diff --git a/backend/jest.integration.coverage.json b/backend/jest.integration.coverage.json new file mode 100644 index 00000000..08ea8df1 --- /dev/null +++ b/backend/jest.integration.coverage.json @@ -0,0 +1,37 @@ +{ + "moduleFileExtensions": ["js", "json", "ts"], + "coveragePathIgnorePatterns": [ + ".module.ts", + ".entity.ts", + "main.ts" + ], + "rootDir": "./", + "testMatch": ["/test/integration/**/*.spec.ts"], + "transform": { + "^.+\\.(t|j)s$": "ts-jest" + }, + "transformIgnorePatterns": ["node_modules/(?!(uuid)/)"], + "moduleNameMapper": { + "^src/(.*)$": "/src/$1" + }, + "collectCoverageFrom": [ + "src/**/adapters/in/**/*.ts", + "src/**/application/services/**/*.ts" + ], + "coverageDirectory": "test/coverage", + "testEnvironment": "node", + "setupFilesAfterEnv": ["/src/jest.setup.ts"], + "reporters": [ + "default", + [ + "jest-html-reporters", + { + "pageTitle": "Integration Test Report", + "publicPath": "./test/unit/coverage", + "filename": "jest-integration-report.html", + "expand": false, + "hideIcon": true + } + ] + ] +} diff --git a/backend/package.json b/backend/package.json index 01ca2453..d35105fe 100644 --- a/backend/package.json +++ b/backend/package.json @@ -15,7 +15,7 @@ "lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix", "test": "jest", "test:watch": "jest --watch", - "test:cov": "jest --coverage", + "test:cov": "node ./scripts/test-cov.mjs", "test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand", "test:e2e": "jest --config ./test/jest-e2e.json" }, diff --git a/backend/scripts/test-cov.mjs b/backend/scripts/test-cov.mjs new file mode 100644 index 00000000..342b965e --- /dev/null +++ b/backend/scripts/test-cov.mjs @@ -0,0 +1,28 @@ +import { spawnSync } from 'node:child_process'; + +const args = process.argv.slice(2); +const isIntegrationCoverageRun = args.some( + (arg) => arg === 'integration' || arg.includes('integration'), +); +const isE2ECoverageRun = args.some( + (arg) => arg === 'e2e' || arg.includes('e2e'), +); + +const jestArgs = ['--coverage', ...args]; + +if (isE2ECoverageRun) { + jestArgs.unshift('--config', './test/jest-e2e.json'); +} else if (isIntegrationCoverageRun) { + jestArgs.unshift('--config', './jest.integration.coverage.json'); +} + +const result = spawnSync('npx', ['jest', ...jestArgs], { + stdio: 'inherit', + shell: process.platform === 'win32', +}); + +if (typeof result.status === 'number') { + process.exit(result.status); +} + +process.exit(1); diff --git a/backend/src/alarms/adapters/in/alarm-events.controller.ts b/backend/src/alarms/adapters/in/alarm-events.controller.ts index 9b6496ea..11206d27 100644 --- a/backend/src/alarms/adapters/in/alarm-events.controller.ts +++ b/backend/src/alarms/adapters/in/alarm-events.controller.ts @@ -8,13 +8,13 @@ import { Patch, UseGuards, } from '@nestjs/common'; -import { ApiOkResponse } from '@nestjs/swagger'; +import { ApiBearerAuth, ApiOkResponse } from '@nestjs/swagger'; import { plainToInstance } from 'class-transformer'; import { ResolveAlarmEventCmd } from '../../application/commands/resolve-alarm-event-cmd'; import { RESOLVE_ALARM_EVENT_USE_CASE, ResolveAlarmEventUseCase, -} from '../../application/ports/in/resolve-active-alarm.use-case'; +} from '../../application/ports/in/resolve-alarm-event.use-case'; import { GetAllManagedAlarmEventsByUserIdResDto } from '../../infrastructure/dtos/out/get-all-managed-alarm-events-by-user-id-res-dto'; import { GET_ALL_MANAGED_ALARM_EVENTS_BY_USER_ID_USE_CASE, @@ -59,6 +59,7 @@ export class AlarmEventsController { ) {} @ApiOkResponse({ type: GetAlarmEventByIdResDto }) + @ApiBearerAuth('access-token') @UseGuards(UserGuard) @Get('/:id') async getAlarmEventById( @@ -74,6 +75,7 @@ export class AlarmEventsController { type: GetAllManagedAlarmEventsByUserIdResDto, isArray: true, }) + @ApiBearerAuth('access-token') @UseGuards(UserGuard) @Get('managed/:userId/:limit/:offset') async getAllManagedAlarmEventsByUserId( @@ -95,6 +97,7 @@ export class AlarmEventsController { type: GetAllUnmanagedAlarmEventsByUserIdResDto, isArray: true, }) + @ApiBearerAuth('access-token') @UseGuards(UserGuard) @Get('unmanaged/:userId/:limit/:offset') async getAllUnmanagedAlarmEventsByUserId( @@ -113,6 +116,7 @@ export class AlarmEventsController { } @ApiOkResponse({ type: GetAllAlarmEventsResDto, isArray: true }) + @ApiBearerAuth('access-token') @UseGuards(UserGuard) @Get('/:limit/:offset') async getAllAlarmEvents( @@ -125,6 +129,7 @@ export class AlarmEventsController { return plainToInstance(GetAllAlarmEventsResDto, alarmEvents); } + @ApiBearerAuth('access-token') @Patch('/resolve') @UseGuards(UserGuard) async resolveAlarmEvent(@Body() req: ResolveAlarmEventReqDto): Promise { diff --git a/backend/src/alarms/adapters/in/alarm-rules.controller.ts b/backend/src/alarms/adapters/in/alarm-rules.controller.ts index ab71adf5..677e87c2 100644 --- a/backend/src/alarms/adapters/in/alarm-rules.controller.ts +++ b/backend/src/alarms/adapters/in/alarm-rules.controller.ts @@ -9,7 +9,7 @@ import { Inject, UseGuards, } from '@nestjs/common'; -import { ApiOkResponse } from '@nestjs/swagger'; +import { ApiBearerAuth, ApiOkResponse } from '@nestjs/swagger'; import { CreateAlarmRuleCmd } from '../../application/commands/create-alarm-rule.cmd'; import { UpdateAlarmRuleCmd } from '../../application/commands/update-alarm-rule.cmd'; import { @@ -48,7 +48,7 @@ import { AdminGuard } from '../../../guard/admin/admin.guard'; export class AlarmRulesController { constructor( @Inject(CREATE_ALARM_RULE_USE_CASE) - private readonly createAlarmUseCase: CreateAlarmRuleUseCase, + private readonly createAlarmRuleUseCase: CreateAlarmRuleUseCase, @Inject(DELETE_ALARM_RULE_USE_CASE) private readonly deleteAlarmRuleUseCase: DeleteAlarmRuleUseCase, @Inject(GET_ALARM_RULE_BY_ID_USE_CASE) @@ -60,12 +60,13 @@ export class AlarmRulesController { ) {} @ApiOkResponse({ type: CreateAlarmRuleResDto }) + @ApiBearerAuth('access-token') @UseGuards(UserGuard, AdminGuard) @Post() async createAlarmRule( @Body() req: CreateAlarmRuleReqDto, ): Promise { - const alarm = await this.createAlarmUseCase.createAlarmRule( + const alarm = await this.createAlarmRuleUseCase.createAlarmRule( new CreateAlarmRuleCmd( req.name, req.datapointId, @@ -82,6 +83,7 @@ export class AlarmRulesController { } @ApiOkResponse({ type: GetAllAlarmRulesResDto, isArray: true }) + @ApiBearerAuth('access-token') @UseGuards(UserGuard) @Get() async getAllAlarmRules(): Promise { @@ -90,6 +92,7 @@ export class AlarmRulesController { } @ApiOkResponse({ type: GetAlarmRuleByIdResDto }) + @ApiBearerAuth('access-token') @UseGuards(UserGuard) @Get(':id') async getAlarmRuleById( @@ -102,6 +105,7 @@ export class AlarmRulesController { } @ApiOkResponse({ type: UpdateAlarmRuleResDto }) + @ApiBearerAuth('access-token') @UseGuards(UserGuard, AdminGuard) @Put(':id') async updateAlarmRule( @@ -124,6 +128,7 @@ export class AlarmRulesController { } @Delete(':id') + @ApiBearerAuth('access-token') @UseGuards(UserGuard, AdminGuard) async deleteAlarmRule(@Param('id') id: string): Promise { return this.deleteAlarmRuleUseCase.deleteAlarmRule( diff --git a/backend/src/alarms/adapters/out/alarm-events-persistence-adapter.ts b/backend/src/alarms/adapters/out/alarm-events-persistence-adapter.ts index cf4f4e23..8c0a6a37 100644 --- a/backend/src/alarms/adapters/out/alarm-events-persistence-adapter.ts +++ b/backend/src/alarms/adapters/out/alarm-events-persistence-adapter.ts @@ -16,7 +16,7 @@ import { AlarmEventsRepository, } from '../../application/repository/alarm-events-repository.interface'; import { AlarmEvent } from '../../domain/models/alarm-event.model'; -import { GetWardAlarmEventCmd } from 'src/alarms/application/commands/get-ward-alarm-event.command'; +import { GetWardAlarmEventCmd } from 'src/alarms/application/commands/get-ward-alarm-event-cmd'; export class AlarmEventsPersistenceAdapter implements diff --git a/backend/src/alarms/adapters/out/alarm-rules-persistence-adapter.ts b/backend/src/alarms/adapters/out/alarm-rules-persistence-adapter.ts index d0f66fd0..0c7eb759 100644 --- a/backend/src/alarms/adapters/out/alarm-rules-persistence-adapter.ts +++ b/backend/src/alarms/adapters/out/alarm-rules-persistence-adapter.ts @@ -15,7 +15,6 @@ import { } from '../../application/repository/alarm-rules-repository.interface'; import { CheckAlarmRuleCmd } from 'src/alarms/application/commands/check-alarm-rule-cmd'; import { CheckAlarm } from 'src/alarms/domain/models/check-alarm'; -import { CheckAlarmEntity } from 'src/alarms/infrastructure/entities/check-alarm-entity'; export class AlarmRulesPersistenceAdapter implements @@ -168,7 +167,10 @@ export class AlarmRulesPersistenceAdapter return null; } - return CheckAlarmEntity.toDomain(alarmRule); + if (alarmRule.ward_id == null) + return null; + + return new CheckAlarm(alarmRule.alarm_rule_id, alarmRule.ward_id, alarmRule.alarm_event_id ?? undefined); } private normalizeValue(value: string): string { diff --git a/backend/src/alarms/alarms.module.ts b/backend/src/alarms/alarms.module.ts index 37f9605b..31700c98 100644 --- a/backend/src/alarms/alarms.module.ts +++ b/backend/src/alarms/alarms.module.ts @@ -1,8 +1,8 @@ import { Module } from '@nestjs/common'; import { AlarmRulesController } from './adapters/in/alarm-rules.controller'; import { AlarmEventsController } from './adapters/in/alarm-events.controller'; -import { AlarmRuleService } from './application/services/alarm-rule.service'; -import { RESOLVE_ALARM_EVENT_USE_CASE } from './application/ports/in/resolve-active-alarm.use-case'; +import { AlarmRulesService } from './application/services/alarm-rules.service'; +import { RESOLVE_ALARM_EVENT_USE_CASE } from './application/ports/in/resolve-alarm-event.use-case'; import { CREATE_ALARM_RULE_USE_CASE } from './application/ports/in/create-alarm-rule.use-case'; import { DELETE_ALARM_RULE_USE_CASE } from './application/ports/in/delete-alarm-rule.use-case'; import { GET_ALARM_RULE_BY_ID_USE_CASE } from './application/ports/in/get-alarm-rule-by-id.use-case'; @@ -39,21 +39,21 @@ import { AlarmRulesPersistenceAdapter } from './adapters/out/alarm-rules-persist imports: [GuardModule], controllers: [AlarmRulesController, AlarmEventsController], providers: [ - { provide: CREATE_ALARM_RULE_USE_CASE, useClass: AlarmRuleService }, + { provide: CREATE_ALARM_RULE_USE_CASE, useClass: AlarmRulesService }, { provide: CREATE_ALARM_RULE_PORT, useClass: AlarmRulesPersistenceAdapter }, - { provide: DELETE_ALARM_RULE_USE_CASE, useClass: AlarmRuleService }, + { provide: DELETE_ALARM_RULE_USE_CASE, useClass: AlarmRulesService }, { provide: DELETE_ALARM_RULE_PORT, useClass: AlarmRulesPersistenceAdapter }, - { provide: GET_ALL_ALARM_RULES_USE_CASE, useClass: AlarmRuleService }, + { provide: GET_ALL_ALARM_RULES_USE_CASE, useClass: AlarmRulesService }, { provide: GET_ALL_ALARM_RULES_PORT, useClass: AlarmRulesPersistenceAdapter, }, - { provide: GET_ALARM_RULE_BY_ID_USE_CASE, useClass: AlarmRuleService }, + { provide: GET_ALARM_RULE_BY_ID_USE_CASE, useClass: AlarmRulesService }, { provide: GET_ALARM_RULE_BY_ID_PORT, useClass: AlarmRulesPersistenceAdapter, }, - { provide: UPDATE_ALARM_RULE_USE_CASE, useClass: AlarmRuleService }, + { provide: UPDATE_ALARM_RULE_USE_CASE, useClass: AlarmRulesService }, { provide: UPDATE_ALARM_RULE_PORT, useClass: AlarmRulesPersistenceAdapter, @@ -116,7 +116,7 @@ import { AlarmRulesPersistenceAdapter } from './adapters/out/alarm-rules-persist }, { provide: CHECK_ALARM_RULE_USECASE, - useClass: AlarmRuleService, + useClass: AlarmRulesService, }, { provide: GET_WARD_ALARM_EVENT_PORT, diff --git a/backend/src/alarms/application/commands/get-ward-alarm-event-cmd.ts b/backend/src/alarms/application/commands/get-ward-alarm-event-cmd.ts new file mode 100644 index 00000000..42c974c7 --- /dev/null +++ b/backend/src/alarms/application/commands/get-ward-alarm-event-cmd.ts @@ -0,0 +1,5 @@ +export class GetWardAlarmEventCmd { + constructor( + public alarmId: string + ){} +} diff --git a/backend/src/alarms/application/commands/get-ward-alarm-event.command.ts b/backend/src/alarms/application/commands/get-ward-alarm-event.command.ts deleted file mode 100644 index 15253cd4..00000000 --- a/backend/src/alarms/application/commands/get-ward-alarm-event.command.ts +++ /dev/null @@ -1,3 +0,0 @@ -export interface GetWardAlarmEventCmd { - alarmId: string; -} diff --git a/backend/src/alarms/application/commands/trigger-active-alarm.cmd.ts b/backend/src/alarms/application/commands/trigger-active-alarm.cmd.ts deleted file mode 100644 index 150ca481..00000000 --- a/backend/src/alarms/application/commands/trigger-active-alarm.cmd.ts +++ /dev/null @@ -1,7 +0,0 @@ -export class TriggerActiveAlarmCmd { - constructor( - public readonly alarmId: string, - public readonly alarmName: string, - public readonly dangerSignal: string, - ) {} -} diff --git a/backend/src/alarms/application/ports/in/resolve-active-alarm.use-case.ts b/backend/src/alarms/application/ports/in/resolve-alarm-event.use-case.ts similarity index 100% rename from backend/src/alarms/application/ports/in/resolve-active-alarm.use-case.ts rename to backend/src/alarms/application/ports/in/resolve-alarm-event.use-case.ts diff --git a/backend/src/alarms/application/ports/in/trigger-active-alarm.use-case.ts b/backend/src/alarms/application/ports/in/trigger-active-alarm.use-case.ts deleted file mode 100644 index 255526ae..00000000 --- a/backend/src/alarms/application/ports/in/trigger-active-alarm.use-case.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { TriggerActiveAlarmCmd } from '../../commands/trigger-active-alarm.cmd'; - -export interface TriggerActiveAlarmUseCase { - triggerActiveAlarm(cmd: TriggerActiveAlarmCmd): Promise; -} - -export const TRIGGER_ACTIVE_ALARM_USE_CASE = 'TRIGGER_ACTIVE_ALARM_USE_CASE'; diff --git a/backend/src/alarms/application/ports/out/get-ward-alarm-event.port.ts b/backend/src/alarms/application/ports/out/get-ward-alarm-event.port.ts index f8602e89..989278dc 100644 --- a/backend/src/alarms/application/ports/out/get-ward-alarm-event.port.ts +++ b/backend/src/alarms/application/ports/out/get-ward-alarm-event.port.ts @@ -1,4 +1,4 @@ -import { GetWardAlarmEventCmd } from '../../commands/get-ward-alarm-event.command'; +import { GetWardAlarmEventCmd } from '../../commands/get-ward-alarm-event-cmd'; export interface GetWardAlarmEventPort { getWardAlarmEvent(cmd: GetWardAlarmEventCmd): Promise; diff --git a/backend/src/alarms/application/services/alarm-events.service.ts b/backend/src/alarms/application/services/alarm-events.service.ts index 417dba3f..27caec2d 100644 --- a/backend/src/alarms/application/services/alarm-events.service.ts +++ b/backend/src/alarms/application/services/alarm-events.service.ts @@ -1,6 +1,6 @@ import { Inject, Injectable } from '@nestjs/common'; import { ResolveAlarmEventCmd } from '../commands/resolve-alarm-event-cmd'; -import { ResolveAlarmEventUseCase } from '../ports/in/resolve-active-alarm.use-case'; +import { ResolveAlarmEventUseCase } from '../ports/in/resolve-alarm-event.use-case'; import { RESOLVE_ALARM_EVENT_PORT, ResolveAlarmEventPort, @@ -46,6 +46,8 @@ export class AlarmEventsService ResolveAlarmEventUseCase { constructor( + private readonly emitter: EventEmitter2, + @Inject(GET_ALL_MANAGED_ALARM_EVENTS_BY_USER_ID_PORT) private readonly getAllManagedAlarmEventsByUserIdPort: GetAllManagedAlarmEventsByUserIdPort, @@ -63,8 +65,6 @@ export class AlarmEventsService @Inject(GET_WARD_ALARM_EVENT_PORT) private readonly getWardAlarmEventPort: GetWardAlarmEventPort, - - private readonly emitter: EventEmitter2, ) {} getAlarmEventById(req: GetAlarmEventByIdCmd): Promise { diff --git a/backend/src/alarms/application/services/alarm-rule.service.ts b/backend/src/alarms/application/services/alarm-rules.service.ts similarity index 90% rename from backend/src/alarms/application/services/alarm-rule.service.ts rename to backend/src/alarms/application/services/alarm-rules.service.ts index 4e3e408a..f7f57daf 100644 --- a/backend/src/alarms/application/services/alarm-rule.service.ts +++ b/backend/src/alarms/application/services/alarm-rules.service.ts @@ -43,9 +43,10 @@ import { CreateAlarmEventCmd } from '../commands/create-alarm-event-cmd'; import { EventEmitter2 } from '@nestjs/event-emitter'; import { CheckAlarmRuleResDto } from 'src/alarms/infrastructure/dtos/out/check-alarm-rule-res-dto'; import { CheckAlarm } from '../../domain/models/check-alarm'; +import { plainToInstance } from 'class-transformer'; @Injectable() -export class AlarmRuleService +export class AlarmRulesService implements CreateAlarmRuleUseCase, GetAlarmRuleByIdUseCase, @@ -54,10 +55,11 @@ export class AlarmRuleService DeleteAlarmRuleUseCase, CheckAlarmRuleUseCase { - private readonly logger = new Logger(AlarmRuleService.name); + private readonly logger = new Logger(AlarmRulesService.name); constructor( private readonly emitter: EventEmitter2, + @Inject(GET_ALL_ALARM_RULES_PORT) private readonly getAllAlarmRulesPort: GetAllAlarmRulesPort, @@ -115,11 +117,11 @@ export class AlarmRuleService } this.logger.log( - `[checkAlarmRule] Match found alarmRuleId=${checkAlarm.alarm_rule_id} wardId=${checkAlarm.ward_id}`, + `[checkAlarmRule] Match found alarmRuleId=${checkAlarm.alarmRuleId} wardId=${checkAlarm.wardId}`, ); const alarmEventId = await this.createAlarmEventPort.createAlarmEvent( - new CreateAlarmEventCmd(checkAlarm.alarm_rule_id, req.activationTime), + new CreateAlarmEventCmd(checkAlarm.alarmRuleId, req.activationTime), ); this.logger.log( @@ -127,18 +129,14 @@ export class AlarmRuleService ); const checkAlarmWithEventId = new CheckAlarm( - checkAlarm.alarm_rule_id, - checkAlarm.ward_id, + checkAlarm.alarmRuleId, + checkAlarm.wardId, alarmEventId, ); - const checkAlarmDto: CheckAlarmRuleResDto = CheckAlarmRuleResDto.fromDomain( - checkAlarmWithEventId, - ); - - this.emitter.emit('alarm.activated', checkAlarmDto); + this.emitter.emit('alarm.activated', plainToInstance(CheckAlarmRuleResDto, checkAlarmWithEventId)); this.logger.log( - `[checkAlarmRule] Event emitted alarm.activated alarmEventId=${checkAlarmDto.alarmEventId}`, + `[checkAlarmRule] Event emitted alarm.activated alarmEventId=${checkAlarmWithEventId.alarmEventId}`, ); } } diff --git a/backend/src/alarms/domain/models/alarm-event.model.ts b/backend/src/alarms/domain/models/alarm-event.model.ts index 0fc8cc57..76083680 100644 --- a/backend/src/alarms/domain/models/alarm-event.model.ts +++ b/backend/src/alarms/domain/models/alarm-event.model.ts @@ -2,14 +2,50 @@ import { AlarmPriority } from './alarm-priority.enum'; export class AlarmEvent { constructor( - public readonly id: string, - public readonly position: string, - public readonly alarmRuleId: string, - public readonly alarmName: string, - public readonly priority: AlarmPriority, - public readonly activationTime: Date, - public readonly resolutionTime: Date | null, - public readonly userId: number | null, - public readonly userUsername: string | null, + private readonly id: string, + private readonly position: string, + private readonly alarmRuleId: string, + private readonly alarmName: string, + private readonly priority: AlarmPriority, + private readonly activationTime: Date, + private readonly resolutionTime: Date | null, + private readonly userId: number | null, + private readonly userUsername: string | null, ) {} + + getId(): string{ + return this.id; + } + + getPosition(): string{ + return this.position; + } + + getAlarmRuleId(): string{ + return this.alarmRuleId; + } + + getAlarmName(): string{ + return this.alarmName; + } + + getPriority(): AlarmPriority{ + return this.priority; + } + + getActivationTime(): Date{ + return this.activationTime; + } + + getResolutionTime(): Date | null{ + return this.resolutionTime; + } + + getUserId(): number | null { + return this.userId; + } + + getUserUsername(): string | null { + return this.userUsername; + } } diff --git a/backend/src/alarms/domain/models/alarm-rule.model.ts b/backend/src/alarms/domain/models/alarm-rule.model.ts index 79ee8cee..b23aa818 100644 --- a/backend/src/alarms/domain/models/alarm-rule.model.ts +++ b/backend/src/alarms/domain/models/alarm-rule.model.ts @@ -2,14 +2,50 @@ import { AlarmPriority } from './alarm-priority.enum'; export class AlarmRule { constructor( - public readonly id: string, - public readonly position: string, - public readonly name: string, - public readonly thresholdOperator: string, - public readonly thresholdValue: string, - public readonly priority: AlarmPriority, - public readonly armingTime: Date, - public readonly dearmingTime: Date, - public readonly isArmed: boolean, + private readonly id: string, + private readonly position: string, + private readonly name: string, + private readonly thresholdOperator: string, + private readonly thresholdValue: string, + private readonly priority: AlarmPriority, + private readonly armingTime: Date, + private readonly dearmingTime: Date, + private readonly isArmed: boolean, ) {} + + getId(): string{ + return this.id; + } + + getPosition(): string{ + return this.position; + } + + getName(): string { + return this.name; + } + + getThresholdOperator(): string { + return this.thresholdOperator; + } + + getThresholdValue(): string { + return this.thresholdValue; + } + + getPriority(): AlarmPriority { + return this.priority; + } + + getArmingTime(): Date { + return this.armingTime + } + + getDearmingTime(): Date { + return this.dearmingTime; + } + + getIsArmed(): boolean { + return this.isArmed; + } } diff --git a/backend/src/alarms/domain/models/check-alarm.ts b/backend/src/alarms/domain/models/check-alarm.ts index c2b13c41..0b6ea6e4 100644 --- a/backend/src/alarms/domain/models/check-alarm.ts +++ b/backend/src/alarms/domain/models/check-alarm.ts @@ -1,7 +1,7 @@ export class CheckAlarm { constructor( - public readonly alarm_rule_id: string, - public readonly ward_id: number, - public readonly alarm_event_id?: string, + public readonly alarmRuleId: string, + public readonly wardId: number, + public readonly alarmEventId?: string, ) {} } diff --git a/backend/src/alarms/infrastructure/dtos/out/check-alarm-rule-res-dto.ts b/backend/src/alarms/infrastructure/dtos/out/check-alarm-rule-res-dto.ts index afe3204e..1de31705 100644 --- a/backend/src/alarms/infrastructure/dtos/out/check-alarm-rule-res-dto.ts +++ b/backend/src/alarms/infrastructure/dtos/out/check-alarm-rule-res-dto.ts @@ -1,5 +1,4 @@ import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger'; -import { CheckAlarm } from '../../../domain/models/check-alarm'; export class CheckAlarmRuleResDto { @ApiProperty() @@ -10,16 +9,4 @@ export class CheckAlarmRuleResDto { @ApiPropertyOptional({ example: 'a2c89b49-904a-4f15-9015-4f872f84f4df' }) alarmEventId?: string; - - static fromDomain(checkAlarm: CheckAlarm): CheckAlarmRuleResDto { - const dto = new CheckAlarmRuleResDto(); - dto.alarmRuleId = checkAlarm.alarm_rule_id; - dto.wardId = checkAlarm.ward_id; - dto.alarmEventId = checkAlarm.alarm_event_id; - return dto; - } - - static toDomain(dto: CheckAlarmRuleResDto): CheckAlarm { - return new CheckAlarm(dto.alarmRuleId, dto.wardId, dto.alarmEventId); - } } diff --git a/backend/src/alarms/infrastructure/entities/check-alarm-entity.ts b/backend/src/alarms/infrastructure/entities/check-alarm-entity.ts index 88c0bbb9..1fef92a3 100644 --- a/backend/src/alarms/infrastructure/entities/check-alarm-entity.ts +++ b/backend/src/alarms/infrastructure/entities/check-alarm-entity.ts @@ -1,21 +1,7 @@ -import { CheckAlarm } from 'src/alarms/domain/models/check-alarm'; - export class CheckAlarmEntity { constructor( public readonly alarm_rule_id: string, public readonly ward_id: number | null, public readonly alarm_event_id?: string | null, ) {} - - static toDomain(entity: CheckAlarmEntity): CheckAlarm | null { - if (entity.ward_id == null) { - return null; - } - - return new CheckAlarm( - entity.alarm_rule_id, - entity.ward_id, - entity.alarm_event_id ?? undefined, - ); - } -} +} \ No newline at end of file diff --git a/backend/src/analytics/adapters/in/analytics.controller.ts b/backend/src/analytics/adapters/in/analytics.controller.ts index 503364ae..a85ff3fe 100644 --- a/backend/src/analytics/adapters/in/analytics.controller.ts +++ b/backend/src/analytics/adapters/in/analytics.controller.ts @@ -4,6 +4,7 @@ import { GetAnalyticsUseCase } from '../../application/ports/in/get-analytics.us import { GetAnalyticsDto } from '../../infrastructure/dtos/get-analytics.dto'; import { PlotDto } from '../../infrastructure/dtos/plot.dto'; import { + ApiBearerAuth, ApiInternalServerErrorResponse, ApiOkResponse, ApiOperation, @@ -21,6 +22,7 @@ export class AnalyticsController { private readonly getAnalyticsUseCase: GetAnalyticsUseCase, ) {} + @ApiBearerAuth('access-token') @UseGuards(UserGuard, AdminGuard) @Get('/:plantId') @ApiOperation({ diff --git a/backend/src/app.controller.ts b/backend/src/app.controller.ts deleted file mode 100644 index a4043b66..00000000 --- a/backend/src/app.controller.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { Controller, Get } from '@nestjs/common'; - -@Controller() -export class AppController { - @Get() - getHello(): string { - return 'Hello World!'; - } -} diff --git a/backend/src/app.module.ts b/backend/src/app.module.ts index b1f8225f..f93a7a5f 100644 --- a/backend/src/app.module.ts +++ b/backend/src/app.module.ts @@ -15,7 +15,6 @@ import { UsersModule } from './users/users.module'; import { ValidationModule } from './validation/validation.module'; import { GuardModule } from './guard/guard.module'; import { NotificationModule } from './notifications/notification.module'; -import { AppController } from './app.controller'; @Module({ imports: [ @@ -40,7 +39,7 @@ import { AppController } from './app.controller'; ValidationModule, GuardModule, ], - controllers: [AppController], + controllers: [], providers: [], }) export class AppModule {} diff --git a/backend/src/auth/adapters/out/change-credentials-adapter.ts b/backend/src/auth/adapters/out/change-credentials-adapter.ts deleted file mode 100644 index 5e88214c..00000000 --- a/backend/src/auth/adapters/out/change-credentials-adapter.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { Inject } from '@nestjs/common'; -import { ChangeCredentialsPort } from '../../application/ports/out/change-credentials-port.interface'; -import { ChangeCredentialsCmd } from '../../application/commands/change-credentials-cmd'; -import { ChangeCredentialsRepository } from '../../application/repository/change-credentials-repository.interface'; - -export class ChangeCredentialsAdapter implements ChangeCredentialsPort { - constructor( - @Inject('CHANGE_CREDENTIALS_REPOSITORY') - private readonly changeCredentialsRepository: ChangeCredentialsRepository, - ) {} - - changeCredentials(req: ChangeCredentialsCmd): Promise { - return this.changeCredentialsRepository.changeCredentials( - req.username, - req.newPassword, - req.firstAccess, - ); - } -} - -export const CHANGE_CREDENTIALS_PORT = 'CHANGE_CREDENTIALS_PORT'; diff --git a/backend/src/auth/adapters/out/check-credentials-adapter.ts b/backend/src/auth/adapters/out/check-credentials-adapter.ts deleted file mode 100644 index a2d58a51..00000000 --- a/backend/src/auth/adapters/out/check-credentials-adapter.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { Inject } from '@nestjs/common'; -import { CheckCredentialsCmd } from '../../application/commands/check-credentials-cmd'; -import { CheckCredentialsPort } from '../../application/ports/out/check-credentials-port.interface'; -import { Payload } from '../../domain/payload'; -import { - CHECK_CREDENTIALS_REPOSITORY, - CheckCredentialsRepository, -} from '../../application/repository/check-credentials-repository.interface'; -import { PayloadEntity } from '../../infrastructure/entities/payload-entity'; - -export class CheckCredentialsAdapter implements CheckCredentialsPort { - constructor( - @Inject(CHECK_CREDENTIALS_REPOSITORY) - private readonly checkCredentialsRepository: CheckCredentialsRepository, - ) {} - - async checkCredentials(req: CheckCredentialsCmd): Promise { - const credentials: PayloadEntity = - await this.checkCredentialsRepository.checkCredentials( - req.username, - req.password, - ); - return new Payload( - credentials.id, - credentials.username, - credentials.role, - credentials.firstAccess, - ); - } -} - -export const CHECK_CREDENTIALS_PORT = 'CHECK_CREDENTIALS_PORT'; diff --git a/backend/src/auth/adapters/out/credentials-persistence-adapter.ts b/backend/src/auth/adapters/out/credentials-persistence-adapter.ts new file mode 100644 index 00000000..77a9e6ba --- /dev/null +++ b/backend/src/auth/adapters/out/credentials-persistence-adapter.ts @@ -0,0 +1,36 @@ +import { Inject } from '@nestjs/common'; +import { ChangeCredentialsPort } from '../../application/ports/out/change-credentials-port.interface'; +import { ChangeCredentialsCmd } from '../../application/commands/change-credentials-cmd'; +import { CREDENTIALS_REPOSITORY, CredentialsRepository } from 'src/auth/application/repository/credentials-repository.interface'; +import { CheckCredentialsCmd } from 'src/auth/application/commands/check-credentials-cmd'; +import { Payload } from 'src/auth/domain/payload'; +import { PayloadEntity } from 'src/auth/infrastructure/entities/payload-entity'; + +export class CredentialsPersistenceAdapter implements ChangeCredentialsPort { + constructor( + @Inject(CREDENTIALS_REPOSITORY) + private readonly credentialsRepository: CredentialsRepository, + ) {} + + changeCredentials(req: ChangeCredentialsCmd): Promise { + return this.credentialsRepository.changeCredentials( + req.username, + req.newPassword, + req.firstAccess, + ); + } + + async checkCredentials(req: CheckCredentialsCmd): Promise { + const credentials: PayloadEntity = + await this.credentialsRepository.checkCredentials( + req.username, + req.password, + ); + return new Payload( + credentials.id, + credentials.username, + credentials.role, + credentials.firstAccess, + ); + } +} diff --git a/backend/src/auth/adapters/out/extract-from-access-token-adapter.ts b/backend/src/auth/adapters/out/extract-from-access-token-adapter.ts deleted file mode 100644 index 244edbf9..00000000 --- a/backend/src/auth/adapters/out/extract-from-access-token-adapter.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { Inject } from '@nestjs/common'; -import { ExtractFromAccessTokenCmd } from '../../application/commands/extract-from-access-token-cmd'; -import { ExtractFromAccessTokenPort } from '../../application/ports/out/extract-from-access-token-port.interface'; -import { Payload } from '../../domain/payload'; -import { JWT_ACCESS_TOKEN_EXTRACTOR } from '../../infrastructure/jwt-token-generator/jwt-token-generator'; -import { JwtAccessTokenExtractor } from '../../application/token/jwt-access-token-extractor.interface'; - -export class ExtractFromAccessTokenAdapter implements ExtractFromAccessTokenPort { - constructor( - @Inject(JWT_ACCESS_TOKEN_EXTRACTOR) - private readonly jwtAccessTokenExtractor: JwtAccessTokenExtractor, - ) {} - - extractFromAccessToken(req: ExtractFromAccessTokenCmd): Payload { - return this.jwtAccessTokenExtractor.extractAccessTokenPayload(req.token); - } -} - -export const EXTRACT_FROM_ACCESS_TOKEN_PORT = 'EXTRACT_FROM_ACCESS_TOKEN_PORT'; diff --git a/backend/src/auth/adapters/out/extract-from-refresh-token-adapter.ts b/backend/src/auth/adapters/out/extract-from-refresh-token-adapter.ts deleted file mode 100644 index 17f2d854..00000000 --- a/backend/src/auth/adapters/out/extract-from-refresh-token-adapter.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { Inject } from '@nestjs/common'; -import { ExtractFromRefreshTokenCmd } from '../../application/commands/extract-from-refresh-token-cmd'; -import { ExtractFromRefreshTokenPort } from '../../application/ports/out/extract-from-refresh-token-port.interface'; -import { Payload } from '../../domain/payload'; -import { JWT_REFRESH_TOKEN_EXTRACTOR } from '../../infrastructure/jwt-token-generator/jwt-token-generator'; -import { JwtRefreshTokenExtractor } from '../../application/token/jwt-refresh-token-extractor.interface'; - -export class ExtractFromRefreshTokenAdapter implements ExtractFromRefreshTokenPort { - constructor( - @Inject(JWT_REFRESH_TOKEN_EXTRACTOR) - private readonly jwtRefreshTokenExtractor: JwtRefreshTokenExtractor, - ) {} - - extractFromRefreshToken(req: ExtractFromRefreshTokenCmd): Payload { - return this.jwtRefreshTokenExtractor.extractRefreshTokenPayload(req.token); - } -} - -export const EXTRACT_FROM_REFRESH_TOKEN_PORT = - 'EXTRACT_FROM_REFRESH_TOKEN_PORT'; diff --git a/backend/src/auth/adapters/out/generate-access-token-adapter.ts b/backend/src/auth/adapters/out/generate-access-token-adapter.ts deleted file mode 100644 index 64d268c2..00000000 --- a/backend/src/auth/adapters/out/generate-access-token-adapter.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { Inject } from '@nestjs/common'; -import { GenerateAccessTokenCmd } from '../../application/commands/generate-access-token-cmd'; -import { GenerateAccessTokenPort } from '../../application/ports/out/generate-access-token-port.interface'; -import { JWT_ACCESS_TOKEN_GENERATOR } from '../../infrastructure/jwt-token-generator/jwt-token-generator'; -import { JwtAccessTokenGenerator } from '../../application/token/jwt-access-token-generator.interface'; - -export class GenerateAccessTokenAdapter implements GenerateAccessTokenPort { - constructor( - @Inject(JWT_ACCESS_TOKEN_GENERATOR) - private readonly jwtAccessTokenGenerator: JwtAccessTokenGenerator, - ) {} - - generateAccessToken(req: GenerateAccessTokenCmd): string { - return this.jwtAccessTokenGenerator.generateAccessToken(req.payload); - } -} - -export const GENERATE_ACCESS_TOKEN_PORT = 'GENERATE_ACCESS_TOKEN_PORT'; diff --git a/backend/src/auth/adapters/out/generate-and-extract-token-adapter.ts b/backend/src/auth/adapters/out/generate-and-extract-token-adapter.ts new file mode 100644 index 00000000..ddcf96f6 --- /dev/null +++ b/backend/src/auth/adapters/out/generate-and-extract-token-adapter.ts @@ -0,0 +1,58 @@ +import { Inject } from '@nestjs/common'; +import { GenerateRefreshTokenCmd } from '../../application/commands/generate-refresh-token-cmd'; +import { GenerateRefreshTokenPort } from '../../application/ports/out/generate-refresh-token-port.interface'; +import { GenerateAccessTokenPort } from 'src/auth/application/ports/out/generate-access-token-port.interface'; +import { GenerateChangePasswordAccessTokenPort } from 'src/auth/application/ports/out/generate-change-password-access-token-port.interface'; +import { GenerateChangePasswordRefreshTokenPort } from 'src/auth/application/ports/out/generate-change-password-refresh-token-port.interface'; +import { GenerateAccessTokenCmd } from 'src/auth/application/commands/generate-access-token-cmd'; +import { JWT_TOKEN_GENERATOR_AND_EXTRACTOR, JwtTokenGeneratorAndExtractor } from 'src/auth/application/token/jwt-token-generator-and-extractor.interface'; +import { GenerateChangePasswordRefreshTokenCmd } from 'src/auth/application/commands/generate-change-password-refresh-token-cmd'; +import { GenerateChangePasswordAccessTokenCmd } from 'src/auth/application/commands/generate-change-password-access-token-cmd'; +import { ExtractFromRefreshTokenCmd } from 'src/auth/application/commands/extract-from-refresh-token-cmd'; +import { ExtractFromAccessTokenCmd } from 'src/auth/application/commands/extract-from-access-token-cmd'; +import { Payload } from 'src/auth/domain/payload'; + +export class GenerateAndExtractTokenAdapter implements + GenerateRefreshTokenPort, + GenerateAccessTokenPort, + GenerateChangePasswordAccessTokenPort, + GenerateChangePasswordRefreshTokenPort { + constructor( + @Inject(JWT_TOKEN_GENERATOR_AND_EXTRACTOR) + private readonly jwtTokenGeneratorAndExtractor: JwtTokenGeneratorAndExtractor, + ) { } + + generateRefreshToken(req: GenerateRefreshTokenCmd): string { + return this.jwtTokenGeneratorAndExtractor.generateRefreshToken(req.payload); + } + + generateAccessToken(req: GenerateAccessTokenCmd): string { + return this.jwtTokenGeneratorAndExtractor.generateAccessToken(req.payload); + } + + generateChangePasswordRefreshToken( + req: GenerateChangePasswordRefreshTokenCmd, + ): string { + return this.jwtTokenGeneratorAndExtractor.generateChangePasswordRefreshToken( + req.payload, + ); + } + + generateChangePasswordAccessToken( + req: GenerateChangePasswordAccessTokenCmd, + ): string { + return this.jwtTokenGeneratorAndExtractor.generateChangePasswordAccessToken( + req.payload, + ); + } + + extractFromAccessToken(req: ExtractFromAccessTokenCmd): Payload { + return this.jwtTokenGeneratorAndExtractor.extractAccessTokenPayload(req.token); + } + + extractFromRefreshToken(req: ExtractFromRefreshTokenCmd): Payload { + return this.jwtTokenGeneratorAndExtractor.extractRefreshTokenPayload(req.token); + } +} + +export const GENERATE_REFRESH_TOKEN_PORT = 'GENERATE_REFRESH_TOKEN_PORT'; diff --git a/backend/src/auth/adapters/out/generate-change-password-access-token-adapter.ts b/backend/src/auth/adapters/out/generate-change-password-access-token-adapter.ts deleted file mode 100644 index 9f323185..00000000 --- a/backend/src/auth/adapters/out/generate-change-password-access-token-adapter.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { Inject } from '@nestjs/common'; -import { GenerateChangePasswordAccessTokenCmd } from '../../application/commands/generate-change-password-access-token-cmd'; -import { GenerateChangePasswordAccessTokenPort } from '../../application/ports/out/generate-change-password-access-token-port.interface'; -import { JwtChangePasswordAccessTokenGenerator } from '../../application/token/jwt-change-password-access-token-generator.interface'; -import { JWT_CHANGE_PASSWORD_ACCESS_TOKEN_GENERATOR } from '../../infrastructure/jwt-token-generator/jwt-token-generator'; - -export class GenerateChangePasswordAccessTokenAdapter implements GenerateChangePasswordAccessTokenPort { - constructor( - @Inject(JWT_CHANGE_PASSWORD_ACCESS_TOKEN_GENERATOR) - private readonly jwtChangePasswordAccessTokenGenerator: JwtChangePasswordAccessTokenGenerator, - ) {} - - generateChangePasswordAccessToken( - req: GenerateChangePasswordAccessTokenCmd, - ): string { - return this.jwtChangePasswordAccessTokenGenerator.generateChangePasswordAccessToken( - req.payload, - ); - } -} - -export const GENERATE_CHANGE_PASSWORD_ACCESS_TOKEN_PORT = - 'GENERATE_CHANGE_PASSWORD_ACCESS_TOKEN_PORT'; diff --git a/backend/src/auth/adapters/out/generate-change-password-refresh-token-adapter.ts b/backend/src/auth/adapters/out/generate-change-password-refresh-token-adapter.ts deleted file mode 100644 index d9f1944f..00000000 --- a/backend/src/auth/adapters/out/generate-change-password-refresh-token-adapter.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { Inject } from '@nestjs/common'; -import { GenerateChangePasswordRefreshTokenCmd } from '../../application/commands/generate-change-password-refresh-token-cmd'; -import { GenerateChangePasswordRefreshTokenPort } from '../../application/ports/out/generate-change-password-refresh-token-port.interface'; -import { JWT_CHANGE_PASSWORD_REFRESH_TOKEN_GENERATOR } from '../../infrastructure/jwt-token-generator/jwt-token-generator'; -import { JwtChangePasswordRefreshTokenGenerator } from '../../application/token/jwt-change-password-refresh-token-generator.interface'; - -export class GenerateChangePasswordRefreshTokenAdapter implements GenerateChangePasswordRefreshTokenPort { - constructor( - @Inject(JWT_CHANGE_PASSWORD_REFRESH_TOKEN_GENERATOR) - private readonly jwtChangePasswordRefreshTokenGenerator: JwtChangePasswordRefreshTokenGenerator, - ) {} - - generateChangePasswordRefreshToken( - req: GenerateChangePasswordRefreshTokenCmd, - ): string { - return this.jwtChangePasswordRefreshTokenGenerator.generateChangePasswordRefreshToken( - req.payload, - ); - } -} - -export const GENERATE_CHANGE_PASSWORD_REFRESH_TOKEN_PORT = - 'GENERATE_CHANGE_PASSWORD_REFRESH_TOKEN_PORT'; diff --git a/backend/src/auth/adapters/out/generate-refresh-token-adapter.ts b/backend/src/auth/adapters/out/generate-refresh-token-adapter.ts deleted file mode 100644 index 2ff4b9ac..00000000 --- a/backend/src/auth/adapters/out/generate-refresh-token-adapter.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { Inject } from '@nestjs/common'; -import { GenerateRefreshTokenCmd } from '../../application/commands/generate-refresh-token-cmd'; -import { GenerateRefreshTokenPort } from '../../application/ports/out/generate-refresh-token-port.interface'; -import { JwtRefreshTokenGenerator } from '../../application/token/jwt-refresh-token-generator.interface'; -import { JWT_REFRESH_TOKEN_GENERATOR } from '../../infrastructure/jwt-token-generator/jwt-token-generator'; - -export class GenerateRefreshTokenAdapter implements GenerateRefreshTokenPort { - constructor( - @Inject(JWT_REFRESH_TOKEN_GENERATOR) - private readonly jwtRefreshTokenGenerator: JwtRefreshTokenGenerator, - ) {} - - generateRefreshToken(req: GenerateRefreshTokenCmd): string { - return this.jwtRefreshTokenGenerator.generateRefreshToken(req.payload); - } -} - -export const GENERATE_REFRESH_TOKEN_PORT = 'GENERATE_REFRESH_TOKEN_PORT'; diff --git a/backend/src/auth/application/ports/out/change-credentials-port.interface.ts b/backend/src/auth/application/ports/out/change-credentials-port.interface.ts index e1db0825..c0a372d5 100644 --- a/backend/src/auth/application/ports/out/change-credentials-port.interface.ts +++ b/backend/src/auth/application/ports/out/change-credentials-port.interface.ts @@ -3,3 +3,5 @@ import { ChangeCredentialsCmd } from '../../commands/change-credentials-cmd'; export interface ChangeCredentialsPort { changeCredentials(req: ChangeCredentialsCmd): Promise; } + +export const CHANGE_CREDENTIALS_PORT = 'CHANGE_CREDENTIALS_PORT'; diff --git a/backend/src/auth/application/ports/out/check-credentials-port.interface.ts b/backend/src/auth/application/ports/out/check-credentials-port.interface.ts index b253ab26..12a0d7b0 100644 --- a/backend/src/auth/application/ports/out/check-credentials-port.interface.ts +++ b/backend/src/auth/application/ports/out/check-credentials-port.interface.ts @@ -4,3 +4,5 @@ import { CheckCredentialsCmd } from '../../commands/check-credentials-cmd'; export interface CheckCredentialsPort { checkCredentials(req: CheckCredentialsCmd): Promise; } + +export const CHECK_CREDENTIALS_PORT = 'CHECK_CREDENTIALS_PORT'; diff --git a/backend/src/auth/application/ports/out/extract-from-access-token-port.interface.ts b/backend/src/auth/application/ports/out/extract-from-access-token-port.interface.ts index 43be7931..278242cd 100644 --- a/backend/src/auth/application/ports/out/extract-from-access-token-port.interface.ts +++ b/backend/src/auth/application/ports/out/extract-from-access-token-port.interface.ts @@ -4,3 +4,5 @@ import { ExtractFromAccessTokenCmd } from '../../commands/extract-from-access-to export interface ExtractFromAccessTokenPort { extractFromAccessToken(req: ExtractFromAccessTokenCmd): Payload; } + +export const EXTRACT_FROM_ACCESS_TOKEN_PORT = 'EXTRACT_FROM_ACCESS_TOKEN_PORT'; diff --git a/backend/src/auth/application/ports/out/extract-from-refresh-token-port.interface.ts b/backend/src/auth/application/ports/out/extract-from-refresh-token-port.interface.ts index 4806811d..f2195b87 100644 --- a/backend/src/auth/application/ports/out/extract-from-refresh-token-port.interface.ts +++ b/backend/src/auth/application/ports/out/extract-from-refresh-token-port.interface.ts @@ -4,3 +4,5 @@ import { ExtractFromRefreshTokenCmd } from '../../commands/extract-from-refresh- export interface ExtractFromRefreshTokenPort { extractFromRefreshToken(req: ExtractFromRefreshTokenCmd): Payload; } + +export const EXTRACT_FROM_REFRESH_TOKEN_PORT = 'EXTRACT_FROM_REFRESH_TOKEN_PORT'; diff --git a/backend/src/auth/application/ports/out/generate-access-token-port.interface.ts b/backend/src/auth/application/ports/out/generate-access-token-port.interface.ts index d5e3d21d..5399dee2 100644 --- a/backend/src/auth/application/ports/out/generate-access-token-port.interface.ts +++ b/backend/src/auth/application/ports/out/generate-access-token-port.interface.ts @@ -3,3 +3,5 @@ import { GenerateAccessTokenCmd } from '../../commands/generate-access-token-cmd export interface GenerateAccessTokenPort { generateAccessToken(req: GenerateAccessTokenCmd): string; } + +export const GENERATE_ACCESS_TOKEN_PORT = 'GENERATE_ACCESS_TOKEN_PORT'; diff --git a/backend/src/auth/application/ports/out/generate-change-password-access-token-port.interface.ts b/backend/src/auth/application/ports/out/generate-change-password-access-token-port.interface.ts index 65bb85e5..301e45af 100644 --- a/backend/src/auth/application/ports/out/generate-change-password-access-token-port.interface.ts +++ b/backend/src/auth/application/ports/out/generate-change-password-access-token-port.interface.ts @@ -5,3 +5,5 @@ export interface GenerateChangePasswordAccessTokenPort { req: GenerateChangePasswordAccessTokenCmd, ): string; } + +export const GENERATE_CHANGE_PASSWORD_ACCESS_TOKEN_PORT = 'GENERATE_CHANGE_PASSWORD_ACCESS_TOKEN_PORT'; diff --git a/backend/src/auth/application/ports/out/generate-change-password-refresh-token-port.interface.ts b/backend/src/auth/application/ports/out/generate-change-password-refresh-token-port.interface.ts index 7fbc1b8c..179bfa8c 100644 --- a/backend/src/auth/application/ports/out/generate-change-password-refresh-token-port.interface.ts +++ b/backend/src/auth/application/ports/out/generate-change-password-refresh-token-port.interface.ts @@ -5,3 +5,5 @@ export interface GenerateChangePasswordRefreshTokenPort { req: GenerateChangePasswordRefreshTokenCmd, ): string; } + +export const GENERATE_CHANGE_PASSWORD_REFRESH_TOKEN_PORT = 'GENERATE_CHANGE_PASSWORD_REFRESH_TOKEN_PORT'; diff --git a/backend/src/auth/application/ports/out/generate-refresh-token-port.interface.ts b/backend/src/auth/application/ports/out/generate-refresh-token-port.interface.ts index cefea64b..754d8d80 100644 --- a/backend/src/auth/application/ports/out/generate-refresh-token-port.interface.ts +++ b/backend/src/auth/application/ports/out/generate-refresh-token-port.interface.ts @@ -3,3 +3,5 @@ import { GenerateRefreshTokenCmd } from '../../commands/generate-refresh-token-c export interface GenerateRefreshTokenPort { generateRefreshToken(req: GenerateRefreshTokenCmd): string; } + +export const GENERATE_REFRESH_TOKEN_PORT = 'GENERATE_REFRESH_TOKEN_PORT'; diff --git a/backend/src/auth/application/repository/change-credentials-repository.interface.ts b/backend/src/auth/application/repository/change-credentials-repository.interface.ts deleted file mode 100644 index 357efa45..00000000 --- a/backend/src/auth/application/repository/change-credentials-repository.interface.ts +++ /dev/null @@ -1,9 +0,0 @@ -export interface ChangeCredentialsRepository { - changeCredentials( - username: string, - newPassword: string, - firstAccess: boolean, - ): Promise; -} - -export const CHANGE_CREDENTIALS_REPOSITORY = 'CHANGE_CREDENTIALS_REPOSITORY'; diff --git a/backend/src/auth/application/repository/check-credentials-repository.interface.ts b/backend/src/auth/application/repository/check-credentials-repository.interface.ts deleted file mode 100644 index bc78e627..00000000 --- a/backend/src/auth/application/repository/check-credentials-repository.interface.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { PayloadEntity } from '../../infrastructure/entities/payload-entity'; - -export interface CheckCredentialsRepository { - checkCredentials(username: string, password: string): Promise; -} - -export const CHECK_CREDENTIALS_REPOSITORY = 'CHECK_CREDENTIALS_REPOSITORY'; diff --git a/backend/src/auth/application/repository/credentials-repository.interface.ts b/backend/src/auth/application/repository/credentials-repository.interface.ts new file mode 100644 index 00000000..46e54f0d --- /dev/null +++ b/backend/src/auth/application/repository/credentials-repository.interface.ts @@ -0,0 +1,12 @@ +import { PayloadEntity } from '../../infrastructure/entities/payload-entity'; + +export interface CredentialsRepository { + checkCredentials(username: string, password: string): Promise; +changeCredentials( + username: string, + newPassword: string, + firstAccess: boolean, + ): Promise; +} + +export const CREDENTIALS_REPOSITORY = 'CREDENTIALS_REPOSITORY'; \ No newline at end of file diff --git a/backend/src/auth/application/services/auth.service.ts b/backend/src/auth/application/services/auth.service.ts index a898046d..4d942797 100644 --- a/backend/src/auth/application/services/auth.service.ts +++ b/backend/src/auth/application/services/auth.service.ts @@ -3,32 +3,24 @@ import { LoginUseCase } from '../ports/in/login-use-case.interface'; import { LoginCmd } from '../commands/login-cmd'; import { RefreshUseCase } from '../ports/in/refresh-use-case.interface'; import { RefreshCmd } from '../commands/refresh-cmd'; -import { CHECK_CREDENTIALS_PORT } from '../../adapters/out/check-credentials-adapter'; -import { CheckCredentialsPort } from '../ports/out/check-credentials-port.interface'; +import { CHECK_CREDENTIALS_PORT, CheckCredentialsPort } from '../ports/out/check-credentials-port.interface'; import { Tokens } from '../../domain/tokens'; import { Payload } from '../../domain/payload'; -import { GENERATE_ACCESS_TOKEN_PORT } from '../../adapters/out/generate-access-token-adapter'; -import { GenerateAccessTokenPort } from '../ports/out/generate-access-token-port.interface'; -import { GENERATE_REFRESH_TOKEN_PORT } from '../../adapters/out/generate-refresh-token-adapter'; -import { GenerateRefreshTokenPort } from '../ports/out/generate-refresh-token-port.interface'; +import { GENERATE_ACCESS_TOKEN_PORT, GenerateAccessTokenPort } from '../ports/out/generate-access-token-port.interface'; +import { GENERATE_REFRESH_TOKEN_PORT, GenerateRefreshTokenPort } from '../ports/out/generate-refresh-token-port.interface'; import { GenerateAccessTokenCmd } from '../commands/generate-access-token-cmd'; import { GenerateRefreshTokenCmd } from '../commands/generate-refresh-token-cmd'; -import { EXTRACT_FROM_ACCESS_TOKEN_PORT } from '../../adapters/out/extract-from-access-token-adapter'; -import { ExtractFromAccessTokenPort } from '../ports/out/extract-from-access-token-port.interface'; -import { EXTRACT_FROM_REFRESH_TOKEN_PORT } from '../../adapters/out/extract-from-refresh-token-adapter'; -import { ExtractFromRefreshTokenPort } from '../ports/out/extract-from-refresh-token-port.interface'; +import { EXTRACT_FROM_ACCESS_TOKEN_PORT, ExtractFromAccessTokenPort } from '../ports/out/extract-from-access-token-port.interface'; +import { EXTRACT_FROM_REFRESH_TOKEN_PORT, ExtractFromRefreshTokenPort } from '../ports/out/extract-from-refresh-token-port.interface'; import { ExtractFromRefreshTokenCmd } from '../commands/extract-from-refresh-token-cmd'; -import { CHANGE_CREDENTIALS_PORT } from '../../adapters/out/change-credentials-adapter'; -import { GENERATE_CHANGE_PASSWORD_ACCESS_TOKEN_PORT } from '../../adapters/out/generate-change-password-access-token-adapter'; -import { GenerateChangePasswordAccessTokenPort } from '../ports/out/generate-change-password-access-token-port.interface'; -import { GENERATE_CHANGE_PASSWORD_REFRESH_TOKEN_PORT } from '../../adapters/out/generate-change-password-refresh-token-adapter'; -import { GenerateChangePasswordRefreshTokenPort } from '../ports/out/generate-change-password-refresh-token-port.interface'; +import { GENERATE_CHANGE_PASSWORD_ACCESS_TOKEN_PORT, GenerateChangePasswordAccessTokenPort } from '../ports/out/generate-change-password-access-token-port.interface'; +import { GENERATE_CHANGE_PASSWORD_REFRESH_TOKEN_PORT, GenerateChangePasswordRefreshTokenPort } from '../ports/out/generate-change-password-refresh-token-port.interface'; import { GenerateChangePasswordAccessTokenCmd } from '../commands/generate-change-password-access-token-cmd'; import { GenerateChangePasswordRefreshTokenCmd } from '../commands/generate-change-password-refresh-token-cmd'; import { FirstLoginUseCase } from '../ports/in/first-login-use-case.interface'; import { FirstLoginCmd } from '../commands/first-login-cmd'; import { CheckCredentialsCmd } from '../commands/check-credentials-cmd'; -import { ChangeCredentialsPort } from '../ports/out/change-credentials-port.interface'; +import { CHANGE_CREDENTIALS_PORT, ChangeCredentialsPort } from '../ports/out/change-credentials-port.interface'; import { ChangeCredentialsCmd } from '../commands/change-credentials-cmd'; import { HASH_PASSWORD_PORT } from '../../adapters/out/hash-password-adapter'; import { HashPasswordPort } from '../ports/out/hash-password-port.interface'; diff --git a/backend/src/auth/application/token/jwt-access-token-extractor.interface.ts b/backend/src/auth/application/token/jwt-access-token-extractor.interface.ts deleted file mode 100644 index 6a9be040..00000000 --- a/backend/src/auth/application/token/jwt-access-token-extractor.interface.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { Payload } from '../../domain/payload'; - -export interface JwtAccessTokenExtractor { - extractAccessTokenPayload(token: string): Payload; -} diff --git a/backend/src/auth/application/token/jwt-access-token-generator.interface.ts b/backend/src/auth/application/token/jwt-access-token-generator.interface.ts deleted file mode 100644 index cdf17648..00000000 --- a/backend/src/auth/application/token/jwt-access-token-generator.interface.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { Payload } from '../../domain/payload'; - -export interface JwtAccessTokenGenerator { - generateAccessToken(payload: Payload): string; -} diff --git a/backend/src/auth/application/token/jwt-change-password-access-token-generator.interface.ts b/backend/src/auth/application/token/jwt-change-password-access-token-generator.interface.ts deleted file mode 100644 index 938aa886..00000000 --- a/backend/src/auth/application/token/jwt-change-password-access-token-generator.interface.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { Payload } from '../../domain/payload'; - -export interface JwtChangePasswordAccessTokenGenerator { - generateChangePasswordAccessToken(payload: Payload): string; -} diff --git a/backend/src/auth/application/token/jwt-change-password-refresh-token-generator.interface.ts b/backend/src/auth/application/token/jwt-change-password-refresh-token-generator.interface.ts deleted file mode 100644 index 7fd78814..00000000 --- a/backend/src/auth/application/token/jwt-change-password-refresh-token-generator.interface.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { Payload } from '../../domain/payload'; - -export interface JwtChangePasswordRefreshTokenGenerator { - generateChangePasswordRefreshToken(payload: Payload): string; -} diff --git a/backend/src/auth/application/token/jwt-refresh-token-extractor.interface.ts b/backend/src/auth/application/token/jwt-refresh-token-extractor.interface.ts deleted file mode 100644 index a1929486..00000000 --- a/backend/src/auth/application/token/jwt-refresh-token-extractor.interface.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { Payload } from '../../domain/payload'; - -export interface JwtRefreshTokenExtractor { - extractRefreshTokenPayload(token: string): Payload; -} diff --git a/backend/src/auth/application/token/jwt-refresh-token-generator.interface.ts b/backend/src/auth/application/token/jwt-refresh-token-generator.interface.ts deleted file mode 100644 index 160e1a41..00000000 --- a/backend/src/auth/application/token/jwt-refresh-token-generator.interface.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { Payload } from '../../domain/payload'; - -export interface JwtRefreshTokenGenerator { - generateRefreshToken(payload: Payload): string; -} diff --git a/backend/src/auth/application/token/jwt-token-generator-and-extractor.interface.ts b/backend/src/auth/application/token/jwt-token-generator-and-extractor.interface.ts new file mode 100644 index 00000000..ece1b17c --- /dev/null +++ b/backend/src/auth/application/token/jwt-token-generator-and-extractor.interface.ts @@ -0,0 +1,12 @@ +import { Payload } from '../../domain/payload'; + +export interface JwtTokenGeneratorAndExtractor { + generateAccessToken(payload: Payload): string; + generateRefreshToken(payload: Payload): string; + generateChangePasswordAccessToken(payload: Payload): string; + generateChangePasswordRefreshToken(payload: Payload): string; + extractAccessTokenPayload(token: string): Payload; + extractRefreshTokenPayload(token: string): Payload; +} + +export const JWT_TOKEN_GENERATOR_AND_EXTRACTOR = 'JWT_TOKEN_GENERATOR_AND_EXTRACTOR'; diff --git a/backend/src/auth/auth.module.ts b/backend/src/auth/auth.module.ts index 1e01cf6c..f04360b9 100644 --- a/backend/src/auth/auth.module.ts +++ b/backend/src/auth/auth.module.ts @@ -7,50 +7,8 @@ import { REFRESH_USE_CASE, } from './application/services/auth.service'; import { - CHECK_CREDENTIALS_PORT, - CheckCredentialsAdapter, -} from './adapters/out/check-credentials-adapter'; -import { - JWT_ACCESS_TOKEN_EXTRACTOR, - JWT_ACCESS_TOKEN_GENERATOR, - JWT_CHANGE_PASSWORD_ACCESS_TOKEN_GENERATOR, - JWT_CHANGE_PASSWORD_REFRESH_TOKEN_GENERATOR, - JWT_REFRESH_TOKEN_EXTRACTOR, - JWT_REFRESH_TOKEN_GENERATOR, - JwtTokenGenerator, -} from './infrastructure/jwt-token-generator/jwt-token-generator'; -import { - GENERATE_ACCESS_TOKEN_PORT, - GenerateAccessTokenAdapter, -} from './adapters/out/generate-access-token-adapter'; -import { - GENERATE_REFRESH_TOKEN_PORT, - GenerateRefreshTokenAdapter, -} from './adapters/out/generate-refresh-token-adapter'; -import { - EXTRACT_FROM_ACCESS_TOKEN_PORT, - ExtractFromAccessTokenAdapter, -} from './adapters/out/extract-from-access-token-adapter'; -import { - EXTRACT_FROM_REFRESH_TOKEN_PORT, - ExtractFromRefreshTokenAdapter, -} from './adapters/out/extract-from-refresh-token-adapter'; -import { CHECK_CREDENTIALS_REPOSITORY } from './application/repository/check-credentials-repository.interface'; -import { CheckCredentialsRepositoryImpl } from './infrastructure/persistence/check-credentials-repository-impl'; -import { CHANGE_CREDENTIALS_REPOSITORY } from './application/repository/change-credentials-repository.interface'; -import { ChangeCredentialsRepositoryImpl } from './infrastructure/persistence/change-credentials-repository-impl'; -import { - GENERATE_CHANGE_PASSWORD_ACCESS_TOKEN_PORT, - GenerateChangePasswordAccessTokenAdapter, -} from './adapters/out/generate-change-password-access-token-adapter'; -import { - GENERATE_CHANGE_PASSWORD_REFRESH_TOKEN_PORT, - GenerateChangePasswordRefreshTokenAdapter, -} from './adapters/out/generate-change-password-refresh-token-adapter'; -import { - CHANGE_CREDENTIALS_PORT, - ChangeCredentialsAdapter, -} from './adapters/out/change-credentials-adapter'; + CredentialsPersistenceAdapter, +} from './adapters/out/credentials-persistence-adapter'; import { PASSWORD_HASHER, Sha512PasswordHasher, @@ -59,6 +17,18 @@ import { HASH_PASSWORD_PORT, HashPasswordAdapter, } from './adapters/out/hash-password-adapter'; +import { CHECK_CREDENTIALS_PORT } from './application/ports/out/check-credentials-port.interface'; +import { CREDENTIALS_REPOSITORY } from './application/repository/credentials-repository.interface'; +import { CredentialsRepositoryImpl } from './infrastructure/persistence/credentials-repository-impl'; +import { CHANGE_CREDENTIALS_PORT } from './application/ports/out/change-credentials-port.interface'; +import { JwtTokenGeneratorAndExtractorImpl } from './infrastructure/jwt-token-generator/jwt-token-generator-and-extractor-impl'; +import { GENERATE_REFRESH_TOKEN_PORT, GenerateAndExtractTokenAdapter } from './adapters/out/generate-and-extract-token-adapter'; +import { GENERATE_ACCESS_TOKEN_PORT } from './application/ports/out/generate-access-token-port.interface'; +import { GENERATE_CHANGE_PASSWORD_ACCESS_TOKEN_PORT } from './application/ports/out/generate-change-password-access-token-port.interface'; +import { GENERATE_CHANGE_PASSWORD_REFRESH_TOKEN_PORT } from './application/ports/out/generate-change-password-refresh-token-port.interface'; +import { EXTRACT_FROM_ACCESS_TOKEN_PORT } from './application/ports/out/extract-from-access-token-port.interface'; +import { EXTRACT_FROM_REFRESH_TOKEN_PORT } from './application/ports/out/extract-from-refresh-token-port.interface'; +import { JWT_TOKEN_GENERATOR_AND_EXTRACTOR } from './application/token/jwt-token-generator-and-extractor.interface'; @Module({ controllers: [AuthController], @@ -77,67 +47,43 @@ import { }, { provide: CHECK_CREDENTIALS_PORT, - useClass: CheckCredentialsAdapter, + useClass: CredentialsPersistenceAdapter, }, { provide: CHANGE_CREDENTIALS_PORT, - useClass: ChangeCredentialsAdapter, + useClass: CredentialsPersistenceAdapter, }, { provide: GENERATE_CHANGE_PASSWORD_ACCESS_TOKEN_PORT, - useClass: GenerateChangePasswordAccessTokenAdapter, + useClass: GenerateAndExtractTokenAdapter, }, { provide: GENERATE_CHANGE_PASSWORD_REFRESH_TOKEN_PORT, - useClass: GenerateChangePasswordRefreshTokenAdapter, - }, - { - provide: JWT_ACCESS_TOKEN_GENERATOR, - useClass: JwtTokenGenerator, + useClass: GenerateAndExtractTokenAdapter, }, { - provide: JWT_REFRESH_TOKEN_GENERATOR, - useClass: JwtTokenGenerator, - }, - { - provide: JWT_CHANGE_PASSWORD_ACCESS_TOKEN_GENERATOR, - useClass: JwtTokenGenerator, - }, - { - provide: JWT_CHANGE_PASSWORD_REFRESH_TOKEN_GENERATOR, - useClass: JwtTokenGenerator, - }, - { - provide: JWT_ACCESS_TOKEN_EXTRACTOR, - useClass: JwtTokenGenerator, - }, - { - provide: JWT_REFRESH_TOKEN_EXTRACTOR, - useClass: JwtTokenGenerator, + provide: JWT_TOKEN_GENERATOR_AND_EXTRACTOR, + useClass: JwtTokenGeneratorAndExtractorImpl, }, { provide: GENERATE_ACCESS_TOKEN_PORT, - useClass: GenerateAccessTokenAdapter, + useClass: GenerateAndExtractTokenAdapter, }, { provide: GENERATE_REFRESH_TOKEN_PORT, - useClass: GenerateRefreshTokenAdapter, + useClass: GenerateAndExtractTokenAdapter, }, { provide: EXTRACT_FROM_ACCESS_TOKEN_PORT, - useClass: ExtractFromAccessTokenAdapter, + useClass: GenerateAndExtractTokenAdapter, }, { provide: EXTRACT_FROM_REFRESH_TOKEN_PORT, - useClass: ExtractFromRefreshTokenAdapter, - }, - { - provide: CHECK_CREDENTIALS_REPOSITORY, - useClass: CheckCredentialsRepositoryImpl, + useClass: GenerateAndExtractTokenAdapter, }, { - provide: CHANGE_CREDENTIALS_REPOSITORY, - useClass: ChangeCredentialsRepositoryImpl, + provide: CREDENTIALS_REPOSITORY, + useClass: CredentialsRepositoryImpl, }, { provide: HASH_PASSWORD_PORT, diff --git a/backend/src/auth/infrastructure/jwt-token-generator/jwt-token-generator.ts b/backend/src/auth/infrastructure/jwt-token-generator/jwt-token-generator-and-extractor-impl.ts similarity index 55% rename from backend/src/auth/infrastructure/jwt-token-generator/jwt-token-generator.ts rename to backend/src/auth/infrastructure/jwt-token-generator/jwt-token-generator-and-extractor-impl.ts index 56dba490..bf537124 100644 --- a/backend/src/auth/infrastructure/jwt-token-generator/jwt-token-generator.ts +++ b/backend/src/auth/infrastructure/jwt-token-generator/jwt-token-generator-and-extractor-impl.ts @@ -1,21 +1,11 @@ import { UnauthorizedException } from '@nestjs/common'; -import { JwtAccessTokenExtractor } from '../../application/token/jwt-access-token-extractor.interface'; -import { JwtAccessTokenGenerator } from '../../application/token/jwt-access-token-generator.interface'; -import { JwtRefreshTokenExtractor } from '../../application/token/jwt-refresh-token-extractor.interface'; -import { JwtRefreshTokenGenerator } from '../../application/token/jwt-refresh-token-generator.interface'; import { Payload } from '../../domain/payload'; import { JwtService } from '@nestjs/jwt'; -import { JwtChangePasswordAccessTokenGenerator } from '../../application/token/jwt-change-password-access-token-generator.interface'; -import { JwtChangePasswordRefreshTokenGenerator } from '../../application/token/jwt-change-password-refresh-token-generator.interface'; +import { JwtTokenGeneratorAndExtractor } from 'src/auth/application/token/jwt-token-generator-and-extractor.interface'; -export class JwtTokenGenerator +export class JwtTokenGeneratorAndExtractorImpl implements - JwtAccessTokenGenerator, - JwtRefreshTokenGenerator, - JwtAccessTokenExtractor, - JwtRefreshTokenExtractor, - JwtChangePasswordAccessTokenGenerator, - JwtChangePasswordRefreshTokenGenerator + JwtTokenGeneratorAndExtractor { private readonly jwtService = new JwtService(); @@ -74,11 +64,4 @@ export class JwtTokenGenerator } } -export const JWT_CHANGE_PASSWORD_ACCESS_TOKEN_GENERATOR = - 'JWT_CHANGE_PASSWORD_ACCESS_TOKEN_GENERATOR'; -export const JWT_CHANGE_PASSWORD_REFRESH_TOKEN_GENERATOR = - 'JWT_CHANGE_PASSWORD_REFRESH_TOKEN_GENERATOR'; -export const JWT_ACCESS_TOKEN_GENERATOR = 'JWT_ACCESS_TOKEN_GENERATOR'; -export const JWT_REFRESH_TOKEN_GENERATOR = 'JWT_REFRESH_TOKEN_GENERATOR'; -export const JWT_ACCESS_TOKEN_EXTRACTOR = 'JWT_ACCESS_TOKEN_EXTRACTOR'; -export const JWT_REFRESH_TOKEN_EXTRACTOR = 'JWT_REFRESH_TOKEN_EXTRACTOR'; +export const JWT_TOKEN_GENERATOR_AND_EXTRACTOR_IMPL = 'JWT_TOKEN_GENERATOR_AND_EXTRACTOR_IMPL'; diff --git a/backend/src/auth/infrastructure/persistence/change-credentials-repository-impl.ts b/backend/src/auth/infrastructure/persistence/change-credentials-repository-impl.ts deleted file mode 100644 index 746ba2cd..00000000 --- a/backend/src/auth/infrastructure/persistence/change-credentials-repository-impl.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { Inject } from '@nestjs/common'; -import { ChangeCredentialsRepository } from '../../application/repository/change-credentials-repository.interface'; -import { PG_POOL } from '../../../database/database.module'; - -export class ChangeCredentialsRepositoryImpl implements ChangeCredentialsRepository { - constructor(@Inject(PG_POOL) private readonly conn) {} - - async changeCredentials( - username: string, - newPassword: string, - firstAccess: boolean, - ): Promise { - await this.conn.query( - 'UPDATE "user" SET password = $1, first_access = $2 WHERE username = $3', - [newPassword, firstAccess, username], - ); - } -} diff --git a/backend/src/auth/infrastructure/persistence/check-credentials-repository-impl.ts b/backend/src/auth/infrastructure/persistence/credentials-repository-impl.ts similarity index 69% rename from backend/src/auth/infrastructure/persistence/check-credentials-repository-impl.ts rename to backend/src/auth/infrastructure/persistence/credentials-repository-impl.ts index 5d1b896e..714ef1ef 100644 --- a/backend/src/auth/infrastructure/persistence/check-credentials-repository-impl.ts +++ b/backend/src/auth/infrastructure/persistence/credentials-repository-impl.ts @@ -1,9 +1,9 @@ import { Inject } from '@nestjs/common'; -import { CheckCredentialsRepository } from '../../application/repository/check-credentials-repository.interface'; import { PayloadEntity } from '../entities/payload-entity'; import { PG_POOL } from '../../../database/database.module'; +import { CredentialsRepository } from 'src/auth/application/repository/credentials-repository.interface'; -export class CheckCredentialsRepositoryImpl implements CheckCredentialsRepository { +export class CredentialsRepositoryImpl implements CredentialsRepository { constructor(@Inject(PG_POOL) private readonly conn) {} async checkCredentials( @@ -39,4 +39,15 @@ export class CheckCredentialsRepositoryImpl implements CheckCredentialsRepositor user.first_access, ); } + + async changeCredentials( + username: string, + newPassword: string, + firstAccess: boolean, + ): Promise { + await this.conn.query( + 'UPDATE "user" SET password = $1, first_access = $2 WHERE username = $3', + [newPassword, firstAccess, username], + ); + } } diff --git a/backend/src/auth/interfaces_output.tex b/backend/src/auth/interfaces_output.tex new file mode 100644 index 00000000..af4b4e93 --- /dev/null +++ b/backend/src/auth/interfaces_output.tex @@ -0,0 +1,5 @@ +\addMet{+}{changeCredentials(username: string, newPassword: string, firstAccess: boolean): Promise$<$void$>$}{} +\makeItf{ChangeCredentialsRepository}{} + +\addMet{+}{checkCredentials(username: string, password: string): Promise$<$PayloadEntity$>$}{} +\makeItf{CheckCredentialsRepository}{} \ No newline at end of file diff --git a/backend/src/auth/port-repository-usecase.py b/backend/src/auth/port-repository-usecase.py new file mode 100644 index 00000000..98972931 --- /dev/null +++ b/backend/src/auth/port-repository-usecase.py @@ -0,0 +1,125 @@ +import os +import re +import argparse + +# Regex +INTERFACE_REGEX = re.compile(r'export\s+interface\s+(\w+)') + +# metodi di interface (senza body, terminano con ;) +METHOD_REGEX = re.compile( + r'(\w+)\s*\(([^)]*)\)\s*:\s*([^;\n]+);' +) + + +def get_visibility_symbol(): + # nelle interface TS è sempre pubblico + return "+" + + +def latex_escape(text): + return ( + text.replace("<", "$<$") + .replace(">", "$>$") + .replace("|", "$|$") + ) + + +def clean_type(typ): + typ = typ.strip() + typ = typ.rstrip(",") + return typ + + +def parse_methods(content): + methods = [] + + for match in METHOD_REGEX.findall(content): + name, params, return_type = match + + if name in ["if", "for", "while", "switch"]: + continue + + symbol = get_visibility_symbol() + + params = params.strip() + + clean_params = [] + if params: + for p in re.split(r',(?![^\(]*\))', params): + p = p.strip() + + # rimuove eventuali decoratori + p = re.sub(r'@\w+\([^)]*\)', '', p) + + if p: + clean_params.append(p) + + param_str = ", ".join(clean_params) + + methods.append((symbol, name, param_str, clean_type(return_type))) + + return methods + + +def parse_file(filepath): + with open(filepath, "r", encoding="utf-8") as f: + content = f.read() + + interface_match = INTERFACE_REGEX.search(content) + if not interface_match: + return None + + interface_name = interface_match.group(1) + + methods = parse_methods(content) + + return interface_name, methods + + +def generate_latex(interface_name, methods): + lines = [] + + for vis, name, params, return_type in methods: + name = latex_escape(name) + params = latex_escape(params) + return_type = latex_escape(return_type) + + lines.append( + f"\\addMet{{{vis}}}{{{name}({params}): {return_type}}}{{}}" + ) + + lines.append(f"\\makeItf{{{interface_name}}}{{}}") + + return "\n".join(lines) + + +def main(): + parser = argparse.ArgumentParser( + description="Genera LaTeX da interface TypeScript" + ) + parser.add_argument("input_dir") + parser.add_argument("-o", "--output", default="interfaces_output.tex") + + args = parser.parse_args() + + results = [] + + for root, _, files in os.walk(args.input_dir): + for filename in files: + if filename.endswith(".ts"): + filepath = os.path.join(root, filename) + parsed = parse_file(filepath) + + if parsed: + interface_name, methods = parsed + latex = generate_latex(interface_name, methods) + results.append(latex) + + with open(args.output, "w", encoding="utf-8") as f: + f.write("\n\n".join(results)) + + print(f"Generato: {args.output}") + + +if __name__ == "__main__": + main() diff --git a/backend/src/device/adapters/in/device.controller.ts b/backend/src/device/adapters/in/device.controller.ts index f4403233..fb24e871 100644 --- a/backend/src/device/adapters/in/device.controller.ts +++ b/backend/src/device/adapters/in/device.controller.ts @@ -12,6 +12,7 @@ import { UseGuards, } from '@nestjs/common'; import { + ApiBearerAuth, ApiInternalServerErrorResponse, ApiOkResponse, ApiOperation, @@ -76,6 +77,7 @@ export class DeviceController { private readonly checkAlarmUseCase: CheckAlarmRuleUseCase, ) {} + @ApiBearerAuth('access-token') @UseGuards(UserGuard) @Get('/:id') @ApiOperation({ @@ -109,6 +111,7 @@ export class DeviceController { } } + @ApiBearerAuth('access-token') @Post('') @HttpCode(202) @UseGuards(UserGuard) @@ -137,6 +140,7 @@ export class DeviceController { } } + @ApiBearerAuth('access-token') @UseGuards(UserGuard) @Get('/plant/:plantId') @ApiOperation({ @@ -247,6 +251,7 @@ export class DeviceController { return { message: 'Datapoints updated received', statusCode: 202 }; } + @ApiBearerAuth('access-token') @UseGuards(UserGuard) @Get(':deviceId/value') @ApiOperation({ diff --git a/backend/src/main.ts b/backend/src/main.ts index a82b09ec..32da3b64 100644 --- a/backend/src/main.ts +++ b/backend/src/main.ts @@ -2,7 +2,7 @@ import { NestFactory } from '@nestjs/core'; import { AppModule } from './app.module'; import helmet from 'helmet'; //Middleware per la sicurezza HTTP, setta correttamente gli header HTTP per proteggere da vulnerabilità note. -import { DocumentBuilder, SwaggerModule } from '@nestjs/swagger'; +import { DocumentBuilder, SwaggerCustomOptions, SwaggerModule } from '@nestjs/swagger'; import cookieParser = require('cookie-parser'); async function bootstrap() { @@ -37,11 +37,29 @@ async function bootstrap() { }, 'access-token', ) + .addServer(process.env.BACKEND_URL ?? '') .build(); const document = SwaggerModule.createDocument(app, config); - SwaggerModule.setup('api', app, document); + const customOptions: SwaggerCustomOptions = { + swaggerOptions: { + persistAuthorization: true, + }, + customSiteTitle: 'View4Life API Docs', + customCss: ` + .topbar-wrapper img { + content: url('https://view4life.me/view4life.ico'); + width: 150px; + height: auto; + } + .swagger-ui .topbar { display: none } + .swagger-ui .info .title { color: #000000; } + `, + customfavIcon: 'https://view4life.me/view4life.ico', + }; + + SwaggerModule.setup('docs', app, document, customOptions); await app.listen(process.env.PORT ?? 3000); } bootstrap(); diff --git a/backend/src/notifications/adapters/in/notification-event.controller.ts b/backend/src/notifications/adapters/in/notification-event.controller.ts index 7c2c57f6..c306d4a6 100644 --- a/backend/src/notifications/adapters/in/notification-event.controller.ts +++ b/backend/src/notifications/adapters/in/notification-event.controller.ts @@ -27,7 +27,12 @@ export class EventNotificationController { console.log('[NOTIFICATION CONTROLLER] Allarme ricevuto, notifico'); try { - const alarm: CheckAlarm = CheckAlarmRuleResDto.toDomain(payload); + const alarm: CheckAlarm = new CheckAlarm( + payload.alarmRuleId, + payload.wardId, + payload.alarmEventId + ); + await this.notifyService.notifyAlarmWard({ alarm: alarm }); } catch (error) { console.error( diff --git a/backend/src/notifications/adapters/out/notifications.adapter.ts b/backend/src/notifications/adapters/out/notifications.adapter.ts index 353d73c1..b22aabea 100644 --- a/backend/src/notifications/adapters/out/notifications.adapter.ts +++ b/backend/src/notifications/adapters/out/notifications.adapter.ts @@ -1,4 +1,5 @@ import { Inject, Injectable } from '@nestjs/common'; +import { plainToInstance } from 'class-transformer'; import { CheckAlarmRuleResDto } from 'src/alarms/infrastructure/dtos/out/check-alarm-rule-res-dto'; import { NotifyAlarmResolutionCmd } from 'src/notifications/application/commands/notify-alarm-resolution.command'; import { NotifyAlarmWardCmd } from 'src/notifications/application/commands/notify-alarm-ward.command'; @@ -27,13 +28,9 @@ export class NotificationsAdapter if (!cmd?.alarm) throw new Error('Cannot notify alarm ward without informations'); - const checkAlarmDto: CheckAlarmRuleResDto = CheckAlarmRuleResDto.fromDomain( - cmd.alarm, - ); - return this.notificationsRepository.notifyAlarmWard( - cmd.alarm.ward_id, - checkAlarmDto, + cmd.alarm.wardId, + plainToInstance(CheckAlarmRuleResDto, cmd.alarm), ); } diff --git a/backend/src/notifications/application/services/notifications.service.ts b/backend/src/notifications/application/services/notifications.service.ts index 0f2f2bf0..3637aeb5 100644 --- a/backend/src/notifications/application/services/notifications.service.ts +++ b/backend/src/notifications/application/services/notifications.service.ts @@ -33,15 +33,15 @@ export class NotificationsService async notifyAlarmWard(cmd: NotifyAlarmWardCmd): Promise { await this.notifyPort.notifyAlarmWard(cmd); - if (!cmd.alarm.alarm_event_id) + if (!cmd.alarm.alarmEventId) throw new Error("Can't write notification without alarm event id"); const timeNow: string = new Date(Date.now()).toISOString(); await this.writeNotificationPort.writeNotification({ - alarm_event_id: cmd.alarm.alarm_event_id, + alarm_event_id: cmd.alarm.alarmEventId, timestamp: timeNow, - ward_id: cmd.alarm.ward_id, + ward_id: cmd.alarm.wardId, }); } diff --git a/backend/src/plant/adapters/in/plant.controller.ts b/backend/src/plant/adapters/in/plant.controller.ts index 028b9c3e..ed0723a0 100644 --- a/backend/src/plant/adapters/in/plant.controller.ts +++ b/backend/src/plant/adapters/in/plant.controller.ts @@ -7,6 +7,7 @@ import { UseGuards, } from '@nestjs/common'; import { + ApiBearerAuth, ApiInternalServerErrorResponse, ApiOkResponse, ApiOperation, @@ -42,6 +43,7 @@ export class PlantController { private readonly findAllPlants: FindAllPlantsUseCase, ) {} + @ApiBearerAuth('access-token') @UseGuards(UserGuard) @Get() @ApiOperation({ @@ -76,6 +78,7 @@ export class PlantController { } } + @ApiBearerAuth('access-token') @UseGuards(UserGuard) @Get('available') @ApiOperation({ @@ -101,6 +104,7 @@ export class PlantController { } } + @ApiBearerAuth('access-token') @UseGuards(UserGuard) @Get('all') async getAllPlants() { diff --git a/backend/src/users/adapters/in/users.controller.ts b/backend/src/users/adapters/in/users.controller.ts index b959c4f0..67869e70 100644 --- a/backend/src/users/adapters/in/users.controller.ts +++ b/backend/src/users/adapters/in/users.controller.ts @@ -33,7 +33,7 @@ import { plainToInstance } from 'class-transformer'; import { FindAllUserResDto } from '../../infrastructure/dtos/out/find-all-user-res.dto'; import { FindAllAvailableUsersUseCase } from '../../application/ports/in/find-all-available-users-use-case.interface'; import { FindAllAvailableUsersResDto } from '../../infrastructure/dtos/out/find-all-available-users-res-dto'; -import { ApiOkResponse } from '@nestjs/swagger'; +import { ApiBearerAuth, ApiOkResponse } from '@nestjs/swagger'; import { FindUserByIdUseCase } from '../../application/ports/in/find-user-by-id-use-case.interface'; import { FindUserByIdCmd } from '../../application/commands/find-user-by-id-cmd'; import { FindUserByIdResDto } from '../../infrastructure/dtos/out/find-user-by-id-res-dto'; @@ -58,6 +58,7 @@ export class UsersController { ) {} @ApiOkResponse({ type: FindAllUserResDto, isArray: true }) + @ApiBearerAuth('access-token') @UseGuards(UserGuard, AdminGuard) @Get() async findAllUsers(): Promise { @@ -66,6 +67,7 @@ export class UsersController { } @ApiOkResponse({ type: FindAllAvailableUsersResDto, isArray: true }) + @ApiBearerAuth('access-token') @UseGuards(UserGuard, AdminGuard) @Get('/available') async findAllAvailableUsers(): Promise { @@ -75,6 +77,7 @@ export class UsersController { } @ApiOkResponse({ type: FindUserByIdResDto }) + @ApiBearerAuth('access-token') @UseGuards(UserGuard, AdminGuard) @Get('/:id') async findUserById( @@ -87,6 +90,7 @@ export class UsersController { } @ApiOkResponse({ type: UpdateUserResDto }) + @ApiBearerAuth('access-token') @UseGuards(UserGuard, AdminGuard) @Put('/:id') async updateUser( @@ -100,6 +104,7 @@ export class UsersController { } @ApiOkResponse({ type: CreateUserResDto }) + @ApiBearerAuth('access-token') @UseGuards(UserGuard, AdminGuard) @Post() async createUser(@Body() req: CreateUserReqDto): Promise { @@ -110,6 +115,7 @@ export class UsersController { } @ApiOkResponse() + @ApiBearerAuth('access-token') @UseGuards(UserGuard, AdminGuard) @Delete('/:id') async deleteUser(@Param('id', ParseIntPipe) id: number): Promise { diff --git a/backend/src/users/application/services/users.service.ts b/backend/src/users/application/services/users.service.ts index eab4e297..144a6588 100644 --- a/backend/src/users/application/services/users.service.ts +++ b/backend/src/users/application/services/users.service.ts @@ -27,7 +27,6 @@ import { GENERATE_PASSWORD_PORT } from '../../infrastructure/password-generator/ import { GeneratePasswordPort } from '../ports/out/password-generator-port.interface'; import { HASH_PASSWORD_PORT } from '../../infrastructure/hash-password-impl/hash-password-impl'; import { HashPasswordPort } from '../ports/out/hash-password-port.interface'; -import { UserEntity } from '../../infrastructure/entities/user-entity'; import { CONVERT_BASE_64_PORT } from '../../infrastructure/convert-base-64-impl/convert-base-64-impl'; import { ConvertBase64Port } from '../ports/out/converte-base-64-port.interface'; import { CreatedUser } from '../../domain/created-user'; @@ -90,7 +89,7 @@ export class UsersService async createUser(req: CreateUserCmd): Promise { const password: string = this.generatePasswordPort.generatePassword(128); - const userEntity: UserEntity = await this.createUserPort.createUser( + const user: User = await this.createUserPort.createUser( new CreateUserWithTempPasswordCmd( req.username, req.surname, @@ -102,12 +101,12 @@ export class UsersService const base64Password: string = this.convertBase64Port.toBase64(password); return new CreatedUser( - userEntity.id, - userEntity.username, - userEntity.surname, - userEntity.name, - userEntity.role, - base64Password, + user.getId(), + user.getUsername(), + user.getSurname(), + user.getName(), + user.getRole(), + base64Password ); } async deleteUser(req: DeleteUserCmd): Promise { diff --git a/backend/src/users/domain/created-user.ts b/backend/src/users/domain/created-user.ts index de25dbdb..9e7f0e6e 100644 --- a/backend/src/users/domain/created-user.ts +++ b/backend/src/users/domain/created-user.ts @@ -4,11 +4,15 @@ export class CreatedUser extends User { constructor( id: number, username: string, - surname: string, - name: string, - role: string, - public tempPassword: string, + surname?: string, + name?: string, + role?: string, + private readonly tempPassword?: string, ) { super(id, username, surname, name, role); } + + getTempPassword(): string | undefined { + return this.tempPassword ?? undefined; + } } diff --git a/backend/src/users/domain/user.ts b/backend/src/users/domain/user.ts index be932292..a47d5d77 100644 --- a/backend/src/users/domain/user.ts +++ b/backend/src/users/domain/user.ts @@ -1,9 +1,29 @@ export class User { constructor( - public id: number, - public username: string, - public surname: string, - public name: string, - public role: string, + private readonly id: number, + private readonly username: string, + private readonly surname?: string, + private readonly name?: string, + private readonly role?: string, ) {} + + getId(): number { + return this.id; + } + + getUsername(): string { + return this.username; + } + + getSurname(): string | undefined { + return this.surname ?? undefined; + } + + getName(): string | undefined { + return this.name ?? undefined; + } + + getRole(): string | undefined { + return this.role ?? undefined; + } } diff --git a/backend/src/wards/adapters/in/wards-plants-relationships.controller.ts b/backend/src/wards/adapters/in/wards-plants-relationships.controller.ts index 72f8de7b..e8ce33c0 100644 --- a/backend/src/wards/adapters/in/wards-plants-relationships.controller.ts +++ b/backend/src/wards/adapters/in/wards-plants-relationships.controller.ts @@ -9,6 +9,7 @@ import { Post, UseGuards, } from '@nestjs/common'; +import { ApiBearerAuth } from '@nestjs/swagger'; import { AddPlantToWardReqDto } from '../../infrastructure/dtos/in/add-plant-to-ward-req.dto'; import { ADD_PLANT_TO_WARD_USE_CASE, @@ -39,18 +40,20 @@ export class WardsPlantsRelationshipsController { private readonly removePlantFromWardUseCase: RemovePlantFromWardUseCase, ) {} + @ApiBearerAuth('access-token') @UseGuards(UserGuard, AdminGuard) @Post() async addPlantToWard( @Body() req: AddPlantToWardReqDto, ): Promise { - const plant: Plant = this.addPlantToWardUseCase.addPlantToWard( + const plant: Plant = await this.addPlantToWardUseCase.addPlantToWard( new AddPlantToWardCmd(req.wardId, req.plantId), ); return plainToInstance(AddPlantToWardResDto, plant); } + @ApiBearerAuth('access-token') @UseGuards(UserGuard, AdminGuard) @Get('/:wardId') async findAllPlantsByWardId( @@ -64,6 +67,7 @@ export class WardsPlantsRelationshipsController { return plainToInstance(FindAllPlantsByWardIdResDto, plants); } + @ApiBearerAuth('access-token') @UseGuards(UserGuard, AdminGuard) @Delete('/:plantId') removePlantFromWard(@Param('plantId') plantId: string): Promise { diff --git a/backend/src/wards/adapters/in/wards-users-relationships.controller.ts b/backend/src/wards/adapters/in/wards-users-relationships.controller.ts index 6d9aaaa0..b19bfcc0 100644 --- a/backend/src/wards/adapters/in/wards-users-relationships.controller.ts +++ b/backend/src/wards/adapters/in/wards-users-relationships.controller.ts @@ -9,6 +9,7 @@ import { Post, UseGuards, } from '@nestjs/common'; +import { ApiBearerAuth } from '@nestjs/swagger'; import { AddUserToWardReqDto } from '../../infrastructure/dtos/in/add-user-to-ward-req.dto'; import { AddUserToWardUseCase } from '../../application/ports/in/add-user-to-ward-use-case.interface'; import { FindAllUsersByWardIdUseCase } from '../../application/ports/in/find-all-users-by-ward-id-use-case.interface'; @@ -39,18 +40,20 @@ export class WardsUsersRelationshipsController { private readonly removeUserFromWardUseCase: RemoveUserFromWardUseCase, ) {} + @ApiBearerAuth('access-token') @UseGuards(UserGuard, AdminGuard) @Post() async addUserToWard( @Body() req: AddUserToWardReqDto, ): Promise { - const user: User = this.addUserToWardUseCase.addUserToWard( + const user: User = await this.addUserToWardUseCase.addUserToWard( new AddUserToWardCmd(req.wardId, req.userId), ); return plainToInstance(AddUserToWardResDto, user); } + @ApiBearerAuth('access-token') @UseGuards(UserGuard, AdminGuard) @Get('/:wardId') async findAllUsersByWardId( @@ -64,6 +67,7 @@ export class WardsUsersRelationshipsController { return plainToInstance(FindAllUsersByWardIdResDto, users); } + @ApiBearerAuth('access-token') @UseGuards(UserGuard, AdminGuard) @Delete('/:wardId/:userId') async removeUserFromWard( diff --git a/backend/src/wards/adapters/in/wards.controller.ts b/backend/src/wards/adapters/in/wards.controller.ts index 76ffdaa7..3f9a0a55 100644 --- a/backend/src/wards/adapters/in/wards.controller.ts +++ b/backend/src/wards/adapters/in/wards.controller.ts @@ -9,6 +9,7 @@ import { Put, UseGuards, } from '@nestjs/common'; +import { ApiBearerAuth } from '@nestjs/swagger'; import { CreateWardReqDto } from '../../infrastructure/dtos/in/create-ward-req.dto'; import { UpdateWardReqDto } from '../../infrastructure/dtos/in/update-ward-req.dto'; import { CreateWardUseCase } from '../../application/ports/in/create-ward-use-case.interface'; @@ -44,6 +45,7 @@ export class WardsController { private readonly deleteWardUseCase: DeleteWardUseCase, ) {} + @ApiBearerAuth('access-token') @UseGuards(UserGuard, AdminGuard) @Post() async createWard(@Body() req: CreateWardReqDto): Promise { @@ -53,6 +55,7 @@ export class WardsController { return plainToInstance(CreateWardResDto, ward); } + @ApiBearerAuth('access-token') @UseGuards(UserGuard, AdminGuard) @Get() async findAllWards(): Promise { @@ -60,6 +63,7 @@ export class WardsController { return plainToInstance(FindAllWardsResDto, wards); } + @ApiBearerAuth('access-token') @UseGuards(UserGuard, AdminGuard) @Put('/:id') async updateWard( @@ -72,6 +76,7 @@ export class WardsController { return plainToInstance(UpdateWardResDto, ward); } + @ApiBearerAuth('access-token') @UseGuards(UserGuard, AdminGuard) @Delete('/:id') async deleteWard(@Param('id') id: number): Promise { diff --git a/backend/src/wards/adapters/out/add-plant-to-ward-adapter.ts b/backend/src/wards/adapters/out/add-plant-to-ward-adapter.ts deleted file mode 100644 index 94fc727c..00000000 --- a/backend/src/wards/adapters/out/add-plant-to-ward-adapter.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { Inject } from '@nestjs/common'; -import { AddPlantToWardCmd } from '../../application/commands/add-plant-to-ward-cmd'; -import { AddPlantToWardPort } from '../../application/ports/out/add-plant-to-ward-port.interface'; -import { - ADD_PLANT_TO_WARD_REPOSITORY, - AddPlantToWardRepository, -} from '../../application/repository/add-plant-to-ward-repository.interface'; -import { PlantEntity } from '../../infrastructure/entities/plant-entity'; -import { Plant } from 'src/plant/domain/models/plant.model'; - -export class AddPlantToWardAdapter implements AddPlantToWardPort { - constructor( - @Inject(ADD_PLANT_TO_WARD_REPOSITORY) - private readonly addPlantToWardRepository: AddPlantToWardRepository, - ) {} - - async addPlantToWard(req: AddPlantToWardCmd): Promise { - const plantEntity: PlantEntity = - await this.addPlantToWardRepository.addPlantToWard( - req.wardId, - req.plantId, - ); - - return new Plant(plantEntity.id, plantEntity.name); - } -} - -export const ADD_PLANT_TO_WARD_PORT = 'ADD_PLANT_TO_WARD_PORT'; diff --git a/backend/src/wards/adapters/out/add-user-to-ward-adapter.ts b/backend/src/wards/adapters/out/add-user-to-ward-adapter.ts deleted file mode 100644 index 1fb5bc3e..00000000 --- a/backend/src/wards/adapters/out/add-user-to-ward-adapter.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { Inject } from '@nestjs/common'; -import { AddUserToWardCmd } from '../../application/commands/add-user-to-ward-cmd'; -import { AddUserToWardPort } from '../../application/ports/out/add-user-to-ward-port.interface'; -import { - ADD_USER_TO_WARD_REPOSITORY, - AddUserToWardRepository, -} from '../../application/repository/add-user-to-ward-repository.interface'; -import { UserEntity } from '../../infrastructure/entities/user-entity'; -import { User } from '../../domain/user'; - -export class AddUserToWardAdapter implements AddUserToWardPort { - constructor( - @Inject(ADD_USER_TO_WARD_REPOSITORY) - private readonly addUserToWardRepository: AddUserToWardRepository, - ) {} - - async addUserToWard(req: AddUserToWardCmd): Promise { - const userEntity: UserEntity = - await this.addUserToWardRepository.addUserToWard(req.wardId, req.userId); - - return new User(userEntity.id, userEntity.username); - } -} - -export const ADD_USER_TO_WARD_PORT = 'ADD_USER_TO_WARD_PORT'; diff --git a/backend/src/wards/adapters/out/create-ward-adapter.ts b/backend/src/wards/adapters/out/create-ward-adapter.ts deleted file mode 100644 index ce094c73..00000000 --- a/backend/src/wards/adapters/out/create-ward-adapter.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { Inject } from '@nestjs/common'; -import { CreateWardCmd } from '../../application/commands/create-ward-cmd'; -import { CreateWardPort } from '../../application/ports/out/create-ward-port.interface'; -import { Ward } from '../../domain/ward'; -import { CREATE_WARD_REPOSITORY } from '../../application/repository/create-ward-repository.interface'; -import { WardEntity } from '../../infrastructure/entities/ward-entity'; - -export class CreateWardAdapter implements CreateWardPort { - constructor( - @Inject(CREATE_WARD_REPOSITORY) private readonly createWardRepository, - ) {} - - async createWard(req: CreateWardCmd): Promise { - const res: WardEntity = await this.createWardRepository.createWard( - req.name, - ); - - return new Ward(res.id, res.name); - } -} - -export const CREATE_WARD_PORT = 'CREATE_WARD_PORT'; diff --git a/backend/src/wards/adapters/out/delete-ward-adapter.ts b/backend/src/wards/adapters/out/delete-ward-adapter.ts deleted file mode 100644 index 8b8a66c7..00000000 --- a/backend/src/wards/adapters/out/delete-ward-adapter.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { Inject } from '@nestjs/common'; -import { DeleteWardCmd } from '../../application/commands/delete-ward-cmd'; -import { DeleteWardPort } from '../../application/ports/out/delete-ward-port.interface'; -import { DELETE_WARD_REPOSITORY } from '../../application/repository/delete-ward-repository.interface'; - -export class DeleteWardAdapter implements DeleteWardPort { - constructor( - @Inject(DELETE_WARD_REPOSITORY) private readonly deleteWardRepository, - ) {} - - async deleteWard(req: DeleteWardCmd): Promise { - return await this.deleteWardRepository.deleteWard(req.id); - } -} - -export const DELETE_WARD_PORT = 'DELETE_WARD_PORT'; diff --git a/backend/src/wards/adapters/out/find-all-plants-by-ward-id-adapter.ts b/backend/src/wards/adapters/out/find-all-plants-by-ward-id-adapter.ts deleted file mode 100644 index e920808a..00000000 --- a/backend/src/wards/adapters/out/find-all-plants-by-ward-id-adapter.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { Inject } from '@nestjs/common'; -import { FindAllPlantsByWardIdCmd } from '../../application/commands/find-all-plants-by-ward-id-cmd'; -import { FindAllPlantsByWardIdPort } from '../../application/ports/out/find-all-plants-by-ward-id-port.interface'; -import { - FIND_ALL_PLANTS_BY_WARD_ID_REPOSITORY, - FindAllPlantsByWardIdRepository, -} from '../../application/repository/find-all-plants-by-ward-id-repository.interface'; -import { PlantEntity } from '../../infrastructure/entities/plant-entity'; -import { Plant } from 'src/plant/domain/models/plant.model'; - -export class FindAllPlantsByWardIdAdapter implements FindAllPlantsByWardIdPort { - constructor( - @Inject(FIND_ALL_PLANTS_BY_WARD_ID_REPOSITORY) - private readonly findAllPlantsByWardIdRepository: FindAllPlantsByWardIdRepository, - ) {} - - async findAllPlantsByWardId(req: FindAllPlantsByWardIdCmd): Promise { - const plantEntities: PlantEntity[] = - await this.findAllPlantsByWardIdRepository.findAllPlantsByWardId(req.id); - - return plantEntities.map( - (plantEntity) => new Plant(plantEntity.id, plantEntity.name), - ); - } -} - -export const FIND_ALL_PLANTS_BY_WARD_ID_PORT = - 'FIND_ALL_PLANTS_BY_WARD_ID_PORT'; diff --git a/backend/src/wards/adapters/out/find-all-users-by-ward-id-adapter.ts b/backend/src/wards/adapters/out/find-all-users-by-ward-id-adapter.ts deleted file mode 100644 index a05a6d19..00000000 --- a/backend/src/wards/adapters/out/find-all-users-by-ward-id-adapter.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { Inject } from '@nestjs/common'; -import { FindAllUsersByWardIdCmd } from '../../application/commands/find-all-users-by-ward-id-cmd'; -import { FindAllUsersByWardIdPort } from '../../application/ports/out/find-all-users-by-ward-id-port.interface'; -import { - FIND_ALL_USERS_BY_WARD_ID_REPOSITORY, - FindAllUsersByWardIdRepository, -} from '../../application/repository/find-all-users-by-ward-id-repository.interface'; -import { UserEntity } from '../../infrastructure/entities/user-entity'; -import { User } from '../../domain/user'; - -export class FindAllUsersByWardIdAdapter implements FindAllUsersByWardIdPort { - constructor( - @Inject(FIND_ALL_USERS_BY_WARD_ID_REPOSITORY) - private readonly findAllUsersByWardIdRepository: FindAllUsersByWardIdRepository, - ) {} - - async findAllUsersByWardId(req: FindAllUsersByWardIdCmd): Promise { - const userEntities: UserEntity[] = - await this.findAllUsersByWardIdRepository.findAllUsersByWardId(req.id); - - return userEntities.map( - (userEntity) => new User(userEntity.id, userEntity.username), - ); - } -} - -export const FIND_ALL_USERS_BY_WARD_ID_PORT = 'FIND_ALL_USERS_BY_WARD_ID_PORT'; diff --git a/backend/src/wards/adapters/out/find-all-wards-adapter.ts b/backend/src/wards/adapters/out/find-all-wards-adapter.ts deleted file mode 100644 index 06b1cf34..00000000 --- a/backend/src/wards/adapters/out/find-all-wards-adapter.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { Inject } from '@nestjs/common'; -import { FindAllWardsPort } from '../../application/ports/out/find-all-wards-port.interface'; -import { Ward } from '../../domain/ward'; -import { - FIND_ALL_WARDS_REPOSITORY, - FindAllWardsRepository, -} from '../../application/repository/find-all-wards-repository.interface'; -import { WardEntity } from '../../infrastructure/entities/ward-entity'; - -export class FindAllWardsAdapter implements FindAllWardsPort { - constructor( - @Inject(FIND_ALL_WARDS_REPOSITORY) - private readonly findAllWardsRepository: FindAllWardsRepository, - ) {} - - async findAllWards(): Promise { - const res: WardEntity[] = await this.findAllWardsRepository.findAllWards(); - - return res.map((element) => new Ward(element.id, element.name)); - } -} - -export const FIND_ALL_WARDS_PORT = 'FIND_ALL_WARDS_PORT'; diff --git a/backend/src/wards/adapters/out/remove-plant-from-ward-adapter.ts b/backend/src/wards/adapters/out/remove-plant-from-ward-adapter.ts deleted file mode 100644 index f9e79b3f..00000000 --- a/backend/src/wards/adapters/out/remove-plant-from-ward-adapter.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { Inject } from '@nestjs/common'; -import { RemovePlantFromWardCmd } from '../../application/commands/remove-plant-from-ward-cmd'; -import { RemovePlantFromWardPort } from '../../application/ports/out/remove-plant-from-ward-port.interface'; -import { - REMOVE_PLANT_FROM_WARD_REPOSITORY, - RemovePlantFromWardRepository, -} from '../../application/repository/remove-plant-from-ward-repository.interface'; - -export class RemovePlantFromWardAdapter implements RemovePlantFromWardPort { - constructor( - @Inject(REMOVE_PLANT_FROM_WARD_REPOSITORY) - private readonly removePlantFromWardRepository: RemovePlantFromWardRepository, - ) {} - - async removePlantFromWard(req: RemovePlantFromWardCmd): Promise { - return await this.removePlantFromWardRepository.removePlantFromWard( - req.plantId, - ); - } -} - -export const REMOVE_PLANT_FROM_WARD_PORT = 'REMOVE_PLANT_FROM_WARD_PORT'; diff --git a/backend/src/wards/adapters/out/remove-user-from-ward-adapter.ts b/backend/src/wards/adapters/out/remove-user-from-ward-adapter.ts deleted file mode 100644 index e26d6b68..00000000 --- a/backend/src/wards/adapters/out/remove-user-from-ward-adapter.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { Inject } from '@nestjs/common'; -import { RemoveUserFromWardCmd } from '../../application/commands/remove-user-from-ward-cmd'; -import { RemoveUserFromWardPort } from '../../application/ports/out/remove-user-from-ward-port.interface'; -import { - REMOVE_USER_FROM_WARD_REPOSITORY, - RemoveUserFromWardRepository, -} from '../../application/repository/remove-user-from-ward-repository.interface'; - -export class RemoveUserFromWardAdapter implements RemoveUserFromWardPort { - constructor( - @Inject(REMOVE_USER_FROM_WARD_REPOSITORY) - private readonly removeUserFromWardRepository: RemoveUserFromWardRepository, - ) {} - - async removeUserFromWard(req: RemoveUserFromWardCmd): Promise { - return await this.removeUserFromWardRepository.removeUserFromWard( - req.wardId, - req.userId, - ); - } -} - -export const REMOVE_USER_FROM_WARD_PORT = 'REMOVE_USER_FROM_WARD_PORT'; diff --git a/backend/src/wards/adapters/out/update-ward-adapter.ts b/backend/src/wards/adapters/out/update-ward-adapter.ts deleted file mode 100644 index f047cf42..00000000 --- a/backend/src/wards/adapters/out/update-ward-adapter.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { Inject } from '@nestjs/common'; -import { UpdateWardCmd } from '../../application/commands/update-ward-cmd'; -import { UpdateWardPort } from '../../application/ports/out/update-ward-port.interface'; -import { Ward } from '../../domain/ward'; -import { - UPDATE_WARD_REPOSITORY, - UpdateWardRepository, -} from '../../application/repository/update-ward-repository.interface'; -import { WardEntity } from '../../infrastructure/entities/ward-entity'; - -export class UpdateWardAdapter implements UpdateWardPort { - constructor( - @Inject(UPDATE_WARD_REPOSITORY) - private readonly updateWardRepository: UpdateWardRepository, - ) {} - - async updateWard(req: UpdateWardCmd): Promise { - const res: WardEntity = await this.updateWardRepository.updateWard( - req.id, - req.name, - ); - - return new Ward(res.id, res.name); - } -} - -export const UPDATE_WARD_PORT = 'UPDATE_WARD_PORT'; diff --git a/backend/src/wards/adapters/out/wards-persistence-adapter.ts b/backend/src/wards/adapters/out/wards-persistence-adapter.ts new file mode 100644 index 00000000..57671e44 --- /dev/null +++ b/backend/src/wards/adapters/out/wards-persistence-adapter.ts @@ -0,0 +1,45 @@ +import { Inject } from "@nestjs/common"; +import { CreateWardCmd } from "src/wards/application/commands/create-ward-cmd"; +import { DeleteWardCmd } from "src/wards/application/commands/delete-ward-cmd"; +import { UpdateWardCmd } from "src/wards/application/commands/update-ward-cmd"; +import { CreateWardPort } from "src/wards/application/ports/out/create-ward-port.interface"; +import { DeleteWardPort } from "src/wards/application/ports/out/delete-ward-port.interface"; +import { FindAllWardsPort } from "src/wards/application/ports/out/find-all-wards-port.interface"; +import { UpdateWardPort } from "src/wards/application/ports/out/update-ward-port.interface"; +import { WARDS_REPOSITORY, WardsRepository } from "src/wards/application/repository/wards-repository.interface"; +import { Ward } from "src/wards/domain/ward"; +import { WardEntity } from "src/wards/infrastructure/entities/ward-entity"; + +export class WardsPersistenceAdapter implements CreateWardPort, FindAllWardsPort, UpdateWardPort, DeleteWardPort { + constructor( + @Inject(WARDS_REPOSITORY) + private readonly wardsRepository: WardsRepository, + ) { } + + async createWard(req: CreateWardCmd): Promise { + const res: WardEntity = await this.wardsRepository.createWard( + req.name, + ); + + return new Ward(res.id, res.name); + } + + async findAllWards(): Promise { + const res: WardEntity[] = await this.wardsRepository.findAllWards(); + + return res.map((element) => new Ward(element.id, element.name)); + } + + async updateWard(req: UpdateWardCmd): Promise { + const res: WardEntity = await this.wardsRepository.updateWard( + req.id, + req.name, + ); + + return new Ward(res.id, res.name); + } + + async deleteWard(req: DeleteWardCmd): Promise { + return await this.wardsRepository.deleteWard(req.id); + } +} diff --git a/backend/src/wards/adapters/out/wards-plants-relationships-persistence-adapter.ts b/backend/src/wards/adapters/out/wards-plants-relationships-persistence-adapter.ts new file mode 100644 index 00000000..833b7157 --- /dev/null +++ b/backend/src/wards/adapters/out/wards-plants-relationships-persistence-adapter.ts @@ -0,0 +1,42 @@ +import { Inject } from "@nestjs/common"; +import { Plant } from "src/plant/domain/models/plant.model"; +import { AddPlantToWardCmd } from "src/wards/application/commands/add-plant-to-ward-cmd"; +import { FindAllPlantsByWardIdCmd } from "src/wards/application/commands/find-all-plants-by-ward-id-cmd"; +import { RemovePlantFromWardCmd } from "src/wards/application/commands/remove-plant-from-ward-cmd"; +import { AddPlantToWardPort } from "src/wards/application/ports/out/add-plant-to-ward-port.interface"; +import { FindAllPlantsByWardIdPort } from "src/wards/application/ports/out/find-all-plants-by-ward-id-port.interface"; +import { RemovePlantFromWardPort } from "src/wards/application/ports/out/remove-plant-from-ward-port.interface"; +import { WARDS_PLANTS_RELATIONSHIPS_REPOSITORY, WardsPlantsRelationshipsRepository } from "src/wards/application/repository/wards-plants-relationships-repository.interface"; +import { PlantEntity } from "src/wards/infrastructure/entities/plant-entity"; + +export class WardsPlantsRelationshipsPersistenceAdapter implements AddPlantToWardPort, FindAllPlantsByWardIdPort, RemovePlantFromWardPort { + constructor( + @Inject(WARDS_PLANTS_RELATIONSHIPS_REPOSITORY) + private readonly wardsPlantsRelationShipsRepository: WardsPlantsRelationshipsRepository, + ) { } + + async addPlantToWard(req: AddPlantToWardCmd): Promise { + const plantEntity: PlantEntity = + await this.wardsPlantsRelationShipsRepository.addPlantToWard( + req.wardId, + req.plantId, + ); + + return new Plant(plantEntity.id, plantEntity.name); + } + + async findAllPlantsByWardId(req: FindAllPlantsByWardIdCmd): Promise { + const plantEntities: PlantEntity[] = + await this.wardsPlantsRelationShipsRepository.findAllPlantsByWardId(req.id); + + return plantEntities.map( + (plantEntity) => new Plant(plantEntity.id, plantEntity.name), + ); + } + + async removePlantFromWard(req: RemovePlantFromWardCmd): Promise { + return await this.wardsPlantsRelationShipsRepository.removePlantFromWard( + req.plantId, + ); + } +} diff --git a/backend/src/wards/adapters/out/wards-users-relationships-persistence-adapter.ts b/backend/src/wards/adapters/out/wards-users-relationships-persistence-adapter.ts new file mode 100644 index 00000000..aabffbb4 --- /dev/null +++ b/backend/src/wards/adapters/out/wards-users-relationships-persistence-adapter.ts @@ -0,0 +1,37 @@ +import { Inject } from "@nestjs/common"; +import { AddUserToWardCmd } from "src/wards/application/commands/add-user-to-ward-cmd"; +import { FindAllUsersByWardIdCmd } from "src/wards/application/commands/find-all-users-by-ward-id-cmd"; +import { RemoveUserFromWardCmd } from "src/wards/application/commands/remove-user-from-ward-cmd"; +import { WARDS_USERS_RELATIONSHIPS_REPOSITORY, WardsUsersRelationshipsRepository } from "src/wards/application/repository/wards-users-relationships-repository.interface"; +import { User } from "src/wards/domain/user"; +import { UserEntity } from "src/wards/infrastructure/entities/user-entity"; + +export class WardsUsersRelationshipsPersistenceAdapter { + constructor( + @Inject(WARDS_USERS_RELATIONSHIPS_REPOSITORY) + private readonly wardsUsersRelationshipsRepository: WardsUsersRelationshipsRepository, + ) { } + + async addUserToWard(req: AddUserToWardCmd): Promise { + const userEntity: UserEntity = + await this.wardsUsersRelationshipsRepository.addUserToWard(req.wardId, req.userId); + + return new User(userEntity.id, userEntity.username); + } + + async findAllUsersByWardId(req: FindAllUsersByWardIdCmd): Promise { + const userEntities: UserEntity[] = + await this.wardsUsersRelationshipsRepository.findAllUsersByWardId(req.id); + + return userEntities.map( + (userEntity) => new User(userEntity.id, userEntity.username), + ); + } + + async removeUserFromWard(req: RemoveUserFromWardCmd): Promise { + return await this.wardsUsersRelationshipsRepository.removeUserFromWard( + req.wardId, + req.userId, + ); + } +} diff --git a/backend/src/wards/application/ports/in/add-plant-to-ward-use-case.interface.ts b/backend/src/wards/application/ports/in/add-plant-to-ward-use-case.interface.ts index bb4ff47b..9cd045da 100644 --- a/backend/src/wards/application/ports/in/add-plant-to-ward-use-case.interface.ts +++ b/backend/src/wards/application/ports/in/add-plant-to-ward-use-case.interface.ts @@ -1,5 +1,6 @@ import { AddPlantToWardCmd } from '../../commands/add-plant-to-ward-cmd'; +import { Plant } from 'src/plant/domain/models/plant.model'; export interface AddPlantToWardUseCase { - addPlantToWard(req: AddPlantToWardCmd); + addPlantToWard(req: AddPlantToWardCmd): Promise; } diff --git a/backend/src/wards/application/ports/in/add-user-to-ward-use-case.interface.ts b/backend/src/wards/application/ports/in/add-user-to-ward-use-case.interface.ts index 34e46736..a533254d 100644 --- a/backend/src/wards/application/ports/in/add-user-to-ward-use-case.interface.ts +++ b/backend/src/wards/application/ports/in/add-user-to-ward-use-case.interface.ts @@ -1,5 +1,6 @@ +import { User } from 'src/wards/domain/user'; import { AddUserToWardCmd } from '../../commands/add-user-to-ward-cmd'; export interface AddUserToWardUseCase { - addUserToWard(req: AddUserToWardCmd); + addUserToWard(req: AddUserToWardCmd): Promise; } diff --git a/backend/src/wards/application/ports/in/find-all-plants-by-ward-id-use-case.interface.ts b/backend/src/wards/application/ports/in/find-all-plants-by-ward-id-use-case.interface.ts index 947bbecd..f27d7419 100644 --- a/backend/src/wards/application/ports/in/find-all-plants-by-ward-id-use-case.interface.ts +++ b/backend/src/wards/application/ports/in/find-all-plants-by-ward-id-use-case.interface.ts @@ -1,5 +1,7 @@ + +import { Plant } from 'src/plant/domain/models/plant.model'; import { FindAllPlantsByWardIdCmd } from '../../commands/find-all-plants-by-ward-id-cmd'; export interface FindAllPlantsByWardIdUseCase { - findAllPlantsByWardId(req: FindAllPlantsByWardIdCmd); + findAllPlantsByWardId(req: FindAllPlantsByWardIdCmd): Promise; } diff --git a/backend/src/wards/application/ports/in/remove-plant-from-ward-use-case.interface.ts b/backend/src/wards/application/ports/in/remove-plant-from-ward-use-case.interface.ts index 1dde41a7..2bf4eda4 100644 --- a/backend/src/wards/application/ports/in/remove-plant-from-ward-use-case.interface.ts +++ b/backend/src/wards/application/ports/in/remove-plant-from-ward-use-case.interface.ts @@ -1,5 +1,5 @@ import { RemovePlantFromWardCmd } from '../../commands/remove-plant-from-ward-cmd'; export interface RemovePlantFromWardUseCase { - removePlantFromWard(req: RemovePlantFromWardCmd); + removePlantFromWard(req: RemovePlantFromWardCmd): Promise; } diff --git a/backend/src/wards/application/ports/in/remove-user-from-ward-use-case.interface.ts b/backend/src/wards/application/ports/in/remove-user-from-ward-use-case.interface.ts index 06c1a28b..8b076f19 100644 --- a/backend/src/wards/application/ports/in/remove-user-from-ward-use-case.interface.ts +++ b/backend/src/wards/application/ports/in/remove-user-from-ward-use-case.interface.ts @@ -1,5 +1,5 @@ import { RemoveUserFromWardCmd } from '../../commands/remove-user-from-ward-cmd'; export interface RemoveUserFromWardUseCase { - removeUserFromWard(req: RemoveUserFromWardCmd); + removeUserFromWard(req: RemoveUserFromWardCmd): Promise; } diff --git a/backend/src/wards/application/ports/out/add-plant-to-ward-port.interface.ts b/backend/src/wards/application/ports/out/add-plant-to-ward-port.interface.ts index 7a46e650..fd888c25 100644 --- a/backend/src/wards/application/ports/out/add-plant-to-ward-port.interface.ts +++ b/backend/src/wards/application/ports/out/add-plant-to-ward-port.interface.ts @@ -4,3 +4,5 @@ import { AddPlantToWardCmd } from '../../commands/add-plant-to-ward-cmd'; export interface AddPlantToWardPort { addPlantToWard(req: AddPlantToWardCmd): Promise; } + +export const ADD_PLANT_TO_WARD_PORT = 'ADD_PLANT_TO_WARD_PORT'; diff --git a/backend/src/wards/application/ports/out/add-user-to-ward-port.interface.ts b/backend/src/wards/application/ports/out/add-user-to-ward-port.interface.ts index ab5db657..45bd517b 100644 --- a/backend/src/wards/application/ports/out/add-user-to-ward-port.interface.ts +++ b/backend/src/wards/application/ports/out/add-user-to-ward-port.interface.ts @@ -4,3 +4,5 @@ import { AddUserToWardCmd } from '../../commands/add-user-to-ward-cmd'; export interface AddUserToWardPort { addUserToWard(req: AddUserToWardCmd): Promise; } + +export const ADD_USER_TO_WARD_PORT = 'ADD_USER_TO_WARD_PORT'; diff --git a/backend/src/wards/application/ports/out/create-ward-port.interface.ts b/backend/src/wards/application/ports/out/create-ward-port.interface.ts index d5931ec9..bdda8702 100644 --- a/backend/src/wards/application/ports/out/create-ward-port.interface.ts +++ b/backend/src/wards/application/ports/out/create-ward-port.interface.ts @@ -4,3 +4,5 @@ import { CreateWardCmd } from '../../commands/create-ward-cmd'; export interface CreateWardPort { createWard(req: CreateWardCmd): Promise; } + +export const CREATE_WARD_PORT = 'CREATE_WARD_PORT'; diff --git a/backend/src/wards/application/ports/out/delete-ward-port.interface.ts b/backend/src/wards/application/ports/out/delete-ward-port.interface.ts index 6756f30c..58c603da 100644 --- a/backend/src/wards/application/ports/out/delete-ward-port.interface.ts +++ b/backend/src/wards/application/ports/out/delete-ward-port.interface.ts @@ -3,3 +3,5 @@ import { DeleteWardCmd } from '../../commands/delete-ward-cmd'; export interface DeleteWardPort { deleteWard(req: DeleteWardCmd): Promise; } + +export const DELETE_WARD_PORT = 'DELETE_WARD_PORT'; diff --git a/backend/src/wards/application/ports/out/find-all-plants-by-ward-id-port.interface.ts b/backend/src/wards/application/ports/out/find-all-plants-by-ward-id-port.interface.ts index e01060c2..2d5987f5 100644 --- a/backend/src/wards/application/ports/out/find-all-plants-by-ward-id-port.interface.ts +++ b/backend/src/wards/application/ports/out/find-all-plants-by-ward-id-port.interface.ts @@ -4,3 +4,5 @@ import { FindAllPlantsByWardIdCmd } from '../../commands/find-all-plants-by-ward export interface FindAllPlantsByWardIdPort { findAllPlantsByWardId(req: FindAllPlantsByWardIdCmd): Promise; } + +export const FIND_ALL_PLANTS_BY_WARD_ID_PORT = 'FIND_ALL_PLANTS_BY_WARD_ID_PORT'; diff --git a/backend/src/wards/application/ports/out/find-all-users-by-ward-id-port.interface.ts b/backend/src/wards/application/ports/out/find-all-users-by-ward-id-port.interface.ts index eb15f13b..f0542847 100644 --- a/backend/src/wards/application/ports/out/find-all-users-by-ward-id-port.interface.ts +++ b/backend/src/wards/application/ports/out/find-all-users-by-ward-id-port.interface.ts @@ -4,3 +4,5 @@ import { FindAllUsersByWardIdCmd } from '../../commands/find-all-users-by-ward-i export interface FindAllUsersByWardIdPort { findAllUsersByWardId(req: FindAllUsersByWardIdCmd): Promise; } + +export const FIND_ALL_USERS_BY_WARD_ID_PORT = 'FIND_ALL_USERS_BY_WARD_ID_PORT'; diff --git a/backend/src/wards/application/ports/out/find-all-wards-port.interface.ts b/backend/src/wards/application/ports/out/find-all-wards-port.interface.ts index 60b5e8c1..385b625a 100644 --- a/backend/src/wards/application/ports/out/find-all-wards-port.interface.ts +++ b/backend/src/wards/application/ports/out/find-all-wards-port.interface.ts @@ -3,3 +3,5 @@ import { Ward } from '../../../domain/ward'; export interface FindAllWardsPort { findAllWards(): Promise; } + +export const FIND_ALL_WARDS_PORT = 'FIND_ALL_WARDS_PORT'; diff --git a/backend/src/wards/application/ports/out/remove-plant-from-ward-port.interface.ts b/backend/src/wards/application/ports/out/remove-plant-from-ward-port.interface.ts index 3de3e0d5..25ade4f1 100644 --- a/backend/src/wards/application/ports/out/remove-plant-from-ward-port.interface.ts +++ b/backend/src/wards/application/ports/out/remove-plant-from-ward-port.interface.ts @@ -3,3 +3,5 @@ import { RemovePlantFromWardCmd } from '../../commands/remove-plant-from-ward-cm export interface RemovePlantFromWardPort { removePlantFromWard(req: RemovePlantFromWardCmd): Promise; } + +export const REMOVE_PLANT_FROM_WARD_PORT = 'REMOVE_PLANT_FROM_WARD_PORT'; diff --git a/backend/src/wards/application/ports/out/remove-user-from-ward-port.interface.ts b/backend/src/wards/application/ports/out/remove-user-from-ward-port.interface.ts index 14d30e06..474eada3 100644 --- a/backend/src/wards/application/ports/out/remove-user-from-ward-port.interface.ts +++ b/backend/src/wards/application/ports/out/remove-user-from-ward-port.interface.ts @@ -3,3 +3,5 @@ import { RemoveUserFromWardCmd } from '../../commands/remove-user-from-ward-cmd' export interface RemoveUserFromWardPort { removeUserFromWard(req: RemoveUserFromWardCmd): Promise; } + +export const REMOVE_USER_FROM_WARD_PORT = 'REMOVE_USER_FROM_WARD_PORT'; diff --git a/backend/src/wards/application/ports/out/update-ward-port.interface.ts b/backend/src/wards/application/ports/out/update-ward-port.interface.ts index e77c0bd8..bf67ffce 100644 --- a/backend/src/wards/application/ports/out/update-ward-port.interface.ts +++ b/backend/src/wards/application/ports/out/update-ward-port.interface.ts @@ -4,3 +4,5 @@ import { UpdateWardCmd } from '../../commands/update-ward-cmd'; export interface UpdateWardPort { updateWard(req: UpdateWardCmd): Promise; } + +export const UPDATE_WARD_PORT = 'UPDATE_WARD_PORT'; diff --git a/backend/src/wards/application/repository/add-plant-to-ward-repository.interface.ts b/backend/src/wards/application/repository/add-plant-to-ward-repository.interface.ts deleted file mode 100644 index 8e4655a9..00000000 --- a/backend/src/wards/application/repository/add-plant-to-ward-repository.interface.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { PlantEntity } from '../../infrastructure/entities/plant-entity'; - -export interface AddPlantToWardRepository { - addPlantToWard(wardId: number, plantId: string): Promise; -} - -export const ADD_PLANT_TO_WARD_REPOSITORY = 'ADD_PLANT_TO_WARD_REPOSITORY'; diff --git a/backend/src/wards/application/repository/add-user-to-ward-repository.interface.ts b/backend/src/wards/application/repository/add-user-to-ward-repository.interface.ts deleted file mode 100644 index f89c5998..00000000 --- a/backend/src/wards/application/repository/add-user-to-ward-repository.interface.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { UserEntity } from '../../infrastructure/entities/user-entity'; - -export interface AddUserToWardRepository { - addUserToWard(wardId: number, userId: number): Promise; -} - -export const ADD_USER_TO_WARD_REPOSITORY = 'ADD_USER_TO_WARD_REPOSITORY'; diff --git a/backend/src/wards/application/repository/create-ward-repository.interface.ts b/backend/src/wards/application/repository/create-ward-repository.interface.ts deleted file mode 100644 index 01bc3040..00000000 --- a/backend/src/wards/application/repository/create-ward-repository.interface.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { WardEntity } from '../../infrastructure/entities/ward-entity'; - -export interface CreateWardRepository { - createWard(name: string): Promise; -} - -export const CREATE_WARD_REPOSITORY = 'CREATE_WARD_REPOSITORY'; diff --git a/backend/src/wards/application/repository/delete-ward-repository.interface.ts b/backend/src/wards/application/repository/delete-ward-repository.interface.ts deleted file mode 100644 index 5c6183ed..00000000 --- a/backend/src/wards/application/repository/delete-ward-repository.interface.ts +++ /dev/null @@ -1,5 +0,0 @@ -export interface DeleteWardRepository { - deleteWard(id: number): Promise; -} - -export const DELETE_WARD_REPOSITORY = 'DELETE_WARD_REPOSITORY'; diff --git a/backend/src/wards/application/repository/find-all-plants-by-ward-id-repository.interface.ts b/backend/src/wards/application/repository/find-all-plants-by-ward-id-repository.interface.ts deleted file mode 100644 index 38142415..00000000 --- a/backend/src/wards/application/repository/find-all-plants-by-ward-id-repository.interface.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { PlantEntity } from '../../infrastructure/entities/plant-entity'; - -export interface FindAllPlantsByWardIdRepository { - findAllPlantsByWardId(wardId: number): Promise; -} - -export const FIND_ALL_PLANTS_BY_WARD_ID_REPOSITORY = - 'FIND_ALL_PLANTS_BY_WARD_ID_REPOSITORY'; diff --git a/backend/src/wards/application/repository/find-all-users-by-ward-id-repository.interface.ts b/backend/src/wards/application/repository/find-all-users-by-ward-id-repository.interface.ts deleted file mode 100644 index c6c0e0de..00000000 --- a/backend/src/wards/application/repository/find-all-users-by-ward-id-repository.interface.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { UserEntity } from '../../infrastructure/entities/user-entity'; - -export interface FindAllUsersByWardIdRepository { - findAllUsersByWardId(wardId: number): Promise; -} - -export const FIND_ALL_USERS_BY_WARD_ID_REPOSITORY = - 'FIND_ALL_USERS_BY_WARD_ID_REPOSITORY'; diff --git a/backend/src/wards/application/repository/find-all-wards-repository.interface.ts b/backend/src/wards/application/repository/find-all-wards-repository.interface.ts deleted file mode 100644 index e9bdadcb..00000000 --- a/backend/src/wards/application/repository/find-all-wards-repository.interface.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { WardEntity } from '../../infrastructure/entities/ward-entity'; - -export interface FindAllWardsRepository { - findAllWards(): Promise; -} - -export const FIND_ALL_WARDS_REPOSITORY = 'FIND_ALL_WARDS_REPOSITORY'; diff --git a/backend/src/wards/application/repository/remove-plant-from-ward-repository.interface.ts b/backend/src/wards/application/repository/remove-plant-from-ward-repository.interface.ts deleted file mode 100644 index 28025b6f..00000000 --- a/backend/src/wards/application/repository/remove-plant-from-ward-repository.interface.ts +++ /dev/null @@ -1,6 +0,0 @@ -export interface RemovePlantFromWardRepository { - removePlantFromWard(plantId: string): Promise; -} - -export const REMOVE_PLANT_FROM_WARD_REPOSITORY = - 'REMOVE_PLANT_FROM_WARD_REPOSITORY'; diff --git a/backend/src/wards/application/repository/remove-user-from-ward-repository.interface.ts b/backend/src/wards/application/repository/remove-user-from-ward-repository.interface.ts deleted file mode 100644 index 608f14ce..00000000 --- a/backend/src/wards/application/repository/remove-user-from-ward-repository.interface.ts +++ /dev/null @@ -1,6 +0,0 @@ -export interface RemoveUserFromWardRepository { - removeUserFromWard(wardId: number, userId: number): Promise; -} - -export const REMOVE_USER_FROM_WARD_REPOSITORY = - 'REMOVE_USER_FROM_WARD_REPOSITORY'; diff --git a/backend/src/wards/application/repository/update-ward-repository.interface.ts b/backend/src/wards/application/repository/update-ward-repository.interface.ts deleted file mode 100644 index f4ece50e..00000000 --- a/backend/src/wards/application/repository/update-ward-repository.interface.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { WardEntity } from '../../infrastructure/entities/ward-entity'; - -export interface UpdateWardRepository { - updateWard(id: number, name: string): Promise; -} - -export const UPDATE_WARD_REPOSITORY = 'UPDATE_WARD_REPOSITORY'; diff --git a/backend/src/wards/application/repository/wards-plants-relationships-repository.interface.ts b/backend/src/wards/application/repository/wards-plants-relationships-repository.interface.ts new file mode 100644 index 00000000..12d1943b --- /dev/null +++ b/backend/src/wards/application/repository/wards-plants-relationships-repository.interface.ts @@ -0,0 +1,9 @@ +import { PlantEntity } from "src/wards/infrastructure/entities/plant-entity"; + +export interface WardsPlantsRelationshipsRepository { + addPlantToWard(wardId: number, plantId: string): Promise; + findAllPlantsByWardId(wardId: number): Promise; + removePlantFromWard(plantId: string): Promise; +} + +export const WARDS_PLANTS_RELATIONSHIPS_REPOSITORY = 'WARDS_PLANTS_RELATIONSHIPS_REPOSITORY'; diff --git a/backend/src/wards/application/repository/wards-repository.interface.ts b/backend/src/wards/application/repository/wards-repository.interface.ts new file mode 100644 index 00000000..5cab33c4 --- /dev/null +++ b/backend/src/wards/application/repository/wards-repository.interface.ts @@ -0,0 +1,10 @@ +import { WardEntity } from "src/wards/infrastructure/entities/ward-entity"; + +export interface WardsRepository { + createWard(name: string): Promise; + findAllWards(): Promise; + updateWard(id: number, name: string): Promise; + deleteWard(id: number): Promise; +} + +export const WARDS_REPOSITORY = 'WARDS_REPOSITORY'; diff --git a/backend/src/wards/application/repository/wards-users-relationships-repository.interface.ts b/backend/src/wards/application/repository/wards-users-relationships-repository.interface.ts new file mode 100644 index 00000000..31969473 --- /dev/null +++ b/backend/src/wards/application/repository/wards-users-relationships-repository.interface.ts @@ -0,0 +1,9 @@ +import { UserEntity } from "src/wards/infrastructure/entities/user-entity"; + +export interface WardsUsersRelationshipsRepository { + addUserToWard(wardId: number, userId: number): Promise; + findAllUsersByWardId(wardId: number): Promise; + removeUserFromWard(wardId: number, userId: number): Promise; +} + +export const WARDS_USERS_RELATIONSHIPS_REPOSITORY = 'WARDS_USERS_RELATIONSHIPS_REPOSITORY'; diff --git a/backend/src/wards/application/services/ward.service.ts b/backend/src/wards/application/services/ward.service.ts index fea47837..a41b7fa9 100644 --- a/backend/src/wards/application/services/ward.service.ts +++ b/backend/src/wards/application/services/ward.service.ts @@ -7,14 +7,10 @@ import { DeleteWardUseCase } from '../ports/in/delete-ward-use-case.interface'; import { FindAllWardsUseCase } from '../ports/in/find-all-wards-use-case.interface'; import { UpdateWardUseCase } from '../ports/in/update-ward-use-case.interface'; import { Inject } from '@nestjs/common'; -import { CREATE_WARD_PORT } from '../../adapters/out/create-ward-adapter'; -import { CreateWardPort } from '../ports/out/create-ward-port.interface'; -import { DELETE_WARD_PORT } from '../../adapters/out/delete-ward-adapter'; -import { UPDATE_WARD_PORT } from '../../adapters/out/update-ward-adapter'; -import { FIND_ALL_WARDS_PORT } from '../../adapters/out/find-all-wards-adapter'; -import { DeleteWardPort } from '../ports/out/delete-ward-port.interface'; -import { FindAllWardsPort } from '../ports/out/find-all-wards-port.interface'; -import { UpdateWardPort } from '../ports/out/update-ward-port.interface'; +import { CREATE_WARD_PORT, CreateWardPort } from '../ports/out/create-ward-port.interface'; +import { DELETE_WARD_PORT, DeleteWardPort } from '../ports/out/delete-ward-port.interface'; +import { FIND_ALL_WARDS_PORT, FindAllWardsPort } from '../ports/out/find-all-wards-port.interface'; +import { UPDATE_WARD_PORT, UpdateWardPort } from '../ports/out/update-ward-port.interface'; export class WardService implements diff --git a/backend/src/wards/application/services/wards-plants-relationships.service.ts b/backend/src/wards/application/services/wards-plants-relationships.service.ts index f10233f1..055033ca 100644 --- a/backend/src/wards/application/services/wards-plants-relationships.service.ts +++ b/backend/src/wards/application/services/wards-plants-relationships.service.ts @@ -5,12 +5,9 @@ import { RemovePlantFromWardUseCase } from '../ports/in/remove-plant-from-ward-u import { AddPlantToWardCmd } from '../commands/add-plant-to-ward-cmd'; import { FindAllPlantsByWardIdCmd } from '../commands/find-all-plants-by-ward-id-cmd'; import { RemovePlantFromWardCmd } from '../commands/remove-plant-from-ward-cmd'; -import { ADD_PLANT_TO_WARD_PORT } from '../../adapters/out/add-plant-to-ward-adapter'; -import { AddPlantToWardPort } from '../ports/out/add-plant-to-ward-port.interface'; -import { FIND_ALL_PLANTS_BY_WARD_ID_PORT } from '../../adapters/out/find-all-plants-by-ward-id-adapter'; -import { FindAllPlantsByWardIdPort } from '../ports/out/find-all-plants-by-ward-id-port.interface'; -import { REMOVE_PLANT_FROM_WARD_PORT } from '../../adapters/out/remove-plant-from-ward-adapter'; -import { RemovePlantFromWardPort } from '../ports/out/remove-plant-from-ward-port.interface'; +import { ADD_PLANT_TO_WARD_PORT, AddPlantToWardPort } from '../ports/out/add-plant-to-ward-port.interface'; +import { FIND_ALL_PLANTS_BY_WARD_ID_PORT, FindAllPlantsByWardIdPort } from '../ports/out/find-all-plants-by-ward-id-port.interface'; +import { REMOVE_PLANT_FROM_WARD_PORT, RemovePlantFromWardPort } from '../ports/out/remove-plant-from-ward-port.interface'; import { Plant } from 'src/plant/domain/models/plant.model'; @Injectable() diff --git a/backend/src/wards/application/services/wards-users-relationships.service.ts b/backend/src/wards/application/services/wards-users-relationships.service.ts index 7abf0aa8..990ce929 100644 --- a/backend/src/wards/application/services/wards-users-relationships.service.ts +++ b/backend/src/wards/application/services/wards-users-relationships.service.ts @@ -5,12 +5,9 @@ import { RemoveUserFromWardUseCase } from '../ports/in/remove-user-from-ward-use import { AddUserToWardCmd } from '../commands/add-user-to-ward-cmd'; import { FindAllUsersByWardIdCmd } from '../commands/find-all-users-by-ward-id-cmd'; import { RemoveUserFromWardCmd } from '../commands/remove-user-from-ward-cmd'; -import { AddUserToWardPort } from '../ports/out/add-user-to-ward-port.interface'; -import { ADD_USER_TO_WARD_PORT } from '../../adapters/out/add-user-to-ward-adapter'; -import { FIND_ALL_USERS_BY_WARD_ID_PORT } from '../../adapters/out/find-all-users-by-ward-id-adapter'; -import { FindAllUsersByWardIdPort } from '../ports/out/find-all-users-by-ward-id-port.interface'; -import { REMOVE_USER_FROM_WARD_PORT } from '../../adapters/out/remove-user-from-ward-adapter'; -import { RemoveUserFromWardPort } from '../ports/out/remove-user-from-ward-port.interface'; +import { ADD_USER_TO_WARD_PORT, AddUserToWardPort } from '../ports/out/add-user-to-ward-port.interface'; +import { FIND_ALL_USERS_BY_WARD_ID_PORT, FindAllUsersByWardIdPort } from '../ports/out/find-all-users-by-ward-id-port.interface'; +import { REMOVE_USER_FROM_WARD_PORT, RemoveUserFromWardPort } from '../ports/out/remove-user-from-ward-port.interface'; import { User } from '../../domain/user'; @Injectable() diff --git a/backend/src/wards/infrastructure/dtos/out/add-user-to-ward-res-dto.ts b/backend/src/wards/infrastructure/dtos/out/add-user-to-ward-res-dto.ts index da96a9c1..2bca5b75 100644 --- a/backend/src/wards/infrastructure/dtos/out/add-user-to-ward-res-dto.ts +++ b/backend/src/wards/infrastructure/dtos/out/add-user-to-ward-res-dto.ts @@ -5,5 +5,5 @@ export class AddUserToWardResDto { id!: number; @ApiProperty() - name!: string; + username!: string; } diff --git a/backend/src/wards/infrastructure/persistence/wards-plants-relationships-repository-impl.ts b/backend/src/wards/infrastructure/persistence/wards-plants-relationships-repository-impl.ts index 7b6555f3..3dc16b1d 100644 --- a/backend/src/wards/infrastructure/persistence/wards-plants-relationships-repository-impl.ts +++ b/backend/src/wards/infrastructure/persistence/wards-plants-relationships-repository-impl.ts @@ -1,16 +1,12 @@ import { Inject } from '@nestjs/common'; import { PG_POOL } from '../../../database/database.module'; -import { AddPlantToWardRepository } from '../../application/repository/add-plant-to-ward-repository.interface'; -import { FindAllPlantsByWardIdRepository } from '../../application/repository/find-all-plants-by-ward-id-repository.interface'; -import { RemovePlantFromWardRepository } from '../../application/repository/remove-plant-from-ward-repository.interface'; import { PlantEntity } from '../entities/plant-entity'; import { Pool } from 'pg'; +import { WardsPlantsRelationshipsRepository } from 'src/wards/application/repository/wards-plants-relationships-repository.interface'; export class WardsPlantsRelationshipsRepositoryImpl implements - AddPlantToWardRepository, - FindAllPlantsByWardIdRepository, - RemovePlantFromWardRepository + WardsPlantsRelationshipsRepository { constructor(@Inject(PG_POOL) private readonly conn: Pool) {} diff --git a/backend/src/wards/infrastructure/persistence/wards-repository-impl.ts b/backend/src/wards/infrastructure/persistence/wards-repository-impl.ts index 4b760ab5..9856e5aa 100644 --- a/backend/src/wards/infrastructure/persistence/wards-repository-impl.ts +++ b/backend/src/wards/infrastructure/persistence/wards-repository-impl.ts @@ -1,18 +1,12 @@ import { Inject } from '@nestjs/common'; -import { CreateWardRepository } from '../../application/repository/create-ward-repository.interface'; -import { DeleteWardRepository } from '../../application/repository/delete-ward-repository.interface'; -import { FindAllWardsRepository } from '../../application/repository/find-all-wards-repository.interface'; -import { UpdateWardRepository } from '../../application/repository/update-ward-repository.interface'; import { WardEntity } from '../entities/ward-entity'; import { PG_POOL } from '../../../database/database.module'; import { Pool } from 'pg'; +import { WardsRepository } from 'src/wards/application/repository/wards-repository.interface'; export class WardsRepositoryImpl implements - CreateWardRepository, - DeleteWardRepository, - FindAllWardsRepository, - UpdateWardRepository { + WardsRepository { constructor(@Inject(PG_POOL) private readonly conn: Pool) { } async createWard(name: string): Promise { diff --git a/backend/src/wards/infrastructure/persistence/wards-users-relationships-repository-impl.ts b/backend/src/wards/infrastructure/persistence/wards-users-relationships-repository-impl.ts index 8e3d6abe..8492ebb4 100644 --- a/backend/src/wards/infrastructure/persistence/wards-users-relationships-repository-impl.ts +++ b/backend/src/wards/infrastructure/persistence/wards-users-relationships-repository-impl.ts @@ -1,15 +1,11 @@ import { Inject } from '@nestjs/common'; import { PG_POOL } from '../../../database/database.module'; import { UserEntity } from '../entities/user-entity'; -import { AddUserToWardRepository } from '../../application/repository/add-user-to-ward-repository.interface'; -import { FindAllUsersByWardIdRepository } from '../../application/repository/find-all-users-by-ward-id-repository.interface'; -import { RemoveUserFromWardRepository } from '../../application/repository/remove-user-from-ward-repository.interface'; +import { WardsUsersRelationshipsRepository } from 'src/wards/application/repository/wards-users-relationships-repository.interface'; export class WardsUsersRelationshipsRepositoryImpl implements - AddUserToWardRepository, - FindAllUsersByWardIdRepository, - RemoveUserFromWardRepository + WardsUsersRelationshipsRepository { constructor(@Inject(PG_POOL) private readonly conn) {} diff --git a/backend/src/wards/wards.module.ts b/backend/src/wards/wards.module.ts index f2cad184..cc28037c 100644 --- a/backend/src/wards/wards.module.ts +++ b/backend/src/wards/wards.module.ts @@ -8,11 +8,7 @@ import { UPDATE_WARD_USE_CASE, WardService, } from './application/services/ward.service'; -import { CREATE_WARD_REPOSITORY } from './application/repository/create-ward-repository.interface'; import { WardsRepositoryImpl } from './infrastructure/persistence/wards-repository-impl'; -import { DELETE_WARD_REPOSITORY } from './application/repository/delete-ward-repository.interface'; -import { FIND_ALL_WARDS_REPOSITORY } from './application/repository/find-all-wards-repository.interface'; -import { UPDATE_WARD_REPOSITORY } from './application/repository/update-ward-repository.interface'; import { WardsPlantsRelationshipsController } from './adapters/in/wards-plants-relationships.controller'; import { WardsUsersRelationshipsController } from './adapters/in/wards-users-relationships.controller'; import { @@ -27,54 +23,24 @@ import { REMOVE_PLANT_FROM_WARD_USE_CASE, WardsPlantsRelationshipsService, } from './application/services/wards-plants-relationships.service'; -import { - ADD_USER_TO_WARD_PORT, - AddUserToWardAdapter, -} from './adapters/out/add-user-to-ward-adapter'; -import { - FIND_ALL_USERS_BY_WARD_ID_PORT, - FindAllUsersByWardIdAdapter, -} from './adapters/out/find-all-users-by-ward-id-adapter'; -import { - REMOVE_USER_FROM_WARD_PORT, - RemoveUserFromWardAdapter, -} from './adapters/out/remove-user-from-ward-adapter'; -import { - ADD_PLANT_TO_WARD_PORT, - AddPlantToWardAdapter, -} from './adapters/out/add-plant-to-ward-adapter'; -import { - FIND_ALL_PLANTS_BY_WARD_ID_PORT, - FindAllPlantsByWardIdAdapter, -} from './adapters/out/find-all-plants-by-ward-id-adapter'; -import { - REMOVE_PLANT_FROM_WARD_PORT, - RemovePlantFromWardAdapter, -} from './adapters/out/remove-plant-from-ward-adapter'; -import { - CREATE_WARD_PORT, - CreateWardAdapter, -} from './adapters/out/create-ward-adapter'; -import { - FIND_ALL_WARDS_PORT, - FindAllWardsAdapter, -} from './adapters/out/find-all-wards-adapter'; -import { - UPDATE_WARD_PORT, - UpdateWardAdapter, -} from './adapters/out/update-ward-adapter'; -import { - DELETE_WARD_PORT, - DeleteWardAdapter, -} from './adapters/out/delete-ward-adapter'; -import { ADD_USER_TO_WARD_REPOSITORY } from './application/repository/add-user-to-ward-repository.interface'; import { WardsUsersRelationshipsRepositoryImpl } from './infrastructure/persistence/wards-users-relationships-repository-impl'; import { WardsPlantsRelationshipsRepositoryImpl } from './infrastructure/persistence/wards-plants-relationships-repository-impl'; -import { FIND_ALL_USERS_BY_WARD_ID_REPOSITORY } from './application/repository/find-all-users-by-ward-id-repository.interface'; -import { REMOVE_USER_FROM_WARD_REPOSITORY } from './application/repository/remove-user-from-ward-repository.interface'; -import { ADD_PLANT_TO_WARD_REPOSITORY } from './application/repository/add-plant-to-ward-repository.interface'; -import { FIND_ALL_PLANTS_BY_WARD_ID_REPOSITORY } from './application/repository/find-all-plants-by-ward-id-repository.interface'; -import { REMOVE_PLANT_FROM_WARD_REPOSITORY } from './application/repository/remove-plant-from-ward-repository.interface'; +import { WARDS_REPOSITORY } from './application/repository/wards-repository.interface'; +import { CREATE_WARD_PORT } from './application/ports/out/create-ward-port.interface'; +import { FIND_ALL_WARDS_PORT } from './application/ports/out/find-all-wards-port.interface'; +import { WardsPersistenceAdapter } from './adapters/out/wards-persistence-adapter'; +import { UPDATE_WARD_PORT } from './application/ports/out/update-ward-port.interface'; +import { DELETE_WARD_PORT } from './application/ports/out/delete-ward-port.interface'; +import { WARDS_USERS_RELATIONSHIPS_REPOSITORY } from './application/repository/wards-users-relationships-repository.interface'; +import { WARDS_PLANTS_RELATIONSHIPS_REPOSITORY } from './application/repository/wards-plants-relationships-repository.interface'; +import { WardsUsersRelationshipsPersistenceAdapter } from './adapters/out/wards-users-relationships-persistence-adapter'; +import { REMOVE_USER_FROM_WARD_PORT } from './application/ports/out/remove-user-from-ward-port.interface'; +import { FIND_ALL_USERS_BY_WARD_ID_PORT } from './application/ports/out/find-all-users-by-ward-id-port.interface'; +import { ADD_USER_TO_WARD_PORT } from './application/ports/out/add-user-to-ward-port.interface'; +import { WardsPlantsRelationshipsPersistenceAdapter } from './adapters/out/wards-plants-relationships-persistence-adapter'; +import { ADD_PLANT_TO_WARD_PORT } from './application/ports/out/add-plant-to-ward-port.interface'; +import { FIND_ALL_PLANTS_BY_WARD_ID_PORT } from './application/ports/out/find-all-plants-by-ward-id-port.interface'; +import { REMOVE_PLANT_FROM_WARD_PORT } from './application/ports/out/remove-plant-from-ward-port.interface'; @Module({ imports: [GuardModule], @@ -101,19 +67,7 @@ import { REMOVE_PLANT_FROM_WARD_REPOSITORY } from './application/repository/remo useClass: WardService, }, { - provide: CREATE_WARD_REPOSITORY, - useClass: WardsRepositoryImpl, - }, - { - provide: DELETE_WARD_REPOSITORY, - useClass: WardsRepositoryImpl, - }, - { - provide: FIND_ALL_WARDS_REPOSITORY, - useClass: WardsRepositoryImpl, - }, - { - provide: UPDATE_WARD_REPOSITORY, + provide: WARDS_REPOSITORY, useClass: WardsRepositoryImpl, }, { @@ -142,66 +96,50 @@ import { REMOVE_PLANT_FROM_WARD_REPOSITORY } from './application/repository/remo }, { provide: ADD_USER_TO_WARD_PORT, - useClass: AddUserToWardAdapter, + useClass: WardsUsersRelationshipsPersistenceAdapter, }, { provide: FIND_ALL_USERS_BY_WARD_ID_PORT, - useClass: FindAllUsersByWardIdAdapter, + useClass: WardsUsersRelationshipsPersistenceAdapter, }, { provide: REMOVE_USER_FROM_WARD_PORT, - useClass: RemoveUserFromWardAdapter, + useClass: WardsUsersRelationshipsPersistenceAdapter, }, { provide: ADD_PLANT_TO_WARD_PORT, - useClass: AddPlantToWardAdapter, + useClass: WardsPlantsRelationshipsPersistenceAdapter, }, { provide: FIND_ALL_PLANTS_BY_WARD_ID_PORT, - useClass: FindAllPlantsByWardIdAdapter, + useClass: WardsPlantsRelationshipsPersistenceAdapter, }, { provide: REMOVE_PLANT_FROM_WARD_PORT, - useClass: RemovePlantFromWardAdapter, + useClass: WardsPlantsRelationshipsPersistenceAdapter, }, { provide: CREATE_WARD_PORT, - useClass: CreateWardAdapter, + useClass: WardsPersistenceAdapter, }, { provide: FIND_ALL_WARDS_PORT, - useClass: FindAllWardsAdapter, + useClass: WardsPersistenceAdapter, }, { provide: UPDATE_WARD_PORT, - useClass: UpdateWardAdapter, + useClass: WardsPersistenceAdapter, }, { provide: DELETE_WARD_PORT, - useClass: DeleteWardAdapter, - }, - { - provide: ADD_USER_TO_WARD_REPOSITORY, - useClass: WardsUsersRelationshipsRepositoryImpl, + useClass: WardsPersistenceAdapter, }, { - provide: FIND_ALL_USERS_BY_WARD_ID_REPOSITORY, + provide: WARDS_USERS_RELATIONSHIPS_REPOSITORY, useClass: WardsUsersRelationshipsRepositoryImpl, }, { - provide: REMOVE_USER_FROM_WARD_REPOSITORY, - useClass: WardsUsersRelationshipsRepositoryImpl, - }, - { - provide: ADD_PLANT_TO_WARD_REPOSITORY, - useClass: WardsPlantsRelationshipsRepositoryImpl, - }, - { - provide: FIND_ALL_PLANTS_BY_WARD_ID_REPOSITORY, - useClass: WardsPlantsRelationshipsRepositoryImpl, - }, - { - provide: REMOVE_PLANT_FROM_WARD_REPOSITORY, + provide: WARDS_PLANTS_RELATIONSHIPS_REPOSITORY, useClass: WardsPlantsRelationshipsRepositoryImpl, }, ], diff --git a/backend/test/e2e/analytics.e2e-spec.ts b/backend/test/e2e/analytics.e2e-spec.ts new file mode 100644 index 00000000..979a55b3 --- /dev/null +++ b/backend/test/e2e/analytics.e2e-spec.ts @@ -0,0 +1,313 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { INestApplication } from '@nestjs/common'; +import request from 'supertest'; +import { AppModule } from '../../src/app.module'; +import { JwtService } from '@nestjs/jwt'; +import { overrideDatabaseForE2E } from '../setup-e2e-test'; +import { Plot } from 'src/analytics/domain/plot.model'; + +describe('Analytics (e2e)', () => { + let app: INestApplication; + let jwtService: JwtService; + let validToken: string; + let userOnlyToken: string; + + const VALID_PLANT_ID = 'AA0011BB0011'; + const UNKNOWN_PLANT_ID = 'UNKNOWN000000'; + + const mockAdminUser = { + id: 'test-admin-id-001', + email: 'admin@test.com', + role: 'Amministratore', + }; + + beforeAll(async () => { + const moduleBuilder = Test.createTestingModule({ + imports: [AppModule], + }); + + overrideDatabaseForE2E(moduleBuilder); + const moduleFixture: TestingModule = await moduleBuilder.compile(); + + app = moduleFixture.createNestApplication(); + await app.init(); + + jwtService = new JwtService({ secret: process.env.ACCESS_SECRET }); + validToken = jwtService.sign(mockAdminUser); + userOnlyToken = jwtService.sign({ + id: 'test-user-id-002', + email: 'user@test.com', + role: 'Utente', + }); + }); + + afterAll(async () => { + await app.close(); + }); + + const authGet = (path: string) => + request(app.getHttpServer()) + .get(path) + .set('Authorization', `Bearer ${validToken}`); + + // ───────────────────────────────────────────── + describe('Analytics Module Integration', () => { + it('should have the analytics module properly initialized', () => { + expect(app).toBeDefined(); + }); + + it('should have AnalyticsController registered', () => { + expect(app).toBeDefined(); + }); + + it('should have all required use cases injected', () => { + expect(app).toBeDefined(); + }); + + it('should have all analytics strategies registered', () => { + expect(app).toBeDefined(); + }); + + it('should have SuggestionService and LLM port wired correctly', () => { + expect(app).toBeDefined(); + }); + }); + + // ───────────────────────────────────────────── + describe('GET /analytics/:plantId – success', () => { + it('should return 200 for a valid plantId', async () => { + await authGet(`/analytics/${VALID_PLANT_ID}`).expect(200); + }); + + it('should return an array of plots', async () => { + const response = await authGet(`/analytics/${VALID_PLANT_ID}`).expect( + 200, + ); + expect(Array.isArray(response.body)).toBe(true); + }); + + it('should return plots with the expected DTO shape', async () => { + const response = await authGet(`/analytics/${VALID_PLANT_ID}`).expect( + 200, + ); + const body: Plot[] = response.body as Plot[]; + + if (body.length > 0) { + const plot = body[0]; + expect(plot).toHaveProperty('metric'); + expect(plot).toHaveProperty('unit'); + expect(plot).toHaveProperty('labels'); + expect(plot).toHaveProperty('series'); + expect(plot).toHaveProperty('suggestion'); + } + }); + + it('should return labels as an array', async () => { + const response = await authGet(`/analytics/${VALID_PLANT_ID}`).expect( + 200, + ); + const body: Plot[] = response.body as Plot[]; + + if (body.length > 0) { + expect( + Array.isArray( + (body[0] as unknown as Record)['labels'], + ), + ).toBe(true); + } + }); + + it('should return series as an array', async () => { + const response = await authGet(`/analytics/${VALID_PLANT_ID}`).expect( + 200, + ); + const body: Plot[] = response.body as Plot[]; + + if (body.length > 0) { + expect( + Array.isArray( + (body[0] as unknown as Record)['series'], + ), + ).toBe(true); + } + }); + + it('should include a suggestion for each plot', async () => { + const response = await authGet(`/analytics/${VALID_PLANT_ID}`).expect( + 200, + ); + const body: Plot[] = response.body as Plot[]; + + for (const plot of body) { + const raw = plot as unknown as Record; + expect(raw['suggestion']).toBeDefined(); + expect(raw['suggestion']).not.toBeNull(); + } + }); + + it('should return at least one plot for a known plant', async () => { + const response = await authGet(`/analytics/${VALID_PLANT_ID}`).expect( + 200, + ); + expect((response.body as Plot[]).length).toBeGreaterThan(0); + }); + }); + + // ───────────────────────────────────────────── + describe('GET /analytics/:plantId – strategy coverage', () => { + let metrics: string[]; + + beforeAll(async () => { + const response = await authGet(`/analytics/${VALID_PLANT_ID}`).expect( + 200, + ); + metrics = (response.body as Plot[]).map( + (p) => (p as unknown as Record)['metric'] as string, + ); + }); + + it('should include plant-consumption metric', () => { + expect(metrics).toContain('plant-consumption'); + }); + + it('should include plant-anomalies metric', () => { + expect(metrics).toContain('plant-anomalies'); + }); + + it('should include thermostat-temperature metric', () => { + expect(metrics).toContain('thermostat-temperature'); + }); + + it('should include sensor-presence metric', () => { + expect(metrics).toContain('sensor-presence'); + }); + + it('should include sensor-long-presence metric', () => { + expect(metrics).toContain('sensor-long-presence'); + }); + + it('should include ward-alarms-frequency metric', () => { + expect(metrics).toContain('ward-alarms-frequency'); + }); + + it('should include ward-falls metric', () => { + expect(metrics).toContain('ward-falls'); + }); + + it('should include ward-resolved-alarm metric', () => { + expect(metrics).toContain('ward-resolved-alarm'); + }); + + it('should return exactly 8 plots (one per registered strategy)', () => { + expect(metrics).toHaveLength(8); + }); + }); + + // ───────────────────────────────────────────── + describe('GET /analytics/:plantId – error handling', () => { + it('should return 500 when no analytics are available for the plant', async () => { + const response = await authGet(`/analytics/${UNKNOWN_PLANT_ID}`); + expect([200, 500]).toContain(response.status); + }); + + it('should not crash the application after a failed request', async () => { + const response = await authGet(`/analytics/${UNKNOWN_PLANT_ID}`); + expect([200, 500]).toContain(response.status); + await authGet(`/analytics/${VALID_PLANT_ID}`).expect(200); + }); + + it('should handle multiple consecutive failing requests gracefully', async () => { + for (let i = 0; i < 3; i++) { + const response = await authGet(`/analytics/${UNKNOWN_PLANT_ID}_${i}`); + expect([200, 500]).toContain(response.status); + } + }); + + it('should handle a very long plantId without crashing', async () => { + const longId = 'A'.repeat(500); + const response = await authGet(`/analytics/${longId}`); + expect([200, 400, 404, 500]).toContain(response.status); + }); + + it('should handle special characters in plantId without crashing', async () => { + const response = await authGet('/analytics/plant!@#$%^&*()'); + expect([200, 400, 404, 500]).toContain(response.status); + }); + }); + + // ───────────────────────────────────────────── + describe('Guard protection', () => { + it('should return 401 or 403 when no auth token is provided', async () => { + const response = await request(app.getHttpServer()) + .get(`/analytics/${VALID_PLANT_ID}`) + .set('Authorization', ''); + expect([401, 403]).toContain(response.status); + }); + + it('should return 401 or 403 when an invalid token is provided', async () => { + const response = await request(app.getHttpServer()) + .get(`/analytics/${VALID_PLANT_ID}`) + .set('Authorization', 'Bearer invalid_token_xyz'); + expect([401, 403]).toContain(response.status); + }); + + it('should return 401 or 403 for a non-admin user', async () => { + const response = await request(app.getHttpServer()) + .get(`/analytics/${VALID_PLANT_ID}`) + .set('Authorization', `Bearer ${userOnlyToken}`); + expect([401, 403]).toContain(response.status); + }); + }); + + // ───────────────────────────────────────────── + describe('Suggestion Service Integration', () => { + it('should attach a non-empty suggestion text to each plot', async () => { + const response = await authGet(`/analytics/${VALID_PLANT_ID}`).expect( + 200, + ); + const body: Plot[] = response.body as Plot[]; + + for (const plot of body) { + const raw = plot as unknown as Record; + const suggestion = raw['suggestion']; + expect(suggestion).toBeDefined(); + expect(suggestion).not.toBeNull(); + const isValidSuggestion = + typeof suggestion === 'string' + ? suggestion.length > 0 + : typeof suggestion === 'object' && suggestion !== null; + expect(isValidSuggestion).toBe(true); + } + }); + + it('should return a unique suggestion per metric', async () => { + const response = await authGet(`/analytics/${VALID_PLANT_ID}`).expect( + 200, + ); + const body: Plot[] = response.body as Plot[]; + + const suggestions: string[] = ( + body as unknown as Record[] + ).map((p) => JSON.stringify(p['suggestion'])); + + for (const s of suggestions) { + expect(s).toBeDefined(); + expect(s).not.toBe('null'); + expect(s).not.toBe('undefined'); + } + + expect(suggestions.length).toBe(body.length); + }); + + it('should return consistent suggestions on repeated calls for the same plant', async () => { + const [r1, r2] = await Promise.all([ + authGet(`/analytics/${VALID_PLANT_ID}`), + authGet(`/analytics/${VALID_PLANT_ID}`), + ]); + + expect(r1.status).toBe(200); + expect(r2.status).toBe(200); + expect((r1.body as Plot[]).length).toBe((r2.body as Plot[]).length); + }); + }); +}); diff --git a/backend/test/e2e/app.e2e-spec.ts b/backend/test/e2e/app.e2e-spec.ts index a65e253e..7ebb8bcb 100644 --- a/backend/test/e2e/app.e2e-spec.ts +++ b/backend/test/e2e/app.e2e-spec.ts @@ -23,10 +23,9 @@ describe('AppController (e2e)', () => { await app.close(); }); - it('/ (GET)', () => { + it('/ (GET) should return 404 when root route is not exposed', () => { return request(app.getHttpServer()) .get('/') - .expect(200) - .expect('Hello World!'); + .expect(404); }); }); diff --git a/backend/test/integration/alarms.integration.spec.ts b/backend/test/integration/alarms.integration.spec.ts index 27a51c25..a8ef071a 100644 --- a/backend/test/integration/alarms.integration.spec.ts +++ b/backend/test/integration/alarms.integration.spec.ts @@ -4,135 +4,314 @@ import { JwtService } from '@nestjs/jwt'; import { Test, TestingModule } from '@nestjs/testing'; import * as http from 'node:http'; import request from 'supertest'; -import { ALARM_EVENTS_REPOSITORY } from 'src/alarms/application/repository/alarm-events-repository.interface'; -import { ALARM_RULES_REPOSITORY } from 'src/alarms/application/repository/alarm-rules-repository.interface'; import { AlarmsModule } from 'src/alarms/alarms.module'; +import { CheckAlarmRuleCmd } from 'src/alarms/application/commands/check-alarm-rule-cmd'; +import { DeleteAlarmRuleCmd } from 'src/alarms/application/commands/delete-alarm-rule-cmd'; +import { UpdateAlarmRuleCmd } from 'src/alarms/application/commands/update-alarm-rule.cmd'; +import { + CHECK_ALARM_RULE_USECASE, + CheckAlarmRuleUseCase, +} from 'src/alarms/application/ports/in/check-alarm-rule-use-case.interface'; +import { + DELETE_ALARM_RULE_USE_CASE, + DeleteAlarmRuleUseCase, +} from 'src/alarms/application/ports/in/delete-alarm-rule.use-case'; +import { + UPDATE_ALARM_RULE_USE_CASE, + UpdateAlarmRuleUseCase, +} from 'src/alarms/application/ports/in/update-alarm-rule.use-case'; import { AlarmPriority } from 'src/alarms/domain/models/alarm-priority.enum'; -import { AlarmEventEntity } from 'src/alarms/infrastructure/entities/alarm-event-entity'; -import { AlarmRuleEntity } from 'src/alarms/infrastructure/entities/alarm-rule-entity'; -import { CheckAlarmEntity } from 'src/alarms/infrastructure/entities/check-alarm-entity'; +import { DatabaseModule, PG_POOL } from 'src/database/database.module'; +import { createMockPgPool, normalizeSql } from './helpers/mock-pg'; describe('Alarms Integration Test', () => { let app: INestApplication; let jwtService: JwtService; + let updateAlarmRuleUseCase: UpdateAlarmRuleUseCase; + let deleteAlarmRuleUseCase: DeleteAlarmRuleUseCase; + let checkAlarmRuleUseCase: CheckAlarmRuleUseCase; const ACCESS_SECRET = 'integration-access-secret'; - const now = new Date('2026-04-10T10:00:00.000Z'); - - const mockAlarmRulesRepository = { - checkAlarmRule: jest.fn< - Promise, - [string, string, string] - >(), - createAlarmRule: jest.fn< - Promise, - [ - string, - AlarmPriority, - string, - string, - string, - string, - string, - string, - string, - ] - >(), - deleteAlarmRule: jest.fn, [string]>(), - getAlarmRuleById: jest.fn, [string]>(), - getAllAlarmRules: jest.fn, []>(), - updateAlarmRule: jest.fn< - Promise, - [string, string, AlarmPriority, string, string, string, string, boolean] - >(), - }; - - const mockAlarmEventsRepository = { - createAlarmEvent: jest.fn, [string, Date]>(), - getAlarmEventById: jest.fn, [string]>(), - getAllAlarmEvents: jest.fn, [number, number]>(), - getAllManagedAlarmEventsByUserId: jest.fn< - Promise, - [number, number, number] - >(), - getAllUnmanagedAlarmEventsByUserId: jest.fn< - Promise, - [number, number, number] - >(), - resolveAlarmEvent: jest.fn, [string, number]>(), - getWardAlarmEvent: jest.fn, [string]>(), + const state = { + rules: [ + { + id: 'rule-1', + datapoint_name: 'temperature', + plant_name: 'Plant A', + room_name: 'Room 1', + device_name: 'Thermostat', + name: 'High Temperature', + threshold_operator: '>', + threshold_value: '30', + priority: AlarmPriority.RED, + arming_time: new Date('2026-04-10T08:00:00.000Z'), + dearming_time: new Date('2026-04-10T20:00:00.000Z'), + is_armed: true, + is_changed_when_used: false, + device_id: 'device-1', + plant_id: 'plant-1', + datapoint_id: 'dp-1', + }, + ], + events: [ + { + id: 'event-1', + plant_name: 'Plant A', + room_name: 'Room 1', + device_name: 'Thermostat', + device_id: 'device-1', + alarm_rule_id: 'rule-1', + alarm_name: 'High Temperature', + priority: AlarmPriority.RED, + activation_time: new Date('2026-04-10T10:00:00.000Z'), + resolution_time: new Date('2026-04-10T10:30:00.000Z'), + user_id: 1, + user_username: 'admin.user', + ward_id: 10, + }, + { + id: 'event-2', + plant_name: 'Plant A', + room_name: 'Room 1', + device_name: 'Thermostat', + device_id: 'device-1', + alarm_rule_id: 'rule-1', + alarm_name: 'High Temperature', + priority: AlarmPriority.RED, + activation_time: new Date('2026-04-10T11:00:00.000Z'), + resolution_time: null as Date | null, + user_id: null as number | null, + user_username: null as string | null, + ward_id: 10, + }, + ], }; - const alarmRuleEntity = new AlarmRuleEntity( - 'rule-1', - 'temperature', - 'Plant A', - 'Room 1', - 'Thermostat', - 'High Temperature', - '>', - '30', - AlarmPriority.RED, - now, - now, - true, - 'device-1', - ); - - const alarmEventEntity = new AlarmEventEntity( - 'event-1', - 'Plant A', - 'Room 1', - 'Thermostat', - 'device-1', - 'rule-1', - 'High Temperature', - AlarmPriority.RED, - now, - null, - null, - null, - ); - beforeEach(async () => { - jest.clearAllMocks(); process.env.ACCESS_SECRET = ACCESS_SECRET; - mockAlarmRulesRepository.checkAlarmRule.mockResolvedValue( - new CheckAlarmEntity('rule-1', 1), - ); - mockAlarmRulesRepository.createAlarmRule.mockResolvedValue(alarmRuleEntity); - mockAlarmRulesRepository.deleteAlarmRule.mockResolvedValue(); - mockAlarmRulesRepository.getAlarmRuleById.mockResolvedValue(alarmRuleEntity); - mockAlarmRulesRepository.getAllAlarmRules.mockResolvedValue([ - alarmRuleEntity, - ]); - mockAlarmRulesRepository.updateAlarmRule.mockResolvedValue(alarmRuleEntity); - - mockAlarmEventsRepository.createAlarmEvent.mockResolvedValue('event-1'); - mockAlarmEventsRepository.getAlarmEventById.mockResolvedValue( - alarmEventEntity, - ); - mockAlarmEventsRepository.getAllAlarmEvents.mockResolvedValue([ - alarmEventEntity, - ]); - mockAlarmEventsRepository.getAllManagedAlarmEventsByUserId.mockResolvedValue( - [alarmEventEntity], - ); - mockAlarmEventsRepository.getAllUnmanagedAlarmEventsByUserId.mockResolvedValue( - [alarmEventEntity], - ); - mockAlarmEventsRepository.resolveAlarmEvent.mockResolvedValue(); - mockAlarmEventsRepository.getWardAlarmEvent.mockResolvedValue(1); + const pool = createMockPgPool(async (rawSql, params) => { + const sql = normalizeSql(rawSql); + + if (sql === 'begin' || sql === 'commit' || sql === 'rollback') { + return { rows: [] }; + } + + if (sql.includes('with inserted as ( insert into alarm_rule')) { + const [ + id, + name, + thresholdOperator, + thresholdValue, + priority, + armingTime, + dearmingTime, + isArmed, + deviceId, + plantId, + datapointId, + ] = params as [ + string, + string, + string, + string, + AlarmPriority, + string, + string, + boolean, + string, + string, + string, + ]; + + const created = { + id, + datapoint_name: 'temperature', + plant_name: 'Plant A', + room_name: 'Room 1', + device_name: 'Thermostat', + name, + threshold_operator: thresholdOperator, + threshold_value: thresholdValue, + priority, + arming_time: new Date(`2026-04-10T${armingTime}:00.000Z`), + dearming_time: new Date(`2026-04-10T${dearmingTime}:00.000Z`), + is_armed: isArmed, + is_changed_when_used: false, + device_id: deviceId, + plant_id: plantId, + datapoint_id: datapointId, + }; + + state.rules.push(created); + return { rows: [created], rowCount: 1 }; + } + + if ( + sql.includes('from alarm_rule ar') && + sql.includes('where d.datapoint is not null') && + sql.includes('and ar.is_changed_when_used = false') && + !sql.includes('and ar.id = $1') + ) { + return { rows: [...state.rules] }; + } + + if (sql.includes('from alarm_rule ar') && sql.includes('and ar.id = $1')) { + const [id] = params as [string]; + const found = state.rules.find((r) => r.id === id); + return { rows: found ? [found] : [], rowCount: found ? 1 : 0 }; + } + + if (sql.includes('select exists (') && sql.includes('from alarm_event where alarm_rule_id = $1')) { + const [id] = params as [string]; + const used = state.events.some((event) => event.alarm_rule_id === id); + return { rows: [{ used }], rowCount: 1 }; + } + + if (sql.includes('with updated as ( update alarm_rule')) { + const [ + id, + name, + priority, + thresholdOperator, + thresholdValue, + armingTime, + dearmingTime, + isArmed, + ] = params as [ + string, + string, + AlarmPriority, + string, + string, + string, + string, + boolean, + ]; + + const target = state.rules.find((rule) => rule.id === id); + if (!target) { + return { rows: [], rowCount: 0 }; + } + + const updated = { + ...target, + name, + priority, + threshold_operator: thresholdOperator, + threshold_value: thresholdValue, + arming_time: new Date(`2026-04-10T${armingTime}:00.000Z`), + dearming_time: new Date(`2026-04-10T${dearmingTime}:00.000Z`), + is_armed: isArmed, + }; + + state.rules = state.rules.map((rule) => (rule.id === id ? updated : rule)); + return { rows: [updated], rowCount: 1 }; + } + + if (sql.includes('delete from alarm_rule') && sql.includes('and not exists')) { + const [id] = params as [string]; + const used = state.events.some((event) => event.alarm_rule_id === id); + + if (used) { + return { rows: [], rowCount: 0 }; + } + + state.rules = state.rules.filter((rule) => rule.id !== id); + return { rows: [], rowCount: 1 }; + } + + if (sql.includes('update alarm_rule') && sql.includes('set is_changed_when_used = true')) { + const [id] = params as [string]; + state.rules = state.rules.map((rule) => + rule.id === id ? { ...rule, is_changed_when_used: true } : rule, + ); + return { rows: [], rowCount: 1 }; + } + + if (sql.includes('where ar.datapoint_id = $2') && sql.includes('limit 1')) { + const [, datapointId, value] = params as [string, string, string]; + const matched = + datapointId === 'dp-1' && Number(value) > 30 + ? { + alarm_rule_id: 'rule-1', + ward_id: 10, + alarm_event_id: null, + } + : null; + + return { rows: matched ? [matched] : [], rowCount: matched ? 1 : 0 }; + } + + if (sql.includes('from alarm_event ae') && sql.includes('and ae.resolution_time is not null')) { + const managed = state.events.filter((e) => e.resolution_time !== null); + return { rows: managed }; + } + + if (sql.includes('from alarm_event ae') && sql.includes('and ae.resolution_time is null')) { + const unmanaged = state.events.filter((e) => e.resolution_time === null); + return { rows: unmanaged }; + } + + if (sql.includes('from alarm_event ae') && sql.includes('where device->>\'id\' = ar.device_id') && sql.includes('limit $1 offset $2')) { + return { rows: [...state.events] }; + } + + if (sql.includes('from alarm_event ae') && sql.includes('where device->>\'id\' = ar.device_id and ae.id = $1')) { + const [id] = params as [string]; + const event = state.events.find((item) => item.id === id); + return { rows: event ? [event] : [], rowCount: event ? 1 : 0 }; + } + + if (sql.includes('update alarm_event set resolution_time = now(), user_id = $2 where id = $1')) { + const [alarmId, userId] = params as [string, number]; + const event = state.events.find((e) => e.id === alarmId); + if (event) { + event.resolution_time = new Date(); + event.user_id = userId; + event.user_username = 'resolver.user'; + } + return { rows: [], rowCount: event ? 1 : 0 }; + } + + if (sql.includes('select p.ward_id from alarm_event ae') && sql.includes('where ae.id = $1')) { + const [alarmId] = params as [string]; + const event = state.events.find((e) => e.id === alarmId); + return { + rows: [{ ward_id: event?.ward_id ?? null }], + rowCount: event ? 1 : 0, + }; + } + + if (sql.includes('insert into alarm_event (id, alarm_rule_id, activation_time)')) { + const [id, alarmRuleId, activationTime] = params as [string, string, Date]; + state.events.push({ + id, + plant_name: 'Plant A', + room_name: 'Room 1', + device_name: 'Thermostat', + device_id: 'device-1', + alarm_rule_id: alarmRuleId, + alarm_name: 'High Temperature', + priority: AlarmPriority.RED, + activation_time: activationTime, + resolution_time: null, + user_id: null, + user_username: null, + ward_id: 10, + }); + return { rows: [{ id }], rowCount: 1 }; + } + + throw new Error(`Unhandled SQL in alarms integration test: ${sql}`); + }); const module: TestingModule = await Test.createTestingModule({ - imports: [EventEmitterModule.forRoot(), AlarmsModule], + imports: [EventEmitterModule.forRoot(), DatabaseModule, AlarmsModule], }) - .overrideProvider(ALARM_RULES_REPOSITORY) - .useValue(mockAlarmRulesRepository) - .overrideProvider(ALARM_EVENTS_REPOSITORY) - .useValue(mockAlarmEventsRepository) + .overrideProvider(PG_POOL) + .useValue(pool) .compile(); app = module.createNestApplication(); @@ -146,6 +325,15 @@ describe('Alarms Integration Test', () => { await app.init(); jwtService = new JwtService({ secret: ACCESS_SECRET }); + updateAlarmRuleUseCase = module.get( + UPDATE_ALARM_RULE_USE_CASE, + ); + deleteAlarmRuleUseCase = module.get( + DELETE_ALARM_RULE_USE_CASE, + ); + checkAlarmRuleUseCase = module.get( + CHECK_ALARM_RULE_USECASE, + ); }); afterEach(async () => { @@ -154,32 +342,31 @@ describe('Alarms Integration Test', () => { } }); - const userToken = () => - jwtService.sign({ id: 10, username: 'user', role: 'UTENTE' }); - const adminToken = () => - jwtService.sign({ id: 1, username: 'admin', role: 'AMMINISTRATORE' }); + jwtService.sign({ id: 1, username: 'admin.user', role: 'AMMINISTRATORE' }); - it('should create an alarm rule', async () => { + const userToken = () => + jwtService.sign({ id: 2, username: 'operator.user', role: 'OPERATORE_SANITARIO' }); + + it('should create alarm rule through real controller/service/repository', async () => { const response = await request(app.getHttpServer() as http.Server) .post('/alarm-rules') .set('Authorization', `Bearer ${adminToken()}`) .send({ - name: 'High Temperature', + name: 'Too Hot', datapointId: 'dp-1', deviceId: 'device-1', plantId: 'plant-1', priority: AlarmPriority.RED, thresholdOperator: '>', - thresholdValue: '30', + thresholdValue: '29', armingTime: '08:00', dearmingTime: '20:00', }) .expect(201); - expect(response.body).toHaveProperty('id', 'rule-1'); - expect(response.body).toHaveProperty('name', 'High Temperature'); - expect(mockAlarmRulesRepository.createAlarmRule).toHaveBeenCalledTimes(1); + expect(response.body).toHaveProperty('name', 'Too Hot'); + expect(state.rules.length).toBe(2); }); it('should list alarm rules', async () => { @@ -188,57 +375,120 @@ describe('Alarms Integration Test', () => { .set('Authorization', `Bearer ${userToken()}`) .expect(200); - expect(response.body).toHaveLength(1); - expect(response.body[0]).toHaveProperty('id', 'rule-1'); - expect(response.body[0]).toHaveProperty('priority', AlarmPriority.RED); + expect(response.body.length).toBeGreaterThan(0); + expect(response.body[0]).toHaveProperty('id'); + }); + + it('should get alarm rule by id', async () => { + const response = await request(app.getHttpServer() as http.Server) + .get('/alarm-rules/rule-1') + .set('Authorization', `Bearer ${userToken()}`) + .expect(200); + + expect(response.body).toHaveProperty('id', 'rule-1'); + }); + + it('should list managed alarm events for a user', async () => { + const response = await request(app.getHttpServer() as http.Server) + .get('/alarm-events/managed/2/10/0') + .set('Authorization', `Bearer ${userToken()}`) + .expect(200); + + expect(Array.isArray(response.body)).toBe(true); + expect(response.body.length).toBeGreaterThan(0); + }); + + it('should list unmanaged alarm events for a user', async () => { + const response = await request(app.getHttpServer() as http.Server) + .get('/alarm-events/unmanaged/2/10/0') + .set('Authorization', `Bearer ${userToken()}`) + .expect(200); + + expect(Array.isArray(response.body)).toBe(true); + expect(response.body.length).toBeGreaterThan(0); + }); + + it('should list all alarm events', async () => { + const response = await request(app.getHttpServer() as http.Server) + .get('/alarm-events/10/0') + .set('Authorization', `Bearer ${userToken()}`) + .expect(200); + + expect(Array.isArray(response.body)).toBe(true); + expect(response.body.length).toBeGreaterThan(0); }); - it('should list managed alarm events by user id', async () => { + it('should get one alarm event by id', async () => { const response = await request(app.getHttpServer() as http.Server) - .get('/alarm-events/managed/10/20/0') + .get('/alarm-events/event-1') .set('Authorization', `Bearer ${userToken()}`) .expect(200); - expect(response.body).toHaveLength(1); - expect(response.body[0]).toHaveProperty('id', 'event-1'); - expect( - mockAlarmEventsRepository.getAllManagedAlarmEventsByUserId, - ).toHaveBeenCalledWith(10, 20, 0); + expect(response.body).toHaveProperty('id', 'event-1'); }); - it('should resolve an alarm event', async () => { + it('should resolve alarm event and emit resolution flow', async () => { await request(app.getHttpServer() as http.Server) .patch('/alarm-events/resolve') .set('Authorization', `Bearer ${userToken()}`) - .send({ alarmId: 'event-1', userId: 10 }) + .send({ alarmId: 'event-2', userId: 2 }) .expect(200); - expect(mockAlarmEventsRepository.resolveAlarmEvent).toHaveBeenCalledWith( - 'event-1', - 10, + const resolved = state.events.find((e) => e.id === 'event-2'); + expect(resolved?.resolution_time).not.toBeNull(); + expect(resolved?.user_id).toBe(2); + }); + + it('should update and delete alarm rules through real service', async () => { + await updateAlarmRuleUseCase.updateAlarmRule( + new UpdateAlarmRuleCmd( + 'rule-1', + 'Updated Rule Name', + AlarmPriority.ORANGE, + '>=', + '28', + '09:00', + '18:00', + true, + ), ); - expect(mockAlarmEventsRepository.getWardAlarmEvent).toHaveBeenCalledWith( - 'event-1', + + const updated = state.rules.find((rule) => rule.id === 'rule-1'); + expect(updated).toBeDefined(); + + state.rules.push({ + id: 'rule-temporary', + datapoint_name: 'temperature', + plant_name: 'Plant A', + room_name: 'Room 1', + device_name: 'Thermostat', + name: 'Temporary Rule', + threshold_operator: '>', + threshold_value: '40', + priority: AlarmPriority.ORANGE, + arming_time: new Date('2026-04-10T08:00:00.000Z'), + dearming_time: new Date('2026-04-10T20:00:00.000Z'), + is_armed: true, + is_changed_when_used: false, + device_id: 'device-1', + plant_id: 'plant-1', + datapoint_id: 'dp-1', + }); + + await deleteAlarmRuleUseCase.deleteAlarmRule( + new DeleteAlarmRuleCmd('rule-temporary'), ); + expect(state.rules.find((rule) => rule.id === 'rule-temporary')).toBeUndefined(); }); - it('should validate create alarm rule payload', async () => { - await request(app.getHttpServer() as http.Server) - .post('/alarm-rules') - .set('Authorization', `Bearer ${adminToken()}`) - .send({ - name: 'Invalid Rule', - datapointId: 'dp-1', - deviceId: 'device-1', - plantId: 'plant-1', - priority: AlarmPriority.RED, - thresholdOperator: '!=', - thresholdValue: '30', - armingTime: '08:00', - dearmingTime: '20:00', - }) - .expect(400); + it('should execute checkAlarmRule flow and create alarm event', async () => { + const initialEvents = state.events.length; + + await checkAlarmRuleUseCase.checkAlarmRule( + new CheckAlarmRuleCmd('dp-1', '31', new Date('2026-04-10T10:10:00.000Z')), + ); - expect(mockAlarmRulesRepository.createAlarmRule).not.toHaveBeenCalled(); + expect(state.events.length).toBe(initialEvents + 1); + expect(state.events[state.events.length - 1].alarm_rule_id).toBe('rule-1'); }); }); diff --git a/backend/test/integration/analytics.integration.spec.ts b/backend/test/integration/analytics.integration.spec.ts index d61a28f1..fdee81dc 100644 --- a/backend/test/integration/analytics.integration.spec.ts +++ b/backend/test/integration/analytics.integration.spec.ts @@ -4,7 +4,9 @@ import * as http from 'node:http'; import request from 'supertest'; import { AnalyticsController } from 'src/analytics/adapters/in/analytics.controller'; import { AnalyticsService } from 'src/analytics/application/services/analytics.service'; +import { SuggestionService } from 'src/analytics/application/services/suggestion.service'; import { AnalyticsStrategy } from 'src/analytics/application/strategy/analytics.strategy'; +import { GetSuggestionCmd } from 'src/analytics/application/commands/get-suggestion.cmd'; import { Plot } from 'src/analytics/domain/plot.model'; import { GET_SUGGESTION_USECASE, @@ -234,4 +236,16 @@ describe('Analytics Integration Test', () => { .get('/analytics') .expect(404); }); + + it('should throw when suggestion service receives no suggestion from LLM port', async () => { + const suggestionService = new SuggestionService({ + generateSuggestion: jest.fn().mockResolvedValue(null), + } as any); + + await expect( + suggestionService.getSuggestion( + new GetSuggestionCmd('Title', 'plant-consumption', 'Wh', ['t1'], []), + ), + ).rejects.toThrow('No suggestion found for this metric: plant-consumption'); + }); }); diff --git a/backend/test/integration/api-auth-vimar.integration.spec.ts b/backend/test/integration/api-auth-vimar.integration.spec.ts index 51a85e72..593c9aca 100644 --- a/backend/test/integration/api-auth-vimar.integration.spec.ts +++ b/backend/test/integration/api-auth-vimar.integration.spec.ts @@ -1,19 +1,18 @@ +import { HttpService } from '@nestjs/axios'; import { INestApplication, ValidationPipe } from '@nestjs/common'; import { EventEmitterModule } from '@nestjs/event-emitter'; import { JwtService } from '@nestjs/jwt'; import { Test, TestingModule } from '@nestjs/testing'; import * as http from 'node:http'; import request from 'supertest'; +import { of } from 'rxjs'; import { ApiAuthVimarModule } from 'src/api-auth-vimar/api-auth-vimar.module'; -import { DELETETOKENSCACHEPORT } from 'src/api-auth-vimar/application/repository/delete-tokens-cache.port'; -import { DELETEOAUTHTICKETCACHEPORT } from 'src/api-auth-vimar/application/repository/delete-oauth-ticket-cache.port'; -import { GETTOKENSFROMAPIPORT } from 'src/api-auth-vimar/application/repository/get-tokens-from-api.port'; -import { READOAUTHTICKETCACHEPORT } from 'src/api-auth-vimar/application/repository/read-oauth-ticket-cache.port'; -import { READ_STATUS_REPO_PORT } from 'src/api-auth-vimar/application/repository/read-status.repository'; -import { READTOKENSCACHEPORT } from 'src/api-auth-vimar/application/repository/read-tokens-cache.port'; -import { REFRESHTOKENSFROMAPIPORT } from 'src/api-auth-vimar/application/repository/refresh-tokens-from-api.port'; -import { WRITEOAUTHTICKETCACHEPORT } from 'src/api-auth-vimar/application/repository/write-oauth-ticket-cache.port'; -import { WRITETOKENSCACHEPORT } from 'src/api-auth-vimar/application/repository/write-tokens-cache.port'; +import { ApiAuthVimarService } from 'src/api-auth-vimar/application/services/api-auth-vimar.service'; +import { OAuthTicketService } from 'src/api-auth-vimar/application/services/oauth-ticket.service'; +import { TokenService } from 'src/api-auth-vimar/application/services/tokens.service'; +import { TokenPair } from 'src/api-auth-vimar/domain/model/token-pair.model'; +import { DatabaseModule, PG_POOL } from 'src/database/database.module'; +import { createMockPgPool, normalizeSql } from './helpers/mock-pg'; describe('ApiAuthVimar Integration Test', () => { let app: INestApplication; @@ -21,105 +20,173 @@ describe('ApiAuthVimar Integration Test', () => { const ACCESS_SECRET = 'integration-access-secret'; - const mockWriteTokensCache = { - writeTokens: jest.fn< - Promise, - [string, string, Date, number, string] - >(), + const state = { + tokenCache: { + access_token: 'cached-access', + refresh_token: 'cached-refresh', + expires_at: new Date(Date.now() + 60_000), + user_id: 1, + email: 'linked@example.com', + } as + | { + access_token: string; + refresh_token: string; + expires_at: Date; + user_id: number; + email: string; + } + | null, + oauthTickets: new Map(), + failStatusRead: false, + failDeleteQuery: false, + failAuthCodeExchange: false, }; - const mockReadTokensCache = { - readTokens: jest.fn, []>(), + const makeJwtWithEmail = (email: string): string => { + const header = Buffer.from( + JSON.stringify({ alg: 'none', typ: 'JWT' }), + ).toString('base64url'); + const payload = Buffer.from(JSON.stringify({ email })).toString('base64url'); + return `${header}.${payload}.`; }; - const mockDeleteTokensCache = { - deleteTokens: jest.fn, []>(), - }; + beforeEach(async () => { + process.env.ACCESS_SECRET = ACCESS_SECRET; + process.env.HOST1 = 'https://vimar.example.com/oauth/authorize'; + process.env.CLIENTID = 'test-client-id'; + process.env.CLIENTSECRET = 'test-client-secret'; + process.env.HOST2 = 'https://vimar.example.com/oauth/token'; + process.env.REDIRECT_URI = 'https://frontend.example.com/callback'; - const mockWriteOAuthTicketCache = { - writeTicket: jest.fn, [string, number, Date]>(), - }; + state.tokenCache = { + access_token: 'cached-access', + refresh_token: 'cached-refresh', + expires_at: new Date(Date.now() + 60_000), + user_id: 1, + email: 'linked@example.com', + }; + state.oauthTickets.clear(); + state.failStatusRead = false; + state.failDeleteQuery = false; + state.failAuthCodeExchange = false; - const mockReadOAuthTicketCache = { - readValidTicket: jest.fn< - Promise<{ ticket: string; userId: number; expiresAt: Date } | null>, - [string] - >(), - }; + const pool = createMockPgPool(async (rawSql, params) => { + const sql = normalizeSql(rawSql); - const mockDeleteOAuthTicketCache = { - deleteTicket: jest.fn, [string]>(), - }; + if (sql.includes('insert into token_cache')) { + const [accessToken, refreshToken, expiresAt, userId, email] = params as [ + string, + string, + Date, + number, + string, + ]; + state.tokenCache = { + access_token: accessToken, + refresh_token: refreshToken, + expires_at: expiresAt, + user_id: userId, + email, + }; + return { rows: [{ access_token: accessToken }], rowCount: 1 }; + } - const mockGetTokensFromApi = { - getTokensWithCode: jest.fn, [string]>(), - }; + if (sql === 'select * from token_cache') { + return { rows: state.tokenCache ? [state.tokenCache] : [] }; + } - const mockRefreshTokensFromApi = { - refresh: jest.fn, [string]>(), - }; + if (sql.includes('delete from token_cache')) { + if (state.failDeleteQuery) { + throw new Error('Delete failed'); + } + state.tokenCache = null; + return { rows: [], rowCount: 1 }; + } - const mockReadStatusRepo = { - readStatus: jest.fn, [number]>(), - }; + if (sql.includes('select email from token_cache where user_id = $1')) { + if (state.failStatusRead) { + throw new Error('Status read failed'); + } + const [userId] = params as [number]; + if (state.tokenCache && state.tokenCache.user_id === Number(userId)) { + return { rows: [{ email: state.tokenCache.email }], rowCount: 1 }; + } + return { rows: [], rowCount: 0 }; + } - beforeEach(async () => { - process.env.ACCESS_SECRET = ACCESS_SECRET; - process.env.HOST1 = 'https://vimar.example.com/oauth/authorize'; - process.env.CLIENTID = 'test-client-id'; - process.env.REDIRECT_URI = 'https://frontend.example.com/callback'; + if (sql.includes('insert into oauth_ticket_cache (ticket, user_id, expires_at)')) { + const [ticket, userId, expiresAt] = params as [string, number, Date]; + state.oauthTickets.set(ticket, { + user_id: Number(userId), + expires_at: expiresAt, + }); + return { rows: [], rowCount: 1 }; + } - mockWriteTokensCache.writeTokens.mockResolvedValue(true); - mockReadTokensCache.readTokens.mockResolvedValue({ - accessToken: 'cached-access', - refreshToken: 'cached-refresh', - expiresAt: new Date(Date.now() + 60_000), - userId: 1, - email: 'linked@example.com', - }); - mockDeleteTokensCache.deleteTokens.mockResolvedValue(true); - mockWriteOAuthTicketCache.writeTicket.mockResolvedValue(true); - mockReadOAuthTicketCache.readValidTicket.mockResolvedValue({ - ticket: 'valid-ticket', - userId: 1, - expiresAt: new Date(Date.now() + 30_000), - }); - mockDeleteOAuthTicketCache.deleteTicket.mockResolvedValue(true); - mockGetTokensFromApi.getTokensWithCode.mockResolvedValue({ - accessToken: 'api-access-token', - refreshToken: 'api-refresh-token', - expiresIn: 3600, - email: 'linked@example.com', - }); - mockRefreshTokensFromApi.refresh.mockResolvedValue({ - accessToken: 'new-access-token', - refreshToken: 'new-refresh-token', - expiresIn: 3600, - email: 'linked@example.com', + if (sql.includes('select ticket, user_id, expires_at from oauth_ticket_cache')) { + const [ticket] = params as [string]; + const found = state.oauthTickets.get(ticket); + if (!found || found.expires_at.getTime() <= Date.now()) { + return { rows: [], rowCount: 0 }; + } + return { + rows: [ + { + ticket, + user_id: found.user_id, + expires_at: found.expires_at, + }, + ], + rowCount: 1, + }; + } + + if (sql.includes('delete from oauth_ticket_cache where ticket = $1')) { + const [ticket] = params as [string]; + const deleted = state.oauthTickets.delete(ticket); + return { rows: [], rowCount: deleted ? 1 : 0 }; + } + + throw new Error(`Unhandled SQL in api-auth-vimar integration test: ${sql}`); }); - mockReadStatusRepo.readStatus.mockResolvedValue('linked@example.com'); + + const httpServiceMock = { + post: jest.fn().mockImplementation((url: string, body: string) => { + if (url.includes('/oauth/token') && body.includes('grant_type=authorization_code')) { + if (state.failAuthCodeExchange) { + throw new Error('Auth code exchange failed'); + } + return of({ + data: { + access_token: makeJwtWithEmail('linked@example.com'), + refresh_token: 'new-refresh-token', + expires_in: 3600, + }, + }); + } + + if (url.includes('/oauth/token') && body.includes('grant_type=refresh_token')) { + return of({ + data: { + access_token: makeJwtWithEmail('linked@example.com'), + refresh_token: 'refreshed-token', + expires_in: 3600, + }, + }); + } + + throw new Error(`Unhandled HTTP POST in api-auth-vimar integration test: ${url}`); + }), + get: jest.fn(), + }; const module: TestingModule = await Test.createTestingModule({ - imports: [EventEmitterModule.forRoot(), ApiAuthVimarModule], + imports: [EventEmitterModule.forRoot(), DatabaseModule, ApiAuthVimarModule], }) - .overrideProvider(WRITETOKENSCACHEPORT) - .useValue(mockWriteTokensCache) - .overrideProvider(READTOKENSCACHEPORT) - .useValue(mockReadTokensCache) - .overrideProvider(DELETETOKENSCACHEPORT) - .useValue(mockDeleteTokensCache) - .overrideProvider(WRITEOAUTHTICKETCACHEPORT) - .useValue(mockWriteOAuthTicketCache) - .overrideProvider(READOAUTHTICKETCACHEPORT) - .useValue(mockReadOAuthTicketCache) - .overrideProvider(DELETEOAUTHTICKETCACHEPORT) - .useValue(mockDeleteOAuthTicketCache) - .overrideProvider(GETTOKENSFROMAPIPORT) - .useValue(mockGetTokensFromApi) - .overrideProvider(REFRESHTOKENSFROMAPIPORT) - .useValue(mockRefreshTokensFromApi) - .overrideProvider(READ_STATUS_REPO_PORT) - .useValue(mockReadStatusRepo) + .overrideProvider(PG_POOL) + .useValue(pool) + .overrideProvider(HttpService) + .useValue(httpServiceMock) .compile(); app = module.createNestApplication(); @@ -142,9 +209,12 @@ describe('ApiAuthVimar Integration Test', () => { }); const adminToken = () => - jwtService.sign({ id: 1, username: 'admin', role: 'AMMINISTRATORE' }); + jwtService.sign({ id: 1, username: 'admin.user', role: 'AMMINISTRATORE' }); + + const adminTokenWithId = (id: number | string) => + jwtService.sign({ id, username: 'admin.user', role: 'AMMINISTRATORE' }); - it('should return MyVimar account status', async () => { + it('should return account status from real token service and cache repository', async () => { const response = await request(app.getHttpServer() as http.Server) .get('/my-vimar/account') .set('Authorization', `Bearer ${adminToken()}`) @@ -154,74 +224,255 @@ describe('ApiAuthVimar Integration Test', () => { isLinked: true, email: 'linked@example.com', }); - expect(mockReadStatusRepo.readStatus).toHaveBeenCalledWith(1); - }); - - it('should disconnect MyVimar account', async () => { - const response = await request(app.getHttpServer() as http.Server) - .delete('/my-vimar/account') - .set('Authorization', `Bearer ${adminToken()}`) - .expect(200); - - expect(response.body).toEqual({ success: true }); - expect(mockDeleteTokensCache.deleteTokens).toHaveBeenCalledTimes(1); }); - it('should prepare OAuth ticket for authenticated user', async () => { - const response = await request(app.getHttpServer() as http.Server) + it('should prepare and authorize OAuth ticket end-to-end', async () => { + const prepared = await request(app.getHttpServer() as http.Server) .post('/api/auth/prepare-oauth') .set('Authorization', `Bearer ${adminToken()}`) .expect(201); - expect(response.body).toHaveProperty('ticket'); - expect(typeof response.body.ticket).toBe('string'); - expect(mockWriteOAuthTicketCache.writeTicket).toHaveBeenCalledTimes(1); - }); + expect(prepared.body).toHaveProperty('ticket'); - it('should authorize OAuth ticket and redirect to provider URL', async () => { - const response = await request(app.getHttpServer() as http.Server) + const authorized = await request(app.getHttpServer() as http.Server) .get('/api/auth/authorize') .query({ - ticket: 'valid-ticket', + ticket: prepared.body.ticket, redirect_url: 'https://frontend.example.com/after-auth', }) .expect(302); - expect(response.headers.location).toContain( + expect(authorized.headers.location).toContain( 'https://vimar.example.com/oauth/authorize', ); - expect(mockReadOAuthTicketCache.readValidTicket).toHaveBeenCalledWith( - 'valid-ticket', - ); - expect(mockDeleteOAuthTicketCache.deleteTicket).toHaveBeenCalledWith( - 'valid-ticket', - ); }); - it('should handle callback and persist tokens', async () => { - const state = Buffer.from( - JSON.stringify({ - redirectUrl: 'https://frontend.example.com/done', - userId: 1, - }), + it('should prepare OAuth ticket when JWT user id is a numeric string', async () => { + const prepared = await request(app.getHttpServer() as http.Server) + .post('/api/auth/prepare-oauth') + .set('Authorization', `Bearer ${adminTokenWithId('2')}`) + .expect(201); + + expect(prepared.body).toHaveProperty('ticket'); + expect(typeof prepared.body.ticket).toBe('string'); + }); + + it('should return 401 when prepare-oauth user identity is invalid', async () => { + await request(app.getHttpServer() as http.Server) + .post('/api/auth/prepare-oauth') + .set('Authorization', `Bearer ${adminTokenWithId('abc')}`) + .expect(401); + }); + + it('should return 400 when authorize redirect_url is missing', async () => { + await request(app.getHttpServer() as http.Server) + .get('/api/auth/authorize') + .query({ ticket: 'ticket-without-redirect' }) + .expect(400); + }); + + it('should return 401 when authorize ticket is invalid', async () => { + await request(app.getHttpServer() as http.Server) + .get('/api/auth/authorize') + .query({ + ticket: 'invalid-or-expired-ticket', + redirect_url: 'https://frontend.example.com/after-auth', + }) + .expect(401); + }); + + it('should handle callback and persist tokens with real token flow', async () => { + const stateParam = Buffer.from( + JSON.stringify({ redirectUrl: 'https://frontend.example.com/done', userId: 1 }), ).toString('base64'); const response = await request(app.getHttpServer() as http.Server) .get('/my-vimar/callback') - .query({ code: 'oauth-code-1', state }) + .query({ code: 'oauth-code-1', state: stateParam }) .expect(302); expect(response.headers.location).toBe('https://frontend.example.com/done'); - expect(mockGetTokensFromApi.getTokensWithCode).toHaveBeenCalledWith( - 'oauth-code-1', - ); - expect(mockWriteTokensCache.writeTokens).toHaveBeenCalledTimes(1); }); - it('should validate callback query parameters', async () => { + it('should disconnect account by clearing token cache', async () => { + const response = await request(app.getHttpServer() as http.Server) + .delete('/my-vimar/account') + .set('Authorization', `Bearer ${adminToken()}`) + .expect(200); + + expect(response.body).toEqual({ success: true }); + expect(state.tokenCache).toBeNull(); + }); + + it('should return disconnected status when account status read fails', async () => { + state.failStatusRead = true; + + const response = await request(app.getHttpServer() as http.Server) + .get('/my-vimar/account') + .set('Authorization', `Bearer ${adminToken()}`) + .expect(200); + + expect(response.body).toEqual({ isLinked: false, email: '' }); + }); + + it('should return 500 when disconnect query fails', async () => { + state.failDeleteQuery = true; + + await request(app.getHttpServer() as http.Server) + .delete('/my-vimar/account') + .set('Authorization', `Bearer ${adminToken()}`) + .expect(500); + }); + + it('should return 400 when callback code is missing', async () => { + await request(app.getHttpServer() as http.Server) + .get('/my-vimar/callback') + .query({ state: Buffer.from(JSON.stringify({ redirectUrl: 'https://frontend.example.com', userId: 1 })).toString('base64') }) + .expect(400); + }); + + it('should return 400 when callback state is missing', async () => { await request(app.getHttpServer() as http.Server) .get('/my-vimar/callback') .query({ code: 'oauth-code-1' }) .expect(400); }); + + it('should return 400 when callback state is not valid JSON', async () => { + const invalidJsonState = Buffer.from('not-json').toString('base64'); + + await request(app.getHttpServer() as http.Server) + .get('/my-vimar/callback') + .query({ code: 'oauth-code-1', state: invalidJsonState }) + .expect(400); + }); + + it('should return 400 when callback state payload is invalid', async () => { + const invalidPayloadState = Buffer.from(JSON.stringify(123)).toString('base64'); + + await request(app.getHttpServer() as http.Server) + .get('/my-vimar/callback') + .query({ code: 'oauth-code-1', state: invalidPayloadState }) + .expect(400); + }); + + it('should return 400 when callback state has invalid redirectUrl', async () => { + const invalidRedirectState = Buffer.from( + JSON.stringify({ redirectUrl: ' ', userId: 1 }), + ).toString('base64'); + + await request(app.getHttpServer() as http.Server) + .get('/my-vimar/callback') + .query({ code: 'oauth-code-1', state: invalidRedirectState }) + .expect(400); + }); + + it('should return 400 when callback state has invalid userId', async () => { + const invalidUserIdState = Buffer.from( + JSON.stringify({ redirectUrl: 'https://frontend.example.com/done', userId: null }), + ).toString('base64'); + + await request(app.getHttpServer() as http.Server) + .get('/my-vimar/callback') + .query({ code: 'oauth-code-1', state: invalidUserIdState }) + .expect(400); + }); + + it('should return 500 when callback token exchange fails', async () => { + state.failAuthCodeExchange = true; + + const stateParam = Buffer.from( + JSON.stringify({ redirectUrl: 'https://frontend.example.com/done', userId: 1 }), + ).toString('base64'); + + await request(app.getHttpServer() as http.Server) + .get('/my-vimar/callback') + .query({ code: 'oauth-code-1', state: stateParam }) + .expect(500); + }); + + it('should cover ApiAuthVimarService config guard branches', () => { + const backup = { + HOST1: process.env.HOST1, + CLIENTID: process.env.CLIENTID, + REDIRECT_URI: process.env.REDIRECT_URI, + }; + + process.env.HOST1 = 'https://vimar.example.com/oauth/authorize'; + process.env.CLIENTID = 'client-id'; + process.env.REDIRECT_URI = ''; + expect(() => new ApiAuthVimarService().getLoginUrl()).toThrow( + 'There is no redirect_url setted', + ); + + process.env.HOST1 = 'https://vimar.example.com/oauth/authorize'; + process.env.CLIENTID = ''; + process.env.REDIRECT_URI = 'https://frontend.example.com/callback'; + expect(() => new ApiAuthVimarService().getLoginUrl()).toThrow( + 'MyVimar OAuth configuration is missing: CLIENTID', + ); + + process.env.HOST1 = ''; + process.env.CLIENTID = 'client-id'; + process.env.REDIRECT_URI = 'https://frontend.example.com/callback'; + expect(() => new ApiAuthVimarService().getLoginUrl()).toThrow( + 'MyVimar OAuth configuration is missing: HOST1', + ); + + process.env.HOST1 = 'https://vimar.example.com/oauth/authorize'; + process.env.CLIENTID = 'client-id'; + process.env.REDIRECT_URI = 'https://frontend.example.com/callback'; + const loginUrlWithoutState = new ApiAuthVimarService().getLoginUrl(); + expect(loginUrlWithoutState).toContain('https://vimar.example.com/oauth/authorize?'); + expect(loginUrlWithoutState).not.toContain('state='); + + process.env.HOST1 = backup.HOST1; + process.env.CLIENTID = backup.CLIENTID; + process.env.REDIRECT_URI = backup.REDIRECT_URI; + }); + + it('should cover OAuthTicketService validation branches', async () => { + const oauthTicketPort = { + saveTicket: jest.fn().mockResolvedValue(false), + consumeTicket: jest.fn().mockResolvedValue(1), + }; + const service = new OAuthTicketService(oauthTicketPort as any); + + await expect(service.prepareOAuth(0)).rejects.toThrow('Invalid user identity'); + await expect(service.prepareOAuth(1)).rejects.toThrow( + 'Unable to persist OAuth ticket', + ); + await expect(service.authorizeOAuth(' ')).resolves.toBeNull(); + }); + + it('should cover TokenService getValidToken refresh branches', async () => { + const writeTokensOnRepo = { writeTokens: jest.fn().mockResolvedValue(true) }; + + const expiredToken = new TokenPair( + 'access-old', + 'refresh-old', + new Date(Date.now() + 1000), + ); + + const readTokensFromRepo = { + readTokens: jest.fn().mockResolvedValue(expiredToken), + }; + + const refreshTokens = { + refreshTokens: jest.fn().mockResolvedValue(null), + }; + + const readStatus = { readStatus: jest.fn() }; + + const tokenService = new TokenService( + writeTokensOnRepo as any, + readTokensFromRepo as any, + refreshTokens as any, + readStatus as any, + ); + + await expect(tokenService.getValidToken()).rejects.toThrow( + "Can't get tokens from API", + ); + }); }); diff --git a/backend/test/integration/auth.integration.spec.ts b/backend/test/integration/auth.integration.spec.ts index e7077204..37541d59 100644 --- a/backend/test/integration/auth.integration.spec.ts +++ b/backend/test/integration/auth.integration.spec.ts @@ -1,13 +1,13 @@ import { INestApplication, ValidationPipe } from '@nestjs/common'; import { JwtService } from '@nestjs/jwt'; import { Test, TestingModule } from '@nestjs/testing'; +import { createHash } from 'node:crypto'; import * as http from 'node:http'; -import request from 'supertest'; import cookieParser from 'cookie-parser'; +import request from 'supertest'; import { AuthModule } from 'src/auth/auth.module'; -import { CHANGE_CREDENTIALS_REPOSITORY } from 'src/auth/application/repository/change-credentials-repository.interface'; -import { CHECK_CREDENTIALS_REPOSITORY } from 'src/auth/application/repository/check-credentials-repository.interface'; -import { PayloadEntity } from 'src/auth/infrastructure/entities/payload-entity'; +import { DatabaseModule, PG_POOL } from 'src/database/database.module'; +import { createMockPgPool, normalizeSql } from './helpers/mock-pg'; describe('Auth Integration Test', () => { let app: INestApplication; @@ -16,30 +16,95 @@ describe('Auth Integration Test', () => { const ACCESS_SECRET = 'integration-access-secret'; const REFRESH_SECRET = 'integration-refresh-secret'; - const mockCheckCredentialsRepository = { - checkCredentials: jest.fn, [string, string]>(), + const state = { + users: [ + { + id: 1, + username: 'admin.user', + roleName: 'Amministratore', + first_access: false, + password: '', + }, + { + id: 2, + username: 'first.user', + roleName: 'Amministratore', + first_access: true, + password: '', + }, + ], }; - const mockChangeCredentialsRepository = { - changeCredentials: jest.fn, [string, string, boolean]>(), - }; + const hashPassword = (value: string) => + createHash('sha512').update(value).digest('hex'); beforeEach(async () => { process.env.ACCESS_SECRET = ACCESS_SECRET; process.env.REFRESH_SECRET = REFRESH_SECRET; - mockCheckCredentialsRepository.checkCredentials.mockResolvedValue( - new PayloadEntity(1, 'test.user', 'AMMINISTRATORE', false), - ); - mockChangeCredentialsRepository.changeCredentials.mockResolvedValue(); + state.users[0].password = hashPassword('plain-password'); + state.users[0].first_access = false; + state.users[1].password = hashPassword('temp-password'); + state.users[1].first_access = true; + + const pool = createMockPgPool(async (rawSql, params) => { + const sql = normalizeSql(rawSql); + + if ( + sql.includes('from "user" u') && + sql.includes('join role r') && + sql.includes('where u.username = $1 and u.password = $2') + ) { + const [username, password] = params as [string, string]; + const user = state.users.find( + (u) => u.username === username && u.password === password, + ); + + if (!user) { + return { rows: [], rowCount: 0 }; + } + + return { + rows: [ + { + id: user.id, + username: user.username, + role: + user.roleName === 'Amministratore' + ? 'AMMINISTRATORE' + : user.roleName, + first_access: user.first_access, + }, + ], + rowCount: 1, + }; + } + + if ( + sql.includes('update "user" set password = $1, first_access = $2 where username = $3') + ) { + const [newPassword, firstAccess, username] = params as [ + string, + boolean, + string, + ]; + const user = state.users.find((u) => u.username === username); + if (user) { + user.password = newPassword; + user.first_access = firstAccess; + } + + return { rows: [], rowCount: user ? 1 : 0 }; + } + + throw new Error(`Unhandled SQL in auth integration test: ${sql}`); + }); const module: TestingModule = await Test.createTestingModule({ - imports: [AuthModule], + imports: [DatabaseModule, AuthModule], }) - .overrideProvider(CHECK_CREDENTIALS_REPOSITORY) - .useValue(mockCheckCredentialsRepository) - .overrideProvider(CHANGE_CREDENTIALS_REPOSITORY) - .useValue(mockChangeCredentialsRepository) + .overrideProvider(PG_POOL) + .useValue(pool) .compile(); app = module.createNestApplication(); @@ -62,29 +127,25 @@ describe('Auth Integration Test', () => { } }); - it('should login and set refresh token cookie', async () => { + it('should login and set refresh cookie with real auth flow', async () => { const response = await request(app.getHttpServer() as http.Server) .post('/auth/login') - .send({ username: 'test.user', password: 'plain-password' }) + .send({ username: 'admin.user', password: 'plain-password' }) .expect(201); expect(response.body).toHaveProperty('accessToken'); - expect(typeof response.body.accessToken).toBe('string'); expect(response.headers['set-cookie']).toBeDefined(); - expect(mockCheckCredentialsRepository.checkCredentials).toHaveBeenCalledTimes( - 1, - ); }); - it('should execute first-login flow with FirstLoginGuard', async () => { + it('should execute first-login end to end and persist credentials change', async () => { const firstAccessToken = jwtService.sign({ - id: 10, + id: 2, username: 'first.user', role: 'AMMINISTRATORE', firstAccess: true, }); - const response = await request(app.getHttpServer() as http.Server) + await request(app.getHttpServer() as http.Server) .post('/auth/first-login') .set('Authorization', `Bearer ${firstAccessToken}`) .send({ @@ -94,40 +155,27 @@ describe('Auth Integration Test', () => { }) .expect(201); - expect(response.body).toHaveProperty('accessToken'); - expect(mockChangeCredentialsRepository.changeCredentials).toHaveBeenCalledTimes( - 1, - ); + expect(state.users[1].first_access).toBe(false); + expect(state.users[1].password).toBe(hashPassword('new-password')); }); - it('should refresh access token from refreshToken cookie', async () => { - const loginResponse = await request(app.getHttpServer() as http.Server) + it('should refresh token from cookie generated by /auth/login', async () => { + const login = await request(app.getHttpServer() as http.Server) .post('/auth/login') - .send({ username: 'test.user', password: 'plain-password' }) + .send({ username: 'admin.user', password: 'plain-password' }) .expect(201); - const refreshTokenCookie = loginResponse.headers['set-cookie']; - - const refreshResponse = await request(app.getHttpServer() as http.Server) + const refresh = await request(app.getHttpServer() as http.Server) .post('/auth/refresh') - .set('Cookie', refreshTokenCookie) + .set('Cookie', login.headers['set-cookie']) .expect(201); - expect(refreshResponse.body).toHaveProperty('accessToken'); - expect(typeof refreshResponse.body.accessToken).toBe('string'); + expect(refresh.body).toHaveProperty('accessToken'); }); - it('should return 401 when refresh token cookie is missing', async () => { + it('should return 401 on /auth/refresh without cookie', async () => { await request(app.getHttpServer() as http.Server) .post('/auth/refresh') .expect(401); }); - - it('should clear refresh token cookie on logout', async () => { - const response = await request(app.getHttpServer() as http.Server) - .post('/auth/logout') - .expect(201); - - expect(response.body).toEqual({ success: true }); - }); -}); \ No newline at end of file +}); diff --git a/backend/test/integration/cache.integration.spec.ts b/backend/test/integration/cache.integration.spec.ts index 02fb9072..6618a19d 100644 --- a/backend/test/integration/cache.integration.spec.ts +++ b/backend/test/integration/cache.integration.spec.ts @@ -1,58 +1,191 @@ +import { HttpService } from '@nestjs/axios'; import { INestApplication, ValidationPipe } from '@nestjs/common'; import { EventEmitter2, EventEmitterModule } from '@nestjs/event-emitter'; import { Test, TestingModule } from '@nestjs/testing'; import * as http from 'node:http'; import request from 'supertest'; -import { GETVALIDTOKENPORT } from 'src/api-auth-vimar/application/ports/out/get-valid-token.port'; +import { of } from 'rxjs'; +import { EventCacheController } from 'src/cache/adapters/in/event/event-cache.controller'; +import { HttpCacheController } from 'src/cache/adapters/in/http/http-cache.controller'; +import { + UPDATE_CACHE_USE_CASE, + UpdateCacheUseCase, +} from 'src/cache/application/ports/in/update-cache.usecase'; import { CacheModule } from 'src/cache/cache.module'; -import { CACHE_REPOSITORY_PORT } from 'src/cache/application/repository/cache.repository'; import { DatabaseModule, PG_POOL } from 'src/database/database.module'; +import { createMockPgPool, normalizeSql } from './helpers/mock-pg'; describe('Cache Integration Test', () => { let app: INestApplication; let eventEmitter: EventEmitter2; + let eventCacheController: EventCacheController; + let httpCacheController: HttpCacheController; + let updateCacheUseCase: UpdateCacheUseCase; - const mockPool = { - query: jest.fn().mockResolvedValue({ rows: [], rowCount: 0 }), - connect: jest.fn().mockResolvedValue({ - query: jest.fn().mockResolvedValue({ rows: [], rowCount: 0 }), - release: jest.fn(), - }), - end: jest.fn(), - on: jest.fn(), + const state = { + tokenCache: { + access_token: 'valid-access', + refresh_token: 'valid-refresh', + expires_at: new Date(Date.now() + 60_000), + user_id: 1, + email: 'linked@example.com', + }, + plants: new Map(), + failWritePlantIds: new Set(), + failWriteAsString: false, }; - const mockGetValidTokenPort = { - getValidToken: jest.fn, []>(), - }; + beforeEach(async () => { + process.env.HOST3 = 'https://vimar.example.com/api/v2'; + process.env.PLANT_DOMAIN = 'https://vimar.example.com/.well-known/knx'; - const mockCacheRepository = { - fetch: jest.fn, [string, string]>(), - getAllPlantIds: jest.fn, [string]>(), - write: jest.fn, [any]>(), - }; + state.plants.clear(); + state.failWritePlantIds.clear(); + state.failWriteAsString = false; - beforeEach(async () => { - jest.clearAllMocks(); - mockGetValidTokenPort.getValidToken.mockResolvedValue('valid-token'); - mockCacheRepository.fetch.mockImplementation(async (_token, plantId) => ({ - id: plantId, - name: `Plant ${plantId}`, - rooms: [], - wardId: 1, - })); - mockCacheRepository.getAllPlantIds.mockResolvedValue(['plant-a', 'plant-b']); - mockCacheRepository.write.mockResolvedValue(true); + const pool = createMockPgPool(async (rawSql, params) => { + const sql = normalizeSql(rawSql); + + if (sql === 'begin' || sql === 'commit' || sql === 'rollback') { + return { rows: [] }; + } + + if (sql === 'select * from token_cache') { + return { rows: [state.tokenCache], rowCount: 1 }; + } + + if (sql.includes('insert into token_cache')) { + const [accessToken, refreshToken, expiresAt, userId, email] = params as [ + string, + string, + Date, + number, + string, + ]; + state.tokenCache = { + access_token: accessToken, + refresh_token: refreshToken, + expires_at: expiresAt, + user_id: userId, + email, + }; + return { rows: [{ access_token: accessToken }], rowCount: 1 }; + } + + if (sql.includes('insert into plant') && sql.includes('on conflict (id) do update')) { + const [id, rawData, wardId] = params as [string, unknown, number | null]; + + if (state.failWritePlantIds.has(id)) { + if (state.failWriteAsString) { + throw 'simulated write failure'; + } + throw new Error('simulated write failure'); + } + + state.plants.set(id, { + id, + data: typeof rawData === 'string' ? JSON.parse(rawData) : rawData, + ward_id: wardId, + }); + return { rows: [], rowCount: 1 }; + } + + throw new Error(`Unhandled SQL in cache integration test: ${sql}`); + }); + + const httpServiceMock = { + get: jest.fn().mockImplementation((url: string) => { + const base = 'https://vimar.example.com/api/v2'; + + if (url === 'https://vimar.example.com/.well-known/knx') { + return of({ + data: { + api: { + templates: { + plantId: { + values: ['plant-1', 'plant-2'], + }, + }, + }, + }, + }); + } + + if (url === `${base}/plant-1/locations` || url === `${base}/plant-2/locations`) { + const plantId = url.includes('/plant-1/') ? 'plant-1' : 'plant-2'; + return of({ + data: { + meta: {}, + data: [ + { + id: `${plantId}-room-1`, + type: 'location', + attributes: { title: `${plantId} Room` }, + meta: { '@type': ['loc:Location'] }, + }, + ], + }, + }); + } + + if (url.includes('/locations/') && url.endsWith('/functions')) { + return of({ + data: { + meta: {}, + data: [ + { + id: 'device-1', + type: 'device', + attributes: { title: 'Thermostat' }, + meta: { + 'vimar:ssType': 'climate', + 'vimar:sfType': 'thermostat', + }, + }, + ], + }, + }); + } + + if (url.includes('/functions/') && url.endsWith('/datapoints')) { + return of({ + data: { + meta: {}, + data: [ + { + id: 'dp-1', + type: 'datapoint', + attributes: { + title: 'temperature', + readable: true, + writable: false, + value: '22', + timestamp: new Date().toISOString(), + enum: ['0', '100'], + valueType: 'number', + }, + meta: { + 'vimar:sfType': 'temperature', + 'vimar:sfeType': 'sensor', + }, + }, + ], + }, + }); + } + + throw new Error(`Unhandled HTTP GET in cache integration test: ${url}`); + }), + post: jest.fn(), + }; const module: TestingModule = await Test.createTestingModule({ imports: [EventEmitterModule.forRoot(), DatabaseModule, CacheModule], }) .overrideProvider(PG_POOL) - .useValue(mockPool) - .overrideProvider(GETVALIDTOKENPORT) - .useValue(mockGetValidTokenPort) - .overrideProvider(CACHE_REPOSITORY_PORT) - .useValue(mockCacheRepository) + .useValue(pool) + .overrideProvider(HttpService) + .useValue(httpServiceMock) .compile(); app = module.createNestApplication(); @@ -66,6 +199,9 @@ describe('Cache Integration Test', () => { await app.init(); eventEmitter = module.get(EventEmitter2); + eventCacheController = module.get(EventCacheController); + httpCacheController = module.get(HttpCacheController); + updateCacheUseCase = module.get(UPDATE_CACHE_USE_CASE); }); afterEach(async () => { @@ -74,46 +210,149 @@ describe('Cache Integration Test', () => { } }); - it('should accept cache webhook and process only service items', async () => { + it('should process webhook and write plant cache using real cache flow', async () => { const response = await request(app.getHttpServer() as http.Server) .post('/cache/update') .send({ data: [ - { id: 'plant-1', type: 'service', attributes: {}, links: { self: '' } }, - { id: 'room-1', type: 'room', attributes: {}, links: { self: '' } }, - { id: 'plant-2', type: 'service', attributes: {}, links: { self: '' } }, + { + id: 'plant-1', + type: 'service', + attributes: { lastModified: new Date().toISOString() }, + links: { self: '' }, + }, ], }) .expect(202); - expect(response.body).toEqual({ - success: true, - statusCode: 202, - message: 'Webhook accepted. Processing update for 2 plant(s)', - }); + expect(response.body.success).toBe(true); await new Promise((resolve) => setTimeout(resolve, 60)); - expect(mockCacheRepository.fetch).toHaveBeenCalledTimes(2); - expect(mockCacheRepository.write).toHaveBeenCalledTimes(2); + expect(state.plants.has('plant-1')).toBe(true); }); - it('should update all cache entries on fetched.tokens event', async () => { + it('should refresh all plants on fetched.tokens event', async () => { eventEmitter.emit('fetched.tokens'); - await new Promise((resolve) => setTimeout(resolve, 60)); + await new Promise((resolve) => setTimeout(resolve, 100)); + + expect(state.plants.has('plant-1')).toBe(true); + expect(state.plants.has('plant-2')).toBe(true); + }); + + it('should reject updateCache use case when plantId is missing', async () => { + await expect( + updateCacheUseCase.updateCache({} as { plantId: string }), + ).rejects.toThrow('PlantId is null'); + }); + + it('should handle webhook update failure with Error without crashing', async () => { + const response = await request(app.getHttpServer() as http.Server) + .post('/cache/update') + .send({ + data: [ + { + id: 'plant-missing', + type: 'service', + attributes: { lastModified: new Date().toISOString() }, + links: { self: '' }, + }, + ], + }) + .expect(202); - expect(mockCacheRepository.getAllPlantIds).toHaveBeenCalledTimes(1); - expect(mockCacheRepository.fetch).toHaveBeenCalledTimes(2); - expect(mockCacheRepository.write).toHaveBeenCalledTimes(2); + expect(response.body.success).toBe(true); + await new Promise((resolve) => setTimeout(resolve, 80)); }); - it('should handle empty webhook payload', async () => { + it('should handle webhook update failure with non-Error value', async () => { + state.failWritePlantIds.add('plant-1'); + state.failWriteAsString = true; + const response = await request(app.getHttpServer() as http.Server) .post('/cache/update') - .send({ data: [] }) + .send({ + data: [ + { + id: 'plant-1', + type: 'service', + attributes: { lastModified: new Date().toISOString() }, + links: { self: '' }, + }, + ], + }) .expect(202); - expect(response.body.message).toContain('0 plant(s)'); + expect(response.body.success).toBe(true); + await new Promise((resolve) => setTimeout(resolve, 60)); + }); + + it('should mark updateAllCache flow as failed when one plant write fails', async () => { + state.failWritePlantIds.add('plant-1'); + + eventEmitter.emit('fetched.tokens'); + + await new Promise((resolve) => setTimeout(resolve, 120)); + + expect(state.plants.has('plant-2')).toBe(true); + }); + + it('should skip duplicate cache sync events while one sync is already running', async () => { + (eventCacheController as any).isCacheSyncRunning = true; + + await eventCacheController.updateCache(); + + expect(state.plants.size).toBe(0); + }); + + it('should throw when cache write operation fails in updateCache use case', async () => { + state.failWritePlantIds.add('plant-1'); + + await expect( + updateCacheUseCase.updateCache({ plantId: 'plant-1' }), + ).rejects.toThrow('Failed to write cache'); + }); + + it('should execute queue catch branch with Error in HttpCacheController', async () => { + const rejected = Promise.reject(new Error('queued error')); + rejected.catch(() => undefined); + (httpCacheController as any).webhookQueue = rejected; + + await httpCacheController.updateCache({ data: [] } as any); + await new Promise((resolve) => setTimeout(resolve, 40)); + }); + + it('should execute queue catch branch with non-Error in HttpCacheController', async () => { + const rejected = Promise.reject('queued-string-error'); + rejected.catch(() => undefined); + (httpCacheController as any).webhookQueue = rejected; + + await httpCacheController.updateCache({ data: [] } as any); + await new Promise((resolve) => setTimeout(resolve, 40)); + }); + + it('should execute webhook per-plant catch with real Error instance', async () => { + const localController = new HttpCacheController({ + updateCache: jest.fn().mockRejectedValue(new Error('local-update-error')), + } as any); + + await localController.updateCache({ + data: [{ id: 'plant-local-1', type: 'service' }], + } as any); + + await new Promise((resolve) => setTimeout(resolve, 40)); + }); + + it('should execute webhook per-plant catch with non-Error value', async () => { + const localController = new HttpCacheController({ + updateCache: jest.fn().mockRejectedValue('local-string-error'), + } as any); + + await localController.updateCache({ + data: [{ id: 'plant-local-2', type: 'service' }], + } as any); + + await new Promise((resolve) => setTimeout(resolve, 40)); }); }); diff --git a/backend/test/integration/device.integration.spec.ts b/backend/test/integration/device.integration.spec.ts index d7b50827..9f484d56 100644 --- a/backend/test/integration/device.integration.spec.ts +++ b/backend/test/integration/device.integration.spec.ts @@ -1,8 +1,13 @@ import { Test, TestingModule } from '@nestjs/testing'; -import { INestApplication, ValidationPipe } from '@nestjs/common'; +import { + BadRequestException, + INestApplication, + ValidationPipe, +} from '@nestjs/common'; import { EventEmitterModule } from '@nestjs/event-emitter'; import * as http from 'node:http'; import request from 'supertest'; +import { DeviceController } from 'src/device/adapters/in/device.controller'; import { DeviceModule } from 'src/device/device.module'; import { DatabaseModule, PG_POOL } from 'src/database/database.module'; import { UserGuard } from 'src/guard/user/user.guard'; @@ -25,6 +30,10 @@ import { GET_DEVICE_VALUE_PORT, GetDeviceValuePort, } from 'src/device/application/ports/out/get-device-value.port'; +import { + GET_DEVICE_VALUE_USECASE, + GetDeviceValueUseCase, +} from 'src/device/application/ports/in/get-device-value.usecase'; import { WRITE_DATAPOINT_VALUE_PORT, WriteDatapointValuePort, @@ -33,6 +42,10 @@ import { FIND_DEVICE_BY_DATAPOINTID_PORT, FindDeviceByDatapointIdPort, } from 'src/device/application/ports/out/find-device-by-datapointId'; +import { + FIND_DEVICE_BY_DATAPOINTID_USECASE, + FindDeviceByDatapointIdUsecase, +} from 'src/device/application/ports/in/find-device-by-datapointId.usecase'; import { CHECK_ALARM_RULE_USECASE, CheckAlarmRuleUseCase, @@ -85,6 +98,7 @@ function createMockDeviceValue( describe('Device Module Integration Test', () => { let app: INestApplication; + let deviceController: DeviceController; let findDeviceByIdPort: jest.Mocked; let findDeviceByPlantIdPort: jest.Mocked; let ingestTimeseriesPort: jest.Mocked; @@ -92,6 +106,8 @@ describe('Device Module Integration Test', () => { let writeDatapointValuePort: jest.Mocked; let findDeviceByDatapointIdPort: jest.Mocked; let checkAlarmRuleUseCase: jest.Mocked; + let getDeviceValueUseCase: GetDeviceValueUseCase; + let findDeviceByDatapointIdUseCase: FindDeviceByDatapointIdUsecase; beforeEach(async () => { const mockClient = { @@ -171,6 +187,14 @@ describe('Device Module Integration Test', () => { }), ); await app.init(); + deviceController = module.get(DeviceController); + + getDeviceValueUseCase = module.get( + GET_DEVICE_VALUE_USECASE, + ); + findDeviceByDatapointIdUseCase = module.get( + FIND_DEVICE_BY_DATAPOINTID_USECASE, + ); }); afterEach(async () => { @@ -472,6 +496,56 @@ describe('Device Module Integration Test', () => { // ============================================================================ describe('POST /device/update - Ingest Timeseries from Webhook', () => { + it('should handle Error objects in ingestion and alarm catches', async () => { + ingestTimeseriesPort.ingestTimeseries.mockRejectedValue( + new Error('ingestion error'), + ); + checkAlarmRuleUseCase.checkAlarmRule.mockRejectedValue( + new Error('alarm error'), + ); + + await request(app.getHttpServer() as http.Server) + .post('/device/update') + .send({ + data: [ + { + id: 'dp-1', + type: 'datapoint', + attributes: { + value: 12, + timestamp: new Date().toISOString(), + }, + }, + ], + }) + .expect(202); + + await new Promise((resolve) => setTimeout(resolve, 60)); + }); + + it('should handle non-Error values in ingestion and alarm catches', async () => { + ingestTimeseriesPort.ingestTimeseries.mockRejectedValue('ingestion string'); + checkAlarmRuleUseCase.checkAlarmRule.mockRejectedValue('alarm string'); + + await request(app.getHttpServer() as http.Server) + .post('/device/update') + .send({ + data: [ + { + id: 'dp-1', + type: 'datapoint', + attributes: { + value: 11, + timestamp: new Date().toISOString(), + }, + }, + ], + }) + .expect(202); + + await new Promise((resolve) => setTimeout(resolve, 60)); + }); + it('should accept webhook payload with datapoint updates', async () => { // Arrange const device = createMockDevice(); @@ -873,6 +947,26 @@ describe('Device Module Integration Test', () => { // ============================================================================ describe('Error Handling & Edge Cases', () => { + it('should execute guard clauses for missing params in controller methods', async () => { + await expect(deviceController.findByPlantId('')).rejects.toBe( + BadRequestException, + ); + + await expect(deviceController.getDeviceValue('')).rejects.toBeInstanceOf( + BadRequestException, + ); + }); + + it('should reject service calls when required identifiers are missing', async () => { + await expect( + getDeviceValueUseCase.getDeviceValue({ deviceId: '' }), + ).rejects.toThrow('[Device Controller] Device id is missing'); + + await expect( + findDeviceByDatapointIdUseCase.findByDatapointId({ datapointId: '' }), + ).rejects.toThrow('[Device Controller] DatapointId is missing'); + }); + it('should handle port failures without crashing', async () => { // Arrange findDeviceByIdPort.findById.mockRejectedValue( diff --git a/backend/test/integration/helpers/mock-pg.ts b/backend/test/integration/helpers/mock-pg.ts new file mode 100644 index 00000000..94f8a96f --- /dev/null +++ b/backend/test/integration/helpers/mock-pg.ts @@ -0,0 +1,36 @@ +type QueryResult = { + rows: T[]; + rowCount?: number; +}; + +type QueryHandler = ( + sql: string, + params: unknown[], +) => QueryResult | Promise; + +export function normalizeSql(sql: string): string { + return sql.replace(/\s+/g, ' ').trim().toLowerCase(); +} + +export function createMockPgPool(handler: QueryHandler) { + const run = async (sql: string, params: unknown[] = []) => { + const result = await handler(sql, params); + return { + rows: result.rows, + rowCount: result.rowCount ?? result.rows.length, + }; + }; + + const client = { + query: jest.fn(run), + release: jest.fn(), + }; + + return { + query: jest.fn(run), + connect: jest.fn(async () => client), + end: jest.fn(), + on: jest.fn(), + __client: client, + }; +} diff --git a/backend/test/integration/notifications.integration.spec.ts b/backend/test/integration/notifications.integration.spec.ts index ef5b2e30..89bc6dc0 100644 --- a/backend/test/integration/notifications.integration.spec.ts +++ b/backend/test/integration/notifications.integration.spec.ts @@ -2,12 +2,22 @@ import { INestApplication, ValidationPipe } from '@nestjs/common'; import { EventEmitter2, EventEmitterModule } from '@nestjs/event-emitter'; import { Test, TestingModule } from '@nestjs/testing'; import { DatabaseModule } from 'src/database/database.module'; +import { + NOTIFY_ALARM_RESOLUTION_USECASE, + NotifyAlarmResolutionUseCase, +} from 'src/notifications/application/ports/in/notify-alarm-resolution.usecase'; +import { + NOTIFY_ALARM_WARD_USECASE, + NotifyAlarmWardUseCase, +} from 'src/notifications/application/ports/in/notify-alarm-ward.usecase'; import { NotificationModule } from 'src/notifications/notification.module'; import { PG_POOL } from 'src/database/database.module'; describe('Notifications Integration Test', () => { let app: INestApplication; let eventEmitter: EventEmitter2; + let notifyAlarmWardUseCase: NotifyAlarmWardUseCase; + let notifyAlarmResolutionUseCase: NotifyAlarmResolutionUseCase; const mockPool = { query: jest.fn().mockResolvedValue({ rows: [{ id: 1 }], rowCount: 1 }), @@ -38,6 +48,12 @@ describe('Notifications Integration Test', () => { await app.init(); eventEmitter = module.get(EventEmitter2); + notifyAlarmWardUseCase = module.get( + NOTIFY_ALARM_WARD_USECASE, + ); + notifyAlarmResolutionUseCase = module.get( + NOTIFY_ALARM_RESOLUTION_USECASE, + ); }); afterEach(async () => { @@ -77,4 +93,25 @@ describe('Notifications Integration Test', () => { expect(mockPool.query).not.toHaveBeenCalled(); }); + + it('should reject ward notification when alarmEventId is missing', async () => { + await expect( + notifyAlarmWardUseCase.notifyAlarmWard({ + alarm: { + alarmRuleId: 'rule-1', + wardId: 1, + alarmEventId: '', + }, + }), + ).rejects.toThrow("Can't write notification without alarm event id"); + }); + + it('should reject resolution notification when wardId is missing', async () => { + await expect( + notifyAlarmResolutionUseCase.notifyAlarmResolution({ + alarmId: 'alarm-event-1', + wardId: 0, + }), + ).rejects.toThrow("Can't write notification without parameters"); + }); }); diff --git a/backend/test/integration/plant.integration.spec.ts b/backend/test/integration/plant.integration.spec.ts index 0f94472f..4687379f 100644 --- a/backend/test/integration/plant.integration.spec.ts +++ b/backend/test/integration/plant.integration.spec.ts @@ -3,47 +3,65 @@ import { JwtService } from '@nestjs/jwt'; import { Test, TestingModule } from '@nestjs/testing'; import * as http from 'node:http'; import request from 'supertest'; -import { DatabaseModule } from 'src/database/database.module'; -import { Plant } from 'src/plant/domain/models/plant.model'; -import { PlantEntity } from 'src/plant/infrastructure/persistence/entities/plant.entity'; +import { DatabaseModule, PG_POOL } from 'src/database/database.module'; import { PlantModule } from 'src/plant/plant.module'; -import { PLANT_REPOSITORY_PORT } from 'src/plant/application/repository/plant.repository'; +import { createMockPgPool, normalizeSql } from './helpers/mock-pg'; describe('Plant Integration Test', () => { let app: INestApplication; let jwtService: JwtService; const ACCESS_SECRET = 'integration-access-secret'; - const PLANT_ID = 'plant-001'; - const mockPlantRepository = { - findById: jest.fn, [string]>(), - findAllAvailablePlants: jest.fn, []>(), - findAllPlants: jest.fn, []>(), + const state = { + plants: [ + { + id: 'plant-1', + cached_at: new Date('2026-04-01T10:00:00.000Z'), + data: { name: 'Main Plant', rooms: [] }, + ward_id: null as number | null, + }, + { + id: 'plant-2', + cached_at: new Date('2026-04-01T10:00:00.000Z'), + data: { name: 'Ward Plant', rooms: [] }, + ward_id: 10, + }, + ], }; - const makePlantEntity = (id: string, name: string): PlantEntity => - PlantEntity.fromDomain(new Plant(id, name, [], 1)); - beforeEach(async () => { process.env.ACCESS_SECRET = ACCESS_SECRET; - mockPlantRepository.findById.mockResolvedValue( - makePlantEntity(PLANT_ID, 'Main Plant'), - ); - mockPlantRepository.findAllAvailablePlants.mockResolvedValue([ - makePlantEntity('plant-available-1', 'Available Plant'), - ]); - mockPlantRepository.findAllPlants.mockResolvedValue([ - makePlantEntity('plant-available-1', 'Available Plant'), - makePlantEntity('plant-other-2', 'Other Plant'), - ]); + const pool = createMockPgPool(async (rawSql, params) => { + const sql = normalizeSql(rawSql); + + if (sql.includes('from plant') && sql.includes('where id = $1')) { + const [id] = params as [string]; + const plant = state.plants.find((p) => p.id === id); + return { rows: plant ? [plant] : [], rowCount: plant ? 1 : 0 }; + } + + if (sql.includes('from plant') && sql.includes('where ward_id is null')) { + return { rows: state.plants.filter((p) => p.ward_id == null) }; + } + + if (sql.includes('from plant') && !sql.includes('where')) { + return { rows: [...state.plants] }; + } + + if (sql === 'begin' || sql === 'commit' || sql === 'rollback') { + return { rows: [] }; + } + + throw new Error(`Unhandled SQL in plant integration test: ${sql}`); + }); const module: TestingModule = await Test.createTestingModule({ imports: [DatabaseModule, PlantModule], }) - .overrideProvider(PLANT_REPOSITORY_PORT) - .useValue(mockPlantRepository) + .overrideProvider(PG_POOL) + .useValue(pool) .compile(); app = module.createNestApplication(); @@ -66,39 +84,69 @@ describe('Plant Integration Test', () => { }); const userToken = () => - jwtService.sign({ id: 20, username: 'user', role: 'UTENTE' }); + jwtService.sign({ id: 1, username: 'user', role: 'UTENTE' }); - it('should retrieve a plant by plantid query parameter', async () => { + it('should retrieve plant by id with real repository', async () => { const response = await request(app.getHttpServer() as http.Server) .get('/plant') - .query({ plantid: PLANT_ID }) + .query({ plantid: 'plant-1' }) .set('Authorization', `Bearer ${userToken()}`) .expect(200); - expect(response.body).toHaveProperty('id', PLANT_ID); + expect(response.body).toHaveProperty('id', 'plant-1'); expect(response.body).toHaveProperty('name', 'Main Plant'); - expect(mockPlantRepository.findById).toHaveBeenCalledWith(PLANT_ID); }); - it('should return 404 when plantid is missing', async () => { + it('should return only available plants', async () => { + const response = await request(app.getHttpServer() as http.Server) + .get('/plant/available') + .set('Authorization', `Bearer ${userToken()}`) + .expect(200); + + expect(response.body).toHaveLength(1); + expect(response.body[0]).toHaveProperty('id', 'plant-1'); + }); + + it('should return all plants', async () => { + const response = await request(app.getHttpServer() as http.Server) + .get('/plant/all') + .set('Authorization', `Bearer ${userToken()}`) + .expect(200); + + expect(response.body).toHaveLength(2); + }); + + it('should return 404 when plantid query param is missing', async () => { await request(app.getHttpServer() as http.Server) .get('/plant') .set('Authorization', `Bearer ${userToken()}`) .expect(404); }); - it('should return all available plants', async () => { + it('should return 404 when plant is not found', async () => { + await request(app.getHttpServer() as http.Server) + .get('/plant') + .query({ plantid: 'missing-plant' }) + .set('Authorization', `Bearer ${userToken()}`) + .expect(404); + }); + + it('should return fallback message when no available plants are found', async () => { + state.plants = []; + const response = await request(app.getHttpServer() as http.Server) .get('/plant/available') .set('Authorization', `Bearer ${userToken()}`) .expect(200); - expect(response.body).toHaveLength(1); - expect(response.body[0]).toHaveProperty('id', 'plant-available-1'); + expect(response.body).toEqual({ + message: 'No available plants found', + statusCode: 202, + }); }); - it('should return fallback payload when all plants retrieval fails', async () => { - mockPlantRepository.findAllPlants.mockResolvedValue(null); + it('should return fallback message when no plants are found', async () => { + state.plants = []; const response = await request(app.getHttpServer() as http.Server) .get('/plant/all') diff --git a/backend/test/integration/subscription.integration.spec.ts b/backend/test/integration/subscription.integration.spec.ts index 780ef73d..2352e703 100644 --- a/backend/test/integration/subscription.integration.spec.ts +++ b/backend/test/integration/subscription.integration.spec.ts @@ -1,61 +1,166 @@ +import { HttpService } from '@nestjs/axios'; import { INestApplication, ValidationPipe } from '@nestjs/common'; import { EventEmitter2, EventEmitterModule } from '@nestjs/event-emitter'; import { Test, TestingModule } from '@nestjs/testing'; -import { GETVALIDTOKENPORT } from 'src/api-auth-vimar/application/ports/out/get-valid-token.port'; -import { GET_ALL_PLANTIDS_PORT } from 'src/cache/application/ports/out/get-all-plantids.port'; +import { of } from 'rxjs'; import { DatabaseModule, PG_POOL } from 'src/database/database.module'; import { EventSubscriptionController } from 'src/subscription/adapters/in/event/event-sub.controller'; -import { SUBSCRIPTION_REPOSITORY_PORT } from 'src/subscription/application/repository/subscription.repository'; +import { + REFRESH_ALL_SUBSCRIPTION_USECASE, + RefreshAllSubscriptionUseCase, +} from 'src/subscription/application/ports/in/refresh-all-subscription.usecase'; import { SubscriptionModule } from 'src/subscription/subscription.module'; +import { createMockPgPool, normalizeSql } from './helpers/mock-pg'; describe('Subscription Integration Test', () => { let app: INestApplication; let eventEmitter: EventEmitter2; - let eventSubscriptionController: EventSubscriptionController; - - const mockPool = { - query: jest.fn().mockResolvedValue({ rows: [], rowCount: 0 }), - connect: jest.fn().mockResolvedValue({ - query: jest.fn().mockResolvedValue({ rows: [], rowCount: 0 }), - release: jest.fn(), - }), - end: jest.fn(), - on: jest.fn(), - }; + let eventController: EventSubscriptionController; + let refreshAllSubscriptionUseCase: RefreshAllSubscriptionUseCase; - const mockGetValidTokenPort = { - getValidToken: jest.fn, []>(), + const state = { + tokenCache: { + access_token: 'valid-access', + refresh_token: 'valid-refresh', + expires_at: new Date(Date.now() + 60_000), + user_id: 1, + email: 'linked@example.com', + } as { + access_token: string; + refresh_token: string; + expires_at: Date; + user_id: number; + email: string; + } | null, + nodeSubscriptions: [] as string[], + datapointSubscriptions: [] as string[], + emptyPlantIds: false, + failNodePost: false, + failDatapointPost: false, + failLocationLookup: false, }; - const mockGetAllPlantIdsPort = { - getAllPlantIds: jest.fn, []>(), - }; + beforeEach(async () => { + process.env.HOST3 = 'https://vimar.example.com/api/v2'; + process.env.PLANT_DOMAIN = 'https://vimar.example.com/.well-known/knx'; + process.env.SECRET_FOR_SUB = 'integration-secret'; + process.env.NODE_SUB_CALLBACK = 'https://callback.example.com/cache/update'; + process.env.DATAPOINT_SUB_CALLBACK = + 'https://callback.example.com/device/update'; - const mockSubscriptionRepository = { - refreshSub: jest.fn, [string, string]>(), - refreshDatapointSub: jest.fn, [string, string]>(), - }; + state.nodeSubscriptions = []; + state.datapointSubscriptions = []; + state.tokenCache = { + access_token: 'valid-access', + refresh_token: 'valid-refresh', + expires_at: new Date(Date.now() + 60_000), + user_id: 1, + email: 'linked@example.com', + }; + state.emptyPlantIds = false; + state.failNodePost = false; + state.failDatapointPost = false; + state.failLocationLookup = false; - beforeEach(async () => { - mockGetValidTokenPort.getValidToken.mockResolvedValue('valid-token'); - mockGetAllPlantIdsPort.getAllPlantIds.mockResolvedValue([ - 'plant-1', - 'plant-2', - ]); - mockSubscriptionRepository.refreshSub.mockResolvedValue(true); - mockSubscriptionRepository.refreshDatapointSub.mockResolvedValue(true); + const pool = createMockPgPool(async (rawSql, params) => { + const sql = normalizeSql(rawSql); + + if (sql === 'select * from token_cache') { + if (!state.tokenCache) { + return { rows: [], rowCount: 0 }; + } + return { rows: [state.tokenCache], rowCount: 1 }; + } + + if (sql.includes('insert into token_cache')) { + const [accessToken, refreshToken, expiresAt, userId, email] = params as [ + string, + string, + Date, + number, + string, + ]; + state.tokenCache = { + access_token: accessToken, + refresh_token: refreshToken, + expires_at: expiresAt, + user_id: userId, + email, + }; + return { rows: [{ access_token: accessToken }], rowCount: 1 }; + } + + throw new Error(`Unhandled SQL in subscription integration test: ${sql}`); + }); + + const httpServiceMock = { + get: jest.fn().mockImplementation((url: string) => { + if (url === 'https://vimar.example.com/.well-known/knx') { + return of({ + data: { + api: { + templates: { + plantId: { + values: state.emptyPlantIds ? [] : ['plant-1', 'plant-2'], + }, + }, + }, + }, + }); + } + + if (url.endsWith('/plant-1/locations/') || url.endsWith('/plant-2/locations/')) { + if (state.failLocationLookup) { + return of({ data: { data: [{}] } }); + } + return of({ data: { data: [{ id: 'site-1' }] } }); + } + + throw new Error(`Unhandled HTTP GET in subscription integration test: ${url}`); + }), + post: jest.fn().mockImplementation((url: string, body: any) => { + const isNodeSub = !!body?.data?.relationships?.subscriptionNode; + const isDatapointSub = !!body?.data?.relationships?.subscriptionDatapoints; + + if (state.failNodePost && isNodeSub) { + throw new Error('Node subscription creation failed'); + } + + if (state.failDatapointPost && isDatapointSub) { + throw new Error('Datapoint subscription creation failed'); + } + + if (url.endsWith('/plant-1/subscriptions') && isNodeSub) { + state.nodeSubscriptions.push('plant-1'); + return of({ data: { ok: true } }); + } + + if (url.endsWith('/plant-2/subscriptions') && isNodeSub) { + state.nodeSubscriptions.push('plant-2'); + return of({ data: { ok: true } }); + } + + if (url.endsWith('/plant-1/subscriptions') && isDatapointSub) { + state.datapointSubscriptions.push('plant-1'); + return of({ data: { ok: true } }); + } + + if (url.endsWith('/plant-2/subscriptions') && isDatapointSub) { + state.datapointSubscriptions.push('plant-2'); + return of({ data: { ok: true } }); + } + + throw new Error(`Unhandled HTTP POST in subscription integration test: ${url}`); + }), + }; const module: TestingModule = await Test.createTestingModule({ imports: [EventEmitterModule.forRoot(), DatabaseModule, SubscriptionModule], }) .overrideProvider(PG_POOL) - .useValue(mockPool) - .overrideProvider(GETVALIDTOKENPORT) - .useValue(mockGetValidTokenPort) - .overrideProvider(GET_ALL_PLANTIDS_PORT) - .useValue(mockGetAllPlantIdsPort) - .overrideProvider(SUBSCRIPTION_REPOSITORY_PORT) - .useValue(mockSubscriptionRepository) + .useValue(pool) + .overrideProvider(HttpService) + .useValue(httpServiceMock) .compile(); app = module.createNestApplication(); @@ -69,49 +174,137 @@ describe('Subscription Integration Test', () => { await app.init(); eventEmitter = module.get(EventEmitter2); - eventSubscriptionController = module.get( + eventController = module.get( EventSubscriptionController, ); + refreshAllSubscriptionUseCase = module.get( + REFRESH_ALL_SUBSCRIPTION_USECASE, + ); }); afterEach(async () => { if (app) { await app.close(); } - jest.clearAllMocks(); }); - it('should refresh subscriptions for a single plant on cache.updated event', async () => { + it('should refresh subscriptions for all plants on cache.all.updated', async () => { + eventEmitter.emit('cache.all.updated'); + + await new Promise((resolve) => setTimeout(resolve, 120)); + + expect(state.nodeSubscriptions).toContain('plant-1'); + expect(state.nodeSubscriptions).toContain('plant-2'); + }); + + it('should refresh subscriptions for one plant on cache.updated', async () => { eventEmitter.emit('cache.updated', { plantId: 'plant-1' }); - await new Promise((resolve) => setTimeout(resolve, 40)); + await new Promise((resolve) => setTimeout(resolve, 120)); - expect(mockSubscriptionRepository.refreshSub).toHaveBeenCalledWith( - 'valid-token', - 'plant-1', - ); - expect(mockSubscriptionRepository.refreshDatapointSub).toHaveBeenCalledWith( - 'valid-token', - 'plant-1', - ); + expect(state.nodeSubscriptions.filter((p) => p === 'plant-1').length).toBeGreaterThan(0); }); - it('should refresh all subscriptions on cache.all.updated event', async () => { - eventEmitter.emit('cache.all.updated'); + it('should execute node cron flow with real service', async () => { + await eventController.refreshNodeSubscriptions(); + + expect(state.nodeSubscriptions).toEqual(expect.arrayContaining(['plant-1', 'plant-2'])); + }); - await new Promise((resolve) => setTimeout(resolve, 60)); + it('should execute datapoint cron flow with real service', async () => { + await eventController.refreshDatapointSubscriptions(); - expect(mockGetAllPlantIdsPort.getAllPlantIds).toHaveBeenCalledTimes(2); - expect(mockSubscriptionRepository.refreshSub).toHaveBeenCalledTimes(2); - expect(mockSubscriptionRepository.refreshDatapointSub).toHaveBeenCalledTimes( - 2, + expect(state.datapointSubscriptions).toEqual( + expect.arrayContaining(['plant-1', 'plant-2']), ); }); - it('should execute node subscription cron flow', async () => { - await eventSubscriptionController.refreshNodeSubscriptions(); + it('should skip duplicate full-cache refresh event while another refresh is running', async () => { + (eventController as any).isBulkRefreshRunning = true; + + await eventController.refreshAllSubsAfterFullCacheSync(); + + expect(state.nodeSubscriptions).toHaveLength(0); + expect(state.datapointSubscriptions).toHaveLength(0); + }); + + it('should handle full-cache refresh errors without throwing', async () => { + state.tokenCache = null; + + await expect( + eventController.refreshAllSubsAfterFullCacheSync(), + ).resolves.toBeUndefined(); + }); + + it('should handle invalid cache.updated payload without throwing', async () => { + await expect( + eventController.refreshAllSubsByPlantId({} as { plantId: string }), + ).resolves.toBeUndefined(); + }); + + it('should handle node refresh when no plant IDs are available', async () => { + state.emptyPlantIds = true; + + await expect(eventController.refreshNodeSubscriptions()).resolves.toBeUndefined(); + }); + + it('should handle node refresh when repository returns false', async () => { + state.failNodePost = true; + + await expect(eventController.refreshNodeSubscriptions()).resolves.toBeUndefined(); + }); + + it('should handle datapoint refresh when repository returns false', async () => { + state.failDatapointPost = true; + + await expect( + eventController.refreshDatapointSubscriptions(), + ).resolves.toBeUndefined(); + }); + + it('should handle datapoint refresh when location lookup is invalid', async () => { + state.failLocationLookup = true; + + await expect( + eventController.refreshDatapointSubscriptions(), + ).resolves.toBeUndefined(); + }); + + it('should throw when refreshAllSubscription is called without plantId', async () => { + await expect( + refreshAllSubscriptionUseCase.refreshAllSubscription( + {} as { plantId: string }, + ), + ).rejects.toThrow('PlantId is null'); + }); + + it('should keep going when node refresh fails in refreshAllSubscription', async () => { + state.failNodePost = true; + + const result = await refreshAllSubscriptionUseCase.refreshAllSubscription({ + plantId: 'plant-1', + }); + + expect(result).toBe(true); + }); + + it('should return false when datapoint refresh fails in refreshAllSubscription', async () => { + state.failDatapointPost = true; + + const result = await refreshAllSubscriptionUseCase.refreshAllSubscription({ + plantId: 'plant-1', + }); + + expect(result).toBe(false); + }); + + it('should return false when adapter throws in refreshAllSubscription', async () => { + state.tokenCache = null; + + const result = await refreshAllSubscriptionUseCase.refreshAllSubscription({ + plantId: 'plant-1', + }); - expect(mockGetAllPlantIdsPort.getAllPlantIds).toHaveBeenCalledTimes(1); - expect(mockSubscriptionRepository.refreshSub).toHaveBeenCalledTimes(2); + expect(result).toBe(false); }); }); diff --git a/backend/test/integration/users.integration.spec.ts b/backend/test/integration/users.integration.spec.ts index 29ebabe5..08dc0910 100644 --- a/backend/test/integration/users.integration.spec.ts +++ b/backend/test/integration/users.integration.spec.ts @@ -3,9 +3,9 @@ import { JwtService } from '@nestjs/jwt'; import { Test, TestingModule } from '@nestjs/testing'; import * as http from 'node:http'; import request from 'supertest'; -import { UserEntity } from 'src/users/infrastructure/entities/user-entity'; -import { USER_REPOSITORY } from 'src/users/application/repository/user-repository.interface'; +import { DatabaseModule, PG_POOL } from 'src/database/database.module'; import { UsersModule } from 'src/users/users.module'; +import { createMockPgPool, normalizeSql } from './helpers/mock-pg'; describe('Users Integration Test', () => { let app: INestApplication; @@ -13,44 +13,169 @@ describe('Users Integration Test', () => { const ACCESS_SECRET = 'integration-access-secret'; - const mockUserRepository = { - createUser: jest.fn< - Promise, - [string, string, string, string] - >(), - deleteUser: jest.fn, [number]>(), - findAllAvailableUsers: jest.fn, []>(), - findAllUsers: jest.fn, []>(), - updateUser: jest.fn, [number, string, string, string]>(), - findUserById: jest.fn, [number]>(), + const state = { + roles: [ + { id: 1, name: 'Amministratore' }, + { id: 2, name: 'Operatore sanitario' }, + ], + users: [ + { + id: 1, + username: 'admin.user', + surname: 'Rossi', + name: 'Mario', + password: 'hashed', + roleId: 1, + }, + { + id: 2, + username: 'ward.user', + surname: 'Verdi', + name: 'Luca', + password: 'hashed', + roleId: 2, + }, + ], + wardUsers: [{ ward_id: 10, user_id: 2 }], + userSeq: 3, }; beforeEach(async () => { process.env.ACCESS_SECRET = ACCESS_SECRET; - mockUserRepository.findAllUsers.mockResolvedValue([ - new UserEntity(1, 'admin.user', 'Rossi', 'Mario', 'AMMINISTRATORE'), - new UserEntity(2, 'normal.user', 'Verdi', 'Luca', 'UTENTE'), - ]); - mockUserRepository.findAllAvailableUsers.mockResolvedValue([ - new UserEntity(3, 'available.user', 'Bianchi', 'Anna', 'UTENTE'), - ]); - mockUserRepository.findUserById.mockResolvedValue( - new UserEntity(1, 'admin.user', 'Rossi', 'Mario', 'AMMINISTRATORE'), - ); - mockUserRepository.createUser.mockResolvedValue( - new UserEntity(10, 'new.user', 'Neri', 'Paolo', 'UTENTE'), - ); - mockUserRepository.updateUser.mockResolvedValue( - new UserEntity(1, 'edited.user', 'Rossi', 'Marco', 'AMMINISTRATORE'), - ); - mockUserRepository.deleteUser.mockResolvedValue(); + const pool = createMockPgPool(async (rawSql, params) => { + const sql = normalizeSql(rawSql); + + if (sql.includes('select u.id, u.username, u.surname, u.name, r.name as role') && sql.includes('from "user" u') && !sql.includes('where u.id = $1') && !sql.includes('where u.id not in')) { + const rows = state.users.map((u) => ({ + id: u.id, + username: u.username, + surname: u.surname, + name: u.name, + role: state.roles.find((r) => r.id === u.roleId)?.name ?? 'Unknown', + })); + return { rows }; + } + + if (sql.includes('where u.id = $1')) { + const [id] = params as [number]; + const user = state.users.find((u) => u.id === id); + if (!user) { + return { rows: [], rowCount: 0 }; + } + return { + rows: [ + { + id: user.id, + username: user.username, + surname: user.surname, + name: user.name, + role: state.roles.find((r) => r.id === user.roleId)?.name, + }, + ], + rowCount: 1, + }; + } + + if (sql.includes('where u.id not in (select user_id from ward_user)')) { + const unavailableIds = new Set(state.wardUsers.map((w) => w.user_id)); + const rows = state.users + .filter((u) => !unavailableIds.has(u.id)) + .map((u) => ({ + id: u.id, + username: u.username, + surname: u.surname, + name: u.name, + role: state.roles.find((r) => r.id === u.roleId)?.name, + })); + return { rows }; + } + + if (sql.includes('select id from role where name = $1 limit 1')) { + const [name] = params as [string]; + const role = state.roles.find((r) => r.name === name); + return { rows: role ? [{ id: role.id }] : [] }; + } + + if (sql.includes('with created_user as ( insert into "user"')) { + const [username, surname, name, tempPassword, roleId] = params as [ + string, + string, + string, + string, + number, + ]; + + const created = { + id: state.userSeq++, + username, + surname, + name, + password: tempPassword, + roleId, + }; + state.users.push(created); + + return { + rows: [ + { + id: created.id, + username: created.username, + surname: created.surname, + name: created.name, + role: state.roles.find((r) => r.id === roleId)?.name, + }, + ], + rowCount: 1, + }; + } + + if (sql.includes('with updated_user as ( update "user" set username = $1, surname = $2, name = $3 where id = $4 returning * )')) { + const [username, surname, name, id] = params as [ + string, + string, + string, + number, + ]; + + const user = state.users.find((u) => u.id === id); + if (!user) { + return { rows: [], rowCount: 0 }; + } + + user.username = username; + user.surname = surname; + user.name = name; + + return { + rows: [ + { + id: user.id, + username: user.username, + surname: user.surname, + name: user.name, + role: state.roles.find((r) => r.id === user.roleId)?.name, + }, + ], + rowCount: 1, + }; + } + + if (sql.includes('delete from "user" where id = $1')) { + const [id] = params as [number]; + const before = state.users.length; + state.users = state.users.filter((u) => u.id !== id); + return { rows: [], rowCount: before - state.users.length }; + } + + throw new Error(`Unhandled SQL in users integration test: ${sql}`); + }); const module: TestingModule = await Test.createTestingModule({ - imports: [UsersModule], + imports: [DatabaseModule, UsersModule], }) - .overrideProvider(USER_REPOSITORY) - .useValue(mockUserRepository) + .overrideProvider(PG_POOL) + .useValue(pool) .compile(); app = module.createNestApplication(); @@ -72,23 +197,23 @@ describe('Users Integration Test', () => { } }); - const buildToken = (role: string) => - jwtService.sign({ id: 1, username: 'admin.user', role, firstAccess: false }); + const adminToken = () => + jwtService.sign({ id: 1, username: 'admin.user', role: 'AMMINISTRATORE' }); - it('should retrieve all users for an admin', async () => { + it('should list users using real controller/service/adapter/repository chain', async () => { const response = await request(app.getHttpServer() as http.Server) .get('/users') - .set('Authorization', `Bearer ${buildToken('AMMINISTRATORE')}`) + .set('Authorization', `Bearer ${adminToken()}`) .expect(200); expect(response.body).toHaveLength(2); - expect(mockUserRepository.findAllUsers).toHaveBeenCalledTimes(1); + expect(response.body[0]).toHaveProperty('username', 'admin.user'); }); - it('should create a user and return generated temp password', async () => { + it('should create user and return generated tempPassword', async () => { const response = await request(app.getHttpServer() as http.Server) .post('/users') - .set('Authorization', `Bearer ${buildToken('AMMINISTRATORE')}`) + .set('Authorization', `Bearer ${adminToken()}`) .send({ username: 'new.user', surname: 'Neri', @@ -96,41 +221,16 @@ describe('Users Integration Test', () => { }) .expect(201); - expect(response.body).toHaveProperty('id', 10); + expect(response.body).toHaveProperty('id'); expect(response.body).toHaveProperty('username', 'new.user'); expect(response.body).toHaveProperty('tempPassword'); - expect(typeof response.body.tempPassword).toBe('string'); - expect(mockUserRepository.createUser).toHaveBeenCalledTimes(1); - }); - - it('should reject non-admin user on guarded route', async () => { - await request(app.getHttpServer() as http.Server) - .get('/users') - .set('Authorization', `Bearer ${buildToken('UTENTE')}`) - .expect(401); }); - it('should validate payload on update user', async () => { + it('should validate payload on create user', async () => { await request(app.getHttpServer() as http.Server) - .put('/users/1') - .set('Authorization', `Bearer ${buildToken('AMMINISTRATORE')}`) - .send({ - username: 'abc', - surname: 'R', - name: 'M', - }) + .post('/users') + .set('Authorization', `Bearer ${adminToken()}`) + .send({ username: 'abc', surname: 'x', name: 'y' }) .expect(400); - - expect(mockUserRepository.updateUser).not.toHaveBeenCalled(); - }); - - it('should retrieve available users', async () => { - const response = await request(app.getHttpServer() as http.Server) - .get('/users/available') - .set('Authorization', `Bearer ${buildToken('AMMINISTRATORE')}`) - .expect(200); - - expect(response.body).toHaveLength(1); - expect(response.body[0]).toHaveProperty('username', 'available.user'); }); }); diff --git a/backend/test/integration/wards.integration.spec.ts b/backend/test/integration/wards.integration.spec.ts index 6ee8d380..7c5d7903 100644 --- a/backend/test/integration/wards.integration.spec.ts +++ b/backend/test/integration/wards.integration.spec.ts @@ -3,20 +3,9 @@ import { JwtService } from '@nestjs/jwt'; import { Test, TestingModule } from '@nestjs/testing'; import * as http from 'node:http'; import request from 'supertest'; -import { ADD_PLANT_TO_WARD_REPOSITORY } from 'src/wards/application/repository/add-plant-to-ward-repository.interface'; -import { ADD_USER_TO_WARD_REPOSITORY } from 'src/wards/application/repository/add-user-to-ward-repository.interface'; -import { CREATE_WARD_REPOSITORY } from 'src/wards/application/repository/create-ward-repository.interface'; -import { DELETE_WARD_REPOSITORY } from 'src/wards/application/repository/delete-ward-repository.interface'; -import { FIND_ALL_PLANTS_BY_WARD_ID_REPOSITORY } from 'src/wards/application/repository/find-all-plants-by-ward-id-repository.interface'; -import { FIND_ALL_USERS_BY_WARD_ID_REPOSITORY } from 'src/wards/application/repository/find-all-users-by-ward-id-repository.interface'; -import { FIND_ALL_WARDS_REPOSITORY } from 'src/wards/application/repository/find-all-wards-repository.interface'; -import { REMOVE_PLANT_FROM_WARD_REPOSITORY } from 'src/wards/application/repository/remove-plant-from-ward-repository.interface'; -import { REMOVE_USER_FROM_WARD_REPOSITORY } from 'src/wards/application/repository/remove-user-from-ward-repository.interface'; -import { UPDATE_WARD_REPOSITORY } from 'src/wards/application/repository/update-ward-repository.interface'; -import { PlantEntity } from 'src/wards/infrastructure/entities/plant-entity'; -import { UserEntity } from 'src/wards/infrastructure/entities/user-entity'; -import { WardEntity } from 'src/wards/infrastructure/entities/ward-entity'; +import { DatabaseModule, PG_POOL } from 'src/database/database.module'; import { WardsModule } from 'src/wards/wards.module'; +import { createMockPgPool, normalizeSql } from './helpers/mock-pg'; describe('Wards Integration Test', () => { let app: INestApplication; @@ -24,77 +13,150 @@ describe('Wards Integration Test', () => { const ACCESS_SECRET = 'integration-access-secret'; - const mockWardsRepository = { - createWard: jest.fn, [string]>(), - findAllWards: jest.fn, []>(), - updateWard: jest.fn, [number, string]>(), - deleteWard: jest.fn, [number]>(), - }; - - const mockWardsUsersRepository = { - addUserToWard: jest.fn, [number, number]>(), - findAllUsersByWardId: jest.fn, [number]>(), - removeUserFromWard: jest.fn, [number, number]>(), - }; - - const mockWardsPlantsRepository = { - addPlantToWard: jest.fn, [number, string]>(), - findAllPlantsByWardId: jest.fn, [number]>(), - removePlantFromWard: jest.fn, [string]>(), + const state = { + wards: [{ id: 1, name: 'Cardiology' }], + users: [ + { id: 1, username: 'admin.user' }, + { id: 2, username: 'ward.user' }, + ], + wardUsers: [] as Array<{ ward_id: number; user_id: number }>, + plants: [ + { id: 'plant-1', data: { name: 'Main Plant', rooms: [] }, ward_id: null as number | null }, + ], + wardSeq: 2, }; beforeEach(async () => { process.env.ACCESS_SECRET = ACCESS_SECRET; - mockWardsRepository.createWard.mockResolvedValue(new WardEntity(1, 'Cardiology')); - mockWardsRepository.findAllWards.mockResolvedValue([ - new WardEntity(1, 'Cardiology'), - new WardEntity(2, 'Neurology'), - ]); - mockWardsRepository.updateWard.mockResolvedValue( - new WardEntity(1, 'Cardiology Updated'), - ); - mockWardsRepository.deleteWard.mockResolvedValue(); - - mockWardsUsersRepository.addUserToWard.mockResolvedValue( - new UserEntity(11, 'ward.user'), - ); - mockWardsUsersRepository.findAllUsersByWardId.mockResolvedValue([ - new UserEntity(11, 'ward.user'), - ]); - mockWardsUsersRepository.removeUserFromWard.mockResolvedValue(); - - mockWardsPlantsRepository.addPlantToWard.mockResolvedValue( - new PlantEntity('plant-1', 'Main Plant'), - ); - mockWardsPlantsRepository.findAllPlantsByWardId.mockResolvedValue([ - new PlantEntity('plant-1', 'Main Plant'), - ]); - mockWardsPlantsRepository.removePlantFromWard.mockResolvedValue(); + state.wards = [{ id: 1, name: 'Cardiology' }]; + state.wardUsers = []; + state.plants = [ + { id: 'plant-1', data: { name: 'Main Plant', rooms: [] }, ward_id: null }, + ]; + state.wardSeq = 2; + + const pool = createMockPgPool(async (rawSql, params) => { + const sql = normalizeSql(rawSql); + + if (sql === 'begin' || sql === 'commit' || sql === 'rollback') { + return { rows: [] }; + } + + if (sql.includes('insert into ward (name) values ($1) returning *')) { + const [name] = params as [string]; + const ward = { id: state.wardSeq++, name }; + state.wards.push(ward); + return { rows: [ward], rowCount: 1 }; + } + + if (sql === 'select * from ward') { + return { rows: [...state.wards] }; + } + + if (sql.includes('update ward set name = $1 where id = $2 returning *')) { + const [name, id] = params as [string, number]; + const ward = state.wards.find((w) => w.id === Number(id)); + if (!ward) { + return { rows: [], rowCount: 0 }; + } + ward.name = name; + return { rows: [ward], rowCount: 1 }; + } + + if (sql.includes('delete from ward where id = $1')) { + const [id] = params as [number]; + state.wards = state.wards.filter((w) => w.id !== Number(id)); + return { rows: [], rowCount: 1 }; + } + + if (sql.includes('update plant set ward_id = null where ward_id = $1')) { + const [wardId] = params as [number]; + state.plants + .filter((p) => p.ward_id === Number(wardId)) + .forEach((p) => { + p.ward_id = null; + }); + return { rows: [], rowCount: 1 }; + } + + if (sql.includes('update plant p set ward_id = $1 where p.id = $2 returning *')) { + const [wardId, plantId] = params as [number, string]; + const plant = state.plants.find((p) => p.id === plantId); + if (!plant) { + return { rows: [], rowCount: 0 }; + } + plant.ward_id = Number(wardId); + return { rows: [plant], rowCount: 1 }; + } + + if (sql.includes('update plant set ward_id = $1 where id = $2')) { + const [wardId, plantId] = params as [number, string]; + const plant = state.plants.find((p) => p.id === plantId); + if (plant) { + plant.ward_id = Number(wardId); + } + return { rows: [], rowCount: plant ? 1 : 0 }; + } + + if (sql.includes('select p.id, p.data->>\'name\' as name from plant p where p.ward_id = $1')) { + const [wardId] = params as [number]; + const rows = state.plants + .filter((p) => p.ward_id === Number(wardId)) + .map((p) => ({ id: p.id, name: p.data.name })); + return { rows }; + } + + if (sql.includes('with inserted as ( insert into ward_user (ward_id, user_id) values ($1, $2) returning user_id) select id, username from "user" where id = (select user_id from inserted)')) { + const [wardId, userId] = params as [number, number]; + state.wardUsers.push({ ward_id: Number(wardId), user_id: Number(userId) }); + const user = state.users.find((u) => u.id === Number(userId)); + return { rows: user ? [user] : [], rowCount: user ? 1 : 0 }; + } + + if (sql.includes('select u.id, u.username from "user" u join ward_user wu on u.id = wu.user_id where wu.ward_id = $1')) { + const [wardId] = params as [number]; + const userIds = state.wardUsers + .filter((w) => w.ward_id === Number(wardId)) + .map((w) => w.user_id); + const rows = state.users.filter((u) => userIds.includes(u.id)); + return { rows }; + } + + if (sql.includes('delete from ward_user where ward_id = $1 and user_id = $2')) { + const [wardId, userId] = params as [number, number]; + state.wardUsers = state.wardUsers.filter( + (w) => !(w.ward_id === Number(wardId) && w.user_id === Number(userId)), + ); + return { rows: [], rowCount: 1 }; + } + + if (sql.includes('update plant p set ward_id = null where p.id = $1')) { + const [plantId] = params as [string]; + const plant = state.plants.find((p) => p.id === plantId); + if (plant) { + plant.ward_id = null; + } + return { rows: [], rowCount: plant ? 1 : 0 }; + } + + if (sql.includes('update plant set ward_id = null where id = $1')) { + const [plantId] = params as [string]; + const plant = state.plants.find((p) => p.id === plantId); + if (plant) { + plant.ward_id = null; + } + return { rows: [], rowCount: plant ? 1 : 0 }; + } + + throw new Error(`Unhandled SQL in wards integration test: ${sql}`); + }); const module: TestingModule = await Test.createTestingModule({ - imports: [WardsModule], + imports: [DatabaseModule, WardsModule], }) - .overrideProvider(CREATE_WARD_REPOSITORY) - .useValue(mockWardsRepository) - .overrideProvider(FIND_ALL_WARDS_REPOSITORY) - .useValue(mockWardsRepository) - .overrideProvider(UPDATE_WARD_REPOSITORY) - .useValue(mockWardsRepository) - .overrideProvider(DELETE_WARD_REPOSITORY) - .useValue(mockWardsRepository) - .overrideProvider(ADD_USER_TO_WARD_REPOSITORY) - .useValue(mockWardsUsersRepository) - .overrideProvider(FIND_ALL_USERS_BY_WARD_ID_REPOSITORY) - .useValue(mockWardsUsersRepository) - .overrideProvider(REMOVE_USER_FROM_WARD_REPOSITORY) - .useValue(mockWardsUsersRepository) - .overrideProvider(ADD_PLANT_TO_WARD_REPOSITORY) - .useValue(mockWardsPlantsRepository) - .overrideProvider(FIND_ALL_PLANTS_BY_WARD_ID_REPOSITORY) - .useValue(mockWardsPlantsRepository) - .overrideProvider(REMOVE_PLANT_FROM_WARD_REPOSITORY) - .useValue(mockWardsPlantsRepository) + .overrideProvider(PG_POOL) + .useValue(pool) .compile(); app = module.createNestApplication(); @@ -117,64 +179,57 @@ describe('Wards Integration Test', () => { }); const adminToken = () => - jwtService.sign({ id: 1, username: 'admin', role: 'AMMINISTRATORE' }); + jwtService.sign({ id: 1, username: 'admin.user', role: 'AMMINISTRATORE' }); - it('should create a ward', async () => { - const response = await request(app.getHttpServer() as http.Server) + it('should create and list wards with real service and adapters', async () => { + await request(app.getHttpServer() as http.Server) .post('/wards') .set('Authorization', `Bearer ${adminToken()}`) - .send({ name: 'Cardiology' }) + .send({ name: 'Neurology' }) .expect(201); - expect(response.body).toHaveProperty('id', 1); - expect(response.body).toHaveProperty('name', 'Cardiology'); - expect(mockWardsRepository.createWard).toHaveBeenCalledWith('Cardiology'); - }); - - it('should list wards', async () => { const response = await request(app.getHttpServer() as http.Server) .get('/wards') .set('Authorization', `Bearer ${adminToken()}`) .expect(200); expect(response.body).toHaveLength(2); - expect(response.body[0]).toHaveProperty('name', 'Cardiology'); }); - it('should add a user to a ward', async () => { - const response = await request(app.getHttpServer() as http.Server) + it('should add and remove user from ward', async () => { + await request(app.getHttpServer() as http.Server) .post('/wards-users-relationships') .set('Authorization', `Bearer ${adminToken()}`) - .send({ wardId: 1, userId: 11 }) + .send({ wardId: 1, userId: 2 }) .expect(201); - expect(response.body).toHaveProperty('id', 11); - expect(response.body).toHaveProperty('username', 'ward.user'); - expect(mockWardsUsersRepository.addUserToWard).toHaveBeenCalledWith(1, 11); - }); - - it('should list plants by ward id', async () => { - const response = await request(app.getHttpServer() as http.Server) - .get('/wards-plants-relationships/1') + const usersByWard = await request(app.getHttpServer() as http.Server) + .get('/wards-users-relationships/1') .set('Authorization', `Bearer ${adminToken()}`) .expect(200); - expect(response.body).toHaveLength(1); - expect(response.body[0]).toHaveProperty('id', 'plant-1'); - expect(mockWardsPlantsRepository.findAllPlantsByWardId).toHaveBeenCalledWith( - 1, - ); + expect(usersByWard.body).toHaveLength(1); + expect(usersByWard.body[0]).toHaveProperty('id', 2); + + await request(app.getHttpServer() as http.Server) + .delete('/wards-users-relationships/1/2') + .set('Authorization', `Bearer ${adminToken()}`) + .expect(200); }); - it('should remove a user from a ward', async () => { + it('should add and list plants for a ward', async () => { await request(app.getHttpServer() as http.Server) - .delete('/wards-users-relationships/1/11') + .post('/wards-plants-relationships') + .set('Authorization', `Bearer ${adminToken()}`) + .send({ wardId: 1, plantId: 'plant-1' }) + .expect(201); + + const response = await request(app.getHttpServer() as http.Server) + .get('/wards-plants-relationships/1') .set('Authorization', `Bearer ${adminToken()}`) .expect(200); - expect(mockWardsUsersRepository.removeUserFromWard).toHaveBeenCalledWith( - 1, - 11, - ); + expect(response.body).toHaveLength(1); + expect(response.body[0]).toHaveProperty('id', 'plant-1'); }); }); diff --git a/backend/test/jest-e2e.json b/backend/test/jest-e2e.json index 4f1a2138..76d59ac9 100644 --- a/backend/test/jest-e2e.json +++ b/backend/test/jest-e2e.json @@ -1,12 +1,12 @@ { "moduleFileExtensions": ["js", "json", "ts"], - "rootDir": ".", + "rootDir": "../", + "testMatch": ["/test/e2e/**/*.e2e-spec.ts"], "testEnvironment": "node", - "setupFiles": ["/setup-e2e-env.ts"], - "testRegex": "e2e/.*\\.e2e-spec.ts$", + "setupFiles": ["/test/setup-e2e-env.ts"], "preset": "ts-jest", "moduleNameMapper": { - "^src/(.*)$": "/../src/$1" + "^src/(.*)$": "/src/$1" }, "transform": { "^.+\\.(t|j)s$": ["ts-jest", { @@ -16,13 +16,23 @@ }] }, "transformIgnorePatterns": ["node_modules/(?!(uuid)/)"], + "collectCoverageFrom": [ + "src/**/application/ports/**/*.ts", + "src/**/application/repository/**/*.ts" + ], + "coveragePathIgnorePatterns": [ + "/node_modules/", + "\\.module\\.ts$", + "\\.entity\\.ts$", + "main\\.ts$" + ], "reporters": [ "default", [ "jest-html-reporters", { "pageTitle": "E2E Test Report", - "publicPath": "/../test/e2e/coverage", + "publicPath": "/test/e2e/coverage", "filename": "jest-e2e-report.html", "expand": false, "hideIcon": true diff --git a/backend/test/jest.integration.coverage.json b/backend/test/jest.integration.coverage.json new file mode 100644 index 00000000..376001e3 --- /dev/null +++ b/backend/test/jest.integration.coverage.json @@ -0,0 +1,37 @@ +{ + "moduleFileExtensions": ["js", "json", "ts"], + "coveragePathIgnorePatterns": [ + ".module.ts", + ".entity.ts", + "main.ts" + ], + "rootDir": "../", + "testMatch": ["/test/integration/**/*.spec.ts"], + "transform": { + "^.+\\.(t|j)s$": "ts-jest" + }, + "transformIgnorePatterns": ["node_modules/(?!(uuid)/)"], + "moduleNameMapper": { + "^src/(.*)$": "/src/$1" + }, + "collectCoverageFrom": [ + "src/**/adapters/in/**/*.ts", + "src/**/application/services/**/*.ts" + ], + "coverageDirectory": "test/coverage", + "testEnvironment": "node", + "setupFilesAfterEnv": ["/src/jest.setup.ts"], + "reporters": [ + "default", + [ + "jest-html-reporters", + { + "pageTitle": "Integration Test Report", + "publicPath": "./test/integration/coverage", + "filename": "jest-integration-report.html", + "expand": false, + "hideIcon": true + } + ] + ] +} diff --git a/backend/test/unit/alarms/adapters/in/alarm-events.controller.spec.ts b/backend/test/unit/alarms/adapters/in/alarm-events.controller.spec.ts new file mode 100644 index 00000000..47f2ef9a --- /dev/null +++ b/backend/test/unit/alarms/adapters/in/alarm-events.controller.spec.ts @@ -0,0 +1,114 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { UserGuard } from 'src/guard/user/user.guard'; +import { AdminGuard } from 'src/guard/admin/admin.guard'; +import { JwtService } from '@nestjs/jwt'; +import { GET_ALL_ALARM_EVENTS_USE_CASE } from 'src/alarms/application/ports/in/get-all-alarm-events-use-case.interface'; +import { GET_ALARM_EVENT_BY_ID_USE_CASE } from 'src/alarms/application/ports/in/get-alarm-event-by-id-use-case.interface'; +import { GET_ALL_UNMANAGED_ALARM_EVENTS_BY_USER_ID_USE_CASE } from 'src/alarms/application/ports/in/get-all-unmanaged-alarm-events-by-user-id-use-case.interface'; +import { GET_ALL_MANAGED_ALARM_EVENTS_BY_USER_ID_USE_CASE } from 'src/alarms/application/ports/in/get-all-managed-alarm-events-by-user-id-use-case.interface'; +import { RESOLVE_ALARM_EVENT_USE_CASE } from 'src/alarms/application/ports/in/resolve-alarm-event.use-case'; +import { AlarmEventsController } from 'src/alarms/adapters/in/alarm-events.controller'; + +describe('AlarmEventsController', () => { + let controller: AlarmEventsController; + + const mockGetAllAlarmEventsUseCase = { + getAllAlarmEvents: jest.fn(), + }; + + const mockGetAlarmEventByIdUseCase = { + getAlarmEventById: jest.fn(), + }; + + const mockGetAllManagedAlarmEventsByUserIdUseCase = { + getAllManagedAlarmEventsByUserId: jest.fn(), + }; + + const mockGetAllUnmanagedAlarmEventsByUserIdUseCase = { + getAllUnmanagedAlarmEventsByUserId: jest.fn(), + }; + + const mockResolveAlarmEventUseCase = { + resolveAlarmEvent: jest.fn(), + }; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + controllers: [AlarmEventsController], + providers: [ + { + provide: GET_ALL_ALARM_EVENTS_USE_CASE, + useValue: mockGetAllAlarmEventsUseCase, + }, + { + provide: GET_ALARM_EVENT_BY_ID_USE_CASE, + useValue: mockGetAlarmEventByIdUseCase, + }, + { + provide: GET_ALL_MANAGED_ALARM_EVENTS_BY_USER_ID_USE_CASE, + useValue: mockGetAllManagedAlarmEventsByUserIdUseCase + }, + { + provide: GET_ALL_UNMANAGED_ALARM_EVENTS_BY_USER_ID_USE_CASE, + useValue: mockGetAllUnmanagedAlarmEventsByUserIdUseCase, + }, + { provide: RESOLVE_ALARM_EVENT_USE_CASE, useValue: mockResolveAlarmEventUseCase }, + { + provide: UserGuard, + useValue: { canActivate: jest.fn().mockReturnValue(true) }, + }, + { + provide: AdminGuard, + useValue: { canActivate: jest.fn().mockReturnValue(true) }, + }, + { + provide: JwtService, + useValue: { + verify: jest.fn().mockReturnValue({ id: 1, role: 'AMMINISTRATORE' }), + }, + }, + ], + }).compile(); + + controller = module.get(AlarmEventsController); + }); + + it('should be defined', () => { + expect(controller).toBeDefined(); + }); + + it('should call getAllAlarmEventsUseCase.getAllAlarmEvents', async () => { + await controller.getAllAlarmEvents(10,0); + expect(mockGetAllAlarmEventsUseCase.getAllAlarmEvents).toHaveBeenCalled(); + }); + + it('should call getAlarmEventByIdUseCase.getAlarmEventById', async () => { + await controller.getAlarmEventById('id'); + expect( + mockGetAlarmEventByIdUseCase.getAlarmEventById, + ).toHaveBeenCalled(); + }); + + it('should call getAllManagedAlarmEventsByUserIdUseCase.getAllManagedAlarmEventsByUserId', async () => { + await controller.getAllManagedAlarmEventsByUserId(1,10,0); + expect(mockGetAllManagedAlarmEventsByUserIdUseCase.getAllManagedAlarmEventsByUserId).toHaveBeenCalled(); + }); + + it('should call getAllUnmanagedAlarmEventsByUserIdUseCase.getAllUnmanagedAlarmEventsByUserId', async () => { + await controller.getAllUnmanagedAlarmEventsByUserId(1,10,0); + expect(mockGetAllUnmanagedAlarmEventsByUserIdUseCase.getAllUnmanagedAlarmEventsByUserId).toHaveBeenCalled(); + }); + + it('should call resolveAlarmEventUseCase.resolveAlarmEvent with correct args', async () => { + const req = { userId: 1, alarmId: '' }; + + await controller.resolveAlarmEvent(req); + + expect(mockResolveAlarmEventUseCase.resolveAlarmEvent).toHaveBeenCalledWith( + expect.objectContaining({ + alarmId: '', + userId: 1, + }), + ); + }); +}); \ No newline at end of file diff --git a/backend/test/unit/alarms/adapters/in/alarm-rules.controller.spec.ts b/backend/test/unit/alarms/adapters/in/alarm-rules.controller.spec.ts new file mode 100644 index 00000000..0c27440d --- /dev/null +++ b/backend/test/unit/alarms/adapters/in/alarm-rules.controller.spec.ts @@ -0,0 +1,139 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { UserGuard } from 'src/guard/user/user.guard'; +import { AdminGuard } from 'src/guard/admin/admin.guard'; +import { JwtService } from '@nestjs/jwt'; +import { AlarmRulesController } from 'src/alarms/adapters/in/alarm-rules.controller'; +import { CREATE_ALARM_RULE_USE_CASE } from 'src/alarms/application/ports/in/create-alarm-rule.use-case'; +import { DELETE_ALARM_RULE_USE_CASE } from 'src/alarms/application/ports/in/delete-alarm-rule.use-case'; +import { GET_ALARM_RULE_BY_ID_USE_CASE } from 'src/alarms/application/ports/in/get-alarm-rule-by-id.use-case'; +import { GET_ALL_ALARM_RULES_USE_CASE } from 'src/alarms/application/ports/in/get-all-alarm-rules.use-case'; +import { UPDATE_ALARM_RULE_USE_CASE } from 'src/alarms/application/ports/in/update-alarm-rule.use-case'; + +describe('AlarmRulesController', () => { + let controller: AlarmRulesController; + + const mockCreateAlarmRuleUseCase = { + createAlarmRule: jest.fn(), + }; + + const mockDeleteAlarmRuleUseCase = { + deleteAlarmRule: jest.fn(), + }; + + const mockGetAlarmRuleByIdUseCase = { + getAlarmRuleById: jest.fn(), + }; + + const mockGetAllAlarmRulesUseCase = { + getAllAlarmRules: jest.fn(), + }; + + const mockUpdateAlarmRuleUseCase = { + updateAlarmRule: jest.fn(), + }; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + controllers: [AlarmRulesController], + providers: [ + { + provide: CREATE_ALARM_RULE_USE_CASE, + useValue: mockCreateAlarmRuleUseCase, + }, + { + provide: DELETE_ALARM_RULE_USE_CASE, + useValue: mockDeleteAlarmRuleUseCase, + }, + { + provide: GET_ALARM_RULE_BY_ID_USE_CASE, + useValue: mockGetAlarmRuleByIdUseCase + }, + { + provide: GET_ALL_ALARM_RULES_USE_CASE, + useValue: mockGetAllAlarmRulesUseCase, + }, + { provide: UPDATE_ALARM_RULE_USE_CASE, useValue: mockUpdateAlarmRuleUseCase }, + { + provide: UserGuard, + useValue: { canActivate: jest.fn().mockReturnValue(true) }, + }, + { + provide: AdminGuard, + useValue: { canActivate: jest.fn().mockReturnValue(true) }, + }, + { + provide: JwtService, + useValue: { + verify: jest.fn().mockReturnValue({ id: 1, role: 'AMMINISTRATORE' }), + }, + }, + ], + }).compile(); + + controller = module.get(AlarmRulesController); + }); + + it('should be defined', () => { + expect(controller).toBeDefined(); + }); + + it('should call createAlarmUseCase.createAlarmRule', async () => { + const req = { + name: '', + datapointId: '', + deviceId: '', + plantId: '', + priority: 1, + thresholdOperator: '', + thresholdValue: '', + armingTime: '', + dearmingTime: '' + } + await controller.createAlarmRule(req); + expect(mockCreateAlarmRuleUseCase.createAlarmRule).toHaveBeenCalled(); + }); + + it('should call deleteAlarmRuleUseCase.deleteAlarmRule', async () => { + await controller.deleteAlarmRule('id'); + expect( + mockDeleteAlarmRuleUseCase.deleteAlarmRule, + ).toHaveBeenCalled(); + }); + + it('should call getAlarmRuleByIdUseCase.getAlarmRuleById', async () => { + await controller.getAlarmRuleById(''); + expect(mockGetAlarmRuleByIdUseCase.getAlarmRuleById).toHaveBeenCalled(); + }); + + it('should call getAllAlarmRulesUseCase.getAllAlarmRules', async () => { + await controller.getAllAlarmRules(); + expect(mockGetAllAlarmRulesUseCase.getAllAlarmRules).toHaveBeenCalled(); + }); + + it('should call updateAlarmRuleUseCase.updateAlarmRule with correct args', async () => { + const req = { + name: '', + priority: 1, + thresholdOperator: '', + thresholdValue: '', + armingTime: '', + dearmingTime: '', + isArmed: true + } + + await controller.updateAlarmRule('', req); + + expect(mockUpdateAlarmRuleUseCase.updateAlarmRule).toHaveBeenCalledWith( + expect.objectContaining({ + id: '', + name: '', + priority: 1, + thresholdOperator: '', + thresholdValue: '', + armingTime: '', + dearmingTime: '', + isArmed: true + }), + ); + }); +}); \ No newline at end of file diff --git a/backend/test/unit/alarms/adapters/out/alarm-events-persistence-adapter.spec.ts b/backend/test/unit/alarms/adapters/out/alarm-events-persistence-adapter.spec.ts index 07dd71af..535955d5 100644 --- a/backend/test/unit/alarms/adapters/out/alarm-events-persistence-adapter.spec.ts +++ b/backend/test/unit/alarms/adapters/out/alarm-events-persistence-adapter.spec.ts @@ -1,17 +1,226 @@ import { AlarmEventsPersistenceAdapter } from 'src/alarms/adapters/out/alarm-events-persistence-adapter'; +import { GetAlarmEventByIdCmd } from 'src/alarms/application/commands/get-alarm-event-by-id-cmd'; +import { GetAllAlarmEventsCmd } from 'src/alarms/application/commands/get-all-alarm-events-cmd'; +import { GetAllManagedAlarmEventsByUserIdCmd } from 'src/alarms/application/commands/get-all-managed-alarm-events-by-user-id-cmd'; +import { GetAllUnmanagedAlarmEventsByUserIdCmd } from 'src/alarms/application/commands/get-all-unmanaged-alarm-events-by-user-id-cmd'; +import { ResolveAlarmEventCmd } from 'src/alarms/application/commands/resolve-alarm-event-cmd'; +import { CreateAlarmEventCmd } from 'src/alarms/application/commands/create-alarm-event-cmd'; + describe('AlarmEventsPersistenceAdapter', () => { + let adapter: AlarmEventsPersistenceAdapter; + + const mockRepo = { + getAlarmEventById: jest.fn(), + getAllAlarmEvents: jest.fn(), + getAllManagedAlarmEventsByUserId: jest.fn(), + getAllUnmanagedAlarmEventsByUserId: jest.fn(), + resolveAlarmEvent: jest.fn(), + createAlarmEvent: jest.fn(), + getWardAlarmEvent: jest.fn(), + }; + + beforeEach(() => { + jest.clearAllMocks(); + adapter = new AlarmEventsPersistenceAdapter(mockRepo as any); + }); + it('should be defined', () => { - const repositoryMock = { - getAlarmEventById: jest.fn(), - getAllAlarmEvents: jest.fn(), - getAllManagedAlarmEventsByUserId: jest.fn(), - getAllUnmanagedAlarmEventsByUserId: jest.fn(), - resolveAlarmEvent: jest.fn(), - createAlarmEvent: jest.fn(), - getWardAlarmEvent: jest.fn(), - }; - - expect(new AlarmEventsPersistenceAdapter(repositoryMock as never)).toBeDefined(); - }); -}); + expect(adapter).toBeDefined(); + }); + + it('should call repository.getAlarmEventById and map result', async () => { + const cmd = new GetAlarmEventByIdCmd('1'); + + mockRepo.getAlarmEventById.mockResolvedValue({ + id: 1, + plant_name: 'plant', + room_name: 'room', + device_name: 'device', + alarm_rule_id: 10, + alarm_name: 'alarm', + priority: 1, + activation_time: '2024-01-01', + resolution_time: null, + user_id: 5, + user_username: 'user', + }); + + const result = await adapter.getAlarmEventById(cmd); + + expect(mockRepo.getAlarmEventById).toHaveBeenCalledWith('1'); + expect(result?.getId()).toBe(1); + expect(result?.getAlarmName()).toBe('alarm'); + }); + + it('should return null when alarm event not found', async () => { + const cmd = new GetAlarmEventByIdCmd('1'); + + mockRepo.getAlarmEventById.mockResolvedValue(null); + + const result = await adapter.getAlarmEventById(cmd); + + expect(result).toBeNull(); + }); + + it('should propagate getAlarmEventById errors', async () => { + const cmd = new GetAlarmEventByIdCmd('1'); + + const error = new Error('DB error'); + mockRepo.getAlarmEventById.mockRejectedValue(error); + + await expect(adapter.getAlarmEventById(cmd)).rejects.toThrow(error); + }); + + it('should call repository.getAllAlarmEvents and map result', async () => { + const cmd = new GetAllAlarmEventsCmd(10, 0); + + mockRepo.getAllAlarmEvents.mockResolvedValue([ + { + id: 1, + plant_name: 'plant', + room_name: 'room', + device_name: 'device', + alarm_rule_id: 10, + alarm_name: 'alarm', + priority: 1, + activation_time: '2024-01-01', + resolution_time: null, + user_id: 5, + user_username: 'user', + }, + ]); + + const result = await adapter.getAllAlarmEvents(cmd); + + expect(mockRepo.getAllAlarmEvents).toHaveBeenCalledWith(10, 0); + expect(result.length).toBe(1); + }); + + it('should propagate getAllAlarmEvents errors', async () => { + const cmd = new GetAllAlarmEventsCmd(10, 0); + + const error = new Error('DB error'); + + mockRepo.getAllAlarmEvents.mockRejectedValue(error); + + await expect(adapter.getAllAlarmEvents(cmd)).rejects.toThrow(error); + }); + + it('should call repository.getAllManagedAlarmEventsByUserId', async () => { + const cmd = new GetAllManagedAlarmEventsByUserIdCmd(1, 10, 0); + + mockRepo.getAllManagedAlarmEventsByUserId.mockResolvedValue([ + { + id: 1, + plant_name: 'plant', + room_name: 'room', + device_name: 'device', + alarm_rule_id: 10, + alarm_name: 'alarm', + priority: 1, + activation_time: '2024-01-01', + resolution_time: null, + user_id: 5, + user_username: 'user', + }, + ]); + + const result = await adapter.getAllManagedAlarmEventsByUserId(cmd); + + expect(mockRepo.getAllManagedAlarmEventsByUserId).toHaveBeenCalledWith( + 1, + 10, + 0, + ); + + expect(result.length).toBe(1); + }); + + it('should call repository.getAllUnmanagedAlarmEventsByUserId', async () => { + const cmd = new GetAllUnmanagedAlarmEventsByUserIdCmd(1, 10, 0); + + mockRepo.getAllUnmanagedAlarmEventsByUserId.mockResolvedValue([ + { + id: 1, + plant_name: 'plant', + room_name: 'room', + device_name: 'device', + alarm_rule_id: 10, + alarm_name: 'alarm', + priority: 1, + activation_time: '2024-01-01', + resolution_time: null, + user_id: 5, + user_username: 'user', + }, + ]); + + const result = await adapter.getAllUnmanagedAlarmEventsByUserId(cmd); + + expect(mockRepo.getAllUnmanagedAlarmEventsByUserId).toHaveBeenCalledWith( + 1, + 10, + 0, + ); + + expect(result.length).toBe(1); + }); + + it('should call repository.resolveAlarmEvent', async () => { + const cmd = new ResolveAlarmEventCmd('alarm-1', 5); + + mockRepo.resolveAlarmEvent.mockResolvedValue(undefined); + + await adapter.resolveAlarmEvent(cmd); + + expect(mockRepo.resolveAlarmEvent).toHaveBeenCalledWith('alarm-1', 5); + }); + + it('should propagate resolveAlarmEvent errors', async () => { + const cmd = new ResolveAlarmEventCmd('alarm-1', 5); + + const error = new Error('DB error'); + + mockRepo.resolveAlarmEvent.mockRejectedValue(error); + + await expect(adapter.resolveAlarmEvent(cmd)).rejects.toThrow(error); + }); + + it('should call repository.createAlarmEvent', async () => { + const date = new Date(); + const cmd = new CreateAlarmEventCmd('rule-1', date); + + mockRepo.createAlarmEvent.mockResolvedValue('event-1'); + + const result = await adapter.createAlarmEvent(cmd); + + expect(mockRepo.createAlarmEvent).toHaveBeenCalledWith( + 'rule-1', + date, + ); + + expect(result).toBe('event-1'); + }); + + it('should call repository.getWardAlarmEvent', async () => { + mockRepo.getWardAlarmEvent.mockResolvedValue(99); + + const result = await adapter.getWardAlarmEvent({alarmId: 'alarm-1'}); + + expect(mockRepo.getWardAlarmEvent).toHaveBeenCalledWith('alarm-1'); + expect(result).toBe(99); + }); + + it('should throw if getWardAlarmEvent cmd is invalid', async () => { + await expect( + adapter.getWardAlarmEvent({ alarmId: '' } as any), + ).rejects.toThrow('Invalid command: alarmId is required'); + }); + + it('should propagate getWardAlarmEvent errors', async () => { + mockRepo.getWardAlarmEvent.mockRejectedValue(new Error('DB error')); + + await expect(adapter.getWardAlarmEvent({alarmId: ''})).rejects.toThrow(); + }); +}); \ No newline at end of file diff --git a/backend/test/unit/alarms/adapters/out/alarm-rules-persistence-adapter.spec.ts b/backend/test/unit/alarms/adapters/out/alarm-rules-persistence-adapter.spec.ts index 7b193355..0c322e19 100644 --- a/backend/test/unit/alarms/adapters/out/alarm-rules-persistence-adapter.spec.ts +++ b/backend/test/unit/alarms/adapters/out/alarm-rules-persistence-adapter.spec.ts @@ -1,18 +1,361 @@ import { AlarmRulesPersistenceAdapter } from 'src/alarms/adapters/out/alarm-rules-persistence-adapter'; +import { CreateAlarmRuleCmd } from 'src/alarms/application/commands/create-alarm-rule.cmd'; +import { UpdateAlarmRuleCmd } from 'src/alarms/application/commands/update-alarm-rule.cmd'; +import { DeleteAlarmRuleCmd } from 'src/alarms/application/commands/delete-alarm-rule-cmd'; +import { GetAlarmRuleByIdCmd } from 'src/alarms/application/commands/get-alarm-rule-by-id-cmd'; +import { CheckAlarmRuleCmd } from 'src/alarms/application/commands/check-alarm-rule-cmd'; + describe('AlarmRulesPersistenceAdapter', () => { + let adapter: AlarmRulesPersistenceAdapter; + + const mockRepo = { + createAlarmRule: jest.fn(), + deleteAlarmRule: jest.fn(), + getAlarmRuleById: jest.fn(), + getAllAlarmRules: jest.fn(), + updateAlarmRule: jest.fn(), + checkAlarmRule: jest.fn(), + }; + + beforeEach(() => { + jest.clearAllMocks(); + adapter = new AlarmRulesPersistenceAdapter(mockRepo as any); + }); + it('should be defined', () => { - const repositoryMock = { - createAlarmRule: jest.fn(), - deleteAlarmRule: jest.fn(), - getAlarmRuleById: jest.fn(), - getAllAlarmRules: jest.fn(), - updateAlarmRule: jest.fn(), - checkAlarmRule: jest.fn(), - }; - - expect( - new AlarmRulesPersistenceAdapter(repositoryMock as any), - ).toBeDefined(); - }); -}); + expect(adapter).toBeDefined(); + }); + + it('should call repository.createAlarmRule with correct args', async () => { + const cmd = new CreateAlarmRuleCmd( + 'name', + 'dp1', + 'dev1', + 'plant1', + 1, + '>', + '10', + '10:00', + '18:00', + ); + + mockRepo.createAlarmRule.mockResolvedValue({ + id: 1, + plant_name: 'plant', + room_name: 'room', + device_name: 'device', + datapoint_name: 'dp', + name: 'alarm', + threshold_operator: '>', + threshold_value: '10', + priority: 1, + arming_time: '10:00', + dearming_time: '18:00', + is_armed: false, + }); + + const result = await adapter.createAlarmRule(cmd); + + expect(mockRepo.createAlarmRule).toHaveBeenCalledWith( + 'name', + 1, + 'dp1', + 'dev1', + 'plant1', + '>', + '10', + '10:00', + '18:00', + ); + + expect(result).toBeDefined(); + expect(result.getId()).toBe(1); + }); + + it('should propagate createAlarmRule errors', async () => { + const cmd = new CreateAlarmRuleCmd( + 'name', + 'dp1', + 'dev1', + 'plant1', + 1, + '>', + '10', + '10:00', + '18:00', + ); + + const error = new Error('DB error'); + mockRepo.createAlarmRule.mockRejectedValue(error); + + await expect(adapter.createAlarmRule(cmd)).rejects.toThrow(error); + }); + + it('should call repository.updateAlarmRule with correct args', async () => { + const cmd = new UpdateAlarmRuleCmd( + '1', + 'name', + 1, + '>', + '10', + '10:00', + '18:00', + true, + ); + + mockRepo.updateAlarmRule.mockResolvedValue({ + id: 1, + plant_name: 'plant', + room_name: 'room', + device_name: 'device', + datapoint_name: 'dp', + name: 'alarm', + threshold_operator: '>', + threshold_value: '10', + priority: 1, + arming_time: '10:00', + dearming_time: '18:00', + is_armed: true, + }); + + const result = await adapter.updateAlarmRule(cmd); + + expect(mockRepo.updateAlarmRule).toHaveBeenCalledWith( + '1', + 'name', + 1, + '>', + '10', + '10:00', + '18:00', + true, + ); + + expect(result).toBeDefined(); + expect(result.getId()).toBe(1); + }); + + it('should propagate updateAlarmRule errors', async () => { + const cmd = new UpdateAlarmRuleCmd( + '1', + 'name', + 1, + '>', + '10', + '10:00', + '18:00', + true, + ); + + const error = new Error('DB error'); + mockRepo.updateAlarmRule.mockRejectedValue(error); + + await expect(adapter.updateAlarmRule(cmd)).rejects.toThrow(error); + }); + + it('should call repository.deleteAlarmRule with correct args', async () => { + const cmd = new DeleteAlarmRuleCmd('1'); + + mockRepo.deleteAlarmRule.mockResolvedValue(undefined); + + await adapter.deleteAlarmRule(cmd); + + expect(mockRepo.deleteAlarmRule).toHaveBeenCalledWith('1'); + }); + + it('should propagate deleteAlarmRule errors', async () => { + const cmd = new DeleteAlarmRuleCmd('1'); + + const error = new Error('DB error'); + mockRepo.deleteAlarmRule.mockRejectedValue(error); + + await expect(adapter.deleteAlarmRule(cmd)).rejects.toThrow(error); + }); + + it('should call repository.getAlarmRuleById', async () => { + const cmd = new GetAlarmRuleByIdCmd('1'); + + mockRepo.getAlarmRuleById.mockResolvedValue({ + id: 1, + plant_name: 'plant', + room_name: 'room', + device_name: 'device', + datapoint_name: 'dp', + name: 'alarm', + threshold_operator: '>', + threshold_value: '10', + priority: 1, + arming_time: '10:00', + dearming_time: '18:00', + is_armed: false, + }); + + const result = await adapter.getAlarmRuleById(cmd); + + expect(mockRepo.getAlarmRuleById).toHaveBeenCalledWith('1'); + expect(result?.getId()).toBe(1); + }); + + it('should return null if alarm rule not found', async () => { + const cmd = new GetAlarmRuleByIdCmd('1'); + + mockRepo.getAlarmRuleById.mockResolvedValue(null); + + const result = await adapter.getAlarmRuleById(cmd); + + expect(result).toBeNull(); + }); + + it('should propagate getAlarmRuleById errors', async () => { + const cmd = new GetAlarmRuleByIdCmd('1'); + + const error = new Error('DB error'); + mockRepo.getAlarmRuleById.mockRejectedValue(error); + + await expect(adapter.getAlarmRuleById(cmd)).rejects.toThrow(error); + }); + + // ---------------- GET ALL ---------------- + it('should call repository.getAllAlarmRules', async () => { + mockRepo.getAllAlarmRules.mockResolvedValue([ + { + id: 1, + plant_name: 'plant', + room_name: 'room', + device_name: 'device', + datapoint_name: 'dp', + name: 'alarm', + threshold_operator: '>', + threshold_value: '10', + priority: 1, + arming_time: '10:00', + dearming_time: '18:00', + is_armed: false, + }, + ]); + + const result = await adapter.getAllAlarmRules(); + + expect(mockRepo.getAllAlarmRules).toHaveBeenCalled(); + expect(result.length).toBe(1); + }); + + it('should propagate getAllAlarmRules errors', async () => { + const error = new Error('DB error'); + + mockRepo.getAllAlarmRules.mockRejectedValue(error); + + await expect(adapter.getAllAlarmRules()).rejects.toThrow(error); + }); + + // ---------------- CHECK ---------------- + it('should call repository.checkAlarmRule', async () => { + const cmd = new CheckAlarmRuleCmd( + 'dp1', + '10', + new Date('2024-01-01T10:10:00Z'), + ); + + mockRepo.checkAlarmRule.mockResolvedValue({ + alarm_rule_id: 1, + ward_id: 2, + alarm_event_id: null, + }); + + const result = await adapter.checkAlarmRule(cmd); + + expect(mockRepo.checkAlarmRule).toHaveBeenCalled(); + expect(result?.alarmRuleId).toBe(1); + }); + + it('should return null if checkAlarmRule returns null', async () => { + const cmd = new CheckAlarmRuleCmd( + 'dp1', + '10', + new Date('2024-01-01T10:10:00Z'), + ); + + mockRepo.checkAlarmRule.mockResolvedValue(null); + + const result = await adapter.checkAlarmRule(cmd); + + expect(result).toBeNull(); + }); + + it('should propagate checkAlarmRule errors', async () => { + const cmd = new CheckAlarmRuleCmd( + 'dp1', + '10', + new Date('2024-01-01T10:10:00Z'), + ); + + const error = new Error('DB error'); + + mockRepo.checkAlarmRule.mockRejectedValue(error); + + await expect(adapter.checkAlarmRule(cmd)).rejects.toThrow(error); + }); + + it('should return null if ward_id is null', async () => { + const cmd = new CheckAlarmRuleCmd( + 'dp1', + '10', + new Date('2024-01-01T10:10:00Z'), + ); + + mockRepo.checkAlarmRule.mockResolvedValue({ + alarm_rule_id: 1, + ward_id: null, + alarm_event_id: null, + }); + + const result = await adapter.checkAlarmRule(cmd); + + expect(result).toBeNull(); + }); + + it('should normalize value "true" to "on"', async () => { + const cmd = new CheckAlarmRuleCmd( + 'dp1', + 'true', + new Date('2024-01-01T10:10:00Z'), + ); + + mockRepo.checkAlarmRule.mockResolvedValue({ + alarm_rule_id: 1, + ward_id: 2, + alarm_event_id: null, + }); + + await adapter.checkAlarmRule(cmd); + + expect(mockRepo.checkAlarmRule).toHaveBeenCalledWith( + 'dp1', + 'on', + expect.any(String), + ); + }); + + it('should normalize value "false" to "off"', async () => { + const cmd = new CheckAlarmRuleCmd( + 'dp1', + 'false', + new Date('2024-01-01T10:10:00Z'), + ); + + mockRepo.checkAlarmRule.mockResolvedValue({ + alarm_rule_id: 1, + ward_id: 2, + alarm_event_id: null, + }); + + await adapter.checkAlarmRule(cmd); + + expect(mockRepo.checkAlarmRule).toHaveBeenCalledWith( + 'dp1', + 'off', + expect.any(String), + ); + }); +}); \ No newline at end of file diff --git a/backend/test/unit/alarms/alarm-events.service.spec.ts b/backend/test/unit/alarms/alarm-events.service.spec.ts new file mode 100644 index 00000000..feeefd70 --- /dev/null +++ b/backend/test/unit/alarms/alarm-events.service.spec.ts @@ -0,0 +1,287 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { EventEmitter2 } from '@nestjs/event-emitter'; +import { AlarmEventsService } from '../../../src/alarms/application/services/alarm-events.service'; +import { AlarmPriority } from '../../../src/alarms/domain/models/alarm-priority.enum'; +import { + GET_ALL_ALARM_EVENTS_PORT, + GetAllAlarmEventsPort, +} from '../../../src/alarms/application/ports/out/get-all-alarm-events.port'; +import { + GET_ALL_MANAGED_ALARM_EVENTS_BY_USER_ID_PORT, + GetAllManagedAlarmEventsByUserIdPort, +} from '../../../src/alarms/application/ports/out/get-all-managed-alarm-events-by-user-id-port.interface'; +import { + GET_ALL_UNMANAGED_ALARM_EVENTS_BY_USER_ID_PORT, + GetAllUnmanagedAlarmEventsByUserIdPort, +} from '../../../src/alarms/application/ports/out/get-all-unmanaged-alarm-events-by-user-id-port.interface'; +import { + GET_ALARM_EVENT_BY_ID_PORT, + GetAlarmEventByIdPort, +} from '../../../src/alarms/application/ports/out/get-alarm-event-by-id-port.interface'; +import { + RESOLVE_ALARM_EVENT_PORT, + ResolveAlarmEventPort, +} from '../../../src/alarms/application/ports/out/resolve-alarm-event-port.interface'; +import { + GET_WARD_ALARM_EVENT_PORT, + GetWardAlarmEventPort, +} from '../../../src/alarms/application/ports/out/get-ward-alarm-event.port'; +import { GetAlarmEventByIdCmd } from '../../../src/alarms/application/commands/get-alarm-event-by-id-cmd'; +import { GetAllAlarmEventsCmd } from '../../../src/alarms/application/commands/get-all-alarm-events-cmd'; +import { GetAllManagedAlarmEventsByUserIdCmd } from '../../../src/alarms/application/commands/get-all-managed-alarm-events-by-user-id-cmd'; +import { GetAllUnmanagedAlarmEventsByUserIdCmd } from '../../../src/alarms/application/commands/get-all-unmanaged-alarm-events-by-user-id-cmd'; +import { ResolveAlarmEventCmd } from '../../../src/alarms/application/commands/resolve-alarm-event-cmd'; +import { AlarmEvent } from '../../../src/alarms/domain/models/alarm-event.model'; + +describe('AlarmEventsService', () => { + let service: AlarmEventsService; + let getAllAlarmEventsPort: jest.Mocked; + let getAllManagedPort: jest.Mocked; + let getAllUnmanagedPort: jest.Mocked; + let getAlarmEventByIdPort: jest.Mocked; + let resolveAlarmEventPort: jest.Mocked; + let getWardAlarmEventPort: jest.Mocked; + let eventEmitter: jest.Mocked; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + providers: [ + AlarmEventsService, + { + provide: EventEmitter2, + useValue: { + emit: jest.fn(), + }, + }, + { + provide: GET_ALL_ALARM_EVENTS_PORT, + useValue: { + getAllAlarmEvents: jest.fn(), + }, + }, + { + provide: GET_ALL_MANAGED_ALARM_EVENTS_BY_USER_ID_PORT, + useValue: { + getAllManagedAlarmEventsByUserId: jest.fn(), + }, + }, + { + provide: GET_ALL_UNMANAGED_ALARM_EVENTS_BY_USER_ID_PORT, + useValue: { + getAllUnmanagedAlarmEventsByUserId: jest.fn(), + }, + }, + { + provide: GET_ALARM_EVENT_BY_ID_PORT, + useValue: { + getAlarmEventById: jest.fn(), + }, + }, + { + provide: RESOLVE_ALARM_EVENT_PORT, + useValue: { + resolveAlarmEvent: jest.fn(), + }, + }, + { + provide: GET_WARD_ALARM_EVENT_PORT, + useValue: { + getWardAlarmEvent: jest.fn(), + }, + }, + ], + }).compile(); + + service = module.get(AlarmEventsService); + getAllAlarmEventsPort = module.get(GET_ALL_ALARM_EVENTS_PORT); + getAllManagedPort = module.get(GET_ALL_MANAGED_ALARM_EVENTS_BY_USER_ID_PORT); + getAllUnmanagedPort = module.get(GET_ALL_UNMANAGED_ALARM_EVENTS_BY_USER_ID_PORT); + getAlarmEventByIdPort = module.get(GET_ALARM_EVENT_BY_ID_PORT); + resolveAlarmEventPort = module.get(RESOLVE_ALARM_EVENT_PORT); + getWardAlarmEventPort = module.get(GET_WARD_ALARM_EVENT_PORT); + eventEmitter = module.get(EventEmitter2); + }); + + describe('getAlarmEventById', () => { + it('should return alarm event when found', async () => { + const mockEvent: any = { + id: 'event-001', + position: 'event-position-001', + alarmRuleId: 'rule-001', + alarmName: 'Temperature Alert', + priority: AlarmPriority.RED, + activationTime: new Date('2024-01-15T10:30:00Z'), + resolutionTime: null, + userId: null, + userUsername: null, + }; + const cmd = new GetAlarmEventByIdCmd('event-001'); + + getAlarmEventByIdPort.getAlarmEventById.mockResolvedValue(mockEvent); + + const result = await service.getAlarmEventById(cmd); + + expect(result).toEqual(mockEvent); + expect(getAlarmEventByIdPort.getAlarmEventById).toHaveBeenCalledWith(cmd); + }); + + it('should return null when alarm event not found', async () => { + const cmd = new GetAlarmEventByIdCmd('nonexistent-id'); + + getAlarmEventByIdPort.getAlarmEventById.mockResolvedValue(null); + + const result = await service.getAlarmEventById(cmd); + + expect(result).toBeNull(); + }); + }); + + describe('getAllAlarmEvents', () => { + it('should return all alarm events', async () => { + const mockEvents: any[] = [ + { + id: 'event-001', + position: 'event-position-001', + alarmRuleId: 'rule-001', + alarmName: 'Temperature Alert', + priority: AlarmPriority.RED, + activationTime: new Date('2024-01-15T10:30:00Z'), + resolutionTime: null, + userId: null, + userUsername: null, + }, + ]; + const cmd = new GetAllAlarmEventsCmd(); + + getAllAlarmEventsPort.getAllAlarmEvents.mockResolvedValue(mockEvents); + + const result = await service.getAllAlarmEvents(cmd); + + expect(result).toEqual(mockEvents); + expect(getAllAlarmEventsPort.getAllAlarmEvents).toHaveBeenCalledWith(cmd); + }); + + it('should return empty list when no events exist', async () => { + const cmd = new GetAllAlarmEventsCmd(); + + getAllAlarmEventsPort.getAllAlarmEvents.mockResolvedValue([]); + + const result = await service.getAllAlarmEvents(cmd); + + expect(result).toEqual([]); + }); + }); + + describe('getAllManagedAlarmEventsByUserId', () => { + it('should return managed alarm events for user', async () => { + const mockEvents: any[] = [ + { + id: 'event-001', + position: 'event-position-001', + alarmRuleId: 'rule-001', + alarmName: 'Temperature Alert', + priority: AlarmPriority.RED, + activationTime: new Date('2024-01-15T10:30:00Z'), + resolutionTime: new Date('2024-01-15T10:35:00Z'), + userId: 1, + userUsername: 'admin', + }, + ]; + const cmd = new GetAllManagedAlarmEventsByUserIdCmd(1); + + getAllManagedPort.getAllManagedAlarmEventsByUserId.mockResolvedValue(mockEvents); + + const result = await service.getAllManagedAlarmEventsByUserId(cmd); + + expect(result).toEqual(mockEvents); + expect(getAllManagedPort.getAllManagedAlarmEventsByUserId).toHaveBeenCalledWith(cmd); + }); + + it('should return empty list when user has no managed events', async () => { + const cmd = new GetAllManagedAlarmEventsByUserIdCmd(999); + + getAllManagedPort.getAllManagedAlarmEventsByUserId.mockResolvedValue([]); + + const result = await service.getAllManagedAlarmEventsByUserId(cmd); + + expect(result).toEqual([]); + }); + }); + + describe('getAllUnmanagedAlarmEventsByUserId', () => { + it('should return unmanaged alarm events for user', async () => { + const mockEvents: any[] = [ + { + id: 'event-002', + position: 'event-position-002', + alarmRuleId: 'rule-002', + alarmName: 'Humidity Alert', + priority: AlarmPriority.GREEN, + activationTime: new Date('2024-01-15T11:00:00Z'), + resolutionTime: null, + userId: null, + userUsername: null, + }, + ]; + const cmd = new GetAllUnmanagedAlarmEventsByUserIdCmd(1); + + getAllUnmanagedPort.getAllUnmanagedAlarmEventsByUserId.mockResolvedValue(mockEvents); + + const result = await service.getAllUnmanagedAlarmEventsByUserId(cmd); + + expect(result).toEqual(mockEvents); + expect(getAllUnmanagedPort.getAllUnmanagedAlarmEventsByUserId).toHaveBeenCalledWith(cmd); + }); + + it('should return empty list when user has no unmanaged events', async () => { + const cmd = new GetAllUnmanagedAlarmEventsByUserIdCmd(1); + + getAllUnmanagedPort.getAllUnmanagedAlarmEventsByUserId.mockResolvedValue([]); + + const result = await service.getAllUnmanagedAlarmEventsByUserId(cmd); + + expect(result).toEqual([]); + }); + }); + + describe('resolveAlarmEvent', () => { + it('should resolve alarm event and emit alarm.resolved event', async () => { + const cmd = new ResolveAlarmEventCmd('event-001', 1); + + resolveAlarmEventPort.resolveAlarmEvent.mockResolvedValue(undefined); + getWardAlarmEventPort.getWardAlarmEvent.mockResolvedValue(123); + + await service.resolveAlarmEvent(cmd); + + expect(resolveAlarmEventPort.resolveAlarmEvent).toHaveBeenCalledWith(cmd); + expect(getWardAlarmEventPort.getWardAlarmEvent).toHaveBeenCalledWith({ alarmId: cmd.alarmId }); + expect(eventEmitter.emit).toHaveBeenCalledWith('alarm.resolved', { + alarmEventId: 'event-001', + wardId: 123, + }); + }); + + it('should handle resolving multiple alarm events', async () => { + const cmd1 = new ResolveAlarmEventCmd('event-001', 1); + const cmd2 = new ResolveAlarmEventCmd('event-002', 2); + + resolveAlarmEventPort.resolveAlarmEvent.mockResolvedValue(undefined); + getWardAlarmEventPort.getWardAlarmEvent + .mockResolvedValueOnce(123) + .mockResolvedValueOnce(456); + + await service.resolveAlarmEvent(cmd1); + await service.resolveAlarmEvent(cmd2); + + expect(eventEmitter.emit).toHaveBeenCalledTimes(2); + expect(eventEmitter.emit).toHaveBeenNthCalledWith(1, 'alarm.resolved', { + alarmEventId: 'event-001', + wardId: 123, + }); + expect(eventEmitter.emit).toHaveBeenNthCalledWith(2, 'alarm.resolved', { + alarmEventId: 'event-002', + wardId: 456, + }); + }); + }); +}); diff --git a/backend/test/unit/alarms/alarm-rules.service.spec.ts b/backend/test/unit/alarms/alarm-rules.service.spec.ts new file mode 100644 index 00000000..cf44c7db --- /dev/null +++ b/backend/test/unit/alarms/alarm-rules.service.spec.ts @@ -0,0 +1,326 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { EventEmitter2 } from '@nestjs/event-emitter'; +import { AlarmRulesService } from '../../../src/alarms/application/services/alarm-rules.service'; +import { AlarmPriority } from '../../../src/alarms/domain/models/alarm-priority.enum'; +import { + GET_ALL_ALARM_RULES_PORT, + GetAllAlarmRulesPort, +} from '../../../src/alarms/application/ports/out/get-all-alarm-rules.port'; +import { + GET_ALARM_RULE_BY_ID_PORT, + GetAlarmRuleByIdPort, +} from '../../../src/alarms/application/ports/out/get-alarm-rule-by-id.port'; +import { + CREATE_ALARM_RULE_PORT, + CreateAlarmRulePort, +} from '../../../src/alarms/application/ports/out/create-alarm-rule.port'; +import { + UPDATE_ALARM_RULE_PORT, + UpdateAlarmRulePort, +} from '../../../src/alarms/application/ports/out/update-alarm-rule.port'; +import { + DELETE_ALARM_RULE_PORT, + DeleteAlarmRulePort, +} from '../../../src/alarms/application/ports/out/delete-alarm-rule.port'; +import { + CHECK_ALARM_RULE_PORT, + CheckAlarmRulePort, +} from '../../../src/alarms/application/ports/out/check-alarm-rule-port.interface'; +import { + CREATE_ALARM_EVENT_PORT, + CreateAlarmEventPort, +} from '../../../src/alarms/application/ports/out/create-alarm-event-port.interface'; +import { CreateAlarmRuleCmd } from '../../../src/alarms/application/commands/create-alarm-rule.cmd'; +import { GetAlarmRuleByIdCmd } from '../../../src/alarms/application/commands/get-alarm-rule-by-id-cmd'; +import { UpdateAlarmRuleCmd } from '../../../src/alarms/application/commands/update-alarm-rule.cmd'; +import { DeleteAlarmRuleCmd } from '../../../src/alarms/application/commands/delete-alarm-rule-cmd'; +import { CheckAlarmRuleCmd } from '../../../src/alarms/application/commands/check-alarm-rule-cmd'; +import { CheckAlarm } from '../../../src/alarms/domain/models/check-alarm'; + +describe('AlarmRulesService', () => { + let service: AlarmRulesService; + let getAllAlarmRulesPort: jest.Mocked; + let getAlarmRuleByIdPort: jest.Mocked; + let createAlarmRulePort: jest.Mocked; + let updateAlarmRulePort: jest.Mocked; + let deleteAlarmRulePort: jest.Mocked; + let checkAlarmRulePort: jest.Mocked; + let createAlarmEventPort: jest.Mocked; + let eventEmitter: jest.Mocked; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + providers: [ + AlarmRulesService, + { + provide: EventEmitter2, + useValue: { + emit: jest.fn(), + }, + }, + { + provide: GET_ALL_ALARM_RULES_PORT, + useValue: { + getAllAlarmRules: jest.fn(), + }, + }, + { + provide: GET_ALARM_RULE_BY_ID_PORT, + useValue: { + getAlarmRuleById: jest.fn(), + }, + }, + { + provide: CREATE_ALARM_RULE_PORT, + useValue: { + createAlarmRule: jest.fn(), + }, + }, + { + provide: UPDATE_ALARM_RULE_PORT, + useValue: { + updateAlarmRule: jest.fn(), + }, + }, + { + provide: DELETE_ALARM_RULE_PORT, + useValue: { + deleteAlarmRule: jest.fn(), + }, + }, + { + provide: CHECK_ALARM_RULE_PORT, + useValue: { + checkAlarmRule: jest.fn(), + }, + }, + { + provide: CREATE_ALARM_EVENT_PORT, + useValue: { + createAlarmEvent: jest.fn(), + }, + }, + ], + }).compile(); + + service = module.get(AlarmRulesService); + getAllAlarmRulesPort = module.get(GET_ALL_ALARM_RULES_PORT); + getAlarmRuleByIdPort = module.get(GET_ALARM_RULE_BY_ID_PORT); + createAlarmRulePort = module.get(CREATE_ALARM_RULE_PORT); + updateAlarmRulePort = module.get(UPDATE_ALARM_RULE_PORT); + deleteAlarmRulePort = module.get(DELETE_ALARM_RULE_PORT); + checkAlarmRulePort = module.get(CHECK_ALARM_RULE_PORT); + createAlarmEventPort = module.get(CREATE_ALARM_EVENT_PORT); + eventEmitter = module.get(EventEmitter2); + }); + + describe('getAllAlarmRules', () => { + it('should return all alarm rules', async () => { + const mockRules: any[] = [ + { + id: 'rule-001', + position: 'sensor-room1-device1', + name: 'Temperature Alert', + thresholdOperator: '>', + thresholdValue: '28', + priority: AlarmPriority.RED, + armingTime: new Date('2024-01-01T08:00:00Z'), + dearmingTime: new Date('2024-01-01T17:00:00Z'), + isArmed: true, + }, + ]; + + getAllAlarmRulesPort.getAllAlarmRules.mockResolvedValue(mockRules); + + const result = await service.getAllAlarmRules(); + + expect(result).toEqual(mockRules); + expect(getAllAlarmRulesPort.getAllAlarmRules).toHaveBeenCalled(); + }); + + it('should return empty list when no rules exist', async () => { + getAllAlarmRulesPort.getAllAlarmRules.mockResolvedValue([]); + + const result = await service.getAllAlarmRules(); + + expect(result).toEqual([]); + }); + }); + + describe('getAlarmRuleById', () => { + it('should return alarm rule when found', async () => { + const mockRule: any = { + id: 'rule-001', + position: 'sensor-room1-device1', + name: 'Temperature Alert', + thresholdOperator: '>', + thresholdValue: '28', + priority: AlarmPriority.RED, + armingTime: new Date('2024-01-01T08:00:00Z'), + dearmingTime: new Date('2024-01-01T17:00:00Z'), + isArmed: true, + }; + const cmd = new GetAlarmRuleByIdCmd('rule-001'); + + getAlarmRuleByIdPort.getAlarmRuleById.mockResolvedValue(mockRule); + + const result = await service.getAlarmRuleById(cmd); + + expect(result).toEqual(mockRule); + expect(getAlarmRuleByIdPort.getAlarmRuleById).toHaveBeenCalledWith(cmd); + }); + + it('should return null when alarm rule not found', async () => { + const cmd = new GetAlarmRuleByIdCmd('nonexistent-id'); + + getAlarmRuleByIdPort.getAlarmRuleById.mockResolvedValue(null); + + const result = await service.getAlarmRuleById(cmd); + + expect(result).toBeNull(); + }); + }); + + describe('createAlarmRule', () => { + it('should create and return new alarm rule', async () => { + const cmd = new CreateAlarmRuleCmd( + 'Temperature Alert', + 'tempSensor1', + 'device-001', + 'plant-001', + AlarmPriority.RED, + '>', + '28', + '08:00', + '17:00', + ); + const mockCreatedRule: any = { + id: 'rule-001', + position: 'sensor-room1-device1', + name: cmd.name, + thresholdOperator: cmd.thresholdOperator, + thresholdValue: cmd.thresholdValue, + priority: AlarmPriority.RED, + armingTime: cmd.armingTime, + dearmingTime: cmd.dearmingTime, + isArmed: true, + }; + + createAlarmRulePort.createAlarmRule.mockResolvedValue(mockCreatedRule); + + const result = await service.createAlarmRule(cmd); + + expect(result).toEqual(mockCreatedRule); + expect(createAlarmRulePort.createAlarmRule).toHaveBeenCalledWith(cmd); + }); + }); + + describe('updateAlarmRule', () => { + it('should update and return modified alarm rule', async () => { + const cmd = new UpdateAlarmRuleCmd( + 'rule-001', + 'Updated Alert', + AlarmPriority.GREEN, + '<', + '15', + '08:00', + '17:00', + false, + ); + const mockUpdatedRule: any = { + id: 'rule-001', + position: 'sensor-room1-device1', + name: 'Updated Alert', + thresholdOperator: '<', + thresholdValue: '15', + priority: AlarmPriority.GREEN, + armingTime: new Date('2024-01-01T08:00:00Z'), + dearmingTime: new Date('2024-01-01T17:00:00Z'), + isArmed: false, + }; + + updateAlarmRulePort.updateAlarmRule.mockResolvedValue(mockUpdatedRule); + + const result = await service.updateAlarmRule(cmd); + + expect(result).toEqual(mockUpdatedRule); + expect(updateAlarmRulePort.updateAlarmRule).toHaveBeenCalledWith(cmd); + }); + }); + + describe('deleteAlarmRule', () => { + it('should delete alarm rule', async () => { + const cmd = new DeleteAlarmRuleCmd('rule-001'); + + deleteAlarmRulePort.deleteAlarmRule.mockResolvedValue(undefined); + + await service.deleteAlarmRule(cmd); + + expect(deleteAlarmRulePort.deleteAlarmRule).toHaveBeenCalledWith(cmd); + }); + }); + + describe('checkAlarmRule', () => { + it('should emit alarm.activated event when rule matches', async () => { + const cmd = new CheckAlarmRuleCmd( + 'sensor001', + '30', + new Date('2024-01-15T10:30:00Z'), + ); + const checkAlarm = new CheckAlarm('rule-001', 123, 'event-001'); + + checkAlarmRulePort.checkAlarmRule.mockResolvedValue(checkAlarm); + createAlarmEventPort.createAlarmEvent.mockResolvedValue('event-001'); + + await service.checkAlarmRule(cmd); + + expect(checkAlarmRulePort.checkAlarmRule).toHaveBeenCalledWith(cmd); + expect(createAlarmEventPort.createAlarmEvent).toHaveBeenCalled(); + expect(eventEmitter.emit).toHaveBeenCalledWith('alarm.activated', expect.any(Object)); + }); + + it('should not emit event when no rule matches', async () => { + const cmd = new CheckAlarmRuleCmd( + 'sensor001', + '30', + new Date('2024-01-15T10:30:00Z'), + ); + + checkAlarmRulePort.checkAlarmRule.mockResolvedValue(null); + + await service.checkAlarmRule(cmd); + + expect(checkAlarmRulePort.checkAlarmRule).toHaveBeenCalledWith(cmd); + expect(createAlarmEventPort.createAlarmEvent).not.toHaveBeenCalled(); + expect(eventEmitter.emit).not.toHaveBeenCalled(); + }); + + it('should handle multiple alarm checks with different results', async () => { + // First check: match found + const cmd1 = new CheckAlarmRuleCmd( + 'sensor001', + '30', + new Date('2024-01-15T10:30:00Z'), + ); + const checkAlarm1 = new CheckAlarm('rule-001', 123, 'event-001'); + checkAlarmRulePort.checkAlarmRule.mockResolvedValueOnce(checkAlarm1); + createAlarmEventPort.createAlarmEvent.mockResolvedValueOnce('event-001'); + + await service.checkAlarmRule(cmd1); + + expect(eventEmitter.emit).toHaveBeenCalledTimes(1); + + // Second check: no match + const cmd2 = new CheckAlarmRuleCmd( + 'sensor002', + '20', + new Date('2024-01-15T10:35:00Z'), + ); + checkAlarmRulePort.checkAlarmRule.mockResolvedValueOnce(null); + + await service.checkAlarmRule(cmd2); + + expect(eventEmitter.emit).toHaveBeenCalledTimes(1); // Still only 1 call + }); + }); +}); diff --git a/backend/test/unit/alarms/application/commands/create-alarm-rule-cmd.spec.ts b/backend/test/unit/alarms/application/commands/create-alarm-rule-cmd.spec.ts new file mode 100644 index 00000000..99999f3f --- /dev/null +++ b/backend/test/unit/alarms/application/commands/create-alarm-rule-cmd.spec.ts @@ -0,0 +1,9 @@ +import { CreateAlarmRuleCmd } from "src/alarms/application/commands/create-alarm-rule.cmd"; +import { AlarmPriority } from "src/alarms/domain/models/alarm-priority.enum"; + + +describe('CreateAlarmRuleCmd', () => { + it('should be defined', () => { + expect(new CreateAlarmRuleCmd('', '', '', '', AlarmPriority.WHITE, '', '', '', '')).toBeDefined(); + }); +}); diff --git a/backend/test/unit/alarms/application/commands/get-ward-alarm-event-cmd.spec.ts b/backend/test/unit/alarms/application/commands/get-ward-alarm-event-cmd.spec.ts new file mode 100644 index 00000000..11999fc8 --- /dev/null +++ b/backend/test/unit/alarms/application/commands/get-ward-alarm-event-cmd.spec.ts @@ -0,0 +1,7 @@ +import { GetWardAlarmEventCmd } from "src/alarms/application/commands/get-ward-alarm-event-cmd"; + +describe('GetAllUnmanagedAlarmEventsByUserIdCmd', () => { + it('should be defined', () => { + expect(new GetWardAlarmEventCmd('')).toBeDefined(); + }); +}); diff --git a/backend/test/unit/alarms/application/commands/trigger-active-alarm.cmd.spec.ts b/backend/test/unit/alarms/application/commands/trigger-active-alarm.cmd.spec.ts deleted file mode 100644 index a08dca0e..00000000 --- a/backend/test/unit/alarms/application/commands/trigger-active-alarm.cmd.spec.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { TriggerActiveAlarmCmd } from 'src/alarms/application/commands/trigger-active-alarm.cmd'; - -describe('TriggerActiveAlarmCmd', () => { - it('mantiene i parametri passati al costruttore', () => { - const cmd = new TriggerActiveAlarmCmd('alarm-1', 'Allarme caduta', 'panic-button'); - - expect(cmd.alarmId).toBe('alarm-1'); - expect(cmd.alarmName).toBe('Allarme caduta'); - expect(cmd.dangerSignal).toBe('panic-button'); - }); -}); diff --git a/backend/test/unit/alarms/application/commands/update-alarm-rule-cmd.spec.ts b/backend/test/unit/alarms/application/commands/update-alarm-rule-cmd.spec.ts new file mode 100644 index 00000000..31a8019f --- /dev/null +++ b/backend/test/unit/alarms/application/commands/update-alarm-rule-cmd.spec.ts @@ -0,0 +1,9 @@ +import { UpdateAlarmRuleCmd } from "src/alarms/application/commands/update-alarm-rule.cmd"; +import { AlarmPriority } from "src/alarms/domain/models/alarm-priority.enum"; + + +describe('CreateAlarmRuleCmd', () => { + it('should be defined', () => { + expect(new UpdateAlarmRuleCmd('','',AlarmPriority.WHITE, '', '', '', '', true)).toBeDefined(); + }); +}); diff --git a/backend/test/unit/alarms/application/ports/in/trigger-active-alarm.use-case.spec.ts b/backend/test/unit/alarms/application/ports/in/trigger-active-alarm.use-case.spec.ts deleted file mode 100644 index 7548520d..00000000 --- a/backend/test/unit/alarms/application/ports/in/trigger-active-alarm.use-case.spec.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { - TRIGGER_ACTIVE_ALARM_USE_CASE, - TriggerActiveAlarmUseCase, -} from 'src/alarms/application/ports/in/trigger-active-alarm.use-case'; -import { TriggerActiveAlarmCmd } from 'src/alarms/application/commands/trigger-active-alarm.cmd'; - -describe('TriggerActiveAlarmUseCase token', () => { - it('espone il token DI atteso', () => { - expect(TRIGGER_ACTIVE_ALARM_USE_CASE).toBe('TRIGGER_ACTIVE_ALARM_USE_CASE'); - }); - - it('definisce la firma triggerActiveAlarm', async () => { - const mockUseCase: TriggerActiveAlarmUseCase = { - triggerActiveAlarm: jest.fn().mockResolvedValue(undefined), - }; - const cmd = new TriggerActiveAlarmCmd('alarm-77', 'Allarme test', 'sensor'); - - await expect(mockUseCase.triggerActiveAlarm(cmd)).resolves.toBeUndefined(); - expect(mockUseCase.triggerActiveAlarm).toHaveBeenCalledWith(cmd); - }); -}); diff --git a/backend/test/unit/alarms/application/services/alarm-events.service.spec.ts b/backend/test/unit/alarms/application/services/alarm-events.service.spec.ts index 47b4ea6b..a98e386e 100644 --- a/backend/test/unit/alarms/application/services/alarm-events.service.spec.ts +++ b/backend/test/unit/alarms/application/services/alarm-events.service.spec.ts @@ -1,7 +1,448 @@ -import { AlarmEventsService } from 'src/alarms/application/services/alarm-events.service'; +import { EventEmitter2 } from "@nestjs/event-emitter"; +import { TestingModule, Test } from "@nestjs/testing"; +import { GetAlarmEventByIdCmd } from "src/alarms/application/commands/get-alarm-event-by-id-cmd"; +import { GetAllAlarmEventsCmd } from "src/alarms/application/commands/get-all-alarm-events-cmd"; +import { GetAllManagedAlarmEventsByUserIdCmd } from "src/alarms/application/commands/get-all-managed-alarm-events-by-user-id-cmd"; +import { GetAllUnmanagedAlarmEventsByUserIdCmd } from "src/alarms/application/commands/get-all-unmanaged-alarm-events-by-user-id-cmd"; +import { ResolveAlarmEventCmd } from "src/alarms/application/commands/resolve-alarm-event-cmd"; +import { GetAlarmEventByIdPort, GET_ALARM_EVENT_BY_ID_PORT } from "src/alarms/application/ports/out/get-alarm-event-by-id-port.interface"; +import { GetAllAlarmEventsPort, GET_ALL_ALARM_EVENTS_PORT } from "src/alarms/application/ports/out/get-all-alarm-events.port"; +import { GetAllManagedAlarmEventsByUserIdPort, GET_ALL_MANAGED_ALARM_EVENTS_BY_USER_ID_PORT } from "src/alarms/application/ports/out/get-all-managed-alarm-events-by-user-id-port.interface"; +import { GetAllUnmanagedAlarmEventsByUserIdPort, GET_ALL_UNMANAGED_ALARM_EVENTS_BY_USER_ID_PORT } from "src/alarms/application/ports/out/get-all-unmanaged-alarm-events-by-user-id-port.interface"; +import { GetWardAlarmEventPort, GET_WARD_ALARM_EVENT_PORT } from "src/alarms/application/ports/out/get-ward-alarm-event.port"; +import { ResolveAlarmEventPort, RESOLVE_ALARM_EVENT_PORT } from "src/alarms/application/ports/out/resolve-alarm-event-port.interface"; +import { AlarmEventsService } from "src/alarms/application/services/alarm-events.service"; +import { AlarmEvent } from "src/alarms/domain/models/alarm-event.model"; +import { AlarmPriority } from "src/alarms/domain/models/alarm-priority.enum"; + describe('AlarmEventsService', () => { - it('should be defined', () => { - expect(AlarmEventsService).toBeDefined(); + let service: AlarmEventsService; + let mockGetAllManagedAlarmEventsByUserIdPort: jest.Mocked< + GetAllManagedAlarmEventsByUserIdPort + >; + let mockGetAllUnmanagedAlarmEventsByUserIdPort: jest.Mocked< + GetAllUnmanagedAlarmEventsByUserIdPort + >; + let mockGetAlarmEventByIdPort: jest.Mocked; + let mockGetAllAlarmEventsPort: jest.Mocked; + let mockResolveAlarmEventPort: jest.Mocked; + let mockGetWardAlarmEventPort: jest.Mocked; + let mockEventEmitter: jest.Mocked; + + beforeEach(async () => { + mockGetAllManagedAlarmEventsByUserIdPort = { + getAllManagedAlarmEventsByUserId: jest.fn(), + }; + + mockGetAllUnmanagedAlarmEventsByUserIdPort = { + getAllUnmanagedAlarmEventsByUserId: jest.fn(), + }; + + mockGetAlarmEventByIdPort = { + getAlarmEventById: jest.fn(), + }; + + mockGetAllAlarmEventsPort = { + getAllAlarmEvents: jest.fn(), + }; + + mockResolveAlarmEventPort = { + resolveAlarmEvent: jest.fn(), + }; + + mockGetWardAlarmEventPort = { + getWardAlarmEvent: jest.fn(), + }; + + mockEventEmitter = { + emit: jest.fn(), + } as any; + + const module: TestingModule = await Test.createTestingModule({ + providers: [ + AlarmEventsService, + { + provide: GET_ALL_MANAGED_ALARM_EVENTS_BY_USER_ID_PORT, + useValue: mockGetAllManagedAlarmEventsByUserIdPort, + }, + { + provide: GET_ALL_UNMANAGED_ALARM_EVENTS_BY_USER_ID_PORT, + useValue: mockGetAllUnmanagedAlarmEventsByUserIdPort, + }, + { + provide: GET_ALARM_EVENT_BY_ID_PORT, + useValue: mockGetAlarmEventByIdPort, + }, + { + provide: GET_ALL_ALARM_EVENTS_PORT, + useValue: mockGetAllAlarmEventsPort, + }, + { + provide: RESOLVE_ALARM_EVENT_PORT, + useValue: mockResolveAlarmEventPort, + }, + { + provide: GET_WARD_ALARM_EVENT_PORT, + useValue: mockGetWardAlarmEventPort, + }, + { + provide: EventEmitter2, + useValue: mockEventEmitter, + }, + ], + }).compile(); + + service = module.get(AlarmEventsService); + }); + + describe('getAlarmEventById', () => { + it('should return alarm event by id', async () => { + const mockEvent = new AlarmEvent( + 'event-1', + 'Ward A - Room 101', + 'rule-1', + 'High Temperature', + AlarmPriority.WHITE, + new Date('2026-04-12T10:00:00Z'), + new Date('2026-04-12T11:00:00Z'), + 5, + 'nurse_john', + ); + const cmd = new GetAlarmEventByIdCmd('event-1'); + + mockGetAlarmEventByIdPort.getAlarmEventById.mockResolvedValue(mockEvent); + + const result = await service.getAlarmEventById(cmd); + + expect(result).toEqual(mockEvent); + expect(mockGetAlarmEventByIdPort.getAlarmEventById).toHaveBeenCalledWith( + cmd, + ); + }); + + it('should return null when event not found', async () => { + const cmd = new GetAlarmEventByIdCmd('non-existent'); + + mockGetAlarmEventByIdPort.getAlarmEventById.mockResolvedValue(null); + + const result = await service.getAlarmEventById(cmd); + + expect(result).toBeNull(); + }); + + it('should propagate port errors', async () => { + const cmd = new GetAlarmEventByIdCmd('event-1'); + const error = new Error('Database error'); + + mockGetAlarmEventByIdPort.getAlarmEventById.mockRejectedValue(error); + + await expect(service.getAlarmEventById(cmd)).rejects.toThrow(error); + }); + }); + + describe('getAllAlarmEvents', () => { + it('should return all alarm events', async () => { + const mockEvents = [ + new AlarmEvent( + 'event-1', + 'Ward A', + 'rule-1', + 'High Temperature', + AlarmPriority.WHITE, + new Date('2026-04-12T10:00:00Z'), + new Date('2026-04-12T11:00:00Z'), + 5, + 'nurse_john', + ), + new AlarmEvent( + 'event-2', + 'Ward B', + 'rule-2', + 'Low O2', + AlarmPriority.WHITE, + new Date('2026-04-12T09:00:00Z'), + null, + null, + null, + ), + ]; + const cmd = new GetAllAlarmEventsCmd(10, 0); + + mockGetAllAlarmEventsPort.getAllAlarmEvents.mockResolvedValue( + mockEvents, + ); + + const result = await service.getAllAlarmEvents(cmd); + + expect(result).toEqual(mockEvents); + expect(mockGetAllAlarmEventsPort.getAllAlarmEvents).toHaveBeenCalledWith( + cmd, + ); + }); + + it('should return empty array when no events exist', async () => { + const cmd = new GetAllAlarmEventsCmd(10, 0); + + mockGetAllAlarmEventsPort.getAllAlarmEvents.mockResolvedValue([]); + + const result = await service.getAllAlarmEvents(cmd); + + expect(result).toEqual([]); + }); + + it('should propagate port errors', async () => { + const cmd = new GetAllAlarmEventsCmd(10, 0); + const error = new Error('Database error'); + + mockGetAllAlarmEventsPort.getAllAlarmEvents.mockRejectedValue(error); + + await expect(service.getAllAlarmEvents(cmd)).rejects.toThrow(error); + }); + }); + + describe('getAllManagedAlarmEventsByUserId', () => { + it('should return managed alarm events by user id', async () => { + const mockEvents = [ + new AlarmEvent( + 'event-1', + 'Ward A', + 'rule-1', + 'High Temperature', + AlarmPriority.WHITE, + new Date('2026-04-12T10:00:00Z'), + new Date('2026-04-12T11:00:00Z'), + 5, + 'nurse_john', + ), + ]; + const cmd = new GetAllManagedAlarmEventsByUserIdCmd(5, 10, 0); + + mockGetAllManagedAlarmEventsByUserIdPort.getAllManagedAlarmEventsByUserId.mockResolvedValue( + mockEvents, + ); + + const result = await service.getAllManagedAlarmEventsByUserId(cmd); + + expect(result).toEqual(mockEvents); + expect( + mockGetAllManagedAlarmEventsByUserIdPort.getAllManagedAlarmEventsByUserId, + ).toHaveBeenCalledWith(cmd); + }); + + it('should return empty array when user has no managed events', async () => { + const cmd = new GetAllManagedAlarmEventsByUserIdCmd(999, 10, 0); + + mockGetAllManagedAlarmEventsByUserIdPort.getAllManagedAlarmEventsByUserId.mockResolvedValue( + [], + ); + + const result = await service.getAllManagedAlarmEventsByUserId(cmd); + + expect(result).toEqual([]); + }); + + it('should propagate port errors', async () => { + const cmd = new GetAllManagedAlarmEventsByUserIdCmd(5, 10, 0); + const error = new Error('Database error'); + + mockGetAllManagedAlarmEventsByUserIdPort.getAllManagedAlarmEventsByUserId.mockRejectedValue( + error, + ); + + await expect( + service.getAllManagedAlarmEventsByUserId(cmd), + ).rejects.toThrow(error); + }); + }); + + describe('getAllUnmanagedAlarmEventsByUserId', () => { + it('should return unmanaged alarm events by user id', async () => { + const mockEvents = [ + new AlarmEvent( + 'event-2', + 'Ward B', + 'rule-2', + 'Low O2', + AlarmPriority.WHITE, + new Date('2026-04-12T09:00:00Z'), + null, + null, + null, + ), + ]; + const cmd = new GetAllUnmanagedAlarmEventsByUserIdCmd(5, 10, 0); + + mockGetAllUnmanagedAlarmEventsByUserIdPort.getAllUnmanagedAlarmEventsByUserId.mockResolvedValue( + mockEvents, + ); + + const result = await service.getAllUnmanagedAlarmEventsByUserId(cmd); + + expect(result).toEqual(mockEvents); + expect( + mockGetAllUnmanagedAlarmEventsByUserIdPort.getAllUnmanagedAlarmEventsByUserId, + ).toHaveBeenCalledWith(cmd); + }); + + it('should return empty array when user has no unmanaged events', async () => { + const cmd = new GetAllUnmanagedAlarmEventsByUserIdCmd(999, 10, 0); + + mockGetAllUnmanagedAlarmEventsByUserIdPort.getAllUnmanagedAlarmEventsByUserId.mockResolvedValue( + [], + ); + + const result = await service.getAllUnmanagedAlarmEventsByUserId(cmd); + + expect(result).toEqual([]); + }); + + it('should propagate port errors', async () => { + const cmd = new GetAllUnmanagedAlarmEventsByUserIdCmd(5, 10, 0); + const error = new Error('Database error'); + + mockGetAllUnmanagedAlarmEventsByUserIdPort.getAllUnmanagedAlarmEventsByUserId.mockRejectedValue( + error, + ); + + await expect( + service.getAllUnmanagedAlarmEventsByUserId(cmd), + ).rejects.toThrow(error); + }); + }); + + describe('resolveAlarmEvent', () => { + it('should resolve alarm event and emit event', async () => { + const cmd = new ResolveAlarmEventCmd('event-1', 5); + + mockResolveAlarmEventPort.resolveAlarmEvent.mockResolvedValue(undefined); + mockGetWardAlarmEventPort.getWardAlarmEvent.mockResolvedValue(5); + + await service.resolveAlarmEvent(cmd); + + expect(mockResolveAlarmEventPort.resolveAlarmEvent).toHaveBeenCalledWith( + cmd, + ); + expect(mockGetWardAlarmEventPort.getWardAlarmEvent).toHaveBeenCalledWith({ + alarmId: 'event-1', + }); + expect(mockEventEmitter.emit).toHaveBeenCalledWith('alarm.resolved', { + alarmEventId: 'event-1', + wardId: 5, + }); + }); + + it('should emit alarm.resolved event with correct ward id', async () => { + const cmd = new ResolveAlarmEventCmd('event-2', 10); + + mockResolveAlarmEventPort.resolveAlarmEvent.mockResolvedValue(undefined); + mockGetWardAlarmEventPort.getWardAlarmEvent.mockResolvedValue(10); + + await service.resolveAlarmEvent(cmd); + + expect(mockEventEmitter.emit).toHaveBeenCalledWith('alarm.resolved', { + alarmEventId: 'event-2', + wardId: 10, + }); + }); + + it('should propagate resolveAlarmEvent port errors', async () => { + const cmd = new ResolveAlarmEventCmd('event-1', 5); + const error = new Error('Database error'); + + mockResolveAlarmEventPort.resolveAlarmEvent.mockRejectedValue(error); + + await expect(service.resolveAlarmEvent(cmd)).rejects.toThrow(error); + expect(mockEventEmitter.emit).not.toHaveBeenCalled(); + }); + + it('should propagate getWardAlarmEvent port errors', async () => { + const cmd = new ResolveAlarmEventCmd('event-1', 5); + const error = new Error('Database error'); + + mockResolveAlarmEventPort.resolveAlarmEvent.mockResolvedValue(undefined); + mockGetWardAlarmEventPort.getWardAlarmEvent.mockRejectedValue(error); + + await expect(service.resolveAlarmEvent(cmd)).rejects.toThrow(error); + }); + + it('should call ports in correct order', async () => { + const cmd = new ResolveAlarmEventCmd('event-1', 5); + const callOrder: string[] = []; + + mockResolveAlarmEventPort.resolveAlarmEvent.mockImplementation( + async () => { + callOrder.push('resolveAlarmEvent'); + }, + ); + mockGetWardAlarmEventPort.getWardAlarmEvent.mockImplementation( + async () => { + callOrder.push('getWardAlarmEvent'); + return 5; + }, + ); + + await service.resolveAlarmEvent(cmd); + + expect(callOrder).toEqual(['resolveAlarmEvent', 'getWardAlarmEvent']); + }); + }); + + describe('integration scenarios', () => { + it('should handle multiple sequential operations', async () => { + const event = new AlarmEvent( + 'event-1', + 'Ward A', + 'rule-1', + 'High Temperature', + AlarmPriority.WHITE, + new Date('2026-04-12T10:00:00Z'), + null, + null, + null, + ); + + mockGetAlarmEventByIdPort.getAlarmEventById.mockResolvedValue(event); + mockGetAllAlarmEventsPort.getAllAlarmEvents.mockResolvedValue([event]); + + const byId = await service.getAlarmEventById( + new GetAlarmEventByIdCmd('event-1'), + ); + const all = await service.getAllAlarmEvents(new GetAllAlarmEventsCmd(10, 0)); + + expect(byId).toEqual(event); + expect(all).toContain(event); + }); + + it('should handle unresolved and resolved events', async () => { + const unresolvedEvent = new AlarmEvent( + 'event-1', + 'Ward A', + 'rule-1', + 'High Temperature', + AlarmPriority.WHITE, + new Date('2026-04-12T10:00:00Z'), + null, + null, + null, + ); + + const resolvedEvent = new AlarmEvent( + 'event-2', + 'Ward B', + 'rule-2', + 'Low O2', + AlarmPriority.WHITE, + new Date('2026-04-12T09:00:00Z'), + new Date('2026-04-12T12:00:00Z'), + 5, + 'nurse_john', + ); + + expect(unresolvedEvent.getResolutionTime()).toBeNull(); + expect(unresolvedEvent.getUserId()).toBeNull(); + expect(resolvedEvent.getResolutionTime()).not.toBeNull(); + expect(resolvedEvent.getUserId()).not.toBeNull(); + }); }); -}); +}); \ No newline at end of file diff --git a/backend/test/unit/alarms/application/services/alarm-rules.service.spec.ts b/backend/test/unit/alarms/application/services/alarm-rules.service.spec.ts new file mode 100644 index 00000000..12293696 --- /dev/null +++ b/backend/test/unit/alarms/application/services/alarm-rules.service.spec.ts @@ -0,0 +1,452 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { AlarmRulesService } from 'src/alarms/application/services/alarm-rules.service'; +import { GetAllAlarmRulesPort } from 'src/alarms/application/ports/out/get-all-alarm-rules.port'; +import { GetAlarmRuleByIdPort } from 'src/alarms/application/ports/out/get-alarm-rule-by-id.port'; +import { CreateAlarmRulePort } from 'src/alarms/application/ports/out/create-alarm-rule.port'; +import { UpdateAlarmRulePort } from 'src/alarms/application/ports/out/update-alarm-rule.port'; +import { DeleteAlarmRulePort } from 'src/alarms/application/ports/out/delete-alarm-rule.port'; +import { CheckAlarmRulePort } from 'src/alarms/application/ports/out/check-alarm-rule-port.interface'; +import { CreateAlarmEventPort } from 'src/alarms/application/ports/out/create-alarm-event-port.interface'; +import { EventEmitter2 } from '@nestjs/event-emitter'; +import { AlarmRule } from 'src/alarms/domain/models/alarm-rule.model'; +import { AlarmPriority } from 'src/alarms/domain/models/alarm-priority.enum'; +import { CreateAlarmRuleCmd } from 'src/alarms/application/commands/create-alarm-rule.cmd'; +import { GetAlarmRuleByIdCmd } from 'src/alarms/application/commands/get-alarm-rule-by-id-cmd'; +import { UpdateAlarmRuleCmd } from 'src/alarms/application/commands/update-alarm-rule.cmd'; +import { DeleteAlarmRuleCmd } from 'src/alarms/application/commands/delete-alarm-rule-cmd'; +import { CheckAlarmRuleCmd } from 'src/alarms/application/commands/check-alarm-rule-cmd'; +import { CheckAlarm } from 'src/alarms/domain/models/check-alarm'; + +describe('AlarmRulesService', () => { + let service: AlarmRulesService; + let mockGetAllAlarmRulesPort: jest.Mocked; + let mockGetAlarmRuleByIdPort: jest.Mocked; + let mockCreateAlarmRulePort: jest.Mocked; + let mockUpdateAlarmRulePort: jest.Mocked; + let mockDeleteAlarmRulePort: jest.Mocked; + let mockCheckAlarmRulePort: jest.Mocked; + let mockCreateAlarmEventPort: jest.Mocked; + let mockEventEmitter: jest.Mocked; + + beforeEach(async () => { + mockGetAllAlarmRulesPort = { + getAllAlarmRules: jest.fn(), + }; + + mockGetAlarmRuleByIdPort = { + getAlarmRuleById: jest.fn(), + }; + + mockCreateAlarmRulePort = { + createAlarmRule: jest.fn(), + }; + + mockUpdateAlarmRulePort = { + updateAlarmRule: jest.fn(), + }; + + mockDeleteAlarmRulePort = { + deleteAlarmRule: jest.fn(), + }; + + mockCheckAlarmRulePort = { + checkAlarmRule: jest.fn(), + }; + + mockCreateAlarmEventPort = { + createAlarmEvent: jest.fn(), + }; + + mockEventEmitter = { + emit: jest.fn(), + } as any; + + const module: TestingModule = await Test.createTestingModule({ + providers: [ + AlarmRulesService, + { + provide: 'GET_ALL_ALARM_RULES_PORT', + useValue: mockGetAllAlarmRulesPort, + }, + { + provide: 'GET_ALARM_RULE_BY_ID_PORT', + useValue: mockGetAlarmRuleByIdPort, + }, + { + provide: 'CREATE_ALARM_RULE_PORT', + useValue: mockCreateAlarmRulePort, + }, + { + provide: 'UPDATE_ALARM_RULE_PORT', + useValue: mockUpdateAlarmRulePort, + }, + { + provide: 'DELETE_ALARM_RULE_PORT', + useValue: mockDeleteAlarmRulePort, + }, + { + provide: 'CHECK_ALARM_RULE_PORT', + useValue: mockCheckAlarmRulePort, + }, + { + provide: 'CREATE_ALARM_EVENT_PORT', + useValue: mockCreateAlarmEventPort, + }, + { + provide: EventEmitter2, + useValue: mockEventEmitter, + }, + ], + }).compile(); + + service = module.get(AlarmRulesService); + }); + + describe('getAllAlarmRules', () => { + it('should return all alarm rules', async () => { + const mockRules = [ + new AlarmRule( + 'rule-1', + 'Ward A', + 'High Temp', + '>', + '38.5', + AlarmPriority.WHITE, + new Date(), + new Date(), + true, + ), + new AlarmRule( + 'rule-2', + 'Ward B', + 'Low O2', + '<', + '90', + AlarmPriority.WHITE, + new Date(), + new Date(), + true, + ), + ]; + + mockGetAllAlarmRulesPort.getAllAlarmRules.mockResolvedValue(mockRules); + + const result = await service.getAllAlarmRules(); + + expect(result).toEqual(mockRules); + expect(mockGetAllAlarmRulesPort.getAllAlarmRules).toHaveBeenCalledTimes(1); + }); + + it('should return empty array when no rules exist', async () => { + mockGetAllAlarmRulesPort.getAllAlarmRules.mockResolvedValue([]); + + const result = await service.getAllAlarmRules(); + + expect(result).toEqual([]); + }); + + it('should propagate port errors', async () => { + const error = new Error('Database error'); + mockGetAllAlarmRulesPort.getAllAlarmRules.mockRejectedValue(error); + + await expect(service.getAllAlarmRules()).rejects.toThrow(error); + }); + }); + + describe('getAlarmRuleById', () => { + it('should return alarm rule by id', async () => { + const mockRule = new AlarmRule( + 'rule-1', + 'Ward A', + 'High Temp', + '>', + '38.5', + AlarmPriority.WHITE, + new Date(), + new Date(), + true, + ); + const cmd = new GetAlarmRuleByIdCmd('rule-1'); + + mockGetAlarmRuleByIdPort.getAlarmRuleById.mockResolvedValue(mockRule); + + const result = await service.getAlarmRuleById(cmd); + + expect(result).toEqual(mockRule); + expect(mockGetAlarmRuleByIdPort.getAlarmRuleById).toHaveBeenCalledWith(cmd); + }); + + it('should return null when rule not found', async () => { + const cmd = new GetAlarmRuleByIdCmd('non-existent'); + + mockGetAlarmRuleByIdPort.getAlarmRuleById.mockResolvedValue(null); + + const result = await service.getAlarmRuleById(cmd); + + expect(result).toBeNull(); + }); + + it('should propagate port errors', async () => { + const cmd = new GetAlarmRuleByIdCmd('rule-1'); + const error = new Error('Database error'); + + mockGetAlarmRuleByIdPort.getAlarmRuleById.mockRejectedValue(error); + + await expect(service.getAlarmRuleById(cmd)).rejects.toThrow(error); + }); + }); + + describe('createAlarmRule', () => { + it('should create alarm rule successfully', async () => { + const cmd = new CreateAlarmRuleCmd( + 'Ward A', + 'dp', + 'dev', + 'pl', + AlarmPriority.WHITE, + '>', + '38.5', + '10:30', + '22:30' + ); + + const armingDate = new Date(); + armingDate.setHours(10, 30, 0, 0); + const dearmingDate = new Date(); + dearmingDate.setHours(22, 30, 0, 0); + + const mockRule = new AlarmRule( + 'rule-1', + 'Ward A', + 'High Temp', + '>', + '38.5', + AlarmPriority.WHITE, + armingDate, + dearmingDate, + true, + ); + + mockCreateAlarmRulePort.createAlarmRule.mockResolvedValue(mockRule); + + const result = await service.createAlarmRule(cmd); + + expect(result).toEqual(mockRule); + expect(mockCreateAlarmRulePort.createAlarmRule).toHaveBeenCalledWith(cmd); + }); + + it('should propagate port errors', async () => { + const cmd = new CreateAlarmRuleCmd( + 'Ward A', + 'dp', + 'dev', + 'pl', + AlarmPriority.WHITE, + '>', + '38.5', + '10:30', + '22:30' + ); + const error = new Error('Database error'); + + mockCreateAlarmRulePort.createAlarmRule.mockRejectedValue(error); + + await expect(service.createAlarmRule(cmd)).rejects.toThrow(error); + }); + }); + + describe('updateAlarmRule', () => { + it('should update alarm rule successfully', async () => { + const cmd = new UpdateAlarmRuleCmd( + 'rule-1', + 'Ward A Updated', + AlarmPriority.WHITE, + '>', + '39.5', + '10:30', + '22:30', + false, + ); + + const armingDate = new Date(); + armingDate.setHours(10, 30, 0, 0); + const dearmingDate = new Date(); + dearmingDate.setHours(22, 30, 0, 0); + + const mockUpdatedRule = new AlarmRule( + 'rule-1', + 'Ward A Updated', + 'Updated Rule', + '>', + '39.5', + AlarmPriority.WHITE, + armingDate, + dearmingDate, + false, + ); + + mockUpdateAlarmRulePort.updateAlarmRule.mockResolvedValue( + mockUpdatedRule, + ); + + const result = await service.updateAlarmRule(cmd); + + expect(result).toEqual(mockUpdatedRule); + expect(mockUpdateAlarmRulePort.updateAlarmRule).toHaveBeenCalledWith(cmd); + }); + + it('should propagate port errors', async () => { + const cmd = new UpdateAlarmRuleCmd( + 'rule-1', + 'Ward A', + AlarmPriority.WHITE, + '>', + '38.5', + '10:30', + '22:30', + true, + ); + const error = new Error('Database error'); + + mockUpdateAlarmRulePort.updateAlarmRule.mockRejectedValue(error); + + await expect(service.updateAlarmRule(cmd)).rejects.toThrow(error); + }); + }); + + describe('deleteAlarmRule', () => { + it('should delete alarm rule successfully', async () => { + const cmd = new DeleteAlarmRuleCmd('rule-1'); + + mockDeleteAlarmRulePort.deleteAlarmRule.mockResolvedValue(undefined); + + await service.deleteAlarmRule(cmd); + + expect(mockDeleteAlarmRulePort.deleteAlarmRule).toHaveBeenCalledWith(cmd); + }); + + it('should propagate port errors', async () => { + const cmd = new DeleteAlarmRuleCmd('rule-1'); + const error = new Error('Database error'); + + mockDeleteAlarmRulePort.deleteAlarmRule.mockRejectedValue(error); + + await expect(service.deleteAlarmRule(cmd)).rejects.toThrow(error); + }); + }); + + describe('checkAlarmRule', () => { + it('should check alarm rule and emit event when alarm matches', async () => { + const activationTime = new Date('2026-04-12T10:00:00Z'); + const cmd = new CheckAlarmRuleCmd('datapoint-1', '38', activationTime); + + const checkAlarmResult = new CheckAlarm('rule-1', 5, 'event-1'); + + mockCheckAlarmRulePort.checkAlarmRule.mockResolvedValue( + checkAlarmResult, + ); + mockCreateAlarmEventPort.createAlarmEvent.mockResolvedValue('event-1'); + + await service.checkAlarmRule(cmd); + + expect(mockCheckAlarmRulePort.checkAlarmRule).toHaveBeenCalledWith(cmd); + expect(mockCreateAlarmEventPort.createAlarmEvent).toHaveBeenCalled(); + expect(mockEventEmitter.emit).toHaveBeenCalledWith( + 'alarm.activated', + expect.any(Object), + ); + }); + + it('should not emit event when no matching alarm rule found', async () => { + const activationTime = new Date('2026-04-12T10:00:00Z'); + const cmd = new CheckAlarmRuleCmd('datapoint-1', "36.5", activationTime); + + mockCheckAlarmRulePort.checkAlarmRule.mockResolvedValue(null); + + await service.checkAlarmRule(cmd); + + expect(mockCheckAlarmRulePort.checkAlarmRule).toHaveBeenCalledWith(cmd); + expect(mockCreateAlarmEventPort.createAlarmEvent).not.toHaveBeenCalled(); + expect(mockEventEmitter.emit).not.toHaveBeenCalled(); + }); + + it('should propagate port errors', async () => { + const cmd = new CheckAlarmRuleCmd( + 'datapoint-1', + "38.6", + new Date('2026-04-12T10:00:00Z'), + ); + const error = new Error('Database error'); + + mockCheckAlarmRulePort.checkAlarmRule.mockRejectedValue(error); + + await expect(service.checkAlarmRule(cmd)).rejects.toThrow(error); + }); + + it('should propagate createAlarmEvent errors', async () => { + const activationTime = new Date('2026-04-12T10:00:00Z'); + const cmd = new CheckAlarmRuleCmd('datapoint-1', '38.6', activationTime); + + const checkAlarmResult = new CheckAlarm('rule-1', 5, 'event-1'); + + mockCheckAlarmRulePort.checkAlarmRule.mockResolvedValue( + checkAlarmResult, + ); + mockCreateAlarmEventPort.createAlarmEvent.mockRejectedValue( + new Error('Event creation failed'), + ); + + await expect(service.checkAlarmRule(cmd)).rejects.toThrow( + 'Event creation failed', + ); + }); + + it('should emit alarm.activated event with correct data', async () => { + const activationTime = new Date('2026-04-12T10:00:00Z'); + const cmd = new CheckAlarmRuleCmd('datapoint-1', '38.6', activationTime); + + const checkAlarmResult = new CheckAlarm('rule-1', 5, 'event-1'); + + mockCheckAlarmRulePort.checkAlarmRule.mockResolvedValue( + checkAlarmResult, + ); + mockCreateAlarmEventPort.createAlarmEvent.mockResolvedValue('event-1'); + + await service.checkAlarmRule(cmd); + + const emittedData = (mockEventEmitter.emit as jest.Mock).mock.calls[0][1]; + expect(emittedData).toBeDefined(); + expect(mockEventEmitter.emit).toHaveBeenCalledWith( + 'alarm.activated', + emittedData, + ); + }); + }); + + describe('integration scenarios', () => { + it('should handle multiple sequential operations', async () => { + const mockRule = new AlarmRule( + 'rule-1', + 'Ward A', + 'High Temp', + '>', + '38.5', + AlarmPriority.WHITE, + new Date(), + new Date(), + true, + ); + + mockGetAllAlarmRulesPort.getAllAlarmRules.mockResolvedValue([mockRule]); + mockGetAlarmRuleByIdPort.getAlarmRuleById.mockResolvedValue(mockRule); + + const allRules = await service.getAllAlarmRules(); + const singleRule = await service.getAlarmRuleById( + new GetAlarmRuleByIdCmd('rule-1'), + ); + + expect(allRules).toHaveLength(1); + expect(singleRule).toEqual(mockRule); + }); + }); +}); \ No newline at end of file diff --git a/backend/test/unit/alarms/domain/models/alarm-event.model.spec.ts b/backend/test/unit/alarms/domain/models/alarm-event.model.spec.ts new file mode 100644 index 00000000..c1fe81b6 --- /dev/null +++ b/backend/test/unit/alarms/domain/models/alarm-event.model.spec.ts @@ -0,0 +1,197 @@ +import { AlarmEvent } from 'src/alarms/domain/models/alarm-event.model'; +import { AlarmPriority } from 'src/alarms/domain/models/alarm-priority.enum'; + +describe('AlarmEvent', () => { + let alarmEvent: AlarmEvent; + const testData = { + id: 'alarm-1', + position: 'Ward A - Room 101', + alarmRuleId: 'rule-123', + alarmName: 'High Temperature', + priority: AlarmPriority.WHITE, + activationTime: new Date('2026-04-12T10:00:00Z'), + resolutionTime: new Date('2026-04-12T11:00:00Z'), + userId: 5, + userUsername: 'nurse_john', + }; + + beforeEach(() => { + alarmEvent = new AlarmEvent( + testData.id, + testData.position, + testData.alarmRuleId, + testData.alarmName, + testData.priority, + testData.activationTime, + testData.resolutionTime, + testData.userId, + testData.userUsername, + ); + }); + + it('should be defined', () => { + expect(alarmEvent).toBeDefined(); + }); + + describe('getId', () => { + it('should return the alarm event id', () => { + expect(alarmEvent.getId()).toBe('alarm-1'); + }); + + it('should return the correct id type', () => { + expect(typeof alarmEvent.getId()).toBe('string'); + }); + }); + + describe('getPosition', () => { + it('should return the position', () => { + expect(alarmEvent.getPosition()).toBe('Ward A - Room 101'); + }); + }); + + describe('getAlarmRuleId', () => { + it('should return the alarm rule id', () => { + expect(alarmEvent.getAlarmRuleId()).toBe('rule-123'); + }); + }); + + describe('getAlarmName', () => { + it('should return the alarm name', () => { + expect(alarmEvent.getAlarmName()).toBe('High Temperature'); + }); + }); + + describe('getPriority', () => { + it('should return the priority', () => { + expect(alarmEvent.getPriority()).toBe(AlarmPriority.WHITE); + }); + + it('should return the correct priority enum value', () => { + const lowPriorityAlarm = new AlarmEvent( + 'alarm-2', + 'Ward B', + 'rule-456', + 'Low Alert', + AlarmPriority.WHITE, + testData.activationTime, + null, + null, + null, + ); + expect(lowPriorityAlarm.getPriority()).toBe(AlarmPriority.WHITE); + }); + }); + + describe('getActivationTime', () => { + it('should return the activation time', () => { + expect(alarmEvent.getActivationTime()).toEqual( + new Date('2026-04-12T10:00:00Z'), + ); + }); + + it('should return a Date object', () => { + expect(alarmEvent.getActivationTime()).toBeInstanceOf(Date); + }); + }); + + describe('getResolutionTime', () => { + it('should return the resolution time when present', () => { + expect(alarmEvent.getResolutionTime()).toEqual( + new Date('2026-04-12T11:00:00Z'), + ); + }); + + it('should return null when alarm is not resolved', () => { + const unresolvedAlarm = new AlarmEvent( + 'alarm-3', + 'Ward C', + 'rule-789', + 'Active Alarm', + AlarmPriority.WHITE, + testData.activationTime, + null, + null, + null, + ); + expect(unresolvedAlarm.getResolutionTime()).toBeNull(); + }); + }); + + describe('getUserId', () => { + it('should return the user id when present', () => { + expect(alarmEvent.getUserId()).toBe(5); + }); + + it('should return null when user id is not set', () => { + const unassignedAlarm = new AlarmEvent( + 'alarm-4', + 'Ward D', + 'rule-101', + 'Unassigned Alarm', + AlarmPriority.WHITE, + testData.activationTime, + null, + null, + null, + ); + expect(unassignedAlarm.getUserId()).toBeNull(); + }); + + it('should return the correct user id type', () => { + expect(typeof alarmEvent.getUserId()).toBe('number'); + }); + }); + + describe('getUserUsername', () => { + it('should return the user username when present', () => { + expect(alarmEvent.getUserUsername()).toBe('nurse_john'); + }); + + it('should return null when user username is not set', () => { + const unassignedAlarm = new AlarmEvent( + 'alarm-5', + 'Ward E', + 'rule-202', + 'Unassigned Alarm', + AlarmPriority.WHITE, + testData.activationTime, + null, + null, + null, + ); + expect(unassignedAlarm.getUserUsername()).toBeNull(); + }); + }); + + describe('constructor', () => { + it('should create an instance with all parameters', () => { + expect(alarmEvent).toBeInstanceOf(AlarmEvent); + expect(alarmEvent.getId()).toBe(testData.id); + expect(alarmEvent.getPosition()).toBe(testData.position); + expect(alarmEvent.getAlarmRuleId()).toBe(testData.alarmRuleId); + expect(alarmEvent.getAlarmName()).toBe(testData.alarmName); + expect(alarmEvent.getPriority()).toBe(testData.priority); + expect(alarmEvent.getActivationTime()).toEqual(testData.activationTime); + expect(alarmEvent.getResolutionTime()).toEqual(testData.resolutionTime); + expect(alarmEvent.getUserId()).toBe(testData.userId); + expect(alarmEvent.getUserUsername()).toBe(testData.userUsername); + }); + + it('should handle null values for optional fields', () => { + const minimalAlarm = new AlarmEvent( + 'alarm-6', + 'Position X', + 'rule-303', + 'Test Alarm', + AlarmPriority.WHITE, + new Date(), + null, + null, + null, + ); + expect(minimalAlarm.getResolutionTime()).toBeNull(); + expect(minimalAlarm.getUserId()).toBeNull(); + expect(minimalAlarm.getUserUsername()).toBeNull(); + }); + }); +}); \ No newline at end of file diff --git a/backend/test/unit/alarms/domain/models/alarm-rule.model.spec.ts b/backend/test/unit/alarms/domain/models/alarm-rule.model.spec.ts new file mode 100644 index 00000000..9ed0f2de --- /dev/null +++ b/backend/test/unit/alarms/domain/models/alarm-rule.model.spec.ts @@ -0,0 +1,269 @@ +import { AlarmRule } from 'src/alarms/domain/models/alarm-rule.model'; +import { AlarmPriority } from 'src/alarms/domain/models/alarm-priority.enum'; + +describe('AlarmRule', () => { + let alarmRule: AlarmRule; + const testData = { + id: 'rule-1', + position: 'Ward A - Room 101', + name: 'High Temperature Alert', + thresholdOperator: '>', + thresholdValue: '38.5', + priority: AlarmPriority.WHITE, + armingTime: new Date('2026-04-12T08:00:00Z'), + dearmingTime: new Date('2026-04-12T20:00:00Z'), + isArmed: true, + }; + + beforeEach(() => { + alarmRule = new AlarmRule( + testData.id, + testData.position, + testData.name, + testData.thresholdOperator, + testData.thresholdValue, + testData.priority, + testData.armingTime, + testData.dearmingTime, + testData.isArmed, + ); + }); + + it('should be defined', () => { + expect(alarmRule).toBeDefined(); + }); + + describe('getId', () => { + it('should return the alarm rule id', () => { + expect(alarmRule.getId()).toBe('rule-1'); + }); + + it('should return the correct id type', () => { + expect(typeof alarmRule.getId()).toBe('string'); + }); + }); + + describe('getPosition', () => { + it('should return the position', () => { + expect(alarmRule.getPosition()).toBe('Ward A - Room 101'); + }); + + it('should return a string', () => { + expect(typeof alarmRule.getPosition()).toBe('string'); + }); + }); + + describe('getName', () => { + it('should return the alarm rule name', () => { + expect(alarmRule.getName()).toBe('High Temperature Alert'); + }); + + it('should return a string', () => { + expect(typeof alarmRule.getName()).toBe('string'); + }); + }); + + describe('getThresholdOperator', () => { + it('should return the threshold operator', () => { + expect(alarmRule.getThresholdOperator()).toBe('>'); + }); + + it('should handle different operators', () => { + const operators = ['>', '<', '>=', '<=', '==', '!=']; + operators.forEach((op) => { + const rule = new AlarmRule( + 'rule-op', + 'position', + 'name', + op, + '100', + AlarmPriority.WHITE, + testData.armingTime, + testData.dearmingTime, + true, + ); + expect(rule.getThresholdOperator()).toBe(op); + }); + }); + }); + + describe('getThresholdValue', () => { + it('should return the threshold value', () => { + expect(alarmRule.getThresholdValue()).toBe('38.5'); + }); + + it('should return a string', () => { + expect(typeof alarmRule.getThresholdValue()).toBe('string'); + }); + + it('should handle numeric string values', () => { + const rule = new AlarmRule( + 'rule-numeric', + 'position', + 'name', + '>', + '100.50', + AlarmPriority.WHITE, + testData.armingTime, + testData.dearmingTime, + false, + ); + expect(rule.getThresholdValue()).toBe('100.50'); + }); + }); + + describe('getPriority', () => { + it('should return the priority', () => { + expect(alarmRule.getPriority()).toBe(AlarmPriority.WHITE); + }); + + it('should handle different priority levels', () => { + const priorities = [ + AlarmPriority.WHITE, + AlarmPriority.GREEN, + AlarmPriority.ORANGE, + AlarmPriority.RED, + ]; + priorities.forEach((priority) => { + const rule = new AlarmRule( + 'rule-priority', + 'position', + 'name', + '>', + '100', + priority, + testData.armingTime, + testData.dearmingTime, + true, + ); + expect(rule.getPriority()).toBe(priority); + }); + }); + }); + + describe('getArmingTime', () => { + it('should return the arming time', () => { + expect(alarmRule.getArmingTime()).toEqual( + new Date('2026-04-12T08:00:00Z'), + ); + }); + + it('should return a Date object', () => { + expect(alarmRule.getArmingTime()).toBeInstanceOf(Date); + }); + }); + + describe('getDearmingTime', () => { + it('should return the dearming time', () => { + expect(alarmRule.getDearmingTime()).toEqual( + new Date('2026-04-12T20:00:00Z'), + ); + }); + + it('should return a Date object', () => { + expect(alarmRule.getDearmingTime()).toBeInstanceOf(Date); + }); + + it('should have dearming time after arming time', () => { + const armingTime = alarmRule.getArmingTime(); + const dearmingTime = alarmRule.getDearmingTime(); + expect(dearmingTime.getTime()).toBeGreaterThan(armingTime.getTime()); + }); + }); + + describe('getIsArmed', () => { + it('should return the armed status when true', () => { + expect(alarmRule.getIsArmed()).toBe(true); + }); + + it('should return the armed status when false', () => { + const disarmedRule = new AlarmRule( + 'rule-disarmed', + 'position', + 'name', + '>', + '100', + AlarmPriority.WHITE, + testData.armingTime, + testData.dearmingTime, + false, + ); + expect(disarmedRule.getIsArmed()).toBe(false); + }); + + it('should return a boolean', () => { + expect(typeof alarmRule.getIsArmed()).toBe('boolean'); + }); + }); + + describe('constructor', () => { + it('should create an instance with all parameters', () => { + expect(alarmRule).toBeInstanceOf(AlarmRule); + expect(alarmRule.getId()).toBe(testData.id); + expect(alarmRule.getPosition()).toBe(testData.position); + expect(alarmRule.getName()).toBe(testData.name); + expect(alarmRule.getThresholdOperator()).toBe(testData.thresholdOperator); + expect(alarmRule.getThresholdValue()).toBe(testData.thresholdValue); + expect(alarmRule.getPriority()).toBe(testData.priority); + expect(alarmRule.getArmingTime()).toEqual(testData.armingTime); + expect(alarmRule.getDearmingTime()).toEqual(testData.dearmingTime); + expect(alarmRule.getIsArmed()).toBe(testData.isArmed); + }); + + it('should handle different configurations', () => { + const alternativeRule = new AlarmRule( + 'rule-alt', + 'Ward B', + 'Low Pressure', + '<', + '2.5', + AlarmPriority.WHITE, + new Date('2026-04-13T06:00:00Z'), + new Date('2026-04-13T22:00:00Z'), + false, + ); + expect(alternativeRule.getId()).toBe('rule-alt'); + expect(alternativeRule.getName()).toBe('Low Pressure'); + expect(alternativeRule.getThresholdOperator()).toBe('<'); + expect(alternativeRule.getIsArmed()).toBe(false); + }); + }); + + describe('time validation scenarios', () => { + it('should handle same day arming and dearming times', () => { + const sameDay = new AlarmRule( + 'rule-same-day', + 'position', + 'name', + '>', + '100', + AlarmPriority.WHITE, + new Date('2026-04-12T09:00:00Z'), + new Date('2026-04-12T17:00:00Z'), + true, + ); + expect( + sameDay.getDearmingTime().getTime() > + sameDay.getArmingTime().getTime(), + ).toBe(true); + }); + + it('should handle different day arming and dearming times', () => { + const differentDays = new AlarmRule( + 'rule-diff-days', + 'position', + 'name', + '>', + '100', + AlarmPriority.WHITE, + new Date('2026-04-12T20:00:00Z'), + new Date('2026-04-13T08:00:00Z'), + true, + ); + expect( + differentDays.getDearmingTime().getTime() > + differentDays.getArmingTime().getTime(), + ).toBe(true); + }); + }); +}); \ No newline at end of file diff --git a/backend/test/unit/alarms/infrastructure/entities/check-alarm-entity.spec.ts b/backend/test/unit/alarms/infrastructure/entities/check-alarm-entity.spec.ts index 94ff7a62..2de6e0cf 100644 --- a/backend/test/unit/alarms/infrastructure/entities/check-alarm-entity.spec.ts +++ b/backend/test/unit/alarms/infrastructure/entities/check-alarm-entity.spec.ts @@ -6,21 +6,4 @@ describe('CheckAlarmEntity', () => { expect(entity).toBeDefined(); }); - - it('toDomain should convert entity to domain model', () => { - const entity = new CheckAlarmEntity('ALM001', 1, 'EVT001'); - - const domain = CheckAlarmEntity.toDomain(entity); - - expect(domain).not.toBeNull(); - expect(domain?.alarm_rule_id).toBe('ALM001'); - expect(domain?.ward_id).toBe(1); - expect(domain?.alarm_event_id).toBe('EVT001'); - }); - - it('toDomain should return null if ward_id is null', () => { - const entity = new CheckAlarmEntity('ALM001', null, 'EVT001'); - - expect(CheckAlarmEntity.toDomain(entity)).toBeNull(); - }); }); diff --git a/backend/test/unit/alarms/infrastructure/persistence/alarm-events-repository-impl.spec.ts b/backend/test/unit/alarms/infrastructure/persistence/alarm-events-repository-impl.spec.ts index 14d3addd..4bcb4b13 100644 --- a/backend/test/unit/alarms/infrastructure/persistence/alarm-events-repository-impl.spec.ts +++ b/backend/test/unit/alarms/infrastructure/persistence/alarm-events-repository-impl.spec.ts @@ -1,48 +1,147 @@ -jest.mock('uuid', () => ({ - v4: jest.fn(() => 'test-uuid'), -})); - -import { AlarmEventsRepositoryImpl } from 'src/alarms/infrastructure/persistence/alarm-events-repository-impl'; +import { AlarmEventsRepositoryImpl } from "src/alarms/infrastructure/persistence/alarm-events-repository-impl"; describe('AlarmEventsRepositoryImpl', () => { - it('ordina gli eventi in getAllAlarmEvents', async () => { - const query = jest.fn().mockResolvedValue({ rows: [] }); - const repository = new AlarmEventsRepositoryImpl({ query } as any); + let repository: AlarmEventsRepositoryImpl; + + const mockPool = { + query: jest.fn(), + }; + + beforeEach(() => { + jest.clearAllMocks(); + repository = new AlarmEventsRepositoryImpl(mockPool as any); + }); + + it('should be defined', () => { + expect(repository).toBeDefined(); + }); + + it('should call getAllAlarmEvents with correct args', async () => { + mockPool.query.mockResolvedValue({ rows: [{ id: '1' }] }); + + const result = await repository.getAllAlarmEvents(10, 5); + + expect(mockPool.query).toHaveBeenCalledWith(expect.any(String), [10, 5]); + expect(result).toEqual([{ id: '1' }]); + }); + + it('should return alarm event if found', async () => { + mockPool.query.mockResolvedValue({ rows: [{ id: '1' }] }); + + const result = await repository.getAlarmEventById('1'); + + expect(mockPool.query).toHaveBeenCalledWith(expect.any(String), ['1']); + expect(result).toEqual({ id: '1' }); + }); + + it('should return null if not found', async () => { + mockPool.query.mockResolvedValue({ rows: [] }); + + const result = await repository.getAlarmEventById('1'); + + expect(result).toBeNull(); + }); + + it('should call getAllManagedAlarmEventsByUserId', async () => { + mockPool.query.mockResolvedValue({ rows: [{ id: '1' }] }); + + const result = await repository.getAllManagedAlarmEventsByUserId(1, 10, 0); + + expect(mockPool.query).toHaveBeenCalledWith(expect.any(String), [1, 10, 0]); + expect(result).toEqual([{ id: '1' }]); + }); + + it('should call getAllUnmanagedAlarmEventsByUserId', async () => { + mockPool.query.mockResolvedValue({ rows: [{ id: '1' }] }); + + const result = await repository.getAllUnmanagedAlarmEventsByUserId(1, 10, 0); + + expect(mockPool.query).toHaveBeenCalledWith(expect.any(String), [1, 10, 0]); + expect(result).toEqual([{ id: '1' }]); + }); + + it('should call resolveAlarmEvent with correct args', async () => { + mockPool.query.mockResolvedValue(undefined); + + await repository.resolveAlarmEvent('alarm1', 1); + + expect(mockPool.query).toHaveBeenCalledWith(expect.any(String), [ + 'alarm1', + 1, + ]); + }); + + it('should create alarm event and return id', async () => { + mockPool.query.mockResolvedValue({ + rows: [{ id: 'generated-id' }], + }); + + const result = await repository.createAlarmEvent('rule1', new Date()); + + expect(mockPool.query).toHaveBeenCalled(); + expect(result).toBe('generated-id'); + }); + + it('should return empty string if no id returned', async () => { + mockPool.query.mockResolvedValue({ + rows: [], + }); + + const result = await repository.createAlarmEvent('rule1', new Date()); + + expect(result).toBe(''); + }); + + it('should return wardId if found', async () => { + mockPool.query.mockResolvedValue({ + rows: [{ ward_id: 5 }], + }); + + const result = await repository.getWardAlarmEvent('alarm1'); + + expect(mockPool.query).toHaveBeenCalledWith(expect.any(String), ['alarm1']); + expect(result).toBe(5); + }); + + it('should throw error if wardId is null', async () => { + mockPool.query.mockResolvedValue({ + rows: [{ ward_id: null }], + }); + + await expect( + repository.getWardAlarmEvent('alarm1'), + ).rejects.toThrow('Ward not found for alarm event alarm1'); + }); - await repository.getAllAlarmEvents(6, 0); + it('should throw error if no rows returned', async () => { + mockPool.query.mockResolvedValue({ + rows: [], + }); - expect(query).toHaveBeenCalledTimes(1); - const [sql, params] = query.mock.calls[0]; - expect(sql).toContain('ORDER BY'); - expect(sql).toContain('ar.priority DESC'); - expect(params).toEqual([6, 0]); + await expect( + repository.getWardAlarmEvent('alarm1'), + ).rejects.toThrow('Ward not found for alarm event alarm1'); }); - it('applica filtro managed-only in getAllManagedAlarmEventsByUserId', async () => { - const query = jest.fn().mockResolvedValue({ rows: [] }); - const repository = new AlarmEventsRepositoryImpl({ query } as any); + it('should use default params in getAllAlarmEvents', async () => { + mockPool.query.mockResolvedValue({ rows: [] }); - await repository.getAllManagedAlarmEventsByUserId(7, 6, 12); + await repository.getAllAlarmEvents(); - expect(query).toHaveBeenCalledTimes(1); - const [sql, params] = query.mock.calls[0]; - expect(sql).toContain('JOIN "user" u_req ON u_req.id = $1'); - expect(sql).toContain('AND ae.resolution_time IS NOT NULL'); - expect(sql).toContain("r.name = 'Amministratore'"); - expect(params).toEqual([7, 6, 12]); + expect(mockPool.query).toHaveBeenCalledWith( + expect.any(String), + [5, 0] + ); }); - it('applica filtro unmanaged-only in getAllUnmanagedAlarmEventsByUserId', async () => { - const query = jest.fn().mockResolvedValue({ rows: [] }); - const repository = new AlarmEventsRepositoryImpl({ query } as any); + it('should use default params in getAllManagedAlarmEventsByUserId', async () => { + mockPool.query.mockResolvedValue({ rows: [] }); - await repository.getAllUnmanagedAlarmEventsByUserId(7, 6, 12); + await repository.getAllManagedAlarmEventsByUserId(1); - expect(query).toHaveBeenCalledTimes(1); - const [sql, params] = query.mock.calls[0]; - expect(sql).toContain('JOIN "user" u_req ON u_req.id = $1'); - expect(sql).toContain('AND ae.resolution_time IS NULL'); - expect(sql).toContain("r.name = 'Amministratore'"); - expect(params).toEqual([7, 6, 12]); + expect(mockPool.query).toHaveBeenCalledWith( + expect.any(String), + [1, 10, 0] + ); }); -}); +}); \ No newline at end of file diff --git a/backend/test/unit/alarms/infrastructure/persistence/alarm-rules-repository-impl.spec.ts b/backend/test/unit/alarms/infrastructure/persistence/alarm-rules-repository-impl.spec.ts index 2b9c9136..ed5b13f6 100644 --- a/backend/test/unit/alarms/infrastructure/persistence/alarm-rules-repository-impl.spec.ts +++ b/backend/test/unit/alarms/infrastructure/persistence/alarm-rules-repository-impl.spec.ts @@ -1,15 +1,195 @@ -jest.mock('uuid', () => ({ - v4: jest.fn(() => 'test-uuid'), -})); +import { Pool } from 'pg'; import { AlarmRulesRepositoryImpl } from 'src/alarms/infrastructure/persistence/alarm-rules-repository-impl'; describe('AlarmRulesRepositoryImpl', () => { - it('should be defined', () => { - expect( - new AlarmRulesRepositoryImpl({ - query: jest.fn(), - } as any), - ).toBeDefined(); - }); -}); + let repository: AlarmRulesRepositoryImpl; + + const mockQuery = jest.fn(); + const mockRelease = jest.fn(); + + const mockClient = { + query: jest.fn(), + release: mockRelease, + }; + + const mockPool = { + query: mockQuery, + connect: jest.fn(), + } as unknown as Pool; + + beforeEach(() => { + jest.clearAllMocks(); + repository = new AlarmRulesRepositoryImpl(mockPool); + }); + + it('should return alarm rule if found', async () => { + mockQuery.mockResolvedValue({ rows: [{ id: '1' }] }); + + const result = await repository.getAlarmRuleById('1'); + + expect(mockQuery).toHaveBeenCalled(); + expect(result).toEqual({ id: '1' }); + }); + + it('should return null if not found', async () => { + mockQuery.mockResolvedValue({ rows: [] }); + + const result = await repository.getAlarmRuleById('1'); + + expect(result).toBeNull(); + }); + + it('should create alarm rule', async () => { + mockQuery.mockResolvedValue({ rows: [{ id: '1' }] }); + + const result = await repository.createAlarmRule( + 'name', + 1, + 'dp', + 'dev', + 'plant', + '>', + '10', + '10:00', + '18:00', + ); + + expect(mockQuery).toHaveBeenCalled(); + expect(result).toEqual({ id: '1' }); + }); + + it('should return all alarm rules', async () => { + mockQuery.mockResolvedValue({ rows: [{ id: '1' }] }); + + const result = await repository.getAllAlarmRules(); + + expect(result).toEqual([{ id: '1' }]); + }); + + it('should delete alarm rule if not used', async () => { + mockQuery.mockResolvedValueOnce({ rowCount: 1 }); + + await repository.deleteAlarmRule('1'); + + expect(mockQuery).toHaveBeenCalledTimes(1); + }); + + it('should mark as changed if delete fails', async () => { + mockQuery + .mockResolvedValueOnce({ rowCount: 0 }) // delete + .mockResolvedValueOnce({}); // update + + await repository.deleteAlarmRule('1'); + + expect(mockQuery).toHaveBeenCalledTimes(2); + }); + it('should update alarm rule if not used', async () => { + mockPool.connect = jest.fn().mockResolvedValue(mockClient); + + mockClient.query + .mockResolvedValueOnce(undefined) // BEGIN + .mockResolvedValueOnce({ rows: [{ used: false }] }) // usage check + .mockResolvedValueOnce({ rows: [{ id: '1' }] }) // update + .mockResolvedValueOnce(undefined); // COMMIT + + const result = await repository.updateAlarmRule( + '1', + 'name', + 1, + '>', + '10', + '10:00', + '18:00', + true, + ); + + expect(mockClient.query).toHaveBeenCalled(); + expect(result).toEqual({ id: '1' }); + expect(mockRelease).toHaveBeenCalled(); + }); + + it('should clone alarm rule if already used', async () => { + mockPool.connect = jest.fn().mockResolvedValue(mockClient); + + mockClient.query + .mockResolvedValueOnce(undefined) // BEGIN + .mockResolvedValueOnce({ rows: [{ used: true }] }) // usage check + .mockResolvedValueOnce(undefined) // mark changed + .mockResolvedValueOnce({ rows: [{ id: '2' }] }) // insert + .mockResolvedValueOnce(undefined); // COMMIT + + const result = await repository.updateAlarmRule( + '1', + 'name', + 1, + '>', + '10', + '10:00', + '18:00', + true, + ); + + expect(result).toEqual({ id: '2' }); + expect(mockRelease).toHaveBeenCalled(); + }); + + it('should rollback on error', async () => { + mockPool.connect = jest.fn().mockResolvedValue(mockClient); + + mockClient.query + .mockResolvedValueOnce(undefined) // BEGIN + .mockRejectedValueOnce(new Error('fail')); // error + + await expect( + repository.updateAlarmRule( + '1', + 'name', + 1, + '>', + '10', + '10:00', + '18:00', + true, + ), + ).rejects.toThrow(); + + expect(mockClient.query).toHaveBeenCalledWith('ROLLBACK'); + expect(mockRelease).toHaveBeenCalled(); + }); + + it('should return alarm when condition matches', async () => { + mockQuery.mockResolvedValue({ + rows: [{ alarm_rule_id: 1, ward_id: 2 }], + }); + + const result = await repository.checkAlarmRule( + 'dp1', + '10', + '10:00', + ); + + expect(mockQuery).toHaveBeenCalled(); + expect(result).toEqual({ alarm_rule_id: 1, ward_id: 2 }); + }); + + it('should return null when no alarm matches', async () => { + mockQuery.mockResolvedValue({ rows: [] }); + + const result = await repository.checkAlarmRule( + 'dp1', + '10', + '10:00', + ); + + expect(result).toBeUndefined(); // attenzione: rows[0] + }); + + it('should propagate checkAlarmRule errors', async () => { + mockQuery.mockRejectedValue(new Error('DB error')); + + await expect( + repository.checkAlarmRule('dp1', '10', '10:00'), + ).rejects.toThrow(); + }); +}); \ No newline at end of file diff --git a/backend/test/unit/app.controller.spec.ts b/backend/test/unit/app.controller.spec.ts deleted file mode 100644 index d2f4258f..00000000 --- a/backend/test/unit/app.controller.spec.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { AppController } from 'src/app.controller'; - -describe('AppController', () => { - it('getHello restituisce il testo atteso', () => { - const controller = new AppController(); - - expect(controller.getHello()).toBe('Hello World!'); - }); -}); diff --git a/backend/test/unit/auth/adapters/out/change-credentials-adapter.spec.ts b/backend/test/unit/auth/adapters/out/change-credentials-adapter.spec.ts deleted file mode 100644 index 8ec372a8..00000000 --- a/backend/test/unit/auth/adapters/out/change-credentials-adapter.spec.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { ChangeCredentialsAdapter } from 'src/auth/adapters/out/change-credentials-adapter'; -import { ChangeCredentialsCmd } from 'src/auth/application/commands/change-credentials-cmd'; - -describe('ChangeCredentialsAdapter', () => { - let adapter: ChangeCredentialsAdapter; - const mockRepo = { - changeCredentials: jest.fn(), - }; - - beforeEach(() => { - mockRepo.changeCredentials.mockReset(); - adapter = new ChangeCredentialsAdapter(mockRepo as any); - }); - - it('should be defined', () => { - expect(adapter).toBeDefined(); - }); - - it('should call repository.changeCredentials with correct args', async () => { - const cmd = new ChangeCredentialsCmd('username', 'newPassword', false); - mockRepo.changeCredentials.mockResolvedValue(undefined); - - await adapter.changeCredentials(cmd); - - expect(mockRepo.changeCredentials).toHaveBeenCalledWith( - 'username', - 'newPassword', - false, - ); - }); - - it('should propagate repository errors', async () => { - const cmd = new ChangeCredentialsCmd('u', 'p', true); - const error = new Error('repository failure'); - mockRepo.changeCredentials.mockRejectedValue(error); - - await expect(adapter.changeCredentials(cmd)).rejects.toThrow(error); - }); -}); diff --git a/backend/test/unit/auth/adapters/out/check-credentials-adapter.spec.ts b/backend/test/unit/auth/adapters/out/check-credentials-adapter.spec.ts deleted file mode 100644 index 1729c932..00000000 --- a/backend/test/unit/auth/adapters/out/check-credentials-adapter.spec.ts +++ /dev/null @@ -1,55 +0,0 @@ -import { CheckCredentialsAdapter } from 'src/auth/adapters/out/check-credentials-adapter'; -import { CheckCredentialsCmd } from 'src/auth/application/commands/check-credentials-cmd'; -import { Payload } from 'src/auth/domain/payload'; - -describe('CheckCredentialsAdapter', () => { - let adapter: CheckCredentialsAdapter; - - const mockCheckCredentialsRepository = { - checkCredentials: jest.fn(), - }; - - beforeEach(() => { - adapter = new CheckCredentialsAdapter( - mockCheckCredentialsRepository as any, - ); - }); - - it('should be defined', () => { - expect(adapter).toBeDefined(); - }); - - it('should call repository and return Payload', async () => { - const repoResponse = { - id: 1, - username: 'user', - role: 'OPERATORE_SANITARIO', - firstAccess: true, - }; - - mockCheckCredentialsRepository.checkCredentials.mockResolvedValue( - repoResponse, - ); - - const cmd = new CheckCredentialsCmd('user', 'pass'); - - const result = await adapter.checkCredentials(cmd); - - expect( - mockCheckCredentialsRepository.checkCredentials, - ).toHaveBeenCalledWith('user', 'pass'); - - expect(result).toBeInstanceOf(Payload); - expect(result).toEqual(new Payload(1, 'user', 'OPERATORE_SANITARIO', true)); - }); - - it('should propagate error from repository', async () => { - mockCheckCredentialsRepository.checkCredentials.mockRejectedValue( - new Error('DB error'), - ); - - const cmd = new CheckCredentialsCmd('user', 'pass'); - - await expect(adapter.checkCredentials(cmd)).rejects.toThrow('DB error'); - }); -}); diff --git a/backend/test/unit/auth/adapters/out/credentials-persistence-adapter.spec.ts b/backend/test/unit/auth/adapters/out/credentials-persistence-adapter.spec.ts new file mode 100644 index 00000000..17d88bae --- /dev/null +++ b/backend/test/unit/auth/adapters/out/credentials-persistence-adapter.spec.ts @@ -0,0 +1,79 @@ + +import { CredentialsPersistenceAdapter } from 'src/auth/adapters/out/credentials-persistence-adapter'; +import { ChangeCredentialsCmd } from 'src/auth/application/commands/change-credentials-cmd'; +import { CheckCredentialsCmd } from 'src/auth/application/commands/check-credentials-cmd'; +import { Payload } from 'src/auth/domain/payload'; + +describe('CredentialsPersistenceAdapter', () => { + let adapter: CredentialsPersistenceAdapter; + + const mockCredentialsRepository = { + checkCredentials: jest.fn(), + changeCredentials: jest.fn(), + }; + + beforeEach(() => { + adapter = new CredentialsPersistenceAdapter( + mockCredentialsRepository as any, + ); + }); + + it('should be defined', () => { + expect(adapter).toBeDefined(); + }); + + it('should call repository and return Payload', async () => { + const repoResponse = { + id: 1, + username: 'user', + role: 'OPERATORE_SANITARIO', + firstAccess: true, + }; + + mockCredentialsRepository.checkCredentials.mockResolvedValue( + repoResponse, + ); + + const cmd = new CheckCredentialsCmd('user', 'pass'); + + const result = await adapter.checkCredentials(cmd); + + expect( + mockCredentialsRepository.checkCredentials, + ).toHaveBeenCalledWith('user', 'pass'); + + expect(result).toBeInstanceOf(Payload); + expect(result).toEqual(new Payload(1, 'user', 'OPERATORE_SANITARIO', true)); + }); + + it('should propagate error from repository', async () => { + mockCredentialsRepository.checkCredentials.mockRejectedValue( + new Error('DB error'), + ); + + const cmd = new CheckCredentialsCmd('user', 'pass'); + + await expect(adapter.checkCredentials(cmd)).rejects.toThrow('DB error'); + }); + + it('should call repository.changeCredentials with correct args', async () => { + const cmd = new ChangeCredentialsCmd('username', 'newPassword', false); + mockCredentialsRepository.changeCredentials.mockResolvedValue(undefined); + + await adapter.changeCredentials(cmd); + + expect(mockCredentialsRepository.changeCredentials).toHaveBeenCalledWith( + 'username', + 'newPassword', + false, + ); + }); + + it('should propagate repository errors', async () => { + const cmd = new ChangeCredentialsCmd('u', 'p', true); + const error = new Error('repository failure'); + mockCredentialsRepository.changeCredentials.mockRejectedValue(error); + + await expect(adapter.changeCredentials(cmd)).rejects.toThrow(error); + }); +}); diff --git a/backend/test/unit/auth/adapters/out/extract-from-access-token-adapter.spec.ts b/backend/test/unit/auth/adapters/out/extract-from-access-token-adapter.spec.ts deleted file mode 100644 index 579e727e..00000000 --- a/backend/test/unit/auth/adapters/out/extract-from-access-token-adapter.spec.ts +++ /dev/null @@ -1,45 +0,0 @@ -import { ExtractFromAccessTokenAdapter } from 'src/auth/adapters/out/extract-from-access-token-adapter'; - -describe('ExtractFromAccessTokenAdapter', () => { - const mockPayload = { userId: '1', role: 'admin' }; - - const mockJwtAccessTokenExtractor = { - extractAccessTokenPayload: jest.fn().mockReturnValue(mockPayload), - }; - - it('should be defined', () => { - expect( - new ExtractFromAccessTokenAdapter(mockJwtAccessTokenExtractor), - ).toBeDefined(); - }); - - it('should extract payload from refresh token', () => { - const adapter = new ExtractFromAccessTokenAdapter( - mockJwtAccessTokenExtractor as any, - ); - - const result = adapter.extractFromAccessToken({ - token: 'fake-token', - }); - - expect( - mockJwtAccessTokenExtractor.extractAccessTokenPayload, - ).toHaveBeenCalledWith('fake-token'); - - expect(result).toEqual(mockPayload); - }); - - it('should propagate errors from extractor', () => { - const mock = { - extractAccessTokenPayload: jest.fn().mockImplementation(() => { - throw new Error('Invalid token'); - }), - }; - - const adapter = new ExtractFromAccessTokenAdapter(mock as any); - - expect(() => - adapter.extractFromAccessToken({ token: 'bad-token' }), - ).toThrow('Invalid token'); - }); -}); diff --git a/backend/test/unit/auth/adapters/out/extract-from-refresh-token-adapter.spec.ts b/backend/test/unit/auth/adapters/out/extract-from-refresh-token-adapter.spec.ts deleted file mode 100644 index 4e5caf6e..00000000 --- a/backend/test/unit/auth/adapters/out/extract-from-refresh-token-adapter.spec.ts +++ /dev/null @@ -1,45 +0,0 @@ -import { ExtractFromRefreshTokenAdapter } from 'src/auth/adapters/out/extract-from-refresh-token-adapter'; - -describe('ExtractFromRefreshTokenAdapter', () => { - const mockPayload = { userId: '1', role: 'admin' }; - - const mockJwtRefreshTokenExtractor = { - extractRefreshTokenPayload: jest.fn().mockReturnValue(mockPayload), - }; - - it('should be defined', () => { - expect( - new ExtractFromRefreshTokenAdapter(mockJwtRefreshTokenExtractor), - ).toBeDefined(); - }); - - it('should extract payload from refresh token', () => { - const adapter = new ExtractFromRefreshTokenAdapter( - mockJwtRefreshTokenExtractor as any, - ); - - const result = adapter.extractFromRefreshToken({ - token: 'fake-token', - }); - - expect( - mockJwtRefreshTokenExtractor.extractRefreshTokenPayload, - ).toHaveBeenCalledWith('fake-token'); - - expect(result).toEqual(mockPayload); - }); - - it('should propagate errors from extractor', () => { - const mock = { - extractRefreshTokenPayload: jest.fn().mockImplementation(() => { - throw new Error('Invalid token'); - }), - }; - - const adapter = new ExtractFromRefreshTokenAdapter(mock as any); - - expect(() => - adapter.extractFromRefreshToken({ token: 'bad-token' }), - ).toThrow('Invalid token'); - }); -}); diff --git a/backend/test/unit/auth/adapters/out/generate-access-token-adapter.spec.ts b/backend/test/unit/auth/adapters/out/generate-access-token-adapter.spec.ts deleted file mode 100644 index 5e234b72..00000000 --- a/backend/test/unit/auth/adapters/out/generate-access-token-adapter.spec.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { GenerateAccessTokenAdapter } from 'src/auth/adapters/out/generate-access-token-adapter'; - -describe('GenerateTokenAdapter', () => { - const mockToken = 'test'; - - const mockJwtAccessTokenGenerator = { - generateAccessToken: jest.fn().mockReturnValue('test'), - }; - - it('should be defined', () => { - expect( - new GenerateAccessTokenAdapter(mockJwtAccessTokenGenerator), - ).toBeDefined(); - }); - - it('should generate refresh token from payload', () => { - const adapter = new GenerateAccessTokenAdapter( - mockJwtAccessTokenGenerator as any, - ); - - const result = adapter.generateAccessToken({ - payload: { - id: 1, - username: 'user', - role: 'OPERATORE_SANITARIO', - firstAccess: false, - }, - }); - - expect( - mockJwtAccessTokenGenerator.generateAccessToken, - ).toHaveBeenCalledWith({ - id: 1, - username: 'user', - role: 'OPERATORE_SANITARIO', - firstAccess: false, - }); - - expect(result).toEqual(mockToken); - }); -}); diff --git a/backend/test/unit/auth/adapters/out/generate-and-extract-token-adapter.spec.ts b/backend/test/unit/auth/adapters/out/generate-and-extract-token-adapter.spec.ts new file mode 100644 index 00000000..4be4fa88 --- /dev/null +++ b/backend/test/unit/auth/adapters/out/generate-and-extract-token-adapter.spec.ts @@ -0,0 +1,169 @@ +import { GenerateAndExtractTokenAdapter } from 'src/auth/adapters/out/generate-and-extract-token-adapter'; + +describe('GenerateAndExtractTokenAdapter', () => { + const mockToken = 'test'; + let adapter: GenerateAndExtractTokenAdapter; + const mockPayload = { userId: '1', role: 'admin' }; + + const mockJwtTokenGeneratorAndExtractor = { + generateAccessToken: jest.fn().mockReturnValue('test'), + generateRefreshToken: jest.fn().mockReturnValue('test'), + generateChangePasswordRefreshToken: jest.fn().mockReturnValue('test'), + generateChangePasswordAccessToken: jest.fn().mockReturnValue('test'), + extractAccessTokenPayload: jest.fn().mockReturnValue(mockPayload), + extractRefreshTokenPayload: jest.fn().mockReturnValue(mockPayload), + }; + + beforeEach(() => { + adapter = new GenerateAndExtractTokenAdapter( + mockJwtTokenGeneratorAndExtractor as any, + ); + }); + + it('should be defined', () => { + expect( + adapter, + ).toBeDefined(); + }); + + it('should generate refresh token from payload', () => { + const result = adapter.generateAccessToken({ + payload: { + id: 1, + username: 'user', + role: 'OPERATORE_SANITARIO', + firstAccess: false, + }, + }); + + expect( + mockJwtTokenGeneratorAndExtractor.generateAccessToken, + ).toHaveBeenCalledWith({ + id: 1, + username: 'user', + role: 'OPERATORE_SANITARIO', + firstAccess: false, + }); + + expect(result).toEqual(mockToken); + }); + + it('should generate refresh token from payload', () => { + const result = adapter.generateAccessToken({ + payload: { + id: 1, + username: 'user', + role: 'OPERATORE_SANITARIO', + firstAccess: false, + }, + }); + + expect( + mockJwtTokenGeneratorAndExtractor.generateAccessToken, + ).toHaveBeenCalledWith({ + id: 1, + username: 'user', + role: 'OPERATORE_SANITARIO', + firstAccess: false, + }); + + expect(result).toEqual(mockToken); + }); + + it('should generate refresh token from payload', () => { + const result = adapter.generateChangePasswordAccessToken({ + payload: { + id: 1, + username: 'user', + role: 'OPERATORE_SANITARIO', + firstAccess: false, + }, + }); + + expect( + mockJwtTokenGeneratorAndExtractor.generateChangePasswordAccessToken, + ).toHaveBeenCalledWith({ + id: 1, + username: 'user', + role: 'OPERATORE_SANITARIO', + firstAccess: false, + }); + + expect(result).toEqual(mockToken); + }); + + it('should generate refresh token from payload', () => { + const result = adapter.generateChangePasswordRefreshToken({ + payload: { + id: 1, + username: 'user', + role: 'OPERATORE_SANITARIO', + firstAccess: false, + }, + }); + + expect( + mockJwtTokenGeneratorAndExtractor.generateChangePasswordRefreshToken, + ).toHaveBeenCalledWith({ + id: 1, + username: 'user', + role: 'OPERATORE_SANITARIO', + firstAccess: false, + }); + + expect(result).toEqual(mockToken); + }); + + it('should extract payload from access token', () => { + + const result = adapter.extractFromAccessToken({ + token: 'fake-token', + }); + + expect( + mockJwtTokenGeneratorAndExtractor.extractAccessTokenPayload, + ).toHaveBeenCalledWith('fake-token'); + + expect(result).toEqual(mockPayload); + }); + + it('should propagate errors from extractor for access token', () => { + const mock = { + extractAccessTokenPayload: jest.fn().mockImplementation(() => { + throw new Error('Invalid token'); + }), + }; + + const adapter = new GenerateAndExtractTokenAdapter(mock as any); + + expect(() => + adapter.extractFromAccessToken({ token: 'bad-token' }), + ).toThrow('Invalid token'); + }); + + it('should extract payload from refresh token', () => { + const result = adapter.extractFromRefreshToken({ + token: 'fake-token', + }); + + expect( + mockJwtTokenGeneratorAndExtractor.extractRefreshTokenPayload, + ).toHaveBeenCalledWith('fake-token'); + + expect(result).toEqual(mockPayload); + }); + + it('should propagate errors from extractor for refresh token', () => { + const mock = { + extractRefreshTokenPayload: jest.fn().mockImplementation(() => { + throw new Error('Invalid token'); + }), + }; + + const adapter = new GenerateAndExtractTokenAdapter(mock as any); + + expect(() => + adapter.extractFromRefreshToken({ token: 'bad-token' }), + ).toThrow('Invalid token'); + }); +}); diff --git a/backend/test/unit/auth/adapters/out/generate-change-password-access-token-adapter.spec.ts b/backend/test/unit/auth/adapters/out/generate-change-password-access-token-adapter.spec.ts deleted file mode 100644 index 8163350a..00000000 --- a/backend/test/unit/auth/adapters/out/generate-change-password-access-token-adapter.spec.ts +++ /dev/null @@ -1,43 +0,0 @@ -import { GenerateChangePasswordAccessTokenAdapter } from 'src/auth/adapters/out/generate-change-password-access-token-adapter'; - -describe('GenerateChangePasswordAccessTokenAdapter', () => { - const mockToken = 'test'; - - const mockJwtChangePasswordAccessTokenGenerator = { - generateChangePasswordAccessToken: jest.fn().mockReturnValue('test'), - }; - - it('should be defined', () => { - expect( - new GenerateChangePasswordAccessTokenAdapter( - mockJwtChangePasswordAccessTokenGenerator, - ), - ).toBeDefined(); - }); - - it('should generate refresh token from payload', () => { - const adapter = new GenerateChangePasswordAccessTokenAdapter( - mockJwtChangePasswordAccessTokenGenerator as any, - ); - - const result = adapter.generateChangePasswordAccessToken({ - payload: { - id: 1, - username: 'user', - role: 'OPERATORE_SANITARIO', - firstAccess: false, - }, - }); - - expect( - mockJwtChangePasswordAccessTokenGenerator.generateChangePasswordAccessToken, - ).toHaveBeenCalledWith({ - id: 1, - username: 'user', - role: 'OPERATORE_SANITARIO', - firstAccess: false, - }); - - expect(result).toEqual(mockToken); - }); -}); diff --git a/backend/test/unit/auth/adapters/out/generate-change-password-refresh-token-adapter.spec.ts b/backend/test/unit/auth/adapters/out/generate-change-password-refresh-token-adapter.spec.ts deleted file mode 100644 index 1b1abe63..00000000 --- a/backend/test/unit/auth/adapters/out/generate-change-password-refresh-token-adapter.spec.ts +++ /dev/null @@ -1,43 +0,0 @@ -import { GenerateChangePasswordRefreshTokenAdapter } from 'src/auth/adapters/out/generate-change-password-refresh-token-adapter'; - -describe('GenerateChangePasswordRefreshTokenAdapter', () => { - const mockToken = 'test'; - - const mockJwtChangePasswordRefreshTokenGenerator = { - generateChangePasswordRefreshToken: jest.fn().mockReturnValue('test'), - }; - - it('should be defined', () => { - expect( - new GenerateChangePasswordRefreshTokenAdapter( - mockJwtChangePasswordRefreshTokenGenerator, - ), - ).toBeDefined(); - }); - - it('should generate refresh token from payload', () => { - const adapter = new GenerateChangePasswordRefreshTokenAdapter( - mockJwtChangePasswordRefreshTokenGenerator as any, - ); - - const result = adapter.generateChangePasswordRefreshToken({ - payload: { - id: 1, - username: 'user', - role: 'OPERATORE_SANITARIO', - firstAccess: false, - }, - }); - - expect( - mockJwtChangePasswordRefreshTokenGenerator.generateChangePasswordRefreshToken, - ).toHaveBeenCalledWith({ - id: 1, - username: 'user', - role: 'OPERATORE_SANITARIO', - firstAccess: false, - }); - - expect(result).toEqual(mockToken); - }); -}); diff --git a/backend/test/unit/auth/adapters/out/generate-refresh-token-adapter.spec.ts b/backend/test/unit/auth/adapters/out/generate-refresh-token-adapter.spec.ts deleted file mode 100644 index 51a8687d..00000000 --- a/backend/test/unit/auth/adapters/out/generate-refresh-token-adapter.spec.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { GenerateRefreshTokenAdapter } from 'src/auth/adapters/out/generate-refresh-token-adapter'; - -describe('GenerateRefreshTokenAdapter', () => { - const mockToken = 'test'; - - const mockJwtRefreshTokenGenerator = { - generateRefreshToken: jest.fn().mockReturnValue('test'), - }; - - it('should be defined', () => { - expect( - new GenerateRefreshTokenAdapter(mockJwtRefreshTokenGenerator), - ).toBeDefined(); - }); - - it('should generate refresh token from payload', () => { - const adapter = new GenerateRefreshTokenAdapter( - mockJwtRefreshTokenGenerator as any, - ); - - const result = adapter.generateRefreshToken({ - payload: { - id: 1, - username: 'user', - role: 'OPERATORE_SANITARIO', - firstAccess: false, - }, - }); - - expect( - mockJwtRefreshTokenGenerator.generateRefreshToken, - ).toHaveBeenCalledWith({ - id: 1, - username: 'user', - role: 'OPERATORE_SANITARIO', - firstAccess: false, - }); - - expect(result).toEqual(mockToken); - }); -}); diff --git a/backend/test/unit/auth/application/repository/change-credentials-repository.interface.spec.ts b/backend/test/unit/auth/application/repository/change-credentials-repository.interface.spec.ts deleted file mode 100644 index ac943c1b..00000000 --- a/backend/test/unit/auth/application/repository/change-credentials-repository.interface.spec.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { - CHANGE_CREDENTIALS_REPOSITORY, - ChangeCredentialsRepository, -} from 'src/auth/application/repository/change-credentials-repository.interface'; - -describe('ChangeCredentialsRepository token', () => { - it('espone il token DI atteso', () => { - expect(CHANGE_CREDENTIALS_REPOSITORY).toBe('CHANGE_CREDENTIALS_REPOSITORY'); - }); - - it('definisce il contratto changeCredentials', async () => { - const repository: ChangeCredentialsRepository = { - changeCredentials: jest.fn().mockResolvedValue(undefined), - }; - - await expect(repository.changeCredentials('mario', 'new-password', false)).resolves.toBeUndefined(); - expect(repository.changeCredentials).toHaveBeenCalledWith('mario', 'new-password', false); - }); -}); diff --git a/backend/test/unit/auth/application/services/auth.service.spec.ts b/backend/test/unit/auth/application/services/auth.service.spec.ts index fe509527..e6f0bc61 100644 --- a/backend/test/unit/auth/application/services/auth.service.spec.ts +++ b/backend/test/unit/auth/application/services/auth.service.spec.ts @@ -1,14 +1,14 @@ import { Test, TestingModule } from '@nestjs/testing'; import { AuthService } from 'src/auth/application/services/auth.service'; -import { CHECK_CREDENTIALS_PORT } from 'src/auth/adapters/out/check-credentials-adapter'; -import { GENERATE_ACCESS_TOKEN_PORT } from 'src/auth/adapters/out/generate-access-token-adapter'; -import { GENERATE_REFRESH_TOKEN_PORT } from 'src/auth/adapters/out/generate-refresh-token-adapter'; -import { EXTRACT_FROM_ACCESS_TOKEN_PORT } from 'src/auth/adapters/out/extract-from-access-token-adapter'; -import { EXTRACT_FROM_REFRESH_TOKEN_PORT } from 'src/auth/adapters/out/extract-from-refresh-token-adapter'; -import { CHANGE_CREDENTIALS_PORT } from 'src/auth/adapters/out/change-credentials-adapter'; -import { GENERATE_CHANGE_PASSWORD_ACCESS_TOKEN_PORT } from 'src/auth/adapters/out/generate-change-password-access-token-adapter'; -import { GENERATE_CHANGE_PASSWORD_REFRESH_TOKEN_PORT } from 'src/auth/adapters/out/generate-change-password-refresh-token-adapter'; import { HASH_PASSWORD_PORT } from 'src/auth/adapters/out/hash-password-adapter'; +import { CHANGE_CREDENTIALS_PORT } from 'src/auth/application/ports/out/change-credentials-port.interface'; +import { CHECK_CREDENTIALS_PORT } from 'src/auth/application/ports/out/check-credentials-port.interface'; +import { GENERATE_CHANGE_PASSWORD_ACCESS_TOKEN_PORT } from 'src/auth/application/ports/out/generate-change-password-access-token-port.interface'; +import { GENERATE_CHANGE_PASSWORD_REFRESH_TOKEN_PORT } from 'src/auth/application/ports/out/generate-change-password-refresh-token-port.interface'; +import { GENERATE_ACCESS_TOKEN_PORT } from 'src/auth/application/ports/out/generate-access-token-port.interface'; +import { GENERATE_REFRESH_TOKEN_PORT } from 'src/auth/adapters/out/generate-and-extract-token-adapter'; +import { EXTRACT_FROM_ACCESS_TOKEN_PORT } from 'src/auth/application/ports/out/extract-from-access-token-port.interface'; +import { EXTRACT_FROM_REFRESH_TOKEN_PORT } from 'src/auth/application/ports/out/extract-from-refresh-token-port.interface'; describe('AuthService', () => { let service: AuthService; diff --git a/backend/test/unit/auth/infrastructure/jwt-token-generator/jwt-token-generator.spec.ts b/backend/test/unit/auth/infrastructure/jwt-token-generator/jwt-token-generator.spec.ts index bda4f94e..fef25912 100644 --- a/backend/test/unit/auth/infrastructure/jwt-token-generator/jwt-token-generator.spec.ts +++ b/backend/test/unit/auth/infrastructure/jwt-token-generator/jwt-token-generator.spec.ts @@ -1,8 +1,8 @@ -import { JwtTokenGenerator } from 'src/auth/infrastructure/jwt-token-generator/jwt-token-generator'; +import { JwtTokenGeneratorAndExtractorImpl } from 'src/auth/infrastructure/jwt-token-generator/jwt-token-generator-and-extractor-impl'; import { UnauthorizedException } from '@nestjs/common'; describe('JwtTokenGenerator', () => { - let generator: JwtTokenGenerator; + let generator: JwtTokenGeneratorAndExtractorImpl; const payload = { id: 1, username: 'user', @@ -13,7 +13,7 @@ describe('JwtTokenGenerator', () => { beforeEach(() => { process.env.ACCESS_SECRET = 'access-secret'; process.env.REFRESH_SECRET = 'refresh-secret'; - generator = new JwtTokenGenerator(); + generator = new JwtTokenGeneratorAndExtractorImpl(); }); describe('generateAccessToken', () => { diff --git a/backend/test/unit/auth/infrastructure/persistence/change-credentials-repository-impl.spec.ts b/backend/test/unit/auth/infrastructure/persistence/change-credentials-repository-impl.spec.ts deleted file mode 100644 index dbec998f..00000000 --- a/backend/test/unit/auth/infrastructure/persistence/change-credentials-repository-impl.spec.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { ChangeCredentialsRepositoryImpl } from 'src/auth/infrastructure/persistence/change-credentials-repository-impl'; - -describe('ChangeCredentialsRepositoryImpl', () => { - let repo: ChangeCredentialsRepositoryImpl; - let mockConn: any; - - beforeEach(() => { - mockConn = { - query: jest.fn(), - }; - - repo = new ChangeCredentialsRepositoryImpl(mockConn); - }); - - it('should be defined', () => { - expect(repo).toBeDefined(); - }); - - it('should call query with correct parameters when changing credentials', async () => { - mockConn.query.mockResolvedValue({}); - - await repo.changeCredentials('testuser', 'newPassword', true); - - expect(mockConn.query).toHaveBeenCalledWith( - 'UPDATE "user" SET password = $1, first_access = $2 WHERE username = $3', - ['newPassword', true, 'testuser'], - ); - }); - - it('should propagate errors from the database', async () => { - mockConn.query.mockRejectedValue(new Error('DB error')); - - await expect( - repo.changeCredentials('testuser', 'newPassword', true), - ).rejects.toThrow('DB error'); - }); -}); diff --git a/backend/test/unit/auth/infrastructure/persistence/check-credentials-repository-impl.spec.ts b/backend/test/unit/auth/infrastructure/persistence/credentials-repository-impl.spec.ts similarity index 57% rename from backend/test/unit/auth/infrastructure/persistence/check-credentials-repository-impl.spec.ts rename to backend/test/unit/auth/infrastructure/persistence/credentials-repository-impl.spec.ts index 686f4689..d84da6b2 100644 --- a/backend/test/unit/auth/infrastructure/persistence/check-credentials-repository-impl.spec.ts +++ b/backend/test/unit/auth/infrastructure/persistence/credentials-repository-impl.spec.ts @@ -1,8 +1,8 @@ -import { CheckCredentialsRepositoryImpl } from 'src/auth/infrastructure/persistence/check-credentials-repository-impl'; +import { CredentialsRepositoryImpl } from 'src/auth/infrastructure/persistence/credentials-repository-impl'; import { PayloadEntity } from 'src/auth/infrastructure/entities/payload-entity'; -describe('CheckCredentialsRepositoryImpl', () => { - let repo: CheckCredentialsRepositoryImpl; +describe('CredentialsRepositoryImpl', () => { + let repo: CredentialsRepositoryImpl; let mockConn: any; beforeEach(() => { @@ -10,7 +10,7 @@ describe('CheckCredentialsRepositoryImpl', () => { query: jest.fn(), }; - repo = new CheckCredentialsRepositoryImpl(mockConn); + repo = new CredentialsRepositoryImpl(mockConn); }); it('should be defined', () => { @@ -51,4 +51,23 @@ describe('CheckCredentialsRepositoryImpl', () => { repo.checkCredentials('wronguser', 'password'), ).rejects.toThrow('User not found'); }); + + it('should call query with correct parameters when changing credentials', async () => { + mockConn.query.mockResolvedValue({}); + + await repo.changeCredentials('testuser', 'newPassword', true); + + expect(mockConn.query).toHaveBeenCalledWith( + 'UPDATE "user" SET password = $1, first_access = $2 WHERE username = $3', + ['newPassword', true, 'testuser'], + ); + }); + + it('should propagate errors from the database', async () => { + mockConn.query.mockRejectedValue(new Error('DB error')); + + await expect( + repo.changeCredentials('testuser', 'newPassword', true), + ).rejects.toThrow('DB error'); + }); }); diff --git a/backend/test/unit/notifications/adapters/in/notification-event.controller.spec.ts b/backend/test/unit/notifications/adapters/in/notification-event.controller.spec.ts index 90ca078c..c1706fa5 100644 --- a/backend/test/unit/notifications/adapters/in/notification-event.controller.spec.ts +++ b/backend/test/unit/notifications/adapters/in/notification-event.controller.spec.ts @@ -44,9 +44,9 @@ describe('EventNotificationController', () => { expect(notifyService.notifyAlarmWard).toHaveBeenCalledTimes(1); expect(notifyService.notifyAlarmWard).toHaveBeenCalledWith({ alarm: expect.objectContaining({ - alarm_rule_id: 'rule-10', - ward_id: 8, - alarm_event_id: 'event-10', + alarmRuleId: 'rule-10', + wardId: 8, + alarmEventId: 'event-10', }), }); }); diff --git a/backend/test/unit/notifications/adapters/out/notifications.adapter.spec.ts b/backend/test/unit/notifications/adapters/out/notifications.adapter.spec.ts index 5adec082..c2c5087a 100644 --- a/backend/test/unit/notifications/adapters/out/notifications.adapter.spec.ts +++ b/backend/test/unit/notifications/adapters/out/notifications.adapter.spec.ts @@ -17,7 +17,7 @@ describe('NotificationsAdapter', () => { notifyAlarmWard: jest.fn(), notifyAlarmResolution: jest.fn(), writeNotification: jest.fn(), - } as any; + }; adapter = new NotificationsAdapter(notificationsRepository); }); @@ -25,10 +25,9 @@ describe('NotificationsAdapter', () => { describe('notifyAlarmWard', () => { it('should call notifyAlarmWard on repository with correct parameters', async () => { const mockAlarm = { - rule_id: 'rule-1', - ward_id: 5, - priority: 1, - description: 'Test Alarm', + alarmRuleId: 'rule-1', + wardId: 5, + alarmEventId: 'event-1', } as any; const cmd: NotifyAlarmWardCmd = { @@ -41,7 +40,7 @@ describe('NotificationsAdapter', () => { expect(notificationsRepository.notifyAlarmWard).toHaveBeenCalledTimes(1); const callArgs = notificationsRepository.notifyAlarmWard.mock.calls[0]; - expect(callArgs[0]).toBe(5); // ward_id + expect(callArgs[0]).toBe(5); // wardId expect(callArgs[1]).toBeInstanceOf(CheckAlarmRuleResDto); }); diff --git a/backend/test/unit/users/application/services/users.service.spec.ts b/backend/test/unit/users/application/services/users.service.spec.ts index bdfeb8c4..fce2b5ed 100644 --- a/backend/test/unit/users/application/services/users.service.spec.ts +++ b/backend/test/unit/users/application/services/users.service.spec.ts @@ -1,15 +1,20 @@ import { TestingModule, Test } from '@nestjs/testing'; +import { UsersService } from 'src/users/application/services/users.service'; + import { CONVERT_BASE_64_PORT } from 'src/users/infrastructure/convert-base-64-impl/convert-base-64-impl'; import { HASH_PASSWORD_PORT } from 'src/users/infrastructure/hash-password-impl/hash-password-impl'; import { GENERATE_PASSWORD_PORT } from 'src/users/infrastructure/password-generator/generate-password-impl'; + import { CREATE_USER_PORT } from 'src/users/application/ports/out/create-user-port.interface'; import { DELETE_USER_PORT } from 'src/users/application/ports/out/delete-user-port.interface'; import { FIND_ALL_AVAILABLE_USERS_PORT } from 'src/users/application/ports/out/find-all-available-users-port.interface'; import { FIND_ALL_USERS_PORT } from 'src/users/application/ports/out/find-all-users-port.interface'; import { UPDATE_USER_PORT } from 'src/users/application/ports/out/update-user-port.interface'; -import { UsersService } from 'src/users/application/services/users.service'; import { FIND_USER_BY_ID_PORT } from 'src/users/application/ports/out/find-user-by-id-port.interface'; +import { User } from 'src/users/domain/user'; +import { CreateUserCmd } from 'src/users/application/commands/create-user-cmd'; + describe('UsersService', () => { let service: UsersService; @@ -62,44 +67,67 @@ describe('UsersService', () => { }); it('should call createUserPort.createUser with correct args', async () => { - const cmd = { username: 'username', surname: 'surname', name: 'name' }; + const cmd = new CreateUserCmd('username', 'surname', 'name'); + mockGeneratePassword.generatePassword.mockReturnValue('tempPassword'); mockHashPassword.hashPassword.mockReturnValue('hashedTempPassword'); - mockUserRepository.createUser.mockResolvedValue({ - id: 1, - username: 'username', - surname: 'surname', - name: 'name', - role: 'user', - }); - mockConvertBase64.toBase64.mockReturnValue('base64TempPassword'); - await service.createUser(cmd); + mockUserRepository.createUser.mockResolvedValue( + new User(1, 'username', 'surname', 'name', 'user'), + ); - expect(mockUserRepository.createUser).toHaveBeenCalledWith({ - username: 'username', - surname: 'surname', - name: 'name', - tempPassword: 'hashedTempPassword', - }); + mockConvertBase64.toBase64.mockReturnValue('base64TempPassword'); + + const result = await service.createUser(cmd); + + expect(mockUserRepository.createUser).toHaveBeenCalledWith( + expect.objectContaining({ + username: 'username', + surname: 'surname', + name: 'name', + tempPassword: 'hashedTempPassword', + }), + ); + + expect(result).toBeDefined(); + expect(result.getId()).toBe(1); + expect(result.getUsername()).toBe('username'); + expect(result.getTempPassword()).toBe('base64TempPassword'); }); it('should call findAllUsersPort.findAllUsers', async () => { - await service.findAllUsers(); + mockUserRepository.findAllUsers.mockResolvedValue([ + new User(1, 'username', 'surname', 'name', 'user'), + ]); + + const result = await service.findAllUsers(); + expect(mockUserRepository.findAllUsers).toHaveBeenCalled(); + expect(result.length).toBe(1); }); it('should call findAllAvailableUsersPort.findAllAvailableUsers', async () => { - await service.findAllAvailableUsers(); + mockUserRepository.findAllAvailableUsers.mockResolvedValue([ + new User(1, 'username', 'surname', 'name', 'user'), + ]); + + const result = await service.findAllAvailableUsers(); + expect(mockUserRepository.findAllAvailableUsers).toHaveBeenCalled(); + expect(result.length).toBe(1); }); it('should call findUserByIdPort.findUserById', async () => { - const cmd = { - id: 1, - }; - await service.findUserById(cmd); - expect(mockUserRepository.findUserById).toHaveBeenCalled(); + const cmd = { id: 1 }; + + mockUserRepository.findUserById.mockResolvedValue( + new User(1, 'username', 'surname', 'name', 'user'), + ); + + const result = await service.findUserById(cmd); + + expect(mockUserRepository.findUserById).toHaveBeenCalledWith(cmd); + expect(result?.getId()).toBe(1); }); it('should call updateUserPort.updateUser with correct args', async () => { @@ -109,13 +137,22 @@ describe('UsersService', () => { surname: 'surname', name: 'name', }; - await service.updateUser(cmd); + + mockUserRepository.updateUser.mockResolvedValue( + new User(1, 'username', 'surname', 'name', 'user'), + ); + + const result = await service.updateUser(cmd); + expect(mockUserRepository.updateUser).toHaveBeenCalledWith(cmd); + expect(result.getId()).toBe(1); }); it('should call deleteUserPort.deleteUser with correct args', async () => { const cmd = { id: 1 }; + await service.deleteUser(cmd); + expect(mockUserRepository.deleteUser).toHaveBeenCalledWith(cmd); }); -}); +}); \ No newline at end of file diff --git a/backend/test/unit/validation/pipe/validation.pipe.spec.ts b/backend/test/unit/validation/pipe/validation.pipe.spec.ts index 022cac9a..46aa89e3 100644 --- a/backend/test/unit/validation/pipe/validation.pipe.spec.ts +++ b/backend/test/unit/validation/pipe/validation.pipe.spec.ts @@ -1,7 +1,82 @@ +import { ArgumentMetadata, BadRequestException } from '@nestjs/common'; import { ValidationPipe } from 'src/validation/pipe/validation.pipe'; +import { IsString, IsInt } from 'class-validator'; + +class TestDto { + @IsString() + name!: string; + + @IsInt() + age!: number; +} describe('ValidationPipe', () => { + let pipe: ValidationPipe; + + beforeEach(() => { + pipe = new ValidationPipe(); + }); + it('should be defined', () => { - expect(new ValidationPipe()).toBeDefined(); + expect(pipe).toBeDefined(); + }); + + it('should return value if no metatype', async () => { + const value = { test: 'data' }; + const metadata: ArgumentMetadata = { + type: 'body', + metatype: undefined, + data: '', + }; + + await expect(pipe.transform(value, metadata)).resolves.toEqual(value); + }); + + it('should skip validation for primitive types', async () => { + const value = 'string'; + const metadata: ArgumentMetadata = { + type: 'body', + metatype: String, + data: '', + }; + + await expect(pipe.transform(value, metadata)).resolves.toEqual(value); + }); + + it('should pass validation for valid DTO', async () => { + const value = { name: 'Mario', age: 30 }; + const metadata: ArgumentMetadata = { + type: 'body', + metatype: TestDto, + data: '', + }; + + await expect(pipe.transform(value, metadata)).resolves.toEqual(value); + }); + + it('should throw error for invalid DTO', async () => { + const value = { name: 123, age: 'wrong' }; + const metadata: ArgumentMetadata = { + type: 'body', + metatype: TestDto, + data: '', + }; + + await expect(pipe.transform(value, metadata)).rejects.toThrow( + BadRequestException, + ); + }); + + it('should throw error when required field is missing', async () => { + const value = { age: 25 }; + const metadata: ArgumentMetadata = { + type: 'body', + metatype: TestDto, + data: '', + }; + + await expect(pipe.transform(value, metadata)).rejects.toThrow( + BadRequestException, + ); }); }); diff --git a/backend/test/unit/wards/adapters/out/add-plant-to-ward-adapter.spec.ts b/backend/test/unit/wards/adapters/out/add-plant-to-ward-adapter.spec.ts deleted file mode 100644 index ba4b4e86..00000000 --- a/backend/test/unit/wards/adapters/out/add-plant-to-ward-adapter.spec.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { AddPlantToWardCmd } from 'src/wards/application/commands/add-plant-to-ward-cmd'; -import { AddPlantToWardAdapter } from 'src/wards/adapters/out/add-plant-to-ward-adapter'; - -describe('AddPlantToWardAdapter', () => { - let adapter: AddPlantToWardAdapter; - - const mockRepo = { - addPlantToWard: jest.fn(), - }; - - beforeEach(() => { - mockRepo.addPlantToWard.mockReset(); - adapter = new AddPlantToWardAdapter(mockRepo); - }); - - it('should be defined', () => { - expect(adapter).toBeDefined(); - }); - - it('should call repository.addPlantToWard with correct args', async () => { - const cmd = new AddPlantToWardCmd(1, 'id'); - mockRepo.addPlantToWard.mockResolvedValue({ - id: 1, - name: 'new name', - }); - - await adapter.addPlantToWard(cmd); - - expect(mockRepo.addPlantToWard).toHaveBeenCalledWith(1, 'id'); - }); - - it('should propagate repository errors', async () => { - const cmd = new AddPlantToWardCmd(1, 'id'); - const error = new Error('repository failure'); - mockRepo.addPlantToWard.mockRejectedValue(error); - - await expect(adapter.addPlantToWard(cmd)).rejects.toThrow(error); - }); -}); diff --git a/backend/test/unit/wards/adapters/out/add-user-to-ward-adapter.spec.ts b/backend/test/unit/wards/adapters/out/add-user-to-ward-adapter.spec.ts deleted file mode 100644 index 10a93aae..00000000 --- a/backend/test/unit/wards/adapters/out/add-user-to-ward-adapter.spec.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { AddUserToWardCmd } from 'src/wards/application/commands/add-user-to-ward-cmd'; -import { AddUserToWardAdapter } from 'src/wards/adapters/out/add-user-to-ward-adapter'; - -describe('AddUserToWardAdapter', () => { - let adapter: AddUserToWardAdapter; - - const mockRepo = { - addUserToWard: jest.fn(), - }; - - beforeEach(() => { - mockRepo.addUserToWard.mockReset(); - adapter = new AddUserToWardAdapter(mockRepo); - }); - - it('should be defined', () => { - expect(adapter).toBeDefined(); - }); - - it('should call repository.addUserToWard with correct args', async () => { - const cmd = new AddUserToWardCmd(1, 1); - mockRepo.addUserToWard.mockResolvedValue({ - id: 1, - name: 'name', - }); - - await adapter.addUserToWard(cmd); - - expect(mockRepo.addUserToWard).toHaveBeenCalledWith(1, 1); - }); - - it('should propagate repository errors', async () => { - const cmd = new AddUserToWardCmd(1, 1); - const error = new Error('repository failure'); - mockRepo.addUserToWard.mockRejectedValue(error); - - await expect(adapter.addUserToWard(cmd)).rejects.toThrow(error); - }); -}); diff --git a/backend/test/unit/wards/adapters/out/create-ward-adapter.spec.ts b/backend/test/unit/wards/adapters/out/create-ward-adapter.spec.ts deleted file mode 100644 index c87a1fdd..00000000 --- a/backend/test/unit/wards/adapters/out/create-ward-adapter.spec.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { CreateWardCmd } from 'src/wards/application/commands/create-ward-cmd'; -import { CreateWardAdapter } from 'src/wards/adapters/out/create-ward-adapter'; - -describe('CreateWardAdapter', () => { - let adapter: CreateWardAdapter; - - const mockRepo = { - createWard: jest.fn(), - }; - - beforeEach(() => { - mockRepo.createWard.mockReset(); - adapter = new CreateWardAdapter(mockRepo); - }); - - it('should be defined', () => { - expect(adapter).toBeDefined(); - }); - - it('should call repository.createWard with correct args', async () => { - const cmd = new CreateWardCmd('name'); - mockRepo.createWard.mockResolvedValue({ - id: 1, - name: 'name', - }); - - await adapter.createWard(cmd); - - expect(mockRepo.createWard).toHaveBeenCalledWith('name'); - }); - - it('should propagate repository errors', async () => { - const cmd = new CreateWardCmd('name'); - const error = new Error('repository failure'); - mockRepo.createWard.mockRejectedValue(error); - - await expect(adapter.createWard(cmd)).rejects.toThrow(error); - }); -}); diff --git a/backend/test/unit/wards/adapters/out/delete-ward-adapter.spec.ts b/backend/test/unit/wards/adapters/out/delete-ward-adapter.spec.ts deleted file mode 100644 index 94519d9d..00000000 --- a/backend/test/unit/wards/adapters/out/delete-ward-adapter.spec.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { DeleteWardCmd } from 'src/wards/application/commands/delete-ward-cmd'; -import { DeleteWardAdapter } from 'src/wards/adapters/out/delete-ward-adapter'; - -describe('DeleteWardAdapter', () => { - let adapter: DeleteWardAdapter; - - const deleteWardRepository = { - deleteWard: jest.fn(), - }; - - beforeEach(() => { - deleteWardRepository.deleteWard.mockReset(); - adapter = new DeleteWardAdapter(deleteWardRepository); - }); - - it('should be defined', () => { - expect(adapter).toBeDefined(); - }); - - it('should call repository.deleteWard with correct args', async () => { - const cmd = new DeleteWardCmd(1); - deleteWardRepository.deleteWard.mockResolvedValue(undefined); - - await adapter.deleteWard(cmd); - - expect(deleteWardRepository.deleteWard).toHaveBeenCalledWith(1); - }); - - it('should propagate repository errors', async () => { - const cmd = new DeleteWardCmd(1); - const error = new Error('repository failure'); - deleteWardRepository.deleteWard.mockRejectedValue(error); - - await expect(adapter.deleteWard(cmd)).rejects.toThrow(error); - }); -}); diff --git a/backend/test/unit/wards/adapters/out/find-all-plants-by-ward-id-adapter.spec.ts b/backend/test/unit/wards/adapters/out/find-all-plants-by-ward-id-adapter.spec.ts deleted file mode 100644 index ca399984..00000000 --- a/backend/test/unit/wards/adapters/out/find-all-plants-by-ward-id-adapter.spec.ts +++ /dev/null @@ -1,55 +0,0 @@ -import { Plant } from 'src/plant/domain/models/plant.model'; -import { FindAllPlantsByWardIdCmd } from 'src/wards/application/commands/find-all-plants-by-ward-id-cmd'; -import { FindAllPlantsByWardIdAdapter } from 'src/wards/adapters/out/find-all-plants-by-ward-id-adapter'; - -describe('FindAllPlantsByWardIdAdapter', () => { - let adapter: FindAllPlantsByWardIdAdapter; - - const mockRepo = { - findAllPlantsByWardId: jest.fn(), - }; - - beforeEach(() => { - mockRepo.findAllPlantsByWardId.mockReset(); - adapter = new FindAllPlantsByWardIdAdapter(mockRepo); - }); - - it('should be defined', () => { - expect(adapter).toBeDefined(); - }); - - it('should call repository.findAllPlantsByWardId with correct args', async () => { - const cmd = new FindAllPlantsByWardIdCmd(1); - mockRepo.findAllPlantsByWardId.mockResolvedValue([]); - - await adapter.findAllPlantsByWardId(cmd); - - expect(mockRepo.findAllPlantsByWardId).toHaveBeenCalledWith(1); - }); - - it('should map PlantEntity to Plant', async () => { - const mockEntities = [ - { id: 'id1', name: 'plant1' }, - { id: 'id2', name: 'plant2' }, - ]; - - mockRepo.findAllPlantsByWardId.mockResolvedValue(mockEntities); - - const result = await adapter.findAllPlantsByWardId( - new FindAllPlantsByWardIdCmd(1), - ); - - expect(result).toEqual([ - new Plant('id1', 'plant1'), - new Plant('id2', 'plant2'), - ]); - }); - - it('should propagate repository errors', async () => { - const cmd = new FindAllPlantsByWardIdCmd(1); - const error = new Error('repository failure'); - mockRepo.findAllPlantsByWardId.mockRejectedValue(error); - - await expect(adapter.findAllPlantsByWardId(cmd)).rejects.toThrow(error); - }); -}); diff --git a/backend/test/unit/wards/adapters/out/find-all-users-by-ward-id-adapter.spec.ts b/backend/test/unit/wards/adapters/out/find-all-users-by-ward-id-adapter.spec.ts deleted file mode 100644 index 2a967f0d..00000000 --- a/backend/test/unit/wards/adapters/out/find-all-users-by-ward-id-adapter.spec.ts +++ /dev/null @@ -1,52 +0,0 @@ -import { FindAllUsersByWardIdCmd } from 'src/wards/application/commands/find-all-users-by-ward-id-cmd'; -import { User } from 'src/wards/domain/user'; -import { FindAllUsersByWardIdAdapter } from 'src/wards/adapters/out/find-all-users-by-ward-id-adapter'; - -describe('FindAllUsersByWardIdAdapter', () => { - let adapter: FindAllUsersByWardIdAdapter; - - const mockRepo = { - findAllUsersByWardId: jest.fn(), - }; - - beforeEach(() => { - mockRepo.findAllUsersByWardId.mockReset(); - adapter = new FindAllUsersByWardIdAdapter(mockRepo); - }); - - it('should be defined', () => { - expect(adapter).toBeDefined(); - }); - - it('should call repository.findAllUsersByWardId with correct args', async () => { - const cmd = new FindAllUsersByWardIdCmd(1); - mockRepo.findAllUsersByWardId.mockResolvedValue([]); - - await adapter.findAllUsersByWardId(cmd); - - expect(mockRepo.findAllUsersByWardId).toHaveBeenCalledWith(1); - }); - - it('should map UserEntity to User', async () => { - const mockEntities = [ - { id: 1, username: 'user1' }, - { id: 2, username: 'user2' }, - ]; - - mockRepo.findAllUsersByWardId.mockResolvedValue(mockEntities); - - const result = await adapter.findAllUsersByWardId( - new FindAllUsersByWardIdCmd(1), - ); - - expect(result).toEqual([new User(1, 'user1'), new User(2, 'user2')]); - }); - - it('should propagate repository errors', async () => { - const cmd = new FindAllUsersByWardIdCmd(1); - const error = new Error('repository failure'); - mockRepo.findAllUsersByWardId.mockRejectedValue(error); - - await expect(adapter.findAllUsersByWardId(cmd)).rejects.toThrow(error); - }); -}); diff --git a/backend/test/unit/wards/adapters/out/find-all-wards-adapter.spec.ts b/backend/test/unit/wards/adapters/out/find-all-wards-adapter.spec.ts deleted file mode 100644 index 16cc9ac4..00000000 --- a/backend/test/unit/wards/adapters/out/find-all-wards-adapter.spec.ts +++ /dev/null @@ -1,47 +0,0 @@ -import { Ward } from 'src/wards/domain/ward'; -import { FindAllWardsAdapter } from 'src/wards/adapters/out/find-all-wards-adapter'; - -describe('FindAllWardsAdapter', () => { - let adapter: FindAllWardsAdapter; - - const mockRepo = { - findAllWards: jest.fn(), - }; - - beforeEach(() => { - mockRepo.findAllWards.mockReset(); - adapter = new FindAllWardsAdapter(mockRepo); - }); - - it('should be defined', () => { - expect(adapter).toBeDefined(); - }); - - it('should call repository.findAllWards with correct args', async () => { - mockRepo.findAllWards.mockResolvedValue([]); - - await adapter.findAllWards(); - - expect(mockRepo.findAllWards).toHaveBeenCalledWith(); - }); - - it('should map WardEntity to Ward', async () => { - const mockEntities = [ - { id: 1, name: 'ward1' }, - { id: 2, name: 'ward2' }, - ]; - - mockRepo.findAllWards.mockResolvedValue(mockEntities); - - const result = await adapter.findAllWards(); - - expect(result).toEqual([new Ward(1, 'ward1'), new Ward(2, 'ward2')]); - }); - - it('should propagate repository errors', async () => { - const error = new Error('repository failure'); - mockRepo.findAllWards.mockRejectedValue(error); - - await expect(adapter.findAllWards()).rejects.toThrow(error); - }); -}); diff --git a/backend/test/unit/wards/adapters/out/remove-plant-from-ward-adapter.spec.ts b/backend/test/unit/wards/adapters/out/remove-plant-from-ward-adapter.spec.ts deleted file mode 100644 index bf325617..00000000 --- a/backend/test/unit/wards/adapters/out/remove-plant-from-ward-adapter.spec.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { RemovePlantFromWardCmd } from 'src/wards/application/commands/remove-plant-from-ward-cmd'; -import { RemovePlantFromWardAdapter } from 'src/wards/adapters/out/remove-plant-from-ward-adapter'; - -describe('RemovePlantFromWardAdapter', () => { - let adapter: RemovePlantFromWardAdapter; - - const mockRepo = { - removePlantFromWard: jest.fn(), - }; - - beforeEach(() => { - mockRepo.removePlantFromWard.mockReset(); - adapter = new RemovePlantFromWardAdapter(mockRepo); - }); - - it('should be defined', () => { - expect(adapter).toBeDefined(); - }); - - it('should call repository.removePlantFromWard with correct args', async () => { - const cmd = new RemovePlantFromWardCmd('id'); - mockRepo.removePlantFromWard.mockResolvedValue(undefined); - - await adapter.removePlantFromWard(cmd); - - expect(mockRepo.removePlantFromWard).toHaveBeenCalledWith('id'); - }); - - it('should propagate repository errors', async () => { - const cmd = new RemovePlantFromWardCmd('id'); - const error = new Error('repository failure'); - mockRepo.removePlantFromWard.mockRejectedValue(error); - - await expect(adapter.removePlantFromWard(cmd)).rejects.toThrow(error); - }); -}); diff --git a/backend/test/unit/wards/adapters/out/remove-user-from-ward-adapter.spec.ts b/backend/test/unit/wards/adapters/out/remove-user-from-ward-adapter.spec.ts deleted file mode 100644 index c00d3ef4..00000000 --- a/backend/test/unit/wards/adapters/out/remove-user-from-ward-adapter.spec.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { RemoveUserFromWardCmd } from 'src/wards/application/commands/remove-user-from-ward-cmd'; -import { RemoveUserFromWardAdapter } from 'src/wards/adapters/out/remove-user-from-ward-adapter'; - -describe('RemoveUserFromWardAdapter', () => { - let adapter: RemoveUserFromWardAdapter; - - const mockRepo = { - removeUserFromWard: jest.fn(), - }; - - beforeEach(() => { - mockRepo.removeUserFromWard.mockReset(); - adapter = new RemoveUserFromWardAdapter(mockRepo); - }); - - it('should be defined', () => { - expect(adapter).toBeDefined(); - }); - - it('should call repository.removeUserFromWard with correct args', async () => { - const cmd = new RemoveUserFromWardCmd(1, 1); - mockRepo.removeUserFromWard.mockResolvedValue(undefined); - - await adapter.removeUserFromWard(cmd); - - expect(mockRepo.removeUserFromWard).toHaveBeenCalledWith(1, 1); - }); - - it('should propagate repository errors', async () => { - const cmd = new RemoveUserFromWardCmd(1, 1); - const error = new Error('repository failure'); - mockRepo.removeUserFromWard.mockRejectedValue(error); - - await expect(adapter.removeUserFromWard(cmd)).rejects.toThrow(error); - }); -}); diff --git a/backend/test/unit/wards/adapters/out/update-ward-adapter.spec.ts b/backend/test/unit/wards/adapters/out/update-ward-adapter.spec.ts deleted file mode 100644 index acbc2381..00000000 --- a/backend/test/unit/wards/adapters/out/update-ward-adapter.spec.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { UpdateWardCmd } from 'src/wards/application/commands/update-ward-cmd'; -import { UpdateWardAdapter } from 'src/wards/adapters/out/update-ward-adapter'; - -describe('UpdateWardAdapter', () => { - let adapter: UpdateWardAdapter; - - const mockRepo = { - updateWard: jest.fn(), - }; - - beforeEach(() => { - mockRepo.updateWard.mockReset(); - adapter = new UpdateWardAdapter(mockRepo); - }); - - it('should be defined', () => { - expect(adapter).toBeDefined(); - }); - - it('should call repository.updateWard with correct args', async () => { - const cmd = new UpdateWardCmd(1, 'new name'); - mockRepo.updateWard.mockResolvedValue({ - id: 1, - name: 'new name', - }); - - await adapter.updateWard(cmd); - - expect(mockRepo.updateWard).toHaveBeenCalledWith(1, 'new name'); - }); - - it('should propagate repository errors', async () => { - const cmd = new UpdateWardCmd(1, 'new name'); - const error = new Error('repository failure'); - mockRepo.updateWard.mockRejectedValue(error); - - await expect(adapter.updateWard(cmd)).rejects.toThrow(error); - }); -}); diff --git a/backend/test/unit/wards/adapters/out/wards-persistence-adapter.spec.ts b/backend/test/unit/wards/adapters/out/wards-persistence-adapter.spec.ts new file mode 100644 index 00000000..c3a40a6e --- /dev/null +++ b/backend/test/unit/wards/adapters/out/wards-persistence-adapter.spec.ts @@ -0,0 +1,115 @@ +import { CreateWardCmd } from 'src/wards/application/commands/create-ward-cmd'; +import { WardsPersistenceAdapter } from '../../../../../src/wards/adapters/out/wards-persistence-adapter'; +import { DeleteWardCmd } from 'src/wards/application/commands/delete-ward-cmd'; +import { Ward } from 'src/wards/domain/ward'; +import { UpdateWardCmd } from 'src/wards/application/commands/update-ward-cmd'; + +describe('WardsPersistenceAdapter', () => { + let adapter: WardsPersistenceAdapter; + + const mockRepo = { + createWard: jest.fn(), + findAllWards: jest.fn(), + updateWard: jest.fn(), + deleteWard: jest.fn(), + }; + + beforeEach(() => { + mockRepo.createWard.mockReset(); + mockRepo.findAllWards.mockReset(); + mockRepo.updateWard.mockReset(); + mockRepo.deleteWard.mockReset(); + adapter = new WardsPersistenceAdapter(mockRepo); + }); + + it('should be defined', () => { + expect(adapter).toBeDefined(); + }); + + it('should call repository.createWard with correct args', async () => { + const cmd = new CreateWardCmd('name'); + mockRepo.createWard.mockResolvedValue({ + id: 1, + name: 'name', + }); + + await adapter.createWard(cmd); + + expect(mockRepo.createWard).toHaveBeenCalledWith('name'); + }); + + it('should propagate repository errors', async () => { + const cmd = new CreateWardCmd('name'); + const error = new Error('repository failure'); + mockRepo.createWard.mockRejectedValue(error); + + await expect(adapter.createWard(cmd)).rejects.toThrow(error); + }); + + it('should call repository.findAllWards with correct args', async () => { + mockRepo.findAllWards.mockResolvedValue([]); + + await adapter.findAllWards(); + + expect(mockRepo.findAllWards).toHaveBeenCalledWith(); + }); + + it('should map WardEntity to Ward', async () => { + const mockEntities = [ + { id: 1, name: 'ward1' }, + { id: 2, name: 'ward2' }, + ]; + + mockRepo.findAllWards.mockResolvedValue(mockEntities); + + const result = await adapter.findAllWards(); + + expect(result).toEqual([new Ward(1, 'ward1'), new Ward(2, 'ward2')]); + }); + + it('should propagate repository errors', async () => { + const error = new Error('repository failure'); + mockRepo.findAllWards.mockRejectedValue(error); + + await expect(adapter.findAllWards()).rejects.toThrow(error); + }); + + it('should call repository.updateWard with correct args', async () => { + const cmd = new UpdateWardCmd(1, 'new name'); + mockRepo.updateWard.mockResolvedValue({ + id: 1, + name: 'new name', + }); + + await adapter.updateWard(cmd); + + expect(mockRepo.updateWard).toHaveBeenCalledWith(1, 'new name'); + }); + + it('should propagate repository errors', async () => { + const cmd = new UpdateWardCmd(1, 'new name'); + const error = new Error('repository failure'); + mockRepo.updateWard.mockRejectedValue(error); + + await expect(adapter.updateWard(cmd)).rejects.toThrow(error); + }); + + it('should call repository.deleteWard with correct args', async () => { + const cmd = new DeleteWardCmd(1); + mockRepo.deleteWard.mockResolvedValue(undefined); + + await adapter.deleteWard(cmd); + + expect(mockRepo.deleteWard).toHaveBeenCalledWith(1); + }); + + it('should propagate repository errors', async () => { + const cmd = new DeleteWardCmd(1); + const error = new Error('repository failure'); + mockRepo.deleteWard.mockRejectedValue(error); + + await expect(adapter.deleteWard(cmd)).rejects.toThrow(error); + }); + + +}); diff --git a/backend/test/unit/wards/adapters/out/wards-plants-relationships-persistence-adapter.spec.ts b/backend/test/unit/wards/adapters/out/wards-plants-relationships-persistence-adapter.spec.ts new file mode 100644 index 00000000..47b26341 --- /dev/null +++ b/backend/test/unit/wards/adapters/out/wards-plants-relationships-persistence-adapter.spec.ts @@ -0,0 +1,98 @@ +import { AddPlantToWardCmd } from 'src/wards/application/commands/add-plant-to-ward-cmd'; +import { WardsPlantsRelationshipsPersistenceAdapter } from '../../../../../src/wards/adapters/out/wards-plants-relationships-persistence-adapter'; +import { Plant } from 'src/plant/domain/models/plant.model'; +import { FindAllPlantsByWardIdCmd } from 'src/wards/application/commands/find-all-plants-by-ward-id-cmd'; +import { RemovePlantFromWardCmd } from 'src/wards/application/commands/remove-plant-from-ward-cmd'; + +describe('WardsPlantsRelationshipsPersistenceAdapter', () => { + let adapter: WardsPlantsRelationshipsPersistenceAdapter; + + const mockRepo = { + addPlantToWard: jest.fn(), + findAllPlantsByWardId: jest.fn(), + removePlantFromWard: jest.fn(), + }; + + beforeEach(() => { + mockRepo.addPlantToWard.mockReset(); + mockRepo.findAllPlantsByWardId.mockReset(); + mockRepo.removePlantFromWard.mockReset(); + adapter = new WardsPlantsRelationshipsPersistenceAdapter(mockRepo); + }); + + it('should be defined', () => { + expect(adapter).toBeDefined(); + }); + + it('should call repository.addPlantToWard with correct args', async () => { + const cmd = new AddPlantToWardCmd(1, 'id'); + mockRepo.addPlantToWard.mockResolvedValue({ + id: 1, + name: 'new name', + }); + + await adapter.addPlantToWard(cmd); + + expect(mockRepo.addPlantToWard).toHaveBeenCalledWith(1, 'id'); + }); + + it('should propagate repository errors', async () => { + const cmd = new AddPlantToWardCmd(1, 'id'); + const error = new Error('repository failure'); + mockRepo.addPlantToWard.mockRejectedValue(error); + + await expect(adapter.addPlantToWard(cmd)).rejects.toThrow(error); + }); + + it('should call repository.findAllPlantsByWardId with correct args', async () => { + const cmd = new FindAllPlantsByWardIdCmd(1); + mockRepo.findAllPlantsByWardId.mockResolvedValue([]); + + await adapter.findAllPlantsByWardId(cmd); + + expect(mockRepo.findAllPlantsByWardId).toHaveBeenCalledWith(1); + }); + + it('should map PlantEntity to Plant', async () => { + const mockEntities = [ + { id: 'id1', name: 'plant1' }, + { id: 'id2', name: 'plant2' }, + ]; + + mockRepo.findAllPlantsByWardId.mockResolvedValue(mockEntities); + + const result = await adapter.findAllPlantsByWardId( + new FindAllPlantsByWardIdCmd(1), + ); + + expect(result).toEqual([ + new Plant('id1', 'plant1'), + new Plant('id2', 'plant2'), + ]); + }); + + it('should propagate repository errors', async () => { + const cmd = new FindAllPlantsByWardIdCmd(1); + const error = new Error('repository failure'); + mockRepo.findAllPlantsByWardId.mockRejectedValue(error); + + await expect(adapter.findAllPlantsByWardId(cmd)).rejects.toThrow(error); + }); + + it('should call repository.removePlantFromWard with correct args', async () => { + const cmd = new RemovePlantFromWardCmd('id'); + mockRepo.removePlantFromWard.mockResolvedValue(undefined); + + await adapter.removePlantFromWard(cmd); + + expect(mockRepo.removePlantFromWard).toHaveBeenCalledWith('id'); + }); + + it('should propagate repository errors', async () => { + const cmd = new RemovePlantFromWardCmd('id'); + const error = new Error('repository failure'); + mockRepo.removePlantFromWard.mockRejectedValue(error); + + await expect(adapter.removePlantFromWard(cmd)).rejects.toThrow(error); + }); +}); diff --git a/backend/test/unit/wards/adapters/out/wards-users-relationships-persistence-adapter.spec.ts b/backend/test/unit/wards/adapters/out/wards-users-relationships-persistence-adapter.spec.ts new file mode 100644 index 00000000..2dc89cf4 --- /dev/null +++ b/backend/test/unit/wards/adapters/out/wards-users-relationships-persistence-adapter.spec.ts @@ -0,0 +1,95 @@ +import { AddUserToWardCmd } from 'src/wards/application/commands/add-user-to-ward-cmd'; +import { WardsUsersRelationshipsPersistenceAdapter } from '../../../../../src/wards/adapters/out/wards-users-relationships-persistence-adapter'; +import { FindAllUsersByWardIdCmd } from 'src/wards/application/commands/find-all-users-by-ward-id-cmd'; +import { User } from 'src/wards/domain/user'; +import { RemoveUserFromWardCmd } from 'src/wards/application/commands/remove-user-from-ward-cmd'; + +describe('WardsUsersRelationshipsPersistenceAdapter', () => { + let adapter: WardsUsersRelationshipsPersistenceAdapter; + + const mockRepo = { + addUserToWard: jest.fn(), + findAllUsersByWardId: jest.fn(), + removeUserFromWard: jest.fn(), + }; + + beforeEach(() => { + mockRepo.addUserToWard.mockReset(); + mockRepo.findAllUsersByWardId.mockReset(); + mockRepo.removeUserFromWard.mockReset(); + adapter = new WardsUsersRelationshipsPersistenceAdapter(mockRepo); + }); + + it('should be defined', () => { + expect(adapter).toBeDefined(); + }); + + it('should call repository.addUserToWard with correct args', async () => { + const cmd = new AddUserToWardCmd(1, 1); + mockRepo.addUserToWard.mockResolvedValue({ + id: 1, + name: 'name', + }); + + await adapter.addUserToWard(cmd); + + expect(mockRepo.addUserToWard).toHaveBeenCalledWith(1, 1); + }); + + it('should propagate repository errors', async () => { + const cmd = new AddUserToWardCmd(1, 1); + const error = new Error('repository failure'); + mockRepo.addUserToWard.mockRejectedValue(error); + + await expect(adapter.addUserToWard(cmd)).rejects.toThrow(error); + }); + + it('should call repository.findAllUsersByWardId with correct args', async () => { + const cmd = new FindAllUsersByWardIdCmd(1); + mockRepo.findAllUsersByWardId.mockResolvedValue([]); + + await adapter.findAllUsersByWardId(cmd); + + expect(mockRepo.findAllUsersByWardId).toHaveBeenCalledWith(1); + }); + + it('should map UserEntity to User', async () => { + const mockEntities = [ + { id: 1, username: 'user1' }, + { id: 2, username: 'user2' }, + ]; + + mockRepo.findAllUsersByWardId.mockResolvedValue(mockEntities); + + const result = await adapter.findAllUsersByWardId( + new FindAllUsersByWardIdCmd(1), + ); + + expect(result).toEqual([new User(1, 'user1'), new User(2, 'user2')]); + }); + + it('should propagate repository errors', async () => { + const cmd = new FindAllUsersByWardIdCmd(1); + const error = new Error('repository failure'); + mockRepo.findAllUsersByWardId.mockRejectedValue(error); + + await expect(adapter.findAllUsersByWardId(cmd)).rejects.toThrow(error); + }); + + it('should call repository.removeUserFromWard with correct args', async () => { + const cmd = new RemoveUserFromWardCmd(1, 1); + mockRepo.removeUserFromWard.mockResolvedValue(undefined); + + await adapter.removeUserFromWard(cmd); + + expect(mockRepo.removeUserFromWard).toHaveBeenCalledWith(1, 1); + }); + + it('should propagate repository errors', async () => { + const cmd = new RemoveUserFromWardCmd(1, 1); + const error = new Error('repository failure'); + mockRepo.removeUserFromWard.mockRejectedValue(error); + + await expect(adapter.removeUserFromWard(cmd)).rejects.toThrow(error); + }); +}); diff --git a/backend/test/unit/wards/application/services/ward.service.spec.ts b/backend/test/unit/wards/application/services/ward.service.spec.ts index d60c0065..30219bd1 100644 --- a/backend/test/unit/wards/application/services/ward.service.spec.ts +++ b/backend/test/unit/wards/application/services/ward.service.spec.ts @@ -1,8 +1,8 @@ import { Test, TestingModule } from '@nestjs/testing'; -import { CREATE_WARD_PORT } from 'src/wards/adapters/out/create-ward-adapter'; -import { DELETE_WARD_PORT } from 'src/wards/adapters/out/delete-ward-adapter'; -import { FIND_ALL_WARDS_PORT } from 'src/wards/adapters/out/find-all-wards-adapter'; -import { UPDATE_WARD_PORT } from 'src/wards/adapters/out/update-ward-adapter'; +import { CREATE_WARD_PORT } from 'src/wards/application/ports/out/create-ward-port.interface'; +import { DELETE_WARD_PORT } from 'src/wards/application/ports/out/delete-ward-port.interface'; +import { FIND_ALL_WARDS_PORT } from 'src/wards/application/ports/out/find-all-wards-port.interface'; +import { UPDATE_WARD_PORT } from 'src/wards/application/ports/out/update-ward-port.interface'; import { WardService } from 'src/wards/application/services/ward.service'; describe('WardService', () => { diff --git a/backend/test/unit/wards/application/services/wards-plants-relationships.service.spec.ts b/backend/test/unit/wards/application/services/wards-plants-relationships.service.spec.ts index 66a4247b..ebdee65f 100644 --- a/backend/test/unit/wards/application/services/wards-plants-relationships.service.spec.ts +++ b/backend/test/unit/wards/application/services/wards-plants-relationships.service.spec.ts @@ -1,8 +1,8 @@ import { Test, TestingModule } from '@nestjs/testing'; +import { ADD_PLANT_TO_WARD_PORT } from 'src/wards/application/ports/out/add-plant-to-ward-port.interface'; +import { FIND_ALL_PLANTS_BY_WARD_ID_PORT } from 'src/wards/application/ports/out/find-all-plants-by-ward-id-port.interface'; +import { REMOVE_PLANT_FROM_WARD_PORT } from 'src/wards/application/ports/out/remove-plant-from-ward-port.interface'; import { WardsPlantsRelationshipsService } from 'src/wards/application/services/wards-plants-relationships.service'; -import { ADD_PLANT_TO_WARD_PORT } from 'src/wards/adapters/out/add-plant-to-ward-adapter'; -import { FIND_ALL_PLANTS_BY_WARD_ID_PORT } from 'src/wards/adapters/out/find-all-plants-by-ward-id-adapter'; -import { REMOVE_PLANT_FROM_WARD_PORT } from 'src/wards/adapters/out/remove-plant-from-ward-adapter'; describe('WardsPlantsRelationshipsService', () => { let service: WardsPlantsRelationshipsService; diff --git a/backend/test/unit/wards/application/services/wards-users-relationships.service.spec.ts b/backend/test/unit/wards/application/services/wards-users-relationships.service.spec.ts index d598bdeb..852809e8 100644 --- a/backend/test/unit/wards/application/services/wards-users-relationships.service.spec.ts +++ b/backend/test/unit/wards/application/services/wards-users-relationships.service.spec.ts @@ -1,8 +1,8 @@ import { Test, TestingModule } from '@nestjs/testing'; +import { ADD_USER_TO_WARD_PORT } from 'src/wards/application/ports/out/add-user-to-ward-port.interface'; +import { FIND_ALL_USERS_BY_WARD_ID_PORT } from 'src/wards/application/ports/out/find-all-users-by-ward-id-port.interface'; +import { REMOVE_USER_FROM_WARD_PORT } from 'src/wards/application/ports/out/remove-user-from-ward-port.interface'; import { WardsUsersRelationshipsService } from 'src/wards/application/services/wards-users-relationships.service'; -import { ADD_USER_TO_WARD_PORT } from 'src/wards/adapters/out/add-user-to-ward-adapter'; -import { FIND_ALL_USERS_BY_WARD_ID_PORT } from 'src/wards/adapters/out/find-all-users-by-ward-id-adapter'; -import { REMOVE_USER_FROM_WARD_PORT } from 'src/wards/adapters/out/remove-user-from-ward-adapter'; describe('WardsUsersRelationshipsServiceService', () => { let service: WardsUsersRelationshipsService; diff --git a/frontend/.nycrc.json b/frontend/.nycrc.json new file mode 100644 index 00000000..3c70d390 --- /dev/null +++ b/frontend/.nycrc.json @@ -0,0 +1,6 @@ +{ + "exclude": [ + "src/main.ts", + "src/app/app.config.ts" + ] +} \ No newline at end of file diff --git a/frontend/README.md b/frontend/README.md index e5ba19d6..abe5b5a0 100644 --- a/frontend/README.md +++ b/frontend/README.md @@ -44,6 +44,10 @@ To execute unit tests with the [Vitest](https://vitest.dev/) test runner, use th ng test ``` +Unit tests are located under `test/unit/` and mirror the application tree from `src/`. +For example, a test previously at `src/app/features/foo/bar.component.spec.ts` is now at +`test/unit/app/features/foo/bar.component.spec.ts`. + ## Running end-to-end tests For end-to-end (e2e) testing, run: diff --git a/frontend/angular.json b/frontend/angular.json index 14687639..58aa987d 100644 --- a/frontend/angular.json +++ b/frontend/angular.json @@ -3,7 +3,11 @@ "version": 1, "cli": { "packageManager": "npm", - "analytics": false + "analytics": false, + "schematicCollections": [ + "@cypress/schematic", + "@schematics/angular" + ] }, "newProjectRoot": "projects", "projects": { @@ -72,7 +76,73 @@ "defaultConfiguration": "development" }, "test": { - "builder": "@angular/build:unit-test" + "builder": "@angular/build:unit-test", + "options": { + "tsConfig": "tsconfig.spec.json", + "setupFiles": [ + "test/unit/setup/canvas.mock.ts" + ], + "include": [ + "../test/unit/**/*.spec.ts" + ] + } + }, + "test-integration": { + "builder": "@angular/build:unit-test", + "options": { + "tsConfig": "tsconfig.integration.json", + "setupFiles": [ + "test/unit/setup/canvas.mock.ts" + ], + "include": [ + "../test/integration/**/*.integration.spec.ts" + ] + } + }, + "cypress-run": { + "builder": "@cypress/schematic:cypress", + "options": { + "devServerTarget": "frontend:serve" + }, + "configurations": { + "production": { + "devServerTarget": "frontend:serve:production" + } + } + }, + "cypress-open": { + "builder": "@cypress/schematic:cypress", + "options": { + "watch": true, + "headless": false + } + }, + "ct": { + "builder": "@cypress/schematic:cypress", + "options": { + "devServerTarget": "frontend:serve", + "watch": true, + "headless": false, + "testingType": "component" + }, + "configurations": { + "development": { + "devServerTarget": "frontend:serve:development" + } + } + }, + "e2e": { + "builder": "@cypress/schematic:cypress", + "options": { + "devServerTarget": "frontend:serve", + "watch": true, + "headless": false + }, + "configurations": { + "production": { + "devServerTarget": "frontend:serve:production" + } + } } } } diff --git a/frontend/cypress.config.ts b/frontend/cypress.config.ts new file mode 100644 index 00000000..107cd37d --- /dev/null +++ b/frontend/cypress.config.ts @@ -0,0 +1,20 @@ +import { defineConfig } from 'cypress'; +import codeCoverageTask from '@cypress/code-coverage/task'; + +export default defineConfig({ + e2e: { + baseUrl: 'http://localhost:4200', + setupNodeEvents(on, config) { + codeCoverageTask(on, config); + return config; + }, + }, + + component: { + devServer: { + framework: 'angular', + bundler: 'webpack', + }, + specPattern: '**/*.cy.ts', + }, +}); \ No newline at end of file diff --git a/frontend/cypress/e2e/alarm-configuration.cy.ts b/frontend/cypress/e2e/alarm-configuration.cy.ts new file mode 100644 index 00000000..55111a70 --- /dev/null +++ b/frontend/cypress/e2e/alarm-configuration.cy.ts @@ -0,0 +1,797 @@ +const alarmConfigUsername = 'Mario Rossi'; +const alarmConfigPassword = ['A', 'd', 'm', 'i', 'n', 'A', 'c', 'c', 'e', 's', 's', '1', '2', '3'].join(''); +const alarmConfigLinkedEmail = 'admin@example.com'; + +const createAlarmConfigAccessToken = (): string => { + const claims = { + userId: '1', + username: alarmConfigUsername, + role: 'AMMINISTRATORE' as const, + isFirstAccess: false, + }; + + const encodedPayload = btoa(JSON.stringify(claims)) + .replaceAll('+', '-') + .replaceAll('/', '_') + .replaceAll('=', ''); + + return `header.${encodedPayload}.signature`; +}; + +const openCreateRuleModal = () => { + cy.get('button[aria-label="Crea nuova regola allarme"]').click(); + cy.get('#name').should('be.visible'); +}; + +const fillCreateRuleForm = (ruleName = 'Regola presenza notturna') => { + cy.get('#name').clear().type(ruleName); + cy.get('#plantId').select('plant-1'); + cy.wait('@getPlantById'); + + cy.get('#deviceId').select('dev-presence'); + cy.get('#datapointId').select('dp-presence-state'); + cy.get('#priority').select('4'); + cy.get('#thresholdOperator').select('uguale a'); + cy.get('#thresholdValue').clear().type('ON'); + cy.get('#armingTime').type('08:00'); + cy.get('#dearmingTime').type('20:00'); +}; + +const createAlarmRuleFromModal = (ruleName = 'Regola presenza notturna') => { + openCreateRuleModal(); + cy.wait('@getPlants'); + cy.wait('@getWards'); + + fillCreateRuleForm(ruleName); + cy.contains('button', 'CREA ALLARME').click(); + cy.wait('@createAlarmRule'); + cy.wait('@getAlarmRules'); + cy.contains('td', ruleName).should('exist'); +}; + +const openEditRuleModal = (ruleName: string) => { + cy.get(`button[aria-label="Modifica regola ${ruleName}"]`).click(); + cy.contains('h2', 'Modifica allarme').should('be.visible'); + cy.get('#priority').should('be.visible'); +}; + +describe('Alarm configuration e2e', () => { + let rulesState: Array<{ + id: string; + name: string; + thresholdOperator: string; + thresholdValue: string; + priority: number; + armingTime: string; + dearmingTime: string; + isArmed: boolean; + deviceId: string; + datapointId?: string; + position: string; + }>; + + beforeEach(() => { + rulesState = []; + + cy.viewport(1440, 1000); + + cy.intercept('POST', '**/auth/login', { + statusCode: 200, + body: { + accessToken: createAlarmConfigAccessToken(), + }, + }).as('login'); + + cy.intercept('GET', '**/my-vimar/account', { + statusCode: 200, + body: { + email: alarmConfigLinkedEmail, + isLinked: true, + }, + }); + + cy.intercept('GET', '**/api/vimar-account', { + statusCode: 200, + body: { + email: alarmConfigLinkedEmail, + isLinked: true, + }, + }); + + cy.intercept('GET', '**/alarm-events/unmanaged/*/*/*', { + statusCode: 200, + body: [], + }); + + cy.intercept('GET', '**/alarm-rules', (req) => { + req.reply({ + statusCode: 200, + body: rulesState, + }); + }).as('getAlarmRules'); + + cy.intercept('GET', '**/plant/all', { + statusCode: 200, + body: [ + { + id: 'plant-1', + name: 'Appartamento Aurora', + rooms: [], + }, + ], + }).as('getPlants'); + + cy.intercept('GET', '**/wards', { + statusCode: 200, + body: [], + }).as('getWards'); + + cy.intercept('GET', '**/plant?plantid=plant-1', { + statusCode: 200, + body: { + id: 'plant-1', + name: 'Appartamento Aurora', + rooms: [ + { + id: 'room-1', + name: 'Camera', + devices: [ + { + id: 'dev-presence', + name: 'Sensore presenza camera', + type: 'PRESENCE_SENSOR_DEVICE', + datapoints: [ + { + id: 'dp-presence-state', + name: 'Stato presenza', + readable: true, + writable: true, + valueType: 'enum', + enum: ['ON', 'OFF'], + sfeType: 'SFE_STATE_PRESENCE', + }, + ], + }, + ], + }, + ], + }, + }).as('getPlantById'); + + cy.intercept('POST', '**/alarm-rules', (req) => { + const payload = req.body as { + name: string; + deviceId: string; + datapointId: string; + plantId: string; + priority: number; + thresholdOperator: string; + thresholdValue: string; + armingTime: string; + dearmingTime: string; + }; + + rulesState = [ + ...rulesState, + { + id: 'rule-1', + name: payload.name, + thresholdOperator: payload.thresholdOperator, + thresholdValue: payload.thresholdValue, + priority: payload.priority, + armingTime: payload.armingTime, + dearmingTime: payload.dearmingTime, + isArmed: true, + deviceId: payload.deviceId, + datapointId: payload.datapointId, + position: 'Camera - Sensore presenza camera', + }, + ]; + + req.reply({ + statusCode: 201, + body: rulesState.at(-1), + }); + }).as('createAlarmRule'); + + cy.intercept('PUT', '**/alarm-rules/*', (req) => { + const payload = req.body as { + name: string; + priority: number; + thresholdOperator: string; + thresholdValue: string; + armingTime: string; + dearmingTime: string; + isArmed: boolean; + }; + + const encodedRuleId = req.url.split('/').pop()?.split('?')[0] ?? ''; + const ruleId = decodeURIComponent(encodedRuleId); + const currentRule = rulesState.find((rule) => rule.id === ruleId); + + if (!currentRule) { + req.reply({ + statusCode: 404, + body: null, + }); + return; + } + + const updatedRule = { + ...currentRule, + name: payload.name, + priority: payload.priority, + thresholdOperator: payload.thresholdOperator, + thresholdValue: payload.thresholdValue, + armingTime: payload.armingTime, + dearmingTime: payload.dearmingTime, + isArmed: payload.isArmed, + }; + + rulesState = rulesState.map((rule) => + rule.id === ruleId ? updatedRule : rule, + ); + + req.reply({ + statusCode: 200, + body: updatedRule, + }); + }).as('updateAlarmRule'); + + cy.intercept('DELETE', '**/alarm-rules/*', (req) => { + const encodedRuleId = req.url.split('/').pop()?.split('?')[0] ?? ''; + const ruleId = decodeURIComponent(encodedRuleId); + + rulesState = rulesState.filter((rule) => rule.id !== ruleId); + + req.reply({ + statusCode: 204, + body: null, + }); + }).as('deleteAlarmRule'); + + cy.visit('/auth/login'); + cy.get('#username').type(alarmConfigUsername); + cy.get('#password').type(alarmConfigPassword); + cy.get('button[type="submit"]').click(); + + cy.wait('@login'); + cy.get('a.sidebar-link').contains('Configurazione Allarmi').click({ force: true }); + cy.location('pathname').should('eq', '/alarms/alarm-configuration'); + cy.contains('h1', 'Configurazione allarmi').should('be.visible'); + cy.wait('@getAlarmRules'); + }); + + it('RF85-OBL Amministratore deve poter creare un allarme nel Sistema', () => { + openCreateRuleModal(); + cy.wait('@getPlants'); + cy.wait('@getWards'); + + fillCreateRuleForm(); + cy.contains('button', 'CREA ALLARME').click(); + + cy.wait('@createAlarmRule').its('request.body').should('deep.equal', { + name: 'Regola presenza notturna', + deviceId: 'dev-presence', + datapointId: 'dp-presence-state', + plantId: 'plant-1', + priority: 4, + thresholdOperator: '=', + thresholdValue: 'on', + armingTime: '08:00', + dearmingTime: '20:00', + }); + + cy.wait('@getAlarmRules'); + cy.contains('td', 'Regola presenza notturna').should('exist'); + }); + + it('RF86-OBL Amministratore deve selezionare l appartamento per creare un allarme', () => { + openCreateRuleModal(); + cy.wait('@getPlants'); + cy.wait('@getWards'); + + cy.get('#deviceId').should('be.disabled'); + cy.get('#plantId').select('plant-1'); + cy.wait('@getPlantById'); + cy.get('#deviceId').should('not.be.disabled'); + }); + + it('RF87-OBL Amministratore deve selezionare il sensore per creare un allarme', () => { + openCreateRuleModal(); + cy.wait('@getPlants'); + cy.wait('@getWards'); + + cy.get('#plantId').select('plant-1'); + cy.wait('@getPlantById'); + cy.get('#deviceId').select('dev-presence'); + + cy.get('#datapointId option').contains('Stato presenza').should('exist'); + }); + + it('RF88-OBL Amministratore deve selezionare il livello di priorità 1-4', () => { + openCreateRuleModal(); + + cy.get('#priority option').then(($options) => { + const labels = Array.from($options).map((option) => option.textContent?.trim() ?? ''); + expect(labels).to.include.members(['1', '2', '3', '4']); + }); + }); + + it('RF89-OBL Amministratore deve selezionare una soglia di intervento', () => { + openCreateRuleModal(); + cy.wait('@getPlants'); + cy.wait('@getWards'); + + fillCreateRuleForm(); + cy.get('#thresholdValue').clear(); + cy.contains('button', 'CREA ALLARME').click(); + + cy.contains('La soglia è obbligatoria.').should('be.visible'); + }); + + it('RF90-OBL Amministratore deve selezionare un orario di attivazione', () => { + openCreateRuleModal(); + cy.wait('@getPlants'); + cy.wait('@getWards'); + + fillCreateRuleForm(); + cy.get('#armingTime').clear(); + cy.contains('button', 'CREA ALLARME').click(); + + cy.contains("L'orario di attivazione è obbligatorio.").should('be.visible'); + }); + + it('RF91-OBL Amministratore deve selezionare un orario di disattivazione', () => { + openCreateRuleModal(); + cy.wait('@getPlants'); + cy.wait('@getWards'); + + fillCreateRuleForm(); + cy.get('#dearmingTime').clear(); + cy.contains('button', 'CREA ALLARME').click(); + + cy.contains("L'orario di disattivazione è obbligatorio.").should('be.visible'); + }); + + it('RF92-OBL Errore se non è stato selezionato alcun sensore', () => { + openCreateRuleModal(); + cy.wait('@getPlants'); + cy.wait('@getWards'); + + cy.get('#name').clear().type('Regola senza sensore'); + cy.get('#plantId').select('plant-1'); + cy.wait('@getPlantById'); + cy.get('#priority').select('3'); + cy.get('#thresholdOperator').select('uguale a'); + cy.get('#thresholdValue').clear().type('ON'); + cy.get('#armingTime').type('08:00'); + cy.get('#dearmingTime').type('20:00'); + + cy.contains('button', 'CREA ALLARME').click(); + cy.contains('Il dispositivo è obbligatorio.').should('be.visible'); + }); + + it('RF93-OBL Errore se non è stato selezionato alcun livello di priorità', () => { + openCreateRuleModal(); + cy.wait('@getPlants'); + cy.wait('@getWards'); + + cy.get('#name').clear().type('Regola senza priorita'); + cy.get('#plantId').select('plant-1'); + cy.wait('@getPlantById'); + cy.get('#deviceId').select('dev-presence'); + cy.get('#datapointId').select('dp-presence-state'); + cy.get('#thresholdOperator').select('uguale a'); + cy.get('#thresholdValue').clear().type('ON'); + cy.get('#armingTime').type('08:00'); + cy.get('#dearmingTime').type('20:00'); + + cy.contains('button', 'CREA ALLARME').click(); + cy.contains('La priorità è obbligatoria.').should('be.visible'); + }); + + it('RF94-OBL Amministratore deve ricevere un errore se non ha selezionato alcuna soglia di intervento', () => { + const ruleName = 'Regola edit senza soglia'; + createAlarmRuleFromModal(ruleName); + openEditRuleModal(ruleName); + + cy.get('#thresholdValue').clear(); + cy.contains('button', 'APPLICA MODIFICHE').click(); + + cy.contains('La soglia è obbligatoria.').should('be.visible'); + cy.get('@updateAlarmRule.all').should('have.length', 0); + }); + + it('RF95-OBL Amministratore deve poter modificare la priorità di un allarme del Sistema', () => { + const ruleName = 'Regola priorita modificabile'; + createAlarmRuleFromModal(ruleName); + openEditRuleModal(ruleName); + + cy.get('#priority').select('1'); + cy.contains('button', 'APPLICA MODIFICHE').click(); + + cy.wait('@updateAlarmRule').its('request.body').should('include', { + name: ruleName, + priority: 1, + }); + + cy.wait('@getAlarmRules'); + }); + + it('RF96-OBL Amministratore deve poter modificare la soglia d intervento di un allarme del Sistema', () => { + const ruleName = 'Regola soglia modificabile'; + createAlarmRuleFromModal(ruleName); + openEditRuleModal(ruleName); + + cy.get('#thresholdValue').clear().type('OFF'); + cy.contains('button', 'APPLICA MODIFICHE').click(); + + cy.wait('@updateAlarmRule').its('request.body').should('include', { + name: ruleName, + thresholdValue: 'off', + }); + + cy.wait('@getAlarmRules'); + cy.contains('tr', ruleName).should('contain', '= off'); + }); + + it('RF97-OBL Amministratore deve poter modificare l orario di attivazione di un allarme del Sistema', () => { + const ruleName = 'Regola orario attivazione'; + createAlarmRuleFromModal(ruleName); + openEditRuleModal(ruleName); + + cy.get('#armingTime').clear().type('09:30'); + cy.contains('button', 'APPLICA MODIFICHE').click(); + + cy.wait('@updateAlarmRule').its('request.body').should('include', { + name: ruleName, + armingTime: '09:30', + }); + + cy.wait('@getAlarmRules'); + cy.contains('tr', ruleName).should('contain', '09:30'); + }); + + it('RF98-OBL Amministratore deve poter modificare l orario di disattivazione di un allarme del Sistema', () => { + const ruleName = 'Regola orario disattivazione'; + createAlarmRuleFromModal(ruleName); + openEditRuleModal(ruleName); + + cy.get('#dearmingTime').clear().type('21:15'); + cy.contains('button', 'APPLICA MODIFICHE').click(); + + cy.wait('@updateAlarmRule').its('request.body').should('include', { + name: ruleName, + dearmingTime: '21:15', + }); + + cy.wait('@getAlarmRules'); + cy.contains('tr', ruleName).should('contain', '21:15'); + }); + + it('encodes special rule ids when updating an alarm rule', () => { + const specialRuleId = 'rule/special id#A'; + const specialRuleName = 'Regola ID speciale update'; + + rulesState = [ + { + id: specialRuleId, + name: specialRuleName, + thresholdOperator: '=', + thresholdValue: 'on', + priority: 3, + armingTime: '08:00', + dearmingTime: '20:00', + isArmed: true, + deviceId: 'dev-presence', + datapointId: 'dp-presence-state', + position: 'Camera - Sensore presenza camera', + }, + ]; + + cy.get('a.sidebar-link').contains('Dashboard').click({ force: true }); + cy.location('pathname').should('eq', '/dashboard'); + cy.get('a.sidebar-link').contains('Configurazione Allarmi').click({ force: true }); + cy.location('pathname').should('eq', '/alarms/alarm-configuration'); + cy.wait('@getAlarmRules'); + + openEditRuleModal(specialRuleName); + cy.get('#priority').select('1'); + cy.contains('button', 'APPLICA MODIFICHE').click(); + + cy.wait('@updateAlarmRule').then(({ request }) => { + expect(request.url).to.include(`/alarm-rules/${encodeURIComponent(specialRuleId)}`); + expect(request.url).to.not.include(`/alarm-rules/${specialRuleId}`); + }); + }); + + it('RF99-OBL Amministratore deve poter abilitare un allarme del Sistema', () => { + const ruleName = 'Regola abilita'; + createAlarmRuleFromModal(ruleName); + + cy.get(`button[aria-label="Abilita regola ${ruleName}"]`).click(); + cy.wait('@updateAlarmRule').its('request.body').should('include', { + name: ruleName, + isArmed: false, + }); + + cy.wait('@getAlarmRules'); + cy.get(`button[aria-label="Abilita regola ${ruleName}"]`).click(); + cy.wait('@updateAlarmRule').its('request.body').should('include', { + name: ruleName, + isArmed: true, + }); + + cy.wait('@getAlarmRules'); + }); + + it('RF100-OBL Amministratore deve poter disabilitare un allarme del Sistema', () => { + const ruleName = 'Regola disabilita'; + createAlarmRuleFromModal(ruleName); + + cy.get(`button[aria-label="Abilita regola ${ruleName}"]`).click(); + cy.wait('@updateAlarmRule').its('request.body').should('include', { + name: ruleName, + isArmed: false, + }); + cy.wait('@getAlarmRules'); + }); + + it('RF101-OBL Amministratore deve poter eliminare un allarme nel Sistema', () => { + const ruleName = 'Regola elimina'; + createAlarmRuleFromModal(ruleName); + + cy.get(`button[aria-label="Elimina regola ${ruleName}"]`).click(); + cy.contains('button', 'Elimina').click(); + + cy.wait('@deleteAlarmRule'); + cy.contains('tr', ruleName).should('not.exist'); + }); + + it('encodes special rule ids when deleting an alarm rule', () => { + const specialRuleId = 'rule/special id#B'; + const specialRuleName = 'Regola ID speciale delete'; + + rulesState = [ + { + id: specialRuleId, + name: specialRuleName, + thresholdOperator: '=', + thresholdValue: 'on', + priority: 3, + armingTime: '08:00', + dearmingTime: '20:00', + isArmed: true, + deviceId: 'dev-presence', + datapointId: 'dp-presence-state', + position: 'Camera - Sensore presenza camera', + }, + ]; + + cy.get('a.sidebar-link').contains('Dashboard').click({ force: true }); + cy.location('pathname').should('eq', '/dashboard'); + cy.get('a.sidebar-link').contains('Configurazione Allarmi').click({ force: true }); + cy.location('pathname').should('eq', '/alarms/alarm-configuration'); + cy.wait('@getAlarmRules'); + + cy.get(`button[aria-label="Elimina regola ${specialRuleName}"]`).click(); + cy.contains('button', 'Elimina').click(); + + cy.wait('@deleteAlarmRule').then(({ request }) => { + expect(request.url).to.include(`/alarm-rules/${encodeURIComponent(specialRuleId)}`); + expect(request.url).to.not.include(`/alarm-rules/${specialRuleId}`); + }); + }); + + it('cancels alarm deletion from the confirmation dialog', () => { + const ruleName = 'Regola annulla eliminazione'; + createAlarmRuleFromModal(ruleName); + + cy.get(`button[aria-label="Elimina regola ${ruleName}"]`).click(); + cy.contains('button', 'Annulla').click(); + + cy.contains('tr', ruleName).should('exist'); + cy.get('@deleteAlarmRule.all').should('have.length', 0); + }); + + it('closes the edit alarm modal with ANNULLA without persisting changes', () => { + const ruleName = 'Regola edit annulla'; + createAlarmRuleFromModal(ruleName); + openEditRuleModal(ruleName); + + cy.get('#priority').select('1'); + cy.contains('button', 'ANNULLA').click(); + + cy.contains('h2', 'Modifica allarme').should('not.exist'); + cy.contains('tr', ruleName).should('exist'); + cy.get('@updateAlarmRule.all').should('have.length', 0); + }); + + it('closes the create alarm modal from the shell close button', () => { + openCreateRuleModal(); + cy.wait('@getPlants'); + cy.wait('@getWards'); + + cy.get('#name').clear().type('Regola temporanea da chiudere'); + cy.get('button[aria-label="Chiudi finestra"]').click(); + + cy.get('#name').should('not.exist'); + cy.get('@createAlarmRule.all').should('have.length', 0); + + openCreateRuleModal(); + cy.wait('@getPlants'); + cy.wait('@getWards'); + cy.get('#name').should('have.value', ''); + }); + + it('closes the create alarm modal without submitting', () => { + openCreateRuleModal(); + cy.wait('@getPlants'); + cy.wait('@getWards'); + + cy.contains('button', 'ANNULLA').click(); + + cy.get('#name').should('not.exist'); + cy.get('@createAlarmRule.all').should('have.length', 0); + }); + + it('falls back to an empty plant list when the plant catalog cannot be loaded', () => { + cy.intercept('GET', '**/plant/all', { + statusCode: 500, + body: { message: 'Plant load failed' }, + }).as('getPlantsFailure'); + + openCreateRuleModal(); + + cy.wait('@getPlantsFailure'); + cy.get('#plantId option').should('have.length', 1); + cy.get('#deviceId').should('be.disabled'); + }); + + it('shows a device load error when selecting a plant in create mode', () => { + cy.intercept('GET', '**/plant?plantid=plant-1', { + statusCode: 500, + body: { message: 'Device load failed' }, + }).as('getPlantByIdFailure'); + + openCreateRuleModal(); + cy.wait('@getPlants'); + cy.wait('@getWards'); + + cy.get('#plantId').select('plant-1'); + + cy.wait('@getPlantByIdFailure'); + cy.contains('Errore durante il caricamento dei dispositivi.').should('be.visible'); + cy.get('#deviceId').should('be.disabled'); + }); + + it('auto-selects the only readable datapoint and locks operators to equal for enum datapoints', () => { + openCreateRuleModal(); + cy.wait('@getPlants'); + cy.wait('@getWards'); + + cy.get('#plantId').select('plant-1'); + cy.wait('@getPlantById'); + cy.get('#deviceId').select('dev-presence'); + + cy.get('#datapointId').should('have.value', 'dp-presence-state'); + cy.get('#thresholdOperator option').then(($options) => { + expect($options.length).to.equal(2); + expect($options.eq(1).text().trim().toLowerCase()).to.equal('uguale a'); + }); + }); + + it('shows enum validation error when threshold value is not part of datapoint enum', () => { + openCreateRuleModal(); + cy.wait('@getPlants'); + cy.wait('@getWards'); + + cy.get('#name').clear().type('Regola enum non valida'); + cy.get('#plantId').select('plant-1'); + cy.wait('@getPlantById'); + cy.get('#deviceId').select('dev-presence'); + cy.get('#priority').select('4'); + cy.get('#thresholdOperator').select('uguale a'); + cy.get('#thresholdValue').clear().type('MAYBE'); + cy.get('#armingTime').type('08:00'); + cy.get('#dearmingTime').type('20:00'); + + cy.contains('button', 'CREA ALLARME').click(); + cy.contains('Valore non previsto dall\'enum del datapoint selezionato.').should('be.visible'); + cy.get('@createAlarmRule.all').should('have.length', 0); + }); + + it('accepts numeric thresholds and exposes multiple operators for non-enum datapoints', () => { + cy.intercept('GET', '**/plant?plantid=plant-1', { + statusCode: 200, + body: { + id: 'plant-1', + name: 'Appartamento Aurora', + rooms: [ + { + id: 'room-1', + name: 'Camera', + devices: [ + { + id: 'dev-thermo', + name: 'Termostato camera', + type: 'THERMOSTAT', + datapoints: [ + { + id: 'dp-temp', + name: 'Temperatura', + readable: true, + writable: true, + valueType: 'number', + enum: undefined, + sfeType: 'SFE_TEMP', + }, + ], + }, + ], + }, + ], + }, + }).as('getPlantByIdNumeric'); + + openCreateRuleModal(); + cy.wait('@getPlants'); + cy.wait('@getWards'); + + cy.get('#name').clear().type('Regola temperatura numerica'); + cy.get('#plantId').select('plant-1'); + cy.wait('@getPlantByIdNumeric'); + cy.get('#deviceId').select('dev-thermo'); + + cy.get('#thresholdOperator option').its('length').should('be.greaterThan', 2); + + cy.get('#priority').select('2'); + cy.get('#thresholdOperator').select('maggiore di'); + cy.get('#thresholdValue').clear().type('abc'); + cy.get('#armingTime').type('09:00'); + cy.get('#dearmingTime').type('21:00'); + cy.contains('button', 'CREA ALLARME').click(); + + cy.contains('Inserisci un valore numerico valido.').should('be.visible'); + cy.get('@createAlarmRule.all').should('have.length', 0); + + cy.get('#thresholdValue').clear().type('20.5'); + cy.contains('button', 'CREA ALLARME').click(); + + cy.wait('@createAlarmRule').its('request.body').should('deep.include', { + deviceId: 'dev-thermo', + datapointId: 'dp-temp', + thresholdValue: '20.5', + }); + }); + + it('maps backend alarm times to HH:mm when opening edit modal', () => { + rulesState = [ + { + id: 'rule-time-1', + name: 'Regola orari backend', + thresholdOperator: '=', + thresholdValue: 'on', + priority: 3, + armingTime: '2026-04-11T09:45:30.000Z', + dearmingTime: '18:30:59', + isArmed: true, + deviceId: 'dev-presence', + datapointId: 'dp-presence-state', + position: 'Camera - Sensore presenza camera', + }, + ]; + + cy.get('a.sidebar-link').contains('Dashboard').click({ force: true }); + cy.location('pathname').should('eq', '/dashboard'); + + cy.get('a.sidebar-link').contains('Configurazione Allarmi').click({ force: true }); + cy.location('pathname').should('eq', '/alarms/alarm-configuration'); + cy.wait('@getAlarmRules'); + + openEditRuleModal('Regola orari backend'); + cy.get('#armingTime').should('have.value', '09:45'); + cy.get('#dearmingTime').should('have.value', '18:30'); + }); +}); diff --git a/frontend/cypress/e2e/alarm-history.cy.ts b/frontend/cypress/e2e/alarm-history.cy.ts new file mode 100644 index 00000000..162a1b30 --- /dev/null +++ b/frontend/cypress/e2e/alarm-history.cy.ts @@ -0,0 +1,241 @@ +import type { ActiveAlarm } from '../../src/app/core/alarm/models/active-alarm.model'; +import { AlarmPriority } from '../../src/app/core/alarm/models/alarm-priority.enum'; + +const alarmHistoryUsername = 'admin.user'; +const alarmHistoryPassword = ['A', 'd', 'm', 'i', 'n', 'A', 'c', 'c', 'e', 's', 's', '1', '2', '3'].join(''); +const alarmHistoryLinkedEmail = 'admin@example.com'; + +const createAlarmHistoryAccessToken = (): string => { + const claims = { + userId: '1', + username: alarmHistoryUsername, + role: 'AMMINISTRATORE' as const, + isFirstAccess: false, + }; + + const encodedPayload = btoa(JSON.stringify(claims)) + .replaceAll('+', '-') + .replaceAll('/', '_') + .replaceAll('=', ''); + + return `header.${encodedPayload}.signature`; +}; + +describe('Alarm history e2e', () => { + let resolvedAlarmsState: ActiveAlarm[]; + + beforeEach(() => { + const now = Date.now(); + + resolvedAlarmsState = [ + { + id: 'rh-1', + alarmRuleId: 'rule-1', + deviceId: 'dev-1', + alarmName: 'Caduta reparto nord', + priority: AlarmPriority.RED, + activationTime: new Date(now - 90 * 60 * 1000).toISOString(), + resolutionTime: new Date(now - 65 * 60 * 1000).toISOString(), + position: 'Reparto nord', + userId: 8, + userUsername: 'oss.nord', + }, + { + id: 'rh-2', + alarmRuleId: 'rule-2', + deviceId: 'dev-2', + alarmName: 'Saturazione bassa stanza 5', + priority: AlarmPriority.ORANGE, + activationTime: new Date(now - 45 * 60 * 1000).toISOString(), + resolutionTime: new Date(now - 20 * 60 * 1000).toISOString(), + position: 'Stanza 5', + userId: 9, + userUsername: 'oss.turnoA', + }, + { + id: 'rh-3', + alarmRuleId: 'rule-3', + deviceId: 'dev-3', + alarmName: 'Porta emergenza aperta', + priority: AlarmPriority.GREEN, + activationTime: new Date(now - 40 * 60 * 1000).toISOString(), + resolutionTime: new Date(now - 25 * 60 * 1000).toISOString(), + position: 'Piano 1', + userId: 10, + userUsername: 'oss.turnoB', + }, + { + id: 'rh-4', + alarmRuleId: 'rule-4', + deviceId: 'dev-4', + alarmName: 'Pulsante bagno premuto', + priority: AlarmPriority.RED, + activationTime: new Date(now - 150 * 60 * 1000).toISOString(), + resolutionTime: new Date(now - 120 * 60 * 1000).toISOString(), + position: 'Stanza 12', + userId: 11, + userUsername: 'oss.notte', + }, + { + id: 'rh-5', + alarmRuleId: 'rule-5', + deviceId: 'dev-5', + alarmName: 'Sensore presenza guasto', + priority: AlarmPriority.WHITE, + activationTime: new Date(now - 200 * 60 * 1000).toISOString(), + resolutionTime: new Date(now - 180 * 60 * 1000).toISOString(), + position: 'Corridoio est', + userId: 12, + userUsername: 'oss.tecnico', + }, + { + id: 'rh-6', + alarmRuleId: 'rule-6', + deviceId: 'dev-6', + alarmName: 'Luce emergenza non raggiungibile', + priority: AlarmPriority.ORANGE, + activationTime: new Date(now - 210 * 60 * 1000).toISOString(), + resolutionTime: new Date(now - 185 * 60 * 1000).toISOString(), + position: 'Scala antincendio', + userId: 13, + userUsername: 'oss.turnoC', + }, + { + id: 'rh-7', + alarmRuleId: 'rule-7', + deviceId: 'dev-7', + alarmName: 'Allarme tecnico locale termico', + priority: AlarmPriority.GREEN, + activationTime: new Date(now - 260 * 60 * 1000).toISOString(), + resolutionTime: new Date(now - 240 * 60 * 1000).toISOString(), + position: 'Locale termico', + userId: 14, + userUsername: 'oss.tecnico2', + }, + { + id: 'rh-8', + alarmRuleId: 'rule-8', + deviceId: 'dev-8', + alarmName: 'Assenza segnale sensore letto', + priority: AlarmPriority.WHITE, + activationTime: new Date(now - 300 * 60 * 1000).toISOString(), + resolutionTime: new Date(now - 280 * 60 * 1000).toISOString(), + position: 'Stanza 22', + userId: 15, + userUsername: 'oss.turnoD', + }, + ]; + + cy.viewport(1440, 1000); + + cy.intercept('POST', '**/auth/login', { + statusCode: 200, + body: { + accessToken: createAlarmHistoryAccessToken(), + }, + }).as('login'); + + cy.intercept('GET', '**/my-vimar/account', { + statusCode: 200, + body: { + email: alarmHistoryLinkedEmail, + isLinked: true, + }, + }); + + cy.intercept('GET', '**/api/vimar-account', { + statusCode: 200, + body: { + email: alarmHistoryLinkedEmail, + isLinked: true, + }, + }); + + cy.intercept('GET', '**/alarm-events/unmanaged/*/*/*', { + statusCode: 200, + body: [], + }).as('getUnmanagedForLayout'); + + cy.intercept('GET', '**/alarm-events/managed/*/*/*', (req) => { + const chunks = req.url.split('/'); + const limit = Number(chunks[chunks.length - 2]); + const offset = Number(chunks[chunks.length - 1]); + + req.reply({ + statusCode: 200, + body: resolvedAlarmsState.slice(offset, offset + limit), + }); + }).as('getResolvedHistory'); + + cy.visit('/auth/login?returnUrl=%2Falarms%2Falarm-history'); + cy.get('#username').type(alarmHistoryUsername); + cy.get('#password').type(alarmHistoryPassword); + cy.get('button[type="submit"]').click(); + + cy.wait('@login'); + cy.location('pathname').should('eq', '/alarms/alarm-history'); + cy.contains('h1', 'Storico allarmi').should('be.visible'); + cy.wait('@getResolvedHistory'); + }); + + it('renders resolved alarms with operator and status columns', () => { + cy.get('[data-testid^="alarm-row-"]').should('have.length', 6); + cy.get('[data-testid="alarm-row-rh-2"]').within(() => { + cy.contains('Saturazione bassa stanza 5').should('exist'); + cy.contains('Stanza 5').should('exist'); + cy.contains('Gestito').should('exist'); + cy.contains('oss.turnoA').should('exist'); + }); + }); + + it('sorts rows by resolution date descending in current page', () => { + cy.get('[data-testid^="alarm-row-"]').first() + .should('have.attr', 'data-testid', 'alarm-row-rh-2'); + }); + + it('supports navigation between history pages', () => { + cy.contains('button', 'Successiva').should('not.be.disabled').click(); + cy.wait('@getResolvedHistory'); + + cy.contains('span', 'Pagina 2').should('be.visible'); + cy.get('[data-testid="alarm-row-rh-7"]').should('exist'); + cy.get('[data-testid="alarm-row-rh-8"]').should('exist'); + + cy.contains('button', 'Precedente').click(); + cy.wait('@getResolvedHistory'); + cy.contains('span', 'Pagina 1').should('be.visible'); + }); + + it('shows empty state when there is no history data', () => { + resolvedAlarmsState = []; + + cy.get('a.sidebar-link').contains('Gestione Allarmi').click({ force: true }); + cy.location('pathname').should('eq', '/alarms/alarm-management'); + cy.wait('@getUnmanagedForLayout'); + + cy.get('a.sidebar-link').contains('Storico Allarmi').click({ force: true }); + cy.location('pathname').should('eq', '/alarms/alarm-history'); + cy.wait('@getResolvedHistory'); + + cy.contains('Nessun storico allarme disponibile al momento.').should('be.visible'); + cy.contains('button', 'Successiva').should('not.exist'); + cy.contains('button', 'Precedente').should('not.exist'); + }); + + it('falls back to a generic handler label when the operator name is missing', () => { + resolvedAlarmsState[0] = { + ...resolvedAlarmsState[0], + userUsername: null, + }; + + cy.get('a.sidebar-link').contains('Gestione Allarmi').click({ force: true }); + cy.location('pathname').should('eq', '/alarms/alarm-management'); + cy.wait('@getUnmanagedForLayout'); + + cy.get('a.sidebar-link').contains('Storico Allarmi').click({ force: true }); + cy.location('pathname').should('eq', '/alarms/alarm-history'); + cy.wait('@getResolvedHistory'); + + cy.get('[data-testid="alarm-row-rh-1"]').should('contain', 'sconosciuto'); + }); +}); diff --git a/frontend/cypress/e2e/alarm-management.cy.ts b/frontend/cypress/e2e/alarm-management.cy.ts new file mode 100644 index 00000000..cf1ecb63 --- /dev/null +++ b/frontend/cypress/e2e/alarm-management.cy.ts @@ -0,0 +1,362 @@ +import type { ActiveAlarm } from '../../src/app/core/alarm/models/active-alarm.model'; +import { AlarmPriority } from '../../src/app/core/alarm/models/alarm-priority.enum'; + +const alarmManagementUsername = 'admin.user'; +const alarmManagementPassword = ['A', 'd', 'm', 'i', 'n', 'A', 'c', 'c', 'e', 's', 's', '1', '2', '3'].join(''); +const alarmManagementLinkedEmail = 'admin@example.com'; + +const createAlarmManagementAccessToken = (): string => { + const claims = { + userId: '1', + username: alarmManagementUsername, + role: 'AMMINISTRATORE' as const, + isFirstAccess: false, + }; + + const encodedPayload = btoa(JSON.stringify(claims)) + .replaceAll('+', '-') + .replaceAll('/', '_') + .replaceAll('=', ''); + + return `header.${encodedPayload}.signature`; +}; + +describe('Alarm management e2e', () => { + let activeAlarmsState: ActiveAlarm[]; + + beforeEach(() => { + const now = Date.now(); + + activeAlarmsState = [ + { + id: 'am-1', + alarmRuleId: 'rule-1', + deviceId: 'dev-1', + alarmName: 'Caduta in bagno', + priority: AlarmPriority.RED, + activationTime: new Date(now - 12 * 60 * 1000).toISOString(), + resolutionTime: null, + position: 'Stanza 101', + userId: null, + userUsername: null, + }, + { + id: 'am-2', + alarmRuleId: 'rule-2', + deviceId: 'dev-2', + alarmName: 'Saturazione bassa', + priority: AlarmPriority.ORANGE, + activationTime: new Date(now - 6 * 60 * 1000).toISOString(), + resolutionTime: null, + position: 'Stanza 102', + userId: null, + userUsername: null, + }, + { + id: 'am-3', + alarmRuleId: 'rule-3', + deviceId: 'dev-3', + alarmName: 'Porta aperta', + priority: AlarmPriority.GREEN, + activationTime: new Date(now - 3 * 60 * 1000).toISOString(), + resolutionTime: null, + position: 'Ingresso', + userId: null, + userUsername: null, + }, + { + id: 'am-4', + alarmRuleId: 'rule-4', + deviceId: 'dev-4', + alarmName: 'Batteria sensore scarica', + priority: AlarmPriority.WHITE, + activationTime: new Date(now - 20 * 60 * 1000).toISOString(), + resolutionTime: null, + position: 'Corridoio', + userId: null, + userUsername: null, + }, + { + id: 'am-5', + alarmRuleId: 'rule-5', + deviceId: 'dev-5', + alarmName: 'Sensore movimento inattivo', + priority: AlarmPriority.GREEN, + activationTime: new Date(now - 25 * 60 * 1000).toISOString(), + resolutionTime: null, + position: 'Stanza 201', + userId: null, + userUsername: null, + }, + { + id: 'am-6', + alarmRuleId: 'rule-6', + deviceId: 'dev-6', + alarmName: 'Luce emergenza guasta', + priority: AlarmPriority.ORANGE, + activationTime: new Date(now - 28 * 60 * 1000).toISOString(), + resolutionTime: null, + position: 'Scala est', + userId: null, + userUsername: null, + }, + { + id: 'am-7', + alarmRuleId: 'rule-7', + deviceId: 'dev-7', + alarmName: 'Allarme tecnico locale caldaia', + priority: AlarmPriority.RED, + activationTime: new Date(now - 31 * 60 * 1000).toISOString(), + resolutionTime: null, + position: 'Locale tecnico', + userId: null, + userUsername: null, + }, + ]; + + cy.viewport(1440, 1000); + + cy.intercept('POST', '**/auth/login', { + statusCode: 200, + body: { + accessToken: createAlarmManagementAccessToken(), + }, + }).as('login'); + + cy.intercept('GET', '**/my-vimar/account', { + statusCode: 200, + body: { + email: alarmManagementLinkedEmail, + isLinked: true, + }, + }); + + cy.intercept('GET', '**/api/vimar-account', { + statusCode: 200, + body: { + email: alarmManagementLinkedEmail, + isLinked: true, + }, + }); + + cy.intercept('GET', '**/alarm-events/unmanaged/*/*/*', (req) => { + const chunks = req.url.split('/'); + const limit = Number(chunks[chunks.length - 2]); + const offset = Number(chunks[chunks.length - 1]); + + const paged = activeAlarmsState.slice(offset, offset + limit); + + req.reply({ + statusCode: 200, + body: paged, + }); + }).as('getActiveAlarms'); + + cy.intercept('PATCH', '**/alarm-events/resolve', (req) => { + const payload = req.body as { alarmId: string; userId: number }; + + expect(payload.userId).to.equal(1); + activeAlarmsState = activeAlarmsState.filter((alarm) => alarm.id !== payload.alarmId); + + req.reply({ + statusCode: 200, + body: null, + }); + }).as('resolveAlarm'); + + cy.visit('/auth/login?returnUrl=%2Falarms%2Falarm-management'); + cy.get('#username').type(alarmManagementUsername); + cy.get('#password').type(alarmManagementPassword); + cy.get('button[type="submit"]').click(); + + cy.wait('@login'); + cy.location('pathname').should('eq', '/alarms/alarm-management'); + cy.contains('h1', 'Gestione allarmi attivi').should('be.visible'); + + cy.wait('@getActiveAlarms'); + cy.wait('@getActiveAlarms'); + }); + + it('renders active alarms table with status and action buttons', () => { + cy.get('[data-testid^="alarm-row-"]').should('have.length', 6); + cy.get('[data-testid="alarm-row-am-1"]').within(() => { + cy.contains('Caduta in bagno').should('exist'); + cy.contains('Stanza 101').should('exist'); + cy.contains('Da gestire').should('exist'); + cy.contains('button', 'GESTISCI').should('exist'); + }); + }); + + it('resolves an alarm and refreshes the active list', () => { + cy.get('[data-testid="alarm-row-am-1"]').within(() => { + cy.contains('button', 'GESTISCI').click(); + }); + + cy.wait('@resolveAlarm').its('request.body').should('deep.equal', { + alarmId: 'am-1', + userId: 1, + }); + + cy.wait('@getActiveAlarms'); + cy.wait('@getActiveAlarms'); + + cy.get('[data-testid="alarm-row-am-1"]').should('not.exist'); + cy.get('[data-testid="alarm-row-am-2"]').should('exist'); + }); + + it('supports pagination between first and second page', () => { + cy.contains('button', 'Successiva').should('not.be.disabled').click(); + + cy.wait('@getActiveAlarms'); + cy.wait('@getActiveAlarms'); + + cy.contains('span', 'Pagina 2').should('be.visible'); + cy.get('[data-testid="alarm-row-am-7"]').should('exist'); + cy.contains('button', 'Precedente').should('not.be.disabled').click(); + + cy.wait('@getActiveAlarms'); + cy.wait('@getActiveAlarms'); + cy.contains('span', 'Pagina 1').should('be.visible'); + cy.get('[data-testid="alarm-row-am-1"]').should('exist'); + }); + + it('shows an error message when resolve API fails', () => { + cy.intercept('PATCH', '**/alarm-events/resolve', { + statusCode: 500, + body: { message: 'Server error' }, + }).as('resolveAlarmFailure'); + + cy.get('[data-testid="alarm-row-am-2"]').within(() => { + cy.contains('button', 'GESTISCI').click(); + }); + + cy.wait('@resolveAlarmFailure'); + cy.contains(/risoluzione dell'allarme/i).should('be.visible'); + cy.get('[data-testid="alarm-row-am-2"]').should('exist'); + }); + + it('shows a network error message when resolve request cannot reach the server', () => { + cy.intercept('PATCH', '**/alarm-events/resolve', { + forceNetworkError: true, + }).as('resolveAlarmNetworkFailure'); + + cy.get('[data-testid="alarm-row-am-3"]').within(() => { + cy.contains('button', 'GESTISCI').click(); + }); + + cy.wait('@resolveAlarmNetworkFailure'); + cy.contains('Impossibile contattare il server durante').should('be.visible'); + cy.get('[data-testid="alarm-row-am-3"]').should('exist'); + }); + + it('shows permission error message on 403 resolve response', () => { + cy.intercept('PATCH', '**/alarm-events/resolve', { + statusCode: 403, + body: { message: 'Forbidden' }, + }).as('resolveAlarmForbidden'); + + cy.get('[data-testid="alarm-row-am-2"]').within(() => { + cy.contains('button', 'GESTISCI').click(); + }); + + cy.wait('@resolveAlarmForbidden'); + cy.contains('Non hai i permessi necessari per completare la risoluzione dell\'allarme.').should('be.visible'); + cy.get('[data-testid="alarm-row-am-2"]').should('exist'); + }); + + it('shows joined validation messages when backend returns an array message', () => { + cy.intercept('PATCH', '**/alarm-events/resolve', { + statusCode: 422, + body: { + message: ['Campo userId mancante', 'Campo alarmId non valido'], + }, + }).as('resolveAlarmValidationFailure'); + + cy.get('[data-testid="alarm-row-am-1"]').within(() => { + cy.contains('button', 'GESTISCI').click(); + }); + + cy.wait('@resolveAlarmValidationFailure'); + cy.contains('Campo userId mancante; Campo alarmId non valido').should('be.visible'); + cy.get('[data-testid="alarm-row-am-1"]').should('exist'); + }); + + it('shows load-page error when fetching the next page fails', () => { + cy.intercept('GET', '**/alarm-events/unmanaged/*/*/*', { + statusCode: 500, + body: { message: 'Load failed' }, + }).as('getActiveAlarmsFailure'); + + cy.contains('button', 'Successiva').click(); + + cy.wait('@getActiveAlarmsFailure'); + cy.contains('Errore interno del server durante caricare gli allarmi attivi').should('be.visible'); + }); + + it('renders managed alarms as non actionable rows', () => { + activeAlarmsState = activeAlarmsState.map((alarm) => + alarm.id === 'am-1' + ? { + ...alarm, + resolutionTime: new Date().toISOString(), + } + : alarm, + ); + + cy.visit('/auth/login?returnUrl=%2Falarms%2Falarm-management'); + cy.get('#username').type(alarmManagementUsername); + cy.get('#password').type(alarmManagementPassword); + cy.get('button[type="submit"]').click(); + + cy.wait('@login'); + cy.wait('@getActiveAlarms'); + cy.wait('@getActiveAlarms'); + + cy.get('[data-testid="alarm-row-am-1"]').within(() => { + cy.contains('Non da gestire').should('exist'); + cy.contains('button', 'GESTITO').should('be.disabled'); + }); + }); + + it('returns to first page after resolving the only alarm on page two', () => { + cy.contains('button', 'Successiva').click(); + cy.wait('@getActiveAlarms'); + cy.wait('@getActiveAlarms'); + + cy.contains('span', 'Pagina 2').should('be.visible'); + cy.get('[data-testid="alarm-row-am-7"]').within(() => { + cy.contains('button', 'GESTISCI').click(); + }); + + cy.wait('@resolveAlarm'); + cy.wait('@getActiveAlarms'); + cy.wait('@getActiveAlarms'); + cy.wait('@getActiveAlarms'); + + cy.contains('span', 'Pagina 1').should('be.visible'); + cy.get('[data-testid="alarm-row-am-7"]').should('not.exist'); + cy.get('[data-testid="alarm-row-am-1"]').should('exist'); + }); + + it('shows empty state when there are no active alarms', () => { + activeAlarmsState = []; + + cy.visit('/auth/login?returnUrl=%2Falarms%2Falarm-management'); + cy.get('#username').type(alarmManagementUsername); + cy.get('#password').type(alarmManagementPassword); + cy.get('button[type="submit"]').click(); + + cy.wait('@login'); + cy.wait('@getActiveAlarms'); + cy.wait('@getActiveAlarms'); + + cy.contains('Nessun allarme attivo al momento.').should('be.visible'); + cy.contains('button', 'Successiva').should('not.exist'); + cy.contains('button', 'Precedente').should('not.exist'); + }); + + it('keeps the previous button disabled on the first page', () => { + cy.contains('button', 'Precedente').should('be.disabled'); + cy.contains('span', 'Pagina 1').should('be.visible'); + }); +}); diff --git a/frontend/cypress/e2e/analytics.cy.ts b/frontend/cypress/e2e/analytics.cy.ts new file mode 100644 index 00000000..a6ead7f1 --- /dev/null +++ b/frontend/cypress/e2e/analytics.cy.ts @@ -0,0 +1,362 @@ +const analyticsUsername = 'Mario Rossi'; +const analyticsPassword = ['A', 'd', 'm', 'i', 'n', 'A', 'c', 'c', 'e', 's', 's', '1', '2', '3'].join(''); +const analyticsLinkedEmail = 'admin@example.com'; + +const createAnalyticsAccessToken = (): string => { + const claims = { + userId: '1', + username: analyticsUsername, + role: 'AMMINISTRATORE' as const, + isFirstAccess: false, + }; + + const encodedPayload = btoa(JSON.stringify(claims)) + .replaceAll('+', '-') + .replaceAll('/', '_') + .replaceAll('=', ''); + + return `header.${encodedPayload}.signature`; +}; + +describe('Analytics e2e', () => { + beforeEach(() => { + cy.viewport(1440, 1000); + + cy.intercept('POST', '**/auth/login', { + statusCode: 200, + body: { + accessToken: createAnalyticsAccessToken(), + }, + }).as('login'); + + cy.intercept('GET', '**/my-vimar/account', { + statusCode: 200, + body: { + email: analyticsLinkedEmail, + isLinked: true, + }, + }); + + cy.intercept('GET', '**/api/vimar-account', { + statusCode: 200, + body: { + email: analyticsLinkedEmail, + isLinked: true, + }, + }); + + cy.intercept('GET', '**/alarm-events/unmanaged/*/*/*', { + statusCode: 200, + body: [], + }).as('getUnmanagedAlarms'); + + cy.intercept('GET', '**/plant/all', { + statusCode: 200, + body: [ + { + id: '301', + name: 'Appartamento Aurora', + rooms: [], + }, + { + id: '302', + name: 'Appartamento Luna', + rooms: [], + }, + ], + }).as('getApartments'); + + cy.intercept('GET', '**/analytics/*', (req) => { + const apartmentId = req.url.split('/').pop()?.split('?')[0] ?? '301'; + + const analyticsByApartment: Record = { + '301': [ + { + title: 'Consumo energetico appartamento', + metric: 'plant-consumption', + unit: 'kWh', + labels: ['Lun', 'Mar'], + series: [ + { id: 's1', name: 'Consumi', data: [18, 21] }, + ], + suggestion: { + isSuggestion: true, + message: ['Ridurre il setpoint di 1 grado nelle ore notturne.'], + }, + }, + { + title: 'Anomalie impianto', + metric: 'plant-anomalies', + unit: 'numero', + labels: ['Lun', 'Mar'], + series: [ + { id: 's2', name: 'Anomalie', data: [2, 1] }, + ], + suggestion: { + isSuggestion: false, + message: [], + }, + }, + { + title: 'Rilevamento presenza', + metric: 'sensor-presence', + unit: 'rilevamenti', + labels: ['Lun', 'Mar'], + series: [ + { id: 's3', name: 'Presenze', data: [30, 25] }, + ], + suggestion: { + isSuggestion: false, + message: [], + }, + }, + { + title: 'Presenza prolungata ambiente', + metric: 'sensor-long-presence', + unit: 'eventi', + labels: ['Lun', 'Mar'], + series: [ + { id: 's4', name: 'Presenza prolungata', data: [4, 3] }, + ], + suggestion: { + isSuggestion: false, + message: [], + }, + }, + { + title: 'Variazioni temperatura', + metric: 'thermostat-temperature', + unit: '°C', + labels: ['Lun', 'Mar'], + series: [ + { id: 's5', name: 'Temperatura', data: [20, 21] }, + ], + suggestion: { + isSuggestion: true, + message: ['Ottimizzare i cicli HVAC nelle fasce serali.'], + }, + }, + { + title: 'Allarmi inviati e risolti', + metric: 'ward-resolved-alarm', + unit: 'numero', + labels: ['Settimana'], + series: [ + { id: 's6', name: 'Inviati', data: [9] }, + { id: 's7', name: 'Risolti', data: [7] }, + ], + suggestion: { + isSuggestion: false, + message: [], + }, + }, + { + title: 'Frequenza allarmi', + metric: 'ward-alarms-frequency', + unit: 'numero', + labels: ['Settimana'], + series: [ + { id: 's8', name: 'Frequenza', data: [9] }, + ], + suggestion: { + isSuggestion: false, + message: [], + }, + }, + { + title: 'Frequenza cadute', + metric: 'ward-falls', + unit: 'numero', + labels: ['Settimana'], + series: [ + { id: 's9', name: 'Cadute', data: [2] }, + ], + suggestion: { + isSuggestion: false, + message: [], + }, + }, + ], + '302': [ + { + title: 'Consumo energetico appartamento B', + metric: 'plant-consumption', + unit: 'kWh', + labels: ['Lun', 'Mar'], + series: [ + { id: 's1', name: 'Consumi', data: [12, 15] }, + ], + suggestion: { + isSuggestion: true, + message: ['Spostare i carichi sulle fasce meno energivore.'], + }, + }, + { + title: 'Anomalie impianto B', + metric: 'plant-anomalies', + unit: 'numero', + labels: ['Lun', 'Mar'], + series: [ + { id: 's2', name: 'Anomalie', data: [1, 0] }, + ], + suggestion: { + isSuggestion: false, + message: [], + }, + }, + { + title: 'Rilevamento presenza B', + metric: 'sensor-presence', + unit: 'rilevamenti', + labels: ['Lun', 'Mar'], + series: [ + { id: 's3', name: 'Presenze', data: [22, 18] }, + ], + suggestion: { + isSuggestion: false, + message: [], + }, + }, + { + title: 'Presenza prolungata ambiente B', + metric: 'sensor-long-presence', + unit: 'eventi', + labels: ['Lun', 'Mar'], + series: [ + { id: 's4', name: 'Presenza prolungata', data: [3, 2] }, + ], + suggestion: { + isSuggestion: false, + message: [], + }, + }, + { + title: 'Variazioni temperatura B', + metric: 'thermostat-temperature', + unit: '°C', + labels: ['Lun', 'Mar'], + series: [ + { id: 's5', name: 'Temperatura', data: [19, 20] }, + ], + suggestion: { + isSuggestion: true, + message: ['Verificare il profilo HVAC serale.'], + }, + }, + { + title: 'Allarmi inviati e risolti B', + metric: 'ward-resolved-alarm', + unit: 'numero', + labels: ['Settimana'], + series: [ + { id: 's6', name: 'Inviati', data: [6] }, + { id: 's7', name: 'Risolti', data: [5] }, + ], + suggestion: { + isSuggestion: false, + message: [], + }, + }, + { + title: 'Frequenza allarmi B', + metric: 'ward-alarms-frequency', + unit: 'numero', + labels: ['Settimana'], + series: [ + { id: 's8', name: 'Frequenza', data: [4] }, + ], + suggestion: { + isSuggestion: false, + message: [], + }, + }, + { + title: 'Frequenza cadute B', + metric: 'ward-falls', + unit: 'numero', + labels: ['Settimana'], + series: [ + { id: 's9', name: 'Cadute', data: [1] }, + ], + suggestion: { + isSuggestion: false, + message: [], + }, + }, + ], + }; + + req.reply({ + statusCode: 200, + body: analyticsByApartment[apartmentId] ?? analyticsByApartment['301'], + }); + }).as('getAnalytics'); + + cy.visit('/auth/login'); + cy.get('#username').type(analyticsUsername); + cy.get('#password').type(analyticsPassword); + cy.get('button[type="submit"]').click(); + + cy.wait('@login'); + cy.location('pathname').should('eq', '/dashboard'); + + cy.get('a.sidebar-link').contains('Analytics').click({ force: true }); + cy.location('pathname').should('eq', '/analytics'); + + cy.wait('@getApartments'); + cy.wait('@getAnalytics'); + }); + + it('RF61-OBL Utente deve poter visualizzare le analytics', () => { + cy.contains('h1', 'Cruscotto analitico').should('be.visible'); + cy.get('section[aria-label="Analytics reparto"]').should('be.visible'); + }); + + it('RF62-OBL Visualizzazione elenco suggerimenti risparmio energetico nelle analytics', () => { + cy.get('[data-test="suggestions-sidebar"]').should('exist'); + }); + + it('RF63-OBL Visualizzazione di un suggerimento risparmio energetico', () => { + cy.get('[data-test="suggestion-item"]').first().should('contain', 'Ridurre il setpoint'); + }); + + it('RF64-OBL Visualizzazione grafico dedicato al consumo energetico', () => { + cy.contains('h1', 'Consumo energetico appartamento').should('exist'); + }); + + it('RF65-OBL Visualizzazione grafico dedicato alle anomalie dell impianto', () => { + cy.contains('h1', 'Anomalie impianto').should('exist'); + }); + + it('RF66-OBL Visualizzazione grafico relativo al rilevamento di presenza', () => { + cy.contains('h1', 'Rilevamento presenza').should('exist'); + }); + + it('RF67-OBL Visualizzazione grafico presenza prolungata nello stesso ambiente', () => { + cy.contains('h1', 'Presenza prolungata ambiente').should('exist'); + }); + + it('RF68-OBL Visualizzazione grafico relativo alle variazioni di temperatura', () => { + cy.contains('h1', 'Variazioni temperatura').should('exist'); + }); + + it('RF69-OBL Visualizzazione grafico allarmi inviati e risolti', () => { + cy.contains('h1', 'Allarmi inviati e risolti').should('exist'); + }); + + it('RF70-OPL Visualizzazione grafico frequenza degli allarmi', () => { + cy.contains('h1', 'Frequenza allarmi').should('exist'); + }); + + it('RF71-OPL Visualizzazione grafico frequenza delle cadute', () => { + cy.contains('h1', 'Frequenza cadute').should('exist'); + }); + + it('switches analytics when a different apartment is selected', () => { + cy.get('#apartment-select').select('302'); + + cy.wait('@getAnalytics'); + cy.contains('h1', 'Consumo energetico appartamento B').should('exist'); + cy.contains('h1', 'Frequenza cadute B').should('exist'); + }); +}); diff --git a/frontend/cypress/e2e/apartment-monitor.cy.ts b/frontend/cypress/e2e/apartment-monitor.cy.ts new file mode 100644 index 00000000..fe491e57 --- /dev/null +++ b/frontend/cypress/e2e/apartment-monitor.cy.ts @@ -0,0 +1,358 @@ +const apartmentUsername = 'Mario Rossi'; +const apartmentPassword = ['A', 'd', 'm', 'i', 'n', 'A', 'c', 'c', 'e', 's', 's', '1', '2', '3'].join(''); +const apartmentLinkedEmail = 'admin@example.com'; + +const createApartmentAccessToken = (): string => { + const claims = { + userId: '1', + username: apartmentUsername, + role: 'AMMINISTRATORE' as const, + isFirstAccess: false, + }; + + const encodedPayload = btoa(JSON.stringify(claims)) + .replaceAll('+', '-') + .replaceAll('/', '_') + .replaceAll('=', ''); + + return `header.${encodedPayload}.signature`; +}; + +describe('Apartment monitor e2e', () => { + beforeEach(() => { + cy.viewport(1440, 1000); + + cy.intercept('POST', '**/auth/login', { + statusCode: 200, + body: { + accessToken: createApartmentAccessToken(), + }, + }).as('login'); + + cy.intercept('GET', '**/my-vimar/account', { + statusCode: 200, + body: { + email: apartmentLinkedEmail, + isLinked: true, + }, + }); + + cy.intercept('GET', '**/api/vimar-account', { + statusCode: 200, + body: { + email: apartmentLinkedEmail, + isLinked: true, + }, + }); + + cy.intercept('GET', '**/alarm-events/unmanaged/*/*/*', { + statusCode: 200, + body: [ + { + id: 'a-room-1', + alarmRuleId: 'rule-1', + deviceId: 'dev-lamp-1', + alarmName: 'Allarme stanza soggiorno', + priority: 4, + activationTime: new Date(Date.now() - 5 * 60 * 1000).toISOString(), + resolutionTime: null, + position: 'Soggiorno', + userId: null, + userUsername: null, + }, + ], + }).as('getUnmanagedAlarms'); + + const plantAllBody = [ + { + id: '301', + name: 'Appartamento Aurora', + wardId: 2, + rooms: [ + { + id: 'room-1', + name: 'Soggiorno', + devices: [ + { + id: 'dev-lamp-1', + name: 'Luce soggiorno', + type: 'SS_AUTOMATION_ONOFF', + subType: 'SF_LIGHT', + datapoints: [ + { + id: 'dp-light-1', + name: 'Comando luce', + readable: true, + writable: true, + valueType: 'enum', + enum: ['ON', 'OFF'], + sfeType: 'SF_LIGHT_CMD', + }, + ], + }, + { + id: 'dev-blind-1', + name: 'Tapparella cucina', + type: 'SS_BLIND_CONTROLLER', + subType: 'SF_WINDOW', + datapoints: [ + { + id: 'dp-blind-1', + name: 'Comando tapparella', + readable: true, + writable: true, + valueType: 'enum', + enum: ['UP', 'DOWN'], + sfeType: 'SFE_CMD_BLIND', + }, + ], + }, + { + id: 'dev-light-fallback', + name: 'Hall Light', + type: 'SS_GENERIC_DEVICE', + subType: 'SF_MISC', + datapoints: [ + { + id: 'dp-light-fallback-1', + name: 'Comando hall', + readable: true, + writable: true, + valueType: 'enum', + enum: ['ON', 'OFF'], + }, + ], + }, + { + id: 'dev-unknown-1', + name: 'Mystery Sensor', + type: 'UNSUPPORTED_DEVICE', + subType: 'SF_MISC', + datapoints: [ + { + id: 'dp-unknown-1', + name: 'Comando custom', + readable: true, + writable: true, + valueType: 'enum', + enum: ['X', 'Y'], + sfeType: 'SFE_CMD_CUSTOM_XYZ', + }, + ], + }, + ], + }, + { + id: 'room-2', + name: 'Camera 1', + devices: [ + { + id: 'dev-thermo-1', + name: 'Termostato camera', + type: 'SS_THERMOSTAT', + subType: 'SF_TEMPERATURE', + datapoints: [ + { + id: 'dp-thermo-1', + name: 'Setpoint', + readable: true, + writable: true, + valueType: 'enum', + enum: ['18', '20', '22'], + sfeType: 'SF_TEMPERATURE_CMD', + }, + ], + }, + { + id: 'dev-sfe-tier-1', + name: 'Sonda reparto', + type: 'GENERIC_SENSOR', + subType: 'SF_MISC', + datapoints: [ + { + id: 'dp-sfe-tier-1', + name: 'Temperatura stanza', + readable: true, + writable: true, + valueType: 'enum', + enum: ['18', '20', '22'], + sfeType: 'SFE_STATE_TEMPERATURE', + }, + ], + }, + ], + }, + ], + }, + { + id: '302', + name: 'Appartamento Luna', + wardId: 3, + rooms: [ + { + id: 'room-3', + name: 'Studio', + devices: [ + { + id: 'dev-light-2', + name: 'Luce studio', + type: 'SS_AUTOMATION_ONOFF', + subType: 'SF_LIGHT', + datapoints: [ + { + id: 'dp-light-2', + name: 'Comando luce studio', + readable: true, + writable: true, + valueType: 'enum', + enum: ['ON', 'OFF'], + sfeType: 'SF_LIGHT_CMD', + }, + ], + }, + ], + }, + ], + }, + ]; + + cy.intercept('GET', '**/plant/all', { + statusCode: 200, + body: plantAllBody, + }).as('getPlantAll'); + + cy.intercept('GET', /\/plant\?plantid=.*/, (req) => { + const plantId = req.url.split('plantid=').pop() ?? '301'; + + req.reply({ + statusCode: 200, + body: plantId === '302' ? plantAllBody[1] : plantAllBody[0], + }); + }).as('getPlantById'); + + cy.intercept('GET', '**/device/*/value', (req) => { + const deviceId = req.url.split('/').at(-2) ?? ''; + req.reply({ + statusCode: 200, + body: { + deviceId, + values: [], + }, + }); + }).as('getDeviceValue'); + + cy.intercept('GET', '**/analytics/*', { + statusCode: 200, + body: [], + }); + + cy.visit('/auth/login'); + cy.get('#username').type(apartmentUsername); + cy.get('#password').type(apartmentPassword); + cy.get('button[type="submit"]').click(); + + cy.wait('@login'); + cy.location('pathname').should('eq', '/dashboard'); + + cy.get('a.sidebar-link').contains('Dispositivi').click({ force: true }); + cy.location('pathname').should('eq', '/apartment-monitor'); + + cy.wait('@getPlantAll'); + cy.wait('@getPlantById'); + }); + + it('RF72-OBL Utente deve poter visualizzare un appartamento del Sistema', () => { + cy.get('section[aria-label="Monitor appartamento"]').should('be.visible'); + }); + + it('RF73-OBL Visualizzazione nome appartamento del Sistema', () => { + cy.contains('h1', 'Appartamento Aurora').should('be.visible'); + }); + + it('RF74-OPL Visualizzazione mappa degli allarmi dell appartamento', () => { + cy.get('section[aria-label="Mappa allarmi"]').should('be.visible'); + cy.contains('h2', 'Panoramica allarmi').should('be.visible'); + }); + + it('RF75-OBL Visualizzazione stanze dell appartamento', () => { + cy.contains('h3', 'Soggiorno').should('be.visible'); + cy.contains('h3', 'Camera 1').should('be.visible'); + }); + + it('RF76-OBL Utente deve visualizzare una stanza nel dettaglio', () => { + cy.contains('h3', 'Soggiorno').should('be.visible'); + cy.get('table[aria-label="Tabella endpoint Soggiorno"]').should('exist'); + }); + + it('RF77-OBL Visualizzazione nome della stanza nel dettaglio', () => { + cy.contains('h3', 'Soggiorno').should('be.visible'); + }); + + it('RF78-OBL Visualizzazione elenco dispositivi della stanza', () => { + cy.contains('table[aria-label="Tabella endpoint Soggiorno"] tbody tr', 'Luce soggiorno').should('exist'); + cy.contains('table[aria-label="Tabella endpoint Camera 1"] tbody tr', 'Termostato camera').should('exist'); + }); + + it('switches the monitored apartment and reloads the detail view', () => { + cy.get('#active-apartment').select('302'); + cy.wait('@getPlantById'); + + cy.contains('h1', 'Appartamento Luna').should('be.visible'); + cy.get('table[aria-label="Tabella endpoint Studio"]').should('exist'); + }); + + it('refreshes apartment data after alarm lifecycle updates are broadcast', () => { + let initialPlantCalls = 0; + + cy.get('@getPlantById.all').then((calls) => { + initialPlantCalls = calls.length; + }); + + cy.window().then((windowObject) => { + windowObject.dispatchEvent( + new windowObject.CustomEvent('alarm-lifecycle-updated', { + detail: { + type: 'triggered', + alarmEventId: 'evt-lifecycle-1', + }, + }), + ); + }); + + cy.wait('@getPlantById'); + cy.get('@getPlantById.all').its('length').should('be.greaterThan', initialPlantCalls); + cy.contains('h1', 'Appartamento Aurora').should('be.visible'); + }); + + it('maps device type labels across primary, SFE, fallback, and unknown branches', () => { + cy.contains('tr', 'Termostato camera').within(() => { + cy.contains('td', 'Termostato').should('exist'); + }); + + cy.contains('tr', 'Sonda reparto').within(() => { + cy.contains('td', 'Termostato').should('exist'); + }); + + cy.contains('tr', 'Hall Light').within(() => { + cy.contains('td', 'Luce').should('exist'); + }); + + cy.contains('tr', 'Mystery Sensor').within(() => { + cy.contains('td', 'Sconosciuto').should('exist'); + }); + }); + + it('maps known and unknown endpoint labels in endpoint taxonomy', () => { + cy.contains('tr', 'Tapparella cucina').within(() => { + cy.contains('td', 'Comando movimento tapparella').should('exist'); + }); + + cy.contains('tr', 'Mystery Sensor').within(() => { + cy.contains('td', 'Comando custom xyz').should('exist'); + }); + + cy.contains('tr', 'Hall Light').within(() => { + cy.contains('td', 'Endpoint sconosciuto').should('exist'); + }); + }); +}); diff --git a/frontend/cypress/e2e/dashboard.cy.ts b/frontend/cypress/e2e/dashboard.cy.ts new file mode 100644 index 00000000..3482c6c8 --- /dev/null +++ b/frontend/cypress/e2e/dashboard.cy.ts @@ -0,0 +1,353 @@ +import type { ActiveAlarm } from '../../src/app/core/alarm/models/active-alarm.model'; +import { AlarmPriority } from '../../src/app/core/alarm/models/alarm-priority.enum'; + +const adminUsername = 'Mario Rossi'; +const adminPassword = ['A', 'd', 'm', 'i', 'n', 'A', 'c', 'c', 'e', 's', 's', '1', '2', '3'].join(''); +const linkedEmail = 'admin@example.com'; + +const createAccessToken = (): string => { + const claims = { + userId: '1', + username: adminUsername, + role: 'AMMINISTRATORE' as const, + isFirstAccess: false, + }; + + const encodedPayload = btoa(JSON.stringify(claims)) + .replaceAll('+', '-') + .replaceAll('/', '_') + .replaceAll('=', ''); + + return `header.${encodedPayload}.signature`; +}; + +const openProfilePanel = () => { + cy.get('button[aria-label="Apri profilo"]').click(); + cy.contains('p', 'Area Utente').should('be.visible'); +}; + + +describe('Dashboard e2e', () => { + let activeAlarms: ActiveAlarm[]; + + beforeEach(() => { + const now = Date.now(); + + activeAlarms = [ + { + id: 'a1', + alarmRuleId: 'rule-1', + deviceId: 'dev-11', + alarmName: 'Caduta paziente', + priority: AlarmPriority.RED, + activationTime: new Date(now - 12 * 60 * 1000).toISOString(), + resolutionTime: null, + position: 'Stanza 101', + userId: null, + userUsername: null, + }, + { + id: 'a2', + alarmRuleId: 'rule-2', + deviceId: 'dev-12', + alarmName: 'Saturazione bassa', + priority: AlarmPriority.ORANGE, + activationTime: new Date(now - 4 * 60 * 1000).toISOString(), + resolutionTime: null, + position: 'Stanza 102', + userId: null, + userUsername: null, + }, + ]; + + cy.viewport(1440, 1000); + + cy.intercept('POST', '**/auth/login', (req) => { + expect(req.body).to.deep.equal({ + username: adminUsername, + password: adminPassword, + }); + + req.reply({ + statusCode: 200, + body: { + accessToken: createAccessToken(), + }, + }); + }).as('login'); + + cy.intercept('GET', '**/my-vimar/account', { + statusCode: 200, + body: { + email: linkedEmail, + isLinked: true, + }, + }); + + cy.intercept('GET', '**/api/vimar-account', { + statusCode: 200, + body: { + email: linkedEmail, + isLinked: true, + }, + }); + + cy.intercept('GET', '**/alarm-events/unmanaged/*/*/*', (req) => { + const chunks = req.url.split('/'); + const offset = Number(chunks.at(-1)); + + req.reply({ + statusCode: 200, + body: offset === 0 ? activeAlarms : [], + }); + }).as('getUnmanagedAlarms'); + + cy.intercept('PATCH', '**/alarm-events/resolve', (req) => { + expect(req.body).to.deep.equal({ + alarmId: 'a1', + userId: 1, + }); + + activeAlarms = activeAlarms.filter((alarm) => alarm.id !== 'a1'); + + req.reply({ + statusCode: 200, + body: null, + }); + }).as('resolveAlarm'); + + cy.intercept('GET', '**/plant/all', { + statusCode: 200, + body: [ + { + id: '301', + name: 'Analisi clima e presenze', + rooms: [ + { + id: 'r1', + name: 'Analisi clima', + devices: [ + { id: 'd1', name: 'Sensore temperatura' }, + { id: 'd2', name: 'Sensore umidita' }, + ], + }, + { + id: 'r2', + name: 'Area presenze', + devices: [ + { id: 'd3', name: 'Sensore presenza' }, + ], + }, + ], + }, + ], + }).as('getApartments'); + + cy.intercept('GET', '**/analytics/*', { + statusCode: 200, + body: [ + { + title: 'Analisi consumi', + metric: 'plant-consumption', + unit: 'kWh', + labels: ['Lun', 'Mar'], + series: [ + { + id: 'consumption-series', + name: 'Consumi', + data: [22, 28], + }, + ], + suggestion: { + message: [], + isSuggestion: false, + }, + }, + { + title: 'Statistiche allarmi - Risolti: 12 - Attivi: 5', + metric: 'ward-resolved-alarm', + unit: 'numero', + labels: ['Settimana corrente'], + series: [ + { + id: 'resolved-series', + name: 'Risolti', + data: [12], + }, + { + id: 'active-series', + name: 'Attivi', + data: [5], + }, + ], + suggestion: { + message: [], + isSuggestion: false, + }, + }, + ], + }).as('getAnalytics'); + + cy.visit('/auth/login'); + cy.get('#username').type(adminUsername); + cy.get('#password').type(adminPassword); + cy.get('button[type="submit"]').click(); + + cy.wait('@login'); + cy.location('pathname').should('eq', '/dashboard'); + cy.contains('h1', 'Dashboard').should('be.visible'); + + cy.wait('@getUnmanagedAlarms'); + cy.wait('@getApartments'); + cy.wait('@getAnalytics'); + }); + + it('RF43-OBL Visualizzazione dashboard con stato del Sistema', () => { + cy.get('section[aria-label="Dashboard principale"]').should('be.visible'); + cy.contains('h1', 'Dashboard').should('be.visible'); + cy.contains('p', 'Supervisione attiva').should('be.visible'); + }); + + it('RF44-OBL Visualizzazione modulo gestione allarmi nella dashboard', () => { + cy.contains('h2', 'Gestione allarmi').should('be.visible'); + cy.get('section[aria-label="Gestione allarmi"]').should('be.visible'); + }); + + it('RF45-OBL Visualizzazione ogni singolo allarme nel modulo gestione allarmi', () => { + cy.get('[data-testid^="alarm-row-"]').should('have.length.at.least', 2); + cy.get('[data-testid="alarm-row-a1"]').should('contain', 'Caduta paziente'); + cy.get('[data-testid="alarm-row-a2"]').should('contain', 'Saturazione bassa'); + }); + + it('RF46-OBL Visualizzazione segnale di pericolo nel dettaglio allarme', () => { + cy.get('[data-testid="alarm-row-a1"]').within(() => { + cy.get('[aria-label^="Priorita "]').should('be.visible'); + }); + }); + + it('RF47-OBL Visualizzazione nome nel dettaglio allarme', () => { + cy.get('[data-testid="alarm-row-a1"]').should('contain', 'Caduta paziente'); + }); + + it('RF48-OBL Visualizzazione tempo trascorso dallo scatto dell allarme', () => { + cy.get('[data-testid="alarm-row-a1"] td') + .eq(4) + .invoke('text') + .should('match', /[smhg] fa/); + }); + + it('RF49-OBL Visualizzazione modulo statistiche allarmi nella dashboard', () => { + cy.contains('h2', 'Monitor dispositivi').should('be.visible'); + cy.contains('h1', 'Statistiche allarmi - Risolti: 12 - Attivi: 5').should('exist'); + }); + + it('RF50-OBL Visualizzazione numero di allarmi risolti nel modulo statistiche allarmi', () => { + cy.contains('h1', 'Statistiche allarmi - Risolti: 12 - Attivi: 5').should('exist'); + cy.contains('Risolti: 12').should('exist'); + }); + + it('RF51-OBL Visualizzazione numero di allarmi attivi nel modulo statistiche allarmi', () => { + cy.contains('h1', 'Statistiche allarmi - Risolti: 12 - Attivi: 5').should('exist'); + cy.contains('Attivi: 5').should('exist'); + }); + + it('RF52-OBL Visualizzazione modulo informazioni Utente dalla dashboard', () => { + openProfilePanel(); + cy.contains('p', 'Area Utente').should('be.visible'); + cy.contains('p', 'Username:').should('be.visible'); + }); + + it('RF53-OBL Visualizzazione nome Utente nel modulo informazioni Utente', () => { + openProfilePanel(); + cy.contains('h2', 'Mario').should('be.visible'); + }); + + it('RF54-OBL Visualizzazione cognome Utente nel modulo informazioni Utente', () => { + openProfilePanel(); + cy.contains('h2', 'Rossi').should('be.visible'); + }); + + it('RF55-OBL Visualizzazione modulo analisi clima nella dashboard', () => { + cy.contains('Analisi clima').should('be.visible'); + }); + + it('RF56-OBL Visualizzazione modulo analisi consumi nella dashboard', () => { + cy.contains('h1', 'Analisi consumi').should('be.visible'); + }); + + it('RF57-OBL Visualizzazione modulo analisi presenze nella dashboard', () => { + cy.contains('presenze').should('be.visible'); + }); + + it('RF60-OBL Utente deve poter risolvere un allarme', () => { + cy.get('[data-testid="alarm-row-a1"]').within(() => { + cy.contains('button', 'GESTISCI').click(); + }); + + cy.wait('@resolveAlarm'); + cy.wait('@getUnmanagedAlarms'); + cy.get('[data-testid="alarm-row-a1"]').should('not.exist'); + }); + + it('shows an error message when resolving an alarm from the dashboard widget fails', () => { + cy.intercept('PATCH', '**/alarm-events/resolve', { + statusCode: 500, + body: { message: 'Internal error' }, + }).as('resolveAlarmFailure'); + + cy.get('[data-testid="alarm-row-a1"]').within(() => { + cy.contains('button', 'GESTISCI').click(); + }); + + cy.wait('@resolveAlarmFailure'); + cy.get('[role="alert"]').should('exist'); + cy.get('[data-testid="alarm-row-a1"]').should('exist'); + }); + + it('opens and closes the topbar notification panel preserving empty state', () => { + cy.get('button[aria-label="Visualizza notifiche"]').click(); + cy.get('section[aria-label="Notifiche recenti"]').should('be.visible'); + cy.contains('Nessuna notifica disponibile.').should('be.visible'); + + cy.get('button[aria-label="Visualizza notifiche"]').click(); + cy.get('section[aria-label="Notifiche recenti"]').should('not.exist'); + + cy.get('button[aria-label="Visualizza notifiche"]').click(); + cy.get('section[aria-label="Notifiche recenti"]').should('be.visible'); + cy.contains('Nessuna notifica disponibile.').should('be.visible'); + }); + + it('navigates to notifications archive from topbar panel using Vedi tutte', () => { + cy.intercept('GET', '**/alarm-events/unmanaged/*/*/*', { + statusCode: 200, + body: [], + }).as('getUnmanagedArchive'); + + cy.intercept('GET', '**/alarm-events/managed/*/*/*', { + statusCode: 200, + body: [], + }).as('getManagedArchive'); + + cy.get('button[aria-label="Visualizza notifiche"]').click(); + cy.get('section[aria-label="Notifiche recenti"]').should('be.visible'); + cy.contains('button', 'Vedi tutte').click(); + + cy.location('pathname').should('eq', '/notifications'); + cy.wait('@getUnmanagedArchive'); + cy.wait('@getManagedArchive'); + cy.get('section[aria-label="Notifiche recenti"]').should('not.exist'); + }); + + it('logs out from the profile panel and returns to the login page', () => { + cy.intercept('POST', '**/auth/logout', { + statusCode: 200, + body: null, + }).as('logout'); + + openProfilePanel(); + cy.contains('button', 'Esci').click(); + + cy.wait('@logout'); + cy.location('pathname').should('eq', '/auth/login'); + }); +}); diff --git a/frontend/cypress/e2e/device-interaction.cy.ts b/frontend/cypress/e2e/device-interaction.cy.ts new file mode 100644 index 00000000..239bde38 --- /dev/null +++ b/frontend/cypress/e2e/device-interaction.cy.ts @@ -0,0 +1,284 @@ +const deviceInteractionUsername = 'Mario Rossi'; +const deviceInteractionPassword = ['A', 'd', 'm', 'i', 'n', 'A', 'c', 'c', 'e', 's', 's', '1', '2', '3'].join(''); +const deviceInteractionLinkedEmail = 'admin@example.com'; + +const createDeviceInteractionAccessToken = (): string => { + const claims = { + userId: '1', + username: deviceInteractionUsername, + role: 'AMMINISTRATORE' as const, + isFirstAccess: false, + }; + + const encodedPayload = btoa(JSON.stringify(claims)) + .replaceAll('+', '-') + .replaceAll('/', '_') + .replaceAll('=', ''); + + return `header.${encodedPayload}.signature`; +}; + +describe('Device interaction e2e', () => { + beforeEach(() => { + cy.viewport(1440, 1000); + cy.clearLocalStorage('activePlantId'); + + cy.intercept('POST', '**/auth/login', { + statusCode: 200, + body: { + accessToken: createDeviceInteractionAccessToken(), + }, + }).as('login'); + + cy.intercept('GET', '**/my-vimar/account', { + statusCode: 200, + body: { + email: deviceInteractionLinkedEmail, + isLinked: true, + }, + }); + + cy.intercept('GET', '**/api/vimar-account', { + statusCode: 200, + body: { + email: deviceInteractionLinkedEmail, + isLinked: true, + }, + }); + + cy.intercept('GET', '**/alarm-events/unmanaged/*/*/*', { + statusCode: 200, + body: [], + }); + + const plantBody = { + id: 'plant-1', + name: 'Appartamento Aurora', + rooms: [ + { + id: 'room-main', + name: 'Suite principale', + devices: [ + { + id: 'dev-thermostat', + name: 'Termostato Suite', + type: 'THERMOSTAT_DEVICE', + datapoints: [ + { + id: 'dp-thermostat', + name: 'Setpoint', + readable: true, + writable: true, + valueType: 'enum', + enum: ['18', '20', '22'], + sfeType: 'SFE_CMD_HVACMODE', + }, + ], + }, + { + id: 'dev-fall', + name: 'Sensore Caduta Letto', + type: 'FALL_SENSOR_DEVICE', + datapoints: [ + { + id: 'dp-fall', + name: 'Stato caduta', + readable: true, + writable: true, + valueType: 'enum', + enum: ['OFF', 'ON'], + sfeType: 'SFE_STATE_FALL', + }, + ], + }, + { + id: 'dev-presence', + name: 'Sensore Presenza Camera', + type: 'PRESENCE_SENSOR_DEVICE', + datapoints: [ + { + id: 'dp-presence', + name: 'Stato presenza', + readable: true, + writable: true, + valueType: 'enum', + enum: ['OFF', 'ON'], + sfeType: 'SFE_STATE_PRESENCE', + }, + ], + }, + { + id: 'dev-light', + name: 'Punto Luce Ingresso', + type: 'LIGHT_DEVICE', + datapoints: [ + { + id: 'dp-light', + name: 'Comando luce', + readable: true, + writable: true, + valueType: 'enum', + enum: ['OFF', 'ON'], + sfeType: 'SFE_CMD_ONOFF', + }, + ], + }, + { + id: 'dev-alarm-button', + name: 'Pulsante Allarme Bagno', + type: 'ALARM_BUTTON_DEVICE', + datapoints: [ + { + id: 'dp-alarm-button', + name: 'Comando SOS', + readable: true, + writable: true, + valueType: 'enum', + enum: ['OFF', 'ON'], + sfeType: 'SFE_CMD_DOWNKEY_ACTIVESCENE', + }, + ], + }, + { + id: 'dev-door', + name: 'Porta di Ingresso Principale', + type: 'DOOR_CONTROL_DEVICE', + datapoints: [ + { + id: 'dp-door', + name: 'Comando porta', + readable: true, + writable: true, + valueType: 'enum', + enum: ['LOCK', 'UNLOCK'], + sfeType: 'SFE_CMD_ONOFF', + }, + ], + }, + { + id: 'dev-blind', + name: 'Tapparella Salone', + type: 'BLIND_CONTROL_DEVICE', + datapoints: [ + { + id: 'dp-blind', + name: 'Comando tapparella', + readable: true, + writable: true, + valueType: 'enum', + enum: ['UP', 'DOWN'], + sfeType: 'SFE_CMD_BLIND', + }, + ], + }, + ], + }, + ], + }; + + cy.intercept('GET', '**/plant/all', { + statusCode: 200, + body: [ + { + id: 'plant-1', + name: 'Appartamento Aurora', + rooms: [], + }, + ], + }).as('getPlants'); + + cy.intercept('GET', '**/plant?plantid=*', { + statusCode: 200, + body: plantBody, + }).as('getPlantById'); + + cy.intercept('GET', '**/device/*/value', (req) => { + const deviceId = req.url.split('/').at(-2) ?? ''; + const valuesMap: Record = { + 'dev-thermostat': [{ datapointId: 'dp-thermostat', name: 'Setpoint', value: '20' }], + 'dev-fall': [{ datapointId: 'dp-fall', name: 'Stato caduta', value: 'OFF' }], + 'dev-presence': [{ datapointId: 'dp-presence', name: 'Stato presenza', value: 'ON' }], + 'dev-light': [{ datapointId: 'dp-light', name: 'Comando luce', value: 'OFF' }], + 'dev-alarm-button': [{ datapointId: 'dp-alarm-button', name: 'Comando SOS', value: 'OFF' }], + 'dev-door': [{ datapointId: 'dp-door', name: 'Comando porta', value: 'LOCK' }], + 'dev-blind': [{ datapointId: 'dp-blind', name: 'Comando tapparella', value: 'UP' }], + }; + + req.reply({ + statusCode: 200, + body: { + deviceId, + values: valuesMap[deviceId] ?? [], + }, + }); + }).as('getDeviceValue'); + + cy.intercept('POST', '**/device', { + statusCode: 202, + body: { + message: 'Datapoint value updated successfully', + statusCode: 202, + }, + }).as('writeDatapoint'); + + cy.visit('/auth/login?returnUrl=%2Fdevice-interaction'); + cy.get('#username').type(deviceInteractionUsername); + cy.get('#password').type(deviceInteractionPassword); + cy.get('button[type="submit"]').click(); + + cy.wait('@login'); + cy.location('pathname').should('eq', '/device-interaction'); + cy.wait('@getPlants'); + cy.wait('@getPlantById'); + }); + + it('RF79-OBL Visualizzazione singolo dispositivo dei tipi previsti', () => { + cy.contains('td', 'Termostato').should('exist'); + cy.contains('td', 'Sensore caduta').should('exist'); + cy.contains('td', 'Sensore presenza').should('exist'); + cy.contains('td', 'Luce').should('exist'); + cy.contains('td', 'Pulsante allarme').should('exist'); + cy.contains('td', 'Controllo accesso').should('exist'); + cy.contains('td', 'Tapparella').should('exist'); + }); + + it('RF80-OBL Utente visualizzando un dispositivo deve vedere il nome', () => { + cy.contains('table[aria-label="Tabella endpoint Suite principale"] tbody tr', 'Termostato Suite').should('exist'); + cy.contains('table[aria-label="Tabella endpoint Suite principale"] tbody tr', 'Porta di Ingresso Principale').should('exist'); + cy.contains('table[aria-label="Tabella endpoint Suite principale"] tbody tr', 'Tapparella Salone').should('exist'); + }); + + it('RF81-OBL Utente visualizzando un dispositivo deve vedere lo stato', () => { + cy.contains('table[aria-label="Tabella endpoint Suite principale"] tbody tr', 'Termostato Suite').should('contain', '20'); + cy.contains('table[aria-label="Tabella endpoint Suite principale"] tbody tr', 'Porta di Ingresso Principale').should('contain', 'LOCK'); + }); + + it('RF82-OPL Utente visualizzando un dispositivo deve vedere le azioni eseguibili', () => { + cy.contains('table[aria-label="Tabella endpoint Suite principale"] tbody tr', 'Termostato Suite').within(() => { + cy.contains('button', 'Scrivi').should('exist'); + }); + + cy.contains('table[aria-label="Tabella endpoint Suite principale"] tbody tr', 'Termostato Suite').within(() => { + cy.get('select').select('22'); + cy.contains('button', 'Scrivi').click(); + }); + + cy.wait('@writeDatapoint').its('request.body').should('deep.equal', { + datapointId: 'dp-thermostat', + value: '22', + }); + }); + + it('writes a command for another device row', () => { + cy.contains('table[aria-label="Tabella endpoint Suite principale"] tbody tr', 'Porta di Ingresso Principale').within(() => { + cy.get('select').select('UNLOCK'); + cy.contains('button', 'Scrivi').click(); + }); + + cy.wait('@writeDatapoint').its('request.body').should('deep.equal', { + datapointId: 'dp-door', + value: 'UNLOCK', + }); + }); + +}); diff --git a/frontend/cypress/e2e/internal-auth.cy.ts b/frontend/cypress/e2e/internal-auth.cy.ts new file mode 100644 index 00000000..334d286c --- /dev/null +++ b/frontend/cypress/e2e/internal-auth.cy.ts @@ -0,0 +1,569 @@ +const validUsername = 'mario.rossi'; +const validLoginSecret = ['L', 'o', 'g', 'i', 'n', 'A', 'c', 'c', 'e', 's', 's', '1', '2', '3'].join(''); +const validTemporarySecret = ['T', 'e', 'm', 'p', 'A', 'c', 'c', 'e', 's', 's', '1', '2'].join(''); +const validNewSecret = ['N', 'e', 'w', 'A', 'c', 'c', 'e', 's', 's', '1', '2', '3', '4'].join(''); +const shortSecret = 'shortpwd123'; + +const createAccessToken = ( + overrides: Partial<{ + userId: string; + username: string; + role: 'AMMINISTRATORE' | 'OPERATORE_SANITARIO'; + isFirstAccess: boolean; + }> = {} +): string => { + const claims = { + userId: '1', + username: validUsername, + role: 'OPERATORE_SANITARIO' as const, + isFirstAccess: false, + ...overrides, + }; + + const encodedPayload = btoa(JSON.stringify(claims)) + .replaceAll('+', '-') + .replaceAll('/', '_') + .replaceAll('=', ''); + + return `header.${encodedPayload}.signature`; +}; + +describe('Autenticazione frontend', () => { + beforeEach(() => { + cy.intercept('**/plant/all', { + statusCode: 200, + body: [], + }); + }); + + describe('Requisiti RF1-RF10', () => { + it('RF1-OBL Utente autenticabile presso il Sistema', () => { + cy.visit('/auth/login'); + + cy.intercept('POST', '**/auth/login', (req) => { + expect(req.body).to.deep.equal({ + username: validUsername, + password: validLoginSecret, + }); + + req.reply({ + statusCode: 200, + body: { + accessToken: createAccessToken(), + }, + }); + }).as('login'); + + cy.get('#username').type(validUsername); + cy.get('#password').type(validLoginSecret); + cy.get('button[type="submit"]').click(); + + cy.wait('@login'); + cy.location('pathname').should('eq', '/dashboard'); + cy.contains('h1', 'Dashboard').should('be.visible'); + }); + + it('RF2-OBL Inserimento username per autenticarsi', () => { + cy.visit('/auth/login'); + + cy.get('#password').type(validLoginSecret); + cy.get('#username').focus().blur(); + cy.contains('#username-error', "L'username è obbligatorio.").should('be.visible'); + + cy.get('#username').clear().type('ab').blur(); + cy.contains('#username-error', "L'username deve avere almeno 3 caratteri.").should('be.visible'); + }); + + it('RF3-OBL Inserimento password per autenticarsi', () => { + cy.visit('/auth/login'); + + cy.get('#username').type(validUsername); + cy.get('#password').focus().blur(); + cy.contains('#password-error', 'La password è obbligatoria.').should('be.visible'); + + cy.get('#password').clear().type(shortSecret).blur(); + cy.contains('#password-error', 'La password deve avere almeno 12 caratteri.').should('be.visible'); + }); + + it('RF4-OBL Errore su username non registrato o password errata', () => { + cy.visit('/auth/login'); + + cy.intercept('POST', '**/auth/login', { + statusCode: 401, + body: { message: 'Unauthorized' }, + }).as('loginUnauthorized'); + + cy.get('#username').type(validUsername); + cy.get('#password').type(validLoginSecret); + cy.get('button[type="submit"]').click(); + + cy.wait('@loginUnauthorized'); + cy.contains('p', 'Utente non trovato: username o password errati.').should('be.visible'); + }); + + it('RF5-OBL Autenticazione con impostazione nuova password', () => { + cy.visit('/auth/login'); + + cy.intercept('POST', '**/auth/login', (req) => { + expect(req.body).to.deep.equal({ + username: validUsername, + password: validTemporarySecret, + }); + + req.reply({ + statusCode: 200, + body: { + accessToken: createAccessToken({ isFirstAccess: true }), + }, + }); + }).as('temporaryLogin'); + + cy.intercept('POST', '**/auth/first-login', (req) => { + expect(req.body).to.deep.equal({ + username: validUsername, + tempPassword: validTemporarySecret, + password: validNewSecret, + }); + + req.reply({ + statusCode: 200, + body: { + accessToken: createAccessToken({ isFirstAccess: false }), + }, + }); + }).as('firstLogin'); + + cy.get('#username').type(validUsername); + cy.get('#password').type(validTemporarySecret); + cy.get('button[type="submit"]').click(); + + cy.wait('@temporaryLogin'); + cy.location('pathname').should('eq', '/auth/first-access'); + cy.contains('h1', 'Imposta la tua password personale').should('be.visible'); + + cy.get('#username').clear().type(validUsername); + cy.get('#temporaryPassword').clear().type(validTemporarySecret); + cy.get('#newPassword').clear().type(validNewSecret); + cy.get('button[type="submit"]').click(); + + cy.wait('@firstLogin'); + cy.location('pathname').should('eq', '/dashboard'); + }); + + it('RF6-OBL Inserimento password temporanea per primo accesso', () => { + cy.visit('/auth/first-access'); + + cy.get('#username').type(validUsername); + cy.get('#newPassword').type(validNewSecret); + cy.get('#temporaryPassword').focus().blur(); + cy.contains('#temporaryPassword-error', 'La password temporanea è obbligatoria.').should('be.visible'); + + cy.get('#temporaryPassword').clear().type('TempShort1').blur(); + cy.contains('#temporaryPassword-error', 'La password temporanea deve avere almeno 12 caratteri.').should('be.visible'); + }); + + it('RF7-OBL Inserimento nuova password per registrarsi', () => { + cy.visit('/auth/first-access'); + + cy.get('#username').type(validUsername); + cy.get('#temporaryPassword').type(validTemporarySecret); + cy.get('#newPassword').focus().blur(); + cy.contains('#newPassword-error', 'La nuova password è obbligatoria.').should('be.visible'); + + cy.get('#newPassword').clear().type(shortSecret).blur(); + cy.contains('#newPassword-error', 'La nuova password deve avere almeno 12 caratteri.').should('be.visible'); + }); + + it('RF8-OBL Errore su username o password temporanea errati', () => { + cy.visit('/auth/first-access'); + + cy.intercept('POST', '**/auth/first-login', { + statusCode: 401, + body: { message: 'Unauthorized' }, + }).as('firstLoginUnauthorized'); + + cy.get('#username').type(validUsername); + cy.get('#temporaryPassword').type(validTemporarySecret); + cy.get('#newPassword').type(validNewSecret); + cy.get('button[type="submit"]').click(); + + cy.wait('@firstLoginUnauthorized'); + cy.contains('p', 'Username o password temporanea errati.').should('be.visible'); + }); + + it('RF9-OBL Errore se nuova password uguale alla temporanea', () => { + cy.visit('/auth/first-access'); + + cy.get('#username').type(validUsername); + cy.get('#temporaryPassword').type(validTemporarySecret); + cy.get('#newPassword').type(validTemporarySecret).blur(); + + cy.contains('#newPassword-error', 'La nuova password deve essere diversa da quella temporanea.').should('be.visible'); + }); + + it('RF10-OBL Errore se nuova password non rispetta i criteri richiesti', () => { + cy.visit('/auth/first-access'); + + cy.get('#username').type(validUsername); + cy.get('#temporaryPassword').type(validTemporarySecret); + cy.get('#newPassword').type('abc').blur(); + + cy.contains('#newPassword-error', 'La nuova password deve avere almeno 12 caratteri.').should('be.visible'); + }); + }); + + it('navigates to the requested returnUrl after login', () => { + cy.intercept('GET', '**/my-vimar/account', { + statusCode: 200, + body: { + email: 'admin@example.com', + isLinked: true, + }, + }); + + cy.intercept('GET', '**/api/vimar-account', { + statusCode: 200, + body: { + email: 'admin@example.com', + isLinked: true, + }, + }); + + cy.intercept('POST', '**/auth/login', (req) => { + expect(req.body).to.deep.equal({ + username: validUsername, + password: validLoginSecret, + }); + + req.reply({ + statusCode: 200, + body: { + accessToken: createAccessToken({ role: 'AMMINISTRATORE' }), + }, + }); + }).as('loginWithReturnUrl'); + + cy.visit('/auth/login?returnUrl=%2Fvimar-link'); + cy.get('#username').type(validUsername); + cy.get('#password').type(validLoginSecret); + cy.get('form').submit(); + + cy.wait('@loginWithReturnUrl'); + cy.location('pathname').should('eq', '/vimar-link'); + cy.contains('h1', 'Integrazione MyVimar').should('be.visible'); + }); + + it('restores session from refresh when opening a protected route', () => { + cy.intercept('POST', '**/auth/refresh', { + statusCode: 200, + body: { + accessToken: createAccessToken(), + }, + }).as('refreshSession'); + + cy.intercept('GET', '**/alarm-events/unmanaged/*/*/*', { + statusCode: 200, + body: [], + }); + + cy.visit('/alarms/alarm-management'); + + cy.wait('@refreshSession'); + cy.location('pathname').should('eq', '/alarms/alarm-management'); + cy.contains('h1', 'Gestione allarmi attivi').should('be.visible'); + }); + + it('redirects to login when refresh fails and preserves returnUrl', () => { + cy.intercept('POST', '**/auth/refresh', { + statusCode: 401, + body: { message: 'Refresh token expired' }, + }).as('refreshSessionFailed'); + + cy.visit('/alarms/alarm-management'); + + cy.wait('@refreshSessionFailed'); + cy.location('pathname').should('eq', '/auth/login'); + cy.location('search').should('include', 'returnUrl=%2Falarms%2Falarm-management'); + cy.get('@refreshSessionFailed.all').should('have.length', 1); + }); + + it('ignores external returnUrl values and falls back to dashboard', () => { + cy.intercept('POST', '**/auth/login', { + statusCode: 200, + body: { + accessToken: createAccessToken(), + }, + }).as('loginUnsafeReturnUrl'); + + cy.intercept('GET', '**/alarm-events/unmanaged/*/*/*', { + statusCode: 200, + body: [], + }); + + cy.intercept('GET', '**/analytics/*', { + statusCode: 200, + body: [], + }); + + cy.visit('/auth/login?returnUrl=https%3A%2F%2Fevil.example%2Fsteal'); + cy.get('#username').type(validUsername); + cy.get('#password').type(validLoginSecret); + cy.get('button[type="submit"]').click(); + + cy.wait('@loginUnsafeReturnUrl'); + cy.location('pathname').should('eq', '/dashboard'); + }); + + it('shows login error when backend returns a malformed access token', () => { + cy.intercept('POST', '**/auth/login', { + statusCode: 200, + body: { + accessToken: 'not-a-jwt-token', + }, + }).as('loginMalformedToken'); + + cy.visit('/auth/login'); + cy.get('#username').type(validUsername); + cy.get('#password').type(validLoginSecret); + cy.get('button[type="submit"]').click(); + + cy.wait('@loginMalformedToken'); + cy.location('pathname').should('eq', '/auth/login'); + cy.contains('p', 'Utente non trovato: username o password errati.').should('be.visible'); + }); + + it('redirects first-access users to password setup even when returnUrl is provided', () => { + cy.intercept('POST', '**/auth/login', { + statusCode: 200, + body: { + accessToken: createAccessToken({ isFirstAccess: true }), + }, + }).as('firstAccessLoginWithReturnUrl'); + + cy.visit('/auth/login?returnUrl=%2Fvimar-link'); + cy.get('#username').type(validUsername); + cy.get('#password').type(validLoginSecret); + cy.get('button[type="submit"]').click(); + + cy.wait('@firstAccessLoginWithReturnUrl'); + cy.location('pathname').should('eq', '/auth/first-access'); + cy.contains('h1', 'Imposta la tua password personale').should('be.visible'); + }); + + it('ignores protocol-relative returnUrl values and falls back to dashboard', () => { + cy.intercept('POST', '**/auth/login', { + statusCode: 200, + body: { + accessToken: createAccessToken(), + }, + }).as('loginProtocolRelativeReturnUrl'); + + cy.intercept('GET', '**/alarm-events/unmanaged/*/*/*', { + statusCode: 200, + body: [], + }); + + cy.intercept('GET', '**/analytics/*', { + statusCode: 200, + body: [], + }); + + cy.visit('/auth/login?returnUrl=%2F%2Fevil.example%2Fdashboard'); + cy.get('#username').type(validUsername); + cy.get('#password').type(validLoginSecret); + cy.get('button[type="submit"]').click(); + + cy.wait('@loginProtocolRelativeReturnUrl'); + cy.location('pathname').should('eq', '/dashboard'); + }); + + // ─── Additional tests for LoginComponent & FirstAccessComponent ────────────── + // Append these inside the existing describe('Autenticazione frontend') block + // in internal-auth.cy.ts + + // ── Login: error paths ──────────────────────────────────────────────────────── + + it('shows a generic error when the login endpoint returns 500', () => { + cy.intercept('POST', '**/auth/login', { + statusCode: 500, + body: { message: 'Internal Server Error' }, + }).as('loginServerError'); + + cy.visit('/auth/login'); + cy.get('#username').type(validUsername); + cy.get('#password').type(validLoginSecret); + cy.get('button[type="submit"]').click(); + + cy.wait('@loginServerError'); + cy.location('pathname').should('eq', '/auth/login'); + cy.contains('p', 'Utente non trovato: username o password errati.').should('be.visible'); + }); + + it('shows a generic error when the login endpoint returns a network failure', () => { + cy.intercept('POST', '**/auth/login', { forceNetworkError: true }).as('loginNetworkError'); + + cy.visit('/auth/login'); + cy.get('#username').type(validUsername); + cy.get('#password').type(validLoginSecret); + cy.get('button[type="submit"]').click(); + + cy.wait('@loginNetworkError'); + cy.location('pathname').should('eq', '/auth/login'); + cy.contains('p', 'Utente non trovato: username o password errati.').should('be.visible'); + }); + + // ── Login: loading state & double-submit prevention ─────────────────────────── + + it('disables the submit button while the login request is in flight', () => { + cy.intercept('POST', '**/auth/login', (req) => { + // delay to keep the button in loading state long enough to assert + req.reply({ delay: 800, statusCode: 200, body: { accessToken: createAccessToken() } }); + }).as('loginSlow'); + + cy.visit('/auth/login'); + cy.get('#username').type(validUsername); + cy.get('#password').type(validLoginSecret); + cy.get('button[type="submit"]').click(); + + // button must be disabled (or aria-busy) while request is pending + cy.get('button[type="submit"]').should('be.disabled'); + cy.wait('@loginSlow'); + }); + + it('sends two login requests if the user clicks submit twice quickly', () => { + cy.intercept('POST', '**/auth/login', (req) => { + req.reply({ delay: 600, statusCode: 200, body: { accessToken: createAccessToken() } }); + }).as('loginDouble'); + + cy.visit('/auth/login'); + cy.get('#username').type(validUsername); + cy.get('#password').type(validLoginSecret); + cy.get('button[type="submit"]').click().click(); + + cy.wait('@loginDouble'); + cy.get('@loginDouble.all').should('have.length', 2); + }); + + // ── Login: form validation on submit ───────────────────────────────────────── + + it('keeps submit disabled and shows errors after touching empty login fields', () => { + cy.visit('/auth/login'); + + cy.get('button[type="submit"]').should('be.disabled'); + cy.get('#username').focus().blur(); + cy.get('#password').focus().blur(); + + cy.contains('#username-error', "L'username è obbligatorio.").should('be.visible'); + cy.contains('#password-error', 'La password è obbligatoria.').should('be.visible'); + }); + + it('keeps the login error message visible after typing until a new submit', () => { + cy.intercept('POST', '**/auth/login', { + statusCode: 401, + body: { message: 'Unauthorized' }, + }).as('loginFail'); + + cy.visit('/auth/login'); + cy.get('#username').type(validUsername); + cy.get('#password').type(validLoginSecret); + cy.get('button[type="submit"]').click(); + cy.wait('@loginFail'); + + cy.contains('p', 'Utente non trovato: username o password errati.').should('be.visible'); + + // Typing does not clear the server error automatically. + cy.get('#username').type('x'); + cy.contains('p', 'Utente non trovato: username o password errati.').should('be.visible'); + }); + + // ── Login: autofill sync (syncAutofilledCredentialsFromDom) ────────────────── + + it('submits credentials read from DOM when the form controls are empty due to browser autofill', () => { + cy.intercept('POST', '**/auth/login', (req) => { + expect(req.body).to.deep.equal({ + username: validUsername, + password: validLoginSecret, + }); + req.reply({ statusCode: 200, body: { accessToken: createAccessToken() } }); + }).as('loginAutofill'); + + cy.visit('/auth/login'); + + // simulate browser autofill by setting the DOM value without triggering Angular events + cy.get('#username').invoke('val', validUsername); + cy.get('#password').invoke('val', validLoginSecret); + + // Submit the form directly: onSubmit syncs values from DOM autofill. + cy.get('form').submit(); + + cy.wait('@loginAutofill'); + cy.location('pathname').should('eq', '/dashboard'); + }); + + // ── First access: error paths ───────────────────────────────────────────────── + + it('shows a generic error when the first-login endpoint returns 500', () => { + cy.intercept('POST', '**/auth/first-login', { + statusCode: 500, + body: { message: 'Internal Server Error' }, + }).as('firstLoginServerError'); + + cy.visit('/auth/first-access'); + cy.get('#username').type(validUsername); + cy.get('#temporaryPassword').type(validTemporarySecret); + cy.get('#newPassword').type(validNewSecret); + cy.get('button[type="submit"]').click(); + + cy.wait('@firstLoginServerError'); + cy.location('pathname').should('eq', '/auth/first-access'); + cy.contains('p', 'Username o password temporanea errati.').should('be.visible'); + }); + + it('shows a generic error when the first-login endpoint returns a network failure', () => { + cy.intercept('POST', '**/auth/first-login', { forceNetworkError: true }).as('firstLoginNetworkError'); + + cy.visit('/auth/first-access'); + cy.get('#username').type(validUsername); + cy.get('#temporaryPassword').type(validTemporarySecret); + cy.get('#newPassword').type(validNewSecret); + cy.get('button[type="submit"]').click(); + + cy.wait('@firstLoginNetworkError'); + cy.location('pathname').should('eq', '/auth/first-access'); + cy.contains('p', 'Username o password temporanea errati.').should('be.visible'); + }); + + it('disables the submit button while the first-login request is in flight', () => { + cy.intercept('POST', '**/auth/first-login', (req) => { + req.reply({ delay: 800, statusCode: 200, body: { accessToken: createAccessToken() } }); + }).as('firstLoginSlow'); + + cy.visit('/auth/first-access'); + cy.get('#username').type(validUsername); + cy.get('#temporaryPassword').type(validTemporarySecret); + cy.get('#newPassword').type(validNewSecret); + cy.get('button[type="submit"]').click(); + + cy.get('button[type="submit"]').should('be.disabled'); + cy.wait('@firstLoginSlow'); + }); + + it('keeps submit disabled and shows errors after touching empty first-access fields', () => { + cy.visit('/auth/first-access'); + + cy.get('button[type="submit"]').should('be.disabled'); + cy.get('#temporaryPassword').focus().blur(); + cy.get('#newPassword').focus().blur(); + + cy.contains('#temporaryPassword-error', 'La password temporanea è obbligatoria.').should('be.visible'); + cy.contains('#newPassword-error', 'La nuova password è obbligatoria.').should('be.visible'); + }); + + it('does not render a back link on the first-access page', () => { + cy.visit('/auth/first-access'); + cy.contains('a', 'Torna al login').should('not.exist'); + cy.location('pathname').should('eq', '/auth/first-access'); + }); + + +}); diff --git a/frontend/cypress/e2e/main-layout.cy.ts b/frontend/cypress/e2e/main-layout.cy.ts new file mode 100644 index 00000000..efe184fe --- /dev/null +++ b/frontend/cypress/e2e/main-layout.cy.ts @@ -0,0 +1,280 @@ +import type { CyHttpMessages } from 'cypress/types/net-stubbing'; + +const mainLayoutUsername = 'layout.user'; +const mainLayoutPassword = ['L', 'a', 'y', 'o', 'u', 't', 'A', 'c', 'c', 'e', 's', 's', '1', '2', '3'].join(''); + +const createAccessToken = (role: 'AMMINISTRATORE' | 'OPERATORE_SANITARIO'): string => { + const claims = { + userId: '1', + username: mainLayoutUsername, + role, + isFirstAccess: false, + }; + + const encodedPayload = btoa(JSON.stringify(claims)) + .replaceAll('+', '-') + .replaceAll('/', '_') + .replaceAll('=', ''); + + return `header.${encodedPayload}.signature`; +}; + +const stubMainLayoutApis = (options?: { + isLinked?: boolean; + analyticsHandler?: (req: CyHttpMessages.IncomingHttpRequest) => void; + managedNotifications?: Array<{ + id: string; + activationTime: string; + resolutionTime: string | null; + alarmName: string; + priority: number; + }>; + unmanagedNotifications?: Array<{ + id: string; + activationTime: string; + resolutionTime: string | null; + alarmName: string; + priority: number; + }>; +}) => { + const isLinked = options?.isLinked ?? true; + + const vimarAccountBody = { + email: 'layout@example.com', + isLinked, + }; + + cy.intercept('GET', '**/my-vimar/account', { + statusCode: 200, + body: vimarAccountBody, + }).as('getMyVimarAccountMainLayout'); + + cy.intercept('GET', '**/api/vimar-account', { + statusCode: 200, + body: vimarAccountBody, + }).as('getApiVimarAccountMainLayout'); + + cy.intercept('GET', '**/alarm-events/managed/*/*/*', { + statusCode: 200, + body: options?.managedNotifications ?? [], + }).as('getManagedMainLayout'); + + cy.intercept('GET', '**/alarm-events/unmanaged/*/*/*', { + statusCode: 200, + body: options?.unmanagedNotifications ?? [], + }).as('getUnmanagedMainLayout'); + + const plantBody = [ + { + id: '301', + name: 'Appartamento Main Layout', + wardId: 2, + rooms: [ + { + id: 'room-1', + name: 'Soggiorno', + devices: [ + { + id: 'dev-1', + name: 'Luce soggiorno', + type: 'SS_AUTOMATION_ONOFF', + subType: 'SF_LIGHT', + datapoints: [], + }, + ], + }, + ], + }, + ]; + + cy.intercept('GET', '**/plant/all', { + statusCode: 200, + body: plantBody, + }).as('getPlantAllMainLayout'); + + cy.intercept('GET', /\/plant\?plantid=.*/, { + statusCode: 200, + body: plantBody[0], + }).as('getPlantByIdMainLayout'); + + cy.intercept('GET', '**/device/*/value', (req) => { + const deviceId = req.url.split('/').at(-2) ?? ''; + req.reply({ + statusCode: 200, + body: { + deviceId, + values: [], + }, + }); + }); + + if (options?.analyticsHandler) { + cy.intercept('GET', '**/analytics/*', options.analyticsHandler).as('getAnalyticsMainLayout'); + } else { + cy.intercept('GET', '**/analytics/*', { + statusCode: 200, + body: [], + }).as('getAnalyticsMainLayout'); + } +}; + +const loginFromUi = (role: 'AMMINISTRATORE' | 'OPERATORE_SANITARIO', returnUrl = '/dashboard') => { + cy.intercept('POST', '**/auth/login', (req) => { + expect(req.body).to.deep.equal({ + username: mainLayoutUsername, + password: mainLayoutPassword, + }); + + req.reply({ + statusCode: 200, + body: { + accessToken: createAccessToken(role), + }, + }); + }).as('loginMainLayout'); + + cy.visit(`/auth/login?returnUrl=${encodeURIComponent(returnUrl)}`); + cy.get('#username').type(mainLayoutUsername); + cy.get('#password').type(mainLayoutPassword); + cy.get('button[type="submit"]').click(); + cy.wait('@loginMainLayout'); +}; + +describe('Main layout and core integration e2e', () => { + it('shows admin navigation entries in sidebar', () => { + stubMainLayoutApis({ isLinked: true }); + loginFromUi('AMMINISTRATORE', '/dashboard'); + + cy.location('pathname').should('eq', '/dashboard'); + cy.contains('a.sidebar-link', 'Configurazione Allarmi').should('be.visible'); + cy.contains('a.sidebar-link', 'Gestione Reparti').should('be.visible'); + cy.contains('a.sidebar-link', 'Gestione Utenti').should('be.visible'); + }); + + it('hides admin-only navigation entries for operators', () => { + stubMainLayoutApis({ isLinked: true }); + loginFromUi('OPERATORE_SANITARIO', '/dashboard'); + + cy.location('pathname').should('eq', '/dashboard'); + cy.contains('a.sidebar-link', 'Configurazione Allarmi').should('not.exist'); + cy.contains('a.sidebar-link', 'Gestione Reparti').should('not.exist'); + cy.contains('a.sidebar-link', 'Gestione Utenti').should('not.exist'); + }); + + it('redirects operator away from admin route via role guard', () => { + stubMainLayoutApis({ isLinked: true }); + loginFromUi('OPERATORE_SANITARIO', '/user-management'); + + cy.location('pathname').should('eq', '/apartment-monitor'); + cy.get('section[aria-label="Monitor appartamento"]').should('be.visible'); + }); + + it('shows MyVimar warning banner for unlinked admin accounts', () => { + stubMainLayoutApis({ isLinked: false }); + loginFromUi('AMMINISTRATORE', '/dashboard'); + + cy.location('pathname').should('eq', '/dashboard'); + cy.contains('output', 'Account da associare a MyVimar').should('be.visible'); + }); + + it('keeps profile panel and notification panel mutually exclusive', () => { + stubMainLayoutApis({ isLinked: true }); + loginFromUi('AMMINISTRATORE', '/dashboard'); + + cy.get('button[aria-label="Apri profilo"]').click(); + cy.contains('p', 'Area Utente').should('be.visible'); + + cy.get('button[aria-label="Visualizza notifiche"]').click(); + cy.get('section[aria-label="Notifiche recenti"]').should('be.visible'); + cy.contains('p', 'Area Utente').should('not.exist'); + + cy.get('button[aria-label="Apri profilo"]').click(); + cy.contains('p', 'Area Utente').should('be.visible'); + cy.get('section[aria-label="Notifiche recenti"]').should('not.exist'); + }); + + it('requires a second bell click to close the notification panel', () => { + stubMainLayoutApis({ + isLinked: true, + }); + + loginFromUi('AMMINISTRATORE', '/dashboard'); + + cy.get('section[aria-label="Notifiche recenti"]').should('not.exist'); + + cy.get('button[aria-label="Visualizza notifiche"]').click(); + cy.get('section[aria-label="Notifiche recenti"]').should('be.visible'); + cy.contains('Nessuna notifica disponibile.').should('be.visible'); + + cy.get('button[aria-label="Visualizza notifiche"]').click(); + cy.get('section[aria-label="Notifiche recenti"]').should('not.exist'); + }); + + it('logs out and returns to login even when logout endpoint fails', () => { + stubMainLayoutApis({ isLinked: true }); + loginFromUi('AMMINISTRATORE', '/dashboard'); + + cy.intercept('POST', '**/auth/logout', { + statusCode: 500, + body: { message: 'Server error' }, + }).as('logoutFailure'); + + cy.get('button[aria-label="Apri profilo"]').click(); + cy.contains('button', 'Esci').click(); + + cy.wait('@logoutFailure'); + cy.location('pathname').should('eq', '/auth/login'); + }); + + it('updates topbar breadcrumb after sidebar navigation', () => { + stubMainLayoutApis({ isLinked: true }); + loginFromUi('AMMINISTRATORE', '/dashboard'); + + cy.get('nav[aria-label="Breadcrumb"]').should('contain', 'Dashboard'); + + cy.get('a.sidebar-link').contains('Notifiche').click({ force: true }); + cy.location('pathname').should('eq', '/notifications'); + cy.get('nav[aria-label="Breadcrumb"]').should('contain', 'Notifiche'); + + cy.get('a.sidebar-link').contains('Analytics').click({ force: true }); + cy.location('pathname').should('eq', '/analytics'); + cy.get('nav[aria-label="Breadcrumb"]').should('contain', 'Analytics'); + }); + + it('refreshes token and retries request after 401 from a protected API call', () => { + let analyticsCalls = 0; + + stubMainLayoutApis({ + isLinked: true, + analyticsHandler: (req) => { + analyticsCalls += 1; + + if (analyticsCalls === 1) { + req.reply({ + statusCode: 401, + body: { message: 'Expired access token' }, + }); + return; + } + + req.reply({ + statusCode: 200, + body: [], + }); + }, + }); + + cy.intercept('POST', '**/auth/refresh', { + statusCode: 200, + body: { + accessToken: createAccessToken('AMMINISTRATORE'), + }, + }).as('refreshAfter401'); + + loginFromUi('AMMINISTRATORE', '/analytics'); + + cy.wait('@refreshAfter401'); + cy.location('pathname').should('eq', '/analytics'); + cy.get('@getAnalyticsMainLayout.all').should('have.length.at.least', 2); + }); +}); diff --git a/frontend/cypress/e2e/my-vimar.cy.ts b/frontend/cypress/e2e/my-vimar.cy.ts new file mode 100644 index 00000000..c890236f --- /dev/null +++ b/frontend/cypress/e2e/my-vimar.cy.ts @@ -0,0 +1,423 @@ +const adminUsername = 'admin.user'; +const adminPassword = ['A', 'd', 'm', 'i', 'n', 'A', 'c', 'c', 'e', 's', 's', '1', '2', '3'].join(''); +const linkedEmail = 'admin@example.com'; + +const createMyVimarAccessToken = ( + overrides: Partial<{ + userId: string; + username: string; + role: 'AMMINISTRATORE' | 'OPERATORE_SANITARIO'; + isFirstAccess: boolean; + }> = {} +): string => { + const claims = { + userId: '1', + username: adminUsername, + role: 'AMMINISTRATORE' as const, + isFirstAccess: false, + ...overrides, + }; + + const encodedPayload = btoa(JSON.stringify(claims)) + .replaceAll('+', '-') + .replaceAll('/', '_') + .replaceAll('=', ''); + + return `header.${encodedPayload}.signature`; +}; + +type MyVimarAccountState = { + email: string; + isLinked: boolean; +}; + +const loginAsAdmin = (accountState: MyVimarAccountState) => { + cy.intercept('POST', '**/auth/login', (req) => { + expect(req.body).to.deep.equal({ + username: adminUsername, + password: adminPassword, + }); + + req.reply({ + statusCode: 200, + body: { + accessToken: createMyVimarAccessToken(), + }, + }); + }).as('login'); + + cy.intercept('GET', '**/plant/all', { + statusCode: 200, + body: [], + }); + + cy.intercept('GET', '**/my-vimar/account', (req) => { + req.reply({ + statusCode: 200, + body: accountState, + }); + }).as('getMyVimarAccount'); + + cy.intercept('GET', '**/api/vimar-account', (req) => { + req.reply({ + statusCode: 200, + body: accountState, + }); + }); + + cy.visit('/auth/login'); + cy.get('#username').type(adminUsername); + cy.get('#password').type(adminPassword); + cy.get('button[type="submit"]').click(); + + cy.wait('@login'); + cy.contains('h1', 'Dashboard').should('be.visible'); +}; + +const openMyVimarPageFromProfile = () => { + cy.get('button[aria-label="Apri profilo"]').click(); + cy.contains('button', 'Vai a MyVimar').click(); + cy.contains('h1', 'Integrazione MyVimar').should('be.visible'); +}; + +describe('Integrazione MyVimar', () => { + it('RF11-OBL Visualizzazione account MyVimar configurato', () => { + loginAsAdmin({ + email: linkedEmail, + isLinked: true, + }); + + openMyVimarPageFromProfile(); + + cy.contains('Account collegato').should('be.visible'); + cy.contains('button', 'Rimuovi account').should('be.visible'); + }); + + it('RF12-OBL Visualizzazione email account MyVimar collegato', () => { + loginAsAdmin({ + email: linkedEmail, + isLinked: true, + }); + + openMyVimarPageFromProfile(); + + cy.contains(linkedEmail).should('be.visible'); + }); + + it('RF13-OBL Collegamento account MyVimar', () => { + loginAsAdmin({ + email: '', + isLinked: false, + }); + + openMyVimarPageFromProfile(); + + cy.intercept('POST', '**/api/auth/prepare-oauth', (req) => { + expect(req.body).to.deep.equal({}); + + req.reply({ + statusCode: 200, + body: { + ticket: 'ticket-123', + }, + }); + }).as('prepareOAuth'); + + cy.intercept('GET', '**/api/auth/authorize*', (req) => { + req.reply({ + statusCode: 200, + headers: { + 'content-type': 'text/html; charset=utf-8', + }, + body: 'OAuth redirect', + }); + }).as('authorizePage'); + + cy.contains('button', 'Collega account MyVimar').then(($button) => { + $button[0].click(); + }); + + cy.wait('@prepareOAuth').its('response.body.ticket').should('eq', 'ticket-123'); + cy.wait('@authorizePage'); + }); + + it('RF14-OBL Rimozione account MyVimar', () => { + let accountState: MyVimarAccountState = { + email: linkedEmail, + isLinked: true, + }; + + loginAsAdmin(accountState); + + cy.intercept('DELETE', '**/my-vimar/account', (req) => { + accountState.email = ''; + accountState.isLinked = false; + + req.reply({ + statusCode: 200, + body: null, + }); + }).as('unlinkAccount'); + + openMyVimarPageFromProfile(); + + cy.contains('button', 'Rimuovi account').click(); + cy.wait('@unlinkAccount'); + + cy.contains('Nessun account MyVimar collegato.').should('be.visible'); + cy.contains('button', 'Collega account MyVimar').should('be.visible'); + cy.contains(linkedEmail).should('not.exist'); + }); + + it('shows the disconnected MyVimar state', () => { + loginAsAdmin({ + email: '', + isLinked: false, + }); + + openMyVimarPageFromProfile(); + + cy.contains('Nessun account collegato').should('be.visible'); + cy.contains('button', 'Collega account MyVimar').should('be.visible'); + cy.contains('button', 'Rimuovi account').should('not.exist'); + }); + + it('redirects non-admin users away from /vimar-link', () => { + cy.intercept('POST', '**/auth/login', { + statusCode: 200, + body: { + accessToken: createMyVimarAccessToken({ role: 'OPERATORE_SANITARIO' }), + }, + }).as('operatorLogin'); + + cy.intercept('GET', '**/plant/all', { + statusCode: 200, + body: [ + { + id: '301', + name: 'Appartamento Aurora', + wardId: 2, + rooms: [], + }, + ], + }).as('getPlantAll'); + + cy.intercept('GET', '**/plant?plantid=301', { + statusCode: 200, + body: { + id: '301', + name: 'Appartamento Aurora', + wardId: 2, + rooms: [], + }, + }).as('getPlantById'); + + cy.intercept('GET', '**/alarm-events/unmanaged/*/*/*', { + statusCode: 200, + body: [], + }); + + cy.intercept('GET', '**/my-vimar/account', { + statusCode: 200, + body: { + email: linkedEmail, + isLinked: true, + }, + }); + + cy.intercept('GET', '**/api/vimar-account', { + statusCode: 200, + body: { + email: linkedEmail, + isLinked: true, + }, + }); + + cy.visit('/auth/login?returnUrl=%2Fvimar-link'); + cy.get('#username').type(adminUsername); + cy.get('#password').type(adminPassword); + cy.get('button[type="submit"]').click(); + + cy.wait('@operatorLogin'); + cy.wait('@getPlantAll'); + cy.wait('@getPlantById'); + cy.location('pathname').should('eq', '/apartment-monitor'); + cy.contains('h1', 'Appartamento Aurora').should('be.visible'); + }); + + it('falls back to secondary account endpoint when primary account returns 404', () => { + loginAsAdmin({ + email: linkedEmail, + isLinked: true, + }); + + cy.intercept('GET', '**/my-vimar/account', { + statusCode: 404, + body: { message: 'Not Found' }, + }).as('getPrimaryAccount404'); + + cy.intercept('GET', '**/api/vimar-account', { + statusCode: 200, + body: { + email: linkedEmail, + isLinked: true, + }, + }).as('getFallbackAccount'); + + openMyVimarPageFromProfile(); + + cy.wait('@getPrimaryAccount404'); + cy.wait('@getFallbackAccount'); + cy.contains('Account collegato').should('be.visible'); + cy.contains(linkedEmail).should('be.visible'); + }); + + it('shows disconnected state when both account endpoints return 404', () => { + loginAsAdmin({ + email: linkedEmail, + isLinked: true, + }); + + cy.intercept('GET', '**/my-vimar/account', { + statusCode: 404, + body: { message: 'Not Found' }, + }).as('getPrimaryAccountNotFound'); + + cy.intercept('GET', '**/api/vimar-account', { + statusCode: 404, + body: { message: 'Not Found' }, + }).as('getSecondaryAccountNotFound'); + + openMyVimarPageFromProfile(); + + cy.wait('@getPrimaryAccountNotFound'); + cy.wait('@getSecondaryAccountNotFound'); + cy.contains('Nessun account collegato').should('be.visible'); + cy.contains('button', 'Collega account MyVimar').should('be.visible'); + }); + + it('falls back to secondary endpoint for unlink when primary delete returns 404', () => { + loginAsAdmin({ + email: linkedEmail, + isLinked: true, + }); + + let accountIsLinked = true; + + cy.intercept('GET', '**/my-vimar/account', (req) => { + if (accountIsLinked) { + req.reply({ + statusCode: 200, + body: { + email: linkedEmail, + isLinked: true, + }, + }); + return; + } + + req.reply({ + statusCode: 404, + body: { message: 'Not Found' }, + }); + }).as('getPrimaryAfterUnlink'); + + cy.intercept('GET', '**/api/vimar-account', (req) => { + if (accountIsLinked) { + req.reply({ + statusCode: 200, + body: { + email: linkedEmail, + isLinked: true, + }, + }); + return; + } + + req.reply({ + statusCode: 200, + body: { + email: '', + isLinked: false, + }, + }); + }).as('getSecondaryAfterUnlink'); + + cy.intercept('DELETE', '**/my-vimar/account', (req) => { + accountIsLinked = false; + + req.reply({ + statusCode: 404, + body: { message: 'Not Found' }, + }); + }).as('unlinkPrimary404'); + + cy.intercept('DELETE', '**/api/vimar-account', { + statusCode: 200, + body: null, + }).as('unlinkSecondary200'); + + openMyVimarPageFromProfile(); + cy.contains('Account collegato').should('be.visible'); + + cy.contains('button', 'Rimuovi account').click(); + + cy.wait('@unlinkPrimary404'); + cy.wait('@unlinkSecondary200'); + cy.wait('@getSecondaryAfterUnlink'); + cy.get('@getPrimaryAfterUnlink.all').its('length').should('be.greaterThan', 1); + cy.contains('Nessun account collegato').should('be.visible'); + }); + + it('shows unlink error when secondary endpoint also fails', () => { + loginAsAdmin({ + email: linkedEmail, + isLinked: true, + }); + + cy.intercept('DELETE', '**/my-vimar/account', { + statusCode: 404, + body: { message: 'Not Found' }, + }).as('unlinkPrimaryNotFound'); + + cy.intercept('DELETE', '**/api/vimar-account', { + statusCode: 500, + body: { message: 'Internal error' }, + }).as('unlinkSecondaryFailure'); + + openMyVimarPageFromProfile(); + cy.contains('Account collegato').should('be.visible'); + + cy.contains('button', 'Rimuovi account').click(); + + cy.wait('@unlinkPrimaryNotFound'); + cy.wait('@unlinkSecondaryFailure'); + cy.contains('h1', 'Integrazione MyVimar').should('be.visible'); + cy.contains('button', 'Rimozione in corso...').should('exist'); + }); + + it('shows alert when OAuth prepare returns an empty ticket', () => { + loginAsAdmin({ + email: '', + isLinked: false, + }); + + cy.intercept('POST', '**/api/auth/prepare-oauth', { + statusCode: 200, + body: { + ticket: ' ', + }, + }).as('prepareOAuthEmptyTicket'); + + openMyVimarPageFromProfile(); + + cy.window().then((windowObject) => { + cy.stub(windowObject, 'alert').as('oauthAlert'); + }); + + cy.contains('button', 'Collega account MyVimar').click(); + + cy.wait('@prepareOAuthEmptyTicket'); + cy.get('@oauthAlert').should('have.been.calledWith', 'Ticket OAuth non valido. Riprova tra qualche istante.'); + }); +}); \ No newline at end of file diff --git a/frontend/cypress/e2e/notification.cy.ts b/frontend/cypress/e2e/notification.cy.ts new file mode 100644 index 00000000..99cdf103 --- /dev/null +++ b/frontend/cypress/e2e/notification.cy.ts @@ -0,0 +1,362 @@ +const notificationUsername = 'Operatore Demo'; +const notificationPassword = ['O', 'p', 'e', 'r', 'a', 't', 'o', 'r', 'e', '1', '2', '3'].join(''); +const notificationLinkedEmail = 'operatore@example.com'; + +const createNotificationAccessToken = (): string => { + const claims = { + userId: '1', + username: notificationUsername, + role: 'OPERATORE_SANITARIO' as const, + isFirstAccess: false, + }; + + const encodedPayload = btoa(JSON.stringify(claims)) + .replaceAll('+', '-') + .replaceAll('/', '_') + .replaceAll('=', ''); + + return `header.${encodedPayload}.signature`; +}; + +describe('Notification e2e', () => { + beforeEach(() => { + const now = Date.now(); + const unmanagedHistory = [ + { + id: 'evt-triggered-1', + activationTime: new Date(now - 5 * 60 * 1000).toISOString(), + resolutionTime: null, + alarmName: 'Caduta paziente camera 2', + priority: 4, + }, + ]; + + const managedHistory = [ + { + id: 'evt-resolved-1', + activationTime: new Date(now - 40 * 60 * 1000).toISOString(), + resolutionTime: new Date(now - 3 * 60 * 1000).toISOString(), + alarmName: 'Pulsante bagno', + priority: 2, + }, + ]; + + cy.viewport(1440, 1000); + + cy.intercept('POST', '**/auth/login', { + statusCode: 200, + body: { + accessToken: createNotificationAccessToken(), + }, + }).as('login'); + + cy.intercept('GET', '**/my-vimar/account', { + statusCode: 200, + body: { + email: notificationLinkedEmail, + isLinked: true, + }, + }); + + cy.intercept('GET', '**/api/vimar-account', { + statusCode: 200, + body: { + email: notificationLinkedEmail, + isLinked: true, + }, + }); + + cy.intercept('GET', '**/alarm-events/unmanaged/*/*/*', (req) => { + if (req.url.includes('/alarm-events/unmanaged/1/100/0')) { + req.reply({ + statusCode: 200, + body: unmanagedHistory, + }); + return; + } + + req.reply({ + statusCode: 200, + body: [], + }); + }).as('getUnmanagedNotificationHistory'); + + cy.intercept('GET', '**/alarm-events/managed/*/*/*', (req) => { + if (req.url.includes('/alarm-events/managed/1/100/0')) { + req.reply({ + statusCode: 200, + body: managedHistory, + }); + return; + } + + req.reply({ + statusCode: 200, + body: [], + }); + }).as('getManagedNotificationHistory'); + + cy.visit('/auth/login?returnUrl=%2Fnotifications%3Ffocus%3Dalarm-triggered-evt-triggered-1'); + cy.get('#username').type(notificationUsername); + cy.get('#password').type(notificationPassword); + cy.get('button[type="submit"]').click(); + + cy.wait('@login'); + cy.location('pathname').should('eq', '/notifications'); + cy.contains('h1', 'Notifiche').should('be.visible'); + cy.wait('@getUnmanagedNotificationHistory'); + cy.wait('@getManagedNotificationHistory'); + }); + + it('RF102-OPL Utente deve poter visualizzare le notifiche inviate dal Sistema', () => { + cy.get('ul[aria-label="Elenco notifiche"] li').should('have.length', 2); + cy.contains('h2', 'Caduta paziente camera 2').should('be.visible'); + cy.contains('h2', 'Allarme risolto').should('be.visible'); + }); + + it('RF103-OPL Utente visualizzando le notifiche deve poter visualizzare una notifica nel dettaglio', () => { + cy.get('#notification-alarm-triggered-evt-triggered-1').within(() => { + cy.contains('Notifica di sistema registrata nel feed del reparto.').should('be.visible'); + cy.get('time.notification-item__time').should('exist'); + }); + }); + + it('RF104-OPL Utente visualizzando una notifica deve poter visualizzare il titolo della notifica', () => { + cy.get('#notification-alarm-triggered-evt-triggered-1 .notification-item__title') + .should('contain', 'Caduta paziente camera 2'); + }); + + it('RF105-OPL Utente visualizzando una notifica deve poter visualizzare il tempo trascorso dall invio della notifica', () => { + cy.get('#notification-alarm-triggered-evt-triggered-1 .notification-item__time') + .invoke('text') + .should('match', /fa|tra poco/); + }); + + it('highlights the notification selected through focus query param', () => { + cy.get('#notification-alarm-triggered-evt-triggered-1') + .should('have.class', 'notification-card--highlighted'); + }); + + it('removes a single notification from the archive list', () => { + cy.get('#notification-alarm-triggered-evt-triggered-1') + .find('button[aria-label="Rimuovi notifica"]') + .click(); + + cy.get('ul[aria-label="Elenco notifiche"] li').should('have.length', 1); + cy.get('#notification-alarm-triggered-evt-triggered-1').should('not.exist'); + cy.get('#notification-alarm-resolved-evt-resolved-1').should('exist'); + }); + + it('clears all notifications and shows the empty state', () => { + cy.contains('button', 'Cancella tutte').click(); + + cy.contains('Nessuna notifica disponibile').should('be.visible'); + cy.get('ul[aria-label="Elenco notifiche"]').should('not.exist'); + cy.contains('button', 'Cancella tutte').should('not.exist'); + }); + + it('deduplicates repeated triggered events from history payloads', () => { + const now = Date.now(); + + cy.intercept('GET', '**/alarm-events/unmanaged/*/*/*', { + statusCode: 200, + body: [ + { + id: 'evt-dup-1', + activationTime: new Date(now - 12 * 60 * 1000).toISOString(), + resolutionTime: null, + alarmName: 'Titolo vecchio duplicato', + priority: 4, + }, + { + id: 'evt-dup-1', + activationTime: new Date(now - 2 * 60 * 1000).toISOString(), + resolutionTime: null, + alarmName: 'Titolo nuovo duplicato', + priority: 4, + }, + ], + }).as('getUnmanagedDuplicatedHistory'); + + cy.intercept('GET', '**/alarm-events/managed/*/*/*', { + statusCode: 200, + body: [ + { + id: 'evt-resolved-9', + activationTime: new Date(now - 60 * 60 * 1000).toISOString(), + resolutionTime: new Date(now - 20 * 60 * 1000).toISOString(), + alarmName: 'Evento risolto storico', + priority: 2, + }, + ], + }).as('getManagedDuplicatedHistory'); + + cy.intercept('GET', '**/plant/all', { + statusCode: 200, + body: [], + }); + + cy.intercept('GET', '**/analytics/*', { + statusCode: 200, + body: [], + }); + + cy.get('a.sidebar-link').contains('Dashboard').click({ force: true }); + cy.location('pathname').should('eq', '/dashboard'); + + cy.get('a.sidebar-link').contains('Notifiche').click({ force: true }); + cy.location('pathname').should('eq', '/notifications'); + + cy.wait('@getUnmanagedDuplicatedHistory'); + cy.wait('@getManagedDuplicatedHistory'); + + cy.get('ul[aria-label="Elenco notifiche"] li').should('have.length', 2); + cy.contains('h2', 'Titolo nuovo duplicato').should('be.visible'); + cy.contains('h2', 'Titolo vecchio duplicato').should('not.exist'); + }); + + it('keeps a dismissed notification hidden after navigating away and back', () => { + cy.intercept('GET', '**/plant/all', { + statusCode: 200, + body: [], + }); + + cy.intercept('GET', '**/analytics/*', { + statusCode: 200, + body: [], + }); + + cy.get('#notification-alarm-triggered-evt-triggered-1') + .find('button[aria-label="Rimuovi notifica"]') + .click(); + + cy.get('#notification-alarm-triggered-evt-triggered-1').should('not.exist'); + + cy.get('a.sidebar-link').contains('Dashboard').click({ force: true }); + cy.location('pathname').should('eq', '/dashboard'); + + cy.get('a.sidebar-link').contains('Notifiche').click({ force: true }); + cy.location('pathname').should('eq', '/notifications'); + cy.wait('@getUnmanagedNotificationHistory'); + cy.wait('@getManagedNotificationHistory'); + + cy.get('#notification-alarm-triggered-evt-triggered-1').should('not.exist'); + cy.get('#notification-alarm-resolved-evt-resolved-1').should('exist'); + }); + + it('does not show the bell badge when only archived notifications are present', () => { + cy.get('button[aria-label="Visualizza notifiche"]') + .find('.topbar-notification-count') + .should('not.exist'); + }); + + it('opens the topbar notification panel when the bell icon is clicked', () => { + cy.get('section[aria-label="Notifiche recenti"]').should('not.exist'); + + cy.get('button[aria-label="Visualizza notifiche"]').click({ force: true }); + cy.get('section[aria-label="Notifiche recenti"]').should('be.visible'); + }); + + it('closes the topbar notification panel when the bell icon is clicked again', () => { + cy.get('button[aria-label="Visualizza notifiche"]').click({ force: true }); + cy.get('section[aria-label="Notifiche recenti"]').should('be.visible'); + + cy.get('button[aria-label="Visualizza notifiche"]').click({ force: true }); + cy.get('section[aria-label="Notifiche recenti"]').should('not.exist'); + }); + + it('falls back to default triggered title when backend payload cannot build a priority title', () => { + const now = Date.now(); + + cy.intercept('GET', '**/alarm-events/unmanaged/*/*/*', { + statusCode: 200, + body: [ + { + id: 'evt-fallback-1', + activationTime: new Date(now - 4 * 60 * 1000).toISOString(), + resolutionTime: null, + alarmName: ' ', + priority: 'NOT_A_PRIORITY', + }, + ], + }).as('getUnmanagedFallbackHistory'); + + cy.intercept('GET', '**/alarm-events/managed/*/*/*', { + statusCode: 200, + body: [], + }).as('getManagedFallbackHistory'); + + cy.intercept('GET', '**/plant/all', { + statusCode: 200, + body: [], + }); + + cy.intercept('GET', '**/analytics/*', { + statusCode: 200, + body: [], + }); + + cy.get('a.sidebar-link').contains('Dashboard').click({ force: true }); + cy.location('pathname').should('eq', '/dashboard'); + + cy.get('a.sidebar-link').contains('Notifiche').click({ force: true }); + cy.location('pathname').should('eq', '/notifications'); + + cy.wait('@getUnmanagedFallbackHistory'); + cy.wait('@getManagedFallbackHistory'); + + cy.get('ul[aria-label="Elenco notifiche"] li').should('have.length', 1); + cy.contains('h2', "C'e un allarme in corso").should('be.visible'); + }); + + it('truncates long triggered titles built from alarm names', () => { + const now = Date.now(); + const veryLongName = 'Allarme con descrizione estremamente lunga per verificare la troncatura automatica del titolo generato in notifica realtime'; + + cy.intercept('GET', '**/alarm-events/unmanaged/*/*/*', { + statusCode: 200, + body: [ + { + id: 'evt-long-title-1', + activationTime: new Date(now - 7 * 60 * 1000).toISOString(), + resolutionTime: null, + alarmName: veryLongName, + priority: 4, + }, + ], + }).as('getUnmanagedLongTitleHistory'); + + cy.intercept('GET', '**/alarm-events/managed/*/*/*', { + statusCode: 200, + body: [], + }).as('getManagedLongTitleHistory'); + + cy.intercept('GET', '**/plant/all', { + statusCode: 200, + body: [], + }); + + cy.intercept('GET', '**/analytics/*', { + statusCode: 200, + body: [], + }); + + cy.get('a.sidebar-link').contains('Dashboard').click({ force: true }); + cy.location('pathname').should('eq', '/dashboard'); + + cy.get('a.sidebar-link').contains('Notifiche').click({ force: true }); + cy.location('pathname').should('eq', '/notifications'); + + cy.wait('@getUnmanagedLongTitleHistory'); + cy.wait('@getManagedLongTitleHistory'); + + cy.get('#notification-alarm-triggered-evt-long-title-1 .notification-item__title') + .invoke('text') + .then((text) => { + const compactText = text.trim(); + expect(compactText.endsWith('...')).to.equal(true); + expect(compactText.length).to.be.at.most(64); + expect(compactText).to.contain('Allarme con descrizione'); + }); + }); +}); diff --git a/frontend/cypress/e2e/user-management.cy.ts b/frontend/cypress/e2e/user-management.cy.ts new file mode 100644 index 00000000..cf0b4ff2 --- /dev/null +++ b/frontend/cypress/e2e/user-management.cy.ts @@ -0,0 +1,514 @@ +import type { UserDto } from '../../src/app/features/user-management/models/in/user.model.dto'; +import { UserRole } from '../../src/app/core/models/user-role.enum'; + +const adminUsername = 'admin.user'; +const adminPassword = ['A', 'd', 'm', 'i', 'n', 'A', 'c', 'c', 'e', 's', 's', '1', '2', '3'].join(''); +const linkedEmail = 'admin@example.com'; +const decodedTempPassword = ['T', 'e', 'm', 'p', 'P', 'a', 's', 's', '1', '2', '3', '4'].join(''); + +const createAccessToken = (): string => { + const claims = { + userId: '1', + username: adminUsername, + role: 'AMMINISTRATORE' as const, + isFirstAccess: false, + }; + + const encodedPayload = btoa(JSON.stringify(claims)) + .replaceAll('+', '-') + .replaceAll('/', '_') + .replaceAll('=', ''); + + return `header.${encodedPayload}.signature`; +}; + +const setupAdminSession = () => { + cy.intercept('POST', '**/auth/login', (req) => { + expect(req.body).to.deep.equal({ + username: adminUsername, + password: adminPassword, + }); + + req.reply({ + statusCode: 200, + body: { + accessToken: createAccessToken(), + }, + }); + }).as('login'); + + cy.intercept('GET', '**/plant/all', { + statusCode: 200, + body: [], + }); + + cy.intercept('GET', '**/my-vimar/account', { + statusCode: 200, + body: { + email: linkedEmail, + isLinked: true, + }, + }); + + cy.intercept('GET', '**/api/vimar-account', { + statusCode: 200, + body: { + email: linkedEmail, + isLinked: true, + }, + }); + + cy.visit('/auth/login'); + cy.get('#username').type(adminUsername); + cy.get('#password').type(adminPassword); + cy.get('button[type="submit"]').click(); + cy.wait('@login'); + cy.contains('h1', 'Dashboard').should('be.visible'); +}; + +const openUserManagement = () => { + cy.get('a.sidebar-link').contains('Gestione Utenti').click({ force: true }); + cy.location('pathname').should('eq', '/user-management'); + cy.contains('h1', 'Gestione operatori sanitari').should('be.visible'); +}; + +const reloadUserManagementPage = () => { + cy.intercept('GET', '**/alarm-events/unmanaged/*/*/*', { + statusCode: 200, + body: [], + }); + + cy.intercept('GET', '**/analytics/*', { + statusCode: 200, + body: [], + }); + + cy.get('a.sidebar-link').contains('Dashboard').click({ force: true }); + cy.location('pathname').should('eq', '/dashboard'); + openUserManagement(); +}; + +const openCreateUserForm = () => { + cy.contains('button', 'Inserisci Nuovo Operatore').click(); + cy.get('[data-testid="create-user-panel"]').should('have.class', 'opacity-100'); +}; + +const fillCreateUserForm = (payload: { name: string; surname: string; username: string }) => { + cy.get('#name').clear().type(payload.name); + cy.get('#surname').clear().type(payload.surname); + cy.get('#username').clear().type(payload.username); +}; + +describe('User management e2e', () => { + let usersState: UserDto[]; + let nextUserId: number; + + beforeEach(() => { + nextUserId = 3; + usersState = [ + { + id: 1, + name: 'Marco', + surname: 'Verdi', + username: 'm.verdi', + role: UserRole.OPERATORE_SANITARIO, + }, + { + id: 2, + name: 'Laura', + surname: 'Bianchi', + username: 'l.bianchi', + role: UserRole.OPERATORE_SANITARIO, + }, + ]; + + setupAdminSession(); + + cy.intercept('GET', '**/users', (req) => { + req.reply({ + statusCode: 200, + body: usersState, + }); + }).as('getUsers'); + + cy.intercept('POST', '**/users', (req) => { + const payload = req.body as { name: string; surname: string; username: string }; + + if (usersState.some((user) => user.username === payload.username)) { + req.reply({ + statusCode: 409, + body: { message: 'Username already in use' }, + }); + return; + } + + const createdUser: UserDto = { + id: nextUserId, + name: payload.name, + surname: payload.surname, + username: payload.username, + role: UserRole.OPERATORE_SANITARIO, + }; + + nextUserId += 1; + usersState = [...usersState, createdUser]; + + req.reply({ + statusCode: 201, + body: { + tempPassword: btoa(decodedTempPassword), + }, + }); + }).as('createUser'); + + cy.intercept('DELETE', '**/users/*', (req) => { + const userId = Number(req.url.split('/').pop()); + usersState = usersState.filter((user) => user.id !== userId); + + req.reply({ + statusCode: 204, + body: null, + }); + }).as('deleteUser'); + + openUserManagement(); + cy.wait('@getUsers'); + }); + + it('RF15-DEL Visualizzazione elenco utenti del Sistema', () => { + cy.get('section[aria-label="Elenco operatori sanitari"]').should('be.visible'); + cy.contains('th', 'Username').should('be.visible'); + cy.contains('th', 'Nome').should('be.visible'); + cy.contains('th', 'Cognome').should('be.visible'); + + cy.get('tbody tr').should('have.length.at.least', 2); + }); + + it('RF16-OBL Visualizzazione elemento utente nel dettaglio elenco', () => { + cy.contains('tr', '@m.verdi').within(() => { + cy.contains('td', '@m.verdi').should('exist'); + cy.contains('td', 'Marco').should('exist'); + cy.contains('td', 'Verdi').should('exist'); + cy.contains('button', 'Elimina').should('exist'); + }); + }); + + it('RF17-OBL Visualizzazione nome dell utente nel dettaglio', () => { + cy.contains('tr', '@m.verdi').within(() => { + cy.contains('td', 'Marco').should('exist'); + }); + + cy.contains('tr', '@l.bianchi').within(() => { + cy.contains('td', 'Laura').should('exist'); + }); + }); + + it('RF18-OBL Visualizzazione cognome utente nel dettaglio', () => { + cy.contains('tr', '@m.verdi').within(() => { + cy.contains('td', 'Verdi').should('exist'); + }); + + cy.contains('tr', '@l.bianchi').within(() => { + cy.contains('td', 'Bianchi').should('exist'); + }); + }); + + it('RF19-OBL Visualizzazione username utente nel dettaglio', () => { + cy.contains('tr', '@m.verdi').within(() => { + cy.contains('td', '@m.verdi').should('exist'); + }); + + cy.contains('tr', '@l.bianchi').within(() => { + cy.contains('td', '@l.bianchi').should('exist'); + }); + }); + + it('RF20-DEL Creazione utente Operatore Sanitario', () => { + openCreateUserForm(); + fillCreateUserForm({ + name: 'Giulia', + surname: 'Ferri', + username: 'giulia.ferri', + }); + + cy.contains('button', 'Crea utente').click(); + + cy.wait('@createUser'); + cy.wait('@getUsers'); + cy.contains('h2', 'Utente creato con successo').should('be.visible'); + cy.contains('button', 'Ho comunicato la password').click(); + + cy.contains('tbody tr', '@giulia.ferri').scrollIntoView().should('exist').within(() => { + cy.contains('td', 'Giulia').should('exist'); + cy.contains('td', 'Ferri').should('exist'); + cy.contains('td', '@giulia.ferri').should('exist'); + }); + }); + + it('RF21-DEL Inserimento nome Operatore Sanitario per creazione utente', () => { + openCreateUserForm(); + + cy.get('#name').focus().blur(); + cy.contains('Il nome è obbligatorio.').should('be.visible'); + + cy.get('#name').clear().type('G').blur(); + cy.contains('Il nome deve essere di almeno 2 caratteri.').should('be.visible'); + }); + + it('RF22-DEL Inserimento cognome Operatore Sanitario per creazione utente', () => { + openCreateUserForm(); + + cy.get('#surname').focus().blur(); + cy.contains('Il cognome è obbligatorio.').should('be.visible'); + + cy.get('#surname').clear().type('F').blur(); + cy.contains('Il cognome deve essere di almeno 2 caratteri.').should('be.visible'); + }); + + it('RF23-DEL Inserimento username per creazione utente Operatore Sanitario', () => { + openCreateUserForm(); + + cy.get('#username').focus().blur(); + cy.contains("L'username è obbligatorio.").should('be.visible'); + + cy.get('#username').clear().type('abc').blur(); + cy.contains("L'username deve essere di almeno 4 caratteri.").should('be.visible'); + }); + + it('RF24-DEL Generazione password temporanea per creazione utente', () => { + openCreateUserForm(); + fillCreateUserForm({ + name: 'Luca', + surname: 'Neri', + username: 'luca.neri', + }); + + cy.contains('button', 'Crea utente').click(); + + cy.wait('@createUser'); + cy.contains('code', decodedTempPassword).should('be.visible'); + }); + + it('RF25-DEL Errore se username già in uso', () => { + openCreateUserForm(); + fillCreateUserForm({ + name: 'Mario', + surname: 'Rossi', + username: 'm.verdi', + }); + + cy.contains('button', 'Crea utente').click(); + + cy.wait('@createUser'); + cy.contains('Username già in uso. Scegline un altro.').should('be.visible'); + }); + + it('RF26-DEL Eliminazione utente Operatore Sanitario', () => { + cy.contains('tr', '@m.verdi').within(() => { + cy.contains('button', 'Elimina').click(); + }); + + cy.contains('h3', 'Conferma eliminazione').should('be.visible'); + cy.contains('strong', 'Marco Verdi').should('be.visible'); + cy.contains('span', '@m.verdi').should('be.visible'); + cy.contains('button', 'Elimina operatore').click(); + + cy.wait('@deleteUser'); + cy.wait('@getUsers'); + cy.contains('tr', '@m.verdi').should('not.exist'); + }); + + it('cancels user deletion without removing the row', () => { + cy.contains('tr', '@m.verdi').within(() => { + cy.contains('button', 'Elimina').click(); + }); + + cy.contains('h3', 'Conferma eliminazione').should('be.visible'); + cy.contains('button', 'Annulla').click(); + + cy.contains('h3', 'Conferma eliminazione').should('not.exist'); + cy.contains('tr', '@m.verdi').should('exist'); + }); + + it('closes the create user panel without sending a create request', () => { + openCreateUserForm(); + fillCreateUserForm({ + name: 'Test', + surname: 'Close', + username: 'test.close', + }); + + cy.contains('button', 'Chiudi').click(); + + cy.get('[data-testid="create-user-panel"]').should('have.class', 'opacity-0'); + cy.get('@createUser.all').should('have.length', 0); + }); + + it('closes delete confirmation using the close icon without deleting user', () => { + cy.contains('tr', '@l.bianchi').within(() => { + cy.contains('button', 'Elimina').click(); + }); + + cy.contains('h3', 'Conferma eliminazione').should('be.visible'); + cy.get('button[aria-label="Chiudi"]').click(); + + cy.contains('h3', 'Conferma eliminazione').should('not.exist'); + cy.contains('tr', '@l.bianchi').should('exist'); + cy.get('@deleteUser.all').should('have.length', 0); + }); + + // addtional test for user api service + it('handles server error when fetching users', () => { + cy.intercept('GET', '**/users', { + statusCode: 500, + body: { message: 'Internal Server Error' }, + }).as('getUsersError'); + + reloadUserManagementPage(); + cy.wait('@getUsersError'); + cy.contains('Nessun operatore sanitario presente').should('be.visible'); + }); + + + // ─── Additional tests for UserApiService ─────────────────────────────────── + + it('shows empty state when no users exist', () => { + cy.intercept('GET', '**/users', { + statusCode: 200, + body: [], + }).as('getUsersEmpty'); + + reloadUserManagementPage(); + cy.wait('@getUsersEmpty'); + + cy.get('tbody tr').should('have.length', 1); + cy.contains('Nessun operatore sanitario presente').should('be.visible'); + }); + + it('shows error when deleting a user fails with server error', () => { + cy.intercept('DELETE', '**/users/*', { + statusCode: 500, + body: { message: 'Internal Server Error' }, + }).as('deleteUserError'); + + cy.contains('tr', '@m.verdi').within(() => { + cy.contains('button', 'Elimina').click(); + }); + + cy.contains('h3', 'Conferma eliminazione').should('be.visible'); + cy.contains('button', 'Elimina operatore').click(); + + cy.wait('@deleteUserError'); + cy.contains('tr', '@m.verdi').should('exist'); // utente NON rimosso dalla lista + cy.contains('h3', 'Conferma eliminazione').should('not.exist'); + }); + + it('shows error when creating a user fails with 400 bad request', () => { + cy.intercept('POST', '**/users', { + statusCode: 400, + body: { message: 'Bad Request' }, + }).as('createUserBadRequest'); + + openCreateUserForm(); + fillCreateUserForm({ + name: 'Errore', + surname: 'Richiesta', + username: 'errore.richiesta', + }); + + cy.contains('button', 'Crea utente').click(); + cy.wait('@createUserBadRequest'); + + cy.contains('Errore durante la creazione').should('be.visible'); + cy.get('[data-testid="create-user-panel"]').should('have.class', 'opacity-100'); // pannello rimane aperto + }); + + it('handles network failure when fetching users', () => { + cy.intercept('GET', '**/users', { forceNetworkError: true }).as('getUsersNetworkError'); + + reloadUserManagementPage(); + cy.wait('@getUsersNetworkError'); + + cy.contains('Nessun operatore sanitario presente').should('be.visible'); + }); + + it('handles network failure when creating a user', () => { + cy.intercept('POST', '**/users', { forceNetworkError: true }).as('createUserNetworkError'); + + openCreateUserForm(); + fillCreateUserForm({ + name: 'Rete', + surname: 'Assente', + username: 'rete.assente', + }); + + cy.contains('button', 'Crea utente').click(); + cy.wait('@createUserNetworkError'); + + cy.contains('Errore durante la creazione').should('be.visible'); + }); + + it('handles network failure when deleting a user', () => { + cy.intercept('DELETE', '**/users/*', { forceNetworkError: true }).as('deleteUserNetworkError'); + + cy.contains('tr', '@m.verdi').within(() => { + cy.contains('button', 'Elimina').click(); + }); + + cy.contains('button', 'Elimina operatore').click(); + cy.wait('@deleteUserNetworkError'); + + cy.contains('tr', '@m.verdi').should('exist'); + cy.contains('h3', 'Conferma eliminazione').should('not.exist'); + }); + + it('shows decoded temp password when backend returns a non-base64 plain string', () => { + const plainPassword = 'PlainPass1234'; + + cy.intercept('POST', '**/users', { + statusCode: 201, + body: { tempPassword: plainPassword }, // già in chiaro, non base64 + }).as('createUserPlainPassword'); + + openCreateUserForm(); + fillCreateUserForm({ + name: 'Mario', + surname: 'Pianura', + username: 'mario.pianura', + }); + + cy.contains('button', 'Crea utente').click(); + cy.wait('@createUserPlainPassword'); + + // il decoder restituisce la stringa as-is se non è base64 valido + cy.contains('code', plainPassword).should('be.visible'); + }); + + it('uses the encoded userId in the delete user request URL', () => { + cy.intercept('DELETE', '**/users/42', (req) => { + // verifica che l'ID sia stato correttamente encoded nell'URL + expect(req.url).to.include(encodeURIComponent('42')); + req.reply({ statusCode: 204, body: null }); + }).as('deleteUserEncoded'); + + // aggiungi temporaneamente un utente con id 42 nello stato + usersState = [ + ...usersState, + { id: 42, name: 'Special', surname: 'User', username: 'special.user', role: UserRole.OPERATORE_SANITARIO }, + ]; + + cy.intercept('GET', '**/users', { statusCode: 200, body: usersState }).as('getUsersWithSpecial'); + reloadUserManagementPage(); + cy.wait('@getUsersWithSpecial'); + + cy.contains('tr', '@special.user').within(() => { + cy.contains('button', 'Elimina').click(); + }); + + cy.contains('button', 'Elimina operatore').click(); + cy.wait('@deleteUserEncoded'); + }); + + + +}); \ No newline at end of file diff --git a/frontend/cypress/e2e/ward-management.cy.ts b/frontend/cypress/e2e/ward-management.cy.ts new file mode 100644 index 00000000..c7db3730 --- /dev/null +++ b/frontend/cypress/e2e/ward-management.cy.ts @@ -0,0 +1,730 @@ +import type { User } from '../../src/app/core/models/user.model'; +import { UserRole } from '../../src/app/core/models/user-role.enum'; +import type { Plant } from '../../src/app/features/ward-management/models/plant.model'; +import type { WardSummaryDto, WardUserDto, WardPlantDto } from '../../src/app/features/ward-management/models/ward-api.dto'; + +const adminUsername = 'admin.user'; +const adminPassword = ['A', 'd', 'm', 'i', 'n', 'A', 'c', 'c', 'e', 's', 's', '1', '2', '3'].join(''); +const linkedEmail = 'admin@example.com'; + +const createAccessToken = (): string => { + const claims = { + userId: '1', + username: adminUsername, + role: 'AMMINISTRATORE' as const, + isFirstAccess: false, + }; + + const encodedPayload = btoa(JSON.stringify(claims)) + .replaceAll('+', '-') + .replaceAll('/', '_') + .replaceAll('=', ''); + + return `header.${encodedPayload}.signature`; +}; + +const setupAdminSession = () => { + cy.intercept('POST', '**/auth/login', (req) => { + expect(req.body).to.deep.equal({ + username: adminUsername, + password: adminPassword, + }); + + req.reply({ + statusCode: 200, + body: { + accessToken: createAccessToken(), + }, + }); + }).as('login'); + + cy.intercept('GET', '**/plant/all', { + statusCode: 200, + body: [], + }).as('getPlantAllRealtimeSync'); + + cy.intercept('GET', '**/my-vimar/account', { + statusCode: 200, + body: { + email: linkedEmail, + isLinked: true, + }, + }); + + cy.intercept('GET', '**/api/vimar-account', { + statusCode: 200, + body: { + email: linkedEmail, + isLinked: true, + }, + }); + + cy.visit('/auth/login'); + cy.get('#username').type(adminUsername); + cy.get('#password').type(adminPassword); + cy.get('button[type="submit"]').click(); + cy.wait('@login'); + cy.contains('h1', 'Dashboard').should('be.visible'); +}; + +const openWardManagement = () => { + cy.get('a.sidebar-link').contains('Gestione Reparti').click({ force: true }); + cy.location('pathname').should('eq', '/ward-management'); + cy.contains('h1', 'Gestione reparti').should('be.visible'); +}; + +const pickSelectOptionByText = (selector: string, optionText: string) => { + cy.get(`${selector} option`).then(($options) => { + const target = Array.from($options).find((option) => + option.textContent?.trim().includes(optionText), + ); + + expect(target, `Option containing "${optionText}" should exist`).to.exist; + cy.get(selector).select((target as HTMLOptionElement).value, { force: true }); + }); +}; + +describe('Ward management e2e', () => { + let wardsState: WardSummaryDto[]; + let wardDetails: Record; + let usersCatalog: User[]; + let plantsCatalog: Plant[]; + let nextWardId: number; + + const replyWards = (req: any) => { + req.reply({ + statusCode: 200, + body: wardsState, + }); + }; + + const replyWardUsers = (req: any) => { + const wardId = Number(req.url.split('/').pop()); + req.reply({ + statusCode: 200, + body: wardDetails[wardId]?.operators ?? [], + }); + }; + + const replyWardPlants = (req: any) => { + const wardId = Number(req.url.split('/').pop()); + req.reply({ + statusCode: 200, + body: wardDetails[wardId]?.plants ?? [], + }); + }; + + const hydrateWardDetailsFromSummary = (summary: WardSummaryDto) => { + wardDetails[summary.id] ??= { operators: [], plants: [] }; + }; + + beforeEach(() => { + nextWardId = 3; + wardsState = [ + { id: 1, name: 'Reparto Chirurgia' }, + { id: 2, name: 'Reparto Medicina' }, + ]; + wardDetails = { + 1: { + operators: [ + { id: 11, username: 'm.verdi' }, + ], + plants: [ + { id: '101', name: 'Appartamento 101' }, + ], + }, + 2: { + operators: [], + plants: [], + }, + }; + usersCatalog = [ + { id: 11, firstName: 'Marco', lastName: 'Verdi', username: 'm.verdi', role: UserRole.OPERATORE_SANITARIO }, + { id: 12, firstName: 'Laura', lastName: 'Bianchi', username: 'l.bianchi', role: UserRole.OPERATORE_SANITARIO }, + { id: 13, firstName: 'Paolo', lastName: 'Rossi', username: 'p.rossi', role: UserRole.OPERATORE_SANITARIO }, + ]; + plantsCatalog = [ + { id: '101', name: 'Appartamento 101' }, + { id: '201', name: 'Appartamento 201' }, + { id: '301', name: 'Appartamento 301' }, + { id: '302', name: 'Appartamento 302' }, + ]; + + setupAdminSession(); + + cy.viewport(1440, 1000); + + cy.intercept('GET', '**/wards', (req) => replyWards(req)).as('getWards'); + cy.intercept('GET', '**/wards-users-relationships/*', (req) => replyWardUsers(req)); + cy.intercept('GET', '**/wards-plants-relationships/*', (req) => replyWardPlants(req)); + cy.intercept('GET', '**/users', { + statusCode: 200, + body: usersCatalog, + }).as('getUsers'); + cy.intercept('GET', '**/api/plant/all', { + statusCode: 200, + body: plantsCatalog, + }).as('getPlantsCatalog'); + cy.intercept('POST', '**/wards', (req) => { + const payload = req.body as { name: string }; + + if (payload.name === 'Reparto Chirurgia') { + req.reply({ + statusCode: 409, + body: { message: 'Ward name already in use' }, + }); + return; + } + + const createdWard = { + id: nextWardId, + name: payload.name, + }; + nextWardId += 1; + wardsState = [...wardsState, createdWard]; + hydrateWardDetailsFromSummary(createdWard); + + req.reply({ + statusCode: 201, + body: { + id: createdWard.id, + name: createdWard.name, + apartments: [], + operators: [], + }, + }); + }).as('createWard'); + cy.intercept('PUT', '**/wards/*', (req) => { + const payload = req.body as { name: string }; + + const wardId = Number(req.url.split('/').pop()); + wardsState = wardsState.map((ward) => + ward.id === wardId ? { ...ward, name: payload.name } : ward, + ); + + req.reply({ + statusCode: 200, + body: { + id: wardId, + name: payload.name, + apartments: wardDetails[wardId]?.plants ?? [], + operators: wardDetails[wardId]?.operators ?? [], + }, + }); + }).as('updateWard'); + cy.intercept('DELETE', '**/wards/*', (req) => { + const wardId = Number(req.url.split('/').pop()); + wardsState = wardsState.filter((ward) => ward.id !== wardId); + delete wardDetails[wardId]; + + req.reply({ + statusCode: 204, + body: null, + }); + }).as('deleteWard'); + + cy.intercept('POST', '**/wards-users-relationships', (req) => { + const payload = req.body as { wardId: number; userId: number }; + const selectedUser = usersCatalog.find((user) => user.id === payload.userId); + + expect(selectedUser, 'Selected user must exist in users catalog').to.exist; + + wardDetails[payload.wardId] ??= { operators: [], plants: [] }; + wardDetails[payload.wardId].operators = [{ id: payload.userId, username: selectedUser!.username }]; + + req.reply({ + statusCode: 204, + body: null, + }); + }).as('assignOperator'); + + cy.intercept('DELETE', '**/wards-users-relationships/*/*', (req) => { + const urlParts = req.url.split('/'); + const userId = Number(urlParts.pop()); + const wardId = Number(urlParts.pop()); + + wardDetails[wardId] ??= { operators: [], plants: [] }; + wardDetails[wardId].operators = wardDetails[wardId].operators.filter((operator) => operator.id !== userId); + + req.reply({ + statusCode: 204, + body: null, + }); + }).as('removeOperator'); + + cy.intercept('POST', '**/wards-plants-relationships', (req) => { + const payload = req.body as { wardId: number; plantId: string }; + const selectedPlant = plantsCatalog.find((plant) => plant.id === payload.plantId); + + expect(selectedPlant, 'Selected plant must exist in plants catalog').to.exist; + + wardDetails[payload.wardId] ??= { operators: [], plants: [] }; + wardDetails[payload.wardId].plants = [{ id: payload.plantId, name: selectedPlant!.name }]; + + req.reply({ + statusCode: 204, + body: null, + }); + }).as('assignPlant'); + + cy.intercept('DELETE', '**/wards-plants-relationships/301', (req) => { + wardDetails[2].plants = []; + + req.reply({ + statusCode: 204, + body: null, + }); + }).as('removePlant'); + + }); + + it('RF27-OBL Visualizzazione di tutti i reparti del Sistema', () => { + openWardManagement(); + cy.wait('@getWards'); + + cy.get('aside[aria-label="Elenco reparti"]').contains('Reparto Chirurgia').should('be.visible'); + cy.get('aside[aria-label="Elenco reparti"]').contains('Reparto Medicina').should('be.visible'); + }); + + it('RF28-OBL Visualizzazione reparto del Sistema nel dettaglio', () => { + openWardManagement(); + cy.wait('@getWards'); + + cy.get('aside[aria-label="Elenco reparti"]').contains('Reparto Chirurgia').click(); + + cy.get('section[aria-label="Dettagli reparto e appartamenti"]').should('be.visible'); + cy.get('section[aria-label="Operatori assegnati"]').should('be.visible'); + }); + + it('RF29-OBL Visualizzazione nome reparto nel dettaglio', () => { + openWardManagement(); + cy.wait('@getWards'); + + cy.get('aside[aria-label="Elenco reparti"]').contains('Reparto Chirurgia').click(); + cy.get('section[aria-label="Dettagli reparto e appartamenti"]').find('h2').should('contain', 'Reparto Chirurgia'); + }); + + it('RF30-OBL Creazione nuovo reparto nel Sistema', () => { + openWardManagement(); + cy.wait('@getWards'); + + cy.get('button[aria-label="Nuovo reparto"]').click(); + cy.contains('h2', 'Crea reparto').should('be.visible'); + + cy.get('#ward-name').clear().type('Reparto Riabilitazione'); + cy.contains('button', 'Crea reparto').click(); + + cy.wait('@createWard'); + cy.get('aside[aria-label="Elenco reparti"]').contains('Reparto Riabilitazione').should('be.visible'); + }); + + it('RF31-OBL Inserimento nome nuovo reparto per creazione', () => { + openWardManagement(); + cy.wait('@getWards'); + + cy.get('button[aria-label="Nuovo reparto"]').click(); + cy.contains('h2', 'Crea reparto').should('be.visible'); + + cy.get('#ward-name').focus().blur(); + cy.contains('Il nome reparto è obbligatorio.').should('be.visible'); + }); + + it('RF32-OBL Errore se nome nuovo reparto già in uso', () => { + openWardManagement(); + cy.wait('@getWards'); + + cy.get('button[aria-label="Nuovo reparto"]').click(); + cy.contains('h2', 'Crea reparto').should('be.visible'); + + cy.get('#ward-name').clear().type('Reparto Chirurgia'); + cy.contains('button', 'Crea reparto').click(); + + cy.wait('@createWard'); + cy.contains('[role="alert"]', 'Esiste gia un reparto con questo nome.').should('be.visible'); + }); + + it('RF33-OBL Modifica nome reparto del Sistema', () => { + openWardManagement(); + cy.wait('@getWards'); + + cy.get('aside[aria-label="Elenco reparti"]').contains('Reparto Chirurgia').click(); + cy.get('button[aria-label="Modifica reparto"]').click(); + cy.contains('h2', 'Modifica reparto').should('be.visible'); + + cy.get('#ward-name').clear().type('Reparto Riabilitazione Intensiva'); + cy.contains('button', 'Salva modifiche').click(); + + cy.wait('@updateWard'); + cy.get('aside[aria-label="Elenco reparti"]').contains('Reparto Riabilitazione Intensiva').should('be.visible'); + }); + + it('RF34-OBL Eliminazione reparto del Sistema', () => { + openWardManagement(); + cy.wait('@getWards'); + + cy.get('aside[aria-label="Elenco reparti"]').contains('Reparto Medicina').click(); + cy.get('button[aria-label="Elimina reparto"]').click(); + cy.contains('p', 'Confermi l\'eliminazione del reparto?').should('be.visible'); + cy.contains('button', 'Conferma').click(); + + cy.wait('@deleteWard'); + cy.get('aside[aria-label="Elenco reparti"]').contains('Reparto Medicina').should('not.exist'); + }); + + it('cancels ward deletion without removing the ward', () => { + openWardManagement(); + cy.wait('@getWards'); + + cy.get('aside[aria-label="Elenco reparti"]').contains('Reparto Medicina').click(); + cy.get('button[aria-label="Elimina reparto"]').click(); + cy.contains('p', 'Confermi l\'eliminazione del reparto?').should('be.visible'); + cy.contains('button', 'Annulla').click(); + + cy.contains('p', 'Confermi l\'eliminazione del reparto?').should('not.exist'); + cy.get('aside[aria-label="Elenco reparti"]').contains('Reparto Medicina').should('exist'); + }); + + it('RF35-OBL Assegnazione reparto a utente Operatore Sanitario', () => { + openWardManagement(); + cy.wait('@getWards'); + + cy.get('aside[aria-label="Elenco reparti"]').contains('Reparto Medicina').click(); + cy.get('button[aria-label="Aggiungi operatore"]').click(); + cy.contains('h2', 'Assegna operatore sanitario').should('be.visible'); + + cy.get('dialog[aria-labelledby="assign-operator-title"]').should('be.visible').within(() => { + cy.wait('@getUsers'); + pickSelectOptionByText('#operator-id', 'l.bianchi'); + cy.contains('button', 'Assegna').click(); + }); + + cy.wait('@assignOperator').its('request.body').should('deep.equal', { wardId: 2, userId: 12 }); + cy.wait('@getWards'); + cy.get('section[aria-label="Operatori assegnati"]').should('contain', 'l.bianchi'); + }); + + it('RF36-OBL Selezione utente Operatore Sanitario per assegnazione reparto', () => { + openWardManagement(); + cy.wait('@getWards'); + + cy.get('aside[aria-label="Elenco reparti"]').contains('Reparto Medicina').click(); + cy.get('button[aria-label="Aggiungi operatore"]').click(); + cy.contains('h2', 'Assegna operatore sanitario').should('be.visible'); + + cy.get('dialog[aria-labelledby="assign-operator-title"]').should('be.visible').within(() => { + cy.contains('button', 'Assegna').should('be.disabled'); + + cy.wait('@getUsers'); + pickSelectOptionByText('#operator-id', 'l.bianchi'); + cy.contains('button', 'Assegna').should('not.be.disabled'); + }); + }); + + it('RF37-OBL Selezione reparto per assegnazione reparto a utente Operatore Sanitario', () => { + openWardManagement(); + cy.wait('@getWards'); + + cy.get('aside[aria-label="Elenco reparti"]').contains('Reparto Chirurgia').click(); + cy.get('button[aria-label="Aggiungi operatore"]').click(); + cy.contains('h2', 'Assegna operatore sanitario').should('be.visible'); + cy.contains('Reparto:').should('contain', '1'); + + cy.get('dialog[aria-labelledby="assign-operator-title"]').should('be.visible').within(() => { + cy.wait('@getUsers'); + pickSelectOptionByText('#operator-id', 'l.bianchi'); + cy.contains('button', 'Assegna').click(); + }); + + cy.wait('@assignOperator').its('request.body').should('deep.equal', { wardId: 1, userId: 12 }); + }); + + it('RF38-OBL Eliminazione assegnazione utente Operatore Sanitario-reparto', () => { + wardDetails[2].operators = [{ id: 12, username: 'l.bianchi' }]; + + openWardManagement(); + cy.wait('@getWards'); + + cy.get('aside[aria-label="Elenco reparti"]').contains('Reparto Medicina').click(); + cy.get('section[aria-label="Operatori assegnati"]').should('contain', 'l.bianchi'); + + cy.get('button[aria-label^="Rimuovi operatore"]').click(); + cy.contains('p', 'Confermi la rimozione dell\'operatore dal reparto?').should('be.visible'); + cy.contains('button', 'Rimuovi').click(); + + cy.wait('@removeOperator'); + cy.wait('@getWards'); + cy.get('section[aria-label="Operatori assegnati"]').should('not.contain', 'l.bianchi'); + }); + + it('cancels operator assignment dialog without sending API request', () => { + openWardManagement(); + cy.wait('@getWards'); + + cy.get('aside[aria-label="Elenco reparti"]').contains('Reparto Medicina').click(); + cy.get('button[aria-label="Aggiungi operatore"]').click(); + cy.contains('h2', 'Assegna operatore sanitario').should('be.visible'); + + cy.contains('button', 'Annulla').click(); + + cy.contains('h2', 'Assegna operatore sanitario').should('not.exist'); + cy.get('@assignOperator.all').should('have.length', 0); + }); + + it('cancels operator removal confirmation without removing the operator', () => { + wardDetails[2].operators = [{ id: 12, username: 'l.bianchi' }]; + + openWardManagement(); + cy.wait('@getWards'); + + cy.get('aside[aria-label="Elenco reparti"]').contains('Reparto Medicina').click(); + cy.get('button[aria-label^="Rimuovi operatore"]').click(); + cy.contains('p', 'Confermi la rimozione dell\'operatore dal reparto?').should('be.visible'); + cy.contains('button', 'Annulla').click(); + + cy.contains('p', 'Confermi la rimozione dell\'operatore dal reparto?').should('not.exist'); + cy.get('section[aria-label="Operatori assegnati"]').should('contain', 'l.bianchi'); + cy.get('@removeOperator.all').should('have.length', 0); + }); + + it('RF39-OBL Assegnazione reparto a appartamento', () => { + openWardManagement(); + cy.wait('@getWards'); + + cy.get('aside[aria-label="Elenco reparti"]').contains('Reparto Medicina').click(); + cy.get('button[aria-label="Assegna appartamento"]').click(); + cy.contains('h2', 'Assegna appartamento').should('be.visible'); + + cy.get('dialog[aria-labelledby="assign-apartment-title"]').should('be.visible').within(() => { + cy.wait('@getPlantsCatalog'); + pickSelectOptionByText('#apartment-id', 'Appartamento 301'); + cy.contains('button', 'Assegna').click(); + }); + + cy.wait('@assignPlant').its('request.body').should('deep.equal', { wardId: 2, plantId: '301' }); + cy.wait('@getWards'); + cy.get('section[aria-label="Dettagli reparto e appartamenti"]').should('contain', 'Appartamento 301'); + }); + + it('RF40-OBL Selezione appartamento per assegnazione reparto a appartamento', () => { + openWardManagement(); + cy.wait('@getWards'); + + cy.get('aside[aria-label="Elenco reparti"]').contains('Reparto Medicina').click(); + cy.get('button[aria-label="Assegna appartamento"]').click(); + cy.contains('h2', 'Assegna appartamento').should('be.visible'); + + cy.get('dialog[aria-labelledby="assign-apartment-title"]').should('be.visible').within(() => { + cy.contains('button', 'Assegna').should('be.disabled'); + + cy.wait('@getPlantsCatalog'); + pickSelectOptionByText('#apartment-id', 'Appartamento 301'); + cy.contains('button', 'Assegna').should('not.be.disabled'); + }); + }); + + it('RF41-OBL Selezione reparto per assegnare un reparto a un appartamento', () => { + openWardManagement(); + cy.wait('@getWards'); + + cy.get('aside[aria-label="Elenco reparti"]').contains('Reparto Chirurgia').click(); + cy.get('button[aria-label="Assegna appartamento"]').click(); + cy.contains('h2', 'Assegna appartamento').should('be.visible'); + cy.contains('Reparto:').should('contain', '1'); + + cy.get('dialog[aria-labelledby="assign-apartment-title"]').should('be.visible').within(() => { + cy.wait('@getPlantsCatalog'); + pickSelectOptionByText('#apartment-id', 'Appartamento 301'); + cy.contains('button', 'Assegna').click(); + }); + + cy.wait('@assignPlant').its('request.body').should('deep.equal', { wardId: 1, plantId: '301' }); + }); + + it('RF42-OBL Eliminazione assegnazione appartamento - reparto', () => { + wardDetails[2].plants = [{ id: '301', name: 'Appartamento 301' }]; + + openWardManagement(); + cy.wait('@getWards'); + + cy.get('aside[aria-label="Elenco reparti"]').contains('Reparto Medicina').click(); + cy.get('section[aria-label="Dettagli reparto e appartamenti"]').should('contain', 'Appartamento 301'); + + cy.get('button[aria-label^="Rimuovi appartamento"]').click(); + cy.contains('p', 'Confermi la rimozione dell\'appartamento dal reparto?').should('be.visible'); + cy.contains('button', 'Rimuovi').click(); + + cy.wait('@removePlant'); + cy.wait('@getWards'); + cy.get('section[aria-label="Dettagli reparto e appartamenti"]').should('not.contain', 'Appartamento 301'); + }); + + it('closes apartment assignment dialog from close icon without sending API request', () => { + openWardManagement(); + cy.wait('@getWards'); + + cy.get('aside[aria-label="Elenco reparti"]').contains('Reparto Medicina').click(); + cy.get('button[aria-label="Assegna appartamento"]').click(); + cy.contains('h2', 'Assegna appartamento').should('be.visible'); + + cy.get('dialog[aria-labelledby="assign-apartment-title"]').within(() => { + cy.get('button[aria-label="Chiudi"]').click(); + }); + + cy.contains('h2', 'Assegna appartamento').should('not.exist'); + cy.get('@assignPlant.all').should('have.length', 0); + }); + + it('cancels apartment removal confirmation without removing the apartment', () => { + wardDetails[2].plants = [{ id: '301', name: 'Appartamento 301' }]; + + openWardManagement(); + cy.wait('@getWards'); + + cy.get('aside[aria-label="Elenco reparti"]').contains('Reparto Medicina').click(); + cy.get('button[aria-label^="Rimuovi appartamento"]').click(); + cy.contains('p', 'Confermi la rimozione dell\'appartamento dal reparto?').should('be.visible'); + cy.contains('button', 'Annulla').click(); + + cy.contains('p', 'Confermi la rimozione dell\'appartamento dal reparto?').should('not.exist'); + cy.get('section[aria-label="Dettagli reparto e appartamenti"]').should('contain', 'Appartamento 301'); + cy.get('@removePlant.all').should('have.length', 0); + }); + + it('refreshes realtime room subscriptions after assigning an operator', () => { + let plantAllCallsBeforeAssign = 0; + + openWardManagement(); + cy.wait('@getWards'); + cy.get('@getPlantAllRealtimeSync.all').then((calls) => { + plantAllCallsBeforeAssign = calls.length; + }); + + cy.get('aside[aria-label="Elenco reparti"]').contains('Reparto Medicina').click(); + cy.get('button[aria-label="Aggiungi operatore"]').click(); + + cy.get('dialog[aria-labelledby="assign-operator-title"]').should('be.visible').within(() => { + cy.wait('@getUsers'); + pickSelectOptionByText('#operator-id', 'l.bianchi'); + cy.contains('button', 'Assegna').click(); + }); + + cy.wait('@assignOperator'); + cy.wait('@getWards'); + cy.wait('@getPlantAllRealtimeSync'); + cy.get('@getPlantAllRealtimeSync.all').its('length').should('be.greaterThan', plantAllCallsBeforeAssign); + cy.get('section[aria-label="Operatori assegnati"]').should('contain', 'l.bianchi'); + }); + + it('keeps assignment flow stable even when realtime refresh endpoint fails', () => { + cy.intercept('GET', '**/plant/all', { + statusCode: 500, + body: { message: 'refresh failed' }, + }).as('getPlantAllRealtimeSyncFailure'); + + openWardManagement(); + cy.wait('@getWards'); + + cy.get('aside[aria-label="Elenco reparti"]').contains('Reparto Medicina').click(); + cy.get('button[aria-label="Aggiungi operatore"]').click(); + + cy.get('dialog[aria-labelledby="assign-operator-title"]').should('be.visible').within(() => { + cy.wait('@getUsers'); + pickSelectOptionByText('#operator-id', 'l.bianchi'); + cy.contains('button', 'Assegna').click(); + }); + + cy.wait('@assignOperator'); + cy.wait('@getWards'); + cy.wait('@getPlantAllRealtimeSyncFailure'); + cy.get('section[aria-label="Operatori assegnati"]').should('contain', 'l.bianchi'); + }); + + it('refreshes realtime room subscriptions after assigning an apartment', () => { + let plantAllCallsBeforeAssign = 0; + + openWardManagement(); + cy.wait('@getWards'); + cy.get('@getPlantAllRealtimeSync.all').then((calls) => { + plantAllCallsBeforeAssign = calls.length; + }); + + cy.get('aside[aria-label="Elenco reparti"]').contains('Reparto Medicina').click(); + cy.get('button[aria-label="Assegna appartamento"]').click(); + + cy.get('dialog[aria-labelledby="assign-apartment-title"]').should('be.visible').within(() => { + cy.wait('@getPlantsCatalog'); + pickSelectOptionByText('#apartment-id', 'Appartamento 301'); + cy.contains('button', 'Assegna').click(); + }); + + cy.wait('@assignPlant'); + cy.wait('@getWards'); + cy.wait('@getPlantAllRealtimeSync'); + cy.get('@getPlantAllRealtimeSync.all').its('length').should('be.greaterThan', plantAllCallsBeforeAssign); + cy.get('section[aria-label="Dettagli reparto e appartamenti"]').should('contain', 'Appartamento 301'); + }); + + it('shows an error and keeps operators unchanged when assign operator API fails', () => { + cy.intercept('POST', '**/wards-users-relationships', { + statusCode: 500, + body: { message: 'operator assign failed' }, + }).as('assignOperatorFailure'); + + openWardManagement(); + cy.wait('@getWards'); + + cy.get('aside[aria-label="Elenco reparti"]').contains('Reparto Medicina').click(); + cy.get('button[aria-label="Aggiungi operatore"]').click(); + + cy.get('dialog[aria-labelledby="assign-operator-title"]').should('be.visible').within(() => { + cy.wait('@getUsers'); + pickSelectOptionByText('#operator-id', 'l.bianchi'); + cy.contains('button', 'Assegna').click(); + }); + + cy.wait('@assignOperatorFailure'); + cy.get('[role="alert"]').should('be.visible'); + cy.get('section[aria-label="Operatori assegnati"]').should('not.contain', 'l.bianchi'); + }); + + it('shows an error and keeps apartments unchanged when assign apartment API fails', () => { + cy.intercept('POST', '**/wards-plants-relationships', { + statusCode: 500, + body: { message: 'plant assign failed' }, + }).as('assignPlantFailure'); + + openWardManagement(); + cy.wait('@getWards'); + + cy.get('aside[aria-label="Elenco reparti"]').contains('Reparto Medicina').click(); + cy.get('button[aria-label="Assegna appartamento"]').click(); + + cy.get('dialog[aria-labelledby="assign-apartment-title"]').should('be.visible').within(() => { + cy.wait('@getPlantsCatalog'); + pickSelectOptionByText('#apartment-id', 'Appartamento 301'); + cy.contains('button', 'Assegna').click(); + }); + + cy.wait('@assignPlantFailure'); + cy.get('[role="alert"]').should('be.visible'); + cy.get('section[aria-label="Dettagli reparto e appartamenti"]').should('not.contain', 'Appartamento 301'); + }); + + it('shows an error and keeps ward list unchanged when ward deletion fails', () => { + cy.intercept('DELETE', '**/wards/*', { + statusCode: 500, + body: { message: 'delete ward failed' }, + }).as('deleteWardFailure'); + + openWardManagement(); + cy.wait('@getWards'); + + cy.get('aside[aria-label="Elenco reparti"]').contains('Reparto Medicina').click(); + cy.get('button[aria-label="Elimina reparto"]').click(); + cy.contains('button', 'Conferma').click(); + + cy.wait('@deleteWardFailure'); + cy.get('[role="alert"]').should('be.visible'); + cy.get('aside[aria-label="Elenco reparti"]').contains('Reparto Medicina').should('exist'); + }); +}); \ No newline at end of file diff --git a/frontend/cypress/fixtures/example.json b/frontend/cypress/fixtures/example.json new file mode 100644 index 00000000..294cbed6 --- /dev/null +++ b/frontend/cypress/fixtures/example.json @@ -0,0 +1,4 @@ +{ + "name": "Using fixtures to represent data", + "email": "hello@cypress.io" +} diff --git a/frontend/cypress/support/commands.ts b/frontend/cypress/support/commands.ts new file mode 100644 index 00000000..af1f44a0 --- /dev/null +++ b/frontend/cypress/support/commands.ts @@ -0,0 +1,43 @@ +// *********************************************** +// This example namespace declaration will help +// with Intellisense and code completion in your +// IDE or Text Editor. +// *********************************************** +// declare namespace Cypress { +// interface Chainable { +// customCommand(param: any): typeof customCommand; +// } +// } +// +// function customCommand(param: any): void { +// console.warn(param); +// } +// +// NOTE: You can use it like so: +// Cypress.Commands.add('customCommand', customCommand); +// +// *********************************************** +// This example commands.js shows you how to +// create various custom commands and overwrite +// existing commands. +// +// For more comprehensive examples of custom +// commands please read more here: +// https://on.cypress.io/custom-commands +// *********************************************** +// +// +// -- This is a parent command -- +// Cypress.Commands.add("login", (email, password) => { ... }) +// +// +// -- This is a child command -- +// Cypress.Commands.add("drag", { prevSubject: 'element'}, (subject, options) => { ... }) +// +// +// -- This is a dual command -- +// Cypress.Commands.add("dismiss", { prevSubject: 'optional'}, (subject, options) => { ... }) +// +// +// -- This will overwrite an existing command -- +// Cypress.Commands.overwrite("visit", (originalFn, url, options) => { ... }) diff --git a/frontend/cypress/support/component-index.html b/frontend/cypress/support/component-index.html new file mode 100644 index 00000000..faf3b5f4 --- /dev/null +++ b/frontend/cypress/support/component-index.html @@ -0,0 +1,12 @@ + + + + + + + Components App + + +
+ + diff --git a/frontend/cypress/support/component.ts b/frontend/cypress/support/component.ts new file mode 100644 index 00000000..535d5e07 --- /dev/null +++ b/frontend/cypress/support/component.ts @@ -0,0 +1,39 @@ +// *********************************************************** +// This example support/component.ts is processed and +// loaded automatically before your test files. +// +// This is a great place to put global configuration and +// behavior that modifies Cypress. +// +// You can change the location of this file or turn off +// automatically serving support files with the +// 'supportFile' configuration option. +// +// You can read more here: +// https://on.cypress.io/configuration +// *********************************************************** + +// Import commands.js using ES2015 syntax: +import './commands'; + +// Alternatively you can use CommonJS syntax: +// require('./commands') + +import { mount } from 'cypress/angular-zoneless'; + +// Augment the Cypress namespace to include type definitions for +// your custom command. +// Alternatively, can be defined in cypress/support/component.d.ts +// with a at the top of your spec. +declare global { + namespace Cypress { + interface Chainable { + mount: typeof mount; + } + } +} + +Cypress.Commands.add('mount', mount); + +// Example use: +// cy.mount(MyComponent) diff --git a/frontend/cypress/support/e2e.ts b/frontend/cypress/support/e2e.ts new file mode 100644 index 00000000..f8c36844 --- /dev/null +++ b/frontend/cypress/support/e2e.ts @@ -0,0 +1,18 @@ +// *********************************************************** +// This example support/e2e.ts is processed and +// loaded automatically before your test files. +// +// This is a great place to put global configuration and +// behavior that modifies Cypress. +// +// You can change the location of this file or turn off +// automatically serving support files with the +// 'supportFile' configuration option. +// +// You can read more here: +// https://on.cypress.io/configuration +// *********************************************************** + +// When a command from ./commands is ready to use, import with `import './commands'` syntax +// import './commands'; +import '@cypress/code-coverage/support'; diff --git a/frontend/cypress/tsconfig.json b/frontend/cypress/tsconfig.json new file mode 100644 index 00000000..79d78d7e --- /dev/null +++ b/frontend/cypress/tsconfig.json @@ -0,0 +1,8 @@ +{ + "extends": "../tsconfig.json", + "include": ["**/*.ts"], + "compilerOptions": { + "sourceMap": false, + "types": ["cypress"] + } +} diff --git a/frontend/dist-instrumented/alarm-button-card.component-HBBO37ZO.css.map b/frontend/dist-instrumented/alarm-button-card.component-HBBO37ZO.css.map new file mode 100644 index 00000000..f92ee311 --- /dev/null +++ b/frontend/dist-instrumented/alarm-button-card.component-HBBO37ZO.css.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["src/app/features/device-interaction/components/alarm-button-card/alarm-button-card.component.css"], + "sourcesContent": [".device-card { border: 1px solid #d8dee3; border-radius: 0.5rem; padding: 0.75rem; display: grid; gap: 0.6rem; }\n.device-card h3, .device-card p { margin: 0; }\n.device-card__actions { display: flex; gap: 0.5rem; flex-wrap: wrap; }\n.device-card__error { color: #a40000; margin: 0; font-size: 0.85rem; }\n"], + "mappings": "AAAA,CAAA,YAAe,OAAA,IAAA,MAAA,QAAf,cAA0C,MAA1C,QAAiE,OAAkB,QAAA,KAAe,IAAA,KAAa,CAC/G,CADA,YACA,GAAA,CADA,YACA,EADA,OACkC,CAAW,CAC7C,CAAA,qBAAwB,QAAA,KAAe,IAAA,MAAa,UAAA,IAAiB,CACrE,CAAA,mBAAsB,MAAA,QAHtB,OAGsC,EAAW,UAAA,MAAoB", + "names": [] +} diff --git a/frontend/dist-instrumented/alarm-config-page.component-TBPHWXNY.css.map b/frontend/dist-instrumented/alarm-config-page.component-TBPHWXNY.css.map new file mode 100644 index 00000000..49f60d9f --- /dev/null +++ b/frontend/dist-instrumented/alarm-config-page.component-TBPHWXNY.css.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["src/app/features/alarm-configuration/components/alarm-config-page/alarm-config-page.component.css"], + "sourcesContent": [".alarm-config-page {\n gap: 1.15rem;\n}"], + "mappings": "AAAA,CAAA,kBACI,IAAA,OACJ", + "names": [] +} diff --git a/frontend/dist-instrumented/alarm-configuration.png b/frontend/dist-instrumented/alarm-configuration.png new file mode 100644 index 00000000..647bbaf0 Binary files /dev/null and b/frontend/dist-instrumented/alarm-configuration.png differ diff --git a/frontend/dist-instrumented/alarm-history-page.component-6E6DBGDK.css.map b/frontend/dist-instrumented/alarm-history-page.component-6E6DBGDK.css.map new file mode 100644 index 00000000..2cd19378 --- /dev/null +++ b/frontend/dist-instrumented/alarm-history-page.component-6E6DBGDK.css.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["src/app/features/alarm-history/components/alarm-history-page.component.css"], + "sourcesContent": [".alarm-management__status,\r\n.alarm-management__error,\r\n.alarm-management__empty {\r\n margin-top: 0.75rem;\r\n}\r\n"], + "mappings": "AAAA,CAAA,2EAGI,WAAA,MACJ", + "names": [] +} diff --git a/frontend/dist-instrumented/alarm-history.png b/frontend/dist-instrumented/alarm-history.png new file mode 100644 index 00000000..6dd9160f Binary files /dev/null and b/frontend/dist-instrumented/alarm-history.png differ diff --git a/frontend/dist-instrumented/alarm-management.png b/frontend/dist-instrumented/alarm-management.png new file mode 100644 index 00000000..0ed91146 Binary files /dev/null and b/frontend/dist-instrumented/alarm-management.png differ diff --git a/frontend/dist-instrumented/alarm-map.component-KGOYFFNJ.css.map b/frontend/dist-instrumented/alarm-map.component-KGOYFFNJ.css.map new file mode 100644 index 00000000..a859b6b7 --- /dev/null +++ b/frontend/dist-instrumented/alarm-map.component-KGOYFFNJ.css.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["src/app/features/apartment-monitor/components/alarm-map/alarm-map.component.css"], + "sourcesContent": [".alarm-map {\n display: grid;\n gap: 0.85rem;\n}\n\n.alarm-map header h2,\n.alarm-map header p {\n margin: 0;\n}\n\n.alarm-map header h2 {\n font-size: 1rem;\n font-family: var(--care-font-display);\n color: #0f172a;\n}\n\n.alarm-map header p {\n margin-top: 0.25rem;\n font-size: 0.84rem;\n color: #64748b;\n}\n\n.alarm-map__grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(9rem, 1fr));\n gap: 0.7rem;\n}\n\n.alarm-map__room {\n border: 1px solid #dbe3ec;\n border-radius: 0.75rem;\n padding: 0.8rem;\n background: rgba(248, 250, 252, 0.8);\n}\n\n.alarm-map__room--alert {\n border-color: #fecdd3;\n background: #fff1f2;\n}\n\n.alarm-map__room h3,\n.alarm-map__room p,\n.alarm-map__summary {\n margin: 0;\n}\n\n.alarm-map__room h3 {\n font-size: 0.92rem;\n color: #0f172a;\n}\n\n.alarm-map__room p {\n margin-top: 0.25rem;\n font-size: 0.8rem;\n color: #64748b;\n}\n\n.alarm-map__alert {\n color: #be123c;\n font-size: 0.78rem;\n margin-top: 0.25rem;\n}\n\n.alarm-map__summary {\n font-size: 0.82rem;\n color: #334155;\n}\n"], + "mappings": "AAAA,CAAA,UACE,QAAA,KACA,IAAA,MACF,CAEA,CALA,UAKA,OAAA,IALA,mBAAA,OAOE,CACF,CAEA,CAVA,UAUA,OAAA,GACE,UAAA,KACA,YAAA,IAAA,qBACA,MAAA,OACF,CAEA,CAhBA,UAgBA,OAAA,EACE,WAAA,OACA,UAAA,OACA,MAAA,OACF,CAEA,CAAA,gBACE,QAAA,KACA,sBAAA,OAAA,QAAA,CAAA,OAAA,IAAA,CAAA,MACA,IAAA,KACF,CAEA,CAAA,gBACE,OAAA,IAAA,MAAA,QA7BF,cA8BE,OA9BF,QA+BE,MACA,WAAA,SACF,CAEA,CAAA,uBACE,aAAA,QACA,WAAA,OACF,CAEA,CAZA,gBAYA,IAZA,sCA5BA,OA2CE,CACF,CAEA,CAlBA,gBAkBA,GACE,UAAA,OACA,MAAA,OACF,CAEA,CAvBA,gBAuBA,EACE,WAAA,OACA,UAAA,MACA,MAAA,OACF,CAEA,CAAA,iBACE,MAAA,QACA,UAAA,OACA,WAAA,MACF,CAEA,oBACE,UAAA,OACA,MAAA,OACF", + "names": [] +} diff --git a/frontend/dist-instrumented/alarm-page-management-component-VFEDTETJ.css.map b/frontend/dist-instrumented/alarm-page-management-component-VFEDTETJ.css.map new file mode 100644 index 00000000..ef768e97 --- /dev/null +++ b/frontend/dist-instrumented/alarm-page-management-component-VFEDTETJ.css.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["src/app/features/alarm-management/components/alarm-page-management-component/alarm-page-management-component.css"], + "sourcesContent": [".alarm-management__status,\n.alarm-management__error,\n.alarm-management__empty {\n margin-top: 0.75rem;\n}"], + "mappings": "AAAA,CAAA,2EAGI,WAAA,MACJ", + "names": [] +} diff --git a/frontend/dist-instrumented/analytics.png b/frontend/dist-instrumented/analytics.png new file mode 100644 index 00000000..0e2ec264 Binary files /dev/null and b/frontend/dist-instrumented/analytics.png differ diff --git a/frontend/dist-instrumented/apartment-monitor.component-L7ILMCZL.css.map b/frontend/dist-instrumented/apartment-monitor.component-L7ILMCZL.css.map new file mode 100644 index 00000000..54cba30b --- /dev/null +++ b/frontend/dist-instrumented/apartment-monitor.component-L7ILMCZL.css.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["src/app/features/apartment-monitor/components/apartment-monitor/apartment-monitor.component.css"], + "sourcesContent": [".apartment-monitor {\n gap: 1.25rem;\n}\n\n.apartment-monitor__hero-side {\n display: grid;\n gap: 0.65rem;\n justify-items: end;\n min-width: 0;\n}\n\n.apartment-monitor__selector {\n min-width: 100%;\n max-width: 19rem;\n}\n\n.apartment-monitor__content {\n display: grid;\n grid-template-columns: 1fr;\n gap: 1rem;\n}\n\n.apartment-monitor__panel {\n min-height: 100%;\n}\n\n.apartment-monitor__panel--highlight {\n border-color: rgba(245, 158, 11, 0.3);\n box-shadow: 0 12px 24px -22px rgba(245, 158, 11, 0.55);\n}\n\n@media (max-width: 960px) {\n .apartment-monitor__content {\n grid-template-columns: 1fr;\n }\n\n .apartment-monitor__hero-side {\n justify-items: stretch;\n min-width: 0;\n }\n\n .apartment-monitor__selector {\n max-width: none;\n }\n}\n"], + "mappings": "AAAA,CAAA,kBACE,IAAA,OACF,CAEA,CAAA,6BACE,QAAA,KACA,IAAA,OACA,cAAA,IACA,UAAA,CACF,CAEA,CAAA,4BACE,UAAA,KACA,UAAA,KACF,CAEA,CAAA,2BACE,QAAA,KACA,sBAAA,IACA,IAAA,IACF,CAEA,CAAA,yBACE,WAAA,IACF,CAEA,CAAA,oCACE,aAAA,UACA,WAAA,EAAA,KAAA,KAAA,MAAA,SACF,CAEA,OAAA,UAAA,OACE,CAhBF,2BAiBI,sBAAA,GACF,CAEA,CAhCF,6BAiCI,cAAA,QACA,UAAA,CACF,CAEA,CA9BF,4BA+BI,UAAA,IACF,CACF", + "names": [] +} diff --git a/frontend/dist-instrumented/blind-card.component-KIZKH7BA.css.map b/frontend/dist-instrumented/blind-card.component-KIZKH7BA.css.map new file mode 100644 index 00000000..8222d630 --- /dev/null +++ b/frontend/dist-instrumented/blind-card.component-KIZKH7BA.css.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["src/app/features/device-interaction/components/blind-card/blind-card.component.css"], + "sourcesContent": [".device-card { border: 1px solid #d8dee3; border-radius: 0.5rem; padding: 0.75rem; display: grid; gap: 0.6rem; }\n.device-card h3, .device-card p { margin: 0; }\n.device-card__actions { display: flex; gap: 0.5rem; flex-wrap: wrap; }\n.device-card__error { color: #a40000; margin: 0; font-size: 0.85rem; }\n"], + "mappings": "AAAA,CAAA,YAAe,OAAA,IAAA,MAAA,QAAf,cAA0C,MAA1C,QAAiE,OAAkB,QAAA,KAAe,IAAA,KAAa,CAC/G,CADA,YACA,GAAA,CADA,YACA,EADA,OACkC,CAAW,CAC7C,CAAA,qBAAwB,QAAA,KAAe,IAAA,MAAa,UAAA,IAAiB,CACrE,CAAA,mBAAsB,MAAA,QAHtB,OAGsC,EAAW,UAAA,MAAoB", + "names": [] +} diff --git a/frontend/dist-instrumented/chunk-2HDQ4MOL.js b/frontend/dist-instrumented/chunk-2HDQ4MOL.js new file mode 100644 index 00000000..4c754d01 --- /dev/null +++ b/frontend/dist-instrumented/chunk-2HDQ4MOL.js @@ -0,0 +1,5 @@ +function cov_139b6x6lz3(){var path="/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-2HDQ4MOL.js";var hash="79723cd35d546aaf8f1d64a3386610579bc52253";var global=new Function("return this")();var gcv="__coverage__";var coverageData={path:"/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-2HDQ4MOL.js",statementMap:{"0":{start:{line:1,column:800},end:{line:1,column:2280}},"1":{start:{line:1,column:819},end:{line:1,column:823}},"2":{start:{line:1,column:832},end:{line:1,column:837}},"3":{start:{line:1,column:850},end:{line:1,column:855}},"4":{start:{line:1,column:877},end:{line:1,column:880}},"5":{start:{line:1,column:903},end:{line:1,column:904}},"6":{start:{line:1,column:931},end:{line:1,column:1189}},"7":{start:{line:1,column:989},end:{line:1,column:1008}},"8":{start:{line:1,column:995},end:{line:1,column:1008}},"9":{start:{line:1,column:1014},end:{line:1,column:1042}},"10":{start:{line:1,column:1043},end:{line:1,column:1186}},"11":{start:{line:1,column:1137},end:{line:1,column:1184}},"12":{start:{line:1,column:1223},end:{line:1,column:1305}},"13":{start:{line:1,column:1306},end:{line:1,column:1376}},"14":{start:{line:1,column:1340},end:{line:1,column:1361}},"15":{start:{line:1,column:1369},end:{line:1,column:1374}},"16":{start:{line:1,column:1412},end:{line:1,column:1496}},"17":{start:{line:1,column:1497},end:{line:1,column:1567}},"18":{start:{line:1,column:1531},end:{line:1,column:1552}},"19":{start:{line:1,column:1560},end:{line:1,column:1565}},"20":{start:{line:1,column:1607},end:{line:1,column:1609}},"21":{start:{line:1,column:1610},end:{line:1,column:1681}},"22":{start:{line:1,column:1632},end:{line:1,column:1667}},"23":{start:{line:1,column:1668},end:{line:1,column:1680}},"24":{start:{line:1,column:1681},end:{line:1,column:1689}},"25":{start:{line:1,column:1727},end:{line:1,column:1758}},"26":{start:{line:1,column:1759},end:{line:1,column:1777}},"27":{start:{line:1,column:1765},end:{line:1,column:1777}},"28":{start:{line:1,column:1783},end:{line:1,column:1817}},"29":{start:{line:1,column:1820},end:{line:1,column:1854}},"30":{start:{line:1,column:1857},end:{line:1,column:1865}},"31":{start:{line:1,column:1868},end:{line:1,column:1873}},"32":{start:{line:1,column:1874},end:{line:1,column:2031}},"33":{start:{line:1,column:2047},end:{line:1,column:2151}},"34":{start:{line:1,column:2169},end:{line:1,column:2198}},"35":{start:{line:1,column:2181},end:{line:1,column:2197}},"36":{start:{line:1,column:2217},end:{line:1,column:2267}},"37":{start:{line:1,column:2268},end:{line:1,column:2276}},"38":{start:{line:1,column:2287},end:{line:1,column:3322}},"39":{start:{line:1,column:2319},end:{line:1,column:2324}},"40":{start:{line:1,column:2348},end:{line:1,column:2353}},"41":{start:{line:1,column:2376},end:{line:1,column:2466}},"42":{start:{line:1,column:2492},end:{line:1,column:2623}},"43":{start:{line:1,column:2560},end:{line:1,column:2576}},"44":{start:{line:1,column:2628},end:{line:1,column:3145}},"45":{start:{line:1,column:2696},end:{line:1,column:2701}},"46":{start:{line:1,column:2884},end:{line:1,column:2895}},"47":{start:{line:1,column:2898},end:{line:1,column:2994}},"48":{start:{line:1,column:2926},end:{line:1,column:2946}},"49":{start:{line:1,column:2969},end:{line:1,column:2993}},"50":{start:{line:1,column:2995},end:{line:1,column:3112}},"51":{start:{line:1,column:3017},end:{line:1,column:3079}},"52":{start:{line:1,column:3171},end:{line:1,column:3184}},"53":{start:{line:1,column:3185},end:{line:1,column:3211}},"54":{start:{line:1,column:3229},end:{line:1,column:3258}},"55":{start:{line:1,column:3241},end:{line:1,column:3257}},"56":{start:{line:1,column:3277},end:{line:1,column:3309}},"57":{start:{line:1,column:3310},end:{line:1,column:3318}},"58":{start:{line:1,column:3340},end:{line:1,column:3357}},"59":{start:{line:1,column:3375},end:{line:1,column:3392}},"60":{start:{line:1,column:3410},end:{line:1,column:3474}},"61":{start:{line:1,column:3492},end:{line:1,column:3627}},"62":{start:{line:1,column:3506},end:{line:1,column:3509}},"63":{start:{line:1,column:3510},end:{line:1,column:3626}},"64":{start:{line:1,column:3548},end:{line:1,column:3553}},"65":{start:{line:1,column:3559},end:{line:1,column:3562}},"66":{start:{line:1,column:3563},end:{line:1,column:3585}},"67":{start:{line:1,column:3635},end:{line:2,column:103}},"68":{start:{line:1,column:3662},end:{line:1,column:3674}},"69":{start:{line:1,column:3692},end:{line:1,column:3697}},"70":{start:{line:1,column:3712},end:{line:1,column:3717}},"71":{start:{line:1,column:3732},end:{line:1,column:3735}},"72":{start:{line:1,column:3743},end:{line:1,column:3776}},"73":{start:{line:1,column:3749},end:{line:1,column:3775}},"74":{start:{line:1,column:3788},end:{line:1,column:3915}},"75":{start:{line:1,column:3794},end:{line:1,column:3914}},"76":{start:{line:1,column:3925},end:{line:1,column:3961}},"77":{start:{line:1,column:3931},end:{line:1,column:3960}},"78":{start:{line:1,column:3975},end:{line:1,column:4038}},"79":{start:{line:1,column:3981},end:{line:1,column:4037}},"80":{start:{line:1,column:4049},end:{line:1,column:4090}},"81":{start:{line:1,column:4055},end:{line:1,column:4089}},"82":{start:{line:1,column:4102},end:{line:1,column:4161}},"83":{start:{line:1,column:4179},end:{line:1,column:4208}},"84":{start:{line:1,column:4191},end:{line:1,column:4207}},"85":{start:{line:1,column:4226},end:{line:2,column:90}},"86":{start:{line:1,column:6856},end:{line:1,column:7611}},"87":{start:{line:1,column:7281},end:{line:1,column:7610}},"88":{start:{line:2,column:91},end:{line:2,column:99}},"89":{start:{line:2,column:111},end:{line:2,column:134}},"90":{start:{line:2,column:118},end:{line:2,column:134}},"91":{start:{line:2,column:152},end:{line:2,column:298}},"92":{start:{line:2,column:166},end:{line:2,column:169}},"93":{start:{line:2,column:170},end:{line:2,column:297}},"94":{start:{line:2,column:208},end:{line:2,column:213}},"95":{start:{line:2,column:219},end:{line:2,column:222}},"96":{start:{line:2,column:225},end:{line:2,column:228}},"97":{start:{line:2,column:229},end:{line:2,column:267}},"98":{start:{line:2,column:316},end:{line:2,column:491}},"99":{start:{line:2,column:330},end:{line:2,column:333}},"100":{start:{line:2,column:334},end:{line:2,column:490}},"101":{start:{line:2,column:430},end:{line:2,column:435}},"102":{start:{line:2,column:441},end:{line:2,column:445}},"103":{start:{line:2,column:446},end:{line:2,column:482}},"104":{start:{line:2,column:491},end:{line:2,column:696}},"105":{start:{line:2,column:505},end:{line:2,column:516}},"106":{start:{line:2,column:519},end:{line:2,column:527}},"107":{start:{line:2,column:530},end:{line:2,column:534}},"108":{start:{line:2,column:535},end:{line:2,column:695}},"109":{start:{line:2,column:714},end:{line:2,column:802}},"110":{start:{line:2,column:775},end:{line:2,column:778}},"111":{start:{line:2,column:779},end:{line:2,column:801}},"112":{start:{line:2,column:820},end:{line:2,column:950}},"113":{start:{line:2,column:968},end:{line:2,column:1255}},"114":{start:{line:2,column:1122},end:{line:2,column:1123}},"115":{start:{line:2,column:1126},end:{line:2,column:1129}},"116":{start:{line:2,column:1130},end:{line:2,column:1254}},"117":{start:{line:2,column:1273},end:{line:2,column:1409}},"118":{start:{line:2,column:1427},end:{line:2,column:1529}},"119":{start:{line:2,column:1502},end:{line:2,column:1505}},"120":{start:{line:2,column:1506},end:{line:2,column:1528}},"121":{start:{line:2,column:1537},end:{line:3,column:103}},"122":{start:{line:2,column:1571},end:{line:2,column:1575}},"123":{start:{line:2,column:1582},end:{line:2,column:1586}},"124":{start:{line:2,column:1591},end:{line:2,column:1619}},"125":{start:{line:2,column:1647},end:{line:2,column:1741}},"126":{start:{line:2,column:1689},end:{line:2,column:1703}},"127":{start:{line:2,column:1704},end:{line:2,column:1738}},"128":{start:{line:2,column:1755},end:{line:2,column:1762}},"129":{start:{line:2,column:1788},end:{line:2,column:1834}},"130":{start:{line:2,column:1862},end:{line:2,column:1925}},"131":{start:{line:2,column:1948},end:{line:2,column:2010}},"132":{start:{line:2,column:2028},end:{line:2,column:2057}},"133":{start:{line:2,column:2040},end:{line:2,column:2056}},"134":{start:{line:2,column:2075},end:{line:3,column:90}},"135":{start:{line:2,column:5110},end:{line:2,column:5474}},"136":{start:{line:2,column:5439},end:{line:2,column:5473}},"137":{start:{line:3,column:91},end:{line:3,column:99}}},fnMap:{"0":{name:"(anonymous_0)",decl:{start:{line:1,column:801},end:{line:1,column:802}},loc:{start:{line:1,column:805},end:{line:1,column:2277}},line:1},"1":{name:"(anonymous_1)",decl:{start:{line:1,column:905},end:{line:1,column:906}},loc:{start:{line:1,column:930},end:{line:1,column:1190}},line:1},"2":{name:"(anonymous_2)",decl:{start:{line:1,column:985},end:{line:1,column:986}},loc:{start:{line:1,column:988},end:{line:1,column:1187}},line:1},"3":{name:"(anonymous_3)",decl:{start:{line:1,column:1128},end:{line:1,column:1129}},loc:{start:{line:1,column:1137},end:{line:1,column:1184}},line:1},"4":{name:"(anonymous_4)",decl:{start:{line:1,column:1190},end:{line:1,column:1191}},loc:{start:{line:1,column:1216},end:{line:1,column:1377}},line:1},"5":{name:"(anonymous_5)",decl:{start:{line:1,column:1337},end:{line:1,column:1338}},loc:{start:{line:1,column:1340},end:{line:1,column:1361}},line:1},"6":{name:"(anonymous_6)",decl:{start:{line:1,column:1365},end:{line:1,column:1366}},loc:{start:{line:1,column:1369},end:{line:1,column:1374}},line:1},"7":{name:"(anonymous_7)",decl:{start:{line:1,column:1377},end:{line:1,column:1378}},loc:{start:{line:1,column:1405},end:{line:1,column:1568}},line:1},"8":{name:"(anonymous_8)",decl:{start:{line:1,column:1528},end:{line:1,column:1529}},loc:{start:{line:1,column:1531},end:{line:1,column:1552}},line:1},"9":{name:"(anonymous_9)",decl:{start:{line:1,column:1556},end:{line:1,column:1557}},loc:{start:{line:1,column:1560},end:{line:1,column:1565}},line:1},"10":{name:"(anonymous_10)",decl:{start:{line:1,column:1568},end:{line:1,column:1569}},loc:{start:{line:1,column:1600},end:{line:1,column:1690}},line:1},"11":{name:"(anonymous_11)",decl:{start:{line:1,column:1690},end:{line:1,column:1691}},loc:{start:{line:1,column:1720},end:{line:1,column:2032}},line:1},"12":{name:"(anonymous_12)",decl:{start:{line:1,column:2032},end:{line:1,column:2033}},loc:{start:{line:1,column:2046},end:{line:1,column:2152}},line:1},"13":{name:"(anonymous_13)",decl:{start:{line:1,column:2169},end:{line:1,column:2170}},loc:{start:{line:1,column:2180},end:{line:1,column:2198}},line:1},"14":{name:"(anonymous_14)",decl:{start:{line:1,column:2288},end:{line:1,column:2289}},loc:{start:{line:1,column:2292},end:{line:1,column:3319}},line:1},"15":{name:"(anonymous_15)",decl:{start:{line:1,column:2354},end:{line:1,column:2355}},loc:{start:{line:1,column:2375},end:{line:1,column:2467}},line:1},"16":{name:"(anonymous_16)",decl:{start:{line:1,column:2467},end:{line:1,column:2468}},loc:{start:{line:1,column:2491},end:{line:1,column:2624}},line:1},"17":{name:"(anonymous_17)",decl:{start:{line:1,column:2557},end:{line:1,column:2558}},loc:{start:{line:1,column:2560},end:{line:1,column:2576}},line:1},"18":{name:"(anonymous_18)",decl:{start:{line:1,column:2692},end:{line:1,column:2693}},loc:{start:{line:1,column:2696},end:{line:1,column:2701}},line:1},"19":{name:"(anonymous_19)",decl:{start:{line:1,column:2864},end:{line:1,column:2865}},loc:{start:{line:1,column:2877},end:{line:1,column:3113}},line:1},"20":{name:"(anonymous_20)",decl:{start:{line:1,column:2923},end:{line:1,column:2924}},loc:{start:{line:1,column:2926},end:{line:1,column:2946}},line:1},"21":{name:"(anonymous_21)",decl:{start:{line:1,column:2966},end:{line:1,column:2967}},loc:{start:{line:1,column:2969},end:{line:1,column:2993}},line:1},"22":{name:"(anonymous_22)",decl:{start:{line:1,column:3009},end:{line:1,column:3010}},loc:{start:{line:1,column:3017},end:{line:1,column:3079}},line:1},"23":{name:"(anonymous_23)",decl:{start:{line:1,column:3146},end:{line:1,column:3147}},loc:{start:{line:1,column:3164},end:{line:1,column:3212}},line:1},"24":{name:"(anonymous_24)",decl:{start:{line:1,column:3229},end:{line:1,column:3230}},loc:{start:{line:1,column:3240},end:{line:1,column:3258}},line:1},"25":{name:"fe",decl:{start:{line:1,column:3332},end:{line:1,column:3334}},loc:{start:{line:1,column:3339},end:{line:1,column:3358}},line:1},"26":{name:"ue",decl:{start:{line:1,column:3367},end:{line:1,column:3369}},loc:{start:{line:1,column:3374},end:{line:1,column:3393}},line:1},"27":{name:"ge",decl:{start:{line:1,column:3402},end:{line:1,column:3404}},loc:{start:{line:1,column:3409},end:{line:1,column:3475}},line:1},"28":{name:"he",decl:{start:{line:1,column:3484},end:{line:1,column:3486}},loc:{start:{line:1,column:3491},end:{line:1,column:3628}},line:1},"29":{name:"(anonymous_29)",decl:{start:{line:1,column:3537},end:{line:1,column:3538}},loc:{start:{line:1,column:3547},end:{line:1,column:3586}},line:1},"30":{name:"(anonymous_30)",decl:{start:{line:1,column:3636},end:{line:1,column:3637}},loc:{start:{line:1,column:3640},end:{line:2,column:100}},line:1},"31":{name:"(anonymous_31)",decl:{start:{line:1,column:3745},end:{line:1,column:3746}},loc:{start:{line:1,column:3749},end:{line:1,column:3775}},line:1},"32":{name:"(anonymous_32)",decl:{start:{line:1,column:3790},end:{line:1,column:3791}},loc:{start:{line:1,column:3794},end:{line:1,column:3914}},line:1},"33":{name:"(anonymous_33)",decl:{start:{line:1,column:3927},end:{line:1,column:3928}},loc:{start:{line:1,column:3931},end:{line:1,column:3960}},line:1},"34":{name:"(anonymous_34)",decl:{start:{line:1,column:3977},end:{line:1,column:3978}},loc:{start:{line:1,column:3981},end:{line:1,column:4037}},line:1},"35":{name:"(anonymous_35)",decl:{start:{line:1,column:4051},end:{line:1,column:4052}},loc:{start:{line:1,column:4055},end:{line:1,column:4089}},line:1},"36":{name:"(anonymous_36)",decl:{start:{line:1,column:4091},end:{line:1,column:4092}},loc:{start:{line:1,column:4101},end:{line:1,column:4162}},line:1},"37":{name:"(anonymous_37)",decl:{start:{line:1,column:4179},end:{line:1,column:4180}},loc:{start:{line:1,column:4190},end:{line:1,column:4208}},line:1},"38":{name:"(anonymous_38)",decl:{start:{line:1,column:6842},end:{line:1,column:6843}},loc:{start:{line:1,column:6855},end:{line:1,column:7612}},line:1},"39":{name:"(anonymous_39)",decl:{start:{line:2,column:111},end:{line:2,column:112}},loc:{start:{line:2,column:118},end:{line:2,column:134}},line:2},"40":{name:"ve",decl:{start:{line:2,column:144},end:{line:2,column:146}},loc:{start:{line:2,column:151},end:{line:2,column:299}},line:2},"41":{name:"(anonymous_41)",decl:{start:{line:2,column:197},end:{line:2,column:198}},loc:{start:{line:2,column:207},end:{line:2,column:268}},line:2},"42":{name:"be",decl:{start:{line:2,column:308},end:{line:2,column:310}},loc:{start:{line:2,column:315},end:{line:2,column:697}},line:2},"43":{name:"(anonymous_43)",decl:{start:{line:2,column:418},end:{line:2,column:419}},loc:{start:{line:2,column:429},end:{line:2,column:483}},line:2},"44":{name:"xe",decl:{start:{line:2,column:706},end:{line:2,column:708}},loc:{start:{line:2,column:713},end:{line:2,column:803}},line:2},"45":{name:"Ce",decl:{start:{line:2,column:812},end:{line:2,column:814}},loc:{start:{line:2,column:819},end:{line:2,column:951}},line:2},"46":{name:"ye",decl:{start:{line:2,column:960},end:{line:2,column:962}},loc:{start:{line:2,column:967},end:{line:2,column:1256}},line:2},"47":{name:"we",decl:{start:{line:2,column:1265},end:{line:2,column:1267}},loc:{start:{line:2,column:1272},end:{line:2,column:1410}},line:2},"48":{name:"Se",decl:{start:{line:2,column:1419},end:{line:2,column:1421}},loc:{start:{line:2,column:1426},end:{line:2,column:1530}},line:2},"49":{name:"(anonymous_49)",decl:{start:{line:2,column:1538},end:{line:2,column:1539}},loc:{start:{line:2,column:1542},end:{line:3,column:100}},line:2},"50":{name:"(anonymous_50)",decl:{start:{line:2,column:1679},end:{line:2,column:1680}},loc:{start:{line:2,column:1682},end:{line:2,column:1739}},line:2},"51":{name:"(anonymous_51)",decl:{start:{line:2,column:1763},end:{line:2,column:1764}},loc:{start:{line:2,column:1787},end:{line:2,column:1835}},line:2},"52":{name:"(anonymous_52)",decl:{start:{line:2,column:1835},end:{line:2,column:1836}},loc:{start:{line:2,column:1861},end:{line:2,column:1926}},line:2},"53":{name:"(anonymous_53)",decl:{start:{line:2,column:1926},end:{line:2,column:1927}},loc:{start:{line:2,column:1947},end:{line:2,column:2011}},line:2},"54":{name:"(anonymous_54)",decl:{start:{line:2,column:2028},end:{line:2,column:2029}},loc:{start:{line:2,column:2039},end:{line:2,column:2057}},line:2},"55":{name:"(anonymous_55)",decl:{start:{line:2,column:5096},end:{line:2,column:5097}},loc:{start:{line:2,column:5109},end:{line:2,column:5475}},line:2}},branchMap:{"0":{loc:{start:{line:1,column:989},end:{line:1,column:1008}},type:"if",locations:[{start:{line:1,column:989},end:{line:1,column:1008}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1":{loc:{start:{line:1,column:1340},end:{line:1,column:1361}},type:"cond-expr",locations:[{start:{line:1,column:1357},end:{line:1,column:1358}},{start:{line:1,column:1359},end:{line:1,column:1361}}],line:1},"2":{loc:{start:{line:1,column:1531},end:{line:1,column:1552}},type:"cond-expr",locations:[{start:{line:1,column:1548},end:{line:1,column:1549}},{start:{line:1,column:1550},end:{line:1,column:1552}}],line:1},"3":{loc:{start:{line:1,column:1668},end:{line:1,column:1680}},type:"binary-expr",locations:[{start:{line:1,column:1668},end:{line:1,column:1669}},{start:{line:1,column:1671},end:{line:1,column:1680}}],line:1},"4":{loc:{start:{line:1,column:1727},end:{line:1,column:1758}},type:"cond-expr",locations:[{start:{line:1,column:1749},end:{line:1,column:1753}},{start:{line:1,column:1754},end:{line:1,column:1758}}],line:1},"5":{loc:{start:{line:1,column:1759},end:{line:1,column:1777}},type:"if",locations:[{start:{line:1,column:1759},end:{line:1,column:1777}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"6":{loc:{start:{line:1,column:1868},end:{line:1,column:1873}},type:"cond-expr",locations:[{start:{line:1,column:1870},end:{line:1,column:1871}},{start:{line:1,column:1872},end:{line:1,column:1873}}],line:1},"7":{loc:{start:{line:1,column:1881},end:{line:1,column:2031}},type:"cond-expr",locations:[{start:{line:1,column:1883},end:{line:1,column:2026}},{start:{line:1,column:2027},end:{line:1,column:2031}}],line:1},"8":{loc:{start:{line:1,column:1908},end:{line:1,column:1932}},type:"cond-expr",locations:[{start:{line:1,column:1910},end:{line:1,column:1920}},{start:{line:1,column:1921},end:{line:1,column:1932}}],line:1},"9":{loc:{start:{line:1,column:1946},end:{line:1,column:1981}},type:"cond-expr",locations:[{start:{line:1,column:1948},end:{line:1,column:1950}},{start:{line:1,column:1951},end:{line:1,column:1981}}],line:1},"10":{loc:{start:{line:1,column:1951},end:{line:1,column:1981}},type:"binary-expr",locations:[{start:{line:1,column:1951},end:{line:1,column:1977}},{start:{line:1,column:1979},end:{line:1,column:1981}}],line:1},"11":{loc:{start:{line:1,column:2001},end:{line:1,column:2025}},type:"cond-expr",locations:[{start:{line:1,column:2003},end:{line:1,column:2013}},{start:{line:1,column:2014},end:{line:1,column:2025}}],line:1},"12":{loc:{start:{line:1,column:2054},end:{line:1,column:2151}},type:"cond-expr",locations:[{start:{line:1,column:2083},end:{line:1,column:2084}},{start:{line:1,column:2085},end:{line:1,column:2151}}],line:1},"13":{loc:{start:{line:1,column:2054},end:{line:1,column:2082}},type:"binary-expr",locations:[{start:{line:1,column:2054},end:{line:1,column:2072}},{start:{line:1,column:2074},end:{line:1,column:2082}}],line:1},"14":{loc:{start:{line:1,column:2085},end:{line:1,column:2151}},type:"cond-expr",locations:[{start:{line:1,column:2131},end:{line:1,column:2146}},{start:{line:1,column:2147},end:{line:1,column:2151}}],line:1},"15":{loc:{start:{line:1,column:2085},end:{line:1,column:2130}},type:"binary-expr",locations:[{start:{line:1,column:2085},end:{line:1,column:2102}},{start:{line:1,column:2104},end:{line:1,column:2130}}],line:1},"16":{loc:{start:{line:1,column:2192},end:{line:1,column:2196}},type:"binary-expr",locations:[{start:{line:1,column:2192},end:{line:1,column:2193}},{start:{line:1,column:2195},end:{line:1,column:2196}}],line:1},"17":{loc:{start:{line:1,column:2492},end:{line:1,column:2623}},type:"binary-expr",locations:[{start:{line:1,column:2492},end:{line:1,column:2504}},{start:{line:1,column:2507},end:{line:1,column:2622}}],line:1},"18":{loc:{start:{line:1,column:3192},end:{line:1,column:3211}},type:"cond-expr",locations:[{start:{line:1,column:3208},end:{line:1,column:3209}},{start:{line:1,column:3210},end:{line:1,column:3211}}],line:1},"19":{loc:{start:{line:1,column:3252},end:{line:1,column:3256}},type:"binary-expr",locations:[{start:{line:1,column:3252},end:{line:1,column:3253}},{start:{line:1,column:3255},end:{line:1,column:3256}}],line:1},"20":{loc:{start:{line:1,column:3340},end:{line:1,column:3357}},type:"binary-expr",locations:[{start:{line:1,column:3340},end:{line:1,column:3343}},{start:{line:1,column:3345},end:{line:1,column:3357}}],line:1},"21":{loc:{start:{line:1,column:3375},end:{line:1,column:3392}},type:"binary-expr",locations:[{start:{line:1,column:3375},end:{line:1,column:3378}},{start:{line:1,column:3380},end:{line:1,column:3392}}],line:1},"22":{loc:{start:{line:1,column:3410},end:{line:1,column:3453}},type:"binary-expr",locations:[{start:{line:1,column:3410},end:{line:1,column:3413}},{start:{line:1,column:3415},end:{line:1,column:3453}}],line:1},"23":{loc:{start:{line:1,column:3454},end:{line:1,column:3474}},type:"binary-expr",locations:[{start:{line:1,column:3454},end:{line:1,column:3457}},{start:{line:1,column:3459},end:{line:1,column:3474}}],line:1},"24":{loc:{start:{line:1,column:3492},end:{line:1,column:3627}},type:"if",locations:[{start:{line:1,column:3492},end:{line:1,column:3627}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"25":{loc:{start:{line:1,column:3794},end:{line:1,column:3914}},type:"cond-expr",locations:[{start:{line:1,column:3837},end:{line:1,column:3839}},{start:{line:1,column:3840},end:{line:1,column:3914}}],line:1},"26":{loc:{start:{line:1,column:3981},end:{line:1,column:4037}},type:"binary-expr",locations:[{start:{line:1,column:3981},end:{line:1,column:4010}},{start:{line:1,column:4012},end:{line:1,column:4037}}],line:1},"27":{loc:{start:{line:1,column:4202},end:{line:1,column:4206}},type:"binary-expr",locations:[{start:{line:1,column:4202},end:{line:1,column:4203}},{start:{line:1,column:4205},end:{line:1,column:4206}}],line:1},"28":{loc:{start:{line:1,column:6856},end:{line:1,column:7611}},type:"if",locations:[{start:{line:1,column:6856},end:{line:1,column:7611}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"29":{loc:{start:{line:1,column:6859},end:{line:1,column:7269}},type:"binary-expr",locations:[{start:{line:1,column:6859},end:{line:1,column:6862}},{start:{line:1,column:6865},end:{line:1,column:7268}}],line:1},"30":{loc:{start:{line:1,column:7425},end:{line:1,column:7443}},type:"cond-expr",locations:[{start:{line:1,column:7440},end:{line:1,column:7441}},{start:{line:1,column:7442},end:{line:1,column:7443}}],line:1},"31":{loc:{start:{line:1,column:7452},end:{line:1,column:7474}},type:"cond-expr",locations:[{start:{line:1,column:7469},end:{line:1,column:7471}},{start:{line:1,column:7472},end:{line:1,column:7474}}],line:1},"32":{loc:{start:{line:1,column:7583},end:{line:1,column:7609}},type:"cond-expr",locations:[{start:{line:1,column:7604},end:{line:1,column:7606}},{start:{line:1,column:7607},end:{line:1,column:7609}}],line:1},"33":{loc:{start:{line:2,column:152},end:{line:2,column:298}},type:"if",locations:[{start:{line:2,column:152},end:{line:2,column:298}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:2},"34":{loc:{start:{line:2,column:316},end:{line:2,column:491}},type:"if",locations:[{start:{line:2,column:316},end:{line:2,column:491}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:2},"35":{loc:{start:{line:2,column:491},end:{line:2,column:696}},type:"if",locations:[{start:{line:2,column:491},end:{line:2,column:696}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:2},"36":{loc:{start:{line:2,column:631},end:{line:2,column:670}},type:"binary-expr",locations:[{start:{line:2,column:631},end:{line:2,column:666}},{start:{line:2,column:668},end:{line:2,column:670}}],line:2},"37":{loc:{start:{line:2,column:714},end:{line:2,column:802}},type:"if",locations:[{start:{line:2,column:714},end:{line:2,column:802}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:2},"38":{loc:{start:{line:2,column:717},end:{line:2,column:763}},type:"binary-expr",locations:[{start:{line:2,column:717},end:{line:2,column:720}},{start:{line:2,column:723},end:{line:2,column:762}}],line:2},"39":{loc:{start:{line:2,column:820},end:{line:2,column:950}},type:"binary-expr",locations:[{start:{line:2,column:820},end:{line:2,column:823}},{start:{line:2,column:826},end:{line:2,column:949}}],line:2},"40":{loc:{start:{line:2,column:968},end:{line:2,column:1255}},type:"if",locations:[{start:{line:2,column:968},end:{line:2,column:1255}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:2},"41":{loc:{start:{line:2,column:971},end:{line:2,column:1110}},type:"binary-expr",locations:[{start:{line:2,column:971},end:{line:2,column:974}},{start:{line:2,column:977},end:{line:2,column:1109}}],line:2},"42":{loc:{start:{line:2,column:1188},end:{line:2,column:1217}},type:"cond-expr",locations:[{start:{line:2,column:1213},end:{line:2,column:1214}},{start:{line:2,column:1215},end:{line:2,column:1217}}],line:2},"43":{loc:{start:{line:2,column:1225},end:{line:2,column:1253}},type:"cond-expr",locations:[{start:{line:2,column:1250},end:{line:2,column:1251}},{start:{line:2,column:1252},end:{line:2,column:1253}}],line:2},"44":{loc:{start:{line:2,column:1273},end:{line:2,column:1409}},type:"binary-expr",locations:[{start:{line:2,column:1273},end:{line:2,column:1276}},{start:{line:2,column:1279},end:{line:2,column:1408}}],line:2},"45":{loc:{start:{line:2,column:1427},end:{line:2,column:1529}},type:"if",locations:[{start:{line:2,column:1427},end:{line:2,column:1529}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:2},"46":{loc:{start:{line:2,column:1430},end:{line:2,column:1490}},type:"binary-expr",locations:[{start:{line:2,column:1430},end:{line:2,column:1433}},{start:{line:2,column:1436},end:{line:2,column:1489}}],line:2},"47":{loc:{start:{line:2,column:1711},end:{line:2,column:1738}},type:"cond-expr",locations:[{start:{line:2,column:1732},end:{line:2,column:1733}},{start:{line:2,column:1734},end:{line:2,column:1738}}],line:2},"48":{loc:{start:{line:2,column:1711},end:{line:2,column:1731}},type:"binary-expr",locations:[{start:{line:2,column:1711},end:{line:2,column:1712}},{start:{line:2,column:1714},end:{line:2,column:1731}}],line:2},"49":{loc:{start:{line:2,column:1955},end:{line:2,column:2010}},type:"cond-expr",locations:[{start:{line:2,column:1961},end:{line:2,column:1983}},{start:{line:2,column:1984},end:{line:2,column:2010}}],line:2},"50":{loc:{start:{line:2,column:2051},end:{line:2,column:2055}},type:"binary-expr",locations:[{start:{line:2,column:2051},end:{line:2,column:2052}},{start:{line:2,column:2054},end:{line:2,column:2055}}],line:2},"51":{loc:{start:{line:2,column:5110},end:{line:2,column:5474}},type:"if",locations:[{start:{line:2,column:5110},end:{line:2,column:5474}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:2},"52":{loc:{start:{line:2,column:5113},end:{line:2,column:5427}},type:"binary-expr",locations:[{start:{line:2,column:5113},end:{line:2,column:5116}},{start:{line:2,column:5119},end:{line:2,column:5426}}],line:2},"53":{loc:{start:{line:2,column:5447},end:{line:2,column:5470}},type:"cond-expr",locations:[{start:{line:2,column:5465},end:{line:2,column:5467}},{start:{line:2,column:5468},end:{line:2,column:5470}}],line:2}},s:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"116":0,"117":0,"118":0,"119":0,"120":0,"121":0,"122":0,"123":0,"124":0,"125":0,"126":0,"127":0,"128":0,"129":0,"130":0,"131":0,"132":0,"133":0,"134":0,"135":0,"136":0,"137":0},f:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0},b:{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0],"9":[0,0],"10":[0,0],"11":[0,0],"12":[0,0],"13":[0,0],"14":[0,0],"15":[0,0],"16":[0,0],"17":[0,0],"18":[0,0],"19":[0,0],"20":[0,0],"21":[0,0],"22":[0,0],"23":[0,0],"24":[0,0],"25":[0,0],"26":[0,0],"27":[0,0],"28":[0,0],"29":[0,0],"30":[0,0],"31":[0,0],"32":[0,0],"33":[0,0],"34":[0,0],"35":[0,0],"36":[0,0],"37":[0,0],"38":[0,0],"39":[0,0],"40":[0,0],"41":[0,0],"42":[0,0],"43":[0,0],"44":[0,0],"45":[0,0],"46":[0,0],"47":[0,0],"48":[0,0],"49":[0,0],"50":[0,0],"51":[0,0],"52":[0,0],"53":[0,0]},inputSourceMap:{version:3,sources:["src/app/core/notification/services/notification-api.service.ts","src/app/features/notification/services/notification.service.ts","src/app/features/notification/components/notification-item-component/notification-item-component.ts","src/app/features/notification/components/notification-item-component/notification-item-component.html","src/app/features/notification/components/notification-page-component/notification-page-component.ts","src/app/features/notification/components/notification-page-component/notification-page-component.html"],sourcesContent:["import { HttpClient } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\nimport { Observable, catchError, forkJoin, map, of, switchMap, take } from 'rxjs';\nimport { InternalAuthService } from '../../services/internal-auth.service';\nimport { NotificationEvent } from '../../../features/notification/models/notification-event.model';\nimport { API_BASE_URL } from '../../tokens/api-base-url.token';\nimport {\n DEFAULT_RESOLVED_NOTIFICATION_TITLE,\n DEFAULT_TRIGGERED_NOTIFICATION_TITLE,\n formatTriggeredNotificationTitle,\n} from '../utils/notification-title.util';\n\ninterface AlarmEventHistoryDto {\n id?: unknown;\n activationTime?: unknown;\n resolutionTime?: unknown;\n alarmName?: unknown;\n priority?: unknown;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class NotificationApiService {\n private readonly http = inject(HttpClient);\n private readonly baseUrl: string = inject(API_BASE_URL);\n private readonly authService = inject(InternalAuthService);\n\n private static readonly HISTORY_LIMIT = 100;\n private static readonly HISTORY_OFFSET = 0;\n\n public getNotificationsHistory(): Observable {\n return this.authService.getCurrentUser$().pipe(\n take(1),\n switchMap((session) => {\n if (!session) {\n return of([]);\n }\n\n const encodedUserId = encodeURIComponent(session.userId);\n\n return forkJoin([\n this.fetchManagedAlarmEvents(encodedUserId),\n this.fetchUnmanagedAlarmEvents(encodedUserId),\n ]).pipe(\n map(([managedEvents, unmanagedEvents]) =>\n this.mapAlarmEventsToNotifications([...managedEvents, ...unmanagedEvents])\n )\n );\n })\n );\n }\n\n private fetchManagedAlarmEvents(encodedUserId: string): Observable {\n const endpoint = `${this.baseUrl}/alarm-events/managed/${encodedUserId}/${NotificationApiService.HISTORY_LIMIT}/${NotificationApiService.HISTORY_OFFSET}`;\n\n return this.http.get(endpoint).pipe(\n map((response) => (Array.isArray(response) ? response : [])),\n catchError(() => of([]))\n );\n }\n\n private fetchUnmanagedAlarmEvents(encodedUserId: string): Observable {\n const endpoint = `${this.baseUrl}/alarm-events/unmanaged/${encodedUserId}/${NotificationApiService.HISTORY_LIMIT}/${NotificationApiService.HISTORY_OFFSET}`;\n\n return this.http.get(endpoint).pipe(\n map((response) => (Array.isArray(response) ? response : [])),\n catchError(() => of([]))\n );\n }\n\n private mapAlarmEventsToNotifications(alarmEvents: ReadonlyArray): NotificationEvent[] {\n const notifications: NotificationEvent[] = [];\n\n for (const alarmEvent of alarmEvents) {\n const mappedNotification = this.mapAlarmEventToNotification(alarmEvent);\n if (mappedNotification) {\n notifications.push(mappedNotification);\n }\n }\n\n return notifications;\n }\n\n private mapAlarmEventToNotification(alarmEvent: AlarmEventHistoryDto): NotificationEvent | null {\n const alarmEventId = typeof alarmEvent.id === 'string' ? alarmEvent.id : null;\n if (!alarmEventId) {\n return null;\n }\n\n const activationTime = this.toIsoString(alarmEvent.activationTime);\n const resolutionTime = this.toIsoString(alarmEvent.resolutionTime);\n const isResolved = resolutionTime !== null;\n const sentAt = isResolved ? resolutionTime : activationTime;\n\n if (!sentAt) {\n return null;\n }\n\n return {\n notificationId: `alarm-${isResolved ? 'resolved' : 'triggered'}-${alarmEventId}`,\n title: isResolved\n ? DEFAULT_RESOLVED_NOTIFICATION_TITLE\n : formatTriggeredNotificationTitle(alarmEvent.alarmName, alarmEvent.priority) || DEFAULT_TRIGGERED_NOTIFICATION_TITLE,\n sentAt,\n eventType: isResolved ? 'resolved' : 'triggered',\n };\n }\n\n private toIsoString(value: unknown): string | null {\n if (typeof value === 'string' && value.trim()) {\n return value;\n }\n\n if (value instanceof Date && !Number.isNaN(value.getTime())) {\n return value.toISOString();\n }\n\n return null;\n }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { combineLatest, catchError, map, Observable, of, shareReplay } from 'rxjs';\nimport { AlarmStateService } from '../../../core/alarm/services/alarm-state.service';\nimport { NotificationApiService } from '../../../core/notification/services/notification-api.service';\nimport { NotificationEvent } from '../models/notification-event.model';\nimport { NotificationListVm } from '../models/notification-list-vm.model';\n\n// Nasconde la complessit\xE0 della composizione tra le sorgenti di dati dietro\n// un'interfaccia minimale: un unico campo pubblico `vm$`. Il componente smart\n// non conosce n\xE9 la provenienza dei dati n\xE9 la logica di fusione.\n\n// **Perch\xE9 \xE8 component-scoped:** `NotificationService` mantiene sottoscrizioni\n// attive verso `AlarmStateService` tramite `combineLatest`. Legarne il ciclo\n// di vita al componente garantisce che queste sottoscrizioni vengano terminate\n// automaticamente quando `NotificationPageComponent` viene distrutto (navigazione\n// verso un'altra route), senza necessit\xE0 di `ngOnDestroy` n\xE9 di\n// `takeUntilDestroyed`. Angular gestisce tutto tramite il suo injector locale.\n\n\n@Injectable()\nexport class NotificationService {\n private readonly alarmStateService = inject(AlarmStateService);\n private readonly notificationApiService = inject(NotificationApiService);\n\n public removeNotification(notificationId: string): void {\n this.alarmStateService.dismissNotification(notificationId);\n this.alarmStateService.removeNotification(notificationId);\n }\n\n public clearAllNotifications(notifications: ReadonlyArray): void {\n if (notifications.length === 0) {\n return;\n }\n\n this.alarmStateService.dismissNotifications(\n notifications.map((notification) => notification.notificationId)\n );\n this.alarmStateService.clearNotifications();\n }\n\n public readonly vm$: Observable = combineLatest([\n this.notificationApiService\n .getNotificationsHistory()\n .pipe(catchError(() => of([]))),\n this.alarmStateService.getNotifications$(),\n this.alarmStateService.getUnreadNotificationsCount$(),\n this.alarmStateService.getDismissedNotificationIds$(),\n ]).pipe(\n map(([historic, inSession, unreadCount, dismissedNotificationIds]): NotificationListVm => {\n const merged = [...historic, ...inSession];\n const deduped = Array.from(\n new Map(merged.map((notification) => [notification.notificationId, notification])).values()\n ).filter((notification) => !dismissedNotificationIds.has(notification.notificationId));\n\n deduped.sort(\n (left, right) =>\n this.toUnixTimestamp(right.sentAt) - this.toUnixTimestamp(left.sentAt)\n );\n\n return {\n notifications: deduped,\n unreadCount,\n };\n }),\n\n\n shareReplay({ bufferSize: 1, refCount: false })\n );\n\n private toUnixTimestamp(dateValue: string): number {\n const timestamp = Date.parse(dateValue);\n return Number.isNaN(timestamp) ? 0 : timestamp;\n }\n}","import { ChangeDetectionStrategy, Component, computed, input, output } from '@angular/core';\nimport { NotificationEvent } from '../../models/notification-event.model';\nimport { ElapsedTimePipe } from '../../../../shared/pipes/elapsed-time.pipe';\nimport { AlarmPriorityIndicatorComponent } from '../../../../shared/components/alarm-table/alarm-priority-indicator.component';\nimport {\n extractPriorityFromNotificationTitle,\n stripPriorityFromNotificationTitle,\n} from '../../../../core/notification/utils/notification-priority-display.util';\n\n@Component({\n selector: 'app-notification-item-component',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [ElapsedTimePipe, AlarmPriorityIndicatorComponent],\n templateUrl: './notification-item-component.html',\n styleUrl: './notification-item-component.css',\n})\nexport class NotificationItemComponent {\n public readonly notification = input.required();\n public readonly showRemoveAction = input(false);\n public readonly isHighlighted = input(false);\n public readonly removeClicked = output();\n public readonly sentAt = computed(() => this.notification().sentAt);\n public readonly isResolved = computed(() => {\n const eventType = this.notification().eventType;\n if (eventType === 'resolved') {\n return true;\n }\n\n return this.notification().title.trim().toLowerCase().includes('allarme risolto');\n });\n public readonly priority = computed(() =>\n extractPriorityFromNotificationTitle(this.notification().title)\n );\n public readonly displayTitle = computed(() =>\n stripPriorityFromNotificationTitle(this.notification().title) || this.notification().title\n );\n public readonly ariaLabel = computed(() => `Notifica: ${this.displayTitle()}`);\n\n public onRemove(): void {\n this.removeClicked.emit(this.notification().notificationId);\n }\n}","\n @if (isResolved()) {\n
\n } @else {\n
\n }\n\n
\n \n \n \n \n
\n\n
\n
\n
\n @if (priority(); as notificationPriority) {\n \n }\n\n

\n {{ displayTitle() }}\n

\n
\n\n
\n \n {{ sentAt() | elapsedTime }}\n \n\n @if (showRemoveAction()) {\n \n \n \n \n \n }\n
\n
\n\n

\n Notifica di sistema registrata nel feed del reparto.\n

\n
\n \n","import { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, inject } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { NotificationListVm } from '../../models/notification-list-vm.model';\nimport { NotificationService } from '../../services/notification.service';\nimport { NotificationItemComponent } from '../notification-item-component/notification-item-component';\nimport { Observable, map } from 'rxjs';\n\n@Component({\n selector: 'app-notification-page-component',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AsyncPipe, NotificationItemComponent],\n providers: [NotificationService],\n templateUrl: './notification-page-component.html',\n styleUrl: './notification-page-component.css',\n})\nexport class NotificationPageComponent {\n private readonly notificationService = inject(NotificationService);\n private readonly route = inject(ActivatedRoute);\n\n public readonly vm$: Observable = this.notificationService.vm$;\n public readonly highlightedNotificationId$: Observable = this.route.queryParamMap.pipe(\n map((params) => {\n const focusedId = params.get('focus');\n return focusedId && focusedId.trim().length > 0 ? focusedId : null;\n })\n );\n public readonly skeletonRows = [0, 1, 2];\n\n public onNotificationRemoved(notificationId: string): void {\n this.notificationService.removeNotification(notificationId);\n }\n\n public onClearAllNotifications(vm: NotificationListVm): void {\n this.notificationService.clearAllNotifications(vm.notifications);\n }\n\n public unreadSummaryLabel(unreadCount: number): string {\n if (unreadCount === 1) {\n return '1 notifica non letta';\n }\n\n return `${unreadCount} notifiche non lette`;\n }\n}","\n
\n \n
\n
\n

CENTRO AVVISI\n

\n

\n Notifiche\n

\n

\n Cronologia degli avvisi ricevuti in tempo reale, relativi agli allarmi scattati.\n

\n
\n
\n \n\n @if (vm$ | async; as vm) {\n
\n
\n \n \n {{ unreadSummaryLabel(vm.unreadCount) }}\n \n\n @if (vm.notifications.length > 0) {\n \n Cancella tutte\n \n }\n
\n\n @if (vm.notifications.length > 0) {\n
    \n @for (notification of vm.notifications; track notification.notificationId; let index = $index) {\n
  • \n \n
  • \n }\n
\n } @else {\n \n
\n \n \n \n
\n\n

Nessuna notifica\n disponibile

\n
\n }\n
\n } @else {\n
\n
\n @for (skeleton of skeletonRows; track skeleton) {\n \n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n }\n
\n \n }\n \n"],mappings:"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",names:["NotificationApiService","http","inject","HttpClient","baseUrl","API_BASE_URL","authService","InternalAuthService","HISTORY_LIMIT","HISTORY_OFFSET","getNotificationsHistory","getCurrentUser$","pipe","take","switchMap","session","of","encodedUserId","encodeURIComponent","userId","forkJoin","fetchManagedAlarmEvents","fetchUnmanagedAlarmEvents","map","managedEvents","unmanagedEvents","mapAlarmEventsToNotifications","endpoint","get","response","Array","isArray","catchError","alarmEvents","notifications","alarmEvent","mappedNotification","mapAlarmEventToNotification","push","alarmEventId","id","activationTime","toIsoString","resolutionTime","isResolved","sentAt","notificationId","title","DEFAULT_RESOLVED_NOTIFICATION_TITLE","formatTriggeredNotificationTitle","alarmName","priority","DEFAULT_TRIGGERED_NOTIFICATION_TITLE","eventType","value","trim","Date","Number","isNaN","getTime","toISOString","factory","\u0275fac","providedIn","NotificationService","alarmStateService","inject","AlarmStateService","notificationApiService","NotificationApiService","removeNotification","notificationId","dismissNotification","clearAllNotifications","notifications","length","dismissNotifications","map","notification","clearNotifications","vm$","combineLatest","getNotificationsHistory","pipe","catchError","of","getNotifications$","getUnreadNotificationsCount$","getDismissedNotificationIds$","historic","inSession","unreadCount","dismissedNotificationIds","merged","deduped","Array","from","Map","values","filter","has","sort","left","right","toUnixTimestamp","sentAt","shareReplay","bufferSize","refCount","dateValue","timestamp","Date","parse","Number","isNaN","factory","\u0275fac","\u0275\u0275element","\u0275\u0275property","ctx","\u0275\u0275elementStart","\u0275\u0275listener","\u0275\u0275restoreView","_r1","ctx_r1","\u0275\u0275nextContext","\u0275\u0275resetView","onRemove","\u0275\u0275elementEnd","NotificationItemComponent","notification","input","required","showRemoveAction","isHighlighted","removeClicked","output","sentAt","computed","isResolved","eventType","title","trim","toLowerCase","includes","priority","extractPriorityFromNotificationTitle","displayTitle","stripPriorityFromNotificationTitle","ariaLabel","emit","notificationId","selectors","inputs","outputs","decls","vars","consts","template","rf","\u0275\u0275conditionalCreate","NotificationItemComponent_Conditional_1_Template","NotificationItemComponent_Conditional_2_Template","NotificationItemComponent_Conditional_10_Template","\u0275\u0275text","NotificationItemComponent_Conditional_17_Template","\u0275\u0275classProp","\u0275\u0275advance","\u0275\u0275conditional","tmp_4_0","\u0275\u0275textInterpolate1","\u0275\u0275pipeBind1","AlarmPriorityIndicatorComponent","ElapsedTimePipe","styles","changeDetection","\u0275\u0275elementStart","\u0275\u0275listener","\u0275\u0275restoreView","_r1","vm_r2","\u0275\u0275nextContext","ctx_r2","\u0275\u0275resetView","onClearAllNotifications","\u0275\u0275text","\u0275\u0275elementEnd","$event","_r4","onNotificationRemoved","\u0275\u0275styleProp","\u0275$index_38_r6","\u0275\u0275advance","\u0275\u0275property","notification_r5","notificationId","\u0275\u0275pipeBind1","highlightedNotificationId$","\u0275\u0275repeaterCreate","NotificationPageComponent_Conditional_11_Conditional_6_For_2_Template","_forTrack0","\u0275\u0275repeater","notifications","\u0275\u0275element","\u0275\u0275conditionalCreate","NotificationPageComponent_Conditional_11_Conditional_5_Template","NotificationPageComponent_Conditional_11_Conditional_6_Template","NotificationPageComponent_Conditional_11_Conditional_7_Template","\u0275\u0275textInterpolate1","unreadSummaryLabel","unreadCount","\u0275\u0275conditional","length","NotificationPageComponent_Conditional_13_For_3_Template","\u0275\u0275repeaterTrackByIdentity","skeletonRows","NotificationPageComponent","notificationService","inject","NotificationService","route","ActivatedRoute","vm$","queryParamMap","pipe","map","params","focusedId","get","trim","removeNotification","vm","clearAllNotifications","selectors","features","\u0275\u0275ProvidersFeature","decls","vars","consts","template","rf","ctx","NotificationPageComponent_Conditional_11_Template","\u0275\u0275conditionalBranchCreate","NotificationPageComponent_Conditional_13_Template","tmp_0_0","NotificationItemComponent","AsyncPipe","styles","changeDetection"]},_coverageSchema:"1a1c01bbd47fc00a2c39e90264f33305004495a9",hash:"79723cd35d546aaf8f1d64a3386610579bc52253"};var coverage=global[gcv]||(global[gcv]={});if(!coverage[path]||coverage[path].hash!==hash){coverage[path]=coverageData;}var actualCoverage=coverage[path];{// @ts-ignore +cov_139b6x6lz3=function(){return actualCoverage;};}return actualCoverage;}cov_139b6x6lz3();import{a as ne,b as oe,c as ae}from"./chunk-WCZEJQCH.js";import{a as re,b as le}from"./chunk-HZRH6ESN.js";import{c as Z}from"./chunk-FYGTVJAL.js";import{a as me}from"./chunk-O5PEFBSV.js";import{a as ce}from"./chunk-V5PG7NSI.js";import{a as ee}from"./chunk-CX4DL26R.js";import"./chunk-ZZLQRDHJ.js";import{b as ie}from"./chunk-65RKWSY3.js";import{b as Q,e as te}from"./chunk-2S5V5XEE.js";import{h as W}from"./chunk-F6OGAIBI.js";import{$a as q,Ab as s,Cb as I,D as Y,F as B,Fb as J,Ib as M,Jb as A,Ka as P,L as E,Pb as b,Q as d,Sb as K,Tb as R,V as y,W as w,Wa as $,X as S,Y as k,Ya as u,Za as G,_a as g,ab as D,bb as L,cb as O,db as o,eb as a,fb as m,h as v,jb as T,m as f,n as j,nb as N,pb as p,s as H,w as C,wa as c,xb as X,y as V,yb as z}from"./chunk-RYTNMYZW.js";import"./chunk-VCZGUBMY.js";var se=(cov_139b6x6lz3().s[0]++,(()=>{cov_139b6x6lz3().f[0]++;class t{http=(cov_139b6x6lz3().s[1]++,d(Q));baseUrl=(cov_139b6x6lz3().s[2]++,d(te));authService=(cov_139b6x6lz3().s[3]++,d(ie));static HISTORY_LIMIT=(cov_139b6x6lz3().s[4]++,100);static HISTORY_OFFSET=(cov_139b6x6lz3().s[5]++,0);getNotificationsHistory(){cov_139b6x6lz3().f[1]++;cov_139b6x6lz3().s[6]++;return this.authService.getCurrentUser$().pipe(V(1),B(e=>{cov_139b6x6lz3().f[2]++;cov_139b6x6lz3().s[7]++;if(!e){cov_139b6x6lz3().b[0][0]++;cov_139b6x6lz3().s[8]++;return v([]);}else{cov_139b6x6lz3().b[0][1]++;}let i=(cov_139b6x6lz3().s[9]++,encodeURIComponent(e.userId));cov_139b6x6lz3().s[10]++;return H([this.fetchManagedAlarmEvents(i),this.fetchUnmanagedAlarmEvents(i)]).pipe(f(([n,r])=>{cov_139b6x6lz3().f[3]++;cov_139b6x6lz3().s[11]++;return this.mapAlarmEventsToNotifications([...n,...r]);}));}));}fetchManagedAlarmEvents(e){cov_139b6x6lz3().f[4]++;let i=(cov_139b6x6lz3().s[12]++,`${this.baseUrl}/alarm-events/managed/${e}/${t.HISTORY_LIMIT}/${t.HISTORY_OFFSET}`);cov_139b6x6lz3().s[13]++;return this.http.get(i).pipe(f(n=>{cov_139b6x6lz3().f[5]++;cov_139b6x6lz3().s[14]++;return Array.isArray(n)?(cov_139b6x6lz3().b[1][0]++,n):(cov_139b6x6lz3().b[1][1]++,[]);}),C(()=>{cov_139b6x6lz3().f[6]++;cov_139b6x6lz3().s[15]++;return v([]);}));}fetchUnmanagedAlarmEvents(e){cov_139b6x6lz3().f[7]++;let i=(cov_139b6x6lz3().s[16]++,`${this.baseUrl}/alarm-events/unmanaged/${e}/${t.HISTORY_LIMIT}/${t.HISTORY_OFFSET}`);cov_139b6x6lz3().s[17]++;return this.http.get(i).pipe(f(n=>{cov_139b6x6lz3().f[8]++;cov_139b6x6lz3().s[18]++;return Array.isArray(n)?(cov_139b6x6lz3().b[2][0]++,n):(cov_139b6x6lz3().b[2][1]++,[]);}),C(()=>{cov_139b6x6lz3().f[9]++;cov_139b6x6lz3().s[19]++;return v([]);}));}mapAlarmEventsToNotifications(e){cov_139b6x6lz3().f[10]++;let i=(cov_139b6x6lz3().s[20]++,[]);cov_139b6x6lz3().s[21]++;for(let n of e){let r=(cov_139b6x6lz3().s[22]++,this.mapAlarmEventToNotification(n));cov_139b6x6lz3().s[23]++;(cov_139b6x6lz3().b[3][0]++,r)&&(cov_139b6x6lz3().b[3][1]++,i.push(r));}cov_139b6x6lz3().s[24]++;return i;}mapAlarmEventToNotification(e){cov_139b6x6lz3().f[11]++;let i=(cov_139b6x6lz3().s[25]++,typeof e.id=="string"?(cov_139b6x6lz3().b[4][0]++,e.id):(cov_139b6x6lz3().b[4][1]++,null));cov_139b6x6lz3().s[26]++;if(!i){cov_139b6x6lz3().b[5][0]++;cov_139b6x6lz3().s[27]++;return null;}else{cov_139b6x6lz3().b[5][1]++;}let n=(cov_139b6x6lz3().s[28]++,this.toIsoString(e.activationTime)),r=(cov_139b6x6lz3().s[29]++,this.toIsoString(e.resolutionTime)),h=(cov_139b6x6lz3().s[30]++,r!==null),x=(cov_139b6x6lz3().s[31]++,h?(cov_139b6x6lz3().b[6][0]++,r):(cov_139b6x6lz3().b[6][1]++,n));cov_139b6x6lz3().s[32]++;return x?(cov_139b6x6lz3().b[7][0]++,{notificationId:`alarm-${h?(cov_139b6x6lz3().b[8][0]++,"resolved"):(cov_139b6x6lz3().b[8][1]++,"triggered")}-${i}`,title:h?(cov_139b6x6lz3().b[9][0]++,oe):(cov_139b6x6lz3().b[9][1]++,(cov_139b6x6lz3().b[10][0]++,ae(e.alarmName,e.priority))||(cov_139b6x6lz3().b[10][1]++,ne)),sentAt:x,eventType:h?(cov_139b6x6lz3().b[11][0]++,"resolved"):(cov_139b6x6lz3().b[11][1]++,"triggered")}):(cov_139b6x6lz3().b[7][1]++,null);}toIsoString(e){cov_139b6x6lz3().f[12]++;cov_139b6x6lz3().s[33]++;return(cov_139b6x6lz3().b[13][0]++,typeof e=="string")&&(cov_139b6x6lz3().b[13][1]++,e.trim())?(cov_139b6x6lz3().b[12][0]++,e):(cov_139b6x6lz3().b[12][1]++,(cov_139b6x6lz3().b[15][0]++,e instanceof Date)&&(cov_139b6x6lz3().b[15][1]++,!Number.isNaN(e.getTime()))?(cov_139b6x6lz3().b[14][0]++,e.toISOString()):(cov_139b6x6lz3().b[14][1]++,null));}static ɵfac=(cov_139b6x6lz3().s[34]++,function(i){cov_139b6x6lz3().f[13]++;cov_139b6x6lz3().s[35]++;return new((cov_139b6x6lz3().b[16][0]++,i)||(cov_139b6x6lz3().b[16][1]++,t))();});static ɵprov=(cov_139b6x6lz3().s[36]++,E({token:t,factory:t.ɵfac,providedIn:"root"}));}cov_139b6x6lz3().s[37]++;return t;})());var U=(cov_139b6x6lz3().s[38]++,(()=>{cov_139b6x6lz3().f[14]++;class t{alarmStateService=(cov_139b6x6lz3().s[39]++,d(ee));notificationApiService=(cov_139b6x6lz3().s[40]++,d(se));removeNotification(e){cov_139b6x6lz3().f[15]++;cov_139b6x6lz3().s[41]++;this.alarmStateService.dismissNotification(e),this.alarmStateService.removeNotification(e);}clearAllNotifications(e){cov_139b6x6lz3().f[16]++;cov_139b6x6lz3().s[42]++;(cov_139b6x6lz3().b[17][0]++,e.length!==0)&&(cov_139b6x6lz3().b[17][1]++,this.alarmStateService.dismissNotifications(e.map(i=>{cov_139b6x6lz3().f[17]++;cov_139b6x6lz3().s[43]++;return i.notificationId;})),this.alarmStateService.clearNotifications());}vm$=(cov_139b6x6lz3().s[44]++,j([this.notificationApiService.getNotificationsHistory().pipe(C(()=>{cov_139b6x6lz3().f[18]++;cov_139b6x6lz3().s[45]++;return v([]);})),this.alarmStateService.getNotifications$(),this.alarmStateService.getUnreadNotificationsCount$(),this.alarmStateService.getDismissedNotificationIds$()]).pipe(f(([e,i,n,r])=>{cov_139b6x6lz3().f[19]++;let h=(cov_139b6x6lz3().s[46]++,[...e,...i]),x=(cov_139b6x6lz3().s[47]++,Array.from(new Map(h.map(_=>{cov_139b6x6lz3().f[20]++;cov_139b6x6lz3().s[48]++;return[_.notificationId,_];})).values()).filter(_=>{cov_139b6x6lz3().f[21]++;cov_139b6x6lz3().s[49]++;return!r.has(_.notificationId);}));cov_139b6x6lz3().s[50]++;return x.sort((_,pe)=>{cov_139b6x6lz3().f[22]++;cov_139b6x6lz3().s[51]++;return this.toUnixTimestamp(pe.sentAt)-this.toUnixTimestamp(_.sentAt);}),{notifications:x,unreadCount:n};}),Y({bufferSize:1,refCount:!1})));toUnixTimestamp(e){cov_139b6x6lz3().f[23]++;let i=(cov_139b6x6lz3().s[52]++,Date.parse(e));cov_139b6x6lz3().s[53]++;return Number.isNaN(i)?(cov_139b6x6lz3().b[18][0]++,0):(cov_139b6x6lz3().b[18][1]++,i);}static ɵfac=(cov_139b6x6lz3().s[54]++,function(i){cov_139b6x6lz3().f[24]++;cov_139b6x6lz3().s[55]++;return new((cov_139b6x6lz3().b[19][0]++,i)||(cov_139b6x6lz3().b[19][1]++,t))();});static ɵprov=(cov_139b6x6lz3().s[56]++,E({token:t,factory:t.ɵfac}));}cov_139b6x6lz3().s[57]++;return t;})());function fe(t,l){cov_139b6x6lz3().f[25]++;cov_139b6x6lz3().s[58]++;(cov_139b6x6lz3().b[20][0]++,t&1)&&(cov_139b6x6lz3().b[20][1]++,m(0,"div",1));}function ue(t,l){cov_139b6x6lz3().f[26]++;cov_139b6x6lz3().s[59]++;(cov_139b6x6lz3().b[21][0]++,t&1)&&(cov_139b6x6lz3().b[21][1]++,m(0,"div",2));}function ge(t,l){cov_139b6x6lz3().f[27]++;cov_139b6x6lz3().s[60]++;(cov_139b6x6lz3().b[22][0]++,t&1)&&(cov_139b6x6lz3().b[22][1]++,m(0,"app-alarm-priority-indicator",10)),(cov_139b6x6lz3().b[23][0]++,t&2)&&(cov_139b6x6lz3().b[23][1]++,O("priority",l));}function he(t,l){cov_139b6x6lz3().f[28]++;cov_139b6x6lz3().s[61]++;if(t&1){cov_139b6x6lz3().b[24][0]++;let e=(cov_139b6x6lz3().s[62]++,T());cov_139b6x6lz3().s[63]++;o(0,"button",16),N("click",function(){cov_139b6x6lz3().f[29]++;cov_139b6x6lz3().s[64]++;y(e);let n=(cov_139b6x6lz3().s[65]++,p());cov_139b6x6lz3().s[66]++;return w(n.onRemove());}),S(),o(1,"svg",17),m(2,"path",18),a()();}else{cov_139b6x6lz3().b[24][1]++;}}var de=(cov_139b6x6lz3().s[67]++,(()=>{cov_139b6x6lz3().f[30]++;class t{notification=(cov_139b6x6lz3().s[68]++,R.required());showRemoveAction=(cov_139b6x6lz3().s[69]++,R(!1));isHighlighted=(cov_139b6x6lz3().s[70]++,R(!1));removeClicked=(cov_139b6x6lz3().s[71]++,K());sentAt=(cov_139b6x6lz3().s[72]++,b(()=>{cov_139b6x6lz3().f[31]++;cov_139b6x6lz3().s[73]++;return this.notification().sentAt;}));isResolved=(cov_139b6x6lz3().s[74]++,b(()=>{cov_139b6x6lz3().f[32]++;cov_139b6x6lz3().s[75]++;return this.notification().eventType==="resolved"?(cov_139b6x6lz3().b[25][0]++,!0):(cov_139b6x6lz3().b[25][1]++,this.notification().title.trim().toLowerCase().includes("allarme risolto"));}));priority=(cov_139b6x6lz3().s[76]++,b(()=>{cov_139b6x6lz3().f[33]++;cov_139b6x6lz3().s[77]++;return re(this.notification().title);}));displayTitle=(cov_139b6x6lz3().s[78]++,b(()=>{cov_139b6x6lz3().f[34]++;cov_139b6x6lz3().s[79]++;return(cov_139b6x6lz3().b[26][0]++,le(this.notification().title))||(cov_139b6x6lz3().b[26][1]++,this.notification().title);}));ariaLabel=(cov_139b6x6lz3().s[80]++,b(()=>{cov_139b6x6lz3().f[35]++;cov_139b6x6lz3().s[81]++;return`Notifica: ${this.displayTitle()}`;}));onRemove(){cov_139b6x6lz3().f[36]++;cov_139b6x6lz3().s[82]++;this.removeClicked.emit(this.notification().notificationId);}static ɵfac=(cov_139b6x6lz3().s[83]++,function(i){cov_139b6x6lz3().f[37]++;cov_139b6x6lz3().s[84]++;return new((cov_139b6x6lz3().b[27][0]++,i)||(cov_139b6x6lz3().b[27][1]++,t))();});static ɵcmp=(cov_139b6x6lz3().s[85]++,P({type:t,selectors:[["app-notification-item-component"]],inputs:{notification:[1,"notification"],showRemoveAction:[1,"showRemoveAction"],isHighlighted:[1,"isHighlighted"]},outputs:{removeClicked:"removeClicked"},decls:20,vars:12,consts:[[1,"notification-card","group","relative","overflow-hidden","rounded-[1.5rem]","border","border-amber-200","bg-white","p-4","shadow-[0_14px_36px_-30px_rgba(15,23,42,0.55)]","transition","duration-200","hover:-translate-y-0.5","hover:border-amber-300","hover:shadow-[0_20px_48px_-36px_rgba(15,23,42,0.65)]"],[1,"absolute","inset-y-0","left-0","w-1.5","bg-gradient-to-b","from-emerald-500","via-emerald-400","to-lime-300"],[1,"absolute","inset-y-0","left-0","w-1.5","bg-gradient-to-b","from-amber-500","via-amber-400","to-yellow-300"],[1,"flex","items-start","gap-4","pl-3","sm:pl-4"],[1,"flex","h-11","w-11","shrink-0","items-center","justify-center","rounded-2xl","bg-amber-50","text-amber-700","ring-1","ring-inset","ring-amber-100"],["viewBox","0 0 24 24","fill","none","stroke","currentColor","stroke-width","1.8","aria-hidden","true",1,"h-5","w-5"],["stroke-linecap","round","stroke-linejoin","round","d","M15 17h5l-1.4-1.4a2 2 0 0 1-.6-1.4V11a6 6 0 1 0-12 0v3.2a2 2 0 0 1-.6 1.4L4 17h5m6 0a3 3 0 1 1-6 0"],[1,"min-w-0","flex-1"],[1,"flex","flex-wrap","items-start","justify-between","gap-2"],[1,"notification-item__title-wrap","inline-flex","items-center","gap-2"],[3,"priority"],[1,"notification-item__title","font-display","text-base","font-semibold","leading-6","text-slate-900","sm:text-lg"],[1,"inline-flex","items-center","gap-2"],[1,"notification-item__time","inline-flex","shrink-0","items-center","rounded-full","border","border-amber-200","bg-amber-50","px-2.5","py-1","text-xs","font-medium","text-amber-700"],["type","button","aria-label","Rimuovi notifica",1,"notification-item__remove","cursor-pointer","inline-flex","h-7","w-7","items-center","justify-center","rounded-lg","border","border-amber-200","bg-amber-50","text-amber-700","transition-colors","hover:border-amber-300","hover:bg-amber-100"],[1,"mt-2","text-sm","leading-6","text-slate-600"],["type","button","aria-label","Rimuovi notifica",1,"notification-item__remove","cursor-pointer","inline-flex","h-7","w-7","items-center","justify-center","rounded-lg","border","border-amber-200","bg-amber-50","text-amber-700","transition-colors","hover:border-amber-300","hover:bg-amber-100",3,"click"],["fill","none","viewBox","0 0 24 24","stroke-width","2","stroke","currentColor","aria-hidden","true",1,"h-4","w-4"],["stroke-linecap","round","stroke-linejoin","round","d","M6 18L18 6M6 6l12 12"]],template:function(i,n){cov_139b6x6lz3().f[38]++;cov_139b6x6lz3().s[86]++;if((cov_139b6x6lz3().b[29][0]++,i&1)&&(cov_139b6x6lz3().b[29][1]++,o(0,"article",0),u(1,fe,1,0,"div",1)(2,ue,1,0,"div",2),o(3,"div",3)(4,"div",4),S(),o(5,"svg",5),m(6,"path",6),a()(),k(),o(7,"div",7)(8,"div",8)(9,"div",9),u(10,ge,1,1,"app-alarm-priority-indicator",10),o(11,"h2",11),s(12),a()(),o(13,"div",12)(14,"time",13),s(15),M(16,"elapsedTime"),a(),u(17,he,3,0,"button",14),a()(),o(18,"p",15),s(19," Notifica di sistema registrata nel feed del reparto. "),a()()()()),i&2){cov_139b6x6lz3().b[28][0]++;let r;cov_139b6x6lz3().s[87]++;z("notification-card--highlighted",n.isHighlighted()),$("id","notification-"+n.notification().notificationId)("aria-label",n.ariaLabel()),c(),g(n.isResolved()?(cov_139b6x6lz3().b[30][0]++,1):(cov_139b6x6lz3().b[30][1]++,2)),c(9),g((r=n.priority())?(cov_139b6x6lz3().b[31][0]++,10):(cov_139b6x6lz3().b[31][1]++,-1),r),c(2),I(" ",n.displayTitle()," "),c(2),$("datetime",n.sentAt()),c(),I(" ",A(16,10,n.sentAt())," "),c(2),g(n.showRemoveAction()?(cov_139b6x6lz3().b[32][0]++,17):(cov_139b6x6lz3().b[32][1]++,-1));}else{cov_139b6x6lz3().b[28][1]++;}},dependencies:[ce,me],styles:[`@keyframes _ngcontent-%COMP%_notification-card-enter{0%{opacity:0;transform:translateY(10px) scale(.985)}to{opacity:1;transform:translateY(0) scale(1)}}.notification-card[_ngcontent-%COMP%]{animation:_ngcontent-%COMP%_notification-card-enter .22s ease-out both;animation-delay:var(--notification-delay, 0ms)}.notification-card--highlighted[_ngcontent-%COMP%]{border-color:#f59e0b;box-shadow:0 0 0 2px #f59e0b42,0 22px 42px -34px #f59e0b8c;background:linear-gradient(180deg,#fffbeb,#fff 55%)}.notification-item__remove[_ngcontent-%COMP%]{cursor:pointer}.notification-item__remove[_ngcontent-%COMP%]:hover{transform:translateY(-1px)}.notification-item__title-wrap[_ngcontent-%COMP%]{max-width:100%}.notification-item__title[_ngcontent-%COMP%]{margin:0;word-break:break-word}@media(prefers-reduced-motion:reduce){.notification-card[_ngcontent-%COMP%]{animation:none}} +/*# sourceMappingURL=notification-item-component-SXUKD4MS.css.map */`],changeDetection:0}));}cov_139b6x6lz3().s[88]++;return t;})());cov_139b6x6lz3().s[89]++;var _e=(t,l)=>{cov_139b6x6lz3().f[39]++;cov_139b6x6lz3().s[90]++;return l.notificationId;};function ve(t,l){cov_139b6x6lz3().f[40]++;cov_139b6x6lz3().s[91]++;if(t&1){cov_139b6x6lz3().b[33][0]++;let e=(cov_139b6x6lz3().s[92]++,T());cov_139b6x6lz3().s[93]++;o(0,"button",16),N("click",function(){cov_139b6x6lz3().f[41]++;cov_139b6x6lz3().s[94]++;y(e);let n=(cov_139b6x6lz3().s[95]++,p()),r=(cov_139b6x6lz3().s[96]++,p());cov_139b6x6lz3().s[97]++;return w(r.onClearAllNotifications(n));}),s(1," Cancella tutte "),a();}else{cov_139b6x6lz3().b[33][1]++;}}function be(t,l){cov_139b6x6lz3().f[42]++;cov_139b6x6lz3().s[98]++;if(t&1){cov_139b6x6lz3().b[34][0]++;let e=(cov_139b6x6lz3().s[99]++,T());cov_139b6x6lz3().s[100]++;o(0,"li",18)(1,"app-notification-item-component",19),M(2,"async"),N("removeClicked",function(n){cov_139b6x6lz3().f[43]++;cov_139b6x6lz3().s[101]++;y(e);let r=(cov_139b6x6lz3().s[102]++,p(3));cov_139b6x6lz3().s[103]++;return w(r.onNotificationRemoved(n));}),a()();}else{cov_139b6x6lz3().b[34][1]++;}cov_139b6x6lz3().s[104]++;if(t&2){cov_139b6x6lz3().b[35][0]++;let e=(cov_139b6x6lz3().s[105]++,l.$implicit),i=(cov_139b6x6lz3().s[106]++,l.$index),n=(cov_139b6x6lz3().s[107]++,p(3));cov_139b6x6lz3().s[108]++;X("--notification-delay",i*48+"ms"),c(),O("notification",e)("isHighlighted",e.notificationId===((cov_139b6x6lz3().b[36][0]++,A(2,5,n.highlightedNotificationId$))??(cov_139b6x6lz3().b[36][1]++,"")))("showRemoveAction",!0);}else{cov_139b6x6lz3().b[35][1]++;}}function xe(t,l){cov_139b6x6lz3().f[44]++;cov_139b6x6lz3().s[109]++;if((cov_139b6x6lz3().b[38][0]++,t&1)&&(cov_139b6x6lz3().b[38][1]++,o(0,"ul",14),D(1,be,3,7,"li",17,_e),a()),t&2){cov_139b6x6lz3().b[37][0]++;let e=(cov_139b6x6lz3().s[110]++,p());cov_139b6x6lz3().s[111]++;c(),L(e.notifications);}else{cov_139b6x6lz3().b[37][1]++;}}function Ce(t,l){cov_139b6x6lz3().f[45]++;cov_139b6x6lz3().s[112]++;(cov_139b6x6lz3().b[39][0]++,t&1)&&(cov_139b6x6lz3().b[39][1]++,o(0,"div",15)(1,"div",20),S(),o(2,"svg",21),m(3,"path",22),a()(),k(),o(4,"h2",23),s(5,"Nessuna notifica disponibile"),a()());}function ye(t,l){cov_139b6x6lz3().f[46]++;cov_139b6x6lz3().s[113]++;if((cov_139b6x6lz3().b[41][0]++,t&1)&&(cov_139b6x6lz3().b[41][1]++,o(0,"div",8)(1,"div",10)(2,"span",11),m(3,"span",12),s(4),a(),u(5,ve,2,0,"button",13),a(),u(6,xe,3,0,"ul",14)(7,Ce,6,0,"div",15),a()),t&2){cov_139b6x6lz3().b[40][0]++;let e=(cov_139b6x6lz3().s[114]++,l),i=(cov_139b6x6lz3().s[115]++,p());cov_139b6x6lz3().s[116]++;c(4),I(" ",i.unreadSummaryLabel(e.unreadCount)," "),c(),g(e.notifications.length>0?(cov_139b6x6lz3().b[42][0]++,5):(cov_139b6x6lz3().b[42][1]++,-1)),c(),g(e.notifications.length>0?(cov_139b6x6lz3().b[43][0]++,6):(cov_139b6x6lz3().b[43][1]++,7));}else{cov_139b6x6lz3().b[40][1]++;}}function we(t,l){cov_139b6x6lz3().f[47]++;cov_139b6x6lz3().s[117]++;(cov_139b6x6lz3().b[44][0]++,t&1)&&(cov_139b6x6lz3().b[44][1]++,o(0,"div",25)(1,"div",26),m(2,"div",27),o(3,"div",28)(4,"div",29),m(5,"div",30)(6,"div",31),a(),m(7,"div",32)(8,"div",33),a()()());}function Se(t,l){cov_139b6x6lz3().f[48]++;cov_139b6x6lz3().s[118]++;if((cov_139b6x6lz3().b[46][0]++,t&1)&&(cov_139b6x6lz3().b[46][1]++,o(0,"div",9)(1,"div",24),D(2,we,9,0,"div",25,q),a()()),t&2){cov_139b6x6lz3().b[45][0]++;let e=(cov_139b6x6lz3().s[119]++,p());cov_139b6x6lz3().s[120]++;c(2),L(e.skeletonRows);}else{cov_139b6x6lz3().b[45][1]++;}}var et=(cov_139b6x6lz3().s[121]++,(()=>{cov_139b6x6lz3().f[49]++;class t{notificationService=(cov_139b6x6lz3().s[122]++,d(U));route=(cov_139b6x6lz3().s[123]++,d(Z));vm$=(cov_139b6x6lz3().s[124]++,this.notificationService.vm$);highlightedNotificationId$=(cov_139b6x6lz3().s[125]++,this.route.queryParamMap.pipe(f(e=>{cov_139b6x6lz3().f[50]++;let i=(cov_139b6x6lz3().s[126]++,e.get("focus"));cov_139b6x6lz3().s[127]++;return(cov_139b6x6lz3().b[48][0]++,i)&&(cov_139b6x6lz3().b[48][1]++,i.trim().length>0)?(cov_139b6x6lz3().b[47][0]++,i):(cov_139b6x6lz3().b[47][1]++,null);})));skeletonRows=(cov_139b6x6lz3().s[128]++,[0,1,2]);onNotificationRemoved(e){cov_139b6x6lz3().f[51]++;cov_139b6x6lz3().s[129]++;this.notificationService.removeNotification(e);}onClearAllNotifications(e){cov_139b6x6lz3().f[52]++;cov_139b6x6lz3().s[130]++;this.notificationService.clearAllNotifications(e.notifications);}unreadSummaryLabel(e){cov_139b6x6lz3().f[53]++;cov_139b6x6lz3().s[131]++;return e===1?(cov_139b6x6lz3().b[49][0]++,"1 notifica non letta"):(cov_139b6x6lz3().b[49][1]++,`${e} notifiche non lette`);}static ɵfac=(cov_139b6x6lz3().s[132]++,function(i){cov_139b6x6lz3().f[54]++;cov_139b6x6lz3().s[133]++;return new((cov_139b6x6lz3().b[50][0]++,i)||(cov_139b6x6lz3().b[50][1]++,t))();});static ɵcmp=(cov_139b6x6lz3().s[134]++,P({type:t,selectors:[["app-notification-page-component"]],features:[J([U])],decls:14,vars:3,consts:[["aria-labelledby","notification-page-title",1,"notification-shell","care-page","care-dot-grid","sidebar-page"],[1,"mx-auto","flex","min-h-[calc(100vh-4rem)]","w-full","max-w-6xl","flex-col","gap-6","px-2","py-2","sm:px-3","lg:px-4"],[1,"notification-header","care-page__hero","overflow-hidden","p-6","sm:p-8"],[1,"flex","flex-col","gap-5","lg:flex-row","lg:items-end","lg:justify-between"],[1,"max-w-2xl"],[1,"care-eyebrow"],["id","notification-page-title",1,"care-title","mt-3","text-3xl","sm:text-4xl"],[1,"care-subtitle","mt-3","text-sm","leading-6","sm:text-base"],[1,"notification-list","space-y-4"],["aria-busy","true","aria-live","polite",1,"space-y-4"],[1,"flex","w-full","flex-wrap","items-center","justify-between","gap-3"],[1,"notification-page__summary","inline-flex","items-center","gap-2","rounded-full","border","border-amber-200","bg-amber-50","px-3","py-1.5","text-xs","font-semibold","text-amber-800","shadow-sm"],[1,"h-2","w-2","rounded-full","bg-amber-500"],["type","button",1,"ml-auto","cursor-pointer","inline-flex","items-center","gap-2","rounded-full","border","border-red-300","bg-red-100","px-3","py-1.5","text-xs","font-semibold","text-red-800","shadow-sm","transition","hover:bg-red-200"],["aria-label","Elenco notifiche",1,"grid","gap-4"],[1,"notification-page__empty","overflow-hidden","rounded-[1.75rem]","border","border-dashed","border-slate-300","bg-white/80","p-8","text-center","shadow-[0_16px_40px_-36px_rgba(15,23,42,0.55)]"],["type","button",1,"ml-auto","cursor-pointer","inline-flex","items-center","gap-2","rounded-full","border","border-red-300","bg-red-100","px-3","py-1.5","text-xs","font-semibold","text-red-800","shadow-sm","transition","hover:bg-red-200",3,"click"],[1,"m-0",3,"--notification-delay"],[1,"m-0"],[3,"removeClicked","notification","isHighlighted","showRemoveAction"],[1,"mx-auto","flex","h-14","w-14","items-center","justify-center","rounded-2xl","bg-slate-100","text-slate-500"],["viewBox","0 0 24 24","fill","none","stroke","currentColor","stroke-width","1.8","aria-hidden","true",1,"h-7","w-7"],["stroke-linecap","round","stroke-linejoin","round","d","M15 17h5l-1.4-1.4a2 2 0 0 1-.6-1.4V11a6 6 0 1 0-12 0v3.2a2 2 0 0 1-.6 1.4L4 17h5m6 0a3 3 0 1 1-6 0"],[1,"mt-4","font-display","text-xl","font-semibold","tracking-tight","text-slate-900"],[1,"grid","gap-4"],[1,"overflow-hidden","rounded-[1.5rem]","border","border-slate-200","bg-white/85","p-4","shadow-[0_14px_36px_-30px_rgba(15,23,42,0.55)]"],[1,"flex","items-start","gap-4"],[1,"h-11","w-11","shrink-0","animate-pulse","rounded-2xl","bg-slate-200"],[1,"min-w-0","flex-1","space-y-3"],[1,"flex","items-center","justify-between","gap-3"],[1,"h-4","w-2/3","animate-pulse","rounded-full","bg-slate-200"],[1,"h-6","w-20","animate-pulse","rounded-full","bg-slate-200"],[1,"h-3","w-full","animate-pulse","rounded-full","bg-slate-200"],[1,"h-3","w-5/6","animate-pulse","rounded-full","bg-slate-200"]],template:function(i,n){cov_139b6x6lz3().f[55]++;cov_139b6x6lz3().s[135]++;if((cov_139b6x6lz3().b[52][0]++,i&1)&&(cov_139b6x6lz3().b[52][1]++,o(0,"section",0)(1,"div",1)(2,"header",2)(3,"div",3)(4,"div",4)(5,"p",5),s(6,"CENTRO AVVISI "),a(),o(7,"h1",6),s(8," Notifiche "),a(),o(9,"p",7),s(10," Cronologia degli avvisi ricevuti in tempo reale, relativi agli allarmi scattati. "),a()()()(),u(11,ye,8,3,"div",8),M(12,"async"),G(13,Se,4,0,"div",9),a()()),i&2){cov_139b6x6lz3().b[51][0]++;let r;cov_139b6x6lz3().s[136]++;c(11),g((r=A(12,1,n.vm$))?(cov_139b6x6lz3().b[53][0]++,11):(cov_139b6x6lz3().b[53][1]++,13),r);}else{cov_139b6x6lz3().b[51][1]++;}},dependencies:[de,W],styles:[`@keyframes _ngcontent-%COMP%_notification-page-enter{0%{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}.notification-shell[_ngcontent-%COMP%]{animation:_ngcontent-%COMP%_notification-page-enter .22s ease-out both}.notification-header[_ngcontent-%COMP%]{animation:_ngcontent-%COMP%_notification-page-enter .26s ease-out both}.notification-list[_ngcontent-%COMP%]{animation:_ngcontent-%COMP%_notification-page-enter .3s ease-out both}@media(prefers-reduced-motion:reduce){.notification-shell[_ngcontent-%COMP%], .notification-header[_ngcontent-%COMP%], .notification-list[_ngcontent-%COMP%]{animation:none}} +/*# sourceMappingURL=notification-page-component-23WNXUY6.css.map */`],changeDetection:0}));}cov_139b6x6lz3().s[137]++;return t;})());export{et as NotificationPageComponent};//# sourceMappingURL=chunk-2HDQ4MOL.js.map +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJzZSIsImNvdl8xMzliNng2bHozIiwicyIsImYiLCJ0IiwiaHR0cCIsImQiLCJRIiwiYmFzZVVybCIsInRlIiwiYXV0aFNlcnZpY2UiLCJpZSIsIkhJU1RPUllfTElNSVQiLCJISVNUT1JZX09GRlNFVCIsImdldE5vdGlmaWNhdGlvbnNIaXN0b3J5IiwiZ2V0Q3VycmVudFVzZXIkIiwicGlwZSIsIlYiLCJCIiwiZSIsImIiLCJ2IiwiaSIsImVuY29kZVVSSUNvbXBvbmVudCIsInVzZXJJZCIsIkgiLCJmZXRjaE1hbmFnZWRBbGFybUV2ZW50cyIsImZldGNoVW5tYW5hZ2VkQWxhcm1FdmVudHMiLCJuIiwiciIsIm1hcEFsYXJtRXZlbnRzVG9Ob3RpZmljYXRpb25zIiwiZ2V0IiwiQXJyYXkiLCJpc0FycmF5IiwiQyIsIm1hcEFsYXJtRXZlbnRUb05vdGlmaWNhdGlvbiIsInB1c2giLCJpZCIsInRvSXNvU3RyaW5nIiwiYWN0aXZhdGlvblRpbWUiLCJyZXNvbHV0aW9uVGltZSIsImgiLCJ4Iiwibm90aWZpY2F0aW9uSWQiLCJ0aXRsZSIsIm9lIiwiYWUiLCJhbGFybU5hbWUiLCJwcmlvcml0eSIsIm5lIiwic2VudEF0IiwiZXZlbnRUeXBlIiwidHJpbSIsIkRhdGUiLCJOdW1iZXIiLCJpc05hTiIsImdldFRpbWUiLCJ0b0lTT1N0cmluZyIsIsm1ZmFjIiwiybVwcm92IiwiRSIsInRva2VuIiwiZmFjdG9yeSIsInByb3ZpZGVkSW4iLCJVIiwiYWxhcm1TdGF0ZVNlcnZpY2UiLCJlZSIsIm5vdGlmaWNhdGlvbkFwaVNlcnZpY2UiLCJyZW1vdmVOb3RpZmljYXRpb24iLCJkaXNtaXNzTm90aWZpY2F0aW9uIiwiY2xlYXJBbGxOb3RpZmljYXRpb25zIiwibGVuZ3RoIiwiZGlzbWlzc05vdGlmaWNhdGlvbnMiLCJtYXAiLCJjbGVhck5vdGlmaWNhdGlvbnMiLCJ2bSQiLCJqIiwiZ2V0Tm90aWZpY2F0aW9ucyQiLCJnZXRVbnJlYWROb3RpZmljYXRpb25zQ291bnQkIiwiZ2V0RGlzbWlzc2VkTm90aWZpY2F0aW9uSWRzJCIsImZyb20iLCJNYXAiLCJfIiwidmFsdWVzIiwiZmlsdGVyIiwiaGFzIiwic29ydCIsInBlIiwidG9Vbml4VGltZXN0YW1wIiwibm90aWZpY2F0aW9ucyIsInVucmVhZENvdW50IiwiWSIsImJ1ZmZlclNpemUiLCJyZWZDb3VudCIsInBhcnNlIiwiZmUiLCJsIiwibSIsInVlIiwiZ2UiLCJPIiwiaGUiLCJUIiwibyIsIk4iLCJ5IiwicCIsInciLCJvblJlbW92ZSIsIlMiLCJhIiwiZGUiLCJub3RpZmljYXRpb24iLCJSIiwicmVxdWlyZWQiLCJzaG93UmVtb3ZlQWN0aW9uIiwiaXNIaWdobGlnaHRlZCIsInJlbW92ZUNsaWNrZWQiLCJLIiwiaXNSZXNvbHZlZCIsInRvTG93ZXJDYXNlIiwiaW5jbHVkZXMiLCJyZSIsImRpc3BsYXlUaXRsZSIsImxlIiwiYXJpYUxhYmVsIiwiZW1pdCIsIsm1Y21wIiwiUCIsInR5cGUiLCJzZWxlY3RvcnMiLCJpbnB1dHMiLCJvdXRwdXRzIiwiZGVjbHMiLCJ2YXJzIiwiY29uc3RzIiwidGVtcGxhdGUiLCJ1IiwiayIsIk0iLCJ6IiwiJCIsImMiLCJnIiwiSSIsIkEiLCJkZXBlbmRlbmNpZXMiLCJjZSIsIm1lIiwic3R5bGVzIiwiY2hhbmdlRGV0ZWN0aW9uIiwiX2UiLCJ2ZSIsIm9uQ2xlYXJBbGxOb3RpZmljYXRpb25zIiwiYmUiLCJvbk5vdGlmaWNhdGlvblJlbW92ZWQiLCIkaW1wbGljaXQiLCIkaW5kZXgiLCJYIiwiaGlnaGxpZ2h0ZWROb3RpZmljYXRpb25JZCQiLCJ4ZSIsIkQiLCJMIiwiQ2UiLCJ5ZSIsInVucmVhZFN1bW1hcnlMYWJlbCIsIndlIiwiU2UiLCJxIiwic2tlbGV0b25Sb3dzIiwiZXQiLCJub3RpZmljYXRpb25TZXJ2aWNlIiwicm91dGUiLCJaIiwicXVlcnlQYXJhbU1hcCIsImZlYXR1cmVzIiwiSiIsIkciLCJXIiwiTm90aWZpY2F0aW9uUGFnZUNvbXBvbmVudCJdLCJzb3VyY2VzIjpbInNyYy9hcHAvY29yZS9ub3RpZmljYXRpb24vc2VydmljZXMvbm90aWZpY2F0aW9uLWFwaS5zZXJ2aWNlLnRzIiwic3JjL2FwcC9mZWF0dXJlcy9ub3RpZmljYXRpb24vc2VydmljZXMvbm90aWZpY2F0aW9uLnNlcnZpY2UudHMiLCJzcmMvYXBwL2ZlYXR1cmVzL25vdGlmaWNhdGlvbi9jb21wb25lbnRzL25vdGlmaWNhdGlvbi1pdGVtLWNvbXBvbmVudC9ub3RpZmljYXRpb24taXRlbS1jb21wb25lbnQudHMiLCJzcmMvYXBwL2ZlYXR1cmVzL25vdGlmaWNhdGlvbi9jb21wb25lbnRzL25vdGlmaWNhdGlvbi1pdGVtLWNvbXBvbmVudC9ub3RpZmljYXRpb24taXRlbS1jb21wb25lbnQuaHRtbCIsInNyYy9hcHAvZmVhdHVyZXMvbm90aWZpY2F0aW9uL2NvbXBvbmVudHMvbm90aWZpY2F0aW9uLXBhZ2UtY29tcG9uZW50L25vdGlmaWNhdGlvbi1wYWdlLWNvbXBvbmVudC50cyIsInNyYy9hcHAvZmVhdHVyZXMvbm90aWZpY2F0aW9uL2NvbXBvbmVudHMvbm90aWZpY2F0aW9uLXBhZ2UtY29tcG9uZW50L25vdGlmaWNhdGlvbi1wYWdlLWNvbXBvbmVudC5odG1sIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBJbmplY3RhYmxlLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIGNhdGNoRXJyb3IsIGZvcmtKb2luLCBtYXAsIG9mLCBzd2l0Y2hNYXAsIHRha2UgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEludGVybmFsQXV0aFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9pbnRlcm5hbC1hdXRoLnNlcnZpY2UnO1xuaW1wb3J0IHsgTm90aWZpY2F0aW9uRXZlbnQgfSBmcm9tICcuLi8uLi8uLi9mZWF0dXJlcy9ub3RpZmljYXRpb24vbW9kZWxzL25vdGlmaWNhdGlvbi1ldmVudC5tb2RlbCc7XG5pbXBvcnQgeyBBUElfQkFTRV9VUkwgfSBmcm9tICcuLi8uLi90b2tlbnMvYXBpLWJhc2UtdXJsLnRva2VuJztcbmltcG9ydCB7XG4gICAgREVGQVVMVF9SRVNPTFZFRF9OT1RJRklDQVRJT05fVElUTEUsXG4gICAgREVGQVVMVF9UUklHR0VSRURfTk9USUZJQ0FUSU9OX1RJVExFLFxuICAgIGZvcm1hdFRyaWdnZXJlZE5vdGlmaWNhdGlvblRpdGxlLFxufSBmcm9tICcuLi91dGlscy9ub3RpZmljYXRpb24tdGl0bGUudXRpbCc7XG5cbmludGVyZmFjZSBBbGFybUV2ZW50SGlzdG9yeUR0byB7XG4gICAgaWQ/OiB1bmtub3duO1xuICAgIGFjdGl2YXRpb25UaW1lPzogdW5rbm93bjtcbiAgICByZXNvbHV0aW9uVGltZT86IHVua25vd247XG4gICAgYWxhcm1OYW1lPzogdW5rbm93bjtcbiAgICBwcmlvcml0eT86IHVua25vd247XG59XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgTm90aWZpY2F0aW9uQXBpU2VydmljZSB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBodHRwID0gaW5qZWN0KEh0dHBDbGllbnQpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgYmFzZVVybDogc3RyaW5nID0gaW5qZWN0KEFQSV9CQVNFX1VSTCk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBhdXRoU2VydmljZSA9IGluamVjdChJbnRlcm5hbEF1dGhTZXJ2aWNlKTtcblxuICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IEhJU1RPUllfTElNSVQgPSAxMDA7XG4gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgSElTVE9SWV9PRkZTRVQgPSAwO1xuXG4gICAgcHVibGljIGdldE5vdGlmaWNhdGlvbnNIaXN0b3J5KCk6IE9ic2VydmFibGU8Tm90aWZpY2F0aW9uRXZlbnRbXT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5hdXRoU2VydmljZS5nZXRDdXJyZW50VXNlciQoKS5waXBlKFxuICAgICAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgICAgIHN3aXRjaE1hcCgoc2Vzc2lvbikgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghc2Vzc2lvbikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2Y8Tm90aWZpY2F0aW9uRXZlbnRbXT4oW10pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IGVuY29kZWRVc2VySWQgPSBlbmNvZGVVUklDb21wb25lbnQoc2Vzc2lvbi51c2VySWQpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZvcmtKb2luKFtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mZXRjaE1hbmFnZWRBbGFybUV2ZW50cyhlbmNvZGVkVXNlcklkKSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mZXRjaFVubWFuYWdlZEFsYXJtRXZlbnRzKGVuY29kZWRVc2VySWQpLFxuICAgICAgICAgICAgICAgIF0pLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgIG1hcCgoW21hbmFnZWRFdmVudHMsIHVubWFuYWdlZEV2ZW50c10pID0+XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1hcEFsYXJtRXZlbnRzVG9Ob3RpZmljYXRpb25zKFsuLi5tYW5hZ2VkRXZlbnRzLCAuLi51bm1hbmFnZWRFdmVudHNdKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmZXRjaE1hbmFnZWRBbGFybUV2ZW50cyhlbmNvZGVkVXNlcklkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPEFsYXJtRXZlbnRIaXN0b3J5RHRvW10+IHtcbiAgICAgICAgY29uc3QgZW5kcG9pbnQgPSBgJHt0aGlzLmJhc2VVcmx9L2FsYXJtLWV2ZW50cy9tYW5hZ2VkLyR7ZW5jb2RlZFVzZXJJZH0vJHtOb3RpZmljYXRpb25BcGlTZXJ2aWNlLkhJU1RPUllfTElNSVR9LyR7Tm90aWZpY2F0aW9uQXBpU2VydmljZS5ISVNUT1JZX09GRlNFVH1gO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PEFsYXJtRXZlbnRIaXN0b3J5RHRvW10+KGVuZHBvaW50KS5waXBlKFxuICAgICAgICAgICAgbWFwKChyZXNwb25zZSkgPT4gKEFycmF5LmlzQXJyYXkocmVzcG9uc2UpID8gcmVzcG9uc2UgOiBbXSkpLFxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoKSA9PiBvZjxBbGFybUV2ZW50SGlzdG9yeUR0b1tdPihbXSkpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmZXRjaFVubWFuYWdlZEFsYXJtRXZlbnRzKGVuY29kZWRVc2VySWQ6IHN0cmluZyk6IE9ic2VydmFibGU8QWxhcm1FdmVudEhpc3RvcnlEdG9bXT4ge1xuICAgICAgICBjb25zdCBlbmRwb2ludCA9IGAke3RoaXMuYmFzZVVybH0vYWxhcm0tZXZlbnRzL3VubWFuYWdlZC8ke2VuY29kZWRVc2VySWR9LyR7Tm90aWZpY2F0aW9uQXBpU2VydmljZS5ISVNUT1JZX0xJTUlUfS8ke05vdGlmaWNhdGlvbkFwaVNlcnZpY2UuSElTVE9SWV9PRkZTRVR9YDtcblxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxBbGFybUV2ZW50SGlzdG9yeUR0b1tdPihlbmRwb2ludCkucGlwZShcbiAgICAgICAgICAgIG1hcCgocmVzcG9uc2UpID0+IChBcnJheS5pc0FycmF5KHJlc3BvbnNlKSA/IHJlc3BvbnNlIDogW10pKSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKCkgPT4gb2Y8QWxhcm1FdmVudEhpc3RvcnlEdG9bXT4oW10pKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgbWFwQWxhcm1FdmVudHNUb05vdGlmaWNhdGlvbnMoYWxhcm1FdmVudHM6IFJlYWRvbmx5QXJyYXk8QWxhcm1FdmVudEhpc3RvcnlEdG8+KTogTm90aWZpY2F0aW9uRXZlbnRbXSB7XG4gICAgICAgIGNvbnN0IG5vdGlmaWNhdGlvbnM6IE5vdGlmaWNhdGlvbkV2ZW50W10gPSBbXTtcblxuICAgICAgICBmb3IgKGNvbnN0IGFsYXJtRXZlbnQgb2YgYWxhcm1FdmVudHMpIHtcbiAgICAgICAgICAgIGNvbnN0IG1hcHBlZE5vdGlmaWNhdGlvbiA9IHRoaXMubWFwQWxhcm1FdmVudFRvTm90aWZpY2F0aW9uKGFsYXJtRXZlbnQpO1xuICAgICAgICAgICAgaWYgKG1hcHBlZE5vdGlmaWNhdGlvbikge1xuICAgICAgICAgICAgICAgIG5vdGlmaWNhdGlvbnMucHVzaChtYXBwZWROb3RpZmljYXRpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5vdGlmaWNhdGlvbnM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBtYXBBbGFybUV2ZW50VG9Ob3RpZmljYXRpb24oYWxhcm1FdmVudDogQWxhcm1FdmVudEhpc3RvcnlEdG8pOiBOb3RpZmljYXRpb25FdmVudCB8IG51bGwge1xuICAgICAgICBjb25zdCBhbGFybUV2ZW50SWQgPSB0eXBlb2YgYWxhcm1FdmVudC5pZCA9PT0gJ3N0cmluZycgPyBhbGFybUV2ZW50LmlkIDogbnVsbDtcbiAgICAgICAgaWYgKCFhbGFybUV2ZW50SWQpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYWN0aXZhdGlvblRpbWUgPSB0aGlzLnRvSXNvU3RyaW5nKGFsYXJtRXZlbnQuYWN0aXZhdGlvblRpbWUpO1xuICAgICAgICBjb25zdCByZXNvbHV0aW9uVGltZSA9IHRoaXMudG9Jc29TdHJpbmcoYWxhcm1FdmVudC5yZXNvbHV0aW9uVGltZSk7XG4gICAgICAgIGNvbnN0IGlzUmVzb2x2ZWQgPSByZXNvbHV0aW9uVGltZSAhPT0gbnVsbDtcbiAgICAgICAgY29uc3Qgc2VudEF0ID0gaXNSZXNvbHZlZCA/IHJlc29sdXRpb25UaW1lIDogYWN0aXZhdGlvblRpbWU7XG5cbiAgICAgICAgaWYgKCFzZW50QXQpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5vdGlmaWNhdGlvbklkOiBgYWxhcm0tJHtpc1Jlc29sdmVkID8gJ3Jlc29sdmVkJyA6ICd0cmlnZ2VyZWQnfS0ke2FsYXJtRXZlbnRJZH1gLFxuICAgICAgICAgICAgdGl0bGU6IGlzUmVzb2x2ZWRcbiAgICAgICAgICAgICAgICA/IERFRkFVTFRfUkVTT0xWRURfTk9USUZJQ0FUSU9OX1RJVExFXG4gICAgICAgICAgICAgICAgOiBmb3JtYXRUcmlnZ2VyZWROb3RpZmljYXRpb25UaXRsZShhbGFybUV2ZW50LmFsYXJtTmFtZSwgYWxhcm1FdmVudC5wcmlvcml0eSkgfHwgREVGQVVMVF9UUklHR0VSRURfTk9USUZJQ0FUSU9OX1RJVExFLFxuICAgICAgICAgICAgc2VudEF0LFxuICAgICAgICAgICAgZXZlbnRUeXBlOiBpc1Jlc29sdmVkID8gJ3Jlc29sdmVkJyA6ICd0cmlnZ2VyZWQnLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgdG9Jc29TdHJpbmcodmFsdWU6IHVua25vd24pOiBzdHJpbmcgfCBudWxsIHtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUudHJpbSgpKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlICYmICFOdW1iZXIuaXNOYU4odmFsdWUuZ2V0VGltZSgpKSkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnRvSVNPU3RyaW5nKCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBJbmplY3RhYmxlLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIGNhdGNoRXJyb3IsIG1hcCwgT2JzZXJ2YWJsZSwgb2YsIHNoYXJlUmVwbGF5IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBbGFybVN0YXRlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2NvcmUvYWxhcm0vc2VydmljZXMvYWxhcm0tc3RhdGUuc2VydmljZSc7XG5pbXBvcnQgeyBOb3RpZmljYXRpb25BcGlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9ub3RpZmljYXRpb24vc2VydmljZXMvbm90aWZpY2F0aW9uLWFwaS5zZXJ2aWNlJztcbmltcG9ydCB7IE5vdGlmaWNhdGlvbkV2ZW50IH0gZnJvbSAnLi4vbW9kZWxzL25vdGlmaWNhdGlvbi1ldmVudC5tb2RlbCc7XG5pbXBvcnQgeyBOb3RpZmljYXRpb25MaXN0Vm0gfSBmcm9tICcuLi9tb2RlbHMvbm90aWZpY2F0aW9uLWxpc3Qtdm0ubW9kZWwnO1xuXG4vLyBOYXNjb25kZSBsYSBjb21wbGVzc2l0w6AgZGVsbGEgY29tcG9zaXppb25lIHRyYSBsZSBzb3JnZW50aSBkaSBkYXRpIGRpZXRyb1xuLy8gdW4naW50ZXJmYWNjaWEgbWluaW1hbGU6IHVuIHVuaWNvIGNhbXBvIHB1YmJsaWNvIGB2bSRgLiBJbCBjb21wb25lbnRlIHNtYXJ0XG4vLyBub24gY29ub3NjZSBuw6kgbGEgcHJvdmVuaWVuemEgZGVpIGRhdGkgbsOpIGxhIGxvZ2ljYSBkaSBmdXNpb25lLlxuXG4vLyAqKlBlcmNow6kgw6ggY29tcG9uZW50LXNjb3BlZDoqKiBgTm90aWZpY2F0aW9uU2VydmljZWAgbWFudGllbmUgc290dG9zY3Jpemlvbmlcbi8vIGF0dGl2ZSB2ZXJzbyBgQWxhcm1TdGF0ZVNlcnZpY2VgIHRyYW1pdGUgYGNvbWJpbmVMYXRlc3RgLiBMZWdhcm5lIGlsIGNpY2xvXG4vLyBkaSB2aXRhIGFsIGNvbXBvbmVudGUgZ2FyYW50aXNjZSBjaGUgcXVlc3RlIHNvdHRvc2NyaXppb25pIHZlbmdhbm8gdGVybWluYXRlXG4vLyBhdXRvbWF0aWNhbWVudGUgcXVhbmRvIGBOb3RpZmljYXRpb25QYWdlQ29tcG9uZW50YCB2aWVuZSBkaXN0cnV0dG8gKG5hdmlnYXppb25lXG4vLyB2ZXJzbyB1bidhbHRyYSByb3V0ZSksIHNlbnphIG5lY2Vzc2l0w6AgZGkgYG5nT25EZXN0cm95YCBuw6kgZGlcbi8vIGB0YWtlVW50aWxEZXN0cm95ZWRgLiBBbmd1bGFyIGdlc3Rpc2NlIHR1dHRvIHRyYW1pdGUgaWwgc3VvIGluamVjdG9yIGxvY2FsZS5cblxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgTm90aWZpY2F0aW9uU2VydmljZSB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBhbGFybVN0YXRlU2VydmljZSA9IGluamVjdChBbGFybVN0YXRlU2VydmljZSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBub3RpZmljYXRpb25BcGlTZXJ2aWNlID0gaW5qZWN0KE5vdGlmaWNhdGlvbkFwaVNlcnZpY2UpO1xuXG4gICAgcHVibGljIHJlbW92ZU5vdGlmaWNhdGlvbihub3RpZmljYXRpb25JZDogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHRoaXMuYWxhcm1TdGF0ZVNlcnZpY2UuZGlzbWlzc05vdGlmaWNhdGlvbihub3RpZmljYXRpb25JZCk7XG4gICAgICAgIHRoaXMuYWxhcm1TdGF0ZVNlcnZpY2UucmVtb3ZlTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbklkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2xlYXJBbGxOb3RpZmljYXRpb25zKG5vdGlmaWNhdGlvbnM6IFJlYWRvbmx5QXJyYXk8Tm90aWZpY2F0aW9uRXZlbnQ+KTogdm9pZCB7XG4gICAgICAgIGlmIChub3RpZmljYXRpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5hbGFybVN0YXRlU2VydmljZS5kaXNtaXNzTm90aWZpY2F0aW9ucyhcbiAgICAgICAgICAgIG5vdGlmaWNhdGlvbnMubWFwKChub3RpZmljYXRpb24pID0+IG5vdGlmaWNhdGlvbi5ub3RpZmljYXRpb25JZClcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5hbGFybVN0YXRlU2VydmljZS5jbGVhck5vdGlmaWNhdGlvbnMoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVhZG9ubHkgdm0kOiBPYnNlcnZhYmxlPE5vdGlmaWNhdGlvbkxpc3RWbT4gPSBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgdGhpcy5ub3RpZmljYXRpb25BcGlTZXJ2aWNlXG4gICAgICAgICAgICAuZ2V0Tm90aWZpY2F0aW9uc0hpc3RvcnkoKVxuICAgICAgICAgICAgLnBpcGUoY2F0Y2hFcnJvcigoKSA9PiBvZjxOb3RpZmljYXRpb25FdmVudFtdPihbXSkpKSxcbiAgICAgICAgdGhpcy5hbGFybVN0YXRlU2VydmljZS5nZXROb3RpZmljYXRpb25zJCgpLFxuICAgICAgICB0aGlzLmFsYXJtU3RhdGVTZXJ2aWNlLmdldFVucmVhZE5vdGlmaWNhdGlvbnNDb3VudCQoKSxcbiAgICAgICAgdGhpcy5hbGFybVN0YXRlU2VydmljZS5nZXREaXNtaXNzZWROb3RpZmljYXRpb25JZHMkKCksXG4gICAgXSkucGlwZShcbiAgICAgICAgbWFwKChbaGlzdG9yaWMsIGluU2Vzc2lvbiwgdW5yZWFkQ291bnQsIGRpc21pc3NlZE5vdGlmaWNhdGlvbklkc10pOiBOb3RpZmljYXRpb25MaXN0Vm0gPT4ge1xuICAgICAgICAgICAgY29uc3QgbWVyZ2VkID0gWy4uLmhpc3RvcmljLCAuLi5pblNlc3Npb25dO1xuICAgICAgICAgICAgY29uc3QgZGVkdXBlZCA9IEFycmF5LmZyb20oXG4gICAgICAgICAgICAgICAgbmV3IE1hcChtZXJnZWQubWFwKChub3RpZmljYXRpb24pID0+IFtub3RpZmljYXRpb24ubm90aWZpY2F0aW9uSWQsIG5vdGlmaWNhdGlvbl0pKS52YWx1ZXMoKVxuICAgICAgICAgICAgKS5maWx0ZXIoKG5vdGlmaWNhdGlvbikgPT4gIWRpc21pc3NlZE5vdGlmaWNhdGlvbklkcy5oYXMobm90aWZpY2F0aW9uLm5vdGlmaWNhdGlvbklkKSk7XG5cbiAgICAgICAgICAgIGRlZHVwZWQuc29ydChcbiAgICAgICAgICAgICAgICAobGVmdCwgcmlnaHQpID0+XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9Vbml4VGltZXN0YW1wKHJpZ2h0LnNlbnRBdCkgLSB0aGlzLnRvVW5peFRpbWVzdGFtcChsZWZ0LnNlbnRBdClcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgbm90aWZpY2F0aW9uczogZGVkdXBlZCxcbiAgICAgICAgICAgICAgICB1bnJlYWRDb3VudCxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pLFxuXG5cbiAgICAgICAgc2hhcmVSZXBsYXkoeyBidWZmZXJTaXplOiAxLCByZWZDb3VudDogZmFsc2UgfSlcbiAgICApO1xuXG4gICAgcHJpdmF0ZSB0b1VuaXhUaW1lc3RhbXAoZGF0ZVZhbHVlOiBzdHJpbmcpOiBudW1iZXIge1xuICAgICAgICBjb25zdCB0aW1lc3RhbXAgPSBEYXRlLnBhcnNlKGRhdGVWYWx1ZSk7XG4gICAgICAgIHJldHVybiBOdW1iZXIuaXNOYU4odGltZXN0YW1wKSA/IDAgOiB0aW1lc3RhbXA7XG4gICAgfVxufSIsImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGNvbXB1dGVkLCBpbnB1dCwgb3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOb3RpZmljYXRpb25FdmVudCB9IGZyb20gJy4uLy4uL21vZGVscy9ub3RpZmljYXRpb24tZXZlbnQubW9kZWwnO1xuaW1wb3J0IHsgRWxhcHNlZFRpbWVQaXBlIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2hhcmVkL3BpcGVzL2VsYXBzZWQtdGltZS5waXBlJztcbmltcG9ydCB7IEFsYXJtUHJpb3JpdHlJbmRpY2F0b3JDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi8uLi9zaGFyZWQvY29tcG9uZW50cy9hbGFybS10YWJsZS9hbGFybS1wcmlvcml0eS1pbmRpY2F0b3IuY29tcG9uZW50JztcbmltcG9ydCB7XG4gIGV4dHJhY3RQcmlvcml0eUZyb21Ob3RpZmljYXRpb25UaXRsZSxcbiAgc3RyaXBQcmlvcml0eUZyb21Ob3RpZmljYXRpb25UaXRsZSxcbn0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS9ub3RpZmljYXRpb24vdXRpbHMvbm90aWZpY2F0aW9uLXByaW9yaXR5LWRpc3BsYXkudXRpbCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1ub3RpZmljYXRpb24taXRlbS1jb21wb25lbnQnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaW1wb3J0czogW0VsYXBzZWRUaW1lUGlwZSwgQWxhcm1Qcmlvcml0eUluZGljYXRvckNvbXBvbmVudF0sXG4gIHRlbXBsYXRlVXJsOiAnLi9ub3RpZmljYXRpb24taXRlbS1jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9ub3RpZmljYXRpb24taXRlbS1jb21wb25lbnQuY3NzJyxcbn0pXG5leHBvcnQgY2xhc3MgTm90aWZpY2F0aW9uSXRlbUNvbXBvbmVudCB7XG4gIHB1YmxpYyByZWFkb25seSBub3RpZmljYXRpb24gPSBpbnB1dC5yZXF1aXJlZDxOb3RpZmljYXRpb25FdmVudD4oKTtcbiAgcHVibGljIHJlYWRvbmx5IHNob3dSZW1vdmVBY3Rpb24gPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG4gIHB1YmxpYyByZWFkb25seSBpc0hpZ2hsaWdodGVkID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuICBwdWJsaWMgcmVhZG9ubHkgcmVtb3ZlQ2xpY2tlZCA9IG91dHB1dDxzdHJpbmc+KCk7XG4gIHB1YmxpYyByZWFkb25seSBzZW50QXQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLm5vdGlmaWNhdGlvbigpLnNlbnRBdCk7XG4gIHB1YmxpYyByZWFkb25seSBpc1Jlc29sdmVkID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGV2ZW50VHlwZSA9IHRoaXMubm90aWZpY2F0aW9uKCkuZXZlbnRUeXBlO1xuICAgIGlmIChldmVudFR5cGUgPT09ICdyZXNvbHZlZCcpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLm5vdGlmaWNhdGlvbigpLnRpdGxlLnRyaW0oKS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCdhbGxhcm1lIHJpc29sdG8nKTtcbiAgfSk7XG4gIHB1YmxpYyByZWFkb25seSBwcmlvcml0eSA9IGNvbXB1dGVkKCgpID0+XG4gICAgZXh0cmFjdFByaW9yaXR5RnJvbU5vdGlmaWNhdGlvblRpdGxlKHRoaXMubm90aWZpY2F0aW9uKCkudGl0bGUpXG4gICk7XG4gIHB1YmxpYyByZWFkb25seSBkaXNwbGF5VGl0bGUgPSBjb21wdXRlZCgoKSA9PlxuICAgIHN0cmlwUHJpb3JpdHlGcm9tTm90aWZpY2F0aW9uVGl0bGUodGhpcy5ub3RpZmljYXRpb24oKS50aXRsZSkgfHwgdGhpcy5ub3RpZmljYXRpb24oKS50aXRsZVxuICApO1xuICBwdWJsaWMgcmVhZG9ubHkgYXJpYUxhYmVsID0gY29tcHV0ZWQoKCkgPT4gYE5vdGlmaWNhOiAke3RoaXMuZGlzcGxheVRpdGxlKCl9YCk7XG5cbiAgcHVibGljIG9uUmVtb3ZlKCk6IHZvaWQge1xuICAgIHRoaXMucmVtb3ZlQ2xpY2tlZC5lbWl0KHRoaXMubm90aWZpY2F0aW9uKCkubm90aWZpY2F0aW9uSWQpO1xuICB9XG59IiwiPGFydGljbGVcbiAgICBjbGFzcz1cIm5vdGlmaWNhdGlvbi1jYXJkIGdyb3VwIHJlbGF0aXZlIG92ZXJmbG93LWhpZGRlbiByb3VuZGVkLVsxLjVyZW1dIGJvcmRlciBib3JkZXItYW1iZXItMjAwIGJnLXdoaXRlIHAtNCBzaGFkb3ctWzBfMTRweF8zNnB4Xy0zMHB4X3JnYmEoMTUsMjMsNDIsMC41NSldIHRyYW5zaXRpb24gZHVyYXRpb24tMjAwIGhvdmVyOi10cmFuc2xhdGUteS0wLjUgaG92ZXI6Ym9yZGVyLWFtYmVyLTMwMCBob3ZlcjpzaGFkb3ctWzBfMjBweF80OHB4Xy0zNnB4X3JnYmEoMTUsMjMsNDIsMC42NSldXCJcbiAgICBbY2xhc3Mubm90aWZpY2F0aW9uLWNhcmQtLWhpZ2hsaWdodGVkXT1cImlzSGlnaGxpZ2h0ZWQoKVwiXG4gICAgW2F0dHIuaWRdPVwiJ25vdGlmaWNhdGlvbi0nICsgbm90aWZpY2F0aW9uKCkubm90aWZpY2F0aW9uSWRcIlxuICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiYXJpYUxhYmVsKClcIj5cbiAgICBAaWYgKGlzUmVzb2x2ZWQoKSkge1xuICAgIDxkaXYgY2xhc3M9XCJhYnNvbHV0ZSBpbnNldC15LTAgbGVmdC0wIHctMS41IGJnLWdyYWRpZW50LXRvLWIgZnJvbS1lbWVyYWxkLTUwMCB2aWEtZW1lcmFsZC00MDAgdG8tbGltZS0zMDBcIj48L2Rpdj5cbiAgICB9IEBlbHNlIHtcbiAgICA8ZGl2IGNsYXNzPVwiYWJzb2x1dGUgaW5zZXQteS0wIGxlZnQtMCB3LTEuNSBiZy1ncmFkaWVudC10by1iIGZyb20tYW1iZXItNTAwIHZpYS1hbWJlci00MDAgdG8teWVsbG93LTMwMFwiPjwvZGl2PlxuICAgIH1cblxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLXN0YXJ0IGdhcC00IHBsLTMgc206cGwtNFwiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImZsZXggaC0xMSB3LTExIHNocmluay0wIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkLTJ4bCBiZy1hbWJlci01MCB0ZXh0LWFtYmVyLTcwMCByaW5nLTEgcmluZy1pbnNldCByaW5nLWFtYmVyLTEwMFwiPlxuICAgICAgICAgICAgPHN2ZyB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgY2xhc3M9XCJoLTUgdy01XCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxLjhcIlxuICAgICAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiXG4gICAgICAgICAgICAgICAgICAgIGQ9XCJNMTUgMTdoNWwtMS40LTEuNGEyIDIgMCAwIDEtLjYtMS40VjExYTYgNiAwIDEgMC0xMiAwdjMuMmEyIDIgMCAwIDEtLjYgMS40TDQgMTdoNW02IDBhMyAzIDAgMSAxLTYgMFwiIC8+XG4gICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm1pbi13LTAgZmxleC0xXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXdyYXAgaXRlbXMtc3RhcnQganVzdGlmeS1iZXR3ZWVuIGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5vdGlmaWNhdGlvbi1pdGVtX190aXRsZS13cmFwIGlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgICAgICAgICAgICAgICBAaWYgKHByaW9yaXR5KCk7IGFzIG5vdGlmaWNhdGlvblByaW9yaXR5KSB7XG4gICAgICAgICAgICAgICAgICAgIDxhcHAtYWxhcm0tcHJpb3JpdHktaW5kaWNhdG9yIFtwcmlvcml0eV09XCJub3RpZmljYXRpb25Qcmlvcml0eVwiPjwvYXBwLWFsYXJtLXByaW9yaXR5LWluZGljYXRvcj5cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIDxoMiBjbGFzcz1cIm5vdGlmaWNhdGlvbi1pdGVtX190aXRsZSBmb250LWRpc3BsYXkgdGV4dC1iYXNlIGZvbnQtc2VtaWJvbGQgbGVhZGluZy02IHRleHQtc2xhdGUtOTAwIHNtOnRleHQtbGdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGRpc3BsYXlUaXRsZSgpIH19XG4gICAgICAgICAgICAgICAgICAgIDwvaDI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgICAgIDx0aW1lXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm5vdGlmaWNhdGlvbi1pdGVtX190aW1lIGlubGluZS1mbGV4IHNocmluay0wIGl0ZW1zLWNlbnRlciByb3VuZGVkLWZ1bGwgYm9yZGVyIGJvcmRlci1hbWJlci0yMDAgYmctYW1iZXItNTAgcHgtMi41IHB5LTEgdGV4dC14cyBmb250LW1lZGl1bSB0ZXh0LWFtYmVyLTcwMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5kYXRldGltZV09XCJzZW50QXQoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgc2VudEF0KCkgfCBlbGFwc2VkVGltZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L3RpbWU+XG5cbiAgICAgICAgICAgICAgICAgICAgQGlmIChzaG93UmVtb3ZlQWN0aW9uKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25SZW1vdmUoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiUmltdW92aSBub3RpZmljYVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm5vdGlmaWNhdGlvbi1pdGVtX19yZW1vdmUgY3Vyc29yLXBvaW50ZXIgaW5saW5lLWZsZXggaC03IHctNyBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLWFtYmVyLTIwMCBiZy1hbWJlci01MCB0ZXh0LWFtYmVyLTcwMCB0cmFuc2l0aW9uLWNvbG9ycyBob3Zlcjpib3JkZXItYW1iZXItMzAwIGhvdmVyOmJnLWFtYmVyLTEwMFwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9XCJoLTQgdy00XCIgZmlsbD1cIm5vbmVcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIGQ9XCJNNiAxOEwxOCA2TTYgNmwxMiAxMlwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8cCBjbGFzcz1cIm10LTIgdGV4dC1zbSBsZWFkaW5nLTYgdGV4dC1zbGF0ZS02MDBcIj5cbiAgICAgICAgICAgICAgICBOb3RpZmljYSBkaSBzaXN0ZW1hIHJlZ2lzdHJhdGEgbmVsIGZlZWQgZGVsIHJlcGFydG8uXG4gICAgICAgICAgICA8L3A+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9hcnRpY2xlPiIsImltcG9ydCB7IEFzeW5jUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IE5vdGlmaWNhdGlvbkxpc3RWbSB9IGZyb20gJy4uLy4uL21vZGVscy9ub3RpZmljYXRpb24tbGlzdC12bS5tb2RlbCc7XG5pbXBvcnQgeyBOb3RpZmljYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbm90aWZpY2F0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgTm90aWZpY2F0aW9uSXRlbUNvbXBvbmVudCB9IGZyb20gJy4uL25vdGlmaWNhdGlvbi1pdGVtLWNvbXBvbmVudC9ub3RpZmljYXRpb24taXRlbS1jb21wb25lbnQnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgbWFwIH0gZnJvbSAncnhqcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1ub3RpZmljYXRpb24tcGFnZS1jb21wb25lbnQnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaW1wb3J0czogW0FzeW5jUGlwZSwgTm90aWZpY2F0aW9uSXRlbUNvbXBvbmVudF0sXG4gIHByb3ZpZGVyczogW05vdGlmaWNhdGlvblNlcnZpY2VdLFxuICB0ZW1wbGF0ZVVybDogJy4vbm90aWZpY2F0aW9uLXBhZ2UtY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vbm90aWZpY2F0aW9uLXBhZ2UtY29tcG9uZW50LmNzcycsXG59KVxuZXhwb3J0IGNsYXNzIE5vdGlmaWNhdGlvblBhZ2VDb21wb25lbnQge1xuICBwcml2YXRlIHJlYWRvbmx5IG5vdGlmaWNhdGlvblNlcnZpY2UgPSBpbmplY3QoTm90aWZpY2F0aW9uU2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgcm91dGUgPSBpbmplY3QoQWN0aXZhdGVkUm91dGUpO1xuXG4gIHB1YmxpYyByZWFkb25seSB2bSQ6IE9ic2VydmFibGU8Tm90aWZpY2F0aW9uTGlzdFZtPiA9IHRoaXMubm90aWZpY2F0aW9uU2VydmljZS52bSQ7XG4gIHB1YmxpYyByZWFkb25seSBoaWdobGlnaHRlZE5vdGlmaWNhdGlvbklkJDogT2JzZXJ2YWJsZTxzdHJpbmcgfCBudWxsPiA9IHRoaXMucm91dGUucXVlcnlQYXJhbU1hcC5waXBlKFxuICAgIG1hcCgocGFyYW1zKSA9PiB7XG4gICAgICBjb25zdCBmb2N1c2VkSWQgPSBwYXJhbXMuZ2V0KCdmb2N1cycpO1xuICAgICAgcmV0dXJuIGZvY3VzZWRJZCAmJiBmb2N1c2VkSWQudHJpbSgpLmxlbmd0aCA+IDAgPyBmb2N1c2VkSWQgOiBudWxsO1xuICAgIH0pXG4gICk7XG4gIHB1YmxpYyByZWFkb25seSBza2VsZXRvblJvd3MgPSBbMCwgMSwgMl07XG5cbiAgcHVibGljIG9uTm90aWZpY2F0aW9uUmVtb3ZlZChub3RpZmljYXRpb25JZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnJlbW92ZU5vdGlmaWNhdGlvbihub3RpZmljYXRpb25JZCk7XG4gIH1cblxuICBwdWJsaWMgb25DbGVhckFsbE5vdGlmaWNhdGlvbnModm06IE5vdGlmaWNhdGlvbkxpc3RWbSk6IHZvaWQge1xuICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5jbGVhckFsbE5vdGlmaWNhdGlvbnModm0ubm90aWZpY2F0aW9ucyk7XG4gIH1cblxuICBwdWJsaWMgdW5yZWFkU3VtbWFyeUxhYmVsKHVucmVhZENvdW50OiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGlmICh1bnJlYWRDb3VudCA9PT0gMSkge1xuICAgICAgcmV0dXJuICcxIG5vdGlmaWNhIG5vbiBsZXR0YSc7XG4gICAgfVxuXG4gICAgcmV0dXJuIGAke3VucmVhZENvdW50fSBub3RpZmljaGUgbm9uIGxldHRlYDtcbiAgfVxufSIsIjxzZWN0aW9uXG4gICAgY2xhc3M9XCJub3RpZmljYXRpb24tc2hlbGwgY2FyZS1wYWdlIGNhcmUtZG90LWdyaWQgc2lkZWJhci1wYWdlXCJcbiAgICBhcmlhLWxhYmVsbGVkYnk9XCJub3RpZmljYXRpb24tcGFnZS10aXRsZVwiPlxuICAgIDxkaXYgY2xhc3M9XCJteC1hdXRvIGZsZXggbWluLWgtW2NhbGMoMTAwdmgtNHJlbSldIHctZnVsbCBtYXgtdy02eGwgZmxleC1jb2wgZ2FwLTYgcHgtMiBweS0yIHNtOnB4LTMgbGc6cHgtNFwiPlxuICAgICAgICA8aGVhZGVyXG4gICAgICAgICAgICBjbGFzcz1cIm5vdGlmaWNhdGlvbi1oZWFkZXIgY2FyZS1wYWdlX19oZXJvIG92ZXJmbG93LWhpZGRlbiBwLTYgc206cC04XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBnYXAtNSBsZzpmbGV4LXJvdyBsZzppdGVtcy1lbmQgbGc6anVzdGlmeS1iZXR3ZWVuXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1heC13LTJ4bFwiPlxuICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImNhcmUtZXllYnJvd1wiPkNFTlRSTyBBVlZJU0lcbiAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICAgICA8aDEgaWQ9XCJub3RpZmljYXRpb24tcGFnZS10aXRsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNhcmUtdGl0bGUgbXQtMyB0ZXh0LTN4bCBzbTp0ZXh0LTR4bFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgTm90aWZpY2hlXG4gICAgICAgICAgICAgICAgICAgIDwvaDE+XG4gICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiY2FyZS1zdWJ0aXRsZSBtdC0zIHRleHQtc20gbGVhZGluZy02IHNtOnRleHQtYmFzZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgQ3Jvbm9sb2dpYSBkZWdsaSBhdnZpc2kgcmljZXZ1dGkgaW4gdGVtcG8gcmVhbGUsIHJlbGF0aXZpIGFnbGkgYWxsYXJtaSBzY2F0dGF0aS5cbiAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvaGVhZGVyPlxuXG4gICAgICAgIEBpZiAodm0kIHwgYXN5bmM7IGFzIHZtKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJub3RpZmljYXRpb24tbGlzdCBzcGFjZS15LTRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IHctZnVsbCBmbGV4LXdyYXAgaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtM1wiPlxuICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibm90aWZpY2F0aW9uLXBhZ2VfX3N1bW1hcnkgaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGdhcC0yIHJvdW5kZWQtZnVsbCBib3JkZXIgYm9yZGVyLWFtYmVyLTIwMCBiZy1hbWJlci01MCBweC0zIHB5LTEuNSB0ZXh0LXhzIGZvbnQtc2VtaWJvbGQgdGV4dC1hbWJlci04MDAgc2hhZG93LXNtXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaC0yIHctMiByb3VuZGVkLWZ1bGwgYmctYW1iZXItNTAwXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICB7eyB1bnJlYWRTdW1tYXJ5TGFiZWwodm0udW5yZWFkQ291bnQpIH19XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgQGlmICh2bS5ub3RpZmljYXRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1sLWF1dG8gY3Vyc29yLXBvaW50ZXIgaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGdhcC0yIHJvdW5kZWQtZnVsbCBib3JkZXIgYm9yZGVyLXJlZC0zMDAgYmctcmVkLTEwMCBweC0zIHB5LTEuNSB0ZXh0LXhzIGZvbnQtc2VtaWJvbGQgdGV4dC1yZWQtODAwIHNoYWRvdy1zbSB0cmFuc2l0aW9uIGhvdmVyOmJnLXJlZC0yMDBcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25DbGVhckFsbE5vdGlmaWNhdGlvbnModm0pXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIENhbmNlbGxhIHR1dHRlXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIEBpZiAodm0ubm90aWZpY2F0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICA8dWwgY2xhc3M9XCJncmlkIGdhcC00XCIgYXJpYS1sYWJlbD1cIkVsZW5jbyBub3RpZmljaGVcIj5cbiAgICAgICAgICAgICAgICBAZm9yIChub3RpZmljYXRpb24gb2Ygdm0ubm90aWZpY2F0aW9uczsgdHJhY2sgbm90aWZpY2F0aW9uLm5vdGlmaWNhdGlvbklkOyBsZXQgaW5kZXggPSAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJtLTBcIiBbc3R5bGUuLS1ub3RpZmljYXRpb24tZGVsYXldPVwiKGluZGV4ICogNDgpICsgJ21zJ1wiPlxuICAgICAgICAgICAgICAgICAgICA8YXBwLW5vdGlmaWNhdGlvbi1pdGVtLWNvbXBvbmVudFxuICAgICAgICAgICAgICAgICAgICAgICAgW25vdGlmaWNhdGlvbl09XCJub3RpZmljYXRpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2lzSGlnaGxpZ2h0ZWRdPVwibm90aWZpY2F0aW9uLm5vdGlmaWNhdGlvbklkID09PSAoKGhpZ2hsaWdodGVkTm90aWZpY2F0aW9uSWQkIHwgYXN5bmMpID8/ICcnKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbc2hvd1JlbW92ZUFjdGlvbl09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChyZW1vdmVDbGlja2VkKT1cIm9uTm90aWZpY2F0aW9uUmVtb3ZlZCgkZXZlbnQpXCI+PC9hcHAtbm90aWZpY2F0aW9uLWl0ZW0tY29tcG9uZW50PlxuICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwibm90aWZpY2F0aW9uLXBhZ2VfX2VtcHR5IG92ZXJmbG93LWhpZGRlbiByb3VuZGVkLVsxLjc1cmVtXSBib3JkZXIgYm9yZGVyLWRhc2hlZCBib3JkZXItc2xhdGUtMzAwIGJnLXdoaXRlLzgwIHAtOCB0ZXh0LWNlbnRlciBzaGFkb3ctWzBfMTZweF80MHB4Xy0zNnB4X3JnYmEoMTUsMjMsNDIsMC41NSldXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm14LWF1dG8gZmxleCBoLTE0IHctMTQgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHJvdW5kZWQtMnhsIGJnLXNsYXRlLTEwMCB0ZXh0LXNsYXRlLTUwMFwiPlxuICAgICAgICAgICAgICAgICAgICA8c3ZnIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBjbGFzcz1cImgtNyB3LTdcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjEuOFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xNSAxN2g1bC0xLjQtMS40YTIgMiAwIDAgMS0uNi0xLjRWMTFhNiA2IDAgMSAwLTEyIDB2My4yYTIgMiAwIDAgMS0uNiAxLjRMNCAxN2g1bTYgMGEzIDMgMCAxIDEtNiAwXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8aDIgY2xhc3M9XCJtdC00IGZvbnQtZGlzcGxheSB0ZXh0LXhsIGZvbnQtc2VtaWJvbGQgdHJhY2tpbmctdGlnaHQgdGV4dC1zbGF0ZS05MDBcIj5OZXNzdW5hIG5vdGlmaWNhXG4gICAgICAgICAgICAgICAgICAgIGRpc3BvbmliaWxlPC9oMj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzcGFjZS15LTRcIiBhcmlhLWJ1c3k9XCJ0cnVlXCIgYXJpYS1saXZlPVwicG9saXRlXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZCBnYXAtNFwiPlxuICAgICAgICAgICAgICAgIEBmb3IgKHNrZWxldG9uIG9mIHNrZWxldG9uUm93czsgdHJhY2sgc2tlbGV0b24pIHtcbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwib3ZlcmZsb3ctaGlkZGVuIHJvdW5kZWQtWzEuNXJlbV0gYm9yZGVyIGJvcmRlci1zbGF0ZS0yMDAgYmctd2hpdGUvODUgcC00IHNoYWRvdy1bMF8xNHB4XzM2cHhfLTMwcHhfcmdiYSgxNSwyMyw0MiwwLjU1KV1cIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtc3RhcnQgZ2FwLTRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoLTExIHctMTEgc2hyaW5rLTAgYW5pbWF0ZS1wdWxzZSByb3VuZGVkLTJ4bCBiZy1zbGF0ZS0yMDBcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtaW4tdy0wIGZsZXgtMSBzcGFjZS15LTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIGdhcC0zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoLTQgdy0yLzMgYW5pbWF0ZS1wdWxzZSByb3VuZGVkLWZ1bGwgYmctc2xhdGUtMjAwXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoLTYgdy0yMCBhbmltYXRlLXB1bHNlIHJvdW5kZWQtZnVsbCBiZy1zbGF0ZS0yMDBcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaC0zIHctZnVsbCBhbmltYXRlLXB1bHNlIHJvdW5kZWQtZnVsbCBiZy1zbGF0ZS0yMDBcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaC0zIHctNS82IGFuaW1hdGUtcHVsc2Ugcm91bmRlZC1mdWxsIGJnLXNsYXRlLTIwMFwiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgIDwvZGl2PlxuPC9zZWN0aW9uPiJdLCJtYXBwaW5ncyI6IjtvM0JBcUJBLEdBQWEsQ0FBQUEsRUFBQSxFQUFBQyxjQUFBLEdBQUFDLENBQUEsT0FBc0IsS0FBQUQsY0FBQSxHQUFBRSxDQUFBLE1BQTdCLEtBQU8sQ0FBQUMsQ0FBc0IsQ0FDZEMsSUFBQSxFQUFBSixjQUFBLEdBQUFDLENBQUEsTUFBT0ksQ0FBQSxDQUFPQyxDQUFVLEdBQ3hCQyxPQUFBLEVBQUFQLGNBQUEsR0FBQUMsQ0FBQSxNQUFrQkksQ0FBQSxDQUFPRyxFQUFZLEdBQ3JDQyxXQUFBLEVBQUFULGNBQUEsR0FBQUMsQ0FBQSxNQUFjSSxDQUFBLENBQU9LLEVBQW1CLEdBRWpELE1BQWdCLENBQUFDLGFBQUEsRUFBQVgsY0FBQSxHQUFBQyxDQUFBLE1BQWdCLEtBQ2hDLE1BQWdCLENBQUFXLGNBQUEsRUFBQVosY0FBQSxHQUFBQyxDQUFBLE1BQWlCLEdBRWxDWSx3QkFBQSxDQUF1QixDQUFBYixj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 \ No newline at end of file diff --git a/frontend/dist-instrumented/chunk-2HDQ4MOL.js.map b/frontend/dist-instrumented/chunk-2HDQ4MOL.js.map new file mode 100644 index 00000000..c7b56b65 --- /dev/null +++ b/frontend/dist-instrumented/chunk-2HDQ4MOL.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["src/app/core/notification/services/notification-api.service.ts", "src/app/features/notification/services/notification.service.ts", "src/app/features/notification/components/notification-item-component/notification-item-component.ts", "src/app/features/notification/components/notification-item-component/notification-item-component.html", "src/app/features/notification/components/notification-page-component/notification-page-component.ts", "src/app/features/notification/components/notification-page-component/notification-page-component.html"], + "sourcesContent": ["import { HttpClient } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\nimport { Observable, catchError, forkJoin, map, of, switchMap, take } from 'rxjs';\nimport { InternalAuthService } from '../../services/internal-auth.service';\nimport { NotificationEvent } from '../../../features/notification/models/notification-event.model';\nimport { API_BASE_URL } from '../../tokens/api-base-url.token';\nimport {\n DEFAULT_RESOLVED_NOTIFICATION_TITLE,\n DEFAULT_TRIGGERED_NOTIFICATION_TITLE,\n formatTriggeredNotificationTitle,\n} from '../utils/notification-title.util';\n\ninterface AlarmEventHistoryDto {\n id?: unknown;\n activationTime?: unknown;\n resolutionTime?: unknown;\n alarmName?: unknown;\n priority?: unknown;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class NotificationApiService {\n private readonly http = inject(HttpClient);\n private readonly baseUrl: string = inject(API_BASE_URL);\n private readonly authService = inject(InternalAuthService);\n\n private static readonly HISTORY_LIMIT = 100;\n private static readonly HISTORY_OFFSET = 0;\n\n public getNotificationsHistory(): Observable {\n return this.authService.getCurrentUser$().pipe(\n take(1),\n switchMap((session) => {\n if (!session) {\n return of([]);\n }\n\n const encodedUserId = encodeURIComponent(session.userId);\n\n return forkJoin([\n this.fetchManagedAlarmEvents(encodedUserId),\n this.fetchUnmanagedAlarmEvents(encodedUserId),\n ]).pipe(\n map(([managedEvents, unmanagedEvents]) =>\n this.mapAlarmEventsToNotifications([...managedEvents, ...unmanagedEvents])\n )\n );\n })\n );\n }\n\n private fetchManagedAlarmEvents(encodedUserId: string): Observable {\n const endpoint = `${this.baseUrl}/alarm-events/managed/${encodedUserId}/${NotificationApiService.HISTORY_LIMIT}/${NotificationApiService.HISTORY_OFFSET}`;\n\n return this.http.get(endpoint).pipe(\n map((response) => (Array.isArray(response) ? response : [])),\n catchError(() => of([]))\n );\n }\n\n private fetchUnmanagedAlarmEvents(encodedUserId: string): Observable {\n const endpoint = `${this.baseUrl}/alarm-events/unmanaged/${encodedUserId}/${NotificationApiService.HISTORY_LIMIT}/${NotificationApiService.HISTORY_OFFSET}`;\n\n return this.http.get(endpoint).pipe(\n map((response) => (Array.isArray(response) ? response : [])),\n catchError(() => of([]))\n );\n }\n\n private mapAlarmEventsToNotifications(alarmEvents: ReadonlyArray): NotificationEvent[] {\n const notifications: NotificationEvent[] = [];\n\n for (const alarmEvent of alarmEvents) {\n const mappedNotification = this.mapAlarmEventToNotification(alarmEvent);\n if (mappedNotification) {\n notifications.push(mappedNotification);\n }\n }\n\n return notifications;\n }\n\n private mapAlarmEventToNotification(alarmEvent: AlarmEventHistoryDto): NotificationEvent | null {\n const alarmEventId = typeof alarmEvent.id === 'string' ? alarmEvent.id : null;\n if (!alarmEventId) {\n return null;\n }\n\n const activationTime = this.toIsoString(alarmEvent.activationTime);\n const resolutionTime = this.toIsoString(alarmEvent.resolutionTime);\n const isResolved = resolutionTime !== null;\n const sentAt = isResolved ? resolutionTime : activationTime;\n\n if (!sentAt) {\n return null;\n }\n\n return {\n notificationId: `alarm-${isResolved ? 'resolved' : 'triggered'}-${alarmEventId}`,\n title: isResolved\n ? DEFAULT_RESOLVED_NOTIFICATION_TITLE\n : formatTriggeredNotificationTitle(alarmEvent.alarmName, alarmEvent.priority) || DEFAULT_TRIGGERED_NOTIFICATION_TITLE,\n sentAt,\n eventType: isResolved ? 'resolved' : 'triggered',\n };\n }\n\n private toIsoString(value: unknown): string | null {\n if (typeof value === 'string' && value.trim()) {\n return value;\n }\n\n if (value instanceof Date && !Number.isNaN(value.getTime())) {\n return value.toISOString();\n }\n\n return null;\n }\n}\n", "import { Injectable, inject } from '@angular/core';\nimport { combineLatest, catchError, map, Observable, of, shareReplay } from 'rxjs';\nimport { AlarmStateService } from '../../../core/alarm/services/alarm-state.service';\nimport { NotificationApiService } from '../../../core/notification/services/notification-api.service';\nimport { NotificationEvent } from '../models/notification-event.model';\nimport { NotificationListVm } from '../models/notification-list-vm.model';\n\n// Nasconde la complessità della composizione tra le sorgenti di dati dietro\n// un'interfaccia minimale: un unico campo pubblico `vm$`. Il componente smart\n// non conosce né la provenienza dei dati né la logica di fusione.\n\n// **Perché è component-scoped:** `NotificationService` mantiene sottoscrizioni\n// attive verso `AlarmStateService` tramite `combineLatest`. Legarne il ciclo\n// di vita al componente garantisce che queste sottoscrizioni vengano terminate\n// automaticamente quando `NotificationPageComponent` viene distrutto (navigazione\n// verso un'altra route), senza necessità di `ngOnDestroy` né di\n// `takeUntilDestroyed`. Angular gestisce tutto tramite il suo injector locale.\n\n\n@Injectable()\nexport class NotificationService {\n private readonly alarmStateService = inject(AlarmStateService);\n private readonly notificationApiService = inject(NotificationApiService);\n\n public removeNotification(notificationId: string): void {\n this.alarmStateService.dismissNotification(notificationId);\n this.alarmStateService.removeNotification(notificationId);\n }\n\n public clearAllNotifications(notifications: ReadonlyArray): void {\n if (notifications.length === 0) {\n return;\n }\n\n this.alarmStateService.dismissNotifications(\n notifications.map((notification) => notification.notificationId)\n );\n this.alarmStateService.clearNotifications();\n }\n\n public readonly vm$: Observable = combineLatest([\n this.notificationApiService\n .getNotificationsHistory()\n .pipe(catchError(() => of([]))),\n this.alarmStateService.getNotifications$(),\n this.alarmStateService.getUnreadNotificationsCount$(),\n this.alarmStateService.getDismissedNotificationIds$(),\n ]).pipe(\n map(([historic, inSession, unreadCount, dismissedNotificationIds]): NotificationListVm => {\n const merged = [...historic, ...inSession];\n const deduped = Array.from(\n new Map(merged.map((notification) => [notification.notificationId, notification])).values()\n ).filter((notification) => !dismissedNotificationIds.has(notification.notificationId));\n\n deduped.sort(\n (left, right) =>\n this.toUnixTimestamp(right.sentAt) - this.toUnixTimestamp(left.sentAt)\n );\n\n return {\n notifications: deduped,\n unreadCount,\n };\n }),\n\n\n shareReplay({ bufferSize: 1, refCount: false })\n );\n\n private toUnixTimestamp(dateValue: string): number {\n const timestamp = Date.parse(dateValue);\n return Number.isNaN(timestamp) ? 0 : timestamp;\n }\n}", "import { ChangeDetectionStrategy, Component, computed, input, output } from '@angular/core';\nimport { NotificationEvent } from '../../models/notification-event.model';\nimport { ElapsedTimePipe } from '../../../../shared/pipes/elapsed-time.pipe';\nimport { AlarmPriorityIndicatorComponent } from '../../../../shared/components/alarm-table/alarm-priority-indicator.component';\nimport {\n extractPriorityFromNotificationTitle,\n stripPriorityFromNotificationTitle,\n} from '../../../../core/notification/utils/notification-priority-display.util';\n\n@Component({\n selector: 'app-notification-item-component',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [ElapsedTimePipe, AlarmPriorityIndicatorComponent],\n templateUrl: './notification-item-component.html',\n styleUrl: './notification-item-component.css',\n})\nexport class NotificationItemComponent {\n public readonly notification = input.required();\n public readonly showRemoveAction = input(false);\n public readonly isHighlighted = input(false);\n public readonly removeClicked = output();\n public readonly sentAt = computed(() => this.notification().sentAt);\n public readonly isResolved = computed(() => {\n const eventType = this.notification().eventType;\n if (eventType === 'resolved') {\n return true;\n }\n\n return this.notification().title.trim().toLowerCase().includes('allarme risolto');\n });\n public readonly priority = computed(() =>\n extractPriorityFromNotificationTitle(this.notification().title)\n );\n public readonly displayTitle = computed(() =>\n stripPriorityFromNotificationTitle(this.notification().title) || this.notification().title\n );\n public readonly ariaLabel = computed(() => `Notifica: ${this.displayTitle()}`);\n\n public onRemove(): void {\n this.removeClicked.emit(this.notification().notificationId);\n }\n}", "\n @if (isResolved()) {\n
\n } @else {\n
\n }\n\n
\n \n \n \n \n
\n\n
\n
\n
\n @if (priority(); as notificationPriority) {\n \n }\n\n

\n {{ displayTitle() }}\n

\n
\n\n
\n \n {{ sentAt() | elapsedTime }}\n \n\n @if (showRemoveAction()) {\n \n \n \n \n \n }\n
\n
\n\n

\n Notifica di sistema registrata nel feed del reparto.\n

\n
\n \n", "import { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, inject } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { NotificationListVm } from '../../models/notification-list-vm.model';\nimport { NotificationService } from '../../services/notification.service';\nimport { NotificationItemComponent } from '../notification-item-component/notification-item-component';\nimport { Observable, map } from 'rxjs';\n\n@Component({\n selector: 'app-notification-page-component',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AsyncPipe, NotificationItemComponent],\n providers: [NotificationService],\n templateUrl: './notification-page-component.html',\n styleUrl: './notification-page-component.css',\n})\nexport class NotificationPageComponent {\n private readonly notificationService = inject(NotificationService);\n private readonly route = inject(ActivatedRoute);\n\n public readonly vm$: Observable = this.notificationService.vm$;\n public readonly highlightedNotificationId$: Observable = this.route.queryParamMap.pipe(\n map((params) => {\n const focusedId = params.get('focus');\n return focusedId && focusedId.trim().length > 0 ? focusedId : null;\n })\n );\n public readonly skeletonRows = [0, 1, 2];\n\n public onNotificationRemoved(notificationId: string): void {\n this.notificationService.removeNotification(notificationId);\n }\n\n public onClearAllNotifications(vm: NotificationListVm): void {\n this.notificationService.clearAllNotifications(vm.notifications);\n }\n\n public unreadSummaryLabel(unreadCount: number): string {\n if (unreadCount === 1) {\n return '1 notifica non letta';\n }\n\n return `${unreadCount} notifiche non lette`;\n }\n}", "\n
\n \n
\n
\n

CENTRO AVVISI\n

\n

\n Notifiche\n

\n

\n Cronologia degli avvisi ricevuti in tempo reale, relativi agli allarmi scattati.\n

\n
\n
\n \n\n @if (vm$ | async; as vm) {\n
\n
\n \n \n {{ unreadSummaryLabel(vm.unreadCount) }}\n \n\n @if (vm.notifications.length > 0) {\n \n Cancella tutte\n \n }\n
\n\n @if (vm.notifications.length > 0) {\n
    \n @for (notification of vm.notifications; track notification.notificationId; let index = $index) {\n
  • \n \n
  • \n }\n
\n } @else {\n \n
\n \n \n \n
\n\n

Nessuna notifica\n disponibile

\n
\n }\n
\n } @else {\n
\n
\n @for (skeleton of skeletonRows; track skeleton) {\n \n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n }\n
\n \n }\n \n"], + "mappings": "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", + "names": ["NotificationApiService", "http", "inject", "HttpClient", "baseUrl", "API_BASE_URL", "authService", "InternalAuthService", "HISTORY_LIMIT", "HISTORY_OFFSET", "getNotificationsHistory", "getCurrentUser$", "pipe", "take", "switchMap", "session", "of", "encodedUserId", "encodeURIComponent", "userId", "forkJoin", "fetchManagedAlarmEvents", "fetchUnmanagedAlarmEvents", "map", "managedEvents", "unmanagedEvents", "mapAlarmEventsToNotifications", "endpoint", "get", "response", "Array", "isArray", "catchError", "alarmEvents", "notifications", "alarmEvent", "mappedNotification", "mapAlarmEventToNotification", "push", "alarmEventId", "id", "activationTime", "toIsoString", "resolutionTime", "isResolved", "sentAt", "notificationId", "title", "DEFAULT_RESOLVED_NOTIFICATION_TITLE", "formatTriggeredNotificationTitle", "alarmName", "priority", "DEFAULT_TRIGGERED_NOTIFICATION_TITLE", "eventType", "value", "trim", "Date", "Number", "isNaN", "getTime", "toISOString", "factory", "\u0275fac", "providedIn", "NotificationService", "alarmStateService", "inject", "AlarmStateService", "notificationApiService", "NotificationApiService", "removeNotification", "notificationId", "dismissNotification", "clearAllNotifications", "notifications", "length", "dismissNotifications", "map", "notification", "clearNotifications", "vm$", "combineLatest", "getNotificationsHistory", "pipe", "catchError", "of", "getNotifications$", "getUnreadNotificationsCount$", "getDismissedNotificationIds$", "historic", "inSession", "unreadCount", "dismissedNotificationIds", "merged", "deduped", "Array", "from", "Map", "values", "filter", "has", "sort", "left", "right", "toUnixTimestamp", "sentAt", "shareReplay", "bufferSize", "refCount", "dateValue", "timestamp", "Date", "parse", "Number", "isNaN", "factory", "\u0275fac", "\u0275\u0275element", "\u0275\u0275property", "ctx", "\u0275\u0275elementStart", "\u0275\u0275listener", "\u0275\u0275restoreView", "_r1", "ctx_r1", "\u0275\u0275nextContext", "\u0275\u0275resetView", "onRemove", "\u0275\u0275elementEnd", "NotificationItemComponent", "notification", "input", "required", "showRemoveAction", "isHighlighted", "removeClicked", "output", "sentAt", "computed", "isResolved", "eventType", "title", "trim", "toLowerCase", "includes", "priority", "extractPriorityFromNotificationTitle", "displayTitle", "stripPriorityFromNotificationTitle", "ariaLabel", "emit", "notificationId", "selectors", "inputs", "outputs", "decls", "vars", "consts", "template", "rf", "\u0275\u0275conditionalCreate", "NotificationItemComponent_Conditional_1_Template", "NotificationItemComponent_Conditional_2_Template", "NotificationItemComponent_Conditional_10_Template", "\u0275\u0275text", "NotificationItemComponent_Conditional_17_Template", "\u0275\u0275classProp", "\u0275\u0275advance", "\u0275\u0275conditional", "tmp_4_0", "\u0275\u0275textInterpolate1", "\u0275\u0275pipeBind1", "AlarmPriorityIndicatorComponent", "ElapsedTimePipe", "styles", "changeDetection", "\u0275\u0275elementStart", "\u0275\u0275listener", "\u0275\u0275restoreView", "_r1", "vm_r2", "\u0275\u0275nextContext", "ctx_r2", "\u0275\u0275resetView", "onClearAllNotifications", "\u0275\u0275text", "\u0275\u0275elementEnd", "$event", "_r4", "onNotificationRemoved", "\u0275\u0275styleProp", "\u0275$index_38_r6", "\u0275\u0275advance", "\u0275\u0275property", "notification_r5", "notificationId", "\u0275\u0275pipeBind1", "highlightedNotificationId$", "\u0275\u0275repeaterCreate", "NotificationPageComponent_Conditional_11_Conditional_6_For_2_Template", "_forTrack0", "\u0275\u0275repeater", "notifications", "\u0275\u0275element", "\u0275\u0275conditionalCreate", "NotificationPageComponent_Conditional_11_Conditional_5_Template", "NotificationPageComponent_Conditional_11_Conditional_6_Template", "NotificationPageComponent_Conditional_11_Conditional_7_Template", "\u0275\u0275textInterpolate1", "unreadSummaryLabel", "unreadCount", "\u0275\u0275conditional", "length", "NotificationPageComponent_Conditional_13_For_3_Template", "\u0275\u0275repeaterTrackByIdentity", "skeletonRows", "NotificationPageComponent", "notificationService", "inject", "NotificationService", "route", "ActivatedRoute", "vm$", "queryParamMap", "pipe", "map", "params", "focusedId", "get", "trim", "removeNotification", "vm", "clearAllNotifications", "selectors", "features", "\u0275\u0275ProvidersFeature", "decls", "vars", "consts", "template", "rf", "ctx", "NotificationPageComponent_Conditional_11_Template", "\u0275\u0275conditionalBranchCreate", "NotificationPageComponent_Conditional_13_Template", "tmp_0_0", "NotificationItemComponent", "AsyncPipe", "styles", "changeDetection"] +} diff --git a/frontend/dist-instrumented/chunk-2S5V5XEE.js b/frontend/dist-instrumented/chunk-2S5V5XEE.js new file mode 100644 index 00000000..eb8b8095 --- /dev/null +++ b/frontend/dist-instrumented/chunk-2S5V5XEE.js @@ -0,0 +1,4 @@ +function cov_95ooh69hr(){var path="/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-2S5V5XEE.js";var hash="6bb11653b829e2c36bf53b6cbc4e487b24638767";var global=new Function("return this")();var gcv="__coverage__";var coverageData={path:"/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-2S5V5XEE.js",statementMap:{"0":{start:{line:1,column:200},end:{line:2,column:2335}},"1":{start:{line:1,column:232},end:{line:1,column:239}},"2":{start:{line:1,column:260},end:{line:1,column:264}},"3":{start:{line:1,column:280},end:{line:2,column:349}},"4":{start:{line:1,column:320},end:{line:2,column:112}},"5":{start:{line:2,column:21},end:{line:2,column:35}},"6":{start:{line:2,column:36},end:{line:2,column:110}},"7":{start:{line:2,column:50},end:{line:2,column:62}},"8":{start:{line:2,column:65},end:{line:2,column:84}},"9":{start:{line:2,column:85},end:{line:2,column:109}},"10":{start:{line:2,column:195},end:{line:2,column:219}},"11":{start:{line:2,column:242},end:{line:2,column:327}},"12":{start:{line:2,column:299},end:{line:2,column:325}},"13":{start:{line:2,column:357},end:{line:2,column:409}},"14":{start:{line:2,column:417},end:{line:2,column:429}},"15":{start:{line:2,column:435},end:{line:2,column:468}},"16":{start:{line:2,column:469},end:{line:2,column:499}},"17":{start:{line:2,column:507},end:{line:2,column:567}},"18":{start:{line:2,column:578},end:{line:2,column:636}},"19":{start:{line:2,column:649},end:{line:2,column:691}},"20":{start:{line:2,column:701},end:{line:2,column:743}},"21":{start:{line:2,column:756},end:{line:2,column:798}},"22":{start:{line:2,column:827},end:{line:2,column:885}},"23":{start:{line:2,column:893},end:{line:2,column:1088}},"24":{start:{line:2,column:1045},end:{line:2,column:1064}},"25":{start:{line:2,column:1101},end:{line:2,column:1242}},"26":{start:{line:2,column:1151},end:{line:2,column:1240}},"27":{start:{line:2,column:1258},end:{line:2,column:1263}},"28":{start:{line:2,column:1264},end:{line:2,column:1391}},"29":{start:{line:2,column:1413},end:{line:2,column:1433}},"30":{start:{line:2,column:1434},end:{line:2,column:1913}},"31":{start:{line:2,column:1469},end:{line:2,column:1476}},"32":{start:{line:2,column:1477},end:{line:2,column:1528}},"33":{start:{line:2,column:1521},end:{line:2,column:1528}},"34":{start:{line:2,column:1528},end:{line:2,column:1566}},"35":{start:{line:2,column:1572},end:{line:2,column:1615}},"36":{start:{line:2,column:1616},end:{line:2,column:1651}},"37":{start:{line:2,column:1651},end:{line:2,column:1657}},"38":{start:{line:2,column:1671},end:{line:2,column:1678}},"39":{start:{line:2,column:1679},end:{line:2,column:1907}},"40":{start:{line:2,column:1685},end:{line:2,column:1739}},"41":{start:{line:2,column:1750},end:{line:2,column:1769}},"42":{start:{line:2,column:1770},end:{line:2,column:1783}},"43":{start:{line:2,column:1776},end:{line:2,column:1783}},"44":{start:{line:2,column:1783},end:{line:2,column:1906}},"45":{start:{line:2,column:1797},end:{line:2,column:1814}},"46":{start:{line:2,column:1907},end:{line:2,column:1912}},"47":{start:{line:2,column:1940},end:{line:2,column:1955}},"48":{start:{line:2,column:1956},end:{line:2,column:2060}},"49":{start:{line:2,column:2089},end:{line:2,column:2134}},"50":{start:{line:2,column:2121},end:{line:2,column:2133}},"51":{start:{line:2,column:2137},end:{line:2,column:2152}},"52":{start:{line:2,column:2153},end:{line:2,column:2207}},"53":{start:{line:2,column:2219},end:{line:2,column:2333}},"54":{start:{line:2,column:2282},end:{line:2,column:2332}},"55":{start:{line:2,column:2342},end:{line:2,column:2581}},"56":{start:{line:2,column:2352},end:{line:2,column:2359}},"57":{start:{line:2,column:2369},end:{line:2,column:2398}},"58":{start:{line:2,column:2406},end:{line:2,column:2478}},"59":{start:{line:2,column:2489},end:{line:2,column:2519}},"60":{start:{line:2,column:2527},end:{line:2,column:2549}},"61":{start:{line:2,column:2557},end:{line:2,column:2579}},"62":{start:{line:2,column:2584},end:{line:2,column:2731}},"63":{start:{line:2,column:2603},end:{line:2,column:2615}},"64":{start:{line:2,column:2631},end:{line:2,column:2643}},"65":{start:{line:2,column:2657},end:{line:2,column:2685}},"66":{start:{line:2,column:2701},end:{line:2,column:2729}},"67":{start:{line:2,column:2755},end:{line:2,column:2762}},"68":{start:{line:2,column:2763},end:{line:2,column:2973}},"69":{start:{line:2,column:2831},end:{line:2,column:2845}},"70":{start:{line:2,column:2852},end:{line:2,column:2933}},"71":{start:{line:2,column:2936},end:{line:2,column:2948}},"72":{start:{line:2,column:2949},end:{line:2,column:2969}},"73":{start:{line:2,column:2981},end:{line:2,column:2998}},"74":{start:{line:2,column:3002},end:{line:2,column:3071}},"75":{start:{line:2,column:3087},end:{line:2,column:3143}},"76":{start:{line:2,column:3134},end:{line:2,column:3142}},"77":{start:{line:2,column:3158},end:{line:2,column:3170}},"78":{start:{line:2,column:3177},end:{line:2,column:4961}},"79":{start:{line:2,column:3205},end:{line:2,column:3209}},"80":{start:{line:2,column:3220},end:{line:2,column:3224}},"81":{start:{line:2,column:3243},end:{line:2,column:3531}},"82":{start:{line:2,column:3290},end:{line:2,column:3327}},"83":{start:{line:2,column:3306},end:{line:2,column:3327}},"84":{start:{line:2,column:3327},end:{line:2,column:3365}},"85":{start:{line:2,column:3371},end:{line:2,column:3531}},"86":{start:{line:2,column:3446},end:{line:2,column:3461}},"87":{start:{line:2,column:3464},end:{line:2,column:3496}},"88":{start:{line:2,column:3497},end:{line:2,column:3514}},"89":{start:{line:2,column:3539},end:{line:2,column:3573}},"90":{start:{line:2,column:3581},end:{line:2,column:3593}},"91":{start:{line:2,column:3599},end:{line:2,column:3614}},"92":{start:{line:2,column:3615},end:{line:2,column:3633}},"93":{start:{line:2,column:3644},end:{line:2,column:3684}},"94":{start:{line:2,column:3692},end:{line:2,column:3738}},"95":{start:{line:2,column:3751},end:{line:2,column:3794}},"96":{start:{line:2,column:3814},end:{line:2,column:3816}},"97":{start:{line:2,column:3817},end:{line:2,column:3976}},"98":{start:{line:2,column:3857},end:{line:2,column:3861}},"99":{start:{line:2,column:3862},end:{line:2,column:3960}},"100":{start:{line:2,column:3893},end:{line:2,column:3925}},"101":{start:{line:2,column:3986},end:{line:2,column:4029}},"102":{start:{line:2,column:4042},end:{line:2,column:4085}},"103":{start:{line:2,column:4097},end:{line:2,column:4272}},"104":{start:{line:2,column:4142},end:{line:2,column:4167}},"105":{start:{line:2,column:4168},end:{line:2,column:4242}},"106":{start:{line:2,column:4198},end:{line:2,column:4231}},"107":{start:{line:2,column:4255},end:{line:2,column:4261}},"108":{start:{line:2,column:4288},end:{line:2,column:4317}},"109":{start:{line:2,column:4318},end:{line:2,column:4398}},"110":{start:{line:2,column:4406},end:{line:2,column:4959}},"111":{start:{line:2,column:4521},end:{line:2,column:4562}},"112":{start:{line:2,column:4589},end:{line:2,column:4923}},"113":{start:{line:2,column:4624},end:{line:2,column:4669}},"114":{start:{line:2,column:4670},end:{line:2,column:4713}},"115":{start:{line:2,column:4713},end:{line:2,column:4719}},"116":{start:{line:2,column:4727},end:{line:2,column:4922}},"117":{start:{line:2,column:4754},end:{line:2,column:4779}},"118":{start:{line:2,column:4782},end:{line:2,column:4803}},"119":{start:{line:2,column:4804},end:{line:2,column:4885}},"120":{start:{line:2,column:4891},end:{line:2,column:4916}},"121":{start:{line:2,column:4916},end:{line:2,column:4921}},"122":{start:{line:2,column:4977},end:{line:2,column:5073}},"123":{start:{line:2,column:5047},end:{line:2,column:5056}},"124":{start:{line:2,column:5064},end:{line:2,column:5072}},"125":{start:{line:2,column:5089},end:{line:2,column:5144}},"126":{start:{line:2,column:5160},end:{line:2,column:5201}},"127":{start:{line:2,column:5217},end:{line:2,column:5266}},"128":{start:{line:2,column:5282},end:{line:2,column:5345}},"129":{start:{line:2,column:5353},end:{line:2,column:5367}},"130":{start:{line:2,column:5371},end:{line:2,column:5379}},"131":{start:{line:2,column:5383},end:{line:2,column:5395}},"132":{start:{line:2,column:5399},end:{line:2,column:5417}},"133":{start:{line:2,column:5421},end:{line:2,column:5440}},"134":{start:{line:2,column:5443},end:{line:2,column:8454}},"135":{start:{line:2,column:5460},end:{line:2,column:5464}},"136":{start:{line:2,column:5496},end:{line:2,column:5498}},"137":{start:{line:2,column:5515},end:{line:2,column:5517}},"138":{start:{line:2,column:5540},end:{line:2,column:5542}},"139":{start:{line:2,column:5619},end:{line:2,column:5625}},"140":{start:{line:2,column:5697},end:{line:2,column:5736}},"141":{start:{line:2,column:5742},end:{line:2,column:6546}},"142":{start:{line:2,column:5805},end:{line:2,column:6307}},"143":{start:{line:2,column:6218},end:{line:2,column:6284}},"144":{start:{line:2,column:6263},end:{line:2,column:6284}},"145":{start:{line:2,column:6284},end:{line:2,column:6306}},"146":{start:{line:2,column:6307},end:{line:2,column:6545}},"147":{start:{line:2,column:6546},end:{line:2,column:6799}},"148":{start:{line:2,column:6604},end:{line:2,column:6643}},"149":{start:{line:2,column:6654},end:{line:2,column:6676}},"150":{start:{line:2,column:6677},end:{line:2,column:6798}},"151":{start:{line:2,column:6693},end:{line:2,column:6714}},"152":{start:{line:2,column:6725},end:{line:2,column:6739}},"153":{start:{line:2,column:6742},end:{line:2,column:6772}},"154":{start:{line:2,column:6773},end:{line:2,column:6797}},"155":{start:{line:2,column:6816},end:{line:2,column:7114}},"156":{start:{line:2,column:7141},end:{line:2,column:7433}},"157":{start:{line:2,column:7452},end:{line:2,column:7473}},"158":{start:{line:2,column:7476},end:{line:2,column:7491}},"159":{start:{line:2,column:7494},end:{line:2,column:7527}},"160":{start:{line:2,column:7530},end:{line:2,column:7557}},"161":{start:{line:2,column:7560},end:{line:2,column:7585}},"162":{start:{line:2,column:7588},end:{line:2,column:7607}},"163":{start:{line:2,column:7610},end:{line:2,column:7627}},"164":{start:{line:2,column:7630},end:{line:2,column:7655}},"165":{start:{line:2,column:7658},end:{line:2,column:7689}},"166":{start:{line:2,column:7692},end:{line:2,column:7717}},"167":{start:{line:2,column:7720},end:{line:2,column:7747}},"168":{start:{line:2,column:7750},end:{line:2,column:7787}},"169":{start:{line:2,column:7790},end:{line:2,column:7825}},"170":{start:{line:2,column:7828},end:{line:2,column:7851}},"171":{start:{line:2,column:7854},end:{line:2,column:7886}},"172":{start:{line:2,column:7889},end:{line:2,column:7928}},"173":{start:{line:2,column:7931},end:{line:2,column:7968}},"174":{start:{line:2,column:7971},end:{line:2,column:7994}},"175":{start:{line:2,column:7997},end:{line:2,column:8018}},"176":{start:{line:2,column:8021},end:{line:2,column:8044}},"177":{start:{line:2,column:8045},end:{line:2,column:8452}},"178":{start:{line:2,column:8118},end:{line:2,column:8142}},"179":{start:{line:2,column:8202},end:{line:2,column:8225}},"180":{start:{line:2,column:8457},end:{line:2,column:8673}},"181":{start:{line:2,column:8470},end:{line:2,column:8664}},"182":{start:{line:2,column:8676},end:{line:2,column:9001}},"183":{start:{line:2,column:8772},end:{line:2,column:8999}},"184":{start:{line:2,column:9004},end:{line:2,column:9247}},"185":{start:{line:2,column:9040},end:{line:2,column:9048}},"186":{start:{line:2,column:9054},end:{line:2,column:9070}},"187":{start:{line:2,column:9083},end:{line:2,column:9245}},"188":{start:{line:2,column:9250},end:{line:2,column:9656}},"189":{start:{line:2,column:9291},end:{line:2,column:9337}},"190":{start:{line:2,column:9343},end:{line:2,column:9353}},"191":{start:{line:2,column:9366},end:{line:2,column:9654}},"192":{start:{line:2,column:9659},end:{line:2,column:9991}},"193":{start:{line:2,column:9680},end:{line:2,column:9699}},"194":{start:{line:2,column:9717},end:{line:2,column:9719}},"195":{start:{line:2,column:9735},end:{line:2,column:9989}},"196":{start:{line:2,column:9995},end:{line:2,column:9998}},"197":{start:{line:2,column:10002},end:{line:2,column:10005}},"198":{start:{line:2,column:10013},end:{line:2,column:10022}},"199":{start:{line:2,column:10030},end:{line:2,column:10044}},"200":{start:{line:2,column:10051},end:{line:2,column:12902}},"201":{start:{line:2,column:10091},end:{line:2,column:10110}},"202":{start:{line:2,column:10126},end:{line:2,column:10143}},"203":{start:{line:2,column:10167},end:{line:2,column:10239}},"204":{start:{line:2,column:10250},end:{line:2,column:10294}},"205":{start:{line:2,column:10272},end:{line:2,column:10294}},"206":{start:{line:2,column:10300},end:{line:2,column:10315}},"207":{start:{line:2,column:10316},end:{line:2,column:12766}},"208":{start:{line:2,column:10343},end:{line:2,column:12764}},"209":{start:{line:2,column:10359},end:{line:2,column:10368}},"210":{start:{line:2,column:10369},end:{line:2,column:10641}},"211":{start:{line:2,column:10472},end:{line:2,column:10505}},"212":{start:{line:2,column:10578},end:{line:2,column:10605}},"213":{start:{line:2,column:10606},end:{line:2,column:10640}},"214":{start:{line:2,column:10641},end:{line:2,column:10763}},"215":{start:{line:2,column:10699},end:{line:2,column:10727}},"216":{start:{line:2,column:10728},end:{line:2,column:10762}},"217":{start:{line:2,column:10769},end:{line:2,column:10786}},"218":{start:{line:2,column:10789},end:{line:2,column:10793}},"219":{start:{line:2,column:10796},end:{line:2,column:10970}},"220":{start:{line:2,column:10801},end:{line:2,column:10822}},"221":{start:{line:2,column:10813},end:{line:2,column:10822}},"222":{start:{line:2,column:10828},end:{line:2,column:10846}},"223":{start:{line:2,column:10849},end:{line:2,column:10881}},"224":{start:{line:2,column:10884},end:{line:2,column:10904}},"225":{start:{line:2,column:10905},end:{line:2,column:10969}},"226":{start:{line:2,column:10973},end:{line:2,column:11465}},"227":{start:{line:2,column:11046},end:{line:2,column:11049}},"228":{start:{line:2,column:11052},end:{line:2,column:11056}},"229":{start:{line:2,column:11057},end:{line:2,column:11135}},"230":{start:{line:2,column:11141},end:{line:2,column:11154}},"231":{start:{line:2,column:11155},end:{line:2,column:11305}},"232":{start:{line:2,column:11209},end:{line:2,column:11210}},"233":{start:{line:2,column:11211},end:{line:2,column:11230}},"234":{start:{line:2,column:11230},end:{line:2,column:11304}},"235":{start:{line:2,column:11234},end:{line:2,column:11261}},"236":{start:{line:2,column:11271},end:{line:2,column:11303}},"237":{start:{line:2,column:11305},end:{line:2,column:11463}},"238":{start:{line:2,column:11468},end:{line:2,column:11617}},"239":{start:{line:2,column:11508},end:{line:2,column:11511}},"240":{start:{line:2,column:11514},end:{line:2,column:11604}},"241":{start:{line:2,column:11605},end:{line:2,column:11615}},"242":{start:{line:2,column:11620},end:{line:2,column:11621}},"243":{start:{line:2,column:11622},end:{line:2,column:11840}},"244":{start:{line:2,column:11676},end:{line:2,column:11679}},"245":{start:{line:2,column:11682},end:{line:2,column:11825}},"246":{start:{line:2,column:11826},end:{line:2,column:11836}},"247":{start:{line:2,column:11846},end:{line:2,column:11848}},"248":{start:{line:2,column:11851},end:{line:2,column:12071}},"249":{start:{line:2,column:11880},end:{line:2,column:11902}},"250":{start:{line:2,column:11908},end:{line:2,column:11949}},"251":{start:{line:2,column:11950},end:{line:2,column:12069}},"252":{start:{line:2,column:12074},end:{line:2,column:12198}},"253":{start:{line:2,column:12109},end:{line:2,column:12148}},"254":{start:{line:2,column:12149},end:{line:2,column:12196}},"255":{start:{line:2,column:12199},end:{line:2,column:12762}},"256":{start:{line:2,column:12477},end:{line:2,column:12761}},"257":{start:{line:2,column:12784},end:{line:2,column:12820}},"258":{start:{line:2,column:12796},end:{line:2,column:12819}},"259":{start:{line:2,column:12839},end:{line:2,column:12889}},"260":{start:{line:2,column:12890},end:{line:2,column:12898}},"261":{start:{line:2,column:12920},end:{line:2,column:12931}},"262":{start:{line:2,column:12951},end:{line:2,column:12988}},"263":{start:{line:2,column:12964},end:{line:2,column:12988}},"264":{start:{line:2,column:12973},end:{line:2,column:12987}},"265":{start:{line:2,column:12980},end:{line:2,column:12986}},"266":{start:{line:2,column:12995},end:{line:2,column:13021}},"267":{start:{line:2,column:13017},end:{line:2,column:13019}},"268":{start:{line:2,column:13025},end:{line:2,column:13034}},"269":{start:{line:2,column:13038},end:{line:2,column:13064}},"270":{start:{line:2,column:13060},end:{line:2,column:13062}},"271":{start:{line:2,column:13071},end:{line:2,column:13255}},"272":{start:{line:2,column:13102},end:{line:2,column:13131}},"273":{start:{line:2,column:13114},end:{line:2,column:13130}},"274":{start:{line:2,column:13150},end:{line:2,column:13242}},"275":{start:{line:2,column:13187},end:{line:2,column:13191}},"276":{start:{line:2,column:13192},end:{line:2,column:13221}},"277":{start:{line:2,column:13243},end:{line:2,column:13251}},"278":{start:{line:2,column:13262},end:{line:2,column:13880}},"279":{start:{line:2,column:13299},end:{line:2,column:13303}},"280":{start:{line:2,column:13317},end:{line:2,column:13322}},"281":{start:{line:2,column:13345},end:{line:2,column:13350}},"282":{start:{line:2,column:13368},end:{line:2,column:13398}},"283":{start:{line:2,column:13409},end:{line:2,column:13570}},"284":{start:{line:2,column:13437},end:{line:2,column:13511}},"285":{start:{line:2,column:13512},end:{line:2,column:13569}},"286":{start:{line:2,column:13544},end:{line:2,column:13565}},"287":{start:{line:2,column:13570},end:{line:2,column:13740}},"288":{start:{line:2,column:13607},end:{line:2,column:13630}},"289":{start:{line:2,column:13631},end:{line:2,column:13688}},"290":{start:{line:2,column:13654},end:{line:2,column:13676}},"291":{start:{line:2,column:13694},end:{line:2,column:13740}},"292":{start:{line:2,column:13717},end:{line:2,column:13739}},"293":{start:{line:2,column:13758},end:{line:2,column:13798}},"294":{start:{line:2,column:13770},end:{line:2,column:13797}},"295":{start:{line:2,column:13817},end:{line:2,column:13867}},"296":{start:{line:2,column:13868},end:{line:2,column:13876}},"297":{start:{line:2,column:13883},end:{line:2,column:14067}},"298":{start:{line:2,column:13914},end:{line:2,column:13943}},"299":{start:{line:2,column:13926},end:{line:2,column:13942}},"300":{start:{line:2,column:13962},end:{line:2,column:14054}},"301":{start:{line:2,column:13999},end:{line:2,column:14003}},"302":{start:{line:2,column:14004},end:{line:2,column:14033}},"303":{start:{line:2,column:14055},end:{line:2,column:14063}},"304":{start:{line:2,column:14084},end:{line:2,column:14498}},"305":{start:{line:2,column:14506},end:{line:2,column:16399}},"306":{start:{line:2,column:14543},end:{line:2,column:14557}},"307":{start:{line:2,column:14582},end:{line:2,column:15169}},"308":{start:{line:2,column:14600},end:{line:2,column:14604}},"309":{start:{line:2,column:14615},end:{line:2,column:14669}},"310":{start:{line:2,column:14675},end:{line:2,column:15168}},"311":{start:{line:2,column:15175},end:{line:2,column:15214}},"312":{start:{line:2,column:15190},end:{line:2,column:15212}},"313":{start:{line:2,column:15215},end:{line:2,column:15264}},"314":{start:{line:2,column:15255},end:{line:2,column:15264}},"315":{start:{line:2,column:15270},end:{line:2,column:15298}},"316":{start:{line:2,column:15282},end:{line:2,column:15296}},"317":{start:{line:2,column:15299},end:{line:2,column:15799}},"318":{start:{line:2,column:15336},end:{line:2,column:15746}},"319":{start:{line:2,column:15377},end:{line:2,column:15486}},"320":{start:{line:2,column:15397},end:{line:2,column:15469}},"321":{start:{line:2,column:15448},end:{line:2,column:15469}},"322":{start:{line:2,column:15469},end:{line:2,column:15482}},"323":{start:{line:2,column:15497},end:{line:2,column:15599}},"324":{start:{line:2,column:15517},end:{line:2,column:15582}},"325":{start:{line:2,column:15561},end:{line:2,column:15582}},"326":{start:{line:2,column:15582},end:{line:2,column:15595}},"327":{start:{line:2,column:15610},end:{line:2,column:15710}},"328":{start:{line:2,column:15630},end:{line:2,column:15693}},"329":{start:{line:2,column:15672},end:{line:2,column:15693}},"330":{start:{line:2,column:15693},end:{line:2,column:15706}},"331":{start:{line:2,column:15718},end:{line:2,column:15745}},"332":{start:{line:2,column:15737},end:{line:2,column:15743}},"333":{start:{line:2,column:15761},end:{line:2,column:15770}},"334":{start:{line:2,column:15778},end:{line:2,column:15798}},"335":{start:{line:2,column:15815},end:{line:2,column:15848}},"336":{start:{line:2,column:15861},end:{line:2,column:15891}},"337":{start:{line:2,column:15905},end:{line:2,column:15936}},"338":{start:{line:2,column:15948},end:{line:2,column:16057}},"339":{start:{line:2,column:16074},end:{line:2,column:16108}},"340":{start:{line:2,column:16125},end:{line:2,column:16162}},"341":{start:{line:2,column:16178},end:{line:2,column:16214}},"342":{start:{line:2,column:16229},end:{line:2,column:16264}},"343":{start:{line:2,column:16282},end:{line:2,column:16317}},"344":{start:{line:2,column:16294},end:{line:2,column:16316}},"345":{start:{line:2,column:16336},end:{line:2,column:16386}},"346":{start:{line:2,column:16387},end:{line:2,column:16395}},"347":{start:{line:2,column:16407},end:{line:2,column:16433}},"348":{start:{line:2,column:16429},end:{line:2,column:16431}},"349":{start:{line:2,column:16437},end:{line:2,column:16449}},"350":{start:{line:2,column:16453},end:{line:2,column:16479}},"351":{start:{line:2,column:16475},end:{line:2,column:16477}},"352":{start:{line:2,column:16483},end:{line:2,column:16497}},"353":{start:{line:2,column:16501},end:{line:2,column:16527}},"354":{start:{line:2,column:16523},end:{line:2,column:16525}},"355":{start:{line:2,column:16531},end:{line:2,column:16915}},"356":{start:{line:2,column:16556},end:{line:2,column:16561}},"357":{start:{line:2,column:16566},end:{line:2,column:16571}},"358":{start:{line:2,column:16589},end:{line:2,column:16591}},"359":{start:{line:2,column:16602},end:{line:2,column:16606}},"360":{start:{line:2,column:16618},end:{line:2,column:16619}},"361":{start:{line:2,column:16637},end:{line:2,column:16656}},"362":{start:{line:2,column:16657},end:{line:2,column:16786}},"363":{start:{line:2,column:16804},end:{line:2,column:16833}},"364":{start:{line:2,column:16816},end:{line:2,column:16832}},"365":{start:{line:2,column:16852},end:{line:2,column:16902}},"366":{start:{line:2,column:16903},end:{line:2,column:16911}},"367":{start:{line:2,column:16919},end:{line:2,column:17104}},"368":{start:{line:2,column:16950},end:{line:2,column:16979}},"369":{start:{line:2,column:16962},end:{line:2,column:16978}},"370":{start:{line:2,column:16998},end:{line:2,column:17091}},"371":{start:{line:2,column:17035},end:{line:2,column:17039}},"372":{start:{line:2,column:17040},end:{line:2,column:17070}},"373":{start:{line:2,column:17092},end:{line:2,column:17100}},"374":{start:{line:2,column:17122},end:{line:2,column:17181}},"375":{start:{line:2,column:17169},end:{line:2,column:17181}},"376":{start:{line:2,column:17181},end:{line:2,column:17291}},"377":{start:{line:2,column:17191},end:{line:2,column:17201}},"378":{start:{line:2,column:17213},end:{line:2,column:17223}},"379":{start:{line:2,column:17235},end:{line:2,column:17251}},"380":{start:{line:2,column:17252},end:{line:2,column:17272}},"381":{start:{line:2,column:17261},end:{line:2,column:17272}},"382":{start:{line:2,column:17279},end:{line:2,column:17290}},"383":{start:{line:2,column:17297},end:{line:2,column:17313}},"384":{start:{line:2,column:17316},end:{line:2,column:17321}},"385":{start:{line:2,column:17322},end:{line:2,column:17403}},"386":{start:{line:2,column:17410},end:{line:2,column:17731}},"387":{start:{line:2,column:17423},end:{line:2,column:17722}},"388":{start:{line:2,column:17749},end:{line:2,column:17787}},"389":{start:{line:2,column:17812},end:{line:2,column:17930}},"390":{start:{line:2,column:17870},end:{line:2,column:17895}},"391":{start:{line:2,column:17931},end:{line:2,column:17975}},"392":{start:{line:2,column:17946},end:{line:2,column:17975}},"393":{start:{line:2,column:17975},end:{line:2,column:17987}},"394":{start:{line:2,column:18003},end:{line:2,column:18072}},"395":{start:{line:2,column:18038},end:{line:2,column:18069}},"396":{start:{line:2,column:18080},end:{line:2,column:18101}}},fnMap:{"0":{name:"(anonymous_0)",decl:{start:{line:1,column:265},end:{line:1,column:266}},loc:{start:{line:1,column:279},end:{line:2,column:350}},line:1},"1":{name:"(anonymous_1)",decl:{start:{line:1,column:315},end:{line:1,column:316}},loc:{start:{line:1,column:319},end:{line:2,column:113}},line:1},"2":{name:"(anonymous_2)",decl:{start:{line:2,column:11},end:{line:2,column:12}},loc:{start:{line:2,column:14},end:{line:2,column:111}},line:2},"3":{name:"(anonymous_3)",decl:{start:{line:2,column:187},end:{line:2,column:188}},loc:{start:{line:2,column:194},end:{line:2,column:220}},line:2},"4":{name:"(anonymous_4)",decl:{start:{line:2,column:237},end:{line:2,column:238}},loc:{start:{line:2,column:241},end:{line:2,column:328}},line:2},"5":{name:"(anonymous_5)",decl:{start:{line:2,column:289},end:{line:2,column:290}},loc:{start:{line:2,column:298},end:{line:2,column:326}},line:2},"6":{name:"(anonymous_6)",decl:{start:{line:2,column:350},end:{line:2,column:351}},loc:{start:{line:2,column:356},end:{line:2,column:410}},line:2},"7":{name:"(anonymous_7)",decl:{start:{line:2,column:410},end:{line:2,column:411}},loc:{start:{line:2,column:416},end:{line:2,column:500}},line:2},"8":{name:"(anonymous_8)",decl:{start:{line:2,column:500},end:{line:2,column:501}},loc:{start:{line:2,column:506},end:{line:2,column:568}},line:2},"9":{name:"(anonymous_9)",decl:{start:{line:2,column:568},end:{line:2,column:569}},loc:{start:{line:2,column:577},end:{line:2,column:637}},line:2},"10":{name:"(anonymous_10)",decl:{start:{line:2,column:637},end:{line:2,column:638}},loc:{start:{line:2,column:648},end:{line:2,column:692}},line:2},"11":{name:"(anonymous_11)",decl:{start:{line:2,column:692},end:{line:2,column:693}},loc:{start:{line:2,column:700},end:{line:2,column:744}},line:2},"12":{name:"(anonymous_12)",decl:{start:{line:2,column:744},end:{line:2,column:745}},loc:{start:{line:2,column:755},end:{line:2,column:799}},line:2},"13":{name:"(anonymous_13)",decl:{start:{line:2,column:799},end:{line:2,column:800}},loc:{start:{line:2,column:826},end:{line:2,column:886}},line:2},"14":{name:"(anonymous_14)",decl:{start:{line:2,column:886},end:{line:2,column:887}},loc:{start:{line:2,column:892},end:{line:2,column:1089}},line:2},"15":{name:"(anonymous_15)",decl:{start:{line:2,column:1042},end:{line:2,column:1043}},loc:{start:{line:2,column:1045},end:{line:2,column:1064}},line:2},"16":{name:"(anonymous_16)",decl:{start:{line:2,column:1089},end:{line:2,column:1090}},loc:{start:{line:2,column:1100},end:{line:2,column:1243}},line:2},"17":{name:"(anonymous_17)",decl:{start:{line:2,column:1147},end:{line:2,column:1148}},loc:{start:{line:2,column:1150},end:{line:2,column:1241}},line:2},"18":{name:"(anonymous_18)",decl:{start:{line:2,column:1243},end:{line:2,column:1244}},loc:{start:{line:2,column:1251},end:{line:2,column:1392}},line:2},"19":{name:"(anonymous_19)",decl:{start:{line:2,column:1392},end:{line:2,column:1393}},loc:{start:{line:2,column:1406},end:{line:2,column:1914}},line:2},"20":{name:"(anonymous_20)",decl:{start:{line:2,column:1794},end:{line:2,column:1795}},loc:{start:{line:2,column:1797},end:{line:2,column:1814}},line:2},"21":{name:"(anonymous_21)",decl:{start:{line:2,column:1914},end:{line:2,column:1915}},loc:{start:{line:2,column:1933},end:{line:2,column:2061}},line:2},"22":{name:"(anonymous_22)",decl:{start:{line:2,column:2061},end:{line:2,column:2062}},loc:{start:{line:2,column:2082},end:{line:2,column:2208}},line:2},"23":{name:"(anonymous_23)",decl:{start:{line:2,column:2118},end:{line:2,column:2119}},loc:{start:{line:2,column:2121},end:{line:2,column:2133}},line:2},"24":{name:"(anonymous_24)",decl:{start:{line:2,column:2208},end:{line:2,column:2209}},loc:{start:{line:2,column:2218},end:{line:2,column:2334}},line:2},"25":{name:"(anonymous_25)",decl:{start:{line:2,column:2279},end:{line:2,column:2280}},loc:{start:{line:2,column:2282},end:{line:2,column:2332}},line:2},"26":{name:"(anonymous_26)",decl:{start:{line:2,column:2360},end:{line:2,column:2361}},loc:{start:{line:2,column:2368},end:{line:2,column:2399}},line:2},"27":{name:"(anonymous_27)",decl:{start:{line:2,column:2399},end:{line:2,column:2400}},loc:{start:{line:2,column:2405},end:{line:2,column:2479}},line:2},"28":{name:"(anonymous_28)",decl:{start:{line:2,column:2479},end:{line:2,column:2480}},loc:{start:{line:2,column:2488},end:{line:2,column:2520}},line:2},"29":{name:"(anonymous_29)",decl:{start:{line:2,column:2520},end:{line:2,column:2521}},loc:{start:{line:2,column:2526},end:{line:2,column:2550}},line:2},"30":{name:"(anonymous_30)",decl:{start:{line:2,column:2550},end:{line:2,column:2551}},loc:{start:{line:2,column:2556},end:{line:2,column:2580}},line:2},"31":{name:"(anonymous_31)",decl:{start:{line:2,column:2590},end:{line:2,column:2591}},loc:{start:{line:2,column:2602},end:{line:2,column:2616}},line:2},"32":{name:"(anonymous_32)",decl:{start:{line:2,column:2616},end:{line:2,column:2617}},loc:{start:{line:2,column:2630},end:{line:2,column:2644}},line:2},"33":{name:"(anonymous_33)",decl:{start:{line:2,column:2644},end:{line:2,column:2645}},loc:{start:{line:2,column:2656},end:{line:2,column:2686}},line:2},"34":{name:"(anonymous_34)",decl:{start:{line:2,column:2686},end:{line:2,column:2687}},loc:{start:{line:2,column:2700},end:{line:2,column:2730}},line:2},"35":{name:"be",decl:{start:{line:2,column:2741},end:{line:2,column:2743}},loc:{start:{line:2,column:2748},end:{line:2,column:2974}},line:2},"36":{name:"(anonymous_36)",decl:{start:{line:2,column:2821},end:{line:2,column:2822}},loc:{start:{line:2,column:2824},end:{line:2,column:2970}},line:2},"37":{name:"de",decl:{start:{line:2,column:3081},end:{line:2,column:3083}},loc:{start:{line:2,column:3086},end:{line:2,column:3144}},line:2},"38":{name:"(anonymous_38)",decl:{start:{line:2,column:3127},end:{line:2,column:3128}},loc:{start:{line:2,column:3134},end:{line:2,column:3142}},line:2},"39":{name:"U",decl:{start:{line:2,column:3153},end:{line:2,column:3154}},loc:{start:{line:2,column:3157},end:{line:2,column:3171}},line:2},"40":{name:"(anonymous_40)",decl:{start:{line:2,column:3225},end:{line:2,column:3226}},loc:{start:{line:2,column:3242},end:{line:2,column:3532}},line:2},"41":{name:"(anonymous_41)",decl:{start:{line:2,column:3436},end:{line:2,column:3437}},loc:{start:{line:2,column:3439},end:{line:2,column:3515}},line:2},"42":{name:"(anonymous_42)",decl:{start:{line:2,column:3532},end:{line:2,column:3533}},loc:{start:{line:2,column:3538},end:{line:2,column:3574}},line:2},"43":{name:"(anonymous_43)",decl:{start:{line:2,column:3574},end:{line:2,column:3575}},loc:{start:{line:2,column:3580},end:{line:2,column:3634}},line:2},"44":{name:"(anonymous_44)",decl:{start:{line:2,column:3634},end:{line:2,column:3635}},loc:{start:{line:2,column:3643},end:{line:2,column:3685}},line:2},"45":{name:"(anonymous_45)",decl:{start:{line:2,column:3685},end:{line:2,column:3686}},loc:{start:{line:2,column:3691},end:{line:2,column:3739}},line:2},"46":{name:"(anonymous_46)",decl:{start:{line:2,column:3739},end:{line:2,column:3740}},loc:{start:{line:2,column:3750},end:{line:2,column:3795}},line:2},"47":{name:"(anonymous_47)",decl:{start:{line:2,column:3795},end:{line:2,column:3796}},loc:{start:{line:2,column:3807},end:{line:2,column:3977}},line:2},"48":{name:"(anonymous_48)",decl:{start:{line:2,column:3847},end:{line:2,column:3848}},loc:{start:{line:2,column:3850},end:{line:2,column:3961}},line:2},"49":{name:"(anonymous_49)",decl:{start:{line:2,column:3889},end:{line:2,column:3890}},loc:{start:{line:2,column:3892},end:{line:2,column:3926}},line:2},"50":{name:"(anonymous_50)",decl:{start:{line:2,column:3977},end:{line:2,column:3978}},loc:{start:{line:2,column:3985},end:{line:2,column:4030}},line:2},"51":{name:"(anonymous_51)",decl:{start:{line:2,column:4030},end:{line:2,column:4031}},loc:{start:{line:2,column:4041},end:{line:2,column:4086}},line:2},"52":{name:"(anonymous_52)",decl:{start:{line:2,column:4086},end:{line:2,column:4087}},loc:{start:{line:2,column:4096},end:{line:2,column:4273}},line:2},"53":{name:"(anonymous_53)",decl:{start:{line:2,column:4132},end:{line:2,column:4133}},loc:{start:{line:2,column:4135},end:{line:2,column:4243}},line:2},"54":{name:"(anonymous_54)",decl:{start:{line:2,column:4195},end:{line:2,column:4196}},loc:{start:{line:2,column:4198},end:{line:2,column:4231}},line:2},"55":{name:"(anonymous_55)",decl:{start:{line:2,column:4252},end:{line:2,column:4253}},loc:{start:{line:2,column:4255},end:{line:2,column:4261}},line:2},"56":{name:"(anonymous_56)",decl:{start:{line:2,column:4273},end:{line:2,column:4274}},loc:{start:{line:2,column:4281},end:{line:2,column:4399}},line:2},"57":{name:"(anonymous_57)",decl:{start:{line:2,column:4399},end:{line:2,column:4400}},loc:{start:{line:2,column:4405},end:{line:2,column:4960}},line:2},"58":{name:"(anonymous_58)",decl:{start:{line:2,column:4518},end:{line:2,column:4519}},loc:{start:{line:2,column:4521},end:{line:2,column:4562}},line:2},"59":{name:"(anonymous_59)",decl:{start:{line:2,column:4585},end:{line:2,column:4586}},loc:{start:{line:2,column:4588},end:{line:2,column:4924}},line:2},"60":{name:"Me",decl:{start:{line:2,column:4971},end:{line:2,column:4973}},loc:{start:{line:2,column:4976},end:{line:2,column:5074}},line:2},"61":{name:"le",decl:{start:{line:2,column:5083},end:{line:2,column:5085}},loc:{start:{line:2,column:5088},end:{line:2,column:5145}},line:2},"62":{name:"ue",decl:{start:{line:2,column:5154},end:{line:2,column:5156}},loc:{start:{line:2,column:5159},end:{line:2,column:5202}},line:2},"63":{name:"he",decl:{start:{line:2,column:5211},end:{line:2,column:5213}},loc:{start:{line:2,column:5216},end:{line:2,column:5267}},line:2},"64":{name:"Ne",decl:{start:{line:2,column:5276},end:{line:2,column:5278}},loc:{start:{line:2,column:5281},end:{line:2,column:5346}},line:2},"65":{name:"(anonymous_65)",decl:{start:{line:2,column:5676},end:{line:2,column:5677}},loc:{start:{line:2,column:5696},end:{line:2,column:6800}},line:2},"66":{name:"(anonymous_66)",decl:{start:{line:2,column:6800},end:{line:2,column:6801}},loc:{start:{line:2,column:6815},end:{line:2,column:7115}},line:2},"67":{name:"(anonymous_67)",decl:{start:{line:2,column:7115},end:{line:2,column:7116}},loc:{start:{line:2,column:7140},end:{line:2,column:7434}},line:2},"68":{name:"(anonymous_68)",decl:{start:{line:2,column:7434},end:{line:2,column:7435}},loc:{start:{line:2,column:7445},end:{line:2,column:8453}},line:2},"69":{name:"(anonymous_69)",decl:{start:{line:2,column:8111},end:{line:2,column:8112}},loc:{start:{line:2,column:8118},end:{line:2,column:8142}},line:2},"70":{name:"(anonymous_70)",decl:{start:{line:2,column:8195},end:{line:2,column:8196}},loc:{start:{line:2,column:8202},end:{line:2,column:8225}},line:2},"71":{name:"(anonymous_71)",decl:{start:{line:2,column:8458},end:{line:2,column:8459}},loc:{start:{line:2,column:8469},end:{line:2,column:8665}},line:2},"72":{name:"(anonymous_72)",decl:{start:{line:2,column:8744},end:{line:2,column:8745}},loc:{start:{line:2,column:8771},end:{line:2,column:9000}},line:2},"73":{name:"(anonymous_73)",decl:{start:{line:2,column:9022},end:{line:2,column:9023}},loc:{start:{line:2,column:9039},end:{line:2,column:9049}},line:2},"74":{name:"(anonymous_74)",decl:{start:{line:2,column:9071},end:{line:2,column:9072}},loc:{start:{line:2,column:9082},end:{line:2,column:9246}},line:2},"75":{name:"(anonymous_75)",decl:{start:{line:2,column:9273},end:{line:2,column:9274}},loc:{start:{line:2,column:9290},end:{line:2,column:9338}},line:2},"76":{name:"(anonymous_76)",decl:{start:{line:2,column:9354},end:{line:2,column:9355}},loc:{start:{line:2,column:9365},end:{line:2,column:9655}},line:2},"77":{name:"(anonymous_77)",decl:{start:{line:2,column:9720},end:{line:2,column:9721}},loc:{start:{line:2,column:9734},end:{line:2,column:9990}},line:2},"78":{name:"(anonymous_78)",decl:{start:{line:2,column:10052},end:{line:2,column:10053}},loc:{start:{line:2,column:10056},end:{line:2,column:12899}},line:2},"79":{name:"(anonymous_79)",decl:{start:{line:2,column:10111},end:{line:2,column:10112}},loc:{start:{line:2,column:10125},end:{line:2,column:10144}},line:2},"80":{name:"(anonymous_80)",decl:{start:{line:2,column:10144},end:{line:2,column:10145}},loc:{start:{line:2,column:10166},end:{line:2,column:10240}},line:2},"81":{name:"(anonymous_81)",decl:{start:{line:2,column:10240},end:{line:2,column:10241}},loc:{start:{line:2,column:10249},end:{line:2,column:12767}},line:2},"82":{name:"(anonymous_82)",decl:{start:{line:2,column:10339},end:{line:2,column:10340}},loc:{start:{line:2,column:10343},end:{line:2,column:12764}},line:2},"83":{name:"(anonymous_83)",decl:{start:{line:2,column:10349},end:{line:2,column:10350}},loc:{start:{line:2,column:10352},end:{line:2,column:12763}},line:2},"84":{name:"(anonymous_84)",decl:{start:{line:2,column:10465},end:{line:2,column:10466}},loc:{start:{line:2,column:10472},end:{line:2,column:10505}},line:2},"85":{name:"(anonymous_85)",decl:{start:{line:2,column:10796},end:{line:2,column:10797}},loc:{start:{line:2,column:10800},end:{line:2,column:10970}},line:2},"86":{name:"(anonymous_86)",decl:{start:{line:2,column:10998},end:{line:2,column:10999}},loc:{start:{line:2,column:11002},end:{line:2,column:11464}},line:2},"87":{name:"(anonymous_87)",decl:{start:{line:2,column:11493},end:{line:2,column:11494}},loc:{start:{line:2,column:11496},end:{line:2,column:11616}},line:2},"88":{name:"(anonymous_88)",decl:{start:{line:2,column:11661},end:{line:2,column:11662}},loc:{start:{line:2,column:11664},end:{line:2,column:11837}},line:2},"89":{name:"(anonymous_89)",decl:{start:{line:2,column:11876},end:{line:2,column:11877}},loc:{start:{line:2,column:11879},end:{line:2,column:12070}},line:2},"90":{name:"(anonymous_90)",decl:{start:{line:2,column:12099},end:{line:2,column:12100}},loc:{start:{line:2,column:12102},end:{line:2,column:12197}},line:2},"91":{name:"(anonymous_91)",decl:{start:{line:2,column:12472},end:{line:2,column:12473}},loc:{start:{line:2,column:12476},end:{line:2,column:12762}},line:2},"92":{name:"(anonymous_92)",decl:{start:{line:2,column:12784},end:{line:2,column:12785}},loc:{start:{line:2,column:12795},end:{line:2,column:12820}},line:2},"93":{name:"_e",decl:{start:{line:2,column:12912},end:{line:2,column:12914}},loc:{start:{line:2,column:12919},end:{line:2,column:12932}},line:2},"94":{name:"xe",decl:{start:{line:2,column:12941},end:{line:2,column:12943}},loc:{start:{line:2,column:12950},end:{line:2,column:12989}},line:2},"95":{name:"(anonymous_95)",decl:{start:{line:2,column:12957},end:{line:2,column:12958}},loc:{start:{line:2,column:12964},end:{line:2,column:12988}},line:2},"96":{name:"(anonymous_96)",decl:{start:{line:2,column:12969},end:{line:2,column:12970}},loc:{start:{line:2,column:12973},end:{line:2,column:12987}},line:2},"97":{name:"(anonymous_97)",decl:{start:{line:2,column:12977},end:{line:2,column:12978}},loc:{start:{line:2,column:12980},end:{line:2,column:12986}},line:2},"98":{name:"(anonymous_98)",decl:{start:{line:2,column:13013},end:{line:2,column:13014}},loc:{start:{line:2,column:13017},end:{line:2,column:13019}},line:2},"99":{name:"(anonymous_99)",decl:{start:{line:2,column:13056},end:{line:2,column:13057}},loc:{start:{line:2,column:13060},end:{line:2,column:13062}},line:2},"100":{name:"(anonymous_100)",decl:{start:{line:2,column:13072},end:{line:2,column:13073}},loc:{start:{line:2,column:13076},end:{line:2,column:13252}},line:2},"101":{name:"(anonymous_101)",decl:{start:{line:2,column:13102},end:{line:2,column:13103}},loc:{start:{line:2,column:13113},end:{line:2,column:13131}},line:2},"102":{name:"(anonymous_102)",decl:{start:{line:2,column:13169},end:{line:2,column:13170}},loc:{start:{line:2,column:13180},end:{line:2,column:13222}},line:2},"103":{name:"(anonymous_103)",decl:{start:{line:2,column:13263},end:{line:2,column:13264}},loc:{start:{line:2,column:13267},end:{line:2,column:13877}},line:2},"104":{name:"(anonymous_104)",decl:{start:{line:2,column:13351},end:{line:2,column:13352}},loc:{start:{line:2,column:13367},end:{line:2,column:13399}},line:2},"105":{name:"(anonymous_105)",decl:{start:{line:2,column:13399},end:{line:2,column:13400}},loc:{start:{line:2,column:13408},end:{line:2,column:13741}},line:2},"106":{name:"(anonymous_106)",decl:{start:{line:2,column:13537},end:{line:2,column:13538}},loc:{start:{line:2,column:13544},end:{line:2,column:13565}},line:2},"107":{name:"(anonymous_107)",decl:{start:{line:2,column:13651},end:{line:2,column:13652}},loc:{start:{line:2,column:13654},end:{line:2,column:13676}},line:2},"108":{name:"(anonymous_108)",decl:{start:{line:2,column:13714},end:{line:2,column:13715}},loc:{start:{line:2,column:13717},end:{line:2,column:13739}},line:2},"109":{name:"(anonymous_109)",decl:{start:{line:2,column:13758},end:{line:2,column:13759}},loc:{start:{line:2,column:13769},end:{line:2,column:13798}},line:2},"110":{name:"(anonymous_110)",decl:{start:{line:2,column:13884},end:{line:2,column:13885}},loc:{start:{line:2,column:13888},end:{line:2,column:14064}},line:2},"111":{name:"(anonymous_111)",decl:{start:{line:2,column:13914},end:{line:2,column:13915}},loc:{start:{line:2,column:13925},end:{line:2,column:13943}},line:2},"112":{name:"(anonymous_112)",decl:{start:{line:2,column:13981},end:{line:2,column:13982}},loc:{start:{line:2,column:13992},end:{line:2,column:14034}},line:2},"113":{name:"$",decl:{start:{line:2,column:14077},end:{line:2,column:14078}},loc:{start:{line:2,column:14083},end:{line:2,column:14499}},line:2},"114":{name:"(anonymous_114)",decl:{start:{line:2,column:14507},end:{line:2,column:14508}},loc:{start:{line:2,column:14511},end:{line:2,column:16396}},line:2},"115":{name:"(anonymous_115)",decl:{start:{line:2,column:14528},end:{line:2,column:14529}},loc:{start:{line:2,column:14542},end:{line:2,column:14558}},line:2},"116":{name:"(anonymous_116)",decl:{start:{line:2,column:14558},end:{line:2,column:14559}},loc:{start:{line:2,column:14575},end:{line:2,column:15800}},line:2},"117":{name:"(anonymous_117)",decl:{start:{line:2,column:15187},end:{line:2,column:15188}},loc:{start:{line:2,column:15190},end:{line:2,column:15212}},line:2},"118":{name:"(anonymous_118)",decl:{start:{line:2,column:15279},end:{line:2,column:15280}},loc:{start:{line:2,column:15282},end:{line:2,column:15296}},line:2},"119":{name:"(anonymous_119)",decl:{start:{line:2,column:15393},end:{line:2,column:15394}},loc:{start:{line:2,column:15396},end:{line:2,column:15483}},line:2},"120":{name:"(anonymous_120)",decl:{start:{line:2,column:15513},end:{line:2,column:15514}},loc:{start:{line:2,column:15516},end:{line:2,column:15596}},line:2},"121":{name:"(anonymous_121)",decl:{start:{line:2,column:15626},end:{line:2,column:15627}},loc:{start:{line:2,column:15629},end:{line:2,column:15707}},line:2},"122":{name:"(anonymous_122)",decl:{start:{line:2,column:15734},end:{line:2,column:15735}},loc:{start:{line:2,column:15737},end:{line:2,column:15743}},line:2},"123":{name:"(anonymous_123)",decl:{start:{line:2,column:15800},end:{line:2,column:15801}},loc:{start:{line:2,column:15814},end:{line:2,column:15849}},line:2},"124":{name:"(anonymous_124)",decl:{start:{line:2,column:15849},end:{line:2,column:15850}},loc:{start:{line:2,column:15860},end:{line:2,column:15892}},line:2},"125":{name:"(anonymous_125)",decl:{start:{line:2,column:15892},end:{line:2,column:15893}},loc:{start:{line:2,column:15904},end:{line:2,column:15937}},line:2},"126":{name:"(anonymous_126)",decl:{start:{line:2,column:15937},end:{line:2,column:15938}},loc:{start:{line:2,column:15947},end:{line:2,column:16058}},line:2},"127":{name:"(anonymous_127)",decl:{start:{line:2,column:16058},end:{line:2,column:16059}},loc:{start:{line:2,column:16073},end:{line:2,column:16109}},line:2},"128":{name:"(anonymous_128)",decl:{start:{line:2,column:16109},end:{line:2,column:16110}},loc:{start:{line:2,column:16124},end:{line:2,column:16163}},line:2},"129":{name:"(anonymous_129)",decl:{start:{line:2,column:16163},end:{line:2,column:16164}},loc:{start:{line:2,column:16177},end:{line:2,column:16215}},line:2},"130":{name:"(anonymous_130)",decl:{start:{line:2,column:16215},end:{line:2,column:16216}},loc:{start:{line:2,column:16228},end:{line:2,column:16265}},line:2},"131":{name:"(anonymous_131)",decl:{start:{line:2,column:16282},end:{line:2,column:16283}},loc:{start:{line:2,column:16293},end:{line:2,column:16317}},line:2},"132":{name:"(anonymous_132)",decl:{start:{line:2,column:16425},end:{line:2,column:16426}},loc:{start:{line:2,column:16429},end:{line:2,column:16431}},line:2},"133":{name:"(anonymous_133)",decl:{start:{line:2,column:16471},end:{line:2,column:16472}},loc:{start:{line:2,column:16475},end:{line:2,column:16477}},line:2},"134":{name:"(anonymous_134)",decl:{start:{line:2,column:16519},end:{line:2,column:16520}},loc:{start:{line:2,column:16523},end:{line:2,column:16525}},line:2},"135":{name:"(anonymous_135)",decl:{start:{line:2,column:16532},end:{line:2,column:16533}},loc:{start:{line:2,column:16536},end:{line:2,column:16912}},line:2},"136":{name:"(anonymous_136)",decl:{start:{line:2,column:16620},end:{line:2,column:16621}},loc:{start:{line:2,column:16630},end:{line:2,column:16787}},line:2},"137":{name:"(anonymous_137)",decl:{start:{line:2,column:16804},end:{line:2,column:16805}},loc:{start:{line:2,column:16815},end:{line:2,column:16833}},line:2},"138":{name:"(anonymous_138)",decl:{start:{line:2,column:16920},end:{line:2,column:16921}},loc:{start:{line:2,column:16924},end:{line:2,column:17101}},line:2},"139":{name:"(anonymous_139)",decl:{start:{line:2,column:16950},end:{line:2,column:16951}},loc:{start:{line:2,column:16961},end:{line:2,column:16979}},line:2},"140":{name:"(anonymous_140)",decl:{start:{line:2,column:17017},end:{line:2,column:17018}},loc:{start:{line:2,column:17028},end:{line:2,column:17071}},line:2},"141":{name:"Be",decl:{start:{line:2,column:17114},end:{line:2,column:17116}},loc:{start:{line:2,column:17121},end:{line:2,column:17404}},line:2},"142":{name:"(anonymous_142)",decl:{start:{line:2,column:17411},end:{line:2,column:17412}},loc:{start:{line:2,column:17422},end:{line:2,column:17723}},line:2},"143":{name:"ze",decl:{start:{line:2,column:17741},end:{line:2,column:17743}},loc:{start:{line:2,column:17748},end:{line:2,column:17788}},line:2},"144":{name:"Xe",decl:{start:{line:2,column:17797},end:{line:2,column:17799}},loc:{start:{line:2,column:17805},end:{line:2,column:17988}},line:2},"145":{name:"(anonymous_145)",decl:{start:{line:2,column:17866},end:{line:2,column:17867}},loc:{start:{line:2,column:17870},end:{line:2,column:17895}},line:2},"146":{name:"Je",decl:{start:{line:2,column:17997},end:{line:2,column:17999}},loc:{start:{line:2,column:18002},end:{line:2,column:18073}},line:2},"147":{name:"(anonymous_147)",decl:{start:{line:2,column:18034},end:{line:2,column:18035}},loc:{start:{line:2,column:18038},end:{line:2,column:18069}},line:2}},branchMap:{"0":{loc:{start:{line:1,column:280},end:{line:2,column:349}},type:"cond-expr",locations:[{start:{line:1,column:282},end:{line:2,column:328}},{start:{line:2,column:329},end:{line:2,column:349}}],line:1},"1":{loc:{start:{line:1,column:282},end:{line:2,column:328}},type:"cond-expr",locations:[{start:{line:1,column:301},end:{line:2,column:113}},{start:{line:2,column:114},end:{line:2,column:328}}],line:1},"2":{loc:{start:{line:2,column:36},end:{line:2,column:110}},type:"if",locations:[{start:{line:2,column:36},end:{line:2,column:110}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:2},"3":{loc:{start:{line:2,column:114},end:{line:2,column:328}},type:"cond-expr",locations:[{start:{line:2,column:156},end:{line:2,column:221}},{start:{line:2,column:223},end:{line:2,column:328}}],line:2},"4":{loc:{start:{line:2,column:114},end:{line:2,column:154}},type:"binary-expr",locations:[{start:{line:2,column:114},end:{line:2,column:132}},{start:{line:2,column:134},end:{line:2,column:154}}],line:2},"5":{loc:{start:{line:2,column:476},end:{line:2,column:499}},type:"cond-expr",locations:[{start:{line:2,column:490},end:{line:2,column:494}},{start:{line:2,column:495},end:{line:2,column:499}}],line:2},"6":{loc:{start:{line:2,column:476},end:{line:2,column:489}},type:"binary-expr",locations:[{start:{line:2,column:476},end:{line:2,column:477}},{start:{line:2,column:479},end:{line:2,column:489}}],line:2},"7":{loc:{start:{line:2,column:597},end:{line:2,column:636}},type:"binary-expr",locations:[{start:{line:2,column:597},end:{line:2,column:630}},{start:{line:2,column:632},end:{line:2,column:636}}],line:2},"8":{loc:{start:{line:2,column:827},end:{line:2,column:885}},type:"binary-expr",locations:[{start:{line:2,column:827},end:{line:2,column:854}},{start:{line:2,column:856},end:{line:2,column:885}}],line:2},"9":{loc:{start:{line:2,column:893},end:{line:2,column:1088}},type:"binary-expr",locations:[{start:{line:2,column:893},end:{line:2,column:906}},{start:{line:2,column:909},end:{line:2,column:1087}}],line:2},"10":{loc:{start:{line:2,column:909},end:{line:2,column:980}},type:"cond-expr",locations:[{start:{line:2,column:936},end:{line:2,column:964}},{start:{line:2,column:965},end:{line:2,column:980}}],line:2},"11":{loc:{start:{line:2,column:1000},end:{line:2,column:1087}},type:"binary-expr",locations:[{start:{line:2,column:1000},end:{line:2,column:1015}},{start:{line:2,column:1018},end:{line:2,column:1086}}],line:2},"12":{loc:{start:{line:2,column:1282},end:{line:2,column:1342}},type:"cond-expr",locations:[{start:{line:2,column:1324},end:{line:2,column:1337}},{start:{line:2,column:1338},end:{line:2,column:1342}}],line:2},"13":{loc:{start:{line:2,column:1282},end:{line:2,column:1323}},type:"binary-expr",locations:[{start:{line:2,column:1282},end:{line:2,column:1295}},{start:{line:2,column:1297},end:{line:2,column:1323}}],line:2},"14":{loc:{start:{line:2,column:1357},end:{line:2,column:1376}},type:"binary-expr",locations:[{start:{line:2,column:1357},end:{line:2,column:1372}},{start:{line:2,column:1374},end:{line:2,column:1376}}],line:2},"15":{loc:{start:{line:2,column:1434},end:{line:2,column:1913}},type:"switch",locations:[{start:{line:2,column:1447},end:{line:2,column:1455}},{start:{line:2,column:1455},end:{line:2,column:1657}},{start:{line:2,column:1657},end:{line:2,column:1912}}],line:2},"16":{loc:{start:{line:2,column:1477},end:{line:2,column:1528}},type:"if",locations:[{start:{line:2,column:1477},end:{line:2,column:1528}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:2},"17":{loc:{start:{line:2,column:1480},end:{line:2,column:1507}},type:"binary-expr",locations:[{start:{line:2,column:1480},end:{line:2,column:1498}},{start:{line:2,column:1501},end:{line:2,column:1506}}],line:2},"18":{loc:{start:{line:2,column:1572},end:{line:2,column:1615}},type:"binary-expr",locations:[{start:{line:2,column:1573},end:{line:2,column:1610}},{start:{line:2,column:1613},end:{line:2,column:1615}}],line:2},"19":{loc:{start:{line:2,column:1573},end:{line:2,column:1610}},type:"cond-expr",locations:[{start:{line:2,column:1584},end:{line:2,column:1603}},{start:{line:2,column:1604},end:{line:2,column:1610}}],line:2},"20":{loc:{start:{line:2,column:1679},end:{line:2,column:1907}},type:"if",locations:[{start:{line:2,column:1679},end:{line:2,column:1907}},{start:{line:2,column:1743},end:{line:2,column:1907}}],line:2},"21":{loc:{start:{line:2,column:1770},end:{line:2,column:1783}},type:"if",locations:[{start:{line:2,column:1770},end:{line:2,column:1783}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:2},"22":{loc:{start:{line:2,column:1816},end:{line:2,column:1906}},type:"cond-expr",locations:[{start:{line:2,column:1830},end:{line:2,column:1883}},{start:{line:2,column:1885},end:{line:2,column:1906}}],line:2},"23":{loc:{start:{line:2,column:1989},end:{line:2,column:2060}},type:"cond-expr",locations:[{start:{line:2,column:2009},end:{line:2,column:2036}},{start:{line:2,column:2037},end:{line:2,column:2060}}],line:2},"24":{loc:{start:{line:2,column:2090},end:{line:2,column:2112}},type:"cond-expr",locations:[{start:{line:2,column:2107},end:{line:2,column:2108}},{start:{line:2,column:2109},end:{line:2,column:2112}}],line:2},"25":{loc:{start:{line:2,column:2413},end:{line:2,column:2462}},type:"binary-expr",locations:[{start:{line:2,column:2413},end:{line:2,column:2428}},{start:{line:2,column:2430},end:{line:2,column:2462}}],line:2},"26":{loc:{start:{line:2,column:2770},end:{line:2,column:2971}},type:"binary-expr",locations:[{start:{line:2,column:2770},end:{line:2,column:2780}},{start:{line:2,column:2782},end:{line:2,column:2971}}],line:2},"27":{loc:{start:{line:2,column:2852},end:{line:2,column:2933}},type:"cond-expr",locations:[{start:{line:2,column:2858},end:{line:2,column:2877}},{start:{line:2,column:2878},end:{line:2,column:2933}}],line:2},"28":{loc:{start:{line:2,column:2936},end:{line:2,column:2948}},type:"binary-expr",locations:[{start:{line:2,column:2936},end:{line:2,column:2944}},{start:{line:2,column:2946},end:{line:2,column:2948}}],line:2},"29":{loc:{start:{line:2,column:3134},end:{line:2,column:3142}},type:"binary-expr",locations:[{start:{line:2,column:3134},end:{line:2,column:3139}},{start:{line:2,column:3141},end:{line:2,column:3142}}],line:2},"30":{loc:{start:{line:2,column:3237},end:{line:2,column:3241}},type:"default-arg",locations:[{start:{line:2,column:3239},end:{line:2,column:3241}}],line:2},"31":{loc:{start:{line:2,column:3243},end:{line:2,column:3531}},type:"if",locations:[{start:{line:2,column:3243},end:{line:2,column:3531}},{start:{line:2,column:3371},end:{line:2,column:3531}}],line:2},"32":{loc:{start:{line:2,column:3259},end:{line:2,column:3275}},type:"binary-expr",locations:[{start:{line:2,column:3259},end:{line:2,column:3268}},{start:{line:2,column:3270},end:{line:2,column:3275}}],line:2},"33":{loc:{start:{line:2,column:3290},end:{line:2,column:3327}},type:"if",locations:[{start:{line:2,column:3290},end:{line:2,column:3327}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:2},"34":{loc:{start:{line:2,column:3371},end:{line:2,column:3531}},type:"cond-expr",locations:[{start:{line:2,column:3385},end:{line:2,column:3516}},{start:{line:2,column:3518},end:{line:2,column:3531}}],line:2},"35":{loc:{start:{line:2,column:3464},end:{line:2,column:3496}},type:"cond-expr",locations:[{start:{line:2,column:3481},end:{line:2,column:3489}},{start:{line:2,column:3490},end:{line:2,column:3496}}],line:2},"36":{loc:{start:{line:2,column:3622},end:{line:2,column:3633}},type:"cond-expr",locations:[{start:{line:2,column:3624},end:{line:2,column:3628}},{start:{line:2,column:3629},end:{line:2,column:3633}}],line:2},"37":{loc:{start:{line:2,column:3663},end:{line:2,column:3684}},type:"binary-expr",locations:[{start:{line:2,column:3663},end:{line:2,column:3678}},{start:{line:2,column:3680},end:{line:2,column:3684}}],line:2},"38":{loc:{start:{line:2,column:3862},end:{line:2,column:3960}},type:"cond-expr",locations:[{start:{line:2,column:3879},end:{line:2,column:3927}},{start:{line:2,column:3928},end:{line:2,column:3960}}],line:2},"39":{loc:{start:{line:2,column:4337},end:{line:2,column:4357}},type:"binary-expr",locations:[{start:{line:2,column:4337},end:{line:2,column:4351}},{start:{line:2,column:4353},end:{line:2,column:4357}}],line:2},"40":{loc:{start:{line:2,column:4369},end:{line:2,column:4385}},type:"binary-expr",locations:[{start:{line:2,column:4369},end:{line:2,column:4381}},{start:{line:2,column:4383},end:{line:2,column:4385}}],line:2},"41":{loc:{start:{line:2,column:4406},end:{line:2,column:4441}},type:"binary-expr",locations:[{start:{line:2,column:4406},end:{line:2,column:4421}},{start:{line:2,column:4424},end:{line:2,column:4440}}],line:2},"42":{loc:{start:{line:2,column:4442},end:{line:2,column:4959}},type:"binary-expr",locations:[{start:{line:2,column:4442},end:{line:2,column:4463}},{start:{line:2,column:4466},end:{line:2,column:4958}}],line:2},"43":{loc:{start:{line:2,column:4589},end:{line:2,column:4923}},type:"switch",locations:[{start:{line:2,column:4602},end:{line:2,column:4610}},{start:{line:2,column:4610},end:{line:2,column:4719}},{start:{line:2,column:4719},end:{line:2,column:4922}}],line:2},"44":{loc:{start:{line:2,column:4624},end:{line:2,column:4669}},type:"binary-expr",locations:[{start:{line:2,column:4625},end:{line:2,column:4664}},{start:{line:2,column:4667},end:{line:2,column:4669}}],line:2},"45":{loc:{start:{line:2,column:4625},end:{line:2,column:4664}},type:"cond-expr",locations:[{start:{line:2,column:4636},end:{line:2,column:4657}},{start:{line:2,column:4658},end:{line:2,column:4664}}],line:2},"46":{loc:{start:{line:2,column:4727},end:{line:2,column:4922}},type:"if",locations:[{start:{line:2,column:4727},end:{line:2,column:4922}},{start:{line:2,column:4890},end:{line:2,column:4922}}],line:2},"47":{loc:{start:{line:2,column:4754},end:{line:2,column:4779}},type:"binary-expr",locations:[{start:{line:2,column:4754},end:{line:2,column:4775}},{start:{line:2,column:4777},end:{line:2,column:4779}}],line:2},"48":{loc:{start:{line:2,column:4804},end:{line:2,column:4825}},type:"binary-expr",locations:[{start:{line:2,column:4804},end:{line:2,column:4810}},{start:{line:2,column:4812},end:{line:2,column:4825}}],line:2},"49":{loc:{start:{line:2,column:4826},end:{line:2,column:4885}},type:"cond-expr",locations:[{start:{line:2,column:4837},end:{line:2,column:4860}},{start:{line:2,column:4861},end:{line:2,column:4885}}],line:2},"50":{loc:{start:{line:2,column:4977},end:{line:2,column:5073}},type:"switch",locations:[{start:{line:2,column:4987},end:{line:2,column:5000}},{start:{line:2,column:5000},end:{line:2,column:5010}},{start:{line:2,column:5010},end:{line:2,column:5021}},{start:{line:2,column:5021},end:{line:2,column:5035}},{start:{line:2,column:5035},end:{line:2,column:5056}},{start:{line:2,column:5056},end:{line:2,column:5072}}],line:2},"51":{loc:{start:{line:2,column:5096},end:{line:2,column:5144}},type:"binary-expr",locations:[{start:{line:2,column:5096},end:{line:2,column:5118}},{start:{line:2,column:5120},end:{line:2,column:5144}}],line:2},"52":{loc:{start:{line:2,column:5167},end:{line:2,column:5201}},type:"binary-expr",locations:[{start:{line:2,column:5167},end:{line:2,column:5182}},{start:{line:2,column:5184},end:{line:2,column:5201}}],line:2},"53":{loc:{start:{line:2,column:5224},end:{line:2,column:5266}},type:"binary-expr",locations:[{start:{line:2,column:5224},end:{line:2,column:5243}},{start:{line:2,column:5245},end:{line:2,column:5266}}],line:2},"54":{loc:{start:{line:2,column:5289},end:{line:2,column:5345}},type:"binary-expr",locations:[{start:{line:2,column:5289},end:{line:2,column:5315}},{start:{line:2,column:5317},end:{line:2,column:5345}}],line:2},"55":{loc:{start:{line:2,column:5742},end:{line:2,column:6546}},type:"if",locations:[{start:{line:2,column:5742},end:{line:2,column:6546}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:2},"56":{loc:{start:{line:2,column:5745},end:{line:2,column:5801}},type:"cond-expr",locations:[{start:{line:2,column:5765},end:{line:2,column:5796}},{start:{line:2,column:5798},end:{line:2,column:5801}}],line:2},"57":{loc:{start:{line:2,column:5745},end:{line:2,column:5763}},type:"binary-expr",locations:[{start:{line:2,column:5745},end:{line:2,column:5760}},{start:{line:2,column:5762},end:{line:2,column:5763}}],line:2},"58":{loc:{start:{line:2,column:5775},end:{line:2,column:5792}},type:"cond-expr",locations:[{start:{line:2,column:5786},end:{line:2,column:5787}},{start:{line:2,column:5788},end:{line:2,column:5792}}],line:2},"59":{loc:{start:{line:2,column:5805},end:{line:2,column:6307}},type:"if",locations:[{start:{line:2,column:5805},end:{line:2,column:6307}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:2},"60":{loc:{start:{line:2,column:5917},end:{line:2,column:5967}},type:"binary-expr",locations:[{start:{line:2,column:5917},end:{line:2,column:5931}},{start:{line:2,column:5934},end:{line:2,column:5966}}],line:2},"61":{loc:{start:{line:2,column:5968},end:{line:2,column:6003}},type:"binary-expr",locations:[{start:{line:2,column:5968},end:{line:2,column:5977}},{start:{line:2,column:5980},end:{line:2,column:6002}}],line:2},"62":{loc:{start:{line:2,column:6004},end:{line:2,column:6039}},type:"binary-expr",locations:[{start:{line:2,column:6004},end:{line:2,column:6013}},{start:{line:2,column:6016},end:{line:2,column:6038}}],line:2},"63":{loc:{start:{line:2,column:6040},end:{line:2,column:6072}},type:"binary-expr",locations:[{start:{line:2,column:6040},end:{line:2,column:6048}},{start:{line:2,column:6051},end:{line:2,column:6071}}],line:2},"64":{loc:{start:{line:2,column:6073},end:{line:2,column:6111}},type:"binary-expr",locations:[{start:{line:2,column:6073},end:{line:2,column:6083}},{start:{line:2,column:6086},end:{line:2,column:6110}}],line:2},"65":{loc:{start:{line:2,column:6112},end:{line:2,column:6141}},type:"binary-expr",locations:[{start:{line:2,column:6112},end:{line:2,column:6119}},{start:{line:2,column:6122},end:{line:2,column:6140}}],line:2},"66":{loc:{start:{line:2,column:6142},end:{line:2,column:6189}},type:"binary-expr",locations:[{start:{line:2,column:6142},end:{line:2,column:6155}},{start:{line:2,column:6158},end:{line:2,column:6188}}],line:2},"67":{loc:{start:{line:2,column:6218},end:{line:2,column:6284}},type:"if",locations:[{start:{line:2,column:6218},end:{line:2,column:6284}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:2},"68":{loc:{start:{line:2,column:6221},end:{line:2,column:6262}},type:"binary-expr",locations:[{start:{line:2,column:6221},end:{line:2,column:6232}},{start:{line:2,column:6234},end:{line:2,column:6262}}],line:2},"69":{loc:{start:{line:2,column:6307},end:{line:2,column:6333}},type:"binary-expr",locations:[{start:{line:2,column:6307},end:{line:2,column:6313}},{start:{line:2,column:6316},end:{line:2,column:6332}}],line:2},"70":{loc:{start:{line:2,column:6334},end:{line:2,column:6372}},type:"binary-expr",locations:[{start:{line:2,column:6334},end:{line:2,column:6344}},{start:{line:2,column:6347},end:{line:2,column:6371}}],line:2},"71":{loc:{start:{line:2,column:6373},end:{line:2,column:6414}},type:"binary-expr",locations:[{start:{line:2,column:6373},end:{line:2,column:6384}},{start:{line:2,column:6387},end:{line:2,column:6413}}],line:2},"72":{loc:{start:{line:2,column:6415},end:{line:2,column:6453}},type:"binary-expr",locations:[{start:{line:2,column:6415},end:{line:2,column:6425}},{start:{line:2,column:6428},end:{line:2,column:6452}}],line:2},"73":{loc:{start:{line:2,column:6454},end:{line:2,column:6510}},type:"binary-expr",locations:[{start:{line:2,column:6454},end:{line:2,column:6470}},{start:{line:2,column:6473},end:{line:2,column:6509}}],line:2},"74":{loc:{start:{line:2,column:6546},end:{line:2,column:6799}},type:"if",locations:[{start:{line:2,column:6546},end:{line:2,column:6799}},{start:{line:2,column:6647},end:{line:2,column:6799}}],line:2},"75":{loc:{start:{line:2,column:6677},end:{line:2,column:6798}},type:"if",locations:[{start:{line:2,column:6677},end:{line:2,column:6798}},{start:{line:2,column:6718},end:{line:2,column:6798}}],line:2},"76":{loc:{start:{line:2,column:6742},end:{line:2,column:6772}},type:"cond-expr",locations:[{start:{line:2,column:6749},end:{line:2,column:6752}},{start:{line:2,column:6753},end:{line:2,column:6772}}],line:2},"77":{loc:{start:{line:2,column:6753},end:{line:2,column:6772}},type:"cond-expr",locations:[{start:{line:2,column:6766},end:{line:2,column:6769}},{start:{line:2,column:6770},end:{line:2,column:6772}}],line:2},"78":{loc:{start:{line:2,column:6823},end:{line:2,column:7114}},type:"cond-expr",locations:[{start:{line:2,column:6840},end:{line:2,column:6844}},{start:{line:2,column:6845},end:{line:2,column:7114}}],line:2},"79":{loc:{start:{line:2,column:6845},end:{line:2,column:7114}},type:"cond-expr",locations:[{start:{line:2,column:6932},end:{line:2,column:6941}},{start:{line:2,column:6942},end:{line:2,column:7114}}],line:2},"80":{loc:{start:{line:2,column:6845},end:{line:2,column:6931}},type:"binary-expr",locations:[{start:{line:2,column:6845},end:{line:2,column:6871}},{start:{line:2,column:6873},end:{line:2,column:6886}},{start:{line:2,column:6888},end:{line:2,column:6901}},{start:{line:2,column:6903},end:{line:2,column:6916}},{start:{line:2,column:6918},end:{line:2,column:6931}}],line:2},"81":{loc:{start:{line:2,column:6942},end:{line:2,column:7114}},type:"cond-expr",locations:[{start:{line:2,column:6965},end:{line:2,column:6985}},{start:{line:2,column:6986},end:{line:2,column:7114}}],line:2},"82":{loc:{start:{line:2,column:6986},end:{line:2,column:7114}},type:"cond-expr",locations:[{start:{line:2,column:7068},end:{line:2,column:7093}},{start:{line:2,column:7094},end:{line:2,column:7114}}],line:2},"83":{loc:{start:{line:2,column:6986},end:{line:2,column:7067}},type:"binary-expr",locations:[{start:{line:2,column:6986},end:{line:2,column:7012}},{start:{line:2,column:7014},end:{line:2,column:7041}},{start:{line:2,column:7043},end:{line:2,column:7067}}],line:2},"84":{loc:{start:{line:2,column:7148},end:{line:2,column:7433}},type:"cond-expr",locations:[{start:{line:2,column:7180},end:{line:2,column:7184}},{start:{line:2,column:7185},end:{line:2,column:7433}}],line:2},"85":{loc:{start:{line:2,column:7148},end:{line:2,column:7179}},type:"binary-expr",locations:[{start:{line:2,column:7148},end:{line:2,column:7164}},{start:{line:2,column:7166},end:{line:2,column:7179}}],line:2},"86":{loc:{start:{line:2,column:7185},end:{line:2,column:7433}},type:"cond-expr",locations:[{start:{line:2,column:7199},end:{line:2,column:7219}},{start:{line:2,column:7220},end:{line:2,column:7433}}],line:2},"87":{loc:{start:{line:2,column:7199},end:{line:2,column:7219}},type:"binary-expr",locations:[{start:{line:2,column:7199},end:{line:2,column:7213}},{start:{line:2,column:7215},end:{line:2,column:7219}}],line:2},"88":{loc:{start:{line:2,column:7220},end:{line:2,column:7433}},type:"cond-expr",locations:[{start:{line:2,column:7234},end:{line:2,column:7238}},{start:{line:2,column:7239},end:{line:2,column:7433}}],line:2},"89":{loc:{start:{line:2,column:7239},end:{line:2,column:7433}},type:"cond-expr",locations:[{start:{line:2,column:7266},end:{line:2,column:7268}},{start:{line:2,column:7269},end:{line:2,column:7433}}],line:2},"90":{loc:{start:{line:2,column:7269},end:{line:2,column:7433}},type:"cond-expr",locations:[{start:{line:2,column:7292},end:{line:2,column:7341}},{start:{line:2,column:7342},end:{line:2,column:7433}}],line:2},"91":{loc:{start:{line:2,column:7342},end:{line:2,column:7433}},type:"cond-expr",locations:[{start:{line:2,column:7426},end:{line:2,column:7428}},{start:{line:2,column:7429},end:{line:2,column:7433}}],line:2},"92":{loc:{start:{line:2,column:7342},end:{line:2,column:7425}},type:"binary-expr",locations:[{start:{line:2,column:7342},end:{line:2,column:7368}},{start:{line:2,column:7370},end:{line:2,column:7396}},{start:{line:2,column:7398},end:{line:2,column:7425}}],line:2},"93":{loc:{start:{line:2,column:7440},end:{line:2,column:7444}},type:"default-arg",locations:[{start:{line:2,column:7442},end:{line:2,column:7444}}],line:2},"94":{loc:{start:{line:2,column:7452},end:{line:2,column:7473}},type:"binary-expr",locations:[{start:{line:2,column:7452},end:{line:2,column:7460}},{start:{line:2,column:7462},end:{line:2,column:7473}}],line:2},"95":{loc:{start:{line:2,column:7476},end:{line:2,column:7491}},type:"binary-expr",locations:[{start:{line:2,column:7476},end:{line:2,column:7481}},{start:{line:2,column:7483},end:{line:2,column:7491}}],line:2},"96":{loc:{start:{line:2,column:7494},end:{line:2,column:7527}},type:"binary-expr",locations:[{start:{line:2,column:7494},end:{line:2,column:7508}},{start:{line:2,column:7510},end:{line:2,column:7527}}],line:2},"97":{loc:{start:{line:2,column:7530},end:{line:2,column:7557}},type:"binary-expr",locations:[{start:{line:2,column:7530},end:{line:2,column:7541}},{start:{line:2,column:7543},end:{line:2,column:7557}}],line:2},"98":{loc:{start:{line:2,column:7560},end:{line:2,column:7585}},type:"binary-expr",locations:[{start:{line:2,column:7560},end:{line:2,column:7570}},{start:{line:2,column:7572},end:{line:2,column:7585}}],line:2},"99":{loc:{start:{line:2,column:7588},end:{line:2,column:7607}},type:"binary-expr",locations:[{start:{line:2,column:7588},end:{line:2,column:7595}},{start:{line:2,column:7597},end:{line:2,column:7607}}],line:2},"100":{loc:{start:{line:2,column:7610},end:{line:2,column:7627}},type:"binary-expr",locations:[{start:{line:2,column:7610},end:{line:2,column:7616}},{start:{line:2,column:7618},end:{line:2,column:7627}}],line:2},"101":{loc:{start:{line:2,column:7630},end:{line:2,column:7655}},type:"binary-expr",locations:[{start:{line:2,column:7630},end:{line:2,column:7640}},{start:{line:2,column:7642},end:{line:2,column:7655}}],line:2},"102":{loc:{start:{line:2,column:7658},end:{line:2,column:7689}},type:"binary-expr",locations:[{start:{line:2,column:7658},end:{line:2,column:7671}},{start:{line:2,column:7673},end:{line:2,column:7689}}],line:2},"103":{loc:{start:{line:2,column:7692},end:{line:2,column:7717}},type:"binary-expr",locations:[{start:{line:2,column:7692},end:{line:2,column:7702}},{start:{line:2,column:7704},end:{line:2,column:7717}}],line:2},"104":{loc:{start:{line:2,column:7720},end:{line:2,column:7747}},type:"binary-expr",locations:[{start:{line:2,column:7720},end:{line:2,column:7731}},{start:{line:2,column:7733},end:{line:2,column:7747}}],line:2},"105":{loc:{start:{line:2,column:7750},end:{line:2,column:7787}},type:"binary-expr",locations:[{start:{line:2,column:7750},end:{line:2,column:7766}},{start:{line:2,column:7768},end:{line:2,column:7787}}],line:2},"106":{loc:{start:{line:2,column:7790},end:{line:2,column:7825}},type:"binary-expr",locations:[{start:{line:2,column:7790},end:{line:2,column:7805}},{start:{line:2,column:7807},end:{line:2,column:7825}}],line:2},"107":{loc:{start:{line:2,column:7828},end:{line:2,column:7851}},type:"binary-expr",locations:[{start:{line:2,column:7828},end:{line:2,column:7837}},{start:{line:2,column:7839},end:{line:2,column:7851}}],line:2},"108":{loc:{start:{line:2,column:7854},end:{line:2,column:7886}},type:"cond-expr",locations:[{start:{line:2,column:7870},end:{line:2,column:7876}},{start:{line:2,column:7877},end:{line:2,column:7886}}],line:2},"109":{loc:{start:{line:2,column:7889},end:{line:2,column:7928}},type:"binary-expr",locations:[{start:{line:2,column:7889},end:{line:2,column:7906}},{start:{line:2,column:7908},end:{line:2,column:7928}}],line:2},"110":{loc:{start:{line:2,column:7931},end:{line:2,column:7968}},type:"binary-expr",locations:[{start:{line:2,column:7931},end:{line:2,column:7947}},{start:{line:2,column:7949},end:{line:2,column:7968}}],line:2},"111":{loc:{start:{line:2,column:7971},end:{line:2,column:7994}},type:"binary-expr",locations:[{start:{line:2,column:7971},end:{line:2,column:7980}},{start:{line:2,column:7982},end:{line:2,column:7994}}],line:2},"112":{loc:{start:{line:2,column:7997},end:{line:2,column:8018}},type:"binary-expr",locations:[{start:{line:2,column:7997},end:{line:2,column:8005}},{start:{line:2,column:8007},end:{line:2,column:8018}}],line:2},"113":{loc:{start:{line:2,column:8021},end:{line:2,column:8044}},type:"binary-expr",locations:[{start:{line:2,column:8021},end:{line:2,column:8030}},{start:{line:2,column:8032},end:{line:2,column:8044}}],line:2},"114":{loc:{start:{line:2,column:8052},end:{line:2,column:8146}},type:"binary-expr",locations:[{start:{line:2,column:8052},end:{line:2,column:8073}},{start:{line:2,column:8076},end:{line:2,column:8145}}],line:2},"115":{loc:{start:{line:2,column:8147},end:{line:2,column:8229}},type:"binary-expr",locations:[{start:{line:2,column:8147},end:{line:2,column:8158}},{start:{line:2,column:8161},end:{line:2,column:8228}}],line:2},"116":{loc:{start:{line:2,column:8667},end:{line:2,column:8672}},type:"binary-expr",locations:[{start:{line:2,column:8667},end:{line:2,column:8668}},{start:{line:2,column:8670},end:{line:2,column:8672}}],line:2},"117":{loc:{start:{line:2,column:8758},end:{line:2,column:8763}},type:"default-arg",locations:[{start:{line:2,column:8760},end:{line:2,column:8763}}],line:2},"118":{loc:{start:{line:2,column:8764},end:{line:2,column:8770}},type:"default-arg",locations:[{start:{line:2,column:8766},end:{line:2,column:8770}}],line:2},"119":{loc:{start:{line:2,column:8785},end:{line:2,column:8801}},type:"binary-expr",locations:[{start:{line:2,column:8785},end:{line:2,column:8794}},{start:{line:2,column:8796},end:{line:2,column:8801}}],line:2},"120":{loc:{start:{line:2,column:8814},end:{line:2,column:8842}},type:"cond-expr",locations:[{start:{line:2,column:8832},end:{line:2,column:8840}},{start:{line:2,column:8841},end:{line:2,column:8842}}],line:2},"121":{loc:{start:{line:2,column:8859},end:{line:2,column:8874}},type:"binary-expr",locations:[{start:{line:2,column:8859},end:{line:2,column:8871}},{start:{line:2,column:8873},end:{line:2,column:8874}}],line:2},"122":{loc:{start:{line:2,column:8884},end:{line:2,column:8895}},type:"binary-expr",locations:[{start:{line:2,column:8884},end:{line:2,column:8889}},{start:{line:2,column:8891},end:{line:2,column:8895}}],line:2},"123":{loc:{start:{line:2,column:8966},end:{line:2,column:8999}},type:"binary-expr",locations:[{start:{line:2,column:8966},end:{line:2,column:8982}},{start:{line:2,column:8984},end:{line:2,column:8999}}],line:2},"124":{loc:{start:{line:2,column:9034},end:{line:2,column:9038}},type:"default-arg",locations:[{start:{line:2,column:9036},end:{line:2,column:9038}}],line:2},"125":{loc:{start:{line:2,column:9077},end:{line:2,column:9081}},type:"default-arg",locations:[{start:{line:2,column:9079},end:{line:2,column:9081}}],line:2},"126":{loc:{start:{line:2,column:9105},end:{line:2,column:9128}},type:"binary-expr",locations:[{start:{line:2,column:9105},end:{line:2,column:9114}},{start:{line:2,column:9116},end:{line:2,column:9128}}],line:2},"127":{loc:{start:{line:2,column:9136},end:{line:2,column:9174}},type:"cond-expr",locations:[{start:{line:2,column:9154},end:{line:2,column:9162}},{start:{line:2,column:9163},end:{line:2,column:9174}}],line:2},"128":{loc:{start:{line:2,column:9186},end:{line:2,column:9215}},type:"binary-expr",locations:[{start:{line:2,column:9186},end:{line:2,column:9198}},{start:{line:2,column:9200},end:{line:2,column:9215}}],line:2},"129":{loc:{start:{line:2,column:9220},end:{line:2,column:9243}},type:"binary-expr",locations:[{start:{line:2,column:9220},end:{line:2,column:9225}},{start:{line:2,column:9227},end:{line:2,column:9235}},{start:{line:2,column:9237},end:{line:2,column:9243}}],line:2},"130":{loc:{start:{line:2,column:9285},end:{line:2,column:9289}},type:"default-arg",locations:[{start:{line:2,column:9287},end:{line:2,column:9289}}],line:2},"131":{loc:{start:{line:2,column:9310},end:{line:2,column:9337}},type:"cond-expr",locations:[{start:{line:2,column:9326},end:{line:2,column:9332}},{start:{line:2,column:9333},end:{line:2,column:9337}}],line:2},"132":{loc:{start:{line:2,column:9360},end:{line:2,column:9364}},type:"default-arg",locations:[{start:{line:2,column:9362},end:{line:2,column:9364}}],line:2},"133":{loc:{start:{line:2,column:9385},end:{line:2,column:9417}},type:"cond-expr",locations:[{start:{line:2,column:9401},end:{line:2,column:9407}},{start:{line:2,column:9408},end:{line:2,column:9417}}],line:2},"134":{loc:{start:{line:2,column:9426},end:{line:2,column:9449}},type:"binary-expr",locations:[{start:{line:2,column:9426},end:{line:2,column:9435}},{start:{line:2,column:9437},end:{line:2,column:9449}}],line:2},"135":{loc:{start:{line:2,column:9457},end:{line:2,column:9495}},type:"cond-expr",locations:[{start:{line:2,column:9475},end:{line:2,column:9483}},{start:{line:2,column:9484},end:{line:2,column:9495}}],line:2},"136":{loc:{start:{line:2,column:9507},end:{line:2,column:9536}},type:"binary-expr",locations:[{start:{line:2,column:9507},end:{line:2,column:9519}},{start:{line:2,column:9521},end:{line:2,column:9536}}],line:2},"137":{loc:{start:{line:2,column:9541},end:{line:2,column:9564}},type:"binary-expr",locations:[{start:{line:2,column:9541},end:{line:2,column:9546}},{start:{line:2,column:9548},end:{line:2,column:9556}},{start:{line:2,column:9558},end:{line:2,column:9564}}],line:2},"138":{loc:{start:{line:2,column:9576},end:{line:2,column:9605}},type:"binary-expr",locations:[{start:{line:2,column:9576},end:{line:2,column:9588}},{start:{line:2,column:9590},end:{line:2,column:9605}}],line:2},"139":{loc:{start:{line:2,column:9619},end:{line:2,column:9652}},type:"binary-expr",locations:[{start:{line:2,column:9619},end:{line:2,column:9633}},{start:{line:2,column:9635},end:{line:2,column:9652}}],line:2},"140":{loc:{start:{line:2,column:9762},end:{line:2,column:9964}},type:"cond-expr",locations:[{start:{line:2,column:9796},end:{line:2,column:9868}},{start:{line:2,column:9869},end:{line:2,column:9964}}],line:2},"141":{loc:{start:{line:2,column:9762},end:{line:2,column:9795}},type:"binary-expr",locations:[{start:{line:2,column:9762},end:{line:2,column:9778}},{start:{line:2,column:9780},end:{line:2,column:9795}}],line:2},"142":{loc:{start:{line:2,column:9844},end:{line:2,column:9866}},type:"binary-expr",locations:[{start:{line:2,column:9844},end:{line:2,column:9849}},{start:{line:2,column:9851},end:{line:2,column:9866}}],line:2},"143":{loc:{start:{line:2,column:9911},end:{line:2,column:9933}},type:"binary-expr",locations:[{start:{line:2,column:9911},end:{line:2,column:9916}},{start:{line:2,column:9918},end:{line:2,column:9933}}],line:2},"144":{loc:{start:{line:2,column:9976},end:{line:2,column:9989}},type:"binary-expr",locations:[{start:{line:2,column:9976},end:{line:2,column:9983}},{start:{line:2,column:9985},end:{line:2,column:9989}}],line:2},"145":{loc:{start:{line:2,column:10174},end:{line:2,column:10239}},type:"cond-expr",locations:[{start:{line:2,column:10205},end:{line:2,column:10237}},{start:{line:2,column:10238},end:{line:2,column:10239}}],line:2},"146":{loc:{start:{line:2,column:10250},end:{line:2,column:10294}},type:"if",locations:[{start:{line:2,column:10250},end:{line:2,column:10294}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:2},"147":{loc:{start:{line:2,column:10369},end:{line:2,column:10641}},type:"if",locations:[{start:{line:2,column:10369},end:{line:2,column:10641}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:2},"148":{loc:{start:{line:2,column:10405},end:{line:2,column:10446}},type:"binary-expr",locations:[{start:{line:2,column:10405},end:{line:2,column:10422}},{start:{line:2,column:10425},end:{line:2,column:10445}}],line:2},"149":{loc:{start:{line:2,column:10507},end:{line:2,column:10551}},type:"binary-expr",locations:[{start:{line:2,column:10507},end:{line:2,column:10524}},{start:{line:2,column:10526},end:{line:2,column:10551}}],line:2},"150":{loc:{start:{line:2,column:10606},end:{line:2,column:10640}},type:"binary-expr",locations:[{start:{line:2,column:10606},end:{line:2,column:10614}},{start:{line:2,column:10616},end:{line:2,column:10640}}],line:2},"151":{loc:{start:{line:2,column:10641},end:{line:2,column:10763}},type:"if",locations:[{start:{line:2,column:10641},end:{line:2,column:10763}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:2},"152":{loc:{start:{line:2,column:10644},end:{line:2,column:10676}},type:"binary-expr",locations:[{start:{line:2,column:10644},end:{line:2,column:10653}},{start:{line:2,column:10656},end:{line:2,column:10675}}],line:2},"153":{loc:{start:{line:2,column:10743},end:{line:2,column:10762}},type:"cond-expr",locations:[{start:{line:2,column:10754},end:{line:2,column:10755}},{start:{line:2,column:10756},end:{line:2,column:10762}}],line:2},"154":{loc:{start:{line:2,column:10801},end:{line:2,column:10822}},type:"if",locations:[{start:{line:2,column:10801},end:{line:2,column:10822}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:2},"155":{loc:{start:{line:2,column:10828},end:{line:2,column:10846}},type:"binary-expr",locations:[{start:{line:2,column:10828},end:{line:2,column:10840}},{start:{line:2,column:10842},end:{line:2,column:10846}}],line:2},"156":{loc:{start:{line:2,column:10884},end:{line:2,column:10904}},type:"binary-expr",locations:[{start:{line:2,column:10884},end:{line:2,column:10897}},{start:{line:2,column:10899},end:{line:2,column:10904}}],line:2},"157":{loc:{start:{line:2,column:11057},end:{line:2,column:11116}},type:"binary-expr",locations:[{start:{line:2,column:11057},end:{line:2,column:11063}},{start:{line:2,column:11066},end:{line:2,column:11115}}],line:2},"158":{loc:{start:{line:2,column:11068},end:{line:2,column:11115}},type:"cond-expr",locations:[{start:{line:2,column:11090},end:{line:2,column:11104}},{start:{line:2,column:11105},end:{line:2,column:11115}}],line:2},"159":{loc:{start:{line:2,column:11117},end:{line:2,column:11134}},type:"binary-expr",locations:[{start:{line:2,column:11117},end:{line:2,column:11122}},{start:{line:2,column:11125},end:{line:2,column:11133}}],line:2},"160":{loc:{start:{line:2,column:11127},end:{line:2,column:11133}},type:"cond-expr",locations:[{start:{line:2,column:11129},end:{line:2,column:11131}},{start:{line:2,column:11132},end:{line:2,column:11133}}],line:2},"161":{loc:{start:{line:2,column:11141},end:{line:2,column:11154}},type:"binary-expr",locations:[{start:{line:2,column:11141},end:{line:2,column:11147}},{start:{line:2,column:11149},end:{line:2,column:11154}}],line:2},"162":{loc:{start:{line:2,column:11155},end:{line:2,column:11305}},type:"if",locations:[{start:{line:2,column:11155},end:{line:2,column:11305}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:2},"163":{loc:{start:{line:2,column:11158},end:{line:2,column:11201}},type:"binary-expr",locations:[{start:{line:2,column:11158},end:{line:2,column:11181}},{start:{line:2,column:11183},end:{line:2,column:11201}}],line:2},"164":{loc:{start:{line:2,column:11236},end:{line:2,column:11261}},type:"cond-expr",locations:[{start:{line:2,column:11243},end:{line:2,column:11256}},{start:{line:2,column:11257},end:{line:2,column:11261}}],line:2},"165":{loc:{start:{line:2,column:11275},end:{line:2,column:11303}},type:"binary-expr",locations:[{start:{line:2,column:11275},end:{line:2,column:11276}},{start:{line:2,column:11279},end:{line:2,column:11302}}],line:2},"166":{loc:{start:{line:2,column:11305},end:{line:2,column:11463}},type:"cond-expr",locations:[{start:{line:2,column:11308},end:{line:2,column:11390}},{start:{line:2,column:11392},end:{line:2,column:11463}}],line:2},"167":{loc:{start:{line:2,column:11365},end:{line:2,column:11374}},type:"binary-expr",locations:[{start:{line:2,column:11365},end:{line:2,column:11366}},{start:{line:2,column:11368},end:{line:2,column:11374}}],line:2},"168":{loc:{start:{line:2,column:11451},end:{line:2,column:11460}},type:"binary-expr",locations:[{start:{line:2,column:11451},end:{line:2,column:11452}},{start:{line:2,column:11454},end:{line:2,column:11460}}],line:2},"169":{loc:{start:{line:2,column:11536},end:{line:2,column:11547}},type:"binary-expr",locations:[{start:{line:2,column:11536},end:{line:2,column:11544}},{start:{line:2,column:11546},end:{line:2,column:11547}}],line:2},"170":{loc:{start:{line:2,column:11559},end:{line:2,column:11588}},type:"binary-expr",locations:[{start:{line:2,column:11559},end:{line:2,column:11571}},{start:{line:2,column:11573},end:{line:2,column:11588}}],line:2},"171":{loc:{start:{line:2,column:11593},end:{line:2,column:11602}},type:"binary-expr",locations:[{start:{line:2,column:11593},end:{line:2,column:11594}},{start:{line:2,column:11596},end:{line:2,column:11602}}],line:2},"172":{loc:{start:{line:2,column:11622},end:{line:2,column:11839}},type:"binary-expr",locations:[{start:{line:2,column:11622},end:{line:2,column:11631}},{start:{line:2,column:11634},end:{line:2,column:11838}}],line:2},"173":{loc:{start:{line:2,column:11755},end:{line:2,column:11766}},type:"binary-expr",locations:[{start:{line:2,column:11755},end:{line:2,column:11763}},{start:{line:2,column:11765},end:{line:2,column:11766}}],line:2},"174":{loc:{start:{line:2,column:11778},end:{line:2,column:11809}},type:"binary-expr",locations:[{start:{line:2,column:11778},end:{line:2,column:11790}},{start:{line:2,column:11792},end:{line:2,column:11809}}],line:2},"175":{loc:{start:{line:2,column:11814},end:{line:2,column:11823}},type:"binary-expr",locations:[{start:{line:2,column:11814},end:{line:2,column:11815}},{start:{line:2,column:11817},end:{line:2,column:11823}}],line:2},"176":{loc:{start:{line:2,column:11880},end:{line:2,column:11901}},type:"binary-expr",locations:[{start:{line:2,column:11880},end:{line:2,column:11881}},{start:{line:2,column:11884},end:{line:2,column:11900}}],line:2},"177":{loc:{start:{line:2,column:11950},end:{line:2,column:11987}},type:"binary-expr",locations:[{start:{line:2,column:11950},end:{line:2,column:11968}},{start:{line:2,column:11971},end:{line:2,column:11986}}],line:2},"178":{loc:{start:{line:2,column:11988},end:{line:2,column:12059}},type:"binary-expr",locations:[{start:{line:2,column:11988},end:{line:2,column:12011}},{start:{line:2,column:12013},end:{line:2,column:12027}},{start:{line:2,column:12030},end:{line:2,column:12058}}],line:2},"179":{loc:{start:{line:2,column:12149},end:{line:2,column:12186}},type:"binary-expr",locations:[{start:{line:2,column:12149},end:{line:2,column:12167}},{start:{line:2,column:12170},end:{line:2,column:12185}}],line:2},"180":{loc:{start:{line:2,column:12327},end:{line:2,column:12439}},type:"binary-expr",locations:[{start:{line:2,column:12327},end:{line:2,column:12343}},{start:{line:2,column:12346},end:{line:2,column:12438}}],line:2},"181":{loc:{start:{line:2,column:12379},end:{line:2,column:12438}},type:"binary-expr",locations:[{start:{line:2,column:12379},end:{line:2,column:12387}},{start:{line:2,column:12389},end:{line:2,column:12397}},{start:{line:2,column:12399},end:{line:2,column:12438}}],line:2},"182":{loc:{start:{line:2,column:12610},end:{line:2,column:12728}},type:"binary-expr",locations:[{start:{line:2,column:12610},end:{line:2,column:12626}},{start:{line:2,column:12629},end:{line:2,column:12727}}],line:2},"183":{loc:{start:{line:2,column:12665},end:{line:2,column:12727}},type:"binary-expr",locations:[{start:{line:2,column:12665},end:{line:2,column:12673}},{start:{line:2,column:12675},end:{line:2,column:12683}},{start:{line:2,column:12685},end:{line:2,column:12727}}],line:2},"184":{loc:{start:{line:2,column:12729},end:{line:2,column:12761}},type:"binary-expr",locations:[{start:{line:2,column:12729},end:{line:2,column:12750}},{start:{line:2,column:12752},end:{line:2,column:12761}}],line:2},"185":{loc:{start:{line:2,column:12807},end:{line:2,column:12811}},type:"binary-expr",locations:[{start:{line:2,column:12807},end:{line:2,column:12808}},{start:{line:2,column:12810},end:{line:2,column:12811}}],line:2},"186":{loc:{start:{line:2,column:13125},end:{line:2,column:13129}},type:"binary-expr",locations:[{start:{line:2,column:13125},end:{line:2,column:13126}},{start:{line:2,column:13128},end:{line:2,column:13129}}],line:2},"187":{loc:{start:{line:2,column:13199},end:{line:2,column:13219}},type:"cond-expr",locations:[{start:{line:2,column:13201},end:{line:2,column:13212}},{start:{line:2,column:13213},end:{line:2,column:13219}}],line:2},"188":{loc:{start:{line:2,column:13207},end:{line:2,column:13211}},type:"binary-expr",locations:[{start:{line:2,column:13207},end:{line:2,column:13208}},{start:{line:2,column:13210},end:{line:2,column:13211}}],line:2},"189":{loc:{start:{line:2,column:13409},end:{line:2,column:13570}},type:"if",locations:[{start:{line:2,column:13409},end:{line:2,column:13570}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:2},"190":{loc:{start:{line:2,column:13570},end:{line:2,column:13740}},type:"if",locations:[{start:{line:2,column:13570},end:{line:2,column:13740}},{start:{line:2,column:13694},end:{line:2,column:13740}}],line:2},"191":{loc:{start:{line:2,column:13781},end:{line:2,column:13785}},type:"binary-expr",locations:[{start:{line:2,column:13781},end:{line:2,column:13782}},{start:{line:2,column:13784},end:{line:2,column:13785}}],line:2},"192":{loc:{start:{line:2,column:13937},end:{line:2,column:13941}},type:"binary-expr",locations:[{start:{line:2,column:13937},end:{line:2,column:13938}},{start:{line:2,column:13940},end:{line:2,column:13941}}],line:2},"193":{loc:{start:{line:2,column:14011},end:{line:2,column:14031}},type:"cond-expr",locations:[{start:{line:2,column:14013},end:{line:2,column:14024}},{start:{line:2,column:14025},end:{line:2,column:14031}}],line:2},"194":{loc:{start:{line:2,column:14019},end:{line:2,column:14023}},type:"binary-expr",locations:[{start:{line:2,column:14019},end:{line:2,column:14020}},{start:{line:2,column:14022},end:{line:2,column:14023}}],line:2},"195":{loc:{start:{line:2,column:14570},end:{line:2,column:14574}},type:"default-arg",locations:[{start:{line:2,column:14572},end:{line:2,column:14574}}],line:2},"196":{loc:{start:{line:2,column:14582},end:{line:2,column:15169}},type:"if",locations:[{start:{line:2,column:14582},end:{line:2,column:15169}},{start:{line:2,column:14608},end:{line:2,column:15169}}],line:2},"197":{loc:{start:{line:2,column:14615},end:{line:2,column:14668}},type:"cond-expr",locations:[{start:{line:2,column:14638},end:{line:2,column:14649}},{start:{line:2,column:14650},end:{line:2,column:14668}}],line:2},"198":{loc:{start:{line:2,column:14675},end:{line:2,column:14750}},type:"binary-expr",locations:[{start:{line:2,column:14675},end:{line:2,column:14683}},{start:{line:2,column:14686},end:{line:2,column:14749}}],line:2},"199":{loc:{start:{line:2,column:14686},end:{line:2,column:14749}},type:"cond-expr",locations:[{start:{line:2,column:14708},end:{line:2,column:14718}},{start:{line:2,column:14719},end:{line:2,column:14749}}],line:2},"200":{loc:{start:{line:2,column:14763},end:{line:2,column:14790}},type:"cond-expr",locations:[{start:{line:2,column:14779},end:{line:2,column:14785}},{start:{line:2,column:14786},end:{line:2,column:14790}}],line:2},"201":{loc:{start:{line:2,column:14874},end:{line:2,column:14896}},type:"binary-expr",locations:[{start:{line:2,column:14874},end:{line:2,column:14888}},{start:{line:2,column:14890},end:{line:2,column:14896}}],line:2},"202":{loc:{start:{line:2,column:15215},end:{line:2,column:15264}},type:"if",locations:[{start:{line:2,column:15215},end:{line:2,column:15264}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:2},"203":{loc:{start:{line:2,column:15218},end:{line:2,column:15254}},type:"binary-expr",locations:[{start:{line:2,column:15218},end:{line:2,column:15232}},{start:{line:2,column:15234},end:{line:2,column:15254}}],line:2},"204":{loc:{start:{line:2,column:15299},end:{line:2,column:15799}},type:"switch",locations:[{start:{line:2,column:15325},end:{line:2,column:15746}},{start:{line:2,column:15746},end:{line:2,column:15770}},{start:{line:2,column:15770},end:{line:2,column:15798}}],line:2},"205":{loc:{start:{line:2,column:15306},end:{line:2,column:15323}},type:"binary-expr",locations:[{start:{line:2,column:15306},end:{line:2,column:15315}},{start:{line:2,column:15317},end:{line:2,column:15323}}],line:2},"206":{loc:{start:{line:2,column:15336},end:{line:2,column:15746}},type:"switch",locations:[{start:{line:2,column:15359},end:{line:2,column:15486}},{start:{line:2,column:15486},end:{line:2,column:15599}},{start:{line:2,column:15599},end:{line:2,column:15710}},{start:{line:2,column:15710},end:{line:2,column:15745}}],line:2},"207":{loc:{start:{line:2,column:15397},end:{line:2,column:15469}},type:"if",locations:[{start:{line:2,column:15397},end:{line:2,column:15469}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:2},"208":{loc:{start:{line:2,column:15400},end:{line:2,column:15447}},type:"binary-expr",locations:[{start:{line:2,column:15400},end:{line:2,column:15413}},{start:{line:2,column:15415},end:{line:2,column:15447}}],line:2},"209":{loc:{start:{line:2,column:15517},end:{line:2,column:15582}},type:"if",locations:[{start:{line:2,column:15517},end:{line:2,column:15582}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:2},"210":{loc:{start:{line:2,column:15520},end:{line:2,column:15560}},type:"binary-expr",locations:[{start:{line:2,column:15520},end:{line:2,column:15533}},{start:{line:2,column:15535},end:{line:2,column:15560}}],line:2},"211":{loc:{start:{line:2,column:15630},end:{line:2,column:15693}},type:"if",locations:[{start:{line:2,column:15630},end:{line:2,column:15693}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:2},"212":{loc:{start:{line:2,column:15633},end:{line:2,column:15671}},type:"binary-expr",locations:[{start:{line:2,column:15633},end:{line:2,column:15646}},{start:{line:2,column:15648},end:{line:2,column:15671}}],line:2},"213":{loc:{start:{line:2,column:15809},end:{line:2,column:15813}},type:"default-arg",locations:[{start:{line:2,column:15811},end:{line:2,column:15813}}],line:2},"214":{loc:{start:{line:2,column:15855},end:{line:2,column:15859}},type:"default-arg",locations:[{start:{line:2,column:15857},end:{line:2,column:15859}}],line:2},"215":{loc:{start:{line:2,column:15899},end:{line:2,column:15903}},type:"default-arg",locations:[{start:{line:2,column:15901},end:{line:2,column:15903}}],line:2},"216":{loc:{start:{line:2,column:16068},end:{line:2,column:16072}},type:"default-arg",locations:[{start:{line:2,column:16070},end:{line:2,column:16072}}],line:2},"217":{loc:{start:{line:2,column:16119},end:{line:2,column:16123}},type:"default-arg",locations:[{start:{line:2,column:16121},end:{line:2,column:16123}}],line:2},"218":{loc:{start:{line:2,column:16172},end:{line:2,column:16176}},type:"default-arg",locations:[{start:{line:2,column:16174},end:{line:2,column:16176}}],line:2},"219":{loc:{start:{line:2,column:16223},end:{line:2,column:16227}},type:"default-arg",locations:[{start:{line:2,column:16225},end:{line:2,column:16227}}],line:2},"220":{loc:{start:{line:2,column:16305},end:{line:2,column:16309}},type:"binary-expr",locations:[{start:{line:2,column:16305},end:{line:2,column:16306}},{start:{line:2,column:16308},end:{line:2,column:16309}}],line:2},"221":{loc:{start:{line:2,column:16637},end:{line:2,column:16656}},type:"binary-expr",locations:[{start:{line:2,column:16637},end:{line:2,column:16652}},{start:{line:2,column:16654},end:{line:2,column:16656}}],line:2},"222":{loc:{start:{line:2,column:16664},end:{line:2,column:16771}},type:"binary-expr",locations:[{start:{line:2,column:16664},end:{line:2,column:16689}},{start:{line:2,column:16692},end:{line:2,column:16770}}],line:2},"223":{loc:{start:{line:2,column:16827},end:{line:2,column:16831}},type:"binary-expr",locations:[{start:{line:2,column:16827},end:{line:2,column:16828}},{start:{line:2,column:16830},end:{line:2,column:16831}}],line:2},"224":{loc:{start:{line:2,column:16973},end:{line:2,column:16977}},type:"binary-expr",locations:[{start:{line:2,column:16973},end:{line:2,column:16974}},{start:{line:2,column:16976},end:{line:2,column:16977}}],line:2},"225":{loc:{start:{line:2,column:17047},end:{line:2,column:17068}},type:"cond-expr",locations:[{start:{line:2,column:17049},end:{line:2,column:17060}},{start:{line:2,column:17061},end:{line:2,column:17068}}],line:2},"226":{loc:{start:{line:2,column:17055},end:{line:2,column:17059}},type:"binary-expr",locations:[{start:{line:2,column:17055},end:{line:2,column:17056}},{start:{line:2,column:17058},end:{line:2,column:17059}}],line:2},"227":{loc:{start:{line:2,column:17122},end:{line:2,column:17181}},type:"if",locations:[{start:{line:2,column:17122},end:{line:2,column:17181}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:2},"228":{loc:{start:{line:2,column:17125},end:{line:2,column:17168}},type:"binary-expr",locations:[{start:{line:2,column:17125},end:{line:2,column:17131}},{start:{line:2,column:17133},end:{line:2,column:17149}},{start:{line:2,column:17151},end:{line:2,column:17168}}],line:2},"229":{loc:{start:{line:2,column:17252},end:{line:2,column:17272}},type:"if",locations:[{start:{line:2,column:17252},end:{line:2,column:17272}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:2},"230":{loc:{start:{line:2,column:17329},end:{line:2,column:17398}},type:"binary-expr",locations:[{start:{line:2,column:17329},end:{line:2,column:17336}},{start:{line:2,column:17338},end:{line:2,column:17355}},{start:{line:2,column:17358},end:{line:2,column:17397}}],line:2},"231":{loc:{start:{line:2,column:17725},end:{line:2,column:17730}},type:"binary-expr",locations:[{start:{line:2,column:17725},end:{line:2,column:17726}},{start:{line:2,column:17728},end:{line:2,column:17730}}],line:2},"232":{loc:{start:{line:2,column:17870},end:{line:2,column:17895}},type:"binary-expr",locations:[{start:{line:2,column:17870},end:{line:2,column:17889}},{start:{line:2,column:17891},end:{line:2,column:17895}}],line:2}},s:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"116":0,"117":0,"118":0,"119":0,"120":0,"121":0,"122":0,"123":0,"124":0,"125":0,"126":0,"127":0,"128":0,"129":0,"130":0,"131":0,"132":0,"133":0,"134":0,"135":0,"136":0,"137":0,"138":0,"139":0,"140":0,"141":0,"142":0,"143":0,"144":0,"145":0,"146":0,"147":0,"148":0,"149":0,"150":0,"151":0,"152":0,"153":0,"154":0,"155":0,"156":0,"157":0,"158":0,"159":0,"160":0,"161":0,"162":0,"163":0,"164":0,"165":0,"166":0,"167":0,"168":0,"169":0,"170":0,"171":0,"172":0,"173":0,"174":0,"175":0,"176":0,"177":0,"178":0,"179":0,"180":0,"181":0,"182":0,"183":0,"184":0,"185":0,"186":0,"187":0,"188":0,"189":0,"190":0,"191":0,"192":0,"193":0,"194":0,"195":0,"196":0,"197":0,"198":0,"199":0,"200":0,"201":0,"202":0,"203":0,"204":0,"205":0,"206":0,"207":0,"208":0,"209":0,"210":0,"211":0,"212":0,"213":0,"214":0,"215":0,"216":0,"217":0,"218":0,"219":0,"220":0,"221":0,"222":0,"223":0,"224":0,"225":0,"226":0,"227":0,"228":0,"229":0,"230":0,"231":0,"232":0,"233":0,"234":0,"235":0,"236":0,"237":0,"238":0,"239":0,"240":0,"241":0,"242":0,"243":0,"244":0,"245":0,"246":0,"247":0,"248":0,"249":0,"250":0,"251":0,"252":0,"253":0,"254":0,"255":0,"256":0,"257":0,"258":0,"259":0,"260":0,"261":0,"262":0,"263":0,"264":0,"265":0,"266":0,"267":0,"268":0,"269":0,"270":0,"271":0,"272":0,"273":0,"274":0,"275":0,"276":0,"277":0,"278":0,"279":0,"280":0,"281":0,"282":0,"283":0,"284":0,"285":0,"286":0,"287":0,"288":0,"289":0,"290":0,"291":0,"292":0,"293":0,"294":0,"295":0,"296":0,"297":0,"298":0,"299":0,"300":0,"301":0,"302":0,"303":0,"304":0,"305":0,"306":0,"307":0,"308":0,"309":0,"310":0,"311":0,"312":0,"313":0,"314":0,"315":0,"316":0,"317":0,"318":0,"319":0,"320":0,"321":0,"322":0,"323":0,"324":0,"325":0,"326":0,"327":0,"328":0,"329":0,"330":0,"331":0,"332":0,"333":0,"334":0,"335":0,"336":0,"337":0,"338":0,"339":0,"340":0,"341":0,"342":0,"343":0,"344":0,"345":0,"346":0,"347":0,"348":0,"349":0,"350":0,"351":0,"352":0,"353":0,"354":0,"355":0,"356":0,"357":0,"358":0,"359":0,"360":0,"361":0,"362":0,"363":0,"364":0,"365":0,"366":0,"367":0,"368":0,"369":0,"370":0,"371":0,"372":0,"373":0,"374":0,"375":0,"376":0,"377":0,"378":0,"379":0,"380":0,"381":0,"382":0,"383":0,"384":0,"385":0,"386":0,"387":0,"388":0,"389":0,"390":0,"391":0,"392":0,"393":0,"394":0,"395":0,"396":0},f:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"116":0,"117":0,"118":0,"119":0,"120":0,"121":0,"122":0,"123":0,"124":0,"125":0,"126":0,"127":0,"128":0,"129":0,"130":0,"131":0,"132":0,"133":0,"134":0,"135":0,"136":0,"137":0,"138":0,"139":0,"140":0,"141":0,"142":0,"143":0,"144":0,"145":0,"146":0,"147":0},b:{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0],"9":[0,0],"10":[0,0],"11":[0,0],"12":[0,0],"13":[0,0],"14":[0,0],"15":[0,0,0],"16":[0,0],"17":[0,0],"18":[0,0],"19":[0,0],"20":[0,0],"21":[0,0],"22":[0,0],"23":[0,0],"24":[0,0],"25":[0,0],"26":[0,0],"27":[0,0],"28":[0,0],"29":[0,0],"30":[0],"31":[0,0],"32":[0,0],"33":[0,0],"34":[0,0],"35":[0,0],"36":[0,0],"37":[0,0],"38":[0,0],"39":[0,0],"40":[0,0],"41":[0,0],"42":[0,0],"43":[0,0,0],"44":[0,0],"45":[0,0],"46":[0,0],"47":[0,0],"48":[0,0],"49":[0,0],"50":[0,0,0,0,0,0],"51":[0,0],"52":[0,0],"53":[0,0],"54":[0,0],"55":[0,0],"56":[0,0],"57":[0,0],"58":[0,0],"59":[0,0],"60":[0,0],"61":[0,0],"62":[0,0],"63":[0,0],"64":[0,0],"65":[0,0],"66":[0,0],"67":[0,0],"68":[0,0],"69":[0,0],"70":[0,0],"71":[0,0],"72":[0,0],"73":[0,0],"74":[0,0],"75":[0,0],"76":[0,0],"77":[0,0],"78":[0,0],"79":[0,0],"80":[0,0,0,0,0],"81":[0,0],"82":[0,0],"83":[0,0,0],"84":[0,0],"85":[0,0],"86":[0,0],"87":[0,0],"88":[0,0],"89":[0,0],"90":[0,0],"91":[0,0],"92":[0,0,0],"93":[0],"94":[0,0],"95":[0,0],"96":[0,0],"97":[0,0],"98":[0,0],"99":[0,0],"100":[0,0],"101":[0,0],"102":[0,0],"103":[0,0],"104":[0,0],"105":[0,0],"106":[0,0],"107":[0,0],"108":[0,0],"109":[0,0],"110":[0,0],"111":[0,0],"112":[0,0],"113":[0,0],"114":[0,0],"115":[0,0],"116":[0,0],"117":[0],"118":[0],"119":[0,0],"120":[0,0],"121":[0,0],"122":[0,0],"123":[0,0],"124":[0],"125":[0],"126":[0,0],"127":[0,0],"128":[0,0],"129":[0,0,0],"130":[0],"131":[0,0],"132":[0],"133":[0,0],"134":[0,0],"135":[0,0],"136":[0,0],"137":[0,0,0],"138":[0,0],"139":[0,0],"140":[0,0],"141":[0,0],"142":[0,0],"143":[0,0],"144":[0,0],"145":[0,0],"146":[0,0],"147":[0,0],"148":[0,0],"149":[0,0],"150":[0,0],"151":[0,0],"152":[0,0],"153":[0,0],"154":[0,0],"155":[0,0],"156":[0,0],"157":[0,0],"158":[0,0],"159":[0,0],"160":[0,0],"161":[0,0],"162":[0,0],"163":[0,0],"164":[0,0],"165":[0,0],"166":[0,0],"167":[0,0],"168":[0,0],"169":[0,0],"170":[0,0],"171":[0,0],"172":[0,0],"173":[0,0],"174":[0,0],"175":[0,0],"176":[0,0],"177":[0,0],"178":[0,0,0],"179":[0,0],"180":[0,0],"181":[0,0,0],"182":[0,0],"183":[0,0,0],"184":[0,0],"185":[0,0],"186":[0,0],"187":[0,0],"188":[0,0],"189":[0,0],"190":[0,0],"191":[0,0],"192":[0,0],"193":[0,0],"194":[0,0],"195":[0],"196":[0,0],"197":[0,0],"198":[0,0],"199":[0,0],"200":[0,0],"201":[0,0],"202":[0,0],"203":[0,0],"204":[0,0,0],"205":[0,0],"206":[0,0,0,0],"207":[0,0],"208":[0,0],"209":[0,0],"210":[0,0],"211":[0,0],"212":[0,0],"213":[0],"214":[0],"215":[0],"216":[0],"217":[0],"218":[0],"219":[0],"220":[0,0],"221":[0,0],"222":[0,0],"223":[0,0],"224":[0,0],"225":[0,0],"226":[0,0],"227":[0,0],"228":[0,0,0],"229":[0,0],"230":[0,0,0],"231":[0,0],"232":[0,0]},inputSourceMap:{version:3,sources:["node_modules/@angular/common/fesm2022/_module-chunk.mjs","src/app/core/tokens/api-base-url.token.ts"],sourcesContent:["/**\n * @license Angular v21.2.4\n * (c) 2010-2026 Google LLC. https://angular.dev/\n * License: MIT\n */\n\nimport * as i0 from '@angular/core';\nimport { \u0275RuntimeError as _RuntimeError, InjectionToken, inject, NgZone, DestroyRef, Injectable, \u0275formatRuntimeError as _formatRuntimeError, \u0275TracingService as _TracingService, runInInjectionContext, PendingTasks, \u0275Console as _Console, DOCUMENT, Inject, EnvironmentInjector, makeEnvironmentProviders, NgModule } from '@angular/core';\nimport { switchMap, finalize, concatMap, filter, map } from 'rxjs/operators';\nimport { Observable, from, of } from 'rxjs';\nimport { XhrFactory, parseCookieValue } from './_xhr-chunk.mjs';\nimport { PlatformLocation } from './_platform_location-chunk.mjs';\nclass HttpHeaders {\n headers;\n normalizedNames = /*#__PURE__*/new Map();\n lazyInit;\n lazyUpdate = null;\n constructor(headers) {\n if (!headers) {\n this.headers = new Map();\n } else if (typeof headers === 'string') {\n this.lazyInit = () => {\n this.headers = new Map();\n headers.split('\\n').forEach(line => {\n const index = line.indexOf(':');\n if (index > 0) {\n const name = line.slice(0, index);\n const value = line.slice(index + 1).trim();\n this.addHeaderEntry(name, value);\n }\n });\n };\n } else if (typeof Headers !== 'undefined' && headers instanceof Headers) {\n this.headers = new Map();\n headers.forEach((value, name) => {\n this.addHeaderEntry(name, value);\n });\n } else {\n this.lazyInit = () => {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n assertValidHeaders(headers);\n }\n this.headers = new Map();\n Object.entries(headers).forEach(([name, values]) => {\n this.setHeaderEntries(name, values);\n });\n };\n }\n }\n has(name) {\n this.init();\n return this.headers.has(name.toLowerCase());\n }\n get(name) {\n this.init();\n const values = this.headers.get(name.toLowerCase());\n return values && values.length > 0 ? values[0] : null;\n }\n keys() {\n this.init();\n return Array.from(this.normalizedNames.values());\n }\n getAll(name) {\n this.init();\n return this.headers.get(name.toLowerCase()) || null;\n }\n append(name, value) {\n return this.clone({\n name,\n value,\n op: 'a'\n });\n }\n set(name, value) {\n return this.clone({\n name,\n value,\n op: 's'\n });\n }\n delete(name, value) {\n return this.clone({\n name,\n value,\n op: 'd'\n });\n }\n maybeSetNormalizedName(name, lcName) {\n if (!this.normalizedNames.has(lcName)) {\n this.normalizedNames.set(lcName, name);\n }\n }\n init() {\n if (!!this.lazyInit) {\n if (this.lazyInit instanceof HttpHeaders) {\n this.copyFrom(this.lazyInit);\n } else {\n this.lazyInit();\n }\n this.lazyInit = null;\n if (!!this.lazyUpdate) {\n this.lazyUpdate.forEach(update => this.applyUpdate(update));\n this.lazyUpdate = null;\n }\n }\n }\n copyFrom(other) {\n other.init();\n Array.from(other.headers.keys()).forEach(key => {\n this.headers.set(key, other.headers.get(key));\n this.normalizedNames.set(key, other.normalizedNames.get(key));\n });\n }\n clone(update) {\n const clone = new HttpHeaders();\n clone.lazyInit = !!this.lazyInit && this.lazyInit instanceof HttpHeaders ? this.lazyInit : this;\n clone.lazyUpdate = (this.lazyUpdate || []).concat([update]);\n return clone;\n }\n applyUpdate(update) {\n const key = update.name.toLowerCase();\n switch (update.op) {\n case 'a':\n case 's':\n let value = update.value;\n if (typeof value === 'string') {\n value = [value];\n }\n if (value.length === 0) {\n return;\n }\n this.maybeSetNormalizedName(update.name, key);\n const base = (update.op === 'a' ? this.headers.get(key) : undefined) || [];\n base.push(...value);\n this.headers.set(key, base);\n break;\n case 'd':\n const toDelete = update.value;\n if (!toDelete) {\n this.headers.delete(key);\n this.normalizedNames.delete(key);\n } else {\n let existing = this.headers.get(key);\n if (!existing) {\n return;\n }\n existing = existing.filter(value => toDelete.indexOf(value) === -1);\n if (existing.length === 0) {\n this.headers.delete(key);\n this.normalizedNames.delete(key);\n } else {\n this.headers.set(key, existing);\n }\n }\n break;\n }\n }\n addHeaderEntry(name, value) {\n const key = name.toLowerCase();\n this.maybeSetNormalizedName(name, key);\n if (this.headers.has(key)) {\n this.headers.get(key).push(value);\n } else {\n this.headers.set(key, [value]);\n }\n }\n setHeaderEntries(name, values) {\n const headerValues = (Array.isArray(values) ? values : [values]).map(value => value.toString());\n const key = name.toLowerCase();\n this.headers.set(key, headerValues);\n this.maybeSetNormalizedName(name, key);\n }\n forEach(fn) {\n this.init();\n Array.from(this.normalizedNames.keys()).forEach(key => fn(this.normalizedNames.get(key), this.headers.get(key)));\n }\n}\nfunction assertValidHeaders(headers) {\n for (const [key, value] of Object.entries(headers)) {\n if (!(typeof value === 'string' || typeof value === 'number') && !Array.isArray(value)) {\n throw new Error(`Unexpected value of the \\`${key}\\` header provided. ` + `Expecting either a string, a number or an array, but got: \\`${value}\\`.`);\n }\n }\n}\nclass HttpContextToken {\n defaultValue;\n constructor(defaultValue) {\n this.defaultValue = defaultValue;\n }\n}\nclass HttpContext {\n map = /*#__PURE__*/new Map();\n set(token, value) {\n this.map.set(token, value);\n return this;\n }\n get(token) {\n if (!this.map.has(token)) {\n this.map.set(token, token.defaultValue());\n }\n return this.map.get(token);\n }\n delete(token) {\n this.map.delete(token);\n return this;\n }\n has(token) {\n return this.map.has(token);\n }\n keys() {\n return this.map.keys();\n }\n}\nclass HttpUrlEncodingCodec {\n encodeKey(key) {\n return standardEncoding(key);\n }\n encodeValue(value) {\n return standardEncoding(value);\n }\n decodeKey(key) {\n return decodeURIComponent(key);\n }\n decodeValue(value) {\n return decodeURIComponent(value);\n }\n}\nfunction paramParser(rawParams, codec) {\n const map = new Map();\n if (rawParams.length > 0) {\n const params = rawParams.replace(/^\\?/, '').split('&');\n params.forEach(param => {\n const eqIdx = param.indexOf('=');\n const [key, val] = eqIdx == -1 ? [codec.decodeKey(param), ''] : [codec.decodeKey(param.slice(0, eqIdx)), codec.decodeValue(param.slice(eqIdx + 1))];\n const list = map.get(key) || [];\n list.push(val);\n map.set(key, list);\n });\n }\n return map;\n}\nconst STANDARD_ENCODING_REGEX = /%(\\d[a-f0-9])/gi;\nconst STANDARD_ENCODING_REPLACEMENTS = {\n '40': '@',\n '3A': ':',\n '24': '$',\n '2C': ',',\n '3B': ';',\n '3D': '=',\n '3F': '?',\n '2F': '/'\n};\nfunction standardEncoding(v) {\n return encodeURIComponent(v).replace(STANDARD_ENCODING_REGEX, (s, t) => STANDARD_ENCODING_REPLACEMENTS[t] ?? s);\n}\nfunction valueToString(value) {\n return `${value}`;\n}\nclass HttpParams {\n map;\n encoder;\n updates = null;\n cloneFrom = null;\n constructor(options = {}) {\n this.encoder = options.encoder || new HttpUrlEncodingCodec();\n if (options.fromString) {\n if (options.fromObject) {\n throw new _RuntimeError(2805, ngDevMode && 'Cannot specify both fromString and fromObject.');\n }\n this.map = paramParser(options.fromString, this.encoder);\n } else if (!!options.fromObject) {\n this.map = new Map();\n Object.keys(options.fromObject).forEach(key => {\n const value = options.fromObject[key];\n const values = Array.isArray(value) ? value.map(valueToString) : [valueToString(value)];\n this.map.set(key, values);\n });\n } else {\n this.map = null;\n }\n }\n has(param) {\n this.init();\n return this.map.has(param);\n }\n get(param) {\n this.init();\n const res = this.map.get(param);\n return !!res ? res[0] : null;\n }\n getAll(param) {\n this.init();\n return this.map.get(param) || null;\n }\n keys() {\n this.init();\n return Array.from(this.map.keys());\n }\n append(param, value) {\n return this.clone({\n param,\n value,\n op: 'a'\n });\n }\n appendAll(params) {\n const updates = [];\n Object.keys(params).forEach(param => {\n const value = params[param];\n if (Array.isArray(value)) {\n value.forEach(_value => {\n updates.push({\n param,\n value: _value,\n op: 'a'\n });\n });\n } else {\n updates.push({\n param,\n value: value,\n op: 'a'\n });\n }\n });\n return this.clone(updates);\n }\n set(param, value) {\n return this.clone({\n param,\n value,\n op: 's'\n });\n }\n delete(param, value) {\n return this.clone({\n param,\n value,\n op: 'd'\n });\n }\n toString() {\n this.init();\n return this.keys().map(key => {\n const eKey = this.encoder.encodeKey(key);\n return this.map.get(key).map(value => eKey + '=' + this.encoder.encodeValue(value)).join('&');\n }).filter(param => param !== '').join('&');\n }\n clone(update) {\n const clone = new HttpParams({\n encoder: this.encoder\n });\n clone.cloneFrom = this.cloneFrom || this;\n clone.updates = (this.updates || []).concat(update);\n return clone;\n }\n init() {\n if (this.map === null) {\n this.map = new Map();\n }\n if (this.cloneFrom !== null) {\n this.cloneFrom.init();\n this.cloneFrom.keys().forEach(key => this.map.set(key, this.cloneFrom.map.get(key)));\n this.updates.forEach(update => {\n switch (update.op) {\n case 'a':\n case 's':\n const base = (update.op === 'a' ? this.map.get(update.param) : undefined) || [];\n base.push(valueToString(update.value));\n this.map.set(update.param, base);\n break;\n case 'd':\n if (update.value !== undefined) {\n let base = this.map.get(update.param) || [];\n const idx = base.indexOf(valueToString(update.value));\n if (idx !== -1) {\n base.splice(idx, 1);\n }\n if (base.length > 0) {\n this.map.set(update.param, base);\n } else {\n this.map.delete(update.param);\n }\n } else {\n this.map.delete(update.param);\n break;\n }\n }\n });\n this.cloneFrom = this.updates = null;\n }\n }\n}\nfunction mightHaveBody(method) {\n switch (method) {\n case 'DELETE':\n case 'GET':\n case 'HEAD':\n case 'OPTIONS':\n case 'JSONP':\n return false;\n default:\n return true;\n }\n}\nfunction isArrayBuffer(value) {\n return typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer;\n}\nfunction isBlob(value) {\n return typeof Blob !== 'undefined' && value instanceof Blob;\n}\nfunction isFormData(value) {\n return typeof FormData !== 'undefined' && value instanceof FormData;\n}\nfunction isUrlSearchParams(value) {\n return typeof URLSearchParams !== 'undefined' && value instanceof URLSearchParams;\n}\nconst CONTENT_TYPE_HEADER = 'Content-Type';\nconst ACCEPT_HEADER = 'Accept';\nconst TEXT_CONTENT_TYPE = 'text/plain';\nconst JSON_CONTENT_TYPE = 'application/json';\nconst ACCEPT_HEADER_VALUE = `${JSON_CONTENT_TYPE}, ${TEXT_CONTENT_TYPE}, */*`;\nclass HttpRequest {\n url;\n body = null;\n headers;\n context;\n reportProgress = false;\n withCredentials = false;\n credentials;\n keepalive = false;\n cache;\n priority;\n mode;\n redirect;\n referrer;\n integrity;\n referrerPolicy;\n responseType = 'json';\n method;\n params;\n urlWithParams;\n transferCache;\n timeout;\n constructor(method, url, third, fourth) {\n this.url = url;\n this.method = method.toUpperCase();\n let options;\n if (mightHaveBody(this.method) || !!fourth) {\n this.body = third !== undefined ? third : null;\n options = fourth;\n } else {\n options = third;\n }\n if (options) {\n this.reportProgress = !!options.reportProgress;\n this.withCredentials = !!options.withCredentials;\n this.keepalive = !!options.keepalive;\n if (!!options.responseType) {\n this.responseType = options.responseType;\n }\n if (options.headers) {\n this.headers = options.headers;\n }\n if (options.context) {\n this.context = options.context;\n }\n if (options.params) {\n this.params = options.params;\n }\n if (options.priority) {\n this.priority = options.priority;\n }\n if (options.cache) {\n this.cache = options.cache;\n }\n if (options.credentials) {\n this.credentials = options.credentials;\n }\n if (typeof options.timeout === 'number') {\n if (options.timeout < 1 || !Number.isInteger(options.timeout)) {\n throw new _RuntimeError(2822, ngDevMode ? '`timeout` must be a positive integer value' : '');\n }\n this.timeout = options.timeout;\n }\n if (options.mode) {\n this.mode = options.mode;\n }\n if (options.redirect) {\n this.redirect = options.redirect;\n }\n if (options.integrity) {\n this.integrity = options.integrity;\n }\n if (options.referrer) {\n this.referrer = options.referrer;\n }\n if (options.referrerPolicy) {\n this.referrerPolicy = options.referrerPolicy;\n }\n this.transferCache = options.transferCache;\n }\n this.headers ??= new HttpHeaders();\n this.context ??= new HttpContext();\n if (!this.params) {\n this.params = new HttpParams();\n this.urlWithParams = url;\n } else {\n const params = this.params.toString();\n if (params.length === 0) {\n this.urlWithParams = url;\n } else {\n const qIdx = url.indexOf('?');\n const sep = qIdx === -1 ? '?' : qIdx < url.length - 1 ? '&' : '';\n this.urlWithParams = url + sep + params;\n }\n }\n }\n serializeBody() {\n if (this.body === null) {\n return null;\n }\n if (typeof this.body === 'string' || isArrayBuffer(this.body) || isBlob(this.body) || isFormData(this.body) || isUrlSearchParams(this.body)) {\n return this.body;\n }\n if (this.body instanceof HttpParams) {\n return this.body.toString();\n }\n if (typeof this.body === 'object' || typeof this.body === 'boolean' || Array.isArray(this.body)) {\n return JSON.stringify(this.body);\n }\n return this.body.toString();\n }\n detectContentTypeHeader() {\n if (this.body === null) {\n return null;\n }\n if (isFormData(this.body)) {\n return null;\n }\n if (isBlob(this.body)) {\n return this.body.type || null;\n }\n if (isArrayBuffer(this.body)) {\n return null;\n }\n if (typeof this.body === 'string') {\n return TEXT_CONTENT_TYPE;\n }\n if (this.body instanceof HttpParams) {\n return 'application/x-www-form-urlencoded;charset=UTF-8';\n }\n if (typeof this.body === 'object' || typeof this.body === 'number' || typeof this.body === 'boolean') {\n return JSON_CONTENT_TYPE;\n }\n return null;\n }\n clone(update = {}) {\n const method = update.method || this.method;\n const url = update.url || this.url;\n const responseType = update.responseType || this.responseType;\n const keepalive = update.keepalive ?? this.keepalive;\n const priority = update.priority || this.priority;\n const cache = update.cache || this.cache;\n const mode = update.mode || this.mode;\n const redirect = update.redirect || this.redirect;\n const credentials = update.credentials || this.credentials;\n const referrer = update.referrer || this.referrer;\n const integrity = update.integrity || this.integrity;\n const referrerPolicy = update.referrerPolicy || this.referrerPolicy;\n const transferCache = update.transferCache ?? this.transferCache;\n const timeout = update.timeout ?? this.timeout;\n const body = update.body !== undefined ? update.body : this.body;\n const withCredentials = update.withCredentials ?? this.withCredentials;\n const reportProgress = update.reportProgress ?? this.reportProgress;\n let headers = update.headers || this.headers;\n let params = update.params || this.params;\n const context = update.context ?? this.context;\n if (update.setHeaders !== undefined) {\n headers = Object.keys(update.setHeaders).reduce((headers, name) => headers.set(name, update.setHeaders[name]), headers);\n }\n if (update.setParams) {\n params = Object.keys(update.setParams).reduce((params, param) => params.set(param, update.setParams[param]), params);\n }\n return new HttpRequest(method, url, body, {\n params,\n headers,\n context,\n reportProgress,\n responseType,\n withCredentials,\n transferCache,\n keepalive,\n cache,\n priority,\n timeout,\n mode,\n redirect,\n credentials,\n referrer,\n integrity,\n referrerPolicy\n });\n }\n}\nvar HttpEventType = /*#__PURE__*/function (HttpEventType) {\n HttpEventType[HttpEventType[\"Sent\"] = 0] = \"Sent\";\n HttpEventType[HttpEventType[\"UploadProgress\"] = 1] = \"UploadProgress\";\n HttpEventType[HttpEventType[\"ResponseHeader\"] = 2] = \"ResponseHeader\";\n HttpEventType[HttpEventType[\"DownloadProgress\"] = 3] = \"DownloadProgress\";\n HttpEventType[HttpEventType[\"Response\"] = 4] = \"Response\";\n HttpEventType[HttpEventType[\"User\"] = 5] = \"User\";\n return HttpEventType;\n}(HttpEventType || {});\nclass HttpResponseBase {\n headers;\n status;\n statusText;\n url;\n ok;\n type;\n redirected;\n responseType;\n constructor(init, defaultStatus = 200, defaultStatusText = 'OK') {\n this.headers = init.headers || new HttpHeaders();\n this.status = init.status !== undefined ? init.status : defaultStatus;\n this.statusText = init.statusText || defaultStatusText;\n this.url = init.url || null;\n this.redirected = init.redirected;\n this.responseType = init.responseType;\n this.ok = this.status >= 200 && this.status < 300;\n }\n}\nclass HttpHeaderResponse extends HttpResponseBase {\n constructor(init = {}) {\n super(init);\n }\n type = HttpEventType.ResponseHeader;\n clone(update = {}) {\n return new HttpHeaderResponse({\n headers: update.headers || this.headers,\n status: update.status !== undefined ? update.status : this.status,\n statusText: update.statusText || this.statusText,\n url: update.url || this.url || undefined\n });\n }\n}\nclass HttpResponse extends HttpResponseBase {\n body;\n constructor(init = {}) {\n super(init);\n this.body = init.body !== undefined ? init.body : null;\n }\n type = HttpEventType.Response;\n clone(update = {}) {\n return new HttpResponse({\n body: update.body !== undefined ? update.body : this.body,\n headers: update.headers || this.headers,\n status: update.status !== undefined ? update.status : this.status,\n statusText: update.statusText || this.statusText,\n url: update.url || this.url || undefined,\n redirected: update.redirected ?? this.redirected,\n responseType: update.responseType ?? this.responseType\n });\n }\n}\nclass HttpErrorResponse extends HttpResponseBase {\n name = 'HttpErrorResponse';\n message;\n error;\n ok = false;\n constructor(init) {\n super(init, 0, 'Unknown Error');\n if (this.status >= 200 && this.status < 300) {\n this.message = `Http failure during parsing for ${init.url || '(unknown url)'}`;\n } else {\n this.message = `Http failure response for ${init.url || '(unknown url)'}: ${init.status} ${init.statusText}`;\n }\n this.error = init.error || null;\n }\n}\nconst HTTP_STATUS_CODE_OK = 200;\nconst HTTP_STATUS_CODE_NO_CONTENT = 204;\nvar HttpStatusCode = /*#__PURE__*/function (HttpStatusCode) {\n HttpStatusCode[HttpStatusCode[\"Continue\"] = 100] = \"Continue\";\n HttpStatusCode[HttpStatusCode[\"SwitchingProtocols\"] = 101] = \"SwitchingProtocols\";\n HttpStatusCode[HttpStatusCode[\"Processing\"] = 102] = \"Processing\";\n HttpStatusCode[HttpStatusCode[\"EarlyHints\"] = 103] = \"EarlyHints\";\n HttpStatusCode[HttpStatusCode[\"Ok\"] = 200] = \"Ok\";\n HttpStatusCode[HttpStatusCode[\"Created\"] = 201] = \"Created\";\n HttpStatusCode[HttpStatusCode[\"Accepted\"] = 202] = \"Accepted\";\n HttpStatusCode[HttpStatusCode[\"NonAuthoritativeInformation\"] = 203] = \"NonAuthoritativeInformation\";\n HttpStatusCode[HttpStatusCode[\"NoContent\"] = 204] = \"NoContent\";\n HttpStatusCode[HttpStatusCode[\"ResetContent\"] = 205] = \"ResetContent\";\n HttpStatusCode[HttpStatusCode[\"PartialContent\"] = 206] = \"PartialContent\";\n HttpStatusCode[HttpStatusCode[\"MultiStatus\"] = 207] = \"MultiStatus\";\n HttpStatusCode[HttpStatusCode[\"AlreadyReported\"] = 208] = \"AlreadyReported\";\n HttpStatusCode[HttpStatusCode[\"ImUsed\"] = 226] = \"ImUsed\";\n HttpStatusCode[HttpStatusCode[\"MultipleChoices\"] = 300] = \"MultipleChoices\";\n HttpStatusCode[HttpStatusCode[\"MovedPermanently\"] = 301] = \"MovedPermanently\";\n HttpStatusCode[HttpStatusCode[\"Found\"] = 302] = \"Found\";\n HttpStatusCode[HttpStatusCode[\"SeeOther\"] = 303] = \"SeeOther\";\n HttpStatusCode[HttpStatusCode[\"NotModified\"] = 304] = \"NotModified\";\n HttpStatusCode[HttpStatusCode[\"UseProxy\"] = 305] = \"UseProxy\";\n HttpStatusCode[HttpStatusCode[\"Unused\"] = 306] = \"Unused\";\n HttpStatusCode[HttpStatusCode[\"TemporaryRedirect\"] = 307] = \"TemporaryRedirect\";\n HttpStatusCode[HttpStatusCode[\"PermanentRedirect\"] = 308] = \"PermanentRedirect\";\n HttpStatusCode[HttpStatusCode[\"BadRequest\"] = 400] = \"BadRequest\";\n HttpStatusCode[HttpStatusCode[\"Unauthorized\"] = 401] = \"Unauthorized\";\n HttpStatusCode[HttpStatusCode[\"PaymentRequired\"] = 402] = \"PaymentRequired\";\n HttpStatusCode[HttpStatusCode[\"Forbidden\"] = 403] = \"Forbidden\";\n HttpStatusCode[HttpStatusCode[\"NotFound\"] = 404] = \"NotFound\";\n HttpStatusCode[HttpStatusCode[\"MethodNotAllowed\"] = 405] = \"MethodNotAllowed\";\n HttpStatusCode[HttpStatusCode[\"NotAcceptable\"] = 406] = \"NotAcceptable\";\n HttpStatusCode[HttpStatusCode[\"ProxyAuthenticationRequired\"] = 407] = \"ProxyAuthenticationRequired\";\n HttpStatusCode[HttpStatusCode[\"RequestTimeout\"] = 408] = \"RequestTimeout\";\n HttpStatusCode[HttpStatusCode[\"Conflict\"] = 409] = \"Conflict\";\n HttpStatusCode[HttpStatusCode[\"Gone\"] = 410] = \"Gone\";\n HttpStatusCode[HttpStatusCode[\"LengthRequired\"] = 411] = \"LengthRequired\";\n HttpStatusCode[HttpStatusCode[\"PreconditionFailed\"] = 412] = \"PreconditionFailed\";\n HttpStatusCode[HttpStatusCode[\"PayloadTooLarge\"] = 413] = \"PayloadTooLarge\";\n HttpStatusCode[HttpStatusCode[\"UriTooLong\"] = 414] = \"UriTooLong\";\n HttpStatusCode[HttpStatusCode[\"UnsupportedMediaType\"] = 415] = \"UnsupportedMediaType\";\n HttpStatusCode[HttpStatusCode[\"RangeNotSatisfiable\"] = 416] = \"RangeNotSatisfiable\";\n HttpStatusCode[HttpStatusCode[\"ExpectationFailed\"] = 417] = \"ExpectationFailed\";\n HttpStatusCode[HttpStatusCode[\"ImATeapot\"] = 418] = \"ImATeapot\";\n HttpStatusCode[HttpStatusCode[\"MisdirectedRequest\"] = 421] = \"MisdirectedRequest\";\n HttpStatusCode[HttpStatusCode[\"UnprocessableEntity\"] = 422] = \"UnprocessableEntity\";\n HttpStatusCode[HttpStatusCode[\"Locked\"] = 423] = \"Locked\";\n HttpStatusCode[HttpStatusCode[\"FailedDependency\"] = 424] = \"FailedDependency\";\n HttpStatusCode[HttpStatusCode[\"TooEarly\"] = 425] = \"TooEarly\";\n HttpStatusCode[HttpStatusCode[\"UpgradeRequired\"] = 426] = \"UpgradeRequired\";\n HttpStatusCode[HttpStatusCode[\"PreconditionRequired\"] = 428] = \"PreconditionRequired\";\n HttpStatusCode[HttpStatusCode[\"TooManyRequests\"] = 429] = \"TooManyRequests\";\n HttpStatusCode[HttpStatusCode[\"RequestHeaderFieldsTooLarge\"] = 431] = \"RequestHeaderFieldsTooLarge\";\n HttpStatusCode[HttpStatusCode[\"UnavailableForLegalReasons\"] = 451] = \"UnavailableForLegalReasons\";\n HttpStatusCode[HttpStatusCode[\"InternalServerError\"] = 500] = \"InternalServerError\";\n HttpStatusCode[HttpStatusCode[\"NotImplemented\"] = 501] = \"NotImplemented\";\n HttpStatusCode[HttpStatusCode[\"BadGateway\"] = 502] = \"BadGateway\";\n HttpStatusCode[HttpStatusCode[\"ServiceUnavailable\"] = 503] = \"ServiceUnavailable\";\n HttpStatusCode[HttpStatusCode[\"GatewayTimeout\"] = 504] = \"GatewayTimeout\";\n HttpStatusCode[HttpStatusCode[\"HttpVersionNotSupported\"] = 505] = \"HttpVersionNotSupported\";\n HttpStatusCode[HttpStatusCode[\"VariantAlsoNegotiates\"] = 506] = \"VariantAlsoNegotiates\";\n HttpStatusCode[HttpStatusCode[\"InsufficientStorage\"] = 507] = \"InsufficientStorage\";\n HttpStatusCode[HttpStatusCode[\"LoopDetected\"] = 508] = \"LoopDetected\";\n HttpStatusCode[HttpStatusCode[\"NotExtended\"] = 510] = \"NotExtended\";\n HttpStatusCode[HttpStatusCode[\"NetworkAuthenticationRequired\"] = 511] = \"NetworkAuthenticationRequired\";\n return HttpStatusCode;\n}(HttpStatusCode || {});\nconst XSSI_PREFIX$1 = /^\\)\\]\\}',?\\n/;\nconst FETCH_BACKEND = /*#__PURE__*/new InjectionToken(typeof ngDevMode === 'undefined' || ngDevMode ? 'FETCH_BACKEND' : '');\nlet FetchBackend = /*#__PURE__*/(() => {\n class FetchBackend {\n fetchImpl = inject(FetchFactory, {\n optional: true\n })?.fetch ?? ((...args) => globalThis.fetch(...args));\n ngZone = inject(NgZone);\n destroyRef = inject(DestroyRef);\n handle(request) {\n return new Observable(observer => {\n const aborter = new AbortController();\n this.doRequest(request, aborter.signal, observer).then(noop, error => observer.error(new HttpErrorResponse({\n error\n })));\n let timeoutId;\n if (request.timeout) {\n timeoutId = this.ngZone.runOutsideAngular(() => setTimeout(() => {\n if (!aborter.signal.aborted) {\n aborter.abort(new DOMException('signal timed out', 'TimeoutError'));\n }\n }, request.timeout));\n }\n return () => {\n if (timeoutId !== undefined) {\n clearTimeout(timeoutId);\n }\n aborter.abort();\n };\n });\n }\n async doRequest(request, signal, observer) {\n const init = this.createRequestInit(request);\n let response;\n try {\n const fetchPromise = this.ngZone.runOutsideAngular(() => this.fetchImpl(request.urlWithParams, {\n signal,\n ...init\n }));\n silenceSuperfluousUnhandledPromiseRejection(fetchPromise);\n observer.next({\n type: HttpEventType.Sent\n });\n response = await fetchPromise;\n } catch (error) {\n observer.error(new HttpErrorResponse({\n error,\n status: error.status ?? 0,\n statusText: error.statusText,\n url: request.urlWithParams,\n headers: error.headers\n }));\n return;\n }\n const headers = new HttpHeaders(response.headers);\n const statusText = response.statusText;\n const url = response.url || request.urlWithParams;\n let status = response.status;\n let body = null;\n if (request.reportProgress) {\n observer.next(new HttpHeaderResponse({\n headers,\n status,\n statusText,\n url\n }));\n }\n if (response.body) {\n const contentLength = response.headers.get('content-length');\n const chunks = [];\n const reader = response.body.getReader();\n let receivedLength = 0;\n let decoder;\n let partialText;\n const reqZone = typeof Zone !== 'undefined' && Zone.current;\n let canceled = false;\n await this.ngZone.runOutsideAngular(async () => {\n while (true) {\n if (this.destroyRef.destroyed) {\n await reader.cancel();\n canceled = true;\n break;\n }\n const {\n done,\n value\n } = await reader.read();\n if (done) {\n break;\n }\n chunks.push(value);\n receivedLength += value.length;\n if (request.reportProgress) {\n partialText = request.responseType === 'text' ? (partialText ?? '') + (decoder ??= new TextDecoder()).decode(value, {\n stream: true\n }) : undefined;\n const reportProgress = () => observer.next({\n type: HttpEventType.DownloadProgress,\n total: contentLength ? +contentLength : undefined,\n loaded: receivedLength,\n partialText\n });\n reqZone ? reqZone.run(reportProgress) : reportProgress();\n }\n }\n });\n if (canceled) {\n observer.complete();\n return;\n }\n const chunksAll = this.concatChunks(chunks, receivedLength);\n try {\n const contentType = response.headers.get(CONTENT_TYPE_HEADER) ?? '';\n body = this.parseBody(request, chunksAll, contentType, status);\n } catch (error) {\n observer.error(new HttpErrorResponse({\n error,\n headers: new HttpHeaders(response.headers),\n status: response.status,\n statusText: response.statusText,\n url: response.url || request.urlWithParams\n }));\n return;\n }\n }\n if (status === 0) {\n status = body ? HTTP_STATUS_CODE_OK : 0;\n }\n const ok = status >= 200 && status < 300;\n const redirected = response.redirected;\n const responseType = response.type;\n if (ok) {\n observer.next(new HttpResponse({\n body,\n headers,\n status,\n statusText,\n url,\n redirected,\n responseType\n }));\n observer.complete();\n } else {\n observer.error(new HttpErrorResponse({\n error: body,\n headers,\n status,\n statusText,\n url,\n redirected,\n responseType\n }));\n }\n }\n parseBody(request, binContent, contentType, status) {\n switch (request.responseType) {\n case 'json':\n const text = new TextDecoder().decode(binContent).replace(XSSI_PREFIX$1, '');\n if (text === '') {\n return null;\n }\n try {\n return JSON.parse(text);\n } catch (e) {\n if (status < 200 || status >= 300) {\n return text;\n }\n throw e;\n }\n case 'text':\n return new TextDecoder().decode(binContent);\n case 'blob':\n return new Blob([binContent], {\n type: contentType\n });\n case 'arraybuffer':\n return binContent.buffer;\n }\n }\n createRequestInit(req) {\n const headers = {};\n let credentials;\n credentials = req.credentials;\n if (req.withCredentials) {\n (typeof ngDevMode === 'undefined' || ngDevMode) && warningOptionsMessage(req);\n credentials = 'include';\n }\n req.headers.forEach((name, values) => headers[name] = values.join(','));\n if (!req.headers.has(ACCEPT_HEADER)) {\n headers[ACCEPT_HEADER] = ACCEPT_HEADER_VALUE;\n }\n if (!req.headers.has(CONTENT_TYPE_HEADER)) {\n const detectedType = req.detectContentTypeHeader();\n if (detectedType !== null) {\n headers[CONTENT_TYPE_HEADER] = detectedType;\n }\n }\n return {\n body: req.serializeBody(),\n method: req.method,\n headers,\n credentials,\n keepalive: req.keepalive,\n cache: req.cache,\n priority: req.priority,\n mode: req.mode,\n redirect: req.redirect,\n referrer: req.referrer,\n integrity: req.integrity,\n referrerPolicy: req.referrerPolicy\n };\n }\n concatChunks(chunks, totalLength) {\n const chunksAll = new Uint8Array(totalLength);\n let position = 0;\n for (const chunk of chunks) {\n chunksAll.set(chunk, position);\n position += chunk.length;\n }\n return chunksAll;\n }\n static \u0275fac = function FetchBackend_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || FetchBackend)();\n };\n static \u0275prov = /* @__PURE__ */i0.\u0275\u0275defineInjectable({\n token: FetchBackend,\n factory: FetchBackend.\u0275fac\n });\n }\n return FetchBackend;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nclass FetchFactory {}\nfunction noop() {}\nfunction warningOptionsMessage(req) {\n if (req.credentials && req.withCredentials) {\n console.warn(_formatRuntimeError(2819, `Angular detected that a \\`HttpClient\\` request has both \\`withCredentials: true\\` and \\`credentials: '${req.credentials}'\\` options. The \\`withCredentials\\` option is overriding the explicit \\`credentials\\` setting to 'include'. Consider removing \\`withCredentials\\` and using \\`credentials: '${req.credentials}'\\` directly for clarity.`));\n }\n}\nfunction silenceSuperfluousUnhandledPromiseRejection(promise) {\n promise.then(noop, noop);\n}\nconst XSSI_PREFIX = /^\\)\\]\\}',?\\n/;\nfunction validateXhrCompatibility(req) {\n const unsupportedOptions = [{\n property: 'keepalive',\n errorCode: 2813\n }, {\n property: 'cache',\n errorCode: 2814\n }, {\n property: 'priority',\n errorCode: 2815\n }, {\n property: 'mode',\n errorCode: 2816\n }, {\n property: 'redirect',\n errorCode: 2817\n }, {\n property: 'credentials',\n errorCode: 2818\n }, {\n property: 'integrity',\n errorCode: 2820\n }, {\n property: 'referrer',\n errorCode: 2821\n }, {\n property: 'referrerPolicy',\n errorCode: 2823\n }];\n for (const {\n property,\n errorCode\n } of unsupportedOptions) {\n if (req[property]) {\n console.warn(_formatRuntimeError(errorCode, `Angular detected that a \\`HttpClient\\` request with the \\`${property}\\` option was sent using XHR, which does not support it. To use the \\`${property}\\` option, enable Fetch API support by passing \\`withFetch()\\` as an argument to \\`provideHttpClient()\\`.`));\n }\n }\n}\nlet HttpXhrBackend = /*#__PURE__*/(() => {\n class HttpXhrBackend {\n xhrFactory;\n tracingService = inject(_TracingService, {\n optional: true\n });\n constructor(xhrFactory) {\n this.xhrFactory = xhrFactory;\n }\n maybePropagateTrace(fn) {\n return this.tracingService?.propagate ? this.tracingService.propagate(fn) : fn;\n }\n handle(req) {\n if (req.method === 'JSONP') {\n throw new _RuntimeError(-2800, (typeof ngDevMode === 'undefined' || ngDevMode) && `Cannot make a JSONP request without JSONP support. To fix the problem, either add the \\`withJsonpSupport()\\` call (if \\`provideHttpClient()\\` is used) or import the \\`HttpClientJsonpModule\\` in the root NgModule.`);\n }\n ngDevMode && validateXhrCompatibility(req);\n const xhrFactory = this.xhrFactory;\n const source = typeof ngServerMode !== 'undefined' && ngServerMode && xhrFactory.\u0275loadImpl ? from(xhrFactory.\u0275loadImpl()) : of(null);\n return source.pipe(switchMap(() => {\n return new Observable(observer => {\n const xhr = xhrFactory.build();\n xhr.open(req.method, req.urlWithParams);\n if (req.withCredentials) {\n xhr.withCredentials = true;\n }\n req.headers.forEach((name, values) => xhr.setRequestHeader(name, values.join(',')));\n if (!req.headers.has(ACCEPT_HEADER)) {\n xhr.setRequestHeader(ACCEPT_HEADER, ACCEPT_HEADER_VALUE);\n }\n if (!req.headers.has(CONTENT_TYPE_HEADER)) {\n const detectedType = req.detectContentTypeHeader();\n if (detectedType !== null) {\n xhr.setRequestHeader(CONTENT_TYPE_HEADER, detectedType);\n }\n }\n if (req.timeout) {\n xhr.timeout = req.timeout;\n }\n if (req.responseType) {\n const responseType = req.responseType.toLowerCase();\n xhr.responseType = responseType !== 'json' ? responseType : 'text';\n }\n const reqBody = req.serializeBody();\n let headerResponse = null;\n const partialFromXhr = () => {\n if (headerResponse !== null) {\n return headerResponse;\n }\n const statusText = xhr.statusText || 'OK';\n const headers = new HttpHeaders(xhr.getAllResponseHeaders());\n const url = xhr.responseURL || req.url;\n headerResponse = new HttpHeaderResponse({\n headers,\n status: xhr.status,\n statusText,\n url\n });\n return headerResponse;\n };\n const onLoad = this.maybePropagateTrace(() => {\n let {\n headers,\n status,\n statusText,\n url\n } = partialFromXhr();\n let body = null;\n if (status !== HTTP_STATUS_CODE_NO_CONTENT) {\n body = typeof xhr.response === 'undefined' ? xhr.responseText : xhr.response;\n }\n if (status === 0) {\n status = !!body ? HTTP_STATUS_CODE_OK : 0;\n }\n let ok = status >= 200 && status < 300;\n if (req.responseType === 'json' && typeof body === 'string') {\n const originalBody = body;\n body = body.replace(XSSI_PREFIX, '');\n try {\n body = body !== '' ? JSON.parse(body) : null;\n } catch (error) {\n body = originalBody;\n if (ok) {\n ok = false;\n body = {\n error,\n text: body\n };\n }\n }\n }\n if (ok) {\n observer.next(new HttpResponse({\n body,\n headers,\n status,\n statusText,\n url: url || undefined\n }));\n observer.complete();\n } else {\n observer.error(new HttpErrorResponse({\n error: body,\n headers,\n status,\n statusText,\n url: url || undefined\n }));\n }\n });\n const onError = this.maybePropagateTrace(error => {\n const {\n url\n } = partialFromXhr();\n const res = new HttpErrorResponse({\n error,\n status: xhr.status || 0,\n statusText: xhr.statusText || 'Unknown Error',\n url: url || undefined\n });\n observer.error(res);\n });\n let onTimeout = onError;\n if (req.timeout) {\n onTimeout = this.maybePropagateTrace(_ => {\n const {\n url\n } = partialFromXhr();\n const res = new HttpErrorResponse({\n error: new DOMException('Request timed out', 'TimeoutError'),\n status: xhr.status || 0,\n statusText: xhr.statusText || 'Request timeout',\n url: url || undefined\n });\n observer.error(res);\n });\n }\n let sentHeaders = false;\n const onDownProgress = this.maybePropagateTrace(event => {\n if (!sentHeaders) {\n observer.next(partialFromXhr());\n sentHeaders = true;\n }\n let progressEvent = {\n type: HttpEventType.DownloadProgress,\n loaded: event.loaded\n };\n if (event.lengthComputable) {\n progressEvent.total = event.total;\n }\n if (req.responseType === 'text' && !!xhr.responseText) {\n progressEvent.partialText = xhr.responseText;\n }\n observer.next(progressEvent);\n });\n const onUpProgress = this.maybePropagateTrace(event => {\n let progress = {\n type: HttpEventType.UploadProgress,\n loaded: event.loaded\n };\n if (event.lengthComputable) {\n progress.total = event.total;\n }\n observer.next(progress);\n });\n xhr.addEventListener('load', onLoad);\n xhr.addEventListener('error', onError);\n xhr.addEventListener('timeout', onTimeout);\n xhr.addEventListener('abort', onError);\n if (req.reportProgress) {\n xhr.addEventListener('progress', onDownProgress);\n if (reqBody !== null && xhr.upload) {\n xhr.upload.addEventListener('progress', onUpProgress);\n }\n }\n xhr.send(reqBody);\n observer.next({\n type: HttpEventType.Sent\n });\n return () => {\n xhr.removeEventListener('error', onError);\n xhr.removeEventListener('abort', onError);\n xhr.removeEventListener('load', onLoad);\n xhr.removeEventListener('timeout', onTimeout);\n if (req.reportProgress) {\n xhr.removeEventListener('progress', onDownProgress);\n if (reqBody !== null && xhr.upload) {\n xhr.upload.removeEventListener('progress', onUpProgress);\n }\n }\n if (xhr.readyState !== xhr.DONE) {\n xhr.abort();\n }\n };\n });\n }));\n }\n static \u0275fac = function HttpXhrBackend_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || HttpXhrBackend)(i0.\u0275\u0275inject(XhrFactory));\n };\n static \u0275prov = /* @__PURE__ */i0.\u0275\u0275defineInjectable({\n token: HttpXhrBackend,\n factory: HttpXhrBackend.\u0275fac,\n providedIn: 'root'\n });\n }\n return HttpXhrBackend;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nfunction interceptorChainEndFn(req, finalHandlerFn) {\n return finalHandlerFn(req);\n}\nfunction adaptLegacyInterceptorToChain(chainTailFn, interceptor) {\n return (initialRequest, finalHandlerFn) => interceptor.intercept(initialRequest, {\n handle: downstreamRequest => chainTailFn(downstreamRequest, finalHandlerFn)\n });\n}\nfunction chainedInterceptorFn(chainTailFn, interceptorFn, injector) {\n return (initialRequest, finalHandlerFn) => runInInjectionContext(injector, () => interceptorFn(initialRequest, downstreamRequest => chainTailFn(downstreamRequest, finalHandlerFn)));\n}\nconst HTTP_INTERCEPTORS = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'HTTP_INTERCEPTORS' : '');\nconst HTTP_INTERCEPTOR_FNS = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'HTTP_INTERCEPTOR_FNS' : '', {\n factory: () => []\n});\nconst HTTP_ROOT_INTERCEPTOR_FNS = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'HTTP_ROOT_INTERCEPTOR_FNS' : '');\nconst REQUESTS_CONTRIBUTE_TO_STABILITY = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'REQUESTS_CONTRIBUTE_TO_STABILITY' : '', {\n factory: () => true\n});\nfunction legacyInterceptorFnFactory() {\n let chain = null;\n return (req, handler) => {\n if (chain === null) {\n const interceptors = inject(HTTP_INTERCEPTORS, {\n optional: true\n }) ?? [];\n chain = interceptors.reduceRight(adaptLegacyInterceptorToChain, interceptorChainEndFn);\n }\n const pendingTasks = inject(PendingTasks);\n const contributeToStability = inject(REQUESTS_CONTRIBUTE_TO_STABILITY);\n if (contributeToStability) {\n const removeTask = pendingTasks.add();\n return chain(req, handler).pipe(finalize(removeTask));\n } else {\n return chain(req, handler);\n }\n };\n}\nlet HttpBackend = /*#__PURE__*/(() => {\n class HttpBackend {\n static \u0275fac = function HttpBackend_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || HttpBackend)();\n };\n static \u0275prov = /* @__PURE__ */i0.\u0275\u0275defineInjectable({\n token: HttpBackend,\n factory: function HttpBackend_Factory(__ngFactoryType__) {\n let __ngConditionalFactory__ = null;\n if (__ngFactoryType__) {\n __ngConditionalFactory__ = new (__ngFactoryType__ || HttpBackend)();\n } else {\n __ngConditionalFactory__ = i0.\u0275\u0275inject(HttpXhrBackend);\n }\n return __ngConditionalFactory__;\n },\n providedIn: 'root'\n });\n }\n return HttpBackend;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet fetchBackendWarningDisplayed = false;\nlet HttpInterceptorHandler = /*#__PURE__*/(() => {\n class HttpInterceptorHandler {\n backend;\n injector;\n chain = null;\n pendingTasks = inject(PendingTasks);\n contributeToStability = inject(REQUESTS_CONTRIBUTE_TO_STABILITY);\n constructor(backend, injector) {\n this.backend = backend;\n this.injector = injector;\n if ((typeof ngDevMode === 'undefined' || ngDevMode) && !fetchBackendWarningDisplayed) {\n const isTestingBackend = this.backend.isTestingBackend;\n if (typeof ngServerMode !== 'undefined' && ngServerMode && !(this.backend instanceof FetchBackend) && !isTestingBackend) {\n fetchBackendWarningDisplayed = true;\n injector.get(_Console).warn(_formatRuntimeError(2801, 'Angular detected that `HttpClient` is not configured ' + \"to use `fetch` APIs. It's strongly recommended to \" + 'enable `fetch` for applications that use Server-Side Rendering ' + 'for better performance and compatibility. ' + 'To enable `fetch`, add the `withFetch()` to the `provideHttpClient()` ' + 'call at the root of the application.'));\n }\n }\n }\n handle(initialRequest) {\n if (this.chain === null) {\n const dedupedInterceptorFns = Array.from(new Set([...this.injector.get(HTTP_INTERCEPTOR_FNS), ...this.injector.get(HTTP_ROOT_INTERCEPTOR_FNS, [])]));\n this.chain = dedupedInterceptorFns.reduceRight((nextSequencedFn, interceptorFn) => chainedInterceptorFn(nextSequencedFn, interceptorFn, this.injector), interceptorChainEndFn);\n }\n if (this.contributeToStability) {\n const removeTask = this.pendingTasks.add();\n return this.chain(initialRequest, downstreamRequest => this.backend.handle(downstreamRequest)).pipe(finalize(removeTask));\n } else {\n return this.chain(initialRequest, downstreamRequest => this.backend.handle(downstreamRequest));\n }\n }\n static \u0275fac = function HttpInterceptorHandler_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || HttpInterceptorHandler)(i0.\u0275\u0275inject(HttpBackend), i0.\u0275\u0275inject(i0.EnvironmentInjector));\n };\n static \u0275prov = /* @__PURE__ */i0.\u0275\u0275defineInjectable({\n token: HttpInterceptorHandler,\n factory: HttpInterceptorHandler.\u0275fac,\n providedIn: 'root'\n });\n }\n return HttpInterceptorHandler;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet HttpHandler = /*#__PURE__*/(() => {\n class HttpHandler {\n static \u0275fac = function HttpHandler_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || HttpHandler)();\n };\n static \u0275prov = /* @__PURE__ */i0.\u0275\u0275defineInjectable({\n token: HttpHandler,\n factory: function HttpHandler_Factory(__ngFactoryType__) {\n let __ngConditionalFactory__ = null;\n if (__ngFactoryType__) {\n __ngConditionalFactory__ = new (__ngFactoryType__ || HttpHandler)();\n } else {\n __ngConditionalFactory__ = i0.\u0275\u0275inject(HttpInterceptorHandler);\n }\n return __ngConditionalFactory__;\n },\n providedIn: 'root'\n });\n }\n return HttpHandler;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nfunction addBody(options, body) {\n return {\n body,\n headers: options.headers,\n context: options.context,\n observe: options.observe,\n params: options.params,\n reportProgress: options.reportProgress,\n responseType: options.responseType,\n withCredentials: options.withCredentials,\n credentials: options.credentials,\n transferCache: options.transferCache,\n timeout: options.timeout,\n keepalive: options.keepalive,\n priority: options.priority,\n cache: options.cache,\n mode: options.mode,\n redirect: options.redirect,\n integrity: options.integrity,\n referrer: options.referrer,\n referrerPolicy: options.referrerPolicy\n };\n}\nlet HttpClient = /*#__PURE__*/(() => {\n class HttpClient {\n handler;\n constructor(handler) {\n this.handler = handler;\n }\n request(first, url, options = {}) {\n let req;\n if (first instanceof HttpRequest) {\n req = first;\n } else {\n let headers = undefined;\n if (options.headers instanceof HttpHeaders) {\n headers = options.headers;\n } else {\n headers = new HttpHeaders(options.headers);\n }\n let params = undefined;\n if (!!options.params) {\n if (options.params instanceof HttpParams) {\n params = options.params;\n } else {\n params = new HttpParams({\n fromObject: options.params\n });\n }\n }\n req = new HttpRequest(first, url, options.body !== undefined ? options.body : null, {\n headers,\n context: options.context,\n params,\n reportProgress: options.reportProgress,\n responseType: options.responseType || 'json',\n withCredentials: options.withCredentials,\n transferCache: options.transferCache,\n keepalive: options.keepalive,\n priority: options.priority,\n cache: options.cache,\n mode: options.mode,\n redirect: options.redirect,\n credentials: options.credentials,\n referrer: options.referrer,\n referrerPolicy: options.referrerPolicy,\n integrity: options.integrity,\n timeout: options.timeout\n });\n }\n const events$ = of(req).pipe(concatMap(req => this.handler.handle(req)));\n if (first instanceof HttpRequest || options.observe === 'events') {\n return events$;\n }\n const res$ = events$.pipe(filter(event => event instanceof HttpResponse));\n switch (options.observe || 'body') {\n case 'body':\n switch (req.responseType) {\n case 'arraybuffer':\n return res$.pipe(map(res => {\n if (res.body !== null && !(res.body instanceof ArrayBuffer)) {\n throw new _RuntimeError(2806, ngDevMode && 'Response is not an ArrayBuffer.');\n }\n return res.body;\n }));\n case 'blob':\n return res$.pipe(map(res => {\n if (res.body !== null && !(res.body instanceof Blob)) {\n throw new _RuntimeError(2807, ngDevMode && 'Response is not a Blob.');\n }\n return res.body;\n }));\n case 'text':\n return res$.pipe(map(res => {\n if (res.body !== null && typeof res.body !== 'string') {\n throw new _RuntimeError(2808, ngDevMode && 'Response is not a string.');\n }\n return res.body;\n }));\n case 'json':\n default:\n return res$.pipe(map(res => res.body));\n }\n case 'response':\n return res$;\n default:\n throw new _RuntimeError(2809, ngDevMode && `Unreachable: unhandled observe type ${options.observe}}`);\n }\n }\n delete(url, options = {}) {\n return this.request('DELETE', url, options);\n }\n get(url, options = {}) {\n return this.request('GET', url, options);\n }\n head(url, options = {}) {\n return this.request('HEAD', url, options);\n }\n jsonp(url, callbackParam) {\n return this.request('JSONP', url, {\n params: new HttpParams().append(callbackParam, 'JSONP_CALLBACK'),\n observe: 'body',\n responseType: 'json'\n });\n }\n options(url, options = {}) {\n return this.request('OPTIONS', url, options);\n }\n patch(url, body, options = {}) {\n return this.request('PATCH', url, addBody(options, body));\n }\n post(url, body, options = {}) {\n return this.request('POST', url, addBody(options, body));\n }\n put(url, body, options = {}) {\n return this.request('PUT', url, addBody(options, body));\n }\n static \u0275fac = function HttpClient_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || HttpClient)(i0.\u0275\u0275inject(HttpHandler));\n };\n static \u0275prov = /* @__PURE__ */i0.\u0275\u0275defineInjectable({\n token: HttpClient,\n factory: HttpClient.\u0275fac,\n providedIn: 'root'\n });\n }\n return HttpClient;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet nextRequestId = 0;\nlet foreignDocument;\nconst JSONP_ERR_NO_CALLBACK = 'JSONP injected script did not invoke callback.';\nconst JSONP_ERR_WRONG_METHOD = 'JSONP requests must use JSONP request method.';\nconst JSONP_ERR_WRONG_RESPONSE_TYPE = 'JSONP requests must use Json response type.';\nconst JSONP_ERR_HEADERS_NOT_SUPPORTED = 'JSONP requests do not support headers.';\nclass JsonpCallbackContext {}\nfunction jsonpCallbackContext() {\n if (typeof window === 'object') {\n return window;\n }\n return {};\n}\nlet JsonpClientBackend = /*#__PURE__*/(() => {\n class JsonpClientBackend {\n callbackMap;\n document;\n resolvedPromise = Promise.resolve();\n constructor(callbackMap, document) {\n this.callbackMap = callbackMap;\n this.document = document;\n }\n nextCallback() {\n return `ng_jsonp_callback_${nextRequestId++}`;\n }\n handle(req) {\n if (req.method !== 'JSONP') {\n throw new _RuntimeError(2810, ngDevMode && JSONP_ERR_WRONG_METHOD);\n } else if (req.responseType !== 'json') {\n throw new _RuntimeError(2811, ngDevMode && JSONP_ERR_WRONG_RESPONSE_TYPE);\n }\n if (req.headers.keys().length > 0) {\n throw new _RuntimeError(2812, ngDevMode && JSONP_ERR_HEADERS_NOT_SUPPORTED);\n }\n return new Observable(observer => {\n const callback = this.nextCallback();\n const url = req.urlWithParams.replace(/=JSONP_CALLBACK(&|$)/, `=${callback}$1`);\n const node = this.document.createElement('script');\n node.src = url;\n let body = null;\n let finished = false;\n this.callbackMap[callback] = data => {\n delete this.callbackMap[callback];\n body = data;\n finished = true;\n };\n const cleanup = () => {\n node.removeEventListener('load', onLoad);\n node.removeEventListener('error', onError);\n node.remove();\n delete this.callbackMap[callback];\n };\n const onLoad = () => {\n this.resolvedPromise.then(() => {\n cleanup();\n if (!finished) {\n observer.error(new HttpErrorResponse({\n url,\n status: 0,\n statusText: 'JSONP Error',\n error: new Error(JSONP_ERR_NO_CALLBACK)\n }));\n return;\n }\n observer.next(new HttpResponse({\n body,\n status: HTTP_STATUS_CODE_OK,\n statusText: 'OK',\n url\n }));\n observer.complete();\n });\n };\n const onError = error => {\n cleanup();\n observer.error(new HttpErrorResponse({\n error,\n status: 0,\n statusText: 'JSONP Error',\n url\n }));\n };\n node.addEventListener('load', onLoad);\n node.addEventListener('error', onError);\n this.document.body.appendChild(node);\n observer.next({\n type: HttpEventType.Sent\n });\n return () => {\n if (!finished) {\n this.removeListeners(node);\n }\n cleanup();\n };\n });\n }\n removeListeners(script) {\n foreignDocument ??= this.document.implementation.createHTMLDocument();\n foreignDocument.adoptNode(script);\n }\n static \u0275fac = function JsonpClientBackend_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || JsonpClientBackend)(i0.\u0275\u0275inject(JsonpCallbackContext), i0.\u0275\u0275inject(DOCUMENT));\n };\n static \u0275prov = /* @__PURE__ */i0.\u0275\u0275defineInjectable({\n token: JsonpClientBackend,\n factory: JsonpClientBackend.\u0275fac\n });\n }\n return JsonpClientBackend;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nfunction jsonpInterceptorFn(req, next) {\n if (req.method === 'JSONP') {\n return inject(JsonpClientBackend).handle(req);\n }\n return next(req);\n}\nlet JsonpInterceptor = /*#__PURE__*/(() => {\n class JsonpInterceptor {\n injector;\n constructor(injector) {\n this.injector = injector;\n }\n intercept(initialRequest, next) {\n return runInInjectionContext(this.injector, () => jsonpInterceptorFn(initialRequest, downstreamRequest => next.handle(downstreamRequest)));\n }\n static \u0275fac = function JsonpInterceptor_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || JsonpInterceptor)(i0.\u0275\u0275inject(i0.EnvironmentInjector));\n };\n static \u0275prov = /* @__PURE__ */i0.\u0275\u0275defineInjectable({\n token: JsonpInterceptor,\n factory: JsonpInterceptor.\u0275fac\n });\n }\n return JsonpInterceptor;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst XSRF_ENABLED = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'XSRF_ENABLED' : '', {\n factory: () => true\n});\nconst XSRF_DEFAULT_COOKIE_NAME = 'XSRF-TOKEN';\nconst XSRF_COOKIE_NAME = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'XSRF_COOKIE_NAME' : '', {\n factory: () => XSRF_DEFAULT_COOKIE_NAME\n});\nconst XSRF_DEFAULT_HEADER_NAME = 'X-XSRF-TOKEN';\nconst XSRF_HEADER_NAME = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'XSRF_HEADER_NAME' : '', {\n factory: () => XSRF_DEFAULT_HEADER_NAME\n});\nlet HttpXsrfCookieExtractor = /*#__PURE__*/(() => {\n class HttpXsrfCookieExtractor {\n cookieName = inject(XSRF_COOKIE_NAME);\n doc = inject(DOCUMENT);\n lastCookieString = '';\n lastToken = null;\n parseCount = 0;\n getToken() {\n if (typeof ngServerMode !== 'undefined' && ngServerMode) {\n return null;\n }\n const cookieString = this.doc.cookie || '';\n if (cookieString !== this.lastCookieString) {\n this.parseCount++;\n this.lastToken = parseCookieValue(cookieString, this.cookieName);\n this.lastCookieString = cookieString;\n }\n return this.lastToken;\n }\n static \u0275fac = function HttpXsrfCookieExtractor_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || HttpXsrfCookieExtractor)();\n };\n static \u0275prov = /* @__PURE__ */i0.\u0275\u0275defineInjectable({\n token: HttpXsrfCookieExtractor,\n factory: HttpXsrfCookieExtractor.\u0275fac,\n providedIn: 'root'\n });\n }\n return HttpXsrfCookieExtractor;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet HttpXsrfTokenExtractor = /*#__PURE__*/(() => {\n class HttpXsrfTokenExtractor {\n static \u0275fac = function HttpXsrfTokenExtractor_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || HttpXsrfTokenExtractor)();\n };\n static \u0275prov = /* @__PURE__ */i0.\u0275\u0275defineInjectable({\n token: HttpXsrfTokenExtractor,\n factory: function HttpXsrfTokenExtractor_Factory(__ngFactoryType__) {\n let __ngConditionalFactory__ = null;\n if (__ngFactoryType__) {\n __ngConditionalFactory__ = new (__ngFactoryType__ || HttpXsrfTokenExtractor)();\n } else {\n __ngConditionalFactory__ = i0.\u0275\u0275inject(HttpXsrfCookieExtractor);\n }\n return __ngConditionalFactory__;\n },\n providedIn: 'root'\n });\n }\n return HttpXsrfTokenExtractor;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nfunction xsrfInterceptorFn(req, next) {\n if (!inject(XSRF_ENABLED) || req.method === 'GET' || req.method === 'HEAD') {\n return next(req);\n }\n try {\n const locationHref = inject(PlatformLocation).href;\n const {\n origin: locationOrigin\n } = new URL(locationHref);\n const {\n origin: requestOrigin\n } = new URL(req.url, locationOrigin);\n if (locationOrigin !== requestOrigin) {\n return next(req);\n }\n } catch {\n return next(req);\n }\n const token = inject(HttpXsrfTokenExtractor).getToken();\n const headerName = inject(XSRF_HEADER_NAME);\n if (token != null && !req.headers.has(headerName)) {\n req = req.clone({\n headers: req.headers.set(headerName, token)\n });\n }\n return next(req);\n}\nlet HttpXsrfInterceptor = /*#__PURE__*/(() => {\n class HttpXsrfInterceptor {\n injector = inject(EnvironmentInjector);\n intercept(initialRequest, next) {\n return runInInjectionContext(this.injector, () => xsrfInterceptorFn(initialRequest, downstreamRequest => next.handle(downstreamRequest)));\n }\n static \u0275fac = function HttpXsrfInterceptor_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || HttpXsrfInterceptor)();\n };\n static \u0275prov = /* @__PURE__ */i0.\u0275\u0275defineInjectable({\n token: HttpXsrfInterceptor,\n factory: HttpXsrfInterceptor.\u0275fac\n });\n }\n return HttpXsrfInterceptor;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nvar HttpFeatureKind = /*#__PURE__*/function (HttpFeatureKind) {\n HttpFeatureKind[HttpFeatureKind[\"Interceptors\"] = 0] = \"Interceptors\";\n HttpFeatureKind[HttpFeatureKind[\"LegacyInterceptors\"] = 1] = \"LegacyInterceptors\";\n HttpFeatureKind[HttpFeatureKind[\"CustomXsrfConfiguration\"] = 2] = \"CustomXsrfConfiguration\";\n HttpFeatureKind[HttpFeatureKind[\"NoXsrfProtection\"] = 3] = \"NoXsrfProtection\";\n HttpFeatureKind[HttpFeatureKind[\"JsonpSupport\"] = 4] = \"JsonpSupport\";\n HttpFeatureKind[HttpFeatureKind[\"RequestsMadeViaParent\"] = 5] = \"RequestsMadeViaParent\";\n HttpFeatureKind[HttpFeatureKind[\"Fetch\"] = 6] = \"Fetch\";\n return HttpFeatureKind;\n}(HttpFeatureKind || {});\nfunction makeHttpFeature(kind, providers) {\n return {\n \u0275kind: kind,\n \u0275providers: providers\n };\n}\nfunction provideHttpClient(...features) {\n if (ngDevMode) {\n const featureKinds = new Set(features.map(f => f.\u0275kind));\n if (featureKinds.has(HttpFeatureKind.NoXsrfProtection) && featureKinds.has(HttpFeatureKind.CustomXsrfConfiguration)) {\n throw new Error(ngDevMode ? `Configuration error: found both withXsrfConfiguration() and withNoXsrfProtection() in the same call to provideHttpClient(), which is a contradiction.` : '');\n }\n }\n const providers = [HttpClient, HttpInterceptorHandler, {\n provide: HttpHandler,\n useExisting: HttpInterceptorHandler\n }, {\n provide: HttpBackend,\n useFactory: () => {\n return inject(FETCH_BACKEND, {\n optional: true\n }) ?? inject(HttpXhrBackend);\n }\n }, {\n provide: HTTP_INTERCEPTOR_FNS,\n useValue: xsrfInterceptorFn,\n multi: true\n }];\n for (const feature of features) {\n providers.push(...feature.\u0275providers);\n }\n return makeEnvironmentProviders(providers);\n}\nfunction withInterceptors(interceptorFns) {\n return makeHttpFeature(HttpFeatureKind.Interceptors, interceptorFns.map(interceptorFn => {\n return {\n provide: HTTP_INTERCEPTOR_FNS,\n useValue: interceptorFn,\n multi: true\n };\n }));\n}\nconst LEGACY_INTERCEPTOR_FN = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'LEGACY_INTERCEPTOR_FN' : '');\nfunction withInterceptorsFromDi() {\n return makeHttpFeature(HttpFeatureKind.LegacyInterceptors, [{\n provide: LEGACY_INTERCEPTOR_FN,\n useFactory: legacyInterceptorFnFactory\n }, {\n provide: HTTP_INTERCEPTOR_FNS,\n useExisting: LEGACY_INTERCEPTOR_FN,\n multi: true\n }]);\n}\nfunction withXsrfConfiguration({\n cookieName,\n headerName\n}) {\n const providers = [];\n if (cookieName !== undefined) {\n providers.push({\n provide: XSRF_COOKIE_NAME,\n useValue: cookieName\n });\n }\n if (headerName !== undefined) {\n providers.push({\n provide: XSRF_HEADER_NAME,\n useValue: headerName\n });\n }\n return makeHttpFeature(HttpFeatureKind.CustomXsrfConfiguration, providers);\n}\nfunction withNoXsrfProtection() {\n return makeHttpFeature(HttpFeatureKind.NoXsrfProtection, [{\n provide: XSRF_ENABLED,\n useValue: false\n }]);\n}\nfunction withJsonpSupport() {\n return makeHttpFeature(HttpFeatureKind.JsonpSupport, [JsonpClientBackend, {\n provide: JsonpCallbackContext,\n useFactory: jsonpCallbackContext\n }, {\n provide: HTTP_INTERCEPTOR_FNS,\n useValue: jsonpInterceptorFn,\n multi: true\n }]);\n}\nfunction withRequestsMadeViaParent() {\n return makeHttpFeature(HttpFeatureKind.RequestsMadeViaParent, [{\n provide: HttpBackend,\n useFactory: () => {\n const handlerFromParent = inject(HttpHandler, {\n skipSelf: true,\n optional: true\n });\n if (ngDevMode && handlerFromParent === null) {\n throw new Error('withRequestsMadeViaParent() can only be used when the parent injector also configures HttpClient');\n }\n return handlerFromParent;\n }\n }]);\n}\nfunction withFetch() {\n return makeHttpFeature(HttpFeatureKind.Fetch, [FetchBackend, {\n provide: FETCH_BACKEND,\n useExisting: FetchBackend\n }, {\n provide: HttpBackend,\n useExisting: FetchBackend\n }]);\n}\nlet HttpClientXsrfModule = /*#__PURE__*/(() => {\n class HttpClientXsrfModule {\n static disable() {\n return {\n ngModule: HttpClientXsrfModule,\n providers: [withNoXsrfProtection().\u0275providers]\n };\n }\n static withOptions(options = {}) {\n return {\n ngModule: HttpClientXsrfModule,\n providers: withXsrfConfiguration(options).\u0275providers\n };\n }\n static \u0275fac = function HttpClientXsrfModule_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || HttpClientXsrfModule)();\n };\n static \u0275mod = /* @__PURE__ */i0.\u0275\u0275defineNgModule({\n type: HttpClientXsrfModule\n });\n static \u0275inj = /* @__PURE__ */i0.\u0275\u0275defineInjector({\n providers: [HttpXsrfInterceptor, {\n provide: HTTP_INTERCEPTORS,\n useExisting: HttpXsrfInterceptor,\n multi: true\n }, {\n provide: HttpXsrfTokenExtractor,\n useClass: HttpXsrfCookieExtractor\n }, withXsrfConfiguration({\n cookieName: XSRF_DEFAULT_COOKIE_NAME,\n headerName: XSRF_DEFAULT_HEADER_NAME\n }).\u0275providers, {\n provide: XSRF_ENABLED,\n useValue: true\n }]\n });\n }\n return HttpClientXsrfModule;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet HttpClientModule = /*#__PURE__*/(() => {\n class HttpClientModule {\n static \u0275fac = function HttpClientModule_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || HttpClientModule)();\n };\n static \u0275mod = /* @__PURE__ */i0.\u0275\u0275defineNgModule({\n type: HttpClientModule\n });\n static \u0275inj = /* @__PURE__ */i0.\u0275\u0275defineInjector({\n providers: [provideHttpClient(withInterceptorsFromDi())]\n });\n }\n return HttpClientModule;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet HttpClientJsonpModule = /*#__PURE__*/(() => {\n class HttpClientJsonpModule {\n static \u0275fac = function HttpClientJsonpModule_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || HttpClientJsonpModule)();\n };\n static \u0275mod = /* @__PURE__ */i0.\u0275\u0275defineNgModule({\n type: HttpClientJsonpModule\n });\n static \u0275inj = /* @__PURE__ */i0.\u0275\u0275defineInjector({\n providers: [withJsonpSupport().\u0275providers]\n });\n }\n return HttpClientJsonpModule;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nexport { FetchBackend, HTTP_INTERCEPTORS, HTTP_ROOT_INTERCEPTOR_FNS, HttpBackend, HttpClient, HttpClientJsonpModule, HttpClientModule, HttpClientXsrfModule, HttpContext, HttpContextToken, HttpErrorResponse, HttpEventType, HttpFeatureKind, HttpHandler, HttpHeaderResponse, HttpHeaders, HttpInterceptorHandler, HttpParams, HttpRequest, HttpResponse, HttpResponseBase, HttpStatusCode, HttpUrlEncodingCodec, HttpXhrBackend, HttpXsrfTokenExtractor, JsonpClientBackend, JsonpInterceptor, REQUESTS_CONTRIBUTE_TO_STABILITY, provideHttpClient, withFetch, withInterceptors, withInterceptorsFromDi, withJsonpSupport, withNoXsrfProtection, withRequestsMadeViaParent, withXsrfConfiguration };\n","import { InjectionToken } from '@angular/core';\n\nexport const API_BASE_URL = new InjectionToken('API_BASE_URL');\n"],mappings:"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",names:["HttpHeaders","_HttpHeaders","headers","line","index","name","value","values","lcName","update","other","key","clone","base","toDelete","existing","headerValues","fn","HttpContext","token","value","HttpUrlEncodingCodec","key","standardEncoding","paramParser","rawParams","codec","map","param","eqIdx","val","list","STANDARD_ENCODING_REGEX","STANDARD_ENCODING_REPLACEMENTS","v","s","t","valueToString","HttpParams","_HttpParams","options","RuntimeError","values","res","params","updates","_value","eKey","update","clone","base","idx","mightHaveBody","method","isArrayBuffer","isBlob","isFormData","isUrlSearchParams","CONTENT_TYPE_HEADER","ACCEPT_HEADER","TEXT_CONTENT_TYPE","JSON_CONTENT_TYPE","ACCEPT_HEADER_VALUE","HttpRequest","_HttpRequest","url","third","fourth","HttpHeaders","qIdx","sep","responseType","keepalive","priority","cache","mode","redirect","credentials","referrer","integrity","referrerPolicy","transferCache","timeout","body","withCredentials","reportProgress","headers","context","name","HttpEventType","HttpResponseBase","init","defaultStatus","defaultStatusText","HttpHeaderResponse","_HttpHeaderResponse","HttpResponse","_HttpResponse","HttpErrorResponse","HTTP_STATUS_CODE_OK","HTTP_STATUS_CODE_NO_CONTENT","FETCH_BACKEND","InjectionToken","XSSI_PREFIX","HttpXhrBackend","inject","TracingService","xhrFactory","fn","req","RuntimeError","of","switchMap","Observable","observer","xhr","name","values","ACCEPT_HEADER","ACCEPT_HEADER_VALUE","CONTENT_TYPE_HEADER","detectedType","responseType","reqBody","headerResponse","partialFromXhr","statusText","headers","HttpHeaders","url","HttpHeaderResponse","onLoad","status","body","HTTP_STATUS_CODE_NO_CONTENT","HTTP_STATUS_CODE_OK","ok","originalBody","XSSI_PREFIX","error","HttpResponse","HttpErrorResponse","onError","res","onTimeout","_","sentHeaders","onDownProgress","event","progressEvent","HttpEventType","onUpProgress","progress","__ngFactoryType__","\u0275\u0275inject","XhrFactory","\u0275\u0275defineInjectable","interceptorChainEndFn","finalHandlerFn","chainedInterceptorFn","chainTailFn","interceptorFn","injector","initialRequest","finalHandlerFn","runInInjectionContext","downstreamRequest","HTTP_INTERCEPTOR_FNS","InjectionToken","HTTP_ROOT_INTERCEPTOR_FNS","REQUESTS_CONTRIBUTE_TO_STABILITY","HttpBackend","__ngFactoryType__","\u0275\u0275defineInjectable","__ngConditionalFactory__","\u0275\u0275inject","HttpXhrBackend","HttpInterceptorHandler","inject","PendingTasks","REQUESTS_CONTRIBUTE_TO_STABILITY","backend","injector","initialRequest","dedupedInterceptorFns","HTTP_INTERCEPTOR_FNS","HTTP_ROOT_INTERCEPTOR_FNS","nextSequencedFn","interceptorFn","chainedInterceptorFn","interceptorChainEndFn","removeTask","downstreamRequest","finalize","__ngFactoryType__","\u0275\u0275inject","HttpBackend","EnvironmentInjector","\u0275\u0275defineInjectable","HttpHandler","__ngConditionalFactory__","addBody","options","body","HttpClient","handler","first","url","req","HttpRequest","headers","HttpHeaders","params","HttpParams","events$","of","concatMap","res$","filter","event","HttpResponse","map","res","RuntimeError","callbackParam","XSRF_ENABLED","InjectionToken","XSRF_DEFAULT_COOKIE_NAME","XSRF_COOKIE_NAME","XSRF_DEFAULT_HEADER_NAME","XSRF_HEADER_NAME","HttpXsrfCookieExtractor","inject","DOCUMENT","cookieString","parseCookieValue","__ngFactoryType__","\u0275\u0275defineInjectable","HttpXsrfTokenExtractor","__ngConditionalFactory__","\u0275\u0275inject","xsrfInterceptorFn","req","next","locationHref","PlatformLocation","locationOrigin","requestOrigin","token","headerName","HttpFeatureKind","makeHttpFeature","kind","providers","provideHttpClient","features","HttpClient","HttpInterceptorHandler","HttpHandler","HttpBackend","inject","FETCH_BACKEND","HttpXhrBackend","HTTP_INTERCEPTOR_FNS","xsrfInterceptorFn","feature","makeEnvironmentProviders","withInterceptors","interceptorFns","interceptorFn","API_BASE_URL","InjectionToken"],x_google_ignoreList:[0]},_coverageSchema:"1a1c01bbd47fc00a2c39e90264f33305004495a9",hash:"6bb11653b829e2c36bf53b6cbc4e487b24638767"};var coverage=global[gcv]||(global[gcv]={});if(!coverage[path]||coverage[path].hash!==hash){coverage[path]=coverageData;}var actualCoverage=coverage[path];{// @ts-ignore +cov_95ooh69hr=function(){return actualCoverage;};}return actualCoverage;}cov_95ooh69hr();import{A as H,F as ee,I as g,L as T,O as y,P as v,Q as h,R as re,T as J,U as te,_ as ne,ac as ie,c as q,cc as ae,dc as ce,h as X,ha as oe,m as k,v as Z,x as Q,za as se}from"./chunk-RYTNMYZW.js";cov_95ooh69hr().s[0]++;var E=class t{headers;normalizedNames=(cov_95ooh69hr().s[1]++,new Map());lazyInit;lazyUpdate=(cov_95ooh69hr().s[2]++,null);constructor(e){cov_95ooh69hr().f[0]++;cov_95ooh69hr().s[3]++;e?(cov_95ooh69hr().b[0][0]++,typeof e=="string"?(cov_95ooh69hr().b[1][0]++,this.lazyInit=()=>{cov_95ooh69hr().f[1]++;cov_95ooh69hr().s[4]++;this.headers=new Map(),e.split(` +`).forEach(r=>{cov_95ooh69hr().f[2]++;let n=(cov_95ooh69hr().s[5]++,r.indexOf(":"));cov_95ooh69hr().s[6]++;if(n>0){cov_95ooh69hr().b[2][0]++;let o=(cov_95ooh69hr().s[7]++,r.slice(0,n)),s=(cov_95ooh69hr().s[8]++,r.slice(n+1).trim());cov_95ooh69hr().s[9]++;this.addHeaderEntry(o,s);}else{cov_95ooh69hr().b[2][1]++;}});}):(cov_95ooh69hr().b[1][1]++,(cov_95ooh69hr().b[4][0]++,typeof Headers<"u")&&(cov_95ooh69hr().b[4][1]++,e instanceof Headers)?(cov_95ooh69hr().b[3][0]++,this.headers=new Map(),e.forEach((r,n)=>{cov_95ooh69hr().f[3]++;cov_95ooh69hr().s[10]++;this.addHeaderEntry(n,r);})):(cov_95ooh69hr().b[3][1]++,this.lazyInit=()=>{cov_95ooh69hr().f[4]++;cov_95ooh69hr().s[11]++;this.headers=new Map(),Object.entries(e).forEach(([r,n])=>{cov_95ooh69hr().f[5]++;cov_95ooh69hr().s[12]++;this.setHeaderEntries(r,n);});}))):(cov_95ooh69hr().b[0][1]++,this.headers=new Map());}has(e){cov_95ooh69hr().f[6]++;cov_95ooh69hr().s[13]++;return this.init(),this.headers.has(e.toLowerCase());}get(e){cov_95ooh69hr().f[7]++;cov_95ooh69hr().s[14]++;this.init();let r=(cov_95ooh69hr().s[15]++,this.headers.get(e.toLowerCase()));cov_95ooh69hr().s[16]++;return(cov_95ooh69hr().b[6][0]++,r)&&(cov_95ooh69hr().b[6][1]++,r.length>0)?(cov_95ooh69hr().b[5][0]++,r[0]):(cov_95ooh69hr().b[5][1]++,null);}keys(){cov_95ooh69hr().f[8]++;cov_95ooh69hr().s[17]++;return this.init(),Array.from(this.normalizedNames.values());}getAll(e){cov_95ooh69hr().f[9]++;cov_95ooh69hr().s[18]++;return this.init(),(cov_95ooh69hr().b[7][0]++,this.headers.get(e.toLowerCase()))||(cov_95ooh69hr().b[7][1]++,null);}append(e,r){cov_95ooh69hr().f[10]++;cov_95ooh69hr().s[19]++;return this.clone({name:e,value:r,op:"a"});}set(e,r){cov_95ooh69hr().f[11]++;cov_95ooh69hr().s[20]++;return this.clone({name:e,value:r,op:"s"});}delete(e,r){cov_95ooh69hr().f[12]++;cov_95ooh69hr().s[21]++;return this.clone({name:e,value:r,op:"d"});}maybeSetNormalizedName(e,r){cov_95ooh69hr().f[13]++;cov_95ooh69hr().s[22]++;(cov_95ooh69hr().b[8][0]++,this.normalizedNames.has(r))||(cov_95ooh69hr().b[8][1]++,this.normalizedNames.set(r,e));}init(){cov_95ooh69hr().f[14]++;cov_95ooh69hr().s[23]++;(cov_95ooh69hr().b[9][0]++,this.lazyInit)&&(cov_95ooh69hr().b[9][1]++,this.lazyInit instanceof t?(cov_95ooh69hr().b[10][0]++,this.copyFrom(this.lazyInit)):(cov_95ooh69hr().b[10][1]++,this.lazyInit()),this.lazyInit=null,(cov_95ooh69hr().b[11][0]++,this.lazyUpdate)&&(cov_95ooh69hr().b[11][1]++,this.lazyUpdate.forEach(e=>{cov_95ooh69hr().f[15]++;cov_95ooh69hr().s[24]++;return this.applyUpdate(e);}),this.lazyUpdate=null));}copyFrom(e){cov_95ooh69hr().f[16]++;cov_95ooh69hr().s[25]++;e.init(),Array.from(e.headers.keys()).forEach(r=>{cov_95ooh69hr().f[17]++;cov_95ooh69hr().s[26]++;this.headers.set(r,e.headers.get(r)),this.normalizedNames.set(r,e.normalizedNames.get(r));});}clone(e){cov_95ooh69hr().f[18]++;let r=(cov_95ooh69hr().s[27]++,new t());cov_95ooh69hr().s[28]++;return r.lazyInit=(cov_95ooh69hr().b[13][0]++,this.lazyInit)&&(cov_95ooh69hr().b[13][1]++,this.lazyInit instanceof t)?(cov_95ooh69hr().b[12][0]++,this.lazyInit):(cov_95ooh69hr().b[12][1]++,this),r.lazyUpdate=((cov_95ooh69hr().b[14][0]++,this.lazyUpdate)||(cov_95ooh69hr().b[14][1]++,[])).concat([e]),r;}applyUpdate(e){cov_95ooh69hr().f[19]++;let r=(cov_95ooh69hr().s[29]++,e.name.toLowerCase());cov_95ooh69hr().s[30]++;switch(e.op){case"a":cov_95ooh69hr().b[15][0]++;case"s":cov_95ooh69hr().b[15][1]++;let n=(cov_95ooh69hr().s[31]++,e.value);cov_95ooh69hr().s[32]++;if((cov_95ooh69hr().b[17][0]++,typeof n=="string")&&(cov_95ooh69hr().b[17][1]++,n=[n]),n.length===0){cov_95ooh69hr().b[16][0]++;cov_95ooh69hr().s[33]++;return;}else{cov_95ooh69hr().b[16][1]++;}cov_95ooh69hr().s[34]++;this.maybeSetNormalizedName(e.name,r);let o=(cov_95ooh69hr().s[35]++,(cov_95ooh69hr().b[18][0]++,e.op==="a"?(cov_95ooh69hr().b[19][0]++,this.headers.get(r)):(cov_95ooh69hr().b[19][1]++,void 0))||(cov_95ooh69hr().b[18][1]++,[]));cov_95ooh69hr().s[36]++;o.push(...n),this.headers.set(r,o);cov_95ooh69hr().s[37]++;break;case"d":cov_95ooh69hr().b[15][2]++;let s=(cov_95ooh69hr().s[38]++,e.value);cov_95ooh69hr().s[39]++;if(!s){cov_95ooh69hr().b[20][0]++;cov_95ooh69hr().s[40]++;this.headers.delete(r),this.normalizedNames.delete(r);}else{cov_95ooh69hr().b[20][1]++;let i=(cov_95ooh69hr().s[41]++,this.headers.get(r));cov_95ooh69hr().s[42]++;if(!i){cov_95ooh69hr().b[21][0]++;cov_95ooh69hr().s[43]++;return;}else{cov_95ooh69hr().b[21][1]++;}cov_95ooh69hr().s[44]++;i=i.filter(l=>{cov_95ooh69hr().f[20]++;cov_95ooh69hr().s[45]++;return s.indexOf(l)===-1;}),i.length===0?(cov_95ooh69hr().b[22][0]++,this.headers.delete(r),this.normalizedNames.delete(r)):(cov_95ooh69hr().b[22][1]++,this.headers.set(r,i));}cov_95ooh69hr().s[46]++;break;}}addHeaderEntry(e,r){cov_95ooh69hr().f[21]++;let n=(cov_95ooh69hr().s[47]++,e.toLowerCase());cov_95ooh69hr().s[48]++;this.maybeSetNormalizedName(e,n),this.headers.has(n)?(cov_95ooh69hr().b[23][0]++,this.headers.get(n).push(r)):(cov_95ooh69hr().b[23][1]++,this.headers.set(n,[r]));}setHeaderEntries(e,r){cov_95ooh69hr().f[22]++;let n=(cov_95ooh69hr().s[49]++,(Array.isArray(r)?(cov_95ooh69hr().b[24][0]++,r):(cov_95ooh69hr().b[24][1]++,[r])).map(s=>{cov_95ooh69hr().f[23]++;cov_95ooh69hr().s[50]++;return s.toString();})),o=(cov_95ooh69hr().s[51]++,e.toLowerCase());cov_95ooh69hr().s[52]++;this.headers.set(o,n),this.maybeSetNormalizedName(e,o);}forEach(e){cov_95ooh69hr().f[24]++;cov_95ooh69hr().s[53]++;this.init(),Array.from(this.normalizedNames.keys()).forEach(r=>{cov_95ooh69hr().f[25]++;cov_95ooh69hr().s[54]++;return e(this.normalizedNames.get(r),this.headers.get(r));});}};cov_95ooh69hr().s[55]++;cov_95ooh69hr().s[62]++;var L=class{map=(cov_95ooh69hr().s[56]++,new Map());set(e,r){cov_95ooh69hr().f[26]++;cov_95ooh69hr().s[57]++;return this.map.set(e,r),this;}get(e){cov_95ooh69hr().f[27]++;cov_95ooh69hr().s[58]++;return(cov_95ooh69hr().b[25][0]++,this.map.has(e))||(cov_95ooh69hr().b[25][1]++,this.map.set(e,e.defaultValue())),this.map.get(e);}delete(e){cov_95ooh69hr().f[28]++;cov_95ooh69hr().s[59]++;return this.map.delete(e),this;}has(e){cov_95ooh69hr().f[29]++;cov_95ooh69hr().s[60]++;return this.map.has(e);}keys(){cov_95ooh69hr().f[30]++;cov_95ooh69hr().s[61]++;return this.map.keys();}},S=class{encodeKey(e){cov_95ooh69hr().f[31]++;cov_95ooh69hr().s[63]++;return de(e);}encodeValue(e){cov_95ooh69hr().f[32]++;cov_95ooh69hr().s[64]++;return de(e);}decodeKey(e){cov_95ooh69hr().f[33]++;cov_95ooh69hr().s[65]++;return decodeURIComponent(e);}decodeValue(e){cov_95ooh69hr().f[34]++;cov_95ooh69hr().s[66]++;return decodeURIComponent(e);}};function be(t,e){cov_95ooh69hr().f[35]++;let r=(cov_95ooh69hr().s[67]++,new Map());cov_95ooh69hr().s[68]++;return(cov_95ooh69hr().b[26][0]++,t.length>0)&&(cov_95ooh69hr().b[26][1]++,t.replace(/^\?/,"").split("&").forEach(o=>{cov_95ooh69hr().f[36]++;let s=(cov_95ooh69hr().s[69]++,o.indexOf("=")),[i,l]=(cov_95ooh69hr().s[70]++,s==-1?(cov_95ooh69hr().b[27][0]++,[e.decodeKey(o),""]):(cov_95ooh69hr().b[27][1]++,[e.decodeKey(o.slice(0,s)),e.decodeValue(o.slice(s+1))])),a=(cov_95ooh69hr().s[71]++,(cov_95ooh69hr().b[28][0]++,r.get(i))||(cov_95ooh69hr().b[28][1]++,[]));cov_95ooh69hr().s[72]++;a.push(l),r.set(i,a);})),r;}var Re=(cov_95ooh69hr().s[73]++,/%(\d[a-f0-9])/gi),Pe=(cov_95ooh69hr().s[74]++,{40:"@","3A":":",24:"$","2C":",","3B":";","3D":"=","3F":"?","2F":"/"});function de(t){cov_95ooh69hr().f[37]++;cov_95ooh69hr().s[75]++;return encodeURIComponent(t).replace(Re,(e,r)=>{cov_95ooh69hr().f[38]++;cov_95ooh69hr().s[76]++;return(cov_95ooh69hr().b[29][0]++,Pe[r])??(cov_95ooh69hr().b[29][1]++,e);});}function U(t){cov_95ooh69hr().f[39]++;cov_95ooh69hr().s[77]++;return`${t}`;}cov_95ooh69hr().s[78]++;var m=class t{map;encoder;updates=(cov_95ooh69hr().s[79]++,null);cloneFrom=(cov_95ooh69hr().s[80]++,null);constructor(e=(cov_95ooh69hr().b[30][0]++,{})){cov_95ooh69hr().f[40]++;cov_95ooh69hr().s[81]++;if(this.encoder=(cov_95ooh69hr().b[32][0]++,e.encoder)||(cov_95ooh69hr().b[32][1]++,new S()),e.fromString){cov_95ooh69hr().b[31][0]++;cov_95ooh69hr().s[82]++;if(e.fromObject){cov_95ooh69hr().b[33][0]++;cov_95ooh69hr().s[83]++;throw new g(2805,!1);}else{cov_95ooh69hr().b[33][1]++;}cov_95ooh69hr().s[84]++;this.map=be(e.fromString,this.encoder);}else{cov_95ooh69hr().b[31][1]++;cov_95ooh69hr().s[85]++;e.fromObject?(cov_95ooh69hr().b[34][0]++,this.map=new Map(),Object.keys(e.fromObject).forEach(r=>{cov_95ooh69hr().f[41]++;let n=(cov_95ooh69hr().s[86]++,e.fromObject[r]),o=(cov_95ooh69hr().s[87]++,Array.isArray(n)?(cov_95ooh69hr().b[35][0]++,n.map(U)):(cov_95ooh69hr().b[35][1]++,[U(n)]));cov_95ooh69hr().s[88]++;this.map.set(r,o);})):(cov_95ooh69hr().b[34][1]++,this.map=null);}}has(e){cov_95ooh69hr().f[42]++;cov_95ooh69hr().s[89]++;return this.init(),this.map.has(e);}get(e){cov_95ooh69hr().f[43]++;cov_95ooh69hr().s[90]++;this.init();let r=(cov_95ooh69hr().s[91]++,this.map.get(e));cov_95ooh69hr().s[92]++;return r?(cov_95ooh69hr().b[36][0]++,r[0]):(cov_95ooh69hr().b[36][1]++,null);}getAll(e){cov_95ooh69hr().f[44]++;cov_95ooh69hr().s[93]++;return this.init(),(cov_95ooh69hr().b[37][0]++,this.map.get(e))||(cov_95ooh69hr().b[37][1]++,null);}keys(){cov_95ooh69hr().f[45]++;cov_95ooh69hr().s[94]++;return this.init(),Array.from(this.map.keys());}append(e,r){cov_95ooh69hr().f[46]++;cov_95ooh69hr().s[95]++;return this.clone({param:e,value:r,op:"a"});}appendAll(e){cov_95ooh69hr().f[47]++;let r=(cov_95ooh69hr().s[96]++,[]);cov_95ooh69hr().s[97]++;return Object.keys(e).forEach(n=>{cov_95ooh69hr().f[48]++;let o=(cov_95ooh69hr().s[98]++,e[n]);cov_95ooh69hr().s[99]++;Array.isArray(o)?(cov_95ooh69hr().b[38][0]++,o.forEach(s=>{cov_95ooh69hr().f[49]++;cov_95ooh69hr().s[100]++;r.push({param:n,value:s,op:"a"});})):(cov_95ooh69hr().b[38][1]++,r.push({param:n,value:o,op:"a"}));}),this.clone(r);}set(e,r){cov_95ooh69hr().f[50]++;cov_95ooh69hr().s[101]++;return this.clone({param:e,value:r,op:"s"});}delete(e,r){cov_95ooh69hr().f[51]++;cov_95ooh69hr().s[102]++;return this.clone({param:e,value:r,op:"d"});}toString(){cov_95ooh69hr().f[52]++;cov_95ooh69hr().s[103]++;return this.init(),this.keys().map(e=>{cov_95ooh69hr().f[53]++;let r=(cov_95ooh69hr().s[104]++,this.encoder.encodeKey(e));cov_95ooh69hr().s[105]++;return this.map.get(e).map(n=>{cov_95ooh69hr().f[54]++;cov_95ooh69hr().s[106]++;return r+"="+this.encoder.encodeValue(n);}).join("&");}).filter(e=>{cov_95ooh69hr().f[55]++;cov_95ooh69hr().s[107]++;return e!=="";}).join("&");}clone(e){cov_95ooh69hr().f[56]++;let r=(cov_95ooh69hr().s[108]++,new t({encoder:this.encoder}));cov_95ooh69hr().s[109]++;return r.cloneFrom=(cov_95ooh69hr().b[39][0]++,this.cloneFrom)||(cov_95ooh69hr().b[39][1]++,this),r.updates=((cov_95ooh69hr().b[40][0]++,this.updates)||(cov_95ooh69hr().b[40][1]++,[])).concat(e),r;}init(){cov_95ooh69hr().f[57]++;cov_95ooh69hr().s[110]++;(cov_95ooh69hr().b[41][0]++,this.map===null)&&(cov_95ooh69hr().b[41][1]++,this.map=new Map()),(cov_95ooh69hr().b[42][0]++,this.cloneFrom!==null)&&(cov_95ooh69hr().b[42][1]++,this.cloneFrom.init(),this.cloneFrom.keys().forEach(e=>{cov_95ooh69hr().f[58]++;cov_95ooh69hr().s[111]++;return this.map.set(e,this.cloneFrom.map.get(e));}),this.updates.forEach(e=>{cov_95ooh69hr().f[59]++;cov_95ooh69hr().s[112]++;switch(e.op){case"a":cov_95ooh69hr().b[43][0]++;case"s":cov_95ooh69hr().b[43][1]++;let r=(cov_95ooh69hr().s[113]++,(cov_95ooh69hr().b[44][0]++,e.op==="a"?(cov_95ooh69hr().b[45][0]++,this.map.get(e.param)):(cov_95ooh69hr().b[45][1]++,void 0))||(cov_95ooh69hr().b[44][1]++,[]));cov_95ooh69hr().s[114]++;r.push(U(e.value)),this.map.set(e.param,r);cov_95ooh69hr().s[115]++;break;case"d":cov_95ooh69hr().b[43][2]++;cov_95ooh69hr().s[116]++;if(e.value!==void 0){cov_95ooh69hr().b[46][0]++;let n=(cov_95ooh69hr().s[117]++,(cov_95ooh69hr().b[47][0]++,this.map.get(e.param))||(cov_95ooh69hr().b[47][1]++,[])),o=(cov_95ooh69hr().s[118]++,n.indexOf(U(e.value)));cov_95ooh69hr().s[119]++;(cov_95ooh69hr().b[48][0]++,o!==-1)&&(cov_95ooh69hr().b[48][1]++,n.splice(o,1)),n.length>0?(cov_95ooh69hr().b[49][0]++,this.map.set(e.param,n)):(cov_95ooh69hr().b[49][1]++,this.map.delete(e.param));}else{cov_95ooh69hr().b[46][1]++;cov_95ooh69hr().s[120]++;this.map.delete(e.param);cov_95ooh69hr().s[121]++;break;}}}),this.cloneFrom=this.updates=null);}};function Me(t){cov_95ooh69hr().f[60]++;cov_95ooh69hr().s[122]++;switch(t){case"DELETE":cov_95ooh69hr().b[50][0]++;case"GET":cov_95ooh69hr().b[50][1]++;case"HEAD":cov_95ooh69hr().b[50][2]++;case"OPTIONS":cov_95ooh69hr().b[50][3]++;case"JSONP":cov_95ooh69hr().b[50][4]++;cov_95ooh69hr().s[123]++;return!1;default:cov_95ooh69hr().b[50][5]++;cov_95ooh69hr().s[124]++;return!0;}}function le(t){cov_95ooh69hr().f[61]++;cov_95ooh69hr().s[125]++;return(cov_95ooh69hr().b[51][0]++,typeof ArrayBuffer<"u")&&(cov_95ooh69hr().b[51][1]++,t instanceof ArrayBuffer);}function ue(t){cov_95ooh69hr().f[62]++;cov_95ooh69hr().s[126]++;return(cov_95ooh69hr().b[52][0]++,typeof Blob<"u")&&(cov_95ooh69hr().b[52][1]++,t instanceof Blob);}function he(t){cov_95ooh69hr().f[63]++;cov_95ooh69hr().s[127]++;return(cov_95ooh69hr().b[53][0]++,typeof FormData<"u")&&(cov_95ooh69hr().b[53][1]++,t instanceof FormData);}function Ne(t){cov_95ooh69hr().f[64]++;cov_95ooh69hr().s[128]++;return(cov_95ooh69hr().b[54][0]++,typeof URLSearchParams<"u")&&(cov_95ooh69hr().b[54][1]++,t instanceof URLSearchParams);}cov_95ooh69hr().s[134]++;cov_95ooh69hr().s[182]++;cov_95ooh69hr().s[184]++;cov_95ooh69hr().s[188]++;cov_95ooh69hr().s[192]++;var fe=(cov_95ooh69hr().s[129]++,"Content-Type"),pe=(cov_95ooh69hr().s[130]++,"Accept"),ye=(cov_95ooh69hr().s[131]++,"text/plain"),me=(cov_95ooh69hr().s[132]++,"application/json"),Oe=(cov_95ooh69hr().s[133]++,`${me}, ${ye}, */*`),M=class t{url;body=(cov_95ooh69hr().s[135]++,null);headers;context;reportProgress=(cov_95ooh69hr().s[136]++,!1);withCredentials=(cov_95ooh69hr().s[137]++,!1);credentials;keepalive=(cov_95ooh69hr().s[138]++,!1);cache;priority;mode;redirect;referrer;integrity;referrerPolicy;responseType=(cov_95ooh69hr().s[139]++,"json");method;params;urlWithParams;transferCache;timeout;constructor(e,r,n,o){cov_95ooh69hr().f[65]++;cov_95ooh69hr().s[140]++;this.url=r,this.method=e.toUpperCase();let s;cov_95ooh69hr().s[141]++;if((cov_95ooh69hr().b[57][0]++,Me(this.method))||(cov_95ooh69hr().b[57][1]++,o)?(cov_95ooh69hr().b[56][0]++,this.body=n!==void 0?(cov_95ooh69hr().b[58][0]++,n):(cov_95ooh69hr().b[58][1]++,null),s=o):(cov_95ooh69hr().b[56][1]++,s=n),s){cov_95ooh69hr().b[55][0]++;cov_95ooh69hr().s[142]++;if(this.reportProgress=!!s.reportProgress,this.withCredentials=!!s.withCredentials,this.keepalive=!!s.keepalive,(cov_95ooh69hr().b[60][0]++,s.responseType)&&(cov_95ooh69hr().b[60][1]++,this.responseType=s.responseType),(cov_95ooh69hr().b[61][0]++,s.headers)&&(cov_95ooh69hr().b[61][1]++,this.headers=s.headers),(cov_95ooh69hr().b[62][0]++,s.context)&&(cov_95ooh69hr().b[62][1]++,this.context=s.context),(cov_95ooh69hr().b[63][0]++,s.params)&&(cov_95ooh69hr().b[63][1]++,this.params=s.params),(cov_95ooh69hr().b[64][0]++,s.priority)&&(cov_95ooh69hr().b[64][1]++,this.priority=s.priority),(cov_95ooh69hr().b[65][0]++,s.cache)&&(cov_95ooh69hr().b[65][1]++,this.cache=s.cache),(cov_95ooh69hr().b[66][0]++,s.credentials)&&(cov_95ooh69hr().b[66][1]++,this.credentials=s.credentials),typeof s.timeout=="number"){cov_95ooh69hr().b[59][0]++;cov_95ooh69hr().s[143]++;if((cov_95ooh69hr().b[68][0]++,s.timeout<1)||(cov_95ooh69hr().b[68][1]++,!Number.isInteger(s.timeout))){cov_95ooh69hr().b[67][0]++;cov_95ooh69hr().s[144]++;throw new g(2822,"");}else{cov_95ooh69hr().b[67][1]++;}cov_95ooh69hr().s[145]++;this.timeout=s.timeout;}else{cov_95ooh69hr().b[59][1]++;}cov_95ooh69hr().s[146]++;(cov_95ooh69hr().b[69][0]++,s.mode)&&(cov_95ooh69hr().b[69][1]++,this.mode=s.mode),(cov_95ooh69hr().b[70][0]++,s.redirect)&&(cov_95ooh69hr().b[70][1]++,this.redirect=s.redirect),(cov_95ooh69hr().b[71][0]++,s.integrity)&&(cov_95ooh69hr().b[71][1]++,this.integrity=s.integrity),(cov_95ooh69hr().b[72][0]++,s.referrer)&&(cov_95ooh69hr().b[72][1]++,this.referrer=s.referrer),(cov_95ooh69hr().b[73][0]++,s.referrerPolicy)&&(cov_95ooh69hr().b[73][1]++,this.referrerPolicy=s.referrerPolicy),this.transferCache=s.transferCache;}else{cov_95ooh69hr().b[55][1]++;}cov_95ooh69hr().s[147]++;if(this.headers??=new E(),this.context??=new L(),!this.params){cov_95ooh69hr().b[74][0]++;cov_95ooh69hr().s[148]++;this.params=new m(),this.urlWithParams=r;}else{cov_95ooh69hr().b[74][1]++;let i=(cov_95ooh69hr().s[149]++,this.params.toString());cov_95ooh69hr().s[150]++;if(i.length===0){cov_95ooh69hr().b[75][0]++;cov_95ooh69hr().s[151]++;this.urlWithParams=r;}else{cov_95ooh69hr().b[75][1]++;let l=(cov_95ooh69hr().s[152]++,r.indexOf("?")),a=(cov_95ooh69hr().s[153]++,l===-1?(cov_95ooh69hr().b[76][0]++,"?"):(cov_95ooh69hr().b[76][1]++,l{cov_95ooh69hr().f[69]++;cov_95ooh69hr().s[178]++;return A.set(b,e.setHeaders[b]);},P)),(cov_95ooh69hr().b[115][0]++,e.setParams)&&(cov_95ooh69hr().b[115][1]++,u=Object.keys(e.setParams).reduce((A,b)=>{cov_95ooh69hr().f[70]++;cov_95ooh69hr().s[179]++;return A.set(b,e.setParams[b]);},u)),new t(r,n,c,{params:u,headers:P,context:I,reportProgress:p,responseType:o,withCredentials:d,transferCache:j,keepalive:s,cache:l,priority:i,timeout:C,mode:a,redirect:f,credentials:x,referrer:w,integrity:D,referrerPolicy:F});}},R=(cov_95ooh69hr().s[180]++,function(t){cov_95ooh69hr().f[71]++;cov_95ooh69hr().s[181]++;return t[t.Sent=0]="Sent",t[t.UploadProgress=1]="UploadProgress",t[t.ResponseHeader=2]="ResponseHeader",t[t.DownloadProgress=3]="DownloadProgress",t[t.Response=4]="Response",t[t.User=5]="User",t;}((cov_95ooh69hr().b[116][0]++,R)||(cov_95ooh69hr().b[116][1]++,{}))),O=class{headers;status;statusText;url;ok;type;redirected;responseType;constructor(e,r=(cov_95ooh69hr().b[117][0]++,200),n=(cov_95ooh69hr().b[118][0]++,"OK")){cov_95ooh69hr().f[72]++;cov_95ooh69hr().s[183]++;this.headers=(cov_95ooh69hr().b[119][0]++,e.headers)||(cov_95ooh69hr().b[119][1]++,new E()),this.status=e.status!==void 0?(cov_95ooh69hr().b[120][0]++,e.status):(cov_95ooh69hr().b[120][1]++,r),this.statusText=(cov_95ooh69hr().b[121][0]++,e.statusText)||(cov_95ooh69hr().b[121][1]++,n),this.url=(cov_95ooh69hr().b[122][0]++,e.url)||(cov_95ooh69hr().b[122][1]++,null),this.redirected=e.redirected,this.responseType=e.responseType,this.ok=(cov_95ooh69hr().b[123][0]++,this.status>=200)&&(cov_95ooh69hr().b[123][1]++,this.status<300);}},B=class t extends O{constructor(e=(cov_95ooh69hr().b[124][0]++,{})){cov_95ooh69hr().f[73]++;cov_95ooh69hr().s[185]++;super(e);}type=(cov_95ooh69hr().s[186]++,R.ResponseHeader);clone(e=(cov_95ooh69hr().b[125][0]++,{})){cov_95ooh69hr().f[74]++;cov_95ooh69hr().s[187]++;return new t({headers:(cov_95ooh69hr().b[126][0]++,e.headers)||(cov_95ooh69hr().b[126][1]++,this.headers),status:e.status!==void 0?(cov_95ooh69hr().b[127][0]++,e.status):(cov_95ooh69hr().b[127][1]++,this.status),statusText:(cov_95ooh69hr().b[128][0]++,e.statusText)||(cov_95ooh69hr().b[128][1]++,this.statusText),url:(cov_95ooh69hr().b[129][0]++,e.url)||(cov_95ooh69hr().b[129][1]++,this.url)||(cov_95ooh69hr().b[129][2]++,void 0)});}},_=class t extends O{body;constructor(e=(cov_95ooh69hr().b[130][0]++,{})){cov_95ooh69hr().f[75]++;cov_95ooh69hr().s[189]++;super(e),this.body=e.body!==void 0?(cov_95ooh69hr().b[131][0]++,e.body):(cov_95ooh69hr().b[131][1]++,null);}type=(cov_95ooh69hr().s[190]++,R.Response);clone(e=(cov_95ooh69hr().b[132][0]++,{})){cov_95ooh69hr().f[76]++;cov_95ooh69hr().s[191]++;return new t({body:e.body!==void 0?(cov_95ooh69hr().b[133][0]++,e.body):(cov_95ooh69hr().b[133][1]++,this.body),headers:(cov_95ooh69hr().b[134][0]++,e.headers)||(cov_95ooh69hr().b[134][1]++,this.headers),status:e.status!==void 0?(cov_95ooh69hr().b[135][0]++,e.status):(cov_95ooh69hr().b[135][1]++,this.status),statusText:(cov_95ooh69hr().b[136][0]++,e.statusText)||(cov_95ooh69hr().b[136][1]++,this.statusText),url:(cov_95ooh69hr().b[137][0]++,e.url)||(cov_95ooh69hr().b[137][1]++,this.url)||(cov_95ooh69hr().b[137][2]++,void 0),redirected:(cov_95ooh69hr().b[138][0]++,e.redirected)??(cov_95ooh69hr().b[138][1]++,this.redirected),responseType:(cov_95ooh69hr().b[139][0]++,e.responseType)??(cov_95ooh69hr().b[139][1]++,this.responseType)});}},N=class extends O{name=(cov_95ooh69hr().s[193]++,"HttpErrorResponse");message;error;ok=(cov_95ooh69hr().s[194]++,!1);constructor(e){cov_95ooh69hr().f[77]++;cov_95ooh69hr().s[195]++;super(e,0,"Unknown Error"),(cov_95ooh69hr().b[141][0]++,this.status>=200)&&(cov_95ooh69hr().b[141][1]++,this.status<300)?(cov_95ooh69hr().b[140][0]++,this.message=`Http failure during parsing for ${(cov_95ooh69hr().b[142][0]++,e.url)||(cov_95ooh69hr().b[142][1]++,"(unknown url)")}`):(cov_95ooh69hr().b[140][1]++,this.message=`Http failure response for ${(cov_95ooh69hr().b[143][0]++,e.url)||(cov_95ooh69hr().b[143][1]++,"(unknown url)")}: ${e.status} ${e.statusText}`),this.error=(cov_95ooh69hr().b[144][0]++,e.error)||(cov_95ooh69hr().b[144][1]++,null);}},De=(cov_95ooh69hr().s[196]++,200),Ie=(cov_95ooh69hr().s[197]++,204);var Ae=(cov_95ooh69hr().s[198]++,new y(""));var ke=(cov_95ooh69hr().s[199]++,/^\)\]\}',?\n/);var V=(cov_95ooh69hr().s[200]++,(()=>{cov_95ooh69hr().f[78]++;class t{xhrFactory;tracingService=(cov_95ooh69hr().s[201]++,h(se,{optional:!0}));constructor(r){cov_95ooh69hr().f[79]++;cov_95ooh69hr().s[202]++;this.xhrFactory=r;}maybePropagateTrace(r){cov_95ooh69hr().f[80]++;cov_95ooh69hr().s[203]++;return this.tracingService?.propagate?(cov_95ooh69hr().b[145][0]++,this.tracingService.propagate(r)):(cov_95ooh69hr().b[145][1]++,r);}handle(r){cov_95ooh69hr().f[81]++;cov_95ooh69hr().s[204]++;if(r.method==="JSONP"){cov_95ooh69hr().b[146][0]++;cov_95ooh69hr().s[205]++;throw new g(-2800,!1);}else{cov_95ooh69hr().b[146][1]++;}let n=(cov_95ooh69hr().s[206]++,this.xhrFactory);cov_95ooh69hr().s[207]++;return X(null).pipe(ee(()=>{cov_95ooh69hr().f[82]++;cov_95ooh69hr().s[208]++;return new q(s=>{cov_95ooh69hr().f[83]++;let i=(cov_95ooh69hr().s[209]++,n.build());cov_95ooh69hr().s[210]++;if(i.open(r.method,r.urlWithParams),(cov_95ooh69hr().b[148][0]++,r.withCredentials)&&(cov_95ooh69hr().b[148][1]++,i.withCredentials=!0),r.headers.forEach((c,d)=>{cov_95ooh69hr().f[84]++;cov_95ooh69hr().s[211]++;return i.setRequestHeader(c,d.join(","));}),(cov_95ooh69hr().b[149][0]++,r.headers.has(pe))||(cov_95ooh69hr().b[149][1]++,i.setRequestHeader(pe,Oe)),!r.headers.has(fe)){cov_95ooh69hr().b[147][0]++;let c=(cov_95ooh69hr().s[212]++,r.detectContentTypeHeader());cov_95ooh69hr().s[213]++;(cov_95ooh69hr().b[150][0]++,c!==null)&&(cov_95ooh69hr().b[150][1]++,i.setRequestHeader(fe,c));}else{cov_95ooh69hr().b[147][1]++;}cov_95ooh69hr().s[214]++;if((cov_95ooh69hr().b[152][0]++,r.timeout)&&(cov_95ooh69hr().b[152][1]++,i.timeout=r.timeout),r.responseType){cov_95ooh69hr().b[151][0]++;let c=(cov_95ooh69hr().s[215]++,r.responseType.toLowerCase());cov_95ooh69hr().s[216]++;i.responseType=c!=="json"?(cov_95ooh69hr().b[153][0]++,c):(cov_95ooh69hr().b[153][1]++,"text");}else{cov_95ooh69hr().b[151][1]++;}cov_95ooh69hr().s[219]++;let l=(cov_95ooh69hr().s[217]++,r.serializeBody()),a=(cov_95ooh69hr().s[218]++,null),f=()=>{cov_95ooh69hr().f[85]++;cov_95ooh69hr().s[220]++;if(a!==null){cov_95ooh69hr().b[154][0]++;cov_95ooh69hr().s[221]++;return a;}else{cov_95ooh69hr().b[154][1]++;}let c=(cov_95ooh69hr().s[222]++,(cov_95ooh69hr().b[155][0]++,i.statusText)||(cov_95ooh69hr().b[155][1]++,"OK")),d=(cov_95ooh69hr().s[223]++,new E(i.getAllResponseHeaders())),p=(cov_95ooh69hr().s[224]++,(cov_95ooh69hr().b[156][0]++,i.responseURL)||(cov_95ooh69hr().b[156][1]++,r.url));cov_95ooh69hr().s[225]++;return a=new B({headers:d,status:i.status,statusText:c,url:p}),a;},x=(cov_95ooh69hr().s[226]++,this.maybePropagateTrace(()=>{cov_95ooh69hr().f[86]++;let{headers:c,status:d,statusText:p,url:P}=(cov_95ooh69hr().s[227]++,f()),u=(cov_95ooh69hr().s[228]++,null);cov_95ooh69hr().s[229]++;(cov_95ooh69hr().b[157][0]++,d!==Ie)&&(cov_95ooh69hr().b[157][1]++,u=typeof i.response>"u"?(cov_95ooh69hr().b[158][0]++,i.responseText):(cov_95ooh69hr().b[158][1]++,i.response)),(cov_95ooh69hr().b[159][0]++,d===0)&&(cov_95ooh69hr().b[159][1]++,d=u?(cov_95ooh69hr().b[160][0]++,De):(cov_95ooh69hr().b[160][1]++,0));let I=(cov_95ooh69hr().s[230]++,(cov_95ooh69hr().b[161][0]++,d>=200)&&(cov_95ooh69hr().b[161][1]++,d<300));cov_95ooh69hr().s[231]++;if((cov_95ooh69hr().b[163][0]++,r.responseType==="json")&&(cov_95ooh69hr().b[163][1]++,typeof u=="string")){cov_95ooh69hr().b[162][0]++;let A=(cov_95ooh69hr().s[232]++,u);cov_95ooh69hr().s[233]++;u=u.replace(ke,"");cov_95ooh69hr().s[234]++;try{cov_95ooh69hr().s[235]++;u=u!==""?(cov_95ooh69hr().b[164][0]++,JSON.parse(u)):(cov_95ooh69hr().b[164][1]++,null);}catch(b){cov_95ooh69hr().s[236]++;u=A,(cov_95ooh69hr().b[165][0]++,I)&&(cov_95ooh69hr().b[165][1]++,I=!1,u={error:b,text:u});}}else{cov_95ooh69hr().b[162][1]++;}cov_95ooh69hr().s[237]++;I?(cov_95ooh69hr().b[166][0]++,s.next(new _({body:u,headers:c,status:d,statusText:p,url:(cov_95ooh69hr().b[167][0]++,P)||(cov_95ooh69hr().b[167][1]++,void 0)})),s.complete()):(cov_95ooh69hr().b[166][1]++,s.error(new N({error:u,headers:c,status:d,statusText:p,url:(cov_95ooh69hr().b[168][0]++,P)||(cov_95ooh69hr().b[168][1]++,void 0)})));})),w=(cov_95ooh69hr().s[238]++,this.maybePropagateTrace(c=>{cov_95ooh69hr().f[87]++;let{url:d}=(cov_95ooh69hr().s[239]++,f()),p=(cov_95ooh69hr().s[240]++,new N({error:c,status:(cov_95ooh69hr().b[169][0]++,i.status)||(cov_95ooh69hr().b[169][1]++,0),statusText:(cov_95ooh69hr().b[170][0]++,i.statusText)||(cov_95ooh69hr().b[170][1]++,"Unknown Error"),url:(cov_95ooh69hr().b[171][0]++,d)||(cov_95ooh69hr().b[171][1]++,void 0)}));cov_95ooh69hr().s[241]++;s.error(p);})),D=(cov_95ooh69hr().s[242]++,w);cov_95ooh69hr().s[243]++;(cov_95ooh69hr().b[172][0]++,r.timeout)&&(cov_95ooh69hr().b[172][1]++,D=this.maybePropagateTrace(c=>{cov_95ooh69hr().f[88]++;let{url:d}=(cov_95ooh69hr().s[244]++,f()),p=(cov_95ooh69hr().s[245]++,new N({error:new DOMException("Request timed out","TimeoutError"),status:(cov_95ooh69hr().b[173][0]++,i.status)||(cov_95ooh69hr().b[173][1]++,0),statusText:(cov_95ooh69hr().b[174][0]++,i.statusText)||(cov_95ooh69hr().b[174][1]++,"Request timeout"),url:(cov_95ooh69hr().b[175][0]++,d)||(cov_95ooh69hr().b[175][1]++,void 0)}));cov_95ooh69hr().s[246]++;s.error(p);}));let F=(cov_95ooh69hr().s[247]++,!1),j=(cov_95ooh69hr().s[248]++,this.maybePropagateTrace(c=>{cov_95ooh69hr().f[89]++;cov_95ooh69hr().s[249]++;(cov_95ooh69hr().b[176][0]++,F)||(cov_95ooh69hr().b[176][1]++,s.next(f()),F=!0);let d=(cov_95ooh69hr().s[250]++,{type:R.DownloadProgress,loaded:c.loaded});cov_95ooh69hr().s[251]++;(cov_95ooh69hr().b[177][0]++,c.lengthComputable)&&(cov_95ooh69hr().b[177][1]++,d.total=c.total),(cov_95ooh69hr().b[178][0]++,r.responseType==="text")&&(cov_95ooh69hr().b[178][1]++,i.responseText)&&(cov_95ooh69hr().b[178][2]++,d.partialText=i.responseText),s.next(d);})),C=(cov_95ooh69hr().s[252]++,this.maybePropagateTrace(c=>{cov_95ooh69hr().f[90]++;let d=(cov_95ooh69hr().s[253]++,{type:R.UploadProgress,loaded:c.loaded});cov_95ooh69hr().s[254]++;(cov_95ooh69hr().b[179][0]++,c.lengthComputable)&&(cov_95ooh69hr().b[179][1]++,d.total=c.total),s.next(d);}));cov_95ooh69hr().s[255]++;return i.addEventListener("load",x),i.addEventListener("error",w),i.addEventListener("timeout",D),i.addEventListener("abort",w),(cov_95ooh69hr().b[180][0]++,r.reportProgress)&&(cov_95ooh69hr().b[180][1]++,i.addEventListener("progress",j),(cov_95ooh69hr().b[181][0]++,l!==null)&&(cov_95ooh69hr().b[181][1]++,i.upload)&&(cov_95ooh69hr().b[181][2]++,i.upload.addEventListener("progress",C))),i.send(l),s.next({type:R.Sent}),()=>{cov_95ooh69hr().f[91]++;cov_95ooh69hr().s[256]++;i.removeEventListener("error",w),i.removeEventListener("abort",w),i.removeEventListener("load",x),i.removeEventListener("timeout",D),(cov_95ooh69hr().b[182][0]++,r.reportProgress)&&(cov_95ooh69hr().b[182][1]++,i.removeEventListener("progress",j),(cov_95ooh69hr().b[183][0]++,l!==null)&&(cov_95ooh69hr().b[183][1]++,i.upload)&&(cov_95ooh69hr().b[183][2]++,i.upload.removeEventListener("progress",C))),(cov_95ooh69hr().b[184][0]++,i.readyState!==i.DONE)&&(cov_95ooh69hr().b[184][1]++,i.abort());};});}));}static ɵfac=(cov_95ooh69hr().s[257]++,function(n){cov_95ooh69hr().f[92]++;cov_95ooh69hr().s[258]++;return new((cov_95ooh69hr().b[185][0]++,n)||(cov_95ooh69hr().b[185][1]++,t))(v(ce));});static ɵprov=(cov_95ooh69hr().s[259]++,T({token:t,factory:t.ɵfac,providedIn:"root"}));}cov_95ooh69hr().s[260]++;return t;})());function _e(t,e){cov_95ooh69hr().f[93]++;cov_95ooh69hr().s[261]++;return e(t);}function xe(t,e,r){cov_95ooh69hr().f[94]++;cov_95ooh69hr().s[262]++;return(n,o)=>{cov_95ooh69hr().f[95]++;cov_95ooh69hr().s[263]++;return te(r,()=>{cov_95ooh69hr().f[96]++;cov_95ooh69hr().s[264]++;return e(n,s=>{cov_95ooh69hr().f[97]++;cov_95ooh69hr().s[265]++;return t(s,o);});});};}var G=(cov_95ooh69hr().s[266]++,new y("",{factory:()=>{cov_95ooh69hr().f[98]++;cov_95ooh69hr().s[267]++;return[];}})),ge=(cov_95ooh69hr().s[268]++,new y("")),Te=(cov_95ooh69hr().s[269]++,new y("",{factory:()=>{cov_95ooh69hr().f[99]++;cov_95ooh69hr().s[270]++;return!0;}}));var K=(cov_95ooh69hr().s[271]++,(()=>{cov_95ooh69hr().f[100]++;class t{static ɵfac=(cov_95ooh69hr().s[272]++,function(n){cov_95ooh69hr().f[101]++;cov_95ooh69hr().s[273]++;return new((cov_95ooh69hr().b[186][0]++,n)||(cov_95ooh69hr().b[186][1]++,t))();});static ɵprov=(cov_95ooh69hr().s[274]++,T({token:t,factory:function(n){cov_95ooh69hr().f[102]++;let o=(cov_95ooh69hr().s[275]++,null);cov_95ooh69hr().s[276]++;return n?(cov_95ooh69hr().b[187][0]++,o=new((cov_95ooh69hr().b[188][0]++,n)||(cov_95ooh69hr().b[188][1]++,t))()):(cov_95ooh69hr().b[187][1]++,o=v(V)),o;},providedIn:"root"}));}cov_95ooh69hr().s[277]++;return t;})());var z=(cov_95ooh69hr().s[278]++,(()=>{cov_95ooh69hr().f[103]++;class t{backend;injector;chain=(cov_95ooh69hr().s[279]++,null);pendingTasks=(cov_95ooh69hr().s[280]++,h(oe));contributeToStability=(cov_95ooh69hr().s[281]++,h(Te));constructor(r,n){cov_95ooh69hr().f[104]++;cov_95ooh69hr().s[282]++;this.backend=r,this.injector=n;}handle(r){cov_95ooh69hr().f[105]++;cov_95ooh69hr().s[283]++;if(this.chain===null){cov_95ooh69hr().b[189][0]++;let n=(cov_95ooh69hr().s[284]++,Array.from(new Set([...this.injector.get(G),...this.injector.get(ge,[])])));cov_95ooh69hr().s[285]++;this.chain=n.reduceRight((o,s)=>{cov_95ooh69hr().f[106]++;cov_95ooh69hr().s[286]++;return xe(o,s,this.injector);},_e);}else{cov_95ooh69hr().b[189][1]++;}cov_95ooh69hr().s[287]++;if(this.contributeToStability){cov_95ooh69hr().b[190][0]++;let n=(cov_95ooh69hr().s[288]++,this.pendingTasks.add());cov_95ooh69hr().s[289]++;return this.chain(r,o=>{cov_95ooh69hr().f[107]++;cov_95ooh69hr().s[290]++;return this.backend.handle(o);}).pipe(H(n));}else{cov_95ooh69hr().b[190][1]++;cov_95ooh69hr().s[291]++;return this.chain(r,n=>{cov_95ooh69hr().f[108]++;cov_95ooh69hr().s[292]++;return this.backend.handle(n);});}}static ɵfac=(cov_95ooh69hr().s[293]++,function(n){cov_95ooh69hr().f[109]++;cov_95ooh69hr().s[294]++;return new((cov_95ooh69hr().b[191][0]++,n)||(cov_95ooh69hr().b[191][1]++,t))(v(K),v(J));});static ɵprov=(cov_95ooh69hr().s[295]++,T({token:t,factory:t.ɵfac,providedIn:"root"}));}cov_95ooh69hr().s[296]++;return t;})()),W=(cov_95ooh69hr().s[297]++,(()=>{cov_95ooh69hr().f[110]++;class t{static ɵfac=(cov_95ooh69hr().s[298]++,function(n){cov_95ooh69hr().f[111]++;cov_95ooh69hr().s[299]++;return new((cov_95ooh69hr().b[192][0]++,n)||(cov_95ooh69hr().b[192][1]++,t))();});static ɵprov=(cov_95ooh69hr().s[300]++,T({token:t,factory:function(n){cov_95ooh69hr().f[112]++;let o=(cov_95ooh69hr().s[301]++,null);cov_95ooh69hr().s[302]++;return n?(cov_95ooh69hr().b[193][0]++,o=new((cov_95ooh69hr().b[194][0]++,n)||(cov_95ooh69hr().b[194][1]++,t))()):(cov_95ooh69hr().b[193][1]++,o=v(z)),o;},providedIn:"root"}));}cov_95ooh69hr().s[303]++;return t;})());function $(t,e){cov_95ooh69hr().f[113]++;cov_95ooh69hr().s[304]++;return{body:e,headers:t.headers,context:t.context,observe:t.observe,params:t.params,reportProgress:t.reportProgress,responseType:t.responseType,withCredentials:t.withCredentials,credentials:t.credentials,transferCache:t.transferCache,timeout:t.timeout,keepalive:t.keepalive,priority:t.priority,cache:t.cache,mode:t.mode,redirect:t.redirect,integrity:t.integrity,referrer:t.referrer,referrerPolicy:t.referrerPolicy};}var ve=(cov_95ooh69hr().s[305]++,(()=>{cov_95ooh69hr().f[114]++;class t{handler;constructor(r){cov_95ooh69hr().f[115]++;cov_95ooh69hr().s[306]++;this.handler=r;}request(r,n,o=(cov_95ooh69hr().b[195][0]++,{})){cov_95ooh69hr().f[116]++;let s;cov_95ooh69hr().s[307]++;if(r instanceof M){cov_95ooh69hr().b[196][0]++;cov_95ooh69hr().s[308]++;s=r;}else{cov_95ooh69hr().b[196][1]++;let a;cov_95ooh69hr().s[309]++;o.headers instanceof E?(cov_95ooh69hr().b[197][0]++,a=o.headers):(cov_95ooh69hr().b[197][1]++,a=new E(o.headers));let f;cov_95ooh69hr().s[310]++;(cov_95ooh69hr().b[198][0]++,o.params)&&(cov_95ooh69hr().b[198][1]++,o.params instanceof m?(cov_95ooh69hr().b[199][0]++,f=o.params):(cov_95ooh69hr().b[199][1]++,f=new m({fromObject:o.params}))),s=new M(r,n,o.body!==void 0?(cov_95ooh69hr().b[200][0]++,o.body):(cov_95ooh69hr().b[200][1]++,null),{headers:a,context:o.context,params:f,reportProgress:o.reportProgress,responseType:(cov_95ooh69hr().b[201][0]++,o.responseType)||(cov_95ooh69hr().b[201][1]++,"json"),withCredentials:o.withCredentials,transferCache:o.transferCache,keepalive:o.keepalive,priority:o.priority,cache:o.cache,mode:o.mode,redirect:o.redirect,credentials:o.credentials,referrer:o.referrer,referrerPolicy:o.referrerPolicy,integrity:o.integrity,timeout:o.timeout});}let i=(cov_95ooh69hr().s[311]++,X(s).pipe(Q(a=>{cov_95ooh69hr().f[117]++;cov_95ooh69hr().s[312]++;return this.handler.handle(a);})));cov_95ooh69hr().s[313]++;if((cov_95ooh69hr().b[203][0]++,r instanceof M)||(cov_95ooh69hr().b[203][1]++,o.observe==="events")){cov_95ooh69hr().b[202][0]++;cov_95ooh69hr().s[314]++;return i;}else{cov_95ooh69hr().b[202][1]++;}let l=(cov_95ooh69hr().s[315]++,i.pipe(Z(a=>{cov_95ooh69hr().f[118]++;cov_95ooh69hr().s[316]++;return a instanceof _;})));cov_95ooh69hr().s[317]++;switch((cov_95ooh69hr().b[205][0]++,o.observe)||(cov_95ooh69hr().b[205][1]++,"body")){case"body":cov_95ooh69hr().b[204][0]++;cov_95ooh69hr().s[318]++;switch(s.responseType){case"arraybuffer":cov_95ooh69hr().b[206][0]++;cov_95ooh69hr().s[319]++;return l.pipe(k(a=>{cov_95ooh69hr().f[119]++;cov_95ooh69hr().s[320]++;if((cov_95ooh69hr().b[208][0]++,a.body!==null)&&(cov_95ooh69hr().b[208][1]++,!(a.body instanceof ArrayBuffer))){cov_95ooh69hr().b[207][0]++;cov_95ooh69hr().s[321]++;throw new g(2806,!1);}else{cov_95ooh69hr().b[207][1]++;}cov_95ooh69hr().s[322]++;return a.body;}));case"blob":cov_95ooh69hr().b[206][1]++;cov_95ooh69hr().s[323]++;return l.pipe(k(a=>{cov_95ooh69hr().f[120]++;cov_95ooh69hr().s[324]++;if((cov_95ooh69hr().b[210][0]++,a.body!==null)&&(cov_95ooh69hr().b[210][1]++,!(a.body instanceof Blob))){cov_95ooh69hr().b[209][0]++;cov_95ooh69hr().s[325]++;throw new g(2807,!1);}else{cov_95ooh69hr().b[209][1]++;}cov_95ooh69hr().s[326]++;return a.body;}));case"text":cov_95ooh69hr().b[206][2]++;cov_95ooh69hr().s[327]++;return l.pipe(k(a=>{cov_95ooh69hr().f[121]++;cov_95ooh69hr().s[328]++;if((cov_95ooh69hr().b[212][0]++,a.body!==null)&&(cov_95ooh69hr().b[212][1]++,typeof a.body!="string")){cov_95ooh69hr().b[211][0]++;cov_95ooh69hr().s[329]++;throw new g(2808,!1);}else{cov_95ooh69hr().b[211][1]++;}cov_95ooh69hr().s[330]++;return a.body;}));default:cov_95ooh69hr().b[206][3]++;cov_95ooh69hr().s[331]++;return l.pipe(k(a=>{cov_95ooh69hr().f[122]++;cov_95ooh69hr().s[332]++;return a.body;}));}case"response":cov_95ooh69hr().b[204][1]++;cov_95ooh69hr().s[333]++;return l;default:cov_95ooh69hr().b[204][2]++;cov_95ooh69hr().s[334]++;throw new g(2809,!1);}}delete(r,n=(cov_95ooh69hr().b[213][0]++,{})){cov_95ooh69hr().f[123]++;cov_95ooh69hr().s[335]++;return this.request("DELETE",r,n);}get(r,n=(cov_95ooh69hr().b[214][0]++,{})){cov_95ooh69hr().f[124]++;cov_95ooh69hr().s[336]++;return this.request("GET",r,n);}head(r,n=(cov_95ooh69hr().b[215][0]++,{})){cov_95ooh69hr().f[125]++;cov_95ooh69hr().s[337]++;return this.request("HEAD",r,n);}jsonp(r,n){cov_95ooh69hr().f[126]++;cov_95ooh69hr().s[338]++;return this.request("JSONP",r,{params:new m().append(n,"JSONP_CALLBACK"),observe:"body",responseType:"json"});}options(r,n=(cov_95ooh69hr().b[216][0]++,{})){cov_95ooh69hr().f[127]++;cov_95ooh69hr().s[339]++;return this.request("OPTIONS",r,n);}patch(r,n,o=(cov_95ooh69hr().b[217][0]++,{})){cov_95ooh69hr().f[128]++;cov_95ooh69hr().s[340]++;return this.request("PATCH",r,$(o,n));}post(r,n,o=(cov_95ooh69hr().b[218][0]++,{})){cov_95ooh69hr().f[129]++;cov_95ooh69hr().s[341]++;return this.request("POST",r,$(o,n));}put(r,n,o=(cov_95ooh69hr().b[219][0]++,{})){cov_95ooh69hr().f[130]++;cov_95ooh69hr().s[342]++;return this.request("PUT",r,$(o,n));}static ɵfac=(cov_95ooh69hr().s[343]++,function(n){cov_95ooh69hr().f[131]++;cov_95ooh69hr().s[344]++;return new((cov_95ooh69hr().b[220][0]++,n)||(cov_95ooh69hr().b[220][1]++,t))(v(W));});static ɵprov=(cov_95ooh69hr().s[345]++,T({token:t,factory:t.ɵfac,providedIn:"root"}));}cov_95ooh69hr().s[346]++;return t;})());var Fe=(cov_95ooh69hr().s[347]++,new y("",{factory:()=>{cov_95ooh69hr().f[132]++;cov_95ooh69hr().s[348]++;return!0;}})),je=(cov_95ooh69hr().s[349]++,"XSRF-TOKEN"),Ce=(cov_95ooh69hr().s[350]++,new y("",{factory:()=>{cov_95ooh69hr().f[133]++;cov_95ooh69hr().s[351]++;return je;}})),Ue=(cov_95ooh69hr().s[352]++,"X-XSRF-TOKEN"),Le=(cov_95ooh69hr().s[353]++,new y("",{factory:()=>{cov_95ooh69hr().f[134]++;cov_95ooh69hr().s[354]++;return Ue;}})),Se=(cov_95ooh69hr().s[355]++,(()=>{cov_95ooh69hr().f[135]++;class t{cookieName=(cov_95ooh69hr().s[356]++,h(Ce));doc=(cov_95ooh69hr().s[357]++,h(ne));lastCookieString=(cov_95ooh69hr().s[358]++,"");lastToken=(cov_95ooh69hr().s[359]++,null);parseCount=(cov_95ooh69hr().s[360]++,0);getToken(){cov_95ooh69hr().f[136]++;let r=(cov_95ooh69hr().s[361]++,(cov_95ooh69hr().b[221][0]++,this.doc.cookie)||(cov_95ooh69hr().b[221][1]++,""));cov_95ooh69hr().s[362]++;return(cov_95ooh69hr().b[222][0]++,r!==this.lastCookieString)&&(cov_95ooh69hr().b[222][1]++,this.parseCount++,this.lastToken=ae(r,this.cookieName),this.lastCookieString=r),this.lastToken;}static ɵfac=(cov_95ooh69hr().s[363]++,function(n){cov_95ooh69hr().f[137]++;cov_95ooh69hr().s[364]++;return new((cov_95ooh69hr().b[223][0]++,n)||(cov_95ooh69hr().b[223][1]++,t))();});static ɵprov=(cov_95ooh69hr().s[365]++,T({token:t,factory:t.ɵfac,providedIn:"root"}));}cov_95ooh69hr().s[366]++;return t;})()),Ee=(cov_95ooh69hr().s[367]++,(()=>{cov_95ooh69hr().f[138]++;class t{static ɵfac=(cov_95ooh69hr().s[368]++,function(n){cov_95ooh69hr().f[139]++;cov_95ooh69hr().s[369]++;return new((cov_95ooh69hr().b[224][0]++,n)||(cov_95ooh69hr().b[224][1]++,t))();});static ɵprov=(cov_95ooh69hr().s[370]++,T({token:t,factory:function(n){cov_95ooh69hr().f[140]++;let o=(cov_95ooh69hr().s[371]++,null);cov_95ooh69hr().s[372]++;return n?(cov_95ooh69hr().b[225][0]++,o=new((cov_95ooh69hr().b[226][0]++,n)||(cov_95ooh69hr().b[226][1]++,t))()):(cov_95ooh69hr().b[225][1]++,o=v(Se)),o;},providedIn:"root"}));}cov_95ooh69hr().s[373]++;return t;})());function Be(t,e){cov_95ooh69hr().f[141]++;cov_95ooh69hr().s[374]++;if((cov_95ooh69hr().b[228][0]++,!h(Fe))||(cov_95ooh69hr().b[228][1]++,t.method==="GET")||(cov_95ooh69hr().b[228][2]++,t.method==="HEAD")){cov_95ooh69hr().b[227][0]++;cov_95ooh69hr().s[375]++;return e(t);}else{cov_95ooh69hr().b[227][1]++;}cov_95ooh69hr().s[376]++;try{let o=(cov_95ooh69hr().s[377]++,h(ie).href),{origin:s}=(cov_95ooh69hr().s[378]++,new URL(o)),{origin:i}=(cov_95ooh69hr().s[379]++,new URL(t.url,s));cov_95ooh69hr().s[380]++;if(s!==i){cov_95ooh69hr().b[229][0]++;cov_95ooh69hr().s[381]++;return e(t);}else{cov_95ooh69hr().b[229][1]++;}}catch{cov_95ooh69hr().s[382]++;return e(t);}let r=(cov_95ooh69hr().s[383]++,h(Ee).getToken()),n=(cov_95ooh69hr().s[384]++,h(Le));cov_95ooh69hr().s[385]++;return(cov_95ooh69hr().b[230][0]++,r!=null)&&(cov_95ooh69hr().b[230][1]++,!t.headers.has(n))&&(cov_95ooh69hr().b[230][2]++,t=t.clone({headers:t.headers.set(n,r)})),e(t);}var Y=(cov_95ooh69hr().s[386]++,function(t){cov_95ooh69hr().f[142]++;cov_95ooh69hr().s[387]++;return t[t.Interceptors=0]="Interceptors",t[t.LegacyInterceptors=1]="LegacyInterceptors",t[t.CustomXsrfConfiguration=2]="CustomXsrfConfiguration",t[t.NoXsrfProtection=3]="NoXsrfProtection",t[t.JsonpSupport=4]="JsonpSupport",t[t.RequestsMadeViaParent=5]="RequestsMadeViaParent",t[t.Fetch=6]="Fetch",t;}((cov_95ooh69hr().b[231][0]++,Y)||(cov_95ooh69hr().b[231][1]++,{})));function ze(t,e){cov_95ooh69hr().f[143]++;cov_95ooh69hr().s[388]++;return{ɵkind:t,ɵproviders:e};}function Xe(...t){cov_95ooh69hr().f[144]++;let e=(cov_95ooh69hr().s[389]++,[ve,z,{provide:W,useExisting:z},{provide:K,useFactory:()=>{cov_95ooh69hr().f[145]++;cov_95ooh69hr().s[390]++;return(cov_95ooh69hr().b[232][0]++,h(Ae,{optional:!0}))??(cov_95ooh69hr().b[232][1]++,h(V));}},{provide:G,useValue:Be,multi:!0}]);cov_95ooh69hr().s[391]++;for(let r of t){cov_95ooh69hr().s[392]++;e.push(...r.ɵproviders);}cov_95ooh69hr().s[393]++;return re(e);}function Je(t){cov_95ooh69hr().f[146]++;cov_95ooh69hr().s[394]++;return ze(Y.Interceptors,t.map(e=>{cov_95ooh69hr().f[147]++;cov_95ooh69hr().s[395]++;return{provide:G,useValue:e,multi:!0};}));}var Ir=(cov_95ooh69hr().s[396]++,new y("API_BASE_URL"));export{N as a,ve as b,Xe as c,Je as d,Ir as e};//# sourceMappingURL=chunk-2S5V5XEE.js.map +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb3ZfOTVvb2g2OWhyIiwicyIsIkUiLCJ0IiwiaGVhZGVycyIsIm5vcm1hbGl6ZWROYW1lcyIsIk1hcCIsImxhenlJbml0IiwibGF6eVVwZGF0ZSIsImNvbnN0cnVjdG9yIiwiZSIsImYiLCJiIiwic3BsaXQiLCJmb3JFYWNoIiwiciIsIm4iLCJpbmRleE9mIiwibyIsInNsaWNlIiwidHJpbSIsImFkZEhlYWRlckVudHJ5IiwiSGVhZGVycyIsIk9iamVjdCIsImVudHJpZXMiLCJzZXRIZWFkZXJFbnRyaWVzIiwiaGFzIiwiaW5pdCIsInRvTG93ZXJDYXNlIiwiZ2V0IiwibGVuZ3RoIiwia2V5cyIsIkFycmF5IiwiZnJvbSIsInZhbHVlcyIsImdldEFsbCIsImFwcGVuZCIsImNsb25lIiwibmFtZSIsInZhbHVlIiwib3AiLCJzZXQiLCJkZWxldGUiLCJtYXliZVNldE5vcm1hbGl6ZWROYW1lIiwiY29weUZyb20iLCJhcHBseVVwZGF0ZSIsImNvbmNhdCIsInB1c2giLCJpIiwiZmlsdGVyIiwibCIsImlzQXJyYXkiLCJtYXAiLCJ0b1N0cmluZyIsIkwiLCJkZWZhdWx0VmFsdWUiLCJTIiwiZW5jb2RlS2V5IiwiZGUiLCJlbmNvZGVWYWx1ZSIsImRlY29kZUtleSIsImRlY29kZVVSSUNvbXBvbmVudCIsImRlY29kZVZhbHVlIiwiYmUiLCJyZXBsYWNlIiwiYSIsIlJlIiwiUGUiLCJlbmNvZGVVUklDb21wb25lbnQiLCJVIiwibSIsImVuY29kZXIiLCJ1cGRhdGVzIiwiY2xvbmVGcm9tIiwiZnJvbVN0cmluZyIsImZyb21PYmplY3QiLCJnIiwicGFyYW0iLCJhcHBlbmRBbGwiLCJqb2luIiwic3BsaWNlIiwiTWUiLCJsZSIsIkFycmF5QnVmZmVyIiwidWUiLCJCbG9iIiwiaGUiLCJGb3JtRGF0YSIsIk5lIiwiVVJMU2VhcmNoUGFyYW1zIiwiZmUiLCJwZSIsInllIiwibWUiLCJPZSIsIk0iLCJ1cmwiLCJib2R5IiwiY29udGV4dCIsInJlcG9ydFByb2dyZXNzIiwid2l0aENyZWRlbnRpYWxzIiwiY3JlZGVudGlhbHMiLCJrZWVwYWxpdmUiLCJjYWNoZSIsInByaW9yaXR5IiwibW9kZSIsInJlZGlyZWN0IiwicmVmZXJyZXIiLCJpbnRlZ3JpdHkiLCJyZWZlcnJlclBvbGljeSIsInJlc3BvbnNlVHlwZSIsIm1ldGhvZCIsInBhcmFtcyIsInVybFdpdGhQYXJhbXMiLCJ0cmFuc2ZlckNhY2hlIiwidGltZW91dCIsInRvVXBwZXJDYXNlIiwiTnVtYmVyIiwiaXNJbnRlZ2VyIiwic2VyaWFsaXplQm9keSIsIkpTT04iLCJzdHJpbmdpZnkiLCJkZXRlY3RDb250ZW50VHlwZUhlYWRlciIsInR5cGUiLCJ4IiwidyIsIkQiLCJGIiwiaiIsIkMiLCJjIiwiZCIsInAiLCJQIiwidSIsIkkiLCJzZXRIZWFkZXJzIiwicmVkdWNlIiwiQSIsInNldFBhcmFtcyIsIlIiLCJTZW50IiwiVXBsb2FkUHJvZ3Jlc3MiLCJSZXNwb25zZUhlYWRlciIsIkRvd25sb2FkUHJvZ3Jlc3MiLCJSZXNwb25zZSIsIlVzZXIiLCJPIiwic3RhdHVzIiwic3RhdHVzVGV4dCIsIm9rIiwicmVkaXJlY3RlZCIsIkIiLCJfIiwiTiIsIm1lc3NhZ2UiLCJlcnJvciIsIkRlIiwiSWUiLCJBZSIsInkiLCJrZSIsIlYiLCJ4aHJGYWN0b3J5IiwidHJhY2luZ1NlcnZpY2UiLCJoIiwic2UiLCJvcHRpb25hbCIsIm1heWJlUHJvcGFnYXRlVHJhY2UiLCJwcm9wYWdhdGUiLCJoYW5kbGUiLCJYIiwicGlwZSIsImVlIiwicSIsImJ1aWxkIiwib3BlbiIsInNldFJlcXVlc3RIZWFkZXIiLCJwYXJ0aWFsRnJvbVhociIsImdldEFsbFJlc3BvbnNlSGVhZGVycyIsInJlc3BvbnNlVVJMIiwicmVzcG9uc2UiLCJyZXNwb25zZVRleHQiLCJwYXJzZSIsInRleHQiLCJuZXh0IiwiY29tcGxldGUiLCJET01FeGNlcHRpb24iLCJsb2FkZWQiLCJsZW5ndGhDb21wdXRhYmxlIiwidG90YWwiLCJwYXJ0aWFsVGV4dCIsImFkZEV2ZW50TGlzdGVuZXIiLCJ1cGxvYWQiLCJzZW5kIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsInJlYWR5U3RhdGUiLCJET05FIiwiYWJvcnQiLCLJtWZhYyIsInYiLCJjZSIsIsm1cHJvdiIsIlQiLCJ0b2tlbiIsImZhY3RvcnkiLCJwcm92aWRlZEluIiwiX2UiLCJ4ZSIsInRlIiwiRyIsImdlIiwiVGUiLCJLIiwieiIsImJhY2tlbmQiLCJpbmplY3RvciIsImNoYWluIiwicGVuZGluZ1Rhc2tzIiwib2UiLCJjb250cmlidXRlVG9TdGFiaWxpdHkiLCJTZXQiLCJyZWR1Y2VSaWdodCIsImFkZCIsIkgiLCJKIiwiVyIsIiQiLCJvYnNlcnZlIiwidmUiLCJoYW5kbGVyIiwicmVxdWVzdCIsIlEiLCJaIiwiayIsImhlYWQiLCJqc29ucCIsIm9wdGlvbnMiLCJwYXRjaCIsInBvc3QiLCJwdXQiLCJGZSIsImplIiwiQ2UiLCJVZSIsIkxlIiwiU2UiLCJjb29raWVOYW1lIiwiZG9jIiwibmUiLCJsYXN0Q29va2llU3RyaW5nIiwibGFzdFRva2VuIiwicGFyc2VDb3VudCIsImdldFRva2VuIiwiY29va2llIiwiYWUiLCJFZSIsIkJlIiwiaWUiLCJocmVmIiwib3JpZ2luIiwiVVJMIiwiWSIsIkludGVyY2VwdG9ycyIsIkxlZ2FjeUludGVyY2VwdG9ycyIsIkN1c3RvbVhzcmZDb25maWd1cmF0aW9uIiwiTm9Yc3JmUHJvdGVjdGlvbiIsIkpzb25wU3VwcG9ydCIsIlJlcXVlc3RzTWFkZVZpYVBhcmVudCIsIkZldGNoIiwiemUiLCLJtWtpbmQiLCLJtXByb3ZpZGVycyIsIlhlIiwicHJvdmlkZSIsInVzZUV4aXN0aW5nIiwidXNlRmFjdG9yeSIsInVzZVZhbHVlIiwibXVsdGkiLCJyZSIsIkplIiwiSXIiXSwic291cmNlcyI6WyJub2RlX21vZHVsZXMvQGFuZ3VsYXIvY29tbW9uL2Zlc20yMDIyL19tb2R1bGUtY2h1bmsubWpzIiwic3JjL2FwcC9jb3JlL3Rva2Vucy9hcGktYmFzZS11cmwudG9rZW4udHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZSBBbmd1bGFyIHYyMS4yLjRcbiAqIChjKSAyMDEwLTIwMjYgR29vZ2xlIExMQy4gaHR0cHM6Ly9hbmd1bGFyLmRldi9cbiAqIExpY2Vuc2U6IE1JVFxuICovXG5cbmltcG9ydCAqIGFzIGkwIGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgybVSdW50aW1lRXJyb3IgYXMgX1J1bnRpbWVFcnJvciwgSW5qZWN0aW9uVG9rZW4sIGluamVjdCwgTmdab25lLCBEZXN0cm95UmVmLCBJbmplY3RhYmxlLCDJtWZvcm1hdFJ1bnRpbWVFcnJvciBhcyBfZm9ybWF0UnVudGltZUVycm9yLCDJtVRyYWNpbmdTZXJ2aWNlIGFzIF9UcmFjaW5nU2VydmljZSwgcnVuSW5JbmplY3Rpb25Db250ZXh0LCBQZW5kaW5nVGFza3MsIMm1Q29uc29sZSBhcyBfQ29uc29sZSwgRE9DVU1FTlQsIEluamVjdCwgRW52aXJvbm1lbnRJbmplY3RvciwgbWFrZUVudmlyb25tZW50UHJvdmlkZXJzLCBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgc3dpdGNoTWFwLCBmaW5hbGl6ZSwgY29uY2F0TWFwLCBmaWx0ZXIsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IE9ic2VydmFibGUsIGZyb20sIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBYaHJGYWN0b3J5LCBwYXJzZUNvb2tpZVZhbHVlIH0gZnJvbSAnLi9feGhyLWNodW5rLm1qcyc7XG5pbXBvcnQgeyBQbGF0Zm9ybUxvY2F0aW9uIH0gZnJvbSAnLi9fcGxhdGZvcm1fbG9jYXRpb24tY2h1bmsubWpzJztcbmNsYXNzIEh0dHBIZWFkZXJzIHtcbiAgaGVhZGVycztcbiAgbm9ybWFsaXplZE5hbWVzID0gLyojX19QVVJFX18qL25ldyBNYXAoKTtcbiAgbGF6eUluaXQ7XG4gIGxhenlVcGRhdGUgPSBudWxsO1xuICBjb25zdHJ1Y3RvcihoZWFkZXJzKSB7XG4gICAgaWYgKCFoZWFkZXJzKSB7XG4gICAgICB0aGlzLmhlYWRlcnMgPSBuZXcgTWFwKCk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgaGVhZGVycyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRoaXMubGF6eUluaXQgPSAoKSA9PiB7XG4gICAgICAgIHRoaXMuaGVhZGVycyA9IG5ldyBNYXAoKTtcbiAgICAgICAgaGVhZGVycy5zcGxpdCgnXFxuJykuZm9yRWFjaChsaW5lID0+IHtcbiAgICAgICAgICBjb25zdCBpbmRleCA9IGxpbmUuaW5kZXhPZignOicpO1xuICAgICAgICAgIGlmIChpbmRleCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IG5hbWUgPSBsaW5lLnNsaWNlKDAsIGluZGV4KTtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gbGluZS5zbGljZShpbmRleCArIDEpLnRyaW0oKTtcbiAgICAgICAgICAgIHRoaXMuYWRkSGVhZGVyRW50cnkobmFtZSwgdmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIEhlYWRlcnMgIT09ICd1bmRlZmluZWQnICYmIGhlYWRlcnMgaW5zdGFuY2VvZiBIZWFkZXJzKSB7XG4gICAgICB0aGlzLmhlYWRlcnMgPSBuZXcgTWFwKCk7XG4gICAgICBoZWFkZXJzLmZvckVhY2goKHZhbHVlLCBuYW1lKSA9PiB7XG4gICAgICAgIHRoaXMuYWRkSGVhZGVyRW50cnkobmFtZSwgdmFsdWUpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubGF6eUluaXQgPSAoKSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgbmdEZXZNb2RlID09PSAndW5kZWZpbmVkJyB8fCBuZ0Rldk1vZGUpIHtcbiAgICAgICAgICBhc3NlcnRWYWxpZEhlYWRlcnMoaGVhZGVycyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5oZWFkZXJzID0gbmV3IE1hcCgpO1xuICAgICAgICBPYmplY3QuZW50cmllcyhoZWFkZXJzKS5mb3JFYWNoKChbbmFtZSwgdmFsdWVzXSkgPT4ge1xuICAgICAgICAgIHRoaXMuc2V0SGVhZGVyRW50cmllcyhuYW1lLCB2YWx1ZXMpO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgfVxuICB9XG4gIGhhcyhuYW1lKSB7XG4gICAgdGhpcy5pbml0KCk7XG4gICAgcmV0dXJuIHRoaXMuaGVhZGVycy5oYXMobmFtZS50b0xvd2VyQ2FzZSgpKTtcbiAgfVxuICBnZXQobmFtZSkge1xuICAgIHRoaXMuaW5pdCgpO1xuICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMuaGVhZGVycy5nZXQobmFtZS50b0xvd2VyQ2FzZSgpKTtcbiAgICByZXR1cm4gdmFsdWVzICYmIHZhbHVlcy5sZW5ndGggPiAwID8gdmFsdWVzWzBdIDogbnVsbDtcbiAgfVxuICBrZXlzKCkge1xuICAgIHRoaXMuaW5pdCgpO1xuICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMubm9ybWFsaXplZE5hbWVzLnZhbHVlcygpKTtcbiAgfVxuICBnZXRBbGwobmFtZSkge1xuICAgIHRoaXMuaW5pdCgpO1xuICAgIHJldHVybiB0aGlzLmhlYWRlcnMuZ2V0KG5hbWUudG9Mb3dlckNhc2UoKSkgfHwgbnVsbDtcbiAgfVxuICBhcHBlbmQobmFtZSwgdmFsdWUpIHtcbiAgICByZXR1cm4gdGhpcy5jbG9uZSh7XG4gICAgICBuYW1lLFxuICAgICAgdmFsdWUsXG4gICAgICBvcDogJ2EnXG4gICAgfSk7XG4gIH1cbiAgc2V0KG5hbWUsIHZhbHVlKSB7XG4gICAgcmV0dXJuIHRoaXMuY2xvbmUoe1xuICAgICAgbmFtZSxcbiAgICAgIHZhbHVlLFxuICAgICAgb3A6ICdzJ1xuICAgIH0pO1xuICB9XG4gIGRlbGV0ZShuYW1lLCB2YWx1ZSkge1xuICAgIHJldHVybiB0aGlzLmNsb25lKHtcbiAgICAgIG5hbWUsXG4gICAgICB2YWx1ZSxcbiAgICAgIG9wOiAnZCdcbiAgICB9KTtcbiAgfVxuICBtYXliZVNldE5vcm1hbGl6ZWROYW1lKG5hbWUsIGxjTmFtZSkge1xuICAgIGlmICghdGhpcy5ub3JtYWxpemVkTmFtZXMuaGFzKGxjTmFtZSkpIHtcbiAgICAgIHRoaXMubm9ybWFsaXplZE5hbWVzLnNldChsY05hbWUsIG5hbWUpO1xuICAgIH1cbiAgfVxuICBpbml0KCkge1xuICAgIGlmICghIXRoaXMubGF6eUluaXQpIHtcbiAgICAgIGlmICh0aGlzLmxhenlJbml0IGluc3RhbmNlb2YgSHR0cEhlYWRlcnMpIHtcbiAgICAgICAgdGhpcy5jb3B5RnJvbSh0aGlzLmxhenlJbml0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubGF6eUluaXQoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMubGF6eUluaXQgPSBudWxsO1xuICAgICAgaWYgKCEhdGhpcy5sYXp5VXBkYXRlKSB7XG4gICAgICAgIHRoaXMubGF6eVVwZGF0ZS5mb3JFYWNoKHVwZGF0ZSA9PiB0aGlzLmFwcGx5VXBkYXRlKHVwZGF0ZSkpO1xuICAgICAgICB0aGlzLmxhenlVcGRhdGUgPSBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBjb3B5RnJvbShvdGhlcikge1xuICAgIG90aGVyLmluaXQoKTtcbiAgICBBcnJheS5mcm9tKG90aGVyLmhlYWRlcnMua2V5cygpKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICB0aGlzLmhlYWRlcnMuc2V0KGtleSwgb3RoZXIuaGVhZGVycy5nZXQoa2V5KSk7XG4gICAgICB0aGlzLm5vcm1hbGl6ZWROYW1lcy5zZXQoa2V5LCBvdGhlci5ub3JtYWxpemVkTmFtZXMuZ2V0KGtleSkpO1xuICAgIH0pO1xuICB9XG4gIGNsb25lKHVwZGF0ZSkge1xuICAgIGNvbnN0IGNsb25lID0gbmV3IEh0dHBIZWFkZXJzKCk7XG4gICAgY2xvbmUubGF6eUluaXQgPSAhIXRoaXMubGF6eUluaXQgJiYgdGhpcy5sYXp5SW5pdCBpbnN0YW5jZW9mIEh0dHBIZWFkZXJzID8gdGhpcy5sYXp5SW5pdCA6IHRoaXM7XG4gICAgY2xvbmUubGF6eVVwZGF0ZSA9ICh0aGlzLmxhenlVcGRhdGUgfHwgW10pLmNvbmNhdChbdXBkYXRlXSk7XG4gICAgcmV0dXJuIGNsb25lO1xuICB9XG4gIGFwcGx5VXBkYXRlKHVwZGF0ZSkge1xuICAgIGNvbnN0IGtleSA9IHVwZGF0ZS5uYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgc3dpdGNoICh1cGRhdGUub3ApIHtcbiAgICAgIGNhc2UgJ2EnOlxuICAgICAgY2FzZSAncyc6XG4gICAgICAgIGxldCB2YWx1ZSA9IHVwZGF0ZS52YWx1ZTtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICB2YWx1ZSA9IFt2YWx1ZV07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm1heWJlU2V0Tm9ybWFsaXplZE5hbWUodXBkYXRlLm5hbWUsIGtleSk7XG4gICAgICAgIGNvbnN0IGJhc2UgPSAodXBkYXRlLm9wID09PSAnYScgPyB0aGlzLmhlYWRlcnMuZ2V0KGtleSkgOiB1bmRlZmluZWQpIHx8IFtdO1xuICAgICAgICBiYXNlLnB1c2goLi4udmFsdWUpO1xuICAgICAgICB0aGlzLmhlYWRlcnMuc2V0KGtleSwgYmFzZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZCc6XG4gICAgICAgIGNvbnN0IHRvRGVsZXRlID0gdXBkYXRlLnZhbHVlO1xuICAgICAgICBpZiAoIXRvRGVsZXRlKSB7XG4gICAgICAgICAgdGhpcy5oZWFkZXJzLmRlbGV0ZShrZXkpO1xuICAgICAgICAgIHRoaXMubm9ybWFsaXplZE5hbWVzLmRlbGV0ZShrZXkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxldCBleGlzdGluZyA9IHRoaXMuaGVhZGVycy5nZXQoa2V5KTtcbiAgICAgICAgICBpZiAoIWV4aXN0aW5nKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGV4aXN0aW5nID0gZXhpc3RpbmcuZmlsdGVyKHZhbHVlID0+IHRvRGVsZXRlLmluZGV4T2YodmFsdWUpID09PSAtMSk7XG4gICAgICAgICAgaWYgKGV4aXN0aW5nLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5oZWFkZXJzLmRlbGV0ZShrZXkpO1xuICAgICAgICAgICAgdGhpcy5ub3JtYWxpemVkTmFtZXMuZGVsZXRlKGtleSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaGVhZGVycy5zZXQoa2V5LCBleGlzdGluZyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICBhZGRIZWFkZXJFbnRyeShuYW1lLCB2YWx1ZSkge1xuICAgIGNvbnN0IGtleSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICB0aGlzLm1heWJlU2V0Tm9ybWFsaXplZE5hbWUobmFtZSwga2V5KTtcbiAgICBpZiAodGhpcy5oZWFkZXJzLmhhcyhrZXkpKSB7XG4gICAgICB0aGlzLmhlYWRlcnMuZ2V0KGtleSkucHVzaCh2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaGVhZGVycy5zZXQoa2V5LCBbdmFsdWVdKTtcbiAgICB9XG4gIH1cbiAgc2V0SGVhZGVyRW50cmllcyhuYW1lLCB2YWx1ZXMpIHtcbiAgICBjb25zdCBoZWFkZXJWYWx1ZXMgPSAoQXJyYXkuaXNBcnJheSh2YWx1ZXMpID8gdmFsdWVzIDogW3ZhbHVlc10pLm1hcCh2YWx1ZSA9PiB2YWx1ZS50b1N0cmluZygpKTtcbiAgICBjb25zdCBrZXkgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgdGhpcy5oZWFkZXJzLnNldChrZXksIGhlYWRlclZhbHVlcyk7XG4gICAgdGhpcy5tYXliZVNldE5vcm1hbGl6ZWROYW1lKG5hbWUsIGtleSk7XG4gIH1cbiAgZm9yRWFjaChmbikge1xuICAgIHRoaXMuaW5pdCgpO1xuICAgIEFycmF5LmZyb20odGhpcy5ub3JtYWxpemVkTmFtZXMua2V5cygpKS5mb3JFYWNoKGtleSA9PiBmbih0aGlzLm5vcm1hbGl6ZWROYW1lcy5nZXQoa2V5KSwgdGhpcy5oZWFkZXJzLmdldChrZXkpKSk7XG4gIH1cbn1cbmZ1bmN0aW9uIGFzc2VydFZhbGlkSGVhZGVycyhoZWFkZXJzKSB7XG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGhlYWRlcnMpKSB7XG4gICAgaWYgKCEodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5leHBlY3RlZCB2YWx1ZSBvZiB0aGUgXFxgJHtrZXl9XFxgIGhlYWRlciBwcm92aWRlZC4gYCArIGBFeHBlY3RpbmcgZWl0aGVyIGEgc3RyaW5nLCBhIG51bWJlciBvciBhbiBhcnJheSwgYnV0IGdvdDogXFxgJHt2YWx1ZX1cXGAuYCk7XG4gICAgfVxuICB9XG59XG5jbGFzcyBIdHRwQ29udGV4dFRva2VuIHtcbiAgZGVmYXVsdFZhbHVlO1xuICBjb25zdHJ1Y3RvcihkZWZhdWx0VmFsdWUpIHtcbiAgICB0aGlzLmRlZmF1bHRWYWx1ZSA9IGRlZmF1bHRWYWx1ZTtcbiAgfVxufVxuY2xhc3MgSHR0cENvbnRleHQge1xuICBtYXAgPSAvKiNfX1BVUkVfXyovbmV3IE1hcCgpO1xuICBzZXQodG9rZW4sIHZhbHVlKSB7XG4gICAgdGhpcy5tYXAuc2V0KHRva2VuLCB2YWx1ZSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgZ2V0KHRva2VuKSB7XG4gICAgaWYgKCF0aGlzLm1hcC5oYXModG9rZW4pKSB7XG4gICAgICB0aGlzLm1hcC5zZXQodG9rZW4sIHRva2VuLmRlZmF1bHRWYWx1ZSgpKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMubWFwLmdldCh0b2tlbik7XG4gIH1cbiAgZGVsZXRlKHRva2VuKSB7XG4gICAgdGhpcy5tYXAuZGVsZXRlKHRva2VuKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICBoYXModG9rZW4pIHtcbiAgICByZXR1cm4gdGhpcy5tYXAuaGFzKHRva2VuKTtcbiAgfVxuICBrZXlzKCkge1xuICAgIHJldHVybiB0aGlzLm1hcC5rZXlzKCk7XG4gIH1cbn1cbmNsYXNzIEh0dHBVcmxFbmNvZGluZ0NvZGVjIHtcbiAgZW5jb2RlS2V5KGtleSkge1xuICAgIHJldHVybiBzdGFuZGFyZEVuY29kaW5nKGtleSk7XG4gIH1cbiAgZW5jb2RlVmFsdWUodmFsdWUpIHtcbiAgICByZXR1cm4gc3RhbmRhcmRFbmNvZGluZyh2YWx1ZSk7XG4gIH1cbiAgZGVjb2RlS2V5KGtleSkge1xuICAgIHJldHVybiBkZWNvZGVVUklDb21wb25lbnQoa2V5KTtcbiAgfVxuICBkZWNvZGVWYWx1ZSh2YWx1ZSkge1xuICAgIHJldHVybiBkZWNvZGVVUklDb21wb25lbnQodmFsdWUpO1xuICB9XG59XG5mdW5jdGlvbiBwYXJhbVBhcnNlcihyYXdQYXJhbXMsIGNvZGVjKSB7XG4gIGNvbnN0IG1hcCA9IG5ldyBNYXAoKTtcbiAgaWYgKHJhd1BhcmFtcy5sZW5ndGggPiAwKSB7XG4gICAgY29uc3QgcGFyYW1zID0gcmF3UGFyYW1zLnJlcGxhY2UoL15cXD8vLCAnJykuc3BsaXQoJyYnKTtcbiAgICBwYXJhbXMuZm9yRWFjaChwYXJhbSA9PiB7XG4gICAgICBjb25zdCBlcUlkeCA9IHBhcmFtLmluZGV4T2YoJz0nKTtcbiAgICAgIGNvbnN0IFtrZXksIHZhbF0gPSBlcUlkeCA9PSAtMSA/IFtjb2RlYy5kZWNvZGVLZXkocGFyYW0pLCAnJ10gOiBbY29kZWMuZGVjb2RlS2V5KHBhcmFtLnNsaWNlKDAsIGVxSWR4KSksIGNvZGVjLmRlY29kZVZhbHVlKHBhcmFtLnNsaWNlKGVxSWR4ICsgMSkpXTtcbiAgICAgIGNvbnN0IGxpc3QgPSBtYXAuZ2V0KGtleSkgfHwgW107XG4gICAgICBsaXN0LnB1c2godmFsKTtcbiAgICAgIG1hcC5zZXQoa2V5LCBsaXN0KTtcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gbWFwO1xufVxuY29uc3QgU1RBTkRBUkRfRU5DT0RJTkdfUkVHRVggPSAvJShcXGRbYS1mMC05XSkvZ2k7XG5jb25zdCBTVEFOREFSRF9FTkNPRElOR19SRVBMQUNFTUVOVFMgPSB7XG4gICc0MCc6ICdAJyxcbiAgJzNBJzogJzonLFxuICAnMjQnOiAnJCcsXG4gICcyQyc6ICcsJyxcbiAgJzNCJzogJzsnLFxuICAnM0QnOiAnPScsXG4gICczRic6ICc/JyxcbiAgJzJGJzogJy8nXG59O1xuZnVuY3Rpb24gc3RhbmRhcmRFbmNvZGluZyh2KSB7XG4gIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQodikucmVwbGFjZShTVEFOREFSRF9FTkNPRElOR19SRUdFWCwgKHMsIHQpID0+IFNUQU5EQVJEX0VOQ09ESU5HX1JFUExBQ0VNRU5UU1t0XSA/PyBzKTtcbn1cbmZ1bmN0aW9uIHZhbHVlVG9TdHJpbmcodmFsdWUpIHtcbiAgcmV0dXJuIGAke3ZhbHVlfWA7XG59XG5jbGFzcyBIdHRwUGFyYW1zIHtcbiAgbWFwO1xuICBlbmNvZGVyO1xuICB1cGRhdGVzID0gbnVsbDtcbiAgY2xvbmVGcm9tID0gbnVsbDtcbiAgY29uc3RydWN0b3Iob3B0aW9ucyA9IHt9KSB7XG4gICAgdGhpcy5lbmNvZGVyID0gb3B0aW9ucy5lbmNvZGVyIHx8IG5ldyBIdHRwVXJsRW5jb2RpbmdDb2RlYygpO1xuICAgIGlmIChvcHRpb25zLmZyb21TdHJpbmcpIHtcbiAgICAgIGlmIChvcHRpb25zLmZyb21PYmplY3QpIHtcbiAgICAgICAgdGhyb3cgbmV3IF9SdW50aW1lRXJyb3IoMjgwNSwgbmdEZXZNb2RlICYmICdDYW5ub3Qgc3BlY2lmeSBib3RoIGZyb21TdHJpbmcgYW5kIGZyb21PYmplY3QuJyk7XG4gICAgICB9XG4gICAgICB0aGlzLm1hcCA9IHBhcmFtUGFyc2VyKG9wdGlvbnMuZnJvbVN0cmluZywgdGhpcy5lbmNvZGVyKTtcbiAgICB9IGVsc2UgaWYgKCEhb3B0aW9ucy5mcm9tT2JqZWN0KSB7XG4gICAgICB0aGlzLm1hcCA9IG5ldyBNYXAoKTtcbiAgICAgIE9iamVjdC5rZXlzKG9wdGlvbnMuZnJvbU9iamVjdCkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IG9wdGlvbnMuZnJvbU9iamVjdFtrZXldO1xuICAgICAgICBjb25zdCB2YWx1ZXMgPSBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlLm1hcCh2YWx1ZVRvU3RyaW5nKSA6IFt2YWx1ZVRvU3RyaW5nKHZhbHVlKV07XG4gICAgICAgIHRoaXMubWFwLnNldChrZXksIHZhbHVlcyk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5tYXAgPSBudWxsO1xuICAgIH1cbiAgfVxuICBoYXMocGFyYW0pIHtcbiAgICB0aGlzLmluaXQoKTtcbiAgICByZXR1cm4gdGhpcy5tYXAuaGFzKHBhcmFtKTtcbiAgfVxuICBnZXQocGFyYW0pIHtcbiAgICB0aGlzLmluaXQoKTtcbiAgICBjb25zdCByZXMgPSB0aGlzLm1hcC5nZXQocGFyYW0pO1xuICAgIHJldHVybiAhIXJlcyA/IHJlc1swXSA6IG51bGw7XG4gIH1cbiAgZ2V0QWxsKHBhcmFtKSB7XG4gICAgdGhpcy5pbml0KCk7XG4gICAgcmV0dXJuIHRoaXMubWFwLmdldChwYXJhbSkgfHwgbnVsbDtcbiAgfVxuICBrZXlzKCkge1xuICAgIHRoaXMuaW5pdCgpO1xuICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMubWFwLmtleXMoKSk7XG4gIH1cbiAgYXBwZW5kKHBhcmFtLCB2YWx1ZSkge1xuICAgIHJldHVybiB0aGlzLmNsb25lKHtcbiAgICAgIHBhcmFtLFxuICAgICAgdmFsdWUsXG4gICAgICBvcDogJ2EnXG4gICAgfSk7XG4gIH1cbiAgYXBwZW5kQWxsKHBhcmFtcykge1xuICAgIGNvbnN0IHVwZGF0ZXMgPSBbXTtcbiAgICBPYmplY3Qua2V5cyhwYXJhbXMpLmZvckVhY2gocGFyYW0gPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSBwYXJhbXNbcGFyYW1dO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHZhbHVlLmZvckVhY2goX3ZhbHVlID0+IHtcbiAgICAgICAgICB1cGRhdGVzLnB1c2goe1xuICAgICAgICAgICAgcGFyYW0sXG4gICAgICAgICAgICB2YWx1ZTogX3ZhbHVlLFxuICAgICAgICAgICAgb3A6ICdhJ1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHVwZGF0ZXMucHVzaCh7XG4gICAgICAgICAgcGFyYW0sXG4gICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgIG9wOiAnYSdcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuY2xvbmUodXBkYXRlcyk7XG4gIH1cbiAgc2V0KHBhcmFtLCB2YWx1ZSkge1xuICAgIHJldHVybiB0aGlzLmNsb25lKHtcbiAgICAgIHBhcmFtLFxuICAgICAgdmFsdWUsXG4gICAgICBvcDogJ3MnXG4gICAgfSk7XG4gIH1cbiAgZGVsZXRlKHBhcmFtLCB2YWx1ZSkge1xuICAgIHJldHVybiB0aGlzLmNsb25lKHtcbiAgICAgIHBhcmFtLFxuICAgICAgdmFsdWUsXG4gICAgICBvcDogJ2QnXG4gICAgfSk7XG4gIH1cbiAgdG9TdHJpbmcoKSB7XG4gICAgdGhpcy5pbml0KCk7XG4gICAgcmV0dXJuIHRoaXMua2V5cygpLm1hcChrZXkgPT4ge1xuICAgICAgY29uc3QgZUtleSA9IHRoaXMuZW5jb2Rlci5lbmNvZGVLZXkoa2V5KTtcbiAgICAgIHJldHVybiB0aGlzLm1hcC5nZXQoa2V5KS5tYXAodmFsdWUgPT4gZUtleSArICc9JyArIHRoaXMuZW5jb2Rlci5lbmNvZGVWYWx1ZSh2YWx1ZSkpLmpvaW4oJyYnKTtcbiAgICB9KS5maWx0ZXIocGFyYW0gPT4gcGFyYW0gIT09ICcnKS5qb2luKCcmJyk7XG4gIH1cbiAgY2xvbmUodXBkYXRlKSB7XG4gICAgY29uc3QgY2xvbmUgPSBuZXcgSHR0cFBhcmFtcyh7XG4gICAgICBlbmNvZGVyOiB0aGlzLmVuY29kZXJcbiAgICB9KTtcbiAgICBjbG9uZS5jbG9uZUZyb20gPSB0aGlzLmNsb25lRnJvbSB8fCB0aGlzO1xuICAgIGNsb25lLnVwZGF0ZXMgPSAodGhpcy51cGRhdGVzIHx8IFtdKS5jb25jYXQodXBkYXRlKTtcbiAgICByZXR1cm4gY2xvbmU7XG4gIH1cbiAgaW5pdCgpIHtcbiAgICBpZiAodGhpcy5tYXAgPT09IG51bGwpIHtcbiAgICAgIHRoaXMubWFwID0gbmV3IE1hcCgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5jbG9uZUZyb20gIT09IG51bGwpIHtcbiAgICAgIHRoaXMuY2xvbmVGcm9tLmluaXQoKTtcbiAgICAgIHRoaXMuY2xvbmVGcm9tLmtleXMoKS5mb3JFYWNoKGtleSA9PiB0aGlzLm1hcC5zZXQoa2V5LCB0aGlzLmNsb25lRnJvbS5tYXAuZ2V0KGtleSkpKTtcbiAgICAgIHRoaXMudXBkYXRlcy5mb3JFYWNoKHVwZGF0ZSA9PiB7XG4gICAgICAgIHN3aXRjaCAodXBkYXRlLm9wKSB7XG4gICAgICAgICAgY2FzZSAnYSc6XG4gICAgICAgICAgY2FzZSAncyc6XG4gICAgICAgICAgICBjb25zdCBiYXNlID0gKHVwZGF0ZS5vcCA9PT0gJ2EnID8gdGhpcy5tYXAuZ2V0KHVwZGF0ZS5wYXJhbSkgOiB1bmRlZmluZWQpIHx8IFtdO1xuICAgICAgICAgICAgYmFzZS5wdXNoKHZhbHVlVG9TdHJpbmcodXBkYXRlLnZhbHVlKSk7XG4gICAgICAgICAgICB0aGlzLm1hcC5zZXQodXBkYXRlLnBhcmFtLCBiYXNlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ2QnOlxuICAgICAgICAgICAgaWYgKHVwZGF0ZS52YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIGxldCBiYXNlID0gdGhpcy5tYXAuZ2V0KHVwZGF0ZS5wYXJhbSkgfHwgW107XG4gICAgICAgICAgICAgIGNvbnN0IGlkeCA9IGJhc2UuaW5kZXhPZih2YWx1ZVRvU3RyaW5nKHVwZGF0ZS52YWx1ZSkpO1xuICAgICAgICAgICAgICBpZiAoaWR4ICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIGJhc2Uuc3BsaWNlKGlkeCwgMSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKGJhc2UubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMubWFwLnNldCh1cGRhdGUucGFyYW0sIGJhc2UpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMubWFwLmRlbGV0ZSh1cGRhdGUucGFyYW0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLm1hcC5kZWxldGUodXBkYXRlLnBhcmFtKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgdGhpcy5jbG9uZUZyb20gPSB0aGlzLnVwZGF0ZXMgPSBudWxsO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gbWlnaHRIYXZlQm9keShtZXRob2QpIHtcbiAgc3dpdGNoIChtZXRob2QpIHtcbiAgICBjYXNlICdERUxFVEUnOlxuICAgIGNhc2UgJ0dFVCc6XG4gICAgY2FzZSAnSEVBRCc6XG4gICAgY2FzZSAnT1BUSU9OUyc6XG4gICAgY2FzZSAnSlNPTlAnOlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuZnVuY3Rpb24gaXNBcnJheUJ1ZmZlcih2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIEFycmF5QnVmZmVyICE9PSAndW5kZWZpbmVkJyAmJiB2YWx1ZSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyO1xufVxuZnVuY3Rpb24gaXNCbG9iKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgQmxvYiAhPT0gJ3VuZGVmaW5lZCcgJiYgdmFsdWUgaW5zdGFuY2VvZiBCbG9iO1xufVxuZnVuY3Rpb24gaXNGb3JtRGF0YSh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIEZvcm1EYXRhICE9PSAndW5kZWZpbmVkJyAmJiB2YWx1ZSBpbnN0YW5jZW9mIEZvcm1EYXRhO1xufVxuZnVuY3Rpb24gaXNVcmxTZWFyY2hQYXJhbXModmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiBVUkxTZWFyY2hQYXJhbXMgIT09ICd1bmRlZmluZWQnICYmIHZhbHVlIGluc3RhbmNlb2YgVVJMU2VhcmNoUGFyYW1zO1xufVxuY29uc3QgQ09OVEVOVF9UWVBFX0hFQURFUiA9ICdDb250ZW50LVR5cGUnO1xuY29uc3QgQUNDRVBUX0hFQURFUiA9ICdBY2NlcHQnO1xuY29uc3QgVEVYVF9DT05URU5UX1RZUEUgPSAndGV4dC9wbGFpbic7XG5jb25zdCBKU09OX0NPTlRFTlRfVFlQRSA9ICdhcHBsaWNhdGlvbi9qc29uJztcbmNvbnN0IEFDQ0VQVF9IRUFERVJfVkFMVUUgPSBgJHtKU09OX0NPTlRFTlRfVFlQRX0sICR7VEVYVF9DT05URU5UX1RZUEV9LCAqLypgO1xuY2xhc3MgSHR0cFJlcXVlc3Qge1xuICB1cmw7XG4gIGJvZHkgPSBudWxsO1xuICBoZWFkZXJzO1xuICBjb250ZXh0O1xuICByZXBvcnRQcm9ncmVzcyA9IGZhbHNlO1xuICB3aXRoQ3JlZGVudGlhbHMgPSBmYWxzZTtcbiAgY3JlZGVudGlhbHM7XG4gIGtlZXBhbGl2ZSA9IGZhbHNlO1xuICBjYWNoZTtcbiAgcHJpb3JpdHk7XG4gIG1vZGU7XG4gIHJlZGlyZWN0O1xuICByZWZlcnJlcjtcbiAgaW50ZWdyaXR5O1xuICByZWZlcnJlclBvbGljeTtcbiAgcmVzcG9uc2VUeXBlID0gJ2pzb24nO1xuICBtZXRob2Q7XG4gIHBhcmFtcztcbiAgdXJsV2l0aFBhcmFtcztcbiAgdHJhbnNmZXJDYWNoZTtcbiAgdGltZW91dDtcbiAgY29uc3RydWN0b3IobWV0aG9kLCB1cmwsIHRoaXJkLCBmb3VydGgpIHtcbiAgICB0aGlzLnVybCA9IHVybDtcbiAgICB0aGlzLm1ldGhvZCA9IG1ldGhvZC50b1VwcGVyQ2FzZSgpO1xuICAgIGxldCBvcHRpb25zO1xuICAgIGlmIChtaWdodEhhdmVCb2R5KHRoaXMubWV0aG9kKSB8fCAhIWZvdXJ0aCkge1xuICAgICAgdGhpcy5ib2R5ID0gdGhpcmQgIT09IHVuZGVmaW5lZCA/IHRoaXJkIDogbnVsbDtcbiAgICAgIG9wdGlvbnMgPSBmb3VydGg7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9wdGlvbnMgPSB0aGlyZDtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgIHRoaXMucmVwb3J0UHJvZ3Jlc3MgPSAhIW9wdGlvbnMucmVwb3J0UHJvZ3Jlc3M7XG4gICAgICB0aGlzLndpdGhDcmVkZW50aWFscyA9ICEhb3B0aW9ucy53aXRoQ3JlZGVudGlhbHM7XG4gICAgICB0aGlzLmtlZXBhbGl2ZSA9ICEhb3B0aW9ucy5rZWVwYWxpdmU7XG4gICAgICBpZiAoISFvcHRpb25zLnJlc3BvbnNlVHlwZSkge1xuICAgICAgICB0aGlzLnJlc3BvbnNlVHlwZSA9IG9wdGlvbnMucmVzcG9uc2VUeXBlO1xuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbnMuaGVhZGVycykge1xuICAgICAgICB0aGlzLmhlYWRlcnMgPSBvcHRpb25zLmhlYWRlcnM7XG4gICAgICB9XG4gICAgICBpZiAob3B0aW9ucy5jb250ZXh0KSB7XG4gICAgICAgIHRoaXMuY29udGV4dCA9IG9wdGlvbnMuY29udGV4dDtcbiAgICAgIH1cbiAgICAgIGlmIChvcHRpb25zLnBhcmFtcykge1xuICAgICAgICB0aGlzLnBhcmFtcyA9IG9wdGlvbnMucGFyYW1zO1xuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbnMucHJpb3JpdHkpIHtcbiAgICAgICAgdGhpcy5wcmlvcml0eSA9IG9wdGlvbnMucHJpb3JpdHk7XG4gICAgICB9XG4gICAgICBpZiAob3B0aW9ucy5jYWNoZSkge1xuICAgICAgICB0aGlzLmNhY2hlID0gb3B0aW9ucy5jYWNoZTtcbiAgICAgIH1cbiAgICAgIGlmIChvcHRpb25zLmNyZWRlbnRpYWxzKSB7XG4gICAgICAgIHRoaXMuY3JlZGVudGlhbHMgPSBvcHRpb25zLmNyZWRlbnRpYWxzO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLnRpbWVvdXQgPT09ICdudW1iZXInKSB7XG4gICAgICAgIGlmIChvcHRpb25zLnRpbWVvdXQgPCAxIHx8ICFOdW1iZXIuaXNJbnRlZ2VyKG9wdGlvbnMudGltZW91dCkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgX1J1bnRpbWVFcnJvcigyODIyLCBuZ0Rldk1vZGUgPyAnYHRpbWVvdXRgIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyIHZhbHVlJyA6ICcnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRpbWVvdXQgPSBvcHRpb25zLnRpbWVvdXQ7XG4gICAgICB9XG4gICAgICBpZiAob3B0aW9ucy5tb2RlKSB7XG4gICAgICAgIHRoaXMubW9kZSA9IG9wdGlvbnMubW9kZTtcbiAgICAgIH1cbiAgICAgIGlmIChvcHRpb25zLnJlZGlyZWN0KSB7XG4gICAgICAgIHRoaXMucmVkaXJlY3QgPSBvcHRpb25zLnJlZGlyZWN0O1xuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbnMuaW50ZWdyaXR5KSB7XG4gICAgICAgIHRoaXMuaW50ZWdyaXR5ID0gb3B0aW9ucy5pbnRlZ3JpdHk7XG4gICAgICB9XG4gICAgICBpZiAob3B0aW9ucy5yZWZlcnJlcikge1xuICAgICAgICB0aGlzLnJlZmVycmVyID0gb3B0aW9ucy5yZWZlcnJlcjtcbiAgICAgIH1cbiAgICAgIGlmIChvcHRpb25zLnJlZmVycmVyUG9saWN5KSB7XG4gICAgICAgIHRoaXMucmVmZXJyZXJQb2xpY3kgPSBvcHRpb25zLnJlZmVycmVyUG9saWN5O1xuICAgICAgfVxuICAgICAgdGhpcy50cmFuc2ZlckNhY2hlID0gb3B0aW9ucy50cmFuc2ZlckNhY2hlO1xuICAgIH1cbiAgICB0aGlzLmhlYWRlcnMgPz89IG5ldyBIdHRwSGVhZGVycygpO1xuICAgIHRoaXMuY29udGV4dCA/Pz0gbmV3IEh0dHBDb250ZXh0KCk7XG4gICAgaWYgKCF0aGlzLnBhcmFtcykge1xuICAgICAgdGhpcy5wYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xuICAgICAgdGhpcy51cmxXaXRoUGFyYW1zID0gdXJsO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBwYXJhbXMgPSB0aGlzLnBhcmFtcy50b1N0cmluZygpO1xuICAgICAgaWYgKHBhcmFtcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhpcy51cmxXaXRoUGFyYW1zID0gdXJsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgcUlkeCA9IHVybC5pbmRleE9mKCc/Jyk7XG4gICAgICAgIGNvbnN0IHNlcCA9IHFJZHggPT09IC0xID8gJz8nIDogcUlkeCA8IHVybC5sZW5ndGggLSAxID8gJyYnIDogJyc7XG4gICAgICAgIHRoaXMudXJsV2l0aFBhcmFtcyA9IHVybCArIHNlcCArIHBhcmFtcztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgc2VyaWFsaXplQm9keSgpIHtcbiAgICBpZiAodGhpcy5ib2R5ID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB0aGlzLmJvZHkgPT09ICdzdHJpbmcnIHx8IGlzQXJyYXlCdWZmZXIodGhpcy5ib2R5KSB8fCBpc0Jsb2IodGhpcy5ib2R5KSB8fCBpc0Zvcm1EYXRhKHRoaXMuYm9keSkgfHwgaXNVcmxTZWFyY2hQYXJhbXModGhpcy5ib2R5KSkge1xuICAgICAgcmV0dXJuIHRoaXMuYm9keTtcbiAgICB9XG4gICAgaWYgKHRoaXMuYm9keSBpbnN0YW5jZW9mIEh0dHBQYXJhbXMpIHtcbiAgICAgIHJldHVybiB0aGlzLmJvZHkudG9TdHJpbmcoKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB0aGlzLmJvZHkgPT09ICdvYmplY3QnIHx8IHR5cGVvZiB0aGlzLmJvZHkgPT09ICdib29sZWFuJyB8fCBBcnJheS5pc0FycmF5KHRoaXMuYm9keSkpIHtcbiAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh0aGlzLmJvZHkpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5ib2R5LnRvU3RyaW5nKCk7XG4gIH1cbiAgZGV0ZWN0Q29udGVudFR5cGVIZWFkZXIoKSB7XG4gICAgaWYgKHRoaXMuYm9keSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlmIChpc0Zvcm1EYXRhKHRoaXMuYm9keSkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBpZiAoaXNCbG9iKHRoaXMuYm9keSkpIHtcbiAgICAgIHJldHVybiB0aGlzLmJvZHkudHlwZSB8fCBudWxsO1xuICAgIH1cbiAgICBpZiAoaXNBcnJheUJ1ZmZlcih0aGlzLmJvZHkpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB0aGlzLmJvZHkgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gVEVYVF9DT05URU5UX1RZUEU7XG4gICAgfVxuICAgIGlmICh0aGlzLmJvZHkgaW5zdGFuY2VvZiBIdHRwUGFyYW1zKSB7XG4gICAgICByZXR1cm4gJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PVVURi04JztcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB0aGlzLmJvZHkgPT09ICdvYmplY3QnIHx8IHR5cGVvZiB0aGlzLmJvZHkgPT09ICdudW1iZXInIHx8IHR5cGVvZiB0aGlzLmJvZHkgPT09ICdib29sZWFuJykge1xuICAgICAgcmV0dXJuIEpTT05fQ09OVEVOVF9UWVBFO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjbG9uZSh1cGRhdGUgPSB7fSkge1xuICAgIGNvbnN0IG1ldGhvZCA9IHVwZGF0ZS5tZXRob2QgfHwgdGhpcy5tZXRob2Q7XG4gICAgY29uc3QgdXJsID0gdXBkYXRlLnVybCB8fCB0aGlzLnVybDtcbiAgICBjb25zdCByZXNwb25zZVR5cGUgPSB1cGRhdGUucmVzcG9uc2VUeXBlIHx8IHRoaXMucmVzcG9uc2VUeXBlO1xuICAgIGNvbnN0IGtlZXBhbGl2ZSA9IHVwZGF0ZS5rZWVwYWxpdmUgPz8gdGhpcy5rZWVwYWxpdmU7XG4gICAgY29uc3QgcHJpb3JpdHkgPSB1cGRhdGUucHJpb3JpdHkgfHwgdGhpcy5wcmlvcml0eTtcbiAgICBjb25zdCBjYWNoZSA9IHVwZGF0ZS5jYWNoZSB8fCB0aGlzLmNhY2hlO1xuICAgIGNvbnN0IG1vZGUgPSB1cGRhdGUubW9kZSB8fCB0aGlzLm1vZGU7XG4gICAgY29uc3QgcmVkaXJlY3QgPSB1cGRhdGUucmVkaXJlY3QgfHwgdGhpcy5yZWRpcmVjdDtcbiAgICBjb25zdCBjcmVkZW50aWFscyA9IHVwZGF0ZS5jcmVkZW50aWFscyB8fCB0aGlzLmNyZWRlbnRpYWxzO1xuICAgIGNvbnN0IHJlZmVycmVyID0gdXBkYXRlLnJlZmVycmVyIHx8IHRoaXMucmVmZXJyZXI7XG4gICAgY29uc3QgaW50ZWdyaXR5ID0gdXBkYXRlLmludGVncml0eSB8fCB0aGlzLmludGVncml0eTtcbiAgICBjb25zdCByZWZlcnJlclBvbGljeSA9IHVwZGF0ZS5yZWZlcnJlclBvbGljeSB8fCB0aGlzLnJlZmVycmVyUG9saWN5O1xuICAgIGNvbnN0IHRyYW5zZmVyQ2FjaGUgPSB1cGRhdGUudHJhbnNmZXJDYWNoZSA/PyB0aGlzLnRyYW5zZmVyQ2FjaGU7XG4gICAgY29uc3QgdGltZW91dCA9IHVwZGF0ZS50aW1lb3V0ID8/IHRoaXMudGltZW91dDtcbiAgICBjb25zdCBib2R5ID0gdXBkYXRlLmJvZHkgIT09IHVuZGVmaW5lZCA/IHVwZGF0ZS5ib2R5IDogdGhpcy5ib2R5O1xuICAgIGNvbnN0IHdpdGhDcmVkZW50aWFscyA9IHVwZGF0ZS53aXRoQ3JlZGVudGlhbHMgPz8gdGhpcy53aXRoQ3JlZGVudGlhbHM7XG4gICAgY29uc3QgcmVwb3J0UHJvZ3Jlc3MgPSB1cGRhdGUucmVwb3J0UHJvZ3Jlc3MgPz8gdGhpcy5yZXBvcnRQcm9ncmVzcztcbiAgICBsZXQgaGVhZGVycyA9IHVwZGF0ZS5oZWFkZXJzIHx8IHRoaXMuaGVhZGVycztcbiAgICBsZXQgcGFyYW1zID0gdXBkYXRlLnBhcmFtcyB8fCB0aGlzLnBhcmFtcztcbiAgICBjb25zdCBjb250ZXh0ID0gdXBkYXRlLmNvbnRleHQgPz8gdGhpcy5jb250ZXh0O1xuICAgIGlmICh1cGRhdGUuc2V0SGVhZGVycyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBoZWFkZXJzID0gT2JqZWN0LmtleXModXBkYXRlLnNldEhlYWRlcnMpLnJlZHVjZSgoaGVhZGVycywgbmFtZSkgPT4gaGVhZGVycy5zZXQobmFtZSwgdXBkYXRlLnNldEhlYWRlcnNbbmFtZV0pLCBoZWFkZXJzKTtcbiAgICB9XG4gICAgaWYgKHVwZGF0ZS5zZXRQYXJhbXMpIHtcbiAgICAgIHBhcmFtcyA9IE9iamVjdC5rZXlzKHVwZGF0ZS5zZXRQYXJhbXMpLnJlZHVjZSgocGFyYW1zLCBwYXJhbSkgPT4gcGFyYW1zLnNldChwYXJhbSwgdXBkYXRlLnNldFBhcmFtc1twYXJhbV0pLCBwYXJhbXMpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IEh0dHBSZXF1ZXN0KG1ldGhvZCwgdXJsLCBib2R5LCB7XG4gICAgICBwYXJhbXMsXG4gICAgICBoZWFkZXJzLFxuICAgICAgY29udGV4dCxcbiAgICAgIHJlcG9ydFByb2dyZXNzLFxuICAgICAgcmVzcG9uc2VUeXBlLFxuICAgICAgd2l0aENyZWRlbnRpYWxzLFxuICAgICAgdHJhbnNmZXJDYWNoZSxcbiAgICAgIGtlZXBhbGl2ZSxcbiAgICAgIGNhY2hlLFxuICAgICAgcHJpb3JpdHksXG4gICAgICB0aW1lb3V0LFxuICAgICAgbW9kZSxcbiAgICAgIHJlZGlyZWN0LFxuICAgICAgY3JlZGVudGlhbHMsXG4gICAgICByZWZlcnJlcixcbiAgICAgIGludGVncml0eSxcbiAgICAgIHJlZmVycmVyUG9saWN5XG4gICAgfSk7XG4gIH1cbn1cbnZhciBIdHRwRXZlbnRUeXBlID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChIdHRwRXZlbnRUeXBlKSB7XG4gIEh0dHBFdmVudFR5cGVbSHR0cEV2ZW50VHlwZVtcIlNlbnRcIl0gPSAwXSA9IFwiU2VudFwiO1xuICBIdHRwRXZlbnRUeXBlW0h0dHBFdmVudFR5cGVbXCJVcGxvYWRQcm9ncmVzc1wiXSA9IDFdID0gXCJVcGxvYWRQcm9ncmVzc1wiO1xuICBIdHRwRXZlbnRUeXBlW0h0dHBFdmVudFR5cGVbXCJSZXNwb25zZUhlYWRlclwiXSA9IDJdID0gXCJSZXNwb25zZUhlYWRlclwiO1xuICBIdHRwRXZlbnRUeXBlW0h0dHBFdmVudFR5cGVbXCJEb3dubG9hZFByb2dyZXNzXCJdID0gM10gPSBcIkRvd25sb2FkUHJvZ3Jlc3NcIjtcbiAgSHR0cEV2ZW50VHlwZVtIdHRwRXZlbnRUeXBlW1wiUmVzcG9uc2VcIl0gPSA0XSA9IFwiUmVzcG9uc2VcIjtcbiAgSHR0cEV2ZW50VHlwZVtIdHRwRXZlbnRUeXBlW1wiVXNlclwiXSA9IDVdID0gXCJVc2VyXCI7XG4gIHJldHVybiBIdHRwRXZlbnRUeXBlO1xufShIdHRwRXZlbnRUeXBlIHx8IHt9KTtcbmNsYXNzIEh0dHBSZXNwb25zZUJhc2Uge1xuICBoZWFkZXJzO1xuICBzdGF0dXM7XG4gIHN0YXR1c1RleHQ7XG4gIHVybDtcbiAgb2s7XG4gIHR5cGU7XG4gIHJlZGlyZWN0ZWQ7XG4gIHJlc3BvbnNlVHlwZTtcbiAgY29uc3RydWN0b3IoaW5pdCwgZGVmYXVsdFN0YXR1cyA9IDIwMCwgZGVmYXVsdFN0YXR1c1RleHQgPSAnT0snKSB7XG4gICAgdGhpcy5oZWFkZXJzID0gaW5pdC5oZWFkZXJzIHx8IG5ldyBIdHRwSGVhZGVycygpO1xuICAgIHRoaXMuc3RhdHVzID0gaW5pdC5zdGF0dXMgIT09IHVuZGVmaW5lZCA/IGluaXQuc3RhdHVzIDogZGVmYXVsdFN0YXR1cztcbiAgICB0aGlzLnN0YXR1c1RleHQgPSBpbml0LnN0YXR1c1RleHQgfHwgZGVmYXVsdFN0YXR1c1RleHQ7XG4gICAgdGhpcy51cmwgPSBpbml0LnVybCB8fCBudWxsO1xuICAgIHRoaXMucmVkaXJlY3RlZCA9IGluaXQucmVkaXJlY3RlZDtcbiAgICB0aGlzLnJlc3BvbnNlVHlwZSA9IGluaXQucmVzcG9uc2VUeXBlO1xuICAgIHRoaXMub2sgPSB0aGlzLnN0YXR1cyA+PSAyMDAgJiYgdGhpcy5zdGF0dXMgPCAzMDA7XG4gIH1cbn1cbmNsYXNzIEh0dHBIZWFkZXJSZXNwb25zZSBleHRlbmRzIEh0dHBSZXNwb25zZUJhc2Uge1xuICBjb25zdHJ1Y3Rvcihpbml0ID0ge30pIHtcbiAgICBzdXBlcihpbml0KTtcbiAgfVxuICB0eXBlID0gSHR0cEV2ZW50VHlwZS5SZXNwb25zZUhlYWRlcjtcbiAgY2xvbmUodXBkYXRlID0ge30pIHtcbiAgICByZXR1cm4gbmV3IEh0dHBIZWFkZXJSZXNwb25zZSh7XG4gICAgICBoZWFkZXJzOiB1cGRhdGUuaGVhZGVycyB8fCB0aGlzLmhlYWRlcnMsXG4gICAgICBzdGF0dXM6IHVwZGF0ZS5zdGF0dXMgIT09IHVuZGVmaW5lZCA/IHVwZGF0ZS5zdGF0dXMgOiB0aGlzLnN0YXR1cyxcbiAgICAgIHN0YXR1c1RleHQ6IHVwZGF0ZS5zdGF0dXNUZXh0IHx8IHRoaXMuc3RhdHVzVGV4dCxcbiAgICAgIHVybDogdXBkYXRlLnVybCB8fCB0aGlzLnVybCB8fCB1bmRlZmluZWRcbiAgICB9KTtcbiAgfVxufVxuY2xhc3MgSHR0cFJlc3BvbnNlIGV4dGVuZHMgSHR0cFJlc3BvbnNlQmFzZSB7XG4gIGJvZHk7XG4gIGNvbnN0cnVjdG9yKGluaXQgPSB7fSkge1xuICAgIHN1cGVyKGluaXQpO1xuICAgIHRoaXMuYm9keSA9IGluaXQuYm9keSAhPT0gdW5kZWZpbmVkID8gaW5pdC5ib2R5IDogbnVsbDtcbiAgfVxuICB0eXBlID0gSHR0cEV2ZW50VHlwZS5SZXNwb25zZTtcbiAgY2xvbmUodXBkYXRlID0ge30pIHtcbiAgICByZXR1cm4gbmV3IEh0dHBSZXNwb25zZSh7XG4gICAgICBib2R5OiB1cGRhdGUuYm9keSAhPT0gdW5kZWZpbmVkID8gdXBkYXRlLmJvZHkgOiB0aGlzLmJvZHksXG4gICAgICBoZWFkZXJzOiB1cGRhdGUuaGVhZGVycyB8fCB0aGlzLmhlYWRlcnMsXG4gICAgICBzdGF0dXM6IHVwZGF0ZS5zdGF0dXMgIT09IHVuZGVmaW5lZCA/IHVwZGF0ZS5zdGF0dXMgOiB0aGlzLnN0YXR1cyxcbiAgICAgIHN0YXR1c1RleHQ6IHVwZGF0ZS5zdGF0dXNUZXh0IHx8IHRoaXMuc3RhdHVzVGV4dCxcbiAgICAgIHVybDogdXBkYXRlLnVybCB8fCB0aGlzLnVybCB8fCB1bmRlZmluZWQsXG4gICAgICByZWRpcmVjdGVkOiB1cGRhdGUucmVkaXJlY3RlZCA/PyB0aGlzLnJlZGlyZWN0ZWQsXG4gICAgICByZXNwb25zZVR5cGU6IHVwZGF0ZS5yZXNwb25zZVR5cGUgPz8gdGhpcy5yZXNwb25zZVR5cGVcbiAgICB9KTtcbiAgfVxufVxuY2xhc3MgSHR0cEVycm9yUmVzcG9uc2UgZXh0ZW5kcyBIdHRwUmVzcG9uc2VCYXNlIHtcbiAgbmFtZSA9ICdIdHRwRXJyb3JSZXNwb25zZSc7XG4gIG1lc3NhZ2U7XG4gIGVycm9yO1xuICBvayA9IGZhbHNlO1xuICBjb25zdHJ1Y3Rvcihpbml0KSB7XG4gICAgc3VwZXIoaW5pdCwgMCwgJ1Vua25vd24gRXJyb3InKTtcbiAgICBpZiAodGhpcy5zdGF0dXMgPj0gMjAwICYmIHRoaXMuc3RhdHVzIDwgMzAwKSB7XG4gICAgICB0aGlzLm1lc3NhZ2UgPSBgSHR0cCBmYWlsdXJlIGR1cmluZyBwYXJzaW5nIGZvciAke2luaXQudXJsIHx8ICcodW5rbm93biB1cmwpJ31gO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm1lc3NhZ2UgPSBgSHR0cCBmYWlsdXJlIHJlc3BvbnNlIGZvciAke2luaXQudXJsIHx8ICcodW5rbm93biB1cmwpJ306ICR7aW5pdC5zdGF0dXN9ICR7aW5pdC5zdGF0dXNUZXh0fWA7XG4gICAgfVxuICAgIHRoaXMuZXJyb3IgPSBpbml0LmVycm9yIHx8IG51bGw7XG4gIH1cbn1cbmNvbnN0IEhUVFBfU1RBVFVTX0NPREVfT0sgPSAyMDA7XG5jb25zdCBIVFRQX1NUQVRVU19DT0RFX05PX0NPTlRFTlQgPSAyMDQ7XG52YXIgSHR0cFN0YXR1c0NvZGUgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKEh0dHBTdGF0dXNDb2RlKSB7XG4gIEh0dHBTdGF0dXNDb2RlW0h0dHBTdGF0dXNDb2RlW1wiQ29udGludWVcIl0gPSAxMDBdID0gXCJDb250aW51ZVwiO1xuICBIdHRwU3RhdHVzQ29kZVtIdHRwU3RhdHVzQ29kZVtcIlN3aXRjaGluZ1Byb3RvY29sc1wiXSA9IDEwMV0gPSBcIlN3aXRjaGluZ1Byb3RvY29sc1wiO1xuICBIdHRwU3RhdHVzQ29kZVtIdHRwU3RhdHVzQ29kZVtcIlByb2Nlc3NpbmdcIl0gPSAxMDJdID0gXCJQcm9jZXNzaW5nXCI7XG4gIEh0dHBTdGF0dXNDb2RlW0h0dHBTdGF0dXNDb2RlW1wiRWFybHlIaW50c1wiXSA9IDEwM10gPSBcIkVhcmx5SGludHNcIjtcbiAgSHR0cFN0YXR1c0NvZGVbSHR0cFN0YXR1c0NvZGVbXCJPa1wiXSA9IDIwMF0gPSBcIk9rXCI7XG4gIEh0dHBTdGF0dXNDb2RlW0h0dHBTdGF0dXNDb2RlW1wiQ3JlYXRlZFwiXSA9IDIwMV0gPSBcIkNyZWF0ZWRcIjtcbiAgSHR0cFN0YXR1c0NvZGVbSHR0cFN0YXR1c0NvZGVbXCJBY2NlcHRlZFwiXSA9IDIwMl0gPSBcIkFjY2VwdGVkXCI7XG4gIEh0dHBTdGF0dXNDb2RlW0h0dHBTdGF0dXNDb2RlW1wiTm9uQXV0aG9yaXRhdGl2ZUluZm9ybWF0aW9uXCJdID0gMjAzXSA9IFwiTm9uQXV0aG9yaXRhdGl2ZUluZm9ybWF0aW9uXCI7XG4gIEh0dHBTdGF0dXNDb2RlW0h0dHBTdGF0dXNDb2RlW1wiTm9Db250ZW50XCJdID0gMjA0XSA9IFwiTm9Db250ZW50XCI7XG4gIEh0dHBTdGF0dXNDb2RlW0h0dHBTdGF0dXNDb2RlW1wiUmVzZXRDb250ZW50XCJdID0gMjA1XSA9IFwiUmVzZXRDb250ZW50XCI7XG4gIEh0dHBTdGF0dXNDb2RlW0h0dHBTdGF0dXNDb2RlW1wiUGFydGlhbENvbnRlbnRcIl0gPSAyMDZdID0gXCJQYXJ0aWFsQ29udGVudFwiO1xuICBIdHRwU3RhdHVzQ29kZVtIdHRwU3RhdHVzQ29kZVtcIk11bHRpU3RhdHVzXCJdID0gMjA3XSA9IFwiTXVsdGlTdGF0dXNcIjtcbiAgSHR0cFN0YXR1c0NvZGVbSHR0cFN0YXR1c0NvZGVbXCJBbHJlYWR5UmVwb3J0ZWRcIl0gPSAyMDhdID0gXCJBbHJlYWR5UmVwb3J0ZWRcIjtcbiAgSHR0cFN0YXR1c0NvZGVbSHR0cFN0YXR1c0NvZGVbXCJJbVVzZWRcIl0gPSAyMjZdID0gXCJJbVVzZWRcIjtcbiAgSHR0cFN0YXR1c0NvZGVbSHR0cFN0YXR1c0NvZGVbXCJNdWx0aXBsZUNob2ljZXNcIl0gPSAzMDBdID0gXCJNdWx0aXBsZUNob2ljZXNcIjtcbiAgSHR0cFN0YXR1c0NvZGVbSHR0cFN0YXR1c0NvZGVbXCJNb3ZlZFBlcm1hbmVudGx5XCJdID0gMzAxXSA9IFwiTW92ZWRQZXJtYW5lbnRseVwiO1xuICBIdHRwU3RhdHVzQ29kZVtIdHRwU3RhdHVzQ29kZVtcIkZvdW5kXCJdID0gMzAyXSA9IFwiRm91bmRcIjtcbiAgSHR0cFN0YXR1c0NvZGVbSHR0cFN0YXR1c0NvZGVbXCJTZWVPdGhlclwiXSA9IDMwM10gPSBcIlNlZU90aGVyXCI7XG4gIEh0dHBTdGF0dXNDb2RlW0h0dHBTdGF0dXNDb2RlW1wiTm90TW9kaWZpZWRcIl0gPSAzMDRdID0gXCJOb3RNb2RpZmllZFwiO1xuICBIdHRwU3RhdHVzQ29kZVtIdHRwU3RhdHVzQ29kZVtcIlVzZVByb3h5XCJdID0gMzA1XSA9IFwiVXNlUHJveHlcIjtcbiAgSHR0cFN0YXR1c0NvZGVbSHR0cFN0YXR1c0NvZGVbXCJVbnVzZWRcIl0gPSAzMDZdID0gXCJVbnVzZWRcIjtcbiAgSHR0cFN0YXR1c0NvZGVbSHR0cFN0YXR1c0NvZGVbXCJUZW1wb3JhcnlSZWRpcmVjdFwiXSA9IDMwN10gPSBcIlRlbXBvcmFyeVJlZGlyZWN0XCI7XG4gIEh0dHBTdGF0dXNDb2RlW0h0dHBTdGF0dXNDb2RlW1wiUGVybWFuZW50UmVkaXJlY3RcIl0gPSAzMDhdID0gXCJQZXJtYW5lbnRSZWRpcmVjdFwiO1xuICBIdHRwU3RhdHVzQ29kZVtIdHRwU3RhdHVzQ29kZVtcIkJhZFJlcXVlc3RcIl0gPSA0MDBdID0gXCJCYWRSZXF1ZXN0XCI7XG4gIEh0dHBTdGF0dXNDb2RlW0h0dHBTdGF0dXNDb2RlW1wiVW5hdXRob3JpemVkXCJdID0gNDAxXSA9IFwiVW5hdXRob3JpemVkXCI7XG4gIEh0dHBTdGF0dXNDb2RlW0h0dHBTdGF0dXNDb2RlW1wiUGF5bWVudFJlcXVpcmVkXCJdID0gNDAyXSA9IFwiUGF5bWVudFJlcXVpcmVkXCI7XG4gIEh0dHBTdGF0dXNDb2RlW0h0dHBTdGF0dXNDb2RlW1wiRm9yYmlkZGVuXCJdID0gNDAzXSA9IFwiRm9yYmlkZGVuXCI7XG4gIEh0dHBTdGF0dXNDb2RlW0h0dHBTdGF0dXNDb2RlW1wiTm90Rm91bmRcIl0gPSA0MDRdID0gXCJOb3RGb3VuZFwiO1xuICBIdHRwU3RhdHVzQ29kZVtIdHRwU3RhdHVzQ29kZVtcIk1ldGhvZE5vdEFsbG93ZWRcIl0gPSA0MDVdID0gXCJNZXRob2ROb3RBbGxvd2VkXCI7XG4gIEh0dHBTdGF0dXNDb2RlW0h0dHBTdGF0dXNDb2RlW1wiTm90QWNjZXB0YWJsZVwiXSA9IDQwNl0gPSBcIk5vdEFjY2VwdGFibGVcIjtcbiAgSHR0cFN0YXR1c0NvZGVbSHR0cFN0YXR1c0NvZGVbXCJQcm94eUF1dGhlbnRpY2F0aW9uUmVxdWlyZWRcIl0gPSA0MDddID0gXCJQcm94eUF1dGhlbnRpY2F0aW9uUmVxdWlyZWRcIjtcbiAgSHR0cFN0YXR1c0NvZGVbSHR0cFN0YXR1c0NvZGVbXCJSZXF1ZXN0VGltZW91dFwiXSA9IDQwOF0gPSBcIlJlcXVlc3RUaW1lb3V0XCI7XG4gIEh0dHBTdGF0dXNDb2RlW0h0dHBTdGF0dXNDb2RlW1wiQ29uZmxpY3RcIl0gPSA0MDldID0gXCJDb25mbGljdFwiO1xuICBIdHRwU3RhdHVzQ29kZVtIdHRwU3RhdHVzQ29kZVtcIkdvbmVcIl0gPSA0MTBdID0gXCJHb25lXCI7XG4gIEh0dHBTdGF0dXNDb2RlW0h0dHBTdGF0dXNDb2RlW1wiTGVuZ3RoUmVxdWlyZWRcIl0gPSA0MTFdID0gXCJMZW5ndGhSZXF1aXJlZFwiO1xuICBIdHRwU3RhdHVzQ29kZVtIdHRwU3RhdHVzQ29kZVtcIlByZWNvbmRpdGlvbkZhaWxlZFwiXSA9IDQxMl0gPSBcIlByZWNvbmRpdGlvbkZhaWxlZFwiO1xuICBIdHRwU3RhdHVzQ29kZVtIdHRwU3RhdHVzQ29kZVtcIlBheWxvYWRUb29MYXJnZVwiXSA9IDQxM10gPSBcIlBheWxvYWRUb29MYXJnZVwiO1xuICBIdHRwU3RhdHVzQ29kZVtIdHRwU3RhdHVzQ29kZVtcIlVyaVRvb0xvbmdcIl0gPSA0MTRdID0gXCJVcmlUb29Mb25nXCI7XG4gIEh0dHBTdGF0dXNDb2RlW0h0dHBTdGF0dXNDb2RlW1wiVW5zdXBwb3J0ZWRNZWRpYVR5cGVcIl0gPSA0MTVdID0gXCJVbnN1cHBvcnRlZE1lZGlhVHlwZVwiO1xuICBIdHRwU3RhdHVzQ29kZVtIdHRwU3RhdHVzQ29kZVtcIlJhbmdlTm90U2F0aXNmaWFibGVcIl0gPSA0MTZdID0gXCJSYW5nZU5vdFNhdGlzZmlhYmxlXCI7XG4gIEh0dHBTdGF0dXNDb2RlW0h0dHBTdGF0dXNDb2RlW1wiRXhwZWN0YXRpb25GYWlsZWRcIl0gPSA0MTddID0gXCJFeHBlY3RhdGlvbkZhaWxlZFwiO1xuICBIdHRwU3RhdHVzQ29kZVtIdHRwU3RhdHVzQ29kZVtcIkltQVRlYXBvdFwiXSA9IDQxOF0gPSBcIkltQVRlYXBvdFwiO1xuICBIdHRwU3RhdHVzQ29kZVtIdHRwU3RhdHVzQ29kZVtcIk1pc2RpcmVjdGVkUmVxdWVzdFwiXSA9IDQyMV0gPSBcIk1pc2RpcmVjdGVkUmVxdWVzdFwiO1xuICBIdHRwU3RhdHVzQ29kZVtIdHRwU3RhdHVzQ29kZVtcIlVucHJvY2Vzc2FibGVFbnRpdHlcIl0gPSA0MjJdID0gXCJVbnByb2Nlc3NhYmxlRW50aXR5XCI7XG4gIEh0dHBTdGF0dXNDb2RlW0h0dHBTdGF0dXNDb2RlW1wiTG9ja2VkXCJdID0gNDIzXSA9IFwiTG9ja2VkXCI7XG4gIEh0dHBTdGF0dXNDb2RlW0h0dHBTdGF0dXNDb2RlW1wiRmFpbGVkRGVwZW5kZW5jeVwiXSA9IDQyNF0gPSBcIkZhaWxlZERlcGVuZGVuY3lcIjtcbiAgSHR0cFN0YXR1c0NvZGVbSHR0cFN0YXR1c0NvZGVbXCJUb29FYXJseVwiXSA9IDQyNV0gPSBcIlRvb0Vhcmx5XCI7XG4gIEh0dHBTdGF0dXNDb2RlW0h0dHBTdGF0dXNDb2RlW1wiVXBncmFkZVJlcXVpcmVkXCJdID0gNDI2XSA9IFwiVXBncmFkZVJlcXVpcmVkXCI7XG4gIEh0dHBTdGF0dXNDb2RlW0h0dHBTdGF0dXNDb2RlW1wiUHJlY29uZGl0aW9uUmVxdWlyZWRcIl0gPSA0MjhdID0gXCJQcmVjb25kaXRpb25SZXF1aXJlZFwiO1xuICBIdHRwU3RhdHVzQ29kZVtIdHRwU3RhdHVzQ29kZVtcIlRvb01hbnlSZXF1ZXN0c1wiXSA9IDQyOV0gPSBcIlRvb01hbnlSZXF1ZXN0c1wiO1xuICBIdHRwU3RhdHVzQ29kZVtIdHRwU3RhdHVzQ29kZVtcIlJlcXVlc3RIZWFkZXJGaWVsZHNUb29MYXJnZVwiXSA9IDQzMV0gPSBcIlJlcXVlc3RIZWFkZXJGaWVsZHNUb29MYXJnZVwiO1xuICBIdHRwU3RhdHVzQ29kZVtIdHRwU3RhdHVzQ29kZVtcIlVuYXZhaWxhYmxlRm9yTGVnYWxSZWFzb25zXCJdID0gNDUxXSA9IFwiVW5hdmFpbGFibGVGb3JMZWdhbFJlYXNvbnNcIjtcbiAgSHR0cFN0YXR1c0NvZGVbSHR0cFN0YXR1c0NvZGVbXCJJbnRlcm5hbFNlcnZlckVycm9yXCJdID0gNTAwXSA9IFwiSW50ZXJuYWxTZXJ2ZXJFcnJvclwiO1xuICBIdHRwU3RhdHVzQ29kZVtIdHRwU3RhdHVzQ29kZVtcIk5vdEltcGxlbWVudGVkXCJdID0gNTAxXSA9IFwiTm90SW1wbGVtZW50ZWRcIjtcbiAgSHR0cFN0YXR1c0NvZGVbSHR0cFN0YXR1c0NvZGVbXCJCYWRHYXRld2F5XCJdID0gNTAyXSA9IFwiQmFkR2F0ZXdheVwiO1xuICBIdHRwU3RhdHVzQ29kZVtIdHRwU3RhdHVzQ29kZVtcIlNlcnZpY2VVbmF2YWlsYWJsZVwiXSA9IDUwM10gPSBcIlNlcnZpY2VVbmF2YWlsYWJsZVwiO1xuICBIdHRwU3RhdHVzQ29kZVtIdHRwU3RhdHVzQ29kZVtcIkdhdGV3YXlUaW1lb3V0XCJdID0gNTA0XSA9IFwiR2F0ZXdheVRpbWVvdXRcIjtcbiAgSHR0cFN0YXR1c0NvZGVbSHR0cFN0YXR1c0NvZGVbXCJIdHRwVmVyc2lvbk5vdFN1cHBvcnRlZFwiXSA9IDUwNV0gPSBcIkh0dHBWZXJzaW9uTm90U3VwcG9ydGVkXCI7XG4gIEh0dHBTdGF0dXNDb2RlW0h0dHBTdGF0dXNDb2RlW1wiVmFyaWFudEFsc29OZWdvdGlhdGVzXCJdID0gNTA2XSA9IFwiVmFyaWFudEFsc29OZWdvdGlhdGVzXCI7XG4gIEh0dHBTdGF0dXNDb2RlW0h0dHBTdGF0dXNDb2RlW1wiSW5zdWZmaWNpZW50U3RvcmFnZVwiXSA9IDUwN10gPSBcIkluc3VmZmljaWVudFN0b3JhZ2VcIjtcbiAgSHR0cFN0YXR1c0NvZGVbSHR0cFN0YXR1c0NvZGVbXCJMb29wRGV0ZWN0ZWRcIl0gPSA1MDhdID0gXCJMb29wRGV0ZWN0ZWRcIjtcbiAgSHR0cFN0YXR1c0NvZGVbSHR0cFN0YXR1c0NvZGVbXCJOb3RFeHRlbmRlZFwiXSA9IDUxMF0gPSBcIk5vdEV4dGVuZGVkXCI7XG4gIEh0dHBTdGF0dXNDb2RlW0h0dHBTdGF0dXNDb2RlW1wiTmV0d29ya0F1dGhlbnRpY2F0aW9uUmVxdWlyZWRcIl0gPSA1MTFdID0gXCJOZXR3b3JrQXV0aGVudGljYXRpb25SZXF1aXJlZFwiO1xuICByZXR1cm4gSHR0cFN0YXR1c0NvZGU7XG59KEh0dHBTdGF0dXNDb2RlIHx8IHt9KTtcbmNvbnN0IFhTU0lfUFJFRklYJDEgPSAvXlxcKVxcXVxcfScsP1xcbi87XG5jb25zdCBGRVRDSF9CQUNLRU5EID0gLyojX19QVVJFX18qL25ldyBJbmplY3Rpb25Ub2tlbih0eXBlb2YgbmdEZXZNb2RlID09PSAndW5kZWZpbmVkJyB8fCBuZ0Rldk1vZGUgPyAnRkVUQ0hfQkFDS0VORCcgOiAnJyk7XG5sZXQgRmV0Y2hCYWNrZW5kID0gLyojX19QVVJFX18qLygoKSA9PiB7XG4gIGNsYXNzIEZldGNoQmFja2VuZCB7XG4gICAgZmV0Y2hJbXBsID0gaW5qZWN0KEZldGNoRmFjdG9yeSwge1xuICAgICAgb3B0aW9uYWw6IHRydWVcbiAgICB9KT8uZmV0Y2ggPz8gKCguLi5hcmdzKSA9PiBnbG9iYWxUaGlzLmZldGNoKC4uLmFyZ3MpKTtcbiAgICBuZ1pvbmUgPSBpbmplY3QoTmdab25lKTtcbiAgICBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuICAgIGhhbmRsZShyZXF1ZXN0KSB7XG4gICAgICByZXR1cm4gbmV3IE9ic2VydmFibGUob2JzZXJ2ZXIgPT4ge1xuICAgICAgICBjb25zdCBhYm9ydGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICAgICAgICB0aGlzLmRvUmVxdWVzdChyZXF1ZXN0LCBhYm9ydGVyLnNpZ25hbCwgb2JzZXJ2ZXIpLnRoZW4obm9vcCwgZXJyb3IgPT4gb2JzZXJ2ZXIuZXJyb3IobmV3IEh0dHBFcnJvclJlc3BvbnNlKHtcbiAgICAgICAgICBlcnJvclxuICAgICAgICB9KSkpO1xuICAgICAgICBsZXQgdGltZW91dElkO1xuICAgICAgICBpZiAocmVxdWVzdC50aW1lb3V0KSB7XG4gICAgICAgICAgdGltZW91dElkID0gdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBpZiAoIWFib3J0ZXIuc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgICAgICAgICAgYWJvcnRlci5hYm9ydChuZXcgRE9NRXhjZXB0aW9uKCdzaWduYWwgdGltZWQgb3V0JywgJ1RpbWVvdXRFcnJvcicpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LCByZXF1ZXN0LnRpbWVvdXQpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgIGlmICh0aW1lb3V0SWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGFib3J0ZXIuYWJvcnQoKTtcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBhc3luYyBkb1JlcXVlc3QocmVxdWVzdCwgc2lnbmFsLCBvYnNlcnZlcikge1xuICAgICAgY29uc3QgaW5pdCA9IHRoaXMuY3JlYXRlUmVxdWVzdEluaXQocmVxdWVzdCk7XG4gICAgICBsZXQgcmVzcG9uc2U7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBmZXRjaFByb21pc2UgPSB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB0aGlzLmZldGNoSW1wbChyZXF1ZXN0LnVybFdpdGhQYXJhbXMsIHtcbiAgICAgICAgICBzaWduYWwsXG4gICAgICAgICAgLi4uaW5pdFxuICAgICAgICB9KSk7XG4gICAgICAgIHNpbGVuY2VTdXBlcmZsdW91c1VuaGFuZGxlZFByb21pc2VSZWplY3Rpb24oZmV0Y2hQcm9taXNlKTtcbiAgICAgICAgb2JzZXJ2ZXIubmV4dCh7XG4gICAgICAgICAgdHlwZTogSHR0cEV2ZW50VHlwZS5TZW50XG4gICAgICAgIH0pO1xuICAgICAgICByZXNwb25zZSA9IGF3YWl0IGZldGNoUHJvbWlzZTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIG9ic2VydmVyLmVycm9yKG5ldyBIdHRwRXJyb3JSZXNwb25zZSh7XG4gICAgICAgICAgZXJyb3IsXG4gICAgICAgICAgc3RhdHVzOiBlcnJvci5zdGF0dXMgPz8gMCxcbiAgICAgICAgICBzdGF0dXNUZXh0OiBlcnJvci5zdGF0dXNUZXh0LFxuICAgICAgICAgIHVybDogcmVxdWVzdC51cmxXaXRoUGFyYW1zLFxuICAgICAgICAgIGhlYWRlcnM6IGVycm9yLmhlYWRlcnNcbiAgICAgICAgfSkpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKHJlc3BvbnNlLmhlYWRlcnMpO1xuICAgICAgY29uc3Qgc3RhdHVzVGV4dCA9IHJlc3BvbnNlLnN0YXR1c1RleHQ7XG4gICAgICBjb25zdCB1cmwgPSByZXNwb25zZS51cmwgfHwgcmVxdWVzdC51cmxXaXRoUGFyYW1zO1xuICAgICAgbGV0IHN0YXR1cyA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICAgIGxldCBib2R5ID0gbnVsbDtcbiAgICAgIGlmIChyZXF1ZXN0LnJlcG9ydFByb2dyZXNzKSB7XG4gICAgICAgIG9ic2VydmVyLm5leHQobmV3IEh0dHBIZWFkZXJSZXNwb25zZSh7XG4gICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgICBzdGF0dXMsXG4gICAgICAgICAgc3RhdHVzVGV4dCxcbiAgICAgICAgICB1cmxcbiAgICAgICAgfSkpO1xuICAgICAgfVxuICAgICAgaWYgKHJlc3BvbnNlLmJvZHkpIHtcbiAgICAgICAgY29uc3QgY29udGVudExlbmd0aCA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdjb250ZW50LWxlbmd0aCcpO1xuICAgICAgICBjb25zdCBjaHVua3MgPSBbXTtcbiAgICAgICAgY29uc3QgcmVhZGVyID0gcmVzcG9uc2UuYm9keS5nZXRSZWFkZXIoKTtcbiAgICAgICAgbGV0IHJlY2VpdmVkTGVuZ3RoID0gMDtcbiAgICAgICAgbGV0IGRlY29kZXI7XG4gICAgICAgIGxldCBwYXJ0aWFsVGV4dDtcbiAgICAgICAgY29uc3QgcmVxWm9uZSA9IHR5cGVvZiBab25lICE9PSAndW5kZWZpbmVkJyAmJiBab25lLmN1cnJlbnQ7XG4gICAgICAgIGxldCBjYW5jZWxlZCA9IGZhbHNlO1xuICAgICAgICBhd2FpdCB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcihhc3luYyAoKSA9PiB7XG4gICAgICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRlc3Ryb3lSZWYuZGVzdHJveWVkKSB7XG4gICAgICAgICAgICAgIGF3YWl0IHJlYWRlci5jYW5jZWwoKTtcbiAgICAgICAgICAgICAgY2FuY2VsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgICAgZG9uZSxcbiAgICAgICAgICAgICAgdmFsdWVcbiAgICAgICAgICAgIH0gPSBhd2FpdCByZWFkZXIucmVhZCgpO1xuICAgICAgICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjaHVua3MucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgICByZWNlaXZlZExlbmd0aCArPSB2YWx1ZS5sZW5ndGg7XG4gICAgICAgICAgICBpZiAocmVxdWVzdC5yZXBvcnRQcm9ncmVzcykge1xuICAgICAgICAgICAgICBwYXJ0aWFsVGV4dCA9IHJlcXVlc3QucmVzcG9uc2VUeXBlID09PSAndGV4dCcgPyAocGFydGlhbFRleHQgPz8gJycpICsgKGRlY29kZXIgPz89IG5ldyBUZXh0RGVjb2RlcigpKS5kZWNvZGUodmFsdWUsIHtcbiAgICAgICAgICAgICAgICBzdHJlYW06IHRydWVcbiAgICAgICAgICAgICAgfSkgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgIGNvbnN0IHJlcG9ydFByb2dyZXNzID0gKCkgPT4gb2JzZXJ2ZXIubmV4dCh7XG4gICAgICAgICAgICAgICAgdHlwZTogSHR0cEV2ZW50VHlwZS5Eb3dubG9hZFByb2dyZXNzLFxuICAgICAgICAgICAgICAgIHRvdGFsOiBjb250ZW50TGVuZ3RoID8gK2NvbnRlbnRMZW5ndGggOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgbG9hZGVkOiByZWNlaXZlZExlbmd0aCxcbiAgICAgICAgICAgICAgICBwYXJ0aWFsVGV4dFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgcmVxWm9uZSA/IHJlcVpvbmUucnVuKHJlcG9ydFByb2dyZXNzKSA6IHJlcG9ydFByb2dyZXNzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGNhbmNlbGVkKSB7XG4gICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2h1bmtzQWxsID0gdGhpcy5jb25jYXRDaHVua3MoY2h1bmtzLCByZWNlaXZlZExlbmd0aCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgY29udGVudFR5cGUgPSByZXNwb25zZS5oZWFkZXJzLmdldChDT05URU5UX1RZUEVfSEVBREVSKSA/PyAnJztcbiAgICAgICAgICBib2R5ID0gdGhpcy5wYXJzZUJvZHkocmVxdWVzdCwgY2h1bmtzQWxsLCBjb250ZW50VHlwZSwgc3RhdHVzKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBvYnNlcnZlci5lcnJvcihuZXcgSHR0cEVycm9yUmVzcG9uc2Uoe1xuICAgICAgICAgICAgZXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMocmVzcG9uc2UuaGVhZGVycyksXG4gICAgICAgICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgICAgICAgIHN0YXR1c1RleHQ6IHJlc3BvbnNlLnN0YXR1c1RleHQsXG4gICAgICAgICAgICB1cmw6IHJlc3BvbnNlLnVybCB8fCByZXF1ZXN0LnVybFdpdGhQYXJhbXNcbiAgICAgICAgICB9KSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoc3RhdHVzID09PSAwKSB7XG4gICAgICAgIHN0YXR1cyA9IGJvZHkgPyBIVFRQX1NUQVRVU19DT0RFX09LIDogMDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG9rID0gc3RhdHVzID49IDIwMCAmJiBzdGF0dXMgPCAzMDA7XG4gICAgICBjb25zdCByZWRpcmVjdGVkID0gcmVzcG9uc2UucmVkaXJlY3RlZDtcbiAgICAgIGNvbnN0IHJlc3BvbnNlVHlwZSA9IHJlc3BvbnNlLnR5cGU7XG4gICAgICBpZiAob2spIHtcbiAgICAgICAgb2JzZXJ2ZXIubmV4dChuZXcgSHR0cFJlc3BvbnNlKHtcbiAgICAgICAgICBib2R5LFxuICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgICAgc3RhdHVzLFxuICAgICAgICAgIHN0YXR1c1RleHQsXG4gICAgICAgICAgdXJsLFxuICAgICAgICAgIHJlZGlyZWN0ZWQsXG4gICAgICAgICAgcmVzcG9uc2VUeXBlXG4gICAgICAgIH0pKTtcbiAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9ic2VydmVyLmVycm9yKG5ldyBIdHRwRXJyb3JSZXNwb25zZSh7XG4gICAgICAgICAgZXJyb3I6IGJvZHksXG4gICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgICBzdGF0dXMsXG4gICAgICAgICAgc3RhdHVzVGV4dCxcbiAgICAgICAgICB1cmwsXG4gICAgICAgICAgcmVkaXJlY3RlZCxcbiAgICAgICAgICByZXNwb25zZVR5cGVcbiAgICAgICAgfSkpO1xuICAgICAgfVxuICAgIH1cbiAgICBwYXJzZUJvZHkocmVxdWVzdCwgYmluQ29udGVudCwgY29udGVudFR5cGUsIHN0YXR1cykge1xuICAgICAgc3dpdGNoIChyZXF1ZXN0LnJlc3BvbnNlVHlwZSkge1xuICAgICAgICBjYXNlICdqc29uJzpcbiAgICAgICAgICBjb25zdCB0ZXh0ID0gbmV3IFRleHREZWNvZGVyKCkuZGVjb2RlKGJpbkNvbnRlbnQpLnJlcGxhY2UoWFNTSV9QUkVGSVgkMSwgJycpO1xuICAgICAgICAgIGlmICh0ZXh0ID09PSAnJykge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gSlNPTi5wYXJzZSh0ZXh0KTtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBpZiAoc3RhdHVzIDwgMjAwIHx8IHN0YXR1cyA+PSAzMDApIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRleHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgIH1cbiAgICAgICAgY2FzZSAndGV4dCc6XG4gICAgICAgICAgcmV0dXJuIG5ldyBUZXh0RGVjb2RlcigpLmRlY29kZShiaW5Db250ZW50KTtcbiAgICAgICAgY2FzZSAnYmxvYic6XG4gICAgICAgICAgcmV0dXJuIG5ldyBCbG9iKFtiaW5Db250ZW50XSwge1xuICAgICAgICAgICAgdHlwZTogY29udGVudFR5cGVcbiAgICAgICAgICB9KTtcbiAgICAgICAgY2FzZSAnYXJyYXlidWZmZXInOlxuICAgICAgICAgIHJldHVybiBiaW5Db250ZW50LmJ1ZmZlcjtcbiAgICAgIH1cbiAgICB9XG4gICAgY3JlYXRlUmVxdWVzdEluaXQocmVxKSB7XG4gICAgICBjb25zdCBoZWFkZXJzID0ge307XG4gICAgICBsZXQgY3JlZGVudGlhbHM7XG4gICAgICBjcmVkZW50aWFscyA9IHJlcS5jcmVkZW50aWFscztcbiAgICAgIGlmIChyZXEud2l0aENyZWRlbnRpYWxzKSB7XG4gICAgICAgICh0eXBlb2YgbmdEZXZNb2RlID09PSAndW5kZWZpbmVkJyB8fCBuZ0Rldk1vZGUpICYmIHdhcm5pbmdPcHRpb25zTWVzc2FnZShyZXEpO1xuICAgICAgICBjcmVkZW50aWFscyA9ICdpbmNsdWRlJztcbiAgICAgIH1cbiAgICAgIHJlcS5oZWFkZXJzLmZvckVhY2goKG5hbWUsIHZhbHVlcykgPT4gaGVhZGVyc1tuYW1lXSA9IHZhbHVlcy5qb2luKCcsJykpO1xuICAgICAgaWYgKCFyZXEuaGVhZGVycy5oYXMoQUNDRVBUX0hFQURFUikpIHtcbiAgICAgICAgaGVhZGVyc1tBQ0NFUFRfSEVBREVSXSA9IEFDQ0VQVF9IRUFERVJfVkFMVUU7XG4gICAgICB9XG4gICAgICBpZiAoIXJlcS5oZWFkZXJzLmhhcyhDT05URU5UX1RZUEVfSEVBREVSKSkge1xuICAgICAgICBjb25zdCBkZXRlY3RlZFR5cGUgPSByZXEuZGV0ZWN0Q29udGVudFR5cGVIZWFkZXIoKTtcbiAgICAgICAgaWYgKGRldGVjdGVkVHlwZSAhPT0gbnVsbCkge1xuICAgICAgICAgIGhlYWRlcnNbQ09OVEVOVF9UWVBFX0hFQURFUl0gPSBkZXRlY3RlZFR5cGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGJvZHk6IHJlcS5zZXJpYWxpemVCb2R5KCksXG4gICAgICAgIG1ldGhvZDogcmVxLm1ldGhvZCxcbiAgICAgICAgaGVhZGVycyxcbiAgICAgICAgY3JlZGVudGlhbHMsXG4gICAgICAgIGtlZXBhbGl2ZTogcmVxLmtlZXBhbGl2ZSxcbiAgICAgICAgY2FjaGU6IHJlcS5jYWNoZSxcbiAgICAgICAgcHJpb3JpdHk6IHJlcS5wcmlvcml0eSxcbiAgICAgICAgbW9kZTogcmVxLm1vZGUsXG4gICAgICAgIHJlZGlyZWN0OiByZXEucmVkaXJlY3QsXG4gICAgICAgIHJlZmVycmVyOiByZXEucmVmZXJyZXIsXG4gICAgICAgIGludGVncml0eTogcmVxLmludGVncml0eSxcbiAgICAgICAgcmVmZXJyZXJQb2xpY3k6IHJlcS5yZWZlcnJlclBvbGljeVxuICAgICAgfTtcbiAgICB9XG4gICAgY29uY2F0Q2h1bmtzKGNodW5rcywgdG90YWxMZW5ndGgpIHtcbiAgICAgIGNvbnN0IGNodW5rc0FsbCA9IG5ldyBVaW50OEFycmF5KHRvdGFsTGVuZ3RoKTtcbiAgICAgIGxldCBwb3NpdGlvbiA9IDA7XG4gICAgICBmb3IgKGNvbnN0IGNodW5rIG9mIGNodW5rcykge1xuICAgICAgICBjaHVua3NBbGwuc2V0KGNodW5rLCBwb3NpdGlvbik7XG4gICAgICAgIHBvc2l0aW9uICs9IGNodW5rLmxlbmd0aDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjaHVua3NBbGw7XG4gICAgfVxuICAgIHN0YXRpYyDJtWZhYyA9IGZ1bmN0aW9uIEZldGNoQmFja2VuZF9GYWN0b3J5KF9fbmdGYWN0b3J5VHlwZV9fKSB7XG4gICAgICByZXR1cm4gbmV3IChfX25nRmFjdG9yeVR5cGVfXyB8fCBGZXRjaEJhY2tlbmQpKCk7XG4gICAgfTtcbiAgICBzdGF0aWMgybVwcm92ID0gLyogQF9fUFVSRV9fICovaTAuybXJtWRlZmluZUluamVjdGFibGUoe1xuICAgICAgdG9rZW46IEZldGNoQmFja2VuZCxcbiAgICAgIGZhY3Rvcnk6IEZldGNoQmFja2VuZC7JtWZhY1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBGZXRjaEJhY2tlbmQ7XG59KSgpO1xuLyojX19QVVJFX18qLygoKSA9PiB7XG4gICh0eXBlb2YgbmdEZXZNb2RlID09PSBcInVuZGVmaW5lZFwiIHx8IG5nRGV2TW9kZSkgJiYgdm9pZCAwO1xufSkoKTtcbmNsYXNzIEZldGNoRmFjdG9yeSB7fVxuZnVuY3Rpb24gbm9vcCgpIHt9XG5mdW5jdGlvbiB3YXJuaW5nT3B0aW9uc01lc3NhZ2UocmVxKSB7XG4gIGlmIChyZXEuY3JlZGVudGlhbHMgJiYgcmVxLndpdGhDcmVkZW50aWFscykge1xuICAgIGNvbnNvbGUud2FybihfZm9ybWF0UnVudGltZUVycm9yKDI4MTksIGBBbmd1bGFyIGRldGVjdGVkIHRoYXQgYSBcXGBIdHRwQ2xpZW50XFxgIHJlcXVlc3QgaGFzIGJvdGggXFxgd2l0aENyZWRlbnRpYWxzOiB0cnVlXFxgIGFuZCBcXGBjcmVkZW50aWFsczogJyR7cmVxLmNyZWRlbnRpYWxzfSdcXGAgb3B0aW9ucy4gVGhlIFxcYHdpdGhDcmVkZW50aWFsc1xcYCBvcHRpb24gaXMgb3ZlcnJpZGluZyB0aGUgZXhwbGljaXQgXFxgY3JlZGVudGlhbHNcXGAgc2V0dGluZyB0byAnaW5jbHVkZScuIENvbnNpZGVyIHJlbW92aW5nIFxcYHdpdGhDcmVkZW50aWFsc1xcYCBhbmQgdXNpbmcgXFxgY3JlZGVudGlhbHM6ICcke3JlcS5jcmVkZW50aWFsc30nXFxgIGRpcmVjdGx5IGZvciBjbGFyaXR5LmApKTtcbiAgfVxufVxuZnVuY3Rpb24gc2lsZW5jZVN1cGVyZmx1b3VzVW5oYW5kbGVkUHJvbWlzZVJlamVjdGlvbihwcm9taXNlKSB7XG4gIHByb21pc2UudGhlbihub29wLCBub29wKTtcbn1cbmNvbnN0IFhTU0lfUFJFRklYID0gL15cXClcXF1cXH0nLD9cXG4vO1xuZnVuY3Rpb24gdmFsaWRhdGVYaHJDb21wYXRpYmlsaXR5KHJlcSkge1xuICBjb25zdCB1bnN1cHBvcnRlZE9wdGlvbnMgPSBbe1xuICAgIHByb3BlcnR5OiAna2VlcGFsaXZlJyxcbiAgICBlcnJvckNvZGU6IDI4MTNcbiAgfSwge1xuICAgIHByb3BlcnR5OiAnY2FjaGUnLFxuICAgIGVycm9yQ29kZTogMjgxNFxuICB9LCB7XG4gICAgcHJvcGVydHk6ICdwcmlvcml0eScsXG4gICAgZXJyb3JDb2RlOiAyODE1XG4gIH0sIHtcbiAgICBwcm9wZXJ0eTogJ21vZGUnLFxuICAgIGVycm9yQ29kZTogMjgxNlxuICB9LCB7XG4gICAgcHJvcGVydHk6ICdyZWRpcmVjdCcsXG4gICAgZXJyb3JDb2RlOiAyODE3XG4gIH0sIHtcbiAgICBwcm9wZXJ0eTogJ2NyZWRlbnRpYWxzJyxcbiAgICBlcnJvckNvZGU6IDI4MThcbiAgfSwge1xuICAgIHByb3BlcnR5OiAnaW50ZWdyaXR5JyxcbiAgICBlcnJvckNvZGU6IDI4MjBcbiAgfSwge1xuICAgIHByb3BlcnR5OiAncmVmZXJyZXInLFxuICAgIGVycm9yQ29kZTogMjgyMVxuICB9LCB7XG4gICAgcHJvcGVydHk6ICdyZWZlcnJlclBvbGljeScsXG4gICAgZXJyb3JDb2RlOiAyODIzXG4gIH1dO1xuICBmb3IgKGNvbnN0IHtcbiAgICBwcm9wZXJ0eSxcbiAgICBlcnJvckNvZGVcbiAgfSBvZiB1bnN1cHBvcnRlZE9wdGlvbnMpIHtcbiAgICBpZiAocmVxW3Byb3BlcnR5XSkge1xuICAgICAgY29uc29sZS53YXJuKF9mb3JtYXRSdW50aW1lRXJyb3IoZXJyb3JDb2RlLCBgQW5ndWxhciBkZXRlY3RlZCB0aGF0IGEgXFxgSHR0cENsaWVudFxcYCByZXF1ZXN0IHdpdGggdGhlIFxcYCR7cHJvcGVydHl9XFxgIG9wdGlvbiB3YXMgc2VudCB1c2luZyBYSFIsIHdoaWNoIGRvZXMgbm90IHN1cHBvcnQgaXQuIFRvIHVzZSB0aGUgXFxgJHtwcm9wZXJ0eX1cXGAgb3B0aW9uLCBlbmFibGUgRmV0Y2ggQVBJIHN1cHBvcnQgYnkgcGFzc2luZyBcXGB3aXRoRmV0Y2goKVxcYCBhcyBhbiBhcmd1bWVudCB0byBcXGBwcm92aWRlSHR0cENsaWVudCgpXFxgLmApKTtcbiAgICB9XG4gIH1cbn1cbmxldCBIdHRwWGhyQmFja2VuZCA9IC8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICBjbGFzcyBIdHRwWGhyQmFja2VuZCB7XG4gICAgeGhyRmFjdG9yeTtcbiAgICB0cmFjaW5nU2VydmljZSA9IGluamVjdChfVHJhY2luZ1NlcnZpY2UsIHtcbiAgICAgIG9wdGlvbmFsOiB0cnVlXG4gICAgfSk7XG4gICAgY29uc3RydWN0b3IoeGhyRmFjdG9yeSkge1xuICAgICAgdGhpcy54aHJGYWN0b3J5ID0geGhyRmFjdG9yeTtcbiAgICB9XG4gICAgbWF5YmVQcm9wYWdhdGVUcmFjZShmbikge1xuICAgICAgcmV0dXJuIHRoaXMudHJhY2luZ1NlcnZpY2U/LnByb3BhZ2F0ZSA/IHRoaXMudHJhY2luZ1NlcnZpY2UucHJvcGFnYXRlKGZuKSA6IGZuO1xuICAgIH1cbiAgICBoYW5kbGUocmVxKSB7XG4gICAgICBpZiAocmVxLm1ldGhvZCA9PT0gJ0pTT05QJykge1xuICAgICAgICB0aHJvdyBuZXcgX1J1bnRpbWVFcnJvcigtMjgwMCwgKHR5cGVvZiBuZ0Rldk1vZGUgPT09ICd1bmRlZmluZWQnIHx8IG5nRGV2TW9kZSkgJiYgYENhbm5vdCBtYWtlIGEgSlNPTlAgcmVxdWVzdCB3aXRob3V0IEpTT05QIHN1cHBvcnQuIFRvIGZpeCB0aGUgcHJvYmxlbSwgZWl0aGVyIGFkZCB0aGUgXFxgd2l0aEpzb25wU3VwcG9ydCgpXFxgIGNhbGwgKGlmIFxcYHByb3ZpZGVIdHRwQ2xpZW50KClcXGAgaXMgdXNlZCkgb3IgaW1wb3J0IHRoZSBcXGBIdHRwQ2xpZW50SnNvbnBNb2R1bGVcXGAgaW4gdGhlIHJvb3QgTmdNb2R1bGUuYCk7XG4gICAgICB9XG4gICAgICBuZ0Rldk1vZGUgJiYgdmFsaWRhdGVYaHJDb21wYXRpYmlsaXR5KHJlcSk7XG4gICAgICBjb25zdCB4aHJGYWN0b3J5ID0gdGhpcy54aHJGYWN0b3J5O1xuICAgICAgY29uc3Qgc291cmNlID0gdHlwZW9mIG5nU2VydmVyTW9kZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbmdTZXJ2ZXJNb2RlICYmIHhockZhY3RvcnkuybVsb2FkSW1wbCA/IGZyb20oeGhyRmFjdG9yeS7JtWxvYWRJbXBsKCkpIDogb2YobnVsbCk7XG4gICAgICByZXR1cm4gc291cmNlLnBpcGUoc3dpdGNoTWFwKCgpID0+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKG9ic2VydmVyID0+IHtcbiAgICAgICAgICBjb25zdCB4aHIgPSB4aHJGYWN0b3J5LmJ1aWxkKCk7XG4gICAgICAgICAgeGhyLm9wZW4ocmVxLm1ldGhvZCwgcmVxLnVybFdpdGhQYXJhbXMpO1xuICAgICAgICAgIGlmIChyZXEud2l0aENyZWRlbnRpYWxzKSB7XG4gICAgICAgICAgICB4aHIud2l0aENyZWRlbnRpYWxzID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVxLmhlYWRlcnMuZm9yRWFjaCgobmFtZSwgdmFsdWVzKSA9PiB4aHIuc2V0UmVxdWVzdEhlYWRlcihuYW1lLCB2YWx1ZXMuam9pbignLCcpKSk7XG4gICAgICAgICAgaWYgKCFyZXEuaGVhZGVycy5oYXMoQUNDRVBUX0hFQURFUikpIHtcbiAgICAgICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKEFDQ0VQVF9IRUFERVIsIEFDQ0VQVF9IRUFERVJfVkFMVUUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIXJlcS5oZWFkZXJzLmhhcyhDT05URU5UX1RZUEVfSEVBREVSKSkge1xuICAgICAgICAgICAgY29uc3QgZGV0ZWN0ZWRUeXBlID0gcmVxLmRldGVjdENvbnRlbnRUeXBlSGVhZGVyKCk7XG4gICAgICAgICAgICBpZiAoZGV0ZWN0ZWRUeXBlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKENPTlRFTlRfVFlQRV9IRUFERVIsIGRldGVjdGVkVHlwZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChyZXEudGltZW91dCkge1xuICAgICAgICAgICAgeGhyLnRpbWVvdXQgPSByZXEudGltZW91dDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHJlcS5yZXNwb25zZVR5cGUpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlVHlwZSA9IHJlcS5yZXNwb25zZVR5cGUudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgIHhoci5yZXNwb25zZVR5cGUgPSByZXNwb25zZVR5cGUgIT09ICdqc29uJyA/IHJlc3BvbnNlVHlwZSA6ICd0ZXh0JztcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgcmVxQm9keSA9IHJlcS5zZXJpYWxpemVCb2R5KCk7XG4gICAgICAgICAgbGV0IGhlYWRlclJlc3BvbnNlID0gbnVsbDtcbiAgICAgICAgICBjb25zdCBwYXJ0aWFsRnJvbVhociA9ICgpID0+IHtcbiAgICAgICAgICAgIGlmIChoZWFkZXJSZXNwb25zZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICByZXR1cm4gaGVhZGVyUmVzcG9uc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBzdGF0dXNUZXh0ID0geGhyLnN0YXR1c1RleHQgfHwgJ09LJztcbiAgICAgICAgICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoeGhyLmdldEFsbFJlc3BvbnNlSGVhZGVycygpKTtcbiAgICAgICAgICAgIGNvbnN0IHVybCA9IHhoci5yZXNwb25zZVVSTCB8fCByZXEudXJsO1xuICAgICAgICAgICAgaGVhZGVyUmVzcG9uc2UgPSBuZXcgSHR0cEhlYWRlclJlc3BvbnNlKHtcbiAgICAgICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgICAgICAgc3RhdHVzOiB4aHIuc3RhdHVzLFxuICAgICAgICAgICAgICBzdGF0dXNUZXh0LFxuICAgICAgICAgICAgICB1cmxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIGhlYWRlclJlc3BvbnNlO1xuICAgICAgICAgIH07XG4gICAgICAgICAgY29uc3Qgb25Mb2FkID0gdGhpcy5tYXliZVByb3BhZ2F0ZVRyYWNlKCgpID0+IHtcbiAgICAgICAgICAgIGxldCB7XG4gICAgICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgICAgICAgIHN0YXR1cyxcbiAgICAgICAgICAgICAgc3RhdHVzVGV4dCxcbiAgICAgICAgICAgICAgdXJsXG4gICAgICAgICAgICB9ID0gcGFydGlhbEZyb21YaHIoKTtcbiAgICAgICAgICAgIGxldCBib2R5ID0gbnVsbDtcbiAgICAgICAgICAgIGlmIChzdGF0dXMgIT09IEhUVFBfU1RBVFVTX0NPREVfTk9fQ09OVEVOVCkge1xuICAgICAgICAgICAgICBib2R5ID0gdHlwZW9mIHhoci5yZXNwb25zZSA9PT0gJ3VuZGVmaW5lZCcgPyB4aHIucmVzcG9uc2VUZXh0IDogeGhyLnJlc3BvbnNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHN0YXR1cyA9PT0gMCkge1xuICAgICAgICAgICAgICBzdGF0dXMgPSAhIWJvZHkgPyBIVFRQX1NUQVRVU19DT0RFX09LIDogMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBvayA9IHN0YXR1cyA+PSAyMDAgJiYgc3RhdHVzIDwgMzAwO1xuICAgICAgICAgICAgaWYgKHJlcS5yZXNwb25zZVR5cGUgPT09ICdqc29uJyAmJiB0eXBlb2YgYm9keSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxCb2R5ID0gYm9keTtcbiAgICAgICAgICAgICAgYm9keSA9IGJvZHkucmVwbGFjZShYU1NJX1BSRUZJWCwgJycpO1xuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGJvZHkgPSBib2R5ICE9PSAnJyA/IEpTT04ucGFyc2UoYm9keSkgOiBudWxsO1xuICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGJvZHkgPSBvcmlnaW5hbEJvZHk7XG4gICAgICAgICAgICAgICAgaWYgKG9rKSB7XG4gICAgICAgICAgICAgICAgICBvayA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgYm9keSA9IHtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3IsXG4gICAgICAgICAgICAgICAgICAgIHRleHQ6IGJvZHlcbiAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob2spIHtcbiAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChuZXcgSHR0cFJlc3BvbnNlKHtcbiAgICAgICAgICAgICAgICBib2R5LFxuICAgICAgICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgICAgICAgICAgc3RhdHVzLFxuICAgICAgICAgICAgICAgIHN0YXR1c1RleHQsXG4gICAgICAgICAgICAgICAgdXJsOiB1cmwgfHwgdW5kZWZpbmVkXG4gICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKG5ldyBIdHRwRXJyb3JSZXNwb25zZSh7XG4gICAgICAgICAgICAgICAgZXJyb3I6IGJvZHksXG4gICAgICAgICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgICAgICAgICBzdGF0dXMsXG4gICAgICAgICAgICAgICAgc3RhdHVzVGV4dCxcbiAgICAgICAgICAgICAgICB1cmw6IHVybCB8fCB1bmRlZmluZWRcbiAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGNvbnN0IG9uRXJyb3IgPSB0aGlzLm1heWJlUHJvcGFnYXRlVHJhY2UoZXJyb3IgPT4ge1xuICAgICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgICB1cmxcbiAgICAgICAgICAgIH0gPSBwYXJ0aWFsRnJvbVhocigpO1xuICAgICAgICAgICAgY29uc3QgcmVzID0gbmV3IEh0dHBFcnJvclJlc3BvbnNlKHtcbiAgICAgICAgICAgICAgZXJyb3IsXG4gICAgICAgICAgICAgIHN0YXR1czogeGhyLnN0YXR1cyB8fCAwLFxuICAgICAgICAgICAgICBzdGF0dXNUZXh0OiB4aHIuc3RhdHVzVGV4dCB8fCAnVW5rbm93biBFcnJvcicsXG4gICAgICAgICAgICAgIHVybDogdXJsIHx8IHVuZGVmaW5lZFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBvYnNlcnZlci5lcnJvcihyZXMpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGxldCBvblRpbWVvdXQgPSBvbkVycm9yO1xuICAgICAgICAgIGlmIChyZXEudGltZW91dCkge1xuICAgICAgICAgICAgb25UaW1lb3V0ID0gdGhpcy5tYXliZVByb3BhZ2F0ZVRyYWNlKF8gPT4ge1xuICAgICAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICAgICAgdXJsXG4gICAgICAgICAgICAgIH0gPSBwYXJ0aWFsRnJvbVhocigpO1xuICAgICAgICAgICAgICBjb25zdCByZXMgPSBuZXcgSHR0cEVycm9yUmVzcG9uc2Uoe1xuICAgICAgICAgICAgICAgIGVycm9yOiBuZXcgRE9NRXhjZXB0aW9uKCdSZXF1ZXN0IHRpbWVkIG91dCcsICdUaW1lb3V0RXJyb3InKSxcbiAgICAgICAgICAgICAgICBzdGF0dXM6IHhoci5zdGF0dXMgfHwgMCxcbiAgICAgICAgICAgICAgICBzdGF0dXNUZXh0OiB4aHIuc3RhdHVzVGV4dCB8fCAnUmVxdWVzdCB0aW1lb3V0JyxcbiAgICAgICAgICAgICAgICB1cmw6IHVybCB8fCB1bmRlZmluZWRcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKHJlcyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbGV0IHNlbnRIZWFkZXJzID0gZmFsc2U7XG4gICAgICAgICAgY29uc3Qgb25Eb3duUHJvZ3Jlc3MgPSB0aGlzLm1heWJlUHJvcGFnYXRlVHJhY2UoZXZlbnQgPT4ge1xuICAgICAgICAgICAgaWYgKCFzZW50SGVhZGVycykge1xuICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KHBhcnRpYWxGcm9tWGhyKCkpO1xuICAgICAgICAgICAgICBzZW50SGVhZGVycyA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgcHJvZ3Jlc3NFdmVudCA9IHtcbiAgICAgICAgICAgICAgdHlwZTogSHR0cEV2ZW50VHlwZS5Eb3dubG9hZFByb2dyZXNzLFxuICAgICAgICAgICAgICBsb2FkZWQ6IGV2ZW50LmxvYWRlZFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChldmVudC5sZW5ndGhDb21wdXRhYmxlKSB7XG4gICAgICAgICAgICAgIHByb2dyZXNzRXZlbnQudG90YWwgPSBldmVudC50b3RhbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZXEucmVzcG9uc2VUeXBlID09PSAndGV4dCcgJiYgISF4aHIucmVzcG9uc2VUZXh0KSB7XG4gICAgICAgICAgICAgIHByb2dyZXNzRXZlbnQucGFydGlhbFRleHQgPSB4aHIucmVzcG9uc2VUZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChwcm9ncmVzc0V2ZW50KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBjb25zdCBvblVwUHJvZ3Jlc3MgPSB0aGlzLm1heWJlUHJvcGFnYXRlVHJhY2UoZXZlbnQgPT4ge1xuICAgICAgICAgICAgbGV0IHByb2dyZXNzID0ge1xuICAgICAgICAgICAgICB0eXBlOiBIdHRwRXZlbnRUeXBlLlVwbG9hZFByb2dyZXNzLFxuICAgICAgICAgICAgICBsb2FkZWQ6IGV2ZW50LmxvYWRlZFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChldmVudC5sZW5ndGhDb21wdXRhYmxlKSB7XG4gICAgICAgICAgICAgIHByb2dyZXNzLnRvdGFsID0gZXZlbnQudG90YWw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvYnNlcnZlci5uZXh0KHByb2dyZXNzKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB4aHIuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIG9uTG9hZCk7XG4gICAgICAgICAgeGhyLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgb25FcnJvcik7XG4gICAgICAgICAgeGhyLmFkZEV2ZW50TGlzdGVuZXIoJ3RpbWVvdXQnLCBvblRpbWVvdXQpO1xuICAgICAgICAgIHhoci5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIG9uRXJyb3IpO1xuICAgICAgICAgIGlmIChyZXEucmVwb3J0UHJvZ3Jlc3MpIHtcbiAgICAgICAgICAgIHhoci5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIG9uRG93blByb2dyZXNzKTtcbiAgICAgICAgICAgIGlmIChyZXFCb2R5ICE9PSBudWxsICYmIHhoci51cGxvYWQpIHtcbiAgICAgICAgICAgICAgeGhyLnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIG9uVXBQcm9ncmVzcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHhoci5zZW5kKHJlcUJvZHkpO1xuICAgICAgICAgIG9ic2VydmVyLm5leHQoe1xuICAgICAgICAgICAgdHlwZTogSHR0cEV2ZW50VHlwZS5TZW50XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgIHhoci5yZW1vdmVFdmVudExpc3RlbmVyKCdlcnJvcicsIG9uRXJyb3IpO1xuICAgICAgICAgICAgeGhyLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgb25FcnJvcik7XG4gICAgICAgICAgICB4aHIucmVtb3ZlRXZlbnRMaXN0ZW5lcignbG9hZCcsIG9uTG9hZCk7XG4gICAgICAgICAgICB4aHIucmVtb3ZlRXZlbnRMaXN0ZW5lcigndGltZW91dCcsIG9uVGltZW91dCk7XG4gICAgICAgICAgICBpZiAocmVxLnJlcG9ydFByb2dyZXNzKSB7XG4gICAgICAgICAgICAgIHhoci5yZW1vdmVFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIG9uRG93blByb2dyZXNzKTtcbiAgICAgICAgICAgICAgaWYgKHJlcUJvZHkgIT09IG51bGwgJiYgeGhyLnVwbG9hZCkge1xuICAgICAgICAgICAgICAgIHhoci51cGxvYWQucmVtb3ZlRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCBvblVwUHJvZ3Jlc3MpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoeGhyLnJlYWR5U3RhdGUgIT09IHhoci5ET05FKSB7XG4gICAgICAgICAgICAgIHhoci5hYm9ydCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgfSkpO1xuICAgIH1cbiAgICBzdGF0aWMgybVmYWMgPSBmdW5jdGlvbiBIdHRwWGhyQmFja2VuZF9GYWN0b3J5KF9fbmdGYWN0b3J5VHlwZV9fKSB7XG4gICAgICByZXR1cm4gbmV3IChfX25nRmFjdG9yeVR5cGVfXyB8fCBIdHRwWGhyQmFja2VuZCkoaTAuybXJtWluamVjdChYaHJGYWN0b3J5KSk7XG4gICAgfTtcbiAgICBzdGF0aWMgybVwcm92ID0gLyogQF9fUFVSRV9fICovaTAuybXJtWRlZmluZUluamVjdGFibGUoe1xuICAgICAgdG9rZW46IEh0dHBYaHJCYWNrZW5kLFxuICAgICAgZmFjdG9yeTogSHR0cFhockJhY2tlbmQuybVmYWMsXG4gICAgICBwcm92aWRlZEluOiAncm9vdCdcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gSHR0cFhockJhY2tlbmQ7XG59KSgpO1xuLyojX19QVVJFX18qLygoKSA9PiB7XG4gICh0eXBlb2YgbmdEZXZNb2RlID09PSBcInVuZGVmaW5lZFwiIHx8IG5nRGV2TW9kZSkgJiYgdm9pZCAwO1xufSkoKTtcbmZ1bmN0aW9uIGludGVyY2VwdG9yQ2hhaW5FbmRGbihyZXEsIGZpbmFsSGFuZGxlckZuKSB7XG4gIHJldHVybiBmaW5hbEhhbmRsZXJGbihyZXEpO1xufVxuZnVuY3Rpb24gYWRhcHRMZWdhY3lJbnRlcmNlcHRvclRvQ2hhaW4oY2hhaW5UYWlsRm4sIGludGVyY2VwdG9yKSB7XG4gIHJldHVybiAoaW5pdGlhbFJlcXVlc3QsIGZpbmFsSGFuZGxlckZuKSA9PiBpbnRlcmNlcHRvci5pbnRlcmNlcHQoaW5pdGlhbFJlcXVlc3QsIHtcbiAgICBoYW5kbGU6IGRvd25zdHJlYW1SZXF1ZXN0ID0+IGNoYWluVGFpbEZuKGRvd25zdHJlYW1SZXF1ZXN0LCBmaW5hbEhhbmRsZXJGbilcbiAgfSk7XG59XG5mdW5jdGlvbiBjaGFpbmVkSW50ZXJjZXB0b3JGbihjaGFpblRhaWxGbiwgaW50ZXJjZXB0b3JGbiwgaW5qZWN0b3IpIHtcbiAgcmV0dXJuIChpbml0aWFsUmVxdWVzdCwgZmluYWxIYW5kbGVyRm4pID0+IHJ1bkluSW5qZWN0aW9uQ29udGV4dChpbmplY3RvciwgKCkgPT4gaW50ZXJjZXB0b3JGbihpbml0aWFsUmVxdWVzdCwgZG93bnN0cmVhbVJlcXVlc3QgPT4gY2hhaW5UYWlsRm4oZG93bnN0cmVhbVJlcXVlc3QsIGZpbmFsSGFuZGxlckZuKSkpO1xufVxuY29uc3QgSFRUUF9JTlRFUkNFUFRPUlMgPSAvKiNfX1BVUkVfXyovbmV3IEluamVjdGlvblRva2VuKHR5cGVvZiBuZ0Rldk1vZGUgIT09ICd1bmRlZmluZWQnICYmIG5nRGV2TW9kZSA/ICdIVFRQX0lOVEVSQ0VQVE9SUycgOiAnJyk7XG5jb25zdCBIVFRQX0lOVEVSQ0VQVE9SX0ZOUyA9IC8qI19fUFVSRV9fKi9uZXcgSW5qZWN0aW9uVG9rZW4odHlwZW9mIG5nRGV2TW9kZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbmdEZXZNb2RlID8gJ0hUVFBfSU5URVJDRVBUT1JfRk5TJyA6ICcnLCB7XG4gIGZhY3Rvcnk6ICgpID0+IFtdXG59KTtcbmNvbnN0IEhUVFBfUk9PVF9JTlRFUkNFUFRPUl9GTlMgPSAvKiNfX1BVUkVfXyovbmV3IEluamVjdGlvblRva2VuKHR5cGVvZiBuZ0Rldk1vZGUgIT09ICd1bmRlZmluZWQnICYmIG5nRGV2TW9kZSA/ICdIVFRQX1JPT1RfSU5URVJDRVBUT1JfRk5TJyA6ICcnKTtcbmNvbnN0IFJFUVVFU1RTX0NPTlRSSUJVVEVfVE9fU1RBQklMSVRZID0gLyojX19QVVJFX18qL25ldyBJbmplY3Rpb25Ub2tlbih0eXBlb2YgbmdEZXZNb2RlICE9PSAndW5kZWZpbmVkJyAmJiBuZ0Rldk1vZGUgPyAnUkVRVUVTVFNfQ09OVFJJQlVURV9UT19TVEFCSUxJVFknIDogJycsIHtcbiAgZmFjdG9yeTogKCkgPT4gdHJ1ZVxufSk7XG5mdW5jdGlvbiBsZWdhY3lJbnRlcmNlcHRvckZuRmFjdG9yeSgpIHtcbiAgbGV0IGNoYWluID0gbnVsbDtcbiAgcmV0dXJuIChyZXEsIGhhbmRsZXIpID0+IHtcbiAgICBpZiAoY2hhaW4gPT09IG51bGwpIHtcbiAgICAgIGNvbnN0IGludGVyY2VwdG9ycyA9IGluamVjdChIVFRQX0lOVEVSQ0VQVE9SUywge1xuICAgICAgICBvcHRpb25hbDogdHJ1ZVxuICAgICAgfSkgPz8gW107XG4gICAgICBjaGFpbiA9IGludGVyY2VwdG9ycy5yZWR1Y2VSaWdodChhZGFwdExlZ2FjeUludGVyY2VwdG9yVG9DaGFpbiwgaW50ZXJjZXB0b3JDaGFpbkVuZEZuKTtcbiAgICB9XG4gICAgY29uc3QgcGVuZGluZ1Rhc2tzID0gaW5qZWN0KFBlbmRpbmdUYXNrcyk7XG4gICAgY29uc3QgY29udHJpYnV0ZVRvU3RhYmlsaXR5ID0gaW5qZWN0KFJFUVVFU1RTX0NPTlRSSUJVVEVfVE9fU1RBQklMSVRZKTtcbiAgICBpZiAoY29udHJpYnV0ZVRvU3RhYmlsaXR5KSB7XG4gICAgICBjb25zdCByZW1vdmVUYXNrID0gcGVuZGluZ1Rhc2tzLmFkZCgpO1xuICAgICAgcmV0dXJuIGNoYWluKHJlcSwgaGFuZGxlcikucGlwZShmaW5hbGl6ZShyZW1vdmVUYXNrKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBjaGFpbihyZXEsIGhhbmRsZXIpO1xuICAgIH1cbiAgfTtcbn1cbmxldCBIdHRwQmFja2VuZCA9IC8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICBjbGFzcyBIdHRwQmFja2VuZCB7XG4gICAgc3RhdGljIMm1ZmFjID0gZnVuY3Rpb24gSHR0cEJhY2tlbmRfRmFjdG9yeShfX25nRmFjdG9yeVR5cGVfXykge1xuICAgICAgcmV0dXJuIG5ldyAoX19uZ0ZhY3RvcnlUeXBlX18gfHwgSHR0cEJhY2tlbmQpKCk7XG4gICAgfTtcbiAgICBzdGF0aWMgybVwcm92ID0gLyogQF9fUFVSRV9fICovaTAuybXJtWRlZmluZUluamVjdGFibGUoe1xuICAgICAgdG9rZW46IEh0dHBCYWNrZW5kLFxuICAgICAgZmFjdG9yeTogZnVuY3Rpb24gSHR0cEJhY2tlbmRfRmFjdG9yeShfX25nRmFjdG9yeVR5cGVfXykge1xuICAgICAgICBsZXQgX19uZ0NvbmRpdGlvbmFsRmFjdG9yeV9fID0gbnVsbDtcbiAgICAgICAgaWYgKF9fbmdGYWN0b3J5VHlwZV9fKSB7XG4gICAgICAgICAgX19uZ0NvbmRpdGlvbmFsRmFjdG9yeV9fID0gbmV3IChfX25nRmFjdG9yeVR5cGVfXyB8fCBIdHRwQmFja2VuZCkoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBfX25nQ29uZGl0aW9uYWxGYWN0b3J5X18gPSBpMC7Jtcm1aW5qZWN0KEh0dHBYaHJCYWNrZW5kKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX19uZ0NvbmRpdGlvbmFsRmFjdG9yeV9fO1xuICAgICAgfSxcbiAgICAgIHByb3ZpZGVkSW46ICdyb290J1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBIdHRwQmFja2VuZDtcbn0pKCk7XG4vKiNfX1BVUkVfXyovKCgpID0+IHtcbiAgKHR5cGVvZiBuZ0Rldk1vZGUgPT09IFwidW5kZWZpbmVkXCIgfHwgbmdEZXZNb2RlKSAmJiB2b2lkIDA7XG59KSgpO1xubGV0IGZldGNoQmFja2VuZFdhcm5pbmdEaXNwbGF5ZWQgPSBmYWxzZTtcbmxldCBIdHRwSW50ZXJjZXB0b3JIYW5kbGVyID0gLyojX19QVVJFX18qLygoKSA9PiB7XG4gIGNsYXNzIEh0dHBJbnRlcmNlcHRvckhhbmRsZXIge1xuICAgIGJhY2tlbmQ7XG4gICAgaW5qZWN0b3I7XG4gICAgY2hhaW4gPSBudWxsO1xuICAgIHBlbmRpbmdUYXNrcyA9IGluamVjdChQZW5kaW5nVGFza3MpO1xuICAgIGNvbnRyaWJ1dGVUb1N0YWJpbGl0eSA9IGluamVjdChSRVFVRVNUU19DT05UUklCVVRFX1RPX1NUQUJJTElUWSk7XG4gICAgY29uc3RydWN0b3IoYmFja2VuZCwgaW5qZWN0b3IpIHtcbiAgICAgIHRoaXMuYmFja2VuZCA9IGJhY2tlbmQ7XG4gICAgICB0aGlzLmluamVjdG9yID0gaW5qZWN0b3I7XG4gICAgICBpZiAoKHR5cGVvZiBuZ0Rldk1vZGUgPT09ICd1bmRlZmluZWQnIHx8IG5nRGV2TW9kZSkgJiYgIWZldGNoQmFja2VuZFdhcm5pbmdEaXNwbGF5ZWQpIHtcbiAgICAgICAgY29uc3QgaXNUZXN0aW5nQmFja2VuZCA9IHRoaXMuYmFja2VuZC5pc1Rlc3RpbmdCYWNrZW5kO1xuICAgICAgICBpZiAodHlwZW9mIG5nU2VydmVyTW9kZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbmdTZXJ2ZXJNb2RlICYmICEodGhpcy5iYWNrZW5kIGluc3RhbmNlb2YgRmV0Y2hCYWNrZW5kKSAmJiAhaXNUZXN0aW5nQmFja2VuZCkge1xuICAgICAgICAgIGZldGNoQmFja2VuZFdhcm5pbmdEaXNwbGF5ZWQgPSB0cnVlO1xuICAgICAgICAgIGluamVjdG9yLmdldChfQ29uc29sZSkud2FybihfZm9ybWF0UnVudGltZUVycm9yKDI4MDEsICdBbmd1bGFyIGRldGVjdGVkIHRoYXQgYEh0dHBDbGllbnRgIGlzIG5vdCBjb25maWd1cmVkICcgKyBcInRvIHVzZSBgZmV0Y2hgIEFQSXMuIEl0J3Mgc3Ryb25nbHkgcmVjb21tZW5kZWQgdG8gXCIgKyAnZW5hYmxlIGBmZXRjaGAgZm9yIGFwcGxpY2F0aW9ucyB0aGF0IHVzZSBTZXJ2ZXItU2lkZSBSZW5kZXJpbmcgJyArICdmb3IgYmV0dGVyIHBlcmZvcm1hbmNlIGFuZCBjb21wYXRpYmlsaXR5LiAnICsgJ1RvIGVuYWJsZSBgZmV0Y2hgLCBhZGQgdGhlIGB3aXRoRmV0Y2goKWAgdG8gdGhlIGBwcm92aWRlSHR0cENsaWVudCgpYCAnICsgJ2NhbGwgYXQgdGhlIHJvb3Qgb2YgdGhlIGFwcGxpY2F0aW9uLicpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBoYW5kbGUoaW5pdGlhbFJlcXVlc3QpIHtcbiAgICAgIGlmICh0aGlzLmNoYWluID09PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IGRlZHVwZWRJbnRlcmNlcHRvckZucyA9IEFycmF5LmZyb20obmV3IFNldChbLi4udGhpcy5pbmplY3Rvci5nZXQoSFRUUF9JTlRFUkNFUFRPUl9GTlMpLCAuLi50aGlzLmluamVjdG9yLmdldChIVFRQX1JPT1RfSU5URVJDRVBUT1JfRk5TLCBbXSldKSk7XG4gICAgICAgIHRoaXMuY2hhaW4gPSBkZWR1cGVkSW50ZXJjZXB0b3JGbnMucmVkdWNlUmlnaHQoKG5leHRTZXF1ZW5jZWRGbiwgaW50ZXJjZXB0b3JGbikgPT4gY2hhaW5lZEludGVyY2VwdG9yRm4obmV4dFNlcXVlbmNlZEZuLCBpbnRlcmNlcHRvckZuLCB0aGlzLmluamVjdG9yKSwgaW50ZXJjZXB0b3JDaGFpbkVuZEZuKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmNvbnRyaWJ1dGVUb1N0YWJpbGl0eSkge1xuICAgICAgICBjb25zdCByZW1vdmVUYXNrID0gdGhpcy5wZW5kaW5nVGFza3MuYWRkKCk7XG4gICAgICAgIHJldHVybiB0aGlzLmNoYWluKGluaXRpYWxSZXF1ZXN0LCBkb3duc3RyZWFtUmVxdWVzdCA9PiB0aGlzLmJhY2tlbmQuaGFuZGxlKGRvd25zdHJlYW1SZXF1ZXN0KSkucGlwZShmaW5hbGl6ZShyZW1vdmVUYXNrKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5jaGFpbihpbml0aWFsUmVxdWVzdCwgZG93bnN0cmVhbVJlcXVlc3QgPT4gdGhpcy5iYWNrZW5kLmhhbmRsZShkb3duc3RyZWFtUmVxdWVzdCkpO1xuICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgybVmYWMgPSBmdW5jdGlvbiBIdHRwSW50ZXJjZXB0b3JIYW5kbGVyX0ZhY3RvcnkoX19uZ0ZhY3RvcnlUeXBlX18pIHtcbiAgICAgIHJldHVybiBuZXcgKF9fbmdGYWN0b3J5VHlwZV9fIHx8IEh0dHBJbnRlcmNlcHRvckhhbmRsZXIpKGkwLsm1ybVpbmplY3QoSHR0cEJhY2tlbmQpLCBpMC7Jtcm1aW5qZWN0KGkwLkVudmlyb25tZW50SW5qZWN0b3IpKTtcbiAgICB9O1xuICAgIHN0YXRpYyDJtXByb3YgPSAvKiBAX19QVVJFX18gKi9pMC7Jtcm1ZGVmaW5lSW5qZWN0YWJsZSh7XG4gICAgICB0b2tlbjogSHR0cEludGVyY2VwdG9ySGFuZGxlcixcbiAgICAgIGZhY3Rvcnk6IEh0dHBJbnRlcmNlcHRvckhhbmRsZXIuybVmYWMsXG4gICAgICBwcm92aWRlZEluOiAncm9vdCdcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gSHR0cEludGVyY2VwdG9ySGFuZGxlcjtcbn0pKCk7XG4vKiNfX1BVUkVfXyovKCgpID0+IHtcbiAgKHR5cGVvZiBuZ0Rldk1vZGUgPT09IFwidW5kZWZpbmVkXCIgfHwgbmdEZXZNb2RlKSAmJiB2b2lkIDA7XG59KSgpO1xubGV0IEh0dHBIYW5kbGVyID0gLyojX19QVVJFX18qLygoKSA9PiB7XG4gIGNsYXNzIEh0dHBIYW5kbGVyIHtcbiAgICBzdGF0aWMgybVmYWMgPSBmdW5jdGlvbiBIdHRwSGFuZGxlcl9GYWN0b3J5KF9fbmdGYWN0b3J5VHlwZV9fKSB7XG4gICAgICByZXR1cm4gbmV3IChfX25nRmFjdG9yeVR5cGVfXyB8fCBIdHRwSGFuZGxlcikoKTtcbiAgICB9O1xuICAgIHN0YXRpYyDJtXByb3YgPSAvKiBAX19QVVJFX18gKi9pMC7Jtcm1ZGVmaW5lSW5qZWN0YWJsZSh7XG4gICAgICB0b2tlbjogSHR0cEhhbmRsZXIsXG4gICAgICBmYWN0b3J5OiBmdW5jdGlvbiBIdHRwSGFuZGxlcl9GYWN0b3J5KF9fbmdGYWN0b3J5VHlwZV9fKSB7XG4gICAgICAgIGxldCBfX25nQ29uZGl0aW9uYWxGYWN0b3J5X18gPSBudWxsO1xuICAgICAgICBpZiAoX19uZ0ZhY3RvcnlUeXBlX18pIHtcbiAgICAgICAgICBfX25nQ29uZGl0aW9uYWxGYWN0b3J5X18gPSBuZXcgKF9fbmdGYWN0b3J5VHlwZV9fIHx8IEh0dHBIYW5kbGVyKSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIF9fbmdDb25kaXRpb25hbEZhY3RvcnlfXyA9IGkwLsm1ybVpbmplY3QoSHR0cEludGVyY2VwdG9ySGFuZGxlcik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF9fbmdDb25kaXRpb25hbEZhY3RvcnlfXztcbiAgICAgIH0sXG4gICAgICBwcm92aWRlZEluOiAncm9vdCdcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gSHR0cEhhbmRsZXI7XG59KSgpO1xuLyojX19QVVJFX18qLygoKSA9PiB7XG4gICh0eXBlb2YgbmdEZXZNb2RlID09PSBcInVuZGVmaW5lZFwiIHx8IG5nRGV2TW9kZSkgJiYgdm9pZCAwO1xufSkoKTtcbmZ1bmN0aW9uIGFkZEJvZHkob3B0aW9ucywgYm9keSkge1xuICByZXR1cm4ge1xuICAgIGJvZHksXG4gICAgaGVhZGVyczogb3B0aW9ucy5oZWFkZXJzLFxuICAgIGNvbnRleHQ6IG9wdGlvbnMuY29udGV4dCxcbiAgICBvYnNlcnZlOiBvcHRpb25zLm9ic2VydmUsXG4gICAgcGFyYW1zOiBvcHRpb25zLnBhcmFtcyxcbiAgICByZXBvcnRQcm9ncmVzczogb3B0aW9ucy5yZXBvcnRQcm9ncmVzcyxcbiAgICByZXNwb25zZVR5cGU6IG9wdGlvbnMucmVzcG9uc2VUeXBlLFxuICAgIHdpdGhDcmVkZW50aWFsczogb3B0aW9ucy53aXRoQ3JlZGVudGlhbHMsXG4gICAgY3JlZGVudGlhbHM6IG9wdGlvbnMuY3JlZGVudGlhbHMsXG4gICAgdHJhbnNmZXJDYWNoZTogb3B0aW9ucy50cmFuc2ZlckNhY2hlLFxuICAgIHRpbWVvdXQ6IG9wdGlvbnMudGltZW91dCxcbiAgICBrZWVwYWxpdmU6IG9wdGlvbnMua2VlcGFsaXZlLFxuICAgIHByaW9yaXR5OiBvcHRpb25zLnByaW9yaXR5LFxuICAgIGNhY2hlOiBvcHRpb25zLmNhY2hlLFxuICAgIG1vZGU6IG9wdGlvbnMubW9kZSxcbiAgICByZWRpcmVjdDogb3B0aW9ucy5yZWRpcmVjdCxcbiAgICBpbnRlZ3JpdHk6IG9wdGlvbnMuaW50ZWdyaXR5LFxuICAgIHJlZmVycmVyOiBvcHRpb25zLnJlZmVycmVyLFxuICAgIHJlZmVycmVyUG9saWN5OiBvcHRpb25zLnJlZmVycmVyUG9saWN5XG4gIH07XG59XG5sZXQgSHR0cENsaWVudCA9IC8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICBjbGFzcyBIdHRwQ2xpZW50IHtcbiAgICBoYW5kbGVyO1xuICAgIGNvbnN0cnVjdG9yKGhhbmRsZXIpIHtcbiAgICAgIHRoaXMuaGFuZGxlciA9IGhhbmRsZXI7XG4gICAgfVxuICAgIHJlcXVlc3QoZmlyc3QsIHVybCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICBsZXQgcmVxO1xuICAgICAgaWYgKGZpcnN0IGluc3RhbmNlb2YgSHR0cFJlcXVlc3QpIHtcbiAgICAgICAgcmVxID0gZmlyc3Q7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZXQgaGVhZGVycyA9IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKG9wdGlvbnMuaGVhZGVycyBpbnN0YW5jZW9mIEh0dHBIZWFkZXJzKSB7XG4gICAgICAgICAgaGVhZGVycyA9IG9wdGlvbnMuaGVhZGVycztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKG9wdGlvbnMuaGVhZGVycyk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHBhcmFtcyA9IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKCEhb3B0aW9ucy5wYXJhbXMpIHtcbiAgICAgICAgICBpZiAob3B0aW9ucy5wYXJhbXMgaW5zdGFuY2VvZiBIdHRwUGFyYW1zKSB7XG4gICAgICAgICAgICBwYXJhbXMgPSBvcHRpb25zLnBhcmFtcztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoe1xuICAgICAgICAgICAgICBmcm9tT2JqZWN0OiBvcHRpb25zLnBhcmFtc1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJlcSA9IG5ldyBIdHRwUmVxdWVzdChmaXJzdCwgdXJsLCBvcHRpb25zLmJvZHkgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMuYm9keSA6IG51bGwsIHtcbiAgICAgICAgICBoZWFkZXJzLFxuICAgICAgICAgIGNvbnRleHQ6IG9wdGlvbnMuY29udGV4dCxcbiAgICAgICAgICBwYXJhbXMsXG4gICAgICAgICAgcmVwb3J0UHJvZ3Jlc3M6IG9wdGlvbnMucmVwb3J0UHJvZ3Jlc3MsXG4gICAgICAgICAgcmVzcG9uc2VUeXBlOiBvcHRpb25zLnJlc3BvbnNlVHlwZSB8fCAnanNvbicsXG4gICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiBvcHRpb25zLndpdGhDcmVkZW50aWFscyxcbiAgICAgICAgICB0cmFuc2ZlckNhY2hlOiBvcHRpb25zLnRyYW5zZmVyQ2FjaGUsXG4gICAgICAgICAga2VlcGFsaXZlOiBvcHRpb25zLmtlZXBhbGl2ZSxcbiAgICAgICAgICBwcmlvcml0eTogb3B0aW9ucy5wcmlvcml0eSxcbiAgICAgICAgICBjYWNoZTogb3B0aW9ucy5jYWNoZSxcbiAgICAgICAgICBtb2RlOiBvcHRpb25zLm1vZGUsXG4gICAgICAgICAgcmVkaXJlY3Q6IG9wdGlvbnMucmVkaXJlY3QsXG4gICAgICAgICAgY3JlZGVudGlhbHM6IG9wdGlvbnMuY3JlZGVudGlhbHMsXG4gICAgICAgICAgcmVmZXJyZXI6IG9wdGlvbnMucmVmZXJyZXIsXG4gICAgICAgICAgcmVmZXJyZXJQb2xpY3k6IG9wdGlvbnMucmVmZXJyZXJQb2xpY3ksXG4gICAgICAgICAgaW50ZWdyaXR5OiBvcHRpb25zLmludGVncml0eSxcbiAgICAgICAgICB0aW1lb3V0OiBvcHRpb25zLnRpbWVvdXRcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBjb25zdCBldmVudHMkID0gb2YocmVxKS5waXBlKGNvbmNhdE1hcChyZXEgPT4gdGhpcy5oYW5kbGVyLmhhbmRsZShyZXEpKSk7XG4gICAgICBpZiAoZmlyc3QgaW5zdGFuY2VvZiBIdHRwUmVxdWVzdCB8fCBvcHRpb25zLm9ic2VydmUgPT09ICdldmVudHMnKSB7XG4gICAgICAgIHJldHVybiBldmVudHMkO1xuICAgICAgfVxuICAgICAgY29uc3QgcmVzJCA9IGV2ZW50cyQucGlwZShmaWx0ZXIoZXZlbnQgPT4gZXZlbnQgaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2UpKTtcbiAgICAgIHN3aXRjaCAob3B0aW9ucy5vYnNlcnZlIHx8ICdib2R5Jykge1xuICAgICAgICBjYXNlICdib2R5JzpcbiAgICAgICAgICBzd2l0Y2ggKHJlcS5yZXNwb25zZVR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ2FycmF5YnVmZmVyJzpcbiAgICAgICAgICAgICAgcmV0dXJuIHJlcyQucGlwZShtYXAocmVzID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocmVzLmJvZHkgIT09IG51bGwgJiYgIShyZXMuYm9keSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSkge1xuICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IF9SdW50aW1lRXJyb3IoMjgwNiwgbmdEZXZNb2RlICYmICdSZXNwb25zZSBpcyBub3QgYW4gQXJyYXlCdWZmZXIuJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiByZXMuYm9keTtcbiAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgY2FzZSAnYmxvYic6XG4gICAgICAgICAgICAgIHJldHVybiByZXMkLnBpcGUobWFwKHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHJlcy5ib2R5ICE9PSBudWxsICYmICEocmVzLmJvZHkgaW5zdGFuY2VvZiBCbG9iKSkge1xuICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IF9SdW50aW1lRXJyb3IoMjgwNywgbmdEZXZNb2RlICYmICdSZXNwb25zZSBpcyBub3QgYSBCbG9iLicpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzLmJvZHk7XG4gICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIGNhc2UgJ3RleHQnOlxuICAgICAgICAgICAgICByZXR1cm4gcmVzJC5waXBlKG1hcChyZXMgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChyZXMuYm9keSAhPT0gbnVsbCAmJiB0eXBlb2YgcmVzLmJvZHkgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX1J1bnRpbWVFcnJvcigyODA4LCBuZ0Rldk1vZGUgJiYgJ1Jlc3BvbnNlIGlzIG5vdCBhIHN0cmluZy4nKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlcy5ib2R5O1xuICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICBjYXNlICdqc29uJzpcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIHJldHVybiByZXMkLnBpcGUobWFwKHJlcyA9PiByZXMuYm9keSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgY2FzZSAncmVzcG9uc2UnOlxuICAgICAgICAgIHJldHVybiByZXMkO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IG5ldyBfUnVudGltZUVycm9yKDI4MDksIG5nRGV2TW9kZSAmJiBgVW5yZWFjaGFibGU6IHVuaGFuZGxlZCBvYnNlcnZlIHR5cGUgJHtvcHRpb25zLm9ic2VydmV9fWApO1xuICAgICAgfVxuICAgIH1cbiAgICBkZWxldGUodXJsLCBvcHRpb25zID0ge30pIHtcbiAgICAgIHJldHVybiB0aGlzLnJlcXVlc3QoJ0RFTEVURScsIHVybCwgb3B0aW9ucyk7XG4gICAgfVxuICAgIGdldCh1cmwsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgcmV0dXJuIHRoaXMucmVxdWVzdCgnR0VUJywgdXJsLCBvcHRpb25zKTtcbiAgICB9XG4gICAgaGVhZCh1cmwsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgcmV0dXJuIHRoaXMucmVxdWVzdCgnSEVBRCcsIHVybCwgb3B0aW9ucyk7XG4gICAgfVxuICAgIGpzb25wKHVybCwgY2FsbGJhY2tQYXJhbSkge1xuICAgICAgcmV0dXJuIHRoaXMucmVxdWVzdCgnSlNPTlAnLCB1cmwsIHtcbiAgICAgICAgcGFyYW1zOiBuZXcgSHR0cFBhcmFtcygpLmFwcGVuZChjYWxsYmFja1BhcmFtLCAnSlNPTlBfQ0FMTEJBQ0snKSxcbiAgICAgICAgb2JzZXJ2ZTogJ2JvZHknLFxuICAgICAgICByZXNwb25zZVR5cGU6ICdqc29uJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIG9wdGlvbnModXJsLCBvcHRpb25zID0ge30pIHtcbiAgICAgIHJldHVybiB0aGlzLnJlcXVlc3QoJ09QVElPTlMnLCB1cmwsIG9wdGlvbnMpO1xuICAgIH1cbiAgICBwYXRjaCh1cmwsIGJvZHksIG9wdGlvbnMgPSB7fSkge1xuICAgICAgcmV0dXJuIHRoaXMucmVxdWVzdCgnUEFUQ0gnLCB1cmwsIGFkZEJvZHkob3B0aW9ucywgYm9keSkpO1xuICAgIH1cbiAgICBwb3N0KHVybCwgYm9keSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KCdQT1NUJywgdXJsLCBhZGRCb2R5KG9wdGlvbnMsIGJvZHkpKTtcbiAgICB9XG4gICAgcHV0KHVybCwgYm9keSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KCdQVVQnLCB1cmwsIGFkZEJvZHkob3B0aW9ucywgYm9keSkpO1xuICAgIH1cbiAgICBzdGF0aWMgybVmYWMgPSBmdW5jdGlvbiBIdHRwQ2xpZW50X0ZhY3RvcnkoX19uZ0ZhY3RvcnlUeXBlX18pIHtcbiAgICAgIHJldHVybiBuZXcgKF9fbmdGYWN0b3J5VHlwZV9fIHx8IEh0dHBDbGllbnQpKGkwLsm1ybVpbmplY3QoSHR0cEhhbmRsZXIpKTtcbiAgICB9O1xuICAgIHN0YXRpYyDJtXByb3YgPSAvKiBAX19QVVJFX18gKi9pMC7Jtcm1ZGVmaW5lSW5qZWN0YWJsZSh7XG4gICAgICB0b2tlbjogSHR0cENsaWVudCxcbiAgICAgIGZhY3Rvcnk6IEh0dHBDbGllbnQuybVmYWMsXG4gICAgICBwcm92aWRlZEluOiAncm9vdCdcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gSHR0cENsaWVudDtcbn0pKCk7XG4vKiNfX1BVUkVfXyovKCgpID0+IHtcbiAgKHR5cGVvZiBuZ0Rldk1vZGUgPT09IFwidW5kZWZpbmVkXCIgfHwgbmdEZXZNb2RlKSAmJiB2b2lkIDA7XG59KSgpO1xubGV0IG5leHRSZXF1ZXN0SWQgPSAwO1xubGV0IGZvcmVpZ25Eb2N1bWVudDtcbmNvbnN0IEpTT05QX0VSUl9OT19DQUxMQkFDSyA9ICdKU09OUCBpbmplY3RlZCBzY3JpcHQgZGlkIG5vdCBpbnZva2UgY2FsbGJhY2suJztcbmNvbnN0IEpTT05QX0VSUl9XUk9OR19NRVRIT0QgPSAnSlNPTlAgcmVxdWVzdHMgbXVzdCB1c2UgSlNPTlAgcmVxdWVzdCBtZXRob2QuJztcbmNvbnN0IEpTT05QX0VSUl9XUk9OR19SRVNQT05TRV9UWVBFID0gJ0pTT05QIHJlcXVlc3RzIG11c3QgdXNlIEpzb24gcmVzcG9uc2UgdHlwZS4nO1xuY29uc3QgSlNPTlBfRVJSX0hFQURFUlNfTk9UX1NVUFBPUlRFRCA9ICdKU09OUCByZXF1ZXN0cyBkbyBub3Qgc3VwcG9ydCBoZWFkZXJzLic7XG5jbGFzcyBKc29ucENhbGxiYWNrQ29udGV4dCB7fVxuZnVuY3Rpb24ganNvbnBDYWxsYmFja0NvbnRleHQoKSB7XG4gIGlmICh0eXBlb2Ygd2luZG93ID09PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiB3aW5kb3c7XG4gIH1cbiAgcmV0dXJuIHt9O1xufVxubGV0IEpzb25wQ2xpZW50QmFja2VuZCA9IC8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICBjbGFzcyBKc29ucENsaWVudEJhY2tlbmQge1xuICAgIGNhbGxiYWNrTWFwO1xuICAgIGRvY3VtZW50O1xuICAgIHJlc29sdmVkUHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSgpO1xuICAgIGNvbnN0cnVjdG9yKGNhbGxiYWNrTWFwLCBkb2N1bWVudCkge1xuICAgICAgdGhpcy5jYWxsYmFja01hcCA9IGNhbGxiYWNrTWFwO1xuICAgICAgdGhpcy5kb2N1bWVudCA9IGRvY3VtZW50O1xuICAgIH1cbiAgICBuZXh0Q2FsbGJhY2soKSB7XG4gICAgICByZXR1cm4gYG5nX2pzb25wX2NhbGxiYWNrXyR7bmV4dFJlcXVlc3RJZCsrfWA7XG4gICAgfVxuICAgIGhhbmRsZShyZXEpIHtcbiAgICAgIGlmIChyZXEubWV0aG9kICE9PSAnSlNPTlAnKSB7XG4gICAgICAgIHRocm93IG5ldyBfUnVudGltZUVycm9yKDI4MTAsIG5nRGV2TW9kZSAmJiBKU09OUF9FUlJfV1JPTkdfTUVUSE9EKTtcbiAgICAgIH0gZWxzZSBpZiAocmVxLnJlc3BvbnNlVHlwZSAhPT0gJ2pzb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBfUnVudGltZUVycm9yKDI4MTEsIG5nRGV2TW9kZSAmJiBKU09OUF9FUlJfV1JPTkdfUkVTUE9OU0VfVFlQRSk7XG4gICAgICB9XG4gICAgICBpZiAocmVxLmhlYWRlcnMua2V5cygpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IF9SdW50aW1lRXJyb3IoMjgxMiwgbmdEZXZNb2RlICYmIEpTT05QX0VSUl9IRUFERVJTX05PVF9TVVBQT1JURUQpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKG9ic2VydmVyID0+IHtcbiAgICAgICAgY29uc3QgY2FsbGJhY2sgPSB0aGlzLm5leHRDYWxsYmFjaygpO1xuICAgICAgICBjb25zdCB1cmwgPSByZXEudXJsV2l0aFBhcmFtcy5yZXBsYWNlKC89SlNPTlBfQ0FMTEJBQ0soJnwkKS8sIGA9JHtjYWxsYmFja30kMWApO1xuICAgICAgICBjb25zdCBub2RlID0gdGhpcy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcbiAgICAgICAgbm9kZS5zcmMgPSB1cmw7XG4gICAgICAgIGxldCBib2R5ID0gbnVsbDtcbiAgICAgICAgbGV0IGZpbmlzaGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY2FsbGJhY2tNYXBbY2FsbGJhY2tdID0gZGF0YSA9PiB7XG4gICAgICAgICAgZGVsZXRlIHRoaXMuY2FsbGJhY2tNYXBbY2FsbGJhY2tdO1xuICAgICAgICAgIGJvZHkgPSBkYXRhO1xuICAgICAgICAgIGZpbmlzaGVkID0gdHJ1ZTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgY2xlYW51cCA9ICgpID0+IHtcbiAgICAgICAgICBub2RlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBvbkxvYWQpO1xuICAgICAgICAgIG5vZGUucmVtb3ZlRXZlbnRMaXN0ZW5lcignZXJyb3InLCBvbkVycm9yKTtcbiAgICAgICAgICBub2RlLnJlbW92ZSgpO1xuICAgICAgICAgIGRlbGV0ZSB0aGlzLmNhbGxiYWNrTWFwW2NhbGxiYWNrXTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3Qgb25Mb2FkID0gKCkgPT4ge1xuICAgICAgICAgIHRoaXMucmVzb2x2ZWRQcm9taXNlLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgY2xlYW51cCgpO1xuICAgICAgICAgICAgaWYgKCFmaW5pc2hlZCkge1xuICAgICAgICAgICAgICBvYnNlcnZlci5lcnJvcihuZXcgSHR0cEVycm9yUmVzcG9uc2Uoe1xuICAgICAgICAgICAgICAgIHVybCxcbiAgICAgICAgICAgICAgICBzdGF0dXM6IDAsXG4gICAgICAgICAgICAgICAgc3RhdHVzVGV4dDogJ0pTT05QIEVycm9yJyxcbiAgICAgICAgICAgICAgICBlcnJvcjogbmV3IEVycm9yKEpTT05QX0VSUl9OT19DQUxMQkFDSylcbiAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvYnNlcnZlci5uZXh0KG5ldyBIdHRwUmVzcG9uc2Uoe1xuICAgICAgICAgICAgICBib2R5LFxuICAgICAgICAgICAgICBzdGF0dXM6IEhUVFBfU1RBVFVTX0NPREVfT0ssXG4gICAgICAgICAgICAgIHN0YXR1c1RleHQ6ICdPSycsXG4gICAgICAgICAgICAgIHVybFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3Qgb25FcnJvciA9IGVycm9yID0+IHtcbiAgICAgICAgICBjbGVhbnVwKCk7XG4gICAgICAgICAgb2JzZXJ2ZXIuZXJyb3IobmV3IEh0dHBFcnJvclJlc3BvbnNlKHtcbiAgICAgICAgICAgIGVycm9yLFxuICAgICAgICAgICAgc3RhdHVzOiAwLFxuICAgICAgICAgICAgc3RhdHVzVGV4dDogJ0pTT05QIEVycm9yJyxcbiAgICAgICAgICAgIHVybFxuICAgICAgICAgIH0pKTtcbiAgICAgICAgfTtcbiAgICAgICAgbm9kZS5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgb25Mb2FkKTtcbiAgICAgICAgbm9kZS5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIG9uRXJyb3IpO1xuICAgICAgICB0aGlzLmRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobm9kZSk7XG4gICAgICAgIG9ic2VydmVyLm5leHQoe1xuICAgICAgICAgIHR5cGU6IEh0dHBFdmVudFR5cGUuU2VudFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICBpZiAoIWZpbmlzaGVkKSB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZUxpc3RlbmVycyhub2RlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2xlYW51cCgpO1xuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJlbW92ZUxpc3RlbmVycyhzY3JpcHQpIHtcbiAgICAgIGZvcmVpZ25Eb2N1bWVudCA/Pz0gdGhpcy5kb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoKTtcbiAgICAgIGZvcmVpZ25Eb2N1bWVudC5hZG9wdE5vZGUoc2NyaXB0KTtcbiAgICB9XG4gICAgc3RhdGljIMm1ZmFjID0gZnVuY3Rpb24gSnNvbnBDbGllbnRCYWNrZW5kX0ZhY3RvcnkoX19uZ0ZhY3RvcnlUeXBlX18pIHtcbiAgICAgIHJldHVybiBuZXcgKF9fbmdGYWN0b3J5VHlwZV9fIHx8IEpzb25wQ2xpZW50QmFja2VuZCkoaTAuybXJtWluamVjdChKc29ucENhbGxiYWNrQ29udGV4dCksIGkwLsm1ybVpbmplY3QoRE9DVU1FTlQpKTtcbiAgICB9O1xuICAgIHN0YXRpYyDJtXByb3YgPSAvKiBAX19QVVJFX18gKi9pMC7Jtcm1ZGVmaW5lSW5qZWN0YWJsZSh7XG4gICAgICB0b2tlbjogSnNvbnBDbGllbnRCYWNrZW5kLFxuICAgICAgZmFjdG9yeTogSnNvbnBDbGllbnRCYWNrZW5kLsm1ZmFjXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIEpzb25wQ2xpZW50QmFja2VuZDtcbn0pKCk7XG4vKiNfX1BVUkVfXyovKCgpID0+IHtcbiAgKHR5cGVvZiBuZ0Rldk1vZGUgPT09IFwidW5kZWZpbmVkXCIgfHwgbmdEZXZNb2RlKSAmJiB2b2lkIDA7XG59KSgpO1xuZnVuY3Rpb24ganNvbnBJbnRlcmNlcHRvckZuKHJlcSwgbmV4dCkge1xuICBpZiAocmVxLm1ldGhvZCA9PT0gJ0pTT05QJykge1xuICAgIHJldHVybiBpbmplY3QoSnNvbnBDbGllbnRCYWNrZW5kKS5oYW5kbGUocmVxKTtcbiAgfVxuICByZXR1cm4gbmV4dChyZXEpO1xufVxubGV0IEpzb25wSW50ZXJjZXB0b3IgPSAvKiNfX1BVUkVfXyovKCgpID0+IHtcbiAgY2xhc3MgSnNvbnBJbnRlcmNlcHRvciB7XG4gICAgaW5qZWN0b3I7XG4gICAgY29uc3RydWN0b3IoaW5qZWN0b3IpIHtcbiAgICAgIHRoaXMuaW5qZWN0b3IgPSBpbmplY3RvcjtcbiAgICB9XG4gICAgaW50ZXJjZXB0KGluaXRpYWxSZXF1ZXN0LCBuZXh0KSB7XG4gICAgICByZXR1cm4gcnVuSW5JbmplY3Rpb25Db250ZXh0KHRoaXMuaW5qZWN0b3IsICgpID0+IGpzb25wSW50ZXJjZXB0b3JGbihpbml0aWFsUmVxdWVzdCwgZG93bnN0cmVhbVJlcXVlc3QgPT4gbmV4dC5oYW5kbGUoZG93bnN0cmVhbVJlcXVlc3QpKSk7XG4gICAgfVxuICAgIHN0YXRpYyDJtWZhYyA9IGZ1bmN0aW9uIEpzb25wSW50ZXJjZXB0b3JfRmFjdG9yeShfX25nRmFjdG9yeVR5cGVfXykge1xuICAgICAgcmV0dXJuIG5ldyAoX19uZ0ZhY3RvcnlUeXBlX18gfHwgSnNvbnBJbnRlcmNlcHRvcikoaTAuybXJtWluamVjdChpMC5FbnZpcm9ubWVudEluamVjdG9yKSk7XG4gICAgfTtcbiAgICBzdGF0aWMgybVwcm92ID0gLyogQF9fUFVSRV9fICovaTAuybXJtWRlZmluZUluamVjdGFibGUoe1xuICAgICAgdG9rZW46IEpzb25wSW50ZXJjZXB0b3IsXG4gICAgICBmYWN0b3J5OiBKc29ucEludGVyY2VwdG9yLsm1ZmFjXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIEpzb25wSW50ZXJjZXB0b3I7XG59KSgpO1xuLyojX19QVVJFX18qLygoKSA9PiB7XG4gICh0eXBlb2YgbmdEZXZNb2RlID09PSBcInVuZGVmaW5lZFwiIHx8IG5nRGV2TW9kZSkgJiYgdm9pZCAwO1xufSkoKTtcbmNvbnN0IFhTUkZfRU5BQkxFRCA9IC8qI19fUFVSRV9fKi9uZXcgSW5qZWN0aW9uVG9rZW4odHlwZW9mIG5nRGV2TW9kZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbmdEZXZNb2RlID8gJ1hTUkZfRU5BQkxFRCcgOiAnJywge1xuICBmYWN0b3J5OiAoKSA9PiB0cnVlXG59KTtcbmNvbnN0IFhTUkZfREVGQVVMVF9DT09LSUVfTkFNRSA9ICdYU1JGLVRPS0VOJztcbmNvbnN0IFhTUkZfQ09PS0lFX05BTUUgPSAvKiNfX1BVUkVfXyovbmV3IEluamVjdGlvblRva2VuKHR5cGVvZiBuZ0Rldk1vZGUgIT09ICd1bmRlZmluZWQnICYmIG5nRGV2TW9kZSA/ICdYU1JGX0NPT0tJRV9OQU1FJyA6ICcnLCB7XG4gIGZhY3Rvcnk6ICgpID0+IFhTUkZfREVGQVVMVF9DT09LSUVfTkFNRVxufSk7XG5jb25zdCBYU1JGX0RFRkFVTFRfSEVBREVSX05BTUUgPSAnWC1YU1JGLVRPS0VOJztcbmNvbnN0IFhTUkZfSEVBREVSX05BTUUgPSAvKiNfX1BVUkVfXyovbmV3IEluamVjdGlvblRva2VuKHR5cGVvZiBuZ0Rldk1vZGUgIT09ICd1bmRlZmluZWQnICYmIG5nRGV2TW9kZSA/ICdYU1JGX0hFQURFUl9OQU1FJyA6ICcnLCB7XG4gIGZhY3Rvcnk6ICgpID0+IFhTUkZfREVGQVVMVF9IRUFERVJfTkFNRVxufSk7XG5sZXQgSHR0cFhzcmZDb29raWVFeHRyYWN0b3IgPSAvKiNfX1BVUkVfXyovKCgpID0+IHtcbiAgY2xhc3MgSHR0cFhzcmZDb29raWVFeHRyYWN0b3Ige1xuICAgIGNvb2tpZU5hbWUgPSBpbmplY3QoWFNSRl9DT09LSUVfTkFNRSk7XG4gICAgZG9jID0gaW5qZWN0KERPQ1VNRU5UKTtcbiAgICBsYXN0Q29va2llU3RyaW5nID0gJyc7XG4gICAgbGFzdFRva2VuID0gbnVsbDtcbiAgICBwYXJzZUNvdW50ID0gMDtcbiAgICBnZXRUb2tlbigpIHtcbiAgICAgIGlmICh0eXBlb2YgbmdTZXJ2ZXJNb2RlICE9PSAndW5kZWZpbmVkJyAmJiBuZ1NlcnZlck1vZGUpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBjb25zdCBjb29raWVTdHJpbmcgPSB0aGlzLmRvYy5jb29raWUgfHwgJyc7XG4gICAgICBpZiAoY29va2llU3RyaW5nICE9PSB0aGlzLmxhc3RDb29raWVTdHJpbmcpIHtcbiAgICAgICAgdGhpcy5wYXJzZUNvdW50Kys7XG4gICAgICAgIHRoaXMubGFzdFRva2VuID0gcGFyc2VDb29raWVWYWx1ZShjb29raWVTdHJpbmcsIHRoaXMuY29va2llTmFtZSk7XG4gICAgICAgIHRoaXMubGFzdENvb2tpZVN0cmluZyA9IGNvb2tpZVN0cmluZztcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmxhc3RUb2tlbjtcbiAgICB9XG4gICAgc3RhdGljIMm1ZmFjID0gZnVuY3Rpb24gSHR0cFhzcmZDb29raWVFeHRyYWN0b3JfRmFjdG9yeShfX25nRmFjdG9yeVR5cGVfXykge1xuICAgICAgcmV0dXJuIG5ldyAoX19uZ0ZhY3RvcnlUeXBlX18gfHwgSHR0cFhzcmZDb29raWVFeHRyYWN0b3IpKCk7XG4gICAgfTtcbiAgICBzdGF0aWMgybVwcm92ID0gLyogQF9fUFVSRV9fICovaTAuybXJtWRlZmluZUluamVjdGFibGUoe1xuICAgICAgdG9rZW46IEh0dHBYc3JmQ29va2llRXh0cmFjdG9yLFxuICAgICAgZmFjdG9yeTogSHR0cFhzcmZDb29raWVFeHRyYWN0b3IuybVmYWMsXG4gICAgICBwcm92aWRlZEluOiAncm9vdCdcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gSHR0cFhzcmZDb29raWVFeHRyYWN0b3I7XG59KSgpO1xuLyojX19QVVJFX18qLygoKSA9PiB7XG4gICh0eXBlb2YgbmdEZXZNb2RlID09PSBcInVuZGVmaW5lZFwiIHx8IG5nRGV2TW9kZSkgJiYgdm9pZCAwO1xufSkoKTtcbmxldCBIdHRwWHNyZlRva2VuRXh0cmFjdG9yID0gLyojX19QVVJFX18qLygoKSA9PiB7XG4gIGNsYXNzIEh0dHBYc3JmVG9rZW5FeHRyYWN0b3Ige1xuICAgIHN0YXRpYyDJtWZhYyA9IGZ1bmN0aW9uIEh0dHBYc3JmVG9rZW5FeHRyYWN0b3JfRmFjdG9yeShfX25nRmFjdG9yeVR5cGVfXykge1xuICAgICAgcmV0dXJuIG5ldyAoX19uZ0ZhY3RvcnlUeXBlX18gfHwgSHR0cFhzcmZUb2tlbkV4dHJhY3RvcikoKTtcbiAgICB9O1xuICAgIHN0YXRpYyDJtXByb3YgPSAvKiBAX19QVVJFX18gKi9pMC7Jtcm1ZGVmaW5lSW5qZWN0YWJsZSh7XG4gICAgICB0b2tlbjogSHR0cFhzcmZUb2tlbkV4dHJhY3RvcixcbiAgICAgIGZhY3Rvcnk6IGZ1bmN0aW9uIEh0dHBYc3JmVG9rZW5FeHRyYWN0b3JfRmFjdG9yeShfX25nRmFjdG9yeVR5cGVfXykge1xuICAgICAgICBsZXQgX19uZ0NvbmRpdGlvbmFsRmFjdG9yeV9fID0gbnVsbDtcbiAgICAgICAgaWYgKF9fbmdGYWN0b3J5VHlwZV9fKSB7XG4gICAgICAgICAgX19uZ0NvbmRpdGlvbmFsRmFjdG9yeV9fID0gbmV3IChfX25nRmFjdG9yeVR5cGVfXyB8fCBIdHRwWHNyZlRva2VuRXh0cmFjdG9yKSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIF9fbmdDb25kaXRpb25hbEZhY3RvcnlfXyA9IGkwLsm1ybVpbmplY3QoSHR0cFhzcmZDb29raWVFeHRyYWN0b3IpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfX25nQ29uZGl0aW9uYWxGYWN0b3J5X187XG4gICAgICB9LFxuICAgICAgcHJvdmlkZWRJbjogJ3Jvb3QnXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIEh0dHBYc3JmVG9rZW5FeHRyYWN0b3I7XG59KSgpO1xuLyojX19QVVJFX18qLygoKSA9PiB7XG4gICh0eXBlb2YgbmdEZXZNb2RlID09PSBcInVuZGVmaW5lZFwiIHx8IG5nRGV2TW9kZSkgJiYgdm9pZCAwO1xufSkoKTtcbmZ1bmN0aW9uIHhzcmZJbnRlcmNlcHRvckZuKHJlcSwgbmV4dCkge1xuICBpZiAoIWluamVjdChYU1JGX0VOQUJMRUQpIHx8IHJlcS5tZXRob2QgPT09ICdHRVQnIHx8IHJlcS5tZXRob2QgPT09ICdIRUFEJykge1xuICAgIHJldHVybiBuZXh0KHJlcSk7XG4gIH1cbiAgdHJ5IHtcbiAgICBjb25zdCBsb2NhdGlvbkhyZWYgPSBpbmplY3QoUGxhdGZvcm1Mb2NhdGlvbikuaHJlZjtcbiAgICBjb25zdCB7XG4gICAgICBvcmlnaW46IGxvY2F0aW9uT3JpZ2luXG4gICAgfSA9IG5ldyBVUkwobG9jYXRpb25IcmVmKTtcbiAgICBjb25zdCB7XG4gICAgICBvcmlnaW46IHJlcXVlc3RPcmlnaW5cbiAgICB9ID0gbmV3IFVSTChyZXEudXJsLCBsb2NhdGlvbk9yaWdpbik7XG4gICAgaWYgKGxvY2F0aW9uT3JpZ2luICE9PSByZXF1ZXN0T3JpZ2luKSB7XG4gICAgICByZXR1cm4gbmV4dChyZXEpO1xuICAgIH1cbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIG5leHQocmVxKTtcbiAgfVxuICBjb25zdCB0b2tlbiA9IGluamVjdChIdHRwWHNyZlRva2VuRXh0cmFjdG9yKS5nZXRUb2tlbigpO1xuICBjb25zdCBoZWFkZXJOYW1lID0gaW5qZWN0KFhTUkZfSEVBREVSX05BTUUpO1xuICBpZiAodG9rZW4gIT0gbnVsbCAmJiAhcmVxLmhlYWRlcnMuaGFzKGhlYWRlck5hbWUpKSB7XG4gICAgcmVxID0gcmVxLmNsb25lKHtcbiAgICAgIGhlYWRlcnM6IHJlcS5oZWFkZXJzLnNldChoZWFkZXJOYW1lLCB0b2tlbilcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gbmV4dChyZXEpO1xufVxubGV0IEh0dHBYc3JmSW50ZXJjZXB0b3IgPSAvKiNfX1BVUkVfXyovKCgpID0+IHtcbiAgY2xhc3MgSHR0cFhzcmZJbnRlcmNlcHRvciB7XG4gICAgaW5qZWN0b3IgPSBpbmplY3QoRW52aXJvbm1lbnRJbmplY3Rvcik7XG4gICAgaW50ZXJjZXB0KGluaXRpYWxSZXF1ZXN0LCBuZXh0KSB7XG4gICAgICByZXR1cm4gcnVuSW5JbmplY3Rpb25Db250ZXh0KHRoaXMuaW5qZWN0b3IsICgpID0+IHhzcmZJbnRlcmNlcHRvckZuKGluaXRpYWxSZXF1ZXN0LCBkb3duc3RyZWFtUmVxdWVzdCA9PiBuZXh0LmhhbmRsZShkb3duc3RyZWFtUmVxdWVzdCkpKTtcbiAgICB9XG4gICAgc3RhdGljIMm1ZmFjID0gZnVuY3Rpb24gSHR0cFhzcmZJbnRlcmNlcHRvcl9GYWN0b3J5KF9fbmdGYWN0b3J5VHlwZV9fKSB7XG4gICAgICByZXR1cm4gbmV3IChfX25nRmFjdG9yeVR5cGVfXyB8fCBIdHRwWHNyZkludGVyY2VwdG9yKSgpO1xuICAgIH07XG4gICAgc3RhdGljIMm1cHJvdiA9IC8qIEBfX1BVUkVfXyAqL2kwLsm1ybVkZWZpbmVJbmplY3RhYmxlKHtcbiAgICAgIHRva2VuOiBIdHRwWHNyZkludGVyY2VwdG9yLFxuICAgICAgZmFjdG9yeTogSHR0cFhzcmZJbnRlcmNlcHRvci7JtWZhY1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBIdHRwWHNyZkludGVyY2VwdG9yO1xufSkoKTtcbi8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICAodHlwZW9mIG5nRGV2TW9kZSA9PT0gXCJ1bmRlZmluZWRcIiB8fCBuZ0Rldk1vZGUpICYmIHZvaWQgMDtcbn0pKCk7XG52YXIgSHR0cEZlYXR1cmVLaW5kID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChIdHRwRmVhdHVyZUtpbmQpIHtcbiAgSHR0cEZlYXR1cmVLaW5kW0h0dHBGZWF0dXJlS2luZFtcIkludGVyY2VwdG9yc1wiXSA9IDBdID0gXCJJbnRlcmNlcHRvcnNcIjtcbiAgSHR0cEZlYXR1cmVLaW5kW0h0dHBGZWF0dXJlS2luZFtcIkxlZ2FjeUludGVyY2VwdG9yc1wiXSA9IDFdID0gXCJMZWdhY3lJbnRlcmNlcHRvcnNcIjtcbiAgSHR0cEZlYXR1cmVLaW5kW0h0dHBGZWF0dXJlS2luZFtcIkN1c3RvbVhzcmZDb25maWd1cmF0aW9uXCJdID0gMl0gPSBcIkN1c3RvbVhzcmZDb25maWd1cmF0aW9uXCI7XG4gIEh0dHBGZWF0dXJlS2luZFtIdHRwRmVhdHVyZUtpbmRbXCJOb1hzcmZQcm90ZWN0aW9uXCJdID0gM10gPSBcIk5vWHNyZlByb3RlY3Rpb25cIjtcbiAgSHR0cEZlYXR1cmVLaW5kW0h0dHBGZWF0dXJlS2luZFtcIkpzb25wU3VwcG9ydFwiXSA9IDRdID0gXCJKc29ucFN1cHBvcnRcIjtcbiAgSHR0cEZlYXR1cmVLaW5kW0h0dHBGZWF0dXJlS2luZFtcIlJlcXVlc3RzTWFkZVZpYVBhcmVudFwiXSA9IDVdID0gXCJSZXF1ZXN0c01hZGVWaWFQYXJlbnRcIjtcbiAgSHR0cEZlYXR1cmVLaW5kW0h0dHBGZWF0dXJlS2luZFtcIkZldGNoXCJdID0gNl0gPSBcIkZldGNoXCI7XG4gIHJldHVybiBIdHRwRmVhdHVyZUtpbmQ7XG59KEh0dHBGZWF0dXJlS2luZCB8fCB7fSk7XG5mdW5jdGlvbiBtYWtlSHR0cEZlYXR1cmUoa2luZCwgcHJvdmlkZXJzKSB7XG4gIHJldHVybiB7XG4gICAgybVraW5kOiBraW5kLFxuICAgIMm1cHJvdmlkZXJzOiBwcm92aWRlcnNcbiAgfTtcbn1cbmZ1bmN0aW9uIHByb3ZpZGVIdHRwQ2xpZW50KC4uLmZlYXR1cmVzKSB7XG4gIGlmIChuZ0Rldk1vZGUpIHtcbiAgICBjb25zdCBmZWF0dXJlS2luZHMgPSBuZXcgU2V0KGZlYXR1cmVzLm1hcChmID0+IGYuybVraW5kKSk7XG4gICAgaWYgKGZlYXR1cmVLaW5kcy5oYXMoSHR0cEZlYXR1cmVLaW5kLk5vWHNyZlByb3RlY3Rpb24pICYmIGZlYXR1cmVLaW5kcy5oYXMoSHR0cEZlYXR1cmVLaW5kLkN1c3RvbVhzcmZDb25maWd1cmF0aW9uKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKG5nRGV2TW9kZSA/IGBDb25maWd1cmF0aW9uIGVycm9yOiBmb3VuZCBib3RoIHdpdGhYc3JmQ29uZmlndXJhdGlvbigpIGFuZCB3aXRoTm9Yc3JmUHJvdGVjdGlvbigpIGluIHRoZSBzYW1lIGNhbGwgdG8gcHJvdmlkZUh0dHBDbGllbnQoKSwgd2hpY2ggaXMgYSBjb250cmFkaWN0aW9uLmAgOiAnJyk7XG4gICAgfVxuICB9XG4gIGNvbnN0IHByb3ZpZGVycyA9IFtIdHRwQ2xpZW50LCBIdHRwSW50ZXJjZXB0b3JIYW5kbGVyLCB7XG4gICAgcHJvdmlkZTogSHR0cEhhbmRsZXIsXG4gICAgdXNlRXhpc3Rpbmc6IEh0dHBJbnRlcmNlcHRvckhhbmRsZXJcbiAgfSwge1xuICAgIHByb3ZpZGU6IEh0dHBCYWNrZW5kLFxuICAgIHVzZUZhY3Rvcnk6ICgpID0+IHtcbiAgICAgIHJldHVybiBpbmplY3QoRkVUQ0hfQkFDS0VORCwge1xuICAgICAgICBvcHRpb25hbDogdHJ1ZVxuICAgICAgfSkgPz8gaW5qZWN0KEh0dHBYaHJCYWNrZW5kKTtcbiAgICB9XG4gIH0sIHtcbiAgICBwcm92aWRlOiBIVFRQX0lOVEVSQ0VQVE9SX0ZOUyxcbiAgICB1c2VWYWx1ZTogeHNyZkludGVyY2VwdG9yRm4sXG4gICAgbXVsdGk6IHRydWVcbiAgfV07XG4gIGZvciAoY29uc3QgZmVhdHVyZSBvZiBmZWF0dXJlcykge1xuICAgIHByb3ZpZGVycy5wdXNoKC4uLmZlYXR1cmUuybVwcm92aWRlcnMpO1xuICB9XG4gIHJldHVybiBtYWtlRW52aXJvbm1lbnRQcm92aWRlcnMocHJvdmlkZXJzKTtcbn1cbmZ1bmN0aW9uIHdpdGhJbnRlcmNlcHRvcnMoaW50ZXJjZXB0b3JGbnMpIHtcbiAgcmV0dXJuIG1ha2VIdHRwRmVhdHVyZShIdHRwRmVhdHVyZUtpbmQuSW50ZXJjZXB0b3JzLCBpbnRlcmNlcHRvckZucy5tYXAoaW50ZXJjZXB0b3JGbiA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb3ZpZGU6IEhUVFBfSU5URVJDRVBUT1JfRk5TLFxuICAgICAgdXNlVmFsdWU6IGludGVyY2VwdG9yRm4sXG4gICAgICBtdWx0aTogdHJ1ZVxuICAgIH07XG4gIH0pKTtcbn1cbmNvbnN0IExFR0FDWV9JTlRFUkNFUFRPUl9GTiA9IC8qI19fUFVSRV9fKi9uZXcgSW5qZWN0aW9uVG9rZW4odHlwZW9mIG5nRGV2TW9kZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbmdEZXZNb2RlID8gJ0xFR0FDWV9JTlRFUkNFUFRPUl9GTicgOiAnJyk7XG5mdW5jdGlvbiB3aXRoSW50ZXJjZXB0b3JzRnJvbURpKCkge1xuICByZXR1cm4gbWFrZUh0dHBGZWF0dXJlKEh0dHBGZWF0dXJlS2luZC5MZWdhY3lJbnRlcmNlcHRvcnMsIFt7XG4gICAgcHJvdmlkZTogTEVHQUNZX0lOVEVSQ0VQVE9SX0ZOLFxuICAgIHVzZUZhY3Rvcnk6IGxlZ2FjeUludGVyY2VwdG9yRm5GYWN0b3J5XG4gIH0sIHtcbiAgICBwcm92aWRlOiBIVFRQX0lOVEVSQ0VQVE9SX0ZOUyxcbiAgICB1c2VFeGlzdGluZzogTEVHQUNZX0lOVEVSQ0VQVE9SX0ZOLFxuICAgIG11bHRpOiB0cnVlXG4gIH1dKTtcbn1cbmZ1bmN0aW9uIHdpdGhYc3JmQ29uZmlndXJhdGlvbih7XG4gIGNvb2tpZU5hbWUsXG4gIGhlYWRlck5hbWVcbn0pIHtcbiAgY29uc3QgcHJvdmlkZXJzID0gW107XG4gIGlmIChjb29raWVOYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICBwcm92aWRlcnMucHVzaCh7XG4gICAgICBwcm92aWRlOiBYU1JGX0NPT0tJRV9OQU1FLFxuICAgICAgdXNlVmFsdWU6IGNvb2tpZU5hbWVcbiAgICB9KTtcbiAgfVxuICBpZiAoaGVhZGVyTmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcHJvdmlkZXJzLnB1c2goe1xuICAgICAgcHJvdmlkZTogWFNSRl9IRUFERVJfTkFNRSxcbiAgICAgIHVzZVZhbHVlOiBoZWFkZXJOYW1lXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIG1ha2VIdHRwRmVhdHVyZShIdHRwRmVhdHVyZUtpbmQuQ3VzdG9tWHNyZkNvbmZpZ3VyYXRpb24sIHByb3ZpZGVycyk7XG59XG5mdW5jdGlvbiB3aXRoTm9Yc3JmUHJvdGVjdGlvbigpIHtcbiAgcmV0dXJuIG1ha2VIdHRwRmVhdHVyZShIdHRwRmVhdHVyZUtpbmQuTm9Yc3JmUHJvdGVjdGlvbiwgW3tcbiAgICBwcm92aWRlOiBYU1JGX0VOQUJMRUQsXG4gICAgdXNlVmFsdWU6IGZhbHNlXG4gIH1dKTtcbn1cbmZ1bmN0aW9uIHdpdGhKc29ucFN1cHBvcnQoKSB7XG4gIHJldHVybiBtYWtlSHR0cEZlYXR1cmUoSHR0cEZlYXR1cmVLaW5kLkpzb25wU3VwcG9ydCwgW0pzb25wQ2xpZW50QmFja2VuZCwge1xuICAgIHByb3ZpZGU6IEpzb25wQ2FsbGJhY2tDb250ZXh0LFxuICAgIHVzZUZhY3Rvcnk6IGpzb25wQ2FsbGJhY2tDb250ZXh0XG4gIH0sIHtcbiAgICBwcm92aWRlOiBIVFRQX0lOVEVSQ0VQVE9SX0ZOUyxcbiAgICB1c2VWYWx1ZToganNvbnBJbnRlcmNlcHRvckZuLFxuICAgIG11bHRpOiB0cnVlXG4gIH1dKTtcbn1cbmZ1bmN0aW9uIHdpdGhSZXF1ZXN0c01hZGVWaWFQYXJlbnQoKSB7XG4gIHJldHVybiBtYWtlSHR0cEZlYXR1cmUoSHR0cEZlYXR1cmVLaW5kLlJlcXVlc3RzTWFkZVZpYVBhcmVudCwgW3tcbiAgICBwcm92aWRlOiBIdHRwQmFja2VuZCxcbiAgICB1c2VGYWN0b3J5OiAoKSA9PiB7XG4gICAgICBjb25zdCBoYW5kbGVyRnJvbVBhcmVudCA9IGluamVjdChIdHRwSGFuZGxlciwge1xuICAgICAgICBza2lwU2VsZjogdHJ1ZSxcbiAgICAgICAgb3B0aW9uYWw6IHRydWVcbiAgICAgIH0pO1xuICAgICAgaWYgKG5nRGV2TW9kZSAmJiBoYW5kbGVyRnJvbVBhcmVudCA9PT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3dpdGhSZXF1ZXN0c01hZGVWaWFQYXJlbnQoKSBjYW4gb25seSBiZSB1c2VkIHdoZW4gdGhlIHBhcmVudCBpbmplY3RvciBhbHNvIGNvbmZpZ3VyZXMgSHR0cENsaWVudCcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGhhbmRsZXJGcm9tUGFyZW50O1xuICAgIH1cbiAgfV0pO1xufVxuZnVuY3Rpb24gd2l0aEZldGNoKCkge1xuICByZXR1cm4gbWFrZUh0dHBGZWF0dXJlKEh0dHBGZWF0dXJlS2luZC5GZXRjaCwgW0ZldGNoQmFja2VuZCwge1xuICAgIHByb3ZpZGU6IEZFVENIX0JBQ0tFTkQsXG4gICAgdXNlRXhpc3Rpbmc6IEZldGNoQmFja2VuZFxuICB9LCB7XG4gICAgcHJvdmlkZTogSHR0cEJhY2tlbmQsXG4gICAgdXNlRXhpc3Rpbmc6IEZldGNoQmFja2VuZFxuICB9XSk7XG59XG5sZXQgSHR0cENsaWVudFhzcmZNb2R1bGUgPSAvKiNfX1BVUkVfXyovKCgpID0+IHtcbiAgY2xhc3MgSHR0cENsaWVudFhzcmZNb2R1bGUge1xuICAgIHN0YXRpYyBkaXNhYmxlKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmdNb2R1bGU6IEh0dHBDbGllbnRYc3JmTW9kdWxlLFxuICAgICAgICBwcm92aWRlcnM6IFt3aXRoTm9Yc3JmUHJvdGVjdGlvbigpLsm1cHJvdmlkZXJzXVxuICAgICAgfTtcbiAgICB9XG4gICAgc3RhdGljIHdpdGhPcHRpb25zKG9wdGlvbnMgPSB7fSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmdNb2R1bGU6IEh0dHBDbGllbnRYc3JmTW9kdWxlLFxuICAgICAgICBwcm92aWRlcnM6IHdpdGhYc3JmQ29uZmlndXJhdGlvbihvcHRpb25zKS7JtXByb3ZpZGVyc1xuICAgICAgfTtcbiAgICB9XG4gICAgc3RhdGljIMm1ZmFjID0gZnVuY3Rpb24gSHR0cENsaWVudFhzcmZNb2R1bGVfRmFjdG9yeShfX25nRmFjdG9yeVR5cGVfXykge1xuICAgICAgcmV0dXJuIG5ldyAoX19uZ0ZhY3RvcnlUeXBlX18gfHwgSHR0cENsaWVudFhzcmZNb2R1bGUpKCk7XG4gICAgfTtcbiAgICBzdGF0aWMgybVtb2QgPSAvKiBAX19QVVJFX18gKi9pMC7Jtcm1ZGVmaW5lTmdNb2R1bGUoe1xuICAgICAgdHlwZTogSHR0cENsaWVudFhzcmZNb2R1bGVcbiAgICB9KTtcbiAgICBzdGF0aWMgybVpbmogPSAvKiBAX19QVVJFX18gKi9pMC7Jtcm1ZGVmaW5lSW5qZWN0b3Ioe1xuICAgICAgcHJvdmlkZXJzOiBbSHR0cFhzcmZJbnRlcmNlcHRvciwge1xuICAgICAgICBwcm92aWRlOiBIVFRQX0lOVEVSQ0VQVE9SUyxcbiAgICAgICAgdXNlRXhpc3Rpbmc6IEh0dHBYc3JmSW50ZXJjZXB0b3IsXG4gICAgICAgIG11bHRpOiB0cnVlXG4gICAgICB9LCB7XG4gICAgICAgIHByb3ZpZGU6IEh0dHBYc3JmVG9rZW5FeHRyYWN0b3IsXG4gICAgICAgIHVzZUNsYXNzOiBIdHRwWHNyZkNvb2tpZUV4dHJhY3RvclxuICAgICAgfSwgd2l0aFhzcmZDb25maWd1cmF0aW9uKHtcbiAgICAgICAgY29va2llTmFtZTogWFNSRl9ERUZBVUxUX0NPT0tJRV9OQU1FLFxuICAgICAgICBoZWFkZXJOYW1lOiBYU1JGX0RFRkFVTFRfSEVBREVSX05BTUVcbiAgICAgIH0pLsm1cHJvdmlkZXJzLCB7XG4gICAgICAgIHByb3ZpZGU6IFhTUkZfRU5BQkxFRCxcbiAgICAgICAgdXNlVmFsdWU6IHRydWVcbiAgICAgIH1dXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIEh0dHBDbGllbnRYc3JmTW9kdWxlO1xufSkoKTtcbi8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICAodHlwZW9mIG5nRGV2TW9kZSA9PT0gXCJ1bmRlZmluZWRcIiB8fCBuZ0Rldk1vZGUpICYmIHZvaWQgMDtcbn0pKCk7XG5sZXQgSHR0cENsaWVudE1vZHVsZSA9IC8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICBjbGFzcyBIdHRwQ2xpZW50TW9kdWxlIHtcbiAgICBzdGF0aWMgybVmYWMgPSBmdW5jdGlvbiBIdHRwQ2xpZW50TW9kdWxlX0ZhY3RvcnkoX19uZ0ZhY3RvcnlUeXBlX18pIHtcbiAgICAgIHJldHVybiBuZXcgKF9fbmdGYWN0b3J5VHlwZV9fIHx8IEh0dHBDbGllbnRNb2R1bGUpKCk7XG4gICAgfTtcbiAgICBzdGF0aWMgybVtb2QgPSAvKiBAX19QVVJFX18gKi9pMC7Jtcm1ZGVmaW5lTmdNb2R1bGUoe1xuICAgICAgdHlwZTogSHR0cENsaWVudE1vZHVsZVxuICAgIH0pO1xuICAgIHN0YXRpYyDJtWluaiA9IC8qIEBfX1BVUkVfXyAqL2kwLsm1ybVkZWZpbmVJbmplY3Rvcih7XG4gICAgICBwcm92aWRlcnM6IFtwcm92aWRlSHR0cENsaWVudCh3aXRoSW50ZXJjZXB0b3JzRnJvbURpKCkpXVxuICAgIH0pO1xuICB9XG4gIHJldHVybiBIdHRwQ2xpZW50TW9kdWxlO1xufSkoKTtcbi8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICAodHlwZW9mIG5nRGV2TW9kZSA9PT0gXCJ1bmRlZmluZWRcIiB8fCBuZ0Rldk1vZGUpICYmIHZvaWQgMDtcbn0pKCk7XG5sZXQgSHR0cENsaWVudEpzb25wTW9kdWxlID0gLyojX19QVVJFX18qLygoKSA9PiB7XG4gIGNsYXNzIEh0dHBDbGllbnRKc29ucE1vZHVsZSB7XG4gICAgc3RhdGljIMm1ZmFjID0gZnVuY3Rpb24gSHR0cENsaWVudEpzb25wTW9kdWxlX0ZhY3RvcnkoX19uZ0ZhY3RvcnlUeXBlX18pIHtcbiAgICAgIHJldHVybiBuZXcgKF9fbmdGYWN0b3J5VHlwZV9fIHx8IEh0dHBDbGllbnRKc29ucE1vZHVsZSkoKTtcbiAgICB9O1xuICAgIHN0YXRpYyDJtW1vZCA9IC8qIEBfX1BVUkVfXyAqL2kwLsm1ybVkZWZpbmVOZ01vZHVsZSh7XG4gICAgICB0eXBlOiBIdHRwQ2xpZW50SnNvbnBNb2R1bGVcbiAgICB9KTtcbiAgICBzdGF0aWMgybVpbmogPSAvKiBAX19QVVJFX18gKi9pMC7Jtcm1ZGVmaW5lSW5qZWN0b3Ioe1xuICAgICAgcHJvdmlkZXJzOiBbd2l0aEpzb25wU3VwcG9ydCgpLsm1cHJvdmlkZXJzXVxuICAgIH0pO1xuICB9XG4gIHJldHVybiBIdHRwQ2xpZW50SnNvbnBNb2R1bGU7XG59KSgpO1xuLyojX19QVVJFX18qLygoKSA9PiB7XG4gICh0eXBlb2YgbmdEZXZNb2RlID09PSBcInVuZGVmaW5lZFwiIHx8IG5nRGV2TW9kZSkgJiYgdm9pZCAwO1xufSkoKTtcbmV4cG9ydCB7IEZldGNoQmFja2VuZCwgSFRUUF9JTlRFUkNFUFRPUlMsIEhUVFBfUk9PVF9JTlRFUkNFUFRPUl9GTlMsIEh0dHBCYWNrZW5kLCBIdHRwQ2xpZW50LCBIdHRwQ2xpZW50SnNvbnBNb2R1bGUsIEh0dHBDbGllbnRNb2R1bGUsIEh0dHBDbGllbnRYc3JmTW9kdWxlLCBIdHRwQ29udGV4dCwgSHR0cENvbnRleHRUb2tlbiwgSHR0cEVycm9yUmVzcG9uc2UsIEh0dHBFdmVudFR5cGUsIEh0dHBGZWF0dXJlS2luZCwgSHR0cEhhbmRsZXIsIEh0dHBIZWFkZXJSZXNwb25zZSwgSHR0cEhlYWRlcnMsIEh0dHBJbnRlcmNlcHRvckhhbmRsZXIsIEh0dHBQYXJhbXMsIEh0dHBSZXF1ZXN0LCBIdHRwUmVzcG9uc2UsIEh0dHBSZXNwb25zZUJhc2UsIEh0dHBTdGF0dXNDb2RlLCBIdHRwVXJsRW5jb2RpbmdDb2RlYywgSHR0cFhockJhY2tlbmQsIEh0dHBYc3JmVG9rZW5FeHRyYWN0b3IsIEpzb25wQ2xpZW50QmFja2VuZCwgSnNvbnBJbnRlcmNlcHRvciwgUkVRVUVTVFNfQ09OVFJJQlVURV9UT19TVEFCSUxJVFksIHByb3ZpZGVIdHRwQ2xpZW50LCB3aXRoRmV0Y2gsIHdpdGhJbnRlcmNlcHRvcnMsIHdpdGhJbnRlcmNlcHRvcnNGcm9tRGksIHdpdGhKc29ucFN1cHBvcnQsIHdpdGhOb1hzcmZQcm90ZWN0aW9uLCB3aXRoUmVxdWVzdHNNYWRlVmlhUGFyZW50LCB3aXRoWHNyZkNvbmZpZ3VyYXRpb24gfTtcbiIsImltcG9ydCB7IEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmV4cG9ydCBjb25zdCBBUElfQkFTRV9VUkwgPSBuZXcgSW5qZWN0aW9uVG9rZW48c3RyaW5nPignQVBJX0JBU0VfVVJMJyk7XG4iXSwibWFwcGluZ3MiOiI7MlJBWUFBLGFBQUEsR0FBQUMsQ0FBQSxTQUFNLENBQUFDLENBQUEsQ0FBTixLQUFNLENBQUFDLENBQVksQ0FDaEJDLE9BQUEsQ0FDQUMsZUFBQSxFQUFBTCxhQUFBLEdBQUFDLENBQUEsTUFBK0IsR0FBSSxDQUFBSyxHQUFBLElBQ25DQyxRQUFBLENBQ0FDLFVBQUEsRUFBQVIsYUFBQSxHQUFBQyxDQUFBLE1BQWEsTUFDYlEsWUFBWUMsQ0FBQSxDQUFTLENBQUFWLGFBQUEsR0FBQVcsQ0FBQSxLQUFBWCxDQUFBLGdCQUFBQyxDQUFBLE1BQ2RTLENBQUEsRUFBQVYsYUFBQSxHQUFBWSxDQUFBLFNBRU0sTUFBTyxDQUFBRixDQUFBLEVBQVksVUFBQVYsYUFBQSxHQUFBWSxDQUFBLFNBQzVCLEtBQUtMLFFBQUEsQ0FBVyxJQUFNLENBQUFQLGFBQUEsR0FBQVcsQ0FBQSxLQUFBWCxDQUFBLGdCQUFBQyxDQUFBLE1BQ3BCLEtBQUtHLE9BQUEsQ0FBVSxHQUFJLENBQUFFLEdBQUEsR0FDbkJJLENBQUEsQ0FBUUcsS0FBQSxDQUFNO0FBQUEsQ0FBSSxFQUFFQyxPQUFBLENBQVFDLENBQUEsRUFBUSxDQUFBZixhQUFBLEdBQUFXLENBQUEsTUFDbEMsR0FBTSxDQUFBSyxDQUFBLEVBQUFoQixhQUFBLEdBQUFDLENBQUEsTUFBUWMsQ0FBQSxDQUFL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 \ No newline at end of file diff --git a/frontend/dist-instrumented/chunk-2S5V5XEE.js.map b/frontend/dist-instrumented/chunk-2S5V5XEE.js.map new file mode 100644 index 00000000..477fc5db --- /dev/null +++ b/frontend/dist-instrumented/chunk-2S5V5XEE.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["node_modules/@angular/common/fesm2022/_module-chunk.mjs","src/app/core/tokens/api-base-url.token.ts"],"sourcesContent":["/**\n * @license Angular v21.2.4\n * (c) 2010-2026 Google LLC. https://angular.dev/\n * License: MIT\n */\n\nimport * as i0 from '@angular/core';\nimport { ɵRuntimeError as _RuntimeError, InjectionToken, inject, NgZone, DestroyRef, Injectable, ɵformatRuntimeError as _formatRuntimeError, ɵTracingService as _TracingService, runInInjectionContext, PendingTasks, ɵConsole as _Console, DOCUMENT, Inject, EnvironmentInjector, makeEnvironmentProviders, NgModule } from '@angular/core';\nimport { switchMap, finalize, concatMap, filter, map } from 'rxjs/operators';\nimport { Observable, from, of } from 'rxjs';\nimport { XhrFactory, parseCookieValue } from './_xhr-chunk.mjs';\nimport { PlatformLocation } from './_platform_location-chunk.mjs';\nclass HttpHeaders {\n headers;\n normalizedNames = /*#__PURE__*/new Map();\n lazyInit;\n lazyUpdate = null;\n constructor(headers) {\n if (!headers) {\n this.headers = new Map();\n } else if (typeof headers === 'string') {\n this.lazyInit = () => {\n this.headers = new Map();\n headers.split('\\n').forEach(line => {\n const index = line.indexOf(':');\n if (index > 0) {\n const name = line.slice(0, index);\n const value = line.slice(index + 1).trim();\n this.addHeaderEntry(name, value);\n }\n });\n };\n } else if (typeof Headers !== 'undefined' && headers instanceof Headers) {\n this.headers = new Map();\n headers.forEach((value, name) => {\n this.addHeaderEntry(name, value);\n });\n } else {\n this.lazyInit = () => {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n assertValidHeaders(headers);\n }\n this.headers = new Map();\n Object.entries(headers).forEach(([name, values]) => {\n this.setHeaderEntries(name, values);\n });\n };\n }\n }\n has(name) {\n this.init();\n return this.headers.has(name.toLowerCase());\n }\n get(name) {\n this.init();\n const values = this.headers.get(name.toLowerCase());\n return values && values.length > 0 ? values[0] : null;\n }\n keys() {\n this.init();\n return Array.from(this.normalizedNames.values());\n }\n getAll(name) {\n this.init();\n return this.headers.get(name.toLowerCase()) || null;\n }\n append(name, value) {\n return this.clone({\n name,\n value,\n op: 'a'\n });\n }\n set(name, value) {\n return this.clone({\n name,\n value,\n op: 's'\n });\n }\n delete(name, value) {\n return this.clone({\n name,\n value,\n op: 'd'\n });\n }\n maybeSetNormalizedName(name, lcName) {\n if (!this.normalizedNames.has(lcName)) {\n this.normalizedNames.set(lcName, name);\n }\n }\n init() {\n if (!!this.lazyInit) {\n if (this.lazyInit instanceof HttpHeaders) {\n this.copyFrom(this.lazyInit);\n } else {\n this.lazyInit();\n }\n this.lazyInit = null;\n if (!!this.lazyUpdate) {\n this.lazyUpdate.forEach(update => this.applyUpdate(update));\n this.lazyUpdate = null;\n }\n }\n }\n copyFrom(other) {\n other.init();\n Array.from(other.headers.keys()).forEach(key => {\n this.headers.set(key, other.headers.get(key));\n this.normalizedNames.set(key, other.normalizedNames.get(key));\n });\n }\n clone(update) {\n const clone = new HttpHeaders();\n clone.lazyInit = !!this.lazyInit && this.lazyInit instanceof HttpHeaders ? this.lazyInit : this;\n clone.lazyUpdate = (this.lazyUpdate || []).concat([update]);\n return clone;\n }\n applyUpdate(update) {\n const key = update.name.toLowerCase();\n switch (update.op) {\n case 'a':\n case 's':\n let value = update.value;\n if (typeof value === 'string') {\n value = [value];\n }\n if (value.length === 0) {\n return;\n }\n this.maybeSetNormalizedName(update.name, key);\n const base = (update.op === 'a' ? this.headers.get(key) : undefined) || [];\n base.push(...value);\n this.headers.set(key, base);\n break;\n case 'd':\n const toDelete = update.value;\n if (!toDelete) {\n this.headers.delete(key);\n this.normalizedNames.delete(key);\n } else {\n let existing = this.headers.get(key);\n if (!existing) {\n return;\n }\n existing = existing.filter(value => toDelete.indexOf(value) === -1);\n if (existing.length === 0) {\n this.headers.delete(key);\n this.normalizedNames.delete(key);\n } else {\n this.headers.set(key, existing);\n }\n }\n break;\n }\n }\n addHeaderEntry(name, value) {\n const key = name.toLowerCase();\n this.maybeSetNormalizedName(name, key);\n if (this.headers.has(key)) {\n this.headers.get(key).push(value);\n } else {\n this.headers.set(key, [value]);\n }\n }\n setHeaderEntries(name, values) {\n const headerValues = (Array.isArray(values) ? values : [values]).map(value => value.toString());\n const key = name.toLowerCase();\n this.headers.set(key, headerValues);\n this.maybeSetNormalizedName(name, key);\n }\n forEach(fn) {\n this.init();\n Array.from(this.normalizedNames.keys()).forEach(key => fn(this.normalizedNames.get(key), this.headers.get(key)));\n }\n}\nfunction assertValidHeaders(headers) {\n for (const [key, value] of Object.entries(headers)) {\n if (!(typeof value === 'string' || typeof value === 'number') && !Array.isArray(value)) {\n throw new Error(`Unexpected value of the \\`${key}\\` header provided. ` + `Expecting either a string, a number or an array, but got: \\`${value}\\`.`);\n }\n }\n}\nclass HttpContextToken {\n defaultValue;\n constructor(defaultValue) {\n this.defaultValue = defaultValue;\n }\n}\nclass HttpContext {\n map = /*#__PURE__*/new Map();\n set(token, value) {\n this.map.set(token, value);\n return this;\n }\n get(token) {\n if (!this.map.has(token)) {\n this.map.set(token, token.defaultValue());\n }\n return this.map.get(token);\n }\n delete(token) {\n this.map.delete(token);\n return this;\n }\n has(token) {\n return this.map.has(token);\n }\n keys() {\n return this.map.keys();\n }\n}\nclass HttpUrlEncodingCodec {\n encodeKey(key) {\n return standardEncoding(key);\n }\n encodeValue(value) {\n return standardEncoding(value);\n }\n decodeKey(key) {\n return decodeURIComponent(key);\n }\n decodeValue(value) {\n return decodeURIComponent(value);\n }\n}\nfunction paramParser(rawParams, codec) {\n const map = new Map();\n if (rawParams.length > 0) {\n const params = rawParams.replace(/^\\?/, '').split('&');\n params.forEach(param => {\n const eqIdx = param.indexOf('=');\n const [key, val] = eqIdx == -1 ? [codec.decodeKey(param), ''] : [codec.decodeKey(param.slice(0, eqIdx)), codec.decodeValue(param.slice(eqIdx + 1))];\n const list = map.get(key) || [];\n list.push(val);\n map.set(key, list);\n });\n }\n return map;\n}\nconst STANDARD_ENCODING_REGEX = /%(\\d[a-f0-9])/gi;\nconst STANDARD_ENCODING_REPLACEMENTS = {\n '40': '@',\n '3A': ':',\n '24': '$',\n '2C': ',',\n '3B': ';',\n '3D': '=',\n '3F': '?',\n '2F': '/'\n};\nfunction standardEncoding(v) {\n return encodeURIComponent(v).replace(STANDARD_ENCODING_REGEX, (s, t) => STANDARD_ENCODING_REPLACEMENTS[t] ?? s);\n}\nfunction valueToString(value) {\n return `${value}`;\n}\nclass HttpParams {\n map;\n encoder;\n updates = null;\n cloneFrom = null;\n constructor(options = {}) {\n this.encoder = options.encoder || new HttpUrlEncodingCodec();\n if (options.fromString) {\n if (options.fromObject) {\n throw new _RuntimeError(2805, ngDevMode && 'Cannot specify both fromString and fromObject.');\n }\n this.map = paramParser(options.fromString, this.encoder);\n } else if (!!options.fromObject) {\n this.map = new Map();\n Object.keys(options.fromObject).forEach(key => {\n const value = options.fromObject[key];\n const values = Array.isArray(value) ? value.map(valueToString) : [valueToString(value)];\n this.map.set(key, values);\n });\n } else {\n this.map = null;\n }\n }\n has(param) {\n this.init();\n return this.map.has(param);\n }\n get(param) {\n this.init();\n const res = this.map.get(param);\n return !!res ? res[0] : null;\n }\n getAll(param) {\n this.init();\n return this.map.get(param) || null;\n }\n keys() {\n this.init();\n return Array.from(this.map.keys());\n }\n append(param, value) {\n return this.clone({\n param,\n value,\n op: 'a'\n });\n }\n appendAll(params) {\n const updates = [];\n Object.keys(params).forEach(param => {\n const value = params[param];\n if (Array.isArray(value)) {\n value.forEach(_value => {\n updates.push({\n param,\n value: _value,\n op: 'a'\n });\n });\n } else {\n updates.push({\n param,\n value: value,\n op: 'a'\n });\n }\n });\n return this.clone(updates);\n }\n set(param, value) {\n return this.clone({\n param,\n value,\n op: 's'\n });\n }\n delete(param, value) {\n return this.clone({\n param,\n value,\n op: 'd'\n });\n }\n toString() {\n this.init();\n return this.keys().map(key => {\n const eKey = this.encoder.encodeKey(key);\n return this.map.get(key).map(value => eKey + '=' + this.encoder.encodeValue(value)).join('&');\n }).filter(param => param !== '').join('&');\n }\n clone(update) {\n const clone = new HttpParams({\n encoder: this.encoder\n });\n clone.cloneFrom = this.cloneFrom || this;\n clone.updates = (this.updates || []).concat(update);\n return clone;\n }\n init() {\n if (this.map === null) {\n this.map = new Map();\n }\n if (this.cloneFrom !== null) {\n this.cloneFrom.init();\n this.cloneFrom.keys().forEach(key => this.map.set(key, this.cloneFrom.map.get(key)));\n this.updates.forEach(update => {\n switch (update.op) {\n case 'a':\n case 's':\n const base = (update.op === 'a' ? this.map.get(update.param) : undefined) || [];\n base.push(valueToString(update.value));\n this.map.set(update.param, base);\n break;\n case 'd':\n if (update.value !== undefined) {\n let base = this.map.get(update.param) || [];\n const idx = base.indexOf(valueToString(update.value));\n if (idx !== -1) {\n base.splice(idx, 1);\n }\n if (base.length > 0) {\n this.map.set(update.param, base);\n } else {\n this.map.delete(update.param);\n }\n } else {\n this.map.delete(update.param);\n break;\n }\n }\n });\n this.cloneFrom = this.updates = null;\n }\n }\n}\nfunction mightHaveBody(method) {\n switch (method) {\n case 'DELETE':\n case 'GET':\n case 'HEAD':\n case 'OPTIONS':\n case 'JSONP':\n return false;\n default:\n return true;\n }\n}\nfunction isArrayBuffer(value) {\n return typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer;\n}\nfunction isBlob(value) {\n return typeof Blob !== 'undefined' && value instanceof Blob;\n}\nfunction isFormData(value) {\n return typeof FormData !== 'undefined' && value instanceof FormData;\n}\nfunction isUrlSearchParams(value) {\n return typeof URLSearchParams !== 'undefined' && value instanceof URLSearchParams;\n}\nconst CONTENT_TYPE_HEADER = 'Content-Type';\nconst ACCEPT_HEADER = 'Accept';\nconst TEXT_CONTENT_TYPE = 'text/plain';\nconst JSON_CONTENT_TYPE = 'application/json';\nconst ACCEPT_HEADER_VALUE = `${JSON_CONTENT_TYPE}, ${TEXT_CONTENT_TYPE}, */*`;\nclass HttpRequest {\n url;\n body = null;\n headers;\n context;\n reportProgress = false;\n withCredentials = false;\n credentials;\n keepalive = false;\n cache;\n priority;\n mode;\n redirect;\n referrer;\n integrity;\n referrerPolicy;\n responseType = 'json';\n method;\n params;\n urlWithParams;\n transferCache;\n timeout;\n constructor(method, url, third, fourth) {\n this.url = url;\n this.method = method.toUpperCase();\n let options;\n if (mightHaveBody(this.method) || !!fourth) {\n this.body = third !== undefined ? third : null;\n options = fourth;\n } else {\n options = third;\n }\n if (options) {\n this.reportProgress = !!options.reportProgress;\n this.withCredentials = !!options.withCredentials;\n this.keepalive = !!options.keepalive;\n if (!!options.responseType) {\n this.responseType = options.responseType;\n }\n if (options.headers) {\n this.headers = options.headers;\n }\n if (options.context) {\n this.context = options.context;\n }\n if (options.params) {\n this.params = options.params;\n }\n if (options.priority) {\n this.priority = options.priority;\n }\n if (options.cache) {\n this.cache = options.cache;\n }\n if (options.credentials) {\n this.credentials = options.credentials;\n }\n if (typeof options.timeout === 'number') {\n if (options.timeout < 1 || !Number.isInteger(options.timeout)) {\n throw new _RuntimeError(2822, ngDevMode ? '`timeout` must be a positive integer value' : '');\n }\n this.timeout = options.timeout;\n }\n if (options.mode) {\n this.mode = options.mode;\n }\n if (options.redirect) {\n this.redirect = options.redirect;\n }\n if (options.integrity) {\n this.integrity = options.integrity;\n }\n if (options.referrer) {\n this.referrer = options.referrer;\n }\n if (options.referrerPolicy) {\n this.referrerPolicy = options.referrerPolicy;\n }\n this.transferCache = options.transferCache;\n }\n this.headers ??= new HttpHeaders();\n this.context ??= new HttpContext();\n if (!this.params) {\n this.params = new HttpParams();\n this.urlWithParams = url;\n } else {\n const params = this.params.toString();\n if (params.length === 0) {\n this.urlWithParams = url;\n } else {\n const qIdx = url.indexOf('?');\n const sep = qIdx === -1 ? '?' : qIdx < url.length - 1 ? '&' : '';\n this.urlWithParams = url + sep + params;\n }\n }\n }\n serializeBody() {\n if (this.body === null) {\n return null;\n }\n if (typeof this.body === 'string' || isArrayBuffer(this.body) || isBlob(this.body) || isFormData(this.body) || isUrlSearchParams(this.body)) {\n return this.body;\n }\n if (this.body instanceof HttpParams) {\n return this.body.toString();\n }\n if (typeof this.body === 'object' || typeof this.body === 'boolean' || Array.isArray(this.body)) {\n return JSON.stringify(this.body);\n }\n return this.body.toString();\n }\n detectContentTypeHeader() {\n if (this.body === null) {\n return null;\n }\n if (isFormData(this.body)) {\n return null;\n }\n if (isBlob(this.body)) {\n return this.body.type || null;\n }\n if (isArrayBuffer(this.body)) {\n return null;\n }\n if (typeof this.body === 'string') {\n return TEXT_CONTENT_TYPE;\n }\n if (this.body instanceof HttpParams) {\n return 'application/x-www-form-urlencoded;charset=UTF-8';\n }\n if (typeof this.body === 'object' || typeof this.body === 'number' || typeof this.body === 'boolean') {\n return JSON_CONTENT_TYPE;\n }\n return null;\n }\n clone(update = {}) {\n const method = update.method || this.method;\n const url = update.url || this.url;\n const responseType = update.responseType || this.responseType;\n const keepalive = update.keepalive ?? this.keepalive;\n const priority = update.priority || this.priority;\n const cache = update.cache || this.cache;\n const mode = update.mode || this.mode;\n const redirect = update.redirect || this.redirect;\n const credentials = update.credentials || this.credentials;\n const referrer = update.referrer || this.referrer;\n const integrity = update.integrity || this.integrity;\n const referrerPolicy = update.referrerPolicy || this.referrerPolicy;\n const transferCache = update.transferCache ?? this.transferCache;\n const timeout = update.timeout ?? this.timeout;\n const body = update.body !== undefined ? update.body : this.body;\n const withCredentials = update.withCredentials ?? this.withCredentials;\n const reportProgress = update.reportProgress ?? this.reportProgress;\n let headers = update.headers || this.headers;\n let params = update.params || this.params;\n const context = update.context ?? this.context;\n if (update.setHeaders !== undefined) {\n headers = Object.keys(update.setHeaders).reduce((headers, name) => headers.set(name, update.setHeaders[name]), headers);\n }\n if (update.setParams) {\n params = Object.keys(update.setParams).reduce((params, param) => params.set(param, update.setParams[param]), params);\n }\n return new HttpRequest(method, url, body, {\n params,\n headers,\n context,\n reportProgress,\n responseType,\n withCredentials,\n transferCache,\n keepalive,\n cache,\n priority,\n timeout,\n mode,\n redirect,\n credentials,\n referrer,\n integrity,\n referrerPolicy\n });\n }\n}\nvar HttpEventType = /*#__PURE__*/function (HttpEventType) {\n HttpEventType[HttpEventType[\"Sent\"] = 0] = \"Sent\";\n HttpEventType[HttpEventType[\"UploadProgress\"] = 1] = \"UploadProgress\";\n HttpEventType[HttpEventType[\"ResponseHeader\"] = 2] = \"ResponseHeader\";\n HttpEventType[HttpEventType[\"DownloadProgress\"] = 3] = \"DownloadProgress\";\n HttpEventType[HttpEventType[\"Response\"] = 4] = \"Response\";\n HttpEventType[HttpEventType[\"User\"] = 5] = \"User\";\n return HttpEventType;\n}(HttpEventType || {});\nclass HttpResponseBase {\n headers;\n status;\n statusText;\n url;\n ok;\n type;\n redirected;\n responseType;\n constructor(init, defaultStatus = 200, defaultStatusText = 'OK') {\n this.headers = init.headers || new HttpHeaders();\n this.status = init.status !== undefined ? init.status : defaultStatus;\n this.statusText = init.statusText || defaultStatusText;\n this.url = init.url || null;\n this.redirected = init.redirected;\n this.responseType = init.responseType;\n this.ok = this.status >= 200 && this.status < 300;\n }\n}\nclass HttpHeaderResponse extends HttpResponseBase {\n constructor(init = {}) {\n super(init);\n }\n type = HttpEventType.ResponseHeader;\n clone(update = {}) {\n return new HttpHeaderResponse({\n headers: update.headers || this.headers,\n status: update.status !== undefined ? update.status : this.status,\n statusText: update.statusText || this.statusText,\n url: update.url || this.url || undefined\n });\n }\n}\nclass HttpResponse extends HttpResponseBase {\n body;\n constructor(init = {}) {\n super(init);\n this.body = init.body !== undefined ? init.body : null;\n }\n type = HttpEventType.Response;\n clone(update = {}) {\n return new HttpResponse({\n body: update.body !== undefined ? update.body : this.body,\n headers: update.headers || this.headers,\n status: update.status !== undefined ? update.status : this.status,\n statusText: update.statusText || this.statusText,\n url: update.url || this.url || undefined,\n redirected: update.redirected ?? this.redirected,\n responseType: update.responseType ?? this.responseType\n });\n }\n}\nclass HttpErrorResponse extends HttpResponseBase {\n name = 'HttpErrorResponse';\n message;\n error;\n ok = false;\n constructor(init) {\n super(init, 0, 'Unknown Error');\n if (this.status >= 200 && this.status < 300) {\n this.message = `Http failure during parsing for ${init.url || '(unknown url)'}`;\n } else {\n this.message = `Http failure response for ${init.url || '(unknown url)'}: ${init.status} ${init.statusText}`;\n }\n this.error = init.error || null;\n }\n}\nconst HTTP_STATUS_CODE_OK = 200;\nconst HTTP_STATUS_CODE_NO_CONTENT = 204;\nvar HttpStatusCode = /*#__PURE__*/function (HttpStatusCode) {\n HttpStatusCode[HttpStatusCode[\"Continue\"] = 100] = \"Continue\";\n HttpStatusCode[HttpStatusCode[\"SwitchingProtocols\"] = 101] = \"SwitchingProtocols\";\n HttpStatusCode[HttpStatusCode[\"Processing\"] = 102] = \"Processing\";\n HttpStatusCode[HttpStatusCode[\"EarlyHints\"] = 103] = \"EarlyHints\";\n HttpStatusCode[HttpStatusCode[\"Ok\"] = 200] = \"Ok\";\n HttpStatusCode[HttpStatusCode[\"Created\"] = 201] = \"Created\";\n HttpStatusCode[HttpStatusCode[\"Accepted\"] = 202] = \"Accepted\";\n HttpStatusCode[HttpStatusCode[\"NonAuthoritativeInformation\"] = 203] = \"NonAuthoritativeInformation\";\n HttpStatusCode[HttpStatusCode[\"NoContent\"] = 204] = \"NoContent\";\n HttpStatusCode[HttpStatusCode[\"ResetContent\"] = 205] = \"ResetContent\";\n HttpStatusCode[HttpStatusCode[\"PartialContent\"] = 206] = \"PartialContent\";\n HttpStatusCode[HttpStatusCode[\"MultiStatus\"] = 207] = \"MultiStatus\";\n HttpStatusCode[HttpStatusCode[\"AlreadyReported\"] = 208] = \"AlreadyReported\";\n HttpStatusCode[HttpStatusCode[\"ImUsed\"] = 226] = \"ImUsed\";\n HttpStatusCode[HttpStatusCode[\"MultipleChoices\"] = 300] = \"MultipleChoices\";\n HttpStatusCode[HttpStatusCode[\"MovedPermanently\"] = 301] = \"MovedPermanently\";\n HttpStatusCode[HttpStatusCode[\"Found\"] = 302] = \"Found\";\n HttpStatusCode[HttpStatusCode[\"SeeOther\"] = 303] = \"SeeOther\";\n HttpStatusCode[HttpStatusCode[\"NotModified\"] = 304] = \"NotModified\";\n HttpStatusCode[HttpStatusCode[\"UseProxy\"] = 305] = \"UseProxy\";\n HttpStatusCode[HttpStatusCode[\"Unused\"] = 306] = \"Unused\";\n HttpStatusCode[HttpStatusCode[\"TemporaryRedirect\"] = 307] = \"TemporaryRedirect\";\n HttpStatusCode[HttpStatusCode[\"PermanentRedirect\"] = 308] = \"PermanentRedirect\";\n HttpStatusCode[HttpStatusCode[\"BadRequest\"] = 400] = \"BadRequest\";\n HttpStatusCode[HttpStatusCode[\"Unauthorized\"] = 401] = \"Unauthorized\";\n HttpStatusCode[HttpStatusCode[\"PaymentRequired\"] = 402] = \"PaymentRequired\";\n HttpStatusCode[HttpStatusCode[\"Forbidden\"] = 403] = \"Forbidden\";\n HttpStatusCode[HttpStatusCode[\"NotFound\"] = 404] = \"NotFound\";\n HttpStatusCode[HttpStatusCode[\"MethodNotAllowed\"] = 405] = \"MethodNotAllowed\";\n HttpStatusCode[HttpStatusCode[\"NotAcceptable\"] = 406] = \"NotAcceptable\";\n HttpStatusCode[HttpStatusCode[\"ProxyAuthenticationRequired\"] = 407] = \"ProxyAuthenticationRequired\";\n HttpStatusCode[HttpStatusCode[\"RequestTimeout\"] = 408] = \"RequestTimeout\";\n HttpStatusCode[HttpStatusCode[\"Conflict\"] = 409] = \"Conflict\";\n HttpStatusCode[HttpStatusCode[\"Gone\"] = 410] = \"Gone\";\n HttpStatusCode[HttpStatusCode[\"LengthRequired\"] = 411] = \"LengthRequired\";\n HttpStatusCode[HttpStatusCode[\"PreconditionFailed\"] = 412] = \"PreconditionFailed\";\n HttpStatusCode[HttpStatusCode[\"PayloadTooLarge\"] = 413] = \"PayloadTooLarge\";\n HttpStatusCode[HttpStatusCode[\"UriTooLong\"] = 414] = \"UriTooLong\";\n HttpStatusCode[HttpStatusCode[\"UnsupportedMediaType\"] = 415] = \"UnsupportedMediaType\";\n HttpStatusCode[HttpStatusCode[\"RangeNotSatisfiable\"] = 416] = \"RangeNotSatisfiable\";\n HttpStatusCode[HttpStatusCode[\"ExpectationFailed\"] = 417] = \"ExpectationFailed\";\n HttpStatusCode[HttpStatusCode[\"ImATeapot\"] = 418] = \"ImATeapot\";\n HttpStatusCode[HttpStatusCode[\"MisdirectedRequest\"] = 421] = \"MisdirectedRequest\";\n HttpStatusCode[HttpStatusCode[\"UnprocessableEntity\"] = 422] = \"UnprocessableEntity\";\n HttpStatusCode[HttpStatusCode[\"Locked\"] = 423] = \"Locked\";\n HttpStatusCode[HttpStatusCode[\"FailedDependency\"] = 424] = \"FailedDependency\";\n HttpStatusCode[HttpStatusCode[\"TooEarly\"] = 425] = \"TooEarly\";\n HttpStatusCode[HttpStatusCode[\"UpgradeRequired\"] = 426] = \"UpgradeRequired\";\n HttpStatusCode[HttpStatusCode[\"PreconditionRequired\"] = 428] = \"PreconditionRequired\";\n HttpStatusCode[HttpStatusCode[\"TooManyRequests\"] = 429] = \"TooManyRequests\";\n HttpStatusCode[HttpStatusCode[\"RequestHeaderFieldsTooLarge\"] = 431] = \"RequestHeaderFieldsTooLarge\";\n HttpStatusCode[HttpStatusCode[\"UnavailableForLegalReasons\"] = 451] = \"UnavailableForLegalReasons\";\n HttpStatusCode[HttpStatusCode[\"InternalServerError\"] = 500] = \"InternalServerError\";\n HttpStatusCode[HttpStatusCode[\"NotImplemented\"] = 501] = \"NotImplemented\";\n HttpStatusCode[HttpStatusCode[\"BadGateway\"] = 502] = \"BadGateway\";\n HttpStatusCode[HttpStatusCode[\"ServiceUnavailable\"] = 503] = \"ServiceUnavailable\";\n HttpStatusCode[HttpStatusCode[\"GatewayTimeout\"] = 504] = \"GatewayTimeout\";\n HttpStatusCode[HttpStatusCode[\"HttpVersionNotSupported\"] = 505] = \"HttpVersionNotSupported\";\n HttpStatusCode[HttpStatusCode[\"VariantAlsoNegotiates\"] = 506] = \"VariantAlsoNegotiates\";\n HttpStatusCode[HttpStatusCode[\"InsufficientStorage\"] = 507] = \"InsufficientStorage\";\n HttpStatusCode[HttpStatusCode[\"LoopDetected\"] = 508] = \"LoopDetected\";\n HttpStatusCode[HttpStatusCode[\"NotExtended\"] = 510] = \"NotExtended\";\n HttpStatusCode[HttpStatusCode[\"NetworkAuthenticationRequired\"] = 511] = \"NetworkAuthenticationRequired\";\n return HttpStatusCode;\n}(HttpStatusCode || {});\nconst XSSI_PREFIX$1 = /^\\)\\]\\}',?\\n/;\nconst FETCH_BACKEND = /*#__PURE__*/new InjectionToken(typeof ngDevMode === 'undefined' || ngDevMode ? 'FETCH_BACKEND' : '');\nlet FetchBackend = /*#__PURE__*/(() => {\n class FetchBackend {\n fetchImpl = inject(FetchFactory, {\n optional: true\n })?.fetch ?? ((...args) => globalThis.fetch(...args));\n ngZone = inject(NgZone);\n destroyRef = inject(DestroyRef);\n handle(request) {\n return new Observable(observer => {\n const aborter = new AbortController();\n this.doRequest(request, aborter.signal, observer).then(noop, error => observer.error(new HttpErrorResponse({\n error\n })));\n let timeoutId;\n if (request.timeout) {\n timeoutId = this.ngZone.runOutsideAngular(() => setTimeout(() => {\n if (!aborter.signal.aborted) {\n aborter.abort(new DOMException('signal timed out', 'TimeoutError'));\n }\n }, request.timeout));\n }\n return () => {\n if (timeoutId !== undefined) {\n clearTimeout(timeoutId);\n }\n aborter.abort();\n };\n });\n }\n async doRequest(request, signal, observer) {\n const init = this.createRequestInit(request);\n let response;\n try {\n const fetchPromise = this.ngZone.runOutsideAngular(() => this.fetchImpl(request.urlWithParams, {\n signal,\n ...init\n }));\n silenceSuperfluousUnhandledPromiseRejection(fetchPromise);\n observer.next({\n type: HttpEventType.Sent\n });\n response = await fetchPromise;\n } catch (error) {\n observer.error(new HttpErrorResponse({\n error,\n status: error.status ?? 0,\n statusText: error.statusText,\n url: request.urlWithParams,\n headers: error.headers\n }));\n return;\n }\n const headers = new HttpHeaders(response.headers);\n const statusText = response.statusText;\n const url = response.url || request.urlWithParams;\n let status = response.status;\n let body = null;\n if (request.reportProgress) {\n observer.next(new HttpHeaderResponse({\n headers,\n status,\n statusText,\n url\n }));\n }\n if (response.body) {\n const contentLength = response.headers.get('content-length');\n const chunks = [];\n const reader = response.body.getReader();\n let receivedLength = 0;\n let decoder;\n let partialText;\n const reqZone = typeof Zone !== 'undefined' && Zone.current;\n let canceled = false;\n await this.ngZone.runOutsideAngular(async () => {\n while (true) {\n if (this.destroyRef.destroyed) {\n await reader.cancel();\n canceled = true;\n break;\n }\n const {\n done,\n value\n } = await reader.read();\n if (done) {\n break;\n }\n chunks.push(value);\n receivedLength += value.length;\n if (request.reportProgress) {\n partialText = request.responseType === 'text' ? (partialText ?? '') + (decoder ??= new TextDecoder()).decode(value, {\n stream: true\n }) : undefined;\n const reportProgress = () => observer.next({\n type: HttpEventType.DownloadProgress,\n total: contentLength ? +contentLength : undefined,\n loaded: receivedLength,\n partialText\n });\n reqZone ? reqZone.run(reportProgress) : reportProgress();\n }\n }\n });\n if (canceled) {\n observer.complete();\n return;\n }\n const chunksAll = this.concatChunks(chunks, receivedLength);\n try {\n const contentType = response.headers.get(CONTENT_TYPE_HEADER) ?? '';\n body = this.parseBody(request, chunksAll, contentType, status);\n } catch (error) {\n observer.error(new HttpErrorResponse({\n error,\n headers: new HttpHeaders(response.headers),\n status: response.status,\n statusText: response.statusText,\n url: response.url || request.urlWithParams\n }));\n return;\n }\n }\n if (status === 0) {\n status = body ? HTTP_STATUS_CODE_OK : 0;\n }\n const ok = status >= 200 && status < 300;\n const redirected = response.redirected;\n const responseType = response.type;\n if (ok) {\n observer.next(new HttpResponse({\n body,\n headers,\n status,\n statusText,\n url,\n redirected,\n responseType\n }));\n observer.complete();\n } else {\n observer.error(new HttpErrorResponse({\n error: body,\n headers,\n status,\n statusText,\n url,\n redirected,\n responseType\n }));\n }\n }\n parseBody(request, binContent, contentType, status) {\n switch (request.responseType) {\n case 'json':\n const text = new TextDecoder().decode(binContent).replace(XSSI_PREFIX$1, '');\n if (text === '') {\n return null;\n }\n try {\n return JSON.parse(text);\n } catch (e) {\n if (status < 200 || status >= 300) {\n return text;\n }\n throw e;\n }\n case 'text':\n return new TextDecoder().decode(binContent);\n case 'blob':\n return new Blob([binContent], {\n type: contentType\n });\n case 'arraybuffer':\n return binContent.buffer;\n }\n }\n createRequestInit(req) {\n const headers = {};\n let credentials;\n credentials = req.credentials;\n if (req.withCredentials) {\n (typeof ngDevMode === 'undefined' || ngDevMode) && warningOptionsMessage(req);\n credentials = 'include';\n }\n req.headers.forEach((name, values) => headers[name] = values.join(','));\n if (!req.headers.has(ACCEPT_HEADER)) {\n headers[ACCEPT_HEADER] = ACCEPT_HEADER_VALUE;\n }\n if (!req.headers.has(CONTENT_TYPE_HEADER)) {\n const detectedType = req.detectContentTypeHeader();\n if (detectedType !== null) {\n headers[CONTENT_TYPE_HEADER] = detectedType;\n }\n }\n return {\n body: req.serializeBody(),\n method: req.method,\n headers,\n credentials,\n keepalive: req.keepalive,\n cache: req.cache,\n priority: req.priority,\n mode: req.mode,\n redirect: req.redirect,\n referrer: req.referrer,\n integrity: req.integrity,\n referrerPolicy: req.referrerPolicy\n };\n }\n concatChunks(chunks, totalLength) {\n const chunksAll = new Uint8Array(totalLength);\n let position = 0;\n for (const chunk of chunks) {\n chunksAll.set(chunk, position);\n position += chunk.length;\n }\n return chunksAll;\n }\n static ɵfac = function FetchBackend_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || FetchBackend)();\n };\n static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: FetchBackend,\n factory: FetchBackend.ɵfac\n });\n }\n return FetchBackend;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nclass FetchFactory {}\nfunction noop() {}\nfunction warningOptionsMessage(req) {\n if (req.credentials && req.withCredentials) {\n console.warn(_formatRuntimeError(2819, `Angular detected that a \\`HttpClient\\` request has both \\`withCredentials: true\\` and \\`credentials: '${req.credentials}'\\` options. The \\`withCredentials\\` option is overriding the explicit \\`credentials\\` setting to 'include'. Consider removing \\`withCredentials\\` and using \\`credentials: '${req.credentials}'\\` directly for clarity.`));\n }\n}\nfunction silenceSuperfluousUnhandledPromiseRejection(promise) {\n promise.then(noop, noop);\n}\nconst XSSI_PREFIX = /^\\)\\]\\}',?\\n/;\nfunction validateXhrCompatibility(req) {\n const unsupportedOptions = [{\n property: 'keepalive',\n errorCode: 2813\n }, {\n property: 'cache',\n errorCode: 2814\n }, {\n property: 'priority',\n errorCode: 2815\n }, {\n property: 'mode',\n errorCode: 2816\n }, {\n property: 'redirect',\n errorCode: 2817\n }, {\n property: 'credentials',\n errorCode: 2818\n }, {\n property: 'integrity',\n errorCode: 2820\n }, {\n property: 'referrer',\n errorCode: 2821\n }, {\n property: 'referrerPolicy',\n errorCode: 2823\n }];\n for (const {\n property,\n errorCode\n } of unsupportedOptions) {\n if (req[property]) {\n console.warn(_formatRuntimeError(errorCode, `Angular detected that a \\`HttpClient\\` request with the \\`${property}\\` option was sent using XHR, which does not support it. To use the \\`${property}\\` option, enable Fetch API support by passing \\`withFetch()\\` as an argument to \\`provideHttpClient()\\`.`));\n }\n }\n}\nlet HttpXhrBackend = /*#__PURE__*/(() => {\n class HttpXhrBackend {\n xhrFactory;\n tracingService = inject(_TracingService, {\n optional: true\n });\n constructor(xhrFactory) {\n this.xhrFactory = xhrFactory;\n }\n maybePropagateTrace(fn) {\n return this.tracingService?.propagate ? this.tracingService.propagate(fn) : fn;\n }\n handle(req) {\n if (req.method === 'JSONP') {\n throw new _RuntimeError(-2800, (typeof ngDevMode === 'undefined' || ngDevMode) && `Cannot make a JSONP request without JSONP support. To fix the problem, either add the \\`withJsonpSupport()\\` call (if \\`provideHttpClient()\\` is used) or import the \\`HttpClientJsonpModule\\` in the root NgModule.`);\n }\n ngDevMode && validateXhrCompatibility(req);\n const xhrFactory = this.xhrFactory;\n const source = typeof ngServerMode !== 'undefined' && ngServerMode && xhrFactory.ɵloadImpl ? from(xhrFactory.ɵloadImpl()) : of(null);\n return source.pipe(switchMap(() => {\n return new Observable(observer => {\n const xhr = xhrFactory.build();\n xhr.open(req.method, req.urlWithParams);\n if (req.withCredentials) {\n xhr.withCredentials = true;\n }\n req.headers.forEach((name, values) => xhr.setRequestHeader(name, values.join(',')));\n if (!req.headers.has(ACCEPT_HEADER)) {\n xhr.setRequestHeader(ACCEPT_HEADER, ACCEPT_HEADER_VALUE);\n }\n if (!req.headers.has(CONTENT_TYPE_HEADER)) {\n const detectedType = req.detectContentTypeHeader();\n if (detectedType !== null) {\n xhr.setRequestHeader(CONTENT_TYPE_HEADER, detectedType);\n }\n }\n if (req.timeout) {\n xhr.timeout = req.timeout;\n }\n if (req.responseType) {\n const responseType = req.responseType.toLowerCase();\n xhr.responseType = responseType !== 'json' ? responseType : 'text';\n }\n const reqBody = req.serializeBody();\n let headerResponse = null;\n const partialFromXhr = () => {\n if (headerResponse !== null) {\n return headerResponse;\n }\n const statusText = xhr.statusText || 'OK';\n const headers = new HttpHeaders(xhr.getAllResponseHeaders());\n const url = xhr.responseURL || req.url;\n headerResponse = new HttpHeaderResponse({\n headers,\n status: xhr.status,\n statusText,\n url\n });\n return headerResponse;\n };\n const onLoad = this.maybePropagateTrace(() => {\n let {\n headers,\n status,\n statusText,\n url\n } = partialFromXhr();\n let body = null;\n if (status !== HTTP_STATUS_CODE_NO_CONTENT) {\n body = typeof xhr.response === 'undefined' ? xhr.responseText : xhr.response;\n }\n if (status === 0) {\n status = !!body ? HTTP_STATUS_CODE_OK : 0;\n }\n let ok = status >= 200 && status < 300;\n if (req.responseType === 'json' && typeof body === 'string') {\n const originalBody = body;\n body = body.replace(XSSI_PREFIX, '');\n try {\n body = body !== '' ? JSON.parse(body) : null;\n } catch (error) {\n body = originalBody;\n if (ok) {\n ok = false;\n body = {\n error,\n text: body\n };\n }\n }\n }\n if (ok) {\n observer.next(new HttpResponse({\n body,\n headers,\n status,\n statusText,\n url: url || undefined\n }));\n observer.complete();\n } else {\n observer.error(new HttpErrorResponse({\n error: body,\n headers,\n status,\n statusText,\n url: url || undefined\n }));\n }\n });\n const onError = this.maybePropagateTrace(error => {\n const {\n url\n } = partialFromXhr();\n const res = new HttpErrorResponse({\n error,\n status: xhr.status || 0,\n statusText: xhr.statusText || 'Unknown Error',\n url: url || undefined\n });\n observer.error(res);\n });\n let onTimeout = onError;\n if (req.timeout) {\n onTimeout = this.maybePropagateTrace(_ => {\n const {\n url\n } = partialFromXhr();\n const res = new HttpErrorResponse({\n error: new DOMException('Request timed out', 'TimeoutError'),\n status: xhr.status || 0,\n statusText: xhr.statusText || 'Request timeout',\n url: url || undefined\n });\n observer.error(res);\n });\n }\n let sentHeaders = false;\n const onDownProgress = this.maybePropagateTrace(event => {\n if (!sentHeaders) {\n observer.next(partialFromXhr());\n sentHeaders = true;\n }\n let progressEvent = {\n type: HttpEventType.DownloadProgress,\n loaded: event.loaded\n };\n if (event.lengthComputable) {\n progressEvent.total = event.total;\n }\n if (req.responseType === 'text' && !!xhr.responseText) {\n progressEvent.partialText = xhr.responseText;\n }\n observer.next(progressEvent);\n });\n const onUpProgress = this.maybePropagateTrace(event => {\n let progress = {\n type: HttpEventType.UploadProgress,\n loaded: event.loaded\n };\n if (event.lengthComputable) {\n progress.total = event.total;\n }\n observer.next(progress);\n });\n xhr.addEventListener('load', onLoad);\n xhr.addEventListener('error', onError);\n xhr.addEventListener('timeout', onTimeout);\n xhr.addEventListener('abort', onError);\n if (req.reportProgress) {\n xhr.addEventListener('progress', onDownProgress);\n if (reqBody !== null && xhr.upload) {\n xhr.upload.addEventListener('progress', onUpProgress);\n }\n }\n xhr.send(reqBody);\n observer.next({\n type: HttpEventType.Sent\n });\n return () => {\n xhr.removeEventListener('error', onError);\n xhr.removeEventListener('abort', onError);\n xhr.removeEventListener('load', onLoad);\n xhr.removeEventListener('timeout', onTimeout);\n if (req.reportProgress) {\n xhr.removeEventListener('progress', onDownProgress);\n if (reqBody !== null && xhr.upload) {\n xhr.upload.removeEventListener('progress', onUpProgress);\n }\n }\n if (xhr.readyState !== xhr.DONE) {\n xhr.abort();\n }\n };\n });\n }));\n }\n static ɵfac = function HttpXhrBackend_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || HttpXhrBackend)(i0.ɵɵinject(XhrFactory));\n };\n static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: HttpXhrBackend,\n factory: HttpXhrBackend.ɵfac,\n providedIn: 'root'\n });\n }\n return HttpXhrBackend;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nfunction interceptorChainEndFn(req, finalHandlerFn) {\n return finalHandlerFn(req);\n}\nfunction adaptLegacyInterceptorToChain(chainTailFn, interceptor) {\n return (initialRequest, finalHandlerFn) => interceptor.intercept(initialRequest, {\n handle: downstreamRequest => chainTailFn(downstreamRequest, finalHandlerFn)\n });\n}\nfunction chainedInterceptorFn(chainTailFn, interceptorFn, injector) {\n return (initialRequest, finalHandlerFn) => runInInjectionContext(injector, () => interceptorFn(initialRequest, downstreamRequest => chainTailFn(downstreamRequest, finalHandlerFn)));\n}\nconst HTTP_INTERCEPTORS = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'HTTP_INTERCEPTORS' : '');\nconst HTTP_INTERCEPTOR_FNS = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'HTTP_INTERCEPTOR_FNS' : '', {\n factory: () => []\n});\nconst HTTP_ROOT_INTERCEPTOR_FNS = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'HTTP_ROOT_INTERCEPTOR_FNS' : '');\nconst REQUESTS_CONTRIBUTE_TO_STABILITY = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'REQUESTS_CONTRIBUTE_TO_STABILITY' : '', {\n factory: () => true\n});\nfunction legacyInterceptorFnFactory() {\n let chain = null;\n return (req, handler) => {\n if (chain === null) {\n const interceptors = inject(HTTP_INTERCEPTORS, {\n optional: true\n }) ?? [];\n chain = interceptors.reduceRight(adaptLegacyInterceptorToChain, interceptorChainEndFn);\n }\n const pendingTasks = inject(PendingTasks);\n const contributeToStability = inject(REQUESTS_CONTRIBUTE_TO_STABILITY);\n if (contributeToStability) {\n const removeTask = pendingTasks.add();\n return chain(req, handler).pipe(finalize(removeTask));\n } else {\n return chain(req, handler);\n }\n };\n}\nlet HttpBackend = /*#__PURE__*/(() => {\n class HttpBackend {\n static ɵfac = function HttpBackend_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || HttpBackend)();\n };\n static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: HttpBackend,\n factory: function HttpBackend_Factory(__ngFactoryType__) {\n let __ngConditionalFactory__ = null;\n if (__ngFactoryType__) {\n __ngConditionalFactory__ = new (__ngFactoryType__ || HttpBackend)();\n } else {\n __ngConditionalFactory__ = i0.ɵɵinject(HttpXhrBackend);\n }\n return __ngConditionalFactory__;\n },\n providedIn: 'root'\n });\n }\n return HttpBackend;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet fetchBackendWarningDisplayed = false;\nlet HttpInterceptorHandler = /*#__PURE__*/(() => {\n class HttpInterceptorHandler {\n backend;\n injector;\n chain = null;\n pendingTasks = inject(PendingTasks);\n contributeToStability = inject(REQUESTS_CONTRIBUTE_TO_STABILITY);\n constructor(backend, injector) {\n this.backend = backend;\n this.injector = injector;\n if ((typeof ngDevMode === 'undefined' || ngDevMode) && !fetchBackendWarningDisplayed) {\n const isTestingBackend = this.backend.isTestingBackend;\n if (typeof ngServerMode !== 'undefined' && ngServerMode && !(this.backend instanceof FetchBackend) && !isTestingBackend) {\n fetchBackendWarningDisplayed = true;\n injector.get(_Console).warn(_formatRuntimeError(2801, 'Angular detected that `HttpClient` is not configured ' + \"to use `fetch` APIs. It's strongly recommended to \" + 'enable `fetch` for applications that use Server-Side Rendering ' + 'for better performance and compatibility. ' + 'To enable `fetch`, add the `withFetch()` to the `provideHttpClient()` ' + 'call at the root of the application.'));\n }\n }\n }\n handle(initialRequest) {\n if (this.chain === null) {\n const dedupedInterceptorFns = Array.from(new Set([...this.injector.get(HTTP_INTERCEPTOR_FNS), ...this.injector.get(HTTP_ROOT_INTERCEPTOR_FNS, [])]));\n this.chain = dedupedInterceptorFns.reduceRight((nextSequencedFn, interceptorFn) => chainedInterceptorFn(nextSequencedFn, interceptorFn, this.injector), interceptorChainEndFn);\n }\n if (this.contributeToStability) {\n const removeTask = this.pendingTasks.add();\n return this.chain(initialRequest, downstreamRequest => this.backend.handle(downstreamRequest)).pipe(finalize(removeTask));\n } else {\n return this.chain(initialRequest, downstreamRequest => this.backend.handle(downstreamRequest));\n }\n }\n static ɵfac = function HttpInterceptorHandler_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || HttpInterceptorHandler)(i0.ɵɵinject(HttpBackend), i0.ɵɵinject(i0.EnvironmentInjector));\n };\n static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: HttpInterceptorHandler,\n factory: HttpInterceptorHandler.ɵfac,\n providedIn: 'root'\n });\n }\n return HttpInterceptorHandler;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet HttpHandler = /*#__PURE__*/(() => {\n class HttpHandler {\n static ɵfac = function HttpHandler_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || HttpHandler)();\n };\n static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: HttpHandler,\n factory: function HttpHandler_Factory(__ngFactoryType__) {\n let __ngConditionalFactory__ = null;\n if (__ngFactoryType__) {\n __ngConditionalFactory__ = new (__ngFactoryType__ || HttpHandler)();\n } else {\n __ngConditionalFactory__ = i0.ɵɵinject(HttpInterceptorHandler);\n }\n return __ngConditionalFactory__;\n },\n providedIn: 'root'\n });\n }\n return HttpHandler;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nfunction addBody(options, body) {\n return {\n body,\n headers: options.headers,\n context: options.context,\n observe: options.observe,\n params: options.params,\n reportProgress: options.reportProgress,\n responseType: options.responseType,\n withCredentials: options.withCredentials,\n credentials: options.credentials,\n transferCache: options.transferCache,\n timeout: options.timeout,\n keepalive: options.keepalive,\n priority: options.priority,\n cache: options.cache,\n mode: options.mode,\n redirect: options.redirect,\n integrity: options.integrity,\n referrer: options.referrer,\n referrerPolicy: options.referrerPolicy\n };\n}\nlet HttpClient = /*#__PURE__*/(() => {\n class HttpClient {\n handler;\n constructor(handler) {\n this.handler = handler;\n }\n request(first, url, options = {}) {\n let req;\n if (first instanceof HttpRequest) {\n req = first;\n } else {\n let headers = undefined;\n if (options.headers instanceof HttpHeaders) {\n headers = options.headers;\n } else {\n headers = new HttpHeaders(options.headers);\n }\n let params = undefined;\n if (!!options.params) {\n if (options.params instanceof HttpParams) {\n params = options.params;\n } else {\n params = new HttpParams({\n fromObject: options.params\n });\n }\n }\n req = new HttpRequest(first, url, options.body !== undefined ? options.body : null, {\n headers,\n context: options.context,\n params,\n reportProgress: options.reportProgress,\n responseType: options.responseType || 'json',\n withCredentials: options.withCredentials,\n transferCache: options.transferCache,\n keepalive: options.keepalive,\n priority: options.priority,\n cache: options.cache,\n mode: options.mode,\n redirect: options.redirect,\n credentials: options.credentials,\n referrer: options.referrer,\n referrerPolicy: options.referrerPolicy,\n integrity: options.integrity,\n timeout: options.timeout\n });\n }\n const events$ = of(req).pipe(concatMap(req => this.handler.handle(req)));\n if (first instanceof HttpRequest || options.observe === 'events') {\n return events$;\n }\n const res$ = events$.pipe(filter(event => event instanceof HttpResponse));\n switch (options.observe || 'body') {\n case 'body':\n switch (req.responseType) {\n case 'arraybuffer':\n return res$.pipe(map(res => {\n if (res.body !== null && !(res.body instanceof ArrayBuffer)) {\n throw new _RuntimeError(2806, ngDevMode && 'Response is not an ArrayBuffer.');\n }\n return res.body;\n }));\n case 'blob':\n return res$.pipe(map(res => {\n if (res.body !== null && !(res.body instanceof Blob)) {\n throw new _RuntimeError(2807, ngDevMode && 'Response is not a Blob.');\n }\n return res.body;\n }));\n case 'text':\n return res$.pipe(map(res => {\n if (res.body !== null && typeof res.body !== 'string') {\n throw new _RuntimeError(2808, ngDevMode && 'Response is not a string.');\n }\n return res.body;\n }));\n case 'json':\n default:\n return res$.pipe(map(res => res.body));\n }\n case 'response':\n return res$;\n default:\n throw new _RuntimeError(2809, ngDevMode && `Unreachable: unhandled observe type ${options.observe}}`);\n }\n }\n delete(url, options = {}) {\n return this.request('DELETE', url, options);\n }\n get(url, options = {}) {\n return this.request('GET', url, options);\n }\n head(url, options = {}) {\n return this.request('HEAD', url, options);\n }\n jsonp(url, callbackParam) {\n return this.request('JSONP', url, {\n params: new HttpParams().append(callbackParam, 'JSONP_CALLBACK'),\n observe: 'body',\n responseType: 'json'\n });\n }\n options(url, options = {}) {\n return this.request('OPTIONS', url, options);\n }\n patch(url, body, options = {}) {\n return this.request('PATCH', url, addBody(options, body));\n }\n post(url, body, options = {}) {\n return this.request('POST', url, addBody(options, body));\n }\n put(url, body, options = {}) {\n return this.request('PUT', url, addBody(options, body));\n }\n static ɵfac = function HttpClient_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || HttpClient)(i0.ɵɵinject(HttpHandler));\n };\n static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: HttpClient,\n factory: HttpClient.ɵfac,\n providedIn: 'root'\n });\n }\n return HttpClient;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet nextRequestId = 0;\nlet foreignDocument;\nconst JSONP_ERR_NO_CALLBACK = 'JSONP injected script did not invoke callback.';\nconst JSONP_ERR_WRONG_METHOD = 'JSONP requests must use JSONP request method.';\nconst JSONP_ERR_WRONG_RESPONSE_TYPE = 'JSONP requests must use Json response type.';\nconst JSONP_ERR_HEADERS_NOT_SUPPORTED = 'JSONP requests do not support headers.';\nclass JsonpCallbackContext {}\nfunction jsonpCallbackContext() {\n if (typeof window === 'object') {\n return window;\n }\n return {};\n}\nlet JsonpClientBackend = /*#__PURE__*/(() => {\n class JsonpClientBackend {\n callbackMap;\n document;\n resolvedPromise = Promise.resolve();\n constructor(callbackMap, document) {\n this.callbackMap = callbackMap;\n this.document = document;\n }\n nextCallback() {\n return `ng_jsonp_callback_${nextRequestId++}`;\n }\n handle(req) {\n if (req.method !== 'JSONP') {\n throw new _RuntimeError(2810, ngDevMode && JSONP_ERR_WRONG_METHOD);\n } else if (req.responseType !== 'json') {\n throw new _RuntimeError(2811, ngDevMode && JSONP_ERR_WRONG_RESPONSE_TYPE);\n }\n if (req.headers.keys().length > 0) {\n throw new _RuntimeError(2812, ngDevMode && JSONP_ERR_HEADERS_NOT_SUPPORTED);\n }\n return new Observable(observer => {\n const callback = this.nextCallback();\n const url = req.urlWithParams.replace(/=JSONP_CALLBACK(&|$)/, `=${callback}$1`);\n const node = this.document.createElement('script');\n node.src = url;\n let body = null;\n let finished = false;\n this.callbackMap[callback] = data => {\n delete this.callbackMap[callback];\n body = data;\n finished = true;\n };\n const cleanup = () => {\n node.removeEventListener('load', onLoad);\n node.removeEventListener('error', onError);\n node.remove();\n delete this.callbackMap[callback];\n };\n const onLoad = () => {\n this.resolvedPromise.then(() => {\n cleanup();\n if (!finished) {\n observer.error(new HttpErrorResponse({\n url,\n status: 0,\n statusText: 'JSONP Error',\n error: new Error(JSONP_ERR_NO_CALLBACK)\n }));\n return;\n }\n observer.next(new HttpResponse({\n body,\n status: HTTP_STATUS_CODE_OK,\n statusText: 'OK',\n url\n }));\n observer.complete();\n });\n };\n const onError = error => {\n cleanup();\n observer.error(new HttpErrorResponse({\n error,\n status: 0,\n statusText: 'JSONP Error',\n url\n }));\n };\n node.addEventListener('load', onLoad);\n node.addEventListener('error', onError);\n this.document.body.appendChild(node);\n observer.next({\n type: HttpEventType.Sent\n });\n return () => {\n if (!finished) {\n this.removeListeners(node);\n }\n cleanup();\n };\n });\n }\n removeListeners(script) {\n foreignDocument ??= this.document.implementation.createHTMLDocument();\n foreignDocument.adoptNode(script);\n }\n static ɵfac = function JsonpClientBackend_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || JsonpClientBackend)(i0.ɵɵinject(JsonpCallbackContext), i0.ɵɵinject(DOCUMENT));\n };\n static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: JsonpClientBackend,\n factory: JsonpClientBackend.ɵfac\n });\n }\n return JsonpClientBackend;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nfunction jsonpInterceptorFn(req, next) {\n if (req.method === 'JSONP') {\n return inject(JsonpClientBackend).handle(req);\n }\n return next(req);\n}\nlet JsonpInterceptor = /*#__PURE__*/(() => {\n class JsonpInterceptor {\n injector;\n constructor(injector) {\n this.injector = injector;\n }\n intercept(initialRequest, next) {\n return runInInjectionContext(this.injector, () => jsonpInterceptorFn(initialRequest, downstreamRequest => next.handle(downstreamRequest)));\n }\n static ɵfac = function JsonpInterceptor_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || JsonpInterceptor)(i0.ɵɵinject(i0.EnvironmentInjector));\n };\n static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: JsonpInterceptor,\n factory: JsonpInterceptor.ɵfac\n });\n }\n return JsonpInterceptor;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst XSRF_ENABLED = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'XSRF_ENABLED' : '', {\n factory: () => true\n});\nconst XSRF_DEFAULT_COOKIE_NAME = 'XSRF-TOKEN';\nconst XSRF_COOKIE_NAME = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'XSRF_COOKIE_NAME' : '', {\n factory: () => XSRF_DEFAULT_COOKIE_NAME\n});\nconst XSRF_DEFAULT_HEADER_NAME = 'X-XSRF-TOKEN';\nconst XSRF_HEADER_NAME = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'XSRF_HEADER_NAME' : '', {\n factory: () => XSRF_DEFAULT_HEADER_NAME\n});\nlet HttpXsrfCookieExtractor = /*#__PURE__*/(() => {\n class HttpXsrfCookieExtractor {\n cookieName = inject(XSRF_COOKIE_NAME);\n doc = inject(DOCUMENT);\n lastCookieString = '';\n lastToken = null;\n parseCount = 0;\n getToken() {\n if (typeof ngServerMode !== 'undefined' && ngServerMode) {\n return null;\n }\n const cookieString = this.doc.cookie || '';\n if (cookieString !== this.lastCookieString) {\n this.parseCount++;\n this.lastToken = parseCookieValue(cookieString, this.cookieName);\n this.lastCookieString = cookieString;\n }\n return this.lastToken;\n }\n static ɵfac = function HttpXsrfCookieExtractor_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || HttpXsrfCookieExtractor)();\n };\n static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: HttpXsrfCookieExtractor,\n factory: HttpXsrfCookieExtractor.ɵfac,\n providedIn: 'root'\n });\n }\n return HttpXsrfCookieExtractor;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet HttpXsrfTokenExtractor = /*#__PURE__*/(() => {\n class HttpXsrfTokenExtractor {\n static ɵfac = function HttpXsrfTokenExtractor_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || HttpXsrfTokenExtractor)();\n };\n static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: HttpXsrfTokenExtractor,\n factory: function HttpXsrfTokenExtractor_Factory(__ngFactoryType__) {\n let __ngConditionalFactory__ = null;\n if (__ngFactoryType__) {\n __ngConditionalFactory__ = new (__ngFactoryType__ || HttpXsrfTokenExtractor)();\n } else {\n __ngConditionalFactory__ = i0.ɵɵinject(HttpXsrfCookieExtractor);\n }\n return __ngConditionalFactory__;\n },\n providedIn: 'root'\n });\n }\n return HttpXsrfTokenExtractor;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nfunction xsrfInterceptorFn(req, next) {\n if (!inject(XSRF_ENABLED) || req.method === 'GET' || req.method === 'HEAD') {\n return next(req);\n }\n try {\n const locationHref = inject(PlatformLocation).href;\n const {\n origin: locationOrigin\n } = new URL(locationHref);\n const {\n origin: requestOrigin\n } = new URL(req.url, locationOrigin);\n if (locationOrigin !== requestOrigin) {\n return next(req);\n }\n } catch {\n return next(req);\n }\n const token = inject(HttpXsrfTokenExtractor).getToken();\n const headerName = inject(XSRF_HEADER_NAME);\n if (token != null && !req.headers.has(headerName)) {\n req = req.clone({\n headers: req.headers.set(headerName, token)\n });\n }\n return next(req);\n}\nlet HttpXsrfInterceptor = /*#__PURE__*/(() => {\n class HttpXsrfInterceptor {\n injector = inject(EnvironmentInjector);\n intercept(initialRequest, next) {\n return runInInjectionContext(this.injector, () => xsrfInterceptorFn(initialRequest, downstreamRequest => next.handle(downstreamRequest)));\n }\n static ɵfac = function HttpXsrfInterceptor_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || HttpXsrfInterceptor)();\n };\n static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: HttpXsrfInterceptor,\n factory: HttpXsrfInterceptor.ɵfac\n });\n }\n return HttpXsrfInterceptor;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nvar HttpFeatureKind = /*#__PURE__*/function (HttpFeatureKind) {\n HttpFeatureKind[HttpFeatureKind[\"Interceptors\"] = 0] = \"Interceptors\";\n HttpFeatureKind[HttpFeatureKind[\"LegacyInterceptors\"] = 1] = \"LegacyInterceptors\";\n HttpFeatureKind[HttpFeatureKind[\"CustomXsrfConfiguration\"] = 2] = \"CustomXsrfConfiguration\";\n HttpFeatureKind[HttpFeatureKind[\"NoXsrfProtection\"] = 3] = \"NoXsrfProtection\";\n HttpFeatureKind[HttpFeatureKind[\"JsonpSupport\"] = 4] = \"JsonpSupport\";\n HttpFeatureKind[HttpFeatureKind[\"RequestsMadeViaParent\"] = 5] = \"RequestsMadeViaParent\";\n HttpFeatureKind[HttpFeatureKind[\"Fetch\"] = 6] = \"Fetch\";\n return HttpFeatureKind;\n}(HttpFeatureKind || {});\nfunction makeHttpFeature(kind, providers) {\n return {\n ɵkind: kind,\n ɵproviders: providers\n };\n}\nfunction provideHttpClient(...features) {\n if (ngDevMode) {\n const featureKinds = new Set(features.map(f => f.ɵkind));\n if (featureKinds.has(HttpFeatureKind.NoXsrfProtection) && featureKinds.has(HttpFeatureKind.CustomXsrfConfiguration)) {\n throw new Error(ngDevMode ? `Configuration error: found both withXsrfConfiguration() and withNoXsrfProtection() in the same call to provideHttpClient(), which is a contradiction.` : '');\n }\n }\n const providers = [HttpClient, HttpInterceptorHandler, {\n provide: HttpHandler,\n useExisting: HttpInterceptorHandler\n }, {\n provide: HttpBackend,\n useFactory: () => {\n return inject(FETCH_BACKEND, {\n optional: true\n }) ?? inject(HttpXhrBackend);\n }\n }, {\n provide: HTTP_INTERCEPTOR_FNS,\n useValue: xsrfInterceptorFn,\n multi: true\n }];\n for (const feature of features) {\n providers.push(...feature.ɵproviders);\n }\n return makeEnvironmentProviders(providers);\n}\nfunction withInterceptors(interceptorFns) {\n return makeHttpFeature(HttpFeatureKind.Interceptors, interceptorFns.map(interceptorFn => {\n return {\n provide: HTTP_INTERCEPTOR_FNS,\n useValue: interceptorFn,\n multi: true\n };\n }));\n}\nconst LEGACY_INTERCEPTOR_FN = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'LEGACY_INTERCEPTOR_FN' : '');\nfunction withInterceptorsFromDi() {\n return makeHttpFeature(HttpFeatureKind.LegacyInterceptors, [{\n provide: LEGACY_INTERCEPTOR_FN,\n useFactory: legacyInterceptorFnFactory\n }, {\n provide: HTTP_INTERCEPTOR_FNS,\n useExisting: LEGACY_INTERCEPTOR_FN,\n multi: true\n }]);\n}\nfunction withXsrfConfiguration({\n cookieName,\n headerName\n}) {\n const providers = [];\n if (cookieName !== undefined) {\n providers.push({\n provide: XSRF_COOKIE_NAME,\n useValue: cookieName\n });\n }\n if (headerName !== undefined) {\n providers.push({\n provide: XSRF_HEADER_NAME,\n useValue: headerName\n });\n }\n return makeHttpFeature(HttpFeatureKind.CustomXsrfConfiguration, providers);\n}\nfunction withNoXsrfProtection() {\n return makeHttpFeature(HttpFeatureKind.NoXsrfProtection, [{\n provide: XSRF_ENABLED,\n useValue: false\n }]);\n}\nfunction withJsonpSupport() {\n return makeHttpFeature(HttpFeatureKind.JsonpSupport, [JsonpClientBackend, {\n provide: JsonpCallbackContext,\n useFactory: jsonpCallbackContext\n }, {\n provide: HTTP_INTERCEPTOR_FNS,\n useValue: jsonpInterceptorFn,\n multi: true\n }]);\n}\nfunction withRequestsMadeViaParent() {\n return makeHttpFeature(HttpFeatureKind.RequestsMadeViaParent, [{\n provide: HttpBackend,\n useFactory: () => {\n const handlerFromParent = inject(HttpHandler, {\n skipSelf: true,\n optional: true\n });\n if (ngDevMode && handlerFromParent === null) {\n throw new Error('withRequestsMadeViaParent() can only be used when the parent injector also configures HttpClient');\n }\n return handlerFromParent;\n }\n }]);\n}\nfunction withFetch() {\n return makeHttpFeature(HttpFeatureKind.Fetch, [FetchBackend, {\n provide: FETCH_BACKEND,\n useExisting: FetchBackend\n }, {\n provide: HttpBackend,\n useExisting: FetchBackend\n }]);\n}\nlet HttpClientXsrfModule = /*#__PURE__*/(() => {\n class HttpClientXsrfModule {\n static disable() {\n return {\n ngModule: HttpClientXsrfModule,\n providers: [withNoXsrfProtection().ɵproviders]\n };\n }\n static withOptions(options = {}) {\n return {\n ngModule: HttpClientXsrfModule,\n providers: withXsrfConfiguration(options).ɵproviders\n };\n }\n static ɵfac = function HttpClientXsrfModule_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || HttpClientXsrfModule)();\n };\n static ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: HttpClientXsrfModule\n });\n static ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n providers: [HttpXsrfInterceptor, {\n provide: HTTP_INTERCEPTORS,\n useExisting: HttpXsrfInterceptor,\n multi: true\n }, {\n provide: HttpXsrfTokenExtractor,\n useClass: HttpXsrfCookieExtractor\n }, withXsrfConfiguration({\n cookieName: XSRF_DEFAULT_COOKIE_NAME,\n headerName: XSRF_DEFAULT_HEADER_NAME\n }).ɵproviders, {\n provide: XSRF_ENABLED,\n useValue: true\n }]\n });\n }\n return HttpClientXsrfModule;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet HttpClientModule = /*#__PURE__*/(() => {\n class HttpClientModule {\n static ɵfac = function HttpClientModule_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || HttpClientModule)();\n };\n static ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: HttpClientModule\n });\n static ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n providers: [provideHttpClient(withInterceptorsFromDi())]\n });\n }\n return HttpClientModule;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet HttpClientJsonpModule = /*#__PURE__*/(() => {\n class HttpClientJsonpModule {\n static ɵfac = function HttpClientJsonpModule_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || HttpClientJsonpModule)();\n };\n static ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: HttpClientJsonpModule\n });\n static ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n providers: [withJsonpSupport().ɵproviders]\n });\n }\n return HttpClientJsonpModule;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nexport { FetchBackend, HTTP_INTERCEPTORS, HTTP_ROOT_INTERCEPTOR_FNS, HttpBackend, HttpClient, HttpClientJsonpModule, HttpClientModule, HttpClientXsrfModule, HttpContext, HttpContextToken, HttpErrorResponse, HttpEventType, HttpFeatureKind, HttpHandler, HttpHeaderResponse, HttpHeaders, HttpInterceptorHandler, HttpParams, HttpRequest, HttpResponse, HttpResponseBase, HttpStatusCode, HttpUrlEncodingCodec, HttpXhrBackend, HttpXsrfTokenExtractor, JsonpClientBackend, JsonpInterceptor, REQUESTS_CONTRIBUTE_TO_STABILITY, provideHttpClient, withFetch, withInterceptors, withInterceptorsFromDi, withJsonpSupport, withNoXsrfProtection, withRequestsMadeViaParent, withXsrfConfiguration };\n","import { InjectionToken } from '@angular/core';\n\nexport const API_BASE_URL = new InjectionToken('API_BASE_URL');\n"],"mappings":"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","names":["HttpHeaders","_HttpHeaders","headers","line","index","name","value","values","lcName","update","other","key","clone","base","toDelete","existing","headerValues","fn","HttpContext","token","value","HttpUrlEncodingCodec","key","standardEncoding","paramParser","rawParams","codec","map","param","eqIdx","val","list","STANDARD_ENCODING_REGEX","STANDARD_ENCODING_REPLACEMENTS","v","s","t","valueToString","HttpParams","_HttpParams","options","RuntimeError","values","res","params","updates","_value","eKey","update","clone","base","idx","mightHaveBody","method","isArrayBuffer","isBlob","isFormData","isUrlSearchParams","CONTENT_TYPE_HEADER","ACCEPT_HEADER","TEXT_CONTENT_TYPE","JSON_CONTENT_TYPE","ACCEPT_HEADER_VALUE","HttpRequest","_HttpRequest","url","third","fourth","HttpHeaders","qIdx","sep","responseType","keepalive","priority","cache","mode","redirect","credentials","referrer","integrity","referrerPolicy","transferCache","timeout","body","withCredentials","reportProgress","headers","context","name","HttpEventType","HttpResponseBase","init","defaultStatus","defaultStatusText","HttpHeaderResponse","_HttpHeaderResponse","HttpResponse","_HttpResponse","HttpErrorResponse","HTTP_STATUS_CODE_OK","HTTP_STATUS_CODE_NO_CONTENT","FETCH_BACKEND","InjectionToken","XSSI_PREFIX","HttpXhrBackend","inject","TracingService","xhrFactory","fn","req","RuntimeError","of","switchMap","Observable","observer","xhr","name","values","ACCEPT_HEADER","ACCEPT_HEADER_VALUE","CONTENT_TYPE_HEADER","detectedType","responseType","reqBody","headerResponse","partialFromXhr","statusText","headers","HttpHeaders","url","HttpHeaderResponse","onLoad","status","body","HTTP_STATUS_CODE_NO_CONTENT","HTTP_STATUS_CODE_OK","ok","originalBody","XSSI_PREFIX","error","HttpResponse","HttpErrorResponse","onError","res","onTimeout","_","sentHeaders","onDownProgress","event","progressEvent","HttpEventType","onUpProgress","progress","__ngFactoryType__","ɵɵinject","XhrFactory","ɵɵdefineInjectable","interceptorChainEndFn","finalHandlerFn","chainedInterceptorFn","chainTailFn","interceptorFn","injector","initialRequest","finalHandlerFn","runInInjectionContext","downstreamRequest","HTTP_INTERCEPTOR_FNS","InjectionToken","HTTP_ROOT_INTERCEPTOR_FNS","REQUESTS_CONTRIBUTE_TO_STABILITY","HttpBackend","__ngFactoryType__","ɵɵdefineInjectable","__ngConditionalFactory__","ɵɵinject","HttpXhrBackend","HttpInterceptorHandler","inject","PendingTasks","REQUESTS_CONTRIBUTE_TO_STABILITY","backend","injector","initialRequest","dedupedInterceptorFns","HTTP_INTERCEPTOR_FNS","HTTP_ROOT_INTERCEPTOR_FNS","nextSequencedFn","interceptorFn","chainedInterceptorFn","interceptorChainEndFn","removeTask","downstreamRequest","finalize","__ngFactoryType__","ɵɵinject","HttpBackend","EnvironmentInjector","ɵɵdefineInjectable","HttpHandler","__ngConditionalFactory__","addBody","options","body","HttpClient","handler","first","url","req","HttpRequest","headers","HttpHeaders","params","HttpParams","events$","of","concatMap","res$","filter","event","HttpResponse","map","res","RuntimeError","callbackParam","XSRF_ENABLED","InjectionToken","XSRF_DEFAULT_COOKIE_NAME","XSRF_COOKIE_NAME","XSRF_DEFAULT_HEADER_NAME","XSRF_HEADER_NAME","HttpXsrfCookieExtractor","inject","DOCUMENT","cookieString","parseCookieValue","__ngFactoryType__","ɵɵdefineInjectable","HttpXsrfTokenExtractor","__ngConditionalFactory__","ɵɵinject","xsrfInterceptorFn","req","next","locationHref","PlatformLocation","locationOrigin","requestOrigin","token","headerName","HttpFeatureKind","makeHttpFeature","kind","providers","provideHttpClient","features","HttpClient","HttpInterceptorHandler","HttpHandler","HttpBackend","inject","FETCH_BACKEND","HttpXhrBackend","HTTP_INTERCEPTOR_FNS","xsrfInterceptorFn","feature","makeEnvironmentProviders","withInterceptors","interceptorFns","interceptorFn","API_BASE_URL","InjectionToken"],"x_google_ignoreList":[0]} \ No newline at end of file diff --git a/frontend/dist-instrumented/chunk-4BPWJDJR.js b/frontend/dist-instrumented/chunk-4BPWJDJR.js new file mode 100644 index 00000000..1bd73071 --- /dev/null +++ b/frontend/dist-instrumented/chunk-4BPWJDJR.js @@ -0,0 +1,3 @@ +function cov_208o7mhyhl(){var path="/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-4BPWJDJR.js";var hash="6ce5981c830f1cb658b16c23156e060120b2f442";var global=new Function("return this")();var gcv="__coverage__";var coverageData={path:"/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-4BPWJDJR.js",statementMap:{"0":{start:{line:1,column:182},end:{line:1,column:1970}},"1":{start:{line:1,column:210},end:{line:1,column:214}},"2":{start:{line:1,column:223},end:{line:1,column:227}},"3":{start:{line:1,column:251},end:{line:1,column:255}},"4":{start:{line:1,column:281},end:{line:1,column:321}},"5":{start:{line:1,column:340},end:{line:1,column:376}},"6":{start:{line:1,column:394},end:{line:1,column:466}},"7":{start:{line:1,column:483},end:{line:1,column:505}},"8":{start:{line:1,column:521},end:{line:1,column:536}},"9":{start:{line:1,column:556},end:{line:1,column:599}},"10":{start:{line:1,column:622},end:{line:1,column:657}},"11":{start:{line:1,column:660},end:{line:1,column:685}},"12":{start:{line:1,column:686},end:{line:1,column:768}},"13":{start:{line:1,column:692},end:{line:1,column:768}},"14":{start:{line:1,column:774},end:{line:1,column:798}},"15":{start:{line:1,column:801},end:{line:1,column:822}},"16":{start:{line:1,column:823},end:{line:1,column:1345}},"17":{start:{line:1,column:898},end:{line:1,column:915}},"18":{start:{line:1,column:916},end:{line:1,column:1009}},"19":{start:{line:1,column:923},end:{line:1,column:1002}},"20":{start:{line:1,column:1002},end:{line:1,column:1008}},"21":{start:{line:1,column:1009},end:{line:1,column:1093}},"22":{start:{line:1,column:1111},end:{line:1,column:1317}},"23":{start:{line:1,column:1318},end:{line:1,column:1342}},"24":{start:{line:1,column:1362},end:{line:1,column:1402}},"25":{start:{line:1,column:1441},end:{line:1,column:1465}},"26":{start:{line:1,column:1466},end:{line:1,column:1594}},"27":{start:{line:1,column:1502},end:{line:1,column:1568}},"28":{start:{line:1,column:1566},end:{line:1,column:1567}},"29":{start:{line:1,column:1630},end:{line:1,column:1654}},"30":{start:{line:1,column:1655},end:{line:1,column:1769}},"31":{start:{line:1,column:1694},end:{line:1,column:1757}},"32":{start:{line:1,column:1755},end:{line:1,column:1756}},"33":{start:{line:1,column:1784},end:{line:1,column:1821}},"34":{start:{line:1,column:1842},end:{line:1,column:1853}},"35":{start:{line:1,column:1871},end:{line:1,column:1906}},"36":{start:{line:1,column:1883},end:{line:1,column:1905}},"37":{start:{line:1,column:1925},end:{line:1,column:1957}},"38":{start:{line:1,column:1958},end:{line:1,column:1966}}},fnMap:{"0":{name:"(anonymous_0)",decl:{start:{line:1,column:183},end:{line:1,column:184}},loc:{start:{line:1,column:187},end:{line:1,column:1967}},line:1},"1":{name:"(anonymous_1)",decl:{start:{line:1,column:506},end:{line:1,column:507}},loc:{start:{line:1,column:520},end:{line:1,column:537}},line:1},"2":{name:"(anonymous_2)",decl:{start:{line:1,column:537},end:{line:1,column:538}},loc:{start:{line:1,column:555},end:{line:1,column:600}},line:1},"3":{name:"(anonymous_3)",decl:{start:{line:1,column:600},end:{line:1,column:601}},loc:{start:{line:1,column:615},end:{line:1,column:1346}},line:1},"4":{name:"(anonymous_4)",decl:{start:{line:1,column:888},end:{line:1,column:889}},loc:{start:{line:1,column:891},end:{line:1,column:1094}},line:1},"5":{name:"(anonymous_5)",decl:{start:{line:1,column:1101},end:{line:1,column:1102}},loc:{start:{line:1,column:1104},end:{line:1,column:1343}},line:1},"6":{name:"(anonymous_6)",decl:{start:{line:1,column:1346},end:{line:1,column:1347}},loc:{start:{line:1,column:1361},end:{line:1,column:1403}},line:1},"7":{name:"(anonymous_7)",decl:{start:{line:1,column:1403},end:{line:1,column:1404}},loc:{start:{line:1,column:1434},end:{line:1,column:1595}},line:1},"8":{name:"(anonymous_8)",decl:{start:{line:1,column:1499},end:{line:1,column:1500}},loc:{start:{line:1,column:1502},end:{line:1,column:1568}},line:1},"9":{name:"(anonymous_9)",decl:{start:{line:1,column:1562},end:{line:1,column:1563}},loc:{start:{line:1,column:1566},end:{line:1,column:1567}},line:1},"10":{name:"(anonymous_10)",decl:{start:{line:1,column:1595},end:{line:1,column:1596}},loc:{start:{line:1,column:1623},end:{line:1,column:1770}},line:1},"11":{name:"(anonymous_11)",decl:{start:{line:1,column:1691},end:{line:1,column:1692}},loc:{start:{line:1,column:1694},end:{line:1,column:1757}},line:1},"12":{name:"(anonymous_12)",decl:{start:{line:1,column:1751},end:{line:1,column:1752}},loc:{start:{line:1,column:1755},end:{line:1,column:1756}},line:1},"13":{name:"(anonymous_13)",decl:{start:{line:1,column:1770},end:{line:1,column:1771}},loc:{start:{line:1,column:1783},end:{line:1,column:1822}},line:1},"14":{name:"(anonymous_14)",decl:{start:{line:1,column:1822},end:{line:1,column:1823}},loc:{start:{line:1,column:1841},end:{line:1,column:1854}},line:1},"15":{name:"(anonymous_15)",decl:{start:{line:1,column:1871},end:{line:1,column:1872}},loc:{start:{line:1,column:1882},end:{line:1,column:1906}},line:1}},branchMap:{"0":{loc:{start:{line:1,column:686},end:{line:1,column:768}},type:"if",locations:[{start:{line:1,column:686},end:{line:1,column:768}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1":{loc:{start:{line:1,column:916},end:{line:1,column:1009}},type:"if",locations:[{start:{line:1,column:916},end:{line:1,column:1009}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"2":{loc:{start:{line:1,column:1473},end:{line:1,column:1594}},type:"cond-expr",locations:[{start:{line:1,column:1475},end:{line:1,column:1570}},{start:{line:1,column:1571},end:{line:1,column:1594}}],line:1},"3":{loc:{start:{line:1,column:1502},end:{line:1,column:1568}},type:"cond-expr",locations:[{start:{line:1,column:1521},end:{line:1,column:1559}},{start:{line:1,column:1560},end:{line:1,column:1568}}],line:1},"4":{loc:{start:{line:1,column:1662},end:{line:1,column:1769}},type:"cond-expr",locations:[{start:{line:1,column:1664},end:{line:1,column:1759}},{start:{line:1,column:1760},end:{line:1,column:1769}}],line:1},"5":{loc:{start:{line:1,column:1694},end:{line:1,column:1757}},type:"cond-expr",locations:[{start:{line:1,column:1713},end:{line:1,column:1748}},{start:{line:1,column:1749},end:{line:1,column:1757}}],line:1},"6":{loc:{start:{line:1,column:1791},end:{line:1,column:1821}},type:"binary-expr",locations:[{start:{line:1,column:1791},end:{line:1,column:1805}},{start:{line:1,column:1807},end:{line:1,column:1821}}],line:1},"7":{loc:{start:{line:1,column:1894},end:{line:1,column:1898}},type:"binary-expr",locations:[{start:{line:1,column:1894},end:{line:1,column:1895}},{start:{line:1,column:1897},end:{line:1,column:1898}}],line:1}},s:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0},f:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0},b:{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0]},inputSourceMap:{version:3,sources:["src/app/features/my-vimar-integration/services/my-vimar-cloud-api-feature.service.ts"],sourcesContent:["import { DOCUMENT } from '@angular/common';\nimport { HttpClient, HttpErrorResponse } from '@angular/common/http';\nimport { Inject, Injectable, inject } from '@angular/core';\nimport { Observable, catchError, of, throwError } from 'rxjs';\nimport { ApiErrorDisplayService } from '../../../core/services/api-error-display.service';\nimport { IVimarCloudApiService } from '../../../core/services/vimar-cloud-api.service.interface';\nimport { API_BASE_URL } from '../../../core/tokens/api-base-url.token';\nimport { MyVimarAccount } from '../models/my-vimar-account.model';\n\ninterface PrepareOAuthTicketResponse {\n ticket: string;\n}\n\n@Injectable()\nexport class MyVimarCloudApiFeatureService implements IVimarCloudApiService {\n private readonly http = inject(HttpClient);\n private readonly baseUrl = inject(API_BASE_URL);\n private readonly apiErrorDisplayService = inject(ApiErrorDisplayService);\n private readonly prepareAuthorizeEndpoint = `${this.baseUrl}/api/auth/prepare-oauth`;\n private readonly authorizeEndpoint = `${this.baseUrl}/api/auth/authorize`;\n private readonly accountEndpoints = [\n `${this.baseUrl}/my-vimar/account`,\n `${this.baseUrl}/api/vimar-account`,\n ];\n private readonly fallbackAccount: MyVimarAccount = { email: '', isLinked: false };\n\n constructor(@Inject(DOCUMENT) private readonly document: Document) { }\n\n public getLinkedAccount(): Observable {\n return this.getLinkedAccountFromEndpoint(0);\n }\n\n public initiateOAuth(): void {\n const location = this.document.defaultView?.location;\n const browser = this.document.defaultView;\n\n if (!location) {\n throw new Error('Browser location is not available for OAuth redirection.');\n }\n\n const redirectUrl = `${location.origin}/vimar-link`;\n const encodedRedirectUrl = encodeURIComponent(redirectUrl);\n\n this.http.post(this.prepareAuthorizeEndpoint, {}).subscribe({\n next: (response) => {\n const ticket = response?.ticket?.trim();\n if (!ticket) {\n this.showOAuthError(\n 'Ticket OAuth non valido. Riprova tra qualche istante.',\n browser,\n );\n return;\n }\n\n // Trigger a full-page navigation so backend 302 redirects are handled by the browser.\n location.href =\n `${this.authorizeEndpoint}?ticket=${encodeURIComponent(ticket)}` +\n `&redirect_url=${encodedRedirectUrl}`;\n },\n error: (error: unknown) => {\n const message = this.apiErrorDisplayService.toMessage(error, {\n fallbackMessage:\n 'Impossibile avviare il collegamento MyVimar. Riprova tra qualche istante.',\n actionLabel: 'avviare il collegamento MyVimar',\n nonHttpStrategy: 'message',\n });\n\n this.showOAuthError(message, browser);\n },\n });\n }\n\n public unlinkAccount(): Observable {\n return this.unlinkAccountFromEndpoint(0);\n }\n\n private getLinkedAccountFromEndpoint(index: number): Observable {\n const endpoint = this.accountEndpoints[index];\n if (!endpoint) {\n return of(this.fallbackAccount);\n }\n\n return this.http.get(endpoint).pipe(\n catchError((error: unknown) => {\n if (this.isNotFound(error)) {\n return this.getLinkedAccountFromEndpoint(index + 1);\n }\n return throwError(() => error);\n })\n );\n }\n\n private unlinkAccountFromEndpoint(index: number): Observable {\n const endpoint = this.accountEndpoints[index];\n if (!endpoint) {\n return of(void 0);\n }\n\n return this.http.delete(endpoint).pipe(\n catchError((error: unknown) => {\n if (this.isNotFound(error)) {\n return this.unlinkAccountFromEndpoint(index + 1);\n }\n return throwError(() => error);\n })\n );\n }\n\n private isNotFound(error: unknown): error is HttpErrorResponse {\n return error instanceof HttpErrorResponse && error.status === 404;\n }\n\n private showOAuthError(message: string, browser: Window | null): void {\n browser?.alert(message);\n }\n}\n"],mappings:"gLAcA,IAAaA,GAA6B,IAAA,CAApC,MAAOA,CAA6B,CAYOC,SAX9BC,KAAOC,EAAOC,CAAU,EACxBC,QAAUF,EAAOG,CAAY,EAC7BC,uBAAyBJ,EAAOK,CAAsB,EACtDC,yBAA2B,GAAG,KAAKJ,OAAO,0BAC1CK,kBAAoB,GAAG,KAAKL,OAAO,sBACnCM,iBAAmB,CAClC,GAAG,KAAKN,OAAO,oBACf,GAAG,KAAKA,OAAO,oBAAoB,EAEpBO,gBAAkC,CAAEC,MAAO,GAAIC,SAAU,EAAK,EAE/EC,YAA+Cd,EAAkB,CAAlB,KAAAA,SAAAA,CAAsB,CAE9De,kBAAgB,CACrB,OAAO,KAAKC,6BAA6B,CAAC,CAC5C,CAEOC,eAAa,CAClB,IAAMC,EAAW,KAAKlB,SAASmB,aAAaD,SACtCE,EAAU,KAAKpB,SAASmB,YAE9B,GAAI,CAACD,EACH,MAAM,IAAIG,MAAM,0DAA0D,EAG5E,IAAMC,EAAc,GAAGJ,EAASK,MAAM,cAChCC,EAAqBC,mBAAmBH,CAAW,EAEzD,KAAKrB,KAAKyB,KAAiC,KAAKlB,yBAA0B,CAAA,CAAE,EAAEmB,UAAU,CACtFC,KAAOC,GAAY,CACjB,IAAMC,EAASD,GAAUC,QAAQC,KAAI,EACrC,GAAI,CAACD,EAAQ,CACX,KAAKE,eACH,wDACAZ,CAAO,EAET,MACF,CAGAF,EAASe,KACP,GAAG,KAAKxB,iBAAiB,WAAWgB,mBAAmBK,CAAM,CAAC,iBAC7CN,CAAkB,EACvC,EACAU,MAAQA,GAAkB,CACxB,IAAMC,EAAU,KAAK7B,uBAAuB8B,UAAUF,EAAO,CAC3DG,gBACE,4EACFC,YAAa,kCACbC,gBAAiB,UAClB,EAED,KAAKP,eAAeG,EAASf,CAAO,CACtC,EACD,CACH,CAEOoB,eAAa,CAClB,OAAO,KAAKC,0BAA0B,CAAC,CACzC,CAEQzB,6BAA6B0B,EAAa,CAChD,IAAMC,EAAW,KAAKjC,iBAAiBgC,CAAK,EAC5C,OAAKC,EAIE,KAAK1C,KAAK2C,IAAoBD,CAAQ,EAAEE,KAC7CC,EAAYZ,GACN,KAAKa,WAAWb,CAAK,EAChB,KAAKlB,6BAA6B0B,EAAQ,CAAC,EAE7CM,EAAW,IAAMd,CAAK,CAC9B,CAAC,EATKe,EAAG,KAAKtC,eAAe,CAWlC,CAEQ8B,0BAA0BC,EAAa,CAC7C,IAAMC,EAAW,KAAKjC,iBAAiBgC,CAAK,EAC5C,OAAKC,EAIE,KAAK1C,KAAKiD,OAAaP,CAAQ,EAAEE,KACtCC,EAAYZ,GACN,KAAKa,WAAWb,CAAK,EAChB,KAAKO,0BAA0BC,EAAQ,CAAC,EAE1CM,EAAW,IAAMd,CAAK,CAC9B,CAAC,EATKe,EAAG,MAAM,CAWpB,CAEQF,WAAWb,EAAc,CAC/B,OAAOA,aAAiBiB,GAAqBjB,EAAMkB,SAAW,GAChE,CAEQpB,eAAeG,EAAiBf,EAAsB,CAC5DA,GAASiC,MAAMlB,CAAO,CACxB,4CApGWpC,GAA6BuD,EAYpBC,CAAQ,CAAA,CAAA,6BAZjBxD,EAA6ByD,QAA7BzD,EAA6B0D,SAAA,CAAA,SAA7B1D,CAA6B,GAAA",names:["MyVimarCloudApiFeatureService","document","http","inject","HttpClient","baseUrl","API_BASE_URL","apiErrorDisplayService","ApiErrorDisplayService","prepareAuthorizeEndpoint","authorizeEndpoint","accountEndpoints","fallbackAccount","email","isLinked","constructor","getLinkedAccount","getLinkedAccountFromEndpoint","initiateOAuth","location","defaultView","browser","Error","redirectUrl","origin","encodedRedirectUrl","encodeURIComponent","post","subscribe","next","response","ticket","trim","showOAuthError","href","error","message","toMessage","fallbackMessage","actionLabel","nonHttpStrategy","unlinkAccount","unlinkAccountFromEndpoint","index","endpoint","get","pipe","catchError","isNotFound","throwError","of","delete","HttpErrorResponse","status","alert","\u0275\u0275inject","DOCUMENT","factory","\u0275fac"]},_coverageSchema:"1a1c01bbd47fc00a2c39e90264f33305004495a9",hash:"6ce5981c830f1cb658b16c23156e060120b2f442"};var coverage=global[gcv]||(global[gcv]={});if(!coverage[path]||coverage[path].hash!==hash){coverage[path]=coverageData;}var actualCoverage=coverage[path];{// @ts-ignore +cov_208o7mhyhl=function(){return actualCoverage;};}return actualCoverage;}cov_208o7mhyhl();import{a as E}from"./chunk-VIBKONAW.js";import{a as d,b as m,e as f}from"./chunk-2S5V5XEE.js";import{L as p,P as h,Q as n,_ as l,h as a,i as s,w as u}from"./chunk-RYTNMYZW.js";var I=(cov_208o7mhyhl().s[0]++,(()=>{cov_208o7mhyhl().f[0]++;class r{document;http=(cov_208o7mhyhl().s[1]++,n(m));baseUrl=(cov_208o7mhyhl().s[2]++,n(f));apiErrorDisplayService=(cov_208o7mhyhl().s[3]++,n(E));prepareAuthorizeEndpoint=(cov_208o7mhyhl().s[4]++,`${this.baseUrl}/api/auth/prepare-oauth`);authorizeEndpoint=(cov_208o7mhyhl().s[5]++,`${this.baseUrl}/api/auth/authorize`);accountEndpoints=(cov_208o7mhyhl().s[6]++,[`${this.baseUrl}/my-vimar/account`,`${this.baseUrl}/api/vimar-account`]);fallbackAccount=(cov_208o7mhyhl().s[7]++,{email:"",isLinked:!1});constructor(t){cov_208o7mhyhl().f[1]++;cov_208o7mhyhl().s[8]++;this.document=t;}getLinkedAccount(){cov_208o7mhyhl().f[2]++;cov_208o7mhyhl().s[9]++;return this.getLinkedAccountFromEndpoint(0);}initiateOAuth(){cov_208o7mhyhl().f[3]++;let t=(cov_208o7mhyhl().s[10]++,this.document.defaultView?.location),i=(cov_208o7mhyhl().s[11]++,this.document.defaultView);cov_208o7mhyhl().s[12]++;if(!t){cov_208o7mhyhl().b[0][0]++;cov_208o7mhyhl().s[13]++;throw new Error("Browser location is not available for OAuth redirection.");}else{cov_208o7mhyhl().b[0][1]++;}let o=(cov_208o7mhyhl().s[14]++,`${t.origin}/vimar-link`),A=(cov_208o7mhyhl().s[15]++,encodeURIComponent(o));cov_208o7mhyhl().s[16]++;this.http.post(this.prepareAuthorizeEndpoint,{}).subscribe({next:c=>{cov_208o7mhyhl().f[4]++;let e=(cov_208o7mhyhl().s[17]++,c?.ticket?.trim());cov_208o7mhyhl().s[18]++;if(!e){cov_208o7mhyhl().b[1][0]++;cov_208o7mhyhl().s[19]++;this.showOAuthError("Ticket OAuth non valido. Riprova tra qualche istante.",i);cov_208o7mhyhl().s[20]++;return;}else{cov_208o7mhyhl().b[1][1]++;}cov_208o7mhyhl().s[21]++;t.href=`${this.authorizeEndpoint}?ticket=${encodeURIComponent(e)}&redirect_url=${A}`;},error:c=>{cov_208o7mhyhl().f[5]++;let e=(cov_208o7mhyhl().s[22]++,this.apiErrorDisplayService.toMessage(c,{fallbackMessage:"Impossibile avviare il collegamento MyVimar. Riprova tra qualche istante.",actionLabel:"avviare il collegamento MyVimar",nonHttpStrategy:"message"}));cov_208o7mhyhl().s[23]++;this.showOAuthError(e,i);}});}unlinkAccount(){cov_208o7mhyhl().f[6]++;cov_208o7mhyhl().s[24]++;return this.unlinkAccountFromEndpoint(0);}getLinkedAccountFromEndpoint(t){cov_208o7mhyhl().f[7]++;let i=(cov_208o7mhyhl().s[25]++,this.accountEndpoints[t]);cov_208o7mhyhl().s[26]++;return i?(cov_208o7mhyhl().b[2][0]++,this.http.get(i).pipe(u(o=>{cov_208o7mhyhl().f[8]++;cov_208o7mhyhl().s[27]++;return this.isNotFound(o)?(cov_208o7mhyhl().b[3][0]++,this.getLinkedAccountFromEndpoint(t+1)):(cov_208o7mhyhl().b[3][1]++,s(()=>{cov_208o7mhyhl().f[9]++;cov_208o7mhyhl().s[28]++;return o;}));}))):(cov_208o7mhyhl().b[2][1]++,a(this.fallbackAccount));}unlinkAccountFromEndpoint(t){cov_208o7mhyhl().f[10]++;let i=(cov_208o7mhyhl().s[29]++,this.accountEndpoints[t]);cov_208o7mhyhl().s[30]++;return i?(cov_208o7mhyhl().b[4][0]++,this.http.delete(i).pipe(u(o=>{cov_208o7mhyhl().f[11]++;cov_208o7mhyhl().s[31]++;return this.isNotFound(o)?(cov_208o7mhyhl().b[5][0]++,this.unlinkAccountFromEndpoint(t+1)):(cov_208o7mhyhl().b[5][1]++,s(()=>{cov_208o7mhyhl().f[12]++;cov_208o7mhyhl().s[32]++;return o;}));}))):(cov_208o7mhyhl().b[4][1]++,a(void 0));}isNotFound(t){cov_208o7mhyhl().f[13]++;cov_208o7mhyhl().s[33]++;return(cov_208o7mhyhl().b[6][0]++,t instanceof d)&&(cov_208o7mhyhl().b[6][1]++,t.status===404);}showOAuthError(t,i){cov_208o7mhyhl().f[14]++;cov_208o7mhyhl().s[34]++;i?.alert(t);}static ɵfac=(cov_208o7mhyhl().s[35]++,function(i){cov_208o7mhyhl().f[15]++;cov_208o7mhyhl().s[36]++;return new((cov_208o7mhyhl().b[7][0]++,i)||(cov_208o7mhyhl().b[7][1]++,r))(h(l));});static ɵprov=(cov_208o7mhyhl().s[37]++,p({token:r,factory:r.ɵfac}));}cov_208o7mhyhl().s[38]++;return r;})());export{I as a};//# sourceMappingURL=chunk-4BPWJDJR.js.map +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJJIiwiY292XzIwOG83bWh5aGwiLCJzIiwiZiIsInIiLCJkb2N1bWVudCIsImh0dHAiLCJuIiwibSIsImJhc2VVcmwiLCJhcGlFcnJvckRpc3BsYXlTZXJ2aWNlIiwiRSIsInByZXBhcmVBdXRob3JpemVFbmRwb2ludCIsImF1dGhvcml6ZUVuZHBvaW50IiwiYWNjb3VudEVuZHBvaW50cyIsImZhbGxiYWNrQWNjb3VudCIsImVtYWlsIiwiaXNMaW5rZWQiLCJjb25zdHJ1Y3RvciIsInQiLCJnZXRMaW5rZWRBY2NvdW50IiwiZ2V0TGlua2VkQWNjb3VudEZyb21FbmRwb2ludCIsImluaXRpYXRlT0F1dGgiLCJkZWZhdWx0VmlldyIsImxvY2F0aW9uIiwiaSIsImIiLCJFcnJvciIsIm8iLCJvcmlnaW4iLCJBIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwicG9zdCIsInN1YnNjcmliZSIsIm5leHQiLCJjIiwiZSIsInRpY2tldCIsInRyaW0iLCJzaG93T0F1dGhFcnJvciIsImhyZWYiLCJlcnJvciIsInRvTWVzc2FnZSIsImZhbGxiYWNrTWVzc2FnZSIsImFjdGlvbkxhYmVsIiwibm9uSHR0cFN0cmF0ZWd5IiwidW5saW5rQWNjb3VudCIsInVubGlua0FjY291bnRGcm9tRW5kcG9pbnQiLCJnZXQiLCJwaXBlIiwidSIsImlzTm90Rm91bmQiLCJhIiwiZGVsZXRlIiwiZCIsInN0YXR1cyIsImFsZXJ0IiwiybVmYWMiLCJoIiwibCIsIsm1cHJvdiIsInAiLCJ0b2tlbiIsImZhY3RvcnkiXSwic291cmNlcyI6WyJzcmMvYXBwL2ZlYXR1cmVzL215LXZpbWFyLWludGVncmF0aW9uL3NlcnZpY2VzL215LXZpbWFyLWNsb3VkLWFwaS1mZWF0dXJlLnNlcnZpY2UudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEVycm9yUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgY2F0Y2hFcnJvciwgb2YsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFwaUVycm9yRGlzcGxheVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NlcnZpY2VzL2FwaS1lcnJvci1kaXNwbGF5LnNlcnZpY2UnO1xuaW1wb3J0IHsgSVZpbWFyQ2xvdWRBcGlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlcy92aW1hci1jbG91ZC1hcGkuc2VydmljZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQVBJX0JBU0VfVVJMIH0gZnJvbSAnLi4vLi4vLi4vY29yZS90b2tlbnMvYXBpLWJhc2UtdXJsLnRva2VuJztcbmltcG9ydCB7IE15VmltYXJBY2NvdW50IH0gZnJvbSAnLi4vbW9kZWxzL215LXZpbWFyLWFjY291bnQubW9kZWwnO1xuXG5pbnRlcmZhY2UgUHJlcGFyZU9BdXRoVGlja2V0UmVzcG9uc2Uge1xuICB0aWNrZXQ6IHN0cmluZztcbn1cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIE15VmltYXJDbG91ZEFwaUZlYXR1cmVTZXJ2aWNlIGltcGxlbWVudHMgSVZpbWFyQ2xvdWRBcGlTZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBodHRwID0gaW5qZWN0KEh0dHBDbGllbnQpO1xuICBwcml2YXRlIHJlYWRvbmx5IGJhc2VVcmwgPSBpbmplY3QoQVBJX0JBU0VfVVJMKTtcbiAgcHJpdmF0ZSByZWFkb25seSBhcGlFcnJvckRpc3BsYXlTZXJ2aWNlID0gaW5qZWN0KEFwaUVycm9yRGlzcGxheVNlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IHByZXBhcmVBdXRob3JpemVFbmRwb2ludCA9IGAke3RoaXMuYmFzZVVybH0vYXBpL2F1dGgvcHJlcGFyZS1vYXV0aGA7XG4gIHByaXZhdGUgcmVhZG9ubHkgYXV0aG9yaXplRW5kcG9pbnQgPSBgJHt0aGlzLmJhc2VVcmx9L2FwaS9hdXRoL2F1dGhvcml6ZWA7XG4gIHByaXZhdGUgcmVhZG9ubHkgYWNjb3VudEVuZHBvaW50cyA9IFtcbiAgICBgJHt0aGlzLmJhc2VVcmx9L215LXZpbWFyL2FjY291bnRgLFxuICAgIGAke3RoaXMuYmFzZVVybH0vYXBpL3ZpbWFyLWFjY291bnRgLFxuICBdO1xuICBwcml2YXRlIHJlYWRvbmx5IGZhbGxiYWNrQWNjb3VudDogTXlWaW1hckFjY291bnQgPSB7IGVtYWlsOiAnJywgaXNMaW5rZWQ6IGZhbHNlIH07XG5cbiAgY29uc3RydWN0b3IoQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSByZWFkb25seSBkb2N1bWVudDogRG9jdW1lbnQpIHsgfVxuXG4gIHB1YmxpYyBnZXRMaW5rZWRBY2NvdW50KCk6IE9ic2VydmFibGU8TXlWaW1hckFjY291bnQ+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRMaW5rZWRBY2NvdW50RnJvbUVuZHBvaW50KDApO1xuICB9XG5cbiAgcHVibGljIGluaXRpYXRlT0F1dGgoKTogdm9pZCB7XG4gICAgY29uc3QgbG9jYXRpb24gPSB0aGlzLmRvY3VtZW50LmRlZmF1bHRWaWV3Py5sb2NhdGlvbjtcbiAgICBjb25zdCBicm93c2VyID0gdGhpcy5kb2N1bWVudC5kZWZhdWx0VmlldztcblxuICAgIGlmICghbG9jYXRpb24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQnJvd3NlciBsb2NhdGlvbiBpcyBub3QgYXZhaWxhYmxlIGZvciBPQXV0aCByZWRpcmVjdGlvbi4nKTtcbiAgICB9XG5cbiAgICBjb25zdCByZWRpcmVjdFVybCA9IGAke2xvY2F0aW9uLm9yaWdpbn0vdmltYXItbGlua2A7XG4gICAgY29uc3QgZW5jb2RlZFJlZGlyZWN0VXJsID0gZW5jb2RlVVJJQ29tcG9uZW50KHJlZGlyZWN0VXJsKTtcblxuICAgIHRoaXMuaHR0cC5wb3N0PFByZXBhcmVPQXV0aFRpY2tldFJlc3BvbnNlPih0aGlzLnByZXBhcmVBdXRob3JpemVFbmRwb2ludCwge30pLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAocmVzcG9uc2UpID0+IHtcbiAgICAgICAgY29uc3QgdGlja2V0ID0gcmVzcG9uc2U/LnRpY2tldD8udHJpbSgpO1xuICAgICAgICBpZiAoIXRpY2tldCkge1xuICAgICAgICAgIHRoaXMuc2hvd09BdXRoRXJyb3IoXG4gICAgICAgICAgICAnVGlja2V0IE9BdXRoIG5vbiB2YWxpZG8uIFJpcHJvdmEgdHJhIHF1YWxjaGUgaXN0YW50ZS4nLFxuICAgICAgICAgICAgYnJvd3NlcixcbiAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRyaWdnZXIgYSBmdWxsLXBhZ2UgbmF2aWdhdGlvbiBzbyBiYWNrZW5kIDMwMiByZWRpcmVjdHMgYXJlIGhhbmRsZWQgYnkgdGhlIGJyb3dzZXIuXG4gICAgICAgIGxvY2F0aW9uLmhyZWYgPVxuICAgICAgICAgIGAke3RoaXMuYXV0aG9yaXplRW5kcG9pbnR9P3RpY2tldD0ke2VuY29kZVVSSUNvbXBvbmVudCh0aWNrZXQpfWAgK1xuICAgICAgICAgIGAmcmVkaXJlY3RfdXJsPSR7ZW5jb2RlZFJlZGlyZWN0VXJsfWA7XG4gICAgICB9LFxuICAgICAgZXJyb3I6IChlcnJvcjogdW5rbm93bikgPT4ge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0gdGhpcy5hcGlFcnJvckRpc3BsYXlTZXJ2aWNlLnRvTWVzc2FnZShlcnJvciwge1xuICAgICAgICAgIGZhbGxiYWNrTWVzc2FnZTpcbiAgICAgICAgICAgICdJbXBvc3NpYmlsZSBhdnZpYXJlIGlsIGNvbGxlZ2FtZW50byBNeVZpbWFyLiBSaXByb3ZhIHRyYSBxdWFsY2hlIGlzdGFudGUuJyxcbiAgICAgICAgICBhY3Rpb25MYWJlbDogJ2F2dmlhcmUgaWwgY29sbGVnYW1lbnRvIE15VmltYXInLFxuICAgICAgICAgIG5vbkh0dHBTdHJhdGVneTogJ21lc3NhZ2UnLFxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnNob3dPQXV0aEVycm9yKG1lc3NhZ2UsIGJyb3dzZXIpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyB1bmxpbmtBY2NvdW50KCk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLnVubGlua0FjY291bnRGcm9tRW5kcG9pbnQoMCk7XG4gIH1cblxuICBwcml2YXRlIGdldExpbmtlZEFjY291bnRGcm9tRW5kcG9pbnQoaW5kZXg6IG51bWJlcik6IE9ic2VydmFibGU8TXlWaW1hckFjY291bnQ+IHtcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYWNjb3VudEVuZHBvaW50c1tpbmRleF07XG4gICAgaWYgKCFlbmRwb2ludCkge1xuICAgICAgcmV0dXJuIG9mKHRoaXMuZmFsbGJhY2tBY2NvdW50KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxNeVZpbWFyQWNjb3VudD4oZW5kcG9pbnQpLnBpcGUoXG4gICAgICBjYXRjaEVycm9yKChlcnJvcjogdW5rbm93bikgPT4ge1xuICAgICAgICBpZiAodGhpcy5pc05vdEZvdW5kKGVycm9yKSkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmdldExpbmtlZEFjY291bnRGcm9tRW5kcG9pbnQoaW5kZXggKyAxKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBlcnJvcik7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHVubGlua0FjY291bnRGcm9tRW5kcG9pbnQoaW5kZXg6IG51bWJlcik6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hY2NvdW50RW5kcG9pbnRzW2luZGV4XTtcbiAgICBpZiAoIWVuZHBvaW50KSB7XG4gICAgICByZXR1cm4gb2Yodm9pZCAwKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5odHRwLmRlbGV0ZTx2b2lkPihlbmRwb2ludCkucGlwZShcbiAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiB1bmtub3duKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmlzTm90Rm91bmQoZXJyb3IpKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMudW5saW5rQWNjb3VudEZyb21FbmRwb2ludChpbmRleCArIDEpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGVycm9yKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNOb3RGb3VuZChlcnJvcjogdW5rbm93bik6IGVycm9yIGlzIEh0dHBFcnJvclJlc3BvbnNlIHtcbiAgICByZXR1cm4gZXJyb3IgaW5zdGFuY2VvZiBIdHRwRXJyb3JSZXNwb25zZSAmJiBlcnJvci5zdGF0dXMgPT09IDQwNDtcbiAgfVxuXG4gIHByaXZhdGUgc2hvd09BdXRoRXJyb3IobWVzc2FnZTogc3RyaW5nLCBicm93c2VyOiBXaW5kb3cgfCBudWxsKTogdm9pZCB7XG4gICAgYnJvd3Nlcj8uYWxlcnQobWVzc2FnZSk7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6IjsyUUFjQSxHQUFhLENBQUFBLENBQUEsRUFBQUMsY0FBQSxHQUFBQyxDQUFBLE9BQTZCLEtBQUFELGNBQUEsR0FBQUUsQ0FBQSxNQUFwQyxLQUFPLENBQUFDLENBQTZCLENBWU9DLFFBQUEsQ0FYOUJDLElBQUEsRUFBQUwsY0FBQSxHQUFBQyxDQUFBLE1BQU9LLENBQUEsQ0FBT0MsQ0FBVSxHQUN4QkMsT0FBQSxFQUFBUixjQUFBLEdBQUFDLENBQUEsTUFBVUssQ0FBQSxDQUFPSixDQUFZLEdBQzdCTyxzQkFBQSxFQUFBVCxjQUFBLEdBQUFDLENBQUEsTUFBeUJLLENBQUEsQ0FBT0ksQ0FBc0IsR0FDdERDLHdCQUFBLEVBQUFYLGNBQUEsR0FBQUMsQ0FBQSxNQUEyQixHQUFHLEtBQUtPLE9BQU8sMkJBQzFDSSxpQkFBQSxFQUFBWixjQUFBLEdBQUFDLENBQUEsTUFBb0Is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 \ No newline at end of file diff --git a/frontend/dist-instrumented/chunk-4BPWJDJR.js.map b/frontend/dist-instrumented/chunk-4BPWJDJR.js.map new file mode 100644 index 00000000..3d88d337 --- /dev/null +++ b/frontend/dist-instrumented/chunk-4BPWJDJR.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["src/app/features/my-vimar-integration/services/my-vimar-cloud-api-feature.service.ts"], + "sourcesContent": ["import { DOCUMENT } from '@angular/common';\nimport { HttpClient, HttpErrorResponse } from '@angular/common/http';\nimport { Inject, Injectable, inject } from '@angular/core';\nimport { Observable, catchError, of, throwError } from 'rxjs';\nimport { ApiErrorDisplayService } from '../../../core/services/api-error-display.service';\nimport { IVimarCloudApiService } from '../../../core/services/vimar-cloud-api.service.interface';\nimport { API_BASE_URL } from '../../../core/tokens/api-base-url.token';\nimport { MyVimarAccount } from '../models/my-vimar-account.model';\n\ninterface PrepareOAuthTicketResponse {\n ticket: string;\n}\n\n@Injectable()\nexport class MyVimarCloudApiFeatureService implements IVimarCloudApiService {\n private readonly http = inject(HttpClient);\n private readonly baseUrl = inject(API_BASE_URL);\n private readonly apiErrorDisplayService = inject(ApiErrorDisplayService);\n private readonly prepareAuthorizeEndpoint = `${this.baseUrl}/api/auth/prepare-oauth`;\n private readonly authorizeEndpoint = `${this.baseUrl}/api/auth/authorize`;\n private readonly accountEndpoints = [\n `${this.baseUrl}/my-vimar/account`,\n `${this.baseUrl}/api/vimar-account`,\n ];\n private readonly fallbackAccount: MyVimarAccount = { email: '', isLinked: false };\n\n constructor(@Inject(DOCUMENT) private readonly document: Document) { }\n\n public getLinkedAccount(): Observable {\n return this.getLinkedAccountFromEndpoint(0);\n }\n\n public initiateOAuth(): void {\n const location = this.document.defaultView?.location;\n const browser = this.document.defaultView;\n\n if (!location) {\n throw new Error('Browser location is not available for OAuth redirection.');\n }\n\n const redirectUrl = `${location.origin}/vimar-link`;\n const encodedRedirectUrl = encodeURIComponent(redirectUrl);\n\n this.http.post(this.prepareAuthorizeEndpoint, {}).subscribe({\n next: (response) => {\n const ticket = response?.ticket?.trim();\n if (!ticket) {\n this.showOAuthError(\n 'Ticket OAuth non valido. Riprova tra qualche istante.',\n browser,\n );\n return;\n }\n\n // Trigger a full-page navigation so backend 302 redirects are handled by the browser.\n location.href =\n `${this.authorizeEndpoint}?ticket=${encodeURIComponent(ticket)}` +\n `&redirect_url=${encodedRedirectUrl}`;\n },\n error: (error: unknown) => {\n const message = this.apiErrorDisplayService.toMessage(error, {\n fallbackMessage:\n 'Impossibile avviare il collegamento MyVimar. Riprova tra qualche istante.',\n actionLabel: 'avviare il collegamento MyVimar',\n nonHttpStrategy: 'message',\n });\n\n this.showOAuthError(message, browser);\n },\n });\n }\n\n public unlinkAccount(): Observable {\n return this.unlinkAccountFromEndpoint(0);\n }\n\n private getLinkedAccountFromEndpoint(index: number): Observable {\n const endpoint = this.accountEndpoints[index];\n if (!endpoint) {\n return of(this.fallbackAccount);\n }\n\n return this.http.get(endpoint).pipe(\n catchError((error: unknown) => {\n if (this.isNotFound(error)) {\n return this.getLinkedAccountFromEndpoint(index + 1);\n }\n return throwError(() => error);\n })\n );\n }\n\n private unlinkAccountFromEndpoint(index: number): Observable {\n const endpoint = this.accountEndpoints[index];\n if (!endpoint) {\n return of(void 0);\n }\n\n return this.http.delete(endpoint).pipe(\n catchError((error: unknown) => {\n if (this.isNotFound(error)) {\n return this.unlinkAccountFromEndpoint(index + 1);\n }\n return throwError(() => error);\n })\n );\n }\n\n private isNotFound(error: unknown): error is HttpErrorResponse {\n return error instanceof HttpErrorResponse && error.status === 404;\n }\n\n private showOAuthError(message: string, browser: Window | null): void {\n browser?.alert(message);\n }\n}\n"], + "mappings": "gLAcA,IAAaA,GAA6B,IAAA,CAApC,MAAOA,CAA6B,CAYOC,SAX9BC,KAAOC,EAAOC,CAAU,EACxBC,QAAUF,EAAOG,CAAY,EAC7BC,uBAAyBJ,EAAOK,CAAsB,EACtDC,yBAA2B,GAAG,KAAKJ,OAAO,0BAC1CK,kBAAoB,GAAG,KAAKL,OAAO,sBACnCM,iBAAmB,CAClC,GAAG,KAAKN,OAAO,oBACf,GAAG,KAAKA,OAAO,oBAAoB,EAEpBO,gBAAkC,CAAEC,MAAO,GAAIC,SAAU,EAAK,EAE/EC,YAA+Cd,EAAkB,CAAlB,KAAAA,SAAAA,CAAsB,CAE9De,kBAAgB,CACrB,OAAO,KAAKC,6BAA6B,CAAC,CAC5C,CAEOC,eAAa,CAClB,IAAMC,EAAW,KAAKlB,SAASmB,aAAaD,SACtCE,EAAU,KAAKpB,SAASmB,YAE9B,GAAI,CAACD,EACH,MAAM,IAAIG,MAAM,0DAA0D,EAG5E,IAAMC,EAAc,GAAGJ,EAASK,MAAM,cAChCC,EAAqBC,mBAAmBH,CAAW,EAEzD,KAAKrB,KAAKyB,KAAiC,KAAKlB,yBAA0B,CAAA,CAAE,EAAEmB,UAAU,CACtFC,KAAOC,GAAY,CACjB,IAAMC,EAASD,GAAUC,QAAQC,KAAI,EACrC,GAAI,CAACD,EAAQ,CACX,KAAKE,eACH,wDACAZ,CAAO,EAET,MACF,CAGAF,EAASe,KACP,GAAG,KAAKxB,iBAAiB,WAAWgB,mBAAmBK,CAAM,CAAC,iBAC7CN,CAAkB,EACvC,EACAU,MAAQA,GAAkB,CACxB,IAAMC,EAAU,KAAK7B,uBAAuB8B,UAAUF,EAAO,CAC3DG,gBACE,4EACFC,YAAa,kCACbC,gBAAiB,UAClB,EAED,KAAKP,eAAeG,EAASf,CAAO,CACtC,EACD,CACH,CAEOoB,eAAa,CAClB,OAAO,KAAKC,0BAA0B,CAAC,CACzC,CAEQzB,6BAA6B0B,EAAa,CAChD,IAAMC,EAAW,KAAKjC,iBAAiBgC,CAAK,EAC5C,OAAKC,EAIE,KAAK1C,KAAK2C,IAAoBD,CAAQ,EAAEE,KAC7CC,EAAYZ,GACN,KAAKa,WAAWb,CAAK,EAChB,KAAKlB,6BAA6B0B,EAAQ,CAAC,EAE7CM,EAAW,IAAMd,CAAK,CAC9B,CAAC,EATKe,EAAG,KAAKtC,eAAe,CAWlC,CAEQ8B,0BAA0BC,EAAa,CAC7C,IAAMC,EAAW,KAAKjC,iBAAiBgC,CAAK,EAC5C,OAAKC,EAIE,KAAK1C,KAAKiD,OAAaP,CAAQ,EAAEE,KACtCC,EAAYZ,GACN,KAAKa,WAAWb,CAAK,EAChB,KAAKO,0BAA0BC,EAAQ,CAAC,EAE1CM,EAAW,IAAMd,CAAK,CAC9B,CAAC,EATKe,EAAG,MAAM,CAWpB,CAEQF,WAAWb,EAAc,CAC/B,OAAOA,aAAiBiB,GAAqBjB,EAAMkB,SAAW,GAChE,CAEQpB,eAAeG,EAAiBf,EAAsB,CAC5DA,GAASiC,MAAMlB,CAAO,CACxB,4CApGWpC,GAA6BuD,EAYpBC,CAAQ,CAAA,CAAA,6BAZjBxD,EAA6ByD,QAA7BzD,EAA6B0D,SAAA,CAAA,SAA7B1D,CAA6B,GAAA", + "names": ["MyVimarCloudApiFeatureService", "document", "http", "inject", "HttpClient", "baseUrl", "API_BASE_URL", "apiErrorDisplayService", "ApiErrorDisplayService", "prepareAuthorizeEndpoint", "authorizeEndpoint", "accountEndpoints", "fallbackAccount", "email", "isLinked", "constructor", "getLinkedAccount", "getLinkedAccountFromEndpoint", "initiateOAuth", "location", "defaultView", "browser", "Error", "redirectUrl", "origin", "encodedRedirectUrl", "encodeURIComponent", "post", "subscribe", "next", "response", "ticket", "trim", "showOAuthError", "href", "error", "message", "toMessage", "fallbackMessage", "actionLabel", "nonHttpStrategy", "unlinkAccount", "unlinkAccountFromEndpoint", "index", "endpoint", "get", "pipe", "catchError", "isNotFound", "throwError", "of", "delete", "HttpErrorResponse", "status", "alert", "\u0275\u0275inject", "DOCUMENT", "factory", "\u0275fac"] +} diff --git a/frontend/dist-instrumented/chunk-4QFEXKFV.js b/frontend/dist-instrumented/chunk-4QFEXKFV.js new file mode 100644 index 00000000..49bf7d51 --- /dev/null +++ b/frontend/dist-instrumented/chunk-4QFEXKFV.js @@ -0,0 +1,4 @@ +function cov_25lfnt0gs5(){var path="/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-4QFEXKFV.js";var hash="f3f8fec964907413312659a2ad1528958e2c772c";var global=new Function("return this")();var gcv="__coverage__";var coverageData={path:"/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-4QFEXKFV.js",statementMap:{"0":{start:{line:1,column:498},end:{line:1,column:4478}},"1":{start:{line:1,column:517},end:{line:1,column:522}},"2":{start:{line:1,column:531},end:{line:1,column:536}},"3":{start:{line:1,column:551},end:{line:1,column:574}},"4":{start:{line:1,column:590},end:{line:1,column:614}},"5":{start:{line:1,column:641},end:{line:1,column:748}},"6":{start:{line:1,column:686},end:{line:1,column:708}},"7":{start:{line:1,column:715},end:{line:1,column:746}},"8":{start:{line:1,column:760},end:{line:1,column:862}},"9":{start:{line:1,column:805},end:{line:1,column:827}},"10":{start:{line:1,column:834},end:{line:1,column:860}},"11":{start:{line:1,column:886},end:{line:1,column:1200}},"12":{start:{line:1,column:955},end:{line:1,column:1002}},"13":{start:{line:1,column:1005},end:{line:1,column:1035}},"14":{start:{line:1,column:1038},end:{line:1,column:1044}},"15":{start:{line:1,column:1047},end:{line:1,column:1135}},"16":{start:{line:1,column:1136},end:{line:1,column:1197}},"17":{start:{line:1,column:1144},end:{line:1,column:1197}},"18":{start:{line:1,column:1241},end:{line:1,column:1409}},"19":{start:{line:1,column:1306},end:{line:1,column:1313}},"20":{start:{line:1,column:1314},end:{line:1,column:1398}},"21":{start:{line:1,column:1338},end:{line:1,column:1398}},"22":{start:{line:1,column:1353},end:{line:1,column:1398}},"23":{start:{line:1,column:1398},end:{line:1,column:1406}},"24":{start:{line:1,column:1452},end:{line:1,column:1543}},"25":{start:{line:1,column:1483},end:{line:1,column:1501}},"26":{start:{line:1,column:1510},end:{line:1,column:1518}},"27":{start:{line:1,column:1530},end:{line:1,column:1540}},"28":{start:{line:1,column:1544},end:{line:1,column:1578}},"29":{start:{line:1,column:1560},end:{line:1,column:1578}},"30":{start:{line:1,column:1584},end:{line:1,column:1703}},"31":{start:{line:1,column:1593},end:{line:1,column:1702}},"32":{start:{line:1,column:1675},end:{line:1,column:1700}},"33":{start:{line:1,column:1704},end:{line:1,column:1920}},"34":{start:{line:1,column:1733},end:{line:1,column:1740}},"35":{start:{line:1,column:1741},end:{line:1,column:1909}},"36":{start:{line:1,column:1763},end:{line:1,column:1805}},"37":{start:{line:1,column:1806},end:{line:1,column:1908}},"38":{start:{line:1,column:1849},end:{line:1,column:1906}},"39":{start:{line:1,column:1909},end:{line:1,column:1917}},"40":{start:{line:1,column:1950},end:{line:1,column:1973}},"41":{start:{line:1,column:1974},end:{line:1,column:2116}},"42":{start:{line:1,column:2020},end:{line:1,column:2034}},"43":{start:{line:1,column:2041},end:{line:1,column:2114}},"44":{start:{line:1,column:2081},end:{line:1,column:2113}},"45":{start:{line:1,column:2135},end:{line:1,column:2213}},"46":{start:{line:1,column:2231},end:{line:1,column:2327}},"47":{start:{line:1,column:2291},end:{line:1,column:2312}},"48":{start:{line:1,column:2320},end:{line:1,column:2325}},"49":{start:{line:1,column:2353},end:{line:1,column:2376}},"50":{start:{line:1,column:2377},end:{line:1,column:2470}},"51":{start:{line:1,column:2419},end:{line:1,column:2445}},"52":{start:{line:1,column:2446},end:{line:1,column:2469}},"53":{start:{line:1,column:2470},end:{line:1,column:2481}},"54":{start:{line:1,column:2508},end:{line:1,column:2531}},"55":{start:{line:1,column:2532},end:{line:1,column:2594}},"56":{start:{line:1,column:2623},end:{line:1,column:2648}},"57":{start:{line:1,column:2639},end:{line:1,column:2647}},"58":{start:{line:1,column:2649},end:{line:1,column:2711}},"59":{start:{line:1,column:2655},end:{line:1,column:2711}},"60":{start:{line:1,column:2711},end:{line:1,column:2998}},"61":{start:{line:1,column:2788},end:{line:1,column:2820}},"62":{start:{line:1,column:2821},end:{line:1,column:2995}},"63":{start:{line:1,column:2925},end:{line:1,column:2934}},"64":{start:{line:1,column:3016},end:{line:1,column:3182}},"65":{start:{line:1,column:3038},end:{line:1,column:3180}},"66":{start:{line:1,column:3216},end:{line:1,column:3218}},"67":{start:{line:1,column:3219},end:{line:1,column:3710}},"68":{start:{line:1,column:3247},end:{line:1,column:3342}},"69":{start:{line:1,column:3295},end:{line:1,column:3340}},"70":{start:{line:1,column:3343},end:{line:1,column:3709}},"71":{start:{line:1,column:3365},end:{line:1,column:3397}},"72":{start:{line:1,column:3400},end:{line:1,column:3484}},"73":{start:{line:1,column:3472},end:{line:1,column:3481}},"74":{start:{line:1,column:3487},end:{line:1,column:3527}},"75":{start:{line:1,column:3499},end:{line:1,column:3526}},"76":{start:{line:1,column:3528},end:{line:1,column:3708}},"77":{start:{line:1,column:3543},end:{line:1,column:3708}},"78":{start:{line:1,column:3710},end:{line:1,column:3718}},"79":{start:{line:1,column:3751},end:{line:1,column:3758}},"80":{start:{line:1,column:3759},end:{line:1,column:3905}},"81":{start:{line:1,column:3781},end:{line:1,column:3813}},"82":{start:{line:1,column:3816},end:{line:1,column:3824}},"83":{start:{line:1,column:3825},end:{line:1,column:3904}},"84":{start:{line:1,column:3905},end:{line:1,column:3934}},"85":{start:{line:1,column:3958},end:{line:1,column:3987}},"86":{start:{line:1,column:4020},end:{line:1,column:4045}},"87":{start:{line:1,column:4048},end:{line:1,column:4076}},"88":{start:{line:1,column:4079},end:{line:1,column:4080}},"89":{start:{line:1,column:4081},end:{line:1,column:4214}},"90":{start:{line:1,column:4248},end:{line:1,column:4268}},"91":{start:{line:1,column:4271},end:{line:1,column:4291}},"92":{start:{line:1,column:4292},end:{line:1,column:4349}},"93":{start:{line:1,column:4367},end:{line:1,column:4396}},"94":{start:{line:1,column:4379},end:{line:1,column:4395}},"95":{start:{line:1,column:4415},end:{line:1,column:4465}},"96":{start:{line:1,column:4466},end:{line:1,column:4474}},"97":{start:{line:1,column:4496},end:{line:1,column:4560}},"98":{start:{line:1,column:4537},end:{line:1,column:4540}},"99":{start:{line:1,column:4541},end:{line:1,column:4559}},"100":{start:{line:1,column:4578},end:{line:1,column:4677}},"101":{start:{line:1,column:4695},end:{line:1,column:4776}},"102":{start:{line:1,column:4742},end:{line:1,column:4753}},"103":{start:{line:1,column:4754},end:{line:1,column:4775}},"104":{start:{line:1,column:4794},end:{line:1,column:4992}},"105":{start:{line:1,column:4839},end:{line:1,column:4840}},"106":{start:{line:1,column:4841},end:{line:1,column:4991}},"107":{start:{line:1,column:5010},end:{line:1,column:5510}},"108":{start:{line:1,column:5024},end:{line:1,column:5027}},"109":{start:{line:1,column:5028},end:{line:1,column:5509}},"110":{start:{line:1,column:5236},end:{line:1,column:5250}},"111":{start:{line:1,column:5253},end:{line:1,column:5257}},"112":{start:{line:1,column:5258},end:{line:1,column:5305}},"113":{start:{line:1,column:5408},end:{line:1,column:5422}},"114":{start:{line:1,column:5425},end:{line:1,column:5429}},"115":{start:{line:1,column:5430},end:{line:1,column:5455}},"116":{start:{line:1,column:5510},end:{line:1,column:5886}},"117":{start:{line:1,column:5526},end:{line:1,column:5537}},"118":{start:{line:1,column:5540},end:{line:1,column:5544}},"119":{start:{line:1,column:5545},end:{line:1,column:5885}},"120":{start:{line:1,column:5904},end:{line:1,column:6436}},"121":{start:{line:1,column:6334},end:{line:1,column:6345}},"122":{start:{line:1,column:6346},end:{line:1,column:6435}},"123":{start:{line:1,column:6454},end:{line:1,column:6550}},"124":{start:{line:1,column:6537},end:{line:1,column:6540}},"125":{start:{line:1,column:6541},end:{line:1,column:6549}},"126":{start:{line:1,column:6568},end:{line:1,column:6633}},"127":{start:{line:1,column:6651},end:{line:1,column:6703}},"128":{start:{line:1,column:6711},end:{line:2,column:82}},"129":{start:{line:1,column:6755},end:{line:1,column:6759}},"130":{start:{line:1,column:6770},end:{line:1,column:6775}},"131":{start:{line:1,column:6785},end:{line:1,column:6790}},"132":{start:{line:1,column:6811},end:{line:1,column:6818}},"133":{start:{line:1,column:6833},end:{line:1,column:6840}},"134":{start:{line:1,column:6855},end:{line:1,column:6862}},"135":{start:{line:1,column:6882},end:{line:1,column:6889}},"136":{start:{line:1,column:6912},end:{line:1,column:6919}},"137":{start:{line:1,column:6931},end:{line:1,column:6933}},"138":{start:{line:1,column:6964},end:{line:1,column:6968}},"139":{start:{line:1,column:7002},end:{line:1,column:7006}},"140":{start:{line:1,column:7019},end:{line:1,column:7332}},"141":{start:{line:1,column:7054},end:{line:1,column:7249}},"142":{start:{line:1,column:7107},end:{line:1,column:7124}},"143":{start:{line:1,column:7133},end:{line:1,column:7177}},"144":{start:{line:1,column:7185},end:{line:1,column:7247}},"145":{start:{line:1,column:7222},end:{line:1,column:7245}},"146":{start:{line:1,column:7258},end:{line:1,column:7329}},"147":{start:{line:1,column:7343},end:{line:1,column:7345}},"148":{start:{line:1,column:7357},end:{line:1,column:7426}},"149":{start:{line:1,column:7441},end:{line:1,column:7570}},"150":{start:{line:1,column:7589},end:{line:1,column:7604}},"151":{start:{line:1,column:7621},end:{line:1,column:7647}},"152":{start:{line:1,column:7664},end:{line:1,column:7676}},"153":{start:{line:1,column:7697},end:{line:1,column:7726}},"154":{start:{line:1,column:7752},end:{line:1,column:7798}},"155":{start:{line:1,column:7801},end:{line:1,column:7841}},"156":{start:{line:1,column:7811},end:{line:1,column:7840}},"157":{start:{line:1,column:7842},end:{line:1,column:7903}},"158":{start:{line:1,column:7880},end:{line:1,column:7903}},"159":{start:{line:1,column:7909},end:{line:1,column:7938}},"160":{start:{line:1,column:7941},end:{line:1,column:7984}},"161":{start:{line:1,column:7951},end:{line:1,column:7983}},"162":{start:{line:1,column:7985},end:{line:1,column:8046}},"163":{start:{line:1,column:8023},end:{line:1,column:8046}},"164":{start:{line:1,column:8052},end:{line:1,column:8095}},"165":{start:{line:1,column:8062},end:{line:1,column:8094}},"166":{start:{line:1,column:8096},end:{line:1,column:8124}},"167":{start:{line:1,column:8151},end:{line:1,column:8170}},"168":{start:{line:1,column:8173},end:{line:1,column:8204}},"169":{start:{line:1,column:8205},end:{line:1,column:8236}},"170":{start:{line:1,column:8260},end:{line:1,column:8311}},"171":{start:{line:1,column:8330},end:{line:1,column:8380}},"172":{start:{line:1,column:8399},end:{line:1,column:8455}},"173":{start:{line:1,column:8476},end:{line:1,column:8495}},"174":{start:{line:1,column:8496},end:{line:1,column:8532}},"175":{start:{line:1,column:8525},end:{line:1,column:8532}},"176":{start:{line:1,column:8532},end:{line:1,column:8557}},"177":{start:{line:1,column:8563},end:{line:1,column:8587}},"178":{start:{line:1,column:8588},end:{line:1,column:8908}},"179":{start:{line:1,column:8702},end:{line:1,column:8788}},"180":{start:{line:1,column:8798},end:{line:1,column:8854}},"181":{start:{line:1,column:8864},end:{line:1,column:8892}},"182":{start:{line:1,column:8934},end:{line:1,column:8941}},"183":{start:{line:1,column:8942},end:{line:1,column:9073}},"184":{start:{line:1,column:8964},end:{line:1,column:8979}},"185":{start:{line:1,column:8980},end:{line:1,column:9010}},"186":{start:{line:1,column:8986},end:{line:1,column:9001}},"187":{start:{line:1,column:9001},end:{line:1,column:9009}},"188":{start:{line:1,column:9010},end:{line:1,column:9072}},"189":{start:{line:1,column:9073},end:{line:1,column:9102}},"190":{start:{line:1,column:9118},end:{line:1,column:9170}},"191":{start:{line:1,column:9191},end:{line:1,column:9220}},"192":{start:{line:1,column:9226},end:{line:1,column:9256}},"193":{start:{line:1,column:9257},end:{line:1,column:9311}},"194":{start:{line:1,column:9334},end:{line:1,column:9404}},"195":{start:{line:1,column:9410},end:{line:1,column:9494}},"196":{start:{line:1,column:9426},end:{line:1,column:9488}},"197":{start:{line:1,column:9495},end:{line:1,column:9527}},"198":{start:{line:1,column:9560},end:{line:1,column:9797}},"199":{start:{line:1,column:9691},end:{line:1,column:9712}},"200":{start:{line:1,column:9719},end:{line:1,column:9729}},"201":{start:{line:1,column:9747},end:{line:1,column:9794}},"202":{start:{line:1,column:9826},end:{line:1,column:9956}},"203":{start:{line:1,column:9903},end:{line:1,column:9942}},"204":{start:{line:1,column:9984},end:{line:1,column:10054}},"205":{start:{line:1,column:10012},end:{line:1,column:10022}},"206":{start:{line:1,column:10034},end:{line:1,column:10051}},"207":{start:{line:1,column:10055},end:{line:1,column:10279}},"208":{start:{line:1,column:10184},end:{line:1,column:10212}},"209":{start:{line:1,column:10232},end:{line:1,column:10276}},"210":{start:{line:1,column:10311},end:{line:1,column:10365}},"211":{start:{line:1,column:10368},end:{line:1,column:10402}},"212":{start:{line:1,column:10405},end:{line:1,column:10430}},"213":{start:{line:1,column:10433},end:{line:1,column:10458}},"214":{start:{line:1,column:10459},end:{line:1,column:10506}},"215":{start:{line:1,column:10494},end:{line:1,column:10504}},"216":{start:{line:1,column:10528},end:{line:1,column:10562}},"217":{start:{line:1,column:10579},end:{line:1,column:10594}},"218":{start:{line:1,column:10585},end:{line:1,column:10594}},"219":{start:{line:1,column:10600},end:{line:1,column:10615}},"220":{start:{line:1,column:10616},end:{line:1,column:10675}},"221":{start:{line:1,column:10654},end:{line:1,column:10675}},"222":{start:{line:1,column:10675},end:{line:1,column:10683}},"223":{start:{line:1,column:10712},end:{line:1,column:10719}},"224":{start:{line:1,column:10720},end:{line:1,column:10856}},"225":{start:{line:1,column:10742},end:{line:1,column:10761}},"226":{start:{line:1,column:10762},end:{line:1,column:10855}},"227":{start:{line:1,column:10856},end:{line:1,column:10945}},"228":{start:{line:1,column:10901},end:{line:1,column:10945}},"229":{start:{line:1,column:10968},end:{line:1,column:11126}},"230":{start:{line:1,column:11149},end:{line:1,column:11211}},"231":{start:{line:1,column:11195},end:{line:1,column:11211}},"232":{start:{line:1,column:11211},end:{line:1,column:11269}},"233":{start:{line:1,column:11287},end:{line:1,column:11316}},"234":{start:{line:1,column:11299},end:{line:1,column:11315}},"235":{start:{line:1,column:11334},end:{line:2,column:69}},"236":{start:{line:1,column:12138},end:{line:1,column:12278}},"237":{start:{line:1,column:12220},end:{line:1,column:12277}},"238":{start:{line:2,column:70},end:{line:2,column:78}}},fnMap:{"0":{name:"(anonymous_0)",decl:{start:{line:1,column:499},end:{line:1,column:500}},loc:{start:{line:1,column:503},end:{line:1,column:4475}},line:1},"1":{name:"(anonymous_1)",decl:{start:{line:1,column:615},end:{line:1,column:616}},loc:{start:{line:1,column:640},end:{line:1,column:749}},line:1},"2":{name:"(anonymous_2)",decl:{start:{line:1,column:683},end:{line:1,column:684}},loc:{start:{line:1,column:686},end:{line:1,column:708}},line:1},"3":{name:"(anonymous_3)",decl:{start:{line:1,column:712},end:{line:1,column:713}},loc:{start:{line:1,column:715},end:{line:1,column:746}},line:1},"4":{name:"(anonymous_4)",decl:{start:{line:1,column:749},end:{line:1,column:750}},loc:{start:{line:1,column:759},end:{line:1,column:863}},line:1},"5":{name:"(anonymous_5)",decl:{start:{line:1,column:802},end:{line:1,column:803}},loc:{start:{line:1,column:805},end:{line:1,column:827}},line:1},"6":{name:"(anonymous_6)",decl:{start:{line:1,column:831},end:{line:1,column:832}},loc:{start:{line:1,column:834},end:{line:1,column:860}},line:1},"7":{name:"(anonymous_7)",decl:{start:{line:1,column:863},end:{line:1,column:864}},loc:{start:{line:1,column:885},end:{line:1,column:1201}},line:1},"8":{name:"(anonymous_8)",decl:{start:{line:1,column:945},end:{line:1,column:946}},loc:{start:{line:1,column:948},end:{line:1,column:1198}},line:1},"9":{name:"(anonymous_9)",decl:{start:{line:1,column:1201},end:{line:1,column:1202}},loc:{start:{line:1,column:1240},end:{line:1,column:1410}},line:1},"10":{name:"(anonymous_10)",decl:{start:{line:1,column:1296},end:{line:1,column:1297}},loc:{start:{line:1,column:1299},end:{line:1,column:1407}},line:1},"11":{name:"(anonymous_11)",decl:{start:{line:1,column:1410},end:{line:1,column:1411}},loc:{start:{line:1,column:1445},end:{line:1,column:1921}},line:1},"12":{name:"(anonymous_12)",decl:{start:{line:1,column:1480},end:{line:1,column:1481}},loc:{start:{line:1,column:1483},end:{line:1,column:1501}},line:1},"13":{name:"(anonymous_13)",decl:{start:{line:1,column:1507},end:{line:1,column:1508}},loc:{start:{line:1,column:1510},end:{line:1,column:1518}},line:1},"14":{name:"(anonymous_14)",decl:{start:{line:1,column:1527},end:{line:1,column:1528}},loc:{start:{line:1,column:1530},end:{line:1,column:1540}},line:1},"15":{name:"(anonymous_15)",decl:{start:{line:1,column:1590},end:{line:1,column:1591}},loc:{start:{line:1,column:1593},end:{line:1,column:1702}},line:1},"16":{name:"(anonymous_16)",decl:{start:{line:1,column:1671},end:{line:1,column:1672}},loc:{start:{line:1,column:1675},end:{line:1,column:1700}},line:1},"17":{name:"(anonymous_17)",decl:{start:{line:1,column:1723},end:{line:1,column:1724}},loc:{start:{line:1,column:1726},end:{line:1,column:1918}},line:1},"18":{name:"(anonymous_18)",decl:{start:{line:1,column:1846},end:{line:1,column:1847}},loc:{start:{line:1,column:1849},end:{line:1,column:1906}},line:1},"19":{name:"(anonymous_19)",decl:{start:{line:1,column:1921},end:{line:1,column:1922}},loc:{start:{line:1,column:1943},end:{line:1,column:2117}},line:1},"20":{name:"(anonymous_20)",decl:{start:{line:1,column:2017},end:{line:1,column:2018}},loc:{start:{line:1,column:2020},end:{line:1,column:2034}},line:1},"21":{name:"(anonymous_21)",decl:{start:{line:1,column:2038},end:{line:1,column:2039}},loc:{start:{line:1,column:2041},end:{line:1,column:2114}},line:1},"22":{name:"(anonymous_22)",decl:{start:{line:1,column:2077},end:{line:1,column:2078}},loc:{start:{line:1,column:2081},end:{line:1,column:2113}},line:1},"23":{name:"(anonymous_23)",decl:{start:{line:1,column:2117},end:{line:1,column:2118}},loc:{start:{line:1,column:2134},end:{line:1,column:2214}},line:1},"24":{name:"(anonymous_24)",decl:{start:{line:1,column:2214},end:{line:1,column:2215}},loc:{start:{line:1,column:2230},end:{line:1,column:2328}},line:1},"25":{name:"(anonymous_25)",decl:{start:{line:1,column:2288},end:{line:1,column:2289}},loc:{start:{line:1,column:2291},end:{line:1,column:2312}},line:1},"26":{name:"(anonymous_26)",decl:{start:{line:1,column:2316},end:{line:1,column:2317}},loc:{start:{line:1,column:2320},end:{line:1,column:2325}},line:1},"27":{name:"(anonymous_27)",decl:{start:{line:1,column:2328},end:{line:1,column:2329}},loc:{start:{line:1,column:2346},end:{line:1,column:2482}},line:1},"28":{name:"(anonymous_28)",decl:{start:{line:1,column:2482},end:{line:1,column:2483}},loc:{start:{line:1,column:2501},end:{line:1,column:2595}},line:1},"29":{name:"(anonymous_29)",decl:{start:{line:1,column:2595},end:{line:1,column:2596}},loc:{start:{line:1,column:2616},end:{line:1,column:2999}},line:1},"30":{name:"(anonymous_30)",decl:{start:{line:1,column:2636},end:{line:1,column:2637}},loc:{start:{line:1,column:2639},end:{line:1,column:2647}},line:1},"31":{name:"(anonymous_31)",decl:{start:{line:1,column:2778},end:{line:1,column:2779}},loc:{start:{line:1,column:2781},end:{line:1,column:2996}},line:1},"32":{name:"(anonymous_32)",decl:{start:{line:1,column:2922},end:{line:1,column:2923}},loc:{start:{line:1,column:2925},end:{line:1,column:2934}},line:1},"33":{name:"(anonymous_33)",decl:{start:{line:1,column:2999},end:{line:1,column:3000}},loc:{start:{line:1,column:3015},end:{line:1,column:3183}},line:1},"34":{name:"(anonymous_34)",decl:{start:{line:1,column:3034},end:{line:1,column:3035}},loc:{start:{line:1,column:3038},end:{line:1,column:3180}},line:1},"35":{name:"(anonymous_35)",decl:{start:{line:1,column:3183},end:{line:1,column:3184}},loc:{start:{line:1,column:3209},end:{line:1,column:3719}},line:1},"36":{name:"(anonymous_36)",decl:{start:{line:1,column:3292},end:{line:1,column:3293}},loc:{start:{line:1,column:3295},end:{line:1,column:3340}},line:1},"37":{name:"(anonymous_37)",decl:{start:{line:1,column:3469},end:{line:1,column:3470}},loc:{start:{line:1,column:3472},end:{line:1,column:3481}},line:1},"38":{name:"(anonymous_38)",decl:{start:{line:1,column:3496},end:{line:1,column:3497}},loc:{start:{line:1,column:3499},end:{line:1,column:3526}},line:1},"39":{name:"(anonymous_39)",decl:{start:{line:1,column:3719},end:{line:1,column:3720}},loc:{start:{line:1,column:3744},end:{line:1,column:3935}},line:1},"40":{name:"(anonymous_40)",decl:{start:{line:1,column:3935},end:{line:1,column:3936}},loc:{start:{line:1,column:3957},end:{line:1,column:3988}},line:1},"41":{name:"(anonymous_41)",decl:{start:{line:1,column:3988},end:{line:1,column:3989}},loc:{start:{line:1,column:4013},end:{line:1,column:4215}},line:1},"42":{name:"(anonymous_42)",decl:{start:{line:1,column:4215},end:{line:1,column:4216}},loc:{start:{line:1,column:4241},end:{line:1,column:4350}},line:1},"43":{name:"(anonymous_43)",decl:{start:{line:1,column:4367},end:{line:1,column:4368}},loc:{start:{line:1,column:4378},end:{line:1,column:4396}},line:1},"44":{name:"le",decl:{start:{line:1,column:4488},end:{line:1,column:4490}},loc:{start:{line:1,column:4495},end:{line:1,column:4561}},line:1},"45":{name:"se",decl:{start:{line:1,column:4570},end:{line:1,column:4572}},loc:{start:{line:1,column:4577},end:{line:1,column:4678}},line:1},"46":{name:"de",decl:{start:{line:1,column:4687},end:{line:1,column:4689}},loc:{start:{line:1,column:4694},end:{line:1,column:4777}},line:1},"47":{name:"ce",decl:{start:{line:1,column:4786},end:{line:1,column:4788}},loc:{start:{line:1,column:4793},end:{line:1,column:4993}},line:1},"48":{name:"pe",decl:{start:{line:1,column:5002},end:{line:1,column:5004}},loc:{start:{line:1,column:5009},end:{line:1,column:5887}},line:1},"49":{name:"(anonymous_49)",decl:{start:{line:1,column:5218},end:{line:1,column:5219}},loc:{start:{line:1,column:5229},end:{line:1,column:5306}},line:1},"50":{name:"(anonymous_50)",decl:{start:{line:1,column:5391},end:{line:1,column:5392}},loc:{start:{line:1,column:5401},end:{line:1,column:5456}},line:1},"51":{name:"me",decl:{start:{line:1,column:5896},end:{line:1,column:5898}},loc:{start:{line:1,column:5903},end:{line:1,column:6437}},line:1},"52":{name:"ue",decl:{start:{line:1,column:6446},end:{line:1,column:6448}},loc:{start:{line:1,column:6453},end:{line:1,column:6551}},line:1},"53":{name:"fe",decl:{start:{line:1,column:6560},end:{line:1,column:6562}},loc:{start:{line:1,column:6567},end:{line:1,column:6634}},line:1},"54":{name:"be",decl:{start:{line:1,column:6643},end:{line:1,column:6645}},loc:{start:{line:1,column:6650},end:{line:1,column:6704}},line:1},"55":{name:"(anonymous_55)",decl:{start:{line:1,column:6712},end:{line:1,column:6713}},loc:{start:{line:1,column:6716},end:{line:2,column:79}},line:1},"56":{name:"(anonymous_56)",decl:{start:{line:1,column:7050},end:{line:1,column:7051}},loc:{start:{line:1,column:7054},end:{line:1,column:7249}},line:1},"57":{name:"(anonymous_57)",decl:{start:{line:1,column:7102},end:{line:1,column:7103}},loc:{start:{line:1,column:7106},end:{line:1,column:7125}},line:1},"58":{name:"(anonymous_58)",decl:{start:{line:1,column:7129},end:{line:1,column:7130}},loc:{start:{line:1,column:7132},end:{line:1,column:7178}},line:1},"59":{name:"(anonymous_59)",decl:{start:{line:1,column:7182},end:{line:1,column:7183}},loc:{start:{line:1,column:7185},end:{line:1,column:7247}},line:1},"60":{name:"(anonymous_60)",decl:{start:{line:1,column:7218},end:{line:1,column:7219}},loc:{start:{line:1,column:7222},end:{line:1,column:7245}},line:1},"61":{name:"(anonymous_61)",decl:{start:{line:1,column:7253},end:{line:1,column:7254}},loc:{start:{line:1,column:7258},end:{line:1,column:7329}},line:1},"62":{name:"(anonymous_62)",decl:{start:{line:1,column:7346},end:{line:1,column:7347}},loc:{start:{line:1,column:7356},end:{line:1,column:7427}},line:1},"63":{name:"(anonymous_63)",decl:{start:{line:1,column:7427},end:{line:1,column:7428}},loc:{start:{line:1,column:7440},end:{line:1,column:7571}},line:1},"64":{name:"(anonymous_64)",decl:{start:{line:1,column:7571},end:{line:1,column:7572}},loc:{start:{line:1,column:7588},end:{line:1,column:7605}},line:1},"65":{name:"(anonymous_65)",decl:{start:{line:1,column:7605},end:{line:1,column:7606}},loc:{start:{line:1,column:7620},end:{line:1,column:7648}},line:1},"66":{name:"(anonymous_66)",decl:{start:{line:1,column:7648},end:{line:1,column:7649}},loc:{start:{line:1,column:7663},end:{line:1,column:7677}},line:1},"67":{name:"(anonymous_67)",decl:{start:{line:1,column:7677},end:{line:1,column:7678}},loc:{start:{line:1,column:7696},end:{line:1,column:7727}},line:1},"68":{name:"(anonymous_68)",decl:{start:{line:1,column:7727},end:{line:1,column:7728}},loc:{start:{line:1,column:7745},end:{line:1,column:8125}},line:1},"69":{name:"(anonymous_69)",decl:{start:{line:1,column:7808},end:{line:1,column:7809}},loc:{start:{line:1,column:7811},end:{line:1,column:7840}},line:1},"70":{name:"(anonymous_70)",decl:{start:{line:1,column:7948},end:{line:1,column:7949}},loc:{start:{line:1,column:7951},end:{line:1,column:7983}},line:1},"71":{name:"(anonymous_71)",decl:{start:{line:1,column:8059},end:{line:1,column:8060}},loc:{start:{line:1,column:8062},end:{line:1,column:8094}},line:1},"72":{name:"(anonymous_72)",decl:{start:{line:1,column:8125},end:{line:1,column:8126}},loc:{start:{line:1,column:8144},end:{line:1,column:8237}},line:1},"73":{name:"(anonymous_73)",decl:{start:{line:1,column:8237},end:{line:1,column:8238}},loc:{start:{line:1,column:8259},end:{line:1,column:8312}},line:1},"74":{name:"(anonymous_74)",decl:{start:{line:1,column:8312},end:{line:1,column:8313}},loc:{start:{line:1,column:8329},end:{line:1,column:8381}},line:1},"75":{name:"(anonymous_75)",decl:{start:{line:1,column:8381},end:{line:1,column:8382}},loc:{start:{line:1,column:8398},end:{line:1,column:8456}},line:1},"76":{name:"(anonymous_76)",decl:{start:{line:1,column:8456},end:{line:1,column:8457}},loc:{start:{line:1,column:8469},end:{line:1,column:8909}},line:1},"77":{name:"(anonymous_77)",decl:{start:{line:1,column:8697},end:{line:1,column:8698}},loc:{start:{line:1,column:8701},end:{line:1,column:8789}},line:1},"78":{name:"(anonymous_78)",decl:{start:{line:1,column:8793},end:{line:1,column:8794}},loc:{start:{line:1,column:8798},end:{line:1,column:8854}},line:1},"79":{name:"(anonymous_79)",decl:{start:{line:1,column:8859},end:{line:1,column:8860}},loc:{start:{line:1,column:8863},end:{line:1,column:8893}},line:1},"80":{name:"(anonymous_80)",decl:{start:{line:1,column:8909},end:{line:1,column:8910}},loc:{start:{line:1,column:8927},end:{line:1,column:9103}},line:1},"81":{name:"(anonymous_81)",decl:{start:{line:1,column:9103},end:{line:1,column:9104}},loc:{start:{line:1,column:9117},end:{line:1,column:9171}},line:1},"82":{name:"(anonymous_82)",decl:{start:{line:1,column:9171},end:{line:1,column:9172}},loc:{start:{line:1,column:9190},end:{line:1,column:9312}},line:1},"83":{name:"(anonymous_83)",decl:{start:{line:1,column:9312},end:{line:1,column:9313}},loc:{start:{line:1,column:9333},end:{line:1,column:9528}},line:1},"84":{name:"(anonymous_84)",decl:{start:{line:1,column:9421},end:{line:1,column:9422}},loc:{start:{line:1,column:9425},end:{line:1,column:9489}},line:1},"85":{name:"(anonymous_85)",decl:{start:{line:1,column:9528},end:{line:1,column:9529}},loc:{start:{line:1,column:9559},end:{line:1,column:9798}},line:1},"86":{name:"(anonymous_86)",decl:{start:{line:1,column:9688},end:{line:1,column:9689}},loc:{start:{line:1,column:9691},end:{line:1,column:9712}},line:1},"87":{name:"(anonymous_87)",decl:{start:{line:1,column:9716},end:{line:1,column:9717}},loc:{start:{line:1,column:9719},end:{line:1,column:9729}},line:1},"88":{name:"(anonymous_88)",decl:{start:{line:1,column:9742},end:{line:1,column:9743}},loc:{start:{line:1,column:9746},end:{line:1,column:9795}},line:1},"89":{name:"(anonymous_89)",decl:{start:{line:1,column:9798},end:{line:1,column:9799}},loc:{start:{line:1,column:9825},end:{line:1,column:9957}},line:1},"90":{name:"(anonymous_90)",decl:{start:{line:1,column:9899},end:{line:1,column:9900}},loc:{start:{line:1,column:9903},end:{line:1,column:9942}},line:1},"91":{name:"(anonymous_91)",decl:{start:{line:1,column:9957},end:{line:1,column:9958}},loc:{start:{line:1,column:9977},end:{line:1,column:10280}},line:1},"92":{name:"(anonymous_92)",decl:{start:{line:1,column:10009},end:{line:1,column:10010}},loc:{start:{line:1,column:10012},end:{line:1,column:10022}},line:1},"93":{name:"(anonymous_93)",decl:{start:{line:1,column:10031},end:{line:1,column:10032}},loc:{start:{line:1,column:10034},end:{line:1,column:10051}},line:1},"94":{name:"(anonymous_94)",decl:{start:{line:1,column:10180},end:{line:1,column:10181}},loc:{start:{line:1,column:10183},end:{line:1,column:10213}},line:1},"95":{name:"(anonymous_95)",decl:{start:{line:1,column:10217},end:{line:1,column:10218}},loc:{start:{line:1,column:10221},end:{line:1,column:10223}},line:1},"96":{name:"(anonymous_96)",decl:{start:{line:1,column:10227},end:{line:1,column:10228}},loc:{start:{line:1,column:10232},end:{line:1,column:10276}},line:1},"97":{name:"(anonymous_97)",decl:{start:{line:1,column:10280},end:{line:1,column:10281}},loc:{start:{line:1,column:10304},end:{line:1,column:10507}},line:1},"98":{name:"(anonymous_98)",decl:{start:{line:1,column:10491},end:{line:1,column:10492}},loc:{start:{line:1,column:10494},end:{line:1,column:10504}},line:1},"99":{name:"(anonymous_99)",decl:{start:{line:1,column:10507},end:{line:1,column:10508}},loc:{start:{line:1,column:10527},end:{line:1,column:10563}},line:1},"100":{name:"(anonymous_100)",decl:{start:{line:1,column:10563},end:{line:1,column:10564}},loc:{start:{line:1,column:10578},end:{line:1,column:10684}},line:1},"101":{name:"(anonymous_101)",decl:{start:{line:1,column:10684},end:{line:1,column:10685}},loc:{start:{line:1,column:10705},end:{line:1,column:10946}},line:1},"102":{name:"(anonymous_102)",decl:{start:{line:1,column:10946},end:{line:1,column:10947}},loc:{start:{line:1,column:10967},end:{line:1,column:11127}},line:1},"103":{name:"(anonymous_103)",decl:{start:{line:1,column:11127},end:{line:1,column:11128}},loc:{start:{line:1,column:11148},end:{line:1,column:11270}},line:1},"104":{name:"(anonymous_104)",decl:{start:{line:1,column:11287},end:{line:1,column:11288}},loc:{start:{line:1,column:11298},end:{line:1,column:11316}},line:1},"105":{name:"(anonymous_105)",decl:{start:{line:1,column:12124},end:{line:1,column:12125}},loc:{start:{line:1,column:12137},end:{line:1,column:12279}},line:1}},branchMap:{"0":{loc:{start:{line:1,column:955},end:{line:1,column:1002}},type:"cond-expr",locations:[{start:{line:1,column:986},end:{line:1,column:998}},{start:{line:1,column:999},end:{line:1,column:1002}}],line:1},"1":{loc:{start:{line:1,column:1006},end:{line:1,column:1020}},type:"binary-expr",locations:[{start:{line:1,column:1006},end:{line:1,column:1016}},{start:{line:1,column:1018},end:{line:1,column:1020}}],line:1},"2":{loc:{start:{line:1,column:1047},end:{line:1,column:1135}},type:"binary-expr",locations:[{start:{line:1,column:1047},end:{line:1,column:1066}},{start:{line:1,column:1068},end:{line:1,column:1088}},{start:{line:1,column:1090},end:{line:1,column:1108}},{start:{line:1,column:1110},end:{line:1,column:1135}}],line:1},"3":{loc:{start:{line:1,column:1136},end:{line:1,column:1197}},type:"if",locations:[{start:{line:1,column:1136},end:{line:1,column:1197}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"4":{loc:{start:{line:1,column:1139},end:{line:1,column:1143}},type:"binary-expr",locations:[{start:{line:1,column:1139},end:{line:1,column:1140}},{start:{line:1,column:1142},end:{line:1,column:1143}}],line:1},"5":{loc:{start:{line:1,column:1160},end:{line:1,column:1196}},type:"binary-expr",locations:[{start:{line:1,column:1160},end:{line:1,column:1170}},{start:{line:1,column:1172},end:{line:1,column:1196}}],line:1},"6":{loc:{start:{line:1,column:1353},end:{line:1,column:1397}},type:"binary-expr",locations:[{start:{line:1,column:1353},end:{line:1,column:1367}},{start:{line:1,column:1369},end:{line:1,column:1397}}],line:1},"7":{loc:{start:{line:1,column:1544},end:{line:1,column:1578}},type:"if",locations:[{start:{line:1,column:1544},end:{line:1,column:1578}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"8":{loc:{start:{line:1,column:1763},end:{line:1,column:1805}},type:"cond-expr",locations:[{start:{line:1,column:1792},end:{line:1,column:1802}},{start:{line:1,column:1803},end:{line:1,column:1805}}],line:1},"9":{loc:{start:{line:1,column:1806},end:{line:1,column:1908}},type:"binary-expr",locations:[{start:{line:1,column:1806},end:{line:1,column:1814}},{start:{line:1,column:1816},end:{line:1,column:1908}}],line:1},"10":{loc:{start:{line:1,column:1825},end:{line:1,column:1837}},type:"binary-expr",locations:[{start:{line:1,column:1825},end:{line:1,column:1833}},{start:{line:1,column:1835},end:{line:1,column:1837}}],line:1},"11":{loc:{start:{line:1,column:1849},end:{line:1,column:1906}},type:"binary-expr",locations:[{start:{line:1,column:1849},end:{line:1,column:1880}},{start:{line:1,column:1882},end:{line:1,column:1906}}],line:1},"12":{loc:{start:{line:1,column:1981},end:{line:1,column:2116}},type:"cond-expr",locations:[{start:{line:1,column:1983},end:{line:1,column:1987}},{start:{line:1,column:1988},end:{line:1,column:2116}}],line:1},"13":{loc:{start:{line:1,column:2020},end:{line:1,column:2034}},type:"binary-expr",locations:[{start:{line:1,column:2020},end:{line:1,column:2028}},{start:{line:1,column:2030},end:{line:1,column:2034}}],line:1},"14":{loc:{start:{line:1,column:2041},end:{line:1,column:2114}},type:"cond-expr",locations:[{start:{line:1,column:2044},end:{line:1,column:2073}},{start:{line:1,column:2075},end:{line:1,column:2114}}],line:1},"15":{loc:{start:{line:1,column:2291},end:{line:1,column:2312}},type:"cond-expr",locations:[{start:{line:1,column:2308},end:{line:1,column:2309}},{start:{line:1,column:2310},end:{line:1,column:2312}}],line:1},"16":{loc:{start:{line:1,column:2377},end:{line:1,column:2470}},type:"if",locations:[{start:{line:1,column:2377},end:{line:1,column:2470}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"17":{loc:{start:{line:1,column:2380},end:{line:1,column:2411}},type:"binary-expr",locations:[{start:{line:1,column:2380},end:{line:1,column:2381}},{start:{line:1,column:2383},end:{line:1,column:2411}}],line:1},"18":{loc:{start:{line:1,column:2453},end:{line:1,column:2469}},type:"cond-expr",locations:[{start:{line:1,column:2463},end:{line:1,column:2464}},{start:{line:1,column:2465},end:{line:1,column:2469}}],line:1},"19":{loc:{start:{line:1,column:2532},end:{line:1,column:2594}},type:"binary-expr",locations:[{start:{line:1,column:2532},end:{line:1,column:2534}},{start:{line:1,column:2536},end:{line:1,column:2564}},{start:{line:1,column:2566},end:{line:1,column:2594}}],line:1},"20":{loc:{start:{line:1,column:2649},end:{line:1,column:2711}},type:"if",locations:[{start:{line:1,column:2649},end:{line:1,column:2711}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"21":{loc:{start:{line:1,column:2945},end:{line:1,column:2970}},type:"cond-expr",locations:[{start:{line:1,column:2952},end:{line:1,column:2960}},{start:{line:1,column:2961},end:{line:1,column:2970}}],line:1},"22":{loc:{start:{line:1,column:3023},end:{line:1,column:3028}},type:"binary-expr",locations:[{start:{line:1,column:3023},end:{line:1,column:3024}},{start:{line:1,column:3026},end:{line:1,column:3028}}],line:1},"23":{loc:{start:{line:1,column:3126},end:{line:1,column:3157}},type:"cond-expr",locations:[{start:{line:1,column:3148},end:{line:1,column:3154}},{start:{line:1,column:3155},end:{line:1,column:3157}}],line:1},"24":{loc:{start:{line:1,column:3166},end:{line:1,column:3179}},type:"binary-expr",locations:[{start:{line:1,column:3166},end:{line:1,column:3175}},{start:{line:1,column:3177},end:{line:1,column:3179}}],line:1},"25":{loc:{start:{line:1,column:3499},end:{line:1,column:3526}},type:"binary-expr",locations:[{start:{line:1,column:3499},end:{line:1,column:3509}},{start:{line:1,column:3511},end:{line:1,column:3526}}],line:1},"26":{loc:{start:{line:1,column:3825},end:{line:1,column:3904}},type:"binary-expr",locations:[{start:{line:1,column:3826},end:{line:1,column:3828}},{start:{line:1,column:3830},end:{line:1,column:3891}},{start:{line:1,column:3894},end:{line:1,column:3904}}],line:1},"27":{loc:{start:{line:1,column:4020},end:{line:1,column:4045}},type:"binary-expr",locations:[{start:{line:1,column:4020},end:{line:1,column:4041}},{start:{line:1,column:4043},end:{line:1,column:4045}}],line:1},"28":{loc:{start:{line:1,column:4048},end:{line:1,column:4076}},type:"binary-expr",locations:[{start:{line:1,column:4048},end:{line:1,column:4072}},{start:{line:1,column:4074},end:{line:1,column:4076}}],line:1},"29":{loc:{start:{line:1,column:4088},end:{line:1,column:4125}},type:"binary-expr",locations:[{start:{line:1,column:4088},end:{line:1,column:4115}},{start:{line:1,column:4118},end:{line:1,column:4124}}],line:1},"30":{loc:{start:{line:1,column:4126},end:{line:1,column:4150}},type:"binary-expr",locations:[{start:{line:1,column:4126},end:{line:1,column:4141}},{start:{line:1,column:4144},end:{line:1,column:4149}}],line:1},"31":{loc:{start:{line:1,column:4151},end:{line:1,column:4185}},type:"binary-expr",locations:[{start:{line:1,column:4151},end:{line:1,column:4176}},{start:{line:1,column:4179},end:{line:1,column:4184}}],line:1},"32":{loc:{start:{line:1,column:4189},end:{line:1,column:4212}},type:"binary-expr",locations:[{start:{line:1,column:4189},end:{line:1,column:4209}},{start:{line:1,column:4211},end:{line:1,column:4212}}],line:1},"33":{loc:{start:{line:1,column:4248},end:{line:1,column:4268}},type:"binary-expr",locations:[{start:{line:1,column:4248},end:{line:1,column:4264}},{start:{line:1,column:4266},end:{line:1,column:4268}}],line:1},"34":{loc:{start:{line:1,column:4271},end:{line:1,column:4291}},type:"binary-expr",locations:[{start:{line:1,column:4271},end:{line:1,column:4287}},{start:{line:1,column:4289},end:{line:1,column:4291}}],line:1},"35":{loc:{start:{line:1,column:4299},end:{line:1,column:4349}},type:"binary-expr",locations:[{start:{line:1,column:4299},end:{line:1,column:4332}},{start:{line:1,column:4334},end:{line:1,column:4349}}],line:1},"36":{loc:{start:{line:1,column:4390},end:{line:1,column:4394}},type:"binary-expr",locations:[{start:{line:1,column:4390},end:{line:1,column:4391}},{start:{line:1,column:4393},end:{line:1,column:4394}}],line:1},"37":{loc:{start:{line:1,column:4496},end:{line:1,column:4560}},type:"if",locations:[{start:{line:1,column:4496},end:{line:1,column:4560}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"38":{loc:{start:{line:1,column:4499},end:{line:1,column:4525}},type:"binary-expr",locations:[{start:{line:1,column:4499},end:{line:1,column:4502}},{start:{line:1,column:4505},end:{line:1,column:4524}}],line:1},"39":{loc:{start:{line:1,column:4578},end:{line:1,column:4677}},type:"binary-expr",locations:[{start:{line:1,column:4578},end:{line:1,column:4581}},{start:{line:1,column:4584},end:{line:1,column:4676}}],line:1},"40":{loc:{start:{line:1,column:4695},end:{line:1,column:4776}},type:"if",locations:[{start:{line:1,column:4695},end:{line:1,column:4776}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"41":{loc:{start:{line:1,column:4698},end:{line:1,column:4730}},type:"binary-expr",locations:[{start:{line:1,column:4698},end:{line:1,column:4701}},{start:{line:1,column:4704},end:{line:1,column:4729}}],line:1},"42":{loc:{start:{line:1,column:4794},end:{line:1,column:4992}},type:"if",locations:[{start:{line:1,column:4794},end:{line:1,column:4992}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"43":{loc:{start:{line:1,column:4797},end:{line:1,column:4827}},type:"binary-expr",locations:[{start:{line:1,column:4797},end:{line:1,column:4800}},{start:{line:1,column:4803},end:{line:1,column:4826}}],line:1},"44":{loc:{start:{line:1,column:5010},end:{line:1,column:5510}},type:"if",locations:[{start:{line:1,column:5010},end:{line:1,column:5510}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"45":{loc:{start:{line:1,column:5510},end:{line:1,column:5886}},type:"if",locations:[{start:{line:1,column:5510},end:{line:1,column:5886}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"46":{loc:{start:{line:1,column:5853},end:{line:1,column:5882}},type:"cond-expr",locations:[{start:{line:1,column:5877},end:{line:1,column:5879}},{start:{line:1,column:5880},end:{line:1,column:5882}}],line:1},"47":{loc:{start:{line:1,column:5904},end:{line:1,column:6436}},type:"if",locations:[{start:{line:1,column:5904},end:{line:1,column:6436}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"48":{loc:{start:{line:1,column:5907},end:{line:1,column:6322}},type:"binary-expr",locations:[{start:{line:1,column:5907},end:{line:1,column:5910}},{start:{line:1,column:5913},end:{line:1,column:6321}}],line:1},"49":{loc:{start:{line:1,column:6454},end:{line:1,column:6550}},type:"if",locations:[{start:{line:1,column:6454},end:{line:1,column:6550}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"50":{loc:{start:{line:1,column:6457},end:{line:1,column:6525}},type:"binary-expr",locations:[{start:{line:1,column:6457},end:{line:1,column:6460}},{start:{line:1,column:6463},end:{line:1,column:6524}}],line:1},"51":{loc:{start:{line:1,column:6568},end:{line:1,column:6608}},type:"binary-expr",locations:[{start:{line:1,column:6568},end:{line:1,column:6571}},{start:{line:1,column:6573},end:{line:1,column:6608}}],line:1},"52":{loc:{start:{line:1,column:6609},end:{line:1,column:6633}},type:"binary-expr",locations:[{start:{line:1,column:6609},end:{line:1,column:6612}},{start:{line:1,column:6614},end:{line:1,column:6633}}],line:1},"53":{loc:{start:{line:1,column:6616},end:{line:1,column:6632}},type:"cond-expr",locations:[{start:{line:1,column:6629},end:{line:1,column:6630}},{start:{line:1,column:6631},end:{line:1,column:6632}}],line:1},"54":{loc:{start:{line:1,column:6651},end:{line:1,column:6703}},type:"binary-expr",locations:[{start:{line:1,column:6651},end:{line:1,column:6654}},{start:{line:1,column:6657},end:{line:1,column:6702}}],line:1},"55":{loc:{start:{line:1,column:7752},end:{line:1,column:7798}},type:"binary-expr",locations:[{start:{line:1,column:7752},end:{line:1,column:7794}},{start:{line:1,column:7796},end:{line:1,column:7798}}],line:1},"56":{loc:{start:{line:1,column:7842},end:{line:1,column:7903}},type:"if",locations:[{start:{line:1,column:7842},end:{line:1,column:7903}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"57":{loc:{start:{line:1,column:7845},end:{line:1,column:7879}},type:"binary-expr",locations:[{start:{line:1,column:7845},end:{line:1,column:7862}},{start:{line:1,column:7864},end:{line:1,column:7879}}],line:1},"58":{loc:{start:{line:1,column:7985},end:{line:1,column:8046}},type:"if",locations:[{start:{line:1,column:7985},end:{line:1,column:8046}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"59":{loc:{start:{line:1,column:7988},end:{line:1,column:8022}},type:"binary-expr",locations:[{start:{line:1,column:7988},end:{line:1,column:8005}},{start:{line:1,column:8007},end:{line:1,column:8022}}],line:1},"60":{loc:{start:{line:1,column:8062},end:{line:1,column:8094}},type:"binary-expr",locations:[{start:{line:1,column:8062},end:{line:1,column:8078}},{start:{line:1,column:8080},end:{line:1,column:8094}}],line:1},"61":{loc:{start:{line:1,column:8103},end:{line:1,column:8124}},type:"cond-expr",locations:[{start:{line:1,column:8105},end:{line:1,column:8120}},{start:{line:1,column:8121},end:{line:1,column:8124}}],line:1},"62":{loc:{start:{line:1,column:8212},end:{line:1,column:8236}},type:"binary-expr",locations:[{start:{line:1,column:8212},end:{line:1,column:8213}},{start:{line:1,column:8216},end:{line:1,column:8231}},{start:{line:1,column:8233},end:{line:1,column:8235}}],line:1},"63":{loc:{start:{line:1,column:8406},end:{line:1,column:8455}},type:"binary-expr",locations:[{start:{line:1,column:8406},end:{line:1,column:8449}},{start:{line:1,column:8451},end:{line:1,column:8455}}],line:1},"64":{loc:{start:{line:1,column:8496},end:{line:1,column:8532}},type:"if",locations:[{start:{line:1,column:8496},end:{line:1,column:8532}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"65":{loc:{start:{line:1,column:8588},end:{line:1,column:8908}},type:"binary-expr",locations:[{start:{line:1,column:8588},end:{line:1,column:8589}},{start:{line:1,column:8592},end:{line:1,column:8907}}],line:1},"66":{loc:{start:{line:1,column:8980},end:{line:1,column:9010}},type:"if",locations:[{start:{line:1,column:8980},end:{line:1,column:9010}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"67":{loc:{start:{line:1,column:9257},end:{line:1,column:9311}},type:"binary-expr",locations:[{start:{line:1,column:9257},end:{line:1,column:9258}},{start:{line:1,column:9261},end:{line:1,column:9310}}],line:1},"68":{loc:{start:{line:1,column:9560},end:{line:1,column:9797}},type:"binary-expr",locations:[{start:{line:1,column:9560},end:{line:1,column:9606}},{start:{line:1,column:9609},end:{line:1,column:9796}}],line:1},"69":{loc:{start:{line:1,column:9691},end:{line:1,column:9712}},type:"binary-expr",locations:[{start:{line:1,column:9691},end:{line:1,column:9708}},{start:{line:1,column:9710},end:{line:1,column:9712}}],line:1},"70":{loc:{start:{line:1,column:10062},end:{line:1,column:10279}},type:"cond-expr",locations:[{start:{line:1,column:10076},end:{line:1,column:10120}},{start:{line:1,column:10122},end:{line:1,column:10279}}],line:1},"71":{loc:{start:{line:1,column:10329},end:{line:1,column:10364}},type:"binary-expr",locations:[{start:{line:1,column:10329},end:{line:1,column:10347}},{start:{line:1,column:10349},end:{line:1,column:10364}}],line:1},"72":{loc:{start:{line:1,column:10579},end:{line:1,column:10594}},type:"if",locations:[{start:{line:1,column:10579},end:{line:1,column:10594}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"73":{loc:{start:{line:1,column:10771},end:{line:1,column:10855}},type:"binary-expr",locations:[{start:{line:1,column:10771},end:{line:1,column:10802}},{start:{line:1,column:10804},end:{line:1,column:10855}}],line:1},"74":{loc:{start:{line:1,column:10835},end:{line:1,column:10854}},type:"binary-expr",locations:[{start:{line:1,column:10835},end:{line:1,column:10850}},{start:{line:1,column:10852},end:{line:1,column:10854}}],line:1},"75":{loc:{start:{line:1,column:10901},end:{line:1,column:10945}},type:"binary-expr",locations:[{start:{line:1,column:10901},end:{line:1,column:10909}},{start:{line:1,column:10911},end:{line:1,column:10945}}],line:1},"76":{loc:{start:{line:1,column:11310},end:{line:1,column:11314}},type:"binary-expr",locations:[{start:{line:1,column:11310},end:{line:1,column:11311}},{start:{line:1,column:11313},end:{line:1,column:11314}}],line:1},"77":{loc:{start:{line:1,column:12138},end:{line:1,column:12278}},type:"if",locations:[{start:{line:1,column:12138},end:{line:1,column:12278}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"78":{loc:{start:{line:1,column:12141},end:{line:1,column:12208}},type:"binary-expr",locations:[{start:{line:1,column:12141},end:{line:1,column:12144}},{start:{line:1,column:12147},end:{line:1,column:12207}}],line:1},"79":{loc:{start:{line:1,column:12222},end:{line:1,column:12238}},type:"cond-expr",locations:[{start:{line:1,column:12234},end:{line:1,column:12235}},{start:{line:1,column:12236},end:{line:1,column:12238}}],line:1},"80":{loc:{start:{line:1,column:12246},end:{line:1,column:12274}},type:"cond-expr",locations:[{start:{line:1,column:12271},end:{line:1,column:12272}},{start:{line:1,column:12273},end:{line:1,column:12274}}],line:1}},s:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"116":0,"117":0,"118":0,"119":0,"120":0,"121":0,"122":0,"123":0,"124":0,"125":0,"126":0,"127":0,"128":0,"129":0,"130":0,"131":0,"132":0,"133":0,"134":0,"135":0,"136":0,"137":0,"138":0,"139":0,"140":0,"141":0,"142":0,"143":0,"144":0,"145":0,"146":0,"147":0,"148":0,"149":0,"150":0,"151":0,"152":0,"153":0,"154":0,"155":0,"156":0,"157":0,"158":0,"159":0,"160":0,"161":0,"162":0,"163":0,"164":0,"165":0,"166":0,"167":0,"168":0,"169":0,"170":0,"171":0,"172":0,"173":0,"174":0,"175":0,"176":0,"177":0,"178":0,"179":0,"180":0,"181":0,"182":0,"183":0,"184":0,"185":0,"186":0,"187":0,"188":0,"189":0,"190":0,"191":0,"192":0,"193":0,"194":0,"195":0,"196":0,"197":0,"198":0,"199":0,"200":0,"201":0,"202":0,"203":0,"204":0,"205":0,"206":0,"207":0,"208":0,"209":0,"210":0,"211":0,"212":0,"213":0,"214":0,"215":0,"216":0,"217":0,"218":0,"219":0,"220":0,"221":0,"222":0,"223":0,"224":0,"225":0,"226":0,"227":0,"228":0,"229":0,"230":0,"231":0,"232":0,"233":0,"234":0,"235":0,"236":0,"237":0,"238":0},f:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0},b:{"0":[0,0],"1":[0,0],"2":[0,0,0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0],"9":[0,0],"10":[0,0],"11":[0,0],"12":[0,0],"13":[0,0],"14":[0,0],"15":[0,0],"16":[0,0],"17":[0,0],"18":[0,0],"19":[0,0,0],"20":[0,0],"21":[0,0],"22":[0,0],"23":[0,0],"24":[0,0],"25":[0,0],"26":[0,0,0],"27":[0,0],"28":[0,0],"29":[0,0],"30":[0,0],"31":[0,0],"32":[0,0],"33":[0,0],"34":[0,0],"35":[0,0],"36":[0,0],"37":[0,0],"38":[0,0],"39":[0,0],"40":[0,0],"41":[0,0],"42":[0,0],"43":[0,0],"44":[0,0],"45":[0,0],"46":[0,0],"47":[0,0],"48":[0,0],"49":[0,0],"50":[0,0],"51":[0,0],"52":[0,0],"53":[0,0],"54":[0,0],"55":[0,0],"56":[0,0],"57":[0,0],"58":[0,0],"59":[0,0],"60":[0,0],"61":[0,0],"62":[0,0,0],"63":[0,0],"64":[0,0],"65":[0,0],"66":[0,0],"67":[0,0],"68":[0,0],"69":[0,0],"70":[0,0],"71":[0,0],"72":[0,0],"73":[0,0],"74":[0,0],"75":[0,0],"76":[0,0],"77":[0,0],"78":[0,0],"79":[0,0],"80":[0,0]},inputSourceMap:{version:3,sources:["src/app/features/device-interaction/services/device-api.service.ts","src/app/features/device-interaction/components/endpoint-table/endpoint-table.component.ts","src/app/features/device-interaction/components/endpoint-table/endpoint-table.component.html"],sourcesContent:["import { HttpClient } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\nimport {\n\tObservable,\n\tcatchError,\n\tforkJoin,\n\tmap,\n\tof,\n\tswitchMap,\n\tthrowError,\n\ttimeout,\n} from 'rxjs';\nimport { API_BASE_URL } from '../../../core/tokens/api-base-url.token';\nimport { Datapoint } from '../../apartment-monitor/models/datapoint.model';\nimport {\n\tPlantDatapointDto,\n\tPlantDeviceDto,\n\tPlantDto,\n} from '../../apartment-monitor/models/plant-response.model';\nimport { Room } from '../../apartment-monitor/models/room.model';\nimport { WritableEndpointRow } from '../models/writable-endpoint-row.model';\nimport type {\n\tDeviceValueDto,\n\tDeviceValuePointDto,\n\tWriteDatapointDto,\n} from '../models/write-datapoint-request.model';\nimport { resolveDeviceType } from '../../../shared/models/device-taxonomy';\n\n@Injectable({ providedIn: 'root' })\nexport class DeviceApiService {\n\tprivate readonly http = inject(HttpClient);\n\tprivate readonly baseUrl: string = inject(API_BASE_URL);\n\tprivate readonly plantEndpoint = `${this.baseUrl}/plant`;\n\tprivate readonly deviceEndpoint = `${this.baseUrl}/device`;\n\n\tpublic getWritableEndpointRows(): Observable {\n\t\treturn this.resolveActivePlantId().pipe(\n\t\t\tswitchMap((plantId) => this.fetchPlantById(plantId)),\n\t\t\tmap((plant) => this.mapWritableEndpointRows(plant)),\n\t\t);\n\t}\n\n\tpublic getRoom(roomId: string): Observable {\n\t\treturn this.resolveActivePlantId().pipe(\n\t\t\tswitchMap((plantId) => this.fetchPlantById(plantId)),\n\t\t\tmap((plant) => this.mapRoomFromPlant(plant, roomId)),\n\t\t);\n\t}\n\n\tpublic writeDatapointValue(dto: WriteDatapointDto): Observable {\n\t\treturn this.http.post<{ message: string; statusCode: number }>(this.deviceEndpoint, dto).pipe(\n\t\t\ttimeout(9000),\n\t\t\tmap((response) => {\n\t\t\t\tconst statusCode = typeof response?.statusCode === 'number' ? response.statusCode : 202;\n\t\t\t\tconst message = (response?.message ?? '').toLowerCase();\n\n\t\t\t\tconst hasFailureCode = statusCode >= 400;\n\t\t\t\tconst hasFailureMessage =\n\t\t\t\t\tmessage.includes('error') ||\n\t\t\t\t\tmessage.includes('failed') ||\n\t\t\t\t\tmessage.includes('fail') ||\n\t\t\t\t\tmessage.includes('impossibile');\n\n\t\t\t\tif (hasFailureCode || hasFailureMessage) {\n\t\t\t\t\tthrow new Error(response?.message ?? 'Write datapoint failed');\n\t\t\t\t}\n\n\t\t\t\treturn void 0;\n\t\t\t}),\n\t\t);\n\t}\n\n\tpublic getDatapointCurrentValuesByDeviceIds(\n\t\tdeviceIds: ReadonlyArray,\n\t): Observable> {\n\t\treturn this.getCurrentValuePointsByDeviceIds(deviceIds).pipe(\n\t\t\tmap((valuesByDevice) => {\n\t\t\t\tconst valuesByDatapoint = new Map();\n\n\t\t\t\tfor (const points of valuesByDevice.values()) {\n\t\t\t\t\tfor (const valuePoint of points) {\n\t\t\t\t\t\tif (!valuePoint?.datapointId) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvaluesByDatapoint.set(valuePoint.datapointId, valuePoint.value);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn valuesByDatapoint;\n\t\t\t}),\n\t\t);\n\t}\n\n\tpublic getCurrentValuePointsByDeviceIds(\n\t\tdeviceIds: ReadonlyArray,\n\t): Observable> {\n\t\tconst uniqueDeviceIds = Array.from(\n\t\t\tnew Set(\n\t\t\t\tdeviceIds\n\t\t\t\t\t.filter((deviceId): deviceId is string => typeof deviceId === 'string')\n\t\t\t\t\t.map((deviceId) => deviceId.trim())\n\t\t\t\t\t.filter((deviceId) => deviceId.length > 0),\n\t\t\t),\n\t\t);\n\n\t\tif (uniqueDeviceIds.length === 0) {\n\t\t\treturn of(new Map());\n\t\t}\n\n\t\tconst requests = uniqueDeviceIds.map((deviceId) =>\n\t\t\tthis.http\n\t\t\t\t.get(`${this.deviceEndpoint}/${encodeURIComponent(deviceId)}/value`)\n\t\t\t\t.pipe(catchError(() => of({ deviceId, values: [] }))),\n\t\t);\n\n\t\treturn forkJoin(requests).pipe(\n\t\t\tmap((responses) => {\n\t\t\t\tconst valuesByDevice = new Map();\n\n\t\t\t\tfor (const response of responses) {\n\t\t\t\t\tconst deviceId = typeof response?.deviceId === 'string' ? response.deviceId : '';\n\t\t\t\t\tif (!deviceId.trim()) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tvaluesByDevice.set(\n\t\t\t\t\t\tdeviceId,\n\t\t\t\t\t\t(response.values ?? []).filter(\n\t\t\t\t\t\t\t(point): point is DeviceValuePointDto =>\n\t\t\t\t\t\t\t\ttypeof point?.datapointId === 'string' &&\n\t\t\t\t\t\t\t\ttypeof point?.name === 'string',\n\t\t\t\t\t\t),\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn valuesByDevice;\n\t\t\t}),\n\t\t);\n\t}\n\n\tprivate resolveActivePlantId(): Observable {\n\t\tconst activePlantId = this.getActivePlantId();\n\t\tif (activePlantId) {\n\t\t\treturn of(activePlantId);\n\t\t}\n\n\t\treturn this.fetchAllPlants().pipe(\n\t\t\tmap((plants) => plants[0]?.id ?? null),\n\t\t\tswitchMap((plantId) => {\n\t\t\t\tif (!plantId) {\n\t\t\t\t\treturn throwError(() => new Error('No plants available'));\n\t\t\t\t}\n\n\t\t\t\tthis.setActivePlantId(plantId);\n\t\t\t\treturn of(plantId);\n\t\t\t}),\n\t\t);\n\t}\n\n\tprivate fetchPlantById(plantId: string): Observable {\n\t\treturn this.http.get(`${this.plantEndpoint}?plantid=${encodeURIComponent(plantId)}`);\n\t}\n\n\tprivate fetchAllPlants(): Observable {\n\t\treturn this.http\n\t\t\t.get(`${this.plantEndpoint}/all`)\n\t\t\t.pipe(\n\t\t\t\tmap((response) => (Array.isArray(response) ? response : [])),\n\t\t\t\tcatchError(() => of([])),\n\t\t\t);\n\t}\n\n\tprivate getActivePlantId(): string | null {\n\t\tconst storage = globalThis.localStorage as { getItem?: (key: string) => string | null } | undefined;\n\n\t\tif (storage && typeof storage.getItem === 'function') {\n\t\t\tconst plantId = storage.getItem('activePlantId');\n\t\t\treturn plantId?.trim() ? plantId : null;\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tprivate setActivePlantId(plantId: string): void {\n\t\tconst storage = globalThis.localStorage as { setItem?: (key: string, value: string) => void } | undefined;\n\t\tif (!storage || typeof storage.setItem !== 'function') {\n\t\t\treturn;\n\t\t}\n\n\t\tstorage.setItem('activePlantId', plantId);\n\t}\n\n\tprivate mapRoomFromPlant(plant: PlantDto, roomId: string): Room {\n\t\tconst sourceRoom = plant.rooms.find((room) => room.id === roomId);\n\n\t\tif (!sourceRoom) {\n\t\t\tthrow new Error(`Room ${roomId} not found in plant ${plant.id}`);\n\t\t}\n\n\t\treturn {\n\t\t\tid: sourceRoom.id,\n\t\t\tname: sourceRoom.name,\n\t\t\thasActiveAlarm: false,\n\t\t\tdevices: sourceRoom.devices.map((device) => {\n\t\t\t\tconst mappedDatapoints = this.mapDatapoints(device.datapoints);\n\n\t\t\t\treturn {\n\t\t\t\t\tid: device.id,\n\t\t\t\t\tname: device.name,\n\t\t\t\t\ttype: resolveDeviceType({\n\t\t\t\t\t\trawType: device.type,\n\t\t\t\t\t\trawSubType: device.subType,\n\t\t\t\t\t\trawName: device.name,\n\t\t\t\t\t\tsfeTypes: mappedDatapoints.map((datapoint) => datapoint.sfeType),\n\t\t\t\t\t}),\n\t\t\t\t\tstatus: device.type ? 'ONLINE' : 'UNKNOWN',\n\t\t\t\t\tactions: [],\n\t\t\t\t\tdatapoints: mappedDatapoints,\n\t\t\t\t};\n\t\t\t}),\n\t\t};\n\t}\n\n\tprivate mapDatapoints(datapoints: PlantDatapointDto[] | undefined): Datapoint[] {\n\t\treturn (datapoints ?? []).map((datapoint) => ({\n\t\t\tid: datapoint.id,\n\t\t\tname: datapoint.name,\n\t\t\treadable: datapoint.readable,\n\t\t\twritable: datapoint.writable,\n\t\t\tvalueType: datapoint.valueType,\n\t\t\tenum: Array.isArray(datapoint.enum) ? datapoint.enum : [],\n\t\t\tsfeType: datapoint.sfeType ?? '',\n\t\t}));\n\t}\n\n\tprivate mapWritableEndpointRows(plant: PlantDto): WritableEndpointRow[] {\n\t\tconst rows: WritableEndpointRow[] = [];\n\n\t\tfor (const room of plant.rooms) {\n\t\t\tconst visibleDevices = this.deduplicateRoomDevices(\n\t\t\t\troom.devices.filter((device) => !this.isEnergyMeasureDevice(device.type, device.subType)),\n\t\t\t);\n\n\t\t\tfor (const device of visibleDevices) {\n\t\t\t\tconst mappedDatapoints = this.mapDatapoints(device.datapoints);\n\t\t\t\tconst resolvedDeviceType = resolveDeviceType({\n\t\t\t\t\trawType: device.type,\n\t\t\t\t\trawSubType: device.subType,\n\t\t\t\t\trawName: device.name,\n\t\t\t\t\tsfeTypes: mappedDatapoints.map((datapoint) => datapoint.sfeType),\n\t\t\t\t});\n\n\t\t\t\tconst writableEnumDatapoints = mappedDatapoints.filter(\n\t\t\t\t\t(datapoint) => datapoint.writable && datapoint.enum.length > 0,\n\t\t\t\t);\n\n\t\t\t\tfor (const datapoint of writableEnumDatapoints) {\n\t\t\t\t\trows.push({\n\t\t\t\t\t\troomId: room.id,\n\t\t\t\t\t\troomName: room.name,\n\t\t\t\t\t\tdeviceId: device.id,\n\t\t\t\t\t\tdeviceName: device.name,\n\t\t\t\t\t\tdeviceType: resolvedDeviceType,\n\t\t\t\t\t\tdatapointId: datapoint.id,\n\t\t\t\t\t\tdatapointName: datapoint.name,\n\t\t\t\t\t\tdatapointSfeType: datapoint.sfeType,\n\t\t\t\t\t\tenumValues: datapoint.enum,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn rows;\n\t}\n\n\tprivate deduplicateRoomDevices(devices: ReadonlyArray): PlantDeviceDto[] {\n\t\tconst byName = new Map();\n\n\t\tfor (const device of devices) {\n\t\t\tconst key = this.normalizeDeviceName(device.name);\n\t\t\tconst current = byName.get(key);\n\n\t\t\tif (!current || this.getDevicePriorityScore(device) > this.getDevicePriorityScore(current)) {\n\t\t\t\tbyName.set(key, device);\n\t\t\t}\n\t\t}\n\n\t\treturn Array.from(byName.values());\n\t}\n\n\tprivate normalizeDeviceName(name: string): string {\n\t\treturn name.trim().toLowerCase();\n\t}\n\n\tprivate getDevicePriorityScore(device: PlantDeviceDto): number {\n\t\tconst normalizedType = device.type?.toUpperCase() ?? '';\n\t\tconst normalizedSubType = device.subType?.toUpperCase() ?? '';\n\n\t\tlet score = 0;\n\n\t\tif (normalizedType.includes('RADARDETECTOR')) {\n\t\t\tscore += 100;\n\t\t}\n\n\t\tif (normalizedSubType === 'SF_ACCESS') {\n\t\t\tscore += 60;\n\t\t}\n\n\t\tif (normalizedType === 'SS_AUTOMATION_ONOFF') {\n\t\t\tscore -= 20;\n\t\t}\n\n\t\tscore += device.datapoints?.length ?? 0;\n\t\treturn score;\n\t}\n\n\tprivate isEnergyMeasureDevice(rawType: string | undefined, rawSubType: string | undefined): boolean {\n\t\tconst normalizedType = rawType?.toUpperCase() ?? '';\n\t\tconst normalizedSubType = rawSubType?.toUpperCase() ?? '';\n\n\t\treturn normalizedType.startsWith('SS_ENERGY_MEASURE') || normalizedSubType === 'SF_ENERGY';\n\t}\n\n}\n","import { AsyncPipe } from '@angular/common';\nimport { Component, OnDestroy, OnInit, inject } from '@angular/core';\nimport {\n\tEMPTY,\n\tObservable,\n\tSubject,\n\tSubscription,\n\tcatchError,\n\tfilter,\n\tfinalize,\n\tfromEvent,\n\tinterval,\n\tmap,\n\tof,\n\tstartWith,\n\tswitchMap,\n\ttap,\n} from 'rxjs';\nimport { DeviceType } from '../../models/device-type.enum';\nimport { EndpointRoomGroup } from '../../models/endpoint-room-group.model';\nimport { RowFeedback } from '../../models/row-feedback.model';\nimport { WritableEndpointRow } from '../../models/writable-endpoint-row.model';\nimport { DeviceApiService } from '../../services/device-api.service';\nimport type { DeviceValuePointDto } from '../../models/write-datapoint-request.model';\nimport { getDeviceTypeLabel, getEndpointLabel as resolveEndpointLabel } from '../../../../shared/models/device-taxonomy';\n\n@Component({\n\tselector: 'app-endpoint-table',\n\tstandalone: true,\n\timports: [AsyncPipe],\n\ttemplateUrl: './endpoint-table.component.html',\n\tstyleUrl: './endpoint-table.component.css',\n})\nexport class EndpointTableComponent implements OnInit, OnDestroy {\n\tprivate static readonly CURRENT_VALUES_POLL_MS = 15000;\n\n\tprivate readonly deviceApi = inject(DeviceApiService);\n\tprivate readonly refresh$ = new Subject();\n\tprivate readonly selectedValuesByRow = new Map();\n\tprivate readonly executingRows = new Set();\n\tprivate readonly feedbackByRow = new Map();\n\tprivate readonly feedbackTimerByRow = new Map>();\n\tprivate currentValuesByDevice = new Map();\n\tprivate latestRows: WritableEndpointRow[] = [];\n\tprivate activePlantChangeSubscription: Subscription | null = null;\n\tprivate currentValuesPollingSubscription: Subscription | null = null;\n\n\tpublic readonly roomGroups$: Observable = this.refresh$.pipe(\n\t\tstartWith(void 0),\n\t\tswitchMap(() => this.deviceApi.getWritableEndpointRows().pipe(\n\t\t\ttap(() => {\n\t\t\t\tthis.loadError = '';\n\t\t\t}),\n\t\t\ttap((rows) => {\n\t\t\t\tthis.latestRows = rows;\n\t\t\t\tthis.syncSelectedValues(rows);\n\t\t\t}),\n\t\t\tswitchMap((rows) =>\n\t\t\t\tthis.loadCurrentValues(rows).pipe(map(() => this.groupRowsByRoom(rows))),\n\t\t\t),\n\t\t)),\n\t\tcatchError(() => {\n\t\t\tthis.loadError = 'Impossibile caricare i dispositivi con endpoint.';\n\t\t\treturn of([]);\n\t\t}),\n\t);\n\n\tpublic loadError = '';\n\n\tpublic ngOnInit(): void {\n\t\tthis.subscribeToActivePlantChanges();\n\t\tthis.startCurrentValuesPolling();\n\t}\n\n\tpublic ngOnDestroy(): void {\n\t\tthis.activePlantChangeSubscription?.unsubscribe();\n\t\tthis.currentValuesPollingSubscription?.unsubscribe();\n\t\tthis.clearAllRowFeedback();\n\t}\n\n\tpublic trackByGroup(_: number, group: EndpointRoomGroup): string {\n\t\treturn group.roomId;\n\t}\n\n\tpublic trackByRow(_: number, row: WritableEndpointRow): string {\n\t\treturn this.buildRowKey(row);\n\t}\n\n\tpublic getTypeLabel(type: DeviceType): string {\n\t\treturn getDeviceTypeLabel(type);\n\t}\n\n\tpublic getEndpointLabel(row: WritableEndpointRow): string {\n\t\treturn resolveEndpointLabel(row.datapointSfeType);\n\t}\n\n\tpublic getCurrentValue(row: WritableEndpointRow): string {\n\t\tconst valuePoints = this.currentValuesByDevice.get(row.deviceId) ?? [];\n\n\t\tconst exactMatch = valuePoints.find((point) => point.datapointId === row.datapointId);\n\t\tif (exactMatch?.value !== undefined && exactMatch?.value !== null) {\n\t\t\treturn String(exactMatch.value);\n\t\t}\n\n\t\tconst semanticCandidates = this.getSemanticCandidates(row);\n\t\tconst semanticMatch = valuePoints.find((point) =>\n\t\t\tsemanticCandidates.has(this.normalizeKey(point.name)),\n\t\t);\n\t\tif (semanticMatch?.value !== undefined && semanticMatch?.value !== null) {\n\t\t\treturn String(semanticMatch.value);\n\t\t}\n\n\t\tconst firstAvailable = valuePoints.find(\n\t\t\t(point) => point.value !== undefined && point.value !== null,\n\t\t);\n\t\tif (firstAvailable) {\n\t\t\treturn String(firstAvailable.value);\n\t\t}\n\n\t\treturn '-';\n\t}\n\n\tpublic getSelectedValue(row: WritableEndpointRow): string {\n\t\tconst rowKey = this.buildRowKey(row);\n\t\tconst currentValue = this.selectedValuesByRow.get(rowKey);\n\n\t\tif (currentValue) {\n\t\t\treturn currentValue;\n\t\t}\n\n\t\treturn row.enumValues[0] ?? '';\n\t}\n\n\tpublic onSelectionChange(row: WritableEndpointRow, value: string): void {\n\t\tthis.selectedValuesByRow.set(this.buildRowKey(row), value);\n\t}\n\n\tpublic isRowExecuting(row: WritableEndpointRow): boolean {\n\t\treturn this.executingRows.has(this.buildRowKey(row));\n\t}\n\n\tpublic getRowFeedback(row: WritableEndpointRow): RowFeedback | null {\n\t\treturn this.feedbackByRow.get(this.buildRowKey(row)) ?? null;\n\t}\n\n\tpublic onWriteRow(row: WritableEndpointRow): void {\n\t\tconst rowKey = this.buildRowKey(row);\n\n\t\tif (this.executingRows.has(rowKey)) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.clearRowFeedback(rowKey);\n\n\t\tconst selectedValue = this.getSelectedValue(row);\n\t\tif (!selectedValue) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.executingRows.add(rowKey);\n\n\t\tthis.deviceApi.writeDatapointValue({ datapointId: row.datapointId, value: selectedValue }).pipe(\n\t\t\ttap(() => {\n\t\t\t\tthis.setRowFeedback(rowKey, 'success', 'Comando inviato correttamente.');\n\t\t\t\tthis.refresh$.next();\n\t\t\t}),\n\t\t\tcatchError(() => {\n\t\t\t\tthis.setRowFeedback(rowKey, 'error', 'Errore invio comando.');\n\t\t\t\treturn EMPTY;\n\t\t\t}),\n\t\t\tfinalize(() => {\n\t\t\t\tthis.executingRows.delete(rowKey);\n\t\t\t}),\n\t\t).subscribe();\n\t}\n\n\tprivate groupRowsByRoom(rows: WritableEndpointRow[]): EndpointRoomGroup[] {\n\t\tconst groupsById = new Map();\n\n\t\tfor (const row of rows) {\n\t\t\tconst existingGroup = groupsById.get(row.roomId);\n\n\t\t\tif (existingGroup) {\n\t\t\t\texistingGroup.rows.push(row);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tgroupsById.set(row.roomId, {\n\t\t\t\troomId: row.roomId,\n\t\t\t\troomName: row.roomName,\n\t\t\t\trows: [row],\n\t\t\t});\n\t\t}\n\n\t\treturn Array.from(groupsById.values());\n\t}\n\n\tprivate buildRowKey(row: WritableEndpointRow): string {\n\t\treturn `${row.roomId}::${row.deviceId}::${row.datapointId}`;\n\t}\n\n\tprivate clearRowFeedback(rowKey: string): void {\n\t\tthis.feedbackByRow.delete(rowKey);\n\n\t\tconst existingTimer = this.feedbackTimerByRow.get(rowKey);\n\t\tif (existingTimer) {\n\t\t\tclearTimeout(existingTimer);\n\t\t\tthis.feedbackTimerByRow.delete(rowKey);\n\t\t}\n\t}\n\n\tprivate setRowFeedback(rowKey: string, type: RowFeedback['type'], message: string): void {\n\t\tthis.clearRowFeedback(rowKey);\n\t\tthis.feedbackByRow.set(rowKey, { type, message });\n\n\t\tconst timer = setTimeout(() => {\n\t\t\tthis.feedbackByRow.delete(rowKey);\n\t\t\tthis.feedbackTimerByRow.delete(rowKey);\n\t\t}, 5000);\n\n\t\tthis.feedbackTimerByRow.set(rowKey, timer);\n\t}\n\n\tprivate subscribeToActivePlantChanges(): void {\n\t\tif (typeof globalThis.addEventListener !== 'function') {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.activePlantChangeSubscription = fromEvent>(\n\t\t\tglobalThis,\n\t\t\t'active-plant-changed',\n\t\t).pipe(\n\t\t\tmap((event) => event.detail?.plantId ?? ''),\n\t\t\tfilter((plantId) => plantId.length > 0),\n\t\t).subscribe(() => {\n\t\t\tthis.resetTransientState();\n\t\t\tthis.refresh$.next();\n\t\t});\n\t}\n\n\tprivate startCurrentValuesPolling(): void {\n\t\tthis.currentValuesPollingSubscription = interval(\n\t\t\tEndpointTableComponent.CURRENT_VALUES_POLL_MS,\n\t\t)\n\t\t\t.pipe(switchMap(() => this.loadCurrentValues(this.latestRows)))\n\t\t\t.subscribe();\n\t}\n\n\tprivate loadCurrentValues(rows: ReadonlyArray): Observable {\n\t\tconst uniqueDeviceIds = Array.from(\n\t\t\tnew Set(rows.map((row) => row.deviceId).filter((deviceId) => deviceId.trim().length > 0)),\n\t\t);\n\n\t\tif (uniqueDeviceIds.length === 0) {\n\t\t\tthis.currentValuesByDevice.clear();\n\t\t\treturn of(void 0);\n\t\t}\n\n\t\treturn this.deviceApi.getCurrentValuePointsByDeviceIds(uniqueDeviceIds).pipe(\n\t\t\ttap((valuesByDevice) => {\n\t\t\t\tthis.currentValuesByDevice = valuesByDevice;\n\t\t\t}),\n\t\t\tmap(() => void 0),\n\t\t\tcatchError(() => {\n\t\t\t\tthis.currentValuesByDevice.clear();\n\t\t\t\treturn of(void 0);\n\t\t\t}),\n\t\t);\n\t}\n\n\tprivate getSemanticCandidates(row: WritableEndpointRow): Set {\n\t\tconst cmdKey = this.normalizeKey(row.datapointSfeType || row.datapointName);\n\t\tconst nameKey = this.normalizeKey(row.datapointName);\n\t\tconst stateFromCmd = this.convertCmdToState(cmdKey);\n\t\tconst stateFromName = this.convertCmdToState(nameKey);\n\n\t\treturn new Set([cmdKey, nameKey, stateFromCmd, stateFromName].filter((key) => key.length > 0));\n\t}\n\n\tprivate convertCmdToState(value: string): string {\n\t\treturn value.replaceAll('cmd', 'state');\n\t}\n\n\tprivate normalizeKey(value: string | undefined): string {\n\t\tif (!value) {\n\t\t\treturn '';\n\t\t}\n\n\t\tlet normalized = value.toLowerCase();\n\t\tfor (const char of [' ', '_', '-', '.', '/', ':']) {\n\t\t\tnormalized = normalized.replaceAll(char, '');\n\t\t}\n\n\t\treturn normalized;\n\t}\n\n\tprivate syncSelectedValues(rows: ReadonlyArray): void {\n\t\tconst activeRowKeys = new Set();\n\n\t\tfor (const row of rows) {\n\t\t\tconst rowKey = this.buildRowKey(row);\n\t\t\tactiveRowKeys.add(rowKey);\n\n\t\t\tif (!this.selectedValuesByRow.has(rowKey)) {\n\t\t\t\tthis.selectedValuesByRow.set(rowKey, row.enumValues[0] ?? '');\n\t\t\t}\n\t\t}\n\n\t\tfor (const rowKey of this.selectedValuesByRow.keys()) {\n\t\t\tif (!activeRowKeys.has(rowKey)) {\n\t\t\t\tthis.selectedValuesByRow.delete(rowKey);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate resetTransientState(): void {\n\t\tthis.selectedValuesByRow.clear();\n\t\tthis.executingRows.clear();\n\t\tthis.clearAllRowFeedback();\n\t\tthis.currentValuesByDevice.clear();\n\t\tthis.latestRows = [];\n\t\tthis.loadError = '';\n\t}\n\n\tprivate clearAllRowFeedback(): void {\n\t\tfor (const timer of this.feedbackTimerByRow.values()) {\n\t\t\tclearTimeout(timer);\n\t\t}\n\n\t\tthis.feedbackTimerByRow.clear();\n\t\tthis.feedbackByRow.clear();\n\t}\n}","@if (loadError) {\n

{{ loadError }}

\n}\n\n@if (roomGroups$ | async; as roomGroups) {\n @if (roomGroups.length === 0) {\n

Nessun endpoint scrivibile disponibile per l'appartamento selezionato.

\n } @else {\n
\n @for (group of roomGroups; track trackByGroup($index, group)) {\n
\n
\n
\n

Stanza

\n

{{ group.roomName }}

\n
\n
\n\n
\n \n \n \n \n \n \n \n \n \n \n \n \n @for (row of group.rows; track trackByRow($index, row)) {\n \n \n \n \n \n \n \n \n }\n \n
DispositivoTipoEndpointStato attualeValoreAzione
\n
\n {{ row.deviceName }}\n ID {{ row.deviceId }}\n
\n
{{ getTypeLabel(row.deviceType) }}{{ getEndpointLabel(row) }}\n {{ getCurrentValue(row) }}\n \n \n @for (enumValue of row.enumValues; track enumValue) {\n \n }\n \n \n
\n \n Scrivi\n \n\n @if (getRowFeedback(row); as feedback) {\n
\n
\n
\n
\n }\n
\n }\n} @else {\n

Caricamento endpoint...

\n}"],mappings:"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",names:["DeviceApiService","http","inject","HttpClient","baseUrl","API_BASE_URL","plantEndpoint","deviceEndpoint","getWritableEndpointRows","resolveActivePlantId","pipe","switchMap","plantId","fetchPlantById","map","plant","mapWritableEndpointRows","getRoom","roomId","mapRoomFromPlant","writeDatapointValue","dto","post","timeout","response","statusCode","message","toLowerCase","hasFailureCode","hasFailureMessage","includes","Error","getDatapointCurrentValuesByDeviceIds","deviceIds","getCurrentValuePointsByDeviceIds","valuesByDevice","valuesByDatapoint","Map","points","values","valuePoint","datapointId","set","value","uniqueDeviceIds","Array","from","Set","filter","deviceId","trim","length","of","requests","get","encodeURIComponent","catchError","forkJoin","responses","point","name","activePlantId","getActivePlantId","fetchAllPlants","plants","id","setActivePlantId","throwError","isArray","storage","globalThis","localStorage","getItem","setItem","sourceRoom","rooms","find","room","hasActiveAlarm","devices","device","mappedDatapoints","mapDatapoints","datapoints","type","resolveDeviceType","rawType","rawSubType","subType","rawName","sfeTypes","datapoint","sfeType","status","actions","readable","writable","valueType","enum","rows","visibleDevices","deduplicateRoomDevices","isEnergyMeasureDevice","resolvedDeviceType","writableEnumDatapoints","push","roomName","deviceName","deviceType","datapointName","datapointSfeType","enumValues","byName","key","normalizeDeviceName","current","getDevicePriorityScore","normalizedType","toUpperCase","normalizedSubType","score","startsWith","factory","\u0275fac","providedIn","\u0275\u0275domElementStart","\u0275\u0275text","\u0275\u0275domElementEnd","\u0275\u0275advance","\u0275\u0275textInterpolate","ctx_r0","loadError","\u0275\u0275domProperty","enumValue_r4","\u0275\u0275classProp","feedback_r5","type","\u0275\u0275textInterpolate1","message","\u0275\u0275domListener","$event","row_r3","\u0275\u0275restoreView","_r2","$implicit","\u0275\u0275nextContext","\u0275\u0275resetView","onSelectionChange","target","value","\u0275\u0275repeaterCreate","EndpointTableComponent_Conditional_1_Conditional_1_For_2_For_25_For_17_Template","\u0275\u0275repeaterTrackByIdentity","onWriteRow","\u0275\u0275conditionalCreate","EndpointTableComponent_Conditional_1_Conditional_1_For_2_For_25_Conditional_22_Template","deviceName","deviceId","getTypeLabel","deviceType","getEndpointLabel","getCurrentValue","getSelectedValue","isRowExecuting","\u0275\u0275repeater","enumValues","\u0275\u0275conditional","tmp_33_0","getRowFeedback","EndpointTableComponent_Conditional_1_Conditional_1_For_2_For_25_Template","\u0275\u0275componentInstance","trackByRow","group_r6","roomName","\u0275\u0275interpolate1","rows","EndpointTableComponent_Conditional_1_Conditional_1_For_2_Template","trackByGroup","roomGroups_r7","EndpointTableComponent_Conditional_1_Conditional_0_Template","EndpointTableComponent_Conditional_1_Conditional_1_Template","ctx","length","EndpointTableComponent","CURRENT_VALUES_POLL_MS","deviceApi","inject","DeviceApiService","refresh$","Subject","selectedValuesByRow","Map","executingRows","Set","feedbackByRow","feedbackTimerByRow","currentValuesByDevice","latestRows","activePlantChangeSubscription","currentValuesPollingSubscription","roomGroups$","pipe","startWith","switchMap","getWritableEndpointRows","tap","syncSelectedValues","loadCurrentValues","map","groupRowsByRoom","catchError","of","ngOnInit","subscribeToActivePlantChanges","startCurrentValuesPolling","ngOnDestroy","unsubscribe","clearAllRowFeedback","_","group","roomId","row","buildRowKey","getDeviceTypeLabel","resolveEndpointLabel","datapointSfeType","valuePoints","get","exactMatch","find","point","datapointId","undefined","String","semanticCandidates","getSemanticCandidates","semanticMatch","has","normalizeKey","name","firstAvailable","rowKey","currentValue","set","clearRowFeedback","selectedValue","add","writeDatapointValue","setRowFeedback","next","EMPTY","finalize","delete","subscribe","groupsById","existingGroup","push","Array","from","values","existingTimer","clearTimeout","timer","setTimeout","globalThis","addEventListener","fromEvent","event","detail","plantId","filter","resetTransientState","interval","uniqueDeviceIds","trim","clear","getCurrentValuePointsByDeviceIds","valuesByDevice","cmdKey","datapointName","nameKey","stateFromCmd","convertCmdToState","stateFromName","key","replaceAll","normalized","toLowerCase","char","activeRowKeys","keys","selectors","decls","vars","consts","template","rf","EndpointTableComponent_Conditional_0_Template","EndpointTableComponent_Conditional_1_Template","\u0275\u0275conditionalBranchCreate","EndpointTableComponent_Conditional_3_Template","tmp_1_0","\u0275\u0275pipeBind1","AsyncPipe","styles"]},_coverageSchema:"1a1c01bbd47fc00a2c39e90264f33305004495a9",hash:"f3f8fec964907413312659a2ad1528958e2c772c"};var coverage=global[gcv]||(global[gcv]={});if(!coverage[path]||coverage[path].hash!==hash){coverage[path]=coverageData;}var actualCoverage=coverage[path];{// @ts-ignore +cov_25lfnt0gs5=function(){return actualCoverage;};}return actualCoverage;}cov_25lfnt0gs5();import{a as A,b as ie,c as oe}from"./chunk-HTKPMSJ5.js";import{b as te,e as ne}from"./chunk-2S5V5XEE.js";import{h as ee}from"./chunk-F6OGAIBI.js";import{$a as Y,A as K,Ab as s,Bb as h,Cb as B,E as W,Eb as Q,F as _,H as y,Ib as X,Jb as Z,Ka as j,L as G,Q as w,V as P,W as I,Wa as k,Xa as M,Ya as E,Za as q,_a as C,ab as R,bb as T,d as D,f as O,gb as l,h as f,hb as r,i as F,jb as H,kb as S,l as N,m,ob as V,pb as v,s as z,t as $,u as L,v as U,w as g,wa as d,yb as J}from"./chunk-RYTNMYZW.js";var ae=(cov_25lfnt0gs5().s[0]++,(()=>{cov_25lfnt0gs5().f[0]++;class o{http=(cov_25lfnt0gs5().s[1]++,w(te));baseUrl=(cov_25lfnt0gs5().s[2]++,w(ne));plantEndpoint=(cov_25lfnt0gs5().s[3]++,`${this.baseUrl}/plant`);deviceEndpoint=(cov_25lfnt0gs5().s[4]++,`${this.baseUrl}/device`);getWritableEndpointRows(){cov_25lfnt0gs5().f[1]++;cov_25lfnt0gs5().s[5]++;return this.resolveActivePlantId().pipe(_(e=>{cov_25lfnt0gs5().f[2]++;cov_25lfnt0gs5().s[6]++;return this.fetchPlantById(e);}),m(e=>{cov_25lfnt0gs5().f[3]++;cov_25lfnt0gs5().s[7]++;return this.mapWritableEndpointRows(e);}));}getRoom(e){cov_25lfnt0gs5().f[4]++;cov_25lfnt0gs5().s[8]++;return this.resolveActivePlantId().pipe(_(t=>{cov_25lfnt0gs5().f[5]++;cov_25lfnt0gs5().s[9]++;return this.fetchPlantById(t);}),m(t=>{cov_25lfnt0gs5().f[6]++;cov_25lfnt0gs5().s[10]++;return this.mapRoomFromPlant(t,e);}));}writeDatapointValue(e){cov_25lfnt0gs5().f[7]++;cov_25lfnt0gs5().s[11]++;return this.http.post(this.deviceEndpoint,e).pipe(N(9e3),m(t=>{cov_25lfnt0gs5().f[8]++;let n=(cov_25lfnt0gs5().s[12]++,typeof t?.statusCode=="number"?(cov_25lfnt0gs5().b[0][0]++,t.statusCode):(cov_25lfnt0gs5().b[0][1]++,202)),i=(cov_25lfnt0gs5().s[13]++,((cov_25lfnt0gs5().b[1][0]++,t?.message)??(cov_25lfnt0gs5().b[1][1]++,"")).toLowerCase()),a=(cov_25lfnt0gs5().s[14]++,n>=400),c=(cov_25lfnt0gs5().s[15]++,(cov_25lfnt0gs5().b[2][0]++,i.includes("error"))||(cov_25lfnt0gs5().b[2][1]++,i.includes("failed"))||(cov_25lfnt0gs5().b[2][2]++,i.includes("fail"))||(cov_25lfnt0gs5().b[2][3]++,i.includes("impossibile")));cov_25lfnt0gs5().s[16]++;if((cov_25lfnt0gs5().b[4][0]++,a)||(cov_25lfnt0gs5().b[4][1]++,c)){cov_25lfnt0gs5().b[3][0]++;cov_25lfnt0gs5().s[17]++;throw new Error((cov_25lfnt0gs5().b[5][0]++,t?.message)??(cov_25lfnt0gs5().b[5][1]++,"Write datapoint failed"));}else{cov_25lfnt0gs5().b[3][1]++;}}));}getDatapointCurrentValuesByDeviceIds(e){cov_25lfnt0gs5().f[9]++;cov_25lfnt0gs5().s[18]++;return this.getCurrentValuePointsByDeviceIds(e).pipe(m(t=>{cov_25lfnt0gs5().f[10]++;let n=(cov_25lfnt0gs5().s[19]++,new Map());cov_25lfnt0gs5().s[20]++;for(let i of t.values()){cov_25lfnt0gs5().s[21]++;for(let a of i){cov_25lfnt0gs5().s[22]++;(cov_25lfnt0gs5().b[6][0]++,a?.datapointId)&&(cov_25lfnt0gs5().b[6][1]++,n.set(a.datapointId,a.value));}}cov_25lfnt0gs5().s[23]++;return n;}));}getCurrentValuePointsByDeviceIds(e){cov_25lfnt0gs5().f[11]++;let t=(cov_25lfnt0gs5().s[24]++,Array.from(new Set(e.filter(i=>{cov_25lfnt0gs5().f[12]++;cov_25lfnt0gs5().s[25]++;return typeof i=="string";}).map(i=>{cov_25lfnt0gs5().f[13]++;cov_25lfnt0gs5().s[26]++;return i.trim();}).filter(i=>{cov_25lfnt0gs5().f[14]++;cov_25lfnt0gs5().s[27]++;return i.length>0;}))));cov_25lfnt0gs5().s[28]++;if(t.length===0){cov_25lfnt0gs5().b[7][0]++;cov_25lfnt0gs5().s[29]++;return f(new Map());}else{cov_25lfnt0gs5().b[7][1]++;}let n=(cov_25lfnt0gs5().s[30]++,t.map(i=>{cov_25lfnt0gs5().f[15]++;cov_25lfnt0gs5().s[31]++;return this.http.get(`${this.deviceEndpoint}/${encodeURIComponent(i)}/value`).pipe(g(()=>{cov_25lfnt0gs5().f[16]++;cov_25lfnt0gs5().s[32]++;return f({deviceId:i,values:[]});}));}));cov_25lfnt0gs5().s[33]++;return z(n).pipe(m(i=>{cov_25lfnt0gs5().f[17]++;let a=(cov_25lfnt0gs5().s[34]++,new Map());cov_25lfnt0gs5().s[35]++;for(let c of i){let u=(cov_25lfnt0gs5().s[36]++,typeof c?.deviceId=="string"?(cov_25lfnt0gs5().b[8][0]++,c.deviceId):(cov_25lfnt0gs5().b[8][1]++,""));cov_25lfnt0gs5().s[37]++;(cov_25lfnt0gs5().b[9][0]++,u.trim())&&(cov_25lfnt0gs5().b[9][1]++,a.set(u,((cov_25lfnt0gs5().b[10][0]++,c.values)??(cov_25lfnt0gs5().b[10][1]++,[])).filter(x=>{cov_25lfnt0gs5().f[18]++;cov_25lfnt0gs5().s[38]++;return(cov_25lfnt0gs5().b[11][0]++,typeof x?.datapointId=="string")&&(cov_25lfnt0gs5().b[11][1]++,typeof x?.name=="string");})));}cov_25lfnt0gs5().s[39]++;return a;}));}resolveActivePlantId(){cov_25lfnt0gs5().f[19]++;let e=(cov_25lfnt0gs5().s[40]++,this.getActivePlantId());cov_25lfnt0gs5().s[41]++;return e?(cov_25lfnt0gs5().b[12][0]++,f(e)):(cov_25lfnt0gs5().b[12][1]++,this.fetchAllPlants().pipe(m(t=>{cov_25lfnt0gs5().f[20]++;cov_25lfnt0gs5().s[42]++;return(cov_25lfnt0gs5().b[13][0]++,t[0]?.id)??(cov_25lfnt0gs5().b[13][1]++,null);}),_(t=>{cov_25lfnt0gs5().f[21]++;cov_25lfnt0gs5().s[43]++;return t?(cov_25lfnt0gs5().b[14][0]++,this.setActivePlantId(t),f(t)):(cov_25lfnt0gs5().b[14][1]++,F(()=>{cov_25lfnt0gs5().f[22]++;cov_25lfnt0gs5().s[44]++;return new Error("No plants available");}));})));}fetchPlantById(e){cov_25lfnt0gs5().f[23]++;cov_25lfnt0gs5().s[45]++;return this.http.get(`${this.plantEndpoint}?plantid=${encodeURIComponent(e)}`);}fetchAllPlants(){cov_25lfnt0gs5().f[24]++;cov_25lfnt0gs5().s[46]++;return this.http.get(`${this.plantEndpoint}/all`).pipe(m(e=>{cov_25lfnt0gs5().f[25]++;cov_25lfnt0gs5().s[47]++;return Array.isArray(e)?(cov_25lfnt0gs5().b[15][0]++,e):(cov_25lfnt0gs5().b[15][1]++,[]);}),g(()=>{cov_25lfnt0gs5().f[26]++;cov_25lfnt0gs5().s[48]++;return f([]);}));}getActivePlantId(){cov_25lfnt0gs5().f[27]++;let e=(cov_25lfnt0gs5().s[49]++,globalThis.localStorage);cov_25lfnt0gs5().s[50]++;if((cov_25lfnt0gs5().b[17][0]++,e)&&(cov_25lfnt0gs5().b[17][1]++,typeof e.getItem=="function")){cov_25lfnt0gs5().b[16][0]++;let t=(cov_25lfnt0gs5().s[51]++,e.getItem("activePlantId"));cov_25lfnt0gs5().s[52]++;return t?.trim()?(cov_25lfnt0gs5().b[18][0]++,t):(cov_25lfnt0gs5().b[18][1]++,null);}else{cov_25lfnt0gs5().b[16][1]++;}cov_25lfnt0gs5().s[53]++;return null;}setActivePlantId(e){cov_25lfnt0gs5().f[28]++;let t=(cov_25lfnt0gs5().s[54]++,globalThis.localStorage);cov_25lfnt0gs5().s[55]++;(cov_25lfnt0gs5().b[19][0]++,!t)||(cov_25lfnt0gs5().b[19][1]++,typeof t.setItem!="function")||(cov_25lfnt0gs5().b[19][2]++,t.setItem("activePlantId",e));}mapRoomFromPlant(e,t){cov_25lfnt0gs5().f[29]++;let n=(cov_25lfnt0gs5().s[56]++,e.rooms.find(i=>{cov_25lfnt0gs5().f[30]++;cov_25lfnt0gs5().s[57]++;return i.id===t;}));cov_25lfnt0gs5().s[58]++;if(!n){cov_25lfnt0gs5().b[20][0]++;cov_25lfnt0gs5().s[59]++;throw new Error(`Room ${t} not found in plant ${e.id}`);}else{cov_25lfnt0gs5().b[20][1]++;}cov_25lfnt0gs5().s[60]++;return{id:n.id,name:n.name,hasActiveAlarm:!1,devices:n.devices.map(i=>{cov_25lfnt0gs5().f[31]++;let a=(cov_25lfnt0gs5().s[61]++,this.mapDatapoints(i.datapoints));cov_25lfnt0gs5().s[62]++;return{id:i.id,name:i.name,type:A({rawType:i.type,rawSubType:i.subType,rawName:i.name,sfeTypes:a.map(c=>{cov_25lfnt0gs5().f[32]++;cov_25lfnt0gs5().s[63]++;return c.sfeType;})}),status:i.type?(cov_25lfnt0gs5().b[21][0]++,"ONLINE"):(cov_25lfnt0gs5().b[21][1]++,"UNKNOWN"),actions:[],datapoints:a};})};}mapDatapoints(e){cov_25lfnt0gs5().f[33]++;cov_25lfnt0gs5().s[64]++;return((cov_25lfnt0gs5().b[22][0]++,e)??(cov_25lfnt0gs5().b[22][1]++,[])).map(t=>{cov_25lfnt0gs5().f[34]++;cov_25lfnt0gs5().s[65]++;return{id:t.id,name:t.name,readable:t.readable,writable:t.writable,valueType:t.valueType,enum:Array.isArray(t.enum)?(cov_25lfnt0gs5().b[23][0]++,t.enum):(cov_25lfnt0gs5().b[23][1]++,[]),sfeType:(cov_25lfnt0gs5().b[24][0]++,t.sfeType)??(cov_25lfnt0gs5().b[24][1]++,"")};});}mapWritableEndpointRows(e){cov_25lfnt0gs5().f[35]++;let t=(cov_25lfnt0gs5().s[66]++,[]);cov_25lfnt0gs5().s[67]++;for(let n of e.rooms){let i=(cov_25lfnt0gs5().s[68]++,this.deduplicateRoomDevices(n.devices.filter(a=>{cov_25lfnt0gs5().f[36]++;cov_25lfnt0gs5().s[69]++;return!this.isEnergyMeasureDevice(a.type,a.subType);})));cov_25lfnt0gs5().s[70]++;for(let a of i){let c=(cov_25lfnt0gs5().s[71]++,this.mapDatapoints(a.datapoints)),u=(cov_25lfnt0gs5().s[72]++,A({rawType:a.type,rawSubType:a.subType,rawName:a.name,sfeTypes:c.map(b=>{cov_25lfnt0gs5().f[37]++;cov_25lfnt0gs5().s[73]++;return b.sfeType;})})),x=(cov_25lfnt0gs5().s[74]++,c.filter(b=>{cov_25lfnt0gs5().f[38]++;cov_25lfnt0gs5().s[75]++;return(cov_25lfnt0gs5().b[25][0]++,b.writable)&&(cov_25lfnt0gs5().b[25][1]++,b.enum.length>0);}));cov_25lfnt0gs5().s[76]++;for(let b of x){cov_25lfnt0gs5().s[77]++;t.push({roomId:n.id,roomName:n.name,deviceId:a.id,deviceName:a.name,deviceType:u,datapointId:b.id,datapointName:b.name,datapointSfeType:b.sfeType,enumValues:b.enum});}}}cov_25lfnt0gs5().s[78]++;return t;}deduplicateRoomDevices(e){cov_25lfnt0gs5().f[39]++;let t=(cov_25lfnt0gs5().s[79]++,new Map());cov_25lfnt0gs5().s[80]++;for(let n of e){let i=(cov_25lfnt0gs5().s[81]++,this.normalizeDeviceName(n.name)),a=(cov_25lfnt0gs5().s[82]++,t.get(i));cov_25lfnt0gs5().s[83]++;((cov_25lfnt0gs5().b[26][0]++,!a)||(cov_25lfnt0gs5().b[26][1]++,this.getDevicePriorityScore(n)>this.getDevicePriorityScore(a)))&&(cov_25lfnt0gs5().b[26][2]++,t.set(i,n));}cov_25lfnt0gs5().s[84]++;return Array.from(t.values());}normalizeDeviceName(e){cov_25lfnt0gs5().f[40]++;cov_25lfnt0gs5().s[85]++;return e.trim().toLowerCase();}getDevicePriorityScore(e){cov_25lfnt0gs5().f[41]++;let t=(cov_25lfnt0gs5().s[86]++,(cov_25lfnt0gs5().b[27][0]++,e.type?.toUpperCase())??(cov_25lfnt0gs5().b[27][1]++,"")),n=(cov_25lfnt0gs5().s[87]++,(cov_25lfnt0gs5().b[28][0]++,e.subType?.toUpperCase())??(cov_25lfnt0gs5().b[28][1]++,"")),i=(cov_25lfnt0gs5().s[88]++,0);cov_25lfnt0gs5().s[89]++;return(cov_25lfnt0gs5().b[29][0]++,t.includes("RADARDETECTOR"))&&(cov_25lfnt0gs5().b[29][1]++,i+=100),(cov_25lfnt0gs5().b[30][0]++,n==="SF_ACCESS")&&(cov_25lfnt0gs5().b[30][1]++,i+=60),(cov_25lfnt0gs5().b[31][0]++,t==="SS_AUTOMATION_ONOFF")&&(cov_25lfnt0gs5().b[31][1]++,i-=20),i+=(cov_25lfnt0gs5().b[32][0]++,e.datapoints?.length)??(cov_25lfnt0gs5().b[32][1]++,0),i;}isEnergyMeasureDevice(e,t){cov_25lfnt0gs5().f[42]++;let n=(cov_25lfnt0gs5().s[90]++,(cov_25lfnt0gs5().b[33][0]++,e?.toUpperCase())??(cov_25lfnt0gs5().b[33][1]++,"")),i=(cov_25lfnt0gs5().s[91]++,(cov_25lfnt0gs5().b[34][0]++,t?.toUpperCase())??(cov_25lfnt0gs5().b[34][1]++,""));cov_25lfnt0gs5().s[92]++;return(cov_25lfnt0gs5().b[35][0]++,n.startsWith("SS_ENERGY_MEASURE"))||(cov_25lfnt0gs5().b[35][1]++,i==="SF_ENERGY");}static ɵfac=(cov_25lfnt0gs5().s[93]++,function(t){cov_25lfnt0gs5().f[43]++;cov_25lfnt0gs5().s[94]++;return new((cov_25lfnt0gs5().b[36][0]++,t)||(cov_25lfnt0gs5().b[36][1]++,o))();});static ɵprov=(cov_25lfnt0gs5().s[95]++,G({token:o,factory:o.ɵfac,providedIn:"root"}));}cov_25lfnt0gs5().s[96]++;return o;})());function le(o,p){cov_25lfnt0gs5().f[44]++;cov_25lfnt0gs5().s[97]++;if((cov_25lfnt0gs5().b[38][0]++,o&1)&&(cov_25lfnt0gs5().b[38][1]++,l(0,"p",0),s(1),r()),o&2){cov_25lfnt0gs5().b[37][0]++;let e=(cov_25lfnt0gs5().s[98]++,v());cov_25lfnt0gs5().s[99]++;d(),h(e.loadError);}else{cov_25lfnt0gs5().b[37][1]++;}}function se(o,p){cov_25lfnt0gs5().f[45]++;cov_25lfnt0gs5().s[100]++;(cov_25lfnt0gs5().b[39][0]++,o&1)&&(cov_25lfnt0gs5().b[39][1]++,l(0,"p",1),s(1,"Nessun endpoint scrivibile disponibile per l'appartamento selezionato."),r());}function de(o,p){cov_25lfnt0gs5().f[46]++;cov_25lfnt0gs5().s[101]++;if((cov_25lfnt0gs5().b[41][0]++,o&1)&&(cov_25lfnt0gs5().b[41][1]++,l(0,"option",13),s(1),r()),o&2){cov_25lfnt0gs5().b[40][0]++;let e=(cov_25lfnt0gs5().s[102]++,p.$implicit);cov_25lfnt0gs5().s[103]++;S("value",e),d(),h(e);}else{cov_25lfnt0gs5().b[40][1]++;}}function ce(o,p){cov_25lfnt0gs5().f[47]++;cov_25lfnt0gs5().s[104]++;if((cov_25lfnt0gs5().b[43][0]++,o&1)&&(cov_25lfnt0gs5().b[43][1]++,l(0,"span",17),s(1),r()),o&2){cov_25lfnt0gs5().b[42][0]++;let e=(cov_25lfnt0gs5().s[105]++,p);cov_25lfnt0gs5().s[106]++;J("endpoint-table__feedback-overlay--success",e.type==="success")("endpoint-table__feedback-overlay--error",e.type==="error"),d(),B(" ",e.message," ");}else{cov_25lfnt0gs5().b[42][1]++;}}function pe(o,p){cov_25lfnt0gs5().f[48]++;cov_25lfnt0gs5().s[107]++;if(o&1){cov_25lfnt0gs5().b[44][0]++;let e=(cov_25lfnt0gs5().s[108]++,H());cov_25lfnt0gs5().s[109]++;l(0,"tr")(1,"td")(2,"div",9)(3,"span"),s(4),r(),l(5,"span",10),s(6),r()()(),l(7,"td"),s(8),r(),l(9,"td"),s(10),r(),l(11,"td")(12,"span",11),s(13),r()(),l(14,"td")(15,"select",12),V("change",function(n){cov_25lfnt0gs5().f[49]++;let i=(cov_25lfnt0gs5().s[110]++,P(e).$implicit),a=(cov_25lfnt0gs5().s[111]++,v(4));cov_25lfnt0gs5().s[112]++;return I(a.onSelectionChange(i,n.target.value));}),R(16,de,2,2,"option",13,Y),r()(),l(18,"td")(19,"div",14)(20,"button",15),V("click",function(){cov_25lfnt0gs5().f[50]++;let n=(cov_25lfnt0gs5().s[113]++,P(e).$implicit),i=(cov_25lfnt0gs5().s[114]++,v(4));cov_25lfnt0gs5().s[115]++;return I(i.onWriteRow(n));}),s(21," Scrivi "),r(),E(22,ce,2,5,"span",16),r()()();}else{cov_25lfnt0gs5().b[44][1]++;}cov_25lfnt0gs5().s[116]++;if(o&2){cov_25lfnt0gs5().b[45][0]++;let e,t=(cov_25lfnt0gs5().s[117]++,p.$implicit),n=(cov_25lfnt0gs5().s[118]++,v(4));cov_25lfnt0gs5().s[119]++;d(4),h(t.deviceName),d(2),B("ID ",t.deviceId),d(2),h(n.getTypeLabel(t.deviceType)),d(),k("title",t.datapointName),d(),h(n.getEndpointLabel(t)),d(3),h(n.getCurrentValue(t)),d(2),S("value",n.getSelectedValue(t))("disabled",n.isRowExecuting(t)),d(),T(t.enumValues),d(4),S("disabled",n.isRowExecuting(t)),d(2),C((e=n.getRowFeedback(t))?(cov_25lfnt0gs5().b[46][0]++,22):(cov_25lfnt0gs5().b[46][1]++,-1),e);}else{cov_25lfnt0gs5().b[45][1]++;}}function me(o,p){cov_25lfnt0gs5().f[51]++;cov_25lfnt0gs5().s[120]++;if((cov_25lfnt0gs5().b[48][0]++,o&1)&&(cov_25lfnt0gs5().b[48][1]++,l(0,"section",3)(1,"header",4)(2,"div")(3,"p",5),s(4,"Stanza"),r(),l(5,"h3"),s(6),r()()(),l(7,"div",6)(8,"table",7)(9,"thead")(10,"tr")(11,"th",8),s(12,"Dispositivo"),r(),l(13,"th",8),s(14,"Tipo"),r(),l(15,"th",8),s(16,"Endpoint"),r(),l(17,"th",8),s(18,"Stato attuale"),r(),l(19,"th",8),s(20,"Valore"),r(),l(21,"th",8),s(22,"Azione"),r()()(),l(23,"tbody"),R(24,pe,23,10,"tr",null,M().trackByRow,!0),r()()()()),o&2){cov_25lfnt0gs5().b[47][0]++;let e=(cov_25lfnt0gs5().s[121]++,p.$implicit);cov_25lfnt0gs5().s[122]++;d(6),h(e.roomName),d(2),k("aria-label",Q("Tabella endpoint ",e.roomName)),d(16),T(e.rows);}else{cov_25lfnt0gs5().b[47][1]++;}}function ue(o,p){cov_25lfnt0gs5().f[52]++;cov_25lfnt0gs5().s[123]++;if((cov_25lfnt0gs5().b[50][0]++,o&1)&&(cov_25lfnt0gs5().b[50][1]++,l(0,"div",2),R(1,me,26,3,"section",3,M().trackByGroup,!0),r()),o&2){cov_25lfnt0gs5().b[49][0]++;let e=(cov_25lfnt0gs5().s[124]++,v());cov_25lfnt0gs5().s[125]++;d(),T(e);}else{cov_25lfnt0gs5().b[49][1]++;}}function fe(o,p){cov_25lfnt0gs5().f[53]++;cov_25lfnt0gs5().s[126]++;(cov_25lfnt0gs5().b[51][0]++,o&1)&&(cov_25lfnt0gs5().b[51][1]++,E(0,se,2,0,"p",1)(1,ue,3,0,"div",2)),(cov_25lfnt0gs5().b[52][0]++,o&2)&&(cov_25lfnt0gs5().b[52][1]++,C(p.length===0?(cov_25lfnt0gs5().b[53][0]++,0):(cov_25lfnt0gs5().b[53][1]++,1)));}function be(o,p){cov_25lfnt0gs5().f[54]++;cov_25lfnt0gs5().s[127]++;(cov_25lfnt0gs5().b[54][0]++,o&1)&&(cov_25lfnt0gs5().b[54][1]++,l(0,"p",1),s(1,"Caricamento endpoint..."),r());}var Ie=(cov_25lfnt0gs5().s[128]++,(()=>{cov_25lfnt0gs5().f[55]++;class o{static CURRENT_VALUES_POLL_MS=(cov_25lfnt0gs5().s[129]++,15e3);deviceApi=(cov_25lfnt0gs5().s[130]++,w(ae));refresh$=(cov_25lfnt0gs5().s[131]++,new D());selectedValuesByRow=(cov_25lfnt0gs5().s[132]++,new Map());executingRows=(cov_25lfnt0gs5().s[133]++,new Set());feedbackByRow=(cov_25lfnt0gs5().s[134]++,new Map());feedbackTimerByRow=(cov_25lfnt0gs5().s[135]++,new Map());currentValuesByDevice=(cov_25lfnt0gs5().s[136]++,new Map());latestRows=(cov_25lfnt0gs5().s[137]++,[]);activePlantChangeSubscription=(cov_25lfnt0gs5().s[138]++,null);currentValuesPollingSubscription=(cov_25lfnt0gs5().s[139]++,null);roomGroups$=(cov_25lfnt0gs5().s[140]++,this.refresh$.pipe(W(void 0),_(()=>{cov_25lfnt0gs5().f[56]++;cov_25lfnt0gs5().s[141]++;return this.deviceApi.getWritableEndpointRows().pipe(y(()=>{cov_25lfnt0gs5().f[57]++;cov_25lfnt0gs5().s[142]++;this.loadError="";}),y(e=>{cov_25lfnt0gs5().f[58]++;cov_25lfnt0gs5().s[143]++;this.latestRows=e,this.syncSelectedValues(e);}),_(e=>{cov_25lfnt0gs5().f[59]++;cov_25lfnt0gs5().s[144]++;return this.loadCurrentValues(e).pipe(m(()=>{cov_25lfnt0gs5().f[60]++;cov_25lfnt0gs5().s[145]++;return this.groupRowsByRoom(e);}));}));}),g(()=>{cov_25lfnt0gs5().f[61]++;cov_25lfnt0gs5().s[146]++;return this.loadError="Impossibile caricare i dispositivi con endpoint.",f([]);})));loadError=(cov_25lfnt0gs5().s[147]++,"");ngOnInit(){cov_25lfnt0gs5().f[62]++;cov_25lfnt0gs5().s[148]++;this.subscribeToActivePlantChanges(),this.startCurrentValuesPolling();}ngOnDestroy(){cov_25lfnt0gs5().f[63]++;cov_25lfnt0gs5().s[149]++;this.activePlantChangeSubscription?.unsubscribe(),this.currentValuesPollingSubscription?.unsubscribe(),this.clearAllRowFeedback();}trackByGroup(e,t){cov_25lfnt0gs5().f[64]++;cov_25lfnt0gs5().s[150]++;return t.roomId;}trackByRow(e,t){cov_25lfnt0gs5().f[65]++;cov_25lfnt0gs5().s[151]++;return this.buildRowKey(t);}getTypeLabel(e){cov_25lfnt0gs5().f[66]++;cov_25lfnt0gs5().s[152]++;return ie(e);}getEndpointLabel(e){cov_25lfnt0gs5().f[67]++;cov_25lfnt0gs5().s[153]++;return oe(e.datapointSfeType);}getCurrentValue(e){cov_25lfnt0gs5().f[68]++;let t=(cov_25lfnt0gs5().s[154]++,(cov_25lfnt0gs5().b[55][0]++,this.currentValuesByDevice.get(e.deviceId))??(cov_25lfnt0gs5().b[55][1]++,[])),n=(cov_25lfnt0gs5().s[155]++,t.find(u=>{cov_25lfnt0gs5().f[69]++;cov_25lfnt0gs5().s[156]++;return u.datapointId===e.datapointId;}));cov_25lfnt0gs5().s[157]++;if((cov_25lfnt0gs5().b[57][0]++,n?.value!==void 0)&&(cov_25lfnt0gs5().b[57][1]++,n?.value!==null)){cov_25lfnt0gs5().b[56][0]++;cov_25lfnt0gs5().s[158]++;return String(n.value);}else{cov_25lfnt0gs5().b[56][1]++;}let i=(cov_25lfnt0gs5().s[159]++,this.getSemanticCandidates(e)),a=(cov_25lfnt0gs5().s[160]++,t.find(u=>{cov_25lfnt0gs5().f[70]++;cov_25lfnt0gs5().s[161]++;return i.has(this.normalizeKey(u.name));}));cov_25lfnt0gs5().s[162]++;if((cov_25lfnt0gs5().b[59][0]++,a?.value!==void 0)&&(cov_25lfnt0gs5().b[59][1]++,a?.value!==null)){cov_25lfnt0gs5().b[58][0]++;cov_25lfnt0gs5().s[163]++;return String(a.value);}else{cov_25lfnt0gs5().b[58][1]++;}let c=(cov_25lfnt0gs5().s[164]++,t.find(u=>{cov_25lfnt0gs5().f[71]++;cov_25lfnt0gs5().s[165]++;return(cov_25lfnt0gs5().b[60][0]++,u.value!==void 0)&&(cov_25lfnt0gs5().b[60][1]++,u.value!==null);}));cov_25lfnt0gs5().s[166]++;return c?(cov_25lfnt0gs5().b[61][0]++,String(c.value)):(cov_25lfnt0gs5().b[61][1]++,"-");}getSelectedValue(e){cov_25lfnt0gs5().f[72]++;let t=(cov_25lfnt0gs5().s[167]++,this.buildRowKey(e)),n=(cov_25lfnt0gs5().s[168]++,this.selectedValuesByRow.get(t));cov_25lfnt0gs5().s[169]++;return(cov_25lfnt0gs5().b[62][0]++,n)||((cov_25lfnt0gs5().b[62][1]++,e.enumValues[0])??(cov_25lfnt0gs5().b[62][2]++,""));}onSelectionChange(e,t){cov_25lfnt0gs5().f[73]++;cov_25lfnt0gs5().s[170]++;this.selectedValuesByRow.set(this.buildRowKey(e),t);}isRowExecuting(e){cov_25lfnt0gs5().f[74]++;cov_25lfnt0gs5().s[171]++;return this.executingRows.has(this.buildRowKey(e));}getRowFeedback(e){cov_25lfnt0gs5().f[75]++;cov_25lfnt0gs5().s[172]++;return(cov_25lfnt0gs5().b[63][0]++,this.feedbackByRow.get(this.buildRowKey(e)))??(cov_25lfnt0gs5().b[63][1]++,null);}onWriteRow(e){cov_25lfnt0gs5().f[76]++;let t=(cov_25lfnt0gs5().s[173]++,this.buildRowKey(e));cov_25lfnt0gs5().s[174]++;if(this.executingRows.has(t)){cov_25lfnt0gs5().b[64][0]++;cov_25lfnt0gs5().s[175]++;return;}else{cov_25lfnt0gs5().b[64][1]++;}cov_25lfnt0gs5().s[176]++;this.clearRowFeedback(t);let n=(cov_25lfnt0gs5().s[177]++,this.getSelectedValue(e));cov_25lfnt0gs5().s[178]++;(cov_25lfnt0gs5().b[65][0]++,n)&&(cov_25lfnt0gs5().b[65][1]++,this.executingRows.add(t),this.deviceApi.writeDatapointValue({datapointId:e.datapointId,value:n}).pipe(y(()=>{cov_25lfnt0gs5().f[77]++;cov_25lfnt0gs5().s[179]++;this.setRowFeedback(t,"success","Comando inviato correttamente."),this.refresh$.next();}),g(()=>{cov_25lfnt0gs5().f[78]++;cov_25lfnt0gs5().s[180]++;return this.setRowFeedback(t,"error","Errore invio comando."),O;}),K(()=>{cov_25lfnt0gs5().f[79]++;cov_25lfnt0gs5().s[181]++;this.executingRows.delete(t);})).subscribe());}groupRowsByRoom(e){cov_25lfnt0gs5().f[80]++;let t=(cov_25lfnt0gs5().s[182]++,new Map());cov_25lfnt0gs5().s[183]++;for(let n of e){let i=(cov_25lfnt0gs5().s[184]++,t.get(n.roomId));cov_25lfnt0gs5().s[185]++;if(i){cov_25lfnt0gs5().b[66][0]++;cov_25lfnt0gs5().s[186]++;i.rows.push(n);cov_25lfnt0gs5().s[187]++;continue;}else{cov_25lfnt0gs5().b[66][1]++;}cov_25lfnt0gs5().s[188]++;t.set(n.roomId,{roomId:n.roomId,roomName:n.roomName,rows:[n]});}cov_25lfnt0gs5().s[189]++;return Array.from(t.values());}buildRowKey(e){cov_25lfnt0gs5().f[81]++;cov_25lfnt0gs5().s[190]++;return`${e.roomId}::${e.deviceId}::${e.datapointId}`;}clearRowFeedback(e){cov_25lfnt0gs5().f[82]++;cov_25lfnt0gs5().s[191]++;this.feedbackByRow.delete(e);let t=(cov_25lfnt0gs5().s[192]++,this.feedbackTimerByRow.get(e));cov_25lfnt0gs5().s[193]++;(cov_25lfnt0gs5().b[67][0]++,t)&&(cov_25lfnt0gs5().b[67][1]++,clearTimeout(t),this.feedbackTimerByRow.delete(e));}setRowFeedback(e,t,n){cov_25lfnt0gs5().f[83]++;cov_25lfnt0gs5().s[194]++;this.clearRowFeedback(e),this.feedbackByRow.set(e,{type:t,message:n});let i=(cov_25lfnt0gs5().s[195]++,setTimeout(()=>{cov_25lfnt0gs5().f[84]++;cov_25lfnt0gs5().s[196]++;this.feedbackByRow.delete(e),this.feedbackTimerByRow.delete(e);},5e3));cov_25lfnt0gs5().s[197]++;this.feedbackTimerByRow.set(e,i);}subscribeToActivePlantChanges(){cov_25lfnt0gs5().f[85]++;cov_25lfnt0gs5().s[198]++;(cov_25lfnt0gs5().b[68][0]++,typeof globalThis.addEventListener=="function")&&(cov_25lfnt0gs5().b[68][1]++,this.activePlantChangeSubscription=$(globalThis,"active-plant-changed").pipe(m(e=>{cov_25lfnt0gs5().f[86]++;cov_25lfnt0gs5().s[199]++;return(cov_25lfnt0gs5().b[69][0]++,e.detail?.plantId)??(cov_25lfnt0gs5().b[69][1]++,"");}),U(e=>{cov_25lfnt0gs5().f[87]++;cov_25lfnt0gs5().s[200]++;return e.length>0;})).subscribe(()=>{cov_25lfnt0gs5().f[88]++;cov_25lfnt0gs5().s[201]++;this.resetTransientState(),this.refresh$.next();}));}startCurrentValuesPolling(){cov_25lfnt0gs5().f[89]++;cov_25lfnt0gs5().s[202]++;this.currentValuesPollingSubscription=L(o.CURRENT_VALUES_POLL_MS).pipe(_(()=>{cov_25lfnt0gs5().f[90]++;cov_25lfnt0gs5().s[203]++;return this.loadCurrentValues(this.latestRows);})).subscribe();}loadCurrentValues(e){cov_25lfnt0gs5().f[91]++;let t=(cov_25lfnt0gs5().s[204]++,Array.from(new Set(e.map(n=>{cov_25lfnt0gs5().f[92]++;cov_25lfnt0gs5().s[205]++;return n.deviceId;}).filter(n=>{cov_25lfnt0gs5().f[93]++;cov_25lfnt0gs5().s[206]++;return n.trim().length>0;}))));cov_25lfnt0gs5().s[207]++;return t.length===0?(cov_25lfnt0gs5().b[70][0]++,this.currentValuesByDevice.clear(),f(void 0)):(cov_25lfnt0gs5().b[70][1]++,this.deviceApi.getCurrentValuePointsByDeviceIds(t).pipe(y(n=>{cov_25lfnt0gs5().f[94]++;cov_25lfnt0gs5().s[208]++;this.currentValuesByDevice=n;}),m(()=>{cov_25lfnt0gs5().f[95]++;}),g(()=>{cov_25lfnt0gs5().f[96]++;cov_25lfnt0gs5().s[209]++;return this.currentValuesByDevice.clear(),f(void 0);})));}getSemanticCandidates(e){cov_25lfnt0gs5().f[97]++;let t=(cov_25lfnt0gs5().s[210]++,this.normalizeKey((cov_25lfnt0gs5().b[71][0]++,e.datapointSfeType)||(cov_25lfnt0gs5().b[71][1]++,e.datapointName))),n=(cov_25lfnt0gs5().s[211]++,this.normalizeKey(e.datapointName)),i=(cov_25lfnt0gs5().s[212]++,this.convertCmdToState(t)),a=(cov_25lfnt0gs5().s[213]++,this.convertCmdToState(n));cov_25lfnt0gs5().s[214]++;return new Set([t,n,i,a].filter(c=>{cov_25lfnt0gs5().f[98]++;cov_25lfnt0gs5().s[215]++;return c.length>0;}));}convertCmdToState(e){cov_25lfnt0gs5().f[99]++;cov_25lfnt0gs5().s[216]++;return e.replaceAll("cmd","state");}normalizeKey(e){cov_25lfnt0gs5().f[100]++;cov_25lfnt0gs5().s[217]++;if(!e){cov_25lfnt0gs5().b[72][0]++;cov_25lfnt0gs5().s[218]++;return"";}else{cov_25lfnt0gs5().b[72][1]++;}let t=(cov_25lfnt0gs5().s[219]++,e.toLowerCase());cov_25lfnt0gs5().s[220]++;for(let n of[" ","_","-",".","/",":"]){cov_25lfnt0gs5().s[221]++;t=t.replaceAll(n,"");}cov_25lfnt0gs5().s[222]++;return t;}syncSelectedValues(e){cov_25lfnt0gs5().f[101]++;let t=(cov_25lfnt0gs5().s[223]++,new Set());cov_25lfnt0gs5().s[224]++;for(let n of e){let i=(cov_25lfnt0gs5().s[225]++,this.buildRowKey(n));cov_25lfnt0gs5().s[226]++;t.add(i),(cov_25lfnt0gs5().b[73][0]++,this.selectedValuesByRow.has(i))||(cov_25lfnt0gs5().b[73][1]++,this.selectedValuesByRow.set(i,(cov_25lfnt0gs5().b[74][0]++,n.enumValues[0])??(cov_25lfnt0gs5().b[74][1]++,"")));}cov_25lfnt0gs5().s[227]++;for(let n of this.selectedValuesByRow.keys()){cov_25lfnt0gs5().s[228]++;(cov_25lfnt0gs5().b[75][0]++,t.has(n))||(cov_25lfnt0gs5().b[75][1]++,this.selectedValuesByRow.delete(n));}}resetTransientState(){cov_25lfnt0gs5().f[102]++;cov_25lfnt0gs5().s[229]++;this.selectedValuesByRow.clear(),this.executingRows.clear(),this.clearAllRowFeedback(),this.currentValuesByDevice.clear(),this.latestRows=[],this.loadError="";}clearAllRowFeedback(){cov_25lfnt0gs5().f[103]++;cov_25lfnt0gs5().s[230]++;for(let e of this.feedbackTimerByRow.values()){cov_25lfnt0gs5().s[231]++;clearTimeout(e);}cov_25lfnt0gs5().s[232]++;this.feedbackTimerByRow.clear(),this.feedbackByRow.clear();}static ɵfac=(cov_25lfnt0gs5().s[233]++,function(t){cov_25lfnt0gs5().f[104]++;cov_25lfnt0gs5().s[234]++;return new((cov_25lfnt0gs5().b[76][0]++,t)||(cov_25lfnt0gs5().b[76][1]++,o))();});static ɵcmp=(cov_25lfnt0gs5().s[235]++,j({type:o,selectors:[["app-endpoint-table"]],decls:4,vars:4,consts:[["role","alert",1,"care-alert"],[1,"care-loading"],[1,"endpoint-table__groups"],[1,"endpoint-table__group"],[1,"endpoint-table__room-header"],[1,"endpoint-table__room-eyebrow"],[1,"endpoint-table__wrapper"],[1,"endpoint-table__table"],["scope","col"],[1,"endpoint-table__device-cell"],[1,"endpoint-table__device-meta"],[1,"endpoint-table__current-value"],[1,"care-select","endpoint-table__select",3,"change","value","disabled"],[3,"value"],[1,"endpoint-table__action-wrap"],["type","button",1,"endpoint-table__write-button",3,"click","disabled"],[1,"endpoint-table__feedback-overlay",3,"endpoint-table__feedback-overlay--success","endpoint-table__feedback-overlay--error"],[1,"endpoint-table__feedback-overlay"]],template:function(t,n){cov_25lfnt0gs5().f[105]++;cov_25lfnt0gs5().s[236]++;if((cov_25lfnt0gs5().b[78][0]++,t&1)&&(cov_25lfnt0gs5().b[78][1]++,E(0,le,2,1,"p",0),E(1,fe,2,1),X(2,"async"),q(3,be,2,0,"p",1)),t&2){cov_25lfnt0gs5().b[77][0]++;let i;cov_25lfnt0gs5().s[237]++;C(n.loadError?(cov_25lfnt0gs5().b[79][0]++,0):(cov_25lfnt0gs5().b[79][1]++,-1)),d(),C((i=Z(2,2,n.roomGroups$))?(cov_25lfnt0gs5().b[80][0]++,1):(cov_25lfnt0gs5().b[80][1]++,3),i);}else{cov_25lfnt0gs5().b[77][1]++;}},dependencies:[ee],styles:[`.endpoint-table__groups[_ngcontent-%COMP%]{display:grid;gap:1.35rem}.endpoint-table__group[_ngcontent-%COMP%]{overflow:hidden;border:1px solid #e2e8f0;border-radius:1rem;background:#fff;box-shadow:0 1px 2px #0f172a0f}.endpoint-table__room-header[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;gap:.7rem;margin-bottom:0;border-bottom:1px solid #f1f5f9;background:#fcd34d;padding:1rem 1.25rem}.endpoint-table__room-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%], .endpoint-table__room-eyebrow[_ngcontent-%COMP%]{margin:0}.endpoint-table__room-eyebrow[_ngcontent-%COMP%]{font-size:.72rem;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:#64748b}.endpoint-table__room-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{margin-top:.1rem;font-size:.95rem;font-family:var(--care-font-display);font-weight:700;line-height:1.25;color:#0f172a}.endpoint-table__wrapper[_ngcontent-%COMP%]{overflow-x:auto;padding:0;-webkit-overflow-scrolling:touch}.endpoint-table__table[_ngcontent-%COMP%]{width:100%;min-width:30rem;border-collapse:collapse}.endpoint-table__table[_ngcontent-%COMP%] thead[_ngcontent-%COMP%] th[_ngcontent-%COMP%]{text-align:left;font-size:.69rem;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:#94a3b8;padding:.75rem 1.25rem;border-bottom:1px solid #f1f5f9}.endpoint-table__table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] td[_ngcontent-%COMP%]{padding:.75rem 1.25rem;vertical-align:middle;border-bottom:1px solid #f8fafc;font-size:.94rem;color:#0f172a}.endpoint-table__device-cell[_ngcontent-%COMP%]{display:grid;gap:.14rem}.endpoint-table__device-meta[_ngcontent-%COMP%]{font-size:.76rem;color:#64748b;letter-spacing:.01em}.endpoint-table__select[_ngcontent-%COMP%]{min-width:10rem;font-size:1rem}.endpoint-table__current-value[_ngcontent-%COMP%]{display:inline-flex;min-width:3.5rem;justify-content:center;border-radius:999px;border:1px solid #e2e8f0;background:#f8fafc;padding:.16rem .55rem;font-size:.84rem;font-weight:700;color:#1f2937}.endpoint-table__write-button[_ngcontent-%COMP%]{min-height:2.35rem;border:1px solid rgba(217,119,6,.36);border-radius:.62rem;background:linear-gradient(120deg,#fcd34d,#fbbf24);color:#1f2937;font-size:.98rem;font-weight:700;padding:0 .9rem;cursor:pointer;box-shadow:0 8px 14px #f59e0b3d;transition:background-color .14s ease,border-color .14s ease}.endpoint-table__write-button[_ngcontent-%COMP%]:hover{background:#fef3c7bf;border-color:#f59e0b47}.endpoint-table__write-button[_ngcontent-%COMP%]:disabled{cursor:not-allowed;opacity:.7}.endpoint-table__action-wrap[_ngcontent-%COMP%]{position:relative;display:inline-flex;align-items:center}.endpoint-table__feedback-overlay[_ngcontent-%COMP%]{position:absolute;right:0;bottom:calc(100% + .45rem);transform:none;border-radius:999px;padding:.2rem .55rem;font-size:.82rem;font-weight:700;white-space:nowrap;text-align:center;line-height:1.2;box-shadow:0 8px 14px -10px #0f172a8c;z-index:2;pointer-events:none}.endpoint-table__feedback-overlay--success[_ngcontent-%COMP%]{border:1px solid #a7f3d0;background:#ecfdf5;color:#065f46}.endpoint-table__feedback-overlay--error[_ngcontent-%COMP%]{border:1px solid #fecdd3;background:#fff1f2;color:#be123c}@media(max-width:960px){.endpoint-table__table[_ngcontent-%COMP%]{min-width:32rem}} +/*# sourceMappingURL=endpoint-table.component-HIVOQXMV.css.map */`]}));}cov_25lfnt0gs5().s[238]++;return o;})());export{Ie as a};//# sourceMappingURL=chunk-4QFEXKFV.js.map +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJhZSIsImNvdl8yNWxmbnQwZ3M1IiwicyIsImYiLCJvIiwiaHR0cCIsInciLCJ0ZSIsImJhc2VVcmwiLCJuZSIsInBsYW50RW5kcG9pbnQiLCJkZXZpY2VFbmRwb2ludCIsImdldFdyaXRhYmxlRW5kcG9pbnRSb3dzIiwicmVzb2x2ZUFjdGl2ZVBsYW50SWQiLCJwaXBlIiwiXyIsImUiLCJmZXRjaFBsYW50QnlJZCIsIm0iLCJtYXBXcml0YWJsZUVuZHBvaW50Um93cyIsImdldFJvb20iLCJ0IiwibWFwUm9vbUZyb21QbGFudCIsIndyaXRlRGF0YXBvaW50VmFsdWUiLCJwb3N0IiwiTiIsIm4iLCJzdGF0dXNDb2RlIiwiYiIsImkiLCJtZXNzYWdlIiwidG9Mb3dlckNhc2UiLCJhIiwiYyIsImluY2x1ZGVzIiwiRXJyb3IiLCJnZXREYXRhcG9pbnRDdXJyZW50VmFsdWVzQnlEZXZpY2VJZHMiLCJnZXRDdXJyZW50VmFsdWVQb2ludHNCeURldmljZUlkcyIsIk1hcCIsInZhbHVlcyIsImRhdGFwb2ludElkIiwic2V0IiwidmFsdWUiLCJBcnJheSIsImZyb20iLCJTZXQiLCJmaWx0ZXIiLCJtYXAiLCJ0cmltIiwibGVuZ3RoIiwiZ2V0IiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiZyIsImRldmljZUlkIiwieiIsInUiLCJ4IiwibmFtZSIsImdldEFjdGl2ZVBsYW50SWQiLCJmZXRjaEFsbFBsYW50cyIsImlkIiwic2V0QWN0aXZlUGxhbnRJZCIsIkYiLCJpc0FycmF5IiwiZ2xvYmFsVGhpcyIsImxvY2FsU3RvcmFnZSIsImdldEl0ZW0iLCJzZXRJdGVtIiwicm9vbXMiLCJmaW5kIiwiaGFzQWN0aXZlQWxhcm0iLCJkZXZpY2VzIiwibWFwRGF0YXBvaW50cyIsImRhdGFwb2ludHMiLCJ0eXBlIiwiQSIsInJhd1R5cGUiLCJyYXdTdWJUeXBlIiwic3ViVHlwZSIsInJhd05hbWUiLCJzZmVUeXBlcyIsInNmZVR5cGUiLCJzdGF0dXMiLCJhY3Rpb25zIiwicmVhZGFibGUiLCJ3cml0YWJsZSIsInZhbHVlVHlwZSIsImVudW0iLCJkZWR1cGxpY2F0ZVJvb21EZXZpY2VzIiwiaXNFbmVyZ3lNZWFzdXJlRGV2aWNlIiwicHVzaCIsInJvb21JZCIsInJvb21OYW1lIiwiZGV2aWNlTmFtZSIsImRldmljZVR5cGUiLCJkYXRhcG9pbnROYW1lIiwiZGF0YXBvaW50U2ZlVHlwZSIsImVudW1WYWx1ZXMiLCJub3JtYWxpemVEZXZpY2VOYW1lIiwiZ2V0RGV2aWNlUHJpb3JpdHlTY29yZSIsInRvVXBwZXJDYXNlIiwic3RhcnRzV2l0aCIsIsm1ZmFjIiwiybVwcm92IiwiRyIsInRva2VuIiwiZmFjdG9yeSIsInByb3ZpZGVkSW4iLCJsZSIsInAiLCJsIiwiciIsInYiLCJkIiwiaCIsImxvYWRFcnJvciIsInNlIiwiZGUiLCIkaW1wbGljaXQiLCJTIiwiY2UiLCJKIiwiQiIsInBlIiwiSCIsIlYiLCJQIiwiSSIsIm9uU2VsZWN0aW9uQ2hhbmdlIiwidGFyZ2V0IiwiUiIsIlkiLCJvbldyaXRlUm93IiwiRSIsImdldFR5cGVMYWJlbCIsImsiLCJnZXRFbmRwb2ludExhYmVsIiwiZ2V0Q3VycmVudFZhbHVlIiwiZ2V0U2VsZWN0ZWRWYWx1ZSIsImlzUm93RXhlY3V0aW5nIiwiVCIsIkMiLCJnZXRSb3dGZWVkYmFjayIsIm1lIiwiTSIsInRyYWNrQnlSb3ciLCJRIiwicm93cyIsInVlIiwidHJhY2tCeUdyb3VwIiwiZmUiLCJiZSIsIkllIiwiQ1VSUkVOVF9WQUxVRVNfUE9MTF9NUyIsImRldmljZUFwaSIsInJlZnJlc2gkIiwiRCIsInNlbGVjdGVkVmFsdWVzQnlSb3ciLCJleGVjdXRpbmdSb3dzIiwiZmVlZGJhY2tCeVJvdyIsImZlZWRiYWNrVGltZXJCeVJvdyIsImN1cnJlbnRWYWx1ZXNCeURldmljZSIsImxhdGVzdFJvd3MiLCJhY3RpdmVQbGFudENoYW5nZVN1YnNjcmlwdGlvbiIsImN1cnJlbnRWYWx1ZXNQb2xsaW5nU3Vic2NyaXB0aW9uIiwicm9vbUdyb3VwcyQiLCJXIiwieSIsInN5bmNTZWxlY3RlZFZhbHVlcyIsImxvYWRDdXJyZW50VmFsdWVzIiwiZ3JvdXBSb3dzQnlSb29tIiwibmdPbkluaXQiLCJzdWJzY3JpYmVUb0FjdGl2ZVBsYW50Q2hhbmdlcyIsInN0YXJ0Q3VycmVudFZhbHVlc1BvbGxpbmciLCJuZ09uRGVzdHJveSIsInVuc3Vic2NyaWJlIiwiY2xlYXJBbGxSb3dGZWVkYmFjayIsImJ1aWxkUm93S2V5IiwiaWUiLCJvZSIsIlN0cmluZyIsImdldFNlbWFudGljQ2FuZGlkYXRlcyIsImhhcyIsIm5vcm1hbGl6ZUtleSIsImNsZWFyUm93RmVlZGJhY2siLCJhZGQiLCJzZXRSb3dGZWVkYmFjayIsIm5leHQiLCJPIiwiSyIsImRlbGV0ZSIsInN1YnNjcmliZSIsImNsZWFyVGltZW91dCIsInNldFRpbWVvdXQiLCJhZGRFdmVudExpc3RlbmVyIiwiJCIsImRldGFpbCIsInBsYW50SWQiLCJVIiwicmVzZXRUcmFuc2llbnRTdGF0ZSIsIkwiLCJjbGVhciIsImNvbnZlcnRDbWRUb1N0YXRlIiwicmVwbGFjZUFsbCIsImtleXMiLCLJtWNtcCIsImoiLCJzZWxlY3RvcnMiLCJkZWNscyIsInZhcnMiLCJjb25zdHMiLCJ0ZW1wbGF0ZSIsIlgiLCJxIiwiWiIsImRlcGVuZGVuY2llcyIsImVlIiwic3R5bGVzIl0sInNvdXJjZXMiOlsic3JjL2FwcC9mZWF0dXJlcy9kZXZpY2UtaW50ZXJhY3Rpb24vc2VydmljZXMvZGV2aWNlLWFwaS5zZXJ2aWNlLnRzIiwic3JjL2FwcC9mZWF0dXJlcy9kZXZpY2UtaW50ZXJhY3Rpb24vY29tcG9uZW50cy9lbmRwb2ludC10YWJsZS9lbmRwb2ludC10YWJsZS5jb21wb25lbnQudHMiLCJzcmMvYXBwL2ZlYXR1cmVzL2RldmljZS1pbnRlcmFjdGlvbi9jb21wb25lbnRzL2VuZHBvaW50LXRhYmxlL2VuZHBvaW50LXRhYmxlLmNvbXBvbmVudC5odG1sIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBJbmplY3RhYmxlLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG5cdE9ic2VydmFibGUsXG5cdGNhdGNoRXJyb3IsXG5cdGZvcmtKb2luLFxuXHRtYXAsXG5cdG9mLFxuXHRzd2l0Y2hNYXAsXG5cdHRocm93RXJyb3IsXG5cdHRpbWVvdXQsXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQVBJX0JBU0VfVVJMIH0gZnJvbSAnLi4vLi4vLi4vY29yZS90b2tlbnMvYXBpLWJhc2UtdXJsLnRva2VuJztcbmltcG9ydCB7IERhdGFwb2ludCB9IGZyb20gJy4uLy4uL2FwYXJ0bWVudC1tb25pdG9yL21vZGVscy9kYXRhcG9pbnQubW9kZWwnO1xuaW1wb3J0IHtcblx0UGxhbnREYXRhcG9pbnREdG8sXG5cdFBsYW50RGV2aWNlRHRvLFxuXHRQbGFudER0byxcbn0gZnJvbSAnLi4vLi4vYXBhcnRtZW50LW1vbml0b3IvbW9kZWxzL3BsYW50LXJlc3BvbnNlLm1vZGVsJztcbmltcG9ydCB7IFJvb20gfSBmcm9tICcuLi8uLi9hcGFydG1lbnQtbW9uaXRvci9tb2RlbHMvcm9vbS5tb2RlbCc7XG5pbXBvcnQgeyBXcml0YWJsZUVuZHBvaW50Um93IH0gZnJvbSAnLi4vbW9kZWxzL3dyaXRhYmxlLWVuZHBvaW50LXJvdy5tb2RlbCc7XG5pbXBvcnQgdHlwZSB7XG5cdERldmljZVZhbHVlRHRvLFxuXHREZXZpY2VWYWx1ZVBvaW50RHRvLFxuXHRXcml0ZURhdGFwb2ludER0byxcbn0gZnJvbSAnLi4vbW9kZWxzL3dyaXRlLWRhdGFwb2ludC1yZXF1ZXN0Lm1vZGVsJztcbmltcG9ydCB7IHJlc29sdmVEZXZpY2VUeXBlIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL21vZGVscy9kZXZpY2UtdGF4b25vbXknO1xuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIERldmljZUFwaVNlcnZpY2Uge1xuXHRwcml2YXRlIHJlYWRvbmx5IGh0dHAgPSBpbmplY3QoSHR0cENsaWVudCk7XG5cdHByaXZhdGUgcmVhZG9ubHkgYmFzZVVybDogc3RyaW5nID0gaW5qZWN0KEFQSV9CQVNFX1VSTCk7XG5cdHByaXZhdGUgcmVhZG9ubHkgcGxhbnRFbmRwb2ludCA9IGAke3RoaXMuYmFzZVVybH0vcGxhbnRgO1xuXHRwcml2YXRlIHJlYWRvbmx5IGRldmljZUVuZHBvaW50ID0gYCR7dGhpcy5iYXNlVXJsfS9kZXZpY2VgO1xuXG5cdHB1YmxpYyBnZXRXcml0YWJsZUVuZHBvaW50Um93cygpOiBPYnNlcnZhYmxlPFdyaXRhYmxlRW5kcG9pbnRSb3dbXT4ge1xuXHRcdHJldHVybiB0aGlzLnJlc29sdmVBY3RpdmVQbGFudElkKCkucGlwZShcblx0XHRcdHN3aXRjaE1hcCgocGxhbnRJZCkgPT4gdGhpcy5mZXRjaFBsYW50QnlJZChwbGFudElkKSksXG5cdFx0XHRtYXAoKHBsYW50KSA9PiB0aGlzLm1hcFdyaXRhYmxlRW5kcG9pbnRSb3dzKHBsYW50KSksXG5cdFx0KTtcblx0fVxuXG5cdHB1YmxpYyBnZXRSb29tKHJvb21JZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxSb29tPiB7XG5cdFx0cmV0dXJuIHRoaXMucmVzb2x2ZUFjdGl2ZVBsYW50SWQoKS5waXBlKFxuXHRcdFx0c3dpdGNoTWFwKChwbGFudElkKSA9PiB0aGlzLmZldGNoUGxhbnRCeUlkKHBsYW50SWQpKSxcblx0XHRcdG1hcCgocGxhbnQpID0+IHRoaXMubWFwUm9vbUZyb21QbGFudChwbGFudCwgcm9vbUlkKSksXG5cdFx0KTtcblx0fVxuXG5cdHB1YmxpYyB3cml0ZURhdGFwb2ludFZhbHVlKGR0bzogV3JpdGVEYXRhcG9pbnREdG8pOiBPYnNlcnZhYmxlPHZvaWQ+IHtcblx0XHRyZXR1cm4gdGhpcy5odHRwLnBvc3Q8eyBtZXNzYWdlOiBzdHJpbmc7IHN0YXR1c0NvZGU6IG51bWJlciB9Pih0aGlzLmRldmljZUVuZHBvaW50LCBkdG8pLnBpcGUoXG5cdFx0XHR0aW1lb3V0KDkwMDApLFxuXHRcdFx0bWFwKChyZXNwb25zZSkgPT4ge1xuXHRcdFx0XHRjb25zdCBzdGF0dXNDb2RlID0gdHlwZW9mIHJlc3BvbnNlPy5zdGF0dXNDb2RlID09PSAnbnVtYmVyJyA/IHJlc3BvbnNlLnN0YXR1c0NvZGUgOiAyMDI7XG5cdFx0XHRcdGNvbnN0IG1lc3NhZ2UgPSAocmVzcG9uc2U/Lm1lc3NhZ2UgPz8gJycpLnRvTG93ZXJDYXNlKCk7XG5cblx0XHRcdFx0Y29uc3QgaGFzRmFpbHVyZUNvZGUgPSBzdGF0dXNDb2RlID49IDQwMDtcblx0XHRcdFx0Y29uc3QgaGFzRmFpbHVyZU1lc3NhZ2UgPVxuXHRcdFx0XHRcdG1lc3NhZ2UuaW5jbHVkZXMoJ2Vycm9yJykgfHxcblx0XHRcdFx0XHRtZXNzYWdlLmluY2x1ZGVzKCdmYWlsZWQnKSB8fFxuXHRcdFx0XHRcdG1lc3NhZ2UuaW5jbHVkZXMoJ2ZhaWwnKSB8fFxuXHRcdFx0XHRcdG1lc3NhZ2UuaW5jbHVkZXMoJ2ltcG9zc2liaWxlJyk7XG5cblx0XHRcdFx0aWYgKGhhc0ZhaWx1cmVDb2RlIHx8IGhhc0ZhaWx1cmVNZXNzYWdlKSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKHJlc3BvbnNlPy5tZXNzYWdlID8/ICdXcml0ZSBkYXRhcG9pbnQgZmFpbGVkJyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gdm9pZCAwO1xuXHRcdFx0fSksXG5cdFx0KTtcblx0fVxuXG5cdHB1YmxpYyBnZXREYXRhcG9pbnRDdXJyZW50VmFsdWVzQnlEZXZpY2VJZHMoXG5cdFx0ZGV2aWNlSWRzOiBSZWFkb25seUFycmF5PHN0cmluZz4sXG5cdCk6IE9ic2VydmFibGU8TWFwPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyPj4ge1xuXHRcdHJldHVybiB0aGlzLmdldEN1cnJlbnRWYWx1ZVBvaW50c0J5RGV2aWNlSWRzKGRldmljZUlkcykucGlwZShcblx0XHRcdG1hcCgodmFsdWVzQnlEZXZpY2UpID0+IHtcblx0XHRcdFx0Y29uc3QgdmFsdWVzQnlEYXRhcG9pbnQgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyPigpO1xuXG5cdFx0XHRcdGZvciAoY29uc3QgcG9pbnRzIG9mIHZhbHVlc0J5RGV2aWNlLnZhbHVlcygpKSB7XG5cdFx0XHRcdFx0Zm9yIChjb25zdCB2YWx1ZVBvaW50IG9mIHBvaW50cykge1xuXHRcdFx0XHRcdFx0aWYgKCF2YWx1ZVBvaW50Py5kYXRhcG9pbnRJZCkge1xuXHRcdFx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0dmFsdWVzQnlEYXRhcG9pbnQuc2V0KHZhbHVlUG9pbnQuZGF0YXBvaW50SWQsIHZhbHVlUG9pbnQudmFsdWUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiB2YWx1ZXNCeURhdGFwb2ludDtcblx0XHRcdH0pLFxuXHRcdCk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0Q3VycmVudFZhbHVlUG9pbnRzQnlEZXZpY2VJZHMoXG5cdFx0ZGV2aWNlSWRzOiBSZWFkb25seUFycmF5PHN0cmluZz4sXG5cdCk6IE9ic2VydmFibGU8TWFwPHN0cmluZywgRGV2aWNlVmFsdWVQb2ludER0b1tdPj4ge1xuXHRcdGNvbnN0IHVuaXF1ZURldmljZUlkcyA9IEFycmF5LmZyb20oXG5cdFx0XHRuZXcgU2V0KFxuXHRcdFx0XHRkZXZpY2VJZHNcblx0XHRcdFx0XHQuZmlsdGVyKChkZXZpY2VJZCk6IGRldmljZUlkIGlzIHN0cmluZyA9PiB0eXBlb2YgZGV2aWNlSWQgPT09ICdzdHJpbmcnKVxuXHRcdFx0XHRcdC5tYXAoKGRldmljZUlkKSA9PiBkZXZpY2VJZC50cmltKCkpXG5cdFx0XHRcdFx0LmZpbHRlcigoZGV2aWNlSWQpID0+IGRldmljZUlkLmxlbmd0aCA+IDApLFxuXHRcdFx0KSxcblx0XHQpO1xuXG5cdFx0aWYgKHVuaXF1ZURldmljZUlkcy5sZW5ndGggPT09IDApIHtcblx0XHRcdHJldHVybiBvZihuZXcgTWFwPHN0cmluZywgRGV2aWNlVmFsdWVQb2ludER0b1tdPigpKTtcblx0XHR9XG5cblx0XHRjb25zdCByZXF1ZXN0cyA9IHVuaXF1ZURldmljZUlkcy5tYXAoKGRldmljZUlkKSA9PlxuXHRcdFx0dGhpcy5odHRwXG5cdFx0XHRcdC5nZXQ8RGV2aWNlVmFsdWVEdG8+KGAke3RoaXMuZGV2aWNlRW5kcG9pbnR9LyR7ZW5jb2RlVVJJQ29tcG9uZW50KGRldmljZUlkKX0vdmFsdWVgKVxuXHRcdFx0XHQucGlwZShjYXRjaEVycm9yKCgpID0+IG9mPERldmljZVZhbHVlRHRvPih7IGRldmljZUlkLCB2YWx1ZXM6IFtdIH0pKSksXG5cdFx0KTtcblxuXHRcdHJldHVybiBmb3JrSm9pbihyZXF1ZXN0cykucGlwZShcblx0XHRcdG1hcCgocmVzcG9uc2VzKSA9PiB7XG5cdFx0XHRcdGNvbnN0IHZhbHVlc0J5RGV2aWNlID0gbmV3IE1hcDxzdHJpbmcsIERldmljZVZhbHVlUG9pbnREdG9bXT4oKTtcblxuXHRcdFx0XHRmb3IgKGNvbnN0IHJlc3BvbnNlIG9mIHJlc3BvbnNlcykge1xuXHRcdFx0XHRcdGNvbnN0IGRldmljZUlkID0gdHlwZW9mIHJlc3BvbnNlPy5kZXZpY2VJZCA9PT0gJ3N0cmluZycgPyByZXNwb25zZS5kZXZpY2VJZCA6ICcnO1xuXHRcdFx0XHRcdGlmICghZGV2aWNlSWQudHJpbSgpKSB7XG5cdFx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHR2YWx1ZXNCeURldmljZS5zZXQoXG5cdFx0XHRcdFx0XHRkZXZpY2VJZCxcblx0XHRcdFx0XHRcdChyZXNwb25zZS52YWx1ZXMgPz8gW10pLmZpbHRlcihcblx0XHRcdFx0XHRcdFx0KHBvaW50KTogcG9pbnQgaXMgRGV2aWNlVmFsdWVQb2ludER0byA9PlxuXHRcdFx0XHRcdFx0XHRcdHR5cGVvZiBwb2ludD8uZGF0YXBvaW50SWQgPT09ICdzdHJpbmcnICYmXG5cdFx0XHRcdFx0XHRcdFx0dHlwZW9mIHBvaW50Py5uYW1lID09PSAnc3RyaW5nJyxcblx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiB2YWx1ZXNCeURldmljZTtcblx0XHRcdH0pLFxuXHRcdCk7XG5cdH1cblxuXHRwcml2YXRlIHJlc29sdmVBY3RpdmVQbGFudElkKCk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG5cdFx0Y29uc3QgYWN0aXZlUGxhbnRJZCA9IHRoaXMuZ2V0QWN0aXZlUGxhbnRJZCgpO1xuXHRcdGlmIChhY3RpdmVQbGFudElkKSB7XG5cdFx0XHRyZXR1cm4gb2YoYWN0aXZlUGxhbnRJZCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuZmV0Y2hBbGxQbGFudHMoKS5waXBlKFxuXHRcdFx0bWFwKChwbGFudHMpID0+IHBsYW50c1swXT8uaWQgPz8gbnVsbCksXG5cdFx0XHRzd2l0Y2hNYXAoKHBsYW50SWQpID0+IHtcblx0XHRcdFx0aWYgKCFwbGFudElkKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKCdObyBwbGFudHMgYXZhaWxhYmxlJykpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGhpcy5zZXRBY3RpdmVQbGFudElkKHBsYW50SWQpO1xuXHRcdFx0XHRyZXR1cm4gb2YocGxhbnRJZCk7XG5cdFx0XHR9KSxcblx0XHQpO1xuXHR9XG5cblx0cHJpdmF0ZSBmZXRjaFBsYW50QnlJZChwbGFudElkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPFBsYW50RHRvPiB7XG5cdFx0cmV0dXJuIHRoaXMuaHR0cC5nZXQ8UGxhbnREdG8+KGAke3RoaXMucGxhbnRFbmRwb2ludH0/cGxhbnRpZD0ke2VuY29kZVVSSUNvbXBvbmVudChwbGFudElkKX1gKTtcblx0fVxuXG5cdHByaXZhdGUgZmV0Y2hBbGxQbGFudHMoKTogT2JzZXJ2YWJsZTxQbGFudER0b1tdPiB7XG5cdFx0cmV0dXJuIHRoaXMuaHR0cFxuXHRcdFx0LmdldDxQbGFudER0b1tdIHwgeyBzdGF0dXNDb2RlPzogbnVtYmVyOyBtZXNzYWdlPzogc3RyaW5nIH0+KGAke3RoaXMucGxhbnRFbmRwb2ludH0vYWxsYClcblx0XHRcdC5waXBlKFxuXHRcdFx0XHRtYXAoKHJlc3BvbnNlKSA9PiAoQXJyYXkuaXNBcnJheShyZXNwb25zZSkgPyByZXNwb25zZSA6IFtdKSksXG5cdFx0XHRcdGNhdGNoRXJyb3IoKCkgPT4gb2YoW10pKSxcblx0XHRcdCk7XG5cdH1cblxuXHRwcml2YXRlIGdldEFjdGl2ZVBsYW50SWQoKTogc3RyaW5nIHwgbnVsbCB7XG5cdFx0Y29uc3Qgc3RvcmFnZSA9IGdsb2JhbFRoaXMubG9jYWxTdG9yYWdlIGFzIHsgZ2V0SXRlbT86IChrZXk6IHN0cmluZykgPT4gc3RyaW5nIHwgbnVsbCB9IHwgdW5kZWZpbmVkO1xuXG5cdFx0aWYgKHN0b3JhZ2UgJiYgdHlwZW9mIHN0b3JhZ2UuZ2V0SXRlbSA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0Y29uc3QgcGxhbnRJZCA9IHN0b3JhZ2UuZ2V0SXRlbSgnYWN0aXZlUGxhbnRJZCcpO1xuXHRcdFx0cmV0dXJuIHBsYW50SWQ/LnRyaW0oKSA/IHBsYW50SWQgOiBudWxsO1xuXHRcdH1cblxuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0cHJpdmF0ZSBzZXRBY3RpdmVQbGFudElkKHBsYW50SWQ6IHN0cmluZyk6IHZvaWQge1xuXHRcdGNvbnN0IHN0b3JhZ2UgPSBnbG9iYWxUaGlzLmxvY2FsU3RvcmFnZSBhcyB7IHNldEl0ZW0/OiAoa2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpID0+IHZvaWQgfSB8IHVuZGVmaW5lZDtcblx0XHRpZiAoIXN0b3JhZ2UgfHwgdHlwZW9mIHN0b3JhZ2Uuc2V0SXRlbSAhPT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHN0b3JhZ2Uuc2V0SXRlbSgnYWN0aXZlUGxhbnRJZCcsIHBsYW50SWQpO1xuXHR9XG5cblx0cHJpdmF0ZSBtYXBSb29tRnJvbVBsYW50KHBsYW50OiBQbGFudER0bywgcm9vbUlkOiBzdHJpbmcpOiBSb29tIHtcblx0XHRjb25zdCBzb3VyY2VSb29tID0gcGxhbnQucm9vbXMuZmluZCgocm9vbSkgPT4gcm9vbS5pZCA9PT0gcm9vbUlkKTtcblxuXHRcdGlmICghc291cmNlUm9vbSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKGBSb29tICR7cm9vbUlkfSBub3QgZm91bmQgaW4gcGxhbnQgJHtwbGFudC5pZH1gKTtcblx0XHR9XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0aWQ6IHNvdXJjZVJvb20uaWQsXG5cdFx0XHRuYW1lOiBzb3VyY2VSb29tLm5hbWUsXG5cdFx0XHRoYXNBY3RpdmVBbGFybTogZmFsc2UsXG5cdFx0XHRkZXZpY2VzOiBzb3VyY2VSb29tLmRldmljZXMubWFwKChkZXZpY2UpID0+IHtcblx0XHRcdFx0Y29uc3QgbWFwcGVkRGF0YXBvaW50cyA9IHRoaXMubWFwRGF0YXBvaW50cyhkZXZpY2UuZGF0YXBvaW50cyk7XG5cblx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRpZDogZGV2aWNlLmlkLFxuXHRcdFx0XHRcdG5hbWU6IGRldmljZS5uYW1lLFxuXHRcdFx0XHRcdHR5cGU6IHJlc29sdmVEZXZpY2VUeXBlKHtcblx0XHRcdFx0XHRcdHJhd1R5cGU6IGRldmljZS50eXBlLFxuXHRcdFx0XHRcdFx0cmF3U3ViVHlwZTogZGV2aWNlLnN1YlR5cGUsXG5cdFx0XHRcdFx0XHRyYXdOYW1lOiBkZXZpY2UubmFtZSxcblx0XHRcdFx0XHRcdHNmZVR5cGVzOiBtYXBwZWREYXRhcG9pbnRzLm1hcCgoZGF0YXBvaW50KSA9PiBkYXRhcG9pbnQuc2ZlVHlwZSksXG5cdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0c3RhdHVzOiBkZXZpY2UudHlwZSA/ICdPTkxJTkUnIDogJ1VOS05PV04nLFxuXHRcdFx0XHRcdGFjdGlvbnM6IFtdLFxuXHRcdFx0XHRcdGRhdGFwb2ludHM6IG1hcHBlZERhdGFwb2ludHMsXG5cdFx0XHRcdH07XG5cdFx0XHR9KSxcblx0XHR9O1xuXHR9XG5cblx0cHJpdmF0ZSBtYXBEYXRhcG9pbnRzKGRhdGFwb2ludHM6IFBsYW50RGF0YXBvaW50RHRvW10gfCB1bmRlZmluZWQpOiBEYXRhcG9pbnRbXSB7XG5cdFx0cmV0dXJuIChkYXRhcG9pbnRzID8/IFtdKS5tYXAoKGRhdGFwb2ludCkgPT4gKHtcblx0XHRcdGlkOiBkYXRhcG9pbnQuaWQsXG5cdFx0XHRuYW1lOiBkYXRhcG9pbnQubmFtZSxcblx0XHRcdHJlYWRhYmxlOiBkYXRhcG9pbnQucmVhZGFibGUsXG5cdFx0XHR3cml0YWJsZTogZGF0YXBvaW50LndyaXRhYmxlLFxuXHRcdFx0dmFsdWVUeXBlOiBkYXRhcG9pbnQudmFsdWVUeXBlLFxuXHRcdFx0ZW51bTogQXJyYXkuaXNBcnJheShkYXRhcG9pbnQuZW51bSkgPyBkYXRhcG9pbnQuZW51bSA6IFtdLFxuXHRcdFx0c2ZlVHlwZTogZGF0YXBvaW50LnNmZVR5cGUgPz8gJycsXG5cdFx0fSkpO1xuXHR9XG5cblx0cHJpdmF0ZSBtYXBXcml0YWJsZUVuZHBvaW50Um93cyhwbGFudDogUGxhbnREdG8pOiBXcml0YWJsZUVuZHBvaW50Um93W10ge1xuXHRcdGNvbnN0IHJvd3M6IFdyaXRhYmxlRW5kcG9pbnRSb3dbXSA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCByb29tIG9mIHBsYW50LnJvb21zKSB7XG5cdFx0XHRjb25zdCB2aXNpYmxlRGV2aWNlcyA9IHRoaXMuZGVkdXBsaWNhdGVSb29tRGV2aWNlcyhcblx0XHRcdFx0cm9vbS5kZXZpY2VzLmZpbHRlcigoZGV2aWNlKSA9PiAhdGhpcy5pc0VuZXJneU1lYXN1cmVEZXZpY2UoZGV2aWNlLnR5cGUsIGRldmljZS5zdWJUeXBlKSksXG5cdFx0XHQpO1xuXG5cdFx0XHRmb3IgKGNvbnN0IGRldmljZSBvZiB2aXNpYmxlRGV2aWNlcykge1xuXHRcdFx0XHRjb25zdCBtYXBwZWREYXRhcG9pbnRzID0gdGhpcy5tYXBEYXRhcG9pbnRzKGRldmljZS5kYXRhcG9pbnRzKTtcblx0XHRcdFx0Y29uc3QgcmVzb2x2ZWREZXZpY2VUeXBlID0gcmVzb2x2ZURldmljZVR5cGUoe1xuXHRcdFx0XHRcdHJhd1R5cGU6IGRldmljZS50eXBlLFxuXHRcdFx0XHRcdHJhd1N1YlR5cGU6IGRldmljZS5zdWJUeXBlLFxuXHRcdFx0XHRcdHJhd05hbWU6IGRldmljZS5uYW1lLFxuXHRcdFx0XHRcdHNmZVR5cGVzOiBtYXBwZWREYXRhcG9pbnRzLm1hcCgoZGF0YXBvaW50KSA9PiBkYXRhcG9pbnQuc2ZlVHlwZSksXG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdGNvbnN0IHdyaXRhYmxlRW51bURhdGFwb2ludHMgPSBtYXBwZWREYXRhcG9pbnRzLmZpbHRlcihcblx0XHRcdFx0XHQoZGF0YXBvaW50KSA9PiBkYXRhcG9pbnQud3JpdGFibGUgJiYgZGF0YXBvaW50LmVudW0ubGVuZ3RoID4gMCxcblx0XHRcdFx0KTtcblxuXHRcdFx0XHRmb3IgKGNvbnN0IGRhdGFwb2ludCBvZiB3cml0YWJsZUVudW1EYXRhcG9pbnRzKSB7XG5cdFx0XHRcdFx0cm93cy5wdXNoKHtcblx0XHRcdFx0XHRcdHJvb21JZDogcm9vbS5pZCxcblx0XHRcdFx0XHRcdHJvb21OYW1lOiByb29tLm5hbWUsXG5cdFx0XHRcdFx0XHRkZXZpY2VJZDogZGV2aWNlLmlkLFxuXHRcdFx0XHRcdFx0ZGV2aWNlTmFtZTogZGV2aWNlLm5hbWUsXG5cdFx0XHRcdFx0XHRkZXZpY2VUeXBlOiByZXNvbHZlZERldmljZVR5cGUsXG5cdFx0XHRcdFx0XHRkYXRhcG9pbnRJZDogZGF0YXBvaW50LmlkLFxuXHRcdFx0XHRcdFx0ZGF0YXBvaW50TmFtZTogZGF0YXBvaW50Lm5hbWUsXG5cdFx0XHRcdFx0XHRkYXRhcG9pbnRTZmVUeXBlOiBkYXRhcG9pbnQuc2ZlVHlwZSxcblx0XHRcdFx0XHRcdGVudW1WYWx1ZXM6IGRhdGFwb2ludC5lbnVtLFxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJvd3M7XG5cdH1cblxuXHRwcml2YXRlIGRlZHVwbGljYXRlUm9vbURldmljZXMoZGV2aWNlczogUmVhZG9ubHlBcnJheTxQbGFudERldmljZUR0bz4pOiBQbGFudERldmljZUR0b1tdIHtcblx0XHRjb25zdCBieU5hbWUgPSBuZXcgTWFwPHN0cmluZywgUGxhbnREZXZpY2VEdG8+KCk7XG5cblx0XHRmb3IgKGNvbnN0IGRldmljZSBvZiBkZXZpY2VzKSB7XG5cdFx0XHRjb25zdCBrZXkgPSB0aGlzLm5vcm1hbGl6ZURldmljZU5hbWUoZGV2aWNlLm5hbWUpO1xuXHRcdFx0Y29uc3QgY3VycmVudCA9IGJ5TmFtZS5nZXQoa2V5KTtcblxuXHRcdFx0aWYgKCFjdXJyZW50IHx8IHRoaXMuZ2V0RGV2aWNlUHJpb3JpdHlTY29yZShkZXZpY2UpID4gdGhpcy5nZXREZXZpY2VQcmlvcml0eVNjb3JlKGN1cnJlbnQpKSB7XG5cdFx0XHRcdGJ5TmFtZS5zZXQoa2V5LCBkZXZpY2UpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBBcnJheS5mcm9tKGJ5TmFtZS52YWx1ZXMoKSk7XG5cdH1cblxuXHRwcml2YXRlIG5vcm1hbGl6ZURldmljZU5hbWUobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gbmFtZS50cmltKCkudG9Mb3dlckNhc2UoKTtcblx0fVxuXG5cdHByaXZhdGUgZ2V0RGV2aWNlUHJpb3JpdHlTY29yZShkZXZpY2U6IFBsYW50RGV2aWNlRHRvKTogbnVtYmVyIHtcblx0XHRjb25zdCBub3JtYWxpemVkVHlwZSA9IGRldmljZS50eXBlPy50b1VwcGVyQ2FzZSgpID8/ICcnO1xuXHRcdGNvbnN0IG5vcm1hbGl6ZWRTdWJUeXBlID0gZGV2aWNlLnN1YlR5cGU/LnRvVXBwZXJDYXNlKCkgPz8gJyc7XG5cblx0XHRsZXQgc2NvcmUgPSAwO1xuXG5cdFx0aWYgKG5vcm1hbGl6ZWRUeXBlLmluY2x1ZGVzKCdSQURBUkRFVEVDVE9SJykpIHtcblx0XHRcdHNjb3JlICs9IDEwMDtcblx0XHR9XG5cblx0XHRpZiAobm9ybWFsaXplZFN1YlR5cGUgPT09ICdTRl9BQ0NFU1MnKSB7XG5cdFx0XHRzY29yZSArPSA2MDtcblx0XHR9XG5cblx0XHRpZiAobm9ybWFsaXplZFR5cGUgPT09ICdTU19BVVRPTUFUSU9OX09OT0ZGJykge1xuXHRcdFx0c2NvcmUgLT0gMjA7XG5cdFx0fVxuXG5cdFx0c2NvcmUgKz0gZGV2aWNlLmRhdGFwb2ludHM/Lmxlbmd0aCA/PyAwO1xuXHRcdHJldHVybiBzY29yZTtcblx0fVxuXG5cdHByaXZhdGUgaXNFbmVyZ3lNZWFzdXJlRGV2aWNlKHJhd1R5cGU6IHN0cmluZyB8IHVuZGVmaW5lZCwgcmF3U3ViVHlwZTogc3RyaW5nIHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG5cdFx0Y29uc3Qgbm9ybWFsaXplZFR5cGUgPSByYXdUeXBlPy50b1VwcGVyQ2FzZSgpID8/ICcnO1xuXHRcdGNvbnN0IG5vcm1hbGl6ZWRTdWJUeXBlID0gcmF3U3ViVHlwZT8udG9VcHBlckNhc2UoKSA/PyAnJztcblxuXHRcdHJldHVybiBub3JtYWxpemVkVHlwZS5zdGFydHNXaXRoKCdTU19FTkVSR1lfTUVBU1VSRScpIHx8IG5vcm1hbGl6ZWRTdWJUeXBlID09PSAnU0ZfRU5FUkdZJztcblx0fVxuXG59XG4iLCJpbXBvcnQgeyBBc3luY1BpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBPbkRlc3Ryb3ksIE9uSW5pdCwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuXHRFTVBUWSxcblx0T2JzZXJ2YWJsZSxcblx0U3ViamVjdCxcblx0U3Vic2NyaXB0aW9uLFxuXHRjYXRjaEVycm9yLFxuXHRmaWx0ZXIsXG5cdGZpbmFsaXplLFxuXHRmcm9tRXZlbnQsXG5cdGludGVydmFsLFxuXHRtYXAsXG5cdG9mLFxuXHRzdGFydFdpdGgsXG5cdHN3aXRjaE1hcCxcblx0dGFwLFxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7IERldmljZVR5cGUgfSBmcm9tICcuLi8uLi9tb2RlbHMvZGV2aWNlLXR5cGUuZW51bSc7XG5pbXBvcnQgeyBFbmRwb2ludFJvb21Hcm91cCB9IGZyb20gJy4uLy4uL21vZGVscy9lbmRwb2ludC1yb29tLWdyb3VwLm1vZGVsJztcbmltcG9ydCB7IFJvd0ZlZWRiYWNrIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3Jvdy1mZWVkYmFjay5tb2RlbCc7XG5pbXBvcnQgeyBXcml0YWJsZUVuZHBvaW50Um93IH0gZnJvbSAnLi4vLi4vbW9kZWxzL3dyaXRhYmxlLWVuZHBvaW50LXJvdy5tb2RlbCc7XG5pbXBvcnQgeyBEZXZpY2VBcGlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZGV2aWNlLWFwaS5zZXJ2aWNlJztcbmltcG9ydCB0eXBlIHsgRGV2aWNlVmFsdWVQb2ludER0byB9IGZyb20gJy4uLy4uL21vZGVscy93cml0ZS1kYXRhcG9pbnQtcmVxdWVzdC5tb2RlbCc7XG5pbXBvcnQgeyBnZXREZXZpY2VUeXBlTGFiZWwsIGdldEVuZHBvaW50TGFiZWwgYXMgcmVzb2x2ZUVuZHBvaW50TGFiZWwgfSBmcm9tICcuLi8uLi8uLi8uLi9zaGFyZWQvbW9kZWxzL2RldmljZS10YXhvbm9teSc7XG5cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogJ2FwcC1lbmRwb2ludC10YWJsZScsXG5cdHN0YW5kYWxvbmU6IHRydWUsXG5cdGltcG9ydHM6IFtBc3luY1BpcGVdLFxuXHR0ZW1wbGF0ZVVybDogJy4vZW5kcG9pbnQtdGFibGUuY29tcG9uZW50Lmh0bWwnLFxuXHRzdHlsZVVybDogJy4vZW5kcG9pbnQtdGFibGUuY29tcG9uZW50LmNzcycsXG59KVxuZXhwb3J0IGNsYXNzIEVuZHBvaW50VGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG5cdHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IENVUlJFTlRfVkFMVUVTX1BPTExfTVMgPSAxNTAwMDtcblxuXHRwcml2YXRlIHJlYWRvbmx5IGRldmljZUFwaSA9IGluamVjdChEZXZpY2VBcGlTZXJ2aWNlKTtcblx0cHJpdmF0ZSByZWFkb25seSByZWZyZXNoJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cdHByaXZhdGUgcmVhZG9ubHkgc2VsZWN0ZWRWYWx1ZXNCeVJvdyA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG5cdHByaXZhdGUgcmVhZG9ubHkgZXhlY3V0aW5nUm93cyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXHRwcml2YXRlIHJlYWRvbmx5IGZlZWRiYWNrQnlSb3cgPSBuZXcgTWFwPHN0cmluZywgUm93RmVlZGJhY2s+KCk7XG5cdHByaXZhdGUgcmVhZG9ubHkgZmVlZGJhY2tUaW1lckJ5Um93ID0gbmV3IE1hcDxzdHJpbmcsIFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+PigpO1xuXHRwcml2YXRlIGN1cnJlbnRWYWx1ZXNCeURldmljZSA9IG5ldyBNYXA8c3RyaW5nLCBEZXZpY2VWYWx1ZVBvaW50RHRvW10+KCk7XG5cdHByaXZhdGUgbGF0ZXN0Um93czogV3JpdGFibGVFbmRwb2ludFJvd1tdID0gW107XG5cdHByaXZhdGUgYWN0aXZlUGxhbnRDaGFuZ2VTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiB8IG51bGwgPSBudWxsO1xuXHRwcml2YXRlIGN1cnJlbnRWYWx1ZXNQb2xsaW5nU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCBudWxsID0gbnVsbDtcblxuXHRwdWJsaWMgcmVhZG9ubHkgcm9vbUdyb3VwcyQ6IE9ic2VydmFibGU8RW5kcG9pbnRSb29tR3JvdXBbXT4gPSB0aGlzLnJlZnJlc2gkLnBpcGUoXG5cdFx0c3RhcnRXaXRoKHZvaWQgMCksXG5cdFx0c3dpdGNoTWFwKCgpID0+IHRoaXMuZGV2aWNlQXBpLmdldFdyaXRhYmxlRW5kcG9pbnRSb3dzKCkucGlwZShcblx0XHRcdHRhcCgoKSA9PiB7XG5cdFx0XHRcdHRoaXMubG9hZEVycm9yID0gJyc7XG5cdFx0XHR9KSxcblx0XHRcdHRhcCgocm93cykgPT4ge1xuXHRcdFx0XHR0aGlzLmxhdGVzdFJvd3MgPSByb3dzO1xuXHRcdFx0XHR0aGlzLnN5bmNTZWxlY3RlZFZhbHVlcyhyb3dzKTtcblx0XHRcdH0pLFxuXHRcdFx0c3dpdGNoTWFwKChyb3dzKSA9PlxuXHRcdFx0XHR0aGlzLmxvYWRDdXJyZW50VmFsdWVzKHJvd3MpLnBpcGUobWFwKCgpID0+IHRoaXMuZ3JvdXBSb3dzQnlSb29tKHJvd3MpKSksXG5cdFx0XHQpLFxuXHRcdCkpLFxuXHRcdGNhdGNoRXJyb3IoKCkgPT4ge1xuXHRcdFx0dGhpcy5sb2FkRXJyb3IgPSAnSW1wb3NzaWJpbGUgY2FyaWNhcmUgaSBkaXNwb3NpdGl2aSBjb24gZW5kcG9pbnQuJztcblx0XHRcdHJldHVybiBvZihbXSk7XG5cdFx0fSksXG5cdCk7XG5cblx0cHVibGljIGxvYWRFcnJvciA9ICcnO1xuXG5cdHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcblx0XHR0aGlzLnN1YnNjcmliZVRvQWN0aXZlUGxhbnRDaGFuZ2VzKCk7XG5cdFx0dGhpcy5zdGFydEN1cnJlbnRWYWx1ZXNQb2xsaW5nKCk7XG5cdH1cblxuXHRwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG5cdFx0dGhpcy5hY3RpdmVQbGFudENoYW5nZVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcblx0XHR0aGlzLmN1cnJlbnRWYWx1ZXNQb2xsaW5nU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuXHRcdHRoaXMuY2xlYXJBbGxSb3dGZWVkYmFjaygpO1xuXHR9XG5cblx0cHVibGljIHRyYWNrQnlHcm91cChfOiBudW1iZXIsIGdyb3VwOiBFbmRwb2ludFJvb21Hcm91cCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIGdyb3VwLnJvb21JZDtcblx0fVxuXG5cdHB1YmxpYyB0cmFja0J5Um93KF86IG51bWJlciwgcm93OiBXcml0YWJsZUVuZHBvaW50Um93KTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5idWlsZFJvd0tleShyb3cpO1xuXHR9XG5cblx0cHVibGljIGdldFR5cGVMYWJlbCh0eXBlOiBEZXZpY2VUeXBlKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gZ2V0RGV2aWNlVHlwZUxhYmVsKHR5cGUpO1xuXHR9XG5cblx0cHVibGljIGdldEVuZHBvaW50TGFiZWwocm93OiBXcml0YWJsZUVuZHBvaW50Um93KTogc3RyaW5nIHtcblx0XHRyZXR1cm4gcmVzb2x2ZUVuZHBvaW50TGFiZWwocm93LmRhdGFwb2ludFNmZVR5cGUpO1xuXHR9XG5cblx0cHVibGljIGdldEN1cnJlbnRWYWx1ZShyb3c6IFdyaXRhYmxlRW5kcG9pbnRSb3cpOiBzdHJpbmcge1xuXHRcdGNvbnN0IHZhbHVlUG9pbnRzID0gdGhpcy5jdXJyZW50VmFsdWVzQnlEZXZpY2UuZ2V0KHJvdy5kZXZpY2VJZCkgPz8gW107XG5cblx0XHRjb25zdCBleGFjdE1hdGNoID0gdmFsdWVQb2ludHMuZmluZCgocG9pbnQpID0+IHBvaW50LmRhdGFwb2ludElkID09PSByb3cuZGF0YXBvaW50SWQpO1xuXHRcdGlmIChleGFjdE1hdGNoPy52YWx1ZSAhPT0gdW5kZWZpbmVkICYmIGV4YWN0TWF0Y2g/LnZhbHVlICE9PSBudWxsKSB7XG5cdFx0XHRyZXR1cm4gU3RyaW5nKGV4YWN0TWF0Y2gudmFsdWUpO1xuXHRcdH1cblxuXHRcdGNvbnN0IHNlbWFudGljQ2FuZGlkYXRlcyA9IHRoaXMuZ2V0U2VtYW50aWNDYW5kaWRhdGVzKHJvdyk7XG5cdFx0Y29uc3Qgc2VtYW50aWNNYXRjaCA9IHZhbHVlUG9pbnRzLmZpbmQoKHBvaW50KSA9PlxuXHRcdFx0c2VtYW50aWNDYW5kaWRhdGVzLmhhcyh0aGlzLm5vcm1hbGl6ZUtleShwb2ludC5uYW1lKSksXG5cdFx0KTtcblx0XHRpZiAoc2VtYW50aWNNYXRjaD8udmFsdWUgIT09IHVuZGVmaW5lZCAmJiBzZW1hbnRpY01hdGNoPy52YWx1ZSAhPT0gbnVsbCkge1xuXHRcdFx0cmV0dXJuIFN0cmluZyhzZW1hbnRpY01hdGNoLnZhbHVlKTtcblx0XHR9XG5cblx0XHRjb25zdCBmaXJzdEF2YWlsYWJsZSA9IHZhbHVlUG9pbnRzLmZpbmQoXG5cdFx0XHQocG9pbnQpID0+IHBvaW50LnZhbHVlICE9PSB1bmRlZmluZWQgJiYgcG9pbnQudmFsdWUgIT09IG51bGwsXG5cdFx0KTtcblx0XHRpZiAoZmlyc3RBdmFpbGFibGUpIHtcblx0XHRcdHJldHVybiBTdHJpbmcoZmlyc3RBdmFpbGFibGUudmFsdWUpO1xuXHRcdH1cblxuXHRcdHJldHVybiAnLSc7XG5cdH1cblxuXHRwdWJsaWMgZ2V0U2VsZWN0ZWRWYWx1ZShyb3c6IFdyaXRhYmxlRW5kcG9pbnRSb3cpOiBzdHJpbmcge1xuXHRcdGNvbnN0IHJvd0tleSA9IHRoaXMuYnVpbGRSb3dLZXkocm93KTtcblx0XHRjb25zdCBjdXJyZW50VmFsdWUgPSB0aGlzLnNlbGVjdGVkVmFsdWVzQnlSb3cuZ2V0KHJvd0tleSk7XG5cblx0XHRpZiAoY3VycmVudFZhbHVlKSB7XG5cdFx0XHRyZXR1cm4gY3VycmVudFZhbHVlO1xuXHRcdH1cblxuXHRcdHJldHVybiByb3cuZW51bVZhbHVlc1swXSA/PyAnJztcblx0fVxuXG5cdHB1YmxpYyBvblNlbGVjdGlvbkNoYW5nZShyb3c6IFdyaXRhYmxlRW5kcG9pbnRSb3csIHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcblx0XHR0aGlzLnNlbGVjdGVkVmFsdWVzQnlSb3cuc2V0KHRoaXMuYnVpbGRSb3dLZXkocm93KSwgdmFsdWUpO1xuXHR9XG5cblx0cHVibGljIGlzUm93RXhlY3V0aW5nKHJvdzogV3JpdGFibGVFbmRwb2ludFJvdyk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLmV4ZWN1dGluZ1Jvd3MuaGFzKHRoaXMuYnVpbGRSb3dLZXkocm93KSk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0Um93RmVlZGJhY2socm93OiBXcml0YWJsZUVuZHBvaW50Um93KTogUm93RmVlZGJhY2sgfCBudWxsIHtcblx0XHRyZXR1cm4gdGhpcy5mZWVkYmFja0J5Um93LmdldCh0aGlzLmJ1aWxkUm93S2V5KHJvdykpID8/IG51bGw7XG5cdH1cblxuXHRwdWJsaWMgb25Xcml0ZVJvdyhyb3c6IFdyaXRhYmxlRW5kcG9pbnRSb3cpOiB2b2lkIHtcblx0XHRjb25zdCByb3dLZXkgPSB0aGlzLmJ1aWxkUm93S2V5KHJvdyk7XG5cblx0XHRpZiAodGhpcy5leGVjdXRpbmdSb3dzLmhhcyhyb3dLZXkpKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dGhpcy5jbGVhclJvd0ZlZWRiYWNrKHJvd0tleSk7XG5cblx0XHRjb25zdCBzZWxlY3RlZFZhbHVlID0gdGhpcy5nZXRTZWxlY3RlZFZhbHVlKHJvdyk7XG5cdFx0aWYgKCFzZWxlY3RlZFZhbHVlKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dGhpcy5leGVjdXRpbmdSb3dzLmFkZChyb3dLZXkpO1xuXG5cdFx0dGhpcy5kZXZpY2VBcGkud3JpdGVEYXRhcG9pbnRWYWx1ZSh7IGRhdGFwb2ludElkOiByb3cuZGF0YXBvaW50SWQsIHZhbHVlOiBzZWxlY3RlZFZhbHVlIH0pLnBpcGUoXG5cdFx0XHR0YXAoKCkgPT4ge1xuXHRcdFx0XHR0aGlzLnNldFJvd0ZlZWRiYWNrKHJvd0tleSwgJ3N1Y2Nlc3MnLCAnQ29tYW5kbyBpbnZpYXRvIGNvcnJldHRhbWVudGUuJyk7XG5cdFx0XHRcdHRoaXMucmVmcmVzaCQubmV4dCgpO1xuXHRcdFx0fSksXG5cdFx0XHRjYXRjaEVycm9yKCgpID0+IHtcblx0XHRcdFx0dGhpcy5zZXRSb3dGZWVkYmFjayhyb3dLZXksICdlcnJvcicsICdFcnJvcmUgaW52aW8gY29tYW5kby4nKTtcblx0XHRcdFx0cmV0dXJuIEVNUFRZO1xuXHRcdFx0fSksXG5cdFx0XHRmaW5hbGl6ZSgoKSA9PiB7XG5cdFx0XHRcdHRoaXMuZXhlY3V0aW5nUm93cy5kZWxldGUocm93S2V5KTtcblx0XHRcdH0pLFxuXHRcdCkuc3Vic2NyaWJlKCk7XG5cdH1cblxuXHRwcml2YXRlIGdyb3VwUm93c0J5Um9vbShyb3dzOiBXcml0YWJsZUVuZHBvaW50Um93W10pOiBFbmRwb2ludFJvb21Hcm91cFtdIHtcblx0XHRjb25zdCBncm91cHNCeUlkID0gbmV3IE1hcDxzdHJpbmcsIEVuZHBvaW50Um9vbUdyb3VwPigpO1xuXG5cdFx0Zm9yIChjb25zdCByb3cgb2Ygcm93cykge1xuXHRcdFx0Y29uc3QgZXhpc3RpbmdHcm91cCA9IGdyb3Vwc0J5SWQuZ2V0KHJvdy5yb29tSWQpO1xuXG5cdFx0XHRpZiAoZXhpc3RpbmdHcm91cCkge1xuXHRcdFx0XHRleGlzdGluZ0dyb3VwLnJvd3MucHVzaChyb3cpO1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0Z3JvdXBzQnlJZC5zZXQocm93LnJvb21JZCwge1xuXHRcdFx0XHRyb29tSWQ6IHJvdy5yb29tSWQsXG5cdFx0XHRcdHJvb21OYW1lOiByb3cucm9vbU5hbWUsXG5cdFx0XHRcdHJvd3M6IFtyb3ddLFxuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIEFycmF5LmZyb20oZ3JvdXBzQnlJZC52YWx1ZXMoKSk7XG5cdH1cblxuXHRwcml2YXRlIGJ1aWxkUm93S2V5KHJvdzogV3JpdGFibGVFbmRwb2ludFJvdyk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIGAke3Jvdy5yb29tSWR9Ojoke3Jvdy5kZXZpY2VJZH06OiR7cm93LmRhdGFwb2ludElkfWA7XG5cdH1cblxuXHRwcml2YXRlIGNsZWFyUm93RmVlZGJhY2socm93S2V5OiBzdHJpbmcpOiB2b2lkIHtcblx0XHR0aGlzLmZlZWRiYWNrQnlSb3cuZGVsZXRlKHJvd0tleSk7XG5cblx0XHRjb25zdCBleGlzdGluZ1RpbWVyID0gdGhpcy5mZWVkYmFja1RpbWVyQnlSb3cuZ2V0KHJvd0tleSk7XG5cdFx0aWYgKGV4aXN0aW5nVGltZXIpIHtcblx0XHRcdGNsZWFyVGltZW91dChleGlzdGluZ1RpbWVyKTtcblx0XHRcdHRoaXMuZmVlZGJhY2tUaW1lckJ5Um93LmRlbGV0ZShyb3dLZXkpO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgc2V0Um93RmVlZGJhY2socm93S2V5OiBzdHJpbmcsIHR5cGU6IFJvd0ZlZWRiYWNrWyd0eXBlJ10sIG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xuXHRcdHRoaXMuY2xlYXJSb3dGZWVkYmFjayhyb3dLZXkpO1xuXHRcdHRoaXMuZmVlZGJhY2tCeVJvdy5zZXQocm93S2V5LCB7IHR5cGUsIG1lc3NhZ2UgfSk7XG5cblx0XHRjb25zdCB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0dGhpcy5mZWVkYmFja0J5Um93LmRlbGV0ZShyb3dLZXkpO1xuXHRcdFx0dGhpcy5mZWVkYmFja1RpbWVyQnlSb3cuZGVsZXRlKHJvd0tleSk7XG5cdFx0fSwgNTAwMCk7XG5cblx0XHR0aGlzLmZlZWRiYWNrVGltZXJCeVJvdy5zZXQocm93S2V5LCB0aW1lcik7XG5cdH1cblxuXHRwcml2YXRlIHN1YnNjcmliZVRvQWN0aXZlUGxhbnRDaGFuZ2VzKCk6IHZvaWQge1xuXHRcdGlmICh0eXBlb2YgZ2xvYmFsVGhpcy5hZGRFdmVudExpc3RlbmVyICE9PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dGhpcy5hY3RpdmVQbGFudENoYW5nZVN1YnNjcmlwdGlvbiA9IGZyb21FdmVudDxDdXN0b21FdmVudDx7IHBsYW50SWQ/OiBzdHJpbmcgfT4+KFxuXHRcdFx0Z2xvYmFsVGhpcyxcblx0XHRcdCdhY3RpdmUtcGxhbnQtY2hhbmdlZCcsXG5cdFx0KS5waXBlKFxuXHRcdFx0bWFwKChldmVudCkgPT4gZXZlbnQuZGV0YWlsPy5wbGFudElkID8/ICcnKSxcblx0XHRcdGZpbHRlcigocGxhbnRJZCkgPT4gcGxhbnRJZC5sZW5ndGggPiAwKSxcblx0XHQpLnN1YnNjcmliZSgoKSA9PiB7XG5cdFx0XHR0aGlzLnJlc2V0VHJhbnNpZW50U3RhdGUoKTtcblx0XHRcdHRoaXMucmVmcmVzaCQubmV4dCgpO1xuXHRcdH0pO1xuXHR9XG5cblx0cHJpdmF0ZSBzdGFydEN1cnJlbnRWYWx1ZXNQb2xsaW5nKCk6IHZvaWQge1xuXHRcdHRoaXMuY3VycmVudFZhbHVlc1BvbGxpbmdTdWJzY3JpcHRpb24gPSBpbnRlcnZhbChcblx0XHRcdEVuZHBvaW50VGFibGVDb21wb25lbnQuQ1VSUkVOVF9WQUxVRVNfUE9MTF9NUyxcblx0XHQpXG5cdFx0XHQucGlwZShzd2l0Y2hNYXAoKCkgPT4gdGhpcy5sb2FkQ3VycmVudFZhbHVlcyh0aGlzLmxhdGVzdFJvd3MpKSlcblx0XHRcdC5zdWJzY3JpYmUoKTtcblx0fVxuXG5cdHByaXZhdGUgbG9hZEN1cnJlbnRWYWx1ZXMocm93czogUmVhZG9ubHlBcnJheTxXcml0YWJsZUVuZHBvaW50Um93Pik6IE9ic2VydmFibGU8dm9pZD4ge1xuXHRcdGNvbnN0IHVuaXF1ZURldmljZUlkcyA9IEFycmF5LmZyb20oXG5cdFx0XHRuZXcgU2V0KHJvd3MubWFwKChyb3cpID0+IHJvdy5kZXZpY2VJZCkuZmlsdGVyKChkZXZpY2VJZCkgPT4gZGV2aWNlSWQudHJpbSgpLmxlbmd0aCA+IDApKSxcblx0XHQpO1xuXG5cdFx0aWYgKHVuaXF1ZURldmljZUlkcy5sZW5ndGggPT09IDApIHtcblx0XHRcdHRoaXMuY3VycmVudFZhbHVlc0J5RGV2aWNlLmNsZWFyKCk7XG5cdFx0XHRyZXR1cm4gb2Yodm9pZCAwKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5kZXZpY2VBcGkuZ2V0Q3VycmVudFZhbHVlUG9pbnRzQnlEZXZpY2VJZHModW5pcXVlRGV2aWNlSWRzKS5waXBlKFxuXHRcdFx0dGFwKCh2YWx1ZXNCeURldmljZSkgPT4ge1xuXHRcdFx0XHR0aGlzLmN1cnJlbnRWYWx1ZXNCeURldmljZSA9IHZhbHVlc0J5RGV2aWNlO1xuXHRcdFx0fSksXG5cdFx0XHRtYXAoKCkgPT4gdm9pZCAwKSxcblx0XHRcdGNhdGNoRXJyb3IoKCkgPT4ge1xuXHRcdFx0XHR0aGlzLmN1cnJlbnRWYWx1ZXNCeURldmljZS5jbGVhcigpO1xuXHRcdFx0XHRyZXR1cm4gb2Yodm9pZCAwKTtcblx0XHRcdH0pLFxuXHRcdCk7XG5cdH1cblxuXHRwcml2YXRlIGdldFNlbWFudGljQ2FuZGlkYXRlcyhyb3c6IFdyaXRhYmxlRW5kcG9pbnRSb3cpOiBTZXQ8c3RyaW5nPiB7XG5cdFx0Y29uc3QgY21kS2V5ID0gdGhpcy5ub3JtYWxpemVLZXkocm93LmRhdGFwb2ludFNmZVR5cGUgfHwgcm93LmRhdGFwb2ludE5hbWUpO1xuXHRcdGNvbnN0IG5hbWVLZXkgPSB0aGlzLm5vcm1hbGl6ZUtleShyb3cuZGF0YXBvaW50TmFtZSk7XG5cdFx0Y29uc3Qgc3RhdGVGcm9tQ21kID0gdGhpcy5jb252ZXJ0Q21kVG9TdGF0ZShjbWRLZXkpO1xuXHRcdGNvbnN0IHN0YXRlRnJvbU5hbWUgPSB0aGlzLmNvbnZlcnRDbWRUb1N0YXRlKG5hbWVLZXkpO1xuXG5cdFx0cmV0dXJuIG5ldyBTZXQoW2NtZEtleSwgbmFtZUtleSwgc3RhdGVGcm9tQ21kLCBzdGF0ZUZyb21OYW1lXS5maWx0ZXIoKGtleSkgPT4ga2V5Lmxlbmd0aCA+IDApKTtcblx0fVxuXG5cdHByaXZhdGUgY29udmVydENtZFRvU3RhdGUodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHZhbHVlLnJlcGxhY2VBbGwoJ2NtZCcsICdzdGF0ZScpO1xuXHR9XG5cblx0cHJpdmF0ZSBub3JtYWxpemVLZXkodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XG5cdFx0aWYgKCF2YWx1ZSkge1xuXHRcdFx0cmV0dXJuICcnO1xuXHRcdH1cblxuXHRcdGxldCBub3JtYWxpemVkID0gdmFsdWUudG9Mb3dlckNhc2UoKTtcblx0XHRmb3IgKGNvbnN0IGNoYXIgb2YgWycgJywgJ18nLCAnLScsICcuJywgJy8nLCAnOiddKSB7XG5cdFx0XHRub3JtYWxpemVkID0gbm9ybWFsaXplZC5yZXBsYWNlQWxsKGNoYXIsICcnKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbm9ybWFsaXplZDtcblx0fVxuXG5cdHByaXZhdGUgc3luY1NlbGVjdGVkVmFsdWVzKHJvd3M6IFJlYWRvbmx5QXJyYXk8V3JpdGFibGVFbmRwb2ludFJvdz4pOiB2b2lkIHtcblx0XHRjb25zdCBhY3RpdmVSb3dLZXlzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cblx0XHRmb3IgKGNvbnN0IHJvdyBvZiByb3dzKSB7XG5cdFx0XHRjb25zdCByb3dLZXkgPSB0aGlzLmJ1aWxkUm93S2V5KHJvdyk7XG5cdFx0XHRhY3RpdmVSb3dLZXlzLmFkZChyb3dLZXkpO1xuXG5cdFx0XHRpZiAoIXRoaXMuc2VsZWN0ZWRWYWx1ZXNCeVJvdy5oYXMocm93S2V5KSkge1xuXHRcdFx0XHR0aGlzLnNlbGVjdGVkVmFsdWVzQnlSb3cuc2V0KHJvd0tleSwgcm93LmVudW1WYWx1ZXNbMF0gPz8gJycpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGZvciAoY29uc3Qgcm93S2V5IG9mIHRoaXMuc2VsZWN0ZWRWYWx1ZXNCeVJvdy5rZXlzKCkpIHtcblx0XHRcdGlmICghYWN0aXZlUm93S2V5cy5oYXMocm93S2V5KSkge1xuXHRcdFx0XHR0aGlzLnNlbGVjdGVkVmFsdWVzQnlSb3cuZGVsZXRlKHJvd0tleSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSByZXNldFRyYW5zaWVudFN0YXRlKCk6IHZvaWQge1xuXHRcdHRoaXMuc2VsZWN0ZWRWYWx1ZXNCeVJvdy5jbGVhcigpO1xuXHRcdHRoaXMuZXhlY3V0aW5nUm93cy5jbGVhcigpO1xuXHRcdHRoaXMuY2xlYXJBbGxSb3dGZWVkYmFjaygpO1xuXHRcdHRoaXMuY3VycmVudFZhbHVlc0J5RGV2aWNlLmNsZWFyKCk7XG5cdFx0dGhpcy5sYXRlc3RSb3dzID0gW107XG5cdFx0dGhpcy5sb2FkRXJyb3IgPSAnJztcblx0fVxuXG5cdHByaXZhdGUgY2xlYXJBbGxSb3dGZWVkYmFjaygpOiB2b2lkIHtcblx0XHRmb3IgKGNvbnN0IHRpbWVyIG9mIHRoaXMuZmVlZGJhY2tUaW1lckJ5Um93LnZhbHVlcygpKSB7XG5cdFx0XHRjbGVhclRpbWVvdXQodGltZXIpO1xuXHRcdH1cblxuXHRcdHRoaXMuZmVlZGJhY2tUaW1lckJ5Um93LmNsZWFyKCk7XG5cdFx0dGhpcy5mZWVkYmFja0J5Um93LmNsZWFyKCk7XG5cdH1cbn0iLCJAaWYgKGxvYWRFcnJvcikge1xuICA8cCBjbGFzcz1cImNhcmUtYWxlcnRcIiByb2xlPVwiYWxlcnRcIj57eyBsb2FkRXJyb3IgfX08L3A+XG59XG5cbkBpZiAocm9vbUdyb3VwcyQgfCBhc3luYzsgYXMgcm9vbUdyb3Vwcykge1xuICBAaWYgKHJvb21Hcm91cHMubGVuZ3RoID09PSAwKSB7XG4gICAgPHAgY2xhc3M9XCJjYXJlLWxvYWRpbmdcIj5OZXNzdW4gZW5kcG9pbnQgc2NyaXZpYmlsZSBkaXNwb25pYmlsZSBwZXIgbCdhcHBhcnRhbWVudG8gc2VsZXppb25hdG8uPC9wPlxuICB9IEBlbHNlIHtcbiAgICA8ZGl2IGNsYXNzPVwiZW5kcG9pbnQtdGFibGVfX2dyb3Vwc1wiPlxuICAgICAgQGZvciAoZ3JvdXAgb2Ygcm9vbUdyb3VwczsgdHJhY2sgdHJhY2tCeUdyb3VwKCRpbmRleCwgZ3JvdXApKSB7XG4gICAgICAgIDxzZWN0aW9uIGNsYXNzPVwiZW5kcG9pbnQtdGFibGVfX2dyb3VwXCI+XG4gICAgICAgICAgPGhlYWRlciBjbGFzcz1cImVuZHBvaW50LXRhYmxlX19yb29tLWhlYWRlclwiPlxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgPHAgY2xhc3M9XCJlbmRwb2ludC10YWJsZV9fcm9vbS1leWVicm93XCI+U3RhbnphPC9wPlxuICAgICAgICAgICAgICA8aDM+e3sgZ3JvdXAucm9vbU5hbWUgfX08L2gzPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9oZWFkZXI+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZW5kcG9pbnQtdGFibGVfX3dyYXBwZXJcIj5cbiAgICAgICAgICAgIDx0YWJsZSBjbGFzcz1cImVuZHBvaW50LXRhYmxlX190YWJsZVwiIGFyaWEtbGFiZWw9XCJUYWJlbGxhIGVuZHBvaW50IHt7IGdyb3VwLnJvb21OYW1lIH19XCI+XG4gICAgICAgICAgICAgIDx0aGVhZD5cbiAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICA8dGggc2NvcGU9XCJjb2xcIj5EaXNwb3NpdGl2bzwvdGg+XG4gICAgICAgICAgICAgICAgICA8dGggc2NvcGU9XCJjb2xcIj5UaXBvPC90aD5cbiAgICAgICAgICAgICAgICAgIDx0aCBzY29wZT1cImNvbFwiPkVuZHBvaW50PC90aD5cbiAgICAgICAgICAgICAgICAgIDx0aCBzY29wZT1cImNvbFwiPlN0YXRvIGF0dHVhbGU8L3RoPlxuICAgICAgICAgICAgICAgICAgPHRoIHNjb3BlPVwiY29sXCI+VmFsb3JlPC90aD5cbiAgICAgICAgICAgICAgICAgIDx0aCBzY29wZT1cImNvbFwiPkF6aW9uZTwvdGg+XG4gICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgPC90aGVhZD5cbiAgICAgICAgICAgICAgPHRib2R5PlxuICAgICAgICAgICAgICAgIEBmb3IgKHJvdyBvZiBncm91cC5yb3dzOyB0cmFjayB0cmFja0J5Um93KCRpbmRleCwgcm93KSkge1xuICAgICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImVuZHBvaW50LXRhYmxlX19kZXZpY2UtY2VsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgcm93LmRldmljZU5hbWUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImVuZHBvaW50LXRhYmxlX19kZXZpY2UtbWV0YVwiPklEIHt7IHJvdy5kZXZpY2VJZCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPHRkPnt7IGdldFR5cGVMYWJlbChyb3cuZGV2aWNlVHlwZSkgfX08L3RkPlxuICAgICAgICAgICAgICAgICAgICA8dGQgW2F0dHIudGl0bGVdPVwicm93LmRhdGFwb2ludE5hbWVcIj57eyBnZXRFbmRwb2ludExhYmVsKHJvdykgfX08L3RkPlxuICAgICAgICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJlbmRwb2ludC10YWJsZV9fY3VycmVudC12YWx1ZVwiPnt7IGdldEN1cnJlbnRWYWx1ZShyb3cpIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjYXJlLXNlbGVjdCBlbmRwb2ludC10YWJsZV9fc2VsZWN0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJnZXRTZWxlY3RlZFZhbHVlKHJvdylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzUm93RXhlY3V0aW5nKHJvdylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvblNlbGVjdGlvbkNoYW5nZShyb3csICRhbnkoJGV2ZW50LnRhcmdldCkudmFsdWUpXCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICBAZm9yIChlbnVtVmFsdWUgb2Ygcm93LmVudW1WYWx1ZXM7IHRyYWNrIGVudW1WYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIFt2YWx1ZV09XCJlbnVtVmFsdWVcIj57eyBlbnVtVmFsdWUgfX08L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJlbmRwb2ludC10YWJsZV9fYWN0aW9uLXdyYXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZW5kcG9pbnQtdGFibGVfX3dyaXRlLWJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc1Jvd0V4ZWN1dGluZyhyb3cpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uV3JpdGVSb3cocm93KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIFNjcml2aVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoZ2V0Um93RmVlZGJhY2socm93KTsgYXMgZmVlZGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImVuZHBvaW50LXRhYmxlX19mZWVkYmFjay1vdmVybGF5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZW5kcG9pbnQtdGFibGVfX2ZlZWRiYWNrLW92ZXJsYXktLXN1Y2Nlc3NdPVwiZmVlZGJhY2sudHlwZSA9PT0gJ3N1Y2Nlc3MnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZW5kcG9pbnQtdGFibGVfX2ZlZWRiYWNrLW92ZXJsYXktLWVycm9yXT1cImZlZWRiYWNrLnR5cGUgPT09ICdlcnJvcidcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZmVlZGJhY2subWVzc2FnZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgICAgIDwvdGFibGU+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvc2VjdGlvbj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgfVxufSBAZWxzZSB7XG4gIDxwIGNsYXNzPVwiY2FyZS1sb2FkaW5nXCI+Q2FyaWNhbWVudG8gZW5kcG9pbnQuLi48L3A+XG59Il0sIm1hcHBpbmdzIjoiO3NrQkE2QkEsR0FBYSxDQUFBQSxFQUFBLEVBQUFDLGNBQUEsR0FBQUMsQ0FBQSxPQUFnQixLQUFBRCxjQUFBLEdBQUFFLENBQUEsTUFBdkIsS0FBTyxDQUFBQyxDQUFnQixDQUNYQyxJQUFBLEVBQUFKLGNBQUEsR0FBQUMsQ0FBQSxNQUFPSSxDQUFBLENBQU9DLEVBQVUsR0FDeEJDLE9BQUEsRUFBQVAsY0FBQSxHQUFBQyxDQUFBLE1BQWtCSSxDQUFBLENBQU9HLEVBQVksR0FDckNDLGFBQUEsRUFBQVQsY0FBQSxHQUFBQyxDQUFBLE1BQWdCLEdBQUcsS0FBS00sT0FBTyxVQUMvQkcsY0FBQSxFQUFBVixjQUFBLEdBQUFDLENBQUEsTUFBaUIsR0FBRyxLQUFLTSxPQUFPLFdBRTFDSSx3QkFBQSxDQUF1QixDQUFBWCxjQUFBLEdBQUFFLENBQUEsS0FBQUYsQ0FBQSxpQkFBQUMsQ0FBQSxNQUM3QixNQUFPLE1BQUtXLG9CQUFBLENBQW9CLEVBQUdDLElBQUEsQ0FDbENDLENBQUEsQ0FBV0MsQ0FBQSxFQUFZLENBQUFmLGNBQUEsR0FBQUUsQ0FBQSxLQUFBRixDQUFBLGlCQUFBQyxDQUFBLGtCQUFLZSxjQUFBLENBQWVE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 \ No newline at end of file diff --git a/frontend/dist-instrumented/chunk-4QFEXKFV.js.map b/frontend/dist-instrumented/chunk-4QFEXKFV.js.map new file mode 100644 index 00000000..d97c7ddc --- /dev/null +++ b/frontend/dist-instrumented/chunk-4QFEXKFV.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["src/app/features/device-interaction/services/device-api.service.ts", "src/app/features/device-interaction/components/endpoint-table/endpoint-table.component.ts", "src/app/features/device-interaction/components/endpoint-table/endpoint-table.component.html"], + "sourcesContent": ["import { HttpClient } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\nimport {\n\tObservable,\n\tcatchError,\n\tforkJoin,\n\tmap,\n\tof,\n\tswitchMap,\n\tthrowError,\n\ttimeout,\n} from 'rxjs';\nimport { API_BASE_URL } from '../../../core/tokens/api-base-url.token';\nimport { Datapoint } from '../../apartment-monitor/models/datapoint.model';\nimport {\n\tPlantDatapointDto,\n\tPlantDeviceDto,\n\tPlantDto,\n} from '../../apartment-monitor/models/plant-response.model';\nimport { Room } from '../../apartment-monitor/models/room.model';\nimport { WritableEndpointRow } from '../models/writable-endpoint-row.model';\nimport type {\n\tDeviceValueDto,\n\tDeviceValuePointDto,\n\tWriteDatapointDto,\n} from '../models/write-datapoint-request.model';\nimport { resolveDeviceType } from '../../../shared/models/device-taxonomy';\n\n@Injectable({ providedIn: 'root' })\nexport class DeviceApiService {\n\tprivate readonly http = inject(HttpClient);\n\tprivate readonly baseUrl: string = inject(API_BASE_URL);\n\tprivate readonly plantEndpoint = `${this.baseUrl}/plant`;\n\tprivate readonly deviceEndpoint = `${this.baseUrl}/device`;\n\n\tpublic getWritableEndpointRows(): Observable {\n\t\treturn this.resolveActivePlantId().pipe(\n\t\t\tswitchMap((plantId) => this.fetchPlantById(plantId)),\n\t\t\tmap((plant) => this.mapWritableEndpointRows(plant)),\n\t\t);\n\t}\n\n\tpublic getRoom(roomId: string): Observable {\n\t\treturn this.resolveActivePlantId().pipe(\n\t\t\tswitchMap((plantId) => this.fetchPlantById(plantId)),\n\t\t\tmap((plant) => this.mapRoomFromPlant(plant, roomId)),\n\t\t);\n\t}\n\n\tpublic writeDatapointValue(dto: WriteDatapointDto): Observable {\n\t\treturn this.http.post<{ message: string; statusCode: number }>(this.deviceEndpoint, dto).pipe(\n\t\t\ttimeout(9000),\n\t\t\tmap((response) => {\n\t\t\t\tconst statusCode = typeof response?.statusCode === 'number' ? response.statusCode : 202;\n\t\t\t\tconst message = (response?.message ?? '').toLowerCase();\n\n\t\t\t\tconst hasFailureCode = statusCode >= 400;\n\t\t\t\tconst hasFailureMessage =\n\t\t\t\t\tmessage.includes('error') ||\n\t\t\t\t\tmessage.includes('failed') ||\n\t\t\t\t\tmessage.includes('fail') ||\n\t\t\t\t\tmessage.includes('impossibile');\n\n\t\t\t\tif (hasFailureCode || hasFailureMessage) {\n\t\t\t\t\tthrow new Error(response?.message ?? 'Write datapoint failed');\n\t\t\t\t}\n\n\t\t\t\treturn void 0;\n\t\t\t}),\n\t\t);\n\t}\n\n\tpublic getDatapointCurrentValuesByDeviceIds(\n\t\tdeviceIds: ReadonlyArray,\n\t): Observable> {\n\t\treturn this.getCurrentValuePointsByDeviceIds(deviceIds).pipe(\n\t\t\tmap((valuesByDevice) => {\n\t\t\t\tconst valuesByDatapoint = new Map();\n\n\t\t\t\tfor (const points of valuesByDevice.values()) {\n\t\t\t\t\tfor (const valuePoint of points) {\n\t\t\t\t\t\tif (!valuePoint?.datapointId) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvaluesByDatapoint.set(valuePoint.datapointId, valuePoint.value);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn valuesByDatapoint;\n\t\t\t}),\n\t\t);\n\t}\n\n\tpublic getCurrentValuePointsByDeviceIds(\n\t\tdeviceIds: ReadonlyArray,\n\t): Observable> {\n\t\tconst uniqueDeviceIds = Array.from(\n\t\t\tnew Set(\n\t\t\t\tdeviceIds\n\t\t\t\t\t.filter((deviceId): deviceId is string => typeof deviceId === 'string')\n\t\t\t\t\t.map((deviceId) => deviceId.trim())\n\t\t\t\t\t.filter((deviceId) => deviceId.length > 0),\n\t\t\t),\n\t\t);\n\n\t\tif (uniqueDeviceIds.length === 0) {\n\t\t\treturn of(new Map());\n\t\t}\n\n\t\tconst requests = uniqueDeviceIds.map((deviceId) =>\n\t\t\tthis.http\n\t\t\t\t.get(`${this.deviceEndpoint}/${encodeURIComponent(deviceId)}/value`)\n\t\t\t\t.pipe(catchError(() => of({ deviceId, values: [] }))),\n\t\t);\n\n\t\treturn forkJoin(requests).pipe(\n\t\t\tmap((responses) => {\n\t\t\t\tconst valuesByDevice = new Map();\n\n\t\t\t\tfor (const response of responses) {\n\t\t\t\t\tconst deviceId = typeof response?.deviceId === 'string' ? response.deviceId : '';\n\t\t\t\t\tif (!deviceId.trim()) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tvaluesByDevice.set(\n\t\t\t\t\t\tdeviceId,\n\t\t\t\t\t\t(response.values ?? []).filter(\n\t\t\t\t\t\t\t(point): point is DeviceValuePointDto =>\n\t\t\t\t\t\t\t\ttypeof point?.datapointId === 'string' &&\n\t\t\t\t\t\t\t\ttypeof point?.name === 'string',\n\t\t\t\t\t\t),\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn valuesByDevice;\n\t\t\t}),\n\t\t);\n\t}\n\n\tprivate resolveActivePlantId(): Observable {\n\t\tconst activePlantId = this.getActivePlantId();\n\t\tif (activePlantId) {\n\t\t\treturn of(activePlantId);\n\t\t}\n\n\t\treturn this.fetchAllPlants().pipe(\n\t\t\tmap((plants) => plants[0]?.id ?? null),\n\t\t\tswitchMap((plantId) => {\n\t\t\t\tif (!plantId) {\n\t\t\t\t\treturn throwError(() => new Error('No plants available'));\n\t\t\t\t}\n\n\t\t\t\tthis.setActivePlantId(plantId);\n\t\t\t\treturn of(plantId);\n\t\t\t}),\n\t\t);\n\t}\n\n\tprivate fetchPlantById(plantId: string): Observable {\n\t\treturn this.http.get(`${this.plantEndpoint}?plantid=${encodeURIComponent(plantId)}`);\n\t}\n\n\tprivate fetchAllPlants(): Observable {\n\t\treturn this.http\n\t\t\t.get(`${this.plantEndpoint}/all`)\n\t\t\t.pipe(\n\t\t\t\tmap((response) => (Array.isArray(response) ? response : [])),\n\t\t\t\tcatchError(() => of([])),\n\t\t\t);\n\t}\n\n\tprivate getActivePlantId(): string | null {\n\t\tconst storage = globalThis.localStorage as { getItem?: (key: string) => string | null } | undefined;\n\n\t\tif (storage && typeof storage.getItem === 'function') {\n\t\t\tconst plantId = storage.getItem('activePlantId');\n\t\t\treturn plantId?.trim() ? plantId : null;\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tprivate setActivePlantId(plantId: string): void {\n\t\tconst storage = globalThis.localStorage as { setItem?: (key: string, value: string) => void } | undefined;\n\t\tif (!storage || typeof storage.setItem !== 'function') {\n\t\t\treturn;\n\t\t}\n\n\t\tstorage.setItem('activePlantId', plantId);\n\t}\n\n\tprivate mapRoomFromPlant(plant: PlantDto, roomId: string): Room {\n\t\tconst sourceRoom = plant.rooms.find((room) => room.id === roomId);\n\n\t\tif (!sourceRoom) {\n\t\t\tthrow new Error(`Room ${roomId} not found in plant ${plant.id}`);\n\t\t}\n\n\t\treturn {\n\t\t\tid: sourceRoom.id,\n\t\t\tname: sourceRoom.name,\n\t\t\thasActiveAlarm: false,\n\t\t\tdevices: sourceRoom.devices.map((device) => {\n\t\t\t\tconst mappedDatapoints = this.mapDatapoints(device.datapoints);\n\n\t\t\t\treturn {\n\t\t\t\t\tid: device.id,\n\t\t\t\t\tname: device.name,\n\t\t\t\t\ttype: resolveDeviceType({\n\t\t\t\t\t\trawType: device.type,\n\t\t\t\t\t\trawSubType: device.subType,\n\t\t\t\t\t\trawName: device.name,\n\t\t\t\t\t\tsfeTypes: mappedDatapoints.map((datapoint) => datapoint.sfeType),\n\t\t\t\t\t}),\n\t\t\t\t\tstatus: device.type ? 'ONLINE' : 'UNKNOWN',\n\t\t\t\t\tactions: [],\n\t\t\t\t\tdatapoints: mappedDatapoints,\n\t\t\t\t};\n\t\t\t}),\n\t\t};\n\t}\n\n\tprivate mapDatapoints(datapoints: PlantDatapointDto[] | undefined): Datapoint[] {\n\t\treturn (datapoints ?? []).map((datapoint) => ({\n\t\t\tid: datapoint.id,\n\t\t\tname: datapoint.name,\n\t\t\treadable: datapoint.readable,\n\t\t\twritable: datapoint.writable,\n\t\t\tvalueType: datapoint.valueType,\n\t\t\tenum: Array.isArray(datapoint.enum) ? datapoint.enum : [],\n\t\t\tsfeType: datapoint.sfeType ?? '',\n\t\t}));\n\t}\n\n\tprivate mapWritableEndpointRows(plant: PlantDto): WritableEndpointRow[] {\n\t\tconst rows: WritableEndpointRow[] = [];\n\n\t\tfor (const room of plant.rooms) {\n\t\t\tconst visibleDevices = this.deduplicateRoomDevices(\n\t\t\t\troom.devices.filter((device) => !this.isEnergyMeasureDevice(device.type, device.subType)),\n\t\t\t);\n\n\t\t\tfor (const device of visibleDevices) {\n\t\t\t\tconst mappedDatapoints = this.mapDatapoints(device.datapoints);\n\t\t\t\tconst resolvedDeviceType = resolveDeviceType({\n\t\t\t\t\trawType: device.type,\n\t\t\t\t\trawSubType: device.subType,\n\t\t\t\t\trawName: device.name,\n\t\t\t\t\tsfeTypes: mappedDatapoints.map((datapoint) => datapoint.sfeType),\n\t\t\t\t});\n\n\t\t\t\tconst writableEnumDatapoints = mappedDatapoints.filter(\n\t\t\t\t\t(datapoint) => datapoint.writable && datapoint.enum.length > 0,\n\t\t\t\t);\n\n\t\t\t\tfor (const datapoint of writableEnumDatapoints) {\n\t\t\t\t\trows.push({\n\t\t\t\t\t\troomId: room.id,\n\t\t\t\t\t\troomName: room.name,\n\t\t\t\t\t\tdeviceId: device.id,\n\t\t\t\t\t\tdeviceName: device.name,\n\t\t\t\t\t\tdeviceType: resolvedDeviceType,\n\t\t\t\t\t\tdatapointId: datapoint.id,\n\t\t\t\t\t\tdatapointName: datapoint.name,\n\t\t\t\t\t\tdatapointSfeType: datapoint.sfeType,\n\t\t\t\t\t\tenumValues: datapoint.enum,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn rows;\n\t}\n\n\tprivate deduplicateRoomDevices(devices: ReadonlyArray): PlantDeviceDto[] {\n\t\tconst byName = new Map();\n\n\t\tfor (const device of devices) {\n\t\t\tconst key = this.normalizeDeviceName(device.name);\n\t\t\tconst current = byName.get(key);\n\n\t\t\tif (!current || this.getDevicePriorityScore(device) > this.getDevicePriorityScore(current)) {\n\t\t\t\tbyName.set(key, device);\n\t\t\t}\n\t\t}\n\n\t\treturn Array.from(byName.values());\n\t}\n\n\tprivate normalizeDeviceName(name: string): string {\n\t\treturn name.trim().toLowerCase();\n\t}\n\n\tprivate getDevicePriorityScore(device: PlantDeviceDto): number {\n\t\tconst normalizedType = device.type?.toUpperCase() ?? '';\n\t\tconst normalizedSubType = device.subType?.toUpperCase() ?? '';\n\n\t\tlet score = 0;\n\n\t\tif (normalizedType.includes('RADARDETECTOR')) {\n\t\t\tscore += 100;\n\t\t}\n\n\t\tif (normalizedSubType === 'SF_ACCESS') {\n\t\t\tscore += 60;\n\t\t}\n\n\t\tif (normalizedType === 'SS_AUTOMATION_ONOFF') {\n\t\t\tscore -= 20;\n\t\t}\n\n\t\tscore += device.datapoints?.length ?? 0;\n\t\treturn score;\n\t}\n\n\tprivate isEnergyMeasureDevice(rawType: string | undefined, rawSubType: string | undefined): boolean {\n\t\tconst normalizedType = rawType?.toUpperCase() ?? '';\n\t\tconst normalizedSubType = rawSubType?.toUpperCase() ?? '';\n\n\t\treturn normalizedType.startsWith('SS_ENERGY_MEASURE') || normalizedSubType === 'SF_ENERGY';\n\t}\n\n}\n", "import { AsyncPipe } from '@angular/common';\nimport { Component, OnDestroy, OnInit, inject } from '@angular/core';\nimport {\n\tEMPTY,\n\tObservable,\n\tSubject,\n\tSubscription,\n\tcatchError,\n\tfilter,\n\tfinalize,\n\tfromEvent,\n\tinterval,\n\tmap,\n\tof,\n\tstartWith,\n\tswitchMap,\n\ttap,\n} from 'rxjs';\nimport { DeviceType } from '../../models/device-type.enum';\nimport { EndpointRoomGroup } from '../../models/endpoint-room-group.model';\nimport { RowFeedback } from '../../models/row-feedback.model';\nimport { WritableEndpointRow } from '../../models/writable-endpoint-row.model';\nimport { DeviceApiService } from '../../services/device-api.service';\nimport type { DeviceValuePointDto } from '../../models/write-datapoint-request.model';\nimport { getDeviceTypeLabel, getEndpointLabel as resolveEndpointLabel } from '../../../../shared/models/device-taxonomy';\n\n@Component({\n\tselector: 'app-endpoint-table',\n\tstandalone: true,\n\timports: [AsyncPipe],\n\ttemplateUrl: './endpoint-table.component.html',\n\tstyleUrl: './endpoint-table.component.css',\n})\nexport class EndpointTableComponent implements OnInit, OnDestroy {\n\tprivate static readonly CURRENT_VALUES_POLL_MS = 15000;\n\n\tprivate readonly deviceApi = inject(DeviceApiService);\n\tprivate readonly refresh$ = new Subject();\n\tprivate readonly selectedValuesByRow = new Map();\n\tprivate readonly executingRows = new Set();\n\tprivate readonly feedbackByRow = new Map();\n\tprivate readonly feedbackTimerByRow = new Map>();\n\tprivate currentValuesByDevice = new Map();\n\tprivate latestRows: WritableEndpointRow[] = [];\n\tprivate activePlantChangeSubscription: Subscription | null = null;\n\tprivate currentValuesPollingSubscription: Subscription | null = null;\n\n\tpublic readonly roomGroups$: Observable = this.refresh$.pipe(\n\t\tstartWith(void 0),\n\t\tswitchMap(() => this.deviceApi.getWritableEndpointRows().pipe(\n\t\t\ttap(() => {\n\t\t\t\tthis.loadError = '';\n\t\t\t}),\n\t\t\ttap((rows) => {\n\t\t\t\tthis.latestRows = rows;\n\t\t\t\tthis.syncSelectedValues(rows);\n\t\t\t}),\n\t\t\tswitchMap((rows) =>\n\t\t\t\tthis.loadCurrentValues(rows).pipe(map(() => this.groupRowsByRoom(rows))),\n\t\t\t),\n\t\t)),\n\t\tcatchError(() => {\n\t\t\tthis.loadError = 'Impossibile caricare i dispositivi con endpoint.';\n\t\t\treturn of([]);\n\t\t}),\n\t);\n\n\tpublic loadError = '';\n\n\tpublic ngOnInit(): void {\n\t\tthis.subscribeToActivePlantChanges();\n\t\tthis.startCurrentValuesPolling();\n\t}\n\n\tpublic ngOnDestroy(): void {\n\t\tthis.activePlantChangeSubscription?.unsubscribe();\n\t\tthis.currentValuesPollingSubscription?.unsubscribe();\n\t\tthis.clearAllRowFeedback();\n\t}\n\n\tpublic trackByGroup(_: number, group: EndpointRoomGroup): string {\n\t\treturn group.roomId;\n\t}\n\n\tpublic trackByRow(_: number, row: WritableEndpointRow): string {\n\t\treturn this.buildRowKey(row);\n\t}\n\n\tpublic getTypeLabel(type: DeviceType): string {\n\t\treturn getDeviceTypeLabel(type);\n\t}\n\n\tpublic getEndpointLabel(row: WritableEndpointRow): string {\n\t\treturn resolveEndpointLabel(row.datapointSfeType);\n\t}\n\n\tpublic getCurrentValue(row: WritableEndpointRow): string {\n\t\tconst valuePoints = this.currentValuesByDevice.get(row.deviceId) ?? [];\n\n\t\tconst exactMatch = valuePoints.find((point) => point.datapointId === row.datapointId);\n\t\tif (exactMatch?.value !== undefined && exactMatch?.value !== null) {\n\t\t\treturn String(exactMatch.value);\n\t\t}\n\n\t\tconst semanticCandidates = this.getSemanticCandidates(row);\n\t\tconst semanticMatch = valuePoints.find((point) =>\n\t\t\tsemanticCandidates.has(this.normalizeKey(point.name)),\n\t\t);\n\t\tif (semanticMatch?.value !== undefined && semanticMatch?.value !== null) {\n\t\t\treturn String(semanticMatch.value);\n\t\t}\n\n\t\tconst firstAvailable = valuePoints.find(\n\t\t\t(point) => point.value !== undefined && point.value !== null,\n\t\t);\n\t\tif (firstAvailable) {\n\t\t\treturn String(firstAvailable.value);\n\t\t}\n\n\t\treturn '-';\n\t}\n\n\tpublic getSelectedValue(row: WritableEndpointRow): string {\n\t\tconst rowKey = this.buildRowKey(row);\n\t\tconst currentValue = this.selectedValuesByRow.get(rowKey);\n\n\t\tif (currentValue) {\n\t\t\treturn currentValue;\n\t\t}\n\n\t\treturn row.enumValues[0] ?? '';\n\t}\n\n\tpublic onSelectionChange(row: WritableEndpointRow, value: string): void {\n\t\tthis.selectedValuesByRow.set(this.buildRowKey(row), value);\n\t}\n\n\tpublic isRowExecuting(row: WritableEndpointRow): boolean {\n\t\treturn this.executingRows.has(this.buildRowKey(row));\n\t}\n\n\tpublic getRowFeedback(row: WritableEndpointRow): RowFeedback | null {\n\t\treturn this.feedbackByRow.get(this.buildRowKey(row)) ?? null;\n\t}\n\n\tpublic onWriteRow(row: WritableEndpointRow): void {\n\t\tconst rowKey = this.buildRowKey(row);\n\n\t\tif (this.executingRows.has(rowKey)) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.clearRowFeedback(rowKey);\n\n\t\tconst selectedValue = this.getSelectedValue(row);\n\t\tif (!selectedValue) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.executingRows.add(rowKey);\n\n\t\tthis.deviceApi.writeDatapointValue({ datapointId: row.datapointId, value: selectedValue }).pipe(\n\t\t\ttap(() => {\n\t\t\t\tthis.setRowFeedback(rowKey, 'success', 'Comando inviato correttamente.');\n\t\t\t\tthis.refresh$.next();\n\t\t\t}),\n\t\t\tcatchError(() => {\n\t\t\t\tthis.setRowFeedback(rowKey, 'error', 'Errore invio comando.');\n\t\t\t\treturn EMPTY;\n\t\t\t}),\n\t\t\tfinalize(() => {\n\t\t\t\tthis.executingRows.delete(rowKey);\n\t\t\t}),\n\t\t).subscribe();\n\t}\n\n\tprivate groupRowsByRoom(rows: WritableEndpointRow[]): EndpointRoomGroup[] {\n\t\tconst groupsById = new Map();\n\n\t\tfor (const row of rows) {\n\t\t\tconst existingGroup = groupsById.get(row.roomId);\n\n\t\t\tif (existingGroup) {\n\t\t\t\texistingGroup.rows.push(row);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tgroupsById.set(row.roomId, {\n\t\t\t\troomId: row.roomId,\n\t\t\t\troomName: row.roomName,\n\t\t\t\trows: [row],\n\t\t\t});\n\t\t}\n\n\t\treturn Array.from(groupsById.values());\n\t}\n\n\tprivate buildRowKey(row: WritableEndpointRow): string {\n\t\treturn `${row.roomId}::${row.deviceId}::${row.datapointId}`;\n\t}\n\n\tprivate clearRowFeedback(rowKey: string): void {\n\t\tthis.feedbackByRow.delete(rowKey);\n\n\t\tconst existingTimer = this.feedbackTimerByRow.get(rowKey);\n\t\tif (existingTimer) {\n\t\t\tclearTimeout(existingTimer);\n\t\t\tthis.feedbackTimerByRow.delete(rowKey);\n\t\t}\n\t}\n\n\tprivate setRowFeedback(rowKey: string, type: RowFeedback['type'], message: string): void {\n\t\tthis.clearRowFeedback(rowKey);\n\t\tthis.feedbackByRow.set(rowKey, { type, message });\n\n\t\tconst timer = setTimeout(() => {\n\t\t\tthis.feedbackByRow.delete(rowKey);\n\t\t\tthis.feedbackTimerByRow.delete(rowKey);\n\t\t}, 5000);\n\n\t\tthis.feedbackTimerByRow.set(rowKey, timer);\n\t}\n\n\tprivate subscribeToActivePlantChanges(): void {\n\t\tif (typeof globalThis.addEventListener !== 'function') {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.activePlantChangeSubscription = fromEvent>(\n\t\t\tglobalThis,\n\t\t\t'active-plant-changed',\n\t\t).pipe(\n\t\t\tmap((event) => event.detail?.plantId ?? ''),\n\t\t\tfilter((plantId) => plantId.length > 0),\n\t\t).subscribe(() => {\n\t\t\tthis.resetTransientState();\n\t\t\tthis.refresh$.next();\n\t\t});\n\t}\n\n\tprivate startCurrentValuesPolling(): void {\n\t\tthis.currentValuesPollingSubscription = interval(\n\t\t\tEndpointTableComponent.CURRENT_VALUES_POLL_MS,\n\t\t)\n\t\t\t.pipe(switchMap(() => this.loadCurrentValues(this.latestRows)))\n\t\t\t.subscribe();\n\t}\n\n\tprivate loadCurrentValues(rows: ReadonlyArray): Observable {\n\t\tconst uniqueDeviceIds = Array.from(\n\t\t\tnew Set(rows.map((row) => row.deviceId).filter((deviceId) => deviceId.trim().length > 0)),\n\t\t);\n\n\t\tif (uniqueDeviceIds.length === 0) {\n\t\t\tthis.currentValuesByDevice.clear();\n\t\t\treturn of(void 0);\n\t\t}\n\n\t\treturn this.deviceApi.getCurrentValuePointsByDeviceIds(uniqueDeviceIds).pipe(\n\t\t\ttap((valuesByDevice) => {\n\t\t\t\tthis.currentValuesByDevice = valuesByDevice;\n\t\t\t}),\n\t\t\tmap(() => void 0),\n\t\t\tcatchError(() => {\n\t\t\t\tthis.currentValuesByDevice.clear();\n\t\t\t\treturn of(void 0);\n\t\t\t}),\n\t\t);\n\t}\n\n\tprivate getSemanticCandidates(row: WritableEndpointRow): Set {\n\t\tconst cmdKey = this.normalizeKey(row.datapointSfeType || row.datapointName);\n\t\tconst nameKey = this.normalizeKey(row.datapointName);\n\t\tconst stateFromCmd = this.convertCmdToState(cmdKey);\n\t\tconst stateFromName = this.convertCmdToState(nameKey);\n\n\t\treturn new Set([cmdKey, nameKey, stateFromCmd, stateFromName].filter((key) => key.length > 0));\n\t}\n\n\tprivate convertCmdToState(value: string): string {\n\t\treturn value.replaceAll('cmd', 'state');\n\t}\n\n\tprivate normalizeKey(value: string | undefined): string {\n\t\tif (!value) {\n\t\t\treturn '';\n\t\t}\n\n\t\tlet normalized = value.toLowerCase();\n\t\tfor (const char of [' ', '_', '-', '.', '/', ':']) {\n\t\t\tnormalized = normalized.replaceAll(char, '');\n\t\t}\n\n\t\treturn normalized;\n\t}\n\n\tprivate syncSelectedValues(rows: ReadonlyArray): void {\n\t\tconst activeRowKeys = new Set();\n\n\t\tfor (const row of rows) {\n\t\t\tconst rowKey = this.buildRowKey(row);\n\t\t\tactiveRowKeys.add(rowKey);\n\n\t\t\tif (!this.selectedValuesByRow.has(rowKey)) {\n\t\t\t\tthis.selectedValuesByRow.set(rowKey, row.enumValues[0] ?? '');\n\t\t\t}\n\t\t}\n\n\t\tfor (const rowKey of this.selectedValuesByRow.keys()) {\n\t\t\tif (!activeRowKeys.has(rowKey)) {\n\t\t\t\tthis.selectedValuesByRow.delete(rowKey);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate resetTransientState(): void {\n\t\tthis.selectedValuesByRow.clear();\n\t\tthis.executingRows.clear();\n\t\tthis.clearAllRowFeedback();\n\t\tthis.currentValuesByDevice.clear();\n\t\tthis.latestRows = [];\n\t\tthis.loadError = '';\n\t}\n\n\tprivate clearAllRowFeedback(): void {\n\t\tfor (const timer of this.feedbackTimerByRow.values()) {\n\t\t\tclearTimeout(timer);\n\t\t}\n\n\t\tthis.feedbackTimerByRow.clear();\n\t\tthis.feedbackByRow.clear();\n\t}\n}", "@if (loadError) {\n

{{ loadError }}

\n}\n\n@if (roomGroups$ | async; as roomGroups) {\n @if (roomGroups.length === 0) {\n

Nessun endpoint scrivibile disponibile per l'appartamento selezionato.

\n } @else {\n
\n @for (group of roomGroups; track trackByGroup($index, group)) {\n
\n
\n
\n

Stanza

\n

{{ group.roomName }}

\n
\n
\n\n
\n \n \n \n \n \n \n \n \n \n \n \n \n @for (row of group.rows; track trackByRow($index, row)) {\n \n \n \n \n \n \n \n \n }\n \n
DispositivoTipoEndpointStato attualeValoreAzione
\n
\n {{ row.deviceName }}\n ID {{ row.deviceId }}\n
\n
{{ getTypeLabel(row.deviceType) }}{{ getEndpointLabel(row) }}\n {{ getCurrentValue(row) }}\n \n \n @for (enumValue of row.enumValues; track enumValue) {\n \n }\n \n \n
\n \n Scrivi\n \n\n @if (getRowFeedback(row); as feedback) {\n
\n
\n
\n
\n }\n
\n }\n} @else {\n

Caricamento endpoint...

\n}"], + "mappings": "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", + "names": ["DeviceApiService", "http", "inject", "HttpClient", "baseUrl", "API_BASE_URL", "plantEndpoint", "deviceEndpoint", "getWritableEndpointRows", "resolveActivePlantId", "pipe", "switchMap", "plantId", "fetchPlantById", "map", "plant", "mapWritableEndpointRows", "getRoom", "roomId", "mapRoomFromPlant", "writeDatapointValue", "dto", "post", "timeout", "response", "statusCode", "message", "toLowerCase", "hasFailureCode", "hasFailureMessage", "includes", "Error", "getDatapointCurrentValuesByDeviceIds", "deviceIds", "getCurrentValuePointsByDeviceIds", "valuesByDevice", "valuesByDatapoint", "Map", "points", "values", "valuePoint", "datapointId", "set", "value", "uniqueDeviceIds", "Array", "from", "Set", "filter", "deviceId", "trim", "length", "of", "requests", "get", "encodeURIComponent", "catchError", "forkJoin", "responses", "point", "name", "activePlantId", "getActivePlantId", "fetchAllPlants", "plants", "id", "setActivePlantId", "throwError", "isArray", "storage", "globalThis", "localStorage", "getItem", "setItem", "sourceRoom", "rooms", "find", "room", "hasActiveAlarm", "devices", "device", "mappedDatapoints", "mapDatapoints", "datapoints", "type", "resolveDeviceType", "rawType", "rawSubType", "subType", "rawName", "sfeTypes", "datapoint", "sfeType", "status", "actions", "readable", "writable", "valueType", "enum", "rows", "visibleDevices", "deduplicateRoomDevices", "isEnergyMeasureDevice", "resolvedDeviceType", "writableEnumDatapoints", "push", "roomName", "deviceName", "deviceType", "datapointName", "datapointSfeType", "enumValues", "byName", "key", "normalizeDeviceName", "current", "getDevicePriorityScore", "normalizedType", "toUpperCase", "normalizedSubType", "score", "startsWith", "factory", "\u0275fac", "providedIn", "\u0275\u0275domElementStart", "\u0275\u0275text", "\u0275\u0275domElementEnd", "\u0275\u0275advance", "\u0275\u0275textInterpolate", "ctx_r0", "loadError", "\u0275\u0275domProperty", "enumValue_r4", "\u0275\u0275classProp", "feedback_r5", "type", "\u0275\u0275textInterpolate1", "message", "\u0275\u0275domListener", "$event", "row_r3", "\u0275\u0275restoreView", "_r2", "$implicit", "\u0275\u0275nextContext", "\u0275\u0275resetView", "onSelectionChange", "target", "value", "\u0275\u0275repeaterCreate", "EndpointTableComponent_Conditional_1_Conditional_1_For_2_For_25_For_17_Template", "\u0275\u0275repeaterTrackByIdentity", "onWriteRow", "\u0275\u0275conditionalCreate", "EndpointTableComponent_Conditional_1_Conditional_1_For_2_For_25_Conditional_22_Template", "deviceName", "deviceId", "getTypeLabel", "deviceType", "getEndpointLabel", "getCurrentValue", "getSelectedValue", "isRowExecuting", "\u0275\u0275repeater", "enumValues", "\u0275\u0275conditional", "tmp_33_0", "getRowFeedback", "EndpointTableComponent_Conditional_1_Conditional_1_For_2_For_25_Template", "\u0275\u0275componentInstance", "trackByRow", "group_r6", "roomName", "\u0275\u0275interpolate1", "rows", "EndpointTableComponent_Conditional_1_Conditional_1_For_2_Template", "trackByGroup", "roomGroups_r7", "EndpointTableComponent_Conditional_1_Conditional_0_Template", "EndpointTableComponent_Conditional_1_Conditional_1_Template", "ctx", "length", "EndpointTableComponent", "CURRENT_VALUES_POLL_MS", "deviceApi", "inject", "DeviceApiService", "refresh$", "Subject", "selectedValuesByRow", "Map", "executingRows", "Set", "feedbackByRow", "feedbackTimerByRow", "currentValuesByDevice", "latestRows", "activePlantChangeSubscription", "currentValuesPollingSubscription", "roomGroups$", "pipe", "startWith", "switchMap", "getWritableEndpointRows", "tap", "syncSelectedValues", "loadCurrentValues", "map", "groupRowsByRoom", "catchError", "of", "ngOnInit", "subscribeToActivePlantChanges", "startCurrentValuesPolling", "ngOnDestroy", "unsubscribe", "clearAllRowFeedback", "_", "group", "roomId", "row", "buildRowKey", "getDeviceTypeLabel", "resolveEndpointLabel", "datapointSfeType", "valuePoints", "get", "exactMatch", "find", "point", "datapointId", "undefined", "String", "semanticCandidates", "getSemanticCandidates", "semanticMatch", "has", "normalizeKey", "name", "firstAvailable", "rowKey", "currentValue", "set", "clearRowFeedback", "selectedValue", "add", "writeDatapointValue", "setRowFeedback", "next", "EMPTY", "finalize", "delete", "subscribe", "groupsById", "existingGroup", "push", "Array", "from", "values", "existingTimer", "clearTimeout", "timer", "setTimeout", "globalThis", "addEventListener", "fromEvent", "event", "detail", "plantId", "filter", "resetTransientState", "interval", "uniqueDeviceIds", "trim", "clear", "getCurrentValuePointsByDeviceIds", "valuesByDevice", "cmdKey", "datapointName", "nameKey", "stateFromCmd", "convertCmdToState", "stateFromName", "key", "replaceAll", "normalized", "toLowerCase", "char", "activeRowKeys", "keys", "selectors", "decls", "vars", "consts", "template", "rf", "EndpointTableComponent_Conditional_0_Template", "EndpointTableComponent_Conditional_1_Template", "\u0275\u0275conditionalBranchCreate", "EndpointTableComponent_Conditional_3_Template", "tmp_1_0", "\u0275\u0275pipeBind1", "AsyncPipe", "styles"] +} diff --git a/frontend/dist-instrumented/chunk-4WA7JXUW.js b/frontend/dist-instrumented/chunk-4WA7JXUW.js new file mode 100644 index 00000000..9f3c5638 --- /dev/null +++ b/frontend/dist-instrumented/chunk-4WA7JXUW.js @@ -0,0 +1,4 @@ +function cov_1d6wj97rj0(){var path="/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-4WA7JXUW.js";var hash="2fdd1db2cff6d786ed118e9261f0eeab51ea77f8";var global=new Function("return this")();var gcv="__coverage__";var coverageData={path:"/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-4WA7JXUW.js",statementMap:{"0":{start:{line:1,column:616},end:{line:1,column:627}},"1":{start:{line:1,column:623},end:{line:1,column:627}},"2":{start:{line:1,column:645},end:{line:1,column:957}},"3":{start:{line:1,column:659},end:{line:1,column:662}},"4":{start:{line:1,column:663},end:{line:1,column:956}},"5":{start:{line:1,column:838},end:{line:1,column:852}},"6":{start:{line:1,column:855},end:{line:1,column:858}},"7":{start:{line:1,column:859},end:{line:1,column:889}},"8":{start:{line:1,column:957},end:{line:1,column:1042}},"9":{start:{line:1,column:971},end:{line:1,column:982}},"10":{start:{line:1,column:983},end:{line:1,column:1041}},"11":{start:{line:1,column:1060},end:{line:1,column:1331}},"12":{start:{line:1,column:1349},end:{line:1,column:2164}},"13":{start:{line:1,column:1363},end:{line:1,column:1366}},"14":{start:{line:1,column:1367},end:{line:1,column:2163}},"15":{start:{line:1,column:1631},end:{line:1,column:1636}},"16":{start:{line:1,column:1642},end:{line:1,column:1645}},"17":{start:{line:1,column:1646},end:{line:1,column:1674}},"18":{start:{line:1,column:1974},end:{line:1,column:1979}},"19":{start:{line:1,column:1985},end:{line:1,column:1988}},"20":{start:{line:1,column:1989},end:{line:1,column:2017}},"21":{start:{line:1,column:2081},end:{line:1,column:2086}},"22":{start:{line:1,column:2092},end:{line:1,column:2095}},"23":{start:{line:1,column:2096},end:{line:1,column:2125}},"24":{start:{line:1,column:2164},end:{line:1,column:2236}},"25":{start:{line:1,column:2178},end:{line:1,column:2179}},"26":{start:{line:1,column:2180},end:{line:1,column:2235}},"27":{start:{line:1,column:2244},end:{line:1,column:9544}},"28":{start:{line:1,column:2264},end:{line:1,column:2267}},"29":{start:{line:1,column:2279},end:{line:1,column:2282}},"30":{start:{line:1,column:2301},end:{line:1,column:2308}},"31":{start:{line:1,column:2328},end:{line:1,column:2357}},"32":{start:{line:1,column:2375},end:{line:1,column:2407}},"33":{start:{line:1,column:2432},end:{line:1,column:2456}},"34":{start:{line:1,column:2457},end:{line:1,column:2521}},"35":{start:{line:1,column:2534},end:{line:1,column:2557}},"36":{start:{line:1,column:2575},end:{line:1,column:2604}},"37":{start:{line:1,column:2587},end:{line:1,column:2603}},"38":{start:{line:1,column:2622},end:{line:1,column:9531}},"39":{start:{line:1,column:8796},end:{line:1,column:9494}},"40":{start:{line:1,column:9370},end:{line:1,column:9493}},"41":{start:{line:1,column:9532},end:{line:1,column:9540}},"42":{start:{line:1,column:9552},end:{line:1,column:9565}},"43":{start:{line:1,column:9583},end:{line:1,column:9757}},"44":{start:{line:1,column:9597},end:{line:1,column:9600}},"45":{start:{line:1,column:9601},end:{line:1,column:9756}},"46":{start:{line:1,column:9639},end:{line:1,column:9644}},"47":{start:{line:1,column:9650},end:{line:1,column:9653}},"48":{start:{line:1,column:9654},end:{line:1,column:9679}},"49":{start:{line:1,column:9775},end:{line:1,column:9895}},"50":{start:{line:1,column:9789},end:{line:1,column:9792}},"51":{start:{line:1,column:9793},end:{line:1,column:9894}},"52":{start:{line:1,column:9831},end:{line:1,column:9836}},"53":{start:{line:1,column:9842},end:{line:1,column:9845}},"54":{start:{line:1,column:9846},end:{line:1,column:9872}},"55":{start:{line:1,column:9913},end:{line:1,column:9953}},"56":{start:{line:1,column:9971},end:{line:1,column:10027}},"57":{start:{line:1,column:10045},end:{line:1,column:10275}},"58":{start:{line:1,column:10161},end:{line:1,column:10164}},"59":{start:{line:1,column:10165},end:{line:1,column:10274}},"60":{start:{line:1,column:10293},end:{line:1,column:10336}},"61":{start:{line:1,column:10354},end:{line:1,column:10413}},"62":{start:{line:1,column:10431},end:{line:1,column:10667}},"63":{start:{line:1,column:10547},end:{line:1,column:10550}},"64":{start:{line:1,column:10551},end:{line:1,column:10666}},"65":{start:{line:1,column:10685},end:{line:1,column:10728}},"66":{start:{line:1,column:10746},end:{line:1,column:10805}},"67":{start:{line:1,column:10823},end:{line:1,column:11061}},"68":{start:{line:1,column:10939},end:{line:1,column:10942}},"69":{start:{line:1,column:10943},end:{line:1,column:11060}},"70":{start:{line:1,column:11079},end:{line:1,column:11190}},"71":{start:{line:1,column:11208},end:{line:1,column:11321}},"72":{start:{line:1,column:11328},end:{line:1,column:20044}},"73":{start:{line:1,column:11352},end:{line:1,column:11359}},"74":{start:{line:1,column:11367},end:{line:1,column:11372}},"75":{start:{line:1,column:11384},end:{line:1,column:11387}},"76":{start:{line:1,column:11400},end:{line:1,column:11403}},"77":{start:{line:1,column:11417},end:{line:1,column:11420}},"78":{start:{line:1,column:11434},end:{line:1,column:11439}},"79":{start:{line:1,column:11445},end:{line:1,column:11594}},"80":{start:{line:1,column:11604},end:{line:1,column:11694}},"81":{start:{line:1,column:11703},end:{line:1,column:11752}},"82":{start:{line:1,column:11769},end:{line:1,column:11896}},"83":{start:{line:1,column:11857},end:{line:1,column:11894}},"84":{start:{line:1,column:11912},end:{line:1,column:11936}},"85":{start:{line:1,column:11951},end:{line:1,column:11974}},"86":{start:{line:1,column:11992},end:{line:1,column:12021}},"87":{start:{line:1,column:12004},end:{line:1,column:12020}},"88":{start:{line:1,column:12039},end:{line:1,column:20031}},"89":{start:{line:1,column:12110},end:{line:1,column:12169}},"90":{start:{line:1,column:12137},end:{line:1,column:12168}},"91":{start:{line:1,column:17740},end:{line:1,column:19958}},"92":{start:{line:1,column:18089},end:{line:1,column:18106}},"93":{start:{line:1,column:20032},end:{line:1,column:20040}},"94":{start:{line:1,column:20052},end:{line:1,column:24406}},"95":{start:{line:1,column:20075},end:{line:1,column:20087}},"96":{start:{line:1,column:20093},end:{line:1,column:20105}},"97":{start:{line:1,column:20113},end:{line:1,column:20116}},"98":{start:{line:1,column:20131},end:{line:1,column:20149}},"99":{start:{line:1,column:20167},end:{line:1,column:20196}},"100":{start:{line:1,column:20179},end:{line:1,column:20195}},"101":{start:{line:1,column:20214},end:{line:1,column:24393}},"102":{start:{line:1,column:23243},end:{line:1,column:24356}},"103":{start:{line:1,column:24070},end:{line:1,column:24092}},"104":{start:{line:1,column:24394},end:{line:1,column:24402}},"105":{start:{line:1,column:24414},end:{line:1,column:24692}},"106":{start:{line:1,column:24456},end:{line:1,column:24464}},"107":{start:{line:1,column:24465},end:{line:1,column:24529}},"108":{start:{line:1,column:24520},end:{line:1,column:24529}},"109":{start:{line:1,column:24529},end:{line:1,column:24563}},"110":{start:{line:1,column:24533},end:{line:1,column:24547}},"111":{start:{line:1,column:24554},end:{line:1,column:24562}},"112":{start:{line:1,column:24581},end:{line:1,column:24610}},"113":{start:{line:1,column:24593},end:{line:1,column:24609}},"114":{start:{line:1,column:24629},end:{line:1,column:24679}},"115":{start:{line:1,column:24680},end:{line:1,column:24688}},"116":{start:{line:1,column:24700},end:{line:1,column:25216}},"117":{start:{line:1,column:24719},end:{line:1,column:24724}},"118":{start:{line:1,column:24733},end:{line:1,column:24738}},"119":{start:{line:1,column:24762},end:{line:1,column:24767}},"120":{start:{line:1,column:24779},end:{line:1,column:24824}},"121":{start:{line:1,column:24839},end:{line:1,column:24988}},"122":{start:{line:1,column:24898},end:{line:1,column:24986}},"123":{start:{line:1,column:25003},end:{line:1,column:25087}},"124":{start:{line:1,column:25105},end:{line:1,column:25134}},"125":{start:{line:1,column:25117},end:{line:1,column:25133}},"126":{start:{line:1,column:25153},end:{line:1,column:25203}},"127":{start:{line:1,column:25204},end:{line:1,column:25212}},"128":{start:{line:1,column:25223},end:{line:1,column:25333}},"129":{start:{line:1,column:25236},end:{line:1,column:25324}},"130":{start:{line:1,column:25351},end:{line:1,column:25470}},"131":{start:{line:1,column:25365},end:{line:1,column:25368}},"132":{start:{line:1,column:25369},end:{line:1,column:25469}},"133":{start:{line:1,column:25420},end:{line:1,column:25425}},"134":{start:{line:1,column:25431},end:{line:1,column:25434}},"135":{start:{line:1,column:25435},end:{line:1,column:25463}},"136":{start:{line:1,column:25470},end:{line:1,column:25487}},"137":{start:{line:1,column:25505},end:{line:1,column:25601}},"138":{start:{line:1,column:25619},end:{line:1,column:25744}},"139":{start:{line:1,column:25633},end:{line:1,column:25636}},"140":{start:{line:1,column:25637},end:{line:1,column:25743}},"141":{start:{line:1,column:25693},end:{line:1,column:25698}},"142":{start:{line:1,column:25704},end:{line:1,column:25708}},"143":{start:{line:1,column:25709},end:{line:1,column:25737}},"144":{start:{line:1,column:25744},end:{line:1,column:25788}},"145":{start:{line:1,column:25758},end:{line:1,column:25761}},"146":{start:{line:1,column:25762},end:{line:1,column:25787}},"147":{start:{line:1,column:25806},end:{line:1,column:25902}},"148":{start:{line:1,column:25868},end:{line:1,column:25871}},"149":{start:{line:1,column:25872},end:{line:1,column:25901}},"150":{start:{line:1,column:25910},end:{line:2,column:96}},"151":{start:{line:1,column:25932},end:{line:1,column:25937}},"152":{start:{line:1,column:25954},end:{line:1,column:25967}},"153":{start:{line:1,column:25991},end:{line:1,column:25998}},"154":{start:{line:1,column:26011},end:{line:1,column:26018}},"155":{start:{line:1,column:26029},end:{line:1,column:26036}},"156":{start:{line:1,column:26054},end:{line:1,column:26059}},"157":{start:{line:1,column:26095},end:{line:1,column:26241}},"158":{start:{line:1,column:26139},end:{line:1,column:26162}},"159":{start:{line:1,column:26170},end:{line:1,column:26238}},"160":{start:{line:1,column:26259},end:{line:1,column:26288}},"161":{start:{line:1,column:26307},end:{line:1,column:26336}},"162":{start:{line:1,column:26353},end:{line:1,column:26684}},"163":{start:{line:1,column:26425},end:{line:1,column:26575}},"164":{start:{line:1,column:26587},end:{line:1,column:26681}},"165":{start:{line:1,column:26702},end:{line:1,column:26841}},"166":{start:{line:1,column:26750},end:{line:1,column:26777}},"167":{start:{line:1,column:26789},end:{line:1,column:26838}},"168":{start:{line:1,column:26859},end:{line:1,column:26916}},"169":{start:{line:1,column:26934},end:{line:1,column:26963}},"170":{start:{line:1,column:26946},end:{line:1,column:26962}},"171":{start:{line:1,column:26981},end:{line:2,column:83}},"172":{start:{line:1,column:27056},end:{line:1,column:27128}},"173":{start:{line:1,column:27082},end:{line:1,column:27127}},"174":{start:{line:1,column:27958},end:{line:1,column:28662}},"175":{start:{line:1,column:28245},end:{line:1,column:28270}},"176":{start:{line:1,column:28298},end:{line:1,column:28322}},"177":{start:{line:1,column:28351},end:{line:1,column:28377}},"178":{start:{line:1,column:28518},end:{line:1,column:28661}},"179":{start:{line:2,column:84},end:{line:2,column:92}}},fnMap:{"0":{name:"(anonymous_0)",decl:{start:{line:1,column:616},end:{line:1,column:617}},loc:{start:{line:1,column:623},end:{line:1,column:627}},line:1},"1":{name:"ve",decl:{start:{line:1,column:637},end:{line:1,column:639}},loc:{start:{line:1,column:644},end:{line:1,column:1043}},line:1},"2":{name:"(anonymous_2)",decl:{start:{line:1,column:821},end:{line:1,column:822}},loc:{start:{line:1,column:831},end:{line:1,column:890}},line:1},"3":{name:"he",decl:{start:{line:1,column:1052},end:{line:1,column:1054}},loc:{start:{line:1,column:1059},end:{line:1,column:1332}},line:1},"4":{name:"Ee",decl:{start:{line:1,column:1341},end:{line:1,column:1343}},loc:{start:{line:1,column:1348},end:{line:1,column:2237}},line:1},"5":{name:"(anonymous_5)",decl:{start:{line:1,column:1620},end:{line:1,column:1621}},loc:{start:{line:1,column:1630},end:{line:1,column:1675}},line:1},"6":{name:"(anonymous_6)",decl:{start:{line:1,column:1963},end:{line:1,column:1964}},loc:{start:{line:1,column:1973},end:{line:1,column:2018}},line:1},"7":{name:"(anonymous_7)",decl:{start:{line:1,column:2070},end:{line:1,column:2071}},loc:{start:{line:1,column:2080},end:{line:1,column:2126}},line:1},"8":{name:"(anonymous_8)",decl:{start:{line:1,column:2245},end:{line:1,column:2246}},loc:{start:{line:1,column:2249},end:{line:1,column:9541}},line:1},"9":{name:"(anonymous_9)",decl:{start:{line:1,column:2309},end:{line:1,column:2310}},loc:{start:{line:1,column:2327},end:{line:1,column:2358}},line:1},"10":{name:"(anonymous_10)",decl:{start:{line:1,column:2358},end:{line:1,column:2359}},loc:{start:{line:1,column:2374},end:{line:1,column:2408}},line:1},"11":{name:"(anonymous_11)",decl:{start:{line:1,column:2408},end:{line:1,column:2409}},loc:{start:{line:1,column:2425},end:{line:1,column:2522}},line:1},"12":{name:"(anonymous_12)",decl:{start:{line:1,column:2522},end:{line:1,column:2523}},loc:{start:{line:1,column:2533},end:{line:1,column:2558}},line:1},"13":{name:"(anonymous_13)",decl:{start:{line:1,column:2575},end:{line:1,column:2576}},loc:{start:{line:1,column:2586},end:{line:1,column:2604}},line:1},"14":{name:"(anonymous_14)",decl:{start:{line:1,column:8782},end:{line:1,column:8783}},loc:{start:{line:1,column:8795},end:{line:1,column:9495}},line:1},"15":{name:"Ce",decl:{start:{line:1,column:9575},end:{line:1,column:9577}},loc:{start:{line:1,column:9582},end:{line:1,column:9758}},line:1},"16":{name:"(anonymous_16)",decl:{start:{line:1,column:9628},end:{line:1,column:9629}},loc:{start:{line:1,column:9638},end:{line:1,column:9680}},line:1},"17":{name:"we",decl:{start:{line:1,column:9767},end:{line:1,column:9769}},loc:{start:{line:1,column:9774},end:{line:1,column:9896}},line:1},"18":{name:"(anonymous_18)",decl:{start:{line:1,column:9820},end:{line:1,column:9821}},loc:{start:{line:1,column:9830},end:{line:1,column:9873}},line:1},"19":{name:"Se",decl:{start:{line:1,column:9905},end:{line:1,column:9907}},loc:{start:{line:1,column:9912},end:{line:1,column:9954}},line:1},"20":{name:"ye",decl:{start:{line:1,column:9963},end:{line:1,column:9965}},loc:{start:{line:1,column:9970},end:{line:1,column:10028}},line:1},"21":{name:"ke",decl:{start:{line:1,column:10037},end:{line:1,column:10039}},loc:{start:{line:1,column:10044},end:{line:1,column:10276}},line:1},"22":{name:"Ue",decl:{start:{line:1,column:10285},end:{line:1,column:10287}},loc:{start:{line:1,column:10292},end:{line:1,column:10337}},line:1},"23":{name:"Me",decl:{start:{line:1,column:10346},end:{line:1,column:10348}},loc:{start:{line:1,column:10353},end:{line:1,column:10414}},line:1},"24":{name:"Te",decl:{start:{line:1,column:10423},end:{line:1,column:10425}},loc:{start:{line:1,column:10430},end:{line:1,column:10668}},line:1},"25":{name:"De",decl:{start:{line:1,column:10677},end:{line:1,column:10679}},loc:{start:{line:1,column:10684},end:{line:1,column:10729}},line:1},"26":{name:"Re",decl:{start:{line:1,column:10738},end:{line:1,column:10740}},loc:{start:{line:1,column:10745},end:{line:1,column:10806}},line:1},"27":{name:"Fe",decl:{start:{line:1,column:10815},end:{line:1,column:10817}},loc:{start:{line:1,column:10822},end:{line:1,column:11062}},line:1},"28":{name:"Le",decl:{start:{line:1,column:11071},end:{line:1,column:11073}},loc:{start:{line:1,column:11078},end:{line:1,column:11191}},line:1},"29":{name:"Ve",decl:{start:{line:1,column:11200},end:{line:1,column:11202}},loc:{start:{line:1,column:11207},end:{line:1,column:11322}},line:1},"30":{name:"(anonymous_30)",decl:{start:{line:1,column:11329},end:{line:1,column:11330}},loc:{start:{line:1,column:11333},end:{line:1,column:20041}},line:1},"31":{name:"(anonymous_31)",decl:{start:{line:1,column:11595},end:{line:1,column:11596}},loc:{start:{line:1,column:11603},end:{line:1,column:11695}},line:1},"32":{name:"(anonymous_32)",decl:{start:{line:1,column:11695},end:{line:1,column:11696}},loc:{start:{line:1,column:11702},end:{line:1,column:11753}},line:1},"33":{name:"(anonymous_33)",decl:{start:{line:1,column:11753},end:{line:1,column:11754}},loc:{start:{line:1,column:11768},end:{line:1,column:11897}},line:1},"34":{name:"(anonymous_34)",decl:{start:{line:1,column:11852},end:{line:1,column:11853}},loc:{start:{line:1,column:11856},end:{line:1,column:11895}},line:1},"35":{name:"(anonymous_35)",decl:{start:{line:1,column:11897},end:{line:1,column:11898}},loc:{start:{line:1,column:11911},end:{line:1,column:11937}},line:1},"36":{name:"(anonymous_36)",decl:{start:{line:1,column:11937},end:{line:1,column:11938}},loc:{start:{line:1,column:11950},end:{line:1,column:11975}},line:1},"37":{name:"(anonymous_37)",decl:{start:{line:1,column:11992},end:{line:1,column:11993}},loc:{start:{line:1,column:12003},end:{line:1,column:12021}},line:1},"38":{name:"(anonymous_38)",decl:{start:{line:1,column:12096},end:{line:1,column:12097}},loc:{start:{line:1,column:12109},end:{line:1,column:12170}},line:1},"39":{name:"(anonymous_39)",decl:{start:{line:1,column:17726},end:{line:1,column:17727}},loc:{start:{line:1,column:17739},end:{line:1,column:19959}},line:1},"40":{name:"(anonymous_40)",decl:{start:{line:1,column:18078},end:{line:1,column:18079}},loc:{start:{line:1,column:18088},end:{line:1,column:18107}},line:1},"41":{name:"(anonymous_41)",decl:{start:{line:1,column:20053},end:{line:1,column:20054}},loc:{start:{line:1,column:20057},end:{line:1,column:24403}},line:1},"42":{name:"(anonymous_42)",decl:{start:{line:1,column:20117},end:{line:1,column:20118}},loc:{start:{line:1,column:20130},end:{line:1,column:20150}},line:1},"43":{name:"(anonymous_43)",decl:{start:{line:1,column:20167},end:{line:1,column:20168}},loc:{start:{line:1,column:20178},end:{line:1,column:20196}},line:1},"44":{name:"(anonymous_44)",decl:{start:{line:1,column:23229},end:{line:1,column:23230}},loc:{start:{line:1,column:23242},end:{line:1,column:24357}},line:1},"45":{name:"(anonymous_45)",decl:{start:{line:1,column:24059},end:{line:1,column:24060}},loc:{start:{line:1,column:24069},end:{line:1,column:24093}},line:1},"46":{name:"(anonymous_46)",decl:{start:{line:1,column:24415},end:{line:1,column:24416}},loc:{start:{line:1,column:24419},end:{line:1,column:24689}},line:1},"47":{name:"(anonymous_47)",decl:{start:{line:1,column:24428},end:{line:1,column:24429}},loc:{start:{line:1,column:24449},end:{line:1,column:24564}},line:1},"48":{name:"(anonymous_48)",decl:{start:{line:1,column:24581},end:{line:1,column:24582}},loc:{start:{line:1,column:24592},end:{line:1,column:24610}},line:1},"49":{name:"(anonymous_49)",decl:{start:{line:1,column:24701},end:{line:1,column:24702}},loc:{start:{line:1,column:24705},end:{line:1,column:25213}},line:1},"50":{name:"(anonymous_50)",decl:{start:{line:1,column:24768},end:{line:1,column:24769}},loc:{start:{line:1,column:24778},end:{line:1,column:24825}},line:1},"51":{name:"(anonymous_51)",decl:{start:{line:1,column:24825},end:{line:1,column:24826}},loc:{start:{line:1,column:24838},end:{line:1,column:24989}},line:1},"52":{name:"(anonymous_52)",decl:{start:{line:1,column:24895},end:{line:1,column:24896}},loc:{start:{line:1,column:24898},end:{line:1,column:24986}},line:1},"53":{name:"(anonymous_53)",decl:{start:{line:1,column:24989},end:{line:1,column:24990}},loc:{start:{line:1,column:25002},end:{line:1,column:25088}},line:1},"54":{name:"(anonymous_54)",decl:{start:{line:1,column:25105},end:{line:1,column:25106}},loc:{start:{line:1,column:25116},end:{line:1,column:25134}},line:1},"55":{name:"(anonymous_55)",decl:{start:{line:1,column:25224},end:{line:1,column:25225}},loc:{start:{line:1,column:25235},end:{line:1,column:25325}},line:1},"56":{name:"Ae",decl:{start:{line:1,column:25343},end:{line:1,column:25345}},loc:{start:{line:1,column:25350},end:{line:1,column:25488}},line:1},"57":{name:"(anonymous_57)",decl:{start:{line:1,column:25408},end:{line:1,column:25409}},loc:{start:{line:1,column:25419},end:{line:1,column:25464}},line:1},"58":{name:"Ie",decl:{start:{line:1,column:25497},end:{line:1,column:25499}},loc:{start:{line:1,column:25504},end:{line:1,column:25602}},line:1},"59":{name:"je",decl:{start:{line:1,column:25611},end:{line:1,column:25613}},loc:{start:{line:1,column:25618},end:{line:1,column:25789}},line:1},"60":{name:"(anonymous_60)",decl:{start:{line:1,column:25682},end:{line:1,column:25683}},loc:{start:{line:1,column:25692},end:{line:1,column:25738}},line:1},"61":{name:"Ne",decl:{start:{line:1,column:25798},end:{line:1,column:25800}},loc:{start:{line:1,column:25805},end:{line:1,column:25903}},line:1},"62":{name:"(anonymous_62)",decl:{start:{line:1,column:25911},end:{line:1,column:25912}},loc:{start:{line:1,column:25915},end:{line:2,column:93}},line:1},"63":{name:"(anonymous_63)",decl:{start:{line:1,column:26084},end:{line:1,column:26085}},loc:{start:{line:1,column:26094},end:{line:1,column:26242}},line:1},"64":{name:"(anonymous_64)",decl:{start:{line:1,column:26135},end:{line:1,column:26136}},loc:{start:{line:1,column:26139},end:{line:1,column:26162}},line:1},"65":{name:"(anonymous_65)",decl:{start:{line:1,column:26166},end:{line:1,column:26167}},loc:{start:{line:1,column:26170},end:{line:1,column:26238}},line:1},"66":{name:"(anonymous_66)",decl:{start:{line:1,column:26242},end:{line:1,column:26243}},loc:{start:{line:1,column:26258},end:{line:1,column:26289}},line:1},"67":{name:"(anonymous_67)",decl:{start:{line:1,column:26289},end:{line:1,column:26290}},loc:{start:{line:1,column:26306},end:{line:1,column:26337}},line:1},"68":{name:"(anonymous_68)",decl:{start:{line:1,column:26337},end:{line:1,column:26338}},loc:{start:{line:1,column:26352},end:{line:1,column:26685}},line:1},"69":{name:"(anonymous_69)",decl:{start:{line:1,column:26421},end:{line:1,column:26422}},loc:{start:{line:1,column:26424},end:{line:1,column:26576}},line:1},"70":{name:"(anonymous_70)",decl:{start:{line:1,column:26583},end:{line:1,column:26584}},loc:{start:{line:1,column:26586},end:{line:1,column:26682}},line:1},"71":{name:"(anonymous_71)",decl:{start:{line:1,column:26685},end:{line:1,column:26686}},loc:{start:{line:1,column:26701},end:{line:1,column:26842}},line:1},"72":{name:"(anonymous_72)",decl:{start:{line:1,column:26745},end:{line:1,column:26746}},loc:{start:{line:1,column:26749},end:{line:1,column:26778}},line:1},"73":{name:"(anonymous_73)",decl:{start:{line:1,column:26785},end:{line:1,column:26786}},loc:{start:{line:1,column:26788},end:{line:1,column:26839}},line:1},"74":{name:"(anonymous_74)",decl:{start:{line:1,column:26842},end:{line:1,column:26843}},loc:{start:{line:1,column:26858},end:{line:1,column:26917}},line:1},"75":{name:"(anonymous_75)",decl:{start:{line:1,column:26934},end:{line:1,column:26935}},loc:{start:{line:1,column:26945},end:{line:1,column:26963}},line:1},"76":{name:"(anonymous_76)",decl:{start:{line:1,column:27042},end:{line:1,column:27043}},loc:{start:{line:1,column:27055},end:{line:1,column:27129}},line:1},"77":{name:"(anonymous_77)",decl:{start:{line:1,column:27944},end:{line:1,column:27945}},loc:{start:{line:1,column:27957},end:{line:1,column:28663}},line:1},"78":{name:"(anonymous_78)",decl:{start:{line:1,column:28234},end:{line:1,column:28235}},loc:{start:{line:1,column:28244},end:{line:1,column:28271}},line:1},"79":{name:"(anonymous_79)",decl:{start:{line:1,column:28286},end:{line:1,column:28287}},loc:{start:{line:1,column:28297},end:{line:1,column:28323}},line:1},"80":{name:"(anonymous_80)",decl:{start:{line:1,column:28340},end:{line:1,column:28341}},loc:{start:{line:1,column:28350},end:{line:1,column:28378}},line:1}},branchMap:{"0":{loc:{start:{line:1,column:645},end:{line:1,column:957}},type:"if",locations:[{start:{line:1,column:645},end:{line:1,column:957}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1":{loc:{start:{line:1,column:957},end:{line:1,column:1042}},type:"if",locations:[{start:{line:1,column:957},end:{line:1,column:1042}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"2":{loc:{start:{line:1,column:1060},end:{line:1,column:1331}},type:"binary-expr",locations:[{start:{line:1,column:1060},end:{line:1,column:1063}},{start:{line:1,column:1066},end:{line:1,column:1330}}],line:1},"3":{loc:{start:{line:1,column:1349},end:{line:1,column:2164}},type:"if",locations:[{start:{line:1,column:1349},end:{line:1,column:2164}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"4":{loc:{start:{line:1,column:2164},end:{line:1,column:2236}},type:"if",locations:[{start:{line:1,column:2164},end:{line:1,column:2236}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"5":{loc:{start:{line:1,column:2457},end:{line:1,column:2521}},type:"binary-expr",locations:[{start:{line:1,column:2457},end:{line:1,column:2458}},{start:{line:1,column:2461},end:{line:1,column:2520}}],line:1},"6":{loc:{start:{line:1,column:2598},end:{line:1,column:2602}},type:"binary-expr",locations:[{start:{line:1,column:2598},end:{line:1,column:2599}},{start:{line:1,column:2601},end:{line:1,column:2602}}],line:1},"7":{loc:{start:{line:1,column:8796},end:{line:1,column:9494}},type:"if",locations:[{start:{line:1,column:8796},end:{line:1,column:9494}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"8":{loc:{start:{line:1,column:8799},end:{line:1,column:9356}},type:"binary-expr",locations:[{start:{line:1,column:8799},end:{line:1,column:8802}},{start:{line:1,column:8805},end:{line:1,column:9355}}],line:1},"9":{loc:{start:{line:1,column:9382},end:{line:1,column:9420}},type:"binary-expr",locations:[{start:{line:1,column:9383},end:{line:1,column:9416}},{start:{line:1,column:9419},end:{line:1,column:9420}}],line:1},"10":{loc:{start:{line:1,column:9383},end:{line:1,column:9416}},type:"cond-expr",locations:[{start:{line:1,column:9403},end:{line:1,column:9407}},{start:{line:1,column:9408},end:{line:1,column:9416}}],line:1},"11":{loc:{start:{line:1,column:9459},end:{line:1,column:9490}},type:"cond-expr",locations:[{start:{line:1,column:9485},end:{line:1,column:9487}},{start:{line:1,column:9488},end:{line:1,column:9490}}],line:1},"12":{loc:{start:{line:1,column:9583},end:{line:1,column:9757}},type:"if",locations:[{start:{line:1,column:9583},end:{line:1,column:9757}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"13":{loc:{start:{line:1,column:9775},end:{line:1,column:9895}},type:"if",locations:[{start:{line:1,column:9775},end:{line:1,column:9895}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"14":{loc:{start:{line:1,column:9913},end:{line:1,column:9953}},type:"binary-expr",locations:[{start:{line:1,column:9913},end:{line:1,column:9916}},{start:{line:1,column:9918},end:{line:1,column:9953}}],line:1},"15":{loc:{start:{line:1,column:9971},end:{line:1,column:10027}},type:"binary-expr",locations:[{start:{line:1,column:9971},end:{line:1,column:9974}},{start:{line:1,column:9976},end:{line:1,column:10027}}],line:1},"16":{loc:{start:{line:1,column:10045},end:{line:1,column:10275}},type:"if",locations:[{start:{line:1,column:10045},end:{line:1,column:10275}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"17":{loc:{start:{line:1,column:10048},end:{line:1,column:10149}},type:"binary-expr",locations:[{start:{line:1,column:10048},end:{line:1,column:10051}},{start:{line:1,column:10054},end:{line:1,column:10148}}],line:1},"18":{loc:{start:{line:1,column:10172},end:{line:1,column:10218}},type:"cond-expr",locations:[{start:{line:1,column:10214},end:{line:1,column:10215}},{start:{line:1,column:10216},end:{line:1,column:10218}}],line:1},"19":{loc:{start:{line:1,column:10226},end:{line:1,column:10273}},type:"cond-expr",locations:[{start:{line:1,column:10269},end:{line:1,column:10270}},{start:{line:1,column:10271},end:{line:1,column:10273}}],line:1},"20":{loc:{start:{line:1,column:10293},end:{line:1,column:10336}},type:"binary-expr",locations:[{start:{line:1,column:10293},end:{line:1,column:10296}},{start:{line:1,column:10298},end:{line:1,column:10336}}],line:1},"21":{loc:{start:{line:1,column:10354},end:{line:1,column:10413}},type:"binary-expr",locations:[{start:{line:1,column:10354},end:{line:1,column:10357}},{start:{line:1,column:10359},end:{line:1,column:10413}}],line:1},"22":{loc:{start:{line:1,column:10431},end:{line:1,column:10667}},type:"if",locations:[{start:{line:1,column:10431},end:{line:1,column:10667}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"23":{loc:{start:{line:1,column:10434},end:{line:1,column:10535}},type:"binary-expr",locations:[{start:{line:1,column:10434},end:{line:1,column:10437}},{start:{line:1,column:10440},end:{line:1,column:10534}}],line:1},"24":{loc:{start:{line:1,column:10558},end:{line:1,column:10607}},type:"cond-expr",locations:[{start:{line:1,column:10603},end:{line:1,column:10604}},{start:{line:1,column:10605},end:{line:1,column:10607}}],line:1},"25":{loc:{start:{line:1,column:10615},end:{line:1,column:10665}},type:"cond-expr",locations:[{start:{line:1,column:10661},end:{line:1,column:10662}},{start:{line:1,column:10663},end:{line:1,column:10665}}],line:1},"26":{loc:{start:{line:1,column:10685},end:{line:1,column:10728}},type:"binary-expr",locations:[{start:{line:1,column:10685},end:{line:1,column:10688}},{start:{line:1,column:10690},end:{line:1,column:10728}}],line:1},"27":{loc:{start:{line:1,column:10746},end:{line:1,column:10805}},type:"binary-expr",locations:[{start:{line:1,column:10746},end:{line:1,column:10749}},{start:{line:1,column:10751},end:{line:1,column:10805}}],line:1},"28":{loc:{start:{line:1,column:10823},end:{line:1,column:11061}},type:"if",locations:[{start:{line:1,column:10823},end:{line:1,column:11061}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"29":{loc:{start:{line:1,column:10826},end:{line:1,column:10927}},type:"binary-expr",locations:[{start:{line:1,column:10826},end:{line:1,column:10829}},{start:{line:1,column:10832},end:{line:1,column:10926}}],line:1},"30":{loc:{start:{line:1,column:10950},end:{line:1,column:11000}},type:"cond-expr",locations:[{start:{line:1,column:10996},end:{line:1,column:10997}},{start:{line:1,column:10998},end:{line:1,column:11000}}],line:1},"31":{loc:{start:{line:1,column:11008},end:{line:1,column:11059}},type:"cond-expr",locations:[{start:{line:1,column:11055},end:{line:1,column:11056}},{start:{line:1,column:11057},end:{line:1,column:11059}}],line:1},"32":{loc:{start:{line:1,column:11079},end:{line:1,column:11190}},type:"binary-expr",locations:[{start:{line:1,column:11079},end:{line:1,column:11082}},{start:{line:1,column:11085},end:{line:1,column:11189}}],line:1},"33":{loc:{start:{line:1,column:11208},end:{line:1,column:11321}},type:"binary-expr",locations:[{start:{line:1,column:11208},end:{line:1,column:11211}},{start:{line:1,column:11214},end:{line:1,column:11320}}],line:1},"34":{loc:{start:{line:1,column:11604},end:{line:1,column:11694}},type:"cond-expr",locations:[{start:{line:1,column:11620},end:{line:1,column:11665}},{start:{line:1,column:11666},end:{line:1,column:11694}}],line:1},"35":{loc:{start:{line:1,column:12015},end:{line:1,column:12019}},type:"binary-expr",locations:[{start:{line:1,column:12015},end:{line:1,column:12016}},{start:{line:1,column:12018},end:{line:1,column:12019}}],line:1},"36":{loc:{start:{line:1,column:12110},end:{line:1,column:12169}},type:"if",locations:[{start:{line:1,column:12110},end:{line:1,column:12169}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"37":{loc:{start:{line:1,column:12113},end:{line:1,column:12125}},type:"binary-expr",locations:[{start:{line:1,column:12113},end:{line:1,column:12116}},{start:{line:1,column:12118},end:{line:1,column:12125}}],line:1},"38":{loc:{start:{line:1,column:12137},end:{line:1,column:12168}},type:"binary-expr",locations:[{start:{line:1,column:12137},end:{line:1,column:12145}},{start:{line:1,column:12148},end:{line:1,column:12167}}],line:1},"39":{loc:{start:{line:1,column:17740},end:{line:1,column:18767}},type:"binary-expr",locations:[{start:{line:1,column:17740},end:{line:1,column:17743}},{start:{line:1,column:17746},end:{line:1,column:18766}}],line:1},"40":{loc:{start:{line:1,column:18768},end:{line:1,column:19958}},type:"binary-expr",locations:[{start:{line:1,column:18768},end:{line:1,column:18771}},{start:{line:1,column:18774},end:{line:1,column:19957}}],line:1},"41":{loc:{start:{line:1,column:18782},end:{line:1,column:18798}},type:"cond-expr",locations:[{start:{line:1,column:18793},end:{line:1,column:18795}},{start:{line:1,column:18796},end:{line:1,column:18798}}],line:1},"42":{loc:{start:{line:1,column:18807},end:{line:1,column:18993}},type:"cond-expr",locations:[{start:{line:1,column:18818},end:{line:1,column:18897}},{start:{line:1,column:18898},end:{line:1,column:18993}}],line:1},"43":{loc:{start:{line:1,column:19043},end:{line:1,column:19101}},type:"binary-expr",locations:[{start:{line:1,column:19043},end:{line:1,column:19071}},{start:{line:1,column:19073},end:{line:1,column:19101}}],line:1},"44":{loc:{start:{line:1,column:19122},end:{line:1,column:19198}},type:"cond-expr",locations:[{start:{line:1,column:19181},end:{line:1,column:19193}},{start:{line:1,column:19194},end:{line:1,column:19198}}],line:1},"45":{loc:{start:{line:1,column:19122},end:{line:1,column:19180}},type:"binary-expr",locations:[{start:{line:1,column:19122},end:{line:1,column:19150}},{start:{line:1,column:19152},end:{line:1,column:19180}}],line:1},"46":{loc:{start:{line:1,column:19207},end:{line:1,column:19271}},type:"cond-expr",locations:[{start:{line:1,column:19266},end:{line:1,column:19268}},{start:{line:1,column:19269},end:{line:1,column:19271}}],line:1},"47":{loc:{start:{line:1,column:19207},end:{line:1,column:19265}},type:"binary-expr",locations:[{start:{line:1,column:19207},end:{line:1,column:19235}},{start:{line:1,column:19237},end:{line:1,column:19265}}],line:1},"48":{loc:{start:{line:1,column:19295},end:{line:1,column:19359}},type:"binary-expr",locations:[{start:{line:1,column:19295},end:{line:1,column:19326}},{start:{line:1,column:19328},end:{line:1,column:19359}}],line:1},"49":{loc:{start:{line:1,column:19380},end:{line:1,column:19465}},type:"cond-expr",locations:[{start:{line:1,column:19445},end:{line:1,column:19460}},{start:{line:1,column:19461},end:{line:1,column:19465}}],line:1},"50":{loc:{start:{line:1,column:19380},end:{line:1,column:19444}},type:"binary-expr",locations:[{start:{line:1,column:19380},end:{line:1,column:19411}},{start:{line:1,column:19413},end:{line:1,column:19444}}],line:1},"51":{loc:{start:{line:1,column:19474},end:{line:1,column:19544}},type:"cond-expr",locations:[{start:{line:1,column:19539},end:{line:1,column:19541}},{start:{line:1,column:19542},end:{line:1,column:19544}}],line:1},"52":{loc:{start:{line:1,column:19474},end:{line:1,column:19538}},type:"binary-expr",locations:[{start:{line:1,column:19474},end:{line:1,column:19505}},{start:{line:1,column:19507},end:{line:1,column:19538}}],line:1},"53":{loc:{start:{line:1,column:19568},end:{line:1,column:19634}},type:"binary-expr",locations:[{start:{line:1,column:19568},end:{line:1,column:19600}},{start:{line:1,column:19602},end:{line:1,column:19634}}],line:1},"54":{loc:{start:{line:1,column:19655},end:{line:1,column:19743}},type:"cond-expr",locations:[{start:{line:1,column:19722},end:{line:1,column:19738}},{start:{line:1,column:19739},end:{line:1,column:19743}}],line:1},"55":{loc:{start:{line:1,column:19655},end:{line:1,column:19721}},type:"binary-expr",locations:[{start:{line:1,column:19655},end:{line:1,column:19687}},{start:{line:1,column:19689},end:{line:1,column:19721}}],line:1},"56":{loc:{start:{line:1,column:19752},end:{line:1,column:19824}},type:"cond-expr",locations:[{start:{line:1,column:19819},end:{line:1,column:19821}},{start:{line:1,column:19822},end:{line:1,column:19824}}],line:1},"57":{loc:{start:{line:1,column:19752},end:{line:1,column:19818}},type:"binary-expr",locations:[{start:{line:1,column:19752},end:{line:1,column:19784}},{start:{line:1,column:19786},end:{line:1,column:19818}}],line:1},"58":{loc:{start:{line:1,column:19832},end:{line:1,column:19879}},type:"cond-expr",locations:[{start:{line:1,column:19874},end:{line:1,column:19876}},{start:{line:1,column:19877},end:{line:1,column:19879}}],line:1},"59":{loc:{start:{line:1,column:19887},end:{line:1,column:19922}},type:"cond-expr",locations:[{start:{line:1,column:19917},end:{line:1,column:19919}},{start:{line:1,column:19920},end:{line:1,column:19922}}],line:1},"60":{loc:{start:{line:1,column:20190},end:{line:1,column:20194}},type:"binary-expr",locations:[{start:{line:1,column:20190},end:{line:1,column:20191}},{start:{line:1,column:20193},end:{line:1,column:20194}}],line:1},"61":{loc:{start:{line:1,column:23243},end:{line:1,column:24177}},type:"binary-expr",locations:[{start:{line:1,column:23243},end:{line:1,column:23246}},{start:{line:1,column:23249},end:{line:1,column:24176}}],line:1},"62":{loc:{start:{line:1,column:24178},end:{line:1,column:24356}},type:"binary-expr",locations:[{start:{line:1,column:24178},end:{line:1,column:24181}},{start:{line:1,column:24184},end:{line:1,column:24355}}],line:1},"63":{loc:{start:{line:1,column:24465},end:{line:1,column:24529}},type:"if",locations:[{start:{line:1,column:24465},end:{line:1,column:24529}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"64":{loc:{start:{line:1,column:24470},end:{line:1,column:24518}},type:"binary-expr",locations:[{start:{line:1,column:24470},end:{line:1,column:24502}},{start:{line:1,column:24504},end:{line:1,column:24518}}],line:1},"65":{loc:{start:{line:1,column:24604},end:{line:1,column:24608}},type:"binary-expr",locations:[{start:{line:1,column:24604},end:{line:1,column:24605}},{start:{line:1,column:24607},end:{line:1,column:24608}}],line:1},"66":{loc:{start:{line:1,column:25128},end:{line:1,column:25132}},type:"binary-expr",locations:[{start:{line:1,column:25128},end:{line:1,column:25129}},{start:{line:1,column:25131},end:{line:1,column:25132}}],line:1},"67":{loc:{start:{line:1,column:25327},end:{line:1,column:25332}},type:"binary-expr",locations:[{start:{line:1,column:25327},end:{line:1,column:25328}},{start:{line:1,column:25330},end:{line:1,column:25332}}],line:1},"68":{loc:{start:{line:1,column:25351},end:{line:1,column:25470}},type:"if",locations:[{start:{line:1,column:25351},end:{line:1,column:25470}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"69":{loc:{start:{line:1,column:25470},end:{line:1,column:25487}},type:"binary-expr",locations:[{start:{line:1,column:25470},end:{line:1,column:25473}},{start:{line:1,column:25475},end:{line:1,column:25487}}],line:1},"70":{loc:{start:{line:1,column:25505},end:{line:1,column:25601}},type:"binary-expr",locations:[{start:{line:1,column:25505},end:{line:1,column:25508}},{start:{line:1,column:25511},end:{line:1,column:25600}}],line:1},"71":{loc:{start:{line:1,column:25619},end:{line:1,column:25744}},type:"if",locations:[{start:{line:1,column:25619},end:{line:1,column:25744}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"72":{loc:{start:{line:1,column:25744},end:{line:1,column:25788}},type:"if",locations:[{start:{line:1,column:25744},end:{line:1,column:25788}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"73":{loc:{start:{line:1,column:25806},end:{line:1,column:25902}},type:"if",locations:[{start:{line:1,column:25806},end:{line:1,column:25902}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"74":{loc:{start:{line:1,column:25809},end:{line:1,column:25854}},type:"binary-expr",locations:[{start:{line:1,column:25809},end:{line:1,column:25812}},{start:{line:1,column:25814},end:{line:1,column:25854}}],line:1},"75":{loc:{start:{line:1,column:25874},end:{line:1,column:25898}},type:"cond-expr",locations:[{start:{line:1,column:25894},end:{line:1,column:25895}},{start:{line:1,column:25896},end:{line:1,column:25898}}],line:1},"76":{loc:{start:{line:1,column:26587},end:{line:1,column:26681}},type:"cond-expr",locations:[{start:{line:1,column:26602},end:{line:1,column:26647}},{start:{line:1,column:26648},end:{line:1,column:26681}}],line:1},"77":{loc:{start:{line:1,column:26957},end:{line:1,column:26961}},type:"binary-expr",locations:[{start:{line:1,column:26957},end:{line:1,column:26958}},{start:{line:1,column:26960},end:{line:1,column:26961}}],line:1},"78":{loc:{start:{line:1,column:27056},end:{line:1,column:27128}},type:"if",locations:[{start:{line:1,column:27056},end:{line:1,column:27128}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"79":{loc:{start:{line:1,column:27059},end:{line:1,column:27070}},type:"binary-expr",locations:[{start:{line:1,column:27059},end:{line:1,column:27062}},{start:{line:1,column:27064},end:{line:1,column:27070}}],line:1},"80":{loc:{start:{line:1,column:27082},end:{line:1,column:27127}},type:"binary-expr",locations:[{start:{line:1,column:27082},end:{line:1,column:27090}},{start:{line:1,column:27093},end:{line:1,column:27126}}],line:1},"81":{loc:{start:{line:1,column:27958},end:{line:1,column:28662}},type:"if",locations:[{start:{line:1,column:27958},end:{line:1,column:28662}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"82":{loc:{start:{line:1,column:27961},end:{line:1,column:28504}},type:"binary-expr",locations:[{start:{line:1,column:27961},end:{line:1,column:27964}},{start:{line:1,column:27967},end:{line:1,column:28503}}],line:1},"83":{loc:{start:{line:1,column:28591},end:{line:1,column:28618}},type:"cond-expr",locations:[{start:{line:1,column:28613},end:{line:1,column:28615}},{start:{line:1,column:28616},end:{line:1,column:28618}}],line:1},"84":{loc:{start:{line:1,column:28629},end:{line:1,column:28658}},type:"cond-expr",locations:[{start:{line:1,column:28653},end:{line:1,column:28655}},{start:{line:1,column:28656},end:{line:1,column:28658}}],line:1}},s:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"116":0,"117":0,"118":0,"119":0,"120":0,"121":0,"122":0,"123":0,"124":0,"125":0,"126":0,"127":0,"128":0,"129":0,"130":0,"131":0,"132":0,"133":0,"134":0,"135":0,"136":0,"137":0,"138":0,"139":0,"140":0,"141":0,"142":0,"143":0,"144":0,"145":0,"146":0,"147":0,"148":0,"149":0,"150":0,"151":0,"152":0,"153":0,"154":0,"155":0,"156":0,"157":0,"158":0,"159":0,"160":0,"161":0,"162":0,"163":0,"164":0,"165":0,"166":0,"167":0,"168":0,"169":0,"170":0,"171":0,"172":0,"173":0,"174":0,"175":0,"176":0,"177":0,"178":0,"179":0},f:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0},b:{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0],"9":[0,0],"10":[0,0],"11":[0,0],"12":[0,0],"13":[0,0],"14":[0,0],"15":[0,0],"16":[0,0],"17":[0,0],"18":[0,0],"19":[0,0],"20":[0,0],"21":[0,0],"22":[0,0],"23":[0,0],"24":[0,0],"25":[0,0],"26":[0,0],"27":[0,0],"28":[0,0],"29":[0,0],"30":[0,0],"31":[0,0],"32":[0,0],"33":[0,0],"34":[0,0],"35":[0,0],"36":[0,0],"37":[0,0],"38":[0,0],"39":[0,0],"40":[0,0],"41":[0,0],"42":[0,0],"43":[0,0],"44":[0,0],"45":[0,0],"46":[0,0],"47":[0,0],"48":[0,0],"49":[0,0],"50":[0,0],"51":[0,0],"52":[0,0],"53":[0,0],"54":[0,0],"55":[0,0],"56":[0,0],"57":[0,0],"58":[0,0],"59":[0,0],"60":[0,0],"61":[0,0],"62":[0,0],"63":[0,0],"64":[0,0],"65":[0,0],"66":[0,0],"67":[0,0],"68":[0,0],"69":[0,0],"70":[0,0],"71":[0,0],"72":[0,0],"73":[0,0],"74":[0,0],"75":[0,0],"76":[0,0],"77":[0,0],"78":[0,0],"79":[0,0],"80":[0,0],"81":[0,0],"82":[0,0],"83":[0,0],"84":[0,0]},inputSourceMap:{version:3,sources:["src/app/features/user-management/components/user-list/user-list.ts","src/app/features/user-management/components/user-list/user-list.html","src/app/features/user-management/components/create-user-form/create-user-form.component.ts","src/app/features/user-management/components/create-user-form/create-user-form.html","src/app/features/user-management/components/user-created-dialog/user-created-dialog.ts","src/app/features/user-management/components/user-created-dialog/user-created-dialog.html","src/app/features/user-management/services/decoder-password-service.ts","src/app/features/user-management/services/user-api.service.ts","src/app/features/user-management/models/user-management-error-type.enum.ts","src/app/features/user-management/components/user-management-page/user-management-page.component.ts","src/app/features/user-management/components/user-management-page/user-management-page.html"],sourcesContent:["import { ChangeDetectionStrategy, Component, signal, input, output } from '@angular/core';\nimport { UserDto } from '../../models/in/user.model.dto';\n\n@Component({\n selector: 'app-user-list',\n imports: [],\n templateUrl: './user-list.html',\n styleUrl: './user-list.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\n\nexport class UserListComponent {\n users = input();\n deleteUser = output();\n\n public readonly pendingDeleteUser = signal(null);\n\n onDeleteRequest(user: UserDto): void {\n this.pendingDeleteUser.set(user);\n }\n\n onDeleteCancel(): void {\n this.pendingDeleteUser.set(null);\n }\n\n onDeleteConfirm(): void {\n const user = this.pendingDeleteUser();\n if (!user) {\n return;\n }\n\n this.deleteUser.emit(user.id);\n this.pendingDeleteUser.set(null);\n }\n\n onDelete(user: UserDto): void {\n this.onDeleteRequest(user);\n }\n}\n","
\n\n \n
\n
\n
\n \n \n \n
\n
\n

\n Elenco operatori sanitari\n

\n

Anagrafica utenti registrati nel sistema.

\n
\n
\n \n \n {{ users()?.length ?? 0 }} utenti\n \n
\n\n \n
\n \n \n \n \n \n \n\n \n \n \n \n\n @for (user of users(); track user.id) {\n \n \n \n \n\n \n \n } @empty {\n \n \n \n }\n\n \n
Username\n NomeCognomeAzioni
\n \n @{{ user.username }}\n \n {{ user.name }}{{ user.surname }}\n \n
\n
\n
\n \n \n \n
\n
\n

Nessun operatore sanitario presente

\n

Usa il pulsante \"Inserisci Nuovo Operatore\" per\n aggiungere il primo profilo.

\n
\n
\n
\n
\n\n \n @if (pendingDeleteUser(); as userToDelete) {\n \n\n \n
\n
\n
\n \n \n \n
\n
\n

Conferma eliminazione\n

\n

Questa operazione non pu\xF2 essere annullata.

\n
\n
\n \n
\n\n \n
\n

\n Stai per eliminare l'operatore\n {{ userToDelete.name }} {{ userToDelete.surname\n }}.\n

\n
\n \n \n \n @{{ userToDelete.username }}\n
\n
\n\n \n
\n \n \n
\n\n
\n }\n\n
","import { ChangeDetectionStrategy, Component, ElementRef, ViewChild, input, output, inject } from '@angular/core';\nimport { FormBuilder, ReactiveFormsModule, Validators } from '@angular/forms';\nimport { CreateUserDto } from '../../models/out/create-user.model.dto';\nimport { UserManagementErrorType } from '../../models/user-management-error-type.enum';\n\n@Component({\n selector: 'app-create-user-form',\n imports: [ReactiveFormsModule],\n templateUrl: './create-user-form.html',\n styleUrls: ['./create-user-form.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CreateUserFormComponent {\n errorType = input(null);\n isOpen = input(false);\n formSubmit = output();\n openRequest = output();\n closeRequest = output();\n\n @ViewChild('nameInput')\n private readonly nameInput?: ElementRef;\n\n private readonly fb = inject(FormBuilder);\n public readonly form = this.fb.nonNullable.group({\n name: ['', [Validators.required, Validators.minLength(2)]],\n surname: ['', [Validators.required, Validators.minLength(2)]],\n username: ['', [Validators.required, Validators.minLength(4)]],\n });\n\n public submit(): void {\n if (this.form.valid) {\n this.formSubmit.emit(this.form.getRawValue());\n } else {\n this.form.markAllAsTouched();\n }\n }\n\n public reset(): void {\n this.form.reset({\n name: '',\n surname: '',\n username: '',\n });\n }\n\n public resetAndFocus(): void {\n this.reset();\n this.form.markAsPristine();\n this.form.markAsUntouched();\n\n queueMicrotask(() => {\n this.nameInput?.nativeElement.focus();\n });\n }\n\n public requestClose(): void {\n this.closeRequest.emit();\n }\n\n public requestOpen(): void {\n this.openRequest.emit();\n }\n}","
\n\n \n
\n
\n
\n
\n \n \n \n
\n
\n

\n Nuovo operatore sanitario\n

\n

Compila i campi per creare un profilo OSS.

\n
\n
\n\n @if (!isOpen()) {\n \n } @else {\n \n }\n
\n
\n\n \n
\n
\n\n \n
\n \n \n

Minimo 2 caratteri.

\n\n @if (form.controls['name'].invalid && form.controls['name'].touched) {\n

\n \n \n \n \n @if (form.controls['name'].hasError('required')) { Il nome \xE8 obbligatorio. }\n @if (form.controls['name'].hasError('minlength')) { Il nome deve essere di almeno 2 caratteri. }\n \n

\n }\n
\n\n \n
\n \n \n

Minimo 2 caratteri.

\n\n @if (form.controls['surname'].invalid && form.controls['surname'].touched) {\n

\n \n \n \n \n @if (form.controls['surname'].hasError('required')) { Il cognome \xE8 obbligatorio. }\n @if (form.controls['surname'].hasError('minlength')) { Il cognome deve essere di almeno 2 caratteri.\n }\n \n

\n }\n
\n\n \n
\n \n
\n \n
\n

Minimo 4 caratteri.

\n\n @if (form.controls['username'].invalid && form.controls['username'].touched) {\n

\n \n \n \n \n @if (form.controls['username'].hasError('required')) { L'username \xE8 obbligatorio. }\n @if (form.controls['username'].hasError('minlength')) { L'username deve essere di almeno 4\n caratteri. }\n \n

\n }\n\n @if (errorType() === 'USERNAME_ALREADY_IN_USE') {\n

\n \n \n \n Username gi\xE0 in uso. Scegline un altro.\n

\n }\n @if (errorType() === 'OTHER_ERROR') {\n

\n \n \n \n Errore durante la creazione utente. Riprova.\n

\n }\n
\n\n \n
\n\n \n \n
\n
\n\n
","import { ChangeDetectionStrategy, Component, input, output } from '@angular/core';\nimport { UserCreatedResponseDto } from '../../models/in/user-created-response.model.dto';\nimport { CreateUserDto } from '../../models/out/create-user.model.dto';\n\n@Component({\n selector: 'app-user-created-dialog',\n imports: [],\n templateUrl: './user-created-dialog.html',\n styleUrl: './user-created-dialog.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class UserCreatedDialogComponent {\n response = input.required(); //mostriamo solo quando non nullo con .required\n user = input.required();\n closed = output();\n\n closeDialog(): void {\n this.closed.emit();\n }\n\n}\n","\n\n \n
\n
\n \n \n \n
\n
\n

\n Utente creato con successo\n

\n

Conferma e comunica subito la password temporanea.

\n
\n
\n\n \n
\n\n \n
\n \n {{ user().name[0] }}{{ user().surname[0] }}\n
\n
\n

{{ user().name }} {{ user().surname }}

\n

\n @\n {{ user().username }}\n

\n
\n \n \n Attivo\n
\n \n\n \n
\n
\n \n \n \n

Password temporanea

\n
\n
\n

\n Comunica questa password all'utente.\n Non sar\xE0 pi\xF9 recuperabile una volta chiusa la finestra.\n

\n \n \n {{ response().tempPassword }}\n \n
\n \n
\n\n \n\n \n
\n \n
\n\n
","import { Injectable } from \"@angular/core\";\n\n@Injectable({ providedIn: 'root' })\nexport class DecoderPasswordService {\n\n public decodeTempPassword(tempPassword: string): string {\n const normalized = tempPassword.trim();\n const isBase64Like = /^[A-Za-z0-9+/]+={0,2}$/.test(normalized) && normalized.length % 4 === 0;\n\n if (!isBase64Like) {\n return tempPassword;\n }\n\n try {\n return atob(normalized);\n } catch {\n return tempPassword;\n }\n }\n\n}","import { Injectable, inject } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { map, Observable } from 'rxjs';\nimport { UserDto } from '../models/in/user.model.dto';\nimport { UserCreatedResponseDto } from '../models/in/user-created-response.model.dto';\nimport { CreateUserDto } from '../models/out/create-user.model.dto';\nimport { API_BASE_URL } from '../../../core/tokens/api-base-url.token';\nimport { DecoderPasswordService } from './decoder-password-service';\n\n@Injectable({ providedIn: 'root' })\nexport class UserApiService {\n\n private readonly http = inject(HttpClient);\n private readonly baseUrl: string = inject(API_BASE_URL);\n private readonly decoderPasswordService = inject(DecoderPasswordService);\n\n public getUsers(): Observable {\n return this.http.get(`${this.baseUrl}/users`);\n }\n\n public createUser(dto: CreateUserDto): Observable {\n return this.http\n .post(`${this.baseUrl}/users`, dto)\n .pipe(\n map((response) => ({\n ...response,\n tempPassword: this.decoderPasswordService.decodeTempPassword(response.tempPassword),\n })),\n );\n }\n\n public deleteUser(id: number): Observable {\n return this.http.delete(`${this.baseUrl}/users/${encodeURIComponent(id.toString())}`);\n }\n\n /*\n private decodeTempPassword(tempPassword: string): string {\n if (!this.isBase64Encoded(tempPassword)) {\n return tempPassword;\n }\n\n try {\n return atob(tempPassword);\n } catch {\n return tempPassword;\n }\n }\n\n private isBase64Encoded(value: string): boolean {\n const normalized = value.trim();\n if (normalized.length === 0 || normalized.length % 4 !== 0) {\n return false;\n }\n\n if (!/^[A-Za-z0-9+/]+={0,2}$/.test(normalized)) {\n return false;\n }\n\n try {\n const decoded = atob(normalized);\n const reEncoded = btoa(decoded).replace(/=+$/, '');\n const withoutPadding = normalized.replace(/=+$/, '');\n return reEncoded === withoutPadding;\n } catch {\n return false;\n }\n }\n */\n\n}\n","export enum UserManagementErrorType {\n USERNAME_ALREADY_IN_USE = 'USERNAME_ALREADY_IN_USE',\n OTHER_ERROR = 'OTHER_ERROR'\n}\n","import { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, OnInit, ViewChild, inject, signal } from '@angular/core';\nimport { UserListComponent } from '../user-list/user-list';\nimport { CreateUserFormComponent } from '../create-user-form/create-user-form.component';\nimport { UserCreatedDialogComponent } from '../user-created-dialog/user-created-dialog';\nimport { UserApiService } from '../../services/user-api.service';\nimport { BehaviorSubject, catchError, Observable, of, switchMap } from 'rxjs';\nimport { UserDto } from '../../models/in/user.model.dto';\nimport { UserCreatedResponseDto } from '../../models/in/user-created-response.model.dto';\nimport { UserManagementErrorType } from '../../models/user-management-error-type.enum';\nimport { CreateUserDto } from '../../models/out/create-user.model.dto';\n\n@Component({\n selector: 'app-user-management-page',\n imports: [AsyncPipe, UserListComponent, CreateUserFormComponent, UserCreatedDialogComponent],\n templateUrl: './user-management-page.html',\n styleUrl: './user-management-page.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class UserManagementPageComponent implements OnInit {\n\n private readonly userApi = inject(UserApiService);\n //stato reattivo: si emette un valore qui dentro ogni volta che vogliamo refreshare la lista\n private readonly refreshTrigger$ = new BehaviorSubject(undefined);\n\n public users$!: Observable;\n public createdResponse = signal(null);\n public createdUser = signal(null);\n public formError = signal(null);\n public isCreateFormOpen = signal(false);\n\n @ViewChild(CreateUserFormComponent)\n private readonly createUserFormComponent?: CreateUserFormComponent;\n\n\n\n // Ogni volta che refreshTrigger$ emette, switchMap annulla la chiamata HTTP precedente (se in corso)\n // e ne fa partire una nuova, restituendo la lista aggiornata.\n ngOnInit(): void {\n this.users$ = this.refreshTrigger$.pipe(\n switchMap(() => this.userApi.getUsers()),\n catchError(err => {\n console.error('Errore durante il caricamento degli utenti:', err);\n return of([]);\n })\n )\n }\n\n public openCreateForm(): void {\n this.isCreateFormOpen.set(true);\n }\n\n public closeCreateForm(): void {\n this.isCreateFormOpen.set(false);\n }\n\n\n onFormSubmit(dto: CreateUserDto): void {\n\n this.formError.set(null);\n\n //chiama il service\n this.userApi.createUser(dto).subscribe({\n next: (response: UserCreatedResponseDto) => {\n //Successo\n //mostra dialog e aggiorna la lista\n this.createdResponse.set(response);\n this.createdUser.set(dto);\n this.refreshTrigger$.next(); // ricarica la lista\n this.formError.set(null);\n this.createUserFormComponent?.resetAndFocus();\n },\n error: (err) => {\n if (err.status === 409) {\n this.formError.set(UserManagementErrorType.USERNAME_ALREADY_IN_USE);\n } else {\n this.formError.set(UserManagementErrorType.OTHER_ERROR);\n }\n }\n });\n }\n\n\n onUserDeleted(id: number): void {\n this.userApi.deleteUser(id).subscribe({\n next: () => {\n //successo: trigger emette, lista si aggiorna\n this.refreshTrigger$.next();\n },\n error: (err) => {\n console.error(\"Errore durante l'eliminazione:\", err);\n }\n });\n }\n\n\n //quando l'amministratore chiude il dialog della creazione utente avvenuta con display tempPassword\n onDialogClosed(): void {\n this.createdResponse.set(null);\n this.createdUser.set(null);\n }\n\n\n}\n","
\n\n
\n
\n

Utenti

\n

Gestione operatori sanitari

\n

Crea nuovi profili OSS e gestisci l'anagrafica utenti esistente.

\n
\n
\n\n
\n \n \n\n
\n\n
\n @if (users$ | async; as users) {\n \n \n } @else {\n \n \n
\n

Caricamento operatori in corso\u2026

\n \n }\n \n \n\n @if (createdResponse(); as response) {\n @if (createdUser(); as createdUser) {\n \n \n }\n }\n\n
"],mappings:"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",names:["\u0275\u0275domElementStart","\u0275\u0275text","\u0275\u0275domElementEnd","\u0275\u0275domListener","user_r2","\u0275\u0275restoreView","_r1","$implicit","ctx_r2","\u0275\u0275nextContext","\u0275\u0275resetView","onDeleteRequest","\u0275\u0275domElement","\u0275\u0275advance","\u0275\u0275textInterpolate1","username","\u0275\u0275textInterpolate","name","surname","_r4","onDeleteCancel","onDeleteConfirm","\u0275\u0275textInterpolate2","userToDelete_r5","UserListComponent","users","input","deleteUser","output","pendingDeleteUser","signal","user","set","emit","id","onDelete","selectors","inputs","outputs","decls","vars","consts","template","rf","ctx","\u0275\u0275repeaterCreate","UserListComponent_For_28_Template","_forTrack0","UserListComponent_ForEmpty_29_Template","\u0275\u0275conditionalCreate","UserListComponent_Conditional_30_Template","tmp_0_0","length","\u0275\u0275repeater","\u0275\u0275conditional","tmp_2_0","\u0275\u0275elementStart","\u0275\u0275listener","\u0275\u0275restoreView","_r1","ctx_r1","\u0275\u0275nextContext","\u0275\u0275resetView","requestOpen","\u0275\u0275element","\u0275\u0275elementEnd","\u0275\u0275text","_r3","requestClose","\u0275\u0275conditionalCreate","CreateUserFormComponent_Conditional_25_Conditional_4_Template","CreateUserFormComponent_Conditional_25_Conditional_5_Template","\u0275\u0275advance","\u0275\u0275conditional","form","controls","hasError","CreateUserFormComponent_Conditional_34_Conditional_4_Template","CreateUserFormComponent_Conditional_34_Conditional_5_Template","CreateUserFormComponent_Conditional_44_Conditional_4_Template","CreateUserFormComponent_Conditional_44_Conditional_5_Template","CreateUserFormComponent","errorType","input","isOpen","formSubmit","output","openRequest","closeRequest","nameInput","fb","inject","FormBuilder","nonNullable","group","name","Validators","required","minLength","surname","username","submit","valid","emit","getRawValue","markAllAsTouched","reset","resetAndFocus","markAsPristine","markAsUntouched","queueMicrotask","nativeElement","focus","selectors","viewQuery","rf","ctx","CreateUserFormComponent_Conditional_12_Template","CreateUserFormComponent_Conditional_13_Template","CreateUserFormComponent_Conditional_25_Template","CreateUserFormComponent_Conditional_34_Template","CreateUserFormComponent_Conditional_44_Template","CreateUserFormComponent_Conditional_45_Template","CreateUserFormComponent_Conditional_46_Template","\u0275\u0275classMap","\u0275\u0275property","invalid","touched","ReactiveFormsModule","\u0275NgNoValidate","DefaultValueAccessor","NgControlStatus","NgControlStatusGroup","FormGroupDirective","FormControlName","encapsulation","changeDetection","UserCreatedDialogComponent","response","input","required","user","closed","output","closeDialog","emit","selectors","inputs","outputs","decls","vars","consts","template","rf","ctx","\u0275\u0275domElementStart","\u0275\u0275domElement","\u0275\u0275domElementEnd","\u0275\u0275text","\u0275\u0275domListener","\u0275\u0275advance","\u0275\u0275textInterpolate2","name","surname","\u0275\u0275textInterpolate","username","\u0275\u0275textInterpolate1","tempPassword","DecoderPasswordService","decodeTempPassword","tempPassword","normalized","trim","test","length","atob","factory","\u0275fac","providedIn","UserApiService","http","inject","HttpClient","baseUrl","API_BASE_URL","decoderPasswordService","DecoderPasswordService","getUsers","get","createUser","dto","post","pipe","map","response","__spreadProps","__spreadValues","tempPassword","decodeTempPassword","deleteUser","id","delete","encodeURIComponent","toString","factory","\u0275fac","providedIn","UserManagementErrorType","\u0275\u0275elementStart","\u0275\u0275listener","$event","\u0275\u0275restoreView","_r1","ctx_r1","\u0275\u0275nextContext","\u0275\u0275resetView","onUserDeleted","\u0275\u0275elementEnd","\u0275\u0275property","ctx","\u0275\u0275element","\u0275\u0275text","_r3","onDialogClosed","response_r4","\u0275\u0275conditionalCreate","UserManagementPageComponent_Conditional_16_Conditional_0_Template","\u0275\u0275conditional","tmp_2_0","createdUser","UserManagementPageComponent","userApi","inject","UserApiService","refreshTrigger$","BehaviorSubject","undefined","users$","createdResponse","signal","formError","isCreateFormOpen","createUserFormComponent","ngOnInit","pipe","switchMap","getUsers","catchError","err","console","error","of","openCreateForm","set","closeCreateForm","onFormSubmit","dto","createUser","subscribe","next","response","resetAndFocus","status","UserManagementErrorType","USERNAME_ALREADY_IN_USE","OTHER_ERROR","id","deleteUser","selectors","viewQuery","rf","CreateUserFormComponent","UserManagementPageComponent_Conditional_13_Template","\u0275\u0275conditionalBranchCreate","UserManagementPageComponent_Conditional_15_Template","UserManagementPageComponent_Conditional_16_Template","\u0275\u0275advance","\u0275\u0275pipeBind1","tmp_3_0","UserListComponent","UserCreatedDialogComponent","AsyncPipe","styles","changeDetection"]},_coverageSchema:"1a1c01bbd47fc00a2c39e90264f33305004495a9",hash:"2fdd1db2cff6d786ed118e9261f0eeab51ea77f8"};var coverage=global[gcv]||(global[gcv]={});if(!coverage[path]||coverage[path].hash!==hash){coverage[path]=coverageData;}var actualCoverage=coverage[path];{// @ts-ignore +cov_1d6wj97rj0=function(){return actualCoverage;};}return actualCoverage;}cov_1d6wj97rj0();import{a as oe,b as R,c as ae,d as se,e as le,f as me,g as de,l as ce,m as pe}from"./chunk-X3YLKFKT.js";import{b as ie,e as re}from"./chunk-2S5V5XEE.js";import{h as ne}from"./chunk-F6OGAIBI.js";import{Ab as i,Bb as L,Cb as F,Db as V,F as Z,Ib as ee,Jb as te,Ka as w,L as I,Q as C,Sb as y,Tb as k,V as h,W as E,Wa as j,X as p,Y as g,Ya as u,Za as J,_a as f,ab as K,bb as W,cb as T,db as s,e as B,eb as l,fb as x,ga as M,gb as o,h as $,hb as a,ib as v,jb as _,m as Q,nb as S,ob as D,pb as b,tb as N,ub as q,vb as z,w as Y,wa as m,zb as X}from"./chunk-RYTNMYZW.js";import{a as G,b as H}from"./chunk-VCZGUBMY.js";cov_1d6wj97rj0().s[0]++;var ge=(e,d)=>{cov_1d6wj97rj0().f[0]++;cov_1d6wj97rj0().s[1]++;return d.id;};function ve(e,d){cov_1d6wj97rj0().f[1]++;cov_1d6wj97rj0().s[2]++;if(e&1){cov_1d6wj97rj0().b[0][0]++;let t=(cov_1d6wj97rj0().s[3]++,_());cov_1d6wj97rj0().s[4]++;o(0,"tr",15)(1,"td",17)(2,"span",18)(3,"span",19),i(4,"@"),a(),i(5),a()(),o(6,"td",20),i(7),a(),o(8,"td",20),i(9),a(),o(10,"td",17)(11,"button",21),D("click",function(){cov_1d6wj97rj0().f[2]++;let n=(cov_1d6wj97rj0().s[5]++,h(t).$implicit),c=(cov_1d6wj97rj0().s[6]++,b());cov_1d6wj97rj0().s[7]++;return E(c.onDeleteRequest(n));}),p(),o(12,"svg",22),v(13,"path",23),a(),i(14," Elimina "),a()()();}else{cov_1d6wj97rj0().b[0][1]++;}cov_1d6wj97rj0().s[8]++;if(e&2){cov_1d6wj97rj0().b[1][0]++;let t=(cov_1d6wj97rj0().s[9]++,d.$implicit);cov_1d6wj97rj0().s[10]++;m(5),F("",t.username," "),m(2),L(t.name),m(2),L(t.surname);}else{cov_1d6wj97rj0().b[1][1]++;}}function he(e,d){cov_1d6wj97rj0().f[3]++;cov_1d6wj97rj0().s[11]++;(cov_1d6wj97rj0().b[2][0]++,e&1)&&(cov_1d6wj97rj0().b[2][1]++,o(0,"tr")(1,"td",24)(2,"div",25)(3,"div",26),p(),o(4,"svg",27),v(5,"path",28),a()(),g(),o(6,"div")(7,"p",29),i(8,"Nessun operatore sanitario presente"),a(),o(9,"p",30),i(10,'Usa il pulsante "Inserisci Nuovo Operatore" per aggiungere il primo profilo.'),a()()()()());}function Ee(e,d){cov_1d6wj97rj0().f[4]++;cov_1d6wj97rj0().s[12]++;if(e&1){cov_1d6wj97rj0().b[3][0]++;let t=(cov_1d6wj97rj0().s[13]++,_());cov_1d6wj97rj0().s[14]++;o(0,"dialog",16)(1,"div",31)(2,"div",2)(3,"div",32),p(),o(4,"svg",33),v(5,"path",34),a()(),g(),o(6,"div")(7,"h3",35),i(8,"Conferma eliminazione "),a(),o(9,"p",7),i(10,"Questa operazione non pu\xF2 essere annullata."),a()()(),o(11,"button",36),D("click",function(){cov_1d6wj97rj0().f[5]++;cov_1d6wj97rj0().s[15]++;h(t);let n=(cov_1d6wj97rj0().s[16]++,b());cov_1d6wj97rj0().s[17]++;return E(n.onDeleteCancel());}),p(),o(12,"svg",37),v(13,"path",38),a()()(),g(),o(14,"div",39)(15,"p",40),i(16," Stai per eliminare l'operatore "),o(17,"strong",41),i(18),a(),i(19,". "),a(),o(20,"div",42),p(),o(21,"svg",43),v(22,"path",44),a(),g(),o(23,"span",45),i(24),a()()(),o(25,"div",46)(26,"button",47),D("click",function(){cov_1d6wj97rj0().f[6]++;cov_1d6wj97rj0().s[18]++;h(t);let n=(cov_1d6wj97rj0().s[19]++,b());cov_1d6wj97rj0().s[20]++;return E(n.onDeleteCancel());}),i(27," Annulla "),a(),o(28,"button",48),D("click",function(){cov_1d6wj97rj0().f[7]++;cov_1d6wj97rj0().s[21]++;h(t);let n=(cov_1d6wj97rj0().s[22]++,b());cov_1d6wj97rj0().s[23]++;return E(n.onDeleteConfirm());}),i(29," Elimina operatore "),a()()();}else{cov_1d6wj97rj0().b[3][1]++;}cov_1d6wj97rj0().s[24]++;if(e&2){cov_1d6wj97rj0().b[4][0]++;let t=(cov_1d6wj97rj0().s[25]++,d);cov_1d6wj97rj0().s[26]++;m(18),V("",t.name," ",t.surname),m(6),F("@",t.username);}else{cov_1d6wj97rj0().b[4][1]++;}}var ue=(cov_1d6wj97rj0().s[27]++,(()=>{cov_1d6wj97rj0().f[8]++;class e{users=(cov_1d6wj97rj0().s[28]++,k());deleteUser=(cov_1d6wj97rj0().s[29]++,y());pendingDeleteUser=(cov_1d6wj97rj0().s[30]++,M(null));onDeleteRequest(t){cov_1d6wj97rj0().f[9]++;cov_1d6wj97rj0().s[31]++;this.pendingDeleteUser.set(t);}onDeleteCancel(){cov_1d6wj97rj0().f[10]++;cov_1d6wj97rj0().s[32]++;this.pendingDeleteUser.set(null);}onDeleteConfirm(){cov_1d6wj97rj0().f[11]++;let t=(cov_1d6wj97rj0().s[33]++,this.pendingDeleteUser());cov_1d6wj97rj0().s[34]++;(cov_1d6wj97rj0().b[5][0]++,t)&&(cov_1d6wj97rj0().b[5][1]++,this.deleteUser.emit(t.id),this.pendingDeleteUser.set(null));}onDelete(t){cov_1d6wj97rj0().f[12]++;cov_1d6wj97rj0().s[35]++;this.onDeleteRequest(t);}static ɵfac=(cov_1d6wj97rj0().s[36]++,function(r){cov_1d6wj97rj0().f[13]++;cov_1d6wj97rj0().s[37]++;return new((cov_1d6wj97rj0().b[6][0]++,r)||(cov_1d6wj97rj0().b[6][1]++,e))();});static ɵcmp=(cov_1d6wj97rj0().s[38]++,w({type:e,selectors:[["app-user-list"]],inputs:{users:[1,"users"]},outputs:{deleteUser:"deleteUser"},decls:31,vars:3,consts:[["aria-label","Elenco operatori sanitari",1,"overflow-hidden","rounded-2xl","border","border-slate-200","bg-white","shadow-sm"],[1,"flex","flex-wrap","items-center","justify-between","gap-3","border-b","border-slate-100","bg-amber-300","px-5","py-4"],[1,"flex","items-center","gap-3"],[1,"flex","h-8","w-8","flex-shrink-0","items-center","justify-center","rounded-lg","bg-sky-100"],["fill","none","viewBox","0 0 24 24","stroke-width","2","stroke","currentColor",1,"h-4","w-4","text-sky-700"],["stroke-linecap","round","stroke-linejoin","round","d","M18 18.72a9.094 9.094 0 003.741-.479 3 3 0 00-4.682-2.72m.94 3.198l.001.031c0 .225-.012.447-.037.666A11.944 11.944 0 0112 21c-2.17 0-4.207-.576-5.963-1.584A6.062 6.062 0 016 18.719m12 0a5.971 5.971 0 00-.941-3.197m0 0A5.995 5.995 0 0012 12.75a5.995 5.995 0 00-5.058 2.772m0 0a3 3 0 00-4.681 2.72 8.986 8.986 0 003.74.477m.94-3.197a5.971 5.971 0 00-.94 3.197M15 6.75a3 3 0 11-6 0 3 3 0 016 0zm6 3a2.25 2.25 0 11-4.5 0 2.25 2.25 0 014.5 0zm-13.5 0a2.25 2.25 0 11-4.5 0 2.25 2.25 0 014.5 0z"],[1,"font-display","text-sm","font-bold","tracking-tight","text-slate-900",2,"font-family","'Syne',sans-serif"],[1,"text-xs","text-slate-500"],[1,"inline-flex","items-center","gap-1.5","rounded-full","bg-slate-900","px-3","py-1","text-xs","font-semibold","text-white"],[1,"h-1.5","w-1.5","rounded-full","bg-emerald-400"],[1,"overflow-x-auto"],[1,"min-w-full","text-left","text-sm"],[1,"border-b","border-slate-100"],[1,"px-5","py-3","text-[11px]","font-semibold","uppercase","tracking-wider","text-slate-400"],[1,"divide-y","divide-slate-50"],[1,"group","transition-colors","hover:bg-slate-50/80"],["open","","aria-labelledby","delete-user-dialog-title",1,"fixed","inset-0","z-50","m-auto","w-[95vw]","max-w-md","overflow-hidden","rounded-2xl","border","border-slate-200","bg-white","p-0","shadow-2xl","backdrop:bg-slate-900/50","focus:outline-none"],[1,"px-5","py-3"],[1,"inline-flex","items-center","gap-1.5","rounded-md","bg-slate-100","px-2","py-0.5","font-mono","text-xs","font-medium","text-slate-700"],[1,"text-slate-400"],[1,"px-5","py-3","text-sm","text-slate-700"],["type","button",1,"inline-flex","cursor-pointer","items-center","gap-1.5","rounded-md","border","border-transparent","px-2.5","py-1.5","text-xs","font-semibold","text-slate-400","transition-all","hover:border-red-200","hover:bg-red-50","hover:text-red-600","focus-visible:outline-2","focus-visible:outline-offset-2","focus-visible:outline-red-400",3,"click"],["fill","none","viewBox","0 0 24 24","stroke-width","2","stroke","currentColor",1,"h-3.5","w-3.5"],["stroke-linecap","round","stroke-linejoin","round","d","M14.74 9l-.346 9m-4.788 0L9.26 9m9.968-3.21c.342.052.682.107 1.022.166m-1.022-.165L18.16 19.673a2.25 2.25 0 01-2.244 2.077H8.084a2.25 2.25 0 01-2.244-2.077L4.772 5.79m14.456 0a48.108 48.108 0 00-3.478-.397m-12 .562c.34-.059.68-.114 1.022-.165m0 0a48.11 48.11 0 013.478-.397m7.5 0v-.916c0-1.18-.91-2.164-2.09-2.201a51.964 51.964 0 00-3.32 0c-1.18.037-2.09 1.022-2.09 2.201v.916m7.5 0a48.667 48.667 0 00-7.5 0"],["colspan","4",1,"px-5","py-14","text-center"],[1,"flex","flex-col","items-center","gap-3"],[1,"flex","h-12","w-12","items-center","justify-center","rounded-full","bg-slate-100"],["fill","none","viewBox","0 0 24 24","stroke-width","1.5","stroke","currentColor",1,"h-6","w-6","text-slate-400"],["stroke-linecap","round","stroke-linejoin","round","d","M15 19.128a9.38 9.38 0 002.625.372 9.337 9.337 0 004.121-.952 4.125 4.125 0 00-7.533-2.493M15 19.128v-.003c0-1.113-.285-2.16-.786-3.07M15 19.128v.106A12.318 12.318 0 018.624 21c-2.331 0-4.512-.645-6.374-1.766l-.001-.109a6.375 6.375 0 0111.964-3.07M12 6.375a3.375 3.375 0 11-6.75 0 3.375 3.375 0 016.75 0zm8.25 2.25a2.625 2.625 0 11-5.25 0 2.625 2.625 0 015.25 0z"],[1,"text-sm","font-medium","text-slate-600"],[1,"mt-0.5","text-xs","text-slate-400"],[1,"flex","items-start","justify-between","gap-3","border-b","border-slate-100","bg-slate-50","px-5","py-4"],[1,"flex","h-9","w-9","flex-shrink-0","items-center","justify-center","rounded-full","bg-red-100"],["fill","none","viewBox","0 0 24 24","stroke-width","2","stroke","currentColor",1,"h-4","w-4","text-red-600"],["stroke-linecap","round","stroke-linejoin","round","d","M12 9v3.75m-9.303 3.376c-.866 1.5.217 3.374 1.948 3.374h14.71c1.73 0 2.813-1.874 1.948-3.374L13.949 3.378c-.866-1.5-3.032-1.5-3.898 0L2.697 16.126zM12 15.75h.007v.008H12v-.008z"],["id","delete-user-dialog-title",1,"text-sm","font-bold","text-slate-900"],["type","button","aria-label","Chiudi",1,"flex","h-7","w-7","items-center","justify-center","rounded-lg","text-slate-400","transition-colors","hover:bg-slate-100","hover:text-slate-600",3,"click"],["fill","none","viewBox","0 0 24 24","stroke-width","2","stroke","currentColor",1,"h-4","w-4"],["stroke-linecap","round","stroke-linejoin","round","d","M6 18L18 6M6 6l12 12"],[1,"px-5","py-5"],[1,"text-sm","text-slate-700"],[1,"font-semibold","text-slate-900"],[1,"mt-3","flex","items-center","gap-2","rounded-lg","bg-slate-50","px-3","py-2.5","text-xs","text-slate-500"],["fill","none","viewBox","0 0 24 24","stroke-width","2","stroke","currentColor",1,"h-3.5","w-3.5","flex-shrink-0"],["stroke-linecap","round","stroke-linejoin","round","d","M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z"],[1,"font-mono","font-medium","text-slate-600"],[1,"flex","items-center","justify-end","gap-2","border-t","border-slate-100","bg-slate-50","px-5","py-3"],["type","button",1,"rounded-lg","cursor-pointer","border","border-slate-200","bg-white","px-4","py-2","text-sm","font-semibold","text-slate-700","transition-colors","hover:bg-slate-50","focus-visible:outline-2","focus-visible:outline-offset-2","focus-visible:outline-slate-400",3,"click"],["type","button",1,"rounded-lg","cursor-pointer","border","border-red-600","bg-red-600","px-4","py-2","text-sm","font-semibold","text-white","transition-colors","hover:bg-red-700","focus-visible:outline-2","focus-visible:outline-offset-2","focus-visible:outline-red-600","active:scale-[0.98]",3,"click"]],template:function(r,n){cov_1d6wj97rj0().f[14]++;cov_1d6wj97rj0().s[39]++;if((cov_1d6wj97rj0().b[8][0]++,r&1)&&(cov_1d6wj97rj0().b[8][1]++,o(0,"section",0)(1,"header",1)(2,"div",2)(3,"div",3),p(),o(4,"svg",4),v(5,"path",5),a()(),g(),o(6,"div")(7,"h2",6),i(8," Elenco operatori sanitari "),a(),o(9,"p",7),i(10,"Anagrafica utenti registrati nel sistema."),a()()(),o(11,"span",8),v(12,"span",9),i(13),a()(),o(14,"div",10)(15,"table",11)(16,"thead")(17,"tr",12)(18,"th",13),i(19,"Username "),a(),o(20,"th",13),i(21,"Nome"),a(),o(22,"th",13),i(23,"Cognome"),a(),o(24,"th",13),i(25,"Azioni"),a()()(),o(26,"tbody",14),K(27,ve,15,3,"tr",15,ge,!1,he,11,0,"tr"),a()()(),u(30,Ee,30,3,"dialog",16),a()),r&2){cov_1d6wj97rj0().b[7][0]++;let c,U;cov_1d6wj97rj0().s[40]++;m(13),F(" ",(cov_1d6wj97rj0().b[9][0]++,(c=n.users())==null?(cov_1d6wj97rj0().b[10][0]++,null):(cov_1d6wj97rj0().b[10][1]++,c.length))??(cov_1d6wj97rj0().b[9][1]++,0)," utenti "),m(14),W(n.users()),m(3),f((U=n.pendingDeleteUser())?(cov_1d6wj97rj0().b[11][0]++,30):(cov_1d6wj97rj0().b[11][1]++,-1),U);}else{cov_1d6wj97rj0().b[7][1]++;}},encapsulation:2,changeDetection:0}));}cov_1d6wj97rj0().s[41]++;return e;})());var _e=(cov_1d6wj97rj0().s[42]++,["nameInput"]);function Ce(e,d){cov_1d6wj97rj0().f[15]++;cov_1d6wj97rj0().s[43]++;if(e&1){cov_1d6wj97rj0().b[12][0]++;let t=(cov_1d6wj97rj0().s[44]++,_());cov_1d6wj97rj0().s[45]++;s(0,"button",32),S("click",function(){cov_1d6wj97rj0().f[16]++;cov_1d6wj97rj0().s[46]++;h(t);let n=(cov_1d6wj97rj0().s[47]++,b());cov_1d6wj97rj0().s[48]++;return E(n.requestOpen());}),p(),s(1,"svg",33),x(2,"path",7),l(),i(3," Inserisci Nuovo Operatore "),l();}else{cov_1d6wj97rj0().b[12][1]++;}}function we(e,d){cov_1d6wj97rj0().f[17]++;cov_1d6wj97rj0().s[49]++;if(e&1){cov_1d6wj97rj0().b[13][0]++;let t=(cov_1d6wj97rj0().s[50]++,_());cov_1d6wj97rj0().s[51]++;s(0,"button",34),S("click",function(){cov_1d6wj97rj0().f[18]++;cov_1d6wj97rj0().s[52]++;h(t);let n=(cov_1d6wj97rj0().s[53]++,b());cov_1d6wj97rj0().s[54]++;return E(n.requestClose());}),i(1," Chiudi "),l();}else{cov_1d6wj97rj0().b[13][1]++;}}function Se(e,d){cov_1d6wj97rj0().f[19]++;cov_1d6wj97rj0().s[55]++;(cov_1d6wj97rj0().b[14][0]++,e&1)&&(cov_1d6wj97rj0().b[14][1]++,i(0," Il nome \xE8 obbligatorio. "));}function ye(e,d){cov_1d6wj97rj0().f[20]++;cov_1d6wj97rj0().s[56]++;(cov_1d6wj97rj0().b[15][0]++,e&1)&&(cov_1d6wj97rj0().b[15][1]++,i(0," Il nome deve essere di almeno 2 caratteri. "));}function ke(e,d){cov_1d6wj97rj0().f[21]++;cov_1d6wj97rj0().s[57]++;if((cov_1d6wj97rj0().b[17][0]++,e&1)&&(cov_1d6wj97rj0().b[17][1]++,s(0,"p",19),p(),s(1,"svg",35),x(2,"path",36),l(),g(),s(3,"span"),u(4,Se,1,0),u(5,ye,1,0),l()()),e&2){cov_1d6wj97rj0().b[16][0]++;let t=(cov_1d6wj97rj0().s[58]++,b());cov_1d6wj97rj0().s[59]++;m(4),f(t.form.controls.name.hasError("required")?(cov_1d6wj97rj0().b[18][0]++,4):(cov_1d6wj97rj0().b[18][1]++,-1)),m(),f(t.form.controls.name.hasError("minlength")?(cov_1d6wj97rj0().b[19][0]++,5):(cov_1d6wj97rj0().b[19][1]++,-1));}else{cov_1d6wj97rj0().b[16][1]++;}}function Ue(e,d){cov_1d6wj97rj0().f[22]++;cov_1d6wj97rj0().s[60]++;(cov_1d6wj97rj0().b[20][0]++,e&1)&&(cov_1d6wj97rj0().b[20][1]++,i(0," Il cognome \xE8 obbligatorio. "));}function Me(e,d){cov_1d6wj97rj0().f[23]++;cov_1d6wj97rj0().s[61]++;(cov_1d6wj97rj0().b[21][0]++,e&1)&&(cov_1d6wj97rj0().b[21][1]++,i(0," Il cognome deve essere di almeno 2 caratteri. "));}function Te(e,d){cov_1d6wj97rj0().f[24]++;cov_1d6wj97rj0().s[62]++;if((cov_1d6wj97rj0().b[23][0]++,e&1)&&(cov_1d6wj97rj0().b[23][1]++,s(0,"p",22),p(),s(1,"svg",35),x(2,"path",36),l(),g(),s(3,"span"),u(4,Ue,1,0),u(5,Me,1,0),l()()),e&2){cov_1d6wj97rj0().b[22][0]++;let t=(cov_1d6wj97rj0().s[63]++,b());cov_1d6wj97rj0().s[64]++;m(4),f(t.form.controls.surname.hasError("required")?(cov_1d6wj97rj0().b[24][0]++,4):(cov_1d6wj97rj0().b[24][1]++,-1)),m(),f(t.form.controls.surname.hasError("minlength")?(cov_1d6wj97rj0().b[25][0]++,5):(cov_1d6wj97rj0().b[25][1]++,-1));}else{cov_1d6wj97rj0().b[22][1]++;}}function De(e,d){cov_1d6wj97rj0().f[25]++;cov_1d6wj97rj0().s[65]++;(cov_1d6wj97rj0().b[26][0]++,e&1)&&(cov_1d6wj97rj0().b[26][1]++,i(0," L'username \xE8 obbligatorio. "));}function Re(e,d){cov_1d6wj97rj0().f[26]++;cov_1d6wj97rj0().s[66]++;(cov_1d6wj97rj0().b[27][0]++,e&1)&&(cov_1d6wj97rj0().b[27][1]++,i(0," L'username deve essere di almeno 4 caratteri. "));}function Fe(e,d){cov_1d6wj97rj0().f[27]++;cov_1d6wj97rj0().s[67]++;if((cov_1d6wj97rj0().b[29][0]++,e&1)&&(cov_1d6wj97rj0().b[29][1]++,s(0,"p",25),p(),s(1,"svg",35),x(2,"path",36),l(),g(),s(3,"span"),u(4,De,1,0),u(5,Re,1,0),l()()),e&2){cov_1d6wj97rj0().b[28][0]++;let t=(cov_1d6wj97rj0().s[68]++,b());cov_1d6wj97rj0().s[69]++;m(4),f(t.form.controls.username.hasError("required")?(cov_1d6wj97rj0().b[30][0]++,4):(cov_1d6wj97rj0().b[30][1]++,-1)),m(),f(t.form.controls.username.hasError("minlength")?(cov_1d6wj97rj0().b[31][0]++,5):(cov_1d6wj97rj0().b[31][1]++,-1));}else{cov_1d6wj97rj0().b[28][1]++;}}function Le(e,d){cov_1d6wj97rj0().f[28]++;cov_1d6wj97rj0().s[70]++;(cov_1d6wj97rj0().b[32][0]++,e&1)&&(cov_1d6wj97rj0().b[32][1]++,s(0,"p",26),p(),s(1,"svg",35),x(2,"path",37),l(),i(3," Username gi\xE0 in uso. Scegline un altro. "),l());}function Ve(e,d){cov_1d6wj97rj0().f[29]++;cov_1d6wj97rj0().s[71]++;(cov_1d6wj97rj0().b[33][0]++,e&1)&&(cov_1d6wj97rj0().b[33][1]++,s(0,"p",27),p(),s(1,"svg",35),x(2,"path",36),l(),i(3," Errore durante la creazione utente. Riprova. "),l());}var P=(cov_1d6wj97rj0().s[72]++,(()=>{cov_1d6wj97rj0().f[30]++;class e{errorType=(cov_1d6wj97rj0().s[73]++,k(null));isOpen=(cov_1d6wj97rj0().s[74]++,k(!1));formSubmit=(cov_1d6wj97rj0().s[75]++,y());openRequest=(cov_1d6wj97rj0().s[76]++,y());closeRequest=(cov_1d6wj97rj0().s[77]++,y());nameInput;fb=(cov_1d6wj97rj0().s[78]++,C(ce));form=(cov_1d6wj97rj0().s[79]++,this.fb.nonNullable.group({name:["",[R.required,R.minLength(2)]],surname:["",[R.required,R.minLength(2)]],username:["",[R.required,R.minLength(4)]]}));submit(){cov_1d6wj97rj0().f[31]++;cov_1d6wj97rj0().s[80]++;this.form.valid?(cov_1d6wj97rj0().b[34][0]++,this.formSubmit.emit(this.form.getRawValue())):(cov_1d6wj97rj0().b[34][1]++,this.form.markAllAsTouched());}reset(){cov_1d6wj97rj0().f[32]++;cov_1d6wj97rj0().s[81]++;this.form.reset({name:"",surname:"",username:""});}resetAndFocus(){cov_1d6wj97rj0().f[33]++;cov_1d6wj97rj0().s[82]++;this.reset(),this.form.markAsPristine(),this.form.markAsUntouched(),queueMicrotask(()=>{cov_1d6wj97rj0().f[34]++;cov_1d6wj97rj0().s[83]++;this.nameInput?.nativeElement.focus();});}requestClose(){cov_1d6wj97rj0().f[35]++;cov_1d6wj97rj0().s[84]++;this.closeRequest.emit();}requestOpen(){cov_1d6wj97rj0().f[36]++;cov_1d6wj97rj0().s[85]++;this.openRequest.emit();}static ɵfac=(cov_1d6wj97rj0().s[86]++,function(r){cov_1d6wj97rj0().f[37]++;cov_1d6wj97rj0().s[87]++;return new((cov_1d6wj97rj0().b[35][0]++,r)||(cov_1d6wj97rj0().b[35][1]++,e))();});static ɵcmp=(cov_1d6wj97rj0().s[88]++,w({type:e,selectors:[["app-create-user-form"]],viewQuery:function(r,n){cov_1d6wj97rj0().f[38]++;cov_1d6wj97rj0().s[89]++;if((cov_1d6wj97rj0().b[37][0]++,r&1)&&(cov_1d6wj97rj0().b[37][1]++,N(_e,5)),r&2){cov_1d6wj97rj0().b[36][0]++;let c;cov_1d6wj97rj0().s[90]++;(cov_1d6wj97rj0().b[38][0]++,q(c=z()))&&(cov_1d6wj97rj0().b[38][1]++,n.nameInput=c.first);}else{cov_1d6wj97rj0().b[36][1]++;}},inputs:{errorType:[1,"errorType"],isOpen:[1,"isOpen"]},outputs:{formSubmit:"formSubmit",openRequest:"openRequest",closeRequest:"closeRequest"},decls:52,vars:16,consts:[["nameInput",""],["aria-label","Creazione operatore",1,"overflow-hidden","rounded-2xl","border","border-slate-200","bg-white","shadow-sm","z-0"],[1,"border-b","border-slate-100","bg-amber-300","px-5","py-4"],[1,"flex","items-start","justify-between","gap-3"],[1,"flex","items-center","gap-3"],[1,"flex","h-8","w-8","shrink-0","items-center","justify-center","rounded-lg","bg-emerald-100"],["fill","none","viewBox","0 0 24 24","stroke-width","2","stroke","currentColor",1,"h-4","w-4","text-emerald-700"],["stroke-linecap","round","stroke-linejoin","round","d","M12 4.5v15m7.5-7.5h-15"],[1,"font-display","text-sm","font-bold","tracking-tight","text-slate-900",2,"font-family","'Syne',sans-serif"],[1,"text-xs","text-slate-500"],["type","button",1,"care-btn","care-btn--compact","px-3.5","shadow-sm","border-slate-900","bg-slate-900","text-white","hover:border-slate-800","hover:bg-slate-800","focus-visible:outline-2","focus-visible:outline-offset-2","focus-visible:outline-slate-900"],["type","button",1,"care-btn","care-btn--danger","care-btn--compact","px-3.5","shadow-sm","focus-visible:outline-2","focus-visible:outline-offset-2","focus-visible:outline-red-500"],["data-testid","create-user-panel"],[1,"space-y-4","px-5","py-5",3,"ngSubmit","formGroup"],[1,"space-y-1"],["for","name",1,"flex","items-center","gap-1","text-xs","font-semibold","uppercase","tracking-wide","text-slate-500"],[1,"text-rose-500"],["id","name","type","text","formControlName","name","placeholder","Es. Mario","autocomplete","given-name",1,"w-full","rounded-lg","border","border-slate-200","bg-slate-50","px-3","py-2.5","text-sm","text-slate-900","outline-none","transition-all","placeholder:text-slate-400","hover:border-slate-300","focus:border-sky-500","focus:bg-white","focus:ring-3","focus:ring-sky-100"],[1,"text-[11px]","text-slate-400"],["id","name-error","role","alert",1,"flex","items-start","gap-2","rounded-lg","border","border-rose-200","bg-rose-50","px-3","py-2","text-xs","text-rose-700"],["for","surname",1,"flex","items-center","gap-1","text-xs","font-semibold","uppercase","tracking-wide","text-slate-500"],["id","surname","type","text","formControlName","surname","placeholder","Es. Rossi","autocomplete","family-name",1,"w-full","rounded-lg","border","border-slate-200","bg-slate-50","px-3","py-2.5","text-sm","text-slate-900","outline-none","transition-all","placeholder:text-slate-400","hover:border-slate-300","focus:border-sky-500","focus:bg-white","focus:ring-3","focus:ring-sky-100"],["id","surname-error","role","alert",1,"flex","items-start","gap-2","rounded-lg","border","border-rose-200","bg-rose-50","px-3","py-2","text-xs","text-rose-700"],["for","username",1,"flex","items-center","gap-1","text-xs","font-semibold","uppercase","tracking-wide","text-slate-500"],["id","username","type","text","formControlName","username","placeholder","Es. mrossi","autocomplete","username",1,"w-full","rounded-lg","border","border-slate-200","bg-slate-50","px-3","py-2.5","text-sm","text-slate-900","outline-none","transition-all","placeholder:text-slate-400","hover:border-slate-300","focus:border-sky-500","focus:bg-white","focus:ring-3","focus:ring-sky-100"],["id","username-error","role","alert",1,"flex","items-start","gap-2","rounded-lg","border","border-rose-200","bg-rose-50","px-3","py-2","text-xs","text-rose-700"],["role","alert",1,"flex","items-start","gap-2","rounded-lg","border","border-amber-200","bg-amber-50","px-3","py-2","text-xs","text-amber-800"],["role","alert",1,"flex","items-start","gap-2","rounded-lg","border","border-rose-200","bg-rose-50","px-3","py-2","text-xs","text-rose-700"],[1,"border-t","border-slate-100","pt-1"],["type","submit",1,"care-btn","care-btn--primary","group","flex","w-full","items-center","justify-center","gap-2","px-4","shadow-sm","focus-visible:outline-2","focus-visible:outline-offset-2","focus-visible:outline-amber-400",3,"disabled"],["fill","none","viewBox","0 0 24 24","stroke-width","2.5","stroke","currentColor",1,"h-4","w-4","transition-transform","group-hover:scale-110"],["stroke-linecap","round","stroke-linejoin","round","d","M19 7.5v3m0 0v3m0-3h3m-3 0h-3m-2.25-4.125a3.375 3.375 0 11-6.75 0 3.375 3.375 0 016.75 0zM4 19.235v-.11a6.375 6.375 0 0112.75 0v.109A12.318 12.318 0 0110.374 21c-2.331 0-4.512-.645-6.374-1.766z"],["type","button",1,"care-btn","care-btn--compact","px-3.5","shadow-sm","border-slate-900","bg-slate-900","text-white","hover:border-slate-800","hover:bg-slate-800","focus-visible:outline-2","focus-visible:outline-offset-2","focus-visible:outline-slate-900",3,"click"],["fill","none","viewBox","0 0 24 24","stroke-width","2.5","stroke","currentColor",1,"h-3.5","w-3.5","text-emerald-400"],["type","button",1,"care-btn","care-btn--danger","care-btn--compact","px-3.5","shadow-sm","focus-visible:outline-2","focus-visible:outline-offset-2","focus-visible:outline-red-500",3,"click"],["fill","currentColor","viewBox","0 0 20 20",1,"mt-0.5","h-3.5","w-3.5","shrink-0"],["fill-rule","evenodd","d","M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7 4a1 1 0 11-2 0 1 1 0 012 0zm-1-9a1 1 0 00-1 1v4a1 1 0 102 0V6a1 1 0 00-1-1z","clip-rule","evenodd"],["fill-rule","evenodd","d","M8.257 3.099c.765-1.36 2.722-1.36 3.486 0l5.58 9.92c.75 1.334-.213 2.98-1.742 2.98H4.42c-1.53 0-2.493-1.646-1.743-2.98l5.58-9.92zM11 13a1 1 0 11-2 0 1 1 0 012 0zm-1-8a1 1 0 00-1 1v3a1 1 0 002 0V6a1 1 0 00-1-1z","clip-rule","evenodd"]],template:function(r,n){cov_1d6wj97rj0().f[39]++;cov_1d6wj97rj0().s[91]++;(cov_1d6wj97rj0().b[39][0]++,r&1)&&(cov_1d6wj97rj0().b[39][1]++,s(0,"section",1)(1,"header",2)(2,"div",3)(3,"div",4)(4,"div",5),p(),s(5,"svg",6),x(6,"path",7),l()(),g(),s(7,"div")(8,"h2",8),i(9," Nuovo operatore sanitario "),l(),s(10,"p",9),i(11,"Compila i campi per creare un profilo OSS."),l()()(),u(12,Ce,4,0,"button",10)(13,we,2,0,"button",11),l()(),s(14,"div",12)(15,"form",13),S("ngSubmit",function(){cov_1d6wj97rj0().f[40]++;cov_1d6wj97rj0().s[92]++;return n.submit();}),s(16,"div",14)(17,"label",15),i(18," Nome "),s(19,"span",16),i(20,"*"),l()(),x(21,"input",17,0),s(23,"p",18),i(24,"Minimo 2 caratteri."),l(),u(25,ke,6,2,"p",19),l(),s(26,"div",14)(27,"label",20),i(28," Cognome "),s(29,"span",16),i(30,"*"),l()(),x(31,"input",21),s(32,"p",18),i(33,"Minimo 2 caratteri."),l(),u(34,Te,6,2,"p",22),l(),s(35,"div",14)(36,"label",23),i(37," Username "),s(38,"span",16),i(39,"*"),l()(),s(40,"div"),x(41,"input",24),l(),s(42,"p",18),i(43,"Minimo 4 caratteri."),l(),u(44,Fe,6,2,"p",25),u(45,Le,4,0,"p",26),u(46,Ve,4,0,"p",27),l(),x(47,"div",28),s(48,"button",29),p(),s(49,"svg",30),x(50,"path",31),l(),i(51," Crea utente "),l()()()()),(cov_1d6wj97rj0().b[40][0]++,r&2)&&(cov_1d6wj97rj0().b[40][1]++,m(12),f(n.isOpen()?(cov_1d6wj97rj0().b[41][0]++,13):(cov_1d6wj97rj0().b[41][1]++,12)),m(2),X(n.isOpen()?(cov_1d6wj97rj0().b[42][0]++,"overflow-hidden transition-all duration-200 ease-in-out opacity-100 max-h-480"):(cov_1d6wj97rj0().b[42][1]++,"pointer-events-none overflow-hidden transition-all duration-200 ease-in-out opacity-0 max-h-0")),m(),T("formGroup",n.form),m(6),j("aria-invalid",(cov_1d6wj97rj0().b[43][0]++,n.form.controls.name.invalid)&&(cov_1d6wj97rj0().b[43][1]++,n.form.controls.name.touched))("aria-describedby",(cov_1d6wj97rj0().b[45][0]++,n.form.controls.name.invalid)&&(cov_1d6wj97rj0().b[45][1]++,n.form.controls.name.touched)?(cov_1d6wj97rj0().b[44][0]++,"name-error"):(cov_1d6wj97rj0().b[44][1]++,null)),m(4),f((cov_1d6wj97rj0().b[47][0]++,n.form.controls.name.invalid)&&(cov_1d6wj97rj0().b[47][1]++,n.form.controls.name.touched)?(cov_1d6wj97rj0().b[46][0]++,25):(cov_1d6wj97rj0().b[46][1]++,-1)),m(6),j("aria-invalid",(cov_1d6wj97rj0().b[48][0]++,n.form.controls.surname.invalid)&&(cov_1d6wj97rj0().b[48][1]++,n.form.controls.surname.touched))("aria-describedby",(cov_1d6wj97rj0().b[50][0]++,n.form.controls.surname.invalid)&&(cov_1d6wj97rj0().b[50][1]++,n.form.controls.surname.touched)?(cov_1d6wj97rj0().b[49][0]++,"surname-error"):(cov_1d6wj97rj0().b[49][1]++,null)),m(3),f((cov_1d6wj97rj0().b[52][0]++,n.form.controls.surname.invalid)&&(cov_1d6wj97rj0().b[52][1]++,n.form.controls.surname.touched)?(cov_1d6wj97rj0().b[51][0]++,34):(cov_1d6wj97rj0().b[51][1]++,-1)),m(7),j("aria-invalid",(cov_1d6wj97rj0().b[53][0]++,n.form.controls.username.invalid)&&(cov_1d6wj97rj0().b[53][1]++,n.form.controls.username.touched))("aria-describedby",(cov_1d6wj97rj0().b[55][0]++,n.form.controls.username.invalid)&&(cov_1d6wj97rj0().b[55][1]++,n.form.controls.username.touched)?(cov_1d6wj97rj0().b[54][0]++,"username-error"):(cov_1d6wj97rj0().b[54][1]++,null)),m(3),f((cov_1d6wj97rj0().b[57][0]++,n.form.controls.username.invalid)&&(cov_1d6wj97rj0().b[57][1]++,n.form.controls.username.touched)?(cov_1d6wj97rj0().b[56][0]++,44):(cov_1d6wj97rj0().b[56][1]++,-1)),m(),f(n.errorType()==="USERNAME_ALREADY_IN_USE"?(cov_1d6wj97rj0().b[58][0]++,45):(cov_1d6wj97rj0().b[58][1]++,-1)),m(),f(n.errorType()==="OTHER_ERROR"?(cov_1d6wj97rj0().b[59][0]++,46):(cov_1d6wj97rj0().b[59][1]++,-1)),m(2),T("disabled",n.form.invalid));},dependencies:[pe,le,oe,ae,se,de,me],encapsulation:2,changeDetection:0}));}cov_1d6wj97rj0().s[93]++;return e;})());var fe=(cov_1d6wj97rj0().s[94]++,(()=>{cov_1d6wj97rj0().f[41]++;class e{response=(cov_1d6wj97rj0().s[95]++,k.required());user=(cov_1d6wj97rj0().s[96]++,k.required());closed=(cov_1d6wj97rj0().s[97]++,y());closeDialog(){cov_1d6wj97rj0().f[42]++;cov_1d6wj97rj0().s[98]++;this.closed.emit();}static ɵfac=(cov_1d6wj97rj0().s[99]++,function(r){cov_1d6wj97rj0().f[43]++;cov_1d6wj97rj0().s[100]++;return new((cov_1d6wj97rj0().b[60][0]++,r)||(cov_1d6wj97rj0().b[60][1]++,e))();});static ɵcmp=(cov_1d6wj97rj0().s[101]++,w({type:e,selectors:[["app-user-created-dialog"]],inputs:{response:[1,"response"],user:[1,"user"]},outputs:{closed:"closed"},decls:45,vars:6,consts:[["open","","aria-labelledby","created-user-dialog-title",1,"fixed","inset-0","z-50","m-auto","w-[95vw]","max-w-lg","overflow-hidden","rounded-2xl","border","border-slate-200","bg-white","p-0","shadow-2xl","backdrop:bg-slate-900/50","focus:outline-none"],[1,"flex","items-center","gap-3","border-b","border-slate-100","bg-slate-50","px-5","py-4"],[1,"flex","h-9","w-9","flex-shrink-0","items-center","justify-center","rounded-full","bg-emerald-100"],["fill","none","viewBox","0 0 24 24","stroke-width","2.5","stroke","currentColor",1,"h-4","w-4","text-emerald-700"],["stroke-linecap","round","stroke-linejoin","round","d","M4.5 12.75l6 6 9-13.5"],["id","created-user-dialog-title",1,"text-sm","font-bold","text-slate-900",2,"font-family","'Syne',sans-serif"],[1,"text-xs","text-slate-500"],[1,"space-y-4","px-5","py-5"],[1,"flex","items-center","gap-3","rounded-xl","border","border-slate-100","bg-slate-50","px-4","py-3"],[1,"flex","h-9","w-9","flex-shrink-0","items-center","justify-center","rounded-full","bg-slate-200","text-sm","font-bold","text-slate-600"],[1,"text-sm","font-semibold","text-slate-900"],[1,"flex","items-center","gap-1","text-xs","text-slate-500"],[1,"text-slate-300"],[1,"font-mono","font-medium"],[1,"ml-auto","flex","items-center","gap-1.5","rounded-full","bg-emerald-100","px-2.5","py-1","text-[11px]","font-semibold","text-emerald-700"],[1,"h-1.5","w-1.5","rounded-full","bg-emerald-500"],["aria-label","Password temporanea",1,"overflow-hidden","rounded-xl","border","border-amber-200","bg-amber-50"],[1,"flex","items-center","gap-2","border-b","border-amber-200","bg-amber-100/60","px-4","py-3"],["fill","none","viewBox","0 0 24 24","stroke-width","2","stroke","currentColor",1,"h-4","w-4","flex-shrink-0","text-amber-700"],["stroke-linecap","round","stroke-linejoin","round","d","M12 9v3.75m-9.303 3.376c-.866 1.5.217 3.374 1.948 3.374h14.71c1.73 0 2.813-1.874 1.948-3.374L13.949 3.378c-.866-1.5-3.032-1.5-3.898 0L2.697 16.126zM12 15.75h.007v.008H12v-.008z"],[1,"text-xs","font-bold","uppercase","tracking-wide","text-amber-800"],[1,"px-4","py-4"],[1,"mb-3","text-xs","text-amber-800"],[1,"flex","items-center","justify-between","gap-3","rounded-lg","border","border-amber-300","bg-white","px-4","py-3","shadow-sm"],[1,"break-all","font-mono","text-sm","font-bold","tracking-wide","text-slate-800"],[1,"flex","items-center","justify-end","border-t","border-slate-100","bg-slate-50","px-5","py-3"],["type","button",1,"inline-flex","items-center","gap-2","rounded-lg","border","border-sky-600","bg-sky-600","px-4","py-2","text-sm","font-semibold","text-white","shadow-sm","transition-all","hover:bg-sky-500","focus-visible:outline-2","focus-visible:outline-offset-2","focus-visible:outline-sky-600","active:scale-[0.98]",3,"click"],["fill","none","viewBox","0 0 24 24","stroke-width","2.5","stroke","currentColor",1,"h-4","w-4"]],template:function(r,n){cov_1d6wj97rj0().f[44]++;cov_1d6wj97rj0().s[102]++;(cov_1d6wj97rj0().b[61][0]++,r&1)&&(cov_1d6wj97rj0().b[61][1]++,o(0,"dialog",0)(1,"div",1)(2,"div",2),p(),o(3,"svg",3),v(4,"path",4),a()(),g(),o(5,"div")(6,"h2",5),i(7," Utente creato con successo "),a(),o(8,"p",6),i(9,"Conferma e comunica subito la password temporanea."),a()()(),o(10,"div",7)(11,"div",8)(12,"div",9),i(13),a(),o(14,"div")(15,"p",10),i(16),a(),o(17,"p",11)(18,"span",12),i(19,"@"),a(),o(20,"span",13),i(21),a()()(),o(22,"div",14),v(23,"span",15),i(24," Attivo "),a()(),o(25,"section",16)(26,"div",17),p(),o(27,"svg",18),v(28,"path",19),a(),g(),o(29,"h3",20),i(30,"Password temporanea"),a()(),o(31,"div",21)(32,"p",22),i(33," Comunica questa password all'utente. "),o(34,"strong"),i(35,"Non sar\xE0 pi\xF9 recuperabile"),a(),i(36," una volta chiusa la finestra. "),a(),o(37,"div",23)(38,"code",24),i(39),a()()()()(),o(40,"div",25)(41,"button",26),D("click",function(){cov_1d6wj97rj0().f[45]++;cov_1d6wj97rj0().s[103]++;return n.closeDialog();}),p(),o(42,"svg",27),v(43,"path",4),a(),i(44," Ho comunicato la password "),a()()()),(cov_1d6wj97rj0().b[62][0]++,r&2)&&(cov_1d6wj97rj0().b[62][1]++,m(13),V(" ",n.user().name[0],"",n.user().surname[0]," "),m(3),V("",n.user().name," ",n.user().surname),m(5),L(n.user().username),m(18),F(" ",n.response().tempPassword," "));},encapsulation:2,changeDetection:0}));}cov_1d6wj97rj0().s[104]++;return e;})());var xe=(cov_1d6wj97rj0().s[105]++,(()=>{cov_1d6wj97rj0().f[46]++;class e{decodeTempPassword(t){cov_1d6wj97rj0().f[47]++;let r=(cov_1d6wj97rj0().s[106]++,t.trim());cov_1d6wj97rj0().s[107]++;if(!((cov_1d6wj97rj0().b[64][0]++,/^[A-Za-z0-9+/]+={0,2}$/.test(r))&&(cov_1d6wj97rj0().b[64][1]++,r.length%4===0))){cov_1d6wj97rj0().b[63][0]++;cov_1d6wj97rj0().s[108]++;return t;}else{cov_1d6wj97rj0().b[63][1]++;}cov_1d6wj97rj0().s[109]++;try{cov_1d6wj97rj0().s[110]++;return atob(r);}catch{cov_1d6wj97rj0().s[111]++;return t;}}static ɵfac=(cov_1d6wj97rj0().s[112]++,function(r){cov_1d6wj97rj0().f[48]++;cov_1d6wj97rj0().s[113]++;return new((cov_1d6wj97rj0().b[65][0]++,r)||(cov_1d6wj97rj0().b[65][1]++,e))();});static ɵprov=(cov_1d6wj97rj0().s[114]++,I({token:e,factory:e.ɵfac,providedIn:"root"}));}cov_1d6wj97rj0().s[115]++;return e;})());var be=(cov_1d6wj97rj0().s[116]++,(()=>{cov_1d6wj97rj0().f[49]++;class e{http=(cov_1d6wj97rj0().s[117]++,C(ie));baseUrl=(cov_1d6wj97rj0().s[118]++,C(re));decoderPasswordService=(cov_1d6wj97rj0().s[119]++,C(xe));getUsers(){cov_1d6wj97rj0().f[50]++;cov_1d6wj97rj0().s[120]++;return this.http.get(`${this.baseUrl}/users`);}createUser(t){cov_1d6wj97rj0().f[51]++;cov_1d6wj97rj0().s[121]++;return this.http.post(`${this.baseUrl}/users`,t).pipe(Q(r=>{cov_1d6wj97rj0().f[52]++;cov_1d6wj97rj0().s[122]++;return H(G({},r),{tempPassword:this.decoderPasswordService.decodeTempPassword(r.tempPassword)});}));}deleteUser(t){cov_1d6wj97rj0().f[53]++;cov_1d6wj97rj0().s[123]++;return this.http.delete(`${this.baseUrl}/users/${encodeURIComponent(t.toString())}`);}static ɵfac=(cov_1d6wj97rj0().s[124]++,function(r){cov_1d6wj97rj0().f[54]++;cov_1d6wj97rj0().s[125]++;return new((cov_1d6wj97rj0().b[66][0]++,r)||(cov_1d6wj97rj0().b[66][1]++,e))();});static ɵprov=(cov_1d6wj97rj0().s[126]++,I({token:e,factory:e.ɵfac,providedIn:"root"}));}cov_1d6wj97rj0().s[127]++;return e;})());var O=(cov_1d6wj97rj0().s[128]++,function(e){cov_1d6wj97rj0().f[55]++;cov_1d6wj97rj0().s[129]++;return e.USERNAME_ALREADY_IN_USE="USERNAME_ALREADY_IN_USE",e.OTHER_ERROR="OTHER_ERROR",e;}((cov_1d6wj97rj0().b[67][0]++,O)||(cov_1d6wj97rj0().b[67][1]++,{})));function Ae(e,d){cov_1d6wj97rj0().f[56]++;cov_1d6wj97rj0().s[130]++;if(e&1){cov_1d6wj97rj0().b[68][0]++;let t=(cov_1d6wj97rj0().s[131]++,_());cov_1d6wj97rj0().s[132]++;s(0,"app-user-list",11),S("deleteUser",function(n){cov_1d6wj97rj0().f[57]++;cov_1d6wj97rj0().s[133]++;h(t);let c=(cov_1d6wj97rj0().s[134]++,b());cov_1d6wj97rj0().s[135]++;return E(c.onUserDeleted(n));}),l();}else{cov_1d6wj97rj0().b[68][1]++;}cov_1d6wj97rj0().s[136]++;(cov_1d6wj97rj0().b[69][0]++,e&2)&&(cov_1d6wj97rj0().b[69][1]++,T("users",d));}function Ie(e,d){cov_1d6wj97rj0().f[58]++;cov_1d6wj97rj0().s[137]++;(cov_1d6wj97rj0().b[70][0]++,e&1)&&(cov_1d6wj97rj0().b[70][1]++,s(0,"div",10),x(1,"div",12),s(2,"p",13),i(3,"Caricamento operatori in corso\u2026"),l()());}function je(e,d){cov_1d6wj97rj0().f[59]++;cov_1d6wj97rj0().s[138]++;if(e&1){cov_1d6wj97rj0().b[71][0]++;let t=(cov_1d6wj97rj0().s[139]++,_());cov_1d6wj97rj0().s[140]++;s(0,"app-user-created-dialog",15),S("closed",function(){cov_1d6wj97rj0().f[60]++;cov_1d6wj97rj0().s[141]++;h(t);let n=(cov_1d6wj97rj0().s[142]++,b(2));cov_1d6wj97rj0().s[143]++;return E(n.onDialogClosed());}),l();}else{cov_1d6wj97rj0().b[71][1]++;}cov_1d6wj97rj0().s[144]++;if(e&2){cov_1d6wj97rj0().b[72][0]++;let t=(cov_1d6wj97rj0().s[145]++,b());cov_1d6wj97rj0().s[146]++;T("response",t)("user",d);}else{cov_1d6wj97rj0().b[72][1]++;}}function Ne(e,d){cov_1d6wj97rj0().f[61]++;cov_1d6wj97rj0().s[147]++;if((cov_1d6wj97rj0().b[74][0]++,e&1)&&(cov_1d6wj97rj0().b[74][1]++,u(0,je,1,2,"app-user-created-dialog",14)),e&2){cov_1d6wj97rj0().b[73][0]++;let t,r=(cov_1d6wj97rj0().s[148]++,b());cov_1d6wj97rj0().s[149]++;f((t=r.createdUser())?(cov_1d6wj97rj0().b[75][0]++,0):(cov_1d6wj97rj0().b[75][1]++,-1),t);}else{cov_1d6wj97rj0().b[73][1]++;}}var _t=(cov_1d6wj97rj0().s[150]++,(()=>{cov_1d6wj97rj0().f[62]++;class e{userApi=(cov_1d6wj97rj0().s[151]++,C(be));refreshTrigger$=(cov_1d6wj97rj0().s[152]++,new B(void 0));users$;createdResponse=(cov_1d6wj97rj0().s[153]++,M(null));createdUser=(cov_1d6wj97rj0().s[154]++,M(null));formError=(cov_1d6wj97rj0().s[155]++,M(null));isCreateFormOpen=(cov_1d6wj97rj0().s[156]++,M(!1));createUserFormComponent;ngOnInit(){cov_1d6wj97rj0().f[63]++;cov_1d6wj97rj0().s[157]++;this.users$=this.refreshTrigger$.pipe(Z(()=>{cov_1d6wj97rj0().f[64]++;cov_1d6wj97rj0().s[158]++;return this.userApi.getUsers();}),Y(t=>{cov_1d6wj97rj0().f[65]++;cov_1d6wj97rj0().s[159]++;return console.error("Errore durante il caricamento degli utenti:",t),$([]);}));}openCreateForm(){cov_1d6wj97rj0().f[66]++;cov_1d6wj97rj0().s[160]++;this.isCreateFormOpen.set(!0);}closeCreateForm(){cov_1d6wj97rj0().f[67]++;cov_1d6wj97rj0().s[161]++;this.isCreateFormOpen.set(!1);}onFormSubmit(t){cov_1d6wj97rj0().f[68]++;cov_1d6wj97rj0().s[162]++;this.formError.set(null),this.userApi.createUser(t).subscribe({next:r=>{cov_1d6wj97rj0().f[69]++;cov_1d6wj97rj0().s[163]++;this.createdResponse.set(r),this.createdUser.set(t),this.refreshTrigger$.next(),this.formError.set(null),this.createUserFormComponent?.resetAndFocus();},error:r=>{cov_1d6wj97rj0().f[70]++;cov_1d6wj97rj0().s[164]++;r.status===409?(cov_1d6wj97rj0().b[76][0]++,this.formError.set(O.USERNAME_ALREADY_IN_USE)):(cov_1d6wj97rj0().b[76][1]++,this.formError.set(O.OTHER_ERROR));}});}onUserDeleted(t){cov_1d6wj97rj0().f[71]++;cov_1d6wj97rj0().s[165]++;this.userApi.deleteUser(t).subscribe({next:()=>{cov_1d6wj97rj0().f[72]++;cov_1d6wj97rj0().s[166]++;this.refreshTrigger$.next();},error:r=>{cov_1d6wj97rj0().f[73]++;cov_1d6wj97rj0().s[167]++;console.error("Errore durante l'eliminazione:",r);}});}onDialogClosed(){cov_1d6wj97rj0().f[74]++;cov_1d6wj97rj0().s[168]++;this.createdResponse.set(null),this.createdUser.set(null);}static ɵfac=(cov_1d6wj97rj0().s[169]++,function(r){cov_1d6wj97rj0().f[75]++;cov_1d6wj97rj0().s[170]++;return new((cov_1d6wj97rj0().b[77][0]++,r)||(cov_1d6wj97rj0().b[77][1]++,e))();});static ɵcmp=(cov_1d6wj97rj0().s[171]++,w({type:e,selectors:[["app-user-management-page"]],viewQuery:function(r,n){cov_1d6wj97rj0().f[76]++;cov_1d6wj97rj0().s[172]++;if((cov_1d6wj97rj0().b[79][0]++,r&1)&&(cov_1d6wj97rj0().b[79][1]++,N(P,5)),r&2){cov_1d6wj97rj0().b[78][0]++;let c;cov_1d6wj97rj0().s[173]++;(cov_1d6wj97rj0().b[80][0]++,q(c=z()))&&(cov_1d6wj97rj0().b[80][1]++,n.createUserFormComponent=c.first);}else{cov_1d6wj97rj0().b[78][1]++;}},decls:17,vars:6,consts:[["aria-label","Gestione operatori sanitari",1,"care-page","care-dot-grid","sidebar-page","user-management-page"],[1,"care-page__hero"],[1,"care-eyebrow"],[1,"care-title"],[1,"care-subtitle"],[1,"min-h-0","flex-1"],[3,"openRequest","formSubmit","closeRequest","errorType","isOpen"],["aria-hidden","true",1,"h-4","lg:h-6"],[1,"min-h-[22rem]"],[3,"users"],[1,"flex","min-h-[22rem]","flex-col","items-center","justify-center","rounded-2xl","border","border-slate-200","bg-white/60","shadow-sm","backdrop-blur-sm"],[3,"deleteUser","users"],[1,"flex","h-10","w-10","animate-spin","items-center","justify-center","rounded-full","border-2","border-slate-200","border-t-emerald-500"],[1,"mt-4","text-sm","font-medium","text-slate-500"],[3,"response","user"],[3,"closed","response","user"]],template:function(r,n){cov_1d6wj97rj0().f[77]++;cov_1d6wj97rj0().s[174]++;if((cov_1d6wj97rj0().b[82][0]++,r&1)&&(cov_1d6wj97rj0().b[82][1]++,s(0,"section",0)(1,"header",1)(2,"div")(3,"p",2),i(4,"Utenti"),l(),s(5,"h1",3),i(6,"Gestione operatori sanitari"),l(),s(7,"p",4),i(8,"Crea nuovi profili OSS e gestisci l'anagrafica utenti esistente."),l()()(),s(9,"div",5)(10,"app-create-user-form",6),S("openRequest",function(){cov_1d6wj97rj0().f[78]++;cov_1d6wj97rj0().s[175]++;return n.openCreateForm();})("formSubmit",function(U){cov_1d6wj97rj0().f[79]++;cov_1d6wj97rj0().s[176]++;return n.onFormSubmit(U);})("closeRequest",function(){cov_1d6wj97rj0().f[80]++;cov_1d6wj97rj0().s[177]++;return n.closeCreateForm();}),l(),x(11,"div",7),s(12,"main",8),u(13,Ae,1,1,"app-user-list",9),ee(14,"async"),J(15,Ie,4,0,"div",10),l()(),u(16,Ne,1,1),l()),r&2){cov_1d6wj97rj0().b[81][0]++;let c,U;cov_1d6wj97rj0().s[178]++;m(10),T("errorType",n.formError())("isOpen",n.isCreateFormOpen()),m(3),f((c=te(14,4,n.users$))?(cov_1d6wj97rj0().b[83][0]++,13):(cov_1d6wj97rj0().b[83][1]++,15),c),m(3),f((U=n.createdResponse())?(cov_1d6wj97rj0().b[84][0]++,16):(cov_1d6wj97rj0().b[84][1]++,-1),U);}else{cov_1d6wj97rj0().b[81][1]++;}},dependencies:[ue,P,fe,ne],styles:[`.user-management-page[_ngcontent-%COMP%]{gap:1.15rem} +/*# sourceMappingURL=user-management-page-SM5IEUCQ.css.map */`],changeDetection:0}));}cov_1d6wj97rj0().s[179]++;return e;})());export{_t as UserManagementPageComponent};//# sourceMappingURL=chunk-4WA7JXUW.js.map +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb3ZfMWQ2d2o5N3JqMCIsInMiLCJvIiwiaSIsImEiLCJEIiwiZiIsIm4iLCJoIiwidCIsIiRpbXBsaWNpdCIsImMiLCJiIiwiRSIsIm9uRGVsZXRlUmVxdWVzdCIsInAiLCJ2IiwiZSIsImQiLCJtIiwiRiIsInVzZXJuYW1lIiwiTCIsIm5hbWUiLCJzdXJuYW1lIiwiaGUiLCJnIiwiRWUiLCJfIiwib25EZWxldGVDYW5jZWwiLCJvbkRlbGV0ZUNvbmZpcm0iLCJWIiwidWUiLCJ1c2VycyIsImsiLCJkZWxldGVVc2VyIiwieSIsInBlbmRpbmdEZWxldGVVc2VyIiwiTSIsInNldCIsImVtaXQiLCJpZCIsIm9uRGVsZXRlIiwiybVmYWMiLCJyIiwiybVjbXAiLCJ3IiwidHlwZSIsInNlbGVjdG9ycyIsImlucHV0cyIsIm91dHB1dHMiLCJkZWNscyIsInZhcnMiLCJjb25zdHMiLCJ0ZW1wbGF0ZSIsIksiLCJ2ZSIsImdlIiwidSIsIlUiLCJsZW5ndGgiLCJXIiwiZW5jYXBzdWxhdGlvbiIsImNoYW5nZURldGVjdGlvbiIsIl9lIiwiQ2UiLCJTIiwicmVxdWVzdE9wZW4iLCJ4IiwibCIsIndlIiwicmVxdWVzdENsb3NlIiwiU2UiLCJ5ZSIsImtlIiwiZm9ybSIsImNvbnRyb2xzIiwiaGFzRXJyb3IiLCJVZSIsIk1lIiwiVGUiLCJEZSIsIlJlIiwiRmUiLCJMZSIsIlZlIiwiUCIsImVycm9yVHlwZSIsImlzT3BlbiIsImZvcm1TdWJtaXQiLCJvcGVuUmVxdWVzdCIsImNsb3NlUmVxdWVzdCIsIm5hbWVJbnB1dCIsImZiIiwiQyIsImNlIiwibm9uTnVsbGFibGUiLCJncm91cCIsIlIiLCJyZXF1aXJlZCIsIm1pbkxlbmd0aCIsInN1Ym1pdCIsInZhbGlkIiwiZ2V0UmF3VmFsdWUiLCJtYXJrQWxsQXNUb3VjaGVkIiwicmVzZXQiLCJyZXNldEFuZEZvY3VzIiwibWFya0FzUHJpc3RpbmUiLCJtYXJrQXNVbnRvdWNoZWQiLCJxdWV1ZU1pY3JvdGFzayIsIm5hdGl2ZUVsZW1lbnQiLCJmb2N1cyIsInZpZXdRdWVyeSIsIk4iLCJxIiwieiIsImZpcnN0IiwiWCIsIlQiLCJqIiwiaW52YWxpZCIsInRvdWNoZWQiLCJkZXBlbmRlbmNpZXMiLCJwZSIsImxlIiwib2UiLCJhZSIsInNlIiwiZGUiLCJtZSIsImZlIiwicmVzcG9uc2UiLCJ1c2VyIiwiY2xvc2VkIiwiY2xvc2VEaWFsb2ciLCJ0ZW1wUGFzc3dvcmQiLCJ4ZSIsImRlY29kZVRlbXBQYXNzd29yZCIsInRyaW0iLCJ0ZXN0IiwiYXRvYiIsIsm1cHJvdiIsIkkiLCJ0b2tlbiIsImZhY3RvcnkiLCJwcm92aWRlZEluIiwiYmUiLCJodHRwIiwiaWUiLCJiYXNlVXJsIiwicmUiLCJkZWNvZGVyUGFzc3dvcmRTZXJ2aWNlIiwiZ2V0VXNlcnMiLCJnZXQiLCJjcmVhdGVVc2VyIiwicG9zdCIsInBpcGUiLCJRIiwiSCIsIkciLCJkZWxldGUiLCJlbmNvZGVVUklDb21wb25lbnQiLCJ0b1N0cmluZyIsIk8iLCJVU0VSTkFNRV9BTFJFQURZX0lOX1VTRSIsIk9USEVSX0VSUk9SIiwiQWUiLCJvblVzZXJEZWxldGVkIiwiSWUiLCJqZSIsIm9uRGlhbG9nQ2xvc2VkIiwiTmUiLCJjcmVhdGVkVXNlciIsIl90IiwidXNlckFwaSIsInJlZnJlc2hUcmlnZ2VyJCIsIkIiLCJ1c2VycyQiLCJjcmVhdGVkUmVzcG9uc2UiLCJmb3JtRXJyb3IiLCJpc0NyZWF0ZUZvcm1PcGVuIiwiY3JlYXRlVXNlckZvcm1Db21wb25lbnQiLCJuZ09uSW5pdCIsIloiLCJZIiwiY29uc29sZSIsImVycm9yIiwiJCIsIm9wZW5DcmVhdGVGb3JtIiwiY2xvc2VDcmVhdGVGb3JtIiwib25Gb3JtU3VibWl0Iiwic3Vic2NyaWJlIiwibmV4dCIsInN0YXR1cyIsImVlIiwiSiIsInRlIiwibmUiLCJzdHlsZXMiLCJVc2VyTWFuYWdlbWVudFBhZ2VDb21wb25lbnQiXSwic291cmNlcyI6WyJzcmMvYXBwL2ZlYXR1cmVzL3VzZXItbWFuYWdlbWVudC9jb21wb25lbnRzL3VzZXItbGlzdC91c2VyLWxpc3QudHMiLCJzcmMvYXBwL2ZlYXR1cmVzL3VzZXItbWFuYWdlbWVudC9jb21wb25lbnRzL3VzZXItbGlzdC91c2VyLWxpc3QuaHRtbCIsInNyYy9hcHAvZmVhdHVyZXMvdXNlci1tYW5hZ2VtZW50L2NvbXBvbmVudHMvY3JlYXRlLXVzZXItZm9ybS9jcmVhdGUtdXNlci1mb3JtLmNvbXBvbmVudC50cyIsInNyYy9hcHAvZmVhdHVyZXMvdXNlci1tYW5hZ2VtZW50L2NvbXBvbmVudHMvY3JlYXRlLXVzZXItZm9ybS9jcmVhdGUtdXNlci1mb3JtLmh0bWwiLCJzcmMvYXBwL2ZlYXR1cmVzL3VzZXItbWFuYWdlbWVudC9jb21wb25lbnRzL3VzZXItY3JlYXRlZC1kaWFsb2cvdXNlci1jcmVhdGVkLWRpYWxvZy50cyIsInNyYy9hcHAvZmVhdHVyZXMvdXNlci1tYW5hZ2VtZW50L2NvbXBvbmVudHMvdXNlci1jcmVhdGVkLWRpYWxvZy91c2VyLWNyZWF0ZWQtZGlhbG9nLmh0bWwiLCJzcmMvYXBwL2ZlYXR1cmVzL3VzZXItbWFuYWdlbWVudC9zZXJ2aWNlcy9kZWNvZGVyLXBhc3N3b3JkLXNlcnZpY2UudHMiLCJzcmMvYXBwL2ZlYXR1cmVzL3VzZXItbWFuYWdlbWVudC9zZXJ2aWNlcy91c2VyLWFwaS5zZXJ2aWNlLnRzIiwic3JjL2FwcC9mZWF0dXJlcy91c2VyLW1hbmFnZW1lbnQvbW9kZWxzL3VzZXItbWFuYWdlbWVudC1lcnJvci10eXBlLmVudW0udHMiLCJzcmMvYXBwL2ZlYXR1cmVzL3VzZXItbWFuYWdlbWVudC9jb21wb25lbnRzL3VzZXItbWFuYWdlbWVudC1wYWdlL3VzZXItbWFuYWdlbWVudC1wYWdlLmNvbXBvbmVudC50cyIsInNyYy9hcHAvZmVhdHVyZXMvdXNlci1tYW5hZ2VtZW50L2NvbXBvbmVudHMvdXNlci1tYW5hZ2VtZW50LXBhZ2UvdXNlci1tYW5hZ2VtZW50LXBhZ2UuaHRtbCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBzaWduYWwsIGlucHV0LCBvdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFVzZXJEdG8gfSBmcm9tICcuLi8uLi9tb2RlbHMvaW4vdXNlci5tb2RlbC5kdG8nO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtdXNlci1saXN0JyxcbiAgaW1wb3J0czogW10sXG4gIHRlbXBsYXRlVXJsOiAnLi91c2VyLWxpc3QuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi91c2VyLWxpc3QuY3NzJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuXG5leHBvcnQgY2xhc3MgVXNlckxpc3RDb21wb25lbnQge1xuICB1c2VycyA9IGlucHV0PFVzZXJEdG9bXT4oKTtcbiAgZGVsZXRlVXNlciA9IG91dHB1dDxudW1iZXI+KCk7XG5cbiAgcHVibGljIHJlYWRvbmx5IHBlbmRpbmdEZWxldGVVc2VyID0gc2lnbmFsPFVzZXJEdG8gfCBudWxsPihudWxsKTtcblxuICBvbkRlbGV0ZVJlcXVlc3QodXNlcjogVXNlckR0byk6IHZvaWQge1xuICAgIHRoaXMucGVuZGluZ0RlbGV0ZVVzZXIuc2V0KHVzZXIpO1xuICB9XG5cbiAgb25EZWxldGVDYW5jZWwoKTogdm9pZCB7XG4gICAgdGhpcy5wZW5kaW5nRGVsZXRlVXNlci5zZXQobnVsbCk7XG4gIH1cblxuICBvbkRlbGV0ZUNvbmZpcm0oKTogdm9pZCB7XG4gICAgY29uc3QgdXNlciA9IHRoaXMucGVuZGluZ0RlbGV0ZVVzZXIoKTtcbiAgICBpZiAoIXVzZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmRlbGV0ZVVzZXIuZW1pdCh1c2VyLmlkKTtcbiAgICB0aGlzLnBlbmRpbmdEZWxldGVVc2VyLnNldChudWxsKTtcbiAgfVxuXG4gIG9uRGVsZXRlKHVzZXI6IFVzZXJEdG8pOiB2b2lkIHtcbiAgICB0aGlzLm9uRGVsZXRlUmVxdWVzdCh1c2VyKTtcbiAgfVxufVxuIiwiPHNlY3Rpb24gY2xhc3M9XCJvdmVyZmxvdy1oaWRkZW4gcm91bmRlZC0yeGwgYm9yZGVyIGJvcmRlci1zbGF0ZS0yMDAgYmctd2hpdGUgc2hhZG93LXNtXCJcbiAgICBhcmlhLWxhYmVsPVwiRWxlbmNvIG9wZXJhdG9yaSBzYW5pdGFyaVwiPlxuXG4gICAgPCEtLSBDYXJkIEhlYWRlciAtLT5cbiAgICA8aGVhZGVyIGNsYXNzPVwiZmxleCBmbGV4LXdyYXAgaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtMyBib3JkZXItYiBib3JkZXItc2xhdGUtMTAwIGJnLWFtYmVyLTMwMCBweC01IHB5LTRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0zXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBoLTggdy04IGZsZXgtc2hyaW5rLTAgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHJvdW5kZWQtbGcgYmctc2t5LTEwMFwiPlxuICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9XCJoLTQgdy00IHRleHQtc2t5LTcwMFwiIGZpbGw9XCJub25lXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIHN0cm9rZS13aWR0aD1cIjJcIlxuICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCJjdXJyZW50Q29sb3JcIj5cbiAgICAgICAgICAgICAgICAgICAgPHBhdGggc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTggMTguNzJhOS4wOTQgOS4wOTQgMCAwMDMuNzQxLS40NzkgMyAzIDAgMDAtNC42ODItMi43Mm0uOTQgMy4xOThsLjAwMS4wMzFjMCAuMjI1LS4wMTIuNDQ3LS4wMzcuNjY2QTExLjk0NCAxMS45NDQgMCAwMTEyIDIxYy0yLjE3IDAtNC4yMDctLjU3Ni01Ljk2My0xLjU4NEE2LjA2MiA2LjA2MiAwIDAxNiAxOC43MTltMTIgMGE1Ljk3MSA1Ljk3MSAwIDAwLS45NDEtMy4xOTdtMCAwQTUuOTk1IDUuOTk1IDAgMDAxMiAxMi43NWE1Ljk5NSA1Ljk5NSAwIDAwLTUuMDU4IDIuNzcybTAgMGEzIDMgMCAwMC00LjY4MSAyLjcyIDguOTg2IDguOTg2IDAgMDAzLjc0LjQ3N20uOTQtMy4xOTdhNS45NzEgNS45NzEgMCAwMC0uOTQgMy4xOTdNMTUgNi43NWEzIDMgMCAxMS02IDAgMyAzIDAgMDE2IDB6bTYgM2EyLjI1IDIuMjUgMCAxMS00LjUgMCAyLjI1IDIuMjUgMCAwMTQuNSAwem0tMTMuNSAwYTIuMjUgMi4yNSAwIDExLTQuNSAwIDIuMjUgMi4yNSAwIDAxNC41IDB6XCIgLz5cbiAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8aDIgY2xhc3M9XCJmb250LWRpc3BsYXkgdGV4dC1zbSBmb250LWJvbGQgdHJhY2tpbmctdGlnaHQgdGV4dC1zbGF0ZS05MDBcIlxuICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImZvbnQtZmFtaWx5OidTeW5lJyxzYW5zLXNlcmlmXCI+XG4gICAgICAgICAgICAgICAgICAgIEVsZW5jbyBvcGVyYXRvcmkgc2FuaXRhcmlcbiAgICAgICAgICAgICAgICA8L2gyPlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidGV4dC14cyB0ZXh0LXNsYXRlLTUwMFwiPkFuYWdyYWZpY2EgdXRlbnRpIHJlZ2lzdHJhdGkgbmVsIHNpc3RlbWEuPC9wPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8c3BhblxuICAgICAgICAgICAgY2xhc3M9XCJpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEuNSByb3VuZGVkLWZ1bGwgYmctc2xhdGUtOTAwIHB4LTMgcHktMSB0ZXh0LXhzIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZVwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJoLTEuNSB3LTEuNSByb3VuZGVkLWZ1bGwgYmctZW1lcmFsZC00MDBcIj48L3NwYW4+XG4gICAgICAgICAgICB7eyB1c2VycygpPy5sZW5ndGggPz8gMCB9fSB1dGVudGlcbiAgICAgICAgPC9zcGFuPlxuICAgIDwvaGVhZGVyPlxuXG4gICAgPCEtLSBUYWJsZSAtLT5cbiAgICA8ZGl2IGNsYXNzPVwib3ZlcmZsb3cteC1hdXRvXCI+XG4gICAgICAgIDx0YWJsZSBjbGFzcz1cIm1pbi13LWZ1bGwgdGV4dC1sZWZ0IHRleHQtc21cIj5cbiAgICAgICAgICAgIDx0aGVhZD5cbiAgICAgICAgICAgICAgICA8dHIgY2xhc3M9XCJib3JkZXItYiBib3JkZXItc2xhdGUtMTAwXCI+XG4gICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cInB4LTUgcHktMyB0ZXh0LVsxMXB4XSBmb250LXNlbWlib2xkIHVwcGVyY2FzZSB0cmFja2luZy13aWRlciB0ZXh0LXNsYXRlLTQwMFwiPlVzZXJuYW1lXG4gICAgICAgICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cInB4LTUgcHktMyB0ZXh0LVsxMXB4XSBmb250LXNlbWlib2xkIHVwcGVyY2FzZSB0cmFja2luZy13aWRlciB0ZXh0LXNsYXRlLTQwMFwiPk5vbWU8L3RoPlxuICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJweC01IHB5LTMgdGV4dC1bMTFweF0gZm9udC1zZW1pYm9sZCB1cHBlcmNhc2UgdHJhY2tpbmctd2lkZXIgdGV4dC1zbGF0ZS00MDBcIj5Db2dub21lPC90aD5cblxuICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJweC01IHB5LTMgdGV4dC1bMTFweF0gZm9udC1zZW1pYm9sZCB1cHBlcmNhc2UgdHJhY2tpbmctd2lkZXIgdGV4dC1zbGF0ZS00MDBcIj5Bemlvbmk8L3RoPlxuICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICA8L3RoZWFkPlxuICAgICAgICAgICAgPHRib2R5IGNsYXNzPVwiZGl2aWRlLXkgZGl2aWRlLXNsYXRlLTUwXCI+XG5cbiAgICAgICAgICAgICAgICBAZm9yICh1c2VyIG9mIHVzZXJzKCk7IHRyYWNrIHVzZXIuaWQpIHtcbiAgICAgICAgICAgICAgICA8dHIgY2xhc3M9XCJncm91cCB0cmFuc2l0aW9uLWNvbG9ycyBob3ZlcjpiZy1zbGF0ZS01MC84MFwiPlxuICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJweC01IHB5LTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEuNSByb3VuZGVkLW1kIGJnLXNsYXRlLTEwMCBweC0yIHB5LTAuNSBmb250LW1vbm8gdGV4dC14cyBmb250LW1lZGl1bSB0ZXh0LXNsYXRlLTcwMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1zbGF0ZS00MDBcIj5APC9zcGFuPnt7IHVzZXIudXNlcm5hbWUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwicHgtNSBweS0zIHRleHQtc20gdGV4dC1zbGF0ZS03MDBcIj57eyB1c2VyLm5hbWUgfX08L3RkPlxuICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJweC01IHB5LTMgdGV4dC1zbSB0ZXh0LXNsYXRlLTcwMFwiPnt7IHVzZXIuc3VybmFtZSB9fTwvdGQ+XG5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwicHgtNSBweS0zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwib25EZWxldGVSZXF1ZXN0KHVzZXIpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImlubGluZS1mbGV4IGN1cnNvci1wb2ludGVyIGl0ZW1zLWNlbnRlciBnYXAtMS41IHJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci10cmFuc3BhcmVudCBweC0yLjUgcHktMS41IHRleHQteHMgZm9udC1zZW1pYm9sZCB0ZXh0LXNsYXRlLTQwMCB0cmFuc2l0aW9uLWFsbCBob3Zlcjpib3JkZXItcmVkLTIwMCBob3ZlcjpiZy1yZWQtNTAgaG92ZXI6dGV4dC1yZWQtNjAwIGZvY3VzLXZpc2libGU6b3V0bGluZS0yIGZvY3VzLXZpc2libGU6b3V0bGluZS1vZmZzZXQtMiBmb2N1cy12aXNpYmxlOm91dGxpbmUtcmVkLTQwMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9XCJoLTMuNSB3LTMuNVwiIGZpbGw9XCJub25lXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIHN0cm9rZS13aWR0aD1cIjJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCJjdXJyZW50Q29sb3JcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTQuNzQgOWwtLjM0NiA5bS00Ljc4OCAwTDkuMjYgOW05Ljk2OC0zLjIxYy4zNDIuMDUyLjY4Mi4xMDcgMS4wMjIuMTY2bS0xLjAyMi0uMTY1TDE4LjE2IDE5LjY3M2EyLjI1IDIuMjUgMCAwMS0yLjI0NCAyLjA3N0g4LjA4NGEyLjI1IDIuMjUgMCAwMS0yLjI0NC0yLjA3N0w0Ljc3MiA1Ljc5bTE0LjQ1NiAwYTQ4LjEwOCA0OC4xMDggMCAwMC0zLjQ3OC0uMzk3bS0xMiAuNTYyYy4zNC0uMDU5LjY4LS4xMTQgMS4wMjItLjE2NW0wIDBhNDguMTEgNDguMTEgMCAwMTMuNDc4LS4zOTdtNy41IDB2LS45MTZjMC0xLjE4LS45MS0yLjE2NC0yLjA5LTIuMjAxYTUxLjk2NCA1MS45NjQgMCAwMC0zLjMyIDBjLTEuMTguMDM3LTIuMDkgMS4wMjItMi4wOSAyLjIwMXYuOTE2bTcuNSAwYTQ4LjY2NyA0OC42NjcgMCAwMC03LjUgMFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgRWxpbWluYVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICB9IEBlbXB0eSB7XG4gICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj1cIjRcIiBjbGFzcz1cInB4LTUgcHktMTQgdGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBnYXAtM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGgtMTIgdy0xMiBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZC1mdWxsIGJnLXNsYXRlLTEwMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPVwiaC02IHctNiB0ZXh0LXNsYXRlLTQwMFwiIGZpbGw9XCJub25lXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCJjdXJyZW50Q29sb3JcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xNSAxOS4xMjhhOS4zOCA5LjM4IDAgMDAyLjYyNS4zNzIgOS4zMzcgOS4zMzcgMCAwMDQuMTIxLS45NTIgNC4xMjUgNC4xMjUgMCAwMC03LjUzMy0yLjQ5M00xNSAxOS4xMjh2LS4wMDNjMC0xLjExMy0uMjg1LTIuMTYtLjc4Ni0zLjA3TTE1IDE5LjEyOHYuMTA2QTEyLjMxOCAxMi4zMTggMCAwMTguNjI0IDIxYy0yLjMzMSAwLTQuNTEyLS42NDUtNi4zNzQtMS43NjZsLS4wMDEtLjEwOWE2LjM3NSA2LjM3NSAwIDAxMTEuOTY0LTMuMDdNMTIgNi4zNzVhMy4zNzUgMy4zNzUgMCAxMS02Ljc1IDAgMy4zNzUgMy4zNzUgMCAwMTYuNzUgMHptOC4yNSAyLjI1YTIuNjI1IDIuNjI1IDAgMTEtNS4yNSAwIDIuNjI1IDIuNjI1IDAgMDE1LjI1IDB6XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtc2xhdGUtNjAwXCI+TmVzc3VuIG9wZXJhdG9yZSBzYW5pdGFyaW8gcHJlc2VudGU8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibXQtMC41IHRleHQteHMgdGV4dC1zbGF0ZS00MDBcIj5Vc2EgaWwgcHVsc2FudGUgXCJJbnNlcmlzY2kgTnVvdm8gT3BlcmF0b3JlXCIgcGVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZ2dpdW5nZXJlIGlsIHByaW1vIHByb2ZpbG8uPC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgIDwvdGFibGU+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIERlbGV0ZSBDb25maXJtIERpYWxvZyAtLT5cbiAgICBAaWYgKHBlbmRpbmdEZWxldGVVc2VyKCk7IGFzIHVzZXJUb0RlbGV0ZSkge1xuICAgIDxkaWFsb2cgb3BlbiBhcmlhLWxhYmVsbGVkYnk9XCJkZWxldGUtdXNlci1kaWFsb2ctdGl0bGVcIlxuICAgICAgICBjbGFzcz1cImZpeGVkIGluc2V0LTAgei01MCBtLWF1dG8gdy1bOTV2d10gbWF4LXctbWQgb3ZlcmZsb3ctaGlkZGVuIHJvdW5kZWQtMnhsIGJvcmRlciBib3JkZXItc2xhdGUtMjAwIGJnLXdoaXRlIHAtMCBzaGFkb3ctMnhsIGJhY2tkcm9wOmJnLXNsYXRlLTkwMC81MCBmb2N1czpvdXRsaW5lLW5vbmVcIj5cblxuICAgICAgICA8IS0tIERpYWxvZyBIZWFkZXIgLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLXN0YXJ0IGp1c3RpZnktYmV0d2VlbiBnYXAtMyBib3JkZXItYiBib3JkZXItc2xhdGUtMTAwIGJnLXNsYXRlLTUwIHB4LTUgcHktNFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0zXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaC05IHctOSBmbGV4LXNocmluay0wIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkLWZ1bGwgYmctcmVkLTEwMFwiPlxuICAgICAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPVwiaC00IHctNCB0ZXh0LXJlZC02MDBcIiBmaWxsPVwibm9uZVwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBzdHJva2Utd2lkdGg9XCIyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTEyIDl2My43NW0tOS4zMDMgMy4zNzZjLS44NjYgMS41LjIxNyAzLjM3NCAxLjk0OCAzLjM3NGgxNC43MWMxLjczIDAgMi44MTMtMS44NzQgMS45NDgtMy4zNzRMMTMuOTQ5IDMuMzc4Yy0uODY2LTEuNS0zLjAzMi0xLjUtMy44OTggMEwyLjY5NyAxNi4xMjZ6TTEyIDE1Ljc1aC4wMDd2LjAwOEgxMnYtLjAwOHpcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICA8aDMgaWQ9XCJkZWxldGUtdXNlci1kaWFsb2ctdGl0bGVcIiBjbGFzcz1cInRleHQtc20gZm9udC1ib2xkIHRleHQtc2xhdGUtOTAwXCI+Q29uZmVybWEgZWxpbWluYXppb25lXG4gICAgICAgICAgICAgICAgICAgIDwvaDM+XG4gICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidGV4dC14cyB0ZXh0LXNsYXRlLTUwMFwiPlF1ZXN0YSBvcGVyYXppb25lIG5vbiBwdcOyIGVzc2VyZSBhbm51bGxhdGEuPC9wPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwib25EZWxldGVDYW5jZWwoKVwiIGFyaWEtbGFiZWw9XCJDaGl1ZGlcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBoLTcgdy03IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkLWxnIHRleHQtc2xhdGUtNDAwIHRyYW5zaXRpb24tY29sb3JzIGhvdmVyOmJnLXNsYXRlLTEwMCBob3Zlcjp0ZXh0LXNsYXRlLTYwMFwiPlxuICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9XCJoLTQgdy00XCIgZmlsbD1cIm5vbmVcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiPlxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBkPVwiTTYgMThMMTggNk02IDZsMTIgMTJcIiAvPlxuICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwhLS0gRGlhbG9nIEJvZHkgLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJweC01IHB5LTVcIj5cbiAgICAgICAgICAgIDxwIGNsYXNzPVwidGV4dC1zbSB0ZXh0LXNsYXRlLTcwMFwiPlxuICAgICAgICAgICAgICAgIFN0YWkgcGVyIGVsaW1pbmFyZSBsJ29wZXJhdG9yZVxuICAgICAgICAgICAgICAgIDxzdHJvbmcgY2xhc3M9XCJmb250LXNlbWlib2xkIHRleHQtc2xhdGUtOTAwXCI+e3sgdXNlclRvRGVsZXRlLm5hbWUgfX0ge3sgdXNlclRvRGVsZXRlLnN1cm5hbWVcbiAgICAgICAgICAgICAgICAgICAgfX08L3N0cm9uZz4uXG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMyBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiByb3VuZGVkLWxnIGJnLXNsYXRlLTUwIHB4LTMgcHktMi41IHRleHQteHMgdGV4dC1zbGF0ZS01MDBcIj5cbiAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPVwiaC0zLjUgdy0zLjUgZmxleC1zaHJpbmstMFwiIGZpbGw9XCJub25lXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIHN0cm9rZS13aWR0aD1cIjJcIlxuICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCJjdXJyZW50Q29sb3JcIj5cbiAgICAgICAgICAgICAgICAgICAgPHBhdGggc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTYgN2E0IDQgMCAxMS04IDAgNCA0IDAgMDE4IDB6TTEyIDE0YTcgNyAwIDAwLTcgN2gxNGE3IDcgMCAwMC03LTd6XCIgLz5cbiAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZvbnQtbW9ubyBmb250LW1lZGl1bSB0ZXh0LXNsYXRlLTYwMFwiPkB7eyB1c2VyVG9EZWxldGUudXNlcm5hbWUgfX08L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLSBEaWFsb2cgQWN0aW9ucyAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktZW5kIGdhcC0yIGJvcmRlci10IGJvcmRlci1zbGF0ZS0xMDAgYmctc2xhdGUtNTAgcHgtNSBweS0zXCI+XG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwib25EZWxldGVDYW5jZWwoKVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJyb3VuZGVkLWxnIGN1cnNvci1wb2ludGVyIGJvcmRlciBib3JkZXItc2xhdGUtMjAwIGJnLXdoaXRlIHB4LTQgcHktMiB0ZXh0LXNtIGZvbnQtc2VtaWJvbGQgdGV4dC1zbGF0ZS03MDAgdHJhbnNpdGlvbi1jb2xvcnMgaG92ZXI6Ymctc2xhdGUtNTAgZm9jdXMtdmlzaWJsZTpvdXRsaW5lLTIgZm9jdXMtdmlzaWJsZTpvdXRsaW5lLW9mZnNldC0yIGZvY3VzLXZpc2libGU6b3V0bGluZS1zbGF0ZS00MDBcIj5cbiAgICAgICAgICAgICAgICBBbm51bGxhXG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJvbkRlbGV0ZUNvbmZpcm0oKVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJyb3VuZGVkLWxnIGN1cnNvci1wb2ludGVyIGJvcmRlciBib3JkZXItcmVkLTYwMCBiZy1yZWQtNjAwIHB4LTQgcHktMiB0ZXh0LXNtIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZSB0cmFuc2l0aW9uLWNvbG9ycyBob3ZlcjpiZy1yZWQtNzAwIGZvY3VzLXZpc2libGU6b3V0bGluZS0yIGZvY3VzLXZpc2libGU6b3V0bGluZS1vZmZzZXQtMiBmb2N1cy12aXNpYmxlOm91dGxpbmUtcmVkLTYwMCBhY3RpdmU6c2NhbGUtWzAuOThdXCI+XG4gICAgICAgICAgICAgICAgRWxpbWluYSBvcGVyYXRvcmVcbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cblxuICAgIDwvZGlhbG9nPlxuICAgIH1cblxuPC9zZWN0aW9uPiIsImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIFZpZXdDaGlsZCwgaW5wdXQsIG91dHB1dCwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgUmVhY3RpdmVGb3Jtc01vZHVsZSwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IENyZWF0ZVVzZXJEdG8gfSBmcm9tICcuLi8uLi9tb2RlbHMvb3V0L2NyZWF0ZS11c2VyLm1vZGVsLmR0byc7XG5pbXBvcnQgeyBVc2VyTWFuYWdlbWVudEVycm9yVHlwZSB9IGZyb20gJy4uLy4uL21vZGVscy91c2VyLW1hbmFnZW1lbnQtZXJyb3ItdHlwZS5lbnVtJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWNyZWF0ZS11c2VyLWZvcm0nLFxuICBpbXBvcnRzOiBbUmVhY3RpdmVGb3Jtc01vZHVsZV0sXG4gIHRlbXBsYXRlVXJsOiAnLi9jcmVhdGUtdXNlci1mb3JtLmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jcmVhdGUtdXNlci1mb3JtLmNzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgQ3JlYXRlVXNlckZvcm1Db21wb25lbnQge1xuICBlcnJvclR5cGUgPSBpbnB1dDxVc2VyTWFuYWdlbWVudEVycm9yVHlwZSB8IG51bGw+KG51bGwpO1xuICBpc09wZW4gPSBpbnB1dChmYWxzZSk7XG4gIGZvcm1TdWJtaXQgPSBvdXRwdXQ8Q3JlYXRlVXNlckR0bz4oKTtcbiAgb3BlblJlcXVlc3QgPSBvdXRwdXQ8dm9pZD4oKTtcbiAgY2xvc2VSZXF1ZXN0ID0gb3V0cHV0PHZvaWQ+KCk7XG5cbiAgQFZpZXdDaGlsZCgnbmFtZUlucHV0JylcbiAgcHJpdmF0ZSByZWFkb25seSBuYW1lSW5wdXQ/OiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+O1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgZmIgPSBpbmplY3QoRm9ybUJ1aWxkZXIpO1xuICBwdWJsaWMgcmVhZG9ubHkgZm9ybSA9IHRoaXMuZmIubm9uTnVsbGFibGUuZ3JvdXAoe1xuICAgIG5hbWU6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMubWluTGVuZ3RoKDIpXV0sXG4gICAgc3VybmFtZTogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5taW5MZW5ndGgoMildXSxcbiAgICB1c2VybmFtZTogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5taW5MZW5ndGgoNCldXSxcbiAgfSk7XG5cbiAgcHVibGljIHN1Ym1pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5mb3JtLnZhbGlkKSB7XG4gICAgICB0aGlzLmZvcm1TdWJtaXQuZW1pdCh0aGlzLmZvcm0uZ2V0UmF3VmFsdWUoKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZm9ybS5tYXJrQWxsQXNUb3VjaGVkKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHJlc2V0KCk6IHZvaWQge1xuICAgIHRoaXMuZm9ybS5yZXNldCh7XG4gICAgICBuYW1lOiAnJyxcbiAgICAgIHN1cm5hbWU6ICcnLFxuICAgICAgdXNlcm5hbWU6ICcnLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHJlc2V0QW5kRm9jdXMoKTogdm9pZCB7XG4gICAgdGhpcy5yZXNldCgpO1xuICAgIHRoaXMuZm9ybS5tYXJrQXNQcmlzdGluZSgpO1xuICAgIHRoaXMuZm9ybS5tYXJrQXNVbnRvdWNoZWQoKTtcblxuICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgIHRoaXMubmFtZUlucHV0Py5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgcmVxdWVzdENsb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuY2xvc2VSZXF1ZXN0LmVtaXQoKTtcbiAgfVxuXG4gIHB1YmxpYyByZXF1ZXN0T3BlbigpOiB2b2lkIHtcbiAgICB0aGlzLm9wZW5SZXF1ZXN0LmVtaXQoKTtcbiAgfVxufSIsIjxzZWN0aW9uIGNsYXNzPVwib3ZlcmZsb3ctaGlkZGVuIHJvdW5kZWQtMnhsIGJvcmRlciBib3JkZXItc2xhdGUtMjAwIGJnLXdoaXRlIHNoYWRvdy1zbSB6LTBcIlxuICAgIGFyaWEtbGFiZWw9XCJDcmVhemlvbmUgb3BlcmF0b3JlXCI+XG5cbiAgICA8IS0tIENhcmQgSGVhZGVyIC0tPlxuICAgIDxoZWFkZXIgY2xhc3M9XCJib3JkZXItYiBib3JkZXItc2xhdGUtMTAwIGJnLWFtYmVyLTMwMCBweC01IHB5LTRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtc3RhcnQganVzdGlmeS1iZXR3ZWVuIGdhcC0zXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTNcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGgtOCB3LTggc2hyaW5rLTAgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHJvdW5kZWQtbGcgYmctZW1lcmFsZC0xMDBcIj5cbiAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPVwiaC00IHctNCB0ZXh0LWVtZXJhbGQtNzAwXCIgZmlsbD1cIm5vbmVcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgc3Ryb2tlLXdpZHRoPVwiMlwiXG4gICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiPlxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBkPVwiTTEyIDQuNXYxNW03LjUtNy41aC0xNVwiIC8+XG4gICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPGgyIGNsYXNzPVwiZm9udC1kaXNwbGF5IHRleHQtc20gZm9udC1ib2xkIHRyYWNraW5nLXRpZ2h0IHRleHQtc2xhdGUtOTAwXCJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJmb250LWZhbWlseTonU3luZScsc2Fucy1zZXJpZlwiPlxuICAgICAgICAgICAgICAgICAgICBOdW92byBvcGVyYXRvcmUgc2FuaXRhcmlvXG4gICAgICAgICAgICAgICAgPC9oMj5cbiAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInRleHQteHMgdGV4dC1zbGF0ZS01MDBcIj5Db21waWxhIGkgY2FtcGkgcGVyIGNyZWFyZSB1biBwcm9maWxvIE9TUy48L3A+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICBAaWYgKCFpc09wZW4oKSkge1xuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cInJlcXVlc3RPcGVuKClcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY2FyZS1idG4gY2FyZS1idG4tLWNvbXBhY3QgcHgtMy41IHNoYWRvdy1zbSBib3JkZXItc2xhdGUtOTAwIGJnLXNsYXRlLTkwMCB0ZXh0LXdoaXRlIGhvdmVyOmJvcmRlci1zbGF0ZS04MDAgaG92ZXI6Ymctc2xhdGUtODAwIGZvY3VzLXZpc2libGU6b3V0bGluZS0yIGZvY3VzLXZpc2libGU6b3V0bGluZS1vZmZzZXQtMiBmb2N1cy12aXNpYmxlOm91dGxpbmUtc2xhdGUtOTAwXCI+XG4gICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz1cImgtMy41IHctMy41IHRleHQtZW1lcmFsZC00MDBcIiBmaWxsPVwibm9uZVwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBzdHJva2Utd2lkdGg9XCIyLjVcIlxuICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCJjdXJyZW50Q29sb3JcIj5cbiAgICAgICAgICAgICAgICAgICAgPHBhdGggc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgZD1cIk0xMiA0LjV2MTVtNy41LTcuNWgtMTVcIiAvPlxuICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgIEluc2VyaXNjaSBOdW92byBPcGVyYXRvcmVcbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwicmVxdWVzdENsb3NlKClcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY2FyZS1idG4gY2FyZS1idG4tLWRhbmdlciBjYXJlLWJ0bi0tY29tcGFjdCBweC0zLjUgc2hhZG93LXNtIGZvY3VzLXZpc2libGU6b3V0bGluZS0yIGZvY3VzLXZpc2libGU6b3V0bGluZS1vZmZzZXQtMiBmb2N1cy12aXNpYmxlOm91dGxpbmUtcmVkLTUwMFwiPlxuICAgICAgICAgICAgICAgIENoaXVkaVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgIDwvaGVhZGVyPlxuXG4gICAgPCEtLSBGb3JtIEJvZHkgLS0+XG4gICAgPGRpdiBkYXRhLXRlc3RpZD1cImNyZWF0ZS11c2VyLXBhbmVsXCIgW2NsYXNzXT1cImlzT3BlbigpXG4gICAgICAgID8gJ292ZXJmbG93LWhpZGRlbiB0cmFuc2l0aW9uLWFsbCBkdXJhdGlvbi0yMDAgZWFzZS1pbi1vdXQgb3BhY2l0eS0xMDAgbWF4LWgtNDgwJ1xuICAgICAgICA6ICdwb2ludGVyLWV2ZW50cy1ub25lIG92ZXJmbG93LWhpZGRlbiB0cmFuc2l0aW9uLWFsbCBkdXJhdGlvbi0yMDAgZWFzZS1pbi1vdXQgb3BhY2l0eS0wIG1heC1oLTAnXCI+XG4gICAgICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybVwiIChuZ1N1Ym1pdCk9XCJzdWJtaXQoKVwiIGNsYXNzPVwic3BhY2UteS00IHB4LTUgcHktNVwiPlxuXG4gICAgICAgIDwhLS0gTm9tZSAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNwYWNlLXktMVwiPlxuICAgICAgICAgICAgPGxhYmVsIGZvcj1cIm5hbWVcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEgdGV4dC14cyBmb250LXNlbWlib2xkIHVwcGVyY2FzZSB0cmFja2luZy13aWRlIHRleHQtc2xhdGUtNTAwXCI+XG4gICAgICAgICAgICAgICAgTm9tZSA8c3BhbiBjbGFzcz1cInRleHQtcm9zZS01MDBcIj4qPC9zcGFuPlxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCAjbmFtZUlucHV0IGlkPVwibmFtZVwiIHR5cGU9XCJ0ZXh0XCIgZm9ybUNvbnRyb2xOYW1lPVwibmFtZVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ3LWZ1bGwgcm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLXNsYXRlLTIwMCBiZy1zbGF0ZS01MCBweC0zIHB5LTIuNSB0ZXh0LXNtIHRleHQtc2xhdGUtOTAwIG91dGxpbmUtbm9uZSB0cmFuc2l0aW9uLWFsbCBwbGFjZWhvbGRlcjp0ZXh0LXNsYXRlLTQwMCBob3Zlcjpib3JkZXItc2xhdGUtMzAwIGZvY3VzOmJvcmRlci1za3ktNTAwIGZvY3VzOmJnLXdoaXRlIGZvY3VzOnJpbmctMyBmb2N1czpyaW5nLXNreS0xMDBcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtaW52YWxpZF09XCJmb3JtLmNvbnRyb2xzWyduYW1lJ10uaW52YWxpZCAmJiBmb3JtLmNvbnRyb2xzWyduYW1lJ10udG91Y2hlZFwiXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1kZXNjcmliZWRieV09XCJmb3JtLmNvbnRyb2xzWyduYW1lJ10uaW52YWxpZCAmJiBmb3JtLmNvbnRyb2xzWyduYW1lJ10udG91Y2hlZCA/ICduYW1lLWVycm9yJyA6IG51bGxcIlxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRXMuIE1hcmlvXCIgYXV0b2NvbXBsZXRlPVwiZ2l2ZW4tbmFtZVwiIC8+XG4gICAgICAgICAgICA8cCBjbGFzcz1cInRleHQtWzExcHhdIHRleHQtc2xhdGUtNDAwXCI+TWluaW1vIDIgY2FyYXR0ZXJpLjwvcD5cblxuICAgICAgICAgICAgQGlmIChmb3JtLmNvbnRyb2xzWyduYW1lJ10uaW52YWxpZCAmJiBmb3JtLmNvbnRyb2xzWyduYW1lJ10udG91Y2hlZCkge1xuICAgICAgICAgICAgPHAgaWQ9XCJuYW1lLWVycm9yXCIgcm9sZT1cImFsZXJ0XCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZsZXggaXRlbXMtc3RhcnQgZ2FwLTIgcm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLXJvc2UtMjAwIGJnLXJvc2UtNTAgcHgtMyBweS0yIHRleHQteHMgdGV4dC1yb3NlLTcwMFwiPlxuICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9XCJtdC0wLjUgaC0zLjUgdy0zLjUgc2hyaW5rLTBcIiBmaWxsPVwiY3VycmVudENvbG9yXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiPlxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBmaWxsLXJ1bGU9XCJldmVub2RkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTggMTBhOCA4IDAgMTEtMTYgMCA4IDggMCAwMTE2IDB6bS03IDRhMSAxIDAgMTEtMiAwIDEgMSAwIDAxMiAwem0tMS05YTEgMSAwIDAwLTEgMXY0YTEgMSAwIDEwMiAwVjZhMSAxIDAgMDAtMS0xelwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGlwLXJ1bGU9XCJldmVub2RkXCIgLz5cbiAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgQGlmIChmb3JtLmNvbnRyb2xzWyduYW1lJ10uaGFzRXJyb3IoJ3JlcXVpcmVkJykpIHsgSWwgbm9tZSDDqCBvYmJsaWdhdG9yaW8uIH1cbiAgICAgICAgICAgICAgICAgICAgQGlmIChmb3JtLmNvbnRyb2xzWyduYW1lJ10uaGFzRXJyb3IoJ21pbmxlbmd0aCcpKSB7IElsIG5vbWUgZGV2ZSBlc3NlcmUgZGkgYWxtZW5vIDIgY2FyYXR0ZXJpLiB9XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8IS0tIENvZ25vbWUgLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzcGFjZS15LTFcIj5cbiAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJzdXJuYW1lXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0xIHRleHQteHMgZm9udC1zZW1pYm9sZCB1cHBlcmNhc2UgdHJhY2tpbmctd2lkZSB0ZXh0LXNsYXRlLTUwMFwiPlxuICAgICAgICAgICAgICAgIENvZ25vbWUgPHNwYW4gY2xhc3M9XCJ0ZXh0LXJvc2UtNTAwXCI+Kjwvc3Bhbj5cbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgaWQ9XCJzdXJuYW1lXCIgdHlwZT1cInRleHRcIiBmb3JtQ29udHJvbE5hbWU9XCJzdXJuYW1lXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInctZnVsbCByb3VuZGVkLWxnIGJvcmRlciBib3JkZXItc2xhdGUtMjAwIGJnLXNsYXRlLTUwIHB4LTMgcHktMi41IHRleHQtc20gdGV4dC1zbGF0ZS05MDAgb3V0bGluZS1ub25lIHRyYW5zaXRpb24tYWxsIHBsYWNlaG9sZGVyOnRleHQtc2xhdGUtNDAwIGhvdmVyOmJvcmRlci1zbGF0ZS0zMDAgZm9jdXM6Ym9yZGVyLXNreS01MDAgZm9jdXM6Ymctd2hpdGUgZm9jdXM6cmluZy0zIGZvY3VzOnJpbmctc2t5LTEwMFwiXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1pbnZhbGlkXT1cImZvcm0uY29udHJvbHNbJ3N1cm5hbWUnXS5pbnZhbGlkICYmIGZvcm0uY29udHJvbHNbJ3N1cm5hbWUnXS50b3VjaGVkXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWRlc2NyaWJlZGJ5XT1cImZvcm0uY29udHJvbHNbJ3N1cm5hbWUnXS5pbnZhbGlkICYmIGZvcm0uY29udHJvbHNbJ3N1cm5hbWUnXS50b3VjaGVkID8gJ3N1cm5hbWUtZXJyb3InIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJFcy4gUm9zc2lcIiBhdXRvY29tcGxldGU9XCJmYW1pbHktbmFtZVwiIC8+XG4gICAgICAgICAgICA8cCBjbGFzcz1cInRleHQtWzExcHhdIHRleHQtc2xhdGUtNDAwXCI+TWluaW1vIDIgY2FyYXR0ZXJpLjwvcD5cblxuICAgICAgICAgICAgQGlmIChmb3JtLmNvbnRyb2xzWydzdXJuYW1lJ10uaW52YWxpZCAmJiBmb3JtLmNvbnRyb2xzWydzdXJuYW1lJ10udG91Y2hlZCkge1xuICAgICAgICAgICAgPHAgaWQ9XCJzdXJuYW1lLWVycm9yXCIgcm9sZT1cImFsZXJ0XCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZsZXggaXRlbXMtc3RhcnQgZ2FwLTIgcm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLXJvc2UtMjAwIGJnLXJvc2UtNTAgcHgtMyBweS0yIHRleHQteHMgdGV4dC1yb3NlLTcwMFwiPlxuICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9XCJtdC0wLjUgaC0zLjUgdy0zLjUgc2hyaW5rLTBcIiBmaWxsPVwiY3VycmVudENvbG9yXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiPlxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBmaWxsLXJ1bGU9XCJldmVub2RkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTggMTBhOCA4IDAgMTEtMTYgMCA4IDggMCAwMTE2IDB6bS03IDRhMSAxIDAgMTEtMiAwIDEgMSAwIDAxMiAwem0tMS05YTEgMSAwIDAwLTEgMXY0YTEgMSAwIDEwMiAwVjZhMSAxIDAgMDAtMS0xelwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGlwLXJ1bGU9XCJldmVub2RkXCIgLz5cbiAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgQGlmIChmb3JtLmNvbnRyb2xzWydzdXJuYW1lJ10uaGFzRXJyb3IoJ3JlcXVpcmVkJykpIHsgSWwgY29nbm9tZSDDqCBvYmJsaWdhdG9yaW8uIH1cbiAgICAgICAgICAgICAgICAgICAgQGlmIChmb3JtLmNvbnRyb2xzWydzdXJuYW1lJ10uaGFzRXJyb3IoJ21pbmxlbmd0aCcpKSB7IElsIGNvZ25vbWUgZGV2ZSBlc3NlcmUgZGkgYWxtZW5vIDIgY2FyYXR0ZXJpLlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8IS0tIFVzZXJuYW1lIC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwic3BhY2UteS0xXCI+XG4gICAgICAgICAgICA8bGFiZWwgZm9yPVwidXNlcm5hbWVcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEgdGV4dC14cyBmb250LXNlbWlib2xkIHVwcGVyY2FzZSB0cmFja2luZy13aWRlIHRleHQtc2xhdGUtNTAwXCI+XG4gICAgICAgICAgICAgICAgVXNlcm5hbWUgPHNwYW4gY2xhc3M9XCJ0ZXh0LXJvc2UtNTAwXCI+Kjwvc3Bhbj5cbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxpbnB1dCBpZD1cInVzZXJuYW1lXCIgdHlwZT1cInRleHRcIiBmb3JtQ29udHJvbE5hbWU9XCJ1c2VybmFtZVwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidy1mdWxsIHJvdW5kZWQtbGcgYm9yZGVyIGJvcmRlci1zbGF0ZS0yMDAgYmctc2xhdGUtNTAgcHgtMyBweS0yLjUgdGV4dC1zbSB0ZXh0LXNsYXRlLTkwMCBvdXRsaW5lLW5vbmUgdHJhbnNpdGlvbi1hbGwgcGxhY2Vob2xkZXI6dGV4dC1zbGF0ZS00MDAgaG92ZXI6Ym9yZGVyLXNsYXRlLTMwMCBmb2N1czpib3JkZXItc2t5LTUwMCBmb2N1czpiZy13aGl0ZSBmb2N1czpyaW5nLTMgZm9jdXM6cmluZy1za3ktMTAwXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1pbnZhbGlkXT1cImZvcm0uY29udHJvbHNbJ3VzZXJuYW1lJ10uaW52YWxpZCAmJiBmb3JtLmNvbnRyb2xzWyd1c2VybmFtZSddLnRvdWNoZWRcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWRlc2NyaWJlZGJ5XT1cImZvcm0uY29udHJvbHNbJ3VzZXJuYW1lJ10uaW52YWxpZCAmJiBmb3JtLmNvbnRyb2xzWyd1c2VybmFtZSddLnRvdWNoZWQgPyAndXNlcm5hbWUtZXJyb3InIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRXMuIG1yb3NzaVwiIGF1dG9jb21wbGV0ZT1cInVzZXJuYW1lXCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LVsxMXB4XSB0ZXh0LXNsYXRlLTQwMFwiPk1pbmltbyA0IGNhcmF0dGVyaS48L3A+XG5cbiAgICAgICAgICAgIEBpZiAoZm9ybS5jb250cm9sc1sndXNlcm5hbWUnXS5pbnZhbGlkICYmIGZvcm0uY29udHJvbHNbJ3VzZXJuYW1lJ10udG91Y2hlZCkge1xuICAgICAgICAgICAgPHAgaWQ9XCJ1c2VybmFtZS1lcnJvclwiIHJvbGU9XCJhbGVydFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGl0ZW1zLXN0YXJ0IGdhcC0yIHJvdW5kZWQtbGcgYm9yZGVyIGJvcmRlci1yb3NlLTIwMCBiZy1yb3NlLTUwIHB4LTMgcHktMiB0ZXh0LXhzIHRleHQtcm9zZS03MDBcIj5cbiAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPVwibXQtMC41IGgtMy41IHctMy41IHNocmluay0wXCIgZmlsbD1cImN1cnJlbnRDb2xvclwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIj5cbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbC1ydWxlPVwiZXZlbm9kZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTE4IDEwYTggOCAwIDExLTE2IDAgOCA4IDAgMDExNiAwem0tNyA0YTEgMSAwIDExLTIgMCAxIDEgMCAwMTIgMHptLTEtOWExIDEgMCAwMC0xIDF2NGExIDEgMCAxMDIgMFY2YTEgMSAwIDAwLTEtMXpcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xpcC1ydWxlPVwiZXZlbm9kZFwiIC8+XG4gICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgICAgICAgIEBpZiAoZm9ybS5jb250cm9sc1sndXNlcm5hbWUnXS5oYXNFcnJvcigncmVxdWlyZWQnKSkgeyBMJ3VzZXJuYW1lIMOoIG9iYmxpZ2F0b3Jpby4gfVxuICAgICAgICAgICAgICAgICAgICBAaWYgKGZvcm0uY29udHJvbHNbJ3VzZXJuYW1lJ10uaGFzRXJyb3IoJ21pbmxlbmd0aCcpKSB7IEwndXNlcm5hbWUgZGV2ZSBlc3NlcmUgZGkgYWxtZW5vIDRcbiAgICAgICAgICAgICAgICAgICAgY2FyYXR0ZXJpLiB9XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBAaWYgKGVycm9yVHlwZSgpID09PSAnVVNFUk5BTUVfQUxSRUFEWV9JTl9VU0UnKSB7XG4gICAgICAgICAgICA8cCByb2xlPVwiYWxlcnRcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBpdGVtcy1zdGFydCBnYXAtMiByb3VuZGVkLWxnIGJvcmRlciBib3JkZXItYW1iZXItMjAwIGJnLWFtYmVyLTUwIHB4LTMgcHktMiB0ZXh0LXhzIHRleHQtYW1iZXItODAwXCI+XG4gICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz1cIm10LTAuNSBoLTMuNSB3LTMuNSBzaHJpbmstMFwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCI+XG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIGZpbGwtcnVsZT1cImV2ZW5vZGRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk04LjI1NyAzLjA5OWMuNzY1LTEuMzYgMi43MjItMS4zNiAzLjQ4NiAwbDUuNTggOS45MmMuNzUgMS4zMzQtLjIxMyAyLjk4LTEuNzQyIDIuOThINC40MmMtMS41MyAwLTIuNDkzLTEuNjQ2LTEuNzQzLTIuOThsNS41OC05Ljkyek0xMSAxM2ExIDEgMCAxMS0yIDAgMSAxIDAgMDEyIDB6bS0xLThhMSAxIDAgMDAtMSAxdjNhMSAxIDAgMDAyIDBWNmExIDEgMCAwMC0xLTF6XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsaXAtcnVsZT1cImV2ZW5vZGRcIiAvPlxuICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgIFVzZXJuYW1lIGdpw6AgaW4gdXNvLiBTY2VnbGluZSB1biBhbHRyby5cbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBpZiAoZXJyb3JUeXBlKCkgPT09ICdPVEhFUl9FUlJPUicpIHtcbiAgICAgICAgICAgIDxwIHJvbGU9XCJhbGVydFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGl0ZW1zLXN0YXJ0IGdhcC0yIHJvdW5kZWQtbGcgYm9yZGVyIGJvcmRlci1yb3NlLTIwMCBiZy1yb3NlLTUwIHB4LTMgcHktMiB0ZXh0LXhzIHRleHQtcm9zZS03MDBcIj5cbiAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPVwibXQtMC41IGgtMy41IHctMy41IHNocmluay0wXCIgZmlsbD1cImN1cnJlbnRDb2xvclwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIj5cbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbC1ydWxlPVwiZXZlbm9kZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTE4IDEwYTggOCAwIDExLTE2IDAgOCA4IDAgMDExNiAwem0tNyA0YTEgMSAwIDExLTIgMCAxIDEgMCAwMTIgMHptLTEtOWExIDEgMCAwMC0xIDF2NGExIDEgMCAxMDIgMFY2YTEgMSAwIDAwLTEtMXpcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xpcC1ydWxlPVwiZXZlbm9kZFwiIC8+XG4gICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgRXJyb3JlIGR1cmFudGUgbGEgY3JlYXppb25lIHV0ZW50ZS4gUmlwcm92YS5cbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLSBEaXZpZGVyIC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYm9yZGVyLXQgYm9yZGVyLXNsYXRlLTEwMCBwdC0xXCI+PC9kaXY+XG5cbiAgICAgICAgPCEtLSBTdWJtaXQgLS0+XG4gICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIFtkaXNhYmxlZF09XCJmb3JtLmludmFsaWRcIlxuICAgICAgICAgICAgY2xhc3M9XCJjYXJlLWJ0biBjYXJlLWJ0bi0tcHJpbWFyeSBncm91cCBmbGV4IHctZnVsbCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTIgcHgtNCBzaGFkb3ctc20gZm9jdXMtdmlzaWJsZTpvdXRsaW5lLTIgZm9jdXMtdmlzaWJsZTpvdXRsaW5lLW9mZnNldC0yIGZvY3VzLXZpc2libGU6b3V0bGluZS1hbWJlci00MDBcIj5cbiAgICAgICAgICAgIDxzdmcgY2xhc3M9XCJoLTQgdy00IHRyYW5zaXRpb24tdHJhbnNmb3JtIGdyb3VwLWhvdmVyOnNjYWxlLTExMFwiIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgc3Ryb2tlLXdpZHRoPVwiMi41XCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCI+XG4gICAgICAgICAgICAgICAgPHBhdGggc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgZD1cIk0xOSA3LjV2M20wIDB2M20wLTNoM20tMyAwaC0zbS0yLjI1LTQuMTI1YTMuMzc1IDMuMzc1IDAgMTEtNi43NSAwIDMuMzc1IDMuMzc1IDAgMDE2Ljc1IDB6TTQgMTkuMjM1di0uMTFhNi4zNzUgNi4zNzUgMCAwMTEyLjc1IDB2LjEwOUExMi4zMTggMTIuMzE4IDAgMDExMC4zNzQgMjFjLTIuMzMxIDAtNC41MTItLjY0NS02LjM3NC0xLjc2NnpcIiAvPlxuICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICBDcmVhIHV0ZW50ZVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9mb3JtPlxuICAgIDwvZGl2PlxuXG48L3NlY3Rpb24+IiwiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgaW5wdXQsIG91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVXNlckNyZWF0ZWRSZXNwb25zZUR0byB9IGZyb20gJy4uLy4uL21vZGVscy9pbi91c2VyLWNyZWF0ZWQtcmVzcG9uc2UubW9kZWwuZHRvJztcbmltcG9ydCB7IENyZWF0ZVVzZXJEdG8gfSBmcm9tICcuLi8uLi9tb2RlbHMvb3V0L2NyZWF0ZS11c2VyLm1vZGVsLmR0byc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC11c2VyLWNyZWF0ZWQtZGlhbG9nJyxcbiAgaW1wb3J0czogW10sXG4gIHRlbXBsYXRlVXJsOiAnLi91c2VyLWNyZWF0ZWQtZGlhbG9nLmh0bWwnLFxuICBzdHlsZVVybDogJy4vdXNlci1jcmVhdGVkLWRpYWxvZy5jc3MnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgVXNlckNyZWF0ZWREaWFsb2dDb21wb25lbnQge1xuICByZXNwb25zZSA9IGlucHV0LnJlcXVpcmVkPFVzZXJDcmVhdGVkUmVzcG9uc2VEdG8+KCk7IC8vbW9zdHJpYW1vIHNvbG8gcXVhbmRvIG5vbiBudWxsbyBjb24gLnJlcXVpcmVkXG4gIHVzZXIgPSBpbnB1dC5yZXF1aXJlZDxDcmVhdGVVc2VyRHRvPigpO1xuICBjbG9zZWQgPSBvdXRwdXQ8dm9pZD4oKTtcblxuICBjbG9zZURpYWxvZygpOiB2b2lkIHtcbiAgICB0aGlzLmNsb3NlZC5lbWl0KCk7XG4gIH1cblxufVxuIiwiPGRpYWxvZyBvcGVuIGFyaWEtbGFiZWxsZWRieT1cImNyZWF0ZWQtdXNlci1kaWFsb2ctdGl0bGVcIlxuICAgIGNsYXNzPVwiZml4ZWQgaW5zZXQtMCB6LTUwIG0tYXV0byB3LVs5NXZ3XSBtYXgtdy1sZyBvdmVyZmxvdy1oaWRkZW4gcm91bmRlZC0yeGwgYm9yZGVyIGJvcmRlci1zbGF0ZS0yMDAgYmctd2hpdGUgcC0wIHNoYWRvdy0yeGwgYmFja2Ryb3A6Ymctc2xhdGUtOTAwLzUwIGZvY3VzOm91dGxpbmUtbm9uZVwiPlxuXG4gICAgPCEtLSBEaWFsb2cgSGVhZGVyIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMyBib3JkZXItYiBib3JkZXItc2xhdGUtMTAwIGJnLXNsYXRlLTUwIHB4LTUgcHktNFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBoLTkgdy05IGZsZXgtc2hyaW5rLTAgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHJvdW5kZWQtZnVsbCBiZy1lbWVyYWxkLTEwMFwiPlxuICAgICAgICAgICAgPHN2ZyBjbGFzcz1cImgtNCB3LTQgdGV4dC1lbWVyYWxkLTcwMFwiIGZpbGw9XCJub25lXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIHN0cm9rZS13aWR0aD1cIjIuNVwiXG4gICAgICAgICAgICAgICAgc3Ryb2tlPVwiY3VycmVudENvbG9yXCI+XG4gICAgICAgICAgICAgICAgPHBhdGggc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgZD1cIk00LjUgMTIuNzVsNiA2IDktMTMuNVwiIC8+XG4gICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8aDIgaWQ9XCJjcmVhdGVkLXVzZXItZGlhbG9nLXRpdGxlXCIgY2xhc3M9XCJ0ZXh0LXNtIGZvbnQtYm9sZCB0ZXh0LXNsYXRlLTkwMFwiXG4gICAgICAgICAgICAgICAgc3R5bGU9XCJmb250LWZhbWlseTonU3luZScsc2Fucy1zZXJpZlwiPlxuICAgICAgICAgICAgICAgIFV0ZW50ZSBjcmVhdG8gY29uIHN1Y2Nlc3NvXG4gICAgICAgICAgICA8L2gyPlxuICAgICAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LXhzIHRleHQtc2xhdGUtNTAwXCI+Q29uZmVybWEgZSBjb211bmljYSBzdWJpdG8gbGEgcGFzc3dvcmQgdGVtcG9yYW5lYS48L3A+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBEaWFsb2cgQm9keSAtLT5cbiAgICA8ZGl2IGNsYXNzPVwic3BhY2UteS00IHB4LTUgcHktNVwiPlxuXG4gICAgICAgIDwhLS0gVXNlciBTdW1tYXJ5IC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTMgcm91bmRlZC14bCBib3JkZXIgYm9yZGVyLXNsYXRlLTEwMCBiZy1zbGF0ZS01MCBweC00IHB5LTNcIj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZsZXggaC05IHctOSBmbGV4LXNocmluay0wIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkLWZ1bGwgYmctc2xhdGUtMjAwIHRleHQtc20gZm9udC1ib2xkIHRleHQtc2xhdGUtNjAwXCI+XG4gICAgICAgICAgICAgICAge3sgdXNlcigpLm5hbWVbMF0gfX17eyB1c2VyKCkuc3VybmFtZVswXSB9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidGV4dC1zbSBmb250LXNlbWlib2xkIHRleHQtc2xhdGUtOTAwXCI+e3sgdXNlcigpLm5hbWUgfX0ge3sgdXNlcigpLnN1cm5hbWUgfX08L3A+XG4gICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMSB0ZXh0LXhzIHRleHQtc2xhdGUtNTAwXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1zbGF0ZS0zMDBcIj5APC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZvbnQtbW9ubyBmb250LW1lZGl1bVwiPnt7IHVzZXIoKS51c2VybmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm1sLWF1dG8gZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEuNSByb3VuZGVkLWZ1bGwgYmctZW1lcmFsZC0xMDAgcHgtMi41IHB5LTEgdGV4dC1bMTFweF0gZm9udC1zZW1pYm9sZCB0ZXh0LWVtZXJhbGQtNzAwXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJoLTEuNSB3LTEuNSByb3VuZGVkLWZ1bGwgYmctZW1lcmFsZC01MDBcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgQXR0aXZvXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLSBUZW1wIFBhc3N3b3JkIFNlY3Rpb24gLS0+XG4gICAgICAgIDxzZWN0aW9uIGNsYXNzPVwib3ZlcmZsb3ctaGlkZGVuIHJvdW5kZWQteGwgYm9yZGVyIGJvcmRlci1hbWJlci0yMDAgYmctYW1iZXItNTBcIlxuICAgICAgICAgICAgYXJpYS1sYWJlbD1cIlBhc3N3b3JkIHRlbXBvcmFuZWFcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiBib3JkZXItYiBib3JkZXItYW1iZXItMjAwIGJnLWFtYmVyLTEwMC82MCBweC00IHB5LTNcIj5cbiAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPVwiaC00IHctNCBmbGV4LXNocmluay0wIHRleHQtYW1iZXItNzAwXCIgZmlsbD1cIm5vbmVcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgc3Ryb2tlLXdpZHRoPVwiMlwiXG4gICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiPlxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xMiA5djMuNzVtLTkuMzAzIDMuMzc2Yy0uODY2IDEuNS4yMTcgMy4zNzQgMS45NDggMy4zNzRoMTQuNzFjMS43MyAwIDIuODEzLTEuODc0IDEuOTQ4LTMuMzc0TDEzLjk0OSAzLjM3OGMtLjg2Ni0xLjUtMy4wMzItMS41LTMuODk4IDBMMi42OTcgMTYuMTI2ek0xMiAxNS43NWguMDA3di4wMDhIMTJ2LS4wMDh6XCIgLz5cbiAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJ0ZXh0LXhzIGZvbnQtYm9sZCB1cHBlcmNhc2UgdHJhY2tpbmctd2lkZSB0ZXh0LWFtYmVyLTgwMFwiPlBhc3N3b3JkIHRlbXBvcmFuZWE8L2gzPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHgtNCBweS00XCI+XG4gICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtYi0zIHRleHQteHMgdGV4dC1hbWJlci04MDBcIj5cbiAgICAgICAgICAgICAgICAgICAgQ29tdW5pY2EgcXVlc3RhIHBhc3N3b3JkIGFsbCd1dGVudGUuXG4gICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+Tm9uIHNhcsOgIHBpw7kgcmVjdXBlcmFiaWxlPC9zdHJvbmc+IHVuYSB2b2x0YSBjaGl1c2EgbGEgZmluZXN0cmEuXG4gICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gZ2FwLTMgcm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLWFtYmVyLTMwMCBiZy13aGl0ZSBweC00IHB5LTMgc2hhZG93LXNtXCI+XG4gICAgICAgICAgICAgICAgICAgIDxjb2RlIGNsYXNzPVwiYnJlYWstYWxsIGZvbnQtbW9ubyB0ZXh0LXNtIGZvbnQtYm9sZCB0cmFja2luZy13aWRlIHRleHQtc2xhdGUtODAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyByZXNwb25zZSgpLnRlbXBQYXNzd29yZCB9fVxuICAgICAgICAgIDwvY29kZT5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3NlY3Rpb24+XG5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gRGlhbG9nIEZvb3RlciAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1lbmQgYm9yZGVyLXQgYm9yZGVyLXNsYXRlLTEwMCBiZy1zbGF0ZS01MCBweC01IHB5LTNcIj5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImNsb3NlRGlhbG9nKClcIlxuICAgICAgICAgICAgY2xhc3M9XCJpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgcm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLXNreS02MDAgYmctc2t5LTYwMCBweC00IHB5LTIgdGV4dC1zbSBmb250LXNlbWlib2xkIHRleHQtd2hpdGUgc2hhZG93LXNtIHRyYW5zaXRpb24tYWxsIGhvdmVyOmJnLXNreS01MDAgZm9jdXMtdmlzaWJsZTpvdXRsaW5lLTIgZm9jdXMtdmlzaWJsZTpvdXRsaW5lLW9mZnNldC0yIGZvY3VzLXZpc2libGU6b3V0bGluZS1za3ktNjAwIGFjdGl2ZTpzY2FsZS1bMC45OF1cIj5cbiAgICAgICAgICAgIDxzdmcgY2xhc3M9XCJoLTQgdy00XCIgZmlsbD1cIm5vbmVcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgc3Ryb2tlLXdpZHRoPVwiMi41XCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCI+XG4gICAgICAgICAgICAgICAgPHBhdGggc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgZD1cIk00LjUgMTIuNzVsNiA2IDktMTMuNVwiIC8+XG4gICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgIEhvIGNvbXVuaWNhdG8gbGEgcGFzc3dvcmRcbiAgICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG5cbjwvZGlhbG9nPiIsImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIERlY29kZXJQYXNzd29yZFNlcnZpY2Uge1xuXG4gICAgcHVibGljIGRlY29kZVRlbXBQYXNzd29yZCh0ZW1wUGFzc3dvcmQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSB0ZW1wUGFzc3dvcmQudHJpbSgpO1xuICAgICAgICBjb25zdCBpc0Jhc2U2NExpa2UgPSAvXltBLVphLXowLTkrL10rPXswLDJ9JC8udGVzdChub3JtYWxpemVkKSAmJiBub3JtYWxpemVkLmxlbmd0aCAlIDQgPT09IDA7XG5cbiAgICAgICAgaWYgKCFpc0Jhc2U2NExpa2UpIHtcbiAgICAgICAgICAgIHJldHVybiB0ZW1wUGFzc3dvcmQ7XG4gICAgICAgIH1cblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIGF0b2Iobm9ybWFsaXplZCk7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgcmV0dXJuIHRlbXBQYXNzd29yZDtcbiAgICAgICAgfVxuICAgIH1cblxufSIsImltcG9ydCB7IEluamVjdGFibGUsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IG1hcCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgVXNlckR0byB9IGZyb20gJy4uL21vZGVscy9pbi91c2VyLm1vZGVsLmR0byc7XG5pbXBvcnQgeyBVc2VyQ3JlYXRlZFJlc3BvbnNlRHRvIH0gZnJvbSAnLi4vbW9kZWxzL2luL3VzZXItY3JlYXRlZC1yZXNwb25zZS5tb2RlbC5kdG8nO1xuaW1wb3J0IHsgQ3JlYXRlVXNlckR0byB9IGZyb20gJy4uL21vZGVscy9vdXQvY3JlYXRlLXVzZXIubW9kZWwuZHRvJztcbmltcG9ydCB7IEFQSV9CQVNFX1VSTCB9IGZyb20gJy4uLy4uLy4uL2NvcmUvdG9rZW5zL2FwaS1iYXNlLXVybC50b2tlbic7XG5pbXBvcnQgeyBEZWNvZGVyUGFzc3dvcmRTZXJ2aWNlIH0gZnJvbSAnLi9kZWNvZGVyLXBhc3N3b3JkLXNlcnZpY2UnO1xuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIFVzZXJBcGlTZXJ2aWNlIHtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgaHR0cCA9IGluamVjdChIdHRwQ2xpZW50KTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGJhc2VVcmw6IHN0cmluZyA9IGluamVjdChBUElfQkFTRV9VUkwpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZGVjb2RlclBhc3N3b3JkU2VydmljZSA9IGluamVjdChEZWNvZGVyUGFzc3dvcmRTZXJ2aWNlKTtcblxuICAgIHB1YmxpYyBnZXRVc2VycygpOiBPYnNlcnZhYmxlPFVzZXJEdG9bXT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxVc2VyRHRvW10+KGAke3RoaXMuYmFzZVVybH0vdXNlcnNgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY3JlYXRlVXNlcihkdG86IENyZWF0ZVVzZXJEdG8pOiBPYnNlcnZhYmxlPFVzZXJDcmVhdGVkUmVzcG9uc2VEdG8+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgICAgICAgLnBvc3Q8VXNlckNyZWF0ZWRSZXNwb25zZUR0bz4oYCR7dGhpcy5iYXNlVXJsfS91c2Vyc2AsIGR0bylcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIG1hcCgocmVzcG9uc2UpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgIC4uLnJlc3BvbnNlLFxuICAgICAgICAgICAgICAgICAgICB0ZW1wUGFzc3dvcmQ6IHRoaXMuZGVjb2RlclBhc3N3b3JkU2VydmljZS5kZWNvZGVUZW1wUGFzc3dvcmQocmVzcG9uc2UudGVtcFBhc3N3b3JkKSxcbiAgICAgICAgICAgICAgICB9KSksXG4gICAgICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBkZWxldGVVc2VyKGlkOiBudW1iZXIpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5kZWxldGU8dm9pZD4oYCR7dGhpcy5iYXNlVXJsfS91c2Vycy8ke2VuY29kZVVSSUNvbXBvbmVudChpZC50b1N0cmluZygpKX1gKTtcbiAgICB9XG5cbiAgICAvKlxuICAgIHByaXZhdGUgZGVjb2RlVGVtcFBhc3N3b3JkKHRlbXBQYXNzd29yZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzQmFzZTY0RW5jb2RlZCh0ZW1wUGFzc3dvcmQpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGVtcFBhc3N3b3JkO1xuICAgICAgICB9XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBhdG9iKHRlbXBQYXNzd29yZCk7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgcmV0dXJuIHRlbXBQYXNzd29yZDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgaXNCYXNlNjRFbmNvZGVkKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZCA9IHZhbHVlLnRyaW0oKTtcbiAgICAgICAgaWYgKG5vcm1hbGl6ZWQubGVuZ3RoID09PSAwIHx8IG5vcm1hbGl6ZWQubGVuZ3RoICUgNCAhPT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCEvXltBLVphLXowLTkrL10rPXswLDJ9JC8udGVzdChub3JtYWxpemVkKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGRlY29kZWQgPSBhdG9iKG5vcm1hbGl6ZWQpO1xuICAgICAgICAgICAgY29uc3QgcmVFbmNvZGVkID0gYnRvYShkZWNvZGVkKS5yZXBsYWNlKC89KyQvLCAnJyk7XG4gICAgICAgICAgICBjb25zdCB3aXRob3V0UGFkZGluZyA9IG5vcm1hbGl6ZWQucmVwbGFjZSgvPSskLywgJycpO1xuICAgICAgICAgICAgcmV0dXJuIHJlRW5jb2RlZCA9PT0gd2l0aG91dFBhZGRpbmc7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgICovXG5cbn1cbiIsImV4cG9ydCBlbnVtIFVzZXJNYW5hZ2VtZW50RXJyb3JUeXBlIHtcbiAgVVNFUk5BTUVfQUxSRUFEWV9JTl9VU0UgPSAnVVNFUk5BTUVfQUxSRUFEWV9JTl9VU0UnLFxuICBPVEhFUl9FUlJPUiA9ICdPVEhFUl9FUlJPUidcbn1cbiIsImltcG9ydCB7IEFzeW5jUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBPbkluaXQsIFZpZXdDaGlsZCwgaW5qZWN0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFVzZXJMaXN0Q29tcG9uZW50IH0gZnJvbSAnLi4vdXNlci1saXN0L3VzZXItbGlzdCc7XG5pbXBvcnQgeyBDcmVhdGVVc2VyRm9ybUNvbXBvbmVudCB9IGZyb20gJy4uL2NyZWF0ZS11c2VyLWZvcm0vY3JlYXRlLXVzZXItZm9ybS5jb21wb25lbnQnO1xuaW1wb3J0IHsgVXNlckNyZWF0ZWREaWFsb2dDb21wb25lbnQgfSBmcm9tICcuLi91c2VyLWNyZWF0ZWQtZGlhbG9nL3VzZXItY3JlYXRlZC1kaWFsb2cnO1xuaW1wb3J0IHsgVXNlckFwaVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy91c2VyLWFwaS5zZXJ2aWNlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY2F0Y2hFcnJvciwgT2JzZXJ2YWJsZSwgb2YsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgVXNlckR0byB9IGZyb20gJy4uLy4uL21vZGVscy9pbi91c2VyLm1vZGVsLmR0byc7XG5pbXBvcnQgeyBVc2VyQ3JlYXRlZFJlc3BvbnNlRHRvIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2luL3VzZXItY3JlYXRlZC1yZXNwb25zZS5tb2RlbC5kdG8nO1xuaW1wb3J0IHsgVXNlck1hbmFnZW1lbnRFcnJvclR5cGUgfSBmcm9tICcuLi8uLi9tb2RlbHMvdXNlci1tYW5hZ2VtZW50LWVycm9yLXR5cGUuZW51bSc7XG5pbXBvcnQgeyBDcmVhdGVVc2VyRHRvIH0gZnJvbSAnLi4vLi4vbW9kZWxzL291dC9jcmVhdGUtdXNlci5tb2RlbC5kdG8nO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtdXNlci1tYW5hZ2VtZW50LXBhZ2UnLFxuICBpbXBvcnRzOiBbQXN5bmNQaXBlLCBVc2VyTGlzdENvbXBvbmVudCwgQ3JlYXRlVXNlckZvcm1Db21wb25lbnQsIFVzZXJDcmVhdGVkRGlhbG9nQ29tcG9uZW50XSxcbiAgdGVtcGxhdGVVcmw6ICcuL3VzZXItbWFuYWdlbWVudC1wYWdlLmh0bWwnLFxuICBzdHlsZVVybDogJy4vdXNlci1tYW5hZ2VtZW50LXBhZ2UuY3NzJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFVzZXJNYW5hZ2VtZW50UGFnZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgcHJpdmF0ZSByZWFkb25seSB1c2VyQXBpID0gaW5qZWN0KFVzZXJBcGlTZXJ2aWNlKTtcbiAgLy9zdGF0byByZWF0dGl2bzogc2kgZW1ldHRlIHVuIHZhbG9yZSBxdWkgZGVudHJvIG9nbmkgdm9sdGEgY2hlIHZvZ2xpYW1vIHJlZnJlc2hhcmUgbGEgbGlzdGFcbiAgcHJpdmF0ZSByZWFkb25seSByZWZyZXNoVHJpZ2dlciQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHZvaWQ+KHVuZGVmaW5lZCk7XG5cbiAgcHVibGljIHVzZXJzJCE6IE9ic2VydmFibGU8VXNlckR0b1tdPjtcbiAgcHVibGljIGNyZWF0ZWRSZXNwb25zZSA9IHNpZ25hbDxVc2VyQ3JlYXRlZFJlc3BvbnNlRHRvIHwgbnVsbD4obnVsbCk7XG4gIHB1YmxpYyBjcmVhdGVkVXNlciA9IHNpZ25hbDxDcmVhdGVVc2VyRHRvIHwgbnVsbD4obnVsbCk7XG4gIHB1YmxpYyBmb3JtRXJyb3IgPSBzaWduYWw8VXNlck1hbmFnZW1lbnRFcnJvclR5cGUgfCBudWxsPihudWxsKTtcbiAgcHVibGljIGlzQ3JlYXRlRm9ybU9wZW4gPSBzaWduYWwoZmFsc2UpO1xuXG4gIEBWaWV3Q2hpbGQoQ3JlYXRlVXNlckZvcm1Db21wb25lbnQpXG4gIHByaXZhdGUgcmVhZG9ubHkgY3JlYXRlVXNlckZvcm1Db21wb25lbnQ/OiBDcmVhdGVVc2VyRm9ybUNvbXBvbmVudDtcblxuXG5cbiAgLy8gT2duaSB2b2x0YSBjaGUgcmVmcmVzaFRyaWdnZXIkIGVtZXR0ZSwgc3dpdGNoTWFwIGFubnVsbGEgbGEgY2hpYW1hdGEgSFRUUCBwcmVjZWRlbnRlIChzZSBpbiBjb3JzbylcbiAgLy8gZSBuZSBmYSBwYXJ0aXJlIHVuYSBudW92YSwgcmVzdGl0dWVuZG8gbGEgbGlzdGEgYWdnaW9ybmF0YS5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy51c2VycyQgPSB0aGlzLnJlZnJlc2hUcmlnZ2VyJC5waXBlKFxuICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMudXNlckFwaS5nZXRVc2VycygpKSxcbiAgICAgIGNhdGNoRXJyb3IoZXJyID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3JlIGR1cmFudGUgaWwgY2FyaWNhbWVudG8gZGVnbGkgdXRlbnRpOicsIGVycik7XG4gICAgICAgIHJldHVybiBvZihbXSk7XG4gICAgICB9KVxuICAgIClcbiAgfVxuXG4gIHB1YmxpYyBvcGVuQ3JlYXRlRm9ybSgpOiB2b2lkIHtcbiAgICB0aGlzLmlzQ3JlYXRlRm9ybU9wZW4uc2V0KHRydWUpO1xuICB9XG5cbiAgcHVibGljIGNsb3NlQ3JlYXRlRm9ybSgpOiB2b2lkIHtcbiAgICB0aGlzLmlzQ3JlYXRlRm9ybU9wZW4uc2V0KGZhbHNlKTtcbiAgfVxuXG5cbiAgb25Gb3JtU3VibWl0KGR0bzogQ3JlYXRlVXNlckR0byk6IHZvaWQge1xuXG4gICAgdGhpcy5mb3JtRXJyb3Iuc2V0KG51bGwpO1xuXG4gICAgLy9jaGlhbWEgaWwgc2VydmljZVxuICAgIHRoaXMudXNlckFwaS5jcmVhdGVVc2VyKGR0bykuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChyZXNwb25zZTogVXNlckNyZWF0ZWRSZXNwb25zZUR0bykgPT4ge1xuICAgICAgICAvL1N1Y2Nlc3NvXG4gICAgICAgIC8vbW9zdHJhIGRpYWxvZyBlIGFnZ2lvcm5hIGxhIGxpc3RhXG4gICAgICAgIHRoaXMuY3JlYXRlZFJlc3BvbnNlLnNldChyZXNwb25zZSk7XG4gICAgICAgIHRoaXMuY3JlYXRlZFVzZXIuc2V0KGR0byk7XG4gICAgICAgIHRoaXMucmVmcmVzaFRyaWdnZXIkLm5leHQoKTsgLy8gcmljYXJpY2EgbGEgbGlzdGFcbiAgICAgICAgdGhpcy5mb3JtRXJyb3Iuc2V0KG51bGwpO1xuICAgICAgICB0aGlzLmNyZWF0ZVVzZXJGb3JtQ29tcG9uZW50Py5yZXNldEFuZEZvY3VzKCk7XG4gICAgICB9LFxuICAgICAgZXJyb3I6IChlcnIpID0+IHtcbiAgICAgICAgaWYgKGVyci5zdGF0dXMgPT09IDQwOSkge1xuICAgICAgICAgIHRoaXMuZm9ybUVycm9yLnNldChVc2VyTWFuYWdlbWVudEVycm9yVHlwZS5VU0VSTkFNRV9BTFJFQURZX0lOX1VTRSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5mb3JtRXJyb3Iuc2V0KFVzZXJNYW5hZ2VtZW50RXJyb3JUeXBlLk9USEVSX0VSUk9SKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cblxuICBvblVzZXJEZWxldGVkKGlkOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLnVzZXJBcGkuZGVsZXRlVXNlcihpZCkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgLy9zdWNjZXNzbzogdHJpZ2dlciBlbWV0dGUsIGxpc3RhIHNpIGFnZ2lvcm5hXG4gICAgICAgIHRoaXMucmVmcmVzaFRyaWdnZXIkLm5leHQoKTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogKGVycikgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3JlIGR1cmFudGUgbCdlbGltaW5hemlvbmU6XCIsIGVycik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuXG4gIC8vcXVhbmRvIGwnYW1taW5pc3RyYXRvcmUgY2hpdWRlIGlsIGRpYWxvZyBkZWxsYSBjcmVhemlvbmUgdXRlbnRlIGF2dmVudXRhIGNvbiBkaXNwbGF5IHRlbXBQYXNzd29yZFxuICBvbkRpYWxvZ0Nsb3NlZCgpOiB2b2lkIHtcbiAgICB0aGlzLmNyZWF0ZWRSZXNwb25zZS5zZXQobnVsbCk7XG4gICAgdGhpcy5jcmVhdGVkVXNlci5zZXQobnVsbCk7XG4gIH1cblxuXG59XG4iLCI8c2VjdGlvbiBhcmlhLWxhYmVsPVwiR2VzdGlvbmUgb3BlcmF0b3JpIHNhbml0YXJpXCJcbiAgICBjbGFzcz1cImNhcmUtcGFnZSBjYXJlLWRvdC1ncmlkIHNpZGViYXItcGFnZSB1c2VyLW1hbmFnZW1lbnQtcGFnZVwiPlxuXG4gICAgPGhlYWRlciBjbGFzcz1cImNhcmUtcGFnZV9faGVyb1wiPlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPHAgY2xhc3M9XCJjYXJlLWV5ZWJyb3dcIj5VdGVudGk8L3A+XG4gICAgICAgICAgICA8aDEgY2xhc3M9XCJjYXJlLXRpdGxlXCI+R2VzdGlvbmUgb3BlcmF0b3JpIHNhbml0YXJpPC9oMT5cbiAgICAgICAgICAgIDxwIGNsYXNzPVwiY2FyZS1zdWJ0aXRsZVwiPkNyZWEgbnVvdmkgcHJvZmlsaSBPU1MgZSBnZXN0aXNjaSBsJ2FuYWdyYWZpY2EgdXRlbnRpIGVzaXN0ZW50ZS48L3A+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvaGVhZGVyPlxuXG4gICAgPGRpdiBjbGFzcz1cIm1pbi1oLTAgZmxleC0xXCI+XG4gICAgICAgIDxhcHAtY3JlYXRlLXVzZXItZm9ybSBbZXJyb3JUeXBlXT1cImZvcm1FcnJvcigpXCIgW2lzT3Blbl09XCJpc0NyZWF0ZUZvcm1PcGVuKClcIiAob3BlblJlcXVlc3QpPVwib3BlbkNyZWF0ZUZvcm0oKVwiXG4gICAgICAgICAgICAoZm9ybVN1Ym1pdCk9XCJvbkZvcm1TdWJtaXQoJGV2ZW50KVwiIChjbG9zZVJlcXVlc3QpPVwiY2xvc2VDcmVhdGVGb3JtKClcIj5cbiAgICAgICAgPC9hcHAtY3JlYXRlLXVzZXItZm9ybT5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiaC00IGxnOmgtNlwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvZGl2PlxuXG4gICAgICAgIDxtYWluIGNsYXNzPVwibWluLWgtWzIycmVtXVwiPlxuICAgICAgICAgICAgQGlmICh1c2VycyQgfCBhc3luYzsgYXMgdXNlcnMpIHtcbiAgICAgICAgICAgIDxhcHAtdXNlci1saXN0IFt1c2Vyc109XCJ1c2Vyc1wiIChkZWxldGVVc2VyKT1cIm9uVXNlckRlbGV0ZWQoJGV2ZW50KVwiPlxuICAgICAgICAgICAgPC9hcHAtdXNlci1saXN0PlxuICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IG1pbi1oLVsyMnJlbV0gZmxleC1jb2wgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHJvdW5kZWQtMnhsIGJvcmRlciBib3JkZXItc2xhdGUtMjAwIGJnLXdoaXRlLzYwIHNoYWRvdy1zbSBiYWNrZHJvcC1ibHVyLXNtXCI+XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZsZXggaC0xMCB3LTEwIGFuaW1hdGUtc3BpbiBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZC1mdWxsIGJvcmRlci0yIGJvcmRlci1zbGF0ZS0yMDAgYm9yZGVyLXQtZW1lcmFsZC01MDBcIj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm10LTQgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LXNsYXRlLTUwMFwiPkNhcmljYW1lbnRvIG9wZXJhdG9yaSBpbiBjb3Jzb+KApjwvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICA8L21haW4+XG4gICAgPC9kaXY+XG5cbiAgICBAaWYgKGNyZWF0ZWRSZXNwb25zZSgpOyBhcyByZXNwb25zZSkge1xuICAgIEBpZiAoY3JlYXRlZFVzZXIoKTsgYXMgY3JlYXRlZFVzZXIpIHtcbiAgICA8YXBwLXVzZXItY3JlYXRlZC1kaWFsb2cgW3Jlc3BvbnNlXT1cInJlc3BvbnNlXCIgW3VzZXJdPVwiY3JlYXRlZFVzZXJcIiAoY2xvc2VkKT1cIm9uRGlhbG9nQ2xvc2VkKClcIj5cbiAgICA8L2FwcC11c2VyLWNyZWF0ZWQtZGlhbG9nPlxuICAgIH1cbiAgICB9XG5cbjwvc2VjdGlvbj4iXSwibWFwcGluZ3MiOiI7eTZCQzRDZ0JBLGNBQUEsR0FBQUMsQ0FBQSxNQUFBQyxDQUFBLFlBQXlELFdBQy9CLGFBRTRHLGFBQzdGQyxDQUFBLFFBQUNDLENBQUEsR0FBT0QsQ0FBQSxJQUN6Q0MsQ0FBQSxHQUFPLEVBRVhGLENBQUEsWUFBNkNDLENBQUEsSUFBZUMsQ0FBQSxHQUM1REYsQ0FBQSxZQUE2Q0MsQ0FBQSxJQUFrQkMsQ0FBQSxHQUUvREYsQ0FBQSxhQUFzQixnQkFDSUcsQ0FBQSxvQkFBQUwsY0FBQSxHQUFBTSxDQUFBLFVBQUFDLENBQUEsRUFBQVAsY0FBQSxHQUFBQyxDQUFBLE1BQUFPLENBQUEsQ0FBQUMsQ0FBQSxFQUFBQyxTQUFBLEVBQUFDLENBQUEsRUFBQVgsY0FBQSxHQUFBQyxDQUFBLE1BQUFXLENBQUEsSUFB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 \ No newline at end of file diff --git a/frontend/dist-instrumented/chunk-4WA7JXUW.js.map b/frontend/dist-instrumented/chunk-4WA7JXUW.js.map new file mode 100644 index 00000000..6c4baf02 --- /dev/null +++ b/frontend/dist-instrumented/chunk-4WA7JXUW.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["src/app/features/user-management/components/user-list/user-list.ts", "src/app/features/user-management/components/user-list/user-list.html", "src/app/features/user-management/components/create-user-form/create-user-form.component.ts", "src/app/features/user-management/components/create-user-form/create-user-form.html", "src/app/features/user-management/components/user-created-dialog/user-created-dialog.ts", "src/app/features/user-management/components/user-created-dialog/user-created-dialog.html", "src/app/features/user-management/services/decoder-password-service.ts", "src/app/features/user-management/services/user-api.service.ts", "src/app/features/user-management/models/user-management-error-type.enum.ts", "src/app/features/user-management/components/user-management-page/user-management-page.component.ts", "src/app/features/user-management/components/user-management-page/user-management-page.html"], + "sourcesContent": ["import { ChangeDetectionStrategy, Component, signal, input, output } from '@angular/core';\nimport { UserDto } from '../../models/in/user.model.dto';\n\n@Component({\n selector: 'app-user-list',\n imports: [],\n templateUrl: './user-list.html',\n styleUrl: './user-list.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\n\nexport class UserListComponent {\n users = input();\n deleteUser = output();\n\n public readonly pendingDeleteUser = signal(null);\n\n onDeleteRequest(user: UserDto): void {\n this.pendingDeleteUser.set(user);\n }\n\n onDeleteCancel(): void {\n this.pendingDeleteUser.set(null);\n }\n\n onDeleteConfirm(): void {\n const user = this.pendingDeleteUser();\n if (!user) {\n return;\n }\n\n this.deleteUser.emit(user.id);\n this.pendingDeleteUser.set(null);\n }\n\n onDelete(user: UserDto): void {\n this.onDeleteRequest(user);\n }\n}\n", "
\n\n \n
\n
\n
\n \n \n \n
\n
\n

\n Elenco operatori sanitari\n

\n

Anagrafica utenti registrati nel sistema.

\n
\n
\n \n \n {{ users()?.length ?? 0 }} utenti\n \n
\n\n \n
\n \n \n \n \n \n \n\n \n \n \n \n\n @for (user of users(); track user.id) {\n \n \n \n \n\n \n \n } @empty {\n \n \n \n }\n\n \n
Username\n NomeCognomeAzioni
\n \n @{{ user.username }}\n \n {{ user.name }}{{ user.surname }}\n \n
\n
\n
\n \n \n \n
\n
\n

Nessun operatore sanitario presente

\n

Usa il pulsante \"Inserisci Nuovo Operatore\" per\n aggiungere il primo profilo.

\n
\n
\n
\n
\n\n \n @if (pendingDeleteUser(); as userToDelete) {\n \n\n \n
\n
\n
\n \n \n \n
\n
\n

Conferma eliminazione\n

\n

Questa operazione non può essere annullata.

\n
\n
\n \n
\n\n \n
\n

\n Stai per eliminare l'operatore\n {{ userToDelete.name }} {{ userToDelete.surname\n }}.\n

\n
\n \n \n \n @{{ userToDelete.username }}\n
\n
\n\n \n
\n \n \n
\n\n
\n }\n\n
", "import { ChangeDetectionStrategy, Component, ElementRef, ViewChild, input, output, inject } from '@angular/core';\nimport { FormBuilder, ReactiveFormsModule, Validators } from '@angular/forms';\nimport { CreateUserDto } from '../../models/out/create-user.model.dto';\nimport { UserManagementErrorType } from '../../models/user-management-error-type.enum';\n\n@Component({\n selector: 'app-create-user-form',\n imports: [ReactiveFormsModule],\n templateUrl: './create-user-form.html',\n styleUrls: ['./create-user-form.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CreateUserFormComponent {\n errorType = input(null);\n isOpen = input(false);\n formSubmit = output();\n openRequest = output();\n closeRequest = output();\n\n @ViewChild('nameInput')\n private readonly nameInput?: ElementRef;\n\n private readonly fb = inject(FormBuilder);\n public readonly form = this.fb.nonNullable.group({\n name: ['', [Validators.required, Validators.minLength(2)]],\n surname: ['', [Validators.required, Validators.minLength(2)]],\n username: ['', [Validators.required, Validators.minLength(4)]],\n });\n\n public submit(): void {\n if (this.form.valid) {\n this.formSubmit.emit(this.form.getRawValue());\n } else {\n this.form.markAllAsTouched();\n }\n }\n\n public reset(): void {\n this.form.reset({\n name: '',\n surname: '',\n username: '',\n });\n }\n\n public resetAndFocus(): void {\n this.reset();\n this.form.markAsPristine();\n this.form.markAsUntouched();\n\n queueMicrotask(() => {\n this.nameInput?.nativeElement.focus();\n });\n }\n\n public requestClose(): void {\n this.closeRequest.emit();\n }\n\n public requestOpen(): void {\n this.openRequest.emit();\n }\n}", "
\n\n \n
\n
\n
\n
\n \n \n \n
\n
\n

\n Nuovo operatore sanitario\n

\n

Compila i campi per creare un profilo OSS.

\n
\n
\n\n @if (!isOpen()) {\n \n } @else {\n \n }\n
\n
\n\n \n
\n
\n\n \n
\n \n \n

Minimo 2 caratteri.

\n\n @if (form.controls['name'].invalid && form.controls['name'].touched) {\n

\n \n \n \n \n @if (form.controls['name'].hasError('required')) { Il nome è obbligatorio. }\n @if (form.controls['name'].hasError('minlength')) { Il nome deve essere di almeno 2 caratteri. }\n \n

\n }\n
\n\n \n
\n \n \n

Minimo 2 caratteri.

\n\n @if (form.controls['surname'].invalid && form.controls['surname'].touched) {\n

\n \n \n \n \n @if (form.controls['surname'].hasError('required')) { Il cognome è obbligatorio. }\n @if (form.controls['surname'].hasError('minlength')) { Il cognome deve essere di almeno 2 caratteri.\n }\n \n

\n }\n
\n\n \n
\n \n
\n \n
\n

Minimo 4 caratteri.

\n\n @if (form.controls['username'].invalid && form.controls['username'].touched) {\n

\n \n \n \n \n @if (form.controls['username'].hasError('required')) { L'username è obbligatorio. }\n @if (form.controls['username'].hasError('minlength')) { L'username deve essere di almeno 4\n caratteri. }\n \n

\n }\n\n @if (errorType() === 'USERNAME_ALREADY_IN_USE') {\n

\n \n \n \n Username già in uso. Scegline un altro.\n

\n }\n @if (errorType() === 'OTHER_ERROR') {\n

\n \n \n \n Errore durante la creazione utente. Riprova.\n

\n }\n
\n\n \n
\n\n \n \n
\n
\n\n
", "import { ChangeDetectionStrategy, Component, input, output } from '@angular/core';\nimport { UserCreatedResponseDto } from '../../models/in/user-created-response.model.dto';\nimport { CreateUserDto } from '../../models/out/create-user.model.dto';\n\n@Component({\n selector: 'app-user-created-dialog',\n imports: [],\n templateUrl: './user-created-dialog.html',\n styleUrl: './user-created-dialog.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class UserCreatedDialogComponent {\n response = input.required(); //mostriamo solo quando non nullo con .required\n user = input.required();\n closed = output();\n\n closeDialog(): void {\n this.closed.emit();\n }\n\n}\n", "\n\n \n
\n
\n \n \n \n
\n
\n

\n Utente creato con successo\n

\n

Conferma e comunica subito la password temporanea.

\n
\n
\n\n \n
\n\n \n
\n \n {{ user().name[0] }}{{ user().surname[0] }}\n
\n
\n

{{ user().name }} {{ user().surname }}

\n

\n @\n {{ user().username }}\n

\n
\n \n \n Attivo\n
\n \n\n \n
\n
\n \n \n \n

Password temporanea

\n
\n
\n

\n Comunica questa password all'utente.\n Non sarà più recuperabile una volta chiusa la finestra.\n

\n \n \n {{ response().tempPassword }}\n \n
\n \n
\n\n \n\n \n
\n \n
\n\n
", "import { Injectable } from \"@angular/core\";\n\n@Injectable({ providedIn: 'root' })\nexport class DecoderPasswordService {\n\n public decodeTempPassword(tempPassword: string): string {\n const normalized = tempPassword.trim();\n const isBase64Like = /^[A-Za-z0-9+/]+={0,2}$/.test(normalized) && normalized.length % 4 === 0;\n\n if (!isBase64Like) {\n return tempPassword;\n }\n\n try {\n return atob(normalized);\n } catch {\n return tempPassword;\n }\n }\n\n}", "import { Injectable, inject } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { map, Observable } from 'rxjs';\nimport { UserDto } from '../models/in/user.model.dto';\nimport { UserCreatedResponseDto } from '../models/in/user-created-response.model.dto';\nimport { CreateUserDto } from '../models/out/create-user.model.dto';\nimport { API_BASE_URL } from '../../../core/tokens/api-base-url.token';\nimport { DecoderPasswordService } from './decoder-password-service';\n\n@Injectable({ providedIn: 'root' })\nexport class UserApiService {\n\n private readonly http = inject(HttpClient);\n private readonly baseUrl: string = inject(API_BASE_URL);\n private readonly decoderPasswordService = inject(DecoderPasswordService);\n\n public getUsers(): Observable {\n return this.http.get(`${this.baseUrl}/users`);\n }\n\n public createUser(dto: CreateUserDto): Observable {\n return this.http\n .post(`${this.baseUrl}/users`, dto)\n .pipe(\n map((response) => ({\n ...response,\n tempPassword: this.decoderPasswordService.decodeTempPassword(response.tempPassword),\n })),\n );\n }\n\n public deleteUser(id: number): Observable {\n return this.http.delete(`${this.baseUrl}/users/${encodeURIComponent(id.toString())}`);\n }\n\n /*\n private decodeTempPassword(tempPassword: string): string {\n if (!this.isBase64Encoded(tempPassword)) {\n return tempPassword;\n }\n\n try {\n return atob(tempPassword);\n } catch {\n return tempPassword;\n }\n }\n\n private isBase64Encoded(value: string): boolean {\n const normalized = value.trim();\n if (normalized.length === 0 || normalized.length % 4 !== 0) {\n return false;\n }\n\n if (!/^[A-Za-z0-9+/]+={0,2}$/.test(normalized)) {\n return false;\n }\n\n try {\n const decoded = atob(normalized);\n const reEncoded = btoa(decoded).replace(/=+$/, '');\n const withoutPadding = normalized.replace(/=+$/, '');\n return reEncoded === withoutPadding;\n } catch {\n return false;\n }\n }\n */\n\n}\n", "export enum UserManagementErrorType {\n USERNAME_ALREADY_IN_USE = 'USERNAME_ALREADY_IN_USE',\n OTHER_ERROR = 'OTHER_ERROR'\n}\n", "import { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, OnInit, ViewChild, inject, signal } from '@angular/core';\nimport { UserListComponent } from '../user-list/user-list';\nimport { CreateUserFormComponent } from '../create-user-form/create-user-form.component';\nimport { UserCreatedDialogComponent } from '../user-created-dialog/user-created-dialog';\nimport { UserApiService } from '../../services/user-api.service';\nimport { BehaviorSubject, catchError, Observable, of, switchMap } from 'rxjs';\nimport { UserDto } from '../../models/in/user.model.dto';\nimport { UserCreatedResponseDto } from '../../models/in/user-created-response.model.dto';\nimport { UserManagementErrorType } from '../../models/user-management-error-type.enum';\nimport { CreateUserDto } from '../../models/out/create-user.model.dto';\n\n@Component({\n selector: 'app-user-management-page',\n imports: [AsyncPipe, UserListComponent, CreateUserFormComponent, UserCreatedDialogComponent],\n templateUrl: './user-management-page.html',\n styleUrl: './user-management-page.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class UserManagementPageComponent implements OnInit {\n\n private readonly userApi = inject(UserApiService);\n //stato reattivo: si emette un valore qui dentro ogni volta che vogliamo refreshare la lista\n private readonly refreshTrigger$ = new BehaviorSubject(undefined);\n\n public users$!: Observable;\n public createdResponse = signal(null);\n public createdUser = signal(null);\n public formError = signal(null);\n public isCreateFormOpen = signal(false);\n\n @ViewChild(CreateUserFormComponent)\n private readonly createUserFormComponent?: CreateUserFormComponent;\n\n\n\n // Ogni volta che refreshTrigger$ emette, switchMap annulla la chiamata HTTP precedente (se in corso)\n // e ne fa partire una nuova, restituendo la lista aggiornata.\n ngOnInit(): void {\n this.users$ = this.refreshTrigger$.pipe(\n switchMap(() => this.userApi.getUsers()),\n catchError(err => {\n console.error('Errore durante il caricamento degli utenti:', err);\n return of([]);\n })\n )\n }\n\n public openCreateForm(): void {\n this.isCreateFormOpen.set(true);\n }\n\n public closeCreateForm(): void {\n this.isCreateFormOpen.set(false);\n }\n\n\n onFormSubmit(dto: CreateUserDto): void {\n\n this.formError.set(null);\n\n //chiama il service\n this.userApi.createUser(dto).subscribe({\n next: (response: UserCreatedResponseDto) => {\n //Successo\n //mostra dialog e aggiorna la lista\n this.createdResponse.set(response);\n this.createdUser.set(dto);\n this.refreshTrigger$.next(); // ricarica la lista\n this.formError.set(null);\n this.createUserFormComponent?.resetAndFocus();\n },\n error: (err) => {\n if (err.status === 409) {\n this.formError.set(UserManagementErrorType.USERNAME_ALREADY_IN_USE);\n } else {\n this.formError.set(UserManagementErrorType.OTHER_ERROR);\n }\n }\n });\n }\n\n\n onUserDeleted(id: number): void {\n this.userApi.deleteUser(id).subscribe({\n next: () => {\n //successo: trigger emette, lista si aggiorna\n this.refreshTrigger$.next();\n },\n error: (err) => {\n console.error(\"Errore durante l'eliminazione:\", err);\n }\n });\n }\n\n\n //quando l'amministratore chiude il dialog della creazione utente avvenuta con display tempPassword\n onDialogClosed(): void {\n this.createdResponse.set(null);\n this.createdUser.set(null);\n }\n\n\n}\n", "
\n\n
\n
\n

Utenti

\n

Gestione operatori sanitari

\n

Crea nuovi profili OSS e gestisci l'anagrafica utenti esistente.

\n
\n
\n\n
\n \n \n\n
\n\n
\n @if (users$ | async; as users) {\n \n \n } @else {\n \n \n
\n

Caricamento operatori in corso…

\n \n }\n \n \n\n @if (createdResponse(); as response) {\n @if (createdUser(); as createdUser) {\n \n \n }\n }\n\n
"], + "mappings": "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", + "names": ["\u0275\u0275domElementStart", "\u0275\u0275text", "\u0275\u0275domElementEnd", "\u0275\u0275domListener", "user_r2", "\u0275\u0275restoreView", "_r1", "$implicit", "ctx_r2", "\u0275\u0275nextContext", "\u0275\u0275resetView", "onDeleteRequest", "\u0275\u0275domElement", "\u0275\u0275advance", "\u0275\u0275textInterpolate1", "username", "\u0275\u0275textInterpolate", "name", "surname", "_r4", "onDeleteCancel", "onDeleteConfirm", "\u0275\u0275textInterpolate2", "userToDelete_r5", "UserListComponent", "users", "input", "deleteUser", "output", "pendingDeleteUser", "signal", "user", "set", "emit", "id", "onDelete", "selectors", "inputs", "outputs", "decls", "vars", "consts", "template", "rf", "ctx", "\u0275\u0275repeaterCreate", "UserListComponent_For_28_Template", "_forTrack0", "UserListComponent_ForEmpty_29_Template", "\u0275\u0275conditionalCreate", "UserListComponent_Conditional_30_Template", "tmp_0_0", "length", "\u0275\u0275repeater", "\u0275\u0275conditional", "tmp_2_0", "\u0275\u0275elementStart", "\u0275\u0275listener", "\u0275\u0275restoreView", "_r1", "ctx_r1", "\u0275\u0275nextContext", "\u0275\u0275resetView", "requestOpen", "\u0275\u0275element", "\u0275\u0275elementEnd", "\u0275\u0275text", "_r3", "requestClose", "\u0275\u0275conditionalCreate", "CreateUserFormComponent_Conditional_25_Conditional_4_Template", "CreateUserFormComponent_Conditional_25_Conditional_5_Template", "\u0275\u0275advance", "\u0275\u0275conditional", "form", "controls", "hasError", "CreateUserFormComponent_Conditional_34_Conditional_4_Template", "CreateUserFormComponent_Conditional_34_Conditional_5_Template", "CreateUserFormComponent_Conditional_44_Conditional_4_Template", "CreateUserFormComponent_Conditional_44_Conditional_5_Template", "CreateUserFormComponent", "errorType", "input", "isOpen", "formSubmit", "output", "openRequest", "closeRequest", "nameInput", "fb", "inject", "FormBuilder", "nonNullable", "group", "name", "Validators", "required", "minLength", "surname", "username", "submit", "valid", "emit", "getRawValue", "markAllAsTouched", "reset", "resetAndFocus", "markAsPristine", "markAsUntouched", "queueMicrotask", "nativeElement", "focus", "selectors", "viewQuery", "rf", "ctx", "CreateUserFormComponent_Conditional_12_Template", "CreateUserFormComponent_Conditional_13_Template", "CreateUserFormComponent_Conditional_25_Template", "CreateUserFormComponent_Conditional_34_Template", "CreateUserFormComponent_Conditional_44_Template", "CreateUserFormComponent_Conditional_45_Template", "CreateUserFormComponent_Conditional_46_Template", "\u0275\u0275classMap", "\u0275\u0275property", "invalid", "touched", "ReactiveFormsModule", "\u0275NgNoValidate", "DefaultValueAccessor", "NgControlStatus", "NgControlStatusGroup", "FormGroupDirective", "FormControlName", "encapsulation", "changeDetection", "UserCreatedDialogComponent", "response", "input", "required", "user", "closed", "output", "closeDialog", "emit", "selectors", "inputs", "outputs", "decls", "vars", "consts", "template", "rf", "ctx", "\u0275\u0275domElementStart", "\u0275\u0275domElement", "\u0275\u0275domElementEnd", "\u0275\u0275text", "\u0275\u0275domListener", "\u0275\u0275advance", "\u0275\u0275textInterpolate2", "name", "surname", "\u0275\u0275textInterpolate", "username", "\u0275\u0275textInterpolate1", "tempPassword", "DecoderPasswordService", "decodeTempPassword", "tempPassword", "normalized", "trim", "test", "length", "atob", "factory", "\u0275fac", "providedIn", "UserApiService", "http", "inject", "HttpClient", "baseUrl", "API_BASE_URL", "decoderPasswordService", "DecoderPasswordService", "getUsers", "get", "createUser", "dto", "post", "pipe", "map", "response", "__spreadProps", "__spreadValues", "tempPassword", "decodeTempPassword", "deleteUser", "id", "delete", "encodeURIComponent", "toString", "factory", "\u0275fac", "providedIn", "UserManagementErrorType", "\u0275\u0275elementStart", "\u0275\u0275listener", "$event", "\u0275\u0275restoreView", "_r1", "ctx_r1", "\u0275\u0275nextContext", "\u0275\u0275resetView", "onUserDeleted", "\u0275\u0275elementEnd", "\u0275\u0275property", "ctx", "\u0275\u0275element", "\u0275\u0275text", "_r3", "onDialogClosed", "response_r4", "\u0275\u0275conditionalCreate", "UserManagementPageComponent_Conditional_16_Conditional_0_Template", "\u0275\u0275conditional", "tmp_2_0", "createdUser", "UserManagementPageComponent", "userApi", "inject", "UserApiService", "refreshTrigger$", "BehaviorSubject", "undefined", "users$", "createdResponse", "signal", "formError", "isCreateFormOpen", "createUserFormComponent", "ngOnInit", "pipe", "switchMap", "getUsers", "catchError", "err", "console", "error", "of", "openCreateForm", "set", "closeCreateForm", "onFormSubmit", "dto", "createUser", "subscribe", "next", "response", "resetAndFocus", "status", "UserManagementErrorType", "USERNAME_ALREADY_IN_USE", "OTHER_ERROR", "id", "deleteUser", "selectors", "viewQuery", "rf", "CreateUserFormComponent", "UserManagementPageComponent_Conditional_13_Template", "\u0275\u0275conditionalBranchCreate", "UserManagementPageComponent_Conditional_15_Template", "UserManagementPageComponent_Conditional_16_Template", "\u0275\u0275advance", "\u0275\u0275pipeBind1", "tmp_3_0", "UserListComponent", "UserCreatedDialogComponent", "AsyncPipe", "styles", "changeDetection"] +} diff --git a/frontend/dist-instrumented/chunk-4WOV63XI.js b/frontend/dist-instrumented/chunk-4WOV63XI.js new file mode 100644 index 00000000..3125c6ed --- /dev/null +++ b/frontend/dist-instrumented/chunk-4WOV63XI.js @@ -0,0 +1,3 @@ +function cov_2ilvs5vmtd(){var path="/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-4WOV63XI.js";var hash="7c10868eb8eea3dbe1d54e10f150dd01c5a0a0d4";var global=new Function("return this")();var gcv="__coverage__";var coverageData={path:"/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-4WOV63XI.js",statementMap:{"0":{start:{line:1,column:214},end:{line:1,column:326}},"1":{start:{line:1,column:258},end:{line:1,column:324}},"2":{start:{line:1,column:296},end:{line:1,column:323}}},fnMap:{"0":{name:"(anonymous_0)",decl:{start:{line:1,column:254},end:{line:1,column:255}},loc:{start:{line:1,column:258},end:{line:1,column:324}},line:1},"1":{name:"(anonymous_1)",decl:{start:{line:1,column:293},end:{line:1,column:294}},loc:{start:{line:1,column:296},end:{line:1,column:323}},line:1}},branchMap:{},s:{"0":0,"1":0,"2":0},f:{"0":0,"1":0},b:{},inputSourceMap:{version:3,sources:["src/app/features/notification/notification.routes.ts"],sourcesContent:["import { Routes } from '@angular/router';\nimport { authGuard } from '../../core/guards/auth.guard';\n\nexport const NOTIFICATION_ROUTES: Routes = [\n {\n path: '',\n canActivate: [authGuard],\n loadComponent: () =>\n import('./components/notification-page-component/notification-page-component').then((m) => m.NotificationPageComponent)\n }\n];\n"],mappings:"gNAGO,IAAMA,EAA8B,CACzC,CACEC,KAAM,GACNC,YAAa,CAACC,CAAS,EACvBC,cAAeA,IACb,OAAO,qBAAsE,EAAEC,KAAMC,GAAMA,EAAEC,yBAAyB,EACzH",names:["NOTIFICATION_ROUTES","path","canActivate","authGuard","loadComponent","then","m","NotificationPageComponent"]},_coverageSchema:"1a1c01bbd47fc00a2c39e90264f33305004495a9",hash:"7c10868eb8eea3dbe1d54e10f150dd01c5a0a0d4"};var coverage=global[gcv]||(global[gcv]={});if(!coverage[path]||coverage[path].hash!==hash){coverage[path]=coverageData;}var actualCoverage=coverage[path];{// @ts-ignore +cov_2ilvs5vmtd=function(){return actualCoverage;};}return actualCoverage;}cov_2ilvs5vmtd();import{a as t}from"./chunk-K2WBT5ZC.js";import"./chunk-FYGTVJAL.js";import"./chunk-65RKWSY3.js";import"./chunk-2S5V5XEE.js";import"./chunk-F6OGAIBI.js";import"./chunk-RYTNMYZW.js";import"./chunk-VCZGUBMY.js";var n=(cov_2ilvs5vmtd().s[0]++,[{path:"",canActivate:[t],loadComponent:()=>{cov_2ilvs5vmtd().f[0]++;cov_2ilvs5vmtd().s[1]++;return import("./chunk-2HDQ4MOL.js").then(o=>{cov_2ilvs5vmtd().f[1]++;cov_2ilvs5vmtd().s[2]++;return o.NotificationPageComponent;});}}]);export{n as NOTIFICATION_ROUTES};//# sourceMappingURL=chunk-4WOV63XI.js.map +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJuIiwiY292XzJpbHZzNXZtdGQiLCJzIiwicGF0aCIsImNhbkFjdGl2YXRlIiwidCIsImxvYWRDb21wb25lbnQiLCJmIiwidGhlbiIsIm8iLCJOb3RpZmljYXRpb25QYWdlQ29tcG9uZW50IiwiTk9USUZJQ0FUSU9OX1JPVVRFUyJdLCJzb3VyY2VzIjpbInNyYy9hcHAvZmVhdHVyZXMvbm90aWZpY2F0aW9uL25vdGlmaWNhdGlvbi5yb3V0ZXMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUm91dGVzIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IGF1dGhHdWFyZCB9IGZyb20gJy4uLy4uL2NvcmUvZ3VhcmRzL2F1dGguZ3VhcmQnO1xuXG5leHBvcnQgY29uc3QgTk9USUZJQ0FUSU9OX1JPVVRFUzogUm91dGVzID0gW1xuICB7XG4gICAgcGF0aDogJycsXG4gICAgY2FuQWN0aXZhdGU6IFthdXRoR3VhcmRdLFxuICAgIGxvYWRDb21wb25lbnQ6ICgpID0+XG4gICAgICBpbXBvcnQoJy4vY29tcG9uZW50cy9ub3RpZmljYXRpb24tcGFnZS1jb21wb25lbnQvbm90aWZpY2F0aW9uLXBhZ2UtY29tcG9uZW50JykudGhlbigobSkgPT4gbS5Ob3RpZmljYXRpb25QYWdlQ29tcG9uZW50KVxuICB9XG5dO1xuIl0sIm1hcHBpbmdzIjoiOzJTQUdPLEdBQU0sQ0FBQUEsQ0FBQSxFQUFBQyxjQUFBLEdBQUFDLENBQUEsTUFBOEIsQ0FDekMsQ0FDRUMsSUFBQSxDQUFNLEdBQ05DLFdBQUEsQ0FBYSxDQUFDQyxDQUFTLEVBQ3ZCQyxhQUFBLENBQWVBLENBQUEsR0FDYixDQUFBTCxjQUFBLEdBQUFNLENBQUEsS0FBQU4sQ0FBQSxpQkFBQUMsQ0FBQSxvQkFBTyxxQkFBc0UsRUFBRU0sSUFBQSxDQUFNQyxDQUFBLEVBQU0sQ0FBQVIsY0FBQSxHQUFBTSxDQUFBLEtBQUFOLENBQUEsaUJBQUFDLENBQUEsYUFBQU8sQ0FBQSxDQUFFQyx5QkFBeUIsQ0FBekIsQ0FBeUIsSUFDekgsVUFBQVYsQ0FBQSxJQUFBVyxtQkFBQSxFIiwiaWdub3JlTGlzdCI6W119 \ No newline at end of file diff --git a/frontend/dist-instrumented/chunk-4WOV63XI.js.map b/frontend/dist-instrumented/chunk-4WOV63XI.js.map new file mode 100644 index 00000000..d59d07c1 --- /dev/null +++ b/frontend/dist-instrumented/chunk-4WOV63XI.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["src/app/features/notification/notification.routes.ts"], + "sourcesContent": ["import { Routes } from '@angular/router';\nimport { authGuard } from '../../core/guards/auth.guard';\n\nexport const NOTIFICATION_ROUTES: Routes = [\n {\n path: '',\n canActivate: [authGuard],\n loadComponent: () =>\n import('./components/notification-page-component/notification-page-component').then((m) => m.NotificationPageComponent)\n }\n];\n"], + "mappings": "gNAGO,IAAMA,EAA8B,CACzC,CACEC,KAAM,GACNC,YAAa,CAACC,CAAS,EACvBC,cAAeA,IACb,OAAO,qBAAsE,EAAEC,KAAMC,GAAMA,EAAEC,yBAAyB,EACzH", + "names": ["NOTIFICATION_ROUTES", "path", "canActivate", "authGuard", "loadComponent", "then", "m", "NotificationPageComponent"] +} diff --git a/frontend/dist-instrumented/chunk-54EPVJ7F.js b/frontend/dist-instrumented/chunk-54EPVJ7F.js new file mode 100644 index 00000000..4cece653 --- /dev/null +++ b/frontend/dist-instrumented/chunk-54EPVJ7F.js @@ -0,0 +1,3 @@ +function cov_1lpavo0iy1(){var path="/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-54EPVJ7F.js";var hash="241345f462d330e1360f8f9f4114fb87b513e11d";var global=new Function("return this")();var gcv="__coverage__";var coverageData={path:"/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-54EPVJ7F.js",statementMap:{"0":{start:{line:1,column:100},end:{line:1,column:1722}},"1":{start:{line:1,column:119},end:{line:1,column:123}},"2":{start:{line:1,column:132},end:{line:1,column:136}},"3":{start:{line:1,column:151},end:{line:1,column:174}},"4":{start:{line:1,column:206},end:{line:1,column:249}},"5":{start:{line:1,column:282},end:{line:1,column:326}},"6":{start:{line:1,column:341},end:{line:1,column:364}},"7":{start:{line:1,column:379},end:{line:1,column:402}},"8":{start:{line:1,column:414},end:{line:1,column:454}},"9":{start:{line:1,column:469},end:{line:1,column:512}},"10":{start:{line:1,column:529},end:{line:1,column:609}},"11":{start:{line:1,column:624},end:{line:1,column:705}},"12":{start:{line:1,column:730},end:{line:1,column:825}},"13":{start:{line:1,column:850},end:{line:1,column:895}},"14":{start:{line:1,column:922},end:{line:1,column:1007}},"15":{start:{line:1,column:1036},end:{line:1,column:1167}},"16":{start:{line:1,column:1189},end:{line:1,column:1285}},"17":{start:{line:1,column:1307},end:{line:1,column:1356}},"18":{start:{line:1,column:1380},end:{line:1,column:1468}},"19":{start:{line:1,column:1494},end:{line:1,column:1593}},"20":{start:{line:1,column:1611},end:{line:1,column:1640}},"21":{start:{line:1,column:1623},end:{line:1,column:1639}},"22":{start:{line:1,column:1659},end:{line:1,column:1709}},"23":{start:{line:1,column:1710},end:{line:1,column:1718}}},fnMap:{"0":{name:"(anonymous_0)",decl:{start:{line:1,column:101},end:{line:1,column:102}},loc:{start:{line:1,column:105},end:{line:1,column:1719}},line:1},"1":{name:"(anonymous_1)",decl:{start:{line:1,column:403},end:{line:1,column:404}},loc:{start:{line:1,column:413},end:{line:1,column:455}},line:1},"2":{name:"(anonymous_2)",decl:{start:{line:1,column:455},end:{line:1,column:456}},loc:{start:{line:1,column:468},end:{line:1,column:513}},line:1},"3":{name:"(anonymous_3)",decl:{start:{line:1,column:513},end:{line:1,column:514}},loc:{start:{line:1,column:528},end:{line:1,column:610}},line:1},"4":{name:"(anonymous_4)",decl:{start:{line:1,column:610},end:{line:1,column:611}},loc:{start:{line:1,column:623},end:{line:1,column:706}},line:1},"5":{name:"(anonymous_5)",decl:{start:{line:1,column:706},end:{line:1,column:707}},loc:{start:{line:1,column:729},end:{line:1,column:826}},line:1},"6":{name:"(anonymous_6)",decl:{start:{line:1,column:826},end:{line:1,column:827}},loc:{start:{line:1,column:849},end:{line:1,column:896}},line:1},"7":{name:"(anonymous_7)",decl:{start:{line:1,column:896},end:{line:1,column:897}},loc:{start:{line:1,column:921},end:{line:1,column:1008}},line:1},"8":{name:"(anonymous_8)",decl:{start:{line:1,column:1008},end:{line:1,column:1009}},loc:{start:{line:1,column:1035},end:{line:1,column:1168}},line:1},"9":{name:"(anonymous_9)",decl:{start:{line:1,column:1168},end:{line:1,column:1169}},loc:{start:{line:1,column:1188},end:{line:1,column:1286}},line:1},"10":{name:"(anonymous_10)",decl:{start:{line:1,column:1286},end:{line:1,column:1287}},loc:{start:{line:1,column:1306},end:{line:1,column:1357}},line:1},"11":{name:"(anonymous_11)",decl:{start:{line:1,column:1357},end:{line:1,column:1358}},loc:{start:{line:1,column:1379},end:{line:1,column:1469}},line:1},"12":{name:"(anonymous_12)",decl:{start:{line:1,column:1469},end:{line:1,column:1470}},loc:{start:{line:1,column:1493},end:{line:1,column:1594}},line:1},"13":{name:"(anonymous_13)",decl:{start:{line:1,column:1611},end:{line:1,column:1612}},loc:{start:{line:1,column:1622},end:{line:1,column:1640}},line:1}},branchMap:{"0":{loc:{start:{line:1,column:1634},end:{line:1,column:1638}},type:"binary-expr",locations:[{start:{line:1,column:1634},end:{line:1,column:1635}},{start:{line:1,column:1637},end:{line:1,column:1638}}],line:1}},s:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0},f:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0},b:{"0":[0,0]},inputSourceMap:{version:3,sources:["src/app/features/ward-management/services/ward-api.service.ts"],sourcesContent:["import { HttpClient } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { API_BASE_URL } from '../../../core/tokens/api-base-url.token';\nimport type {\n AssignPlantDto,\n AssignOperatorDto,\n CreateWardDto,\n UpdateWardDto,\n WardSummaryDto,\n WardUserDto,\n WardPlantDto,\n} from '../models/ward-api.dto';\nimport type { Ward } from '../models/ward.model';\n\n@Injectable({ providedIn: 'root' })\nexport class WardApiService {\n private readonly http = inject(HttpClient);\n private readonly baseUrl: string = inject(API_BASE_URL);\n private readonly wardsEndpoint = `${this.baseUrl}/wards`;\n private readonly wardUsersRelationshipsEndpoint = `${this.baseUrl}/wards-users-relationships`;\n private readonly wardPlantsRelationshipsEndpoint = `${this.baseUrl}/wards-plants-relationships`;\n private readonly plantEndpoint = `${this.baseUrl}/plant`;\n private readonly usersEndpoint = `${this.baseUrl}/users`;\n\n public getWards(): Observable {\n return this.http.get(this.wardsEndpoint);\n }\n\n public createWard(dto: CreateWardDto): Observable {\n return this.http.post(this.wardsEndpoint, dto);\n }\n\n public updateWard(wardId: number, dto: UpdateWardDto): Observable {\n return this.http.put(`${this.wardsEndpoint}/${encodeURIComponent(String(wardId))}`, dto);\n }\n\n public deleteWard(wardId: number): Observable {\n return this.http.delete(`${this.wardsEndpoint}/${encodeURIComponent(String(wardId))}`);\n }\n\n\n\n public getOperatorsByWardId(wardId: number): Observable {\n return this.http.get(\n `${this.wardUsersRelationshipsEndpoint}/${encodeURIComponent(String(wardId))}`,\n );\n }\n\n public getAvailableOperators(): Observable {\n return this.http.get(\n `${this.usersEndpoint}`,\n );\n }\n public assignOperatorToWard(wardId: number, dto: AssignOperatorDto): Observable {\n return this.http.post(this.wardUsersRelationshipsEndpoint, {\n wardId,\n userId: dto.userId,\n });\n }\n\n public removeOperatorFromWard(wardId: number, userId: number): Observable {\n return this.http.delete(\n `${this.wardUsersRelationshipsEndpoint}/${encodeURIComponent(String(wardId))}/${encodeURIComponent(String(userId))}`,\n );\n }\n\n\n public getPlantsByWardId(wardId: number): Observable {\n return this.http.get(\n `${this.wardPlantsRelationshipsEndpoint}/${encodeURIComponent(String(wardId))}`,\n );\n }\n\n public getAvailablePlants(): Observable {\n return this.http.get(\n `${this.plantEndpoint}/all`,\n );\n }\n\n\n public assignPlantToWard(wardId: number, dto: AssignPlantDto): Observable {\n return this.http.post(this.wardPlantsRelationshipsEndpoint, {\n wardId,\n plantId: dto.plantId,\n });\n }\n\n\n public removePlantFromWard(wardId: number, plantId: string): Observable {\n return this.http.delete(\n `${this.wardPlantsRelationshipsEndpoint}/${encodeURIComponent(String(plantId))}`,\n );\n }\n}\n"],mappings:"8FAgBA,IAAaA,GAAc,IAAA,CAArB,MAAOA,CAAc,CACNC,KAAOC,EAAOC,CAAU,EACxBC,QAAkBF,EAAOG,CAAY,EACrCC,cAAgB,GAAG,KAAKF,OAAO,SAC/BG,+BAAiC,GAAG,KAAKH,OAAO,6BAChDI,gCAAkC,GAAG,KAAKJ,OAAO,8BACjDK,cAAgB,GAAG,KAAKL,OAAO,SAC/BM,cAAgB,GAAG,KAAKN,OAAO,SAEzCO,UAAQ,CACX,OAAO,KAAKV,KAAKW,IAAsB,KAAKN,aAAa,CAC7D,CAEOO,WAAWC,EAAkB,CAChC,OAAO,KAAKb,KAAKc,KAAW,KAAKT,cAAeQ,CAAG,CACvD,CAEOE,WAAWC,EAAgBH,EAAkB,CAChD,OAAO,KAAKb,KAAKiB,IAAU,GAAG,KAAKZ,aAAa,IAAIa,mBAAmBC,OAAOH,CAAM,CAAC,CAAC,GAAIH,CAAG,CACjG,CAEOO,WAAWJ,EAAc,CAC5B,OAAO,KAAKhB,KAAKqB,OAAa,GAAG,KAAKhB,aAAa,IAAIa,mBAAmBC,OAAOH,CAAM,CAAC,CAAC,EAAE,CAC/F,CAIOM,qBAAqBN,EAAc,CACtC,OAAO,KAAKhB,KAAKW,IACb,GAAG,KAAKL,8BAA8B,IAAIY,mBAAmBC,OAAOH,CAAM,CAAC,CAAC,EAAE,CAEtF,CAEOO,uBAAqB,CACxB,OAAO,KAAKvB,KAAKW,IACb,GAAG,KAAKF,aAAa,EAAE,CAE/B,CACOe,qBAAqBR,EAAgBH,EAAsB,CAC9D,OAAO,KAAKb,KAAKc,KAAW,KAAKR,+BAAgC,CAC7DU,OAAAA,EACAS,OAAQZ,EAAIY,OACf,CACL,CAEOC,uBAAuBV,EAAgBS,EAAc,CACxD,OAAO,KAAKzB,KAAKqB,OACb,GAAG,KAAKf,8BAA8B,IAAIY,mBAAmBC,OAAOH,CAAM,CAAC,CAAC,IAAIE,mBAAmBC,OAAOM,CAAM,CAAC,CAAC,EAAE,CAE5H,CAGOE,kBAAkBX,EAAc,CACnC,OAAO,KAAKhB,KAAKW,IACb,GAAG,KAAKJ,+BAA+B,IAAIW,mBAAmBC,OAAOH,CAAM,CAAC,CAAC,EAAE,CAEvF,CAEOY,oBAAkB,CACrB,OAAO,KAAK5B,KAAKW,IACb,GAAG,KAAKH,aAAa,MAAM,CAEnC,CAGOqB,kBAAkBb,EAAgBH,EAAmB,CACxD,OAAO,KAAKb,KAAKc,KAAW,KAAKP,gCAAiC,CAC9DS,OAAAA,EACAc,QAASjB,EAAIiB,QAChB,CACL,CAGOC,oBAAoBf,EAAgBc,EAAe,CACtD,OAAO,KAAK9B,KAAKqB,OACb,GAAG,KAAKd,+BAA+B,IAAIW,mBAAmBC,OAAOW,CAAO,CAAC,CAAC,EAAE,CAExF,4CA7ES/B,EAAc,6BAAdA,EAAciC,QAAdjC,EAAckC,UAAAC,WADD,MAAM,CAAA,SACnBnC,CAAc,GAAA",names:["WardApiService","http","inject","HttpClient","baseUrl","API_BASE_URL","wardsEndpoint","wardUsersRelationshipsEndpoint","wardPlantsRelationshipsEndpoint","plantEndpoint","usersEndpoint","getWards","get","createWard","dto","post","updateWard","wardId","put","encodeURIComponent","String","deleteWard","delete","getOperatorsByWardId","getAvailableOperators","assignOperatorToWard","userId","removeOperatorFromWard","getPlantsByWardId","getAvailablePlants","assignPlantToWard","plantId","removePlantFromWard","factory","\u0275fac","providedIn"]},_coverageSchema:"1a1c01bbd47fc00a2c39e90264f33305004495a9",hash:"241345f462d330e1360f8f9f4114fb87b513e11d"};var coverage=global[gcv]||(global[gcv]={});if(!coverage[path]||coverage[path].hash!==hash){coverage[path]=coverageData;}var actualCoverage=coverage[path];{// @ts-ignore +cov_1lpavo0iy1=function(){return actualCoverage;};}return actualCoverage;}cov_1lpavo0iy1();import{b as i,e as a}from"./chunk-2S5V5XEE.js";import{L as s,Q as r}from"./chunk-RYTNMYZW.js";var u=(cov_1lpavo0iy1().s[0]++,(()=>{cov_1lpavo0iy1().f[0]++;class e{http=(cov_1lpavo0iy1().s[1]++,r(i));baseUrl=(cov_1lpavo0iy1().s[2]++,r(a));wardsEndpoint=(cov_1lpavo0iy1().s[3]++,`${this.baseUrl}/wards`);wardUsersRelationshipsEndpoint=(cov_1lpavo0iy1().s[4]++,`${this.baseUrl}/wards-users-relationships`);wardPlantsRelationshipsEndpoint=(cov_1lpavo0iy1().s[5]++,`${this.baseUrl}/wards-plants-relationships`);plantEndpoint=(cov_1lpavo0iy1().s[6]++,`${this.baseUrl}/plant`);usersEndpoint=(cov_1lpavo0iy1().s[7]++,`${this.baseUrl}/users`);getWards(){cov_1lpavo0iy1().f[1]++;cov_1lpavo0iy1().s[8]++;return this.http.get(this.wardsEndpoint);}createWard(t){cov_1lpavo0iy1().f[2]++;cov_1lpavo0iy1().s[9]++;return this.http.post(this.wardsEndpoint,t);}updateWard(t,n){cov_1lpavo0iy1().f[3]++;cov_1lpavo0iy1().s[10]++;return this.http.put(`${this.wardsEndpoint}/${encodeURIComponent(String(t))}`,n);}deleteWard(t){cov_1lpavo0iy1().f[4]++;cov_1lpavo0iy1().s[11]++;return this.http.delete(`${this.wardsEndpoint}/${encodeURIComponent(String(t))}`);}getOperatorsByWardId(t){cov_1lpavo0iy1().f[5]++;cov_1lpavo0iy1().s[12]++;return this.http.get(`${this.wardUsersRelationshipsEndpoint}/${encodeURIComponent(String(t))}`);}getAvailableOperators(){cov_1lpavo0iy1().f[6]++;cov_1lpavo0iy1().s[13]++;return this.http.get(`${this.usersEndpoint}`);}assignOperatorToWard(t,n){cov_1lpavo0iy1().f[7]++;cov_1lpavo0iy1().s[14]++;return this.http.post(this.wardUsersRelationshipsEndpoint,{wardId:t,userId:n.userId});}removeOperatorFromWard(t,n){cov_1lpavo0iy1().f[8]++;cov_1lpavo0iy1().s[15]++;return this.http.delete(`${this.wardUsersRelationshipsEndpoint}/${encodeURIComponent(String(t))}/${encodeURIComponent(String(n))}`);}getPlantsByWardId(t){cov_1lpavo0iy1().f[9]++;cov_1lpavo0iy1().s[16]++;return this.http.get(`${this.wardPlantsRelationshipsEndpoint}/${encodeURIComponent(String(t))}`);}getAvailablePlants(){cov_1lpavo0iy1().f[10]++;cov_1lpavo0iy1().s[17]++;return this.http.get(`${this.plantEndpoint}/all`);}assignPlantToWard(t,n){cov_1lpavo0iy1().f[11]++;cov_1lpavo0iy1().s[18]++;return this.http.post(this.wardPlantsRelationshipsEndpoint,{wardId:t,plantId:n.plantId});}removePlantFromWard(t,n){cov_1lpavo0iy1().f[12]++;cov_1lpavo0iy1().s[19]++;return this.http.delete(`${this.wardPlantsRelationshipsEndpoint}/${encodeURIComponent(String(n))}`);}static ɵfac=(cov_1lpavo0iy1().s[20]++,function(n){cov_1lpavo0iy1().f[13]++;cov_1lpavo0iy1().s[21]++;return new((cov_1lpavo0iy1().b[0][0]++,n)||(cov_1lpavo0iy1().b[0][1]++,e))();});static ɵprov=(cov_1lpavo0iy1().s[22]++,s({token:e,factory:e.ɵfac,providedIn:"root"}));}cov_1lpavo0iy1().s[23]++;return e;})());export{u as a};//# sourceMappingURL=chunk-54EPVJ7F.js.map +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1IiwiY292XzFscGF2bzBpeTEiLCJzIiwiZiIsImUiLCJodHRwIiwiciIsImkiLCJiYXNlVXJsIiwiYSIsIndhcmRzRW5kcG9pbnQiLCJ3YXJkVXNlcnNSZWxhdGlvbnNoaXBzRW5kcG9pbnQiLCJ3YXJkUGxhbnRzUmVsYXRpb25zaGlwc0VuZHBvaW50IiwicGxhbnRFbmRwb2ludCIsInVzZXJzRW5kcG9pbnQiLCJnZXRXYXJkcyIsImdldCIsImNyZWF0ZVdhcmQiLCJ0IiwicG9zdCIsInVwZGF0ZVdhcmQiLCJuIiwicHV0IiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiU3RyaW5nIiwiZGVsZXRlV2FyZCIsImRlbGV0ZSIsImdldE9wZXJhdG9yc0J5V2FyZElkIiwiZ2V0QXZhaWxhYmxlT3BlcmF0b3JzIiwiYXNzaWduT3BlcmF0b3JUb1dhcmQiLCJ3YXJkSWQiLCJ1c2VySWQiLCJyZW1vdmVPcGVyYXRvckZyb21XYXJkIiwiZ2V0UGxhbnRzQnlXYXJkSWQiLCJnZXRBdmFpbGFibGVQbGFudHMiLCJhc3NpZ25QbGFudFRvV2FyZCIsInBsYW50SWQiLCJyZW1vdmVQbGFudEZyb21XYXJkIiwiybVmYWMiLCJiIiwiybVwcm92IiwidG9rZW4iLCJmYWN0b3J5IiwicHJvdmlkZWRJbiJdLCJzb3VyY2VzIjpbInNyYy9hcHAvZmVhdHVyZXMvd2FyZC1tYW5hZ2VtZW50L3NlcnZpY2VzL3dhcmQtYXBpLnNlcnZpY2UudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IEluamVjdGFibGUsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQVBJX0JBU0VfVVJMIH0gZnJvbSAnLi4vLi4vLi4vY29yZS90b2tlbnMvYXBpLWJhc2UtdXJsLnRva2VuJztcbmltcG9ydCB0eXBlIHtcbiAgICBBc3NpZ25QbGFudER0byxcbiAgICBBc3NpZ25PcGVyYXRvckR0byxcbiAgICBDcmVhdGVXYXJkRHRvLFxuICAgIFVwZGF0ZVdhcmREdG8sXG4gICAgV2FyZFN1bW1hcnlEdG8sXG4gICAgV2FyZFVzZXJEdG8sXG4gICAgV2FyZFBsYW50RHRvLFxufSBmcm9tICcuLi9tb2RlbHMvd2FyZC1hcGkuZHRvJztcbmltcG9ydCB0eXBlIHsgV2FyZCB9IGZyb20gJy4uL21vZGVscy93YXJkLm1vZGVsJztcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBXYXJkQXBpU2VydmljZSB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBodHRwID0gaW5qZWN0KEh0dHBDbGllbnQpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgYmFzZVVybDogc3RyaW5nID0gaW5qZWN0KEFQSV9CQVNFX1VSTCk7XG4gICAgcHJpdmF0ZSByZWFkb25seSB3YXJkc0VuZHBvaW50ID0gYCR7dGhpcy5iYXNlVXJsfS93YXJkc2A7XG4gICAgcHJpdmF0ZSByZWFkb25seSB3YXJkVXNlcnNSZWxhdGlvbnNoaXBzRW5kcG9pbnQgPSBgJHt0aGlzLmJhc2VVcmx9L3dhcmRzLXVzZXJzLXJlbGF0aW9uc2hpcHNgO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgd2FyZFBsYW50c1JlbGF0aW9uc2hpcHNFbmRwb2ludCA9IGAke3RoaXMuYmFzZVVybH0vd2FyZHMtcGxhbnRzLXJlbGF0aW9uc2hpcHNgO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcGxhbnRFbmRwb2ludCA9IGAke3RoaXMuYmFzZVVybH0vcGxhbnRgO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgdXNlcnNFbmRwb2ludCA9IGAke3RoaXMuYmFzZVVybH0vdXNlcnNgO1xuXG4gICAgcHVibGljIGdldFdhcmRzKCk6IE9ic2VydmFibGU8V2FyZFN1bW1hcnlEdG9bXT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxXYXJkU3VtbWFyeUR0b1tdPih0aGlzLndhcmRzRW5kcG9pbnQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjcmVhdGVXYXJkKGR0bzogQ3JlYXRlV2FyZER0byk6IE9ic2VydmFibGU8V2FyZD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8V2FyZD4odGhpcy53YXJkc0VuZHBvaW50LCBkdG8pO1xuICAgIH1cblxuICAgIHB1YmxpYyB1cGRhdGVXYXJkKHdhcmRJZDogbnVtYmVyLCBkdG86IFVwZGF0ZVdhcmREdG8pOiBPYnNlcnZhYmxlPFdhcmQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQ8V2FyZD4oYCR7dGhpcy53YXJkc0VuZHBvaW50fS8ke2VuY29kZVVSSUNvbXBvbmVudChTdHJpbmcod2FyZElkKSl9YCwgZHRvKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZGVsZXRlV2FyZCh3YXJkSWQ6IG51bWJlcik6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmRlbGV0ZTx2b2lkPihgJHt0aGlzLndhcmRzRW5kcG9pbnR9LyR7ZW5jb2RlVVJJQ29tcG9uZW50KFN0cmluZyh3YXJkSWQpKX1gKTtcbiAgICB9XG5cblxuXG4gICAgcHVibGljIGdldE9wZXJhdG9yc0J5V2FyZElkKHdhcmRJZDogbnVtYmVyKTogT2JzZXJ2YWJsZTxXYXJkVXNlckR0b1tdPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PFdhcmRVc2VyRHRvW10+KFxuICAgICAgICAgICAgYCR7dGhpcy53YXJkVXNlcnNSZWxhdGlvbnNoaXBzRW5kcG9pbnR9LyR7ZW5jb2RlVVJJQ29tcG9uZW50KFN0cmluZyh3YXJkSWQpKX1gLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRBdmFpbGFibGVPcGVyYXRvcnMoKTogT2JzZXJ2YWJsZTxXYXJkVXNlckR0b1tdPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PFdhcmRVc2VyRHRvW10+KFxuICAgICAgICAgICAgYCR7dGhpcy51c2Vyc0VuZHBvaW50fWAsXG4gICAgICAgICk7XG4gICAgfVxuICAgIHB1YmxpYyBhc3NpZ25PcGVyYXRvclRvV2FyZCh3YXJkSWQ6IG51bWJlciwgZHRvOiBBc3NpZ25PcGVyYXRvckR0byk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8dm9pZD4odGhpcy53YXJkVXNlcnNSZWxhdGlvbnNoaXBzRW5kcG9pbnQsIHtcbiAgICAgICAgICAgIHdhcmRJZCxcbiAgICAgICAgICAgIHVzZXJJZDogZHRvLnVzZXJJZCxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbW92ZU9wZXJhdG9yRnJvbVdhcmQod2FyZElkOiBudW1iZXIsIHVzZXJJZDogbnVtYmVyKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZGVsZXRlPHZvaWQ+KFxuICAgICAgICAgICAgYCR7dGhpcy53YXJkVXNlcnNSZWxhdGlvbnNoaXBzRW5kcG9pbnR9LyR7ZW5jb2RlVVJJQ29tcG9uZW50KFN0cmluZyh3YXJkSWQpKX0vJHtlbmNvZGVVUklDb21wb25lbnQoU3RyaW5nKHVzZXJJZCkpfWAsXG4gICAgICAgICk7XG4gICAgfVxuXG5cbiAgICBwdWJsaWMgZ2V0UGxhbnRzQnlXYXJkSWQod2FyZElkOiBudW1iZXIpOiBPYnNlcnZhYmxlPFdhcmRQbGFudER0b1tdPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PFdhcmRQbGFudER0b1tdPihcbiAgICAgICAgICAgIGAke3RoaXMud2FyZFBsYW50c1JlbGF0aW9uc2hpcHNFbmRwb2ludH0vJHtlbmNvZGVVUklDb21wb25lbnQoU3RyaW5nKHdhcmRJZCkpfWAsXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEF2YWlsYWJsZVBsYW50cygpOiBPYnNlcnZhYmxlPFdhcmRQbGFudER0b1tdPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PFdhcmRQbGFudER0b1tdPihcbiAgICAgICAgICAgIGAke3RoaXMucGxhbnRFbmRwb2ludH0vYWxsYCxcbiAgICAgICAgKTtcbiAgICB9XG5cblxuICAgIHB1YmxpYyBhc3NpZ25QbGFudFRvV2FyZCh3YXJkSWQ6IG51bWJlciwgZHRvOiBBc3NpZ25QbGFudER0byk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8dm9pZD4odGhpcy53YXJkUGxhbnRzUmVsYXRpb25zaGlwc0VuZHBvaW50LCB7XG4gICAgICAgICAgICB3YXJkSWQsXG4gICAgICAgICAgICBwbGFudElkOiBkdG8ucGxhbnRJZCxcbiAgICAgICAgfSk7XG4gICAgfVxuXG5cbiAgICBwdWJsaWMgcmVtb3ZlUGxhbnRGcm9tV2FyZCh3YXJkSWQ6IG51bWJlciwgcGxhbnRJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZGVsZXRlPHZvaWQ+KFxuICAgICAgICAgICAgYCR7dGhpcy53YXJkUGxhbnRzUmVsYXRpb25zaGlwc0VuZHBvaW50fS8ke2VuY29kZVVSSUNvbXBvbmVudChTdHJpbmcocGxhbnRJZCkpfWAsXG4gICAgICAgICk7XG4gICAgfVxufVxuIl0sIm1hcHBpbmdzIjoiO3lMQWdCQSxHQUFhLENBQUFBLENBQUEsRUFBQUMsY0FBQSxHQUFBQyxDQUFBLE9BQWMsS0FBQUQsY0FBQSxHQUFBRSxDQUFBLE1BQXJCLEtBQU8sQ0FBQUMsQ0FBYyxDQUNOQyxJQUFBLEVBQUFKLGNBQUEsR0FBQUMsQ0FBQSxNQUFPSSxDQUFBLENBQU9DLENBQVUsR0FDeEJDLE9BQUEsRUFBQVAsY0FBQSxHQUFBQyxDQUFBLE1BQWtCSSxDQUFBLENBQU9HLENBQVksR0FDckNDLGFBQUEsRUFBQVQsY0FBQSxHQUFBQyxDQUFBLE1BQWdCLEdBQUcsS0FBS00sT0FBTyxVQUMvQkcsOEJBQUEsRUFBQVYsY0FBQSxHQUFBQyxDQUFBLE1BQWlDLEdBQUcsS0FBS00sT0FB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 \ No newline at end of file diff --git a/frontend/dist-instrumented/chunk-54EPVJ7F.js.map b/frontend/dist-instrumented/chunk-54EPVJ7F.js.map new file mode 100644 index 00000000..cc83e569 --- /dev/null +++ b/frontend/dist-instrumented/chunk-54EPVJ7F.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["src/app/features/ward-management/services/ward-api.service.ts"], + "sourcesContent": ["import { HttpClient } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { API_BASE_URL } from '../../../core/tokens/api-base-url.token';\nimport type {\n AssignPlantDto,\n AssignOperatorDto,\n CreateWardDto,\n UpdateWardDto,\n WardSummaryDto,\n WardUserDto,\n WardPlantDto,\n} from '../models/ward-api.dto';\nimport type { Ward } from '../models/ward.model';\n\n@Injectable({ providedIn: 'root' })\nexport class WardApiService {\n private readonly http = inject(HttpClient);\n private readonly baseUrl: string = inject(API_BASE_URL);\n private readonly wardsEndpoint = `${this.baseUrl}/wards`;\n private readonly wardUsersRelationshipsEndpoint = `${this.baseUrl}/wards-users-relationships`;\n private readonly wardPlantsRelationshipsEndpoint = `${this.baseUrl}/wards-plants-relationships`;\n private readonly plantEndpoint = `${this.baseUrl}/plant`;\n private readonly usersEndpoint = `${this.baseUrl}/users`;\n\n public getWards(): Observable {\n return this.http.get(this.wardsEndpoint);\n }\n\n public createWard(dto: CreateWardDto): Observable {\n return this.http.post(this.wardsEndpoint, dto);\n }\n\n public updateWard(wardId: number, dto: UpdateWardDto): Observable {\n return this.http.put(`${this.wardsEndpoint}/${encodeURIComponent(String(wardId))}`, dto);\n }\n\n public deleteWard(wardId: number): Observable {\n return this.http.delete(`${this.wardsEndpoint}/${encodeURIComponent(String(wardId))}`);\n }\n\n\n\n public getOperatorsByWardId(wardId: number): Observable {\n return this.http.get(\n `${this.wardUsersRelationshipsEndpoint}/${encodeURIComponent(String(wardId))}`,\n );\n }\n\n public getAvailableOperators(): Observable {\n return this.http.get(\n `${this.usersEndpoint}`,\n );\n }\n public assignOperatorToWard(wardId: number, dto: AssignOperatorDto): Observable {\n return this.http.post(this.wardUsersRelationshipsEndpoint, {\n wardId,\n userId: dto.userId,\n });\n }\n\n public removeOperatorFromWard(wardId: number, userId: number): Observable {\n return this.http.delete(\n `${this.wardUsersRelationshipsEndpoint}/${encodeURIComponent(String(wardId))}/${encodeURIComponent(String(userId))}`,\n );\n }\n\n\n public getPlantsByWardId(wardId: number): Observable {\n return this.http.get(\n `${this.wardPlantsRelationshipsEndpoint}/${encodeURIComponent(String(wardId))}`,\n );\n }\n\n public getAvailablePlants(): Observable {\n return this.http.get(\n `${this.plantEndpoint}/all`,\n );\n }\n\n\n public assignPlantToWard(wardId: number, dto: AssignPlantDto): Observable {\n return this.http.post(this.wardPlantsRelationshipsEndpoint, {\n wardId,\n plantId: dto.plantId,\n });\n }\n\n\n public removePlantFromWard(wardId: number, plantId: string): Observable {\n return this.http.delete(\n `${this.wardPlantsRelationshipsEndpoint}/${encodeURIComponent(String(plantId))}`,\n );\n }\n}\n"], + "mappings": "8FAgBA,IAAaA,GAAc,IAAA,CAArB,MAAOA,CAAc,CACNC,KAAOC,EAAOC,CAAU,EACxBC,QAAkBF,EAAOG,CAAY,EACrCC,cAAgB,GAAG,KAAKF,OAAO,SAC/BG,+BAAiC,GAAG,KAAKH,OAAO,6BAChDI,gCAAkC,GAAG,KAAKJ,OAAO,8BACjDK,cAAgB,GAAG,KAAKL,OAAO,SAC/BM,cAAgB,GAAG,KAAKN,OAAO,SAEzCO,UAAQ,CACX,OAAO,KAAKV,KAAKW,IAAsB,KAAKN,aAAa,CAC7D,CAEOO,WAAWC,EAAkB,CAChC,OAAO,KAAKb,KAAKc,KAAW,KAAKT,cAAeQ,CAAG,CACvD,CAEOE,WAAWC,EAAgBH,EAAkB,CAChD,OAAO,KAAKb,KAAKiB,IAAU,GAAG,KAAKZ,aAAa,IAAIa,mBAAmBC,OAAOH,CAAM,CAAC,CAAC,GAAIH,CAAG,CACjG,CAEOO,WAAWJ,EAAc,CAC5B,OAAO,KAAKhB,KAAKqB,OAAa,GAAG,KAAKhB,aAAa,IAAIa,mBAAmBC,OAAOH,CAAM,CAAC,CAAC,EAAE,CAC/F,CAIOM,qBAAqBN,EAAc,CACtC,OAAO,KAAKhB,KAAKW,IACb,GAAG,KAAKL,8BAA8B,IAAIY,mBAAmBC,OAAOH,CAAM,CAAC,CAAC,EAAE,CAEtF,CAEOO,uBAAqB,CACxB,OAAO,KAAKvB,KAAKW,IACb,GAAG,KAAKF,aAAa,EAAE,CAE/B,CACOe,qBAAqBR,EAAgBH,EAAsB,CAC9D,OAAO,KAAKb,KAAKc,KAAW,KAAKR,+BAAgC,CAC7DU,OAAAA,EACAS,OAAQZ,EAAIY,OACf,CACL,CAEOC,uBAAuBV,EAAgBS,EAAc,CACxD,OAAO,KAAKzB,KAAKqB,OACb,GAAG,KAAKf,8BAA8B,IAAIY,mBAAmBC,OAAOH,CAAM,CAAC,CAAC,IAAIE,mBAAmBC,OAAOM,CAAM,CAAC,CAAC,EAAE,CAE5H,CAGOE,kBAAkBX,EAAc,CACnC,OAAO,KAAKhB,KAAKW,IACb,GAAG,KAAKJ,+BAA+B,IAAIW,mBAAmBC,OAAOH,CAAM,CAAC,CAAC,EAAE,CAEvF,CAEOY,oBAAkB,CACrB,OAAO,KAAK5B,KAAKW,IACb,GAAG,KAAKH,aAAa,MAAM,CAEnC,CAGOqB,kBAAkBb,EAAgBH,EAAmB,CACxD,OAAO,KAAKb,KAAKc,KAAW,KAAKP,gCAAiC,CAC9DS,OAAAA,EACAc,QAASjB,EAAIiB,QAChB,CACL,CAGOC,oBAAoBf,EAAgBc,EAAe,CACtD,OAAO,KAAK9B,KAAKqB,OACb,GAAG,KAAKd,+BAA+B,IAAIW,mBAAmBC,OAAOW,CAAO,CAAC,CAAC,EAAE,CAExF,4CA7ES/B,EAAc,6BAAdA,EAAciC,QAAdjC,EAAckC,UAAAC,WADD,MAAM,CAAA,SACnBnC,CAAc,GAAA", + "names": ["WardApiService", "http", "inject", "HttpClient", "baseUrl", "API_BASE_URL", "wardsEndpoint", "wardUsersRelationshipsEndpoint", "wardPlantsRelationshipsEndpoint", "plantEndpoint", "usersEndpoint", "getWards", "get", "createWard", "dto", "post", "updateWard", "wardId", "put", "encodeURIComponent", "String", "deleteWard", "delete", "getOperatorsByWardId", "getAvailableOperators", "assignOperatorToWard", "userId", "removeOperatorFromWard", "getPlantsByWardId", "getAvailablePlants", "assignPlantToWard", "plantId", "removePlantFromWard", "factory", "\u0275fac", "providedIn"] +} diff --git a/frontend/dist-instrumented/chunk-55FHIJXG.js b/frontend/dist-instrumented/chunk-55FHIJXG.js new file mode 100644 index 00000000..406383dd --- /dev/null +++ b/frontend/dist-instrumented/chunk-55FHIJXG.js @@ -0,0 +1,3 @@ +function cov_1tbdo9vqip(){var path="/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-55FHIJXG.js";var hash="7d1334c5f09ea5cc78cf8bb110dff2a827a2688b";var global=new Function("return this")();var gcv="__coverage__";var coverageData={path:"/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-55FHIJXG.js",statementMap:{"0":{start:{line:1,column:34},end:{line:1,column:272}},"1":{start:{line:1,column:67},end:{line:1,column:122}},"2":{start:{line:1,column:105},end:{line:1,column:121}},"3":{start:{line:1,column:163},end:{line:1,column:224}},"4":{start:{line:1,column:201},end:{line:1,column:223}}},fnMap:{"0":{name:"(anonymous_0)",decl:{start:{line:1,column:63},end:{line:1,column:64}},loc:{start:{line:1,column:67},end:{line:1,column:122}},line:1},"1":{name:"(anonymous_1)",decl:{start:{line:1,column:102},end:{line:1,column:103}},loc:{start:{line:1,column:105},end:{line:1,column:121}},line:1},"2":{name:"(anonymous_2)",decl:{start:{line:1,column:159},end:{line:1,column:160}},loc:{start:{line:1,column:163},end:{line:1,column:224}},line:1},"3":{name:"(anonymous_3)",decl:{start:{line:1,column:198},end:{line:1,column:199}},loc:{start:{line:1,column:201},end:{line:1,column:223}},line:1}},branchMap:{},s:{"0":0,"1":0,"2":0,"3":0,"4":0},f:{"0":0,"1":0,"2":0,"3":0},b:{},inputSourceMap:{version:3,sources:["src/app/features/user-auth/user-auth.routes.ts"],sourcesContent:["import { Routes } from '@angular/router';\n\nexport const USER_AUTH_ROUTES: Routes = [\n {\n path: 'login',\n loadComponent: () => import('./components/login/login.component').then((m) => m.LoginComponent)\n },\n {\n path: 'first-access',\n loadComponent: () => import('./components/first-access/first-access.component').then((m) => m.FirstAccessComponent)\n },\n {\n path: '',\n pathMatch: 'full',\n redirectTo: 'login'\n }\n];\n"],mappings:"4BAEO,IAAMA,EAA2B,CACtC,CACEC,KAAM,QACNC,cAAeA,IAAM,OAAO,qBAAoC,EAAEC,KAAMC,GAAMA,EAAEC,cAAc,GAEhG,CACEJ,KAAM,eACNC,cAAeA,IAAM,OAAO,qBAAkD,EAAEC,KAAMC,GAAMA,EAAEE,oBAAoB,GAEpH,CACEL,KAAM,GACNM,UAAW,OACXC,WAAY,QACb",names:["USER_AUTH_ROUTES","path","loadComponent","then","m","LoginComponent","FirstAccessComponent","pathMatch","redirectTo"]},_coverageSchema:"1a1c01bbd47fc00a2c39e90264f33305004495a9",hash:"7d1334c5f09ea5cc78cf8bb110dff2a827a2688b"};var coverage=global[gcv]||(global[gcv]={});if(!coverage[path]||coverage[path].hash!==hash){coverage[path]=coverageData;}var actualCoverage=coverage[path];{// @ts-ignore +cov_1tbdo9vqip=function(){return actualCoverage;};}return actualCoverage;}cov_1tbdo9vqip();import"./chunk-VCZGUBMY.js";var t=(cov_1tbdo9vqip().s[0]++,[{path:"login",loadComponent:()=>{cov_1tbdo9vqip().f[0]++;cov_1tbdo9vqip().s[1]++;return import("./chunk-VKIXOKIV.js").then(o=>{cov_1tbdo9vqip().f[1]++;cov_1tbdo9vqip().s[2]++;return o.LoginComponent;});}},{path:"first-access",loadComponent:()=>{cov_1tbdo9vqip().f[2]++;cov_1tbdo9vqip().s[3]++;return import("./chunk-YUDTQWM3.js").then(o=>{cov_1tbdo9vqip().f[3]++;cov_1tbdo9vqip().s[4]++;return o.FirstAccessComponent;});}},{path:"",pathMatch:"full",redirectTo:"login"}]);export{t as USER_AUTH_ROUTES};//# sourceMappingURL=chunk-55FHIJXG.js.map +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ0IiwiY292XzF0YmRvOXZxaXAiLCJzIiwicGF0aCIsImxvYWRDb21wb25lbnQiLCJmIiwidGhlbiIsIm8iLCJMb2dpbkNvbXBvbmVudCIsIkZpcnN0QWNjZXNzQ29tcG9uZW50IiwicGF0aE1hdGNoIiwicmVkaXJlY3RUbyIsIlVTRVJfQVVUSF9ST1VURVMiXSwic291cmNlcyI6WyJzcmMvYXBwL2ZlYXR1cmVzL3VzZXItYXV0aC91c2VyLWF1dGgucm91dGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJvdXRlcyB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbmV4cG9ydCBjb25zdCBVU0VSX0FVVEhfUk9VVEVTOiBSb3V0ZXMgPSBbXG4gIHtcbiAgICBwYXRoOiAnbG9naW4nLFxuICAgIGxvYWRDb21wb25lbnQ6ICgpID0+IGltcG9ydCgnLi9jb21wb25lbnRzL2xvZ2luL2xvZ2luLmNvbXBvbmVudCcpLnRoZW4oKG0pID0+IG0uTG9naW5Db21wb25lbnQpXG4gIH0sXG4gIHtcbiAgICBwYXRoOiAnZmlyc3QtYWNjZXNzJyxcbiAgICBsb2FkQ29tcG9uZW50OiAoKSA9PiBpbXBvcnQoJy4vY29tcG9uZW50cy9maXJzdC1hY2Nlc3MvZmlyc3QtYWNjZXNzLmNvbXBvbmVudCcpLnRoZW4oKG0pID0+IG0uRmlyc3RBY2Nlc3NDb21wb25lbnQpXG4gIH0sXG4gIHtcbiAgICBwYXRoOiAnJyxcbiAgICBwYXRoTWF0Y2g6ICdmdWxsJyxcbiAgICByZWRpcmVjdFRvOiAnbG9naW4nXG4gIH1cbl07XG4iXSwibWFwcGluZ3MiOiI7dUhBRU8sR0FBTSxDQUFBQSxDQUFBLEVBQUFDLGNBQUEsR0FBQUMsQ0FBQSxNQUEyQixDQUN0QyxDQUNFQyxJQUFBLENBQU0sUUFDTkMsYUFBQSxDQUFlQSxDQUFBLEdBQU0sQ0FBQUgsY0FBQSxHQUFBSSxDQUFBLEtBQUFKLENBQUEsaUJBQUFDLENBQUEsb0JBQU8scUJBQW9DLEVBQUVJLElBQUEsQ0FBTUMsQ0FBQSxFQUFNLENBQUFOLGNBQUEsR0FBQUksQ0FBQSxLQUFBSixDQUFBLGlCQUFBQyxDQUFBLGFBQUFLLENBQUEsQ0FBRUMsY0FBYyxDQUFkLENBQWMsS0FFaEcsQ0FDRUwsSUFBQSxDQUFNLGVBQ05DLGFBQUEsQ0FBZUEsQ0FBQSxHQUFNLENBQUFILGNBQUEsR0FBQUksQ0FBQSxLQUFBSixDQUFBLGlCQUFBQyxDQUFBLG9CQUFPLHFCQUFrRCxFQUFFSSxJQUFBLENBQU1DLENBQUEsRUFBTSxDQUFBTixjQUFBLEdBQUFJLENBQUEsS0FBQUosQ0FBQSxpQkFBQUMsQ0FBQSxhQUFBSyxDQUFBLENBQUVFLG9CQUFvQixDQUFwQixDQUFvQixLQUVwSCxDQUNFTixJQUFBLENBQU0sR0FDTk8sU0FBQSxDQUFXLE9BQ1hDLFVBQUEsQ0FBWSxRQUNiLFVBQUFYLENBQUEsSUFBQVksZ0JBQUEsRSIsImlnbm9yZUxpc3QiOltdfQ== \ No newline at end of file diff --git a/frontend/dist-instrumented/chunk-55FHIJXG.js.map b/frontend/dist-instrumented/chunk-55FHIJXG.js.map new file mode 100644 index 00000000..f72a3e4c --- /dev/null +++ b/frontend/dist-instrumented/chunk-55FHIJXG.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["src/app/features/user-auth/user-auth.routes.ts"], + "sourcesContent": ["import { Routes } from '@angular/router';\n\nexport const USER_AUTH_ROUTES: Routes = [\n {\n path: 'login',\n loadComponent: () => import('./components/login/login.component').then((m) => m.LoginComponent)\n },\n {\n path: 'first-access',\n loadComponent: () => import('./components/first-access/first-access.component').then((m) => m.FirstAccessComponent)\n },\n {\n path: '',\n pathMatch: 'full',\n redirectTo: 'login'\n }\n];\n"], + "mappings": "4BAEO,IAAMA,EAA2B,CACtC,CACEC,KAAM,QACNC,cAAeA,IAAM,OAAO,qBAAoC,EAAEC,KAAMC,GAAMA,EAAEC,cAAc,GAEhG,CACEJ,KAAM,eACNC,cAAeA,IAAM,OAAO,qBAAkD,EAAEC,KAAMC,GAAMA,EAAEE,oBAAoB,GAEpH,CACEL,KAAM,GACNM,UAAW,OACXC,WAAY,QACb", + "names": ["USER_AUTH_ROUTES", "path", "loadComponent", "then", "m", "LoginComponent", "FirstAccessComponent", "pathMatch", "redirectTo"] +} diff --git a/frontend/dist-instrumented/chunk-5JXBE777.js b/frontend/dist-instrumented/chunk-5JXBE777.js new file mode 100644 index 00000000..4a0ba309 --- /dev/null +++ b/frontend/dist-instrumented/chunk-5JXBE777.js @@ -0,0 +1,3 @@ +function cov_1uef4ngta3(){var path="/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-5JXBE777.js";var hash="3110a5dae3e67bfe9e6d9e8231fc2b0af29749f1";var global=new Function("return this")();var gcv="__coverage__";var coverageData={path:"/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-5JXBE777.js",statementMap:{"0":{start:{line:1,column:34},end:{line:1,column:123}},"1":{start:{line:1,column:62},end:{line:1,column:121}},"2":{start:{line:1,column:100},end:{line:1,column:120}}},fnMap:{"0":{name:"(anonymous_0)",decl:{start:{line:1,column:58},end:{line:1,column:59}},loc:{start:{line:1,column:62},end:{line:1,column:121}},line:1},"1":{name:"(anonymous_1)",decl:{start:{line:1,column:97},end:{line:1,column:98}},loc:{start:{line:1,column:100},end:{line:1,column:120}},line:1}},branchMap:{},s:{"0":0,"1":0,"2":0},f:{"0":0,"1":0},b:{},inputSourceMap:{version:3,sources:["src/app/features/analytics/analytics.routes.ts"],sourcesContent:["import { Routes } from '@angular/router';\nimport { authGuard } from '../../core/guards/auth.guard';\n\nexport const ANALYTICS_ROUTES: Routes = [\n {\n path: '',\n //canActivate: [authGuard],\n loadComponent: () => import('./analytics.component').then((m) => m.AnalyticsComponent)\n }\n];\n"],mappings:"4BAGO,IAAMA,EAA2B,CACtC,CACEC,KAAM,GAENC,cAAeA,IAAM,OAAO,qBAAuB,EAAEC,KAAMC,GAAMA,EAAEC,kBAAkB,EACtF",names:["ANALYTICS_ROUTES","path","loadComponent","then","m","AnalyticsComponent"]},_coverageSchema:"1a1c01bbd47fc00a2c39e90264f33305004495a9",hash:"3110a5dae3e67bfe9e6d9e8231fc2b0af29749f1"};var coverage=global[gcv]||(global[gcv]={});if(!coverage[path]||coverage[path].hash!==hash){coverage[path]=coverageData;}var actualCoverage=coverage[path];{// @ts-ignore +cov_1uef4ngta3=function(){return actualCoverage;};}return actualCoverage;}cov_1uef4ngta3();import"./chunk-VCZGUBMY.js";var t=(cov_1uef4ngta3().s[0]++,[{path:"",loadComponent:()=>{cov_1uef4ngta3().f[0]++;cov_1uef4ngta3().s[1]++;return import("./chunk-IGULPMRL.js").then(o=>{cov_1uef4ngta3().f[1]++;cov_1uef4ngta3().s[2]++;return o.AnalyticsComponent;});}}]);export{t as ANALYTICS_ROUTES};//# sourceMappingURL=chunk-5JXBE777.js.map +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ0IiwiY292XzF1ZWY0bmd0YTMiLCJzIiwicGF0aCIsImxvYWRDb21wb25lbnQiLCJmIiwidGhlbiIsIm8iLCJBbmFseXRpY3NDb21wb25lbnQiLCJBTkFMWVRJQ1NfUk9VVEVTIl0sInNvdXJjZXMiOlsic3JjL2FwcC9mZWF0dXJlcy9hbmFseXRpY3MvYW5hbHl0aWNzLnJvdXRlcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSb3V0ZXMgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgYXV0aEd1YXJkIH0gZnJvbSAnLi4vLi4vY29yZS9ndWFyZHMvYXV0aC5ndWFyZCc7XG5cbmV4cG9ydCBjb25zdCBBTkFMWVRJQ1NfUk9VVEVTOiBSb3V0ZXMgPSBbXG4gIHtcbiAgICBwYXRoOiAnJyxcbiAgICAvL2NhbkFjdGl2YXRlOiBbYXV0aEd1YXJkXSxcbiAgICBsb2FkQ29tcG9uZW50OiAoKSA9PiBpbXBvcnQoJy4vYW5hbHl0aWNzLmNvbXBvbmVudCcpLnRoZW4oKG0pID0+IG0uQW5hbHl0aWNzQ29tcG9uZW50KVxuICB9XG5dO1xuIl0sIm1hcHBpbmdzIjoiO3VIQUdPLEdBQU0sQ0FBQUEsQ0FBQSxFQUFBQyxjQUFBLEdBQUFDLENBQUEsTUFBMkIsQ0FDdEMsQ0FDRUMsSUFBQSxDQUFNLEdBRU5DLGFBQUEsQ0FBZUEsQ0FBQSxHQUFNLENBQUFILGNBQUEsR0FBQUksQ0FBQSxLQUFBSixDQUFBLGlCQUFBQyxDQUFBLG9CQUFPLHFCQUF1QixFQUFFSSxJQUFBLENBQU1DLENBQUEsRUFBTSxDQUFBTixjQUFBLEdBQUFJLENBQUEsS0FBQUosQ0FBQSxpQkFBQUMsQ0FBQSxhQUFBSyxDQUFBLENBQUVDLGtCQUFrQixDQUFsQixDQUFrQixJQUN0RixVQUFBUixDQUFBLElBQUFTLGdCQUFBLEUiLCJpZ25vcmVMaXN0IjpbXX0= \ No newline at end of file diff --git a/frontend/dist-instrumented/chunk-5JXBE777.js.map b/frontend/dist-instrumented/chunk-5JXBE777.js.map new file mode 100644 index 00000000..dff1c247 --- /dev/null +++ b/frontend/dist-instrumented/chunk-5JXBE777.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["src/app/features/analytics/analytics.routes.ts"], + "sourcesContent": ["import { Routes } from '@angular/router';\nimport { authGuard } from '../../core/guards/auth.guard';\n\nexport const ANALYTICS_ROUTES: Routes = [\n {\n path: '',\n //canActivate: [authGuard],\n loadComponent: () => import('./analytics.component').then((m) => m.AnalyticsComponent)\n }\n];\n"], + "mappings": "4BAGO,IAAMA,EAA2B,CACtC,CACEC,KAAM,GAENC,cAAeA,IAAM,OAAO,qBAAuB,EAAEC,KAAMC,GAAMA,EAAEC,kBAAkB,EACtF", + "names": ["ANALYTICS_ROUTES", "path", "loadComponent", "then", "m", "AnalyticsComponent"] +} diff --git a/frontend/dist-instrumented/chunk-646IGWEI.js b/frontend/dist-instrumented/chunk-646IGWEI.js new file mode 100644 index 00000000..39d86548 --- /dev/null +++ b/frontend/dist-instrumented/chunk-646IGWEI.js @@ -0,0 +1,3 @@ +function cov_13unqupp6k(){var path="/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-646IGWEI.js";var hash="d8b649af210859944b30fd20c62e6c462a11fec9";var global=new Function("return this")();var gcv="__coverage__";var coverageData={path:"/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-646IGWEI.js",statementMap:{"0":{start:{line:1,column:214},end:{line:1,column:432}},"1":{start:{line:1,column:258},end:{line:1,column:318}},"2":{start:{line:1,column:296},end:{line:1,column:317}},"3":{start:{line:1,column:370},end:{line:1,column:430}},"4":{start:{line:1,column:408},end:{line:1,column:429}}},fnMap:{"0":{name:"(anonymous_0)",decl:{start:{line:1,column:254},end:{line:1,column:255}},loc:{start:{line:1,column:258},end:{line:1,column:318}},line:1},"1":{name:"(anonymous_1)",decl:{start:{line:1,column:293},end:{line:1,column:294}},loc:{start:{line:1,column:296},end:{line:1,column:317}},line:1},"2":{name:"(anonymous_2)",decl:{start:{line:1,column:366},end:{line:1,column:367}},loc:{start:{line:1,column:370},end:{line:1,column:430}},line:1},"3":{name:"(anonymous_3)",decl:{start:{line:1,column:405},end:{line:1,column:406}},loc:{start:{line:1,column:408},end:{line:1,column:429}},line:1}},branchMap:{},s:{"0":0,"1":0,"2":0,"3":0,"4":0},f:{"0":0,"1":0,"2":0,"3":0},b:{},inputSourceMap:{version:3,sources:["src/app/features/device-interaction/device-interaction.routes.ts"],sourcesContent:["import { Routes } from '@angular/router';\nimport { authGuard } from '../../core/guards/auth.guard';\n\nexport const DEVICE_INTERACTION_ROUTES: Routes = [\n {\n path: '',\n canActivate: [authGuard],\n loadComponent: () => import('./components/room-detail/room-detail.component').then((m) => m.RoomDetailComponent)\n },\n {\n path: ':roomId',\n canActivate: [authGuard],\n loadComponent: () => import('./components/room-detail/room-detail.component').then((m) => m.RoomDetailComponent)\n }\n];\n"],mappings:"gNAGO,IAAMA,EAAoC,CAC/C,CACEC,KAAM,GACNC,YAAa,CAACC,CAAS,EACvBC,cAAeA,IAAM,OAAO,qBAAgD,EAAEC,KAAMC,GAAMA,EAAEC,mBAAmB,GAEjH,CACEN,KAAM,UACNC,YAAa,CAACC,CAAS,EACvBC,cAAeA,IAAM,OAAO,qBAAgD,EAAEC,KAAMC,GAAMA,EAAEC,mBAAmB,EAChH",names:["DEVICE_INTERACTION_ROUTES","path","canActivate","authGuard","loadComponent","then","m","RoomDetailComponent"]},_coverageSchema:"1a1c01bbd47fc00a2c39e90264f33305004495a9",hash:"d8b649af210859944b30fd20c62e6c462a11fec9"};var coverage=global[gcv]||(global[gcv]={});if(!coverage[path]||coverage[path].hash!==hash){coverage[path]=coverageData;}var actualCoverage=coverage[path];{// @ts-ignore +cov_13unqupp6k=function(){return actualCoverage;};}return actualCoverage;}cov_13unqupp6k();import{a as t}from"./chunk-K2WBT5ZC.js";import"./chunk-FYGTVJAL.js";import"./chunk-65RKWSY3.js";import"./chunk-2S5V5XEE.js";import"./chunk-F6OGAIBI.js";import"./chunk-RYTNMYZW.js";import"./chunk-VCZGUBMY.js";var a=(cov_13unqupp6k().s[0]++,[{path:"",canActivate:[t],loadComponent:()=>{cov_13unqupp6k().f[0]++;cov_13unqupp6k().s[1]++;return import("./chunk-OBGIBPUX.js").then(o=>{cov_13unqupp6k().f[1]++;cov_13unqupp6k().s[2]++;return o.RoomDetailComponent;});}},{path:":roomId",canActivate:[t],loadComponent:()=>{cov_13unqupp6k().f[2]++;cov_13unqupp6k().s[3]++;return import("./chunk-OBGIBPUX.js").then(o=>{cov_13unqupp6k().f[3]++;cov_13unqupp6k().s[4]++;return o.RoomDetailComponent;});}}]);export{a as DEVICE_INTERACTION_ROUTES};//# sourceMappingURL=chunk-646IGWEI.js.map +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJhIiwiY292XzEzdW5xdXBwNmsiLCJzIiwicGF0aCIsImNhbkFjdGl2YXRlIiwidCIsImxvYWRDb21wb25lbnQiLCJmIiwidGhlbiIsIm8iLCJSb29tRGV0YWlsQ29tcG9uZW50IiwiREVWSUNFX0lOVEVSQUNUSU9OX1JPVVRFUyJdLCJzb3VyY2VzIjpbInNyYy9hcHAvZmVhdHVyZXMvZGV2aWNlLWludGVyYWN0aW9uL2RldmljZS1pbnRlcmFjdGlvbi5yb3V0ZXMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUm91dGVzIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IGF1dGhHdWFyZCB9IGZyb20gJy4uLy4uL2NvcmUvZ3VhcmRzL2F1dGguZ3VhcmQnO1xuXG5leHBvcnQgY29uc3QgREVWSUNFX0lOVEVSQUNUSU9OX1JPVVRFUzogUm91dGVzID0gW1xuICB7XG4gICAgcGF0aDogJycsXG4gICAgY2FuQWN0aXZhdGU6IFthdXRoR3VhcmRdLFxuICAgIGxvYWRDb21wb25lbnQ6ICgpID0+IGltcG9ydCgnLi9jb21wb25lbnRzL3Jvb20tZGV0YWlsL3Jvb20tZGV0YWlsLmNvbXBvbmVudCcpLnRoZW4oKG0pID0+IG0uUm9vbURldGFpbENvbXBvbmVudClcbiAgfSxcbiAge1xuICAgIHBhdGg6ICc6cm9vbUlkJyxcbiAgICBjYW5BY3RpdmF0ZTogW2F1dGhHdWFyZF0sXG4gICAgbG9hZENvbXBvbmVudDogKCkgPT4gaW1wb3J0KCcuL2NvbXBvbmVudHMvcm9vbS1kZXRhaWwvcm9vbS1kZXRhaWwuY29tcG9uZW50JykudGhlbigobSkgPT4gbS5Sb29tRGV0YWlsQ29tcG9uZW50KVxuICB9XG5dO1xuIl0sIm1hcHBpbmdzIjoiOzJTQUdPLEdBQU0sQ0FBQUEsQ0FBQSxFQUFBQyxjQUFBLEdBQUFDLENBQUEsTUFBb0MsQ0FDL0MsQ0FDRUMsSUFBQSxDQUFNLEdBQ05DLFdBQUEsQ0FBYSxDQUFDQyxDQUFTLEVBQ3ZCQyxhQUFBLENBQWVBLENBQUEsR0FBTSxDQUFBTCxjQUFBLEdBQUFNLENBQUEsS0FBQU4sQ0FBQSxpQkFBQUMsQ0FBQSxvQkFBTyxxQkFBZ0QsRUFBRU0sSUFBQSxDQUFNQyxDQUFBLEVBQU0sQ0FBQVIsY0FBQSxHQUFBTSxDQUFBLEtBQUFOLENBQUEsaUJBQUFDLENBQUEsYUFBQU8sQ0FBQSxDQUFFQyxtQkFBbUIsQ0FBbkIsQ0FBbUIsS0FFakgsQ0FDRVAsSUFBQSxDQUFNLFVBQ05DLFdBQUEsQ0FBYSxDQUFDQyxDQUFTLEVBQ3ZCQyxhQUFBLENBQWVBLENBQUEsR0FBTSxDQUFBTCxjQUFBLEdBQUFNLENBQUEsS0FBQU4sQ0FBQSxpQkFBQUMsQ0FBQSxvQkFBTyxxQkFBZ0QsRUFBRU0sSUFBQSxDQUFNQyxDQUFBLEVBQU0sQ0FBQVIsY0FBQSxHQUFBTSxDQUFBLEtBQUFOLENBQUEsaUJBQUFDLENBQUEsYUFBQU8sQ0FBQSxDQUFFQyxtQkFBbUIsQ0FBbkIsQ0FBbUIsSUFDaEgsVUFBQVYsQ0FBQSxJQUFBVyx5QkFBQSxFIiwiaWdub3JlTGlzdCI6W119 \ No newline at end of file diff --git a/frontend/dist-instrumented/chunk-646IGWEI.js.map b/frontend/dist-instrumented/chunk-646IGWEI.js.map new file mode 100644 index 00000000..2b8f0195 --- /dev/null +++ b/frontend/dist-instrumented/chunk-646IGWEI.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["src/app/features/device-interaction/device-interaction.routes.ts"], + "sourcesContent": ["import { Routes } from '@angular/router';\nimport { authGuard } from '../../core/guards/auth.guard';\n\nexport const DEVICE_INTERACTION_ROUTES: Routes = [\n {\n path: '',\n canActivate: [authGuard],\n loadComponent: () => import('./components/room-detail/room-detail.component').then((m) => m.RoomDetailComponent)\n },\n {\n path: ':roomId',\n canActivate: [authGuard],\n loadComponent: () => import('./components/room-detail/room-detail.component').then((m) => m.RoomDetailComponent)\n }\n];\n"], + "mappings": "gNAGO,IAAMA,EAAoC,CAC/C,CACEC,KAAM,GACNC,YAAa,CAACC,CAAS,EACvBC,cAAeA,IAAM,OAAO,qBAAgD,EAAEC,KAAMC,GAAMA,EAAEC,mBAAmB,GAEjH,CACEN,KAAM,UACNC,YAAa,CAACC,CAAS,EACvBC,cAAeA,IAAM,OAAO,qBAAgD,EAAEC,KAAMC,GAAMA,EAAEC,mBAAmB,EAChH", + "names": ["DEVICE_INTERACTION_ROUTES", "path", "canActivate", "authGuard", "loadComponent", "then", "m", "RoomDetailComponent"] +} diff --git a/frontend/dist-instrumented/chunk-65RKWSY3.js b/frontend/dist-instrumented/chunk-65RKWSY3.js new file mode 100644 index 00000000..70db93d5 --- /dev/null +++ b/frontend/dist-instrumented/chunk-65RKWSY3.js @@ -0,0 +1,3 @@ +function cov_29qydjhisr(){var path="/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-65RKWSY3.js";var hash="27488c234f471d0b9fb1b5de842477953ef4651b";var global=new Function("return this")();var gcv="__coverage__";var coverageData={path:"/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-65RKWSY3.js",statementMap:{"0":{start:{line:1,column:149},end:{line:1,column:257}},"1":{start:{line:1,column:162},end:{line:1,column:248}},"2":{start:{line:1,column:264},end:{line:1,column:2570}},"3":{start:{line:1,column:283},end:{line:1,column:287}},"4":{start:{line:1,column:296},end:{line:1,column:300}},"5":{start:{line:1,column:314},end:{line:1,column:325}},"6":{start:{line:1,column:332},end:{line:1,column:336}},"7":{start:{line:1,column:361},end:{line:1,column:365}},"8":{start:{line:1,column:377},end:{line:1,column:564}},"9":{start:{line:1,column:484},end:{line:1,column:531}},"10":{start:{line:1,column:544},end:{line:1,column:562}},"11":{start:{line:1,column:595},end:{line:1,column:797}},"12":{start:{line:1,column:723},end:{line:1,column:770}},"13":{start:{line:1,column:777},end:{line:1,column:795}},"14":{start:{line:1,column:819},end:{line:1,column:1007}},"15":{start:{line:1,column:907},end:{line:1,column:954}},"16":{start:{line:1,column:967},end:{line:1,column:985}},"17":{start:{line:1,column:992},end:{line:1,column:1005}},"18":{start:{line:1,column:1036},end:{line:1,column:1236}},"19":{start:{line:1,column:1141},end:{line:1,column:1143}},"20":{start:{line:1,column:1151},end:{line:1,column:1156}},"21":{start:{line:1,column:1165},end:{line:1,column:1198}},"22":{start:{line:1,column:1257},end:{line:1,column:1377}},"23":{start:{line:1,column:1345},end:{line:1,column:1354}},"24":{start:{line:1,column:1362},end:{line:1,column:1375}},"25":{start:{line:1,column:1387},end:{line:1,column:1431}},"26":{start:{line:1,column:1443},end:{line:1,column:1460}},"27":{start:{line:1,column:1479},end:{line:1,column:1518}},"28":{start:{line:1,column:1529},end:{line:1,column:1576}},"29":{start:{line:1,column:1595},end:{line:1,column:1650}},"30":{start:{line:1,column:1662},end:{line:1,column:1687}},"31":{start:{line:1,column:1702},end:{line:1,column:1752}},"32":{start:{line:1,column:1790},end:{line:1,column:1814}},"33":{start:{line:1,column:1817},end:{line:1,column:1838}},"34":{start:{line:1,column:1841},end:{line:1,column:1871}},"35":{start:{line:1,column:1872},end:{line:1,column:1981}},"36":{start:{line:1,column:1920},end:{line:1,column:1981}},"37":{start:{line:1,column:1981},end:{line:1,column:2064}},"38":{start:{line:1,column:2009},end:{line:1,column:2064}},"39":{start:{line:1,column:2064},end:{line:1,column:2150}},"40":{start:{line:1,column:2177},end:{line:1,column:2189}},"41":{start:{line:1,column:2190},end:{line:1,column:2251}},"42":{start:{line:1,column:2204},end:{line:1,column:2251}},"43":{start:{line:1,column:2257},end:{line:1,column:2301}},"44":{start:{line:1,column:2304},end:{line:1,column:2320}},"45":{start:{line:1,column:2323},end:{line:1,column:2351}},"46":{start:{line:1,column:2352},end:{line:1,column:2372}},"47":{start:{line:1,column:2387},end:{line:1,column:2441}},"48":{start:{line:1,column:2459},end:{line:1,column:2488}},"49":{start:{line:1,column:2471},end:{line:1,column:2487}},"50":{start:{line:1,column:2507},end:{line:1,column:2557}},"51":{start:{line:1,column:2558},end:{line:1,column:2566}}},fnMap:{"0":{name:"(anonymous_0)",decl:{start:{line:1,column:150},end:{line:1,column:151}},loc:{start:{line:1,column:161},end:{line:1,column:249}},line:1},"1":{name:"(anonymous_1)",decl:{start:{line:1,column:265},end:{line:1,column:266}},loc:{start:{line:1,column:269},end:{line:1,column:2567}},line:1},"2":{name:"(anonymous_2)",decl:{start:{line:1,column:366},end:{line:1,column:367}},loc:{start:{line:1,column:376},end:{line:1,column:565}},line:1},"3":{name:"(anonymous_3)",decl:{start:{line:1,column:481},end:{line:1,column:482}},loc:{start:{line:1,column:484},end:{line:1,column:531}},line:1},"4":{name:"(anonymous_4)",decl:{start:{line:1,column:541},end:{line:1,column:542}},loc:{start:{line:1,column:544},end:{line:1,column:562}},line:1},"5":{name:"(anonymous_5)",decl:{start:{line:1,column:565},end:{line:1,column:566}},loc:{start:{line:1,column:594},end:{line:1,column:798}},line:1},"6":{name:"(anonymous_6)",decl:{start:{line:1,column:720},end:{line:1,column:721}},loc:{start:{line:1,column:723},end:{line:1,column:770}},line:1},"7":{name:"(anonymous_7)",decl:{start:{line:1,column:774},end:{line:1,column:775}},loc:{start:{line:1,column:777},end:{line:1,column:795}},line:1},"8":{name:"(anonymous_8)",decl:{start:{line:1,column:798},end:{line:1,column:799}},loc:{start:{line:1,column:818},end:{line:1,column:1008}},line:1},"9":{name:"(anonymous_9)",decl:{start:{line:1,column:904},end:{line:1,column:905}},loc:{start:{line:1,column:907},end:{line:1,column:954}},line:1},"10":{name:"(anonymous_10)",decl:{start:{line:1,column:964},end:{line:1,column:965}},loc:{start:{line:1,column:967},end:{line:1,column:985}},line:1},"11":{name:"(anonymous_11)",decl:{start:{line:1,column:989},end:{line:1,column:990}},loc:{start:{line:1,column:992},end:{line:1,column:1005}},line:1},"12":{name:"(anonymous_12)",decl:{start:{line:1,column:1008},end:{line:1,column:1009}},loc:{start:{line:1,column:1035},end:{line:1,column:1237}},line:1},"13":{name:"(anonymous_13)",decl:{start:{line:1,column:1137},end:{line:1,column:1138}},loc:{start:{line:1,column:1141},end:{line:1,column:1143}},line:1},"14":{name:"(anonymous_14)",decl:{start:{line:1,column:1147},end:{line:1,column:1148}},loc:{start:{line:1,column:1151},end:{line:1,column:1156}},line:1},"15":{name:"(anonymous_15)",decl:{start:{line:1,column:1160},end:{line:1,column:1161}},loc:{start:{line:1,column:1164},end:{line:1,column:1199}},line:1},"16":{name:"(anonymous_16)",decl:{start:{line:1,column:1237},end:{line:1,column:1238}},loc:{start:{line:1,column:1256},end:{line:1,column:1378}},line:1},"17":{name:"(anonymous_17)",decl:{start:{line:1,column:1341},end:{line:1,column:1342}},loc:{start:{line:1,column:1345},end:{line:1,column:1354}},line:1},"18":{name:"(anonymous_18)",decl:{start:{line:1,column:1358},end:{line:1,column:1359}},loc:{start:{line:1,column:1362},end:{line:1,column:1375}},line:1},"19":{name:"(anonymous_19)",decl:{start:{line:1,column:1378},end:{line:1,column:1379}},loc:{start:{line:1,column:1386},end:{line:1,column:1432}},line:1},"20":{name:"(anonymous_20)",decl:{start:{line:1,column:1432},end:{line:1,column:1433}},loc:{start:{line:1,column:1442},end:{line:1,column:1461}},line:1},"21":{name:"(anonymous_21)",decl:{start:{line:1,column:1461},end:{line:1,column:1462}},loc:{start:{line:1,column:1478},end:{line:1,column:1519}},line:1},"22":{name:"(anonymous_22)",decl:{start:{line:1,column:1519},end:{line:1,column:1520}},loc:{start:{line:1,column:1528},end:{line:1,column:1577}},line:1},"23":{name:"(anonymous_23)",decl:{start:{line:1,column:1577},end:{line:1,column:1578}},loc:{start:{line:1,column:1594},end:{line:1,column:1651}},line:1},"24":{name:"(anonymous_24)",decl:{start:{line:1,column:1651},end:{line:1,column:1652}},loc:{start:{line:1,column:1661},end:{line:1,column:1688}},line:1},"25":{name:"(anonymous_25)",decl:{start:{line:1,column:1688},end:{line:1,column:1689}},loc:{start:{line:1,column:1701},end:{line:1,column:1753}},line:1},"26":{name:"(anonymous_26)",decl:{start:{line:1,column:1753},end:{line:1,column:1754}},loc:{start:{line:1,column:1783},end:{line:1,column:2151}},line:1},"27":{name:"(anonymous_27)",decl:{start:{line:1,column:2151},end:{line:1,column:2152}},loc:{start:{line:1,column:2170},end:{line:1,column:2373}},line:1},"28":{name:"(anonymous_28)",decl:{start:{line:1,column:2373},end:{line:1,column:2374}},loc:{start:{line:1,column:2386},end:{line:1,column:2442}},line:1},"29":{name:"(anonymous_29)",decl:{start:{line:1,column:2459},end:{line:1,column:2460}},loc:{start:{line:1,column:2470},end:{line:1,column:2488}},line:1}},branchMap:{"0":{loc:{start:{line:1,column:251},end:{line:1,column:256}},type:"binary-expr",locations:[{start:{line:1,column:251},end:{line:1,column:252}},{start:{line:1,column:254},end:{line:1,column:256}}],line:1},"1":{loc:{start:{line:1,column:1043},end:{line:1,column:1236}},type:"cond-expr",locations:[{start:{line:1,column:1066},end:{line:1,column:1071}},{start:{line:1,column:1073},end:{line:1,column:1235}}],line:1},"2":{loc:{start:{line:1,column:1536},end:{line:1,column:1576}},type:"binary-expr",locations:[{start:{line:1,column:1536},end:{line:1,column:1570}},{start:{line:1,column:1572},end:{line:1,column:1576}}],line:1},"3":{loc:{start:{line:1,column:1601},end:{line:1,column:1650}},type:"binary-expr",locations:[{start:{line:1,column:1601},end:{line:1,column:1613}},{start:{line:1,column:1615},end:{line:1,column:1650}}],line:1},"4":{loc:{start:{line:1,column:1817},end:{line:1,column:1838}},type:"binary-expr",locations:[{start:{line:1,column:1817},end:{line:1,column:1825}},{start:{line:1,column:1827},end:{line:1,column:1832}},{start:{line:1,column:1834},end:{line:1,column:1838}}],line:1},"5":{loc:{start:{line:1,column:1841},end:{line:1,column:1871}},type:"binary-expr",locations:[{start:{line:1,column:1841},end:{line:1,column:1856}},{start:{line:1,column:1858},end:{line:1,column:1871}}],line:1},"6":{loc:{start:{line:1,column:1872},end:{line:1,column:1981}},type:"if",locations:[{start:{line:1,column:1872},end:{line:1,column:1981}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"7":{loc:{start:{line:1,column:1875},end:{line:1,column:1919}},type:"binary-expr",locations:[{start:{line:1,column:1875},end:{line:1,column:1885}},{start:{line:1,column:1887},end:{line:1,column:1898}},{start:{line:1,column:1900},end:{line:1,column:1907}},{start:{line:1,column:1909},end:{line:1,column:1919}}],line:1},"8":{loc:{start:{line:1,column:1981},end:{line:1,column:2064}},type:"if",locations:[{start:{line:1,column:1981},end:{line:1,column:2064}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"9":{loc:{start:{line:1,column:2190},end:{line:1,column:2251}},type:"if",locations:[{start:{line:1,column:2190},end:{line:1,column:2251}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"10":{loc:{start:{line:1,column:2394},end:{line:1,column:2441}},type:"binary-expr",locations:[{start:{line:1,column:2394},end:{line:1,column:2414}},{start:{line:1,column:2416},end:{line:1,column:2441}}],line:1},"11":{loc:{start:{line:1,column:2482},end:{line:1,column:2486}},type:"binary-expr",locations:[{start:{line:1,column:2482},end:{line:1,column:2483}},{start:{line:1,column:2485},end:{line:1,column:2486}}],line:1}},s:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0},f:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0},b:{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0,0],"5":[0,0],"6":[0,0],"7":[0,0,0,0],"8":[0,0],"9":[0,0],"10":[0,0],"11":[0,0]},inputSourceMap:{version:3,sources:["src/app/core/models/user-role.enum.ts","src/app/core/services/internal-auth.service.ts"],sourcesContent:["export enum UserRole {\n AMMINISTRATORE = 'AMMINISTRATORE',\n OPERATORE_SANITARIO = 'OPERATORE_SANITARIO',\n}\n","import { Injectable, inject } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport {\n\tBehaviorSubject,\n\tObservable,\n\tcatchError,\n\tfinalize,\n\tmap,\n\tof,\n\tshareReplay,\n\ttap,\n} from 'rxjs';\nimport { UserRole } from '../models/user-role.enum';\nimport { API_BASE_URL } from '../tokens/api-base-url.token';\nimport { UserSession } from '../../features/user-auth/models/user-session.model';\n\ninterface LoginResponse {\n\taccessToken: string;\n}\n\ninterface RefreshResponse {\n\taccessToken: string;\n}\n\ninterface AuthClaims {\n\tuserId?: string | number;\n\tsub?: string | number;\n\tid?: string | number;\n\tusername?: string;\n\trole?: string;\n\tisFirstAccess?: boolean;\n\tfirstAccess?: boolean;\n}\n\ninterface TokenResponse {\n\taccessToken: string;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class InternalAuthService {\n\tprivate readonly http = inject(HttpClient);\n\tprivate readonly baseUrl = inject(API_BASE_URL);\n\n\tprivate readonly currentUser$ = new BehaviorSubject(null);\n\tprivate token: string | null = null;\n\tprivate restoreSessionInFlight$: Observable | null = null;\n\n\tpublic login(username: string, password: string): Observable {\n\t\treturn this.http\n\t\t\t.post(\n\t\t\t\t`${this.baseUrl}/auth/login`,\n\t\t\t\t{ username, password },\n\t\t\t\t{ withCredentials: true }\n\t\t\t)\n\t\t\t.pipe(map((response) => this.buildSessionFromAccessToken(response.accessToken)))\n\t\t\t.pipe(tap((session) => this.setSession(session)));\n\t}\n\n\tpublic setFirstAccessPassword(\n\t\tusername: string,\n\t\ttemporaryPassword: string,\n\t\tnewPassword: string\n\t): Observable {\n\t\treturn this.http.post(\n\t\t\t`${this.baseUrl}/auth/first-login`,\n\t\t\t{\n\t\t\t\tusername,\n\t\t\t\ttempPassword: temporaryPassword,\n\t\t\t\tpassword: newPassword,\n\t\t\t},\n\t\t\t{ withCredentials: true }\n\t\t).pipe(\n\t\t\tmap((response) => this.buildSessionFromAccessToken(response.accessToken)),\n\t\t\ttap((session) => this.setSession(session))\n\t\t);\n\t}\n\n\tpublic refreshAccessToken(): Observable {\n\t\treturn this.http\n\t\t\t.post(\n\t\t\t\t`${this.baseUrl}/auth/refresh`,\n\t\t\t\t{},\n\t\t\t\t{ withCredentials: true }\n\t\t\t)\n\t\t\t.pipe(map((response) => this.buildSessionFromAccessToken(response.accessToken)))\n\t\t\t.pipe(\n\t\t\t\ttap((session) => this.setSession(session)),\n\t\t\t\tmap((session) => session.accessToken)\n\t\t\t);\n\t}\n\n\tpublic restoreSessionFromRefresh(): Observable {\n\t\tif (this.isAuthenticated()) {\n\t\t\treturn of(true);\n\t\t}\n\n\t\tthis.restoreSessionInFlight$ ??= this.refreshAccessToken().pipe(\n\t\t\tmap(() => true),\n\t\t\tcatchError(() => of(false)),\n\t\t\tfinalize(() => {\n\t\t\t\tthis.restoreSessionInFlight$ = null;\n\t\t\t}),\n\t\t\tshareReplay(1)\n\t\t);\n\n\t\treturn this.restoreSessionInFlight$;\n\t}\n\n\tpublic logoutFromBackend(): Observable {\n\t\treturn this.http\n\t\t\t.post(`${this.baseUrl}/auth/logout`, {}, { withCredentials: true })\n\t\t\t.pipe(\n\t\t\t\tcatchError(() => of(void 0)),\n\t\t\t\ttap(() => this.logout())\n\t\t\t);\n\t}\n\n\tpublic logout(): void {\n\t\tthis.token = null;\n\t\tthis.currentUser$.next(null);\n\t}\n\n\tpublic getToken(): string | null {\n\t\treturn this.token;\n\t}\n\n\tpublic getCurrentUser$(): Observable {\n\t\treturn this.currentUser$.asObservable();\n\t}\n\n\tpublic getRole(): UserRole | null {\n\t\treturn this.currentUser$.getValue()?.role ?? null;\n\t}\n\n\tpublic isAuthenticated(): boolean {\n\t\treturn !!this.token && this.currentUser$.getValue() !== null;\n\t}\n\n\tpublic hasRole(role: UserRole): boolean {\n\t\treturn this.getRole() === role;\n\t}\n\n\tprivate setSession(session: UserSession): void {\n\t\tthis.token = session.accessToken;\n\t\tthis.currentUser$.next(session);\n\t}\n\n\tprivate buildSessionFromAccessToken(accessToken: string): UserSession {\n\t\tconst claims = this.parseAccessToken(accessToken);\n\t\tconst userId = claims.userId ?? claims.sub ?? claims.id;\n\t\tconst isFirstAccess = claims.isFirstAccess ?? claims.firstAccess;\n\n\t\tif (userId === undefined || !claims.username || !claims.role || isFirstAccess === undefined) {\n\t\t\tthrow new Error('Access token missing required auth claims');\n\t\t}\n\n\t\tif (!this.isUserRole(claims.role)) {\n\t\t\tthrow new Error('Access token has invalid role claim');\n\t\t}\n\n\t\treturn {\n\t\t\tuserId: String(userId),\n\t\t\tusername: claims.username,\n\t\t\trole: claims.role,\n\t\t\taccessToken,\n\t\t\tisFirstAccess,\n\t\t};\n\t}\n\n\tprivate parseAccessToken(accessToken: string): AuthClaims {\n\t\tconst tokenSections = accessToken.split('.');\n\t\tif (tokenSections.length < 2) {\n\t\t\tthrow new Error('Invalid access token format');\n\t\t}\n\n\t\tconst base64Payload = tokenSections[1].replaceAll('-', '+').replaceAll('_', '/');\n\t\tconst padLength = (4 - (base64Payload.length % 4)) % 4;\n\t\tconst payload = atob(`${base64Payload}${'='.repeat(padLength)}`);\n\n\t\treturn JSON.parse(payload) as AuthClaims;\n\t}\n\n\tprivate isUserRole(role: string): role is UserRole {\n\t\treturn role === UserRole.AMMINISTRATORE || role === UserRole.OPERATORE_SANITARIO;\n\t}\n\n\n}"],mappings:"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",names:["UserRole","InternalAuthService","http","inject","HttpClient","baseUrl","API_BASE_URL","currentUser$","BehaviorSubject","token","restoreSessionInFlight$","login","username","password","post","withCredentials","pipe","map","response","buildSessionFromAccessToken","accessToken","tap","session","setSession","setFirstAccessPassword","temporaryPassword","newPassword","tempPassword","refreshAccessToken","restoreSessionFromRefresh","isAuthenticated","of","catchError","finalize","shareReplay","logoutFromBackend","logout","next","getToken","getCurrentUser$","asObservable","getRole","getValue","role","hasRole","claims","parseAccessToken","userId","sub","id","isFirstAccess","firstAccess","undefined","Error","isUserRole","String","tokenSections","split","length","base64Payload","replaceAll","padLength","payload","atob","repeat","JSON","parse","UserRole","AMMINISTRATORE","OPERATORE_SANITARIO","factory","\u0275fac","providedIn"]},_coverageSchema:"1a1c01bbd47fc00a2c39e90264f33305004495a9",hash:"27488c234f471d0b9fb1b5de842477953ef4651b"};var coverage=global[gcv]||(global[gcv]={});if(!coverage[path]||coverage[path].hash!==hash){coverage[path]=coverageData;}var actualCoverage=coverage[path];{// @ts-ignore +cov_29qydjhisr=function(){return actualCoverage;};}return actualCoverage;}cov_29qydjhisr();import{b as f,e as m}from"./chunk-2S5V5XEE.js";import{A as p,D as A,H as o,L as d,Q as u,e as h,h as l,m as n,w as a}from"./chunk-RYTNMYZW.js";var c=(cov_29qydjhisr().s[0]++,function(r){cov_29qydjhisr().f[0]++;cov_29qydjhisr().s[1]++;return r.AMMINISTRATORE="AMMINISTRATORE",r.OPERATORE_SANITARIO="OPERATORE_SANITARIO",r;}((cov_29qydjhisr().b[0][0]++,c)||(cov_29qydjhisr().b[0][1]++,{})));var U=(cov_29qydjhisr().s[2]++,(()=>{cov_29qydjhisr().f[1]++;class r{http=(cov_29qydjhisr().s[3]++,u(f));baseUrl=(cov_29qydjhisr().s[4]++,u(m));currentUser$=(cov_29qydjhisr().s[5]++,new h(null));token=(cov_29qydjhisr().s[6]++,null);restoreSessionInFlight$=(cov_29qydjhisr().s[7]++,null);login(e,t){cov_29qydjhisr().f[2]++;cov_29qydjhisr().s[8]++;return this.http.post(`${this.baseUrl}/auth/login`,{username:e,password:t},{withCredentials:!0}).pipe(n(s=>{cov_29qydjhisr().f[3]++;cov_29qydjhisr().s[9]++;return this.buildSessionFromAccessToken(s.accessToken);})).pipe(o(s=>{cov_29qydjhisr().f[4]++;cov_29qydjhisr().s[10]++;return this.setSession(s);}));}setFirstAccessPassword(e,t,s){cov_29qydjhisr().f[5]++;cov_29qydjhisr().s[11]++;return this.http.post(`${this.baseUrl}/auth/first-login`,{username:e,tempPassword:t,password:s},{withCredentials:!0}).pipe(n(i=>{cov_29qydjhisr().f[6]++;cov_29qydjhisr().s[12]++;return this.buildSessionFromAccessToken(i.accessToken);}),o(i=>{cov_29qydjhisr().f[7]++;cov_29qydjhisr().s[13]++;return this.setSession(i);}));}refreshAccessToken(){cov_29qydjhisr().f[8]++;cov_29qydjhisr().s[14]++;return this.http.post(`${this.baseUrl}/auth/refresh`,{},{withCredentials:!0}).pipe(n(e=>{cov_29qydjhisr().f[9]++;cov_29qydjhisr().s[15]++;return this.buildSessionFromAccessToken(e.accessToken);})).pipe(o(e=>{cov_29qydjhisr().f[10]++;cov_29qydjhisr().s[16]++;return this.setSession(e);}),n(e=>{cov_29qydjhisr().f[11]++;cov_29qydjhisr().s[17]++;return e.accessToken;}));}restoreSessionFromRefresh(){cov_29qydjhisr().f[12]++;cov_29qydjhisr().s[18]++;return this.isAuthenticated()?(cov_29qydjhisr().b[1][0]++,l(!0)):(cov_29qydjhisr().b[1][1]++,this.restoreSessionInFlight$??=this.refreshAccessToken().pipe(n(()=>{cov_29qydjhisr().f[13]++;cov_29qydjhisr().s[19]++;return!0;}),a(()=>{cov_29qydjhisr().f[14]++;cov_29qydjhisr().s[20]++;return l(!1);}),p(()=>{cov_29qydjhisr().f[15]++;cov_29qydjhisr().s[21]++;this.restoreSessionInFlight$=null;}),A(1)),this.restoreSessionInFlight$);}logoutFromBackend(){cov_29qydjhisr().f[16]++;cov_29qydjhisr().s[22]++;return this.http.post(`${this.baseUrl}/auth/logout`,{},{withCredentials:!0}).pipe(a(()=>{cov_29qydjhisr().f[17]++;cov_29qydjhisr().s[23]++;return l(void 0);}),o(()=>{cov_29qydjhisr().f[18]++;cov_29qydjhisr().s[24]++;return this.logout();}));}logout(){cov_29qydjhisr().f[19]++;cov_29qydjhisr().s[25]++;this.token=null,this.currentUser$.next(null);}getToken(){cov_29qydjhisr().f[20]++;cov_29qydjhisr().s[26]++;return this.token;}getCurrentUser$(){cov_29qydjhisr().f[21]++;cov_29qydjhisr().s[27]++;return this.currentUser$.asObservable();}getRole(){cov_29qydjhisr().f[22]++;cov_29qydjhisr().s[28]++;return(cov_29qydjhisr().b[2][0]++,this.currentUser$.getValue()?.role)??(cov_29qydjhisr().b[2][1]++,null);}isAuthenticated(){cov_29qydjhisr().f[23]++;cov_29qydjhisr().s[29]++;return(cov_29qydjhisr().b[3][0]++,!!this.token)&&(cov_29qydjhisr().b[3][1]++,this.currentUser$.getValue()!==null);}hasRole(e){cov_29qydjhisr().f[24]++;cov_29qydjhisr().s[30]++;return this.getRole()===e;}setSession(e){cov_29qydjhisr().f[25]++;cov_29qydjhisr().s[31]++;this.token=e.accessToken,this.currentUser$.next(e);}buildSessionFromAccessToken(e){cov_29qydjhisr().f[26]++;let t=(cov_29qydjhisr().s[32]++,this.parseAccessToken(e)),s=(cov_29qydjhisr().s[33]++,(cov_29qydjhisr().b[4][0]++,t.userId)??(cov_29qydjhisr().b[4][1]++,t.sub)??(cov_29qydjhisr().b[4][2]++,t.id)),i=(cov_29qydjhisr().s[34]++,(cov_29qydjhisr().b[5][0]++,t.isFirstAccess)??(cov_29qydjhisr().b[5][1]++,t.firstAccess));cov_29qydjhisr().s[35]++;if((cov_29qydjhisr().b[7][0]++,s===void 0)||(cov_29qydjhisr().b[7][1]++,!t.username)||(cov_29qydjhisr().b[7][2]++,!t.role)||(cov_29qydjhisr().b[7][3]++,i===void 0)){cov_29qydjhisr().b[6][0]++;cov_29qydjhisr().s[36]++;throw new Error("Access token missing required auth claims");}else{cov_29qydjhisr().b[6][1]++;}cov_29qydjhisr().s[37]++;if(!this.isUserRole(t.role)){cov_29qydjhisr().b[8][0]++;cov_29qydjhisr().s[38]++;throw new Error("Access token has invalid role claim");}else{cov_29qydjhisr().b[8][1]++;}cov_29qydjhisr().s[39]++;return{userId:String(s),username:t.username,role:t.role,accessToken:e,isFirstAccess:i};}parseAccessToken(e){cov_29qydjhisr().f[27]++;let t=(cov_29qydjhisr().s[40]++,e.split("."));cov_29qydjhisr().s[41]++;if(t.length<2){cov_29qydjhisr().b[9][0]++;cov_29qydjhisr().s[42]++;throw new Error("Invalid access token format");}else{cov_29qydjhisr().b[9][1]++;}let s=(cov_29qydjhisr().s[43]++,t[1].replaceAll("-","+").replaceAll("_","/")),i=(cov_29qydjhisr().s[44]++,(4-s.length%4)%4),T=(cov_29qydjhisr().s[45]++,atob(`${s}${"=".repeat(i)}`));cov_29qydjhisr().s[46]++;return JSON.parse(T);}isUserRole(e){cov_29qydjhisr().f[28]++;cov_29qydjhisr().s[47]++;return(cov_29qydjhisr().b[10][0]++,e===c.AMMINISTRATORE)||(cov_29qydjhisr().b[10][1]++,e===c.OPERATORE_SANITARIO);}static ɵfac=(cov_29qydjhisr().s[48]++,function(t){cov_29qydjhisr().f[29]++;cov_29qydjhisr().s[49]++;return new((cov_29qydjhisr().b[11][0]++,t)||(cov_29qydjhisr().b[11][1]++,r))();});static ɵprov=(cov_29qydjhisr().s[50]++,d({token:r,factory:r.ɵfac,providedIn:"root"}));}cov_29qydjhisr().s[51]++;return r;})());export{c as a,U as b};//# sourceMappingURL=chunk-65RKWSY3.js.map +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjIiwiY292XzI5cXlkamhpc3IiLCJzIiwiciIsImYiLCJBTU1JTklTVFJBVE9SRSIsIk9QRVJBVE9SRV9TQU5JVEFSSU8iLCJiIiwiVSIsImh0dHAiLCJ1IiwiYmFzZVVybCIsIm0iLCJjdXJyZW50VXNlciQiLCJoIiwidG9rZW4iLCJyZXN0b3JlU2Vzc2lvbkluRmxpZ2h0JCIsImxvZ2luIiwiZSIsInQiLCJwb3N0IiwidXNlcm5hbWUiLCJwYXNzd29yZCIsIndpdGhDcmVkZW50aWFscyIsInBpcGUiLCJuIiwiYnVpbGRTZXNzaW9uRnJvbUFjY2Vzc1Rva2VuIiwiYWNjZXNzVG9rZW4iLCJvIiwic2V0U2Vzc2lvbiIsInNldEZpcnN0QWNjZXNzUGFzc3dvcmQiLCJ0ZW1wUGFzc3dvcmQiLCJpIiwicmVmcmVzaEFjY2Vzc1Rva2VuIiwicmVzdG9yZVNlc3Npb25Gcm9tUmVmcmVzaCIsImlzQXV0aGVudGljYXRlZCIsImwiLCJhIiwicCIsIkEiLCJsb2dvdXRGcm9tQmFja2VuZCIsImxvZ291dCIsIm5leHQiLCJnZXRUb2tlbiIsImdldEN1cnJlbnRVc2VyJCIsImFzT2JzZXJ2YWJsZSIsImdldFJvbGUiLCJnZXRWYWx1ZSIsInJvbGUiLCJoYXNSb2xlIiwicGFyc2VBY2Nlc3NUb2tlbiIsInVzZXJJZCIsInN1YiIsImlkIiwiaXNGaXJzdEFjY2VzcyIsImZpcnN0QWNjZXNzIiwiRXJyb3IiLCJpc1VzZXJSb2xlIiwiU3RyaW5nIiwic3BsaXQiLCJsZW5ndGgiLCJyZXBsYWNlQWxsIiwiVCIsImF0b2IiLCJyZXBlYXQiLCJKU09OIiwicGFyc2UiLCLJtWZhYyIsIsm1cHJvdiIsImQiLCJmYWN0b3J5IiwicHJvdmlkZWRJbiJdLCJzb3VyY2VzIjpbInNyYy9hcHAvY29yZS9tb2RlbHMvdXNlci1yb2xlLmVudW0udHMiLCJzcmMvYXBwL2NvcmUvc2VydmljZXMvaW50ZXJuYWwtYXV0aC5zZXJ2aWNlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBlbnVtIFVzZXJSb2xlIHtcbiAgQU1NSU5JU1RSQVRPUkUgPSAnQU1NSU5JU1RSQVRPUkUnLFxuICBPUEVSQVRPUkVfU0FOSVRBUklPID0gJ09QRVJBVE9SRV9TQU5JVEFSSU8nLFxufVxuIiwiaW1wb3J0IHsgSW5qZWN0YWJsZSwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHtcblx0QmVoYXZpb3JTdWJqZWN0LFxuXHRPYnNlcnZhYmxlLFxuXHRjYXRjaEVycm9yLFxuXHRmaW5hbGl6ZSxcblx0bWFwLFxuXHRvZixcblx0c2hhcmVSZXBsYXksXG5cdHRhcCxcbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBVc2VyUm9sZSB9IGZyb20gJy4uL21vZGVscy91c2VyLXJvbGUuZW51bSc7XG5pbXBvcnQgeyBBUElfQkFTRV9VUkwgfSBmcm9tICcuLi90b2tlbnMvYXBpLWJhc2UtdXJsLnRva2VuJztcbmltcG9ydCB7IFVzZXJTZXNzaW9uIH0gZnJvbSAnLi4vLi4vZmVhdHVyZXMvdXNlci1hdXRoL21vZGVscy91c2VyLXNlc3Npb24ubW9kZWwnO1xuXG5pbnRlcmZhY2UgTG9naW5SZXNwb25zZSB7XG5cdGFjY2Vzc1Rva2VuOiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBSZWZyZXNoUmVzcG9uc2Uge1xuXHRhY2Nlc3NUb2tlbjogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgQXV0aENsYWltcyB7XG5cdHVzZXJJZD86IHN0cmluZyB8IG51bWJlcjtcblx0c3ViPzogc3RyaW5nIHwgbnVtYmVyO1xuXHRpZD86IHN0cmluZyB8IG51bWJlcjtcblx0dXNlcm5hbWU/OiBzdHJpbmc7XG5cdHJvbGU/OiBzdHJpbmc7XG5cdGlzRmlyc3RBY2Nlc3M/OiBib29sZWFuO1xuXHRmaXJzdEFjY2Vzcz86IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBUb2tlblJlc3BvbnNlIHtcblx0YWNjZXNzVG9rZW46IHN0cmluZztcbn1cblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBJbnRlcm5hbEF1dGhTZXJ2aWNlIHtcblx0cHJpdmF0ZSByZWFkb25seSBodHRwID0gaW5qZWN0KEh0dHBDbGllbnQpO1xuXHRwcml2YXRlIHJlYWRvbmx5IGJhc2VVcmwgPSBpbmplY3QoQVBJX0JBU0VfVVJMKTtcblxuXHRwcml2YXRlIHJlYWRvbmx5IGN1cnJlbnRVc2VyJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VXNlclNlc3Npb24gfCBudWxsPihudWxsKTtcblx0cHJpdmF0ZSB0b2tlbjogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cdHByaXZhdGUgcmVzdG9yZVNlc3Npb25JbkZsaWdodCQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gfCBudWxsID0gbnVsbDtcblxuXHRwdWJsaWMgbG9naW4odXNlcm5hbWU6IHN0cmluZywgcGFzc3dvcmQ6IHN0cmluZyk6IE9ic2VydmFibGU8VXNlclNlc3Npb24+IHtcblx0XHRyZXR1cm4gdGhpcy5odHRwXG5cdFx0XHQucG9zdDxMb2dpblJlc3BvbnNlPihcblx0XHRcdFx0YCR7dGhpcy5iYXNlVXJsfS9hdXRoL2xvZ2luYCxcblx0XHRcdFx0eyB1c2VybmFtZSwgcGFzc3dvcmQgfSxcblx0XHRcdFx0eyB3aXRoQ3JlZGVudGlhbHM6IHRydWUgfVxuXHRcdFx0KVxuXHRcdFx0LnBpcGUobWFwKChyZXNwb25zZSkgPT4gdGhpcy5idWlsZFNlc3Npb25Gcm9tQWNjZXNzVG9rZW4ocmVzcG9uc2UuYWNjZXNzVG9rZW4pKSlcblx0XHRcdC5waXBlKHRhcCgoc2Vzc2lvbikgPT4gdGhpcy5zZXRTZXNzaW9uKHNlc3Npb24pKSk7XG5cdH1cblxuXHRwdWJsaWMgc2V0Rmlyc3RBY2Nlc3NQYXNzd29yZChcblx0XHR1c2VybmFtZTogc3RyaW5nLFxuXHRcdHRlbXBvcmFyeVBhc3N3b3JkOiBzdHJpbmcsXG5cdFx0bmV3UGFzc3dvcmQ6IHN0cmluZ1xuXHQpOiBPYnNlcnZhYmxlPFVzZXJTZXNzaW9uPiB7XG5cdFx0cmV0dXJuIHRoaXMuaHR0cC5wb3N0PFRva2VuUmVzcG9uc2U+KFxuXHRcdFx0YCR7dGhpcy5iYXNlVXJsfS9hdXRoL2ZpcnN0LWxvZ2luYCxcblx0XHRcdHtcblx0XHRcdFx0dXNlcm5hbWUsXG5cdFx0XHRcdHRlbXBQYXNzd29yZDogdGVtcG9yYXJ5UGFzc3dvcmQsXG5cdFx0XHRcdHBhc3N3b3JkOiBuZXdQYXNzd29yZCxcblx0XHRcdH0sXG5cdFx0XHR7IHdpdGhDcmVkZW50aWFsczogdHJ1ZSB9XG5cdFx0KS5waXBlKFxuXHRcdFx0bWFwKChyZXNwb25zZSkgPT4gdGhpcy5idWlsZFNlc3Npb25Gcm9tQWNjZXNzVG9rZW4ocmVzcG9uc2UuYWNjZXNzVG9rZW4pKSxcblx0XHRcdHRhcCgoc2Vzc2lvbikgPT4gdGhpcy5zZXRTZXNzaW9uKHNlc3Npb24pKVxuXHRcdCk7XG5cdH1cblxuXHRwdWJsaWMgcmVmcmVzaEFjY2Vzc1Rva2VuKCk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG5cdFx0cmV0dXJuIHRoaXMuaHR0cFxuXHRcdFx0LnBvc3Q8UmVmcmVzaFJlc3BvbnNlPihcblx0XHRcdFx0YCR7dGhpcy5iYXNlVXJsfS9hdXRoL3JlZnJlc2hgLFxuXHRcdFx0XHR7fSxcblx0XHRcdFx0eyB3aXRoQ3JlZGVudGlhbHM6IHRydWUgfVxuXHRcdFx0KVxuXHRcdFx0LnBpcGUobWFwKChyZXNwb25zZSkgPT4gdGhpcy5idWlsZFNlc3Npb25Gcm9tQWNjZXNzVG9rZW4ocmVzcG9uc2UuYWNjZXNzVG9rZW4pKSlcblx0XHRcdC5waXBlKFxuXHRcdFx0XHR0YXAoKHNlc3Npb24pID0+IHRoaXMuc2V0U2Vzc2lvbihzZXNzaW9uKSksXG5cdFx0XHRcdG1hcCgoc2Vzc2lvbikgPT4gc2Vzc2lvbi5hY2Nlc3NUb2tlbilcblx0XHRcdCk7XG5cdH1cblxuXHRwdWJsaWMgcmVzdG9yZVNlc3Npb25Gcm9tUmVmcmVzaCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcblx0XHRpZiAodGhpcy5pc0F1dGhlbnRpY2F0ZWQoKSkge1xuXHRcdFx0cmV0dXJuIG9mKHRydWUpO1xuXHRcdH1cblxuXHRcdHRoaXMucmVzdG9yZVNlc3Npb25JbkZsaWdodCQgPz89IHRoaXMucmVmcmVzaEFjY2Vzc1Rva2VuKCkucGlwZShcblx0XHRcdG1hcCgoKSA9PiB0cnVlKSxcblx0XHRcdGNhdGNoRXJyb3IoKCkgPT4gb2YoZmFsc2UpKSxcblx0XHRcdGZpbmFsaXplKCgpID0+IHtcblx0XHRcdFx0dGhpcy5yZXN0b3JlU2Vzc2lvbkluRmxpZ2h0JCA9IG51bGw7XG5cdFx0XHR9KSxcblx0XHRcdHNoYXJlUmVwbGF5KDEpXG5cdFx0KTtcblxuXHRcdHJldHVybiB0aGlzLnJlc3RvcmVTZXNzaW9uSW5GbGlnaHQkO1xuXHR9XG5cblx0cHVibGljIGxvZ291dEZyb21CYWNrZW5kKCk6IE9ic2VydmFibGU8dm9pZD4ge1xuXHRcdHJldHVybiB0aGlzLmh0dHBcblx0XHRcdC5wb3N0PHZvaWQ+KGAke3RoaXMuYmFzZVVybH0vYXV0aC9sb2dvdXRgLCB7fSwgeyB3aXRoQ3JlZGVudGlhbHM6IHRydWUgfSlcblx0XHRcdC5waXBlKFxuXHRcdFx0XHRjYXRjaEVycm9yKCgpID0+IG9mKHZvaWQgMCkpLFxuXHRcdFx0XHR0YXAoKCkgPT4gdGhpcy5sb2dvdXQoKSlcblx0XHRcdCk7XG5cdH1cblxuXHRwdWJsaWMgbG9nb3V0KCk6IHZvaWQge1xuXHRcdHRoaXMudG9rZW4gPSBudWxsO1xuXHRcdHRoaXMuY3VycmVudFVzZXIkLm5leHQobnVsbCk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0VG9rZW4oKTogc3RyaW5nIHwgbnVsbCB7XG5cdFx0cmV0dXJuIHRoaXMudG9rZW47XG5cdH1cblxuXHRwdWJsaWMgZ2V0Q3VycmVudFVzZXIkKCk6IE9ic2VydmFibGU8VXNlclNlc3Npb24gfCBudWxsPiB7XG5cdFx0cmV0dXJuIHRoaXMuY3VycmVudFVzZXIkLmFzT2JzZXJ2YWJsZSgpO1xuXHR9XG5cblx0cHVibGljIGdldFJvbGUoKTogVXNlclJvbGUgfCBudWxsIHtcblx0XHRyZXR1cm4gdGhpcy5jdXJyZW50VXNlciQuZ2V0VmFsdWUoKT8ucm9sZSA/PyBudWxsO1xuXHR9XG5cblx0cHVibGljIGlzQXV0aGVudGljYXRlZCgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gISF0aGlzLnRva2VuICYmIHRoaXMuY3VycmVudFVzZXIkLmdldFZhbHVlKCkgIT09IG51bGw7XG5cdH1cblxuXHRwdWJsaWMgaGFzUm9sZShyb2xlOiBVc2VyUm9sZSk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLmdldFJvbGUoKSA9PT0gcm9sZTtcblx0fVxuXG5cdHByaXZhdGUgc2V0U2Vzc2lvbihzZXNzaW9uOiBVc2VyU2Vzc2lvbik6IHZvaWQge1xuXHRcdHRoaXMudG9rZW4gPSBzZXNzaW9uLmFjY2Vzc1Rva2VuO1xuXHRcdHRoaXMuY3VycmVudFVzZXIkLm5leHQoc2Vzc2lvbik7XG5cdH1cblxuXHRwcml2YXRlIGJ1aWxkU2Vzc2lvbkZyb21BY2Nlc3NUb2tlbihhY2Nlc3NUb2tlbjogc3RyaW5nKTogVXNlclNlc3Npb24ge1xuXHRcdGNvbnN0IGNsYWltcyA9IHRoaXMucGFyc2VBY2Nlc3NUb2tlbihhY2Nlc3NUb2tlbik7XG5cdFx0Y29uc3QgdXNlcklkID0gY2xhaW1zLnVzZXJJZCA/PyBjbGFpbXMuc3ViID8/IGNsYWltcy5pZDtcblx0XHRjb25zdCBpc0ZpcnN0QWNjZXNzID0gY2xhaW1zLmlzRmlyc3RBY2Nlc3MgPz8gY2xhaW1zLmZpcnN0QWNjZXNzO1xuXG5cdFx0aWYgKHVzZXJJZCA9PT0gdW5kZWZpbmVkIHx8ICFjbGFpbXMudXNlcm5hbWUgfHwgIWNsYWltcy5yb2xlIHx8IGlzRmlyc3RBY2Nlc3MgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdBY2Nlc3MgdG9rZW4gbWlzc2luZyByZXF1aXJlZCBhdXRoIGNsYWltcycpO1xuXHRcdH1cblxuXHRcdGlmICghdGhpcy5pc1VzZXJSb2xlKGNsYWltcy5yb2xlKSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdBY2Nlc3MgdG9rZW4gaGFzIGludmFsaWQgcm9sZSBjbGFpbScpO1xuXHRcdH1cblxuXHRcdHJldHVybiB7XG5cdFx0XHR1c2VySWQ6IFN0cmluZyh1c2VySWQpLFxuXHRcdFx0dXNlcm5hbWU6IGNsYWltcy51c2VybmFtZSxcblx0XHRcdHJvbGU6IGNsYWltcy5yb2xlLFxuXHRcdFx0YWNjZXNzVG9rZW4sXG5cdFx0XHRpc0ZpcnN0QWNjZXNzLFxuXHRcdH07XG5cdH1cblxuXHRwcml2YXRlIHBhcnNlQWNjZXNzVG9rZW4oYWNjZXNzVG9rZW46IHN0cmluZyk6IEF1dGhDbGFpbXMge1xuXHRcdGNvbnN0IHRva2VuU2VjdGlvbnMgPSBhY2Nlc3NUb2tlbi5zcGxpdCgnLicpO1xuXHRcdGlmICh0b2tlblNlY3Rpb25zLmxlbmd0aCA8IDIpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcignSW52YWxpZCBhY2Nlc3MgdG9rZW4gZm9ybWF0Jyk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgYmFzZTY0UGF5bG9hZCA9IHRva2VuU2VjdGlvbnNbMV0ucmVwbGFjZUFsbCgnLScsICcrJykucmVwbGFjZUFsbCgnXycsICcvJyk7XG5cdFx0Y29uc3QgcGFkTGVuZ3RoID0gKDQgLSAoYmFzZTY0UGF5bG9hZC5sZW5ndGggJSA0KSkgJSA0O1xuXHRcdGNvbnN0IHBheWxvYWQgPSBhdG9iKGAke2Jhc2U2NFBheWxvYWR9JHsnPScucmVwZWF0KHBhZExlbmd0aCl9YCk7XG5cblx0XHRyZXR1cm4gSlNPTi5wYXJzZShwYXlsb2FkKSBhcyBBdXRoQ2xhaW1zO1xuXHR9XG5cblx0cHJpdmF0ZSBpc1VzZXJSb2xlKHJvbGU6IHN0cmluZyk6IHJvbGUgaXMgVXNlclJvbGUge1xuXHRcdHJldHVybiByb2xlID09PSBVc2VyUm9sZS5BTU1JTklTVFJBVE9SRSB8fCByb2xlID09PSBVc2VyUm9sZS5PUEVSQVRPUkVfU0FOSVRBUklPO1xuXHR9XG5cblxufSJd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 \ No newline at end of file diff --git a/frontend/dist-instrumented/chunk-65RKWSY3.js.map b/frontend/dist-instrumented/chunk-65RKWSY3.js.map new file mode 100644 index 00000000..0777f73c --- /dev/null +++ b/frontend/dist-instrumented/chunk-65RKWSY3.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["src/app/core/models/user-role.enum.ts", "src/app/core/services/internal-auth.service.ts"], + "sourcesContent": ["export enum UserRole {\n AMMINISTRATORE = 'AMMINISTRATORE',\n OPERATORE_SANITARIO = 'OPERATORE_SANITARIO',\n}\n", "import { Injectable, inject } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport {\n\tBehaviorSubject,\n\tObservable,\n\tcatchError,\n\tfinalize,\n\tmap,\n\tof,\n\tshareReplay,\n\ttap,\n} from 'rxjs';\nimport { UserRole } from '../models/user-role.enum';\nimport { API_BASE_URL } from '../tokens/api-base-url.token';\nimport { UserSession } from '../../features/user-auth/models/user-session.model';\n\ninterface LoginResponse {\n\taccessToken: string;\n}\n\ninterface RefreshResponse {\n\taccessToken: string;\n}\n\ninterface AuthClaims {\n\tuserId?: string | number;\n\tsub?: string | number;\n\tid?: string | number;\n\tusername?: string;\n\trole?: string;\n\tisFirstAccess?: boolean;\n\tfirstAccess?: boolean;\n}\n\ninterface TokenResponse {\n\taccessToken: string;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class InternalAuthService {\n\tprivate readonly http = inject(HttpClient);\n\tprivate readonly baseUrl = inject(API_BASE_URL);\n\n\tprivate readonly currentUser$ = new BehaviorSubject(null);\n\tprivate token: string | null = null;\n\tprivate restoreSessionInFlight$: Observable | null = null;\n\n\tpublic login(username: string, password: string): Observable {\n\t\treturn this.http\n\t\t\t.post(\n\t\t\t\t`${this.baseUrl}/auth/login`,\n\t\t\t\t{ username, password },\n\t\t\t\t{ withCredentials: true }\n\t\t\t)\n\t\t\t.pipe(map((response) => this.buildSessionFromAccessToken(response.accessToken)))\n\t\t\t.pipe(tap((session) => this.setSession(session)));\n\t}\n\n\tpublic setFirstAccessPassword(\n\t\tusername: string,\n\t\ttemporaryPassword: string,\n\t\tnewPassword: string\n\t): Observable {\n\t\treturn this.http.post(\n\t\t\t`${this.baseUrl}/auth/first-login`,\n\t\t\t{\n\t\t\t\tusername,\n\t\t\t\ttempPassword: temporaryPassword,\n\t\t\t\tpassword: newPassword,\n\t\t\t},\n\t\t\t{ withCredentials: true }\n\t\t).pipe(\n\t\t\tmap((response) => this.buildSessionFromAccessToken(response.accessToken)),\n\t\t\ttap((session) => this.setSession(session))\n\t\t);\n\t}\n\n\tpublic refreshAccessToken(): Observable {\n\t\treturn this.http\n\t\t\t.post(\n\t\t\t\t`${this.baseUrl}/auth/refresh`,\n\t\t\t\t{},\n\t\t\t\t{ withCredentials: true }\n\t\t\t)\n\t\t\t.pipe(map((response) => this.buildSessionFromAccessToken(response.accessToken)))\n\t\t\t.pipe(\n\t\t\t\ttap((session) => this.setSession(session)),\n\t\t\t\tmap((session) => session.accessToken)\n\t\t\t);\n\t}\n\n\tpublic restoreSessionFromRefresh(): Observable {\n\t\tif (this.isAuthenticated()) {\n\t\t\treturn of(true);\n\t\t}\n\n\t\tthis.restoreSessionInFlight$ ??= this.refreshAccessToken().pipe(\n\t\t\tmap(() => true),\n\t\t\tcatchError(() => of(false)),\n\t\t\tfinalize(() => {\n\t\t\t\tthis.restoreSessionInFlight$ = null;\n\t\t\t}),\n\t\t\tshareReplay(1)\n\t\t);\n\n\t\treturn this.restoreSessionInFlight$;\n\t}\n\n\tpublic logoutFromBackend(): Observable {\n\t\treturn this.http\n\t\t\t.post(`${this.baseUrl}/auth/logout`, {}, { withCredentials: true })\n\t\t\t.pipe(\n\t\t\t\tcatchError(() => of(void 0)),\n\t\t\t\ttap(() => this.logout())\n\t\t\t);\n\t}\n\n\tpublic logout(): void {\n\t\tthis.token = null;\n\t\tthis.currentUser$.next(null);\n\t}\n\n\tpublic getToken(): string | null {\n\t\treturn this.token;\n\t}\n\n\tpublic getCurrentUser$(): Observable {\n\t\treturn this.currentUser$.asObservable();\n\t}\n\n\tpublic getRole(): UserRole | null {\n\t\treturn this.currentUser$.getValue()?.role ?? null;\n\t}\n\n\tpublic isAuthenticated(): boolean {\n\t\treturn !!this.token && this.currentUser$.getValue() !== null;\n\t}\n\n\tpublic hasRole(role: UserRole): boolean {\n\t\treturn this.getRole() === role;\n\t}\n\n\tprivate setSession(session: UserSession): void {\n\t\tthis.token = session.accessToken;\n\t\tthis.currentUser$.next(session);\n\t}\n\n\tprivate buildSessionFromAccessToken(accessToken: string): UserSession {\n\t\tconst claims = this.parseAccessToken(accessToken);\n\t\tconst userId = claims.userId ?? claims.sub ?? claims.id;\n\t\tconst isFirstAccess = claims.isFirstAccess ?? claims.firstAccess;\n\n\t\tif (userId === undefined || !claims.username || !claims.role || isFirstAccess === undefined) {\n\t\t\tthrow new Error('Access token missing required auth claims');\n\t\t}\n\n\t\tif (!this.isUserRole(claims.role)) {\n\t\t\tthrow new Error('Access token has invalid role claim');\n\t\t}\n\n\t\treturn {\n\t\t\tuserId: String(userId),\n\t\t\tusername: claims.username,\n\t\t\trole: claims.role,\n\t\t\taccessToken,\n\t\t\tisFirstAccess,\n\t\t};\n\t}\n\n\tprivate parseAccessToken(accessToken: string): AuthClaims {\n\t\tconst tokenSections = accessToken.split('.');\n\t\tif (tokenSections.length < 2) {\n\t\t\tthrow new Error('Invalid access token format');\n\t\t}\n\n\t\tconst base64Payload = tokenSections[1].replaceAll('-', '+').replaceAll('_', '/');\n\t\tconst padLength = (4 - (base64Payload.length % 4)) % 4;\n\t\tconst payload = atob(`${base64Payload}${'='.repeat(padLength)}`);\n\n\t\treturn JSON.parse(payload) as AuthClaims;\n\t}\n\n\tprivate isUserRole(role: string): role is UserRole {\n\t\treturn role === UserRole.AMMINISTRATORE || role === UserRole.OPERATORE_SANITARIO;\n\t}\n\n\n}"], + "mappings": "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", + "names": ["UserRole", "InternalAuthService", "http", "inject", "HttpClient", "baseUrl", "API_BASE_URL", "currentUser$", "BehaviorSubject", "token", "restoreSessionInFlight$", "login", "username", "password", "post", "withCredentials", "pipe", "map", "response", "buildSessionFromAccessToken", "accessToken", "tap", "session", "setSession", "setFirstAccessPassword", "temporaryPassword", "newPassword", "tempPassword", "refreshAccessToken", "restoreSessionFromRefresh", "isAuthenticated", "of", "catchError", "finalize", "shareReplay", "logoutFromBackend", "logout", "next", "getToken", "getCurrentUser$", "asObservable", "getRole", "getValue", "role", "hasRole", "claims", "parseAccessToken", "userId", "sub", "id", "isFirstAccess", "firstAccess", "undefined", "Error", "isUserRole", "String", "tokenSections", "split", "length", "base64Payload", "replaceAll", "padLength", "payload", "atob", "repeat", "JSON", "parse", "UserRole", "AMMINISTRATORE", "OPERATORE_SANITARIO", "factory", "\u0275fac", "providedIn"] +} diff --git a/frontend/dist-instrumented/chunk-666MVPNS.js b/frontend/dist-instrumented/chunk-666MVPNS.js new file mode 100644 index 00000000..c22e218b --- /dev/null +++ b/frontend/dist-instrumented/chunk-666MVPNS.js @@ -0,0 +1,3 @@ +function cov_2kafj9625b(){var path="/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-666MVPNS.js";var hash="9e173d29ab529c75bcf0f91862d0fea3225a3f2b";var global=new Function("return this")();var gcv="__coverage__";var coverageData={path:"/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-666MVPNS.js",statementMap:{"0":{start:{line:1,column:6},end:{line:1,column:31}}},fnMap:{},branchMap:{},s:{"0":0},f:{},b:{},inputSourceMap:{version:3,sources:["src/app/core/alarm/models/realtime-alarm-event.model.ts"],sourcesContent:["export type AlarmLifecycleType = 'triggered' | 'resolved';\n\nexport interface BackendTriggeredPayload {\n\talarmEventId: string;\n\twardId: number;\n\talarmRuleId: string;\n}\n\nexport interface BackendResolvedPayload {\n\talarmEventId: string;\n\twardId?: number;\n}\n\nexport interface AlarmLifecycleUpdateDetail {\n\ttype: AlarmLifecycleType;\n\talarmEventId: string;\n}\n\nexport const ALARM_LIFECYCLE_UPDATED_EVENT = 'alarm-lifecycle-updated';\n"],mappings:"AAkBO,IAAMA,EAAgC",names:["ALARM_LIFECYCLE_UPDATED_EVENT"]},_coverageSchema:"1a1c01bbd47fc00a2c39e90264f33305004495a9",hash:"9e173d29ab529c75bcf0f91862d0fea3225a3f2b"};var coverage=global[gcv]||(global[gcv]={});if(!coverage[path]||coverage[path].hash!==hash){coverage[path]=coverageData;}var actualCoverage=coverage[path];{// @ts-ignore +cov_2kafj9625b=function(){return actualCoverage;};}return actualCoverage;}cov_2kafj9625b();var E=(cov_2kafj9625b().s[0]++,"alarm-lifecycle-updated");export{E as a};//# sourceMappingURL=chunk-666MVPNS.js.map +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJFIiwiY292XzJrYWZqOTYyNWIiLCJzIiwiYSJdLCJzb3VyY2VzIjpbInNyYy9hcHAvY29yZS9hbGFybS9tb2RlbHMvcmVhbHRpbWUtYWxhcm0tZXZlbnQubW9kZWwudHMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHR5cGUgQWxhcm1MaWZlY3ljbGVUeXBlID0gJ3RyaWdnZXJlZCcgfCAncmVzb2x2ZWQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEJhY2tlbmRUcmlnZ2VyZWRQYXlsb2FkIHtcblx0YWxhcm1FdmVudElkOiBzdHJpbmc7XG5cdHdhcmRJZDogbnVtYmVyO1xuXHRhbGFybVJ1bGVJZDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJhY2tlbmRSZXNvbHZlZFBheWxvYWQge1xuXHRhbGFybUV2ZW50SWQ6IHN0cmluZztcblx0d2FyZElkPzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFsYXJtTGlmZWN5Y2xlVXBkYXRlRGV0YWlsIHtcblx0dHlwZTogQWxhcm1MaWZlY3ljbGVUeXBlO1xuXHRhbGFybUV2ZW50SWQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGNvbnN0IEFMQVJNX0xJRkVDWUNMRV9VUERBVEVEX0VWRU5UID0gJ2FsYXJtLWxpZmVjeWNsZS11cGRhdGVkJztcbiJdLCJtYXBwaW5ncyI6IjsyRkFrQk8sR0FBTSxDQUFBQSxDQUFBLEVBQUFDLGNBQUEsR0FBQUMsQ0FBQSxNQUFnQyxrQ0FBQUYsQ0FBQSxJQUFBRyxDQUFBLEUiLCJpZ25vcmVMaXN0IjpbXX0= \ No newline at end of file diff --git a/frontend/dist-instrumented/chunk-666MVPNS.js.map b/frontend/dist-instrumented/chunk-666MVPNS.js.map new file mode 100644 index 00000000..6d70f2b4 --- /dev/null +++ b/frontend/dist-instrumented/chunk-666MVPNS.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["src/app/core/alarm/models/realtime-alarm-event.model.ts"], + "sourcesContent": ["export type AlarmLifecycleType = 'triggered' | 'resolved';\n\nexport interface BackendTriggeredPayload {\n\talarmEventId: string;\n\twardId: number;\n\talarmRuleId: string;\n}\n\nexport interface BackendResolvedPayload {\n\talarmEventId: string;\n\twardId?: number;\n}\n\nexport interface AlarmLifecycleUpdateDetail {\n\ttype: AlarmLifecycleType;\n\talarmEventId: string;\n}\n\nexport const ALARM_LIFECYCLE_UPDATED_EVENT = 'alarm-lifecycle-updated';\n"], + "mappings": "AAkBO,IAAMA,EAAgC", + "names": ["ALARM_LIFECYCLE_UPDATED_EVENT"] +} diff --git a/frontend/dist-instrumented/chunk-6R7YSGCL.js b/frontend/dist-instrumented/chunk-6R7YSGCL.js new file mode 100644 index 00000000..ee6afb31 --- /dev/null +++ b/frontend/dist-instrumented/chunk-6R7YSGCL.js @@ -0,0 +1,3 @@ +function cov_220zhfwpnm(){var path="/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-6R7YSGCL.js";var hash="e47053eb0b86eedcb97c66e4f1a2656960562a0f";var global=new Function("return this")();var gcv="__coverage__";var coverageData={path:"/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-6R7YSGCL.js",statementMap:{"0":{start:{line:1,column:513},end:{line:1,column:532}},"1":{start:{line:1,column:533},end:{line:1,column:544}},"2":{start:{line:1,column:544},end:{line:1,column:556}},"3":{start:{line:1,column:556},end:{line:1,column:567}},"4":{start:{line:1,column:567},end:{line:1,column:578}},"5":{start:{line:1,column:578},end:{line:1,column:592}},"6":{start:{line:1,column:592},end:{line:1,column:606}},"7":{start:{line:1,column:606},end:{line:1,column:617}},"8":{start:{line:1,column:623},end:{line:1,column:642}},"9":{start:{line:1,column:643},end:{line:1,column:682}},"10":{start:{line:1,column:670},end:{line:1,column:679}},"11":{start:{line:1,column:688},end:{line:1,column:722}},"12":{start:{line:1,column:730},end:{line:1,column:837}},"13":{start:{line:1,column:841},end:{line:1,column:871}},"14":{start:{line:1,column:875},end:{line:1,column:972}},"15":{start:{line:1,column:878},end:{line:1,column:972}},"16":{start:{line:1,column:975},end:{line:1,column:1115}},"17":{start:{line:1,column:998},end:{line:1,column:1115}},"18":{start:{line:1,column:1119},end:{line:1,column:1239}},"19":{start:{line:1,column:1133},end:{line:1,column:1147}},"20":{start:{line:1,column:1148},end:{line:1,column:1238}},"21":{start:{line:1,column:1181},end:{line:1,column:1203}},"22":{start:{line:1,column:1204},end:{line:1,column:1218}},"23":{start:{line:1,column:1255},end:{line:1,column:1381}},"24":{start:{line:1,column:1406},end:{line:1,column:1481}},"25":{start:{line:1,column:1436},end:{line:1,column:1481}},"26":{start:{line:1,column:1481},end:{line:1,column:1553}},"27":{start:{line:1,column:1532},end:{line:1,column:1553}},"28":{start:{line:1,column:1553},end:{line:1,column:1606}},"29":{start:{line:1,column:1564},end:{line:1,column:1604}},"30":{start:{line:1,column:1614},end:{line:1,column:1680}},"31":{start:{line:1,column:1683},end:{line:1,column:1727}},"32":{start:{line:1,column:1728},end:{line:1,column:1778}},"33":{start:{line:1,column:1738},end:{line:1,column:1739}},"34":{start:{line:1,column:1756},end:{line:1,column:1778}},"35":{start:{line:1,column:1785},end:{line:1,column:2106}},"36":{start:{line:1,column:1795},end:{line:1,column:1807}},"37":{start:{line:1,column:1810},end:{line:1,column:1818}},"38":{start:{line:1,column:1823},end:{line:1,column:1824}},"39":{start:{line:1,column:1833},end:{line:1,column:1885}},"40":{start:{line:1,column:1891},end:{line:1,column:1909}},"41":{start:{line:1,column:1912},end:{line:1,column:1929}},"42":{start:{line:1,column:1930},end:{line:1,column:2097}},"43":{start:{line:1,column:1947},end:{line:1,column:2097}},"44":{start:{line:1,column:2097},end:{line:1,column:2105}},"45":{start:{line:1,column:2114},end:{line:1,column:2144}},"46":{start:{line:1,column:2147},end:{line:1,column:2351}},"47":{start:{line:1,column:2155},end:{line:1,column:2213}},"48":{start:{line:1,column:2177},end:{line:1,column:2213}},"49":{start:{line:1,column:2219},end:{line:1,column:2230}},"50":{start:{line:1,column:2231},end:{line:1,column:2350}},"51":{start:{line:1,column:2355},end:{line:1,column:2427}},"52":{start:{line:1,column:2363},end:{line:1,column:2426}},"53":{start:{line:1,column:2376},end:{line:1,column:2381}},"54":{start:{line:1,column:2382},end:{line:1,column:2396}},"55":{start:{line:1,column:2402},end:{line:1,column:2426}},"56":{start:{line:1,column:2431},end:{line:1,column:2518}},"57":{start:{line:1,column:2438},end:{line:1,column:2518}},"58":{start:{line:1,column:2526},end:{line:1,column:2529}},"59":{start:{line:1,column:2533},end:{line:1,column:2638}},"60":{start:{line:1,column:2547},end:{line:1,column:2555}},"61":{start:{line:1,column:2558},end:{line:1,column:2570}},"62":{start:{line:1,column:2573},end:{line:1,column:2574}},"63":{start:{line:1,column:2575},end:{line:1,column:2637}},"64":{start:{line:1,column:2593},end:{line:1,column:2635}},"65":{start:{line:1,column:2604},end:{line:1,column:2633}},"66":{start:{line:1,column:2642},end:{line:1,column:2762}},"67":{start:{line:1,column:2656},end:{line:1,column:2667}},"68":{start:{line:1,column:2670},end:{line:1,column:2672}},"69":{start:{line:1,column:2673},end:{line:1,column:2753}},"70":{start:{line:1,column:2683},end:{line:1,column:2684}},"71":{start:{line:1,column:2707},end:{line:1,column:2716}},"72":{start:{line:1,column:2717},end:{line:1,column:2752}},"73":{start:{line:1,column:2747},end:{line:1,column:2752}},"74":{start:{line:1,column:2753},end:{line:1,column:2761}},"75":{start:{line:1,column:2777},end:{line:1,column:3188}},"76":{start:{line:1,column:2820},end:{line:1,column:3185}},"77":{start:{line:1,column:2835},end:{line:1,column:2843}},"78":{start:{line:1,column:2846},end:{line:1,column:3113}},"79":{start:{line:1,column:2855},end:{line:1,column:2912}},"80":{start:{line:1,column:2917},end:{line:1,column:3113}},"81":{start:{line:1,column:2929},end:{line:1,column:2949}},"82":{start:{line:1,column:2955},end:{line:1,column:2977}},"83":{start:{line:1,column:2978},end:{line:1,column:3012}},"84":{start:{line:1,column:3018},end:{line:1,column:3038}},"85":{start:{line:1,column:3044},end:{line:1,column:3066}},"86":{start:{line:1,column:3067},end:{line:1,column:3112}},"87":{start:{line:1,column:3113},end:{line:1,column:3183}},"88":{start:{line:1,column:3210},end:{line:1,column:3246}},"89":{start:{line:1,column:3233},end:{line:1,column:3243}},"90":{start:{line:1,column:3263},end:{line:1,column:3299}},"91":{start:{line:1,column:3282},end:{line:1,column:3299}},"92":{start:{line:1,column:3305},end:{line:1,column:3322}},"93":{start:{line:1,column:3325},end:{line:1,column:3326}},"94":{start:{line:1,column:3327},end:{line:1,column:3395}},"95":{start:{line:1,column:3337},end:{line:1,column:3338}},"96":{start:{line:1,column:3347},end:{line:1,column:3395}},"97":{start:{line:1,column:3395},end:{line:1,column:3449}},"98":{start:{line:1,column:3467},end:{line:1,column:3492}},"99":{start:{line:1,column:3498},end:{line:1,column:3500}},"100":{start:{line:1,column:3503},end:{line:1,column:3504}},"101":{start:{line:1,column:3507},end:{line:1,column:3509}},"102":{start:{line:1,column:3512},end:{line:1,column:3514}},"103":{start:{line:1,column:3515},end:{line:1,column:4075}},"104":{start:{line:1,column:3558},end:{line:1,column:4072}},"105":{start:{line:1,column:3575},end:{line:1,column:4037}},"106":{start:{line:1,column:3585},end:{line:1,column:3601}},"107":{start:{line:1,column:3595},end:{line:1,column:3601}},"108":{start:{line:1,column:3607},end:{line:1,column:3613}},"109":{start:{line:1,column:3614},end:{line:1,column:3669}},"110":{start:{line:1,column:3675},end:{line:1,column:4037}},"111":{start:{line:1,column:3685},end:{line:1,column:3701}},"112":{start:{line:1,column:3695},end:{line:1,column:3701}},"113":{start:{line:1,column:3707},end:{line:1,column:3713}},"114":{start:{line:1,column:3714},end:{line:1,column:3777}},"115":{start:{line:1,column:3783},end:{line:1,column:4037}},"116":{start:{line:1,column:3793},end:{line:1,column:3809}},"117":{start:{line:1,column:3803},end:{line:1,column:3809}},"118":{start:{line:1,column:3815},end:{line:1,column:3821}},"119":{start:{line:1,column:3824},end:{line:1,column:3868}},"120":{start:{line:1,column:3871},end:{line:1,column:3885}},"121":{start:{line:1,column:3886},end:{line:1,column:3928}},"122":{start:{line:1,column:3909},end:{line:1,column:3922}},"123":{start:{line:1,column:3922},end:{line:1,column:3927}},"124":{start:{line:1,column:3928},end:{line:1,column:3965}},"125":{start:{line:1,column:3971},end:{line:1,column:3987}},"126":{start:{line:1,column:3981},end:{line:1,column:3987}},"127":{start:{line:1,column:3993},end:{line:1,column:3999}},"128":{start:{line:1,column:4000},end:{line:1,column:4036}},"129":{start:{line:1,column:4037},end:{line:1,column:4071}},"130":{start:{line:1,column:4052},end:{line:1,column:4065}},"131":{start:{line:1,column:4065},end:{line:1,column:4070}},"132":{start:{line:1,column:4083},end:{line:1,column:4084}},"133":{start:{line:1,column:4099},end:{line:1,column:4116}},"134":{start:{line:1,column:4104},end:{line:1,column:4116}},"135":{start:{line:1,column:4132},end:{line:1,column:4177}},"136":{start:{line:1,column:4157},end:{line:1,column:4177}},"137":{start:{line:1,column:4177},end:{line:1,column:4185}},"138":{start:{line:1,column:4186},end:{line:1,column:4353}},"139":{start:{line:1,column:4244},end:{line:1,column:4351}},"140":{start:{line:1,column:4353},end:{line:1,column:4468}},"141":{start:{line:1,column:4397},end:{line:1,column:4434}},"142":{start:{line:1,column:4435},end:{line:1,column:4466}},"143":{start:{line:1,column:4468},end:{line:1,column:4923}},"144":{start:{line:1,column:4588},end:{line:1,column:4678}},"145":{start:{line:1,column:4647},end:{line:1,column:4678}},"146":{start:{line:1,column:4684},end:{line:1,column:4706}},"147":{start:{line:1,column:4707},end:{line:1,column:4725}},"148":{start:{line:1,column:4713},end:{line:1,column:4725}},"149":{start:{line:1,column:4725},end:{line:1,column:4790}},"150":{start:{line:1,column:4748},end:{line:1,column:4790}},"151":{start:{line:1,column:4790},end:{line:1,column:4866}},"152":{start:{line:1,column:4802},end:{line:1,column:4803}},"153":{start:{line:1,column:4819},end:{line:1,column:4866}},"154":{start:{line:1,column:4846},end:{line:1,column:4860}},"155":{start:{line:1,column:4860},end:{line:1,column:4865}},"156":{start:{line:1,column:4866},end:{line:1,column:4921}},"157":{start:{line:1,column:4923},end:{line:1,column:5182}},"158":{start:{line:1,column:4952},end:{line:1,column:4988}},"159":{start:{line:1,column:4988},end:{line:1,column:5100}},"160":{start:{line:1,column:4998},end:{line:1,column:5027}},"161":{start:{line:1,column:5030},end:{line:1,column:5052}},"162":{start:{line:1,column:5055},end:{line:1,column:5056}},"163":{start:{line:1,column:5080},end:{line:1,column:5100}},"164":{start:{line:1,column:5100},end:{line:1,column:5169}},"165":{start:{line:1,column:5106},end:{line:1,column:5119}},"166":{start:{line:1,column:5119},end:{line:1,column:5168}},"167":{start:{line:1,column:5129},end:{line:1,column:5130}},"168":{start:{line:1,column:5133},end:{line:1,column:5141}},"169":{start:{line:1,column:5150},end:{line:1,column:5168}},"170":{start:{line:1,column:5169},end:{line:1,column:5180}},"171":{start:{line:1,column:5182},end:{line:1,column:5224}},"172":{start:{line:1,column:5224},end:{line:1,column:5329}},"173":{start:{line:1,column:5258},end:{line:1,column:5327}},"174":{start:{line:1,column:5329},end:{line:1,column:5400}},"175":{start:{line:1,column:5366},end:{line:1,column:5398}},"176":{start:{line:1,column:5406},end:{line:1,column:5511}},"177":{start:{line:1,column:5472},end:{line:1,column:5497}},"178":{start:{line:1,column:5505},end:{line:1,column:5511}},"179":{start:{line:1,column:5514},end:{line:1,column:5585}},"180":{start:{line:1,column:5589},end:{line:1,column:5602}},"181":{start:{line:1,column:5622},end:{line:1,column:5685}},"182":{start:{line:1,column:5646},end:{line:1,column:5680}},"183":{start:{line:1,column:5693},end:{line:1,column:5705}},"184":{start:{line:1,column:5709},end:{line:1,column:5723}},"185":{start:{line:1,column:5740},end:{line:1,column:5891}},"186":{start:{line:1,column:5899},end:{line:1,column:5903}},"187":{start:{line:1,column:5919},end:{line:1,column:5987}},"188":{start:{line:1,column:6009},end:{line:1,column:6010}},"189":{start:{line:1,column:6013},end:{line:1,column:6014}},"190":{start:{line:1,column:6015},end:{line:1,column:6121}},"191":{start:{line:1,column:6025},end:{line:1,column:6026}},"192":{start:{line:1,column:6029},end:{line:1,column:6037}},"193":{start:{line:1,column:6046},end:{line:1,column:6121}},"194":{start:{line:1,column:6121},end:{line:1,column:6129}},"195":{start:{line:1,column:6143},end:{line:1,column:6228}},"196":{start:{line:1,column:6250},end:{line:1,column:6252}},"197":{start:{line:1,column:6253},end:{line:1,column:6364}},"198":{start:{line:1,column:6268},end:{line:1,column:6364}},"199":{start:{line:1,column:6364},end:{line:1,column:6372}},"200":{start:{line:1,column:6394},end:{line:1,column:6396}},"201":{start:{line:1,column:6399},end:{line:1,column:6411}},"202":{start:{line:1,column:6412},end:{line:1,column:6519}},"203":{start:{line:1,column:6422},end:{line:1,column:6423}},"204":{start:{line:1,column:6426},end:{line:1,column:6434}},"205":{start:{line:1,column:6450},end:{line:1,column:6465}},"206":{start:{line:1,column:6466},end:{line:1,column:6518}},"207":{start:{line:1,column:6519},end:{line:1,column:6527}},"208":{start:{line:1,column:6534},end:{line:1,column:6644}},"209":{start:{line:1,column:6573},end:{line:1,column:6642}},"210":{start:{line:1,column:6647},end:{line:1,column:7706}},"211":{start:{line:1,column:6678},end:{line:1,column:6799}},"212":{start:{line:1,column:6815},end:{line:1,column:6867}},"213":{start:{line:1,column:6875},end:{line:1,column:6926}},"214":{start:{line:1,column:6935},end:{line:1,column:7034}},"215":{start:{line:1,column:7043},end:{line:1,column:7082}},"216":{start:{line:1,column:7092},end:{line:1,column:7158}},"217":{start:{line:1,column:7175},end:{line:1,column:7202}},"218":{start:{line:1,column:7203},end:{line:1,column:7219}},"219":{start:{line:1,column:7232},end:{line:1,column:7262}},"220":{start:{line:1,column:7274},end:{line:1,column:7328}},"221":{start:{line:1,column:7357},end:{line:1,column:7431}},"222":{start:{line:1,column:7450},end:{line:1,column:7468}},"223":{start:{line:1,column:7469},end:{line:1,column:7507}},"224":{start:{line:1,column:7516},end:{line:1,column:7657}},"225":{start:{line:1,column:7674},end:{line:1,column:7679}},"226":{start:{line:1,column:7680},end:{line:1,column:7704}},"227":{start:{line:1,column:7713},end:{line:1,column:8899}},"228":{start:{line:1,column:7743},end:{line:1,column:7779}},"229":{start:{line:1,column:7791},end:{line:1,column:7806}},"230":{start:{line:1,column:7816},end:{line:1,column:7828}},"231":{start:{line:1,column:7838},end:{line:1,column:7864}},"232":{start:{line:1,column:7870},end:{line:1,column:7904}},"233":{start:{line:1,column:7875},end:{line:1,column:7903}},"234":{start:{line:1,column:7905},end:{line:1,column:8084}},"235":{start:{line:1,column:7945},end:{line:1,column:7946}},"236":{start:{line:1,column:7947},end:{line:1,column:8075}},"237":{start:{line:1,column:8003},end:{line:1,column:8011}},"238":{start:{line:1,column:8064},end:{line:1,column:8072}},"239":{start:{line:1,column:8081},end:{line:1,column:8084}},"240":{start:{line:1,column:8093},end:{line:1,column:8149}},"241":{start:{line:1,column:8166},end:{line:1,column:8338}},"242":{start:{line:1,column:8170},end:{line:1,column:8321}},"243":{start:{line:1,column:8250},end:{line:1,column:8321}},"244":{start:{line:1,column:8321},end:{line:1,column:8337}},"245":{start:{line:1,column:8339},end:{line:1,column:8498}},"246":{start:{line:1,column:8515},end:{line:1,column:8549}},"247":{start:{line:1,column:8520},end:{line:1,column:8548}},"248":{start:{line:1,column:8550},end:{line:1,column:8598}},"249":{start:{line:1,column:8608},end:{line:1,column:8701}},"250":{start:{line:1,column:8634},end:{line:1,column:8699}},"251":{start:{line:1,column:8654},end:{line:1,column:8697}},"252":{start:{line:1,column:8714},end:{line:1,column:8745}},"253":{start:{line:1,column:8748},end:{line:1,column:8762}},"254":{start:{line:1,column:8763},end:{line:1,column:8897}},"255":{start:{line:1,column:8907},end:{line:1,column:8909}},"256":{start:{line:1,column:8910},end:{line:1,column:8990}},"257":{start:{line:1,column:8914},end:{line:1,column:8982}},"258":{start:{line:1,column:8997},end:{line:1,column:8999}},"259":{start:{line:1,column:9022},end:{line:1,column:9502}},"260":{start:{line:1,column:9053},end:{line:1,column:9229}},"261":{start:{line:1,column:9092},end:{line:1,column:9120}},"262":{start:{line:1,column:9123},end:{line:1,column:9136}},"263":{start:{line:1,column:9137},end:{line:1,column:9228}},"264":{start:{line:1,column:9249},end:{line:1,column:9285}},"265":{start:{line:1,column:9286},end:{line:1,column:9361}},"266":{start:{line:1,column:9325},end:{line:1,column:9359}},"267":{start:{line:1,column:9377},end:{line:1,column:9391}},"268":{start:{line:1,column:9392},end:{line:1,column:9500}},"269":{start:{line:1,column:9449},end:{line:1,column:9483}},"270":{start:{line:1,column:9505},end:{line:1,column:11392}},"271":{start:{line:1,column:9548},end:{line:1,column:9694}},"272":{start:{line:1,column:9717},end:{line:1,column:9818}},"273":{start:{line:1,column:9819},end:{line:1,column:9845}},"274":{start:{line:1,column:9851},end:{line:1,column:9882}},"275":{start:{line:1,column:9883},end:{line:1,column:10856}},"276":{start:{line:1,column:9887},end:{line:1,column:9921}},"277":{start:{line:1,column:9921},end:{line:1,column:10143}},"278":{start:{line:1,column:9925},end:{line:1,column:10135}},"279":{start:{line:1,column:9953},end:{line:1,column:10006}},"280":{start:{line:1,column:10006},end:{line:1,column:10134}},"281":{start:{line:1,column:10043},end:{line:1,column:10134}},"282":{start:{line:1,column:10143},end:{line:1,column:10241}},"283":{start:{line:1,column:10168},end:{line:1,column:10241}},"284":{start:{line:1,column:10172},end:{line:1,column:10233}},"285":{start:{line:1,column:10241},end:{line:1,column:10287}},"286":{start:{line:1,column:10245},end:{line:1,column:10279}},"287":{start:{line:1,column:10287},end:{line:1,column:10795}},"288":{start:{line:1,column:10515},end:{line:1,column:10775}},"289":{start:{line:1,column:10719},end:{line:1,column:10770}},"290":{start:{line:1,column:10805},end:{line:1,column:10849}},"291":{start:{line:1,column:10828},end:{line:1,column:10844}},"292":{start:{line:1,column:10849},end:{line:1,column:10855}},"293":{start:{line:1,column:10856},end:{line:1,column:10937}},"294":{start:{line:1,column:10950},end:{line:1,column:11006}},"295":{start:{line:1,column:11019},end:{line:1,column:11198}},"296":{start:{line:1,column:11065},end:{line:1,column:11131}},"297":{start:{line:1,column:11102},end:{line:1,column:11131}},"298":{start:{line:1,column:11106},end:{line:1,column:11123}},"299":{start:{line:1,column:11131},end:{line:1,column:11197}},"300":{start:{line:1,column:11215},end:{line:1,column:11237}},"301":{start:{line:1,column:11238},end:{line:1,column:11322}},"302":{start:{line:1,column:11331},end:{line:1,column:11346}},"303":{start:{line:1,column:11348},end:{line:1,column:11388}},"304":{start:{line:1,column:11393},end:{line:1,column:11593}},"305":{start:{line:1,column:11417},end:{line:1,column:11592}},"306":{start:{line:1,column:11451},end:{line:1,column:11478}},"307":{start:{line:1,column:11483},end:{line:1,column:11592}},"308":{start:{line:1,column:11529},end:{line:1,column:11565}},"309":{start:{line:1,column:11566},end:{line:1,column:11591}},"310":{start:{line:1,column:11607},end:{line:1,column:11682}},"311":{start:{line:1,column:11631},end:{line:1,column:11682}},"312":{start:{line:1,column:11690},end:{line:1,column:11760}},"313":{start:{line:1,column:11708},end:{line:1,column:11724}},"314":{start:{line:1,column:11725},end:{line:1,column:11756}},"315":{start:{line:1,column:11763},end:{line:1,column:11939}},"316":{start:{line:1,column:11795},end:{line:1,column:11804}},"317":{start:{line:1,column:11810},end:{line:1,column:11826}},"318":{start:{line:1,column:11827},end:{line:1,column:11853}},"319":{start:{line:1,column:11868},end:{line:1,column:11937}},"320":{start:{line:1,column:11961},end:{line:1,column:11970}},"321":{start:{line:1,column:11971},end:{line:1,column:12047}},"322":{start:{line:1,column:11975},end:{line:1,column:12039}},"323":{start:{line:1,column:12014},end:{line:1,column:12039}},"324":{start:{line:1,column:12047},end:{line:1,column:12137}},"325":{start:{line:1,column:12053},end:{line:1,column:12137}},"326":{start:{line:1,column:12057},end:{line:1,column:12129}},"327":{start:{line:1,column:12145},end:{line:1,column:12250}},"328":{start:{line:1,column:12254},end:{line:1,column:13518}},"329":{start:{line:1,column:12281},end:{line:1,column:12298}},"330":{start:{line:1,column:12314},end:{line:1,column:12324}},"331":{start:{line:1,column:12327},end:{line:1,column:12346}},"332":{start:{line:1,column:12349},end:{line:1,column:12549}},"333":{start:{line:1,column:12550},end:{line:1,column:12609}},"334":{start:{line:1,column:12609},end:{line:1,column:12691}},"335":{start:{line:1,column:12613},end:{line:1,column:12645}},"336":{start:{line:1,column:12655},end:{line:1,column:12690}},"337":{start:{line:1,column:12691},end:{line:1,column:12757}},"338":{start:{line:1,column:12778},end:{line:1,column:13038}},"339":{start:{line:1,column:12798},end:{line:1,column:12856}},"340":{start:{line:1,column:12877},end:{line:1,column:12944}},"341":{start:{line:1,column:12966},end:{line:1,column:12985}},"342":{start:{line:1,column:13005},end:{line:1,column:13038}},"343":{start:{line:1,column:13048},end:{line:1,column:13065}},"344":{start:{line:1,column:13065},end:{line:1,column:13254}},"345":{start:{line:1,column:13075},end:{line:1,column:13076}},"346":{start:{line:1,column:13099},end:{line:1,column:13103}},"347":{start:{line:1,column:13106},end:{line:1,column:13120}},"348":{start:{line:1,column:13121},end:{line:1,column:13253}},"349":{start:{line:1,column:13149},end:{line:1,column:13178}},"350":{start:{line:1,column:13153},end:{line:1,column:13170}},"351":{start:{line:1,column:13178},end:{line:1,column:13251}},"352":{start:{line:1,column:13188},end:{line:1,column:13231}},"353":{start:{line:1,column:13265},end:{line:1,column:13338}},"354":{start:{line:1,column:13351},end:{line:1,column:13378}},"355":{start:{line:1,column:13381},end:{line:1,column:13395}},"356":{start:{line:1,column:13396},end:{line:1,column:13516}},"357":{start:{line:1,column:13522},end:{line:1,column:13549}},"358":{start:{line:1,column:13552},end:{line:1,column:13667}},"359":{start:{line:1,column:13589},end:{line:1,column:13636}},"360":{start:{line:1,column:13650},end:{line:1,column:13665}},"361":{start:{line:1,column:13674},end:{line:1,column:14705}},"362":{start:{line:1,column:13701},end:{line:1,column:13721}},"363":{start:{line:1,column:13731},end:{line:1,column:13876}},"364":{start:{line:1,column:13735},end:{line:1,column:13830}},"365":{start:{line:1,column:13840},end:{line:1,column:13875}},"366":{start:{line:1,column:13876},end:{line:1,column:14446}},"367":{start:{line:1,column:13909},end:{line:1,column:13923}},"368":{start:{line:1,column:13936},end:{line:1,column:13972}},"369":{start:{line:1,column:14007},end:{line:1,column:14444}},"370":{start:{line:1,column:14066},end:{line:1,column:14116}},"371":{start:{line:1,column:14119},end:{line:1,column:14156}},"372":{start:{line:1,column:14159},end:{line:1,column:14163}},"373":{start:{line:1,column:14164},end:{line:1,column:14230}},"374":{start:{line:1,column:14236},end:{line:1,column:14317}},"375":{start:{line:1,column:14241},end:{line:1,column:14316}},"376":{start:{line:1,column:14276},end:{line:1,column:14301}},"377":{start:{line:1,column:14318},end:{line:1,column:14322}},"378":{start:{line:1,column:14328},end:{line:1,column:14341}},"379":{start:{line:1,column:14342},end:{line:1,column:14442}},"380":{start:{line:1,column:14428},end:{line:1,column:14441}},"381":{start:{line:1,column:14456},end:{line:1,column:14473}},"382":{start:{line:1,column:14473},end:{line:1,column:14637}},"383":{start:{line:1,column:14483},end:{line:1,column:14484}},"384":{start:{line:1,column:14507},end:{line:1,column:14511}},"385":{start:{line:1,column:14514},end:{line:1,column:14528}},"386":{start:{line:1,column:14529},end:{line:1,column:14636}},"387":{start:{line:1,column:14561},end:{line:1,column:14634}},"388":{start:{line:1,column:14571},end:{line:1,column:14614}},"389":{start:{line:1,column:14654},end:{line:1,column:14703}},"390":{start:{line:1,column:14713},end:{line:1,column:14751}},"391":{start:{line:1,column:14759},end:{line:1,column:15004}},"392":{start:{line:1,column:15008},end:{line:1,column:15138}},"393":{start:{line:1,column:15153},end:{line:1,column:15189}},"394":{start:{line:1,column:15169},end:{line:1,column:15189}},"395":{start:{line:1,column:15195},end:{line:1,column:15196}},"396":{start:{line:1,column:15199},end:{line:1,column:15213}},"397":{start:{line:1,column:15216},end:{line:1,column:15230}},"398":{start:{line:1,column:15231},end:{line:1,column:15325}},"399":{start:{line:1,column:15331},end:{line:1,column:15345}},"400":{start:{line:1,column:15348},end:{line:1,column:15350}},"401":{start:{line:1,column:15353},end:{line:1,column:15355}},"402":{start:{line:1,column:15356},end:{line:1,column:15384}},"403":{start:{line:1,column:15366},end:{line:1,column:15384}},"404":{start:{line:1,column:15384},end:{line:1,column:15617}},"405":{start:{line:1,column:15641},end:{line:1,column:15651}},"406":{start:{line:1,column:15654},end:{line:1,column:15681}},"407":{start:{line:1,column:15682},end:{line:1,column:15779}},"408":{start:{line:1,column:15803},end:{line:1,column:15805}},"409":{start:{line:1,column:15806},end:{line:1,column:15882}},"410":{start:{line:1,column:15867},end:{line:1,column:15878}},"411":{start:{line:1,column:15890},end:{line:1,column:15965}},"412":{start:{line:1,column:15968},end:{line:1,column:15970}},"413":{start:{line:1,column:15971},end:{line:1,column:16030}},"414":{start:{line:1,column:16007},end:{line:1,column:16024}},"415":{start:{line:1,column:16020},end:{line:1,column:16023}},"416":{start:{line:1,column:16037},end:{line:1,column:22345}},"417":{start:{line:1,column:16078},end:{line:1,column:16439}},"418":{start:{line:1,column:16284},end:{line:1,column:16288}},"419":{start:{line:1,column:16289},end:{line:1,column:16397}},"420":{start:{line:1,column:16403},end:{line:1,column:16439}},"421":{start:{line:1,column:16439},end:{line:1,column:17763}},"422":{start:{line:1,column:16834},end:{line:1,column:16850}},"423":{start:{line:1,column:16851},end:{line:1,column:16902}},"424":{start:{line:1,column:17379},end:{line:1,column:17455}},"425":{start:{line:1,column:17588},end:{line:1,column:17660}},"426":{start:{line:1,column:17789},end:{line:1,column:17822}},"427":{start:{line:1,column:17823},end:{line:1,column:17871}},"428":{start:{line:1,column:17877},end:{line:1,column:18013}},"429":{start:{line:1,column:18014},end:{line:1,column:18053}},"430":{start:{line:1,column:18062},end:{line:1,column:18180}},"431":{start:{line:1,column:18093},end:{line:1,column:18173}},"432":{start:{line:1,column:18116},end:{line:1,column:18168}},"433":{start:{line:1,column:18173},end:{line:1,column:18179}},"434":{start:{line:1,column:18186},end:{line:1,column:18310}},"435":{start:{line:1,column:18311},end:{line:1,column:18337}},"436":{start:{line:1,column:18343},end:{line:1,column:18366}},"437":{start:{line:1,column:18367},end:{line:1,column:18396}},"438":{start:{line:1,column:18413},end:{line:1,column:18646}},"439":{start:{line:1,column:18611},end:{line:1,column:18645}},"440":{start:{line:1,column:18656},end:{line:1,column:18775}},"441":{start:{line:1,column:18789},end:{line:1,column:19294}},"442":{start:{line:1,column:18875},end:{line:1,column:19294}},"443":{start:{line:1,column:18962},end:{line:1,column:18999}},"444":{start:{line:1,column:18999},end:{line:1,column:19005}},"445":{start:{line:1,column:19016},end:{line:1,column:19118}},"446":{start:{line:1,column:19118},end:{line:1,column:19124}},"447":{start:{line:1,column:19142},end:{line:1,column:19167}},"448":{start:{line:1,column:19168},end:{line:1,column:19199}},"449":{start:{line:1,column:19199},end:{line:1,column:19205}},"450":{start:{line:1,column:19219},end:{line:1,column:19288}},"451":{start:{line:1,column:19288},end:{line:1,column:19293}},"452":{start:{line:1,column:19310},end:{line:1,column:19550}},"453":{start:{line:1,column:19571},end:{line:1,column:19615}},"454":{start:{line:1,column:19621},end:{line:1,column:19657}},"455":{start:{line:1,column:19658},end:{line:1,column:19824}},"456":{start:{line:1,column:19739},end:{line:1,column:19768}},"457":{start:{line:1,column:19836},end:{line:1,column:19972}},"458":{start:{line:1,column:19981},end:{line:1,column:20191}},"459":{start:{line:1,column:20085},end:{line:1,column:20111}},"460":{start:{line:1,column:20112},end:{line:1,column:20190}},"461":{start:{line:1,column:20214},end:{line:1,column:20321}},"462":{start:{line:1,column:20297},end:{line:1,column:20321}},"463":{start:{line:1,column:20327},end:{line:1,column:20328}},"464":{start:{line:1,column:20329},end:{line:1,column:20484}},"465":{start:{line:1,column:20339},end:{line:1,column:20340}},"466":{start:{line:1,column:20378},end:{line:1,column:20402}},"467":{start:{line:1,column:20403},end:{line:1,column:20479}},"468":{start:{line:1,column:20444},end:{line:1,column:20479}},"469":{start:{line:1,column:20479},end:{line:1,column:20483}},"470":{start:{line:1,column:20484},end:{line:1,column:20507}},"471":{start:{line:1,column:20526},end:{line:1,column:20561}},"472":{start:{line:1,column:20552},end:{line:1,column:20561}},"473":{start:{line:1,column:20567},end:{line:1,column:20599}},"474":{start:{line:1,column:20600},end:{line:1,column:20694}},"475":{start:{line:1,column:20642},end:{line:1,column:20671}},"476":{start:{line:1,column:20708},end:{line:1,column:20753}},"477":{start:{line:1,column:20766},end:{line:1,column:20811}},"478":{start:{line:1,column:20833},end:{line:1,column:20971}},"479":{start:{line:1,column:20964},end:{line:1,column:20971}},"480":{start:{line:1,column:20971},end:{line:1,column:21006}},"481":{start:{line:1,column:21012},end:{line:1,column:21037}},"482":{start:{line:1,column:21038},end:{line:1,column:21135}},"483":{start:{line:1,column:21150},end:{line:1,column:21208}},"484":{start:{line:1,column:21155},end:{line:1,column:21207}},"485":{start:{line:1,column:21211},end:{line:1,column:21269}},"486":{start:{line:1,column:21216},end:{line:1,column:21268}},"487":{start:{line:1,column:21272},end:{line:1,column:21328}},"488":{start:{line:1,column:21277},end:{line:1,column:21327}},"489":{start:{line:1,column:21329},end:{line:1,column:21519}},"490":{start:{line:1,column:21466},end:{line:1,column:21488}},"491":{start:{line:1,column:21532},end:{line:1,column:21688}},"492":{start:{line:1,column:21644},end:{line:1,column:21688}},"493":{start:{line:1,column:21688},end:{line:1,column:21751}},"494":{start:{line:1,column:21766},end:{line:1,column:22317}},"495":{start:{line:1,column:21853},end:{line:1,column:22206}},"496":{start:{line:1,column:22146},end:{line:1,column:22183}},"497":{start:{line:1,column:22184},end:{line:1,column:22205}},"498":{start:{line:1,column:22206},end:{line:1,column:22316}},"499":{start:{line:1,column:22319},end:{line:1,column:22341}},"500":{start:{line:1,column:22349},end:{line:1,column:23937}},"501":{start:{line:1,column:22380},end:{line:1,column:22417}},"502":{start:{line:1,column:22427},end:{line:1,column:22559}},"503":{start:{line:1,column:22489},end:{line:1,column:22559}},"504":{start:{line:1,column:22499},end:{line:1,column:22500}},"505":{start:{line:1,column:22529},end:{line:1,column:22559}},"506":{start:{line:1,column:22576},end:{line:1,column:22599}},"507":{start:{line:1,column:22602},end:{line:1,column:22604}},"508":{start:{line:1,column:22605},end:{line:1,column:22633}},"509":{start:{line:1,column:22639},end:{line:1,column:23136}},"510":{start:{line:1,column:22644},end:{line:1,column:23135}},"511":{start:{line:1,column:22705},end:{line:1,column:23132}},"512":{start:{line:1,column:22711},end:{line:1,column:23132}},"513":{start:{line:1,column:22749},end:{line:1,column:22813}},"514":{start:{line:1,column:22806},end:{line:1,column:22813}},"515":{start:{line:1,column:22813},end:{line:1,column:23040}},"516":{start:{line:1,column:22885},end:{line:1,column:23038}},"517":{start:{line:1,column:23052},end:{line:1,column:23076}},"518":{start:{line:1,column:23077},end:{line:1,column:23131}},"519":{start:{line:1,column:23150},end:{line:1,column:23180}},"520":{start:{line:1,column:23187},end:{line:1,column:23285}},"521":{start:{line:1,column:23197},end:{line:1,column:23225}},"522":{start:{line:1,column:23226},end:{line:1,column:23284}},"523":{start:{line:1,column:23299},end:{line:1,column:23320}},"524":{start:{line:1,column:23334},end:{line:1,column:23352}},"525":{start:{line:1,column:23367},end:{line:1,column:23390}},"526":{start:{line:1,column:23397},end:{line:1,column:23529}},"527":{start:{line:1,column:23402},end:{line:1,column:23528}},"528":{start:{line:1,column:23530},end:{line:1,column:23742}},"529":{start:{line:1,column:23716},end:{line:1,column:23727}},"530":{start:{line:1,column:23758},end:{line:1,column:23826}},"531":{start:{line:1,column:23852},end:{line:1,column:23854}},"532":{start:{line:1,column:23855},end:{line:1,column:23927}},"533":{start:{line:1,column:23865},end:{line:1,column:23866}},"534":{start:{line:1,column:23882},end:{line:1,column:23927}},"535":{start:{line:1,column:23927},end:{line:1,column:23935}},"536":{start:{line:1,column:23940},end:{line:1,column:24182}},"537":{start:{line:1,column:23983},end:{line:1,column:24005}},"538":{start:{line:1,column:24006},end:{line:1,column:24180}},"539":{start:{line:1,column:24147},end:{line:1,column:24152}},"540":{start:{line:1,column:24164},end:{line:1,column:24167}},"541":{start:{line:1,column:24190},end:{line:1,column:24200}},"542":{start:{line:1,column:24229},end:{line:1,column:24230}},"543":{start:{line:1,column:24231},end:{line:1,column:24597}},"544":{start:{line:1,column:24603},end:{line:1,column:24649}},"545":{start:{line:1,column:24650},end:{line:1,column:24756}},"546":{start:{line:1,column:24764},end:{line:1,column:24766}},"547":{start:{line:1,column:24767},end:{line:1,column:24860}},"548":{start:{line:1,column:24786},end:{line:1,column:24788}},"549":{start:{line:1,column:24801},end:{line:1,column:24803}},"550":{start:{line:1,column:24819},end:{line:1,column:24820}},"551":{start:{line:1,column:24839},end:{line:1,column:24841}},"552":{start:{line:1,column:24855},end:{line:1,column:24857}},"553":{start:{line:1,column:24867},end:{line:1,column:24897}},"554":{start:{line:1,column:24901},end:{line:1,column:24995}},"555":{start:{line:1,column:24904},end:{line:1,column:24995}},"556":{start:{line:1,column:24999},end:{line:1,column:25024}},"557":{start:{line:1,column:25028},end:{line:1,column:25112}},"558":{start:{line:1,column:25116},end:{line:1,column:25200}},"559":{start:{line:1,column:25215},end:{line:1,column:25305}},"560":{start:{line:1,column:25322},end:{line:1,column:25357}},"561":{start:{line:1,column:25348},end:{line:1,column:25357}},"562":{start:{line:1,column:25357},end:{line:1,column:25438}},"563":{start:{line:1,column:25378},end:{line:1,column:25429}},"564":{start:{line:1,column:25388},end:{line:1,column:25389}},"565":{start:{line:1,column:25392},end:{line:1,column:25400}},"566":{start:{line:1,column:25409},end:{line:1,column:25429}},"567":{start:{line:1,column:25420},end:{line:1,column:25429}},"568":{start:{line:1,column:25429},end:{line:1,column:25437}},"569":{start:{line:1,column:25438},end:{line:1,column:25455}},"570":{start:{line:1,column:25446},end:{line:1,column:25455}},"571":{start:{line:1,column:25455},end:{line:1,column:25542}},"572":{start:{line:1,column:25518},end:{line:1,column:25542}},"573":{start:{line:1,column:25542},end:{line:1,column:25620}},"574":{start:{line:1,column:25557},end:{line:1,column:25620}},"575":{start:{line:1,column:25611},end:{line:1,column:25620}},"576":{start:{line:1,column:25620},end:{line:1,column:25628}},"577":{start:{line:1,column:25650},end:{line:1,column:25652}},"578":{start:{line:1,column:25655},end:{line:1,column:25661}},"579":{start:{line:1,column:25664},end:{line:1,column:25665}},"580":{start:{line:1,column:25666},end:{line:1,column:25731}},"581":{start:{line:1,column:25749},end:{line:1,column:25764}},"582":{start:{line:1,column:25755},end:{line:1,column:25764}},"583":{start:{line:1,column:25764},end:{line:1,column:26077}},"584":{start:{line:1,column:25779},end:{line:1,column:25809}},"585":{start:{line:1,column:25810},end:{line:1,column:25828}},"586":{start:{line:1,column:25834},end:{line:1,column:26077}},"587":{start:{line:1,column:25861},end:{line:1,column:25880}},"588":{start:{line:1,column:25881},end:{line:1,column:25924}},"589":{start:{line:1,column:25891},end:{line:1,column:25892}},"590":{start:{line:1,column:25908},end:{line:1,column:25924}},"591":{start:{line:1,column:25924},end:{line:1,column:25932}},"592":{start:{line:1,column:25938},end:{line:1,column:26077}},"593":{start:{line:1,column:25989},end:{line:1,column:25991}},"594":{start:{line:1,column:25992},end:{line:1,column:26068}},"595":{start:{line:1,column:26007},end:{line:1,column:26068}},"596":{start:{line:1,column:26068},end:{line:1,column:26076}},"597":{start:{line:1,column:26077},end:{line:1,column:26085}},"598":{start:{line:1,column:26103},end:{line:1,column:26152}},"599":{start:{line:1,column:26170},end:{line:1,column:26185}},"600":{start:{line:1,column:26176},end:{line:1,column:26185}},"601":{start:{line:1,column:26185},end:{line:1,column:26490}},"602":{start:{line:1,column:26212},end:{line:1,column:26280}},"603":{start:{line:1,column:26264},end:{line:1,column:26280}},"604":{start:{line:1,column:26280},end:{line:1,column:26318}},"605":{start:{line:1,column:26324},end:{line:1,column:26490}},"606":{start:{line:1,column:26344},end:{line:1,column:26387}},"607":{start:{line:1,column:26354},end:{line:1,column:26355}},"608":{start:{line:1,column:26371},end:{line:1,column:26387}},"609":{start:{line:1,column:26392},end:{line:1,column:26490}},"610":{start:{line:1,column:26414},end:{line:1,column:26490}},"611":{start:{line:1,column:26429},end:{line:1,column:26490}},"612":{start:{line:1,column:26490},end:{line:1,column:26498}},"613":{start:{line:1,column:26506},end:{line:1,column:26593}},"614":{start:{line:1,column:26597},end:{line:1,column:26598}},"615":{start:{line:1,column:26601},end:{line:1,column:26828}},"616":{start:{line:1,column:26614},end:{line:1,column:26819}},"617":{start:{line:1,column:26832},end:{line:1,column:27379}},"618":{start:{line:1,column:26853},end:{line:1,column:26868}},"619":{start:{line:1,column:26879},end:{line:1,column:27053}},"620":{start:{line:1,column:27078},end:{line:1,column:27087}},"621":{start:{line:1,column:27088},end:{line:1,column:27281}},"622":{start:{line:1,column:27306},end:{line:1,column:27311}},"623":{start:{line:1,column:27314},end:{line:1,column:27343}},"624":{start:{line:1,column:27346},end:{line:1,column:27355}},"625":{start:{line:1,column:27356},end:{line:1,column:27377}},"626":{start:{line:1,column:27383},end:{line:1,column:29535}},"627":{start:{line:1,column:27416},end:{line:1,column:27518}},"628":{start:{line:1,column:27532},end:{line:1,column:28117}},"629":{start:{line:1,column:27555},end:{line:1,column:27644}},"630":{start:{line:1,column:27577},end:{line:1,column:27644}},"631":{start:{line:1,column:27644},end:{line:1,column:27667}},"632":{start:{line:1,column:27673},end:{line:1,column:27696}},"633":{start:{line:1,column:27697},end:{line:1,column:27858}},"634":{start:{line:1,column:27864},end:{line:1,column:28117}},"635":{start:{line:1,column:27882},end:{line:1,column:28077}},"636":{start:{line:1,column:27904},end:{line:1,column:28004}},"637":{start:{line:1,column:28009},end:{line:1,column:28077}},"638":{start:{line:1,column:28082},end:{line:1,column:28117}},"639":{start:{line:1,column:28140},end:{line:1,column:28141}},"640":{start:{line:1,column:28144},end:{line:1,column:28170}},"641":{start:{line:1,column:28171},end:{line:1,column:28240}},"642":{start:{line:1,column:28193},end:{line:1,column:28240}},"643":{start:{line:1,column:28240},end:{line:1,column:28594}},"644":{start:{line:1,column:28297},end:{line:1,column:28300}},"645":{start:{line:1,column:28301},end:{line:1,column:28341}},"646":{start:{line:1,column:28347},end:{line:1,column:28363}},"647":{start:{line:1,column:28364},end:{line:1,column:28438}},"648":{start:{line:1,column:28399},end:{line:1,column:28438}},"649":{start:{line:1,column:28444},end:{line:1,column:28453}},"650":{start:{line:1,column:28454},end:{line:1,column:28508}},"651":{start:{line:1,column:28469},end:{line:1,column:28508}},"652":{start:{line:1,column:28508},end:{line:1,column:28578}},"653":{start:{line:1,column:28538},end:{line:1,column:28578}},"654":{start:{line:1,column:28578},end:{line:1,column:28593}},"655":{start:{line:1,column:28594},end:{line:1,column:28713}},"656":{start:{line:1,column:28624},end:{line:1,column:28627}},"657":{start:{line:1,column:28628},end:{line:1,column:28675}},"658":{start:{line:1,column:28675},end:{line:1,column:28697}},"659":{start:{line:1,column:28703},end:{line:1,column:28713}},"660":{start:{line:1,column:28719},end:{line:1,column:28732}},"661":{start:{line:1,column:28733},end:{line:1,column:28887}},"662":{start:{line:1,column:28764},end:{line:1,column:28767}},"663":{start:{line:1,column:28768},end:{line:1,column:28855}},"664":{start:{line:1,column:28785},end:{line:1,column:28796}},"665":{start:{line:1,column:28797},end:{line:1,column:28833}},"666":{start:{line:1,column:28823},end:{line:1,column:28827}},"667":{start:{line:1,column:28827},end:{line:1,column:28832}},"668":{start:{line:1,column:28833},end:{line:1,column:28854}},"669":{start:{line:1,column:28849},end:{line:1,column:28854}},"670":{start:{line:1,column:28855},end:{line:1,column:28886}},"671":{start:{line:1,column:28887},end:{line:1,column:29017}},"672":{start:{line:1,column:28911},end:{line:1,column:28937}},"673":{start:{line:1,column:28938},end:{line:1,column:29016}},"674":{start:{line:1,column:28968},end:{line:1,column:28977}},"675":{start:{line:1,column:28982},end:{line:1,column:29016}},"676":{start:{line:1,column:29017},end:{line:1,column:29025}},"677":{start:{line:1,column:29038},end:{line:1,column:29096}},"678":{start:{line:1,column:29042},end:{line:1,column:29080}},"679":{start:{line:1,column:29087},end:{line:1,column:29095}},"680":{start:{line:1,column:29124},end:{line:1,column:29433}},"681":{start:{line:1,column:29149},end:{line:1,column:29162}},"682":{start:{line:1,column:29180},end:{line:1,column:29198}},"683":{start:{line:1,column:29219},end:{line:1,column:29252}},"684":{start:{line:1,column:29285},end:{line:1,column:29380}},"685":{start:{line:1,column:29409},end:{line:1,column:29432}},"686":{start:{line:1,column:29444},end:{line:1,column:29533}},"687":{start:{line:1,column:29539},end:{line:1,column:29850}},"688":{start:{line:1,column:29560},end:{line:1,column:29606}},"689":{start:{line:1,column:29625},end:{line:1,column:29776}},"690":{start:{line:1,column:29705},end:{line:1,column:29736}},"691":{start:{line:1,column:29737},end:{line:1,column:29775}},"692":{start:{line:1,column:29776},end:{line:1,column:29787}},"693":{start:{line:1,column:29813},end:{line:1,column:29848}},"694":{start:{line:1,column:29866},end:{line:1,column:29891}},"695":{start:{line:1,column:29899},end:{line:1,column:29987}},"696":{start:{line:1,column:29929},end:{line:1,column:29986}},"697":{start:{line:1,column:30003},end:{line:1,column:30027}},"698":{start:{line:1,column:30043},end:{line:1,column:30103}},"699":{start:{line:1,column:30121},end:{line:1,column:30421}},"700":{start:{line:1,column:30146},end:{line:1,column:30171}},"701":{start:{line:1,column:30189},end:{line:1,column:30207}},"702":{start:{line:1,column:30220},end:{line:1,column:30315}},"703":{start:{line:1,column:30326},end:{line:1,column:30350}},"704":{start:{line:1,column:30371},end:{line:1,column:30404}},"705":{start:{line:1,column:30412},end:{line:1,column:30420}},"706":{start:{line:1,column:30437},end:{line:1,column:30482}},"707":{start:{line:1,column:30501},end:{line:1,column:30540}},"708":{start:{line:1,column:30529},end:{line:1,column:30539}},"709":{start:{line:1,column:30548},end:{line:1,column:30650}},"710":{start:{line:1,column:30653},end:{line:1,column:37123}},"711":{start:{line:1,column:30688},end:{line:1,column:30958}},"712":{start:{line:1,column:30978},end:{line:1,column:30999}},"713":{start:{line:1,column:31012},end:{line:1,column:31032}},"714":{start:{line:1,column:31025},end:{line:1,column:31032}},"715":{start:{line:1,column:31038},end:{line:1,column:31045}},"716":{start:{line:1,column:31046},end:{line:1,column:31205}},"717":{start:{line:1,column:31219},end:{line:1,column:31236}},"718":{start:{line:1,column:31247},end:{line:1,column:31379}},"719":{start:{line:1,column:31387},end:{line:1,column:31408}},"720":{start:{line:1,column:31420},end:{line:1,column:31476}},"721":{start:{line:1,column:31500},end:{line:1,column:31587}},"722":{start:{line:1,column:31524},end:{line:1,column:31587}},"723":{start:{line:1,column:31587},end:{line:1,column:31699}},"724":{start:{line:1,column:31667},end:{line:1,column:31699}},"725":{start:{line:1,column:31705},end:{line:1,column:31726}},"726":{start:{line:1,column:31727},end:{line:1,column:31886}},"727":{start:{line:1,column:31827},end:{line:1,column:31837}},"728":{start:{line:1,column:31840},end:{line:1,column:31847}},"729":{start:{line:1,column:31848},end:{line:1,column:31885}},"730":{start:{line:1,column:31892},end:{line:1,column:31989}},"731":{start:{line:1,column:31992},end:{line:1,column:32072}},"732":{start:{line:1,column:32073},end:{line:1,column:32200}},"733":{start:{line:1,column:32239},end:{line:1,column:32304}},"734":{start:{line:1,column:32305},end:{line:1,column:32342}},"735":{start:{line:1,column:32320},end:{line:1,column:32335}},"736":{start:{line:1,column:32335},end:{line:1,column:32341}},"737":{start:{line:1,column:32348},end:{line:1,column:32543}},"738":{start:{line:1,column:32374},end:{line:1,column:32394}},"739":{start:{line:1,column:32394},end:{line:1,column:32490}},"740":{start:{line:1,column:32404},end:{line:1,column:32405}},"741":{start:{line:1,column:32435},end:{line:1,column:32490}},"742":{start:{line:1,column:32490},end:{line:1,column:32539}},"743":{start:{line:1,column:32546},end:{line:1,column:32597}},"744":{start:{line:1,column:32555},end:{line:1,column:32596}},"745":{start:{line:1,column:32598},end:{line:1,column:32627}},"746":{start:{line:1,column:32648},end:{line:1,column:32744}},"747":{start:{line:1,column:32681},end:{line:1,column:32699}},"748":{start:{line:1,column:32688},end:{line:1,column:32699}},"749":{start:{line:1,column:32700},end:{line:1,column:32742}},"750":{start:{line:1,column:32766},end:{line:1,column:32812}},"751":{start:{line:1,column:32818},end:{line:1,column:32915}},"752":{start:{line:1,column:32916},end:{line:1,column:33129}},"753":{start:{line:1,column:32934},end:{line:1,column:33088}},"754":{start:{line:1,column:33148},end:{line:1,column:33198}},"755":{start:{line:1,column:33191},end:{line:1,column:33198}},"756":{start:{line:1,column:33204},end:{line:1,column:33218}},"757":{start:{line:1,column:33219},end:{line:1,column:33309}},"758":{start:{line:1,column:33320},end:{line:1,column:33353}},"759":{start:{line:1,column:33363},end:{line:1,column:33469}},"760":{start:{line:1,column:33406},end:{line:1,column:33432}},"761":{start:{line:1,column:33492},end:{line:1,column:33595}},"762":{start:{line:1,column:33607},end:{line:1,column:33659}},"763":{start:{line:1,column:33673},end:{line:1,column:33759}},"764":{start:{line:1,column:33773},end:{line:1,column:33964}},"765":{start:{line:1,column:33808},end:{line:1,column:33962}},"766":{start:{line:1,column:33836},end:{line:1,column:33852}},"767":{start:{line:1,column:33861},end:{line:1,column:33873}},"768":{start:{line:1,column:33874},end:{line:1,column:33961}},"769":{start:{line:1,column:33977},end:{line:1,column:34602}},"770":{start:{line:1,column:33997},end:{line:1,column:34602}},"771":{start:{line:1,column:34027},end:{line:1,column:34318}},"772":{start:{line:1,column:34318},end:{line:1,column:34324}},"773":{start:{line:1,column:34357},end:{line:1,column:34373}},"774":{start:{line:1,column:34373},end:{line:1,column:34379}},"775":{start:{line:1,column:34408},end:{line:1,column:34422}},"776":{start:{line:1,column:34422},end:{line:1,column:34428}},"777":{start:{line:1,column:34446},end:{line:1,column:34466}},"778":{start:{line:1,column:34466},end:{line:1,column:34472}},"779":{start:{line:1,column:34493},end:{line:1,column:34508}},"780":{start:{line:1,column:34514},end:{line:1,column:34539}},"781":{start:{line:1,column:34540},end:{line:1,column:34596}},"782":{start:{line:1,column:34596},end:{line:1,column:34601}},"783":{start:{line:1,column:34620},end:{line:1,column:34630}},"784":{start:{line:1,column:34631},end:{line:1,column:34740}},"785":{start:{line:1,column:34754},end:{line:1,column:34868}},"786":{start:{line:1,column:34810},end:{line:1,column:34836}},"787":{start:{line:1,column:34837},end:{line:1,column:34867}},"788":{start:{line:1,column:34852},end:{line:1,column:34867}},"789":{start:{line:1,column:34868},end:{line:1,column:34978}},"790":{start:{line:1,column:34992},end:{line:1,column:34996}},"791":{start:{line:1,column:34999},end:{line:1,column:35001}},"792":{start:{line:1,column:35002},end:{line:1,column:35069}},"793":{start:{line:1,column:35024},end:{line:1,column:35068}},"794":{start:{line:1,column:35085},end:{line:1,column:35100}},"795":{start:{line:1,column:35101},end:{line:1,column:35202}},"796":{start:{line:1,column:35218},end:{line:1,column:35359}},"797":{start:{line:1,column:35375},end:{line:1,column:35541}},"798":{start:{line:1,column:35405},end:{line:1,column:35422}},"799":{start:{line:1,column:35474},end:{line:1,column:35520}},"800":{start:{line:1,column:35557},end:{line:1,column:35608}},"801":{start:{line:1,column:35619},end:{line:1,column:35697}},"802":{start:{line:1,column:35652},end:{line:1,column:35655}},"803":{start:{line:1,column:35711},end:{line:1,column:35839}},"804":{start:{line:1,column:35848},end:{line:1,column:35872}},"805":{start:{line:1,column:35885},end:{line:1,column:35918}},"806":{start:{line:1,column:35934},end:{line:1,column:35968}},"807":{start:{line:1,column:35980},end:{line:1,column:36012}},"808":{start:{line:1,column:36022},end:{line:1,column:36102}},"809":{start:{line:1,column:36117},end:{line:1,column:36200}},"810":{start:{line:1,column:36211},end:{line:1,column:36246}},"811":{start:{line:1,column:36234},end:{line:1,column:36246}},"812":{start:{line:1,column:36246},end:{line:1,column:36369}},"813":{start:{line:1,column:36258},end:{line:1,column:36276}},"814":{start:{line:1,column:36277},end:{line:1,column:36341}},"815":{start:{line:1,column:36287},end:{line:1,column:36288}},"816":{start:{line:1,column:36304},end:{line:1,column:36341}},"817":{start:{line:1,column:36316},end:{line:1,column:36341}},"818":{start:{line:1,column:36347},end:{line:1,column:36369}},"819":{start:{line:1,column:36369},end:{line:1,column:36380}},"820":{start:{line:1,column:36396},end:{line:1,column:36425}},"821":{start:{line:1,column:36443},end:{line:1,column:36547}},"822":{start:{line:1,column:36570},end:{line:1,column:36677}},"823":{start:{line:1,column:36696},end:{line:1,column:36739}},"824":{start:{line:1,column:36727},end:{line:1,column:36739}},"825":{start:{line:1,column:36739},end:{line:1,column:36878}},"826":{start:{line:1,column:36751},end:{line:1,column:36777}},"827":{start:{line:1,column:36778},end:{line:1,column:36842}},"828":{start:{line:1,column:36788},end:{line:1,column:36789}},"829":{start:{line:1,column:36805},end:{line:1,column:36842}},"830":{start:{line:1,column:36817},end:{line:1,column:36842}},"831":{start:{line:1,column:36848},end:{line:1,column:36878}},"832":{start:{line:1,column:36878},end:{line:1,column:36889}},"833":{start:{line:1,column:36913},end:{line:1,column:36950}},"834":{start:{line:1,column:36978},end:{line:1,column:37121}},"835":{start:{line:1,column:37050},end:{line:1,column:37084}},"836":{start:{line:1,column:37085},end:{line:1,column:37120}},"837":{start:{line:1,column:37100},end:{line:1,column:37120}},"838":{start:{line:1,column:37138},end:{line:1,column:37271}},"839":{start:{line:1,column:37272},end:{line:1,column:37487}},"840":{start:{line:1,column:37310},end:{line:1,column:37355}},"841":{start:{line:1,column:37356},end:{line:1,column:37456}},"842":{start:{line:1,column:37378},end:{line:1,column:37391}},"843":{start:{line:1,column:37394},end:{line:1,column:37421}},"844":{start:{line:1,column:37422},end:{line:1,column:37455}},"845":{start:{line:1,column:37456},end:{line:1,column:37485}},"846":{start:{line:1,column:37487},end:{line:1,column:37533}},"847":{start:{line:1,column:37516},end:{line:1,column:37531}},"848":{start:{line:1,column:37533},end:{line:1,column:37575}},"849":{start:{line:1,column:37564},end:{line:1,column:37573}},"850":{start:{line:1,column:37575},end:{line:1,column:37618}},"851":{start:{line:1,column:37606},end:{line:1,column:37616}},"852":{start:{line:1,column:37618},end:{line:1,column:37667}},"853":{start:{line:1,column:37652},end:{line:1,column:37665}},"854":{start:{line:1,column:37673},end:{line:1,column:41888}},"855":{start:{line:1,column:37712},end:{line:1,column:38314}},"856":{start:{line:1,column:38320},end:{line:1,column:38332}},"857":{start:{line:1,column:38333},end:{line:1,column:38454}},"858":{start:{line:1,column:38471},end:{line:1,column:38570}},"859":{start:{line:1,column:38595},end:{line:1,column:38675}},"860":{start:{line:1,column:38703},end:{line:1,column:38826}},"861":{start:{line:1,column:38856},end:{line:1,column:38986}},"862":{start:{line:1,column:39017},end:{line:1,column:39146}},"863":{start:{line:1,column:39158},end:{line:1,column:39218}},"864":{start:{line:1,column:39242},end:{line:1,column:39326}},"865":{start:{line:1,column:39335},end:{line:1,column:39384}},"866":{start:{line:1,column:39372},end:{line:1,column:39384}},"867":{start:{line:1,column:39384},end:{line:1,column:39422}},"868":{start:{line:1,column:39428},end:{line:1,column:39439}},"869":{start:{line:1,column:39442},end:{line:1,column:39446}},"870":{start:{line:1,column:39447},end:{line:1,column:39496}},"871":{start:{line:1,column:39502},end:{line:1,column:39543}},"872":{start:{line:1,column:39524},end:{line:1,column:39541}},"873":{start:{line:1,column:39546},end:{line:1,column:39655}},"874":{start:{line:1,column:39550},end:{line:1,column:39654}},"875":{start:{line:1,column:39658},end:{line:1,column:39672}},"876":{start:{line:1,column:39673},end:{line:1,column:39859}},"877":{start:{line:1,column:39702},end:{line:1,column:39715}},"878":{start:{line:1,column:39718},end:{line:1,column:39782}},"879":{start:{line:1,column:39741},end:{line:1,column:39778}},"880":{start:{line:1,column:39783},end:{line:1,column:39858}},"881":{start:{line:1,column:39834},end:{line:1,column:39856}},"882":{start:{line:1,column:39859},end:{line:1,column:39906}},"883":{start:{line:1,column:39918},end:{line:1,column:39937}},"884":{start:{line:1,column:39947},end:{line:1,column:40012}},"885":{start:{line:1,column:40018},end:{line:1,column:40029}},"886":{start:{line:1,column:40030},end:{line:1,column:40241}},"887":{start:{line:1,column:40251},end:{line:1,column:40276}},"888":{start:{line:1,column:40287},end:{line:1,column:40350}},"889":{start:{line:1,column:40291},end:{line:1,column:40310}},"890":{start:{line:1,column:40320},end:{line:1,column:40349}},"891":{start:{line:1,column:40364},end:{line:1,column:40420}},"892":{start:{line:1,column:40371},end:{line:1,column:40400}},"893":{start:{line:1,column:40432},end:{line:1,column:40460}},"894":{start:{line:1,column:40479},end:{line:1,column:40491}},"895":{start:{line:1,column:40492},end:{line:1,column:40579}},"896":{start:{line:1,column:40598},end:{line:1,column:40620}},"897":{start:{line:1,column:40621},end:{line:1,column:40666}},"898":{start:{line:1,column:40636},end:{line:1,column:40666}},"899":{start:{line:1,column:40659},end:{line:1,column:40666}},"900":{start:{line:1,column:40666},end:{line:1,column:40679}},"901":{start:{line:1,column:40697},end:{line:1,column:40719}},"902":{start:{line:1,column:40720},end:{line:1,column:40780}},"903":{start:{line:1,column:40730},end:{line:1,column:40731}},"904":{start:{line:1,column:40747},end:{line:1,column:40780}},"905":{start:{line:1,column:40791},end:{line:1,column:40858}},"906":{start:{line:1,column:40812},end:{line:1,column:40815}},"907":{start:{line:1,column:40868},end:{line:1,column:40940}},"908":{start:{line:1,column:40954},end:{line:1,column:40974}},"909":{start:{line:1,column:40994},end:{line:1,column:41190}},"910":{start:{line:1,column:41203},end:{line:1,column:41257}},"911":{start:{line:1,column:41245},end:{line:1,column:41257}},"912":{start:{line:1,column:41263},end:{line:1,column:41267}},"913":{start:{line:1,column:41268},end:{line:1,column:41768}},"914":{start:{line:1,column:41321},end:{line:1,column:41402}},"915":{start:{line:1,column:41413},end:{line:1,column:41436}},"916":{start:{line:1,column:41437},end:{line:1,column:41459}},"917":{start:{line:1,column:41465},end:{line:1,column:41691}},"918":{start:{line:1,column:41488},end:{line:1,column:41687}},"919":{start:{line:1,column:41593},end:{line:1,column:41684}},"920":{start:{line:1,column:41692},end:{line:1,column:41767}},"921":{start:{line:1,column:41743},end:{line:1,column:41765}},"922":{start:{line:1,column:41789},end:{line:1,column:41810}},"923":{start:{line:1,column:41811},end:{line:1,column:41886}},"924":{start:{line:1,column:41895},end:{line:1,column:41897}},"925":{start:{line:1,column:41914},end:{line:1,column:41957}},"926":{start:{line:1,column:41963},end:{line:1,column:41989}},"927":{start:{line:1,column:41992},end:{line:1,column:42000}},"928":{start:{line:1,column:42003},end:{line:1,column:42007}},"929":{start:{line:1,column:42010},end:{line:1,column:42016}},"930":{start:{line:1,column:42019},end:{line:1,column:42039}},"931":{start:{line:1,column:42042},end:{line:1,column:42100}},"932":{start:{line:1,column:42103},end:{line:1,column:42216}},"933":{start:{line:1,column:42217},end:{line:1,column:42270}},"934":{start:{line:1,column:42276},end:{line:1,column:42390}},"935":{start:{line:1,column:42289},end:{line:1,column:42381}},"936":{start:{line:1,column:42398},end:{line:1,column:42476}},"937":{start:{line:1,column:42469},end:{line:1,column:42474}},"938":{start:{line:1,column:42480},end:{line:1,column:43273}},"939":{start:{line:1,column:42526},end:{line:1,column:42559}},"940":{start:{line:1,column:42547},end:{line:1,column:42559}},"941":{start:{line:1,column:42565},end:{line:1,column:42579}},"942":{start:{line:1,column:42582},end:{line:1,column:42590}},"943":{start:{line:1,column:42593},end:{line:1,column:42606}},"944":{start:{line:1,column:42609},end:{line:1,column:42628}},"945":{start:{line:1,column:42629},end:{line:1,column:42729}},"946":{start:{line:1,column:42761},end:{line:1,column:42794}},"947":{start:{line:1,column:42782},end:{line:1,column:42794}},"948":{start:{line:1,column:42800},end:{line:1,column:42814}},"949":{start:{line:1,column:42817},end:{line:1,column:42825}},"950":{start:{line:1,column:42828},end:{line:1,column:42847}},"951":{start:{line:1,column:42848},end:{line:1,column:42912}},"952":{start:{line:1,column:42925},end:{line:1,column:42960}},"953":{start:{line:1,column:42976},end:{line:1,column:43028}},"954":{start:{line:1,column:43019},end:{line:1,column:43028}},"955":{start:{line:1,column:43028},end:{line:1,column:43062}},"956":{start:{line:1,column:43050},end:{line:1,column:43062}},"957":{start:{line:1,column:43068},end:{line:1,column:43076}},"958":{start:{line:1,column:43077},end:{line:1,column:43095}},"959":{start:{line:1,column:43083},end:{line:1,column:43095}},"960":{start:{line:1,column:43101},end:{line:1,column:43110}},"961":{start:{line:1,column:43111},end:{line:1,column:43144}},"962":{start:{line:1,column:43162},end:{line:1,column:43191}},"963":{start:{line:1,column:43174},end:{line:1,column:43190}},"964":{start:{line:1,column:43210},end:{line:1,column:43260}},"965":{start:{line:1,column:43261},end:{line:1,column:43269}},"966":{start:{line:1,column:43281},end:{line:1,column:43352}},"967":{start:{line:1,column:43345},end:{line:1,column:43350}},"968":{start:{line:1,column:43356},end:{line:1,column:44041}},"969":{start:{line:1,column:43388},end:{line:1,column:43392}},"970":{start:{line:1,column:43410},end:{line:1,column:43476}},"971":{start:{line:1,column:43512},end:{line:1,column:43563}},"972":{start:{line:1,column:43564},end:{line:1,column:43674}},"973":{start:{line:1,column:43703},end:{line:1,column:43912}},"974":{start:{line:1,column:43751},end:{line:1,column:43872}},"975":{start:{line:1,column:43786},end:{line:1,column:43865}},"976":{start:{line:1,column:43865},end:{line:1,column:43871}},"977":{start:{line:1,column:43872},end:{line:1,column:43911}},"978":{start:{line:1,column:43930},end:{line:1,column:43959}},"979":{start:{line:1,column:43942},end:{line:1,column:43958}},"980":{start:{line:1,column:43978},end:{line:1,column:44028}},"981":{start:{line:1,column:44029},end:{line:1,column:44037}},"982":{start:{line:1,column:44049},end:{line:1,column:44124}},"983":{start:{line:1,column:44117},end:{line:1,column:44122}},"984":{start:{line:1,column:44128},end:{line:1,column:45532}},"985":{start:{line:1,column:44160},end:{line:1,column:44179}},"986":{start:{line:1,column:44192},end:{line:1,column:44199}},"987":{start:{line:1,column:44214},end:{line:1,column:44218}},"988":{start:{line:1,column:44241},end:{line:1,column:44249}},"989":{start:{line:1,column:44250},end:{line:1,column:44295}},"990":{start:{line:1,column:44256},end:{line:1,column:44295}},"991":{start:{line:1,column:44301},end:{line:1,column:44384}},"992":{start:{line:1,column:44385},end:{line:1,column:44443}},"993":{start:{line:1,column:44449},end:{line:1,column:44490}},"994":{start:{line:1,column:44493},end:{line:1,column:44495}},"995":{start:{line:1,column:44496},end:{line:1,column:44572}},"996":{start:{line:1,column:44511},end:{line:1,column:44572}},"997":{start:{line:1,column:44572},end:{line:1,column:44635}},"998":{start:{line:1,column:44653},end:{line:1,column:44777}},"999":{start:{line:1,column:44783},end:{line:1,column:44820}},"1000":{start:{line:1,column:44821},end:{line:1,column:44854}},"1001":{start:{line:1,column:44880},end:{line:1,column:44888}},"1002":{start:{line:1,column:44889},end:{line:1,column:44981}},"1003":{start:{line:1,column:45008},end:{line:1,column:45016}},"1004":{start:{line:1,column:45017},end:{line:1,column:45113}},"1005":{start:{line:1,column:45131},end:{line:1,column:45175}},"1006":{start:{line:1,column:45196},end:{line:1,column:45244}},"1007":{start:{line:1,column:45266},end:{line:1,column:45403}},"1008":{start:{line:1,column:45421},end:{line:1,column:45450}},"1009":{start:{line:1,column:45433},end:{line:1,column:45449}},"1010":{start:{line:1,column:45469},end:{line:1,column:45519}},"1011":{start:{line:1,column:45520},end:{line:1,column:45528}},"1012":{start:{line:1,column:45540},end:{line:1,column:45600}},"1013":{start:{line:1,column:45597},end:{line:1,column:45598}},"1014":{start:{line:1,column:45604},end:{line:1,column:51652}},"1015":{start:{line:1,column:45634},end:{line:1,column:45639}},"1016":{start:{line:1,column:45645},end:{line:1,column:45664}},"1017":{start:{line:1,column:45681},end:{line:1,column:45700}},"1018":{start:{line:1,column:45719},end:{line:1,column:45723}},"1019":{start:{line:1,column:45735},end:{line:1,column:45754}},"1020":{start:{line:1,column:45775},end:{line:1,column:45794}},"1021":{start:{line:1,column:45811},end:{line:1,column:45816}},"1022":{start:{line:1,column:45835},end:{line:1,column:45840}},"1023":{start:{line:1,column:45857},end:{line:1,column:45862}},"1024":{start:{line:1,column:45881},end:{line:1,column:45903}},"1025":{start:{line:1,column:45913},end:{line:1,column:45919}},"1026":{start:{line:1,column:45927},end:{line:1,column:45931}},"1027":{start:{line:1,column:45957},end:{line:1,column:45959}},"1028":{start:{line:1,column:45973},end:{line:1,column:45977}},"1029":{start:{line:1,column:46007},end:{line:1,column:46014}},"1030":{start:{line:1,column:46040},end:{line:1,column:46047}},"1031":{start:{line:1,column:46062},end:{line:1,column:46116}},"1032":{start:{line:1,column:46116},end:{line:1,column:46147}},"1033":{start:{line:1,column:46131},end:{line:1,column:46147}},"1034":{start:{line:1,column:46178},end:{line:1,column:46253}},"1035":{start:{line:1,column:46277},end:{line:1,column:46321}},"1036":{start:{line:1,column:46340},end:{line:1,column:46379}},"1037":{start:{line:1,column:46380},end:{line:1,column:46415}},"1038":{start:{line:1,column:46435},end:{line:1,column:46475}},"1039":{start:{line:1,column:46476},end:{line:1,column:46512}},"1040":{start:{line:1,column:46527},end:{line:1,column:46544}},"1041":{start:{line:1,column:46555},end:{line:1,column:47138}},"1042":{start:{line:1,column:46715},end:{line:1,column:46777}},"1043":{start:{line:1,column:46801},end:{line:1,column:46844}},"1044":{start:{line:1,column:46875},end:{line:1,column:46918}},"1045":{start:{line:1,column:46987},end:{line:1,column:47025}},"1046":{start:{line:1,column:47098},end:{line:1,column:47135}},"1047":{start:{line:1,column:47152},end:{line:1,column:47372}},"1048":{start:{line:1,column:47407},end:{line:1,column:48019}},"1049":{start:{line:1,column:47579},end:{line:1,column:47787}},"1050":{start:{line:1,column:47592},end:{line:1,column:47609}},"1051":{start:{line:1,column:47610},end:{line:1,column:47780}},"1052":{start:{line:1,column:47780},end:{line:1,column:47786}},"1053":{start:{line:1,column:47793},end:{line:1,column:47808}},"1054":{start:{line:1,column:47809},end:{line:1,column:47822}},"1055":{start:{line:1,column:47815},end:{line:1,column:47822}},"1056":{start:{line:1,column:47822},end:{line:1,column:47842}},"1057":{start:{line:1,column:47848},end:{line:1,column:47884}},"1058":{start:{line:1,column:47885},end:{line:1,column:48016}},"1059":{start:{line:1,column:48058},end:{line:1,column:48600}},"1060":{start:{line:1,column:48254},end:{line:1,column:48277}},"1061":{start:{line:1,column:48287},end:{line:1,column:48316}},"1062":{start:{line:1,column:48343},end:{line:1,column:48423}},"1063":{start:{line:1,column:48441},end:{line:1,column:48462}},"1064":{start:{line:1,column:48455},end:{line:1,column:48462}},"1065":{start:{line:1,column:48468},end:{line:1,column:48516}},"1066":{start:{line:1,column:48517},end:{line:1,column:48565}},"1067":{start:{line:1,column:48523},end:{line:1,column:48558}},"1068":{start:{line:1,column:48558},end:{line:1,column:48564}},"1069":{start:{line:1,column:48565},end:{line:1,column:48596}},"1070":{start:{line:1,column:48580},end:{line:1,column:48596}},"1071":{start:{line:1,column:48637},end:{line:1,column:48647}},"1072":{start:{line:1,column:48648},end:{line:1,column:48727}},"1073":{start:{line:1,column:48699},end:{line:1,column:48727}},"1074":{start:{line:1,column:48727},end:{line:1,column:48758}},"1075":{start:{line:1,column:48742},end:{line:1,column:48758}},"1076":{start:{line:1,column:48799},end:{line:1,column:48851}},"1077":{start:{line:1,column:48852},end:{line:1,column:49279}},"1078":{start:{line:1,column:48981},end:{line:1,column:49005}},"1079":{start:{line:1,column:49006},end:{line:1,column:49276}},"1080":{start:{line:1,column:49319},end:{line:1,column:49370}},"1081":{start:{line:1,column:49371},end:{line:1,column:49384}},"1082":{start:{line:1,column:49377},end:{line:1,column:49384}},"1083":{start:{line:1,column:49384},end:{line:1,column:49498}},"1084":{start:{line:1,column:49504},end:{line:1,column:49528}},"1085":{start:{line:1,column:49529},end:{line:1,column:49588}},"1086":{start:{line:1,column:49627},end:{line:1,column:49675}},"1087":{start:{line:1,column:49676},end:{line:1,column:49931}},"1088":{start:{line:1,column:49758},end:{line:1,column:49910}},"1089":{start:{line:1,column:49920},end:{line:1,column:49924}},"1090":{start:{line:1,column:49958},end:{line:1,column:50039}},"1091":{start:{line:1,column:50001},end:{line:1,column:50039}},"1092":{start:{line:1,column:50039},end:{line:1,column:50073}},"1093":{start:{line:1,column:50061},end:{line:1,column:50073}},"1094":{start:{line:1,column:50079},end:{line:1,column:50101}},"1095":{start:{line:1,column:50102},end:{line:1,column:50120}},"1096":{start:{line:1,column:50108},end:{line:1,column:50120}},"1097":{start:{line:1,column:50120},end:{line:1,column:50200}},"1098":{start:{line:1,column:50137},end:{line:1,column:50141}},"1099":{start:{line:1,column:50142},end:{line:1,column:50199}},"1100":{start:{line:1,column:50206},end:{line:1,column:50215}},"1101":{start:{line:1,column:50216},end:{line:1,column:50274}},"1102":{start:{line:1,column:50294},end:{line:1,column:50350}},"1103":{start:{line:1,column:50368},end:{line:1,column:50451}},"1104":{start:{line:1,column:50419},end:{line:1,column:50451}},"1105":{start:{line:1,column:50468},end:{line:1,column:50515}},"1106":{start:{line:1,column:50483},end:{line:1,column:50515}},"1107":{start:{line:1,column:50533},end:{line:1,column:50581}},"1108":{start:{line:1,column:50548},end:{line:1,column:50581}},"1109":{start:{line:1,column:50607},end:{line:1,column:50630}},"1110":{start:{line:1,column:50631},end:{line:1,column:50706}},"1111":{start:{line:1,column:50740},end:{line:1,column:50760}},"1112":{start:{line:1,column:50761},end:{line:1,column:50818}},"1113":{start:{line:1,column:50851},end:{line:1,column:50874}},"1114":{start:{line:1,column:50875},end:{line:1,column:50917}},"1115":{start:{line:1,column:50959},end:{line:1,column:50984}},"1116":{start:{line:1,column:50987},end:{line:1,column:50994}},"1117":{start:{line:1,column:50995},end:{line:1,column:51060}},"1118":{start:{line:1,column:51017},end:{line:1,column:51047}},"1119":{start:{line:1,column:51048},end:{line:1,column:51059}},"1120":{start:{line:1,column:51060},end:{line:1,column:51089}},"1121":{start:{line:1,column:51111},end:{line:1,column:51180}},"1122":{start:{line:1,column:51131},end:{line:1,column:51180}},"1123":{start:{line:1,column:51150},end:{line:1,column:51178}},"1124":{start:{line:1,column:51180},end:{line:1,column:51221}},"1125":{start:{line:1,column:51212},end:{line:1,column:51221}},"1126":{start:{line:1,column:51227},end:{line:1,column:51228}},"1127":{start:{line:1,column:51229},end:{line:1,column:51380}},"1128":{start:{line:1,column:51275},end:{line:1,column:51303}},"1129":{start:{line:1,column:51348},end:{line:1,column:51376}},"1130":{start:{line:1,column:51400},end:{line:1,column:51460}},"1131":{start:{line:1,column:51443},end:{line:1,column:51460}},"1132":{start:{line:1,column:51460},end:{line:1,column:51494}},"1133":{start:{line:1,column:51482},end:{line:1,column:51494}},"1134":{start:{line:1,column:51500},end:{line:1,column:51508}},"1135":{start:{line:1,column:51509},end:{line:1,column:51523}},"1136":{start:{line:1,column:51541},end:{line:1,column:51570}},"1137":{start:{line:1,column:51553},end:{line:1,column:51569}},"1138":{start:{line:1,column:51589},end:{line:1,column:51639}},"1139":{start:{line:1,column:51640},end:{line:1,column:51648}}},fnMap:{"0":{name:"(anonymous_0)",decl:{start:{line:1,column:666},end:{line:1,column:667}},loc:{start:{line:1,column:669},end:{line:1,column:680}},line:1},"1":{name:"(anonymous_1)",decl:{start:{line:1,column:875},end:{line:1,column:876}},loc:{start:{line:1,column:878},end:{line:1,column:972}},line:1},"2":{name:"(anonymous_2)",decl:{start:{line:1,column:975},end:{line:1,column:976}},loc:{start:{line:1,column:998},end:{line:1,column:1115}},line:1},"3":{name:"(anonymous_3)",decl:{start:{line:1,column:1119},end:{line:1,column:1120}},loc:{start:{line:1,column:1126},end:{line:1,column:1239}},line:1},"4":{name:"(anonymous_4)",decl:{start:{line:1,column:1164},end:{line:1,column:1165}},loc:{start:{line:1,column:1174},end:{line:1,column:1219}},line:1},"5":{name:"Lt",decl:{start:{line:1,column:1249},end:{line:1,column:1251}},loc:{start:{line:1,column:1254},end:{line:1,column:1382}},line:1},"6":{name:"Ft",decl:{start:{line:1,column:1398},end:{line:1,column:1400}},loc:{start:{line:1,column:1405},end:{line:1,column:1607}},line:1},"7":{name:"(anonymous_7)",decl:{start:{line:1,column:1560},end:{line:1,column:1561}},loc:{start:{line:1,column:1563},end:{line:1,column:1605}},line:1},"8":{name:"(anonymous_8)",decl:{start:{line:1,column:1785},end:{line:1,column:1786}},loc:{start:{line:1,column:1788},end:{line:1,column:2106}},line:1},"9":{name:"(anonymous_9)",decl:{start:{line:1,column:2147},end:{line:1,column:2148}},loc:{start:{line:1,column:2154},end:{line:1,column:2351}},line:1},"10":{name:"(anonymous_10)",decl:{start:{line:1,column:2355},end:{line:1,column:2356}},loc:{start:{line:1,column:2362},end:{line:1,column:2427}},line:1},"11":{name:"(anonymous_11)",decl:{start:{line:1,column:2431},end:{line:1,column:2432}},loc:{start:{line:1,column:2438},end:{line:1,column:2518}},line:1},"12":{name:"(anonymous_12)",decl:{start:{line:1,column:2533},end:{line:1,column:2534}},loc:{start:{line:1,column:2540},end:{line:1,column:2638}},line:1},"13":{name:"(anonymous_13)",decl:{start:{line:1,column:2585},end:{line:1,column:2586}},loc:{start:{line:1,column:2592},end:{line:1,column:2636}},line:1},"14":{name:"(anonymous_14)",decl:{start:{line:1,column:2600},end:{line:1,column:2601}},loc:{start:{line:1,column:2603},end:{line:1,column:2634}},line:1},"15":{name:"(anonymous_15)",decl:{start:{line:1,column:2642},end:{line:1,column:2643}},loc:{start:{line:1,column:2649},end:{line:1,column:2762}},line:1},"16":{name:"$t",decl:{start:{line:1,column:2772},end:{line:1,column:2774}},loc:{start:{line:1,column:2776},end:{line:1,column:3189}},line:1},"17":{name:"(anonymous_17)",decl:{start:{line:1,column:2805},end:{line:1,column:2806}},loc:{start:{line:1,column:2819},end:{line:1,column:3186}},line:1},"18":{name:"(anonymous_18)",decl:{start:{line:1,column:2825},end:{line:1,column:2826}},loc:{start:{line:1,column:2828},end:{line:1,column:3184}},line:1},"19":{name:"H",decl:{start:{line:1,column:3205},end:{line:1,column:3206}},loc:{start:{line:1,column:3209},end:{line:1,column:3247}},line:1},"20":{name:"(anonymous_20)",decl:{start:{line:1,column:3226},end:{line:1,column:3227}},loc:{start:{line:1,column:3233},end:{line:1,column:3243}},line:1},"21":{name:"K",decl:{start:{line:1,column:3256},end:{line:1,column:3257}},loc:{start:{line:1,column:3262},end:{line:1,column:3450}},line:1},"22":{name:"Jt",decl:{start:{line:1,column:3459},end:{line:1,column:3461}},loc:{start:{line:1,column:3466},end:{line:1,column:4076}},line:1},"23":{name:"(anonymous_23)",decl:{start:{line:1,column:3543},end:{line:1,column:3544}},loc:{start:{line:1,column:3557},end:{line:1,column:4073}},line:1},"24":{name:"f",decl:{start:{line:1,column:4094},end:{line:1,column:4095}},loc:{start:{line:1,column:4098},end:{line:1,column:4117}},line:1},"25":{name:"me",decl:{start:{line:1,column:4126},end:{line:1,column:4128}},loc:{start:{line:1,column:4131},end:{line:1,column:4186}},line:1},"26":{name:"(anonymous_26)",decl:{start:{line:1,column:4230},end:{line:1,column:4231}},loc:{start:{line:1,column:4243},end:{line:1,column:4352}},line:1},"27":{name:"(anonymous_27)",decl:{start:{line:1,column:4370},end:{line:1,column:4371}},loc:{start:{line:1,column:4383},end:{line:1,column:4467}},line:1},"28":{name:"t",decl:{start:{line:1,column:4393},end:{line:1,column:4394}},loc:{start:{line:1,column:4396},end:{line:1,column:4435}},line:1},"29":{name:"(anonymous_29)",decl:{start:{line:1,column:4574},end:{line:1,column:4575}},loc:{start:{line:1,column:4587},end:{line:1,column:4922}},line:1},"30":{name:"(anonymous_30)",decl:{start:{line:1,column:4940},end:{line:1,column:4941}},loc:{start:{line:1,column:4951},end:{line:1,column:5181}},line:1},"31":{name:"(anonymous_31)",decl:{start:{line:1,column:5246},end:{line:1,column:5247}},loc:{start:{line:1,column:5257},end:{line:1,column:5328}},line:1},"32":{name:"(anonymous_32)",decl:{start:{line:1,column:5354},end:{line:1,column:5355}},loc:{start:{line:1,column:5365},end:{line:1,column:5399}},line:1},"33":{name:"(anonymous_33)",decl:{start:{line:1,column:5469},end:{line:1,column:5470}},loc:{start:{line:1,column:5472},end:{line:1,column:5497}},line:1},"34":{name:"(anonymous_34)",decl:{start:{line:1,column:5498},end:{line:1,column:5499}},loc:{start:{line:1,column:5505},end:{line:1,column:5511}},line:1},"35":{name:"Y",decl:{start:{line:1,column:5612},end:{line:1,column:5613}},loc:{start:{line:1,column:5621},end:{line:1,column:5686}},line:1},"36":{name:"(anonymous_36)",decl:{start:{line:1,column:5638},end:{line:1,column:5639}},loc:{start:{line:1,column:5646},end:{line:1,column:5680}},line:1},"37":{name:"_",decl:{start:{line:1,column:5733},end:{line:1,column:5734}},loc:{start:{line:1,column:5739},end:{line:1,column:5892}},line:1},"38":{name:"Kt",decl:{start:{line:1,column:5913},end:{line:1,column:5915}},loc:{start:{line:1,column:5918},end:{line:1,column:5988}},line:1},"39":{name:"be",decl:{start:{line:1,column:5997},end:{line:1,column:5999}},loc:{start:{line:1,column:6002},end:{line:1,column:6130}},line:1},"40":{name:"X",decl:{start:{line:1,column:6139},end:{line:1,column:6140}},loc:{start:{line:1,column:6142},end:{line:1,column:6229}},line:1},"41":{name:"Yt",decl:{start:{line:1,column:6238},end:{line:1,column:6240}},loc:{start:{line:1,column:6243},end:{line:1,column:6373}},line:1},"42":{name:"Xt",decl:{start:{line:1,column:6382},end:{line:1,column:6384}},loc:{start:{line:1,column:6387},end:{line:1,column:6528}},line:1},"43":{name:"(anonymous_43)",decl:{start:{line:1,column:6554},end:{line:1,column:6555}},loc:{start:{line:1,column:6572},end:{line:1,column:6643}},line:1},"44":{name:"(anonymous_44)",decl:{start:{line:1,column:6663},end:{line:1,column:6664}},loc:{start:{line:1,column:6677},end:{line:1,column:6800}},line:1},"45":{name:"(anonymous_45)",decl:{start:{line:1,column:6800},end:{line:1,column:6801}},loc:{start:{line:1,column:6814},end:{line:1,column:6868}},line:1},"46":{name:"(anonymous_46)",decl:{start:{line:1,column:6868},end:{line:1,column:6869}},loc:{start:{line:1,column:6874},end:{line:1,column:6927}},line:1},"47":{name:"(anonymous_47)",decl:{start:{line:1,column:6927},end:{line:1,column:6928}},loc:{start:{line:1,column:6934},end:{line:1,column:7035}},line:1},"48":{name:"(anonymous_48)",decl:{start:{line:1,column:7035},end:{line:1,column:7036}},loc:{start:{line:1,column:7042},end:{line:1,column:7083}},line:1},"49":{name:"(anonymous_49)",decl:{start:{line:1,column:7083},end:{line:1,column:7084}},loc:{start:{line:1,column:7091},end:{line:1,column:7159}},line:1},"50":{name:"(anonymous_50)",decl:{start:{line:1,column:7159},end:{line:1,column:7160}},loc:{start:{line:1,column:7168},end:{line:1,column:7220}},line:1},"51":{name:"(anonymous_51)",decl:{start:{line:1,column:7220},end:{line:1,column:7221}},loc:{start:{line:1,column:7231},end:{line:1,column:7263}},line:1},"52":{name:"(anonymous_52)",decl:{start:{line:1,column:7263},end:{line:1,column:7264}},loc:{start:{line:1,column:7273},end:{line:1,column:7329}},line:1},"53":{name:"(anonymous_53)",decl:{start:{line:1,column:7329},end:{line:1,column:7330}},loc:{start:{line:1,column:7337},end:{line:1,column:7339}},line:1},"54":{name:"(anonymous_54)",decl:{start:{line:1,column:7339},end:{line:1,column:7340}},loc:{start:{line:1,column:7356},end:{line:1,column:7432}},line:1},"55":{name:"(anonymous_55)",decl:{start:{line:1,column:7432},end:{line:1,column:7433}},loc:{start:{line:1,column:7443},end:{line:1,column:7508}},line:1},"56":{name:"(anonymous_56)",decl:{start:{line:1,column:7508},end:{line:1,column:7509}},loc:{start:{line:1,column:7515},end:{line:1,column:7658}},line:1},"57":{name:"(anonymous_57)",decl:{start:{line:1,column:7658},end:{line:1,column:7659}},loc:{start:{line:1,column:7667},end:{line:1,column:7705}},line:1},"58":{name:"(anonymous_58)",decl:{start:{line:1,column:7729},end:{line:1,column:7730}},loc:{start:{line:1,column:7742},end:{line:1,column:7780}},line:1},"59":{name:"(anonymous_59)",decl:{start:{line:1,column:7780},end:{line:1,column:7781}},loc:{start:{line:1,column:7790},end:{line:1,column:7807}},line:1},"60":{name:"(anonymous_60)",decl:{start:{line:1,column:7807},end:{line:1,column:7808}},loc:{start:{line:1,column:7815},end:{line:1,column:7829}},line:1},"61":{name:"(anonymous_61)",decl:{start:{line:1,column:7829},end:{line:1,column:7830}},loc:{start:{line:1,column:7837},end:{line:1,column:8085}},line:1},"62":{name:"(anonymous_62)",decl:{start:{line:1,column:7870},end:{line:1,column:7871}},loc:{start:{line:1,column:7874},end:{line:1,column:7904}},line:1},"63":{name:"(anonymous_63)",decl:{start:{line:1,column:7992},end:{line:1,column:7993}},loc:{start:{line:1,column:8002},end:{line:1,column:8012}},line:1},"64":{name:"(anonymous_64)",decl:{start:{line:1,column:8053},end:{line:1,column:8054}},loc:{start:{line:1,column:8063},end:{line:1,column:8073}},line:1},"65":{name:"(anonymous_65)",decl:{start:{line:1,column:8085},end:{line:1,column:8086}},loc:{start:{line:1,column:8092},end:{line:1,column:8150}},line:1},"66":{name:"(anonymous_66)",decl:{start:{line:1,column:8150},end:{line:1,column:8151}},loc:{start:{line:1,column:8159},end:{line:1,column:8499}},line:1},"67":{name:"(anonymous_67)",decl:{start:{line:1,column:8166},end:{line:1,column:8167}},loc:{start:{line:1,column:8169},end:{line:1,column:8338}},line:1},"68":{name:"(anonymous_68)",decl:{start:{line:1,column:8499},end:{line:1,column:8500}},loc:{start:{line:1,column:8508},end:{line:1,column:8599}},line:1},"69":{name:"(anonymous_69)",decl:{start:{line:1,column:8515},end:{line:1,column:8516}},loc:{start:{line:1,column:8519},end:{line:1,column:8549}},line:1},"70":{name:"(anonymous_70)",decl:{start:{line:1,column:8599},end:{line:1,column:8600}},loc:{start:{line:1,column:8607},end:{line:1,column:8702}},line:1},"71":{name:"(anonymous_71)",decl:{start:{line:1,column:8630},end:{line:1,column:8631}},loc:{start:{line:1,column:8633},end:{line:1,column:8700}},line:1},"72":{name:"(anonymous_72)",decl:{start:{line:1,column:8649},end:{line:1,column:8650}},loc:{start:{line:1,column:8653},end:{line:1,column:8698}},line:1},"73":{name:"(anonymous_73)",decl:{start:{line:1,column:8702},end:{line:1,column:8703}},loc:{start:{line:1,column:8707},end:{line:1,column:8898}},line:1},"74":{name:"Ee",decl:{start:{line:1,column:9009},end:{line:1,column:9011}},loc:{start:{line:1,column:9013},end:{line:1,column:9015}},line:1},"75":{name:"(anonymous_75)",decl:{start:{line:1,column:9038},end:{line:1,column:9039}},loc:{start:{line:1,column:9052},end:{line:1,column:9230}},line:1},"76":{name:"(anonymous_76)",decl:{start:{line:1,column:9230},end:{line:1,column:9231}},loc:{start:{line:1,column:9242},end:{line:1,column:9362}},line:1},"77":{name:"(anonymous_77)",decl:{start:{line:1,column:9317},end:{line:1,column:9318}},loc:{start:{line:1,column:9324},end:{line:1,column:9360}},line:1},"78":{name:"(anonymous_78)",decl:{start:{line:1,column:9362},end:{line:1,column:9363}},loc:{start:{line:1,column:9370},end:{line:1,column:9501}},line:1},"79":{name:"(anonymous_79)",decl:{start:{line:1,column:9441},end:{line:1,column:9442}},loc:{start:{line:1,column:9448},end:{line:1,column:9484}},line:1},"80":{name:"(anonymous_80)",decl:{start:{line:1,column:9506},end:{line:1,column:9507}},loc:{start:{line:1,column:9510},end:{line:1,column:11389}},line:1},"81":{name:"(anonymous_81)",decl:{start:{line:1,column:9529},end:{line:1,column:9530}},loc:{start:{line:1,column:9547},end:{line:1,column:9695}},line:1},"82":{name:"(anonymous_82)",decl:{start:{line:1,column:9695},end:{line:1,column:9696}},loc:{start:{line:1,column:9704},end:{line:1,column:10938}},line:1},"83":{name:"(anonymous_83)",decl:{start:{line:1,column:10504},end:{line:1,column:10505}},loc:{start:{line:1,column:10508},end:{line:1,column:10776}},line:1},"84":{name:"(anonymous_84)",decl:{start:{line:1,column:10714},end:{line:1,column:10715}},loc:{start:{line:1,column:10718},end:{line:1,column:10771}},line:1},"85":{name:"(anonymous_85)",decl:{start:{line:1,column:10823},end:{line:1,column:10824}},loc:{start:{line:1,column:10827},end:{line:1,column:10845}},line:1},"86":{name:"(anonymous_86)",decl:{start:{line:1,column:10938},end:{line:1,column:10939}},loc:{start:{line:1,column:10949},end:{line:1,column:11007}},line:1},"87":{name:"(anonymous_87)",decl:{start:{line:1,column:11007},end:{line:1,column:11008}},loc:{start:{line:1,column:11018},end:{line:1,column:11199}},line:1},"88":{name:"(anonymous_88)",decl:{start:{line:1,column:11199},end:{line:1,column:11200}},loc:{start:{line:1,column:11208},end:{line:1,column:11323}},line:1},"89":{name:"(anonymous_89)",decl:{start:{line:1,column:11323},end:{line:1,column:11324}},loc:{start:{line:1,column:11330},end:{line:1,column:11347}},line:1},"90":{name:"Zt",decl:{start:{line:1,column:11602},end:{line:1,column:11604}},loc:{start:{line:1,column:11606},end:{line:1,column:11683}},line:1},"91":{name:"(anonymous_91)",decl:{start:{line:1,column:11691},end:{line:1,column:11692}},loc:{start:{line:1,column:11701},end:{line:1,column:11757}},line:1},"92":{name:"(anonymous_92)",decl:{start:{line:1,column:11780},end:{line:1,column:11781}},loc:{start:{line:1,column:11794},end:{line:1,column:11854}},line:1},"93":{name:"(anonymous_93)",decl:{start:{line:1,column:11854},end:{line:1,column:11855}},loc:{start:{line:1,column:11867},end:{line:1,column:11938}},line:1},"94":{name:"te",decl:{start:{line:1,column:11949},end:{line:1,column:11951}},loc:{start:{line:1,column:11954},end:{line:1,column:12138}},line:1},"95":{name:"(anonymous_95)",decl:{start:{line:1,column:12270},end:{line:1,column:12271}},loc:{start:{line:1,column:12280},end:{line:1,column:12299}},line:1},"96":{name:"(anonymous_96)",decl:{start:{line:1,column:12299},end:{line:1,column:12300}},loc:{start:{line:1,column:12307},end:{line:1,column:12758}},line:1},"97":{name:"(anonymous_97)",decl:{start:{line:1,column:12758},end:{line:1,column:12759}},loc:{start:{line:1,column:12777},end:{line:1,column:13039}},line:1},"98":{name:"(anonymous_98)",decl:{start:{line:1,column:12793},end:{line:1,column:12794}},loc:{start:{line:1,column:12797},end:{line:1,column:12857}},line:1},"99":{name:"(anonymous_99)",decl:{start:{line:1,column:12874},end:{line:1,column:12875}},loc:{start:{line:1,column:12877},end:{line:1,column:12944}},line:1},"100":{name:"(anonymous_100)",decl:{start:{line:1,column:12963},end:{line:1,column:12964}},loc:{start:{line:1,column:12966},end:{line:1,column:12985}},line:1},"101":{name:"(anonymous_101)",decl:{start:{line:1,column:13002},end:{line:1,column:13003}},loc:{start:{line:1,column:13005},end:{line:1,column:13038}},line:1},"102":{name:"(anonymous_102)",decl:{start:{line:1,column:13039},end:{line:1,column:13040}},loc:{start:{line:1,column:13047},end:{line:1,column:13255}},line:1},"103":{name:"(anonymous_103)",decl:{start:{line:1,column:13145},end:{line:1,column:13146}},loc:{start:{line:1,column:13148},end:{line:1,column:13252}},line:1},"104":{name:"(anonymous_104)",decl:{start:{line:1,column:13183},end:{line:1,column:13184}},loc:{start:{line:1,column:13187},end:{line:1,column:13232}},line:1},"105":{name:"(anonymous_105)",decl:{start:{line:1,column:13255},end:{line:1,column:13256}},loc:{start:{line:1,column:13264},end:{line:1,column:13339}},line:1},"106":{name:"(anonymous_106)",decl:{start:{line:1,column:13302},end:{line:1,column:13303}},loc:{start:{line:1,column:13306},end:{line:1,column:13308}},line:1},"107":{name:"(anonymous_107)",decl:{start:{line:1,column:13339},end:{line:1,column:13340}},loc:{start:{line:1,column:13344},end:{line:1,column:13517}},line:1},"108":{name:"(anonymous_108)",decl:{start:{line:1,column:13569},end:{line:1,column:13570}},loc:{start:{line:1,column:13588},end:{line:1,column:13637}},line:1},"109":{name:"(anonymous_109)",decl:{start:{line:1,column:13637},end:{line:1,column:13638}},loc:{start:{line:1,column:13649},end:{line:1,column:13666}},line:1},"110":{name:"(anonymous_110)",decl:{start:{line:1,column:13690},end:{line:1,column:13691}},loc:{start:{line:1,column:13700},end:{line:1,column:13722}},line:1},"111":{name:"(anonymous_111)",decl:{start:{line:1,column:13722},end:{line:1,column:13723}},loc:{start:{line:1,column:13730},end:{line:1,column:14447}},line:1},"112":{name:"(anonymous_112)",decl:{start:{line:1,column:13904},end:{line:1,column:13905}},loc:{start:{line:1,column:13908},end:{line:1,column:13924}},line:1},"113":{name:"(anonymous_113)",decl:{start:{line:1,column:13932},end:{line:1,column:13933}},loc:{start:{line:1,column:13935},end:{line:1,column:13973}},line:1},"114":{name:"(anonymous_114)",decl:{start:{line:1,column:14002},end:{line:1,column:14003}},loc:{start:{line:1,column:14006},end:{line:1,column:14445}},line:1},"115":{name:"(anonymous_115)",decl:{start:{line:1,column:14056},end:{line:1,column:14057}},loc:{start:{line:1,column:14059},end:{line:1,column:14443}},line:1},"116":{name:"(anonymous_116)",decl:{start:{line:1,column:14236},end:{line:1,column:14237}},loc:{start:{line:1,column:14240},end:{line:1,column:14317}},line:1},"117":{name:"(anonymous_117)",decl:{start:{line:1,column:14255},end:{line:1,column:14256}},loc:{start:{line:1,column:14275},end:{line:1,column:14302}},line:1},"118":{name:"(anonymous_118)",decl:{start:{line:1,column:14310},end:{line:1,column:14311}},loc:{start:{line:1,column:14313},end:{line:1,column:14315}},line:1},"119":{name:"(anonymous_119)",decl:{start:{line:1,column:14424},end:{line:1,column:14425}},loc:{start:{line:1,column:14428},end:{line:1,column:14441}},line:1},"120":{name:"(anonymous_120)",decl:{start:{line:1,column:14447},end:{line:1,column:14448}},loc:{start:{line:1,column:14455},end:{line:1,column:14638}},line:1},"121":{name:"(anonymous_121)",decl:{start:{line:1,column:14556},end:{line:1,column:14557}},loc:{start:{line:1,column:14560},end:{line:1,column:14635}},line:1},"122":{name:"(anonymous_122)",decl:{start:{line:1,column:14566},end:{line:1,column:14567}},loc:{start:{line:1,column:14570},end:{line:1,column:14615}},line:1},"123":{name:"(anonymous_123)",decl:{start:{line:1,column:14638},end:{line:1,column:14639}},loc:{start:{line:1,column:14647},end:{line:1,column:14704}},line:1},"124":{name:"C",decl:{start:{line:1,column:15148},end:{line:1,column:15149}},loc:{start:{line:1,column:15152},end:{line:1,column:15618}},line:1},"125":{name:"Te",decl:{start:{line:1,column:15627},end:{line:1,column:15629}},loc:{start:{line:1,column:15634},end:{line:1,column:15780}},line:1},"126":{name:"Ae",decl:{start:{line:1,column:15789},end:{line:1,column:15791}},loc:{start:{line:1,column:15796},end:{line:1,column:15883}},line:1},"127":{name:"(anonymous_127)",decl:{start:{line:1,column:15851},end:{line:1,column:15852}},loc:{start:{line:1,column:15866},end:{line:1,column:15879}},line:1},"128":{name:"(anonymous_128)",decl:{start:{line:1,column:16002},end:{line:1,column:16003}},loc:{start:{line:1,column:16006},end:{line:1,column:16025}},line:1},"129":{name:"(anonymous_129)",decl:{start:{line:1,column:16017},end:{line:1,column:16018}},loc:{start:{line:1,column:16020},end:{line:1,column:16023}},line:1},"130":{name:"(anonymous_130)",decl:{start:{line:1,column:16038},end:{line:1,column:16039}},loc:{start:{line:1,column:16042},end:{line:1,column:22342}},line:1},"131":{name:"(anonymous_131)",decl:{start:{line:1,column:16061},end:{line:1,column:16062}},loc:{start:{line:1,column:16077},end:{line:1,column:17764}},line:1},"132":{name:"(anonymous_132)",decl:{start:{line:1,column:16824},end:{line:1,column:16825}},loc:{start:{line:1,column:16827},end:{line:1,column:16903}},line:1},"133":{name:"(anonymous_133)",decl:{start:{line:1,column:17374},end:{line:1,column:17375}},loc:{start:{line:1,column:17378},end:{line:1,column:17456}},line:1},"134":{name:"(anonymous_134)",decl:{start:{line:1,column:17583},end:{line:1,column:17584}},loc:{start:{line:1,column:17587},end:{line:1,column:17661}},line:1},"135":{name:"(anonymous_135)",decl:{start:{line:1,column:17764},end:{line:1,column:17765}},loc:{start:{line:1,column:17782},end:{line:1,column:18054}},line:1},"136":{name:"(anonymous_136)",decl:{start:{line:1,column:18054},end:{line:1,column:18055}},loc:{start:{line:1,column:18061},end:{line:1,column:18397}},line:1},"137":{name:"(anonymous_137)",decl:{start:{line:1,column:18111},end:{line:1,column:18112}},loc:{start:{line:1,column:18115},end:{line:1,column:18169}},line:1},"138":{name:"(anonymous_138)",decl:{start:{line:1,column:18397},end:{line:1,column:18398}},loc:{start:{line:1,column:18412},end:{line:1,column:18647}},line:1},"139":{name:"(anonymous_139)",decl:{start:{line:1,column:18608},end:{line:1,column:18609}},loc:{start:{line:1,column:18611},end:{line:1,column:18645}},line:1},"140":{name:"(anonymous_140)",decl:{start:{line:1,column:18647},end:{line:1,column:18648}},loc:{start:{line:1,column:18655},end:{line:1,column:18776}},line:1},"141":{name:"(anonymous_141)",decl:{start:{line:1,column:18776},end:{line:1,column:18777}},loc:{start:{line:1,column:18788},end:{line:1,column:19295}},line:1},"142":{name:"(anonymous_142)",decl:{start:{line:1,column:19295},end:{line:1,column:19296}},loc:{start:{line:1,column:19309},end:{line:1,column:19551}},line:1},"143":{name:"(anonymous_143)",decl:{start:{line:1,column:19551},end:{line:1,column:19552}},loc:{start:{line:1,column:19570},end:{line:1,column:19825}},line:1},"144":{name:"(anonymous_144)",decl:{start:{line:1,column:19734},end:{line:1,column:19735}},loc:{start:{line:1,column:19738},end:{line:1,column:19769}},line:1},"145":{name:"(anonymous_145)",decl:{start:{line:1,column:19825},end:{line:1,column:19826}},loc:{start:{line:1,column:19835},end:{line:1,column:19973}},line:1},"146":{name:"(anonymous_146)",decl:{start:{line:1,column:19973},end:{line:1,column:19974}},loc:{start:{line:1,column:19980},end:{line:1,column:20192}},line:1},"147":{name:"(anonymous_147)",decl:{start:{line:1,column:20192},end:{line:1,column:20193}},loc:{start:{line:1,column:20213},end:{line:1,column:20508}},line:1},"148":{name:"(anonymous_148)",decl:{start:{line:1,column:20508},end:{line:1,column:20509}},loc:{start:{line:1,column:20525},end:{line:1,column:20695}},line:1},"149":{name:"(anonymous_149)",decl:{start:{line:1,column:20637},end:{line:1,column:20638}},loc:{start:{line:1,column:20641},end:{line:1,column:20672}},line:1},"150":{name:"(anonymous_150)",decl:{start:{line:1,column:20695},end:{line:1,column:20696}},loc:{start:{line:1,column:20707},end:{line:1,column:20754}},line:1},"151":{name:"(anonymous_151)",decl:{start:{line:1,column:20754},end:{line:1,column:20755}},loc:{start:{line:1,column:20765},end:{line:1,column:20812}},line:1},"152":{name:"(anonymous_152)",decl:{start:{line:1,column:20812},end:{line:1,column:20813}},loc:{start:{line:1,column:20832},end:{line:1,column:21136}},line:1},"153":{name:"(anonymous_153)",decl:{start:{line:1,column:21136},end:{line:1,column:21137}},loc:{start:{line:1,column:21143},end:{line:1,column:21520}},line:1},"154":{name:"(anonymous_154)",decl:{start:{line:1,column:21150},end:{line:1,column:21151}},loc:{start:{line:1,column:21154},end:{line:1,column:21208}},line:1},"155":{name:"(anonymous_155)",decl:{start:{line:1,column:21211},end:{line:1,column:21212}},loc:{start:{line:1,column:21215},end:{line:1,column:21269}},line:1},"156":{name:"(anonymous_156)",decl:{start:{line:1,column:21272},end:{line:1,column:21273}},loc:{start:{line:1,column:21276},end:{line:1,column:21328}},line:1},"157":{name:"(anonymous_157)",decl:{start:{line:1,column:21461},end:{line:1,column:21462}},loc:{start:{line:1,column:21465},end:{line:1,column:21489}},line:1},"158":{name:"(anonymous_158)",decl:{start:{line:1,column:21520},end:{line:1,column:21521}},loc:{start:{line:1,column:21531},end:{line:1,column:21752}},line:1},"159":{name:"(anonymous_159)",decl:{start:{line:1,column:21752},end:{line:1,column:21753}},loc:{start:{line:1,column:21765},end:{line:1,column:22318}},line:1},"160":{name:"(anonymous_160)",decl:{start:{line:1,column:22366},end:{line:1,column:22367}},loc:{start:{line:1,column:22379},end:{line:1,column:22418}},line:1},"161":{name:"(anonymous_161)",decl:{start:{line:1,column:22418},end:{line:1,column:22419}},loc:{start:{line:1,column:22426},end:{line:1,column:22560}},line:1},"162":{name:"(anonymous_162)",decl:{start:{line:1,column:22560},end:{line:1,column:22561}},loc:{start:{line:1,column:22569},end:{line:1,column:23743}},line:1},"163":{name:"(anonymous_163)",decl:{start:{line:1,column:22639},end:{line:1,column:22640}},loc:{start:{line:1,column:22643},end:{line:1,column:23136}},line:1},"164":{name:"(anonymous_164)",decl:{start:{line:1,column:22701},end:{line:1,column:22702}},loc:{start:{line:1,column:22704},end:{line:1,column:23133}},line:1},"165":{name:"(anonymous_165)",decl:{start:{line:1,column:22880},end:{line:1,column:22881}},loc:{start:{line:1,column:22884},end:{line:1,column:23039}},line:1},"166":{name:"n",decl:{start:{line:1,column:23146},end:{line:1,column:23147}},loc:{start:{line:1,column:23149},end:{line:1,column:23181}},line:1},"167":{name:"(anonymous_167)",decl:{start:{line:1,column:23187},end:{line:1,column:23188}},loc:{start:{line:1,column:23190},end:{line:1,column:23285}},line:1},"168":{name:"a",decl:{start:{line:1,column:23295},end:{line:1,column:23296}},loc:{start:{line:1,column:23298},end:{line:1,column:23321}},line:1},"169":{name:"h",decl:{start:{line:1,column:23330},end:{line:1,column:23331}},loc:{start:{line:1,column:23333},end:{line:1,column:23353}},line:1},"170":{name:"y",decl:{start:{line:1,column:23362},end:{line:1,column:23363}},loc:{start:{line:1,column:23366},end:{line:1,column:23391}},line:1},"171":{name:"(anonymous_171)",decl:{start:{line:1,column:23397},end:{line:1,column:23398}},loc:{start:{line:1,column:23401},end:{line:1,column:23529}},line:1},"172":{name:"(anonymous_172)",decl:{start:{line:1,column:23711},end:{line:1,column:23712}},loc:{start:{line:1,column:23715},end:{line:1,column:23728}},line:1},"173":{name:"(anonymous_173)",decl:{start:{line:1,column:23743},end:{line:1,column:23744}},loc:{start:{line:1,column:23757},end:{line:1,column:23827}},line:1},"174":{name:"(anonymous_174)",decl:{start:{line:1,column:23827},end:{line:1,column:23828}},loc:{start:{line:1,column:23845},end:{line:1,column:23936}},line:1},"175":{name:"(anonymous_175)",decl:{start:{line:1,column:23957},end:{line:1,column:23958}},loc:{start:{line:1,column:23976},end:{line:1,column:24181}},line:1},"176":{name:"(anonymous_176)",decl:{start:{line:1,column:24144},end:{line:1,column:24145}},loc:{start:{line:1,column:24147},end:{line:1,column:24152}},line:1},"177":{name:"(anonymous_177)",decl:{start:{line:1,column:24161},end:{line:1,column:24162}},loc:{start:{line:1,column:24164},end:{line:1,column:24167}},line:1},"178":{name:"re",decl:{start:{line:1,column:24210},end:{line:1,column:24212}},loc:{start:{line:1,column:24222},end:{line:1,column:24757}},line:1},"179":{name:"(anonymous_179)",decl:{start:{line:1,column:24782},end:{line:1,column:24783}},loc:{start:{line:1,column:24786},end:{line:1,column:24788}},line:1},"180":{name:"(anonymous_180)",decl:{start:{line:1,column:24797},end:{line:1,column:24798}},loc:{start:{line:1,column:24801},end:{line:1,column:24803}},line:1},"181":{name:"(anonymous_181)",decl:{start:{line:1,column:24815},end:{line:1,column:24816}},loc:{start:{line:1,column:24819},end:{line:1,column:24820}},line:1},"182":{name:"(anonymous_182)",decl:{start:{line:1,column:24835},end:{line:1,column:24836}},loc:{start:{line:1,column:24839},end:{line:1,column:24841}},line:1},"183":{name:"(anonymous_183)",decl:{start:{line:1,column:24851},end:{line:1,column:24852}},loc:{start:{line:1,column:24855},end:{line:1,column:24857}},line:1},"184":{name:"(anonymous_184)",decl:{start:{line:1,column:24901},end:{line:1,column:24902}},loc:{start:{line:1,column:24904},end:{line:1,column:24995}},line:1},"185":{name:"M",decl:{start:{line:1,column:25210},end:{line:1,column:25211}},loc:{start:{line:1,column:25214},end:{line:1,column:25306}},line:1},"186":{name:"j",decl:{start:{line:1,column:25315},end:{line:1,column:25316}},loc:{start:{line:1,column:25321},end:{line:1,column:25629}},line:1},"187":{name:"se",decl:{start:{line:1,column:25638},end:{line:1,column:25640}},loc:{start:{line:1,column:25643},end:{line:1,column:25732}},line:1},"188":{name:"mt",decl:{start:{line:1,column:25741},end:{line:1,column:25743}},loc:{start:{line:1,column:25748},end:{line:1,column:26086}},line:1},"189":{name:"ne",decl:{start:{line:1,column:26095},end:{line:1,column:26097}},loc:{start:{line:1,column:26102},end:{line:1,column:26153}},line:1},"190":{name:"yt",decl:{start:{line:1,column:26162},end:{line:1,column:26164}},loc:{start:{line:1,column:26169},end:{line:1,column:26499}},line:1},"191":{name:"(anonymous_191)",decl:{start:{line:1,column:26602},end:{line:1,column:26603}},loc:{start:{line:1,column:26613},end:{line:1,column:26820}},line:1},"192":{name:"(anonymous_192)",decl:{start:{line:1,column:26838},end:{line:1,column:26839}},loc:{start:{line:1,column:26852},end:{line:1,column:26869}},line:1},"193":{name:"(anonymous_193)",decl:{start:{line:1,column:26869},end:{line:1,column:26870}},loc:{start:{line:1,column:26878},end:{line:1,column:27054}},line:1},"194":{name:"(anonymous_194)",decl:{start:{line:1,column:27054},end:{line:1,column:27055}},loc:{start:{line:1,column:27071},end:{line:1,column:27282}},line:1},"195":{name:"(anonymous_195)",decl:{start:{line:1,column:27282},end:{line:1,column:27283}},loc:{start:{line:1,column:27299},end:{line:1,column:27378}},line:1},"196":{name:"(anonymous_196)",decl:{start:{line:1,column:27401},end:{line:1,column:27402}},loc:{start:{line:1,column:27415},end:{line:1,column:27519}},line:1},"197":{name:"(anonymous_197)",decl:{start:{line:1,column:27519},end:{line:1,column:27520}},loc:{start:{line:1,column:27525},end:{line:1,column:28118}},line:1},"198":{name:"(anonymous_198)",decl:{start:{line:1,column:28118},end:{line:1,column:28119}},loc:{start:{line:1,column:28133},end:{line:1,column:29026}},line:1},"199":{name:"(anonymous_199)",decl:{start:{line:1,column:29026},end:{line:1,column:29027}},loc:{start:{line:1,column:29037},end:{line:1,column:29097}},line:1},"200":{name:"(anonymous_200)",decl:{start:{line:1,column:29097},end:{line:1,column:29098}},loc:{start:{line:1,column:29123},end:{line:1,column:29434}},line:1},"201":{name:"(anonymous_201)",decl:{start:{line:1,column:29434},end:{line:1,column:29435}},loc:{start:{line:1,column:29443},end:{line:1,column:29534}},line:1},"202":{name:"(anonymous_202)",decl:{start:{line:1,column:29545},end:{line:1,column:29546}},loc:{start:{line:1,column:29559},end:{line:1,column:29607}},line:1},"203":{name:"(anonymous_203)",decl:{start:{line:1,column:29607},end:{line:1,column:29608}},loc:{start:{line:1,column:29624},end:{line:1,column:29788}},line:1},"204":{name:"(anonymous_204)",decl:{start:{line:1,column:29788},end:{line:1,column:29789}},loc:{start:{line:1,column:29812},end:{line:1,column:29849}},line:1},"205":{name:"Ne",decl:{start:{line:1,column:29860},end:{line:1,column:29862}},loc:{start:{line:1,column:29865},end:{line:1,column:29892}},line:1},"206":{name:"(anonymous_206)",decl:{start:{line:1,column:29917},end:{line:1,column:29918}},loc:{start:{line:1,column:29928},end:{line:1,column:29987}},line:1},"207":{name:"Oe",decl:{start:{line:1,column:29997},end:{line:1,column:29999}},loc:{start:{line:1,column:30002},end:{line:1,column:30028}},line:1},"208":{name:"rt",decl:{start:{line:1,column:30037},end:{line:1,column:30039}},loc:{start:{line:1,column:30042},end:{line:1,column:30104}},line:1},"209":{name:"Be",decl:{start:{line:1,column:30113},end:{line:1,column:30115}},loc:{start:{line:1,column:30120},end:{line:1,column:30422}},line:1},"210":{name:"Le",decl:{start:{line:1,column:30431},end:{line:1,column:30433}},loc:{start:{line:1,column:30436},end:{line:1,column:30483}},line:1},"211":{name:"p",decl:{start:{line:1,column:30492},end:{line:1,column:30493}},loc:{start:{line:1,column:30500},end:{line:1,column:30541}},line:1},"212":{name:"(anonymous_212)",decl:{start:{line:1,column:30518},end:{line:1,column:30519}},loc:{start:{line:1,column:30528},end:{line:1,column:30540}},line:1},"213":{name:"(anonymous_213)",decl:{start:{line:1,column:30669},end:{line:1,column:30670}},loc:{start:{line:1,column:30687},end:{line:1,column:30959}},line:1},"214":{name:"(anonymous_214)",decl:{start:{line:1,column:30959},end:{line:1,column:30960}},loc:{start:{line:1,column:30977},end:{line:1,column:31000}},line:1},"215":{name:"(anonymous_215)",decl:{start:{line:1,column:31000},end:{line:1,column:31001}},loc:{start:{line:1,column:31011},end:{line:1,column:31206}},line:1},"216":{name:"(anonymous_216)",decl:{start:{line:1,column:31206},end:{line:1,column:31207}},loc:{start:{line:1,column:31218},end:{line:1,column:31237}},line:1},"217":{name:"(anonymous_217)",decl:{start:{line:1,column:31237},end:{line:1,column:31238}},loc:{start:{line:1,column:31246},end:{line:1,column:31380}},line:1},"218":{name:"(anonymous_218)",decl:{start:{line:1,column:31380},end:{line:1,column:31381}},loc:{start:{line:1,column:31386},end:{line:1,column:31409}},line:1},"219":{name:"(anonymous_219)",decl:{start:{line:1,column:31409},end:{line:1,column:31410}},loc:{start:{line:1,column:31419},end:{line:1,column:31477}},line:1},"220":{name:"(anonymous_220)",decl:{start:{line:1,column:31477},end:{line:1,column:31478}},loc:{start:{line:1,column:31489},end:{line:1,column:32201}},line:1},"221":{name:"(anonymous_221)",decl:{start:{line:1,column:32201},end:{line:1,column:32202}},loc:{start:{line:1,column:32226},end:{line:1,column:32628}},line:1},"222":{name:"(anonymous_222)",decl:{start:{line:1,column:32369},end:{line:1,column:32370}},loc:{start:{line:1,column:32373},end:{line:1,column:32540}},line:1},"223":{name:"(anonymous_223)",decl:{start:{line:1,column:32546},end:{line:1,column:32547}},loc:{start:{line:1,column:32554},end:{line:1,column:32597}},line:1},"224":{name:"(anonymous_224)",decl:{start:{line:1,column:32628},end:{line:1,column:32629}},loc:{start:{line:1,column:32647},end:{line:1,column:32745}},line:1},"225":{name:"(anonymous_225)",decl:{start:{line:1,column:32667},end:{line:1,column:32668}},loc:{start:{line:1,column:32674},end:{line:1,column:32743}},line:1},"226":{name:"(anonymous_226)",decl:{start:{line:1,column:32681},end:{line:1,column:32682}},loc:{start:{line:1,column:32688},end:{line:1,column:32699}},line:1},"227":{name:"(anonymous_227)",decl:{start:{line:1,column:32745},end:{line:1,column:32746}},loc:{start:{line:1,column:32759},end:{line:1,column:33130}},line:1},"228":{name:"(anonymous_228)",decl:{start:{line:1,column:32923},end:{line:1,column:32924}},loc:{start:{line:1,column:32934},end:{line:1,column:33088}},line:1},"229":{name:"(anonymous_229)",decl:{start:{line:1,column:33130},end:{line:1,column:33131}},loc:{start:{line:1,column:33147},end:{line:1,column:33310}},line:1},"230":{name:"(anonymous_230)",decl:{start:{line:1,column:33310},end:{line:1,column:33311}},loc:{start:{line:1,column:33319},end:{line:1,column:33354}},line:1},"231":{name:"(anonymous_231)",decl:{start:{line:1,column:33354},end:{line:1,column:33355}},loc:{start:{line:1,column:33362},end:{line:1,column:33470}},line:1},"232":{name:"(anonymous_232)",decl:{start:{line:1,column:33402},end:{line:1,column:33403}},loc:{start:{line:1,column:33405},end:{line:1,column:33433}},line:1},"233":{name:"(anonymous_233)",decl:{start:{line:1,column:33470},end:{line:1,column:33471}},loc:{start:{line:1,column:33491},end:{line:1,column:33596}},line:1},"234":{name:"(anonymous_234)",decl:{start:{line:1,column:33596},end:{line:1,column:33597}},loc:{start:{line:1,column:33606},end:{line:1,column:33660}},line:1},"235":{name:"(anonymous_235)",decl:{start:{line:1,column:33660},end:{line:1,column:33661}},loc:{start:{line:1,column:33672},end:{line:1,column:33760}},line:1},"236":{name:"(anonymous_236)",decl:{start:{line:1,column:33760},end:{line:1,column:33761}},loc:{start:{line:1,column:33772},end:{line:1,column:33965}},line:1},"237":{name:"(anonymous_237)",decl:{start:{line:1,column:33804},end:{line:1,column:33805}},loc:{start:{line:1,column:33807},end:{line:1,column:33963}},line:1},"238":{name:"(anonymous_238)",decl:{start:{line:1,column:33833},end:{line:1,column:33834}},loc:{start:{line:1,column:33836},end:{line:1,column:33852}},line:1},"239":{name:"(anonymous_239)",decl:{start:{line:1,column:33965},end:{line:1,column:33966}},loc:{start:{line:1,column:33976},end:{line:1,column:34603}},line:1},"240":{name:"(anonymous_240)",decl:{start:{line:1,column:34603},end:{line:1,column:34604}},loc:{start:{line:1,column:34613},end:{line:1,column:34741}},line:1},"241":{name:"(anonymous_241)",decl:{start:{line:1,column:34741},end:{line:1,column:34742}},loc:{start:{line:1,column:34753},end:{line:1,column:34979}},line:1},"242":{name:"(anonymous_242)",decl:{start:{line:1,column:34979},end:{line:1,column:34980}},loc:{start:{line:1,column:34985},end:{line:1,column:35070}},line:1},"243":{name:"(anonymous_243)",decl:{start:{line:1,column:35009},end:{line:1,column:35010}},loc:{start:{line:1,column:35023},end:{line:1,column:35069}},line:1},"244":{name:"(anonymous_244)",decl:{start:{line:1,column:35070},end:{line:1,column:35071}},loc:{start:{line:1,column:35078},end:{line:1,column:35203}},line:1},"245":{name:"(anonymous_245)",decl:{start:{line:1,column:35203},end:{line:1,column:35204}},loc:{start:{line:1,column:35217},end:{line:1,column:35360}},line:1},"246":{name:"(anonymous_246)",decl:{start:{line:1,column:35360},end:{line:1,column:35361}},loc:{start:{line:1,column:35374},end:{line:1,column:35542}},line:1},"247":{name:"(anonymous_247)",decl:{start:{line:1,column:35402},end:{line:1,column:35403}},loc:{start:{line:1,column:35405},end:{line:1,column:35422}},line:1},"248":{name:"(anonymous_248)",decl:{start:{line:1,column:35470},end:{line:1,column:35471}},loc:{start:{line:1,column:35473},end:{line:1,column:35521}},line:1},"249":{name:"(anonymous_249)",decl:{start:{line:1,column:35542},end:{line:1,column:35543}},loc:{start:{line:1,column:35556},end:{line:1,column:35609}},line:1},"250":{name:"(anonymous_250)",decl:{start:{line:1,column:35609},end:{line:1,column:35610}},loc:{start:{line:1,column:35618},end:{line:1,column:35698}},line:1},"251":{name:"(anonymous_251)",decl:{start:{line:1,column:35649},end:{line:1,column:35650}},loc:{start:{line:1,column:35652},end:{line:1,column:35655}},line:1},"252":{name:"(anonymous_252)",decl:{start:{line:1,column:35698},end:{line:1,column:35699}},loc:{start:{line:1,column:35710},end:{line:1,column:35840}},line:1},"253":{name:"(anonymous_253)",decl:{start:{line:1,column:35840},end:{line:1,column:35841}},loc:{start:{line:1,column:35847},end:{line:1,column:35873}},line:1},"254":{name:"(anonymous_254)",decl:{start:{line:1,column:35873},end:{line:1,column:35874}},loc:{start:{line:1,column:35884},end:{line:1,column:35919}},line:1},"255":{name:"(anonymous_255)",decl:{start:{line:1,column:35919},end:{line:1,column:35920}},loc:{start:{line:1,column:35933},end:{line:1,column:35969}},line:1},"256":{name:"(anonymous_256)",decl:{start:{line:1,column:35969},end:{line:1,column:35970}},loc:{start:{line:1,column:35979},end:{line:1,column:36013}},line:1},"257":{name:"(anonymous_257)",decl:{start:{line:1,column:36013},end:{line:1,column:36014}},loc:{start:{line:1,column:36021},end:{line:1,column:36103}},line:1},"258":{name:"(anonymous_258)",decl:{start:{line:1,column:36103},end:{line:1,column:36104}},loc:{start:{line:1,column:36116},end:{line:1,column:36201}},line:1},"259":{name:"(anonymous_259)",decl:{start:{line:1,column:36201},end:{line:1,column:36202}},loc:{start:{line:1,column:36210},end:{line:1,column:36381}},line:1},"260":{name:"(anonymous_260)",decl:{start:{line:1,column:36381},end:{line:1,column:36382}},loc:{start:{line:1,column:36395},end:{line:1,column:36426}},line:1},"261":{name:"(anonymous_261)",decl:{start:{line:1,column:36426},end:{line:1,column:36427}},loc:{start:{line:1,column:36442},end:{line:1,column:36548}},line:1},"262":{name:"(anonymous_262)",decl:{start:{line:1,column:36548},end:{line:1,column:36549}},loc:{start:{line:1,column:36569},end:{line:1,column:36678}},line:1},"263":{name:"(anonymous_263)",decl:{start:{line:1,column:36678},end:{line:1,column:36679}},loc:{start:{line:1,column:36695},end:{line:1,column:36890}},line:1},"264":{name:"(anonymous_264)",decl:{start:{line:1,column:36890},end:{line:1,column:36891}},loc:{start:{line:1,column:36912},end:{line:1,column:36951}},line:1},"265":{name:"(anonymous_265)",decl:{start:{line:1,column:36951},end:{line:1,column:36952}},loc:{start:{line:1,column:36977},end:{line:1,column:37122}},line:1},"266":{name:"k",decl:{start:{line:1,column:37133},end:{line:1,column:37134}},loc:{start:{line:1,column:37137},end:{line:1,column:37272}},line:1},"267":{name:"(anonymous_267)",decl:{start:{line:1,column:37293},end:{line:1,column:37294}},loc:{start:{line:1,column:37303},end:{line:1,column:37486}},line:1},"268":{name:"(anonymous_268)",decl:{start:{line:1,column:37505},end:{line:1,column:37506}},loc:{start:{line:1,column:37515},end:{line:1,column:37532}},line:1},"269":{name:"(anonymous_269)",decl:{start:{line:1,column:37552},end:{line:1,column:37553}},loc:{start:{line:1,column:37563},end:{line:1,column:37574}},line:1},"270":{name:"(anonymous_270)",decl:{start:{line:1,column:37594},end:{line:1,column:37595}},loc:{start:{line:1,column:37605},end:{line:1,column:37617}},line:1},"271":{name:"(anonymous_271)",decl:{start:{line:1,column:37640},end:{line:1,column:37641}},loc:{start:{line:1,column:37651},end:{line:1,column:37666}},line:1},"272":{name:"(anonymous_272)",decl:{start:{line:1,column:37689},end:{line:1,column:37690}},loc:{start:{line:1,column:37705},end:{line:1,column:38455}},line:1},"273":{name:"(anonymous_273)",decl:{start:{line:1,column:38455},end:{line:1,column:38456}},loc:{start:{line:1,column:38470},end:{line:1,column:38571}},line:1},"274":{name:"(anonymous_274)",decl:{start:{line:1,column:38571},end:{line:1,column:38572}},loc:{start:{line:1,column:38594},end:{line:1,column:38676}},line:1},"275":{name:"(anonymous_275)",decl:{start:{line:1,column:38676},end:{line:1,column:38677}},loc:{start:{line:1,column:38696},end:{line:1,column:38827}},line:1},"276":{name:"(anonymous_276)",decl:{start:{line:1,column:38827},end:{line:1,column:38828}},loc:{start:{line:1,column:38849},end:{line:1,column:38987}},line:1},"277":{name:"(anonymous_277)",decl:{start:{line:1,column:38987},end:{line:1,column:38988}},loc:{start:{line:1,column:39010},end:{line:1,column:39147}},line:1},"278":{name:"(anonymous_278)",decl:{start:{line:1,column:39147},end:{line:1,column:39148}},loc:{start:{line:1,column:39157},end:{line:1,column:39219}},line:1},"279":{name:"(anonymous_279)",decl:{start:{line:1,column:39219},end:{line:1,column:39220}},loc:{start:{line:1,column:39241},end:{line:1,column:39327}},line:1},"280":{name:"(anonymous_280)",decl:{start:{line:1,column:39327},end:{line:1,column:39328}},loc:{start:{line:1,column:39334},end:{line:1,column:39907}},line:1},"281":{name:"(anonymous_281)",decl:{start:{line:1,column:39513},end:{line:1,column:39514}},loc:{start:{line:1,column:39523},end:{line:1,column:39542}},line:1},"282":{name:"(anonymous_282)",decl:{start:{line:1,column:39546},end:{line:1,column:39547}},loc:{start:{line:1,column:39549},end:{line:1,column:39655}},line:1},"283":{name:"(anonymous_283)",decl:{start:{line:1,column:39736},end:{line:1,column:39737}},loc:{start:{line:1,column:39740},end:{line:1,column:39779}},line:1},"284":{name:"(anonymous_284)",decl:{start:{line:1,column:39829},end:{line:1,column:39830}},loc:{start:{line:1,column:39833},end:{line:1,column:39857}},line:1},"285":{name:"(anonymous_285)",decl:{start:{line:1,column:39907},end:{line:1,column:39908}},loc:{start:{line:1,column:39917},end:{line:1,column:39938}},line:1},"286":{name:"(anonymous_286)",decl:{start:{line:1,column:39938},end:{line:1,column:39939}},loc:{start:{line:1,column:39946},end:{line:1,column:40242}},line:1},"287":{name:"(anonymous_287)",decl:{start:{line:1,column:40242},end:{line:1,column:40243}},loc:{start:{line:1,column:40250},end:{line:1,column:40277}},line:1},"288":{name:"(anonymous_288)",decl:{start:{line:1,column:40277},end:{line:1,column:40278}},loc:{start:{line:1,column:40286},end:{line:1,column:40351}},line:1},"289":{name:"(anonymous_289)",decl:{start:{line:1,column:40351},end:{line:1,column:40352}},loc:{start:{line:1,column:40363},end:{line:1,column:40421}},line:1},"290":{name:"(anonymous_290)",decl:{start:{line:1,column:40366},end:{line:1,column:40367}},loc:{start:{line:1,column:40370},end:{line:1,column:40401}},line:1},"291":{name:"(anonymous_291)",decl:{start:{line:1,column:40421},end:{line:1,column:40422}},loc:{start:{line:1,column:40431},end:{line:1,column:40461}},line:1},"292":{name:"(anonymous_292)",decl:{start:{line:1,column:40461},end:{line:1,column:40462}},loc:{start:{line:1,column:40472},end:{line:1,column:40580}},line:1},"293":{name:"(anonymous_293)",decl:{start:{line:1,column:40580},end:{line:1,column:40581}},loc:{start:{line:1,column:40591},end:{line:1,column:40680}},line:1},"294":{name:"(anonymous_294)",decl:{start:{line:1,column:40680},end:{line:1,column:40681}},loc:{start:{line:1,column:40690},end:{line:1,column:40781}},line:1},"295":{name:"(anonymous_295)",decl:{start:{line:1,column:40781},end:{line:1,column:40782}},loc:{start:{line:1,column:40790},end:{line:1,column:40859}},line:1},"296":{name:"(anonymous_296)",decl:{start:{line:1,column:40809},end:{line:1,column:40810}},loc:{start:{line:1,column:40812},end:{line:1,column:40815}},line:1},"297":{name:"(anonymous_297)",decl:{start:{line:1,column:40859},end:{line:1,column:40860}},loc:{start:{line:1,column:40867},end:{line:1,column:40941}},line:1},"298":{name:"(anonymous_298)",decl:{start:{line:1,column:40941},end:{line:1,column:40942}},loc:{start:{line:1,column:40953},end:{line:1,column:40975}},line:1},"299":{name:"(anonymous_299)",decl:{start:{line:1,column:40975},end:{line:1,column:40976}},loc:{start:{line:1,column:40987},end:{line:1,column:41191}},line:1},"300":{name:"(anonymous_300)",decl:{start:{line:1,column:41191},end:{line:1,column:41192}},loc:{start:{line:1,column:41202},end:{line:1,column:41769}},line:1},"301":{name:"(anonymous_301)",decl:{start:{line:1,column:41483},end:{line:1,column:41484}},loc:{start:{line:1,column:41487},end:{line:1,column:41688}},line:1},"302":{name:"(anonymous_302)",decl:{start:{line:1,column:41589},end:{line:1,column:41590}},loc:{start:{line:1,column:41592},end:{line:1,column:41685}},line:1},"303":{name:"(anonymous_303)",decl:{start:{line:1,column:41738},end:{line:1,column:41739}},loc:{start:{line:1,column:41742},end:{line:1,column:41766}},line:1},"304":{name:"(anonymous_304)",decl:{start:{line:1,column:41769},end:{line:1,column:41770}},loc:{start:{line:1,column:41782},end:{line:1,column:41887}},line:1},"305":{name:"z",decl:{start:{line:1,column:41907},end:{line:1,column:41908}},loc:{start:{line:1,column:41913},end:{line:1,column:42217}},line:1},"306":{name:"(anonymous_306)",decl:{start:{line:1,column:42277},end:{line:1,column:42278}},loc:{start:{line:1,column:42288},end:{line:1,column:42382}},line:1},"307":{name:"(anonymous_307)",decl:{start:{line:1,column:42465},end:{line:1,column:42466}},loc:{start:{line:1,column:42469},end:{line:1,column:42474}},line:1},"308":{name:"(anonymous_308)",decl:{start:{line:1,column:42481},end:{line:1,column:42482}},loc:{start:{line:1,column:42485},end:{line:1,column:43270}},line:1},"309":{name:"(anonymous_309)",decl:{start:{line:1,column:42494},end:{line:1,column:42495}},loc:{start:{line:1,column:42525},end:{line:1,column:42730}},line:1},"310":{name:"(anonymous_310)",decl:{start:{line:1,column:42730},end:{line:1,column:42731}},loc:{start:{line:1,column:42760},end:{line:1,column:42913}},line:1},"311":{name:"(anonymous_311)",decl:{start:{line:1,column:42913},end:{line:1,column:42914}},loc:{start:{line:1,column:42924},end:{line:1,column:42961}},line:1},"312":{name:"(anonymous_312)",decl:{start:{line:1,column:42961},end:{line:1,column:42962}},loc:{start:{line:1,column:42975},end:{line:1,column:43145}},line:1},"313":{name:"(anonymous_313)",decl:{start:{line:1,column:43162},end:{line:1,column:43163}},loc:{start:{line:1,column:43173},end:{line:1,column:43191}},line:1},"314":{name:"(anonymous_314)",decl:{start:{line:1,column:43341},end:{line:1,column:43342}},loc:{start:{line:1,column:43345},end:{line:1,column:43350}},line:1},"315":{name:"(anonymous_315)",decl:{start:{line:1,column:43357},end:{line:1,column:43358}},loc:{start:{line:1,column:43361},end:{line:1,column:44038}},line:1},"316":{name:"(anonymous_316)",decl:{start:{line:1,column:43393},end:{line:1,column:43394}},loc:{start:{line:1,column:43409},end:{line:1,column:43477}},line:1},"317":{name:"(anonymous_317)",decl:{start:{line:1,column:43477},end:{line:1,column:43478}},loc:{start:{line:1,column:43505},end:{line:1,column:43675}},line:1},"318":{name:"(anonymous_318)",decl:{start:{line:1,column:43675},end:{line:1,column:43676}},loc:{start:{line:1,column:43702},end:{line:1,column:43913}},line:1},"319":{name:"(anonymous_319)",decl:{start:{line:1,column:43930},end:{line:1,column:43931}},loc:{start:{line:1,column:43941},end:{line:1,column:43959}},line:1},"320":{name:"(anonymous_320)",decl:{start:{line:1,column:44113},end:{line:1,column:44114}},loc:{start:{line:1,column:44117},end:{line:1,column:44122}},line:1},"321":{name:"(anonymous_321)",decl:{start:{line:1,column:44129},end:{line:1,column:44130}},loc:{start:{line:1,column:44133},end:{line:1,column:45529}},line:1},"322":{name:"(anonymous_322)",decl:{start:{line:1,column:44219},end:{line:1,column:44220}},loc:{start:{line:1,column:44234},end:{line:1,column:44636}},line:1},"323":{name:"(anonymous_323)",decl:{start:{line:1,column:44636},end:{line:1,column:44637}},loc:{start:{line:1,column:44652},end:{line:1,column:44855}},line:1},"324":{name:"(anonymous_324)",decl:{start:{line:1,column:44855},end:{line:1,column:44856}},loc:{start:{line:1,column:44873},end:{line:1,column:44982}},line:1},"325":{name:"(anonymous_325)",decl:{start:{line:1,column:44982},end:{line:1,column:44983}},loc:{start:{line:1,column:45001},end:{line:1,column:45114}},line:1},"326":{name:"(anonymous_326)",decl:{start:{line:1,column:45114},end:{line:1,column:45115}},loc:{start:{line:1,column:45130},end:{line:1,column:45176}},line:1},"327":{name:"(anonymous_327)",decl:{start:{line:1,column:45176},end:{line:1,column:45177}},loc:{start:{line:1,column:45195},end:{line:1,column:45245}},line:1},"328":{name:"(anonymous_328)",decl:{start:{line:1,column:45245},end:{line:1,column:45246}},loc:{start:{line:1,column:45265},end:{line:1,column:45404}},line:1},"329":{name:"(anonymous_329)",decl:{start:{line:1,column:45421},end:{line:1,column:45422}},loc:{start:{line:1,column:45432},end:{line:1,column:45450}},line:1},"330":{name:"(anonymous_330)",decl:{start:{line:1,column:45593},end:{line:1,column:45594}},loc:{start:{line:1,column:45597},end:{line:1,column:45598}},line:1},"331":{name:"(anonymous_331)",decl:{start:{line:1,column:45605},end:{line:1,column:45606}},loc:{start:{line:1,column:45609},end:{line:1,column:51649}},line:1},"332":{name:"(anonymous_332)",decl:{start:{line:1,column:46048},end:{line:1,column:46049}},loc:{start:{line:1,column:46061},end:{line:1,column:46148}},line:1},"333":{name:"(anonymous_333)",decl:{start:{line:1,column:46148},end:{line:1,column:46149}},loc:{start:{line:1,column:46177},end:{line:1,column:46254}},line:1},"334":{name:"(anonymous_334)",decl:{start:{line:1,column:46254},end:{line:1,column:46255}},loc:{start:{line:1,column:46276},end:{line:1,column:46322}},line:1},"335":{name:"(anonymous_335)",decl:{start:{line:1,column:46322},end:{line:1,column:46323}},loc:{start:{line:1,column:46333},end:{line:1,column:46416}},line:1},"336":{name:"(anonymous_336)",decl:{start:{line:1,column:46416},end:{line:1,column:46417}},loc:{start:{line:1,column:46428},end:{line:1,column:46513}},line:1},"337":{name:"(anonymous_337)",decl:{start:{line:1,column:46513},end:{line:1,column:46514}},loc:{start:{line:1,column:46526},end:{line:1,column:46545}},line:1},"338":{name:"(anonymous_338)",decl:{start:{line:1,column:46545},end:{line:1,column:46546}},loc:{start:{line:1,column:46554},end:{line:1,column:47139}},line:1},"339":{name:"(anonymous_339)",decl:{start:{line:1,column:46710},end:{line:1,column:46711}},loc:{start:{line:1,column:46714},end:{line:1,column:46778}},line:1},"340":{name:"(anonymous_340)",decl:{start:{line:1,column:46796},end:{line:1,column:46797}},loc:{start:{line:1,column:46800},end:{line:1,column:46845}},line:1},"341":{name:"(anonymous_341)",decl:{start:{line:1,column:46870},end:{line:1,column:46871}},loc:{start:{line:1,column:46874},end:{line:1,column:46919}},line:1},"342":{name:"(anonymous_342)",decl:{start:{line:1,column:46983},end:{line:1,column:46984}},loc:{start:{line:1,column:46986},end:{line:1,column:47026}},line:1},"343":{name:"(anonymous_343)",decl:{start:{line:1,column:47094},end:{line:1,column:47095}},loc:{start:{line:1,column:47097},end:{line:1,column:47136}},line:1},"344":{name:"(anonymous_344)",decl:{start:{line:1,column:47139},end:{line:1,column:47140}},loc:{start:{line:1,column:47151},end:{line:1,column:47373}},line:1},"345":{name:"(anonymous_345)",decl:{start:{line:1,column:47373},end:{line:1,column:47374}},loc:{start:{line:1,column:47406},end:{line:1,column:48020}},line:1},"346":{name:"(anonymous_346)",decl:{start:{line:1,column:47575},end:{line:1,column:47576}},loc:{start:{line:1,column:47578},end:{line:1,column:48017}},line:1},"347":{name:"(anonymous_347)",decl:{start:{line:1,column:48020},end:{line:1,column:48021}},loc:{start:{line:1,column:48057},end:{line:1,column:48601}},line:1},"348":{name:"(anonymous_348)",decl:{start:{line:1,column:48250},end:{line:1,column:48251}},loc:{start:{line:1,column:48254},end:{line:1,column:48277}},line:1},"349":{name:"(anonymous_349)",decl:{start:{line:1,column:48283},end:{line:1,column:48284}},loc:{start:{line:1,column:48287},end:{line:1,column:48316}},line:1},"350":{name:"(anonymous_350)",decl:{start:{line:1,column:48338},end:{line:1,column:48339}},loc:{start:{line:1,column:48342},end:{line:1,column:48424}},line:1},"351":{name:"(anonymous_351)",decl:{start:{line:1,column:48437},end:{line:1,column:48438}},loc:{start:{line:1,column:48440},end:{line:1,column:48597}},line:1},"352":{name:"(anonymous_352)",decl:{start:{line:1,column:48601},end:{line:1,column:48602}},loc:{start:{line:1,column:48630},end:{line:1,column:48759}},line:1},"353":{name:"(anonymous_353)",decl:{start:{line:1,column:48759},end:{line:1,column:48760}},loc:{start:{line:1,column:48792},end:{line:1,column:49280}},line:1},"354":{name:"(anonymous_354)",decl:{start:{line:1,column:48971},end:{line:1,column:48972}},loc:{start:{line:1,column:48974},end:{line:1,column:49277}},line:1},"355":{name:"(anonymous_355)",decl:{start:{line:1,column:49280},end:{line:1,column:49281}},loc:{start:{line:1,column:49312},end:{line:1,column:49589}},line:1},"356":{name:"(anonymous_356)",decl:{start:{line:1,column:49589},end:{line:1,column:49590}},loc:{start:{line:1,column:49620},end:{line:1,column:49932}},line:1},"357":{name:"(anonymous_357)",decl:{start:{line:1,column:49754},end:{line:1,column:49755}},loc:{start:{line:1,column:49758},end:{line:1,column:49910}},line:1},"358":{name:"(anonymous_358)",decl:{start:{line:1,column:49916},end:{line:1,column:49917}},loc:{start:{line:1,column:49920},end:{line:1,column:49924}},line:1},"359":{name:"(anonymous_359)",decl:{start:{line:1,column:49932},end:{line:1,column:49933}},loc:{start:{line:1,column:49957},end:{line:1,column:50275}},line:1},"360":{name:"(anonymous_360)",decl:{start:{line:1,column:50275},end:{line:1,column:50276}},loc:{start:{line:1,column:50293},end:{line:1,column:50351}},line:1},"361":{name:"(anonymous_361)",decl:{start:{line:1,column:50351},end:{line:1,column:50352}},loc:{start:{line:1,column:50367},end:{line:1,column:50452}},line:1},"362":{name:"(anonymous_362)",decl:{start:{line:1,column:50452},end:{line:1,column:50453}},loc:{start:{line:1,column:50467},end:{line:1,column:50516}},line:1},"363":{name:"(anonymous_363)",decl:{start:{line:1,column:50516},end:{line:1,column:50517}},loc:{start:{line:1,column:50532},end:{line:1,column:50582}},line:1},"364":{name:"(anonymous_364)",decl:{start:{line:1,column:50582},end:{line:1,column:50583}},loc:{start:{line:1,column:50600},end:{line:1,column:50707}},line:1},"365":{name:"(anonymous_365)",decl:{start:{line:1,column:50707},end:{line:1,column:50708}},loc:{start:{line:1,column:50733},end:{line:1,column:50819}},line:1},"366":{name:"(anonymous_366)",decl:{start:{line:1,column:50819},end:{line:1,column:50820}},loc:{start:{line:1,column:50844},end:{line:1,column:50918}},line:1},"367":{name:"(anonymous_367)",decl:{start:{line:1,column:50918},end:{line:1,column:50919}},loc:{start:{line:1,column:50952},end:{line:1,column:51090}},line:1},"368":{name:"(anonymous_368)",decl:{start:{line:1,column:51090},end:{line:1,column:51091}},loc:{start:{line:1,column:51110},end:{line:1,column:51381}},line:1},"369":{name:"(anonymous_369)",decl:{start:{line:1,column:51147},end:{line:1,column:51148}},loc:{start:{line:1,column:51150},end:{line:1,column:51178}},line:1},"370":{name:"(anonymous_370)",decl:{start:{line:1,column:51272},end:{line:1,column:51273}},loc:{start:{line:1,column:51275},end:{line:1,column:51303}},line:1},"371":{name:"(anonymous_371)",decl:{start:{line:1,column:51345},end:{line:1,column:51346}},loc:{start:{line:1,column:51348},end:{line:1,column:51376}},line:1},"372":{name:"(anonymous_372)",decl:{start:{line:1,column:51381},end:{line:1,column:51382}},loc:{start:{line:1,column:51399},end:{line:1,column:51524}},line:1},"373":{name:"(anonymous_373)",decl:{start:{line:1,column:51541},end:{line:1,column:51542}},loc:{start:{line:1,column:51552},end:{line:1,column:51570}},line:1}},branchMap:{"0":{loc:{start:{line:1,column:730},end:{line:1,column:837}},type:"binary-expr",locations:[{start:{line:1,column:730},end:{line:1,column:753}},{start:{line:1,column:755},end:{line:1,column:770}},{start:{line:1,column:772},end:{line:1,column:837}}],line:1},"1":{loc:{start:{line:1,column:878},end:{line:1,column:972}},type:"cond-expr",locations:[{start:{line:1,column:916},end:{line:1,column:937}},{start:{line:1,column:938},end:{line:1,column:972}}],line:1},"2":{loc:{start:{line:1,column:938},end:{line:1,column:972}},type:"binary-expr",locations:[{start:{line:1,column:938},end:{line:1,column:939}},{start:{line:1,column:941},end:{line:1,column:972}}],line:1},"3":{loc:{start:{line:1,column:998},end:{line:1,column:1115}},type:"cond-expr",locations:[{start:{line:1,column:1020},end:{line:1,column:1034}},{start:{line:1,column:1035},end:{line:1,column:1115}}],line:1},"4":{loc:{start:{line:1,column:998},end:{line:1,column:1019}},type:"binary-expr",locations:[{start:{line:1,column:998},end:{line:1,column:1000}},{start:{line:1,column:1002},end:{line:1,column:1019}}],line:1},"5":{loc:{start:{line:1,column:1020},end:{line:1,column:1034}},type:"cond-expr",locations:[{start:{line:1,column:1022},end:{line:1,column:1026}},{start:{line:1,column:1027},end:{line:1,column:1034}}],line:1},"6":{loc:{start:{line:1,column:1035},end:{line:1,column:1115}},type:"cond-expr",locations:[{start:{line:1,column:1073},end:{line:1,column:1099}},{start:{line:1,column:1100},end:{line:1,column:1115}}],line:1},"7":{loc:{start:{line:1,column:1035},end:{line:1,column:1072}},type:"binary-expr",locations:[{start:{line:1,column:1035},end:{line:1,column:1037}},{start:{line:1,column:1040},end:{line:1,column:1064}},{start:{line:1,column:1066},end:{line:1,column:1071}}],line:1},"8":{loc:{start:{line:1,column:1073},end:{line:1,column:1099}},type:"cond-expr",locations:[{start:{line:1,column:1075},end:{line:1,column:1079}},{start:{line:1,column:1080},end:{line:1,column:1099}}],line:1},"9":{loc:{start:{line:1,column:1108},end:{line:1,column:1113}},type:"binary-expr",locations:[{start:{line:1,column:1108},end:{line:1,column:1109}},{start:{line:1,column:1111},end:{line:1,column:1113}}],line:1},"10":{loc:{start:{line:1,column:1211},end:{line:1,column:1216}},type:"binary-expr",locations:[{start:{line:1,column:1211},end:{line:1,column:1212}},{start:{line:1,column:1214},end:{line:1,column:1216}}],line:1},"11":{loc:{start:{line:1,column:1262},end:{line:1,column:1381}},type:"cond-expr",locations:[{start:{line:1,column:1286},end:{line:1,column:1287}},{start:{line:1,column:1288},end:{line:1,column:1381}}],line:1},"12":{loc:{start:{line:1,column:1288},end:{line:1,column:1381}},type:"cond-expr",locations:[{start:{line:1,column:1313},end:{line:1,column:1330}},{start:{line:1,column:1331},end:{line:1,column:1381}}],line:1},"13":{loc:{start:{line:1,column:1406},end:{line:1,column:1481}},type:"if",locations:[{start:{line:1,column:1406},end:{line:1,column:1481}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"14":{loc:{start:{line:1,column:1409},end:{line:1,column:1435}},type:"binary-expr",locations:[{start:{line:1,column:1409},end:{line:1,column:1411}},{start:{line:1,column:1413},end:{line:1,column:1435}}],line:1},"15":{loc:{start:{line:1,column:1481},end:{line:1,column:1553}},type:"if",locations:[{start:{line:1,column:1481},end:{line:1,column:1553}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"16":{loc:{start:{line:1,column:1484},end:{line:1,column:1531}},type:"binary-expr",locations:[{start:{line:1,column:1484},end:{line:1,column:1486}},{start:{line:1,column:1489},end:{line:1,column:1518}},{start:{line:1,column:1520},end:{line:1,column:1530}}],line:1},"17":{loc:{start:{line:1,column:1564},end:{line:1,column:1588}},type:"binary-expr",locations:[{start:{line:1,column:1564},end:{line:1,column:1566}},{start:{line:1,column:1569},end:{line:1,column:1587}}],line:1},"18":{loc:{start:{line:1,column:1683},end:{line:1,column:1727}},type:"cond-expr",locations:[{start:{line:1,column:1705},end:{line:1,column:1707}},{start:{line:1,column:1708},end:{line:1,column:1727}}],line:1},"19":{loc:{start:{line:1,column:1833},end:{line:1,column:1884}},type:"binary-expr",locations:[{start:{line:1,column:1833},end:{line:1,column:1852}},{start:{line:1,column:1855},end:{line:1,column:1883}}],line:1},"20":{loc:{start:{line:1,column:1859},end:{line:1,column:1883}},type:"binary-expr",locations:[{start:{line:1,column:1859},end:{line:1,column:1878}},{start:{line:1,column:1880},end:{line:1,column:1883}}],line:1},"21":{loc:{start:{line:1,column:2155},end:{line:1,column:2213}},type:"if",locations:[{start:{line:1,column:2155},end:{line:1,column:2213}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"22":{loc:{start:{line:1,column:2238},end:{line:1,column:2350}},type:"cond-expr",locations:[{start:{line:1,column:2246},end:{line:1,column:2288}},{start:{line:1,column:2289},end:{line:1,column:2350}}],line:1},"23":{loc:{start:{line:1,column:2289},end:{line:1,column:2350}},type:"cond-expr",locations:[{start:{line:1,column:2294},end:{line:1,column:2348}},{start:{line:1,column:2349},end:{line:1,column:2350}}],line:1},"24":{loc:{start:{line:1,column:2294},end:{line:1,column:2348}},type:"cond-expr",locations:[{start:{line:1,column:2305},end:{line:1,column:2336}},{start:{line:1,column:2337},end:{line:1,column:2348}}],line:1},"25":{loc:{start:{line:1,column:2363},end:{line:1,column:2426}},type:"if",locations:[{start:{line:1,column:2363},end:{line:1,column:2426}},{start:{line:1,column:2402},end:{line:1,column:2426}}],line:1},"26":{loc:{start:{line:1,column:2438},end:{line:1,column:2518}},type:"cond-expr",locations:[{start:{line:1,column:2449},end:{line:1,column:2482}},{start:{line:1,column:2483},end:{line:1,column:2518}}],line:1},"27":{loc:{start:{line:1,column:2449},end:{line:1,column:2482}},type:"cond-expr",locations:[{start:{line:1,column:2467},end:{line:1,column:2468}},{start:{line:1,column:2469},end:{line:1,column:2482}}],line:1},"28":{loc:{start:{line:1,column:2483},end:{line:1,column:2518}},type:"cond-expr",locations:[{start:{line:1,column:2508},end:{line:1,column:2509}},{start:{line:1,column:2510},end:{line:1,column:2518}}],line:1},"29":{loc:{start:{line:1,column:2611},end:{line:1,column:2633}},type:"binary-expr",locations:[{start:{line:1,column:2611},end:{line:1,column:2618}},{start:{line:1,column:2620},end:{line:1,column:2633}}],line:1},"30":{loc:{start:{line:1,column:2717},end:{line:1,column:2752}},type:"if",locations:[{start:{line:1,column:2717},end:{line:1,column:2752}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"31":{loc:{start:{line:1,column:2846},end:{line:1,column:3113}},type:"if",locations:[{start:{line:1,column:2846},end:{line:1,column:3113}},{start:{line:1,column:2917},end:{line:1,column:3113}}],line:1},"32":{loc:{start:{line:1,column:2917},end:{line:1,column:3113}},type:"if",locations:[{start:{line:1,column:2917},end:{line:1,column:3113}},{start:{line:1,column:3017},end:{line:1,column:3113}}],line:1},"33":{loc:{start:{line:1,column:3113},end:{line:1,column:3157}},type:"binary-expr",locations:[{start:{line:1,column:3113},end:{line:1,column:3119}},{start:{line:1,column:3121},end:{line:1,column:3144}},{start:{line:1,column:3147},end:{line:1,column:3156}}],line:1},"34":{loc:{start:{line:1,column:3263},end:{line:1,column:3299}},type:"if",locations:[{start:{line:1,column:3263},end:{line:1,column:3299}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"35":{loc:{start:{line:1,column:3362},end:{line:1,column:3394}},type:"binary-expr",locations:[{start:{line:1,column:3362},end:{line:1,column:3377}},{start:{line:1,column:3380},end:{line:1,column:3393}}],line:1},"36":{loc:{start:{line:1,column:3402},end:{line:1,column:3447}},type:"binary-expr",locations:[{start:{line:1,column:3402},end:{line:1,column:3410}},{start:{line:1,column:3412},end:{line:1,column:3425}},{start:{line:1,column:3428},end:{line:1,column:3446}}],line:1},"37":{loc:{start:{line:1,column:3467},end:{line:1,column:3491}},type:"binary-expr",locations:[{start:{line:1,column:3467},end:{line:1,column:3469}},{start:{line:1,column:3472},end:{line:1,column:3490}}],line:1},"38":{loc:{start:{line:1,column:3575},end:{line:1,column:4037}},type:"if",locations:[{start:{line:1,column:3575},end:{line:1,column:4037}},{start:{line:1,column:3675},end:{line:1,column:4037}}],line:1},"39":{loc:{start:{line:1,column:3585},end:{line:1,column:3601}},type:"if",locations:[{start:{line:1,column:3585},end:{line:1,column:3601}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"40":{loc:{start:{line:1,column:3644},end:{line:1,column:3669}},type:"cond-expr",locations:[{start:{line:1,column:3650},end:{line:1,column:3653}},{start:{line:1,column:3654},end:{line:1,column:3669}}],line:1},"41":{loc:{start:{line:1,column:3654},end:{line:1,column:3669}},type:"cond-expr",locations:[{start:{line:1,column:3662},end:{line:1,column:3665}},{start:{line:1,column:3666},end:{line:1,column:3669}}],line:1},"42":{loc:{start:{line:1,column:3675},end:{line:1,column:4037}},type:"if",locations:[{start:{line:1,column:3675},end:{line:1,column:4037}},{start:{line:1,column:3783},end:{line:1,column:4037}}],line:1},"43":{loc:{start:{line:1,column:3685},end:{line:1,column:3701}},type:"if",locations:[{start:{line:1,column:3685},end:{line:1,column:3701}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"44":{loc:{start:{line:1,column:3783},end:{line:1,column:4037}},type:"if",locations:[{start:{line:1,column:3783},end:{line:1,column:4037}},{start:{line:1,column:3970},end:{line:1,column:4037}}],line:1},"45":{loc:{start:{line:1,column:3793},end:{line:1,column:3809}},type:"if",locations:[{start:{line:1,column:3793},end:{line:1,column:3809}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"46":{loc:{start:{line:1,column:3886},end:{line:1,column:3928}},type:"if",locations:[{start:{line:1,column:3886},end:{line:1,column:3928}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"47":{loc:{start:{line:1,column:3971},end:{line:1,column:3987}},type:"if",locations:[{start:{line:1,column:3971},end:{line:1,column:3987}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"48":{loc:{start:{line:1,column:4012},end:{line:1,column:4028}},type:"cond-expr",locations:[{start:{line:1,column:4014},end:{line:1,column:4015}},{start:{line:1,column:4016},end:{line:1,column:4028}}],line:1},"49":{loc:{start:{line:1,column:4037},end:{line:1,column:4071}},type:"if",locations:[{start:{line:1,column:4037},end:{line:1,column:4071}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"50":{loc:{start:{line:1,column:4040},end:{line:1,column:4050}},type:"binary-expr",locations:[{start:{line:1,column:4040},end:{line:1,column:4045}},{start:{line:1,column:4047},end:{line:1,column:4050}}],line:1},"51":{loc:{start:{line:1,column:4099},end:{line:1,column:4116}},type:"if",locations:[{start:{line:1,column:4099},end:{line:1,column:4116}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"52":{loc:{start:{line:1,column:4267},end:{line:1,column:4286}},type:"binary-expr",locations:[{start:{line:1,column:4267},end:{line:1,column:4282}},{start:{line:1,column:4284},end:{line:1,column:4286}}],line:1},"53":{loc:{start:{line:1,column:4311},end:{line:1,column:4337}},type:"binary-expr",locations:[{start:{line:1,column:4311},end:{line:1,column:4333}},{start:{line:1,column:4335},end:{line:1,column:4337}}],line:1},"54":{loc:{start:{line:1,column:4588},end:{line:1,column:4678}},type:"if",locations:[{start:{line:1,column:4588},end:{line:1,column:4678}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"55":{loc:{start:{line:1,column:4607},end:{line:1,column:4626}},type:"binary-expr",locations:[{start:{line:1,column:4607},end:{line:1,column:4622}},{start:{line:1,column:4624},end:{line:1,column:4626}}],line:1},"56":{loc:{start:{line:1,column:4707},end:{line:1,column:4725}},type:"if",locations:[{start:{line:1,column:4707},end:{line:1,column:4725}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"57":{loc:{start:{line:1,column:4725},end:{line:1,column:4790}},type:"if",locations:[{start:{line:1,column:4725},end:{line:1,column:4790}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"58":{loc:{start:{line:1,column:4819},end:{line:1,column:4866}},type:"if",locations:[{start:{line:1,column:4819},end:{line:1,column:4866}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"59":{loc:{start:{line:1,column:4829},end:{line:1,column:4844}},type:"binary-expr",locations:[{start:{line:1,column:4829},end:{line:1,column:4834}},{start:{line:1,column:4836},end:{line:1,column:4844}}],line:1},"60":{loc:{start:{line:1,column:4873},end:{line:1,column:4916}},type:"binary-expr",locations:[{start:{line:1,column:4873},end:{line:1,column:4885}},{start:{line:1,column:4887},end:{line:1,column:4916}}],line:1},"61":{loc:{start:{line:1,column:4968},end:{line:1,column:4987}},type:"binary-expr",locations:[{start:{line:1,column:4968},end:{line:1,column:4983}},{start:{line:1,column:4985},end:{line:1,column:4987}}],line:1},"62":{loc:{start:{line:1,column:5100},end:{line:1,column:5169}},type:"if",locations:[{start:{line:1,column:5100},end:{line:1,column:5169}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"63":{loc:{start:{line:1,column:5281},end:{line:1,column:5300}},type:"binary-expr",locations:[{start:{line:1,column:5281},end:{line:1,column:5296}},{start:{line:1,column:5298},end:{line:1,column:5300}}],line:1},"64":{loc:{start:{line:1,column:5301},end:{line:1,column:5327}},type:"binary-expr",locations:[{start:{line:1,column:5301},end:{line:1,column:5323}},{start:{line:1,column:5325},end:{line:1,column:5327}}],line:1},"65":{loc:{start:{line:1,column:5406},end:{line:1,column:5511}},type:"cond-expr",locations:[{start:{line:1,column:5469},end:{line:1,column:5497}},{start:{line:1,column:5498},end:{line:1,column:5511}}],line:1},"66":{loc:{start:{line:1,column:5406},end:{line:1,column:5468}},type:"binary-expr",locations:[{start:{line:1,column:5406},end:{line:1,column:5432}},{start:{line:1,column:5434},end:{line:1,column:5468}}],line:1},"67":{loc:{start:{line:1,column:5514},end:{line:1,column:5585}},type:"cond-expr",locations:[{start:{line:1,column:5530},end:{line:1,column:5534}},{start:{line:1,column:5535},end:{line:1,column:5585}}],line:1},"68":{loc:{start:{line:1,column:5535},end:{line:1,column:5585}},type:"cond-expr",locations:[{start:{line:1,column:5553},end:{line:1,column:5559}},{start:{line:1,column:5560},end:{line:1,column:5585}}],line:1},"69":{loc:{start:{line:1,column:5646},end:{line:1,column:5678}},type:"binary-expr",locations:[{start:{line:1,column:5646},end:{line:1,column:5665}},{start:{line:1,column:5668},end:{line:1,column:5677}}],line:1},"70":{loc:{start:{line:1,column:5740},end:{line:1,column:5891}},type:"cond-expr",locations:[{start:{line:1,column:5759},end:{line:1,column:5812}},{start:{line:1,column:5815},end:{line:1,column:5890}}],line:1},"71":{loc:{start:{line:1,column:5926},end:{line:1,column:5987}},type:"cond-expr",locations:[{start:{line:1,column:5945},end:{line:1,column:5950}},{start:{line:1,column:5951},end:{line:1,column:5987}}],line:1},"72":{loc:{start:{line:1,column:5962},end:{line:1,column:5982}},type:"binary-expr",locations:[{start:{line:1,column:5962},end:{line:1,column:5974}},{start:{line:1,column:5976},end:{line:1,column:5982}}],line:1},"73":{loc:{start:{line:1,column:6064},end:{line:1,column:6120}},type:"cond-expr",locations:[{start:{line:1,column:6070},end:{line:1,column:6074}},{start:{line:1,column:6075},end:{line:1,column:6120}}],line:1},"74":{loc:{start:{line:1,column:6075},end:{line:1,column:6120}},type:"cond-expr",locations:[{start:{line:1,column:6082},end:{line:1,column:6086}},{start:{line:1,column:6087},end:{line:1,column:6120}}],line:1},"75":{loc:{start:{line:1,column:6087},end:{line:1,column:6120}},type:"cond-expr",locations:[{start:{line:1,column:6105},end:{line:1,column:6109}},{start:{line:1,column:6111},end:{line:1,column:6119}}],line:1},"76":{loc:{start:{line:1,column:6087},end:{line:1,column:6104}},type:"binary-expr",locations:[{start:{line:1,column:6087},end:{line:1,column:6094}},{start:{line:1,column:6096},end:{line:1,column:6104}}],line:1},"77":{loc:{start:{line:1,column:6268},end:{line:1,column:6363}},type:"binary-expr",locations:[{start:{line:1,column:6268},end:{line:1,column:6287}},{start:{line:1,column:6290},end:{line:1,column:6362}}],line:1},"78":{loc:{start:{line:1,column:6290},end:{line:1,column:6308}},type:"binary-expr",locations:[{start:{line:1,column:6290},end:{line:1,column:6298}},{start:{line:1,column:6301},end:{line:1,column:6307}}],line:1},"79":{loc:{start:{line:1,column:6941},end:{line:1,column:7029}},type:"binary-expr",locations:[{start:{line:1,column:6942},end:{line:1,column:6969}},{start:{line:1,column:6971},end:{line:1,column:6995}},{start:{line:1,column:6999},end:{line:1,column:7028}}],line:1},"80":{loc:{start:{line:1,column:7043},end:{line:1,column:7082}},type:"binary-expr",locations:[{start:{line:1,column:7043},end:{line:1,column:7067}},{start:{line:1,column:7069},end:{line:1,column:7082}}],line:1},"81":{loc:{start:{line:1,column:7351},end:{line:1,column:7355}},type:"default-arg",locations:[{start:{line:1,column:7353},end:{line:1,column:7355}}],line:1},"82":{loc:{start:{line:1,column:7476},end:{line:1,column:7507}},type:"cond-expr",locations:[{start:{line:1,column:7496},end:{line:1,column:7497}},{start:{line:1,column:7498},end:{line:1,column:7507}}],line:1},"83":{loc:{start:{line:1,column:7523},end:{line:1,column:7657}},type:"cond-expr",locations:[{start:{line:1,column:7636},end:{line:1,column:7654}},{start:{line:1,column:7655},end:{line:1,column:7657}}],line:1},"84":{loc:{start:{line:1,column:7523},end:{line:1,column:7635}},type:"binary-expr",locations:[{start:{line:1,column:7523},end:{line:1,column:7537}},{start:{line:1,column:7540},end:{line:1,column:7556}},{start:{line:1,column:7558},end:{line:1,column:7586}},{start:{line:1,column:7588},end:{line:1,column:7605}},{start:{line:1,column:7607},end:{line:1,column:7634}}],line:1},"85":{loc:{start:{line:1,column:7687},end:{line:1,column:7704}},type:"cond-expr",locations:[{start:{line:1,column:7696},end:{line:1,column:7701}},{start:{line:1,column:7702},end:{line:1,column:7704}}],line:1},"86":{loc:{start:{line:1,column:7905},end:{line:1,column:8084}},type:"if",locations:[{start:{line:1,column:7905},end:{line:1,column:8084}},{start:{line:1,column:8081},end:{line:1,column:8084}}],line:1},"87":{loc:{start:{line:1,column:7908},end:{line:1,column:7937}},type:"binary-expr",locations:[{start:{line:1,column:7908},end:{line:1,column:7921}},{start:{line:1,column:7923},end:{line:1,column:7937}}],line:1},"88":{loc:{start:{line:1,column:7947},end:{line:1,column:8014}},type:"binary-expr",locations:[{start:{line:1,column:7947},end:{line:1,column:7960}},{start:{line:1,column:7963},end:{line:1,column:8013}}],line:1},"89":{loc:{start:{line:1,column:8003},end:{line:1,column:8011}},type:"binary-expr",locations:[{start:{line:1,column:8003},end:{line:1,column:8006}},{start:{line:1,column:8008},end:{line:1,column:8011}}],line:1},"90":{loc:{start:{line:1,column:8015},end:{line:1,column:8075}},type:"binary-expr",locations:[{start:{line:1,column:8015},end:{line:1,column:8028}},{start:{line:1,column:8031},end:{line:1,column:8074}}],line:1},"91":{loc:{start:{line:1,column:8064},end:{line:1,column:8072}},type:"binary-expr",locations:[{start:{line:1,column:8064},end:{line:1,column:8067}},{start:{line:1,column:8069},end:{line:1,column:8072}}],line:1},"92":{loc:{start:{line:1,column:8170},end:{line:1,column:8321}},type:"if",locations:[{start:{line:1,column:8170},end:{line:1,column:8321}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"93":{loc:{start:{line:1,column:8173},end:{line:1,column:8232}},type:"binary-expr",locations:[{start:{line:1,column:8173},end:{line:1,column:8200}},{start:{line:1,column:8202},end:{line:1,column:8217}},{start:{line:1,column:8219},end:{line:1,column:8232}}],line:1},"94":{loc:{start:{line:1,column:8379},end:{line:1,column:8498}},type:"binary-expr",locations:[{start:{line:1,column:8379},end:{line:1,column:8405}},{start:{line:1,column:8408},end:{line:1,column:8497}}],line:1},"95":{loc:{start:{line:1,column:8459},end:{line:1,column:8497}},type:"binary-expr",locations:[{start:{line:1,column:8459},end:{line:1,column:8483}},{start:{line:1,column:8485},end:{line:1,column:8497}}],line:1},"96":{loc:{start:{line:1,column:8550},end:{line:1,column:8598}},type:"cond-expr",locations:[{start:{line:1,column:8575},end:{line:1,column:8578}},{start:{line:1,column:8579},end:{line:1,column:8598}}],line:1},"97":{loc:{start:{line:1,column:8714},end:{line:1,column:8745}},type:"cond-expr",locations:[{start:{line:1,column:8731},end:{line:1,column:8738}},{start:{line:1,column:8739},end:{line:1,column:8745}}],line:1},"98":{loc:{start:{line:1,column:8748},end:{line:1,column:8762}},type:"binary-expr",locations:[{start:{line:1,column:8748},end:{line:1,column:8758}},{start:{line:1,column:8760},end:{line:1,column:8762}}],line:1},"99":{loc:{start:{line:1,column:8770},end:{line:1,column:8837}},type:"binary-expr",locations:[{start:{line:1,column:8770},end:{line:1,column:8802}},{start:{line:1,column:8805},end:{line:1,column:8836}}],line:1},"100":{loc:{start:{line:1,column:8838},end:{line:1,column:8877}},type:"binary-expr",locations:[{start:{line:1,column:8838},end:{line:1,column:8858}},{start:{line:1,column:8860},end:{line:1,column:8866}},{start:{line:1,column:8869},end:{line:1,column:8876}}],line:1},"101":{loc:{start:{line:1,column:8917},end:{line:1,column:8982}},type:"binary-expr",locations:[{start:{line:1,column:8917},end:{line:1,column:8942}},{start:{line:1,column:8944},end:{line:1,column:8982}}],line:1},"102":{loc:{start:{line:1,column:9053},end:{line:1,column:9229}},type:"if",locations:[{start:{line:1,column:9053},end:{line:1,column:9229}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"103":{loc:{start:{line:1,column:9137},end:{line:1,column:9156}},type:"binary-expr",locations:[{start:{line:1,column:9137},end:{line:1,column:9138}},{start:{line:1,column:9141},end:{line:1,column:9155}}],line:1},"104":{loc:{start:{line:1,column:9143},end:{line:1,column:9155}},type:"cond-expr",locations:[{start:{line:1,column:9145},end:{line:1,column:9150}},{start:{line:1,column:9151},end:{line:1,column:9155}}],line:1},"105":{loc:{start:{line:1,column:9165},end:{line:1,column:9228}},type:"binary-expr",locations:[{start:{line:1,column:9165},end:{line:1,column:9184}},{start:{line:1,column:9186},end:{line:1,column:9216}},{start:{line:1,column:9218},end:{line:1,column:9228}}],line:1},"106":{loc:{start:{line:1,column:9613},end:{line:1,column:9628}},type:"binary-expr",locations:[{start:{line:1,column:9613},end:{line:1,column:9621}},{start:{line:1,column:9623},end:{line:1,column:9628}}],line:1},"107":{loc:{start:{line:1,column:9652},end:{line:1,column:9679}},type:"cond-expr",locations:[{start:{line:1,column:9668},end:{line:1,column:9674}},{start:{line:1,column:9675},end:{line:1,column:9679}}],line:1},"108":{loc:{start:{line:1,column:9925},end:{line:1,column:10135}},type:"if",locations:[{start:{line:1,column:9925},end:{line:1,column:10135}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"109":{loc:{start:{line:1,column:9953},end:{line:1,column:10005}},type:"binary-expr",locations:[{start:{line:1,column:9953},end:{line:1,column:9976}},{start:{line:1,column:9978},end:{line:1,column:10005}}],line:1},"110":{loc:{start:{line:1,column:10043},end:{line:1,column:10134}},type:"binary-expr",locations:[{start:{line:1,column:10043},end:{line:1,column:10084}},{start:{line:1,column:10086},end:{line:1,column:10134}}],line:1},"111":{loc:{start:{line:1,column:10143},end:{line:1,column:10241}},type:"if",locations:[{start:{line:1,column:10143},end:{line:1,column:10241}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"112":{loc:{start:{line:1,column:10287},end:{line:1,column:10347}},type:"binary-expr",locations:[{start:{line:1,column:10287},end:{line:1,column:10318}},{start:{line:1,column:10320},end:{line:1,column:10330}},{start:{line:1,column:10332},end:{line:1,column:10347}}],line:1},"113":{loc:{start:{line:1,column:10348},end:{line:1,column:10417}},type:"binary-expr",locations:[{start:{line:1,column:10348},end:{line:1,column:10369}},{start:{line:1,column:10372},end:{line:1,column:10416}}],line:1},"114":{loc:{start:{line:1,column:10418},end:{line:1,column:10482}},type:"binary-expr",locations:[{start:{line:1,column:10418},end:{line:1,column:10443}},{start:{line:1,column:10446},end:{line:1,column:10481}}],line:1},"115":{loc:{start:{line:1,column:10515},end:{line:1,column:10629}},type:"binary-expr",locations:[{start:{line:1,column:10515},end:{line:1,column:10531}},{start:{line:1,column:10534},end:{line:1,column:10565}},{start:{line:1,column:10567},end:{line:1,column:10577}},{start:{line:1,column:10579},end:{line:1,column:10628}}],line:1},"116":{loc:{start:{line:1,column:10630},end:{line:1,column:10775}},type:"binary-expr",locations:[{start:{line:1,column:10630},end:{line:1,column:10646}},{start:{line:1,column:10649},end:{line:1,column:10774}}],line:1},"117":{loc:{start:{line:1,column:10649},end:{line:1,column:10774}},type:"cond-expr",locations:[{start:{line:1,column:10681},end:{line:1,column:10695}},{start:{line:1,column:10696},end:{line:1,column:10774}}],line:1},"118":{loc:{start:{line:1,column:10649},end:{line:1,column:10680}},type:"binary-expr",locations:[{start:{line:1,column:10649},end:{line:1,column:10663}},{start:{line:1,column:10665},end:{line:1,column:10680}}],line:1},"119":{loc:{start:{line:1,column:10733},end:{line:1,column:10769}},type:"cond-expr",locations:[{start:{line:1,column:10759},end:{line:1,column:10767}},{start:{line:1,column:10768},end:{line:1,column:10769}}],line:1},"120":{loc:{start:{line:1,column:10856},end:{line:1,column:10937}},type:"binary-expr",locations:[{start:{line:1,column:10856},end:{line:1,column:10875}},{start:{line:1,column:10878},end:{line:1,column:10936}}],line:1},"121":{loc:{start:{line:1,column:11019},end:{line:1,column:11198}},type:"if",locations:[{start:{line:1,column:11019},end:{line:1,column:11198}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"122":{loc:{start:{line:1,column:11024},end:{line:1,column:11062}},type:"binary-expr",locations:[{start:{line:1,column:11024},end:{line:1,column:11044}},{start:{line:1,column:11046},end:{line:1,column:11062}}],line:1},"123":{loc:{start:{line:1,column:11065},end:{line:1,column:11131}},type:"if",locations:[{start:{line:1,column:11065},end:{line:1,column:11131}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"124":{loc:{start:{line:1,column:11131},end:{line:1,column:11182}},type:"binary-expr",locations:[{start:{line:1,column:11131},end:{line:1,column:11150}},{start:{line:1,column:11152},end:{line:1,column:11182}}],line:1},"125":{loc:{start:{line:1,column:11238},end:{line:1,column:11322}},type:"binary-expr",locations:[{start:{line:1,column:11238},end:{line:1,column:11246}},{start:{line:1,column:11249},end:{line:1,column:11321}}],line:1},"126":{loc:{start:{line:1,column:11393},end:{line:1,column:11593}},type:"if",locations:[{start:{line:1,column:11393},end:{line:1,column:11593}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"127":{loc:{start:{line:1,column:11417},end:{line:1,column:11592}},type:"if",locations:[{start:{line:1,column:11417},end:{line:1,column:11592}},{start:{line:1,column:11483},end:{line:1,column:11592}}],line:1},"128":{loc:{start:{line:1,column:11483},end:{line:1,column:11592}},type:"if",locations:[{start:{line:1,column:11483},end:{line:1,column:11592}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"129":{loc:{start:{line:1,column:11529},end:{line:1,column:11565}},type:"cond-expr",locations:[{start:{line:1,column:11546},end:{line:1,column:11556}},{start:{line:1,column:11557},end:{line:1,column:11565}}],line:1},"130":{loc:{start:{line:1,column:11631},end:{line:1,column:11682}},type:"binary-expr",locations:[{start:{line:1,column:11631},end:{line:1,column:11659}},{start:{line:1,column:11661},end:{line:1,column:11682}}],line:1},"131":{loc:{start:{line:1,column:11732},end:{line:1,column:11756}},type:"binary-expr",locations:[{start:{line:1,column:11732},end:{line:1,column:11733}},{start:{line:1,column:11735},end:{line:1,column:11756}}],line:1},"132":{loc:{start:{line:1,column:11810},end:{line:1,column:11826}},type:"binary-expr",locations:[{start:{line:1,column:11810},end:{line:1,column:11811}},{start:{line:1,column:11813},end:{line:1,column:11826}}],line:1},"133":{loc:{start:{line:1,column:11847},end:{line:1,column:11853}},type:"binary-expr",locations:[{start:{line:1,column:11847},end:{line:1,column:11849}},{start:{line:1,column:11851},end:{line:1,column:11853}}],line:1},"134":{loc:{start:{line:1,column:11862},end:{line:1,column:11866}},type:"default-arg",locations:[{start:{line:1,column:11864},end:{line:1,column:11866}}],line:1},"135":{loc:{start:{line:1,column:11975},end:{line:1,column:12039}},type:"if",locations:[{start:{line:1,column:11975},end:{line:1,column:12039}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"136":{loc:{start:{line:1,column:11978},end:{line:1,column:12013}},type:"binary-expr",locations:[{start:{line:1,column:11978},end:{line:1,column:12003}},{start:{line:1,column:12006},end:{line:1,column:12008}},{start:{line:1,column:12010},end:{line:1,column:12012}}],line:1},"137":{loc:{start:{line:1,column:12047},end:{line:1,column:12137}},type:"if",locations:[{start:{line:1,column:12047},end:{line:1,column:12137}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"138":{loc:{start:{line:1,column:12145},end:{line:1,column:12250}},type:"binary-expr",locations:[{start:{line:1,column:12145},end:{line:1,column:12165}},{start:{line:1,column:12167},end:{line:1,column:12201}},{start:{line:1,column:12203},end:{line:1,column:12250}}],line:1},"139":{loc:{start:{line:1,column:12349},end:{line:1,column:12549}},type:"cond-expr",locations:[{start:{line:1,column:12352},end:{line:1,column:12354}},{start:{line:1,column:12355},end:{line:1,column:12549}}],line:1},"140":{loc:{start:{line:1,column:12550},end:{line:1,column:12608}},type:"binary-expr",locations:[{start:{line:1,column:12550},end:{line:1,column:12572}},{start:{line:1,column:12575},end:{line:1,column:12607}}],line:1},"141":{loc:{start:{line:1,column:12798},end:{line:1,column:12842}},type:"binary-expr",locations:[{start:{line:1,column:12798},end:{line:1,column:12817}},{start:{line:1,column:12819},end:{line:1,column:12842}}],line:1},"142":{loc:{start:{line:1,column:13178},end:{line:1,column:13251}},type:"binary-expr",locations:[{start:{line:1,column:13178},end:{line:1,column:13179}},{start:{line:1,column:13181},end:{line:1,column:13251}}],line:1},"143":{loc:{start:{line:1,column:13265},end:{line:1,column:13338}},type:"binary-expr",locations:[{start:{line:1,column:13265},end:{line:1,column:13283}},{start:{line:1,column:13286},end:{line:1,column:13337}}],line:1},"144":{loc:{start:{line:1,column:13351},end:{line:1,column:13378}},type:"cond-expr",locations:[{start:{line:1,column:13368},end:{line:1,column:13373}},{start:{line:1,column:13374},end:{line:1,column:13378}}],line:1},"145":{loc:{start:{line:1,column:13381},end:{line:1,column:13395}},type:"binary-expr",locations:[{start:{line:1,column:13381},end:{line:1,column:13391}},{start:{line:1,column:13393},end:{line:1,column:13395}}],line:1},"146":{loc:{start:{line:1,column:13403},end:{line:1,column:13465}},type:"binary-expr",locations:[{start:{line:1,column:13403},end:{line:1,column:13430}},{start:{line:1,column:13433},end:{line:1,column:13464}}],line:1},"147":{loc:{start:{line:1,column:13466},end:{line:1,column:13496}},type:"binary-expr",locations:[{start:{line:1,column:13466},end:{line:1,column:13485}},{start:{line:1,column:13488},end:{line:1,column:13495}}],line:1},"148":{loc:{start:{line:1,column:13522},end:{line:1,column:13549}},type:"binary-expr",locations:[{start:{line:1,column:13522},end:{line:1,column:13533}},{start:{line:1,column:13535},end:{line:1,column:13549}}],line:1},"149":{loc:{start:{line:1,column:13596},end:{line:1,column:13636}},type:"cond-expr",locations:[{start:{line:1,column:13599},end:{line:1,column:13612}},{start:{line:1,column:13613},end:{line:1,column:13636}}],line:1},"150":{loc:{start:{line:1,column:13613},end:{line:1,column:13636}},type:"cond-expr",locations:[{start:{line:1,column:13615},end:{line:1,column:13626}},{start:{line:1,column:13627},end:{line:1,column:13636}}],line:1},"151":{loc:{start:{line:1,column:14276},end:{line:1,column:14301}},type:"binary-expr",locations:[{start:{line:1,column:14276},end:{line:1,column:14277}},{start:{line:1,column:14280},end:{line:1,column:14300}}],line:1},"152":{loc:{start:{line:1,column:14342},end:{line:1,column:14396}},type:"binary-expr",locations:[{start:{line:1,column:14342},end:{line:1,column:14356}},{start:{line:1,column:14359},end:{line:1,column:14395}}],line:1},"153":{loc:{start:{line:1,column:14561},end:{line:1,column:14634}},type:"binary-expr",locations:[{start:{line:1,column:14561},end:{line:1,column:14562}},{start:{line:1,column:14564},end:{line:1,column:14634}}],line:1},"154":{loc:{start:{line:1,column:14654},end:{line:1,column:14703}},type:"binary-expr",locations:[{start:{line:1,column:14654},end:{line:1,column:14680}},{start:{line:1,column:14682},end:{line:1,column:14692}},{start:{line:1,column:14694},end:{line:1,column:14703}}],line:1},"155":{loc:{start:{line:1,column:15153},end:{line:1,column:15189}},type:"if",locations:[{start:{line:1,column:15153},end:{line:1,column:15189}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"156":{loc:{start:{line:1,column:15231},end:{line:1,column:15324}},type:"binary-expr",locations:[{start:{line:1,column:15231},end:{line:1,column:15236}},{start:{line:1,column:15238},end:{line:1,column:15243}},{start:{line:1,column:15246},end:{line:1,column:15323}}],line:1},"157":{loc:{start:{line:1,column:15339},end:{line:1,column:15344}},type:"binary-expr",locations:[{start:{line:1,column:15339},end:{line:1,column:15340}},{start:{line:1,column:15342},end:{line:1,column:15344}}],line:1},"158":{loc:{start:{line:1,column:15375},end:{line:1,column:15383}},type:"binary-expr",locations:[{start:{line:1,column:15375},end:{line:1,column:15379}},{start:{line:1,column:15381},end:{line:1,column:15383}}],line:1},"159":{loc:{start:{line:1,column:15391},end:{line:1,column:15565}},type:"binary-expr",locations:[{start:{line:1,column:15391},end:{line:1,column:15396}},{start:{line:1,column:15398},end:{line:1,column:15403}},{start:{line:1,column:15406},end:{line:1,column:15564}}],line:1},"160":{loc:{start:{line:1,column:15688},end:{line:1,column:15736}},type:"binary-expr",locations:[{start:{line:1,column:15689},end:{line:1,column:15706}},{start:{line:1,column:15708},end:{line:1,column:15720}},{start:{line:1,column:15723},end:{line:1,column:15736}}],line:1},"161":{loc:{start:{line:1,column:15737},end:{line:1,column:15777}},type:"binary-expr",locations:[{start:{line:1,column:15737},end:{line:1,column:15753}},{start:{line:1,column:15755},end:{line:1,column:15777}}],line:1},"162":{loc:{start:{line:1,column:15867},end:{line:1,column:15878}},type:"binary-expr",locations:[{start:{line:1,column:15867},end:{line:1,column:15868}},{start:{line:1,column:15871},end:{line:1,column:15877}}],line:1},"163":{loc:{start:{line:1,column:15890},end:{line:1,column:15965}},type:"binary-expr",locations:[{start:{line:1,column:15890},end:{line:1,column:15925}},{start:{line:1,column:15927},end:{line:1,column:15965}}],line:1},"164":{loc:{start:{line:1,column:15971},end:{line:1,column:16029}},type:"binary-expr",locations:[{start:{line:1,column:15971},end:{line:1,column:15973}},{start:{line:1,column:15975},end:{line:1,column:16029}}],line:1},"165":{loc:{start:{line:1,column:16078},end:{line:1,column:16439}},type:"if",locations:[{start:{line:1,column:16078},end:{line:1,column:16439}},{start:{line:1,column:16403},end:{line:1,column:16439}}],line:1},"166":{loc:{start:{line:1,column:16239},end:{line:1,column:16274}},type:"binary-expr",locations:[{start:{line:1,column:16239},end:{line:1,column:16240}},{start:{line:1,column:16242},end:{line:1,column:16260}},{start:{line:1,column:16263},end:{line:1,column:16273}}],line:1},"167":{loc:{start:{line:1,column:16316},end:{line:1,column:16356}},type:"binary-expr",locations:[{start:{line:1,column:16316},end:{line:1,column:16336}},{start:{line:1,column:16338},end:{line:1,column:16356}}],line:1},"168":{loc:{start:{line:1,column:16371},end:{line:1,column:16397}},type:"binary-expr",locations:[{start:{line:1,column:16371},end:{line:1,column:16378}},{start:{line:1,column:16381},end:{line:1,column:16396}}],line:1},"169":{loc:{start:{line:1,column:16403},end:{line:1,column:16438}},type:"binary-expr",locations:[{start:{line:1,column:16403},end:{line:1,column:16409}},{start:{line:1,column:16412},end:{line:1,column:16437}}],line:1},"170":{loc:{start:{line:1,column:16461},end:{line:1,column:16534}},type:"cond-expr",locations:[{start:{line:1,column:16476},end:{line:1,column:16484}},{start:{line:1,column:16485},end:{line:1,column:16534}}],line:1},"171":{loc:{start:{line:1,column:16485},end:{line:1,column:16534}},type:"binary-expr",locations:[{start:{line:1,column:16485},end:{line:1,column:16504}},{start:{line:1,column:16506},end:{line:1,column:16534}}],line:1},"172":{loc:{start:{line:1,column:16535},end:{line:1,column:16587}},type:"binary-expr",locations:[{start:{line:1,column:16535},end:{line:1,column:16545}},{start:{line:1,column:16547},end:{line:1,column:16554}},{start:{line:1,column:16557},end:{line:1,column:16586}}],line:1},"173":{loc:{start:{line:1,column:16564},end:{line:1,column:16586}},type:"cond-expr",locations:[{start:{line:1,column:16576},end:{line:1,column:16581}},{start:{line:1,column:16582},end:{line:1,column:16586}}],line:1},"174":{loc:{start:{line:1,column:16602},end:{line:1,column:16665}},type:"binary-expr",locations:[{start:{line:1,column:16602},end:{line:1,column:16612}},{start:{line:1,column:16615},end:{line:1,column:16664}}],line:1},"175":{loc:{start:{line:1,column:16615},end:{line:1,column:16664}},type:"cond-expr",locations:[{start:{line:1,column:16635},end:{line:1,column:16652}},{start:{line:1,column:16653},end:{line:1,column:16664}}],line:1},"176":{loc:{start:{line:1,column:16676},end:{line:1,column:16757}},type:"binary-expr",locations:[{start:{line:1,column:16676},end:{line:1,column:16682}},{start:{line:1,column:16685},end:{line:1,column:16756}}],line:1},"177":{loc:{start:{line:1,column:16685},end:{line:1,column:16756}},type:"cond-expr",locations:[{start:{line:1,column:16720},end:{line:1,column:16733}},{start:{line:1,column:16734},end:{line:1,column:16756}}],line:1},"178":{loc:{start:{line:1,column:16685},end:{line:1,column:16719}},type:"binary-expr",locations:[{start:{line:1,column:16685},end:{line:1,column:16704}},{start:{line:1,column:16706},end:{line:1,column:16719}}],line:1},"179":{loc:{start:{line:1,column:16734},end:{line:1,column:16756}},type:"cond-expr",locations:[{start:{line:1,column:16746},end:{line:1,column:16751}},{start:{line:1,column:16752},end:{line:1,column:16756}}],line:1},"180":{loc:{start:{line:1,column:17198},end:{line:1,column:17231}},type:"cond-expr",locations:[{start:{line:1,column:17225},end:{line:1,column:17228}},{start:{line:1,column:17229},end:{line:1,column:17231}}],line:1},"181":{loc:{start:{line:1,column:17233},end:{line:1,column:17304}},type:"binary-expr",locations:[{start:{line:1,column:17233},end:{line:1,column:17265}},{start:{line:1,column:17268},end:{line:1,column:17303}}],line:1},"182":{loc:{start:{line:1,column:17305},end:{line:1,column:17698}},type:"binary-expr",locations:[{start:{line:1,column:17305},end:{line:1,column:17307}},{start:{line:1,column:17310},end:{line:1,column:17697}}],line:1},"183":{loc:{start:{line:1,column:17310},end:{line:1,column:17525}},type:"binary-expr",locations:[{start:{line:1,column:17310},end:{line:1,column:17339}},{start:{line:1,column:17342},end:{line:1,column:17524}}],line:1},"184":{loc:{start:{line:1,column:17379},end:{line:1,column:17455}},type:"binary-expr",locations:[{start:{line:1,column:17379},end:{line:1,column:17393}},{start:{line:1,column:17396},end:{line:1,column:17454}}],line:1},"185":{loc:{start:{line:1,column:17526},end:{line:1,column:17697}},type:"binary-expr",locations:[{start:{line:1,column:17526},end:{line:1,column:17553}},{start:{line:1,column:17556},end:{line:1,column:17696}}],line:1},"186":{loc:{start:{line:1,column:17699},end:{line:1,column:17750}},type:"binary-expr",locations:[{start:{line:1,column:17699},end:{line:1,column:17724}},{start:{line:1,column:17727},end:{line:1,column:17749}}],line:1},"187":{loc:{start:{line:1,column:17846},end:{line:1,column:17870}},type:"binary-expr",locations:[{start:{line:1,column:17846},end:{line:1,column:17853}},{start:{line:1,column:17856},end:{line:1,column:17869}}],line:1},"188":{loc:{start:{line:1,column:18062},end:{line:1,column:18180}},type:"if",locations:[{start:{line:1,column:18062},end:{line:1,column:18180}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"189":{loc:{start:{line:1,column:18186},end:{line:1,column:18310}},type:"cond-expr",locations:[{start:{line:1,column:18280},end:{line:1,column:18291}},{start:{line:1,column:18292},end:{line:1,column:18310}}],line:1},"190":{loc:{start:{line:1,column:18186},end:{line:1,column:18279}},type:"binary-expr",locations:[{start:{line:1,column:18186},end:{line:1,column:18211}},{start:{line:1,column:18213},end:{line:1,column:18236}},{start:{line:1,column:18238},end:{line:1,column:18279}}],line:1},"191":{loc:{start:{line:1,column:18413},end:{line:1,column:18464}},type:"binary-expr",locations:[{start:{line:1,column:18413},end:{line:1,column:18427}},{start:{line:1,column:18429},end:{line:1,column:18464}}],line:1},"192":{loc:{start:{line:1,column:18789},end:{line:1,column:19294}},type:"if",locations:[{start:{line:1,column:18789},end:{line:1,column:19294}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"193":{loc:{start:{line:1,column:18792},end:{line:1,column:18874}},type:"binary-expr",locations:[{start:{line:1,column:18792},end:{line:1,column:18819}},{start:{line:1,column:18821},end:{line:1,column:18845}},{start:{line:1,column:18847},end:{line:1,column:18874}}],line:1},"194":{loc:{start:{line:1,column:18875},end:{line:1,column:19294}},type:"switch",locations:[{start:{line:1,column:18951},end:{line:1,column:19005}},{start:{line:1,column:19005},end:{line:1,column:19124}},{start:{line:1,column:19124},end:{line:1,column:19205}},{start:{line:1,column:19205},end:{line:1,column:19293}}],line:1},"195":{loc:{start:{line:1,column:19498},end:{line:1,column:19550}},type:"binary-expr",locations:[{start:{line:1,column:19498},end:{line:1,column:19524}},{start:{line:1,column:19526},end:{line:1,column:19550}}],line:1},"196":{loc:{start:{line:1,column:19773},end:{line:1,column:19824}},type:"binary-expr",locations:[{start:{line:1,column:19773},end:{line:1,column:19792}},{start:{line:1,column:19794},end:{line:1,column:19824}}],line:1},"197":{loc:{start:{line:1,column:19905},end:{line:1,column:19972}},type:"cond-expr",locations:[{start:{line:1,column:19933},end:{line:1,column:19959}},{start:{line:1,column:19960},end:{line:1,column:19972}}],line:1},"198":{loc:{start:{line:1,column:19981},end:{line:1,column:20191}},type:"if",locations:[{start:{line:1,column:19981},end:{line:1,column:20191}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"199":{loc:{start:{line:1,column:19984},end:{line:1,column:20077}},type:"binary-expr",locations:[{start:{line:1,column:19984},end:{line:1,column:20010}},{start:{line:1,column:20012},end:{line:1,column:20035}},{start:{line:1,column:20037},end:{line:1,column:20052}},{start:{line:1,column:20054},end:{line:1,column:20077}}],line:1},"200":{loc:{start:{line:1,column:20214},end:{line:1,column:20321}},type:"if",locations:[{start:{line:1,column:20214},end:{line:1,column:20321}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"201":{loc:{start:{line:1,column:20219},end:{line:1,column:20295}},type:"binary-expr",locations:[{start:{line:1,column:20219},end:{line:1,column:20235}},{start:{line:1,column:20237},end:{line:1,column:20268}},{start:{line:1,column:20270},end:{line:1,column:20295}}],line:1},"202":{loc:{start:{line:1,column:20403},end:{line:1,column:20479}},type:"if",locations:[{start:{line:1,column:20403},end:{line:1,column:20479}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"203":{loc:{start:{line:1,column:20406},end:{line:1,column:20419}},type:"binary-expr",locations:[{start:{line:1,column:20406},end:{line:1,column:20407}},{start:{line:1,column:20410},end:{line:1,column:20418}}],line:1},"204":{loc:{start:{line:1,column:20420},end:{line:1,column:20443}},type:"binary-expr",locations:[{start:{line:1,column:20420},end:{line:1,column:20423}},{start:{line:1,column:20425},end:{line:1,column:20443}}],line:1},"205":{loc:{start:{line:1,column:20526},end:{line:1,column:20561}},type:"if",locations:[{start:{line:1,column:20526},end:{line:1,column:20561}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"206":{loc:{start:{line:1,column:20607},end:{line:1,column:20692}},type:"binary-expr",locations:[{start:{line:1,column:20607},end:{line:1,column:20608}},{start:{line:1,column:20611},end:{line:1,column:20691}}],line:1},"207":{loc:{start:{line:1,column:20833},end:{line:1,column:20971}},type:"if",locations:[{start:{line:1,column:20833},end:{line:1,column:20971}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"208":{loc:{start:{line:1,column:20836},end:{line:1,column:20872}},type:"binary-expr",locations:[{start:{line:1,column:20836},end:{line:1,column:20856}},{start:{line:1,column:20859},end:{line:1,column:20871}}],line:1},"209":{loc:{start:{line:1,column:20873},end:{line:1,column:20907}},type:"binary-expr",locations:[{start:{line:1,column:20873},end:{line:1,column:20893}},{start:{line:1,column:20896},end:{line:1,column:20906}}],line:1},"210":{loc:{start:{line:1,column:20908},end:{line:1,column:20963}},type:"binary-expr",locations:[{start:{line:1,column:20908},end:{line:1,column:20935}},{start:{line:1,column:20937},end:{line:1,column:20963}}],line:1},"211":{loc:{start:{line:1,column:20973},end:{line:1,column:20978}},type:"binary-expr",locations:[{start:{line:1,column:20973},end:{line:1,column:20974}},{start:{line:1,column:20976},end:{line:1,column:20978}}],line:1},"212":{loc:{start:{line:1,column:21099},end:{line:1,column:21122}},type:"binary-expr",locations:[{start:{line:1,column:21099},end:{line:1,column:21100}},{start:{line:1,column:21102},end:{line:1,column:21122}}],line:1},"213":{loc:{start:{line:1,column:21335},end:{line:1,column:21514}},type:"binary-expr",locations:[{start:{line:1,column:21336},end:{line:1,column:21363}},{start:{line:1,column:21365},end:{line:1,column:21389}},{start:{line:1,column:21393},end:{line:1,column:21513}}],line:1},"214":{loc:{start:{line:1,column:21419},end:{line:1,column:21513}},type:"cond-expr",locations:[{start:{line:1,column:21443},end:{line:1,column:21490}},{start:{line:1,column:21491},end:{line:1,column:21513}}],line:1},"215":{loc:{start:{line:1,column:21466},end:{line:1,column:21488}},type:"cond-expr",locations:[{start:{line:1,column:21481},end:{line:1,column:21484}},{start:{line:1,column:21485},end:{line:1,column:21488}}],line:1},"216":{loc:{start:{line:1,column:21491},end:{line:1,column:21513}},type:"cond-expr",locations:[{start:{line:1,column:21506},end:{line:1,column:21509}},{start:{line:1,column:21510},end:{line:1,column:21513}}],line:1},"217":{loc:{start:{line:1,column:21532},end:{line:1,column:21688}},type:"if",locations:[{start:{line:1,column:21532},end:{line:1,column:21688}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"218":{loc:{start:{line:1,column:21562},end:{line:1,column:21643}},type:"binary-expr",locations:[{start:{line:1,column:21562},end:{line:1,column:21588}},{start:{line:1,column:21590},end:{line:1,column:21614}},{start:{line:1,column:21616},end:{line:1,column:21643}}],line:1},"219":{loc:{start:{line:1,column:21766},end:{line:1,column:22317}},type:"if",locations:[{start:{line:1,column:21766},end:{line:1,column:22317}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"220":{loc:{start:{line:1,column:21769},end:{line:1,column:21851}},type:"binary-expr",locations:[{start:{line:1,column:21769},end:{line:1,column:21796}},{start:{line:1,column:21798},end:{line:1,column:21822}},{start:{line:1,column:21824},end:{line:1,column:21851}}],line:1},"221":{loc:{start:{line:1,column:21853},end:{line:1,column:22206}},type:"if",locations:[{start:{line:1,column:21853},end:{line:1,column:22206}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"222":{loc:{start:{line:1,column:22002},end:{line:1,column:22138}},type:"binary-expr",locations:[{start:{line:1,column:22002},end:{line:1,column:22004}},{start:{line:1,column:22007},end:{line:1,column:22137}}],line:1},"223":{loc:{start:{line:1,column:22007},end:{line:1,column:22110}},type:"binary-expr",locations:[{start:{line:1,column:22007},end:{line:1,column:22038}},{start:{line:1,column:22040},end:{line:1,column:22110}}],line:1},"224":{loc:{start:{line:1,column:22184},end:{line:1,column:22205}},type:"binary-expr",locations:[{start:{line:1,column:22184},end:{line:1,column:22190}},{start:{line:1,column:22192},end:{line:1,column:22205}}],line:1},"225":{loc:{start:{line:1,column:22427},end:{line:1,column:22559}},type:"if",locations:[{start:{line:1,column:22427},end:{line:1,column:22559}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"226":{loc:{start:{line:1,column:22445},end:{line:1,column:22488}},type:"binary-expr",locations:[{start:{line:1,column:22445},end:{line:1,column:22469}},{start:{line:1,column:22471},end:{line:1,column:22488}}],line:1},"227":{loc:{start:{line:1,column:22644},end:{line:1,column:23135}},type:"binary-expr",locations:[{start:{line:1,column:22644},end:{line:1,column:22645}},{start:{line:1,column:22648},end:{line:1,column:23134}}],line:1},"228":{loc:{start:{line:1,column:22705},end:{line:1,column:23132}},type:"if",locations:[{start:{line:1,column:22705},end:{line:1,column:23132}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"229":{loc:{start:{line:1,column:22711},end:{line:1,column:23132}},type:"if",locations:[{start:{line:1,column:22711},end:{line:1,column:23132}},{start:{line:1,column:23045},end:{line:1,column:23132}}],line:1},"230":{loc:{start:{line:1,column:22714},end:{line:1,column:22747}},type:"binary-expr",locations:[{start:{line:1,column:22714},end:{line:1,column:22729}},{start:{line:1,column:22731},end:{line:1,column:22747}}],line:1},"231":{loc:{start:{line:1,column:22749},end:{line:1,column:22813}},type:"if",locations:[{start:{line:1,column:22749},end:{line:1,column:22813}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"232":{loc:{start:{line:1,column:22885},end:{line:1,column:23038}},type:"binary-expr",locations:[{start:{line:1,column:22885},end:{line:1,column:22886}},{start:{line:1,column:22888},end:{line:1,column:22914}},{start:{line:1,column:22917},end:{line:1,column:23037}}],line:1},"233":{loc:{start:{line:1,column:23150},end:{line:1,column:23180}},type:"binary-expr",locations:[{start:{line:1,column:23150},end:{line:1,column:23151}},{start:{line:1,column:23154},end:{line:1,column:23179}}],line:1},"234":{loc:{start:{line:1,column:23367},end:{line:1,column:23390}},type:"binary-expr",locations:[{start:{line:1,column:23367},end:{line:1,column:23368}},{start:{line:1,column:23370},end:{line:1,column:23385}},{start:{line:1,column:23387},end:{line:1,column:23390}}],line:1},"235":{loc:{start:{line:1,column:23629},end:{line:1,column:23742}},type:"cond-expr",locations:[{start:{line:1,column:23693},end:{line:1,column:23733}},{start:{line:1,column:23734},end:{line:1,column:23742}}],line:1},"236":{loc:{start:{line:1,column:23629},end:{line:1,column:23692}},type:"binary-expr",locations:[{start:{line:1,column:23629},end:{line:1,column:23672}},{start:{line:1,column:23674},end:{line:1,column:23692}}],line:1},"237":{loc:{start:{line:1,column:23716},end:{line:1,column:23727}},type:"binary-expr",locations:[{start:{line:1,column:23716},end:{line:1,column:23717}},{start:{line:1,column:23719},end:{line:1,column:23727}}],line:1},"238":{loc:{start:{line:1,column:23882},end:{line:1,column:23926}},type:"binary-expr",locations:[{start:{line:1,column:23882},end:{line:1,column:23912}},{start:{line:1,column:23914},end:{line:1,column:23926}}],line:1},"239":{loc:{start:{line:1,column:23971},end:{line:1,column:23975}},type:"default-arg",locations:[{start:{line:1,column:23973},end:{line:1,column:23975}}],line:1},"240":{loc:{start:{line:1,column:23983},end:{line:1,column:24005}},type:"cond-expr",locations:[{start:{line:1,column:24002},end:{line:1,column:24003}},{start:{line:1,column:24004},end:{line:1,column:24005}}],line:1},"241":{loc:{start:{line:1,column:24006},end:{line:1,column:24169}},type:"binary-expr",locations:[{start:{line:1,column:24007},end:{line:1,column:24020}},{start:{line:1,column:24022},end:{line:1,column:24034}},{start:{line:1,column:24036},end:{line:1,column:24068}},{start:{line:1,column:24072},end:{line:1,column:24168}}],line:1},"242":{loc:{start:{line:1,column:24086},end:{line:1,column:24138}},type:"binary-expr",locations:[{start:{line:1,column:24086},end:{line:1,column:24098}},{start:{line:1,column:24100},end:{line:1,column:24138}}],line:1},"243":{loc:{start:{line:1,column:24215},end:{line:1,column:24219}},type:"default-arg",locations:[{start:{line:1,column:24217},end:{line:1,column:24219}}],line:1},"244":{loc:{start:{line:1,column:24233},end:{line:1,column:24265}},type:"binary-expr",locations:[{start:{line:1,column:24233},end:{line:1,column:24234}},{start:{line:1,column:24236},end:{line:1,column:24255}},{start:{line:1,column:24257},end:{line:1,column:24265}}],line:1},"245":{loc:{start:{line:1,column:24266},end:{line:1,column:24301}},type:"binary-expr",locations:[{start:{line:1,column:24266},end:{line:1,column:24273}},{start:{line:1,column:24276},end:{line:1,column:24300}}],line:1},"246":{loc:{start:{line:1,column:24302},end:{line:1,column:24476}},type:"binary-expr",locations:[{start:{line:1,column:24302},end:{line:1,column:24320}},{start:{line:1,column:24323},end:{line:1,column:24475}}],line:1},"247":{loc:{start:{line:1,column:24323},end:{line:1,column:24387}},type:"binary-expr",locations:[{start:{line:1,column:24323},end:{line:1,column:24340}},{start:{line:1,column:24343},end:{line:1,column:24386}}],line:1},"248":{loc:{start:{line:1,column:24343},end:{line:1,column:24386}},type:"cond-expr",locations:[{start:{line:1,column:24361},end:{line:1,column:24375}},{start:{line:1,column:24376},end:{line:1,column:24386}}],line:1},"249":{loc:{start:{line:1,column:24388},end:{line:1,column:24468}},type:"binary-expr",locations:[{start:{line:1,column:24388},end:{line:1,column:24417}},{start:{line:1,column:24420},end:{line:1,column:24467}}],line:1},"250":{loc:{start:{line:1,column:24420},end:{line:1,column:24467}},type:"cond-expr",locations:[{start:{line:1,column:24433},end:{line:1,column:24452}},{start:{line:1,column:24453},end:{line:1,column:24467}}],line:1},"251":{loc:{start:{line:1,column:24477},end:{line:1,column:24577}},type:"binary-expr",locations:[{start:{line:1,column:24477},end:{line:1,column:24483}},{start:{line:1,column:24486},end:{line:1,column:24576}}],line:1},"252":{loc:{start:{line:1,column:24486},end:{line:1,column:24576}},type:"cond-expr",locations:[{start:{line:1,column:24517},end:{line:1,column:24528}},{start:{line:1,column:24529},end:{line:1,column:24576}}],line:1},"253":{loc:{start:{line:1,column:24529},end:{line:1,column:24576}},type:"binary-expr",locations:[{start:{line:1,column:24529},end:{line:1,column:24560}},{start:{line:1,column:24563},end:{line:1,column:24575}}],line:1},"254":{loc:{start:{line:1,column:24585},end:{line:1,column:24596}},type:"binary-expr",locations:[{start:{line:1,column:24585},end:{line:1,column:24591}},{start:{line:1,column:24593},end:{line:1,column:24596}}],line:1},"255":{loc:{start:{line:1,column:24603},end:{line:1,column:24649}},type:"cond-expr",locations:[{start:{line:1,column:24628},end:{line:1,column:24642}},{start:{line:1,column:24643},end:{line:1,column:24649}}],line:1},"256":{loc:{start:{line:1,column:24721},end:{line:1,column:24753}},type:"cond-expr",locations:[{start:{line:1,column:24740},end:{line:1,column:24742}},{start:{line:1,column:24743},end:{line:1,column:24753}}],line:1},"257":{loc:{start:{line:1,column:24721},end:{line:1,column:24739}},type:"binary-expr",locations:[{start:{line:1,column:24721},end:{line:1,column:24722}},{start:{line:1,column:24724},end:{line:1,column:24739}}],line:1},"258":{loc:{start:{line:1,column:24904},end:{line:1,column:24995}},type:"cond-expr",locations:[{start:{line:1,column:24942},end:{line:1,column:24963}},{start:{line:1,column:24964},end:{line:1,column:24995}}],line:1},"259":{loc:{start:{line:1,column:25028},end:{line:1,column:25112}},type:"binary-expr",locations:[{start:{line:1,column:25028},end:{line:1,column:25051}},{start:{line:1,column:25053},end:{line:1,column:25068}},{start:{line:1,column:25070},end:{line:1,column:25112}}],line:1},"260":{loc:{start:{line:1,column:25116},end:{line:1,column:25200}},type:"binary-expr",locations:[{start:{line:1,column:25116},end:{line:1,column:25139}},{start:{line:1,column:25141},end:{line:1,column:25156}},{start:{line:1,column:25158},end:{line:1,column:25200}}],line:1},"261":{loc:{start:{line:1,column:25222},end:{line:1,column:25305}},type:"binary-expr",locations:[{start:{line:1,column:25222},end:{line:1,column:25224}},{start:{line:1,column:25227},end:{line:1,column:25251}},{start:{line:1,column:25253},end:{line:1,column:25258}},{start:{line:1,column:25261},end:{line:1,column:25263}},{start:{line:1,column:25265},end:{line:1,column:25282}},{start:{line:1,column:25284},end:{line:1,column:25286}},{start:{line:1,column:25288},end:{line:1,column:25305}}],line:1},"262":{loc:{start:{line:1,column:25322},end:{line:1,column:25357}},type:"if",locations:[{start:{line:1,column:25322},end:{line:1,column:25357}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"263":{loc:{start:{line:1,column:25325},end:{line:1,column:25347}},type:"binary-expr",locations:[{start:{line:1,column:25325},end:{line:1,column:25327}},{start:{line:1,column:25329},end:{line:1,column:25347}}],line:1},"264":{loc:{start:{line:1,column:25357},end:{line:1,column:25438}},type:"if",locations:[{start:{line:1,column:25357},end:{line:1,column:25438}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"265":{loc:{start:{line:1,column:25409},end:{line:1,column:25429}},type:"if",locations:[{start:{line:1,column:25409},end:{line:1,column:25429}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"266":{loc:{start:{line:1,column:25438},end:{line:1,column:25455}},type:"if",locations:[{start:{line:1,column:25438},end:{line:1,column:25455}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"267":{loc:{start:{line:1,column:25455},end:{line:1,column:25542}},type:"if",locations:[{start:{line:1,column:25455},end:{line:1,column:25542}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"268":{loc:{start:{line:1,column:25458},end:{line:1,column:25517}},type:"binary-expr",locations:[{start:{line:1,column:25458},end:{line:1,column:25466}},{start:{line:1,column:25468},end:{line:1,column:25495}},{start:{line:1,column:25497},end:{line:1,column:25517}}],line:1},"269":{loc:{start:{line:1,column:25557},end:{line:1,column:25620}},type:"if",locations:[{start:{line:1,column:25557},end:{line:1,column:25620}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"270":{loc:{start:{line:1,column:25560},end:{line:1,column:25610}},type:"binary-expr",locations:[{start:{line:1,column:25560},end:{line:1,column:25601}},{start:{line:1,column:25603},end:{line:1,column:25610}}],line:1},"271":{loc:{start:{line:1,column:25749},end:{line:1,column:25764}},type:"if",locations:[{start:{line:1,column:25749},end:{line:1,column:25764}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"272":{loc:{start:{line:1,column:25764},end:{line:1,column:26077}},type:"if",locations:[{start:{line:1,column:25764},end:{line:1,column:26077}},{start:{line:1,column:25834},end:{line:1,column:26077}}],line:1},"273":{loc:{start:{line:1,column:25834},end:{line:1,column:26077}},type:"if",locations:[{start:{line:1,column:25834},end:{line:1,column:26077}},{start:{line:1,column:25938},end:{line:1,column:26077}}],line:1},"274":{loc:{start:{line:1,column:25938},end:{line:1,column:26077}},type:"if",locations:[{start:{line:1,column:25938},end:{line:1,column:26077}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"275":{loc:{start:{line:1,column:25941},end:{line:1,column:25981}},type:"binary-expr",locations:[{start:{line:1,column:25941},end:{line:1,column:25959}},{start:{line:1,column:25961},end:{line:1,column:25981}}],line:1},"276":{loc:{start:{line:1,column:26007},end:{line:1,column:26067}},type:"binary-expr",locations:[{start:{line:1,column:26007},end:{line:1,column:26048}},{start:{line:1,column:26051},end:{line:1,column:26066}}],line:1},"277":{loc:{start:{line:1,column:26170},end:{line:1,column:26185}},type:"if",locations:[{start:{line:1,column:26170},end:{line:1,column:26185}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"278":{loc:{start:{line:1,column:26185},end:{line:1,column:26490}},type:"if",locations:[{start:{line:1,column:26185},end:{line:1,column:26490}},{start:{line:1,column:26324},end:{line:1,column:26490}}],line:1},"279":{loc:{start:{line:1,column:26188},end:{line:1,column:26210}},type:"binary-expr",locations:[{start:{line:1,column:26188},end:{line:1,column:26189}},{start:{line:1,column:26191},end:{line:1,column:26210}}],line:1},"280":{loc:{start:{line:1,column:26212},end:{line:1,column:26280}},type:"if",locations:[{start:{line:1,column:26212},end:{line:1,column:26280}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"281":{loc:{start:{line:1,column:26215},end:{line:1,column:26263}},type:"binary-expr",locations:[{start:{line:1,column:26215},end:{line:1,column:26237}},{start:{line:1,column:26239},end:{line:1,column:26247}},{start:{line:1,column:26249},end:{line:1,column:26263}}],line:1},"282":{loc:{start:{line:1,column:26324},end:{line:1,column:26490}},type:"if",locations:[{start:{line:1,column:26324},end:{line:1,column:26490}},{start:{line:1,column:26392},end:{line:1,column:26490}}],line:1},"283":{loc:{start:{line:1,column:26392},end:{line:1,column:26490}},type:"if",locations:[{start:{line:1,column:26392},end:{line:1,column:26490}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"284":{loc:{start:{line:1,column:26429},end:{line:1,column:26489}},type:"binary-expr",locations:[{start:{line:1,column:26429},end:{line:1,column:26470}},{start:{line:1,column:26473},end:{line:1,column:26488}}],line:1},"285":{loc:{start:{line:1,column:26822},end:{line:1,column:26827}},type:"binary-expr",locations:[{start:{line:1,column:26822},end:{line:1,column:26823}},{start:{line:1,column:26825},end:{line:1,column:26827}}],line:1},"286":{loc:{start:{line:1,column:26885},end:{line:1,column:27053}},type:"cond-expr",locations:[{start:{line:1,column:26926},end:{line:1,column:27028}},{start:{line:1,column:27029},end:{line:1,column:27053}}],line:1},"287":{loc:{start:{line:1,column:26885},end:{line:1,column:26925}},type:"binary-expr",locations:[{start:{line:1,column:26886},end:{line:1,column:26902}},{start:{line:1,column:26904},end:{line:1,column:26918}},{start:{line:1,column:26921},end:{line:1,column:26925}}],line:1},"288":{loc:{start:{line:1,column:26952},end:{line:1,column:26996}},type:"cond-expr",locations:[{start:{line:1,column:26969},end:{line:1,column:26983}},{start:{line:1,column:26984},end:{line:1,column:26996}}],line:1},"289":{loc:{start:{line:1,column:27094},end:{line:1,column:27166}},type:"binary-expr",locations:[{start:{line:1,column:27095},end:{line:1,column:27118}},{start:{line:1,column:27120},end:{line:1,column:27141}},{start:{line:1,column:27145},end:{line:1,column:27165}}],line:1},"290":{loc:{start:{line:1,column:27167},end:{line:1,column:27201}},type:"binary-expr",locations:[{start:{line:1,column:27167},end:{line:1,column:27172}},{start:{line:1,column:27174},end:{line:1,column:27185}},{start:{line:1,column:27188},end:{line:1,column:27200}}],line:1},"291":{loc:{start:{line:1,column:27202},end:{line:1,column:27223}},type:"binary-expr",locations:[{start:{line:1,column:27202},end:{line:1,column:27212}},{start:{line:1,column:27215},end:{line:1,column:27222}}],line:1},"292":{loc:{start:{line:1,column:27224},end:{line:1,column:27279}},type:"binary-expr",locations:[{start:{line:1,column:27224},end:{line:1,column:27236}},{start:{line:1,column:27239},end:{line:1,column:27278}}],line:1},"293":{loc:{start:{line:1,column:27483},end:{line:1,column:27517}},type:"cond-expr",locations:[{start:{line:1,column:27504},end:{line:1,column:27515}},{start:{line:1,column:27516},end:{line:1,column:27517}}],line:1},"294":{loc:{start:{line:1,column:27532},end:{line:1,column:28117}},type:"if",locations:[{start:{line:1,column:27532},end:{line:1,column:28117}},{start:{line:1,column:27864},end:{line:1,column:28117}}],line:1},"295":{loc:{start:{line:1,column:27555},end:{line:1,column:27644}},type:"if",locations:[{start:{line:1,column:27555},end:{line:1,column:27644}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"296":{loc:{start:{line:1,column:27697},end:{line:1,column:27858}},type:"cond-expr",locations:[{start:{line:1,column:27723},end:{line:1,column:27825}},{start:{line:1,column:27827},end:{line:1,column:27858}}],line:1},"297":{loc:{start:{line:1,column:27697},end:{line:1,column:27721}},type:"binary-expr",locations:[{start:{line:1,column:27697},end:{line:1,column:27698}},{start:{line:1,column:27700},end:{line:1,column:27721}}],line:1},"298":{loc:{start:{line:1,column:27730},end:{line:1,column:27745}},type:"cond-expr",locations:[{start:{line:1,column:27732},end:{line:1,column:27739}},{start:{line:1,column:27740},end:{line:1,column:27745}}],line:1},"299":{loc:{start:{line:1,column:27775},end:{line:1,column:27825}},type:"binary-expr",locations:[{start:{line:1,column:27775},end:{line:1,column:27792}},{start:{line:1,column:27794},end:{line:1,column:27825}}],line:1},"300":{loc:{start:{line:1,column:27864},end:{line:1,column:28117}},type:"if",locations:[{start:{line:1,column:27864},end:{line:1,column:28117}},{start:{line:1,column:28082},end:{line:1,column:28117}}],line:1},"301":{loc:{start:{line:1,column:27867},end:{line:1,column:27881}},type:"binary-expr",locations:[{start:{line:1,column:27867},end:{line:1,column:27871}},{start:{line:1,column:27873},end:{line:1,column:27881}}],line:1},"302":{loc:{start:{line:1,column:27882},end:{line:1,column:28077}},type:"if",locations:[{start:{line:1,column:27882},end:{line:1,column:28077}},{start:{line:1,column:28009},end:{line:1,column:28077}}],line:1},"303":{loc:{start:{line:1,column:27943},end:{line:1,column:28003}},type:"binary-expr",locations:[{start:{line:1,column:27943},end:{line:1,column:27944}},{start:{line:1,column:27947},end:{line:1,column:28002}}],line:1},"304":{loc:{start:{line:1,column:28171},end:{line:1,column:28240}},type:"if",locations:[{start:{line:1,column:28171},end:{line:1,column:28240}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"305":{loc:{start:{line:1,column:28240},end:{line:1,column:28594}},type:"if",locations:[{start:{line:1,column:28240},end:{line:1,column:28594}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"306":{loc:{start:{line:1,column:28243},end:{line:1,column:28289}},type:"binary-expr",locations:[{start:{line:1,column:28243},end:{line:1,column:28266}},{start:{line:1,column:28268},end:{line:1,column:28289}}],line:1},"307":{loc:{start:{line:1,column:28306},end:{line:1,column:28338}},type:"binary-expr",locations:[{start:{line:1,column:28306},end:{line:1,column:28325}},{start:{line:1,column:28327},end:{line:1,column:28338}}],line:1},"308":{loc:{start:{line:1,column:28364},end:{line:1,column:28438}},type:"if",locations:[{start:{line:1,column:28364},end:{line:1,column:28438}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"309":{loc:{start:{line:1,column:28367},end:{line:1,column:28398}},type:"binary-expr",locations:[{start:{line:1,column:28367},end:{line:1,column:28379}},{start:{line:1,column:28381},end:{line:1,column:28398}}],line:1},"310":{loc:{start:{line:1,column:28454},end:{line:1,column:28508}},type:"if",locations:[{start:{line:1,column:28454},end:{line:1,column:28508}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"311":{loc:{start:{line:1,column:28457},end:{line:1,column:28468}},type:"binary-expr",locations:[{start:{line:1,column:28457},end:{line:1,column:28463}},{start:{line:1,column:28465},end:{line:1,column:28468}}],line:1},"312":{loc:{start:{line:1,column:28508},end:{line:1,column:28578}},type:"if",locations:[{start:{line:1,column:28508},end:{line:1,column:28578}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"313":{loc:{start:{line:1,column:28594},end:{line:1,column:28713}},type:"if",locations:[{start:{line:1,column:28594},end:{line:1,column:28713}},{start:{line:1,column:28703},end:{line:1,column:28713}}],line:1},"314":{loc:{start:{line:1,column:28633},end:{line:1,column:28672}},type:"binary-expr",locations:[{start:{line:1,column:28633},end:{line:1,column:28636}},{start:{line:1,column:28638},end:{line:1,column:28672}}],line:1},"315":{loc:{start:{line:1,column:28640},end:{line:1,column:28671}},type:"binary-expr",locations:[{start:{line:1,column:28640},end:{line:1,column:28657}},{start:{line:1,column:28659},end:{line:1,column:28671}}],line:1},"316":{loc:{start:{line:1,column:28733},end:{line:1,column:28887}},type:"if",locations:[{start:{line:1,column:28733},end:{line:1,column:28887}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"317":{loc:{start:{line:1,column:28736},end:{line:1,column:28756}},type:"binary-expr",locations:[{start:{line:1,column:28736},end:{line:1,column:28742}},{start:{line:1,column:28744},end:{line:1,column:28756}}],line:1},"318":{loc:{start:{line:1,column:28797},end:{line:1,column:28833}},type:"if",locations:[{start:{line:1,column:28797},end:{line:1,column:28833}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"319":{loc:{start:{line:1,column:28800},end:{line:1,column:28821}},type:"binary-expr",locations:[{start:{line:1,column:28800},end:{line:1,column:28807}},{start:{line:1,column:28809},end:{line:1,column:28821}}],line:1},"320":{loc:{start:{line:1,column:28833},end:{line:1,column:28854}},type:"if",locations:[{start:{line:1,column:28833},end:{line:1,column:28854}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"321":{loc:{start:{line:1,column:28887},end:{line:1,column:29017}},type:"if",locations:[{start:{line:1,column:28887},end:{line:1,column:29017}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"322":{loc:{start:{line:1,column:28938},end:{line:1,column:29016}},type:"if",locations:[{start:{line:1,column:28938},end:{line:1,column:29016}},{start:{line:1,column:28982},end:{line:1,column:29016}}],line:1},"323":{loc:{start:{line:1,column:29124},end:{line:1,column:29433}},type:"switch",locations:[{start:{line:1,column:29134},end:{line:1,column:29162}},{start:{line:1,column:29162},end:{line:1,column:29198}},{start:{line:1,column:29198},end:{line:1,column:29252}},{start:{line:1,column:29252},end:{line:1,column:29265}},{start:{line:1,column:29265},end:{line:1,column:29380}},{start:{line:1,column:29380},end:{line:1,column:29391}},{start:{line:1,column:29391},end:{line:1,column:29432}}],line:1},"324":{loc:{start:{line:1,column:29226},end:{line:1,column:29251}},type:"binary-expr",locations:[{start:{line:1,column:29226},end:{line:1,column:29244}},{start:{line:1,column:29246},end:{line:1,column:29251}}],line:1},"325":{loc:{start:{line:1,column:29292},end:{line:1,column:29379}},type:"binary-expr",locations:[{start:{line:1,column:29292},end:{line:1,column:29308}},{start:{line:1,column:29311},end:{line:1,column:29332}},{start:{line:1,column:29334},end:{line:1,column:29355}},{start:{line:1,column:29357},end:{line:1,column:29378}}],line:1},"326":{loc:{start:{line:1,column:29444},end:{line:1,column:29533}},type:"binary-expr",locations:[{start:{line:1,column:29444},end:{line:1,column:29462}},{start:{line:1,column:29465},end:{line:1,column:29532}}],line:1},"327":{loc:{start:{line:1,column:29625},end:{line:1,column:29776}},type:"if",locations:[{start:{line:1,column:29625},end:{line:1,column:29776}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"328":{loc:{start:{line:1,column:29899},end:{line:1,column:29987}},type:"binary-expr",locations:[{start:{line:1,column:29899},end:{line:1,column:29915}},{start:{line:1,column:29917},end:{line:1,column:29987}}],line:1},"329":{loc:{start:{line:1,column:29936},end:{line:1,column:29986}},type:"binary-expr",locations:[{start:{line:1,column:29936},end:{line:1,column:29954}},{start:{line:1,column:29956},end:{line:1,column:29967}},{start:{line:1,column:29969},end:{line:1,column:29986}}],line:1},"330":{loc:{start:{line:1,column:30010},end:{line:1,column:30027}},type:"binary-expr",locations:[{start:{line:1,column:30010},end:{line:1,column:30020}},{start:{line:1,column:30022},end:{line:1,column:30027}}],line:1},"331":{loc:{start:{line:1,column:30121},end:{line:1,column:30421}},type:"switch",locations:[{start:{line:1,column:30131},end:{line:1,column:30171}},{start:{line:1,column:30171},end:{line:1,column:30207}},{start:{line:1,column:30207},end:{line:1,column:30315}},{start:{line:1,column:30315},end:{line:1,column:30350}},{start:{line:1,column:30350},end:{line:1,column:30404}},{start:{line:1,column:30404},end:{line:1,column:30420}}],line:1},"332":{loc:{start:{line:1,column:30153},end:{line:1,column:30170}},type:"binary-expr",locations:[{start:{line:1,column:30153},end:{line:1,column:30163}},{start:{line:1,column:30165},end:{line:1,column:30170}}],line:1},"333":{loc:{start:{line:1,column:30227},end:{line:1,column:30314}},type:"binary-expr",locations:[{start:{line:1,column:30227},end:{line:1,column:30243}},{start:{line:1,column:30246},end:{line:1,column:30267}},{start:{line:1,column:30269},end:{line:1,column:30290}},{start:{line:1,column:30292},end:{line:1,column:30313}}],line:1},"334":{loc:{start:{line:1,column:30378},end:{line:1,column:30403}},type:"binary-expr",locations:[{start:{line:1,column:30378},end:{line:1,column:30396}},{start:{line:1,column:30398},end:{line:1,column:30403}}],line:1},"335":{loc:{start:{line:1,column:30444},end:{line:1,column:30482}},type:"binary-expr",locations:[{start:{line:1,column:30444},end:{line:1,column:30453}},{start:{line:1,column:30455},end:{line:1,column:30463}},{start:{line:1,column:30465},end:{line:1,column:30482}}],line:1},"336":{loc:{start:{line:1,column:30864},end:{line:1,column:30893}},type:"binary-expr",locations:[{start:{line:1,column:30864},end:{line:1,column:30865}},{start:{line:1,column:30867},end:{line:1,column:30873}},{start:{line:1,column:30876},end:{line:1,column:30892}}],line:1},"337":{loc:{start:{line:1,column:30925},end:{line:1,column:30958}},type:"binary-expr",locations:[{start:{line:1,column:30925},end:{line:1,column:30945}},{start:{line:1,column:30947},end:{line:1,column:30958}}],line:1},"338":{loc:{start:{line:1,column:31012},end:{line:1,column:31032}},type:"if",locations:[{start:{line:1,column:31012},end:{line:1,column:31032}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"339":{loc:{start:{line:1,column:31254},end:{line:1,column:31379}},type:"cond-expr",locations:[{start:{line:1,column:31269},end:{line:1,column:31273}},{start:{line:1,column:31275},end:{line:1,column:31378}}],line:1},"340":{loc:{start:{line:1,column:31292},end:{line:1,column:31329}},type:"binary-expr",locations:[{start:{line:1,column:31292},end:{line:1,column:31313}},{start:{line:1,column:31315},end:{line:1,column:31329}}],line:1},"341":{loc:{start:{line:1,column:31330},end:{line:1,column:31373}},type:"binary-expr",locations:[{start:{line:1,column:31330},end:{line:1,column:31358}},{start:{line:1,column:31360},end:{line:1,column:31373}}],line:1},"342":{loc:{start:{line:1,column:31500},end:{line:1,column:31587}},type:"if",locations:[{start:{line:1,column:31500},end:{line:1,column:31587}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"343":{loc:{start:{line:1,column:31587},end:{line:1,column:31699}},type:"if",locations:[{start:{line:1,column:31587},end:{line:1,column:31699}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"344":{loc:{start:{line:1,column:31603},end:{line:1,column:31666}},type:"binary-expr",locations:[{start:{line:1,column:31603},end:{line:1,column:31621}},{start:{line:1,column:31623},end:{line:1,column:31644}},{start:{line:1,column:31646},end:{line:1,column:31666}}],line:1},"345":{loc:{start:{line:1,column:31727},end:{line:1,column:31886}},type:"if",locations:[{start:{line:1,column:31727},end:{line:1,column:31886}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"346":{loc:{start:{line:1,column:31892},end:{line:1,column:31989}},type:"cond-expr",locations:[{start:{line:1,column:31972},end:{line:1,column:31978}},{start:{line:1,column:31979},end:{line:1,column:31989}}],line:1},"347":{loc:{start:{line:1,column:31892},end:{line:1,column:31971}},type:"binary-expr",locations:[{start:{line:1,column:31892},end:{line:1,column:31959}},{start:{line:1,column:31961},end:{line:1,column:31971}}],line:1},"348":{loc:{start:{line:1,column:31895},end:{line:1,column:31951}},type:"cond-expr",locations:[{start:{line:1,column:31933},end:{line:1,column:31939}},{start:{line:1,column:31940},end:{line:1,column:31951}}],line:1},"349":{loc:{start:{line:1,column:31895},end:{line:1,column:31932}},type:"binary-expr",locations:[{start:{line:1,column:31895},end:{line:1,column:31920}},{start:{line:1,column:31922},end:{line:1,column:31932}}],line:1},"350":{loc:{start:{line:1,column:31992},end:{line:1,column:32072}},type:"binary-expr",locations:[{start:{line:1,column:31992},end:{line:1,column:32006}},{start:{line:1,column:32008},end:{line:1,column:32072}}],line:1},"351":{loc:{start:{line:1,column:32010},end:{line:1,column:32071}},type:"binary-expr",locations:[{start:{line:1,column:32010},end:{line:1,column:32050}},{start:{line:1,column:32052},end:{line:1,column:32071}}],line:1},"352":{loc:{start:{line:1,column:32012},end:{line:1,column:32049}},type:"binary-expr",locations:[{start:{line:1,column:32012},end:{line:1,column:32037}},{start:{line:1,column:32039},end:{line:1,column:32049}}],line:1},"353":{loc:{start:{line:1,column:32080},end:{line:1,column:32181}},type:"binary-expr",locations:[{start:{line:1,column:32080},end:{line:1,column:32099}},{start:{line:1,column:32101},end:{line:1,column:32103}},{start:{line:1,column:32106},end:{line:1,column:32180}}],line:1},"354":{loc:{start:{line:1,column:32106},end:{line:1,column:32180}},type:"cond-expr",locations:[{start:{line:1,column:32109},end:{line:1,column:32155}},{start:{line:1,column:32157},end:{line:1,column:32180}}],line:1},"355":{loc:{start:{line:1,column:32239},end:{line:1,column:32304}},type:"cond-expr",locations:[{start:{line:1,column:32281},end:{line:1,column:32282}},{start:{line:1,column:32283},end:{line:1,column:32304}}],line:1},"356":{loc:{start:{line:1,column:32239},end:{line:1,column:32280}},type:"binary-expr",locations:[{start:{line:1,column:32239},end:{line:1,column:32268}},{start:{line:1,column:32270},end:{line:1,column:32280}}],line:1},"357":{loc:{start:{line:1,column:32305},end:{line:1,column:32342}},type:"if",locations:[{start:{line:1,column:32305},end:{line:1,column:32342}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"358":{loc:{start:{line:1,column:32435},end:{line:1,column:32489}},type:"binary-expr",locations:[{start:{line:1,column:32435},end:{line:1,column:32460}},{start:{line:1,column:32462},end:{line:1,column:32489}}],line:1},"359":{loc:{start:{line:1,column:32688},end:{line:1,column:32699}},type:"cond-expr",locations:[{start:{line:1,column:32690},end:{line:1,column:32694}},{start:{line:1,column:32695},end:{line:1,column:32699}}],line:1},"360":{loc:{start:{line:1,column:32766},end:{line:1,column:32811}},type:"binary-expr",locations:[{start:{line:1,column:32766},end:{line:1,column:32798}},{start:{line:1,column:32801},end:{line:1,column:32810}}],line:1},"361":{loc:{start:{line:1,column:32949},end:{line:1,column:33056}},type:"cond-expr",locations:[{start:{line:1,column:32958},end:{line:1,column:33018}},{start:{line:1,column:33020},end:{line:1,column:33055}}],line:1},"362":{loc:{start:{line:1,column:32958},end:{line:1,column:33018}},type:"binary-expr",locations:[{start:{line:1,column:32958},end:{line:1,column:32987}},{start:{line:1,column:32990},end:{line:1,column:33017}}],line:1},"363":{loc:{start:{line:1,column:33010},end:{line:1,column:33017}},type:"binary-expr",locations:[{start:{line:1,column:33010},end:{line:1,column:33011}},{start:{line:1,column:33013},end:{line:1,column:33017}}],line:1},"364":{loc:{start:{line:1,column:33040},end:{line:1,column:33055}},type:"binary-expr",locations:[{start:{line:1,column:33040},end:{line:1,column:33041}},{start:{line:1,column:33043},end:{line:1,column:33055}}],line:1},"365":{loc:{start:{line:1,column:33142},end:{line:1,column:33146}},type:"default-arg",locations:[{start:{line:1,column:33144},end:{line:1,column:33146}}],line:1},"366":{loc:{start:{line:1,column:33148},end:{line:1,column:33198}},type:"if",locations:[{start:{line:1,column:33148},end:{line:1,column:33198}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"367":{loc:{start:{line:1,column:33151},end:{line:1,column:33190}},type:"binary-expr",locations:[{start:{line:1,column:33151},end:{line:1,column:33166}},{start:{line:1,column:33168},end:{line:1,column:33190}}],line:1},"368":{loc:{start:{line:1,column:33219},end:{line:1,column:33309}},type:"binary-expr",locations:[{start:{line:1,column:33219},end:{line:1,column:33228}},{start:{line:1,column:33230},end:{line:1,column:33232}},{start:{line:1,column:33235},end:{line:1,column:33308}}],line:1},"369":{loc:{start:{line:1,column:33363},end:{line:1,column:33469}},type:"cond-expr",locations:[{start:{line:1,column:33392},end:{line:1,column:33434}},{start:{line:1,column:33435},end:{line:1,column:33469}}],line:1},"370":{loc:{start:{line:1,column:33525},end:{line:1,column:33593}},type:"cond-expr",locations:[{start:{line:1,column:33535},end:{line:1,column:33591}},{start:{line:1,column:33592},end:{line:1,column:33593}}],line:1},"371":{loc:{start:{line:1,column:33607},end:{line:1,column:33659}},type:"binary-expr",locations:[{start:{line:1,column:33607},end:{line:1,column:33621}},{start:{line:1,column:33623},end:{line:1,column:33659}}],line:1},"372":{loc:{start:{line:1,column:33808},end:{line:1,column:33962}},type:"if",locations:[{start:{line:1,column:33808},end:{line:1,column:33962}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"373":{loc:{start:{line:1,column:33894},end:{line:1,column:33961}},type:"binary-expr",locations:[{start:{line:1,column:33894},end:{line:1,column:33905}},{start:{line:1,column:33907},end:{line:1,column:33961}}],line:1},"374":{loc:{start:{line:1,column:33977},end:{line:1,column:34602}},type:"if",locations:[{start:{line:1,column:33977},end:{line:1,column:34602}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"375":{loc:{start:{line:1,column:33997},end:{line:1,column:34602}},type:"switch",locations:[{start:{line:1,column:34012},end:{line:1,column:34324}},{start:{line:1,column:34324},end:{line:1,column:34337}},{start:{line:1,column:34337},end:{line:1,column:34379}},{start:{line:1,column:34379},end:{line:1,column:34390}},{start:{line:1,column:34390},end:{line:1,column:34428}},{start:{line:1,column:34428},end:{line:1,column:34472}},{start:{line:1,column:34472},end:{line:1,column:34601}}],line:1},"376":{loc:{start:{line:1,column:34027},end:{line:1,column:34317}},type:"cond-expr",locations:[{start:{line:1,column:34046},end:{line:1,column:34083}},{start:{line:1,column:34084},end:{line:1,column:34317}}],line:1},"377":{loc:{start:{line:1,column:34027},end:{line:1,column:34045}},type:"binary-expr",locations:[{start:{line:1,column:34027},end:{line:1,column:34033}},{start:{line:1,column:34035},end:{line:1,column:34045}}],line:1},"378":{loc:{start:{line:1,column:34620},end:{line:1,column:34630}},type:"binary-expr",locations:[{start:{line:1,column:34620},end:{line:1,column:34626}},{start:{line:1,column:34628},end:{line:1,column:34630}}],line:1},"379":{loc:{start:{line:1,column:34631},end:{line:1,column:34665}},type:"binary-expr",locations:[{start:{line:1,column:34631},end:{line:1,column:34641}},{start:{line:1,column:34643},end:{line:1,column:34665}}],line:1},"380":{loc:{start:{line:1,column:34666},end:{line:1,column:34740}},type:"cond-expr",locations:[{start:{line:1,column:34681},end:{line:1,column:34698}},{start:{line:1,column:34699},end:{line:1,column:34740}}],line:1},"381":{loc:{start:{line:1,column:34754},end:{line:1,column:34868}},type:"if",locations:[{start:{line:1,column:34754},end:{line:1,column:34868}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"382":{loc:{start:{line:1,column:34757},end:{line:1,column:34802}},type:"binary-expr",locations:[{start:{line:1,column:34757},end:{line:1,column:34775}},{start:{line:1,column:34777},end:{line:1,column:34802}}],line:1},"383":{loc:{start:{line:1,column:34893},end:{line:1,column:34978}},type:"binary-expr",locations:[{start:{line:1,column:34893},end:{line:1,column:34902}},{start:{line:1,column:34904},end:{line:1,column:34912}},{start:{line:1,column:34914},end:{line:1,column:34944}},{start:{line:1,column:34947},end:{line:1,column:34977}}],line:1},"384":{loc:{start:{line:1,column:35024},end:{line:1,column:35068}},type:"binary-expr",locations:[{start:{line:1,column:35024},end:{line:1,column:35025}},{start:{line:1,column:35028},end:{line:1,column:35067}}],line:1},"385":{loc:{start:{line:1,column:35101},end:{line:1,column:35202}},type:"binary-expr",locations:[{start:{line:1,column:35101},end:{line:1,column:35121}},{start:{line:1,column:35124},end:{line:1,column:35201}}],line:1},"386":{loc:{start:{line:1,column:35147},end:{line:1,column:35180}},type:"binary-expr",locations:[{start:{line:1,column:35147},end:{line:1,column:35158}},{start:{line:1,column:35160},end:{line:1,column:35180}}],line:1},"387":{loc:{start:{line:1,column:35243},end:{line:1,column:35259}},type:"binary-expr",locations:[{start:{line:1,column:35243},end:{line:1,column:35244}},{start:{line:1,column:35246},end:{line:1,column:35259}}],line:1},"388":{loc:{start:{line:1,column:35619},end:{line:1,column:35674}},type:"binary-expr",locations:[{start:{line:1,column:35619},end:{line:1,column:35628}},{start:{line:1,column:35631},end:{line:1,column:35673}}],line:1},"389":{loc:{start:{line:1,column:35718},end:{line:1,column:35766}},type:"binary-expr",locations:[{start:{line:1,column:35718},end:{line:1,column:35732}},{start:{line:1,column:35734},end:{line:1,column:35766}}],line:1},"390":{loc:{start:{line:1,column:35782},end:{line:1,column:35834}},type:"binary-expr",locations:[{start:{line:1,column:35782},end:{line:1,column:35796}},{start:{line:1,column:35798},end:{line:1,column:35834}}],line:1},"391":{loc:{start:{line:1,column:36048},end:{line:1,column:36070}},type:"binary-expr",locations:[{start:{line:1,column:36048},end:{line:1,column:36066}},{start:{line:1,column:36068},end:{line:1,column:36070}}],line:1},"392":{loc:{start:{line:1,column:36143},end:{line:1,column:36165}},type:"binary-expr",locations:[{start:{line:1,column:36143},end:{line:1,column:36161}},{start:{line:1,column:36163},end:{line:1,column:36165}}],line:1},"393":{loc:{start:{line:1,column:36211},end:{line:1,column:36246}},type:"if",locations:[{start:{line:1,column:36211},end:{line:1,column:36246}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"394":{loc:{start:{line:1,column:36246},end:{line:1,column:36369}},type:"if",locations:[{start:{line:1,column:36246},end:{line:1,column:36369}},{start:{line:1,column:36347},end:{line:1,column:36369}}],line:1},"395":{loc:{start:{line:1,column:36304},end:{line:1,column:36341}},type:"if",locations:[{start:{line:1,column:36304},end:{line:1,column:36341}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"396":{loc:{start:{line:1,column:36403},end:{line:1,column:36425}},type:"binary-expr",locations:[{start:{line:1,column:36403},end:{line:1,column:36421}},{start:{line:1,column:36423},end:{line:1,column:36425}}],line:1},"397":{loc:{start:{line:1,column:36477},end:{line:1,column:36507}},type:"binary-expr",locations:[{start:{line:1,column:36477},end:{line:1,column:36503}},{start:{line:1,column:36505},end:{line:1,column:36507}}],line:1},"398":{loc:{start:{line:1,column:36604},end:{line:1,column:36634}},type:"binary-expr",locations:[{start:{line:1,column:36604},end:{line:1,column:36630}},{start:{line:1,column:36632},end:{line:1,column:36634}}],line:1},"399":{loc:{start:{line:1,column:36696},end:{line:1,column:36739}},type:"if",locations:[{start:{line:1,column:36696},end:{line:1,column:36739}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"400":{loc:{start:{line:1,column:36739},end:{line:1,column:36878}},type:"if",locations:[{start:{line:1,column:36739},end:{line:1,column:36878}},{start:{line:1,column:36848},end:{line:1,column:36878}}],line:1},"401":{loc:{start:{line:1,column:36805},end:{line:1,column:36842}},type:"if",locations:[{start:{line:1,column:36805},end:{line:1,column:36842}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"402":{loc:{start:{line:1,column:36920},end:{line:1,column:36950}},type:"binary-expr",locations:[{start:{line:1,column:36920},end:{line:1,column:36946}},{start:{line:1,column:36948},end:{line:1,column:36950}}],line:1},"403":{loc:{start:{line:1,column:36978},end:{line:1,column:37121}},type:"if",locations:[{start:{line:1,column:36978},end:{line:1,column:37121}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"404":{loc:{start:{line:1,column:36981},end:{line:1,column:37042}},type:"binary-expr",locations:[{start:{line:1,column:36981},end:{line:1,column:37007}},{start:{line:1,column:37009},end:{line:1,column:37042}}],line:1},"405":{loc:{start:{line:1,column:37140},end:{line:1,column:37145}},type:"binary-expr",locations:[{start:{line:1,column:37140},end:{line:1,column:37141}},{start:{line:1,column:37143},end:{line:1,column:37145}}],line:1},"406":{loc:{start:{line:1,column:37154},end:{line:1,column:37164}},type:"binary-expr",locations:[{start:{line:1,column:37154},end:{line:1,column:37159}},{start:{line:1,column:37161},end:{line:1,column:37164}}],line:1},"407":{loc:{start:{line:1,column:37174},end:{line:1,column:37184}},type:"binary-expr",locations:[{start:{line:1,column:37174},end:{line:1,column:37179}},{start:{line:1,column:37181},end:{line:1,column:37184}}],line:1},"408":{loc:{start:{line:1,column:37197},end:{line:1,column:37208}},type:"binary-expr",locations:[{start:{line:1,column:37197},end:{line:1,column:37205}},{start:{line:1,column:37207},end:{line:1,column:37208}}],line:1},"409":{loc:{start:{line:1,column:37221},end:{line:1,column:37255}},type:"cond-expr",locations:[{start:{line:1,column:37245},end:{line:1,column:37253}},{start:{line:1,column:37254},end:{line:1,column:37255}}],line:1},"410":{loc:{start:{line:1,column:37221},end:{line:1,column:37244}},type:"binary-expr",locations:[{start:{line:1,column:37221},end:{line:1,column:37231}},{start:{line:1,column:37233},end:{line:1,column:37244}}],line:1},"411":{loc:{start:{line:1,column:37356},end:{line:1,column:37456}},type:"if",locations:[{start:{line:1,column:37356},end:{line:1,column:37456}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"412":{loc:{start:{line:1,column:37424},end:{line:1,column:37455}},type:"cond-expr",locations:[{start:{line:1,column:37448},end:{line:1,column:37451}},{start:{line:1,column:37452},end:{line:1,column:37455}}],line:1},"413":{loc:{start:{line:1,column:37746},end:{line:1,column:37783}},type:"binary-expr",locations:[{start:{line:1,column:37746},end:{line:1,column:37747}},{start:{line:1,column:37749},end:{line:1,column:37767}},{start:{line:1,column:37770},end:{line:1,column:37782}}],line:1},"414":{loc:{start:{line:1,column:37786},end:{line:1,column:37791}},type:"binary-expr",locations:[{start:{line:1,column:37786},end:{line:1,column:37787}},{start:{line:1,column:37789},end:{line:1,column:37791}}],line:1},"415":{loc:{start:{line:1,column:37799},end:{line:1,column:37819}},type:"binary-expr",locations:[{start:{line:1,column:37799},end:{line:1,column:37805}},{start:{line:1,column:37807},end:{line:1,column:37819}}],line:1},"416":{loc:{start:{line:1,column:37907},end:{line:1,column:37934}},type:"binary-expr",locations:[{start:{line:1,column:37907},end:{line:1,column:37929}},{start:{line:1,column:37931},end:{line:1,column:37934}}],line:1},"417":{loc:{start:{line:1,column:37959},end:{line:1,column:37983}},type:"binary-expr",locations:[{start:{line:1,column:37959},end:{line:1,column:37978}},{start:{line:1,column:37980},end:{line:1,column:37983}}],line:1},"418":{loc:{start:{line:1,column:38011},end:{line:1,column:38038}},type:"binary-expr",locations:[{start:{line:1,column:38011},end:{line:1,column:38033}},{start:{line:1,column:38035},end:{line:1,column:38038}}],line:1},"419":{loc:{start:{line:1,column:38065},end:{line:1,column:38114}},type:"cond-expr",locations:[{start:{line:1,column:38110},end:{line:1,column:38111}},{start:{line:1,column:38112},end:{line:1,column:38114}}],line:1},"420":{loc:{start:{line:1,column:38065},end:{line:1,column:38109}},type:"binary-expr",locations:[{start:{line:1,column:38065},end:{line:1,column:38097}},{start:{line:1,column:38099},end:{line:1,column:38109}}],line:1},"421":{loc:{start:{line:1,column:38246},end:{line:1,column:38275}},type:"cond-expr",locations:[{start:{line:1,column:38262},end:{line:1,column:38265}},{start:{line:1,column:38266},end:{line:1,column:38275}}],line:1},"422":{loc:{start:{line:1,column:38320},end:{line:1,column:38332}},type:"binary-expr",locations:[{start:{line:1,column:38320},end:{line:1,column:38328}},{start:{line:1,column:38330},end:{line:1,column:38332}}],line:1},"423":{loc:{start:{line:1,column:38424},end:{line:1,column:38454}},type:"binary-expr",locations:[{start:{line:1,column:38424},end:{line:1,column:38441}},{start:{line:1,column:38443},end:{line:1,column:38454}}],line:1},"424":{loc:{start:{line:1,column:38478},end:{line:1,column:38570}},type:"cond-expr",locations:[{start:{line:1,column:38496},end:{line:1,column:38550}},{start:{line:1,column:38552},end:{line:1,column:38570}}],line:1},"425":{loc:{start:{line:1,column:38519},end:{line:1,column:38545}},type:"binary-expr",locations:[{start:{line:1,column:38519},end:{line:1,column:38520}},{start:{line:1,column:38523},end:{line:1,column:38544}}],line:1},"426":{loc:{start:{line:1,column:38602},end:{line:1,column:38675}},type:"cond-expr",locations:[{start:{line:1,column:38613},end:{line:1,column:38639}},{start:{line:1,column:38641},end:{line:1,column:38674}}],line:1},"427":{loc:{start:{line:1,column:38710},end:{line:1,column:38826}},type:"cond-expr",locations:[{start:{line:1,column:38721},end:{line:1,column:38744}},{start:{line:1,column:38746},end:{line:1,column:38825}}],line:1},"428":{loc:{start:{line:1,column:38772},end:{line:1,column:38820}},type:"binary-expr",locations:[{start:{line:1,column:38772},end:{line:1,column:38795}},{start:{line:1,column:38797},end:{line:1,column:38807}},{start:{line:1,column:38809},end:{line:1,column:38820}}],line:1},"429":{loc:{start:{line:1,column:38863},end:{line:1,column:38986}},type:"cond-expr",locations:[{start:{line:1,column:38874},end:{line:1,column:38899}},{start:{line:1,column:38901},end:{line:1,column:38985}}],line:1},"430":{loc:{start:{line:1,column:38929},end:{line:1,column:38980}},type:"binary-expr",locations:[{start:{line:1,column:38929},end:{line:1,column:38952}},{start:{line:1,column:38954},end:{line:1,column:38964}},{start:{line:1,column:38966},end:{line:1,column:38980}}],line:1},"431":{loc:{start:{line:1,column:39024},end:{line:1,column:39146}},type:"cond-expr",locations:[{start:{line:1,column:39035},end:{line:1,column:39061}},{start:{line:1,column:39063},end:{line:1,column:39145}}],line:1},"432":{loc:{start:{line:1,column:39092},end:{line:1,column:39140}},type:"binary-expr",locations:[{start:{line:1,column:39092},end:{line:1,column:39115}},{start:{line:1,column:39117},end:{line:1,column:39127}},{start:{line:1,column:39129},end:{line:1,column:39140}}],line:1},"433":{loc:{start:{line:1,column:39165},end:{line:1,column:39218}},type:"cond-expr",locations:[{start:{line:1,column:39183},end:{line:1,column:39203}},{start:{line:1,column:39205},end:{line:1,column:39218}}],line:1},"434":{loc:{start:{line:1,column:39242},end:{line:1,column:39326}},type:"binary-expr",locations:[{start:{line:1,column:39242},end:{line:1,column:39261}},{start:{line:1,column:39263},end:{line:1,column:39281}},{start:{line:1,column:39283},end:{line:1,column:39308}},{start:{line:1,column:39310},end:{line:1,column:39326}}],line:1},"435":{loc:{start:{line:1,column:39335},end:{line:1,column:39384}},type:"if",locations:[{start:{line:1,column:39335},end:{line:1,column:39384}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"436":{loc:{start:{line:1,column:39535},end:{line:1,column:39541}},type:"binary-expr",locations:[{start:{line:1,column:39535},end:{line:1,column:39536}},{start:{line:1,column:39538},end:{line:1,column:39541}}],line:1},"437":{loc:{start:{line:1,column:39620},end:{line:1,column:39654}},type:"cond-expr",locations:[{start:{line:1,column:39622},end:{line:1,column:39626}},{start:{line:1,column:39627},end:{line:1,column:39654}}],line:1},"438":{loc:{start:{line:1,column:39673},end:{line:1,column:39859}},type:"if",locations:[{start:{line:1,column:39673},end:{line:1,column:39859}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"439":{loc:{start:{line:1,column:39783},end:{line:1,column:39813}},type:"binary-expr",locations:[{start:{line:1,column:39783},end:{line:1,column:39802}},{start:{line:1,column:39804},end:{line:1,column:39813}}],line:1},"440":{loc:{start:{line:1,column:40499},end:{line:1,column:40577}},type:"cond-expr",locations:[{start:{line:1,column:40501},end:{line:1,column:40542}},{start:{line:1,column:40544},end:{line:1,column:40576}}],line:1},"441":{loc:{start:{line:1,column:40501},end:{line:1,column:40542}},type:"binary-expr",locations:[{start:{line:1,column:40501},end:{line:1,column:40518}},{start:{line:1,column:40520},end:{line:1,column:40529}},{start:{line:1,column:40531},end:{line:1,column:40542}}],line:1},"442":{loc:{start:{line:1,column:40636},end:{line:1,column:40666}},type:"if",locations:[{start:{line:1,column:40636},end:{line:1,column:40666}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"443":{loc:{start:{line:1,column:41009},end:{line:1,column:41054}},type:"binary-expr",locations:[{start:{line:1,column:41009},end:{line:1,column:41031}},{start:{line:1,column:41033},end:{line:1,column:41043}},{start:{line:1,column:41045},end:{line:1,column:41054}}],line:1},"444":{loc:{start:{line:1,column:41133},end:{line:1,column:41190}},type:"binary-expr",locations:[{start:{line:1,column:41133},end:{line:1,column:41151}},{start:{line:1,column:41153},end:{line:1,column:41172}},{start:{line:1,column:41174},end:{line:1,column:41190}}],line:1},"445":{loc:{start:{line:1,column:41203},end:{line:1,column:41257}},type:"if",locations:[{start:{line:1,column:41203},end:{line:1,column:41257}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"446":{loc:{start:{line:1,column:41206},end:{line:1,column:41244}},type:"binary-expr",locations:[{start:{line:1,column:41206},end:{line:1,column:41224}},{start:{line:1,column:41226},end:{line:1,column:41244}}],line:1},"447":{loc:{start:{line:1,column:41268},end:{line:1,column:41768}},type:"if",locations:[{start:{line:1,column:41268},end:{line:1,column:41768}},{start:{line:1,column:41406},end:{line:1,column:41768}}],line:1},"448":{loc:{start:{line:1,column:41488},end:{line:1,column:41687}},type:"binary-expr",locations:[{start:{line:1,column:41488},end:{line:1,column:41503}},{start:{line:1,column:41506},end:{line:1,column:41686}}],line:1},"449":{loc:{start:{line:1,column:41564},end:{line:1,column:41686}},type:"binary-expr",locations:[{start:{line:1,column:41564},end:{line:1,column:41580}},{start:{line:1,column:41582},end:{line:1,column:41686}}],line:1},"450":{loc:{start:{line:1,column:41593},end:{line:1,column:41684}},type:"cond-expr",locations:[{start:{line:1,column:41596},end:{line:1,column:41667}},{start:{line:1,column:41669},end:{line:1,column:41684}}],line:1},"451":{loc:{start:{line:1,column:41692},end:{line:1,column:41722}},type:"binary-expr",locations:[{start:{line:1,column:41692},end:{line:1,column:41711}},{start:{line:1,column:41713},end:{line:1,column:41722}}],line:1},"452":{loc:{start:{line:1,column:41914},end:{line:1,column:41948}},type:"binary-expr",locations:[{start:{line:1,column:41914},end:{line:1,column:41932}},{start:{line:1,column:41935},end:{line:1,column:41947}}],line:1},"453":{loc:{start:{line:1,column:41951},end:{line:1,column:41956}},type:"binary-expr",locations:[{start:{line:1,column:41951},end:{line:1,column:41952}},{start:{line:1,column:41954},end:{line:1,column:41956}}],line:1},"454":{loc:{start:{line:1,column:41968},end:{line:1,column:41988}},type:"binary-expr",locations:[{start:{line:1,column:41968},end:{line:1,column:41974}},{start:{line:1,column:41976},end:{line:1,column:41988}}],line:1},"455":{loc:{start:{line:1,column:42019},end:{line:1,column:42039}},type:"binary-expr",locations:[{start:{line:1,column:42019},end:{line:1,column:42023}},{start:{line:1,column:42025},end:{line:1,column:42039}}],line:1},"456":{loc:{start:{line:1,column:42042},end:{line:1,column:42100}},type:"binary-expr",locations:[{start:{line:1,column:42042},end:{line:1,column:42052}},{start:{line:1,column:42054},end:{line:1,column:42079}},{start:{line:1,column:42081},end:{line:1,column:42097}},{start:{line:1,column:42099},end:{line:1,column:42100}}],line:1},"457":{loc:{start:{line:1,column:42110},end:{line:1,column:42157}},type:"cond-expr",locations:[{start:{line:1,column:42112},end:{line:1,column:42124}},{start:{line:1,column:42126},end:{line:1,column:42156}}],line:1},"458":{loc:{start:{line:1,column:42126},end:{line:1,column:42149}},type:"binary-expr",locations:[{start:{line:1,column:42126},end:{line:1,column:42130}},{start:{line:1,column:42133},end:{line:1,column:42148}}],line:1},"459":{loc:{start:{line:1,column:42158},end:{line:1,column:42197}},type:"binary-expr",locations:[{start:{line:1,column:42158},end:{line:1,column:42165}},{start:{line:1,column:42167},end:{line:1,column:42175}},{start:{line:1,column:42178},end:{line:1,column:42196}}],line:1},"460":{loc:{start:{line:1,column:42384},end:{line:1,column:42389}},type:"binary-expr",locations:[{start:{line:1,column:42384},end:{line:1,column:42385}},{start:{line:1,column:42387},end:{line:1,column:42389}}],line:1},"461":{loc:{start:{line:1,column:42526},end:{line:1,column:42559}},type:"if",locations:[{start:{line:1,column:42526},end:{line:1,column:42559}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"462":{loc:{start:{line:1,column:42636},end:{line:1,column:42729}},type:"cond-expr",locations:[{start:{line:1,column:42685},end:{line:1,column:42689}},{start:{line:1,column:42690},end:{line:1,column:42729}}],line:1},"463":{loc:{start:{line:1,column:42636},end:{line:1,column:42684}},type:"binary-expr",locations:[{start:{line:1,column:42636},end:{line:1,column:42654}},{start:{line:1,column:42656},end:{line:1,column:42664}},{start:{line:1,column:42666},end:{line:1,column:42684}}],line:1},"464":{loc:{start:{line:1,column:42761},end:{line:1,column:42794}},type:"if",locations:[{start:{line:1,column:42761},end:{line:1,column:42794}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"465":{loc:{start:{line:1,column:42855},end:{line:1,column:42912}},type:"cond-expr",locations:[{start:{line:1,column:42874},end:{line:1,column:42878}},{start:{line:1,column:42879},end:{line:1,column:42912}}],line:1},"466":{loc:{start:{line:1,column:42902},end:{line:1,column:42911}},type:"binary-expr",locations:[{start:{line:1,column:42902},end:{line:1,column:42903}},{start:{line:1,column:42905},end:{line:1,column:42911}}],line:1},"467":{loc:{start:{line:1,column:42932},end:{line:1,column:42960}},type:"binary-expr",locations:[{start:{line:1,column:42932},end:{line:1,column:42950}},{start:{line:1,column:42952},end:{line:1,column:42960}}],line:1},"468":{loc:{start:{line:1,column:42976},end:{line:1,column:43028}},type:"if",locations:[{start:{line:1,column:42976},end:{line:1,column:43028}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"469":{loc:{start:{line:1,column:42979},end:{line:1,column:43018}},type:"binary-expr",locations:[{start:{line:1,column:42979},end:{line:1,column:42997}},{start:{line:1,column:42999},end:{line:1,column:43018}}],line:1},"470":{loc:{start:{line:1,column:43028},end:{line:1,column:43062}},type:"if",locations:[{start:{line:1,column:43028},end:{line:1,column:43062}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"471":{loc:{start:{line:1,column:43077},end:{line:1,column:43095}},type:"if",locations:[{start:{line:1,column:43077},end:{line:1,column:43095}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"472":{loc:{start:{line:1,column:43118},end:{line:1,column:43144}},type:"cond-expr",locations:[{start:{line:1,column:43138},end:{line:1,column:43139}},{start:{line:1,column:43140},end:{line:1,column:43144}}],line:1},"473":{loc:{start:{line:1,column:43185},end:{line:1,column:43189}},type:"binary-expr",locations:[{start:{line:1,column:43185},end:{line:1,column:43186}},{start:{line:1,column:43188},end:{line:1,column:43189}}],line:1},"474":{loc:{start:{line:1,column:43512},end:{line:1,column:43563}},type:"cond-expr",locations:[{start:{line:1,column:43528},end:{line:1,column:43560}},{start:{line:1,column:43561},end:{line:1,column:43563}}],line:1},"475":{loc:{start:{line:1,column:43528},end:{line:1,column:43560}},type:"binary-expr",locations:[{start:{line:1,column:43528},end:{line:1,column:43556}},{start:{line:1,column:43558},end:{line:1,column:43560}}],line:1},"476":{loc:{start:{line:1,column:43703},end:{line:1,column:43912}},type:"if",locations:[{start:{line:1,column:43703},end:{line:1,column:43912}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"477":{loc:{start:{line:1,column:43751},end:{line:1,column:43872}},type:"if",locations:[{start:{line:1,column:43751},end:{line:1,column:43872}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"478":{loc:{start:{line:1,column:43953},end:{line:1,column:43957}},type:"binary-expr",locations:[{start:{line:1,column:43953},end:{line:1,column:43954}},{start:{line:1,column:43956},end:{line:1,column:43957}}],line:1},"479":{loc:{start:{line:1,column:44250},end:{line:1,column:44295}},type:"if",locations:[{start:{line:1,column:44250},end:{line:1,column:44295}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"480":{loc:{start:{line:1,column:44301},end:{line:1,column:44384}},type:"cond-expr",locations:[{start:{line:1,column:44344},end:{line:1,column:44381}},{start:{line:1,column:44382},end:{line:1,column:44384}}],line:1},"481":{loc:{start:{line:1,column:44301},end:{line:1,column:44343}},type:"binary-expr",locations:[{start:{line:1,column:44301},end:{line:1,column:44319}},{start:{line:1,column:44321},end:{line:1,column:44343}}],line:1},"482":{loc:{start:{line:1,column:44385},end:{line:1,column:44421}},type:"binary-expr",locations:[{start:{line:1,column:44385},end:{line:1,column:44395}},{start:{line:1,column:44397},end:{line:1,column:44421}}],line:1},"483":{loc:{start:{line:1,column:44449},end:{line:1,column:44490}},type:"binary-expr",locations:[{start:{line:1,column:44449},end:{line:1,column:44486}},{start:{line:1,column:44488},end:{line:1,column:44490}}],line:1},"484":{loc:{start:{line:1,column:44511},end:{line:1,column:44571}},type:"binary-expr",locations:[{start:{line:1,column:44511},end:{line:1,column:44534}},{start:{line:1,column:44537},end:{line:1,column:44570}}],line:1},"485":{loc:{start:{line:1,column:44653},end:{line:1,column:44752}},type:"binary-expr",locations:[{start:{line:1,column:44653},end:{line:1,column:44671}},{start:{line:1,column:44673},end:{line:1,column:44695}},{start:{line:1,column:44697},end:{line:1,column:44752}}],line:1},"486":{loc:{start:{line:1,column:44895},end:{line:1,column:44981}},type:"cond-expr",locations:[{start:{line:1,column:44923},end:{line:1,column:44927}},{start:{line:1,column:44929},end:{line:1,column:44980}}],line:1},"487":{loc:{start:{line:1,column:44895},end:{line:1,column:44922}},type:"binary-expr",locations:[{start:{line:1,column:44895},end:{line:1,column:44897}},{start:{line:1,column:44899},end:{line:1,column:44922}}],line:1},"488":{loc:{start:{line:1,column:45023},end:{line:1,column:45113}},type:"cond-expr",locations:[{start:{line:1,column:45052},end:{line:1,column:45056}},{start:{line:1,column:45058},end:{line:1,column:45112}}],line:1},"489":{loc:{start:{line:1,column:45023},end:{line:1,column:45051}},type:"binary-expr",locations:[{start:{line:1,column:45023},end:{line:1,column:45025}},{start:{line:1,column:45027},end:{line:1,column:45051}}],line:1},"490":{loc:{start:{line:1,column:45266},end:{line:1,column:45403}},type:"binary-expr",locations:[{start:{line:1,column:45266},end:{line:1,column:45285}},{start:{line:1,column:45287},end:{line:1,column:45310}},{start:{line:1,column:45312},end:{line:1,column:45403}}],line:1},"491":{loc:{start:{line:1,column:45444},end:{line:1,column:45448}},type:"binary-expr",locations:[{start:{line:1,column:45444},end:{line:1,column:45445}},{start:{line:1,column:45447},end:{line:1,column:45448}}],line:1},"492":{loc:{start:{line:1,column:46178},end:{line:1,column:46253}},type:"binary-expr",locations:[{start:{line:1,column:46178},end:{line:1,column:46195}},{start:{line:1,column:46197},end:{line:1,column:46253}}],line:1},"493":{loc:{start:{line:1,column:46380},end:{line:1,column:46415}},type:"binary-expr",locations:[{start:{line:1,column:46380},end:{line:1,column:46381}},{start:{line:1,column:46383},end:{line:1,column:46415}}],line:1},"494":{loc:{start:{line:1,column:46476},end:{line:1,column:46512}},type:"binary-expr",locations:[{start:{line:1,column:46476},end:{line:1,column:46477}},{start:{line:1,column:46479},end:{line:1,column:46512}}],line:1},"495":{loc:{start:{line:1,column:46555},end:{line:1,column:47138}},type:"binary-expr",locations:[{start:{line:1,column:46555},end:{line:1,column:46566}},{start:{line:1,column:46569},end:{line:1,column:47137}}],line:1},"496":{loc:{start:{line:1,column:47152},end:{line:1,column:47372}},type:"binary-expr",locations:[{start:{line:1,column:47152},end:{line:1,column:47163}},{start:{line:1,column:47166},end:{line:1,column:47371}}],line:1},"497":{loc:{start:{line:1,column:47407},end:{line:1,column:48019}},type:"binary-expr",locations:[{start:{line:1,column:47407},end:{line:1,column:47436}},{start:{line:1,column:47438},end:{line:1,column:47463}},{start:{line:1,column:47466},end:{line:1,column:48018}}],line:1},"498":{loc:{start:{line:1,column:47579},end:{line:1,column:47787}},type:"if",locations:[{start:{line:1,column:47579},end:{line:1,column:47787}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"499":{loc:{start:{line:1,column:47610},end:{line:1,column:47698}},type:"binary-expr",locations:[{start:{line:1,column:47610},end:{line:1,column:47611}},{start:{line:1,column:47614},end:{line:1,column:47697}}],line:1},"500":{loc:{start:{line:1,column:47809},end:{line:1,column:47822}},type:"if",locations:[{start:{line:1,column:47809},end:{line:1,column:47822}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"501":{loc:{start:{line:1,column:47953},end:{line:1,column:48016}},type:"binary-expr",locations:[{start:{line:1,column:47953},end:{line:1,column:47977}},{start:{line:1,column:47979},end:{line:1,column:48016}}],line:1},"502":{loc:{start:{line:1,column:48052},end:{line:1,column:48056}},type:"default-arg",locations:[{start:{line:1,column:48054},end:{line:1,column:48056}}],line:1},"503":{loc:{start:{line:1,column:48058},end:{line:1,column:48600}},type:"binary-expr",locations:[{start:{line:1,column:48058},end:{line:1,column:48067}},{start:{line:1,column:48070},end:{line:1,column:48110}},{start:{line:1,column:48112},end:{line:1,column:48114}},{start:{line:1,column:48116},end:{line:1,column:48152}},{start:{line:1,column:48155},end:{line:1,column:48598}}],line:1},"504":{loc:{start:{line:1,column:48441},end:{line:1,column:48462}},type:"if",locations:[{start:{line:1,column:48441},end:{line:1,column:48462}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"505":{loc:{start:{line:1,column:48517},end:{line:1,column:48565}},type:"if",locations:[{start:{line:1,column:48517},end:{line:1,column:48565}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"506":{loc:{start:{line:1,column:48699},end:{line:1,column:48726}},type:"binary-expr",locations:[{start:{line:1,column:48699},end:{line:1,column:48707}},{start:{line:1,column:48709},end:{line:1,column:48726}}],line:1},"507":{loc:{start:{line:1,column:48852},end:{line:1,column:49279}},type:"binary-expr",locations:[{start:{line:1,column:48852},end:{line:1,column:48853}},{start:{line:1,column:48856},end:{line:1,column:49278}}],line:1},"508":{loc:{start:{line:1,column:49371},end:{line:1,column:49384}},type:"if",locations:[{start:{line:1,column:49371},end:{line:1,column:49384}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"509":{loc:{start:{line:1,column:49384},end:{line:1,column:49442}},type:"binary-expr",locations:[{start:{line:1,column:49384},end:{line:1,column:49409}},{start:{line:1,column:49411},end:{line:1,column:49442}}],line:1},"510":{loc:{start:{line:1,column:49683},end:{line:1,column:49931}},type:"cond-expr",locations:[{start:{line:1,column:49704},end:{line:1,column:49926}},{start:{line:1,column:49927},end:{line:1,column:49931}}],line:1},"511":{loc:{start:{line:1,column:49769},end:{line:1,column:49848}},type:"cond-expr",locations:[{start:{line:1,column:49818},end:{line:1,column:49836}},{start:{line:1,column:49837},end:{line:1,column:49848}}],line:1},"512":{loc:{start:{line:1,column:49769},end:{line:1,column:49817}},type:"binary-expr",locations:[{start:{line:1,column:49769},end:{line:1,column:49797}},{start:{line:1,column:49799},end:{line:1,column:49817}}],line:1},"513":{loc:{start:{line:1,column:49858},end:{line:1,column:49909}},type:"binary-expr",locations:[{start:{line:1,column:49858},end:{line:1,column:49897}},{start:{line:1,column:49899},end:{line:1,column:49909}}],line:1},"514":{loc:{start:{line:1,column:49958},end:{line:1,column:50039}},type:"if",locations:[{start:{line:1,column:49958},end:{line:1,column:50039}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"515":{loc:{start:{line:1,column:49961},end:{line:1,column:50000}},type:"binary-expr",locations:[{start:{line:1,column:49961},end:{line:1,column:49979}},{start:{line:1,column:49981},end:{line:1,column:50000}}],line:1},"516":{loc:{start:{line:1,column:50008},end:{line:1,column:50038}},type:"cond-expr",locations:[{start:{line:1,column:50032},end:{line:1,column:50033}},{start:{line:1,column:50034},end:{line:1,column:50038}}],line:1},"517":{loc:{start:{line:1,column:50039},end:{line:1,column:50073}},type:"if",locations:[{start:{line:1,column:50039},end:{line:1,column:50073}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"518":{loc:{start:{line:1,column:50102},end:{line:1,column:50120}},type:"if",locations:[{start:{line:1,column:50102},end:{line:1,column:50120}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"519":{loc:{start:{line:1,column:50120},end:{line:1,column:50200}},type:"if",locations:[{start:{line:1,column:50120},end:{line:1,column:50200}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"520":{loc:{start:{line:1,column:50149},end:{line:1,column:50199}},type:"cond-expr",locations:[{start:{line:1,column:50193},end:{line:1,column:50194}},{start:{line:1,column:50195},end:{line:1,column:50199}}],line:1},"521":{loc:{start:{line:1,column:50149},end:{line:1,column:50192}},type:"binary-expr",locations:[{start:{line:1,column:50149},end:{line:1,column:50167}},{start:{line:1,column:50169},end:{line:1,column:50192}}],line:1},"522":{loc:{start:{line:1,column:50223},end:{line:1,column:50274}},type:"cond-expr",locations:[{start:{line:1,column:50268},end:{line:1,column:50269}},{start:{line:1,column:50270},end:{line:1,column:50274}}],line:1},"523":{loc:{start:{line:1,column:50223},end:{line:1,column:50267}},type:"binary-expr",locations:[{start:{line:1,column:50223},end:{line:1,column:50242}},{start:{line:1,column:50244},end:{line:1,column:50267}}],line:1},"524":{loc:{start:{line:1,column:50301},end:{line:1,column:50350}},type:"binary-expr",locations:[{start:{line:1,column:50301},end:{line:1,column:50312}},{start:{line:1,column:50314},end:{line:1,column:50325}},{start:{line:1,column:50327},end:{line:1,column:50339}},{start:{line:1,column:50341},end:{line:1,column:50350}}],line:1},"525":{loc:{start:{line:1,column:50638},end:{line:1,column:50706}},type:"cond-expr",locations:[{start:{line:1,column:50640},end:{line:1,column:50671}},{start:{line:1,column:50672},end:{line:1,column:50706}}],line:1},"526":{loc:{start:{line:1,column:50768},end:{line:1,column:50818}},type:"cond-expr",locations:[{start:{line:1,column:50787},end:{line:1,column:50808}},{start:{line:1,column:50809},end:{line:1,column:50818}}],line:1},"527":{loc:{start:{line:1,column:50882},end:{line:1,column:50917}},type:"cond-expr",locations:[{start:{line:1,column:50884},end:{line:1,column:50900}},{start:{line:1,column:50901},end:{line:1,column:50917}}],line:1},"528":{loc:{start:{line:1,column:51048},end:{line:1,column:51059}},type:"binary-expr",locations:[{start:{line:1,column:51048},end:{line:1,column:51049}},{start:{line:1,column:51051},end:{line:1,column:51059}}],line:1},"529":{loc:{start:{line:1,column:51111},end:{line:1,column:51180}},type:"if",locations:[{start:{line:1,column:51111},end:{line:1,column:51180}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"530":{loc:{start:{line:1,column:51150},end:{line:1,column:51178}},type:"binary-expr",locations:[{start:{line:1,column:51150},end:{line:1,column:51168}},{start:{line:1,column:51170},end:{line:1,column:51178}}],line:1},"531":{loc:{start:{line:1,column:51180},end:{line:1,column:51221}},type:"if",locations:[{start:{line:1,column:51180},end:{line:1,column:51221}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"532":{loc:{start:{line:1,column:51183},end:{line:1,column:51211}},type:"binary-expr",locations:[{start:{line:1,column:51183},end:{line:1,column:51201}},{start:{line:1,column:51203},end:{line:1,column:51211}}],line:1},"533":{loc:{start:{line:1,column:51236},end:{line:1,column:51380}},type:"cond-expr",locations:[{start:{line:1,column:51258},end:{line:1,column:51304}},{start:{line:1,column:51305},end:{line:1,column:51380}}],line:1},"534":{loc:{start:{line:1,column:51275},end:{line:1,column:51303}},type:"binary-expr",locations:[{start:{line:1,column:51275},end:{line:1,column:51293}},{start:{line:1,column:51295},end:{line:1,column:51303}}],line:1},"535":{loc:{start:{line:1,column:51305},end:{line:1,column:51380}},type:"cond-expr",locations:[{start:{line:1,column:51329},end:{line:1,column:51377}},{start:{line:1,column:51378},end:{line:1,column:51380}}],line:1},"536":{loc:{start:{line:1,column:51348},end:{line:1,column:51376}},type:"binary-expr",locations:[{start:{line:1,column:51348},end:{line:1,column:51366}},{start:{line:1,column:51368},end:{line:1,column:51376}}],line:1},"537":{loc:{start:{line:1,column:51400},end:{line:1,column:51460}},type:"if",locations:[{start:{line:1,column:51400},end:{line:1,column:51460}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"538":{loc:{start:{line:1,column:51403},end:{line:1,column:51442}},type:"binary-expr",locations:[{start:{line:1,column:51403},end:{line:1,column:51421}},{start:{line:1,column:51423},end:{line:1,column:51442}}],line:1},"539":{loc:{start:{line:1,column:51460},end:{line:1,column:51494}},type:"if",locations:[{start:{line:1,column:51460},end:{line:1,column:51494}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"540":{loc:{start:{line:1,column:51516},end:{line:1,column:51523}},type:"binary-expr",locations:[{start:{line:1,column:51516},end:{line:1,column:51517}},{start:{line:1,column:51519},end:{line:1,column:51523}}],line:1},"541":{loc:{start:{line:1,column:51564},end:{line:1,column:51568}},type:"binary-expr",locations:[{start:{line:1,column:51564},end:{line:1,column:51565}},{start:{line:1,column:51567},end:{line:1,column:51568}}],line:1}},s:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"116":0,"117":0,"118":0,"119":0,"120":0,"121":0,"122":0,"123":0,"124":0,"125":0,"126":0,"127":0,"128":0,"129":0,"130":0,"131":0,"132":0,"133":0,"134":0,"135":0,"136":0,"137":0,"138":0,"139":0,"140":0,"141":0,"142":0,"143":0,"144":0,"145":0,"146":0,"147":0,"148":0,"149":0,"150":0,"151":0,"152":0,"153":0,"154":0,"155":0,"156":0,"157":0,"158":0,"159":0,"160":0,"161":0,"162":0,"163":0,"164":0,"165":0,"166":0,"167":0,"168":0,"169":0,"170":0,"171":0,"172":0,"173":0,"174":0,"175":0,"176":0,"177":0,"178":0,"179":0,"180":0,"181":0,"182":0,"183":0,"184":0,"185":0,"186":0,"187":0,"188":0,"189":0,"190":0,"191":0,"192":0,"193":0,"194":0,"195":0,"196":0,"197":0,"198":0,"199":0,"200":0,"201":0,"202":0,"203":0,"204":0,"205":0,"206":0,"207":0,"208":0,"209":0,"210":0,"211":0,"212":0,"213":0,"214":0,"215":0,"216":0,"217":0,"218":0,"219":0,"220":0,"221":0,"222":0,"223":0,"224":0,"225":0,"226":0,"227":0,"228":0,"229":0,"230":0,"231":0,"232":0,"233":0,"234":0,"235":0,"236":0,"237":0,"238":0,"239":0,"240":0,"241":0,"242":0,"243":0,"244":0,"245":0,"246":0,"247":0,"248":0,"249":0,"250":0,"251":0,"252":0,"253":0,"254":0,"255":0,"256":0,"257":0,"258":0,"259":0,"260":0,"261":0,"262":0,"263":0,"264":0,"265":0,"266":0,"267":0,"268":0,"269":0,"270":0,"271":0,"272":0,"273":0,"274":0,"275":0,"276":0,"277":0,"278":0,"279":0,"280":0,"281":0,"282":0,"283":0,"284":0,"285":0,"286":0,"287":0,"288":0,"289":0,"290":0,"291":0,"292":0,"293":0,"294":0,"295":0,"296":0,"297":0,"298":0,"299":0,"300":0,"301":0,"302":0,"303":0,"304":0,"305":0,"306":0,"307":0,"308":0,"309":0,"310":0,"311":0,"312":0,"313":0,"314":0,"315":0,"316":0,"317":0,"318":0,"319":0,"320":0,"321":0,"322":0,"323":0,"324":0,"325":0,"326":0,"327":0,"328":0,"329":0,"330":0,"331":0,"332":0,"333":0,"334":0,"335":0,"336":0,"337":0,"338":0,"339":0,"340":0,"341":0,"342":0,"343":0,"344":0,"345":0,"346":0,"347":0,"348":0,"349":0,"350":0,"351":0,"352":0,"353":0,"354":0,"355":0,"356":0,"357":0,"358":0,"359":0,"360":0,"361":0,"362":0,"363":0,"364":0,"365":0,"366":0,"367":0,"368":0,"369":0,"370":0,"371":0,"372":0,"373":0,"374":0,"375":0,"376":0,"377":0,"378":0,"379":0,"380":0,"381":0,"382":0,"383":0,"384":0,"385":0,"386":0,"387":0,"388":0,"389":0,"390":0,"391":0,"392":0,"393":0,"394":0,"395":0,"396":0,"397":0,"398":0,"399":0,"400":0,"401":0,"402":0,"403":0,"404":0,"405":0,"406":0,"407":0,"408":0,"409":0,"410":0,"411":0,"412":0,"413":0,"414":0,"415":0,"416":0,"417":0,"418":0,"419":0,"420":0,"421":0,"422":0,"423":0,"424":0,"425":0,"426":0,"427":0,"428":0,"429":0,"430":0,"431":0,"432":0,"433":0,"434":0,"435":0,"436":0,"437":0,"438":0,"439":0,"440":0,"441":0,"442":0,"443":0,"444":0,"445":0,"446":0,"447":0,"448":0,"449":0,"450":0,"451":0,"452":0,"453":0,"454":0,"455":0,"456":0,"457":0,"458":0,"459":0,"460":0,"461":0,"462":0,"463":0,"464":0,"465":0,"466":0,"467":0,"468":0,"469":0,"470":0,"471":0,"472":0,"473":0,"474":0,"475":0,"476":0,"477":0,"478":0,"479":0,"480":0,"481":0,"482":0,"483":0,"484":0,"485":0,"486":0,"487":0,"488":0,"489":0,"490":0,"491":0,"492":0,"493":0,"494":0,"495":0,"496":0,"497":0,"498":0,"499":0,"500":0,"501":0,"502":0,"503":0,"504":0,"505":0,"506":0,"507":0,"508":0,"509":0,"510":0,"511":0,"512":0,"513":0,"514":0,"515":0,"516":0,"517":0,"518":0,"519":0,"520":0,"521":0,"522":0,"523":0,"524":0,"525":0,"526":0,"527":0,"528":0,"529":0,"530":0,"531":0,"532":0,"533":0,"534":0,"535":0,"536":0,"537":0,"538":0,"539":0,"540":0,"541":0,"542":0,"543":0,"544":0,"545":0,"546":0,"547":0,"548":0,"549":0,"550":0,"551":0,"552":0,"553":0,"554":0,"555":0,"556":0,"557":0,"558":0,"559":0,"560":0,"561":0,"562":0,"563":0,"564":0,"565":0,"566":0,"567":0,"568":0,"569":0,"570":0,"571":0,"572":0,"573":0,"574":0,"575":0,"576":0,"577":0,"578":0,"579":0,"580":0,"581":0,"582":0,"583":0,"584":0,"585":0,"586":0,"587":0,"588":0,"589":0,"590":0,"591":0,"592":0,"593":0,"594":0,"595":0,"596":0,"597":0,"598":0,"599":0,"600":0,"601":0,"602":0,"603":0,"604":0,"605":0,"606":0,"607":0,"608":0,"609":0,"610":0,"611":0,"612":0,"613":0,"614":0,"615":0,"616":0,"617":0,"618":0,"619":0,"620":0,"621":0,"622":0,"623":0,"624":0,"625":0,"626":0,"627":0,"628":0,"629":0,"630":0,"631":0,"632":0,"633":0,"634":0,"635":0,"636":0,"637":0,"638":0,"639":0,"640":0,"641":0,"642":0,"643":0,"644":0,"645":0,"646":0,"647":0,"648":0,"649":0,"650":0,"651":0,"652":0,"653":0,"654":0,"655":0,"656":0,"657":0,"658":0,"659":0,"660":0,"661":0,"662":0,"663":0,"664":0,"665":0,"666":0,"667":0,"668":0,"669":0,"670":0,"671":0,"672":0,"673":0,"674":0,"675":0,"676":0,"677":0,"678":0,"679":0,"680":0,"681":0,"682":0,"683":0,"684":0,"685":0,"686":0,"687":0,"688":0,"689":0,"690":0,"691":0,"692":0,"693":0,"694":0,"695":0,"696":0,"697":0,"698":0,"699":0,"700":0,"701":0,"702":0,"703":0,"704":0,"705":0,"706":0,"707":0,"708":0,"709":0,"710":0,"711":0,"712":0,"713":0,"714":0,"715":0,"716":0,"717":0,"718":0,"719":0,"720":0,"721":0,"722":0,"723":0,"724":0,"725":0,"726":0,"727":0,"728":0,"729":0,"730":0,"731":0,"732":0,"733":0,"734":0,"735":0,"736":0,"737":0,"738":0,"739":0,"740":0,"741":0,"742":0,"743":0,"744":0,"745":0,"746":0,"747":0,"748":0,"749":0,"750":0,"751":0,"752":0,"753":0,"754":0,"755":0,"756":0,"757":0,"758":0,"759":0,"760":0,"761":0,"762":0,"763":0,"764":0,"765":0,"766":0,"767":0,"768":0,"769":0,"770":0,"771":0,"772":0,"773":0,"774":0,"775":0,"776":0,"777":0,"778":0,"779":0,"780":0,"781":0,"782":0,"783":0,"784":0,"785":0,"786":0,"787":0,"788":0,"789":0,"790":0,"791":0,"792":0,"793":0,"794":0,"795":0,"796":0,"797":0,"798":0,"799":0,"800":0,"801":0,"802":0,"803":0,"804":0,"805":0,"806":0,"807":0,"808":0,"809":0,"810":0,"811":0,"812":0,"813":0,"814":0,"815":0,"816":0,"817":0,"818":0,"819":0,"820":0,"821":0,"822":0,"823":0,"824":0,"825":0,"826":0,"827":0,"828":0,"829":0,"830":0,"831":0,"832":0,"833":0,"834":0,"835":0,"836":0,"837":0,"838":0,"839":0,"840":0,"841":0,"842":0,"843":0,"844":0,"845":0,"846":0,"847":0,"848":0,"849":0,"850":0,"851":0,"852":0,"853":0,"854":0,"855":0,"856":0,"857":0,"858":0,"859":0,"860":0,"861":0,"862":0,"863":0,"864":0,"865":0,"866":0,"867":0,"868":0,"869":0,"870":0,"871":0,"872":0,"873":0,"874":0,"875":0,"876":0,"877":0,"878":0,"879":0,"880":0,"881":0,"882":0,"883":0,"884":0,"885":0,"886":0,"887":0,"888":0,"889":0,"890":0,"891":0,"892":0,"893":0,"894":0,"895":0,"896":0,"897":0,"898":0,"899":0,"900":0,"901":0,"902":0,"903":0,"904":0,"905":0,"906":0,"907":0,"908":0,"909":0,"910":0,"911":0,"912":0,"913":0,"914":0,"915":0,"916":0,"917":0,"918":0,"919":0,"920":0,"921":0,"922":0,"923":0,"924":0,"925":0,"926":0,"927":0,"928":0,"929":0,"930":0,"931":0,"932":0,"933":0,"934":0,"935":0,"936":0,"937":0,"938":0,"939":0,"940":0,"941":0,"942":0,"943":0,"944":0,"945":0,"946":0,"947":0,"948":0,"949":0,"950":0,"951":0,"952":0,"953":0,"954":0,"955":0,"956":0,"957":0,"958":0,"959":0,"960":0,"961":0,"962":0,"963":0,"964":0,"965":0,"966":0,"967":0,"968":0,"969":0,"970":0,"971":0,"972":0,"973":0,"974":0,"975":0,"976":0,"977":0,"978":0,"979":0,"980":0,"981":0,"982":0,"983":0,"984":0,"985":0,"986":0,"987":0,"988":0,"989":0,"990":0,"991":0,"992":0,"993":0,"994":0,"995":0,"996":0,"997":0,"998":0,"999":0,"1000":0,"1001":0,"1002":0,"1003":0,"1004":0,"1005":0,"1006":0,"1007":0,"1008":0,"1009":0,"1010":0,"1011":0,"1012":0,"1013":0,"1014":0,"1015":0,"1016":0,"1017":0,"1018":0,"1019":0,"1020":0,"1021":0,"1022":0,"1023":0,"1024":0,"1025":0,"1026":0,"1027":0,"1028":0,"1029":0,"1030":0,"1031":0,"1032":0,"1033":0,"1034":0,"1035":0,"1036":0,"1037":0,"1038":0,"1039":0,"1040":0,"1041":0,"1042":0,"1043":0,"1044":0,"1045":0,"1046":0,"1047":0,"1048":0,"1049":0,"1050":0,"1051":0,"1052":0,"1053":0,"1054":0,"1055":0,"1056":0,"1057":0,"1058":0,"1059":0,"1060":0,"1061":0,"1062":0,"1063":0,"1064":0,"1065":0,"1066":0,"1067":0,"1068":0,"1069":0,"1070":0,"1071":0,"1072":0,"1073":0,"1074":0,"1075":0,"1076":0,"1077":0,"1078":0,"1079":0,"1080":0,"1081":0,"1082":0,"1083":0,"1084":0,"1085":0,"1086":0,"1087":0,"1088":0,"1089":0,"1090":0,"1091":0,"1092":0,"1093":0,"1094":0,"1095":0,"1096":0,"1097":0,"1098":0,"1099":0,"1100":0,"1101":0,"1102":0,"1103":0,"1104":0,"1105":0,"1106":0,"1107":0,"1108":0,"1109":0,"1110":0,"1111":0,"1112":0,"1113":0,"1114":0,"1115":0,"1116":0,"1117":0,"1118":0,"1119":0,"1120":0,"1121":0,"1122":0,"1123":0,"1124":0,"1125":0,"1126":0,"1127":0,"1128":0,"1129":0,"1130":0,"1131":0,"1132":0,"1133":0,"1134":0,"1135":0,"1136":0,"1137":0,"1138":0,"1139":0},f:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"116":0,"117":0,"118":0,"119":0,"120":0,"121":0,"122":0,"123":0,"124":0,"125":0,"126":0,"127":0,"128":0,"129":0,"130":0,"131":0,"132":0,"133":0,"134":0,"135":0,"136":0,"137":0,"138":0,"139":0,"140":0,"141":0,"142":0,"143":0,"144":0,"145":0,"146":0,"147":0,"148":0,"149":0,"150":0,"151":0,"152":0,"153":0,"154":0,"155":0,"156":0,"157":0,"158":0,"159":0,"160":0,"161":0,"162":0,"163":0,"164":0,"165":0,"166":0,"167":0,"168":0,"169":0,"170":0,"171":0,"172":0,"173":0,"174":0,"175":0,"176":0,"177":0,"178":0,"179":0,"180":0,"181":0,"182":0,"183":0,"184":0,"185":0,"186":0,"187":0,"188":0,"189":0,"190":0,"191":0,"192":0,"193":0,"194":0,"195":0,"196":0,"197":0,"198":0,"199":0,"200":0,"201":0,"202":0,"203":0,"204":0,"205":0,"206":0,"207":0,"208":0,"209":0,"210":0,"211":0,"212":0,"213":0,"214":0,"215":0,"216":0,"217":0,"218":0,"219":0,"220":0,"221":0,"222":0,"223":0,"224":0,"225":0,"226":0,"227":0,"228":0,"229":0,"230":0,"231":0,"232":0,"233":0,"234":0,"235":0,"236":0,"237":0,"238":0,"239":0,"240":0,"241":0,"242":0,"243":0,"244":0,"245":0,"246":0,"247":0,"248":0,"249":0,"250":0,"251":0,"252":0,"253":0,"254":0,"255":0,"256":0,"257":0,"258":0,"259":0,"260":0,"261":0,"262":0,"263":0,"264":0,"265":0,"266":0,"267":0,"268":0,"269":0,"270":0,"271":0,"272":0,"273":0,"274":0,"275":0,"276":0,"277":0,"278":0,"279":0,"280":0,"281":0,"282":0,"283":0,"284":0,"285":0,"286":0,"287":0,"288":0,"289":0,"290":0,"291":0,"292":0,"293":0,"294":0,"295":0,"296":0,"297":0,"298":0,"299":0,"300":0,"301":0,"302":0,"303":0,"304":0,"305":0,"306":0,"307":0,"308":0,"309":0,"310":0,"311":0,"312":0,"313":0,"314":0,"315":0,"316":0,"317":0,"318":0,"319":0,"320":0,"321":0,"322":0,"323":0,"324":0,"325":0,"326":0,"327":0,"328":0,"329":0,"330":0,"331":0,"332":0,"333":0,"334":0,"335":0,"336":0,"337":0,"338":0,"339":0,"340":0,"341":0,"342":0,"343":0,"344":0,"345":0,"346":0,"347":0,"348":0,"349":0,"350":0,"351":0,"352":0,"353":0,"354":0,"355":0,"356":0,"357":0,"358":0,"359":0,"360":0,"361":0,"362":0,"363":0,"364":0,"365":0,"366":0,"367":0,"368":0,"369":0,"370":0,"371":0,"372":0,"373":0},b:{"0":[0,0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0,0],"8":[0,0],"9":[0,0],"10":[0,0],"11":[0,0],"12":[0,0],"13":[0,0],"14":[0,0],"15":[0,0],"16":[0,0,0],"17":[0,0],"18":[0,0],"19":[0,0],"20":[0,0],"21":[0,0],"22":[0,0],"23":[0,0],"24":[0,0],"25":[0,0],"26":[0,0],"27":[0,0],"28":[0,0],"29":[0,0],"30":[0,0],"31":[0,0],"32":[0,0],"33":[0,0,0],"34":[0,0],"35":[0,0],"36":[0,0,0],"37":[0,0],"38":[0,0],"39":[0,0],"40":[0,0],"41":[0,0],"42":[0,0],"43":[0,0],"44":[0,0],"45":[0,0],"46":[0,0],"47":[0,0],"48":[0,0],"49":[0,0],"50":[0,0],"51":[0,0],"52":[0,0],"53":[0,0],"54":[0,0],"55":[0,0],"56":[0,0],"57":[0,0],"58":[0,0],"59":[0,0],"60":[0,0],"61":[0,0],"62":[0,0],"63":[0,0],"64":[0,0],"65":[0,0],"66":[0,0],"67":[0,0],"68":[0,0],"69":[0,0],"70":[0,0],"71":[0,0],"72":[0,0],"73":[0,0],"74":[0,0],"75":[0,0],"76":[0,0],"77":[0,0],"78":[0,0],"79":[0,0,0],"80":[0,0],"81":[0],"82":[0,0],"83":[0,0],"84":[0,0,0,0,0],"85":[0,0],"86":[0,0],"87":[0,0],"88":[0,0],"89":[0,0],"90":[0,0],"91":[0,0],"92":[0,0],"93":[0,0,0],"94":[0,0],"95":[0,0],"96":[0,0],"97":[0,0],"98":[0,0],"99":[0,0],"100":[0,0,0],"101":[0,0],"102":[0,0],"103":[0,0],"104":[0,0],"105":[0,0,0],"106":[0,0],"107":[0,0],"108":[0,0],"109":[0,0],"110":[0,0],"111":[0,0],"112":[0,0,0],"113":[0,0],"114":[0,0],"115":[0,0,0,0],"116":[0,0],"117":[0,0],"118":[0,0],"119":[0,0],"120":[0,0],"121":[0,0],"122":[0,0],"123":[0,0],"124":[0,0],"125":[0,0],"126":[0,0],"127":[0,0],"128":[0,0],"129":[0,0],"130":[0,0],"131":[0,0],"132":[0,0],"133":[0,0],"134":[0],"135":[0,0],"136":[0,0,0],"137":[0,0],"138":[0,0,0],"139":[0,0],"140":[0,0],"141":[0,0],"142":[0,0],"143":[0,0],"144":[0,0],"145":[0,0],"146":[0,0],"147":[0,0],"148":[0,0],"149":[0,0],"150":[0,0],"151":[0,0],"152":[0,0],"153":[0,0],"154":[0,0,0],"155":[0,0],"156":[0,0,0],"157":[0,0],"158":[0,0],"159":[0,0,0],"160":[0,0,0],"161":[0,0],"162":[0,0],"163":[0,0],"164":[0,0],"165":[0,0],"166":[0,0,0],"167":[0,0],"168":[0,0],"169":[0,0],"170":[0,0],"171":[0,0],"172":[0,0,0],"173":[0,0],"174":[0,0],"175":[0,0],"176":[0,0],"177":[0,0],"178":[0,0],"179":[0,0],"180":[0,0],"181":[0,0],"182":[0,0],"183":[0,0],"184":[0,0],"185":[0,0],"186":[0,0],"187":[0,0],"188":[0,0],"189":[0,0],"190":[0,0,0],"191":[0,0],"192":[0,0],"193":[0,0,0],"194":[0,0,0,0],"195":[0,0],"196":[0,0],"197":[0,0],"198":[0,0],"199":[0,0,0,0],"200":[0,0],"201":[0,0,0],"202":[0,0],"203":[0,0],"204":[0,0],"205":[0,0],"206":[0,0],"207":[0,0],"208":[0,0],"209":[0,0],"210":[0,0],"211":[0,0],"212":[0,0],"213":[0,0,0],"214":[0,0],"215":[0,0],"216":[0,0],"217":[0,0],"218":[0,0,0],"219":[0,0],"220":[0,0,0],"221":[0,0],"222":[0,0],"223":[0,0],"224":[0,0],"225":[0,0],"226":[0,0],"227":[0,0],"228":[0,0],"229":[0,0],"230":[0,0],"231":[0,0],"232":[0,0,0],"233":[0,0],"234":[0,0,0],"235":[0,0],"236":[0,0],"237":[0,0],"238":[0,0],"239":[0],"240":[0,0],"241":[0,0,0,0],"242":[0,0],"243":[0],"244":[0,0,0],"245":[0,0],"246":[0,0],"247":[0,0],"248":[0,0],"249":[0,0],"250":[0,0],"251":[0,0],"252":[0,0],"253":[0,0],"254":[0,0],"255":[0,0],"256":[0,0],"257":[0,0],"258":[0,0],"259":[0,0,0],"260":[0,0,0],"261":[0,0,0,0,0,0,0],"262":[0,0],"263":[0,0],"264":[0,0],"265":[0,0],"266":[0,0],"267":[0,0],"268":[0,0,0],"269":[0,0],"270":[0,0],"271":[0,0],"272":[0,0],"273":[0,0],"274":[0,0],"275":[0,0],"276":[0,0],"277":[0,0],"278":[0,0],"279":[0,0],"280":[0,0],"281":[0,0,0],"282":[0,0],"283":[0,0],"284":[0,0],"285":[0,0],"286":[0,0],"287":[0,0,0],"288":[0,0],"289":[0,0,0],"290":[0,0,0],"291":[0,0],"292":[0,0],"293":[0,0],"294":[0,0],"295":[0,0],"296":[0,0],"297":[0,0],"298":[0,0],"299":[0,0],"300":[0,0],"301":[0,0],"302":[0,0],"303":[0,0],"304":[0,0],"305":[0,0],"306":[0,0],"307":[0,0],"308":[0,0],"309":[0,0],"310":[0,0],"311":[0,0],"312":[0,0],"313":[0,0],"314":[0,0],"315":[0,0],"316":[0,0],"317":[0,0],"318":[0,0],"319":[0,0],"320":[0,0],"321":[0,0],"322":[0,0],"323":[0,0,0,0,0,0,0],"324":[0,0],"325":[0,0,0,0],"326":[0,0],"327":[0,0],"328":[0,0],"329":[0,0,0],"330":[0,0],"331":[0,0,0,0,0,0],"332":[0,0],"333":[0,0,0,0],"334":[0,0],"335":[0,0,0],"336":[0,0,0],"337":[0,0],"338":[0,0],"339":[0,0],"340":[0,0],"341":[0,0],"342":[0,0],"343":[0,0],"344":[0,0,0],"345":[0,0],"346":[0,0],"347":[0,0],"348":[0,0],"349":[0,0],"350":[0,0],"351":[0,0],"352":[0,0],"353":[0,0,0],"354":[0,0],"355":[0,0],"356":[0,0],"357":[0,0],"358":[0,0],"359":[0,0],"360":[0,0],"361":[0,0],"362":[0,0],"363":[0,0],"364":[0,0],"365":[0],"366":[0,0],"367":[0,0],"368":[0,0,0],"369":[0,0],"370":[0,0],"371":[0,0],"372":[0,0],"373":[0,0],"374":[0,0],"375":[0,0,0,0,0,0,0],"376":[0,0],"377":[0,0],"378":[0,0],"379":[0,0],"380":[0,0],"381":[0,0],"382":[0,0],"383":[0,0,0,0],"384":[0,0],"385":[0,0],"386":[0,0],"387":[0,0],"388":[0,0],"389":[0,0],"390":[0,0],"391":[0,0],"392":[0,0],"393":[0,0],"394":[0,0],"395":[0,0],"396":[0,0],"397":[0,0],"398":[0,0],"399":[0,0],"400":[0,0],"401":[0,0],"402":[0,0],"403":[0,0],"404":[0,0],"405":[0,0],"406":[0,0],"407":[0,0],"408":[0,0],"409":[0,0],"410":[0,0],"411":[0,0],"412":[0,0],"413":[0,0,0],"414":[0,0],"415":[0,0],"416":[0,0],"417":[0,0],"418":[0,0],"419":[0,0],"420":[0,0],"421":[0,0],"422":[0,0],"423":[0,0],"424":[0,0],"425":[0,0],"426":[0,0],"427":[0,0],"428":[0,0,0],"429":[0,0],"430":[0,0,0],"431":[0,0],"432":[0,0,0],"433":[0,0],"434":[0,0,0,0],"435":[0,0],"436":[0,0],"437":[0,0],"438":[0,0],"439":[0,0],"440":[0,0],"441":[0,0,0],"442":[0,0],"443":[0,0,0],"444":[0,0,0],"445":[0,0],"446":[0,0],"447":[0,0],"448":[0,0],"449":[0,0],"450":[0,0],"451":[0,0],"452":[0,0],"453":[0,0],"454":[0,0],"455":[0,0],"456":[0,0,0,0],"457":[0,0],"458":[0,0],"459":[0,0,0],"460":[0,0],"461":[0,0],"462":[0,0],"463":[0,0,0],"464":[0,0],"465":[0,0],"466":[0,0],"467":[0,0],"468":[0,0],"469":[0,0],"470":[0,0],"471":[0,0],"472":[0,0],"473":[0,0],"474":[0,0],"475":[0,0],"476":[0,0],"477":[0,0],"478":[0,0],"479":[0,0],"480":[0,0],"481":[0,0],"482":[0,0],"483":[0,0],"484":[0,0],"485":[0,0,0],"486":[0,0],"487":[0,0],"488":[0,0],"489":[0,0],"490":[0,0,0],"491":[0,0],"492":[0,0],"493":[0,0],"494":[0,0],"495":[0,0],"496":[0,0],"497":[0,0,0],"498":[0,0],"499":[0,0],"500":[0,0],"501":[0,0],"502":[0],"503":[0,0,0,0,0],"504":[0,0],"505":[0,0],"506":[0,0],"507":[0,0],"508":[0,0],"509":[0,0],"510":[0,0],"511":[0,0],"512":[0,0],"513":[0,0],"514":[0,0],"515":[0,0],"516":[0,0],"517":[0,0],"518":[0,0],"519":[0,0],"520":[0,0],"521":[0,0],"522":[0,0],"523":[0,0],"524":[0,0,0,0],"525":[0,0],"526":[0,0],"527":[0,0],"528":[0,0],"529":[0,0],"530":[0,0],"531":[0,0],"532":[0,0],"533":[0,0],"534":[0,0],"535":[0,0],"536":[0,0],"537":[0,0],"538":[0,0],"539":[0,0],"540":[0,0],"541":[0,0]},inputSourceMap:{version:3,sources:["node_modules/engine.io-parser/build/esm/commons.js","node_modules/engine.io-parser/build/esm/encodePacket.browser.js","node_modules/engine.io-parser/build/esm/contrib/base64-arraybuffer.js","node_modules/engine.io-parser/build/esm/decodePacket.browser.js","node_modules/engine.io-parser/build/esm/index.js","node_modules/@socket.io/component-emitter/lib/esm/index.js","node_modules/engine.io-client/build/esm/globals.js","node_modules/engine.io-client/build/esm/util.js","node_modules/engine.io-client/build/esm/contrib/parseqs.js","node_modules/engine.io-client/build/esm/transport.js","node_modules/engine.io-client/build/esm/transports/polling.js","node_modules/engine.io-client/build/esm/contrib/has-cors.js","node_modules/engine.io-client/build/esm/transports/polling-xhr.js","node_modules/engine.io-client/build/esm/transports/websocket.js","node_modules/engine.io-client/build/esm/transports/webtransport.js","node_modules/engine.io-client/build/esm/transports/index.js","node_modules/engine.io-client/build/esm/contrib/parseuri.js","node_modules/engine.io-client/build/esm/socket.js","node_modules/engine.io-client/build/esm/index.js","node_modules/socket.io-client/build/esm/url.js","node_modules/socket.io-parser/build/esm/index.js","node_modules/socket.io-parser/build/esm/is-binary.js","node_modules/socket.io-parser/build/esm/binary.js","node_modules/socket.io-client/build/esm/on.js","node_modules/socket.io-client/build/esm/socket.js","node_modules/socket.io-client/build/esm/contrib/backo2.js","node_modules/socket.io-client/build/esm/manager.js","node_modules/socket.io-client/build/esm/index.js","src/app/core/alarm/models/connection-status.enum.ts","src/app/core/alarm/services/realtime-alarm-event-normalizer.service.ts","src/app/core/alarm/services/alarm-lifecycle-notifier.service.ts","src/app/core/alarm/services/ward-socket-room-coordinator.service.ts","src/app/core/alarm/services/event-subscription.service.ts"],sourcesContent:["const PACKET_TYPES = Object.create(null); // no Map = no polyfill\nPACKET_TYPES[\"open\"] = \"0\";\nPACKET_TYPES[\"close\"] = \"1\";\nPACKET_TYPES[\"ping\"] = \"2\";\nPACKET_TYPES[\"pong\"] = \"3\";\nPACKET_TYPES[\"message\"] = \"4\";\nPACKET_TYPES[\"upgrade\"] = \"5\";\nPACKET_TYPES[\"noop\"] = \"6\";\nconst PACKET_TYPES_REVERSE = Object.create(null);\nObject.keys(PACKET_TYPES).forEach(key => {\n PACKET_TYPES_REVERSE[PACKET_TYPES[key]] = key;\n});\nconst ERROR_PACKET = {\n type: \"error\",\n data: \"parser error\"\n};\nexport { PACKET_TYPES, PACKET_TYPES_REVERSE, ERROR_PACKET };","import { PACKET_TYPES } from \"./commons.js\";\nconst withNativeBlob = typeof Blob === \"function\" || typeof Blob !== \"undefined\" && Object.prototype.toString.call(Blob) === \"[object BlobConstructor]\";\nconst withNativeArrayBuffer = typeof ArrayBuffer === \"function\";\n// ArrayBuffer.isView method is not defined in IE10\nconst isView = obj => {\n return typeof ArrayBuffer.isView === \"function\" ? ArrayBuffer.isView(obj) : obj && obj.buffer instanceof ArrayBuffer;\n};\nconst encodePacket = ({\n type,\n data\n}, supportsBinary, callback) => {\n if (withNativeBlob && data instanceof Blob) {\n if (supportsBinary) {\n return callback(data);\n } else {\n return encodeBlobAsBase64(data, callback);\n }\n } else if (withNativeArrayBuffer && (data instanceof ArrayBuffer || isView(data))) {\n if (supportsBinary) {\n return callback(data);\n } else {\n return encodeBlobAsBase64(new Blob([data]), callback);\n }\n }\n // plain string\n return callback(PACKET_TYPES[type] + (data || \"\"));\n};\nconst encodeBlobAsBase64 = (data, callback) => {\n const fileReader = new FileReader();\n fileReader.onload = function () {\n const content = fileReader.result.split(\",\")[1];\n callback(\"b\" + (content || \"\"));\n };\n return fileReader.readAsDataURL(data);\n};\nfunction toArray(data) {\n if (data instanceof Uint8Array) {\n return data;\n } else if (data instanceof ArrayBuffer) {\n return new Uint8Array(data);\n } else {\n return new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n }\n}\nlet TEXT_ENCODER;\nexport function encodePacketToBinary(packet, callback) {\n if (withNativeBlob && packet.data instanceof Blob) {\n return packet.data.arrayBuffer().then(toArray).then(callback);\n } else if (withNativeArrayBuffer && (packet.data instanceof ArrayBuffer || isView(packet.data))) {\n return callback(toArray(packet.data));\n }\n encodePacket(packet, false, encoded => {\n if (!TEXT_ENCODER) {\n TEXT_ENCODER = new TextEncoder();\n }\n callback(TEXT_ENCODER.encode(encoded));\n });\n}\nexport { encodePacket };","// imported from https://github.com/socketio/base64-arraybuffer\nconst chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n// Use a lookup table to find the index.\nconst lookup = typeof Uint8Array === 'undefined' ? [] : new Uint8Array(256);\nfor (let i = 0; i < chars.length; i++) {\n lookup[chars.charCodeAt(i)] = i;\n}\nexport const encode = arraybuffer => {\n let bytes = new Uint8Array(arraybuffer),\n i,\n len = bytes.length,\n base64 = '';\n for (i = 0; i < len; i += 3) {\n base64 += chars[bytes[i] >> 2];\n base64 += chars[(bytes[i] & 3) << 4 | bytes[i + 1] >> 4];\n base64 += chars[(bytes[i + 1] & 15) << 2 | bytes[i + 2] >> 6];\n base64 += chars[bytes[i + 2] & 63];\n }\n if (len % 3 === 2) {\n base64 = base64.substring(0, base64.length - 1) + '=';\n } else if (len % 3 === 1) {\n base64 = base64.substring(0, base64.length - 2) + '==';\n }\n return base64;\n};\nexport const decode = base64 => {\n let bufferLength = base64.length * 0.75,\n len = base64.length,\n i,\n p = 0,\n encoded1,\n encoded2,\n encoded3,\n encoded4;\n if (base64[base64.length - 1] === '=') {\n bufferLength--;\n if (base64[base64.length - 2] === '=') {\n bufferLength--;\n }\n }\n const arraybuffer = new ArrayBuffer(bufferLength),\n bytes = new Uint8Array(arraybuffer);\n for (i = 0; i < len; i += 4) {\n encoded1 = lookup[base64.charCodeAt(i)];\n encoded2 = lookup[base64.charCodeAt(i + 1)];\n encoded3 = lookup[base64.charCodeAt(i + 2)];\n encoded4 = lookup[base64.charCodeAt(i + 3)];\n bytes[p++] = encoded1 << 2 | encoded2 >> 4;\n bytes[p++] = (encoded2 & 15) << 4 | encoded3 >> 2;\n bytes[p++] = (encoded3 & 3) << 6 | encoded4 & 63;\n }\n return arraybuffer;\n};","import { ERROR_PACKET, PACKET_TYPES_REVERSE } from \"./commons.js\";\nimport { decode } from \"./contrib/base64-arraybuffer.js\";\nconst withNativeArrayBuffer = typeof ArrayBuffer === \"function\";\nexport const decodePacket = (encodedPacket, binaryType) => {\n if (typeof encodedPacket !== \"string\") {\n return {\n type: \"message\",\n data: mapBinary(encodedPacket, binaryType)\n };\n }\n const type = encodedPacket.charAt(0);\n if (type === \"b\") {\n return {\n type: \"message\",\n data: decodeBase64Packet(encodedPacket.substring(1), binaryType)\n };\n }\n const packetType = PACKET_TYPES_REVERSE[type];\n if (!packetType) {\n return ERROR_PACKET;\n }\n return encodedPacket.length > 1 ? {\n type: PACKET_TYPES_REVERSE[type],\n data: encodedPacket.substring(1)\n } : {\n type: PACKET_TYPES_REVERSE[type]\n };\n};\nconst decodeBase64Packet = (data, binaryType) => {\n if (withNativeArrayBuffer) {\n const decoded = decode(data);\n return mapBinary(decoded, binaryType);\n } else {\n return {\n base64: true,\n data\n }; // fallback for old browsers\n }\n};\nconst mapBinary = (data, binaryType) => {\n switch (binaryType) {\n case \"blob\":\n if (data instanceof Blob) {\n // from WebSocket + binaryType \"blob\"\n return data;\n } else {\n // from HTTP long-polling or WebTransport\n return new Blob([data]);\n }\n case \"arraybuffer\":\n default:\n if (data instanceof ArrayBuffer) {\n // from HTTP long-polling (base64) or WebSocket + binaryType \"arraybuffer\"\n return data;\n } else {\n // from WebTransport (Uint8Array)\n return data.buffer;\n }\n }\n};","import { encodePacket, encodePacketToBinary } from \"./encodePacket.js\";\nimport { decodePacket } from \"./decodePacket.js\";\nimport { ERROR_PACKET } from \"./commons.js\";\nconst SEPARATOR = String.fromCharCode(30); // see https://en.wikipedia.org/wiki/Delimiter#ASCII_delimited_text\nconst encodePayload = (packets, callback) => {\n // some packets may be added to the array while encoding, so the initial length must be saved\n const length = packets.length;\n const encodedPackets = new Array(length);\n let count = 0;\n packets.forEach((packet, i) => {\n // force base64 encoding for binary packets\n encodePacket(packet, false, encodedPacket => {\n encodedPackets[i] = encodedPacket;\n if (++count === length) {\n callback(encodedPackets.join(SEPARATOR));\n }\n });\n });\n};\nconst decodePayload = (encodedPayload, binaryType) => {\n const encodedPackets = encodedPayload.split(SEPARATOR);\n const packets = [];\n for (let i = 0; i < encodedPackets.length; i++) {\n const decodedPacket = decodePacket(encodedPackets[i], binaryType);\n packets.push(decodedPacket);\n if (decodedPacket.type === \"error\") {\n break;\n }\n }\n return packets;\n};\nexport function createPacketEncoderStream() {\n return new TransformStream({\n transform(packet, controller) {\n encodePacketToBinary(packet, encodedPacket => {\n const payloadLength = encodedPacket.length;\n let header;\n // inspired by the WebSocket format: https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API/Writing_WebSocket_servers#decoding_payload_length\n if (payloadLength < 126) {\n header = new Uint8Array(1);\n new DataView(header.buffer).setUint8(0, payloadLength);\n } else if (payloadLength < 65536) {\n header = new Uint8Array(3);\n const view = new DataView(header.buffer);\n view.setUint8(0, 126);\n view.setUint16(1, payloadLength);\n } else {\n header = new Uint8Array(9);\n const view = new DataView(header.buffer);\n view.setUint8(0, 127);\n view.setBigUint64(1, BigInt(payloadLength));\n }\n // first bit indicates whether the payload is plain text (0) or binary (1)\n if (packet.data && typeof packet.data !== \"string\") {\n header[0] |= 0x80;\n }\n controller.enqueue(header);\n controller.enqueue(encodedPacket);\n });\n }\n });\n}\nlet TEXT_DECODER;\nfunction totalLength(chunks) {\n return chunks.reduce((acc, chunk) => acc + chunk.length, 0);\n}\nfunction concatChunks(chunks, size) {\n if (chunks[0].length === size) {\n return chunks.shift();\n }\n const buffer = new Uint8Array(size);\n let j = 0;\n for (let i = 0; i < size; i++) {\n buffer[i] = chunks[0][j++];\n if (j === chunks[0].length) {\n chunks.shift();\n j = 0;\n }\n }\n if (chunks.length && j < chunks[0].length) {\n chunks[0] = chunks[0].slice(j);\n }\n return buffer;\n}\nexport function createPacketDecoderStream(maxPayload, binaryType) {\n if (!TEXT_DECODER) {\n TEXT_DECODER = new TextDecoder();\n }\n const chunks = [];\n let state = 0 /* State.READ_HEADER */;\n let expectedLength = -1;\n let isBinary = false;\n return new TransformStream({\n transform(chunk, controller) {\n chunks.push(chunk);\n while (true) {\n if (state === 0 /* State.READ_HEADER */) {\n if (totalLength(chunks) < 1) {\n break;\n }\n const header = concatChunks(chunks, 1);\n isBinary = (header[0] & 0x80) === 0x80;\n expectedLength = header[0] & 0x7f;\n if (expectedLength < 126) {\n state = 3 /* State.READ_PAYLOAD */;\n } else if (expectedLength === 126) {\n state = 1 /* State.READ_EXTENDED_LENGTH_16 */;\n } else {\n state = 2 /* State.READ_EXTENDED_LENGTH_64 */;\n }\n } else if (state === 1 /* State.READ_EXTENDED_LENGTH_16 */) {\n if (totalLength(chunks) < 2) {\n break;\n }\n const headerArray = concatChunks(chunks, 2);\n expectedLength = new DataView(headerArray.buffer, headerArray.byteOffset, headerArray.length).getUint16(0);\n state = 3 /* State.READ_PAYLOAD */;\n } else if (state === 2 /* State.READ_EXTENDED_LENGTH_64 */) {\n if (totalLength(chunks) < 8) {\n break;\n }\n const headerArray = concatChunks(chunks, 8);\n const view = new DataView(headerArray.buffer, headerArray.byteOffset, headerArray.length);\n const n = view.getUint32(0);\n if (n > Math.pow(2, 53 - 32) - 1) {\n // the maximum safe integer in JavaScript is 2^53 - 1\n controller.enqueue(ERROR_PACKET);\n break;\n }\n expectedLength = n * Math.pow(2, 32) + view.getUint32(4);\n state = 3 /* State.READ_PAYLOAD */;\n } else {\n if (totalLength(chunks) < expectedLength) {\n break;\n }\n const data = concatChunks(chunks, expectedLength);\n controller.enqueue(decodePacket(isBinary ? data : TEXT_DECODER.decode(data), binaryType));\n state = 0 /* State.READ_HEADER */;\n }\n if (expectedLength === 0 || expectedLength > maxPayload) {\n controller.enqueue(ERROR_PACKET);\n break;\n }\n }\n }\n });\n}\nexport const protocol = 4;\nexport { encodePacket, encodePayload, decodePacket, decodePayload };","/**\n * Initialize a new `Emitter`.\n *\n * @api public\n */\n\nexport function Emitter(obj) {\n if (obj) return mixin(obj);\n}\n\n/**\n * Mixin the emitter properties.\n *\n * @param {Object} obj\n * @return {Object}\n * @api private\n */\n\nfunction mixin(obj) {\n for (var key in Emitter.prototype) {\n obj[key] = Emitter.prototype[key];\n }\n return obj;\n}\n\n/**\n * Listen on the given `event` with `fn`.\n *\n * @param {String} event\n * @param {Function} fn\n * @return {Emitter}\n * @api public\n */\n\nEmitter.prototype.on = Emitter.prototype.addEventListener = function (event, fn) {\n this._callbacks = this._callbacks || {};\n (this._callbacks['$' + event] = this._callbacks['$' + event] || []).push(fn);\n return this;\n};\n\n/**\n * Adds an `event` listener that will be invoked a single\n * time then automatically removed.\n *\n * @param {String} event\n * @param {Function} fn\n * @return {Emitter}\n * @api public\n */\n\nEmitter.prototype.once = function (event, fn) {\n function on() {\n this.off(event, on);\n fn.apply(this, arguments);\n }\n on.fn = fn;\n this.on(event, on);\n return this;\n};\n\n/**\n * Remove the given callback for `event` or all\n * registered callbacks.\n *\n * @param {String} event\n * @param {Function} fn\n * @return {Emitter}\n * @api public\n */\n\nEmitter.prototype.off = Emitter.prototype.removeListener = Emitter.prototype.removeAllListeners = Emitter.prototype.removeEventListener = function (event, fn) {\n this._callbacks = this._callbacks || {};\n\n // all\n if (0 == arguments.length) {\n this._callbacks = {};\n return this;\n }\n\n // specific event\n var callbacks = this._callbacks['$' + event];\n if (!callbacks) return this;\n\n // remove all handlers\n if (1 == arguments.length) {\n delete this._callbacks['$' + event];\n return this;\n }\n\n // remove specific handler\n var cb;\n for (var i = 0; i < callbacks.length; i++) {\n cb = callbacks[i];\n if (cb === fn || cb.fn === fn) {\n callbacks.splice(i, 1);\n break;\n }\n }\n\n // Remove event specific arrays for event types that no\n // one is subscribed for to avoid memory leak.\n if (callbacks.length === 0) {\n delete this._callbacks['$' + event];\n }\n return this;\n};\n\n/**\n * Emit `event` with the given args.\n *\n * @param {String} event\n * @param {Mixed} ...\n * @return {Emitter}\n */\n\nEmitter.prototype.emit = function (event) {\n this._callbacks = this._callbacks || {};\n var args = new Array(arguments.length - 1),\n callbacks = this._callbacks['$' + event];\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n if (callbacks) {\n callbacks = callbacks.slice(0);\n for (var i = 0, len = callbacks.length; i < len; ++i) {\n callbacks[i].apply(this, args);\n }\n }\n return this;\n};\n\n// alias used for reserved events (protected method)\nEmitter.prototype.emitReserved = Emitter.prototype.emit;\n\n/**\n * Return array of callbacks for `event`.\n *\n * @param {String} event\n * @return {Array}\n * @api public\n */\n\nEmitter.prototype.listeners = function (event) {\n this._callbacks = this._callbacks || {};\n return this._callbacks['$' + event] || [];\n};\n\n/**\n * Check if this emitter has `event` handlers.\n *\n * @param {String} event\n * @return {Boolean}\n * @api public\n */\n\nEmitter.prototype.hasListeners = function (event) {\n return !!this.listeners(event).length;\n};","export const nextTick = (() => {\n const isPromiseAvailable = typeof Promise === \"function\" && typeof Promise.resolve === \"function\";\n if (isPromiseAvailable) {\n return cb => Promise.resolve().then(cb);\n } else {\n return (cb, setTimeoutFn) => setTimeoutFn(cb, 0);\n }\n})();\nexport const globalThisShim = (() => {\n if (typeof self !== \"undefined\") {\n return self;\n } else if (typeof window !== \"undefined\") {\n return window;\n } else {\n return Function(\"return this\")();\n }\n})();\nexport const defaultBinaryType = \"arraybuffer\";\nexport function createCookieJar() {}","import { globalThisShim as globalThis } from \"./globals.node.js\";\nexport function pick(obj, ...attr) {\n return attr.reduce((acc, k) => {\n if (obj.hasOwnProperty(k)) {\n acc[k] = obj[k];\n }\n return acc;\n }, {});\n}\n// Keep a reference to the real timeout functions so they can be used when overridden\nconst NATIVE_SET_TIMEOUT = globalThis.setTimeout;\nconst NATIVE_CLEAR_TIMEOUT = globalThis.clearTimeout;\nexport function installTimerFunctions(obj, opts) {\n if (opts.useNativeTimers) {\n obj.setTimeoutFn = NATIVE_SET_TIMEOUT.bind(globalThis);\n obj.clearTimeoutFn = NATIVE_CLEAR_TIMEOUT.bind(globalThis);\n } else {\n obj.setTimeoutFn = globalThis.setTimeout.bind(globalThis);\n obj.clearTimeoutFn = globalThis.clearTimeout.bind(globalThis);\n }\n}\n// base64 encoded buffers are about 33% bigger (https://en.wikipedia.org/wiki/Base64)\nconst BASE64_OVERHEAD = 1.33;\n// we could also have used `new Blob([obj]).size`, but it isn't supported in IE9\nexport function byteLength(obj) {\n if (typeof obj === \"string\") {\n return utf8Length(obj);\n }\n // arraybuffer or blob\n return Math.ceil((obj.byteLength || obj.size) * BASE64_OVERHEAD);\n}\nfunction utf8Length(str) {\n let c = 0,\n length = 0;\n for (let i = 0, l = str.length; i < l; i++) {\n c = str.charCodeAt(i);\n if (c < 0x80) {\n length += 1;\n } else if (c < 0x800) {\n length += 2;\n } else if (c < 0xd800 || c >= 0xe000) {\n length += 3;\n } else {\n i++;\n length += 4;\n }\n }\n return length;\n}\n/**\n * Generates a random 8-characters string.\n */\nexport function randomString() {\n return Date.now().toString(36).substring(3) + Math.random().toString(36).substring(2, 5);\n}","// imported from https://github.com/galkn/querystring\n/**\n * Compiles a querystring\n * Returns string representation of the object\n *\n * @param {Object}\n * @api private\n */\nexport function encode(obj) {\n let str = '';\n for (let i in obj) {\n if (obj.hasOwnProperty(i)) {\n if (str.length) str += '&';\n str += encodeURIComponent(i) + '=' + encodeURIComponent(obj[i]);\n }\n }\n return str;\n}\n/**\n * Parses a simple querystring into an object\n *\n * @param {String} qs\n * @api private\n */\nexport function decode(qs) {\n let qry = {};\n let pairs = qs.split('&');\n for (let i = 0, l = pairs.length; i < l; i++) {\n let pair = pairs[i].split('=');\n qry[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]);\n }\n return qry;\n}","import { decodePacket } from \"engine.io-parser\";\nimport { Emitter } from \"@socket.io/component-emitter\";\nimport { installTimerFunctions } from \"./util.js\";\nimport { encode } from \"./contrib/parseqs.js\";\nexport class TransportError extends Error {\n constructor(reason, description, context) {\n super(reason);\n this.description = description;\n this.context = context;\n this.type = \"TransportError\";\n }\n}\nexport class Transport extends Emitter {\n /**\n * Transport abstract constructor.\n *\n * @param {Object} opts - options\n * @protected\n */\n constructor(opts) {\n super();\n this.writable = false;\n installTimerFunctions(this, opts);\n this.opts = opts;\n this.query = opts.query;\n this.socket = opts.socket;\n this.supportsBinary = !opts.forceBase64;\n }\n /**\n * Emits an error.\n *\n * @param {String} reason\n * @param description\n * @param context - the error context\n * @return {Transport} for chaining\n * @protected\n */\n onError(reason, description, context) {\n super.emitReserved(\"error\", new TransportError(reason, description, context));\n return this;\n }\n /**\n * Opens the transport.\n */\n open() {\n this.readyState = \"opening\";\n this.doOpen();\n return this;\n }\n /**\n * Closes the transport.\n */\n close() {\n if (this.readyState === \"opening\" || this.readyState === \"open\") {\n this.doClose();\n this.onClose();\n }\n return this;\n }\n /**\n * Sends multiple packets.\n *\n * @param {Array} packets\n */\n send(packets) {\n if (this.readyState === \"open\") {\n this.write(packets);\n } else {\n // this might happen if the transport was silently closed in the beforeunload event handler\n }\n }\n /**\n * Called upon open\n *\n * @protected\n */\n onOpen() {\n this.readyState = \"open\";\n this.writable = true;\n super.emitReserved(\"open\");\n }\n /**\n * Called with data.\n *\n * @param {String} data\n * @protected\n */\n onData(data) {\n const packet = decodePacket(data, this.socket.binaryType);\n this.onPacket(packet);\n }\n /**\n * Called with a decoded packet.\n *\n * @protected\n */\n onPacket(packet) {\n super.emitReserved(\"packet\", packet);\n }\n /**\n * Called upon close.\n *\n * @protected\n */\n onClose(details) {\n this.readyState = \"closed\";\n super.emitReserved(\"close\", details);\n }\n /**\n * Pauses the transport, in order not to lose packets during an upgrade.\n *\n * @param onPause\n */\n pause(onPause) {}\n createUri(schema, query = {}) {\n return schema + \"://\" + this._hostname() + this._port() + this.opts.path + this._query(query);\n }\n _hostname() {\n const hostname = this.opts.hostname;\n return hostname.indexOf(\":\") === -1 ? hostname : \"[\" + hostname + \"]\";\n }\n _port() {\n if (this.opts.port && (this.opts.secure && Number(this.opts.port) !== 443 || !this.opts.secure && Number(this.opts.port) !== 80)) {\n return \":\" + this.opts.port;\n } else {\n return \"\";\n }\n }\n _query(query) {\n const encodedQuery = encode(query);\n return encodedQuery.length ? \"?\" + encodedQuery : \"\";\n }\n}","import { Transport } from \"../transport.js\";\nimport { randomString } from \"../util.js\";\nimport { encodePayload, decodePayload } from \"engine.io-parser\";\nexport class Polling extends Transport {\n constructor() {\n super(...arguments);\n this._polling = false;\n }\n get name() {\n return \"polling\";\n }\n /**\n * Opens the socket (triggers polling). We write a PING message to determine\n * when the transport is open.\n *\n * @protected\n */\n doOpen() {\n this._poll();\n }\n /**\n * Pauses polling.\n *\n * @param {Function} onPause - callback upon buffers are flushed and transport is paused\n * @package\n */\n pause(onPause) {\n this.readyState = \"pausing\";\n const pause = () => {\n this.readyState = \"paused\";\n onPause();\n };\n if (this._polling || !this.writable) {\n let total = 0;\n if (this._polling) {\n total++;\n this.once(\"pollComplete\", function () {\n --total || pause();\n });\n }\n if (!this.writable) {\n total++;\n this.once(\"drain\", function () {\n --total || pause();\n });\n }\n } else {\n pause();\n }\n }\n /**\n * Starts polling cycle.\n *\n * @private\n */\n _poll() {\n this._polling = true;\n this.doPoll();\n this.emitReserved(\"poll\");\n }\n /**\n * Overloads onData to detect payloads.\n *\n * @protected\n */\n onData(data) {\n const callback = packet => {\n // if its the first message we consider the transport open\n if (\"opening\" === this.readyState && packet.type === \"open\") {\n this.onOpen();\n }\n // if its a close packet, we close the ongoing requests\n if (\"close\" === packet.type) {\n this.onClose({\n description: \"transport closed by the server\"\n });\n return false;\n }\n // otherwise bypass onData and handle the message\n this.onPacket(packet);\n };\n // decode payload\n decodePayload(data, this.socket.binaryType).forEach(callback);\n // if an event did not trigger closing\n if (\"closed\" !== this.readyState) {\n // if we got data we're not polling\n this._polling = false;\n this.emitReserved(\"pollComplete\");\n if (\"open\" === this.readyState) {\n this._poll();\n } else {}\n }\n }\n /**\n * For polling, send a close packet.\n *\n * @protected\n */\n doClose() {\n const close = () => {\n this.write([{\n type: \"close\"\n }]);\n };\n if (\"open\" === this.readyState) {\n close();\n } else {\n // in case we're trying to close while\n // handshaking is in progress (GH-164)\n this.once(\"open\", close);\n }\n }\n /**\n * Writes a packets payload.\n *\n * @param {Array} packets - data packets\n * @protected\n */\n write(packets) {\n this.writable = false;\n encodePayload(packets, data => {\n this.doWrite(data, () => {\n this.writable = true;\n this.emitReserved(\"drain\");\n });\n });\n }\n /**\n * Generates uri for connection.\n *\n * @private\n */\n uri() {\n const schema = this.opts.secure ? \"https\" : \"http\";\n const query = this.query || {};\n // cache busting is forced\n if (false !== this.opts.timestampRequests) {\n query[this.opts.timestampParam] = randomString();\n }\n if (!this.supportsBinary && !query.sid) {\n query.b64 = 1;\n }\n return this.createUri(schema, query);\n }\n}","// imported from https://github.com/component/has-cors\nlet value = false;\ntry {\n value = typeof XMLHttpRequest !== 'undefined' && 'withCredentials' in new XMLHttpRequest();\n} catch (err) {\n // if XMLHttp support is disabled in IE then it will throw\n // when trying to create\n}\nexport const hasCORS = value;","import { Polling } from \"./polling.js\";\nimport { Emitter } from \"@socket.io/component-emitter\";\nimport { installTimerFunctions, pick } from \"../util.js\";\nimport { globalThisShim as globalThis } from \"../globals.node.js\";\nimport { hasCORS } from \"../contrib/has-cors.js\";\nfunction empty() {}\nexport class BaseXHR extends Polling {\n /**\n * XHR Polling constructor.\n *\n * @param {Object} opts\n * @package\n */\n constructor(opts) {\n super(opts);\n if (typeof location !== \"undefined\") {\n const isSSL = \"https:\" === location.protocol;\n let port = location.port;\n // some user agents have empty `location.port`\n if (!port) {\n port = isSSL ? \"443\" : \"80\";\n }\n this.xd = typeof location !== \"undefined\" && opts.hostname !== location.hostname || port !== opts.port;\n }\n }\n /**\n * Sends data.\n *\n * @param {String} data to send.\n * @param {Function} called upon flush.\n * @private\n */\n doWrite(data, fn) {\n const req = this.request({\n method: \"POST\",\n data: data\n });\n req.on(\"success\", fn);\n req.on(\"error\", (xhrStatus, context) => {\n this.onError(\"xhr post error\", xhrStatus, context);\n });\n }\n /**\n * Starts a poll cycle.\n *\n * @private\n */\n doPoll() {\n const req = this.request();\n req.on(\"data\", this.onData.bind(this));\n req.on(\"error\", (xhrStatus, context) => {\n this.onError(\"xhr poll error\", xhrStatus, context);\n });\n this.pollXhr = req;\n }\n}\nexport let Request = /*#__PURE__*/(() => {\n class Request extends Emitter {\n /**\n * Request constructor\n *\n * @param {Object} options\n * @package\n */\n constructor(createRequest, uri, opts) {\n super();\n this.createRequest = createRequest;\n installTimerFunctions(this, opts);\n this._opts = opts;\n this._method = opts.method || \"GET\";\n this._uri = uri;\n this._data = undefined !== opts.data ? opts.data : null;\n this._create();\n }\n /**\n * Creates the XHR object and sends the request.\n *\n * @private\n */\n _create() {\n var _a;\n const opts = pick(this._opts, \"agent\", \"pfx\", \"key\", \"passphrase\", \"cert\", \"ca\", \"ciphers\", \"rejectUnauthorized\", \"autoUnref\");\n opts.xdomain = !!this._opts.xd;\n const xhr = this._xhr = this.createRequest(opts);\n try {\n xhr.open(this._method, this._uri, true);\n try {\n if (this._opts.extraHeaders) {\n // @ts-ignore\n xhr.setDisableHeaderCheck && xhr.setDisableHeaderCheck(true);\n for (let i in this._opts.extraHeaders) {\n if (this._opts.extraHeaders.hasOwnProperty(i)) {\n xhr.setRequestHeader(i, this._opts.extraHeaders[i]);\n }\n }\n }\n } catch (e) {}\n if (\"POST\" === this._method) {\n try {\n xhr.setRequestHeader(\"Content-type\", \"text/plain;charset=UTF-8\");\n } catch (e) {}\n }\n try {\n xhr.setRequestHeader(\"Accept\", \"*/*\");\n } catch (e) {}\n (_a = this._opts.cookieJar) === null || _a === void 0 ? void 0 : _a.addCookies(xhr);\n // ie6 check\n if (\"withCredentials\" in xhr) {\n xhr.withCredentials = this._opts.withCredentials;\n }\n if (this._opts.requestTimeout) {\n xhr.timeout = this._opts.requestTimeout;\n }\n xhr.onreadystatechange = () => {\n var _a;\n if (xhr.readyState === 3) {\n (_a = this._opts.cookieJar) === null || _a === void 0 ? void 0 : _a.parseCookies(\n // @ts-ignore\n xhr.getResponseHeader(\"set-cookie\"));\n }\n if (4 !== xhr.readyState) return;\n if (200 === xhr.status || 1223 === xhr.status) {\n this._onLoad();\n } else {\n // make sure the `error` event handler that's user-set\n // does not throw in the same tick and gets caught here\n this.setTimeoutFn(() => {\n this._onError(typeof xhr.status === \"number\" ? xhr.status : 0);\n }, 0);\n }\n };\n xhr.send(this._data);\n } catch (e) {\n // Need to defer since .create() is called directly from the constructor\n // and thus the 'error' event can only be only bound *after* this exception\n // occurs. Therefore, also, we cannot throw here at all.\n this.setTimeoutFn(() => {\n this._onError(e);\n }, 0);\n return;\n }\n if (typeof document !== \"undefined\") {\n this._index = Request.requestsCount++;\n Request.requests[this._index] = this;\n }\n }\n /**\n * Called upon error.\n *\n * @private\n */\n _onError(err) {\n this.emitReserved(\"error\", err, this._xhr);\n this._cleanup(true);\n }\n /**\n * Cleans up house.\n *\n * @private\n */\n _cleanup(fromError) {\n if (\"undefined\" === typeof this._xhr || null === this._xhr) {\n return;\n }\n this._xhr.onreadystatechange = empty;\n if (fromError) {\n try {\n this._xhr.abort();\n } catch (e) {}\n }\n if (typeof document !== \"undefined\") {\n delete Request.requests[this._index];\n }\n this._xhr = null;\n }\n /**\n * Called upon load.\n *\n * @private\n */\n _onLoad() {\n const data = this._xhr.responseText;\n if (data !== null) {\n this.emitReserved(\"data\", data);\n this.emitReserved(\"success\");\n this._cleanup();\n }\n }\n /**\n * Aborts the request.\n *\n * @package\n */\n abort() {\n this._cleanup();\n }\n }\n Request.requestsCount = 0;\n Request.requests = {};\n /**\n * Aborts pending requests when unloading the window. This is needed to prevent\n * memory leaks (e.g. when using IE) and to ensure that no spurious error is\n * emitted.\n */\n return Request;\n})();\nif (typeof document !== \"undefined\") {\n // @ts-ignore\n if (typeof attachEvent === \"function\") {\n // @ts-ignore\n attachEvent(\"onunload\", unloadHandler);\n } else if (typeof addEventListener === \"function\") {\n const terminationEvent = \"onpagehide\" in globalThis ? \"pagehide\" : \"unload\";\n addEventListener(terminationEvent, unloadHandler, false);\n }\n}\nfunction unloadHandler() {\n for (let i in Request.requests) {\n if (Request.requests.hasOwnProperty(i)) {\n Request.requests[i].abort();\n }\n }\n}\nconst hasXHR2 = function () {\n const xhr = newRequest({\n xdomain: false\n });\n return xhr && xhr.responseType !== null;\n}();\n/**\n * HTTP long-polling based on the built-in `XMLHttpRequest` object.\n *\n * Usage: browser\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest\n */\nexport class XHR extends BaseXHR {\n constructor(opts) {\n super(opts);\n const forceBase64 = opts && opts.forceBase64;\n this.supportsBinary = hasXHR2 && !forceBase64;\n }\n request(opts = {}) {\n Object.assign(opts, {\n xd: this.xd\n }, this.opts);\n return new Request(newRequest, this.uri(), opts);\n }\n}\nfunction newRequest(opts) {\n const xdomain = opts.xdomain;\n // XMLHttpRequest can be disabled on IE\n try {\n if (\"undefined\" !== typeof XMLHttpRequest && (!xdomain || hasCORS)) {\n return new XMLHttpRequest();\n }\n } catch (e) {}\n if (!xdomain) {\n try {\n return new globalThis[[\"Active\"].concat(\"Object\").join(\"X\")](\"Microsoft.XMLHTTP\");\n } catch (e) {}\n }\n}","import { Transport } from \"../transport.js\";\nimport { pick, randomString } from \"../util.js\";\nimport { encodePacket } from \"engine.io-parser\";\nimport { globalThisShim as globalThis, nextTick } from \"../globals.node.js\";\n// detect ReactNative environment\nconst isReactNative = typeof navigator !== \"undefined\" && typeof navigator.product === \"string\" && navigator.product.toLowerCase() === \"reactnative\";\nexport class BaseWS extends Transport {\n get name() {\n return \"websocket\";\n }\n doOpen() {\n const uri = this.uri();\n const protocols = this.opts.protocols;\n // React Native only supports the 'headers' option, and will print a warning if anything else is passed\n const opts = isReactNative ? {} : pick(this.opts, \"agent\", \"perMessageDeflate\", \"pfx\", \"key\", \"passphrase\", \"cert\", \"ca\", \"ciphers\", \"rejectUnauthorized\", \"localAddress\", \"protocolVersion\", \"origin\", \"maxPayload\", \"family\", \"checkServerIdentity\");\n if (this.opts.extraHeaders) {\n opts.headers = this.opts.extraHeaders;\n }\n try {\n this.ws = this.createSocket(uri, protocols, opts);\n } catch (err) {\n return this.emitReserved(\"error\", err);\n }\n this.ws.binaryType = this.socket.binaryType;\n this.addEventListeners();\n }\n /**\n * Adds event listeners to the socket\n *\n * @private\n */\n addEventListeners() {\n this.ws.onopen = () => {\n if (this.opts.autoUnref) {\n this.ws._socket.unref();\n }\n this.onOpen();\n };\n this.ws.onclose = closeEvent => this.onClose({\n description: \"websocket connection closed\",\n context: closeEvent\n });\n this.ws.onmessage = ev => this.onData(ev.data);\n this.ws.onerror = e => this.onError(\"websocket error\", e);\n }\n write(packets) {\n this.writable = false;\n // encodePacket efficient as it uses WS framing\n // no need for encodePayload\n for (let i = 0; i < packets.length; i++) {\n const packet = packets[i];\n const lastPacket = i === packets.length - 1;\n encodePacket(packet, this.supportsBinary, data => {\n // Sometimes the websocket has already been closed but the browser didn't\n // have a chance of informing us about it yet, in that case send will\n // throw an error\n try {\n this.doWrite(packet, data);\n } catch (e) {}\n if (lastPacket) {\n // fake drain\n // defer to next tick to allow Socket to clear writeBuffer\n nextTick(() => {\n this.writable = true;\n this.emitReserved(\"drain\");\n }, this.setTimeoutFn);\n }\n });\n }\n }\n doClose() {\n if (typeof this.ws !== \"undefined\") {\n this.ws.onerror = () => {};\n this.ws.close();\n this.ws = null;\n }\n }\n /**\n * Generates uri for connection.\n *\n * @private\n */\n uri() {\n const schema = this.opts.secure ? \"wss\" : \"ws\";\n const query = this.query || {};\n // append timestamp to URI\n if (this.opts.timestampRequests) {\n query[this.opts.timestampParam] = randomString();\n }\n // communicate binary support capabilities\n if (!this.supportsBinary) {\n query.b64 = 1;\n }\n return this.createUri(schema, query);\n }\n}\nconst WebSocketCtor = globalThis.WebSocket || globalThis.MozWebSocket;\n/**\n * WebSocket transport based on the built-in `WebSocket` object.\n *\n * Usage: browser, Node.js (since v21), Deno, Bun\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket\n * @see https://caniuse.com/mdn-api_websocket\n * @see https://nodejs.org/api/globals.html#websocket\n */\nexport class WS extends BaseWS {\n createSocket(uri, protocols, opts) {\n return !isReactNative ? protocols ? new WebSocketCtor(uri, protocols) : new WebSocketCtor(uri) : new WebSocketCtor(uri, protocols, opts);\n }\n doWrite(_packet, data) {\n this.ws.send(data);\n }\n}","import { Transport } from \"../transport.js\";\nimport { nextTick } from \"../globals.node.js\";\nimport { createPacketDecoderStream, createPacketEncoderStream } from \"engine.io-parser\";\n/**\n * WebTransport transport based on the built-in `WebTransport` object.\n *\n * Usage: browser, Node.js (with the `@fails-components/webtransport` package)\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/WebTransport\n * @see https://caniuse.com/webtransport\n */\nexport class WT extends Transport {\n get name() {\n return \"webtransport\";\n }\n doOpen() {\n try {\n // @ts-ignore\n this._transport = new WebTransport(this.createUri(\"https\"), this.opts.transportOptions[this.name]);\n } catch (err) {\n return this.emitReserved(\"error\", err);\n }\n this._transport.closed.then(() => {\n this.onClose();\n }).catch(err => {\n this.onError(\"webtransport error\", err);\n });\n // note: we could have used async/await, but that would require some additional polyfills\n this._transport.ready.then(() => {\n this._transport.createBidirectionalStream().then(stream => {\n const decoderStream = createPacketDecoderStream(Number.MAX_SAFE_INTEGER, this.socket.binaryType);\n const reader = stream.readable.pipeThrough(decoderStream).getReader();\n const encoderStream = createPacketEncoderStream();\n encoderStream.readable.pipeTo(stream.writable);\n this._writer = encoderStream.writable.getWriter();\n const read = () => {\n reader.read().then(({\n done,\n value\n }) => {\n if (done) {\n return;\n }\n this.onPacket(value);\n read();\n }).catch(err => {});\n };\n read();\n const packet = {\n type: \"open\"\n };\n if (this.query.sid) {\n packet.data = `{\"sid\":\"${this.query.sid}\"}`;\n }\n this._writer.write(packet).then(() => this.onOpen());\n });\n });\n }\n write(packets) {\n this.writable = false;\n for (let i = 0; i < packets.length; i++) {\n const packet = packets[i];\n const lastPacket = i === packets.length - 1;\n this._writer.write(packet).then(() => {\n if (lastPacket) {\n nextTick(() => {\n this.writable = true;\n this.emitReserved(\"drain\");\n }, this.setTimeoutFn);\n }\n });\n }\n }\n doClose() {\n var _a;\n (_a = this._transport) === null || _a === void 0 ? void 0 : _a.close();\n }\n}","import { XHR } from \"./polling-xhr.node.js\";\nimport { WS } from \"./websocket.node.js\";\nimport { WT } from \"./webtransport.js\";\nexport const transports = {\n websocket: WS,\n webtransport: WT,\n polling: XHR\n};","// imported from https://github.com/galkn/parseuri\n/**\n * Parses a URI\n *\n * Note: we could also have used the built-in URL object, but it isn't supported on all platforms.\n *\n * See:\n * - https://developer.mozilla.org/en-US/docs/Web/API/URL\n * - https://caniuse.com/url\n * - https://www.rfc-editor.org/rfc/rfc3986#appendix-B\n *\n * History of the parse() method:\n * - first commit: https://github.com/socketio/socket.io-client/commit/4ee1d5d94b3906a9c052b459f1a818b15f38f91c\n * - export into its own module: https://github.com/socketio/engine.io-client/commit/de2c561e4564efeb78f1bdb1ba39ef81b2822cb3\n * - reimport: https://github.com/socketio/engine.io-client/commit/df32277c3f6d622eec5ed09f493cae3f3391d242\n *\n * @author Steven Levithan (MIT license)\n * @api private\n */\nconst re = /^(?:(?![^:@\\/?#]+:[^:@\\/]*@)(http|https|ws|wss):\\/\\/)?((?:(([^:@\\/?#]*)(?::([^:@\\/?#]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/;\nconst parts = ['source', 'protocol', 'authority', 'userInfo', 'user', 'password', 'host', 'port', 'relative', 'path', 'directory', 'file', 'query', 'anchor'];\nexport function parse(str) {\n if (str.length > 8000) {\n throw \"URI too long\";\n }\n const src = str,\n b = str.indexOf('['),\n e = str.indexOf(']');\n if (b != -1 && e != -1) {\n str = str.substring(0, b) + str.substring(b, e).replace(/:/g, ';') + str.substring(e, str.length);\n }\n let m = re.exec(str || ''),\n uri = {},\n i = 14;\n while (i--) {\n uri[parts[i]] = m[i] || '';\n }\n if (b != -1 && e != -1) {\n uri.source = src;\n uri.host = uri.host.substring(1, uri.host.length - 1).replace(/;/g, ':');\n uri.authority = uri.authority.replace('[', '').replace(']', '').replace(/;/g, ':');\n uri.ipv6uri = true;\n }\n uri.pathNames = pathNames(uri, uri['path']);\n uri.queryKey = queryKey(uri, uri['query']);\n return uri;\n}\nfunction pathNames(obj, path) {\n const regx = /\\/{2,9}/g,\n names = path.replace(regx, \"/\").split(\"/\");\n if (path.slice(0, 1) == '/' || path.length === 0) {\n names.splice(0, 1);\n }\n if (path.slice(-1) == '/') {\n names.splice(names.length - 1, 1);\n }\n return names;\n}\nfunction queryKey(uri, query) {\n const data = {};\n query.replace(/(?:^|&)([^&=]*)=?([^&]*)/g, function ($0, $1, $2) {\n if ($1) {\n data[$1] = $2;\n }\n });\n return data;\n}","import { transports as DEFAULT_TRANSPORTS } from \"./transports/index.js\";\nimport { installTimerFunctions, byteLength } from \"./util.js\";\nimport { decode } from \"./contrib/parseqs.js\";\nimport { parse } from \"./contrib/parseuri.js\";\nimport { Emitter } from \"@socket.io/component-emitter\";\nimport { protocol } from \"engine.io-parser\";\nimport { createCookieJar, defaultBinaryType, nextTick } from \"./globals.node.js\";\nconst withEventListeners = typeof addEventListener === \"function\" && typeof removeEventListener === \"function\";\nconst OFFLINE_EVENT_LISTENERS = [];\nif (withEventListeners) {\n // within a ServiceWorker, any event handler for the 'offline' event must be added on the initial evaluation of the\n // script, so we create one single event listener here which will forward the event to the socket instances\n addEventListener(\"offline\", () => {\n OFFLINE_EVENT_LISTENERS.forEach(listener => listener());\n }, false);\n}\n/**\n * This class provides a WebSocket-like interface to connect to an Engine.IO server. The connection will be established\n * with one of the available low-level transports, like HTTP long-polling, WebSocket or WebTransport.\n *\n * This class comes without upgrade mechanism, which means that it will keep the first low-level transport that\n * successfully establishes the connection.\n *\n * In order to allow tree-shaking, there are no transports included, that's why the `transports` option is mandatory.\n *\n * @example\n * import { SocketWithoutUpgrade, WebSocket } from \"engine.io-client\";\n *\n * const socket = new SocketWithoutUpgrade({\n * transports: [WebSocket]\n * });\n *\n * socket.on(\"open\", () => {\n * socket.send(\"hello\");\n * });\n *\n * @see SocketWithUpgrade\n * @see Socket\n */\nexport let SocketWithoutUpgrade = /*#__PURE__*/(() => {\n class SocketWithoutUpgrade extends Emitter {\n /**\n * Socket constructor.\n *\n * @param {String|Object} uri - uri or options\n * @param {Object} opts - options\n */\n constructor(uri, opts) {\n super();\n this.binaryType = defaultBinaryType;\n this.writeBuffer = [];\n this._prevBufferLen = 0;\n this._pingInterval = -1;\n this._pingTimeout = -1;\n this._maxPayload = -1;\n /**\n * The expiration timestamp of the {@link _pingTimeoutTimer} object is tracked, in case the timer is throttled and the\n * callback is not fired on time. This can happen for example when a laptop is suspended or when a phone is locked.\n */\n this._pingTimeoutTime = Infinity;\n if (uri && \"object\" === typeof uri) {\n opts = uri;\n uri = null;\n }\n if (uri) {\n const parsedUri = parse(uri);\n opts.hostname = parsedUri.host;\n opts.secure = parsedUri.protocol === \"https\" || parsedUri.protocol === \"wss\";\n opts.port = parsedUri.port;\n if (parsedUri.query) opts.query = parsedUri.query;\n } else if (opts.host) {\n opts.hostname = parse(opts.host).host;\n }\n installTimerFunctions(this, opts);\n this.secure = null != opts.secure ? opts.secure : typeof location !== \"undefined\" && \"https:\" === location.protocol;\n if (opts.hostname && !opts.port) {\n // if no port is specified manually, use the protocol default\n opts.port = this.secure ? \"443\" : \"80\";\n }\n this.hostname = opts.hostname || (typeof location !== \"undefined\" ? location.hostname : \"localhost\");\n this.port = opts.port || (typeof location !== \"undefined\" && location.port ? location.port : this.secure ? \"443\" : \"80\");\n this.transports = [];\n this._transportsByName = {};\n opts.transports.forEach(t => {\n const transportName = t.prototype.name;\n this.transports.push(transportName);\n this._transportsByName[transportName] = t;\n });\n this.opts = Object.assign({\n path: \"/engine.io\",\n agent: false,\n withCredentials: false,\n upgrade: true,\n timestampParam: \"t\",\n rememberUpgrade: false,\n addTrailingSlash: true,\n rejectUnauthorized: true,\n perMessageDeflate: {\n threshold: 1024\n },\n transportOptions: {},\n closeOnBeforeunload: false\n }, opts);\n this.opts.path = this.opts.path.replace(/\\/$/, \"\") + (this.opts.addTrailingSlash ? \"/\" : \"\");\n if (typeof this.opts.query === \"string\") {\n this.opts.query = decode(this.opts.query);\n }\n if (withEventListeners) {\n if (this.opts.closeOnBeforeunload) {\n // Firefox closes the connection when the \"beforeunload\" event is emitted but not Chrome. This event listener\n // ensures every browser behaves the same (no \"disconnect\" event at the Socket.IO level when the page is\n // closed/reloaded)\n this._beforeunloadEventListener = () => {\n if (this.transport) {\n // silently close the transport\n this.transport.removeAllListeners();\n this.transport.close();\n }\n };\n addEventListener(\"beforeunload\", this._beforeunloadEventListener, false);\n }\n if (this.hostname !== \"localhost\") {\n this._offlineEventListener = () => {\n this._onClose(\"transport close\", {\n description: \"network connection lost\"\n });\n };\n OFFLINE_EVENT_LISTENERS.push(this._offlineEventListener);\n }\n }\n if (this.opts.withCredentials) {\n this._cookieJar = createCookieJar();\n }\n this._open();\n }\n /**\n * Creates transport of the given type.\n *\n * @param {String} name - transport name\n * @return {Transport}\n * @private\n */\n createTransport(name) {\n const query = Object.assign({}, this.opts.query);\n // append engine.io protocol identifier\n query.EIO = protocol;\n // transport name\n query.transport = name;\n // session id if we already have one\n if (this.id) query.sid = this.id;\n const opts = Object.assign({}, this.opts, {\n query,\n socket: this,\n hostname: this.hostname,\n secure: this.secure,\n port: this.port\n }, this.opts.transportOptions[name]);\n return new this._transportsByName[name](opts);\n }\n /**\n * Initializes transport to use and starts probe.\n *\n * @private\n */\n _open() {\n if (this.transports.length === 0) {\n // Emit error on next tick so it can be listened to\n this.setTimeoutFn(() => {\n this.emitReserved(\"error\", \"No transports available\");\n }, 0);\n return;\n }\n const transportName = this.opts.rememberUpgrade && SocketWithoutUpgrade.priorWebsocketSuccess && this.transports.indexOf(\"websocket\") !== -1 ? \"websocket\" : this.transports[0];\n this.readyState = \"opening\";\n const transport = this.createTransport(transportName);\n transport.open();\n this.setTransport(transport);\n }\n /**\n * Sets the current transport. Disables the existing one (if any).\n *\n * @private\n */\n setTransport(transport) {\n if (this.transport) {\n this.transport.removeAllListeners();\n }\n // set up transport\n this.transport = transport;\n // set up transport listeners\n transport.on(\"drain\", this._onDrain.bind(this)).on(\"packet\", this._onPacket.bind(this)).on(\"error\", this._onError.bind(this)).on(\"close\", reason => this._onClose(\"transport close\", reason));\n }\n /**\n * Called when connection is deemed open.\n *\n * @private\n */\n onOpen() {\n this.readyState = \"open\";\n SocketWithoutUpgrade.priorWebsocketSuccess = \"websocket\" === this.transport.name;\n this.emitReserved(\"open\");\n this.flush();\n }\n /**\n * Handles a packet.\n *\n * @private\n */\n _onPacket(packet) {\n if (\"opening\" === this.readyState || \"open\" === this.readyState || \"closing\" === this.readyState) {\n this.emitReserved(\"packet\", packet);\n // Socket is live - any packet counts\n this.emitReserved(\"heartbeat\");\n switch (packet.type) {\n case \"open\":\n this.onHandshake(JSON.parse(packet.data));\n break;\n case \"ping\":\n this._sendPacket(\"pong\");\n this.emitReserved(\"ping\");\n this.emitReserved(\"pong\");\n this._resetPingTimeout();\n break;\n case \"error\":\n const err = new Error(\"server error\");\n // @ts-ignore\n err.code = packet.data;\n this._onError(err);\n break;\n case \"message\":\n this.emitReserved(\"data\", packet.data);\n this.emitReserved(\"message\", packet.data);\n break;\n }\n } else {}\n }\n /**\n * Called upon handshake completion.\n *\n * @param {Object} data - handshake obj\n * @private\n */\n onHandshake(data) {\n this.emitReserved(\"handshake\", data);\n this.id = data.sid;\n this.transport.query.sid = data.sid;\n this._pingInterval = data.pingInterval;\n this._pingTimeout = data.pingTimeout;\n this._maxPayload = data.maxPayload;\n this.onOpen();\n // In case open handler closes socket\n if (\"closed\" === this.readyState) return;\n this._resetPingTimeout();\n }\n /**\n * Sets and resets ping timeout timer based on server pings.\n *\n * @private\n */\n _resetPingTimeout() {\n this.clearTimeoutFn(this._pingTimeoutTimer);\n const delay = this._pingInterval + this._pingTimeout;\n this._pingTimeoutTime = Date.now() + delay;\n this._pingTimeoutTimer = this.setTimeoutFn(() => {\n this._onClose(\"ping timeout\");\n }, delay);\n if (this.opts.autoUnref) {\n this._pingTimeoutTimer.unref();\n }\n }\n /**\n * Called on `drain` event\n *\n * @private\n */\n _onDrain() {\n this.writeBuffer.splice(0, this._prevBufferLen);\n // setting prevBufferLen = 0 is very important\n // for example, when upgrading, upgrade packet is sent over,\n // and a nonzero prevBufferLen could cause problems on `drain`\n this._prevBufferLen = 0;\n if (0 === this.writeBuffer.length) {\n this.emitReserved(\"drain\");\n } else {\n this.flush();\n }\n }\n /**\n * Flush write buffers.\n *\n * @private\n */\n flush() {\n if (\"closed\" !== this.readyState && this.transport.writable && !this.upgrading && this.writeBuffer.length) {\n const packets = this._getWritablePackets();\n this.transport.send(packets);\n // keep track of current length of writeBuffer\n // splice writeBuffer and callbackBuffer on `drain`\n this._prevBufferLen = packets.length;\n this.emitReserved(\"flush\");\n }\n }\n /**\n * Ensure the encoded size of the writeBuffer is below the maxPayload value sent by the server (only for HTTP\n * long-polling)\n *\n * @private\n */\n _getWritablePackets() {\n const shouldCheckPayloadSize = this._maxPayload && this.transport.name === \"polling\" && this.writeBuffer.length > 1;\n if (!shouldCheckPayloadSize) {\n return this.writeBuffer;\n }\n let payloadSize = 1; // first packet type\n for (let i = 0; i < this.writeBuffer.length; i++) {\n const data = this.writeBuffer[i].data;\n if (data) {\n payloadSize += byteLength(data);\n }\n if (i > 0 && payloadSize > this._maxPayload) {\n return this.writeBuffer.slice(0, i);\n }\n payloadSize += 2; // separator + packet type\n }\n return this.writeBuffer;\n }\n /**\n * Checks whether the heartbeat timer has expired but the socket has not yet been notified.\n *\n * Note: this method is private for now because it does not really fit the WebSocket API, but if we put it in the\n * `write()` method then the message would not be buffered by the Socket.IO client.\n *\n * @return {boolean}\n * @private\n */\n /* private */\n _hasPingExpired() {\n if (!this._pingTimeoutTime) return true;\n const hasExpired = Date.now() > this._pingTimeoutTime;\n if (hasExpired) {\n this._pingTimeoutTime = 0;\n nextTick(() => {\n this._onClose(\"ping timeout\");\n }, this.setTimeoutFn);\n }\n return hasExpired;\n }\n /**\n * Sends a message.\n *\n * @param {String} msg - message.\n * @param {Object} options.\n * @param {Function} fn - callback function.\n * @return {Socket} for chaining.\n */\n write(msg, options, fn) {\n this._sendPacket(\"message\", msg, options, fn);\n return this;\n }\n /**\n * Sends a message. Alias of {@link Socket#write}.\n *\n * @param {String} msg - message.\n * @param {Object} options.\n * @param {Function} fn - callback function.\n * @return {Socket} for chaining.\n */\n send(msg, options, fn) {\n this._sendPacket(\"message\", msg, options, fn);\n return this;\n }\n /**\n * Sends a packet.\n *\n * @param {String} type: packet type.\n * @param {String} data.\n * @param {Object} options.\n * @param {Function} fn - callback function.\n * @private\n */\n _sendPacket(type, data, options, fn) {\n if (\"function\" === typeof data) {\n fn = data;\n data = undefined;\n }\n if (\"function\" === typeof options) {\n fn = options;\n options = null;\n }\n if (\"closing\" === this.readyState || \"closed\" === this.readyState) {\n return;\n }\n options = options || {};\n options.compress = false !== options.compress;\n const packet = {\n type: type,\n data: data,\n options: options\n };\n this.emitReserved(\"packetCreate\", packet);\n this.writeBuffer.push(packet);\n if (fn) this.once(\"flush\", fn);\n this.flush();\n }\n /**\n * Closes the connection.\n */\n close() {\n const close = () => {\n this._onClose(\"forced close\");\n this.transport.close();\n };\n const cleanupAndClose = () => {\n this.off(\"upgrade\", cleanupAndClose);\n this.off(\"upgradeError\", cleanupAndClose);\n close();\n };\n const waitForUpgrade = () => {\n // wait for upgrade to finish since we can't send packets while pausing a transport\n this.once(\"upgrade\", cleanupAndClose);\n this.once(\"upgradeError\", cleanupAndClose);\n };\n if (\"opening\" === this.readyState || \"open\" === this.readyState) {\n this.readyState = \"closing\";\n if (this.writeBuffer.length) {\n this.once(\"drain\", () => {\n if (this.upgrading) {\n waitForUpgrade();\n } else {\n close();\n }\n });\n } else if (this.upgrading) {\n waitForUpgrade();\n } else {\n close();\n }\n }\n return this;\n }\n /**\n * Called upon transport error\n *\n * @private\n */\n _onError(err) {\n SocketWithoutUpgrade.priorWebsocketSuccess = false;\n if (this.opts.tryAllTransports && this.transports.length > 1 && this.readyState === \"opening\") {\n this.transports.shift();\n return this._open();\n }\n this.emitReserved(\"error\", err);\n this._onClose(\"transport error\", err);\n }\n /**\n * Called upon transport close.\n *\n * @private\n */\n _onClose(reason, description) {\n if (\"opening\" === this.readyState || \"open\" === this.readyState || \"closing\" === this.readyState) {\n // clear timers\n this.clearTimeoutFn(this._pingTimeoutTimer);\n // stop event from firing again for transport\n this.transport.removeAllListeners(\"close\");\n // ensure transport won't stay open\n this.transport.close();\n // ignore further transport communication\n this.transport.removeAllListeners();\n if (withEventListeners) {\n if (this._beforeunloadEventListener) {\n removeEventListener(\"beforeunload\", this._beforeunloadEventListener, false);\n }\n if (this._offlineEventListener) {\n const i = OFFLINE_EVENT_LISTENERS.indexOf(this._offlineEventListener);\n if (i !== -1) {\n OFFLINE_EVENT_LISTENERS.splice(i, 1);\n }\n }\n }\n // set ready state\n this.readyState = \"closed\";\n // clear session id\n this.id = null;\n // emit close event\n this.emitReserved(\"close\", reason, description);\n // clean buffers after, so users can still\n // grab the buffers on `close` event\n this.writeBuffer = [];\n this._prevBufferLen = 0;\n }\n }\n }\n SocketWithoutUpgrade.protocol = protocol;\n /**\n * This class provides a WebSocket-like interface to connect to an Engine.IO server. The connection will be established\n * with one of the available low-level transports, like HTTP long-polling, WebSocket or WebTransport.\n *\n * This class comes with an upgrade mechanism, which means that once the connection is established with the first\n * low-level transport, it will try to upgrade to a better transport.\n *\n * In order to allow tree-shaking, there are no transports included, that's why the `transports` option is mandatory.\n *\n * @example\n * import { SocketWithUpgrade, WebSocket } from \"engine.io-client\";\n *\n * const socket = new SocketWithUpgrade({\n * transports: [WebSocket]\n * });\n *\n * socket.on(\"open\", () => {\n * socket.send(\"hello\");\n * });\n *\n * @see SocketWithoutUpgrade\n * @see Socket\n */\n return SocketWithoutUpgrade;\n})();\nexport class SocketWithUpgrade extends SocketWithoutUpgrade {\n constructor() {\n super(...arguments);\n this._upgrades = [];\n }\n onOpen() {\n super.onOpen();\n if (\"open\" === this.readyState && this.opts.upgrade) {\n for (let i = 0; i < this._upgrades.length; i++) {\n this._probe(this._upgrades[i]);\n }\n }\n }\n /**\n * Probes a transport.\n *\n * @param {String} name - transport name\n * @private\n */\n _probe(name) {\n let transport = this.createTransport(name);\n let failed = false;\n SocketWithoutUpgrade.priorWebsocketSuccess = false;\n const onTransportOpen = () => {\n if (failed) return;\n transport.send([{\n type: \"ping\",\n data: \"probe\"\n }]);\n transport.once(\"packet\", msg => {\n if (failed) return;\n if (\"pong\" === msg.type && \"probe\" === msg.data) {\n this.upgrading = true;\n this.emitReserved(\"upgrading\", transport);\n if (!transport) return;\n SocketWithoutUpgrade.priorWebsocketSuccess = \"websocket\" === transport.name;\n this.transport.pause(() => {\n if (failed) return;\n if (\"closed\" === this.readyState) return;\n cleanup();\n this.setTransport(transport);\n transport.send([{\n type: \"upgrade\"\n }]);\n this.emitReserved(\"upgrade\", transport);\n transport = null;\n this.upgrading = false;\n this.flush();\n });\n } else {\n const err = new Error(\"probe error\");\n // @ts-ignore\n err.transport = transport.name;\n this.emitReserved(\"upgradeError\", err);\n }\n });\n };\n function freezeTransport() {\n if (failed) return;\n // Any callback called by transport should be ignored since now\n failed = true;\n cleanup();\n transport.close();\n transport = null;\n }\n // Handle any error that happens while probing\n const onerror = err => {\n const error = new Error(\"probe error: \" + err);\n // @ts-ignore\n error.transport = transport.name;\n freezeTransport();\n this.emitReserved(\"upgradeError\", error);\n };\n function onTransportClose() {\n onerror(\"transport closed\");\n }\n // When the socket is closed while we're probing\n function onclose() {\n onerror(\"socket closed\");\n }\n // When the socket is upgraded while we're probing\n function onupgrade(to) {\n if (transport && to.name !== transport.name) {\n freezeTransport();\n }\n }\n // Remove all listeners on the transport and on self\n const cleanup = () => {\n transport.removeListener(\"open\", onTransportOpen);\n transport.removeListener(\"error\", onerror);\n transport.removeListener(\"close\", onTransportClose);\n this.off(\"close\", onclose);\n this.off(\"upgrading\", onupgrade);\n };\n transport.once(\"open\", onTransportOpen);\n transport.once(\"error\", onerror);\n transport.once(\"close\", onTransportClose);\n this.once(\"close\", onclose);\n this.once(\"upgrading\", onupgrade);\n if (this._upgrades.indexOf(\"webtransport\") !== -1 && name !== \"webtransport\") {\n // favor WebTransport\n this.setTimeoutFn(() => {\n if (!failed) {\n transport.open();\n }\n }, 200);\n } else {\n transport.open();\n }\n }\n onHandshake(data) {\n this._upgrades = this._filterUpgrades(data.upgrades);\n super.onHandshake(data);\n }\n /**\n * Filters upgrades, returning only those matching client transports.\n *\n * @param {Array} upgrades - server upgrades\n * @private\n */\n _filterUpgrades(upgrades) {\n const filteredUpgrades = [];\n for (let i = 0; i < upgrades.length; i++) {\n if (~this.transports.indexOf(upgrades[i])) filteredUpgrades.push(upgrades[i]);\n }\n return filteredUpgrades;\n }\n}\n/**\n * This class provides a WebSocket-like interface to connect to an Engine.IO server. The connection will be established\n * with one of the available low-level transports, like HTTP long-polling, WebSocket or WebTransport.\n *\n * This class comes with an upgrade mechanism, which means that once the connection is established with the first\n * low-level transport, it will try to upgrade to a better transport.\n *\n * @example\n * import { Socket } from \"engine.io-client\";\n *\n * const socket = new Socket();\n *\n * socket.on(\"open\", () => {\n * socket.send(\"hello\");\n * });\n *\n * @see SocketWithoutUpgrade\n * @see SocketWithUpgrade\n */\nexport class Socket extends SocketWithUpgrade {\n constructor(uri, opts = {}) {\n const o = typeof uri === \"object\" ? uri : opts;\n if (!o.transports || o.transports && typeof o.transports[0] === \"string\") {\n o.transports = (o.transports || [\"polling\", \"websocket\", \"webtransport\"]).map(transportName => DEFAULT_TRANSPORTS[transportName]).filter(t => !!t);\n }\n super(uri, o);\n }\n}","import { Socket } from \"./socket.js\";\nexport { Socket };\nexport { SocketWithoutUpgrade, SocketWithUpgrade } from \"./socket.js\";\nexport const protocol = Socket.protocol;\nexport { Transport, TransportError } from \"./transport.js\";\nexport { transports } from \"./transports/index.js\";\nexport { installTimerFunctions } from \"./util.js\";\nexport { parse } from \"./contrib/parseuri.js\";\nexport { nextTick } from \"./globals.node.js\";\nexport { Fetch } from \"./transports/polling-fetch.js\";\nexport { XHR as NodeXHR } from \"./transports/polling-xhr.node.js\";\nexport { XHR } from \"./transports/polling-xhr.js\";\nexport { WS as NodeWebSocket } from \"./transports/websocket.node.js\";\nexport { WS as WebSocket } from \"./transports/websocket.js\";\nexport { WT as WebTransport } from \"./transports/webtransport.js\";","import { parse } from \"engine.io-client\";\n/**\n * URL parser.\n *\n * @param uri - url\n * @param path - the request path of the connection\n * @param loc - An object meant to mimic window.location.\n * Defaults to window.location.\n * @public\n */\nexport function url(uri, path = \"\", loc) {\n let obj = uri;\n // default to window.location\n loc = loc || typeof location !== \"undefined\" && location;\n if (null == uri) uri = loc.protocol + \"//\" + loc.host;\n // relative path support\n if (typeof uri === \"string\") {\n if (\"/\" === uri.charAt(0)) {\n if (\"/\" === uri.charAt(1)) {\n uri = loc.protocol + uri;\n } else {\n uri = loc.host + uri;\n }\n }\n if (!/^(https?|wss?):\\/\\//.test(uri)) {\n if (\"undefined\" !== typeof loc) {\n uri = loc.protocol + \"//\" + uri;\n } else {\n uri = \"https://\" + uri;\n }\n }\n // parse\n obj = parse(uri);\n }\n // make sure we treat `localhost:80` and `localhost` equally\n if (!obj.port) {\n if (/^(http|ws)$/.test(obj.protocol)) {\n obj.port = \"80\";\n } else if (/^(http|ws)s$/.test(obj.protocol)) {\n obj.port = \"443\";\n }\n }\n obj.path = obj.path || \"/\";\n const ipv6 = obj.host.indexOf(\":\") !== -1;\n const host = ipv6 ? \"[\" + obj.host + \"]\" : obj.host;\n // define unique id\n obj.id = obj.protocol + \"://\" + host + \":\" + obj.port + path;\n // define href\n obj.href = obj.protocol + \"://\" + host + (loc && loc.port === obj.port ? \"\" : \":\" + obj.port);\n return obj;\n}","import { Emitter } from \"@socket.io/component-emitter\";\nimport { deconstructPacket, reconstructPacket } from \"./binary.js\";\nimport { isBinary, hasBinary } from \"./is-binary.js\";\n/**\n * These strings must not be used as event names, as they have a special meaning.\n */\nconst RESERVED_EVENTS = [\"connect\",\n// used on the client side\n\"connect_error\",\n// used on the client side\n\"disconnect\",\n// used on both sides\n\"disconnecting\",\n// used on the server side\n\"newListener\",\n// used by the Node.js EventEmitter\n\"removeListener\" // used by the Node.js EventEmitter\n];\n/**\n * Protocol version.\n *\n * @public\n */\nexport const protocol = 5;\nexport var PacketType = /*#__PURE__*/function (PacketType) {\n PacketType[PacketType[\"CONNECT\"] = 0] = \"CONNECT\";\n PacketType[PacketType[\"DISCONNECT\"] = 1] = \"DISCONNECT\";\n PacketType[PacketType[\"EVENT\"] = 2] = \"EVENT\";\n PacketType[PacketType[\"ACK\"] = 3] = \"ACK\";\n PacketType[PacketType[\"CONNECT_ERROR\"] = 4] = \"CONNECT_ERROR\";\n PacketType[PacketType[\"BINARY_EVENT\"] = 5] = \"BINARY_EVENT\";\n PacketType[PacketType[\"BINARY_ACK\"] = 6] = \"BINARY_ACK\";\n return PacketType;\n}(PacketType || {});\n/**\n * A socket.io Encoder instance\n */\nexport class Encoder {\n /**\n * Encoder constructor\n *\n * @param {function} replacer - custom replacer to pass down to JSON.parse\n */\n constructor(replacer) {\n this.replacer = replacer;\n }\n /**\n * Encode a packet as a single string if non-binary, or as a\n * buffer sequence, depending on packet type.\n *\n * @param {Object} obj - packet object\n */\n encode(obj) {\n if (obj.type === PacketType.EVENT || obj.type === PacketType.ACK) {\n if (hasBinary(obj)) {\n return this.encodeAsBinary({\n type: obj.type === PacketType.EVENT ? PacketType.BINARY_EVENT : PacketType.BINARY_ACK,\n nsp: obj.nsp,\n data: obj.data,\n id: obj.id\n });\n }\n }\n return [this.encodeAsString(obj)];\n }\n /**\n * Encode packet as string.\n */\n encodeAsString(obj) {\n // first is type\n let str = \"\" + obj.type;\n // attachments if we have them\n if (obj.type === PacketType.BINARY_EVENT || obj.type === PacketType.BINARY_ACK) {\n str += obj.attachments + \"-\";\n }\n // if we have a namespace other than `/`\n // we append it followed by a comma `,`\n if (obj.nsp && \"/\" !== obj.nsp) {\n str += obj.nsp + \",\";\n }\n // immediately followed by the id\n if (null != obj.id) {\n str += obj.id;\n }\n // json data\n if (null != obj.data) {\n str += JSON.stringify(obj.data, this.replacer);\n }\n return str;\n }\n /**\n * Encode packet as 'buffer sequence' by removing blobs, and\n * deconstructing packet into object with placeholders and\n * a list of buffers.\n */\n encodeAsBinary(obj) {\n const deconstruction = deconstructPacket(obj);\n const pack = this.encodeAsString(deconstruction.packet);\n const buffers = deconstruction.buffers;\n buffers.unshift(pack); // add packet info to beginning of data list\n return buffers; // write all the buffers\n }\n}\n/**\n * A socket.io Decoder instance\n *\n * @return {Object} decoder\n */\nexport class Decoder extends Emitter {\n /**\n * Decoder constructor\n */\n constructor(opts) {\n super();\n this.opts = Object.assign({\n reviver: undefined,\n maxAttachments: 10\n }, typeof opts === \"function\" ? {\n reviver: opts\n } : opts);\n }\n /**\n * Decodes an encoded packet string into packet JSON.\n *\n * @param {String} obj - encoded packet\n */\n add(obj) {\n let packet;\n if (typeof obj === \"string\") {\n if (this.reconstructor) {\n throw new Error(\"got plaintext data when reconstructing a packet\");\n }\n packet = this.decodeString(obj);\n const isBinaryEvent = packet.type === PacketType.BINARY_EVENT;\n if (isBinaryEvent || packet.type === PacketType.BINARY_ACK) {\n packet.type = isBinaryEvent ? PacketType.EVENT : PacketType.ACK;\n // binary packet's json\n this.reconstructor = new BinaryReconstructor(packet);\n // no attachments, labeled binary but no binary data to follow\n if (packet.attachments === 0) {\n super.emitReserved(\"decoded\", packet);\n }\n } else {\n // non-binary full packet\n super.emitReserved(\"decoded\", packet);\n }\n } else if (isBinary(obj) || obj.base64) {\n // raw binary data\n if (!this.reconstructor) {\n throw new Error(\"got binary data when not reconstructing a packet\");\n } else {\n packet = this.reconstructor.takeBinaryData(obj);\n if (packet) {\n // received final buffer\n this.reconstructor = null;\n super.emitReserved(\"decoded\", packet);\n }\n }\n } else {\n throw new Error(\"Unknown type: \" + obj);\n }\n }\n /**\n * Decode a packet String (JSON data)\n *\n * @param {String} str\n * @return {Object} packet\n */\n decodeString(str) {\n let i = 0;\n // look up type\n const p = {\n type: Number(str.charAt(0))\n };\n if (PacketType[p.type] === undefined) {\n throw new Error(\"unknown packet type \" + p.type);\n }\n // look up attachments if type binary\n if (p.type === PacketType.BINARY_EVENT || p.type === PacketType.BINARY_ACK) {\n const start = i + 1;\n while (str.charAt(++i) !== \"-\" && i != str.length) {}\n const buf = str.substring(start, i);\n if (buf != Number(buf) || str.charAt(i) !== \"-\") {\n throw new Error(\"Illegal attachments\");\n }\n const n = Number(buf);\n if (!isInteger(n) || n < 0) {\n throw new Error(\"Illegal attachments\");\n } else if (n > this.opts.maxAttachments) {\n throw new Error(\"too many attachments\");\n }\n p.attachments = n;\n }\n // look up namespace (if any)\n if (\"/\" === str.charAt(i + 1)) {\n const start = i + 1;\n while (++i) {\n const c = str.charAt(i);\n if (\",\" === c) break;\n if (i === str.length) break;\n }\n p.nsp = str.substring(start, i);\n } else {\n p.nsp = \"/\";\n }\n // look up id\n const next = str.charAt(i + 1);\n if (\"\" !== next && Number(next) == next) {\n const start = i + 1;\n while (++i) {\n const c = str.charAt(i);\n if (null == c || Number(c) != c) {\n --i;\n break;\n }\n if (i === str.length) break;\n }\n p.id = Number(str.substring(start, i + 1));\n }\n // look up json data\n if (str.charAt(++i)) {\n const payload = this.tryParse(str.substr(i));\n if (Decoder.isPayloadValid(p.type, payload)) {\n p.data = payload;\n } else {\n throw new Error(\"invalid payload\");\n }\n }\n return p;\n }\n tryParse(str) {\n try {\n return JSON.parse(str, this.opts.reviver);\n } catch (e) {\n return false;\n }\n }\n static isPayloadValid(type, payload) {\n switch (type) {\n case PacketType.CONNECT:\n return isObject(payload);\n case PacketType.DISCONNECT:\n return payload === undefined;\n case PacketType.CONNECT_ERROR:\n return typeof payload === \"string\" || isObject(payload);\n case PacketType.EVENT:\n case PacketType.BINARY_EVENT:\n return Array.isArray(payload) && (typeof payload[0] === \"number\" || typeof payload[0] === \"string\" && RESERVED_EVENTS.indexOf(payload[0]) === -1);\n case PacketType.ACK:\n case PacketType.BINARY_ACK:\n return Array.isArray(payload);\n }\n }\n /**\n * Deallocates a parser's resources\n */\n destroy() {\n if (this.reconstructor) {\n this.reconstructor.finishedReconstruction();\n this.reconstructor = null;\n }\n }\n}\n/**\n * A manager of a binary event's 'buffer sequence'. Should\n * be constructed whenever a packet of type BINARY_EVENT is\n * decoded.\n *\n * @param {Object} packet\n * @return {BinaryReconstructor} initialized reconstructor\n */\nclass BinaryReconstructor {\n constructor(packet) {\n this.packet = packet;\n this.buffers = [];\n this.reconPack = packet;\n }\n /**\n * Method to be called when binary data received from connection\n * after a BINARY_EVENT packet.\n *\n * @param {Buffer | ArrayBuffer} binData - the raw binary data received\n * @return {null | Object} returns null if more binary data is expected or\n * a reconstructed packet object if all buffers have been received.\n */\n takeBinaryData(binData) {\n this.buffers.push(binData);\n if (this.buffers.length === this.reconPack.attachments) {\n // done with buffer list\n const packet = reconstructPacket(this.reconPack, this.buffers);\n this.finishedReconstruction();\n return packet;\n }\n return null;\n }\n /**\n * Cleans up binary packet reconstruction variables.\n */\n finishedReconstruction() {\n this.reconPack = null;\n this.buffers = [];\n }\n}\nfunction isNamespaceValid(nsp) {\n return typeof nsp === \"string\";\n}\n// see https://caniuse.com/mdn-javascript_builtins_number_isinteger\nconst isInteger = Number.isInteger || function (value) {\n return typeof value === \"number\" && isFinite(value) && Math.floor(value) === value;\n};\nfunction isAckIdValid(id) {\n return id === undefined || isInteger(id);\n}\n// see https://stackoverflow.com/questions/8511281/check-if-a-value-is-an-object-in-javascript\nfunction isObject(value) {\n return Object.prototype.toString.call(value) === \"[object Object]\";\n}\nfunction isDataValid(type, payload) {\n switch (type) {\n case PacketType.CONNECT:\n return payload === undefined || isObject(payload);\n case PacketType.DISCONNECT:\n return payload === undefined;\n case PacketType.EVENT:\n return Array.isArray(payload) && (typeof payload[0] === \"number\" || typeof payload[0] === \"string\" && RESERVED_EVENTS.indexOf(payload[0]) === -1);\n case PacketType.ACK:\n return Array.isArray(payload);\n case PacketType.CONNECT_ERROR:\n return typeof payload === \"string\" || isObject(payload);\n default:\n return false;\n }\n}\nexport function isPacketValid(packet) {\n return isNamespaceValid(packet.nsp) && isAckIdValid(packet.id) && isDataValid(packet.type, packet.data);\n}","const withNativeArrayBuffer = typeof ArrayBuffer === \"function\";\nconst isView = obj => {\n return typeof ArrayBuffer.isView === \"function\" ? ArrayBuffer.isView(obj) : obj.buffer instanceof ArrayBuffer;\n};\nconst toString = Object.prototype.toString;\nconst withNativeBlob = typeof Blob === \"function\" || typeof Blob !== \"undefined\" && toString.call(Blob) === \"[object BlobConstructor]\";\nconst withNativeFile = typeof File === \"function\" || typeof File !== \"undefined\" && toString.call(File) === \"[object FileConstructor]\";\n/**\n * Returns true if obj is a Buffer, an ArrayBuffer, a Blob or a File.\n *\n * @private\n */\nexport function isBinary(obj) {\n return withNativeArrayBuffer && (obj instanceof ArrayBuffer || isView(obj)) || withNativeBlob && obj instanceof Blob || withNativeFile && obj instanceof File;\n}\nexport function hasBinary(obj, toJSON) {\n if (!obj || typeof obj !== \"object\") {\n return false;\n }\n if (Array.isArray(obj)) {\n for (let i = 0, l = obj.length; i < l; i++) {\n if (hasBinary(obj[i])) {\n return true;\n }\n }\n return false;\n }\n if (isBinary(obj)) {\n return true;\n }\n if (obj.toJSON && typeof obj.toJSON === \"function\" && arguments.length === 1) {\n return hasBinary(obj.toJSON(), true);\n }\n for (const key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key) && hasBinary(obj[key])) {\n return true;\n }\n }\n return false;\n}","import { isBinary } from \"./is-binary.js\";\n/**\n * Replaces every Buffer | ArrayBuffer | Blob | File in packet with a numbered placeholder.\n *\n * @param {Object} packet - socket.io event packet\n * @return {Object} with deconstructed packet and list of buffers\n * @public\n */\nexport function deconstructPacket(packet) {\n const buffers = [];\n const packetData = packet.data;\n const pack = packet;\n pack.data = _deconstructPacket(packetData, buffers);\n pack.attachments = buffers.length; // number of binary 'attachments'\n return {\n packet: pack,\n buffers: buffers\n };\n}\nfunction _deconstructPacket(data, buffers) {\n if (!data) return data;\n if (isBinary(data)) {\n const placeholder = {\n _placeholder: true,\n num: buffers.length\n };\n buffers.push(data);\n return placeholder;\n } else if (Array.isArray(data)) {\n const newData = new Array(data.length);\n for (let i = 0; i < data.length; i++) {\n newData[i] = _deconstructPacket(data[i], buffers);\n }\n return newData;\n } else if (typeof data === \"object\" && !(data instanceof Date)) {\n const newData = {};\n for (const key in data) {\n if (Object.prototype.hasOwnProperty.call(data, key)) {\n newData[key] = _deconstructPacket(data[key], buffers);\n }\n }\n return newData;\n }\n return data;\n}\n/**\n * Reconstructs a binary packet from its placeholder packet and buffers\n *\n * @param {Object} packet - event packet with placeholders\n * @param {Array} buffers - binary buffers to put in placeholder positions\n * @return {Object} reconstructed packet\n * @public\n */\nexport function reconstructPacket(packet, buffers) {\n packet.data = _reconstructPacket(packet.data, buffers);\n delete packet.attachments; // no longer useful\n return packet;\n}\nfunction _reconstructPacket(data, buffers) {\n if (!data) return data;\n if (data && data._placeholder === true) {\n const isIndexValid = typeof data.num === \"number\" && data.num >= 0 && data.num < buffers.length;\n if (isIndexValid) {\n return buffers[data.num]; // appropriate buffer (should be natural order anyway)\n } else {\n throw new Error(\"illegal attachments\");\n }\n } else if (Array.isArray(data)) {\n for (let i = 0; i < data.length; i++) {\n data[i] = _reconstructPacket(data[i], buffers);\n }\n } else if (typeof data === \"object\") {\n for (const key in data) {\n if (Object.prototype.hasOwnProperty.call(data, key)) {\n data[key] = _reconstructPacket(data[key], buffers);\n }\n }\n }\n return data;\n}","export function on(obj, ev, fn) {\n obj.on(ev, fn);\n return function subDestroy() {\n obj.off(ev, fn);\n };\n}","import { PacketType } from \"socket.io-parser\";\nimport { on } from \"./on.js\";\nimport { Emitter } from \"@socket.io/component-emitter\";\n/**\n * Internal events.\n * These events can't be emitted by the user.\n */\nconst RESERVED_EVENTS = Object.freeze({\n connect: 1,\n connect_error: 1,\n disconnect: 1,\n disconnecting: 1,\n // EventEmitter reserved events: https://nodejs.org/api/events.html#events_event_newlistener\n newListener: 1,\n removeListener: 1\n});\n/**\n * A Socket is the fundamental class for interacting with the server.\n *\n * A Socket belongs to a certain Namespace (by default /) and uses an underlying {@link Manager} to communicate.\n *\n * @example\n * const socket = io();\n *\n * socket.on(\"connect\", () => {\n * console.log(\"connected\");\n * });\n *\n * // send an event to the server\n * socket.emit(\"foo\", \"bar\");\n *\n * socket.on(\"foobar\", () => {\n * // an event was received from the server\n * });\n *\n * // upon disconnection\n * socket.on(\"disconnect\", (reason) => {\n * console.log(`disconnected due to ${reason}`);\n * });\n */\nexport class Socket extends Emitter {\n /**\n * `Socket` constructor.\n */\n constructor(io, nsp, opts) {\n super();\n /**\n * Whether the socket is currently connected to the server.\n *\n * @example\n * const socket = io();\n *\n * socket.on(\"connect\", () => {\n * console.log(socket.connected); // true\n * });\n *\n * socket.on(\"disconnect\", () => {\n * console.log(socket.connected); // false\n * });\n */\n this.connected = false;\n /**\n * Whether the connection state was recovered after a temporary disconnection. In that case, any missed packets will\n * be transmitted by the server.\n */\n this.recovered = false;\n /**\n * Buffer for packets received before the CONNECT packet\n */\n this.receiveBuffer = [];\n /**\n * Buffer for packets that will be sent once the socket is connected\n */\n this.sendBuffer = [];\n /**\n * The queue of packets to be sent with retry in case of failure.\n *\n * Packets are sent one by one, each waiting for the server acknowledgement, in order to guarantee the delivery order.\n * @private\n */\n this._queue = [];\n /**\n * A sequence to generate the ID of the {@link QueuedPacket}.\n * @private\n */\n this._queueSeq = 0;\n this.ids = 0;\n /**\n * A map containing acknowledgement handlers.\n *\n * The `withError` attribute is used to differentiate handlers that accept an error as first argument:\n *\n * - `socket.emit(\"test\", (err, value) => { ... })` with `ackTimeout` option\n * - `socket.timeout(5000).emit(\"test\", (err, value) => { ... })`\n * - `const value = await socket.emitWithAck(\"test\")`\n *\n * From those that don't:\n *\n * - `socket.emit(\"test\", (value) => { ... });`\n *\n * In the first case, the handlers will be called with an error when:\n *\n * - the timeout is reached\n * - the socket gets disconnected\n *\n * In the second case, the handlers will be simply discarded upon disconnection, since the client will never receive\n * an acknowledgement from the server.\n *\n * @private\n */\n this.acks = {};\n this.flags = {};\n this.io = io;\n this.nsp = nsp;\n if (opts && opts.auth) {\n this.auth = opts.auth;\n }\n this._opts = Object.assign({}, opts);\n if (this.io._autoConnect) this.open();\n }\n /**\n * Whether the socket is currently disconnected\n *\n * @example\n * const socket = io();\n *\n * socket.on(\"connect\", () => {\n * console.log(socket.disconnected); // false\n * });\n *\n * socket.on(\"disconnect\", () => {\n * console.log(socket.disconnected); // true\n * });\n */\n get disconnected() {\n return !this.connected;\n }\n /**\n * Subscribe to open, close and packet events\n *\n * @private\n */\n subEvents() {\n if (this.subs) return;\n const io = this.io;\n this.subs = [on(io, \"open\", this.onopen.bind(this)), on(io, \"packet\", this.onpacket.bind(this)), on(io, \"error\", this.onerror.bind(this)), on(io, \"close\", this.onclose.bind(this))];\n }\n /**\n * Whether the Socket will try to reconnect when its Manager connects or reconnects.\n *\n * @example\n * const socket = io();\n *\n * console.log(socket.active); // true\n *\n * socket.on(\"disconnect\", (reason) => {\n * if (reason === \"io server disconnect\") {\n * // the disconnection was initiated by the server, you need to manually reconnect\n * console.log(socket.active); // false\n * }\n * // else the socket will automatically try to reconnect\n * console.log(socket.active); // true\n * });\n */\n get active() {\n return !!this.subs;\n }\n /**\n * \"Opens\" the socket.\n *\n * @example\n * const socket = io({\n * autoConnect: false\n * });\n *\n * socket.connect();\n */\n connect() {\n if (this.connected) return this;\n this.subEvents();\n if (!this.io[\"_reconnecting\"]) this.io.open(); // ensure open\n if (\"open\" === this.io._readyState) this.onopen();\n return this;\n }\n /**\n * Alias for {@link connect()}.\n */\n open() {\n return this.connect();\n }\n /**\n * Sends a `message` event.\n *\n * This method mimics the WebSocket.send() method.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket/send\n *\n * @example\n * socket.send(\"hello\");\n *\n * // this is equivalent to\n * socket.emit(\"message\", \"hello\");\n *\n * @return self\n */\n send(...args) {\n args.unshift(\"message\");\n this.emit.apply(this, args);\n return this;\n }\n /**\n * Override `emit`.\n * If the event is in `events`, it's emitted normally.\n *\n * @example\n * socket.emit(\"hello\", \"world\");\n *\n * // all serializable datastructures are supported (no need to call JSON.stringify)\n * socket.emit(\"hello\", 1, \"2\", { 3: [\"4\"], 5: Uint8Array.from([6]) });\n *\n * // with an acknowledgement from the server\n * socket.emit(\"hello\", \"world\", (val) => {\n * // ...\n * });\n *\n * @return self\n */\n emit(ev, ...args) {\n var _a, _b, _c;\n if (RESERVED_EVENTS.hasOwnProperty(ev)) {\n throw new Error('\"' + ev.toString() + '\" is a reserved event name');\n }\n args.unshift(ev);\n if (this._opts.retries && !this.flags.fromQueue && !this.flags.volatile) {\n this._addToQueue(args);\n return this;\n }\n const packet = {\n type: PacketType.EVENT,\n data: args\n };\n packet.options = {};\n packet.options.compress = this.flags.compress !== false;\n // event ack callback\n if (\"function\" === typeof args[args.length - 1]) {\n const id = this.ids++;\n const ack = args.pop();\n this._registerAckCallback(id, ack);\n packet.id = id;\n }\n const isTransportWritable = (_b = (_a = this.io.engine) === null || _a === void 0 ? void 0 : _a.transport) === null || _b === void 0 ? void 0 : _b.writable;\n const isConnected = this.connected && !((_c = this.io.engine) === null || _c === void 0 ? void 0 : _c._hasPingExpired());\n const discardPacket = this.flags.volatile && !isTransportWritable;\n if (discardPacket) {} else if (isConnected) {\n this.notifyOutgoingListeners(packet);\n this.packet(packet);\n } else {\n this.sendBuffer.push(packet);\n }\n this.flags = {};\n return this;\n }\n /**\n * @private\n */\n _registerAckCallback(id, ack) {\n var _a;\n const timeout = (_a = this.flags.timeout) !== null && _a !== void 0 ? _a : this._opts.ackTimeout;\n if (timeout === undefined) {\n this.acks[id] = ack;\n return;\n }\n // @ts-ignore\n const timer = this.io.setTimeoutFn(() => {\n delete this.acks[id];\n for (let i = 0; i < this.sendBuffer.length; i++) {\n if (this.sendBuffer[i].id === id) {\n this.sendBuffer.splice(i, 1);\n }\n }\n ack.call(this, new Error(\"operation has timed out\"));\n }, timeout);\n const fn = (...args) => {\n // @ts-ignore\n this.io.clearTimeoutFn(timer);\n ack.apply(this, args);\n };\n fn.withError = true;\n this.acks[id] = fn;\n }\n /**\n * Emits an event and waits for an acknowledgement\n *\n * @example\n * // without timeout\n * const response = await socket.emitWithAck(\"hello\", \"world\");\n *\n * // with a specific timeout\n * try {\n * const response = await socket.timeout(1000).emitWithAck(\"hello\", \"world\");\n * } catch (err) {\n * // the server did not acknowledge the event in the given delay\n * }\n *\n * @return a Promise that will be fulfilled when the server acknowledges the event\n */\n emitWithAck(ev, ...args) {\n return new Promise((resolve, reject) => {\n const fn = (arg1, arg2) => {\n return arg1 ? reject(arg1) : resolve(arg2);\n };\n fn.withError = true;\n args.push(fn);\n this.emit(ev, ...args);\n });\n }\n /**\n * Add the packet to the queue.\n * @param args\n * @private\n */\n _addToQueue(args) {\n let ack;\n if (typeof args[args.length - 1] === \"function\") {\n ack = args.pop();\n }\n const packet = {\n id: this._queueSeq++,\n tryCount: 0,\n pending: false,\n args,\n flags: Object.assign({\n fromQueue: true\n }, this.flags)\n };\n args.push((err, ...responseArgs) => {\n if (packet !== this._queue[0]) {}\n const hasError = err !== null;\n if (hasError) {\n if (packet.tryCount > this._opts.retries) {\n this._queue.shift();\n if (ack) {\n ack(err);\n }\n }\n } else {\n this._queue.shift();\n if (ack) {\n ack(null, ...responseArgs);\n }\n }\n packet.pending = false;\n return this._drainQueue();\n });\n this._queue.push(packet);\n this._drainQueue();\n }\n /**\n * Send the first packet of the queue, and wait for an acknowledgement from the server.\n * @param force - whether to resend a packet that has not been acknowledged yet\n *\n * @private\n */\n _drainQueue(force = false) {\n if (!this.connected || this._queue.length === 0) {\n return;\n }\n const packet = this._queue[0];\n if (packet.pending && !force) {\n return;\n }\n packet.pending = true;\n packet.tryCount++;\n this.flags = packet.flags;\n this.emit.apply(this, packet.args);\n }\n /**\n * Sends a packet.\n *\n * @param packet\n * @private\n */\n packet(packet) {\n packet.nsp = this.nsp;\n this.io._packet(packet);\n }\n /**\n * Called upon engine `open`.\n *\n * @private\n */\n onopen() {\n if (typeof this.auth == \"function\") {\n this.auth(data => {\n this._sendConnectPacket(data);\n });\n } else {\n this._sendConnectPacket(this.auth);\n }\n }\n /**\n * Sends a CONNECT packet to initiate the Socket.IO session.\n *\n * @param data\n * @private\n */\n _sendConnectPacket(data) {\n this.packet({\n type: PacketType.CONNECT,\n data: this._pid ? Object.assign({\n pid: this._pid,\n offset: this._lastOffset\n }, data) : data\n });\n }\n /**\n * Called upon engine or manager `error`.\n *\n * @param err\n * @private\n */\n onerror(err) {\n if (!this.connected) {\n this.emitReserved(\"connect_error\", err);\n }\n }\n /**\n * Called upon engine `close`.\n *\n * @param reason\n * @param description\n * @private\n */\n onclose(reason, description) {\n this.connected = false;\n delete this.id;\n this.emitReserved(\"disconnect\", reason, description);\n this._clearAcks();\n }\n /**\n * Clears the acknowledgement handlers upon disconnection, since the client will never receive an acknowledgement from\n * the server.\n *\n * @private\n */\n _clearAcks() {\n Object.keys(this.acks).forEach(id => {\n const isBuffered = this.sendBuffer.some(packet => String(packet.id) === id);\n if (!isBuffered) {\n // note: handlers that do not accept an error as first argument are ignored here\n const ack = this.acks[id];\n delete this.acks[id];\n if (ack.withError) {\n ack.call(this, new Error(\"socket has been disconnected\"));\n }\n }\n });\n }\n /**\n * Called with socket packet.\n *\n * @param packet\n * @private\n */\n onpacket(packet) {\n const sameNamespace = packet.nsp === this.nsp;\n if (!sameNamespace) return;\n switch (packet.type) {\n case PacketType.CONNECT:\n if (packet.data && packet.data.sid) {\n this.onconnect(packet.data.sid, packet.data.pid);\n } else {\n this.emitReserved(\"connect_error\", new Error(\"It seems you are trying to reach a Socket.IO server in v2.x with a v3.x client, but they are not compatible (more information here: https://socket.io/docs/v3/migrating-from-2-x-to-3-0/)\"));\n }\n break;\n case PacketType.EVENT:\n case PacketType.BINARY_EVENT:\n this.onevent(packet);\n break;\n case PacketType.ACK:\n case PacketType.BINARY_ACK:\n this.onack(packet);\n break;\n case PacketType.DISCONNECT:\n this.ondisconnect();\n break;\n case PacketType.CONNECT_ERROR:\n this.destroy();\n const err = new Error(packet.data.message);\n // @ts-ignore\n err.data = packet.data.data;\n this.emitReserved(\"connect_error\", err);\n break;\n }\n }\n /**\n * Called upon a server event.\n *\n * @param packet\n * @private\n */\n onevent(packet) {\n const args = packet.data || [];\n if (null != packet.id) {\n args.push(this.ack(packet.id));\n }\n if (this.connected) {\n this.emitEvent(args);\n } else {\n this.receiveBuffer.push(Object.freeze(args));\n }\n }\n emitEvent(args) {\n if (this._anyListeners && this._anyListeners.length) {\n const listeners = this._anyListeners.slice();\n for (const listener of listeners) {\n listener.apply(this, args);\n }\n }\n super.emit.apply(this, args);\n if (this._pid && args.length && typeof args[args.length - 1] === \"string\") {\n this._lastOffset = args[args.length - 1];\n }\n }\n /**\n * Produces an ack callback to emit with an event.\n *\n * @private\n */\n ack(id) {\n const self = this;\n let sent = false;\n return function (...args) {\n // prevent double callbacks\n if (sent) return;\n sent = true;\n self.packet({\n type: PacketType.ACK,\n id: id,\n data: args\n });\n };\n }\n /**\n * Called upon a server acknowledgement.\n *\n * @param packet\n * @private\n */\n onack(packet) {\n const ack = this.acks[packet.id];\n if (typeof ack !== \"function\") {\n return;\n }\n delete this.acks[packet.id];\n // @ts-ignore FIXME ack is incorrectly inferred as 'never'\n if (ack.withError) {\n packet.data.unshift(null);\n }\n // @ts-ignore\n ack.apply(this, packet.data);\n }\n /**\n * Called upon server connect.\n *\n * @private\n */\n onconnect(id, pid) {\n this.id = id;\n this.recovered = pid && this._pid === pid;\n this._pid = pid; // defined only if connection state recovery is enabled\n this.connected = true;\n this.emitBuffered();\n this._drainQueue(true);\n this.emitReserved(\"connect\");\n }\n /**\n * Emit buffered events (received and emitted).\n *\n * @private\n */\n emitBuffered() {\n this.receiveBuffer.forEach(args => this.emitEvent(args));\n this.receiveBuffer = [];\n this.sendBuffer.forEach(packet => {\n this.notifyOutgoingListeners(packet);\n this.packet(packet);\n });\n this.sendBuffer = [];\n }\n /**\n * Called upon server disconnect.\n *\n * @private\n */\n ondisconnect() {\n this.destroy();\n this.onclose(\"io server disconnect\");\n }\n /**\n * Called upon forced client/server side disconnections,\n * this method ensures the manager stops tracking us and\n * that reconnections don't get triggered for this.\n *\n * @private\n */\n destroy() {\n if (this.subs) {\n // clean subscriptions to avoid reconnections\n this.subs.forEach(subDestroy => subDestroy());\n this.subs = undefined;\n }\n this.io[\"_destroy\"](this);\n }\n /**\n * Disconnects the socket manually. In that case, the socket will not try to reconnect.\n *\n * If this is the last active Socket instance of the {@link Manager}, the low-level connection will be closed.\n *\n * @example\n * const socket = io();\n *\n * socket.on(\"disconnect\", (reason) => {\n * // console.log(reason); prints \"io client disconnect\"\n * });\n *\n * socket.disconnect();\n *\n * @return self\n */\n disconnect() {\n if (this.connected) {\n this.packet({\n type: PacketType.DISCONNECT\n });\n }\n // remove socket from pool\n this.destroy();\n if (this.connected) {\n // fire events\n this.onclose(\"io client disconnect\");\n }\n return this;\n }\n /**\n * Alias for {@link disconnect()}.\n *\n * @return self\n */\n close() {\n return this.disconnect();\n }\n /**\n * Sets the compress flag.\n *\n * @example\n * socket.compress(false).emit(\"hello\");\n *\n * @param compress - if `true`, compresses the sending data\n * @return self\n */\n compress(compress) {\n this.flags.compress = compress;\n return this;\n }\n /**\n * Sets a modifier for a subsequent event emission that the event message will be dropped when this socket is not\n * ready to send messages.\n *\n * @example\n * socket.volatile.emit(\"hello\"); // the server may or may not receive it\n *\n * @returns self\n */\n get volatile() {\n this.flags.volatile = true;\n return this;\n }\n /**\n * Sets a modifier for a subsequent event emission that the callback will be called with an error when the\n * given number of milliseconds have elapsed without an acknowledgement from the server:\n *\n * @example\n * socket.timeout(5000).emit(\"my-event\", (err) => {\n * if (err) {\n * // the server did not acknowledge the event in the given delay\n * }\n * });\n *\n * @returns self\n */\n timeout(timeout) {\n this.flags.timeout = timeout;\n return this;\n }\n /**\n * Adds a listener that will be fired when any event is emitted. The event name is passed as the first argument to the\n * callback.\n *\n * @example\n * socket.onAny((event, ...args) => {\n * console.log(`got ${event}`);\n * });\n *\n * @param listener\n */\n onAny(listener) {\n this._anyListeners = this._anyListeners || [];\n this._anyListeners.push(listener);\n return this;\n }\n /**\n * Adds a listener that will be fired when any event is emitted. The event name is passed as the first argument to the\n * callback. The listener is added to the beginning of the listeners array.\n *\n * @example\n * socket.prependAny((event, ...args) => {\n * console.log(`got event ${event}`);\n * });\n *\n * @param listener\n */\n prependAny(listener) {\n this._anyListeners = this._anyListeners || [];\n this._anyListeners.unshift(listener);\n return this;\n }\n /**\n * Removes the listener that will be fired when any event is emitted.\n *\n * @example\n * const catchAllListener = (event, ...args) => {\n * console.log(`got event ${event}`);\n * }\n *\n * socket.onAny(catchAllListener);\n *\n * // remove a specific listener\n * socket.offAny(catchAllListener);\n *\n * // or remove all listeners\n * socket.offAny();\n *\n * @param listener\n */\n offAny(listener) {\n if (!this._anyListeners) {\n return this;\n }\n if (listener) {\n const listeners = this._anyListeners;\n for (let i = 0; i < listeners.length; i++) {\n if (listener === listeners[i]) {\n listeners.splice(i, 1);\n return this;\n }\n }\n } else {\n this._anyListeners = [];\n }\n return this;\n }\n /**\n * Returns an array of listeners that are listening for any event that is specified. This array can be manipulated,\n * e.g. to remove listeners.\n */\n listenersAny() {\n return this._anyListeners || [];\n }\n /**\n * Adds a listener that will be fired when any event is emitted. The event name is passed as the first argument to the\n * callback.\n *\n * Note: acknowledgements sent to the server are not included.\n *\n * @example\n * socket.onAnyOutgoing((event, ...args) => {\n * console.log(`sent event ${event}`);\n * });\n *\n * @param listener\n */\n onAnyOutgoing(listener) {\n this._anyOutgoingListeners = this._anyOutgoingListeners || [];\n this._anyOutgoingListeners.push(listener);\n return this;\n }\n /**\n * Adds a listener that will be fired when any event is emitted. The event name is passed as the first argument to the\n * callback. The listener is added to the beginning of the listeners array.\n *\n * Note: acknowledgements sent to the server are not included.\n *\n * @example\n * socket.prependAnyOutgoing((event, ...args) => {\n * console.log(`sent event ${event}`);\n * });\n *\n * @param listener\n */\n prependAnyOutgoing(listener) {\n this._anyOutgoingListeners = this._anyOutgoingListeners || [];\n this._anyOutgoingListeners.unshift(listener);\n return this;\n }\n /**\n * Removes the listener that will be fired when any event is emitted.\n *\n * @example\n * const catchAllListener = (event, ...args) => {\n * console.log(`sent event ${event}`);\n * }\n *\n * socket.onAnyOutgoing(catchAllListener);\n *\n * // remove a specific listener\n * socket.offAnyOutgoing(catchAllListener);\n *\n * // or remove all listeners\n * socket.offAnyOutgoing();\n *\n * @param [listener] - the catch-all listener (optional)\n */\n offAnyOutgoing(listener) {\n if (!this._anyOutgoingListeners) {\n return this;\n }\n if (listener) {\n const listeners = this._anyOutgoingListeners;\n for (let i = 0; i < listeners.length; i++) {\n if (listener === listeners[i]) {\n listeners.splice(i, 1);\n return this;\n }\n }\n } else {\n this._anyOutgoingListeners = [];\n }\n return this;\n }\n /**\n * Returns an array of listeners that are listening for any event that is specified. This array can be manipulated,\n * e.g. to remove listeners.\n */\n listenersAnyOutgoing() {\n return this._anyOutgoingListeners || [];\n }\n /**\n * Notify the listeners for each packet sent\n *\n * @param packet\n *\n * @private\n */\n notifyOutgoingListeners(packet) {\n if (this._anyOutgoingListeners && this._anyOutgoingListeners.length) {\n const listeners = this._anyOutgoingListeners.slice();\n for (const listener of listeners) {\n listener.apply(this, packet.data);\n }\n }\n }\n}","/**\n * Initialize backoff timer with `opts`.\n *\n * - `min` initial timeout in milliseconds [100]\n * - `max` max timeout [10000]\n * - `jitter` [0]\n * - `factor` [2]\n *\n * @param {Object} opts\n * @api public\n */\nexport function Backoff(opts) {\n opts = opts || {};\n this.ms = opts.min || 100;\n this.max = opts.max || 10000;\n this.factor = opts.factor || 2;\n this.jitter = opts.jitter > 0 && opts.jitter <= 1 ? opts.jitter : 0;\n this.attempts = 0;\n}\n/**\n * Return the backoff duration.\n *\n * @return {Number}\n * @api public\n */\nBackoff.prototype.duration = function () {\n var ms = this.ms * Math.pow(this.factor, this.attempts++);\n if (this.jitter) {\n var rand = Math.random();\n var deviation = Math.floor(rand * this.jitter * ms);\n ms = (Math.floor(rand * 10) & 1) == 0 ? ms - deviation : ms + deviation;\n }\n return Math.min(ms, this.max) | 0;\n};\n/**\n * Reset the number of attempts.\n *\n * @api public\n */\nBackoff.prototype.reset = function () {\n this.attempts = 0;\n};\n/**\n * Set the minimum duration\n *\n * @api public\n */\nBackoff.prototype.setMin = function (min) {\n this.ms = min;\n};\n/**\n * Set the maximum duration\n *\n * @api public\n */\nBackoff.prototype.setMax = function (max) {\n this.max = max;\n};\n/**\n * Set the jitter\n *\n * @api public\n */\nBackoff.prototype.setJitter = function (jitter) {\n this.jitter = jitter;\n};","import { Socket as Engine, installTimerFunctions, nextTick } from \"engine.io-client\";\nimport { Socket } from \"./socket.js\";\nimport * as parser from \"socket.io-parser\";\nimport { on } from \"./on.js\";\nimport { Backoff } from \"./contrib/backo2.js\";\nimport { Emitter } from \"@socket.io/component-emitter\";\nexport class Manager extends Emitter {\n constructor(uri, opts) {\n var _a;\n super();\n this.nsps = {};\n this.subs = [];\n if (uri && \"object\" === typeof uri) {\n opts = uri;\n uri = undefined;\n }\n opts = opts || {};\n opts.path = opts.path || \"/socket.io\";\n this.opts = opts;\n installTimerFunctions(this, opts);\n this.reconnection(opts.reconnection !== false);\n this.reconnectionAttempts(opts.reconnectionAttempts || Infinity);\n this.reconnectionDelay(opts.reconnectionDelay || 1000);\n this.reconnectionDelayMax(opts.reconnectionDelayMax || 5000);\n this.randomizationFactor((_a = opts.randomizationFactor) !== null && _a !== void 0 ? _a : 0.5);\n this.backoff = new Backoff({\n min: this.reconnectionDelay(),\n max: this.reconnectionDelayMax(),\n jitter: this.randomizationFactor()\n });\n this.timeout(null == opts.timeout ? 20000 : opts.timeout);\n this._readyState = \"closed\";\n this.uri = uri;\n const _parser = opts.parser || parser;\n this.encoder = new _parser.Encoder();\n this.decoder = new _parser.Decoder();\n this._autoConnect = opts.autoConnect !== false;\n if (this._autoConnect) this.open();\n }\n reconnection(v) {\n if (!arguments.length) return this._reconnection;\n this._reconnection = !!v;\n if (!v) {\n this.skipReconnect = true;\n }\n return this;\n }\n reconnectionAttempts(v) {\n if (v === undefined) return this._reconnectionAttempts;\n this._reconnectionAttempts = v;\n return this;\n }\n reconnectionDelay(v) {\n var _a;\n if (v === undefined) return this._reconnectionDelay;\n this._reconnectionDelay = v;\n (_a = this.backoff) === null || _a === void 0 ? void 0 : _a.setMin(v);\n return this;\n }\n randomizationFactor(v) {\n var _a;\n if (v === undefined) return this._randomizationFactor;\n this._randomizationFactor = v;\n (_a = this.backoff) === null || _a === void 0 ? void 0 : _a.setJitter(v);\n return this;\n }\n reconnectionDelayMax(v) {\n var _a;\n if (v === undefined) return this._reconnectionDelayMax;\n this._reconnectionDelayMax = v;\n (_a = this.backoff) === null || _a === void 0 ? void 0 : _a.setMax(v);\n return this;\n }\n timeout(v) {\n if (!arguments.length) return this._timeout;\n this._timeout = v;\n return this;\n }\n /**\n * Starts trying to reconnect if reconnection is enabled and we have not\n * started reconnecting yet\n *\n * @private\n */\n maybeReconnectOnOpen() {\n // Only try to reconnect if it's the first time we're connecting\n if (!this._reconnecting && this._reconnection && this.backoff.attempts === 0) {\n // keeps reconnection from firing twice for the same reconnection loop\n this.reconnect();\n }\n }\n /**\n * Sets the current transport `socket`.\n *\n * @param {Function} fn - optional, callback\n * @return self\n * @public\n */\n open(fn) {\n if (~this._readyState.indexOf(\"open\")) return this;\n this.engine = new Engine(this.uri, this.opts);\n const socket = this.engine;\n const self = this;\n this._readyState = \"opening\";\n this.skipReconnect = false;\n // emit `open`\n const openSubDestroy = on(socket, \"open\", function () {\n self.onopen();\n fn && fn();\n });\n const onError = err => {\n this.cleanup();\n this._readyState = \"closed\";\n this.emitReserved(\"error\", err);\n if (fn) {\n fn(err);\n } else {\n // Only do this if there is no fn to handle the error\n this.maybeReconnectOnOpen();\n }\n };\n // emit `error`\n const errorSub = on(socket, \"error\", onError);\n if (false !== this._timeout) {\n const timeout = this._timeout;\n // set timer\n const timer = this.setTimeoutFn(() => {\n openSubDestroy();\n onError(new Error(\"timeout\"));\n socket.close();\n }, timeout);\n if (this.opts.autoUnref) {\n timer.unref();\n }\n this.subs.push(() => {\n this.clearTimeoutFn(timer);\n });\n }\n this.subs.push(openSubDestroy);\n this.subs.push(errorSub);\n return this;\n }\n /**\n * Alias for open()\n *\n * @return self\n * @public\n */\n connect(fn) {\n return this.open(fn);\n }\n /**\n * Called upon transport open.\n *\n * @private\n */\n onopen() {\n // clear old subs\n this.cleanup();\n // mark as open\n this._readyState = \"open\";\n this.emitReserved(\"open\");\n // add new subs\n const socket = this.engine;\n this.subs.push(on(socket, \"ping\", this.onping.bind(this)), on(socket, \"data\", this.ondata.bind(this)), on(socket, \"error\", this.onerror.bind(this)), on(socket, \"close\", this.onclose.bind(this)),\n // @ts-ignore\n on(this.decoder, \"decoded\", this.ondecoded.bind(this)));\n }\n /**\n * Called upon a ping.\n *\n * @private\n */\n onping() {\n this.emitReserved(\"ping\");\n }\n /**\n * Called with data.\n *\n * @private\n */\n ondata(data) {\n try {\n this.decoder.add(data);\n } catch (e) {\n this.onclose(\"parse error\", e);\n }\n }\n /**\n * Called when parser fully decodes a packet.\n *\n * @private\n */\n ondecoded(packet) {\n // the nextTick call prevents an exception in a user-provided event listener from triggering a disconnection due to a \"parse error\"\n nextTick(() => {\n this.emitReserved(\"packet\", packet);\n }, this.setTimeoutFn);\n }\n /**\n * Called upon socket error.\n *\n * @private\n */\n onerror(err) {\n this.emitReserved(\"error\", err);\n }\n /**\n * Creates a new socket for the given `nsp`.\n *\n * @return {Socket}\n * @public\n */\n socket(nsp, opts) {\n let socket = this.nsps[nsp];\n if (!socket) {\n socket = new Socket(this, nsp, opts);\n this.nsps[nsp] = socket;\n } else if (this._autoConnect && !socket.active) {\n socket.connect();\n }\n return socket;\n }\n /**\n * Called upon a socket close.\n *\n * @param socket\n * @private\n */\n _destroy(socket) {\n const nsps = Object.keys(this.nsps);\n for (const nsp of nsps) {\n const socket = this.nsps[nsp];\n if (socket.active) {\n return;\n }\n }\n this._close();\n }\n /**\n * Writes a packet.\n *\n * @param packet\n * @private\n */\n _packet(packet) {\n const encodedPackets = this.encoder.encode(packet);\n for (let i = 0; i < encodedPackets.length; i++) {\n this.engine.write(encodedPackets[i], packet.options);\n }\n }\n /**\n * Clean up transport subscriptions and packet buffer.\n *\n * @private\n */\n cleanup() {\n this.subs.forEach(subDestroy => subDestroy());\n this.subs.length = 0;\n this.decoder.destroy();\n }\n /**\n * Close the current socket.\n *\n * @private\n */\n _close() {\n this.skipReconnect = true;\n this._reconnecting = false;\n this.onclose(\"forced close\");\n }\n /**\n * Alias for close()\n *\n * @private\n */\n disconnect() {\n return this._close();\n }\n /**\n * Called when:\n *\n * - the low-level engine is closed\n * - the parser encountered a badly formatted packet\n * - all sockets are disconnected\n *\n * @private\n */\n onclose(reason, description) {\n var _a;\n this.cleanup();\n (_a = this.engine) === null || _a === void 0 ? void 0 : _a.close();\n this.backoff.reset();\n this._readyState = \"closed\";\n this.emitReserved(\"close\", reason, description);\n if (this._reconnection && !this.skipReconnect) {\n this.reconnect();\n }\n }\n /**\n * Attempt a reconnection.\n *\n * @private\n */\n reconnect() {\n if (this._reconnecting || this.skipReconnect) return this;\n const self = this;\n if (this.backoff.attempts >= this._reconnectionAttempts) {\n this.backoff.reset();\n this.emitReserved(\"reconnect_failed\");\n this._reconnecting = false;\n } else {\n const delay = this.backoff.duration();\n this._reconnecting = true;\n const timer = this.setTimeoutFn(() => {\n if (self.skipReconnect) return;\n this.emitReserved(\"reconnect_attempt\", self.backoff.attempts);\n // check again for the case socket closed in above events\n if (self.skipReconnect) return;\n self.open(err => {\n if (err) {\n self._reconnecting = false;\n self.reconnect();\n this.emitReserved(\"reconnect_error\", err);\n } else {\n self.onreconnect();\n }\n });\n }, delay);\n if (this.opts.autoUnref) {\n timer.unref();\n }\n this.subs.push(() => {\n this.clearTimeoutFn(timer);\n });\n }\n }\n /**\n * Called upon successful reconnect.\n *\n * @private\n */\n onreconnect() {\n const attempt = this.backoff.attempts;\n this._reconnecting = false;\n this.backoff.reset();\n this.emitReserved(\"reconnect\", attempt);\n }\n}","import { url } from \"./url.js\";\nimport { Manager } from \"./manager.js\";\nimport { Socket } from \"./socket.js\";\n/**\n * Managers cache.\n */\nconst cache = {};\nfunction lookup(uri, opts) {\n if (typeof uri === \"object\") {\n opts = uri;\n uri = undefined;\n }\n opts = opts || {};\n const parsed = url(uri, opts.path || \"/socket.io\");\n const source = parsed.source;\n const id = parsed.id;\n const path = parsed.path;\n const sameNamespace = cache[id] && path in cache[id][\"nsps\"];\n const newConnection = opts.forceNew || opts[\"force new connection\"] || false === opts.multiplex || sameNamespace;\n let io;\n if (newConnection) {\n io = new Manager(source, opts);\n } else {\n if (!cache[id]) {\n cache[id] = new Manager(source, opts);\n }\n io = cache[id];\n }\n if (parsed.query && !opts.query) {\n opts.query = parsed.queryKey;\n }\n return io.socket(parsed.path, opts);\n}\n// so that \"lookup\" can be used both as a function (e.g. `io(...)`) and as a\n// namespace (e.g. `io.connect(...)`), for backward compatibility\nObject.assign(lookup, {\n Manager,\n Socket,\n io: lookup,\n connect: lookup\n});\n/**\n * Protocol version.\n *\n * @public\n */\nexport { protocol } from \"socket.io-parser\";\n/**\n * Expose constructors for standalone build.\n *\n * @public\n */\nexport { Manager, Socket, lookup as io, lookup as connect, lookup as default };\nexport { Fetch, NodeXHR, XHR, NodeWebSocket, WebSocket, WebTransport } from \"engine.io-client\";","export enum ConnectionStatus {\n CONNECTED = 'CONNECTED',\n DISCONNECTED = 'DISCONNECTED',\n RECONNECTING = 'RECONNECTING',\n}\n","import { Injectable, InjectionToken, inject } from '@angular/core';\nimport { BackendResolvedPayload, BackendTriggeredPayload } from '../models/realtime-alarm-event.model';\n\nexport interface RealtimeAlarmEventNormalizerPort {\n\tparseBackendTriggeredPayload(payload: unknown): BackendTriggeredPayload | null;\n\tparseBackendResolvedPayload(payload: unknown): BackendResolvedPayload | null;\n}\n\nexport const REALTIME_ALARM_EVENT_NORMALIZER = new InjectionToken(\n\t'REALTIME_ALARM_EVENT_NORMALIZER',\n\t{\n\t\tprovidedIn: 'root',\n\t\tfactory: () => inject(RealtimeAlarmEventNormalizerService),\n\t}\n);\n\n@Injectable({ providedIn: 'root' })\nexport class RealtimeAlarmEventNormalizerService implements RealtimeAlarmEventNormalizerPort {\n\tpublic parseBackendTriggeredPayload(payload: unknown): BackendTriggeredPayload | null {\n\t\tif (!this.isObject(payload)) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst alarmEventId = payload['alarmEventId'];\n\t\tconst wardId = payload['wardId'];\n\t\tconst alarmRuleId = payload['alarmRuleId'];\n\t\tconst normalizedWardId = this.parseWardId(wardId);\n\n\t\tif (\n\t\t\ttypeof alarmEventId !== 'string' ||\n\t\t\tnormalizedWardId === null ||\n\t\t\ttypeof alarmRuleId !== 'string'\n\t\t) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn {\n\t\t\talarmEventId,\n\t\t\twardId: normalizedWardId,\n\t\t\talarmRuleId,\n\t\t};\n\t}\n\n\tpublic parseBackendResolvedPayload(payload: unknown): BackendResolvedPayload | null {\n\t\tif (!this.isObject(payload)) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst alarmEventId = payload['alarmEventId'];\n\t\tconst wardId = payload['wardId'];\n\t\tconst normalizedWardId = this.parseWardId(wardId);\n\n\t\tif (typeof alarmEventId !== 'string') {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn {\n\t\t\talarmEventId,\n\t\t\twardId: normalizedWardId ?? undefined,\n\t\t};\n\t}\n\n\tprivate isObject(value: unknown): value is Record {\n\t\treturn typeof value === 'object' && value !== null;\n\t}\n\n\tprivate parseWardId(value: unknown): number | null {\n\t\tif (typeof value === 'number' && Number.isInteger(value)) {\n\t\t\treturn value;\n\t\t}\n\n\t\tif (typeof value !== 'string') {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst trimmed = value.trim();\n\t\tif (!trimmed) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst parsed = Number(trimmed);\n\t\treturn Number.isInteger(parsed) ? parsed : null;\n\t}\n}\n","import { Injectable, InjectionToken, inject } from '@angular/core';\nimport { AlarmStateService } from './alarm-state.service';\nimport {\n\tAlarmLifecycleType,\n\tAlarmLifecycleUpdateDetail,\n\tALARM_LIFECYCLE_UPDATED_EVENT,\n} from '../models/realtime-alarm-event.model';\nimport {\n\tDEFAULT_RESOLVED_NOTIFICATION_TITLE,\n\tDEFAULT_TRIGGERED_NOTIFICATION_TITLE,\n\tformatTriggeredNotificationTitle,\n} from '../../notification/utils/notification-title.util';\n\nexport interface AlarmNotificationDetails {\n\talarmName?: string;\n\tpriority?: unknown;\n}\n\nexport interface AlarmLifecycleNotifierPort {\n\tpublish(\n\t\ttype: AlarmLifecycleType,\n\t\talarmEventId: string,\n\t\ttimestamp: string,\n\t\tdetails?: AlarmNotificationDetails\n\t): void;\n}\n\nexport const ALARM_LIFECYCLE_NOTIFIER = new InjectionToken(\n\t'ALARM_LIFECYCLE_NOTIFIER',\n\t{\n\t\tprovidedIn: 'root',\n\t\tfactory: () => inject(AlarmLifecycleNotifierService),\n\t}\n);\n\n@Injectable({ providedIn: 'root' })\nexport class AlarmLifecycleNotifierService implements AlarmLifecycleNotifierPort {\n\tprivate readonly alarmStateService = inject(AlarmStateService);\n\n\tpublic publish(\n\t\ttype: AlarmLifecycleType,\n\t\talarmEventId: string,\n\t\ttimestamp: string,\n\t\tdetails?: AlarmNotificationDetails\n\t): void {\n\t\tthis.publishNotification(type, alarmEventId, timestamp, details);\n\t\tthis.publishLifecycleUpdate(type, alarmEventId);\n\t}\n\n\tprivate publishNotification(\n\t\ttype: AlarmLifecycleType,\n\t\talarmEventId: string,\n\t\ttimestamp: string,\n\t\tdetails?: AlarmNotificationDetails\n\t): void {\n\t\tconst title =\n\t\t\ttype === 'triggered'\n\t\t\t\t? formatTriggeredNotificationTitle(details?.alarmName, details?.priority) ||\n\t\t\t\t\tDEFAULT_TRIGGERED_NOTIFICATION_TITLE\n\t\t\t\t: DEFAULT_RESOLVED_NOTIFICATION_TITLE;\n\n\t\tthis.alarmStateService.onNotificationReceived({\n\t\t\tnotificationId: `alarm-${type}-${alarmEventId}`,\n\t\t\ttitle,\n\t\t\tsentAt: timestamp,\n\t\t\teventType: type,\n\t\t});\n\t}\n\n\tprivate publishLifecycleUpdate(type: AlarmLifecycleType, alarmEventId: string): void {\n\t\tif (typeof globalThis.dispatchEvent !== 'function') {\n\t\t\treturn;\n\t\t}\n\n\t\tif (typeof CustomEvent === 'function') {\n\t\t\tglobalThis.dispatchEvent(\n\t\t\t\tnew CustomEvent(ALARM_LIFECYCLE_UPDATED_EVENT, {\n\t\t\t\t\tdetail: {\n\t\t\t\t\t\ttype,\n\t\t\t\t\t\talarmEventId,\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\tglobalThis.dispatchEvent(new Event(ALARM_LIFECYCLE_UPDATED_EVENT));\n\t}\n}\n","import { Injectable, InjectionToken, inject } from '@angular/core';\nimport { WardRealtimeCacheService } from './ward-realtime-cache.service';\n\nexport interface UserActivationActions {\n\troomsToLeave: string[];\n\troomsToJoin: string[];\n}\n\nexport interface WardSocketRoomCoordinatorPort {\n\tactivateUser(userId: string): UserActivationActions;\n\tdeactivateUser(): string[];\n\trequestJoinRoom(wardId: string): string | null;\n\trequestLeaveRoom(wardId: string): string | null;\n\tgetJoinedRooms(): string[];\n\tresetRuntimeState(): void;\n}\n\nexport const WARD_SOCKET_ROOM_COORDINATOR = new InjectionToken(\n\t'WARD_SOCKET_ROOM_COORDINATOR',\n\t{\n\t\tprovidedIn: 'root',\n\t\tfactory: () => inject(WardSocketRoomCoordinatorService),\n\t}\n);\n\n@Injectable({ providedIn: 'root' })\nexport class WardSocketRoomCoordinatorService implements WardSocketRoomCoordinatorPort {\n\tprivate readonly wardRealtimeCache = inject(WardRealtimeCacheService, { optional: true });\n\n\tprivate readonly joinedRooms = new Set();\n\tprivate currentUserId: string | null = null;\n\n\tpublic activateUser(userId: string): UserActivationActions {\n\t\tconst normalizedUserId = userId.trim();\n\t\tif (!normalizedUserId) {\n\t\t\treturn { roomsToLeave: [], roomsToJoin: [] };\n\t\t}\n\n\t\tconst roomsToLeave =\n\t\t\tthis.currentUserId && this.currentUserId !== normalizedUserId\n\t\t\t\t? Array.from(this.joinedRooms.values())\n\t\t\t\t: [];\n\n\t\tif (roomsToLeave.length > 0) {\n\t\t\tthis.joinedRooms.clear();\n\t\t}\n\n\t\tthis.currentUserId = normalizedUserId;\n\n\t\tconst cachedWardIds = this.wardRealtimeCache?.getWardIds(normalizedUserId) ?? [];\n\t\tconst roomsToJoin: string[] = [];\n\n\t\tfor (const cachedWardId of cachedWardIds) {\n\t\t\tif (this.joinedRooms.has(cachedWardId)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tthis.joinedRooms.add(cachedWardId);\n\t\t\troomsToJoin.push(cachedWardId);\n\t\t}\n\n\t\tthis.persistJoinedRooms();\n\n\t\treturn { roomsToLeave, roomsToJoin };\n\t}\n\n\tpublic deactivateUser(): string[] {\n\t\tif (this.currentUserId && this.wardRealtimeCache) {\n\t\t\tthis.wardRealtimeCache.clearWardIds(this.currentUserId);\n\t\t}\n\n\t\tthis.currentUserId = null;\n\t\tconst roomsToLeave = Array.from(this.joinedRooms.values());\n\t\tthis.joinedRooms.clear();\n\t\treturn roomsToLeave;\n\t}\n\n\tpublic requestJoinRoom(wardId: string): string | null {\n\t\tconst normalizedWardId = wardId.trim();\n\t\tif (!normalizedWardId || this.joinedRooms.has(normalizedWardId)) {\n\t\t\treturn null;\n\t\t}\n\n\t\tthis.joinedRooms.add(normalizedWardId);\n\t\tthis.persistJoinedRooms();\n\t\treturn normalizedWardId;\n\t}\n\n\tpublic requestLeaveRoom(wardId: string): string | null {\n\t\tconst normalizedWardId = wardId.trim();\n\t\tif (!normalizedWardId || !this.joinedRooms.has(normalizedWardId)) {\n\t\t\treturn null;\n\t\t}\n\n\t\tthis.joinedRooms.delete(normalizedWardId);\n\t\tthis.persistJoinedRooms();\n\t\treturn normalizedWardId;\n\t}\n\n\tpublic getJoinedRooms(): string[] {\n\t\treturn Array.from(this.joinedRooms.values());\n\t}\n\n\tpublic resetRuntimeState(): void {\n\t\tthis.currentUserId = null;\n\t\tthis.joinedRooms.clear();\n\t}\n\n\tprivate persistJoinedRooms(): void {\n\t\tif (!this.currentUserId || !this.wardRealtimeCache) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.wardRealtimeCache.setWardIds(this.currentUserId, Array.from(this.joinedRooms.values()));\n\t}\n}\n","import { Injectable, InjectionToken, OnDestroy, inject } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport {\n\tBehaviorSubject,\n\tObservable,\n\tSubject,\n\tcatchError,\n\tfinalize,\n\tfromEvent,\n\tmap,\n\tof,\n\ttakeUntil,\n} from 'rxjs';\nimport { io, Socket } from 'socket.io-client';\nimport { AlarmPriority } from '../models/alarm-priority.enum';\nimport { ConnectionStatus } from '../models/connection-status.enum';\nimport { AlarmStateService } from './alarm-state.service';\nimport { API_BASE_URL } from '../../tokens/api-base-url.token';\nimport { InternalAuthService } from '../../services/internal-auth.service';\nimport { AlarmApiService } from './alarm-api.service';\nimport {\n\tREALTIME_ALARM_EVENT_NORMALIZER,\n\ttype RealtimeAlarmEventNormalizerPort,\n} from './realtime-alarm-event-normalizer.service';\nimport {\n\tALARM_LIFECYCLE_NOTIFIER,\n\ttype AlarmLifecycleNotifierPort,\n} from './alarm-lifecycle-notifier.service';\nimport {\n\tWARD_SOCKET_ROOM_COORDINATOR,\n\ttype WardSocketRoomCoordinatorPort,\n} from './ward-socket-room-coordinator.service';\n\nexport const SOCKET_IO_FACTORY = new InjectionToken('SOCKET_IO_FACTORY', {\n\tprovidedIn: 'root',\n\tfactory: () => io,\n});\n\n@Injectable({ providedIn: 'root' })\nexport class EventSubscriptionService implements OnDestroy {\n\tprivate readonly socketIoFactory = inject(SOCKET_IO_FACTORY);\n\tprivate readonly http = inject(HttpClient, { optional: true });\n\tprivate readonly alarmApiService = inject(AlarmApiService, { optional: true });\n\tprivate readonly alarmStateService = inject(AlarmStateService);\n\tprivate readonly apiBaseUrl = inject(API_BASE_URL, { optional: true });\n\tprivate readonly internalAuthService = inject(InternalAuthService, { optional: true });\n\tprivate readonly eventNormalizer: RealtimeAlarmEventNormalizerPort = inject(REALTIME_ALARM_EVENT_NORMALIZER);\n\tprivate readonly lifecycleNotifier: AlarmLifecycleNotifierPort = inject(ALARM_LIFECYCLE_NOTIFIER);\n\tprivate readonly roomCoordinator: WardSocketRoomCoordinatorPort = inject(WARD_SOCKET_ROOM_COORDINATOR);\n\n\tprivate readonly connectionStatus$ = new BehaviorSubject(\n\t\tConnectionStatus.DISCONNECTED\n\t);\n\tprivate readonly destroy$ = new Subject();\n\tprivate socket: Socket | null = null;\n\tprivate authLifecycleInitialized = false;\n\tprivate activeUserId: string | null = null;\n\tprivate readonly wardBootstrapInFlightUserIds = new Set();\n\tprivate readonly wardBootstrapDoneUserIds = new Set();\n\n\tpublic initialize(wardIds: string[]): void {\n\t\tthis.connect();\n\t\tthis.ensureAuthLifecycleSubscription();\n\n\t\tfor (const wardId of wardIds) {\n\t\t\tthis.joinRoom(wardId);\n\t\t}\n\t}\n\n\tpublic refreshWardRoomSubscription(): void {\n\t\tif (!this.activeUserId) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.bootstrapWardRoomSubscription(this.activeUserId, true);\n\t}\n\n\tpublic getConnectionStatus$(): Observable {\n\t\treturn this.connectionStatus$.asObservable();\n\t}\n\n\tpublic joinRoom(wardId: string): void {\n\t\tconst normalizedWardId = this.roomCoordinator.requestJoinRoom(wardId);\n\t\tif (!normalizedWardId) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.socket?.emit('join-ward', normalizedWardId);\n\t}\n\n\tpublic leaveRoom(wardId: string): void {\n\t\tconst normalizedWardId = this.roomCoordinator.requestLeaveRoom(wardId);\n\t\tif (!normalizedWardId) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.socket?.emit('leave-ward', normalizedWardId);\n\t}\n\n\tpublic ngOnDestroy(): void {\n\t\tthis.disconnect();\n\t}\n\n\tprivate connect(): void {\n\t\tif (this.socket) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.socket = this.socketIoFactory(this.resolveSocketUrl(), {\n\t\t\ttransports: ['websocket'],\n\t\t\treconnection: true,\n\t\t\tautoConnect: true,\n\t\t});\n\n\t\tthis.socket\n\t\t\t.on('connect', () => {\n\t\t\t\tthis.connectionStatus$.next(ConnectionStatus.CONNECTED);\n\t\t\t\tthis.rejoinAllRooms();\n\t\t\t})\n\t\t\t.on('disconnect', () => {\n\t\t\t\tthis.connectionStatus$.next(ConnectionStatus.DISCONNECTED);\n\t\t\t})\n\t\t\t.on('reconnect_attempt', () => {\n\t\t\t\tthis.connectionStatus$.next(ConnectionStatus.RECONNECTING);\n\t\t\t});\n\n\t\tfromEvent(this.socket, 'push-event')\n\t\t\t.pipe(takeUntil(this.destroy$))\n\t\t\t.subscribe((rawEvent) => {\n\t\t\t\tthis.handleBackendTriggeredRawEvent(rawEvent);\n\t\t\t});\n\n\t\tfromEvent(this.socket, 'alarm-resolved')\n\t\t\t.pipe(takeUntil(this.destroy$))\n\t\t\t.subscribe((rawEvent) => {\n\t\t\t\tthis.handleBackendResolvedRawEvent(rawEvent);\n\t\t\t});\n\t}\n\n\tprivate disconnect(): void {\n\t\tif (!this.socket) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.socket.removeAllListeners();\n\t\tthis.socket.disconnect();\n\t\tthis.socket = null;\n\t\tthis.roomCoordinator.resetRuntimeState();\n\t\tthis.connectionStatus$.next(ConnectionStatus.DISCONNECTED);\n\n\t\tthis.destroy$.next();\n\t\tthis.destroy$.complete();\n\t}\n\n\tprivate ensureAuthLifecycleSubscription(): void {\n\t\tif (this.authLifecycleInitialized || !this.internalAuthService) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.authLifecycleInitialized = true;\n\n\t\tthis.internalAuthService\n\t\t\t.getCurrentUser$()\n\t\t\t.pipe(takeUntil(this.destroy$))\n\t\t\t.subscribe((session) => {\n\t\t\t\tif (!session) {\n\t\t\t\t\tconst previousUserId = this.activeUserId;\n\t\t\t\t\tif (previousUserId) {\n\t\t\t\t\t\tthis.wardBootstrapInFlightUserIds.delete(previousUserId);\n\t\t\t\t\t\tthis.wardBootstrapDoneUserIds.delete(previousUserId);\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.activeUserId = null;\n\t\t\t\t\tthis.emitLeaveMany(this.roomCoordinator.deactivateUser());\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst normalizedUserId = session.userId.trim();\n\t\t\t\tif (!normalizedUserId) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.activeUserId = normalizedUserId;\n\n\t\t\t\tconst actions = this.roomCoordinator.activateUser(normalizedUserId);\n\t\t\t\tthis.emitLeaveMany(actions.roomsToLeave);\n\t\t\t\tthis.emitJoinMany(actions.roomsToJoin);\n\t\t\t\tif (actions.roomsToJoin.length === 0) {\n\t\t\t\t\tthis.bootstrapWardRoomSubscription(normalizedUserId);\n\t\t\t\t}\n\t\t\t});\n\t}\n\n\tprivate bootstrapWardRoomSubscription(userId: string, forceRefresh = false): void {\n\t\tif (!this.http) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (\n\t\t\tthis.wardBootstrapInFlightUserIds.has(userId) ||\n\t\t\t(!forceRefresh && this.wardBootstrapDoneUserIds.has(userId))\n\t\t) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.wardBootstrapInFlightUserIds.add(userId);\n\n\t\tthis.http\n\t\t\t.get(this.resolvePlantAllEndpoint())\n\t\t\t.pipe(\n\t\t\t\tmap((response) => ({ response, success: true as const })),\n\t\t\t\tcatchError(() => of({ response: null, success: false as const })),\n\t\t\t\ttakeUntil(this.destroy$),\n\t\t\t\tfinalize(() => {\n\t\t\t\t\tthis.wardBootstrapInFlightUserIds.delete(userId);\n\t\t\t\t\tthis.wardBootstrapDoneUserIds.add(userId);\n\t\t\t\t})\n\t\t\t)\n\t\t\t.subscribe((result) => {\n\t\t\t\tif (!result.success) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst wardIds = this.extractWardIdsFromPlantResponse(result.response);\n\t\t\t\tif (forceRefresh) {\n\t\t\t\t\tthis.syncJoinedRoomsWithWardIds(wardIds);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tfor (const wardId of wardIds) {\n\t\t\t\t\tthis.joinRoom(wardId);\n\t\t\t\t}\n\t\t\t});\n\t}\n\n\tprivate syncJoinedRoomsWithWardIds(targetWardIds: ReadonlyArray): void {\n\t\tconst targetRooms = new Set(targetWardIds);\n\n\t\tfor (const joinedWardId of this.roomCoordinator.getJoinedRooms()) {\n\t\t\tif (targetRooms.has(joinedWardId)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tthis.leaveRoom(joinedWardId);\n\t\t}\n\n\t\tfor (const wardId of targetWardIds) {\n\t\t\tthis.joinRoom(wardId);\n\t\t}\n\t}\n\n\tprivate handleBackendTriggeredRawEvent(raw: unknown): void {\n\t\tconst payload = this.eventNormalizer.parseBackendTriggeredPayload(raw);\n\t\tif (!payload) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.joinRoom(String(payload.wardId));\n\n\t\tthis.resolveTriggeredAlarmDetails(payload.alarmEventId)\n\t\t\t.pipe(takeUntil(this.destroy$))\n\t\t\t.subscribe((resolvedDetails) => {\n\t\t\t\tconst timestamp = new Date().toISOString();\n\t\t\t\tthis.alarmStateService.onAlarmTriggered({\n\t\t\t\t\tid: payload.alarmEventId,\n\t\t\t\t\talarmRuleId: payload.alarmRuleId,\n\t\t\t\t\talarmName: resolvedDetails.alarmName,\n\t\t\t\t\tpriority: resolvedDetails.priority,\n\t\t\t\t\tactivationTime: timestamp,\n\t\t\t\t\tresolutionTime: null,\n\t\t\t\t});\n\n\t\t\t\tthis.lifecycleNotifier.publish('triggered', payload.alarmEventId, timestamp, {\n\t\t\t\t\talarmName: resolvedDetails.alarmName,\n\t\t\t\t\tpriority: resolvedDetails.priority,\n\t\t\t\t});\n\t\t\t});\n\t}\n\n\tprivate handleBackendResolvedRawEvent(raw: unknown): void {\n\t\tconst payload = this.eventNormalizer.parseBackendResolvedPayload(raw);\n\t\tif (!payload) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (typeof payload.wardId === 'number') {\n\t\t\tthis.joinRoom(String(payload.wardId));\n\t\t}\n\n\t\tthis.alarmStateService.onAlarmResolved(payload.alarmEventId);\n\t\tconst timestamp = new Date().toISOString();\n\t\tthis.lifecycleNotifier.publish('resolved', payload.alarmEventId, timestamp);\n\t}\n\n\tprivate resolveTriggeredAlarmDetails(\n\t\talarmEventId: string\n\t): Observable<{ alarmName: string; priority: AlarmPriority }> {\n\t\tconst fallback = {\n\t\t\talarmName: 'Allarme in corso',\n\t\t\tpriority: AlarmPriority.ORANGE,\n\t\t};\n\n\t\tif (!this.alarmApiService) {\n\t\t\treturn of(fallback);\n\t\t}\n\n\t\treturn this.alarmApiService.getAlarmEventById(alarmEventId).pipe(\n\t\t\tmap((alarmEvent) => ({\n\t\t\t\talarmName:\n\t\t\t\t\ttypeof alarmEvent.alarmName === 'string' && alarmEvent.alarmName.trim()\n\t\t\t\t\t\t? alarmEvent.alarmName.trim()\n\t\t\t\t\t\t: fallback.alarmName,\n\t\t\t\tpriority: this.normalizeAlarmPriority(alarmEvent.priority) ?? fallback.priority,\n\t\t\t})),\n\t\t\tcatchError(() => of(fallback))\n\t\t);\n\t}\n\n\tprivate normalizeAlarmPriority(value: unknown): AlarmPriority | null {\n\t\tif (typeof value === 'number' && Number.isInteger(value)) {\n\t\t\treturn this.isAlarmPriority(value) ? value : null;\n\t\t}\n\n\t\tif (typeof value !== 'string') {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst compact = value.trim().toUpperCase();\n\t\tif (!compact) {\n\t\t\treturn null;\n\t\t}\n\n\t\tif (compact in AlarmPriority) {\n\t\t\tconst enumValue = AlarmPriority[compact as keyof typeof AlarmPriority];\n\t\t\treturn typeof enumValue === 'number' && this.isAlarmPriority(enumValue)\n\t\t\t\t? enumValue\n\t\t\t\t: null;\n\t\t}\n\n\t\tconst parsed = Number(compact);\n\t\tif (Number.isInteger(parsed) && this.isAlarmPriority(parsed)) {\n\t\t\treturn parsed;\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tprivate isAlarmPriority(value: number): value is AlarmPriority {\n\t\treturn (\n\t\t\tvalue === AlarmPriority.WHITE ||\n\t\t\tvalue === AlarmPriority.GREEN ||\n\t\t\tvalue === AlarmPriority.ORANGE ||\n\t\t\tvalue === AlarmPriority.RED\n\t\t);\n\t}\n\n\tprivate rejoinAllRooms(): void {\n\t\tfor (const wardId of this.roomCoordinator.getJoinedRooms()) {\n\t\t\tthis.socket?.emit('join-ward', wardId);\n\t\t}\n\t}\n\n\tprivate emitJoinMany(wardIds: ReadonlyArray): void {\n\t\tfor (const wardId of wardIds) {\n\t\t\tthis.socket?.emit('join-ward', wardId);\n\t\t}\n\t}\n\n\tprivate emitLeaveMany(wardIds: ReadonlyArray): void {\n\t\tfor (const wardId of wardIds) {\n\t\t\tthis.socket?.emit('leave-ward', wardId);\n\t\t}\n\t}\n\n\tprivate resolveSocketUrl(): string {\n\t\tconst normalizedApiBaseUrl = this.apiBaseUrl?.trim();\n\t\tif (normalizedApiBaseUrl) {\n\t\t\treturn this.toWebsocketNamespaceUrl(normalizedApiBaseUrl);\n\t\t}\n\n\t\treturn `${globalThis.location.origin}/ws`;\n\t}\n\n\tprivate toWebsocketNamespaceUrl(baseUrl: string): string {\n\t\tconst trimmedBaseUrl = baseUrl.replace(/\\/+$/, '');\n\n\t\tif (trimmedBaseUrl.endsWith('/api')) {\n\t\t\treturn `${trimmedBaseUrl.slice(0, -4)}/ws`;\n\t\t}\n\n\t\treturn `${trimmedBaseUrl}/ws`;\n\t}\n\n\tprivate resolvePlantAllEndpoint(): string {\n\t\tconst normalizedApiBaseUrl = this.apiBaseUrl?.trim();\n\t\tif (normalizedApiBaseUrl) {\n\t\t\treturn `${normalizedApiBaseUrl}/plant/all`;\n\t\t}\n\n\t\treturn '/api/plant/all';\n\t}\n\n\tprivate extractWardIdsFromPlantResponse(response: unknown): string[] {\n\t\tconst plants = this.extractPlantArray(response);\n\t\tconst wardIds = new Set();\n\n\t\tfor (const plant of plants) {\n\t\t\tconst wardId = this.normalizeWardId(plant.wardId);\n\t\t\tif (!wardId) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\twardIds.add(wardId);\n\t\t}\n\n\t\treturn Array.from(wardIds.values());\n\t}\n\n\tprivate extractPlantArray(response: unknown): Array<{ wardId?: unknown }> {\n\t\tif (Array.isArray(response)) {\n\t\t\treturn response.filter(\n\t\t\t\t(candidate): candidate is { wardId?: unknown } =>\n\t\t\t\t\ttypeof candidate === 'object' && candidate !== null\n\t\t\t);\n\t\t}\n\n\t\tif (typeof response !== 'object' || response === null) {\n\t\t\treturn [];\n\t\t}\n\n\t\tconst wrapped = response as { data?: unknown; plants?: unknown };\n\t\tif (Array.isArray(wrapped.data)) {\n\t\t\treturn wrapped.data.filter(\n\t\t\t\t(candidate): candidate is { wardId?: unknown } =>\n\t\t\t\t\ttypeof candidate === 'object' && candidate !== null\n\t\t\t);\n\t\t}\n\n\t\tif (!Array.isArray(wrapped.plants)) {\n\t\t\treturn [];\n\t\t}\n\n\t\treturn wrapped.plants.filter(\n\t\t\t(candidate): candidate is { wardId?: unknown } =>\n\t\t\t\ttypeof candidate === 'object' && candidate !== null\n\t\t);\n\t}\n\n\tprivate normalizeWardId(rawWardId: unknown): string | null {\n\t\tif (typeof rawWardId === 'number' && Number.isInteger(rawWardId)) {\n\t\t\treturn String(rawWardId);\n\t\t}\n\n\t\tif (typeof rawWardId !== 'string') {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst trimmedWardId = rawWardId.trim();\n\t\tif (!trimmedWardId) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn trimmedWardId;\n\t}\n\n}\n"],mappings:"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",names:["PACKET_TYPES","PACKET_TYPES_REVERSE","key","ERROR_PACKET","withNativeBlob","withNativeArrayBuffer","isView","obj","encodePacket","type","data","supportsBinary","callback","encodeBlobAsBase64","PACKET_TYPES","fileReader","content","toArray","TEXT_ENCODER","encodePacketToBinary","packet","encoded","chars","lookup","decode","base64","bufferLength","len","i","p","encoded1","encoded2","encoded3","encoded4","arraybuffer","bytes","lookup","withNativeArrayBuffer","decodePacket","encodedPacket","binaryType","mapBinary","type","decodeBase64Packet","PACKET_TYPES_REVERSE","ERROR_PACKET","data","decoded","decode","SEPARATOR","encodePayload","packets","callback","length","encodedPackets","count","packet","i","encodePacket","encodedPacket","decodePayload","encodedPayload","binaryType","decodedPacket","decodePacket","createPacketEncoderStream","controller","encodePacketToBinary","payloadLength","header","view","TEXT_DECODER","totalLength","chunks","acc","chunk","concatChunks","size","buffer","j","createPacketDecoderStream","maxPayload","state","expectedLength","isBinary","headerArray","n","ERROR_PACKET","data","protocol","Emitter","obj","mixin","key","event","fn","on","callbacks","cb","i","args","len","nextTick","cb","setTimeoutFn","globalThisShim","defaultBinaryType","pick","obj","attr","acc","k","NATIVE_SET_TIMEOUT","globalThisShim","NATIVE_CLEAR_TIMEOUT","installTimerFunctions","opts","BASE64_OVERHEAD","byteLength","utf8Length","str","c","length","i","l","randomString","encode","obj","str","i","decode","qs","qry","pairs","l","pair","TransportError","reason","description","context","Transport","Emitter","opts","installTimerFunctions","packets","data","packet","decodePacket","details","onPause","schema","query","hostname","encodedQuery","encode","Polling","Transport","onPause","pause","total","data","callback","packet","decodePayload","close","packets","encodePayload","schema","query","randomString","value","hasCORS","empty","BaseXHR","Polling","opts","isSSL","port","data","fn","req","xhrStatus","context","Request","Emitter","createRequest","uri","installTimerFunctions","_a","pick","xhr","i","e","err","fromError","unloadHandler","terminationEvent","globalThisShim","hasXHR2","newRequest","XHR","forceBase64","xdomain","hasCORS","isReactNative","BaseWS","Transport","uri","protocols","opts","pick","err","closeEvent","ev","packets","i","packet","lastPacket","encodePacket","data","nextTick","schema","query","randomString","WebSocketCtor","globalThisShim","WS","_packet","WT","Transport","err","stream","decoderStream","createPacketDecoderStream","reader","encoderStream","createPacketEncoderStream","read","done","value","packet","packets","i","lastPacket","nextTick","_a","transports","WS","WT","XHR","re","parts","parse","str","src","b","e","m","uri","i","pathNames","queryKey","obj","path","regx","names","query","data","$0","$1","$2","withEventListeners","OFFLINE_EVENT_LISTENERS","listener","SocketWithoutUpgrade","Emitter","uri","opts","defaultBinaryType","parsedUri","parse","installTimerFunctions","t","transportName","decode","name","query","protocol","transport","reason","packet","err","data","delay","packets","payloadSize","i","byteLength","hasExpired","nextTick","msg","options","fn","type","close","cleanupAndClose","waitForUpgrade","description","SocketWithUpgrade","failed","onTransportOpen","cleanup","freezeTransport","onerror","error","onTransportClose","onclose","onupgrade","to","upgrades","filteredUpgrades","Socket","o","transports","protocol","Socket","url","uri","path","loc","obj","parse","host","esm_exports","__export","Decoder","Encoder","PacketType","isPacketValid","protocol","withNativeArrayBuffer","isView","obj","toString","withNativeBlob","withNativeFile","isBinary","hasBinary","toJSON","i","l","key","deconstructPacket","packet","buffers","packetData","pack","_deconstructPacket","data","isBinary","placeholder","newData","i","key","reconstructPacket","_reconstructPacket","RESERVED_EVENTS","protocol","PacketType","Encoder","replacer","obj","hasBinary","str","deconstruction","deconstructPacket","pack","buffers","Decoder","_Decoder","Emitter","opts","packet","isBinaryEvent","BinaryReconstructor","isBinary","i","p","start","buf","n","isInteger","next","c","payload","type","isObject","binData","reconstructPacket","isNamespaceValid","nsp","value","isAckIdValid","id","isDataValid","isPacketValid","on","obj","ev","fn","RESERVED_EVENTS","Socket","Emitter","io","nsp","opts","on","args","ev","_a","_b","_c","packet","PacketType","id","ack","isTransportWritable","isConnected","timeout","timer","i","fn","resolve","reject","arg1","arg2","err","responseArgs","force","data","reason","description","listeners","listener","self","sent","pid","subDestroy","compress","Backoff","opts","ms","rand","deviation","min","max","jitter","Manager","Emitter","uri","opts","_a","installTimerFunctions","Backoff","_parser","esm_exports","v","fn","Socket","socket","self","openSubDestroy","on","onError","err","errorSub","timeout","timer","data","e","packet","nextTick","nsp","nsps","encodedPackets","i","subDestroy","reason","description","delay","attempt","cache","lookup","uri","opts","parsed","url","source","id","path","sameNamespace","newConnection","io","Manager","Socket","ConnectionStatus","REALTIME_ALARM_EVENT_NORMALIZER","InjectionToken","providedIn","factory","inject","RealtimeAlarmEventNormalizerService","parseBackendTriggeredPayload","payload","isObject","alarmEventId","wardId","alarmRuleId","normalizedWardId","parseWardId","parseBackendResolvedPayload","undefined","value","Number","isInteger","trimmed","trim","parsed","\u0275fac","ALARM_LIFECYCLE_NOTIFIER","InjectionToken","providedIn","factory","inject","AlarmLifecycleNotifierService","alarmStateService","AlarmStateService","publish","type","alarmEventId","timestamp","details","publishNotification","publishLifecycleUpdate","title","formatTriggeredNotificationTitle","alarmName","priority","DEFAULT_TRIGGERED_NOTIFICATION_TITLE","DEFAULT_RESOLVED_NOTIFICATION_TITLE","onNotificationReceived","notificationId","sentAt","eventType","globalThis","dispatchEvent","CustomEvent","ALARM_LIFECYCLE_UPDATED_EVENT","detail","Event","\u0275fac","WARD_SOCKET_ROOM_COORDINATOR","InjectionToken","providedIn","factory","inject","WardSocketRoomCoordinatorService","wardRealtimeCache","WardRealtimeCacheService","optional","joinedRooms","Set","currentUserId","activateUser","userId","normalizedUserId","trim","roomsToLeave","roomsToJoin","Array","from","values","length","clear","cachedWardIds","getWardIds","cachedWardId","has","add","push","persistJoinedRooms","deactivateUser","clearWardIds","requestJoinRoom","wardId","normalizedWardId","requestLeaveRoom","delete","getJoinedRooms","resetRuntimeState","setWardIds","\u0275fac","SOCKET_IO_FACTORY","InjectionToken","providedIn","factory","io","EventSubscriptionService","socketIoFactory","inject","http","HttpClient","optional","alarmApiService","AlarmApiService","alarmStateService","AlarmStateService","apiBaseUrl","API_BASE_URL","internalAuthService","InternalAuthService","eventNormalizer","REALTIME_ALARM_EVENT_NORMALIZER","lifecycleNotifier","ALARM_LIFECYCLE_NOTIFIER","roomCoordinator","WARD_SOCKET_ROOM_COORDINATOR","connectionStatus$","BehaviorSubject","ConnectionStatus","DISCONNECTED","destroy$","Subject","socket","authLifecycleInitialized","activeUserId","wardBootstrapInFlightUserIds","Set","wardBootstrapDoneUserIds","initialize","wardIds","connect","ensureAuthLifecycleSubscription","wardId","joinRoom","refreshWardRoomSubscription","bootstrapWardRoomSubscription","getConnectionStatus$","asObservable","normalizedWardId","requestJoinRoom","emit","leaveRoom","requestLeaveRoom","ngOnDestroy","disconnect","resolveSocketUrl","transports","reconnection","autoConnect","on","next","CONNECTED","rejoinAllRooms","RECONNECTING","fromEvent","pipe","takeUntil","subscribe","rawEvent","handleBackendTriggeredRawEvent","handleBackendResolvedRawEvent","removeAllListeners","resetRuntimeState","complete","getCurrentUser$","session","previousUserId","delete","emitLeaveMany","deactivateUser","normalizedUserId","userId","trim","actions","activateUser","roomsToLeave","emitJoinMany","roomsToJoin","length","forceRefresh","has","add","get","resolvePlantAllEndpoint","map","response","success","catchError","of","finalize","result","extractWardIdsFromPlantResponse","syncJoinedRoomsWithWardIds","targetWardIds","targetRooms","joinedWardId","getJoinedRooms","raw","payload","parseBackendTriggeredPayload","String","resolveTriggeredAlarmDetails","alarmEventId","resolvedDetails","timestamp","Date","toISOString","onAlarmTriggered","id","alarmRuleId","alarmName","priority","activationTime","resolutionTime","publish","parseBackendResolvedPayload","onAlarmResolved","fallback","AlarmPriority","ORANGE","getAlarmEventById","alarmEvent","normalizeAlarmPriority","value","Number","isInteger","isAlarmPriority","compact","toUpperCase","enumValue","parsed","WHITE","GREEN","RED","normalizedApiBaseUrl","toWebsocketNamespaceUrl","globalThis","location","origin","baseUrl","trimmedBaseUrl","replace","endsWith","slice","plants","extractPlantArray","plant","normalizeWardId","Array","from","values","isArray","filter","candidate","wrapped","data","rawWardId","trimmedWardId","\u0275fac"],x_google_ignoreList:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27]},_coverageSchema:"1a1c01bbd47fc00a2c39e90264f33305004495a9",hash:"e47053eb0b86eedcb97c66e4f1a2656960562a0f"};var coverage=global[gcv]||(global[gcv]={});if(!coverage[path]||coverage[path].hash!==hash){coverage[path]=coverageData;}var actualCoverage=coverage[path];{// @ts-ignore +cov_220zhfwpnm=function(){return actualCoverage;};}return actualCoverage;}cov_220zhfwpnm();import{a as ot}from"./chunk-666MVPNS.js";import{a as St,b as Ct,c as Nt}from"./chunk-WCZEJQCH.js";import{a as Ot}from"./chunk-EZ7WFT6U.js";import{a as xt}from"./chunk-CFHT7CZE.js";import{a as J}from"./chunk-CX4DL26R.js";import{a as R}from"./chunk-ZZLQRDHJ.js";import{b as It}from"./chunk-65RKWSY3.js";import{b as At,e as kt}from"./chunk-2S5V5XEE.js";import{A as Tt,G as x,L as w,O as v,Q as l,d as vt,e as Rt,h as $,m as it,t as st,w as nt}from"./chunk-RYTNMYZW.js";import{c as ue}from"./chunk-VCZGUBMY.js";var m=(cov_220zhfwpnm().s[0]++,Object.create(null));cov_220zhfwpnm().s[1]++;m.open="0";cov_220zhfwpnm().s[2]++;m.close="1";cov_220zhfwpnm().s[3]++;m.ping="2";cov_220zhfwpnm().s[4]++;m.pong="3";cov_220zhfwpnm().s[5]++;m.message="4";cov_220zhfwpnm().s[6]++;m.upgrade="5";cov_220zhfwpnm().s[7]++;m.noop="6";var P=(cov_220zhfwpnm().s[8]++,Object.create(null));cov_220zhfwpnm().s[9]++;Object.keys(m).forEach(i=>{cov_220zhfwpnm().f[0]++;cov_220zhfwpnm().s[10]++;P[m[i]]=i;});var U=(cov_220zhfwpnm().s[11]++,{type:"error",data:"parser error"});cov_220zhfwpnm().s[14]++;cov_220zhfwpnm().s[16]++;cov_220zhfwpnm().s[18]++;var Pt=(cov_220zhfwpnm().s[12]++,(cov_220zhfwpnm().b[0][0]++,typeof Blob=="function")||(cov_220zhfwpnm().b[0][1]++,typeof Blob<"u")&&(cov_220zhfwpnm().b[0][2]++,Object.prototype.toString.call(Blob)==="[object BlobConstructor]")),Ut=(cov_220zhfwpnm().s[13]++,typeof ArrayBuffer=="function"),Dt=i=>{cov_220zhfwpnm().f[1]++;cov_220zhfwpnm().s[15]++;return typeof ArrayBuffer.isView=="function"?(cov_220zhfwpnm().b[1][0]++,ArrayBuffer.isView(i)):(cov_220zhfwpnm().b[1][1]++,(cov_220zhfwpnm().b[2][0]++,i)&&(cov_220zhfwpnm().b[2][1]++,i.buffer instanceof ArrayBuffer));},D=({type:i,data:e},t,r)=>{cov_220zhfwpnm().f[2]++;cov_220zhfwpnm().s[17]++;return(cov_220zhfwpnm().b[4][0]++,Pt)&&(cov_220zhfwpnm().b[4][1]++,e instanceof Blob)?(cov_220zhfwpnm().b[3][0]++,t?(cov_220zhfwpnm().b[5][0]++,r(e)):(cov_220zhfwpnm().b[5][1]++,Bt(e,r))):(cov_220zhfwpnm().b[3][1]++,(cov_220zhfwpnm().b[7][0]++,Ut)&&((cov_220zhfwpnm().b[7][1]++,e instanceof ArrayBuffer)||(cov_220zhfwpnm().b[7][2]++,Dt(e)))?(cov_220zhfwpnm().b[6][0]++,t?(cov_220zhfwpnm().b[8][0]++,r(e)):(cov_220zhfwpnm().b[8][1]++,Bt(new Blob([e]),r))):(cov_220zhfwpnm().b[6][1]++,r(m[i]+((cov_220zhfwpnm().b[9][0]++,e)||(cov_220zhfwpnm().b[9][1]++,"")))));},Bt=(i,e)=>{cov_220zhfwpnm().f[3]++;let t=(cov_220zhfwpnm().s[19]++,new FileReader());cov_220zhfwpnm().s[20]++;return t.onload=function(){cov_220zhfwpnm().f[4]++;let r=(cov_220zhfwpnm().s[21]++,t.result.split(",")[1]);cov_220zhfwpnm().s[22]++;e("b"+((cov_220zhfwpnm().b[10][0]++,r)||(cov_220zhfwpnm().b[10][1]++,"")));},t.readAsDataURL(i);};function Lt(i){cov_220zhfwpnm().f[5]++;cov_220zhfwpnm().s[23]++;return i instanceof Uint8Array?(cov_220zhfwpnm().b[11][0]++,i):(cov_220zhfwpnm().b[11][1]++,i instanceof ArrayBuffer?(cov_220zhfwpnm().b[12][0]++,new Uint8Array(i)):(cov_220zhfwpnm().b[12][1]++,new Uint8Array(i.buffer,i.byteOffset,i.byteLength)));}var at;function Ft(i,e){cov_220zhfwpnm().f[6]++;cov_220zhfwpnm().s[24]++;if((cov_220zhfwpnm().b[14][0]++,Pt)&&(cov_220zhfwpnm().b[14][1]++,i.data instanceof Blob)){cov_220zhfwpnm().b[13][0]++;cov_220zhfwpnm().s[25]++;return i.data.arrayBuffer().then(Lt).then(e);}else{cov_220zhfwpnm().b[13][1]++;}cov_220zhfwpnm().s[26]++;if((cov_220zhfwpnm().b[16][0]++,Ut)&&((cov_220zhfwpnm().b[16][1]++,i.data instanceof ArrayBuffer)||(cov_220zhfwpnm().b[16][2]++,Dt(i.data)))){cov_220zhfwpnm().b[15][0]++;cov_220zhfwpnm().s[27]++;return e(Lt(i.data));}else{cov_220zhfwpnm().b[15][1]++;}cov_220zhfwpnm().s[28]++;D(i,!1,t=>{cov_220zhfwpnm().f[7]++;cov_220zhfwpnm().s[29]++;(cov_220zhfwpnm().b[17][0]++,at)||(cov_220zhfwpnm().b[17][1]++,at=new TextEncoder()),e(at.encode(t));});}var qt=(cov_220zhfwpnm().s[30]++,"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"),F=(cov_220zhfwpnm().s[31]++,typeof Uint8Array>"u"?(cov_220zhfwpnm().b[18][0]++,[]):(cov_220zhfwpnm().b[18][1]++,new Uint8Array(256)));cov_220zhfwpnm().s[32]++;for(let i=(cov_220zhfwpnm().s[33]++,0);i{cov_220zhfwpnm().f[8]++;let e=(cov_220zhfwpnm().s[36]++,i.length*.75),t=(cov_220zhfwpnm().s[37]++,i.length),r,s=(cov_220zhfwpnm().s[38]++,0),n,o,a,h;cov_220zhfwpnm().s[39]++;(cov_220zhfwpnm().b[19][0]++,i[i.length-1]==="=")&&(cov_220zhfwpnm().b[19][1]++,e--,(cov_220zhfwpnm().b[20][0]++,i[i.length-2]==="=")&&(cov_220zhfwpnm().b[20][1]++,e--));let y=(cov_220zhfwpnm().s[40]++,new ArrayBuffer(e)),d=(cov_220zhfwpnm().s[41]++,new Uint8Array(y));cov_220zhfwpnm().s[42]++;for(r=0;r>4,d[s++]=(o&15)<<4|a>>2,d[s++]=(a&3)<<6|h&63;}cov_220zhfwpnm().s[44]++;return y;};cov_220zhfwpnm().s[46]++;cov_220zhfwpnm().s[51]++;cov_220zhfwpnm().s[56]++;var pe=(cov_220zhfwpnm().s[45]++,typeof ArrayBuffer=="function"),q=(i,e)=>{cov_220zhfwpnm().f[9]++;cov_220zhfwpnm().s[47]++;if(typeof i!="string"){cov_220zhfwpnm().b[21][0]++;cov_220zhfwpnm().s[48]++;return{type:"message",data:jt(i,e)};}else{cov_220zhfwpnm().b[21][1]++;}let t=(cov_220zhfwpnm().s[49]++,i.charAt(0));cov_220zhfwpnm().s[50]++;return t==="b"?(cov_220zhfwpnm().b[22][0]++,{type:"message",data:de(i.substring(1),e)}):(cov_220zhfwpnm().b[22][1]++,P[t]?(cov_220zhfwpnm().b[23][0]++,i.length>1?(cov_220zhfwpnm().b[24][0]++,{type:P[t],data:i.substring(1)}):(cov_220zhfwpnm().b[24][1]++,{type:P[t]})):(cov_220zhfwpnm().b[23][1]++,U));},de=(i,e)=>{cov_220zhfwpnm().f[10]++;cov_220zhfwpnm().s[52]++;if(pe){cov_220zhfwpnm().b[25][0]++;let t=(cov_220zhfwpnm().s[53]++,Wt(i));cov_220zhfwpnm().s[54]++;return jt(t,e);}else{cov_220zhfwpnm().b[25][1]++;cov_220zhfwpnm().s[55]++;return{base64:!0,data:i};}},jt=(i,e)=>{cov_220zhfwpnm().f[11]++;cov_220zhfwpnm().s[57]++;return e==="blob"?(cov_220zhfwpnm().b[26][0]++,i instanceof Blob?(cov_220zhfwpnm().b[27][0]++,i):(cov_220zhfwpnm().b[27][1]++,new Blob([i]))):(cov_220zhfwpnm().b[26][1]++,i instanceof ArrayBuffer?(cov_220zhfwpnm().b[28][0]++,i):(cov_220zhfwpnm().b[28][1]++,i.buffer));};cov_220zhfwpnm().s[59]++;cov_220zhfwpnm().s[66]++;var Mt=(cov_220zhfwpnm().s[58]++,""),Vt=(i,e)=>{cov_220zhfwpnm().f[12]++;let t=(cov_220zhfwpnm().s[60]++,i.length),r=(cov_220zhfwpnm().s[61]++,new Array(t)),s=(cov_220zhfwpnm().s[62]++,0);cov_220zhfwpnm().s[63]++;i.forEach((n,o)=>{cov_220zhfwpnm().f[13]++;cov_220zhfwpnm().s[64]++;D(n,!1,a=>{cov_220zhfwpnm().f[14]++;cov_220zhfwpnm().s[65]++;r[o]=a,(cov_220zhfwpnm().b[29][0]++,++s===t)&&(cov_220zhfwpnm().b[29][1]++,e(r.join(Mt)));});});},zt=(i,e)=>{cov_220zhfwpnm().f[15]++;let t=(cov_220zhfwpnm().s[67]++,i.split(Mt)),r=(cov_220zhfwpnm().s[68]++,[]);cov_220zhfwpnm().s[69]++;for(let s=(cov_220zhfwpnm().s[70]++,0);s{cov_220zhfwpnm().f[18]++;let r=(cov_220zhfwpnm().s[77]++,t.length),s;cov_220zhfwpnm().s[78]++;if(r<126){cov_220zhfwpnm().b[31][0]++;cov_220zhfwpnm().s[79]++;s=new Uint8Array(1),new DataView(s.buffer).setUint8(0,r);}else{cov_220zhfwpnm().b[31][1]++;cov_220zhfwpnm().s[80]++;if(r<65536){cov_220zhfwpnm().b[32][0]++;cov_220zhfwpnm().s[81]++;s=new Uint8Array(3);let n=(cov_220zhfwpnm().s[82]++,new DataView(s.buffer));cov_220zhfwpnm().s[83]++;n.setUint8(0,126),n.setUint16(1,r);}else{cov_220zhfwpnm().b[32][1]++;cov_220zhfwpnm().s[84]++;s=new Uint8Array(9);let n=(cov_220zhfwpnm().s[85]++,new DataView(s.buffer));cov_220zhfwpnm().s[86]++;n.setUint8(0,127),n.setBigUint64(1,BigInt(r));}}cov_220zhfwpnm().s[87]++;(cov_220zhfwpnm().b[33][0]++,i.data)&&(cov_220zhfwpnm().b[33][1]++,typeof i.data!="string")&&(cov_220zhfwpnm().b[33][2]++,s[0]|=128),e.enqueue(s),e.enqueue(t);});}});}var ct;function H(i){cov_220zhfwpnm().f[19]++;cov_220zhfwpnm().s[88]++;return i.reduce((e,t)=>{cov_220zhfwpnm().f[20]++;cov_220zhfwpnm().s[89]++;return e+t.length;},0);}function K(i,e){cov_220zhfwpnm().f[21]++;cov_220zhfwpnm().s[90]++;if(i[0].length===e){cov_220zhfwpnm().b[34][0]++;cov_220zhfwpnm().s[91]++;return i.shift();}else{cov_220zhfwpnm().b[34][1]++;}let t=(cov_220zhfwpnm().s[92]++,new Uint8Array(e)),r=(cov_220zhfwpnm().s[93]++,0);cov_220zhfwpnm().s[94]++;for(let s=(cov_220zhfwpnm().s[95]++,0);sMath.pow(2,21)-1){cov_220zhfwpnm().b[46][0]++;cov_220zhfwpnm().s[122]++;a.enqueue(U);cov_220zhfwpnm().s[123]++;break;}else{cov_220zhfwpnm().b[46][1]++;}cov_220zhfwpnm().s[124]++;s=d*Math.pow(2,32)+y.getUint32(4),r=3;}else{cov_220zhfwpnm().b[44][1]++;cov_220zhfwpnm().s[125]++;if(H(t)i)){cov_220zhfwpnm().b[49][0]++;cov_220zhfwpnm().s[130]++;a.enqueue(U);cov_220zhfwpnm().s[131]++;break;}else{cov_220zhfwpnm().b[49][1]++;}}}});}var ht=(cov_220zhfwpnm().s[132]++,4);function f(i){cov_220zhfwpnm().f[24]++;cov_220zhfwpnm().s[133]++;if(i){cov_220zhfwpnm().b[51][0]++;cov_220zhfwpnm().s[134]++;return me(i);}else{cov_220zhfwpnm().b[51][1]++;}}function me(i){cov_220zhfwpnm().f[25]++;cov_220zhfwpnm().s[135]++;for(var e in f.prototype){cov_220zhfwpnm().s[136]++;i[e]=f.prototype[e];}cov_220zhfwpnm().s[137]++;return i;}cov_220zhfwpnm().s[138]++;f.prototype.on=f.prototype.addEventListener=function(i,e){cov_220zhfwpnm().f[26]++;cov_220zhfwpnm().s[139]++;return this._callbacks=(cov_220zhfwpnm().b[52][0]++,this._callbacks)||(cov_220zhfwpnm().b[52][1]++,{}),(this._callbacks["$"+i]=(cov_220zhfwpnm().b[53][0]++,this._callbacks["$"+i])||(cov_220zhfwpnm().b[53][1]++,[])).push(e),this;};cov_220zhfwpnm().s[140]++;f.prototype.once=function(i,e){cov_220zhfwpnm().f[27]++;function t(){cov_220zhfwpnm().f[28]++;cov_220zhfwpnm().s[141]++;this.off(i,t),e.apply(this,arguments);}cov_220zhfwpnm().s[142]++;return t.fn=e,this.on(i,t),this;};cov_220zhfwpnm().s[143]++;f.prototype.off=f.prototype.removeListener=f.prototype.removeAllListeners=f.prototype.removeEventListener=function(i,e){cov_220zhfwpnm().f[29]++;cov_220zhfwpnm().s[144]++;if(this._callbacks=(cov_220zhfwpnm().b[55][0]++,this._callbacks)||(cov_220zhfwpnm().b[55][1]++,{}),arguments.length==0){cov_220zhfwpnm().b[54][0]++;cov_220zhfwpnm().s[145]++;return this._callbacks={},this;}else{cov_220zhfwpnm().b[54][1]++;}var t=(cov_220zhfwpnm().s[146]++,this._callbacks["$"+i]);cov_220zhfwpnm().s[147]++;if(!t){cov_220zhfwpnm().b[56][0]++;cov_220zhfwpnm().s[148]++;return this;}else{cov_220zhfwpnm().b[56][1]++;}cov_220zhfwpnm().s[149]++;if(arguments.length==1){cov_220zhfwpnm().b[57][0]++;cov_220zhfwpnm().s[150]++;return delete this._callbacks["$"+i],this;}else{cov_220zhfwpnm().b[57][1]++;}cov_220zhfwpnm().s[151]++;for(var r,s=(cov_220zhfwpnm().s[152]++,0);s{cov_220zhfwpnm().f[33]++;cov_220zhfwpnm().s[177]++;return Promise.resolve().then(e);}):(cov_220zhfwpnm().b[65][1]++,(e,t)=>{cov_220zhfwpnm().f[34]++;cov_220zhfwpnm().s[178]++;return t(e,0);})),u=(cov_220zhfwpnm().s[179]++,typeof self<"u"?(cov_220zhfwpnm().b[67][0]++,self):(cov_220zhfwpnm().b[67][1]++,typeof window<"u"?(cov_220zhfwpnm().b[68][0]++,window):(cov_220zhfwpnm().b[68][1]++,Function("return this")()))),Ht=(cov_220zhfwpnm().s[180]++,"arraybuffer");function Y(i,...e){cov_220zhfwpnm().f[35]++;cov_220zhfwpnm().s[181]++;return e.reduce((t,r)=>{cov_220zhfwpnm().f[36]++;cov_220zhfwpnm().s[182]++;return(cov_220zhfwpnm().b[69][0]++,i.hasOwnProperty(r))&&(cov_220zhfwpnm().b[69][1]++,t[r]=i[r]),t;},{});}var ye=(cov_220zhfwpnm().s[183]++,u.setTimeout),ge=(cov_220zhfwpnm().s[184]++,u.clearTimeout);function _(i,e){cov_220zhfwpnm().f[37]++;cov_220zhfwpnm().s[185]++;e.useNativeTimers?(cov_220zhfwpnm().b[70][0]++,i.setTimeoutFn=ye.bind(u),i.clearTimeoutFn=ge.bind(u)):(cov_220zhfwpnm().b[70][1]++,i.setTimeoutFn=u.setTimeout.bind(u),i.clearTimeoutFn=u.clearTimeout.bind(u));}var _e=(cov_220zhfwpnm().s[186]++,1.33);function Kt(i){cov_220zhfwpnm().f[38]++;cov_220zhfwpnm().s[187]++;return typeof i=="string"?(cov_220zhfwpnm().b[71][0]++,be(i)):(cov_220zhfwpnm().b[71][1]++,Math.ceil(((cov_220zhfwpnm().b[72][0]++,i.byteLength)||(cov_220zhfwpnm().b[72][1]++,i.size))*_e));}function be(i){cov_220zhfwpnm().f[39]++;let e=(cov_220zhfwpnm().s[188]++,0),t=(cov_220zhfwpnm().s[189]++,0);cov_220zhfwpnm().s[190]++;for(let r=(cov_220zhfwpnm().s[191]++,0),s=(cov_220zhfwpnm().s[192]++,i.length);r=57344)?(cov_220zhfwpnm().b[75][0]++,t+=3):(cov_220zhfwpnm().b[75][1]++,r++,t+=4)));}cov_220zhfwpnm().s[194]++;return t;}function X(){cov_220zhfwpnm().f[40]++;cov_220zhfwpnm().s[195]++;return Date.now().toString(36).substring(3)+Math.random().toString(36).substring(2,5);}function Yt(i){cov_220zhfwpnm().f[41]++;let e=(cov_220zhfwpnm().s[196]++,"");cov_220zhfwpnm().s[197]++;for(let t in i){cov_220zhfwpnm().s[198]++;(cov_220zhfwpnm().b[77][0]++,i.hasOwnProperty(t))&&(cov_220zhfwpnm().b[77][1]++,(cov_220zhfwpnm().b[78][0]++,e.length)&&(cov_220zhfwpnm().b[78][1]++,e+="&"),e+=encodeURIComponent(t)+"="+encodeURIComponent(i[t]));}cov_220zhfwpnm().s[199]++;return e;}function Xt(i){cov_220zhfwpnm().f[42]++;let e=(cov_220zhfwpnm().s[200]++,{}),t=(cov_220zhfwpnm().s[201]++,i.split("&"));cov_220zhfwpnm().s[202]++;for(let r=(cov_220zhfwpnm().s[203]++,0),s=(cov_220zhfwpnm().s[204]++,t.length);r{cov_220zhfwpnm().f[62]++;cov_220zhfwpnm().s[233]++;this.readyState="paused",e();};cov_220zhfwpnm().s[234]++;if((cov_220zhfwpnm().b[87][0]++,this._polling)||(cov_220zhfwpnm().b[87][1]++,!this.writable)){cov_220zhfwpnm().b[86][0]++;let r=(cov_220zhfwpnm().s[235]++,0);cov_220zhfwpnm().s[236]++;(cov_220zhfwpnm().b[88][0]++,this._polling)&&(cov_220zhfwpnm().b[88][1]++,r++,this.once("pollComplete",function(){cov_220zhfwpnm().f[63]++;cov_220zhfwpnm().s[237]++;(cov_220zhfwpnm().b[89][0]++,--r)||(cov_220zhfwpnm().b[89][1]++,t());})),(cov_220zhfwpnm().b[90][0]++,this.writable)||(cov_220zhfwpnm().b[90][1]++,r++,this.once("drain",function(){cov_220zhfwpnm().f[64]++;cov_220zhfwpnm().s[238]++;(cov_220zhfwpnm().b[91][0]++,--r)||(cov_220zhfwpnm().b[91][1]++,t());}));}else{cov_220zhfwpnm().b[86][1]++;cov_220zhfwpnm().s[239]++;t();}}_poll(){cov_220zhfwpnm().f[65]++;cov_220zhfwpnm().s[240]++;this._polling=!0,this.doPoll(),this.emitReserved("poll");}onData(e){cov_220zhfwpnm().f[66]++;cov_220zhfwpnm().s[241]++;let t=r=>{cov_220zhfwpnm().f[67]++;cov_220zhfwpnm().s[242]++;if((cov_220zhfwpnm().b[93][0]++,this.readyState==="opening")&&(cov_220zhfwpnm().b[93][1]++,r.type==="open")&&(cov_220zhfwpnm().b[93][2]++,this.onOpen()),r.type==="close"){cov_220zhfwpnm().b[92][0]++;cov_220zhfwpnm().s[243]++;return this.onClose({description:"transport closed by the server"}),!1;}else{cov_220zhfwpnm().b[92][1]++;}cov_220zhfwpnm().s[244]++;this.onPacket(r);};cov_220zhfwpnm().s[245]++;zt(e,this.socket.binaryType).forEach(t),(cov_220zhfwpnm().b[94][0]++,this.readyState!=="closed")&&(cov_220zhfwpnm().b[94][1]++,this._polling=!1,this.emitReserved("pollComplete"),(cov_220zhfwpnm().b[95][0]++,this.readyState==="open")&&(cov_220zhfwpnm().b[95][1]++,this._poll()));}doClose(){cov_220zhfwpnm().f[68]++;cov_220zhfwpnm().s[246]++;let e=()=>{cov_220zhfwpnm().f[69]++;cov_220zhfwpnm().s[247]++;this.write([{type:"close"}]);};cov_220zhfwpnm().s[248]++;this.readyState==="open"?(cov_220zhfwpnm().b[96][0]++,e()):(cov_220zhfwpnm().b[96][1]++,this.once("open",e));}write(e){cov_220zhfwpnm().f[70]++;cov_220zhfwpnm().s[249]++;this.writable=!1,Vt(e,t=>{cov_220zhfwpnm().f[71]++;cov_220zhfwpnm().s[250]++;this.doWrite(t,()=>{cov_220zhfwpnm().f[72]++;cov_220zhfwpnm().s[251]++;this.writable=!0,this.emitReserved("drain");});});}uri(){cov_220zhfwpnm().f[73]++;let e=(cov_220zhfwpnm().s[252]++,this.opts.secure?(cov_220zhfwpnm().b[97][0]++,"https"):(cov_220zhfwpnm().b[97][1]++,"http")),t=(cov_220zhfwpnm().s[253]++,(cov_220zhfwpnm().b[98][0]++,this.query)||(cov_220zhfwpnm().b[98][1]++,{}));cov_220zhfwpnm().s[254]++;return(cov_220zhfwpnm().b[99][0]++,this.opts.timestampRequests!==!1)&&(cov_220zhfwpnm().b[99][1]++,t[this.opts.timestampParam]=X()),(cov_220zhfwpnm().b[100][0]++,!this.supportsBinary)&&(cov_220zhfwpnm().b[100][1]++,!t.sid)&&(cov_220zhfwpnm().b[100][2]++,t.b64=1),this.createUri(e,t);}};var Gt=(cov_220zhfwpnm().s[255]++,!1);cov_220zhfwpnm().s[256]++;try{cov_220zhfwpnm().s[257]++;Gt=(cov_220zhfwpnm().b[101][0]++,typeof XMLHttpRequest<"u")&&(cov_220zhfwpnm().b[101][1]++,"withCredentials"in new XMLHttpRequest());}catch{}var Qt=(cov_220zhfwpnm().s[258]++,Gt);function Ee(){cov_220zhfwpnm().f[74]++;}cov_220zhfwpnm().s[259]++;var ft=class extends W{constructor(e){cov_220zhfwpnm().f[75]++;cov_220zhfwpnm().s[260]++;if(super(e),typeof location<"u"){cov_220zhfwpnm().b[102][0]++;let t=(cov_220zhfwpnm().s[261]++,location.protocol==="https:"),r=(cov_220zhfwpnm().s[262]++,location.port);cov_220zhfwpnm().s[263]++;(cov_220zhfwpnm().b[103][0]++,r)||(cov_220zhfwpnm().b[103][1]++,r=t?(cov_220zhfwpnm().b[104][0]++,"443"):(cov_220zhfwpnm().b[104][1]++,"80")),this.xd=(cov_220zhfwpnm().b[105][0]++,typeof location<"u")&&(cov_220zhfwpnm().b[105][1]++,e.hostname!==location.hostname)||(cov_220zhfwpnm().b[105][2]++,r!==e.port);}else{cov_220zhfwpnm().b[102][1]++;}}doWrite(e,t){cov_220zhfwpnm().f[76]++;let r=(cov_220zhfwpnm().s[264]++,this.request({method:"POST",data:e}));cov_220zhfwpnm().s[265]++;r.on("success",t),r.on("error",(s,n)=>{cov_220zhfwpnm().f[77]++;cov_220zhfwpnm().s[266]++;this.onError("xhr post error",s,n);});}doPoll(){cov_220zhfwpnm().f[78]++;let e=(cov_220zhfwpnm().s[267]++,this.request());cov_220zhfwpnm().s[268]++;e.on("data",this.onData.bind(this)),e.on("error",(t,r)=>{cov_220zhfwpnm().f[79]++;cov_220zhfwpnm().s[269]++;this.onError("xhr poll error",t,r);}),this.pollXhr=e;}},Q=(cov_220zhfwpnm().s[270]++,(()=>{cov_220zhfwpnm().f[80]++;class i extends f{constructor(t,r,s){cov_220zhfwpnm().f[81]++;cov_220zhfwpnm().s[271]++;super(),this.createRequest=t,_(this,s),this._opts=s,this._method=(cov_220zhfwpnm().b[106][0]++,s.method)||(cov_220zhfwpnm().b[106][1]++,"GET"),this._uri=r,this._data=s.data!==void 0?(cov_220zhfwpnm().b[107][0]++,s.data):(cov_220zhfwpnm().b[107][1]++,null),this._create();}_create(){cov_220zhfwpnm().f[82]++;var t;let r=(cov_220zhfwpnm().s[272]++,Y(this._opts,"agent","pfx","key","passphrase","cert","ca","ciphers","rejectUnauthorized","autoUnref"));cov_220zhfwpnm().s[273]++;r.xdomain=!!this._opts.xd;let s=(cov_220zhfwpnm().s[274]++,this._xhr=this.createRequest(r));cov_220zhfwpnm().s[275]++;try{cov_220zhfwpnm().s[276]++;s.open(this._method,this._uri,!0);cov_220zhfwpnm().s[277]++;try{cov_220zhfwpnm().s[278]++;if(this._opts.extraHeaders){cov_220zhfwpnm().b[108][0]++;cov_220zhfwpnm().s[279]++;(cov_220zhfwpnm().b[109][0]++,s.setDisableHeaderCheck)&&(cov_220zhfwpnm().b[109][1]++,s.setDisableHeaderCheck(!0));cov_220zhfwpnm().s[280]++;for(let n in this._opts.extraHeaders){cov_220zhfwpnm().s[281]++;(cov_220zhfwpnm().b[110][0]++,this._opts.extraHeaders.hasOwnProperty(n))&&(cov_220zhfwpnm().b[110][1]++,s.setRequestHeader(n,this._opts.extraHeaders[n]));}}else{cov_220zhfwpnm().b[108][1]++;}}catch{}cov_220zhfwpnm().s[282]++;if(this._method==="POST"){cov_220zhfwpnm().b[111][0]++;cov_220zhfwpnm().s[283]++;try{cov_220zhfwpnm().s[284]++;s.setRequestHeader("Content-type","text/plain;charset=UTF-8");}catch{}}else{cov_220zhfwpnm().b[111][1]++;}cov_220zhfwpnm().s[285]++;try{cov_220zhfwpnm().s[286]++;s.setRequestHeader("Accept","*/*");}catch{}cov_220zhfwpnm().s[287]++;(cov_220zhfwpnm().b[112][0]++,(t=this._opts.cookieJar)===null)||(cov_220zhfwpnm().b[112][1]++,t===void 0)||(cov_220zhfwpnm().b[112][2]++,t.addCookies(s)),(cov_220zhfwpnm().b[113][0]++,"withCredentials"in s)&&(cov_220zhfwpnm().b[113][1]++,s.withCredentials=this._opts.withCredentials),(cov_220zhfwpnm().b[114][0]++,this._opts.requestTimeout)&&(cov_220zhfwpnm().b[114][1]++,s.timeout=this._opts.requestTimeout),s.onreadystatechange=()=>{cov_220zhfwpnm().f[83]++;var n;cov_220zhfwpnm().s[288]++;(cov_220zhfwpnm().b[115][0]++,s.readyState===3)&&((cov_220zhfwpnm().b[115][1]++,(n=this._opts.cookieJar)===null)||(cov_220zhfwpnm().b[115][2]++,n===void 0)||(cov_220zhfwpnm().b[115][3]++,n.parseCookies(s.getResponseHeader("set-cookie")))),(cov_220zhfwpnm().b[116][0]++,s.readyState===4)&&(cov_220zhfwpnm().b[116][1]++,(cov_220zhfwpnm().b[118][0]++,s.status===200)||(cov_220zhfwpnm().b[118][1]++,s.status===1223)?(cov_220zhfwpnm().b[117][0]++,this._onLoad()):(cov_220zhfwpnm().b[117][1]++,this.setTimeoutFn(()=>{cov_220zhfwpnm().f[84]++;cov_220zhfwpnm().s[289]++;this._onError(typeof s.status=="number"?(cov_220zhfwpnm().b[119][0]++,s.status):(cov_220zhfwpnm().b[119][1]++,0));},0)));},s.send(this._data);}catch(n){cov_220zhfwpnm().s[290]++;this.setTimeoutFn(()=>{cov_220zhfwpnm().f[85]++;cov_220zhfwpnm().s[291]++;this._onError(n);},0);cov_220zhfwpnm().s[292]++;return;}cov_220zhfwpnm().s[293]++;(cov_220zhfwpnm().b[120][0]++,typeof document<"u")&&(cov_220zhfwpnm().b[120][1]++,this._index=i.requestsCount++,i.requests[this._index]=this);}_onError(t){cov_220zhfwpnm().f[86]++;cov_220zhfwpnm().s[294]++;this.emitReserved("error",t,this._xhr),this._cleanup(!0);}_cleanup(t){cov_220zhfwpnm().f[87]++;cov_220zhfwpnm().s[295]++;if(!((cov_220zhfwpnm().b[122][0]++,typeof this._xhr>"u")||(cov_220zhfwpnm().b[122][1]++,this._xhr===null))){cov_220zhfwpnm().b[121][0]++;cov_220zhfwpnm().s[296]++;if(this._xhr.onreadystatechange=Ee,t){cov_220zhfwpnm().b[123][0]++;cov_220zhfwpnm().s[297]++;try{cov_220zhfwpnm().s[298]++;this._xhr.abort();}catch{}}else{cov_220zhfwpnm().b[123][1]++;}cov_220zhfwpnm().s[299]++;(cov_220zhfwpnm().b[124][0]++,typeof document<"u")&&(cov_220zhfwpnm().b[124][1]++,delete i.requests[this._index]),this._xhr=null;}else{cov_220zhfwpnm().b[121][1]++;}}_onLoad(){cov_220zhfwpnm().f[88]++;let t=(cov_220zhfwpnm().s[300]++,this._xhr.responseText);cov_220zhfwpnm().s[301]++;(cov_220zhfwpnm().b[125][0]++,t!==null)&&(cov_220zhfwpnm().b[125][1]++,this.emitReserved("data",t),this.emitReserved("success"),this._cleanup());}abort(){cov_220zhfwpnm().f[89]++;cov_220zhfwpnm().s[302]++;this._cleanup();}}cov_220zhfwpnm().s[303]++;return i.requestsCount=0,i.requests={},i;})());cov_220zhfwpnm().s[304]++;if(typeof document<"u"){cov_220zhfwpnm().b[126][0]++;cov_220zhfwpnm().s[305]++;if(typeof attachEvent=="function"){cov_220zhfwpnm().b[127][0]++;cov_220zhfwpnm().s[306]++;attachEvent("onunload",Zt);}else{cov_220zhfwpnm().b[127][1]++;cov_220zhfwpnm().s[307]++;if(typeof addEventListener=="function"){cov_220zhfwpnm().b[128][0]++;let i=(cov_220zhfwpnm().s[308]++,"onpagehide"in u?(cov_220zhfwpnm().b[129][0]++,"pagehide"):(cov_220zhfwpnm().b[129][1]++,"unload"));cov_220zhfwpnm().s[309]++;addEventListener(i,Zt,!1);}else{cov_220zhfwpnm().b[128][1]++;}}}else{cov_220zhfwpnm().b[126][1]++;}function Zt(){cov_220zhfwpnm().f[90]++;cov_220zhfwpnm().s[310]++;for(let i in Q.requests){cov_220zhfwpnm().s[311]++;(cov_220zhfwpnm().b[130][0]++,Q.requests.hasOwnProperty(i))&&(cov_220zhfwpnm().b[130][1]++,Q.requests[i].abort());}}cov_220zhfwpnm().s[315]++;var we=(cov_220zhfwpnm().s[312]++,function(){cov_220zhfwpnm().f[91]++;let i=(cov_220zhfwpnm().s[313]++,te({xdomain:!1}));cov_220zhfwpnm().s[314]++;return(cov_220zhfwpnm().b[131][0]++,i)&&(cov_220zhfwpnm().b[131][1]++,i.responseType!==null);}()),T=class extends ft{constructor(e){cov_220zhfwpnm().f[92]++;cov_220zhfwpnm().s[316]++;super(e);let t=(cov_220zhfwpnm().s[317]++,(cov_220zhfwpnm().b[132][0]++,e)&&(cov_220zhfwpnm().b[132][1]++,e.forceBase64));cov_220zhfwpnm().s[318]++;this.supportsBinary=(cov_220zhfwpnm().b[133][0]++,we)&&(cov_220zhfwpnm().b[133][1]++,!t);}request(e=(cov_220zhfwpnm().b[134][0]++,{})){cov_220zhfwpnm().f[93]++;cov_220zhfwpnm().s[319]++;return Object.assign(e,{xd:this.xd},this.opts),new Q(te,this.uri(),e);}};function te(i){cov_220zhfwpnm().f[94]++;let e=(cov_220zhfwpnm().s[320]++,i.xdomain);cov_220zhfwpnm().s[321]++;try{cov_220zhfwpnm().s[322]++;if((cov_220zhfwpnm().b[136][0]++,typeof XMLHttpRequest<"u")&&((cov_220zhfwpnm().b[136][1]++,!e)||(cov_220zhfwpnm().b[136][2]++,Qt))){cov_220zhfwpnm().b[135][0]++;cov_220zhfwpnm().s[323]++;return new XMLHttpRequest();}else{cov_220zhfwpnm().b[135][1]++;}}catch{}cov_220zhfwpnm().s[324]++;if(!e){cov_220zhfwpnm().b[137][0]++;cov_220zhfwpnm().s[325]++;try{cov_220zhfwpnm().s[326]++;return new u[["Active"].concat("Object").join("X")]("Microsoft.XMLHTTP");}catch{}}else{cov_220zhfwpnm().b[137][1]++;}}cov_220zhfwpnm().s[328]++;cov_220zhfwpnm().s[358]++;var ee=(cov_220zhfwpnm().s[327]++,(cov_220zhfwpnm().b[138][0]++,typeof navigator<"u")&&(cov_220zhfwpnm().b[138][1]++,typeof navigator.product=="string")&&(cov_220zhfwpnm().b[138][2]++,navigator.product.toLowerCase()==="reactnative")),ut=class extends b{get name(){cov_220zhfwpnm().f[95]++;cov_220zhfwpnm().s[329]++;return"websocket";}doOpen(){cov_220zhfwpnm().f[96]++;let e=(cov_220zhfwpnm().s[330]++,this.uri()),t=(cov_220zhfwpnm().s[331]++,this.opts.protocols),r=(cov_220zhfwpnm().s[332]++,ee?(cov_220zhfwpnm().b[139][0]++,{}):(cov_220zhfwpnm().b[139][1]++,Y(this.opts,"agent","perMessageDeflate","pfx","key","passphrase","cert","ca","ciphers","rejectUnauthorized","localAddress","protocolVersion","origin","maxPayload","family","checkServerIdentity")));cov_220zhfwpnm().s[333]++;(cov_220zhfwpnm().b[140][0]++,this.opts.extraHeaders)&&(cov_220zhfwpnm().b[140][1]++,r.headers=this.opts.extraHeaders);cov_220zhfwpnm().s[334]++;try{cov_220zhfwpnm().s[335]++;this.ws=this.createSocket(e,t,r);}catch(s){cov_220zhfwpnm().s[336]++;return this.emitReserved("error",s);}cov_220zhfwpnm().s[337]++;this.ws.binaryType=this.socket.binaryType,this.addEventListeners();}addEventListeners(){cov_220zhfwpnm().f[97]++;cov_220zhfwpnm().s[338]++;this.ws.onopen=()=>{cov_220zhfwpnm().f[98]++;cov_220zhfwpnm().s[339]++;(cov_220zhfwpnm().b[141][0]++,this.opts.autoUnref)&&(cov_220zhfwpnm().b[141][1]++,this.ws._socket.unref()),this.onOpen();},this.ws.onclose=e=>{cov_220zhfwpnm().f[99]++;cov_220zhfwpnm().s[340]++;return this.onClose({description:"websocket connection closed",context:e});},this.ws.onmessage=e=>{cov_220zhfwpnm().f[100]++;cov_220zhfwpnm().s[341]++;return this.onData(e.data);},this.ws.onerror=e=>{cov_220zhfwpnm().f[101]++;cov_220zhfwpnm().s[342]++;return this.onError("websocket error",e);};}write(e){cov_220zhfwpnm().f[102]++;cov_220zhfwpnm().s[343]++;this.writable=!1;cov_220zhfwpnm().s[344]++;for(let t=(cov_220zhfwpnm().s[345]++,0);t{cov_220zhfwpnm().f[103]++;cov_220zhfwpnm().s[349]++;try{cov_220zhfwpnm().s[350]++;this.doWrite(r,n);}catch{}cov_220zhfwpnm().s[351]++;(cov_220zhfwpnm().b[142][0]++,s)&&(cov_220zhfwpnm().b[142][1]++,g(()=>{cov_220zhfwpnm().f[104]++;cov_220zhfwpnm().s[352]++;this.writable=!0,this.emitReserved("drain");},this.setTimeoutFn));});}}doClose(){cov_220zhfwpnm().f[105]++;cov_220zhfwpnm().s[353]++;(cov_220zhfwpnm().b[143][0]++,typeof this.ws<"u")&&(cov_220zhfwpnm().b[143][1]++,this.ws.onerror=()=>{cov_220zhfwpnm().f[106]++;},this.ws.close(),this.ws=null);}uri(){cov_220zhfwpnm().f[107]++;let e=(cov_220zhfwpnm().s[354]++,this.opts.secure?(cov_220zhfwpnm().b[144][0]++,"wss"):(cov_220zhfwpnm().b[144][1]++,"ws")),t=(cov_220zhfwpnm().s[355]++,(cov_220zhfwpnm().b[145][0]++,this.query)||(cov_220zhfwpnm().b[145][1]++,{}));cov_220zhfwpnm().s[356]++;return(cov_220zhfwpnm().b[146][0]++,this.opts.timestampRequests)&&(cov_220zhfwpnm().b[146][1]++,t[this.opts.timestampParam]=X()),(cov_220zhfwpnm().b[147][0]++,this.supportsBinary)||(cov_220zhfwpnm().b[147][1]++,t.b64=1),this.createUri(e,t);}},lt=(cov_220zhfwpnm().s[357]++,(cov_220zhfwpnm().b[148][0]++,u.WebSocket)||(cov_220zhfwpnm().b[148][1]++,u.MozWebSocket)),A=class extends ut{createSocket(e,t,r){cov_220zhfwpnm().f[108]++;cov_220zhfwpnm().s[359]++;return ee?(cov_220zhfwpnm().b[149][0]++,new lt(e,t,r)):(cov_220zhfwpnm().b[149][1]++,t?(cov_220zhfwpnm().b[150][0]++,new lt(e,t)):(cov_220zhfwpnm().b[150][1]++,new lt(e)));}doWrite(e,t){cov_220zhfwpnm().f[109]++;cov_220zhfwpnm().s[360]++;this.ws.send(t);}};cov_220zhfwpnm().s[361]++;var S=class extends b{get name(){cov_220zhfwpnm().f[110]++;cov_220zhfwpnm().s[362]++;return"webtransport";}doOpen(){cov_220zhfwpnm().f[111]++;cov_220zhfwpnm().s[363]++;try{cov_220zhfwpnm().s[364]++;this._transport=new WebTransport(this.createUri("https"),this.opts.transportOptions[this.name]);}catch(e){cov_220zhfwpnm().s[365]++;return this.emitReserved("error",e);}cov_220zhfwpnm().s[366]++;this._transport.closed.then(()=>{cov_220zhfwpnm().f[112]++;cov_220zhfwpnm().s[367]++;this.onClose();}).catch(e=>{cov_220zhfwpnm().f[113]++;cov_220zhfwpnm().s[368]++;this.onError("webtransport error",e);}),this._transport.ready.then(()=>{cov_220zhfwpnm().f[114]++;cov_220zhfwpnm().s[369]++;this._transport.createBidirectionalStream().then(e=>{cov_220zhfwpnm().f[115]++;let t=(cov_220zhfwpnm().s[370]++,Jt(Number.MAX_SAFE_INTEGER,this.socket.binaryType)),r=(cov_220zhfwpnm().s[371]++,e.readable.pipeThrough(t).getReader()),s=(cov_220zhfwpnm().s[372]++,$t());cov_220zhfwpnm().s[373]++;s.readable.pipeTo(e.writable),this._writer=s.writable.getWriter();cov_220zhfwpnm().s[374]++;let n=()=>{cov_220zhfwpnm().f[116]++;cov_220zhfwpnm().s[375]++;r.read().then(({done:a,value:h})=>{cov_220zhfwpnm().f[117]++;cov_220zhfwpnm().s[376]++;(cov_220zhfwpnm().b[151][0]++,a)||(cov_220zhfwpnm().b[151][1]++,this.onPacket(h),n());}).catch(a=>{cov_220zhfwpnm().f[118]++;});};cov_220zhfwpnm().s[377]++;n();let o=(cov_220zhfwpnm().s[378]++,{type:"open"});cov_220zhfwpnm().s[379]++;(cov_220zhfwpnm().b[152][0]++,this.query.sid)&&(cov_220zhfwpnm().b[152][1]++,o.data=`{"sid":"${this.query.sid}"}`),this._writer.write(o).then(()=>{cov_220zhfwpnm().f[119]++;cov_220zhfwpnm().s[380]++;return this.onOpen();});});});}write(e){cov_220zhfwpnm().f[120]++;cov_220zhfwpnm().s[381]++;this.writable=!1;cov_220zhfwpnm().s[382]++;for(let t=(cov_220zhfwpnm().s[383]++,0);t{cov_220zhfwpnm().f[121]++;cov_220zhfwpnm().s[387]++;(cov_220zhfwpnm().b[153][0]++,s)&&(cov_220zhfwpnm().b[153][1]++,g(()=>{cov_220zhfwpnm().f[122]++;cov_220zhfwpnm().s[388]++;this.writable=!0,this.emitReserved("drain");},this.setTimeoutFn));});}}doClose(){cov_220zhfwpnm().f[123]++;var e;cov_220zhfwpnm().s[389]++;(cov_220zhfwpnm().b[154][0]++,(e=this._transport)===null)||(cov_220zhfwpnm().b[154][1]++,e===void 0)||(cov_220zhfwpnm().b[154][2]++,e.close());}};var pt=(cov_220zhfwpnm().s[390]++,{websocket:A,webtransport:S,polling:T});var ve=(cov_220zhfwpnm().s[391]++,/^(?:(?![^:@\/?#]+:[^:@\/]*@)(http|https|ws|wss):\/\/)?((?:(([^:@\/?#]*)(?::([^:@\/?#]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/),Re=(cov_220zhfwpnm().s[392]++,["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"]);function C(i){cov_220zhfwpnm().f[124]++;cov_220zhfwpnm().s[393]++;if(i.length>8e3){cov_220zhfwpnm().b[155][0]++;cov_220zhfwpnm().s[394]++;throw"URI too long";}else{cov_220zhfwpnm().b[155][1]++;}let e=(cov_220zhfwpnm().s[395]++,i),t=(cov_220zhfwpnm().s[396]++,i.indexOf("[")),r=(cov_220zhfwpnm().s[397]++,i.indexOf("]"));cov_220zhfwpnm().s[398]++;(cov_220zhfwpnm().b[156][0]++,t!=-1)&&(cov_220zhfwpnm().b[156][1]++,r!=-1)&&(cov_220zhfwpnm().b[156][2]++,i=i.substring(0,t)+i.substring(t,r).replace(/:/g,";")+i.substring(r,i.length));let s=(cov_220zhfwpnm().s[399]++,ve.exec((cov_220zhfwpnm().b[157][0]++,i)||(cov_220zhfwpnm().b[157][1]++,""))),n=(cov_220zhfwpnm().s[400]++,{}),o=(cov_220zhfwpnm().s[401]++,14);cov_220zhfwpnm().s[402]++;for(;o--;){cov_220zhfwpnm().s[403]++;n[Re[o]]=(cov_220zhfwpnm().b[158][0]++,s[o])||(cov_220zhfwpnm().b[158][1]++,"");}cov_220zhfwpnm().s[404]++;return(cov_220zhfwpnm().b[159][0]++,t!=-1)&&(cov_220zhfwpnm().b[159][1]++,r!=-1)&&(cov_220zhfwpnm().b[159][2]++,n.source=e,n.host=n.host.substring(1,n.host.length-1).replace(/;/g,":"),n.authority=n.authority.replace("[","").replace("]","").replace(/;/g,":"),n.ipv6uri=!0),n.pathNames=Te(n,n.path),n.queryKey=Ae(n,n.query),n;}function Te(i,e){cov_220zhfwpnm().f[125]++;let t=(cov_220zhfwpnm().s[405]++,/\/{2,9}/g),r=(cov_220zhfwpnm().s[406]++,e.replace(t,"/").split("/"));cov_220zhfwpnm().s[407]++;return((cov_220zhfwpnm().b[160][0]++,e.slice(0,1)=="/")||(cov_220zhfwpnm().b[160][1]++,e.length===0))&&(cov_220zhfwpnm().b[160][2]++,r.splice(0,1)),(cov_220zhfwpnm().b[161][0]++,e.slice(-1)=="/")&&(cov_220zhfwpnm().b[161][1]++,r.splice(r.length-1,1)),r;}function Ae(i,e){cov_220zhfwpnm().f[126]++;let t=(cov_220zhfwpnm().s[408]++,{});cov_220zhfwpnm().s[409]++;return e.replace(/(?:^|&)([^&=]*)=?([^&]*)/g,function(r,s,n){cov_220zhfwpnm().f[127]++;cov_220zhfwpnm().s[410]++;(cov_220zhfwpnm().b[162][0]++,s)&&(cov_220zhfwpnm().b[162][1]++,t[s]=n);}),t;}var dt=(cov_220zhfwpnm().s[411]++,(cov_220zhfwpnm().b[163][0]++,typeof addEventListener=="function")&&(cov_220zhfwpnm().b[163][1]++,typeof removeEventListener=="function")),Z=(cov_220zhfwpnm().s[412]++,[]);cov_220zhfwpnm().s[413]++;(cov_220zhfwpnm().b[164][0]++,dt)&&(cov_220zhfwpnm().b[164][1]++,addEventListener("offline",()=>{cov_220zhfwpnm().f[128]++;cov_220zhfwpnm().s[414]++;Z.forEach(i=>{cov_220zhfwpnm().f[129]++;cov_220zhfwpnm().s[415]++;return i();});},!1));cov_220zhfwpnm().s[500]++;cov_220zhfwpnm().s[536]++;var tt=(cov_220zhfwpnm().s[416]++,(()=>{cov_220zhfwpnm().f[130]++;class i extends f{constructor(t,r){cov_220zhfwpnm().f[131]++;cov_220zhfwpnm().s[417]++;if(super(),this.binaryType=Ht,this.writeBuffer=[],this._prevBufferLen=0,this._pingInterval=-1,this._pingTimeout=-1,this._maxPayload=-1,this._pingTimeoutTime=1/0,(cov_220zhfwpnm().b[166][0]++,t)&&(cov_220zhfwpnm().b[166][1]++,typeof t=="object")&&(cov_220zhfwpnm().b[166][2]++,r=t,t=null),t){cov_220zhfwpnm().b[165][0]++;let s=(cov_220zhfwpnm().s[418]++,C(t));cov_220zhfwpnm().s[419]++;r.hostname=s.host,r.secure=(cov_220zhfwpnm().b[167][0]++,s.protocol==="https")||(cov_220zhfwpnm().b[167][1]++,s.protocol==="wss"),r.port=s.port,(cov_220zhfwpnm().b[168][0]++,s.query)&&(cov_220zhfwpnm().b[168][1]++,r.query=s.query);}else{cov_220zhfwpnm().b[165][1]++;cov_220zhfwpnm().s[420]++;(cov_220zhfwpnm().b[169][0]++,r.host)&&(cov_220zhfwpnm().b[169][1]++,r.hostname=C(r.host).host);}cov_220zhfwpnm().s[421]++;_(this,r),this.secure=r.secure!=null?(cov_220zhfwpnm().b[170][0]++,r.secure):(cov_220zhfwpnm().b[170][1]++,(cov_220zhfwpnm().b[171][0]++,typeof location<"u")&&(cov_220zhfwpnm().b[171][1]++,location.protocol==="https:")),(cov_220zhfwpnm().b[172][0]++,r.hostname)&&(cov_220zhfwpnm().b[172][1]++,!r.port)&&(cov_220zhfwpnm().b[172][2]++,r.port=this.secure?(cov_220zhfwpnm().b[173][0]++,"443"):(cov_220zhfwpnm().b[173][1]++,"80")),this.hostname=(cov_220zhfwpnm().b[174][0]++,r.hostname)||(cov_220zhfwpnm().b[174][1]++,typeof location<"u"?(cov_220zhfwpnm().b[175][0]++,location.hostname):(cov_220zhfwpnm().b[175][1]++,"localhost")),this.port=(cov_220zhfwpnm().b[176][0]++,r.port)||(cov_220zhfwpnm().b[176][1]++,(cov_220zhfwpnm().b[178][0]++,typeof location<"u")&&(cov_220zhfwpnm().b[178][1]++,location.port)?(cov_220zhfwpnm().b[177][0]++,location.port):(cov_220zhfwpnm().b[177][1]++,this.secure?(cov_220zhfwpnm().b[179][0]++,"443"):(cov_220zhfwpnm().b[179][1]++,"80"))),this.transports=[],this._transportsByName={},r.transports.forEach(s=>{cov_220zhfwpnm().f[132]++;let n=(cov_220zhfwpnm().s[422]++,s.prototype.name);cov_220zhfwpnm().s[423]++;this.transports.push(n),this._transportsByName[n]=s;}),this.opts=Object.assign({path:"/engine.io",agent:!1,withCredentials:!1,upgrade:!0,timestampParam:"t",rememberUpgrade:!1,addTrailingSlash:!0,rejectUnauthorized:!0,perMessageDeflate:{threshold:1024},transportOptions:{},closeOnBeforeunload:!1},r),this.opts.path=this.opts.path.replace(/\/$/,"")+(this.opts.addTrailingSlash?(cov_220zhfwpnm().b[180][0]++,"/"):(cov_220zhfwpnm().b[180][1]++,"")),(cov_220zhfwpnm().b[181][0]++,typeof this.opts.query=="string")&&(cov_220zhfwpnm().b[181][1]++,this.opts.query=Xt(this.opts.query)),(cov_220zhfwpnm().b[182][0]++,dt)&&(cov_220zhfwpnm().b[182][1]++,(cov_220zhfwpnm().b[183][0]++,this.opts.closeOnBeforeunload)&&(cov_220zhfwpnm().b[183][1]++,this._beforeunloadEventListener=()=>{cov_220zhfwpnm().f[133]++;cov_220zhfwpnm().s[424]++;(cov_220zhfwpnm().b[184][0]++,this.transport)&&(cov_220zhfwpnm().b[184][1]++,this.transport.removeAllListeners(),this.transport.close());},addEventListener("beforeunload",this._beforeunloadEventListener,!1)),(cov_220zhfwpnm().b[185][0]++,this.hostname!=="localhost")&&(cov_220zhfwpnm().b[185][1]++,this._offlineEventListener=()=>{cov_220zhfwpnm().f[134]++;cov_220zhfwpnm().s[425]++;this._onClose("transport close",{description:"network connection lost"});},Z.push(this._offlineEventListener))),(cov_220zhfwpnm().b[186][0]++,this.opts.withCredentials)&&(cov_220zhfwpnm().b[186][1]++,this._cookieJar=void 0),this._open();}createTransport(t){cov_220zhfwpnm().f[135]++;let r=(cov_220zhfwpnm().s[426]++,Object.assign({},this.opts.query));cov_220zhfwpnm().s[427]++;r.EIO=ht,r.transport=t,(cov_220zhfwpnm().b[187][0]++,this.id)&&(cov_220zhfwpnm().b[187][1]++,r.sid=this.id);let s=(cov_220zhfwpnm().s[428]++,Object.assign({},this.opts,{query:r,socket:this,hostname:this.hostname,secure:this.secure,port:this.port},this.opts.transportOptions[t]));cov_220zhfwpnm().s[429]++;return new this._transportsByName[t](s);}_open(){cov_220zhfwpnm().f[136]++;cov_220zhfwpnm().s[430]++;if(this.transports.length===0){cov_220zhfwpnm().b[188][0]++;cov_220zhfwpnm().s[431]++;this.setTimeoutFn(()=>{cov_220zhfwpnm().f[137]++;cov_220zhfwpnm().s[432]++;this.emitReserved("error","No transports available");},0);cov_220zhfwpnm().s[433]++;return;}else{cov_220zhfwpnm().b[188][1]++;}let t=(cov_220zhfwpnm().s[434]++,(cov_220zhfwpnm().b[190][0]++,this.opts.rememberUpgrade)&&(cov_220zhfwpnm().b[190][1]++,i.priorWebsocketSuccess)&&(cov_220zhfwpnm().b[190][2]++,this.transports.indexOf("websocket")!==-1)?(cov_220zhfwpnm().b[189][0]++,"websocket"):(cov_220zhfwpnm().b[189][1]++,this.transports[0]));cov_220zhfwpnm().s[435]++;this.readyState="opening";let r=(cov_220zhfwpnm().s[436]++,this.createTransport(t));cov_220zhfwpnm().s[437]++;r.open(),this.setTransport(r);}setTransport(t){cov_220zhfwpnm().f[138]++;cov_220zhfwpnm().s[438]++;(cov_220zhfwpnm().b[191][0]++,this.transport)&&(cov_220zhfwpnm().b[191][1]++,this.transport.removeAllListeners()),this.transport=t,t.on("drain",this._onDrain.bind(this)).on("packet",this._onPacket.bind(this)).on("error",this._onError.bind(this)).on("close",r=>{cov_220zhfwpnm().f[139]++;cov_220zhfwpnm().s[439]++;return this._onClose("transport close",r);});}onOpen(){cov_220zhfwpnm().f[140]++;cov_220zhfwpnm().s[440]++;this.readyState="open",i.priorWebsocketSuccess=this.transport.name==="websocket",this.emitReserved("open"),this.flush();}_onPacket(t){cov_220zhfwpnm().f[141]++;cov_220zhfwpnm().s[441]++;if((cov_220zhfwpnm().b[193][0]++,this.readyState==="opening")||(cov_220zhfwpnm().b[193][1]++,this.readyState==="open")||(cov_220zhfwpnm().b[193][2]++,this.readyState==="closing")){cov_220zhfwpnm().b[192][0]++;cov_220zhfwpnm().s[442]++;switch(this.emitReserved("packet",t),this.emitReserved("heartbeat"),t.type){case"open":cov_220zhfwpnm().b[194][0]++;cov_220zhfwpnm().s[443]++;this.onHandshake(JSON.parse(t.data));cov_220zhfwpnm().s[444]++;break;case"ping":cov_220zhfwpnm().b[194][1]++;cov_220zhfwpnm().s[445]++;this._sendPacket("pong"),this.emitReserved("ping"),this.emitReserved("pong"),this._resetPingTimeout();cov_220zhfwpnm().s[446]++;break;case"error":cov_220zhfwpnm().b[194][2]++;let r=(cov_220zhfwpnm().s[447]++,new Error("server error"));cov_220zhfwpnm().s[448]++;r.code=t.data,this._onError(r);cov_220zhfwpnm().s[449]++;break;case"message":cov_220zhfwpnm().b[194][3]++;cov_220zhfwpnm().s[450]++;this.emitReserved("data",t.data),this.emitReserved("message",t.data);cov_220zhfwpnm().s[451]++;break;}}else{cov_220zhfwpnm().b[192][1]++;}}onHandshake(t){cov_220zhfwpnm().f[142]++;cov_220zhfwpnm().s[452]++;this.emitReserved("handshake",t),this.id=t.sid,this.transport.query.sid=t.sid,this._pingInterval=t.pingInterval,this._pingTimeout=t.pingTimeout,this._maxPayload=t.maxPayload,this.onOpen(),(cov_220zhfwpnm().b[195][0]++,this.readyState!=="closed")&&(cov_220zhfwpnm().b[195][1]++,this._resetPingTimeout());}_resetPingTimeout(){cov_220zhfwpnm().f[143]++;cov_220zhfwpnm().s[453]++;this.clearTimeoutFn(this._pingTimeoutTimer);let t=(cov_220zhfwpnm().s[454]++,this._pingInterval+this._pingTimeout);cov_220zhfwpnm().s[455]++;this._pingTimeoutTime=Date.now()+t,this._pingTimeoutTimer=this.setTimeoutFn(()=>{cov_220zhfwpnm().f[144]++;cov_220zhfwpnm().s[456]++;this._onClose("ping timeout");},t),(cov_220zhfwpnm().b[196][0]++,this.opts.autoUnref)&&(cov_220zhfwpnm().b[196][1]++,this._pingTimeoutTimer.unref());}_onDrain(){cov_220zhfwpnm().f[145]++;cov_220zhfwpnm().s[457]++;this.writeBuffer.splice(0,this._prevBufferLen),this._prevBufferLen=0,this.writeBuffer.length===0?(cov_220zhfwpnm().b[197][0]++,this.emitReserved("drain")):(cov_220zhfwpnm().b[197][1]++,this.flush());}flush(){cov_220zhfwpnm().f[146]++;cov_220zhfwpnm().s[458]++;if((cov_220zhfwpnm().b[199][0]++,this.readyState!=="closed")&&(cov_220zhfwpnm().b[199][1]++,this.transport.writable)&&(cov_220zhfwpnm().b[199][2]++,!this.upgrading)&&(cov_220zhfwpnm().b[199][3]++,this.writeBuffer.length)){cov_220zhfwpnm().b[198][0]++;let t=(cov_220zhfwpnm().s[459]++,this._getWritablePackets());cov_220zhfwpnm().s[460]++;this.transport.send(t),this._prevBufferLen=t.length,this.emitReserved("flush");}else{cov_220zhfwpnm().b[198][1]++;}}_getWritablePackets(){cov_220zhfwpnm().f[147]++;cov_220zhfwpnm().s[461]++;if(!((cov_220zhfwpnm().b[201][0]++,this._maxPayload)&&(cov_220zhfwpnm().b[201][1]++,this.transport.name==="polling")&&(cov_220zhfwpnm().b[201][2]++,this.writeBuffer.length>1))){cov_220zhfwpnm().b[200][0]++;cov_220zhfwpnm().s[462]++;return this.writeBuffer;}else{cov_220zhfwpnm().b[200][1]++;}let r=(cov_220zhfwpnm().s[463]++,1);cov_220zhfwpnm().s[464]++;for(let s=(cov_220zhfwpnm().s[465]++,0);s0)&&(cov_220zhfwpnm().b[204][1]++,r>this._maxPayload)){cov_220zhfwpnm().b[202][0]++;cov_220zhfwpnm().s[468]++;return this.writeBuffer.slice(0,s);}else{cov_220zhfwpnm().b[202][1]++;}cov_220zhfwpnm().s[469]++;r+=2;}cov_220zhfwpnm().s[470]++;return this.writeBuffer;}_hasPingExpired(){cov_220zhfwpnm().f[148]++;cov_220zhfwpnm().s[471]++;if(!this._pingTimeoutTime){cov_220zhfwpnm().b[205][0]++;cov_220zhfwpnm().s[472]++;return!0;}else{cov_220zhfwpnm().b[205][1]++;}let t=(cov_220zhfwpnm().s[473]++,Date.now()>this._pingTimeoutTime);cov_220zhfwpnm().s[474]++;return(cov_220zhfwpnm().b[206][0]++,t)&&(cov_220zhfwpnm().b[206][1]++,this._pingTimeoutTime=0,g(()=>{cov_220zhfwpnm().f[149]++;cov_220zhfwpnm().s[475]++;this._onClose("ping timeout");},this.setTimeoutFn)),t;}write(t,r,s){cov_220zhfwpnm().f[150]++;cov_220zhfwpnm().s[476]++;return this._sendPacket("message",t,r,s),this;}send(t,r,s){cov_220zhfwpnm().f[151]++;cov_220zhfwpnm().s[477]++;return this._sendPacket("message",t,r,s),this;}_sendPacket(t,r,s,n){cov_220zhfwpnm().f[152]++;cov_220zhfwpnm().s[478]++;if((cov_220zhfwpnm().b[208][0]++,typeof r=="function")&&(cov_220zhfwpnm().b[208][1]++,n=r,r=void 0),(cov_220zhfwpnm().b[209][0]++,typeof s=="function")&&(cov_220zhfwpnm().b[209][1]++,n=s,s=null),(cov_220zhfwpnm().b[210][0]++,this.readyState==="closing")||(cov_220zhfwpnm().b[210][1]++,this.readyState==="closed")){cov_220zhfwpnm().b[207][0]++;cov_220zhfwpnm().s[479]++;return;}else{cov_220zhfwpnm().b[207][1]++;}cov_220zhfwpnm().s[480]++;s=(cov_220zhfwpnm().b[211][0]++,s)||(cov_220zhfwpnm().b[211][1]++,{}),s.compress=s.compress!==!1;let o=(cov_220zhfwpnm().s[481]++,{type:t,data:r,options:s});cov_220zhfwpnm().s[482]++;this.emitReserved("packetCreate",o),this.writeBuffer.push(o),(cov_220zhfwpnm().b[212][0]++,n)&&(cov_220zhfwpnm().b[212][1]++,this.once("flush",n)),this.flush();}close(){cov_220zhfwpnm().f[153]++;cov_220zhfwpnm().s[483]++;cov_220zhfwpnm().s[485]++;cov_220zhfwpnm().s[487]++;let t=()=>{cov_220zhfwpnm().f[154]++;cov_220zhfwpnm().s[484]++;this._onClose("forced close"),this.transport.close();},r=()=>{cov_220zhfwpnm().f[155]++;cov_220zhfwpnm().s[486]++;this.off("upgrade",r),this.off("upgradeError",r),t();},s=()=>{cov_220zhfwpnm().f[156]++;cov_220zhfwpnm().s[488]++;this.once("upgrade",r),this.once("upgradeError",r);};cov_220zhfwpnm().s[489]++;return((cov_220zhfwpnm().b[213][0]++,this.readyState==="opening")||(cov_220zhfwpnm().b[213][1]++,this.readyState==="open"))&&(cov_220zhfwpnm().b[213][2]++,this.readyState="closing",this.writeBuffer.length?(cov_220zhfwpnm().b[214][0]++,this.once("drain",()=>{cov_220zhfwpnm().f[157]++;cov_220zhfwpnm().s[490]++;this.upgrading?(cov_220zhfwpnm().b[215][0]++,s()):(cov_220zhfwpnm().b[215][1]++,t());})):(cov_220zhfwpnm().b[214][1]++,this.upgrading?(cov_220zhfwpnm().b[216][0]++,s()):(cov_220zhfwpnm().b[216][1]++,t()))),this;}_onError(t){cov_220zhfwpnm().f[158]++;cov_220zhfwpnm().s[491]++;if(i.priorWebsocketSuccess=!1,(cov_220zhfwpnm().b[218][0]++,this.opts.tryAllTransports)&&(cov_220zhfwpnm().b[218][1]++,this.transports.length>1)&&(cov_220zhfwpnm().b[218][2]++,this.readyState==="opening")){cov_220zhfwpnm().b[217][0]++;cov_220zhfwpnm().s[492]++;return this.transports.shift(),this._open();}else{cov_220zhfwpnm().b[217][1]++;}cov_220zhfwpnm().s[493]++;this.emitReserved("error",t),this._onClose("transport error",t);}_onClose(t,r){cov_220zhfwpnm().f[159]++;cov_220zhfwpnm().s[494]++;if((cov_220zhfwpnm().b[220][0]++,this.readyState==="opening")||(cov_220zhfwpnm().b[220][1]++,this.readyState==="open")||(cov_220zhfwpnm().b[220][2]++,this.readyState==="closing")){cov_220zhfwpnm().b[219][0]++;cov_220zhfwpnm().s[495]++;if(this.clearTimeoutFn(this._pingTimeoutTimer),this.transport.removeAllListeners("close"),this.transport.close(),this.transport.removeAllListeners(),(cov_220zhfwpnm().b[222][0]++,dt)&&(cov_220zhfwpnm().b[222][1]++,(cov_220zhfwpnm().b[223][0]++,this._beforeunloadEventListener)&&(cov_220zhfwpnm().b[223][1]++,removeEventListener("beforeunload",this._beforeunloadEventListener,!1)),this._offlineEventListener)){cov_220zhfwpnm().b[221][0]++;let s=(cov_220zhfwpnm().s[496]++,Z.indexOf(this._offlineEventListener));cov_220zhfwpnm().s[497]++;(cov_220zhfwpnm().b[224][0]++,s!==-1)&&(cov_220zhfwpnm().b[224][1]++,Z.splice(s,1));}else{cov_220zhfwpnm().b[221][1]++;}cov_220zhfwpnm().s[498]++;this.readyState="closed",this.id=null,this.emitReserved("close",t,r),this.writeBuffer=[],this._prevBufferLen=0;}else{cov_220zhfwpnm().b[219][1]++;}}}cov_220zhfwpnm().s[499]++;return i.protocol=ht,i;})()),et=class extends tt{constructor(){cov_220zhfwpnm().f[160]++;cov_220zhfwpnm().s[501]++;super(...arguments),this._upgrades=[];}onOpen(){cov_220zhfwpnm().f[161]++;cov_220zhfwpnm().s[502]++;if(super.onOpen(),(cov_220zhfwpnm().b[226][0]++,this.readyState==="open")&&(cov_220zhfwpnm().b[226][1]++,this.opts.upgrade)){cov_220zhfwpnm().b[225][0]++;cov_220zhfwpnm().s[503]++;for(let e=(cov_220zhfwpnm().s[504]++,0);e{cov_220zhfwpnm().f[163]++;cov_220zhfwpnm().s[510]++;(cov_220zhfwpnm().b[227][0]++,r)||(cov_220zhfwpnm().b[227][1]++,t.send([{type:"ping",data:"probe"}]),t.once("packet",E=>{cov_220zhfwpnm().f[164]++;cov_220zhfwpnm().s[511]++;if(!r){cov_220zhfwpnm().b[228][0]++;cov_220zhfwpnm().s[512]++;if((cov_220zhfwpnm().b[230][0]++,E.type==="pong")&&(cov_220zhfwpnm().b[230][1]++,E.data==="probe")){cov_220zhfwpnm().b[229][0]++;cov_220zhfwpnm().s[513]++;if(this.upgrading=!0,this.emitReserved("upgrading",t),!t){cov_220zhfwpnm().b[231][0]++;cov_220zhfwpnm().s[514]++;return;}else{cov_220zhfwpnm().b[231][1]++;}cov_220zhfwpnm().s[515]++;tt.priorWebsocketSuccess=t.name==="websocket",this.transport.pause(()=>{cov_220zhfwpnm().f[165]++;cov_220zhfwpnm().s[516]++;(cov_220zhfwpnm().b[232][0]++,r)||(cov_220zhfwpnm().b[232][1]++,this.readyState!=="closed")&&(cov_220zhfwpnm().b[232][2]++,d(),this.setTransport(t),t.send([{type:"upgrade"}]),this.emitReserved("upgrade",t),t=null,this.upgrading=!1,this.flush());});}else{cov_220zhfwpnm().b[229][1]++;let L=(cov_220zhfwpnm().s[517]++,new Error("probe error"));cov_220zhfwpnm().s[518]++;L.transport=t.name,this.emitReserved("upgradeError",L);}}else{cov_220zhfwpnm().b[228][1]++;}}));};function n(){cov_220zhfwpnm().f[166]++;cov_220zhfwpnm().s[519]++;(cov_220zhfwpnm().b[233][0]++,r)||(cov_220zhfwpnm().b[233][1]++,r=!0,d(),t.close(),t=null);}cov_220zhfwpnm().s[520]++;let o=E=>{cov_220zhfwpnm().f[167]++;let L=(cov_220zhfwpnm().s[521]++,new Error("probe error: "+E));cov_220zhfwpnm().s[522]++;L.transport=t.name,n(),this.emitReserved("upgradeError",L);};function a(){cov_220zhfwpnm().f[168]++;cov_220zhfwpnm().s[523]++;o("transport closed");}function h(){cov_220zhfwpnm().f[169]++;cov_220zhfwpnm().s[524]++;o("socket closed");}function y(E){cov_220zhfwpnm().f[170]++;cov_220zhfwpnm().s[525]++;(cov_220zhfwpnm().b[234][0]++,t)&&(cov_220zhfwpnm().b[234][1]++,E.name!==t.name)&&(cov_220zhfwpnm().b[234][2]++,n());}cov_220zhfwpnm().s[526]++;let d=()=>{cov_220zhfwpnm().f[171]++;cov_220zhfwpnm().s[527]++;t.removeListener("open",s),t.removeListener("error",o),t.removeListener("close",a),this.off("close",h),this.off("upgrading",y);};cov_220zhfwpnm().s[528]++;t.once("open",s),t.once("error",o),t.once("close",a),this.once("close",h),this.once("upgrading",y),(cov_220zhfwpnm().b[236][0]++,this._upgrades.indexOf("webtransport")!==-1)&&(cov_220zhfwpnm().b[236][1]++,e!=="webtransport")?(cov_220zhfwpnm().b[235][0]++,this.setTimeoutFn(()=>{cov_220zhfwpnm().f[172]++;cov_220zhfwpnm().s[529]++;(cov_220zhfwpnm().b[237][0]++,r)||(cov_220zhfwpnm().b[237][1]++,t.open());},200)):(cov_220zhfwpnm().b[235][1]++,t.open());}onHandshake(e){cov_220zhfwpnm().f[173]++;cov_220zhfwpnm().s[530]++;this._upgrades=this._filterUpgrades(e.upgrades),super.onHandshake(e);}_filterUpgrades(e){cov_220zhfwpnm().f[174]++;let t=(cov_220zhfwpnm().s[531]++,[]);cov_220zhfwpnm().s[532]++;for(let r=(cov_220zhfwpnm().s[533]++,0);r{cov_220zhfwpnm().f[176]++;cov_220zhfwpnm().s[539]++;return pt[s];}).filter(s=>{cov_220zhfwpnm().f[177]++;cov_220zhfwpnm().s[540]++;return!!s;})),super(e,r);}};var zr=(cov_220zhfwpnm().s[541]++,N.protocol);function re(i,e=(cov_220zhfwpnm().b[243][0]++,""),t){cov_220zhfwpnm().f[178]++;let r=(cov_220zhfwpnm().s[542]++,i);cov_220zhfwpnm().s[543]++;t=(cov_220zhfwpnm().b[244][0]++,t)||(cov_220zhfwpnm().b[244][1]++,typeof location<"u")&&(cov_220zhfwpnm().b[244][2]++,location),(cov_220zhfwpnm().b[245][0]++,i==null)&&(cov_220zhfwpnm().b[245][1]++,i=t.protocol+"//"+t.host),(cov_220zhfwpnm().b[246][0]++,typeof i=="string")&&(cov_220zhfwpnm().b[246][1]++,(cov_220zhfwpnm().b[247][0]++,i.charAt(0)==="/")&&(cov_220zhfwpnm().b[247][1]++,i.charAt(1)==="/"?(cov_220zhfwpnm().b[248][0]++,i=t.protocol+i):(cov_220zhfwpnm().b[248][1]++,i=t.host+i)),(cov_220zhfwpnm().b[249][0]++,/^(https?|wss?):\/\//.test(i))||(cov_220zhfwpnm().b[249][1]++,typeof t<"u"?(cov_220zhfwpnm().b[250][0]++,i=t.protocol+"//"+i):(cov_220zhfwpnm().b[250][1]++,i="https://"+i)),r=C(i)),(cov_220zhfwpnm().b[251][0]++,r.port)||(cov_220zhfwpnm().b[251][1]++,/^(http|ws)$/.test(r.protocol)?(cov_220zhfwpnm().b[252][0]++,r.port="80"):(cov_220zhfwpnm().b[252][1]++,(cov_220zhfwpnm().b[253][0]++,/^(http|ws)s$/.test(r.protocol))&&(cov_220zhfwpnm().b[253][1]++,r.port="443"))),r.path=(cov_220zhfwpnm().b[254][0]++,r.path)||(cov_220zhfwpnm().b[254][1]++,"/");let n=(cov_220zhfwpnm().s[544]++,r.host.indexOf(":")!==-1?(cov_220zhfwpnm().b[255][0]++,"["+r.host+"]"):(cov_220zhfwpnm().b[255][1]++,r.host));cov_220zhfwpnm().s[545]++;return r.id=r.protocol+"://"+n+":"+r.port+e,r.href=r.protocol+"://"+n+((cov_220zhfwpnm().b[257][0]++,t)&&(cov_220zhfwpnm().b[257][1]++,t.port===r.port)?(cov_220zhfwpnm().b[256][0]++,""):(cov_220zhfwpnm().b[256][1]++,":"+r.port)),r;}var Et=(cov_220zhfwpnm().s[546]++,{});cov_220zhfwpnm().s[547]++;ue(Et,{Decoder:()=>{cov_220zhfwpnm().f[179]++;cov_220zhfwpnm().s[548]++;return _t;},Encoder:()=>{cov_220zhfwpnm().f[180]++;cov_220zhfwpnm().s[549]++;return gt;},PacketType:()=>{cov_220zhfwpnm().f[181]++;cov_220zhfwpnm().s[550]++;return c;},isPacketValid:()=>{cov_220zhfwpnm().f[182]++;cov_220zhfwpnm().s[551]++;return Le;},protocol:()=>{cov_220zhfwpnm().f[183]++;cov_220zhfwpnm().s[552]++;return ae;}});cov_220zhfwpnm().s[554]++;var Ie=(cov_220zhfwpnm().s[553]++,typeof ArrayBuffer=="function"),xe=i=>{cov_220zhfwpnm().f[184]++;cov_220zhfwpnm().s[555]++;return typeof ArrayBuffer.isView=="function"?(cov_220zhfwpnm().b[258][0]++,ArrayBuffer.isView(i)):(cov_220zhfwpnm().b[258][1]++,i.buffer instanceof ArrayBuffer);},ie=(cov_220zhfwpnm().s[556]++,Object.prototype.toString),Se=(cov_220zhfwpnm().s[557]++,(cov_220zhfwpnm().b[259][0]++,typeof Blob=="function")||(cov_220zhfwpnm().b[259][1]++,typeof Blob<"u")&&(cov_220zhfwpnm().b[259][2]++,ie.call(Blob)==="[object BlobConstructor]")),Ce=(cov_220zhfwpnm().s[558]++,(cov_220zhfwpnm().b[260][0]++,typeof File=="function")||(cov_220zhfwpnm().b[260][1]++,typeof File<"u")&&(cov_220zhfwpnm().b[260][2]++,ie.call(File)==="[object FileConstructor]"));function M(i){cov_220zhfwpnm().f[185]++;cov_220zhfwpnm().s[559]++;return(cov_220zhfwpnm().b[261][0]++,Ie)&&((cov_220zhfwpnm().b[261][1]++,i instanceof ArrayBuffer)||(cov_220zhfwpnm().b[261][2]++,xe(i)))||(cov_220zhfwpnm().b[261][3]++,Se)&&(cov_220zhfwpnm().b[261][4]++,i instanceof Blob)||(cov_220zhfwpnm().b[261][5]++,Ce)&&(cov_220zhfwpnm().b[261][6]++,i instanceof File);}function j(i,e){cov_220zhfwpnm().f[186]++;cov_220zhfwpnm().s[560]++;if((cov_220zhfwpnm().b[263][0]++,!i)||(cov_220zhfwpnm().b[263][1]++,typeof i!="object")){cov_220zhfwpnm().b[262][0]++;cov_220zhfwpnm().s[561]++;return!1;}else{cov_220zhfwpnm().b[262][1]++;}cov_220zhfwpnm().s[562]++;if(Array.isArray(i)){cov_220zhfwpnm().b[264][0]++;cov_220zhfwpnm().s[563]++;for(let t=(cov_220zhfwpnm().s[564]++,0),r=(cov_220zhfwpnm().s[565]++,i.length);t=0)&&(cov_220zhfwpnm().b[281][2]++,i.numthis.opts.maxAttachments){cov_220zhfwpnm().b[312][0]++;cov_220zhfwpnm().s[653]++;throw new Error("too many attachments");}else{cov_220zhfwpnm().b[312][1]++;}cov_220zhfwpnm().s[654]++;r.attachments=a;}else{cov_220zhfwpnm().b[305][1]++;}cov_220zhfwpnm().s[655]++;if(e.charAt(t+1)==="/"){cov_220zhfwpnm().b[313][0]++;let n=(cov_220zhfwpnm().s[656]++,t+1);cov_220zhfwpnm().s[657]++;for(;(cov_220zhfwpnm().b[314][0]++,++t)&&(cov_220zhfwpnm().b[314][1]++,!((cov_220zhfwpnm().b[315][0]++,e.charAt(t)===",")||(cov_220zhfwpnm().b[315][1]++,t===e.length)));){;}cov_220zhfwpnm().s[658]++;r.nsp=e.substring(n,t);}else{cov_220zhfwpnm().b[313][1]++;cov_220zhfwpnm().s[659]++;r.nsp="/";}let s=(cov_220zhfwpnm().s[660]++,e.charAt(t+1));cov_220zhfwpnm().s[661]++;if((cov_220zhfwpnm().b[317][0]++,s!=="")&&(cov_220zhfwpnm().b[317][1]++,Number(s)==s)){cov_220zhfwpnm().b[316][0]++;let n=(cov_220zhfwpnm().s[662]++,t+1);cov_220zhfwpnm().s[663]++;for(;++t;){let o=(cov_220zhfwpnm().s[664]++,e.charAt(t));cov_220zhfwpnm().s[665]++;if((cov_220zhfwpnm().b[319][0]++,o==null)||(cov_220zhfwpnm().b[319][1]++,Number(o)!=o)){cov_220zhfwpnm().b[318][0]++;cov_220zhfwpnm().s[666]++;--t;cov_220zhfwpnm().s[667]++;break;}else{cov_220zhfwpnm().b[318][1]++;}cov_220zhfwpnm().s[668]++;if(t===e.length){cov_220zhfwpnm().b[320][0]++;cov_220zhfwpnm().s[669]++;break;}else{cov_220zhfwpnm().b[320][1]++;}}cov_220zhfwpnm().s[670]++;r.id=Number(e.substring(n,t+1));}else{cov_220zhfwpnm().b[316][1]++;}cov_220zhfwpnm().s[671]++;if(e.charAt(++t)){cov_220zhfwpnm().b[321][0]++;let n=(cov_220zhfwpnm().s[672]++,this.tryParse(e.substr(t)));cov_220zhfwpnm().s[673]++;if(i.isPayloadValid(r.type,n)){cov_220zhfwpnm().b[322][0]++;cov_220zhfwpnm().s[674]++;r.data=n;}else{cov_220zhfwpnm().b[322][1]++;cov_220zhfwpnm().s[675]++;throw new Error("invalid payload");}}else{cov_220zhfwpnm().b[321][1]++;}cov_220zhfwpnm().s[676]++;return r;}tryParse(e){cov_220zhfwpnm().f[199]++;cov_220zhfwpnm().s[677]++;try{cov_220zhfwpnm().s[678]++;return JSON.parse(e,this.opts.reviver);}catch{cov_220zhfwpnm().s[679]++;return!1;}}static isPayloadValid(e,t){cov_220zhfwpnm().f[200]++;cov_220zhfwpnm().s[680]++;switch(e){case c.CONNECT:cov_220zhfwpnm().b[323][0]++;cov_220zhfwpnm().s[681]++;return rt(t);case c.DISCONNECT:cov_220zhfwpnm().b[323][1]++;cov_220zhfwpnm().s[682]++;return t===void 0;case c.CONNECT_ERROR:cov_220zhfwpnm().b[323][2]++;cov_220zhfwpnm().s[683]++;return(cov_220zhfwpnm().b[324][0]++,typeof t=="string")||(cov_220zhfwpnm().b[324][1]++,rt(t));case c.EVENT:cov_220zhfwpnm().b[323][3]++;case c.BINARY_EVENT:cov_220zhfwpnm().b[323][4]++;cov_220zhfwpnm().s[684]++;return(cov_220zhfwpnm().b[325][0]++,Array.isArray(t))&&((cov_220zhfwpnm().b[325][1]++,typeof t[0]=="number")||(cov_220zhfwpnm().b[325][2]++,typeof t[0]=="string")&&(cov_220zhfwpnm().b[325][3]++,oe.indexOf(t[0])===-1));case c.ACK:cov_220zhfwpnm().b[323][5]++;case c.BINARY_ACK:cov_220zhfwpnm().b[323][6]++;cov_220zhfwpnm().s[685]++;return Array.isArray(t);}}destroy(){cov_220zhfwpnm().f[201]++;cov_220zhfwpnm().s[686]++;(cov_220zhfwpnm().b[326][0]++,this.reconstructor)&&(cov_220zhfwpnm().b[326][1]++,this.reconstructor.finishedReconstruction(),this.reconstructor=null);}},bt=class{constructor(e){cov_220zhfwpnm().f[202]++;cov_220zhfwpnm().s[688]++;this.packet=e,this.buffers=[],this.reconPack=e;}takeBinaryData(e){cov_220zhfwpnm().f[203]++;cov_220zhfwpnm().s[689]++;if(this.buffers.push(e),this.buffers.length===this.reconPack.attachments){cov_220zhfwpnm().b[327][0]++;let t=(cov_220zhfwpnm().s[690]++,ne(this.reconPack,this.buffers));cov_220zhfwpnm().s[691]++;return this.finishedReconstruction(),t;}else{cov_220zhfwpnm().b[327][1]++;}cov_220zhfwpnm().s[692]++;return null;}finishedReconstruction(){cov_220zhfwpnm().f[204]++;cov_220zhfwpnm().s[693]++;this.reconPack=null,this.buffers=[];}};function Ne(i){cov_220zhfwpnm().f[205]++;cov_220zhfwpnm().s[694]++;return typeof i=="string";}var ce=(cov_220zhfwpnm().s[695]++,(cov_220zhfwpnm().b[328][0]++,Number.isInteger)||(cov_220zhfwpnm().b[328][1]++,function(i){cov_220zhfwpnm().f[206]++;cov_220zhfwpnm().s[696]++;return(cov_220zhfwpnm().b[329][0]++,typeof i=="number")&&(cov_220zhfwpnm().b[329][1]++,isFinite(i))&&(cov_220zhfwpnm().b[329][2]++,Math.floor(i)===i);}));function Oe(i){cov_220zhfwpnm().f[207]++;cov_220zhfwpnm().s[697]++;return(cov_220zhfwpnm().b[330][0]++,i===void 0)||(cov_220zhfwpnm().b[330][1]++,ce(i));}function rt(i){cov_220zhfwpnm().f[208]++;cov_220zhfwpnm().s[698]++;return Object.prototype.toString.call(i)==="[object Object]";}function Be(i,e){cov_220zhfwpnm().f[209]++;cov_220zhfwpnm().s[699]++;switch(i){case c.CONNECT:cov_220zhfwpnm().b[331][0]++;cov_220zhfwpnm().s[700]++;return(cov_220zhfwpnm().b[332][0]++,e===void 0)||(cov_220zhfwpnm().b[332][1]++,rt(e));case c.DISCONNECT:cov_220zhfwpnm().b[331][1]++;cov_220zhfwpnm().s[701]++;return e===void 0;case c.EVENT:cov_220zhfwpnm().b[331][2]++;cov_220zhfwpnm().s[702]++;return(cov_220zhfwpnm().b[333][0]++,Array.isArray(e))&&((cov_220zhfwpnm().b[333][1]++,typeof e[0]=="number")||(cov_220zhfwpnm().b[333][2]++,typeof e[0]=="string")&&(cov_220zhfwpnm().b[333][3]++,oe.indexOf(e[0])===-1));case c.ACK:cov_220zhfwpnm().b[331][3]++;cov_220zhfwpnm().s[703]++;return Array.isArray(e);case c.CONNECT_ERROR:cov_220zhfwpnm().b[331][4]++;cov_220zhfwpnm().s[704]++;return(cov_220zhfwpnm().b[334][0]++,typeof e=="string")||(cov_220zhfwpnm().b[334][1]++,rt(e));default:cov_220zhfwpnm().b[331][5]++;cov_220zhfwpnm().s[705]++;return!1;}}function Le(i){cov_220zhfwpnm().f[210]++;cov_220zhfwpnm().s[706]++;return(cov_220zhfwpnm().b[335][0]++,Ne(i.nsp))&&(cov_220zhfwpnm().b[335][1]++,Oe(i.id))&&(cov_220zhfwpnm().b[335][2]++,Be(i.type,i.data));}function p(i,e,t){cov_220zhfwpnm().f[211]++;cov_220zhfwpnm().s[707]++;return i.on(e,t),function(){cov_220zhfwpnm().f[212]++;cov_220zhfwpnm().s[708]++;i.off(e,t);};}cov_220zhfwpnm().s[710]++;var Pe=(cov_220zhfwpnm().s[709]++,Object.freeze({connect:1,connect_error:1,disconnect:1,disconnecting:1,newListener:1,removeListener:1})),O=class extends f{constructor(e,t,r){cov_220zhfwpnm().f[213]++;cov_220zhfwpnm().s[711]++;super(),this.connected=!1,this.recovered=!1,this.receiveBuffer=[],this.sendBuffer=[],this._queue=[],this._queueSeq=0,this.ids=0,this.acks={},this.flags={},this.io=e,this.nsp=t,(cov_220zhfwpnm().b[336][0]++,r)&&(cov_220zhfwpnm().b[336][1]++,r.auth)&&(cov_220zhfwpnm().b[336][2]++,this.auth=r.auth),this._opts=Object.assign({},r),(cov_220zhfwpnm().b[337][0]++,this.io._autoConnect)&&(cov_220zhfwpnm().b[337][1]++,this.open());}get disconnected(){cov_220zhfwpnm().f[214]++;cov_220zhfwpnm().s[712]++;return!this.connected;}subEvents(){cov_220zhfwpnm().f[215]++;cov_220zhfwpnm().s[713]++;if(this.subs){cov_220zhfwpnm().b[338][0]++;cov_220zhfwpnm().s[714]++;return;}else{cov_220zhfwpnm().b[338][1]++;}let e=(cov_220zhfwpnm().s[715]++,this.io);cov_220zhfwpnm().s[716]++;this.subs=[p(e,"open",this.onopen.bind(this)),p(e,"packet",this.onpacket.bind(this)),p(e,"error",this.onerror.bind(this)),p(e,"close",this.onclose.bind(this))];}get active(){cov_220zhfwpnm().f[216]++;cov_220zhfwpnm().s[717]++;return!!this.subs;}connect(){cov_220zhfwpnm().f[217]++;cov_220zhfwpnm().s[718]++;return this.connected?(cov_220zhfwpnm().b[339][0]++,this):(cov_220zhfwpnm().b[339][1]++,this.subEvents(),(cov_220zhfwpnm().b[340][0]++,this.io._reconnecting)||(cov_220zhfwpnm().b[340][1]++,this.io.open()),(cov_220zhfwpnm().b[341][0]++,this.io._readyState==="open")&&(cov_220zhfwpnm().b[341][1]++,this.onopen()),this);}open(){cov_220zhfwpnm().f[218]++;cov_220zhfwpnm().s[719]++;return this.connect();}send(...e){cov_220zhfwpnm().f[219]++;cov_220zhfwpnm().s[720]++;return e.unshift("message"),this.emit.apply(this,e),this;}emit(e,...t){cov_220zhfwpnm().f[220]++;var r,s,n;cov_220zhfwpnm().s[721]++;if(Pe.hasOwnProperty(e)){cov_220zhfwpnm().b[342][0]++;cov_220zhfwpnm().s[722]++;throw new Error('"'+e.toString()+'" is a reserved event name');}else{cov_220zhfwpnm().b[342][1]++;}cov_220zhfwpnm().s[723]++;if(t.unshift(e),(cov_220zhfwpnm().b[344][0]++,this._opts.retries)&&(cov_220zhfwpnm().b[344][1]++,!this.flags.fromQueue)&&(cov_220zhfwpnm().b[344][2]++,!this.flags.volatile)){cov_220zhfwpnm().b[343][0]++;cov_220zhfwpnm().s[724]++;return this._addToQueue(t),this;}else{cov_220zhfwpnm().b[343][1]++;}let o=(cov_220zhfwpnm().s[725]++,{type:c.EVENT,data:t});cov_220zhfwpnm().s[726]++;if(o.options={},o.options.compress=this.flags.compress!==!1,typeof t[t.length-1]=="function"){cov_220zhfwpnm().b[345][0]++;let d=(cov_220zhfwpnm().s[727]++,this.ids++),E=(cov_220zhfwpnm().s[728]++,t.pop());cov_220zhfwpnm().s[729]++;this._registerAckCallback(d,E),o.id=d;}else{cov_220zhfwpnm().b[345][1]++;}let a=(cov_220zhfwpnm().s[730]++,(cov_220zhfwpnm().b[347][0]++,(s=(cov_220zhfwpnm().b[349][0]++,(r=this.io.engine)===null)||(cov_220zhfwpnm().b[349][1]++,r===void 0)?(cov_220zhfwpnm().b[348][0]++,void 0):(cov_220zhfwpnm().b[348][1]++,r.transport))===null)||(cov_220zhfwpnm().b[347][1]++,s===void 0)?(cov_220zhfwpnm().b[346][0]++,void 0):(cov_220zhfwpnm().b[346][1]++,s.writable)),h=(cov_220zhfwpnm().s[731]++,(cov_220zhfwpnm().b[350][0]++,this.connected)&&(cov_220zhfwpnm().b[350][1]++,!((cov_220zhfwpnm().b[351][0]++,!((cov_220zhfwpnm().b[352][0]++,(n=this.io.engine)===null)||(cov_220zhfwpnm().b[352][1]++,n===void 0)))&&(cov_220zhfwpnm().b[351][1]++,n._hasPingExpired()))));cov_220zhfwpnm().s[732]++;return(cov_220zhfwpnm().b[353][0]++,this.flags.volatile)&&(cov_220zhfwpnm().b[353][1]++,!a)||(cov_220zhfwpnm().b[353][2]++,h?(cov_220zhfwpnm().b[354][0]++,this.notifyOutgoingListeners(o),this.packet(o)):(cov_220zhfwpnm().b[354][1]++,this.sendBuffer.push(o))),this.flags={},this;}_registerAckCallback(e,t){cov_220zhfwpnm().f[221]++;var r;let s=(cov_220zhfwpnm().s[733]++,(cov_220zhfwpnm().b[356][0]++,(r=this.flags.timeout)!==null)&&(cov_220zhfwpnm().b[356][1]++,r!==void 0)?(cov_220zhfwpnm().b[355][0]++,r):(cov_220zhfwpnm().b[355][1]++,this._opts.ackTimeout));cov_220zhfwpnm().s[734]++;if(s===void 0){cov_220zhfwpnm().b[357][0]++;cov_220zhfwpnm().s[735]++;this.acks[e]=t;cov_220zhfwpnm().s[736]++;return;}else{cov_220zhfwpnm().b[357][1]++;}cov_220zhfwpnm().s[743]++;let n=(cov_220zhfwpnm().s[737]++,this.io.setTimeoutFn(()=>{cov_220zhfwpnm().f[222]++;cov_220zhfwpnm().s[738]++;delete this.acks[e];cov_220zhfwpnm().s[739]++;for(let a=(cov_220zhfwpnm().s[740]++,0);a{cov_220zhfwpnm().f[223]++;cov_220zhfwpnm().s[744]++;this.io.clearTimeoutFn(n),t.apply(this,a);};cov_220zhfwpnm().s[745]++;o.withError=!0,this.acks[e]=o;}emitWithAck(e,...t){cov_220zhfwpnm().f[224]++;cov_220zhfwpnm().s[746]++;return new Promise((r,s)=>{cov_220zhfwpnm().f[225]++;cov_220zhfwpnm().s[747]++;let n=(o,a)=>{cov_220zhfwpnm().f[226]++;cov_220zhfwpnm().s[748]++;return o?(cov_220zhfwpnm().b[359][0]++,s(o)):(cov_220zhfwpnm().b[359][1]++,r(a));};cov_220zhfwpnm().s[749]++;n.withError=!0,t.push(n),this.emit(e,...t);});}_addToQueue(e){cov_220zhfwpnm().f[227]++;let t;cov_220zhfwpnm().s[750]++;(cov_220zhfwpnm().b[360][0]++,typeof e[e.length-1]=="function")&&(cov_220zhfwpnm().b[360][1]++,t=e.pop());let r=(cov_220zhfwpnm().s[751]++,{id:this._queueSeq++,tryCount:0,pending:!1,args:e,flags:Object.assign({fromQueue:!0},this.flags)});cov_220zhfwpnm().s[752]++;e.push((s,...n)=>{cov_220zhfwpnm().f[228]++;cov_220zhfwpnm().s[753]++;return this._queue[0],s!==null?(cov_220zhfwpnm().b[361][0]++,(cov_220zhfwpnm().b[362][0]++,r.tryCount>this._opts.retries)&&(cov_220zhfwpnm().b[362][1]++,this._queue.shift(),(cov_220zhfwpnm().b[363][0]++,t)&&(cov_220zhfwpnm().b[363][1]++,t(s)))):(cov_220zhfwpnm().b[361][1]++,this._queue.shift(),(cov_220zhfwpnm().b[364][0]++,t)&&(cov_220zhfwpnm().b[364][1]++,t(null,...n))),r.pending=!1,this._drainQueue();}),this._queue.push(r),this._drainQueue();}_drainQueue(e=(cov_220zhfwpnm().b[365][0]++,!1)){cov_220zhfwpnm().f[229]++;cov_220zhfwpnm().s[754]++;if((cov_220zhfwpnm().b[367][0]++,!this.connected)||(cov_220zhfwpnm().b[367][1]++,this._queue.length===0)){cov_220zhfwpnm().b[366][0]++;cov_220zhfwpnm().s[755]++;return;}else{cov_220zhfwpnm().b[366][1]++;}let t=(cov_220zhfwpnm().s[756]++,this._queue[0]);cov_220zhfwpnm().s[757]++;(cov_220zhfwpnm().b[368][0]++,t.pending)&&(cov_220zhfwpnm().b[368][1]++,!e)||(cov_220zhfwpnm().b[368][2]++,t.pending=!0,t.tryCount++,this.flags=t.flags,this.emit.apply(this,t.args));}packet(e){cov_220zhfwpnm().f[230]++;cov_220zhfwpnm().s[758]++;e.nsp=this.nsp,this.io._packet(e);}onopen(){cov_220zhfwpnm().f[231]++;cov_220zhfwpnm().s[759]++;typeof this.auth=="function"?(cov_220zhfwpnm().b[369][0]++,this.auth(e=>{cov_220zhfwpnm().f[232]++;cov_220zhfwpnm().s[760]++;this._sendConnectPacket(e);})):(cov_220zhfwpnm().b[369][1]++,this._sendConnectPacket(this.auth));}_sendConnectPacket(e){cov_220zhfwpnm().f[233]++;cov_220zhfwpnm().s[761]++;this.packet({type:c.CONNECT,data:this._pid?(cov_220zhfwpnm().b[370][0]++,Object.assign({pid:this._pid,offset:this._lastOffset},e)):(cov_220zhfwpnm().b[370][1]++,e)});}onerror(e){cov_220zhfwpnm().f[234]++;cov_220zhfwpnm().s[762]++;(cov_220zhfwpnm().b[371][0]++,this.connected)||(cov_220zhfwpnm().b[371][1]++,this.emitReserved("connect_error",e));}onclose(e,t){cov_220zhfwpnm().f[235]++;cov_220zhfwpnm().s[763]++;this.connected=!1,delete this.id,this.emitReserved("disconnect",e,t),this._clearAcks();}_clearAcks(){cov_220zhfwpnm().f[236]++;cov_220zhfwpnm().s[764]++;Object.keys(this.acks).forEach(e=>{cov_220zhfwpnm().f[237]++;cov_220zhfwpnm().s[765]++;if(!this.sendBuffer.some(r=>{cov_220zhfwpnm().f[238]++;cov_220zhfwpnm().s[766]++;return String(r.id)===e;})){cov_220zhfwpnm().b[372][0]++;let r=(cov_220zhfwpnm().s[767]++,this.acks[e]);cov_220zhfwpnm().s[768]++;delete this.acks[e],(cov_220zhfwpnm().b[373][0]++,r.withError)&&(cov_220zhfwpnm().b[373][1]++,r.call(this,new Error("socket has been disconnected")));}else{cov_220zhfwpnm().b[372][1]++;}});}onpacket(e){cov_220zhfwpnm().f[239]++;cov_220zhfwpnm().s[769]++;if(e.nsp===this.nsp){cov_220zhfwpnm().b[374][0]++;cov_220zhfwpnm().s[770]++;switch(e.type){case c.CONNECT:cov_220zhfwpnm().b[375][0]++;cov_220zhfwpnm().s[771]++;(cov_220zhfwpnm().b[377][0]++,e.data)&&(cov_220zhfwpnm().b[377][1]++,e.data.sid)?(cov_220zhfwpnm().b[376][0]++,this.onconnect(e.data.sid,e.data.pid)):(cov_220zhfwpnm().b[376][1]++,this.emitReserved("connect_error",new Error("It seems you are trying to reach a Socket.IO server in v2.x with a v3.x client, but they are not compatible (more information here: https://socket.io/docs/v3/migrating-from-2-x-to-3-0/)")));cov_220zhfwpnm().s[772]++;break;case c.EVENT:cov_220zhfwpnm().b[375][1]++;case c.BINARY_EVENT:cov_220zhfwpnm().b[375][2]++;cov_220zhfwpnm().s[773]++;this.onevent(e);cov_220zhfwpnm().s[774]++;break;case c.ACK:cov_220zhfwpnm().b[375][3]++;case c.BINARY_ACK:cov_220zhfwpnm().b[375][4]++;cov_220zhfwpnm().s[775]++;this.onack(e);cov_220zhfwpnm().s[776]++;break;case c.DISCONNECT:cov_220zhfwpnm().b[375][5]++;cov_220zhfwpnm().s[777]++;this.ondisconnect();cov_220zhfwpnm().s[778]++;break;case c.CONNECT_ERROR:cov_220zhfwpnm().b[375][6]++;cov_220zhfwpnm().s[779]++;this.destroy();let r=(cov_220zhfwpnm().s[780]++,new Error(e.data.message));cov_220zhfwpnm().s[781]++;r.data=e.data.data,this.emitReserved("connect_error",r);cov_220zhfwpnm().s[782]++;break;}}else{cov_220zhfwpnm().b[374][1]++;}}onevent(e){cov_220zhfwpnm().f[240]++;let t=(cov_220zhfwpnm().s[783]++,(cov_220zhfwpnm().b[378][0]++,e.data)||(cov_220zhfwpnm().b[378][1]++,[]));cov_220zhfwpnm().s[784]++;(cov_220zhfwpnm().b[379][0]++,e.id!=null)&&(cov_220zhfwpnm().b[379][1]++,t.push(this.ack(e.id))),this.connected?(cov_220zhfwpnm().b[380][0]++,this.emitEvent(t)):(cov_220zhfwpnm().b[380][1]++,this.receiveBuffer.push(Object.freeze(t)));}emitEvent(e){cov_220zhfwpnm().f[241]++;cov_220zhfwpnm().s[785]++;if((cov_220zhfwpnm().b[382][0]++,this._anyListeners)&&(cov_220zhfwpnm().b[382][1]++,this._anyListeners.length)){cov_220zhfwpnm().b[381][0]++;let t=(cov_220zhfwpnm().s[786]++,this._anyListeners.slice());cov_220zhfwpnm().s[787]++;for(let r of t){cov_220zhfwpnm().s[788]++;r.apply(this,e);}}else{cov_220zhfwpnm().b[381][1]++;}cov_220zhfwpnm().s[789]++;super.emit.apply(this,e),(cov_220zhfwpnm().b[383][0]++,this._pid)&&(cov_220zhfwpnm().b[383][1]++,e.length)&&(cov_220zhfwpnm().b[383][2]++,typeof e[e.length-1]=="string")&&(cov_220zhfwpnm().b[383][3]++,this._lastOffset=e[e.length-1]);}ack(e){cov_220zhfwpnm().f[242]++;let t=(cov_220zhfwpnm().s[790]++,this),r=(cov_220zhfwpnm().s[791]++,!1);cov_220zhfwpnm().s[792]++;return function(...s){cov_220zhfwpnm().f[243]++;cov_220zhfwpnm().s[793]++;(cov_220zhfwpnm().b[384][0]++,r)||(cov_220zhfwpnm().b[384][1]++,r=!0,t.packet({type:c.ACK,id:e,data:s}));};}onack(e){cov_220zhfwpnm().f[244]++;let t=(cov_220zhfwpnm().s[794]++,this.acks[e.id]);cov_220zhfwpnm().s[795]++;(cov_220zhfwpnm().b[385][0]++,typeof t=="function")&&(cov_220zhfwpnm().b[385][1]++,delete this.acks[e.id],(cov_220zhfwpnm().b[386][0]++,t.withError)&&(cov_220zhfwpnm().b[386][1]++,e.data.unshift(null)),t.apply(this,e.data));}onconnect(e,t){cov_220zhfwpnm().f[245]++;cov_220zhfwpnm().s[796]++;this.id=e,this.recovered=(cov_220zhfwpnm().b[387][0]++,t)&&(cov_220zhfwpnm().b[387][1]++,this._pid===t),this._pid=t,this.connected=!0,this.emitBuffered(),this._drainQueue(!0),this.emitReserved("connect");}emitBuffered(){cov_220zhfwpnm().f[246]++;cov_220zhfwpnm().s[797]++;this.receiveBuffer.forEach(e=>{cov_220zhfwpnm().f[247]++;cov_220zhfwpnm().s[798]++;return this.emitEvent(e);}),this.receiveBuffer=[],this.sendBuffer.forEach(e=>{cov_220zhfwpnm().f[248]++;cov_220zhfwpnm().s[799]++;this.notifyOutgoingListeners(e),this.packet(e);}),this.sendBuffer=[];}ondisconnect(){cov_220zhfwpnm().f[249]++;cov_220zhfwpnm().s[800]++;this.destroy(),this.onclose("io server disconnect");}destroy(){cov_220zhfwpnm().f[250]++;cov_220zhfwpnm().s[801]++;(cov_220zhfwpnm().b[388][0]++,this.subs)&&(cov_220zhfwpnm().b[388][1]++,this.subs.forEach(e=>{cov_220zhfwpnm().f[251]++;cov_220zhfwpnm().s[802]++;return e();}),this.subs=void 0),this.io._destroy(this);}disconnect(){cov_220zhfwpnm().f[252]++;cov_220zhfwpnm().s[803]++;return(cov_220zhfwpnm().b[389][0]++,this.connected)&&(cov_220zhfwpnm().b[389][1]++,this.packet({type:c.DISCONNECT})),this.destroy(),(cov_220zhfwpnm().b[390][0]++,this.connected)&&(cov_220zhfwpnm().b[390][1]++,this.onclose("io client disconnect")),this;}close(){cov_220zhfwpnm().f[253]++;cov_220zhfwpnm().s[804]++;return this.disconnect();}compress(e){cov_220zhfwpnm().f[254]++;cov_220zhfwpnm().s[805]++;return this.flags.compress=e,this;}get volatile(){cov_220zhfwpnm().f[255]++;cov_220zhfwpnm().s[806]++;return this.flags.volatile=!0,this;}timeout(e){cov_220zhfwpnm().f[256]++;cov_220zhfwpnm().s[807]++;return this.flags.timeout=e,this;}onAny(e){cov_220zhfwpnm().f[257]++;cov_220zhfwpnm().s[808]++;return this._anyListeners=(cov_220zhfwpnm().b[391][0]++,this._anyListeners)||(cov_220zhfwpnm().b[391][1]++,[]),this._anyListeners.push(e),this;}prependAny(e){cov_220zhfwpnm().f[258]++;cov_220zhfwpnm().s[809]++;return this._anyListeners=(cov_220zhfwpnm().b[392][0]++,this._anyListeners)||(cov_220zhfwpnm().b[392][1]++,[]),this._anyListeners.unshift(e),this;}offAny(e){cov_220zhfwpnm().f[259]++;cov_220zhfwpnm().s[810]++;if(!this._anyListeners){cov_220zhfwpnm().b[393][0]++;cov_220zhfwpnm().s[811]++;return this;}else{cov_220zhfwpnm().b[393][1]++;}cov_220zhfwpnm().s[812]++;if(e){cov_220zhfwpnm().b[394][0]++;let t=(cov_220zhfwpnm().s[813]++,this._anyListeners);cov_220zhfwpnm().s[814]++;for(let r=(cov_220zhfwpnm().s[815]++,0);r0)&&(cov_220zhfwpnm().b[410][1]++,i.jitter<=1)?(cov_220zhfwpnm().b[409][0]++,i.jitter):(cov_220zhfwpnm().b[409][1]++,0),this.attempts=0;}cov_220zhfwpnm().s[839]++;k.prototype.duration=function(){cov_220zhfwpnm().f[267]++;var i=(cov_220zhfwpnm().s[840]++,this.ms*Math.pow(this.factor,this.attempts++));cov_220zhfwpnm().s[841]++;if(this.jitter){cov_220zhfwpnm().b[411][0]++;var e=(cov_220zhfwpnm().s[842]++,Math.random()),t=(cov_220zhfwpnm().s[843]++,Math.floor(e*this.jitter*i));cov_220zhfwpnm().s[844]++;i=(Math.floor(e*10)&1)==0?(cov_220zhfwpnm().b[412][0]++,i-t):(cov_220zhfwpnm().b[412][1]++,i+t);}else{cov_220zhfwpnm().b[411][1]++;}cov_220zhfwpnm().s[845]++;return Math.min(i,this.max)|0;};cov_220zhfwpnm().s[846]++;k.prototype.reset=function(){cov_220zhfwpnm().f[268]++;cov_220zhfwpnm().s[847]++;this.attempts=0;};cov_220zhfwpnm().s[848]++;k.prototype.setMin=function(i){cov_220zhfwpnm().f[269]++;cov_220zhfwpnm().s[849]++;this.ms=i;};cov_220zhfwpnm().s[850]++;k.prototype.setMax=function(i){cov_220zhfwpnm().f[270]++;cov_220zhfwpnm().s[851]++;this.max=i;};cov_220zhfwpnm().s[852]++;k.prototype.setJitter=function(i){cov_220zhfwpnm().f[271]++;cov_220zhfwpnm().s[853]++;this.jitter=i;};cov_220zhfwpnm().s[854]++;var B=class extends f{constructor(e,t){cov_220zhfwpnm().f[272]++;var r;cov_220zhfwpnm().s[855]++;super(),this.nsps={},this.subs=[],(cov_220zhfwpnm().b[413][0]++,e)&&(cov_220zhfwpnm().b[413][1]++,typeof e=="object")&&(cov_220zhfwpnm().b[413][2]++,t=e,e=void 0),t=(cov_220zhfwpnm().b[414][0]++,t)||(cov_220zhfwpnm().b[414][1]++,{}),t.path=(cov_220zhfwpnm().b[415][0]++,t.path)||(cov_220zhfwpnm().b[415][1]++,"/socket.io"),this.opts=t,_(this,t),this.reconnection(t.reconnection!==!1),this.reconnectionAttempts((cov_220zhfwpnm().b[416][0]++,t.reconnectionAttempts)||(cov_220zhfwpnm().b[416][1]++,1/0)),this.reconnectionDelay((cov_220zhfwpnm().b[417][0]++,t.reconnectionDelay)||(cov_220zhfwpnm().b[417][1]++,1e3)),this.reconnectionDelayMax((cov_220zhfwpnm().b[418][0]++,t.reconnectionDelayMax)||(cov_220zhfwpnm().b[418][1]++,5e3)),this.randomizationFactor((cov_220zhfwpnm().b[420][0]++,(r=t.randomizationFactor)!==null)&&(cov_220zhfwpnm().b[420][1]++,r!==void 0)?(cov_220zhfwpnm().b[419][0]++,r):(cov_220zhfwpnm().b[419][1]++,.5)),this.backoff=new k({min:this.reconnectionDelay(),max:this.reconnectionDelayMax(),jitter:this.randomizationFactor()}),this.timeout(t.timeout==null?(cov_220zhfwpnm().b[421][0]++,2e4):(cov_220zhfwpnm().b[421][1]++,t.timeout)),this._readyState="closed",this.uri=e;let s=(cov_220zhfwpnm().s[856]++,(cov_220zhfwpnm().b[422][0]++,t.parser)||(cov_220zhfwpnm().b[422][1]++,Et));cov_220zhfwpnm().s[857]++;this.encoder=new s.Encoder(),this.decoder=new s.Decoder(),this._autoConnect=t.autoConnect!==!1,(cov_220zhfwpnm().b[423][0]++,this._autoConnect)&&(cov_220zhfwpnm().b[423][1]++,this.open());}reconnection(e){cov_220zhfwpnm().f[273]++;cov_220zhfwpnm().s[858]++;return arguments.length?(cov_220zhfwpnm().b[424][0]++,this._reconnection=!!e,(cov_220zhfwpnm().b[425][0]++,e)||(cov_220zhfwpnm().b[425][1]++,this.skipReconnect=!0),this):(cov_220zhfwpnm().b[424][1]++,this._reconnection);}reconnectionAttempts(e){cov_220zhfwpnm().f[274]++;cov_220zhfwpnm().s[859]++;return e===void 0?(cov_220zhfwpnm().b[426][0]++,this._reconnectionAttempts):(cov_220zhfwpnm().b[426][1]++,this._reconnectionAttempts=e,this);}reconnectionDelay(e){cov_220zhfwpnm().f[275]++;var t;cov_220zhfwpnm().s[860]++;return e===void 0?(cov_220zhfwpnm().b[427][0]++,this._reconnectionDelay):(cov_220zhfwpnm().b[427][1]++,this._reconnectionDelay=e,(cov_220zhfwpnm().b[428][0]++,(t=this.backoff)===null)||(cov_220zhfwpnm().b[428][1]++,t===void 0)||(cov_220zhfwpnm().b[428][2]++,t.setMin(e)),this);}randomizationFactor(e){cov_220zhfwpnm().f[276]++;var t;cov_220zhfwpnm().s[861]++;return e===void 0?(cov_220zhfwpnm().b[429][0]++,this._randomizationFactor):(cov_220zhfwpnm().b[429][1]++,this._randomizationFactor=e,(cov_220zhfwpnm().b[430][0]++,(t=this.backoff)===null)||(cov_220zhfwpnm().b[430][1]++,t===void 0)||(cov_220zhfwpnm().b[430][2]++,t.setJitter(e)),this);}reconnectionDelayMax(e){cov_220zhfwpnm().f[277]++;var t;cov_220zhfwpnm().s[862]++;return e===void 0?(cov_220zhfwpnm().b[431][0]++,this._reconnectionDelayMax):(cov_220zhfwpnm().b[431][1]++,this._reconnectionDelayMax=e,(cov_220zhfwpnm().b[432][0]++,(t=this.backoff)===null)||(cov_220zhfwpnm().b[432][1]++,t===void 0)||(cov_220zhfwpnm().b[432][2]++,t.setMax(e)),this);}timeout(e){cov_220zhfwpnm().f[278]++;cov_220zhfwpnm().s[863]++;return arguments.length?(cov_220zhfwpnm().b[433][0]++,this._timeout=e,this):(cov_220zhfwpnm().b[433][1]++,this._timeout);}maybeReconnectOnOpen(){cov_220zhfwpnm().f[279]++;cov_220zhfwpnm().s[864]++;(cov_220zhfwpnm().b[434][0]++,!this._reconnecting)&&(cov_220zhfwpnm().b[434][1]++,this._reconnection)&&(cov_220zhfwpnm().b[434][2]++,this.backoff.attempts===0)&&(cov_220zhfwpnm().b[434][3]++,this.reconnect());}open(e){cov_220zhfwpnm().f[280]++;cov_220zhfwpnm().s[865]++;if(~this._readyState.indexOf("open")){cov_220zhfwpnm().b[435][0]++;cov_220zhfwpnm().s[866]++;return this;}else{cov_220zhfwpnm().b[435][1]++;}cov_220zhfwpnm().s[867]++;this.engine=new N(this.uri,this.opts);let t=(cov_220zhfwpnm().s[868]++,this.engine),r=(cov_220zhfwpnm().s[869]++,this);cov_220zhfwpnm().s[870]++;this._readyState="opening",this.skipReconnect=!1;cov_220zhfwpnm().s[873]++;let s=(cov_220zhfwpnm().s[871]++,p(t,"open",function(){cov_220zhfwpnm().f[281]++;cov_220zhfwpnm().s[872]++;r.onopen(),(cov_220zhfwpnm().b[436][0]++,e)&&(cov_220zhfwpnm().b[436][1]++,e());})),n=a=>{cov_220zhfwpnm().f[282]++;cov_220zhfwpnm().s[874]++;this.cleanup(),this._readyState="closed",this.emitReserved("error",a),e?(cov_220zhfwpnm().b[437][0]++,e(a)):(cov_220zhfwpnm().b[437][1]++,this.maybeReconnectOnOpen());},o=(cov_220zhfwpnm().s[875]++,p(t,"error",n));cov_220zhfwpnm().s[876]++;if(this._timeout!==!1){cov_220zhfwpnm().b[438][0]++;let a=(cov_220zhfwpnm().s[877]++,this._timeout),h=(cov_220zhfwpnm().s[878]++,this.setTimeoutFn(()=>{cov_220zhfwpnm().f[283]++;cov_220zhfwpnm().s[879]++;s(),n(new Error("timeout")),t.close();},a));cov_220zhfwpnm().s[880]++;(cov_220zhfwpnm().b[439][0]++,this.opts.autoUnref)&&(cov_220zhfwpnm().b[439][1]++,h.unref()),this.subs.push(()=>{cov_220zhfwpnm().f[284]++;cov_220zhfwpnm().s[881]++;this.clearTimeoutFn(h);});}else{cov_220zhfwpnm().b[438][1]++;}cov_220zhfwpnm().s[882]++;return this.subs.push(s),this.subs.push(o),this;}connect(e){cov_220zhfwpnm().f[285]++;cov_220zhfwpnm().s[883]++;return this.open(e);}onopen(){cov_220zhfwpnm().f[286]++;cov_220zhfwpnm().s[884]++;this.cleanup(),this._readyState="open",this.emitReserved("open");let e=(cov_220zhfwpnm().s[885]++,this.engine);cov_220zhfwpnm().s[886]++;this.subs.push(p(e,"ping",this.onping.bind(this)),p(e,"data",this.ondata.bind(this)),p(e,"error",this.onerror.bind(this)),p(e,"close",this.onclose.bind(this)),p(this.decoder,"decoded",this.ondecoded.bind(this)));}onping(){cov_220zhfwpnm().f[287]++;cov_220zhfwpnm().s[887]++;this.emitReserved("ping");}ondata(e){cov_220zhfwpnm().f[288]++;cov_220zhfwpnm().s[888]++;try{cov_220zhfwpnm().s[889]++;this.decoder.add(e);}catch(t){cov_220zhfwpnm().s[890]++;this.onclose("parse error",t);}}ondecoded(e){cov_220zhfwpnm().f[289]++;cov_220zhfwpnm().s[891]++;g(()=>{cov_220zhfwpnm().f[290]++;cov_220zhfwpnm().s[892]++;this.emitReserved("packet",e);},this.setTimeoutFn);}onerror(e){cov_220zhfwpnm().f[291]++;cov_220zhfwpnm().s[893]++;this.emitReserved("error",e);}socket(e,t){cov_220zhfwpnm().f[292]++;let r=(cov_220zhfwpnm().s[894]++,this.nsps[e]);cov_220zhfwpnm().s[895]++;return r?(cov_220zhfwpnm().b[440][0]++,(cov_220zhfwpnm().b[441][0]++,this._autoConnect)&&(cov_220zhfwpnm().b[441][1]++,!r.active)&&(cov_220zhfwpnm().b[441][2]++,r.connect())):(cov_220zhfwpnm().b[440][1]++,r=new O(this,e,t),this.nsps[e]=r),r;}_destroy(e){cov_220zhfwpnm().f[293]++;let t=(cov_220zhfwpnm().s[896]++,Object.keys(this.nsps));cov_220zhfwpnm().s[897]++;for(let r of t){cov_220zhfwpnm().s[898]++;if(this.nsps[r].active){cov_220zhfwpnm().b[442][0]++;cov_220zhfwpnm().s[899]++;return;}else{cov_220zhfwpnm().b[442][1]++;}}cov_220zhfwpnm().s[900]++;this._close();}_packet(e){cov_220zhfwpnm().f[294]++;let t=(cov_220zhfwpnm().s[901]++,this.encoder.encode(e));cov_220zhfwpnm().s[902]++;for(let r=(cov_220zhfwpnm().s[903]++,0);r{cov_220zhfwpnm().f[296]++;cov_220zhfwpnm().s[906]++;return e();}),this.subs.length=0,this.decoder.destroy();}_close(){cov_220zhfwpnm().f[297]++;cov_220zhfwpnm().s[907]++;this.skipReconnect=!0,this._reconnecting=!1,this.onclose("forced close");}disconnect(){cov_220zhfwpnm().f[298]++;cov_220zhfwpnm().s[908]++;return this._close();}onclose(e,t){cov_220zhfwpnm().f[299]++;var r;cov_220zhfwpnm().s[909]++;this.cleanup(),(cov_220zhfwpnm().b[443][0]++,(r=this.engine)===null)||(cov_220zhfwpnm().b[443][1]++,r===void 0)||(cov_220zhfwpnm().b[443][2]++,r.close()),this.backoff.reset(),this._readyState="closed",this.emitReserved("close",e,t),(cov_220zhfwpnm().b[444][0]++,this._reconnection)&&(cov_220zhfwpnm().b[444][1]++,!this.skipReconnect)&&(cov_220zhfwpnm().b[444][2]++,this.reconnect());}reconnect(){cov_220zhfwpnm().f[300]++;cov_220zhfwpnm().s[910]++;if((cov_220zhfwpnm().b[446][0]++,this._reconnecting)||(cov_220zhfwpnm().b[446][1]++,this.skipReconnect)){cov_220zhfwpnm().b[445][0]++;cov_220zhfwpnm().s[911]++;return this;}else{cov_220zhfwpnm().b[445][1]++;}let e=(cov_220zhfwpnm().s[912]++,this);cov_220zhfwpnm().s[913]++;if(this.backoff.attempts>=this._reconnectionAttempts){cov_220zhfwpnm().b[447][0]++;cov_220zhfwpnm().s[914]++;this.backoff.reset(),this.emitReserved("reconnect_failed"),this._reconnecting=!1;}else{cov_220zhfwpnm().b[447][1]++;let t=(cov_220zhfwpnm().s[915]++,this.backoff.duration());cov_220zhfwpnm().s[916]++;this._reconnecting=!0;let r=(cov_220zhfwpnm().s[917]++,this.setTimeoutFn(()=>{cov_220zhfwpnm().f[301]++;cov_220zhfwpnm().s[918]++;(cov_220zhfwpnm().b[448][0]++,e.skipReconnect)||(cov_220zhfwpnm().b[448][1]++,this.emitReserved("reconnect_attempt",e.backoff.attempts),(cov_220zhfwpnm().b[449][0]++,!e.skipReconnect)&&(cov_220zhfwpnm().b[449][1]++,e.open(s=>{cov_220zhfwpnm().f[302]++;cov_220zhfwpnm().s[919]++;s?(cov_220zhfwpnm().b[450][0]++,e._reconnecting=!1,e.reconnect(),this.emitReserved("reconnect_error",s)):(cov_220zhfwpnm().b[450][1]++,e.onreconnect());})));},t));cov_220zhfwpnm().s[920]++;(cov_220zhfwpnm().b[451][0]++,this.opts.autoUnref)&&(cov_220zhfwpnm().b[451][1]++,r.unref()),this.subs.push(()=>{cov_220zhfwpnm().f[303]++;cov_220zhfwpnm().s[921]++;this.clearTimeoutFn(r);});}}onreconnect(){cov_220zhfwpnm().f[304]++;let e=(cov_220zhfwpnm().s[922]++,this.backoff.attempts);cov_220zhfwpnm().s[923]++;this._reconnecting=!1,this.backoff.reset(),this.emitReserved("reconnect",e);}};var V=(cov_220zhfwpnm().s[924]++,{});function z(i,e){cov_220zhfwpnm().f[305]++;cov_220zhfwpnm().s[925]++;(cov_220zhfwpnm().b[452][0]++,typeof i=="object")&&(cov_220zhfwpnm().b[452][1]++,e=i,i=void 0),e=(cov_220zhfwpnm().b[453][0]++,e)||(cov_220zhfwpnm().b[453][1]++,{});let t=(cov_220zhfwpnm().s[926]++,re(i,(cov_220zhfwpnm().b[454][0]++,e.path)||(cov_220zhfwpnm().b[454][1]++,"/socket.io"))),r=(cov_220zhfwpnm().s[927]++,t.source),s=(cov_220zhfwpnm().s[928]++,t.id),n=(cov_220zhfwpnm().s[929]++,t.path),o=(cov_220zhfwpnm().s[930]++,(cov_220zhfwpnm().b[455][0]++,V[s])&&(cov_220zhfwpnm().b[455][1]++,n in V[s].nsps)),a=(cov_220zhfwpnm().s[931]++,(cov_220zhfwpnm().b[456][0]++,e.forceNew)||(cov_220zhfwpnm().b[456][1]++,e["force new connection"])||(cov_220zhfwpnm().b[456][2]++,e.multiplex===!1)||(cov_220zhfwpnm().b[456][3]++,o)),h;cov_220zhfwpnm().s[932]++;return a?(cov_220zhfwpnm().b[457][0]++,h=new B(r,e)):(cov_220zhfwpnm().b[457][1]++,(cov_220zhfwpnm().b[458][0]++,V[s])||(cov_220zhfwpnm().b[458][1]++,V[s]=new B(r,e)),h=V[s]),(cov_220zhfwpnm().b[459][0]++,t.query)&&(cov_220zhfwpnm().b[459][1]++,!e.query)&&(cov_220zhfwpnm().b[459][2]++,e.query=t.queryKey),h.socket(t.path,e);}cov_220zhfwpnm().s[933]++;Object.assign(z,{Manager:B,Socket:O,io:z,connect:z});var I=(cov_220zhfwpnm().s[934]++,function(i){cov_220zhfwpnm().f[306]++;cov_220zhfwpnm().s[935]++;return i.CONNECTED="CONNECTED",i.DISCONNECTED="DISCONNECTED",i.RECONNECTING="RECONNECTING",i;}((cov_220zhfwpnm().b[460][0]++,I)||(cov_220zhfwpnm().b[460][1]++,{})));var he=(cov_220zhfwpnm().s[936]++,new v("REALTIME_ALARM_EVENT_NORMALIZER",{providedIn:"root",factory:()=>{cov_220zhfwpnm().f[307]++;cov_220zhfwpnm().s[937]++;return l(Ue);}})),Ue=(cov_220zhfwpnm().s[938]++,(()=>{cov_220zhfwpnm().f[308]++;class i{parseBackendTriggeredPayload(t){cov_220zhfwpnm().f[309]++;cov_220zhfwpnm().s[939]++;if(!this.isObject(t)){cov_220zhfwpnm().b[461][0]++;cov_220zhfwpnm().s[940]++;return null;}else{cov_220zhfwpnm().b[461][1]++;}let r=(cov_220zhfwpnm().s[941]++,t.alarmEventId),s=(cov_220zhfwpnm().s[942]++,t.wardId),n=(cov_220zhfwpnm().s[943]++,t.alarmRuleId),o=(cov_220zhfwpnm().s[944]++,this.parseWardId(s));cov_220zhfwpnm().s[945]++;return(cov_220zhfwpnm().b[463][0]++,typeof r!="string")||(cov_220zhfwpnm().b[463][1]++,o===null)||(cov_220zhfwpnm().b[463][2]++,typeof n!="string")?(cov_220zhfwpnm().b[462][0]++,null):(cov_220zhfwpnm().b[462][1]++,{alarmEventId:r,wardId:o,alarmRuleId:n});}parseBackendResolvedPayload(t){cov_220zhfwpnm().f[310]++;cov_220zhfwpnm().s[946]++;if(!this.isObject(t)){cov_220zhfwpnm().b[464][0]++;cov_220zhfwpnm().s[947]++;return null;}else{cov_220zhfwpnm().b[464][1]++;}let r=(cov_220zhfwpnm().s[948]++,t.alarmEventId),s=(cov_220zhfwpnm().s[949]++,t.wardId),n=(cov_220zhfwpnm().s[950]++,this.parseWardId(s));cov_220zhfwpnm().s[951]++;return typeof r!="string"?(cov_220zhfwpnm().b[465][0]++,null):(cov_220zhfwpnm().b[465][1]++,{alarmEventId:r,wardId:(cov_220zhfwpnm().b[466][0]++,n)??(cov_220zhfwpnm().b[466][1]++,void 0)});}isObject(t){cov_220zhfwpnm().f[311]++;cov_220zhfwpnm().s[952]++;return(cov_220zhfwpnm().b[467][0]++,typeof t=="object")&&(cov_220zhfwpnm().b[467][1]++,t!==null);}parseWardId(t){cov_220zhfwpnm().f[312]++;cov_220zhfwpnm().s[953]++;if((cov_220zhfwpnm().b[469][0]++,typeof t=="number")&&(cov_220zhfwpnm().b[469][1]++,Number.isInteger(t))){cov_220zhfwpnm().b[468][0]++;cov_220zhfwpnm().s[954]++;return t;}else{cov_220zhfwpnm().b[468][1]++;}cov_220zhfwpnm().s[955]++;if(typeof t!="string"){cov_220zhfwpnm().b[470][0]++;cov_220zhfwpnm().s[956]++;return null;}else{cov_220zhfwpnm().b[470][1]++;}let r=(cov_220zhfwpnm().s[957]++,t.trim());cov_220zhfwpnm().s[958]++;if(!r){cov_220zhfwpnm().b[471][0]++;cov_220zhfwpnm().s[959]++;return null;}else{cov_220zhfwpnm().b[471][1]++;}let s=(cov_220zhfwpnm().s[960]++,Number(r));cov_220zhfwpnm().s[961]++;return Number.isInteger(s)?(cov_220zhfwpnm().b[472][0]++,s):(cov_220zhfwpnm().b[472][1]++,null);}static ɵfac=(cov_220zhfwpnm().s[962]++,function(r){cov_220zhfwpnm().f[313]++;cov_220zhfwpnm().s[963]++;return new((cov_220zhfwpnm().b[473][0]++,r)||(cov_220zhfwpnm().b[473][1]++,i))();});static ɵprov=(cov_220zhfwpnm().s[964]++,w({token:i,factory:i.ɵfac,providedIn:"root"}));}cov_220zhfwpnm().s[965]++;return i;})());var fe=(cov_220zhfwpnm().s[966]++,new v("ALARM_LIFECYCLE_NOTIFIER",{providedIn:"root",factory:()=>{cov_220zhfwpnm().f[314]++;cov_220zhfwpnm().s[967]++;return l(De);}})),De=(cov_220zhfwpnm().s[968]++,(()=>{cov_220zhfwpnm().f[315]++;class i{alarmStateService=(cov_220zhfwpnm().s[969]++,l(J));publish(t,r,s,n){cov_220zhfwpnm().f[316]++;cov_220zhfwpnm().s[970]++;this.publishNotification(t,r,s,n),this.publishLifecycleUpdate(t,r);}publishNotification(t,r,s,n){cov_220zhfwpnm().f[317]++;let o=(cov_220zhfwpnm().s[971]++,t==="triggered"?(cov_220zhfwpnm().b[474][0]++,(cov_220zhfwpnm().b[475][0]++,Nt(n?.alarmName,n?.priority))||(cov_220zhfwpnm().b[475][1]++,St)):(cov_220zhfwpnm().b[474][1]++,Ct));cov_220zhfwpnm().s[972]++;this.alarmStateService.onNotificationReceived({notificationId:`alarm-${t}-${r}`,title:o,sentAt:s,eventType:t});}publishLifecycleUpdate(t,r){cov_220zhfwpnm().f[318]++;cov_220zhfwpnm().s[973]++;if(typeof globalThis.dispatchEvent=="function"){cov_220zhfwpnm().b[476][0]++;cov_220zhfwpnm().s[974]++;if(typeof CustomEvent=="function"){cov_220zhfwpnm().b[477][0]++;cov_220zhfwpnm().s[975]++;globalThis.dispatchEvent(new CustomEvent(ot,{detail:{type:t,alarmEventId:r}}));cov_220zhfwpnm().s[976]++;return;}else{cov_220zhfwpnm().b[477][1]++;}cov_220zhfwpnm().s[977]++;globalThis.dispatchEvent(new Event(ot));}else{cov_220zhfwpnm().b[476][1]++;}}static ɵfac=(cov_220zhfwpnm().s[978]++,function(r){cov_220zhfwpnm().f[319]++;cov_220zhfwpnm().s[979]++;return new((cov_220zhfwpnm().b[478][0]++,r)||(cov_220zhfwpnm().b[478][1]++,i))();});static ɵprov=(cov_220zhfwpnm().s[980]++,w({token:i,factory:i.ɵfac,providedIn:"root"}));}cov_220zhfwpnm().s[981]++;return i;})());var le=(cov_220zhfwpnm().s[982]++,new v("WARD_SOCKET_ROOM_COORDINATOR",{providedIn:"root",factory:()=>{cov_220zhfwpnm().f[320]++;cov_220zhfwpnm().s[983]++;return l(Fe);}})),Fe=(cov_220zhfwpnm().s[984]++,(()=>{cov_220zhfwpnm().f[321]++;class i{wardRealtimeCache=(cov_220zhfwpnm().s[985]++,l(Ot,{optional:!0}));joinedRooms=(cov_220zhfwpnm().s[986]++,new Set());currentUserId=(cov_220zhfwpnm().s[987]++,null);activateUser(t){cov_220zhfwpnm().f[322]++;let r=(cov_220zhfwpnm().s[988]++,t.trim());cov_220zhfwpnm().s[989]++;if(!r){cov_220zhfwpnm().b[479][0]++;cov_220zhfwpnm().s[990]++;return{roomsToLeave:[],roomsToJoin:[]};}else{cov_220zhfwpnm().b[479][1]++;}let s=(cov_220zhfwpnm().s[991]++,(cov_220zhfwpnm().b[481][0]++,this.currentUserId)&&(cov_220zhfwpnm().b[481][1]++,this.currentUserId!==r)?(cov_220zhfwpnm().b[480][0]++,Array.from(this.joinedRooms.values())):(cov_220zhfwpnm().b[480][1]++,[]));cov_220zhfwpnm().s[992]++;(cov_220zhfwpnm().b[482][0]++,s.length>0)&&(cov_220zhfwpnm().b[482][1]++,this.joinedRooms.clear()),this.currentUserId=r;let n=(cov_220zhfwpnm().s[993]++,(cov_220zhfwpnm().b[483][0]++,this.wardRealtimeCache?.getWardIds(r))??(cov_220zhfwpnm().b[483][1]++,[])),o=(cov_220zhfwpnm().s[994]++,[]);cov_220zhfwpnm().s[995]++;for(let a of n){cov_220zhfwpnm().s[996]++;(cov_220zhfwpnm().b[484][0]++,this.joinedRooms.has(a))||(cov_220zhfwpnm().b[484][1]++,this.joinedRooms.add(a),o.push(a));}cov_220zhfwpnm().s[997]++;return this.persistJoinedRooms(),{roomsToLeave:s,roomsToJoin:o};}deactivateUser(){cov_220zhfwpnm().f[323]++;cov_220zhfwpnm().s[998]++;(cov_220zhfwpnm().b[485][0]++,this.currentUserId)&&(cov_220zhfwpnm().b[485][1]++,this.wardRealtimeCache)&&(cov_220zhfwpnm().b[485][2]++,this.wardRealtimeCache.clearWardIds(this.currentUserId)),this.currentUserId=null;let t=(cov_220zhfwpnm().s[999]++,Array.from(this.joinedRooms.values()));cov_220zhfwpnm().s[1000]++;return this.joinedRooms.clear(),t;}requestJoinRoom(t){cov_220zhfwpnm().f[324]++;let r=(cov_220zhfwpnm().s[1001]++,t.trim());cov_220zhfwpnm().s[1002]++;return(cov_220zhfwpnm().b[487][0]++,!r)||(cov_220zhfwpnm().b[487][1]++,this.joinedRooms.has(r))?(cov_220zhfwpnm().b[486][0]++,null):(cov_220zhfwpnm().b[486][1]++,this.joinedRooms.add(r),this.persistJoinedRooms(),r);}requestLeaveRoom(t){cov_220zhfwpnm().f[325]++;let r=(cov_220zhfwpnm().s[1003]++,t.trim());cov_220zhfwpnm().s[1004]++;return(cov_220zhfwpnm().b[489][0]++,!r)||(cov_220zhfwpnm().b[489][1]++,!this.joinedRooms.has(r))?(cov_220zhfwpnm().b[488][0]++,null):(cov_220zhfwpnm().b[488][1]++,this.joinedRooms.delete(r),this.persistJoinedRooms(),r);}getJoinedRooms(){cov_220zhfwpnm().f[326]++;cov_220zhfwpnm().s[1005]++;return Array.from(this.joinedRooms.values());}resetRuntimeState(){cov_220zhfwpnm().f[327]++;cov_220zhfwpnm().s[1006]++;this.currentUserId=null,this.joinedRooms.clear();}persistJoinedRooms(){cov_220zhfwpnm().f[328]++;cov_220zhfwpnm().s[1007]++;(cov_220zhfwpnm().b[490][0]++,!this.currentUserId)||(cov_220zhfwpnm().b[490][1]++,!this.wardRealtimeCache)||(cov_220zhfwpnm().b[490][2]++,this.wardRealtimeCache.setWardIds(this.currentUserId,Array.from(this.joinedRooms.values())));}static ɵfac=(cov_220zhfwpnm().s[1008]++,function(r){cov_220zhfwpnm().f[329]++;cov_220zhfwpnm().s[1009]++;return new((cov_220zhfwpnm().b[491][0]++,r)||(cov_220zhfwpnm().b[491][1]++,i))();});static ɵprov=(cov_220zhfwpnm().s[1010]++,w({token:i,factory:i.ɵfac,providedIn:"root"}));}cov_220zhfwpnm().s[1011]++;return i;})());var qe=(cov_220zhfwpnm().s[1012]++,new v("SOCKET_IO_FACTORY",{providedIn:"root",factory:()=>{cov_220zhfwpnm().f[330]++;cov_220zhfwpnm().s[1013]++;return z;}})),ss=(cov_220zhfwpnm().s[1014]++,(()=>{cov_220zhfwpnm().f[331]++;class i{socketIoFactory=(cov_220zhfwpnm().s[1015]++,l(qe));http=(cov_220zhfwpnm().s[1016]++,l(At,{optional:!0}));alarmApiService=(cov_220zhfwpnm().s[1017]++,l(xt,{optional:!0}));alarmStateService=(cov_220zhfwpnm().s[1018]++,l(J));apiBaseUrl=(cov_220zhfwpnm().s[1019]++,l(kt,{optional:!0}));internalAuthService=(cov_220zhfwpnm().s[1020]++,l(It,{optional:!0}));eventNormalizer=(cov_220zhfwpnm().s[1021]++,l(he));lifecycleNotifier=(cov_220zhfwpnm().s[1022]++,l(fe));roomCoordinator=(cov_220zhfwpnm().s[1023]++,l(le));connectionStatus$=(cov_220zhfwpnm().s[1024]++,new Rt(I.DISCONNECTED));destroy$=(cov_220zhfwpnm().s[1025]++,new vt());socket=(cov_220zhfwpnm().s[1026]++,null);authLifecycleInitialized=(cov_220zhfwpnm().s[1027]++,!1);activeUserId=(cov_220zhfwpnm().s[1028]++,null);wardBootstrapInFlightUserIds=(cov_220zhfwpnm().s[1029]++,new Set());wardBootstrapDoneUserIds=(cov_220zhfwpnm().s[1030]++,new Set());initialize(t){cov_220zhfwpnm().f[332]++;cov_220zhfwpnm().s[1031]++;this.connect(),this.ensureAuthLifecycleSubscription();cov_220zhfwpnm().s[1032]++;for(let r of t){cov_220zhfwpnm().s[1033]++;this.joinRoom(r);}}refreshWardRoomSubscription(){cov_220zhfwpnm().f[333]++;cov_220zhfwpnm().s[1034]++;(cov_220zhfwpnm().b[492][0]++,this.activeUserId)&&(cov_220zhfwpnm().b[492][1]++,this.bootstrapWardRoomSubscription(this.activeUserId,!0));}getConnectionStatus$(){cov_220zhfwpnm().f[334]++;cov_220zhfwpnm().s[1035]++;return this.connectionStatus$.asObservable();}joinRoom(t){cov_220zhfwpnm().f[335]++;let r=(cov_220zhfwpnm().s[1036]++,this.roomCoordinator.requestJoinRoom(t));cov_220zhfwpnm().s[1037]++;(cov_220zhfwpnm().b[493][0]++,r)&&(cov_220zhfwpnm().b[493][1]++,this.socket?.emit("join-ward",r));}leaveRoom(t){cov_220zhfwpnm().f[336]++;let r=(cov_220zhfwpnm().s[1038]++,this.roomCoordinator.requestLeaveRoom(t));cov_220zhfwpnm().s[1039]++;(cov_220zhfwpnm().b[494][0]++,r)&&(cov_220zhfwpnm().b[494][1]++,this.socket?.emit("leave-ward",r));}ngOnDestroy(){cov_220zhfwpnm().f[337]++;cov_220zhfwpnm().s[1040]++;this.disconnect();}connect(){cov_220zhfwpnm().f[338]++;cov_220zhfwpnm().s[1041]++;(cov_220zhfwpnm().b[495][0]++,this.socket)||(cov_220zhfwpnm().b[495][1]++,this.socket=this.socketIoFactory(this.resolveSocketUrl(),{transports:["websocket"],reconnection:!0,autoConnect:!0}),this.socket.on("connect",()=>{cov_220zhfwpnm().f[339]++;cov_220zhfwpnm().s[1042]++;this.connectionStatus$.next(I.CONNECTED),this.rejoinAllRooms();}).on("disconnect",()=>{cov_220zhfwpnm().f[340]++;cov_220zhfwpnm().s[1043]++;this.connectionStatus$.next(I.DISCONNECTED);}).on("reconnect_attempt",()=>{cov_220zhfwpnm().f[341]++;cov_220zhfwpnm().s[1044]++;this.connectionStatus$.next(I.RECONNECTING);}),st(this.socket,"push-event").pipe(x(this.destroy$)).subscribe(t=>{cov_220zhfwpnm().f[342]++;cov_220zhfwpnm().s[1045]++;this.handleBackendTriggeredRawEvent(t);}),st(this.socket,"alarm-resolved").pipe(x(this.destroy$)).subscribe(t=>{cov_220zhfwpnm().f[343]++;cov_220zhfwpnm().s[1046]++;this.handleBackendResolvedRawEvent(t);}));}disconnect(){cov_220zhfwpnm().f[344]++;cov_220zhfwpnm().s[1047]++;(cov_220zhfwpnm().b[496][0]++,this.socket)&&(cov_220zhfwpnm().b[496][1]++,this.socket.removeAllListeners(),this.socket.disconnect(),this.socket=null,this.roomCoordinator.resetRuntimeState(),this.connectionStatus$.next(I.DISCONNECTED),this.destroy$.next(),this.destroy$.complete());}ensureAuthLifecycleSubscription(){cov_220zhfwpnm().f[345]++;cov_220zhfwpnm().s[1048]++;(cov_220zhfwpnm().b[497][0]++,this.authLifecycleInitialized)||(cov_220zhfwpnm().b[497][1]++,!this.internalAuthService)||(cov_220zhfwpnm().b[497][2]++,this.authLifecycleInitialized=!0,this.internalAuthService.getCurrentUser$().pipe(x(this.destroy$)).subscribe(t=>{cov_220zhfwpnm().f[346]++;cov_220zhfwpnm().s[1049]++;if(!t){cov_220zhfwpnm().b[498][0]++;let n=(cov_220zhfwpnm().s[1050]++,this.activeUserId);cov_220zhfwpnm().s[1051]++;(cov_220zhfwpnm().b[499][0]++,n)&&(cov_220zhfwpnm().b[499][1]++,this.wardBootstrapInFlightUserIds.delete(n),this.wardBootstrapDoneUserIds.delete(n)),this.activeUserId=null,this.emitLeaveMany(this.roomCoordinator.deactivateUser());cov_220zhfwpnm().s[1052]++;return;}else{cov_220zhfwpnm().b[498][1]++;}let r=(cov_220zhfwpnm().s[1053]++,t.userId.trim());cov_220zhfwpnm().s[1054]++;if(!r){cov_220zhfwpnm().b[500][0]++;cov_220zhfwpnm().s[1055]++;return;}else{cov_220zhfwpnm().b[500][1]++;}cov_220zhfwpnm().s[1056]++;this.activeUserId=r;let s=(cov_220zhfwpnm().s[1057]++,this.roomCoordinator.activateUser(r));cov_220zhfwpnm().s[1058]++;this.emitLeaveMany(s.roomsToLeave),this.emitJoinMany(s.roomsToJoin),(cov_220zhfwpnm().b[501][0]++,s.roomsToJoin.length===0)&&(cov_220zhfwpnm().b[501][1]++,this.bootstrapWardRoomSubscription(r));}));}bootstrapWardRoomSubscription(t,r=(cov_220zhfwpnm().b[502][0]++,!1)){cov_220zhfwpnm().f[347]++;cov_220zhfwpnm().s[1059]++;(cov_220zhfwpnm().b[503][0]++,this.http)&&((cov_220zhfwpnm().b[503][1]++,this.wardBootstrapInFlightUserIds.has(t))||(cov_220zhfwpnm().b[503][2]++,!r)&&(cov_220zhfwpnm().b[503][3]++,this.wardBootstrapDoneUserIds.has(t))||(cov_220zhfwpnm().b[503][4]++,this.wardBootstrapInFlightUserIds.add(t),this.http.get(this.resolvePlantAllEndpoint()).pipe(it(s=>{cov_220zhfwpnm().f[348]++;cov_220zhfwpnm().s[1060]++;return{response:s,success:!0};}),nt(()=>{cov_220zhfwpnm().f[349]++;cov_220zhfwpnm().s[1061]++;return $({response:null,success:!1});}),x(this.destroy$),Tt(()=>{cov_220zhfwpnm().f[350]++;cov_220zhfwpnm().s[1062]++;this.wardBootstrapInFlightUserIds.delete(t),this.wardBootstrapDoneUserIds.add(t);})).subscribe(s=>{cov_220zhfwpnm().f[351]++;cov_220zhfwpnm().s[1063]++;if(!s.success){cov_220zhfwpnm().b[504][0]++;cov_220zhfwpnm().s[1064]++;return;}else{cov_220zhfwpnm().b[504][1]++;}let n=(cov_220zhfwpnm().s[1065]++,this.extractWardIdsFromPlantResponse(s.response));cov_220zhfwpnm().s[1066]++;if(r){cov_220zhfwpnm().b[505][0]++;cov_220zhfwpnm().s[1067]++;this.syncJoinedRoomsWithWardIds(n);cov_220zhfwpnm().s[1068]++;return;}else{cov_220zhfwpnm().b[505][1]++;}cov_220zhfwpnm().s[1069]++;for(let o of n){cov_220zhfwpnm().s[1070]++;this.joinRoom(o);}})));}syncJoinedRoomsWithWardIds(t){cov_220zhfwpnm().f[352]++;let r=(cov_220zhfwpnm().s[1071]++,new Set(t));cov_220zhfwpnm().s[1072]++;for(let s of this.roomCoordinator.getJoinedRooms()){cov_220zhfwpnm().s[1073]++;(cov_220zhfwpnm().b[506][0]++,r.has(s))||(cov_220zhfwpnm().b[506][1]++,this.leaveRoom(s));}cov_220zhfwpnm().s[1074]++;for(let s of t){cov_220zhfwpnm().s[1075]++;this.joinRoom(s);}}handleBackendTriggeredRawEvent(t){cov_220zhfwpnm().f[353]++;let r=(cov_220zhfwpnm().s[1076]++,this.eventNormalizer.parseBackendTriggeredPayload(t));cov_220zhfwpnm().s[1077]++;(cov_220zhfwpnm().b[507][0]++,r)&&(cov_220zhfwpnm().b[507][1]++,this.joinRoom(String(r.wardId)),this.resolveTriggeredAlarmDetails(r.alarmEventId).pipe(x(this.destroy$)).subscribe(s=>{cov_220zhfwpnm().f[354]++;let n=(cov_220zhfwpnm().s[1078]++,new Date().toISOString());cov_220zhfwpnm().s[1079]++;this.alarmStateService.onAlarmTriggered({id:r.alarmEventId,alarmRuleId:r.alarmRuleId,alarmName:s.alarmName,priority:s.priority,activationTime:n,resolutionTime:null}),this.lifecycleNotifier.publish("triggered",r.alarmEventId,n,{alarmName:s.alarmName,priority:s.priority});}));}handleBackendResolvedRawEvent(t){cov_220zhfwpnm().f[355]++;let r=(cov_220zhfwpnm().s[1080]++,this.eventNormalizer.parseBackendResolvedPayload(t));cov_220zhfwpnm().s[1081]++;if(!r){cov_220zhfwpnm().b[508][0]++;cov_220zhfwpnm().s[1082]++;return;}else{cov_220zhfwpnm().b[508][1]++;}cov_220zhfwpnm().s[1083]++;(cov_220zhfwpnm().b[509][0]++,typeof r.wardId=="number")&&(cov_220zhfwpnm().b[509][1]++,this.joinRoom(String(r.wardId))),this.alarmStateService.onAlarmResolved(r.alarmEventId);let s=(cov_220zhfwpnm().s[1084]++,new Date().toISOString());cov_220zhfwpnm().s[1085]++;this.lifecycleNotifier.publish("resolved",r.alarmEventId,s);}resolveTriggeredAlarmDetails(t){cov_220zhfwpnm().f[356]++;let r=(cov_220zhfwpnm().s[1086]++,{alarmName:"Allarme in corso",priority:R.ORANGE});cov_220zhfwpnm().s[1087]++;return this.alarmApiService?(cov_220zhfwpnm().b[510][0]++,this.alarmApiService.getAlarmEventById(t).pipe(it(s=>{cov_220zhfwpnm().f[357]++;cov_220zhfwpnm().s[1088]++;return{alarmName:(cov_220zhfwpnm().b[512][0]++,typeof s.alarmName=="string")&&(cov_220zhfwpnm().b[512][1]++,s.alarmName.trim())?(cov_220zhfwpnm().b[511][0]++,s.alarmName.trim()):(cov_220zhfwpnm().b[511][1]++,r.alarmName),priority:(cov_220zhfwpnm().b[513][0]++,this.normalizeAlarmPriority(s.priority))??(cov_220zhfwpnm().b[513][1]++,r.priority)};}),nt(()=>{cov_220zhfwpnm().f[358]++;cov_220zhfwpnm().s[1089]++;return $(r);}))):(cov_220zhfwpnm().b[510][1]++,$(r));}normalizeAlarmPriority(t){cov_220zhfwpnm().f[359]++;cov_220zhfwpnm().s[1090]++;if((cov_220zhfwpnm().b[515][0]++,typeof t=="number")&&(cov_220zhfwpnm().b[515][1]++,Number.isInteger(t))){cov_220zhfwpnm().b[514][0]++;cov_220zhfwpnm().s[1091]++;return this.isAlarmPriority(t)?(cov_220zhfwpnm().b[516][0]++,t):(cov_220zhfwpnm().b[516][1]++,null);}else{cov_220zhfwpnm().b[514][1]++;}cov_220zhfwpnm().s[1092]++;if(typeof t!="string"){cov_220zhfwpnm().b[517][0]++;cov_220zhfwpnm().s[1093]++;return null;}else{cov_220zhfwpnm().b[517][1]++;}let r=(cov_220zhfwpnm().s[1094]++,t.trim().toUpperCase());cov_220zhfwpnm().s[1095]++;if(!r){cov_220zhfwpnm().b[518][0]++;cov_220zhfwpnm().s[1096]++;return null;}else{cov_220zhfwpnm().b[518][1]++;}cov_220zhfwpnm().s[1097]++;if(r in R){cov_220zhfwpnm().b[519][0]++;let n=(cov_220zhfwpnm().s[1098]++,R[r]);cov_220zhfwpnm().s[1099]++;return(cov_220zhfwpnm().b[521][0]++,typeof n=="number")&&(cov_220zhfwpnm().b[521][1]++,this.isAlarmPriority(n))?(cov_220zhfwpnm().b[520][0]++,n):(cov_220zhfwpnm().b[520][1]++,null);}else{cov_220zhfwpnm().b[519][1]++;}let s=(cov_220zhfwpnm().s[1100]++,Number(r));cov_220zhfwpnm().s[1101]++;return(cov_220zhfwpnm().b[523][0]++,Number.isInteger(s))&&(cov_220zhfwpnm().b[523][1]++,this.isAlarmPriority(s))?(cov_220zhfwpnm().b[522][0]++,s):(cov_220zhfwpnm().b[522][1]++,null);}isAlarmPriority(t){cov_220zhfwpnm().f[360]++;cov_220zhfwpnm().s[1102]++;return(cov_220zhfwpnm().b[524][0]++,t===R.WHITE)||(cov_220zhfwpnm().b[524][1]++,t===R.GREEN)||(cov_220zhfwpnm().b[524][2]++,t===R.ORANGE)||(cov_220zhfwpnm().b[524][3]++,t===R.RED);}rejoinAllRooms(){cov_220zhfwpnm().f[361]++;cov_220zhfwpnm().s[1103]++;for(let t of this.roomCoordinator.getJoinedRooms()){cov_220zhfwpnm().s[1104]++;this.socket?.emit("join-ward",t);}}emitJoinMany(t){cov_220zhfwpnm().f[362]++;cov_220zhfwpnm().s[1105]++;for(let r of t){cov_220zhfwpnm().s[1106]++;this.socket?.emit("join-ward",r);}}emitLeaveMany(t){cov_220zhfwpnm().f[363]++;cov_220zhfwpnm().s[1107]++;for(let r of t){cov_220zhfwpnm().s[1108]++;this.socket?.emit("leave-ward",r);}}resolveSocketUrl(){cov_220zhfwpnm().f[364]++;let t=(cov_220zhfwpnm().s[1109]++,this.apiBaseUrl?.trim());cov_220zhfwpnm().s[1110]++;return t?(cov_220zhfwpnm().b[525][0]++,this.toWebsocketNamespaceUrl(t)):(cov_220zhfwpnm().b[525][1]++,`${globalThis.location.origin}/ws`);}toWebsocketNamespaceUrl(t){cov_220zhfwpnm().f[365]++;let r=(cov_220zhfwpnm().s[1111]++,t.replace(/\/+$/,""));cov_220zhfwpnm().s[1112]++;return r.endsWith("/api")?(cov_220zhfwpnm().b[526][0]++,`${r.slice(0,-4)}/ws`):(cov_220zhfwpnm().b[526][1]++,`${r}/ws`);}resolvePlantAllEndpoint(){cov_220zhfwpnm().f[366]++;let t=(cov_220zhfwpnm().s[1113]++,this.apiBaseUrl?.trim());cov_220zhfwpnm().s[1114]++;return t?(cov_220zhfwpnm().b[527][0]++,`${t}/plant/all`):(cov_220zhfwpnm().b[527][1]++,"/api/plant/all");}extractWardIdsFromPlantResponse(t){cov_220zhfwpnm().f[367]++;let r=(cov_220zhfwpnm().s[1115]++,this.extractPlantArray(t)),s=(cov_220zhfwpnm().s[1116]++,new Set());cov_220zhfwpnm().s[1117]++;for(let n of r){let o=(cov_220zhfwpnm().s[1118]++,this.normalizeWardId(n.wardId));cov_220zhfwpnm().s[1119]++;(cov_220zhfwpnm().b[528][0]++,o)&&(cov_220zhfwpnm().b[528][1]++,s.add(o));}cov_220zhfwpnm().s[1120]++;return Array.from(s.values());}extractPlantArray(t){cov_220zhfwpnm().f[368]++;cov_220zhfwpnm().s[1121]++;if(Array.isArray(t)){cov_220zhfwpnm().b[529][0]++;cov_220zhfwpnm().s[1122]++;return t.filter(s=>{cov_220zhfwpnm().f[369]++;cov_220zhfwpnm().s[1123]++;return(cov_220zhfwpnm().b[530][0]++,typeof s=="object")&&(cov_220zhfwpnm().b[530][1]++,s!==null);});}else{cov_220zhfwpnm().b[529][1]++;}cov_220zhfwpnm().s[1124]++;if((cov_220zhfwpnm().b[532][0]++,typeof t!="object")||(cov_220zhfwpnm().b[532][1]++,t===null)){cov_220zhfwpnm().b[531][0]++;cov_220zhfwpnm().s[1125]++;return[];}else{cov_220zhfwpnm().b[531][1]++;}let r=(cov_220zhfwpnm().s[1126]++,t);cov_220zhfwpnm().s[1127]++;return Array.isArray(r.data)?(cov_220zhfwpnm().b[533][0]++,r.data.filter(s=>{cov_220zhfwpnm().f[370]++;cov_220zhfwpnm().s[1128]++;return(cov_220zhfwpnm().b[534][0]++,typeof s=="object")&&(cov_220zhfwpnm().b[534][1]++,s!==null);})):(cov_220zhfwpnm().b[533][1]++,Array.isArray(r.plants)?(cov_220zhfwpnm().b[535][0]++,r.plants.filter(s=>{cov_220zhfwpnm().f[371]++;cov_220zhfwpnm().s[1129]++;return(cov_220zhfwpnm().b[536][0]++,typeof s=="object")&&(cov_220zhfwpnm().b[536][1]++,s!==null);})):(cov_220zhfwpnm().b[535][1]++,[]));}normalizeWardId(t){cov_220zhfwpnm().f[372]++;cov_220zhfwpnm().s[1130]++;if((cov_220zhfwpnm().b[538][0]++,typeof t=="number")&&(cov_220zhfwpnm().b[538][1]++,Number.isInteger(t))){cov_220zhfwpnm().b[537][0]++;cov_220zhfwpnm().s[1131]++;return String(t);}else{cov_220zhfwpnm().b[537][1]++;}cov_220zhfwpnm().s[1132]++;if(typeof t!="string"){cov_220zhfwpnm().b[539][0]++;cov_220zhfwpnm().s[1133]++;return null;}else{cov_220zhfwpnm().b[539][1]++;}let r=(cov_220zhfwpnm().s[1134]++,t.trim());cov_220zhfwpnm().s[1135]++;return(cov_220zhfwpnm().b[540][0]++,r)||(cov_220zhfwpnm().b[540][1]++,null);}static ɵfac=(cov_220zhfwpnm().s[1136]++,function(r){cov_220zhfwpnm().f[373]++;cov_220zhfwpnm().s[1137]++;return new((cov_220zhfwpnm().b[541][0]++,r)||(cov_220zhfwpnm().b[541][1]++,i))();});static ɵprov=(cov_220zhfwpnm().s[1138]++,w({token:i,factory:i.ɵfac,providedIn:"root"}));}cov_220zhfwpnm().s[1139]++;return i;})());export{ss as a};//# sourceMappingURL=chunk-6R7YSGCL.js.map +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJtIiwiY292XzIyMHpoZndwbm0iLCJzIiwiT2JqZWN0IiwiY3JlYXRlIiwib3BlbiIsImNsb3NlIiwicGluZyIsInBvbmciLCJtZXNzYWdlIiwidXBncmFkZSIsIm5vb3AiLCJQIiwia2V5cyIsImZvckVhY2giLCJpIiwiZiIsIlUiLCJ0eXBlIiwiZGF0YSIsIlB0IiwiYiIsIkJsb2IiLCJwcm90b3R5cGUiLCJ0b1N0cmluZyIsImNhbGwiLCJVdCIsIkFycmF5QnVmZmVyIiwiRHQiLCJpc1ZpZXciLCJidWZmZXIiLCJEIiwiZW5jb2RlUGFja2V0IiwiZSIsInQiLCJyIiwiQnQiLCJlbmNvZGVCbG9iQXNCYXNlNjQiLCJGaWxlUmVhZGVyIiwib25sb2FkIiwicmVzdWx0Iiwic3BsaXQiLCJyZWFkQXNEYXRhVVJMIiwiTHQiLCJVaW50OEFycmF5IiwiYnl0ZU9mZnNldCIsImJ5dGVMZW5ndGgiLCJhdCIsIkZ0IiwiYXJyYXlCdWZmZXIiLCJ0aGVuIiwiVGV4dEVuY29kZXIiLCJlbmNvZGUiLCJxdCIsIkYiLCJsZW5ndGgiLCJjaGFyQ29kZUF0IiwiV3QiLCJuIiwibyIsImEiLCJoIiwieSIsImQiLCJwZSIsInEiLCJkZWNvZGVQYWNrZXQiLCJqdCIsImNoYXJBdCIsImRlIiwic3Vic3RyaW5nIiwiZGVjb2RlQmFzZTY0UGFja2V0IiwiYmFzZTY0IiwibWFwQmluYXJ5IiwiTXQiLCJWdCIsImVuY29kZVBheWxvYWQiLCJBcnJheSIsImpvaW4iLCJ6dCIsImRlY29kZVBheWxvYWQiLCJwdXNoIiwiJHQiLCJUcmFuc2Zvcm1TdHJlYW0iLCJ0cmFuc2Zvcm0iLCJEYXRhVmlldyIsInNldFVpbnQ4Iiwic2V0VWludDE2Iiwic2V0QmlnVWludDY0IiwiQmlnSW50IiwiZW5xdWV1ZSIsImN0IiwiSCIsInJlZHVjZSIsIksiLCJzaGlmdCIsInNsaWNlIiwiSnQiLCJUZXh0RGVjb2RlciIsImdldFVpbnQxNiIsImdldFVpbnQzMiIsIk1hdGgiLCJwb3ciLCJkZWNvZGUiLCJodCIsIm1lIiwib24iLCJhZGRFdmVudExpc3RlbmVyIiwiX2NhbGxiYWNrcyIsIm9uY2UiLCJvZmYiLCJhcHBseSIsImFyZ3VtZW50cyIsImZuIiwicmVtb3ZlTGlzdGVuZXIiLCJyZW1vdmVBbGxMaXN0ZW5lcnMiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwic3BsaWNlIiwiZW1pdCIsImVtaXRSZXNlcnZlZCIsImxpc3RlbmVycyIsImhhc0xpc3RlbmVycyIsImciLCJQcm9taXNlIiwicmVzb2x2ZSIsInUiLCJzZWxmIiwid2luZG93IiwiRnVuY3Rpb24iLCJIdCIsIlkiLCJoYXNPd25Qcm9wZXJ0eSIsInllIiwic2V0VGltZW91dCIsImdlIiwiY2xlYXJUaW1lb3V0IiwiXyIsInVzZU5hdGl2ZVRpbWVycyIsInNldFRpbWVvdXRGbiIsImJpbmQiLCJjbGVhclRpbWVvdXRGbiIsIl9lIiwiS3QiLCJiZSIsImNlaWwiLCJzaXplIiwiWCIsIkRhdGUiLCJub3ciLCJyYW5kb20iLCJZdCIsImVuY29kZVVSSUNvbXBvbmVudCIsIlh0IiwiZGVjb2RlVVJJQ29tcG9uZW50IiwiRyIsIkVycm9yIiwiY29uc3RydWN0b3IiLCJkZXNjcmlwdGlvbiIsImNvbnRleHQiLCJ3cml0YWJsZSIsIm9wdHMiLCJxdWVyeSIsInNvY2tldCIsInN1cHBvcnRzQmluYXJ5IiwiZm9yY2VCYXNlNjQiLCJvbkVycm9yIiwicmVhZHlTdGF0ZSIsImRvT3BlbiIsImRvQ2xvc2UiLCJvbkNsb3NlIiwic2VuZCIsIndyaXRlIiwib25PcGVuIiwib25EYXRhIiwiYmluYXJ5VHlwZSIsIm9uUGFja2V0IiwicGF1c2UiLCJjcmVhdGVVcmkiLCJfaG9zdG5hbWUiLCJfcG9ydCIsInBhdGgiLCJfcXVlcnkiLCJob3N0bmFtZSIsImluZGV4T2YiLCJwb3J0Iiwic2VjdXJlIiwiTnVtYmVyIiwiVyIsIl9wb2xsaW5nIiwibmFtZSIsIl9wb2xsIiwiZG9Qb2xsIiwiZG9Xcml0ZSIsInVyaSIsInRpbWVzdGFtcFJlcXVlc3RzIiwidGltZXN0YW1wUGFyYW0iLCJzaWQiLCJiNjQiLCJHdCIsIlhNTEh0dHBSZXF1ZXN0IiwiUXQiLCJFZSIsImZ0IiwibG9jYXRpb24iLCJwcm90b2NvbCIsInhkIiwicmVxdWVzdCIsIm1ldGhvZCIsInBvbGxYaHIiLCJRIiwiY3JlYXRlUmVxdWVzdCIsIl9vcHRzIiwiX21ldGhvZCIsIl91cmkiLCJfZGF0YSIsIl9jcmVhdGUiLCJ4ZG9tYWluIiwiX3hociIsImV4dHJhSGVhZGVycyIsInNldERpc2FibGVIZWFkZXJDaGVjayIsInNldFJlcXVlc3RIZWFkZXIiLCJjb29raWVKYXIiLCJhZGRDb29raWVzIiwid2l0aENyZWRlbnRpYWxzIiwicmVxdWVzdFRpbWVvdXQiLCJ0aW1lb3V0Iiwib25yZWFkeXN0YXRlY2hhbmdlIiwicGFyc2VDb29raWVzIiwiZ2V0UmVzcG9uc2VIZWFkZXIiLCJzdGF0dXMiLCJfb25Mb2FkIiwiX29uRXJyb3IiLCJkb2N1bWVudCIsIl9pbmRleCIsInJlcXVlc3RzQ291bnQiLCJyZXF1ZXN0cyIsIl9jbGVhbnVwIiwiYWJvcnQiLCJyZXNwb25zZVRleHQiLCJhdHRhY2hFdmVudCIsIlp0Iiwid2UiLCJ0ZSIsInJlc3BvbnNlVHlwZSIsIlQiLCJhc3NpZ24iLCJjb25jYXQiLCJlZSIsIm5hdmlnYXRvciIsInByb2R1Y3QiLCJ0b0xvd2VyQ2FzZSIsInV0IiwicHJvdG9jb2xzIiwiaGVhZGVycyIsIndzIiwiY3JlYXRlU29ja2V0IiwiYWRkRXZlbnRMaXN0ZW5lcnMiLCJvbm9wZW4iLCJhdXRvVW5yZWYiLCJfc29ja2V0IiwidW5yZWYiLCJvbmNsb3NlIiwib25tZXNzYWdlIiwib25lcnJvciIsImx0IiwiV2ViU29ja2V0IiwiTW96V2ViU29ja2V0IiwiQSIsIlMiLCJfdHJhbnNwb3J0IiwiV2ViVHJhbnNwb3J0IiwidHJhbnNwb3J0T3B0aW9ucyIsImNsb3NlZCIsImNhdGNoIiwicmVhZHkiLCJjcmVhdGVCaWRpcmVjdGlvbmFsU3RyZWFtIiwiTUFYX1NBRkVfSU5URUdFUiIsInJlYWRhYmxlIiwicGlwZVRocm91Z2giLCJnZXRSZWFkZXIiLCJwaXBlVG8iLCJfd3JpdGVyIiwiZ2V0V3JpdGVyIiwicmVhZCIsImRvbmUiLCJ2YWx1ZSIsInB0Iiwid2Vic29ja2V0Iiwid2VidHJhbnNwb3J0IiwicG9sbGluZyIsInZlIiwiUmUiLCJDIiwicmVwbGFjZSIsImV4ZWMiLCJzb3VyY2UiLCJob3N0IiwiYXV0aG9yaXR5IiwiaXB2NnVyaSIsInBhdGhOYW1lcyIsIlRlIiwicXVlcnlLZXkiLCJBZSIsImR0IiwiWiIsInR0Iiwid3JpdGVCdWZmZXIiLCJfcHJldkJ1ZmZlckxlbiIsIl9waW5nSW50ZXJ2YWwiLCJfcGluZ1RpbWVvdXQiLCJfbWF4UGF5bG9hZCIsIl9waW5nVGltZW91dFRpbWUiLCJ0cmFuc3BvcnRzIiwiX3RyYW5zcG9ydHNCeU5hbWUiLCJhZ2VudCIsInJlbWVtYmVyVXBncmFkZSIsImFkZFRyYWlsaW5nU2xhc2giLCJyZWplY3RVbmF1dGhvcml6ZWQiLCJwZXJNZXNzYWdlRGVmbGF0ZSIsInRocmVzaG9sZCIsImNsb3NlT25CZWZvcmV1bmxvYWQiLCJfYmVmb3JldW5sb2FkRXZlbnRMaXN0ZW5lciIsInRyYW5zcG9ydCIsIl9vZmZsaW5lRXZlbnRMaXN0ZW5lciIsIl9vbkNsb3NlIiwiX2Nvb2tpZUphciIsIl9vcGVuIiwiY3JlYXRlVHJhbnNwb3J0IiwiRUlPIiwiaWQiLCJwcmlvcldlYnNvY2tldFN1Y2Nlc3MiLCJzZXRUcmFuc3BvcnQiLCJfb25EcmFpbiIsIl9vblBhY2tldCIsImZsdXNoIiwib25IYW5kc2hha2UiLCJKU09OIiwicGFyc2UiLCJfc2VuZFBhY2tldCIsIl9yZXNldFBpbmdUaW1lb3V0IiwiY29kZSIsInBpbmdJbnRlcnZhbCIsInBpbmdUaW1lb3V0IiwibWF4UGF5bG9hZCIsIl9waW5nVGltZW91dFRpbWVyIiwidXBncmFkaW5nIiwiX2dldFdyaXRhYmxlUGFja2V0cyIsIl9oYXNQaW5nRXhwaXJlZCIsImNvbXByZXNzIiwib3B0aW9ucyIsImNsZWFudXBBbmRDbG9zZSIsIndhaXRGb3JVcGdyYWRlIiwidHJ5QWxsVHJhbnNwb3J0cyIsImV0IiwiX3VwZ3JhZGVzIiwiX3Byb2JlIiwib25UcmFuc3BvcnRPcGVuIiwiRSIsIkwiLCJjbGVhbnVwIiwiX2ZpbHRlclVwZ3JhZGVzIiwidXBncmFkZXMiLCJOIiwibWFwIiwiZmlsdGVyIiwienIiLCJyZSIsInRlc3QiLCJocmVmIiwiRXQiLCJ1ZSIsIkRlY29kZXIiLCJfdCIsIkVuY29kZXIiLCJndCIsIlBhY2tldFR5cGUiLCJjIiwiaXNQYWNrZXRWYWxpZCIsIkxlIiwiYWUiLCJJZSIsInhlIiwiaWUiLCJTZSIsIkNlIiwiRmlsZSIsIk0iLCJqIiwiaXNBcnJheSIsInRvSlNPTiIsInNlIiwibXQiLCJhdHRhY2htZW50cyIsInBhY2tldCIsImJ1ZmZlcnMiLCJfcGxhY2Vob2xkZXIiLCJudW0iLCJuZSIsInl0Iiwib2UiLCJDT05ORUNUIiwiRElTQ09OTkVDVCIsIkVWRU5UIiwiQUNLIiwiQ09OTkVDVF9FUlJPUiIsIkJJTkFSWV9FVkVOVCIsIkJJTkFSWV9BQ0siLCJyZXBsYWNlciIsImVuY29kZUFzQmluYXJ5IiwibnNwIiwiZW5jb2RlQXNTdHJpbmciLCJzdHJpbmdpZnkiLCJ1bnNoaWZ0IiwicmV2aXZlciIsIm1heEF0dGFjaG1lbnRzIiwiYWRkIiwicmVjb25zdHJ1Y3RvciIsImRlY29kZVN0cmluZyIsImJ0IiwidGFrZUJpbmFyeURhdGEiLCJjZSIsInRyeVBhcnNlIiwic3Vic3RyIiwiaXNQYXlsb2FkVmFsaWQiLCJydCIsImRlc3Ryb3kiLCJmaW5pc2hlZFJlY29uc3RydWN0aW9uIiwicmVjb25QYWNrIiwiTmUiLCJpc0ludGVnZXIiLCJpc0Zpbml0ZSIsImZsb29yIiwiT2UiLCJCZSIsInAiLCJQZSIsImZyZWV6ZSIsImNvbm5lY3QiLCJjb25uZWN0X2Vycm9yIiwiZGlzY29ubmVjdCIsImRpc2Nvbm5lY3RpbmciLCJuZXdMaXN0ZW5lciIsIk8iLCJjb25uZWN0ZWQiLCJyZWNvdmVyZWQiLCJyZWNlaXZlQnVmZmVyIiwic2VuZEJ1ZmZlciIsIl9xdWV1ZSIsIl9xdWV1ZVNlcSIsImlkcyIsImFja3MiLCJmbGFncyIsImlvIiwiYXV0aCIsIl9hdXRvQ29ubmVjdCIsImRpc2Nvbm5lY3RlZCIsInN1YkV2ZW50cyIsInN1YnMiLCJvbnBhY2tldCIsImFjdGl2ZSIsIl9yZWNvbm5lY3RpbmciLCJfcmVhZHlTdGF0ZSIsInJldHJpZXMiLCJmcm9tUXVldWUiLCJ2b2xhdGlsZSIsIl9hZGRUb1F1ZXVlIiwicG9wIiwiX3JlZ2lzdGVyQWNrQ2FsbGJhY2siLCJlbmdpbmUiLCJub3RpZnlPdXRnb2luZ0xpc3RlbmVycyIsImFja1RpbWVvdXQiLCJ3aXRoRXJyb3IiLCJlbWl0V2l0aEFjayIsInRyeUNvdW50IiwicGVuZGluZyIsImFyZ3MiLCJfZHJhaW5RdWV1ZSIsIl9wYWNrZXQiLCJfc2VuZENvbm5lY3RQYWNrZXQiLCJfcGlkIiwicGlkIiwib2Zmc2V0IiwiX2xhc3RPZmZzZXQiLCJfY2xlYXJBY2tzIiwic29tZSIsIlN0cmluZyIsIm9uY29ubmVjdCIsIm9uZXZlbnQiLCJvbmFjayIsIm9uZGlzY29ubmVjdCIsImFjayIsImVtaXRFdmVudCIsIl9hbnlMaXN0ZW5lcnMiLCJlbWl0QnVmZmVyZWQiLCJfZGVzdHJveSIsIm9uQW55IiwicHJlcGVuZEFueSIsIm9mZkFueSIsImxpc3RlbmVyc0FueSIsIm9uQW55T3V0Z29pbmciLCJfYW55T3V0Z29pbmdMaXN0ZW5lcnMiLCJwcmVwZW5kQW55T3V0Z29pbmciLCJvZmZBbnlPdXRnb2luZyIsImxpc3RlbmVyc0FueU91dGdvaW5nIiwiayIsIm1zIiwibWluIiwibWF4IiwiZmFjdG9yIiwiaml0dGVyIiwiYXR0ZW1wdHMiLCJkdXJhdGlvbiIsInJlc2V0Iiwic2V0TWluIiwic2V0TWF4Iiwic2V0Sml0dGVyIiwiQiIsIm5zcHMiLCJyZWNvbm5lY3Rpb24iLCJyZWNvbm5lY3Rpb25BdHRlbXB0cyIsInJlY29ubmVjdGlvbkRlbGF5IiwicmVjb25uZWN0aW9uRGVsYXlNYXgiLCJyYW5kb21pemF0aW9uRmFjdG9yIiwiYmFja29mZiIsInBhcnNlciIsImVuY29kZXIiLCJkZWNvZGVyIiwiYXV0b0Nvbm5lY3QiLCJfcmVjb25uZWN0aW9uIiwic2tpcFJlY29ubmVjdCIsIl9yZWNvbm5lY3Rpb25BdHRlbXB0cyIsIl9yZWNvbm5lY3Rpb25EZWxheSIsIl9yYW5kb21pemF0aW9uRmFjdG9yIiwiX3JlY29ubmVjdGlvbkRlbGF5TWF4IiwiX3RpbWVvdXQiLCJtYXliZVJlY29ubmVjdE9uT3BlbiIsInJlY29ubmVjdCIsIm9ucGluZyIsIm9uZGF0YSIsIm9uZGVjb2RlZCIsIl9jbG9zZSIsIm9ucmVjb25uZWN0IiwiViIsInoiLCJmb3JjZU5ldyIsIm11bHRpcGxleCIsIk1hbmFnZXIiLCJTb2NrZXQiLCJJIiwiQ09OTkVDVEVEIiwiRElTQ09OTkVDVEVEIiwiUkVDT05ORUNUSU5HIiwiaGUiLCJ2IiwicHJvdmlkZWRJbiIsImZhY3RvcnkiLCJsIiwiVWUiLCJwYXJzZUJhY2tlbmRUcmlnZ2VyZWRQYXlsb2FkIiwiaXNPYmplY3QiLCJhbGFybUV2ZW50SWQiLCJ3YXJkSWQiLCJhbGFybVJ1bGVJZCIsInBhcnNlV2FyZElkIiwicGFyc2VCYWNrZW5kUmVzb2x2ZWRQYXlsb2FkIiwidHJpbSIsIsm1ZmFjIiwiybVwcm92IiwidyIsInRva2VuIiwiZmUiLCJEZSIsImFsYXJtU3RhdGVTZXJ2aWNlIiwiSiIsInB1Ymxpc2giLCJwdWJsaXNoTm90aWZpY2F0aW9uIiwicHVibGlzaExpZmVjeWNsZVVwZGF0ZSIsIk50IiwiYWxhcm1OYW1lIiwicHJpb3JpdHkiLCJTdCIsIkN0Iiwib25Ob3RpZmljYXRpb25SZWNlaXZlZCIsIm5vdGlmaWNhdGlvbklkIiwidGl0bGUiLCJzZW50QXQiLCJldmVudFR5cGUiLCJnbG9iYWxUaGlzIiwiZGlzcGF0Y2hFdmVudCIsIkN1c3RvbUV2ZW50Iiwib3QiLCJkZXRhaWwiLCJFdmVudCIsImxlIiwiRmUiLCJ3YXJkUmVhbHRpbWVDYWNoZSIsIk90Iiwib3B0aW9uYWwiLCJqb2luZWRSb29tcyIsIlNldCIsImN1cnJlbnRVc2VySWQiLCJhY3RpdmF0ZVVzZXIiLCJyb29tc1RvTGVhdmUiLCJyb29tc1RvSm9pbiIsImZyb20iLCJ2YWx1ZXMiLCJjbGVhciIsImdldFdhcmRJZHMiLCJoYXMiLCJwZXJzaXN0Sm9pbmVkUm9vbXMiLCJkZWFjdGl2YXRlVXNlciIsImNsZWFyV2FyZElkcyIsInJlcXVlc3RKb2luUm9vbSIsInJlcXVlc3RMZWF2ZVJvb20iLCJkZWxldGUiLCJnZXRKb2luZWRSb29tcyIsInJlc2V0UnVudGltZVN0YXRlIiwic2V0V2FyZElkcyIsInFlIiwic3MiLCJzb2NrZXRJb0ZhY3RvcnkiLCJodHRwIiwiQXQiLCJhbGFybUFwaVNlcnZpY2UiLCJ4dCIsImFwaUJhc2VVcmwiLCJrdCIsImludGVybmFsQXV0aFNlcnZpY2UiLCJJdCIsImV2ZW50Tm9ybWFsaXplciIsImxpZmVjeWNsZU5vdGlmaWVyIiwicm9vbUNvb3JkaW5hdG9yIiwiY29ubmVjdGlvblN0YXR1cyQiLCJSdCIsImRlc3Ryb3kkIiwidnQiLCJhdXRoTGlmZWN5Y2xlSW5pdGlhbGl6ZWQiLCJhY3RpdmVVc2VySWQiLCJ3YXJkQm9vdHN0cmFwSW5GbGlnaHRVc2VySWRzIiwid2FyZEJvb3RzdHJhcERvbmVVc2VySWRzIiwiaW5pdGlhbGl6ZSIsImVuc3VyZUF1dGhMaWZlY3ljbGVTdWJzY3JpcHRpb24iLCJqb2luUm9vbSIsInJlZnJlc2hXYXJkUm9vbVN1YnNjcmlwdGlvbiIsImJvb3RzdHJhcFdhcmRSb29tU3Vic2NyaXB0aW9uIiwiZ2V0Q29ubmVjdGlvblN0YXR1cyQiLCJhc09ic2VydmFibGUiLCJsZWF2ZVJvb20iLCJuZ09uRGVzdHJveSIsInJlc29sdmVTb2NrZXRVcmwiLCJuZXh0IiwicmVqb2luQWxsUm9vbXMiLCJzdCIsInBpcGUiLCJ4Iiwic3Vic2NyaWJlIiwiaGFuZGxlQmFja2VuZFRyaWdnZXJlZFJhd0V2ZW50IiwiaGFuZGxlQmFja2VuZFJlc29sdmVkUmF3RXZlbnQiLCJjb21wbGV0ZSIsImdldEN1cnJlbnRVc2VyJCIsImVtaXRMZWF2ZU1hbnkiLCJ1c2VySWQiLCJlbWl0Sm9pbk1hbnkiLCJnZXQiLCJyZXNvbHZlUGxhbnRBbGxFbmRwb2ludCIsIml0IiwicmVzcG9uc2UiLCJzdWNjZXNzIiwibnQiLCIkIiwiVHQiLCJleHRyYWN0V2FyZElkc0Zyb21QbGFudFJlc3BvbnNlIiwic3luY0pvaW5lZFJvb21zV2l0aFdhcmRJZHMiLCJyZXNvbHZlVHJpZ2dlcmVkQWxhcm1EZXRhaWxzIiwidG9JU09TdHJpbmciLCJvbkFsYXJtVHJpZ2dlcmVkIiwiYWN0aXZhdGlvblRpbWUiLCJyZXNvbHV0aW9uVGltZSIsIm9uQWxhcm1SZXNvbHZlZCIsIlIiLCJPUkFOR0UiLCJnZXRBbGFybUV2ZW50QnlJZCIsIm5vcm1hbGl6ZUFsYXJtUHJpb3JpdHkiLCJpc0FsYXJtUHJpb3JpdHkiLCJ0b1VwcGVyQ2FzZSIsIldISVRFIiwiR1JFRU4iLCJSRUQiLCJ0b1dlYnNvY2tldE5hbWVzcGFjZVVybCIsIm9yaWdpbiIsImVuZHNXaXRoIiwiZXh0cmFjdFBsYW50QXJyYXkiLCJub3JtYWxpemVXYXJkSWQiLCJwbGFudHMiXSwic291cmNlcyI6WyJub2RlX21vZHVsZXMvZW5naW5lLmlvLXBhcnNlci9idWlsZC9lc20vY29tbW9ucy5qcyIsIm5vZGVfbW9kdWxlcy9lbmdpbmUuaW8tcGFyc2VyL2J1aWxkL2VzbS9lbmNvZGVQYWNrZXQuYnJvd3Nlci5qcyIsIm5vZGVfbW9kdWxlcy9lbmdpbmUuaW8tcGFyc2VyL2J1aWxkL2VzbS9jb250cmliL2Jhc2U2NC1hcnJheWJ1ZmZlci5qcyIsIm5vZGVfbW9kdWxlcy9lbmdpbmUuaW8tcGFyc2VyL2J1aWxkL2VzbS9kZWNvZGVQYWNrZXQuYnJvd3Nlci5qcyIsIm5vZGVfbW9kdWxlcy9lbmdpbmUuaW8tcGFyc2VyL2J1aWxkL2VzbS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9Ac29ja2V0LmlvL2NvbXBvbmVudC1lbWl0dGVyL2xpYi9lc20vaW5kZXguanMiLCJub2RlX21vZHVsZXMvZW5naW5lLmlvLWNsaWVudC9idWlsZC9lc20vZ2xvYmFscy5qcyIsIm5vZGVfbW9kdWxlcy9lbmdpbmUuaW8tY2xpZW50L2J1aWxkL2VzbS91dGlsLmpzIiwibm9kZV9tb2R1bGVzL2VuZ2luZS5pby1jbGllbnQvYnVpbGQvZXNtL2NvbnRyaWIvcGFyc2Vxcy5qcyIsIm5vZGVfbW9kdWxlcy9lbmdpbmUuaW8tY2xpZW50L2J1aWxkL2VzbS90cmFuc3BvcnQuanMiLCJub2RlX21vZHVsZXMvZW5naW5lLmlvLWNsaWVudC9idWlsZC9lc20vdHJhbnNwb3J0cy9wb2xsaW5nLmpzIiwibm9kZV9tb2R1bGVzL2VuZ2luZS5pby1jbGllbnQvYnVpbGQvZXNtL2NvbnRyaWIvaGFzLWNvcnMuanMiLCJub2RlX21vZHVsZXMvZW5naW5lLmlvLWNsaWVudC9idWlsZC9lc20vdHJhbnNwb3J0cy9wb2xsaW5nLXhoci5qcyIsIm5vZGVfbW9kdWxlcy9lbmdpbmUuaW8tY2xpZW50L2J1aWxkL2VzbS90cmFuc3BvcnRzL3dlYnNvY2tldC5qcyIsIm5vZGVfbW9kdWxlcy9lbmdpbmUuaW8tY2xpZW50L2J1aWxkL2VzbS90cmFuc3BvcnRzL3dlYnRyYW5zcG9ydC5qcyIsIm5vZGVfbW9kdWxlcy9lbmdpbmUuaW8tY2xpZW50L2J1aWxkL2VzbS90cmFuc3BvcnRzL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2VuZ2luZS5pby1jbGllbnQvYnVpbGQvZXNtL2NvbnRyaWIvcGFyc2V1cmkuanMiLCJub2RlX21vZHVsZXMvZW5naW5lLmlvLWNsaWVudC9idWlsZC9lc20vc29ja2V0LmpzIiwibm9kZV9tb2R1bGVzL2VuZ2luZS5pby1jbGllbnQvYnVpbGQvZXNtL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3NvY2tldC5pby1jbGllbnQvYnVpbGQvZXNtL3VybC5qcyIsIm5vZGVfbW9kdWxlcy9zb2NrZXQuaW8tcGFyc2VyL2J1aWxkL2VzbS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9zb2NrZXQuaW8tcGFyc2VyL2J1aWxkL2VzbS9pcy1iaW5hcnkuanMiLCJub2RlX21vZHVsZXMvc29ja2V0LmlvLXBhcnNlci9idWlsZC9lc20vYmluYXJ5LmpzIiwibm9kZV9tb2R1bGVzL3NvY2tldC5pby1jbGllbnQvYnVpbGQvZXNtL29uLmpzIiwibm9kZV9tb2R1bGVzL3NvY2tldC5pby1jbGllbnQvYnVpbGQvZXNtL3NvY2tldC5qcyIsIm5vZGVfbW9kdWxlcy9zb2NrZXQuaW8tY2xpZW50L2J1aWxkL2VzbS9jb250cmliL2JhY2tvMi5qcyIsIm5vZGVfbW9kdWxlcy9zb2NrZXQuaW8tY2xpZW50L2J1aWxkL2VzbS9tYW5hZ2VyLmpzIiwibm9kZV9tb2R1bGVzL3NvY2tldC5pby1jbGllbnQvYnVpbGQvZXNtL2luZGV4LmpzIiwic3JjL2FwcC9jb3JlL2FsYXJtL21vZGVscy9jb25uZWN0aW9uLXN0YXR1cy5lbnVtLnRzIiwic3JjL2FwcC9jb3JlL2FsYXJtL3NlcnZpY2VzL3JlYWx0aW1lLWFsYXJtLWV2ZW50LW5vcm1hbGl6ZXIuc2VydmljZS50cyIsInNyYy9hcHAvY29yZS9hbGFybS9zZXJ2aWNlcy9hbGFybS1saWZlY3ljbGUtbm90aWZpZXIuc2VydmljZS50cyIsInNyYy9hcHAvY29yZS9hbGFybS9zZXJ2aWNlcy93YXJkLXNvY2tldC1yb29tLWNvb3JkaW5hdG9yLnNlcnZpY2UudHMiLCJzcmMvYXBwL2NvcmUvYWxhcm0vc2VydmljZXMvZXZlbnQtc3Vic2NyaXB0aW9uLnNlcnZpY2UudHMiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgUEFDS0VUX1RZUEVTID0gT2JqZWN0LmNyZWF0ZShudWxsKTsgLy8gbm8gTWFwID0gbm8gcG9seWZpbGxcblBBQ0tFVF9UWVBFU1tcIm9wZW5cIl0gPSBcIjBcIjtcblBBQ0tFVF9UWVBFU1tcImNsb3NlXCJdID0gXCIxXCI7XG5QQUNLRVRfVFlQRVNbXCJwaW5nXCJdID0gXCIyXCI7XG5QQUNLRVRfVFlQRVNbXCJwb25nXCJdID0gXCIzXCI7XG5QQUNLRVRfVFlQRVNbXCJtZXNzYWdlXCJdID0gXCI0XCI7XG5QQUNLRVRfVFlQRVNbXCJ1cGdyYWRlXCJdID0gXCI1XCI7XG5QQUNLRVRfVFlQRVNbXCJub29wXCJdID0gXCI2XCI7XG5jb25zdCBQQUNLRVRfVFlQRVNfUkVWRVJTRSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5PYmplY3Qua2V5cyhQQUNLRVRfVFlQRVMpLmZvckVhY2goa2V5ID0+IHtcbiAgUEFDS0VUX1RZUEVTX1JFVkVSU0VbUEFDS0VUX1RZUEVTW2tleV1dID0ga2V5O1xufSk7XG5jb25zdCBFUlJPUl9QQUNLRVQgPSB7XG4gIHR5cGU6IFwiZXJyb3JcIixcbiAgZGF0YTogXCJwYXJzZXIgZXJyb3JcIlxufTtcbmV4cG9ydCB7IFBBQ0tFVF9UWVBFUywgUEFDS0VUX1RZUEVTX1JFVkVSU0UsIEVSUk9SX1BBQ0tFVCB9OyIsImltcG9ydCB7IFBBQ0tFVF9UWVBFUyB9IGZyb20gXCIuL2NvbW1vbnMuanNcIjtcbmNvbnN0IHdpdGhOYXRpdmVCbG9iID0gdHlwZW9mIEJsb2IgPT09IFwiZnVuY3Rpb25cIiB8fCB0eXBlb2YgQmxvYiAhPT0gXCJ1bmRlZmluZWRcIiAmJiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoQmxvYikgPT09IFwiW29iamVjdCBCbG9iQ29uc3RydWN0b3JdXCI7XG5jb25zdCB3aXRoTmF0aXZlQXJyYXlCdWZmZXIgPSB0eXBlb2YgQXJyYXlCdWZmZXIgPT09IFwiZnVuY3Rpb25cIjtcbi8vIEFycmF5QnVmZmVyLmlzVmlldyBtZXRob2QgaXMgbm90IGRlZmluZWQgaW4gSUUxMFxuY29uc3QgaXNWaWV3ID0gb2JqID0+IHtcbiAgcmV0dXJuIHR5cGVvZiBBcnJheUJ1ZmZlci5pc1ZpZXcgPT09IFwiZnVuY3Rpb25cIiA/IEFycmF5QnVmZmVyLmlzVmlldyhvYmopIDogb2JqICYmIG9iai5idWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcjtcbn07XG5jb25zdCBlbmNvZGVQYWNrZXQgPSAoe1xuICB0eXBlLFxuICBkYXRhXG59LCBzdXBwb3J0c0JpbmFyeSwgY2FsbGJhY2spID0+IHtcbiAgaWYgKHdpdGhOYXRpdmVCbG9iICYmIGRhdGEgaW5zdGFuY2VvZiBCbG9iKSB7XG4gICAgaWYgKHN1cHBvcnRzQmluYXJ5KSB7XG4gICAgICByZXR1cm4gY2FsbGJhY2soZGF0YSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBlbmNvZGVCbG9iQXNCYXNlNjQoZGF0YSwgY2FsbGJhY2spO1xuICAgIH1cbiAgfSBlbHNlIGlmICh3aXRoTmF0aXZlQXJyYXlCdWZmZXIgJiYgKGRhdGEgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlciB8fCBpc1ZpZXcoZGF0YSkpKSB7XG4gICAgaWYgKHN1cHBvcnRzQmluYXJ5KSB7XG4gICAgICByZXR1cm4gY2FsbGJhY2soZGF0YSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBlbmNvZGVCbG9iQXNCYXNlNjQobmV3IEJsb2IoW2RhdGFdKSwgY2FsbGJhY2spO1xuICAgIH1cbiAgfVxuICAvLyBwbGFpbiBzdHJpbmdcbiAgcmV0dXJuIGNhbGxiYWNrKFBBQ0tFVF9UWVBFU1t0eXBlXSArIChkYXRhIHx8IFwiXCIpKTtcbn07XG5jb25zdCBlbmNvZGVCbG9iQXNCYXNlNjQgPSAoZGF0YSwgY2FsbGJhY2spID0+IHtcbiAgY29uc3QgZmlsZVJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gIGZpbGVSZWFkZXIub25sb2FkID0gZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGNvbnRlbnQgPSBmaWxlUmVhZGVyLnJlc3VsdC5zcGxpdChcIixcIilbMV07XG4gICAgY2FsbGJhY2soXCJiXCIgKyAoY29udGVudCB8fCBcIlwiKSk7XG4gIH07XG4gIHJldHVybiBmaWxlUmVhZGVyLnJlYWRBc0RhdGFVUkwoZGF0YSk7XG59O1xuZnVuY3Rpb24gdG9BcnJheShkYXRhKSB7XG4gIGlmIChkYXRhIGluc3RhbmNlb2YgVWludDhBcnJheSkge1xuICAgIHJldHVybiBkYXRhO1xuICB9IGVsc2UgaWYgKGRhdGEgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikge1xuICAgIHJldHVybiBuZXcgVWludDhBcnJheShkYXRhKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoZGF0YS5idWZmZXIsIGRhdGEuYnl0ZU9mZnNldCwgZGF0YS5ieXRlTGVuZ3RoKTtcbiAgfVxufVxubGV0IFRFWFRfRU5DT0RFUjtcbmV4cG9ydCBmdW5jdGlvbiBlbmNvZGVQYWNrZXRUb0JpbmFyeShwYWNrZXQsIGNhbGxiYWNrKSB7XG4gIGlmICh3aXRoTmF0aXZlQmxvYiAmJiBwYWNrZXQuZGF0YSBpbnN0YW5jZW9mIEJsb2IpIHtcbiAgICByZXR1cm4gcGFja2V0LmRhdGEuYXJyYXlCdWZmZXIoKS50aGVuKHRvQXJyYXkpLnRoZW4oY2FsbGJhY2spO1xuICB9IGVsc2UgaWYgKHdpdGhOYXRpdmVBcnJheUJ1ZmZlciAmJiAocGFja2V0LmRhdGEgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlciB8fCBpc1ZpZXcocGFja2V0LmRhdGEpKSkge1xuICAgIHJldHVybiBjYWxsYmFjayh0b0FycmF5KHBhY2tldC5kYXRhKSk7XG4gIH1cbiAgZW5jb2RlUGFja2V0KHBhY2tldCwgZmFsc2UsIGVuY29kZWQgPT4ge1xuICAgIGlmICghVEVYVF9FTkNPREVSKSB7XG4gICAgICBURVhUX0VOQ09ERVIgPSBuZXcgVGV4dEVuY29kZXIoKTtcbiAgICB9XG4gICAgY2FsbGJhY2soVEVYVF9FTkNPREVSLmVuY29kZShlbmNvZGVkKSk7XG4gIH0pO1xufVxuZXhwb3J0IHsgZW5jb2RlUGFja2V0IH07IiwiLy8gaW1wb3J0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vc29ja2V0aW8vYmFzZTY0LWFycmF5YnVmZmVyXG5jb25zdCBjaGFycyA9ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvJztcbi8vIFVzZSBhIGxvb2t1cCB0YWJsZSB0byBmaW5kIHRoZSBpbmRleC5cbmNvbnN0IGxvb2t1cCA9IHR5cGVvZiBVaW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IFtdIDogbmV3IFVpbnQ4QXJyYXkoMjU2KTtcbmZvciAobGV0IGkgPSAwOyBpIDwgY2hhcnMubGVuZ3RoOyBpKyspIHtcbiAgbG9va3VwW2NoYXJzLmNoYXJDb2RlQXQoaSldID0gaTtcbn1cbmV4cG9ydCBjb25zdCBlbmNvZGUgPSBhcnJheWJ1ZmZlciA9PiB7XG4gIGxldCBieXRlcyA9IG5ldyBVaW50OEFycmF5KGFycmF5YnVmZmVyKSxcbiAgICBpLFxuICAgIGxlbiA9IGJ5dGVzLmxlbmd0aCxcbiAgICBiYXNlNjQgPSAnJztcbiAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSArPSAzKSB7XG4gICAgYmFzZTY0ICs9IGNoYXJzW2J5dGVzW2ldID4+IDJdO1xuICAgIGJhc2U2NCArPSBjaGFyc1soYnl0ZXNbaV0gJiAzKSA8PCA0IHwgYnl0ZXNbaSArIDFdID4+IDRdO1xuICAgIGJhc2U2NCArPSBjaGFyc1soYnl0ZXNbaSArIDFdICYgMTUpIDw8IDIgfCBieXRlc1tpICsgMl0gPj4gNl07XG4gICAgYmFzZTY0ICs9IGNoYXJzW2J5dGVzW2kgKyAyXSAmIDYzXTtcbiAgfVxuICBpZiAobGVuICUgMyA9PT0gMikge1xuICAgIGJhc2U2NCA9IGJhc2U2NC5zdWJzdHJpbmcoMCwgYmFzZTY0Lmxlbmd0aCAtIDEpICsgJz0nO1xuICB9IGVsc2UgaWYgKGxlbiAlIDMgPT09IDEpIHtcbiAgICBiYXNlNjQgPSBiYXNlNjQuc3Vic3RyaW5nKDAsIGJhc2U2NC5sZW5ndGggLSAyKSArICc9PSc7XG4gIH1cbiAgcmV0dXJuIGJhc2U2NDtcbn07XG5leHBvcnQgY29uc3QgZGVjb2RlID0gYmFzZTY0ID0+IHtcbiAgbGV0IGJ1ZmZlckxlbmd0aCA9IGJhc2U2NC5sZW5ndGggKiAwLjc1LFxuICAgIGxlbiA9IGJhc2U2NC5sZW5ndGgsXG4gICAgaSxcbiAgICBwID0gMCxcbiAgICBlbmNvZGVkMSxcbiAgICBlbmNvZGVkMixcbiAgICBlbmNvZGVkMyxcbiAgICBlbmNvZGVkNDtcbiAgaWYgKGJhc2U2NFtiYXNlNjQubGVuZ3RoIC0gMV0gPT09ICc9Jykge1xuICAgIGJ1ZmZlckxlbmd0aC0tO1xuICAgIGlmIChiYXNlNjRbYmFzZTY0Lmxlbmd0aCAtIDJdID09PSAnPScpIHtcbiAgICAgIGJ1ZmZlckxlbmd0aC0tO1xuICAgIH1cbiAgfVxuICBjb25zdCBhcnJheWJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcihidWZmZXJMZW5ndGgpLFxuICAgIGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXlidWZmZXIpO1xuICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpICs9IDQpIHtcbiAgICBlbmNvZGVkMSA9IGxvb2t1cFtiYXNlNjQuY2hhckNvZGVBdChpKV07XG4gICAgZW5jb2RlZDIgPSBsb29rdXBbYmFzZTY0LmNoYXJDb2RlQXQoaSArIDEpXTtcbiAgICBlbmNvZGVkMyA9IGxvb2t1cFtiYXNlNjQuY2hhckNvZGVBdChpICsgMildO1xuICAgIGVuY29kZWQ0ID0gbG9va3VwW2Jhc2U2NC5jaGFyQ29kZUF0KGkgKyAzKV07XG4gICAgYnl0ZXNbcCsrXSA9IGVuY29kZWQxIDw8IDIgfCBlbmNvZGVkMiA+PiA0O1xuICAgIGJ5dGVzW3ArK10gPSAoZW5jb2RlZDIgJiAxNSkgPDwgNCB8IGVuY29kZWQzID4+IDI7XG4gICAgYnl0ZXNbcCsrXSA9IChlbmNvZGVkMyAmIDMpIDw8IDYgfCBlbmNvZGVkNCAmIDYzO1xuICB9XG4gIHJldHVybiBhcnJheWJ1ZmZlcjtcbn07IiwiaW1wb3J0IHsgRVJST1JfUEFDS0VULCBQQUNLRVRfVFlQRVNfUkVWRVJTRSB9IGZyb20gXCIuL2NvbW1vbnMuanNcIjtcbmltcG9ydCB7IGRlY29kZSB9IGZyb20gXCIuL2NvbnRyaWIvYmFzZTY0LWFycmF5YnVmZmVyLmpzXCI7XG5jb25zdCB3aXRoTmF0aXZlQXJyYXlCdWZmZXIgPSB0eXBlb2YgQXJyYXlCdWZmZXIgPT09IFwiZnVuY3Rpb25cIjtcbmV4cG9ydCBjb25zdCBkZWNvZGVQYWNrZXQgPSAoZW5jb2RlZFBhY2tldCwgYmluYXJ5VHlwZSkgPT4ge1xuICBpZiAodHlwZW9mIGVuY29kZWRQYWNrZXQgIT09IFwic3RyaW5nXCIpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJtZXNzYWdlXCIsXG4gICAgICBkYXRhOiBtYXBCaW5hcnkoZW5jb2RlZFBhY2tldCwgYmluYXJ5VHlwZSlcbiAgICB9O1xuICB9XG4gIGNvbnN0IHR5cGUgPSBlbmNvZGVkUGFja2V0LmNoYXJBdCgwKTtcbiAgaWYgKHR5cGUgPT09IFwiYlwiKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwibWVzc2FnZVwiLFxuICAgICAgZGF0YTogZGVjb2RlQmFzZTY0UGFja2V0KGVuY29kZWRQYWNrZXQuc3Vic3RyaW5nKDEpLCBiaW5hcnlUeXBlKVxuICAgIH07XG4gIH1cbiAgY29uc3QgcGFja2V0VHlwZSA9IFBBQ0tFVF9UWVBFU19SRVZFUlNFW3R5cGVdO1xuICBpZiAoIXBhY2tldFR5cGUpIHtcbiAgICByZXR1cm4gRVJST1JfUEFDS0VUO1xuICB9XG4gIHJldHVybiBlbmNvZGVkUGFja2V0Lmxlbmd0aCA+IDEgPyB7XG4gICAgdHlwZTogUEFDS0VUX1RZUEVTX1JFVkVSU0VbdHlwZV0sXG4gICAgZGF0YTogZW5jb2RlZFBhY2tldC5zdWJzdHJpbmcoMSlcbiAgfSA6IHtcbiAgICB0eXBlOiBQQUNLRVRfVFlQRVNfUkVWRVJTRVt0eXBlXVxuICB9O1xufTtcbmNvbnN0IGRlY29kZUJhc2U2NFBhY2tldCA9IChkYXRhLCBiaW5hcnlUeXBlKSA9PiB7XG4gIGlmICh3aXRoTmF0aXZlQXJyYXlCdWZmZXIpIHtcbiAgICBjb25zdCBkZWNvZGVkID0gZGVjb2RlKGRhdGEpO1xuICAgIHJldHVybiBtYXBCaW5hcnkoZGVjb2RlZCwgYmluYXJ5VHlwZSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGJhc2U2NDogdHJ1ZSxcbiAgICAgIGRhdGFcbiAgICB9OyAvLyBmYWxsYmFjayBmb3Igb2xkIGJyb3dzZXJzXG4gIH1cbn07XG5jb25zdCBtYXBCaW5hcnkgPSAoZGF0YSwgYmluYXJ5VHlwZSkgPT4ge1xuICBzd2l0Y2ggKGJpbmFyeVR5cGUpIHtcbiAgICBjYXNlIFwiYmxvYlwiOlxuICAgICAgaWYgKGRhdGEgaW5zdGFuY2VvZiBCbG9iKSB7XG4gICAgICAgIC8vIGZyb20gV2ViU29ja2V0ICsgYmluYXJ5VHlwZSBcImJsb2JcIlxuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGZyb20gSFRUUCBsb25nLXBvbGxpbmcgb3IgV2ViVHJhbnNwb3J0XG4gICAgICAgIHJldHVybiBuZXcgQmxvYihbZGF0YV0pO1xuICAgICAgfVxuICAgIGNhc2UgXCJhcnJheWJ1ZmZlclwiOlxuICAgIGRlZmF1bHQ6XG4gICAgICBpZiAoZGF0YSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB7XG4gICAgICAgIC8vIGZyb20gSFRUUCBsb25nLXBvbGxpbmcgKGJhc2U2NCkgb3IgV2ViU29ja2V0ICsgYmluYXJ5VHlwZSBcImFycmF5YnVmZmVyXCJcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBmcm9tIFdlYlRyYW5zcG9ydCAoVWludDhBcnJheSlcbiAgICAgICAgcmV0dXJuIGRhdGEuYnVmZmVyO1xuICAgICAgfVxuICB9XG59OyIsImltcG9ydCB7IGVuY29kZVBhY2tldCwgZW5jb2RlUGFja2V0VG9CaW5hcnkgfSBmcm9tIFwiLi9lbmNvZGVQYWNrZXQuanNcIjtcbmltcG9ydCB7IGRlY29kZVBhY2tldCB9IGZyb20gXCIuL2RlY29kZVBhY2tldC5qc1wiO1xuaW1wb3J0IHsgRVJST1JfUEFDS0VUIH0gZnJvbSBcIi4vY29tbW9ucy5qc1wiO1xuY29uc3QgU0VQQVJBVE9SID0gU3RyaW5nLmZyb21DaGFyQ29kZSgzMCk7IC8vIHNlZSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9EZWxpbWl0ZXIjQVNDSUlfZGVsaW1pdGVkX3RleHRcbmNvbnN0IGVuY29kZVBheWxvYWQgPSAocGFja2V0cywgY2FsbGJhY2spID0+IHtcbiAgLy8gc29tZSBwYWNrZXRzIG1heSBiZSBhZGRlZCB0byB0aGUgYXJyYXkgd2hpbGUgZW5jb2RpbmcsIHNvIHRoZSBpbml0aWFsIGxlbmd0aCBtdXN0IGJlIHNhdmVkXG4gIGNvbnN0IGxlbmd0aCA9IHBhY2tldHMubGVuZ3RoO1xuICBjb25zdCBlbmNvZGVkUGFja2V0cyA9IG5ldyBBcnJheShsZW5ndGgpO1xuICBsZXQgY291bnQgPSAwO1xuICBwYWNrZXRzLmZvckVhY2goKHBhY2tldCwgaSkgPT4ge1xuICAgIC8vIGZvcmNlIGJhc2U2NCBlbmNvZGluZyBmb3IgYmluYXJ5IHBhY2tldHNcbiAgICBlbmNvZGVQYWNrZXQocGFja2V0LCBmYWxzZSwgZW5jb2RlZFBhY2tldCA9PiB7XG4gICAgICBlbmNvZGVkUGFja2V0c1tpXSA9IGVuY29kZWRQYWNrZXQ7XG4gICAgICBpZiAoKytjb3VudCA9PT0gbGVuZ3RoKSB7XG4gICAgICAgIGNhbGxiYWNrKGVuY29kZWRQYWNrZXRzLmpvaW4oU0VQQVJBVE9SKSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufTtcbmNvbnN0IGRlY29kZVBheWxvYWQgPSAoZW5jb2RlZFBheWxvYWQsIGJpbmFyeVR5cGUpID0+IHtcbiAgY29uc3QgZW5jb2RlZFBhY2tldHMgPSBlbmNvZGVkUGF5bG9hZC5zcGxpdChTRVBBUkFUT1IpO1xuICBjb25zdCBwYWNrZXRzID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZW5jb2RlZFBhY2tldHMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBkZWNvZGVkUGFja2V0ID0gZGVjb2RlUGFja2V0KGVuY29kZWRQYWNrZXRzW2ldLCBiaW5hcnlUeXBlKTtcbiAgICBwYWNrZXRzLnB1c2goZGVjb2RlZFBhY2tldCk7XG4gICAgaWYgKGRlY29kZWRQYWNrZXQudHlwZSA9PT0gXCJlcnJvclwiKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHBhY2tldHM7XG59O1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVBhY2tldEVuY29kZXJTdHJlYW0oKSB7XG4gIHJldHVybiBuZXcgVHJhbnNmb3JtU3RyZWFtKHtcbiAgICB0cmFuc2Zvcm0ocGFja2V0LCBjb250cm9sbGVyKSB7XG4gICAgICBlbmNvZGVQYWNrZXRUb0JpbmFyeShwYWNrZXQsIGVuY29kZWRQYWNrZXQgPT4ge1xuICAgICAgICBjb25zdCBwYXlsb2FkTGVuZ3RoID0gZW5jb2RlZFBhY2tldC5sZW5ndGg7XG4gICAgICAgIGxldCBoZWFkZXI7XG4gICAgICAgIC8vIGluc3BpcmVkIGJ5IHRoZSBXZWJTb2NrZXQgZm9ybWF0OiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvV2ViU29ja2V0c19BUEkvV3JpdGluZ19XZWJTb2NrZXRfc2VydmVycyNkZWNvZGluZ19wYXlsb2FkX2xlbmd0aFxuICAgICAgICBpZiAocGF5bG9hZExlbmd0aCA8IDEyNikge1xuICAgICAgICAgIGhlYWRlciA9IG5ldyBVaW50OEFycmF5KDEpO1xuICAgICAgICAgIG5ldyBEYXRhVmlldyhoZWFkZXIuYnVmZmVyKS5zZXRVaW50OCgwLCBwYXlsb2FkTGVuZ3RoKTtcbiAgICAgICAgfSBlbHNlIGlmIChwYXlsb2FkTGVuZ3RoIDwgNjU1MzYpIHtcbiAgICAgICAgICBoZWFkZXIgPSBuZXcgVWludDhBcnJheSgzKTtcbiAgICAgICAgICBjb25zdCB2aWV3ID0gbmV3IERhdGFWaWV3KGhlYWRlci5idWZmZXIpO1xuICAgICAgICAgIHZpZXcuc2V0VWludDgoMCwgMTI2KTtcbiAgICAgICAgICB2aWV3LnNldFVpbnQxNigxLCBwYXlsb2FkTGVuZ3RoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBoZWFkZXIgPSBuZXcgVWludDhBcnJheSg5KTtcbiAgICAgICAgICBjb25zdCB2aWV3ID0gbmV3IERhdGFWaWV3KGhlYWRlci5idWZmZXIpO1xuICAgICAgICAgIHZpZXcuc2V0VWludDgoMCwgMTI3KTtcbiAgICAgICAgICB2aWV3LnNldEJpZ1VpbnQ2NCgxLCBCaWdJbnQocGF5bG9hZExlbmd0aCkpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGZpcnN0IGJpdCBpbmRpY2F0ZXMgd2hldGhlciB0aGUgcGF5bG9hZCBpcyBwbGFpbiB0ZXh0ICgwKSBvciBiaW5hcnkgKDEpXG4gICAgICAgIGlmIChwYWNrZXQuZGF0YSAmJiB0eXBlb2YgcGFja2V0LmRhdGEgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICBoZWFkZXJbMF0gfD0gMHg4MDtcbiAgICAgICAgfVxuICAgICAgICBjb250cm9sbGVyLmVucXVldWUoaGVhZGVyKTtcbiAgICAgICAgY29udHJvbGxlci5lbnF1ZXVlKGVuY29kZWRQYWNrZXQpO1xuICAgICAgfSk7XG4gICAgfVxuICB9KTtcbn1cbmxldCBURVhUX0RFQ09ERVI7XG5mdW5jdGlvbiB0b3RhbExlbmd0aChjaHVua3MpIHtcbiAgcmV0dXJuIGNodW5rcy5yZWR1Y2UoKGFjYywgY2h1bmspID0+IGFjYyArIGNodW5rLmxlbmd0aCwgMCk7XG59XG5mdW5jdGlvbiBjb25jYXRDaHVua3MoY2h1bmtzLCBzaXplKSB7XG4gIGlmIChjaHVua3NbMF0ubGVuZ3RoID09PSBzaXplKSB7XG4gICAgcmV0dXJuIGNodW5rcy5zaGlmdCgpO1xuICB9XG4gIGNvbnN0IGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KHNpemUpO1xuICBsZXQgaiA9IDA7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7XG4gICAgYnVmZmVyW2ldID0gY2h1bmtzWzBdW2orK107XG4gICAgaWYgKGogPT09IGNodW5rc1swXS5sZW5ndGgpIHtcbiAgICAgIGNodW5rcy5zaGlmdCgpO1xuICAgICAgaiA9IDA7XG4gICAgfVxuICB9XG4gIGlmIChjaHVua3MubGVuZ3RoICYmIGogPCBjaHVua3NbMF0ubGVuZ3RoKSB7XG4gICAgY2h1bmtzWzBdID0gY2h1bmtzWzBdLnNsaWNlKGopO1xuICB9XG4gIHJldHVybiBidWZmZXI7XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUGFja2V0RGVjb2RlclN0cmVhbShtYXhQYXlsb2FkLCBiaW5hcnlUeXBlKSB7XG4gIGlmICghVEVYVF9ERUNPREVSKSB7XG4gICAgVEVYVF9ERUNPREVSID0gbmV3IFRleHREZWNvZGVyKCk7XG4gIH1cbiAgY29uc3QgY2h1bmtzID0gW107XG4gIGxldCBzdGF0ZSA9IDAgLyogU3RhdGUuUkVBRF9IRUFERVIgKi87XG4gIGxldCBleHBlY3RlZExlbmd0aCA9IC0xO1xuICBsZXQgaXNCaW5hcnkgPSBmYWxzZTtcbiAgcmV0dXJuIG5ldyBUcmFuc2Zvcm1TdHJlYW0oe1xuICAgIHRyYW5zZm9ybShjaHVuaywgY29udHJvbGxlcikge1xuICAgICAgY2h1bmtzLnB1c2goY2h1bmspO1xuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgaWYgKHN0YXRlID09PSAwIC8qIFN0YXRlLlJFQURfSEVBREVSICovKSB7XG4gICAgICAgICAgaWYgKHRvdGFsTGVuZ3RoKGNodW5rcykgPCAxKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgaGVhZGVyID0gY29uY2F0Q2h1bmtzKGNodW5rcywgMSk7XG4gICAgICAgICAgaXNCaW5hcnkgPSAoaGVhZGVyWzBdICYgMHg4MCkgPT09IDB4ODA7XG4gICAgICAgICAgZXhwZWN0ZWRMZW5ndGggPSBoZWFkZXJbMF0gJiAweDdmO1xuICAgICAgICAgIGlmIChleHBlY3RlZExlbmd0aCA8IDEyNikge1xuICAgICAgICAgICAgc3RhdGUgPSAzIC8qIFN0YXRlLlJFQURfUEFZTE9BRCAqLztcbiAgICAgICAgICB9IGVsc2UgaWYgKGV4cGVjdGVkTGVuZ3RoID09PSAxMjYpIHtcbiAgICAgICAgICAgIHN0YXRlID0gMSAvKiBTdGF0ZS5SRUFEX0VYVEVOREVEX0xFTkdUSF8xNiAqLztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3RhdGUgPSAyIC8qIFN0YXRlLlJFQURfRVhURU5ERURfTEVOR1RIXzY0ICovO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChzdGF0ZSA9PT0gMSAvKiBTdGF0ZS5SRUFEX0VYVEVOREVEX0xFTkdUSF8xNiAqLykge1xuICAgICAgICAgIGlmICh0b3RhbExlbmd0aChjaHVua3MpIDwgMikge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGhlYWRlckFycmF5ID0gY29uY2F0Q2h1bmtzKGNodW5rcywgMik7XG4gICAgICAgICAgZXhwZWN0ZWRMZW5ndGggPSBuZXcgRGF0YVZpZXcoaGVhZGVyQXJyYXkuYnVmZmVyLCBoZWFkZXJBcnJheS5ieXRlT2Zmc2V0LCBoZWFkZXJBcnJheS5sZW5ndGgpLmdldFVpbnQxNigwKTtcbiAgICAgICAgICBzdGF0ZSA9IDMgLyogU3RhdGUuUkVBRF9QQVlMT0FEICovO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXRlID09PSAyIC8qIFN0YXRlLlJFQURfRVhURU5ERURfTEVOR1RIXzY0ICovKSB7XG4gICAgICAgICAgaWYgKHRvdGFsTGVuZ3RoKGNodW5rcykgPCA4KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgaGVhZGVyQXJyYXkgPSBjb25jYXRDaHVua3MoY2h1bmtzLCA4KTtcbiAgICAgICAgICBjb25zdCB2aWV3ID0gbmV3IERhdGFWaWV3KGhlYWRlckFycmF5LmJ1ZmZlciwgaGVhZGVyQXJyYXkuYnl0ZU9mZnNldCwgaGVhZGVyQXJyYXkubGVuZ3RoKTtcbiAgICAgICAgICBjb25zdCBuID0gdmlldy5nZXRVaW50MzIoMCk7XG4gICAgICAgICAgaWYgKG4gPiBNYXRoLnBvdygyLCA1MyAtIDMyKSAtIDEpIHtcbiAgICAgICAgICAgIC8vIHRoZSBtYXhpbXVtIHNhZmUgaW50ZWdlciBpbiBKYXZhU2NyaXB0IGlzIDJeNTMgLSAxXG4gICAgICAgICAgICBjb250cm9sbGVyLmVucXVldWUoRVJST1JfUEFDS0VUKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBleHBlY3RlZExlbmd0aCA9IG4gKiBNYXRoLnBvdygyLCAzMikgKyB2aWV3LmdldFVpbnQzMig0KTtcbiAgICAgICAgICBzdGF0ZSA9IDMgLyogU3RhdGUuUkVBRF9QQVlMT0FEICovO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh0b3RhbExlbmd0aChjaHVua3MpIDwgZXhwZWN0ZWRMZW5ndGgpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBkYXRhID0gY29uY2F0Q2h1bmtzKGNodW5rcywgZXhwZWN0ZWRMZW5ndGgpO1xuICAgICAgICAgIGNvbnRyb2xsZXIuZW5xdWV1ZShkZWNvZGVQYWNrZXQoaXNCaW5hcnkgPyBkYXRhIDogVEVYVF9ERUNPREVSLmRlY29kZShkYXRhKSwgYmluYXJ5VHlwZSkpO1xuICAgICAgICAgIHN0YXRlID0gMCAvKiBTdGF0ZS5SRUFEX0hFQURFUiAqLztcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXhwZWN0ZWRMZW5ndGggPT09IDAgfHwgZXhwZWN0ZWRMZW5ndGggPiBtYXhQYXlsb2FkKSB7XG4gICAgICAgICAgY29udHJvbGxlci5lbnF1ZXVlKEVSUk9SX1BBQ0tFVCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0pO1xufVxuZXhwb3J0IGNvbnN0IHByb3RvY29sID0gNDtcbmV4cG9ydCB7IGVuY29kZVBhY2tldCwgZW5jb2RlUGF5bG9hZCwgZGVjb2RlUGFja2V0LCBkZWNvZGVQYXlsb2FkIH07IiwiLyoqXG4gKiBJbml0aWFsaXplIGEgbmV3IGBFbWl0dGVyYC5cbiAqXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBFbWl0dGVyKG9iaikge1xuICBpZiAob2JqKSByZXR1cm4gbWl4aW4ob2JqKTtcbn1cblxuLyoqXG4gKiBNaXhpbiB0aGUgZW1pdHRlciBwcm9wZXJ0aWVzLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIG1peGluKG9iaikge1xuICBmb3IgKHZhciBrZXkgaW4gRW1pdHRlci5wcm90b3R5cGUpIHtcbiAgICBvYmpba2V5XSA9IEVtaXR0ZXIucHJvdG90eXBlW2tleV07XG4gIH1cbiAgcmV0dXJuIG9iajtcbn1cblxuLyoqXG4gKiBMaXN0ZW4gb24gdGhlIGdpdmVuIGBldmVudGAgd2l0aCBgZm5gLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudFxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cbiAqIEByZXR1cm4ge0VtaXR0ZXJ9XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbkVtaXR0ZXIucHJvdG90eXBlLm9uID0gRW1pdHRlci5wcm90b3R5cGUuYWRkRXZlbnRMaXN0ZW5lciA9IGZ1bmN0aW9uIChldmVudCwgZm4pIHtcbiAgdGhpcy5fY2FsbGJhY2tzID0gdGhpcy5fY2FsbGJhY2tzIHx8IHt9O1xuICAodGhpcy5fY2FsbGJhY2tzWyckJyArIGV2ZW50XSA9IHRoaXMuX2NhbGxiYWNrc1snJCcgKyBldmVudF0gfHwgW10pLnB1c2goZm4pO1xuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQWRkcyBhbiBgZXZlbnRgIGxpc3RlbmVyIHRoYXQgd2lsbCBiZSBpbnZva2VkIGEgc2luZ2xlXG4gKiB0aW1lIHRoZW4gYXV0b21hdGljYWxseSByZW1vdmVkLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudFxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cbiAqIEByZXR1cm4ge0VtaXR0ZXJ9XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbkVtaXR0ZXIucHJvdG90eXBlLm9uY2UgPSBmdW5jdGlvbiAoZXZlbnQsIGZuKSB7XG4gIGZ1bmN0aW9uIG9uKCkge1xuICAgIHRoaXMub2ZmKGV2ZW50LCBvbik7XG4gICAgZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxuICBvbi5mbiA9IGZuO1xuICB0aGlzLm9uKGV2ZW50LCBvbik7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgdGhlIGdpdmVuIGNhbGxiYWNrIGZvciBgZXZlbnRgIG9yIGFsbFxuICogcmVnaXN0ZXJlZCBjYWxsYmFja3MuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxuICogQHJldHVybiB7RW1pdHRlcn1cbiAqIEBhcGkgcHVibGljXG4gKi9cblxuRW1pdHRlci5wcm90b3R5cGUub2ZmID0gRW1pdHRlci5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXIgPSBFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVFdmVudExpc3RlbmVyID0gZnVuY3Rpb24gKGV2ZW50LCBmbikge1xuICB0aGlzLl9jYWxsYmFja3MgPSB0aGlzLl9jYWxsYmFja3MgfHwge307XG5cbiAgLy8gYWxsXG4gIGlmICgwID09IGFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICB0aGlzLl9jYWxsYmFja3MgPSB7fTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIHNwZWNpZmljIGV2ZW50XG4gIHZhciBjYWxsYmFja3MgPSB0aGlzLl9jYWxsYmFja3NbJyQnICsgZXZlbnRdO1xuICBpZiAoIWNhbGxiYWNrcykgcmV0dXJuIHRoaXM7XG5cbiAgLy8gcmVtb3ZlIGFsbCBoYW5kbGVyc1xuICBpZiAoMSA9PSBhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgZGVsZXRlIHRoaXMuX2NhbGxiYWNrc1snJCcgKyBldmVudF07XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyByZW1vdmUgc3BlY2lmaWMgaGFuZGxlclxuICB2YXIgY2I7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgY2FsbGJhY2tzLmxlbmd0aDsgaSsrKSB7XG4gICAgY2IgPSBjYWxsYmFja3NbaV07XG4gICAgaWYgKGNiID09PSBmbiB8fCBjYi5mbiA9PT0gZm4pIHtcbiAgICAgIGNhbGxiYWNrcy5zcGxpY2UoaSwgMSk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICAvLyBSZW1vdmUgZXZlbnQgc3BlY2lmaWMgYXJyYXlzIGZvciBldmVudCB0eXBlcyB0aGF0IG5vXG4gIC8vIG9uZSBpcyBzdWJzY3JpYmVkIGZvciB0byBhdm9pZCBtZW1vcnkgbGVhay5cbiAgaWYgKGNhbGxiYWNrcy5sZW5ndGggPT09IDApIHtcbiAgICBkZWxldGUgdGhpcy5fY2FsbGJhY2tzWyckJyArIGV2ZW50XTtcbiAgfVxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogRW1pdCBgZXZlbnRgIHdpdGggdGhlIGdpdmVuIGFyZ3MuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50XG4gKiBAcGFyYW0ge01peGVkfSAuLi5cbiAqIEByZXR1cm4ge0VtaXR0ZXJ9XG4gKi9cblxuRW1pdHRlci5wcm90b3R5cGUuZW1pdCA9IGZ1bmN0aW9uIChldmVudCkge1xuICB0aGlzLl9jYWxsYmFja3MgPSB0aGlzLl9jYWxsYmFja3MgfHwge307XG4gIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGggLSAxKSxcbiAgICBjYWxsYmFja3MgPSB0aGlzLl9jYWxsYmFja3NbJyQnICsgZXZlbnRdO1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIGFyZ3NbaSAtIDFdID0gYXJndW1lbnRzW2ldO1xuICB9XG4gIGlmIChjYWxsYmFja3MpIHtcbiAgICBjYWxsYmFja3MgPSBjYWxsYmFja3Muc2xpY2UoMCk7XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGNhbGxiYWNrcy5sZW5ndGg7IGkgPCBsZW47ICsraSkge1xuICAgICAgY2FsbGJhY2tzW2ldLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdGhpcztcbn07XG5cbi8vIGFsaWFzIHVzZWQgZm9yIHJlc2VydmVkIGV2ZW50cyAocHJvdGVjdGVkIG1ldGhvZClcbkVtaXR0ZXIucHJvdG90eXBlLmVtaXRSZXNlcnZlZCA9IEVtaXR0ZXIucHJvdG90eXBlLmVtaXQ7XG5cbi8qKlxuICogUmV0dXJuIGFycmF5IG9mIGNhbGxiYWNrcyBmb3IgYGV2ZW50YC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gZXZlbnRcbiAqIEByZXR1cm4ge0FycmF5fVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5FbWl0dGVyLnByb3RvdHlwZS5saXN0ZW5lcnMgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgdGhpcy5fY2FsbGJhY2tzID0gdGhpcy5fY2FsbGJhY2tzIHx8IHt9O1xuICByZXR1cm4gdGhpcy5fY2FsbGJhY2tzWyckJyArIGV2ZW50XSB8fCBbXTtcbn07XG5cbi8qKlxuICogQ2hlY2sgaWYgdGhpcyBlbWl0dGVyIGhhcyBgZXZlbnRgIGhhbmRsZXJzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudFxuICogQHJldHVybiB7Qm9vbGVhbn1cbiAqIEBhcGkgcHVibGljXG4gKi9cblxuRW1pdHRlci5wcm90b3R5cGUuaGFzTGlzdGVuZXJzID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gIHJldHVybiAhIXRoaXMubGlzdGVuZXJzKGV2ZW50KS5sZW5ndGg7XG59OyIsImV4cG9ydCBjb25zdCBuZXh0VGljayA9ICgoKSA9PiB7XG4gIGNvbnN0IGlzUHJvbWlzZUF2YWlsYWJsZSA9IHR5cGVvZiBQcm9taXNlID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFByb21pc2UucmVzb2x2ZSA9PT0gXCJmdW5jdGlvblwiO1xuICBpZiAoaXNQcm9taXNlQXZhaWxhYmxlKSB7XG4gICAgcmV0dXJuIGNiID0+IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oY2IpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAoY2IsIHNldFRpbWVvdXRGbikgPT4gc2V0VGltZW91dEZuKGNiLCAwKTtcbiAgfVxufSkoKTtcbmV4cG9ydCBjb25zdCBnbG9iYWxUaGlzU2hpbSA9ICgoKSA9PiB7XG4gIGlmICh0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHJldHVybiBzZWxmO1xuICB9IGVsc2UgaWYgKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICByZXR1cm4gd2luZG93O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCk7XG4gIH1cbn0pKCk7XG5leHBvcnQgY29uc3QgZGVmYXVsdEJpbmFyeVR5cGUgPSBcImFycmF5YnVmZmVyXCI7XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ29va2llSmFyKCkge30iLCJpbXBvcnQgeyBnbG9iYWxUaGlzU2hpbSBhcyBnbG9iYWxUaGlzIH0gZnJvbSBcIi4vZ2xvYmFscy5ub2RlLmpzXCI7XG5leHBvcnQgZnVuY3Rpb24gcGljayhvYmosIC4uLmF0dHIpIHtcbiAgcmV0dXJuIGF0dHIucmVkdWNlKChhY2MsIGspID0+IHtcbiAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGspKSB7XG4gICAgICBhY2Nba10gPSBvYmpba107XG4gICAgfVxuICAgIHJldHVybiBhY2M7XG4gIH0sIHt9KTtcbn1cbi8vIEtlZXAgYSByZWZlcmVuY2UgdG8gdGhlIHJlYWwgdGltZW91dCBmdW5jdGlvbnMgc28gdGhleSBjYW4gYmUgdXNlZCB3aGVuIG92ZXJyaWRkZW5cbmNvbnN0IE5BVElWRV9TRVRfVElNRU9VVCA9IGdsb2JhbFRoaXMuc2V0VGltZW91dDtcbmNvbnN0IE5BVElWRV9DTEVBUl9USU1FT1VUID0gZ2xvYmFsVGhpcy5jbGVhclRpbWVvdXQ7XG5leHBvcnQgZnVuY3Rpb24gaW5zdGFsbFRpbWVyRnVuY3Rpb25zKG9iaiwgb3B0cykge1xuICBpZiAob3B0cy51c2VOYXRpdmVUaW1lcnMpIHtcbiAgICBvYmouc2V0VGltZW91dEZuID0gTkFUSVZFX1NFVF9USU1FT1VULmJpbmQoZ2xvYmFsVGhpcyk7XG4gICAgb2JqLmNsZWFyVGltZW91dEZuID0gTkFUSVZFX0NMRUFSX1RJTUVPVVQuYmluZChnbG9iYWxUaGlzKTtcbiAgfSBlbHNlIHtcbiAgICBvYmouc2V0VGltZW91dEZuID0gZ2xvYmFsVGhpcy5zZXRUaW1lb3V0LmJpbmQoZ2xvYmFsVGhpcyk7XG4gICAgb2JqLmNsZWFyVGltZW91dEZuID0gZ2xvYmFsVGhpcy5jbGVhclRpbWVvdXQuYmluZChnbG9iYWxUaGlzKTtcbiAgfVxufVxuLy8gYmFzZTY0IGVuY29kZWQgYnVmZmVycyBhcmUgYWJvdXQgMzMlIGJpZ2dlciAoaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQmFzZTY0KVxuY29uc3QgQkFTRTY0X09WRVJIRUFEID0gMS4zMztcbi8vIHdlIGNvdWxkIGFsc28gaGF2ZSB1c2VkIGBuZXcgQmxvYihbb2JqXSkuc2l6ZWAsIGJ1dCBpdCBpc24ndCBzdXBwb3J0ZWQgaW4gSUU5XG5leHBvcnQgZnVuY3Rpb24gYnl0ZUxlbmd0aChvYmopIHtcbiAgaWYgKHR5cGVvZiBvYmogPT09IFwic3RyaW5nXCIpIHtcbiAgICByZXR1cm4gdXRmOExlbmd0aChvYmopO1xuICB9XG4gIC8vIGFycmF5YnVmZmVyIG9yIGJsb2JcbiAgcmV0dXJuIE1hdGguY2VpbCgob2JqLmJ5dGVMZW5ndGggfHwgb2JqLnNpemUpICogQkFTRTY0X09WRVJIRUFEKTtcbn1cbmZ1bmN0aW9uIHV0ZjhMZW5ndGgoc3RyKSB7XG4gIGxldCBjID0gMCxcbiAgICBsZW5ndGggPSAwO1xuICBmb3IgKGxldCBpID0gMCwgbCA9IHN0ci5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBjID0gc3RyLmNoYXJDb2RlQXQoaSk7XG4gICAgaWYgKGMgPCAweDgwKSB7XG4gICAgICBsZW5ndGggKz0gMTtcbiAgICB9IGVsc2UgaWYgKGMgPCAweDgwMCkge1xuICAgICAgbGVuZ3RoICs9IDI7XG4gICAgfSBlbHNlIGlmIChjIDwgMHhkODAwIHx8IGMgPj0gMHhlMDAwKSB7XG4gICAgICBsZW5ndGggKz0gMztcbiAgICB9IGVsc2Uge1xuICAgICAgaSsrO1xuICAgICAgbGVuZ3RoICs9IDQ7XG4gICAgfVxuICB9XG4gIHJldHVybiBsZW5ndGg7XG59XG4vKipcbiAqIEdlbmVyYXRlcyBhIHJhbmRvbSA4LWNoYXJhY3RlcnMgc3RyaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmFuZG9tU3RyaW5nKCkge1xuICByZXR1cm4gRGF0ZS5ub3coKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDMpICsgTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDIsIDUpO1xufSIsIi8vIGltcG9ydGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2dhbGtuL3F1ZXJ5c3RyaW5nXG4vKipcbiAqIENvbXBpbGVzIGEgcXVlcnlzdHJpbmdcbiAqIFJldHVybnMgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge09iamVjdH1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZW5jb2RlKG9iaikge1xuICBsZXQgc3RyID0gJyc7XG4gIGZvciAobGV0IGkgaW4gb2JqKSB7XG4gICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShpKSkge1xuICAgICAgaWYgKHN0ci5sZW5ndGgpIHN0ciArPSAnJic7XG4gICAgICBzdHIgKz0gZW5jb2RlVVJJQ29tcG9uZW50KGkpICsgJz0nICsgZW5jb2RlVVJJQ29tcG9uZW50KG9ialtpXSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBzdHI7XG59XG4vKipcbiAqIFBhcnNlcyBhIHNpbXBsZSBxdWVyeXN0cmluZyBpbnRvIGFuIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBxc1xuICogQGFwaSBwcml2YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGUocXMpIHtcbiAgbGV0IHFyeSA9IHt9O1xuICBsZXQgcGFpcnMgPSBxcy5zcGxpdCgnJicpO1xuICBmb3IgKGxldCBpID0gMCwgbCA9IHBhaXJzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGxldCBwYWlyID0gcGFpcnNbaV0uc3BsaXQoJz0nKTtcbiAgICBxcnlbZGVjb2RlVVJJQ29tcG9uZW50KHBhaXJbMF0pXSA9IGRlY29kZVVSSUNvbXBvbmVudChwYWlyWzFdKTtcbiAgfVxuICByZXR1cm4gcXJ5O1xufSIsImltcG9ydCB7IGRlY29kZVBhY2tldCB9IGZyb20gXCJlbmdpbmUuaW8tcGFyc2VyXCI7XG5pbXBvcnQgeyBFbWl0dGVyIH0gZnJvbSBcIkBzb2NrZXQuaW8vY29tcG9uZW50LWVtaXR0ZXJcIjtcbmltcG9ydCB7IGluc3RhbGxUaW1lckZ1bmN0aW9ucyB9IGZyb20gXCIuL3V0aWwuanNcIjtcbmltcG9ydCB7IGVuY29kZSB9IGZyb20gXCIuL2NvbnRyaWIvcGFyc2Vxcy5qc1wiO1xuZXhwb3J0IGNsYXNzIFRyYW5zcG9ydEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihyZWFzb24sIGRlc2NyaXB0aW9uLCBjb250ZXh0KSB7XG4gICAgc3VwZXIocmVhc29uKTtcbiAgICB0aGlzLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247XG4gICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbiAgICB0aGlzLnR5cGUgPSBcIlRyYW5zcG9ydEVycm9yXCI7XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBUcmFuc3BvcnQgZXh0ZW5kcyBFbWl0dGVyIHtcbiAgLyoqXG4gICAqIFRyYW5zcG9ydCBhYnN0cmFjdCBjb25zdHJ1Y3Rvci5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRpb25zXG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIGNvbnN0cnVjdG9yKG9wdHMpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMud3JpdGFibGUgPSBmYWxzZTtcbiAgICBpbnN0YWxsVGltZXJGdW5jdGlvbnModGhpcywgb3B0cyk7XG4gICAgdGhpcy5vcHRzID0gb3B0cztcbiAgICB0aGlzLnF1ZXJ5ID0gb3B0cy5xdWVyeTtcbiAgICB0aGlzLnNvY2tldCA9IG9wdHMuc29ja2V0O1xuICAgIHRoaXMuc3VwcG9ydHNCaW5hcnkgPSAhb3B0cy5mb3JjZUJhc2U2NDtcbiAgfVxuICAvKipcbiAgICogRW1pdHMgYW4gZXJyb3IuXG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nfSByZWFzb25cbiAgICogQHBhcmFtIGRlc2NyaXB0aW9uXG4gICAqIEBwYXJhbSBjb250ZXh0IC0gdGhlIGVycm9yIGNvbnRleHRcbiAgICogQHJldHVybiB7VHJhbnNwb3J0fSBmb3IgY2hhaW5pbmdcbiAgICogQHByb3RlY3RlZFxuICAgKi9cbiAgb25FcnJvcihyZWFzb24sIGRlc2NyaXB0aW9uLCBjb250ZXh0KSB7XG4gICAgc3VwZXIuZW1pdFJlc2VydmVkKFwiZXJyb3JcIiwgbmV3IFRyYW5zcG9ydEVycm9yKHJlYXNvbiwgZGVzY3JpcHRpb24sIGNvbnRleHQpKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICAvKipcbiAgICogT3BlbnMgdGhlIHRyYW5zcG9ydC5cbiAgICovXG4gIG9wZW4oKSB7XG4gICAgdGhpcy5yZWFkeVN0YXRlID0gXCJvcGVuaW5nXCI7XG4gICAgdGhpcy5kb09wZW4oKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICAvKipcbiAgICogQ2xvc2VzIHRoZSB0cmFuc3BvcnQuXG4gICAqL1xuICBjbG9zZSgpIHtcbiAgICBpZiAodGhpcy5yZWFkeVN0YXRlID09PSBcIm9wZW5pbmdcIiB8fCB0aGlzLnJlYWR5U3RhdGUgPT09IFwib3BlblwiKSB7XG4gICAgICB0aGlzLmRvQ2xvc2UoKTtcbiAgICAgIHRoaXMub25DbG9zZSgpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICAvKipcbiAgICogU2VuZHMgbXVsdGlwbGUgcGFja2V0cy5cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheX0gcGFja2V0c1xuICAgKi9cbiAgc2VuZChwYWNrZXRzKSB7XG4gICAgaWYgKHRoaXMucmVhZHlTdGF0ZSA9PT0gXCJvcGVuXCIpIHtcbiAgICAgIHRoaXMud3JpdGUocGFja2V0cyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHRoaXMgbWlnaHQgaGFwcGVuIGlmIHRoZSB0cmFuc3BvcnQgd2FzIHNpbGVudGx5IGNsb3NlZCBpbiB0aGUgYmVmb3JldW5sb2FkIGV2ZW50IGhhbmRsZXJcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIENhbGxlZCB1cG9uIG9wZW5cbiAgICpcbiAgICogQHByb3RlY3RlZFxuICAgKi9cbiAgb25PcGVuKCkge1xuICAgIHRoaXMucmVhZHlTdGF0ZSA9IFwib3BlblwiO1xuICAgIHRoaXMud3JpdGFibGUgPSB0cnVlO1xuICAgIHN1cGVyLmVtaXRSZXNlcnZlZChcIm9wZW5cIik7XG4gIH1cbiAgLyoqXG4gICAqIENhbGxlZCB3aXRoIGRhdGEuXG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBkYXRhXG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIG9uRGF0YShkYXRhKSB7XG4gICAgY29uc3QgcGFja2V0ID0gZGVjb2RlUGFja2V0KGRhdGEsIHRoaXMuc29ja2V0LmJpbmFyeVR5cGUpO1xuICAgIHRoaXMub25QYWNrZXQocGFja2V0KTtcbiAgfVxuICAvKipcbiAgICogQ2FsbGVkIHdpdGggYSBkZWNvZGVkIHBhY2tldC5cbiAgICpcbiAgICogQHByb3RlY3RlZFxuICAgKi9cbiAgb25QYWNrZXQocGFja2V0KSB7XG4gICAgc3VwZXIuZW1pdFJlc2VydmVkKFwicGFja2V0XCIsIHBhY2tldCk7XG4gIH1cbiAgLyoqXG4gICAqIENhbGxlZCB1cG9uIGNsb3NlLlxuICAgKlxuICAgKiBAcHJvdGVjdGVkXG4gICAqL1xuICBvbkNsb3NlKGRldGFpbHMpIHtcbiAgICB0aGlzLnJlYWR5U3RhdGUgPSBcImNsb3NlZFwiO1xuICAgIHN1cGVyLmVtaXRSZXNlcnZlZChcImNsb3NlXCIsIGRldGFpbHMpO1xuICB9XG4gIC8qKlxuICAgKiBQYXVzZXMgdGhlIHRyYW5zcG9ydCwgaW4gb3JkZXIgbm90IHRvIGxvc2UgcGFja2V0cyBkdXJpbmcgYW4gdXBncmFkZS5cbiAgICpcbiAgICogQHBhcmFtIG9uUGF1c2VcbiAgICovXG4gIHBhdXNlKG9uUGF1c2UpIHt9XG4gIGNyZWF0ZVVyaShzY2hlbWEsIHF1ZXJ5ID0ge30pIHtcbiAgICByZXR1cm4gc2NoZW1hICsgXCI6Ly9cIiArIHRoaXMuX2hvc3RuYW1lKCkgKyB0aGlzLl9wb3J0KCkgKyB0aGlzLm9wdHMucGF0aCArIHRoaXMuX3F1ZXJ5KHF1ZXJ5KTtcbiAgfVxuICBfaG9zdG5hbWUoKSB7XG4gICAgY29uc3QgaG9zdG5hbWUgPSB0aGlzLm9wdHMuaG9zdG5hbWU7XG4gICAgcmV0dXJuIGhvc3RuYW1lLmluZGV4T2YoXCI6XCIpID09PSAtMSA/IGhvc3RuYW1lIDogXCJbXCIgKyBob3N0bmFtZSArIFwiXVwiO1xuICB9XG4gIF9wb3J0KCkge1xuICAgIGlmICh0aGlzLm9wdHMucG9ydCAmJiAodGhpcy5vcHRzLnNlY3VyZSAmJiBOdW1iZXIodGhpcy5vcHRzLnBvcnQpICE9PSA0NDMgfHwgIXRoaXMub3B0cy5zZWN1cmUgJiYgTnVtYmVyKHRoaXMub3B0cy5wb3J0KSAhPT0gODApKSB7XG4gICAgICByZXR1cm4gXCI6XCIgKyB0aGlzLm9wdHMucG9ydDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuICB9XG4gIF9xdWVyeShxdWVyeSkge1xuICAgIGNvbnN0IGVuY29kZWRRdWVyeSA9IGVuY29kZShxdWVyeSk7XG4gICAgcmV0dXJuIGVuY29kZWRRdWVyeS5sZW5ndGggPyBcIj9cIiArIGVuY29kZWRRdWVyeSA6IFwiXCI7XG4gIH1cbn0iLCJpbXBvcnQgeyBUcmFuc3BvcnQgfSBmcm9tIFwiLi4vdHJhbnNwb3J0LmpzXCI7XG5pbXBvcnQgeyByYW5kb21TdHJpbmcgfSBmcm9tIFwiLi4vdXRpbC5qc1wiO1xuaW1wb3J0IHsgZW5jb2RlUGF5bG9hZCwgZGVjb2RlUGF5bG9hZCB9IGZyb20gXCJlbmdpbmUuaW8tcGFyc2VyXCI7XG5leHBvcnQgY2xhc3MgUG9sbGluZyBleHRlbmRzIFRyYW5zcG9ydCB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgdGhpcy5fcG9sbGluZyA9IGZhbHNlO1xuICB9XG4gIGdldCBuYW1lKCkge1xuICAgIHJldHVybiBcInBvbGxpbmdcIjtcbiAgfVxuICAvKipcbiAgICogT3BlbnMgdGhlIHNvY2tldCAodHJpZ2dlcnMgcG9sbGluZykuIFdlIHdyaXRlIGEgUElORyBtZXNzYWdlIHRvIGRldGVybWluZVxuICAgKiB3aGVuIHRoZSB0cmFuc3BvcnQgaXMgb3Blbi5cbiAgICpcbiAgICogQHByb3RlY3RlZFxuICAgKi9cbiAgZG9PcGVuKCkge1xuICAgIHRoaXMuX3BvbGwoKTtcbiAgfVxuICAvKipcbiAgICogUGF1c2VzIHBvbGxpbmcuXG4gICAqXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IG9uUGF1c2UgLSBjYWxsYmFjayB1cG9uIGJ1ZmZlcnMgYXJlIGZsdXNoZWQgYW5kIHRyYW5zcG9ydCBpcyBwYXVzZWRcbiAgICogQHBhY2thZ2VcbiAgICovXG4gIHBhdXNlKG9uUGF1c2UpIHtcbiAgICB0aGlzLnJlYWR5U3RhdGUgPSBcInBhdXNpbmdcIjtcbiAgICBjb25zdCBwYXVzZSA9ICgpID0+IHtcbiAgICAgIHRoaXMucmVhZHlTdGF0ZSA9IFwicGF1c2VkXCI7XG4gICAgICBvblBhdXNlKCk7XG4gICAgfTtcbiAgICBpZiAodGhpcy5fcG9sbGluZyB8fCAhdGhpcy53cml0YWJsZSkge1xuICAgICAgbGV0IHRvdGFsID0gMDtcbiAgICAgIGlmICh0aGlzLl9wb2xsaW5nKSB7XG4gICAgICAgIHRvdGFsKys7XG4gICAgICAgIHRoaXMub25jZShcInBvbGxDb21wbGV0ZVwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgLS10b3RhbCB8fCBwYXVzZSgpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy53cml0YWJsZSkge1xuICAgICAgICB0b3RhbCsrO1xuICAgICAgICB0aGlzLm9uY2UoXCJkcmFpblwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgLS10b3RhbCB8fCBwYXVzZSgpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGF1c2UoKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFN0YXJ0cyBwb2xsaW5nIGN5Y2xlLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3BvbGwoKSB7XG4gICAgdGhpcy5fcG9sbGluZyA9IHRydWU7XG4gICAgdGhpcy5kb1BvbGwoKTtcbiAgICB0aGlzLmVtaXRSZXNlcnZlZChcInBvbGxcIik7XG4gIH1cbiAgLyoqXG4gICAqIE92ZXJsb2FkcyBvbkRhdGEgdG8gZGV0ZWN0IHBheWxvYWRzLlxuICAgKlxuICAgKiBAcHJvdGVjdGVkXG4gICAqL1xuICBvbkRhdGEoZGF0YSkge1xuICAgIGNvbnN0IGNhbGxiYWNrID0gcGFja2V0ID0+IHtcbiAgICAgIC8vIGlmIGl0cyB0aGUgZmlyc3QgbWVzc2FnZSB3ZSBjb25zaWRlciB0aGUgdHJhbnNwb3J0IG9wZW5cbiAgICAgIGlmIChcIm9wZW5pbmdcIiA9PT0gdGhpcy5yZWFkeVN0YXRlICYmIHBhY2tldC50eXBlID09PSBcIm9wZW5cIikge1xuICAgICAgICB0aGlzLm9uT3BlbigpO1xuICAgICAgfVxuICAgICAgLy8gaWYgaXRzIGEgY2xvc2UgcGFja2V0LCB3ZSBjbG9zZSB0aGUgb25nb2luZyByZXF1ZXN0c1xuICAgICAgaWYgKFwiY2xvc2VcIiA9PT0gcGFja2V0LnR5cGUpIHtcbiAgICAgICAgdGhpcy5vbkNsb3NlKHtcbiAgICAgICAgICBkZXNjcmlwdGlvbjogXCJ0cmFuc3BvcnQgY2xvc2VkIGJ5IHRoZSBzZXJ2ZXJcIlxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgLy8gb3RoZXJ3aXNlIGJ5cGFzcyBvbkRhdGEgYW5kIGhhbmRsZSB0aGUgbWVzc2FnZVxuICAgICAgdGhpcy5vblBhY2tldChwYWNrZXQpO1xuICAgIH07XG4gICAgLy8gZGVjb2RlIHBheWxvYWRcbiAgICBkZWNvZGVQYXlsb2FkKGRhdGEsIHRoaXMuc29ja2V0LmJpbmFyeVR5cGUpLmZvckVhY2goY2FsbGJhY2spO1xuICAgIC8vIGlmIGFuIGV2ZW50IGRpZCBub3QgdHJpZ2dlciBjbG9zaW5nXG4gICAgaWYgKFwiY2xvc2VkXCIgIT09IHRoaXMucmVhZHlTdGF0ZSkge1xuICAgICAgLy8gaWYgd2UgZ290IGRhdGEgd2UncmUgbm90IHBvbGxpbmdcbiAgICAgIHRoaXMuX3BvbGxpbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMuZW1pdFJlc2VydmVkKFwicG9sbENvbXBsZXRlXCIpO1xuICAgICAgaWYgKFwib3BlblwiID09PSB0aGlzLnJlYWR5U3RhdGUpIHtcbiAgICAgICAgdGhpcy5fcG9sbCgpO1xuICAgICAgfSBlbHNlIHt9XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBGb3IgcG9sbGluZywgc2VuZCBhIGNsb3NlIHBhY2tldC5cbiAgICpcbiAgICogQHByb3RlY3RlZFxuICAgKi9cbiAgZG9DbG9zZSgpIHtcbiAgICBjb25zdCBjbG9zZSA9ICgpID0+IHtcbiAgICAgIHRoaXMud3JpdGUoW3tcbiAgICAgICAgdHlwZTogXCJjbG9zZVwiXG4gICAgICB9XSk7XG4gICAgfTtcbiAgICBpZiAoXCJvcGVuXCIgPT09IHRoaXMucmVhZHlTdGF0ZSkge1xuICAgICAgY2xvc2UoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gaW4gY2FzZSB3ZSdyZSB0cnlpbmcgdG8gY2xvc2Ugd2hpbGVcbiAgICAgIC8vIGhhbmRzaGFraW5nIGlzIGluIHByb2dyZXNzIChHSC0xNjQpXG4gICAgICB0aGlzLm9uY2UoXCJvcGVuXCIsIGNsb3NlKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFdyaXRlcyBhIHBhY2tldHMgcGF5bG9hZC5cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheX0gcGFja2V0cyAtIGRhdGEgcGFja2V0c1xuICAgKiBAcHJvdGVjdGVkXG4gICAqL1xuICB3cml0ZShwYWNrZXRzKSB7XG4gICAgdGhpcy53cml0YWJsZSA9IGZhbHNlO1xuICAgIGVuY29kZVBheWxvYWQocGFja2V0cywgZGF0YSA9PiB7XG4gICAgICB0aGlzLmRvV3JpdGUoZGF0YSwgKCkgPT4ge1xuICAgICAgICB0aGlzLndyaXRhYmxlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5lbWl0UmVzZXJ2ZWQoXCJkcmFpblwiKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG4gIC8qKlxuICAgKiBHZW5lcmF0ZXMgdXJpIGZvciBjb25uZWN0aW9uLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgdXJpKCkge1xuICAgIGNvbnN0IHNjaGVtYSA9IHRoaXMub3B0cy5zZWN1cmUgPyBcImh0dHBzXCIgOiBcImh0dHBcIjtcbiAgICBjb25zdCBxdWVyeSA9IHRoaXMucXVlcnkgfHwge307XG4gICAgLy8gY2FjaGUgYnVzdGluZyBpcyBmb3JjZWRcbiAgICBpZiAoZmFsc2UgIT09IHRoaXMub3B0cy50aW1lc3RhbXBSZXF1ZXN0cykge1xuICAgICAgcXVlcnlbdGhpcy5vcHRzLnRpbWVzdGFtcFBhcmFtXSA9IHJhbmRvbVN0cmluZygpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuc3VwcG9ydHNCaW5hcnkgJiYgIXF1ZXJ5LnNpZCkge1xuICAgICAgcXVlcnkuYjY0ID0gMTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlVXJpKHNjaGVtYSwgcXVlcnkpO1xuICB9XG59IiwiLy8gaW1wb3J0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vY29tcG9uZW50L2hhcy1jb3JzXG5sZXQgdmFsdWUgPSBmYWxzZTtcbnRyeSB7XG4gIHZhbHVlID0gdHlwZW9mIFhNTEh0dHBSZXF1ZXN0ICE9PSAndW5kZWZpbmVkJyAmJiAnd2l0aENyZWRlbnRpYWxzJyBpbiBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbn0gY2F0Y2ggKGVycikge1xuICAvLyBpZiBYTUxIdHRwIHN1cHBvcnQgaXMgZGlzYWJsZWQgaW4gSUUgdGhlbiBpdCB3aWxsIHRocm93XG4gIC8vIHdoZW4gdHJ5aW5nIHRvIGNyZWF0ZVxufVxuZXhwb3J0IGNvbnN0IGhhc0NPUlMgPSB2YWx1ZTsiLCJpbXBvcnQgeyBQb2xsaW5nIH0gZnJvbSBcIi4vcG9sbGluZy5qc1wiO1xuaW1wb3J0IHsgRW1pdHRlciB9IGZyb20gXCJAc29ja2V0LmlvL2NvbXBvbmVudC1lbWl0dGVyXCI7XG5pbXBvcnQgeyBpbnN0YWxsVGltZXJGdW5jdGlvbnMsIHBpY2sgfSBmcm9tIFwiLi4vdXRpbC5qc1wiO1xuaW1wb3J0IHsgZ2xvYmFsVGhpc1NoaW0gYXMgZ2xvYmFsVGhpcyB9IGZyb20gXCIuLi9nbG9iYWxzLm5vZGUuanNcIjtcbmltcG9ydCB7IGhhc0NPUlMgfSBmcm9tIFwiLi4vY29udHJpYi9oYXMtY29ycy5qc1wiO1xuZnVuY3Rpb24gZW1wdHkoKSB7fVxuZXhwb3J0IGNsYXNzIEJhc2VYSFIgZXh0ZW5kcyBQb2xsaW5nIHtcbiAgLyoqXG4gICAqIFhIUiBQb2xsaW5nIGNvbnN0cnVjdG9yLlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0c1xuICAgKiBAcGFja2FnZVxuICAgKi9cbiAgY29uc3RydWN0b3Iob3B0cykge1xuICAgIHN1cGVyKG9wdHMpO1xuICAgIGlmICh0eXBlb2YgbG9jYXRpb24gIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIGNvbnN0IGlzU1NMID0gXCJodHRwczpcIiA9PT0gbG9jYXRpb24ucHJvdG9jb2w7XG4gICAgICBsZXQgcG9ydCA9IGxvY2F0aW9uLnBvcnQ7XG4gICAgICAvLyBzb21lIHVzZXIgYWdlbnRzIGhhdmUgZW1wdHkgYGxvY2F0aW9uLnBvcnRgXG4gICAgICBpZiAoIXBvcnQpIHtcbiAgICAgICAgcG9ydCA9IGlzU1NMID8gXCI0NDNcIiA6IFwiODBcIjtcbiAgICAgIH1cbiAgICAgIHRoaXMueGQgPSB0eXBlb2YgbG9jYXRpb24gIT09IFwidW5kZWZpbmVkXCIgJiYgb3B0cy5ob3N0bmFtZSAhPT0gbG9jYXRpb24uaG9zdG5hbWUgfHwgcG9ydCAhPT0gb3B0cy5wb3J0O1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogU2VuZHMgZGF0YS5cbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmd9IGRhdGEgdG8gc2VuZC5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGVkIHVwb24gZmx1c2guXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBkb1dyaXRlKGRhdGEsIGZuKSB7XG4gICAgY29uc3QgcmVxID0gdGhpcy5yZXF1ZXN0KHtcbiAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICBkYXRhOiBkYXRhXG4gICAgfSk7XG4gICAgcmVxLm9uKFwic3VjY2Vzc1wiLCBmbik7XG4gICAgcmVxLm9uKFwiZXJyb3JcIiwgKHhoclN0YXR1cywgY29udGV4dCkgPT4ge1xuICAgICAgdGhpcy5vbkVycm9yKFwieGhyIHBvc3QgZXJyb3JcIiwgeGhyU3RhdHVzLCBjb250ZXh0KTtcbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogU3RhcnRzIGEgcG9sbCBjeWNsZS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGRvUG9sbCgpIHtcbiAgICBjb25zdCByZXEgPSB0aGlzLnJlcXVlc3QoKTtcbiAgICByZXEub24oXCJkYXRhXCIsIHRoaXMub25EYXRhLmJpbmQodGhpcykpO1xuICAgIHJlcS5vbihcImVycm9yXCIsICh4aHJTdGF0dXMsIGNvbnRleHQpID0+IHtcbiAgICAgIHRoaXMub25FcnJvcihcInhociBwb2xsIGVycm9yXCIsIHhoclN0YXR1cywgY29udGV4dCk7XG4gICAgfSk7XG4gICAgdGhpcy5wb2xsWGhyID0gcmVxO1xuICB9XG59XG5leHBvcnQgbGV0IFJlcXVlc3QgPSAvKiNfX1BVUkVfXyovKCgpID0+IHtcbiAgY2xhc3MgUmVxdWVzdCBleHRlbmRzIEVtaXR0ZXIge1xuICAgIC8qKlxuICAgICAqIFJlcXVlc3QgY29uc3RydWN0b3JcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAgICogQHBhY2thZ2VcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihjcmVhdGVSZXF1ZXN0LCB1cmksIG9wdHMpIHtcbiAgICAgIHN1cGVyKCk7XG4gICAgICB0aGlzLmNyZWF0ZVJlcXVlc3QgPSBjcmVhdGVSZXF1ZXN0O1xuICAgICAgaW5zdGFsbFRpbWVyRnVuY3Rpb25zKHRoaXMsIG9wdHMpO1xuICAgICAgdGhpcy5fb3B0cyA9IG9wdHM7XG4gICAgICB0aGlzLl9tZXRob2QgPSBvcHRzLm1ldGhvZCB8fCBcIkdFVFwiO1xuICAgICAgdGhpcy5fdXJpID0gdXJpO1xuICAgICAgdGhpcy5fZGF0YSA9IHVuZGVmaW5lZCAhPT0gb3B0cy5kYXRhID8gb3B0cy5kYXRhIDogbnVsbDtcbiAgICAgIHRoaXMuX2NyZWF0ZSgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIHRoZSBYSFIgb2JqZWN0IGFuZCBzZW5kcyB0aGUgcmVxdWVzdC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgX2NyZWF0ZSgpIHtcbiAgICAgIHZhciBfYTtcbiAgICAgIGNvbnN0IG9wdHMgPSBwaWNrKHRoaXMuX29wdHMsIFwiYWdlbnRcIiwgXCJwZnhcIiwgXCJrZXlcIiwgXCJwYXNzcGhyYXNlXCIsIFwiY2VydFwiLCBcImNhXCIsIFwiY2lwaGVyc1wiLCBcInJlamVjdFVuYXV0aG9yaXplZFwiLCBcImF1dG9VbnJlZlwiKTtcbiAgICAgIG9wdHMueGRvbWFpbiA9ICEhdGhpcy5fb3B0cy54ZDtcbiAgICAgIGNvbnN0IHhociA9IHRoaXMuX3hociA9IHRoaXMuY3JlYXRlUmVxdWVzdChvcHRzKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHhoci5vcGVuKHRoaXMuX21ldGhvZCwgdGhpcy5fdXJpLCB0cnVlKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAodGhpcy5fb3B0cy5leHRyYUhlYWRlcnMpIHtcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgIHhoci5zZXREaXNhYmxlSGVhZGVyQ2hlY2sgJiYgeGhyLnNldERpc2FibGVIZWFkZXJDaGVjayh0cnVlKTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgaW4gdGhpcy5fb3B0cy5leHRyYUhlYWRlcnMpIHtcbiAgICAgICAgICAgICAgaWYgKHRoaXMuX29wdHMuZXh0cmFIZWFkZXJzLmhhc093blByb3BlcnR5KGkpKSB7XG4gICAgICAgICAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoaSwgdGhpcy5fb3B0cy5leHRyYUhlYWRlcnNbaV0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlKSB7fVxuICAgICAgICBpZiAoXCJQT1NUXCIgPT09IHRoaXMuX21ldGhvZCkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihcIkNvbnRlbnQtdHlwZVwiLCBcInRleHQvcGxhaW47Y2hhcnNldD1VVEYtOFwiKTtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7fVxuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoXCJBY2NlcHRcIiwgXCIqLypcIik7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgICAgIChfYSA9IHRoaXMuX29wdHMuY29va2llSmFyKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuYWRkQ29va2llcyh4aHIpO1xuICAgICAgICAvLyBpZTYgY2hlY2tcbiAgICAgICAgaWYgKFwid2l0aENyZWRlbnRpYWxzXCIgaW4geGhyKSB7XG4gICAgICAgICAgeGhyLndpdGhDcmVkZW50aWFscyA9IHRoaXMuX29wdHMud2l0aENyZWRlbnRpYWxzO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9vcHRzLnJlcXVlc3RUaW1lb3V0KSB7XG4gICAgICAgICAgeGhyLnRpbWVvdXQgPSB0aGlzLl9vcHRzLnJlcXVlc3RUaW1lb3V0O1xuICAgICAgICB9XG4gICAgICAgIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSAoKSA9PiB7XG4gICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgIGlmICh4aHIucmVhZHlTdGF0ZSA9PT0gMykge1xuICAgICAgICAgICAgKF9hID0gdGhpcy5fb3B0cy5jb29raWVKYXIpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5wYXJzZUNvb2tpZXMoXG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICB4aHIuZ2V0UmVzcG9uc2VIZWFkZXIoXCJzZXQtY29va2llXCIpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKDQgIT09IHhoci5yZWFkeVN0YXRlKSByZXR1cm47XG4gICAgICAgICAgaWYgKDIwMCA9PT0geGhyLnN0YXR1cyB8fCAxMjIzID09PSB4aHIuc3RhdHVzKSB7XG4gICAgICAgICAgICB0aGlzLl9vbkxvYWQoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gbWFrZSBzdXJlIHRoZSBgZXJyb3JgIGV2ZW50IGhhbmRsZXIgdGhhdCdzIHVzZXItc2V0XG4gICAgICAgICAgICAvLyBkb2VzIG5vdCB0aHJvdyBpbiB0aGUgc2FtZSB0aWNrIGFuZCBnZXRzIGNhdWdodCBoZXJlXG4gICAgICAgICAgICB0aGlzLnNldFRpbWVvdXRGbigoKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuX29uRXJyb3IodHlwZW9mIHhoci5zdGF0dXMgPT09IFwibnVtYmVyXCIgPyB4aHIuc3RhdHVzIDogMCk7XG4gICAgICAgICAgICB9LCAwKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHhoci5zZW5kKHRoaXMuX2RhdGEpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyBOZWVkIHRvIGRlZmVyIHNpbmNlIC5jcmVhdGUoKSBpcyBjYWxsZWQgZGlyZWN0bHkgZnJvbSB0aGUgY29uc3RydWN0b3JcbiAgICAgICAgLy8gYW5kIHRodXMgdGhlICdlcnJvcicgZXZlbnQgY2FuIG9ubHkgYmUgb25seSBib3VuZCAqYWZ0ZXIqIHRoaXMgZXhjZXB0aW9uXG4gICAgICAgIC8vIG9jY3Vycy4gIFRoZXJlZm9yZSwgYWxzbywgd2UgY2Fubm90IHRocm93IGhlcmUgYXQgYWxsLlxuICAgICAgICB0aGlzLnNldFRpbWVvdXRGbigoKSA9PiB7XG4gICAgICAgICAgdGhpcy5fb25FcnJvcihlKTtcbiAgICAgICAgfSwgMCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgdGhpcy5faW5kZXggPSBSZXF1ZXN0LnJlcXVlc3RzQ291bnQrKztcbiAgICAgICAgUmVxdWVzdC5yZXF1ZXN0c1t0aGlzLl9pbmRleF0gPSB0aGlzO1xuICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBDYWxsZWQgdXBvbiBlcnJvci5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgX29uRXJyb3IoZXJyKSB7XG4gICAgICB0aGlzLmVtaXRSZXNlcnZlZChcImVycm9yXCIsIGVyciwgdGhpcy5feGhyKTtcbiAgICAgIHRoaXMuX2NsZWFudXAodHJ1ZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENsZWFucyB1cCBob3VzZS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgX2NsZWFudXAoZnJvbUVycm9yKSB7XG4gICAgICBpZiAoXCJ1bmRlZmluZWRcIiA9PT0gdHlwZW9mIHRoaXMuX3hociB8fCBudWxsID09PSB0aGlzLl94aHIpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5feGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGVtcHR5O1xuICAgICAgaWYgKGZyb21FcnJvcikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHRoaXMuX3hoci5hYm9ydCgpO1xuICAgICAgICB9IGNhdGNoIChlKSB7fVxuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBkb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICBkZWxldGUgUmVxdWVzdC5yZXF1ZXN0c1t0aGlzLl9pbmRleF07XG4gICAgICB9XG4gICAgICB0aGlzLl94aHIgPSBudWxsO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDYWxsZWQgdXBvbiBsb2FkLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBfb25Mb2FkKCkge1xuICAgICAgY29uc3QgZGF0YSA9IHRoaXMuX3hoci5yZXNwb25zZVRleHQ7XG4gICAgICBpZiAoZGF0YSAhPT0gbnVsbCkge1xuICAgICAgICB0aGlzLmVtaXRSZXNlcnZlZChcImRhdGFcIiwgZGF0YSk7XG4gICAgICAgIHRoaXMuZW1pdFJlc2VydmVkKFwic3VjY2Vzc1wiKTtcbiAgICAgICAgdGhpcy5fY2xlYW51cCgpO1xuICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBBYm9ydHMgdGhlIHJlcXVlc3QuXG4gICAgICpcbiAgICAgKiBAcGFja2FnZVxuICAgICAqL1xuICAgIGFib3J0KCkge1xuICAgICAgdGhpcy5fY2xlYW51cCgpO1xuICAgIH1cbiAgfVxuICBSZXF1ZXN0LnJlcXVlc3RzQ291bnQgPSAwO1xuICBSZXF1ZXN0LnJlcXVlc3RzID0ge307XG4gIC8qKlxuICAgKiBBYm9ydHMgcGVuZGluZyByZXF1ZXN0cyB3aGVuIHVubG9hZGluZyB0aGUgd2luZG93LiBUaGlzIGlzIG5lZWRlZCB0byBwcmV2ZW50XG4gICAqIG1lbW9yeSBsZWFrcyAoZS5nLiB3aGVuIHVzaW5nIElFKSBhbmQgdG8gZW5zdXJlIHRoYXQgbm8gc3B1cmlvdXMgZXJyb3IgaXNcbiAgICogZW1pdHRlZC5cbiAgICovXG4gIHJldHVybiBSZXF1ZXN0O1xufSkoKTtcbmlmICh0eXBlb2YgZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgLy8gQHRzLWlnbm9yZVxuICBpZiAodHlwZW9mIGF0dGFjaEV2ZW50ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgYXR0YWNoRXZlbnQoXCJvbnVubG9hZFwiLCB1bmxvYWRIYW5kbGVyKTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgYWRkRXZlbnRMaXN0ZW5lciA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgY29uc3QgdGVybWluYXRpb25FdmVudCA9IFwib25wYWdlaGlkZVwiIGluIGdsb2JhbFRoaXMgPyBcInBhZ2VoaWRlXCIgOiBcInVubG9hZFwiO1xuICAgIGFkZEV2ZW50TGlzdGVuZXIodGVybWluYXRpb25FdmVudCwgdW5sb2FkSGFuZGxlciwgZmFsc2UpO1xuICB9XG59XG5mdW5jdGlvbiB1bmxvYWRIYW5kbGVyKCkge1xuICBmb3IgKGxldCBpIGluIFJlcXVlc3QucmVxdWVzdHMpIHtcbiAgICBpZiAoUmVxdWVzdC5yZXF1ZXN0cy5oYXNPd25Qcm9wZXJ0eShpKSkge1xuICAgICAgUmVxdWVzdC5yZXF1ZXN0c1tpXS5hYm9ydCgpO1xuICAgIH1cbiAgfVxufVxuY29uc3QgaGFzWEhSMiA9IGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgeGhyID0gbmV3UmVxdWVzdCh7XG4gICAgeGRvbWFpbjogZmFsc2VcbiAgfSk7XG4gIHJldHVybiB4aHIgJiYgeGhyLnJlc3BvbnNlVHlwZSAhPT0gbnVsbDtcbn0oKTtcbi8qKlxuICogSFRUUCBsb25nLXBvbGxpbmcgYmFzZWQgb24gdGhlIGJ1aWx0LWluIGBYTUxIdHRwUmVxdWVzdGAgb2JqZWN0LlxuICpcbiAqIFVzYWdlOiBicm93c2VyXG4gKlxuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvWE1MSHR0cFJlcXVlc3RcbiAqL1xuZXhwb3J0IGNsYXNzIFhIUiBleHRlbmRzIEJhc2VYSFIge1xuICBjb25zdHJ1Y3RvcihvcHRzKSB7XG4gICAgc3VwZXIob3B0cyk7XG4gICAgY29uc3QgZm9yY2VCYXNlNjQgPSBvcHRzICYmIG9wdHMuZm9yY2VCYXNlNjQ7XG4gICAgdGhpcy5zdXBwb3J0c0JpbmFyeSA9IGhhc1hIUjIgJiYgIWZvcmNlQmFzZTY0O1xuICB9XG4gIHJlcXVlc3Qob3B0cyA9IHt9KSB7XG4gICAgT2JqZWN0LmFzc2lnbihvcHRzLCB7XG4gICAgICB4ZDogdGhpcy54ZFxuICAgIH0sIHRoaXMub3B0cyk7XG4gICAgcmV0dXJuIG5ldyBSZXF1ZXN0KG5ld1JlcXVlc3QsIHRoaXMudXJpKCksIG9wdHMpO1xuICB9XG59XG5mdW5jdGlvbiBuZXdSZXF1ZXN0KG9wdHMpIHtcbiAgY29uc3QgeGRvbWFpbiA9IG9wdHMueGRvbWFpbjtcbiAgLy8gWE1MSHR0cFJlcXVlc3QgY2FuIGJlIGRpc2FibGVkIG9uIElFXG4gIHRyeSB7XG4gICAgaWYgKFwidW5kZWZpbmVkXCIgIT09IHR5cGVvZiBYTUxIdHRwUmVxdWVzdCAmJiAoIXhkb21haW4gfHwgaGFzQ09SUykpIHtcbiAgICAgIHJldHVybiBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHt9XG4gIGlmICgheGRvbWFpbikge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gbmV3IGdsb2JhbFRoaXNbW1wiQWN0aXZlXCJdLmNvbmNhdChcIk9iamVjdFwiKS5qb2luKFwiWFwiKV0oXCJNaWNyb3NvZnQuWE1MSFRUUFwiKTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICB9XG59IiwiaW1wb3J0IHsgVHJhbnNwb3J0IH0gZnJvbSBcIi4uL3RyYW5zcG9ydC5qc1wiO1xuaW1wb3J0IHsgcGljaywgcmFuZG9tU3RyaW5nIH0gZnJvbSBcIi4uL3V0aWwuanNcIjtcbmltcG9ydCB7IGVuY29kZVBhY2tldCB9IGZyb20gXCJlbmdpbmUuaW8tcGFyc2VyXCI7XG5pbXBvcnQgeyBnbG9iYWxUaGlzU2hpbSBhcyBnbG9iYWxUaGlzLCBuZXh0VGljayB9IGZyb20gXCIuLi9nbG9iYWxzLm5vZGUuanNcIjtcbi8vIGRldGVjdCBSZWFjdE5hdGl2ZSBlbnZpcm9ubWVudFxuY29uc3QgaXNSZWFjdE5hdGl2ZSA9IHR5cGVvZiBuYXZpZ2F0b3IgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIG5hdmlnYXRvci5wcm9kdWN0ID09PSBcInN0cmluZ1wiICYmIG5hdmlnYXRvci5wcm9kdWN0LnRvTG93ZXJDYXNlKCkgPT09IFwicmVhY3RuYXRpdmVcIjtcbmV4cG9ydCBjbGFzcyBCYXNlV1MgZXh0ZW5kcyBUcmFuc3BvcnQge1xuICBnZXQgbmFtZSgpIHtcbiAgICByZXR1cm4gXCJ3ZWJzb2NrZXRcIjtcbiAgfVxuICBkb09wZW4oKSB7XG4gICAgY29uc3QgdXJpID0gdGhpcy51cmkoKTtcbiAgICBjb25zdCBwcm90b2NvbHMgPSB0aGlzLm9wdHMucHJvdG9jb2xzO1xuICAgIC8vIFJlYWN0IE5hdGl2ZSBvbmx5IHN1cHBvcnRzIHRoZSAnaGVhZGVycycgb3B0aW9uLCBhbmQgd2lsbCBwcmludCBhIHdhcm5pbmcgaWYgYW55dGhpbmcgZWxzZSBpcyBwYXNzZWRcbiAgICBjb25zdCBvcHRzID0gaXNSZWFjdE5hdGl2ZSA/IHt9IDogcGljayh0aGlzLm9wdHMsIFwiYWdlbnRcIiwgXCJwZXJNZXNzYWdlRGVmbGF0ZVwiLCBcInBmeFwiLCBcImtleVwiLCBcInBhc3NwaHJhc2VcIiwgXCJjZXJ0XCIsIFwiY2FcIiwgXCJjaXBoZXJzXCIsIFwicmVqZWN0VW5hdXRob3JpemVkXCIsIFwibG9jYWxBZGRyZXNzXCIsIFwicHJvdG9jb2xWZXJzaW9uXCIsIFwib3JpZ2luXCIsIFwibWF4UGF5bG9hZFwiLCBcImZhbWlseVwiLCBcImNoZWNrU2VydmVySWRlbnRpdHlcIik7XG4gICAgaWYgKHRoaXMub3B0cy5leHRyYUhlYWRlcnMpIHtcbiAgICAgIG9wdHMuaGVhZGVycyA9IHRoaXMub3B0cy5leHRyYUhlYWRlcnM7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICB0aGlzLndzID0gdGhpcy5jcmVhdGVTb2NrZXQodXJpLCBwcm90b2NvbHMsIG9wdHMpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmV0dXJuIHRoaXMuZW1pdFJlc2VydmVkKFwiZXJyb3JcIiwgZXJyKTtcbiAgICB9XG4gICAgdGhpcy53cy5iaW5hcnlUeXBlID0gdGhpcy5zb2NrZXQuYmluYXJ5VHlwZTtcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXJzKCk7XG4gIH1cbiAgLyoqXG4gICAqIEFkZHMgZXZlbnQgbGlzdGVuZXJzIHRvIHRoZSBzb2NrZXRcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGFkZEV2ZW50TGlzdGVuZXJzKCkge1xuICAgIHRoaXMud3Mub25vcGVuID0gKCkgPT4ge1xuICAgICAgaWYgKHRoaXMub3B0cy5hdXRvVW5yZWYpIHtcbiAgICAgICAgdGhpcy53cy5fc29ja2V0LnVucmVmKCk7XG4gICAgICB9XG4gICAgICB0aGlzLm9uT3BlbigpO1xuICAgIH07XG4gICAgdGhpcy53cy5vbmNsb3NlID0gY2xvc2VFdmVudCA9PiB0aGlzLm9uQ2xvc2Uoe1xuICAgICAgZGVzY3JpcHRpb246IFwid2Vic29ja2V0IGNvbm5lY3Rpb24gY2xvc2VkXCIsXG4gICAgICBjb250ZXh0OiBjbG9zZUV2ZW50XG4gICAgfSk7XG4gICAgdGhpcy53cy5vbm1lc3NhZ2UgPSBldiA9PiB0aGlzLm9uRGF0YShldi5kYXRhKTtcbiAgICB0aGlzLndzLm9uZXJyb3IgPSBlID0+IHRoaXMub25FcnJvcihcIndlYnNvY2tldCBlcnJvclwiLCBlKTtcbiAgfVxuICB3cml0ZShwYWNrZXRzKSB7XG4gICAgdGhpcy53cml0YWJsZSA9IGZhbHNlO1xuICAgIC8vIGVuY29kZVBhY2tldCBlZmZpY2llbnQgYXMgaXQgdXNlcyBXUyBmcmFtaW5nXG4gICAgLy8gbm8gbmVlZCBmb3IgZW5jb2RlUGF5bG9hZFxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFja2V0cy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgcGFja2V0ID0gcGFja2V0c1tpXTtcbiAgICAgIGNvbnN0IGxhc3RQYWNrZXQgPSBpID09PSBwYWNrZXRzLmxlbmd0aCAtIDE7XG4gICAgICBlbmNvZGVQYWNrZXQocGFja2V0LCB0aGlzLnN1cHBvcnRzQmluYXJ5LCBkYXRhID0+IHtcbiAgICAgICAgLy8gU29tZXRpbWVzIHRoZSB3ZWJzb2NrZXQgaGFzIGFscmVhZHkgYmVlbiBjbG9zZWQgYnV0IHRoZSBicm93c2VyIGRpZG4ndFxuICAgICAgICAvLyBoYXZlIGEgY2hhbmNlIG9mIGluZm9ybWluZyB1cyBhYm91dCBpdCB5ZXQsIGluIHRoYXQgY2FzZSBzZW5kIHdpbGxcbiAgICAgICAgLy8gdGhyb3cgYW4gZXJyb3JcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB0aGlzLmRvV3JpdGUocGFja2V0LCBkYXRhKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge31cbiAgICAgICAgaWYgKGxhc3RQYWNrZXQpIHtcbiAgICAgICAgICAvLyBmYWtlIGRyYWluXG4gICAgICAgICAgLy8gZGVmZXIgdG8gbmV4dCB0aWNrIHRvIGFsbG93IFNvY2tldCB0byBjbGVhciB3cml0ZUJ1ZmZlclxuICAgICAgICAgIG5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMud3JpdGFibGUgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5lbWl0UmVzZXJ2ZWQoXCJkcmFpblwiKTtcbiAgICAgICAgICB9LCB0aGlzLnNldFRpbWVvdXRGbik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICBkb0Nsb3NlKCkge1xuICAgIGlmICh0eXBlb2YgdGhpcy53cyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgdGhpcy53cy5vbmVycm9yID0gKCkgPT4ge307XG4gICAgICB0aGlzLndzLmNsb3NlKCk7XG4gICAgICB0aGlzLndzID0gbnVsbDtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIEdlbmVyYXRlcyB1cmkgZm9yIGNvbm5lY3Rpb24uXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICB1cmkoKSB7XG4gICAgY29uc3Qgc2NoZW1hID0gdGhpcy5vcHRzLnNlY3VyZSA/IFwid3NzXCIgOiBcIndzXCI7XG4gICAgY29uc3QgcXVlcnkgPSB0aGlzLnF1ZXJ5IHx8IHt9O1xuICAgIC8vIGFwcGVuZCB0aW1lc3RhbXAgdG8gVVJJXG4gICAgaWYgKHRoaXMub3B0cy50aW1lc3RhbXBSZXF1ZXN0cykge1xuICAgICAgcXVlcnlbdGhpcy5vcHRzLnRpbWVzdGFtcFBhcmFtXSA9IHJhbmRvbVN0cmluZygpO1xuICAgIH1cbiAgICAvLyBjb21tdW5pY2F0ZSBiaW5hcnkgc3VwcG9ydCBjYXBhYmlsaXRpZXNcbiAgICBpZiAoIXRoaXMuc3VwcG9ydHNCaW5hcnkpIHtcbiAgICAgIHF1ZXJ5LmI2NCA9IDE7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNyZWF0ZVVyaShzY2hlbWEsIHF1ZXJ5KTtcbiAgfVxufVxuY29uc3QgV2ViU29ja2V0Q3RvciA9IGdsb2JhbFRoaXMuV2ViU29ja2V0IHx8IGdsb2JhbFRoaXMuTW96V2ViU29ja2V0O1xuLyoqXG4gKiBXZWJTb2NrZXQgdHJhbnNwb3J0IGJhc2VkIG9uIHRoZSBidWlsdC1pbiBgV2ViU29ja2V0YCBvYmplY3QuXG4gKlxuICogVXNhZ2U6IGJyb3dzZXIsIE5vZGUuanMgKHNpbmNlIHYyMSksIERlbm8sIEJ1blxuICpcbiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1dlYlNvY2tldFxuICogQHNlZSBodHRwczovL2Nhbml1c2UuY29tL21kbi1hcGlfd2Vic29ja2V0XG4gKiBAc2VlIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvZ2xvYmFscy5odG1sI3dlYnNvY2tldFxuICovXG5leHBvcnQgY2xhc3MgV1MgZXh0ZW5kcyBCYXNlV1Mge1xuICBjcmVhdGVTb2NrZXQodXJpLCBwcm90b2NvbHMsIG9wdHMpIHtcbiAgICByZXR1cm4gIWlzUmVhY3ROYXRpdmUgPyBwcm90b2NvbHMgPyBuZXcgV2ViU29ja2V0Q3Rvcih1cmksIHByb3RvY29scykgOiBuZXcgV2ViU29ja2V0Q3Rvcih1cmkpIDogbmV3IFdlYlNvY2tldEN0b3IodXJpLCBwcm90b2NvbHMsIG9wdHMpO1xuICB9XG4gIGRvV3JpdGUoX3BhY2tldCwgZGF0YSkge1xuICAgIHRoaXMud3Muc2VuZChkYXRhKTtcbiAgfVxufSIsImltcG9ydCB7IFRyYW5zcG9ydCB9IGZyb20gXCIuLi90cmFuc3BvcnQuanNcIjtcbmltcG9ydCB7IG5leHRUaWNrIH0gZnJvbSBcIi4uL2dsb2JhbHMubm9kZS5qc1wiO1xuaW1wb3J0IHsgY3JlYXRlUGFja2V0RGVjb2RlclN0cmVhbSwgY3JlYXRlUGFja2V0RW5jb2RlclN0cmVhbSB9IGZyb20gXCJlbmdpbmUuaW8tcGFyc2VyXCI7XG4vKipcbiAqIFdlYlRyYW5zcG9ydCB0cmFuc3BvcnQgYmFzZWQgb24gdGhlIGJ1aWx0LWluIGBXZWJUcmFuc3BvcnRgIG9iamVjdC5cbiAqXG4gKiBVc2FnZTogYnJvd3NlciwgTm9kZS5qcyAod2l0aCB0aGUgYEBmYWlscy1jb21wb25lbnRzL3dlYnRyYW5zcG9ydGAgcGFja2FnZSlcbiAqXG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9XZWJUcmFuc3BvcnRcbiAqIEBzZWUgaHR0cHM6Ly9jYW5pdXNlLmNvbS93ZWJ0cmFuc3BvcnRcbiAqL1xuZXhwb3J0IGNsYXNzIFdUIGV4dGVuZHMgVHJhbnNwb3J0IHtcbiAgZ2V0IG5hbWUoKSB7XG4gICAgcmV0dXJuIFwid2VidHJhbnNwb3J0XCI7XG4gIH1cbiAgZG9PcGVuKCkge1xuICAgIHRyeSB7XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICB0aGlzLl90cmFuc3BvcnQgPSBuZXcgV2ViVHJhbnNwb3J0KHRoaXMuY3JlYXRlVXJpKFwiaHR0cHNcIiksIHRoaXMub3B0cy50cmFuc3BvcnRPcHRpb25zW3RoaXMubmFtZV0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmV0dXJuIHRoaXMuZW1pdFJlc2VydmVkKFwiZXJyb3JcIiwgZXJyKTtcbiAgICB9XG4gICAgdGhpcy5fdHJhbnNwb3J0LmNsb3NlZC50aGVuKCgpID0+IHtcbiAgICAgIHRoaXMub25DbG9zZSgpO1xuICAgIH0pLmNhdGNoKGVyciA9PiB7XG4gICAgICB0aGlzLm9uRXJyb3IoXCJ3ZWJ0cmFuc3BvcnQgZXJyb3JcIiwgZXJyKTtcbiAgICB9KTtcbiAgICAvLyBub3RlOiB3ZSBjb3VsZCBoYXZlIHVzZWQgYXN5bmMvYXdhaXQsIGJ1dCB0aGF0IHdvdWxkIHJlcXVpcmUgc29tZSBhZGRpdGlvbmFsIHBvbHlmaWxsc1xuICAgIHRoaXMuX3RyYW5zcG9ydC5yZWFkeS50aGVuKCgpID0+IHtcbiAgICAgIHRoaXMuX3RyYW5zcG9ydC5jcmVhdGVCaWRpcmVjdGlvbmFsU3RyZWFtKCkudGhlbihzdHJlYW0gPT4ge1xuICAgICAgICBjb25zdCBkZWNvZGVyU3RyZWFtID0gY3JlYXRlUGFja2V0RGVjb2RlclN0cmVhbShOdW1iZXIuTUFYX1NBRkVfSU5URUdFUiwgdGhpcy5zb2NrZXQuYmluYXJ5VHlwZSk7XG4gICAgICAgIGNvbnN0IHJlYWRlciA9IHN0cmVhbS5yZWFkYWJsZS5waXBlVGhyb3VnaChkZWNvZGVyU3RyZWFtKS5nZXRSZWFkZXIoKTtcbiAgICAgICAgY29uc3QgZW5jb2RlclN0cmVhbSA9IGNyZWF0ZVBhY2tldEVuY29kZXJTdHJlYW0oKTtcbiAgICAgICAgZW5jb2RlclN0cmVhbS5yZWFkYWJsZS5waXBlVG8oc3RyZWFtLndyaXRhYmxlKTtcbiAgICAgICAgdGhpcy5fd3JpdGVyID0gZW5jb2RlclN0cmVhbS53cml0YWJsZS5nZXRXcml0ZXIoKTtcbiAgICAgICAgY29uc3QgcmVhZCA9ICgpID0+IHtcbiAgICAgICAgICByZWFkZXIucmVhZCgpLnRoZW4oKHtcbiAgICAgICAgICAgIGRvbmUsXG4gICAgICAgICAgICB2YWx1ZVxuICAgICAgICAgIH0pID0+IHtcbiAgICAgICAgICAgIGlmIChkb25lKSB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMub25QYWNrZXQodmFsdWUpO1xuICAgICAgICAgICAgcmVhZCgpO1xuICAgICAgICAgIH0pLmNhdGNoKGVyciA9PiB7fSk7XG4gICAgICAgIH07XG4gICAgICAgIHJlYWQoKTtcbiAgICAgICAgY29uc3QgcGFja2V0ID0ge1xuICAgICAgICAgIHR5cGU6IFwib3BlblwiXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0aGlzLnF1ZXJ5LnNpZCkge1xuICAgICAgICAgIHBhY2tldC5kYXRhID0gYHtcInNpZFwiOlwiJHt0aGlzLnF1ZXJ5LnNpZH1cIn1gO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3dyaXRlci53cml0ZShwYWNrZXQpLnRoZW4oKCkgPT4gdGhpcy5vbk9wZW4oKSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuICB3cml0ZShwYWNrZXRzKSB7XG4gICAgdGhpcy53cml0YWJsZSA9IGZhbHNlO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFja2V0cy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgcGFja2V0ID0gcGFja2V0c1tpXTtcbiAgICAgIGNvbnN0IGxhc3RQYWNrZXQgPSBpID09PSBwYWNrZXRzLmxlbmd0aCAtIDE7XG4gICAgICB0aGlzLl93cml0ZXIud3JpdGUocGFja2V0KS50aGVuKCgpID0+IHtcbiAgICAgICAgaWYgKGxhc3RQYWNrZXQpIHtcbiAgICAgICAgICBuZXh0VGljaygoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLndyaXRhYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuZW1pdFJlc2VydmVkKFwiZHJhaW5cIik7XG4gICAgICAgICAgfSwgdGhpcy5zZXRUaW1lb3V0Rm4pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgZG9DbG9zZSgpIHtcbiAgICB2YXIgX2E7XG4gICAgKF9hID0gdGhpcy5fdHJhbnNwb3J0KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2xvc2UoKTtcbiAgfVxufSIsImltcG9ydCB7IFhIUiB9IGZyb20gXCIuL3BvbGxpbmcteGhyLm5vZGUuanNcIjtcbmltcG9ydCB7IFdTIH0gZnJvbSBcIi4vd2Vic29ja2V0Lm5vZGUuanNcIjtcbmltcG9ydCB7IFdUIH0gZnJvbSBcIi4vd2VidHJhbnNwb3J0LmpzXCI7XG5leHBvcnQgY29uc3QgdHJhbnNwb3J0cyA9IHtcbiAgd2Vic29ja2V0OiBXUyxcbiAgd2VidHJhbnNwb3J0OiBXVCxcbiAgcG9sbGluZzogWEhSXG59OyIsIi8vIGltcG9ydGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2dhbGtuL3BhcnNldXJpXG4vKipcbiAqIFBhcnNlcyBhIFVSSVxuICpcbiAqIE5vdGU6IHdlIGNvdWxkIGFsc28gaGF2ZSB1c2VkIHRoZSBidWlsdC1pbiBVUkwgb2JqZWN0LCBidXQgaXQgaXNuJ3Qgc3VwcG9ydGVkIG9uIGFsbCBwbGF0Zm9ybXMuXG4gKlxuICogU2VlOlxuICogLSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvVVJMXG4gKiAtIGh0dHBzOi8vY2FuaXVzZS5jb20vdXJsXG4gKiAtIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmMzOTg2I2FwcGVuZGl4LUJcbiAqXG4gKiBIaXN0b3J5IG9mIHRoZSBwYXJzZSgpIG1ldGhvZDpcbiAqIC0gZmlyc3QgY29tbWl0OiBodHRwczovL2dpdGh1Yi5jb20vc29ja2V0aW8vc29ja2V0LmlvLWNsaWVudC9jb21taXQvNGVlMWQ1ZDk0YjM5MDZhOWMwNTJiNDU5ZjFhODE4YjE1ZjM4ZjkxY1xuICogLSBleHBvcnQgaW50byBpdHMgb3duIG1vZHVsZTogaHR0cHM6Ly9naXRodWIuY29tL3NvY2tldGlvL2VuZ2luZS5pby1jbGllbnQvY29tbWl0L2RlMmM1NjFlNDU2NGVmZWI3OGYxYmRiMWJhMzllZjgxYjI4MjJjYjNcbiAqIC0gcmVpbXBvcnQ6IGh0dHBzOi8vZ2l0aHViLmNvbS9zb2NrZXRpby9lbmdpbmUuaW8tY2xpZW50L2NvbW1pdC9kZjMyMjc3YzNmNmQ2MjJlZWM1ZWQwOWY0OTNjYWUzZjMzOTFkMjQyXG4gKlxuICogQGF1dGhvciBTdGV2ZW4gTGV2aXRoYW4gPHN0ZXZlbmxldml0aGFuLmNvbT4gKE1JVCBsaWNlbnNlKVxuICogQGFwaSBwcml2YXRlXG4gKi9cbmNvbnN0IHJlID0gL14oPzooPyFbXjpAXFwvPyNdKzpbXjpAXFwvXSpAKShodHRwfGh0dHBzfHdzfHdzcyk6XFwvXFwvKT8oKD86KChbXjpAXFwvPyNdKikoPzo6KFteOkBcXC8/I10qKSk/KT9AKT8oKD86W2EtZjAtOV17MCw0fTopezIsN31bYS1mMC05XXswLDR9fFteOlxcLz8jXSopKD86OihcXGQqKSk/KSgoKFxcLyg/OltePyNdKD8hW14/I1xcL10qXFwuW14/I1xcLy5dKyg/Ols/I118JCkpKSpcXC8/KT8oW14/I1xcL10qKSkoPzpcXD8oW14jXSopKT8oPzojKC4qKSk/KS87XG5jb25zdCBwYXJ0cyA9IFsnc291cmNlJywgJ3Byb3RvY29sJywgJ2F1dGhvcml0eScsICd1c2VySW5mbycsICd1c2VyJywgJ3Bhc3N3b3JkJywgJ2hvc3QnLCAncG9ydCcsICdyZWxhdGl2ZScsICdwYXRoJywgJ2RpcmVjdG9yeScsICdmaWxlJywgJ3F1ZXJ5JywgJ2FuY2hvciddO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlKHN0cikge1xuICBpZiAoc3RyLmxlbmd0aCA+IDgwMDApIHtcbiAgICB0aHJvdyBcIlVSSSB0b28gbG9uZ1wiO1xuICB9XG4gIGNvbnN0IHNyYyA9IHN0cixcbiAgICBiID0gc3RyLmluZGV4T2YoJ1snKSxcbiAgICBlID0gc3RyLmluZGV4T2YoJ10nKTtcbiAgaWYgKGIgIT0gLTEgJiYgZSAhPSAtMSkge1xuICAgIHN0ciA9IHN0ci5zdWJzdHJpbmcoMCwgYikgKyBzdHIuc3Vic3RyaW5nKGIsIGUpLnJlcGxhY2UoLzovZywgJzsnKSArIHN0ci5zdWJzdHJpbmcoZSwgc3RyLmxlbmd0aCk7XG4gIH1cbiAgbGV0IG0gPSByZS5leGVjKHN0ciB8fCAnJyksXG4gICAgdXJpID0ge30sXG4gICAgaSA9IDE0O1xuICB3aGlsZSAoaS0tKSB7XG4gICAgdXJpW3BhcnRzW2ldXSA9IG1baV0gfHwgJyc7XG4gIH1cbiAgaWYgKGIgIT0gLTEgJiYgZSAhPSAtMSkge1xuICAgIHVyaS5zb3VyY2UgPSBzcmM7XG4gICAgdXJpLmhvc3QgPSB1cmkuaG9zdC5zdWJzdHJpbmcoMSwgdXJpLmhvc3QubGVuZ3RoIC0gMSkucmVwbGFjZSgvOy9nLCAnOicpO1xuICAgIHVyaS5hdXRob3JpdHkgPSB1cmkuYXV0aG9yaXR5LnJlcGxhY2UoJ1snLCAnJykucmVwbGFjZSgnXScsICcnKS5yZXBsYWNlKC87L2csICc6Jyk7XG4gICAgdXJpLmlwdjZ1cmkgPSB0cnVlO1xuICB9XG4gIHVyaS5wYXRoTmFtZXMgPSBwYXRoTmFtZXModXJpLCB1cmlbJ3BhdGgnXSk7XG4gIHVyaS5xdWVyeUtleSA9IHF1ZXJ5S2V5KHVyaSwgdXJpWydxdWVyeSddKTtcbiAgcmV0dXJuIHVyaTtcbn1cbmZ1bmN0aW9uIHBhdGhOYW1lcyhvYmosIHBhdGgpIHtcbiAgY29uc3QgcmVneCA9IC9cXC97Miw5fS9nLFxuICAgIG5hbWVzID0gcGF0aC5yZXBsYWNlKHJlZ3gsIFwiL1wiKS5zcGxpdChcIi9cIik7XG4gIGlmIChwYXRoLnNsaWNlKDAsIDEpID09ICcvJyB8fCBwYXRoLmxlbmd0aCA9PT0gMCkge1xuICAgIG5hbWVzLnNwbGljZSgwLCAxKTtcbiAgfVxuICBpZiAocGF0aC5zbGljZSgtMSkgPT0gJy8nKSB7XG4gICAgbmFtZXMuc3BsaWNlKG5hbWVzLmxlbmd0aCAtIDEsIDEpO1xuICB9XG4gIHJldHVybiBuYW1lcztcbn1cbmZ1bmN0aW9uIHF1ZXJ5S2V5KHVyaSwgcXVlcnkpIHtcbiAgY29uc3QgZGF0YSA9IHt9O1xuICBxdWVyeS5yZXBsYWNlKC8oPzpefCYpKFteJj1dKik9PyhbXiZdKikvZywgZnVuY3Rpb24gKCQwLCAkMSwgJDIpIHtcbiAgICBpZiAoJDEpIHtcbiAgICAgIGRhdGFbJDFdID0gJDI7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGRhdGE7XG59IiwiaW1wb3J0IHsgdHJhbnNwb3J0cyBhcyBERUZBVUxUX1RSQU5TUE9SVFMgfSBmcm9tIFwiLi90cmFuc3BvcnRzL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBpbnN0YWxsVGltZXJGdW5jdGlvbnMsIGJ5dGVMZW5ndGggfSBmcm9tIFwiLi91dGlsLmpzXCI7XG5pbXBvcnQgeyBkZWNvZGUgfSBmcm9tIFwiLi9jb250cmliL3BhcnNlcXMuanNcIjtcbmltcG9ydCB7IHBhcnNlIH0gZnJvbSBcIi4vY29udHJpYi9wYXJzZXVyaS5qc1wiO1xuaW1wb3J0IHsgRW1pdHRlciB9IGZyb20gXCJAc29ja2V0LmlvL2NvbXBvbmVudC1lbWl0dGVyXCI7XG5pbXBvcnQgeyBwcm90b2NvbCB9IGZyb20gXCJlbmdpbmUuaW8tcGFyc2VyXCI7XG5pbXBvcnQgeyBjcmVhdGVDb29raWVKYXIsIGRlZmF1bHRCaW5hcnlUeXBlLCBuZXh0VGljayB9IGZyb20gXCIuL2dsb2JhbHMubm9kZS5qc1wiO1xuY29uc3Qgd2l0aEV2ZW50TGlzdGVuZXJzID0gdHlwZW9mIGFkZEV2ZW50TGlzdGVuZXIgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgcmVtb3ZlRXZlbnRMaXN0ZW5lciA9PT0gXCJmdW5jdGlvblwiO1xuY29uc3QgT0ZGTElORV9FVkVOVF9MSVNURU5FUlMgPSBbXTtcbmlmICh3aXRoRXZlbnRMaXN0ZW5lcnMpIHtcbiAgLy8gd2l0aGluIGEgU2VydmljZVdvcmtlciwgYW55IGV2ZW50IGhhbmRsZXIgZm9yIHRoZSAnb2ZmbGluZScgZXZlbnQgbXVzdCBiZSBhZGRlZCBvbiB0aGUgaW5pdGlhbCBldmFsdWF0aW9uIG9mIHRoZVxuICAvLyBzY3JpcHQsIHNvIHdlIGNyZWF0ZSBvbmUgc2luZ2xlIGV2ZW50IGxpc3RlbmVyIGhlcmUgd2hpY2ggd2lsbCBmb3J3YXJkIHRoZSBldmVudCB0byB0aGUgc29ja2V0IGluc3RhbmNlc1xuICBhZGRFdmVudExpc3RlbmVyKFwib2ZmbGluZVwiLCAoKSA9PiB7XG4gICAgT0ZGTElORV9FVkVOVF9MSVNURU5FUlMuZm9yRWFjaChsaXN0ZW5lciA9PiBsaXN0ZW5lcigpKTtcbiAgfSwgZmFsc2UpO1xufVxuLyoqXG4gKiBUaGlzIGNsYXNzIHByb3ZpZGVzIGEgV2ViU29ja2V0LWxpa2UgaW50ZXJmYWNlIHRvIGNvbm5lY3QgdG8gYW4gRW5naW5lLklPIHNlcnZlci4gVGhlIGNvbm5lY3Rpb24gd2lsbCBiZSBlc3RhYmxpc2hlZFxuICogd2l0aCBvbmUgb2YgdGhlIGF2YWlsYWJsZSBsb3ctbGV2ZWwgdHJhbnNwb3J0cywgbGlrZSBIVFRQIGxvbmctcG9sbGluZywgV2ViU29ja2V0IG9yIFdlYlRyYW5zcG9ydC5cbiAqXG4gKiBUaGlzIGNsYXNzIGNvbWVzIHdpdGhvdXQgdXBncmFkZSBtZWNoYW5pc20sIHdoaWNoIG1lYW5zIHRoYXQgaXQgd2lsbCBrZWVwIHRoZSBmaXJzdCBsb3ctbGV2ZWwgdHJhbnNwb3J0IHRoYXRcbiAqIHN1Y2Nlc3NmdWxseSBlc3RhYmxpc2hlcyB0aGUgY29ubmVjdGlvbi5cbiAqXG4gKiBJbiBvcmRlciB0byBhbGxvdyB0cmVlLXNoYWtpbmcsIHRoZXJlIGFyZSBubyB0cmFuc3BvcnRzIGluY2x1ZGVkLCB0aGF0J3Mgd2h5IHRoZSBgdHJhbnNwb3J0c2Agb3B0aW9uIGlzIG1hbmRhdG9yeS5cbiAqXG4gKiBAZXhhbXBsZVxuICogaW1wb3J0IHsgU29ja2V0V2l0aG91dFVwZ3JhZGUsIFdlYlNvY2tldCB9IGZyb20gXCJlbmdpbmUuaW8tY2xpZW50XCI7XG4gKlxuICogY29uc3Qgc29ja2V0ID0gbmV3IFNvY2tldFdpdGhvdXRVcGdyYWRlKHtcbiAqICAgdHJhbnNwb3J0czogW1dlYlNvY2tldF1cbiAqIH0pO1xuICpcbiAqIHNvY2tldC5vbihcIm9wZW5cIiwgKCkgPT4ge1xuICogICBzb2NrZXQuc2VuZChcImhlbGxvXCIpO1xuICogfSk7XG4gKlxuICogQHNlZSBTb2NrZXRXaXRoVXBncmFkZVxuICogQHNlZSBTb2NrZXRcbiAqL1xuZXhwb3J0IGxldCBTb2NrZXRXaXRob3V0VXBncmFkZSA9IC8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICBjbGFzcyBTb2NrZXRXaXRob3V0VXBncmFkZSBleHRlbmRzIEVtaXR0ZXIge1xuICAgIC8qKlxuICAgICAqIFNvY2tldCBjb25zdHJ1Y3Rvci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7U3RyaW5nfE9iamVjdH0gdXJpIC0gdXJpIG9yIG9wdGlvbnNcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnNcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3Rvcih1cmksIG9wdHMpIHtcbiAgICAgIHN1cGVyKCk7XG4gICAgICB0aGlzLmJpbmFyeVR5cGUgPSBkZWZhdWx0QmluYXJ5VHlwZTtcbiAgICAgIHRoaXMud3JpdGVCdWZmZXIgPSBbXTtcbiAgICAgIHRoaXMuX3ByZXZCdWZmZXJMZW4gPSAwO1xuICAgICAgdGhpcy5fcGluZ0ludGVydmFsID0gLTE7XG4gICAgICB0aGlzLl9waW5nVGltZW91dCA9IC0xO1xuICAgICAgdGhpcy5fbWF4UGF5bG9hZCA9IC0xO1xuICAgICAgLyoqXG4gICAgICAgKiBUaGUgZXhwaXJhdGlvbiB0aW1lc3RhbXAgb2YgdGhlIHtAbGluayBfcGluZ1RpbWVvdXRUaW1lcn0gb2JqZWN0IGlzIHRyYWNrZWQsIGluIGNhc2UgdGhlIHRpbWVyIGlzIHRocm90dGxlZCBhbmQgdGhlXG4gICAgICAgKiBjYWxsYmFjayBpcyBub3QgZmlyZWQgb24gdGltZS4gVGhpcyBjYW4gaGFwcGVuIGZvciBleGFtcGxlIHdoZW4gYSBsYXB0b3AgaXMgc3VzcGVuZGVkIG9yIHdoZW4gYSBwaG9uZSBpcyBsb2NrZWQuXG4gICAgICAgKi9cbiAgICAgIHRoaXMuX3BpbmdUaW1lb3V0VGltZSA9IEluZmluaXR5O1xuICAgICAgaWYgKHVyaSAmJiBcIm9iamVjdFwiID09PSB0eXBlb2YgdXJpKSB7XG4gICAgICAgIG9wdHMgPSB1cmk7XG4gICAgICAgIHVyaSA9IG51bGw7XG4gICAgICB9XG4gICAgICBpZiAodXJpKSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZFVyaSA9IHBhcnNlKHVyaSk7XG4gICAgICAgIG9wdHMuaG9zdG5hbWUgPSBwYXJzZWRVcmkuaG9zdDtcbiAgICAgICAgb3B0cy5zZWN1cmUgPSBwYXJzZWRVcmkucHJvdG9jb2wgPT09IFwiaHR0cHNcIiB8fCBwYXJzZWRVcmkucHJvdG9jb2wgPT09IFwid3NzXCI7XG4gICAgICAgIG9wdHMucG9ydCA9IHBhcnNlZFVyaS5wb3J0O1xuICAgICAgICBpZiAocGFyc2VkVXJpLnF1ZXJ5KSBvcHRzLnF1ZXJ5ID0gcGFyc2VkVXJpLnF1ZXJ5O1xuICAgICAgfSBlbHNlIGlmIChvcHRzLmhvc3QpIHtcbiAgICAgICAgb3B0cy5ob3N0bmFtZSA9IHBhcnNlKG9wdHMuaG9zdCkuaG9zdDtcbiAgICAgIH1cbiAgICAgIGluc3RhbGxUaW1lckZ1bmN0aW9ucyh0aGlzLCBvcHRzKTtcbiAgICAgIHRoaXMuc2VjdXJlID0gbnVsbCAhPSBvcHRzLnNlY3VyZSA/IG9wdHMuc2VjdXJlIDogdHlwZW9mIGxvY2F0aW9uICE9PSBcInVuZGVmaW5lZFwiICYmIFwiaHR0cHM6XCIgPT09IGxvY2F0aW9uLnByb3RvY29sO1xuICAgICAgaWYgKG9wdHMuaG9zdG5hbWUgJiYgIW9wdHMucG9ydCkge1xuICAgICAgICAvLyBpZiBubyBwb3J0IGlzIHNwZWNpZmllZCBtYW51YWxseSwgdXNlIHRoZSBwcm90b2NvbCBkZWZhdWx0XG4gICAgICAgIG9wdHMucG9ydCA9IHRoaXMuc2VjdXJlID8gXCI0NDNcIiA6IFwiODBcIjtcbiAgICAgIH1cbiAgICAgIHRoaXMuaG9zdG5hbWUgPSBvcHRzLmhvc3RuYW1lIHx8ICh0eXBlb2YgbG9jYXRpb24gIT09IFwidW5kZWZpbmVkXCIgPyBsb2NhdGlvbi5ob3N0bmFtZSA6IFwibG9jYWxob3N0XCIpO1xuICAgICAgdGhpcy5wb3J0ID0gb3B0cy5wb3J0IHx8ICh0eXBlb2YgbG9jYXRpb24gIT09IFwidW5kZWZpbmVkXCIgJiYgbG9jYXRpb24ucG9ydCA/IGxvY2F0aW9uLnBvcnQgOiB0aGlzLnNlY3VyZSA/IFwiNDQzXCIgOiBcIjgwXCIpO1xuICAgICAgdGhpcy50cmFuc3BvcnRzID0gW107XG4gICAgICB0aGlzLl90cmFuc3BvcnRzQnlOYW1lID0ge307XG4gICAgICBvcHRzLnRyYW5zcG9ydHMuZm9yRWFjaCh0ID0+IHtcbiAgICAgICAgY29uc3QgdHJhbnNwb3J0TmFtZSA9IHQucHJvdG90eXBlLm5hbWU7XG4gICAgICAgIHRoaXMudHJhbnNwb3J0cy5wdXNoKHRyYW5zcG9ydE5hbWUpO1xuICAgICAgICB0aGlzLl90cmFuc3BvcnRzQnlOYW1lW3RyYW5zcG9ydE5hbWVdID0gdDtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5vcHRzID0gT2JqZWN0LmFzc2lnbih7XG4gICAgICAgIHBhdGg6IFwiL2VuZ2luZS5pb1wiLFxuICAgICAgICBhZ2VudDogZmFsc2UsXG4gICAgICAgIHdpdGhDcmVkZW50aWFsczogZmFsc2UsXG4gICAgICAgIHVwZ3JhZGU6IHRydWUsXG4gICAgICAgIHRpbWVzdGFtcFBhcmFtOiBcInRcIixcbiAgICAgICAgcmVtZW1iZXJVcGdyYWRlOiBmYWxzZSxcbiAgICAgICAgYWRkVHJhaWxpbmdTbGFzaDogdHJ1ZSxcbiAgICAgICAgcmVqZWN0VW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgICBwZXJNZXNzYWdlRGVmbGF0ZToge1xuICAgICAgICAgIHRocmVzaG9sZDogMTAyNFxuICAgICAgICB9LFxuICAgICAgICB0cmFuc3BvcnRPcHRpb25zOiB7fSxcbiAgICAgICAgY2xvc2VPbkJlZm9yZXVubG9hZDogZmFsc2VcbiAgICAgIH0sIG9wdHMpO1xuICAgICAgdGhpcy5vcHRzLnBhdGggPSB0aGlzLm9wdHMucGF0aC5yZXBsYWNlKC9cXC8kLywgXCJcIikgKyAodGhpcy5vcHRzLmFkZFRyYWlsaW5nU2xhc2ggPyBcIi9cIiA6IFwiXCIpO1xuICAgICAgaWYgKHR5cGVvZiB0aGlzLm9wdHMucXVlcnkgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgdGhpcy5vcHRzLnF1ZXJ5ID0gZGVjb2RlKHRoaXMub3B0cy5xdWVyeSk7XG4gICAgICB9XG4gICAgICBpZiAod2l0aEV2ZW50TGlzdGVuZXJzKSB7XG4gICAgICAgIGlmICh0aGlzLm9wdHMuY2xvc2VPbkJlZm9yZXVubG9hZCkge1xuICAgICAgICAgIC8vIEZpcmVmb3ggY2xvc2VzIHRoZSBjb25uZWN0aW9uIHdoZW4gdGhlIFwiYmVmb3JldW5sb2FkXCIgZXZlbnQgaXMgZW1pdHRlZCBidXQgbm90IENocm9tZS4gVGhpcyBldmVudCBsaXN0ZW5lclxuICAgICAgICAgIC8vIGVuc3VyZXMgZXZlcnkgYnJvd3NlciBiZWhhdmVzIHRoZSBzYW1lIChubyBcImRpc2Nvbm5lY3RcIiBldmVudCBhdCB0aGUgU29ja2V0LklPIGxldmVsIHdoZW4gdGhlIHBhZ2UgaXNcbiAgICAgICAgICAvLyBjbG9zZWQvcmVsb2FkZWQpXG4gICAgICAgICAgdGhpcy5fYmVmb3JldW5sb2FkRXZlbnRMaXN0ZW5lciA9ICgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLnRyYW5zcG9ydCkge1xuICAgICAgICAgICAgICAvLyBzaWxlbnRseSBjbG9zZSB0aGUgdHJhbnNwb3J0XG4gICAgICAgICAgICAgIHRoaXMudHJhbnNwb3J0LnJlbW92ZUFsbExpc3RlbmVycygpO1xuICAgICAgICAgICAgICB0aGlzLnRyYW5zcG9ydC5jbG9zZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgICAgYWRkRXZlbnRMaXN0ZW5lcihcImJlZm9yZXVubG9hZFwiLCB0aGlzLl9iZWZvcmV1bmxvYWRFdmVudExpc3RlbmVyLCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaG9zdG5hbWUgIT09IFwibG9jYWxob3N0XCIpIHtcbiAgICAgICAgICB0aGlzLl9vZmZsaW5lRXZlbnRMaXN0ZW5lciA9ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX29uQ2xvc2UoXCJ0cmFuc3BvcnQgY2xvc2VcIiwge1xuICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJuZXR3b3JrIGNvbm5lY3Rpb24gbG9zdFwiXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9O1xuICAgICAgICAgIE9GRkxJTkVfRVZFTlRfTElTVEVORVJTLnB1c2godGhpcy5fb2ZmbGluZUV2ZW50TGlzdGVuZXIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5vcHRzLndpdGhDcmVkZW50aWFscykge1xuICAgICAgICB0aGlzLl9jb29raWVKYXIgPSBjcmVhdGVDb29raWVKYXIoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX29wZW4oKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyB0cmFuc3BvcnQgb2YgdGhlIGdpdmVuIHR5cGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gbmFtZSAtIHRyYW5zcG9ydCBuYW1lXG4gICAgICogQHJldHVybiB7VHJhbnNwb3J0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgY3JlYXRlVHJhbnNwb3J0KG5hbWUpIHtcbiAgICAgIGNvbnN0IHF1ZXJ5ID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5vcHRzLnF1ZXJ5KTtcbiAgICAgIC8vIGFwcGVuZCBlbmdpbmUuaW8gcHJvdG9jb2wgaWRlbnRpZmllclxuICAgICAgcXVlcnkuRUlPID0gcHJvdG9jb2w7XG4gICAgICAvLyB0cmFuc3BvcnQgbmFtZVxuICAgICAgcXVlcnkudHJhbnNwb3J0ID0gbmFtZTtcbiAgICAgIC8vIHNlc3Npb24gaWQgaWYgd2UgYWxyZWFkeSBoYXZlIG9uZVxuICAgICAgaWYgKHRoaXMuaWQpIHF1ZXJ5LnNpZCA9IHRoaXMuaWQ7XG4gICAgICBjb25zdCBvcHRzID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5vcHRzLCB7XG4gICAgICAgIHF1ZXJ5LFxuICAgICAgICBzb2NrZXQ6IHRoaXMsXG4gICAgICAgIGhvc3RuYW1lOiB0aGlzLmhvc3RuYW1lLFxuICAgICAgICBzZWN1cmU6IHRoaXMuc2VjdXJlLFxuICAgICAgICBwb3J0OiB0aGlzLnBvcnRcbiAgICAgIH0sIHRoaXMub3B0cy50cmFuc3BvcnRPcHRpb25zW25hbWVdKTtcbiAgICAgIHJldHVybiBuZXcgdGhpcy5fdHJhbnNwb3J0c0J5TmFtZVtuYW1lXShvcHRzKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogSW5pdGlhbGl6ZXMgdHJhbnNwb3J0IHRvIHVzZSBhbmQgc3RhcnRzIHByb2JlLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBfb3BlbigpIHtcbiAgICAgIGlmICh0aGlzLnRyYW5zcG9ydHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIC8vIEVtaXQgZXJyb3Igb24gbmV4dCB0aWNrIHNvIGl0IGNhbiBiZSBsaXN0ZW5lZCB0b1xuICAgICAgICB0aGlzLnNldFRpbWVvdXRGbigoKSA9PiB7XG4gICAgICAgICAgdGhpcy5lbWl0UmVzZXJ2ZWQoXCJlcnJvclwiLCBcIk5vIHRyYW5zcG9ydHMgYXZhaWxhYmxlXCIpO1xuICAgICAgICB9LCAwKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgdHJhbnNwb3J0TmFtZSA9IHRoaXMub3B0cy5yZW1lbWJlclVwZ3JhZGUgJiYgU29ja2V0V2l0aG91dFVwZ3JhZGUucHJpb3JXZWJzb2NrZXRTdWNjZXNzICYmIHRoaXMudHJhbnNwb3J0cy5pbmRleE9mKFwid2Vic29ja2V0XCIpICE9PSAtMSA/IFwid2Vic29ja2V0XCIgOiB0aGlzLnRyYW5zcG9ydHNbMF07XG4gICAgICB0aGlzLnJlYWR5U3RhdGUgPSBcIm9wZW5pbmdcIjtcbiAgICAgIGNvbnN0IHRyYW5zcG9ydCA9IHRoaXMuY3JlYXRlVHJhbnNwb3J0KHRyYW5zcG9ydE5hbWUpO1xuICAgICAgdHJhbnNwb3J0Lm9wZW4oKTtcbiAgICAgIHRoaXMuc2V0VHJhbnNwb3J0KHRyYW5zcG9ydCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGN1cnJlbnQgdHJhbnNwb3J0LiBEaXNhYmxlcyB0aGUgZXhpc3Rpbmcgb25lIChpZiBhbnkpLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBzZXRUcmFuc3BvcnQodHJhbnNwb3J0KSB7XG4gICAgICBpZiAodGhpcy50cmFuc3BvcnQpIHtcbiAgICAgICAgdGhpcy50cmFuc3BvcnQucmVtb3ZlQWxsTGlzdGVuZXJzKCk7XG4gICAgICB9XG4gICAgICAvLyBzZXQgdXAgdHJhbnNwb3J0XG4gICAgICB0aGlzLnRyYW5zcG9ydCA9IHRyYW5zcG9ydDtcbiAgICAgIC8vIHNldCB1cCB0cmFuc3BvcnQgbGlzdGVuZXJzXG4gICAgICB0cmFuc3BvcnQub24oXCJkcmFpblwiLCB0aGlzLl9vbkRyYWluLmJpbmQodGhpcykpLm9uKFwicGFja2V0XCIsIHRoaXMuX29uUGFja2V0LmJpbmQodGhpcykpLm9uKFwiZXJyb3JcIiwgdGhpcy5fb25FcnJvci5iaW5kKHRoaXMpKS5vbihcImNsb3NlXCIsIHJlYXNvbiA9PiB0aGlzLl9vbkNsb3NlKFwidHJhbnNwb3J0IGNsb3NlXCIsIHJlYXNvbikpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDYWxsZWQgd2hlbiBjb25uZWN0aW9uIGlzIGRlZW1lZCBvcGVuLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBvbk9wZW4oKSB7XG4gICAgICB0aGlzLnJlYWR5U3RhdGUgPSBcIm9wZW5cIjtcbiAgICAgIFNvY2tldFdpdGhvdXRVcGdyYWRlLnByaW9yV2Vic29ja2V0U3VjY2VzcyA9IFwid2Vic29ja2V0XCIgPT09IHRoaXMudHJhbnNwb3J0Lm5hbWU7XG4gICAgICB0aGlzLmVtaXRSZXNlcnZlZChcIm9wZW5cIik7XG4gICAgICB0aGlzLmZsdXNoKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEhhbmRsZXMgYSBwYWNrZXQuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIF9vblBhY2tldChwYWNrZXQpIHtcbiAgICAgIGlmIChcIm9wZW5pbmdcIiA9PT0gdGhpcy5yZWFkeVN0YXRlIHx8IFwib3BlblwiID09PSB0aGlzLnJlYWR5U3RhdGUgfHwgXCJjbG9zaW5nXCIgPT09IHRoaXMucmVhZHlTdGF0ZSkge1xuICAgICAgICB0aGlzLmVtaXRSZXNlcnZlZChcInBhY2tldFwiLCBwYWNrZXQpO1xuICAgICAgICAvLyBTb2NrZXQgaXMgbGl2ZSAtIGFueSBwYWNrZXQgY291bnRzXG4gICAgICAgIHRoaXMuZW1pdFJlc2VydmVkKFwiaGVhcnRiZWF0XCIpO1xuICAgICAgICBzd2l0Y2ggKHBhY2tldC50eXBlKSB7XG4gICAgICAgICAgY2FzZSBcIm9wZW5cIjpcbiAgICAgICAgICAgIHRoaXMub25IYW5kc2hha2UoSlNPTi5wYXJzZShwYWNrZXQuZGF0YSkpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSBcInBpbmdcIjpcbiAgICAgICAgICAgIHRoaXMuX3NlbmRQYWNrZXQoXCJwb25nXCIpO1xuICAgICAgICAgICAgdGhpcy5lbWl0UmVzZXJ2ZWQoXCJwaW5nXCIpO1xuICAgICAgICAgICAgdGhpcy5lbWl0UmVzZXJ2ZWQoXCJwb25nXCIpO1xuICAgICAgICAgICAgdGhpcy5fcmVzZXRQaW5nVGltZW91dCgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSBcImVycm9yXCI6XG4gICAgICAgICAgICBjb25zdCBlcnIgPSBuZXcgRXJyb3IoXCJzZXJ2ZXIgZXJyb3JcIik7XG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICBlcnIuY29kZSA9IHBhY2tldC5kYXRhO1xuICAgICAgICAgICAgdGhpcy5fb25FcnJvcihlcnIpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSBcIm1lc3NhZ2VcIjpcbiAgICAgICAgICAgIHRoaXMuZW1pdFJlc2VydmVkKFwiZGF0YVwiLCBwYWNrZXQuZGF0YSk7XG4gICAgICAgICAgICB0aGlzLmVtaXRSZXNlcnZlZChcIm1lc3NhZ2VcIiwgcGFja2V0LmRhdGEpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7fVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBDYWxsZWQgdXBvbiBoYW5kc2hha2UgY29tcGxldGlvbi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhIC0gaGFuZHNoYWtlIG9ialxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgb25IYW5kc2hha2UoZGF0YSkge1xuICAgICAgdGhpcy5lbWl0UmVzZXJ2ZWQoXCJoYW5kc2hha2VcIiwgZGF0YSk7XG4gICAgICB0aGlzLmlkID0gZGF0YS5zaWQ7XG4gICAgICB0aGlzLnRyYW5zcG9ydC5xdWVyeS5zaWQgPSBkYXRhLnNpZDtcbiAgICAgIHRoaXMuX3BpbmdJbnRlcnZhbCA9IGRhdGEucGluZ0ludGVydmFsO1xuICAgICAgdGhpcy5fcGluZ1RpbWVvdXQgPSBkYXRhLnBpbmdUaW1lb3V0O1xuICAgICAgdGhpcy5fbWF4UGF5bG9hZCA9IGRhdGEubWF4UGF5bG9hZDtcbiAgICAgIHRoaXMub25PcGVuKCk7XG4gICAgICAvLyBJbiBjYXNlIG9wZW4gaGFuZGxlciBjbG9zZXMgc29ja2V0XG4gICAgICBpZiAoXCJjbG9zZWRcIiA9PT0gdGhpcy5yZWFkeVN0YXRlKSByZXR1cm47XG4gICAgICB0aGlzLl9yZXNldFBpbmdUaW1lb3V0KCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNldHMgYW5kIHJlc2V0cyBwaW5nIHRpbWVvdXQgdGltZXIgYmFzZWQgb24gc2VydmVyIHBpbmdzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBfcmVzZXRQaW5nVGltZW91dCgpIHtcbiAgICAgIHRoaXMuY2xlYXJUaW1lb3V0Rm4odGhpcy5fcGluZ1RpbWVvdXRUaW1lcik7XG4gICAgICBjb25zdCBkZWxheSA9IHRoaXMuX3BpbmdJbnRlcnZhbCArIHRoaXMuX3BpbmdUaW1lb3V0O1xuICAgICAgdGhpcy5fcGluZ1RpbWVvdXRUaW1lID0gRGF0ZS5ub3coKSArIGRlbGF5O1xuICAgICAgdGhpcy5fcGluZ1RpbWVvdXRUaW1lciA9IHRoaXMuc2V0VGltZW91dEZuKCgpID0+IHtcbiAgICAgICAgdGhpcy5fb25DbG9zZShcInBpbmcgdGltZW91dFwiKTtcbiAgICAgIH0sIGRlbGF5KTtcbiAgICAgIGlmICh0aGlzLm9wdHMuYXV0b1VucmVmKSB7XG4gICAgICAgIHRoaXMuX3BpbmdUaW1lb3V0VGltZXIudW5yZWYoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2FsbGVkIG9uIGBkcmFpbmAgZXZlbnRcbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgX29uRHJhaW4oKSB7XG4gICAgICB0aGlzLndyaXRlQnVmZmVyLnNwbGljZSgwLCB0aGlzLl9wcmV2QnVmZmVyTGVuKTtcbiAgICAgIC8vIHNldHRpbmcgcHJldkJ1ZmZlckxlbiA9IDAgaXMgdmVyeSBpbXBvcnRhbnRcbiAgICAgIC8vIGZvciBleGFtcGxlLCB3aGVuIHVwZ3JhZGluZywgdXBncmFkZSBwYWNrZXQgaXMgc2VudCBvdmVyLFxuICAgICAgLy8gYW5kIGEgbm9uemVybyBwcmV2QnVmZmVyTGVuIGNvdWxkIGNhdXNlIHByb2JsZW1zIG9uIGBkcmFpbmBcbiAgICAgIHRoaXMuX3ByZXZCdWZmZXJMZW4gPSAwO1xuICAgICAgaWYgKDAgPT09IHRoaXMud3JpdGVCdWZmZXIubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuZW1pdFJlc2VydmVkKFwiZHJhaW5cIik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmZsdXNoKCk7XG4gICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEZsdXNoIHdyaXRlIGJ1ZmZlcnMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGZsdXNoKCkge1xuICAgICAgaWYgKFwiY2xvc2VkXCIgIT09IHRoaXMucmVhZHlTdGF0ZSAmJiB0aGlzLnRyYW5zcG9ydC53cml0YWJsZSAmJiAhdGhpcy51cGdyYWRpbmcgJiYgdGhpcy53cml0ZUJ1ZmZlci5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgcGFja2V0cyA9IHRoaXMuX2dldFdyaXRhYmxlUGFja2V0cygpO1xuICAgICAgICB0aGlzLnRyYW5zcG9ydC5zZW5kKHBhY2tldHMpO1xuICAgICAgICAvLyBrZWVwIHRyYWNrIG9mIGN1cnJlbnQgbGVuZ3RoIG9mIHdyaXRlQnVmZmVyXG4gICAgICAgIC8vIHNwbGljZSB3cml0ZUJ1ZmZlciBhbmQgY2FsbGJhY2tCdWZmZXIgb24gYGRyYWluYFxuICAgICAgICB0aGlzLl9wcmV2QnVmZmVyTGVuID0gcGFja2V0cy5sZW5ndGg7XG4gICAgICAgIHRoaXMuZW1pdFJlc2VydmVkKFwiZmx1c2hcIik7XG4gICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEVuc3VyZSB0aGUgZW5jb2RlZCBzaXplIG9mIHRoZSB3cml0ZUJ1ZmZlciBpcyBiZWxvdyB0aGUgbWF4UGF5bG9hZCB2YWx1ZSBzZW50IGJ5IHRoZSBzZXJ2ZXIgKG9ubHkgZm9yIEhUVFBcbiAgICAgKiBsb25nLXBvbGxpbmcpXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIF9nZXRXcml0YWJsZVBhY2tldHMoKSB7XG4gICAgICBjb25zdCBzaG91bGRDaGVja1BheWxvYWRTaXplID0gdGhpcy5fbWF4UGF5bG9hZCAmJiB0aGlzLnRyYW5zcG9ydC5uYW1lID09PSBcInBvbGxpbmdcIiAmJiB0aGlzLndyaXRlQnVmZmVyLmxlbmd0aCA+IDE7XG4gICAgICBpZiAoIXNob3VsZENoZWNrUGF5bG9hZFNpemUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMud3JpdGVCdWZmZXI7XG4gICAgICB9XG4gICAgICBsZXQgcGF5bG9hZFNpemUgPSAxOyAvLyBmaXJzdCBwYWNrZXQgdHlwZVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLndyaXRlQnVmZmVyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLndyaXRlQnVmZmVyW2ldLmRhdGE7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgcGF5bG9hZFNpemUgKz0gYnl0ZUxlbmd0aChkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaSA+IDAgJiYgcGF5bG9hZFNpemUgPiB0aGlzLl9tYXhQYXlsb2FkKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMud3JpdGVCdWZmZXIuc2xpY2UoMCwgaSk7XG4gICAgICAgIH1cbiAgICAgICAgcGF5bG9hZFNpemUgKz0gMjsgLy8gc2VwYXJhdG9yICsgcGFja2V0IHR5cGVcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLndyaXRlQnVmZmVyO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDaGVja3Mgd2hldGhlciB0aGUgaGVhcnRiZWF0IHRpbWVyIGhhcyBleHBpcmVkIGJ1dCB0aGUgc29ja2V0IGhhcyBub3QgeWV0IGJlZW4gbm90aWZpZWQuXG4gICAgICpcbiAgICAgKiBOb3RlOiB0aGlzIG1ldGhvZCBpcyBwcml2YXRlIGZvciBub3cgYmVjYXVzZSBpdCBkb2VzIG5vdCByZWFsbHkgZml0IHRoZSBXZWJTb2NrZXQgQVBJLCBidXQgaWYgd2UgcHV0IGl0IGluIHRoZVxuICAgICAqIGB3cml0ZSgpYCBtZXRob2QgdGhlbiB0aGUgbWVzc2FnZSB3b3VsZCBub3QgYmUgYnVmZmVyZWQgYnkgdGhlIFNvY2tldC5JTyBjbGllbnQuXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgLyogcHJpdmF0ZSAqL1xuICAgIF9oYXNQaW5nRXhwaXJlZCgpIHtcbiAgICAgIGlmICghdGhpcy5fcGluZ1RpbWVvdXRUaW1lKSByZXR1cm4gdHJ1ZTtcbiAgICAgIGNvbnN0IGhhc0V4cGlyZWQgPSBEYXRlLm5vdygpID4gdGhpcy5fcGluZ1RpbWVvdXRUaW1lO1xuICAgICAgaWYgKGhhc0V4cGlyZWQpIHtcbiAgICAgICAgdGhpcy5fcGluZ1RpbWVvdXRUaW1lID0gMDtcbiAgICAgICAgbmV4dFRpY2soKCkgPT4ge1xuICAgICAgICAgIHRoaXMuX29uQ2xvc2UoXCJwaW5nIHRpbWVvdXRcIik7XG4gICAgICAgIH0sIHRoaXMuc2V0VGltZW91dEZuKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBoYXNFeHBpcmVkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZW5kcyBhIG1lc3NhZ2UuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gbXNnIC0gbWVzc2FnZS5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucy5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiAtIGNhbGxiYWNrIGZ1bmN0aW9uLlxuICAgICAqIEByZXR1cm4ge1NvY2tldH0gZm9yIGNoYWluaW5nLlxuICAgICAqL1xuICAgIHdyaXRlKG1zZywgb3B0aW9ucywgZm4pIHtcbiAgICAgIHRoaXMuX3NlbmRQYWNrZXQoXCJtZXNzYWdlXCIsIG1zZywgb3B0aW9ucywgZm4pO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNlbmRzIGEgbWVzc2FnZS4gQWxpYXMgb2Yge0BsaW5rIFNvY2tldCN3cml0ZX0uXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gbXNnIC0gbWVzc2FnZS5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucy5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiAtIGNhbGxiYWNrIGZ1bmN0aW9uLlxuICAgICAqIEByZXR1cm4ge1NvY2tldH0gZm9yIGNoYWluaW5nLlxuICAgICAqL1xuICAgIHNlbmQobXNnLCBvcHRpb25zLCBmbikge1xuICAgICAgdGhpcy5fc2VuZFBhY2tldChcIm1lc3NhZ2VcIiwgbXNnLCBvcHRpb25zLCBmbik7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2VuZHMgYSBwYWNrZXQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gdHlwZTogcGFja2V0IHR5cGUuXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IGRhdGEuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gLSBjYWxsYmFjayBmdW5jdGlvbi5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIF9zZW5kUGFja2V0KHR5cGUsIGRhdGEsIG9wdGlvbnMsIGZuKSB7XG4gICAgICBpZiAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgZGF0YSkge1xuICAgICAgICBmbiA9IGRhdGE7XG4gICAgICAgIGRhdGEgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICBpZiAoXCJmdW5jdGlvblwiID09PSB0eXBlb2Ygb3B0aW9ucykge1xuICAgICAgICBmbiA9IG9wdGlvbnM7XG4gICAgICAgIG9wdGlvbnMgPSBudWxsO1xuICAgICAgfVxuICAgICAgaWYgKFwiY2xvc2luZ1wiID09PSB0aGlzLnJlYWR5U3RhdGUgfHwgXCJjbG9zZWRcIiA9PT0gdGhpcy5yZWFkeVN0YXRlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgICAgb3B0aW9ucy5jb21wcmVzcyA9IGZhbHNlICE9PSBvcHRpb25zLmNvbXByZXNzO1xuICAgICAgY29uc3QgcGFja2V0ID0ge1xuICAgICAgICB0eXBlOiB0eXBlLFxuICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICBvcHRpb25zOiBvcHRpb25zXG4gICAgICB9O1xuICAgICAgdGhpcy5lbWl0UmVzZXJ2ZWQoXCJwYWNrZXRDcmVhdGVcIiwgcGFja2V0KTtcbiAgICAgIHRoaXMud3JpdGVCdWZmZXIucHVzaChwYWNrZXQpO1xuICAgICAgaWYgKGZuKSB0aGlzLm9uY2UoXCJmbHVzaFwiLCBmbik7XG4gICAgICB0aGlzLmZsdXNoKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENsb3NlcyB0aGUgY29ubmVjdGlvbi5cbiAgICAgKi9cbiAgICBjbG9zZSgpIHtcbiAgICAgIGNvbnN0IGNsb3NlID0gKCkgPT4ge1xuICAgICAgICB0aGlzLl9vbkNsb3NlKFwiZm9yY2VkIGNsb3NlXCIpO1xuICAgICAgICB0aGlzLnRyYW5zcG9ydC5jbG9zZSgpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGNsZWFudXBBbmRDbG9zZSA9ICgpID0+IHtcbiAgICAgICAgdGhpcy5vZmYoXCJ1cGdyYWRlXCIsIGNsZWFudXBBbmRDbG9zZSk7XG4gICAgICAgIHRoaXMub2ZmKFwidXBncmFkZUVycm9yXCIsIGNsZWFudXBBbmRDbG9zZSk7XG4gICAgICAgIGNsb3NlKCk7XG4gICAgICB9O1xuICAgICAgY29uc3Qgd2FpdEZvclVwZ3JhZGUgPSAoKSA9PiB7XG4gICAgICAgIC8vIHdhaXQgZm9yIHVwZ3JhZGUgdG8gZmluaXNoIHNpbmNlIHdlIGNhbid0IHNlbmQgcGFja2V0cyB3aGlsZSBwYXVzaW5nIGEgdHJhbnNwb3J0XG4gICAgICAgIHRoaXMub25jZShcInVwZ3JhZGVcIiwgY2xlYW51cEFuZENsb3NlKTtcbiAgICAgICAgdGhpcy5vbmNlKFwidXBncmFkZUVycm9yXCIsIGNsZWFudXBBbmRDbG9zZSk7XG4gICAgICB9O1xuICAgICAgaWYgKFwib3BlbmluZ1wiID09PSB0aGlzLnJlYWR5U3RhdGUgfHwgXCJvcGVuXCIgPT09IHRoaXMucmVhZHlTdGF0ZSkge1xuICAgICAgICB0aGlzLnJlYWR5U3RhdGUgPSBcImNsb3NpbmdcIjtcbiAgICAgICAgaWYgKHRoaXMud3JpdGVCdWZmZXIubGVuZ3RoKSB7XG4gICAgICAgICAgdGhpcy5vbmNlKFwiZHJhaW5cIiwgKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMudXBncmFkaW5nKSB7XG4gICAgICAgICAgICAgIHdhaXRGb3JVcGdyYWRlKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjbG9zZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMudXBncmFkaW5nKSB7XG4gICAgICAgICAgd2FpdEZvclVwZ3JhZGUoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjbG9zZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2FsbGVkIHVwb24gdHJhbnNwb3J0IGVycm9yXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIF9vbkVycm9yKGVycikge1xuICAgICAgU29ja2V0V2l0aG91dFVwZ3JhZGUucHJpb3JXZWJzb2NrZXRTdWNjZXNzID0gZmFsc2U7XG4gICAgICBpZiAodGhpcy5vcHRzLnRyeUFsbFRyYW5zcG9ydHMgJiYgdGhpcy50cmFuc3BvcnRzLmxlbmd0aCA+IDEgJiYgdGhpcy5yZWFkeVN0YXRlID09PSBcIm9wZW5pbmdcIikge1xuICAgICAgICB0aGlzLnRyYW5zcG9ydHMuc2hpZnQoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX29wZW4oKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZW1pdFJlc2VydmVkKFwiZXJyb3JcIiwgZXJyKTtcbiAgICAgIHRoaXMuX29uQ2xvc2UoXCJ0cmFuc3BvcnQgZXJyb3JcIiwgZXJyKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2FsbGVkIHVwb24gdHJhbnNwb3J0IGNsb3NlLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBfb25DbG9zZShyZWFzb24sIGRlc2NyaXB0aW9uKSB7XG4gICAgICBpZiAoXCJvcGVuaW5nXCIgPT09IHRoaXMucmVhZHlTdGF0ZSB8fCBcIm9wZW5cIiA9PT0gdGhpcy5yZWFkeVN0YXRlIHx8IFwiY2xvc2luZ1wiID09PSB0aGlzLnJlYWR5U3RhdGUpIHtcbiAgICAgICAgLy8gY2xlYXIgdGltZXJzXG4gICAgICAgIHRoaXMuY2xlYXJUaW1lb3V0Rm4odGhpcy5fcGluZ1RpbWVvdXRUaW1lcik7XG4gICAgICAgIC8vIHN0b3AgZXZlbnQgZnJvbSBmaXJpbmcgYWdhaW4gZm9yIHRyYW5zcG9ydFxuICAgICAgICB0aGlzLnRyYW5zcG9ydC5yZW1vdmVBbGxMaXN0ZW5lcnMoXCJjbG9zZVwiKTtcbiAgICAgICAgLy8gZW5zdXJlIHRyYW5zcG9ydCB3b24ndCBzdGF5IG9wZW5cbiAgICAgICAgdGhpcy50cmFuc3BvcnQuY2xvc2UoKTtcbiAgICAgICAgLy8gaWdub3JlIGZ1cnRoZXIgdHJhbnNwb3J0IGNvbW11bmljYXRpb25cbiAgICAgICAgdGhpcy50cmFuc3BvcnQucmVtb3ZlQWxsTGlzdGVuZXJzKCk7XG4gICAgICAgIGlmICh3aXRoRXZlbnRMaXN0ZW5lcnMpIHtcbiAgICAgICAgICBpZiAodGhpcy5fYmVmb3JldW5sb2FkRXZlbnRMaXN0ZW5lcikge1xuICAgICAgICAgICAgcmVtb3ZlRXZlbnRMaXN0ZW5lcihcImJlZm9yZXVubG9hZFwiLCB0aGlzLl9iZWZvcmV1bmxvYWRFdmVudExpc3RlbmVyLCBmYWxzZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0aGlzLl9vZmZsaW5lRXZlbnRMaXN0ZW5lcikge1xuICAgICAgICAgICAgY29uc3QgaSA9IE9GRkxJTkVfRVZFTlRfTElTVEVORVJTLmluZGV4T2YodGhpcy5fb2ZmbGluZUV2ZW50TGlzdGVuZXIpO1xuICAgICAgICAgICAgaWYgKGkgIT09IC0xKSB7XG4gICAgICAgICAgICAgIE9GRkxJTkVfRVZFTlRfTElTVEVORVJTLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gc2V0IHJlYWR5IHN0YXRlXG4gICAgICAgIHRoaXMucmVhZHlTdGF0ZSA9IFwiY2xvc2VkXCI7XG4gICAgICAgIC8vIGNsZWFyIHNlc3Npb24gaWRcbiAgICAgICAgdGhpcy5pZCA9IG51bGw7XG4gICAgICAgIC8vIGVtaXQgY2xvc2UgZXZlbnRcbiAgICAgICAgdGhpcy5lbWl0UmVzZXJ2ZWQoXCJjbG9zZVwiLCByZWFzb24sIGRlc2NyaXB0aW9uKTtcbiAgICAgICAgLy8gY2xlYW4gYnVmZmVycyBhZnRlciwgc28gdXNlcnMgY2FuIHN0aWxsXG4gICAgICAgIC8vIGdyYWIgdGhlIGJ1ZmZlcnMgb24gYGNsb3NlYCBldmVudFxuICAgICAgICB0aGlzLndyaXRlQnVmZmVyID0gW107XG4gICAgICAgIHRoaXMuX3ByZXZCdWZmZXJMZW4gPSAwO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBTb2NrZXRXaXRob3V0VXBncmFkZS5wcm90b2NvbCA9IHByb3RvY29sO1xuICAvKipcbiAgICogVGhpcyBjbGFzcyBwcm92aWRlcyBhIFdlYlNvY2tldC1saWtlIGludGVyZmFjZSB0byBjb25uZWN0IHRvIGFuIEVuZ2luZS5JTyBzZXJ2ZXIuIFRoZSBjb25uZWN0aW9uIHdpbGwgYmUgZXN0YWJsaXNoZWRcbiAgICogd2l0aCBvbmUgb2YgdGhlIGF2YWlsYWJsZSBsb3ctbGV2ZWwgdHJhbnNwb3J0cywgbGlrZSBIVFRQIGxvbmctcG9sbGluZywgV2ViU29ja2V0IG9yIFdlYlRyYW5zcG9ydC5cbiAgICpcbiAgICogVGhpcyBjbGFzcyBjb21lcyB3aXRoIGFuIHVwZ3JhZGUgbWVjaGFuaXNtLCB3aGljaCBtZWFucyB0aGF0IG9uY2UgdGhlIGNvbm5lY3Rpb24gaXMgZXN0YWJsaXNoZWQgd2l0aCB0aGUgZmlyc3RcbiAgICogbG93LWxldmVsIHRyYW5zcG9ydCwgaXQgd2lsbCB0cnkgdG8gdXBncmFkZSB0byBhIGJldHRlciB0cmFuc3BvcnQuXG4gICAqXG4gICAqIEluIG9yZGVyIHRvIGFsbG93IHRyZWUtc2hha2luZywgdGhlcmUgYXJlIG5vIHRyYW5zcG9ydHMgaW5jbHVkZWQsIHRoYXQncyB3aHkgdGhlIGB0cmFuc3BvcnRzYCBvcHRpb24gaXMgbWFuZGF0b3J5LlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBpbXBvcnQgeyBTb2NrZXRXaXRoVXBncmFkZSwgV2ViU29ja2V0IH0gZnJvbSBcImVuZ2luZS5pby1jbGllbnRcIjtcbiAgICpcbiAgICogY29uc3Qgc29ja2V0ID0gbmV3IFNvY2tldFdpdGhVcGdyYWRlKHtcbiAgICogICB0cmFuc3BvcnRzOiBbV2ViU29ja2V0XVxuICAgKiB9KTtcbiAgICpcbiAgICogc29ja2V0Lm9uKFwib3BlblwiLCAoKSA9PiB7XG4gICAqICAgc29ja2V0LnNlbmQoXCJoZWxsb1wiKTtcbiAgICogfSk7XG4gICAqXG4gICAqIEBzZWUgU29ja2V0V2l0aG91dFVwZ3JhZGVcbiAgICogQHNlZSBTb2NrZXRcbiAgICovXG4gIHJldHVybiBTb2NrZXRXaXRob3V0VXBncmFkZTtcbn0pKCk7XG5leHBvcnQgY2xhc3MgU29ja2V0V2l0aFVwZ3JhZGUgZXh0ZW5kcyBTb2NrZXRXaXRob3V0VXBncmFkZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgdGhpcy5fdXBncmFkZXMgPSBbXTtcbiAgfVxuICBvbk9wZW4oKSB7XG4gICAgc3VwZXIub25PcGVuKCk7XG4gICAgaWYgKFwib3BlblwiID09PSB0aGlzLnJlYWR5U3RhdGUgJiYgdGhpcy5vcHRzLnVwZ3JhZGUpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5fdXBncmFkZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdGhpcy5fcHJvYmUodGhpcy5fdXBncmFkZXNbaV0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICAvKipcbiAgICogUHJvYmVzIGEgdHJhbnNwb3J0LlxuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ30gbmFtZSAtIHRyYW5zcG9ydCBuYW1lXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfcHJvYmUobmFtZSkge1xuICAgIGxldCB0cmFuc3BvcnQgPSB0aGlzLmNyZWF0ZVRyYW5zcG9ydChuYW1lKTtcbiAgICBsZXQgZmFpbGVkID0gZmFsc2U7XG4gICAgU29ja2V0V2l0aG91dFVwZ3JhZGUucHJpb3JXZWJzb2NrZXRTdWNjZXNzID0gZmFsc2U7XG4gICAgY29uc3Qgb25UcmFuc3BvcnRPcGVuID0gKCkgPT4ge1xuICAgICAgaWYgKGZhaWxlZCkgcmV0dXJuO1xuICAgICAgdHJhbnNwb3J0LnNlbmQoW3tcbiAgICAgICAgdHlwZTogXCJwaW5nXCIsXG4gICAgICAgIGRhdGE6IFwicHJvYmVcIlxuICAgICAgfV0pO1xuICAgICAgdHJhbnNwb3J0Lm9uY2UoXCJwYWNrZXRcIiwgbXNnID0+IHtcbiAgICAgICAgaWYgKGZhaWxlZCkgcmV0dXJuO1xuICAgICAgICBpZiAoXCJwb25nXCIgPT09IG1zZy50eXBlICYmIFwicHJvYmVcIiA9PT0gbXNnLmRhdGEpIHtcbiAgICAgICAgICB0aGlzLnVwZ3JhZGluZyA9IHRydWU7XG4gICAgICAgICAgdGhpcy5lbWl0UmVzZXJ2ZWQoXCJ1cGdyYWRpbmdcIiwgdHJhbnNwb3J0KTtcbiAgICAgICAgICBpZiAoIXRyYW5zcG9ydCkgcmV0dXJuO1xuICAgICAgICAgIFNvY2tldFdpdGhvdXRVcGdyYWRlLnByaW9yV2Vic29ja2V0U3VjY2VzcyA9IFwid2Vic29ja2V0XCIgPT09IHRyYW5zcG9ydC5uYW1lO1xuICAgICAgICAgIHRoaXMudHJhbnNwb3J0LnBhdXNlKCgpID0+IHtcbiAgICAgICAgICAgIGlmIChmYWlsZWQpIHJldHVybjtcbiAgICAgICAgICAgIGlmIChcImNsb3NlZFwiID09PSB0aGlzLnJlYWR5U3RhdGUpIHJldHVybjtcbiAgICAgICAgICAgIGNsZWFudXAoKTtcbiAgICAgICAgICAgIHRoaXMuc2V0VHJhbnNwb3J0KHRyYW5zcG9ydCk7XG4gICAgICAgICAgICB0cmFuc3BvcnQuc2VuZChbe1xuICAgICAgICAgICAgICB0eXBlOiBcInVwZ3JhZGVcIlxuICAgICAgICAgICAgfV0pO1xuICAgICAgICAgICAgdGhpcy5lbWl0UmVzZXJ2ZWQoXCJ1cGdyYWRlXCIsIHRyYW5zcG9ydCk7XG4gICAgICAgICAgICB0cmFuc3BvcnQgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy51cGdyYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZmx1c2goKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBlcnIgPSBuZXcgRXJyb3IoXCJwcm9iZSBlcnJvclwiKTtcbiAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgZXJyLnRyYW5zcG9ydCA9IHRyYW5zcG9ydC5uYW1lO1xuICAgICAgICAgIHRoaXMuZW1pdFJlc2VydmVkKFwidXBncmFkZUVycm9yXCIsIGVycik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG4gICAgZnVuY3Rpb24gZnJlZXplVHJhbnNwb3J0KCkge1xuICAgICAgaWYgKGZhaWxlZCkgcmV0dXJuO1xuICAgICAgLy8gQW55IGNhbGxiYWNrIGNhbGxlZCBieSB0cmFuc3BvcnQgc2hvdWxkIGJlIGlnbm9yZWQgc2luY2Ugbm93XG4gICAgICBmYWlsZWQgPSB0cnVlO1xuICAgICAgY2xlYW51cCgpO1xuICAgICAgdHJhbnNwb3J0LmNsb3NlKCk7XG4gICAgICB0cmFuc3BvcnQgPSBudWxsO1xuICAgIH1cbiAgICAvLyBIYW5kbGUgYW55IGVycm9yIHRoYXQgaGFwcGVucyB3aGlsZSBwcm9iaW5nXG4gICAgY29uc3Qgb25lcnJvciA9IGVyciA9PiB7XG4gICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcihcInByb2JlIGVycm9yOiBcIiArIGVycik7XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBlcnJvci50cmFuc3BvcnQgPSB0cmFuc3BvcnQubmFtZTtcbiAgICAgIGZyZWV6ZVRyYW5zcG9ydCgpO1xuICAgICAgdGhpcy5lbWl0UmVzZXJ2ZWQoXCJ1cGdyYWRlRXJyb3JcIiwgZXJyb3IpO1xuICAgIH07XG4gICAgZnVuY3Rpb24gb25UcmFuc3BvcnRDbG9zZSgpIHtcbiAgICAgIG9uZXJyb3IoXCJ0cmFuc3BvcnQgY2xvc2VkXCIpO1xuICAgIH1cbiAgICAvLyBXaGVuIHRoZSBzb2NrZXQgaXMgY2xvc2VkIHdoaWxlIHdlJ3JlIHByb2JpbmdcbiAgICBmdW5jdGlvbiBvbmNsb3NlKCkge1xuICAgICAgb25lcnJvcihcInNvY2tldCBjbG9zZWRcIik7XG4gICAgfVxuICAgIC8vIFdoZW4gdGhlIHNvY2tldCBpcyB1cGdyYWRlZCB3aGlsZSB3ZSdyZSBwcm9iaW5nXG4gICAgZnVuY3Rpb24gb251cGdyYWRlKHRvKSB7XG4gICAgICBpZiAodHJhbnNwb3J0ICYmIHRvLm5hbWUgIT09IHRyYW5zcG9ydC5uYW1lKSB7XG4gICAgICAgIGZyZWV6ZVRyYW5zcG9ydCgpO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBSZW1vdmUgYWxsIGxpc3RlbmVycyBvbiB0aGUgdHJhbnNwb3J0IGFuZCBvbiBzZWxmXG4gICAgY29uc3QgY2xlYW51cCA9ICgpID0+IHtcbiAgICAgIHRyYW5zcG9ydC5yZW1vdmVMaXN0ZW5lcihcIm9wZW5cIiwgb25UcmFuc3BvcnRPcGVuKTtcbiAgICAgIHRyYW5zcG9ydC5yZW1vdmVMaXN0ZW5lcihcImVycm9yXCIsIG9uZXJyb3IpO1xuICAgICAgdHJhbnNwb3J0LnJlbW92ZUxpc3RlbmVyKFwiY2xvc2VcIiwgb25UcmFuc3BvcnRDbG9zZSk7XG4gICAgICB0aGlzLm9mZihcImNsb3NlXCIsIG9uY2xvc2UpO1xuICAgICAgdGhpcy5vZmYoXCJ1cGdyYWRpbmdcIiwgb251cGdyYWRlKTtcbiAgICB9O1xuICAgIHRyYW5zcG9ydC5vbmNlKFwib3BlblwiLCBvblRyYW5zcG9ydE9wZW4pO1xuICAgIHRyYW5zcG9ydC5vbmNlKFwiZXJyb3JcIiwgb25lcnJvcik7XG4gICAgdHJhbnNwb3J0Lm9uY2UoXCJjbG9zZVwiLCBvblRyYW5zcG9ydENsb3NlKTtcbiAgICB0aGlzLm9uY2UoXCJjbG9zZVwiLCBvbmNsb3NlKTtcbiAgICB0aGlzLm9uY2UoXCJ1cGdyYWRpbmdcIiwgb251cGdyYWRlKTtcbiAgICBpZiAodGhpcy5fdXBncmFkZXMuaW5kZXhPZihcIndlYnRyYW5zcG9ydFwiKSAhPT0gLTEgJiYgbmFtZSAhPT0gXCJ3ZWJ0cmFuc3BvcnRcIikge1xuICAgICAgLy8gZmF2b3IgV2ViVHJhbnNwb3J0XG4gICAgICB0aGlzLnNldFRpbWVvdXRGbigoKSA9PiB7XG4gICAgICAgIGlmICghZmFpbGVkKSB7XG4gICAgICAgICAgdHJhbnNwb3J0Lm9wZW4oKTtcbiAgICAgICAgfVxuICAgICAgfSwgMjAwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdHJhbnNwb3J0Lm9wZW4oKTtcbiAgICB9XG4gIH1cbiAgb25IYW5kc2hha2UoZGF0YSkge1xuICAgIHRoaXMuX3VwZ3JhZGVzID0gdGhpcy5fZmlsdGVyVXBncmFkZXMoZGF0YS51cGdyYWRlcyk7XG4gICAgc3VwZXIub25IYW5kc2hha2UoZGF0YSk7XG4gIH1cbiAgLyoqXG4gICAqIEZpbHRlcnMgdXBncmFkZXMsIHJldHVybmluZyBvbmx5IHRob3NlIG1hdGNoaW5nIGNsaWVudCB0cmFuc3BvcnRzLlxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5fSB1cGdyYWRlcyAtIHNlcnZlciB1cGdyYWRlc1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2ZpbHRlclVwZ3JhZGVzKHVwZ3JhZGVzKSB7XG4gICAgY29uc3QgZmlsdGVyZWRVcGdyYWRlcyA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdXBncmFkZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh+dGhpcy50cmFuc3BvcnRzLmluZGV4T2YodXBncmFkZXNbaV0pKSBmaWx0ZXJlZFVwZ3JhZGVzLnB1c2godXBncmFkZXNbaV0pO1xuICAgIH1cbiAgICByZXR1cm4gZmlsdGVyZWRVcGdyYWRlcztcbiAgfVxufVxuLyoqXG4gKiBUaGlzIGNsYXNzIHByb3ZpZGVzIGEgV2ViU29ja2V0LWxpa2UgaW50ZXJmYWNlIHRvIGNvbm5lY3QgdG8gYW4gRW5naW5lLklPIHNlcnZlci4gVGhlIGNvbm5lY3Rpb24gd2lsbCBiZSBlc3RhYmxpc2hlZFxuICogd2l0aCBvbmUgb2YgdGhlIGF2YWlsYWJsZSBsb3ctbGV2ZWwgdHJhbnNwb3J0cywgbGlrZSBIVFRQIGxvbmctcG9sbGluZywgV2ViU29ja2V0IG9yIFdlYlRyYW5zcG9ydC5cbiAqXG4gKiBUaGlzIGNsYXNzIGNvbWVzIHdpdGggYW4gdXBncmFkZSBtZWNoYW5pc20sIHdoaWNoIG1lYW5zIHRoYXQgb25jZSB0aGUgY29ubmVjdGlvbiBpcyBlc3RhYmxpc2hlZCB3aXRoIHRoZSBmaXJzdFxuICogbG93LWxldmVsIHRyYW5zcG9ydCwgaXQgd2lsbCB0cnkgdG8gdXBncmFkZSB0byBhIGJldHRlciB0cmFuc3BvcnQuXG4gKlxuICogQGV4YW1wbGVcbiAqIGltcG9ydCB7IFNvY2tldCB9IGZyb20gXCJlbmdpbmUuaW8tY2xpZW50XCI7XG4gKlxuICogY29uc3Qgc29ja2V0ID0gbmV3IFNvY2tldCgpO1xuICpcbiAqIHNvY2tldC5vbihcIm9wZW5cIiwgKCkgPT4ge1xuICogICBzb2NrZXQuc2VuZChcImhlbGxvXCIpO1xuICogfSk7XG4gKlxuICogQHNlZSBTb2NrZXRXaXRob3V0VXBncmFkZVxuICogQHNlZSBTb2NrZXRXaXRoVXBncmFkZVxuICovXG5leHBvcnQgY2xhc3MgU29ja2V0IGV4dGVuZHMgU29ja2V0V2l0aFVwZ3JhZGUge1xuICBjb25zdHJ1Y3Rvcih1cmksIG9wdHMgPSB7fSkge1xuICAgIGNvbnN0IG8gPSB0eXBlb2YgdXJpID09PSBcIm9iamVjdFwiID8gdXJpIDogb3B0cztcbiAgICBpZiAoIW8udHJhbnNwb3J0cyB8fCBvLnRyYW5zcG9ydHMgJiYgdHlwZW9mIG8udHJhbnNwb3J0c1swXSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgby50cmFuc3BvcnRzID0gKG8udHJhbnNwb3J0cyB8fCBbXCJwb2xsaW5nXCIsIFwid2Vic29ja2V0XCIsIFwid2VidHJhbnNwb3J0XCJdKS5tYXAodHJhbnNwb3J0TmFtZSA9PiBERUZBVUxUX1RSQU5TUE9SVFNbdHJhbnNwb3J0TmFtZV0pLmZpbHRlcih0ID0+ICEhdCk7XG4gICAgfVxuICAgIHN1cGVyKHVyaSwgbyk7XG4gIH1cbn0iLCJpbXBvcnQgeyBTb2NrZXQgfSBmcm9tIFwiLi9zb2NrZXQuanNcIjtcbmV4cG9ydCB7IFNvY2tldCB9O1xuZXhwb3J0IHsgU29ja2V0V2l0aG91dFVwZ3JhZGUsIFNvY2tldFdpdGhVcGdyYWRlIH0gZnJvbSBcIi4vc29ja2V0LmpzXCI7XG5leHBvcnQgY29uc3QgcHJvdG9jb2wgPSBTb2NrZXQucHJvdG9jb2w7XG5leHBvcnQgeyBUcmFuc3BvcnQsIFRyYW5zcG9ydEVycm9yIH0gZnJvbSBcIi4vdHJhbnNwb3J0LmpzXCI7XG5leHBvcnQgeyB0cmFuc3BvcnRzIH0gZnJvbSBcIi4vdHJhbnNwb3J0cy9pbmRleC5qc1wiO1xuZXhwb3J0IHsgaW5zdGFsbFRpbWVyRnVuY3Rpb25zIH0gZnJvbSBcIi4vdXRpbC5qc1wiO1xuZXhwb3J0IHsgcGFyc2UgfSBmcm9tIFwiLi9jb250cmliL3BhcnNldXJpLmpzXCI7XG5leHBvcnQgeyBuZXh0VGljayB9IGZyb20gXCIuL2dsb2JhbHMubm9kZS5qc1wiO1xuZXhwb3J0IHsgRmV0Y2ggfSBmcm9tIFwiLi90cmFuc3BvcnRzL3BvbGxpbmctZmV0Y2guanNcIjtcbmV4cG9ydCB7IFhIUiBhcyBOb2RlWEhSIH0gZnJvbSBcIi4vdHJhbnNwb3J0cy9wb2xsaW5nLXhoci5ub2RlLmpzXCI7XG5leHBvcnQgeyBYSFIgfSBmcm9tIFwiLi90cmFuc3BvcnRzL3BvbGxpbmcteGhyLmpzXCI7XG5leHBvcnQgeyBXUyBhcyBOb2RlV2ViU29ja2V0IH0gZnJvbSBcIi4vdHJhbnNwb3J0cy93ZWJzb2NrZXQubm9kZS5qc1wiO1xuZXhwb3J0IHsgV1MgYXMgV2ViU29ja2V0IH0gZnJvbSBcIi4vdHJhbnNwb3J0cy93ZWJzb2NrZXQuanNcIjtcbmV4cG9ydCB7IFdUIGFzIFdlYlRyYW5zcG9ydCB9IGZyb20gXCIuL3RyYW5zcG9ydHMvd2VidHJhbnNwb3J0LmpzXCI7IiwiaW1wb3J0IHsgcGFyc2UgfSBmcm9tIFwiZW5naW5lLmlvLWNsaWVudFwiO1xuLyoqXG4gKiBVUkwgcGFyc2VyLlxuICpcbiAqIEBwYXJhbSB1cmkgLSB1cmxcbiAqIEBwYXJhbSBwYXRoIC0gdGhlIHJlcXVlc3QgcGF0aCBvZiB0aGUgY29ubmVjdGlvblxuICogQHBhcmFtIGxvYyAtIEFuIG9iamVjdCBtZWFudCB0byBtaW1pYyB3aW5kb3cubG9jYXRpb24uXG4gKiAgICAgICAgRGVmYXVsdHMgdG8gd2luZG93LmxvY2F0aW9uLlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gdXJsKHVyaSwgcGF0aCA9IFwiXCIsIGxvYykge1xuICBsZXQgb2JqID0gdXJpO1xuICAvLyBkZWZhdWx0IHRvIHdpbmRvdy5sb2NhdGlvblxuICBsb2MgPSBsb2MgfHwgdHlwZW9mIGxvY2F0aW9uICE9PSBcInVuZGVmaW5lZFwiICYmIGxvY2F0aW9uO1xuICBpZiAobnVsbCA9PSB1cmkpIHVyaSA9IGxvYy5wcm90b2NvbCArIFwiLy9cIiArIGxvYy5ob3N0O1xuICAvLyByZWxhdGl2ZSBwYXRoIHN1cHBvcnRcbiAgaWYgKHR5cGVvZiB1cmkgPT09IFwic3RyaW5nXCIpIHtcbiAgICBpZiAoXCIvXCIgPT09IHVyaS5jaGFyQXQoMCkpIHtcbiAgICAgIGlmIChcIi9cIiA9PT0gdXJpLmNoYXJBdCgxKSkge1xuICAgICAgICB1cmkgPSBsb2MucHJvdG9jb2wgKyB1cmk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB1cmkgPSBsb2MuaG9zdCArIHVyaTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCEvXihodHRwcz98d3NzPyk6XFwvXFwvLy50ZXN0KHVyaSkpIHtcbiAgICAgIGlmIChcInVuZGVmaW5lZFwiICE9PSB0eXBlb2YgbG9jKSB7XG4gICAgICAgIHVyaSA9IGxvYy5wcm90b2NvbCArIFwiLy9cIiArIHVyaTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHVyaSA9IFwiaHR0cHM6Ly9cIiArIHVyaTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gcGFyc2VcbiAgICBvYmogPSBwYXJzZSh1cmkpO1xuICB9XG4gIC8vIG1ha2Ugc3VyZSB3ZSB0cmVhdCBgbG9jYWxob3N0OjgwYCBhbmQgYGxvY2FsaG9zdGAgZXF1YWxseVxuICBpZiAoIW9iai5wb3J0KSB7XG4gICAgaWYgKC9eKGh0dHB8d3MpJC8udGVzdChvYmoucHJvdG9jb2wpKSB7XG4gICAgICBvYmoucG9ydCA9IFwiODBcIjtcbiAgICB9IGVsc2UgaWYgKC9eKGh0dHB8d3MpcyQvLnRlc3Qob2JqLnByb3RvY29sKSkge1xuICAgICAgb2JqLnBvcnQgPSBcIjQ0M1wiO1xuICAgIH1cbiAgfVxuICBvYmoucGF0aCA9IG9iai5wYXRoIHx8IFwiL1wiO1xuICBjb25zdCBpcHY2ID0gb2JqLmhvc3QuaW5kZXhPZihcIjpcIikgIT09IC0xO1xuICBjb25zdCBob3N0ID0gaXB2NiA/IFwiW1wiICsgb2JqLmhvc3QgKyBcIl1cIiA6IG9iai5ob3N0O1xuICAvLyBkZWZpbmUgdW5pcXVlIGlkXG4gIG9iai5pZCA9IG9iai5wcm90b2NvbCArIFwiOi8vXCIgKyBob3N0ICsgXCI6XCIgKyBvYmoucG9ydCArIHBhdGg7XG4gIC8vIGRlZmluZSBocmVmXG4gIG9iai5ocmVmID0gb2JqLnByb3RvY29sICsgXCI6Ly9cIiArIGhvc3QgKyAobG9jICYmIGxvYy5wb3J0ID09PSBvYmoucG9ydCA/IFwiXCIgOiBcIjpcIiArIG9iai5wb3J0KTtcbiAgcmV0dXJuIG9iajtcbn0iLCJpbXBvcnQgeyBFbWl0dGVyIH0gZnJvbSBcIkBzb2NrZXQuaW8vY29tcG9uZW50LWVtaXR0ZXJcIjtcbmltcG9ydCB7IGRlY29uc3RydWN0UGFja2V0LCByZWNvbnN0cnVjdFBhY2tldCB9IGZyb20gXCIuL2JpbmFyeS5qc1wiO1xuaW1wb3J0IHsgaXNCaW5hcnksIGhhc0JpbmFyeSB9IGZyb20gXCIuL2lzLWJpbmFyeS5qc1wiO1xuLyoqXG4gKiBUaGVzZSBzdHJpbmdzIG11c3Qgbm90IGJlIHVzZWQgYXMgZXZlbnQgbmFtZXMsIGFzIHRoZXkgaGF2ZSBhIHNwZWNpYWwgbWVhbmluZy5cbiAqL1xuY29uc3QgUkVTRVJWRURfRVZFTlRTID0gW1wiY29ubmVjdFwiLFxuLy8gdXNlZCBvbiB0aGUgY2xpZW50IHNpZGVcblwiY29ubmVjdF9lcnJvclwiLFxuLy8gdXNlZCBvbiB0aGUgY2xpZW50IHNpZGVcblwiZGlzY29ubmVjdFwiLFxuLy8gdXNlZCBvbiBib3RoIHNpZGVzXG5cImRpc2Nvbm5lY3RpbmdcIixcbi8vIHVzZWQgb24gdGhlIHNlcnZlciBzaWRlXG5cIm5ld0xpc3RlbmVyXCIsXG4vLyB1c2VkIGJ5IHRoZSBOb2RlLmpzIEV2ZW50RW1pdHRlclxuXCJyZW1vdmVMaXN0ZW5lclwiIC8vIHVzZWQgYnkgdGhlIE5vZGUuanMgRXZlbnRFbWl0dGVyXG5dO1xuLyoqXG4gKiBQcm90b2NvbCB2ZXJzaW9uLlxuICpcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHByb3RvY29sID0gNTtcbmV4cG9ydCB2YXIgUGFja2V0VHlwZSA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoUGFja2V0VHlwZSkge1xuICBQYWNrZXRUeXBlW1BhY2tldFR5cGVbXCJDT05ORUNUXCJdID0gMF0gPSBcIkNPTk5FQ1RcIjtcbiAgUGFja2V0VHlwZVtQYWNrZXRUeXBlW1wiRElTQ09OTkVDVFwiXSA9IDFdID0gXCJESVNDT05ORUNUXCI7XG4gIFBhY2tldFR5cGVbUGFja2V0VHlwZVtcIkVWRU5UXCJdID0gMl0gPSBcIkVWRU5UXCI7XG4gIFBhY2tldFR5cGVbUGFja2V0VHlwZVtcIkFDS1wiXSA9IDNdID0gXCJBQ0tcIjtcbiAgUGFja2V0VHlwZVtQYWNrZXRUeXBlW1wiQ09OTkVDVF9FUlJPUlwiXSA9IDRdID0gXCJDT05ORUNUX0VSUk9SXCI7XG4gIFBhY2tldFR5cGVbUGFja2V0VHlwZVtcIkJJTkFSWV9FVkVOVFwiXSA9IDVdID0gXCJCSU5BUllfRVZFTlRcIjtcbiAgUGFja2V0VHlwZVtQYWNrZXRUeXBlW1wiQklOQVJZX0FDS1wiXSA9IDZdID0gXCJCSU5BUllfQUNLXCI7XG4gIHJldHVybiBQYWNrZXRUeXBlO1xufShQYWNrZXRUeXBlIHx8IHt9KTtcbi8qKlxuICogQSBzb2NrZXQuaW8gRW5jb2RlciBpbnN0YW5jZVxuICovXG5leHBvcnQgY2xhc3MgRW5jb2RlciB7XG4gIC8qKlxuICAgKiBFbmNvZGVyIGNvbnN0cnVjdG9yXG4gICAqXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb259IHJlcGxhY2VyIC0gY3VzdG9tIHJlcGxhY2VyIHRvIHBhc3MgZG93biB0byBKU09OLnBhcnNlXG4gICAqL1xuICBjb25zdHJ1Y3RvcihyZXBsYWNlcikge1xuICAgIHRoaXMucmVwbGFjZXIgPSByZXBsYWNlcjtcbiAgfVxuICAvKipcbiAgICogRW5jb2RlIGEgcGFja2V0IGFzIGEgc2luZ2xlIHN0cmluZyBpZiBub24tYmluYXJ5LCBvciBhcyBhXG4gICAqIGJ1ZmZlciBzZXF1ZW5jZSwgZGVwZW5kaW5nIG9uIHBhY2tldCB0eXBlLlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gb2JqIC0gcGFja2V0IG9iamVjdFxuICAgKi9cbiAgZW5jb2RlKG9iaikge1xuICAgIGlmIChvYmoudHlwZSA9PT0gUGFja2V0VHlwZS5FVkVOVCB8fCBvYmoudHlwZSA9PT0gUGFja2V0VHlwZS5BQ0spIHtcbiAgICAgIGlmIChoYXNCaW5hcnkob2JqKSkge1xuICAgICAgICByZXR1cm4gdGhpcy5lbmNvZGVBc0JpbmFyeSh7XG4gICAgICAgICAgdHlwZTogb2JqLnR5cGUgPT09IFBhY2tldFR5cGUuRVZFTlQgPyBQYWNrZXRUeXBlLkJJTkFSWV9FVkVOVCA6IFBhY2tldFR5cGUuQklOQVJZX0FDSyxcbiAgICAgICAgICBuc3A6IG9iai5uc3AsXG4gICAgICAgICAgZGF0YTogb2JqLmRhdGEsXG4gICAgICAgICAgaWQ6IG9iai5pZFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIFt0aGlzLmVuY29kZUFzU3RyaW5nKG9iaildO1xuICB9XG4gIC8qKlxuICAgKiBFbmNvZGUgcGFja2V0IGFzIHN0cmluZy5cbiAgICovXG4gIGVuY29kZUFzU3RyaW5nKG9iaikge1xuICAgIC8vIGZpcnN0IGlzIHR5cGVcbiAgICBsZXQgc3RyID0gXCJcIiArIG9iai50eXBlO1xuICAgIC8vIGF0dGFjaG1lbnRzIGlmIHdlIGhhdmUgdGhlbVxuICAgIGlmIChvYmoudHlwZSA9PT0gUGFja2V0VHlwZS5CSU5BUllfRVZFTlQgfHwgb2JqLnR5cGUgPT09IFBhY2tldFR5cGUuQklOQVJZX0FDSykge1xuICAgICAgc3RyICs9IG9iai5hdHRhY2htZW50cyArIFwiLVwiO1xuICAgIH1cbiAgICAvLyBpZiB3ZSBoYXZlIGEgbmFtZXNwYWNlIG90aGVyIHRoYW4gYC9gXG4gICAgLy8gd2UgYXBwZW5kIGl0IGZvbGxvd2VkIGJ5IGEgY29tbWEgYCxgXG4gICAgaWYgKG9iai5uc3AgJiYgXCIvXCIgIT09IG9iai5uc3ApIHtcbiAgICAgIHN0ciArPSBvYmoubnNwICsgXCIsXCI7XG4gICAgfVxuICAgIC8vIGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5IHRoZSBpZFxuICAgIGlmIChudWxsICE9IG9iai5pZCkge1xuICAgICAgc3RyICs9IG9iai5pZDtcbiAgICB9XG4gICAgLy8ganNvbiBkYXRhXG4gICAgaWYgKG51bGwgIT0gb2JqLmRhdGEpIHtcbiAgICAgIHN0ciArPSBKU09OLnN0cmluZ2lmeShvYmouZGF0YSwgdGhpcy5yZXBsYWNlcik7XG4gICAgfVxuICAgIHJldHVybiBzdHI7XG4gIH1cbiAgLyoqXG4gICAqIEVuY29kZSBwYWNrZXQgYXMgJ2J1ZmZlciBzZXF1ZW5jZScgYnkgcmVtb3ZpbmcgYmxvYnMsIGFuZFxuICAgKiBkZWNvbnN0cnVjdGluZyBwYWNrZXQgaW50byBvYmplY3Qgd2l0aCBwbGFjZWhvbGRlcnMgYW5kXG4gICAqIGEgbGlzdCBvZiBidWZmZXJzLlxuICAgKi9cbiAgZW5jb2RlQXNCaW5hcnkob2JqKSB7XG4gICAgY29uc3QgZGVjb25zdHJ1Y3Rpb24gPSBkZWNvbnN0cnVjdFBhY2tldChvYmopO1xuICAgIGNvbnN0IHBhY2sgPSB0aGlzLmVuY29kZUFzU3RyaW5nKGRlY29uc3RydWN0aW9uLnBhY2tldCk7XG4gICAgY29uc3QgYnVmZmVycyA9IGRlY29uc3RydWN0aW9uLmJ1ZmZlcnM7XG4gICAgYnVmZmVycy51bnNoaWZ0KHBhY2spOyAvLyBhZGQgcGFja2V0IGluZm8gdG8gYmVnaW5uaW5nIG9mIGRhdGEgbGlzdFxuICAgIHJldHVybiBidWZmZXJzOyAvLyB3cml0ZSBhbGwgdGhlIGJ1ZmZlcnNcbiAgfVxufVxuLyoqXG4gKiBBIHNvY2tldC5pbyBEZWNvZGVyIGluc3RhbmNlXG4gKlxuICogQHJldHVybiB7T2JqZWN0fSBkZWNvZGVyXG4gKi9cbmV4cG9ydCBjbGFzcyBEZWNvZGVyIGV4dGVuZHMgRW1pdHRlciB7XG4gIC8qKlxuICAgKiBEZWNvZGVyIGNvbnN0cnVjdG9yXG4gICAqL1xuICBjb25zdHJ1Y3RvcihvcHRzKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLm9wdHMgPSBPYmplY3QuYXNzaWduKHtcbiAgICAgIHJldml2ZXI6IHVuZGVmaW5lZCxcbiAgICAgIG1heEF0dGFjaG1lbnRzOiAxMFxuICAgIH0sIHR5cGVvZiBvcHRzID09PSBcImZ1bmN0aW9uXCIgPyB7XG4gICAgICByZXZpdmVyOiBvcHRzXG4gICAgfSA6IG9wdHMpO1xuICB9XG4gIC8qKlxuICAgKiBEZWNvZGVzIGFuIGVuY29kZWQgcGFja2V0IHN0cmluZyBpbnRvIHBhY2tldCBKU09OLlxuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ30gb2JqIC0gZW5jb2RlZCBwYWNrZXRcbiAgICovXG4gIGFkZChvYmopIHtcbiAgICBsZXQgcGFja2V0O1xuICAgIGlmICh0eXBlb2Ygb2JqID09PSBcInN0cmluZ1wiKSB7XG4gICAgICBpZiAodGhpcy5yZWNvbnN0cnVjdG9yKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcImdvdCBwbGFpbnRleHQgZGF0YSB3aGVuIHJlY29uc3RydWN0aW5nIGEgcGFja2V0XCIpO1xuICAgICAgfVxuICAgICAgcGFja2V0ID0gdGhpcy5kZWNvZGVTdHJpbmcob2JqKTtcbiAgICAgIGNvbnN0IGlzQmluYXJ5RXZlbnQgPSBwYWNrZXQudHlwZSA9PT0gUGFja2V0VHlwZS5CSU5BUllfRVZFTlQ7XG4gICAgICBpZiAoaXNCaW5hcnlFdmVudCB8fCBwYWNrZXQudHlwZSA9PT0gUGFja2V0VHlwZS5CSU5BUllfQUNLKSB7XG4gICAgICAgIHBhY2tldC50eXBlID0gaXNCaW5hcnlFdmVudCA/IFBhY2tldFR5cGUuRVZFTlQgOiBQYWNrZXRUeXBlLkFDSztcbiAgICAgICAgLy8gYmluYXJ5IHBhY2tldCdzIGpzb25cbiAgICAgICAgdGhpcy5yZWNvbnN0cnVjdG9yID0gbmV3IEJpbmFyeVJlY29uc3RydWN0b3IocGFja2V0KTtcbiAgICAgICAgLy8gbm8gYXR0YWNobWVudHMsIGxhYmVsZWQgYmluYXJ5IGJ1dCBubyBiaW5hcnkgZGF0YSB0byBmb2xsb3dcbiAgICAgICAgaWYgKHBhY2tldC5hdHRhY2htZW50cyA9PT0gMCkge1xuICAgICAgICAgIHN1cGVyLmVtaXRSZXNlcnZlZChcImRlY29kZWRcIiwgcGFja2V0KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gbm9uLWJpbmFyeSBmdWxsIHBhY2tldFxuICAgICAgICBzdXBlci5lbWl0UmVzZXJ2ZWQoXCJkZWNvZGVkXCIsIHBhY2tldCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc0JpbmFyeShvYmopIHx8IG9iai5iYXNlNjQpIHtcbiAgICAgIC8vIHJhdyBiaW5hcnkgZGF0YVxuICAgICAgaWYgKCF0aGlzLnJlY29uc3RydWN0b3IpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZ290IGJpbmFyeSBkYXRhIHdoZW4gbm90IHJlY29uc3RydWN0aW5nIGEgcGFja2V0XCIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFja2V0ID0gdGhpcy5yZWNvbnN0cnVjdG9yLnRha2VCaW5hcnlEYXRhKG9iaik7XG4gICAgICAgIGlmIChwYWNrZXQpIHtcbiAgICAgICAgICAvLyByZWNlaXZlZCBmaW5hbCBidWZmZXJcbiAgICAgICAgICB0aGlzLnJlY29uc3RydWN0b3IgPSBudWxsO1xuICAgICAgICAgIHN1cGVyLmVtaXRSZXNlcnZlZChcImRlY29kZWRcIiwgcGFja2V0KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIHR5cGU6IFwiICsgb2JqKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIERlY29kZSBhIHBhY2tldCBTdHJpbmcgKEpTT04gZGF0YSlcbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmd9IHN0clxuICAgKiBAcmV0dXJuIHtPYmplY3R9IHBhY2tldFxuICAgKi9cbiAgZGVjb2RlU3RyaW5nKHN0cikge1xuICAgIGxldCBpID0gMDtcbiAgICAvLyBsb29rIHVwIHR5cGVcbiAgICBjb25zdCBwID0ge1xuICAgICAgdHlwZTogTnVtYmVyKHN0ci5jaGFyQXQoMCkpXG4gICAgfTtcbiAgICBpZiAoUGFja2V0VHlwZVtwLnR5cGVdID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcInVua25vd24gcGFja2V0IHR5cGUgXCIgKyBwLnR5cGUpO1xuICAgIH1cbiAgICAvLyBsb29rIHVwIGF0dGFjaG1lbnRzIGlmIHR5cGUgYmluYXJ5XG4gICAgaWYgKHAudHlwZSA9PT0gUGFja2V0VHlwZS5CSU5BUllfRVZFTlQgfHwgcC50eXBlID09PSBQYWNrZXRUeXBlLkJJTkFSWV9BQ0spIHtcbiAgICAgIGNvbnN0IHN0YXJ0ID0gaSArIDE7XG4gICAgICB3aGlsZSAoc3RyLmNoYXJBdCgrK2kpICE9PSBcIi1cIiAmJiBpICE9IHN0ci5sZW5ndGgpIHt9XG4gICAgICBjb25zdCBidWYgPSBzdHIuc3Vic3RyaW5nKHN0YXJ0LCBpKTtcbiAgICAgIGlmIChidWYgIT0gTnVtYmVyKGJ1ZikgfHwgc3RyLmNoYXJBdChpKSAhPT0gXCItXCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSWxsZWdhbCBhdHRhY2htZW50c1wiKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG4gPSBOdW1iZXIoYnVmKTtcbiAgICAgIGlmICghaXNJbnRlZ2VyKG4pIHx8IG4gPCAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIklsbGVnYWwgYXR0YWNobWVudHNcIik7XG4gICAgICB9IGVsc2UgaWYgKG4gPiB0aGlzLm9wdHMubWF4QXR0YWNobWVudHMpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidG9vIG1hbnkgYXR0YWNobWVudHNcIik7XG4gICAgICB9XG4gICAgICBwLmF0dGFjaG1lbnRzID0gbjtcbiAgICB9XG4gICAgLy8gbG9vayB1cCBuYW1lc3BhY2UgKGlmIGFueSlcbiAgICBpZiAoXCIvXCIgPT09IHN0ci5jaGFyQXQoaSArIDEpKSB7XG4gICAgICBjb25zdCBzdGFydCA9IGkgKyAxO1xuICAgICAgd2hpbGUgKCsraSkge1xuICAgICAgICBjb25zdCBjID0gc3RyLmNoYXJBdChpKTtcbiAgICAgICAgaWYgKFwiLFwiID09PSBjKSBicmVhaztcbiAgICAgICAgaWYgKGkgPT09IHN0ci5sZW5ndGgpIGJyZWFrO1xuICAgICAgfVxuICAgICAgcC5uc3AgPSBzdHIuc3Vic3RyaW5nKHN0YXJ0LCBpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcC5uc3AgPSBcIi9cIjtcbiAgICB9XG4gICAgLy8gbG9vayB1cCBpZFxuICAgIGNvbnN0IG5leHQgPSBzdHIuY2hhckF0KGkgKyAxKTtcbiAgICBpZiAoXCJcIiAhPT0gbmV4dCAmJiBOdW1iZXIobmV4dCkgPT0gbmV4dCkge1xuICAgICAgY29uc3Qgc3RhcnQgPSBpICsgMTtcbiAgICAgIHdoaWxlICgrK2kpIHtcbiAgICAgICAgY29uc3QgYyA9IHN0ci5jaGFyQXQoaSk7XG4gICAgICAgIGlmIChudWxsID09IGMgfHwgTnVtYmVyKGMpICE9IGMpIHtcbiAgICAgICAgICAtLWk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGkgPT09IHN0ci5sZW5ndGgpIGJyZWFrO1xuICAgICAgfVxuICAgICAgcC5pZCA9IE51bWJlcihzdHIuc3Vic3RyaW5nKHN0YXJ0LCBpICsgMSkpO1xuICAgIH1cbiAgICAvLyBsb29rIHVwIGpzb24gZGF0YVxuICAgIGlmIChzdHIuY2hhckF0KCsraSkpIHtcbiAgICAgIGNvbnN0IHBheWxvYWQgPSB0aGlzLnRyeVBhcnNlKHN0ci5zdWJzdHIoaSkpO1xuICAgICAgaWYgKERlY29kZXIuaXNQYXlsb2FkVmFsaWQocC50eXBlLCBwYXlsb2FkKSkge1xuICAgICAgICBwLmRhdGEgPSBwYXlsb2FkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBwYXlsb2FkXCIpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcDtcbiAgfVxuICB0cnlQYXJzZShzdHIpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIEpTT04ucGFyc2Uoc3RyLCB0aGlzLm9wdHMucmV2aXZlcik7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICBzdGF0aWMgaXNQYXlsb2FkVmFsaWQodHlwZSwgcGF5bG9hZCkge1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSBQYWNrZXRUeXBlLkNPTk5FQ1Q6XG4gICAgICAgIHJldHVybiBpc09iamVjdChwYXlsb2FkKTtcbiAgICAgIGNhc2UgUGFja2V0VHlwZS5ESVNDT05ORUNUOlxuICAgICAgICByZXR1cm4gcGF5bG9hZCA9PT0gdW5kZWZpbmVkO1xuICAgICAgY2FzZSBQYWNrZXRUeXBlLkNPTk5FQ1RfRVJST1I6XG4gICAgICAgIHJldHVybiB0eXBlb2YgcGF5bG9hZCA9PT0gXCJzdHJpbmdcIiB8fCBpc09iamVjdChwYXlsb2FkKTtcbiAgICAgIGNhc2UgUGFja2V0VHlwZS5FVkVOVDpcbiAgICAgIGNhc2UgUGFja2V0VHlwZS5CSU5BUllfRVZFTlQ6XG4gICAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KHBheWxvYWQpICYmICh0eXBlb2YgcGF5bG9hZFswXSA9PT0gXCJudW1iZXJcIiB8fCB0eXBlb2YgcGF5bG9hZFswXSA9PT0gXCJzdHJpbmdcIiAmJiBSRVNFUlZFRF9FVkVOVFMuaW5kZXhPZihwYXlsb2FkWzBdKSA9PT0gLTEpO1xuICAgICAgY2FzZSBQYWNrZXRUeXBlLkFDSzpcbiAgICAgIGNhc2UgUGFja2V0VHlwZS5CSU5BUllfQUNLOlxuICAgICAgICByZXR1cm4gQXJyYXkuaXNBcnJheShwYXlsb2FkKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIERlYWxsb2NhdGVzIGEgcGFyc2VyJ3MgcmVzb3VyY2VzXG4gICAqL1xuICBkZXN0cm95KCkge1xuICAgIGlmICh0aGlzLnJlY29uc3RydWN0b3IpIHtcbiAgICAgIHRoaXMucmVjb25zdHJ1Y3Rvci5maW5pc2hlZFJlY29uc3RydWN0aW9uKCk7XG4gICAgICB0aGlzLnJlY29uc3RydWN0b3IgPSBudWxsO1xuICAgIH1cbiAgfVxufVxuLyoqXG4gKiBBIG1hbmFnZXIgb2YgYSBiaW5hcnkgZXZlbnQncyAnYnVmZmVyIHNlcXVlbmNlJy4gU2hvdWxkXG4gKiBiZSBjb25zdHJ1Y3RlZCB3aGVuZXZlciBhIHBhY2tldCBvZiB0eXBlIEJJTkFSWV9FVkVOVCBpc1xuICogZGVjb2RlZC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gcGFja2V0XG4gKiBAcmV0dXJuIHtCaW5hcnlSZWNvbnN0cnVjdG9yfSBpbml0aWFsaXplZCByZWNvbnN0cnVjdG9yXG4gKi9cbmNsYXNzIEJpbmFyeVJlY29uc3RydWN0b3Ige1xuICBjb25zdHJ1Y3RvcihwYWNrZXQpIHtcbiAgICB0aGlzLnBhY2tldCA9IHBhY2tldDtcbiAgICB0aGlzLmJ1ZmZlcnMgPSBbXTtcbiAgICB0aGlzLnJlY29uUGFjayA9IHBhY2tldDtcbiAgfVxuICAvKipcbiAgICogTWV0aG9kIHRvIGJlIGNhbGxlZCB3aGVuIGJpbmFyeSBkYXRhIHJlY2VpdmVkIGZyb20gY29ubmVjdGlvblxuICAgKiBhZnRlciBhIEJJTkFSWV9FVkVOVCBwYWNrZXQuXG4gICAqXG4gICAqIEBwYXJhbSB7QnVmZmVyIHwgQXJyYXlCdWZmZXJ9IGJpbkRhdGEgLSB0aGUgcmF3IGJpbmFyeSBkYXRhIHJlY2VpdmVkXG4gICAqIEByZXR1cm4ge251bGwgfCBPYmplY3R9IHJldHVybnMgbnVsbCBpZiBtb3JlIGJpbmFyeSBkYXRhIGlzIGV4cGVjdGVkIG9yXG4gICAqICAgYSByZWNvbnN0cnVjdGVkIHBhY2tldCBvYmplY3QgaWYgYWxsIGJ1ZmZlcnMgaGF2ZSBiZWVuIHJlY2VpdmVkLlxuICAgKi9cbiAgdGFrZUJpbmFyeURhdGEoYmluRGF0YSkge1xuICAgIHRoaXMuYnVmZmVycy5wdXNoKGJpbkRhdGEpO1xuICAgIGlmICh0aGlzLmJ1ZmZlcnMubGVuZ3RoID09PSB0aGlzLnJlY29uUGFjay5hdHRhY2htZW50cykge1xuICAgICAgLy8gZG9uZSB3aXRoIGJ1ZmZlciBsaXN0XG4gICAgICBjb25zdCBwYWNrZXQgPSByZWNvbnN0cnVjdFBhY2tldCh0aGlzLnJlY29uUGFjaywgdGhpcy5idWZmZXJzKTtcbiAgICAgIHRoaXMuZmluaXNoZWRSZWNvbnN0cnVjdGlvbigpO1xuICAgICAgcmV0dXJuIHBhY2tldDtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgLyoqXG4gICAqIENsZWFucyB1cCBiaW5hcnkgcGFja2V0IHJlY29uc3RydWN0aW9uIHZhcmlhYmxlcy5cbiAgICovXG4gIGZpbmlzaGVkUmVjb25zdHJ1Y3Rpb24oKSB7XG4gICAgdGhpcy5yZWNvblBhY2sgPSBudWxsO1xuICAgIHRoaXMuYnVmZmVycyA9IFtdO1xuICB9XG59XG5mdW5jdGlvbiBpc05hbWVzcGFjZVZhbGlkKG5zcCkge1xuICByZXR1cm4gdHlwZW9mIG5zcCA9PT0gXCJzdHJpbmdcIjtcbn1cbi8vIHNlZSBodHRwczovL2Nhbml1c2UuY29tL21kbi1qYXZhc2NyaXB0X2J1aWx0aW5zX251bWJlcl9pc2ludGVnZXJcbmNvbnN0IGlzSW50ZWdlciA9IE51bWJlci5pc0ludGVnZXIgfHwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIgJiYgaXNGaW5pdGUodmFsdWUpICYmIE1hdGguZmxvb3IodmFsdWUpID09PSB2YWx1ZTtcbn07XG5mdW5jdGlvbiBpc0Fja0lkVmFsaWQoaWQpIHtcbiAgcmV0dXJuIGlkID09PSB1bmRlZmluZWQgfHwgaXNJbnRlZ2VyKGlkKTtcbn1cbi8vIHNlZSBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy84NTExMjgxL2NoZWNrLWlmLWEtdmFsdWUtaXMtYW4tb2JqZWN0LWluLWphdmFzY3JpcHRcbmZ1bmN0aW9uIGlzT2JqZWN0KHZhbHVlKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpID09PSBcIltvYmplY3QgT2JqZWN0XVwiO1xufVxuZnVuY3Rpb24gaXNEYXRhVmFsaWQodHlwZSwgcGF5bG9hZCkge1xuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlIFBhY2tldFR5cGUuQ09OTkVDVDpcbiAgICAgIHJldHVybiBwYXlsb2FkID09PSB1bmRlZmluZWQgfHwgaXNPYmplY3QocGF5bG9hZCk7XG4gICAgY2FzZSBQYWNrZXRUeXBlLkRJU0NPTk5FQ1Q6XG4gICAgICByZXR1cm4gcGF5bG9hZCA9PT0gdW5kZWZpbmVkO1xuICAgIGNhc2UgUGFja2V0VHlwZS5FVkVOVDpcbiAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KHBheWxvYWQpICYmICh0eXBlb2YgcGF5bG9hZFswXSA9PT0gXCJudW1iZXJcIiB8fCB0eXBlb2YgcGF5bG9hZFswXSA9PT0gXCJzdHJpbmdcIiAmJiBSRVNFUlZFRF9FVkVOVFMuaW5kZXhPZihwYXlsb2FkWzBdKSA9PT0gLTEpO1xuICAgIGNhc2UgUGFja2V0VHlwZS5BQ0s6XG4gICAgICByZXR1cm4gQXJyYXkuaXNBcnJheShwYXlsb2FkKTtcbiAgICBjYXNlIFBhY2tldFR5cGUuQ09OTkVDVF9FUlJPUjpcbiAgICAgIHJldHVybiB0eXBlb2YgcGF5bG9hZCA9PT0gXCJzdHJpbmdcIiB8fCBpc09iamVjdChwYXlsb2FkKTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5leHBvcnQgZnVuY3Rpb24gaXNQYWNrZXRWYWxpZChwYWNrZXQpIHtcbiAgcmV0dXJuIGlzTmFtZXNwYWNlVmFsaWQocGFja2V0Lm5zcCkgJiYgaXNBY2tJZFZhbGlkKHBhY2tldC5pZCkgJiYgaXNEYXRhVmFsaWQocGFja2V0LnR5cGUsIHBhY2tldC5kYXRhKTtcbn0iLCJjb25zdCB3aXRoTmF0aXZlQXJyYXlCdWZmZXIgPSB0eXBlb2YgQXJyYXlCdWZmZXIgPT09IFwiZnVuY3Rpb25cIjtcbmNvbnN0IGlzVmlldyA9IG9iaiA9PiB7XG4gIHJldHVybiB0eXBlb2YgQXJyYXlCdWZmZXIuaXNWaWV3ID09PSBcImZ1bmN0aW9uXCIgPyBBcnJheUJ1ZmZlci5pc1ZpZXcob2JqKSA6IG9iai5idWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcjtcbn07XG5jb25zdCB0b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5jb25zdCB3aXRoTmF0aXZlQmxvYiA9IHR5cGVvZiBCbG9iID09PSBcImZ1bmN0aW9uXCIgfHwgdHlwZW9mIEJsb2IgIT09IFwidW5kZWZpbmVkXCIgJiYgdG9TdHJpbmcuY2FsbChCbG9iKSA9PT0gXCJbb2JqZWN0IEJsb2JDb25zdHJ1Y3Rvcl1cIjtcbmNvbnN0IHdpdGhOYXRpdmVGaWxlID0gdHlwZW9mIEZpbGUgPT09IFwiZnVuY3Rpb25cIiB8fCB0eXBlb2YgRmlsZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0b1N0cmluZy5jYWxsKEZpbGUpID09PSBcIltvYmplY3QgRmlsZUNvbnN0cnVjdG9yXVwiO1xuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgb2JqIGlzIGEgQnVmZmVyLCBhbiBBcnJheUJ1ZmZlciwgYSBCbG9iIG9yIGEgRmlsZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNCaW5hcnkob2JqKSB7XG4gIHJldHVybiB3aXRoTmF0aXZlQXJyYXlCdWZmZXIgJiYgKG9iaiBpbnN0YW5jZW9mIEFycmF5QnVmZmVyIHx8IGlzVmlldyhvYmopKSB8fCB3aXRoTmF0aXZlQmxvYiAmJiBvYmogaW5zdGFuY2VvZiBCbG9iIHx8IHdpdGhOYXRpdmVGaWxlICYmIG9iaiBpbnN0YW5jZW9mIEZpbGU7XG59XG5leHBvcnQgZnVuY3Rpb24gaGFzQmluYXJ5KG9iaiwgdG9KU09OKSB7XG4gIGlmICghb2JqIHx8IHR5cGVvZiBvYmogIT09IFwib2JqZWN0XCIpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgIGZvciAobGV0IGkgPSAwLCBsID0gb2JqLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgaWYgKGhhc0JpbmFyeShvYmpbaV0pKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKGlzQmluYXJ5KG9iaikpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAob2JqLnRvSlNPTiAmJiB0eXBlb2Ygb2JqLnRvSlNPTiA9PT0gXCJmdW5jdGlvblwiICYmIGFyZ3VtZW50cy5sZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4gaGFzQmluYXJ5KG9iai50b0pTT04oKSwgdHJ1ZSk7XG4gIH1cbiAgZm9yIChjb25zdCBrZXkgaW4gb2JqKSB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkgJiYgaGFzQmluYXJ5KG9ialtrZXldKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn0iLCJpbXBvcnQgeyBpc0JpbmFyeSB9IGZyb20gXCIuL2lzLWJpbmFyeS5qc1wiO1xuLyoqXG4gKiBSZXBsYWNlcyBldmVyeSBCdWZmZXIgfCBBcnJheUJ1ZmZlciB8IEJsb2IgfCBGaWxlIGluIHBhY2tldCB3aXRoIGEgbnVtYmVyZWQgcGxhY2Vob2xkZXIuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHBhY2tldCAtIHNvY2tldC5pbyBldmVudCBwYWNrZXRcbiAqIEByZXR1cm4ge09iamVjdH0gd2l0aCBkZWNvbnN0cnVjdGVkIHBhY2tldCBhbmQgbGlzdCBvZiBidWZmZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWNvbnN0cnVjdFBhY2tldChwYWNrZXQpIHtcbiAgY29uc3QgYnVmZmVycyA9IFtdO1xuICBjb25zdCBwYWNrZXREYXRhID0gcGFja2V0LmRhdGE7XG4gIGNvbnN0IHBhY2sgPSBwYWNrZXQ7XG4gIHBhY2suZGF0YSA9IF9kZWNvbnN0cnVjdFBhY2tldChwYWNrZXREYXRhLCBidWZmZXJzKTtcbiAgcGFjay5hdHRhY2htZW50cyA9IGJ1ZmZlcnMubGVuZ3RoOyAvLyBudW1iZXIgb2YgYmluYXJ5ICdhdHRhY2htZW50cydcbiAgcmV0dXJuIHtcbiAgICBwYWNrZXQ6IHBhY2ssXG4gICAgYnVmZmVyczogYnVmZmVyc1xuICB9O1xufVxuZnVuY3Rpb24gX2RlY29uc3RydWN0UGFja2V0KGRhdGEsIGJ1ZmZlcnMpIHtcbiAgaWYgKCFkYXRhKSByZXR1cm4gZGF0YTtcbiAgaWYgKGlzQmluYXJ5KGRhdGEpKSB7XG4gICAgY29uc3QgcGxhY2Vob2xkZXIgPSB7XG4gICAgICBfcGxhY2Vob2xkZXI6IHRydWUsXG4gICAgICBudW06IGJ1ZmZlcnMubGVuZ3RoXG4gICAgfTtcbiAgICBidWZmZXJzLnB1c2goZGF0YSk7XG4gICAgcmV0dXJuIHBsYWNlaG9sZGVyO1xuICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICBjb25zdCBuZXdEYXRhID0gbmV3IEFycmF5KGRhdGEubGVuZ3RoKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgIG5ld0RhdGFbaV0gPSBfZGVjb25zdHJ1Y3RQYWNrZXQoZGF0YVtpXSwgYnVmZmVycyk7XG4gICAgfVxuICAgIHJldHVybiBuZXdEYXRhO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBkYXRhID09PSBcIm9iamVjdFwiICYmICEoZGF0YSBpbnN0YW5jZW9mIERhdGUpKSB7XG4gICAgY29uc3QgbmV3RGF0YSA9IHt9O1xuICAgIGZvciAoY29uc3Qga2V5IGluIGRhdGEpIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZGF0YSwga2V5KSkge1xuICAgICAgICBuZXdEYXRhW2tleV0gPSBfZGVjb25zdHJ1Y3RQYWNrZXQoZGF0YVtrZXldLCBidWZmZXJzKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5ld0RhdGE7XG4gIH1cbiAgcmV0dXJuIGRhdGE7XG59XG4vKipcbiAqIFJlY29uc3RydWN0cyBhIGJpbmFyeSBwYWNrZXQgZnJvbSBpdHMgcGxhY2Vob2xkZXIgcGFja2V0IGFuZCBidWZmZXJzXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHBhY2tldCAtIGV2ZW50IHBhY2tldCB3aXRoIHBsYWNlaG9sZGVyc1xuICogQHBhcmFtIHtBcnJheX0gYnVmZmVycyAtIGJpbmFyeSBidWZmZXJzIHRvIHB1dCBpbiBwbGFjZWhvbGRlciBwb3NpdGlvbnNcbiAqIEByZXR1cm4ge09iamVjdH0gcmVjb25zdHJ1Y3RlZCBwYWNrZXRcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlY29uc3RydWN0UGFja2V0KHBhY2tldCwgYnVmZmVycykge1xuICBwYWNrZXQuZGF0YSA9IF9yZWNvbnN0cnVjdFBhY2tldChwYWNrZXQuZGF0YSwgYnVmZmVycyk7XG4gIGRlbGV0ZSBwYWNrZXQuYXR0YWNobWVudHM7IC8vIG5vIGxvbmdlciB1c2VmdWxcbiAgcmV0dXJuIHBhY2tldDtcbn1cbmZ1bmN0aW9uIF9yZWNvbnN0cnVjdFBhY2tldChkYXRhLCBidWZmZXJzKSB7XG4gIGlmICghZGF0YSkgcmV0dXJuIGRhdGE7XG4gIGlmIChkYXRhICYmIGRhdGEuX3BsYWNlaG9sZGVyID09PSB0cnVlKSB7XG4gICAgY29uc3QgaXNJbmRleFZhbGlkID0gdHlwZW9mIGRhdGEubnVtID09PSBcIm51bWJlclwiICYmIGRhdGEubnVtID49IDAgJiYgZGF0YS5udW0gPCBidWZmZXJzLmxlbmd0aDtcbiAgICBpZiAoaXNJbmRleFZhbGlkKSB7XG4gICAgICByZXR1cm4gYnVmZmVyc1tkYXRhLm51bV07IC8vIGFwcHJvcHJpYXRlIGJ1ZmZlciAoc2hvdWxkIGJlIG5hdHVyYWwgb3JkZXIgYW55d2F5KVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJpbGxlZ2FsIGF0dGFjaG1lbnRzXCIpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICBkYXRhW2ldID0gX3JlY29uc3RydWN0UGFja2V0KGRhdGFbaV0sIGJ1ZmZlcnMpO1xuICAgIH1cbiAgfSBlbHNlIGlmICh0eXBlb2YgZGF0YSA9PT0gXCJvYmplY3RcIikge1xuICAgIGZvciAoY29uc3Qga2V5IGluIGRhdGEpIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZGF0YSwga2V5KSkge1xuICAgICAgICBkYXRhW2tleV0gPSBfcmVjb25zdHJ1Y3RQYWNrZXQoZGF0YVtrZXldLCBidWZmZXJzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGRhdGE7XG59IiwiZXhwb3J0IGZ1bmN0aW9uIG9uKG9iaiwgZXYsIGZuKSB7XG4gIG9iai5vbihldiwgZm4pO1xuICByZXR1cm4gZnVuY3Rpb24gc3ViRGVzdHJveSgpIHtcbiAgICBvYmoub2ZmKGV2LCBmbik7XG4gIH07XG59IiwiaW1wb3J0IHsgUGFja2V0VHlwZSB9IGZyb20gXCJzb2NrZXQuaW8tcGFyc2VyXCI7XG5pbXBvcnQgeyBvbiB9IGZyb20gXCIuL29uLmpzXCI7XG5pbXBvcnQgeyBFbWl0dGVyIH0gZnJvbSBcIkBzb2NrZXQuaW8vY29tcG9uZW50LWVtaXR0ZXJcIjtcbi8qKlxuICogSW50ZXJuYWwgZXZlbnRzLlxuICogVGhlc2UgZXZlbnRzIGNhbid0IGJlIGVtaXR0ZWQgYnkgdGhlIHVzZXIuXG4gKi9cbmNvbnN0IFJFU0VSVkVEX0VWRU5UUyA9IE9iamVjdC5mcmVlemUoe1xuICBjb25uZWN0OiAxLFxuICBjb25uZWN0X2Vycm9yOiAxLFxuICBkaXNjb25uZWN0OiAxLFxuICBkaXNjb25uZWN0aW5nOiAxLFxuICAvLyBFdmVudEVtaXR0ZXIgcmVzZXJ2ZWQgZXZlbnRzOiBodHRwczovL25vZGVqcy5vcmcvYXBpL2V2ZW50cy5odG1sI2V2ZW50c19ldmVudF9uZXdsaXN0ZW5lclxuICBuZXdMaXN0ZW5lcjogMSxcbiAgcmVtb3ZlTGlzdGVuZXI6IDFcbn0pO1xuLyoqXG4gKiBBIFNvY2tldCBpcyB0aGUgZnVuZGFtZW50YWwgY2xhc3MgZm9yIGludGVyYWN0aW5nIHdpdGggdGhlIHNlcnZlci5cbiAqXG4gKiBBIFNvY2tldCBiZWxvbmdzIHRvIGEgY2VydGFpbiBOYW1lc3BhY2UgKGJ5IGRlZmF1bHQgLykgYW5kIHVzZXMgYW4gdW5kZXJseWluZyB7QGxpbmsgTWFuYWdlcn0gdG8gY29tbXVuaWNhdGUuXG4gKlxuICogQGV4YW1wbGVcbiAqIGNvbnN0IHNvY2tldCA9IGlvKCk7XG4gKlxuICogc29ja2V0Lm9uKFwiY29ubmVjdFwiLCAoKSA9PiB7XG4gKiAgIGNvbnNvbGUubG9nKFwiY29ubmVjdGVkXCIpO1xuICogfSk7XG4gKlxuICogLy8gc2VuZCBhbiBldmVudCB0byB0aGUgc2VydmVyXG4gKiBzb2NrZXQuZW1pdChcImZvb1wiLCBcImJhclwiKTtcbiAqXG4gKiBzb2NrZXQub24oXCJmb29iYXJcIiwgKCkgPT4ge1xuICogICAvLyBhbiBldmVudCB3YXMgcmVjZWl2ZWQgZnJvbSB0aGUgc2VydmVyXG4gKiB9KTtcbiAqXG4gKiAvLyB1cG9uIGRpc2Nvbm5lY3Rpb25cbiAqIHNvY2tldC5vbihcImRpc2Nvbm5lY3RcIiwgKHJlYXNvbikgPT4ge1xuICogICBjb25zb2xlLmxvZyhgZGlzY29ubmVjdGVkIGR1ZSB0byAke3JlYXNvbn1gKTtcbiAqIH0pO1xuICovXG5leHBvcnQgY2xhc3MgU29ja2V0IGV4dGVuZHMgRW1pdHRlciB7XG4gIC8qKlxuICAgKiBgU29ja2V0YCBjb25zdHJ1Y3Rvci5cbiAgICovXG4gIGNvbnN0cnVjdG9yKGlvLCBuc3AsIG9wdHMpIHtcbiAgICBzdXBlcigpO1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIHNvY2tldCBpcyBjdXJyZW50bHkgY29ubmVjdGVkIHRvIHRoZSBzZXJ2ZXIuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGNvbnN0IHNvY2tldCA9IGlvKCk7XG4gICAgICpcbiAgICAgKiBzb2NrZXQub24oXCJjb25uZWN0XCIsICgpID0+IHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKHNvY2tldC5jb25uZWN0ZWQpOyAvLyB0cnVlXG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiBzb2NrZXQub24oXCJkaXNjb25uZWN0XCIsICgpID0+IHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKHNvY2tldC5jb25uZWN0ZWQpOyAvLyBmYWxzZVxuICAgICAqIH0pO1xuICAgICAqL1xuICAgIHRoaXMuY29ubmVjdGVkID0gZmFsc2U7XG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgY29ubmVjdGlvbiBzdGF0ZSB3YXMgcmVjb3ZlcmVkIGFmdGVyIGEgdGVtcG9yYXJ5IGRpc2Nvbm5lY3Rpb24uIEluIHRoYXQgY2FzZSwgYW55IG1pc3NlZCBwYWNrZXRzIHdpbGxcbiAgICAgKiBiZSB0cmFuc21pdHRlZCBieSB0aGUgc2VydmVyLlxuICAgICAqL1xuICAgIHRoaXMucmVjb3ZlcmVkID0gZmFsc2U7XG4gICAgLyoqXG4gICAgICogQnVmZmVyIGZvciBwYWNrZXRzIHJlY2VpdmVkIGJlZm9yZSB0aGUgQ09OTkVDVCBwYWNrZXRcbiAgICAgKi9cbiAgICB0aGlzLnJlY2VpdmVCdWZmZXIgPSBbXTtcbiAgICAvKipcbiAgICAgKiBCdWZmZXIgZm9yIHBhY2tldHMgdGhhdCB3aWxsIGJlIHNlbnQgb25jZSB0aGUgc29ja2V0IGlzIGNvbm5lY3RlZFxuICAgICAqL1xuICAgIHRoaXMuc2VuZEJ1ZmZlciA9IFtdO1xuICAgIC8qKlxuICAgICAqIFRoZSBxdWV1ZSBvZiBwYWNrZXRzIHRvIGJlIHNlbnQgd2l0aCByZXRyeSBpbiBjYXNlIG9mIGZhaWx1cmUuXG4gICAgICpcbiAgICAgKiBQYWNrZXRzIGFyZSBzZW50IG9uZSBieSBvbmUsIGVhY2ggd2FpdGluZyBmb3IgdGhlIHNlcnZlciBhY2tub3dsZWRnZW1lbnQsIGluIG9yZGVyIHRvIGd1YXJhbnRlZSB0aGUgZGVsaXZlcnkgb3JkZXIuXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9xdWV1ZSA9IFtdO1xuICAgIC8qKlxuICAgICAqIEEgc2VxdWVuY2UgdG8gZ2VuZXJhdGUgdGhlIElEIG9mIHRoZSB7QGxpbmsgUXVldWVkUGFja2V0fS5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3F1ZXVlU2VxID0gMDtcbiAgICB0aGlzLmlkcyA9IDA7XG4gICAgLyoqXG4gICAgICogQSBtYXAgY29udGFpbmluZyBhY2tub3dsZWRnZW1lbnQgaGFuZGxlcnMuXG4gICAgICpcbiAgICAgKiBUaGUgYHdpdGhFcnJvcmAgYXR0cmlidXRlIGlzIHVzZWQgdG8gZGlmZmVyZW50aWF0ZSBoYW5kbGVycyB0aGF0IGFjY2VwdCBhbiBlcnJvciBhcyBmaXJzdCBhcmd1bWVudDpcbiAgICAgKlxuICAgICAqIC0gYHNvY2tldC5lbWl0KFwidGVzdFwiLCAoZXJyLCB2YWx1ZSkgPT4geyAuLi4gfSlgIHdpdGggYGFja1RpbWVvdXRgIG9wdGlvblxuICAgICAqIC0gYHNvY2tldC50aW1lb3V0KDUwMDApLmVtaXQoXCJ0ZXN0XCIsIChlcnIsIHZhbHVlKSA9PiB7IC4uLiB9KWBcbiAgICAgKiAtIGBjb25zdCB2YWx1ZSA9IGF3YWl0IHNvY2tldC5lbWl0V2l0aEFjayhcInRlc3RcIilgXG4gICAgICpcbiAgICAgKiBGcm9tIHRob3NlIHRoYXQgZG9uJ3Q6XG4gICAgICpcbiAgICAgKiAtIGBzb2NrZXQuZW1pdChcInRlc3RcIiwgKHZhbHVlKSA9PiB7IC4uLiB9KTtgXG4gICAgICpcbiAgICAgKiBJbiB0aGUgZmlyc3QgY2FzZSwgdGhlIGhhbmRsZXJzIHdpbGwgYmUgY2FsbGVkIHdpdGggYW4gZXJyb3Igd2hlbjpcbiAgICAgKlxuICAgICAqIC0gdGhlIHRpbWVvdXQgaXMgcmVhY2hlZFxuICAgICAqIC0gdGhlIHNvY2tldCBnZXRzIGRpc2Nvbm5lY3RlZFxuICAgICAqXG4gICAgICogSW4gdGhlIHNlY29uZCBjYXNlLCB0aGUgaGFuZGxlcnMgd2lsbCBiZSBzaW1wbHkgZGlzY2FyZGVkIHVwb24gZGlzY29ubmVjdGlvbiwgc2luY2UgdGhlIGNsaWVudCB3aWxsIG5ldmVyIHJlY2VpdmVcbiAgICAgKiBhbiBhY2tub3dsZWRnZW1lbnQgZnJvbSB0aGUgc2VydmVyLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmFja3MgPSB7fTtcbiAgICB0aGlzLmZsYWdzID0ge307XG4gICAgdGhpcy5pbyA9IGlvO1xuICAgIHRoaXMubnNwID0gbnNwO1xuICAgIGlmIChvcHRzICYmIG9wdHMuYXV0aCkge1xuICAgICAgdGhpcy5hdXRoID0gb3B0cy5hdXRoO1xuICAgIH1cbiAgICB0aGlzLl9vcHRzID0gT2JqZWN0LmFzc2lnbih7fSwgb3B0cyk7XG4gICAgaWYgKHRoaXMuaW8uX2F1dG9Db25uZWN0KSB0aGlzLm9wZW4oKTtcbiAgfVxuICAvKipcbiAgICogV2hldGhlciB0aGUgc29ja2V0IGlzIGN1cnJlbnRseSBkaXNjb25uZWN0ZWRcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogY29uc3Qgc29ja2V0ID0gaW8oKTtcbiAgICpcbiAgICogc29ja2V0Lm9uKFwiY29ubmVjdFwiLCAoKSA9PiB7XG4gICAqICAgY29uc29sZS5sb2coc29ja2V0LmRpc2Nvbm5lY3RlZCk7IC8vIGZhbHNlXG4gICAqIH0pO1xuICAgKlxuICAgKiBzb2NrZXQub24oXCJkaXNjb25uZWN0XCIsICgpID0+IHtcbiAgICogICBjb25zb2xlLmxvZyhzb2NrZXQuZGlzY29ubmVjdGVkKTsgLy8gdHJ1ZVxuICAgKiB9KTtcbiAgICovXG4gIGdldCBkaXNjb25uZWN0ZWQoKSB7XG4gICAgcmV0dXJuICF0aGlzLmNvbm5lY3RlZDtcbiAgfVxuICAvKipcbiAgICogU3Vic2NyaWJlIHRvIG9wZW4sIGNsb3NlIGFuZCBwYWNrZXQgZXZlbnRzXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBzdWJFdmVudHMoKSB7XG4gICAgaWYgKHRoaXMuc3VicykgcmV0dXJuO1xuICAgIGNvbnN0IGlvID0gdGhpcy5pbztcbiAgICB0aGlzLnN1YnMgPSBbb24oaW8sIFwib3BlblwiLCB0aGlzLm9ub3Blbi5iaW5kKHRoaXMpKSwgb24oaW8sIFwicGFja2V0XCIsIHRoaXMub25wYWNrZXQuYmluZCh0aGlzKSksIG9uKGlvLCBcImVycm9yXCIsIHRoaXMub25lcnJvci5iaW5kKHRoaXMpKSwgb24oaW8sIFwiY2xvc2VcIiwgdGhpcy5vbmNsb3NlLmJpbmQodGhpcykpXTtcbiAgfVxuICAvKipcbiAgICogV2hldGhlciB0aGUgU29ja2V0IHdpbGwgdHJ5IHRvIHJlY29ubmVjdCB3aGVuIGl0cyBNYW5hZ2VyIGNvbm5lY3RzIG9yIHJlY29ubmVjdHMuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGNvbnN0IHNvY2tldCA9IGlvKCk7XG4gICAqXG4gICAqIGNvbnNvbGUubG9nKHNvY2tldC5hY3RpdmUpOyAvLyB0cnVlXG4gICAqXG4gICAqIHNvY2tldC5vbihcImRpc2Nvbm5lY3RcIiwgKHJlYXNvbikgPT4ge1xuICAgKiAgIGlmIChyZWFzb24gPT09IFwiaW8gc2VydmVyIGRpc2Nvbm5lY3RcIikge1xuICAgKiAgICAgLy8gdGhlIGRpc2Nvbm5lY3Rpb24gd2FzIGluaXRpYXRlZCBieSB0aGUgc2VydmVyLCB5b3UgbmVlZCB0byBtYW51YWxseSByZWNvbm5lY3RcbiAgICogICAgIGNvbnNvbGUubG9nKHNvY2tldC5hY3RpdmUpOyAvLyBmYWxzZVxuICAgKiAgIH1cbiAgICogICAvLyBlbHNlIHRoZSBzb2NrZXQgd2lsbCBhdXRvbWF0aWNhbGx5IHRyeSB0byByZWNvbm5lY3RcbiAgICogICBjb25zb2xlLmxvZyhzb2NrZXQuYWN0aXZlKTsgLy8gdHJ1ZVxuICAgKiB9KTtcbiAgICovXG4gIGdldCBhY3RpdmUoKSB7XG4gICAgcmV0dXJuICEhdGhpcy5zdWJzO1xuICB9XG4gIC8qKlxuICAgKiBcIk9wZW5zXCIgdGhlIHNvY2tldC5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogY29uc3Qgc29ja2V0ID0gaW8oe1xuICAgKiAgIGF1dG9Db25uZWN0OiBmYWxzZVxuICAgKiB9KTtcbiAgICpcbiAgICogc29ja2V0LmNvbm5lY3QoKTtcbiAgICovXG4gIGNvbm5lY3QoKSB7XG4gICAgaWYgKHRoaXMuY29ubmVjdGVkKSByZXR1cm4gdGhpcztcbiAgICB0aGlzLnN1YkV2ZW50cygpO1xuICAgIGlmICghdGhpcy5pb1tcIl9yZWNvbm5lY3RpbmdcIl0pIHRoaXMuaW8ub3BlbigpOyAvLyBlbnN1cmUgb3BlblxuICAgIGlmIChcIm9wZW5cIiA9PT0gdGhpcy5pby5fcmVhZHlTdGF0ZSkgdGhpcy5vbm9wZW4oKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICAvKipcbiAgICogQWxpYXMgZm9yIHtAbGluayBjb25uZWN0KCl9LlxuICAgKi9cbiAgb3BlbigpIHtcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0KCk7XG4gIH1cbiAgLyoqXG4gICAqIFNlbmRzIGEgYG1lc3NhZ2VgIGV2ZW50LlxuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBtaW1pY3MgdGhlIFdlYlNvY2tldC5zZW5kKCkgbWV0aG9kLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9XZWJTb2NrZXQvc2VuZFxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBzb2NrZXQuc2VuZChcImhlbGxvXCIpO1xuICAgKlxuICAgKiAvLyB0aGlzIGlzIGVxdWl2YWxlbnQgdG9cbiAgICogc29ja2V0LmVtaXQoXCJtZXNzYWdlXCIsIFwiaGVsbG9cIik7XG4gICAqXG4gICAqIEByZXR1cm4gc2VsZlxuICAgKi9cbiAgc2VuZCguLi5hcmdzKSB7XG4gICAgYXJncy51bnNoaWZ0KFwibWVzc2FnZVwiKTtcbiAgICB0aGlzLmVtaXQuYXBwbHkodGhpcywgYXJncyk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgLyoqXG4gICAqIE92ZXJyaWRlIGBlbWl0YC5cbiAgICogSWYgdGhlIGV2ZW50IGlzIGluIGBldmVudHNgLCBpdCdzIGVtaXR0ZWQgbm9ybWFsbHkuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIHNvY2tldC5lbWl0KFwiaGVsbG9cIiwgXCJ3b3JsZFwiKTtcbiAgICpcbiAgICogLy8gYWxsIHNlcmlhbGl6YWJsZSBkYXRhc3RydWN0dXJlcyBhcmUgc3VwcG9ydGVkIChubyBuZWVkIHRvIGNhbGwgSlNPTi5zdHJpbmdpZnkpXG4gICAqIHNvY2tldC5lbWl0KFwiaGVsbG9cIiwgMSwgXCIyXCIsIHsgMzogW1wiNFwiXSwgNTogVWludDhBcnJheS5mcm9tKFs2XSkgfSk7XG4gICAqXG4gICAqIC8vIHdpdGggYW4gYWNrbm93bGVkZ2VtZW50IGZyb20gdGhlIHNlcnZlclxuICAgKiBzb2NrZXQuZW1pdChcImhlbGxvXCIsIFwid29ybGRcIiwgKHZhbCkgPT4ge1xuICAgKiAgIC8vIC4uLlxuICAgKiB9KTtcbiAgICpcbiAgICogQHJldHVybiBzZWxmXG4gICAqL1xuICBlbWl0KGV2LCAuLi5hcmdzKSB7XG4gICAgdmFyIF9hLCBfYiwgX2M7XG4gICAgaWYgKFJFU0VSVkVEX0VWRU5UUy5oYXNPd25Qcm9wZXJ0eShldikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignXCInICsgZXYudG9TdHJpbmcoKSArICdcIiBpcyBhIHJlc2VydmVkIGV2ZW50IG5hbWUnKTtcbiAgICB9XG4gICAgYXJncy51bnNoaWZ0KGV2KTtcbiAgICBpZiAodGhpcy5fb3B0cy5yZXRyaWVzICYmICF0aGlzLmZsYWdzLmZyb21RdWV1ZSAmJiAhdGhpcy5mbGFncy52b2xhdGlsZSkge1xuICAgICAgdGhpcy5fYWRkVG9RdWV1ZShhcmdzKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBjb25zdCBwYWNrZXQgPSB7XG4gICAgICB0eXBlOiBQYWNrZXRUeXBlLkVWRU5ULFxuICAgICAgZGF0YTogYXJnc1xuICAgIH07XG4gICAgcGFja2V0Lm9wdGlvbnMgPSB7fTtcbiAgICBwYWNrZXQub3B0aW9ucy5jb21wcmVzcyA9IHRoaXMuZmxhZ3MuY29tcHJlc3MgIT09IGZhbHNlO1xuICAgIC8vIGV2ZW50IGFjayBjYWxsYmFja1xuICAgIGlmIChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBhcmdzW2FyZ3MubGVuZ3RoIC0gMV0pIHtcbiAgICAgIGNvbnN0IGlkID0gdGhpcy5pZHMrKztcbiAgICAgIGNvbnN0IGFjayA9IGFyZ3MucG9wKCk7XG4gICAgICB0aGlzLl9yZWdpc3RlckFja0NhbGxiYWNrKGlkLCBhY2spO1xuICAgICAgcGFja2V0LmlkID0gaWQ7XG4gICAgfVxuICAgIGNvbnN0IGlzVHJhbnNwb3J0V3JpdGFibGUgPSAoX2IgPSAoX2EgPSB0aGlzLmlvLmVuZ2luZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnRyYW5zcG9ydCkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLndyaXRhYmxlO1xuICAgIGNvbnN0IGlzQ29ubmVjdGVkID0gdGhpcy5jb25uZWN0ZWQgJiYgISgoX2MgPSB0aGlzLmlvLmVuZ2luZSkgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLl9oYXNQaW5nRXhwaXJlZCgpKTtcbiAgICBjb25zdCBkaXNjYXJkUGFja2V0ID0gdGhpcy5mbGFncy52b2xhdGlsZSAmJiAhaXNUcmFuc3BvcnRXcml0YWJsZTtcbiAgICBpZiAoZGlzY2FyZFBhY2tldCkge30gZWxzZSBpZiAoaXNDb25uZWN0ZWQpIHtcbiAgICAgIHRoaXMubm90aWZ5T3V0Z29pbmdMaXN0ZW5lcnMocGFja2V0KTtcbiAgICAgIHRoaXMucGFja2V0KHBhY2tldCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VuZEJ1ZmZlci5wdXNoKHBhY2tldCk7XG4gICAgfVxuICAgIHRoaXMuZmxhZ3MgPSB7fTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9yZWdpc3RlckFja0NhbGxiYWNrKGlkLCBhY2spIHtcbiAgICB2YXIgX2E7XG4gICAgY29uc3QgdGltZW91dCA9IChfYSA9IHRoaXMuZmxhZ3MudGltZW91dCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogdGhpcy5fb3B0cy5hY2tUaW1lb3V0O1xuICAgIGlmICh0aW1lb3V0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuYWNrc1tpZF0gPSBhY2s7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBjb25zdCB0aW1lciA9IHRoaXMuaW8uc2V0VGltZW91dEZuKCgpID0+IHtcbiAgICAgIGRlbGV0ZSB0aGlzLmFja3NbaWRdO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnNlbmRCdWZmZXIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKHRoaXMuc2VuZEJ1ZmZlcltpXS5pZCA9PT0gaWQpIHtcbiAgICAgICAgICB0aGlzLnNlbmRCdWZmZXIuc3BsaWNlKGksIDEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBhY2suY2FsbCh0aGlzLCBuZXcgRXJyb3IoXCJvcGVyYXRpb24gaGFzIHRpbWVkIG91dFwiKSk7XG4gICAgfSwgdGltZW91dCk7XG4gICAgY29uc3QgZm4gPSAoLi4uYXJncykgPT4ge1xuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgdGhpcy5pby5jbGVhclRpbWVvdXRGbih0aW1lcik7XG4gICAgICBhY2suYXBwbHkodGhpcywgYXJncyk7XG4gICAgfTtcbiAgICBmbi53aXRoRXJyb3IgPSB0cnVlO1xuICAgIHRoaXMuYWNrc1tpZF0gPSBmbjtcbiAgfVxuICAvKipcbiAgICogRW1pdHMgYW4gZXZlbnQgYW5kIHdhaXRzIGZvciBhbiBhY2tub3dsZWRnZW1lbnRcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogLy8gd2l0aG91dCB0aW1lb3V0XG4gICAqIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgc29ja2V0LmVtaXRXaXRoQWNrKFwiaGVsbG9cIiwgXCJ3b3JsZFwiKTtcbiAgICpcbiAgICogLy8gd2l0aCBhIHNwZWNpZmljIHRpbWVvdXRcbiAgICogdHJ5IHtcbiAgICogICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHNvY2tldC50aW1lb3V0KDEwMDApLmVtaXRXaXRoQWNrKFwiaGVsbG9cIiwgXCJ3b3JsZFwiKTtcbiAgICogfSBjYXRjaCAoZXJyKSB7XG4gICAqICAgLy8gdGhlIHNlcnZlciBkaWQgbm90IGFja25vd2xlZGdlIHRoZSBldmVudCBpbiB0aGUgZ2l2ZW4gZGVsYXlcbiAgICogfVxuICAgKlxuICAgKiBAcmV0dXJuIGEgUHJvbWlzZSB0aGF0IHdpbGwgYmUgZnVsZmlsbGVkIHdoZW4gdGhlIHNlcnZlciBhY2tub3dsZWRnZXMgdGhlIGV2ZW50XG4gICAqL1xuICBlbWl0V2l0aEFjayhldiwgLi4uYXJncykge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBmbiA9IChhcmcxLCBhcmcyKSA9PiB7XG4gICAgICAgIHJldHVybiBhcmcxID8gcmVqZWN0KGFyZzEpIDogcmVzb2x2ZShhcmcyKTtcbiAgICAgIH07XG4gICAgICBmbi53aXRoRXJyb3IgPSB0cnVlO1xuICAgICAgYXJncy5wdXNoKGZuKTtcbiAgICAgIHRoaXMuZW1pdChldiwgLi4uYXJncyk7XG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIEFkZCB0aGUgcGFja2V0IHRvIHRoZSBxdWV1ZS5cbiAgICogQHBhcmFtIGFyZ3NcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9hZGRUb1F1ZXVlKGFyZ3MpIHtcbiAgICBsZXQgYWNrO1xuICAgIGlmICh0eXBlb2YgYXJnc1thcmdzLmxlbmd0aCAtIDFdID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIGFjayA9IGFyZ3MucG9wKCk7XG4gICAgfVxuICAgIGNvbnN0IHBhY2tldCA9IHtcbiAgICAgIGlkOiB0aGlzLl9xdWV1ZVNlcSsrLFxuICAgICAgdHJ5Q291bnQ6IDAsXG4gICAgICBwZW5kaW5nOiBmYWxzZSxcbiAgICAgIGFyZ3MsXG4gICAgICBmbGFnczogT2JqZWN0LmFzc2lnbih7XG4gICAgICAgIGZyb21RdWV1ZTogdHJ1ZVxuICAgICAgfSwgdGhpcy5mbGFncylcbiAgICB9O1xuICAgIGFyZ3MucHVzaCgoZXJyLCAuLi5yZXNwb25zZUFyZ3MpID0+IHtcbiAgICAgIGlmIChwYWNrZXQgIT09IHRoaXMuX3F1ZXVlWzBdKSB7fVxuICAgICAgY29uc3QgaGFzRXJyb3IgPSBlcnIgIT09IG51bGw7XG4gICAgICBpZiAoaGFzRXJyb3IpIHtcbiAgICAgICAgaWYgKHBhY2tldC50cnlDb3VudCA+IHRoaXMuX29wdHMucmV0cmllcykge1xuICAgICAgICAgIHRoaXMuX3F1ZXVlLnNoaWZ0KCk7XG4gICAgICAgICAgaWYgKGFjaykge1xuICAgICAgICAgICAgYWNrKGVycik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9xdWV1ZS5zaGlmdCgpO1xuICAgICAgICBpZiAoYWNrKSB7XG4gICAgICAgICAgYWNrKG51bGwsIC4uLnJlc3BvbnNlQXJncyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHBhY2tldC5wZW5kaW5nID0gZmFsc2U7XG4gICAgICByZXR1cm4gdGhpcy5fZHJhaW5RdWV1ZSgpO1xuICAgIH0pO1xuICAgIHRoaXMuX3F1ZXVlLnB1c2gocGFja2V0KTtcbiAgICB0aGlzLl9kcmFpblF1ZXVlKCk7XG4gIH1cbiAgLyoqXG4gICAqIFNlbmQgdGhlIGZpcnN0IHBhY2tldCBvZiB0aGUgcXVldWUsIGFuZCB3YWl0IGZvciBhbiBhY2tub3dsZWRnZW1lbnQgZnJvbSB0aGUgc2VydmVyLlxuICAgKiBAcGFyYW0gZm9yY2UgLSB3aGV0aGVyIHRvIHJlc2VuZCBhIHBhY2tldCB0aGF0IGhhcyBub3QgYmVlbiBhY2tub3dsZWRnZWQgeWV0XG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZHJhaW5RdWV1ZShmb3JjZSA9IGZhbHNlKSB7XG4gICAgaWYgKCF0aGlzLmNvbm5lY3RlZCB8fCB0aGlzLl9xdWV1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcGFja2V0ID0gdGhpcy5fcXVldWVbMF07XG4gICAgaWYgKHBhY2tldC5wZW5kaW5nICYmICFmb3JjZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBwYWNrZXQucGVuZGluZyA9IHRydWU7XG4gICAgcGFja2V0LnRyeUNvdW50Kys7XG4gICAgdGhpcy5mbGFncyA9IHBhY2tldC5mbGFncztcbiAgICB0aGlzLmVtaXQuYXBwbHkodGhpcywgcGFja2V0LmFyZ3MpO1xuICB9XG4gIC8qKlxuICAgKiBTZW5kcyBhIHBhY2tldC5cbiAgICpcbiAgICogQHBhcmFtIHBhY2tldFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcGFja2V0KHBhY2tldCkge1xuICAgIHBhY2tldC5uc3AgPSB0aGlzLm5zcDtcbiAgICB0aGlzLmlvLl9wYWNrZXQocGFja2V0KTtcbiAgfVxuICAvKipcbiAgICogQ2FsbGVkIHVwb24gZW5naW5lIGBvcGVuYC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIG9ub3BlbigpIHtcbiAgICBpZiAodHlwZW9mIHRoaXMuYXV0aCA9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHRoaXMuYXV0aChkYXRhID0+IHtcbiAgICAgICAgdGhpcy5fc2VuZENvbm5lY3RQYWNrZXQoZGF0YSk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fc2VuZENvbm5lY3RQYWNrZXQodGhpcy5hdXRoKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFNlbmRzIGEgQ09OTkVDVCBwYWNrZXQgdG8gaW5pdGlhdGUgdGhlIFNvY2tldC5JTyBzZXNzaW9uLlxuICAgKlxuICAgKiBAcGFyYW0gZGF0YVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3NlbmRDb25uZWN0UGFja2V0KGRhdGEpIHtcbiAgICB0aGlzLnBhY2tldCh7XG4gICAgICB0eXBlOiBQYWNrZXRUeXBlLkNPTk5FQ1QsXG4gICAgICBkYXRhOiB0aGlzLl9waWQgPyBPYmplY3QuYXNzaWduKHtcbiAgICAgICAgcGlkOiB0aGlzLl9waWQsXG4gICAgICAgIG9mZnNldDogdGhpcy5fbGFzdE9mZnNldFxuICAgICAgfSwgZGF0YSkgOiBkYXRhXG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIENhbGxlZCB1cG9uIGVuZ2luZSBvciBtYW5hZ2VyIGBlcnJvcmAuXG4gICAqXG4gICAqIEBwYXJhbSBlcnJcbiAgICogQHByaXZhdGVcbiAgICovXG4gIG9uZXJyb3IoZXJyKSB7XG4gICAgaWYgKCF0aGlzLmNvbm5lY3RlZCkge1xuICAgICAgdGhpcy5lbWl0UmVzZXJ2ZWQoXCJjb25uZWN0X2Vycm9yXCIsIGVycik7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBDYWxsZWQgdXBvbiBlbmdpbmUgYGNsb3NlYC5cbiAgICpcbiAgICogQHBhcmFtIHJlYXNvblxuICAgKiBAcGFyYW0gZGVzY3JpcHRpb25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIG9uY2xvc2UocmVhc29uLCBkZXNjcmlwdGlvbikge1xuICAgIHRoaXMuY29ubmVjdGVkID0gZmFsc2U7XG4gICAgZGVsZXRlIHRoaXMuaWQ7XG4gICAgdGhpcy5lbWl0UmVzZXJ2ZWQoXCJkaXNjb25uZWN0XCIsIHJlYXNvbiwgZGVzY3JpcHRpb24pO1xuICAgIHRoaXMuX2NsZWFyQWNrcygpO1xuICB9XG4gIC8qKlxuICAgKiBDbGVhcnMgdGhlIGFja25vd2xlZGdlbWVudCBoYW5kbGVycyB1cG9uIGRpc2Nvbm5lY3Rpb24sIHNpbmNlIHRoZSBjbGllbnQgd2lsbCBuZXZlciByZWNlaXZlIGFuIGFja25vd2xlZGdlbWVudCBmcm9tXG4gICAqIHRoZSBzZXJ2ZXIuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY2xlYXJBY2tzKCkge1xuICAgIE9iamVjdC5rZXlzKHRoaXMuYWNrcykuZm9yRWFjaChpZCA9PiB7XG4gICAgICBjb25zdCBpc0J1ZmZlcmVkID0gdGhpcy5zZW5kQnVmZmVyLnNvbWUocGFja2V0ID0+IFN0cmluZyhwYWNrZXQuaWQpID09PSBpZCk7XG4gICAgICBpZiAoIWlzQnVmZmVyZWQpIHtcbiAgICAgICAgLy8gbm90ZTogaGFuZGxlcnMgdGhhdCBkbyBub3QgYWNjZXB0IGFuIGVycm9yIGFzIGZpcnN0IGFyZ3VtZW50IGFyZSBpZ25vcmVkIGhlcmVcbiAgICAgICAgY29uc3QgYWNrID0gdGhpcy5hY2tzW2lkXTtcbiAgICAgICAgZGVsZXRlIHRoaXMuYWNrc1tpZF07XG4gICAgICAgIGlmIChhY2sud2l0aEVycm9yKSB7XG4gICAgICAgICAgYWNrLmNhbGwodGhpcywgbmV3IEVycm9yKFwic29ja2V0IGhhcyBiZWVuIGRpc2Nvbm5lY3RlZFwiKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogQ2FsbGVkIHdpdGggc29ja2V0IHBhY2tldC5cbiAgICpcbiAgICogQHBhcmFtIHBhY2tldFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgb25wYWNrZXQocGFja2V0KSB7XG4gICAgY29uc3Qgc2FtZU5hbWVzcGFjZSA9IHBhY2tldC5uc3AgPT09IHRoaXMubnNwO1xuICAgIGlmICghc2FtZU5hbWVzcGFjZSkgcmV0dXJuO1xuICAgIHN3aXRjaCAocGFja2V0LnR5cGUpIHtcbiAgICAgIGNhc2UgUGFja2V0VHlwZS5DT05ORUNUOlxuICAgICAgICBpZiAocGFja2V0LmRhdGEgJiYgcGFja2V0LmRhdGEuc2lkKSB7XG4gICAgICAgICAgdGhpcy5vbmNvbm5lY3QocGFja2V0LmRhdGEuc2lkLCBwYWNrZXQuZGF0YS5waWQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZW1pdFJlc2VydmVkKFwiY29ubmVjdF9lcnJvclwiLCBuZXcgRXJyb3IoXCJJdCBzZWVtcyB5b3UgYXJlIHRyeWluZyB0byByZWFjaCBhIFNvY2tldC5JTyBzZXJ2ZXIgaW4gdjIueCB3aXRoIGEgdjMueCBjbGllbnQsIGJ1dCB0aGV5IGFyZSBub3QgY29tcGF0aWJsZSAobW9yZSBpbmZvcm1hdGlvbiBoZXJlOiBodHRwczovL3NvY2tldC5pby9kb2NzL3YzL21pZ3JhdGluZy1mcm9tLTIteC10by0zLTAvKVwiKSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFBhY2tldFR5cGUuRVZFTlQ6XG4gICAgICBjYXNlIFBhY2tldFR5cGUuQklOQVJZX0VWRU5UOlxuICAgICAgICB0aGlzLm9uZXZlbnQocGFja2V0KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFBhY2tldFR5cGUuQUNLOlxuICAgICAgY2FzZSBQYWNrZXRUeXBlLkJJTkFSWV9BQ0s6XG4gICAgICAgIHRoaXMub25hY2socGFja2V0KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFBhY2tldFR5cGUuRElTQ09OTkVDVDpcbiAgICAgICAgdGhpcy5vbmRpc2Nvbm5lY3QoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFBhY2tldFR5cGUuQ09OTkVDVF9FUlJPUjpcbiAgICAgICAgdGhpcy5kZXN0cm95KCk7XG4gICAgICAgIGNvbnN0IGVyciA9IG5ldyBFcnJvcihwYWNrZXQuZGF0YS5tZXNzYWdlKTtcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBlcnIuZGF0YSA9IHBhY2tldC5kYXRhLmRhdGE7XG4gICAgICAgIHRoaXMuZW1pdFJlc2VydmVkKFwiY29ubmVjdF9lcnJvclwiLCBlcnIpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIENhbGxlZCB1cG9uIGEgc2VydmVyIGV2ZW50LlxuICAgKlxuICAgKiBAcGFyYW0gcGFja2V0XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBvbmV2ZW50KHBhY2tldCkge1xuICAgIGNvbnN0IGFyZ3MgPSBwYWNrZXQuZGF0YSB8fCBbXTtcbiAgICBpZiAobnVsbCAhPSBwYWNrZXQuaWQpIHtcbiAgICAgIGFyZ3MucHVzaCh0aGlzLmFjayhwYWNrZXQuaWQpKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuY29ubmVjdGVkKSB7XG4gICAgICB0aGlzLmVtaXRFdmVudChhcmdzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZWNlaXZlQnVmZmVyLnB1c2goT2JqZWN0LmZyZWV6ZShhcmdzKSk7XG4gICAgfVxuICB9XG4gIGVtaXRFdmVudChhcmdzKSB7XG4gICAgaWYgKHRoaXMuX2FueUxpc3RlbmVycyAmJiB0aGlzLl9hbnlMaXN0ZW5lcnMubGVuZ3RoKSB7XG4gICAgICBjb25zdCBsaXN0ZW5lcnMgPSB0aGlzLl9hbnlMaXN0ZW5lcnMuc2xpY2UoKTtcbiAgICAgIGZvciAoY29uc3QgbGlzdGVuZXIgb2YgbGlzdGVuZXJzKSB7XG4gICAgICAgIGxpc3RlbmVyLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgfVxuICAgIH1cbiAgICBzdXBlci5lbWl0LmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIGlmICh0aGlzLl9waWQgJiYgYXJncy5sZW5ndGggJiYgdHlwZW9mIGFyZ3NbYXJncy5sZW5ndGggLSAxXSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgdGhpcy5fbGFzdE9mZnNldCA9IGFyZ3NbYXJncy5sZW5ndGggLSAxXTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFByb2R1Y2VzIGFuIGFjayBjYWxsYmFjayB0byBlbWl0IHdpdGggYW4gZXZlbnQuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBhY2soaWQpIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICBsZXQgc2VudCA9IGZhbHNlO1xuICAgIHJldHVybiBmdW5jdGlvbiAoLi4uYXJncykge1xuICAgICAgLy8gcHJldmVudCBkb3VibGUgY2FsbGJhY2tzXG4gICAgICBpZiAoc2VudCkgcmV0dXJuO1xuICAgICAgc2VudCA9IHRydWU7XG4gICAgICBzZWxmLnBhY2tldCh7XG4gICAgICAgIHR5cGU6IFBhY2tldFR5cGUuQUNLLFxuICAgICAgICBpZDogaWQsXG4gICAgICAgIGRhdGE6IGFyZ3NcbiAgICAgIH0pO1xuICAgIH07XG4gIH1cbiAgLyoqXG4gICAqIENhbGxlZCB1cG9uIGEgc2VydmVyIGFja25vd2xlZGdlbWVudC5cbiAgICpcbiAgICogQHBhcmFtIHBhY2tldFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgb25hY2socGFja2V0KSB7XG4gICAgY29uc3QgYWNrID0gdGhpcy5hY2tzW3BhY2tldC5pZF07XG4gICAgaWYgKHR5cGVvZiBhY2sgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBkZWxldGUgdGhpcy5hY2tzW3BhY2tldC5pZF07XG4gICAgLy8gQHRzLWlnbm9yZSBGSVhNRSBhY2sgaXMgaW5jb3JyZWN0bHkgaW5mZXJyZWQgYXMgJ25ldmVyJ1xuICAgIGlmIChhY2sud2l0aEVycm9yKSB7XG4gICAgICBwYWNrZXQuZGF0YS51bnNoaWZ0KG51bGwpO1xuICAgIH1cbiAgICAvLyBAdHMtaWdub3JlXG4gICAgYWNrLmFwcGx5KHRoaXMsIHBhY2tldC5kYXRhKTtcbiAgfVxuICAvKipcbiAgICogQ2FsbGVkIHVwb24gc2VydmVyIGNvbm5lY3QuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBvbmNvbm5lY3QoaWQsIHBpZCkge1xuICAgIHRoaXMuaWQgPSBpZDtcbiAgICB0aGlzLnJlY292ZXJlZCA9IHBpZCAmJiB0aGlzLl9waWQgPT09IHBpZDtcbiAgICB0aGlzLl9waWQgPSBwaWQ7IC8vIGRlZmluZWQgb25seSBpZiBjb25uZWN0aW9uIHN0YXRlIHJlY292ZXJ5IGlzIGVuYWJsZWRcbiAgICB0aGlzLmNvbm5lY3RlZCA9IHRydWU7XG4gICAgdGhpcy5lbWl0QnVmZmVyZWQoKTtcbiAgICB0aGlzLl9kcmFpblF1ZXVlKHRydWUpO1xuICAgIHRoaXMuZW1pdFJlc2VydmVkKFwiY29ubmVjdFwiKTtcbiAgfVxuICAvKipcbiAgICogRW1pdCBidWZmZXJlZCBldmVudHMgKHJlY2VpdmVkIGFuZCBlbWl0dGVkKS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGVtaXRCdWZmZXJlZCgpIHtcbiAgICB0aGlzLnJlY2VpdmVCdWZmZXIuZm9yRWFjaChhcmdzID0+IHRoaXMuZW1pdEV2ZW50KGFyZ3MpKTtcbiAgICB0aGlzLnJlY2VpdmVCdWZmZXIgPSBbXTtcbiAgICB0aGlzLnNlbmRCdWZmZXIuZm9yRWFjaChwYWNrZXQgPT4ge1xuICAgICAgdGhpcy5ub3RpZnlPdXRnb2luZ0xpc3RlbmVycyhwYWNrZXQpO1xuICAgICAgdGhpcy5wYWNrZXQocGFja2V0KTtcbiAgICB9KTtcbiAgICB0aGlzLnNlbmRCdWZmZXIgPSBbXTtcbiAgfVxuICAvKipcbiAgICogQ2FsbGVkIHVwb24gc2VydmVyIGRpc2Nvbm5lY3QuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBvbmRpc2Nvbm5lY3QoKSB7XG4gICAgdGhpcy5kZXN0cm95KCk7XG4gICAgdGhpcy5vbmNsb3NlKFwiaW8gc2VydmVyIGRpc2Nvbm5lY3RcIik7XG4gIH1cbiAgLyoqXG4gICAqIENhbGxlZCB1cG9uIGZvcmNlZCBjbGllbnQvc2VydmVyIHNpZGUgZGlzY29ubmVjdGlvbnMsXG4gICAqIHRoaXMgbWV0aG9kIGVuc3VyZXMgdGhlIG1hbmFnZXIgc3RvcHMgdHJhY2tpbmcgdXMgYW5kXG4gICAqIHRoYXQgcmVjb25uZWN0aW9ucyBkb24ndCBnZXQgdHJpZ2dlcmVkIGZvciB0aGlzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGVzdHJveSgpIHtcbiAgICBpZiAodGhpcy5zdWJzKSB7XG4gICAgICAvLyBjbGVhbiBzdWJzY3JpcHRpb25zIHRvIGF2b2lkIHJlY29ubmVjdGlvbnNcbiAgICAgIHRoaXMuc3Vicy5mb3JFYWNoKHN1YkRlc3Ryb3kgPT4gc3ViRGVzdHJveSgpKTtcbiAgICAgIHRoaXMuc3VicyA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdGhpcy5pb1tcIl9kZXN0cm95XCJdKHRoaXMpO1xuICB9XG4gIC8qKlxuICAgKiBEaXNjb25uZWN0cyB0aGUgc29ja2V0IG1hbnVhbGx5LiBJbiB0aGF0IGNhc2UsIHRoZSBzb2NrZXQgd2lsbCBub3QgdHJ5IHRvIHJlY29ubmVjdC5cbiAgICpcbiAgICogSWYgdGhpcyBpcyB0aGUgbGFzdCBhY3RpdmUgU29ja2V0IGluc3RhbmNlIG9mIHRoZSB7QGxpbmsgTWFuYWdlcn0sIHRoZSBsb3ctbGV2ZWwgY29ubmVjdGlvbiB3aWxsIGJlIGNsb3NlZC5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogY29uc3Qgc29ja2V0ID0gaW8oKTtcbiAgICpcbiAgICogc29ja2V0Lm9uKFwiZGlzY29ubmVjdFwiLCAocmVhc29uKSA9PiB7XG4gICAqICAgLy8gY29uc29sZS5sb2cocmVhc29uKTsgcHJpbnRzIFwiaW8gY2xpZW50IGRpc2Nvbm5lY3RcIlxuICAgKiB9KTtcbiAgICpcbiAgICogc29ja2V0LmRpc2Nvbm5lY3QoKTtcbiAgICpcbiAgICogQHJldHVybiBzZWxmXG4gICAqL1xuICBkaXNjb25uZWN0KCkge1xuICAgIGlmICh0aGlzLmNvbm5lY3RlZCkge1xuICAgICAgdGhpcy5wYWNrZXQoe1xuICAgICAgICB0eXBlOiBQYWNrZXRUeXBlLkRJU0NPTk5FQ1RcbiAgICAgIH0pO1xuICAgIH1cbiAgICAvLyByZW1vdmUgc29ja2V0IGZyb20gcG9vbFxuICAgIHRoaXMuZGVzdHJveSgpO1xuICAgIGlmICh0aGlzLmNvbm5lY3RlZCkge1xuICAgICAgLy8gZmlyZSBldmVudHNcbiAgICAgIHRoaXMub25jbG9zZShcImlvIGNsaWVudCBkaXNjb25uZWN0XCIpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICAvKipcbiAgICogQWxpYXMgZm9yIHtAbGluayBkaXNjb25uZWN0KCl9LlxuICAgKlxuICAgKiBAcmV0dXJuIHNlbGZcbiAgICovXG4gIGNsb3NlKCkge1xuICAgIHJldHVybiB0aGlzLmRpc2Nvbm5lY3QoKTtcbiAgfVxuICAvKipcbiAgICogU2V0cyB0aGUgY29tcHJlc3MgZmxhZy5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogc29ja2V0LmNvbXByZXNzKGZhbHNlKS5lbWl0KFwiaGVsbG9cIik7XG4gICAqXG4gICAqIEBwYXJhbSBjb21wcmVzcyAtIGlmIGB0cnVlYCwgY29tcHJlc3NlcyB0aGUgc2VuZGluZyBkYXRhXG4gICAqIEByZXR1cm4gc2VsZlxuICAgKi9cbiAgY29tcHJlc3MoY29tcHJlc3MpIHtcbiAgICB0aGlzLmZsYWdzLmNvbXByZXNzID0gY29tcHJlc3M7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgLyoqXG4gICAqIFNldHMgYSBtb2RpZmllciBmb3IgYSBzdWJzZXF1ZW50IGV2ZW50IGVtaXNzaW9uIHRoYXQgdGhlIGV2ZW50IG1lc3NhZ2Ugd2lsbCBiZSBkcm9wcGVkIHdoZW4gdGhpcyBzb2NrZXQgaXMgbm90XG4gICAqIHJlYWR5IHRvIHNlbmQgbWVzc2FnZXMuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIHNvY2tldC52b2xhdGlsZS5lbWl0KFwiaGVsbG9cIik7IC8vIHRoZSBzZXJ2ZXIgbWF5IG9yIG1heSBub3QgcmVjZWl2ZSBpdFxuICAgKlxuICAgKiBAcmV0dXJucyBzZWxmXG4gICAqL1xuICBnZXQgdm9sYXRpbGUoKSB7XG4gICAgdGhpcy5mbGFncy52b2xhdGlsZSA9IHRydWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgLyoqXG4gICAqIFNldHMgYSBtb2RpZmllciBmb3IgYSBzdWJzZXF1ZW50IGV2ZW50IGVtaXNzaW9uIHRoYXQgdGhlIGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIHdpdGggYW4gZXJyb3Igd2hlbiB0aGVcbiAgICogZ2l2ZW4gbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBoYXZlIGVsYXBzZWQgd2l0aG91dCBhbiBhY2tub3dsZWRnZW1lbnQgZnJvbSB0aGUgc2VydmVyOlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBzb2NrZXQudGltZW91dCg1MDAwKS5lbWl0KFwibXktZXZlbnRcIiwgKGVycikgPT4ge1xuICAgKiAgIGlmIChlcnIpIHtcbiAgICogICAgIC8vIHRoZSBzZXJ2ZXIgZGlkIG5vdCBhY2tub3dsZWRnZSB0aGUgZXZlbnQgaW4gdGhlIGdpdmVuIGRlbGF5XG4gICAqICAgfVxuICAgKiB9KTtcbiAgICpcbiAgICogQHJldHVybnMgc2VsZlxuICAgKi9cbiAgdGltZW91dCh0aW1lb3V0KSB7XG4gICAgdGhpcy5mbGFncy50aW1lb3V0ID0gdGltZW91dDtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICAvKipcbiAgICogQWRkcyBhIGxpc3RlbmVyIHRoYXQgd2lsbCBiZSBmaXJlZCB3aGVuIGFueSBldmVudCBpcyBlbWl0dGVkLiBUaGUgZXZlbnQgbmFtZSBpcyBwYXNzZWQgYXMgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIHRoZVxuICAgKiBjYWxsYmFjay5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogc29ja2V0Lm9uQW55KChldmVudCwgLi4uYXJncykgPT4ge1xuICAgKiAgIGNvbnNvbGUubG9nKGBnb3QgJHtldmVudH1gKTtcbiAgICogfSk7XG4gICAqXG4gICAqIEBwYXJhbSBsaXN0ZW5lclxuICAgKi9cbiAgb25BbnkobGlzdGVuZXIpIHtcbiAgICB0aGlzLl9hbnlMaXN0ZW5lcnMgPSB0aGlzLl9hbnlMaXN0ZW5lcnMgfHwgW107XG4gICAgdGhpcy5fYW55TGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIC8qKlxuICAgKiBBZGRzIGEgbGlzdGVuZXIgdGhhdCB3aWxsIGJlIGZpcmVkIHdoZW4gYW55IGV2ZW50IGlzIGVtaXR0ZWQuIFRoZSBldmVudCBuYW1lIGlzIHBhc3NlZCBhcyB0aGUgZmlyc3QgYXJndW1lbnQgdG8gdGhlXG4gICAqIGNhbGxiYWNrLiBUaGUgbGlzdGVuZXIgaXMgYWRkZWQgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbGlzdGVuZXJzIGFycmF5LlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBzb2NrZXQucHJlcGVuZEFueSgoZXZlbnQsIC4uLmFyZ3MpID0+IHtcbiAgICogICBjb25zb2xlLmxvZyhgZ290IGV2ZW50ICR7ZXZlbnR9YCk7XG4gICAqIH0pO1xuICAgKlxuICAgKiBAcGFyYW0gbGlzdGVuZXJcbiAgICovXG4gIHByZXBlbmRBbnkobGlzdGVuZXIpIHtcbiAgICB0aGlzLl9hbnlMaXN0ZW5lcnMgPSB0aGlzLl9hbnlMaXN0ZW5lcnMgfHwgW107XG4gICAgdGhpcy5fYW55TGlzdGVuZXJzLnVuc2hpZnQobGlzdGVuZXIpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIC8qKlxuICAgKiBSZW1vdmVzIHRoZSBsaXN0ZW5lciB0aGF0IHdpbGwgYmUgZmlyZWQgd2hlbiBhbnkgZXZlbnQgaXMgZW1pdHRlZC5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogY29uc3QgY2F0Y2hBbGxMaXN0ZW5lciA9IChldmVudCwgLi4uYXJncykgPT4ge1xuICAgKiAgIGNvbnNvbGUubG9nKGBnb3QgZXZlbnQgJHtldmVudH1gKTtcbiAgICogfVxuICAgKlxuICAgKiBzb2NrZXQub25BbnkoY2F0Y2hBbGxMaXN0ZW5lcik7XG4gICAqXG4gICAqIC8vIHJlbW92ZSBhIHNwZWNpZmljIGxpc3RlbmVyXG4gICAqIHNvY2tldC5vZmZBbnkoY2F0Y2hBbGxMaXN0ZW5lcik7XG4gICAqXG4gICAqIC8vIG9yIHJlbW92ZSBhbGwgbGlzdGVuZXJzXG4gICAqIHNvY2tldC5vZmZBbnkoKTtcbiAgICpcbiAgICogQHBhcmFtIGxpc3RlbmVyXG4gICAqL1xuICBvZmZBbnkobGlzdGVuZXIpIHtcbiAgICBpZiAoIXRoaXMuX2FueUxpc3RlbmVycykge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGlmIChsaXN0ZW5lcikge1xuICAgICAgY29uc3QgbGlzdGVuZXJzID0gdGhpcy5fYW55TGlzdGVuZXJzO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaXN0ZW5lcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGxpc3RlbmVyID09PSBsaXN0ZW5lcnNbaV0pIHtcbiAgICAgICAgICBsaXN0ZW5lcnMuc3BsaWNlKGksIDEpO1xuICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2FueUxpc3RlbmVycyA9IFtdO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBhbiBhcnJheSBvZiBsaXN0ZW5lcnMgdGhhdCBhcmUgbGlzdGVuaW5nIGZvciBhbnkgZXZlbnQgdGhhdCBpcyBzcGVjaWZpZWQuIFRoaXMgYXJyYXkgY2FuIGJlIG1hbmlwdWxhdGVkLFxuICAgKiBlLmcuIHRvIHJlbW92ZSBsaXN0ZW5lcnMuXG4gICAqL1xuICBsaXN0ZW5lcnNBbnkoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2FueUxpc3RlbmVycyB8fCBbXTtcbiAgfVxuICAvKipcbiAgICogQWRkcyBhIGxpc3RlbmVyIHRoYXQgd2lsbCBiZSBmaXJlZCB3aGVuIGFueSBldmVudCBpcyBlbWl0dGVkLiBUaGUgZXZlbnQgbmFtZSBpcyBwYXNzZWQgYXMgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIHRoZVxuICAgKiBjYWxsYmFjay5cbiAgICpcbiAgICogTm90ZTogYWNrbm93bGVkZ2VtZW50cyBzZW50IHRvIHRoZSBzZXJ2ZXIgYXJlIG5vdCBpbmNsdWRlZC5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogc29ja2V0Lm9uQW55T3V0Z29pbmcoKGV2ZW50LCAuLi5hcmdzKSA9PiB7XG4gICAqICAgY29uc29sZS5sb2coYHNlbnQgZXZlbnQgJHtldmVudH1gKTtcbiAgICogfSk7XG4gICAqXG4gICAqIEBwYXJhbSBsaXN0ZW5lclxuICAgKi9cbiAgb25BbnlPdXRnb2luZyhsaXN0ZW5lcikge1xuICAgIHRoaXMuX2FueU91dGdvaW5nTGlzdGVuZXJzID0gdGhpcy5fYW55T3V0Z29pbmdMaXN0ZW5lcnMgfHwgW107XG4gICAgdGhpcy5fYW55T3V0Z29pbmdMaXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgLyoqXG4gICAqIEFkZHMgYSBsaXN0ZW5lciB0aGF0IHdpbGwgYmUgZmlyZWQgd2hlbiBhbnkgZXZlbnQgaXMgZW1pdHRlZC4gVGhlIGV2ZW50IG5hbWUgaXMgcGFzc2VkIGFzIHRoZSBmaXJzdCBhcmd1bWVudCB0byB0aGVcbiAgICogY2FsbGJhY2suIFRoZSBsaXN0ZW5lciBpcyBhZGRlZCB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaXN0ZW5lcnMgYXJyYXkuXG4gICAqXG4gICAqIE5vdGU6IGFja25vd2xlZGdlbWVudHMgc2VudCB0byB0aGUgc2VydmVyIGFyZSBub3QgaW5jbHVkZWQuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIHNvY2tldC5wcmVwZW5kQW55T3V0Z29pbmcoKGV2ZW50LCAuLi5hcmdzKSA9PiB7XG4gICAqICAgY29uc29sZS5sb2coYHNlbnQgZXZlbnQgJHtldmVudH1gKTtcbiAgICogfSk7XG4gICAqXG4gICAqIEBwYXJhbSBsaXN0ZW5lclxuICAgKi9cbiAgcHJlcGVuZEFueU91dGdvaW5nKGxpc3RlbmVyKSB7XG4gICAgdGhpcy5fYW55T3V0Z29pbmdMaXN0ZW5lcnMgPSB0aGlzLl9hbnlPdXRnb2luZ0xpc3RlbmVycyB8fCBbXTtcbiAgICB0aGlzLl9hbnlPdXRnb2luZ0xpc3RlbmVycy51bnNoaWZ0KGxpc3RlbmVyKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICAvKipcbiAgICogUmVtb3ZlcyB0aGUgbGlzdGVuZXIgdGhhdCB3aWxsIGJlIGZpcmVkIHdoZW4gYW55IGV2ZW50IGlzIGVtaXR0ZWQuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGNvbnN0IGNhdGNoQWxsTGlzdGVuZXIgPSAoZXZlbnQsIC4uLmFyZ3MpID0+IHtcbiAgICogICBjb25zb2xlLmxvZyhgc2VudCBldmVudCAke2V2ZW50fWApO1xuICAgKiB9XG4gICAqXG4gICAqIHNvY2tldC5vbkFueU91dGdvaW5nKGNhdGNoQWxsTGlzdGVuZXIpO1xuICAgKlxuICAgKiAvLyByZW1vdmUgYSBzcGVjaWZpYyBsaXN0ZW5lclxuICAgKiBzb2NrZXQub2ZmQW55T3V0Z29pbmcoY2F0Y2hBbGxMaXN0ZW5lcik7XG4gICAqXG4gICAqIC8vIG9yIHJlbW92ZSBhbGwgbGlzdGVuZXJzXG4gICAqIHNvY2tldC5vZmZBbnlPdXRnb2luZygpO1xuICAgKlxuICAgKiBAcGFyYW0gW2xpc3RlbmVyXSAtIHRoZSBjYXRjaC1hbGwgbGlzdGVuZXIgKG9wdGlvbmFsKVxuICAgKi9cbiAgb2ZmQW55T3V0Z29pbmcobGlzdGVuZXIpIHtcbiAgICBpZiAoIXRoaXMuX2FueU91dGdvaW5nTGlzdGVuZXJzKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgaWYgKGxpc3RlbmVyKSB7XG4gICAgICBjb25zdCBsaXN0ZW5lcnMgPSB0aGlzLl9hbnlPdXRnb2luZ0xpc3RlbmVycztcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGlzdGVuZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChsaXN0ZW5lciA9PT0gbGlzdGVuZXJzW2ldKSB7XG4gICAgICAgICAgbGlzdGVuZXJzLnNwbGljZShpLCAxKTtcbiAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9hbnlPdXRnb2luZ0xpc3RlbmVycyA9IFtdO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBhbiBhcnJheSBvZiBsaXN0ZW5lcnMgdGhhdCBhcmUgbGlzdGVuaW5nIGZvciBhbnkgZXZlbnQgdGhhdCBpcyBzcGVjaWZpZWQuIFRoaXMgYXJyYXkgY2FuIGJlIG1hbmlwdWxhdGVkLFxuICAgKiBlLmcuIHRvIHJlbW92ZSBsaXN0ZW5lcnMuXG4gICAqL1xuICBsaXN0ZW5lcnNBbnlPdXRnb2luZygpIHtcbiAgICByZXR1cm4gdGhpcy5fYW55T3V0Z29pbmdMaXN0ZW5lcnMgfHwgW107XG4gIH1cbiAgLyoqXG4gICAqIE5vdGlmeSB0aGUgbGlzdGVuZXJzIGZvciBlYWNoIHBhY2tldCBzZW50XG4gICAqXG4gICAqIEBwYXJhbSBwYWNrZXRcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIG5vdGlmeU91dGdvaW5nTGlzdGVuZXJzKHBhY2tldCkge1xuICAgIGlmICh0aGlzLl9hbnlPdXRnb2luZ0xpc3RlbmVycyAmJiB0aGlzLl9hbnlPdXRnb2luZ0xpc3RlbmVycy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IGxpc3RlbmVycyA9IHRoaXMuX2FueU91dGdvaW5nTGlzdGVuZXJzLnNsaWNlKCk7XG4gICAgICBmb3IgKGNvbnN0IGxpc3RlbmVyIG9mIGxpc3RlbmVycykge1xuICAgICAgICBsaXN0ZW5lci5hcHBseSh0aGlzLCBwYWNrZXQuZGF0YSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBJbml0aWFsaXplIGJhY2tvZmYgdGltZXIgd2l0aCBgb3B0c2AuXG4gKlxuICogLSBgbWluYCBpbml0aWFsIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzIFsxMDBdXG4gKiAtIGBtYXhgIG1heCB0aW1lb3V0IFsxMDAwMF1cbiAqIC0gYGppdHRlcmAgWzBdXG4gKiAtIGBmYWN0b3JgIFsyXVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzXG4gKiBAYXBpIHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gQmFja29mZihvcHRzKSB7XG4gIG9wdHMgPSBvcHRzIHx8IHt9O1xuICB0aGlzLm1zID0gb3B0cy5taW4gfHwgMTAwO1xuICB0aGlzLm1heCA9IG9wdHMubWF4IHx8IDEwMDAwO1xuICB0aGlzLmZhY3RvciA9IG9wdHMuZmFjdG9yIHx8IDI7XG4gIHRoaXMuaml0dGVyID0gb3B0cy5qaXR0ZXIgPiAwICYmIG9wdHMuaml0dGVyIDw9IDEgPyBvcHRzLmppdHRlciA6IDA7XG4gIHRoaXMuYXR0ZW1wdHMgPSAwO1xufVxuLyoqXG4gKiBSZXR1cm4gdGhlIGJhY2tvZmYgZHVyYXRpb24uXG4gKlxuICogQHJldHVybiB7TnVtYmVyfVxuICogQGFwaSBwdWJsaWNcbiAqL1xuQmFja29mZi5wcm90b3R5cGUuZHVyYXRpb24gPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBtcyA9IHRoaXMubXMgKiBNYXRoLnBvdyh0aGlzLmZhY3RvciwgdGhpcy5hdHRlbXB0cysrKTtcbiAgaWYgKHRoaXMuaml0dGVyKSB7XG4gICAgdmFyIHJhbmQgPSBNYXRoLnJhbmRvbSgpO1xuICAgIHZhciBkZXZpYXRpb24gPSBNYXRoLmZsb29yKHJhbmQgKiB0aGlzLmppdHRlciAqIG1zKTtcbiAgICBtcyA9IChNYXRoLmZsb29yKHJhbmQgKiAxMCkgJiAxKSA9PSAwID8gbXMgLSBkZXZpYXRpb24gOiBtcyArIGRldmlhdGlvbjtcbiAgfVxuICByZXR1cm4gTWF0aC5taW4obXMsIHRoaXMubWF4KSB8IDA7XG59O1xuLyoqXG4gKiBSZXNldCB0aGUgbnVtYmVyIG9mIGF0dGVtcHRzLlxuICpcbiAqIEBhcGkgcHVibGljXG4gKi9cbkJhY2tvZmYucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmF0dGVtcHRzID0gMDtcbn07XG4vKipcbiAqIFNldCB0aGUgbWluaW11bSBkdXJhdGlvblxuICpcbiAqIEBhcGkgcHVibGljXG4gKi9cbkJhY2tvZmYucHJvdG90eXBlLnNldE1pbiA9IGZ1bmN0aW9uIChtaW4pIHtcbiAgdGhpcy5tcyA9IG1pbjtcbn07XG4vKipcbiAqIFNldCB0aGUgbWF4aW11bSBkdXJhdGlvblxuICpcbiAqIEBhcGkgcHVibGljXG4gKi9cbkJhY2tvZmYucHJvdG90eXBlLnNldE1heCA9IGZ1bmN0aW9uIChtYXgpIHtcbiAgdGhpcy5tYXggPSBtYXg7XG59O1xuLyoqXG4gKiBTZXQgdGhlIGppdHRlclxuICpcbiAqIEBhcGkgcHVibGljXG4gKi9cbkJhY2tvZmYucHJvdG90eXBlLnNldEppdHRlciA9IGZ1bmN0aW9uIChqaXR0ZXIpIHtcbiAgdGhpcy5qaXR0ZXIgPSBqaXR0ZXI7XG59OyIsImltcG9ydCB7IFNvY2tldCBhcyBFbmdpbmUsIGluc3RhbGxUaW1lckZ1bmN0aW9ucywgbmV4dFRpY2sgfSBmcm9tIFwiZW5naW5lLmlvLWNsaWVudFwiO1xuaW1wb3J0IHsgU29ja2V0IH0gZnJvbSBcIi4vc29ja2V0LmpzXCI7XG5pbXBvcnQgKiBhcyBwYXJzZXIgZnJvbSBcInNvY2tldC5pby1wYXJzZXJcIjtcbmltcG9ydCB7IG9uIH0gZnJvbSBcIi4vb24uanNcIjtcbmltcG9ydCB7IEJhY2tvZmYgfSBmcm9tIFwiLi9jb250cmliL2JhY2tvMi5qc1wiO1xuaW1wb3J0IHsgRW1pdHRlciB9IGZyb20gXCJAc29ja2V0LmlvL2NvbXBvbmVudC1lbWl0dGVyXCI7XG5leHBvcnQgY2xhc3MgTWFuYWdlciBleHRlbmRzIEVtaXR0ZXIge1xuICBjb25zdHJ1Y3Rvcih1cmksIG9wdHMpIHtcbiAgICB2YXIgX2E7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLm5zcHMgPSB7fTtcbiAgICB0aGlzLnN1YnMgPSBbXTtcbiAgICBpZiAodXJpICYmIFwib2JqZWN0XCIgPT09IHR5cGVvZiB1cmkpIHtcbiAgICAgIG9wdHMgPSB1cmk7XG4gICAgICB1cmkgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIG9wdHMgPSBvcHRzIHx8IHt9O1xuICAgIG9wdHMucGF0aCA9IG9wdHMucGF0aCB8fCBcIi9zb2NrZXQuaW9cIjtcbiAgICB0aGlzLm9wdHMgPSBvcHRzO1xuICAgIGluc3RhbGxUaW1lckZ1bmN0aW9ucyh0aGlzLCBvcHRzKTtcbiAgICB0aGlzLnJlY29ubmVjdGlvbihvcHRzLnJlY29ubmVjdGlvbiAhPT0gZmFsc2UpO1xuICAgIHRoaXMucmVjb25uZWN0aW9uQXR0ZW1wdHMob3B0cy5yZWNvbm5lY3Rpb25BdHRlbXB0cyB8fCBJbmZpbml0eSk7XG4gICAgdGhpcy5yZWNvbm5lY3Rpb25EZWxheShvcHRzLnJlY29ubmVjdGlvbkRlbGF5IHx8IDEwMDApO1xuICAgIHRoaXMucmVjb25uZWN0aW9uRGVsYXlNYXgob3B0cy5yZWNvbm5lY3Rpb25EZWxheU1heCB8fCA1MDAwKTtcbiAgICB0aGlzLnJhbmRvbWl6YXRpb25GYWN0b3IoKF9hID0gb3B0cy5yYW5kb21pemF0aW9uRmFjdG9yKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAwLjUpO1xuICAgIHRoaXMuYmFja29mZiA9IG5ldyBCYWNrb2ZmKHtcbiAgICAgIG1pbjogdGhpcy5yZWNvbm5lY3Rpb25EZWxheSgpLFxuICAgICAgbWF4OiB0aGlzLnJlY29ubmVjdGlvbkRlbGF5TWF4KCksXG4gICAgICBqaXR0ZXI6IHRoaXMucmFuZG9taXphdGlvbkZhY3RvcigpXG4gICAgfSk7XG4gICAgdGhpcy50aW1lb3V0KG51bGwgPT0gb3B0cy50aW1lb3V0ID8gMjAwMDAgOiBvcHRzLnRpbWVvdXQpO1xuICAgIHRoaXMuX3JlYWR5U3RhdGUgPSBcImNsb3NlZFwiO1xuICAgIHRoaXMudXJpID0gdXJpO1xuICAgIGNvbnN0IF9wYXJzZXIgPSBvcHRzLnBhcnNlciB8fCBwYXJzZXI7XG4gICAgdGhpcy5lbmNvZGVyID0gbmV3IF9wYXJzZXIuRW5jb2RlcigpO1xuICAgIHRoaXMuZGVjb2RlciA9IG5ldyBfcGFyc2VyLkRlY29kZXIoKTtcbiAgICB0aGlzLl9hdXRvQ29ubmVjdCA9IG9wdHMuYXV0b0Nvbm5lY3QgIT09IGZhbHNlO1xuICAgIGlmICh0aGlzLl9hdXRvQ29ubmVjdCkgdGhpcy5vcGVuKCk7XG4gIH1cbiAgcmVjb25uZWN0aW9uKHYpIHtcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiB0aGlzLl9yZWNvbm5lY3Rpb247XG4gICAgdGhpcy5fcmVjb25uZWN0aW9uID0gISF2O1xuICAgIGlmICghdikge1xuICAgICAgdGhpcy5za2lwUmVjb25uZWN0ID0gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgcmVjb25uZWN0aW9uQXR0ZW1wdHModikge1xuICAgIGlmICh2ID09PSB1bmRlZmluZWQpIHJldHVybiB0aGlzLl9yZWNvbm5lY3Rpb25BdHRlbXB0cztcbiAgICB0aGlzLl9yZWNvbm5lY3Rpb25BdHRlbXB0cyA9IHY7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgcmVjb25uZWN0aW9uRGVsYXkodikge1xuICAgIHZhciBfYTtcbiAgICBpZiAodiA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdGhpcy5fcmVjb25uZWN0aW9uRGVsYXk7XG4gICAgdGhpcy5fcmVjb25uZWN0aW9uRGVsYXkgPSB2O1xuICAgIChfYSA9IHRoaXMuYmFja29mZikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnNldE1pbih2KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICByYW5kb21pemF0aW9uRmFjdG9yKHYpIHtcbiAgICB2YXIgX2E7XG4gICAgaWYgKHYgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHRoaXMuX3JhbmRvbWl6YXRpb25GYWN0b3I7XG4gICAgdGhpcy5fcmFuZG9taXphdGlvbkZhY3RvciA9IHY7XG4gICAgKF9hID0gdGhpcy5iYWNrb2ZmKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc2V0Sml0dGVyKHYpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIHJlY29ubmVjdGlvbkRlbGF5TWF4KHYpIHtcbiAgICB2YXIgX2E7XG4gICAgaWYgKHYgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHRoaXMuX3JlY29ubmVjdGlvbkRlbGF5TWF4O1xuICAgIHRoaXMuX3JlY29ubmVjdGlvbkRlbGF5TWF4ID0gdjtcbiAgICAoX2EgPSB0aGlzLmJhY2tvZmYpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5zZXRNYXgodik7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgdGltZW91dCh2KSB7XG4gICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gdGhpcy5fdGltZW91dDtcbiAgICB0aGlzLl90aW1lb3V0ID0gdjtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICAvKipcbiAgICogU3RhcnRzIHRyeWluZyB0byByZWNvbm5lY3QgaWYgcmVjb25uZWN0aW9uIGlzIGVuYWJsZWQgYW5kIHdlIGhhdmUgbm90XG4gICAqIHN0YXJ0ZWQgcmVjb25uZWN0aW5nIHlldFxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgbWF5YmVSZWNvbm5lY3RPbk9wZW4oKSB7XG4gICAgLy8gT25seSB0cnkgdG8gcmVjb25uZWN0IGlmIGl0J3MgdGhlIGZpcnN0IHRpbWUgd2UncmUgY29ubmVjdGluZ1xuICAgIGlmICghdGhpcy5fcmVjb25uZWN0aW5nICYmIHRoaXMuX3JlY29ubmVjdGlvbiAmJiB0aGlzLmJhY2tvZmYuYXR0ZW1wdHMgPT09IDApIHtcbiAgICAgIC8vIGtlZXBzIHJlY29ubmVjdGlvbiBmcm9tIGZpcmluZyB0d2ljZSBmb3IgdGhlIHNhbWUgcmVjb25uZWN0aW9uIGxvb3BcbiAgICAgIHRoaXMucmVjb25uZWN0KCk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBTZXRzIHRoZSBjdXJyZW50IHRyYW5zcG9ydCBgc29ja2V0YC5cbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gLSBvcHRpb25hbCwgY2FsbGJhY2tcbiAgICogQHJldHVybiBzZWxmXG4gICAqIEBwdWJsaWNcbiAgICovXG4gIG9wZW4oZm4pIHtcbiAgICBpZiAofnRoaXMuX3JlYWR5U3RhdGUuaW5kZXhPZihcIm9wZW5cIikpIHJldHVybiB0aGlzO1xuICAgIHRoaXMuZW5naW5lID0gbmV3IEVuZ2luZSh0aGlzLnVyaSwgdGhpcy5vcHRzKTtcbiAgICBjb25zdCBzb2NrZXQgPSB0aGlzLmVuZ2luZTtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICB0aGlzLl9yZWFkeVN0YXRlID0gXCJvcGVuaW5nXCI7XG4gICAgdGhpcy5za2lwUmVjb25uZWN0ID0gZmFsc2U7XG4gICAgLy8gZW1pdCBgb3BlbmBcbiAgICBjb25zdCBvcGVuU3ViRGVzdHJveSA9IG9uKHNvY2tldCwgXCJvcGVuXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHNlbGYub25vcGVuKCk7XG4gICAgICBmbiAmJiBmbigpO1xuICAgIH0pO1xuICAgIGNvbnN0IG9uRXJyb3IgPSBlcnIgPT4ge1xuICAgICAgdGhpcy5jbGVhbnVwKCk7XG4gICAgICB0aGlzLl9yZWFkeVN0YXRlID0gXCJjbG9zZWRcIjtcbiAgICAgIHRoaXMuZW1pdFJlc2VydmVkKFwiZXJyb3JcIiwgZXJyKTtcbiAgICAgIGlmIChmbikge1xuICAgICAgICBmbihlcnIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gT25seSBkbyB0aGlzIGlmIHRoZXJlIGlzIG5vIGZuIHRvIGhhbmRsZSB0aGUgZXJyb3JcbiAgICAgICAgdGhpcy5tYXliZVJlY29ubmVjdE9uT3BlbigpO1xuICAgICAgfVxuICAgIH07XG4gICAgLy8gZW1pdCBgZXJyb3JgXG4gICAgY29uc3QgZXJyb3JTdWIgPSBvbihzb2NrZXQsIFwiZXJyb3JcIiwgb25FcnJvcik7XG4gICAgaWYgKGZhbHNlICE9PSB0aGlzLl90aW1lb3V0KSB7XG4gICAgICBjb25zdCB0aW1lb3V0ID0gdGhpcy5fdGltZW91dDtcbiAgICAgIC8vIHNldCB0aW1lclxuICAgICAgY29uc3QgdGltZXIgPSB0aGlzLnNldFRpbWVvdXRGbigoKSA9PiB7XG4gICAgICAgIG9wZW5TdWJEZXN0cm95KCk7XG4gICAgICAgIG9uRXJyb3IobmV3IEVycm9yKFwidGltZW91dFwiKSk7XG4gICAgICAgIHNvY2tldC5jbG9zZSgpO1xuICAgICAgfSwgdGltZW91dCk7XG4gICAgICBpZiAodGhpcy5vcHRzLmF1dG9VbnJlZikge1xuICAgICAgICB0aW1lci51bnJlZigpO1xuICAgICAgfVxuICAgICAgdGhpcy5zdWJzLnB1c2goKCkgPT4ge1xuICAgICAgICB0aGlzLmNsZWFyVGltZW91dEZuKHRpbWVyKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLnN1YnMucHVzaChvcGVuU3ViRGVzdHJveSk7XG4gICAgdGhpcy5zdWJzLnB1c2goZXJyb3JTdWIpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIC8qKlxuICAgKiBBbGlhcyBmb3Igb3BlbigpXG4gICAqXG4gICAqIEByZXR1cm4gc2VsZlxuICAgKiBAcHVibGljXG4gICAqL1xuICBjb25uZWN0KGZuKSB7XG4gICAgcmV0dXJuIHRoaXMub3Blbihmbik7XG4gIH1cbiAgLyoqXG4gICAqIENhbGxlZCB1cG9uIHRyYW5zcG9ydCBvcGVuLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgb25vcGVuKCkge1xuICAgIC8vIGNsZWFyIG9sZCBzdWJzXG4gICAgdGhpcy5jbGVhbnVwKCk7XG4gICAgLy8gbWFyayBhcyBvcGVuXG4gICAgdGhpcy5fcmVhZHlTdGF0ZSA9IFwib3BlblwiO1xuICAgIHRoaXMuZW1pdFJlc2VydmVkKFwib3BlblwiKTtcbiAgICAvLyBhZGQgbmV3IHN1YnNcbiAgICBjb25zdCBzb2NrZXQgPSB0aGlzLmVuZ2luZTtcbiAgICB0aGlzLnN1YnMucHVzaChvbihzb2NrZXQsIFwicGluZ1wiLCB0aGlzLm9ucGluZy5iaW5kKHRoaXMpKSwgb24oc29ja2V0LCBcImRhdGFcIiwgdGhpcy5vbmRhdGEuYmluZCh0aGlzKSksIG9uKHNvY2tldCwgXCJlcnJvclwiLCB0aGlzLm9uZXJyb3IuYmluZCh0aGlzKSksIG9uKHNvY2tldCwgXCJjbG9zZVwiLCB0aGlzLm9uY2xvc2UuYmluZCh0aGlzKSksXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIG9uKHRoaXMuZGVjb2RlciwgXCJkZWNvZGVkXCIsIHRoaXMub25kZWNvZGVkLmJpbmQodGhpcykpKTtcbiAgfVxuICAvKipcbiAgICogQ2FsbGVkIHVwb24gYSBwaW5nLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgb25waW5nKCkge1xuICAgIHRoaXMuZW1pdFJlc2VydmVkKFwicGluZ1wiKTtcbiAgfVxuICAvKipcbiAgICogQ2FsbGVkIHdpdGggZGF0YS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIG9uZGF0YShkYXRhKSB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuZGVjb2Rlci5hZGQoZGF0YSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5vbmNsb3NlKFwicGFyc2UgZXJyb3JcIiwgZSk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiBwYXJzZXIgZnVsbHkgZGVjb2RlcyBhIHBhY2tldC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIG9uZGVjb2RlZChwYWNrZXQpIHtcbiAgICAvLyB0aGUgbmV4dFRpY2sgY2FsbCBwcmV2ZW50cyBhbiBleGNlcHRpb24gaW4gYSB1c2VyLXByb3ZpZGVkIGV2ZW50IGxpc3RlbmVyIGZyb20gdHJpZ2dlcmluZyBhIGRpc2Nvbm5lY3Rpb24gZHVlIHRvIGEgXCJwYXJzZSBlcnJvclwiXG4gICAgbmV4dFRpY2soKCkgPT4ge1xuICAgICAgdGhpcy5lbWl0UmVzZXJ2ZWQoXCJwYWNrZXRcIiwgcGFja2V0KTtcbiAgICB9LCB0aGlzLnNldFRpbWVvdXRGbik7XG4gIH1cbiAgLyoqXG4gICAqIENhbGxlZCB1cG9uIHNvY2tldCBlcnJvci5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIG9uZXJyb3IoZXJyKSB7XG4gICAgdGhpcy5lbWl0UmVzZXJ2ZWQoXCJlcnJvclwiLCBlcnIpO1xuICB9XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IHNvY2tldCBmb3IgdGhlIGdpdmVuIGBuc3BgLlxuICAgKlxuICAgKiBAcmV0dXJuIHtTb2NrZXR9XG4gICAqIEBwdWJsaWNcbiAgICovXG4gIHNvY2tldChuc3AsIG9wdHMpIHtcbiAgICBsZXQgc29ja2V0ID0gdGhpcy5uc3BzW25zcF07XG4gICAgaWYgKCFzb2NrZXQpIHtcbiAgICAgIHNvY2tldCA9IG5ldyBTb2NrZXQodGhpcywgbnNwLCBvcHRzKTtcbiAgICAgIHRoaXMubnNwc1tuc3BdID0gc29ja2V0O1xuICAgIH0gZWxzZSBpZiAodGhpcy5fYXV0b0Nvbm5lY3QgJiYgIXNvY2tldC5hY3RpdmUpIHtcbiAgICAgIHNvY2tldC5jb25uZWN0KCk7XG4gICAgfVxuICAgIHJldHVybiBzb2NrZXQ7XG4gIH1cbiAgLyoqXG4gICAqIENhbGxlZCB1cG9uIGEgc29ja2V0IGNsb3NlLlxuICAgKlxuICAgKiBAcGFyYW0gc29ja2V0XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZGVzdHJveShzb2NrZXQpIHtcbiAgICBjb25zdCBuc3BzID0gT2JqZWN0LmtleXModGhpcy5uc3BzKTtcbiAgICBmb3IgKGNvbnN0IG5zcCBvZiBuc3BzKSB7XG4gICAgICBjb25zdCBzb2NrZXQgPSB0aGlzLm5zcHNbbnNwXTtcbiAgICAgIGlmIChzb2NrZXQuYWN0aXZlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5fY2xvc2UoKTtcbiAgfVxuICAvKipcbiAgICogV3JpdGVzIGEgcGFja2V0LlxuICAgKlxuICAgKiBAcGFyYW0gcGFja2V0XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfcGFja2V0KHBhY2tldCkge1xuICAgIGNvbnN0IGVuY29kZWRQYWNrZXRzID0gdGhpcy5lbmNvZGVyLmVuY29kZShwYWNrZXQpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZW5jb2RlZFBhY2tldHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuZW5naW5lLndyaXRlKGVuY29kZWRQYWNrZXRzW2ldLCBwYWNrZXQub3B0aW9ucyk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBDbGVhbiB1cCB0cmFuc3BvcnQgc3Vic2NyaXB0aW9ucyBhbmQgcGFja2V0IGJ1ZmZlci5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGNsZWFudXAoKSB7XG4gICAgdGhpcy5zdWJzLmZvckVhY2goc3ViRGVzdHJveSA9PiBzdWJEZXN0cm95KCkpO1xuICAgIHRoaXMuc3Vicy5sZW5ndGggPSAwO1xuICAgIHRoaXMuZGVjb2Rlci5kZXN0cm95KCk7XG4gIH1cbiAgLyoqXG4gICAqIENsb3NlIHRoZSBjdXJyZW50IHNvY2tldC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jbG9zZSgpIHtcbiAgICB0aGlzLnNraXBSZWNvbm5lY3QgPSB0cnVlO1xuICAgIHRoaXMuX3JlY29ubmVjdGluZyA9IGZhbHNlO1xuICAgIHRoaXMub25jbG9zZShcImZvcmNlZCBjbG9zZVwiKTtcbiAgfVxuICAvKipcbiAgICogQWxpYXMgZm9yIGNsb3NlKClcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGRpc2Nvbm5lY3QoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Nsb3NlKCk7XG4gIH1cbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuOlxuICAgKlxuICAgKiAtIHRoZSBsb3ctbGV2ZWwgZW5naW5lIGlzIGNsb3NlZFxuICAgKiAtIHRoZSBwYXJzZXIgZW5jb3VudGVyZWQgYSBiYWRseSBmb3JtYXR0ZWQgcGFja2V0XG4gICAqIC0gYWxsIHNvY2tldHMgYXJlIGRpc2Nvbm5lY3RlZFxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgb25jbG9zZShyZWFzb24sIGRlc2NyaXB0aW9uKSB7XG4gICAgdmFyIF9hO1xuICAgIHRoaXMuY2xlYW51cCgpO1xuICAgIChfYSA9IHRoaXMuZW5naW5lKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2xvc2UoKTtcbiAgICB0aGlzLmJhY2tvZmYucmVzZXQoKTtcbiAgICB0aGlzLl9yZWFkeVN0YXRlID0gXCJjbG9zZWRcIjtcbiAgICB0aGlzLmVtaXRSZXNlcnZlZChcImNsb3NlXCIsIHJlYXNvbiwgZGVzY3JpcHRpb24pO1xuICAgIGlmICh0aGlzLl9yZWNvbm5lY3Rpb24gJiYgIXRoaXMuc2tpcFJlY29ubmVjdCkge1xuICAgICAgdGhpcy5yZWNvbm5lY3QoKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIEF0dGVtcHQgYSByZWNvbm5lY3Rpb24uXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICByZWNvbm5lY3QoKSB7XG4gICAgaWYgKHRoaXMuX3JlY29ubmVjdGluZyB8fCB0aGlzLnNraXBSZWNvbm5lY3QpIHJldHVybiB0aGlzO1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIGlmICh0aGlzLmJhY2tvZmYuYXR0ZW1wdHMgPj0gdGhpcy5fcmVjb25uZWN0aW9uQXR0ZW1wdHMpIHtcbiAgICAgIHRoaXMuYmFja29mZi5yZXNldCgpO1xuICAgICAgdGhpcy5lbWl0UmVzZXJ2ZWQoXCJyZWNvbm5lY3RfZmFpbGVkXCIpO1xuICAgICAgdGhpcy5fcmVjb25uZWN0aW5nID0gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGRlbGF5ID0gdGhpcy5iYWNrb2ZmLmR1cmF0aW9uKCk7XG4gICAgICB0aGlzLl9yZWNvbm5lY3RpbmcgPSB0cnVlO1xuICAgICAgY29uc3QgdGltZXIgPSB0aGlzLnNldFRpbWVvdXRGbigoKSA9PiB7XG4gICAgICAgIGlmIChzZWxmLnNraXBSZWNvbm5lY3QpIHJldHVybjtcbiAgICAgICAgdGhpcy5lbWl0UmVzZXJ2ZWQoXCJyZWNvbm5lY3RfYXR0ZW1wdFwiLCBzZWxmLmJhY2tvZmYuYXR0ZW1wdHMpO1xuICAgICAgICAvLyBjaGVjayBhZ2FpbiBmb3IgdGhlIGNhc2Ugc29ja2V0IGNsb3NlZCBpbiBhYm92ZSBldmVudHNcbiAgICAgICAgaWYgKHNlbGYuc2tpcFJlY29ubmVjdCkgcmV0dXJuO1xuICAgICAgICBzZWxmLm9wZW4oZXJyID0+IHtcbiAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICBzZWxmLl9yZWNvbm5lY3RpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIHNlbGYucmVjb25uZWN0KCk7XG4gICAgICAgICAgICB0aGlzLmVtaXRSZXNlcnZlZChcInJlY29ubmVjdF9lcnJvclwiLCBlcnIpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZWxmLm9ucmVjb25uZWN0KCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0sIGRlbGF5KTtcbiAgICAgIGlmICh0aGlzLm9wdHMuYXV0b1VucmVmKSB7XG4gICAgICAgIHRpbWVyLnVucmVmKCk7XG4gICAgICB9XG4gICAgICB0aGlzLnN1YnMucHVzaCgoKSA9PiB7XG4gICAgICAgIHRoaXMuY2xlYXJUaW1lb3V0Rm4odGltZXIpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBDYWxsZWQgdXBvbiBzdWNjZXNzZnVsIHJlY29ubmVjdC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIG9ucmVjb25uZWN0KCkge1xuICAgIGNvbnN0IGF0dGVtcHQgPSB0aGlzLmJhY2tvZmYuYXR0ZW1wdHM7XG4gICAgdGhpcy5fcmVjb25uZWN0aW5nID0gZmFsc2U7XG4gICAgdGhpcy5iYWNrb2ZmLnJlc2V0KCk7XG4gICAgdGhpcy5lbWl0UmVzZXJ2ZWQoXCJyZWNvbm5lY3RcIiwgYXR0ZW1wdCk7XG4gIH1cbn0iLCJpbXBvcnQgeyB1cmwgfSBmcm9tIFwiLi91cmwuanNcIjtcbmltcG9ydCB7IE1hbmFnZXIgfSBmcm9tIFwiLi9tYW5hZ2VyLmpzXCI7XG5pbXBvcnQgeyBTb2NrZXQgfSBmcm9tIFwiLi9zb2NrZXQuanNcIjtcbi8qKlxuICogTWFuYWdlcnMgY2FjaGUuXG4gKi9cbmNvbnN0IGNhY2hlID0ge307XG5mdW5jdGlvbiBsb29rdXAodXJpLCBvcHRzKSB7XG4gIGlmICh0eXBlb2YgdXJpID09PSBcIm9iamVjdFwiKSB7XG4gICAgb3B0cyA9IHVyaTtcbiAgICB1cmkgPSB1bmRlZmluZWQ7XG4gIH1cbiAgb3B0cyA9IG9wdHMgfHwge307XG4gIGNvbnN0IHBhcnNlZCA9IHVybCh1cmksIG9wdHMucGF0aCB8fCBcIi9zb2NrZXQuaW9cIik7XG4gIGNvbnN0IHNvdXJjZSA9IHBhcnNlZC5zb3VyY2U7XG4gIGNvbnN0IGlkID0gcGFyc2VkLmlkO1xuICBjb25zdCBwYXRoID0gcGFyc2VkLnBhdGg7XG4gIGNvbnN0IHNhbWVOYW1lc3BhY2UgPSBjYWNoZVtpZF0gJiYgcGF0aCBpbiBjYWNoZVtpZF1bXCJuc3BzXCJdO1xuICBjb25zdCBuZXdDb25uZWN0aW9uID0gb3B0cy5mb3JjZU5ldyB8fCBvcHRzW1wiZm9yY2UgbmV3IGNvbm5lY3Rpb25cIl0gfHwgZmFsc2UgPT09IG9wdHMubXVsdGlwbGV4IHx8IHNhbWVOYW1lc3BhY2U7XG4gIGxldCBpbztcbiAgaWYgKG5ld0Nvbm5lY3Rpb24pIHtcbiAgICBpbyA9IG5ldyBNYW5hZ2VyKHNvdXJjZSwgb3B0cyk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKCFjYWNoZVtpZF0pIHtcbiAgICAgIGNhY2hlW2lkXSA9IG5ldyBNYW5hZ2VyKHNvdXJjZSwgb3B0cyk7XG4gICAgfVxuICAgIGlvID0gY2FjaGVbaWRdO1xuICB9XG4gIGlmIChwYXJzZWQucXVlcnkgJiYgIW9wdHMucXVlcnkpIHtcbiAgICBvcHRzLnF1ZXJ5ID0gcGFyc2VkLnF1ZXJ5S2V5O1xuICB9XG4gIHJldHVybiBpby5zb2NrZXQocGFyc2VkLnBhdGgsIG9wdHMpO1xufVxuLy8gc28gdGhhdCBcImxvb2t1cFwiIGNhbiBiZSB1c2VkIGJvdGggYXMgYSBmdW5jdGlvbiAoZS5nLiBgaW8oLi4uKWApIGFuZCBhcyBhXG4vLyBuYW1lc3BhY2UgKGUuZy4gYGlvLmNvbm5lY3QoLi4uKWApLCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuT2JqZWN0LmFzc2lnbihsb29rdXAsIHtcbiAgTWFuYWdlcixcbiAgU29ja2V0LFxuICBpbzogbG9va3VwLFxuICBjb25uZWN0OiBsb29rdXBcbn0pO1xuLyoqXG4gKiBQcm90b2NvbCB2ZXJzaW9uLlxuICpcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IHsgcHJvdG9jb2wgfSBmcm9tIFwic29ja2V0LmlvLXBhcnNlclwiO1xuLyoqXG4gKiBFeHBvc2UgY29uc3RydWN0b3JzIGZvciBzdGFuZGFsb25lIGJ1aWxkLlxuICpcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IHsgTWFuYWdlciwgU29ja2V0LCBsb29rdXAgYXMgaW8sIGxvb2t1cCBhcyBjb25uZWN0LCBsb29rdXAgYXMgZGVmYXVsdCB9O1xuZXhwb3J0IHsgRmV0Y2gsIE5vZGVYSFIsIFhIUiwgTm9kZVdlYlNvY2tldCwgV2ViU29ja2V0LCBXZWJUcmFuc3BvcnQgfSBmcm9tIFwiZW5naW5lLmlvLWNsaWVudFwiOyIsImV4cG9ydCBlbnVtIENvbm5lY3Rpb25TdGF0dXMge1xuICBDT05ORUNURUQgPSAnQ09OTkVDVEVEJyxcbiAgRElTQ09OTkVDVEVEID0gJ0RJU0NPTk5FQ1RFRCcsXG4gIFJFQ09OTkVDVElORyA9ICdSRUNPTk5FQ1RJTkcnLFxufVxuIiwiaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0aW9uVG9rZW4sIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmFja2VuZFJlc29sdmVkUGF5bG9hZCwgQmFja2VuZFRyaWdnZXJlZFBheWxvYWQgfSBmcm9tICcuLi9tb2RlbHMvcmVhbHRpbWUtYWxhcm0tZXZlbnQubW9kZWwnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJlYWx0aW1lQWxhcm1FdmVudE5vcm1hbGl6ZXJQb3J0IHtcblx0cGFyc2VCYWNrZW5kVHJpZ2dlcmVkUGF5bG9hZChwYXlsb2FkOiB1bmtub3duKTogQmFja2VuZFRyaWdnZXJlZFBheWxvYWQgfCBudWxsO1xuXHRwYXJzZUJhY2tlbmRSZXNvbHZlZFBheWxvYWQocGF5bG9hZDogdW5rbm93bik6IEJhY2tlbmRSZXNvbHZlZFBheWxvYWQgfCBudWxsO1xufVxuXG5leHBvcnQgY29uc3QgUkVBTFRJTUVfQUxBUk1fRVZFTlRfTk9STUFMSVpFUiA9IG5ldyBJbmplY3Rpb25Ub2tlbjxSZWFsdGltZUFsYXJtRXZlbnROb3JtYWxpemVyUG9ydD4oXG5cdCdSRUFMVElNRV9BTEFSTV9FVkVOVF9OT1JNQUxJWkVSJyxcblx0e1xuXHRcdHByb3ZpZGVkSW46ICdyb290Jyxcblx0XHRmYWN0b3J5OiAoKSA9PiBpbmplY3QoUmVhbHRpbWVBbGFybUV2ZW50Tm9ybWFsaXplclNlcnZpY2UpLFxuXHR9XG4pO1xuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIFJlYWx0aW1lQWxhcm1FdmVudE5vcm1hbGl6ZXJTZXJ2aWNlIGltcGxlbWVudHMgUmVhbHRpbWVBbGFybUV2ZW50Tm9ybWFsaXplclBvcnQge1xuXHRwdWJsaWMgcGFyc2VCYWNrZW5kVHJpZ2dlcmVkUGF5bG9hZChwYXlsb2FkOiB1bmtub3duKTogQmFja2VuZFRyaWdnZXJlZFBheWxvYWQgfCBudWxsIHtcblx0XHRpZiAoIXRoaXMuaXNPYmplY3QocGF5bG9hZCkpIHtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblxuXHRcdGNvbnN0IGFsYXJtRXZlbnRJZCA9IHBheWxvYWRbJ2FsYXJtRXZlbnRJZCddO1xuXHRcdGNvbnN0IHdhcmRJZCA9IHBheWxvYWRbJ3dhcmRJZCddO1xuXHRcdGNvbnN0IGFsYXJtUnVsZUlkID0gcGF5bG9hZFsnYWxhcm1SdWxlSWQnXTtcblx0XHRjb25zdCBub3JtYWxpemVkV2FyZElkID0gdGhpcy5wYXJzZVdhcmRJZCh3YXJkSWQpO1xuXG5cdFx0aWYgKFxuXHRcdFx0dHlwZW9mIGFsYXJtRXZlbnRJZCAhPT0gJ3N0cmluZycgfHxcblx0XHRcdG5vcm1hbGl6ZWRXYXJkSWQgPT09IG51bGwgfHxcblx0XHRcdHR5cGVvZiBhbGFybVJ1bGVJZCAhPT0gJ3N0cmluZydcblx0XHQpIHtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblxuXHRcdHJldHVybiB7XG5cdFx0XHRhbGFybUV2ZW50SWQsXG5cdFx0XHR3YXJkSWQ6IG5vcm1hbGl6ZWRXYXJkSWQsXG5cdFx0XHRhbGFybVJ1bGVJZCxcblx0XHR9O1xuXHR9XG5cblx0cHVibGljIHBhcnNlQmFja2VuZFJlc29sdmVkUGF5bG9hZChwYXlsb2FkOiB1bmtub3duKTogQmFja2VuZFJlc29sdmVkUGF5bG9hZCB8IG51bGwge1xuXHRcdGlmICghdGhpcy5pc09iamVjdChwYXlsb2FkKSkge1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXG5cdFx0Y29uc3QgYWxhcm1FdmVudElkID0gcGF5bG9hZFsnYWxhcm1FdmVudElkJ107XG5cdFx0Y29uc3Qgd2FyZElkID0gcGF5bG9hZFsnd2FyZElkJ107XG5cdFx0Y29uc3Qgbm9ybWFsaXplZFdhcmRJZCA9IHRoaXMucGFyc2VXYXJkSWQod2FyZElkKTtcblxuXHRcdGlmICh0eXBlb2YgYWxhcm1FdmVudElkICE9PSAnc3RyaW5nJykge1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHtcblx0XHRcdGFsYXJtRXZlbnRJZCxcblx0XHRcdHdhcmRJZDogbm9ybWFsaXplZFdhcmRJZCA/PyB1bmRlZmluZWQsXG5cdFx0fTtcblx0fVxuXG5cdHByaXZhdGUgaXNPYmplY3QodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG5cdFx0cmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGw7XG5cdH1cblxuXHRwcml2YXRlIHBhcnNlV2FyZElkKHZhbHVlOiB1bmtub3duKTogbnVtYmVyIHwgbnVsbCB7XG5cdFx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgTnVtYmVyLmlzSW50ZWdlcih2YWx1ZSkpIHtcblx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHR9XG5cblx0XHRpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJykge1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXG5cdFx0Y29uc3QgdHJpbW1lZCA9IHZhbHVlLnRyaW0oKTtcblx0XHRpZiAoIXRyaW1tZWQpIHtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblxuXHRcdGNvbnN0IHBhcnNlZCA9IE51bWJlcih0cmltbWVkKTtcblx0XHRyZXR1cm4gTnVtYmVyLmlzSW50ZWdlcihwYXJzZWQpID8gcGFyc2VkIDogbnVsbDtcblx0fVxufVxuIiwiaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0aW9uVG9rZW4sIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWxhcm1TdGF0ZVNlcnZpY2UgfSBmcm9tICcuL2FsYXJtLXN0YXRlLnNlcnZpY2UnO1xuaW1wb3J0IHtcblx0QWxhcm1MaWZlY3ljbGVUeXBlLFxuXHRBbGFybUxpZmVjeWNsZVVwZGF0ZURldGFpbCxcblx0QUxBUk1fTElGRUNZQ0xFX1VQREFURURfRVZFTlQsXG59IGZyb20gJy4uL21vZGVscy9yZWFsdGltZS1hbGFybS1ldmVudC5tb2RlbCc7XG5pbXBvcnQge1xuXHRERUZBVUxUX1JFU09MVkVEX05PVElGSUNBVElPTl9USVRMRSxcblx0REVGQVVMVF9UUklHR0VSRURfTk9USUZJQ0FUSU9OX1RJVExFLFxuXHRmb3JtYXRUcmlnZ2VyZWROb3RpZmljYXRpb25UaXRsZSxcbn0gZnJvbSAnLi4vLi4vbm90aWZpY2F0aW9uL3V0aWxzL25vdGlmaWNhdGlvbi10aXRsZS51dGlsJztcblxuZXhwb3J0IGludGVyZmFjZSBBbGFybU5vdGlmaWNhdGlvbkRldGFpbHMge1xuXHRhbGFybU5hbWU/OiBzdHJpbmc7XG5cdHByaW9yaXR5PzogdW5rbm93bjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBbGFybUxpZmVjeWNsZU5vdGlmaWVyUG9ydCB7XG5cdHB1Ymxpc2goXG5cdFx0dHlwZTogQWxhcm1MaWZlY3ljbGVUeXBlLFxuXHRcdGFsYXJtRXZlbnRJZDogc3RyaW5nLFxuXHRcdHRpbWVzdGFtcDogc3RyaW5nLFxuXHRcdGRldGFpbHM/OiBBbGFybU5vdGlmaWNhdGlvbkRldGFpbHNcblx0KTogdm9pZDtcbn1cblxuZXhwb3J0IGNvbnN0IEFMQVJNX0xJRkVDWUNMRV9OT1RJRklFUiA9IG5ldyBJbmplY3Rpb25Ub2tlbjxBbGFybUxpZmVjeWNsZU5vdGlmaWVyUG9ydD4oXG5cdCdBTEFSTV9MSUZFQ1lDTEVfTk9USUZJRVInLFxuXHR7XG5cdFx0cHJvdmlkZWRJbjogJ3Jvb3QnLFxuXHRcdGZhY3Rvcnk6ICgpID0+IGluamVjdChBbGFybUxpZmVjeWNsZU5vdGlmaWVyU2VydmljZSksXG5cdH1cbik7XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgQWxhcm1MaWZlY3ljbGVOb3RpZmllclNlcnZpY2UgaW1wbGVtZW50cyBBbGFybUxpZmVjeWNsZU5vdGlmaWVyUG9ydCB7XG5cdHByaXZhdGUgcmVhZG9ubHkgYWxhcm1TdGF0ZVNlcnZpY2UgPSBpbmplY3QoQWxhcm1TdGF0ZVNlcnZpY2UpO1xuXG5cdHB1YmxpYyBwdWJsaXNoKFxuXHRcdHR5cGU6IEFsYXJtTGlmZWN5Y2xlVHlwZSxcblx0XHRhbGFybUV2ZW50SWQ6IHN0cmluZyxcblx0XHR0aW1lc3RhbXA6IHN0cmluZyxcblx0XHRkZXRhaWxzPzogQWxhcm1Ob3RpZmljYXRpb25EZXRhaWxzXG5cdCk6IHZvaWQge1xuXHRcdHRoaXMucHVibGlzaE5vdGlmaWNhdGlvbih0eXBlLCBhbGFybUV2ZW50SWQsIHRpbWVzdGFtcCwgZGV0YWlscyk7XG5cdFx0dGhpcy5wdWJsaXNoTGlmZWN5Y2xlVXBkYXRlKHR5cGUsIGFsYXJtRXZlbnRJZCk7XG5cdH1cblxuXHRwcml2YXRlIHB1Ymxpc2hOb3RpZmljYXRpb24oXG5cdFx0dHlwZTogQWxhcm1MaWZlY3ljbGVUeXBlLFxuXHRcdGFsYXJtRXZlbnRJZDogc3RyaW5nLFxuXHRcdHRpbWVzdGFtcDogc3RyaW5nLFxuXHRcdGRldGFpbHM/OiBBbGFybU5vdGlmaWNhdGlvbkRldGFpbHNcblx0KTogdm9pZCB7XG5cdFx0Y29uc3QgdGl0bGUgPVxuXHRcdFx0dHlwZSA9PT0gJ3RyaWdnZXJlZCdcblx0XHRcdFx0PyBmb3JtYXRUcmlnZ2VyZWROb3RpZmljYXRpb25UaXRsZShkZXRhaWxzPy5hbGFybU5hbWUsIGRldGFpbHM/LnByaW9yaXR5KSB8fFxuXHRcdFx0XHRcdERFRkFVTFRfVFJJR0dFUkVEX05PVElGSUNBVElPTl9USVRMRVxuXHRcdFx0XHQ6IERFRkFVTFRfUkVTT0xWRURfTk9USUZJQ0FUSU9OX1RJVExFO1xuXG5cdFx0dGhpcy5hbGFybVN0YXRlU2VydmljZS5vbk5vdGlmaWNhdGlvblJlY2VpdmVkKHtcblx0XHRcdG5vdGlmaWNhdGlvbklkOiBgYWxhcm0tJHt0eXBlfS0ke2FsYXJtRXZlbnRJZH1gLFxuXHRcdFx0dGl0bGUsXG5cdFx0XHRzZW50QXQ6IHRpbWVzdGFtcCxcblx0XHRcdGV2ZW50VHlwZTogdHlwZSxcblx0XHR9KTtcblx0fVxuXG5cdHByaXZhdGUgcHVibGlzaExpZmVjeWNsZVVwZGF0ZSh0eXBlOiBBbGFybUxpZmVjeWNsZVR5cGUsIGFsYXJtRXZlbnRJZDogc3RyaW5nKTogdm9pZCB7XG5cdFx0aWYgKHR5cGVvZiBnbG9iYWxUaGlzLmRpc3BhdGNoRXZlbnQgIT09ICdmdW5jdGlvbicpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAodHlwZW9mIEN1c3RvbUV2ZW50ID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRnbG9iYWxUaGlzLmRpc3BhdGNoRXZlbnQoXG5cdFx0XHRcdG5ldyBDdXN0b21FdmVudDxBbGFybUxpZmVjeWNsZVVwZGF0ZURldGFpbD4oQUxBUk1fTElGRUNZQ0xFX1VQREFURURfRVZFTlQsIHtcblx0XHRcdFx0XHRkZXRhaWw6IHtcblx0XHRcdFx0XHRcdHR5cGUsXG5cdFx0XHRcdFx0XHRhbGFybUV2ZW50SWQsXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0fSlcblx0XHRcdCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Z2xvYmFsVGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudChBTEFSTV9MSUZFQ1lDTEVfVVBEQVRFRF9FVkVOVCkpO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3Rpb25Ub2tlbiwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBXYXJkUmVhbHRpbWVDYWNoZVNlcnZpY2UgfSBmcm9tICcuL3dhcmQtcmVhbHRpbWUtY2FjaGUuc2VydmljZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVXNlckFjdGl2YXRpb25BY3Rpb25zIHtcblx0cm9vbXNUb0xlYXZlOiBzdHJpbmdbXTtcblx0cm9vbXNUb0pvaW46IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFdhcmRTb2NrZXRSb29tQ29vcmRpbmF0b3JQb3J0IHtcblx0YWN0aXZhdGVVc2VyKHVzZXJJZDogc3RyaW5nKTogVXNlckFjdGl2YXRpb25BY3Rpb25zO1xuXHRkZWFjdGl2YXRlVXNlcigpOiBzdHJpbmdbXTtcblx0cmVxdWVzdEpvaW5Sb29tKHdhcmRJZDogc3RyaW5nKTogc3RyaW5nIHwgbnVsbDtcblx0cmVxdWVzdExlYXZlUm9vbSh3YXJkSWQ6IHN0cmluZyk6IHN0cmluZyB8IG51bGw7XG5cdGdldEpvaW5lZFJvb21zKCk6IHN0cmluZ1tdO1xuXHRyZXNldFJ1bnRpbWVTdGF0ZSgpOiB2b2lkO1xufVxuXG5leHBvcnQgY29uc3QgV0FSRF9TT0NLRVRfUk9PTV9DT09SRElOQVRPUiA9IG5ldyBJbmplY3Rpb25Ub2tlbjxXYXJkU29ja2V0Um9vbUNvb3JkaW5hdG9yUG9ydD4oXG5cdCdXQVJEX1NPQ0tFVF9ST09NX0NPT1JESU5BVE9SJyxcblx0e1xuXHRcdHByb3ZpZGVkSW46ICdyb290Jyxcblx0XHRmYWN0b3J5OiAoKSA9PiBpbmplY3QoV2FyZFNvY2tldFJvb21Db29yZGluYXRvclNlcnZpY2UpLFxuXHR9XG4pO1xuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIFdhcmRTb2NrZXRSb29tQ29vcmRpbmF0b3JTZXJ2aWNlIGltcGxlbWVudHMgV2FyZFNvY2tldFJvb21Db29yZGluYXRvclBvcnQge1xuXHRwcml2YXRlIHJlYWRvbmx5IHdhcmRSZWFsdGltZUNhY2hlID0gaW5qZWN0KFdhcmRSZWFsdGltZUNhY2hlU2VydmljZSwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcblxuXHRwcml2YXRlIHJlYWRvbmx5IGpvaW5lZFJvb21zID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cdHByaXZhdGUgY3VycmVudFVzZXJJZDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cblx0cHVibGljIGFjdGl2YXRlVXNlcih1c2VySWQ6IHN0cmluZyk6IFVzZXJBY3RpdmF0aW9uQWN0aW9ucyB7XG5cdFx0Y29uc3Qgbm9ybWFsaXplZFVzZXJJZCA9IHVzZXJJZC50cmltKCk7XG5cdFx0aWYgKCFub3JtYWxpemVkVXNlcklkKSB7XG5cdFx0XHRyZXR1cm4geyByb29tc1RvTGVhdmU6IFtdLCByb29tc1RvSm9pbjogW10gfTtcblx0XHR9XG5cblx0XHRjb25zdCByb29tc1RvTGVhdmUgPVxuXHRcdFx0dGhpcy5jdXJyZW50VXNlcklkICYmIHRoaXMuY3VycmVudFVzZXJJZCAhPT0gbm9ybWFsaXplZFVzZXJJZFxuXHRcdFx0XHQ/IEFycmF5LmZyb20odGhpcy5qb2luZWRSb29tcy52YWx1ZXMoKSlcblx0XHRcdFx0OiBbXTtcblxuXHRcdGlmIChyb29tc1RvTGVhdmUubGVuZ3RoID4gMCkge1xuXHRcdFx0dGhpcy5qb2luZWRSb29tcy5jbGVhcigpO1xuXHRcdH1cblxuXHRcdHRoaXMuY3VycmVudFVzZXJJZCA9IG5vcm1hbGl6ZWRVc2VySWQ7XG5cblx0XHRjb25zdCBjYWNoZWRXYXJkSWRzID0gdGhpcy53YXJkUmVhbHRpbWVDYWNoZT8uZ2V0V2FyZElkcyhub3JtYWxpemVkVXNlcklkKSA/PyBbXTtcblx0XHRjb25zdCByb29tc1RvSm9pbjogc3RyaW5nW10gPSBbXTtcblxuXHRcdGZvciAoY29uc3QgY2FjaGVkV2FyZElkIG9mIGNhY2hlZFdhcmRJZHMpIHtcblx0XHRcdGlmICh0aGlzLmpvaW5lZFJvb21zLmhhcyhjYWNoZWRXYXJkSWQpKSB7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLmpvaW5lZFJvb21zLmFkZChjYWNoZWRXYXJkSWQpO1xuXHRcdFx0cm9vbXNUb0pvaW4ucHVzaChjYWNoZWRXYXJkSWQpO1xuXHRcdH1cblxuXHRcdHRoaXMucGVyc2lzdEpvaW5lZFJvb21zKCk7XG5cblx0XHRyZXR1cm4geyByb29tc1RvTGVhdmUsIHJvb21zVG9Kb2luIH07XG5cdH1cblxuXHRwdWJsaWMgZGVhY3RpdmF0ZVVzZXIoKTogc3RyaW5nW10ge1xuXHRcdGlmICh0aGlzLmN1cnJlbnRVc2VySWQgJiYgdGhpcy53YXJkUmVhbHRpbWVDYWNoZSkge1xuXHRcdFx0dGhpcy53YXJkUmVhbHRpbWVDYWNoZS5jbGVhcldhcmRJZHModGhpcy5jdXJyZW50VXNlcklkKTtcblx0XHR9XG5cblx0XHR0aGlzLmN1cnJlbnRVc2VySWQgPSBudWxsO1xuXHRcdGNvbnN0IHJvb21zVG9MZWF2ZSA9IEFycmF5LmZyb20odGhpcy5qb2luZWRSb29tcy52YWx1ZXMoKSk7XG5cdFx0dGhpcy5qb2luZWRSb29tcy5jbGVhcigpO1xuXHRcdHJldHVybiByb29tc1RvTGVhdmU7XG5cdH1cblxuXHRwdWJsaWMgcmVxdWVzdEpvaW5Sb29tKHdhcmRJZDogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XG5cdFx0Y29uc3Qgbm9ybWFsaXplZFdhcmRJZCA9IHdhcmRJZC50cmltKCk7XG5cdFx0aWYgKCFub3JtYWxpemVkV2FyZElkIHx8IHRoaXMuam9pbmVkUm9vbXMuaGFzKG5vcm1hbGl6ZWRXYXJkSWQpKSB7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cblx0XHR0aGlzLmpvaW5lZFJvb21zLmFkZChub3JtYWxpemVkV2FyZElkKTtcblx0XHR0aGlzLnBlcnNpc3RKb2luZWRSb29tcygpO1xuXHRcdHJldHVybiBub3JtYWxpemVkV2FyZElkO1xuXHR9XG5cblx0cHVibGljIHJlcXVlc3RMZWF2ZVJvb20od2FyZElkOiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcblx0XHRjb25zdCBub3JtYWxpemVkV2FyZElkID0gd2FyZElkLnRyaW0oKTtcblx0XHRpZiAoIW5vcm1hbGl6ZWRXYXJkSWQgfHwgIXRoaXMuam9pbmVkUm9vbXMuaGFzKG5vcm1hbGl6ZWRXYXJkSWQpKSB7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cblx0XHR0aGlzLmpvaW5lZFJvb21zLmRlbGV0ZShub3JtYWxpemVkV2FyZElkKTtcblx0XHR0aGlzLnBlcnNpc3RKb2luZWRSb29tcygpO1xuXHRcdHJldHVybiBub3JtYWxpemVkV2FyZElkO1xuXHR9XG5cblx0cHVibGljIGdldEpvaW5lZFJvb21zKCk6IHN0cmluZ1tdIHtcblx0XHRyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLmpvaW5lZFJvb21zLnZhbHVlcygpKTtcblx0fVxuXG5cdHB1YmxpYyByZXNldFJ1bnRpbWVTdGF0ZSgpOiB2b2lkIHtcblx0XHR0aGlzLmN1cnJlbnRVc2VySWQgPSBudWxsO1xuXHRcdHRoaXMuam9pbmVkUm9vbXMuY2xlYXIoKTtcblx0fVxuXG5cdHByaXZhdGUgcGVyc2lzdEpvaW5lZFJvb21zKCk6IHZvaWQge1xuXHRcdGlmICghdGhpcy5jdXJyZW50VXNlcklkIHx8ICF0aGlzLndhcmRSZWFsdGltZUNhY2hlKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dGhpcy53YXJkUmVhbHRpbWVDYWNoZS5zZXRXYXJkSWRzKHRoaXMuY3VycmVudFVzZXJJZCwgQXJyYXkuZnJvbSh0aGlzLmpvaW5lZFJvb21zLnZhbHVlcygpKSk7XG5cdH1cbn1cbiIsImltcG9ydCB7IEluamVjdGFibGUsIEluamVjdGlvblRva2VuLCBPbkRlc3Ryb3ksIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7XG5cdEJlaGF2aW9yU3ViamVjdCxcblx0T2JzZXJ2YWJsZSxcblx0U3ViamVjdCxcblx0Y2F0Y2hFcnJvcixcblx0ZmluYWxpemUsXG5cdGZyb21FdmVudCxcblx0bWFwLFxuXHRvZixcblx0dGFrZVVudGlsLFxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGlvLCBTb2NrZXQgfSBmcm9tICdzb2NrZXQuaW8tY2xpZW50JztcbmltcG9ydCB7IEFsYXJtUHJpb3JpdHkgfSBmcm9tICcuLi9tb2RlbHMvYWxhcm0tcHJpb3JpdHkuZW51bSc7XG5pbXBvcnQgeyBDb25uZWN0aW9uU3RhdHVzIH0gZnJvbSAnLi4vbW9kZWxzL2Nvbm5lY3Rpb24tc3RhdHVzLmVudW0nO1xuaW1wb3J0IHsgQWxhcm1TdGF0ZVNlcnZpY2UgfSBmcm9tICcuL2FsYXJtLXN0YXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgQVBJX0JBU0VfVVJMIH0gZnJvbSAnLi4vLi4vdG9rZW5zL2FwaS1iYXNlLXVybC50b2tlbic7XG5pbXBvcnQgeyBJbnRlcm5hbEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvaW50ZXJuYWwtYXV0aC5zZXJ2aWNlJztcbmltcG9ydCB7IEFsYXJtQXBpU2VydmljZSB9IGZyb20gJy4vYWxhcm0tYXBpLnNlcnZpY2UnO1xuaW1wb3J0IHtcblx0UkVBTFRJTUVfQUxBUk1fRVZFTlRfTk9STUFMSVpFUixcblx0dHlwZSBSZWFsdGltZUFsYXJtRXZlbnROb3JtYWxpemVyUG9ydCxcbn0gZnJvbSAnLi9yZWFsdGltZS1hbGFybS1ldmVudC1ub3JtYWxpemVyLnNlcnZpY2UnO1xuaW1wb3J0IHtcblx0QUxBUk1fTElGRUNZQ0xFX05PVElGSUVSLFxuXHR0eXBlIEFsYXJtTGlmZWN5Y2xlTm90aWZpZXJQb3J0LFxufSBmcm9tICcuL2FsYXJtLWxpZmVjeWNsZS1ub3RpZmllci5zZXJ2aWNlJztcbmltcG9ydCB7XG5cdFdBUkRfU09DS0VUX1JPT01fQ09PUkRJTkFUT1IsXG5cdHR5cGUgV2FyZFNvY2tldFJvb21Db29yZGluYXRvclBvcnQsXG59IGZyb20gJy4vd2FyZC1zb2NrZXQtcm9vbS1jb29yZGluYXRvci5zZXJ2aWNlJztcblxuZXhwb3J0IGNvbnN0IFNPQ0tFVF9JT19GQUNUT1JZID0gbmV3IEluamVjdGlvblRva2VuPHR5cGVvZiBpbz4oJ1NPQ0tFVF9JT19GQUNUT1JZJywge1xuXHRwcm92aWRlZEluOiAncm9vdCcsXG5cdGZhY3Rvcnk6ICgpID0+IGlvLFxufSk7XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgRXZlbnRTdWJzY3JpcHRpb25TZXJ2aWNlIGltcGxlbWVudHMgT25EZXN0cm95IHtcblx0cHJpdmF0ZSByZWFkb25seSBzb2NrZXRJb0ZhY3RvcnkgPSBpbmplY3QoU09DS0VUX0lPX0ZBQ1RPUlkpO1xuXHRwcml2YXRlIHJlYWRvbmx5IGh0dHAgPSBpbmplY3QoSHR0cENsaWVudCwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcblx0cHJpdmF0ZSByZWFkb25seSBhbGFybUFwaVNlcnZpY2UgPSBpbmplY3QoQWxhcm1BcGlTZXJ2aWNlLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuXHRwcml2YXRlIHJlYWRvbmx5IGFsYXJtU3RhdGVTZXJ2aWNlID0gaW5qZWN0KEFsYXJtU3RhdGVTZXJ2aWNlKTtcblx0cHJpdmF0ZSByZWFkb25seSBhcGlCYXNlVXJsID0gaW5qZWN0KEFQSV9CQVNFX1VSTCwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcblx0cHJpdmF0ZSByZWFkb25seSBpbnRlcm5hbEF1dGhTZXJ2aWNlID0gaW5qZWN0KEludGVybmFsQXV0aFNlcnZpY2UsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG5cdHByaXZhdGUgcmVhZG9ubHkgZXZlbnROb3JtYWxpemVyOiBSZWFsdGltZUFsYXJtRXZlbnROb3JtYWxpemVyUG9ydCA9IGluamVjdChSRUFMVElNRV9BTEFSTV9FVkVOVF9OT1JNQUxJWkVSKTtcblx0cHJpdmF0ZSByZWFkb25seSBsaWZlY3ljbGVOb3RpZmllcjogQWxhcm1MaWZlY3ljbGVOb3RpZmllclBvcnQgPSBpbmplY3QoQUxBUk1fTElGRUNZQ0xFX05PVElGSUVSKTtcblx0cHJpdmF0ZSByZWFkb25seSByb29tQ29vcmRpbmF0b3I6IFdhcmRTb2NrZXRSb29tQ29vcmRpbmF0b3JQb3J0ID0gaW5qZWN0KFdBUkRfU09DS0VUX1JPT01fQ09PUkRJTkFUT1IpO1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgY29ubmVjdGlvblN0YXR1cyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PENvbm5lY3Rpb25TdGF0dXM+KFxuXHRcdENvbm5lY3Rpb25TdGF0dXMuRElTQ09OTkVDVEVEXG5cdCk7XG5cdHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXHRwcml2YXRlIHNvY2tldDogU29ja2V0IHwgbnVsbCA9IG51bGw7XG5cdHByaXZhdGUgYXV0aExpZmVjeWNsZUluaXRpYWxpemVkID0gZmFsc2U7XG5cdHByaXZhdGUgYWN0aXZlVXNlcklkOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblx0cHJpdmF0ZSByZWFkb25seSB3YXJkQm9vdHN0cmFwSW5GbGlnaHRVc2VySWRzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cdHByaXZhdGUgcmVhZG9ubHkgd2FyZEJvb3RzdHJhcERvbmVVc2VySWRzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cblx0cHVibGljIGluaXRpYWxpemUod2FyZElkczogc3RyaW5nW10pOiB2b2lkIHtcblx0XHR0aGlzLmNvbm5lY3QoKTtcblx0XHR0aGlzLmVuc3VyZUF1dGhMaWZlY3ljbGVTdWJzY3JpcHRpb24oKTtcblxuXHRcdGZvciAoY29uc3Qgd2FyZElkIG9mIHdhcmRJZHMpIHtcblx0XHRcdHRoaXMuam9pblJvb20od2FyZElkKTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgcmVmcmVzaFdhcmRSb29tU3Vic2NyaXB0aW9uKCk6IHZvaWQge1xuXHRcdGlmICghdGhpcy5hY3RpdmVVc2VySWQpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR0aGlzLmJvb3RzdHJhcFdhcmRSb29tU3Vic2NyaXB0aW9uKHRoaXMuYWN0aXZlVXNlcklkLCB0cnVlKTtcblx0fVxuXG5cdHB1YmxpYyBnZXRDb25uZWN0aW9uU3RhdHVzJCgpOiBPYnNlcnZhYmxlPENvbm5lY3Rpb25TdGF0dXM+IHtcblx0XHRyZXR1cm4gdGhpcy5jb25uZWN0aW9uU3RhdHVzJC5hc09ic2VydmFibGUoKTtcblx0fVxuXG5cdHB1YmxpYyBqb2luUm9vbSh3YXJkSWQ6IHN0cmluZyk6IHZvaWQge1xuXHRcdGNvbnN0IG5vcm1hbGl6ZWRXYXJkSWQgPSB0aGlzLnJvb21Db29yZGluYXRvci5yZXF1ZXN0Sm9pblJvb20od2FyZElkKTtcblx0XHRpZiAoIW5vcm1hbGl6ZWRXYXJkSWQpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR0aGlzLnNvY2tldD8uZW1pdCgnam9pbi13YXJkJywgbm9ybWFsaXplZFdhcmRJZCk7XG5cdH1cblxuXHRwdWJsaWMgbGVhdmVSb29tKHdhcmRJZDogc3RyaW5nKTogdm9pZCB7XG5cdFx0Y29uc3Qgbm9ybWFsaXplZFdhcmRJZCA9IHRoaXMucm9vbUNvb3JkaW5hdG9yLnJlcXVlc3RMZWF2ZVJvb20od2FyZElkKTtcblx0XHRpZiAoIW5vcm1hbGl6ZWRXYXJkSWQpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR0aGlzLnNvY2tldD8uZW1pdCgnbGVhdmUtd2FyZCcsIG5vcm1hbGl6ZWRXYXJkSWQpO1xuXHR9XG5cblx0cHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuXHRcdHRoaXMuZGlzY29ubmVjdCgpO1xuXHR9XG5cblx0cHJpdmF0ZSBjb25uZWN0KCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLnNvY2tldCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHRoaXMuc29ja2V0ID0gdGhpcy5zb2NrZXRJb0ZhY3RvcnkodGhpcy5yZXNvbHZlU29ja2V0VXJsKCksIHtcblx0XHRcdHRyYW5zcG9ydHM6IFsnd2Vic29ja2V0J10sXG5cdFx0XHRyZWNvbm5lY3Rpb246IHRydWUsXG5cdFx0XHRhdXRvQ29ubmVjdDogdHJ1ZSxcblx0XHR9KTtcblxuXHRcdHRoaXMuc29ja2V0XG5cdFx0XHQub24oJ2Nvbm5lY3QnLCAoKSA9PiB7XG5cdFx0XHRcdHRoaXMuY29ubmVjdGlvblN0YXR1cyQubmV4dChDb25uZWN0aW9uU3RhdHVzLkNPTk5FQ1RFRCk7XG5cdFx0XHRcdHRoaXMucmVqb2luQWxsUm9vbXMoKTtcblx0XHRcdH0pXG5cdFx0XHQub24oJ2Rpc2Nvbm5lY3QnLCAoKSA9PiB7XG5cdFx0XHRcdHRoaXMuY29ubmVjdGlvblN0YXR1cyQubmV4dChDb25uZWN0aW9uU3RhdHVzLkRJU0NPTk5FQ1RFRCk7XG5cdFx0XHR9KVxuXHRcdFx0Lm9uKCdyZWNvbm5lY3RfYXR0ZW1wdCcsICgpID0+IHtcblx0XHRcdFx0dGhpcy5jb25uZWN0aW9uU3RhdHVzJC5uZXh0KENvbm5lY3Rpb25TdGF0dXMuUkVDT05ORUNUSU5HKTtcblx0XHRcdH0pO1xuXG5cdFx0ZnJvbUV2ZW50PHVua25vd24+KHRoaXMuc29ja2V0LCAncHVzaC1ldmVudCcpXG5cdFx0XHQucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG5cdFx0XHQuc3Vic2NyaWJlKChyYXdFdmVudCkgPT4ge1xuXHRcdFx0XHR0aGlzLmhhbmRsZUJhY2tlbmRUcmlnZ2VyZWRSYXdFdmVudChyYXdFdmVudCk7XG5cdFx0XHR9KTtcblxuXHRcdGZyb21FdmVudDx1bmtub3duPih0aGlzLnNvY2tldCwgJ2FsYXJtLXJlc29sdmVkJylcblx0XHRcdC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcblx0XHRcdC5zdWJzY3JpYmUoKHJhd0V2ZW50KSA9PiB7XG5cdFx0XHRcdHRoaXMuaGFuZGxlQmFja2VuZFJlc29sdmVkUmF3RXZlbnQocmF3RXZlbnQpO1xuXHRcdFx0fSk7XG5cdH1cblxuXHRwcml2YXRlIGRpc2Nvbm5lY3QoKTogdm9pZCB7XG5cdFx0aWYgKCF0aGlzLnNvY2tldCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHRoaXMuc29ja2V0LnJlbW92ZUFsbExpc3RlbmVycygpO1xuXHRcdHRoaXMuc29ja2V0LmRpc2Nvbm5lY3QoKTtcblx0XHR0aGlzLnNvY2tldCA9IG51bGw7XG5cdFx0dGhpcy5yb29tQ29vcmRpbmF0b3IucmVzZXRSdW50aW1lU3RhdGUoKTtcblx0XHR0aGlzLmNvbm5lY3Rpb25TdGF0dXMkLm5leHQoQ29ubmVjdGlvblN0YXR1cy5ESVNDT05ORUNURUQpO1xuXG5cdFx0dGhpcy5kZXN0cm95JC5uZXh0KCk7XG5cdFx0dGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuXHR9XG5cblx0cHJpdmF0ZSBlbnN1cmVBdXRoTGlmZWN5Y2xlU3Vic2NyaXB0aW9uKCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLmF1dGhMaWZlY3ljbGVJbml0aWFsaXplZCB8fCAhdGhpcy5pbnRlcm5hbEF1dGhTZXJ2aWNlKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dGhpcy5hdXRoTGlmZWN5Y2xlSW5pdGlhbGl6ZWQgPSB0cnVlO1xuXG5cdFx0dGhpcy5pbnRlcm5hbEF1dGhTZXJ2aWNlXG5cdFx0XHQuZ2V0Q3VycmVudFVzZXIkKClcblx0XHRcdC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcblx0XHRcdC5zdWJzY3JpYmUoKHNlc3Npb24pID0+IHtcblx0XHRcdFx0aWYgKCFzZXNzaW9uKSB7XG5cdFx0XHRcdFx0Y29uc3QgcHJldmlvdXNVc2VySWQgPSB0aGlzLmFjdGl2ZVVzZXJJZDtcblx0XHRcdFx0XHRpZiAocHJldmlvdXNVc2VySWQpIHtcblx0XHRcdFx0XHRcdHRoaXMud2FyZEJvb3RzdHJhcEluRmxpZ2h0VXNlcklkcy5kZWxldGUocHJldmlvdXNVc2VySWQpO1xuXHRcdFx0XHRcdFx0dGhpcy53YXJkQm9vdHN0cmFwRG9uZVVzZXJJZHMuZGVsZXRlKHByZXZpb3VzVXNlcklkKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHR0aGlzLmFjdGl2ZVVzZXJJZCA9IG51bGw7XG5cdFx0XHRcdFx0dGhpcy5lbWl0TGVhdmVNYW55KHRoaXMucm9vbUNvb3JkaW5hdG9yLmRlYWN0aXZhdGVVc2VyKCkpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvbnN0IG5vcm1hbGl6ZWRVc2VySWQgPSBzZXNzaW9uLnVzZXJJZC50cmltKCk7XG5cdFx0XHRcdGlmICghbm9ybWFsaXplZFVzZXJJZCkge1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRoaXMuYWN0aXZlVXNlcklkID0gbm9ybWFsaXplZFVzZXJJZDtcblxuXHRcdFx0XHRjb25zdCBhY3Rpb25zID0gdGhpcy5yb29tQ29vcmRpbmF0b3IuYWN0aXZhdGVVc2VyKG5vcm1hbGl6ZWRVc2VySWQpO1xuXHRcdFx0XHR0aGlzLmVtaXRMZWF2ZU1hbnkoYWN0aW9ucy5yb29tc1RvTGVhdmUpO1xuXHRcdFx0XHR0aGlzLmVtaXRKb2luTWFueShhY3Rpb25zLnJvb21zVG9Kb2luKTtcblx0XHRcdFx0aWYgKGFjdGlvbnMucm9vbXNUb0pvaW4ubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRcdFx0dGhpcy5ib290c3RyYXBXYXJkUm9vbVN1YnNjcmlwdGlvbihub3JtYWxpemVkVXNlcklkKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdH1cblxuXHRwcml2YXRlIGJvb3RzdHJhcFdhcmRSb29tU3Vic2NyaXB0aW9uKHVzZXJJZDogc3RyaW5nLCBmb3JjZVJlZnJlc2ggPSBmYWxzZSk6IHZvaWQge1xuXHRcdGlmICghdGhpcy5odHRwKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKFxuXHRcdFx0dGhpcy53YXJkQm9vdHN0cmFwSW5GbGlnaHRVc2VySWRzLmhhcyh1c2VySWQpIHx8XG5cdFx0XHQoIWZvcmNlUmVmcmVzaCAmJiB0aGlzLndhcmRCb290c3RyYXBEb25lVXNlcklkcy5oYXModXNlcklkKSlcblx0XHQpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR0aGlzLndhcmRCb290c3RyYXBJbkZsaWdodFVzZXJJZHMuYWRkKHVzZXJJZCk7XG5cblx0XHR0aGlzLmh0dHBcblx0XHRcdC5nZXQ8dW5rbm93bj4odGhpcy5yZXNvbHZlUGxhbnRBbGxFbmRwb2ludCgpKVxuXHRcdFx0LnBpcGUoXG5cdFx0XHRcdG1hcCgocmVzcG9uc2UpID0+ICh7IHJlc3BvbnNlLCBzdWNjZXNzOiB0cnVlIGFzIGNvbnN0IH0pKSxcblx0XHRcdFx0Y2F0Y2hFcnJvcigoKSA9PiBvZih7IHJlc3BvbnNlOiBudWxsLCBzdWNjZXNzOiBmYWxzZSBhcyBjb25zdCB9KSksXG5cdFx0XHRcdHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSxcblx0XHRcdFx0ZmluYWxpemUoKCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMud2FyZEJvb3RzdHJhcEluRmxpZ2h0VXNlcklkcy5kZWxldGUodXNlcklkKTtcblx0XHRcdFx0XHR0aGlzLndhcmRCb290c3RyYXBEb25lVXNlcklkcy5hZGQodXNlcklkKTtcblx0XHRcdFx0fSlcblx0XHRcdClcblx0XHRcdC5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuXHRcdFx0XHRpZiAoIXJlc3VsdC5zdWNjZXNzKSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3Qgd2FyZElkcyA9IHRoaXMuZXh0cmFjdFdhcmRJZHNGcm9tUGxhbnRSZXNwb25zZShyZXN1bHQucmVzcG9uc2UpO1xuXHRcdFx0XHRpZiAoZm9yY2VSZWZyZXNoKSB7XG5cdFx0XHRcdFx0dGhpcy5zeW5jSm9pbmVkUm9vbXNXaXRoV2FyZElkcyh3YXJkSWRzKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRmb3IgKGNvbnN0IHdhcmRJZCBvZiB3YXJkSWRzKSB7XG5cdFx0XHRcdFx0dGhpcy5qb2luUm9vbSh3YXJkSWQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0fVxuXG5cdHByaXZhdGUgc3luY0pvaW5lZFJvb21zV2l0aFdhcmRJZHModGFyZ2V0V2FyZElkczogUmVhZG9ubHlBcnJheTxzdHJpbmc+KTogdm9pZCB7XG5cdFx0Y29uc3QgdGFyZ2V0Um9vbXMgPSBuZXcgU2V0KHRhcmdldFdhcmRJZHMpO1xuXG5cdFx0Zm9yIChjb25zdCBqb2luZWRXYXJkSWQgb2YgdGhpcy5yb29tQ29vcmRpbmF0b3IuZ2V0Sm9pbmVkUm9vbXMoKSkge1xuXHRcdFx0aWYgKHRhcmdldFJvb21zLmhhcyhqb2luZWRXYXJkSWQpKSB7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLmxlYXZlUm9vbShqb2luZWRXYXJkSWQpO1xuXHRcdH1cblxuXHRcdGZvciAoY29uc3Qgd2FyZElkIG9mIHRhcmdldFdhcmRJZHMpIHtcblx0XHRcdHRoaXMuam9pblJvb20od2FyZElkKTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIGhhbmRsZUJhY2tlbmRUcmlnZ2VyZWRSYXdFdmVudChyYXc6IHVua25vd24pOiB2b2lkIHtcblx0XHRjb25zdCBwYXlsb2FkID0gdGhpcy5ldmVudE5vcm1hbGl6ZXIucGFyc2VCYWNrZW5kVHJpZ2dlcmVkUGF5bG9hZChyYXcpO1xuXHRcdGlmICghcGF5bG9hZCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHRoaXMuam9pblJvb20oU3RyaW5nKHBheWxvYWQud2FyZElkKSk7XG5cblx0XHR0aGlzLnJlc29sdmVUcmlnZ2VyZWRBbGFybURldGFpbHMocGF5bG9hZC5hbGFybUV2ZW50SWQpXG5cdFx0XHQucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG5cdFx0XHQuc3Vic2NyaWJlKChyZXNvbHZlZERldGFpbHMpID0+IHtcblx0XHRcdFx0Y29uc3QgdGltZXN0YW1wID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpO1xuXHRcdFx0XHR0aGlzLmFsYXJtU3RhdGVTZXJ2aWNlLm9uQWxhcm1UcmlnZ2VyZWQoe1xuXHRcdFx0XHRcdGlkOiBwYXlsb2FkLmFsYXJtRXZlbnRJZCxcblx0XHRcdFx0XHRhbGFybVJ1bGVJZDogcGF5bG9hZC5hbGFybVJ1bGVJZCxcblx0XHRcdFx0XHRhbGFybU5hbWU6IHJlc29sdmVkRGV0YWlscy5hbGFybU5hbWUsXG5cdFx0XHRcdFx0cHJpb3JpdHk6IHJlc29sdmVkRGV0YWlscy5wcmlvcml0eSxcblx0XHRcdFx0XHRhY3RpdmF0aW9uVGltZTogdGltZXN0YW1wLFxuXHRcdFx0XHRcdHJlc29sdXRpb25UaW1lOiBudWxsLFxuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHR0aGlzLmxpZmVjeWNsZU5vdGlmaWVyLnB1Ymxpc2goJ3RyaWdnZXJlZCcsIHBheWxvYWQuYWxhcm1FdmVudElkLCB0aW1lc3RhbXAsIHtcblx0XHRcdFx0XHRhbGFybU5hbWU6IHJlc29sdmVkRGV0YWlscy5hbGFybU5hbWUsXG5cdFx0XHRcdFx0cHJpb3JpdHk6IHJlc29sdmVkRGV0YWlscy5wcmlvcml0eSxcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblx0fVxuXG5cdHByaXZhdGUgaGFuZGxlQmFja2VuZFJlc29sdmVkUmF3RXZlbnQocmF3OiB1bmtub3duKTogdm9pZCB7XG5cdFx0Y29uc3QgcGF5bG9hZCA9IHRoaXMuZXZlbnROb3JtYWxpemVyLnBhcnNlQmFja2VuZFJlc29sdmVkUGF5bG9hZChyYXcpO1xuXHRcdGlmICghcGF5bG9hZCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmICh0eXBlb2YgcGF5bG9hZC53YXJkSWQgPT09ICdudW1iZXInKSB7XG5cdFx0XHR0aGlzLmpvaW5Sb29tKFN0cmluZyhwYXlsb2FkLndhcmRJZCkpO1xuXHRcdH1cblxuXHRcdHRoaXMuYWxhcm1TdGF0ZVNlcnZpY2Uub25BbGFybVJlc29sdmVkKHBheWxvYWQuYWxhcm1FdmVudElkKTtcblx0XHRjb25zdCB0aW1lc3RhbXAgPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCk7XG5cdFx0dGhpcy5saWZlY3ljbGVOb3RpZmllci5wdWJsaXNoKCdyZXNvbHZlZCcsIHBheWxvYWQuYWxhcm1FdmVudElkLCB0aW1lc3RhbXApO1xuXHR9XG5cblx0cHJpdmF0ZSByZXNvbHZlVHJpZ2dlcmVkQWxhcm1EZXRhaWxzKFxuXHRcdGFsYXJtRXZlbnRJZDogc3RyaW5nXG5cdCk6IE9ic2VydmFibGU8eyBhbGFybU5hbWU6IHN0cmluZzsgcHJpb3JpdHk6IEFsYXJtUHJpb3JpdHkgfT4ge1xuXHRcdGNvbnN0IGZhbGxiYWNrID0ge1xuXHRcdFx0YWxhcm1OYW1lOiAnQWxsYXJtZSBpbiBjb3JzbycsXG5cdFx0XHRwcmlvcml0eTogQWxhcm1Qcmlvcml0eS5PUkFOR0UsXG5cdFx0fTtcblxuXHRcdGlmICghdGhpcy5hbGFybUFwaVNlcnZpY2UpIHtcblx0XHRcdHJldHVybiBvZihmYWxsYmFjayk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuYWxhcm1BcGlTZXJ2aWNlLmdldEFsYXJtRXZlbnRCeUlkKGFsYXJtRXZlbnRJZCkucGlwZShcblx0XHRcdG1hcCgoYWxhcm1FdmVudCkgPT4gKHtcblx0XHRcdFx0YWxhcm1OYW1lOlxuXHRcdFx0XHRcdHR5cGVvZiBhbGFybUV2ZW50LmFsYXJtTmFtZSA9PT0gJ3N0cmluZycgJiYgYWxhcm1FdmVudC5hbGFybU5hbWUudHJpbSgpXG5cdFx0XHRcdFx0XHQ/IGFsYXJtRXZlbnQuYWxhcm1OYW1lLnRyaW0oKVxuXHRcdFx0XHRcdFx0OiBmYWxsYmFjay5hbGFybU5hbWUsXG5cdFx0XHRcdHByaW9yaXR5OiB0aGlzLm5vcm1hbGl6ZUFsYXJtUHJpb3JpdHkoYWxhcm1FdmVudC5wcmlvcml0eSkgPz8gZmFsbGJhY2sucHJpb3JpdHksXG5cdFx0XHR9KSksXG5cdFx0XHRjYXRjaEVycm9yKCgpID0+IG9mKGZhbGxiYWNrKSlcblx0XHQpO1xuXHR9XG5cblx0cHJpdmF0ZSBub3JtYWxpemVBbGFybVByaW9yaXR5KHZhbHVlOiB1bmtub3duKTogQWxhcm1Qcmlvcml0eSB8IG51bGwge1xuXHRcdGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmIE51bWJlci5pc0ludGVnZXIodmFsdWUpKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5pc0FsYXJtUHJpb3JpdHkodmFsdWUpID8gdmFsdWUgOiBudWxsO1xuXHRcdH1cblxuXHRcdGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cblx0XHRjb25zdCBjb21wYWN0ID0gdmFsdWUudHJpbSgpLnRvVXBwZXJDYXNlKCk7XG5cdFx0aWYgKCFjb21wYWN0KSB7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cblx0XHRpZiAoY29tcGFjdCBpbiBBbGFybVByaW9yaXR5KSB7XG5cdFx0XHRjb25zdCBlbnVtVmFsdWUgPSBBbGFybVByaW9yaXR5W2NvbXBhY3QgYXMga2V5b2YgdHlwZW9mIEFsYXJtUHJpb3JpdHldO1xuXHRcdFx0cmV0dXJuIHR5cGVvZiBlbnVtVmFsdWUgPT09ICdudW1iZXInICYmIHRoaXMuaXNBbGFybVByaW9yaXR5KGVudW1WYWx1ZSlcblx0XHRcdFx0PyBlbnVtVmFsdWVcblx0XHRcdFx0OiBudWxsO1xuXHRcdH1cblxuXHRcdGNvbnN0IHBhcnNlZCA9IE51bWJlcihjb21wYWN0KTtcblx0XHRpZiAoTnVtYmVyLmlzSW50ZWdlcihwYXJzZWQpICYmIHRoaXMuaXNBbGFybVByaW9yaXR5KHBhcnNlZCkpIHtcblx0XHRcdHJldHVybiBwYXJzZWQ7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHRwcml2YXRlIGlzQWxhcm1Qcmlvcml0eSh2YWx1ZTogbnVtYmVyKTogdmFsdWUgaXMgQWxhcm1Qcmlvcml0eSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdHZhbHVlID09PSBBbGFybVByaW9yaXR5LldISVRFIHx8XG5cdFx0XHR2YWx1ZSA9PT0gQWxhcm1Qcmlvcml0eS5HUkVFTiB8fFxuXHRcdFx0dmFsdWUgPT09IEFsYXJtUHJpb3JpdHkuT1JBTkdFIHx8XG5cdFx0XHR2YWx1ZSA9PT0gQWxhcm1Qcmlvcml0eS5SRURcblx0XHQpO1xuXHR9XG5cblx0cHJpdmF0ZSByZWpvaW5BbGxSb29tcygpOiB2b2lkIHtcblx0XHRmb3IgKGNvbnN0IHdhcmRJZCBvZiB0aGlzLnJvb21Db29yZGluYXRvci5nZXRKb2luZWRSb29tcygpKSB7XG5cdFx0XHR0aGlzLnNvY2tldD8uZW1pdCgnam9pbi13YXJkJywgd2FyZElkKTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIGVtaXRKb2luTWFueSh3YXJkSWRzOiBSZWFkb25seUFycmF5PHN0cmluZz4pOiB2b2lkIHtcblx0XHRmb3IgKGNvbnN0IHdhcmRJZCBvZiB3YXJkSWRzKSB7XG5cdFx0XHR0aGlzLnNvY2tldD8uZW1pdCgnam9pbi13YXJkJywgd2FyZElkKTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIGVtaXRMZWF2ZU1hbnkod2FyZElkczogUmVhZG9ubHlBcnJheTxzdHJpbmc+KTogdm9pZCB7XG5cdFx0Zm9yIChjb25zdCB3YXJkSWQgb2Ygd2FyZElkcykge1xuXHRcdFx0dGhpcy5zb2NrZXQ/LmVtaXQoJ2xlYXZlLXdhcmQnLCB3YXJkSWQpO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgcmVzb2x2ZVNvY2tldFVybCgpOiBzdHJpbmcge1xuXHRcdGNvbnN0IG5vcm1hbGl6ZWRBcGlCYXNlVXJsID0gdGhpcy5hcGlCYXNlVXJsPy50cmltKCk7XG5cdFx0aWYgKG5vcm1hbGl6ZWRBcGlCYXNlVXJsKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy50b1dlYnNvY2tldE5hbWVzcGFjZVVybChub3JtYWxpemVkQXBpQmFzZVVybCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGAke2dsb2JhbFRoaXMubG9jYXRpb24ub3JpZ2lufS93c2A7XG5cdH1cblxuXHRwcml2YXRlIHRvV2Vic29ja2V0TmFtZXNwYWNlVXJsKGJhc2VVcmw6IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0Y29uc3QgdHJpbW1lZEJhc2VVcmwgPSBiYXNlVXJsLnJlcGxhY2UoL1xcLyskLywgJycpO1xuXG5cdFx0aWYgKHRyaW1tZWRCYXNlVXJsLmVuZHNXaXRoKCcvYXBpJykpIHtcblx0XHRcdHJldHVybiBgJHt0cmltbWVkQmFzZVVybC5zbGljZSgwLCAtNCl9L3dzYDtcblx0XHR9XG5cblx0XHRyZXR1cm4gYCR7dHJpbW1lZEJhc2VVcmx9L3dzYDtcblx0fVxuXG5cdHByaXZhdGUgcmVzb2x2ZVBsYW50QWxsRW5kcG9pbnQoKTogc3RyaW5nIHtcblx0XHRjb25zdCBub3JtYWxpemVkQXBpQmFzZVVybCA9IHRoaXMuYXBpQmFzZVVybD8udHJpbSgpO1xuXHRcdGlmIChub3JtYWxpemVkQXBpQmFzZVVybCkge1xuXHRcdFx0cmV0dXJuIGAke25vcm1hbGl6ZWRBcGlCYXNlVXJsfS9wbGFudC9hbGxgO1xuXHRcdH1cblxuXHRcdHJldHVybiAnL2FwaS9wbGFudC9hbGwnO1xuXHR9XG5cblx0cHJpdmF0ZSBleHRyYWN0V2FyZElkc0Zyb21QbGFudFJlc3BvbnNlKHJlc3BvbnNlOiB1bmtub3duKTogc3RyaW5nW10ge1xuXHRcdGNvbnN0IHBsYW50cyA9IHRoaXMuZXh0cmFjdFBsYW50QXJyYXkocmVzcG9uc2UpO1xuXHRcdGNvbnN0IHdhcmRJZHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuXHRcdGZvciAoY29uc3QgcGxhbnQgb2YgcGxhbnRzKSB7XG5cdFx0XHRjb25zdCB3YXJkSWQgPSB0aGlzLm5vcm1hbGl6ZVdhcmRJZChwbGFudC53YXJkSWQpO1xuXHRcdFx0aWYgKCF3YXJkSWQpIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdHdhcmRJZHMuYWRkKHdhcmRJZCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIEFycmF5LmZyb20od2FyZElkcy52YWx1ZXMoKSk7XG5cdH1cblxuXHRwcml2YXRlIGV4dHJhY3RQbGFudEFycmF5KHJlc3BvbnNlOiB1bmtub3duKTogQXJyYXk8eyB3YXJkSWQ/OiB1bmtub3duIH0+IHtcblx0XHRpZiAoQXJyYXkuaXNBcnJheShyZXNwb25zZSkpIHtcblx0XHRcdHJldHVybiByZXNwb25zZS5maWx0ZXIoXG5cdFx0XHRcdChjYW5kaWRhdGUpOiBjYW5kaWRhdGUgaXMgeyB3YXJkSWQ/OiB1bmtub3duIH0gPT5cblx0XHRcdFx0XHR0eXBlb2YgY2FuZGlkYXRlID09PSAnb2JqZWN0JyAmJiBjYW5kaWRhdGUgIT09IG51bGxcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0aWYgKHR5cGVvZiByZXNwb25zZSAhPT0gJ29iamVjdCcgfHwgcmVzcG9uc2UgPT09IG51bGwpIHtcblx0XHRcdHJldHVybiBbXTtcblx0XHR9XG5cblx0XHRjb25zdCB3cmFwcGVkID0gcmVzcG9uc2UgYXMgeyBkYXRhPzogdW5rbm93bjsgcGxhbnRzPzogdW5rbm93biB9O1xuXHRcdGlmIChBcnJheS5pc0FycmF5KHdyYXBwZWQuZGF0YSkpIHtcblx0XHRcdHJldHVybiB3cmFwcGVkLmRhdGEuZmlsdGVyKFxuXHRcdFx0XHQoY2FuZGlkYXRlKTogY2FuZGlkYXRlIGlzIHsgd2FyZElkPzogdW5rbm93biB9ID0+XG5cdFx0XHRcdFx0dHlwZW9mIGNhbmRpZGF0ZSA9PT0gJ29iamVjdCcgJiYgY2FuZGlkYXRlICE9PSBudWxsXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdGlmICghQXJyYXkuaXNBcnJheSh3cmFwcGVkLnBsYW50cykpIHtcblx0XHRcdHJldHVybiBbXTtcblx0XHR9XG5cblx0XHRyZXR1cm4gd3JhcHBlZC5wbGFudHMuZmlsdGVyKFxuXHRcdFx0KGNhbmRpZGF0ZSk6IGNhbmRpZGF0ZSBpcyB7IHdhcmRJZD86IHVua25vd24gfSA9PlxuXHRcdFx0XHR0eXBlb2YgY2FuZGlkYXRlID09PSAnb2JqZWN0JyAmJiBjYW5kaWRhdGUgIT09IG51bGxcblx0XHQpO1xuXHR9XG5cblx0cHJpdmF0ZSBub3JtYWxpemVXYXJkSWQocmF3V2FyZElkOiB1bmtub3duKTogc3RyaW5nIHwgbnVsbCB7XG5cdFx0aWYgKHR5cGVvZiByYXdXYXJkSWQgPT09ICdudW1iZXInICYmIE51bWJlci5pc0ludGVnZXIocmF3V2FyZElkKSkge1xuXHRcdFx0cmV0dXJuIFN0cmluZyhyYXdXYXJkSWQpO1xuXHRcdH1cblxuXHRcdGlmICh0eXBlb2YgcmF3V2FyZElkICE9PSAnc3RyaW5nJykge1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXG5cdFx0Y29uc3QgdHJpbW1lZFdhcmRJZCA9IHJhd1dhcmRJZC50cmltKCk7XG5cdFx0aWYgKCF0cmltbWVkV2FyZElkKSB7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cblx0XHRyZXR1cm4gdHJpbW1lZFdhcmRJZDtcblx0fVxuXG59XG4iXSwibWFwcGluZ3MiOiI7c2xCQUFBLEdBQU0sQ0FBQUEsQ0FBQSxFQUFBQyxjQUFBLEdBQUFDLENBQUEsTUFBZUMsTUFBQSxDQUFPQyxNQUFBLENBQU8sSUFBSSxHQUN2Q0gsY0FBQSxHQUFBQyxDQUFBLE1BQUFGLENBQUEsQ0FBYUssSUFBQSxDQUFVLElBQ3ZCSixjQUFBLEdBQUFDLENBQUEsTUFBQUYsQ0FBQSxDQUFhTSxLQUFBLENBQVcsSUFDeEJMLGNBQUEsR0FBQUMsQ0FBQSxNQUFBRixDQUFBLENBQWFPLElBQUEsQ0FBVSxJQUN2Qk4sY0FBQSxHQUFBQyxDQUFBLE1BQUFGLENBQUEsQ0FBYVEsSUFBQSxDQUFVLElBQ3ZCUCxjQUFBLEdBQUFDLENBQUEsTUFBQUYsQ0FBQSxDQUFhUyxPQUFBLENBQWEsSUFDMUJSLGNBQUEsR0FBQUMsQ0FBQSxNQUFBRixDQUFBLENBQWFVLE9BQUEsQ0FBYSxJQUMxQlQsY0FBQSxHQUFBQyxDQUFBLE1BQUFGLENBQUEsQ0FBYVcsSUFBQSxDQUFVLElBQ3ZCLEdBQU0sQ0FBQUMsQ0FBQSxFQUFBWCxjQUFBLEdBQUFDLENBQUEsTUFBdUJDLE1BQUEsQ0FBT0MsTUFBQSxDQUFPLElBQUksR0FDL0NILGNBQUEsR0FBQUMsQ0FBQSxNQUFBQyxNQUFBLENBQU9VLElBQUEsQ0FBS2IsQ0FBWSxFQUFFYyxPQUFBLENBQVFDLENBQUEsRUFB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 \ No newline at end of file diff --git a/frontend/dist-instrumented/chunk-6R7YSGCL.js.map b/frontend/dist-instrumented/chunk-6R7YSGCL.js.map new file mode 100644 index 00000000..1bfee1e8 --- /dev/null +++ b/frontend/dist-instrumented/chunk-6R7YSGCL.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["node_modules/engine.io-parser/build/esm/commons.js","node_modules/engine.io-parser/build/esm/encodePacket.browser.js","node_modules/engine.io-parser/build/esm/contrib/base64-arraybuffer.js","node_modules/engine.io-parser/build/esm/decodePacket.browser.js","node_modules/engine.io-parser/build/esm/index.js","node_modules/@socket.io/component-emitter/lib/esm/index.js","node_modules/engine.io-client/build/esm/globals.js","node_modules/engine.io-client/build/esm/util.js","node_modules/engine.io-client/build/esm/contrib/parseqs.js","node_modules/engine.io-client/build/esm/transport.js","node_modules/engine.io-client/build/esm/transports/polling.js","node_modules/engine.io-client/build/esm/contrib/has-cors.js","node_modules/engine.io-client/build/esm/transports/polling-xhr.js","node_modules/engine.io-client/build/esm/transports/websocket.js","node_modules/engine.io-client/build/esm/transports/webtransport.js","node_modules/engine.io-client/build/esm/transports/index.js","node_modules/engine.io-client/build/esm/contrib/parseuri.js","node_modules/engine.io-client/build/esm/socket.js","node_modules/engine.io-client/build/esm/index.js","node_modules/socket.io-client/build/esm/url.js","node_modules/socket.io-parser/build/esm/index.js","node_modules/socket.io-parser/build/esm/is-binary.js","node_modules/socket.io-parser/build/esm/binary.js","node_modules/socket.io-client/build/esm/on.js","node_modules/socket.io-client/build/esm/socket.js","node_modules/socket.io-client/build/esm/contrib/backo2.js","node_modules/socket.io-client/build/esm/manager.js","node_modules/socket.io-client/build/esm/index.js","src/app/core/alarm/models/connection-status.enum.ts","src/app/core/alarm/services/realtime-alarm-event-normalizer.service.ts","src/app/core/alarm/services/alarm-lifecycle-notifier.service.ts","src/app/core/alarm/services/ward-socket-room-coordinator.service.ts","src/app/core/alarm/services/event-subscription.service.ts"],"sourcesContent":["const PACKET_TYPES = Object.create(null); // no Map = no polyfill\nPACKET_TYPES[\"open\"] = \"0\";\nPACKET_TYPES[\"close\"] = \"1\";\nPACKET_TYPES[\"ping\"] = \"2\";\nPACKET_TYPES[\"pong\"] = \"3\";\nPACKET_TYPES[\"message\"] = \"4\";\nPACKET_TYPES[\"upgrade\"] = \"5\";\nPACKET_TYPES[\"noop\"] = \"6\";\nconst PACKET_TYPES_REVERSE = Object.create(null);\nObject.keys(PACKET_TYPES).forEach(key => {\n PACKET_TYPES_REVERSE[PACKET_TYPES[key]] = key;\n});\nconst ERROR_PACKET = {\n type: \"error\",\n data: \"parser error\"\n};\nexport { PACKET_TYPES, PACKET_TYPES_REVERSE, ERROR_PACKET };","import { PACKET_TYPES } from \"./commons.js\";\nconst withNativeBlob = typeof Blob === \"function\" || typeof Blob !== \"undefined\" && Object.prototype.toString.call(Blob) === \"[object BlobConstructor]\";\nconst withNativeArrayBuffer = typeof ArrayBuffer === \"function\";\n// ArrayBuffer.isView method is not defined in IE10\nconst isView = obj => {\n return typeof ArrayBuffer.isView === \"function\" ? ArrayBuffer.isView(obj) : obj && obj.buffer instanceof ArrayBuffer;\n};\nconst encodePacket = ({\n type,\n data\n}, supportsBinary, callback) => {\n if (withNativeBlob && data instanceof Blob) {\n if (supportsBinary) {\n return callback(data);\n } else {\n return encodeBlobAsBase64(data, callback);\n }\n } else if (withNativeArrayBuffer && (data instanceof ArrayBuffer || isView(data))) {\n if (supportsBinary) {\n return callback(data);\n } else {\n return encodeBlobAsBase64(new Blob([data]), callback);\n }\n }\n // plain string\n return callback(PACKET_TYPES[type] + (data || \"\"));\n};\nconst encodeBlobAsBase64 = (data, callback) => {\n const fileReader = new FileReader();\n fileReader.onload = function () {\n const content = fileReader.result.split(\",\")[1];\n callback(\"b\" + (content || \"\"));\n };\n return fileReader.readAsDataURL(data);\n};\nfunction toArray(data) {\n if (data instanceof Uint8Array) {\n return data;\n } else if (data instanceof ArrayBuffer) {\n return new Uint8Array(data);\n } else {\n return new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n }\n}\nlet TEXT_ENCODER;\nexport function encodePacketToBinary(packet, callback) {\n if (withNativeBlob && packet.data instanceof Blob) {\n return packet.data.arrayBuffer().then(toArray).then(callback);\n } else if (withNativeArrayBuffer && (packet.data instanceof ArrayBuffer || isView(packet.data))) {\n return callback(toArray(packet.data));\n }\n encodePacket(packet, false, encoded => {\n if (!TEXT_ENCODER) {\n TEXT_ENCODER = new TextEncoder();\n }\n callback(TEXT_ENCODER.encode(encoded));\n });\n}\nexport { encodePacket };","// imported from https://github.com/socketio/base64-arraybuffer\nconst chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n// Use a lookup table to find the index.\nconst lookup = typeof Uint8Array === 'undefined' ? [] : new Uint8Array(256);\nfor (let i = 0; i < chars.length; i++) {\n lookup[chars.charCodeAt(i)] = i;\n}\nexport const encode = arraybuffer => {\n let bytes = new Uint8Array(arraybuffer),\n i,\n len = bytes.length,\n base64 = '';\n for (i = 0; i < len; i += 3) {\n base64 += chars[bytes[i] >> 2];\n base64 += chars[(bytes[i] & 3) << 4 | bytes[i + 1] >> 4];\n base64 += chars[(bytes[i + 1] & 15) << 2 | bytes[i + 2] >> 6];\n base64 += chars[bytes[i + 2] & 63];\n }\n if (len % 3 === 2) {\n base64 = base64.substring(0, base64.length - 1) + '=';\n } else if (len % 3 === 1) {\n base64 = base64.substring(0, base64.length - 2) + '==';\n }\n return base64;\n};\nexport const decode = base64 => {\n let bufferLength = base64.length * 0.75,\n len = base64.length,\n i,\n p = 0,\n encoded1,\n encoded2,\n encoded3,\n encoded4;\n if (base64[base64.length - 1] === '=') {\n bufferLength--;\n if (base64[base64.length - 2] === '=') {\n bufferLength--;\n }\n }\n const arraybuffer = new ArrayBuffer(bufferLength),\n bytes = new Uint8Array(arraybuffer);\n for (i = 0; i < len; i += 4) {\n encoded1 = lookup[base64.charCodeAt(i)];\n encoded2 = lookup[base64.charCodeAt(i + 1)];\n encoded3 = lookup[base64.charCodeAt(i + 2)];\n encoded4 = lookup[base64.charCodeAt(i + 3)];\n bytes[p++] = encoded1 << 2 | encoded2 >> 4;\n bytes[p++] = (encoded2 & 15) << 4 | encoded3 >> 2;\n bytes[p++] = (encoded3 & 3) << 6 | encoded4 & 63;\n }\n return arraybuffer;\n};","import { ERROR_PACKET, PACKET_TYPES_REVERSE } from \"./commons.js\";\nimport { decode } from \"./contrib/base64-arraybuffer.js\";\nconst withNativeArrayBuffer = typeof ArrayBuffer === \"function\";\nexport const decodePacket = (encodedPacket, binaryType) => {\n if (typeof encodedPacket !== \"string\") {\n return {\n type: \"message\",\n data: mapBinary(encodedPacket, binaryType)\n };\n }\n const type = encodedPacket.charAt(0);\n if (type === \"b\") {\n return {\n type: \"message\",\n data: decodeBase64Packet(encodedPacket.substring(1), binaryType)\n };\n }\n const packetType = PACKET_TYPES_REVERSE[type];\n if (!packetType) {\n return ERROR_PACKET;\n }\n return encodedPacket.length > 1 ? {\n type: PACKET_TYPES_REVERSE[type],\n data: encodedPacket.substring(1)\n } : {\n type: PACKET_TYPES_REVERSE[type]\n };\n};\nconst decodeBase64Packet = (data, binaryType) => {\n if (withNativeArrayBuffer) {\n const decoded = decode(data);\n return mapBinary(decoded, binaryType);\n } else {\n return {\n base64: true,\n data\n }; // fallback for old browsers\n }\n};\nconst mapBinary = (data, binaryType) => {\n switch (binaryType) {\n case \"blob\":\n if (data instanceof Blob) {\n // from WebSocket + binaryType \"blob\"\n return data;\n } else {\n // from HTTP long-polling or WebTransport\n return new Blob([data]);\n }\n case \"arraybuffer\":\n default:\n if (data instanceof ArrayBuffer) {\n // from HTTP long-polling (base64) or WebSocket + binaryType \"arraybuffer\"\n return data;\n } else {\n // from WebTransport (Uint8Array)\n return data.buffer;\n }\n }\n};","import { encodePacket, encodePacketToBinary } from \"./encodePacket.js\";\nimport { decodePacket } from \"./decodePacket.js\";\nimport { ERROR_PACKET } from \"./commons.js\";\nconst SEPARATOR = String.fromCharCode(30); // see https://en.wikipedia.org/wiki/Delimiter#ASCII_delimited_text\nconst encodePayload = (packets, callback) => {\n // some packets may be added to the array while encoding, so the initial length must be saved\n const length = packets.length;\n const encodedPackets = new Array(length);\n let count = 0;\n packets.forEach((packet, i) => {\n // force base64 encoding for binary packets\n encodePacket(packet, false, encodedPacket => {\n encodedPackets[i] = encodedPacket;\n if (++count === length) {\n callback(encodedPackets.join(SEPARATOR));\n }\n });\n });\n};\nconst decodePayload = (encodedPayload, binaryType) => {\n const encodedPackets = encodedPayload.split(SEPARATOR);\n const packets = [];\n for (let i = 0; i < encodedPackets.length; i++) {\n const decodedPacket = decodePacket(encodedPackets[i], binaryType);\n packets.push(decodedPacket);\n if (decodedPacket.type === \"error\") {\n break;\n }\n }\n return packets;\n};\nexport function createPacketEncoderStream() {\n return new TransformStream({\n transform(packet, controller) {\n encodePacketToBinary(packet, encodedPacket => {\n const payloadLength = encodedPacket.length;\n let header;\n // inspired by the WebSocket format: https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API/Writing_WebSocket_servers#decoding_payload_length\n if (payloadLength < 126) {\n header = new Uint8Array(1);\n new DataView(header.buffer).setUint8(0, payloadLength);\n } else if (payloadLength < 65536) {\n header = new Uint8Array(3);\n const view = new DataView(header.buffer);\n view.setUint8(0, 126);\n view.setUint16(1, payloadLength);\n } else {\n header = new Uint8Array(9);\n const view = new DataView(header.buffer);\n view.setUint8(0, 127);\n view.setBigUint64(1, BigInt(payloadLength));\n }\n // first bit indicates whether the payload is plain text (0) or binary (1)\n if (packet.data && typeof packet.data !== \"string\") {\n header[0] |= 0x80;\n }\n controller.enqueue(header);\n controller.enqueue(encodedPacket);\n });\n }\n });\n}\nlet TEXT_DECODER;\nfunction totalLength(chunks) {\n return chunks.reduce((acc, chunk) => acc + chunk.length, 0);\n}\nfunction concatChunks(chunks, size) {\n if (chunks[0].length === size) {\n return chunks.shift();\n }\n const buffer = new Uint8Array(size);\n let j = 0;\n for (let i = 0; i < size; i++) {\n buffer[i] = chunks[0][j++];\n if (j === chunks[0].length) {\n chunks.shift();\n j = 0;\n }\n }\n if (chunks.length && j < chunks[0].length) {\n chunks[0] = chunks[0].slice(j);\n }\n return buffer;\n}\nexport function createPacketDecoderStream(maxPayload, binaryType) {\n if (!TEXT_DECODER) {\n TEXT_DECODER = new TextDecoder();\n }\n const chunks = [];\n let state = 0 /* State.READ_HEADER */;\n let expectedLength = -1;\n let isBinary = false;\n return new TransformStream({\n transform(chunk, controller) {\n chunks.push(chunk);\n while (true) {\n if (state === 0 /* State.READ_HEADER */) {\n if (totalLength(chunks) < 1) {\n break;\n }\n const header = concatChunks(chunks, 1);\n isBinary = (header[0] & 0x80) === 0x80;\n expectedLength = header[0] & 0x7f;\n if (expectedLength < 126) {\n state = 3 /* State.READ_PAYLOAD */;\n } else if (expectedLength === 126) {\n state = 1 /* State.READ_EXTENDED_LENGTH_16 */;\n } else {\n state = 2 /* State.READ_EXTENDED_LENGTH_64 */;\n }\n } else if (state === 1 /* State.READ_EXTENDED_LENGTH_16 */) {\n if (totalLength(chunks) < 2) {\n break;\n }\n const headerArray = concatChunks(chunks, 2);\n expectedLength = new DataView(headerArray.buffer, headerArray.byteOffset, headerArray.length).getUint16(0);\n state = 3 /* State.READ_PAYLOAD */;\n } else if (state === 2 /* State.READ_EXTENDED_LENGTH_64 */) {\n if (totalLength(chunks) < 8) {\n break;\n }\n const headerArray = concatChunks(chunks, 8);\n const view = new DataView(headerArray.buffer, headerArray.byteOffset, headerArray.length);\n const n = view.getUint32(0);\n if (n > Math.pow(2, 53 - 32) - 1) {\n // the maximum safe integer in JavaScript is 2^53 - 1\n controller.enqueue(ERROR_PACKET);\n break;\n }\n expectedLength = n * Math.pow(2, 32) + view.getUint32(4);\n state = 3 /* State.READ_PAYLOAD */;\n } else {\n if (totalLength(chunks) < expectedLength) {\n break;\n }\n const data = concatChunks(chunks, expectedLength);\n controller.enqueue(decodePacket(isBinary ? data : TEXT_DECODER.decode(data), binaryType));\n state = 0 /* State.READ_HEADER */;\n }\n if (expectedLength === 0 || expectedLength > maxPayload) {\n controller.enqueue(ERROR_PACKET);\n break;\n }\n }\n }\n });\n}\nexport const protocol = 4;\nexport { encodePacket, encodePayload, decodePacket, decodePayload };","/**\n * Initialize a new `Emitter`.\n *\n * @api public\n */\n\nexport function Emitter(obj) {\n if (obj) return mixin(obj);\n}\n\n/**\n * Mixin the emitter properties.\n *\n * @param {Object} obj\n * @return {Object}\n * @api private\n */\n\nfunction mixin(obj) {\n for (var key in Emitter.prototype) {\n obj[key] = Emitter.prototype[key];\n }\n return obj;\n}\n\n/**\n * Listen on the given `event` with `fn`.\n *\n * @param {String} event\n * @param {Function} fn\n * @return {Emitter}\n * @api public\n */\n\nEmitter.prototype.on = Emitter.prototype.addEventListener = function (event, fn) {\n this._callbacks = this._callbacks || {};\n (this._callbacks['$' + event] = this._callbacks['$' + event] || []).push(fn);\n return this;\n};\n\n/**\n * Adds an `event` listener that will be invoked a single\n * time then automatically removed.\n *\n * @param {String} event\n * @param {Function} fn\n * @return {Emitter}\n * @api public\n */\n\nEmitter.prototype.once = function (event, fn) {\n function on() {\n this.off(event, on);\n fn.apply(this, arguments);\n }\n on.fn = fn;\n this.on(event, on);\n return this;\n};\n\n/**\n * Remove the given callback for `event` or all\n * registered callbacks.\n *\n * @param {String} event\n * @param {Function} fn\n * @return {Emitter}\n * @api public\n */\n\nEmitter.prototype.off = Emitter.prototype.removeListener = Emitter.prototype.removeAllListeners = Emitter.prototype.removeEventListener = function (event, fn) {\n this._callbacks = this._callbacks || {};\n\n // all\n if (0 == arguments.length) {\n this._callbacks = {};\n return this;\n }\n\n // specific event\n var callbacks = this._callbacks['$' + event];\n if (!callbacks) return this;\n\n // remove all handlers\n if (1 == arguments.length) {\n delete this._callbacks['$' + event];\n return this;\n }\n\n // remove specific handler\n var cb;\n for (var i = 0; i < callbacks.length; i++) {\n cb = callbacks[i];\n if (cb === fn || cb.fn === fn) {\n callbacks.splice(i, 1);\n break;\n }\n }\n\n // Remove event specific arrays for event types that no\n // one is subscribed for to avoid memory leak.\n if (callbacks.length === 0) {\n delete this._callbacks['$' + event];\n }\n return this;\n};\n\n/**\n * Emit `event` with the given args.\n *\n * @param {String} event\n * @param {Mixed} ...\n * @return {Emitter}\n */\n\nEmitter.prototype.emit = function (event) {\n this._callbacks = this._callbacks || {};\n var args = new Array(arguments.length - 1),\n callbacks = this._callbacks['$' + event];\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n if (callbacks) {\n callbacks = callbacks.slice(0);\n for (var i = 0, len = callbacks.length; i < len; ++i) {\n callbacks[i].apply(this, args);\n }\n }\n return this;\n};\n\n// alias used for reserved events (protected method)\nEmitter.prototype.emitReserved = Emitter.prototype.emit;\n\n/**\n * Return array of callbacks for `event`.\n *\n * @param {String} event\n * @return {Array}\n * @api public\n */\n\nEmitter.prototype.listeners = function (event) {\n this._callbacks = this._callbacks || {};\n return this._callbacks['$' + event] || [];\n};\n\n/**\n * Check if this emitter has `event` handlers.\n *\n * @param {String} event\n * @return {Boolean}\n * @api public\n */\n\nEmitter.prototype.hasListeners = function (event) {\n return !!this.listeners(event).length;\n};","export const nextTick = (() => {\n const isPromiseAvailable = typeof Promise === \"function\" && typeof Promise.resolve === \"function\";\n if (isPromiseAvailable) {\n return cb => Promise.resolve().then(cb);\n } else {\n return (cb, setTimeoutFn) => setTimeoutFn(cb, 0);\n }\n})();\nexport const globalThisShim = (() => {\n if (typeof self !== \"undefined\") {\n return self;\n } else if (typeof window !== \"undefined\") {\n return window;\n } else {\n return Function(\"return this\")();\n }\n})();\nexport const defaultBinaryType = \"arraybuffer\";\nexport function createCookieJar() {}","import { globalThisShim as globalThis } from \"./globals.node.js\";\nexport function pick(obj, ...attr) {\n return attr.reduce((acc, k) => {\n if (obj.hasOwnProperty(k)) {\n acc[k] = obj[k];\n }\n return acc;\n }, {});\n}\n// Keep a reference to the real timeout functions so they can be used when overridden\nconst NATIVE_SET_TIMEOUT = globalThis.setTimeout;\nconst NATIVE_CLEAR_TIMEOUT = globalThis.clearTimeout;\nexport function installTimerFunctions(obj, opts) {\n if (opts.useNativeTimers) {\n obj.setTimeoutFn = NATIVE_SET_TIMEOUT.bind(globalThis);\n obj.clearTimeoutFn = NATIVE_CLEAR_TIMEOUT.bind(globalThis);\n } else {\n obj.setTimeoutFn = globalThis.setTimeout.bind(globalThis);\n obj.clearTimeoutFn = globalThis.clearTimeout.bind(globalThis);\n }\n}\n// base64 encoded buffers are about 33% bigger (https://en.wikipedia.org/wiki/Base64)\nconst BASE64_OVERHEAD = 1.33;\n// we could also have used `new Blob([obj]).size`, but it isn't supported in IE9\nexport function byteLength(obj) {\n if (typeof obj === \"string\") {\n return utf8Length(obj);\n }\n // arraybuffer or blob\n return Math.ceil((obj.byteLength || obj.size) * BASE64_OVERHEAD);\n}\nfunction utf8Length(str) {\n let c = 0,\n length = 0;\n for (let i = 0, l = str.length; i < l; i++) {\n c = str.charCodeAt(i);\n if (c < 0x80) {\n length += 1;\n } else if (c < 0x800) {\n length += 2;\n } else if (c < 0xd800 || c >= 0xe000) {\n length += 3;\n } else {\n i++;\n length += 4;\n }\n }\n return length;\n}\n/**\n * Generates a random 8-characters string.\n */\nexport function randomString() {\n return Date.now().toString(36).substring(3) + Math.random().toString(36).substring(2, 5);\n}","// imported from https://github.com/galkn/querystring\n/**\n * Compiles a querystring\n * Returns string representation of the object\n *\n * @param {Object}\n * @api private\n */\nexport function encode(obj) {\n let str = '';\n for (let i in obj) {\n if (obj.hasOwnProperty(i)) {\n if (str.length) str += '&';\n str += encodeURIComponent(i) + '=' + encodeURIComponent(obj[i]);\n }\n }\n return str;\n}\n/**\n * Parses a simple querystring into an object\n *\n * @param {String} qs\n * @api private\n */\nexport function decode(qs) {\n let qry = {};\n let pairs = qs.split('&');\n for (let i = 0, l = pairs.length; i < l; i++) {\n let pair = pairs[i].split('=');\n qry[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]);\n }\n return qry;\n}","import { decodePacket } from \"engine.io-parser\";\nimport { Emitter } from \"@socket.io/component-emitter\";\nimport { installTimerFunctions } from \"./util.js\";\nimport { encode } from \"./contrib/parseqs.js\";\nexport class TransportError extends Error {\n constructor(reason, description, context) {\n super(reason);\n this.description = description;\n this.context = context;\n this.type = \"TransportError\";\n }\n}\nexport class Transport extends Emitter {\n /**\n * Transport abstract constructor.\n *\n * @param {Object} opts - options\n * @protected\n */\n constructor(opts) {\n super();\n this.writable = false;\n installTimerFunctions(this, opts);\n this.opts = opts;\n this.query = opts.query;\n this.socket = opts.socket;\n this.supportsBinary = !opts.forceBase64;\n }\n /**\n * Emits an error.\n *\n * @param {String} reason\n * @param description\n * @param context - the error context\n * @return {Transport} for chaining\n * @protected\n */\n onError(reason, description, context) {\n super.emitReserved(\"error\", new TransportError(reason, description, context));\n return this;\n }\n /**\n * Opens the transport.\n */\n open() {\n this.readyState = \"opening\";\n this.doOpen();\n return this;\n }\n /**\n * Closes the transport.\n */\n close() {\n if (this.readyState === \"opening\" || this.readyState === \"open\") {\n this.doClose();\n this.onClose();\n }\n return this;\n }\n /**\n * Sends multiple packets.\n *\n * @param {Array} packets\n */\n send(packets) {\n if (this.readyState === \"open\") {\n this.write(packets);\n } else {\n // this might happen if the transport was silently closed in the beforeunload event handler\n }\n }\n /**\n * Called upon open\n *\n * @protected\n */\n onOpen() {\n this.readyState = \"open\";\n this.writable = true;\n super.emitReserved(\"open\");\n }\n /**\n * Called with data.\n *\n * @param {String} data\n * @protected\n */\n onData(data) {\n const packet = decodePacket(data, this.socket.binaryType);\n this.onPacket(packet);\n }\n /**\n * Called with a decoded packet.\n *\n * @protected\n */\n onPacket(packet) {\n super.emitReserved(\"packet\", packet);\n }\n /**\n * Called upon close.\n *\n * @protected\n */\n onClose(details) {\n this.readyState = \"closed\";\n super.emitReserved(\"close\", details);\n }\n /**\n * Pauses the transport, in order not to lose packets during an upgrade.\n *\n * @param onPause\n */\n pause(onPause) {}\n createUri(schema, query = {}) {\n return schema + \"://\" + this._hostname() + this._port() + this.opts.path + this._query(query);\n }\n _hostname() {\n const hostname = this.opts.hostname;\n return hostname.indexOf(\":\") === -1 ? hostname : \"[\" + hostname + \"]\";\n }\n _port() {\n if (this.opts.port && (this.opts.secure && Number(this.opts.port) !== 443 || !this.opts.secure && Number(this.opts.port) !== 80)) {\n return \":\" + this.opts.port;\n } else {\n return \"\";\n }\n }\n _query(query) {\n const encodedQuery = encode(query);\n return encodedQuery.length ? \"?\" + encodedQuery : \"\";\n }\n}","import { Transport } from \"../transport.js\";\nimport { randomString } from \"../util.js\";\nimport { encodePayload, decodePayload } from \"engine.io-parser\";\nexport class Polling extends Transport {\n constructor() {\n super(...arguments);\n this._polling = false;\n }\n get name() {\n return \"polling\";\n }\n /**\n * Opens the socket (triggers polling). We write a PING message to determine\n * when the transport is open.\n *\n * @protected\n */\n doOpen() {\n this._poll();\n }\n /**\n * Pauses polling.\n *\n * @param {Function} onPause - callback upon buffers are flushed and transport is paused\n * @package\n */\n pause(onPause) {\n this.readyState = \"pausing\";\n const pause = () => {\n this.readyState = \"paused\";\n onPause();\n };\n if (this._polling || !this.writable) {\n let total = 0;\n if (this._polling) {\n total++;\n this.once(\"pollComplete\", function () {\n --total || pause();\n });\n }\n if (!this.writable) {\n total++;\n this.once(\"drain\", function () {\n --total || pause();\n });\n }\n } else {\n pause();\n }\n }\n /**\n * Starts polling cycle.\n *\n * @private\n */\n _poll() {\n this._polling = true;\n this.doPoll();\n this.emitReserved(\"poll\");\n }\n /**\n * Overloads onData to detect payloads.\n *\n * @protected\n */\n onData(data) {\n const callback = packet => {\n // if its the first message we consider the transport open\n if (\"opening\" === this.readyState && packet.type === \"open\") {\n this.onOpen();\n }\n // if its a close packet, we close the ongoing requests\n if (\"close\" === packet.type) {\n this.onClose({\n description: \"transport closed by the server\"\n });\n return false;\n }\n // otherwise bypass onData and handle the message\n this.onPacket(packet);\n };\n // decode payload\n decodePayload(data, this.socket.binaryType).forEach(callback);\n // if an event did not trigger closing\n if (\"closed\" !== this.readyState) {\n // if we got data we're not polling\n this._polling = false;\n this.emitReserved(\"pollComplete\");\n if (\"open\" === this.readyState) {\n this._poll();\n } else {}\n }\n }\n /**\n * For polling, send a close packet.\n *\n * @protected\n */\n doClose() {\n const close = () => {\n this.write([{\n type: \"close\"\n }]);\n };\n if (\"open\" === this.readyState) {\n close();\n } else {\n // in case we're trying to close while\n // handshaking is in progress (GH-164)\n this.once(\"open\", close);\n }\n }\n /**\n * Writes a packets payload.\n *\n * @param {Array} packets - data packets\n * @protected\n */\n write(packets) {\n this.writable = false;\n encodePayload(packets, data => {\n this.doWrite(data, () => {\n this.writable = true;\n this.emitReserved(\"drain\");\n });\n });\n }\n /**\n * Generates uri for connection.\n *\n * @private\n */\n uri() {\n const schema = this.opts.secure ? \"https\" : \"http\";\n const query = this.query || {};\n // cache busting is forced\n if (false !== this.opts.timestampRequests) {\n query[this.opts.timestampParam] = randomString();\n }\n if (!this.supportsBinary && !query.sid) {\n query.b64 = 1;\n }\n return this.createUri(schema, query);\n }\n}","// imported from https://github.com/component/has-cors\nlet value = false;\ntry {\n value = typeof XMLHttpRequest !== 'undefined' && 'withCredentials' in new XMLHttpRequest();\n} catch (err) {\n // if XMLHttp support is disabled in IE then it will throw\n // when trying to create\n}\nexport const hasCORS = value;","import { Polling } from \"./polling.js\";\nimport { Emitter } from \"@socket.io/component-emitter\";\nimport { installTimerFunctions, pick } from \"../util.js\";\nimport { globalThisShim as globalThis } from \"../globals.node.js\";\nimport { hasCORS } from \"../contrib/has-cors.js\";\nfunction empty() {}\nexport class BaseXHR extends Polling {\n /**\n * XHR Polling constructor.\n *\n * @param {Object} opts\n * @package\n */\n constructor(opts) {\n super(opts);\n if (typeof location !== \"undefined\") {\n const isSSL = \"https:\" === location.protocol;\n let port = location.port;\n // some user agents have empty `location.port`\n if (!port) {\n port = isSSL ? \"443\" : \"80\";\n }\n this.xd = typeof location !== \"undefined\" && opts.hostname !== location.hostname || port !== opts.port;\n }\n }\n /**\n * Sends data.\n *\n * @param {String} data to send.\n * @param {Function} called upon flush.\n * @private\n */\n doWrite(data, fn) {\n const req = this.request({\n method: \"POST\",\n data: data\n });\n req.on(\"success\", fn);\n req.on(\"error\", (xhrStatus, context) => {\n this.onError(\"xhr post error\", xhrStatus, context);\n });\n }\n /**\n * Starts a poll cycle.\n *\n * @private\n */\n doPoll() {\n const req = this.request();\n req.on(\"data\", this.onData.bind(this));\n req.on(\"error\", (xhrStatus, context) => {\n this.onError(\"xhr poll error\", xhrStatus, context);\n });\n this.pollXhr = req;\n }\n}\nexport let Request = /*#__PURE__*/(() => {\n class Request extends Emitter {\n /**\n * Request constructor\n *\n * @param {Object} options\n * @package\n */\n constructor(createRequest, uri, opts) {\n super();\n this.createRequest = createRequest;\n installTimerFunctions(this, opts);\n this._opts = opts;\n this._method = opts.method || \"GET\";\n this._uri = uri;\n this._data = undefined !== opts.data ? opts.data : null;\n this._create();\n }\n /**\n * Creates the XHR object and sends the request.\n *\n * @private\n */\n _create() {\n var _a;\n const opts = pick(this._opts, \"agent\", \"pfx\", \"key\", \"passphrase\", \"cert\", \"ca\", \"ciphers\", \"rejectUnauthorized\", \"autoUnref\");\n opts.xdomain = !!this._opts.xd;\n const xhr = this._xhr = this.createRequest(opts);\n try {\n xhr.open(this._method, this._uri, true);\n try {\n if (this._opts.extraHeaders) {\n // @ts-ignore\n xhr.setDisableHeaderCheck && xhr.setDisableHeaderCheck(true);\n for (let i in this._opts.extraHeaders) {\n if (this._opts.extraHeaders.hasOwnProperty(i)) {\n xhr.setRequestHeader(i, this._opts.extraHeaders[i]);\n }\n }\n }\n } catch (e) {}\n if (\"POST\" === this._method) {\n try {\n xhr.setRequestHeader(\"Content-type\", \"text/plain;charset=UTF-8\");\n } catch (e) {}\n }\n try {\n xhr.setRequestHeader(\"Accept\", \"*/*\");\n } catch (e) {}\n (_a = this._opts.cookieJar) === null || _a === void 0 ? void 0 : _a.addCookies(xhr);\n // ie6 check\n if (\"withCredentials\" in xhr) {\n xhr.withCredentials = this._opts.withCredentials;\n }\n if (this._opts.requestTimeout) {\n xhr.timeout = this._opts.requestTimeout;\n }\n xhr.onreadystatechange = () => {\n var _a;\n if (xhr.readyState === 3) {\n (_a = this._opts.cookieJar) === null || _a === void 0 ? void 0 : _a.parseCookies(\n // @ts-ignore\n xhr.getResponseHeader(\"set-cookie\"));\n }\n if (4 !== xhr.readyState) return;\n if (200 === xhr.status || 1223 === xhr.status) {\n this._onLoad();\n } else {\n // make sure the `error` event handler that's user-set\n // does not throw in the same tick and gets caught here\n this.setTimeoutFn(() => {\n this._onError(typeof xhr.status === \"number\" ? xhr.status : 0);\n }, 0);\n }\n };\n xhr.send(this._data);\n } catch (e) {\n // Need to defer since .create() is called directly from the constructor\n // and thus the 'error' event can only be only bound *after* this exception\n // occurs. Therefore, also, we cannot throw here at all.\n this.setTimeoutFn(() => {\n this._onError(e);\n }, 0);\n return;\n }\n if (typeof document !== \"undefined\") {\n this._index = Request.requestsCount++;\n Request.requests[this._index] = this;\n }\n }\n /**\n * Called upon error.\n *\n * @private\n */\n _onError(err) {\n this.emitReserved(\"error\", err, this._xhr);\n this._cleanup(true);\n }\n /**\n * Cleans up house.\n *\n * @private\n */\n _cleanup(fromError) {\n if (\"undefined\" === typeof this._xhr || null === this._xhr) {\n return;\n }\n this._xhr.onreadystatechange = empty;\n if (fromError) {\n try {\n this._xhr.abort();\n } catch (e) {}\n }\n if (typeof document !== \"undefined\") {\n delete Request.requests[this._index];\n }\n this._xhr = null;\n }\n /**\n * Called upon load.\n *\n * @private\n */\n _onLoad() {\n const data = this._xhr.responseText;\n if (data !== null) {\n this.emitReserved(\"data\", data);\n this.emitReserved(\"success\");\n this._cleanup();\n }\n }\n /**\n * Aborts the request.\n *\n * @package\n */\n abort() {\n this._cleanup();\n }\n }\n Request.requestsCount = 0;\n Request.requests = {};\n /**\n * Aborts pending requests when unloading the window. This is needed to prevent\n * memory leaks (e.g. when using IE) and to ensure that no spurious error is\n * emitted.\n */\n return Request;\n})();\nif (typeof document !== \"undefined\") {\n // @ts-ignore\n if (typeof attachEvent === \"function\") {\n // @ts-ignore\n attachEvent(\"onunload\", unloadHandler);\n } else if (typeof addEventListener === \"function\") {\n const terminationEvent = \"onpagehide\" in globalThis ? \"pagehide\" : \"unload\";\n addEventListener(terminationEvent, unloadHandler, false);\n }\n}\nfunction unloadHandler() {\n for (let i in Request.requests) {\n if (Request.requests.hasOwnProperty(i)) {\n Request.requests[i].abort();\n }\n }\n}\nconst hasXHR2 = function () {\n const xhr = newRequest({\n xdomain: false\n });\n return xhr && xhr.responseType !== null;\n}();\n/**\n * HTTP long-polling based on the built-in `XMLHttpRequest` object.\n *\n * Usage: browser\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest\n */\nexport class XHR extends BaseXHR {\n constructor(opts) {\n super(opts);\n const forceBase64 = opts && opts.forceBase64;\n this.supportsBinary = hasXHR2 && !forceBase64;\n }\n request(opts = {}) {\n Object.assign(opts, {\n xd: this.xd\n }, this.opts);\n return new Request(newRequest, this.uri(), opts);\n }\n}\nfunction newRequest(opts) {\n const xdomain = opts.xdomain;\n // XMLHttpRequest can be disabled on IE\n try {\n if (\"undefined\" !== typeof XMLHttpRequest && (!xdomain || hasCORS)) {\n return new XMLHttpRequest();\n }\n } catch (e) {}\n if (!xdomain) {\n try {\n return new globalThis[[\"Active\"].concat(\"Object\").join(\"X\")](\"Microsoft.XMLHTTP\");\n } catch (e) {}\n }\n}","import { Transport } from \"../transport.js\";\nimport { pick, randomString } from \"../util.js\";\nimport { encodePacket } from \"engine.io-parser\";\nimport { globalThisShim as globalThis, nextTick } from \"../globals.node.js\";\n// detect ReactNative environment\nconst isReactNative = typeof navigator !== \"undefined\" && typeof navigator.product === \"string\" && navigator.product.toLowerCase() === \"reactnative\";\nexport class BaseWS extends Transport {\n get name() {\n return \"websocket\";\n }\n doOpen() {\n const uri = this.uri();\n const protocols = this.opts.protocols;\n // React Native only supports the 'headers' option, and will print a warning if anything else is passed\n const opts = isReactNative ? {} : pick(this.opts, \"agent\", \"perMessageDeflate\", \"pfx\", \"key\", \"passphrase\", \"cert\", \"ca\", \"ciphers\", \"rejectUnauthorized\", \"localAddress\", \"protocolVersion\", \"origin\", \"maxPayload\", \"family\", \"checkServerIdentity\");\n if (this.opts.extraHeaders) {\n opts.headers = this.opts.extraHeaders;\n }\n try {\n this.ws = this.createSocket(uri, protocols, opts);\n } catch (err) {\n return this.emitReserved(\"error\", err);\n }\n this.ws.binaryType = this.socket.binaryType;\n this.addEventListeners();\n }\n /**\n * Adds event listeners to the socket\n *\n * @private\n */\n addEventListeners() {\n this.ws.onopen = () => {\n if (this.opts.autoUnref) {\n this.ws._socket.unref();\n }\n this.onOpen();\n };\n this.ws.onclose = closeEvent => this.onClose({\n description: \"websocket connection closed\",\n context: closeEvent\n });\n this.ws.onmessage = ev => this.onData(ev.data);\n this.ws.onerror = e => this.onError(\"websocket error\", e);\n }\n write(packets) {\n this.writable = false;\n // encodePacket efficient as it uses WS framing\n // no need for encodePayload\n for (let i = 0; i < packets.length; i++) {\n const packet = packets[i];\n const lastPacket = i === packets.length - 1;\n encodePacket(packet, this.supportsBinary, data => {\n // Sometimes the websocket has already been closed but the browser didn't\n // have a chance of informing us about it yet, in that case send will\n // throw an error\n try {\n this.doWrite(packet, data);\n } catch (e) {}\n if (lastPacket) {\n // fake drain\n // defer to next tick to allow Socket to clear writeBuffer\n nextTick(() => {\n this.writable = true;\n this.emitReserved(\"drain\");\n }, this.setTimeoutFn);\n }\n });\n }\n }\n doClose() {\n if (typeof this.ws !== \"undefined\") {\n this.ws.onerror = () => {};\n this.ws.close();\n this.ws = null;\n }\n }\n /**\n * Generates uri for connection.\n *\n * @private\n */\n uri() {\n const schema = this.opts.secure ? \"wss\" : \"ws\";\n const query = this.query || {};\n // append timestamp to URI\n if (this.opts.timestampRequests) {\n query[this.opts.timestampParam] = randomString();\n }\n // communicate binary support capabilities\n if (!this.supportsBinary) {\n query.b64 = 1;\n }\n return this.createUri(schema, query);\n }\n}\nconst WebSocketCtor = globalThis.WebSocket || globalThis.MozWebSocket;\n/**\n * WebSocket transport based on the built-in `WebSocket` object.\n *\n * Usage: browser, Node.js (since v21), Deno, Bun\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket\n * @see https://caniuse.com/mdn-api_websocket\n * @see https://nodejs.org/api/globals.html#websocket\n */\nexport class WS extends BaseWS {\n createSocket(uri, protocols, opts) {\n return !isReactNative ? protocols ? new WebSocketCtor(uri, protocols) : new WebSocketCtor(uri) : new WebSocketCtor(uri, protocols, opts);\n }\n doWrite(_packet, data) {\n this.ws.send(data);\n }\n}","import { Transport } from \"../transport.js\";\nimport { nextTick } from \"../globals.node.js\";\nimport { createPacketDecoderStream, createPacketEncoderStream } from \"engine.io-parser\";\n/**\n * WebTransport transport based on the built-in `WebTransport` object.\n *\n * Usage: browser, Node.js (with the `@fails-components/webtransport` package)\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/WebTransport\n * @see https://caniuse.com/webtransport\n */\nexport class WT extends Transport {\n get name() {\n return \"webtransport\";\n }\n doOpen() {\n try {\n // @ts-ignore\n this._transport = new WebTransport(this.createUri(\"https\"), this.opts.transportOptions[this.name]);\n } catch (err) {\n return this.emitReserved(\"error\", err);\n }\n this._transport.closed.then(() => {\n this.onClose();\n }).catch(err => {\n this.onError(\"webtransport error\", err);\n });\n // note: we could have used async/await, but that would require some additional polyfills\n this._transport.ready.then(() => {\n this._transport.createBidirectionalStream().then(stream => {\n const decoderStream = createPacketDecoderStream(Number.MAX_SAFE_INTEGER, this.socket.binaryType);\n const reader = stream.readable.pipeThrough(decoderStream).getReader();\n const encoderStream = createPacketEncoderStream();\n encoderStream.readable.pipeTo(stream.writable);\n this._writer = encoderStream.writable.getWriter();\n const read = () => {\n reader.read().then(({\n done,\n value\n }) => {\n if (done) {\n return;\n }\n this.onPacket(value);\n read();\n }).catch(err => {});\n };\n read();\n const packet = {\n type: \"open\"\n };\n if (this.query.sid) {\n packet.data = `{\"sid\":\"${this.query.sid}\"}`;\n }\n this._writer.write(packet).then(() => this.onOpen());\n });\n });\n }\n write(packets) {\n this.writable = false;\n for (let i = 0; i < packets.length; i++) {\n const packet = packets[i];\n const lastPacket = i === packets.length - 1;\n this._writer.write(packet).then(() => {\n if (lastPacket) {\n nextTick(() => {\n this.writable = true;\n this.emitReserved(\"drain\");\n }, this.setTimeoutFn);\n }\n });\n }\n }\n doClose() {\n var _a;\n (_a = this._transport) === null || _a === void 0 ? void 0 : _a.close();\n }\n}","import { XHR } from \"./polling-xhr.node.js\";\nimport { WS } from \"./websocket.node.js\";\nimport { WT } from \"./webtransport.js\";\nexport const transports = {\n websocket: WS,\n webtransport: WT,\n polling: XHR\n};","// imported from https://github.com/galkn/parseuri\n/**\n * Parses a URI\n *\n * Note: we could also have used the built-in URL object, but it isn't supported on all platforms.\n *\n * See:\n * - https://developer.mozilla.org/en-US/docs/Web/API/URL\n * - https://caniuse.com/url\n * - https://www.rfc-editor.org/rfc/rfc3986#appendix-B\n *\n * History of the parse() method:\n * - first commit: https://github.com/socketio/socket.io-client/commit/4ee1d5d94b3906a9c052b459f1a818b15f38f91c\n * - export into its own module: https://github.com/socketio/engine.io-client/commit/de2c561e4564efeb78f1bdb1ba39ef81b2822cb3\n * - reimport: https://github.com/socketio/engine.io-client/commit/df32277c3f6d622eec5ed09f493cae3f3391d242\n *\n * @author Steven Levithan (MIT license)\n * @api private\n */\nconst re = /^(?:(?![^:@\\/?#]+:[^:@\\/]*@)(http|https|ws|wss):\\/\\/)?((?:(([^:@\\/?#]*)(?::([^:@\\/?#]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/;\nconst parts = ['source', 'protocol', 'authority', 'userInfo', 'user', 'password', 'host', 'port', 'relative', 'path', 'directory', 'file', 'query', 'anchor'];\nexport function parse(str) {\n if (str.length > 8000) {\n throw \"URI too long\";\n }\n const src = str,\n b = str.indexOf('['),\n e = str.indexOf(']');\n if (b != -1 && e != -1) {\n str = str.substring(0, b) + str.substring(b, e).replace(/:/g, ';') + str.substring(e, str.length);\n }\n let m = re.exec(str || ''),\n uri = {},\n i = 14;\n while (i--) {\n uri[parts[i]] = m[i] || '';\n }\n if (b != -1 && e != -1) {\n uri.source = src;\n uri.host = uri.host.substring(1, uri.host.length - 1).replace(/;/g, ':');\n uri.authority = uri.authority.replace('[', '').replace(']', '').replace(/;/g, ':');\n uri.ipv6uri = true;\n }\n uri.pathNames = pathNames(uri, uri['path']);\n uri.queryKey = queryKey(uri, uri['query']);\n return uri;\n}\nfunction pathNames(obj, path) {\n const regx = /\\/{2,9}/g,\n names = path.replace(regx, \"/\").split(\"/\");\n if (path.slice(0, 1) == '/' || path.length === 0) {\n names.splice(0, 1);\n }\n if (path.slice(-1) == '/') {\n names.splice(names.length - 1, 1);\n }\n return names;\n}\nfunction queryKey(uri, query) {\n const data = {};\n query.replace(/(?:^|&)([^&=]*)=?([^&]*)/g, function ($0, $1, $2) {\n if ($1) {\n data[$1] = $2;\n }\n });\n return data;\n}","import { transports as DEFAULT_TRANSPORTS } from \"./transports/index.js\";\nimport { installTimerFunctions, byteLength } from \"./util.js\";\nimport { decode } from \"./contrib/parseqs.js\";\nimport { parse } from \"./contrib/parseuri.js\";\nimport { Emitter } from \"@socket.io/component-emitter\";\nimport { protocol } from \"engine.io-parser\";\nimport { createCookieJar, defaultBinaryType, nextTick } from \"./globals.node.js\";\nconst withEventListeners = typeof addEventListener === \"function\" && typeof removeEventListener === \"function\";\nconst OFFLINE_EVENT_LISTENERS = [];\nif (withEventListeners) {\n // within a ServiceWorker, any event handler for the 'offline' event must be added on the initial evaluation of the\n // script, so we create one single event listener here which will forward the event to the socket instances\n addEventListener(\"offline\", () => {\n OFFLINE_EVENT_LISTENERS.forEach(listener => listener());\n }, false);\n}\n/**\n * This class provides a WebSocket-like interface to connect to an Engine.IO server. The connection will be established\n * with one of the available low-level transports, like HTTP long-polling, WebSocket or WebTransport.\n *\n * This class comes without upgrade mechanism, which means that it will keep the first low-level transport that\n * successfully establishes the connection.\n *\n * In order to allow tree-shaking, there are no transports included, that's why the `transports` option is mandatory.\n *\n * @example\n * import { SocketWithoutUpgrade, WebSocket } from \"engine.io-client\";\n *\n * const socket = new SocketWithoutUpgrade({\n * transports: [WebSocket]\n * });\n *\n * socket.on(\"open\", () => {\n * socket.send(\"hello\");\n * });\n *\n * @see SocketWithUpgrade\n * @see Socket\n */\nexport let SocketWithoutUpgrade = /*#__PURE__*/(() => {\n class SocketWithoutUpgrade extends Emitter {\n /**\n * Socket constructor.\n *\n * @param {String|Object} uri - uri or options\n * @param {Object} opts - options\n */\n constructor(uri, opts) {\n super();\n this.binaryType = defaultBinaryType;\n this.writeBuffer = [];\n this._prevBufferLen = 0;\n this._pingInterval = -1;\n this._pingTimeout = -1;\n this._maxPayload = -1;\n /**\n * The expiration timestamp of the {@link _pingTimeoutTimer} object is tracked, in case the timer is throttled and the\n * callback is not fired on time. This can happen for example when a laptop is suspended or when a phone is locked.\n */\n this._pingTimeoutTime = Infinity;\n if (uri && \"object\" === typeof uri) {\n opts = uri;\n uri = null;\n }\n if (uri) {\n const parsedUri = parse(uri);\n opts.hostname = parsedUri.host;\n opts.secure = parsedUri.protocol === \"https\" || parsedUri.protocol === \"wss\";\n opts.port = parsedUri.port;\n if (parsedUri.query) opts.query = parsedUri.query;\n } else if (opts.host) {\n opts.hostname = parse(opts.host).host;\n }\n installTimerFunctions(this, opts);\n this.secure = null != opts.secure ? opts.secure : typeof location !== \"undefined\" && \"https:\" === location.protocol;\n if (opts.hostname && !opts.port) {\n // if no port is specified manually, use the protocol default\n opts.port = this.secure ? \"443\" : \"80\";\n }\n this.hostname = opts.hostname || (typeof location !== \"undefined\" ? location.hostname : \"localhost\");\n this.port = opts.port || (typeof location !== \"undefined\" && location.port ? location.port : this.secure ? \"443\" : \"80\");\n this.transports = [];\n this._transportsByName = {};\n opts.transports.forEach(t => {\n const transportName = t.prototype.name;\n this.transports.push(transportName);\n this._transportsByName[transportName] = t;\n });\n this.opts = Object.assign({\n path: \"/engine.io\",\n agent: false,\n withCredentials: false,\n upgrade: true,\n timestampParam: \"t\",\n rememberUpgrade: false,\n addTrailingSlash: true,\n rejectUnauthorized: true,\n perMessageDeflate: {\n threshold: 1024\n },\n transportOptions: {},\n closeOnBeforeunload: false\n }, opts);\n this.opts.path = this.opts.path.replace(/\\/$/, \"\") + (this.opts.addTrailingSlash ? \"/\" : \"\");\n if (typeof this.opts.query === \"string\") {\n this.opts.query = decode(this.opts.query);\n }\n if (withEventListeners) {\n if (this.opts.closeOnBeforeunload) {\n // Firefox closes the connection when the \"beforeunload\" event is emitted but not Chrome. This event listener\n // ensures every browser behaves the same (no \"disconnect\" event at the Socket.IO level when the page is\n // closed/reloaded)\n this._beforeunloadEventListener = () => {\n if (this.transport) {\n // silently close the transport\n this.transport.removeAllListeners();\n this.transport.close();\n }\n };\n addEventListener(\"beforeunload\", this._beforeunloadEventListener, false);\n }\n if (this.hostname !== \"localhost\") {\n this._offlineEventListener = () => {\n this._onClose(\"transport close\", {\n description: \"network connection lost\"\n });\n };\n OFFLINE_EVENT_LISTENERS.push(this._offlineEventListener);\n }\n }\n if (this.opts.withCredentials) {\n this._cookieJar = createCookieJar();\n }\n this._open();\n }\n /**\n * Creates transport of the given type.\n *\n * @param {String} name - transport name\n * @return {Transport}\n * @private\n */\n createTransport(name) {\n const query = Object.assign({}, this.opts.query);\n // append engine.io protocol identifier\n query.EIO = protocol;\n // transport name\n query.transport = name;\n // session id if we already have one\n if (this.id) query.sid = this.id;\n const opts = Object.assign({}, this.opts, {\n query,\n socket: this,\n hostname: this.hostname,\n secure: this.secure,\n port: this.port\n }, this.opts.transportOptions[name]);\n return new this._transportsByName[name](opts);\n }\n /**\n * Initializes transport to use and starts probe.\n *\n * @private\n */\n _open() {\n if (this.transports.length === 0) {\n // Emit error on next tick so it can be listened to\n this.setTimeoutFn(() => {\n this.emitReserved(\"error\", \"No transports available\");\n }, 0);\n return;\n }\n const transportName = this.opts.rememberUpgrade && SocketWithoutUpgrade.priorWebsocketSuccess && this.transports.indexOf(\"websocket\") !== -1 ? \"websocket\" : this.transports[0];\n this.readyState = \"opening\";\n const transport = this.createTransport(transportName);\n transport.open();\n this.setTransport(transport);\n }\n /**\n * Sets the current transport. Disables the existing one (if any).\n *\n * @private\n */\n setTransport(transport) {\n if (this.transport) {\n this.transport.removeAllListeners();\n }\n // set up transport\n this.transport = transport;\n // set up transport listeners\n transport.on(\"drain\", this._onDrain.bind(this)).on(\"packet\", this._onPacket.bind(this)).on(\"error\", this._onError.bind(this)).on(\"close\", reason => this._onClose(\"transport close\", reason));\n }\n /**\n * Called when connection is deemed open.\n *\n * @private\n */\n onOpen() {\n this.readyState = \"open\";\n SocketWithoutUpgrade.priorWebsocketSuccess = \"websocket\" === this.transport.name;\n this.emitReserved(\"open\");\n this.flush();\n }\n /**\n * Handles a packet.\n *\n * @private\n */\n _onPacket(packet) {\n if (\"opening\" === this.readyState || \"open\" === this.readyState || \"closing\" === this.readyState) {\n this.emitReserved(\"packet\", packet);\n // Socket is live - any packet counts\n this.emitReserved(\"heartbeat\");\n switch (packet.type) {\n case \"open\":\n this.onHandshake(JSON.parse(packet.data));\n break;\n case \"ping\":\n this._sendPacket(\"pong\");\n this.emitReserved(\"ping\");\n this.emitReserved(\"pong\");\n this._resetPingTimeout();\n break;\n case \"error\":\n const err = new Error(\"server error\");\n // @ts-ignore\n err.code = packet.data;\n this._onError(err);\n break;\n case \"message\":\n this.emitReserved(\"data\", packet.data);\n this.emitReserved(\"message\", packet.data);\n break;\n }\n } else {}\n }\n /**\n * Called upon handshake completion.\n *\n * @param {Object} data - handshake obj\n * @private\n */\n onHandshake(data) {\n this.emitReserved(\"handshake\", data);\n this.id = data.sid;\n this.transport.query.sid = data.sid;\n this._pingInterval = data.pingInterval;\n this._pingTimeout = data.pingTimeout;\n this._maxPayload = data.maxPayload;\n this.onOpen();\n // In case open handler closes socket\n if (\"closed\" === this.readyState) return;\n this._resetPingTimeout();\n }\n /**\n * Sets and resets ping timeout timer based on server pings.\n *\n * @private\n */\n _resetPingTimeout() {\n this.clearTimeoutFn(this._pingTimeoutTimer);\n const delay = this._pingInterval + this._pingTimeout;\n this._pingTimeoutTime = Date.now() + delay;\n this._pingTimeoutTimer = this.setTimeoutFn(() => {\n this._onClose(\"ping timeout\");\n }, delay);\n if (this.opts.autoUnref) {\n this._pingTimeoutTimer.unref();\n }\n }\n /**\n * Called on `drain` event\n *\n * @private\n */\n _onDrain() {\n this.writeBuffer.splice(0, this._prevBufferLen);\n // setting prevBufferLen = 0 is very important\n // for example, when upgrading, upgrade packet is sent over,\n // and a nonzero prevBufferLen could cause problems on `drain`\n this._prevBufferLen = 0;\n if (0 === this.writeBuffer.length) {\n this.emitReserved(\"drain\");\n } else {\n this.flush();\n }\n }\n /**\n * Flush write buffers.\n *\n * @private\n */\n flush() {\n if (\"closed\" !== this.readyState && this.transport.writable && !this.upgrading && this.writeBuffer.length) {\n const packets = this._getWritablePackets();\n this.transport.send(packets);\n // keep track of current length of writeBuffer\n // splice writeBuffer and callbackBuffer on `drain`\n this._prevBufferLen = packets.length;\n this.emitReserved(\"flush\");\n }\n }\n /**\n * Ensure the encoded size of the writeBuffer is below the maxPayload value sent by the server (only for HTTP\n * long-polling)\n *\n * @private\n */\n _getWritablePackets() {\n const shouldCheckPayloadSize = this._maxPayload && this.transport.name === \"polling\" && this.writeBuffer.length > 1;\n if (!shouldCheckPayloadSize) {\n return this.writeBuffer;\n }\n let payloadSize = 1; // first packet type\n for (let i = 0; i < this.writeBuffer.length; i++) {\n const data = this.writeBuffer[i].data;\n if (data) {\n payloadSize += byteLength(data);\n }\n if (i > 0 && payloadSize > this._maxPayload) {\n return this.writeBuffer.slice(0, i);\n }\n payloadSize += 2; // separator + packet type\n }\n return this.writeBuffer;\n }\n /**\n * Checks whether the heartbeat timer has expired but the socket has not yet been notified.\n *\n * Note: this method is private for now because it does not really fit the WebSocket API, but if we put it in the\n * `write()` method then the message would not be buffered by the Socket.IO client.\n *\n * @return {boolean}\n * @private\n */\n /* private */\n _hasPingExpired() {\n if (!this._pingTimeoutTime) return true;\n const hasExpired = Date.now() > this._pingTimeoutTime;\n if (hasExpired) {\n this._pingTimeoutTime = 0;\n nextTick(() => {\n this._onClose(\"ping timeout\");\n }, this.setTimeoutFn);\n }\n return hasExpired;\n }\n /**\n * Sends a message.\n *\n * @param {String} msg - message.\n * @param {Object} options.\n * @param {Function} fn - callback function.\n * @return {Socket} for chaining.\n */\n write(msg, options, fn) {\n this._sendPacket(\"message\", msg, options, fn);\n return this;\n }\n /**\n * Sends a message. Alias of {@link Socket#write}.\n *\n * @param {String} msg - message.\n * @param {Object} options.\n * @param {Function} fn - callback function.\n * @return {Socket} for chaining.\n */\n send(msg, options, fn) {\n this._sendPacket(\"message\", msg, options, fn);\n return this;\n }\n /**\n * Sends a packet.\n *\n * @param {String} type: packet type.\n * @param {String} data.\n * @param {Object} options.\n * @param {Function} fn - callback function.\n * @private\n */\n _sendPacket(type, data, options, fn) {\n if (\"function\" === typeof data) {\n fn = data;\n data = undefined;\n }\n if (\"function\" === typeof options) {\n fn = options;\n options = null;\n }\n if (\"closing\" === this.readyState || \"closed\" === this.readyState) {\n return;\n }\n options = options || {};\n options.compress = false !== options.compress;\n const packet = {\n type: type,\n data: data,\n options: options\n };\n this.emitReserved(\"packetCreate\", packet);\n this.writeBuffer.push(packet);\n if (fn) this.once(\"flush\", fn);\n this.flush();\n }\n /**\n * Closes the connection.\n */\n close() {\n const close = () => {\n this._onClose(\"forced close\");\n this.transport.close();\n };\n const cleanupAndClose = () => {\n this.off(\"upgrade\", cleanupAndClose);\n this.off(\"upgradeError\", cleanupAndClose);\n close();\n };\n const waitForUpgrade = () => {\n // wait for upgrade to finish since we can't send packets while pausing a transport\n this.once(\"upgrade\", cleanupAndClose);\n this.once(\"upgradeError\", cleanupAndClose);\n };\n if (\"opening\" === this.readyState || \"open\" === this.readyState) {\n this.readyState = \"closing\";\n if (this.writeBuffer.length) {\n this.once(\"drain\", () => {\n if (this.upgrading) {\n waitForUpgrade();\n } else {\n close();\n }\n });\n } else if (this.upgrading) {\n waitForUpgrade();\n } else {\n close();\n }\n }\n return this;\n }\n /**\n * Called upon transport error\n *\n * @private\n */\n _onError(err) {\n SocketWithoutUpgrade.priorWebsocketSuccess = false;\n if (this.opts.tryAllTransports && this.transports.length > 1 && this.readyState === \"opening\") {\n this.transports.shift();\n return this._open();\n }\n this.emitReserved(\"error\", err);\n this._onClose(\"transport error\", err);\n }\n /**\n * Called upon transport close.\n *\n * @private\n */\n _onClose(reason, description) {\n if (\"opening\" === this.readyState || \"open\" === this.readyState || \"closing\" === this.readyState) {\n // clear timers\n this.clearTimeoutFn(this._pingTimeoutTimer);\n // stop event from firing again for transport\n this.transport.removeAllListeners(\"close\");\n // ensure transport won't stay open\n this.transport.close();\n // ignore further transport communication\n this.transport.removeAllListeners();\n if (withEventListeners) {\n if (this._beforeunloadEventListener) {\n removeEventListener(\"beforeunload\", this._beforeunloadEventListener, false);\n }\n if (this._offlineEventListener) {\n const i = OFFLINE_EVENT_LISTENERS.indexOf(this._offlineEventListener);\n if (i !== -1) {\n OFFLINE_EVENT_LISTENERS.splice(i, 1);\n }\n }\n }\n // set ready state\n this.readyState = \"closed\";\n // clear session id\n this.id = null;\n // emit close event\n this.emitReserved(\"close\", reason, description);\n // clean buffers after, so users can still\n // grab the buffers on `close` event\n this.writeBuffer = [];\n this._prevBufferLen = 0;\n }\n }\n }\n SocketWithoutUpgrade.protocol = protocol;\n /**\n * This class provides a WebSocket-like interface to connect to an Engine.IO server. The connection will be established\n * with one of the available low-level transports, like HTTP long-polling, WebSocket or WebTransport.\n *\n * This class comes with an upgrade mechanism, which means that once the connection is established with the first\n * low-level transport, it will try to upgrade to a better transport.\n *\n * In order to allow tree-shaking, there are no transports included, that's why the `transports` option is mandatory.\n *\n * @example\n * import { SocketWithUpgrade, WebSocket } from \"engine.io-client\";\n *\n * const socket = new SocketWithUpgrade({\n * transports: [WebSocket]\n * });\n *\n * socket.on(\"open\", () => {\n * socket.send(\"hello\");\n * });\n *\n * @see SocketWithoutUpgrade\n * @see Socket\n */\n return SocketWithoutUpgrade;\n})();\nexport class SocketWithUpgrade extends SocketWithoutUpgrade {\n constructor() {\n super(...arguments);\n this._upgrades = [];\n }\n onOpen() {\n super.onOpen();\n if (\"open\" === this.readyState && this.opts.upgrade) {\n for (let i = 0; i < this._upgrades.length; i++) {\n this._probe(this._upgrades[i]);\n }\n }\n }\n /**\n * Probes a transport.\n *\n * @param {String} name - transport name\n * @private\n */\n _probe(name) {\n let transport = this.createTransport(name);\n let failed = false;\n SocketWithoutUpgrade.priorWebsocketSuccess = false;\n const onTransportOpen = () => {\n if (failed) return;\n transport.send([{\n type: \"ping\",\n data: \"probe\"\n }]);\n transport.once(\"packet\", msg => {\n if (failed) return;\n if (\"pong\" === msg.type && \"probe\" === msg.data) {\n this.upgrading = true;\n this.emitReserved(\"upgrading\", transport);\n if (!transport) return;\n SocketWithoutUpgrade.priorWebsocketSuccess = \"websocket\" === transport.name;\n this.transport.pause(() => {\n if (failed) return;\n if (\"closed\" === this.readyState) return;\n cleanup();\n this.setTransport(transport);\n transport.send([{\n type: \"upgrade\"\n }]);\n this.emitReserved(\"upgrade\", transport);\n transport = null;\n this.upgrading = false;\n this.flush();\n });\n } else {\n const err = new Error(\"probe error\");\n // @ts-ignore\n err.transport = transport.name;\n this.emitReserved(\"upgradeError\", err);\n }\n });\n };\n function freezeTransport() {\n if (failed) return;\n // Any callback called by transport should be ignored since now\n failed = true;\n cleanup();\n transport.close();\n transport = null;\n }\n // Handle any error that happens while probing\n const onerror = err => {\n const error = new Error(\"probe error: \" + err);\n // @ts-ignore\n error.transport = transport.name;\n freezeTransport();\n this.emitReserved(\"upgradeError\", error);\n };\n function onTransportClose() {\n onerror(\"transport closed\");\n }\n // When the socket is closed while we're probing\n function onclose() {\n onerror(\"socket closed\");\n }\n // When the socket is upgraded while we're probing\n function onupgrade(to) {\n if (transport && to.name !== transport.name) {\n freezeTransport();\n }\n }\n // Remove all listeners on the transport and on self\n const cleanup = () => {\n transport.removeListener(\"open\", onTransportOpen);\n transport.removeListener(\"error\", onerror);\n transport.removeListener(\"close\", onTransportClose);\n this.off(\"close\", onclose);\n this.off(\"upgrading\", onupgrade);\n };\n transport.once(\"open\", onTransportOpen);\n transport.once(\"error\", onerror);\n transport.once(\"close\", onTransportClose);\n this.once(\"close\", onclose);\n this.once(\"upgrading\", onupgrade);\n if (this._upgrades.indexOf(\"webtransport\") !== -1 && name !== \"webtransport\") {\n // favor WebTransport\n this.setTimeoutFn(() => {\n if (!failed) {\n transport.open();\n }\n }, 200);\n } else {\n transport.open();\n }\n }\n onHandshake(data) {\n this._upgrades = this._filterUpgrades(data.upgrades);\n super.onHandshake(data);\n }\n /**\n * Filters upgrades, returning only those matching client transports.\n *\n * @param {Array} upgrades - server upgrades\n * @private\n */\n _filterUpgrades(upgrades) {\n const filteredUpgrades = [];\n for (let i = 0; i < upgrades.length; i++) {\n if (~this.transports.indexOf(upgrades[i])) filteredUpgrades.push(upgrades[i]);\n }\n return filteredUpgrades;\n }\n}\n/**\n * This class provides a WebSocket-like interface to connect to an Engine.IO server. The connection will be established\n * with one of the available low-level transports, like HTTP long-polling, WebSocket or WebTransport.\n *\n * This class comes with an upgrade mechanism, which means that once the connection is established with the first\n * low-level transport, it will try to upgrade to a better transport.\n *\n * @example\n * import { Socket } from \"engine.io-client\";\n *\n * const socket = new Socket();\n *\n * socket.on(\"open\", () => {\n * socket.send(\"hello\");\n * });\n *\n * @see SocketWithoutUpgrade\n * @see SocketWithUpgrade\n */\nexport class Socket extends SocketWithUpgrade {\n constructor(uri, opts = {}) {\n const o = typeof uri === \"object\" ? uri : opts;\n if (!o.transports || o.transports && typeof o.transports[0] === \"string\") {\n o.transports = (o.transports || [\"polling\", \"websocket\", \"webtransport\"]).map(transportName => DEFAULT_TRANSPORTS[transportName]).filter(t => !!t);\n }\n super(uri, o);\n }\n}","import { Socket } from \"./socket.js\";\nexport { Socket };\nexport { SocketWithoutUpgrade, SocketWithUpgrade } from \"./socket.js\";\nexport const protocol = Socket.protocol;\nexport { Transport, TransportError } from \"./transport.js\";\nexport { transports } from \"./transports/index.js\";\nexport { installTimerFunctions } from \"./util.js\";\nexport { parse } from \"./contrib/parseuri.js\";\nexport { nextTick } from \"./globals.node.js\";\nexport { Fetch } from \"./transports/polling-fetch.js\";\nexport { XHR as NodeXHR } from \"./transports/polling-xhr.node.js\";\nexport { XHR } from \"./transports/polling-xhr.js\";\nexport { WS as NodeWebSocket } from \"./transports/websocket.node.js\";\nexport { WS as WebSocket } from \"./transports/websocket.js\";\nexport { WT as WebTransport } from \"./transports/webtransport.js\";","import { parse } from \"engine.io-client\";\n/**\n * URL parser.\n *\n * @param uri - url\n * @param path - the request path of the connection\n * @param loc - An object meant to mimic window.location.\n * Defaults to window.location.\n * @public\n */\nexport function url(uri, path = \"\", loc) {\n let obj = uri;\n // default to window.location\n loc = loc || typeof location !== \"undefined\" && location;\n if (null == uri) uri = loc.protocol + \"//\" + loc.host;\n // relative path support\n if (typeof uri === \"string\") {\n if (\"/\" === uri.charAt(0)) {\n if (\"/\" === uri.charAt(1)) {\n uri = loc.protocol + uri;\n } else {\n uri = loc.host + uri;\n }\n }\n if (!/^(https?|wss?):\\/\\//.test(uri)) {\n if (\"undefined\" !== typeof loc) {\n uri = loc.protocol + \"//\" + uri;\n } else {\n uri = \"https://\" + uri;\n }\n }\n // parse\n obj = parse(uri);\n }\n // make sure we treat `localhost:80` and `localhost` equally\n if (!obj.port) {\n if (/^(http|ws)$/.test(obj.protocol)) {\n obj.port = \"80\";\n } else if (/^(http|ws)s$/.test(obj.protocol)) {\n obj.port = \"443\";\n }\n }\n obj.path = obj.path || \"/\";\n const ipv6 = obj.host.indexOf(\":\") !== -1;\n const host = ipv6 ? \"[\" + obj.host + \"]\" : obj.host;\n // define unique id\n obj.id = obj.protocol + \"://\" + host + \":\" + obj.port + path;\n // define href\n obj.href = obj.protocol + \"://\" + host + (loc && loc.port === obj.port ? \"\" : \":\" + obj.port);\n return obj;\n}","import { Emitter } from \"@socket.io/component-emitter\";\nimport { deconstructPacket, reconstructPacket } from \"./binary.js\";\nimport { isBinary, hasBinary } from \"./is-binary.js\";\n/**\n * These strings must not be used as event names, as they have a special meaning.\n */\nconst RESERVED_EVENTS = [\"connect\",\n// used on the client side\n\"connect_error\",\n// used on the client side\n\"disconnect\",\n// used on both sides\n\"disconnecting\",\n// used on the server side\n\"newListener\",\n// used by the Node.js EventEmitter\n\"removeListener\" // used by the Node.js EventEmitter\n];\n/**\n * Protocol version.\n *\n * @public\n */\nexport const protocol = 5;\nexport var PacketType = /*#__PURE__*/function (PacketType) {\n PacketType[PacketType[\"CONNECT\"] = 0] = \"CONNECT\";\n PacketType[PacketType[\"DISCONNECT\"] = 1] = \"DISCONNECT\";\n PacketType[PacketType[\"EVENT\"] = 2] = \"EVENT\";\n PacketType[PacketType[\"ACK\"] = 3] = \"ACK\";\n PacketType[PacketType[\"CONNECT_ERROR\"] = 4] = \"CONNECT_ERROR\";\n PacketType[PacketType[\"BINARY_EVENT\"] = 5] = \"BINARY_EVENT\";\n PacketType[PacketType[\"BINARY_ACK\"] = 6] = \"BINARY_ACK\";\n return PacketType;\n}(PacketType || {});\n/**\n * A socket.io Encoder instance\n */\nexport class Encoder {\n /**\n * Encoder constructor\n *\n * @param {function} replacer - custom replacer to pass down to JSON.parse\n */\n constructor(replacer) {\n this.replacer = replacer;\n }\n /**\n * Encode a packet as a single string if non-binary, or as a\n * buffer sequence, depending on packet type.\n *\n * @param {Object} obj - packet object\n */\n encode(obj) {\n if (obj.type === PacketType.EVENT || obj.type === PacketType.ACK) {\n if (hasBinary(obj)) {\n return this.encodeAsBinary({\n type: obj.type === PacketType.EVENT ? PacketType.BINARY_EVENT : PacketType.BINARY_ACK,\n nsp: obj.nsp,\n data: obj.data,\n id: obj.id\n });\n }\n }\n return [this.encodeAsString(obj)];\n }\n /**\n * Encode packet as string.\n */\n encodeAsString(obj) {\n // first is type\n let str = \"\" + obj.type;\n // attachments if we have them\n if (obj.type === PacketType.BINARY_EVENT || obj.type === PacketType.BINARY_ACK) {\n str += obj.attachments + \"-\";\n }\n // if we have a namespace other than `/`\n // we append it followed by a comma `,`\n if (obj.nsp && \"/\" !== obj.nsp) {\n str += obj.nsp + \",\";\n }\n // immediately followed by the id\n if (null != obj.id) {\n str += obj.id;\n }\n // json data\n if (null != obj.data) {\n str += JSON.stringify(obj.data, this.replacer);\n }\n return str;\n }\n /**\n * Encode packet as 'buffer sequence' by removing blobs, and\n * deconstructing packet into object with placeholders and\n * a list of buffers.\n */\n encodeAsBinary(obj) {\n const deconstruction = deconstructPacket(obj);\n const pack = this.encodeAsString(deconstruction.packet);\n const buffers = deconstruction.buffers;\n buffers.unshift(pack); // add packet info to beginning of data list\n return buffers; // write all the buffers\n }\n}\n/**\n * A socket.io Decoder instance\n *\n * @return {Object} decoder\n */\nexport class Decoder extends Emitter {\n /**\n * Decoder constructor\n */\n constructor(opts) {\n super();\n this.opts = Object.assign({\n reviver: undefined,\n maxAttachments: 10\n }, typeof opts === \"function\" ? {\n reviver: opts\n } : opts);\n }\n /**\n * Decodes an encoded packet string into packet JSON.\n *\n * @param {String} obj - encoded packet\n */\n add(obj) {\n let packet;\n if (typeof obj === \"string\") {\n if (this.reconstructor) {\n throw new Error(\"got plaintext data when reconstructing a packet\");\n }\n packet = this.decodeString(obj);\n const isBinaryEvent = packet.type === PacketType.BINARY_EVENT;\n if (isBinaryEvent || packet.type === PacketType.BINARY_ACK) {\n packet.type = isBinaryEvent ? PacketType.EVENT : PacketType.ACK;\n // binary packet's json\n this.reconstructor = new BinaryReconstructor(packet);\n // no attachments, labeled binary but no binary data to follow\n if (packet.attachments === 0) {\n super.emitReserved(\"decoded\", packet);\n }\n } else {\n // non-binary full packet\n super.emitReserved(\"decoded\", packet);\n }\n } else if (isBinary(obj) || obj.base64) {\n // raw binary data\n if (!this.reconstructor) {\n throw new Error(\"got binary data when not reconstructing a packet\");\n } else {\n packet = this.reconstructor.takeBinaryData(obj);\n if (packet) {\n // received final buffer\n this.reconstructor = null;\n super.emitReserved(\"decoded\", packet);\n }\n }\n } else {\n throw new Error(\"Unknown type: \" + obj);\n }\n }\n /**\n * Decode a packet String (JSON data)\n *\n * @param {String} str\n * @return {Object} packet\n */\n decodeString(str) {\n let i = 0;\n // look up type\n const p = {\n type: Number(str.charAt(0))\n };\n if (PacketType[p.type] === undefined) {\n throw new Error(\"unknown packet type \" + p.type);\n }\n // look up attachments if type binary\n if (p.type === PacketType.BINARY_EVENT || p.type === PacketType.BINARY_ACK) {\n const start = i + 1;\n while (str.charAt(++i) !== \"-\" && i != str.length) {}\n const buf = str.substring(start, i);\n if (buf != Number(buf) || str.charAt(i) !== \"-\") {\n throw new Error(\"Illegal attachments\");\n }\n const n = Number(buf);\n if (!isInteger(n) || n < 0) {\n throw new Error(\"Illegal attachments\");\n } else if (n > this.opts.maxAttachments) {\n throw new Error(\"too many attachments\");\n }\n p.attachments = n;\n }\n // look up namespace (if any)\n if (\"/\" === str.charAt(i + 1)) {\n const start = i + 1;\n while (++i) {\n const c = str.charAt(i);\n if (\",\" === c) break;\n if (i === str.length) break;\n }\n p.nsp = str.substring(start, i);\n } else {\n p.nsp = \"/\";\n }\n // look up id\n const next = str.charAt(i + 1);\n if (\"\" !== next && Number(next) == next) {\n const start = i + 1;\n while (++i) {\n const c = str.charAt(i);\n if (null == c || Number(c) != c) {\n --i;\n break;\n }\n if (i === str.length) break;\n }\n p.id = Number(str.substring(start, i + 1));\n }\n // look up json data\n if (str.charAt(++i)) {\n const payload = this.tryParse(str.substr(i));\n if (Decoder.isPayloadValid(p.type, payload)) {\n p.data = payload;\n } else {\n throw new Error(\"invalid payload\");\n }\n }\n return p;\n }\n tryParse(str) {\n try {\n return JSON.parse(str, this.opts.reviver);\n } catch (e) {\n return false;\n }\n }\n static isPayloadValid(type, payload) {\n switch (type) {\n case PacketType.CONNECT:\n return isObject(payload);\n case PacketType.DISCONNECT:\n return payload === undefined;\n case PacketType.CONNECT_ERROR:\n return typeof payload === \"string\" || isObject(payload);\n case PacketType.EVENT:\n case PacketType.BINARY_EVENT:\n return Array.isArray(payload) && (typeof payload[0] === \"number\" || typeof payload[0] === \"string\" && RESERVED_EVENTS.indexOf(payload[0]) === -1);\n case PacketType.ACK:\n case PacketType.BINARY_ACK:\n return Array.isArray(payload);\n }\n }\n /**\n * Deallocates a parser's resources\n */\n destroy() {\n if (this.reconstructor) {\n this.reconstructor.finishedReconstruction();\n this.reconstructor = null;\n }\n }\n}\n/**\n * A manager of a binary event's 'buffer sequence'. Should\n * be constructed whenever a packet of type BINARY_EVENT is\n * decoded.\n *\n * @param {Object} packet\n * @return {BinaryReconstructor} initialized reconstructor\n */\nclass BinaryReconstructor {\n constructor(packet) {\n this.packet = packet;\n this.buffers = [];\n this.reconPack = packet;\n }\n /**\n * Method to be called when binary data received from connection\n * after a BINARY_EVENT packet.\n *\n * @param {Buffer | ArrayBuffer} binData - the raw binary data received\n * @return {null | Object} returns null if more binary data is expected or\n * a reconstructed packet object if all buffers have been received.\n */\n takeBinaryData(binData) {\n this.buffers.push(binData);\n if (this.buffers.length === this.reconPack.attachments) {\n // done with buffer list\n const packet = reconstructPacket(this.reconPack, this.buffers);\n this.finishedReconstruction();\n return packet;\n }\n return null;\n }\n /**\n * Cleans up binary packet reconstruction variables.\n */\n finishedReconstruction() {\n this.reconPack = null;\n this.buffers = [];\n }\n}\nfunction isNamespaceValid(nsp) {\n return typeof nsp === \"string\";\n}\n// see https://caniuse.com/mdn-javascript_builtins_number_isinteger\nconst isInteger = Number.isInteger || function (value) {\n return typeof value === \"number\" && isFinite(value) && Math.floor(value) === value;\n};\nfunction isAckIdValid(id) {\n return id === undefined || isInteger(id);\n}\n// see https://stackoverflow.com/questions/8511281/check-if-a-value-is-an-object-in-javascript\nfunction isObject(value) {\n return Object.prototype.toString.call(value) === \"[object Object]\";\n}\nfunction isDataValid(type, payload) {\n switch (type) {\n case PacketType.CONNECT:\n return payload === undefined || isObject(payload);\n case PacketType.DISCONNECT:\n return payload === undefined;\n case PacketType.EVENT:\n return Array.isArray(payload) && (typeof payload[0] === \"number\" || typeof payload[0] === \"string\" && RESERVED_EVENTS.indexOf(payload[0]) === -1);\n case PacketType.ACK:\n return Array.isArray(payload);\n case PacketType.CONNECT_ERROR:\n return typeof payload === \"string\" || isObject(payload);\n default:\n return false;\n }\n}\nexport function isPacketValid(packet) {\n return isNamespaceValid(packet.nsp) && isAckIdValid(packet.id) && isDataValid(packet.type, packet.data);\n}","const withNativeArrayBuffer = typeof ArrayBuffer === \"function\";\nconst isView = obj => {\n return typeof ArrayBuffer.isView === \"function\" ? ArrayBuffer.isView(obj) : obj.buffer instanceof ArrayBuffer;\n};\nconst toString = Object.prototype.toString;\nconst withNativeBlob = typeof Blob === \"function\" || typeof Blob !== \"undefined\" && toString.call(Blob) === \"[object BlobConstructor]\";\nconst withNativeFile = typeof File === \"function\" || typeof File !== \"undefined\" && toString.call(File) === \"[object FileConstructor]\";\n/**\n * Returns true if obj is a Buffer, an ArrayBuffer, a Blob or a File.\n *\n * @private\n */\nexport function isBinary(obj) {\n return withNativeArrayBuffer && (obj instanceof ArrayBuffer || isView(obj)) || withNativeBlob && obj instanceof Blob || withNativeFile && obj instanceof File;\n}\nexport function hasBinary(obj, toJSON) {\n if (!obj || typeof obj !== \"object\") {\n return false;\n }\n if (Array.isArray(obj)) {\n for (let i = 0, l = obj.length; i < l; i++) {\n if (hasBinary(obj[i])) {\n return true;\n }\n }\n return false;\n }\n if (isBinary(obj)) {\n return true;\n }\n if (obj.toJSON && typeof obj.toJSON === \"function\" && arguments.length === 1) {\n return hasBinary(obj.toJSON(), true);\n }\n for (const key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key) && hasBinary(obj[key])) {\n return true;\n }\n }\n return false;\n}","import { isBinary } from \"./is-binary.js\";\n/**\n * Replaces every Buffer | ArrayBuffer | Blob | File in packet with a numbered placeholder.\n *\n * @param {Object} packet - socket.io event packet\n * @return {Object} with deconstructed packet and list of buffers\n * @public\n */\nexport function deconstructPacket(packet) {\n const buffers = [];\n const packetData = packet.data;\n const pack = packet;\n pack.data = _deconstructPacket(packetData, buffers);\n pack.attachments = buffers.length; // number of binary 'attachments'\n return {\n packet: pack,\n buffers: buffers\n };\n}\nfunction _deconstructPacket(data, buffers) {\n if (!data) return data;\n if (isBinary(data)) {\n const placeholder = {\n _placeholder: true,\n num: buffers.length\n };\n buffers.push(data);\n return placeholder;\n } else if (Array.isArray(data)) {\n const newData = new Array(data.length);\n for (let i = 0; i < data.length; i++) {\n newData[i] = _deconstructPacket(data[i], buffers);\n }\n return newData;\n } else if (typeof data === \"object\" && !(data instanceof Date)) {\n const newData = {};\n for (const key in data) {\n if (Object.prototype.hasOwnProperty.call(data, key)) {\n newData[key] = _deconstructPacket(data[key], buffers);\n }\n }\n return newData;\n }\n return data;\n}\n/**\n * Reconstructs a binary packet from its placeholder packet and buffers\n *\n * @param {Object} packet - event packet with placeholders\n * @param {Array} buffers - binary buffers to put in placeholder positions\n * @return {Object} reconstructed packet\n * @public\n */\nexport function reconstructPacket(packet, buffers) {\n packet.data = _reconstructPacket(packet.data, buffers);\n delete packet.attachments; // no longer useful\n return packet;\n}\nfunction _reconstructPacket(data, buffers) {\n if (!data) return data;\n if (data && data._placeholder === true) {\n const isIndexValid = typeof data.num === \"number\" && data.num >= 0 && data.num < buffers.length;\n if (isIndexValid) {\n return buffers[data.num]; // appropriate buffer (should be natural order anyway)\n } else {\n throw new Error(\"illegal attachments\");\n }\n } else if (Array.isArray(data)) {\n for (let i = 0; i < data.length; i++) {\n data[i] = _reconstructPacket(data[i], buffers);\n }\n } else if (typeof data === \"object\") {\n for (const key in data) {\n if (Object.prototype.hasOwnProperty.call(data, key)) {\n data[key] = _reconstructPacket(data[key], buffers);\n }\n }\n }\n return data;\n}","export function on(obj, ev, fn) {\n obj.on(ev, fn);\n return function subDestroy() {\n obj.off(ev, fn);\n };\n}","import { PacketType } from \"socket.io-parser\";\nimport { on } from \"./on.js\";\nimport { Emitter } from \"@socket.io/component-emitter\";\n/**\n * Internal events.\n * These events can't be emitted by the user.\n */\nconst RESERVED_EVENTS = Object.freeze({\n connect: 1,\n connect_error: 1,\n disconnect: 1,\n disconnecting: 1,\n // EventEmitter reserved events: https://nodejs.org/api/events.html#events_event_newlistener\n newListener: 1,\n removeListener: 1\n});\n/**\n * A Socket is the fundamental class for interacting with the server.\n *\n * A Socket belongs to a certain Namespace (by default /) and uses an underlying {@link Manager} to communicate.\n *\n * @example\n * const socket = io();\n *\n * socket.on(\"connect\", () => {\n * console.log(\"connected\");\n * });\n *\n * // send an event to the server\n * socket.emit(\"foo\", \"bar\");\n *\n * socket.on(\"foobar\", () => {\n * // an event was received from the server\n * });\n *\n * // upon disconnection\n * socket.on(\"disconnect\", (reason) => {\n * console.log(`disconnected due to ${reason}`);\n * });\n */\nexport class Socket extends Emitter {\n /**\n * `Socket` constructor.\n */\n constructor(io, nsp, opts) {\n super();\n /**\n * Whether the socket is currently connected to the server.\n *\n * @example\n * const socket = io();\n *\n * socket.on(\"connect\", () => {\n * console.log(socket.connected); // true\n * });\n *\n * socket.on(\"disconnect\", () => {\n * console.log(socket.connected); // false\n * });\n */\n this.connected = false;\n /**\n * Whether the connection state was recovered after a temporary disconnection. In that case, any missed packets will\n * be transmitted by the server.\n */\n this.recovered = false;\n /**\n * Buffer for packets received before the CONNECT packet\n */\n this.receiveBuffer = [];\n /**\n * Buffer for packets that will be sent once the socket is connected\n */\n this.sendBuffer = [];\n /**\n * The queue of packets to be sent with retry in case of failure.\n *\n * Packets are sent one by one, each waiting for the server acknowledgement, in order to guarantee the delivery order.\n * @private\n */\n this._queue = [];\n /**\n * A sequence to generate the ID of the {@link QueuedPacket}.\n * @private\n */\n this._queueSeq = 0;\n this.ids = 0;\n /**\n * A map containing acknowledgement handlers.\n *\n * The `withError` attribute is used to differentiate handlers that accept an error as first argument:\n *\n * - `socket.emit(\"test\", (err, value) => { ... })` with `ackTimeout` option\n * - `socket.timeout(5000).emit(\"test\", (err, value) => { ... })`\n * - `const value = await socket.emitWithAck(\"test\")`\n *\n * From those that don't:\n *\n * - `socket.emit(\"test\", (value) => { ... });`\n *\n * In the first case, the handlers will be called with an error when:\n *\n * - the timeout is reached\n * - the socket gets disconnected\n *\n * In the second case, the handlers will be simply discarded upon disconnection, since the client will never receive\n * an acknowledgement from the server.\n *\n * @private\n */\n this.acks = {};\n this.flags = {};\n this.io = io;\n this.nsp = nsp;\n if (opts && opts.auth) {\n this.auth = opts.auth;\n }\n this._opts = Object.assign({}, opts);\n if (this.io._autoConnect) this.open();\n }\n /**\n * Whether the socket is currently disconnected\n *\n * @example\n * const socket = io();\n *\n * socket.on(\"connect\", () => {\n * console.log(socket.disconnected); // false\n * });\n *\n * socket.on(\"disconnect\", () => {\n * console.log(socket.disconnected); // true\n * });\n */\n get disconnected() {\n return !this.connected;\n }\n /**\n * Subscribe to open, close and packet events\n *\n * @private\n */\n subEvents() {\n if (this.subs) return;\n const io = this.io;\n this.subs = [on(io, \"open\", this.onopen.bind(this)), on(io, \"packet\", this.onpacket.bind(this)), on(io, \"error\", this.onerror.bind(this)), on(io, \"close\", this.onclose.bind(this))];\n }\n /**\n * Whether the Socket will try to reconnect when its Manager connects or reconnects.\n *\n * @example\n * const socket = io();\n *\n * console.log(socket.active); // true\n *\n * socket.on(\"disconnect\", (reason) => {\n * if (reason === \"io server disconnect\") {\n * // the disconnection was initiated by the server, you need to manually reconnect\n * console.log(socket.active); // false\n * }\n * // else the socket will automatically try to reconnect\n * console.log(socket.active); // true\n * });\n */\n get active() {\n return !!this.subs;\n }\n /**\n * \"Opens\" the socket.\n *\n * @example\n * const socket = io({\n * autoConnect: false\n * });\n *\n * socket.connect();\n */\n connect() {\n if (this.connected) return this;\n this.subEvents();\n if (!this.io[\"_reconnecting\"]) this.io.open(); // ensure open\n if (\"open\" === this.io._readyState) this.onopen();\n return this;\n }\n /**\n * Alias for {@link connect()}.\n */\n open() {\n return this.connect();\n }\n /**\n * Sends a `message` event.\n *\n * This method mimics the WebSocket.send() method.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket/send\n *\n * @example\n * socket.send(\"hello\");\n *\n * // this is equivalent to\n * socket.emit(\"message\", \"hello\");\n *\n * @return self\n */\n send(...args) {\n args.unshift(\"message\");\n this.emit.apply(this, args);\n return this;\n }\n /**\n * Override `emit`.\n * If the event is in `events`, it's emitted normally.\n *\n * @example\n * socket.emit(\"hello\", \"world\");\n *\n * // all serializable datastructures are supported (no need to call JSON.stringify)\n * socket.emit(\"hello\", 1, \"2\", { 3: [\"4\"], 5: Uint8Array.from([6]) });\n *\n * // with an acknowledgement from the server\n * socket.emit(\"hello\", \"world\", (val) => {\n * // ...\n * });\n *\n * @return self\n */\n emit(ev, ...args) {\n var _a, _b, _c;\n if (RESERVED_EVENTS.hasOwnProperty(ev)) {\n throw new Error('\"' + ev.toString() + '\" is a reserved event name');\n }\n args.unshift(ev);\n if (this._opts.retries && !this.flags.fromQueue && !this.flags.volatile) {\n this._addToQueue(args);\n return this;\n }\n const packet = {\n type: PacketType.EVENT,\n data: args\n };\n packet.options = {};\n packet.options.compress = this.flags.compress !== false;\n // event ack callback\n if (\"function\" === typeof args[args.length - 1]) {\n const id = this.ids++;\n const ack = args.pop();\n this._registerAckCallback(id, ack);\n packet.id = id;\n }\n const isTransportWritable = (_b = (_a = this.io.engine) === null || _a === void 0 ? void 0 : _a.transport) === null || _b === void 0 ? void 0 : _b.writable;\n const isConnected = this.connected && !((_c = this.io.engine) === null || _c === void 0 ? void 0 : _c._hasPingExpired());\n const discardPacket = this.flags.volatile && !isTransportWritable;\n if (discardPacket) {} else if (isConnected) {\n this.notifyOutgoingListeners(packet);\n this.packet(packet);\n } else {\n this.sendBuffer.push(packet);\n }\n this.flags = {};\n return this;\n }\n /**\n * @private\n */\n _registerAckCallback(id, ack) {\n var _a;\n const timeout = (_a = this.flags.timeout) !== null && _a !== void 0 ? _a : this._opts.ackTimeout;\n if (timeout === undefined) {\n this.acks[id] = ack;\n return;\n }\n // @ts-ignore\n const timer = this.io.setTimeoutFn(() => {\n delete this.acks[id];\n for (let i = 0; i < this.sendBuffer.length; i++) {\n if (this.sendBuffer[i].id === id) {\n this.sendBuffer.splice(i, 1);\n }\n }\n ack.call(this, new Error(\"operation has timed out\"));\n }, timeout);\n const fn = (...args) => {\n // @ts-ignore\n this.io.clearTimeoutFn(timer);\n ack.apply(this, args);\n };\n fn.withError = true;\n this.acks[id] = fn;\n }\n /**\n * Emits an event and waits for an acknowledgement\n *\n * @example\n * // without timeout\n * const response = await socket.emitWithAck(\"hello\", \"world\");\n *\n * // with a specific timeout\n * try {\n * const response = await socket.timeout(1000).emitWithAck(\"hello\", \"world\");\n * } catch (err) {\n * // the server did not acknowledge the event in the given delay\n * }\n *\n * @return a Promise that will be fulfilled when the server acknowledges the event\n */\n emitWithAck(ev, ...args) {\n return new Promise((resolve, reject) => {\n const fn = (arg1, arg2) => {\n return arg1 ? reject(arg1) : resolve(arg2);\n };\n fn.withError = true;\n args.push(fn);\n this.emit(ev, ...args);\n });\n }\n /**\n * Add the packet to the queue.\n * @param args\n * @private\n */\n _addToQueue(args) {\n let ack;\n if (typeof args[args.length - 1] === \"function\") {\n ack = args.pop();\n }\n const packet = {\n id: this._queueSeq++,\n tryCount: 0,\n pending: false,\n args,\n flags: Object.assign({\n fromQueue: true\n }, this.flags)\n };\n args.push((err, ...responseArgs) => {\n if (packet !== this._queue[0]) {}\n const hasError = err !== null;\n if (hasError) {\n if (packet.tryCount > this._opts.retries) {\n this._queue.shift();\n if (ack) {\n ack(err);\n }\n }\n } else {\n this._queue.shift();\n if (ack) {\n ack(null, ...responseArgs);\n }\n }\n packet.pending = false;\n return this._drainQueue();\n });\n this._queue.push(packet);\n this._drainQueue();\n }\n /**\n * Send the first packet of the queue, and wait for an acknowledgement from the server.\n * @param force - whether to resend a packet that has not been acknowledged yet\n *\n * @private\n */\n _drainQueue(force = false) {\n if (!this.connected || this._queue.length === 0) {\n return;\n }\n const packet = this._queue[0];\n if (packet.pending && !force) {\n return;\n }\n packet.pending = true;\n packet.tryCount++;\n this.flags = packet.flags;\n this.emit.apply(this, packet.args);\n }\n /**\n * Sends a packet.\n *\n * @param packet\n * @private\n */\n packet(packet) {\n packet.nsp = this.nsp;\n this.io._packet(packet);\n }\n /**\n * Called upon engine `open`.\n *\n * @private\n */\n onopen() {\n if (typeof this.auth == \"function\") {\n this.auth(data => {\n this._sendConnectPacket(data);\n });\n } else {\n this._sendConnectPacket(this.auth);\n }\n }\n /**\n * Sends a CONNECT packet to initiate the Socket.IO session.\n *\n * @param data\n * @private\n */\n _sendConnectPacket(data) {\n this.packet({\n type: PacketType.CONNECT,\n data: this._pid ? Object.assign({\n pid: this._pid,\n offset: this._lastOffset\n }, data) : data\n });\n }\n /**\n * Called upon engine or manager `error`.\n *\n * @param err\n * @private\n */\n onerror(err) {\n if (!this.connected) {\n this.emitReserved(\"connect_error\", err);\n }\n }\n /**\n * Called upon engine `close`.\n *\n * @param reason\n * @param description\n * @private\n */\n onclose(reason, description) {\n this.connected = false;\n delete this.id;\n this.emitReserved(\"disconnect\", reason, description);\n this._clearAcks();\n }\n /**\n * Clears the acknowledgement handlers upon disconnection, since the client will never receive an acknowledgement from\n * the server.\n *\n * @private\n */\n _clearAcks() {\n Object.keys(this.acks).forEach(id => {\n const isBuffered = this.sendBuffer.some(packet => String(packet.id) === id);\n if (!isBuffered) {\n // note: handlers that do not accept an error as first argument are ignored here\n const ack = this.acks[id];\n delete this.acks[id];\n if (ack.withError) {\n ack.call(this, new Error(\"socket has been disconnected\"));\n }\n }\n });\n }\n /**\n * Called with socket packet.\n *\n * @param packet\n * @private\n */\n onpacket(packet) {\n const sameNamespace = packet.nsp === this.nsp;\n if (!sameNamespace) return;\n switch (packet.type) {\n case PacketType.CONNECT:\n if (packet.data && packet.data.sid) {\n this.onconnect(packet.data.sid, packet.data.pid);\n } else {\n this.emitReserved(\"connect_error\", new Error(\"It seems you are trying to reach a Socket.IO server in v2.x with a v3.x client, but they are not compatible (more information here: https://socket.io/docs/v3/migrating-from-2-x-to-3-0/)\"));\n }\n break;\n case PacketType.EVENT:\n case PacketType.BINARY_EVENT:\n this.onevent(packet);\n break;\n case PacketType.ACK:\n case PacketType.BINARY_ACK:\n this.onack(packet);\n break;\n case PacketType.DISCONNECT:\n this.ondisconnect();\n break;\n case PacketType.CONNECT_ERROR:\n this.destroy();\n const err = new Error(packet.data.message);\n // @ts-ignore\n err.data = packet.data.data;\n this.emitReserved(\"connect_error\", err);\n break;\n }\n }\n /**\n * Called upon a server event.\n *\n * @param packet\n * @private\n */\n onevent(packet) {\n const args = packet.data || [];\n if (null != packet.id) {\n args.push(this.ack(packet.id));\n }\n if (this.connected) {\n this.emitEvent(args);\n } else {\n this.receiveBuffer.push(Object.freeze(args));\n }\n }\n emitEvent(args) {\n if (this._anyListeners && this._anyListeners.length) {\n const listeners = this._anyListeners.slice();\n for (const listener of listeners) {\n listener.apply(this, args);\n }\n }\n super.emit.apply(this, args);\n if (this._pid && args.length && typeof args[args.length - 1] === \"string\") {\n this._lastOffset = args[args.length - 1];\n }\n }\n /**\n * Produces an ack callback to emit with an event.\n *\n * @private\n */\n ack(id) {\n const self = this;\n let sent = false;\n return function (...args) {\n // prevent double callbacks\n if (sent) return;\n sent = true;\n self.packet({\n type: PacketType.ACK,\n id: id,\n data: args\n });\n };\n }\n /**\n * Called upon a server acknowledgement.\n *\n * @param packet\n * @private\n */\n onack(packet) {\n const ack = this.acks[packet.id];\n if (typeof ack !== \"function\") {\n return;\n }\n delete this.acks[packet.id];\n // @ts-ignore FIXME ack is incorrectly inferred as 'never'\n if (ack.withError) {\n packet.data.unshift(null);\n }\n // @ts-ignore\n ack.apply(this, packet.data);\n }\n /**\n * Called upon server connect.\n *\n * @private\n */\n onconnect(id, pid) {\n this.id = id;\n this.recovered = pid && this._pid === pid;\n this._pid = pid; // defined only if connection state recovery is enabled\n this.connected = true;\n this.emitBuffered();\n this._drainQueue(true);\n this.emitReserved(\"connect\");\n }\n /**\n * Emit buffered events (received and emitted).\n *\n * @private\n */\n emitBuffered() {\n this.receiveBuffer.forEach(args => this.emitEvent(args));\n this.receiveBuffer = [];\n this.sendBuffer.forEach(packet => {\n this.notifyOutgoingListeners(packet);\n this.packet(packet);\n });\n this.sendBuffer = [];\n }\n /**\n * Called upon server disconnect.\n *\n * @private\n */\n ondisconnect() {\n this.destroy();\n this.onclose(\"io server disconnect\");\n }\n /**\n * Called upon forced client/server side disconnections,\n * this method ensures the manager stops tracking us and\n * that reconnections don't get triggered for this.\n *\n * @private\n */\n destroy() {\n if (this.subs) {\n // clean subscriptions to avoid reconnections\n this.subs.forEach(subDestroy => subDestroy());\n this.subs = undefined;\n }\n this.io[\"_destroy\"](this);\n }\n /**\n * Disconnects the socket manually. In that case, the socket will not try to reconnect.\n *\n * If this is the last active Socket instance of the {@link Manager}, the low-level connection will be closed.\n *\n * @example\n * const socket = io();\n *\n * socket.on(\"disconnect\", (reason) => {\n * // console.log(reason); prints \"io client disconnect\"\n * });\n *\n * socket.disconnect();\n *\n * @return self\n */\n disconnect() {\n if (this.connected) {\n this.packet({\n type: PacketType.DISCONNECT\n });\n }\n // remove socket from pool\n this.destroy();\n if (this.connected) {\n // fire events\n this.onclose(\"io client disconnect\");\n }\n return this;\n }\n /**\n * Alias for {@link disconnect()}.\n *\n * @return self\n */\n close() {\n return this.disconnect();\n }\n /**\n * Sets the compress flag.\n *\n * @example\n * socket.compress(false).emit(\"hello\");\n *\n * @param compress - if `true`, compresses the sending data\n * @return self\n */\n compress(compress) {\n this.flags.compress = compress;\n return this;\n }\n /**\n * Sets a modifier for a subsequent event emission that the event message will be dropped when this socket is not\n * ready to send messages.\n *\n * @example\n * socket.volatile.emit(\"hello\"); // the server may or may not receive it\n *\n * @returns self\n */\n get volatile() {\n this.flags.volatile = true;\n return this;\n }\n /**\n * Sets a modifier for a subsequent event emission that the callback will be called with an error when the\n * given number of milliseconds have elapsed without an acknowledgement from the server:\n *\n * @example\n * socket.timeout(5000).emit(\"my-event\", (err) => {\n * if (err) {\n * // the server did not acknowledge the event in the given delay\n * }\n * });\n *\n * @returns self\n */\n timeout(timeout) {\n this.flags.timeout = timeout;\n return this;\n }\n /**\n * Adds a listener that will be fired when any event is emitted. The event name is passed as the first argument to the\n * callback.\n *\n * @example\n * socket.onAny((event, ...args) => {\n * console.log(`got ${event}`);\n * });\n *\n * @param listener\n */\n onAny(listener) {\n this._anyListeners = this._anyListeners || [];\n this._anyListeners.push(listener);\n return this;\n }\n /**\n * Adds a listener that will be fired when any event is emitted. The event name is passed as the first argument to the\n * callback. The listener is added to the beginning of the listeners array.\n *\n * @example\n * socket.prependAny((event, ...args) => {\n * console.log(`got event ${event}`);\n * });\n *\n * @param listener\n */\n prependAny(listener) {\n this._anyListeners = this._anyListeners || [];\n this._anyListeners.unshift(listener);\n return this;\n }\n /**\n * Removes the listener that will be fired when any event is emitted.\n *\n * @example\n * const catchAllListener = (event, ...args) => {\n * console.log(`got event ${event}`);\n * }\n *\n * socket.onAny(catchAllListener);\n *\n * // remove a specific listener\n * socket.offAny(catchAllListener);\n *\n * // or remove all listeners\n * socket.offAny();\n *\n * @param listener\n */\n offAny(listener) {\n if (!this._anyListeners) {\n return this;\n }\n if (listener) {\n const listeners = this._anyListeners;\n for (let i = 0; i < listeners.length; i++) {\n if (listener === listeners[i]) {\n listeners.splice(i, 1);\n return this;\n }\n }\n } else {\n this._anyListeners = [];\n }\n return this;\n }\n /**\n * Returns an array of listeners that are listening for any event that is specified. This array can be manipulated,\n * e.g. to remove listeners.\n */\n listenersAny() {\n return this._anyListeners || [];\n }\n /**\n * Adds a listener that will be fired when any event is emitted. The event name is passed as the first argument to the\n * callback.\n *\n * Note: acknowledgements sent to the server are not included.\n *\n * @example\n * socket.onAnyOutgoing((event, ...args) => {\n * console.log(`sent event ${event}`);\n * });\n *\n * @param listener\n */\n onAnyOutgoing(listener) {\n this._anyOutgoingListeners = this._anyOutgoingListeners || [];\n this._anyOutgoingListeners.push(listener);\n return this;\n }\n /**\n * Adds a listener that will be fired when any event is emitted. The event name is passed as the first argument to the\n * callback. The listener is added to the beginning of the listeners array.\n *\n * Note: acknowledgements sent to the server are not included.\n *\n * @example\n * socket.prependAnyOutgoing((event, ...args) => {\n * console.log(`sent event ${event}`);\n * });\n *\n * @param listener\n */\n prependAnyOutgoing(listener) {\n this._anyOutgoingListeners = this._anyOutgoingListeners || [];\n this._anyOutgoingListeners.unshift(listener);\n return this;\n }\n /**\n * Removes the listener that will be fired when any event is emitted.\n *\n * @example\n * const catchAllListener = (event, ...args) => {\n * console.log(`sent event ${event}`);\n * }\n *\n * socket.onAnyOutgoing(catchAllListener);\n *\n * // remove a specific listener\n * socket.offAnyOutgoing(catchAllListener);\n *\n * // or remove all listeners\n * socket.offAnyOutgoing();\n *\n * @param [listener] - the catch-all listener (optional)\n */\n offAnyOutgoing(listener) {\n if (!this._anyOutgoingListeners) {\n return this;\n }\n if (listener) {\n const listeners = this._anyOutgoingListeners;\n for (let i = 0; i < listeners.length; i++) {\n if (listener === listeners[i]) {\n listeners.splice(i, 1);\n return this;\n }\n }\n } else {\n this._anyOutgoingListeners = [];\n }\n return this;\n }\n /**\n * Returns an array of listeners that are listening for any event that is specified. This array can be manipulated,\n * e.g. to remove listeners.\n */\n listenersAnyOutgoing() {\n return this._anyOutgoingListeners || [];\n }\n /**\n * Notify the listeners for each packet sent\n *\n * @param packet\n *\n * @private\n */\n notifyOutgoingListeners(packet) {\n if (this._anyOutgoingListeners && this._anyOutgoingListeners.length) {\n const listeners = this._anyOutgoingListeners.slice();\n for (const listener of listeners) {\n listener.apply(this, packet.data);\n }\n }\n }\n}","/**\n * Initialize backoff timer with `opts`.\n *\n * - `min` initial timeout in milliseconds [100]\n * - `max` max timeout [10000]\n * - `jitter` [0]\n * - `factor` [2]\n *\n * @param {Object} opts\n * @api public\n */\nexport function Backoff(opts) {\n opts = opts || {};\n this.ms = opts.min || 100;\n this.max = opts.max || 10000;\n this.factor = opts.factor || 2;\n this.jitter = opts.jitter > 0 && opts.jitter <= 1 ? opts.jitter : 0;\n this.attempts = 0;\n}\n/**\n * Return the backoff duration.\n *\n * @return {Number}\n * @api public\n */\nBackoff.prototype.duration = function () {\n var ms = this.ms * Math.pow(this.factor, this.attempts++);\n if (this.jitter) {\n var rand = Math.random();\n var deviation = Math.floor(rand * this.jitter * ms);\n ms = (Math.floor(rand * 10) & 1) == 0 ? ms - deviation : ms + deviation;\n }\n return Math.min(ms, this.max) | 0;\n};\n/**\n * Reset the number of attempts.\n *\n * @api public\n */\nBackoff.prototype.reset = function () {\n this.attempts = 0;\n};\n/**\n * Set the minimum duration\n *\n * @api public\n */\nBackoff.prototype.setMin = function (min) {\n this.ms = min;\n};\n/**\n * Set the maximum duration\n *\n * @api public\n */\nBackoff.prototype.setMax = function (max) {\n this.max = max;\n};\n/**\n * Set the jitter\n *\n * @api public\n */\nBackoff.prototype.setJitter = function (jitter) {\n this.jitter = jitter;\n};","import { Socket as Engine, installTimerFunctions, nextTick } from \"engine.io-client\";\nimport { Socket } from \"./socket.js\";\nimport * as parser from \"socket.io-parser\";\nimport { on } from \"./on.js\";\nimport { Backoff } from \"./contrib/backo2.js\";\nimport { Emitter } from \"@socket.io/component-emitter\";\nexport class Manager extends Emitter {\n constructor(uri, opts) {\n var _a;\n super();\n this.nsps = {};\n this.subs = [];\n if (uri && \"object\" === typeof uri) {\n opts = uri;\n uri = undefined;\n }\n opts = opts || {};\n opts.path = opts.path || \"/socket.io\";\n this.opts = opts;\n installTimerFunctions(this, opts);\n this.reconnection(opts.reconnection !== false);\n this.reconnectionAttempts(opts.reconnectionAttempts || Infinity);\n this.reconnectionDelay(opts.reconnectionDelay || 1000);\n this.reconnectionDelayMax(opts.reconnectionDelayMax || 5000);\n this.randomizationFactor((_a = opts.randomizationFactor) !== null && _a !== void 0 ? _a : 0.5);\n this.backoff = new Backoff({\n min: this.reconnectionDelay(),\n max: this.reconnectionDelayMax(),\n jitter: this.randomizationFactor()\n });\n this.timeout(null == opts.timeout ? 20000 : opts.timeout);\n this._readyState = \"closed\";\n this.uri = uri;\n const _parser = opts.parser || parser;\n this.encoder = new _parser.Encoder();\n this.decoder = new _parser.Decoder();\n this._autoConnect = opts.autoConnect !== false;\n if (this._autoConnect) this.open();\n }\n reconnection(v) {\n if (!arguments.length) return this._reconnection;\n this._reconnection = !!v;\n if (!v) {\n this.skipReconnect = true;\n }\n return this;\n }\n reconnectionAttempts(v) {\n if (v === undefined) return this._reconnectionAttempts;\n this._reconnectionAttempts = v;\n return this;\n }\n reconnectionDelay(v) {\n var _a;\n if (v === undefined) return this._reconnectionDelay;\n this._reconnectionDelay = v;\n (_a = this.backoff) === null || _a === void 0 ? void 0 : _a.setMin(v);\n return this;\n }\n randomizationFactor(v) {\n var _a;\n if (v === undefined) return this._randomizationFactor;\n this._randomizationFactor = v;\n (_a = this.backoff) === null || _a === void 0 ? void 0 : _a.setJitter(v);\n return this;\n }\n reconnectionDelayMax(v) {\n var _a;\n if (v === undefined) return this._reconnectionDelayMax;\n this._reconnectionDelayMax = v;\n (_a = this.backoff) === null || _a === void 0 ? void 0 : _a.setMax(v);\n return this;\n }\n timeout(v) {\n if (!arguments.length) return this._timeout;\n this._timeout = v;\n return this;\n }\n /**\n * Starts trying to reconnect if reconnection is enabled and we have not\n * started reconnecting yet\n *\n * @private\n */\n maybeReconnectOnOpen() {\n // Only try to reconnect if it's the first time we're connecting\n if (!this._reconnecting && this._reconnection && this.backoff.attempts === 0) {\n // keeps reconnection from firing twice for the same reconnection loop\n this.reconnect();\n }\n }\n /**\n * Sets the current transport `socket`.\n *\n * @param {Function} fn - optional, callback\n * @return self\n * @public\n */\n open(fn) {\n if (~this._readyState.indexOf(\"open\")) return this;\n this.engine = new Engine(this.uri, this.opts);\n const socket = this.engine;\n const self = this;\n this._readyState = \"opening\";\n this.skipReconnect = false;\n // emit `open`\n const openSubDestroy = on(socket, \"open\", function () {\n self.onopen();\n fn && fn();\n });\n const onError = err => {\n this.cleanup();\n this._readyState = \"closed\";\n this.emitReserved(\"error\", err);\n if (fn) {\n fn(err);\n } else {\n // Only do this if there is no fn to handle the error\n this.maybeReconnectOnOpen();\n }\n };\n // emit `error`\n const errorSub = on(socket, \"error\", onError);\n if (false !== this._timeout) {\n const timeout = this._timeout;\n // set timer\n const timer = this.setTimeoutFn(() => {\n openSubDestroy();\n onError(new Error(\"timeout\"));\n socket.close();\n }, timeout);\n if (this.opts.autoUnref) {\n timer.unref();\n }\n this.subs.push(() => {\n this.clearTimeoutFn(timer);\n });\n }\n this.subs.push(openSubDestroy);\n this.subs.push(errorSub);\n return this;\n }\n /**\n * Alias for open()\n *\n * @return self\n * @public\n */\n connect(fn) {\n return this.open(fn);\n }\n /**\n * Called upon transport open.\n *\n * @private\n */\n onopen() {\n // clear old subs\n this.cleanup();\n // mark as open\n this._readyState = \"open\";\n this.emitReserved(\"open\");\n // add new subs\n const socket = this.engine;\n this.subs.push(on(socket, \"ping\", this.onping.bind(this)), on(socket, \"data\", this.ondata.bind(this)), on(socket, \"error\", this.onerror.bind(this)), on(socket, \"close\", this.onclose.bind(this)),\n // @ts-ignore\n on(this.decoder, \"decoded\", this.ondecoded.bind(this)));\n }\n /**\n * Called upon a ping.\n *\n * @private\n */\n onping() {\n this.emitReserved(\"ping\");\n }\n /**\n * Called with data.\n *\n * @private\n */\n ondata(data) {\n try {\n this.decoder.add(data);\n } catch (e) {\n this.onclose(\"parse error\", e);\n }\n }\n /**\n * Called when parser fully decodes a packet.\n *\n * @private\n */\n ondecoded(packet) {\n // the nextTick call prevents an exception in a user-provided event listener from triggering a disconnection due to a \"parse error\"\n nextTick(() => {\n this.emitReserved(\"packet\", packet);\n }, this.setTimeoutFn);\n }\n /**\n * Called upon socket error.\n *\n * @private\n */\n onerror(err) {\n this.emitReserved(\"error\", err);\n }\n /**\n * Creates a new socket for the given `nsp`.\n *\n * @return {Socket}\n * @public\n */\n socket(nsp, opts) {\n let socket = this.nsps[nsp];\n if (!socket) {\n socket = new Socket(this, nsp, opts);\n this.nsps[nsp] = socket;\n } else if (this._autoConnect && !socket.active) {\n socket.connect();\n }\n return socket;\n }\n /**\n * Called upon a socket close.\n *\n * @param socket\n * @private\n */\n _destroy(socket) {\n const nsps = Object.keys(this.nsps);\n for (const nsp of nsps) {\n const socket = this.nsps[nsp];\n if (socket.active) {\n return;\n }\n }\n this._close();\n }\n /**\n * Writes a packet.\n *\n * @param packet\n * @private\n */\n _packet(packet) {\n const encodedPackets = this.encoder.encode(packet);\n for (let i = 0; i < encodedPackets.length; i++) {\n this.engine.write(encodedPackets[i], packet.options);\n }\n }\n /**\n * Clean up transport subscriptions and packet buffer.\n *\n * @private\n */\n cleanup() {\n this.subs.forEach(subDestroy => subDestroy());\n this.subs.length = 0;\n this.decoder.destroy();\n }\n /**\n * Close the current socket.\n *\n * @private\n */\n _close() {\n this.skipReconnect = true;\n this._reconnecting = false;\n this.onclose(\"forced close\");\n }\n /**\n * Alias for close()\n *\n * @private\n */\n disconnect() {\n return this._close();\n }\n /**\n * Called when:\n *\n * - the low-level engine is closed\n * - the parser encountered a badly formatted packet\n * - all sockets are disconnected\n *\n * @private\n */\n onclose(reason, description) {\n var _a;\n this.cleanup();\n (_a = this.engine) === null || _a === void 0 ? void 0 : _a.close();\n this.backoff.reset();\n this._readyState = \"closed\";\n this.emitReserved(\"close\", reason, description);\n if (this._reconnection && !this.skipReconnect) {\n this.reconnect();\n }\n }\n /**\n * Attempt a reconnection.\n *\n * @private\n */\n reconnect() {\n if (this._reconnecting || this.skipReconnect) return this;\n const self = this;\n if (this.backoff.attempts >= this._reconnectionAttempts) {\n this.backoff.reset();\n this.emitReserved(\"reconnect_failed\");\n this._reconnecting = false;\n } else {\n const delay = this.backoff.duration();\n this._reconnecting = true;\n const timer = this.setTimeoutFn(() => {\n if (self.skipReconnect) return;\n this.emitReserved(\"reconnect_attempt\", self.backoff.attempts);\n // check again for the case socket closed in above events\n if (self.skipReconnect) return;\n self.open(err => {\n if (err) {\n self._reconnecting = false;\n self.reconnect();\n this.emitReserved(\"reconnect_error\", err);\n } else {\n self.onreconnect();\n }\n });\n }, delay);\n if (this.opts.autoUnref) {\n timer.unref();\n }\n this.subs.push(() => {\n this.clearTimeoutFn(timer);\n });\n }\n }\n /**\n * Called upon successful reconnect.\n *\n * @private\n */\n onreconnect() {\n const attempt = this.backoff.attempts;\n this._reconnecting = false;\n this.backoff.reset();\n this.emitReserved(\"reconnect\", attempt);\n }\n}","import { url } from \"./url.js\";\nimport { Manager } from \"./manager.js\";\nimport { Socket } from \"./socket.js\";\n/**\n * Managers cache.\n */\nconst cache = {};\nfunction lookup(uri, opts) {\n if (typeof uri === \"object\") {\n opts = uri;\n uri = undefined;\n }\n opts = opts || {};\n const parsed = url(uri, opts.path || \"/socket.io\");\n const source = parsed.source;\n const id = parsed.id;\n const path = parsed.path;\n const sameNamespace = cache[id] && path in cache[id][\"nsps\"];\n const newConnection = opts.forceNew || opts[\"force new connection\"] || false === opts.multiplex || sameNamespace;\n let io;\n if (newConnection) {\n io = new Manager(source, opts);\n } else {\n if (!cache[id]) {\n cache[id] = new Manager(source, opts);\n }\n io = cache[id];\n }\n if (parsed.query && !opts.query) {\n opts.query = parsed.queryKey;\n }\n return io.socket(parsed.path, opts);\n}\n// so that \"lookup\" can be used both as a function (e.g. `io(...)`) and as a\n// namespace (e.g. `io.connect(...)`), for backward compatibility\nObject.assign(lookup, {\n Manager,\n Socket,\n io: lookup,\n connect: lookup\n});\n/**\n * Protocol version.\n *\n * @public\n */\nexport { protocol } from \"socket.io-parser\";\n/**\n * Expose constructors for standalone build.\n *\n * @public\n */\nexport { Manager, Socket, lookup as io, lookup as connect, lookup as default };\nexport { Fetch, NodeXHR, XHR, NodeWebSocket, WebSocket, WebTransport } from \"engine.io-client\";","export enum ConnectionStatus {\n CONNECTED = 'CONNECTED',\n DISCONNECTED = 'DISCONNECTED',\n RECONNECTING = 'RECONNECTING',\n}\n","import { Injectable, InjectionToken, inject } from '@angular/core';\nimport { BackendResolvedPayload, BackendTriggeredPayload } from '../models/realtime-alarm-event.model';\n\nexport interface RealtimeAlarmEventNormalizerPort {\n\tparseBackendTriggeredPayload(payload: unknown): BackendTriggeredPayload | null;\n\tparseBackendResolvedPayload(payload: unknown): BackendResolvedPayload | null;\n}\n\nexport const REALTIME_ALARM_EVENT_NORMALIZER = new InjectionToken(\n\t'REALTIME_ALARM_EVENT_NORMALIZER',\n\t{\n\t\tprovidedIn: 'root',\n\t\tfactory: () => inject(RealtimeAlarmEventNormalizerService),\n\t}\n);\n\n@Injectable({ providedIn: 'root' })\nexport class RealtimeAlarmEventNormalizerService implements RealtimeAlarmEventNormalizerPort {\n\tpublic parseBackendTriggeredPayload(payload: unknown): BackendTriggeredPayload | null {\n\t\tif (!this.isObject(payload)) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst alarmEventId = payload['alarmEventId'];\n\t\tconst wardId = payload['wardId'];\n\t\tconst alarmRuleId = payload['alarmRuleId'];\n\t\tconst normalizedWardId = this.parseWardId(wardId);\n\n\t\tif (\n\t\t\ttypeof alarmEventId !== 'string' ||\n\t\t\tnormalizedWardId === null ||\n\t\t\ttypeof alarmRuleId !== 'string'\n\t\t) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn {\n\t\t\talarmEventId,\n\t\t\twardId: normalizedWardId,\n\t\t\talarmRuleId,\n\t\t};\n\t}\n\n\tpublic parseBackendResolvedPayload(payload: unknown): BackendResolvedPayload | null {\n\t\tif (!this.isObject(payload)) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst alarmEventId = payload['alarmEventId'];\n\t\tconst wardId = payload['wardId'];\n\t\tconst normalizedWardId = this.parseWardId(wardId);\n\n\t\tif (typeof alarmEventId !== 'string') {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn {\n\t\t\talarmEventId,\n\t\t\twardId: normalizedWardId ?? undefined,\n\t\t};\n\t}\n\n\tprivate isObject(value: unknown): value is Record {\n\t\treturn typeof value === 'object' && value !== null;\n\t}\n\n\tprivate parseWardId(value: unknown): number | null {\n\t\tif (typeof value === 'number' && Number.isInteger(value)) {\n\t\t\treturn value;\n\t\t}\n\n\t\tif (typeof value !== 'string') {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst trimmed = value.trim();\n\t\tif (!trimmed) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst parsed = Number(trimmed);\n\t\treturn Number.isInteger(parsed) ? parsed : null;\n\t}\n}\n","import { Injectable, InjectionToken, inject } from '@angular/core';\nimport { AlarmStateService } from './alarm-state.service';\nimport {\n\tAlarmLifecycleType,\n\tAlarmLifecycleUpdateDetail,\n\tALARM_LIFECYCLE_UPDATED_EVENT,\n} from '../models/realtime-alarm-event.model';\nimport {\n\tDEFAULT_RESOLVED_NOTIFICATION_TITLE,\n\tDEFAULT_TRIGGERED_NOTIFICATION_TITLE,\n\tformatTriggeredNotificationTitle,\n} from '../../notification/utils/notification-title.util';\n\nexport interface AlarmNotificationDetails {\n\talarmName?: string;\n\tpriority?: unknown;\n}\n\nexport interface AlarmLifecycleNotifierPort {\n\tpublish(\n\t\ttype: AlarmLifecycleType,\n\t\talarmEventId: string,\n\t\ttimestamp: string,\n\t\tdetails?: AlarmNotificationDetails\n\t): void;\n}\n\nexport const ALARM_LIFECYCLE_NOTIFIER = new InjectionToken(\n\t'ALARM_LIFECYCLE_NOTIFIER',\n\t{\n\t\tprovidedIn: 'root',\n\t\tfactory: () => inject(AlarmLifecycleNotifierService),\n\t}\n);\n\n@Injectable({ providedIn: 'root' })\nexport class AlarmLifecycleNotifierService implements AlarmLifecycleNotifierPort {\n\tprivate readonly alarmStateService = inject(AlarmStateService);\n\n\tpublic publish(\n\t\ttype: AlarmLifecycleType,\n\t\talarmEventId: string,\n\t\ttimestamp: string,\n\t\tdetails?: AlarmNotificationDetails\n\t): void {\n\t\tthis.publishNotification(type, alarmEventId, timestamp, details);\n\t\tthis.publishLifecycleUpdate(type, alarmEventId);\n\t}\n\n\tprivate publishNotification(\n\t\ttype: AlarmLifecycleType,\n\t\talarmEventId: string,\n\t\ttimestamp: string,\n\t\tdetails?: AlarmNotificationDetails\n\t): void {\n\t\tconst title =\n\t\t\ttype === 'triggered'\n\t\t\t\t? formatTriggeredNotificationTitle(details?.alarmName, details?.priority) ||\n\t\t\t\t\tDEFAULT_TRIGGERED_NOTIFICATION_TITLE\n\t\t\t\t: DEFAULT_RESOLVED_NOTIFICATION_TITLE;\n\n\t\tthis.alarmStateService.onNotificationReceived({\n\t\t\tnotificationId: `alarm-${type}-${alarmEventId}`,\n\t\t\ttitle,\n\t\t\tsentAt: timestamp,\n\t\t\teventType: type,\n\t\t});\n\t}\n\n\tprivate publishLifecycleUpdate(type: AlarmLifecycleType, alarmEventId: string): void {\n\t\tif (typeof globalThis.dispatchEvent !== 'function') {\n\t\t\treturn;\n\t\t}\n\n\t\tif (typeof CustomEvent === 'function') {\n\t\t\tglobalThis.dispatchEvent(\n\t\t\t\tnew CustomEvent(ALARM_LIFECYCLE_UPDATED_EVENT, {\n\t\t\t\t\tdetail: {\n\t\t\t\t\t\ttype,\n\t\t\t\t\t\talarmEventId,\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\tglobalThis.dispatchEvent(new Event(ALARM_LIFECYCLE_UPDATED_EVENT));\n\t}\n}\n","import { Injectable, InjectionToken, inject } from '@angular/core';\nimport { WardRealtimeCacheService } from './ward-realtime-cache.service';\n\nexport interface UserActivationActions {\n\troomsToLeave: string[];\n\troomsToJoin: string[];\n}\n\nexport interface WardSocketRoomCoordinatorPort {\n\tactivateUser(userId: string): UserActivationActions;\n\tdeactivateUser(): string[];\n\trequestJoinRoom(wardId: string): string | null;\n\trequestLeaveRoom(wardId: string): string | null;\n\tgetJoinedRooms(): string[];\n\tresetRuntimeState(): void;\n}\n\nexport const WARD_SOCKET_ROOM_COORDINATOR = new InjectionToken(\n\t'WARD_SOCKET_ROOM_COORDINATOR',\n\t{\n\t\tprovidedIn: 'root',\n\t\tfactory: () => inject(WardSocketRoomCoordinatorService),\n\t}\n);\n\n@Injectable({ providedIn: 'root' })\nexport class WardSocketRoomCoordinatorService implements WardSocketRoomCoordinatorPort {\n\tprivate readonly wardRealtimeCache = inject(WardRealtimeCacheService, { optional: true });\n\n\tprivate readonly joinedRooms = new Set();\n\tprivate currentUserId: string | null = null;\n\n\tpublic activateUser(userId: string): UserActivationActions {\n\t\tconst normalizedUserId = userId.trim();\n\t\tif (!normalizedUserId) {\n\t\t\treturn { roomsToLeave: [], roomsToJoin: [] };\n\t\t}\n\n\t\tconst roomsToLeave =\n\t\t\tthis.currentUserId && this.currentUserId !== normalizedUserId\n\t\t\t\t? Array.from(this.joinedRooms.values())\n\t\t\t\t: [];\n\n\t\tif (roomsToLeave.length > 0) {\n\t\t\tthis.joinedRooms.clear();\n\t\t}\n\n\t\tthis.currentUserId = normalizedUserId;\n\n\t\tconst cachedWardIds = this.wardRealtimeCache?.getWardIds(normalizedUserId) ?? [];\n\t\tconst roomsToJoin: string[] = [];\n\n\t\tfor (const cachedWardId of cachedWardIds) {\n\t\t\tif (this.joinedRooms.has(cachedWardId)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tthis.joinedRooms.add(cachedWardId);\n\t\t\troomsToJoin.push(cachedWardId);\n\t\t}\n\n\t\tthis.persistJoinedRooms();\n\n\t\treturn { roomsToLeave, roomsToJoin };\n\t}\n\n\tpublic deactivateUser(): string[] {\n\t\tif (this.currentUserId && this.wardRealtimeCache) {\n\t\t\tthis.wardRealtimeCache.clearWardIds(this.currentUserId);\n\t\t}\n\n\t\tthis.currentUserId = null;\n\t\tconst roomsToLeave = Array.from(this.joinedRooms.values());\n\t\tthis.joinedRooms.clear();\n\t\treturn roomsToLeave;\n\t}\n\n\tpublic requestJoinRoom(wardId: string): string | null {\n\t\tconst normalizedWardId = wardId.trim();\n\t\tif (!normalizedWardId || this.joinedRooms.has(normalizedWardId)) {\n\t\t\treturn null;\n\t\t}\n\n\t\tthis.joinedRooms.add(normalizedWardId);\n\t\tthis.persistJoinedRooms();\n\t\treturn normalizedWardId;\n\t}\n\n\tpublic requestLeaveRoom(wardId: string): string | null {\n\t\tconst normalizedWardId = wardId.trim();\n\t\tif (!normalizedWardId || !this.joinedRooms.has(normalizedWardId)) {\n\t\t\treturn null;\n\t\t}\n\n\t\tthis.joinedRooms.delete(normalizedWardId);\n\t\tthis.persistJoinedRooms();\n\t\treturn normalizedWardId;\n\t}\n\n\tpublic getJoinedRooms(): string[] {\n\t\treturn Array.from(this.joinedRooms.values());\n\t}\n\n\tpublic resetRuntimeState(): void {\n\t\tthis.currentUserId = null;\n\t\tthis.joinedRooms.clear();\n\t}\n\n\tprivate persistJoinedRooms(): void {\n\t\tif (!this.currentUserId || !this.wardRealtimeCache) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.wardRealtimeCache.setWardIds(this.currentUserId, Array.from(this.joinedRooms.values()));\n\t}\n}\n","import { Injectable, InjectionToken, OnDestroy, inject } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport {\n\tBehaviorSubject,\n\tObservable,\n\tSubject,\n\tcatchError,\n\tfinalize,\n\tfromEvent,\n\tmap,\n\tof,\n\ttakeUntil,\n} from 'rxjs';\nimport { io, Socket } from 'socket.io-client';\nimport { AlarmPriority } from '../models/alarm-priority.enum';\nimport { ConnectionStatus } from '../models/connection-status.enum';\nimport { AlarmStateService } from './alarm-state.service';\nimport { API_BASE_URL } from '../../tokens/api-base-url.token';\nimport { InternalAuthService } from '../../services/internal-auth.service';\nimport { AlarmApiService } from './alarm-api.service';\nimport {\n\tREALTIME_ALARM_EVENT_NORMALIZER,\n\ttype RealtimeAlarmEventNormalizerPort,\n} from './realtime-alarm-event-normalizer.service';\nimport {\n\tALARM_LIFECYCLE_NOTIFIER,\n\ttype AlarmLifecycleNotifierPort,\n} from './alarm-lifecycle-notifier.service';\nimport {\n\tWARD_SOCKET_ROOM_COORDINATOR,\n\ttype WardSocketRoomCoordinatorPort,\n} from './ward-socket-room-coordinator.service';\n\nexport const SOCKET_IO_FACTORY = new InjectionToken('SOCKET_IO_FACTORY', {\n\tprovidedIn: 'root',\n\tfactory: () => io,\n});\n\n@Injectable({ providedIn: 'root' })\nexport class EventSubscriptionService implements OnDestroy {\n\tprivate readonly socketIoFactory = inject(SOCKET_IO_FACTORY);\n\tprivate readonly http = inject(HttpClient, { optional: true });\n\tprivate readonly alarmApiService = inject(AlarmApiService, { optional: true });\n\tprivate readonly alarmStateService = inject(AlarmStateService);\n\tprivate readonly apiBaseUrl = inject(API_BASE_URL, { optional: true });\n\tprivate readonly internalAuthService = inject(InternalAuthService, { optional: true });\n\tprivate readonly eventNormalizer: RealtimeAlarmEventNormalizerPort = inject(REALTIME_ALARM_EVENT_NORMALIZER);\n\tprivate readonly lifecycleNotifier: AlarmLifecycleNotifierPort = inject(ALARM_LIFECYCLE_NOTIFIER);\n\tprivate readonly roomCoordinator: WardSocketRoomCoordinatorPort = inject(WARD_SOCKET_ROOM_COORDINATOR);\n\n\tprivate readonly connectionStatus$ = new BehaviorSubject(\n\t\tConnectionStatus.DISCONNECTED\n\t);\n\tprivate readonly destroy$ = new Subject();\n\tprivate socket: Socket | null = null;\n\tprivate authLifecycleInitialized = false;\n\tprivate activeUserId: string | null = null;\n\tprivate readonly wardBootstrapInFlightUserIds = new Set();\n\tprivate readonly wardBootstrapDoneUserIds = new Set();\n\n\tpublic initialize(wardIds: string[]): void {\n\t\tthis.connect();\n\t\tthis.ensureAuthLifecycleSubscription();\n\n\t\tfor (const wardId of wardIds) {\n\t\t\tthis.joinRoom(wardId);\n\t\t}\n\t}\n\n\tpublic refreshWardRoomSubscription(): void {\n\t\tif (!this.activeUserId) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.bootstrapWardRoomSubscription(this.activeUserId, true);\n\t}\n\n\tpublic getConnectionStatus$(): Observable {\n\t\treturn this.connectionStatus$.asObservable();\n\t}\n\n\tpublic joinRoom(wardId: string): void {\n\t\tconst normalizedWardId = this.roomCoordinator.requestJoinRoom(wardId);\n\t\tif (!normalizedWardId) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.socket?.emit('join-ward', normalizedWardId);\n\t}\n\n\tpublic leaveRoom(wardId: string): void {\n\t\tconst normalizedWardId = this.roomCoordinator.requestLeaveRoom(wardId);\n\t\tif (!normalizedWardId) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.socket?.emit('leave-ward', normalizedWardId);\n\t}\n\n\tpublic ngOnDestroy(): void {\n\t\tthis.disconnect();\n\t}\n\n\tprivate connect(): void {\n\t\tif (this.socket) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.socket = this.socketIoFactory(this.resolveSocketUrl(), {\n\t\t\ttransports: ['websocket'],\n\t\t\treconnection: true,\n\t\t\tautoConnect: true,\n\t\t});\n\n\t\tthis.socket\n\t\t\t.on('connect', () => {\n\t\t\t\tthis.connectionStatus$.next(ConnectionStatus.CONNECTED);\n\t\t\t\tthis.rejoinAllRooms();\n\t\t\t})\n\t\t\t.on('disconnect', () => {\n\t\t\t\tthis.connectionStatus$.next(ConnectionStatus.DISCONNECTED);\n\t\t\t})\n\t\t\t.on('reconnect_attempt', () => {\n\t\t\t\tthis.connectionStatus$.next(ConnectionStatus.RECONNECTING);\n\t\t\t});\n\n\t\tfromEvent(this.socket, 'push-event')\n\t\t\t.pipe(takeUntil(this.destroy$))\n\t\t\t.subscribe((rawEvent) => {\n\t\t\t\tthis.handleBackendTriggeredRawEvent(rawEvent);\n\t\t\t});\n\n\t\tfromEvent(this.socket, 'alarm-resolved')\n\t\t\t.pipe(takeUntil(this.destroy$))\n\t\t\t.subscribe((rawEvent) => {\n\t\t\t\tthis.handleBackendResolvedRawEvent(rawEvent);\n\t\t\t});\n\t}\n\n\tprivate disconnect(): void {\n\t\tif (!this.socket) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.socket.removeAllListeners();\n\t\tthis.socket.disconnect();\n\t\tthis.socket = null;\n\t\tthis.roomCoordinator.resetRuntimeState();\n\t\tthis.connectionStatus$.next(ConnectionStatus.DISCONNECTED);\n\n\t\tthis.destroy$.next();\n\t\tthis.destroy$.complete();\n\t}\n\n\tprivate ensureAuthLifecycleSubscription(): void {\n\t\tif (this.authLifecycleInitialized || !this.internalAuthService) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.authLifecycleInitialized = true;\n\n\t\tthis.internalAuthService\n\t\t\t.getCurrentUser$()\n\t\t\t.pipe(takeUntil(this.destroy$))\n\t\t\t.subscribe((session) => {\n\t\t\t\tif (!session) {\n\t\t\t\t\tconst previousUserId = this.activeUserId;\n\t\t\t\t\tif (previousUserId) {\n\t\t\t\t\t\tthis.wardBootstrapInFlightUserIds.delete(previousUserId);\n\t\t\t\t\t\tthis.wardBootstrapDoneUserIds.delete(previousUserId);\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.activeUserId = null;\n\t\t\t\t\tthis.emitLeaveMany(this.roomCoordinator.deactivateUser());\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst normalizedUserId = session.userId.trim();\n\t\t\t\tif (!normalizedUserId) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.activeUserId = normalizedUserId;\n\n\t\t\t\tconst actions = this.roomCoordinator.activateUser(normalizedUserId);\n\t\t\t\tthis.emitLeaveMany(actions.roomsToLeave);\n\t\t\t\tthis.emitJoinMany(actions.roomsToJoin);\n\t\t\t\tif (actions.roomsToJoin.length === 0) {\n\t\t\t\t\tthis.bootstrapWardRoomSubscription(normalizedUserId);\n\t\t\t\t}\n\t\t\t});\n\t}\n\n\tprivate bootstrapWardRoomSubscription(userId: string, forceRefresh = false): void {\n\t\tif (!this.http) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (\n\t\t\tthis.wardBootstrapInFlightUserIds.has(userId) ||\n\t\t\t(!forceRefresh && this.wardBootstrapDoneUserIds.has(userId))\n\t\t) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.wardBootstrapInFlightUserIds.add(userId);\n\n\t\tthis.http\n\t\t\t.get(this.resolvePlantAllEndpoint())\n\t\t\t.pipe(\n\t\t\t\tmap((response) => ({ response, success: true as const })),\n\t\t\t\tcatchError(() => of({ response: null, success: false as const })),\n\t\t\t\ttakeUntil(this.destroy$),\n\t\t\t\tfinalize(() => {\n\t\t\t\t\tthis.wardBootstrapInFlightUserIds.delete(userId);\n\t\t\t\t\tthis.wardBootstrapDoneUserIds.add(userId);\n\t\t\t\t})\n\t\t\t)\n\t\t\t.subscribe((result) => {\n\t\t\t\tif (!result.success) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst wardIds = this.extractWardIdsFromPlantResponse(result.response);\n\t\t\t\tif (forceRefresh) {\n\t\t\t\t\tthis.syncJoinedRoomsWithWardIds(wardIds);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tfor (const wardId of wardIds) {\n\t\t\t\t\tthis.joinRoom(wardId);\n\t\t\t\t}\n\t\t\t});\n\t}\n\n\tprivate syncJoinedRoomsWithWardIds(targetWardIds: ReadonlyArray): void {\n\t\tconst targetRooms = new Set(targetWardIds);\n\n\t\tfor (const joinedWardId of this.roomCoordinator.getJoinedRooms()) {\n\t\t\tif (targetRooms.has(joinedWardId)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tthis.leaveRoom(joinedWardId);\n\t\t}\n\n\t\tfor (const wardId of targetWardIds) {\n\t\t\tthis.joinRoom(wardId);\n\t\t}\n\t}\n\n\tprivate handleBackendTriggeredRawEvent(raw: unknown): void {\n\t\tconst payload = this.eventNormalizer.parseBackendTriggeredPayload(raw);\n\t\tif (!payload) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.joinRoom(String(payload.wardId));\n\n\t\tthis.resolveTriggeredAlarmDetails(payload.alarmEventId)\n\t\t\t.pipe(takeUntil(this.destroy$))\n\t\t\t.subscribe((resolvedDetails) => {\n\t\t\t\tconst timestamp = new Date().toISOString();\n\t\t\t\tthis.alarmStateService.onAlarmTriggered({\n\t\t\t\t\tid: payload.alarmEventId,\n\t\t\t\t\talarmRuleId: payload.alarmRuleId,\n\t\t\t\t\talarmName: resolvedDetails.alarmName,\n\t\t\t\t\tpriority: resolvedDetails.priority,\n\t\t\t\t\tactivationTime: timestamp,\n\t\t\t\t\tresolutionTime: null,\n\t\t\t\t});\n\n\t\t\t\tthis.lifecycleNotifier.publish('triggered', payload.alarmEventId, timestamp, {\n\t\t\t\t\talarmName: resolvedDetails.alarmName,\n\t\t\t\t\tpriority: resolvedDetails.priority,\n\t\t\t\t});\n\t\t\t});\n\t}\n\n\tprivate handleBackendResolvedRawEvent(raw: unknown): void {\n\t\tconst payload = this.eventNormalizer.parseBackendResolvedPayload(raw);\n\t\tif (!payload) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (typeof payload.wardId === 'number') {\n\t\t\tthis.joinRoom(String(payload.wardId));\n\t\t}\n\n\t\tthis.alarmStateService.onAlarmResolved(payload.alarmEventId);\n\t\tconst timestamp = new Date().toISOString();\n\t\tthis.lifecycleNotifier.publish('resolved', payload.alarmEventId, timestamp);\n\t}\n\n\tprivate resolveTriggeredAlarmDetails(\n\t\talarmEventId: string\n\t): Observable<{ alarmName: string; priority: AlarmPriority }> {\n\t\tconst fallback = {\n\t\t\talarmName: 'Allarme in corso',\n\t\t\tpriority: AlarmPriority.ORANGE,\n\t\t};\n\n\t\tif (!this.alarmApiService) {\n\t\t\treturn of(fallback);\n\t\t}\n\n\t\treturn this.alarmApiService.getAlarmEventById(alarmEventId).pipe(\n\t\t\tmap((alarmEvent) => ({\n\t\t\t\talarmName:\n\t\t\t\t\ttypeof alarmEvent.alarmName === 'string' && alarmEvent.alarmName.trim()\n\t\t\t\t\t\t? alarmEvent.alarmName.trim()\n\t\t\t\t\t\t: fallback.alarmName,\n\t\t\t\tpriority: this.normalizeAlarmPriority(alarmEvent.priority) ?? fallback.priority,\n\t\t\t})),\n\t\t\tcatchError(() => of(fallback))\n\t\t);\n\t}\n\n\tprivate normalizeAlarmPriority(value: unknown): AlarmPriority | null {\n\t\tif (typeof value === 'number' && Number.isInteger(value)) {\n\t\t\treturn this.isAlarmPriority(value) ? value : null;\n\t\t}\n\n\t\tif (typeof value !== 'string') {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst compact = value.trim().toUpperCase();\n\t\tif (!compact) {\n\t\t\treturn null;\n\t\t}\n\n\t\tif (compact in AlarmPriority) {\n\t\t\tconst enumValue = AlarmPriority[compact as keyof typeof AlarmPriority];\n\t\t\treturn typeof enumValue === 'number' && this.isAlarmPriority(enumValue)\n\t\t\t\t? enumValue\n\t\t\t\t: null;\n\t\t}\n\n\t\tconst parsed = Number(compact);\n\t\tif (Number.isInteger(parsed) && this.isAlarmPriority(parsed)) {\n\t\t\treturn parsed;\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tprivate isAlarmPriority(value: number): value is AlarmPriority {\n\t\treturn (\n\t\t\tvalue === AlarmPriority.WHITE ||\n\t\t\tvalue === AlarmPriority.GREEN ||\n\t\t\tvalue === AlarmPriority.ORANGE ||\n\t\t\tvalue === AlarmPriority.RED\n\t\t);\n\t}\n\n\tprivate rejoinAllRooms(): void {\n\t\tfor (const wardId of this.roomCoordinator.getJoinedRooms()) {\n\t\t\tthis.socket?.emit('join-ward', wardId);\n\t\t}\n\t}\n\n\tprivate emitJoinMany(wardIds: ReadonlyArray): void {\n\t\tfor (const wardId of wardIds) {\n\t\t\tthis.socket?.emit('join-ward', wardId);\n\t\t}\n\t}\n\n\tprivate emitLeaveMany(wardIds: ReadonlyArray): void {\n\t\tfor (const wardId of wardIds) {\n\t\t\tthis.socket?.emit('leave-ward', wardId);\n\t\t}\n\t}\n\n\tprivate resolveSocketUrl(): string {\n\t\tconst normalizedApiBaseUrl = this.apiBaseUrl?.trim();\n\t\tif (normalizedApiBaseUrl) {\n\t\t\treturn this.toWebsocketNamespaceUrl(normalizedApiBaseUrl);\n\t\t}\n\n\t\treturn `${globalThis.location.origin}/ws`;\n\t}\n\n\tprivate toWebsocketNamespaceUrl(baseUrl: string): string {\n\t\tconst trimmedBaseUrl = baseUrl.replace(/\\/+$/, '');\n\n\t\tif (trimmedBaseUrl.endsWith('/api')) {\n\t\t\treturn `${trimmedBaseUrl.slice(0, -4)}/ws`;\n\t\t}\n\n\t\treturn `${trimmedBaseUrl}/ws`;\n\t}\n\n\tprivate resolvePlantAllEndpoint(): string {\n\t\tconst normalizedApiBaseUrl = this.apiBaseUrl?.trim();\n\t\tif (normalizedApiBaseUrl) {\n\t\t\treturn `${normalizedApiBaseUrl}/plant/all`;\n\t\t}\n\n\t\treturn '/api/plant/all';\n\t}\n\n\tprivate extractWardIdsFromPlantResponse(response: unknown): string[] {\n\t\tconst plants = this.extractPlantArray(response);\n\t\tconst wardIds = new Set();\n\n\t\tfor (const plant of plants) {\n\t\t\tconst wardId = this.normalizeWardId(plant.wardId);\n\t\t\tif (!wardId) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\twardIds.add(wardId);\n\t\t}\n\n\t\treturn Array.from(wardIds.values());\n\t}\n\n\tprivate extractPlantArray(response: unknown): Array<{ wardId?: unknown }> {\n\t\tif (Array.isArray(response)) {\n\t\t\treturn response.filter(\n\t\t\t\t(candidate): candidate is { wardId?: unknown } =>\n\t\t\t\t\ttypeof candidate === 'object' && candidate !== null\n\t\t\t);\n\t\t}\n\n\t\tif (typeof response !== 'object' || response === null) {\n\t\t\treturn [];\n\t\t}\n\n\t\tconst wrapped = response as { data?: unknown; plants?: unknown };\n\t\tif (Array.isArray(wrapped.data)) {\n\t\t\treturn wrapped.data.filter(\n\t\t\t\t(candidate): candidate is { wardId?: unknown } =>\n\t\t\t\t\ttypeof candidate === 'object' && candidate !== null\n\t\t\t);\n\t\t}\n\n\t\tif (!Array.isArray(wrapped.plants)) {\n\t\t\treturn [];\n\t\t}\n\n\t\treturn wrapped.plants.filter(\n\t\t\t(candidate): candidate is { wardId?: unknown } =>\n\t\t\t\ttypeof candidate === 'object' && candidate !== null\n\t\t);\n\t}\n\n\tprivate normalizeWardId(rawWardId: unknown): string | null {\n\t\tif (typeof rawWardId === 'number' && Number.isInteger(rawWardId)) {\n\t\t\treturn String(rawWardId);\n\t\t}\n\n\t\tif (typeof rawWardId !== 'string') {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst trimmedWardId = rawWardId.trim();\n\t\tif (!trimmedWardId) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn trimmedWardId;\n\t}\n\n}\n"],"mappings":"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","names":["PACKET_TYPES","PACKET_TYPES_REVERSE","key","ERROR_PACKET","withNativeBlob","withNativeArrayBuffer","isView","obj","encodePacket","type","data","supportsBinary","callback","encodeBlobAsBase64","PACKET_TYPES","fileReader","content","toArray","TEXT_ENCODER","encodePacketToBinary","packet","encoded","chars","lookup","decode","base64","bufferLength","len","i","p","encoded1","encoded2","encoded3","encoded4","arraybuffer","bytes","lookup","withNativeArrayBuffer","decodePacket","encodedPacket","binaryType","mapBinary","type","decodeBase64Packet","PACKET_TYPES_REVERSE","ERROR_PACKET","data","decoded","decode","SEPARATOR","encodePayload","packets","callback","length","encodedPackets","count","packet","i","encodePacket","encodedPacket","decodePayload","encodedPayload","binaryType","decodedPacket","decodePacket","createPacketEncoderStream","controller","encodePacketToBinary","payloadLength","header","view","TEXT_DECODER","totalLength","chunks","acc","chunk","concatChunks","size","buffer","j","createPacketDecoderStream","maxPayload","state","expectedLength","isBinary","headerArray","n","ERROR_PACKET","data","protocol","Emitter","obj","mixin","key","event","fn","on","callbacks","cb","i","args","len","nextTick","cb","setTimeoutFn","globalThisShim","defaultBinaryType","pick","obj","attr","acc","k","NATIVE_SET_TIMEOUT","globalThisShim","NATIVE_CLEAR_TIMEOUT","installTimerFunctions","opts","BASE64_OVERHEAD","byteLength","utf8Length","str","c","length","i","l","randomString","encode","obj","str","i","decode","qs","qry","pairs","l","pair","TransportError","reason","description","context","Transport","Emitter","opts","installTimerFunctions","packets","data","packet","decodePacket","details","onPause","schema","query","hostname","encodedQuery","encode","Polling","Transport","onPause","pause","total","data","callback","packet","decodePayload","close","packets","encodePayload","schema","query","randomString","value","hasCORS","empty","BaseXHR","Polling","opts","isSSL","port","data","fn","req","xhrStatus","context","Request","Emitter","createRequest","uri","installTimerFunctions","_a","pick","xhr","i","e","err","fromError","unloadHandler","terminationEvent","globalThisShim","hasXHR2","newRequest","XHR","forceBase64","xdomain","hasCORS","isReactNative","BaseWS","Transport","uri","protocols","opts","pick","err","closeEvent","ev","packets","i","packet","lastPacket","encodePacket","data","nextTick","schema","query","randomString","WebSocketCtor","globalThisShim","WS","_packet","WT","Transport","err","stream","decoderStream","createPacketDecoderStream","reader","encoderStream","createPacketEncoderStream","read","done","value","packet","packets","i","lastPacket","nextTick","_a","transports","WS","WT","XHR","re","parts","parse","str","src","b","e","m","uri","i","pathNames","queryKey","obj","path","regx","names","query","data","$0","$1","$2","withEventListeners","OFFLINE_EVENT_LISTENERS","listener","SocketWithoutUpgrade","Emitter","uri","opts","defaultBinaryType","parsedUri","parse","installTimerFunctions","t","transportName","decode","name","query","protocol","transport","reason","packet","err","data","delay","packets","payloadSize","i","byteLength","hasExpired","nextTick","msg","options","fn","type","close","cleanupAndClose","waitForUpgrade","description","SocketWithUpgrade","failed","onTransportOpen","cleanup","freezeTransport","onerror","error","onTransportClose","onclose","onupgrade","to","upgrades","filteredUpgrades","Socket","o","transports","protocol","Socket","url","uri","path","loc","obj","parse","host","esm_exports","__export","Decoder","Encoder","PacketType","isPacketValid","protocol","withNativeArrayBuffer","isView","obj","toString","withNativeBlob","withNativeFile","isBinary","hasBinary","toJSON","i","l","key","deconstructPacket","packet","buffers","packetData","pack","_deconstructPacket","data","isBinary","placeholder","newData","i","key","reconstructPacket","_reconstructPacket","RESERVED_EVENTS","protocol","PacketType","Encoder","replacer","obj","hasBinary","str","deconstruction","deconstructPacket","pack","buffers","Decoder","_Decoder","Emitter","opts","packet","isBinaryEvent","BinaryReconstructor","isBinary","i","p","start","buf","n","isInteger","next","c","payload","type","isObject","binData","reconstructPacket","isNamespaceValid","nsp","value","isAckIdValid","id","isDataValid","isPacketValid","on","obj","ev","fn","RESERVED_EVENTS","Socket","Emitter","io","nsp","opts","on","args","ev","_a","_b","_c","packet","PacketType","id","ack","isTransportWritable","isConnected","timeout","timer","i","fn","resolve","reject","arg1","arg2","err","responseArgs","force","data","reason","description","listeners","listener","self","sent","pid","subDestroy","compress","Backoff","opts","ms","rand","deviation","min","max","jitter","Manager","Emitter","uri","opts","_a","installTimerFunctions","Backoff","_parser","esm_exports","v","fn","Socket","socket","self","openSubDestroy","on","onError","err","errorSub","timeout","timer","data","e","packet","nextTick","nsp","nsps","encodedPackets","i","subDestroy","reason","description","delay","attempt","cache","lookup","uri","opts","parsed","url","source","id","path","sameNamespace","newConnection","io","Manager","Socket","ConnectionStatus","REALTIME_ALARM_EVENT_NORMALIZER","InjectionToken","providedIn","factory","inject","RealtimeAlarmEventNormalizerService","parseBackendTriggeredPayload","payload","isObject","alarmEventId","wardId","alarmRuleId","normalizedWardId","parseWardId","parseBackendResolvedPayload","undefined","value","Number","isInteger","trimmed","trim","parsed","ɵfac","ALARM_LIFECYCLE_NOTIFIER","InjectionToken","providedIn","factory","inject","AlarmLifecycleNotifierService","alarmStateService","AlarmStateService","publish","type","alarmEventId","timestamp","details","publishNotification","publishLifecycleUpdate","title","formatTriggeredNotificationTitle","alarmName","priority","DEFAULT_TRIGGERED_NOTIFICATION_TITLE","DEFAULT_RESOLVED_NOTIFICATION_TITLE","onNotificationReceived","notificationId","sentAt","eventType","globalThis","dispatchEvent","CustomEvent","ALARM_LIFECYCLE_UPDATED_EVENT","detail","Event","ɵfac","WARD_SOCKET_ROOM_COORDINATOR","InjectionToken","providedIn","factory","inject","WardSocketRoomCoordinatorService","wardRealtimeCache","WardRealtimeCacheService","optional","joinedRooms","Set","currentUserId","activateUser","userId","normalizedUserId","trim","roomsToLeave","roomsToJoin","Array","from","values","length","clear","cachedWardIds","getWardIds","cachedWardId","has","add","push","persistJoinedRooms","deactivateUser","clearWardIds","requestJoinRoom","wardId","normalizedWardId","requestLeaveRoom","delete","getJoinedRooms","resetRuntimeState","setWardIds","ɵfac","SOCKET_IO_FACTORY","InjectionToken","providedIn","factory","io","EventSubscriptionService","socketIoFactory","inject","http","HttpClient","optional","alarmApiService","AlarmApiService","alarmStateService","AlarmStateService","apiBaseUrl","API_BASE_URL","internalAuthService","InternalAuthService","eventNormalizer","REALTIME_ALARM_EVENT_NORMALIZER","lifecycleNotifier","ALARM_LIFECYCLE_NOTIFIER","roomCoordinator","WARD_SOCKET_ROOM_COORDINATOR","connectionStatus$","BehaviorSubject","ConnectionStatus","DISCONNECTED","destroy$","Subject","socket","authLifecycleInitialized","activeUserId","wardBootstrapInFlightUserIds","Set","wardBootstrapDoneUserIds","initialize","wardIds","connect","ensureAuthLifecycleSubscription","wardId","joinRoom","refreshWardRoomSubscription","bootstrapWardRoomSubscription","getConnectionStatus$","asObservable","normalizedWardId","requestJoinRoom","emit","leaveRoom","requestLeaveRoom","ngOnDestroy","disconnect","resolveSocketUrl","transports","reconnection","autoConnect","on","next","CONNECTED","rejoinAllRooms","RECONNECTING","fromEvent","pipe","takeUntil","subscribe","rawEvent","handleBackendTriggeredRawEvent","handleBackendResolvedRawEvent","removeAllListeners","resetRuntimeState","complete","getCurrentUser$","session","previousUserId","delete","emitLeaveMany","deactivateUser","normalizedUserId","userId","trim","actions","activateUser","roomsToLeave","emitJoinMany","roomsToJoin","length","forceRefresh","has","add","get","resolvePlantAllEndpoint","map","response","success","catchError","of","finalize","result","extractWardIdsFromPlantResponse","syncJoinedRoomsWithWardIds","targetWardIds","targetRooms","joinedWardId","getJoinedRooms","raw","payload","parseBackendTriggeredPayload","String","resolveTriggeredAlarmDetails","alarmEventId","resolvedDetails","timestamp","Date","toISOString","onAlarmTriggered","id","alarmRuleId","alarmName","priority","activationTime","resolutionTime","publish","parseBackendResolvedPayload","onAlarmResolved","fallback","AlarmPriority","ORANGE","getAlarmEventById","alarmEvent","normalizeAlarmPriority","value","Number","isInteger","isAlarmPriority","compact","toUpperCase","enumValue","parsed","WHITE","GREEN","RED","normalizedApiBaseUrl","toWebsocketNamespaceUrl","globalThis","location","origin","baseUrl","trimmedBaseUrl","replace","endsWith","slice","plants","extractPlantArray","plant","normalizeWardId","Array","from","values","isArray","filter","candidate","wrapped","data","rawWardId","trimmedWardId","ɵfac"],"x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27]} \ No newline at end of file diff --git a/frontend/dist-instrumented/chunk-6V7HPFWL.js b/frontend/dist-instrumented/chunk-6V7HPFWL.js new file mode 100644 index 00000000..776a29cd --- /dev/null +++ b/frontend/dist-instrumented/chunk-6V7HPFWL.js @@ -0,0 +1,3 @@ +function cov_281yyfg268(){var path="/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-6V7HPFWL.js";var hash="98d6e7902d29f2c176bff395fbf1635d5faa8cdc";var global=new Function("return this")();var gcv="__coverage__";var coverageData={path:"/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-6V7HPFWL.js",statementMap:{"0":{start:{line:1,column:46},end:{line:1,column:75}}},fnMap:{},branchMap:{},s:{"0":0},f:{},b:{},inputSourceMap:{version:3,sources:["src/app/core/services/vimar-cloud-api.service.interface.ts"],sourcesContent:["import { InjectionToken } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { MyVimarAccount } from '../../features/my-vimar-integration/models/my-vimar-account.model';\n\nexport interface IVimarCloudApiService {\n\tgetLinkedAccount(): Observable;\n\tinitiateOAuth(): void;\n\tunlinkAccount(): Observable;\n}\n\nexport const VIMAR_CLOUD_API_SERVICE = new InjectionToken('VimarCloudApiService');\n"],mappings:"wCAUO,IAAMA,EAA0B,IAAIC,EAAsC,sBAAsB",names:["VIMAR_CLOUD_API_SERVICE","InjectionToken"]},_coverageSchema:"1a1c01bbd47fc00a2c39e90264f33305004495a9",hash:"98d6e7902d29f2c176bff395fbf1635d5faa8cdc"};var coverage=global[gcv]||(global[gcv]={});if(!coverage[path]||coverage[path].hash!==hash){coverage[path]=coverageData;}var actualCoverage=coverage[path];{// @ts-ignore +cov_281yyfg268=function(){return actualCoverage;};}return actualCoverage;}cov_281yyfg268();import{O as o}from"./chunk-RYTNMYZW.js";var i=(cov_281yyfg268().s[0]++,new o("VimarCloudApiService"));export{i as a};//# sourceMappingURL=chunk-6V7HPFWL.js.map +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJpIiwiY292XzI4MXl5ZmcyNjgiLCJzIiwibyIsImEiXSwic291cmNlcyI6WyJzcmMvYXBwL2NvcmUvc2VydmljZXMvdmltYXItY2xvdWQtYXBpLnNlcnZpY2UuaW50ZXJmYWNlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBNeVZpbWFyQWNjb3VudCB9IGZyb20gJy4uLy4uL2ZlYXR1cmVzL215LXZpbWFyLWludGVncmF0aW9uL21vZGVscy9teS12aW1hci1hY2NvdW50Lm1vZGVsJztcblxuZXhwb3J0IGludGVyZmFjZSBJVmltYXJDbG91ZEFwaVNlcnZpY2Uge1xuXHRnZXRMaW5rZWRBY2NvdW50KCk6IE9ic2VydmFibGU8TXlWaW1hckFjY291bnQ+O1xuXHRpbml0aWF0ZU9BdXRoKCk6IHZvaWQ7XG5cdHVubGlua0FjY291bnQoKTogT2JzZXJ2YWJsZTx2b2lkPjtcbn1cblxuZXhwb3J0IGNvbnN0IFZJTUFSX0NMT1VEX0FQSV9TRVJWSUNFID0gbmV3IEluamVjdGlvblRva2VuPElWaW1hckNsb3VkQXBpU2VydmljZT4oJ1ZpbWFyQ2xvdWRBcGlTZXJ2aWNlJyk7XG4iXSwibWFwcGluZ3MiOiI7bUlBVU8sR0FBTSxDQUFBQSxDQUFBLEVBQUFDLGNBQUEsR0FBQUMsQ0FBQSxNQUEwQixHQUFJLENBQUFDLENBQUEsQ0FBc0Msc0JBQXNCLFVBQUFILENBQUEsSUFBQUksQ0FBQSxFIiwiaWdub3JlTGlzdCI6W119 \ No newline at end of file diff --git a/frontend/dist-instrumented/chunk-6V7HPFWL.js.map b/frontend/dist-instrumented/chunk-6V7HPFWL.js.map new file mode 100644 index 00000000..27c7bbc7 --- /dev/null +++ b/frontend/dist-instrumented/chunk-6V7HPFWL.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["src/app/core/services/vimar-cloud-api.service.interface.ts"], + "sourcesContent": ["import { InjectionToken } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { MyVimarAccount } from '../../features/my-vimar-integration/models/my-vimar-account.model';\n\nexport interface IVimarCloudApiService {\n\tgetLinkedAccount(): Observable;\n\tinitiateOAuth(): void;\n\tunlinkAccount(): Observable;\n}\n\nexport const VIMAR_CLOUD_API_SERVICE = new InjectionToken('VimarCloudApiService');\n"], + "mappings": "wCAUO,IAAMA,EAA0B,IAAIC,EAAsC,sBAAsB", + "names": ["VIMAR_CLOUD_API_SERVICE", "InjectionToken"] +} diff --git a/frontend/dist-instrumented/chunk-6XDHGAD3.js b/frontend/dist-instrumented/chunk-6XDHGAD3.js new file mode 100644 index 00000000..132e0b9c --- /dev/null +++ b/frontend/dist-instrumented/chunk-6XDHGAD3.js @@ -0,0 +1,3 @@ +function cov_196tq9h967(){var path="/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-6XDHGAD3.js";var hash="fda4bcd3db4c8ac56786563edba8b16ed96cdf19";var global=new Function("return this")();var gcv="__coverage__";var coverageData={path:"/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-6XDHGAD3.js",statementMap:{"0":{start:{line:1,column:34},end:{line:1,column:123}},"1":{start:{line:1,column:62},end:{line:1,column:121}},"2":{start:{line:1,column:100},end:{line:1,column:120}}},fnMap:{"0":{name:"(anonymous_0)",decl:{start:{line:1,column:58},end:{line:1,column:59}},loc:{start:{line:1,column:62},end:{line:1,column:121}},line:1},"1":{name:"(anonymous_1)",decl:{start:{line:1,column:97},end:{line:1,column:98}},loc:{start:{line:1,column:100},end:{line:1,column:120}},line:1}},branchMap:{},s:{"0":0,"1":0,"2":0},f:{"0":0,"1":0},b:{},inputSourceMap:{version:3,sources:["src/app/features/dashboard/dashboard-page.routes.ts"],sourcesContent:["import { Routes } from '@angular/router';\nimport { authGuard } from '../../core/guards/auth.guard';\n\nexport const DASHBOARD_ROUTES : Routes = [\n {\n path: '',\n //canActivate: [authGuard],\n loadComponent: () => import('./components/dashboard-page/dashboard-page.component').then((m) => m.DashboardComponent)\n },\n];"],mappings:"4BAGO,IAAMA,EAA4B,CACrC,CACAC,KAAM,GAENC,cAAeA,IAAM,OAAO,qBAAsD,EAAEC,KAAMC,GAAMA,EAAEC,kBAAkB,EACnH",names:["DASHBOARD_ROUTES","path","loadComponent","then","m","DashboardComponent"]},_coverageSchema:"1a1c01bbd47fc00a2c39e90264f33305004495a9",hash:"fda4bcd3db4c8ac56786563edba8b16ed96cdf19"};var coverage=global[gcv]||(global[gcv]={});if(!coverage[path]||coverage[path].hash!==hash){coverage[path]=coverageData;}var actualCoverage=coverage[path];{// @ts-ignore +cov_196tq9h967=function(){return actualCoverage;};}return actualCoverage;}cov_196tq9h967();import"./chunk-VCZGUBMY.js";var t=(cov_196tq9h967().s[0]++,[{path:"",loadComponent:()=>{cov_196tq9h967().f[0]++;cov_196tq9h967().s[1]++;return import("./chunk-TSF4KDM2.js").then(o=>{cov_196tq9h967().f[1]++;cov_196tq9h967().s[2]++;return o.DashboardComponent;});}}]);export{t as DASHBOARD_ROUTES};//# sourceMappingURL=chunk-6XDHGAD3.js.map +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ0IiwiY292XzE5NnRxOWg5NjciLCJzIiwicGF0aCIsImxvYWRDb21wb25lbnQiLCJmIiwidGhlbiIsIm8iLCJEYXNoYm9hcmRDb21wb25lbnQiLCJEQVNIQk9BUkRfUk9VVEVTIl0sInNvdXJjZXMiOlsic3JjL2FwcC9mZWF0dXJlcy9kYXNoYm9hcmQvZGFzaGJvYXJkLXBhZ2Uucm91dGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJvdXRlcyB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBhdXRoR3VhcmQgfSBmcm9tICcuLi8uLi9jb3JlL2d1YXJkcy9hdXRoLmd1YXJkJztcblxuZXhwb3J0IGNvbnN0IERBU0hCT0FSRF9ST1VURVMgOiBSb3V0ZXMgPSBbXG4gICAge1xuICAgIHBhdGg6ICcnLFxuICAgIC8vY2FuQWN0aXZhdGU6IFthdXRoR3VhcmRdLFxuICAgIGxvYWRDb21wb25lbnQ6ICgpID0+IGltcG9ydCgnLi9jb21wb25lbnRzL2Rhc2hib2FyZC1wYWdlL2Rhc2hib2FyZC1wYWdlLmNvbXBvbmVudCcpLnRoZW4oKG0pID0+IG0uRGFzaGJvYXJkQ29tcG9uZW50KVxuICAgIH0sXG5dOyJdLCJtYXBwaW5ncyI6Ijt1SEFHTyxHQUFNLENBQUFBLENBQUEsRUFBQUMsY0FBQSxHQUFBQyxDQUFBLE1BQTRCLENBQ3JDLENBQ0FDLElBQUEsQ0FBTSxHQUVOQyxhQUFBLENBQWVBLENBQUEsR0FBTSxDQUFBSCxjQUFBLEdBQUFJLENBQUEsS0FBQUosQ0FBQSxpQkFBQUMsQ0FBQSxvQkFBTyxxQkFBc0QsRUFBRUksSUFBQSxDQUFNQyxDQUFBLEVBQU0sQ0FBQU4sY0FBQSxHQUFBSSxDQUFBLEtBQUFKLENBQUEsaUJBQUFDLENBQUEsYUFBQUssQ0FBQSxDQUFFQyxrQkFBa0IsQ0FBbEIsQ0FBa0IsSUFDbkgsVUFBQVIsQ0FBQSxJQUFBUyxnQkFBQSxFIiwiaWdub3JlTGlzdCI6W119 \ No newline at end of file diff --git a/frontend/dist-instrumented/chunk-6XDHGAD3.js.map b/frontend/dist-instrumented/chunk-6XDHGAD3.js.map new file mode 100644 index 00000000..ae3a79d8 --- /dev/null +++ b/frontend/dist-instrumented/chunk-6XDHGAD3.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["src/app/features/dashboard/dashboard-page.routes.ts"], + "sourcesContent": ["import { Routes } from '@angular/router';\nimport { authGuard } from '../../core/guards/auth.guard';\n\nexport const DASHBOARD_ROUTES : Routes = [\n {\n path: '',\n //canActivate: [authGuard],\n loadComponent: () => import('./components/dashboard-page/dashboard-page.component').then((m) => m.DashboardComponent)\n },\n];"], + "mappings": "4BAGO,IAAMA,EAA4B,CACrC,CACAC,KAAM,GAENC,cAAeA,IAAM,OAAO,qBAAsD,EAAEC,KAAMC,GAAMA,EAAEC,kBAAkB,EACnH", + "names": ["DASHBOARD_ROUTES", "path", "loadComponent", "then", "m", "DashboardComponent"] +} diff --git a/frontend/dist-instrumented/chunk-AMU5RXFQ.js b/frontend/dist-instrumented/chunk-AMU5RXFQ.js new file mode 100644 index 00000000..a076ab11 --- /dev/null +++ b/frontend/dist-instrumented/chunk-AMU5RXFQ.js @@ -0,0 +1,3 @@ +function cov_rd4yihs8x(){var path="/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-AMU5RXFQ.js";var hash="f9a33d8a4657ba733c96b855092534fd1a048faa";var global=new Function("return this")();var gcv="__coverage__";var coverageData={path:"/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-AMU5RXFQ.js",statementMap:{"0":{start:{line:1,column:181},end:{line:1,column:441}},"1":{start:{line:1,column:194},end:{line:1,column:432}},"2":{start:{line:1,column:448},end:{line:1,column:1677}},"3":{start:{line:1,column:466},end:{line:1,column:470}},"4":{start:{line:1,column:478},end:{line:1,column:482}},"5":{start:{line:1,column:489},end:{line:1,column:507}},"6":{start:{line:1,column:523},end:{line:1,column:530}},"7":{start:{line:1,column:546},end:{line:1,column:551}},"8":{start:{line:1,column:568},end:{line:1,column:596}},"9":{start:{line:1,column:614},end:{line:1,column:640}},"10":{start:{line:1,column:657},end:{line:1,column:685}},"11":{start:{line:1,column:703},end:{line:1,column:729}},"12":{start:{line:1,column:754},end:{line:1,column:1143}},"13":{start:{line:1,column:811},end:{line:1,column:867}},"14":{start:{line:1,column:899},end:{line:1,column:967}},"15":{start:{line:1,column:1006},end:{line:1,column:1053}},"16":{start:{line:1,column:1083},end:{line:1,column:1123}},"17":{start:{line:1,column:1131},end:{line:1,column:1142}},"18":{start:{line:1,column:1161},end:{line:1,column:1271}},"19":{start:{line:1,column:1219},end:{line:1,column:1264}},"20":{start:{line:1,column:1264},end:{line:1,column:1270}},"21":{start:{line:1,column:1277},end:{line:1,column:1328}},"22":{start:{line:1,column:1329},end:{line:1,column:1388}},"23":{start:{line:1,column:1352},end:{line:1,column:1381}},"24":{start:{line:1,column:1381},end:{line:1,column:1387}},"25":{start:{line:1,column:1388},end:{line:1,column:1424}},"26":{start:{line:1,column:1440},end:{line:1,column:1632}},"27":{start:{line:1,column:1477},end:{line:1,column:1563}},"28":{start:{line:1,column:1512},end:{line:1,column:1556}},"29":{start:{line:1,column:1556},end:{line:1,column:1562}},"30":{start:{line:1,column:1563},end:{line:1,column:1631}},"31":{start:{line:1,column:1582},end:{line:1,column:1624}},"32":{start:{line:1,column:1624},end:{line:1,column:1630}},"33":{start:{line:1,column:1632},end:{line:1,column:1675}}},fnMap:{"0":{name:"(anonymous_0)",decl:{start:{line:1,column:182},end:{line:1,column:183}},loc:{start:{line:1,column:193},end:{line:1,column:433}},line:1},"1":{name:"(anonymous_1)",decl:{start:{line:1,column:552},end:{line:1,column:553}},loc:{start:{line:1,column:567},end:{line:1,column:597}},line:1},"2":{name:"(anonymous_2)",decl:{start:{line:1,column:597},end:{line:1,column:598}},loc:{start:{line:1,column:613},end:{line:1,column:641}},line:1},"3":{name:"(anonymous_3)",decl:{start:{line:1,column:641},end:{line:1,column:642}},loc:{start:{line:1,column:656},end:{line:1,column:686}},line:1},"4":{name:"(anonymous_4)",decl:{start:{line:1,column:686},end:{line:1,column:687}},loc:{start:{line:1,column:702},end:{line:1,column:730}},line:1},"5":{name:"(anonymous_5)",decl:{start:{line:1,column:730},end:{line:1,column:731}},loc:{start:{line:1,column:753},end:{line:1,column:1144}},line:1},"6":{name:"(anonymous_6)",decl:{start:{line:1,column:1144},end:{line:1,column:1145}},loc:{start:{line:1,column:1160},end:{line:1,column:1425}},line:1},"7":{name:"(anonymous_7)",decl:{start:{line:1,column:1425},end:{line:1,column:1426}},loc:{start:{line:1,column:1439},end:{line:1,column:1676}},line:1}},branchMap:{"0":{loc:{start:{line:1,column:435},end:{line:1,column:440}},type:"binary-expr",locations:[{start:{line:1,column:435},end:{line:1,column:436}},{start:{line:1,column:438},end:{line:1,column:440}}],line:1},"1":{loc:{start:{line:1,column:754},end:{line:1,column:1143}},type:"switch",locations:[{start:{line:1,column:777},end:{line:1,column:867}},{start:{line:1,column:867},end:{line:1,column:967}},{start:{line:1,column:967},end:{line:1,column:1053}},{start:{line:1,column:1053},end:{line:1,column:1123}},{start:{line:1,column:1123},end:{line:1,column:1142}}],line:1},"2":{loc:{start:{line:1,column:1161},end:{line:1,column:1271}},type:"if",locations:[{start:{line:1,column:1161},end:{line:1,column:1271}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"3":{loc:{start:{line:1,column:1329},end:{line:1,column:1388}},type:"if",locations:[{start:{line:1,column:1329},end:{line:1,column:1388}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"4":{loc:{start:{line:1,column:1440},end:{line:1,column:1632}},type:"if",locations:[{start:{line:1,column:1440},end:{line:1,column:1632}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"5":{loc:{start:{line:1,column:1477},end:{line:1,column:1563}},type:"if",locations:[{start:{line:1,column:1477},end:{line:1,column:1563}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"6":{loc:{start:{line:1,column:1480},end:{line:1,column:1510}},type:"binary-expr",locations:[{start:{line:1,column:1480},end:{line:1,column:1494}},{start:{line:1,column:1496},end:{line:1,column:1510}}],line:1},"7":{loc:{start:{line:1,column:1563},end:{line:1,column:1631}},type:"if",locations:[{start:{line:1,column:1563},end:{line:1,column:1631}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1}},s:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0},f:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0},b:{"0":[0,0],"1":[0,0,0,0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0]},inputSourceMap:{version:3,sources:["src/app/features/user-auth/models/auth-error-type.enum.ts","src/app/features/user-auth/components/auth-base/auth-base.component.ts"],sourcesContent:["export enum AuthErrorType {\n\tUSERNAME_OR_PASSWORD_WRONG = 'USERNAME_OR_PASSWORD_WRONG',\n\tUSERNAME_OR_TEMP_PASSWORD_WRONG = 'USERNAME_OR_TEMP_PASSWORD_WRONG',\n\tNEW_PASSWORD_EQUALS_TEMP = 'NEW_PASSWORD_EQUALS_TEMP',\n\tNEW_PASSWORD_NOT_VALID = 'NEW_PASSWORD_NOT_VALID',\n}\n","import { inject, signal } from '@angular/core';\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { InternalAuthService } from '../../../../core/services/internal-auth.service';\nimport { AuthErrorType } from '../../models/auth-error-type.enum';\nimport { UserSession } from '../../models/user-session.model';\n\nexport abstract class AuthBaseComponent {\n\tprotected readonly authService = inject(InternalAuthService);\n\tprotected readonly router = inject(Router);\n\tprotected readonly route = inject(ActivatedRoute, { optional: true });\n\tprivate readonly errorTypeState = signal(null);\n\tprivate readonly isLoadingState = signal(false);\n\n\tpublic get errorType(): AuthErrorType | null {\n\t\treturn this.errorTypeState();\n\t}\n\n\tpublic set errorType(value: AuthErrorType | null) {\n\t\tthis.errorTypeState.set(value);\n\t}\n\n\tpublic get isLoading(): boolean {\n\t\treturn this.isLoadingState();\n\t}\n\n\tpublic set isLoading(value: boolean) {\n\t\tthis.isLoadingState.set(value);\n\t}\n\n\tpublic get loginErrorMessage(): string | null {\n\t\tswitch (this.errorType) {\n\t\t\tcase AuthErrorType.USERNAME_OR_PASSWORD_WRONG:\n\t\t\t\treturn 'Utente non trovato: username o password errati.';\n\t\t\tcase AuthErrorType.NEW_PASSWORD_EQUALS_TEMP:\n\t\t\t\treturn 'La nuova password deve essere diversa da quella temporanea.';\n\t\t\tcase AuthErrorType.USERNAME_OR_TEMP_PASSWORD_WRONG:\n\t\t\t\treturn 'Username o password temporanea errati.';\n\t\t\tcase AuthErrorType.NEW_PASSWORD_NOT_VALID:\n\t\t\t\treturn 'La nuova password non e valida.';\n\t\t\tdefault:\n\t\t\t\treturn null;\n\t\t}\n\t}\n\n\tpublic abstract onUsernameChange(value: string): void;\n\tpublic abstract onSubmit(): void;\n\n\tprotected handleSuccess(session: UserSession): void {\n\t\tthis.isLoading = false;\n\t\tthis.errorType = null;\n\n\t\tif (session.isFirstAccess) {\n\t\t\tvoid this.router.navigate(['/auth/first-access']);\n\t\t\treturn;\n\t\t}\n\n\t\tconst returnUrl = this.route?.snapshot.queryParamMap.get('returnUrl');\n\t\tif (returnUrl?.startsWith('/')) {\n\t\t\tvoid this.router.navigateByUrl(returnUrl);\n\t\t\treturn;\n\t\t}\n\n\t\tvoid this.router.navigate(['/dashboard']);\n\t}\n\n\tprotected handleError(error: unknown): void {\n\t\tthis.isLoading = false;\n\n\t\tif (error instanceof HttpErrorResponse) {\n\t\t\tif (error.status === 400 || error.status === 401) {\n\t\t\t\tthis.errorType = AuthErrorType.USERNAME_OR_PASSWORD_WRONG;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (error.status === 409) {\n\t\t\t\tthis.errorType = AuthErrorType.NEW_PASSWORD_EQUALS_TEMP;\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tthis.errorType = AuthErrorType.USERNAME_OR_PASSWORD_WRONG;\n\t}\n}\n"],mappings:"+KAAA,IAAYA,GAAZ,SAAYA,EAAa,CACxBA,OAAAA,EAAA,2BAAA,6BACAA,EAAA,gCAAA,kCACAA,EAAA,yBAAA,2BACAA,EAAA,uBAAA,yBAJWA,CAKZ,GALYA,GAAa,CAAA,CAAA,ECOnB,IAAgBC,EAAhB,KAAiC,CACnBC,YAAcC,EAAOC,CAAmB,EACxCC,OAASF,EAAOG,CAAM,EACtBC,MAAQJ,EAAOK,EAAgB,CAAEC,SAAU,EAAI,CAAE,EACnDC,eAAiBC,EAA6B,IAAI,EAClDC,eAAiBD,EAAO,EAAK,EAE9C,IAAWE,WAAS,CACnB,OAAO,KAAKH,eAAc,CAC3B,CAEA,IAAWG,UAAUC,EAA2B,CAC/C,KAAKJ,eAAeK,IAAID,CAAK,CAC9B,CAEA,IAAWE,WAAS,CACnB,OAAO,KAAKJ,eAAc,CAC3B,CAEA,IAAWI,UAAUF,EAAc,CAClC,KAAKF,eAAeG,IAAID,CAAK,CAC9B,CAEA,IAAWG,mBAAiB,CAC3B,OAAQ,KAAKJ,UAAS,CACrB,KAAKK,EAAcC,2BAClB,MAAO,kDACR,KAAKD,EAAcE,yBAClB,MAAO,8DACR,KAAKF,EAAcG,gCAClB,MAAO,yCACR,KAAKH,EAAcI,uBAClB,MAAO,kCACR,QACC,OAAO,IACT,CACD,CAKUC,cAAcC,EAAoB,CAI3C,GAHA,KAAKR,UAAY,GACjB,KAAKH,UAAY,KAEbW,EAAQC,cAAe,CACrB,KAAKpB,OAAOqB,SAAS,CAAC,oBAAoB,CAAC,EAChD,MACD,CAEA,IAAMC,EAAY,KAAKpB,OAAOqB,SAASC,cAAcC,IAAI,WAAW,EACpE,GAAIH,GAAWI,WAAW,GAAG,EAAG,CAC1B,KAAK1B,OAAO2B,cAAcL,CAAS,EACxC,MACD,CAEK,KAAKtB,OAAOqB,SAAS,CAAC,YAAY,CAAC,CACzC,CAEUO,YAAYC,EAAc,CAGnC,GAFA,KAAKlB,UAAY,GAEbkB,aAAiBC,EAAmB,CACvC,GAAID,EAAME,SAAW,KAAOF,EAAME,SAAW,IAAK,CACjD,KAAKvB,UAAYK,EAAcC,2BAC/B,MACD,CAEA,GAAIe,EAAME,SAAW,IAAK,CACzB,KAAKvB,UAAYK,EAAcE,yBAC/B,MACD,CACD,CAEA,KAAKP,UAAYK,EAAcC,0BAChC",names:["AuthErrorType","AuthBaseComponent","authService","inject","InternalAuthService","router","Router","route","ActivatedRoute","optional","errorTypeState","signal","isLoadingState","errorType","value","set","isLoading","loginErrorMessage","AuthErrorType","USERNAME_OR_PASSWORD_WRONG","NEW_PASSWORD_EQUALS_TEMP","USERNAME_OR_TEMP_PASSWORD_WRONG","NEW_PASSWORD_NOT_VALID","handleSuccess","session","isFirstAccess","navigate","returnUrl","snapshot","queryParamMap","get","startsWith","navigateByUrl","handleError","error","HttpErrorResponse","status"]},_coverageSchema:"1a1c01bbd47fc00a2c39e90264f33305004495a9",hash:"f9a33d8a4657ba733c96b855092534fd1a048faa"};var coverage=global[gcv]||(global[gcv]={});if(!coverage[path]||coverage[path].hash!==hash){coverage[path]=coverageData;}var actualCoverage=coverage[path];{// @ts-ignore +cov_rd4yihs8x=function(){return actualCoverage;};}return actualCoverage;}cov_rd4yihs8x();import{c as n,e as S}from"./chunk-FYGTVJAL.js";import{b as _}from"./chunk-65RKWSY3.js";import{a as o}from"./chunk-2S5V5XEE.js";import{Q as a,ga as s}from"./chunk-RYTNMYZW.js";var r=(cov_rd4yihs8x().s[0]++,function(t){cov_rd4yihs8x().f[0]++;cov_rd4yihs8x().s[1]++;return t.USERNAME_OR_PASSWORD_WRONG="USERNAME_OR_PASSWORD_WRONG",t.USERNAME_OR_TEMP_PASSWORD_WRONG="USERNAME_OR_TEMP_PASSWORD_WRONG",t.NEW_PASSWORD_EQUALS_TEMP="NEW_PASSWORD_EQUALS_TEMP",t.NEW_PASSWORD_NOT_VALID="NEW_PASSWORD_NOT_VALID",t;}((cov_rd4yihs8x().b[0][0]++,r)||(cov_rd4yihs8x().b[0][1]++,{})));cov_rd4yihs8x().s[2]++;var R=class{authService=(cov_rd4yihs8x().s[3]++,a(_));router=(cov_rd4yihs8x().s[4]++,a(S));route=(cov_rd4yihs8x().s[5]++,a(n,{optional:!0}));errorTypeState=(cov_rd4yihs8x().s[6]++,s(null));isLoadingState=(cov_rd4yihs8x().s[7]++,s(!1));get errorType(){cov_rd4yihs8x().f[1]++;cov_rd4yihs8x().s[8]++;return this.errorTypeState();}set errorType(e){cov_rd4yihs8x().f[2]++;cov_rd4yihs8x().s[9]++;this.errorTypeState.set(e);}get isLoading(){cov_rd4yihs8x().f[3]++;cov_rd4yihs8x().s[10]++;return this.isLoadingState();}set isLoading(e){cov_rd4yihs8x().f[4]++;cov_rd4yihs8x().s[11]++;this.isLoadingState.set(e);}get loginErrorMessage(){cov_rd4yihs8x().f[5]++;cov_rd4yihs8x().s[12]++;switch(this.errorType){case r.USERNAME_OR_PASSWORD_WRONG:cov_rd4yihs8x().b[1][0]++;cov_rd4yihs8x().s[13]++;return"Utente non trovato: username o password errati.";case r.NEW_PASSWORD_EQUALS_TEMP:cov_rd4yihs8x().b[1][1]++;cov_rd4yihs8x().s[14]++;return"La nuova password deve essere diversa da quella temporanea.";case r.USERNAME_OR_TEMP_PASSWORD_WRONG:cov_rd4yihs8x().b[1][2]++;cov_rd4yihs8x().s[15]++;return"Username o password temporanea errati.";case r.NEW_PASSWORD_NOT_VALID:cov_rd4yihs8x().b[1][3]++;cov_rd4yihs8x().s[16]++;return"La nuova password non e valida.";default:cov_rd4yihs8x().b[1][4]++;cov_rd4yihs8x().s[17]++;return null;}}handleSuccess(e){cov_rd4yihs8x().f[6]++;cov_rd4yihs8x().s[18]++;if(this.isLoading=!1,this.errorType=null,e.isFirstAccess){cov_rd4yihs8x().b[2][0]++;cov_rd4yihs8x().s[19]++;this.router.navigate(["/auth/first-access"]);cov_rd4yihs8x().s[20]++;return;}else{cov_rd4yihs8x().b[2][1]++;}let i=(cov_rd4yihs8x().s[21]++,this.route?.snapshot.queryParamMap.get("returnUrl"));cov_rd4yihs8x().s[22]++;if(i?.startsWith("/")){cov_rd4yihs8x().b[3][0]++;cov_rd4yihs8x().s[23]++;this.router.navigateByUrl(i);cov_rd4yihs8x().s[24]++;return;}else{cov_rd4yihs8x().b[3][1]++;}cov_rd4yihs8x().s[25]++;this.router.navigate(["/dashboard"]);}handleError(e){cov_rd4yihs8x().f[7]++;cov_rd4yihs8x().s[26]++;if(this.isLoading=!1,e instanceof o){cov_rd4yihs8x().b[4][0]++;cov_rd4yihs8x().s[27]++;if((cov_rd4yihs8x().b[6][0]++,e.status===400)||(cov_rd4yihs8x().b[6][1]++,e.status===401)){cov_rd4yihs8x().b[5][0]++;cov_rd4yihs8x().s[28]++;this.errorType=r.USERNAME_OR_PASSWORD_WRONG;cov_rd4yihs8x().s[29]++;return;}else{cov_rd4yihs8x().b[5][1]++;}cov_rd4yihs8x().s[30]++;if(e.status===409){cov_rd4yihs8x().b[7][0]++;cov_rd4yihs8x().s[31]++;this.errorType=r.NEW_PASSWORD_EQUALS_TEMP;cov_rd4yihs8x().s[32]++;return;}else{cov_rd4yihs8x().b[7][1]++;}}else{cov_rd4yihs8x().b[4][1]++;}cov_rd4yihs8x().s[33]++;this.errorType=r.USERNAME_OR_PASSWORD_WRONG;}};export{r as a,R as b};//# sourceMappingURL=chunk-AMU5RXFQ.js.map +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJyIiwiY292X3JkNHlpaHM4eCIsInMiLCJ0IiwiZiIsIlVTRVJOQU1FX09SX1BBU1NXT1JEX1dST05HIiwiVVNFUk5BTUVfT1JfVEVNUF9QQVNTV09SRF9XUk9ORyIsIk5FV19QQVNTV09SRF9FUVVBTFNfVEVNUCIsIk5FV19QQVNTV09SRF9OT1RfVkFMSUQiLCJiIiwiUiIsImF1dGhTZXJ2aWNlIiwiYSIsIl8iLCJyb3V0ZXIiLCJTIiwicm91dGUiLCJuIiwib3B0aW9uYWwiLCJlcnJvclR5cGVTdGF0ZSIsImlzTG9hZGluZ1N0YXRlIiwiZXJyb3JUeXBlIiwiZSIsInNldCIsImlzTG9hZGluZyIsImxvZ2luRXJyb3JNZXNzYWdlIiwiaGFuZGxlU3VjY2VzcyIsImlzRmlyc3RBY2Nlc3MiLCJuYXZpZ2F0ZSIsImkiLCJzbmFwc2hvdCIsInF1ZXJ5UGFyYW1NYXAiLCJnZXQiLCJzdGFydHNXaXRoIiwibmF2aWdhdGVCeVVybCIsImhhbmRsZUVycm9yIiwibyIsInN0YXR1cyJdLCJzb3VyY2VzIjpbInNyYy9hcHAvZmVhdHVyZXMvdXNlci1hdXRoL21vZGVscy9hdXRoLWVycm9yLXR5cGUuZW51bS50cyIsInNyYy9hcHAvZmVhdHVyZXMvdXNlci1hdXRoL2NvbXBvbmVudHMvYXV0aC1iYXNlL2F1dGgtYmFzZS5jb21wb25lbnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGVudW0gQXV0aEVycm9yVHlwZSB7XG5cdFVTRVJOQU1FX09SX1BBU1NXT1JEX1dST05HID0gJ1VTRVJOQU1FX09SX1BBU1NXT1JEX1dST05HJyxcblx0VVNFUk5BTUVfT1JfVEVNUF9QQVNTV09SRF9XUk9ORyA9ICdVU0VSTkFNRV9PUl9URU1QX1BBU1NXT1JEX1dST05HJyxcblx0TkVXX1BBU1NXT1JEX0VRVUFMU19URU1QID0gJ05FV19QQVNTV09SRF9FUVVBTFNfVEVNUCcsXG5cdE5FV19QQVNTV09SRF9OT1RfVkFMSUQgPSAnTkVXX1BBU1NXT1JEX05PVF9WQUxJRCcsXG59XG4iLCJpbXBvcnQgeyBpbmplY3QsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSHR0cEVycm9yUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IEludGVybmFsQXV0aFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL3NlcnZpY2VzL2ludGVybmFsLWF1dGguc2VydmljZSc7XG5pbXBvcnQgeyBBdXRoRXJyb3JUeXBlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2F1dGgtZXJyb3ItdHlwZS5lbnVtJztcbmltcG9ydCB7IFVzZXJTZXNzaW9uIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3VzZXItc2Vzc2lvbi5tb2RlbCc7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBdXRoQmFzZUNvbXBvbmVudCB7XG5cdHByb3RlY3RlZCByZWFkb25seSBhdXRoU2VydmljZSA9IGluamVjdChJbnRlcm5hbEF1dGhTZXJ2aWNlKTtcblx0cHJvdGVjdGVkIHJlYWRvbmx5IHJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xuXHRwcm90ZWN0ZWQgcmVhZG9ubHkgcm91dGUgPSBpbmplY3QoQWN0aXZhdGVkUm91dGUsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG5cdHByaXZhdGUgcmVhZG9ubHkgZXJyb3JUeXBlU3RhdGUgPSBzaWduYWw8QXV0aEVycm9yVHlwZSB8IG51bGw+KG51bGwpO1xuXHRwcml2YXRlIHJlYWRvbmx5IGlzTG9hZGluZ1N0YXRlID0gc2lnbmFsKGZhbHNlKTtcblxuXHRwdWJsaWMgZ2V0IGVycm9yVHlwZSgpOiBBdXRoRXJyb3JUeXBlIHwgbnVsbCB7XG5cdFx0cmV0dXJuIHRoaXMuZXJyb3JUeXBlU3RhdGUoKTtcblx0fVxuXG5cdHB1YmxpYyBzZXQgZXJyb3JUeXBlKHZhbHVlOiBBdXRoRXJyb3JUeXBlIHwgbnVsbCkge1xuXHRcdHRoaXMuZXJyb3JUeXBlU3RhdGUuc2V0KHZhbHVlKTtcblx0fVxuXG5cdHB1YmxpYyBnZXQgaXNMb2FkaW5nKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLmlzTG9hZGluZ1N0YXRlKCk7XG5cdH1cblxuXHRwdWJsaWMgc2V0IGlzTG9hZGluZyh2YWx1ZTogYm9vbGVhbikge1xuXHRcdHRoaXMuaXNMb2FkaW5nU3RhdGUuc2V0KHZhbHVlKTtcblx0fVxuXG5cdHB1YmxpYyBnZXQgbG9naW5FcnJvck1lc3NhZ2UoKTogc3RyaW5nIHwgbnVsbCB7XG5cdFx0c3dpdGNoICh0aGlzLmVycm9yVHlwZSkge1xuXHRcdFx0Y2FzZSBBdXRoRXJyb3JUeXBlLlVTRVJOQU1FX09SX1BBU1NXT1JEX1dST05HOlxuXHRcdFx0XHRyZXR1cm4gJ1V0ZW50ZSBub24gdHJvdmF0bzogdXNlcm5hbWUgbyBwYXNzd29yZCBlcnJhdGkuJztcblx0XHRcdGNhc2UgQXV0aEVycm9yVHlwZS5ORVdfUEFTU1dPUkRfRVFVQUxTX1RFTVA6XG5cdFx0XHRcdHJldHVybiAnTGEgbnVvdmEgcGFzc3dvcmQgZGV2ZSBlc3NlcmUgZGl2ZXJzYSBkYSBxdWVsbGEgdGVtcG9yYW5lYS4nO1xuXHRcdFx0Y2FzZSBBdXRoRXJyb3JUeXBlLlVTRVJOQU1FX09SX1RFTVBfUEFTU1dPUkRfV1JPTkc6XG5cdFx0XHRcdHJldHVybiAnVXNlcm5hbWUgbyBwYXNzd29yZCB0ZW1wb3JhbmVhIGVycmF0aS4nO1xuXHRcdFx0Y2FzZSBBdXRoRXJyb3JUeXBlLk5FV19QQVNTV09SRF9OT1RfVkFMSUQ6XG5cdFx0XHRcdHJldHVybiAnTGEgbnVvdmEgcGFzc3dvcmQgbm9uIGUgdmFsaWRhLic7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgYWJzdHJhY3Qgb25Vc2VybmFtZUNoYW5nZSh2YWx1ZTogc3RyaW5nKTogdm9pZDtcblx0cHVibGljIGFic3RyYWN0IG9uU3VibWl0KCk6IHZvaWQ7XG5cblx0cHJvdGVjdGVkIGhhbmRsZVN1Y2Nlc3Moc2Vzc2lvbjogVXNlclNlc3Npb24pOiB2b2lkIHtcblx0XHR0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuXHRcdHRoaXMuZXJyb3JUeXBlID0gbnVsbDtcblxuXHRcdGlmIChzZXNzaW9uLmlzRmlyc3RBY2Nlc3MpIHtcblx0XHRcdHZvaWQgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvYXV0aC9maXJzdC1hY2Nlc3MnXSk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3QgcmV0dXJuVXJsID0gdGhpcy5yb3V0ZT8uc25hcHNob3QucXVlcnlQYXJhbU1hcC5nZXQoJ3JldHVyblVybCcpO1xuXHRcdGlmIChyZXR1cm5Vcmw/LnN0YXJ0c1dpdGgoJy8nKSkge1xuXHRcdFx0dm9pZCB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHJldHVyblVybCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dm9pZCB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9kYXNoYm9hcmQnXSk7XG5cdH1cblxuXHRwcm90ZWN0ZWQgaGFuZGxlRXJyb3IoZXJyb3I6IHVua25vd24pOiB2b2lkIHtcblx0XHR0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuXG5cdFx0aWYgKGVycm9yIGluc3RhbmNlb2YgSHR0cEVycm9yUmVzcG9uc2UpIHtcblx0XHRcdGlmIChlcnJvci5zdGF0dXMgPT09IDQwMCB8fCBlcnJvci5zdGF0dXMgPT09IDQwMSkge1xuXHRcdFx0XHR0aGlzLmVycm9yVHlwZSA9IEF1dGhFcnJvclR5cGUuVVNFUk5BTUVfT1JfUEFTU1dPUkRfV1JPTkc7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGVycm9yLnN0YXR1cyA9PT0gNDA5KSB7XG5cdFx0XHRcdHRoaXMuZXJyb3JUeXBlID0gQXV0aEVycm9yVHlwZS5ORVdfUEFTU1dPUkRfRVFVQUxTX1RFTVA7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR0aGlzLmVycm9yVHlwZSA9IEF1dGhFcnJvclR5cGUuVVNFUk5BTUVfT1JfUEFTU1dPUkRfV1JPTkc7XG5cdH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijt3UUFBQSxHQUFZLENBQUFBLENBQUEsRUFBQUMsYUFBQSxHQUFBQyxDQUFBLE1BQVosU0FBWUMsQ0FBQSxDQUFhLENBQUFGLGFBQUEsR0FBQUcsQ0FBQSxLQUFBSCxDQUFBLGdCQUFBQyxDQUFBLE1BQ3hCLE9BQUFDLENBQUEsQ0FBQUUsMEJBQUEsOEJBQ0FGLENBQUEsQ0FBQUcsK0JBQUEsbUNBQ0FILENBQUEsQ0FBQUksd0JBQUEsNEJBQ0FKLENBQUEsQ0FBQUssc0JBQUEsMEJBSldMLENBS1osR0FMWSxDQUFBRixhQUFBLEdBQUFRLENBQUEsU0FBQVQsQ0FBQSxJQUFBQyxhQUFBLEdBQUFRLENBQUEsU0FBYSxNQ09uQlIsYUFBQSxHQUFBQyxDQUFBLFNBQWdCLENBQUFRLENBQUEsQ0FBaEIsS0FBaUMsQ0FDbkJDLFdBQUEsRUFBQVYsYUFBQSxHQUFBQyxDQUFBLE1BQWNVLENBQUEsQ0FBT0MsQ0FBbUIsR0FDeENDLE1BQUEsRUFBQWIsYUFBQSxHQUFBQyxDQUFBLE1BQVNVLENBQUEsQ0FBT0csQ0FBTSxHQUN0QkMsS0FBQSxFQUFBZixhQUFBLEdBQUFDLENBQUEsTUFBUVUsQ0FBQSxDQUFPSyxDQUFBLENBQWdCLENBQUVDLFFBQUEsQ0FBVSxFQUFJLENBQUUsR0FDbkRDLGNBQUEsRUFBQWxCLGFBQUEsR0FBQUMsQ0FBQSxNQUFpQkEsQ0FBQSxDQUE2QixJQUFJLEdBQ2xEa0IsY0FBQSxFQUFBbkIsYUFBQSxHQUFBQyxDQUFBLE1BQWlCQSxDQUFBLENBQU8sRUFBSyxHQUU5QyxHQUFXLENBQUFtQixVQUFBLENBQVMsQ0FBQXBCLGFBQUEsR0FBQUcsQ0FBQSxLQUFBSCxDQUFBLGdCQUFBQyxDQUFBLE1BQ25CLE1BQU8sTUFBS2lCLGNBQUEsQ0FBYyxDQUMzQixFQUVBLEdBQVcsQ0FBQUUsVUFBVUMsQ0FBQSxDQUEyQixDQUFBckIsYUFBQSxH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 \ No newline at end of file diff --git a/frontend/dist-instrumented/chunk-AMU5RXFQ.js.map b/frontend/dist-instrumented/chunk-AMU5RXFQ.js.map new file mode 100644 index 00000000..b4bafebe --- /dev/null +++ b/frontend/dist-instrumented/chunk-AMU5RXFQ.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["src/app/features/user-auth/models/auth-error-type.enum.ts", "src/app/features/user-auth/components/auth-base/auth-base.component.ts"], + "sourcesContent": ["export enum AuthErrorType {\n\tUSERNAME_OR_PASSWORD_WRONG = 'USERNAME_OR_PASSWORD_WRONG',\n\tUSERNAME_OR_TEMP_PASSWORD_WRONG = 'USERNAME_OR_TEMP_PASSWORD_WRONG',\n\tNEW_PASSWORD_EQUALS_TEMP = 'NEW_PASSWORD_EQUALS_TEMP',\n\tNEW_PASSWORD_NOT_VALID = 'NEW_PASSWORD_NOT_VALID',\n}\n", "import { inject, signal } from '@angular/core';\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { InternalAuthService } from '../../../../core/services/internal-auth.service';\nimport { AuthErrorType } from '../../models/auth-error-type.enum';\nimport { UserSession } from '../../models/user-session.model';\n\nexport abstract class AuthBaseComponent {\n\tprotected readonly authService = inject(InternalAuthService);\n\tprotected readonly router = inject(Router);\n\tprotected readonly route = inject(ActivatedRoute, { optional: true });\n\tprivate readonly errorTypeState = signal(null);\n\tprivate readonly isLoadingState = signal(false);\n\n\tpublic get errorType(): AuthErrorType | null {\n\t\treturn this.errorTypeState();\n\t}\n\n\tpublic set errorType(value: AuthErrorType | null) {\n\t\tthis.errorTypeState.set(value);\n\t}\n\n\tpublic get isLoading(): boolean {\n\t\treturn this.isLoadingState();\n\t}\n\n\tpublic set isLoading(value: boolean) {\n\t\tthis.isLoadingState.set(value);\n\t}\n\n\tpublic get loginErrorMessage(): string | null {\n\t\tswitch (this.errorType) {\n\t\t\tcase AuthErrorType.USERNAME_OR_PASSWORD_WRONG:\n\t\t\t\treturn 'Utente non trovato: username o password errati.';\n\t\t\tcase AuthErrorType.NEW_PASSWORD_EQUALS_TEMP:\n\t\t\t\treturn 'La nuova password deve essere diversa da quella temporanea.';\n\t\t\tcase AuthErrorType.USERNAME_OR_TEMP_PASSWORD_WRONG:\n\t\t\t\treturn 'Username o password temporanea errati.';\n\t\t\tcase AuthErrorType.NEW_PASSWORD_NOT_VALID:\n\t\t\t\treturn 'La nuova password non e valida.';\n\t\t\tdefault:\n\t\t\t\treturn null;\n\t\t}\n\t}\n\n\tpublic abstract onUsernameChange(value: string): void;\n\tpublic abstract onSubmit(): void;\n\n\tprotected handleSuccess(session: UserSession): void {\n\t\tthis.isLoading = false;\n\t\tthis.errorType = null;\n\n\t\tif (session.isFirstAccess) {\n\t\t\tvoid this.router.navigate(['/auth/first-access']);\n\t\t\treturn;\n\t\t}\n\n\t\tconst returnUrl = this.route?.snapshot.queryParamMap.get('returnUrl');\n\t\tif (returnUrl?.startsWith('/')) {\n\t\t\tvoid this.router.navigateByUrl(returnUrl);\n\t\t\treturn;\n\t\t}\n\n\t\tvoid this.router.navigate(['/dashboard']);\n\t}\n\n\tprotected handleError(error: unknown): void {\n\t\tthis.isLoading = false;\n\n\t\tif (error instanceof HttpErrorResponse) {\n\t\t\tif (error.status === 400 || error.status === 401) {\n\t\t\t\tthis.errorType = AuthErrorType.USERNAME_OR_PASSWORD_WRONG;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (error.status === 409) {\n\t\t\t\tthis.errorType = AuthErrorType.NEW_PASSWORD_EQUALS_TEMP;\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tthis.errorType = AuthErrorType.USERNAME_OR_PASSWORD_WRONG;\n\t}\n}\n"], + "mappings": "+KAAA,IAAYA,GAAZ,SAAYA,EAAa,CACxBA,OAAAA,EAAA,2BAAA,6BACAA,EAAA,gCAAA,kCACAA,EAAA,yBAAA,2BACAA,EAAA,uBAAA,yBAJWA,CAKZ,GALYA,GAAa,CAAA,CAAA,ECOnB,IAAgBC,EAAhB,KAAiC,CACnBC,YAAcC,EAAOC,CAAmB,EACxCC,OAASF,EAAOG,CAAM,EACtBC,MAAQJ,EAAOK,EAAgB,CAAEC,SAAU,EAAI,CAAE,EACnDC,eAAiBC,EAA6B,IAAI,EAClDC,eAAiBD,EAAO,EAAK,EAE9C,IAAWE,WAAS,CACnB,OAAO,KAAKH,eAAc,CAC3B,CAEA,IAAWG,UAAUC,EAA2B,CAC/C,KAAKJ,eAAeK,IAAID,CAAK,CAC9B,CAEA,IAAWE,WAAS,CACnB,OAAO,KAAKJ,eAAc,CAC3B,CAEA,IAAWI,UAAUF,EAAc,CAClC,KAAKF,eAAeG,IAAID,CAAK,CAC9B,CAEA,IAAWG,mBAAiB,CAC3B,OAAQ,KAAKJ,UAAS,CACrB,KAAKK,EAAcC,2BAClB,MAAO,kDACR,KAAKD,EAAcE,yBAClB,MAAO,8DACR,KAAKF,EAAcG,gCAClB,MAAO,yCACR,KAAKH,EAAcI,uBAClB,MAAO,kCACR,QACC,OAAO,IACT,CACD,CAKUC,cAAcC,EAAoB,CAI3C,GAHA,KAAKR,UAAY,GACjB,KAAKH,UAAY,KAEbW,EAAQC,cAAe,CACrB,KAAKpB,OAAOqB,SAAS,CAAC,oBAAoB,CAAC,EAChD,MACD,CAEA,IAAMC,EAAY,KAAKpB,OAAOqB,SAASC,cAAcC,IAAI,WAAW,EACpE,GAAIH,GAAWI,WAAW,GAAG,EAAG,CAC1B,KAAK1B,OAAO2B,cAAcL,CAAS,EACxC,MACD,CAEK,KAAKtB,OAAOqB,SAAS,CAAC,YAAY,CAAC,CACzC,CAEUO,YAAYC,EAAc,CAGnC,GAFA,KAAKlB,UAAY,GAEbkB,aAAiBC,EAAmB,CACvC,GAAID,EAAME,SAAW,KAAOF,EAAME,SAAW,IAAK,CACjD,KAAKvB,UAAYK,EAAcC,2BAC/B,MACD,CAEA,GAAIe,EAAME,SAAW,IAAK,CACzB,KAAKvB,UAAYK,EAAcE,yBAC/B,MACD,CACD,CAEA,KAAKP,UAAYK,EAAcC,0BAChC", + "names": ["AuthErrorType", "AuthBaseComponent", "authService", "inject", "InternalAuthService", "router", "Router", "route", "ActivatedRoute", "optional", "errorTypeState", "signal", "isLoadingState", "errorType", "value", "set", "isLoading", "loginErrorMessage", "AuthErrorType", "USERNAME_OR_PASSWORD_WRONG", "NEW_PASSWORD_EQUALS_TEMP", "USERNAME_OR_TEMP_PASSWORD_WRONG", "NEW_PASSWORD_NOT_VALID", "handleSuccess", "session", "isFirstAccess", "navigate", "returnUrl", "snapshot", "queryParamMap", "get", "startsWith", "navigateByUrl", "handleError", "error", "HttpErrorResponse", "status"] +} diff --git a/frontend/dist-instrumented/chunk-BESIDB4Y.js b/frontend/dist-instrumented/chunk-BESIDB4Y.js new file mode 100644 index 00000000..29e5e2ed --- /dev/null +++ b/frontend/dist-instrumented/chunk-BESIDB4Y.js @@ -0,0 +1,3 @@ +function cov_e5pq4n1gt(){var path="/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-BESIDB4Y.js";var hash="e0adcc1329e9511db7a1bc12d8a92b24a81006a1";var global=new Function("return this")();var gcv="__coverage__";var coverageData={path:"/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-BESIDB4Y.js",statementMap:{"0":{start:{line:1,column:141},end:{line:1,column:2755}},"1":{start:{line:1,column:163},end:{line:1,column:195}},"2":{start:{line:1,column:209},end:{line:1,column:222}},"3":{start:{line:1,column:235},end:{line:1,column:247}},"4":{start:{line:1,column:258},end:{line:1,column:261}},"5":{start:{line:1,column:272},end:{line:1,column:275}},"6":{start:{line:1,column:288},end:{line:1,column:309}},"7":{start:{line:1,column:321},end:{line:1,column:342}},"8":{start:{line:1,column:360},end:{line:1,column:389}},"9":{start:{line:1,column:372},end:{line:1,column:388}},"10":{start:{line:1,column:407},end:{line:1,column:2742}},"11":{start:{line:1,column:2307},end:{line:1,column:2705}},"12":{start:{line:1,column:2506},end:{line:1,column:2525}},"13":{start:{line:1,column:2576},end:{line:1,column:2596}},"14":{start:{line:1,column:2743},end:{line:1,column:2751}}},fnMap:{"0":{name:"(anonymous_0)",decl:{start:{line:1,column:142},end:{line:1,column:143}},loc:{start:{line:1,column:146},end:{line:1,column:2752}},line:1},"1":{name:"(anonymous_1)",decl:{start:{line:1,column:276},end:{line:1,column:277}},loc:{start:{line:1,column:287},end:{line:1,column:310}},line:1},"2":{name:"(anonymous_2)",decl:{start:{line:1,column:310},end:{line:1,column:311}},loc:{start:{line:1,column:320},end:{line:1,column:343}},line:1},"3":{name:"(anonymous_3)",decl:{start:{line:1,column:360},end:{line:1,column:361}},loc:{start:{line:1,column:371},end:{line:1,column:389}},line:1},"4":{name:"(anonymous_4)",decl:{start:{line:1,column:2293},end:{line:1,column:2294}},loc:{start:{line:1,column:2306},end:{line:1,column:2706}},line:1},"5":{name:"(anonymous_5)",decl:{start:{line:1,column:2495},end:{line:1,column:2496}},loc:{start:{line:1,column:2505},end:{line:1,column:2526}},line:1},"6":{name:"(anonymous_6)",decl:{start:{line:1,column:2565},end:{line:1,column:2566}},loc:{start:{line:1,column:2575},end:{line:1,column:2597}},line:1}},branchMap:{"0":{loc:{start:{line:1,column:383},end:{line:1,column:387}},type:"binary-expr",locations:[{start:{line:1,column:383},end:{line:1,column:384}},{start:{line:1,column:386},end:{line:1,column:387}}],line:1},"1":{loc:{start:{line:1,column:2307},end:{line:1,column:2613}},type:"binary-expr",locations:[{start:{line:1,column:2307},end:{line:1,column:2310}},{start:{line:1,column:2313},end:{line:1,column:2612}}],line:1},"2":{loc:{start:{line:1,column:2614},end:{line:1,column:2705}},type:"binary-expr",locations:[{start:{line:1,column:2614},end:{line:1,column:2617}},{start:{line:1,column:2620},end:{line:1,column:2704}}],line:1}},s:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0},f:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0},b:{"0":[0,0],"1":[0,0],"2":[0,0]},inputSourceMap:{version:3,sources:["src/app/shared/components/confirm-dialog/confirm-dialog.component.ts","src/app/shared/components/confirm-dialog/confirm-dialog.component.html"],sourcesContent:["import { ChangeDetectionStrategy, Component, input, output } from '@angular/core';\n\n@Component({\n selector: 'app-confirm-dialog',\n imports: [],\n templateUrl: './confirm-dialog.component.html',\n styleUrl: './confirm-dialog.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ConfirmDialogComponent {\n public readonly message = input('Confermi questa operazione?');\n public readonly confirmLabel = input('Conferma');\n public readonly cancelLabel = input('Annulla');\n\n public readonly confirmed = output();\n public readonly cancelled = output();\n\n public onConfirm(): void {\n this.confirmed.emit();\n }\n\n public onCancel(): void {\n this.cancelled.emit();\n }\n}\n","\n
\n
\n \n \n \n
\n

Conferma operazione

\n
\n\n

{{ message() }}

\n\n
\n \n \n
\n
"],mappings:"uIASA,IAAaA,GAAsB,IAAA,CAA7B,MAAOA,CAAsB,CACfC,QAAUC,EAAM,6BAA6B,EAC7CC,aAAeD,EAAM,UAAU,EAC/BE,YAAcF,EAAM,SAAS,EAE7BG,UAAYC,EAAM,EAClBC,UAAYD,EAAM,EAE3BE,WAAS,CACZ,KAAKH,UAAUI,KAAI,CACvB,CAEOC,UAAQ,CACX,KAAKH,UAAUE,KAAI,CACvB,4CAdST,EAAsB,2BAAtBA,EAAsBW,UAAA,CAAA,CAAA,oBAAA,CAAA,EAAAC,OAAA,CAAAX,QAAA,CAAA,EAAA,SAAA,EAAAE,aAAA,CAAA,EAAA,cAAA,EAAAC,YAAA,CAAA,EAAA,aAAA,CAAA,EAAAS,QAAA,CAAAR,UAAA,YAAAE,UAAA,WAAA,EAAAO,MAAA,GAAAC,KAAA,EAAAC,OAAA,CAAA,CAAA,OAAA,GAAA,kBAAA,uBAAA,mBAAA,yBAAA,EAAA,QAAA,UAAA,OAAA,SAAA,WAAA,WAAA,kBAAA,cAAA,SAAA,mBAAA,WAAA,MAAA,aAAA,2BAAA,oBAAA,EAAA,CAAA,EAAA,OAAA,eAAA,QAAA,WAAA,mBAAA,cAAA,OAAA,MAAA,EAAA,CAAA,EAAA,OAAA,MAAA,MAAA,gBAAA,eAAA,iBAAA,aAAA,cAAA,EAAA,CAAA,OAAA,OAAA,UAAA,YAAA,eAAA,IAAA,SAAA,eAAA,EAAA,MAAA,MAAA,gBAAA,EAAA,CAAA,iBAAA,QAAA,kBAAA,QAAA,IAAA,+KAAA,EAAA,CAAA,KAAA,uBAAA,EAAA,UAAA,YAAA,gBAAA,EAAA,CAAA,KAAA,yBAAA,EAAA,OAAA,OAAA,UAAA,gBAAA,EAAA,CAAA,EAAA,OAAA,eAAA,cAAA,QAAA,WAAA,mBAAA,cAAA,OAAA,MAAA,EAAA,CAAA,OAAA,SAAA,EAAA,iBAAA,aAAA,SAAA,mBAAA,WAAA,OAAA,OAAA,UAAA,gBAAA,iBAAA,aAAA,oBAAA,0BAAA,iCAAA,kCAAA,EAAA,OAAA,EAAA,CAAA,OAAA,SAAA,EAAA,iBAAA,aAAA,SAAA,iBAAA,aAAA,OAAA,OAAA,UAAA,gBAAA,aAAA,aAAA,mBAAA,0BAAA,iCAAA,gCAAA,sBAAA,EAAA,OAAA,CAAA,EAAAC,SAAA,SAAAC,EAAAC,EAAA,CAAAD,EAAA,ICTnCE,EAAA,EAAA,SAAA,CAAA,EACgL,EAAA,MAAA,CAAA,EACvF,EAAA,MAAA,CAAA,MAE7EA,EAAA,EAAA,MAAA,CAAA,EAEIC,EAAA,EAAA,OAAA,CAAA,EAEJC,EAAA,EAAM,MAEVF,EAAA,EAAA,KAAA,CAAA,EAAuEG,EAAA,EAAA,qBAAA,EAAmBD,EAAA,EAAK,EAGnGF,EAAA,EAAA,IAAA,CAAA,EAAwEG,EAAA,CAAA,EAAeD,EAAA,EAEvFF,EAAA,EAAA,MAAA,CAAA,EAAiG,GAAA,SAAA,CAAA,EACvEI,EAAA,QAAA,UAAA,CAAA,OAASL,EAAAT,SAAA,CAAU,CAAA,EAErCa,EAAA,EAAA,EACJD,EAAA,EACAF,EAAA,GAAA,SAAA,CAAA,EAAsBI,EAAA,QAAA,UAAA,CAAA,OAASL,EAAAX,UAAA,CAAW,CAAA,EAEtCe,EAAA,EAAA,EACJD,EAAA,EAAS,EACP,SAXkEG,EAAA,CAAA,EAAAC,EAAAP,EAAAlB,QAAA,CAAA,EAKhEwB,EAAA,CAAA,EAAAE,EAAA,IAAAR,EAAAf,YAAA,EAAA,GAAA,EAIAqB,EAAA,CAAA,EAAAE,EAAA,IAAAR,EAAAhB,aAAA,EAAA,GAAA,+CDbCH,CAAsB,GAAA",names:["ConfirmDialogComponent","message","input","confirmLabel","cancelLabel","confirmed","output","cancelled","onConfirm","emit","onCancel","selectors","inputs","outputs","decls","vars","consts","template","rf","ctx","\u0275\u0275domElementStart","\u0275\u0275domElement","\u0275\u0275domElementEnd","\u0275\u0275text","\u0275\u0275domListener","\u0275\u0275advance","\u0275\u0275textInterpolate","\u0275\u0275textInterpolate1"]},_coverageSchema:"1a1c01bbd47fc00a2c39e90264f33305004495a9",hash:"e0adcc1329e9511db7a1bc12d8a92b24a81006a1"};var coverage=global[gcv]||(global[gcv]={});if(!coverage[path]||coverage[path].hash!==hash){coverage[path]=coverageData;}var actualCoverage=coverage[path];{// @ts-ignore +cov_e5pq4n1gt=function(){return actualCoverage;};}return actualCoverage;}cov_e5pq4n1gt();import{Ab as n,Bb as p,Cb as d,Ka as f,Sb as c,Tb as a,X as s,Y as b,gb as e,hb as t,ib as u,ob as m,wa as r}from"./chunk-RYTNMYZW.js";var y=(cov_e5pq4n1gt().s[0]++,(()=>{cov_e5pq4n1gt().f[0]++;class i{message=(cov_e5pq4n1gt().s[1]++,a("Confermi questa operazione?"));confirmLabel=(cov_e5pq4n1gt().s[2]++,a("Conferma"));cancelLabel=(cov_e5pq4n1gt().s[3]++,a("Annulla"));confirmed=(cov_e5pq4n1gt().s[4]++,c());cancelled=(cov_e5pq4n1gt().s[5]++,c());onConfirm(){cov_e5pq4n1gt().f[1]++;cov_e5pq4n1gt().s[6]++;this.confirmed.emit();}onCancel(){cov_e5pq4n1gt().f[2]++;cov_e5pq4n1gt().s[7]++;this.cancelled.emit();}static ɵfac=(cov_e5pq4n1gt().s[8]++,function(l){cov_e5pq4n1gt().f[3]++;cov_e5pq4n1gt().s[9]++;return new((cov_e5pq4n1gt().b[0][0]++,l)||(cov_e5pq4n1gt().b[0][1]++,i))();});static ɵcmp=(cov_e5pq4n1gt().s[10]++,f({type:i,selectors:[["app-confirm-dialog"]],inputs:{message:[1,"message"],confirmLabel:[1,"confirmLabel"],cancelLabel:[1,"cancelLabel"]},outputs:{confirmed:"confirmed",cancelled:"cancelled"},decls:14,vars:3,consts:[["open","","aria-labelledby","confirm-dialog-title","aria-describedby","confirm-dialog-message",1,"fixed","inset-0","z-50","m-auto","w-[95vw]","max-w-md","overflow-hidden","rounded-2xl","border","border-amber-200","bg-white","p-0","shadow-2xl","backdrop:bg-slate-900/50","focus:outline-none"],[1,"flex","items-center","gap-3","border-b","border-amber-200","bg-amber-50","px-5","py-4"],[1,"flex","h-8","w-8","flex-shrink-0","items-center","justify-center","rounded-lg","bg-amber-100"],["fill","none","viewBox","0 0 24 24","stroke-width","2","stroke","currentColor",1,"h-4","w-4","text-amber-700"],["stroke-linecap","round","stroke-linejoin","round","d","M12 9v3.75m9.303 3.376c.866 1.5-.217 3.374-1.948 3.374H4.645c-1.73 0-2.813-1.874-1.948-3.374L10.051 3.378c.866-1.5 3.032-1.5 3.898 0l7.354 12.748zM12 16.5h.007v.008H12V16.5z"],["id","confirm-dialog-title",1,"text-sm","font-bold","text-slate-900"],["id","confirm-dialog-message",1,"px-5","py-4","text-sm","text-slate-700"],[1,"flex","items-center","justify-end","gap-2","border-t","border-slate-100","bg-slate-50","px-5","py-3"],["type","button",1,"cursor-pointer","rounded-lg","border","border-slate-200","bg-white","px-4","py-2","text-sm","font-semibold","text-slate-700","transition","hover:bg-slate-50","focus-visible:outline-2","focus-visible:outline-offset-2","focus-visible:outline-slate-400",3,"click"],["type","button",1,"cursor-pointer","rounded-lg","border","border-red-600","bg-red-600","px-4","py-2","text-sm","font-semibold","text-white","transition","hover:bg-red-700","focus-visible:outline-2","focus-visible:outline-offset-2","focus-visible:outline-red-600","active:scale-[0.98]",3,"click"]],template:function(l,o){cov_e5pq4n1gt().f[4]++;cov_e5pq4n1gt().s[11]++;(cov_e5pq4n1gt().b[1][0]++,l&1)&&(cov_e5pq4n1gt().b[1][1]++,e(0,"dialog",0)(1,"div",1)(2,"div",2),s(),e(3,"svg",3),u(4,"path",4),t()(),b(),e(5,"h2",5),n(6,"Conferma operazione"),t()(),e(7,"p",6),n(8),t(),e(9,"div",7)(10,"button",8),m("click",function(){cov_e5pq4n1gt().f[5]++;cov_e5pq4n1gt().s[12]++;return o.onCancel();}),n(11),t(),e(12,"button",9),m("click",function(){cov_e5pq4n1gt().f[6]++;cov_e5pq4n1gt().s[13]++;return o.onConfirm();}),n(13),t()()()),(cov_e5pq4n1gt().b[2][0]++,l&2)&&(cov_e5pq4n1gt().b[2][1]++,r(8),p(o.message()),r(3),d(" ",o.cancelLabel()," "),r(2),d(" ",o.confirmLabel()," "));},encapsulation:2,changeDetection:0}));}cov_e5pq4n1gt().s[14]++;return i;})());export{y as a};//# sourceMappingURL=chunk-BESIDB4Y.js.map +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ5IiwiY292X2U1cHE0bjFndCIsInMiLCJmIiwiaSIsIm1lc3NhZ2UiLCJhIiwiY29uZmlybUxhYmVsIiwiY2FuY2VsTGFiZWwiLCJjb25maXJtZWQiLCJjIiwiY2FuY2VsbGVkIiwib25Db25maXJtIiwiZW1pdCIsIm9uQ2FuY2VsIiwiybVmYWMiLCJsIiwiYiIsIsm1Y21wIiwidHlwZSIsInNlbGVjdG9ycyIsImlucHV0cyIsIm91dHB1dHMiLCJkZWNscyIsInZhcnMiLCJjb25zdHMiLCJ0ZW1wbGF0ZSIsIm8iLCJlIiwidSIsInQiLCJuIiwibSIsInIiLCJwIiwiZCIsImVuY2Fwc3VsYXRpb24iLCJjaGFuZ2VEZXRlY3Rpb24iXSwic291cmNlcyI6WyJzcmMvYXBwL3NoYXJlZC9jb21wb25lbnRzL2NvbmZpcm0tZGlhbG9nL2NvbmZpcm0tZGlhbG9nLmNvbXBvbmVudC50cyIsInNyYy9hcHAvc2hhcmVkL2NvbXBvbmVudHMvY29uZmlybS1kaWFsb2cvY29uZmlybS1kaWFsb2cuY29tcG9uZW50Lmh0bWwiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgaW5wdXQsIG91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2FwcC1jb25maXJtLWRpYWxvZycsXG4gICAgaW1wb3J0czogW10sXG4gICAgdGVtcGxhdGVVcmw6ICcuL2NvbmZpcm0tZGlhbG9nLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybDogJy4vY29uZmlybS1kaWFsb2cuY29tcG9uZW50LmNzcycsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIENvbmZpcm1EaWFsb2dDb21wb25lbnQge1xuICAgIHB1YmxpYyByZWFkb25seSBtZXNzYWdlID0gaW5wdXQoJ0NvbmZlcm1pIHF1ZXN0YSBvcGVyYXppb25lPycpO1xuICAgIHB1YmxpYyByZWFkb25seSBjb25maXJtTGFiZWwgPSBpbnB1dCgnQ29uZmVybWEnKTtcbiAgICBwdWJsaWMgcmVhZG9ubHkgY2FuY2VsTGFiZWwgPSBpbnB1dCgnQW5udWxsYScpO1xuXG4gICAgcHVibGljIHJlYWRvbmx5IGNvbmZpcm1lZCA9IG91dHB1dDx2b2lkPigpO1xuICAgIHB1YmxpYyByZWFkb25seSBjYW5jZWxsZWQgPSBvdXRwdXQ8dm9pZD4oKTtcblxuICAgIHB1YmxpYyBvbkNvbmZpcm0oKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY29uZmlybWVkLmVtaXQoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25DYW5jZWwoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2FuY2VsbGVkLmVtaXQoKTtcbiAgICB9XG59XG4iLCI8ZGlhbG9nIG9wZW4gYXJpYS1sYWJlbGxlZGJ5PVwiY29uZmlybS1kaWFsb2ctdGl0bGVcIiBhcmlhLWRlc2NyaWJlZGJ5PVwiY29uZmlybS1kaWFsb2ctbWVzc2FnZVwiXG4gICAgY2xhc3M9XCJmaXhlZCBpbnNldC0wIHotNTAgbS1hdXRvIHctWzk1dnddIG1heC13LW1kIG92ZXJmbG93LWhpZGRlbiByb3VuZGVkLTJ4bCBib3JkZXIgYm9yZGVyLWFtYmVyLTIwMCBiZy13aGl0ZSBwLTAgc2hhZG93LTJ4bCBiYWNrZHJvcDpiZy1zbGF0ZS05MDAvNTAgZm9jdXM6b3V0bGluZS1ub25lXCI+XG4gICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0zIGJvcmRlci1iIGJvcmRlci1hbWJlci0yMDAgYmctYW1iZXItNTAgcHgtNSBweS00XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGgtOCB3LTggZmxleC1zaHJpbmstMCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZC1sZyBiZy1hbWJlci0xMDBcIj5cbiAgICAgICAgICAgIDxzdmcgY2xhc3M9XCJoLTQgdy00IHRleHQtYW1iZXItNzAwXCIgZmlsbD1cIm5vbmVcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgc3Ryb2tlLXdpZHRoPVwiMlwiXG4gICAgICAgICAgICAgICAgc3Ryb2tlPVwiY3VycmVudENvbG9yXCI+XG4gICAgICAgICAgICAgICAgPHBhdGggc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgZD1cIk0xMiA5djMuNzVtOS4zMDMgMy4zNzZjLjg2NiAxLjUtLjIxNyAzLjM3NC0xLjk0OCAzLjM3NEg0LjY0NWMtMS43MyAwLTIuODEzLTEuODc0LTEuOTQ4LTMuMzc0TDEwLjA1MSAzLjM3OGMuODY2LTEuNSAzLjAzMi0xLjUgMy44OTggMGw3LjM1NCAxMi43NDh6TTEyIDE2LjVoLjAwN3YuMDA4SDEyVjE2LjV6XCIgLz5cbiAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGgyIGlkPVwiY29uZmlybS1kaWFsb2ctdGl0bGVcIiBjbGFzcz1cInRleHQtc20gZm9udC1ib2xkIHRleHQtc2xhdGUtOTAwXCI+Q29uZmVybWEgb3BlcmF6aW9uZTwvaDI+XG4gICAgPC9kaXY+XG5cbiAgICA8cCBpZD1cImNvbmZpcm0tZGlhbG9nLW1lc3NhZ2VcIiBjbGFzcz1cInB4LTUgcHktNCB0ZXh0LXNtIHRleHQtc2xhdGUtNzAwXCI+e3sgbWVzc2FnZSgpIH19PC9wPlxuXG4gICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktZW5kIGdhcC0yIGJvcmRlci10IGJvcmRlci1zbGF0ZS0xMDAgYmctc2xhdGUtNTAgcHgtNSBweS0zXCI+XG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJvbkNhbmNlbCgpXCJcbiAgICAgICAgICAgIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgcm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLXNsYXRlLTIwMCBiZy13aGl0ZSBweC00IHB5LTIgdGV4dC1zbSBmb250LXNlbWlib2xkIHRleHQtc2xhdGUtNzAwIHRyYW5zaXRpb24gaG92ZXI6Ymctc2xhdGUtNTAgZm9jdXMtdmlzaWJsZTpvdXRsaW5lLTIgZm9jdXMtdmlzaWJsZTpvdXRsaW5lLW9mZnNldC0yIGZvY3VzLXZpc2libGU6b3V0bGluZS1zbGF0ZS00MDBcIj5cbiAgICAgICAgICAgIHt7IGNhbmNlbExhYmVsKCkgfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJvbkNvbmZpcm0oKVwiXG4gICAgICAgICAgICBjbGFzcz1cImN1cnNvci1wb2ludGVyIHJvdW5kZWQtbGcgYm9yZGVyIGJvcmRlci1yZWQtNjAwIGJnLXJlZC02MDAgcHgtNCBweS0yIHRleHQtc20gZm9udC1zZW1pYm9sZCB0ZXh0LXdoaXRlIHRyYW5zaXRpb24gaG92ZXI6YmctcmVkLTcwMCBmb2N1cy12aXNpYmxlOm91dGxpbmUtMiBmb2N1cy12aXNpYmxlOm91dGxpbmUtb2Zmc2V0LTIgZm9jdXMtdmlzaWJsZTpvdXRsaW5lLXJlZC02MDAgYWN0aXZlOnNjYWxlLVswLjk4XVwiPlxuICAgICAgICAgICAge3sgY29uZmlybUxhYmVsKCkgfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG48L2RpYWxvZz4iXSwibWFwcGluZ3MiOiI7Z09BU0EsR0FBYSxDQUFBQSxDQUFBLEVBQUFDLGFBQUEsR0FBQUMsQ0FBQSxPQUFzQixLQUFBRCxhQUFBLEdBQUFFLENBQUEsTUFBN0IsS0FBTyxDQUFBQyxDQUFzQixDQUNmQyxPQUFBLEVBQUFKLGFBQUEsR0FBQUMsQ0FBQSxNQUFVSSxDQUFBLENBQU0sNkJBQTZCLEdBQzdDQyxZQUFBLEVBQUFOLGFBQUEsR0FBQUMsQ0FBQSxNQUFlSSxDQUFBLENBQU0sVUFBVSxHQUMvQkUsV0FBQSxFQUFBUCxhQUFBLEdBQUFDLENBQUEsTUFBY0ksQ0FBQSxDQUFNLFNBQVMsR0FFN0JHLFNBQUEsRUFBQVIsYUFBQSxHQUFBQyxD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 \ No newline at end of file diff --git a/frontend/dist-instrumented/chunk-BESIDB4Y.js.map b/frontend/dist-instrumented/chunk-BESIDB4Y.js.map new file mode 100644 index 00000000..245e436d --- /dev/null +++ b/frontend/dist-instrumented/chunk-BESIDB4Y.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["src/app/shared/components/confirm-dialog/confirm-dialog.component.ts", "src/app/shared/components/confirm-dialog/confirm-dialog.component.html"], + "sourcesContent": ["import { ChangeDetectionStrategy, Component, input, output } from '@angular/core';\n\n@Component({\n selector: 'app-confirm-dialog',\n imports: [],\n templateUrl: './confirm-dialog.component.html',\n styleUrl: './confirm-dialog.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ConfirmDialogComponent {\n public readonly message = input('Confermi questa operazione?');\n public readonly confirmLabel = input('Conferma');\n public readonly cancelLabel = input('Annulla');\n\n public readonly confirmed = output();\n public readonly cancelled = output();\n\n public onConfirm(): void {\n this.confirmed.emit();\n }\n\n public onCancel(): void {\n this.cancelled.emit();\n }\n}\n", "\n
\n
\n \n \n \n
\n

Conferma operazione

\n
\n\n

{{ message() }}

\n\n
\n \n \n
\n
"], + "mappings": "uIASA,IAAaA,GAAsB,IAAA,CAA7B,MAAOA,CAAsB,CACfC,QAAUC,EAAM,6BAA6B,EAC7CC,aAAeD,EAAM,UAAU,EAC/BE,YAAcF,EAAM,SAAS,EAE7BG,UAAYC,EAAM,EAClBC,UAAYD,EAAM,EAE3BE,WAAS,CACZ,KAAKH,UAAUI,KAAI,CACvB,CAEOC,UAAQ,CACX,KAAKH,UAAUE,KAAI,CACvB,4CAdST,EAAsB,2BAAtBA,EAAsBW,UAAA,CAAA,CAAA,oBAAA,CAAA,EAAAC,OAAA,CAAAX,QAAA,CAAA,EAAA,SAAA,EAAAE,aAAA,CAAA,EAAA,cAAA,EAAAC,YAAA,CAAA,EAAA,aAAA,CAAA,EAAAS,QAAA,CAAAR,UAAA,YAAAE,UAAA,WAAA,EAAAO,MAAA,GAAAC,KAAA,EAAAC,OAAA,CAAA,CAAA,OAAA,GAAA,kBAAA,uBAAA,mBAAA,yBAAA,EAAA,QAAA,UAAA,OAAA,SAAA,WAAA,WAAA,kBAAA,cAAA,SAAA,mBAAA,WAAA,MAAA,aAAA,2BAAA,oBAAA,EAAA,CAAA,EAAA,OAAA,eAAA,QAAA,WAAA,mBAAA,cAAA,OAAA,MAAA,EAAA,CAAA,EAAA,OAAA,MAAA,MAAA,gBAAA,eAAA,iBAAA,aAAA,cAAA,EAAA,CAAA,OAAA,OAAA,UAAA,YAAA,eAAA,IAAA,SAAA,eAAA,EAAA,MAAA,MAAA,gBAAA,EAAA,CAAA,iBAAA,QAAA,kBAAA,QAAA,IAAA,+KAAA,EAAA,CAAA,KAAA,uBAAA,EAAA,UAAA,YAAA,gBAAA,EAAA,CAAA,KAAA,yBAAA,EAAA,OAAA,OAAA,UAAA,gBAAA,EAAA,CAAA,EAAA,OAAA,eAAA,cAAA,QAAA,WAAA,mBAAA,cAAA,OAAA,MAAA,EAAA,CAAA,OAAA,SAAA,EAAA,iBAAA,aAAA,SAAA,mBAAA,WAAA,OAAA,OAAA,UAAA,gBAAA,iBAAA,aAAA,oBAAA,0BAAA,iCAAA,kCAAA,EAAA,OAAA,EAAA,CAAA,OAAA,SAAA,EAAA,iBAAA,aAAA,SAAA,iBAAA,aAAA,OAAA,OAAA,UAAA,gBAAA,aAAA,aAAA,mBAAA,0BAAA,iCAAA,gCAAA,sBAAA,EAAA,OAAA,CAAA,EAAAC,SAAA,SAAAC,EAAAC,EAAA,CAAAD,EAAA,ICTnCE,EAAA,EAAA,SAAA,CAAA,EACgL,EAAA,MAAA,CAAA,EACvF,EAAA,MAAA,CAAA,MAE7EA,EAAA,EAAA,MAAA,CAAA,EAEIC,EAAA,EAAA,OAAA,CAAA,EAEJC,EAAA,EAAM,MAEVF,EAAA,EAAA,KAAA,CAAA,EAAuEG,EAAA,EAAA,qBAAA,EAAmBD,EAAA,EAAK,EAGnGF,EAAA,EAAA,IAAA,CAAA,EAAwEG,EAAA,CAAA,EAAeD,EAAA,EAEvFF,EAAA,EAAA,MAAA,CAAA,EAAiG,GAAA,SAAA,CAAA,EACvEI,EAAA,QAAA,UAAA,CAAA,OAASL,EAAAT,SAAA,CAAU,CAAA,EAErCa,EAAA,EAAA,EACJD,EAAA,EACAF,EAAA,GAAA,SAAA,CAAA,EAAsBI,EAAA,QAAA,UAAA,CAAA,OAASL,EAAAX,UAAA,CAAW,CAAA,EAEtCe,EAAA,EAAA,EACJD,EAAA,EAAS,EACP,SAXkEG,EAAA,CAAA,EAAAC,EAAAP,EAAAlB,QAAA,CAAA,EAKhEwB,EAAA,CAAA,EAAAE,EAAA,IAAAR,EAAAf,YAAA,EAAA,GAAA,EAIAqB,EAAA,CAAA,EAAAE,EAAA,IAAAR,EAAAhB,aAAA,EAAA,GAAA,+CDbCH,CAAsB,GAAA", + "names": ["ConfirmDialogComponent", "message", "input", "confirmLabel", "cancelLabel", "confirmed", "output", "cancelled", "onConfirm", "emit", "onCancel", "selectors", "inputs", "outputs", "decls", "vars", "consts", "template", "rf", "ctx", "\u0275\u0275domElementStart", "\u0275\u0275domElement", "\u0275\u0275domElementEnd", "\u0275\u0275text", "\u0275\u0275domListener", "\u0275\u0275advance", "\u0275\u0275textInterpolate", "\u0275\u0275textInterpolate1"] +} diff --git a/frontend/dist-instrumented/chunk-BZP772JM.js b/frontend/dist-instrumented/chunk-BZP772JM.js new file mode 100644 index 00000000..07715eda --- /dev/null +++ b/frontend/dist-instrumented/chunk-BZP772JM.js @@ -0,0 +1,3 @@ +function cov_z26ee7f8h(){var path="/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-BZP772JM.js";var hash="71216bc6155642fa723ddbc071a3597c7f65bade";var global=new Function("return this")();var gcv="__coverage__";var coverageData={path:"/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-BZP772JM.js",statementMap:{"0":{start:{line:1,column:392},end:{line:1,column:1218}},"1":{start:{line:1,column:411},end:{line:1,column:415}},"2":{start:{line:1,column:424},end:{line:1,column:428}},"3":{start:{line:1,column:447},end:{line:1,column:449}},"4":{start:{line:1,column:469},end:{line:1,column:496}},"5":{start:{line:1,column:516},end:{line:1,column:621}},"6":{start:{line:1,column:572},end:{line:1,column:619}},"7":{start:{line:1,column:582},end:{line:1,column:617}},"8":{start:{line:1,column:643},end:{line:1,column:1089}},"9":{start:{line:1,column:832},end:{line:1,column:1048}},"10":{start:{line:1,column:842},end:{line:1,column:1046}},"11":{start:{line:1,column:927},end:{line:1,column:960}},"12":{start:{line:1,column:1049},end:{line:1,column:1086}},"13":{start:{line:1,column:1107},end:{line:1,column:1136}},"14":{start:{line:1,column:1119},end:{line:1,column:1135}},"15":{start:{line:1,column:1155},end:{line:1,column:1205}},"16":{start:{line:1,column:1206},end:{line:1,column:1214}},"17":{start:{line:1,column:1225},end:{line:1,column:2464}},"18":{start:{line:1,column:1274},end:{line:1,column:1276}},"19":{start:{line:1,column:1295},end:{line:1,column:1318}},"20":{start:{line:1,column:1332},end:{line:1,column:1375}},"21":{start:{line:1,column:1388},end:{line:1,column:1503}},"22":{start:{line:1,column:1519},end:{line:1,column:1580}},"23":{start:{line:1,column:1602},end:{line:1,column:1659}},"24":{start:{line:1,column:1660},end:{line:1,column:2297}},"25":{start:{line:1,column:1738},end:{line:1,column:1760}},"26":{start:{line:1,column:1761},end:{line:1,column:1879}},"27":{start:{line:1,column:2246},end:{line:1,column:2291}},"28":{start:{line:1,column:2315},end:{line:1,column:2344}},"29":{start:{line:1,column:2327},end:{line:1,column:2343}},"30":{start:{line:1,column:2362},end:{line:1,column:2451}},"31":{start:{line:1,column:2452},end:{line:1,column:2460}},"32":{start:{line:1,column:2471},end:{line:1,column:2507}},"33":{start:{line:1,column:2479},end:{line:1,column:2506}},"34":{start:{line:1,column:2524},end:{line:1,column:2634}},"35":{start:{line:1,column:2612},end:{line:1,column:2623}},"36":{start:{line:1,column:2624},end:{line:1,column:2633}},"37":{start:{line:1,column:2651},end:{line:1,column:2824}},"38":{start:{line:1,column:2779},end:{line:1,column:2782}},"39":{start:{line:1,column:2783},end:{line:1,column:2823}},"40":{start:{line:1,column:2832},end:{line:1,column:4718}},"41":{start:{line:1,column:2866},end:{line:1,column:2871}},"42":{start:{line:1,column:2884},end:{line:1,column:2934}},"43":{start:{line:1,column:2952},end:{line:1,column:3013}},"44":{start:{line:1,column:2964},end:{line:1,column:3009}},"45":{start:{line:1,column:2983},end:{line:1,column:3008}},"46":{start:{line:1,column:3031},end:{line:1,column:4705}},"47":{start:{line:1,column:4194},end:{line:1,column:4663}},"48":{start:{line:1,column:4706},end:{line:1,column:4714}},"49":{start:{line:1,column:4725},end:{line:1,column:4761}},"50":{start:{line:1,column:4733},end:{line:1,column:4760}},"51":{start:{line:1,column:4778},end:{line:1,column:4888}},"52":{start:{line:1,column:4866},end:{line:1,column:4877}},"53":{start:{line:1,column:4878},end:{line:1,column:4887}},"54":{start:{line:1,column:4905},end:{line:1,column:5078}},"55":{start:{line:1,column:5033},end:{line:1,column:5036}},"56":{start:{line:1,column:5037},end:{line:1,column:5077}},"57":{start:{line:1,column:5086},end:{line:1,column:7069}},"58":{start:{line:1,column:5122},end:{line:1,column:5186}},"59":{start:{line:1,column:5197},end:{line:1,column:5203}},"60":{start:{line:1,column:5213},end:{line:1,column:5215}},"61":{start:{line:1,column:5228},end:{line:1,column:5287}},"62":{start:{line:1,column:5305},end:{line:1,column:5366}},"63":{start:{line:1,column:5317},end:{line:1,column:5362}},"64":{start:{line:1,column:5336},end:{line:1,column:5361}},"65":{start:{line:1,column:5384},end:{line:1,column:7056}},"66":{start:{line:1,column:6545},end:{line:1,column:7014}},"67":{start:{line:1,column:7057},end:{line:1,column:7065}}},fnMap:{"0":{name:"(anonymous_0)",decl:{start:{line:1,column:393},end:{line:1,column:394}},loc:{start:{line:1,column:397},end:{line:1,column:1215}},line:1},"1":{name:"(anonymous_1)",decl:{start:{line:1,column:497},end:{line:1,column:498}},loc:{start:{line:1,column:515},end:{line:1,column:622}},line:1},"2":{name:"(anonymous_2)",decl:{start:{line:1,column:569},end:{line:1,column:570}},loc:{start:{line:1,column:572},end:{line:1,column:619}},line:1},"3":{name:"(anonymous_3)",decl:{start:{line:1,column:578},end:{line:1,column:579}},loc:{start:{line:1,column:582},end:{line:1,column:617}},line:1},"4":{name:"(anonymous_4)",decl:{start:{line:1,column:622},end:{line:1,column:623}},loc:{start:{line:1,column:642},end:{line:1,column:1090}},line:1},"5":{name:"(anonymous_5)",decl:{start:{line:1,column:822},end:{line:1,column:823}},loc:{start:{line:1,column:825},end:{line:1,column:1087}},line:1},"6":{name:"(anonymous_6)",decl:{start:{line:1,column:838},end:{line:1,column:839}},loc:{start:{line:1,column:842},end:{line:1,column:1046}},line:1},"7":{name:"(anonymous_7)",decl:{start:{line:1,column:923},end:{line:1,column:924}},loc:{start:{line:1,column:927},end:{line:1,column:960}},line:1},"8":{name:"(anonymous_8)",decl:{start:{line:1,column:1107},end:{line:1,column:1108}},loc:{start:{line:1,column:1118},end:{line:1,column:1136}},line:1},"9":{name:"(anonymous_9)",decl:{start:{line:1,column:1226},end:{line:1,column:1227}},loc:{start:{line:1,column:1230},end:{line:1,column:2461}},line:1},"10":{name:"(anonymous_10)",decl:{start:{line:1,column:1504},end:{line:1,column:1505}},loc:{start:{line:1,column:1518},end:{line:1,column:1581}},line:1},"11":{name:"(anonymous_11)",decl:{start:{line:1,column:1581},end:{line:1,column:1582}},loc:{start:{line:1,column:1595},end:{line:1,column:2298}},line:1},"12":{name:"(anonymous_12)",decl:{start:{line:1,column:1724},end:{line:1,column:1725}},loc:{start:{line:1,column:1731},end:{line:1,column:1880}},line:1},"13":{name:"(anonymous_13)",decl:{start:{line:1,column:2243},end:{line:1,column:2244}},loc:{start:{line:1,column:2246},end:{line:1,column:2291}},line:1},"14":{name:"(anonymous_14)",decl:{start:{line:1,column:2315},end:{line:1,column:2316}},loc:{start:{line:1,column:2326},end:{line:1,column:2344}},line:1},"15":{name:"(anonymous_15)",decl:{start:{line:1,column:2471},end:{line:1,column:2472}},loc:{start:{line:1,column:2479},end:{line:1,column:2506}},line:1},"16":{name:"Z",decl:{start:{line:1,column:2517},end:{line:1,column:2518}},loc:{start:{line:1,column:2523},end:{line:1,column:2635}},line:1},"17":{name:"H",decl:{start:{line:1,column:2644},end:{line:1,column:2645}},loc:{start:{line:1,column:2650},end:{line:1,column:2825}},line:1},"18":{name:"(anonymous_18)",decl:{start:{line:1,column:2833},end:{line:1,column:2834}},loc:{start:{line:1,column:2837},end:{line:1,column:4715}},line:1},"19":{name:"(anonymous_19)",decl:{start:{line:1,column:2953},end:{line:1,column:2954}},loc:{start:{line:1,column:2957},end:{line:1,column:3010}},line:1},"20":{name:"(anonymous_20)",decl:{start:{line:1,column:2971},end:{line:1,column:2972}},loc:{start:{line:1,column:2982},end:{line:1,column:3009}},line:1},"21":{name:"(anonymous_21)",decl:{start:{line:1,column:4180},end:{line:1,column:4181}},loc:{start:{line:1,column:4193},end:{line:1,column:4664}},line:1},"22":{name:"(anonymous_22)",decl:{start:{line:1,column:4725},end:{line:1,column:4726}},loc:{start:{line:1,column:4733},end:{line:1,column:4760}},line:1},"23":{name:"P",decl:{start:{line:1,column:4771},end:{line:1,column:4772}},loc:{start:{line:1,column:4777},end:{line:1,column:4889}},line:1},"24":{name:"W",decl:{start:{line:1,column:4898},end:{line:1,column:4899}},loc:{start:{line:1,column:4904},end:{line:1,column:5079}},line:1},"25":{name:"(anonymous_25)",decl:{start:{line:1,column:5087},end:{line:1,column:5088}},loc:{start:{line:1,column:5091},end:{line:1,column:7066}},line:1},"26":{name:"(anonymous_26)",decl:{start:{line:1,column:5306},end:{line:1,column:5307}},loc:{start:{line:1,column:5310},end:{line:1,column:5363}},line:1},"27":{name:"(anonymous_27)",decl:{start:{line:1,column:5324},end:{line:1,column:5325}},loc:{start:{line:1,column:5335},end:{line:1,column:5362}},line:1},"28":{name:"(anonymous_28)",decl:{start:{line:1,column:6531},end:{line:1,column:6532}},loc:{start:{line:1,column:6544},end:{line:1,column:7015}},line:1}},branchMap:{"0":{loc:{start:{line:1,column:637},end:{line:1,column:641}},type:"default-arg",locations:[{start:{line:1,column:639},end:{line:1,column:641}}],line:1},"1":{loc:{start:{line:1,column:650},end:{line:1,column:776}},type:"cond-expr",locations:[{start:{line:1,column:652},end:{line:1,column:720}},{start:{line:1,column:721},end:{line:1,column:776}}],line:1},"2":{loc:{start:{line:1,column:1130},end:{line:1,column:1134}},type:"binary-expr",locations:[{start:{line:1,column:1130},end:{line:1,column:1131}},{start:{line:1,column:1133},end:{line:1,column:1134}}],line:1},"3":{loc:{start:{line:1,column:1519},end:{line:1,column:1580}},type:"binary-expr",locations:[{start:{line:1,column:1519},end:{line:1,column:1530}},{start:{line:1,column:1532},end:{line:1,column:1546}},{start:{line:1,column:1548},end:{line:1,column:1580}}],line:1},"4":{loc:{start:{line:1,column:1738},end:{line:1,column:1760}},type:"binary-expr",locations:[{start:{line:1,column:1738},end:{line:1,column:1757}},{start:{line:1,column:1759},end:{line:1,column:1760}}],line:1},"5":{loc:{start:{line:1,column:2338},end:{line:1,column:2342}},type:"binary-expr",locations:[{start:{line:1,column:2338},end:{line:1,column:2339}},{start:{line:1,column:2341},end:{line:1,column:2342}}],line:1},"6":{loc:{start:{line:1,column:2524},end:{line:1,column:2634}},type:"if",locations:[{start:{line:1,column:2524},end:{line:1,column:2634}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"7":{loc:{start:{line:1,column:2527},end:{line:1,column:2600}},type:"binary-expr",locations:[{start:{line:1,column:2527},end:{line:1,column:2530}},{start:{line:1,column:2533},end:{line:1,column:2599}}],line:1},"8":{loc:{start:{line:1,column:2651},end:{line:1,column:2824}},type:"if",locations:[{start:{line:1,column:2651},end:{line:1,column:2824}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"9":{loc:{start:{line:1,column:2654},end:{line:1,column:2767}},type:"binary-expr",locations:[{start:{line:1,column:2654},end:{line:1,column:2657}},{start:{line:1,column:2660},end:{line:1,column:2766}}],line:1},"10":{loc:{start:{line:1,column:2990},end:{line:1,column:3001}},type:"binary-expr",locations:[{start:{line:1,column:2990},end:{line:1,column:2991}},{start:{line:1,column:2994},end:{line:1,column:3000}}],line:1},"11":{loc:{start:{line:1,column:3003},end:{line:1,column:3007}},type:"binary-expr",locations:[{start:{line:1,column:3003},end:{line:1,column:3004}},{start:{line:1,column:3006},end:{line:1,column:3007}}],line:1},"12":{loc:{start:{line:1,column:4194},end:{line:1,column:4320}},type:"binary-expr",locations:[{start:{line:1,column:4194},end:{line:1,column:4197}},{start:{line:1,column:4200},end:{line:1,column:4319}}],line:1},"13":{loc:{start:{line:1,column:4321},end:{line:1,column:4663}},type:"binary-expr",locations:[{start:{line:1,column:4321},end:{line:1,column:4324}},{start:{line:1,column:4327},end:{line:1,column:4662}}],line:1},"14":{loc:{start:{line:1,column:4349},end:{line:1,column:4406}},type:"binary-expr",locations:[{start:{line:1,column:4349},end:{line:1,column:4386}},{start:{line:1,column:4388},end:{line:1,column:4406}}],line:1},"15":{loc:{start:{line:1,column:4407},end:{line:1,column:4462}},type:"binary-expr",locations:[{start:{line:1,column:4407},end:{line:1,column:4443}},{start:{line:1,column:4445},end:{line:1,column:4462}}],line:1},"16":{loc:{start:{line:1,column:4606},end:{line:1,column:4661}},type:"binary-expr",locations:[{start:{line:1,column:4606},end:{line:1,column:4642}},{start:{line:1,column:4644},end:{line:1,column:4661}}],line:1},"17":{loc:{start:{line:1,column:4778},end:{line:1,column:4888}},type:"if",locations:[{start:{line:1,column:4778},end:{line:1,column:4888}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"18":{loc:{start:{line:1,column:4781},end:{line:1,column:4854}},type:"binary-expr",locations:[{start:{line:1,column:4781},end:{line:1,column:4784}},{start:{line:1,column:4787},end:{line:1,column:4853}}],line:1},"19":{loc:{start:{line:1,column:4905},end:{line:1,column:5078}},type:"if",locations:[{start:{line:1,column:4905},end:{line:1,column:5078}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"20":{loc:{start:{line:1,column:4908},end:{line:1,column:5021}},type:"binary-expr",locations:[{start:{line:1,column:4908},end:{line:1,column:4911}},{start:{line:1,column:4914},end:{line:1,column:5020}}],line:1},"21":{loc:{start:{line:1,column:5343},end:{line:1,column:5354}},type:"binary-expr",locations:[{start:{line:1,column:5343},end:{line:1,column:5344}},{start:{line:1,column:5347},end:{line:1,column:5353}}],line:1},"22":{loc:{start:{line:1,column:5356},end:{line:1,column:5360}},type:"binary-expr",locations:[{start:{line:1,column:5356},end:{line:1,column:5357}},{start:{line:1,column:5359},end:{line:1,column:5360}}],line:1},"23":{loc:{start:{line:1,column:6545},end:{line:1,column:6671}},type:"binary-expr",locations:[{start:{line:1,column:6545},end:{line:1,column:6548}},{start:{line:1,column:6551},end:{line:1,column:6670}}],line:1},"24":{loc:{start:{line:1,column:6672},end:{line:1,column:7014}},type:"binary-expr",locations:[{start:{line:1,column:6672},end:{line:1,column:6675}},{start:{line:1,column:6678},end:{line:1,column:7013}}],line:1},"25":{loc:{start:{line:1,column:6700},end:{line:1,column:6757}},type:"binary-expr",locations:[{start:{line:1,column:6700},end:{line:1,column:6737}},{start:{line:1,column:6739},end:{line:1,column:6757}}],line:1},"26":{loc:{start:{line:1,column:6758},end:{line:1,column:6813}},type:"binary-expr",locations:[{start:{line:1,column:6758},end:{line:1,column:6794}},{start:{line:1,column:6796},end:{line:1,column:6813}}],line:1},"27":{loc:{start:{line:1,column:6957},end:{line:1,column:7012}},type:"binary-expr",locations:[{start:{line:1,column:6957},end:{line:1,column:6993}},{start:{line:1,column:6995},end:{line:1,column:7012}}],line:1}},s:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0},f:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0},b:{"0":[0],"1":[0,0],"2":[0,0],"3":[0,0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0],"9":[0,0],"10":[0,0],"11":[0,0],"12":[0,0],"13":[0,0],"14":[0,0],"15":[0,0],"16":[0,0],"17":[0,0],"18":[0,0],"19":[0,0],"20":[0,0],"21":[0,0],"22":[0,0],"23":[0,0],"24":[0,0],"25":[0,0],"26":[0,0],"27":[0,0]},inputSourceMap:{version:3,sources:["src/app/features/analytics/services/analytics-api.service.ts","src/app/features/analytics/interfaces/chart-component.ts","src/app/features/analytics/components/alarms-sent-resolved-chart/alarms-sent-resolved-chart.component.ts","src/app/features/analytics/components/shared/chart-analytics.html","src/app/features/analytics/components/energy-consumption-chart/energy-consumption-chart.component.ts","src/app/features/analytics/components/shared/chart-analytics.html"],sourcesContent:["import { inject, Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { API_BASE_URL } from '../../../core/tokens/api-base-url.token';\nimport { AnalyticsDto } from '../models/analytics.model';\nimport { Observable, map, of } from 'rxjs';\nimport { PlantDto } from '../../apartment-monitor/models/plant-response.model';\n\n@Injectable({ providedIn: 'root' })\nexport class AnalyticsApiService {\n private readonly http: HttpClient = inject(HttpClient);\n private readonly baseUrl: string = inject(API_BASE_URL);\n\n private analyticsEndpoint = \"\";\n private readonly apartmentsEndpoint = `${this.baseUrl}/plant/all`;\n\n public getAllApartments():Observable{\n \n return this.http.get(this.apartmentsEndpoint).pipe(\n map(response => response.map(item => ({\n id: item.id,\n name: item.name,\n rooms: item.rooms,\n } as PlantDto)))\n );\n }\n\n\n public getAnalytics(apartmentId: string, refresh: boolean = false): Observable {\n if(refresh){\n this.analyticsEndpoint = `${this.baseUrl}/analytics/${apartmentId}?refresh=true`;\n } else {\n this.analyticsEndpoint = `${this.baseUrl}/analytics/${apartmentId}`;\n }\n\n return this.http.get(this.analyticsEndpoint).pipe(\n map((response: any[]) => {\n\n const analyticsInfo: any[] = response.map(item => ({\n title: item.title,\n metric: item.metric,\n unit: item.unit,\n labels: item.labels,\n datasets: item.series.map((s: any) => ({\n id: s.id,\n name: s.name,\n data: s.data\n })),\n suggestions: {\n messages: item.suggestion.message,\n isSuggestion: item.suggestion.isSuggestion\n }\n }));\n\n const result: AnalyticsDto = {\n apartmentId: apartmentId,\n analyticsInfo: analyticsInfo,\n };\n\n return result;\n })\n );\n }\n}\n\n\n","import { ChartInfoDto } from \"../models/chart-info.model\";\nimport { ChartConfiguration, ChartData, ChartType } from 'chart.js';\nimport { SimpleChanges, Directive, Input, OnChanges } from \"@angular/core\";\n\n\n@Directive()\nexport abstract class ChartComponent implements OnChanges {\n\n @Input() chartInfo!: ChartInfoDto;\n abstract chartType: ChartType;\n abstract description: string;\n @Input() showSuggestions!: boolean;\n protected fillArea: boolean = false;\n \n renderedChartData: ChartData = {\n labels: [],\n datasets: []\n };\n\n chartOptions: ChartConfiguration['options'] = {\n responsive: true,\n scales: {\n y: { beginAtZero: true }\n }\n };\n\n chartColors = [\n { bg: 'rgba(68, 119, 239, 0.5)', border: 'rgb(68, 239, 236)' },\n { bg: 'rgba(34, 197, 94, 0.5)', border: 'rgb(34, 197, 94)' }\n ];\n\n\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['chartInfo'] && this.chartInfo) {\n this.updateChart(this.chartInfo);\n }\n }\n\n protected updateChart(data: ChartInfoDto): void {\n const defaultColor = { bg: 'rgba(68, 119, 239, 0.5)', border: 'rgb(68, 225, 239)' };\n this.renderedChartData = {\n labels: data.labels,\n datasets: data.datasets.map((ds,index) => {\n const color = this.chartColors[index] ?? defaultColor;\n return{\n data: ds.data,\n label: ds.name, \n backgroundColor: color.bg, \n borderColor: color.border,\n borderWidth: 1, \n fill: this.fillArea, \n tension: 0.2\n };\n })\n };\n\n // 2. Aggiorna le opzioni per includere l'unit\xE0 di misura (unit)\n this.chartOptions = {\n ...this.chartOptions,\n scales: {\n ...this.chartOptions?.scales,\n y: {\n ...this.chartOptions?.scales?.['y'],\n beginAtZero: true,\n // RIMUOVIAMO il callback dai ticks se non vuoi l'unit\xE0 su ogni numero\n ticks: {\n ...this.chartOptions?.scales?.['y']?.ticks,\n },\n // AGGIUNGIAMO il titolo dell'asse\n title: {\n display: true,\n text: data.unit, // Mostra l'unit\xE0 (es. \"kWh\") in cima o a lato\n color: '#64748b', // Colore slate-500 per coerenza con Tailwind\n font: {\n size: 12,\n weight: 'bold'\n },\n padding: { bottom: 10 }\n }\n }\n },\n plugins: {\n ...this.chartOptions?.plugins,\n tooltip: {\n callbacks: {\n // Ti consiglio di LASCIRE l'unit\xE0 nel tooltip, perch\xE9 l\xEC \xE8 molto utile\n label: (context) => `${context.dataset.label}: ${context.parsed.y} ${data.unit}`\n }\n }\n }\n };\n\n\n }\n}\n","import { Component, Input, SimpleChanges } from '@angular/core';\nimport { ChartComponent } from '../../interfaces/chart-component';\nimport { ChartInfoDto } from '../../models/chart-info.model';\nimport { CommonModule } from '@angular/common';\nimport { BaseChartDirective } from 'ng2-charts';\nimport { ChartType } from 'chart.js';\n\n@Component({ \n selector: 'app-alarms-sent-resolved-chart', \n standalone: true, \n imports: [BaseChartDirective, CommonModule],\n templateUrl: '../shared/chart-analytics.html'})\nexport class AlarmsSentResolvedChartComponent extends ChartComponent {\n\n override chartType: ChartType = 'bar';\n\n override description: string = \"Dati relativi alla gestione allarmi del reparto.\";\n\n}\n","
\n\n
\n
\n

{{chartInfo.title}}

\n

{{description}}

\n
\n\n \n \n\n\n
\n\n
\n

Suggerimenti Risparmio Energetico

\n
    \n @for(sugg of chartInfo.suggestions.messages; track sugg){\n
  • \n

    SUGGERIMENTO

    \n

    {{sugg}}

    \n
  • \n }\n
\n
\n\n
\n\n","import { Component, Input, SimpleChanges } from '@angular/core';\nimport { ChartComponent } from '../../interfaces/chart-component';\nimport { ChartInfoDto } from '../../models/chart-info.model';\nimport { ChartType } from 'chart.js';\nimport { BaseChartDirective } from 'ng2-charts';\nimport { CommonModule } from '@angular/common';\n\n@Component({ \n selector: 'app-energy-consumption-chart', \n standalone: true, \n imports: [BaseChartDirective, CommonModule],\n templateUrl: '../shared/chart-analytics.html'})\nexport class EnergyConsumptionChartComponent extends ChartComponent {\n\n override description: string = \"Dati relativi ai consumi dell'illuminazione dell'appartamento.\";\n\n override chartType: ChartType = 'line';\n\n override fillArea = true;\n\n override chartColors = [{ bg: 'rgba(228, 238, 43, 0.68)', border: 'rgb(107, 109, 3)' }];\n\n}\n","
\n\n
\n
\n

{{chartInfo.title}}

\n

{{description}}

\n
\n\n \n \n\n\n
\n\n
\n

Suggerimenti Risparmio Energetico

\n
    \n @for(sugg of chartInfo.suggestions.messages; track sugg){\n
  • \n

    SUGGERIMENTO

    \n

    {{sugg}}

    \n
  • \n }\n
\n
\n\n
\n\n"],mappings:"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",names:["AnalyticsApiService","http","inject","HttpClient","baseUrl","API_BASE_URL","analyticsEndpoint","apartmentsEndpoint","getAllApartments","get","pipe","map","response","item","id","name","rooms","getAnalytics","apartmentId","refresh","analyticsInfo","title","metric","unit","labels","datasets","series","s","data","suggestions","messages","suggestion","message","isSuggestion","factory","\u0275fac","providedIn","ChartComponent","chartInfo","showSuggestions","fillArea","renderedChartData","labels","datasets","chartOptions","responsive","scales","y","beginAtZero","chartColors","bg","border","ngOnChanges","changes","updateChart","data","defaultColor","map","ds","index","color","label","name","backgroundColor","borderColor","borderWidth","fill","tension","__spreadProps","__spreadValues","ticks","title","display","text","unit","font","size","weight","padding","bottom","plugins","tooltip","callbacks","context","dataset","parsed","inputs","features","\u0275\u0275NgOnChangesFeature","\u0275\u0275elementStart","\u0275\u0275text","\u0275\u0275elementEnd","\u0275\u0275advance","\u0275\u0275textInterpolate","sugg_r1","\u0275\u0275repeaterCreate","AlarmsSentResolvedChartComponent_div_8_For_5_Template","\u0275\u0275repeaterTrackByIdentity","\u0275\u0275repeater","ctx_r1","chartInfo","suggestions","messages","AlarmsSentResolvedChartComponent","ChartComponent","chartType","description","__ngFactoryType__","selectors","features","\u0275\u0275InheritDefinitionFeature","decls","vars","consts","template","rf","ctx","\u0275\u0275element","\u0275\u0275template","AlarmsSentResolvedChartComponent_div_8_Template","\u0275\u0275property","\u0275\u0275pureFunction2","_c0","isSuggestion","showSuggestions","title","renderedChartData","chartOptions","BaseChartDirective","CommonModule","NgClass","NgIf","encapsulation","\u0275\u0275elementStart","\u0275\u0275text","\u0275\u0275elementEnd","\u0275\u0275advance","\u0275\u0275textInterpolate","sugg_r1","\u0275\u0275repeaterCreate","EnergyConsumptionChartComponent_div_8_For_5_Template","\u0275\u0275repeaterTrackByIdentity","\u0275\u0275repeater","ctx_r1","chartInfo","suggestions","messages","EnergyConsumptionChartComponent","ChartComponent","description","chartType","fillArea","chartColors","bg","border","__ngFactoryType__","selectors","features","\u0275\u0275InheritDefinitionFeature","decls","vars","consts","template","rf","ctx","\u0275\u0275element","\u0275\u0275template","EnergyConsumptionChartComponent_div_8_Template","\u0275\u0275property","\u0275\u0275pureFunction2","_c0","isSuggestion","showSuggestions","title","renderedChartData","chartOptions","BaseChartDirective","CommonModule","NgClass","NgIf","encapsulation"]},_coverageSchema:"1a1c01bbd47fc00a2c39e90264f33305004495a9",hash:"71216bc6155642fa723ddbc071a3597c7f65bade"};var coverage=global[gcv]||(global[gcv]={});if(!coverage[path]||coverage[path].hash!==hash){coverage[path]=coverageData;}var actualCoverage=coverage[path];{// @ts-ignore +cov_z26ee7f8h=function(){return actualCoverage;};}return actualCoverage;}cov_z26ee7f8h();import{c as _}from"./chunk-UE5BCHDC.js";import{b as U,e as G}from"./chunk-2S5V5XEE.js";import{e as S,g as E,j as k}from"./chunk-F6OGAIBI.js";import{$a as C,Ab as s,Bb as p,Hb as I,Ka as u,L as M,Ma as N,Oa as f,Pa as b,Q as $,ab as y,bb as v,cb as d,db as a,eb as n,fb as w,ja as B,ka as h,m as O,pb as x,wa as o}from"./chunk-RYTNMYZW.js";import{a as g,b as m}from"./chunk-VCZGUBMY.js";var X=(cov_z26ee7f8h().s[0]++,(()=>{cov_z26ee7f8h().f[0]++;class t{http=(cov_z26ee7f8h().s[1]++,$(U));baseUrl=(cov_z26ee7f8h().s[2]++,$(G));analyticsEndpoint=(cov_z26ee7f8h().s[3]++,"");apartmentsEndpoint=(cov_z26ee7f8h().s[4]++,`${this.baseUrl}/plant/all`);getAllApartments(){cov_z26ee7f8h().f[1]++;cov_z26ee7f8h().s[5]++;return this.http.get(this.apartmentsEndpoint).pipe(O(i=>{cov_z26ee7f8h().f[2]++;cov_z26ee7f8h().s[6]++;return i.map(r=>{cov_z26ee7f8h().f[3]++;cov_z26ee7f8h().s[7]++;return{id:r.id,name:r.name,rooms:r.rooms};});}));}getAnalytics(i,r=(cov_z26ee7f8h().b[0][0]++,!1)){cov_z26ee7f8h().f[4]++;cov_z26ee7f8h().s[8]++;return r?(cov_z26ee7f8h().b[1][0]++,this.analyticsEndpoint=`${this.baseUrl}/analytics/${i}?refresh=true`):(cov_z26ee7f8h().b[1][1]++,this.analyticsEndpoint=`${this.baseUrl}/analytics/${i}`),this.http.get(this.analyticsEndpoint).pipe(O(e=>{cov_z26ee7f8h().f[5]++;let F=(cov_z26ee7f8h().s[9]++,e.map(c=>{cov_z26ee7f8h().f[6]++;cov_z26ee7f8h().s[10]++;return{title:c.title,metric:c.metric,unit:c.unit,labels:c.labels,datasets:c.series.map(T=>{cov_z26ee7f8h().f[7]++;cov_z26ee7f8h().s[11]++;return{id:T.id,name:T.name,data:T.data};}),suggestions:{messages:c.suggestion.message,isSuggestion:c.suggestion.isSuggestion}};}));cov_z26ee7f8h().s[12]++;return{apartmentId:i,analyticsInfo:F};}));}static ɵfac=(cov_z26ee7f8h().s[13]++,function(r){cov_z26ee7f8h().f[8]++;cov_z26ee7f8h().s[14]++;return new((cov_z26ee7f8h().b[2][0]++,r)||(cov_z26ee7f8h().b[2][1]++,t))();});static ɵprov=(cov_z26ee7f8h().s[15]++,M({token:t,factory:t.ɵfac,providedIn:"root"}));}cov_z26ee7f8h().s[16]++;return t;})());var D=(cov_z26ee7f8h().s[17]++,(()=>{cov_z26ee7f8h().f[9]++;class t{chartInfo;showSuggestions;fillArea=(cov_z26ee7f8h().s[18]++,!1);renderedChartData=(cov_z26ee7f8h().s[19]++,{labels:[],datasets:[]});chartOptions=(cov_z26ee7f8h().s[20]++,{responsive:!0,scales:{y:{beginAtZero:!0}}});chartColors=(cov_z26ee7f8h().s[21]++,[{bg:"rgba(68, 119, 239, 0.5)",border:"rgb(68, 239, 236)"},{bg:"rgba(34, 197, 94, 0.5)",border:"rgb(34, 197, 94)"}]);ngOnChanges(i){cov_z26ee7f8h().f[10]++;cov_z26ee7f8h().s[22]++;(cov_z26ee7f8h().b[3][0]++,i.chartInfo)&&(cov_z26ee7f8h().b[3][1]++,this.chartInfo)&&(cov_z26ee7f8h().b[3][2]++,this.updateChart(this.chartInfo));}updateChart(i){cov_z26ee7f8h().f[11]++;let r=(cov_z26ee7f8h().s[23]++,{bg:"rgba(68, 119, 239, 0.5)",border:"rgb(68, 225, 239)"});cov_z26ee7f8h().s[24]++;this.renderedChartData={labels:i.labels,datasets:i.datasets.map((e,F)=>{cov_z26ee7f8h().f[12]++;let A=(cov_z26ee7f8h().s[25]++,(cov_z26ee7f8h().b[4][0]++,this.chartColors[F])??(cov_z26ee7f8h().b[4][1]++,r));cov_z26ee7f8h().s[26]++;return{data:e.data,label:e.name,backgroundColor:A.bg,borderColor:A.border,borderWidth:1,fill:this.fillArea,tension:.2};})},this.chartOptions=m(g({},this.chartOptions),{scales:m(g({},this.chartOptions?.scales),{y:m(g({},this.chartOptions?.scales?.y),{beginAtZero:!0,ticks:g({},this.chartOptions?.scales?.y?.ticks),title:{display:!0,text:i.unit,color:"#64748b",font:{size:12,weight:"bold"},padding:{bottom:10}}})}),plugins:m(g({},this.chartOptions?.plugins),{tooltip:{callbacks:{label:e=>{cov_z26ee7f8h().f[13]++;cov_z26ee7f8h().s[27]++;return`${e.dataset.label}: ${e.parsed.y} ${i.unit}`;}}}})});}static ɵfac=(cov_z26ee7f8h().s[28]++,function(r){cov_z26ee7f8h().f[14]++;cov_z26ee7f8h().s[29]++;return new((cov_z26ee7f8h().b[5][0]++,r)||(cov_z26ee7f8h().b[5][1]++,t))();});static ɵdir=(cov_z26ee7f8h().s[30]++,N({type:t,inputs:{chartInfo:"chartInfo",showSuggestions:"showSuggestions"},features:[B]}));}cov_z26ee7f8h().s[31]++;return t;})());cov_z26ee7f8h().s[32]++;var z=(t,l)=>{cov_z26ee7f8h().f[15]++;cov_z26ee7f8h().s[33]++;return{"w-full":t,"lg:w-[70%]":l};};function Z(t,l){cov_z26ee7f8h().f[16]++;cov_z26ee7f8h().s[34]++;if((cov_z26ee7f8h().b[7][0]++,t&1)&&(cov_z26ee7f8h().b[7][1]++,a(0,"li",10)(1,"p",11),s(2,"SUGGERIMENTO"),n(),a(3,"p"),s(4),n()()),t&2){cov_z26ee7f8h().b[6][0]++;let i=(cov_z26ee7f8h().s[35]++,l.$implicit);cov_z26ee7f8h().s[36]++;o(4),p(i);}else{cov_z26ee7f8h().b[6][1]++;}}function H(t,l){cov_z26ee7f8h().f[17]++;cov_z26ee7f8h().s[37]++;if((cov_z26ee7f8h().b[9][0]++,t&1)&&(cov_z26ee7f8h().b[9][1]++,a(0,"div",7)(1,"h1",8),s(2,"Suggerimenti Risparmio Energetico"),n(),a(3,"ul",9),y(4,Z,5,1,"li",10,C),n()()),t&2){cov_z26ee7f8h().b[8][0]++;let i=(cov_z26ee7f8h().s[38]++,x());cov_z26ee7f8h().s[39]++;o(4),v(i.chartInfo.suggestions.messages);}else{cov_z26ee7f8h().b[8][1]++;}}var ot=(cov_z26ee7f8h().s[40]++,(()=>{cov_z26ee7f8h().f[18]++;class t extends D{chartType=(cov_z26ee7f8h().s[41]++,"bar");description=(cov_z26ee7f8h().s[42]++,"Dati relativi alla gestione allarmi del reparto.");static ɵfac=(cov_z26ee7f8h().s[43]++,(()=>{cov_z26ee7f8h().f[19]++;let i;cov_z26ee7f8h().s[44]++;return function(e){cov_z26ee7f8h().f[20]++;cov_z26ee7f8h().s[45]++;return((cov_z26ee7f8h().b[10][0]++,i)||(cov_z26ee7f8h().b[10][1]++,i=h(t)))((cov_z26ee7f8h().b[11][0]++,e)||(cov_z26ee7f8h().b[11][1]++,t));};})());static ɵcmp=(cov_z26ee7f8h().s[46]++,u({type:t,selectors:[["app-alarms-sent-resolved-chart"]],features:[f],decls:9,vars:10,consts:[[1,"flex","flex-col","lg:flex-row","border","border-slate-200","bg-white","shadow-sm","overflow-y-auto","rounded-3xl","h-full","[&::-webkit-scrollbar]:w-2","[&::-webkit-scrollbar-track]:my-5","[&::-webkit-scrollbar-thumb]:bg-[rgb(210,210,210)]","[&::-webkit-scrollbar-thumb]:rounded-full"],["data-test","chart-container",1,"block","h-full","p-4","bg-white","p-4","rounded-tl-3xl","rounded-bl-3xl","sticky","top-0","border-r","border-slate-200",3,"ngClass"],[1,"border-b","border-slate-200","pb-1","mb-5"],[1,"font-bold","text-slate-700","text-xl"],[1,"font-bold","text-slate-500"],["baseChart","",3,"data","options","type"],["data-test","suggestions-sidebar","class","lg:h-0 lg:w-[30%] p-3 ",4,"ngIf"],["data-test","suggestions-sidebar",1,"lg:h-0","lg:w-[30%]","p-3"],[1,"font-bold","p-2","text-slate-700","text-xl"],[1,"flex","flex-col","gap-3"],["data-test","suggestion-item",1,"p-4","rounded-2xl","border","border-[rgb(255,212,0)]","bg-white","shadow-sm","hover:shadow-md","transition-shadow","duration-200"],[1,"font-bold","text-amber-500"]],template:function(r,e){cov_z26ee7f8h().f[21]++;cov_z26ee7f8h().s[47]++;(cov_z26ee7f8h().b[12][0]++,r&1)&&(cov_z26ee7f8h().b[12][1]++,a(0,"div",0)(1,"div",1)(2,"div",2)(3,"h1",3),s(4),n(),a(5,"h2",4),s(6),n()(),w(7,"canvas",5),n(),b(8,H,6,0,"div",6),n()),(cov_z26ee7f8h().b[13][0]++,r&2)&&(cov_z26ee7f8h().b[13][1]++,o(),d("ngClass",I(7,z,(cov_z26ee7f8h().b[14][0]++,!e.chartInfo.suggestions.isSuggestion)||(cov_z26ee7f8h().b[14][1]++,!e.showSuggestions),(cov_z26ee7f8h().b[15][0]++,e.chartInfo.suggestions.isSuggestion)&&(cov_z26ee7f8h().b[15][1]++,e.showSuggestions))),o(3),p(e.chartInfo.title),o(2),p(e.description),o(),d("data",e.renderedChartData)("options",e.chartOptions)("type",e.chartType),o(),d("ngIf",(cov_z26ee7f8h().b[16][0]++,e.chartInfo.suggestions.isSuggestion)&&(cov_z26ee7f8h().b[16][1]++,e.showSuggestions)));},dependencies:[_,k,S,E],encapsulation:2}));}cov_z26ee7f8h().s[48]++;return t;})());cov_z26ee7f8h().s[49]++;var L=(t,l)=>{cov_z26ee7f8h().f[22]++;cov_z26ee7f8h().s[50]++;return{"w-full":t,"lg:w-[70%]":l};};function P(t,l){cov_z26ee7f8h().f[23]++;cov_z26ee7f8h().s[51]++;if((cov_z26ee7f8h().b[18][0]++,t&1)&&(cov_z26ee7f8h().b[18][1]++,a(0,"li",10)(1,"p",11),s(2,"SUGGERIMENTO"),n(),a(3,"p"),s(4),n()()),t&2){cov_z26ee7f8h().b[17][0]++;let i=(cov_z26ee7f8h().s[52]++,l.$implicit);cov_z26ee7f8h().s[53]++;o(4),p(i);}else{cov_z26ee7f8h().b[17][1]++;}}function W(t,l){cov_z26ee7f8h().f[24]++;cov_z26ee7f8h().s[54]++;if((cov_z26ee7f8h().b[20][0]++,t&1)&&(cov_z26ee7f8h().b[20][1]++,a(0,"div",7)(1,"h1",8),s(2,"Suggerimenti Risparmio Energetico"),n(),a(3,"ul",9),y(4,P,5,1,"li",10,C),n()()),t&2){cov_z26ee7f8h().b[19][0]++;let i=(cov_z26ee7f8h().s[55]++,x());cov_z26ee7f8h().s[56]++;o(4),v(i.chartInfo.suggestions.messages);}else{cov_z26ee7f8h().b[19][1]++;}}var pt=(cov_z26ee7f8h().s[57]++,(()=>{cov_z26ee7f8h().f[25]++;class t extends D{description=(cov_z26ee7f8h().s[58]++,"Dati relativi ai consumi dell'illuminazione dell'appartamento.");chartType=(cov_z26ee7f8h().s[59]++,"line");fillArea=(cov_z26ee7f8h().s[60]++,!0);chartColors=(cov_z26ee7f8h().s[61]++,[{bg:"rgba(228, 238, 43, 0.68)",border:"rgb(107, 109, 3)"}]);static ɵfac=(cov_z26ee7f8h().s[62]++,(()=>{cov_z26ee7f8h().f[26]++;let i;cov_z26ee7f8h().s[63]++;return function(e){cov_z26ee7f8h().f[27]++;cov_z26ee7f8h().s[64]++;return((cov_z26ee7f8h().b[21][0]++,i)||(cov_z26ee7f8h().b[21][1]++,i=h(t)))((cov_z26ee7f8h().b[22][0]++,e)||(cov_z26ee7f8h().b[22][1]++,t));};})());static ɵcmp=(cov_z26ee7f8h().s[65]++,u({type:t,selectors:[["app-energy-consumption-chart"]],features:[f],decls:9,vars:10,consts:[[1,"flex","flex-col","lg:flex-row","border","border-slate-200","bg-white","shadow-sm","overflow-y-auto","rounded-3xl","h-full","[&::-webkit-scrollbar]:w-2","[&::-webkit-scrollbar-track]:my-5","[&::-webkit-scrollbar-thumb]:bg-[rgb(210,210,210)]","[&::-webkit-scrollbar-thumb]:rounded-full"],["data-test","chart-container",1,"block","h-full","p-4","bg-white","p-4","rounded-tl-3xl","rounded-bl-3xl","sticky","top-0","border-r","border-slate-200",3,"ngClass"],[1,"border-b","border-slate-200","pb-1","mb-5"],[1,"font-bold","text-slate-700","text-xl"],[1,"font-bold","text-slate-500"],["baseChart","",3,"data","options","type"],["data-test","suggestions-sidebar","class","lg:h-0 lg:w-[30%] p-3 ",4,"ngIf"],["data-test","suggestions-sidebar",1,"lg:h-0","lg:w-[30%]","p-3"],[1,"font-bold","p-2","text-slate-700","text-xl"],[1,"flex","flex-col","gap-3"],["data-test","suggestion-item",1,"p-4","rounded-2xl","border","border-[rgb(255,212,0)]","bg-white","shadow-sm","hover:shadow-md","transition-shadow","duration-200"],[1,"font-bold","text-amber-500"]],template:function(r,e){cov_z26ee7f8h().f[28]++;cov_z26ee7f8h().s[66]++;(cov_z26ee7f8h().b[23][0]++,r&1)&&(cov_z26ee7f8h().b[23][1]++,a(0,"div",0)(1,"div",1)(2,"div",2)(3,"h1",3),s(4),n(),a(5,"h2",4),s(6),n()(),w(7,"canvas",5),n(),b(8,W,6,0,"div",6),n()),(cov_z26ee7f8h().b[24][0]++,r&2)&&(cov_z26ee7f8h().b[24][1]++,o(),d("ngClass",I(7,L,(cov_z26ee7f8h().b[25][0]++,!e.chartInfo.suggestions.isSuggestion)||(cov_z26ee7f8h().b[25][1]++,!e.showSuggestions),(cov_z26ee7f8h().b[26][0]++,e.chartInfo.suggestions.isSuggestion)&&(cov_z26ee7f8h().b[26][1]++,e.showSuggestions))),o(3),p(e.chartInfo.title),o(2),p(e.description),o(),d("data",e.renderedChartData)("options",e.chartOptions)("type",e.chartType),o(),d("ngIf",(cov_z26ee7f8h().b[27][0]++,e.chartInfo.suggestions.isSuggestion)&&(cov_z26ee7f8h().b[27][1]++,e.showSuggestions)));},dependencies:[_,k,S,E],encapsulation:2}));}cov_z26ee7f8h().s[67]++;return t;})());export{X as a,D as b,ot as c,pt as d};//# sourceMappingURL=chunk-BZP772JM.js.map +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJYIiwiY292X3oyNmVlN2Y4aCIsInMiLCJmIiwidCIsImh0dHAiLCIkIiwiVSIsImJhc2VVcmwiLCJHIiwiYW5hbHl0aWNzRW5kcG9pbnQiLCJhcGFydG1lbnRzRW5kcG9pbnQiLCJnZXRBbGxBcGFydG1lbnRzIiwiZ2V0IiwicGlwZSIsIk8iLCJpIiwibWFwIiwiciIsImlkIiwibmFtZSIsInJvb21zIiwiZ2V0QW5hbHl0aWNzIiwiYiIsImUiLCJGIiwiYyIsInRpdGxlIiwibWV0cmljIiwidW5pdCIsImxhYmVscyIsImRhdGFzZXRzIiwic2VyaWVzIiwiVCIsImRhdGEiLCJzdWdnZXN0aW9ucyIsIm1lc3NhZ2VzIiwic3VnZ2VzdGlvbiIsIm1lc3NhZ2UiLCJpc1N1Z2dlc3Rpb24iLCJhcGFydG1lbnRJZCIsImFuYWx5dGljc0luZm8iLCLJtWZhYyIsIsm1cHJvdiIsIk0iLCJ0b2tlbiIsImZhY3RvcnkiLCJwcm92aWRlZEluIiwiRCIsImNoYXJ0SW5mbyIsInNob3dTdWdnZXN0aW9ucyIsImZpbGxBcmVhIiwicmVuZGVyZWRDaGFydERhdGEiLCJjaGFydE9wdGlvbnMiLCJyZXNwb25zaXZlIiwic2NhbGVzIiwieSIsImJlZ2luQXRaZXJvIiwiY2hhcnRDb2xvcnMiLCJiZyIsImJvcmRlciIsIm5nT25DaGFuZ2VzIiwidXBkYXRlQ2hhcnQiLCJBIiwibGFiZWwiLCJiYWNrZ3JvdW5kQ29sb3IiLCJib3JkZXJDb2xvciIsImJvcmRlcldpZHRoIiwiZmlsbCIsInRlbnNpb24iLCJtIiwiZyIsInRpY2tzIiwiZGlzcGxheSIsInRleHQiLCJjb2xvciIsImZvbnQiLCJzaXplIiwid2VpZ2h0IiwicGFkZGluZyIsImJvdHRvbSIsInBsdWdpbnMiLCJ0b29sdGlwIiwiY2FsbGJhY2tzIiwiZGF0YXNldCIsInBhcnNlZCIsIsm1ZGlyIiwiTiIsInR5cGUiLCJpbnB1dHMiLCJmZWF0dXJlcyIsIkIiLCJ6IiwibCIsIloiLCJhIiwibiIsIiRpbXBsaWNpdCIsIm8iLCJwIiwiSCIsIkMiLCJ4IiwidiIsIm90IiwiY2hhcnRUeXBlIiwiZGVzY3JpcHRpb24iLCJoIiwiybVjbXAiLCJ1Iiwic2VsZWN0b3JzIiwiZGVjbHMiLCJ2YXJzIiwiY29uc3RzIiwidGVtcGxhdGUiLCJ3IiwiZCIsIkkiLCJkZXBlbmRlbmNpZXMiLCJfIiwiayIsIlMiLCJFIiwiZW5jYXBzdWxhdGlvbiIsIkwiLCJQIiwiVyIsInB0Il0sInNvdXJjZXMiOlsic3JjL2FwcC9mZWF0dXJlcy9hbmFseXRpY3Mvc2VydmljZXMvYW5hbHl0aWNzLWFwaS5zZXJ2aWNlLnRzIiwic3JjL2FwcC9mZWF0dXJlcy9hbmFseXRpY3MvaW50ZXJmYWNlcy9jaGFydC1jb21wb25lbnQudHMiLCJzcmMvYXBwL2ZlYXR1cmVzL2FuYWx5dGljcy9jb21wb25lbnRzL2FsYXJtcy1zZW50LXJlc29sdmVkLWNoYXJ0L2FsYXJtcy1zZW50LXJlc29sdmVkLWNoYXJ0LmNvbXBvbmVudC50cyIsInNyYy9hcHAvZmVhdHVyZXMvYW5hbHl0aWNzL2NvbXBvbmVudHMvc2hhcmVkL2NoYXJ0LWFuYWx5dGljcy5odG1sIiwic3JjL2FwcC9mZWF0dXJlcy9hbmFseXRpY3MvY29tcG9uZW50cy9lbmVyZ3ktY29uc3VtcHRpb24tY2hhcnQvZW5lcmd5LWNvbnN1bXB0aW9uLWNoYXJ0LmNvbXBvbmVudC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBBUElfQkFTRV9VUkwgfSBmcm9tICcuLi8uLi8uLi9jb3JlL3Rva2Vucy9hcGktYmFzZS11cmwudG9rZW4nO1xuaW1wb3J0IHsgQW5hbHl0aWNzRHRvIH0gZnJvbSAnLi4vbW9kZWxzL2FuYWx5dGljcy5tb2RlbCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBtYXAsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBQbGFudER0byB9IGZyb20gJy4uLy4uL2FwYXJ0bWVudC1tb25pdG9yL21vZGVscy9wbGFudC1yZXNwb25zZS5tb2RlbCc7XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgQW5hbHl0aWNzQXBpU2VydmljZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgaHR0cDogSHR0cENsaWVudCA9IGluamVjdChIdHRwQ2xpZW50KTtcbiAgcHJpdmF0ZSByZWFkb25seSBiYXNlVXJsOiBzdHJpbmcgPSBpbmplY3QoQVBJX0JBU0VfVVJMKTtcblxuICBwcml2YXRlIGFuYWx5dGljc0VuZHBvaW50ID0gXCJcIjtcbiAgcHJpdmF0ZSByZWFkb25seSBhcGFydG1lbnRzRW5kcG9pbnQgPSBgJHt0aGlzLmJhc2VVcmx9L3BsYW50L2FsbGA7XG5cbiAgICBwdWJsaWMgZ2V0QWxsQXBhcnRtZW50cygpOk9ic2VydmFibGU8YW55W10+e1xuICBcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PGFueVtdPih0aGlzLmFwYXJ0bWVudHNFbmRwb2ludCkucGlwZShcbiAgICAgICAgbWFwKHJlc3BvbnNlID0+IHJlc3BvbnNlLm1hcChpdGVtID0+ICh7XG4gICAgICAgICAgaWQ6IGl0ZW0uaWQsXG4gICAgICAgICAgbmFtZTogaXRlbS5uYW1lLFxuICAgICAgICAgIHJvb21zOiBpdGVtLnJvb21zLFxuICAgICAgICB9IGFzIFBsYW50RHRvKSkpXG4gICAgICApO1xuICAgIH1cblxuXG4gIHB1YmxpYyBnZXRBbmFseXRpY3MoYXBhcnRtZW50SWQ6IHN0cmluZywgcmVmcmVzaDogYm9vbGVhbiA9IGZhbHNlKTogT2JzZXJ2YWJsZTxBbmFseXRpY3NEdG8+IHtcbiAgICBpZihyZWZyZXNoKXtcbiAgICAgIHRoaXMuYW5hbHl0aWNzRW5kcG9pbnQgPSBgJHt0aGlzLmJhc2VVcmx9L2FuYWx5dGljcy8ke2FwYXJ0bWVudElkfT9yZWZyZXNoPXRydWVgO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFuYWx5dGljc0VuZHBvaW50ID0gYCR7dGhpcy5iYXNlVXJsfS9hbmFseXRpY3MvJHthcGFydG1lbnRJZH1gO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PGFueVtdPih0aGlzLmFuYWx5dGljc0VuZHBvaW50KS5waXBlKFxuICAgICAgbWFwKChyZXNwb25zZTogYW55W10pID0+IHtcblxuICAgICAgICBjb25zdCBhbmFseXRpY3NJbmZvOiBhbnlbXSA9IHJlc3BvbnNlLm1hcChpdGVtID0+ICh7XG4gICAgICAgICAgdGl0bGU6IGl0ZW0udGl0bGUsXG4gICAgICAgICAgbWV0cmljOiBpdGVtLm1ldHJpYyxcbiAgICAgICAgICB1bml0OiBpdGVtLnVuaXQsXG4gICAgICAgICAgbGFiZWxzOiBpdGVtLmxhYmVscyxcbiAgICAgICAgICBkYXRhc2V0czogaXRlbS5zZXJpZXMubWFwKChzOiBhbnkpID0+ICh7XG4gICAgICAgICAgICBpZDogcy5pZCxcbiAgICAgICAgICAgIG5hbWU6IHMubmFtZSxcbiAgICAgICAgICAgIGRhdGE6IHMuZGF0YVxuICAgICAgICAgIH0pKSxcbiAgICAgICAgICBzdWdnZXN0aW9uczoge1xuICAgICAgICAgICAgbWVzc2FnZXM6IGl0ZW0uc3VnZ2VzdGlvbi5tZXNzYWdlLFxuICAgICAgICAgICAgaXNTdWdnZXN0aW9uOiBpdGVtLnN1Z2dlc3Rpb24uaXNTdWdnZXN0aW9uXG4gICAgICAgICAgfVxuICAgICAgICB9KSk7XG5cbiAgICAgICAgY29uc3QgcmVzdWx0OiBBbmFseXRpY3NEdG8gPSB7XG4gICAgICAgICAgYXBhcnRtZW50SWQ6IGFwYXJ0bWVudElkLFxuICAgICAgICAgIGFuYWx5dGljc0luZm86IGFuYWx5dGljc0luZm8sXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxufVxuXG5cbiIsImltcG9ydCB7IENoYXJ0SW5mb0R0byB9IGZyb20gXCIuLi9tb2RlbHMvY2hhcnQtaW5mby5tb2RlbFwiO1xuaW1wb3J0IHsgQ2hhcnRDb25maWd1cmF0aW9uLCBDaGFydERhdGEsIENoYXJ0VHlwZSB9IGZyb20gJ2NoYXJ0LmpzJztcbmltcG9ydCB7IFNpbXBsZUNoYW5nZXMsIERpcmVjdGl2ZSwgSW5wdXQsIE9uQ2hhbmdlcyB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5cblxuQERpcmVjdGl2ZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQ2hhcnRDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xuXG4gICAgQElucHV0KCkgY2hhcnRJbmZvITogQ2hhcnRJbmZvRHRvO1xuICAgIGFic3RyYWN0IGNoYXJ0VHlwZTogQ2hhcnRUeXBlO1xuICAgIGFic3RyYWN0IGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gICAgQElucHV0KCkgc2hvd1N1Z2dlc3Rpb25zITogYm9vbGVhbjtcbiAgICBwcm90ZWN0ZWQgZmlsbEFyZWE6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBcbiAgICByZW5kZXJlZENoYXJ0RGF0YTogQ2hhcnREYXRhID0ge1xuICAgICAgICBsYWJlbHM6IFtdLFxuICAgICAgICBkYXRhc2V0czogW11cbiAgICB9O1xuXG4gICAgY2hhcnRPcHRpb25zOiBDaGFydENvbmZpZ3VyYXRpb25bJ29wdGlvbnMnXSA9IHtcbiAgICAgICAgcmVzcG9uc2l2ZTogdHJ1ZSxcbiAgICAgICAgc2NhbGVzOiB7XG4gICAgICAgICAgICB5OiB7IGJlZ2luQXRaZXJvOiB0cnVlIH1cbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBjaGFydENvbG9ycyA9IFtcbiAgICAgICAgeyBiZzogJ3JnYmEoNjgsIDExOSwgMjM5LCAwLjUpJywgYm9yZGVyOiAncmdiKDY4LCAyMzksIDIzNiknIH0sXG4gICAgICAgIHsgYmc6ICdyZ2JhKDM0LCAxOTcsIDk0LCAwLjUpJywgYm9yZGVyOiAncmdiKDM0LCAxOTcsIDk0KScgfVxuICAgIF07XG5cblxuXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBpZiAoY2hhbmdlc1snY2hhcnRJbmZvJ10gJiYgdGhpcy5jaGFydEluZm8pIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ2hhcnQodGhpcy5jaGFydEluZm8pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHVwZGF0ZUNoYXJ0KGRhdGE6IENoYXJ0SW5mb0R0byk6IHZvaWQge1xuICAgICAgICBjb25zdCBkZWZhdWx0Q29sb3IgPSB7IGJnOiAncmdiYSg2OCwgMTE5LCAyMzksIDAuNSknLCBib3JkZXI6ICdyZ2IoNjgsIDIyNSwgMjM5KScgfTtcbiAgICAgICAgdGhpcy5yZW5kZXJlZENoYXJ0RGF0YSA9IHtcbiAgICAgICAgICAgIGxhYmVsczogZGF0YS5sYWJlbHMsXG4gICAgICAgICAgICBkYXRhc2V0czogZGF0YS5kYXRhc2V0cy5tYXAoKGRzLGluZGV4KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjb2xvciA9IHRoaXMuY2hhcnRDb2xvcnNbaW5kZXhdID8/IGRlZmF1bHRDb2xvcjtcbiAgICAgICAgICAgIHJldHVybntcbiAgICAgICAgICAgICAgICBkYXRhOiBkcy5kYXRhLFxuICAgICAgICAgICAgICAgIGxhYmVsOiBkcy5uYW1lLCBcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IGNvbG9yLmJnLCBcbiAgICAgICAgICAgICAgICBib3JkZXJDb2xvcjogY29sb3IuYm9yZGVyLFxuICAgICAgICAgICAgICAgIGJvcmRlcldpZHRoOiAxLCBcbiAgICAgICAgICAgICAgICBmaWxsOiB0aGlzLmZpbGxBcmVhLCBcbiAgICAgICAgICAgICAgICB0ZW5zaW9uOiAwLjJcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KVxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIDIuIEFnZ2lvcm5hIGxlIG9wemlvbmkgcGVyIGluY2x1ZGVyZSBsJ3VuaXTDoCBkaSBtaXN1cmEgKHVuaXQpXG4gICAgdGhpcy5jaGFydE9wdGlvbnMgPSB7XG4gICAgICAgICAgICAuLi50aGlzLmNoYXJ0T3B0aW9ucyxcbiAgICAgICAgICAgIHNjYWxlczoge1xuICAgICAgICAgICAgICAgIC4uLnRoaXMuY2hhcnRPcHRpb25zPy5zY2FsZXMsXG4gICAgICAgICAgICAgICAgeToge1xuICAgICAgICAgICAgICAgICAgICAuLi50aGlzLmNoYXJ0T3B0aW9ucz8uc2NhbGVzPy5bJ3knXSxcbiAgICAgICAgICAgICAgICAgICAgYmVnaW5BdFplcm86IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIC8vIFJJTVVPVklBTU8gaWwgY2FsbGJhY2sgZGFpIHRpY2tzIHNlIG5vbiB2dW9pIGwndW5pdMOgIHN1IG9nbmkgbnVtZXJvXG4gICAgICAgICAgICAgICAgICAgIHRpY2tzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi50aGlzLmNoYXJ0T3B0aW9ucz8uc2NhbGVzPy5bJ3knXT8udGlja3MsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIC8vIEFHR0lVTkdJQU1PIGlsIHRpdG9sbyBkZWxsJ2Fzc2VcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBkYXRhLnVuaXQsIC8vIE1vc3RyYSBsJ3VuaXTDoCAoZXMuIFwia1doXCIpIGluIGNpbWEgbyBhIGxhdG9cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAnIzY0NzQ4YicsIC8vIENvbG9yZSBzbGF0ZS01MDAgcGVyIGNvZXJlbnphIGNvbiBUYWlsd2luZFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9udDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU6IDEyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdlaWdodDogJ2JvbGQnXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogeyBib3R0b206IDEwIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwbHVnaW5zOiB7XG4gICAgICAgICAgICAgICAgLi4udGhpcy5jaGFydE9wdGlvbnM/LnBsdWdpbnMsXG4gICAgICAgICAgICAgICAgdG9vbHRpcDoge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFja3M6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRpIGNvbnNpZ2xpbyBkaSBMQVNDSVJFIGwndW5pdMOgIG5lbCB0b29sdGlwLCBwZXJjaMOpIGzDrCDDqCBtb2x0byB1dGlsZVxuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IChjb250ZXh0KSA9PiBgJHtjb250ZXh0LmRhdGFzZXQubGFiZWx9OiAke2NvbnRleHQucGFyc2VkLnl9ICR7ZGF0YS51bml0fWBcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuXG4gICAgfVxufVxuIiwiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ2hhcnRDb21wb25lbnQgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2NoYXJ0LWNvbXBvbmVudCc7XG5pbXBvcnQgeyBDaGFydEluZm9EdG8gfSBmcm9tICcuLi8uLi9tb2RlbHMvY2hhcnQtaW5mby5tb2RlbCc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQmFzZUNoYXJ0RGlyZWN0aXZlIH0gZnJvbSAnbmcyLWNoYXJ0cyc7XG5pbXBvcnQgeyBDaGFydFR5cGUgfSBmcm9tICdjaGFydC5qcyc7XG5cbkBDb21wb25lbnQoeyBcbiAgICBzZWxlY3RvcjogJ2FwcC1hbGFybXMtc2VudC1yZXNvbHZlZC1jaGFydCcsIFxuICAgIHN0YW5kYWxvbmU6IHRydWUsIFxuICAgIGltcG9ydHM6IFtCYXNlQ2hhcnREaXJlY3RpdmUsIENvbW1vbk1vZHVsZV0sXG4gICAgdGVtcGxhdGVVcmw6ICcuLi9zaGFyZWQvY2hhcnQtYW5hbHl0aWNzLmh0bWwnfSlcbmV4cG9ydCBjbGFzcyBBbGFybXNTZW50UmVzb2x2ZWRDaGFydENvbXBvbmVudCBleHRlbmRzIENoYXJ0Q29tcG9uZW50IHtcblxuICAgIG92ZXJyaWRlIGNoYXJ0VHlwZTogQ2hhcnRUeXBlID0gJ2Jhcic7XG5cbiAgICBvdmVycmlkZSBkZXNjcmlwdGlvbjogc3RyaW5nID0gXCJEYXRpIHJlbGF0aXZpIGFsbGEgZ2VzdGlvbmUgYWxsYXJtaSBkZWwgcmVwYXJ0by5cIjtcblxufVxuIiwiPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgbGc6ZmxleC1yb3cgYm9yZGVyIGJvcmRlci1zbGF0ZS0yMDAgYmctd2hpdGUgc2hhZG93LXNtIG92ZXJmbG93LXktYXV0byByb3VuZGVkLTN4bCBoLWZ1bGxcblxuICAgICAgICAgICBbJjo6LXdlYmtpdC1zY3JvbGxiYXJdOnctMlxuICAgICAgICAgICBbJjo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2tdOm15LTVcbiAgICAgICAgICAgWyY6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iXTpiZy1bcmdiKDIxMCwyMTAsMjEwKV1cbiAgICAgICAgICAgWyY6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iXTpyb3VuZGVkLWZ1bGxcIj5cblxuPGRpdiBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgJ3ctZnVsbCc6ICFjaGFydEluZm8uc3VnZ2VzdGlvbnMuaXNTdWdnZXN0aW9uIHx8ICFzaG93U3VnZ2VzdGlvbnMsXG4gICAgICAgICAgJ2xnOnctWzcwJV0nOiBjaGFydEluZm8uc3VnZ2VzdGlvbnMuaXNTdWdnZXN0aW9uICYmIHNob3dTdWdnZXN0aW9uc1xuICAgICAgIH1cIlxuICAgICAgIGRhdGEtdGVzdD1cImNoYXJ0LWNvbnRhaW5lclwiXG4gICAgICAgY2xhc3M9XCJibG9jayBoLWZ1bGwgcC00IGJnLXdoaXRlIHAtNCAgcm91bmRlZC10bC0zeGwgcm91bmRlZC1ibC0zeGwgc3RpY2t5IHRvcC0wIGJvcmRlci1yIGJvcmRlci1zbGF0ZS0yMDBcIj5cbiAgPGRpdiBjbGFzcz1cImJvcmRlci1iIGJvcmRlci1zbGF0ZS0yMDAgcGItMSBtYi01XCI+XG4gICAgPGgxIGNsYXNzPVwiZm9udC1ib2xkIHRleHQtc2xhdGUtNzAwIHRleHQteGxcIj57e2NoYXJ0SW5mby50aXRsZX19PC9oMT5cbiAgICA8aDIgY2xhc3M9XCJmb250LWJvbGQgdGV4dC1zbGF0ZS01MDBcIj57e2Rlc2NyaXB0aW9ufX08L2gyPlxuICA8L2Rpdj5cblxuICA8Y2FudmFzIGJhc2VDaGFydFxuICAgIFtkYXRhXT1cInJlbmRlcmVkQ2hhcnREYXRhXCJcbiAgICBbb3B0aW9uc109XCJjaGFydE9wdGlvbnNcIlxuICAgIFt0eXBlXT1cImNoYXJ0VHlwZVwiPlxuICA8L2NhbnZhcz5cblxuXG48L2Rpdj5cblxuPGRpdiAqbmdJZj1cImNoYXJ0SW5mby5zdWdnZXN0aW9ucy5pc1N1Z2dlc3Rpb24gICYmIHNob3dTdWdnZXN0aW9uc1wiIGRhdGEtdGVzdD1cInN1Z2dlc3Rpb25zLXNpZGViYXJcIiBjbGFzcz1cImxnOmgtMCBsZzp3LVszMCVdIHAtMyBcIj5cbiAgPGgxIGNsYXNzPVwiZm9udC1ib2xkIHAtMiB0ZXh0LXNsYXRlLTcwMCB0ZXh0LXhsXCI+U3VnZ2VyaW1lbnRpIFJpc3Bhcm1pbyBFbmVyZ2V0aWNvPC9oMT5cbiAgPHVsIGNsYXNzPVwiZmxleCBmbGV4LWNvbCBnYXAtM1wiPlxuICAgIEBmb3Ioc3VnZyBvZiBjaGFydEluZm8uc3VnZ2VzdGlvbnMubWVzc2FnZXM7IHRyYWNrIHN1Z2cpe1xuICAgIDxsaSBkYXRhLXRlc3Q9XCJzdWdnZXN0aW9uLWl0ZW1cIiBjbGFzcz1cInAtNCByb3VuZGVkLTJ4bCBib3JkZXIgYm9yZGVyLVtyZ2IoMjU1LDIxMiwwKV0gYmctd2hpdGUgc2hhZG93LXNtIGhvdmVyOnNoYWRvdy1tZCB0cmFuc2l0aW9uLXNoYWRvdyBkdXJhdGlvbi0yMDBcIj5cbiAgICAgIDxwIGNsYXNzPVwiZm9udC1ib2xkIHRleHQtYW1iZXItNTAwIFwiPlNVR0dFUklNRU5UTzwvcD5cbiAgICAgIDxwPnt7c3VnZ319PC9wPlxuICAgIDwvbGk+XG4gIH1cbiAgPC91bD5cbjwvZGl2PlxuXG48L2Rpdj5cblxuIiwiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgU2ltcGxlQ2hhbmdlcyAgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENoYXJ0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9jaGFydC1jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2hhcnRJbmZvRHRvIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2NoYXJ0LWluZm8ubW9kZWwnO1xuaW1wb3J0IHsgQ2hhcnRUeXBlIH0gZnJvbSAnY2hhcnQuanMnO1xuaW1wb3J0IHsgQmFzZUNoYXJ0RGlyZWN0aXZlIH0gZnJvbSAnbmcyLWNoYXJ0cyc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5AQ29tcG9uZW50KHsgXG4gICAgc2VsZWN0b3I6ICdhcHAtZW5lcmd5LWNvbnN1bXB0aW9uLWNoYXJ0JywgXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSwgXG4gICAgaW1wb3J0czogW0Jhc2VDaGFydERpcmVjdGl2ZSwgQ29tbW9uTW9kdWxlXSxcbiAgICB0ZW1wbGF0ZVVybDogJy4uL3NoYXJlZC9jaGFydC1hbmFseXRpY3MuaHRtbCd9KVxuZXhwb3J0IGNsYXNzIEVuZXJneUNvbnN1bXB0aW9uQ2hhcnRDb21wb25lbnQgZXh0ZW5kcyBDaGFydENvbXBvbmVudCB7XG5cbiAgICBvdmVycmlkZSBkZXNjcmlwdGlvbjogc3RyaW5nID0gXCJEYXRpIHJlbGF0aXZpIGFpIGNvbnN1bWkgZGVsbCdpbGx1bWluYXppb25lIGRlbGwnYXBwYXJ0YW1lbnRvLlwiO1xuXG4gICAgb3ZlcnJpZGUgY2hhcnRUeXBlOiBDaGFydFR5cGUgPSAnbGluZSc7XG5cbiAgICBvdmVycmlkZSBmaWxsQXJlYSA9IHRydWU7XG5cbiAgICBvdmVycmlkZSBjaGFydENvbG9ycyA9IFt7IGJnOiAncmdiYSgyMjgsIDIzOCwgNDMsIDAuNjgpJywgYm9yZGVyOiAncmdiKDEwNywgMTA5LCAzKScgfV07XG5cbn1cbiJdLCJtYXBwaW5ncyI6IjsyZEFRQSxHQUFhLENBQUFBLENBQUEsRUFBQUMsYUFBQSxHQUFBQyxDQUFBLE9BQW1CLEtBQUFELGFBQUEsR0FBQUUsQ0FBQSxNQUExQixLQUFPLENBQUFDLENBQW1CLENBQ2JDLElBQUEsRUFBQUosYUFBQSxHQUFBQyxDQUFBLE1BQW1CSSxDQUFBLENBQU9DLENBQVUsR0FDcENDLE9BQUEsRUFBQVAsYUFBQSxHQUFBQyxDQUFBLE1BQWtCSSxDQUFBLENBQU9HLENBQVksR0FFOUNDLGlCQUFBLEVBQUFULGFBQUEsR0FBQUMsQ0FBQSxNQUFvQixJQUNYUyxrQkFBQSxFQUFBVixhQUFBLEdBQUFDLENBQUEsTUFBcUIsR0FBRyxLQUFLTSxPQUFPLGNBRTVDSSxpQkFBQSxDQUFnQixDQUFBWCxhQUFBLEdBQUFFLENBQUEsS0FBQUYsQ0FBQSxnQkFBQUMsQ0FBQSxNQUVyQixNQUFPLE1BQUtHLElBQUEsQ0FBS1EsR0FBQSxDQUFXLEtBQUtGLGtCQUFrQixFQUFFRyxJQUFBLENBQ25EQyxDQUFBLENBQUlDLENBQUEsRUFBWSxDQUFBZixhQUFBLEdBQUFFLENBQUEsS0FBQUYsQ0FBQSxnQkFBQUMsQ0FBQSxhQUFBYyxDQUFBLENBQVNDLEdBQUEsQ0FBSUMsQ0FBQSxFQUFTLENBQUFqQixhQUFBLEdBQUFFLENBQUEsS0FBQUYsQ0FBQSxnQkFBQUMsQ0FBQSxhQUNwQ2lCLEVBQUEsQ0FBSUQsQ0FBQSxDQUFLQyxFQUFBLENBQ1RDLElBQUEsQ0FBTUYsQ0FBQSxD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 \ No newline at end of file diff --git a/frontend/dist-instrumented/chunk-BZP772JM.js.map b/frontend/dist-instrumented/chunk-BZP772JM.js.map new file mode 100644 index 00000000..81c5cd8f --- /dev/null +++ b/frontend/dist-instrumented/chunk-BZP772JM.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["src/app/features/analytics/services/analytics-api.service.ts", "src/app/features/analytics/interfaces/chart-component.ts", "src/app/features/analytics/components/alarms-sent-resolved-chart/alarms-sent-resolved-chart.component.ts", "src/app/features/analytics/components/shared/chart-analytics.html", "src/app/features/analytics/components/energy-consumption-chart/energy-consumption-chart.component.ts", "src/app/features/analytics/components/shared/chart-analytics.html"], + "sourcesContent": ["import { inject, Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { API_BASE_URL } from '../../../core/tokens/api-base-url.token';\nimport { AnalyticsDto } from '../models/analytics.model';\nimport { Observable, map, of } from 'rxjs';\nimport { PlantDto } from '../../apartment-monitor/models/plant-response.model';\n\n@Injectable({ providedIn: 'root' })\nexport class AnalyticsApiService {\n private readonly http: HttpClient = inject(HttpClient);\n private readonly baseUrl: string = inject(API_BASE_URL);\n\n private analyticsEndpoint = \"\";\n private readonly apartmentsEndpoint = `${this.baseUrl}/plant/all`;\n\n public getAllApartments():Observable{\n \n return this.http.get(this.apartmentsEndpoint).pipe(\n map(response => response.map(item => ({\n id: item.id,\n name: item.name,\n rooms: item.rooms,\n } as PlantDto)))\n );\n }\n\n\n public getAnalytics(apartmentId: string, refresh: boolean = false): Observable {\n if(refresh){\n this.analyticsEndpoint = `${this.baseUrl}/analytics/${apartmentId}?refresh=true`;\n } else {\n this.analyticsEndpoint = `${this.baseUrl}/analytics/${apartmentId}`;\n }\n\n return this.http.get(this.analyticsEndpoint).pipe(\n map((response: any[]) => {\n\n const analyticsInfo: any[] = response.map(item => ({\n title: item.title,\n metric: item.metric,\n unit: item.unit,\n labels: item.labels,\n datasets: item.series.map((s: any) => ({\n id: s.id,\n name: s.name,\n data: s.data\n })),\n suggestions: {\n messages: item.suggestion.message,\n isSuggestion: item.suggestion.isSuggestion\n }\n }));\n\n const result: AnalyticsDto = {\n apartmentId: apartmentId,\n analyticsInfo: analyticsInfo,\n };\n\n return result;\n })\n );\n }\n}\n\n\n", "import { ChartInfoDto } from \"../models/chart-info.model\";\nimport { ChartConfiguration, ChartData, ChartType } from 'chart.js';\nimport { SimpleChanges, Directive, Input, OnChanges } from \"@angular/core\";\n\n\n@Directive()\nexport abstract class ChartComponent implements OnChanges {\n\n @Input() chartInfo!: ChartInfoDto;\n abstract chartType: ChartType;\n abstract description: string;\n @Input() showSuggestions!: boolean;\n protected fillArea: boolean = false;\n \n renderedChartData: ChartData = {\n labels: [],\n datasets: []\n };\n\n chartOptions: ChartConfiguration['options'] = {\n responsive: true,\n scales: {\n y: { beginAtZero: true }\n }\n };\n\n chartColors = [\n { bg: 'rgba(68, 119, 239, 0.5)', border: 'rgb(68, 239, 236)' },\n { bg: 'rgba(34, 197, 94, 0.5)', border: 'rgb(34, 197, 94)' }\n ];\n\n\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['chartInfo'] && this.chartInfo) {\n this.updateChart(this.chartInfo);\n }\n }\n\n protected updateChart(data: ChartInfoDto): void {\n const defaultColor = { bg: 'rgba(68, 119, 239, 0.5)', border: 'rgb(68, 225, 239)' };\n this.renderedChartData = {\n labels: data.labels,\n datasets: data.datasets.map((ds,index) => {\n const color = this.chartColors[index] ?? defaultColor;\n return{\n data: ds.data,\n label: ds.name, \n backgroundColor: color.bg, \n borderColor: color.border,\n borderWidth: 1, \n fill: this.fillArea, \n tension: 0.2\n };\n })\n };\n\n // 2. Aggiorna le opzioni per includere l'unità di misura (unit)\n this.chartOptions = {\n ...this.chartOptions,\n scales: {\n ...this.chartOptions?.scales,\n y: {\n ...this.chartOptions?.scales?.['y'],\n beginAtZero: true,\n // RIMUOVIAMO il callback dai ticks se non vuoi l'unità su ogni numero\n ticks: {\n ...this.chartOptions?.scales?.['y']?.ticks,\n },\n // AGGIUNGIAMO il titolo dell'asse\n title: {\n display: true,\n text: data.unit, // Mostra l'unità (es. \"kWh\") in cima o a lato\n color: '#64748b', // Colore slate-500 per coerenza con Tailwind\n font: {\n size: 12,\n weight: 'bold'\n },\n padding: { bottom: 10 }\n }\n }\n },\n plugins: {\n ...this.chartOptions?.plugins,\n tooltip: {\n callbacks: {\n // Ti consiglio di LASCIRE l'unità nel tooltip, perché lì è molto utile\n label: (context) => `${context.dataset.label}: ${context.parsed.y} ${data.unit}`\n }\n }\n }\n };\n\n\n }\n}\n", "import { Component, Input, SimpleChanges } from '@angular/core';\nimport { ChartComponent } from '../../interfaces/chart-component';\nimport { ChartInfoDto } from '../../models/chart-info.model';\nimport { CommonModule } from '@angular/common';\nimport { BaseChartDirective } from 'ng2-charts';\nimport { ChartType } from 'chart.js';\n\n@Component({ \n selector: 'app-alarms-sent-resolved-chart', \n standalone: true, \n imports: [BaseChartDirective, CommonModule],\n templateUrl: '../shared/chart-analytics.html'})\nexport class AlarmsSentResolvedChartComponent extends ChartComponent {\n\n override chartType: ChartType = 'bar';\n\n override description: string = \"Dati relativi alla gestione allarmi del reparto.\";\n\n}\n", "
\n\n
\n
\n

{{chartInfo.title}}

\n

{{description}}

\n
\n\n \n \n\n\n
\n\n
\n

Suggerimenti Risparmio Energetico

\n
    \n @for(sugg of chartInfo.suggestions.messages; track sugg){\n
  • \n

    SUGGERIMENTO

    \n

    {{sugg}}

    \n
  • \n }\n
\n
\n\n
\n\n", "import { Component, Input, SimpleChanges } from '@angular/core';\nimport { ChartComponent } from '../../interfaces/chart-component';\nimport { ChartInfoDto } from '../../models/chart-info.model';\nimport { ChartType } from 'chart.js';\nimport { BaseChartDirective } from 'ng2-charts';\nimport { CommonModule } from '@angular/common';\n\n@Component({ \n selector: 'app-energy-consumption-chart', \n standalone: true, \n imports: [BaseChartDirective, CommonModule],\n templateUrl: '../shared/chart-analytics.html'})\nexport class EnergyConsumptionChartComponent extends ChartComponent {\n\n override description: string = \"Dati relativi ai consumi dell'illuminazione dell'appartamento.\";\n\n override chartType: ChartType = 'line';\n\n override fillArea = true;\n\n override chartColors = [{ bg: 'rgba(228, 238, 43, 0.68)', border: 'rgb(107, 109, 3)' }];\n\n}\n", "
\n\n
\n
\n

{{chartInfo.title}}

\n

{{description}}

\n
\n\n \n \n\n\n
\n\n
\n

Suggerimenti Risparmio Energetico

\n
    \n @for(sugg of chartInfo.suggestions.messages; track sugg){\n
  • \n

    SUGGERIMENTO

    \n

    {{sugg}}

    \n
  • \n }\n
\n
\n\n
\n\n"], + "mappings": "kYAQA,IAAaA,GAAmB,IAAA,CAA1B,MAAOA,CAAmB,CACbC,KAAmBC,EAAOC,CAAU,EACpCC,QAAkBF,EAAOG,CAAY,EAE9CC,kBAAoB,GACXC,mBAAqB,GAAG,KAAKH,OAAO,aAE5CI,kBAAgB,CAErB,OAAO,KAAKP,KAAKQ,IAAW,KAAKF,kBAAkB,EAAEG,KACnDC,EAAIC,GAAYA,EAASD,IAAIE,IAAS,CACpCC,GAAID,EAAKC,GACTC,KAAMF,EAAKE,KACXC,MAAOH,EAAKG,OACA,CAAC,CAAC,CAEpB,CAGKC,aAAaC,EAAqBC,EAAmB,GAAK,CAC/D,OAAGA,EACD,KAAKb,kBAAoB,GAAG,KAAKF,OAAO,cAAcc,CAAW,gBAEjE,KAAKZ,kBAAoB,GAAG,KAAKF,OAAO,cAAcc,CAAW,GAG5D,KAAKjB,KAAKQ,IAAW,KAAKH,iBAAiB,EAAEI,KAClDC,EAAKC,GAAmB,CAEtB,IAAMQ,EAAuBR,EAASD,IAAIE,IAAS,CACjDQ,MAAOR,EAAKQ,MACZC,OAAQT,EAAKS,OACbC,KAAMV,EAAKU,KACXC,OAAQX,EAAKW,OACbC,SAAUZ,EAAKa,OAAOf,IAAKgB,IAAY,CACrCb,GAAIa,EAAEb,GACNC,KAAMY,EAAEZ,KACRa,KAAMD,EAAEC,MACR,EACFC,YAAa,CACXC,SAAUjB,EAAKkB,WAAWC,QAC1BC,aAAcpB,EAAKkB,WAAWE,eAEhC,EAOF,MAL6B,CAC3Bf,YAAaA,EACbE,cAAeA,EAInB,CAAC,CAAC,CAEN,4CArDWpB,EAAmB,6BAAnBA,EAAmBkC,QAAnBlC,EAAmBmC,UAAAC,WADN,MAAM,CAAA,SACnBpC,CAAmB,GAAA,ECFhC,IAAsBqC,GAAc,IAAA,CAA9B,MAAgBA,CAAc,CAEvBC,UAGAC,gBACCC,SAAoB,GAE9BC,kBAA+B,CAC3BC,OAAQ,CAAA,EACRC,SAAU,CAAA,GAGdC,aAA8C,CAC1CC,WAAY,GACZC,OAAQ,CACJC,EAAG,CAAEC,YAAa,EAAI,IAI9BC,YAAc,CACV,CAAEC,GAAI,0BAA2BC,OAAQ,mBAAmB,EAC5D,CAAED,GAAI,yBAA0BC,OAAQ,kBAAkB,CAAE,EAKhEC,YAAYC,EAAsB,CAC1BA,EAAQ,WAAgB,KAAKf,WAC7B,KAAKgB,YAAY,KAAKhB,SAAS,CAEvC,CAEUgB,YAAYC,EAAkB,CACpC,IAAMC,EAAe,CAAEN,GAAI,0BAA2BC,OAAQ,mBAAmB,EACjF,KAAKV,kBAAoB,CACrBC,OAAQa,EAAKb,OACbC,SAAUY,EAAKZ,SAASc,IAAI,CAACC,EAAGC,IAAS,CACzC,IAAMC,EAAQ,KAAKX,YAAYU,CAAK,GAAKH,EACzC,MAAM,CACFD,KAAMG,EAAGH,KACTM,MAAOH,EAAGI,KACVC,gBAAiBH,EAAMV,GACvBc,YAAaJ,EAAMT,OACnBc,YAAa,EACbC,KAAM,KAAK1B,SACX2B,QAAS,GAEb,CAAC,GAIT,KAAKvB,aAAewB,EAAAC,EAAA,GACT,KAAKzB,cADI,CAEZE,OAAQsB,EAAAC,EAAA,GACD,KAAKzB,cAAcE,QADlB,CAEJC,EAAGqB,EAAAC,EAAA,GACI,KAAKzB,cAAcE,QAAS,GADhC,CAECE,YAAa,GAEbsB,MAAOD,EAAA,GACA,KAAKzB,cAAcE,QAAS,GAAMwB,OAGzCC,MAAO,CACHC,QAAS,GACTC,KAAMlB,EAAKmB,KACXd,MAAO,UACPe,KAAM,CACFC,KAAM,GACNC,OAAQ,QAEZC,QAAS,CAAEC,OAAQ,EAAE,OAIjCC,QAASZ,EAAAC,EAAA,GACF,KAAKzB,cAAcoC,SADjB,CAELC,QAAS,CACLC,UAAW,CAEPrB,MAAQsB,GAAY,GAAGA,EAAQC,QAAQvB,KAAK,KAAKsB,EAAQE,OAAOtC,CAAC,IAAIQ,EAAKmB,IAAI,QAOlG,4CAxFkBrC,EAAc,2BAAdA,EAAciD,OAAA,CAAAhD,UAAA,YAAAC,gBAAA,iBAAA,EAAAgD,SAAA,CAAAC,CAAA,CAAA,CAAA,SAAdnD,CAAc,GAAA,sEEyBhCoD,EAAA,EAAA,KAAA,EAAA,EAAyJ,EAAA,IAAA,EAAA,EAClHC,EAAA,EAAA,cAAA,EAAYC,EAAA,EACjDF,EAAA,EAAA,GAAA,EAAGC,EAAA,CAAA,EAAQC,EAAA,EAAI,0BAAZC,EAAA,CAAA,EAAAC,EAAAC,CAAA,4BANTL,EAAA,EAAA,MAAA,CAAA,EAAmI,EAAA,KAAA,CAAA,EAChFC,EAAA,EAAA,mCAAA,EAAiCC,EAAA,EAClFF,EAAA,EAAA,KAAA,CAAA,EACEM,EAAA,EAAAC,EAAA,EAAA,EAAA,KAAA,GAAAC,CAAA,EAMFN,EAAA,EAAK,kBANHC,EAAA,CAAA,EAAAM,EAAAC,EAAAC,UAAAC,YAAAC,QAAA,GDlBJ,IAAaC,IAAiC,IAAA,CAAxC,MAAOA,UAAyCC,CAAc,CAEvDC,UAAuB,MAEvBC,YAAsB,kHAJtBH,CAAgC,IAAAI,GAAhCJ,CAAgC,CAAA,CAAA,GAAA,2BAAhCA,EAAgCK,UAAA,CAAA,CAAA,gCAAA,CAAA,EAAAC,SAAA,CAAAC,CAAA,EAAAC,MAAA,EAAAC,KAAA,GAAAC,OAAA,CAAA,CAAA,EAAA,OAAA,WAAA,cAAA,SAAA,mBAAA,WAAA,YAAA,kBAAA,cAAA,SAAA,6BAAA,oCAAA,qDAAA,2CAAA,EAAA,CAAA,YAAA,kBAAA,EAAA,QAAA,SAAA,MAAA,WAAA,MAAA,iBAAA,iBAAA,SAAA,QAAA,WAAA,mBAAA,EAAA,SAAA,EAAA,CAAA,EAAA,WAAA,mBAAA,OAAA,MAAA,EAAA,CAAA,EAAA,YAAA,iBAAA,SAAA,EAAA,CAAA,EAAA,YAAA,gBAAA,EAAA,CAAA,YAAA,GAAA,EAAA,OAAA,UAAA,MAAA,EAAA,CAAA,YAAA,sBAAA,QAAA,yBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,sBAAA,EAAA,SAAA,aAAA,KAAA,EAAA,CAAA,EAAA,YAAA,MAAA,iBAAA,SAAA,EAAA,CAAA,EAAA,OAAA,WAAA,OAAA,EAAA,CAAA,YAAA,kBAAA,EAAA,MAAA,cAAA,SAAA,0BAAA,WAAA,YAAA,kBAAA,oBAAA,cAAA,EAAA,CAAA,EAAA,YAAA,gBAAA,CAAA,EAAAC,SAAA,SAAAC,EAAAC,EAAA,CAAAD,EAAA,ICZ7C1B,EAAA,EAAA,MAAA,CAAA,EAKsD,EAAA,MAAA,CAAA,EAO6D,EAAA,MAAA,CAAA,EAChE,EAAA,KAAA,CAAA,EACFC,EAAA,CAAA,EAAmBC,EAAA,EAChEF,EAAA,EAAA,KAAA,CAAA,EAAqCC,EAAA,CAAA,EAAeC,EAAA,EAAK,EAG3D0B,EAAA,EAAA,SAAA,CAAA,EAOF1B,EAAA,EAEA2B,EAAA,EAAAC,EAAA,EAAA,EAAA,MAAA,CAAA,EAYA5B,EAAA,SAhCKC,EAAA,EAAA4B,EAAA,UAAAC,EAAA,EAAAC,EAAA,CAAAN,EAAAhB,UAAAC,YAAAsB,cAAA,CAAAP,EAAAQ,gBAAAR,EAAAhB,UAAAC,YAAAsB,cAAAP,EAAAQ,eAAA,CAAA,EAO4ChC,EAAA,CAAA,EAAAC,EAAAuB,EAAAhB,UAAAyB,KAAA,EACRjC,EAAA,CAAA,EAAAC,EAAAuB,EAAAV,WAAA,EAIrCd,EAAA,EAAA4B,EAAA,OAAAJ,EAAAU,iBAAA,EAA0B,UAAAV,EAAAW,YAAA,EACF,OAAAX,EAAAX,SAAA,EAOtBb,EAAA,EAAA4B,EAAA,OAAAJ,EAAAhB,UAAAC,YAAAsB,cAAAP,EAAAQ,eAAA,kBDjBQI,EAAoBC,EAAYC,EAAAC,CAAA,EAAAC,cAAA,CAAA,CAAA,SAEjC7B,CAAiC,GAAA,sEGmB1C8B,EAAA,EAAA,KAAA,EAAA,EAAyJ,EAAA,IAAA,EAAA,EAClHC,EAAA,EAAA,cAAA,EAAYC,EAAA,EACjDF,EAAA,EAAA,GAAA,EAAGC,EAAA,CAAA,EAAQC,EAAA,EAAI,0BAAZC,EAAA,CAAA,EAAAC,EAAAC,CAAA,4BANTL,EAAA,EAAA,MAAA,CAAA,EAAmI,EAAA,KAAA,CAAA,EAChFC,EAAA,EAAA,mCAAA,EAAiCC,EAAA,EAClFF,EAAA,EAAA,KAAA,CAAA,EACEM,EAAA,EAAAC,EAAA,EAAA,EAAA,KAAA,GAAAC,CAAA,EAMFN,EAAA,EAAK,kBANHC,EAAA,CAAA,EAAAM,EAAAC,EAAAC,UAAAC,YAAAC,QAAA,GDlBJ,IAAaC,IAAgC,IAAA,CAAvC,MAAOA,UAAwCC,CAAc,CAEtDC,YAAsB,iEAEtBC,UAAuB,OAEvBC,SAAW,GAEXC,YAAc,CAAC,CAAEC,GAAI,2BAA4BC,OAAQ,kBAAkB,CAAE,iEAR7EP,CAA+B,IAAAQ,GAA/BR,CAA+B,CAAA,CAAA,GAAA,2BAA/BA,EAA+BS,UAAA,CAAA,CAAA,8BAAA,CAAA,EAAAC,SAAA,CAAAC,CAAA,EAAAC,MAAA,EAAAC,KAAA,GAAAC,OAAA,CAAA,CAAA,EAAA,OAAA,WAAA,cAAA,SAAA,mBAAA,WAAA,YAAA,kBAAA,cAAA,SAAA,6BAAA,oCAAA,qDAAA,2CAAA,EAAA,CAAA,YAAA,kBAAA,EAAA,QAAA,SAAA,MAAA,WAAA,MAAA,iBAAA,iBAAA,SAAA,QAAA,WAAA,mBAAA,EAAA,SAAA,EAAA,CAAA,EAAA,WAAA,mBAAA,OAAA,MAAA,EAAA,CAAA,EAAA,YAAA,iBAAA,SAAA,EAAA,CAAA,EAAA,YAAA,gBAAA,EAAA,CAAA,YAAA,GAAA,EAAA,OAAA,UAAA,MAAA,EAAA,CAAA,YAAA,sBAAA,QAAA,yBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,sBAAA,EAAA,SAAA,aAAA,KAAA,EAAA,CAAA,EAAA,YAAA,MAAA,iBAAA,SAAA,EAAA,CAAA,EAAA,OAAA,WAAA,OAAA,EAAA,CAAA,YAAA,kBAAA,EAAA,MAAA,cAAA,SAAA,0BAAA,WAAA,YAAA,kBAAA,oBAAA,cAAA,EAAA,CAAA,EAAA,YAAA,gBAAA,CAAA,EAAAC,SAAA,SAAAC,EAAAC,EAAA,CAAAD,EAAA,ICZ5C9B,EAAA,EAAA,MAAA,CAAA,EAKsD,EAAA,MAAA,CAAA,EAO6D,EAAA,MAAA,CAAA,EAChE,EAAA,KAAA,CAAA,EACFC,EAAA,CAAA,EAAmBC,EAAA,EAChEF,EAAA,EAAA,KAAA,CAAA,EAAqCC,EAAA,CAAA,EAAeC,EAAA,EAAK,EAG3D8B,EAAA,EAAA,SAAA,CAAA,EAOF9B,EAAA,EAEA+B,EAAA,EAAAC,EAAA,EAAA,EAAA,MAAA,CAAA,EAYAhC,EAAA,SAhCKC,EAAA,EAAAgC,EAAA,UAAAC,EAAA,EAAAC,EAAA,CAAAN,EAAApB,UAAAC,YAAA0B,cAAA,CAAAP,EAAAQ,gBAAAR,EAAApB,UAAAC,YAAA0B,cAAAP,EAAAQ,eAAA,CAAA,EAO4CpC,EAAA,CAAA,EAAAC,EAAA2B,EAAApB,UAAA6B,KAAA,EACRrC,EAAA,CAAA,EAAAC,EAAA2B,EAAAf,WAAA,EAIrCb,EAAA,EAAAgC,EAAA,OAAAJ,EAAAU,iBAAA,EAA0B,UAAAV,EAAAW,YAAA,EACF,OAAAX,EAAAd,SAAA,EAOtBd,EAAA,EAAAgC,EAAA,OAAAJ,EAAApB,UAAAC,YAAA0B,cAAAP,EAAAQ,eAAA,kBDjBQI,EAAoBC,EAAYC,EAAAC,CAAA,EAAAC,cAAA,CAAA,CAAA,SAEjCjC,CAAgC,GAAA", + "names": ["AnalyticsApiService", "http", "inject", "HttpClient", "baseUrl", "API_BASE_URL", "analyticsEndpoint", "apartmentsEndpoint", "getAllApartments", "get", "pipe", "map", "response", "item", "id", "name", "rooms", "getAnalytics", "apartmentId", "refresh", "analyticsInfo", "title", "metric", "unit", "labels", "datasets", "series", "s", "data", "suggestions", "messages", "suggestion", "message", "isSuggestion", "factory", "\u0275fac", "providedIn", "ChartComponent", "chartInfo", "showSuggestions", "fillArea", "renderedChartData", "labels", "datasets", "chartOptions", "responsive", "scales", "y", "beginAtZero", "chartColors", "bg", "border", "ngOnChanges", "changes", "updateChart", "data", "defaultColor", "map", "ds", "index", "color", "label", "name", "backgroundColor", "borderColor", "borderWidth", "fill", "tension", "__spreadProps", "__spreadValues", "ticks", "title", "display", "text", "unit", "font", "size", "weight", "padding", "bottom", "plugins", "tooltip", "callbacks", "context", "dataset", "parsed", "inputs", "features", "\u0275\u0275NgOnChangesFeature", "\u0275\u0275elementStart", "\u0275\u0275text", "\u0275\u0275elementEnd", "\u0275\u0275advance", "\u0275\u0275textInterpolate", "sugg_r1", "\u0275\u0275repeaterCreate", "AlarmsSentResolvedChartComponent_div_8_For_5_Template", "\u0275\u0275repeaterTrackByIdentity", "\u0275\u0275repeater", "ctx_r1", "chartInfo", "suggestions", "messages", "AlarmsSentResolvedChartComponent", "ChartComponent", "chartType", "description", "__ngFactoryType__", "selectors", "features", "\u0275\u0275InheritDefinitionFeature", "decls", "vars", "consts", "template", "rf", "ctx", "\u0275\u0275element", "\u0275\u0275template", "AlarmsSentResolvedChartComponent_div_8_Template", "\u0275\u0275property", "\u0275\u0275pureFunction2", "_c0", "isSuggestion", "showSuggestions", "title", "renderedChartData", "chartOptions", "BaseChartDirective", "CommonModule", "NgClass", "NgIf", "encapsulation", "\u0275\u0275elementStart", "\u0275\u0275text", "\u0275\u0275elementEnd", "\u0275\u0275advance", "\u0275\u0275textInterpolate", "sugg_r1", "\u0275\u0275repeaterCreate", "EnergyConsumptionChartComponent_div_8_For_5_Template", "\u0275\u0275repeaterTrackByIdentity", "\u0275\u0275repeater", "ctx_r1", "chartInfo", "suggestions", "messages", "EnergyConsumptionChartComponent", "ChartComponent", "description", "chartType", "fillArea", "chartColors", "bg", "border", "__ngFactoryType__", "selectors", "features", "\u0275\u0275InheritDefinitionFeature", "decls", "vars", "consts", "template", "rf", "ctx", "\u0275\u0275element", "\u0275\u0275template", "EnergyConsumptionChartComponent_div_8_Template", "\u0275\u0275property", "\u0275\u0275pureFunction2", "_c0", "isSuggestion", "showSuggestions", "title", "renderedChartData", "chartOptions", "BaseChartDirective", "CommonModule", "NgClass", "NgIf", "encapsulation"] +} diff --git a/frontend/dist-instrumented/chunk-CFHT7CZE.js b/frontend/dist-instrumented/chunk-CFHT7CZE.js new file mode 100644 index 00000000..8c1d530a --- /dev/null +++ b/frontend/dist-instrumented/chunk-CFHT7CZE.js @@ -0,0 +1,3 @@ +function cov_2l09ffiayw(){var path="/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-CFHT7CZE.js";var hash="1b7254a628830bdb6e9bb383c847f3120da84127";var global=new Function("return this")();var gcv="__coverage__";var coverageData={path:"/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-CFHT7CZE.js",statementMap:{"0":{start:{line:1,column:100},end:{line:1,column:1680}},"1":{start:{line:1,column:119},end:{line:1,column:123}},"2":{start:{line:1,column:132},end:{line:1,column:136}},"3":{start:{line:1,column:151},end:{line:1,column:180}},"4":{start:{line:1,column:200},end:{line:1,column:230}},"5":{start:{line:1,column:247},end:{line:1,column:287}},"6":{start:{line:1,column:304},end:{line:1,column:374}},"7":{start:{line:1,column:394},end:{line:1,column:437}},"8":{start:{line:1,column:459},end:{line:1,column:531}},"9":{start:{line:1,column:551},end:{line:1,column:624}},"10":{start:{line:1,column:652},end:{line:1,column:726}},"11":{start:{line:1,column:676},end:{line:1,column:726}},"12":{start:{line:1,column:726},end:{line:1,column:830}},"13":{start:{line:1,column:772},end:{line:1,column:830}},"14":{start:{line:1,column:830},end:{line:1,column:989}},"15":{start:{line:1,column:1019},end:{line:1,column:1093}},"16":{start:{line:1,column:1043},end:{line:1,column:1093}},"17":{start:{line:1,column:1093},end:{line:1,column:1197}},"18":{start:{line:1,column:1139},end:{line:1,column:1197}},"19":{start:{line:1,column:1197},end:{line:1,column:1354}},"20":{start:{line:1,column:1376},end:{line:1,column:1451}},"21":{start:{line:1,column:1470},end:{line:1,column:1551}},"22":{start:{line:1,column:1569},end:{line:1,column:1598}},"23":{start:{line:1,column:1581},end:{line:1,column:1597}},"24":{start:{line:1,column:1617},end:{line:1,column:1667}},"25":{start:{line:1,column:1668},end:{line:1,column:1676}}},fnMap:{"0":{name:"(anonymous_0)",decl:{start:{line:1,column:101},end:{line:1,column:102}},loc:{start:{line:1,column:105},end:{line:1,column:1677}},line:1},"1":{name:"(anonymous_1)",decl:{start:{line:1,column:231},end:{line:1,column:232}},loc:{start:{line:1,column:246},end:{line:1,column:288}},line:1},"2":{name:"(anonymous_2)",decl:{start:{line:1,column:288},end:{line:1,column:289}},loc:{start:{line:1,column:303},end:{line:1,column:375}},line:1},"3":{name:"(anonymous_3)",decl:{start:{line:1,column:375},end:{line:1,column:376}},loc:{start:{line:1,column:393},end:{line:1,column:438}},line:1},"4":{name:"(anonymous_4)",decl:{start:{line:1,column:438},end:{line:1,column:439}},loc:{start:{line:1,column:458},end:{line:1,column:532}},line:1},"5":{name:"(anonymous_5)",decl:{start:{line:1,column:532},end:{line:1,column:533}},loc:{start:{line:1,column:550},end:{line:1,column:625}},line:1},"6":{name:"(anonymous_6)",decl:{start:{line:1,column:625},end:{line:1,column:626}},loc:{start:{line:1,column:651},end:{line:1,column:990}},line:1},"7":{name:"(anonymous_7)",decl:{start:{line:1,column:990},end:{line:1,column:991}},loc:{start:{line:1,column:1018},end:{line:1,column:1355}},line:1},"8":{name:"(anonymous_8)",decl:{start:{line:1,column:1355},end:{line:1,column:1356}},loc:{start:{line:1,column:1375},end:{line:1,column:1452}},line:1},"9":{name:"(anonymous_9)",decl:{start:{line:1,column:1452},end:{line:1,column:1453}},loc:{start:{line:1,column:1469},end:{line:1,column:1552}},line:1},"10":{name:"(anonymous_10)",decl:{start:{line:1,column:1569},end:{line:1,column:1570}},loc:{start:{line:1,column:1580},end:{line:1,column:1598}},line:1}},branchMap:{"0":{loc:{start:{line:1,column:643},end:{line:1,column:646}},type:"default-arg",locations:[{start:{line:1,column:645},end:{line:1,column:646}}],line:1},"1":{loc:{start:{line:1,column:647},end:{line:1,column:650}},type:"default-arg",locations:[{start:{line:1,column:649},end:{line:1,column:650}}],line:1},"2":{loc:{start:{line:1,column:652},end:{line:1,column:726}},type:"if",locations:[{start:{line:1,column:652},end:{line:1,column:726}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"3":{loc:{start:{line:1,column:726},end:{line:1,column:830}},type:"if",locations:[{start:{line:1,column:726},end:{line:1,column:830}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"4":{loc:{start:{line:1,column:729},end:{line:1,column:771}},type:"binary-expr",locations:[{start:{line:1,column:729},end:{line:1,column:749}},{start:{line:1,column:751},end:{line:1,column:771}}],line:1},"5":{loc:{start:{line:1,column:1010},end:{line:1,column:1013}},type:"default-arg",locations:[{start:{line:1,column:1012},end:{line:1,column:1013}}],line:1},"6":{loc:{start:{line:1,column:1014},end:{line:1,column:1017}},type:"default-arg",locations:[{start:{line:1,column:1016},end:{line:1,column:1017}}],line:1},"7":{loc:{start:{line:1,column:1019},end:{line:1,column:1093}},type:"if",locations:[{start:{line:1,column:1019},end:{line:1,column:1093}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"8":{loc:{start:{line:1,column:1093},end:{line:1,column:1197}},type:"if",locations:[{start:{line:1,column:1093},end:{line:1,column:1197}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"9":{loc:{start:{line:1,column:1096},end:{line:1,column:1138}},type:"binary-expr",locations:[{start:{line:1,column:1096},end:{line:1,column:1116}},{start:{line:1,column:1118},end:{line:1,column:1138}}],line:1},"10":{loc:{start:{line:1,column:1592},end:{line:1,column:1596}},type:"binary-expr",locations:[{start:{line:1,column:1592},end:{line:1,column:1593}},{start:{line:1,column:1595},end:{line:1,column:1596}}],line:1}},s:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0},f:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0},b:{"0":[0],"1":[0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0],"6":[0],"7":[0,0],"8":[0,0],"9":[0,0],"10":[0,0]},inputSourceMap:{version:3,sources:["src/app/core/alarm/services/alarm-api.service.ts"],sourcesContent:["import { Injectable, inject } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { AlarmRule } from '../models/alarm-rule.model';\nimport { CreateAlarmRuleRequestDto } from '../models/dto/create-alarm-rule-request.model.dto';\nimport { UpdateAlarmRuleRequestDto } from '../models/dto/update-alarm-rule-request.model.dto';\nimport { ActiveAlarm } from '../models/active-alarm.model';\nimport { API_BASE_URL } from '../../tokens/api-base-url.token';\n\n@Injectable({ providedIn: 'root' })\nexport class AlarmApiService {\n private readonly http = inject(HttpClient);\n private readonly baseUrl = inject(API_BASE_URL);\n private readonly alarmsBaseUrl = `${this.baseUrl}/alarm-rules`;\n private readonly alarmEventsBaseUrl = `${this.baseUrl}/alarm-events`;\n\n public getAlarmRules(): Observable {\n return this.http.get(this.alarmsBaseUrl);\n }\n\n public getAlarmRule(id: string): Observable {\n return this.http.get(`${this.alarmsBaseUrl}/${encodeURIComponent(id)}`);\n }\n\n public createAlarmRule(payload: CreateAlarmRuleRequestDto): Observable {\n return this.http.post(this.alarmsBaseUrl, payload);\n }\n\n public updateAlarmRule(id: string, payload: UpdateAlarmRuleRequestDto): Observable {\n return this.http.put(`${this.alarmsBaseUrl}/${encodeURIComponent(id)}`, payload);\n }\n\n public deleteAlarmRule(id: string): Observable {\n return this.http.delete(`${this.alarmsBaseUrl}/${encodeURIComponent(id)}`);\n }\n\n public getActiveAlarms(userId: number, limit = 6, offset = 0): Observable {\n if (!Number.isInteger(userId)) {\n throw new TypeError('userId must be an integer.');\n }\n\n if (!Number.isInteger(limit) || !Number.isInteger(offset)) {\n throw new TypeError('limit and offset must be integers.');\n }\n\n return this.http.get(\n `${this.alarmEventsBaseUrl}/unmanaged/${encodeURIComponent(String(userId))}/${encodeURIComponent(String(limit))}/${encodeURIComponent(String(offset))}`\n );\n }\n\n public getResolvedAlarms(userId: number, limit = 6, offset = 0): Observable {\n if (!Number.isInteger(userId)) {\n throw new TypeError('userId must be an integer.');\n }\n\n if (!Number.isInteger(limit) || !Number.isInteger(offset)) {\n throw new TypeError('limit and offset must be integers.');\n }\n\n return this.http.get(\n `${this.alarmEventsBaseUrl}/managed/${encodeURIComponent(String(userId))}/${encodeURIComponent(String(limit))}/${encodeURIComponent(String(offset))}`\n );\n }\n\n public getAlarmEventById(alarmEventId: string): Observable {\n return this.http.get(\n `${this.alarmEventsBaseUrl}/${encodeURIComponent(alarmEventId)}`\n );\n }\n\n public resolveAlarm(alarmId: string, userId: number): Observable {\n return this.http.patch(`${this.alarmEventsBaseUrl}/resolve`, { alarmId, userId });\n }\n}\n"],mappings:"8FAUA,IAAaA,GAAe,IAAA,CAAtB,MAAOA,CAAe,CACPC,KAAOC,EAAOC,CAAU,EACxBC,QAAUF,EAAOG,CAAY,EAC7BC,cAAgB,GAAG,KAAKF,OAAO,eAC/BG,mBAAqB,GAAG,KAAKH,OAAO,gBAE9CI,eAAa,CAChB,OAAO,KAAKP,KAAKQ,IAAiB,KAAKH,aAAa,CACxD,CAEOI,aAAaC,EAAU,CAC1B,OAAO,KAAKV,KAAKQ,IAAe,GAAG,KAAKH,aAAa,IAAIM,mBAAmBD,CAAE,CAAC,EAAE,CACrF,CAEOE,gBAAgBC,EAAkC,CACrD,OAAO,KAAKb,KAAKc,KAAgB,KAAKT,cAAeQ,CAAO,CAChE,CAEOE,gBAAgBL,EAAYG,EAAkC,CACjE,OAAO,KAAKb,KAAKgB,IAAe,GAAG,KAAKX,aAAa,IAAIM,mBAAmBD,CAAE,CAAC,GAAIG,CAAO,CAC9F,CAEOI,gBAAgBP,EAAU,CAC7B,OAAO,KAAKV,KAAKkB,OAAa,GAAG,KAAKb,aAAa,IAAIM,mBAAmBD,CAAE,CAAC,EAAE,CACnF,CAEOS,gBAAgBC,EAAgBC,EAAQ,EAAGC,EAAS,EAAC,CACxD,GAAI,CAACC,OAAOC,UAAUJ,CAAM,EACxB,MAAM,IAAIK,UAAU,4BAA4B,EAGpD,GAAI,CAACF,OAAOC,UAAUH,CAAK,GAAK,CAACE,OAAOC,UAAUF,CAAM,EACpD,MAAM,IAAIG,UAAU,oCAAoC,EAG5D,OAAO,KAAKzB,KAAKQ,IACb,GAAG,KAAKF,kBAAkB,cAAcK,mBAAmBe,OAAON,CAAM,CAAC,CAAC,IAAIT,mBAAmBe,OAAOL,CAAK,CAAC,CAAC,IAAIV,mBAAmBe,OAAOJ,CAAM,CAAC,CAAC,EAAE,CAE/J,CAEOK,kBAAkBP,EAAgBC,EAAQ,EAAGC,EAAS,EAAC,CAC1D,GAAI,CAACC,OAAOC,UAAUJ,CAAM,EACxB,MAAM,IAAIK,UAAU,4BAA4B,EAGpD,GAAI,CAACF,OAAOC,UAAUH,CAAK,GAAK,CAACE,OAAOC,UAAUF,CAAM,EACpD,MAAM,IAAIG,UAAU,oCAAoC,EAG5D,OAAO,KAAKzB,KAAKQ,IACb,GAAG,KAAKF,kBAAkB,YAAYK,mBAAmBe,OAAON,CAAM,CAAC,CAAC,IAAIT,mBAAmBe,OAAOL,CAAK,CAAC,CAAC,IAAIV,mBAAmBe,OAAOJ,CAAM,CAAC,CAAC,EAAE,CAE7J,CAEOM,kBAAkBC,EAAoB,CACzC,OAAO,KAAK7B,KAAKQ,IACb,GAAG,KAAKF,kBAAkB,IAAIK,mBAAmBkB,CAAY,CAAC,EAAE,CAExE,CAEOC,aAAaC,EAAiBX,EAAc,CAC/C,OAAO,KAAKpB,KAAKgC,MAAY,GAAG,KAAK1B,kBAAkB,WAAY,CAAEyB,QAAAA,EAASX,OAAAA,CAAM,CAAE,CAC1F,4CA9DSrB,EAAe,6BAAfA,EAAekC,QAAflC,EAAemC,UAAAC,WADF,MAAM,CAAA,SACnBpC,CAAe,GAAA",names:["AlarmApiService","http","inject","HttpClient","baseUrl","API_BASE_URL","alarmsBaseUrl","alarmEventsBaseUrl","getAlarmRules","get","getAlarmRule","id","encodeURIComponent","createAlarmRule","payload","post","updateAlarmRule","put","deleteAlarmRule","delete","getActiveAlarms","userId","limit","offset","Number","isInteger","TypeError","String","getResolvedAlarms","getAlarmEventById","alarmEventId","resolveAlarm","alarmId","patch","factory","\u0275fac","providedIn"]},_coverageSchema:"1a1c01bbd47fc00a2c39e90264f33305004495a9",hash:"1b7254a628830bdb6e9bb383c847f3120da84127"};var coverage=global[gcv]||(global[gcv]={});if(!coverage[path]||coverage[path].hash!==hash){coverage[path]=coverageData;}var actualCoverage=coverage[path];{// @ts-ignore +cov_2l09ffiayw=function(){return actualCoverage;};}return actualCoverage;}cov_2l09ffiayw();import{b as o,e as i}from"./chunk-2S5V5XEE.js";import{L as a,Q as s}from"./chunk-RYTNMYZW.js";var g=(cov_2l09ffiayw().s[0]++,(()=>{cov_2l09ffiayw().f[0]++;class r{http=(cov_2l09ffiayw().s[1]++,s(o));baseUrl=(cov_2l09ffiayw().s[2]++,s(i));alarmsBaseUrl=(cov_2l09ffiayw().s[3]++,`${this.baseUrl}/alarm-rules`);alarmEventsBaseUrl=(cov_2l09ffiayw().s[4]++,`${this.baseUrl}/alarm-events`);getAlarmRules(){cov_2l09ffiayw().f[1]++;cov_2l09ffiayw().s[5]++;return this.http.get(this.alarmsBaseUrl);}getAlarmRule(e){cov_2l09ffiayw().f[2]++;cov_2l09ffiayw().s[6]++;return this.http.get(`${this.alarmsBaseUrl}/${encodeURIComponent(e)}`);}createAlarmRule(e){cov_2l09ffiayw().f[3]++;cov_2l09ffiayw().s[7]++;return this.http.post(this.alarmsBaseUrl,e);}updateAlarmRule(e,t){cov_2l09ffiayw().f[4]++;cov_2l09ffiayw().s[8]++;return this.http.put(`${this.alarmsBaseUrl}/${encodeURIComponent(e)}`,t);}deleteAlarmRule(e){cov_2l09ffiayw().f[5]++;cov_2l09ffiayw().s[9]++;return this.http.delete(`${this.alarmsBaseUrl}/${encodeURIComponent(e)}`);}getActiveAlarms(e,t=(cov_2l09ffiayw().b[0][0]++,6),n=(cov_2l09ffiayw().b[1][0]++,0)){cov_2l09ffiayw().f[6]++;cov_2l09ffiayw().s[10]++;if(!Number.isInteger(e)){cov_2l09ffiayw().b[2][0]++;cov_2l09ffiayw().s[11]++;throw new TypeError("userId must be an integer.");}else{cov_2l09ffiayw().b[2][1]++;}cov_2l09ffiayw().s[12]++;if((cov_2l09ffiayw().b[4][0]++,!Number.isInteger(t))||(cov_2l09ffiayw().b[4][1]++,!Number.isInteger(n))){cov_2l09ffiayw().b[3][0]++;cov_2l09ffiayw().s[13]++;throw new TypeError("limit and offset must be integers.");}else{cov_2l09ffiayw().b[3][1]++;}cov_2l09ffiayw().s[14]++;return this.http.get(`${this.alarmEventsBaseUrl}/unmanaged/${encodeURIComponent(String(e))}/${encodeURIComponent(String(t))}/${encodeURIComponent(String(n))}`);}getResolvedAlarms(e,t=(cov_2l09ffiayw().b[5][0]++,6),n=(cov_2l09ffiayw().b[6][0]++,0)){cov_2l09ffiayw().f[7]++;cov_2l09ffiayw().s[15]++;if(!Number.isInteger(e)){cov_2l09ffiayw().b[7][0]++;cov_2l09ffiayw().s[16]++;throw new TypeError("userId must be an integer.");}else{cov_2l09ffiayw().b[7][1]++;}cov_2l09ffiayw().s[17]++;if((cov_2l09ffiayw().b[9][0]++,!Number.isInteger(t))||(cov_2l09ffiayw().b[9][1]++,!Number.isInteger(n))){cov_2l09ffiayw().b[8][0]++;cov_2l09ffiayw().s[18]++;throw new TypeError("limit and offset must be integers.");}else{cov_2l09ffiayw().b[8][1]++;}cov_2l09ffiayw().s[19]++;return this.http.get(`${this.alarmEventsBaseUrl}/managed/${encodeURIComponent(String(e))}/${encodeURIComponent(String(t))}/${encodeURIComponent(String(n))}`);}getAlarmEventById(e){cov_2l09ffiayw().f[8]++;cov_2l09ffiayw().s[20]++;return this.http.get(`${this.alarmEventsBaseUrl}/${encodeURIComponent(e)}`);}resolveAlarm(e,t){cov_2l09ffiayw().f[9]++;cov_2l09ffiayw().s[21]++;return this.http.patch(`${this.alarmEventsBaseUrl}/resolve`,{alarmId:e,userId:t});}static ɵfac=(cov_2l09ffiayw().s[22]++,function(t){cov_2l09ffiayw().f[10]++;cov_2l09ffiayw().s[23]++;return new((cov_2l09ffiayw().b[10][0]++,t)||(cov_2l09ffiayw().b[10][1]++,r))();});static ɵprov=(cov_2l09ffiayw().s[24]++,a({token:r,factory:r.ɵfac,providedIn:"root"}));}cov_2l09ffiayw().s[25]++;return r;})());export{g as a};//# sourceMappingURL=chunk-CFHT7CZE.js.map +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnIiwiY292XzJsMDlmZmlheXciLCJzIiwiZiIsInIiLCJodHRwIiwibyIsImJhc2VVcmwiLCJpIiwiYWxhcm1zQmFzZVVybCIsImFsYXJtRXZlbnRzQmFzZVVybCIsImdldEFsYXJtUnVsZXMiLCJnZXQiLCJnZXRBbGFybVJ1bGUiLCJlIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiY3JlYXRlQWxhcm1SdWxlIiwicG9zdCIsInVwZGF0ZUFsYXJtUnVsZSIsInQiLCJwdXQiLCJkZWxldGVBbGFybVJ1bGUiLCJkZWxldGUiLCJnZXRBY3RpdmVBbGFybXMiLCJiIiwibiIsIk51bWJlciIsImlzSW50ZWdlciIsIlR5cGVFcnJvciIsIlN0cmluZyIsImdldFJlc29sdmVkQWxhcm1zIiwiZ2V0QWxhcm1FdmVudEJ5SWQiLCJyZXNvbHZlQWxhcm0iLCJwYXRjaCIsImFsYXJtSWQiLCJ1c2VySWQiLCLJtWZhYyIsIsm1cHJvdiIsImEiLCJ0b2tlbiIsImZhY3RvcnkiLCJwcm92aWRlZEluIl0sInNvdXJjZXMiOlsic3JjL2FwcC9jb3JlL2FsYXJtL3NlcnZpY2VzL2FsYXJtLWFwaS5zZXJ2aWNlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFsYXJtUnVsZSB9IGZyb20gJy4uL21vZGVscy9hbGFybS1ydWxlLm1vZGVsJztcbmltcG9ydCB7IENyZWF0ZUFsYXJtUnVsZVJlcXVlc3REdG8gfSBmcm9tICcuLi9tb2RlbHMvZHRvL2NyZWF0ZS1hbGFybS1ydWxlLXJlcXVlc3QubW9kZWwuZHRvJztcbmltcG9ydCB7IFVwZGF0ZUFsYXJtUnVsZVJlcXVlc3REdG8gfSBmcm9tICcuLi9tb2RlbHMvZHRvL3VwZGF0ZS1hbGFybS1ydWxlLXJlcXVlc3QubW9kZWwuZHRvJztcbmltcG9ydCB7IEFjdGl2ZUFsYXJtIH0gZnJvbSAnLi4vbW9kZWxzL2FjdGl2ZS1hbGFybS5tb2RlbCc7XG5pbXBvcnQgeyBBUElfQkFTRV9VUkwgfSBmcm9tICcuLi8uLi90b2tlbnMvYXBpLWJhc2UtdXJsLnRva2VuJztcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBBbGFybUFwaVNlcnZpY2Uge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgaHR0cCA9IGluamVjdChIdHRwQ2xpZW50KTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGJhc2VVcmwgPSBpbmplY3QoQVBJX0JBU0VfVVJMKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGFsYXJtc0Jhc2VVcmwgPSBgJHt0aGlzLmJhc2VVcmx9L2FsYXJtLXJ1bGVzYDtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGFsYXJtRXZlbnRzQmFzZVVybCA9IGAke3RoaXMuYmFzZVVybH0vYWxhcm0tZXZlbnRzYDtcblxuICAgIHB1YmxpYyBnZXRBbGFybVJ1bGVzKCk6IE9ic2VydmFibGU8QWxhcm1SdWxlW10+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8QWxhcm1SdWxlW10+KHRoaXMuYWxhcm1zQmFzZVVybCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEFsYXJtUnVsZShpZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxBbGFybVJ1bGU+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8QWxhcm1SdWxlPihgJHt0aGlzLmFsYXJtc0Jhc2VVcmx9LyR7ZW5jb2RlVVJJQ29tcG9uZW50KGlkKX1gKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY3JlYXRlQWxhcm1SdWxlKHBheWxvYWQ6IENyZWF0ZUFsYXJtUnVsZVJlcXVlc3REdG8pOiBPYnNlcnZhYmxlPEFsYXJtUnVsZT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8QWxhcm1SdWxlPih0aGlzLmFsYXJtc0Jhc2VVcmwsIHBheWxvYWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyB1cGRhdGVBbGFybVJ1bGUoaWQ6IHN0cmluZywgcGF5bG9hZDogVXBkYXRlQWxhcm1SdWxlUmVxdWVzdER0byk6IE9ic2VydmFibGU8QWxhcm1SdWxlPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucHV0PEFsYXJtUnVsZT4oYCR7dGhpcy5hbGFybXNCYXNlVXJsfS8ke2VuY29kZVVSSUNvbXBvbmVudChpZCl9YCwgcGF5bG9hZCk7XG4gICAgfVxuXG4gICAgcHVibGljIGRlbGV0ZUFsYXJtUnVsZShpZDogc3RyaW5nKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZGVsZXRlPHZvaWQ+KGAke3RoaXMuYWxhcm1zQmFzZVVybH0vJHtlbmNvZGVVUklDb21wb25lbnQoaWQpfWApO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRBY3RpdmVBbGFybXModXNlcklkOiBudW1iZXIsIGxpbWl0ID0gNiwgb2Zmc2V0ID0gMCk6IE9ic2VydmFibGU8QWN0aXZlQWxhcm1bXT4ge1xuICAgICAgICBpZiAoIU51bWJlci5pc0ludGVnZXIodXNlcklkKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigndXNlcklkIG11c3QgYmUgYW4gaW50ZWdlci4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihsaW1pdCkgfHwgIU51bWJlci5pc0ludGVnZXIob2Zmc2V0KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignbGltaXQgYW5kIG9mZnNldCBtdXN0IGJlIGludGVnZXJzLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8QWN0aXZlQWxhcm1bXT4oXG4gICAgICAgICAgICBgJHt0aGlzLmFsYXJtRXZlbnRzQmFzZVVybH0vdW5tYW5hZ2VkLyR7ZW5jb2RlVVJJQ29tcG9uZW50KFN0cmluZyh1c2VySWQpKX0vJHtlbmNvZGVVUklDb21wb25lbnQoU3RyaW5nKGxpbWl0KSl9LyR7ZW5jb2RlVVJJQ29tcG9uZW50KFN0cmluZyhvZmZzZXQpKX1gXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFJlc29sdmVkQWxhcm1zKHVzZXJJZDogbnVtYmVyLCBsaW1pdCA9IDYsIG9mZnNldCA9IDApOiBPYnNlcnZhYmxlPEFjdGl2ZUFsYXJtW10+IHtcbiAgICAgICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKHVzZXJJZCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3VzZXJJZCBtdXN0IGJlIGFuIGludGVnZXIuJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIU51bWJlci5pc0ludGVnZXIobGltaXQpIHx8ICFOdW1iZXIuaXNJbnRlZ2VyKG9mZnNldCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2xpbWl0IGFuZCBvZmZzZXQgbXVzdCBiZSBpbnRlZ2Vycy4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PEFjdGl2ZUFsYXJtW10+KFxuICAgICAgICAgICAgYCR7dGhpcy5hbGFybUV2ZW50c0Jhc2VVcmx9L21hbmFnZWQvJHtlbmNvZGVVUklDb21wb25lbnQoU3RyaW5nKHVzZXJJZCkpfS8ke2VuY29kZVVSSUNvbXBvbmVudChTdHJpbmcobGltaXQpKX0vJHtlbmNvZGVVUklDb21wb25lbnQoU3RyaW5nKG9mZnNldCkpfWBcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0QWxhcm1FdmVudEJ5SWQoYWxhcm1FdmVudElkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPEFjdGl2ZUFsYXJtPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PEFjdGl2ZUFsYXJtPihcbiAgICAgICAgICAgIGAke3RoaXMuYWxhcm1FdmVudHNCYXNlVXJsfS8ke2VuY29kZVVSSUNvbXBvbmVudChhbGFybUV2ZW50SWQpfWBcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVzb2x2ZUFsYXJtKGFsYXJtSWQ6IHN0cmluZywgdXNlcklkOiBudW1iZXIpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wYXRjaDx2b2lkPihgJHt0aGlzLmFsYXJtRXZlbnRzQmFzZVVybH0vcmVzb2x2ZWAsIHsgYWxhcm1JZCwgdXNlcklkIH0pO1xuICAgIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijt5TEFVQSxHQUFhLENBQUFBLENBQUEsRUFBQUMsY0FBQSxHQUFBQyxDQUFBLE9BQWUsS0FBQUQsY0FBQSxHQUFBRSxDQUFBLE1BQXRCLEtBQU8sQ0FBQUMsQ0FBZSxDQUNQQyxJQUFBLEVBQUFKLGNBQUEsR0FBQUMsQ0FBQSxNQUFPQSxDQUFBLENBQU9JLENBQVUsR0FDeEJDLE9BQUEsRUFBQU4sY0FBQSxHQUFBQyxDQUFBLE1BQVVBLENBQUEsQ0FBT00sQ0FBWSxHQUM3QkMsYUFBQSxFQUFBUixjQUFBLEdBQUFDLENBQUEsTUFBZ0IsR0FBRyxLQUFLSyxPQUFPLGdCQUMvQkcsa0JBQUEsRUFBQVQsY0FBQSxHQUFBQyxDQUFBLE1BQXFCLEdBQUcsS0FBS0ssT0FBTyxpQkFFOUNJLGNBQUEsQ0FBYSxDQUFBVixjQUFBLEdBQUFFLENBQUEsS0FBQUYsQ0FBQSxpQkFBQUMsQ0FBQSxNQUNoQixNQUFPLE1BQUtHLElBQUEsQ0FBS08sR0FBQSxDQUFpQixLQUFLSCxhQUFhLENBQ3hELEVBRU9JLGFBQWFDLENBQUEsQ0FBVSxDQUFBYixjQUFBLEdBQUFFLENBQUEsS0FBQUYsQ0FBQSxpQkFBQUMsQ0FBQSxNQUMxQixNQUFPLE1BQUtHLElBQUEsQ0FBS08sR0FBQSxDQUFlLEdBQUcsS0FBS0gsYUFBYSxJQUFJTSxrQkFBQSxDQUFtQkQsQ0FBRSxDQUFDLEVBQUUsQ0FDckYsRUFFT0UsZ0JBQWdCRixDQUFBLENBQWtDLENBQUFiLGNBQUEsR0FBQUUsQ0FBQSxLQUFBRixDQUFBLGlC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 \ No newline at end of file diff --git a/frontend/dist-instrumented/chunk-CFHT7CZE.js.map b/frontend/dist-instrumented/chunk-CFHT7CZE.js.map new file mode 100644 index 00000000..f40b5395 --- /dev/null +++ b/frontend/dist-instrumented/chunk-CFHT7CZE.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["src/app/core/alarm/services/alarm-api.service.ts"], + "sourcesContent": ["import { Injectable, inject } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { AlarmRule } from '../models/alarm-rule.model';\nimport { CreateAlarmRuleRequestDto } from '../models/dto/create-alarm-rule-request.model.dto';\nimport { UpdateAlarmRuleRequestDto } from '../models/dto/update-alarm-rule-request.model.dto';\nimport { ActiveAlarm } from '../models/active-alarm.model';\nimport { API_BASE_URL } from '../../tokens/api-base-url.token';\n\n@Injectable({ providedIn: 'root' })\nexport class AlarmApiService {\n private readonly http = inject(HttpClient);\n private readonly baseUrl = inject(API_BASE_URL);\n private readonly alarmsBaseUrl = `${this.baseUrl}/alarm-rules`;\n private readonly alarmEventsBaseUrl = `${this.baseUrl}/alarm-events`;\n\n public getAlarmRules(): Observable {\n return this.http.get(this.alarmsBaseUrl);\n }\n\n public getAlarmRule(id: string): Observable {\n return this.http.get(`${this.alarmsBaseUrl}/${encodeURIComponent(id)}`);\n }\n\n public createAlarmRule(payload: CreateAlarmRuleRequestDto): Observable {\n return this.http.post(this.alarmsBaseUrl, payload);\n }\n\n public updateAlarmRule(id: string, payload: UpdateAlarmRuleRequestDto): Observable {\n return this.http.put(`${this.alarmsBaseUrl}/${encodeURIComponent(id)}`, payload);\n }\n\n public deleteAlarmRule(id: string): Observable {\n return this.http.delete(`${this.alarmsBaseUrl}/${encodeURIComponent(id)}`);\n }\n\n public getActiveAlarms(userId: number, limit = 6, offset = 0): Observable {\n if (!Number.isInteger(userId)) {\n throw new TypeError('userId must be an integer.');\n }\n\n if (!Number.isInteger(limit) || !Number.isInteger(offset)) {\n throw new TypeError('limit and offset must be integers.');\n }\n\n return this.http.get(\n `${this.alarmEventsBaseUrl}/unmanaged/${encodeURIComponent(String(userId))}/${encodeURIComponent(String(limit))}/${encodeURIComponent(String(offset))}`\n );\n }\n\n public getResolvedAlarms(userId: number, limit = 6, offset = 0): Observable {\n if (!Number.isInteger(userId)) {\n throw new TypeError('userId must be an integer.');\n }\n\n if (!Number.isInteger(limit) || !Number.isInteger(offset)) {\n throw new TypeError('limit and offset must be integers.');\n }\n\n return this.http.get(\n `${this.alarmEventsBaseUrl}/managed/${encodeURIComponent(String(userId))}/${encodeURIComponent(String(limit))}/${encodeURIComponent(String(offset))}`\n );\n }\n\n public getAlarmEventById(alarmEventId: string): Observable {\n return this.http.get(\n `${this.alarmEventsBaseUrl}/${encodeURIComponent(alarmEventId)}`\n );\n }\n\n public resolveAlarm(alarmId: string, userId: number): Observable {\n return this.http.patch(`${this.alarmEventsBaseUrl}/resolve`, { alarmId, userId });\n }\n}\n"], + "mappings": "8FAUA,IAAaA,GAAe,IAAA,CAAtB,MAAOA,CAAe,CACPC,KAAOC,EAAOC,CAAU,EACxBC,QAAUF,EAAOG,CAAY,EAC7BC,cAAgB,GAAG,KAAKF,OAAO,eAC/BG,mBAAqB,GAAG,KAAKH,OAAO,gBAE9CI,eAAa,CAChB,OAAO,KAAKP,KAAKQ,IAAiB,KAAKH,aAAa,CACxD,CAEOI,aAAaC,EAAU,CAC1B,OAAO,KAAKV,KAAKQ,IAAe,GAAG,KAAKH,aAAa,IAAIM,mBAAmBD,CAAE,CAAC,EAAE,CACrF,CAEOE,gBAAgBC,EAAkC,CACrD,OAAO,KAAKb,KAAKc,KAAgB,KAAKT,cAAeQ,CAAO,CAChE,CAEOE,gBAAgBL,EAAYG,EAAkC,CACjE,OAAO,KAAKb,KAAKgB,IAAe,GAAG,KAAKX,aAAa,IAAIM,mBAAmBD,CAAE,CAAC,GAAIG,CAAO,CAC9F,CAEOI,gBAAgBP,EAAU,CAC7B,OAAO,KAAKV,KAAKkB,OAAa,GAAG,KAAKb,aAAa,IAAIM,mBAAmBD,CAAE,CAAC,EAAE,CACnF,CAEOS,gBAAgBC,EAAgBC,EAAQ,EAAGC,EAAS,EAAC,CACxD,GAAI,CAACC,OAAOC,UAAUJ,CAAM,EACxB,MAAM,IAAIK,UAAU,4BAA4B,EAGpD,GAAI,CAACF,OAAOC,UAAUH,CAAK,GAAK,CAACE,OAAOC,UAAUF,CAAM,EACpD,MAAM,IAAIG,UAAU,oCAAoC,EAG5D,OAAO,KAAKzB,KAAKQ,IACb,GAAG,KAAKF,kBAAkB,cAAcK,mBAAmBe,OAAON,CAAM,CAAC,CAAC,IAAIT,mBAAmBe,OAAOL,CAAK,CAAC,CAAC,IAAIV,mBAAmBe,OAAOJ,CAAM,CAAC,CAAC,EAAE,CAE/J,CAEOK,kBAAkBP,EAAgBC,EAAQ,EAAGC,EAAS,EAAC,CAC1D,GAAI,CAACC,OAAOC,UAAUJ,CAAM,EACxB,MAAM,IAAIK,UAAU,4BAA4B,EAGpD,GAAI,CAACF,OAAOC,UAAUH,CAAK,GAAK,CAACE,OAAOC,UAAUF,CAAM,EACpD,MAAM,IAAIG,UAAU,oCAAoC,EAG5D,OAAO,KAAKzB,KAAKQ,IACb,GAAG,KAAKF,kBAAkB,YAAYK,mBAAmBe,OAAON,CAAM,CAAC,CAAC,IAAIT,mBAAmBe,OAAOL,CAAK,CAAC,CAAC,IAAIV,mBAAmBe,OAAOJ,CAAM,CAAC,CAAC,EAAE,CAE7J,CAEOM,kBAAkBC,EAAoB,CACzC,OAAO,KAAK7B,KAAKQ,IACb,GAAG,KAAKF,kBAAkB,IAAIK,mBAAmBkB,CAAY,CAAC,EAAE,CAExE,CAEOC,aAAaC,EAAiBX,EAAc,CAC/C,OAAO,KAAKpB,KAAKgC,MAAY,GAAG,KAAK1B,kBAAkB,WAAY,CAAEyB,QAAAA,EAASX,OAAAA,CAAM,CAAE,CAC1F,4CA9DSrB,EAAe,6BAAfA,EAAekC,QAAflC,EAAemC,UAAAC,WADF,MAAM,CAAA,SACnBpC,CAAe,GAAA", + "names": ["AlarmApiService", "http", "inject", "HttpClient", "baseUrl", "API_BASE_URL", "alarmsBaseUrl", "alarmEventsBaseUrl", "getAlarmRules", "get", "getAlarmRule", "id", "encodeURIComponent", "createAlarmRule", "payload", "post", "updateAlarmRule", "put", "deleteAlarmRule", "delete", "getActiveAlarms", "userId", "limit", "offset", "Number", "isInteger", "TypeError", "String", "getResolvedAlarms", "getAlarmEventById", "alarmEventId", "resolveAlarm", "alarmId", "patch", "factory", "\u0275fac", "providedIn"] +} diff --git a/frontend/dist-instrumented/chunk-CX4DL26R.js b/frontend/dist-instrumented/chunk-CX4DL26R.js new file mode 100644 index 00000000..00322c86 --- /dev/null +++ b/frontend/dist-instrumented/chunk-CX4DL26R.js @@ -0,0 +1,3 @@ +function cov_xb17928k1(){var path="/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-CX4DL26R.js";var hash="eba801cc2cd78a31f0e5c258d5e5e46d671b4157";var global=new Function("return this")();var gcv="__coverage__";var coverageData={path:"/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-CX4DL26R.js",statementMap:{"0":{start:{line:1,column:60},end:{line:1,column:2360}},"1":{start:{line:1,column:88},end:{line:1,column:97}},"2":{start:{line:1,column:113},end:{line:1,column:122}},"3":{start:{line:1,column:149},end:{line:1,column:163}},"4":{start:{line:1,column:194},end:{line:1,column:201}},"5":{start:{line:1,column:237},end:{line:1,column:295}},"6":{start:{line:1,column:249},end:{line:1,column:294}},"7":{start:{line:1,column:296},end:{line:1,column:348}},"8":{start:{line:1,column:314},end:{line:1,column:341}},"9":{start:{line:1,column:341},end:{line:1,column:347}},"10":{start:{line:1,column:354},end:{line:1,column:383}},"11":{start:{line:1,column:386},end:{line:1,column:409}},"12":{start:{line:1,column:403},end:{line:1,column:407}},"13":{start:{line:1,column:412},end:{line:1,column:484}},"14":{start:{line:1,column:424},end:{line:1,column:483}},"15":{start:{line:1,column:485},end:{line:1,column:521}},"16":{start:{line:1,column:542},end:{line:1,column:590}},"17":{start:{line:1,column:596},end:{line:1,column:625}},"18":{start:{line:1,column:628},end:{line:1,column:845}},"19":{start:{line:1,column:848},end:{line:1,column:875}},"20":{start:{line:1,column:863},end:{line:1,column:874}},"21":{start:{line:1,column:876},end:{line:1,column:939}},"22":{start:{line:1,column:891},end:{line:1,column:897}},"23":{start:{line:1,column:898},end:{line:1,column:932}},"24":{start:{line:1,column:932},end:{line:1,column:938}},"25":{start:{line:1,column:939},end:{line:1,column:972}},"26":{start:{line:1,column:992},end:{line:1,column:1034}},"27":{start:{line:1,column:1040},end:{line:1,column:1089}},"28":{start:{line:1,column:1080},end:{line:1,column:1088}},"29":{start:{line:1,column:1090},end:{line:1,column:1116}},"30":{start:{line:1,column:1143},end:{line:1,column:1217}},"31":{start:{line:1,column:1210},end:{line:1,column:1217}},"32":{start:{line:1,column:1223},end:{line:1,column:1300}},"33":{start:{line:1,column:1264},end:{line:1,column:1299}},"34":{start:{line:1,column:1301},end:{line:1,column:1335}},"35":{start:{line:1,column:1364},end:{line:1,column:1372}},"36":{start:{line:1,column:1373},end:{line:1,column:1494}},"37":{start:{line:1,column:1471},end:{line:1,column:1491}},"38":{start:{line:1,column:1522},end:{line:1,column:1577}},"39":{start:{line:1,column:1560},end:{line:1,column:1576}},"40":{start:{line:1,column:1578},end:{line:1,column:1635}},"41":{start:{line:1,column:1659},end:{line:1,column:1689}},"42":{start:{line:1,column:1714},end:{line:1,column:1737}},"43":{start:{line:1,column:1730},end:{line:1,column:1737}},"44":{start:{line:1,column:1743},end:{line:1,column:1793}},"45":{start:{line:1,column:1794},end:{line:1,column:1837}},"46":{start:{line:1,column:1816},end:{line:1,column:1824}},"47":{start:{line:1,column:1825},end:{line:1,column:1836}},"48":{start:{line:1,column:1837},end:{line:1,column:1875}},"49":{start:{line:1,column:1895},end:{line:1,column:1935}},"50":{start:{line:1,column:1960},end:{line:1,column:2006}},"51":{start:{line:1,column:1996},end:{line:1,column:2004}},"52":{start:{line:1,column:2027},end:{line:1,column:2068}},"53":{start:{line:1,column:2100},end:{line:1,column:2152}},"54":{start:{line:1,column:2184},end:{line:1,column:2231}},"55":{start:{line:1,column:2221},end:{line:1,column:2229}},"56":{start:{line:1,column:2249},end:{line:1,column:2278}},"57":{start:{line:1,column:2261},end:{line:1,column:2277}},"58":{start:{line:1,column:2297},end:{line:1,column:2347}},"59":{start:{line:1,column:2348},end:{line:1,column:2356}}},fnMap:{"0":{name:"(anonymous_0)",decl:{start:{line:1,column:61},end:{line:1,column:62}},loc:{start:{line:1,column:65},end:{line:1,column:2357}},line:1},"1":{name:"(anonymous_1)",decl:{start:{line:1,column:202},end:{line:1,column:203}},loc:{start:{line:1,column:230},end:{line:1,column:522}},line:1},"2":{name:"(anonymous_2)",decl:{start:{line:1,column:246},end:{line:1,column:247}},loc:{start:{line:1,column:249},end:{line:1,column:294}},line:1},"3":{name:"(anonymous_3)",decl:{start:{line:1,column:400},end:{line:1,column:401}},loc:{start:{line:1,column:403},end:{line:1,column:407}},line:1},"4":{name:"(anonymous_4)",decl:{start:{line:1,column:421},end:{line:1,column:422}},loc:{start:{line:1,column:424},end:{line:1,column:483}},line:1},"5":{name:"(anonymous_5)",decl:{start:{line:1,column:522},end:{line:1,column:523}},loc:{start:{line:1,column:541},end:{line:1,column:973}},line:1},"6":{name:"(anonymous_6)",decl:{start:{line:1,column:860},end:{line:1,column:861}},loc:{start:{line:1,column:863},end:{line:1,column:874}},line:1},"7":{name:"(anonymous_7)",decl:{start:{line:1,column:973},end:{line:1,column:974}},loc:{start:{line:1,column:991},end:{line:1,column:1117}},line:1},"8":{name:"(anonymous_8)",decl:{start:{line:1,column:1077},end:{line:1,column:1078}},loc:{start:{line:1,column:1080},end:{line:1,column:1088}},line:1},"9":{name:"(anonymous_9)",decl:{start:{line:1,column:1117},end:{line:1,column:1118}},loc:{start:{line:1,column:1142},end:{line:1,column:1336}},line:1},"10":{name:"(anonymous_10)",decl:{start:{line:1,column:1261},end:{line:1,column:1262}},loc:{start:{line:1,column:1264},end:{line:1,column:1299}},line:1},"11":{name:"(anonymous_11)",decl:{start:{line:1,column:1336},end:{line:1,column:1337}},loc:{start:{line:1,column:1357},end:{line:1,column:1495}},line:1},"12":{name:"(anonymous_12)",decl:{start:{line:1,column:1468},end:{line:1,column:1469}},loc:{start:{line:1,column:1471},end:{line:1,column:1491}},line:1},"13":{name:"(anonymous_13)",decl:{start:{line:1,column:1495},end:{line:1,column:1496}},loc:{start:{line:1,column:1515},end:{line:1,column:1636}},line:1},"14":{name:"(anonymous_14)",decl:{start:{line:1,column:1557},end:{line:1,column:1558}},loc:{start:{line:1,column:1560},end:{line:1,column:1576}},line:1},"15":{name:"(anonymous_15)",decl:{start:{line:1,column:1636},end:{line:1,column:1637}},loc:{start:{line:1,column:1658},end:{line:1,column:1690}},line:1},"16":{name:"(anonymous_16)",decl:{start:{line:1,column:1690},end:{line:1,column:1691}},loc:{start:{line:1,column:1713},end:{line:1,column:1876}},line:1},"17":{name:"(anonymous_17)",decl:{start:{line:1,column:1876},end:{line:1,column:1877}},loc:{start:{line:1,column:1894},end:{line:1,column:1936}},line:1},"18":{name:"(anonymous_18)",decl:{start:{line:1,column:1936},end:{line:1,column:1937}},loc:{start:{line:1,column:1959},end:{line:1,column:2007}},line:1},"19":{name:"(anonymous_19)",decl:{start:{line:1,column:1993},end:{line:1,column:1994}},loc:{start:{line:1,column:1996},end:{line:1,column:2004}},line:1},"20":{name:"(anonymous_20)",decl:{start:{line:1,column:2007},end:{line:1,column:2008}},loc:{start:{line:1,column:2026},end:{line:1,column:2069}},line:1},"21":{name:"(anonymous_21)",decl:{start:{line:1,column:2069},end:{line:1,column:2070}},loc:{start:{line:1,column:2099},end:{line:1,column:2153}},line:1},"22":{name:"(anonymous_22)",decl:{start:{line:1,column:2153},end:{line:1,column:2154}},loc:{start:{line:1,column:2183},end:{line:1,column:2232}},line:1},"23":{name:"(anonymous_23)",decl:{start:{line:1,column:2218},end:{line:1,column:2219}},loc:{start:{line:1,column:2221},end:{line:1,column:2229}},line:1},"24":{name:"(anonymous_24)",decl:{start:{line:1,column:2249},end:{line:1,column:2250}},loc:{start:{line:1,column:2260},end:{line:1,column:2278}},line:1}},branchMap:{"0":{loc:{start:{line:1,column:220},end:{line:1,column:229}},type:"default-arg",locations:[{start:{line:1,column:222},end:{line:1,column:229}}],line:1},"1":{loc:{start:{line:1,column:296},end:{line:1,column:348}},type:"if",locations:[{start:{line:1,column:296},end:{line:1,column:348}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"2":{loc:{start:{line:1,column:424},end:{line:1,column:483}},type:"binary-expr",locations:[{start:{line:1,column:424},end:{line:1,column:436}},{start:{line:1,column:438},end:{line:1,column:483}}],line:1},"3":{loc:{start:{line:1,column:876},end:{line:1,column:939}},type:"if",locations:[{start:{line:1,column:876},end:{line:1,column:939}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"4":{loc:{start:{line:1,column:1143},end:{line:1,column:1217}},type:"if",locations:[{start:{line:1,column:1143},end:{line:1,column:1217}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"5":{loc:{start:{line:1,column:1373},end:{line:1,column:1494}},type:"binary-expr",locations:[{start:{line:1,column:1373},end:{line:1,column:1374}},{start:{line:1,column:1377},end:{line:1,column:1493}}],line:1},"6":{loc:{start:{line:1,column:1714},end:{line:1,column:1737}},type:"if",locations:[{start:{line:1,column:1714},end:{line:1,column:1737}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"7":{loc:{start:{line:1,column:1825},end:{line:1,column:1836}},type:"binary-expr",locations:[{start:{line:1,column:1825},end:{line:1,column:1826}},{start:{line:1,column:1828},end:{line:1,column:1836}}],line:1},"8":{loc:{start:{line:1,column:2272},end:{line:1,column:2276}},type:"binary-expr",locations:[{start:{line:1,column:2272},end:{line:1,column:2273}},{start:{line:1,column:2275},end:{line:1,column:2276}}],line:1}},s:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0},f:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0},b:{"0":[0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0]},inputSourceMap:{version:3,sources:["src/app/core/alarm/services/alarm-state.service.ts"],sourcesContent:["import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable, map } from 'rxjs';\nimport { ActiveAlarm } from '../models/active-alarm.model';\nimport { AlarmEvent } from '../models/alarm-event.model';\nimport { NotificationEvent } from '../../../features/notification/models/notification-event.model';\n\ntype ActiveAlarmsSnapshotMode = 'merge' | 'replace';\n\n@Injectable({ providedIn: 'root' })\nexport class AlarmStateService {\n\tprivate readonly activeAlarms$ = new BehaviorSubject([]);\n\tprivate readonly notifications$ = new BehaviorSubject([]);\n\tprivate readonly dismissedNotificationIds$ = new BehaviorSubject>(new Set());\n\tprivate readonly locallyResolvedActiveAlarmIds = new Set();\n\n\tpublic setActiveAlarms(alarms: ActiveAlarm[], mode: ActiveAlarmsSnapshotMode = 'merge'): void {\n\t\tconst filteredIncoming = alarms.filter((alarm) => !this.locallyResolvedActiveAlarmIds.has(alarm.id));\n\n\t\tif (mode === 'replace') {\n\t\t\tthis.activeAlarms$.next(filteredIncoming);\n\t\t\treturn;\n\t\t}\n\n\t\tconst current = this.activeAlarms$.getValue();\n\t\tconst incomingIds = new Set(filteredIncoming.map((alarm) => alarm.id));\n\t\tconst currentOnly = current.filter(\n\t\t\t(alarm) => !incomingIds.has(alarm.id) && !this.locallyResolvedActiveAlarmIds.has(alarm.id)\n\t\t);\n\n\t\tthis.activeAlarms$.next([...filteredIncoming, ...currentOnly]);\n\t}\n\n\tpublic onAlarmTriggered(event: AlarmEvent): void {\n\t\tthis.locallyResolvedActiveAlarmIds.delete(event.id);\n\n\t\tconst current = this.activeAlarms$.getValue();\n\t\tconst nextAlarm: ActiveAlarm = {\n\t\t\tid: event.id,\n\t\t\talarmRuleId: event.alarmRuleId,\n\t\t\tdeviceId: '-',\n\t\t\talarmName: event.alarmName,\n\t\t\tpriority: event.priority,\n\t\t\tactivationTime: event.activationTime,\n\t\t\tresolutionTime: event.resolutionTime,\n\t\t\tposition: 'posizione sconosciuta',\n\t\t\tuserId: null,\n\t\t\tuserUsername: null,\n\t\t};\n\n\t\tconst existingIndex = current.findIndex((alarm) => alarm.id === event.id);\n\t\tif (existingIndex >= 0) {\n\t\t\tconst updated = [...current];\n\t\t\tupdated[existingIndex] = nextAlarm;\n\t\t\tthis.activeAlarms$.next(updated);\n\t\t\treturn;\n\t\t}\n\n\t\tthis.activeAlarms$.next([nextAlarm, ...current]);\n\t}\n\n\tpublic onAlarmResolved(id: string): void {\n\t\tthis.locallyResolvedActiveAlarmIds.add(id);\n\t\tconst updated = this.activeAlarms$.getValue().filter((alarm) => alarm.id !== id);\n\t\tthis.activeAlarms$.next(updated);\n\t}\n\n\tpublic onNotificationReceived(event: NotificationEvent): void {\n\t\tif (this.dismissedNotificationIds$.getValue().has(event.notificationId)) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst withoutCurrentNotification = this.notifications$\n\t\t\t.getValue()\n\t\t\t.filter((notification) => notification.notificationId !== event.notificationId);\n\n\t\tthis.notifications$.next([event, ...withoutCurrentNotification]);\n\t}\n\n\tpublic removeNotification(notificationId: string): void {\n\t\tconst normalizedNotificationId = notificationId.trim();\n\t\tif (!normalizedNotificationId) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.dismissNotification(normalizedNotificationId);\n\t\tthis.notifications$.next(\n\t\t\tthis.notifications$\n\t\t\t\t.getValue()\n\t\t\t\t.filter((notification) => notification.notificationId !== normalizedNotificationId)\n\t\t);\n\t}\n\n\tpublic clearNotifications(): void {\n\t\tconst notificationIds = this.notifications$.getValue().map((notification) => notification.notificationId);\n\t\tthis.dismissNotifications(notificationIds);\n\t\tthis.notifications$.next([]);\n\t}\n\n\tpublic dismissNotification(notificationId: string): void {\n\t\tthis.dismissNotifications([notificationId]);\n\t}\n\n\tpublic dismissNotifications(notificationIds: ReadonlyArray): void {\n\t\tif (notificationIds.length === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst nextDismissedIds = new Set(this.dismissedNotificationIds$.getValue());\n\t\tfor (const notificationId of notificationIds) {\n\t\t\tconst normalizedNotificationId = notificationId.trim();\n\t\t\tif (!normalizedNotificationId) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tnextDismissedIds.add(normalizedNotificationId);\n\t\t}\n\n\t\tthis.dismissedNotificationIds$.next(nextDismissedIds);\n\t}\n\n\tpublic getActiveAlarms$(): Observable {\n\t\treturn this.activeAlarms$.asObservable();\n\t}\n\n\tpublic getActiveAlarmsCount$(): Observable {\n\t\treturn this.activeAlarms$.pipe(map((alarms) => alarms.length));\n\t}\n\n\tpublic getNotifications$(): Observable {\n\t\treturn this.notifications$.asObservable();\n\t}\n\n\tpublic getDismissedNotificationIds$(): Observable> {\n\t\treturn this.dismissedNotificationIds$.asObservable();\n\t}\n\n\tpublic getUnreadNotificationsCount$(): Observable {\n\t\treturn this.notifications$.pipe(map((notifications) => notifications.length));\n\t}\n}\n"],mappings:"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",names:["AlarmStateService","activeAlarms$","BehaviorSubject","notifications$","dismissedNotificationIds$","Set","locallyResolvedActiveAlarmIds","setActiveAlarms","alarms","mode","filteredIncoming","filter","alarm","has","id","next","current","getValue","incomingIds","map","currentOnly","onAlarmTriggered","event","delete","nextAlarm","alarmRuleId","deviceId","alarmName","priority","activationTime","resolutionTime","position","userId","userUsername","existingIndex","findIndex","updated","onAlarmResolved","add","onNotificationReceived","notificationId","withoutCurrentNotification","notification","removeNotification","normalizedNotificationId","trim","dismissNotification","clearNotifications","notificationIds","dismissNotifications","length","nextDismissedIds","getActiveAlarms$","asObservable","getActiveAlarmsCount$","pipe","getNotifications$","getDismissedNotificationIds$","getUnreadNotificationsCount$","notifications","factory","\u0275fac","providedIn"]},_coverageSchema:"1a1c01bbd47fc00a2c39e90264f33305004495a9",hash:"eba801cc2cd78a31f0e5c258d5e5e46d671b4157"};var coverage=global[gcv]||(global[gcv]={});if(!coverage[path]||coverage[path].hash!==hash){coverage[path]=coverageData;}var actualCoverage=coverage[path];{// @ts-ignore +cov_xb17928k1=function(){return actualCoverage;};}return actualCoverage;}cov_xb17928k1();import{L as l,e as r,m as c}from"./chunk-RYTNMYZW.js";var u=(cov_xb17928k1().s[0]++,(()=>{cov_xb17928k1().f[0]++;class a{activeAlarms$=(cov_xb17928k1().s[1]++,new r([]));notifications$=(cov_xb17928k1().s[2]++,new r([]));dismissedNotificationIds$=(cov_xb17928k1().s[3]++,new r(new Set()));locallyResolvedActiveAlarmIds=(cov_xb17928k1().s[4]++,new Set());setActiveAlarms(i,t=(cov_xb17928k1().b[0][0]++,"merge")){cov_xb17928k1().f[1]++;let s=(cov_xb17928k1().s[5]++,i.filter(n=>{cov_xb17928k1().f[2]++;cov_xb17928k1().s[6]++;return!this.locallyResolvedActiveAlarmIds.has(n.id);}));cov_xb17928k1().s[7]++;if(t==="replace"){cov_xb17928k1().b[1][0]++;cov_xb17928k1().s[8]++;this.activeAlarms$.next(s);cov_xb17928k1().s[9]++;return;}else{cov_xb17928k1().b[1][1]++;}let e=(cov_xb17928k1().s[10]++,this.activeAlarms$.getValue()),o=(cov_xb17928k1().s[11]++,new Set(s.map(n=>{cov_xb17928k1().f[3]++;cov_xb17928k1().s[12]++;return n.id;}))),d=(cov_xb17928k1().s[13]++,e.filter(n=>{cov_xb17928k1().f[4]++;cov_xb17928k1().s[14]++;return(cov_xb17928k1().b[2][0]++,!o.has(n.id))&&(cov_xb17928k1().b[2][1]++,!this.locallyResolvedActiveAlarmIds.has(n.id));}));cov_xb17928k1().s[15]++;this.activeAlarms$.next([...s,...d]);}onAlarmTriggered(i){cov_xb17928k1().f[5]++;cov_xb17928k1().s[16]++;this.locallyResolvedActiveAlarmIds.delete(i.id);let t=(cov_xb17928k1().s[17]++,this.activeAlarms$.getValue()),s=(cov_xb17928k1().s[18]++,{id:i.id,alarmRuleId:i.alarmRuleId,deviceId:"-",alarmName:i.alarmName,priority:i.priority,activationTime:i.activationTime,resolutionTime:i.resolutionTime,position:"posizione sconosciuta",userId:null,userUsername:null}),e=(cov_xb17928k1().s[19]++,t.findIndex(o=>{cov_xb17928k1().f[6]++;cov_xb17928k1().s[20]++;return o.id===i.id;}));cov_xb17928k1().s[21]++;if(e>=0){cov_xb17928k1().b[3][0]++;let o=(cov_xb17928k1().s[22]++,[...t]);cov_xb17928k1().s[23]++;o[e]=s,this.activeAlarms$.next(o);cov_xb17928k1().s[24]++;return;}else{cov_xb17928k1().b[3][1]++;}cov_xb17928k1().s[25]++;this.activeAlarms$.next([s,...t]);}onAlarmResolved(i){cov_xb17928k1().f[7]++;cov_xb17928k1().s[26]++;this.locallyResolvedActiveAlarmIds.add(i);let t=(cov_xb17928k1().s[27]++,this.activeAlarms$.getValue().filter(s=>{cov_xb17928k1().f[8]++;cov_xb17928k1().s[28]++;return s.id!==i;}));cov_xb17928k1().s[29]++;this.activeAlarms$.next(t);}onNotificationReceived(i){cov_xb17928k1().f[9]++;cov_xb17928k1().s[30]++;if(this.dismissedNotificationIds$.getValue().has(i.notificationId)){cov_xb17928k1().b[4][0]++;cov_xb17928k1().s[31]++;return;}else{cov_xb17928k1().b[4][1]++;}let t=(cov_xb17928k1().s[32]++,this.notifications$.getValue().filter(s=>{cov_xb17928k1().f[10]++;cov_xb17928k1().s[33]++;return s.notificationId!==i.notificationId;}));cov_xb17928k1().s[34]++;this.notifications$.next([i,...t]);}removeNotification(i){cov_xb17928k1().f[11]++;let t=(cov_xb17928k1().s[35]++,i.trim());cov_xb17928k1().s[36]++;(cov_xb17928k1().b[5][0]++,t)&&(cov_xb17928k1().b[5][1]++,this.dismissNotification(t),this.notifications$.next(this.notifications$.getValue().filter(s=>{cov_xb17928k1().f[12]++;cov_xb17928k1().s[37]++;return s.notificationId!==t;})));}clearNotifications(){cov_xb17928k1().f[13]++;let i=(cov_xb17928k1().s[38]++,this.notifications$.getValue().map(t=>{cov_xb17928k1().f[14]++;cov_xb17928k1().s[39]++;return t.notificationId;}));cov_xb17928k1().s[40]++;this.dismissNotifications(i),this.notifications$.next([]);}dismissNotification(i){cov_xb17928k1().f[15]++;cov_xb17928k1().s[41]++;this.dismissNotifications([i]);}dismissNotifications(i){cov_xb17928k1().f[16]++;cov_xb17928k1().s[42]++;if(i.length===0){cov_xb17928k1().b[6][0]++;cov_xb17928k1().s[43]++;return;}else{cov_xb17928k1().b[6][1]++;}let t=(cov_xb17928k1().s[44]++,new Set(this.dismissedNotificationIds$.getValue()));cov_xb17928k1().s[45]++;for(let s of i){let e=(cov_xb17928k1().s[46]++,s.trim());cov_xb17928k1().s[47]++;(cov_xb17928k1().b[7][0]++,e)&&(cov_xb17928k1().b[7][1]++,t.add(e));}cov_xb17928k1().s[48]++;this.dismissedNotificationIds$.next(t);}getActiveAlarms$(){cov_xb17928k1().f[17]++;cov_xb17928k1().s[49]++;return this.activeAlarms$.asObservable();}getActiveAlarmsCount$(){cov_xb17928k1().f[18]++;cov_xb17928k1().s[50]++;return this.activeAlarms$.pipe(c(i=>{cov_xb17928k1().f[19]++;cov_xb17928k1().s[51]++;return i.length;}));}getNotifications$(){cov_xb17928k1().f[20]++;cov_xb17928k1().s[52]++;return this.notifications$.asObservable();}getDismissedNotificationIds$(){cov_xb17928k1().f[21]++;cov_xb17928k1().s[53]++;return this.dismissedNotificationIds$.asObservable();}getUnreadNotificationsCount$(){cov_xb17928k1().f[22]++;cov_xb17928k1().s[54]++;return this.notifications$.pipe(c(i=>{cov_xb17928k1().f[23]++;cov_xb17928k1().s[55]++;return i.length;}));}static ɵfac=(cov_xb17928k1().s[56]++,function(t){cov_xb17928k1().f[24]++;cov_xb17928k1().s[57]++;return new((cov_xb17928k1().b[8][0]++,t)||(cov_xb17928k1().b[8][1]++,a))();});static ɵprov=(cov_xb17928k1().s[58]++,l({token:a,factory:a.ɵfac,providedIn:"root"}));}cov_xb17928k1().s[59]++;return a;})());export{u as a};//# sourceMappingURL=chunk-CX4DL26R.js.map +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1IiwiY292X3hiMTc5MjhrMSIsInMiLCJmIiwiYSIsImFjdGl2ZUFsYXJtcyQiLCJyIiwibm90aWZpY2F0aW9ucyQiLCJkaXNtaXNzZWROb3RpZmljYXRpb25JZHMkIiwiU2V0IiwibG9jYWxseVJlc29sdmVkQWN0aXZlQWxhcm1JZHMiLCJzZXRBY3RpdmVBbGFybXMiLCJpIiwidCIsImIiLCJmaWx0ZXIiLCJuIiwiaGFzIiwiaWQiLCJuZXh0IiwiZSIsImdldFZhbHVlIiwibyIsIm1hcCIsImQiLCJvbkFsYXJtVHJpZ2dlcmVkIiwiZGVsZXRlIiwiYWxhcm1SdWxlSWQiLCJkZXZpY2VJZCIsImFsYXJtTmFtZSIsInByaW9yaXR5IiwiYWN0aXZhdGlvblRpbWUiLCJyZXNvbHV0aW9uVGltZSIsInBvc2l0aW9uIiwidXNlcklkIiwidXNlclVzZXJuYW1lIiwiZmluZEluZGV4Iiwib25BbGFybVJlc29sdmVkIiwiYWRkIiwib25Ob3RpZmljYXRpb25SZWNlaXZlZCIsIm5vdGlmaWNhdGlvbklkIiwicmVtb3ZlTm90aWZpY2F0aW9uIiwidHJpbSIsImRpc21pc3NOb3RpZmljYXRpb24iLCJjbGVhck5vdGlmaWNhdGlvbnMiLCJkaXNtaXNzTm90aWZpY2F0aW9ucyIsImxlbmd0aCIsImdldEFjdGl2ZUFsYXJtcyQiLCJhc09ic2VydmFibGUiLCJnZXRBY3RpdmVBbGFybXNDb3VudCQiLCJwaXBlIiwiYyIsImdldE5vdGlmaWNhdGlvbnMkIiwiZ2V0RGlzbWlzc2VkTm90aWZpY2F0aW9uSWRzJCIsImdldFVucmVhZE5vdGlmaWNhdGlvbnNDb3VudCQiLCLJtWZhYyIsIsm1cHJvdiIsImwiLCJ0b2tlbiIsImZhY3RvcnkiLCJwcm92aWRlZEluIl0sInNvdXJjZXMiOlsic3JjL2FwcC9jb3JlL2FsYXJtL3NlcnZpY2VzL2FsYXJtLXN0YXRlLnNlcnZpY2UudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBtYXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFjdGl2ZUFsYXJtIH0gZnJvbSAnLi4vbW9kZWxzL2FjdGl2ZS1hbGFybS5tb2RlbCc7XG5pbXBvcnQgeyBBbGFybUV2ZW50IH0gZnJvbSAnLi4vbW9kZWxzL2FsYXJtLWV2ZW50Lm1vZGVsJztcbmltcG9ydCB7IE5vdGlmaWNhdGlvbkV2ZW50IH0gZnJvbSAnLi4vLi4vLi4vZmVhdHVyZXMvbm90aWZpY2F0aW9uL21vZGVscy9ub3RpZmljYXRpb24tZXZlbnQubW9kZWwnO1xuXG50eXBlIEFjdGl2ZUFsYXJtc1NuYXBzaG90TW9kZSA9ICdtZXJnZScgfCAncmVwbGFjZSc7XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgQWxhcm1TdGF0ZVNlcnZpY2Uge1xuXHRwcml2YXRlIHJlYWRvbmx5IGFjdGl2ZUFsYXJtcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEFjdGl2ZUFsYXJtW10+KFtdKTtcblx0cHJpdmF0ZSByZWFkb25seSBub3RpZmljYXRpb25zJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Tm90aWZpY2F0aW9uRXZlbnRbXT4oW10pO1xuXHRwcml2YXRlIHJlYWRvbmx5IGRpc21pc3NlZE5vdGlmaWNhdGlvbklkcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFJlYWRvbmx5U2V0PHN0cmluZz4+KG5ldyBTZXQoKSk7XG5cdHByaXZhdGUgcmVhZG9ubHkgbG9jYWxseVJlc29sdmVkQWN0aXZlQWxhcm1JZHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuXHRwdWJsaWMgc2V0QWN0aXZlQWxhcm1zKGFsYXJtczogQWN0aXZlQWxhcm1bXSwgbW9kZTogQWN0aXZlQWxhcm1zU25hcHNob3RNb2RlID0gJ21lcmdlJyk6IHZvaWQge1xuXHRcdGNvbnN0IGZpbHRlcmVkSW5jb21pbmcgPSBhbGFybXMuZmlsdGVyKChhbGFybSkgPT4gIXRoaXMubG9jYWxseVJlc29sdmVkQWN0aXZlQWxhcm1JZHMuaGFzKGFsYXJtLmlkKSk7XG5cblx0XHRpZiAobW9kZSA9PT0gJ3JlcGxhY2UnKSB7XG5cdFx0XHR0aGlzLmFjdGl2ZUFsYXJtcyQubmV4dChmaWx0ZXJlZEluY29taW5nKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCBjdXJyZW50ID0gdGhpcy5hY3RpdmVBbGFybXMkLmdldFZhbHVlKCk7XG5cdFx0Y29uc3QgaW5jb21pbmdJZHMgPSBuZXcgU2V0KGZpbHRlcmVkSW5jb21pbmcubWFwKChhbGFybSkgPT4gYWxhcm0uaWQpKTtcblx0XHRjb25zdCBjdXJyZW50T25seSA9IGN1cnJlbnQuZmlsdGVyKFxuXHRcdFx0KGFsYXJtKSA9PiAhaW5jb21pbmdJZHMuaGFzKGFsYXJtLmlkKSAmJiAhdGhpcy5sb2NhbGx5UmVzb2x2ZWRBY3RpdmVBbGFybUlkcy5oYXMoYWxhcm0uaWQpXG5cdFx0KTtcblxuXHRcdHRoaXMuYWN0aXZlQWxhcm1zJC5uZXh0KFsuLi5maWx0ZXJlZEluY29taW5nLCAuLi5jdXJyZW50T25seV0pO1xuXHR9XG5cblx0cHVibGljIG9uQWxhcm1UcmlnZ2VyZWQoZXZlbnQ6IEFsYXJtRXZlbnQpOiB2b2lkIHtcblx0XHR0aGlzLmxvY2FsbHlSZXNvbHZlZEFjdGl2ZUFsYXJtSWRzLmRlbGV0ZShldmVudC5pZCk7XG5cblx0XHRjb25zdCBjdXJyZW50ID0gdGhpcy5hY3RpdmVBbGFybXMkLmdldFZhbHVlKCk7XG5cdFx0Y29uc3QgbmV4dEFsYXJtOiBBY3RpdmVBbGFybSA9IHtcblx0XHRcdGlkOiBldmVudC5pZCxcblx0XHRcdGFsYXJtUnVsZUlkOiBldmVudC5hbGFybVJ1bGVJZCxcblx0XHRcdGRldmljZUlkOiAnLScsXG5cdFx0XHRhbGFybU5hbWU6IGV2ZW50LmFsYXJtTmFtZSxcblx0XHRcdHByaW9yaXR5OiBldmVudC5wcmlvcml0eSxcblx0XHRcdGFjdGl2YXRpb25UaW1lOiBldmVudC5hY3RpdmF0aW9uVGltZSxcblx0XHRcdHJlc29sdXRpb25UaW1lOiBldmVudC5yZXNvbHV0aW9uVGltZSxcblx0XHRcdHBvc2l0aW9uOiAncG9zaXppb25lIHNjb25vc2NpdXRhJyxcblx0XHRcdHVzZXJJZDogbnVsbCxcblx0XHRcdHVzZXJVc2VybmFtZTogbnVsbCxcblx0XHR9O1xuXG5cdFx0Y29uc3QgZXhpc3RpbmdJbmRleCA9IGN1cnJlbnQuZmluZEluZGV4KChhbGFybSkgPT4gYWxhcm0uaWQgPT09IGV2ZW50LmlkKTtcblx0XHRpZiAoZXhpc3RpbmdJbmRleCA+PSAwKSB7XG5cdFx0XHRjb25zdCB1cGRhdGVkID0gWy4uLmN1cnJlbnRdO1xuXHRcdFx0dXBkYXRlZFtleGlzdGluZ0luZGV4XSA9IG5leHRBbGFybTtcblx0XHRcdHRoaXMuYWN0aXZlQWxhcm1zJC5uZXh0KHVwZGF0ZWQpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHRoaXMuYWN0aXZlQWxhcm1zJC5uZXh0KFtuZXh0QWxhcm0sIC4uLmN1cnJlbnRdKTtcblx0fVxuXG5cdHB1YmxpYyBvbkFsYXJtUmVzb2x2ZWQoaWQ6IHN0cmluZyk6IHZvaWQge1xuXHRcdHRoaXMubG9jYWxseVJlc29sdmVkQWN0aXZlQWxhcm1JZHMuYWRkKGlkKTtcblx0XHRjb25zdCB1cGRhdGVkID0gdGhpcy5hY3RpdmVBbGFybXMkLmdldFZhbHVlKCkuZmlsdGVyKChhbGFybSkgPT4gYWxhcm0uaWQgIT09IGlkKTtcblx0XHR0aGlzLmFjdGl2ZUFsYXJtcyQubmV4dCh1cGRhdGVkKTtcblx0fVxuXG5cdHB1YmxpYyBvbk5vdGlmaWNhdGlvblJlY2VpdmVkKGV2ZW50OiBOb3RpZmljYXRpb25FdmVudCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLmRpc21pc3NlZE5vdGlmaWNhdGlvbklkcyQuZ2V0VmFsdWUoKS5oYXMoZXZlbnQubm90aWZpY2F0aW9uSWQpKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3Qgd2l0aG91dEN1cnJlbnROb3RpZmljYXRpb24gPSB0aGlzLm5vdGlmaWNhdGlvbnMkXG5cdFx0XHQuZ2V0VmFsdWUoKVxuXHRcdFx0LmZpbHRlcigobm90aWZpY2F0aW9uKSA9PiBub3RpZmljYXRpb24ubm90aWZpY2F0aW9uSWQgIT09IGV2ZW50Lm5vdGlmaWNhdGlvbklkKTtcblxuXHRcdHRoaXMubm90aWZpY2F0aW9ucyQubmV4dChbZXZlbnQsIC4uLndpdGhvdXRDdXJyZW50Tm90aWZpY2F0aW9uXSk7XG5cdH1cblxuXHRwdWJsaWMgcmVtb3ZlTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbklkOiBzdHJpbmcpOiB2b2lkIHtcblx0XHRjb25zdCBub3JtYWxpemVkTm90aWZpY2F0aW9uSWQgPSBub3RpZmljYXRpb25JZC50cmltKCk7XG5cdFx0aWYgKCFub3JtYWxpemVkTm90aWZpY2F0aW9uSWQpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR0aGlzLmRpc21pc3NOb3RpZmljYXRpb24obm9ybWFsaXplZE5vdGlmaWNhdGlvbklkKTtcblx0XHR0aGlzLm5vdGlmaWNhdGlvbnMkLm5leHQoXG5cdFx0XHR0aGlzLm5vdGlmaWNhdGlvbnMkXG5cdFx0XHRcdC5nZXRWYWx1ZSgpXG5cdFx0XHRcdC5maWx0ZXIoKG5vdGlmaWNhdGlvbikgPT4gbm90aWZpY2F0aW9uLm5vdGlmaWNhdGlvbklkICE9PSBub3JtYWxpemVkTm90aWZpY2F0aW9uSWQpXG5cdFx0KTtcblx0fVxuXG5cdHB1YmxpYyBjbGVhck5vdGlmaWNhdGlvbnMoKTogdm9pZCB7XG5cdFx0Y29uc3Qgbm90aWZpY2F0aW9uSWRzID0gdGhpcy5ub3RpZmljYXRpb25zJC5nZXRWYWx1ZSgpLm1hcCgobm90aWZpY2F0aW9uKSA9PiBub3RpZmljYXRpb24ubm90aWZpY2F0aW9uSWQpO1xuXHRcdHRoaXMuZGlzbWlzc05vdGlmaWNhdGlvbnMobm90aWZpY2F0aW9uSWRzKTtcblx0XHR0aGlzLm5vdGlmaWNhdGlvbnMkLm5leHQoW10pO1xuXHR9XG5cblx0cHVibGljIGRpc21pc3NOb3RpZmljYXRpb24obm90aWZpY2F0aW9uSWQ6IHN0cmluZyk6IHZvaWQge1xuXHRcdHRoaXMuZGlzbWlzc05vdGlmaWNhdGlvbnMoW25vdGlmaWNhdGlvbklkXSk7XG5cdH1cblxuXHRwdWJsaWMgZGlzbWlzc05vdGlmaWNhdGlvbnMobm90aWZpY2F0aW9uSWRzOiBSZWFkb25seUFycmF5PHN0cmluZz4pOiB2b2lkIHtcblx0XHRpZiAobm90aWZpY2F0aW9uSWRzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IG5leHREaXNtaXNzZWRJZHMgPSBuZXcgU2V0KHRoaXMuZGlzbWlzc2VkTm90aWZpY2F0aW9uSWRzJC5nZXRWYWx1ZSgpKTtcblx0XHRmb3IgKGNvbnN0IG5vdGlmaWNhdGlvbklkIG9mIG5vdGlmaWNhdGlvbklkcykge1xuXHRcdFx0Y29uc3Qgbm9ybWFsaXplZE5vdGlmaWNhdGlvbklkID0gbm90aWZpY2F0aW9uSWQudHJpbSgpO1xuXHRcdFx0aWYgKCFub3JtYWxpemVkTm90aWZpY2F0aW9uSWQpIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdG5leHREaXNtaXNzZWRJZHMuYWRkKG5vcm1hbGl6ZWROb3RpZmljYXRpb25JZCk7XG5cdFx0fVxuXG5cdFx0dGhpcy5kaXNtaXNzZWROb3RpZmljYXRpb25JZHMkLm5leHQobmV4dERpc21pc3NlZElkcyk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0QWN0aXZlQWxhcm1zJCgpOiBPYnNlcnZhYmxlPEFjdGl2ZUFsYXJtW10+IHtcblx0XHRyZXR1cm4gdGhpcy5hY3RpdmVBbGFybXMkLmFzT2JzZXJ2YWJsZSgpO1xuXHR9XG5cblx0cHVibGljIGdldEFjdGl2ZUFsYXJtc0NvdW50JCgpOiBPYnNlcnZhYmxlPG51bWJlcj4ge1xuXHRcdHJldHVybiB0aGlzLmFjdGl2ZUFsYXJtcyQucGlwZShtYXAoKGFsYXJtcykgPT4gYWxhcm1zLmxlbmd0aCkpO1xuXHR9XG5cblx0cHVibGljIGdldE5vdGlmaWNhdGlvbnMkKCk6IE9ic2VydmFibGU8Tm90aWZpY2F0aW9uRXZlbnRbXT4ge1xuXHRcdHJldHVybiB0aGlzLm5vdGlmaWNhdGlvbnMkLmFzT2JzZXJ2YWJsZSgpO1xuXHR9XG5cblx0cHVibGljIGdldERpc21pc3NlZE5vdGlmaWNhdGlvbklkcyQoKTogT2JzZXJ2YWJsZTxSZWFkb25seVNldDxzdHJpbmc+PiB7XG5cdFx0cmV0dXJuIHRoaXMuZGlzbWlzc2VkTm90aWZpY2F0aW9uSWRzJC5hc09ic2VydmFibGUoKTtcblx0fVxuXG5cdHB1YmxpYyBnZXRVbnJlYWROb3RpZmljYXRpb25zQ291bnQkKCk6IE9ic2VydmFibGU8bnVtYmVyPiB7XG5cdFx0cmV0dXJuIHRoaXMubm90aWZpY2F0aW9ucyQucGlwZShtYXAoKG5vdGlmaWNhdGlvbnMpID0+IG5vdGlmaWNhdGlvbnMubGVuZ3RoKSk7XG5cdH1cbn1cbiJdLCJtYXBwaW5ncyI6IjsrSUFTQSxHQUFhLENBQUFBLENBQUEsRUFBQUMsYUFBQSxHQUFBQyxDQUFBLE9BQWlCLEtBQUFELGFBQUEsR0FBQUUsQ0FBQSxNQUF4QixLQUFPLENBQUFDLENBQWlCLENBQ1pDLGFBQUEsRUFBQUosYUFBQSxHQUFBQyxDQUFBLE1BQWdCLEdBQUksQ0FBQUksQ0FBQSxDQUErQixFQUFFLEdBQ3JEQyxjQUFBLEVBQUFOLGFBQUEsR0FBQUMsQ0FBQSxNQUFpQixHQUFJLENBQUFJLENBQUEsQ0FBcUMsRUFBRSxHQUM1REUseUJBQUEsRUFBQVAsYUFBQSxHQUFBQyxDQUFBLE1BQTRCLEdBQUksQ0FBQUksQ0FBQSxDQUFxQyxHQUFJLENBQUFHLEdBQUssQ0FBTCxDQUFLLEdBQzlFQyw2QkFBQSxFQUFBVCxhQUFBLEdBQUFDLENBQUEsTUFBZ0MsR0FBSSxDQUFBTyxHQUFBLElBRTlDRSxnQkFBZ0JDLENBQUEsQ0FBdUJDLENBQUEsRUFBQVosYUFBQSxHQUFBYSxDQUFBLFNBQWlDLFNBQU8sQ0FBQWIsYUFBQSxHQUFBRSxDQUFBLE1BQ3JGLEdB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T0FDdEIsTUFBTyxNQUFLRyxhQUFBLENBQWMyQyxZQUFBLENBQVksQ0FDdkMsRUFFT0Msc0JBQUEsQ0FBcUIsQ0FBQWhELGFBQUEsR0FBQUUsQ0FBQSxNQUFBRixDQUFBLGdCQUFBQyxDQUFBLE9BQzNCLE1BQU8sTUFBS0csYUFBQSxDQUFjNkMsSUFBQSxDQUFLQyxDQUFBLENBQUt2QyxDQUFBLEVBQVcsQ0FBQVgsYUFBQSxHQUFBRSxDQUFBLE1BQUFGLENBQUEsZ0JBQUFDLENBQUEsY0FBQVUsQ0FBQSxDQUFPa0MsTUFBTSxDQUFOLENBQU0sQ0FBQyxDQUM5RCxFQUVPTSxrQkFBQSxDQUFpQixDQUFBbkQsYUFBQSxHQUFBRSxDQUFBLE1BQUFGLENBQUEsZ0JBQUFDLENBQUEsT0FDdkIsTUFBTyxNQUFLSyxjQUFBLENBQWV5QyxZQUFBLENBQVksQ0FDeEMsRUFFT0ssNkJBQUEsQ0FBNEIsQ0FBQXBELGFBQUEsR0FBQUUsQ0FBQSxNQUFBRixDQUFBLGdCQUFBQyxDQUFBLE9BQ2xDLE1BQU8sTUFBS00seUJBQUEsQ0FBMEJ3QyxZQUFBLENBQVksQ0FDbkQsRUFFT00sNkJBQUEsQ0FBNEIsQ0FBQXJELGFBQUEsR0FBQUUsQ0FBQSxNQUFBRixDQUFBLGdCQUFBQyxDQUFBLE9BQ2xDLE1BQU8sTUFBS0ssY0FBQSxDQUFlMkMsSUFBQSxDQUFLQyxDQUFBLENBQUt2QyxDQUFBLEVBQWtCLENBQUFYLGFBQUEsR0FBQUUsQ0FBQSxNQUFBRixDQUFBLGdCQUFBQyxDQUFBLGNBQUFVLENBQUEsQ0FBY2tDLE1BQU0sQ0FBTixDQUFNLENBQUMsQ0FDN0UsU0FBQVMsSUFBQSxFQUFBdEQsYUFBQSxHQUFBQyxDQUFBLGdCQUFBVyxDQUFBLEVBQUFaLGFBQUEsR0FBQUUsQ0FBQSxNQUFBRixDQUFBLGdCQUFBQyxDQUFBLG1CQUFBRCxhQUFBLEdBQUFhLENBQUEsU0FBQUQsQ0FBQSxJQUFBWixhQUFBLEdBQUFhLENBQUEsU0FqSVlWLENBQUEsSUFBaUIsV0FBQW9ELEtBQUEsRUFBQXZELGFBQUEsR0FBQUMsQ0FBQSxPQUFBdUQsQ0FBQSxFQUFBQyxLQUFBLENBQWpCdEQsQ0FBQSxDQUFpQnVELE9BQUEsQ0FBakJ2RCxDQUFBLENBQWlCbUQsSUFBQSxDQUFBSyxVQUFBLENBREosTUFBTSxLQUFBM0QsYUFBQSxHQUFBQyxDQUFBLGFBQ25CLENBQUFFLENBQWlCLGNBQUFKLENBQUEsSUFBQUksQ0FBQSxFIiwiaWdub3JlTGlzdCI6W119 \ No newline at end of file diff --git a/frontend/dist-instrumented/chunk-CX4DL26R.js.map b/frontend/dist-instrumented/chunk-CX4DL26R.js.map new file mode 100644 index 00000000..36ed4d0d --- /dev/null +++ b/frontend/dist-instrumented/chunk-CX4DL26R.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["src/app/core/alarm/services/alarm-state.service.ts"], + "sourcesContent": ["import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable, map } from 'rxjs';\nimport { ActiveAlarm } from '../models/active-alarm.model';\nimport { AlarmEvent } from '../models/alarm-event.model';\nimport { NotificationEvent } from '../../../features/notification/models/notification-event.model';\n\ntype ActiveAlarmsSnapshotMode = 'merge' | 'replace';\n\n@Injectable({ providedIn: 'root' })\nexport class AlarmStateService {\n\tprivate readonly activeAlarms$ = new BehaviorSubject([]);\n\tprivate readonly notifications$ = new BehaviorSubject([]);\n\tprivate readonly dismissedNotificationIds$ = new BehaviorSubject>(new Set());\n\tprivate readonly locallyResolvedActiveAlarmIds = new Set();\n\n\tpublic setActiveAlarms(alarms: ActiveAlarm[], mode: ActiveAlarmsSnapshotMode = 'merge'): void {\n\t\tconst filteredIncoming = alarms.filter((alarm) => !this.locallyResolvedActiveAlarmIds.has(alarm.id));\n\n\t\tif (mode === 'replace') {\n\t\t\tthis.activeAlarms$.next(filteredIncoming);\n\t\t\treturn;\n\t\t}\n\n\t\tconst current = this.activeAlarms$.getValue();\n\t\tconst incomingIds = new Set(filteredIncoming.map((alarm) => alarm.id));\n\t\tconst currentOnly = current.filter(\n\t\t\t(alarm) => !incomingIds.has(alarm.id) && !this.locallyResolvedActiveAlarmIds.has(alarm.id)\n\t\t);\n\n\t\tthis.activeAlarms$.next([...filteredIncoming, ...currentOnly]);\n\t}\n\n\tpublic onAlarmTriggered(event: AlarmEvent): void {\n\t\tthis.locallyResolvedActiveAlarmIds.delete(event.id);\n\n\t\tconst current = this.activeAlarms$.getValue();\n\t\tconst nextAlarm: ActiveAlarm = {\n\t\t\tid: event.id,\n\t\t\talarmRuleId: event.alarmRuleId,\n\t\t\tdeviceId: '-',\n\t\t\talarmName: event.alarmName,\n\t\t\tpriority: event.priority,\n\t\t\tactivationTime: event.activationTime,\n\t\t\tresolutionTime: event.resolutionTime,\n\t\t\tposition: 'posizione sconosciuta',\n\t\t\tuserId: null,\n\t\t\tuserUsername: null,\n\t\t};\n\n\t\tconst existingIndex = current.findIndex((alarm) => alarm.id === event.id);\n\t\tif (existingIndex >= 0) {\n\t\t\tconst updated = [...current];\n\t\t\tupdated[existingIndex] = nextAlarm;\n\t\t\tthis.activeAlarms$.next(updated);\n\t\t\treturn;\n\t\t}\n\n\t\tthis.activeAlarms$.next([nextAlarm, ...current]);\n\t}\n\n\tpublic onAlarmResolved(id: string): void {\n\t\tthis.locallyResolvedActiveAlarmIds.add(id);\n\t\tconst updated = this.activeAlarms$.getValue().filter((alarm) => alarm.id !== id);\n\t\tthis.activeAlarms$.next(updated);\n\t}\n\n\tpublic onNotificationReceived(event: NotificationEvent): void {\n\t\tif (this.dismissedNotificationIds$.getValue().has(event.notificationId)) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst withoutCurrentNotification = this.notifications$\n\t\t\t.getValue()\n\t\t\t.filter((notification) => notification.notificationId !== event.notificationId);\n\n\t\tthis.notifications$.next([event, ...withoutCurrentNotification]);\n\t}\n\n\tpublic removeNotification(notificationId: string): void {\n\t\tconst normalizedNotificationId = notificationId.trim();\n\t\tif (!normalizedNotificationId) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.dismissNotification(normalizedNotificationId);\n\t\tthis.notifications$.next(\n\t\t\tthis.notifications$\n\t\t\t\t.getValue()\n\t\t\t\t.filter((notification) => notification.notificationId !== normalizedNotificationId)\n\t\t);\n\t}\n\n\tpublic clearNotifications(): void {\n\t\tconst notificationIds = this.notifications$.getValue().map((notification) => notification.notificationId);\n\t\tthis.dismissNotifications(notificationIds);\n\t\tthis.notifications$.next([]);\n\t}\n\n\tpublic dismissNotification(notificationId: string): void {\n\t\tthis.dismissNotifications([notificationId]);\n\t}\n\n\tpublic dismissNotifications(notificationIds: ReadonlyArray): void {\n\t\tif (notificationIds.length === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst nextDismissedIds = new Set(this.dismissedNotificationIds$.getValue());\n\t\tfor (const notificationId of notificationIds) {\n\t\t\tconst normalizedNotificationId = notificationId.trim();\n\t\t\tif (!normalizedNotificationId) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tnextDismissedIds.add(normalizedNotificationId);\n\t\t}\n\n\t\tthis.dismissedNotificationIds$.next(nextDismissedIds);\n\t}\n\n\tpublic getActiveAlarms$(): Observable {\n\t\treturn this.activeAlarms$.asObservable();\n\t}\n\n\tpublic getActiveAlarmsCount$(): Observable {\n\t\treturn this.activeAlarms$.pipe(map((alarms) => alarms.length));\n\t}\n\n\tpublic getNotifications$(): Observable {\n\t\treturn this.notifications$.asObservable();\n\t}\n\n\tpublic getDismissedNotificationIds$(): Observable> {\n\t\treturn this.dismissedNotificationIds$.asObservable();\n\t}\n\n\tpublic getUnreadNotificationsCount$(): Observable {\n\t\treturn this.notifications$.pipe(map((notifications) => notifications.length));\n\t}\n}\n"], + "mappings": "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", + "names": ["AlarmStateService", "activeAlarms$", "BehaviorSubject", "notifications$", "dismissedNotificationIds$", "Set", "locallyResolvedActiveAlarmIds", "setActiveAlarms", "alarms", "mode", "filteredIncoming", "filter", "alarm", "has", "id", "next", "current", "getValue", "incomingIds", "map", "currentOnly", "onAlarmTriggered", "event", "delete", "nextAlarm", "alarmRuleId", "deviceId", "alarmName", "priority", "activationTime", "resolutionTime", "position", "userId", "userUsername", "existingIndex", "findIndex", "updated", "onAlarmResolved", "add", "onNotificationReceived", "notificationId", "withoutCurrentNotification", "notification", "removeNotification", "normalizedNotificationId", "trim", "dismissNotification", "clearNotifications", "notificationIds", "dismissNotifications", "length", "nextDismissedIds", "getActiveAlarms$", "asObservable", "getActiveAlarmsCount$", "pipe", "getNotifications$", "getDismissedNotificationIds$", "getUnreadNotificationsCount$", "notifications", "factory", "\u0275fac", "providedIn"] +} diff --git a/frontend/dist-instrumented/chunk-DEQFIRW7.js b/frontend/dist-instrumented/chunk-DEQFIRW7.js new file mode 100644 index 00000000..cca746d6 --- /dev/null +++ b/frontend/dist-instrumented/chunk-DEQFIRW7.js @@ -0,0 +1,3 @@ +function cov_1c0o7bx2ep(){var path="/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-DEQFIRW7.js";var hash="a5cb6438ce64f7374ea288e38d78a6ab51f39fa7";var global=new Function("return this")();var gcv="__coverage__";var coverageData={path:"/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-DEQFIRW7.js",statementMap:{"0":{start:{line:1,column:214},end:{line:1,column:326}},"1":{start:{line:1,column:258},end:{line:1,column:324}},"2":{start:{line:1,column:296},end:{line:1,column:323}}},fnMap:{"0":{name:"(anonymous_0)",decl:{start:{line:1,column:254},end:{line:1,column:255}},loc:{start:{line:1,column:258},end:{line:1,column:324}},line:1},"1":{name:"(anonymous_1)",decl:{start:{line:1,column:293},end:{line:1,column:294}},loc:{start:{line:1,column:296},end:{line:1,column:323}},line:1}},branchMap:{},s:{"0":0,"1":0,"2":0},f:{"0":0,"1":0},b:{},inputSourceMap:{version:3,sources:["src/app/features/apartment-monitor/apartment-monitor.routes.ts"],sourcesContent:["import { Routes } from '@angular/router';\nimport { authGuard } from '../../core/guards/auth.guard';\n\nexport const APARTMENT_MONITOR_ROUTES: Routes = [\n {\n path: '',\n canActivate: [authGuard],\n loadComponent: () =>\n import('./components/apartment-monitor/apartment-monitor.component').then((m) => m.ApartmentMonitorComponent)\n }\n];\n"],mappings:"gNAGO,IAAMA,EAAmC,CAC9C,CACEC,KAAM,GACNC,YAAa,CAACC,CAAS,EACvBC,cAAeA,IACb,OAAO,qBAA4D,EAAEC,KAAMC,GAAMA,EAAEC,yBAAyB,EAC/G",names:["APARTMENT_MONITOR_ROUTES","path","canActivate","authGuard","loadComponent","then","m","ApartmentMonitorComponent"]},_coverageSchema:"1a1c01bbd47fc00a2c39e90264f33305004495a9",hash:"a5cb6438ce64f7374ea288e38d78a6ab51f39fa7"};var coverage=global[gcv]||(global[gcv]={});if(!coverage[path]||coverage[path].hash!==hash){coverage[path]=coverageData;}var actualCoverage=coverage[path];{// @ts-ignore +cov_1c0o7bx2ep=function(){return actualCoverage;};}return actualCoverage;}cov_1c0o7bx2ep();import{a as t}from"./chunk-K2WBT5ZC.js";import"./chunk-FYGTVJAL.js";import"./chunk-65RKWSY3.js";import"./chunk-2S5V5XEE.js";import"./chunk-F6OGAIBI.js";import"./chunk-RYTNMYZW.js";import"./chunk-VCZGUBMY.js";var a=(cov_1c0o7bx2ep().s[0]++,[{path:"",canActivate:[t],loadComponent:()=>{cov_1c0o7bx2ep().f[0]++;cov_1c0o7bx2ep().s[1]++;return import("./chunk-RSIG5MZX.js").then(o=>{cov_1c0o7bx2ep().f[1]++;cov_1c0o7bx2ep().s[2]++;return o.ApartmentMonitorComponent;});}}]);export{a as APARTMENT_MONITOR_ROUTES};//# sourceMappingURL=chunk-DEQFIRW7.js.map +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJhIiwiY292XzFjMG83YngyZXAiLCJzIiwicGF0aCIsImNhbkFjdGl2YXRlIiwidCIsImxvYWRDb21wb25lbnQiLCJmIiwidGhlbiIsIm8iLCJBcGFydG1lbnRNb25pdG9yQ29tcG9uZW50IiwiQVBBUlRNRU5UX01PTklUT1JfUk9VVEVTIl0sInNvdXJjZXMiOlsic3JjL2FwcC9mZWF0dXJlcy9hcGFydG1lbnQtbW9uaXRvci9hcGFydG1lbnQtbW9uaXRvci5yb3V0ZXMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUm91dGVzIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IGF1dGhHdWFyZCB9IGZyb20gJy4uLy4uL2NvcmUvZ3VhcmRzL2F1dGguZ3VhcmQnO1xuXG5leHBvcnQgY29uc3QgQVBBUlRNRU5UX01PTklUT1JfUk9VVEVTOiBSb3V0ZXMgPSBbXG4gIHtcbiAgICBwYXRoOiAnJyxcbiAgICBjYW5BY3RpdmF0ZTogW2F1dGhHdWFyZF0sXG4gICAgbG9hZENvbXBvbmVudDogKCkgPT5cbiAgICAgIGltcG9ydCgnLi9jb21wb25lbnRzL2FwYXJ0bWVudC1tb25pdG9yL2FwYXJ0bWVudC1tb25pdG9yLmNvbXBvbmVudCcpLnRoZW4oKG0pID0+IG0uQXBhcnRtZW50TW9uaXRvckNvbXBvbmVudClcbiAgfVxuXTtcbiJdLCJtYXBwaW5ncyI6IjsyU0FHTyxHQUFNLENBQUFBLENBQUEsRUFBQUMsY0FBQSxHQUFBQyxDQUFBLE1BQW1DLENBQzlDLENBQ0VDLElBQUEsQ0FBTSxHQUNOQyxXQUFBLENBQWEsQ0FBQ0MsQ0FBUyxFQUN2QkMsYUFBQSxDQUFlQSxDQUFBLEdBQ2IsQ0FBQUwsY0FBQSxHQUFBTSxDQUFBLEtBQUFOLENBQUEsaUJBQUFDLENBQUEsb0JBQU8scUJBQTRELEVBQUVNLElBQUEsQ0FBTUMsQ0FBQSxFQUFNLENBQUFSLGNBQUEsR0FBQU0sQ0FBQSxLQUFBTixDQUFBLGlCQUFBQyxDQUFBLGFBQUFPLENBQUEsQ0FBRUMseUJBQXlCLENBQXpCLENBQXlCLElBQy9HLFVBQUFWLENBQUEsSUFBQVcsd0JBQUEsRSIsImlnbm9yZUxpc3QiOltdfQ== \ No newline at end of file diff --git a/frontend/dist-instrumented/chunk-DEQFIRW7.js.map b/frontend/dist-instrumented/chunk-DEQFIRW7.js.map new file mode 100644 index 00000000..5f693ec1 --- /dev/null +++ b/frontend/dist-instrumented/chunk-DEQFIRW7.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["src/app/features/apartment-monitor/apartment-monitor.routes.ts"], + "sourcesContent": ["import { Routes } from '@angular/router';\nimport { authGuard } from '../../core/guards/auth.guard';\n\nexport const APARTMENT_MONITOR_ROUTES: Routes = [\n {\n path: '',\n canActivate: [authGuard],\n loadComponent: () =>\n import('./components/apartment-monitor/apartment-monitor.component').then((m) => m.ApartmentMonitorComponent)\n }\n];\n"], + "mappings": "gNAGO,IAAMA,EAAmC,CAC9C,CACEC,KAAM,GACNC,YAAa,CAACC,CAAS,EACvBC,cAAeA,IACb,OAAO,qBAA4D,EAAEC,KAAMC,GAAMA,EAAEC,yBAAyB,EAC/G", + "names": ["APARTMENT_MONITOR_ROUTES", "path", "canActivate", "authGuard", "loadComponent", "then", "m", "ApartmentMonitorComponent"] +} diff --git a/frontend/dist-instrumented/chunk-EZ7WFT6U.js b/frontend/dist-instrumented/chunk-EZ7WFT6U.js new file mode 100644 index 00000000..dbc254c1 --- /dev/null +++ b/frontend/dist-instrumented/chunk-EZ7WFT6U.js @@ -0,0 +1,3 @@ +function cov_eqgahp24j(){var path="/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-EZ7WFT6U.js";var hash="08f5eee4bb940efc7d86da17f69747a20155f78f";var global=new Function("return this")();var gcv="__coverage__";var coverageData={path:"/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-EZ7WFT6U.js",statementMap:{"0":{start:{line:1,column:46},end:{line:1,column:79}},"1":{start:{line:1,column:82},end:{line:1,column:1416}},"2":{start:{line:1,column:116},end:{line:1,column:139}},"3":{start:{line:1,column:140},end:{line:1,column:175}},"4":{start:{line:1,column:198},end:{line:1,column:221}},"5":{start:{line:1,column:222},end:{line:1,column:237}},"6":{start:{line:1,column:228},end:{line:1,column:237}},"7":{start:{line:1,column:243},end:{line:1,column:267}},"8":{start:{line:1,column:270},end:{line:1,column:286}},"9":{start:{line:1,column:287},end:{line:1,column:321}},"10":{start:{line:1,column:346},end:{line:1,column:364}},"11":{start:{line:1,column:365},end:{line:1,column:402}},"12":{start:{line:1,column:425},end:{line:1,column:448}},"13":{start:{line:1,column:449},end:{line:1,column:462}},"14":{start:{line:1,column:455},end:{line:1,column:462}},"15":{start:{line:1,column:468},end:{line:1,column:484}},"16":{start:{line:1,column:485},end:{line:1,column:525}},"17":{start:{line:1,column:537},end:{line:1,column:569}},"18":{start:{line:1,column:589},end:{line:1,column:604}},"19":{start:{line:1,column:631},end:{line:1,column:638}},"20":{start:{line:1,column:639},end:{line:1,column:755}},"21":{start:{line:1,column:655},end:{line:1,column:704}},"22":{start:{line:1,column:678},end:{line:1,column:695}},"23":{start:{line:1,column:695},end:{line:1,column:703}},"24":{start:{line:1,column:704},end:{line:1,column:754}},"25":{start:{line:1,column:733},end:{line:1,column:741}},"26":{start:{line:1,column:742},end:{line:1,column:753}},"27":{start:{line:1,column:755},end:{line:1,column:784}},"28":{start:{line:1,column:803},end:{line:1,column:820}},"29":{start:{line:1,column:821},end:{line:1,column:836}},"30":{start:{line:1,column:827},end:{line:1,column:836}},"31":{start:{line:1,column:842},end:{line:1,column:854}},"32":{start:{line:1,column:855},end:{line:1,column:870}},"33":{start:{line:1,column:861},end:{line:1,column:870}},"34":{start:{line:1,column:870},end:{line:1,column:945}},"35":{start:{line:1,column:880},end:{line:1,column:893}},"36":{start:{line:1,column:894},end:{line:1,column:929}},"37":{start:{line:1,column:936},end:{line:1,column:944}},"38":{start:{line:1,column:966},end:{line:1,column:983}},"39":{start:{line:1,column:984},end:{line:1,column:1074}},"40":{start:{line:1,column:990},end:{line:1,column:1043}},"41":{start:{line:1,column:1020},end:{line:1,column:1036}},"42":{start:{line:1,column:1036},end:{line:1,column:1042}},"43":{start:{line:1,column:1043},end:{line:1,column:1073}},"44":{start:{line:1,column:1088},end:{line:1,column:1160}},"45":{start:{line:1,column:1180},end:{line:1,column:1287}},"46":{start:{line:1,column:1238},end:{line:1,column:1286}},"47":{start:{line:1,column:1267},end:{line:1,column:1285}},"48":{start:{line:1,column:1305},end:{line:1,column:1334}},"49":{start:{line:1,column:1317},end:{line:1,column:1333}},"50":{start:{line:1,column:1353},end:{line:1,column:1403}},"51":{start:{line:1,column:1404},end:{line:1,column:1412}}},fnMap:{"0":{name:"(anonymous_0)",decl:{start:{line:1,column:83},end:{line:1,column:84}},loc:{start:{line:1,column:87},end:{line:1,column:1413}},line:1},"1":{name:"(anonymous_1)",decl:{start:{line:1,column:96},end:{line:1,column:97}},loc:{start:{line:1,column:109},end:{line:1,column:176}},line:1},"2":{name:"(anonymous_2)",decl:{start:{line:1,column:176},end:{line:1,column:177}},loc:{start:{line:1,column:191},end:{line:1,column:322}},line:1},"3":{name:"(anonymous_3)",decl:{start:{line:1,column:322},end:{line:1,column:323}},loc:{start:{line:1,column:339},end:{line:1,column:403}},line:1},"4":{name:"(anonymous_4)",decl:{start:{line:1,column:403},end:{line:1,column:404}},loc:{start:{line:1,column:418},end:{line:1,column:526}},line:1},"5":{name:"(anonymous_5)",decl:{start:{line:1,column:526},end:{line:1,column:527}},loc:{start:{line:1,column:536},end:{line:1,column:570}},line:1},"6":{name:"(anonymous_6)",decl:{start:{line:1,column:570},end:{line:1,column:571}},loc:{start:{line:1,column:588},end:{line:1,column:605}},line:1},"7":{name:"(anonymous_7)",decl:{start:{line:1,column:605},end:{line:1,column:606}},loc:{start:{line:1,column:624},end:{line:1,column:785}},line:1},"8":{name:"(anonymous_8)",decl:{start:{line:1,column:785},end:{line:1,column:786}},loc:{start:{line:1,column:796},end:{line:1,column:946}},line:1},"9":{name:"(anonymous_9)",decl:{start:{line:1,column:946},end:{line:1,column:947}},loc:{start:{line:1,column:959},end:{line:1,column:1075}},line:1},"10":{name:"(anonymous_10)",decl:{start:{line:1,column:1075},end:{line:1,column:1076}},loc:{start:{line:1,column:1087},end:{line:1,column:1161}},line:1},"11":{name:"(anonymous_11)",decl:{start:{line:1,column:1161},end:{line:1,column:1162}},loc:{start:{line:1,column:1179},end:{line:1,column:1288}},line:1},"12":{name:"(anonymous_12)",decl:{start:{line:1,column:1235},end:{line:1,column:1236}},loc:{start:{line:1,column:1238},end:{line:1,column:1286}},line:1},"13":{name:"(anonymous_13)",decl:{start:{line:1,column:1264},end:{line:1,column:1265}},loc:{start:{line:1,column:1267},end:{line:1,column:1285}},line:1},"14":{name:"(anonymous_14)",decl:{start:{line:1,column:1305},end:{line:1,column:1306}},loc:{start:{line:1,column:1316},end:{line:1,column:1334}},line:1}},branchMap:{"0":{loc:{start:{line:1,column:147},end:{line:1,column:175}},type:"cond-expr",locations:[{start:{line:1,column:149},end:{line:1,column:172}},{start:{line:1,column:173},end:{line:1,column:175}}],line:1},"1":{loc:{start:{line:1,column:149},end:{line:1,column:172}},type:"binary-expr",locations:[{start:{line:1,column:149},end:{line:1,column:168}},{start:{line:1,column:170},end:{line:1,column:172}}],line:1},"2":{loc:{start:{line:1,column:222},end:{line:1,column:237}},type:"if",locations:[{start:{line:1,column:222},end:{line:1,column:237}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"3":{loc:{start:{line:1,column:449},end:{line:1,column:462}},type:"if",locations:[{start:{line:1,column:449},end:{line:1,column:462}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"4":{loc:{start:{line:1,column:485},end:{line:1,column:525}},type:"binary-expr",locations:[{start:{line:1,column:485},end:{line:1,column:491}},{start:{line:1,column:494},end:{line:1,column:524}}],line:1},"5":{loc:{start:{line:1,column:655},end:{line:1,column:704}},type:"if",locations:[{start:{line:1,column:655},end:{line:1,column:704}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"6":{loc:{start:{line:1,column:704},end:{line:1,column:754}},type:"if",locations:[{start:{line:1,column:704},end:{line:1,column:754}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"7":{loc:{start:{line:1,column:742},end:{line:1,column:753}},type:"binary-expr",locations:[{start:{line:1,column:742},end:{line:1,column:743}},{start:{line:1,column:745},end:{line:1,column:753}}],line:1},"8":{loc:{start:{line:1,column:821},end:{line:1,column:836}},type:"if",locations:[{start:{line:1,column:821},end:{line:1,column:836}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"9":{loc:{start:{line:1,column:855},end:{line:1,column:870}},type:"if",locations:[{start:{line:1,column:855},end:{line:1,column:870}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"10":{loc:{start:{line:1,column:901},end:{line:1,column:929}},type:"cond-expr",locations:[{start:{line:1,column:925},end:{line:1,column:926}},{start:{line:1,column:927},end:{line:1,column:929}}],line:1},"11":{loc:{start:{line:1,column:984},end:{line:1,column:1074}},type:"if",locations:[{start:{line:1,column:984},end:{line:1,column:1074}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"12":{loc:{start:{line:1,column:990},end:{line:1,column:1043}},type:"if",locations:[{start:{line:1,column:990},end:{line:1,column:1043}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"13":{loc:{start:{line:1,column:1095},end:{line:1,column:1160}},type:"cond-expr",locations:[{start:{line:1,column:1130},end:{line:1,column:1134}},{start:{line:1,column:1135},end:{line:1,column:1160}}],line:1},"14":{loc:{start:{line:1,column:1186},end:{line:1,column:1287}},type:"cond-expr",locations:[{start:{line:1,column:1209},end:{line:1,column:1211}},{start:{line:1,column:1212},end:{line:1,column:1287}}],line:1},"15":{loc:{start:{line:1,column:1186},end:{line:1,column:1208}},type:"binary-expr",locations:[{start:{line:1,column:1186},end:{line:1,column:1188}},{start:{line:1,column:1190},end:{line:1,column:1208}}],line:1},"16":{loc:{start:{line:1,column:1238},end:{line:1,column:1286}},type:"binary-expr",locations:[{start:{line:1,column:1238},end:{line:1,column:1254}},{start:{line:1,column:1256},end:{line:1,column:1286}}],line:1},"17":{loc:{start:{line:1,column:1328},end:{line:1,column:1332}},type:"binary-expr",locations:[{start:{line:1,column:1328},end:{line:1,column:1329}},{start:{line:1,column:1331},end:{line:1,column:1332}}],line:1}},s:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0},f:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0},b:{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0],"9":[0,0],"10":[0,0],"11":[0,0],"12":[0,0],"13":[0,0],"14":[0,0],"15":[0,0],"16":[0,0],"17":[0,0]},inputSourceMap:{version:3,sources:["src/app/core/alarm/services/ward-realtime-cache.service.ts"],sourcesContent:["import { Injectable } from '@angular/core';\n\ntype WardIdsByUser = Record;\ntype WardIdInput = string | number | null | undefined;\n\nconst STORAGE_KEY = 'alarm-realtime-ward-ids-by-user';\n\n@Injectable({ providedIn: 'root' })\nexport class WardRealtimeCacheService {\n\tpublic getWardIds(userId: string): string[] {\n\t\tconst normalizedUserId = this.normalizeUserId(userId);\n\t\tif (!normalizedUserId) {\n\t\t\treturn [];\n\t\t}\n\n\t\tconst cache = this.readCache();\n\t\treturn cache[normalizedUserId] ?? [];\n\t}\n\n\tpublic setWardIds(userId: string, wardIds: ReadonlyArray): string[] {\n\t\tconst normalizedUserId = this.normalizeUserId(userId);\n\t\tif (!normalizedUserId) {\n\t\t\treturn [];\n\t\t}\n\n\t\tconst normalizedWardIds = this.normalizeWardIds(wardIds);\n\t\tconst cache = this.readCache();\n\t\tcache[normalizedUserId] = normalizedWardIds;\n\t\tthis.writeCache(cache);\n\t\treturn normalizedWardIds;\n\t}\n\n\tpublic mergeWardIds(userId: string, wardIds: ReadonlyArray): string[] {\n\t\tconst current = this.getWardIds(userId);\n\t\treturn this.setWardIds(userId, [...current, ...wardIds]);\n\t}\n\n\tpublic clearWardIds(userId: string): void {\n\t\tconst normalizedUserId = this.normalizeUserId(userId);\n\t\tif (!normalizedUserId) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst cache = this.readCache();\n\t\tif (!(normalizedUserId in cache)) {\n\t\t\treturn;\n\t\t}\n\n\t\tdelete cache[normalizedUserId];\n\t\tthis.writeCache(cache);\n\t}\n\n\tpublic clearAll(): void {\n\t\tconst storage = this.getStorage();\n\t\tstorage?.removeItem(STORAGE_KEY);\n\t}\n\n\tprivate normalizeUserId(value: string): string {\n\t\treturn value.trim();\n\t}\n\n\tprivate normalizeWardIds(values: ReadonlyArray): string[] {\n\t\tconst normalized = new Set();\n\n\t\tfor (const value of values) {\n\t\t\tif (typeof value === 'number') {\n\t\t\t\tnormalized.add(String(value));\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (typeof value === 'string') {\n\t\t\t\tconst trimmed = value.trim();\n\t\t\t\tif (trimmed) {\n\t\t\t\t\tnormalized.add(trimmed);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn Array.from(normalized.values());\n\t}\n\n\tprivate readCache(): WardIdsByUser {\n\t\tconst storage = this.getStorage();\n\t\tif (!storage) {\n\t\t\treturn {};\n\t\t}\n\n\t\tconst raw = storage.getItem(STORAGE_KEY);\n\t\tif (!raw) {\n\t\t\treturn {};\n\t\t}\n\n\t\ttry {\n\t\t\tconst parsed = JSON.parse(raw) as unknown;\n\t\t\tif (!this.isWardIdsByUser(parsed)) {\n\t\t\t\treturn {};\n\t\t\t}\n\t\t\treturn parsed;\n\t\t} catch {\n\t\t\treturn {};\n\t\t}\n\t}\n\n\tprivate writeCache(cache: WardIdsByUser): void {\n\t\tconst storage = this.getStorage();\n\t\tif (!storage) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (Object.keys(cache).length === 0) {\n\t\t\tstorage.removeItem(STORAGE_KEY);\n\t\t\treturn;\n\t\t}\n\n\t\tstorage.setItem(STORAGE_KEY, JSON.stringify(cache));\n\t}\n\n\tprivate getStorage(): Storage | null {\n\t\tif (globalThis.sessionStorage === undefined) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn globalThis.sessionStorage;\n\t}\n\n\tprivate isWardIdsByUser(value: unknown): value is WardIdsByUser {\n\t\tif (!value || typeof value !== 'object') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn Object.values(value).every(\n\t\t\t(entry) => Array.isArray(entry) && entry.every((wardId) => typeof wardId === 'string')\n\t\t);\n\t}\n}\n"],mappings:"wCAKA,IAAMA,EAAc,kCAGPC,GAAwB,IAAA,CAA/B,MAAOA,CAAwB,CAC7BC,WAAWC,EAAc,CAC/B,IAAMC,EAAmB,KAAKC,gBAAgBF,CAAM,EACpD,OAAKC,EAIS,KAAKE,UAAS,EACfF,CAAgB,GAAK,CAAA,EAJ1B,CAAA,CAKT,CAEOG,WAAWJ,EAAgBK,EAAmC,CACpE,IAAMJ,EAAmB,KAAKC,gBAAgBF,CAAM,EACpD,GAAI,CAACC,EACJ,MAAO,CAAA,EAGR,IAAMK,EAAoB,KAAKC,iBAAiBF,CAAO,EACjDG,EAAQ,KAAKL,UAAS,EAC5BK,OAAAA,EAAMP,CAAgB,EAAIK,EAC1B,KAAKG,WAAWD,CAAK,EACdF,CACR,CAEOI,aAAaV,EAAgBK,EAAmC,CACtE,IAAMM,EAAU,KAAKZ,WAAWC,CAAM,EACtC,OAAO,KAAKI,WAAWJ,EAAQ,CAAC,GAAGW,EAAS,GAAGN,CAAO,CAAC,CACxD,CAEOO,aAAaZ,EAAc,CACjC,IAAMC,EAAmB,KAAKC,gBAAgBF,CAAM,EACpD,GAAI,CAACC,EACJ,OAGD,IAAMO,EAAQ,KAAKL,UAAS,EACtBF,KAAoBO,IAI1B,OAAOA,EAAMP,CAAgB,EAC7B,KAAKQ,WAAWD,CAAK,EACtB,CAEOK,UAAQ,CACE,KAAKC,WAAU,GACtBC,WAAWlB,CAAW,CAChC,CAEQK,gBAAgBc,EAAa,CACpC,OAAOA,EAAMC,KAAI,CAClB,CAEQV,iBAAiBW,EAAkC,CAC1D,IAAMC,EAAa,IAAIC,IAEvB,QAAWJ,KAASE,EAAQ,CAC3B,GAAI,OAAOF,GAAU,SAAU,CAC9BG,EAAWE,IAAIC,OAAON,CAAK,CAAC,EAC5B,QACD,CAEA,GAAI,OAAOA,GAAU,SAAU,CAC9B,IAAMO,EAAUP,EAAMC,KAAI,EACtBM,GACHJ,EAAWE,IAAIE,CAAO,CAExB,CACD,CAEA,OAAOC,MAAMC,KAAKN,EAAWD,OAAM,CAAE,CACtC,CAEQf,WAAS,CAChB,IAAMuB,EAAU,KAAKZ,WAAU,EAC/B,GAAI,CAACY,EACJ,MAAO,CAAA,EAGR,IAAMC,EAAMD,EAAQE,QAAQ/B,CAAW,EACvC,GAAI,CAAC8B,EACJ,MAAO,CAAA,EAGR,GAAI,CACH,IAAME,EAASC,KAAKC,MAAMJ,CAAG,EAC7B,OAAK,KAAKK,gBAAgBH,CAAM,EAGzBA,EAFC,CAAA,CAGT,MAAQ,CACP,MAAO,CAAA,CACR,CACD,CAEQpB,WAAWD,EAAoB,CACtC,IAAMkB,EAAU,KAAKZ,WAAU,EAC/B,GAAKY,EAIL,IAAIO,OAAOC,KAAK1B,CAAK,EAAE2B,SAAW,EAAG,CACpCT,EAAQX,WAAWlB,CAAW,EAC9B,MACD,CAEA6B,EAAQU,QAAQvC,EAAaiC,KAAKO,UAAU7B,CAAK,CAAC,EACnD,CAEQM,YAAU,CACjB,OAAIwB,WAAWC,iBAAmBC,OAC1B,KAGDF,WAAWC,cACnB,CAEQP,gBAAgBhB,EAAc,CACrC,MAAI,CAACA,GAAS,OAAOA,GAAU,SACvB,GAGDiB,OAAOf,OAAOF,CAAK,EAAEyB,MAC1BC,GAAUlB,MAAMmB,QAAQD,CAAK,GAAKA,EAAMD,MAAOG,GAAW,OAAOA,GAAW,QAAQ,CAAC,CAExF,4CA7HY9C,EAAwB,6BAAxBA,EAAwB+C,QAAxB/C,EAAwBgD,UAAAC,WADX,MAAM,CAAA,SACnBjD,CAAwB,GAAA",names:["STORAGE_KEY","WardRealtimeCacheService","getWardIds","userId","normalizedUserId","normalizeUserId","readCache","setWardIds","wardIds","normalizedWardIds","normalizeWardIds","cache","writeCache","mergeWardIds","current","clearWardIds","clearAll","getStorage","removeItem","value","trim","values","normalized","Set","add","String","trimmed","Array","from","storage","raw","getItem","parsed","JSON","parse","isWardIdsByUser","Object","keys","length","setItem","stringify","globalThis","sessionStorage","undefined","every","entry","isArray","wardId","factory","\u0275fac","providedIn"]},_coverageSchema:"1a1c01bbd47fc00a2c39e90264f33305004495a9",hash:"08f5eee4bb940efc7d86da17f69747a20155f78f"};var coverage=global[gcv]||(global[gcv]={});if(!coverage[path]||coverage[path].hash!==hash){coverage[path]=coverageData;}var actualCoverage=coverage[path];{// @ts-ignore +cov_eqgahp24j=function(){return actualCoverage;};}return actualCoverage;}cov_eqgahp24j();import{L as o}from"./chunk-RYTNMYZW.js";var n=(cov_eqgahp24j().s[0]++,"alarm-realtime-ward-ids-by-user"),c=(cov_eqgahp24j().s[1]++,(()=>{cov_eqgahp24j().f[0]++;class s{getWardIds(r){cov_eqgahp24j().f[1]++;let e=(cov_eqgahp24j().s[2]++,this.normalizeUserId(r));cov_eqgahp24j().s[3]++;return e?(cov_eqgahp24j().b[0][0]++,(cov_eqgahp24j().b[1][0]++,this.readCache()[e])??(cov_eqgahp24j().b[1][1]++,[])):(cov_eqgahp24j().b[0][1]++,[]);}setWardIds(r,e){cov_eqgahp24j().f[2]++;let t=(cov_eqgahp24j().s[4]++,this.normalizeUserId(r));cov_eqgahp24j().s[5]++;if(!t){cov_eqgahp24j().b[2][0]++;cov_eqgahp24j().s[6]++;return[];}else{cov_eqgahp24j().b[2][1]++;}let a=(cov_eqgahp24j().s[7]++,this.normalizeWardIds(e)),i=(cov_eqgahp24j().s[8]++,this.readCache());cov_eqgahp24j().s[9]++;return i[t]=a,this.writeCache(i),a;}mergeWardIds(r,e){cov_eqgahp24j().f[3]++;let t=(cov_eqgahp24j().s[10]++,this.getWardIds(r));cov_eqgahp24j().s[11]++;return this.setWardIds(r,[...t,...e]);}clearWardIds(r){cov_eqgahp24j().f[4]++;let e=(cov_eqgahp24j().s[12]++,this.normalizeUserId(r));cov_eqgahp24j().s[13]++;if(!e){cov_eqgahp24j().b[3][0]++;cov_eqgahp24j().s[14]++;return;}else{cov_eqgahp24j().b[3][1]++;}let t=(cov_eqgahp24j().s[15]++,this.readCache());cov_eqgahp24j().s[16]++;(cov_eqgahp24j().b[4][0]++,e in t)&&(cov_eqgahp24j().b[4][1]++,delete t[e],this.writeCache(t));}clearAll(){cov_eqgahp24j().f[5]++;cov_eqgahp24j().s[17]++;this.getStorage()?.removeItem(n);}normalizeUserId(r){cov_eqgahp24j().f[6]++;cov_eqgahp24j().s[18]++;return r.trim();}normalizeWardIds(r){cov_eqgahp24j().f[7]++;let e=(cov_eqgahp24j().s[19]++,new Set());cov_eqgahp24j().s[20]++;for(let t of r){cov_eqgahp24j().s[21]++;if(typeof t=="number"){cov_eqgahp24j().b[5][0]++;cov_eqgahp24j().s[22]++;e.add(String(t));cov_eqgahp24j().s[23]++;continue;}else{cov_eqgahp24j().b[5][1]++;}cov_eqgahp24j().s[24]++;if(typeof t=="string"){cov_eqgahp24j().b[6][0]++;let a=(cov_eqgahp24j().s[25]++,t.trim());cov_eqgahp24j().s[26]++;(cov_eqgahp24j().b[7][0]++,a)&&(cov_eqgahp24j().b[7][1]++,e.add(a));}else{cov_eqgahp24j().b[6][1]++;}}cov_eqgahp24j().s[27]++;return Array.from(e.values());}readCache(){cov_eqgahp24j().f[8]++;let r=(cov_eqgahp24j().s[28]++,this.getStorage());cov_eqgahp24j().s[29]++;if(!r){cov_eqgahp24j().b[8][0]++;cov_eqgahp24j().s[30]++;return{};}else{cov_eqgahp24j().b[8][1]++;}let e=(cov_eqgahp24j().s[31]++,r.getItem(n));cov_eqgahp24j().s[32]++;if(!e){cov_eqgahp24j().b[9][0]++;cov_eqgahp24j().s[33]++;return{};}else{cov_eqgahp24j().b[9][1]++;}cov_eqgahp24j().s[34]++;try{let t=(cov_eqgahp24j().s[35]++,JSON.parse(e));cov_eqgahp24j().s[36]++;return this.isWardIdsByUser(t)?(cov_eqgahp24j().b[10][0]++,t):(cov_eqgahp24j().b[10][1]++,{});}catch{cov_eqgahp24j().s[37]++;return{};}}writeCache(r){cov_eqgahp24j().f[9]++;let e=(cov_eqgahp24j().s[38]++,this.getStorage());cov_eqgahp24j().s[39]++;if(e){cov_eqgahp24j().b[11][0]++;cov_eqgahp24j().s[40]++;if(Object.keys(r).length===0){cov_eqgahp24j().b[12][0]++;cov_eqgahp24j().s[41]++;e.removeItem(n);cov_eqgahp24j().s[42]++;return;}else{cov_eqgahp24j().b[12][1]++;}cov_eqgahp24j().s[43]++;e.setItem(n,JSON.stringify(r));}else{cov_eqgahp24j().b[11][1]++;}}getStorage(){cov_eqgahp24j().f[10]++;cov_eqgahp24j().s[44]++;return globalThis.sessionStorage===void 0?(cov_eqgahp24j().b[13][0]++,null):(cov_eqgahp24j().b[13][1]++,globalThis.sessionStorage);}isWardIdsByUser(r){cov_eqgahp24j().f[11]++;cov_eqgahp24j().s[45]++;return(cov_eqgahp24j().b[15][0]++,!r)||(cov_eqgahp24j().b[15][1]++,typeof r!="object")?(cov_eqgahp24j().b[14][0]++,!1):(cov_eqgahp24j().b[14][1]++,Object.values(r).every(e=>{cov_eqgahp24j().f[12]++;cov_eqgahp24j().s[46]++;return(cov_eqgahp24j().b[16][0]++,Array.isArray(e))&&(cov_eqgahp24j().b[16][1]++,e.every(t=>{cov_eqgahp24j().f[13]++;cov_eqgahp24j().s[47]++;return typeof t=="string";}));}));}static ɵfac=(cov_eqgahp24j().s[48]++,function(e){cov_eqgahp24j().f[14]++;cov_eqgahp24j().s[49]++;return new((cov_eqgahp24j().b[17][0]++,e)||(cov_eqgahp24j().b[17][1]++,s))();});static ɵprov=(cov_eqgahp24j().s[50]++,o({token:s,factory:s.ɵfac,providedIn:"root"}));}cov_eqgahp24j().s[51]++;return s;})());export{c as a};//# sourceMappingURL=chunk-EZ7WFT6U.js.map +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJuIiwiY292X2VxZ2FocDI0aiIsInMiLCJjIiwiZiIsImdldFdhcmRJZHMiLCJyIiwiZSIsIm5vcm1hbGl6ZVVzZXJJZCIsImIiLCJyZWFkQ2FjaGUiLCJzZXRXYXJkSWRzIiwidCIsImEiLCJub3JtYWxpemVXYXJkSWRzIiwiaSIsIndyaXRlQ2FjaGUiLCJtZXJnZVdhcmRJZHMiLCJjbGVhcldhcmRJZHMiLCJjbGVhckFsbCIsImdldFN0b3JhZ2UiLCJyZW1vdmVJdGVtIiwidHJpbSIsIlNldCIsImFkZCIsIlN0cmluZyIsIkFycmF5IiwiZnJvbSIsInZhbHVlcyIsImdldEl0ZW0iLCJKU09OIiwicGFyc2UiLCJpc1dhcmRJZHNCeVVzZXIiLCJPYmplY3QiLCJrZXlzIiwibGVuZ3RoIiwic2V0SXRlbSIsInN0cmluZ2lmeSIsImdsb2JhbFRoaXMiLCJzZXNzaW9uU3RvcmFnZSIsImV2ZXJ5IiwiaXNBcnJheSIsIsm1ZmFjIiwiybVwcm92IiwibyIsInRva2VuIiwiZmFjdG9yeSIsInByb3ZpZGVkSW4iXSwic291cmNlcyI6WyJzcmMvYXBwL2NvcmUvYWxhcm0vc2VydmljZXMvd2FyZC1yZWFsdGltZS1jYWNoZS5zZXJ2aWNlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxudHlwZSBXYXJkSWRzQnlVc2VyID0gUmVjb3JkPHN0cmluZywgc3RyaW5nW10+O1xudHlwZSBXYXJkSWRJbnB1dCA9IHN0cmluZyB8IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQ7XG5cbmNvbnN0IFNUT1JBR0VfS0VZID0gJ2FsYXJtLXJlYWx0aW1lLXdhcmQtaWRzLWJ5LXVzZXInO1xuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIFdhcmRSZWFsdGltZUNhY2hlU2VydmljZSB7XG5cdHB1YmxpYyBnZXRXYXJkSWRzKHVzZXJJZDogc3RyaW5nKTogc3RyaW5nW10ge1xuXHRcdGNvbnN0IG5vcm1hbGl6ZWRVc2VySWQgPSB0aGlzLm5vcm1hbGl6ZVVzZXJJZCh1c2VySWQpO1xuXHRcdGlmICghbm9ybWFsaXplZFVzZXJJZCkge1xuXHRcdFx0cmV0dXJuIFtdO1xuXHRcdH1cblxuXHRcdGNvbnN0IGNhY2hlID0gdGhpcy5yZWFkQ2FjaGUoKTtcblx0XHRyZXR1cm4gY2FjaGVbbm9ybWFsaXplZFVzZXJJZF0gPz8gW107XG5cdH1cblxuXHRwdWJsaWMgc2V0V2FyZElkcyh1c2VySWQ6IHN0cmluZywgd2FyZElkczogUmVhZG9ubHlBcnJheTxXYXJkSWRJbnB1dD4pOiBzdHJpbmdbXSB7XG5cdFx0Y29uc3Qgbm9ybWFsaXplZFVzZXJJZCA9IHRoaXMubm9ybWFsaXplVXNlcklkKHVzZXJJZCk7XG5cdFx0aWYgKCFub3JtYWxpemVkVXNlcklkKSB7XG5cdFx0XHRyZXR1cm4gW107XG5cdFx0fVxuXG5cdFx0Y29uc3Qgbm9ybWFsaXplZFdhcmRJZHMgPSB0aGlzLm5vcm1hbGl6ZVdhcmRJZHMod2FyZElkcyk7XG5cdFx0Y29uc3QgY2FjaGUgPSB0aGlzLnJlYWRDYWNoZSgpO1xuXHRcdGNhY2hlW25vcm1hbGl6ZWRVc2VySWRdID0gbm9ybWFsaXplZFdhcmRJZHM7XG5cdFx0dGhpcy53cml0ZUNhY2hlKGNhY2hlKTtcblx0XHRyZXR1cm4gbm9ybWFsaXplZFdhcmRJZHM7XG5cdH1cblxuXHRwdWJsaWMgbWVyZ2VXYXJkSWRzKHVzZXJJZDogc3RyaW5nLCB3YXJkSWRzOiBSZWFkb25seUFycmF5PFdhcmRJZElucHV0Pik6IHN0cmluZ1tdIHtcblx0XHRjb25zdCBjdXJyZW50ID0gdGhpcy5nZXRXYXJkSWRzKHVzZXJJZCk7XG5cdFx0cmV0dXJuIHRoaXMuc2V0V2FyZElkcyh1c2VySWQsIFsuLi5jdXJyZW50LCAuLi53YXJkSWRzXSk7XG5cdH1cblxuXHRwdWJsaWMgY2xlYXJXYXJkSWRzKHVzZXJJZDogc3RyaW5nKTogdm9pZCB7XG5cdFx0Y29uc3Qgbm9ybWFsaXplZFVzZXJJZCA9IHRoaXMubm9ybWFsaXplVXNlcklkKHVzZXJJZCk7XG5cdFx0aWYgKCFub3JtYWxpemVkVXNlcklkKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3QgY2FjaGUgPSB0aGlzLnJlYWRDYWNoZSgpO1xuXHRcdGlmICghKG5vcm1hbGl6ZWRVc2VySWQgaW4gY2FjaGUpKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0ZGVsZXRlIGNhY2hlW25vcm1hbGl6ZWRVc2VySWRdO1xuXHRcdHRoaXMud3JpdGVDYWNoZShjYWNoZSk7XG5cdH1cblxuXHRwdWJsaWMgY2xlYXJBbGwoKTogdm9pZCB7XG5cdFx0Y29uc3Qgc3RvcmFnZSA9IHRoaXMuZ2V0U3RvcmFnZSgpO1xuXHRcdHN0b3JhZ2U/LnJlbW92ZUl0ZW0oU1RPUkFHRV9LRVkpO1xuXHR9XG5cblx0cHJpdmF0ZSBub3JtYWxpemVVc2VySWQodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHZhbHVlLnRyaW0oKTtcblx0fVxuXG5cdHByaXZhdGUgbm9ybWFsaXplV2FyZElkcyh2YWx1ZXM6IFJlYWRvbmx5QXJyYXk8V2FyZElkSW5wdXQ+KTogc3RyaW5nW10ge1xuXHRcdGNvbnN0IG5vcm1hbGl6ZWQgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuXHRcdGZvciAoY29uc3QgdmFsdWUgb2YgdmFsdWVzKSB7XG5cdFx0XHRpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuXHRcdFx0XHRub3JtYWxpemVkLmFkZChTdHJpbmcodmFsdWUpKTtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG5cdFx0XHRcdGNvbnN0IHRyaW1tZWQgPSB2YWx1ZS50cmltKCk7XG5cdFx0XHRcdGlmICh0cmltbWVkKSB7XG5cdFx0XHRcdFx0bm9ybWFsaXplZC5hZGQodHJpbW1lZCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gQXJyYXkuZnJvbShub3JtYWxpemVkLnZhbHVlcygpKTtcblx0fVxuXG5cdHByaXZhdGUgcmVhZENhY2hlKCk6IFdhcmRJZHNCeVVzZXIge1xuXHRcdGNvbnN0IHN0b3JhZ2UgPSB0aGlzLmdldFN0b3JhZ2UoKTtcblx0XHRpZiAoIXN0b3JhZ2UpIHtcblx0XHRcdHJldHVybiB7fTtcblx0XHR9XG5cblx0XHRjb25zdCByYXcgPSBzdG9yYWdlLmdldEl0ZW0oU1RPUkFHRV9LRVkpO1xuXHRcdGlmICghcmF3KSB7XG5cdFx0XHRyZXR1cm4ge307XG5cdFx0fVxuXG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UocmF3KSBhcyB1bmtub3duO1xuXHRcdFx0aWYgKCF0aGlzLmlzV2FyZElkc0J5VXNlcihwYXJzZWQpKSB7XG5cdFx0XHRcdHJldHVybiB7fTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBwYXJzZWQ7XG5cdFx0fSBjYXRjaCB7XG5cdFx0XHRyZXR1cm4ge307XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSB3cml0ZUNhY2hlKGNhY2hlOiBXYXJkSWRzQnlVc2VyKTogdm9pZCB7XG5cdFx0Y29uc3Qgc3RvcmFnZSA9IHRoaXMuZ2V0U3RvcmFnZSgpO1xuXHRcdGlmICghc3RvcmFnZSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmIChPYmplY3Qua2V5cyhjYWNoZSkubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRzdG9yYWdlLnJlbW92ZUl0ZW0oU1RPUkFHRV9LRVkpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHN0b3JhZ2Uuc2V0SXRlbShTVE9SQUdFX0tFWSwgSlNPTi5zdHJpbmdpZnkoY2FjaGUpKTtcblx0fVxuXG5cdHByaXZhdGUgZ2V0U3RvcmFnZSgpOiBTdG9yYWdlIHwgbnVsbCB7XG5cdFx0aWYgKGdsb2JhbFRoaXMuc2Vzc2lvblN0b3JhZ2UgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGdsb2JhbFRoaXMuc2Vzc2lvblN0b3JhZ2U7XG5cdH1cblxuXHRwcml2YXRlIGlzV2FyZElkc0J5VXNlcih2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIFdhcmRJZHNCeVVzZXIge1xuXHRcdGlmICghdmFsdWUgfHwgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHJldHVybiBPYmplY3QudmFsdWVzKHZhbHVlKS5ldmVyeShcblx0XHRcdChlbnRyeSkgPT4gQXJyYXkuaXNBcnJheShlbnRyeSkgJiYgZW50cnkuZXZlcnkoKHdhcmRJZCkgPT4gdHlwZW9mIHdhcmRJZCA9PT0gJ3N0cmluZycpXG5cdFx0KTtcblx0fVxufVxuIl0sIm1hcHBpbmdzIjoiO2lJQUtBLEdBQU0sQ0FBQUEsQ0FBQSxFQUFBQyxhQUFBLEdBQUFDLENBQUEsTUFBYyxtQ0FHUEMsQ0FBQSxFQUFBRixhQUFBLEdBQUFDLENBQUEsT0FBd0IsS0FBQUQsYUFBQSxHQUFBRyxDQUFBLE1BQS9CLEtBQU8sQ0FBQUYsQ0FBd0IsQ0FDN0JHLFdBQVdDLENBQUEsQ0FBYyxDQUFBTCxhQUFBLEdBQUFHLENBQUEsTUFDL0IsR0FBTSxDQUFBRyxDQUFBLEVBQUFOLGFBQUEsR0FBQUMsQ0FBQSxNQUFtQixLQUFLTSxlQUFBLENBQWdCRixDQUFNLEdBQ3BETCxhQUFBLEdBQUFDLENBQUEsWUFBSyxDQUFBSyxDQUFBLEVBQUFOLGFBQUEsR0FBQVEsQ0FBQSxTQUlTLENBQUFSLGFBQUEsR0FBQVEsQ0FBQSxjQUFLQyxTQUFBLENBQVMsRUFDZkgsQ0FBZ0IsS0FBQU4sYUFBQSxHQUFBUSxDQUFBLFNBQUssTUFBQVIsYUFBQSxHQUFBUSxDQUFBLFNBSjFCLEVBS1QsR0FFT0UsV0FBV0wsQ0FBQSxDQUFnQkMsQ0FBQSxDQUFtQyxDQUFBTixhQUFBLEdBQUFHLENBQUEsTUFDcEUsR0FBTSxDQUFBUSxDQUFBLEVBQUFYLGFBQUEsR0FBQUMsQ0FBQSxN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 \ No newline at end of file diff --git a/frontend/dist-instrumented/chunk-EZ7WFT6U.js.map b/frontend/dist-instrumented/chunk-EZ7WFT6U.js.map new file mode 100644 index 00000000..2381d757 --- /dev/null +++ b/frontend/dist-instrumented/chunk-EZ7WFT6U.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["src/app/core/alarm/services/ward-realtime-cache.service.ts"], + "sourcesContent": ["import { Injectable } from '@angular/core';\n\ntype WardIdsByUser = Record;\ntype WardIdInput = string | number | null | undefined;\n\nconst STORAGE_KEY = 'alarm-realtime-ward-ids-by-user';\n\n@Injectable({ providedIn: 'root' })\nexport class WardRealtimeCacheService {\n\tpublic getWardIds(userId: string): string[] {\n\t\tconst normalizedUserId = this.normalizeUserId(userId);\n\t\tif (!normalizedUserId) {\n\t\t\treturn [];\n\t\t}\n\n\t\tconst cache = this.readCache();\n\t\treturn cache[normalizedUserId] ?? [];\n\t}\n\n\tpublic setWardIds(userId: string, wardIds: ReadonlyArray): string[] {\n\t\tconst normalizedUserId = this.normalizeUserId(userId);\n\t\tif (!normalizedUserId) {\n\t\t\treturn [];\n\t\t}\n\n\t\tconst normalizedWardIds = this.normalizeWardIds(wardIds);\n\t\tconst cache = this.readCache();\n\t\tcache[normalizedUserId] = normalizedWardIds;\n\t\tthis.writeCache(cache);\n\t\treturn normalizedWardIds;\n\t}\n\n\tpublic mergeWardIds(userId: string, wardIds: ReadonlyArray): string[] {\n\t\tconst current = this.getWardIds(userId);\n\t\treturn this.setWardIds(userId, [...current, ...wardIds]);\n\t}\n\n\tpublic clearWardIds(userId: string): void {\n\t\tconst normalizedUserId = this.normalizeUserId(userId);\n\t\tif (!normalizedUserId) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst cache = this.readCache();\n\t\tif (!(normalizedUserId in cache)) {\n\t\t\treturn;\n\t\t}\n\n\t\tdelete cache[normalizedUserId];\n\t\tthis.writeCache(cache);\n\t}\n\n\tpublic clearAll(): void {\n\t\tconst storage = this.getStorage();\n\t\tstorage?.removeItem(STORAGE_KEY);\n\t}\n\n\tprivate normalizeUserId(value: string): string {\n\t\treturn value.trim();\n\t}\n\n\tprivate normalizeWardIds(values: ReadonlyArray): string[] {\n\t\tconst normalized = new Set();\n\n\t\tfor (const value of values) {\n\t\t\tif (typeof value === 'number') {\n\t\t\t\tnormalized.add(String(value));\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (typeof value === 'string') {\n\t\t\t\tconst trimmed = value.trim();\n\t\t\t\tif (trimmed) {\n\t\t\t\t\tnormalized.add(trimmed);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn Array.from(normalized.values());\n\t}\n\n\tprivate readCache(): WardIdsByUser {\n\t\tconst storage = this.getStorage();\n\t\tif (!storage) {\n\t\t\treturn {};\n\t\t}\n\n\t\tconst raw = storage.getItem(STORAGE_KEY);\n\t\tif (!raw) {\n\t\t\treturn {};\n\t\t}\n\n\t\ttry {\n\t\t\tconst parsed = JSON.parse(raw) as unknown;\n\t\t\tif (!this.isWardIdsByUser(parsed)) {\n\t\t\t\treturn {};\n\t\t\t}\n\t\t\treturn parsed;\n\t\t} catch {\n\t\t\treturn {};\n\t\t}\n\t}\n\n\tprivate writeCache(cache: WardIdsByUser): void {\n\t\tconst storage = this.getStorage();\n\t\tif (!storage) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (Object.keys(cache).length === 0) {\n\t\t\tstorage.removeItem(STORAGE_KEY);\n\t\t\treturn;\n\t\t}\n\n\t\tstorage.setItem(STORAGE_KEY, JSON.stringify(cache));\n\t}\n\n\tprivate getStorage(): Storage | null {\n\t\tif (globalThis.sessionStorage === undefined) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn globalThis.sessionStorage;\n\t}\n\n\tprivate isWardIdsByUser(value: unknown): value is WardIdsByUser {\n\t\tif (!value || typeof value !== 'object') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn Object.values(value).every(\n\t\t\t(entry) => Array.isArray(entry) && entry.every((wardId) => typeof wardId === 'string')\n\t\t);\n\t}\n}\n"], + "mappings": "wCAKA,IAAMA,EAAc,kCAGPC,GAAwB,IAAA,CAA/B,MAAOA,CAAwB,CAC7BC,WAAWC,EAAc,CAC/B,IAAMC,EAAmB,KAAKC,gBAAgBF,CAAM,EACpD,OAAKC,EAIS,KAAKE,UAAS,EACfF,CAAgB,GAAK,CAAA,EAJ1B,CAAA,CAKT,CAEOG,WAAWJ,EAAgBK,EAAmC,CACpE,IAAMJ,EAAmB,KAAKC,gBAAgBF,CAAM,EACpD,GAAI,CAACC,EACJ,MAAO,CAAA,EAGR,IAAMK,EAAoB,KAAKC,iBAAiBF,CAAO,EACjDG,EAAQ,KAAKL,UAAS,EAC5BK,OAAAA,EAAMP,CAAgB,EAAIK,EAC1B,KAAKG,WAAWD,CAAK,EACdF,CACR,CAEOI,aAAaV,EAAgBK,EAAmC,CACtE,IAAMM,EAAU,KAAKZ,WAAWC,CAAM,EACtC,OAAO,KAAKI,WAAWJ,EAAQ,CAAC,GAAGW,EAAS,GAAGN,CAAO,CAAC,CACxD,CAEOO,aAAaZ,EAAc,CACjC,IAAMC,EAAmB,KAAKC,gBAAgBF,CAAM,EACpD,GAAI,CAACC,EACJ,OAGD,IAAMO,EAAQ,KAAKL,UAAS,EACtBF,KAAoBO,IAI1B,OAAOA,EAAMP,CAAgB,EAC7B,KAAKQ,WAAWD,CAAK,EACtB,CAEOK,UAAQ,CACE,KAAKC,WAAU,GACtBC,WAAWlB,CAAW,CAChC,CAEQK,gBAAgBc,EAAa,CACpC,OAAOA,EAAMC,KAAI,CAClB,CAEQV,iBAAiBW,EAAkC,CAC1D,IAAMC,EAAa,IAAIC,IAEvB,QAAWJ,KAASE,EAAQ,CAC3B,GAAI,OAAOF,GAAU,SAAU,CAC9BG,EAAWE,IAAIC,OAAON,CAAK,CAAC,EAC5B,QACD,CAEA,GAAI,OAAOA,GAAU,SAAU,CAC9B,IAAMO,EAAUP,EAAMC,KAAI,EACtBM,GACHJ,EAAWE,IAAIE,CAAO,CAExB,CACD,CAEA,OAAOC,MAAMC,KAAKN,EAAWD,OAAM,CAAE,CACtC,CAEQf,WAAS,CAChB,IAAMuB,EAAU,KAAKZ,WAAU,EAC/B,GAAI,CAACY,EACJ,MAAO,CAAA,EAGR,IAAMC,EAAMD,EAAQE,QAAQ/B,CAAW,EACvC,GAAI,CAAC8B,EACJ,MAAO,CAAA,EAGR,GAAI,CACH,IAAME,EAASC,KAAKC,MAAMJ,CAAG,EAC7B,OAAK,KAAKK,gBAAgBH,CAAM,EAGzBA,EAFC,CAAA,CAGT,MAAQ,CACP,MAAO,CAAA,CACR,CACD,CAEQpB,WAAWD,EAAoB,CACtC,IAAMkB,EAAU,KAAKZ,WAAU,EAC/B,GAAKY,EAIL,IAAIO,OAAOC,KAAK1B,CAAK,EAAE2B,SAAW,EAAG,CACpCT,EAAQX,WAAWlB,CAAW,EAC9B,MACD,CAEA6B,EAAQU,QAAQvC,EAAaiC,KAAKO,UAAU7B,CAAK,CAAC,EACnD,CAEQM,YAAU,CACjB,OAAIwB,WAAWC,iBAAmBC,OAC1B,KAGDF,WAAWC,cACnB,CAEQP,gBAAgBhB,EAAc,CACrC,MAAI,CAACA,GAAS,OAAOA,GAAU,SACvB,GAGDiB,OAAOf,OAAOF,CAAK,EAAEyB,MAC1BC,GAAUlB,MAAMmB,QAAQD,CAAK,GAAKA,EAAMD,MAAOG,GAAW,OAAOA,GAAW,QAAQ,CAAC,CAExF,4CA7HY9C,EAAwB,6BAAxBA,EAAwB+C,QAAxB/C,EAAwBgD,UAAAC,WADX,MAAM,CAAA,SACnBjD,CAAwB,GAAA", + "names": ["STORAGE_KEY", "WardRealtimeCacheService", "getWardIds", "userId", "normalizedUserId", "normalizeUserId", "readCache", "setWardIds", "wardIds", "normalizedWardIds", "normalizeWardIds", "cache", "writeCache", "mergeWardIds", "current", "clearWardIds", "clearAll", "getStorage", "removeItem", "value", "trim", "values", "normalized", "Set", "add", "String", "trimmed", "Array", "from", "storage", "raw", "getItem", "parsed", "JSON", "parse", "isWardIdsByUser", "Object", "keys", "length", "setItem", "stringify", "globalThis", "sessionStorage", "undefined", "every", "entry", "isArray", "wardId", "factory", "\u0275fac", "providedIn"] +} diff --git a/frontend/dist-instrumented/chunk-F6OGAIBI.js b/frontend/dist-instrumented/chunk-F6OGAIBI.js new file mode 100644 index 00000000..af2cf7f5 --- /dev/null +++ b/frontend/dist-instrumented/chunk-F6OGAIBI.js @@ -0,0 +1,3 @@ +function cov_22auuzpf1n(){var path="/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-F6OGAIBI.js";var hash="7a985fe7e50fd259e34db1f4c27ad0eb4897fad3";var global=new Function("return this")();var gcv="__coverage__";var coverageData={path:"/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-F6OGAIBI.js",statementMap:{"0":{start:{line:1,column:318},end:{line:1,column:417}},"1":{start:{line:1,column:439},end:{line:1,column:457}},"2":{start:{line:1,column:458},end:{line:1,column:505}},"3":{start:{line:1,column:520},end:{line:1,column:550}},"4":{start:{line:1,column:557},end:{line:1,column:730}},"5":{start:{line:1,column:584},end:{line:1,column:603}},"6":{start:{line:1,column:621},end:{line:1,column:650}},"7":{start:{line:1,column:633},end:{line:1,column:649}},"8":{start:{line:1,column:669},end:{line:1,column:717}},"9":{start:{line:1,column:692},end:{line:1,column:697}},"10":{start:{line:1,column:718},end:{line:1,column:726}},"11":{start:{line:1,column:733},end:{line:1,column:742}},"12":{start:{line:1,column:746},end:{line:1,column:1910}},"13":{start:{line:1,column:817},end:{line:1,column:819}},"14":{start:{line:1,column:837},end:{line:1,column:958}},"15":{start:{line:1,column:973},end:{line:1,column:1041}},"16":{start:{line:1,column:1010},end:{line:1,column:1041}},"17":{start:{line:1,column:1056},end:{line:1,column:1161}},"18":{start:{line:1,column:1176},end:{line:1,column:1197}},"19":{start:{line:1,column:1220},end:{line:1,column:1246}},"20":{start:{line:1,column:1264},end:{line:1,column:1328}},"21":{start:{line:1,column:1331},end:{line:1,column:1358}},"22":{start:{line:1,column:1359},end:{line:1,column:1383}},"23":{start:{line:1,column:1409},end:{line:1,column:1440}},"24":{start:{line:1,column:1441},end:{line:1,column:1480}},"25":{start:{line:1,column:1509},end:{line:1,column:1540}},"26":{start:{line:1,column:1541},end:{line:1,column:1583}},"27":{start:{line:1,column:1594},end:{line:1,column:1626}},"28":{start:{line:1,column:1634},end:{line:1,column:1663}},"29":{start:{line:1,column:1675},end:{line:1,column:1715}},"30":{start:{line:1,column:1731},end:{line:1,column:1768}},"31":{start:{line:1,column:1786},end:{line:1,column:1828}},"32":{start:{line:1,column:1798},end:{line:1,column:1827}},"33":{start:{line:1,column:1847},end:{line:1,column:1897}},"34":{start:{line:1,column:1898},end:{line:1,column:1906}},"35":{start:{line:1,column:1918},end:{line:1,column:3828}},"36":{start:{line:1,column:1941},end:{line:1,column:1947}},"37":{start:{line:1,column:1996},end:{line:1,column:1998}},"38":{start:{line:1,column:2022},end:{line:1,column:2026}},"39":{start:{line:1,column:2042},end:{line:1,column:2067}},"40":{start:{line:1,column:2073},end:{line:1,column:2109}},"41":{start:{line:1,column:2110},end:{line:1,column:2251}},"42":{start:{line:1,column:2177},end:{line:1,column:2249}},"43":{start:{line:1,column:2266},end:{line:1,column:2336}},"44":{start:{line:1,column:2348},end:{line:1,column:2401}},"45":{start:{line:1,column:2413},end:{line:1,column:2453}},"46":{start:{line:1,column:2483},end:{line:1,column:2525}},"47":{start:{line:1,column:2539},end:{line:1,column:2592}},"48":{start:{line:1,column:2615},end:{line:1,column:2691}},"49":{start:{line:1,column:2710},end:{line:1,column:2818}},"50":{start:{line:1,column:2847},end:{line:1,column:2958}},"51":{start:{line:1,column:2969},end:{line:1,column:3001}},"52":{start:{line:1,column:3009},end:{line:1,column:3038}},"53":{start:{line:1,column:3054},end:{line:1,column:3091}},"54":{start:{line:1,column:3107},end:{line:1,column:3443}},"55":{start:{line:1,column:3196},end:{line:1,column:3241}},"56":{start:{line:1,column:3255},end:{line:1,column:3290}},"57":{start:{line:1,column:3291},end:{line:1,column:3442}},"58":{start:{line:1,column:3478},end:{line:1,column:3521}},"59":{start:{line:1,column:3514},end:{line:1,column:3520}},"60":{start:{line:1,column:3539},end:{line:1,column:3614}},"61":{start:{line:1,column:3643},end:{line:1,column:3644}},"62":{start:{line:1,column:3666},end:{line:1,column:3667}},"63":{start:{line:1,column:3694},end:{line:1,column:3696}},"64":{start:{line:1,column:3714},end:{line:1,column:3749}},"65":{start:{line:1,column:3726},end:{line:1,column:3748}},"66":{start:{line:1,column:3768},end:{line:1,column:3815}},"67":{start:{line:1,column:3791},end:{line:1,column:3795}},"68":{start:{line:1,column:3816},end:{line:1,column:3824}},"69":{start:{line:1,column:3843},end:{line:1,column:3862}},"70":{start:{line:1,column:3880},end:{line:1,column:3913}},"71":{start:{line:1,column:3904},end:{line:1,column:3913}},"72":{start:{line:1,column:3919},end:{line:1,column:3940}},"73":{start:{line:1,column:3941},end:{line:1,column:3992}},"74":{start:{line:1,column:4008},end:{line:1,column:4044}},"75":{start:{line:1,column:4060},end:{line:1,column:4139}},"76":{start:{line:1,column:4108},end:{line:1,column:4129}},"77":{start:{line:1,column:4130},end:{line:1,column:4138}},"78":{start:{line:1,column:4139},end:{line:1,column:4147}},"79":{start:{line:1,column:4155},end:{line:1,column:5282}},"80":{start:{line:1,column:4207},end:{line:1,column:4209}},"81":{start:{line:1,column:4229},end:{line:1,column:4231}},"82":{start:{line:1,column:4249},end:{line:1,column:4309}},"83":{start:{line:1,column:4324},end:{line:1,column:4392}},"84":{start:{line:1,column:4361},end:{line:1,column:4392}},"85":{start:{line:1,column:4407},end:{line:1,column:4512}},"86":{start:{line:1,column:4527},end:{line:1,column:4548}},"87":{start:{line:1,column:4566},end:{line:1,column:4598}},"88":{start:{line:1,column:4599},end:{line:1,column:4633}},"89":{start:{line:1,column:4662},end:{line:1,column:4681}},"90":{start:{line:1,column:4682},end:{line:1,column:4707}},"91":{start:{line:1,column:4733},end:{line:1,column:4797}},"92":{start:{line:1,column:4798},end:{line:1,column:4837}},"93":{start:{line:1,column:4866},end:{line:1,column:4930}},"94":{start:{line:1,column:4931},end:{line:1,column:4973}},"95":{start:{line:1,column:4984},end:{line:1,column:5016}},"96":{start:{line:1,column:5024},end:{line:1,column:5053}},"97":{start:{line:1,column:5065},end:{line:1,column:5105}},"98":{start:{line:1,column:5121},end:{line:1,column:5158}},"99":{start:{line:1,column:5176},end:{line:1,column:5218}},"100":{start:{line:1,column:5188},end:{line:1,column:5217}},"101":{start:{line:1,column:5237},end:{line:1,column:5269}},"102":{start:{line:1,column:5270},end:{line:1,column:5278}},"103":{start:{line:1,column:5289},end:{line:1,column:5373}},"104":{start:{line:1,column:5302},end:{line:1,column:5364}},"105":{start:{line:1,column:5376},end:{line:1,column:5502}},"106":{start:{line:1,column:5389},end:{line:1,column:5493}},"107":{start:{line:1,column:5505},end:{line:1,column:5617}},"108":{start:{line:1,column:5518},end:{line:1,column:5608}},"109":{start:{line:1,column:5620},end:{line:1,column:5804}},"110":{start:{line:1,column:5820},end:{line:1,column:5843}},"111":{start:{line:1,column:5869},end:{line:1,column:5873}},"112":{start:{line:1,column:5876},end:{line:1,column:5925}},"113":{start:{line:1,column:5928},end:{line:1,column:5934}},"114":{start:{line:1,column:5935},end:{line:1,column:5948}},"115":{start:{line:1,column:5974},end:{line:1,column:5978}},"116":{start:{line:1,column:5981},end:{line:1,column:6018}},"117":{start:{line:1,column:6021},end:{line:1,column:6027}},"118":{start:{line:1,column:6028},end:{line:1,column:6041}},"119":{start:{line:1,column:6067},end:{line:1,column:6071}},"120":{start:{line:1,column:6074},end:{line:1,column:6115}},"121":{start:{line:1,column:6118},end:{line:1,column:6124}},"122":{start:{line:1,column:6125},end:{line:1,column:6138}},"123":{start:{line:1,column:6162},end:{line:1,column:6174}},"124":{start:{line:1,column:6175},end:{line:1,column:6188}},"125":{start:{line:1,column:6211},end:{line:1,column:6215}},"126":{start:{line:1,column:6216},end:{line:1,column:6243}},"127":{start:{line:1,column:6266},end:{line:1,column:6270}},"128":{start:{line:1,column:6271},end:{line:1,column:6298}},"129":{start:{line:1,column:6321},end:{line:1,column:6343}},"130":{start:{line:1,column:6344},end:{line:1,column:6357}},"131":{start:{line:1,column:6380},end:{line:1,column:6384}},"132":{start:{line:1,column:6387},end:{line:1,column:6408}},"133":{start:{line:1,column:6409},end:{line:1,column:6546}},"134":{start:{line:1,column:6426},end:{line:1,column:6488}},"135":{start:{line:1,column:6451},end:{line:1,column:6488}},"136":{start:{line:1,column:6488},end:{line:1,column:6545}},"137":{start:{line:1,column:6511},end:{line:1,column:6545}},"138":{start:{line:1,column:6546},end:{line:1,column:6554}},"139":{start:{line:1,column:6570},end:{line:1,column:6609}},"140":{start:{line:1,column:6589},end:{line:1,column:6609}},"141":{start:{line:1,column:6631},end:{line:1,column:6635}},"142":{start:{line:1,column:6636},end:{line:1,column:6725}},"143":{start:{line:1,column:6680},end:{line:1,column:6724}},"144":{start:{line:1,column:6751},end:{line:1,column:6755}},"145":{start:{line:1,column:6756},end:{line:1,column:6762}},"146":{start:{line:1,column:6768},end:{line:1,column:6805}},"147":{start:{line:1,column:6808},end:{line:1,column:6818}},"148":{start:{line:1,column:6819},end:{line:1,column:6836}},"149":{start:{line:1,column:6853},end:{line:1,column:6905}},"150":{start:{line:1,column:6863},end:{line:1,column:6864}},"151":{start:{line:1,column:6874},end:{line:1,column:6905}},"152":{start:{line:1,column:6893},end:{line:1,column:6905}},"153":{start:{line:1,column:6905},end:{line:1,column:6925}},"154":{start:{line:1,column:6950},end:{line:1,column:6962}},"155":{start:{line:1,column:6963},end:{line:1,column:6990}},"156":{start:{line:1,column:6998},end:{line:1,column:7101}},"157":{start:{line:1,column:7104},end:{line:1,column:7106}},"158":{start:{line:1,column:7110},end:{line:1,column:7321}},"159":{start:{line:1,column:7349},end:{line:1,column:7354}},"160":{start:{line:1,column:7355},end:{line:1,column:7367}},"161":{start:{line:1,column:7373},end:{line:1,column:7375}},"162":{start:{line:1,column:7378},end:{line:1,column:7479}},"163":{start:{line:1,column:7386},end:{line:1,column:7479}},"164":{start:{line:1,column:7405},end:{line:1,column:7428}},"165":{start:{line:1,column:7434},end:{line:1,column:7441}},"166":{start:{line:1,column:7442},end:{line:1,column:7454}},"167":{start:{line:1,column:7448},end:{line:1,column:7454}},"168":{start:{line:1,column:7454},end:{line:1,column:7457}},"169":{start:{line:1,column:7463},end:{line:1,column:7473}},"170":{start:{line:1,column:7473},end:{line:1,column:7478}},"171":{start:{line:1,column:7485},end:{line:1,column:7506}},"172":{start:{line:1,column:7507},end:{line:1,column:7532}},"173":{start:{line:1,column:7538},end:{line:1,column:7540}},"174":{start:{line:1,column:7541},end:{line:1,column:7648}},"175":{start:{line:1,column:7568},end:{line:1,column:7573}},"176":{start:{line:1,column:7574},end:{line:1,column:7644}},"177":{start:{line:1,column:7673},end:{line:1,column:7684}},"178":{start:{line:1,column:7685},end:{line:1,column:7732}},"179":{start:{line:1,column:7755},end:{line:1,column:7760}},"180":{start:{line:1,column:7761},end:{line:1,column:7797}},"181":{start:{line:1,column:7782},end:{line:1,column:7797}},"182":{start:{line:1,column:7803},end:{line:1,column:7805}},"183":{start:{line:1,column:7806},end:{line:1,column:8440}},"184":{start:{line:1,column:7832},end:{line:1,column:7847}},"185":{start:{line:1,column:7847},end:{line:1,column:7853}},"186":{start:{line:1,column:7870},end:{line:1,column:7886}},"187":{start:{line:1,column:7886},end:{line:1,column:7892}},"188":{start:{line:1,column:7907},end:{line:1,column:7921}},"189":{start:{line:1,column:7921},end:{line:1,column:7927}},"190":{start:{line:1,column:7942},end:{line:1,column:7956}},"191":{start:{line:1,column:7956},end:{line:1,column:7962}},"192":{start:{line:1,column:7978},end:{line:1,column:7993}},"193":{start:{line:1,column:7993},end:{line:1,column:7999}},"194":{start:{line:1,column:8016},end:{line:1,column:8032}},"195":{start:{line:1,column:8032},end:{line:1,column:8038}},"196":{start:{line:1,column:8053},end:{line:1,column:8067}},"197":{start:{line:1,column:8067},end:{line:1,column:8073}},"198":{start:{line:1,column:8088},end:{line:1,column:8102}},"199":{start:{line:1,column:8102},end:{line:1,column:8108}},"200":{start:{line:1,column:8126},end:{line:1,column:8142}},"201":{start:{line:1,column:8145},end:{line:1,column:8161}},"202":{start:{line:1,column:8162},end:{line:1,column:8186}},"203":{start:{line:1,column:8186},end:{line:1,column:8192}},"204":{start:{line:1,column:8211},end:{line:1,column:8228}},"205":{start:{line:1,column:8231},end:{line:1,column:8248}},"206":{start:{line:1,column:8249},end:{line:1,column:8274}},"207":{start:{line:1,column:8274},end:{line:1,column:8280}},"208":{start:{line:1,column:8297},end:{line:1,column:8312}},"209":{start:{line:1,column:8315},end:{line:1,column:8330}},"210":{start:{line:1,column:8331},end:{line:1,column:8354}},"211":{start:{line:1,column:8354},end:{line:1,column:8360}},"212":{start:{line:1,column:8377},end:{line:1,column:8392}},"213":{start:{line:1,column:8395},end:{line:1,column:8410}},"214":{start:{line:1,column:8411},end:{line:1,column:8434}},"215":{start:{line:1,column:8434},end:{line:1,column:8439}},"216":{start:{line:1,column:8440},end:{line:1,column:8463}},"217":{start:{line:1,column:8480},end:{line:1,column:8565}},"218":{start:{line:1,column:8531},end:{line:1,column:8560}},"219":{start:{line:1,column:8598},end:{line:1,column:8600}},"220":{start:{line:1,column:8601},end:{line:1,column:8639}},"221":{start:{line:1,column:8645},end:{line:1,column:8654}},"222":{start:{line:1,column:8655},end:{line:1,column:8680}},"223":{start:{line:1,column:8672},end:{line:1,column:8680}},"224":{start:{line:1,column:8680},end:{line:1,column:8717}},"225":{start:{line:1,column:8735},end:{line:1,column:8763}},"226":{start:{line:1,column:8794},end:{line:1,column:8953}},"227":{start:{line:1,column:8821},end:{line:1,column:8828}},"228":{start:{line:1,column:8829},end:{line:1,column:8910}},"229":{start:{line:1,column:8858},end:{line:1,column:8881}},"230":{start:{line:1,column:8886},end:{line:1,column:8910}},"231":{start:{line:1,column:8895},end:{line:1,column:8910}},"232":{start:{line:1,column:8916},end:{line:1,column:8932}},"233":{start:{line:1,column:8933},end:{line:1,column:8952}},"234":{start:{line:1,column:8971},end:{line:1,column:9237}},"235":{start:{line:1,column:8988},end:{line:1,column:9011}},"236":{start:{line:1,column:9018},end:{line:1,column:9038}},"237":{start:{line:1,column:9045},end:{line:1,column:9064}},"238":{start:{line:1,column:9071},end:{line:1,column:9091}},"239":{start:{line:1,column:9098},end:{line:1,column:9120}},"240":{start:{line:1,column:9127},end:{line:1,column:9149}},"241":{start:{line:1,column:9156},end:{line:1,column:9183}},"242":{start:{line:1,column:9190},end:{line:1,column:9208}},"243":{start:{line:1,column:9216},end:{line:1,column:9236}},"244":{start:{line:1,column:9270},end:{line:1,column:9314}},"245":{start:{line:1,column:9291},end:{line:1,column:9313}},"246":{start:{line:1,column:9340},end:{line:1,column:9864}},"247":{start:{line:1,column:9357},end:{line:1,column:9388}},"248":{start:{line:1,column:9395},end:{line:1,column:9424}},"249":{start:{line:1,column:9437},end:{line:1,column:9449}},"250":{start:{line:1,column:9452},end:{line:1,column:9466}},"251":{start:{line:1,column:9467},end:{line:1,column:9754}},"252":{start:{line:1,column:9479},end:{line:1,column:9484}},"253":{start:{line:1,column:9487},end:{line:1,column:9496}},"254":{start:{line:1,column:9499},end:{line:1,column:9731}},"255":{start:{line:1,column:9515},end:{line:1,column:9721}},"256":{start:{line:1,column:9545},end:{line:1,column:9546}},"257":{start:{line:1,column:9550},end:{line:1,column:9574}},"258":{start:{line:1,column:9578},end:{line:1,column:9613}},"259":{start:{line:1,column:9614},end:{line:1,column:9676}},"260":{start:{line:1,column:9634},end:{line:1,column:9652}},"261":{start:{line:1,column:9644},end:{line:1,column:9652}},"262":{start:{line:1,column:9658},end:{line:1,column:9676}},"263":{start:{line:1,column:9668},end:{line:1,column:9676}},"264":{start:{line:1,column:9682},end:{line:1,column:9721}},"265":{start:{line:1,column:9712},end:{line:1,column:9721}},"266":{start:{line:1,column:9721},end:{line:1,column:9729}},"267":{start:{line:1,column:9732},end:{line:1,column:9753}},"268":{start:{line:1,column:9742},end:{line:1,column:9753}},"269":{start:{line:1,column:9754},end:{line:1,column:9781}},"270":{start:{line:1,column:9788},end:{line:1,column:9827}},"271":{start:{line:1,column:9841},end:{line:1,column:9842}},"272":{start:{line:1,column:9843},end:{line:1,column:9863}},"273":{start:{line:1,column:9879},end:{line:1,column:10252}},"274":{start:{line:1,column:9908},end:{line:1,column:9912}},"275":{start:{line:1,column:9915},end:{line:1,column:9931}},"276":{start:{line:1,column:9934},end:{line:1,column:9970}},"277":{start:{line:1,column:9971},end:{line:1,column:10251}},"278":{start:{line:1,column:9988},end:{line:1,column:10039}},"279":{start:{line:1,column:10046},end:{line:1,column:10081}},"280":{start:{line:1,column:10088},end:{line:1,column:10149}},"281":{start:{line:1,column:10156},end:{line:1,column:10222}},"282":{start:{line:1,column:10230},end:{line:1,column:10250}},"283":{start:{line:1,column:10260},end:{line:1,column:10261}},"284":{start:{line:1,column:10264},end:{line:1,column:10265}},"285":{start:{line:1,column:10287},end:{line:1,column:10305}},"286":{start:{line:1,column:10306},end:{line:1,column:10336}},"287":{start:{line:1,column:10358},end:{line:1,column:10368}},"288":{start:{line:1,column:10371},end:{line:1,column:10383}},"289":{start:{line:1,column:10384},end:{line:1,column:10436}},"290":{start:{line:1,column:10457},end:{line:1,column:10707}},"291":{start:{line:1,column:10484},end:{line:1,column:10676}},"292":{start:{line:1,column:10496},end:{line:1,column:10547}},"293":{start:{line:1,column:10550},end:{line:1,column:10561}},"294":{start:{line:1,column:10562},end:{line:1,column:10585}},"295":{start:{line:1,column:10597},end:{line:1,column:10602}},"296":{start:{line:1,column:10605},end:{line:1,column:10624}},"297":{start:{line:1,column:10627},end:{line:1,column:10650}},"298":{start:{line:1,column:10651},end:{line:1,column:10675}},"299":{start:{line:1,column:10676},end:{line:1,column:10706}},"300":{start:{line:1,column:10727},end:{line:1,column:10807}},"301":{start:{line:1,column:10754},end:{line:1,column:10773}},"302":{start:{line:1,column:10774},end:{line:1,column:10806}},"303":{start:{line:1,column:10815},end:{line:1,column:10817}},"304":{start:{line:1,column:10833},end:{line:1,column:10855}},"305":{start:{line:1,column:10842},end:{line:1,column:10855}},"306":{start:{line:1,column:10861},end:{line:1,column:12921}},"307":{start:{line:1,column:10898},end:{line:1,column:10919}},"308":{start:{line:1,column:10919},end:{line:1,column:10925}},"309":{start:{line:1,column:10936},end:{line:1,column:10950}},"310":{start:{line:1,column:10950},end:{line:1,column:10956}},"311":{start:{line:1,column:10968},end:{line:1,column:10984}},"312":{start:{line:1,column:10984},end:{line:1,column:10990}},"313":{start:{line:1,column:10998},end:{line:1,column:11015}},"314":{start:{line:1,column:11015},end:{line:1,column:11021}},"315":{start:{line:1,column:11030},end:{line:1,column:11047}},"316":{start:{line:1,column:11047},end:{line:1,column:11053}},"317":{start:{line:1,column:11063},end:{line:1,column:11080}},"318":{start:{line:1,column:11080},end:{line:1,column:11086}},"319":{start:{line:1,column:11097},end:{line:1,column:11114}},"320":{start:{line:1,column:11114},end:{line:1,column:11120}},"321":{start:{line:1,column:11128},end:{line:1,column:11135}},"322":{start:{line:1,column:11135},end:{line:1,column:11141}},"323":{start:{line:1,column:11150},end:{line:1,column:11160}},"324":{start:{line:1,column:11160},end:{line:1,column:11166}},"325":{start:{line:1,column:11176},end:{line:1,column:11183}},"326":{start:{line:1,column:11183},end:{line:1,column:11189}},"327":{start:{line:1,column:11200},end:{line:1,column:11207}},"328":{start:{line:1,column:11207},end:{line:1,column:11213}},"329":{start:{line:1,column:11229},end:{line:1,column:11240}},"330":{start:{line:1,column:11240},end:{line:1,column:11246}},"331":{start:{line:1,column:11264},end:{line:1,column:11275}},"332":{start:{line:1,column:11275},end:{line:1,column:11281}},"333":{start:{line:1,column:11291},end:{line:1,column:11312}},"334":{start:{line:1,column:11312},end:{line:1,column:11318}},"335":{start:{line:1,column:11329},end:{line:1,column:11343}},"336":{start:{line:1,column:11343},end:{line:1,column:11349}},"337":{start:{line:1,column:11361},end:{line:1,column:11377}},"338":{start:{line:1,column:11377},end:{line:1,column:11383}},"339":{start:{line:1,column:11393},end:{line:1,column:11427}},"340":{start:{line:1,column:11427},end:{line:1,column:11433}},"341":{start:{line:1,column:11444},end:{line:1,column:11471}},"342":{start:{line:1,column:11471},end:{line:1,column:11477}},"343":{start:{line:1,column:11489},end:{line:1,column:11518}},"344":{start:{line:1,column:11518},end:{line:1,column:11524}},"345":{start:{line:1,column:11532},end:{line:1,column:11540}},"346":{start:{line:1,column:11540},end:{line:1,column:11546}},"347":{start:{line:1,column:11555},end:{line:1,column:11563}},"348":{start:{line:1,column:11563},end:{line:1,column:11569}},"349":{start:{line:1,column:11577},end:{line:1,column:11588}},"350":{start:{line:1,column:11588},end:{line:1,column:11594}},"351":{start:{line:1,column:11602},end:{line:1,column:11611}},"352":{start:{line:1,column:11611},end:{line:1,column:11617}},"353":{start:{line:1,column:11626},end:{line:1,column:11635}},"354":{start:{line:1,column:11635},end:{line:1,column:11641}},"355":{start:{line:1,column:11658},end:{line:1,column:11667}},"356":{start:{line:1,column:11667},end:{line:1,column:11673}},"357":{start:{line:1,column:11683},end:{line:1,column:11717}},"358":{start:{line:1,column:11717},end:{line:1,column:11723}},"359":{start:{line:1,column:11734},end:{line:1,column:11761}},"360":{start:{line:1,column:11761},end:{line:1,column:11767}},"361":{start:{line:1,column:11779},end:{line:1,column:11808}},"362":{start:{line:1,column:11808},end:{line:1,column:11814}},"363":{start:{line:1,column:11827},end:{line:1,column:11855}},"364":{start:{line:1,column:11855},end:{line:1,column:11861}},"365":{start:{line:1,column:11888},end:{line:1,column:11909}},"366":{start:{line:1,column:11909},end:{line:1,column:11915}},"367":{start:{line:1,column:11926},end:{line:1,column:11940}},"368":{start:{line:1,column:11940},end:{line:1,column:11946}},"369":{start:{line:1,column:11958},end:{line:1,column:11974}},"370":{start:{line:1,column:11974},end:{line:1,column:11980}},"371":{start:{line:1,column:11993},end:{line:1,column:12008}},"372":{start:{line:1,column:12008},end:{line:1,column:12014}},"373":{start:{line:1,column:12041},end:{line:1,column:12062}},"374":{start:{line:1,column:12062},end:{line:1,column:12068}},"375":{start:{line:1,column:12079},end:{line:1,column:12093}},"376":{start:{line:1,column:12093},end:{line:1,column:12099}},"377":{start:{line:1,column:12111},end:{line:1,column:12127}},"378":{start:{line:1,column:12127},end:{line:1,column:12133}},"379":{start:{line:1,column:12160},end:{line:1,column:12197}},"380":{start:{line:1,column:12197},end:{line:1,column:12203}},"381":{start:{line:1,column:12214},end:{line:1,column:12244}},"382":{start:{line:1,column:12244},end:{line:1,column:12250}},"383":{start:{line:1,column:12262},end:{line:1,column:12294}},"384":{start:{line:1,column:12294},end:{line:1,column:12300}},"385":{start:{line:1,column:12327},end:{line:1,column:12360}},"386":{start:{line:1,column:12360},end:{line:1,column:12366}},"387":{start:{line:1,column:12377},end:{line:1,column:12403}},"388":{start:{line:1,column:12403},end:{line:1,column:12409}},"389":{start:{line:1,column:12421},end:{line:1,column:12449}},"390":{start:{line:1,column:12449},end:{line:1,column:12455}},"391":{start:{line:1,column:12463},end:{line:1,column:12476}},"392":{start:{line:1,column:12476},end:{line:1,column:12482}},"393":{start:{line:1,column:12491},end:{line:1,column:12504}},"394":{start:{line:1,column:12504},end:{line:1,column:12510}},"395":{start:{line:1,column:12518},end:{line:1,column:12527}},"396":{start:{line:1,column:12527},end:{line:1,column:12533}},"397":{start:{line:1,column:12542},end:{line:1,column:12551}},"398":{start:{line:1,column:12551},end:{line:1,column:12557}},"399":{start:{line:1,column:12565},end:{line:1,column:12574}},"400":{start:{line:1,column:12574},end:{line:1,column:12580}},"401":{start:{line:1,column:12589},end:{line:1,column:12598}},"402":{start:{line:1,column:12598},end:{line:1,column:12604}},"403":{start:{line:1,column:12612},end:{line:1,column:12621}},"404":{start:{line:1,column:12621},end:{line:1,column:12627}},"405":{start:{line:1,column:12636},end:{line:1,column:12645}},"406":{start:{line:1,column:12645},end:{line:1,column:12651}},"407":{start:{line:1,column:12659},end:{line:1,column:12668}},"408":{start:{line:1,column:12668},end:{line:1,column:12674}},"409":{start:{line:1,column:12683},end:{line:1,column:12692}},"410":{start:{line:1,column:12692},end:{line:1,column:12698}},"411":{start:{line:1,column:12708},end:{line:1,column:12717}},"412":{start:{line:1,column:12717},end:{line:1,column:12723}},"413":{start:{line:1,column:12750},end:{line:1,column:12757}},"414":{start:{line:1,column:12757},end:{line:1,column:12763}},"415":{start:{line:1,column:12775},end:{line:1,column:12782}},"416":{start:{line:1,column:12782},end:{line:1,column:12788}},"417":{start:{line:1,column:12842},end:{line:1,column:12849}},"418":{start:{line:1,column:12849},end:{line:1,column:12855}},"419":{start:{line:1,column:12888},end:{line:1,column:12895}},"420":{start:{line:1,column:12895},end:{line:1,column:12901}},"421":{start:{line:1,column:12909},end:{line:1,column:12920}},"422":{start:{line:1,column:12921},end:{line:1,column:12937}},"423":{start:{line:1,column:12955},end:{line:1,column:12976}},"424":{start:{line:1,column:12982},end:{line:1,column:13024}},"425":{start:{line:1,column:13025},end:{line:1,column:13044}},"426":{start:{line:1,column:13062},end:{line:1,column:13125}},"427":{start:{line:1,column:13151},end:{line:1,column:13172}},"428":{start:{line:1,column:13175},end:{line:1,column:13182}},"429":{start:{line:1,column:13183},end:{line:1,column:13204}},"430":{start:{line:1,column:13220},end:{line:1,column:13238}},"431":{start:{line:1,column:13229},end:{line:1,column:13238}},"432":{start:{line:1,column:13238},end:{line:1,column:13290}},"433":{start:{line:1,column:13271},end:{line:1,column:13290}},"434":{start:{line:1,column:13290},end:{line:1,column:13517}},"435":{start:{line:1,column:13313},end:{line:1,column:13427}},"436":{start:{line:1,column:13385},end:{line:1,column:13408}},"437":{start:{line:1,column:13405},end:{line:1,column:13407}},"438":{start:{line:1,column:13409},end:{line:1,column:13426}},"439":{start:{line:1,column:13433},end:{line:1,column:13446}},"440":{start:{line:1,column:13447},end:{line:1,column:13481}},"441":{start:{line:1,column:13462},end:{line:1,column:13481}},"442":{start:{line:1,column:13487},end:{line:1,column:13516}},"443":{start:{line:1,column:13504},end:{line:1,column:13516}},"444":{start:{line:1,column:13523},end:{line:1,column:13534}},"445":{start:{line:1,column:13535},end:{line:1,column:13566}},"446":{start:{line:1,column:13545},end:{line:1,column:13566}},"447":{start:{line:1,column:13566},end:{line:1,column:13574}},"448":{start:{line:1,column:13596},end:{line:1,column:13607}},"449":{start:{line:1,column:13610},end:{line:1,column:13611}},"450":{start:{line:1,column:13614},end:{line:1,column:13615}},"451":{start:{line:1,column:13618},end:{line:1,column:13653}},"452":{start:{line:1,column:13656},end:{line:1,column:13685}},"453":{start:{line:1,column:13686},end:{line:1,column:13787}},"454":{start:{line:1,column:13793},end:{line:1,column:13810}},"455":{start:{line:1,column:13813},end:{line:1,column:13830}},"456":{start:{line:1,column:13833},end:{line:1,column:13848}},"457":{start:{line:1,column:13851},end:{line:1,column:13893}},"458":{start:{line:1,column:13894},end:{line:1,column:13920}},"459":{start:{line:1,column:13936},end:{line:1,column:13981}},"460":{start:{line:1,column:13989},end:{line:1,column:13994}},"461":{start:{line:1,column:13998},end:{line:1,column:14000}},"462":{start:{line:1,column:14004},end:{line:1,column:15252}},"463":{start:{line:1,column:14049},end:{line:1,column:14051}},"464":{start:{line:1,column:14070},end:{line:1,column:14077}},"465":{start:{line:1,column:14095},end:{line:1,column:14124}},"466":{start:{line:1,column:14138},end:{line:1,column:14187}},"467":{start:{line:1,column:14203},end:{line:1,column:14256}},"468":{start:{line:1,column:14269},end:{line:1,column:14326}},"469":{start:{line:1,column:14302},end:{line:1,column:14326}},"470":{start:{line:1,column:14332},end:{line:1,column:14345}},"471":{start:{line:1,column:14346},end:{line:1,column:14495}},"472":{start:{line:1,column:14384},end:{line:1,column:14423}},"473":{start:{line:1,column:14399},end:{line:1,column:14423}},"474":{start:{line:1,column:14428},end:{line:1,column:14495}},"475":{start:{line:1,column:14439},end:{line:1,column:14495}},"476":{start:{line:1,column:14467},end:{line:1,column:14495}},"477":{start:{line:1,column:14495},end:{line:1,column:14517}},"478":{start:{line:1,column:14542},end:{line:1,column:14562}},"479":{start:{line:1,column:14563},end:{line:1,column:14685}},"480":{start:{line:1,column:14704},end:{line:1,column:14891}},"481":{start:{line:1,column:14738},end:{line:1,column:14742}},"482":{start:{line:1,column:14745},end:{line:1,column:14749}},"483":{start:{line:1,column:14750},end:{line:1,column:14890}},"484":{start:{line:1,column:14910},end:{line:1,column:15067}},"485":{start:{line:1,column:14957},end:{line:1,column:15065}},"486":{start:{line:1,column:15085},end:{line:1,column:15127}},"487":{start:{line:1,column:15097},end:{line:1,column:15126}},"488":{start:{line:1,column:15145},end:{line:1,column:15239}},"489":{start:{line:1,column:15240},end:{line:1,column:15248}},"490":{start:{line:1,column:15259},end:{line:1,column:15515}},"491":{start:{line:1,column:15316},end:{line:1,column:15373}},"492":{start:{line:1,column:15386},end:{line:1,column:15407}},"493":{start:{line:1,column:15419},end:{line:1,column:15451}},"494":{start:{line:1,column:15463},end:{line:1,column:15486}},"495":{start:{line:1,column:15497},end:{line:1,column:15513}},"496":{start:{line:1,column:15519},end:{line:1,column:16840}},"497":{start:{line:1,column:15582},end:{line:1,column:15619}},"498":{start:{line:1,column:15640},end:{line:1,column:15657}},"499":{start:{line:1,column:15677},end:{line:1,column:15699}},"500":{start:{line:1,column:15709},end:{line:1,column:15713}},"501":{start:{line:1,column:15728},end:{line:1,column:15730}},"502":{start:{line:1,column:15739},end:{line:1,column:15743}},"503":{start:{line:1,column:15774},end:{line:1,column:15828}},"504":{start:{line:1,column:15850},end:{line:1,column:15871}},"505":{start:{line:1,column:15884},end:{line:1,column:16030}},"506":{start:{line:1,column:15907},end:{line:1,column:15929}},"507":{start:{line:1,column:15935},end:{line:1,column:15948}},"508":{start:{line:1,column:15949},end:{line:1,column:16029}},"509":{start:{line:1,column:16030},end:{line:1,column:16111}},"510":{start:{line:1,column:16053},end:{line:1,column:16085}},"511":{start:{line:1,column:16086},end:{line:1,column:16110}},"512":{start:{line:1,column:16135},end:{line:1,column:16154}},"513":{start:{line:1,column:16155},end:{line:1,column:16398}},"514":{start:{line:1,column:16184},end:{line:1,column:16395}},"515":{start:{line:1,column:16209},end:{line:1,column:16298}},"516":{start:{line:1,column:16303},end:{line:1,column:16395}},"517":{start:{line:1,column:16314},end:{line:1,column:16342}},"518":{start:{line:1,column:16347},end:{line:1,column:16395}},"519":{start:{line:1,column:16366},end:{line:1,column:16374}},"520":{start:{line:1,column:16375},end:{line:1,column:16394}},"521":{start:{line:1,column:16398},end:{line:1,column:16497}},"522":{start:{line:1,column:16408},end:{line:1,column:16409}},"523":{start:{line:1,column:16412},end:{line:1,column:16420}},"524":{start:{line:1,column:16436},end:{line:1,column:16452}},"525":{start:{line:1,column:16453},end:{line:1,column:16496}},"526":{start:{line:1,column:16497},end:{line:1,column:16562}},"527":{start:{line:1,column:16531},end:{line:1,column:16552}},"528":{start:{line:1,column:16553},end:{line:1,column:16560}},"529":{start:{line:1,column:16598},end:{line:1,column:16606}},"530":{start:{line:1,column:16624},end:{line:1,column:16672}},"531":{start:{line:1,column:16636},end:{line:1,column:16671}},"532":{start:{line:1,column:16690},end:{line:1,column:16827}},"533":{start:{line:1,column:16828},end:{line:1,column:16836}},"534":{start:{line:1,column:16858},end:{line:1,column:16884}},"535":{start:{line:1,column:16892},end:{line:1,column:18044}},"536":{start:{line:1,column:16930},end:{line:1,column:16935}},"537":{start:{line:1,column:16953},end:{line:1,column:16957}},"538":{start:{line:1,column:16975},end:{line:1,column:16979}},"539":{start:{line:1,column:16993},end:{line:1,column:16997}},"540":{start:{line:1,column:17011},end:{line:1,column:17015}},"541":{start:{line:1,column:17033},end:{line:1,column:17078}},"542":{start:{line:1,column:17091},end:{line:1,column:17154}},"543":{start:{line:1,column:17171},end:{line:1,column:17245}},"544":{start:{line:1,column:17262},end:{line:1,column:17336}},"545":{start:{line:1,column:17351},end:{line:1,column:17756}},"546":{start:{line:1,column:17846},end:{line:1,column:17854}},"547":{start:{line:1,column:17872},end:{line:1,column:17914}},"548":{start:{line:1,column:17884},end:{line:1,column:17913}},"549":{start:{line:1,column:17932},end:{line:1,column:18031}},"550":{start:{line:1,column:18032},end:{line:1,column:18040}},"551":{start:{line:1,column:18047},end:{line:1,column:18078}},"552":{start:{line:1,column:18063},end:{line:1,column:18067}},"553":{start:{line:1,column:18073},end:{line:1,column:18077}},"554":{start:{line:1,column:18096},end:{line:1,column:18144}},"555":{start:{line:1,column:18124},end:{line:1,column:18144}},"556":{start:{line:1,column:18162},end:{line:1,column:18183}},"557":{start:{line:1,column:18191},end:{line:1,column:18304}},"558":{start:{line:1,column:18223},end:{line:1,column:18267}},"559":{start:{line:1,column:18237},end:{line:1,column:18266}},"560":{start:{line:1,column:18279},end:{line:1,column:18302}},"561":{start:{line:1,column:18286},end:{line:1,column:18301}},"562":{start:{line:1,column:18308},end:{line:1,column:18437}},"563":{start:{line:1,column:18340},end:{line:1,column:18408}},"564":{start:{line:1,column:18357},end:{line:1,column:18363}},"565":{start:{line:1,column:18367},end:{line:1,column:18373}},"566":{start:{line:1,column:18393},end:{line:1,column:18406}},"567":{start:{line:1,column:18420},end:{line:1,column:18435}},"568":{start:{line:1,column:18441},end:{line:1,column:18447}},"569":{start:{line:1,column:18451},end:{line:1,column:18457}},"570":{start:{line:1,column:18461},end:{line:1,column:19540}},"571":{start:{line:1,column:18493},end:{line:1,column:18497}},"572":{start:{line:1,column:18524},end:{line:1,column:18526}},"573":{start:{line:1,column:18541},end:{line:1,column:18545}},"574":{start:{line:1,column:18551},end:{line:1,column:18555}},"575":{start:{line:1,column:18566},end:{line:1,column:18570}},"576":{start:{line:1,column:18595},end:{line:1,column:18600}},"577":{start:{line:1,column:18616},end:{line:1,column:18627}},"578":{start:{line:1,column:18642},end:{line:1,column:18692}},"579":{start:{line:1,column:18706},end:{line:1,column:18850}},"580":{start:{line:1,column:18721},end:{line:1,column:18825}},"581":{start:{line:1,column:18726},end:{line:1,column:18825}},"582":{start:{line:1,column:18730},end:{line:1,column:18782}},"583":{start:{line:1,column:18791},end:{line:1,column:18824}},"584":{start:{line:1,column:18825},end:{line:1,column:18849}},"585":{start:{line:1,column:18850},end:{line:1,column:18924}},"586":{start:{line:1,column:18939},end:{line:1,column:19112}},"587":{start:{line:1,column:19048},end:{line:1,column:19076}},"588":{start:{line:1,column:19080},end:{line:1,column:19111}},"589":{start:{line:1,column:19132},end:{line:1,column:19151}},"590":{start:{line:1,column:19141},end:{line:1,column:19151}},"591":{start:{line:1,column:19151},end:{line:1,column:19170}},"592":{start:{line:1,column:19160},end:{line:1,column:19170}},"593":{start:{line:1,column:19170},end:{line:1,column:19183}},"594":{start:{line:1,column:19195},end:{line:1,column:19299}},"595":{start:{line:1,column:19324},end:{line:1,column:19418}},"596":{start:{line:1,column:19436},end:{line:1,column:19475}},"597":{start:{line:1,column:19448},end:{line:1,column:19474}},"598":{start:{line:1,column:19494},end:{line:1,column:19527}},"599":{start:{line:1,column:19528},end:{line:1,column:19536}},"600":{start:{line:1,column:19548},end:{line:1,column:19560}},"601":{start:{line:1,column:19564},end:{line:1,column:19573}},"602":{start:{line:1,column:19577},end:{line:1,column:19586}},"603":{start:{line:1,column:19590},end:{line:1,column:20093}},"604":{start:{line:1,column:19661},end:{line:1,column:19719}},"605":{start:{line:1,column:19739},end:{line:1,column:19777}},"606":{start:{line:1,column:19765},end:{line:1,column:19777}},"607":{start:{line:1,column:19777},end:{line:1,column:19954}},"608":{start:{line:1,column:19787},end:{line:1,column:19825}},"609":{start:{line:1,column:19828},end:{line:1,column:19890}},"610":{start:{line:1,column:19891},end:{line:1,column:19922}},"611":{start:{line:1,column:19932},end:{line:1,column:19953}},"612":{start:{line:1,column:19972},end:{line:1,column:20029}},"613":{start:{line:1,column:19984},end:{line:1,column:20028}},"614":{start:{line:1,column:20048},end:{line:1,column:20080}},"615":{start:{line:1,column:20081},end:{line:1,column:20089}},"616":{start:{line:1,column:20101},end:{line:1,column:20228}},"617":{start:{line:1,column:20132},end:{line:1,column:20161}},"618":{start:{line:1,column:20144},end:{line:1,column:20160}},"619":{start:{line:1,column:20179},end:{line:1,column:20191}},"620":{start:{line:1,column:20209},end:{line:1,column:20215}},"621":{start:{line:1,column:20216},end:{line:1,column:20224}},"622":{start:{line:1,column:20236},end:{line:1,column:20245}},"623":{start:{line:1,column:20261},end:{line:1,column:20274}},"624":{start:{line:1,column:20282},end:{line:1,column:20389}},"625":{start:{line:1,column:20314},end:{line:1,column:20376}},"626":{start:{line:1,column:20355},end:{line:1,column:20374}},"627":{start:{line:1,column:20377},end:{line:1,column:20385}},"628":{start:{line:1,column:20393},end:{line:1,column:21072}},"629":{start:{line:1,column:20422},end:{line:1,column:20431}},"630":{start:{line:1,column:20426},end:{line:1,column:20431}},"631":{start:{line:1,column:20449},end:{line:1,column:20478}},"632":{start:{line:1,column:20492},end:{line:1,column:20540}},"633":{start:{line:1,column:20525},end:{line:1,column:20526}},"634":{start:{line:1,column:20561},end:{line:1,column:20608}},"635":{start:{line:1,column:20631},end:{line:1,column:20684}},"636":{start:{line:1,column:20711},end:{line:1,column:20730}},"637":{start:{line:1,column:20731},end:{line:1,column:20771}},"638":{start:{line:1,column:20803},end:{line:1,column:20878}},"639":{start:{line:1,column:20807},end:{line:1,column:20846}},"640":{start:{line:1,column:20853},end:{line:1,column:20877}},"641":{start:{line:1,column:20906},end:{line:1,column:20931}},"642":{start:{line:1,column:20934},end:{line:1,column:20964}},"643":{start:{line:1,column:20967},end:{line:1,column:20996}},"644":{start:{line:1,column:20999},end:{line:1,column:21012}},"645":{start:{line:1,column:21013},end:{line:1,column:21070}},"646":{start:{line:1,column:21096},end:{line:1,column:21142}},"647":{start:{line:1,column:21143},end:{line:1,column:21157}},"648":{start:{line:1,column:21148},end:{line:1,column:21157}},"649":{start:{line:1,column:21157},end:{line:1,column:21444}},"650":{start:{line:1,column:21253},end:{line:1,column:21303}},"651":{start:{line:1,column:21306},end:{line:1,column:21319}},"652":{start:{line:1,column:21320},end:{line:1,column:21443}},"653":{start:{line:1,column:21335},end:{line:1,column:21347}},"654":{start:{line:1,column:21348},end:{line:1,column:21428}},"655":{start:{line:1,column:21360},end:{line:1,column:21413}},"656":{start:{line:1,column:21414},end:{line:1,column:21427}},"657":{start:{line:1,column:21419},end:{line:1,column:21427}},"658":{start:{line:1,column:21428},end:{line:1,column:21442}},"659":{start:{line:1,column:21444},end:{line:1,column:21455}}},fnMap:{"0":{name:"U",decl:{start:{line:1,column:311},end:{line:1,column:312}},loc:{start:{line:1,column:317},end:{line:1,column:418}},line:1},"1":{name:"Se",decl:{start:{line:1,column:427},end:{line:1,column:429}},loc:{start:{line:1,column:432},end:{line:1,column:506}},line:1},"2":{name:"m",decl:{start:{line:1,column:515},end:{line:1,column:516}},loc:{start:{line:1,column:519},end:{line:1,column:551}},line:1},"3":{name:"(anonymous_3)",decl:{start:{line:1,column:558},end:{line:1,column:559}},loc:{start:{line:1,column:562},end:{line:1,column:727}},line:1},"4":{name:"(anonymous_4)",decl:{start:{line:1,column:571},end:{line:1,column:572}},loc:{start:{line:1,column:583},end:{line:1,column:604}},line:1},"5":{name:"(anonymous_5)",decl:{start:{line:1,column:621},end:{line:1,column:622}},loc:{start:{line:1,column:632},end:{line:1,column:650}},line:1},"6":{name:"(anonymous_6)",decl:{start:{line:1,column:688},end:{line:1,column:689}},loc:{start:{line:1,column:692},end:{line:1,column:697}},line:1},"7":{name:"(anonymous_7)",decl:{start:{line:1,column:747},end:{line:1,column:748}},loc:{start:{line:1,column:751},end:{line:1,column:1907}},line:1},"8":{name:"(anonymous_8)",decl:{start:{line:1,column:820},end:{line:1,column:821}},loc:{start:{line:1,column:836},end:{line:1,column:959}},line:1},"9":{name:"(anonymous_9)",decl:{start:{line:1,column:959},end:{line:1,column:960}},loc:{start:{line:1,column:972},end:{line:1,column:1042}},line:1},"10":{name:"(anonymous_10)",decl:{start:{line:1,column:1042},end:{line:1,column:1043}},loc:{start:{line:1,column:1055},end:{line:1,column:1162}},line:1},"11":{name:"(anonymous_11)",decl:{start:{line:1,column:1162},end:{line:1,column:1163}},loc:{start:{line:1,column:1175},end:{line:1,column:1198}},line:1},"12":{name:"(anonymous_12)",decl:{start:{line:1,column:1198},end:{line:1,column:1199}},loc:{start:{line:1,column:1219},end:{line:1,column:1247}},line:1},"13":{name:"(anonymous_13)",decl:{start:{line:1,column:1247},end:{line:1,column:1248}},loc:{start:{line:1,column:1257},end:{line:1,column:1384}},line:1},"14":{name:"(anonymous_14)",decl:{start:{line:1,column:1384},end:{line:1,column:1385}},loc:{start:{line:1,column:1402},end:{line:1,column:1481}},line:1},"15":{name:"(anonymous_15)",decl:{start:{line:1,column:1481},end:{line:1,column:1482}},loc:{start:{line:1,column:1502},end:{line:1,column:1584}},line:1},"16":{name:"(anonymous_16)",decl:{start:{line:1,column:1584},end:{line:1,column:1585}},loc:{start:{line:1,column:1593},end:{line:1,column:1627}},line:1},"17":{name:"(anonymous_17)",decl:{start:{line:1,column:1627},end:{line:1,column:1628}},loc:{start:{line:1,column:1633},end:{line:1,column:1664}},line:1},"18":{name:"(anonymous_18)",decl:{start:{line:1,column:1664},end:{line:1,column:1665}},loc:{start:{line:1,column:1674},end:{line:1,column:1716}},line:1},"19":{name:"(anonymous_19)",decl:{start:{line:1,column:1716},end:{line:1,column:1717}},loc:{start:{line:1,column:1730},end:{line:1,column:1769}},line:1},"20":{name:"(anonymous_20)",decl:{start:{line:1,column:1786},end:{line:1,column:1787}},loc:{start:{line:1,column:1797},end:{line:1,column:1828}},line:1},"21":{name:"(anonymous_21)",decl:{start:{line:1,column:1919},end:{line:1,column:1920}},loc:{start:{line:1,column:1923},end:{line:1,column:3825}},line:1},"22":{name:"(anonymous_22)",decl:{start:{line:1,column:2027},end:{line:1,column:2028}},loc:{start:{line:1,column:2041},end:{line:1,column:2252}},line:1},"23":{name:"(anonymous_23)",decl:{start:{line:1,column:2173},end:{line:1,column:2174}},loc:{start:{line:1,column:2176},end:{line:1,column:2250}},line:1},"24":{name:"(anonymous_24)",decl:{start:{line:1,column:2252},end:{line:1,column:2253}},loc:{start:{line:1,column:2265},end:{line:1,column:2337}},line:1},"25":{name:"(anonymous_25)",decl:{start:{line:1,column:2337},end:{line:1,column:2338}},loc:{start:{line:1,column:2347},end:{line:1,column:2402}},line:1},"26":{name:"(anonymous_26)",decl:{start:{line:1,column:2402},end:{line:1,column:2403}},loc:{start:{line:1,column:2412},end:{line:1,column:2454}},line:1},"27":{name:"(anonymous_27)",decl:{start:{line:1,column:2454},end:{line:1,column:2455}},loc:{start:{line:1,column:2482},end:{line:1,column:2526}},line:1},"28":{name:"(anonymous_28)",decl:{start:{line:1,column:2526},end:{line:1,column:2527}},loc:{start:{line:1,column:2538},end:{line:1,column:2593}},line:1},"29":{name:"(anonymous_29)",decl:{start:{line:1,column:2593},end:{line:1,column:2594}},loc:{start:{line:1,column:2614},end:{line:1,column:2692}},line:1},"30":{name:"(anonymous_30)",decl:{start:{line:1,column:2692},end:{line:1,column:2693}},loc:{start:{line:1,column:2709},end:{line:1,column:2819}},line:1},"31":{name:"(anonymous_31)",decl:{start:{line:1,column:2819},end:{line:1,column:2820}},loc:{start:{line:1,column:2846},end:{line:1,column:2959}},line:1},"32":{name:"(anonymous_32)",decl:{start:{line:1,column:2959},end:{line:1,column:2960}},loc:{start:{line:1,column:2968},end:{line:1,column:3002}},line:1},"33":{name:"(anonymous_33)",decl:{start:{line:1,column:3002},end:{line:1,column:3003}},loc:{start:{line:1,column:3008},end:{line:1,column:3039}},line:1},"34":{name:"(anonymous_34)",decl:{start:{line:1,column:3039},end:{line:1,column:3040}},loc:{start:{line:1,column:3053},end:{line:1,column:3092}},line:1},"35":{name:"(anonymous_35)",decl:{start:{line:1,column:3092},end:{line:1,column:3093}},loc:{start:{line:1,column:3106},end:{line:1,column:3444}},line:1},"36":{name:"(anonymous_36)",decl:{start:{line:1,column:3192},end:{line:1,column:3193}},loc:{start:{line:1,column:3195},end:{line:1,column:3242}},line:1},"37":{name:"(anonymous_37)",decl:{start:{line:1,column:3244},end:{line:1,column:3245}},loc:{start:{line:1,column:3248},end:{line:1,column:3443}},line:1},"38":{name:"(anonymous_38)",decl:{start:{line:1,column:3444},end:{line:1,column:3445}},loc:{start:{line:1,column:3477},end:{line:1,column:3522}},line:1},"39":{name:"(anonymous_39)",decl:{start:{line:1,column:3511},end:{line:1,column:3512}},loc:{start:{line:1,column:3514},end:{line:1,column:3520}},line:1},"40":{name:"(anonymous_40)",decl:{start:{line:1,column:3522},end:{line:1,column:3523}},loc:{start:{line:1,column:3538},end:{line:1,column:3615}},line:1},"41":{name:"(anonymous_41)",decl:{start:{line:1,column:3714},end:{line:1,column:3715}},loc:{start:{line:1,column:3725},end:{line:1,column:3749}},line:1},"42":{name:"(anonymous_42)",decl:{start:{line:1,column:3787},end:{line:1,column:3788}},loc:{start:{line:1,column:3791},end:{line:1,column:3795}},line:1},"43":{name:"Ye",decl:{start:{line:1,column:3838},end:{line:1,column:3840}},loc:{start:{line:1,column:3842},end:{line:1,column:3863}},line:1},"44":{name:"Ke",decl:{start:{line:1,column:3872},end:{line:1,column:3874}},loc:{start:{line:1,column:3879},end:{line:1,column:3993}},line:1},"45":{name:"_e",decl:{start:{line:1,column:4002},end:{line:1,column:4004}},loc:{start:{line:1,column:4007},end:{line:1,column:4045}},line:1},"46":{name:"Xe",decl:{start:{line:1,column:4054},end:{line:1,column:4056}},loc:{start:{line:1,column:4059},end:{line:1,column:4148}},line:1},"47":{name:"(anonymous_47)",decl:{start:{line:1,column:4156},end:{line:1,column:4157}},loc:{start:{line:1,column:4160},end:{line:1,column:5279}},line:1},"48":{name:"(anonymous_48)",decl:{start:{line:1,column:4232},end:{line:1,column:4233}},loc:{start:{line:1,column:4248},end:{line:1,column:4310}},line:1},"49":{name:"(anonymous_49)",decl:{start:{line:1,column:4310},end:{line:1,column:4311}},loc:{start:{line:1,column:4323},end:{line:1,column:4393}},line:1},"50":{name:"(anonymous_50)",decl:{start:{line:1,column:4393},end:{line:1,column:4394}},loc:{start:{line:1,column:4406},end:{line:1,column:4513}},line:1},"51":{name:"(anonymous_51)",decl:{start:{line:1,column:4513},end:{line:1,column:4514}},loc:{start:{line:1,column:4526},end:{line:1,column:4549}},line:1},"52":{name:"(anonymous_52)",decl:{start:{line:1,column:4549},end:{line:1,column:4550}},loc:{start:{line:1,column:4559},end:{line:1,column:4634}},line:1},"53":{name:"(anonymous_53)",decl:{start:{line:1,column:4634},end:{line:1,column:4635}},loc:{start:{line:1,column:4655},end:{line:1,column:4708}},line:1},"54":{name:"(anonymous_54)",decl:{start:{line:1,column:4708},end:{line:1,column:4709}},loc:{start:{line:1,column:4726},end:{line:1,column:4838}},line:1},"55":{name:"(anonymous_55)",decl:{start:{line:1,column:4838},end:{line:1,column:4839}},loc:{start:{line:1,column:4859},end:{line:1,column:4974}},line:1},"56":{name:"(anonymous_56)",decl:{start:{line:1,column:4974},end:{line:1,column:4975}},loc:{start:{line:1,column:4983},end:{line:1,column:5017}},line:1},"57":{name:"(anonymous_57)",decl:{start:{line:1,column:5017},end:{line:1,column:5018}},loc:{start:{line:1,column:5023},end:{line:1,column:5054}},line:1},"58":{name:"(anonymous_58)",decl:{start:{line:1,column:5054},end:{line:1,column:5055}},loc:{start:{line:1,column:5064},end:{line:1,column:5106}},line:1},"59":{name:"(anonymous_59)",decl:{start:{line:1,column:5106},end:{line:1,column:5107}},loc:{start:{line:1,column:5120},end:{line:1,column:5159}},line:1},"60":{name:"(anonymous_60)",decl:{start:{line:1,column:5176},end:{line:1,column:5177}},loc:{start:{line:1,column:5187},end:{line:1,column:5218}},line:1},"61":{name:"(anonymous_61)",decl:{start:{line:1,column:5290},end:{line:1,column:5291}},loc:{start:{line:1,column:5301},end:{line:1,column:5365}},line:1},"62":{name:"(anonymous_62)",decl:{start:{line:1,column:5377},end:{line:1,column:5378}},loc:{start:{line:1,column:5388},end:{line:1,column:5494}},line:1},"63":{name:"(anonymous_63)",decl:{start:{line:1,column:5506},end:{line:1,column:5507}},loc:{start:{line:1,column:5517},end:{line:1,column:5609}},line:1},"64":{name:"Re",decl:{start:{line:1,column:5814},end:{line:1,column:5816}},loc:{start:{line:1,column:5819},end:{line:1,column:5844}},line:1},"65":{name:"Oe",decl:{start:{line:1,column:5853},end:{line:1,column:5855}},loc:{start:{line:1,column:5862},end:{line:1,column:5949}},line:1},"66":{name:"Pe",decl:{start:{line:1,column:5958},end:{line:1,column:5960}},loc:{start:{line:1,column:5967},end:{line:1,column:6042}},line:1},"67":{name:"Be",decl:{start:{line:1,column:6051},end:{line:1,column:6053}},loc:{start:{line:1,column:6060},end:{line:1,column:6139}},line:1},"68":{name:"Ne",decl:{start:{line:1,column:6148},end:{line:1,column:6150}},loc:{start:{line:1,column:6155},end:{line:1,column:6189}},line:1},"69":{name:"O",decl:{start:{line:1,column:6198},end:{line:1,column:6199}},loc:{start:{line:1,column:6204},end:{line:1,column:6244}},line:1},"70":{name:"P",decl:{start:{line:1,column:6253},end:{line:1,column:6254}},loc:{start:{line:1,column:6259},end:{line:1,column:6299}},line:1},"71":{name:"B",decl:{start:{line:1,column:6308},end:{line:1,column:6309}},loc:{start:{line:1,column:6314},end:{line:1,column:6358}},line:1},"72":{name:"N",decl:{start:{line:1,column:6367},end:{line:1,column:6368}},loc:{start:{line:1,column:6373},end:{line:1,column:6555}},line:1},"73":{name:"ke",decl:{start:{line:1,column:6564},end:{line:1,column:6566}},loc:{start:{line:1,column:6569},end:{line:1,column:6610}},line:1},"74":{name:"xe",decl:{start:{line:1,column:6619},end:{line:1,column:6621}},loc:{start:{line:1,column:6624},end:{line:1,column:6726}},line:1},"75":{name:"(anonymous_75)",decl:{start:{line:1,column:6677},end:{line:1,column:6678}},loc:{start:{line:1,column:6680},end:{line:1,column:6724}},line:1},"76":{name:"$e",decl:{start:{line:1,column:6735},end:{line:1,column:6737}},loc:{start:{line:1,column:6744},end:{line:1,column:6837}},line:1},"77":{name:"p",decl:{start:{line:1,column:6846},end:{line:1,column:6847}},loc:{start:{line:1,column:6852},end:{line:1,column:6926}},line:1},"78":{name:"ae",decl:{start:{line:1,column:6935},end:{line:1,column:6937}},loc:{start:{line:1,column:6940},end:{line:1,column:6991}},line:1},"79":{name:"Ue",decl:{start:{line:1,column:7331},end:{line:1,column:7333}},loc:{start:{line:1,column:7342},end:{line:1,column:7649}},line:1},"80":{name:"(anonymous_80)",decl:{start:{line:1,column:7558},end:{line:1,column:7559}},loc:{start:{line:1,column:7561},end:{line:1,column:7645}},line:1},"81":{name:"Z",decl:{start:{line:1,column:7658},end:{line:1,column:7659}},loc:{start:{line:1,column:7666},end:{line:1,column:7733}},line:1},"82":{name:"A",decl:{start:{line:1,column:7742},end:{line:1,column:7743}},loc:{start:{line:1,column:7748},end:{line:1,column:8464}},line:1},"83":{name:"V",decl:{start:{line:1,column:8473},end:{line:1,column:8474}},loc:{start:{line:1,column:8479},end:{line:1,column:8566}},line:1},"84":{name:"(anonymous_84)",decl:{start:{line:1,column:8517},end:{line:1,column:8518}},loc:{start:{line:1,column:8530},end:{line:1,column:8561}},line:1},"85":{name:"C",decl:{start:{line:1,column:8575},end:{line:1,column:8576}},loc:{start:{line:1,column:8591},end:{line:1,column:8718}},line:1},"86":{name:"tt",decl:{start:{line:1,column:8727},end:{line:1,column:8729}},loc:{start:{line:1,column:8734},end:{line:1,column:8764}},line:1},"87":{name:"d",decl:{start:{line:1,column:8773},end:{line:1,column:8774}},loc:{start:{line:1,column:8793},end:{line:1,column:8954}},line:1},"88":{name:"(anonymous_88)",decl:{start:{line:1,column:8801},end:{line:1,column:8802}},loc:{start:{line:1,column:8814},end:{line:1,column:8953}},line:1},"89":{name:"nt",decl:{start:{line:1,column:8963},end:{line:1,column:8965}},loc:{start:{line:1,column:8970},end:{line:1,column:9238}},line:1},"90":{name:"c",decl:{start:{line:1,column:9247},end:{line:1,column:9248}},loc:{start:{line:1,column:9269},end:{line:1,column:9315}},line:1},"91":{name:"(anonymous_91)",decl:{start:{line:1,column:9277},end:{line:1,column:9278}},loc:{start:{line:1,column:9290},end:{line:1,column:9314}},line:1},"92":{name:"it",decl:{start:{line:1,column:9324},end:{line:1,column:9326}},loc:{start:{line:1,column:9339},end:{line:1,column:9865}},line:1},"93":{name:"(anonymous_93)",decl:{start:{line:1,column:9511},end:{line:1,column:9512}},loc:{start:{line:1,column:9514},end:{line:1,column:9730}},line:1},"94":{name:"G",decl:{start:{line:1,column:9874},end:{line:1,column:9875}},loc:{start:{line:1,column:9878},end:{line:1,column:10253}},line:1},"95":{name:"(anonymous_95)",decl:{start:{line:1,column:9886},end:{line:1,column:9887}},loc:{start:{line:1,column:9901},end:{line:1,column:10252}},line:1},"96":{name:"st",decl:{start:{line:1,column:10275},end:{line:1,column:10277}},loc:{start:{line:1,column:10280},end:{line:1,column:10337}},line:1},"97":{name:"je",decl:{start:{line:1,column:10346},end:{line:1,column:10348}},loc:{start:{line:1,column:10351},end:{line:1,column:10437}},line:1},"98":{name:"ue",decl:{start:{line:1,column:10446},end:{line:1,column:10448}},loc:{start:{line:1,column:10456},end:{line:1,column:10708}},line:1},"99":{name:"(anonymous_99)",decl:{start:{line:1,column:10464},end:{line:1,column:10465}},loc:{start:{line:1,column:10477},end:{line:1,column:10707}},line:1},"100":{name:"H",decl:{start:{line:1,column:10717},end:{line:1,column:10718}},loc:{start:{line:1,column:10726},end:{line:1,column:10808}},line:1},"101":{name:"(anonymous_101)",decl:{start:{line:1,column:10734},end:{line:1,column:10735}},loc:{start:{line:1,column:10747},end:{line:1,column:10807}},line:1},"102":{name:"ot",decl:{start:{line:1,column:10827},end:{line:1,column:10829}},loc:{start:{line:1,column:10832},end:{line:1,column:12938}},line:1},"103":{name:"ze",decl:{start:{line:1,column:12947},end:{line:1,column:12949}},loc:{start:{line:1,column:12954},end:{line:1,column:13045}},line:1},"104":{name:"at",decl:{start:{line:1,column:13054},end:{line:1,column:13056}},loc:{start:{line:1,column:13061},end:{line:1,column:13126}},line:1},"105":{name:"ut",decl:{start:{line:1,column:13135},end:{line:1,column:13137}},loc:{start:{line:1,column:13144},end:{line:1,column:13205}},line:1},"106":{name:"ct",decl:{start:{line:1,column:13214},end:{line:1,column:13216}},loc:{start:{line:1,column:13219},end:{line:1,column:13575}},line:1},"107":{name:"(anonymous_107)",decl:{start:{line:1,column:13402},end:{line:1,column:13403}},loc:{start:{line:1,column:13405},end:{line:1,column:13407}},line:1},"108":{name:"dt",decl:{start:{line:1,column:13584},end:{line:1,column:13586}},loc:{start:{line:1,column:13589},end:{line:1,column:13921}},line:1},"109":{name:"Ie",decl:{start:{line:1,column:13930},end:{line:1,column:13932}},loc:{start:{line:1,column:13935},end:{line:1,column:13982}},line:1},"110":{name:"(anonymous_110)",decl:{start:{line:1,column:14005},end:{line:1,column:14006}},loc:{start:{line:1,column:14009},end:{line:1,column:15249}},line:1},"111":{name:"(anonymous_111)",decl:{start:{line:1,column:14078},end:{line:1,column:14079}},loc:{start:{line:1,column:14094},end:{line:1,column:14125}},line:1},"112":{name:"(anonymous_112)",decl:{start:{line:1,column:14125},end:{line:1,column:14126}},loc:{start:{line:1,column:14137},end:{line:1,column:14188}},line:1},"113":{name:"(anonymous_113)",decl:{start:{line:1,column:14188},end:{line:1,column:14189}},loc:{start:{line:1,column:14202},end:{line:1,column:14257}},line:1},"114":{name:"(anonymous_114)",decl:{start:{line:1,column:14257},end:{line:1,column:14258}},loc:{start:{line:1,column:14268},end:{line:1,column:14518}},line:1},"115":{name:"(anonymous_115)",decl:{start:{line:1,column:14518},end:{line:1,column:14519}},loc:{start:{line:1,column:14535},end:{line:1,column:14686}},line:1},"116":{name:"(anonymous_116)",decl:{start:{line:1,column:14686},end:{line:1,column:14687}},loc:{start:{line:1,column:14703},end:{line:1,column:14892}},line:1},"117":{name:"(anonymous_117)",decl:{start:{line:1,column:14892},end:{line:1,column:14893}},loc:{start:{line:1,column:14909},end:{line:1,column:15068}},line:1},"118":{name:"(anonymous_118)",decl:{start:{line:1,column:14953},end:{line:1,column:14954}},loc:{start:{line:1,column:14956},end:{line:1,column:15066}},line:1},"119":{name:"(anonymous_119)",decl:{start:{line:1,column:15085},end:{line:1,column:15086}},loc:{start:{line:1,column:15096},end:{line:1,column:15127}},line:1},"120":{name:"(anonymous_120)",decl:{start:{line:1,column:15295},end:{line:1,column:15296}},loc:{start:{line:1,column:15315},end:{line:1,column:15374}},line:1},"121":{name:"(anonymous_121)",decl:{start:{line:1,column:15374},end:{line:1,column:15375}},loc:{start:{line:1,column:15385},end:{line:1,column:15408}},line:1},"122":{name:"(anonymous_122)",decl:{start:{line:1,column:15408},end:{line:1,column:15409}},loc:{start:{line:1,column:15418},end:{line:1,column:15452}},line:1},"123":{name:"(anonymous_123)",decl:{start:{line:1,column:15452},end:{line:1,column:15453}},loc:{start:{line:1,column:15462},end:{line:1,column:15487}},line:1},"124":{name:"(anonymous_124)",decl:{start:{line:1,column:15487},end:{line:1,column:15488}},loc:{start:{line:1,column:15496},end:{line:1,column:15514}},line:1},"125":{name:"(anonymous_125)",decl:{start:{line:1,column:15520},end:{line:1,column:15521}},loc:{start:{line:1,column:15524},end:{line:1,column:16837}},line:1},"126":{name:"(anonymous_126)",decl:{start:{line:1,column:15567},end:{line:1,column:15568}},loc:{start:{line:1,column:15581},end:{line:1,column:15620}},line:1},"127":{name:"(anonymous_127)",decl:{start:{line:1,column:15620},end:{line:1,column:15621}},loc:{start:{line:1,column:15639},end:{line:1,column:15658}},line:1},"128":{name:"(anonymous_128)",decl:{start:{line:1,column:15658},end:{line:1,column:15659}},loc:{start:{line:1,column:15676},end:{line:1,column:15700}},line:1},"129":{name:"(anonymous_129)",decl:{start:{line:1,column:15755},end:{line:1,column:15756}},loc:{start:{line:1,column:15773},end:{line:1,column:15829}},line:1},"130":{name:"(anonymous_130)",decl:{start:{line:1,column:15829},end:{line:1,column:15830}},loc:{start:{line:1,column:15849},end:{line:1,column:15872}},line:1},"131":{name:"(anonymous_131)",decl:{start:{line:1,column:15872},end:{line:1,column:15873}},loc:{start:{line:1,column:15883},end:{line:1,column:16112}},line:1},"132":{name:"(anonymous_132)",decl:{start:{line:1,column:16112},end:{line:1,column:16113}},loc:{start:{line:1,column:16128},end:{line:1,column:16563}},line:1},"133":{name:"(anonymous_133)",decl:{start:{line:1,column:16174},end:{line:1,column:16175}},loc:{start:{line:1,column:16183},end:{line:1,column:16396}},line:1},"134":{name:"(anonymous_134)",decl:{start:{line:1,column:16521},end:{line:1,column:16522}},loc:{start:{line:1,column:16524},end:{line:1,column:16561}},line:1},"135":{name:"(anonymous_135)",decl:{start:{line:1,column:16563},end:{line:1,column:16564}},loc:{start:{line:1,column:16597},end:{line:1,column:16607}},line:1},"136":{name:"(anonymous_136)",decl:{start:{line:1,column:16624},end:{line:1,column:16625}},loc:{start:{line:1,column:16635},end:{line:1,column:16672}},line:1},"137":{name:"Me",decl:{start:{line:1,column:16850},end:{line:1,column:16852}},loc:{start:{line:1,column:16857},end:{line:1,column:16885}},line:1},"138":{name:"(anonymous_138)",decl:{start:{line:1,column:16893},end:{line:1,column:16894}},loc:{start:{line:1,column:16897},end:{line:1,column:18041}},line:1},"139":{name:"(anonymous_139)",decl:{start:{line:1,column:17016},end:{line:1,column:17017}},loc:{start:{line:1,column:17032},end:{line:1,column:17079}},line:1},"140":{name:"(anonymous_140)",decl:{start:{line:1,column:17079},end:{line:1,column:17080}},loc:{start:{line:1,column:17090},end:{line:1,column:17155}},line:1},"141":{name:"(anonymous_141)",decl:{start:{line:1,column:17155},end:{line:1,column:17156}},loc:{start:{line:1,column:17170},end:{line:1,column:17246}},line:1},"142":{name:"(anonymous_142)",decl:{start:{line:1,column:17246},end:{line:1,column:17247}},loc:{start:{line:1,column:17261},end:{line:1,column:17337}},line:1},"143":{name:"(anonymous_143)",decl:{start:{line:1,column:17337},end:{line:1,column:17338}},loc:{start:{line:1,column:17350},end:{line:1,column:17757}},line:1},"144":{name:"(anonymous_144)",decl:{start:{line:1,column:17811},end:{line:1,column:17812}},loc:{start:{line:1,column:17845},end:{line:1,column:17855}},line:1},"145":{name:"(anonymous_145)",decl:{start:{line:1,column:17872},end:{line:1,column:17873}},loc:{start:{line:1,column:17883},end:{line:1,column:17914}},line:1},"146":{name:"Te",decl:{start:{line:1,column:18088},end:{line:1,column:18090}},loc:{start:{line:1,column:18095},end:{line:1,column:18145}},line:1},"147":{name:"Ge",decl:{start:{line:1,column:18154},end:{line:1,column:18156}},loc:{start:{line:1,column:18161},end:{line:1,column:18184}},line:1},"148":{name:"(anonymous_148)",decl:{start:{line:1,column:18197},end:{line:1,column:18198}},loc:{start:{line:1,column:18222},end:{line:1,column:18268}},line:1},"149":{name:"(anonymous_149)",decl:{start:{line:1,column:18233},end:{line:1,column:18234}},loc:{start:{line:1,column:18237},end:{line:1,column:18266}},line:1},"150":{name:"(anonymous_150)",decl:{start:{line:1,column:18268},end:{line:1,column:18269}},loc:{start:{line:1,column:18278},end:{line:1,column:18303}},line:1},"151":{name:"(anonymous_151)",decl:{start:{line:1,column:18282},end:{line:1,column:18283}},loc:{start:{line:1,column:18286},end:{line:1,column:18301}},line:1},"152":{name:"(anonymous_152)",decl:{start:{line:1,column:18314},end:{line:1,column:18315}},loc:{start:{line:1,column:18339},end:{line:1,column:18409}},line:1},"153":{name:"(anonymous_153)",decl:{start:{line:1,column:18354},end:{line:1,column:18355}},loc:{start:{line:1,column:18357},end:{line:1,column:18363}},line:1},"154":{name:"(anonymous_154)",decl:{start:{line:1,column:18364},end:{line:1,column:18365}},loc:{start:{line:1,column:18367},end:{line:1,column:18373}},line:1},"155":{name:"(anonymous_155)",decl:{start:{line:1,column:18388},end:{line:1,column:18389}},loc:{start:{line:1,column:18392},end:{line:1,column:18407}},line:1},"156":{name:"(anonymous_156)",decl:{start:{line:1,column:18409},end:{line:1,column:18410}},loc:{start:{line:1,column:18419},end:{line:1,column:18436}},line:1},"157":{name:"(anonymous_157)",decl:{start:{line:1,column:18462},end:{line:1,column:18463}},loc:{start:{line:1,column:18466},end:{line:1,column:19537}},line:1},"158":{name:"(anonymous_158)",decl:{start:{line:1,column:18601},end:{line:1,column:18602}},loc:{start:{line:1,column:18615},end:{line:1,column:18628}},line:1},"159":{name:"(anonymous_159)",decl:{start:{line:1,column:18628},end:{line:1,column:18629}},loc:{start:{line:1,column:18641},end:{line:1,column:18693}},line:1},"160":{name:"(anonymous_160)",decl:{start:{line:1,column:18693},end:{line:1,column:18694}},loc:{start:{line:1,column:18705},end:{line:1,column:18925}},line:1},"161":{name:"(anonymous_161)",decl:{start:{line:1,column:18925},end:{line:1,column:18926}},loc:{start:{line:1,column:18938},end:{line:1,column:19113}},line:1},"162":{name:"(anonymous_162)",decl:{start:{line:1,column:19045},end:{line:1,column:19046}},loc:{start:{line:1,column:19048},end:{line:1,column:19076}},line:1},"163":{name:"(anonymous_163)",decl:{start:{line:1,column:19077},end:{line:1,column:19078}},loc:{start:{line:1,column:19080},end:{line:1,column:19111}},line:1},"164":{name:"(anonymous_164)",decl:{start:{line:1,column:19113},end:{line:1,column:19114}},loc:{start:{line:1,column:19131},end:{line:1,column:19184}},line:1},"165":{name:"(anonymous_165)",decl:{start:{line:1,column:19184},end:{line:1,column:19185}},loc:{start:{line:1,column:19194},end:{line:1,column:19300}},line:1},"166":{name:"(anonymous_166)",decl:{start:{line:1,column:19300},end:{line:1,column:19301}},loc:{start:{line:1,column:19323},end:{line:1,column:19419}},line:1},"167":{name:"(anonymous_167)",decl:{start:{line:1,column:19436},end:{line:1,column:19437}},loc:{start:{line:1,column:19447},end:{line:1,column:19475}},line:1},"168":{name:"(anonymous_168)",decl:{start:{line:1,column:19591},end:{line:1,column:19592}},loc:{start:{line:1,column:19595},end:{line:1,column:20090}},line:1},"169":{name:"(anonymous_169)",decl:{start:{line:1,column:19642},end:{line:1,column:19643}},loc:{start:{line:1,column:19660},end:{line:1,column:19720}},line:1},"170":{name:"(anonymous_170)",decl:{start:{line:1,column:19720},end:{line:1,column:19721}},loc:{start:{line:1,column:19738},end:{line:1,column:19955}},line:1},"171":{name:"(anonymous_171)",decl:{start:{line:1,column:19972},end:{line:1,column:19973}},loc:{start:{line:1,column:19983},end:{line:1,column:20029}},line:1},"172":{name:"(anonymous_172)",decl:{start:{line:1,column:20102},end:{line:1,column:20103}},loc:{start:{line:1,column:20106},end:{line:1,column:20225}},line:1},"173":{name:"(anonymous_173)",decl:{start:{line:1,column:20132},end:{line:1,column:20133}},loc:{start:{line:1,column:20143},end:{line:1,column:20161}},line:1},"174":{name:"ui",decl:{start:{line:1,column:20255},end:{line:1,column:20257}},loc:{start:{line:1,column:20260},end:{line:1,column:20275}},line:1},"175":{name:"(anonymous_175)",decl:{start:{line:1,column:20283},end:{line:1,column:20284}},loc:{start:{line:1,column:20287},end:{line:1,column:20386}},line:1},"176":{name:"(anonymous_176)",decl:{start:{line:1,column:20351},end:{line:1,column:20352}},loc:{start:{line:1,column:20355},end:{line:1,column:20374}},line:1},"177":{name:"(anonymous_177)",decl:{start:{line:1,column:20422},end:{line:1,column:20423}},loc:{start:{line:1,column:20426},end:{line:1,column:20431}},line:1},"178":{name:"(anonymous_178)",decl:{start:{line:1,column:20432},end:{line:1,column:20433}},loc:{start:{line:1,column:20448},end:{line:1,column:20479}},line:1},"179":{name:"(anonymous_179)",decl:{start:{line:1,column:20479},end:{line:1,column:20480}},loc:{start:{line:1,column:20491},end:{line:1,column:20541}},line:1},"180":{name:"(anonymous_180)",decl:{start:{line:1,column:20521},end:{line:1,column:20522}},loc:{start:{line:1,column:20525},end:{line:1,column:20526}},line:1},"181":{name:"(anonymous_181)",decl:{start:{line:1,column:20541},end:{line:1,column:20542}},loc:{start:{line:1,column:20560},end:{line:1,column:20609}},line:1},"182":{name:"(anonymous_182)",decl:{start:{line:1,column:20609},end:{line:1,column:20610}},loc:{start:{line:1,column:20630},end:{line:1,column:20685}},line:1},"183":{name:"(anonymous_183)",decl:{start:{line:1,column:20685},end:{line:1,column:20686}},loc:{start:{line:1,column:20704},end:{line:1,column:20772}},line:1},"184":{name:"(anonymous_184)",decl:{start:{line:1,column:20772},end:{line:1,column:20773}},loc:{start:{line:1,column:20802},end:{line:1,column:20879}},line:1},"185":{name:"(anonymous_185)",decl:{start:{line:1,column:20879},end:{line:1,column:20880}},loc:{start:{line:1,column:20899},end:{line:1,column:21071}},line:1},"186":{name:"Et",decl:{start:{line:1,column:21082},end:{line:1,column:21084}},loc:{start:{line:1,column:21089},end:{line:1,column:21456}},line:1}},branchMap:{"0":{loc:{start:{line:1,column:325},end:{line:1,column:417}},type:"cond-expr",locations:[{start:{line:1,column:327},end:{line:1,column:415}},{start:{line:1,column:416},end:{line:1,column:417}}],line:1},"1":{loc:{start:{line:1,column:327},end:{line:1,column:415}},type:"cond-expr",locations:[{start:{line:1,column:329},end:{line:1,column:413}},{start:{line:1,column:414},end:{line:1,column:415}}],line:1},"2":{loc:{start:{line:1,column:329},end:{line:1,column:413}},type:"cond-expr",locations:[{start:{line:1,column:345},end:{line:1,column:379}},{start:{line:1,column:380},end:{line:1,column:413}}],line:1},"3":{loc:{start:{line:1,column:345},end:{line:1,column:379}},type:"cond-expr",locations:[{start:{line:1,column:363},end:{line:1,column:375}},{start:{line:1,column:376},end:{line:1,column:379}}],line:1},"4":{loc:{start:{line:1,column:380},end:{line:1,column:413}},type:"cond-expr",locations:[{start:{line:1,column:398},end:{line:1,column:401}},{start:{line:1,column:402},end:{line:1,column:413}}],line:1},"5":{loc:{start:{line:1,column:465},end:{line:1,column:505}},type:"cond-expr",locations:[{start:{line:1,column:478},end:{line:1,column:503}},{start:{line:1,column:504},end:{line:1,column:505}}],line:1},"6":{loc:{start:{line:1,column:527},end:{line:1,column:550}},type:"cond-expr",locations:[{start:{line:1,column:541},end:{line:1,column:548}},{start:{line:1,column:549},end:{line:1,column:550}}],line:1},"7":{loc:{start:{line:1,column:527},end:{line:1,column:540}},type:"binary-expr",locations:[{start:{line:1,column:527},end:{line:1,column:528}},{start:{line:1,column:530},end:{line:1,column:540}}],line:1},"8":{loc:{start:{line:1,column:644},end:{line:1,column:648}},type:"binary-expr",locations:[{start:{line:1,column:644},end:{line:1,column:645}},{start:{line:1,column:647},end:{line:1,column:648}}],line:1},"9":{loc:{start:{line:1,column:885},end:{line:1,column:958}},type:"binary-expr",locations:[{start:{line:1,column:885},end:{line:1,column:886}},{start:{line:1,column:888},end:{line:1,column:931}},{start:{line:1,column:933},end:{line:1,column:954}},{start:{line:1,column:956},end:{line:1,column:958}}],line:1},"10":{loc:{start:{line:1,column:1252},end:{line:1,column:1256}},type:"default-arg",locations:[{start:{line:1,column:1254},end:{line:1,column:1256}}],line:1},"11":{loc:{start:{line:1,column:1366},end:{line:1,column:1383}},type:"cond-expr",locations:[{start:{line:1,column:1371},end:{line:1,column:1381}},{start:{line:1,column:1382},end:{line:1,column:1383}}],line:1},"12":{loc:{start:{line:1,column:1366},end:{line:1,column:1370}},type:"binary-expr",locations:[{start:{line:1,column:1366},end:{line:1,column:1367}},{start:{line:1,column:1369},end:{line:1,column:1370}}],line:1},"13":{loc:{start:{line:1,column:1726},end:{line:1,column:1729}},type:"default-arg",locations:[{start:{line:1,column:1728},end:{line:1,column:1729}}],line:1},"14":{loc:{start:{line:1,column:1809},end:{line:1,column:1813}},type:"binary-expr",locations:[{start:{line:1,column:1809},end:{line:1,column:1810}},{start:{line:1,column:1812},end:{line:1,column:1813}}],line:1},"15":{loc:{start:{line:1,column:2342},end:{line:1,column:2346}},type:"default-arg",locations:[{start:{line:1,column:2344},end:{line:1,column:2346}}],line:1},"16":{loc:{start:{line:1,column:2477},end:{line:1,column:2481}},type:"default-arg",locations:[{start:{line:1,column:2479},end:{line:1,column:2481}}],line:1},"17":{loc:{start:{line:1,column:2622},end:{line:1,column:2646}},type:"binary-expr",locations:[{start:{line:1,column:2622},end:{line:1,column:2623}},{start:{line:1,column:2625},end:{line:1,column:2635}},{start:{line:1,column:2638},end:{line:1,column:2645}}],line:1},"18":{loc:{start:{line:1,column:2697},end:{line:1,column:2701}},type:"default-arg",locations:[{start:{line:1,column:2699},end:{line:1,column:2701}}],line:1},"19":{loc:{start:{line:1,column:2702},end:{line:1,column:2708}},type:"default-arg",locations:[{start:{line:1,column:2704},end:{line:1,column:2708}}],line:1},"20":{loc:{start:{line:1,column:2834},end:{line:1,column:2838}},type:"default-arg",locations:[{start:{line:1,column:2836},end:{line:1,column:2838}}],line:1},"21":{loc:{start:{line:1,column:2839},end:{line:1,column:2845}},type:"default-arg",locations:[{start:{line:1,column:2841},end:{line:1,column:2845}}],line:1},"22":{loc:{start:{line:1,column:3049},end:{line:1,column:3052}},type:"default-arg",locations:[{start:{line:1,column:3051},end:{line:1,column:3052}}],line:1},"23":{loc:{start:{line:1,column:3328},end:{line:1,column:3442}},type:"binary-expr",locations:[{start:{line:1,column:3328},end:{line:1,column:3363}},{start:{line:1,column:3366},end:{line:1,column:3441}}],line:1},"24":{loc:{start:{line:1,column:3470},end:{line:1,column:3474}},type:"default-arg",locations:[{start:{line:1,column:3472},end:{line:1,column:3474}}],line:1},"25":{loc:{start:{line:1,column:3584},end:{line:1,column:3593}},type:"binary-expr",locations:[{start:{line:1,column:3584},end:{line:1,column:3585}},{start:{line:1,column:3587},end:{line:1,column:3593}}],line:1},"26":{loc:{start:{line:1,column:3603},end:{line:1,column:3612}},type:"binary-expr",locations:[{start:{line:1,column:3603},end:{line:1,column:3604}},{start:{line:1,column:3606},end:{line:1,column:3612}}],line:1},"27":{loc:{start:{line:1,column:3737},end:{line:1,column:3741}},type:"binary-expr",locations:[{start:{line:1,column:3737},end:{line:1,column:3738}},{start:{line:1,column:3740},end:{line:1,column:3741}}],line:1},"28":{loc:{start:{line:1,column:3880},end:{line:1,column:3913}},type:"if",locations:[{start:{line:1,column:3880},end:{line:1,column:3913}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"29":{loc:{start:{line:1,column:3883},end:{line:1,column:3903}},type:"binary-expr",locations:[{start:{line:1,column:3883},end:{line:1,column:3885}},{start:{line:1,column:3887},end:{line:1,column:3903}}],line:1},"30":{loc:{start:{line:1,column:3948},end:{line:1,column:3992}},type:"cond-expr",locations:[{start:{line:1,column:3989},end:{line:1,column:3990}},{start:{line:1,column:3991},end:{line:1,column:3992}}],line:1},"31":{loc:{start:{line:1,column:3948},end:{line:1,column:3988}},type:"binary-expr",locations:[{start:{line:1,column:3948},end:{line:1,column:3954}},{start:{line:1,column:3956},end:{line:1,column:3988}}],line:1},"32":{loc:{start:{line:1,column:4060},end:{line:1,column:4139}},type:"if",locations:[{start:{line:1,column:4060},end:{line:1,column:4139}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"33":{loc:{start:{line:1,column:4282},end:{line:1,column:4309}},type:"binary-expr",locations:[{start:{line:1,column:4282},end:{line:1,column:4289}},{start:{line:1,column:4292},end:{line:1,column:4308}}],line:1},"34":{loc:{start:{line:1,column:4554},end:{line:1,column:4558}},type:"default-arg",locations:[{start:{line:1,column:4556},end:{line:1,column:4558}}],line:1},"35":{loc:{start:{line:1,column:4566},end:{line:1,column:4598}},type:"binary-expr",locations:[{start:{line:1,column:4566},end:{line:1,column:4593}},{start:{line:1,column:4595},end:{line:1,column:4598}}],line:1},"36":{loc:{start:{line:1,column:4606},end:{line:1,column:4633}},type:"cond-expr",locations:[{start:{line:1,column:4617},end:{line:1,column:4631}},{start:{line:1,column:4632},end:{line:1,column:4633}}],line:1},"37":{loc:{start:{line:1,column:4689},end:{line:1,column:4707}},type:"cond-expr",locations:[{start:{line:1,column:4700},end:{line:1,column:4705}},{start:{line:1,column:4706},end:{line:1,column:4707}}],line:1},"38":{loc:{start:{line:1,column:4733},end:{line:1,column:4797}},type:"binary-expr",locations:[{start:{line:1,column:4733},end:{line:1,column:4764}},{start:{line:1,column:4766},end:{line:1,column:4797}}],line:1},"39":{loc:{start:{line:1,column:4866},end:{line:1,column:4930}},type:"binary-expr",locations:[{start:{line:1,column:4866},end:{line:1,column:4897}},{start:{line:1,column:4899},end:{line:1,column:4930}}],line:1},"40":{loc:{start:{line:1,column:5116},end:{line:1,column:5119}},type:"default-arg",locations:[{start:{line:1,column:5118},end:{line:1,column:5119}}],line:1},"41":{loc:{start:{line:1,column:5199},end:{line:1,column:5203}},type:"binary-expr",locations:[{start:{line:1,column:5199},end:{line:1,column:5200}},{start:{line:1,column:5202},end:{line:1,column:5203}}],line:1},"42":{loc:{start:{line:1,column:5367},end:{line:1,column:5372}},type:"binary-expr",locations:[{start:{line:1,column:5367},end:{line:1,column:5368}},{start:{line:1,column:5370},end:{line:1,column:5372}}],line:1},"43":{loc:{start:{line:1,column:5496},end:{line:1,column:5501}},type:"binary-expr",locations:[{start:{line:1,column:5496},end:{line:1,column:5497}},{start:{line:1,column:5499},end:{line:1,column:5501}}],line:1},"44":{loc:{start:{line:1,column:5611},end:{line:1,column:5616}},type:"binary-expr",locations:[{start:{line:1,column:5611},end:{line:1,column:5612}},{start:{line:1,column:5614},end:{line:1,column:5616}}],line:1},"45":{loc:{start:{line:1,column:6409},end:{line:1,column:6546}},type:"if",locations:[{start:{line:1,column:6409},end:{line:1,column:6546}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"46":{loc:{start:{line:1,column:6426},end:{line:1,column:6488}},type:"if",locations:[{start:{line:1,column:6426},end:{line:1,column:6488}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"47":{loc:{start:{line:1,column:6488},end:{line:1,column:6545}},type:"if",locations:[{start:{line:1,column:6488},end:{line:1,column:6545}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"48":{loc:{start:{line:1,column:6570},end:{line:1,column:6609}},type:"if",locations:[{start:{line:1,column:6570},end:{line:1,column:6609}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"49":{loc:{start:{line:1,column:6650},end:{line:1,column:6671}},type:"binary-expr",locations:[{start:{line:1,column:6650},end:{line:1,column:6667}},{start:{line:1,column:6669},end:{line:1,column:6671}}],line:1},"50":{loc:{start:{line:1,column:6680},end:{line:1,column:6724}},type:"cond-expr",locations:[{start:{line:1,column:6699},end:{line:1,column:6704}},{start:{line:1,column:6705},end:{line:1,column:6724}}],line:1},"51":{loc:{start:{line:1,column:6808},end:{line:1,column:6818}},type:"binary-expr",locations:[{start:{line:1,column:6808},end:{line:1,column:6814}},{start:{line:1,column:6816},end:{line:1,column:6818}}],line:1},"52":{loc:{start:{line:1,column:6826},end:{line:1,column:6836}},type:"binary-expr",locations:[{start:{line:1,column:6826},end:{line:1,column:6832}},{start:{line:1,column:6834},end:{line:1,column:6836}}],line:1},"53":{loc:{start:{line:1,column:6874},end:{line:1,column:6905}},type:"if",locations:[{start:{line:1,column:6874},end:{line:1,column:6905}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"54":{loc:{start:{line:1,column:7357},end:{line:1,column:7366}},type:"binary-expr",locations:[{start:{line:1,column:7357},end:{line:1,column:7363}},{start:{line:1,column:7365},end:{line:1,column:7366}}],line:1},"55":{loc:{start:{line:1,column:7386},end:{line:1,column:7479}},type:"if",locations:[{start:{line:1,column:7386},end:{line:1,column:7479}},{start:{line:1,column:7462},end:{line:1,column:7479}}],line:1},"56":{loc:{start:{line:1,column:7442},end:{line:1,column:7454}},type:"if",locations:[{start:{line:1,column:7442},end:{line:1,column:7454}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"57":{loc:{start:{line:1,column:7507},end:{line:1,column:7531}},type:"binary-expr",locations:[{start:{line:1,column:7507},end:{line:1,column:7508}},{start:{line:1,column:7511},end:{line:1,column:7530}}],line:1},"58":{loc:{start:{line:1,column:7577},end:{line:1,column:7644}},type:"cond-expr",locations:[{start:{line:1,column:7579},end:{line:1,column:7587}},{start:{line:1,column:7588},end:{line:1,column:7644}}],line:1},"59":{loc:{start:{line:1,column:7588},end:{line:1,column:7644}},type:"cond-expr",locations:[{start:{line:1,column:7597},end:{line:1,column:7600}},{start:{line:1,column:7601},end:{line:1,column:7644}}],line:1},"60":{loc:{start:{line:1,column:7761},end:{line:1,column:7797}},type:"if",locations:[{start:{line:1,column:7761},end:{line:1,column:7797}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"61":{loc:{start:{line:1,column:7806},end:{line:1,column:8440}},type:"switch",locations:[{start:{line:1,column:7816},end:{line:1,column:7853}},{start:{line:1,column:7853},end:{line:1,column:7892}},{start:{line:1,column:7892},end:{line:1,column:7927}},{start:{line:1,column:7927},end:{line:1,column:7962}},{start:{line:1,column:7962},end:{line:1,column:7999}},{start:{line:1,column:7999},end:{line:1,column:8038}},{start:{line:1,column:8038},end:{line:1,column:8073}},{start:{line:1,column:8073},end:{line:1,column:8108}},{start:{line:1,column:8108},end:{line:1,column:8192}},{start:{line:1,column:8192},end:{line:1,column:8280}},{start:{line:1,column:8280},end:{line:1,column:8360}},{start:{line:1,column:8360},end:{line:1,column:8439}}],line:1},"62":{loc:{start:{line:1,column:8447},end:{line:1,column:8461}},type:"binary-expr",locations:[{start:{line:1,column:8447},end:{line:1,column:8448}},{start:{line:1,column:8451},end:{line:1,column:8460}}],line:1},"63":{loc:{start:{line:1,column:8487},end:{line:1,column:8563}},type:"binary-expr",locations:[{start:{line:1,column:8487},end:{line:1,column:8488}},{start:{line:1,column:8491},end:{line:1,column:8562}}],line:1},"64":{loc:{start:{line:1,column:8538},end:{line:1,column:8560}},type:"cond-expr",locations:[{start:{line:1,column:8554},end:{line:1,column:8558}},{start:{line:1,column:8559},end:{line:1,column:8560}}],line:1},"65":{loc:{start:{line:1,column:8538},end:{line:1,column:8553}},type:"binary-expr",locations:[{start:{line:1,column:8538},end:{line:1,column:8545}},{start:{line:1,column:8547},end:{line:1,column:8553}}],line:1},"66":{loc:{start:{line:1,column:8581},end:{line:1,column:8586}},type:"default-arg",locations:[{start:{line:1,column:8583},end:{line:1,column:8586}}],line:1},"67":{loc:{start:{line:1,column:8601},end:{line:1,column:8638}},type:"binary-expr",locations:[{start:{line:1,column:8602},end:{line:1,column:8605}},{start:{line:1,column:8607},end:{line:1,column:8608}},{start:{line:1,column:8610},end:{line:1,column:8614}},{start:{line:1,column:8618},end:{line:1,column:8637}}],line:1},"68":{loc:{start:{line:1,column:8618},end:{line:1,column:8637}},type:"cond-expr",locations:[{start:{line:1,column:8620},end:{line:1,column:8626}},{start:{line:1,column:8628},end:{line:1,column:8636}}],line:1},"69":{loc:{start:{line:1,column:8687},end:{line:1,column:8713}},type:"binary-expr",locations:[{start:{line:1,column:8687},end:{line:1,column:8688}},{start:{line:1,column:8691},end:{line:1,column:8712}}],line:1},"70":{loc:{start:{line:1,column:8779},end:{line:1,column:8782}},type:"default-arg",locations:[{start:{line:1,column:8781},end:{line:1,column:8782}}],line:1},"71":{loc:{start:{line:1,column:8783},end:{line:1,column:8787}},type:"default-arg",locations:[{start:{line:1,column:8785},end:{line:1,column:8787}}],line:1},"72":{loc:{start:{line:1,column:8788},end:{line:1,column:8792}},type:"default-arg",locations:[{start:{line:1,column:8790},end:{line:1,column:8792}}],line:1},"73":{loc:{start:{line:1,column:8829},end:{line:1,column:8910}},type:"if",locations:[{start:{line:1,column:8829},end:{line:1,column:8910}},{start:{line:1,column:8886},end:{line:1,column:8910}}],line:1},"74":{loc:{start:{line:1,column:8832},end:{line:1,column:8851}},type:"binary-expr",locations:[{start:{line:1,column:8833},end:{line:1,column:8836}},{start:{line:1,column:8838},end:{line:1,column:8842}},{start:{line:1,column:8846},end:{line:1,column:8850}}],line:1},"75":{loc:{start:{line:1,column:8858},end:{line:1,column:8880}},type:"binary-expr",locations:[{start:{line:1,column:8858},end:{line:1,column:8863}},{start:{line:1,column:8865},end:{line:1,column:8872}},{start:{line:1,column:8875},end:{line:1,column:8879}}],line:1},"76":{loc:{start:{line:1,column:8886},end:{line:1,column:8910}},type:"if",locations:[{start:{line:1,column:8886},end:{line:1,column:8910}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"77":{loc:{start:{line:1,column:8971},end:{line:1,column:9237}},type:"switch",locations:[{start:{line:1,column:8981},end:{line:1,column:9011}},{start:{line:1,column:9011},end:{line:1,column:9038}},{start:{line:1,column:9038},end:{line:1,column:9064}},{start:{line:1,column:9064},end:{line:1,column:9091}},{start:{line:1,column:9091},end:{line:1,column:9120}},{start:{line:1,column:9120},end:{line:1,column:9149}},{start:{line:1,column:9149},end:{line:1,column:9183}},{start:{line:1,column:9183},end:{line:1,column:9208}},{start:{line:1,column:9208},end:{line:1,column:9236}}],line:1},"78":{loc:{start:{line:1,column:9253},end:{line:1,column:9263}},type:"default-arg",locations:[{start:{line:1,column:9255},end:{line:1,column:9263}}],line:1},"79":{loc:{start:{line:1,column:9264},end:{line:1,column:9268}},type:"default-arg",locations:[{start:{line:1,column:9266},end:{line:1,column:9268}}],line:1},"80":{loc:{start:{line:1,column:9340},end:{line:1,column:9864}},type:"switch",locations:[{start:{line:1,column:9350},end:{line:1,column:9388}},{start:{line:1,column:9388},end:{line:1,column:9424}},{start:{line:1,column:9424},end:{line:1,column:9781}},{start:{line:1,column:9781},end:{line:1,column:9827}},{start:{line:1,column:9827},end:{line:1,column:9863}}],line:1},"81":{loc:{start:{line:1,column:9467},end:{line:1,column:9754}},type:"if",locations:[{start:{line:1,column:9467},end:{line:1,column:9754}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"82":{loc:{start:{line:1,column:9515},end:{line:1,column:9721}},type:"if",locations:[{start:{line:1,column:9515},end:{line:1,column:9721}},{start:{line:1,column:9682},end:{line:1,column:9721}}],line:1},"83":{loc:{start:{line:1,column:9550},end:{line:1,column:9574}},type:"binary-expr",locations:[{start:{line:1,column:9550},end:{line:1,column:9560}},{start:{line:1,column:9562},end:{line:1,column:9574}}],line:1},"84":{loc:{start:{line:1,column:9578},end:{line:1,column:9613}},type:"binary-expr",locations:[{start:{line:1,column:9578},end:{line:1,column:9587}},{start:{line:1,column:9589},end:{line:1,column:9600}},{start:{line:1,column:9602},end:{line:1,column:9613}}],line:1},"85":{loc:{start:{line:1,column:9614},end:{line:1,column:9676}},type:"if",locations:[{start:{line:1,column:9614},end:{line:1,column:9676}},{start:{line:1,column:9658},end:{line:1,column:9676}}],line:1},"86":{loc:{start:{line:1,column:9634},end:{line:1,column:9652}},type:"if",locations:[{start:{line:1,column:9634},end:{line:1,column:9652}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"87":{loc:{start:{line:1,column:9637},end:{line:1,column:9643}},type:"binary-expr",locations:[{start:{line:1,column:9637},end:{line:1,column:9639}},{start:{line:1,column:9641},end:{line:1,column:9643}}],line:1},"88":{loc:{start:{line:1,column:9658},end:{line:1,column:9676}},type:"if",locations:[{start:{line:1,column:9658},end:{line:1,column:9676}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"89":{loc:{start:{line:1,column:9661},end:{line:1,column:9667}},type:"binary-expr",locations:[{start:{line:1,column:9661},end:{line:1,column:9663}},{start:{line:1,column:9665},end:{line:1,column:9667}}],line:1},"90":{loc:{start:{line:1,column:9682},end:{line:1,column:9721}},type:"if",locations:[{start:{line:1,column:9682},end:{line:1,column:9721}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"91":{loc:{start:{line:1,column:9685},end:{line:1,column:9711}},type:"binary-expr",locations:[{start:{line:1,column:9685},end:{line:1,column:9696}},{start:{line:1,column:9698},end:{line:1,column:9711}}],line:1},"92":{loc:{start:{line:1,column:9732},end:{line:1,column:9753}},type:"if",locations:[{start:{line:1,column:9732},end:{line:1,column:9753}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"93":{loc:{start:{line:1,column:9771},end:{line:1,column:9779}},type:"cond-expr",locations:[{start:{line:1,column:9776},end:{line:1,column:9777}},{start:{line:1,column:9778},end:{line:1,column:9779}}],line:1},"94":{loc:{start:{line:1,column:9803},end:{line:1,column:9825}},type:"cond-expr",locations:[{start:{line:1,column:9822},end:{line:1,column:9823}},{start:{line:1,column:9824},end:{line:1,column:9825}}],line:1},"95":{loc:{start:{line:1,column:9934},end:{line:1,column:9970}},type:"cond-expr",locations:[{start:{line:1,column:9938},end:{line:1,column:9954}},{start:{line:1,column:9955},end:{line:1,column:9970}}],line:1},"96":{loc:{start:{line:1,column:9971},end:{line:1,column:10251}},type:"switch",locations:[{start:{line:1,column:9981},end:{line:1,column:10039}},{start:{line:1,column:10039},end:{line:1,column:10081}},{start:{line:1,column:10081},end:{line:1,column:10149}},{start:{line:1,column:10149},end:{line:1,column:10222}},{start:{line:1,column:10222},end:{line:1,column:10250}}],line:1},"97":{loc:{start:{line:1,column:9995},end:{line:1,column:10006}},type:"cond-expr",locations:[{start:{line:1,column:10000},end:{line:1,column:10003}},{start:{line:1,column:10004},end:{line:1,column:10006}}],line:1},"98":{loc:{start:{line:1,column:10059},end:{line:1,column:10070}},type:"cond-expr",locations:[{start:{line:1,column:10064},end:{line:1,column:10067}},{start:{line:1,column:10068},end:{line:1,column:10070}}],line:1},"99":{loc:{start:{line:1,column:10101},end:{line:1,column:10112}},type:"cond-expr",locations:[{start:{line:1,column:10106},end:{line:1,column:10109}},{start:{line:1,column:10110},end:{line:1,column:10112}}],line:1},"100":{loc:{start:{line:1,column:10163},end:{line:1,column:10221}},type:"cond-expr",locations:[{start:{line:1,column:10169},end:{line:1,column:10172}},{start:{line:1,column:10173},end:{line:1,column:10221}}],line:1},"101":{loc:{start:{line:1,column:10174},end:{line:1,column:10185}},type:"cond-expr",locations:[{start:{line:1,column:10179},end:{line:1,column:10182}},{start:{line:1,column:10183},end:{line:1,column:10185}}],line:1},"102":{loc:{start:{line:1,column:10322},end:{line:1,column:10332}},type:"cond-expr",locations:[{start:{line:1,column:10327},end:{line:1,column:10328}},{start:{line:1,column:10329},end:{line:1,column:10332}}],line:1},"103":{loc:{start:{line:1,column:10371},end:{line:1,column:10383}},type:"cond-expr",locations:[{start:{line:1,column:10377},end:{line:1,column:10379}},{start:{line:1,column:10380},end:{line:1,column:10383}}],line:1},"104":{loc:{start:{line:1,column:10451},end:{line:1,column:10455}},type:"default-arg",locations:[{start:{line:1,column:10453},end:{line:1,column:10455}}],line:1},"105":{loc:{start:{line:1,column:10484},end:{line:1,column:10676}},type:"if",locations:[{start:{line:1,column:10484},end:{line:1,column:10676}},{start:{line:1,column:10590},end:{line:1,column:10676}}],line:1},"106":{loc:{start:{line:1,column:10721},end:{line:1,column:10725}},type:"default-arg",locations:[{start:{line:1,column:10723},end:{line:1,column:10725}}],line:1},"107":{loc:{start:{line:1,column:10833},end:{line:1,column:10855}},type:"if",locations:[{start:{line:1,column:10833},end:{line:1,column:10855}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"108":{loc:{start:{line:1,column:10861},end:{line:1,column:12921}},type:"switch",locations:[{start:{line:1,column:10871},end:{line:1,column:10879}},{start:{line:1,column:10879},end:{line:1,column:10888}},{start:{line:1,column:10888},end:{line:1,column:10925}},{start:{line:1,column:10925},end:{line:1,column:10956}},{start:{line:1,column:10956},end:{line:1,column:10990}},{start:{line:1,column:10990},end:{line:1,column:11021}},{start:{line:1,column:11021},end:{line:1,column:11053}},{start:{line:1,column:11053},end:{line:1,column:11086}},{start:{line:1,column:11086},end:{line:1,column:11120}},{start:{line:1,column:11120},end:{line:1,column:11141}},{start:{line:1,column:11141},end:{line:1,column:11166}},{start:{line:1,column:11166},end:{line:1,column:11189}},{start:{line:1,column:11189},end:{line:1,column:11213}},{start:{line:1,column:11213},end:{line:1,column:11221}},{start:{line:1,column:11221},end:{line:1,column:11246}},{start:{line:1,column:11246},end:{line:1,column:11255}},{start:{line:1,column:11255},end:{line:1,column:11281}},{start:{line:1,column:11281},end:{line:1,column:11318}},{start:{line:1,column:11318},end:{line:1,column:11349}},{start:{line:1,column:11349},end:{line:1,column:11383}},{start:{line:1,column:11383},end:{line:1,column:11433}},{start:{line:1,column:11433},end:{line:1,column:11477}},{start:{line:1,column:11477},end:{line:1,column:11524}},{start:{line:1,column:11524},end:{line:1,column:11546}},{start:{line:1,column:11546},end:{line:1,column:11569}},{start:{line:1,column:11569},end:{line:1,column:11594}},{start:{line:1,column:11594},end:{line:1,column:11617}},{start:{line:1,column:11617},end:{line:1,column:11641}},{start:{line:1,column:11641},end:{line:1,column:11649}},{start:{line:1,column:11649},end:{line:1,column:11673}},{start:{line:1,column:11673},end:{line:1,column:11723}},{start:{line:1,column:11723},end:{line:1,column:11767}},{start:{line:1,column:11767},end:{line:1,column:11814}},{start:{line:1,column:11814},end:{line:1,column:11861}},{start:{line:1,column:11861},end:{line:1,column:11869}},{start:{line:1,column:11869},end:{line:1,column:11878}},{start:{line:1,column:11878},end:{line:1,column:11915}},{start:{line:1,column:11915},end:{line:1,column:11946}},{start:{line:1,column:11946},end:{line:1,column:11980}},{start:{line:1,column:11980},end:{line:1,column:12014}},{start:{line:1,column:12014},end:{line:1,column:12022}},{start:{line:1,column:12022},end:{line:1,column:12031}},{start:{line:1,column:12031},end:{line:1,column:12068}},{start:{line:1,column:12068},end:{line:1,column:12099}},{start:{line:1,column:12099},end:{line:1,column:12133}},{start:{line:1,column:12133},end:{line:1,column:12141}},{start:{line:1,column:12141},end:{line:1,column:12150}},{start:{line:1,column:12150},end:{line:1,column:12203}},{start:{line:1,column:12203},end:{line:1,column:12250}},{start:{line:1,column:12250},end:{line:1,column:12300}},{start:{line:1,column:12300},end:{line:1,column:12308}},{start:{line:1,column:12308},end:{line:1,column:12317}},{start:{line:1,column:12317},end:{line:1,column:12366}},{start:{line:1,column:12366},end:{line:1,column:12409}},{start:{line:1,column:12409},end:{line:1,column:12455}},{start:{line:1,column:12455},end:{line:1,column:12482}},{start:{line:1,column:12482},end:{line:1,column:12510}},{start:{line:1,column:12510},end:{line:1,column:12533}},{start:{line:1,column:12533},end:{line:1,column:12557}},{start:{line:1,column:12557},end:{line:1,column:12580}},{start:{line:1,column:12580},end:{line:1,column:12604}},{start:{line:1,column:12604},end:{line:1,column:12627}},{start:{line:1,column:12627},end:{line:1,column:12651}},{start:{line:1,column:12651},end:{line:1,column:12674}},{start:{line:1,column:12674},end:{line:1,column:12698}},{start:{line:1,column:12698},end:{line:1,column:12723}},{start:{line:1,column:12723},end:{line:1,column:12731}},{start:{line:1,column:12731},end:{line:1,column:12740}},{start:{line:1,column:12740},end:{line:1,column:12763}},{start:{line:1,column:12763},end:{line:1,column:12788}},{start:{line:1,column:12788},end:{line:1,column:12796}},{start:{line:1,column:12796},end:{line:1,column:12805}},{start:{line:1,column:12805},end:{line:1,column:12815}},{start:{line:1,column:12815},end:{line:1,column:12823}},{start:{line:1,column:12823},end:{line:1,column:12832}},{start:{line:1,column:12832},end:{line:1,column:12855}},{start:{line:1,column:12855},end:{line:1,column:12866}},{start:{line:1,column:12866},end:{line:1,column:12877}},{start:{line:1,column:12877},end:{line:1,column:12901}},{start:{line:1,column:12901},end:{line:1,column:12920}}],line:1},"109":{loc:{start:{line:1,column:13032},end:{line:1,column:13044}},type:"cond-expr",locations:[{start:{line:1,column:13041},end:{line:1,column:13042}},{start:{line:1,column:13043},end:{line:1,column:13044}}],line:1},"110":{loc:{start:{line:1,column:13220},end:{line:1,column:13238}},type:"if",locations:[{start:{line:1,column:13220},end:{line:1,column:13238}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"111":{loc:{start:{line:1,column:13238},end:{line:1,column:13290}},type:"if",locations:[{start:{line:1,column:13238},end:{line:1,column:13290}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"112":{loc:{start:{line:1,column:13241},end:{line:1,column:13270}},type:"binary-expr",locations:[{start:{line:1,column:13241},end:{line:1,column:13259}},{start:{line:1,column:13261},end:{line:1,column:13270}}],line:1},"113":{loc:{start:{line:1,column:13290},end:{line:1,column:13517}},type:"if",locations:[{start:{line:1,column:13290},end:{line:1,column:13517}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"114":{loc:{start:{line:1,column:13313},end:{line:1,column:13427}},type:"if",locations:[{start:{line:1,column:13313},end:{line:1,column:13427}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"115":{loc:{start:{line:1,column:13376},end:{line:1,column:13379}},type:"default-arg",locations:[{start:{line:1,column:13378},end:{line:1,column:13379}}],line:1},"116":{loc:{start:{line:1,column:13380},end:{line:1,column:13383}},type:"default-arg",locations:[{start:{line:1,column:13382},end:{line:1,column:13383}}],line:1},"117":{loc:{start:{line:1,column:13447},end:{line:1,column:13481}},type:"if",locations:[{start:{line:1,column:13447},end:{line:1,column:13481}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"118":{loc:{start:{line:1,column:13487},end:{line:1,column:13516}},type:"if",locations:[{start:{line:1,column:13487},end:{line:1,column:13516}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"119":{loc:{start:{line:1,column:13535},end:{line:1,column:13566}},type:"if",locations:[{start:{line:1,column:13535},end:{line:1,column:13566}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"120":{loc:{start:{line:1,column:13618},end:{line:1,column:13653}},type:"cond-expr",locations:[{start:{line:1,column:13623},end:{line:1,column:13639}},{start:{line:1,column:13640},end:{line:1,column:13653}}],line:1},"121":{loc:{start:{line:1,column:13656},end:{line:1,column:13685}},type:"cond-expr",locations:[{start:{line:1,column:13661},end:{line:1,column:13674}},{start:{line:1,column:13675},end:{line:1,column:13685}}],line:1},"122":{loc:{start:{line:1,column:13686},end:{line:1,column:13735}},type:"binary-expr",locations:[{start:{line:1,column:13686},end:{line:1,column:13690}},{start:{line:1,column:13693},end:{line:1,column:13734}}],line:1},"123":{loc:{start:{line:1,column:13800},end:{line:1,column:13807}},type:"binary-expr",locations:[{start:{line:1,column:13800},end:{line:1,column:13804}},{start:{line:1,column:13806},end:{line:1,column:13807}}],line:1},"124":{loc:{start:{line:1,column:13820},end:{line:1,column:13827}},type:"binary-expr",locations:[{start:{line:1,column:13820},end:{line:1,column:13824}},{start:{line:1,column:13826},end:{line:1,column:13827}}],line:1},"125":{loc:{start:{line:1,column:13840},end:{line:1,column:13847}},type:"binary-expr",locations:[{start:{line:1,column:13840},end:{line:1,column:13844}},{start:{line:1,column:13846},end:{line:1,column:13847}}],line:1},"126":{loc:{start:{line:1,column:13879},end:{line:1,column:13886}},type:"binary-expr",locations:[{start:{line:1,column:13879},end:{line:1,column:13883}},{start:{line:1,column:13885},end:{line:1,column:13886}}],line:1},"127":{loc:{start:{line:1,column:13943},end:{line:1,column:13981}},type:"binary-expr",locations:[{start:{line:1,column:13943},end:{line:1,column:13960}},{start:{line:1,column:13962},end:{line:1,column:13981}}],line:1},"128":{loc:{start:{line:1,column:14158},end:{line:1,column:14187}},type:"cond-expr",locations:[{start:{line:1,column:14166},end:{line:1,column:14184}},{start:{line:1,column:14185},end:{line:1,column:14187}}],line:1},"129":{loc:{start:{line:1,column:14217},end:{line:1,column:14256}},type:"cond-expr",locations:[{start:{line:1,column:14236},end:{line:1,column:14254}},{start:{line:1,column:14255},end:{line:1,column:14256}}],line:1},"130":{loc:{start:{line:1,column:14346},end:{line:1,column:14495}},type:"if",locations:[{start:{line:1,column:14346},end:{line:1,column:14495}},{start:{line:1,column:14428},end:{line:1,column:14495}}],line:1},"131":{loc:{start:{line:1,column:14349},end:{line:1,column:14383}},type:"binary-expr",locations:[{start:{line:1,column:14349},end:{line:1,column:14365}},{start:{line:1,column:14367},end:{line:1,column:14383}}],line:1},"132":{loc:{start:{line:1,column:14428},end:{line:1,column:14495}},type:"if",locations:[{start:{line:1,column:14428},end:{line:1,column:14495}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"133":{loc:{start:{line:1,column:14563},end:{line:1,column:14685}},type:"cond-expr",locations:[{start:{line:1,column:14575},end:{line:1,column:14629}},{start:{line:1,column:14631},end:{line:1,column:14685}}],line:1},"134":{loc:{start:{line:1,column:14575},end:{line:1,column:14616}},type:"binary-expr",locations:[{start:{line:1,column:14575},end:{line:1,column:14588}},{start:{line:1,column:14591},end:{line:1,column:14615}}],line:1},"135":{loc:{start:{line:1,column:14750},end:{line:1,column:14877}},type:"cond-expr",locations:[{start:{line:1,column:14761},end:{line:1,column:14804}},{start:{line:1,column:14806},end:{line:1,column:14877}}],line:1},"136":{loc:{start:{line:1,column:14806},end:{line:1,column:14877}},type:"binary-expr",locations:[{start:{line:1,column:14806},end:{line:1,column:14815}},{start:{line:1,column:14818},end:{line:1,column:14876}}],line:1},"137":{loc:{start:{line:1,column:14818},end:{line:1,column:14852}},type:"binary-expr",locations:[{start:{line:1,column:14818},end:{line:1,column:14827}},{start:{line:1,column:14829},end:{line:1,column:14852}}],line:1},"138":{loc:{start:{line:1,column:14921},end:{line:1,column:15067}},type:"binary-expr",locations:[{start:{line:1,column:14921},end:{line:1,column:14931}},{start:{line:1,column:14933},end:{line:1,column:15067}}],line:1},"139":{loc:{start:{line:1,column:14957},end:{line:1,column:15065}},type:"cond-expr",locations:[{start:{line:1,column:14959},end:{line:1,column:15010}},{start:{line:1,column:15011},end:{line:1,column:15065}}],line:1},"140":{loc:{start:{line:1,column:15108},end:{line:1,column:15112}},type:"binary-expr",locations:[{start:{line:1,column:15108},end:{line:1,column:15109}},{start:{line:1,column:15111},end:{line:1,column:15112}}],line:1},"141":{loc:{start:{line:1,column:15850},end:{line:1,column:15871}},type:"binary-expr",locations:[{start:{line:1,column:15850},end:{line:1,column:15851}},{start:{line:1,column:15854},end:{line:1,column:15870}}],line:1},"142":{loc:{start:{line:1,column:15884},end:{line:1,column:16030}},type:"if",locations:[{start:{line:1,column:15884},end:{line:1,column:16030}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"143":{loc:{start:{line:1,column:15949},end:{line:1,column:16029}},type:"binary-expr",locations:[{start:{line:1,column:15949},end:{line:1,column:15962}},{start:{line:1,column:15964},end:{line:1,column:15965}},{start:{line:1,column:15968},end:{line:1,column:16028}}],line:1},"144":{loc:{start:{line:1,column:16030},end:{line:1,column:16111}},type:"if",locations:[{start:{line:1,column:16030},end:{line:1,column:16111}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"145":{loc:{start:{line:1,column:16086},end:{line:1,column:16110}},type:"binary-expr",locations:[{start:{line:1,column:16086},end:{line:1,column:16087}},{start:{line:1,column:16089},end:{line:1,column:16110}}],line:1},"146":{loc:{start:{line:1,column:16184},end:{line:1,column:16395}},type:"if",locations:[{start:{line:1,column:16184},end:{line:1,column:16395}},{start:{line:1,column:16303},end:{line:1,column:16395}}],line:1},"147":{loc:{start:{line:1,column:16279},end:{line:1,column:16296}},type:"cond-expr",locations:[{start:{line:1,column:16288},end:{line:1,column:16294}},{start:{line:1,column:16295},end:{line:1,column:16296}}],line:1},"148":{loc:{start:{line:1,column:16303},end:{line:1,column:16395}},type:"if",locations:[{start:{line:1,column:16303},end:{line:1,column:16395}},{start:{line:1,column:16347},end:{line:1,column:16395}}],line:1},"149":{loc:{start:{line:1,column:16323},end:{line:1,column:16340}},type:"cond-expr",locations:[{start:{line:1,column:16332},end:{line:1,column:16338}},{start:{line:1,column:16339},end:{line:1,column:16340}}],line:1},"150":{loc:{start:{line:1,column:16347},end:{line:1,column:16395}},type:"if",locations:[{start:{line:1,column:16347},end:{line:1,column:16395}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"151":{loc:{start:{line:1,column:16647},end:{line:1,column:16651}},type:"binary-expr",locations:[{start:{line:1,column:16647},end:{line:1,column:16648}},{start:{line:1,column:16650},end:{line:1,column:16651}}],line:1},"152":{loc:{start:{line:1,column:17351},end:{line:1,column:17756}},type:"cond-expr",locations:[{start:{line:1,column:17375},end:{line:1,column:17565}},{start:{line:1,column:17566},end:{line:1,column:17756}}],line:1},"153":{loc:{start:{line:1,column:17375},end:{line:1,column:17565}},type:"binary-expr",locations:[{start:{line:1,column:17375},end:{line:1,column:17392}},{start:{line:1,column:17395},end:{line:1,column:17564}}],line:1},"154":{loc:{start:{line:1,column:17446},end:{line:1,column:17564}},type:"binary-expr",locations:[{start:{line:1,column:17446},end:{line:1,column:17467}},{start:{line:1,column:17470},end:{line:1,column:17563}}],line:1},"155":{loc:{start:{line:1,column:17566},end:{line:1,column:17756}},type:"binary-expr",locations:[{start:{line:1,column:17566},end:{line:1,column:17583}},{start:{line:1,column:17586},end:{line:1,column:17755}}],line:1},"156":{loc:{start:{line:1,column:17637},end:{line:1,column:17755}},type:"binary-expr",locations:[{start:{line:1,column:17637},end:{line:1,column:17658}},{start:{line:1,column:17661},end:{line:1,column:17754}}],line:1},"157":{loc:{start:{line:1,column:17895},end:{line:1,column:17899}},type:"binary-expr",locations:[{start:{line:1,column:17895},end:{line:1,column:17896}},{start:{line:1,column:17898},end:{line:1,column:17899}}],line:1},"158":{loc:{start:{line:1,column:18096},end:{line:1,column:18144}},type:"if",locations:[{start:{line:1,column:18096},end:{line:1,column:18144}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"159":{loc:{start:{line:1,column:18099},end:{line:1,column:18123}},type:"binary-expr",locations:[{start:{line:1,column:18099},end:{line:1,column:18100}},{start:{line:1,column:18102},end:{line:1,column:18123}}],line:1},"160":{loc:{start:{line:1,column:18642},end:{line:1,column:18677}},type:"binary-expr",locations:[{start:{line:1,column:18642},end:{line:1,column:18660}},{start:{line:1,column:18662},end:{line:1,column:18677}}],line:1},"161":{loc:{start:{line:1,column:18706},end:{line:1,column:18850}},type:"if",locations:[{start:{line:1,column:18706},end:{line:1,column:18850}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"162":{loc:{start:{line:1,column:18721},end:{line:1,column:18825}},type:"if",locations:[{start:{line:1,column:18721},end:{line:1,column:18825}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"163":{loc:{start:{line:1,column:18857},end:{line:1,column:18924}},type:"cond-expr",locations:[{start:{line:1,column:18872},end:{line:1,column:18905}},{start:{line:1,column:18907},end:{line:1,column:18924}}],line:1},"164":{loc:{start:{line:1,column:19132},end:{line:1,column:19151}},type:"if",locations:[{start:{line:1,column:19132},end:{line:1,column:19151}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"165":{loc:{start:{line:1,column:19151},end:{line:1,column:19170}},type:"if",locations:[{start:{line:1,column:19151},end:{line:1,column:19170}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"166":{loc:{start:{line:1,column:19324},end:{line:1,column:19418}},type:"binary-expr",locations:[{start:{line:1,column:19324},end:{line:1,column:19337}},{start:{line:1,column:19340},end:{line:1,column:19417}}],line:1},"167":{loc:{start:{line:1,column:19360},end:{line:1,column:19417}},type:"binary-expr",locations:[{start:{line:1,column:19360},end:{line:1,column:19390}},{start:{line:1,column:19392},end:{line:1,column:19417}}],line:1},"168":{loc:{start:{line:1,column:19459},end:{line:1,column:19463}},type:"binary-expr",locations:[{start:{line:1,column:19459},end:{line:1,column:19460}},{start:{line:1,column:19462},end:{line:1,column:19463}}],line:1},"169":{loc:{start:{line:1,column:19739},end:{line:1,column:19777}},type:"if",locations:[{start:{line:1,column:19739},end:{line:1,column:19777}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"170":{loc:{start:{line:1,column:19742},end:{line:1,column:19764}},type:"binary-expr",locations:[{start:{line:1,column:19742},end:{line:1,column:19749}},{start:{line:1,column:19751},end:{line:1,column:19757}},{start:{line:1,column:19759},end:{line:1,column:19764}}],line:1},"171":{loc:{start:{line:1,column:19787},end:{line:1,column:19825}},type:"binary-expr",locations:[{start:{line:1,column:19787},end:{line:1,column:19788}},{start:{line:1,column:19790},end:{line:1,column:19821}},{start:{line:1,column:19823},end:{line:1,column:19825}}],line:1},"172":{loc:{start:{line:1,column:19828},end:{line:1,column:19890}},type:"binary-expr",locations:[{start:{line:1,column:19828},end:{line:1,column:19829}},{start:{line:1,column:19831},end:{line:1,column:19860}},{start:{line:1,column:19862},end:{line:1,column:19882}},{start:{line:1,column:19884},end:{line:1,column:19890}}],line:1},"173":{loc:{start:{line:1,column:19905},end:{line:1,column:19919}},type:"binary-expr",locations:[{start:{line:1,column:19905},end:{line:1,column:19906}},{start:{line:1,column:19908},end:{line:1,column:19919}}],line:1},"174":{loc:{start:{line:1,column:19995},end:{line:1,column:19999}},type:"binary-expr",locations:[{start:{line:1,column:19995},end:{line:1,column:19996}},{start:{line:1,column:19998},end:{line:1,column:19999}}],line:1},"175":{loc:{start:{line:1,column:20155},end:{line:1,column:20159}},type:"binary-expr",locations:[{start:{line:1,column:20155},end:{line:1,column:20156}},{start:{line:1,column:20158},end:{line:1,column:20159}}],line:1},"176":{loc:{start:{line:1,column:20492},end:{line:1,column:20540}},type:"cond-expr",locations:[{start:{line:1,column:20509},end:{line:1,column:20526}},{start:{line:1,column:20527},end:{line:1,column:20540}}],line:1},"177":{loc:{start:{line:1,column:20731},end:{line:1,column:20771}},type:"binary-expr",locations:[{start:{line:1,column:20731},end:{line:1,column:20732}},{start:{line:1,column:20735},end:{line:1,column:20770}}],line:1},"178":{loc:{start:{line:1,column:21096},end:{line:1,column:21142}},type:"binary-expr",locations:[{start:{line:1,column:21096},end:{line:1,column:21115}},{start:{line:1,column:21117},end:{line:1,column:21142}}],line:1},"179":{loc:{start:{line:1,column:21143},end:{line:1,column:21157}},type:"if",locations:[{start:{line:1,column:21143},end:{line:1,column:21157}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"180":{loc:{start:{line:1,column:21157},end:{line:1,column:21444}},type:"if",locations:[{start:{line:1,column:21157},end:{line:1,column:21444}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"181":{loc:{start:{line:1,column:21160},end:{line:1,column:21245}},type:"binary-expr",locations:[{start:{line:1,column:21160},end:{line:1,column:21197}},{start:{line:1,column:21199},end:{line:1,column:21205}},{start:{line:1,column:21207},end:{line:1,column:21245}}],line:1},"182":{loc:{start:{line:1,column:21348},end:{line:1,column:21428}},type:"if",locations:[{start:{line:1,column:21348},end:{line:1,column:21428}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"183":{loc:{start:{line:1,column:21360},end:{line:1,column:21413}},type:"binary-expr",locations:[{start:{line:1,column:21360},end:{line:1,column:21379}},{start:{line:1,column:21381},end:{line:1,column:21413}}],line:1},"184":{loc:{start:{line:1,column:21414},end:{line:1,column:21427}},type:"if",locations:[{start:{line:1,column:21414},end:{line:1,column:21427}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1}},s:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"116":0,"117":0,"118":0,"119":0,"120":0,"121":0,"122":0,"123":0,"124":0,"125":0,"126":0,"127":0,"128":0,"129":0,"130":0,"131":0,"132":0,"133":0,"134":0,"135":0,"136":0,"137":0,"138":0,"139":0,"140":0,"141":0,"142":0,"143":0,"144":0,"145":0,"146":0,"147":0,"148":0,"149":0,"150":0,"151":0,"152":0,"153":0,"154":0,"155":0,"156":0,"157":0,"158":0,"159":0,"160":0,"161":0,"162":0,"163":0,"164":0,"165":0,"166":0,"167":0,"168":0,"169":0,"170":0,"171":0,"172":0,"173":0,"174":0,"175":0,"176":0,"177":0,"178":0,"179":0,"180":0,"181":0,"182":0,"183":0,"184":0,"185":0,"186":0,"187":0,"188":0,"189":0,"190":0,"191":0,"192":0,"193":0,"194":0,"195":0,"196":0,"197":0,"198":0,"199":0,"200":0,"201":0,"202":0,"203":0,"204":0,"205":0,"206":0,"207":0,"208":0,"209":0,"210":0,"211":0,"212":0,"213":0,"214":0,"215":0,"216":0,"217":0,"218":0,"219":0,"220":0,"221":0,"222":0,"223":0,"224":0,"225":0,"226":0,"227":0,"228":0,"229":0,"230":0,"231":0,"232":0,"233":0,"234":0,"235":0,"236":0,"237":0,"238":0,"239":0,"240":0,"241":0,"242":0,"243":0,"244":0,"245":0,"246":0,"247":0,"248":0,"249":0,"250":0,"251":0,"252":0,"253":0,"254":0,"255":0,"256":0,"257":0,"258":0,"259":0,"260":0,"261":0,"262":0,"263":0,"264":0,"265":0,"266":0,"267":0,"268":0,"269":0,"270":0,"271":0,"272":0,"273":0,"274":0,"275":0,"276":0,"277":0,"278":0,"279":0,"280":0,"281":0,"282":0,"283":0,"284":0,"285":0,"286":0,"287":0,"288":0,"289":0,"290":0,"291":0,"292":0,"293":0,"294":0,"295":0,"296":0,"297":0,"298":0,"299":0,"300":0,"301":0,"302":0,"303":0,"304":0,"305":0,"306":0,"307":0,"308":0,"309":0,"310":0,"311":0,"312":0,"313":0,"314":0,"315":0,"316":0,"317":0,"318":0,"319":0,"320":0,"321":0,"322":0,"323":0,"324":0,"325":0,"326":0,"327":0,"328":0,"329":0,"330":0,"331":0,"332":0,"333":0,"334":0,"335":0,"336":0,"337":0,"338":0,"339":0,"340":0,"341":0,"342":0,"343":0,"344":0,"345":0,"346":0,"347":0,"348":0,"349":0,"350":0,"351":0,"352":0,"353":0,"354":0,"355":0,"356":0,"357":0,"358":0,"359":0,"360":0,"361":0,"362":0,"363":0,"364":0,"365":0,"366":0,"367":0,"368":0,"369":0,"370":0,"371":0,"372":0,"373":0,"374":0,"375":0,"376":0,"377":0,"378":0,"379":0,"380":0,"381":0,"382":0,"383":0,"384":0,"385":0,"386":0,"387":0,"388":0,"389":0,"390":0,"391":0,"392":0,"393":0,"394":0,"395":0,"396":0,"397":0,"398":0,"399":0,"400":0,"401":0,"402":0,"403":0,"404":0,"405":0,"406":0,"407":0,"408":0,"409":0,"410":0,"411":0,"412":0,"413":0,"414":0,"415":0,"416":0,"417":0,"418":0,"419":0,"420":0,"421":0,"422":0,"423":0,"424":0,"425":0,"426":0,"427":0,"428":0,"429":0,"430":0,"431":0,"432":0,"433":0,"434":0,"435":0,"436":0,"437":0,"438":0,"439":0,"440":0,"441":0,"442":0,"443":0,"444":0,"445":0,"446":0,"447":0,"448":0,"449":0,"450":0,"451":0,"452":0,"453":0,"454":0,"455":0,"456":0,"457":0,"458":0,"459":0,"460":0,"461":0,"462":0,"463":0,"464":0,"465":0,"466":0,"467":0,"468":0,"469":0,"470":0,"471":0,"472":0,"473":0,"474":0,"475":0,"476":0,"477":0,"478":0,"479":0,"480":0,"481":0,"482":0,"483":0,"484":0,"485":0,"486":0,"487":0,"488":0,"489":0,"490":0,"491":0,"492":0,"493":0,"494":0,"495":0,"496":0,"497":0,"498":0,"499":0,"500":0,"501":0,"502":0,"503":0,"504":0,"505":0,"506":0,"507":0,"508":0,"509":0,"510":0,"511":0,"512":0,"513":0,"514":0,"515":0,"516":0,"517":0,"518":0,"519":0,"520":0,"521":0,"522":0,"523":0,"524":0,"525":0,"526":0,"527":0,"528":0,"529":0,"530":0,"531":0,"532":0,"533":0,"534":0,"535":0,"536":0,"537":0,"538":0,"539":0,"540":0,"541":0,"542":0,"543":0,"544":0,"545":0,"546":0,"547":0,"548":0,"549":0,"550":0,"551":0,"552":0,"553":0,"554":0,"555":0,"556":0,"557":0,"558":0,"559":0,"560":0,"561":0,"562":0,"563":0,"564":0,"565":0,"566":0,"567":0,"568":0,"569":0,"570":0,"571":0,"572":0,"573":0,"574":0,"575":0,"576":0,"577":0,"578":0,"579":0,"580":0,"581":0,"582":0,"583":0,"584":0,"585":0,"586":0,"587":0,"588":0,"589":0,"590":0,"591":0,"592":0,"593":0,"594":0,"595":0,"596":0,"597":0,"598":0,"599":0,"600":0,"601":0,"602":0,"603":0,"604":0,"605":0,"606":0,"607":0,"608":0,"609":0,"610":0,"611":0,"612":0,"613":0,"614":0,"615":0,"616":0,"617":0,"618":0,"619":0,"620":0,"621":0,"622":0,"623":0,"624":0,"625":0,"626":0,"627":0,"628":0,"629":0,"630":0,"631":0,"632":0,"633":0,"634":0,"635":0,"636":0,"637":0,"638":0,"639":0,"640":0,"641":0,"642":0,"643":0,"644":0,"645":0,"646":0,"647":0,"648":0,"649":0,"650":0,"651":0,"652":0,"653":0,"654":0,"655":0,"656":0,"657":0,"658":0,"659":0},f:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"116":0,"117":0,"118":0,"119":0,"120":0,"121":0,"122":0,"123":0,"124":0,"125":0,"126":0,"127":0,"128":0,"129":0,"130":0,"131":0,"132":0,"133":0,"134":0,"135":0,"136":0,"137":0,"138":0,"139":0,"140":0,"141":0,"142":0,"143":0,"144":0,"145":0,"146":0,"147":0,"148":0,"149":0,"150":0,"151":0,"152":0,"153":0,"154":0,"155":0,"156":0,"157":0,"158":0,"159":0,"160":0,"161":0,"162":0,"163":0,"164":0,"165":0,"166":0,"167":0,"168":0,"169":0,"170":0,"171":0,"172":0,"173":0,"174":0,"175":0,"176":0,"177":0,"178":0,"179":0,"180":0,"181":0,"182":0,"183":0,"184":0,"185":0,"186":0},b:{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0],"9":[0,0,0,0],"10":[0],"11":[0,0],"12":[0,0],"13":[0],"14":[0,0],"15":[0],"16":[0],"17":[0,0,0],"18":[0],"19":[0],"20":[0],"21":[0],"22":[0],"23":[0,0],"24":[0],"25":[0,0],"26":[0,0],"27":[0,0],"28":[0,0],"29":[0,0],"30":[0,0],"31":[0,0],"32":[0,0],"33":[0,0],"34":[0],"35":[0,0],"36":[0,0],"37":[0,0],"38":[0,0],"39":[0,0],"40":[0],"41":[0,0],"42":[0,0],"43":[0,0],"44":[0,0],"45":[0,0],"46":[0,0],"47":[0,0],"48":[0,0],"49":[0,0],"50":[0,0],"51":[0,0],"52":[0,0],"53":[0,0],"54":[0,0],"55":[0,0],"56":[0,0],"57":[0,0],"58":[0,0],"59":[0,0],"60":[0,0],"61":[0,0,0,0,0,0,0,0,0,0,0,0],"62":[0,0],"63":[0,0],"64":[0,0],"65":[0,0],"66":[0],"67":[0,0,0,0],"68":[0,0],"69":[0,0],"70":[0],"71":[0],"72":[0],"73":[0,0],"74":[0,0,0],"75":[0,0,0],"76":[0,0],"77":[0,0,0,0,0,0,0,0,0],"78":[0],"79":[0],"80":[0,0,0,0,0],"81":[0,0],"82":[0,0],"83":[0,0],"84":[0,0,0],"85":[0,0],"86":[0,0],"87":[0,0],"88":[0,0],"89":[0,0],"90":[0,0],"91":[0,0],"92":[0,0],"93":[0,0],"94":[0,0],"95":[0,0],"96":[0,0,0,0,0],"97":[0,0],"98":[0,0],"99":[0,0],"100":[0,0],"101":[0,0],"102":[0,0],"103":[0,0],"104":[0],"105":[0,0],"106":[0],"107":[0,0],"108":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"109":[0,0],"110":[0,0],"111":[0,0],"112":[0,0],"113":[0,0],"114":[0,0],"115":[0],"116":[0],"117":[0,0],"118":[0,0],"119":[0,0],"120":[0,0],"121":[0,0],"122":[0,0],"123":[0,0],"124":[0,0],"125":[0,0],"126":[0,0],"127":[0,0],"128":[0,0],"129":[0,0],"130":[0,0],"131":[0,0],"132":[0,0],"133":[0,0],"134":[0,0],"135":[0,0],"136":[0,0],"137":[0,0],"138":[0,0],"139":[0,0],"140":[0,0],"141":[0,0],"142":[0,0],"143":[0,0,0],"144":[0,0],"145":[0,0],"146":[0,0],"147":[0,0],"148":[0,0],"149":[0,0],"150":[0,0],"151":[0,0],"152":[0,0],"153":[0,0],"154":[0,0],"155":[0,0],"156":[0,0],"157":[0,0],"158":[0,0],"159":[0,0],"160":[0,0],"161":[0,0],"162":[0,0],"163":[0,0],"164":[0,0],"165":[0,0],"166":[0,0],"167":[0,0],"168":[0,0],"169":[0,0],"170":[0,0,0],"171":[0,0,0],"172":[0,0,0,0],"173":[0,0],"174":[0,0],"175":[0,0],"176":[0,0],"177":[0,0],"178":[0,0],"179":[0,0],"180":[0,0],"181":[0,0,0],"182":[0,0],"183":[0,0],"184":[0,0]},inputSourceMap:{version:3,sources:["node_modules/@angular/common/fesm2022/_location-chunk.mjs","node_modules/@angular/common/fesm2022/_common_module-chunk.mjs","node_modules/@angular/common/fesm2022/common.mjs"],sourcesContent:["/**\n * @license Angular v21.2.4\n * (c) 2010-2026 Google LLC. https://angular.dev/\n * License: MIT\n */\n\nimport * as i0 from '@angular/core';\nimport { inject, Injectable, InjectionToken, DOCUMENT, Optional, Inject, \u0275\u0275inject as __inject } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { PlatformLocation } from './_platform_location-chunk.mjs';\nfunction joinWithSlash(start, end) {\n if (!start) return end;\n if (!end) return start;\n if (start.endsWith('/')) {\n return end.startsWith('/') ? start + end.slice(1) : start + end;\n }\n return end.startsWith('/') ? start + end : `${start}/${end}`;\n}\nfunction stripTrailingSlash(url) {\n const pathEndIdx = url.search(/#|\\?|$/);\n return url[pathEndIdx - 1] === '/' ? url.slice(0, pathEndIdx - 1) + url.slice(pathEndIdx) : url;\n}\nfunction normalizeQueryParams(params) {\n return params && params[0] !== '?' ? `?${params}` : params;\n}\nlet LocationStrategy = /*#__PURE__*/(() => {\n class LocationStrategy {\n historyGo(relativePosition) {\n throw new Error(ngDevMode ? 'Not implemented' : '');\n }\n static \u0275fac = function LocationStrategy_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || LocationStrategy)();\n };\n static \u0275prov = /* @__PURE__ */i0.\u0275\u0275defineInjectable({\n token: LocationStrategy,\n factory: () => (() => inject(PathLocationStrategy))(),\n providedIn: 'root'\n });\n }\n return LocationStrategy;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst APP_BASE_HREF = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'appBaseHref' : '');\nlet PathLocationStrategy = /*#__PURE__*/(() => {\n class PathLocationStrategy extends LocationStrategy {\n _platformLocation;\n _baseHref;\n _removeListenerFns = [];\n constructor(_platformLocation, href) {\n super();\n this._platformLocation = _platformLocation;\n this._baseHref = href ?? this._platformLocation.getBaseHrefFromDOM() ?? inject(DOCUMENT).location?.origin ?? '';\n }\n ngOnDestroy() {\n while (this._removeListenerFns.length) {\n this._removeListenerFns.pop()();\n }\n }\n onPopState(fn) {\n this._removeListenerFns.push(this._platformLocation.onPopState(fn), this._platformLocation.onHashChange(fn));\n }\n getBaseHref() {\n return this._baseHref;\n }\n prepareExternalUrl(internal) {\n return joinWithSlash(this._baseHref, internal);\n }\n path(includeHash = false) {\n const pathname = this._platformLocation.pathname + normalizeQueryParams(this._platformLocation.search);\n const hash = this._platformLocation.hash;\n return hash && includeHash ? `${pathname}${hash}` : pathname;\n }\n pushState(state, title, url, queryParams) {\n const externalUrl = this.prepareExternalUrl(url + normalizeQueryParams(queryParams));\n this._platformLocation.pushState(state, title, externalUrl);\n }\n replaceState(state, title, url, queryParams) {\n const externalUrl = this.prepareExternalUrl(url + normalizeQueryParams(queryParams));\n this._platformLocation.replaceState(state, title, externalUrl);\n }\n forward() {\n this._platformLocation.forward();\n }\n back() {\n this._platformLocation.back();\n }\n getState() {\n return this._platformLocation.getState();\n }\n historyGo(relativePosition = 0) {\n this._platformLocation.historyGo?.(relativePosition);\n }\n static \u0275fac = function PathLocationStrategy_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || PathLocationStrategy)(i0.\u0275\u0275inject(PlatformLocation), i0.\u0275\u0275inject(APP_BASE_HREF, 8));\n };\n static \u0275prov = /* @__PURE__ */i0.\u0275\u0275defineInjectable({\n token: PathLocationStrategy,\n factory: PathLocationStrategy.\u0275fac,\n providedIn: 'root'\n });\n }\n return PathLocationStrategy;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet NoTrailingSlashPathLocationStrategy = /*#__PURE__*/(() => {\n class NoTrailingSlashPathLocationStrategy extends PathLocationStrategy {\n prepareExternalUrl(internal) {\n const path = extractUrlPath(internal);\n if (path.endsWith('/') && path.length > 1) {\n internal = path.slice(0, -1) + internal.slice(path.length);\n }\n return super.prepareExternalUrl(internal);\n }\n static \u0275fac = /* @__PURE__ */(() => {\n let \u0275NoTrailingSlashPathLocationStrategy_BaseFactory;\n return function NoTrailingSlashPathLocationStrategy_Factory(__ngFactoryType__) {\n return (\u0275NoTrailingSlashPathLocationStrategy_BaseFactory || (\u0275NoTrailingSlashPathLocationStrategy_BaseFactory = i0.\u0275\u0275getInheritedFactory(NoTrailingSlashPathLocationStrategy)))(__ngFactoryType__ || NoTrailingSlashPathLocationStrategy);\n };\n })();\n static \u0275prov = /* @__PURE__ */i0.\u0275\u0275defineInjectable({\n token: NoTrailingSlashPathLocationStrategy,\n factory: NoTrailingSlashPathLocationStrategy.\u0275fac,\n providedIn: 'root'\n });\n }\n return NoTrailingSlashPathLocationStrategy;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet TrailingSlashPathLocationStrategy = /*#__PURE__*/(() => {\n class TrailingSlashPathLocationStrategy extends PathLocationStrategy {\n prepareExternalUrl(internal) {\n const path = extractUrlPath(internal);\n if (!path.endsWith('/')) {\n internal = path + '/' + internal.slice(path.length);\n }\n return super.prepareExternalUrl(internal);\n }\n static \u0275fac = /* @__PURE__ */(() => {\n let \u0275TrailingSlashPathLocationStrategy_BaseFactory;\n return function TrailingSlashPathLocationStrategy_Factory(__ngFactoryType__) {\n return (\u0275TrailingSlashPathLocationStrategy_BaseFactory || (\u0275TrailingSlashPathLocationStrategy_BaseFactory = i0.\u0275\u0275getInheritedFactory(TrailingSlashPathLocationStrategy)))(__ngFactoryType__ || TrailingSlashPathLocationStrategy);\n };\n })();\n static \u0275prov = /* @__PURE__ */i0.\u0275\u0275defineInjectable({\n token: TrailingSlashPathLocationStrategy,\n factory: TrailingSlashPathLocationStrategy.\u0275fac,\n providedIn: 'root'\n });\n }\n return TrailingSlashPathLocationStrategy;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nfunction extractUrlPath(url) {\n const questionMarkOrHashIndex = url.search(/[?#]/);\n const pathEnd = questionMarkOrHashIndex > -1 ? questionMarkOrHashIndex : url.length;\n return url.slice(0, pathEnd);\n}\nlet Location = /*#__PURE__*/(() => {\n class Location {\n _subject = new Subject();\n _basePath;\n _locationStrategy;\n _urlChangeListeners = [];\n _urlChangeSubscription = null;\n constructor(locationStrategy) {\n this._locationStrategy = locationStrategy;\n const baseHref = this._locationStrategy.getBaseHref();\n this._basePath = _stripOrigin(stripTrailingSlash(_stripIndexHtml(baseHref)));\n this._locationStrategy.onPopState(ev => {\n this._subject.next({\n 'url': this.path(true),\n 'pop': true,\n 'state': ev.state,\n 'type': ev.type\n });\n });\n }\n ngOnDestroy() {\n this._urlChangeSubscription?.unsubscribe();\n this._urlChangeListeners = [];\n }\n path(includeHash = false) {\n return this.normalize(this._locationStrategy.path(includeHash));\n }\n getState() {\n return this._locationStrategy.getState();\n }\n isCurrentPathEqualTo(path, query = '') {\n return this.path() == this.normalize(path + normalizeQueryParams(query));\n }\n normalize(url) {\n return Location.stripTrailingSlash(_stripBasePath(this._basePath, _stripIndexHtml(url)));\n }\n prepareExternalUrl(url) {\n if (url && url[0] !== '/') {\n url = '/' + url;\n }\n return this._locationStrategy.prepareExternalUrl(url);\n }\n go(path, query = '', state = null) {\n this._locationStrategy.pushState(state, '', path, query);\n this._notifyUrlChangeListeners(this.prepareExternalUrl(path + normalizeQueryParams(query)), state);\n }\n replaceState(path, query = '', state = null) {\n this._locationStrategy.replaceState(state, '', path, query);\n this._notifyUrlChangeListeners(this.prepareExternalUrl(path + normalizeQueryParams(query)), state);\n }\n forward() {\n this._locationStrategy.forward();\n }\n back() {\n this._locationStrategy.back();\n }\n historyGo(relativePosition = 0) {\n this._locationStrategy.historyGo?.(relativePosition);\n }\n onUrlChange(fn) {\n this._urlChangeListeners.push(fn);\n this._urlChangeSubscription ??= this.subscribe(v => {\n this._notifyUrlChangeListeners(v.url, v.state);\n });\n return () => {\n const fnIndex = this._urlChangeListeners.indexOf(fn);\n this._urlChangeListeners.splice(fnIndex, 1);\n if (this._urlChangeListeners.length === 0) {\n this._urlChangeSubscription?.unsubscribe();\n this._urlChangeSubscription = null;\n }\n };\n }\n _notifyUrlChangeListeners(url = '', state) {\n this._urlChangeListeners.forEach(fn => fn(url, state));\n }\n subscribe(onNext, onThrow, onReturn) {\n return this._subject.subscribe({\n next: onNext,\n error: onThrow ?? undefined,\n complete: onReturn ?? undefined\n });\n }\n static normalizeQueryParams = normalizeQueryParams;\n static joinWithSlash = joinWithSlash;\n static stripTrailingSlash = stripTrailingSlash;\n static \u0275fac = function Location_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || Location)(i0.\u0275\u0275inject(LocationStrategy));\n };\n static \u0275prov = /* @__PURE__ */i0.\u0275\u0275defineInjectable({\n token: Location,\n factory: () => createLocation(),\n providedIn: 'root'\n });\n }\n return Location;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nfunction createLocation() {\n return new Location(__inject(LocationStrategy));\n}\nfunction _stripBasePath(basePath, url) {\n if (!basePath || !url.startsWith(basePath)) {\n return url;\n }\n const strippedUrl = url.substring(basePath.length);\n if (strippedUrl === '' || ['/', ';', '?', '#'].includes(strippedUrl[0])) {\n return strippedUrl;\n }\n return url;\n}\nfunction _stripIndexHtml(url) {\n return url.replace(/\\/index.html$/, '');\n}\nfunction _stripOrigin(baseHref) {\n const isAbsoluteUrl = new RegExp('^(https?:)?//').test(baseHref);\n if (isAbsoluteUrl) {\n const [, pathname] = baseHref.split(/\\/\\/[^\\/]+/);\n return pathname;\n }\n return baseHref;\n}\nexport { APP_BASE_HREF, Location, LocationStrategy, NoTrailingSlashPathLocationStrategy, PathLocationStrategy, TrailingSlashPathLocationStrategy, joinWithSlash, normalizeQueryParams };\n","/**\n * @license Angular v21.2.4\n * (c) 2010-2026 Google LLC. https://angular.dev/\n * License: MIT\n */\n\nimport * as i0 from '@angular/core';\nimport { Injectable, Optional, Inject, \u0275findLocaleData as _findLocaleData, \u0275LocaleDataIndex as _LocaleDataIndex, \u0275getLocaleCurrencyCode as _getLocaleCurrencyCode, \u0275getLocalePluralCase as _getLocalePluralCase, \u0275RuntimeError as _RuntimeError, \u0275formatRuntimeError as _formatRuntimeError, inject, LOCALE_ID, \u0275stringify as _stringify, Directive, Input, createNgModule, NgModuleRef, Host, Attribute, RendererStyleFlags2, Injector, isSignal, \u0275INTERNAL_APPLICATION_ERROR_HANDLER as _INTERNAL_APPLICATION_ERROR_HANDLER, \u0275isPromise as _isPromise, \u0275isSubscribable as _isSubscribable, Pipe, untracked, InjectionToken, DEFAULT_CURRENCY_CODE, NgModule } from '@angular/core';\nimport { LocationStrategy, joinWithSlash, normalizeQueryParams, APP_BASE_HREF } from './_location-chunk.mjs';\nimport { PlatformLocation } from './_platform_location-chunk.mjs';\nlet HashLocationStrategy = /*#__PURE__*/(() => {\n class HashLocationStrategy extends LocationStrategy {\n _platformLocation;\n _baseHref = '';\n _removeListenerFns = [];\n constructor(_platformLocation, _baseHref) {\n super();\n this._platformLocation = _platformLocation;\n if (_baseHref != null) {\n this._baseHref = _baseHref;\n }\n }\n ngOnDestroy() {\n while (this._removeListenerFns.length) {\n this._removeListenerFns.pop()();\n }\n }\n onPopState(fn) {\n this._removeListenerFns.push(this._platformLocation.onPopState(fn), this._platformLocation.onHashChange(fn));\n }\n getBaseHref() {\n return this._baseHref;\n }\n path(includeHash = false) {\n const path = this._platformLocation.hash ?? '#';\n return path.length > 0 ? path.substring(1) : path;\n }\n prepareExternalUrl(internal) {\n const url = joinWithSlash(this._baseHref, internal);\n return url.length > 0 ? '#' + url : url;\n }\n pushState(state, title, path, queryParams) {\n const url = this.prepareExternalUrl(path + normalizeQueryParams(queryParams)) || this._platformLocation.pathname;\n this._platformLocation.pushState(state, title, url);\n }\n replaceState(state, title, path, queryParams) {\n const url = this.prepareExternalUrl(path + normalizeQueryParams(queryParams)) || this._platformLocation.pathname;\n this._platformLocation.replaceState(state, title, url);\n }\n forward() {\n this._platformLocation.forward();\n }\n back() {\n this._platformLocation.back();\n }\n getState() {\n return this._platformLocation.getState();\n }\n historyGo(relativePosition = 0) {\n this._platformLocation.historyGo?.(relativePosition);\n }\n static \u0275fac = function HashLocationStrategy_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || HashLocationStrategy)(i0.\u0275\u0275inject(PlatformLocation), i0.\u0275\u0275inject(APP_BASE_HREF, 8));\n };\n static \u0275prov = /* @__PURE__ */i0.\u0275\u0275defineInjectable({\n token: HashLocationStrategy,\n factory: HashLocationStrategy.\u0275fac\n });\n }\n return HashLocationStrategy;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst CURRENCIES_EN = {\n \"ADP\": [undefined, undefined, 0],\n \"AFN\": [undefined, \"\u060B\", 0],\n \"ALL\": [undefined, undefined, 0],\n \"AMD\": [undefined, \"\u058F\", 2],\n \"AOA\": [undefined, \"Kz\"],\n \"ARS\": [undefined, \"$\"],\n \"AUD\": [\"A$\", \"$\"],\n \"AZN\": [undefined, \"\u20BC\"],\n \"BAM\": [undefined, \"KM\"],\n \"BBD\": [undefined, \"$\"],\n \"BDT\": [undefined, \"\u09F3\"],\n \"BHD\": [undefined, undefined, 3],\n \"BIF\": [undefined, undefined, 0],\n \"BMD\": [undefined, \"$\"],\n \"BND\": [undefined, \"$\"],\n \"BOB\": [undefined, \"Bs\"],\n \"BRL\": [\"R$\"],\n \"BSD\": [undefined, \"$\"],\n \"BWP\": [undefined, \"P\"],\n \"BYN\": [undefined, undefined, 2],\n \"BYR\": [undefined, undefined, 0],\n \"BZD\": [undefined, \"$\"],\n \"CAD\": [\"CA$\", \"$\", 2],\n \"CHF\": [undefined, undefined, 2],\n \"CLF\": [undefined, undefined, 4],\n \"CLP\": [undefined, \"$\", 0],\n \"CNY\": [\"CN\xA5\", \"\xA5\"],\n \"COP\": [undefined, \"$\", 2],\n \"CRC\": [undefined, \"\u20A1\", 2],\n \"CUC\": [undefined, \"$\"],\n \"CUP\": [undefined, \"$\"],\n \"CZK\": [undefined, \"K\u010D\", 2],\n \"DJF\": [undefined, undefined, 0],\n \"DKK\": [undefined, \"kr\", 2],\n \"DOP\": [undefined, \"$\"],\n \"EGP\": [undefined, \"E\xA3\"],\n \"ESP\": [undefined, \"\u20A7\", 0],\n \"EUR\": [\"\u20AC\"],\n \"FJD\": [undefined, \"$\"],\n \"FKP\": [undefined, \"\xA3\"],\n \"GBP\": [\"\xA3\"],\n \"GEL\": [undefined, \"\u20BE\"],\n \"GHS\": [undefined, \"GH\u20B5\"],\n \"GIP\": [undefined, \"\xA3\"],\n \"GNF\": [undefined, \"FG\", 0],\n \"GTQ\": [undefined, \"Q\"],\n \"GYD\": [undefined, \"$\", 2],\n \"HKD\": [\"HK$\", \"$\"],\n \"HNL\": [undefined, \"L\"],\n \"HRK\": [undefined, \"kn\"],\n \"HUF\": [undefined, \"Ft\", 2],\n \"IDR\": [undefined, \"Rp\", 2],\n \"ILS\": [\"\u20AA\"],\n \"INR\": [\"\u20B9\"],\n \"IQD\": [undefined, undefined, 0],\n \"IRR\": [undefined, undefined, 0],\n \"ISK\": [undefined, \"kr\", 0],\n \"ITL\": [undefined, undefined, 0],\n \"JMD\": [undefined, \"$\"],\n \"JOD\": [undefined, undefined, 3],\n \"JPY\": [\"\xA5\", undefined, 0],\n \"KGS\": [undefined, \"\u20C0\"],\n \"KHR\": [undefined, \"\u17DB\"],\n \"KMF\": [undefined, \"CF\", 0],\n \"KPW\": [undefined, \"\u20A9\", 0],\n \"KRW\": [\"\u20A9\", undefined, 0],\n \"KWD\": [undefined, undefined, 3],\n \"KYD\": [undefined, \"$\"],\n \"KZT\": [undefined, \"\u20B8\"],\n \"LAK\": [undefined, \"\u20AD\", 0],\n \"LBP\": [undefined, \"L\xA3\", 0],\n \"LKR\": [undefined, \"Rs\"],\n \"LRD\": [undefined, \"$\"],\n \"LTL\": [undefined, \"Lt\"],\n \"LUF\": [undefined, undefined, 0],\n \"LVL\": [undefined, \"Ls\"],\n \"LYD\": [undefined, undefined, 3],\n \"MGA\": [undefined, \"Ar\", 0],\n \"MGF\": [undefined, undefined, 0],\n \"MMK\": [undefined, \"K\", 0],\n \"MNT\": [undefined, \"\u20AE\", 2],\n \"MRO\": [undefined, undefined, 0],\n \"MUR\": [undefined, \"Rs\", 2],\n \"MXN\": [\"MX$\", \"$\"],\n \"MYR\": [undefined, \"RM\"],\n \"NAD\": [undefined, \"$\"],\n \"NGN\": [undefined, \"\u20A6\"],\n \"NIO\": [undefined, \"C$\"],\n \"NOK\": [undefined, \"kr\", 2],\n \"NPR\": [undefined, \"Rs\"],\n \"NZD\": [\"NZ$\", \"$\"],\n \"OMR\": [undefined, undefined, 3],\n \"PHP\": [\"\u20B1\"],\n \"PKR\": [undefined, \"Rs\", 2],\n \"PLN\": [undefined, \"z\u0142\"],\n \"PYG\": [undefined, \"\u20B2\", 0],\n \"RON\": [undefined, \"lei\"],\n \"RSD\": [undefined, undefined, 0],\n \"RUB\": [undefined, \"\u20BD\"],\n \"RWF\": [undefined, \"RF\", 0],\n \"SBD\": [undefined, \"$\"],\n \"SEK\": [undefined, \"kr\", 2],\n \"SGD\": [undefined, \"$\"],\n \"SHP\": [undefined, \"\xA3\"],\n \"SLE\": [undefined, undefined, 2],\n \"SLL\": [undefined, undefined, 0],\n \"SOS\": [undefined, undefined, 0],\n \"SRD\": [undefined, \"$\"],\n \"SSP\": [undefined, \"\xA3\"],\n \"STD\": [undefined, undefined, 0],\n \"STN\": [undefined, \"Db\"],\n \"SYP\": [undefined, \"\xA3\", 0],\n \"THB\": [undefined, \"\u0E3F\"],\n \"TMM\": [undefined, undefined, 0],\n \"TND\": [undefined, undefined, 3],\n \"TOP\": [undefined, \"T$\"],\n \"TRL\": [undefined, undefined, 0],\n \"TRY\": [undefined, \"\u20BA\"],\n \"TTD\": [undefined, \"$\"],\n \"TWD\": [\"NT$\", \"$\", 2],\n \"TZS\": [undefined, undefined, 2],\n \"UAH\": [undefined, \"\u20B4\"],\n \"UGX\": [undefined, undefined, 0],\n \"USD\": [\"$\"],\n \"UYI\": [undefined, undefined, 0],\n \"UYU\": [undefined, \"$\"],\n \"UYW\": [undefined, undefined, 4],\n \"UZS\": [undefined, undefined, 2],\n \"VEF\": [undefined, \"Bs\", 2],\n \"VND\": [\"\u20AB\", undefined, 0],\n \"VUV\": [undefined, undefined, 0],\n \"XAF\": [\"FCFA\", undefined, 0],\n \"XCD\": [\"EC$\", \"$\"],\n \"XCG\": [\"Cg.\"],\n \"XOF\": [\"F\u202FCFA\", undefined, 0],\n \"XPF\": [\"CFPF\", undefined, 0],\n \"XXX\": [\"\xA4\"],\n \"YER\": [undefined, undefined, 0],\n \"ZAR\": [undefined, \"R\"],\n \"ZMK\": [undefined, undefined, 0],\n \"ZMW\": [undefined, \"ZK\"],\n \"ZWD\": [undefined, undefined, 0]\n};\nvar NumberFormatStyle = /*#__PURE__*/function (NumberFormatStyle) {\n NumberFormatStyle[NumberFormatStyle[\"Decimal\"] = 0] = \"Decimal\";\n NumberFormatStyle[NumberFormatStyle[\"Percent\"] = 1] = \"Percent\";\n NumberFormatStyle[NumberFormatStyle[\"Currency\"] = 2] = \"Currency\";\n NumberFormatStyle[NumberFormatStyle[\"Scientific\"] = 3] = \"Scientific\";\n return NumberFormatStyle;\n}(NumberFormatStyle || {});\nvar Plural = /*#__PURE__*/function (Plural) {\n Plural[Plural[\"Zero\"] = 0] = \"Zero\";\n Plural[Plural[\"One\"] = 1] = \"One\";\n Plural[Plural[\"Two\"] = 2] = \"Two\";\n Plural[Plural[\"Few\"] = 3] = \"Few\";\n Plural[Plural[\"Many\"] = 4] = \"Many\";\n Plural[Plural[\"Other\"] = 5] = \"Other\";\n return Plural;\n}(Plural || {});\nvar FormStyle = /*#__PURE__*/function (FormStyle) {\n FormStyle[FormStyle[\"Format\"] = 0] = \"Format\";\n FormStyle[FormStyle[\"Standalone\"] = 1] = \"Standalone\";\n return FormStyle;\n}(FormStyle || {});\nvar TranslationWidth = /*#__PURE__*/function (TranslationWidth) {\n TranslationWidth[TranslationWidth[\"Narrow\"] = 0] = \"Narrow\";\n TranslationWidth[TranslationWidth[\"Abbreviated\"] = 1] = \"Abbreviated\";\n TranslationWidth[TranslationWidth[\"Wide\"] = 2] = \"Wide\";\n TranslationWidth[TranslationWidth[\"Short\"] = 3] = \"Short\";\n return TranslationWidth;\n}(TranslationWidth || {});\nvar FormatWidth = /*#__PURE__*/function (FormatWidth) {\n FormatWidth[FormatWidth[\"Short\"] = 0] = \"Short\";\n FormatWidth[FormatWidth[\"Medium\"] = 1] = \"Medium\";\n FormatWidth[FormatWidth[\"Long\"] = 2] = \"Long\";\n FormatWidth[FormatWidth[\"Full\"] = 3] = \"Full\";\n return FormatWidth;\n}(FormatWidth || {});\nconst NumberSymbol = {\n Decimal: 0,\n Group: 1,\n List: 2,\n PercentSign: 3,\n PlusSign: 4,\n MinusSign: 5,\n Exponential: 6,\n SuperscriptingExponent: 7,\n PerMille: 8,\n Infinity: 9,\n NaN: 10,\n TimeSeparator: 11,\n CurrencyDecimal: 12,\n CurrencyGroup: 13\n};\nvar WeekDay = /*#__PURE__*/function (WeekDay) {\n WeekDay[WeekDay[\"Sunday\"] = 0] = \"Sunday\";\n WeekDay[WeekDay[\"Monday\"] = 1] = \"Monday\";\n WeekDay[WeekDay[\"Tuesday\"] = 2] = \"Tuesday\";\n WeekDay[WeekDay[\"Wednesday\"] = 3] = \"Wednesday\";\n WeekDay[WeekDay[\"Thursday\"] = 4] = \"Thursday\";\n WeekDay[WeekDay[\"Friday\"] = 5] = \"Friday\";\n WeekDay[WeekDay[\"Saturday\"] = 6] = \"Saturday\";\n return WeekDay;\n}(WeekDay || {});\nfunction getLocaleId(locale) {\n return _findLocaleData(locale)[_LocaleDataIndex.LocaleId];\n}\nfunction getLocaleDayPeriods(locale, formStyle, width) {\n const data = _findLocaleData(locale);\n const amPmData = [data[_LocaleDataIndex.DayPeriodsFormat], data[_LocaleDataIndex.DayPeriodsStandalone]];\n const amPm = getLastDefinedValue(amPmData, formStyle);\n return getLastDefinedValue(amPm, width);\n}\nfunction getLocaleDayNames(locale, formStyle, width) {\n const data = _findLocaleData(locale);\n const daysData = [data[_LocaleDataIndex.DaysFormat], data[_LocaleDataIndex.DaysStandalone]];\n const days = getLastDefinedValue(daysData, formStyle);\n return getLastDefinedValue(days, width);\n}\nfunction getLocaleMonthNames(locale, formStyle, width) {\n const data = _findLocaleData(locale);\n const monthsData = [data[_LocaleDataIndex.MonthsFormat], data[_LocaleDataIndex.MonthsStandalone]];\n const months = getLastDefinedValue(monthsData, formStyle);\n return getLastDefinedValue(months, width);\n}\nfunction getLocaleEraNames(locale, width) {\n const data = _findLocaleData(locale);\n const erasData = data[_LocaleDataIndex.Eras];\n return getLastDefinedValue(erasData, width);\n}\nfunction getLocaleFirstDayOfWeek(locale) {\n const data = _findLocaleData(locale);\n return data[_LocaleDataIndex.FirstDayOfWeek];\n}\nfunction getLocaleWeekEndRange(locale) {\n const data = _findLocaleData(locale);\n return data[_LocaleDataIndex.WeekendRange];\n}\nfunction getLocaleDateFormat(locale, width) {\n const data = _findLocaleData(locale);\n return getLastDefinedValue(data[_LocaleDataIndex.DateFormat], width);\n}\nfunction getLocaleTimeFormat(locale, width) {\n const data = _findLocaleData(locale);\n return getLastDefinedValue(data[_LocaleDataIndex.TimeFormat], width);\n}\nfunction getLocaleDateTimeFormat(locale, width) {\n const data = _findLocaleData(locale);\n const dateTimeFormatData = data[_LocaleDataIndex.DateTimeFormat];\n return getLastDefinedValue(dateTimeFormatData, width);\n}\nfunction getLocaleNumberSymbol(locale, symbol) {\n const data = _findLocaleData(locale);\n const res = data[_LocaleDataIndex.NumberSymbols][symbol];\n if (typeof res === 'undefined') {\n if (symbol === NumberSymbol.CurrencyDecimal) {\n return data[_LocaleDataIndex.NumberSymbols][NumberSymbol.Decimal];\n } else if (symbol === NumberSymbol.CurrencyGroup) {\n return data[_LocaleDataIndex.NumberSymbols][NumberSymbol.Group];\n }\n }\n return res;\n}\nfunction getLocaleNumberFormat(locale, type) {\n const data = _findLocaleData(locale);\n return data[_LocaleDataIndex.NumberFormats][type];\n}\nfunction getLocaleCurrencySymbol(locale) {\n const data = _findLocaleData(locale);\n return data[_LocaleDataIndex.CurrencySymbol] || null;\n}\nfunction getLocaleCurrencyName(locale) {\n const data = _findLocaleData(locale);\n return data[_LocaleDataIndex.CurrencyName] || null;\n}\nfunction getLocaleCurrencyCode(locale) {\n return _getLocaleCurrencyCode(locale);\n}\nfunction getLocaleCurrencies(locale) {\n const data = _findLocaleData(locale);\n return data[_LocaleDataIndex.Currencies];\n}\nconst getLocalePluralCase = _getLocalePluralCase;\nfunction checkFullData(data) {\n if (!data[_LocaleDataIndex.ExtraData]) {\n throw new _RuntimeError(2303, ngDevMode && `Missing extra locale data for the locale \"${data[_LocaleDataIndex.LocaleId]}\". Use \"registerLocaleData\" to load new data. See the \"I18n guide\" on angular.io to know more.`);\n }\n}\nfunction getLocaleExtraDayPeriodRules(locale) {\n const data = _findLocaleData(locale);\n checkFullData(data);\n const rules = data[_LocaleDataIndex.ExtraData][2] || [];\n return rules.map(rule => {\n if (typeof rule === 'string') {\n return extractTime(rule);\n }\n return [extractTime(rule[0]), extractTime(rule[1])];\n });\n}\nfunction getLocaleExtraDayPeriods(locale, formStyle, width) {\n const data = _findLocaleData(locale);\n checkFullData(data);\n const dayPeriodsData = [data[_LocaleDataIndex.ExtraData][0], data[_LocaleDataIndex.ExtraData][1]];\n const dayPeriods = getLastDefinedValue(dayPeriodsData, formStyle) || [];\n return getLastDefinedValue(dayPeriods, width) || [];\n}\nfunction getLocaleDirection(locale) {\n const data = _findLocaleData(locale);\n return data[_LocaleDataIndex.Directionality];\n}\nfunction getLastDefinedValue(data, index) {\n for (let i = index; i > -1; i--) {\n if (typeof data[i] !== 'undefined') {\n return data[i];\n }\n }\n throw new _RuntimeError(2304, ngDevMode && 'Locale data API: locale data undefined');\n}\nfunction extractTime(time) {\n const [h, m] = time.split(':');\n return {\n hours: +h,\n minutes: +m\n };\n}\nfunction getCurrencySymbol(code, format, locale = 'en') {\n const currency = getLocaleCurrencies(locale)[code] || CURRENCIES_EN[code] || [];\n const symbolNarrow = currency[1];\n if (format === 'narrow' && typeof symbolNarrow === 'string') {\n return symbolNarrow;\n }\n return currency[0] || code;\n}\nconst DEFAULT_NB_OF_CURRENCY_DIGITS = 2;\nfunction getNumberOfCurrencyDigits(code) {\n let digits;\n const currency = CURRENCIES_EN[code];\n if (currency) {\n digits = currency[2];\n }\n return typeof digits === 'number' ? digits : DEFAULT_NB_OF_CURRENCY_DIGITS;\n}\nconst ISO8601_DATE_REGEX = /^(\\d{4,})-?(\\d\\d)-?(\\d\\d)(?:T(\\d\\d)(?::?(\\d\\d)(?::?(\\d\\d)(?:\\.(\\d+))?)?)?(Z|([+-])(\\d\\d):?(\\d\\d))?)?$/;\nconst NAMED_FORMATS = {};\nconst DATE_FORMATS_SPLIT = /((?:[^BEGHLMOSWYZabcdhmswyz']+)|(?:'(?:[^']|'')*')|(?:G{1,5}|y{1,4}|Y{1,4}|M{1,5}|L{1,5}|w{1,2}|W{1}|d{1,2}|E{1,6}|c{1,6}|a{1,5}|b{1,5}|B{1,5}|h{1,2}|H{1,2}|m{1,2}|s{1,2}|S{1,3}|z{1,4}|Z{1,5}|O{1,4}))([\\s\\S]*)/;\nfunction formatDate(value, format, locale, timezone) {\n let date = toDate(value);\n const namedFormat = getNamedFormat(locale, format);\n format = namedFormat || format;\n let parts = [];\n let match;\n while (format) {\n match = DATE_FORMATS_SPLIT.exec(format);\n if (match) {\n parts = parts.concat(match.slice(1));\n const part = parts.pop();\n if (!part) {\n break;\n }\n format = part;\n } else {\n parts.push(format);\n break;\n }\n }\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n assertValidDateFormat(parts);\n }\n let dateTimezoneOffset = date.getTimezoneOffset();\n if (timezone) {\n dateTimezoneOffset = timezoneToOffset(timezone, dateTimezoneOffset);\n date = convertTimezoneToLocal(date, timezone);\n }\n let text = '';\n parts.forEach(value => {\n const dateFormatter = getDateFormatter(value);\n text += dateFormatter ? dateFormatter(date, locale, dateTimezoneOffset) : value === \"''\" ? \"'\" : value.replace(/(^'|'$)/g, '').replace(/''/g, \"'\");\n });\n return text;\n}\nfunction assertValidDateFormat(parts) {\n if (parts.some(part => /^Y+$/.test(part)) && !parts.some(part => /^w+$/.test(part))) {\n const message = `Suspicious use of week-based year \"Y\" in date pattern \"${parts.join('')}\". Did you mean to use calendar year \"y\" instead?`;\n if (parts.length === 1) {\n console.error(_formatRuntimeError(2300, message));\n } else {\n throw new _RuntimeError(2300, message);\n }\n }\n}\nfunction createDate(year, month, date) {\n const newDate = new Date(0);\n newDate.setFullYear(year, month, date);\n newDate.setHours(0, 0, 0);\n return newDate;\n}\nfunction getNamedFormat(locale, format) {\n const localeId = getLocaleId(locale);\n NAMED_FORMATS[localeId] ??= {};\n if (NAMED_FORMATS[localeId][format]) {\n return NAMED_FORMATS[localeId][format];\n }\n let formatValue = '';\n switch (format) {\n case 'shortDate':\n formatValue = getLocaleDateFormat(locale, FormatWidth.Short);\n break;\n case 'mediumDate':\n formatValue = getLocaleDateFormat(locale, FormatWidth.Medium);\n break;\n case 'longDate':\n formatValue = getLocaleDateFormat(locale, FormatWidth.Long);\n break;\n case 'fullDate':\n formatValue = getLocaleDateFormat(locale, FormatWidth.Full);\n break;\n case 'shortTime':\n formatValue = getLocaleTimeFormat(locale, FormatWidth.Short);\n break;\n case 'mediumTime':\n formatValue = getLocaleTimeFormat(locale, FormatWidth.Medium);\n break;\n case 'longTime':\n formatValue = getLocaleTimeFormat(locale, FormatWidth.Long);\n break;\n case 'fullTime':\n formatValue = getLocaleTimeFormat(locale, FormatWidth.Full);\n break;\n case 'short':\n const shortTime = getNamedFormat(locale, 'shortTime');\n const shortDate = getNamedFormat(locale, 'shortDate');\n formatValue = formatDateTime(getLocaleDateTimeFormat(locale, FormatWidth.Short), [shortTime, shortDate]);\n break;\n case 'medium':\n const mediumTime = getNamedFormat(locale, 'mediumTime');\n const mediumDate = getNamedFormat(locale, 'mediumDate');\n formatValue = formatDateTime(getLocaleDateTimeFormat(locale, FormatWidth.Medium), [mediumTime, mediumDate]);\n break;\n case 'long':\n const longTime = getNamedFormat(locale, 'longTime');\n const longDate = getNamedFormat(locale, 'longDate');\n formatValue = formatDateTime(getLocaleDateTimeFormat(locale, FormatWidth.Long), [longTime, longDate]);\n break;\n case 'full':\n const fullTime = getNamedFormat(locale, 'fullTime');\n const fullDate = getNamedFormat(locale, 'fullDate');\n formatValue = formatDateTime(getLocaleDateTimeFormat(locale, FormatWidth.Full), [fullTime, fullDate]);\n break;\n }\n if (formatValue) {\n NAMED_FORMATS[localeId][format] = formatValue;\n }\n return formatValue;\n}\nfunction formatDateTime(str, opt_values) {\n if (opt_values) {\n str = str.replace(/\\{([^}]+)}/g, function (match, key) {\n return opt_values != null && key in opt_values ? opt_values[key] : match;\n });\n }\n return str;\n}\nfunction padNumber(num, digits, minusSign = '-', trim, negWrap) {\n let neg = '';\n if (num < 0 || negWrap && num <= 0) {\n if (negWrap) {\n num = -num + 1;\n } else {\n num = -num;\n neg = minusSign;\n }\n }\n let strNum = String(num);\n while (strNum.length < digits) {\n strNum = '0' + strNum;\n }\n if (trim) {\n strNum = strNum.slice(strNum.length - digits);\n }\n return neg + strNum;\n}\nfunction formatFractionalSeconds(milliseconds, digits) {\n const strMs = padNumber(milliseconds, 3);\n return strMs.substring(0, digits);\n}\nfunction dateGetter(name, size, offset = 0, trim = false, negWrap = false) {\n return function (date, locale) {\n let part = getDatePart(name, date);\n if (offset > 0 || part > -offset) {\n part += offset;\n }\n if (name === 3) {\n if (part === 0 && offset === -12) {\n part = 12;\n }\n } else if (name === 6) {\n return formatFractionalSeconds(part, size);\n }\n const localeMinus = getLocaleNumberSymbol(locale, NumberSymbol.MinusSign);\n return padNumber(part, size, localeMinus, trim, negWrap);\n };\n}\nfunction getDatePart(part, date) {\n switch (part) {\n case 0:\n return date.getFullYear();\n case 1:\n return date.getMonth();\n case 2:\n return date.getDate();\n case 3:\n return date.getHours();\n case 4:\n return date.getMinutes();\n case 5:\n return date.getSeconds();\n case 6:\n return date.getMilliseconds();\n case 7:\n return date.getDay();\n default:\n throw new _RuntimeError(2301, ngDevMode && `Unknown DateType value \"${part}\".`);\n }\n}\nfunction dateStrGetter(name, width, form = FormStyle.Format, extended = false) {\n return function (date, locale) {\n return getDateTranslation(date, locale, name, width, form, extended);\n };\n}\nfunction getDateTranslation(date, locale, name, width, form, extended) {\n switch (name) {\n case 2:\n return getLocaleMonthNames(locale, form, width)[date.getMonth()];\n case 1:\n return getLocaleDayNames(locale, form, width)[date.getDay()];\n case 0:\n const currentHours = date.getHours();\n const currentMinutes = date.getMinutes();\n if (extended) {\n const rules = getLocaleExtraDayPeriodRules(locale);\n const dayPeriods = getLocaleExtraDayPeriods(locale, form, width);\n const index = rules.findIndex(rule => {\n if (Array.isArray(rule)) {\n const [from, to] = rule;\n const afterFrom = currentHours >= from.hours && currentMinutes >= from.minutes;\n const beforeTo = currentHours < to.hours || currentHours === to.hours && currentMinutes < to.minutes;\n if (from.hours < to.hours) {\n if (afterFrom && beforeTo) {\n return true;\n }\n } else if (afterFrom || beforeTo) {\n return true;\n }\n } else {\n if (rule.hours === currentHours && rule.minutes === currentMinutes) {\n return true;\n }\n }\n return false;\n });\n if (index !== -1) {\n return dayPeriods[index];\n }\n }\n return getLocaleDayPeriods(locale, form, width)[currentHours < 12 ? 0 : 1];\n case 3:\n return getLocaleEraNames(locale, width)[date.getFullYear() <= 0 ? 0 : 1];\n default:\n const unexpected = name;\n throw new _RuntimeError(2302, ngDevMode && `unexpected translation type ${unexpected}`);\n }\n}\nfunction timeZoneGetter(width) {\n return function (date, locale, offset) {\n const zone = -1 * offset;\n const minusSign = getLocaleNumberSymbol(locale, NumberSymbol.MinusSign);\n const hours = zone > 0 ? Math.floor(zone / 60) : Math.ceil(zone / 60);\n switch (width) {\n case 0:\n return (zone >= 0 ? '+' : '') + padNumber(hours, 2, minusSign) + padNumber(Math.abs(zone % 60), 2, minusSign);\n case 1:\n return 'GMT' + (zone >= 0 ? '+' : '') + padNumber(hours, 1, minusSign);\n case 2:\n return 'GMT' + (zone >= 0 ? '+' : '') + padNumber(hours, 2, minusSign) + ':' + padNumber(Math.abs(zone % 60), 2, minusSign);\n case 3:\n if (offset === 0) {\n return 'Z';\n } else {\n return (zone >= 0 ? '+' : '') + padNumber(hours, 2, minusSign) + ':' + padNumber(Math.abs(zone % 60), 2, minusSign);\n }\n default:\n throw new _RuntimeError(2310, ngDevMode && `Unknown zone width \"${width}\"`);\n }\n };\n}\nconst JANUARY = 0;\nconst THURSDAY = 4;\nfunction getFirstThursdayOfYear(year) {\n const firstDayOfYear = createDate(year, JANUARY, 1).getDay();\n return createDate(year, 0, 1 + (firstDayOfYear <= THURSDAY ? THURSDAY : THURSDAY + 7) - firstDayOfYear);\n}\nfunction getThursdayThisIsoWeek(datetime) {\n const currentDay = datetime.getDay();\n const deltaToThursday = currentDay === 0 ? -3 : THURSDAY - currentDay;\n return createDate(datetime.getFullYear(), datetime.getMonth(), datetime.getDate() + deltaToThursday);\n}\nfunction weekGetter(size, monthBased = false) {\n return function (date, locale) {\n let result;\n if (monthBased) {\n const nbDaysBefore1stDayOfMonth = new Date(date.getFullYear(), date.getMonth(), 1).getDay() - 1;\n const today = date.getDate();\n result = 1 + Math.floor((today + nbDaysBefore1stDayOfMonth) / 7);\n } else {\n const thisThurs = getThursdayThisIsoWeek(date);\n const firstThurs = getFirstThursdayOfYear(thisThurs.getFullYear());\n const diff = thisThurs.getTime() - firstThurs.getTime();\n result = 1 + Math.round(diff / 6.048e8);\n }\n return padNumber(result, size, getLocaleNumberSymbol(locale, NumberSymbol.MinusSign));\n };\n}\nfunction weekNumberingYearGetter(size, trim = false) {\n return function (date, locale) {\n const thisThurs = getThursdayThisIsoWeek(date);\n const weekNumberingYear = thisThurs.getFullYear();\n return padNumber(weekNumberingYear, size, getLocaleNumberSymbol(locale, NumberSymbol.MinusSign), trim);\n };\n}\nconst DATE_FORMATS = {};\nfunction getDateFormatter(format) {\n if (DATE_FORMATS[format]) {\n return DATE_FORMATS[format];\n }\n let formatter;\n switch (format) {\n case 'G':\n case 'GG':\n case 'GGG':\n formatter = dateStrGetter(3, TranslationWidth.Abbreviated);\n break;\n case 'GGGG':\n formatter = dateStrGetter(3, TranslationWidth.Wide);\n break;\n case 'GGGGG':\n formatter = dateStrGetter(3, TranslationWidth.Narrow);\n break;\n case 'y':\n formatter = dateGetter(0, 1, 0, false, true);\n break;\n case 'yy':\n formatter = dateGetter(0, 2, 0, true, true);\n break;\n case 'yyy':\n formatter = dateGetter(0, 3, 0, false, true);\n break;\n case 'yyyy':\n formatter = dateGetter(0, 4, 0, false, true);\n break;\n case 'Y':\n formatter = weekNumberingYearGetter(1);\n break;\n case 'YY':\n formatter = weekNumberingYearGetter(2, true);\n break;\n case 'YYY':\n formatter = weekNumberingYearGetter(3);\n break;\n case 'YYYY':\n formatter = weekNumberingYearGetter(4);\n break;\n case 'M':\n case 'L':\n formatter = dateGetter(1, 1, 1);\n break;\n case 'MM':\n case 'LL':\n formatter = dateGetter(1, 2, 1);\n break;\n case 'MMM':\n formatter = dateStrGetter(2, TranslationWidth.Abbreviated);\n break;\n case 'MMMM':\n formatter = dateStrGetter(2, TranslationWidth.Wide);\n break;\n case 'MMMMM':\n formatter = dateStrGetter(2, TranslationWidth.Narrow);\n break;\n case 'LLL':\n formatter = dateStrGetter(2, TranslationWidth.Abbreviated, FormStyle.Standalone);\n break;\n case 'LLLL':\n formatter = dateStrGetter(2, TranslationWidth.Wide, FormStyle.Standalone);\n break;\n case 'LLLLL':\n formatter = dateStrGetter(2, TranslationWidth.Narrow, FormStyle.Standalone);\n break;\n case 'w':\n formatter = weekGetter(1);\n break;\n case 'ww':\n formatter = weekGetter(2);\n break;\n case 'W':\n formatter = weekGetter(1, true);\n break;\n case 'd':\n formatter = dateGetter(2, 1);\n break;\n case 'dd':\n formatter = dateGetter(2, 2);\n break;\n case 'c':\n case 'cc':\n formatter = dateGetter(7, 1);\n break;\n case 'ccc':\n formatter = dateStrGetter(1, TranslationWidth.Abbreviated, FormStyle.Standalone);\n break;\n case 'cccc':\n formatter = dateStrGetter(1, TranslationWidth.Wide, FormStyle.Standalone);\n break;\n case 'ccccc':\n formatter = dateStrGetter(1, TranslationWidth.Narrow, FormStyle.Standalone);\n break;\n case 'cccccc':\n formatter = dateStrGetter(1, TranslationWidth.Short, FormStyle.Standalone);\n break;\n case 'E':\n case 'EE':\n case 'EEE':\n formatter = dateStrGetter(1, TranslationWidth.Abbreviated);\n break;\n case 'EEEE':\n formatter = dateStrGetter(1, TranslationWidth.Wide);\n break;\n case 'EEEEE':\n formatter = dateStrGetter(1, TranslationWidth.Narrow);\n break;\n case 'EEEEEE':\n formatter = dateStrGetter(1, TranslationWidth.Short);\n break;\n case 'a':\n case 'aa':\n case 'aaa':\n formatter = dateStrGetter(0, TranslationWidth.Abbreviated);\n break;\n case 'aaaa':\n formatter = dateStrGetter(0, TranslationWidth.Wide);\n break;\n case 'aaaaa':\n formatter = dateStrGetter(0, TranslationWidth.Narrow);\n break;\n case 'b':\n case 'bb':\n case 'bbb':\n formatter = dateStrGetter(0, TranslationWidth.Abbreviated, FormStyle.Standalone, true);\n break;\n case 'bbbb':\n formatter = dateStrGetter(0, TranslationWidth.Wide, FormStyle.Standalone, true);\n break;\n case 'bbbbb':\n formatter = dateStrGetter(0, TranslationWidth.Narrow, FormStyle.Standalone, true);\n break;\n case 'B':\n case 'BB':\n case 'BBB':\n formatter = dateStrGetter(0, TranslationWidth.Abbreviated, FormStyle.Format, true);\n break;\n case 'BBBB':\n formatter = dateStrGetter(0, TranslationWidth.Wide, FormStyle.Format, true);\n break;\n case 'BBBBB':\n formatter = dateStrGetter(0, TranslationWidth.Narrow, FormStyle.Format, true);\n break;\n case 'h':\n formatter = dateGetter(3, 1, -12);\n break;\n case 'hh':\n formatter = dateGetter(3, 2, -12);\n break;\n case 'H':\n formatter = dateGetter(3, 1);\n break;\n case 'HH':\n formatter = dateGetter(3, 2);\n break;\n case 'm':\n formatter = dateGetter(4, 1);\n break;\n case 'mm':\n formatter = dateGetter(4, 2);\n break;\n case 's':\n formatter = dateGetter(5, 1);\n break;\n case 'ss':\n formatter = dateGetter(5, 2);\n break;\n case 'S':\n formatter = dateGetter(6, 1);\n break;\n case 'SS':\n formatter = dateGetter(6, 2);\n break;\n case 'SSS':\n formatter = dateGetter(6, 3);\n break;\n case 'Z':\n case 'ZZ':\n case 'ZZZ':\n formatter = timeZoneGetter(0);\n break;\n case 'ZZZZZ':\n formatter = timeZoneGetter(3);\n break;\n case 'O':\n case 'OO':\n case 'OOO':\n case 'z':\n case 'zz':\n case 'zzz':\n formatter = timeZoneGetter(1);\n break;\n case 'OOOO':\n case 'ZZZZ':\n case 'zzzz':\n formatter = timeZoneGetter(2);\n break;\n default:\n return null;\n }\n DATE_FORMATS[format] = formatter;\n return formatter;\n}\nfunction timezoneToOffset(timezone, fallback) {\n timezone = timezone.replace(/:/g, '');\n const requestedTimezoneOffset = Date.parse('Jan 01, 1970 00:00:00 ' + timezone) / 60000;\n return isNaN(requestedTimezoneOffset) ? fallback : requestedTimezoneOffset;\n}\nfunction addDateMinutes(date, minutes) {\n date = new Date(date.getTime());\n date.setMinutes(date.getMinutes() + minutes);\n return date;\n}\nfunction convertTimezoneToLocal(date, timezone, reverse) {\n const reverseValue = -1;\n const dateTimezoneOffset = date.getTimezoneOffset();\n const timezoneOffset = timezoneToOffset(timezone, dateTimezoneOffset);\n return addDateMinutes(date, reverseValue * (timezoneOffset - dateTimezoneOffset));\n}\nfunction toDate(value) {\n if (isDate(value)) {\n return value;\n }\n if (typeof value === 'number' && !isNaN(value)) {\n return new Date(value);\n }\n if (typeof value === 'string') {\n value = value.trim();\n if (/^(\\d{4}(-\\d{1,2}(-\\d{1,2})?)?)$/.test(value)) {\n const [y, m = 1, d = 1] = value.split('-').map(val => +val);\n return createDate(y, m - 1, d);\n }\n const parsedNb = parseFloat(value);\n if (!isNaN(value - parsedNb)) {\n return new Date(parsedNb);\n }\n let match;\n if (match = value.match(ISO8601_DATE_REGEX)) {\n return isoStringToDate(match);\n }\n }\n const date = new Date(value);\n if (!isDate(date)) {\n throw new _RuntimeError(2311, ngDevMode && `Unable to convert \"${value}\" into a date`);\n }\n return date;\n}\nfunction isoStringToDate(match) {\n const date = new Date(0);\n let tzHour = 0;\n let tzMin = 0;\n const dateSetter = match[8] ? date.setUTCFullYear : date.setFullYear;\n const timeSetter = match[8] ? date.setUTCHours : date.setHours;\n if (match[9]) {\n tzHour = Number(match[9] + match[10]);\n tzMin = Number(match[9] + match[11]);\n }\n dateSetter.call(date, Number(match[1]), Number(match[2]) - 1, Number(match[3]));\n const h = Number(match[4] || 0) - tzHour;\n const m = Number(match[5] || 0) - tzMin;\n const s = Number(match[6] || 0);\n const ms = Math.floor(parseFloat('0.' + (match[7] || 0)) * 1000);\n timeSetter.call(date, h, m, s, ms);\n return date;\n}\nfunction isDate(value) {\n return value instanceof Date && !isNaN(value.valueOf());\n}\nconst NUMBER_FORMAT_REGEXP = /^(\\d+)?\\.((\\d+)(-(\\d+))?)?$/;\nconst MAX_DIGITS = 22;\nconst DECIMAL_SEP = '.';\nconst ZERO_CHAR = '0';\nconst PATTERN_SEP = ';';\nconst GROUP_SEP = ',';\nconst DIGIT_CHAR = '#';\nconst CURRENCY_CHAR = '\xA4';\nconst PERCENT_CHAR = '%';\nfunction formatNumberToLocaleString(value, pattern, locale, groupSymbol, decimalSymbol, digitsInfo, isPercent = false) {\n let formattedText = '';\n let isZero = false;\n if (!isFinite(value)) {\n formattedText = getLocaleNumberSymbol(locale, NumberSymbol.Infinity);\n } else {\n let parsedNumber = parseNumber(value);\n if (isPercent) {\n parsedNumber = toPercent(parsedNumber);\n }\n let minInt = pattern.minInt;\n let minFraction = pattern.minFrac;\n let maxFraction = pattern.maxFrac;\n if (digitsInfo) {\n const parts = digitsInfo.match(NUMBER_FORMAT_REGEXP);\n if (parts === null) {\n throw new _RuntimeError(2306, ngDevMode && `${digitsInfo} is not a valid digit info`);\n }\n const minIntPart = parts[1];\n const minFractionPart = parts[3];\n const maxFractionPart = parts[5];\n if (minIntPart != null) {\n minInt = parseIntAutoRadix(minIntPart);\n }\n if (minFractionPart != null) {\n minFraction = parseIntAutoRadix(minFractionPart);\n }\n if (maxFractionPart != null) {\n maxFraction = parseIntAutoRadix(maxFractionPart);\n } else if (minFractionPart != null && minFraction > maxFraction) {\n maxFraction = minFraction;\n }\n }\n roundNumber(parsedNumber, minFraction, maxFraction);\n let digits = parsedNumber.digits;\n let integerLen = parsedNumber.integerLen;\n const exponent = parsedNumber.exponent;\n let decimals = [];\n isZero = digits.every(d => !d);\n for (; integerLen < minInt; integerLen++) {\n digits.unshift(0);\n }\n for (; integerLen < 0; integerLen++) {\n digits.unshift(0);\n }\n if (integerLen > 0) {\n decimals = digits.splice(integerLen, digits.length);\n } else {\n decimals = digits;\n digits = [0];\n }\n const groups = [];\n if (digits.length >= pattern.lgSize) {\n groups.unshift(digits.splice(-pattern.lgSize, digits.length).join(''));\n }\n while (digits.length > pattern.gSize) {\n groups.unshift(digits.splice(-pattern.gSize, digits.length).join(''));\n }\n if (digits.length) {\n groups.unshift(digits.join(''));\n }\n formattedText = groups.join(getLocaleNumberSymbol(locale, groupSymbol));\n if (decimals.length) {\n formattedText += getLocaleNumberSymbol(locale, decimalSymbol) + decimals.join('');\n }\n if (exponent) {\n formattedText += getLocaleNumberSymbol(locale, NumberSymbol.Exponential) + '+' + exponent;\n }\n }\n if (value < 0 && !isZero) {\n formattedText = pattern.negPre + formattedText + pattern.negSuf;\n } else {\n formattedText = pattern.posPre + formattedText + pattern.posSuf;\n }\n return formattedText;\n}\nfunction formatCurrency(value, locale, currency, currencyCode, digitsInfo) {\n const format = getLocaleNumberFormat(locale, NumberFormatStyle.Currency);\n const pattern = parseNumberFormat(format, getLocaleNumberSymbol(locale, NumberSymbol.MinusSign));\n pattern.minFrac = getNumberOfCurrencyDigits(currencyCode);\n pattern.maxFrac = pattern.minFrac;\n const res = formatNumberToLocaleString(value, pattern, locale, NumberSymbol.CurrencyGroup, NumberSymbol.CurrencyDecimal, digitsInfo);\n return res.replace(CURRENCY_CHAR, currency).replace(CURRENCY_CHAR, '').trim();\n}\nfunction formatPercent(value, locale, digitsInfo) {\n const format = getLocaleNumberFormat(locale, NumberFormatStyle.Percent);\n const pattern = parseNumberFormat(format, getLocaleNumberSymbol(locale, NumberSymbol.MinusSign));\n const res = formatNumberToLocaleString(value, pattern, locale, NumberSymbol.Group, NumberSymbol.Decimal, digitsInfo, true);\n return res.replace(new RegExp(PERCENT_CHAR, 'g'), getLocaleNumberSymbol(locale, NumberSymbol.PercentSign));\n}\nfunction formatNumber(value, locale, digitsInfo) {\n const format = getLocaleNumberFormat(locale, NumberFormatStyle.Decimal);\n const pattern = parseNumberFormat(format, getLocaleNumberSymbol(locale, NumberSymbol.MinusSign));\n return formatNumberToLocaleString(value, pattern, locale, NumberSymbol.Group, NumberSymbol.Decimal, digitsInfo);\n}\nfunction parseNumberFormat(format, minusSign = '-') {\n const p = {\n minInt: 1,\n minFrac: 0,\n maxFrac: 0,\n posPre: '',\n posSuf: '',\n negPre: '',\n negSuf: '',\n gSize: 0,\n lgSize: 0\n };\n const patternParts = format.split(PATTERN_SEP);\n const positive = patternParts[0];\n const negative = patternParts[1];\n const positiveParts = positive.indexOf(DECIMAL_SEP) !== -1 ? positive.split(DECIMAL_SEP) : [positive.substring(0, positive.lastIndexOf(ZERO_CHAR) + 1), positive.substring(positive.lastIndexOf(ZERO_CHAR) + 1)],\n integer = positiveParts[0],\n fraction = positiveParts[1] || '';\n p.posPre = integer.substring(0, integer.indexOf(DIGIT_CHAR));\n for (let i = 0; i < fraction.length; i++) {\n const ch = fraction.charAt(i);\n if (ch === ZERO_CHAR) {\n p.minFrac = p.maxFrac = i + 1;\n } else if (ch === DIGIT_CHAR) {\n p.maxFrac = i + 1;\n } else {\n p.posSuf += ch;\n }\n }\n const groups = integer.split(GROUP_SEP);\n p.gSize = groups[1] ? groups[1].length : 0;\n p.lgSize = groups[2] || groups[1] ? (groups[2] || groups[1]).length : 0;\n if (negative) {\n const trunkLen = positive.length - p.posPre.length - p.posSuf.length,\n pos = negative.indexOf(DIGIT_CHAR);\n p.negPre = negative.substring(0, pos).replace(/'/g, '');\n p.negSuf = negative.slice(pos + trunkLen).replace(/'/g, '');\n } else {\n p.negPre = minusSign + p.posPre;\n p.negSuf = p.posSuf;\n }\n return p;\n}\nfunction toPercent(parsedNumber) {\n if (parsedNumber.digits[0] === 0) {\n return parsedNumber;\n }\n const fractionLen = parsedNumber.digits.length - parsedNumber.integerLen;\n if (parsedNumber.exponent) {\n parsedNumber.exponent += 2;\n } else {\n if (fractionLen === 0) {\n parsedNumber.digits.push(0, 0);\n } else if (fractionLen === 1) {\n parsedNumber.digits.push(0);\n }\n parsedNumber.integerLen += 2;\n }\n return parsedNumber;\n}\nfunction parseNumber(num) {\n let numStr = Math.abs(num) + '';\n let exponent = 0,\n digits,\n integerLen;\n let i, j, zeros;\n if ((integerLen = numStr.indexOf(DECIMAL_SEP)) > -1) {\n numStr = numStr.replace(DECIMAL_SEP, '');\n }\n if ((i = numStr.search(/e/i)) > 0) {\n if (integerLen < 0) integerLen = i;\n integerLen += +numStr.slice(i + 1);\n numStr = numStr.substring(0, i);\n } else if (integerLen < 0) {\n integerLen = numStr.length;\n }\n for (i = 0; numStr.charAt(i) === ZERO_CHAR; i++) {}\n if (i === (zeros = numStr.length)) {\n digits = [0];\n integerLen = 1;\n } else {\n zeros--;\n while (numStr.charAt(zeros) === ZERO_CHAR) zeros--;\n integerLen -= i;\n digits = [];\n for (j = 0; i <= zeros; i++, j++) {\n digits[j] = Number(numStr.charAt(i));\n }\n }\n if (integerLen > MAX_DIGITS) {\n digits = digits.splice(0, MAX_DIGITS - 1);\n exponent = integerLen - 1;\n integerLen = 1;\n }\n return {\n digits,\n exponent,\n integerLen\n };\n}\nfunction roundNumber(parsedNumber, minFrac, maxFrac) {\n if (minFrac > maxFrac) {\n throw new _RuntimeError(2307, ngDevMode && `The minimum number of digits after fraction (${minFrac}) is higher than the maximum (${maxFrac}).`);\n }\n let digits = parsedNumber.digits;\n let fractionLen = digits.length - parsedNumber.integerLen;\n const fractionSize = Math.min(Math.max(minFrac, fractionLen), maxFrac);\n let roundAt = fractionSize + parsedNumber.integerLen;\n let digit = digits[roundAt];\n if (roundAt > 0) {\n digits.splice(Math.max(parsedNumber.integerLen, roundAt));\n for (let j = roundAt; j < digits.length; j++) {\n digits[j] = 0;\n }\n } else {\n fractionLen = Math.max(0, fractionLen);\n parsedNumber.integerLen = 1;\n digits.length = Math.max(1, roundAt = fractionSize + 1);\n digits[0] = 0;\n for (let i = 1; i < roundAt; i++) digits[i] = 0;\n }\n if (digit >= 5) {\n if (roundAt - 1 < 0) {\n for (let k = 0; k > roundAt; k--) {\n digits.unshift(0);\n parsedNumber.integerLen++;\n }\n digits.unshift(1);\n parsedNumber.integerLen++;\n } else {\n digits[roundAt - 1]++;\n }\n }\n for (; fractionLen < Math.max(0, fractionSize); fractionLen++) digits.push(0);\n let dropTrailingZeros = fractionSize !== 0;\n const minLen = minFrac + parsedNumber.integerLen;\n const carry = digits.reduceRight(function (carry, d, i, digits) {\n d = d + carry;\n digits[i] = d < 10 ? d : d - 10;\n if (dropTrailingZeros) {\n if (digits[i] === 0 && i >= minLen) {\n digits.pop();\n } else {\n dropTrailingZeros = false;\n }\n }\n return d >= 10 ? 1 : 0;\n }, 0);\n if (carry) {\n digits.unshift(carry);\n parsedNumber.integerLen++;\n }\n}\nfunction parseIntAutoRadix(text) {\n const result = parseInt(text);\n if (isNaN(result)) {\n throw new _RuntimeError(2305, ngDevMode && 'Invalid integer literal when parsing ' + text);\n }\n return result;\n}\nlet NgLocalization = /*#__PURE__*/(() => {\n class NgLocalization {\n static \u0275fac = function NgLocalization_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || NgLocalization)();\n };\n static \u0275prov = /* @__PURE__ */i0.\u0275\u0275defineInjectable({\n token: NgLocalization,\n factory: () => (() => new NgLocaleLocalization(inject(LOCALE_ID)))(),\n providedIn: 'root'\n });\n }\n return NgLocalization;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nfunction getPluralCategory(value, cases, ngLocalization, locale) {\n let key = `=${value}`;\n if (cases.indexOf(key) > -1) {\n return key;\n }\n key = ngLocalization.getPluralCategory(value, locale);\n if (cases.indexOf(key) > -1) {\n return key;\n }\n if (cases.indexOf('other') > -1) {\n return 'other';\n }\n throw new _RuntimeError(2308, ngDevMode && `No plural message found for value \"${value}\"`);\n}\nlet NgLocaleLocalization = /*#__PURE__*/(() => {\n class NgLocaleLocalization extends NgLocalization {\n locale;\n constructor(locale) {\n super();\n this.locale = locale;\n }\n getPluralCategory(value, locale) {\n const plural = getLocalePluralCase(locale || this.locale)(value);\n switch (plural) {\n case Plural.Zero:\n return 'zero';\n case Plural.One:\n return 'one';\n case Plural.Two:\n return 'two';\n case Plural.Few:\n return 'few';\n case Plural.Many:\n return 'many';\n default:\n return 'other';\n }\n }\n static \u0275fac = function NgLocaleLocalization_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || NgLocaleLocalization)(i0.\u0275\u0275inject(LOCALE_ID));\n };\n static \u0275prov = /* @__PURE__ */i0.\u0275\u0275defineInjectable({\n token: NgLocaleLocalization,\n factory: NgLocaleLocalization.\u0275fac\n });\n }\n return NgLocaleLocalization;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst WS_REGEXP = /\\s+/;\nconst EMPTY_ARRAY = [];\nlet NgClass = /*#__PURE__*/(() => {\n class NgClass {\n _ngEl;\n _renderer;\n initialClasses = EMPTY_ARRAY;\n rawClass;\n stateMap = new Map();\n constructor(_ngEl, _renderer) {\n this._ngEl = _ngEl;\n this._renderer = _renderer;\n }\n set klass(value) {\n this.initialClasses = value != null ? value.trim().split(WS_REGEXP) : EMPTY_ARRAY;\n }\n set ngClass(value) {\n this.rawClass = typeof value === 'string' ? value.trim().split(WS_REGEXP) : value;\n }\n ngDoCheck() {\n for (const klass of this.initialClasses) {\n this._updateState(klass, true);\n }\n const rawClass = this.rawClass;\n if (Array.isArray(rawClass) || rawClass instanceof Set) {\n for (const klass of rawClass) {\n this._updateState(klass, true);\n }\n } else if (rawClass != null) {\n for (const klass of Object.keys(rawClass)) {\n this._updateState(klass, Boolean(rawClass[klass]));\n }\n }\n this._applyStateDiff();\n }\n _updateState(klass, nextEnabled) {\n const state = this.stateMap.get(klass);\n if (state !== undefined) {\n if (state.enabled !== nextEnabled) {\n state.changed = true;\n state.enabled = nextEnabled;\n }\n state.touched = true;\n } else {\n this.stateMap.set(klass, {\n enabled: nextEnabled,\n changed: true,\n touched: true\n });\n }\n }\n _applyStateDiff() {\n for (const stateEntry of this.stateMap) {\n const klass = stateEntry[0];\n const state = stateEntry[1];\n if (state.changed) {\n this._toggleClass(klass, state.enabled);\n state.changed = false;\n } else if (!state.touched) {\n if (state.enabled) {\n this._toggleClass(klass, false);\n }\n this.stateMap.delete(klass);\n }\n state.touched = false;\n }\n }\n _toggleClass(klass, enabled) {\n if (ngDevMode) {\n if (typeof klass !== 'string') {\n throw new Error(`NgClass can only toggle CSS classes expressed as strings, got ${_stringify(klass)}`);\n }\n }\n klass = klass.trim();\n if (klass.length > 0) {\n klass.split(WS_REGEXP).forEach(klass => {\n if (enabled) {\n this._renderer.addClass(this._ngEl.nativeElement, klass);\n } else {\n this._renderer.removeClass(this._ngEl.nativeElement, klass);\n }\n });\n }\n }\n static \u0275fac = function NgClass_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || NgClass)(i0.\u0275\u0275directiveInject(i0.ElementRef), i0.\u0275\u0275directiveInject(i0.Renderer2));\n };\n static \u0275dir = /* @__PURE__ */i0.\u0275\u0275defineDirective({\n type: NgClass,\n selectors: [[\"\", \"ngClass\", \"\"]],\n inputs: {\n klass: [0, \"class\", \"klass\"],\n ngClass: \"ngClass\"\n }\n });\n }\n return NgClass;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet NgComponentOutlet = /*#__PURE__*/(() => {\n class NgComponentOutlet {\n _viewContainerRef;\n ngComponentOutlet = null;\n ngComponentOutletInputs;\n ngComponentOutletInjector;\n ngComponentOutletEnvironmentInjector;\n ngComponentOutletContent;\n ngComponentOutletNgModule;\n _componentRef;\n _moduleRef;\n _inputsUsed = new Map();\n get componentInstance() {\n return this._componentRef?.instance ?? null;\n }\n constructor(_viewContainerRef) {\n this._viewContainerRef = _viewContainerRef;\n }\n _needToReCreateNgModuleInstance(changes) {\n return changes['ngComponentOutletNgModule'] !== undefined;\n }\n _needToReCreateComponentInstance(changes) {\n return changes['ngComponentOutlet'] !== undefined || changes['ngComponentOutletContent'] !== undefined || changes['ngComponentOutletInjector'] !== undefined || changes['ngComponentOutletEnvironmentInjector'] !== undefined || this._needToReCreateNgModuleInstance(changes);\n }\n ngOnChanges(changes) {\n if (this._needToReCreateComponentInstance(changes)) {\n this._viewContainerRef.clear();\n this._inputsUsed.clear();\n this._componentRef = undefined;\n if (this.ngComponentOutlet) {\n const injector = this.ngComponentOutletInjector || this._viewContainerRef.parentInjector;\n if (this._needToReCreateNgModuleInstance(changes)) {\n this._moduleRef?.destroy();\n if (this.ngComponentOutletNgModule) {\n this._moduleRef = createNgModule(this.ngComponentOutletNgModule, getParentInjector(injector));\n } else {\n this._moduleRef = undefined;\n }\n }\n this._componentRef = this._viewContainerRef.createComponent(this.ngComponentOutlet, {\n injector,\n ngModuleRef: this._moduleRef,\n projectableNodes: this.ngComponentOutletContent,\n environmentInjector: this.ngComponentOutletEnvironmentInjector\n });\n }\n }\n }\n ngDoCheck() {\n if (this._componentRef) {\n if (this.ngComponentOutletInputs) {\n for (const inputName of Object.keys(this.ngComponentOutletInputs)) {\n this._inputsUsed.set(inputName, true);\n }\n }\n this._applyInputStateDiff(this._componentRef);\n }\n }\n ngOnDestroy() {\n this._moduleRef?.destroy();\n }\n _applyInputStateDiff(componentRef) {\n for (const [inputName, touched] of this._inputsUsed) {\n if (!touched) {\n componentRef.setInput(inputName, undefined);\n this._inputsUsed.delete(inputName);\n } else {\n componentRef.setInput(inputName, this.ngComponentOutletInputs[inputName]);\n this._inputsUsed.set(inputName, false);\n }\n }\n }\n static \u0275fac = function NgComponentOutlet_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || NgComponentOutlet)(i0.\u0275\u0275directiveInject(i0.ViewContainerRef));\n };\n static \u0275dir = /* @__PURE__ */i0.\u0275\u0275defineDirective({\n type: NgComponentOutlet,\n selectors: [[\"\", \"ngComponentOutlet\", \"\"]],\n inputs: {\n ngComponentOutlet: \"ngComponentOutlet\",\n ngComponentOutletInputs: \"ngComponentOutletInputs\",\n ngComponentOutletInjector: \"ngComponentOutletInjector\",\n ngComponentOutletEnvironmentInjector: \"ngComponentOutletEnvironmentInjector\",\n ngComponentOutletContent: \"ngComponentOutletContent\",\n ngComponentOutletNgModule: \"ngComponentOutletNgModule\"\n },\n exportAs: [\"ngComponentOutlet\"],\n features: [i0.\u0275\u0275NgOnChangesFeature]\n });\n }\n return NgComponentOutlet;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nfunction getParentInjector(injector) {\n const parentNgModule = injector.get(NgModuleRef);\n return parentNgModule.injector;\n}\nclass NgForOfContext {\n $implicit;\n ngForOf;\n index;\n count;\n constructor($implicit, ngForOf, index, count) {\n this.$implicit = $implicit;\n this.ngForOf = ngForOf;\n this.index = index;\n this.count = count;\n }\n get first() {\n return this.index === 0;\n }\n get last() {\n return this.index === this.count - 1;\n }\n get even() {\n return this.index % 2 === 0;\n }\n get odd() {\n return !this.even;\n }\n}\nlet NgForOf = /*#__PURE__*/(() => {\n class NgForOf {\n _viewContainer;\n _template;\n _differs;\n set ngForOf(ngForOf) {\n this._ngForOf = ngForOf;\n this._ngForOfDirty = true;\n }\n set ngForTrackBy(fn) {\n if ((typeof ngDevMode === 'undefined' || ngDevMode) && fn != null && typeof fn !== 'function') {\n console.warn(`trackBy must be a function, but received ${JSON.stringify(fn)}. ` + `See https://angular.dev/api/common/NgForOf#change-propagation for more information.`);\n }\n this._trackByFn = fn;\n }\n get ngForTrackBy() {\n return this._trackByFn;\n }\n _ngForOf = null;\n _ngForOfDirty = true;\n _differ = null;\n _trackByFn;\n constructor(_viewContainer, _template, _differs) {\n this._viewContainer = _viewContainer;\n this._template = _template;\n this._differs = _differs;\n }\n set ngForTemplate(value) {\n if (value) {\n this._template = value;\n }\n }\n ngDoCheck() {\n if (this._ngForOfDirty) {\n this._ngForOfDirty = false;\n const value = this._ngForOf;\n if (!this._differ && value) {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n try {\n this._differ = this._differs.find(value).create(this.ngForTrackBy);\n } catch {\n let errorMessage = `Cannot find a differ supporting object '${value}' of type '` + `${getTypeName(value)}'. NgFor only supports binding to Iterables, such as Arrays.`;\n if (typeof value === 'object') {\n errorMessage += ' Did you mean to use the keyvalue pipe?';\n }\n throw new _RuntimeError(-2200, errorMessage);\n }\n } else {\n this._differ = this._differs.find(value).create(this.ngForTrackBy);\n }\n }\n }\n if (this._differ) {\n const changes = this._differ.diff(this._ngForOf);\n if (changes) this._applyChanges(changes);\n }\n }\n _applyChanges(changes) {\n const viewContainer = this._viewContainer;\n changes.forEachOperation((item, adjustedPreviousIndex, currentIndex) => {\n if (item.previousIndex == null) {\n viewContainer.createEmbeddedView(this._template, new NgForOfContext(item.item, this._ngForOf, -1, -1), currentIndex === null ? undefined : currentIndex);\n } else if (currentIndex == null) {\n viewContainer.remove(adjustedPreviousIndex === null ? undefined : adjustedPreviousIndex);\n } else if (adjustedPreviousIndex !== null) {\n const view = viewContainer.get(adjustedPreviousIndex);\n viewContainer.move(view, currentIndex);\n applyViewChange(view, item);\n }\n });\n for (let i = 0, ilen = viewContainer.length; i < ilen; i++) {\n const viewRef = viewContainer.get(i);\n const context = viewRef.context;\n context.index = i;\n context.count = ilen;\n context.ngForOf = this._ngForOf;\n }\n changes.forEachIdentityChange(record => {\n const viewRef = viewContainer.get(record.currentIndex);\n applyViewChange(viewRef, record);\n });\n }\n static ngTemplateContextGuard(dir, ctx) {\n return true;\n }\n static \u0275fac = function NgForOf_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || NgForOf)(i0.\u0275\u0275directiveInject(i0.ViewContainerRef), i0.\u0275\u0275directiveInject(i0.TemplateRef), i0.\u0275\u0275directiveInject(i0.IterableDiffers));\n };\n static \u0275dir = /* @__PURE__ */i0.\u0275\u0275defineDirective({\n type: NgForOf,\n selectors: [[\"\", \"ngFor\", \"\", \"ngForOf\", \"\"]],\n inputs: {\n ngForOf: \"ngForOf\",\n ngForTrackBy: \"ngForTrackBy\",\n ngForTemplate: \"ngForTemplate\"\n }\n });\n }\n return NgForOf;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nfunction applyViewChange(view, record) {\n view.context.$implicit = record.item;\n}\nfunction getTypeName(type) {\n return type['name'] || typeof type;\n}\nlet NgIf = /*#__PURE__*/(() => {\n class NgIf {\n _viewContainer;\n _context = new NgIfContext();\n _thenTemplateRef = null;\n _elseTemplateRef = null;\n _thenViewRef = null;\n _elseViewRef = null;\n constructor(_viewContainer, templateRef) {\n this._viewContainer = _viewContainer;\n this._thenTemplateRef = templateRef;\n }\n set ngIf(condition) {\n this._context.$implicit = this._context.ngIf = condition;\n this._updateView();\n }\n set ngIfThen(templateRef) {\n assertTemplate(templateRef, (typeof ngDevMode === 'undefined' || ngDevMode) && 'ngIfThen');\n this._thenTemplateRef = templateRef;\n this._thenViewRef = null;\n this._updateView();\n }\n set ngIfElse(templateRef) {\n assertTemplate(templateRef, (typeof ngDevMode === 'undefined' || ngDevMode) && 'ngIfElse');\n this._elseTemplateRef = templateRef;\n this._elseViewRef = null;\n this._updateView();\n }\n _updateView() {\n if (this._context.$implicit) {\n if (!this._thenViewRef) {\n this._viewContainer.clear();\n this._elseViewRef = null;\n if (this._thenTemplateRef) {\n this._thenViewRef = this._viewContainer.createEmbeddedView(this._thenTemplateRef, this._context);\n }\n }\n } else {\n if (!this._elseViewRef) {\n this._viewContainer.clear();\n this._thenViewRef = null;\n if (this._elseTemplateRef) {\n this._elseViewRef = this._viewContainer.createEmbeddedView(this._elseTemplateRef, this._context);\n }\n }\n }\n }\n static ngIfUseIfTypeGuard;\n static ngTemplateGuard_ngIf;\n static ngTemplateContextGuard(dir, ctx) {\n return true;\n }\n static \u0275fac = function NgIf_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || NgIf)(i0.\u0275\u0275directiveInject(i0.ViewContainerRef), i0.\u0275\u0275directiveInject(i0.TemplateRef));\n };\n static \u0275dir = /* @__PURE__ */i0.\u0275\u0275defineDirective({\n type: NgIf,\n selectors: [[\"\", \"ngIf\", \"\"]],\n inputs: {\n ngIf: \"ngIf\",\n ngIfThen: \"ngIfThen\",\n ngIfElse: \"ngIfElse\"\n }\n });\n }\n return NgIf;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nclass NgIfContext {\n $implicit = null;\n ngIf = null;\n}\nfunction assertTemplate(templateRef, property) {\n if (templateRef && !templateRef.createEmbeddedView) {\n throw new _RuntimeError(2020, (typeof ngDevMode === 'undefined' || ngDevMode) && `${property} must be a TemplateRef, but received '${_stringify(templateRef)}'.`);\n }\n}\nclass SwitchView {\n _viewContainerRef;\n _templateRef;\n _created = false;\n constructor(_viewContainerRef, _templateRef) {\n this._viewContainerRef = _viewContainerRef;\n this._templateRef = _templateRef;\n }\n create() {\n this._created = true;\n this._viewContainerRef.createEmbeddedView(this._templateRef);\n }\n destroy() {\n this._created = false;\n this._viewContainerRef.clear();\n }\n enforceState(created) {\n if (created && !this._created) {\n this.create();\n } else if (!created && this._created) {\n this.destroy();\n }\n }\n}\nlet NgSwitch = /*#__PURE__*/(() => {\n class NgSwitch {\n _defaultViews = [];\n _defaultUsed = false;\n _caseCount = 0;\n _lastCaseCheckIndex = 0;\n _lastCasesMatched = false;\n _ngSwitch;\n set ngSwitch(newValue) {\n this._ngSwitch = newValue;\n if (this._caseCount === 0) {\n this._updateDefaultCases(true);\n }\n }\n _addCase() {\n return this._caseCount++;\n }\n _addDefault(view) {\n this._defaultViews.push(view);\n }\n _matchCase(value) {\n const matched = value === this._ngSwitch;\n this._lastCasesMatched ||= matched;\n this._lastCaseCheckIndex++;\n if (this._lastCaseCheckIndex === this._caseCount) {\n this._updateDefaultCases(!this._lastCasesMatched);\n this._lastCaseCheckIndex = 0;\n this._lastCasesMatched = false;\n }\n return matched;\n }\n _updateDefaultCases(useDefault) {\n if (this._defaultViews.length > 0 && useDefault !== this._defaultUsed) {\n this._defaultUsed = useDefault;\n for (const defaultView of this._defaultViews) {\n defaultView.enforceState(useDefault);\n }\n }\n }\n static \u0275fac = function NgSwitch_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || NgSwitch)();\n };\n static \u0275dir = /* @__PURE__ */i0.\u0275\u0275defineDirective({\n type: NgSwitch,\n selectors: [[\"\", \"ngSwitch\", \"\"]],\n inputs: {\n ngSwitch: \"ngSwitch\"\n }\n });\n }\n return NgSwitch;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet NgSwitchCase = /*#__PURE__*/(() => {\n class NgSwitchCase {\n ngSwitch;\n _view;\n ngSwitchCase;\n constructor(viewContainer, templateRef, ngSwitch) {\n this.ngSwitch = ngSwitch;\n if ((typeof ngDevMode === 'undefined' || ngDevMode) && !ngSwitch) {\n throwNgSwitchProviderNotFoundError('ngSwitchCase', 'NgSwitchCase');\n }\n ngSwitch._addCase();\n this._view = new SwitchView(viewContainer, templateRef);\n }\n ngDoCheck() {\n this._view.enforceState(this.ngSwitch._matchCase(this.ngSwitchCase));\n }\n static \u0275fac = function NgSwitchCase_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || NgSwitchCase)(i0.\u0275\u0275directiveInject(i0.ViewContainerRef), i0.\u0275\u0275directiveInject(i0.TemplateRef), i0.\u0275\u0275directiveInject(NgSwitch, 9));\n };\n static \u0275dir = /* @__PURE__ */i0.\u0275\u0275defineDirective({\n type: NgSwitchCase,\n selectors: [[\"\", \"ngSwitchCase\", \"\"]],\n inputs: {\n ngSwitchCase: \"ngSwitchCase\"\n }\n });\n }\n return NgSwitchCase;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet NgSwitchDefault = /*#__PURE__*/(() => {\n class NgSwitchDefault {\n constructor(viewContainer, templateRef, ngSwitch) {\n if ((typeof ngDevMode === 'undefined' || ngDevMode) && !ngSwitch) {\n throwNgSwitchProviderNotFoundError('ngSwitchDefault', 'NgSwitchDefault');\n }\n ngSwitch._addDefault(new SwitchView(viewContainer, templateRef));\n }\n static \u0275fac = function NgSwitchDefault_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || NgSwitchDefault)(i0.\u0275\u0275directiveInject(i0.ViewContainerRef), i0.\u0275\u0275directiveInject(i0.TemplateRef), i0.\u0275\u0275directiveInject(NgSwitch, 9));\n };\n static \u0275dir = /* @__PURE__ */i0.\u0275\u0275defineDirective({\n type: NgSwitchDefault,\n selectors: [[\"\", \"ngSwitchDefault\", \"\"]]\n });\n }\n return NgSwitchDefault;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nfunction throwNgSwitchProviderNotFoundError(attrName, directiveName) {\n throw new _RuntimeError(2000, `An element with the \"${attrName}\" attribute ` + `(matching the \"${directiveName}\" directive) must be located inside an element with the \"ngSwitch\" attribute ` + `(matching \"NgSwitch\" directive)`);\n}\nlet NgPlural = /*#__PURE__*/(() => {\n class NgPlural {\n _localization;\n _activeView;\n _caseViews = {};\n constructor(_localization) {\n this._localization = _localization;\n }\n set ngPlural(value) {\n this._updateView(value);\n }\n addCase(value, switchView) {\n this._caseViews[value] = switchView;\n }\n _updateView(switchValue) {\n this._clearViews();\n const cases = Object.keys(this._caseViews);\n const key = getPluralCategory(switchValue, cases, this._localization);\n this._activateView(this._caseViews[key]);\n }\n _clearViews() {\n if (this._activeView) this._activeView.destroy();\n }\n _activateView(view) {\n if (view) {\n this._activeView = view;\n this._activeView.create();\n }\n }\n static \u0275fac = function NgPlural_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || NgPlural)(i0.\u0275\u0275directiveInject(NgLocalization));\n };\n static \u0275dir = /* @__PURE__ */i0.\u0275\u0275defineDirective({\n type: NgPlural,\n selectors: [[\"\", \"ngPlural\", \"\"]],\n inputs: {\n ngPlural: \"ngPlural\"\n }\n });\n }\n return NgPlural;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet NgPluralCase = /*#__PURE__*/(() => {\n class NgPluralCase {\n value;\n constructor(value, template, viewContainer, ngPlural) {\n this.value = value;\n const isANumber = !isNaN(Number(value));\n ngPlural.addCase(isANumber ? `=${value}` : value, new SwitchView(viewContainer, template));\n }\n static \u0275fac = function NgPluralCase_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || NgPluralCase)(i0.\u0275\u0275injectAttribute('ngPluralCase'), i0.\u0275\u0275directiveInject(i0.TemplateRef), i0.\u0275\u0275directiveInject(i0.ViewContainerRef), i0.\u0275\u0275directiveInject(NgPlural, 1));\n };\n static \u0275dir = /* @__PURE__ */i0.\u0275\u0275defineDirective({\n type: NgPluralCase,\n selectors: [[\"\", \"ngPluralCase\", \"\"]]\n });\n }\n return NgPluralCase;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet NgStyle = /*#__PURE__*/(() => {\n class NgStyle {\n _ngEl;\n _differs;\n _renderer;\n _ngStyle = null;\n _differ = null;\n constructor(_ngEl, _differs, _renderer) {\n this._ngEl = _ngEl;\n this._differs = _differs;\n this._renderer = _renderer;\n }\n set ngStyle(values) {\n this._ngStyle = values;\n if (!this._differ && values) {\n this._differ = this._differs.find(values).create();\n }\n }\n ngDoCheck() {\n if (this._differ) {\n const changes = this._differ.diff(this._ngStyle);\n if (changes) {\n this._applyChanges(changes);\n }\n }\n }\n _setStyle(nameAndUnit, value) {\n const [name, unit] = nameAndUnit.split('.');\n const flags = name.indexOf('-') === -1 ? undefined : RendererStyleFlags2.DashCase;\n if (value != null) {\n this._renderer.setStyle(this._ngEl.nativeElement, name, unit ? `${value}${unit}` : value, flags);\n } else {\n this._renderer.removeStyle(this._ngEl.nativeElement, name, flags);\n }\n }\n _applyChanges(changes) {\n changes.forEachRemovedItem(record => this._setStyle(record.key, null));\n changes.forEachAddedItem(record => this._setStyle(record.key, record.currentValue));\n changes.forEachChangedItem(record => this._setStyle(record.key, record.currentValue));\n }\n static \u0275fac = function NgStyle_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || NgStyle)(i0.\u0275\u0275directiveInject(i0.ElementRef), i0.\u0275\u0275directiveInject(i0.KeyValueDiffers), i0.\u0275\u0275directiveInject(i0.Renderer2));\n };\n static \u0275dir = /* @__PURE__ */i0.\u0275\u0275defineDirective({\n type: NgStyle,\n selectors: [[\"\", \"ngStyle\", \"\"]],\n inputs: {\n ngStyle: \"ngStyle\"\n }\n });\n }\n return NgStyle;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet NgTemplateOutlet = /*#__PURE__*/(() => {\n class NgTemplateOutlet {\n _viewContainerRef;\n _viewRef = null;\n ngTemplateOutletContext = null;\n ngTemplateOutlet = null;\n ngTemplateOutletInjector = null;\n injector = inject(Injector);\n constructor(_viewContainerRef) {\n this._viewContainerRef = _viewContainerRef;\n }\n ngOnChanges(changes) {\n if (this._shouldRecreateView(changes)) {\n const viewContainerRef = this._viewContainerRef;\n if (this._viewRef) {\n viewContainerRef.remove(viewContainerRef.indexOf(this._viewRef));\n }\n if (!this.ngTemplateOutlet) {\n this._viewRef = null;\n return;\n }\n const viewContext = this._createContextForwardProxy();\n this._viewRef = viewContainerRef.createEmbeddedView(this.ngTemplateOutlet, viewContext, {\n injector: this._getInjector()\n });\n }\n }\n _getInjector() {\n if (this.ngTemplateOutletInjector === 'outlet') {\n return this.injector;\n }\n return this.ngTemplateOutletInjector ?? undefined;\n }\n _shouldRecreateView(changes) {\n return !!changes['ngTemplateOutlet'] || !!changes['ngTemplateOutletInjector'];\n }\n _createContextForwardProxy() {\n return new Proxy({}, {\n set: (_target, prop, newValue) => {\n if (!this.ngTemplateOutletContext) {\n return false;\n }\n return Reflect.set(this.ngTemplateOutletContext, prop, newValue);\n },\n get: (_target, prop, receiver) => {\n if (!this.ngTemplateOutletContext) {\n return undefined;\n }\n return Reflect.get(this.ngTemplateOutletContext, prop, receiver);\n }\n });\n }\n static \u0275fac = function NgTemplateOutlet_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || NgTemplateOutlet)(i0.\u0275\u0275directiveInject(i0.ViewContainerRef));\n };\n static \u0275dir = /* @__PURE__ */i0.\u0275\u0275defineDirective({\n type: NgTemplateOutlet,\n selectors: [[\"\", \"ngTemplateOutlet\", \"\"]],\n inputs: {\n ngTemplateOutletContext: \"ngTemplateOutletContext\",\n ngTemplateOutlet: \"ngTemplateOutlet\",\n ngTemplateOutletInjector: \"ngTemplateOutletInjector\"\n },\n features: [i0.\u0275\u0275NgOnChangesFeature]\n });\n }\n return NgTemplateOutlet;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst COMMON_DIRECTIVES = [NgClass, NgComponentOutlet, NgForOf, NgIf, NgTemplateOutlet, NgStyle, NgSwitch, NgSwitchCase, NgSwitchDefault, NgPlural, NgPluralCase];\nfunction invalidPipeArgumentError(type, value) {\n return new _RuntimeError(2100, ngDevMode && `InvalidPipeArgument: '${value}' for pipe '${_stringify(type)}'`);\n}\nfunction warnIfSignal(pipeName, value) {\n if (isSignal(value)) {\n console.warn(`The ${pipeName} does not unwrap signals. Received a signal with value:`, value());\n }\n}\nclass SubscribableStrategy {\n createSubscription(async, updateLatestValue, onError) {\n return untracked(() => async.subscribe({\n next: updateLatestValue,\n error: onError\n }));\n }\n dispose(subscription) {\n untracked(() => subscription.unsubscribe());\n }\n}\nclass PromiseStrategy {\n createSubscription(async, updateLatestValue, onError) {\n async.then(v => updateLatestValue?.(v), e => onError?.(e));\n return {\n unsubscribe: () => {\n updateLatestValue = null;\n onError = null;\n }\n };\n }\n dispose(subscription) {\n subscription.unsubscribe();\n }\n}\nconst _promiseStrategy = /*#__PURE__*/new PromiseStrategy();\nconst _subscribableStrategy = /*#__PURE__*/new SubscribableStrategy();\nlet AsyncPipe = /*#__PURE__*/(() => {\n class AsyncPipe {\n _ref;\n _latestValue = null;\n markForCheckOnValueUpdate = true;\n _subscription = null;\n _obj = null;\n _strategy = null;\n applicationErrorHandler = inject(_INTERNAL_APPLICATION_ERROR_HANDLER);\n constructor(ref) {\n this._ref = ref;\n }\n ngOnDestroy() {\n if (this._subscription) {\n this._dispose();\n }\n this._ref = null;\n }\n transform(obj) {\n if (!this._obj) {\n if (obj) {\n try {\n this.markForCheckOnValueUpdate = false;\n this._subscribe(obj);\n } finally {\n this.markForCheckOnValueUpdate = true;\n }\n }\n return this._latestValue;\n }\n if (obj !== this._obj) {\n this._dispose();\n return this.transform(obj);\n }\n return this._latestValue;\n }\n _subscribe(obj) {\n this._obj = obj;\n this._strategy = this._selectStrategy(obj);\n this._subscription = this._strategy.createSubscription(obj, value => this._updateLatestValue(obj, value), e => this.applicationErrorHandler(e));\n }\n _selectStrategy(obj) {\n if (_isPromise(obj)) {\n return _promiseStrategy;\n }\n if (_isSubscribable(obj)) {\n return _subscribableStrategy;\n }\n throw invalidPipeArgumentError(AsyncPipe, obj);\n }\n _dispose() {\n this._strategy.dispose(this._subscription);\n this._latestValue = null;\n this._subscription = null;\n this._obj = null;\n }\n _updateLatestValue(async, value) {\n if (async === this._obj) {\n this._latestValue = value;\n if (this.markForCheckOnValueUpdate) {\n this._ref?.markForCheck();\n }\n }\n }\n static \u0275fac = function AsyncPipe_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || AsyncPipe)(i0.\u0275\u0275directiveInject(i0.ChangeDetectorRef, 16));\n };\n static \u0275pipe = /* @__PURE__ */i0.\u0275\u0275definePipe({\n name: \"async\",\n type: AsyncPipe,\n pure: false\n });\n }\n return AsyncPipe;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet LowerCasePipe = /*#__PURE__*/(() => {\n class LowerCasePipe {\n transform(value) {\n if (value == null) return null;\n assertPipeArgument(LowerCasePipe, value);\n return value.toLowerCase();\n }\n static \u0275fac = function LowerCasePipe_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || LowerCasePipe)();\n };\n static \u0275pipe = /* @__PURE__ */i0.\u0275\u0275definePipe({\n name: \"lowercase\",\n type: LowerCasePipe,\n pure: true\n });\n }\n return LowerCasePipe;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst unicodeWordMatch = /(?:[0-9A-Za-z\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05D0-\\u05EA\\u05EF-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086A\\u0870-\\u0887\\u0889-\\u088E\\u08A0-\\u08C9\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u09FC\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C5D\\u0C60\\u0C61\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D04-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E86-\\u0E8A\\u0E8C-\\u0EA3\\u0EA5\\u0EA7-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16F1-\\u16F8\\u1700-\\u1711\\u171F-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1878\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4C\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1C80-\\u1C88\\u1C90-\\u1CBA\\u1CBD-\\u1CBF\\u1CE9-\\u1CEC\\u1CEE-\\u1CF3\\u1CF5\\u1CF6\\u1CFA\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312F\\u3131-\\u318E\\u31A0-\\u31BF\\u31F0-\\u31FF\\u3400-\\u4DBF\\u4E00-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7CA\\uA7D0\\uA7D1\\uA7D3\\uA7D5-\\uA7D9\\uA7F2-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA8FE\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB69\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF2D-\\uDF40\\uDF42-\\uDF49\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF]|\\uD801[\\uDC00-\\uDC9D\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDD70-\\uDD7A\\uDD7C-\\uDD8A\\uDD8C-\\uDD92\\uDD94\\uDD95\\uDD97-\\uDDA1\\uDDA3-\\uDDB1\\uDDB3-\\uDDB9\\uDDBB\\uDDBC\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67\\uDF80-\\uDF85\\uDF87-\\uDFB0\\uDFB2-\\uDFBA]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE35\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE4\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2\\uDD00-\\uDD23\\uDE80-\\uDEA9\\uDEB0\\uDEB1\\uDF00-\\uDF1C\\uDF27\\uDF30-\\uDF45\\uDF70-\\uDF81\\uDFB0-\\uDFC4\\uDFE0-\\uDFF6]|\\uD804[\\uDC03-\\uDC37\\uDC71\\uDC72\\uDC75\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDD03-\\uDD26\\uDD44\\uDD47\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEDE\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF50\\uDF5D-\\uDF61]|\\uD805[\\uDC00-\\uDC34\\uDC47-\\uDC4A\\uDC5F-\\uDC61\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDD80-\\uDDAE\\uDDD8-\\uDDDB\\uDE00-\\uDE2F\\uDE44\\uDE80-\\uDEAA\\uDEB8\\uDF00-\\uDF1A\\uDF40-\\uDF46]|\\uD806[\\uDC00-\\uDC2B\\uDCA0-\\uDCDF\\uDCFF-\\uDD06\\uDD09\\uDD0C-\\uDD13\\uDD15\\uDD16\\uDD18-\\uDD2F\\uDD3F\\uDD41\\uDDA0-\\uDDA7\\uDDAA-\\uDDD0\\uDDE1\\uDDE3\\uDE00\\uDE0B-\\uDE32\\uDE3A\\uDE50\\uDE5C-\\uDE89\\uDE9D\\uDEB0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC2E\\uDC40\\uDC72-\\uDC8F\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD30\\uDD46\\uDD60-\\uDD65\\uDD67\\uDD68\\uDD6A-\\uDD89\\uDD98\\uDEE0-\\uDEF2\\uDFB0]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC80-\\uDD43]|\\uD80B[\\uDF90-\\uDFF0]|[\\uD80C\\uD81C-\\uD820\\uD822\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879\\uD880-\\uD883][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE70-\\uDEBE\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDE40-\\uDE7F\\uDF00-\\uDF4A\\uDF50\\uDF93-\\uDF9F\\uDFE0\\uDFE1\\uDFE3]|\\uD821[\\uDC00-\\uDFF7]|\\uD823[\\uDC00-\\uDCD5\\uDD00-\\uDD08]|\\uD82B[\\uDFF0-\\uDFF3\\uDFF5-\\uDFFB\\uDFFD\\uDFFE]|\\uD82C[\\uDC00-\\uDD22\\uDD50-\\uDD52\\uDD64-\\uDD67\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB]|\\uD837[\\uDF00-\\uDF1E]|\\uD838[\\uDD00-\\uDD2C\\uDD37-\\uDD3D\\uDD4E\\uDE90-\\uDEAD\\uDEC0-\\uDEEB]|\\uD839[\\uDFE0-\\uDFE6\\uDFE8-\\uDFEB\\uDFED\\uDFEE\\uDFF0-\\uDFFE]|\\uD83A[\\uDC00-\\uDCC4\\uDD00-\\uDD43\\uDD4B]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDEDF\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF38\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]|\\uD884[\\uDC00-\\uDF4A])\\S*/g;\nlet TitleCasePipe = /*#__PURE__*/(() => {\n class TitleCasePipe {\n transform(value) {\n if (value == null) return null;\n assertPipeArgument(TitleCasePipe, value);\n return value.replace(unicodeWordMatch, txt => txt[0].toUpperCase() + txt.slice(1).toLowerCase());\n }\n static \u0275fac = function TitleCasePipe_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || TitleCasePipe)();\n };\n static \u0275pipe = /* @__PURE__ */i0.\u0275\u0275definePipe({\n name: \"titlecase\",\n type: TitleCasePipe,\n pure: true\n });\n }\n return TitleCasePipe;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet UpperCasePipe = /*#__PURE__*/(() => {\n class UpperCasePipe {\n transform(value) {\n if (value == null) return null;\n assertPipeArgument(UpperCasePipe, value);\n return value.toUpperCase();\n }\n static \u0275fac = function UpperCasePipe_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || UpperCasePipe)();\n };\n static \u0275pipe = /* @__PURE__ */i0.\u0275\u0275definePipe({\n name: \"uppercase\",\n type: UpperCasePipe,\n pure: true\n });\n }\n return UpperCasePipe;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nfunction assertPipeArgument(pipe, value) {\n if (typeof value !== 'string') {\n throw invalidPipeArgumentError(pipe, value);\n }\n}\nconst DEFAULT_DATE_FORMAT = 'mediumDate';\nconst DATE_PIPE_DEFAULT_TIMEZONE = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'DATE_PIPE_DEFAULT_TIMEZONE' : '');\nconst DATE_PIPE_DEFAULT_OPTIONS = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'DATE_PIPE_DEFAULT_OPTIONS' : '');\nlet DatePipe = /*#__PURE__*/(() => {\n class DatePipe {\n locale;\n defaultTimezone;\n defaultOptions;\n constructor(locale, defaultTimezone, defaultOptions) {\n this.locale = locale;\n this.defaultTimezone = defaultTimezone;\n this.defaultOptions = defaultOptions;\n }\n transform(value, format, timezone, locale) {\n if (value == null || value === '' || value !== value) return null;\n try {\n const _format = format ?? this.defaultOptions?.dateFormat ?? DEFAULT_DATE_FORMAT;\n const _timezone = timezone ?? this.defaultOptions?.timezone ?? this.defaultTimezone ?? undefined;\n return formatDate(value, _format, locale || this.locale, _timezone);\n } catch (error) {\n throw invalidPipeArgumentError(DatePipe, error.message);\n }\n }\n static \u0275fac = function DatePipe_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || DatePipe)(i0.\u0275\u0275directiveInject(LOCALE_ID, 16), i0.\u0275\u0275directiveInject(DATE_PIPE_DEFAULT_TIMEZONE, 24), i0.\u0275\u0275directiveInject(DATE_PIPE_DEFAULT_OPTIONS, 24));\n };\n static \u0275pipe = /* @__PURE__ */i0.\u0275\u0275definePipe({\n name: \"date\",\n type: DatePipe,\n pure: true\n });\n }\n return DatePipe;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst _INTERPOLATION_REGEXP = /#/g;\nlet I18nPluralPipe = /*#__PURE__*/(() => {\n class I18nPluralPipe {\n _localization;\n constructor(_localization) {\n this._localization = _localization;\n }\n transform(value, pluralMap, locale) {\n if (value == null) return '';\n if (typeof pluralMap !== 'object' || pluralMap === null) {\n throw invalidPipeArgumentError(I18nPluralPipe, pluralMap);\n }\n const key = getPluralCategory(value, Object.keys(pluralMap), this._localization, locale);\n return pluralMap[key].replace(_INTERPOLATION_REGEXP, value.toString());\n }\n static \u0275fac = function I18nPluralPipe_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || I18nPluralPipe)(i0.\u0275\u0275directiveInject(NgLocalization, 16));\n };\n static \u0275pipe = /* @__PURE__ */i0.\u0275\u0275definePipe({\n name: \"i18nPlural\",\n type: I18nPluralPipe,\n pure: true\n });\n }\n return I18nPluralPipe;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet I18nSelectPipe = /*#__PURE__*/(() => {\n class I18nSelectPipe {\n transform(value, mapping) {\n if (value == null) return '';\n if (typeof mapping !== 'object' || typeof value !== 'string') {\n throw invalidPipeArgumentError(I18nSelectPipe, mapping);\n }\n if (mapping.hasOwnProperty(value)) {\n return mapping[value];\n }\n if (mapping.hasOwnProperty('other')) {\n return mapping['other'];\n }\n return '';\n }\n static \u0275fac = function I18nSelectPipe_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || I18nSelectPipe)();\n };\n static \u0275pipe = /* @__PURE__ */i0.\u0275\u0275definePipe({\n name: \"i18nSelect\",\n type: I18nSelectPipe,\n pure: true\n });\n }\n return I18nSelectPipe;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet JsonPipe = /*#__PURE__*/(() => {\n class JsonPipe {\n transform(value) {\n ngDevMode && warnIfSignal('JsonPipe', value);\n return JSON.stringify(value, null, 2);\n }\n static \u0275fac = function JsonPipe_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || JsonPipe)();\n };\n static \u0275pipe = /* @__PURE__ */i0.\u0275\u0275definePipe({\n name: \"json\",\n type: JsonPipe,\n pure: false\n });\n }\n return JsonPipe;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nfunction makeKeyValuePair(key, value) {\n return {\n key: key,\n value: value\n };\n}\nlet KeyValuePipe = /*#__PURE__*/(() => {\n class KeyValuePipe {\n differs;\n constructor(differs) {\n this.differs = differs;\n }\n differ;\n keyValues = [];\n compareFn = defaultComparator;\n transform(input, compareFn = defaultComparator) {\n ngDevMode && warnIfSignal('KeyValuePipe', input);\n if (!input || !(input instanceof Map) && typeof input !== 'object') {\n return null;\n }\n this.differ ??= this.differs.find(input).create();\n const differChanges = this.differ.diff(input);\n const compareFnChanged = compareFn !== this.compareFn;\n if (differChanges) {\n this.keyValues = [];\n differChanges.forEachItem(r => {\n this.keyValues.push(makeKeyValuePair(r.key, r.currentValue));\n });\n }\n if (differChanges || compareFnChanged) {\n if (compareFn) {\n this.keyValues.sort(compareFn);\n }\n this.compareFn = compareFn;\n }\n return this.keyValues;\n }\n static \u0275fac = function KeyValuePipe_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || KeyValuePipe)(i0.\u0275\u0275directiveInject(i0.KeyValueDiffers, 16));\n };\n static \u0275pipe = /* @__PURE__ */i0.\u0275\u0275definePipe({\n name: \"keyvalue\",\n type: KeyValuePipe,\n pure: false\n });\n }\n return KeyValuePipe;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nfunction defaultComparator(keyValueA, keyValueB) {\n const a = keyValueA.key;\n const b = keyValueB.key;\n if (a === b) return 0;\n if (a == null) return 1;\n if (b == null) return -1;\n if (typeof a == 'string' && typeof b == 'string') {\n return a < b ? -1 : 1;\n }\n if (typeof a == 'number' && typeof b == 'number') {\n return a - b;\n }\n if (typeof a == 'boolean' && typeof b == 'boolean') {\n return a < b ? -1 : 1;\n }\n const aString = String(a);\n const bString = String(b);\n return aString == bString ? 0 : aString < bString ? -1 : 1;\n}\nlet DecimalPipe = /*#__PURE__*/(() => {\n class DecimalPipe {\n _locale;\n constructor(_locale) {\n this._locale = _locale;\n }\n transform(value, digitsInfo, locale) {\n if (!isValue(value)) return null;\n locale ||= this._locale;\n try {\n const num = strToNumber(value);\n return formatNumber(num, locale, digitsInfo);\n } catch (error) {\n throw invalidPipeArgumentError(DecimalPipe, error.message);\n }\n }\n static \u0275fac = function DecimalPipe_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || DecimalPipe)(i0.\u0275\u0275directiveInject(LOCALE_ID, 16));\n };\n static \u0275pipe = /* @__PURE__ */i0.\u0275\u0275definePipe({\n name: \"number\",\n type: DecimalPipe,\n pure: true\n });\n }\n return DecimalPipe;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet PercentPipe = /*#__PURE__*/(() => {\n class PercentPipe {\n _locale;\n constructor(_locale) {\n this._locale = _locale;\n }\n transform(value, digitsInfo, locale) {\n if (!isValue(value)) return null;\n locale ||= this._locale;\n try {\n const num = strToNumber(value);\n return formatPercent(num, locale, digitsInfo);\n } catch (error) {\n throw invalidPipeArgumentError(PercentPipe, error.message);\n }\n }\n static \u0275fac = function PercentPipe_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || PercentPipe)(i0.\u0275\u0275directiveInject(LOCALE_ID, 16));\n };\n static \u0275pipe = /* @__PURE__ */i0.\u0275\u0275definePipe({\n name: \"percent\",\n type: PercentPipe,\n pure: true\n });\n }\n return PercentPipe;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet CurrencyPipe = /*#__PURE__*/(() => {\n class CurrencyPipe {\n _locale;\n _defaultCurrencyCode;\n constructor(_locale, _defaultCurrencyCode = 'USD') {\n this._locale = _locale;\n this._defaultCurrencyCode = _defaultCurrencyCode;\n }\n transform(value, currencyCode = this._defaultCurrencyCode, display = 'symbol', digitsInfo, locale) {\n if (!isValue(value)) return null;\n locale ||= this._locale;\n if (typeof display === 'boolean') {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n console.warn(`Warning: the currency pipe has been changed in Angular v5. The symbolDisplay option (third parameter) is now a string instead of a boolean. The accepted values are \"code\", \"symbol\" or \"symbol-narrow\".`);\n }\n display = display ? 'symbol' : 'code';\n }\n let currency = currencyCode || this._defaultCurrencyCode;\n if (display !== 'code') {\n if (display === 'symbol' || display === 'symbol-narrow') {\n currency = getCurrencySymbol(currency, display === 'symbol' ? 'wide' : 'narrow', locale);\n } else {\n currency = display;\n }\n }\n try {\n const num = strToNumber(value);\n return formatCurrency(num, locale, currency, currencyCode, digitsInfo);\n } catch (error) {\n throw invalidPipeArgumentError(CurrencyPipe, error.message);\n }\n }\n static \u0275fac = function CurrencyPipe_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || CurrencyPipe)(i0.\u0275\u0275directiveInject(LOCALE_ID, 16), i0.\u0275\u0275directiveInject(DEFAULT_CURRENCY_CODE, 16));\n };\n static \u0275pipe = /* @__PURE__ */i0.\u0275\u0275definePipe({\n name: \"currency\",\n type: CurrencyPipe,\n pure: true\n });\n }\n return CurrencyPipe;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nfunction isValue(value) {\n return !(value == null || value === '' || value !== value);\n}\nfunction strToNumber(value) {\n if (typeof value === 'string' && !isNaN(Number(value) - parseFloat(value))) {\n return Number(value);\n }\n if (typeof value !== 'number') {\n throw new _RuntimeError(2309, ngDevMode && `${value} is not a number`);\n }\n return value;\n}\nlet SlicePipe = /*#__PURE__*/(() => {\n class SlicePipe {\n transform(value, start, end) {\n if (value == null) return null;\n const supports = typeof value === 'string' || Array.isArray(value);\n if (!supports) {\n throw invalidPipeArgumentError(SlicePipe, value);\n }\n return value.slice(start, end);\n }\n static \u0275fac = function SlicePipe_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || SlicePipe)();\n };\n static \u0275pipe = /* @__PURE__ */i0.\u0275\u0275definePipe({\n name: \"slice\",\n type: SlicePipe,\n pure: false\n });\n }\n return SlicePipe;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst COMMON_PIPES = [AsyncPipe, UpperCasePipe, LowerCasePipe, JsonPipe, SlicePipe, DecimalPipe, PercentPipe, TitleCasePipe, CurrencyPipe, DatePipe, I18nPluralPipe, I18nSelectPipe, KeyValuePipe];\nlet CommonModule = /*#__PURE__*/(() => {\n class CommonModule {\n static \u0275fac = function CommonModule_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || CommonModule)();\n };\n static \u0275mod = /* @__PURE__ */i0.\u0275\u0275defineNgModule({\n type: CommonModule\n });\n static \u0275inj = /* @__PURE__ */i0.\u0275\u0275defineInjector({});\n }\n return CommonModule;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nexport { AsyncPipe, CommonModule, CurrencyPipe, DATE_PIPE_DEFAULT_OPTIONS, DATE_PIPE_DEFAULT_TIMEZONE, DatePipe, DecimalPipe, FormStyle, FormatWidth, HashLocationStrategy, I18nPluralPipe, I18nSelectPipe, JsonPipe, KeyValuePipe, LowerCasePipe, NgClass, NgComponentOutlet, NgForOf, NgForOfContext, NgIf, NgIfContext, NgLocaleLocalization, NgLocalization, NgPlural, NgPluralCase, NgStyle, NgSwitch, NgSwitchCase, NgSwitchDefault, NgTemplateOutlet, NumberFormatStyle, NumberSymbol, PercentPipe, Plural, SlicePipe, TitleCasePipe, TranslationWidth, UpperCasePipe, WeekDay, formatCurrency, formatDate, formatNumber, formatPercent, getCurrencySymbol, getLocaleCurrencyCode, getLocaleCurrencyName, getLocaleCurrencySymbol, getLocaleDateFormat, getLocaleDateTimeFormat, getLocaleDayNames, getLocaleDayPeriods, getLocaleDirection, getLocaleEraNames, getLocaleExtraDayPeriodRules, getLocaleExtraDayPeriods, getLocaleFirstDayOfWeek, getLocaleId, getLocaleMonthNames, getLocaleNumberFormat, getLocaleNumberSymbol, getLocalePluralCase, getLocaleTimeFormat, getLocaleWeekEndRange, getNumberOfCurrencyDigits };\n","/**\n * @license Angular v21.2.4\n * (c) 2010-2026 Google LLC. https://angular.dev/\n * License: MIT\n */\n\nexport { AsyncPipe, CommonModule, CurrencyPipe, DATE_PIPE_DEFAULT_OPTIONS, DATE_PIPE_DEFAULT_TIMEZONE, DatePipe, DecimalPipe, FormStyle, FormatWidth, HashLocationStrategy, I18nPluralPipe, I18nSelectPipe, JsonPipe, KeyValuePipe, LowerCasePipe, NgClass, NgComponentOutlet, NgForOf as NgFor, NgForOf, NgForOfContext, NgIf, NgIfContext, NgLocaleLocalization, NgLocalization, NgPlural, NgPluralCase, NgStyle, NgSwitch, NgSwitchCase, NgSwitchDefault, NgTemplateOutlet, NumberFormatStyle, NumberSymbol, PercentPipe, Plural, SlicePipe, TitleCasePipe, TranslationWidth, UpperCasePipe, WeekDay, formatCurrency, formatDate, formatNumber, formatPercent, getCurrencySymbol, getLocaleCurrencyCode, getLocaleCurrencyName, getLocaleCurrencySymbol, getLocaleDateFormat, getLocaleDateTimeFormat, getLocaleDayNames, getLocaleDayPeriods, getLocaleDirection, getLocaleEraNames, getLocaleExtraDayPeriodRules, getLocaleExtraDayPeriods, getLocaleFirstDayOfWeek, getLocaleId, getLocaleMonthNames, getLocaleNumberFormat, getLocaleNumberSymbol, getLocalePluralCase, getLocaleTimeFormat, getLocaleWeekEndRange, getNumberOfCurrencyDigits } from './_common_module-chunk.mjs';\nimport * as i0 from '@angular/core';\nimport { inject, DestroyRef, Injectable, \u0275registerLocaleData as _registerLocaleData, Version, \u0275\u0275defineInjectable as __defineInjectable, DOCUMENT, \u0275formatRuntimeError as _formatRuntimeError, InjectionToken, \u0275RuntimeError as _RuntimeError, \u0275IMAGE_CONFIG as _IMAGE_CONFIG, Renderer2, ElementRef, Injector, \u0275performanceMarkFeature as _performanceMarkFeature, NgZone, ApplicationRef, numberAttribute, booleanAttribute, Directive, Input, \u0275IMAGE_CONFIG_DEFAULTS as _IMAGE_CONFIG_DEFAULTS, \u0275unwrapSafeValue as _unwrapSafeValue, ChangeDetectorRef } from '@angular/core';\nexport { DOCUMENT, \u0275IMAGE_CONFIG as IMAGE_CONFIG } from '@angular/core';\nimport { PlatformNavigation } from './_platform_navigation-chunk.mjs';\nexport { PRECOMMIT_HANDLER_SUPPORTED as \u0275PRECOMMIT_HANDLER_SUPPORTED } from './_platform_navigation-chunk.mjs';\nexport { XhrFactory, parseCookieValue as \u0275parseCookieValue } from './_xhr-chunk.mjs';\nimport { Location, LocationStrategy, normalizeQueryParams } from './_location-chunk.mjs';\nexport { APP_BASE_HREF, NoTrailingSlashPathLocationStrategy, PathLocationStrategy, TrailingSlashPathLocationStrategy } from './_location-chunk.mjs';\nexport { BrowserPlatformLocation, LOCATION_INITIALIZED, PlatformLocation, DomAdapter as \u0275DomAdapter, getDOM as \u0275getDOM, setRootDomAdapter as \u0275setRootDomAdapter } from './_platform_location-chunk.mjs';\nimport 'rxjs';\nlet NavigationAdapterForLocation = /*#__PURE__*/(() => {\n class NavigationAdapterForLocation extends Location {\n navigation = inject(PlatformNavigation);\n destroyRef = inject(DestroyRef);\n constructor() {\n super(inject(LocationStrategy));\n this.registerNavigationListeners();\n }\n registerNavigationListeners() {\n const currentEntryChangeListener = () => {\n this._notifyUrlChangeListeners(this.path(true), this.getState());\n };\n this.navigation.addEventListener('currententrychange', currentEntryChangeListener);\n this.destroyRef.onDestroy(() => {\n this.navigation.removeEventListener('currententrychange', currentEntryChangeListener);\n });\n }\n getState() {\n return this.navigation.currentEntry?.getState();\n }\n replaceState(path, query = '', state = null) {\n const url = this.prepareExternalUrl(path + normalizeQueryParams(query));\n this.navigation.navigate(url, {\n state,\n history: 'replace'\n });\n }\n go(path, query = '', state = null) {\n const url = this.prepareExternalUrl(path + normalizeQueryParams(query));\n this.navigation.navigate(url, {\n state,\n history: 'push'\n });\n }\n back() {\n this.navigation.back();\n }\n forward() {\n this.navigation.forward();\n }\n onUrlChange(fn) {\n this._urlChangeListeners.push(fn);\n return () => {\n const fnIndex = this._urlChangeListeners.indexOf(fn);\n this._urlChangeListeners.splice(fnIndex, 1);\n };\n }\n static \u0275fac = function NavigationAdapterForLocation_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || NavigationAdapterForLocation)();\n };\n static \u0275prov = /* @__PURE__ */i0.\u0275\u0275defineInjectable({\n token: NavigationAdapterForLocation,\n factory: NavigationAdapterForLocation.\u0275fac\n });\n }\n return NavigationAdapterForLocation;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nfunction registerLocaleData(data, localeId, extraData) {\n return _registerLocaleData(data, localeId, extraData);\n}\nconst PLATFORM_BROWSER_ID = 'browser';\nconst PLATFORM_SERVER_ID = 'server';\nfunction isPlatformBrowser(platformId) {\n return platformId === PLATFORM_BROWSER_ID;\n}\nfunction isPlatformServer(platformId) {\n return platformId === PLATFORM_SERVER_ID;\n}\nconst VERSION = /* @__PURE__ */new Version('21.2.4');\nlet ViewportScroller = /*#__PURE__*/(() => {\n class ViewportScroller {\n static \u0275prov = /* @__PURE__ */\n __defineInjectable({\n token: ViewportScroller,\n providedIn: 'root',\n factory: () => typeof ngServerMode !== 'undefined' && ngServerMode ? new NullViewportScroller() : new BrowserViewportScroller(inject(DOCUMENT), window)\n });\n }\n return ViewportScroller;\n})();\nclass BrowserViewportScroller {\n document;\n window;\n offset = () => [0, 0];\n constructor(document, window) {\n this.document = document;\n this.window = window;\n }\n setOffset(offset) {\n if (Array.isArray(offset)) {\n this.offset = () => offset;\n } else {\n this.offset = offset;\n }\n }\n getScrollPosition() {\n return [this.window.scrollX, this.window.scrollY];\n }\n scrollToPosition(position, options) {\n this.window.scrollTo({\n ...options,\n left: position[0],\n top: position[1]\n });\n }\n scrollToAnchor(target, options) {\n const elSelected = findAnchorFromDocument(this.document, target);\n if (elSelected) {\n this.scrollToElement(elSelected, options);\n elSelected.focus();\n }\n }\n setHistoryScrollRestoration(scrollRestoration) {\n try {\n this.window.history.scrollRestoration = scrollRestoration;\n } catch {\n console.warn(_formatRuntimeError(2400, ngDevMode && 'Failed to set `window.history.scrollRestoration`. ' + 'This may occur when:\\n' + '\u2022 The script is running inside a sandboxed iframe\\n' + '\u2022 The window is partially navigated or inactive\\n' + '\u2022 The script is executed in an untrusted or special context (e.g., test runners, browser extensions, or content previews)\\n' + 'Scroll position may not be preserved across navigation.'));\n }\n }\n scrollToElement(el, options) {\n const rect = el.getBoundingClientRect();\n const left = rect.left + this.window.pageXOffset;\n const top = rect.top + this.window.pageYOffset;\n const offset = this.offset();\n this.window.scrollTo({\n ...options,\n left: left - offset[0],\n top: top - offset[1]\n });\n }\n}\nfunction findAnchorFromDocument(document, target) {\n const documentResult = document.getElementById(target) || document.getElementsByName(target)[0];\n if (documentResult) {\n return documentResult;\n }\n if (typeof document.createTreeWalker === 'function' && document.body && typeof document.body.attachShadow === 'function') {\n const treeWalker = document.createTreeWalker(document.body, NodeFilter.SHOW_ELEMENT);\n let currentNode = treeWalker.currentNode;\n while (currentNode) {\n const shadowRoot = currentNode.shadowRoot;\n if (shadowRoot) {\n const result = shadowRoot.getElementById(target) || shadowRoot.querySelector(`[name=\"${target}\"]`);\n if (result) {\n return result;\n }\n }\n currentNode = treeWalker.nextNode();\n }\n }\n return null;\n}\nclass NullViewportScroller {\n setOffset(offset) {}\n getScrollPosition() {\n return [0, 0];\n }\n scrollToPosition(position) {}\n scrollToAnchor(anchor) {}\n setHistoryScrollRestoration(scrollRestoration) {}\n}\nconst PLACEHOLDER_QUALITY = '20';\nfunction getUrl(src, win) {\n return isAbsoluteUrl(src) ? new URL(src) : new URL(src, win.location.href);\n}\nfunction isAbsoluteUrl(src) {\n return /^https?:\\/\\//.test(src);\n}\nfunction extractHostname(url) {\n return isAbsoluteUrl(url) ? new URL(url).hostname : url;\n}\nfunction isValidPath(path) {\n const isString = typeof path === 'string';\n if (!isString || path.trim() === '') {\n return false;\n }\n try {\n const url = new URL(path);\n return true;\n } catch {\n return false;\n }\n}\nfunction normalizePath(path) {\n return path.endsWith('/') ? path.slice(0, -1) : path;\n}\nfunction normalizeSrc(src) {\n return src.startsWith('/') ? src.slice(1) : src;\n}\nconst noopImageLoader = config => config.src;\nconst IMAGE_LOADER = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'ImageLoader' : '', {\n factory: () => noopImageLoader\n});\nfunction createImageLoader(buildUrlFn, exampleUrls) {\n return function provideImageLoader(path) {\n if (!isValidPath(path)) {\n throwInvalidPathError(path, exampleUrls || []);\n }\n path = normalizePath(path);\n const loaderFn = config => {\n if (isAbsoluteUrl(config.src)) {\n throwUnexpectedAbsoluteUrlError(path, config.src);\n }\n return buildUrlFn(path, {\n ...config,\n src: normalizeSrc(config.src)\n });\n };\n const providers = [{\n provide: IMAGE_LOADER,\n useValue: loaderFn\n }];\n return providers;\n };\n}\nfunction throwInvalidPathError(path, exampleUrls) {\n throw new _RuntimeError(2959, ngDevMode && `Image loader has detected an invalid path (\\`${path}\\`). ` + `To fix this, supply a path using one of the following formats: ${exampleUrls.join(' or ')}`);\n}\nfunction throwUnexpectedAbsoluteUrlError(path, url) {\n throw new _RuntimeError(2959, ngDevMode && `Image loader has detected a \\`\\` tag with an invalid \\`ngSrc\\` attribute: ${url}. ` + `This image loader expects \\`ngSrc\\` to be a relative URL - ` + `however the provided value is an absolute URL. ` + `To fix this, provide \\`ngSrc\\` as a path relative to the base URL ` + `configured for this loader (\\`${path}\\`).`);\n}\nfunction normalizeLoaderTransform(transform, separator) {\n if (typeof transform === 'string') {\n return transform;\n }\n return Object.entries(transform).map(([key, value]) => `${key}${separator}${value}`).join(',');\n}\nconst provideCloudflareLoader = /*#__PURE__*/createImageLoader(createCloudflareUrl, ngDevMode ? ['https:///cdn-cgi/image//'] : undefined);\nfunction createCloudflareUrl(path, config) {\n let params = `format=auto`;\n if (config.width) {\n params += `,width=${config.width}`;\n }\n if (config.height) {\n params += `,height=${config.height}`;\n }\n if (config.isPlaceholder) {\n params += `,quality=${PLACEHOLDER_QUALITY}`;\n }\n if (config.loaderParams?.['transform']) {\n const transformStr = normalizeLoaderTransform(config.loaderParams['transform'], '=');\n params += `,${transformStr}`;\n }\n return `${path}/cdn-cgi/image/${params}/${config.src}`;\n}\nconst cloudinaryLoaderInfo = {\n name: 'Cloudinary',\n testUrl: isCloudinaryUrl\n};\nconst CLOUDINARY_LOADER_REGEX = /https?\\:\\/\\/[^\\/]+\\.cloudinary\\.com\\/.+/;\nfunction isCloudinaryUrl(url) {\n return CLOUDINARY_LOADER_REGEX.test(url);\n}\nconst provideCloudinaryLoader = /*#__PURE__*/createImageLoader(createCloudinaryUrl, ngDevMode ? ['https://res.cloudinary.com/mysite', 'https://mysite.cloudinary.com', 'https://subdomain.mysite.com'] : undefined);\nfunction createCloudinaryUrl(path, config) {\n const quality = config.isPlaceholder ? 'q_auto:low' : 'q_auto';\n let params = `f_auto,${quality}`;\n if (config.width) {\n params += `,w_${config.width}`;\n }\n if (config.height) {\n params += `,h_${config.height}`;\n }\n if (config.loaderParams?.['rounded']) {\n params += `,r_max`;\n }\n if (config.loaderParams?.['transform']) {\n const transformStr = normalizeLoaderTransform(config.loaderParams['transform'], '_');\n params += `,${transformStr}`;\n }\n return `${path}/image/upload/${params}/${config.src}`;\n}\nconst imageKitLoaderInfo = {\n name: 'ImageKit',\n testUrl: isImageKitUrl\n};\nconst IMAGE_KIT_LOADER_REGEX = /https?\\:\\/\\/[^\\/]+\\.imagekit\\.io\\/.+/;\nfunction isImageKitUrl(url) {\n return IMAGE_KIT_LOADER_REGEX.test(url);\n}\nconst provideImageKitLoader = /*#__PURE__*/createImageLoader(createImagekitUrl, ngDevMode ? ['https://ik.imagekit.io/mysite', 'https://subdomain.mysite.com'] : undefined);\nfunction createImagekitUrl(path, config) {\n const {\n src,\n width\n } = config;\n const params = [];\n if (width) {\n params.push(`w-${width}`);\n }\n if (config.height) {\n params.push(`h-${config.height}`);\n }\n if (config.isPlaceholder) {\n params.push(`q-${PLACEHOLDER_QUALITY}`);\n }\n if (config.loaderParams?.['transform']) {\n const transformStr = normalizeLoaderTransform(config.loaderParams['transform'], '-');\n params.push(transformStr);\n }\n const urlSegments = params.length ? [path, `tr:${params.join(',')}`, src] : [path, src];\n const url = new URL(urlSegments.join('/'));\n return url.href;\n}\nconst imgixLoaderInfo = {\n name: 'Imgix',\n testUrl: isImgixUrl\n};\nconst IMGIX_LOADER_REGEX = /https?\\:\\/\\/[^\\/]+\\.imgix\\.net\\/.+/;\nfunction isImgixUrl(url) {\n return IMGIX_LOADER_REGEX.test(url);\n}\nconst provideImgixLoader = /*#__PURE__*/createImageLoader(createImgixUrl, ngDevMode ? ['https://somepath.imgix.net/'] : undefined);\nfunction createImgixUrl(path, config) {\n const params = [];\n params.push('auto=format');\n if (config.width) {\n params.push(`w=${config.width}`);\n }\n if (config.height) {\n params.push(`h=${config.height}`);\n }\n if (config.isPlaceholder) {\n params.push(`q=${PLACEHOLDER_QUALITY}`);\n }\n if (config.loaderParams?.['transform']) {\n const transform = normalizeLoaderTransform(config.loaderParams['transform'], '=').split(',');\n params.push(...transform);\n }\n const url = new URL(`${path}/${config.src}`);\n url.search = params.join('&');\n return url.href;\n}\nconst netlifyLoaderInfo = {\n name: 'Netlify',\n testUrl: isNetlifyUrl\n};\nconst NETLIFY_LOADER_REGEX = /https?\\:\\/\\/[^\\/]+\\.netlify\\.app\\/.+/;\nfunction isNetlifyUrl(url) {\n return NETLIFY_LOADER_REGEX.test(url);\n}\nfunction provideNetlifyLoader(path) {\n if (path && !isValidPath(path)) {\n throw new _RuntimeError(2959, ngDevMode && `Image loader has detected an invalid path (\\`${path}\\`). ` + `To fix this, supply either the full URL to the Netlify site, or leave it empty to use the current site.`);\n }\n if (path) {\n const url = new URL(path);\n path = url.origin;\n }\n const loaderFn = config => {\n return createNetlifyUrl(config, path);\n };\n const providers = [{\n provide: IMAGE_LOADER,\n useValue: loaderFn\n }];\n return providers;\n}\nconst validParams = /*#__PURE__*/new Map([['height', 'h'], ['fit', 'fit'], ['quality', 'q'], ['q', 'q'], ['position', 'position']]);\nfunction createNetlifyUrl(config, path) {\n const url = new URL(path ?? 'https://a/');\n url.pathname = '/.netlify/images';\n if (!isAbsoluteUrl(config.src) && !config.src.startsWith('/')) {\n config.src = '/' + config.src;\n }\n url.searchParams.set('url', config.src);\n if (config.width) {\n url.searchParams.set('w', config.width.toString());\n }\n if (config.height) {\n url.searchParams.set('h', config.height.toString());\n }\n const configQuality = config.loaderParams?.['quality'] ?? config.loaderParams?.['q'];\n if (config.isPlaceholder && !configQuality) {\n url.searchParams.set('q', PLACEHOLDER_QUALITY);\n }\n for (const [param, value] of Object.entries(config.loaderParams ?? {})) {\n if (validParams.has(param)) {\n url.searchParams.set(validParams.get(param), value.toString());\n } else {\n if (ngDevMode) {\n console.warn(_formatRuntimeError(2959, `The Netlify image loader has detected an \\`\\` tag with the unsupported attribute \"\\`${param}\\`\".`));\n }\n }\n }\n return url.hostname === 'a' ? url.href.replace(url.origin, '') : url.href;\n}\nfunction imgDirectiveDetails(ngSrc, includeNgSrc = true) {\n const ngSrcInfo = includeNgSrc ? `(activated on an element with the \\`ngSrc=\"${ngSrc}\"\\`) ` : '';\n return `The NgOptimizedImage directive ${ngSrcInfo}has detected that`;\n}\nfunction assertDevMode(checkName) {\n if (!ngDevMode) {\n throw new _RuntimeError(2958, `Unexpected invocation of the ${checkName} in the prod mode. ` + `Please make sure that the prod mode is enabled for production builds.`);\n }\n}\nlet LCPImageObserver = /*#__PURE__*/(() => {\n class LCPImageObserver {\n images = new Map();\n window = inject(DOCUMENT).defaultView;\n observer = null;\n constructor() {\n assertDevMode('LCP checker');\n if ((typeof ngServerMode === 'undefined' || !ngServerMode) && typeof PerformanceObserver !== 'undefined') {\n this.observer = this.initPerformanceObserver();\n }\n }\n initPerformanceObserver() {\n const observer = new PerformanceObserver(entryList => {\n const entries = entryList.getEntries();\n if (entries.length === 0) return;\n const lcpElement = entries[entries.length - 1];\n const imgSrc = lcpElement.element?.src ?? '';\n if (imgSrc.startsWith('data:') || imgSrc.startsWith('blob:')) return;\n const img = this.images.get(imgSrc);\n if (!img) return;\n if (!img.priority && !img.alreadyWarnedPriority) {\n img.alreadyWarnedPriority = true;\n logMissingPriorityError(imgSrc);\n }\n if (img.modified && !img.alreadyWarnedModified) {\n img.alreadyWarnedModified = true;\n logModifiedWarning(imgSrc);\n }\n });\n observer.observe({\n type: 'largest-contentful-paint',\n buffered: true\n });\n return observer;\n }\n registerImage(rewrittenSrc, isPriority) {\n if (!this.observer) return;\n const url = getUrl(rewrittenSrc, this.window).href;\n const existingState = this.images.get(url);\n if (existingState) {\n existingState.priority = existingState.priority || isPriority;\n existingState.count++;\n } else {\n const newObservedImageState = {\n priority: isPriority,\n modified: false,\n alreadyWarnedModified: false,\n alreadyWarnedPriority: false,\n count: 1\n };\n this.images.set(url, newObservedImageState);\n }\n }\n unregisterImage(rewrittenSrc) {\n if (!this.observer) return;\n const url = getUrl(rewrittenSrc, this.window).href;\n const existingState = this.images.get(url);\n if (existingState) {\n existingState.count--;\n if (existingState.count <= 0) {\n this.images.delete(url);\n }\n }\n }\n updateImage(originalSrc, newSrc) {\n if (!this.observer) return;\n const originalUrl = getUrl(originalSrc, this.window).href;\n const newUrl = getUrl(newSrc, this.window).href;\n if (originalUrl === newUrl) return;\n const originalState = this.images.get(originalUrl);\n if (!originalState) return;\n originalState.count--;\n if (originalState.count <= 0) {\n this.images.delete(originalUrl);\n }\n const newState = this.images.get(newUrl);\n if (newState) {\n newState.priority = newState.priority || originalState.priority;\n newState.modified = true;\n newState.alreadyWarnedPriority = newState.alreadyWarnedPriority || originalState.alreadyWarnedPriority;\n newState.alreadyWarnedModified = newState.alreadyWarnedModified || originalState.alreadyWarnedModified;\n newState.count++;\n } else {\n this.images.set(newUrl, {\n priority: originalState.priority,\n modified: true,\n alreadyWarnedModified: originalState.alreadyWarnedModified,\n alreadyWarnedPriority: originalState.alreadyWarnedPriority,\n count: 1\n });\n }\n }\n ngOnDestroy() {\n if (!this.observer) return;\n this.observer.disconnect();\n this.images.clear();\n }\n static \u0275fac = function LCPImageObserver_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || LCPImageObserver)();\n };\n static \u0275prov = /* @__PURE__ */i0.\u0275\u0275defineInjectable({\n token: LCPImageObserver,\n factory: LCPImageObserver.\u0275fac,\n providedIn: 'root'\n });\n }\n return LCPImageObserver;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nfunction logMissingPriorityError(ngSrc) {\n const directiveDetails = imgDirectiveDetails(ngSrc);\n console.error(_formatRuntimeError(2955, `${directiveDetails} this image is the Largest Contentful Paint (LCP) ` + `element but was not marked \"priority\". This image should be marked ` + `\"priority\" in order to prioritize its loading. ` + `To fix this, add the \"priority\" attribute.`));\n}\nfunction logModifiedWarning(ngSrc) {\n const directiveDetails = imgDirectiveDetails(ngSrc);\n console.warn(_formatRuntimeError(2964, `${directiveDetails} this image is the Largest Contentful Paint (LCP) ` + `element and has had its \"ngSrc\" attribute modified. This can cause ` + `slower loading performance. It is recommended not to modify the \"ngSrc\" ` + `property on any image which could be the LCP element.`));\n}\nconst INTERNAL_PRECONNECT_CHECK_BLOCKLIST = /*#__PURE__*/new Set(['localhost', '127.0.0.1', '0.0.0.0', '[::1]']);\nconst PRECONNECT_CHECK_BLOCKLIST = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'PRECONNECT_CHECK_BLOCKLIST' : '');\nlet PreconnectLinkChecker = /*#__PURE__*/(() => {\n class PreconnectLinkChecker {\n document = inject(DOCUMENT);\n preconnectLinks = null;\n alreadySeen = new Set();\n window = this.document.defaultView;\n blocklist = new Set(INTERNAL_PRECONNECT_CHECK_BLOCKLIST);\n constructor() {\n assertDevMode('preconnect link checker');\n const blocklist = inject(PRECONNECT_CHECK_BLOCKLIST, {\n optional: true\n });\n if (blocklist) {\n this.populateBlocklist(blocklist);\n }\n }\n populateBlocklist(origins) {\n if (Array.isArray(origins)) {\n deepForEach(origins, origin => {\n this.blocklist.add(extractHostname(origin));\n });\n } else {\n this.blocklist.add(extractHostname(origins));\n }\n }\n assertPreconnect(rewrittenSrc, originalNgSrc) {\n if (typeof ngServerMode !== 'undefined' && ngServerMode) return;\n const imgUrl = getUrl(rewrittenSrc, this.window);\n if (this.blocklist.has(imgUrl.hostname) || this.alreadySeen.has(imgUrl.origin)) return;\n this.alreadySeen.add(imgUrl.origin);\n this.preconnectLinks ??= this.queryPreconnectLinks();\n if (!this.preconnectLinks.has(imgUrl.origin)) {\n console.warn(_formatRuntimeError(2956, `${imgDirectiveDetails(originalNgSrc)} there is no preconnect tag present for this ` + `image. Preconnecting to the origin(s) that serve priority images ensures that these ` + `images are delivered as soon as possible. To fix this, please add the following ` + `element into the of the document:\\n` + ` `));\n }\n }\n queryPreconnectLinks() {\n const preconnectUrls = new Set();\n const links = this.document.querySelectorAll('link[rel=preconnect]');\n for (const link of links) {\n const url = getUrl(link.href, this.window);\n preconnectUrls.add(url.origin);\n }\n return preconnectUrls;\n }\n ngOnDestroy() {\n this.preconnectLinks?.clear();\n this.alreadySeen.clear();\n }\n static \u0275fac = function PreconnectLinkChecker_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || PreconnectLinkChecker)();\n };\n static \u0275prov = /* @__PURE__ */i0.\u0275\u0275defineInjectable({\n token: PreconnectLinkChecker,\n factory: PreconnectLinkChecker.\u0275fac,\n providedIn: 'root'\n });\n }\n return PreconnectLinkChecker;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nfunction deepForEach(input, fn) {\n for (let value of input) {\n Array.isArray(value) ? deepForEach(value, fn) : fn(value);\n }\n}\nconst DEFAULT_PRELOADED_IMAGES_LIMIT = 5;\nconst PRELOADED_IMAGES = /*#__PURE__*/new InjectionToken(typeof ngDevMode === 'undefined' || ngDevMode ? 'NG_OPTIMIZED_PRELOADED_IMAGES' : '', {\n factory: () => new Set()\n});\nlet PreloadLinkCreator = /*#__PURE__*/(() => {\n class PreloadLinkCreator {\n preloadedImages = inject(PRELOADED_IMAGES);\n document = inject(DOCUMENT);\n errorShown = false;\n createPreloadLinkTag(renderer, src, srcset, sizes) {\n if (ngDevMode && !this.errorShown && this.preloadedImages.size >= DEFAULT_PRELOADED_IMAGES_LIMIT) {\n this.errorShown = true;\n console.warn(_formatRuntimeError(2961, `The \\`NgOptimizedImage\\` directive has detected that more than ` + `${DEFAULT_PRELOADED_IMAGES_LIMIT} images were marked as priority. ` + `This might negatively affect an overall performance of the page. ` + `To fix this, remove the \"priority\" attribute from images with less priority.`));\n }\n if (this.preloadedImages.has(src)) {\n return;\n }\n this.preloadedImages.add(src);\n const preload = renderer.createElement('link');\n renderer.setAttribute(preload, 'as', 'image');\n renderer.setAttribute(preload, 'href', src);\n renderer.setAttribute(preload, 'rel', 'preload');\n renderer.setAttribute(preload, 'fetchpriority', 'high');\n if (sizes) {\n renderer.setAttribute(preload, 'imageSizes', sizes);\n }\n if (srcset) {\n renderer.setAttribute(preload, 'imageSrcset', srcset);\n }\n renderer.appendChild(this.document.head, preload);\n }\n static \u0275fac = function PreloadLinkCreator_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || PreloadLinkCreator)();\n };\n static \u0275prov = /* @__PURE__ */i0.\u0275\u0275defineInjectable({\n token: PreloadLinkCreator,\n factory: PreloadLinkCreator.\u0275fac,\n providedIn: 'root'\n });\n }\n return PreloadLinkCreator;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst BASE64_IMG_MAX_LENGTH_IN_ERROR = 50;\nconst VALID_WIDTH_DESCRIPTOR_SRCSET = /^((\\s*\\d+w\\s*(,|$)){1,})$/;\nconst VALID_DENSITY_DESCRIPTOR_SRCSET = /^((\\s*\\d+(\\.\\d+)?x\\s*(,|$)){1,})$/;\nconst ABSOLUTE_SRCSET_DENSITY_CAP = 3;\nconst RECOMMENDED_SRCSET_DENSITY_CAP = 2;\nconst DENSITY_SRCSET_MULTIPLIERS = [1, 2];\nconst VIEWPORT_BREAKPOINT_CUTOFF = 640;\nconst ASPECT_RATIO_TOLERANCE = 0.1;\nconst OVERSIZED_IMAGE_TOLERANCE = 1000;\nconst FIXED_SRCSET_WIDTH_LIMIT = 1920;\nconst FIXED_SRCSET_HEIGHT_LIMIT = 1080;\nconst PLACEHOLDER_DIMENSION_LIMIT = 1000;\nconst DATA_URL_WARN_LIMIT = 4000;\nconst DATA_URL_ERROR_LIMIT = 10000;\nconst BUILT_IN_LOADERS = [imgixLoaderInfo, imageKitLoaderInfo, cloudinaryLoaderInfo, netlifyLoaderInfo];\nconst PRIORITY_COUNT_THRESHOLD = 10;\nlet IMGS_WITH_PRIORITY_ATTR_COUNT = 0;\nlet NgOptimizedImage = /*#__PURE__*/(() => {\n class NgOptimizedImage {\n imageLoader = inject(IMAGE_LOADER);\n config = processConfig(inject(_IMAGE_CONFIG));\n renderer = inject(Renderer2);\n imgElement = inject(ElementRef).nativeElement;\n injector = inject(Injector);\n destroyRef = inject(DestroyRef);\n lcpObserver;\n _renderedSrc = null;\n ngSrc;\n ngSrcset;\n sizes;\n width;\n height;\n decoding;\n loading;\n priority = false;\n loaderParams;\n disableOptimizedSrcset = false;\n fill = false;\n placeholder;\n placeholderConfig;\n src;\n srcset;\n constructor() {\n if (ngDevMode) {\n this.lcpObserver = this.injector.get(LCPImageObserver);\n this.destroyRef.onDestroy(() => {\n if (!this.priority && this._renderedSrc !== null) {\n this.lcpObserver.unregisterImage(this._renderedSrc);\n }\n });\n }\n }\n ngOnInit() {\n _performanceMarkFeature('NgOptimizedImage');\n if (ngDevMode) {\n const ngZone = this.injector.get(NgZone);\n assertNonEmptyInput(this, 'ngSrc', this.ngSrc);\n assertValidNgSrcset(this, this.ngSrcset);\n assertNoConflictingSrc(this);\n if (this.ngSrcset) {\n assertNoConflictingSrcset(this);\n }\n assertNotBase64Image(this);\n assertNotBlobUrl(this);\n if (this.fill) {\n assertEmptyWidthAndHeight(this);\n ngZone.runOutsideAngular(() => assertNonZeroRenderedHeight(this, this.imgElement, this.renderer, this.destroyRef));\n } else {\n assertNonEmptyWidthAndHeight(this);\n if (this.height !== undefined) {\n assertGreaterThanZero(this, this.height, 'height');\n }\n if (this.width !== undefined) {\n assertGreaterThanZero(this, this.width, 'width');\n }\n ngZone.runOutsideAngular(() => assertNoImageDistortion(this, this.imgElement, this.renderer, this.destroyRef));\n }\n assertValidLoadingInput(this);\n assertValidDecodingInput(this);\n if (!this.ngSrcset) {\n assertNoComplexSizes(this);\n }\n assertValidPlaceholder(this, this.imageLoader);\n assertNotMissingBuiltInLoader(this.ngSrc, this.imageLoader);\n assertNoNgSrcsetWithoutLoader(this, this.imageLoader);\n assertNoLoaderParamsWithoutLoader(this, this.imageLoader);\n ngZone.runOutsideAngular(() => {\n this.lcpObserver.registerImage(this.getRewrittenSrc(), this.priority);\n });\n if (this.priority) {\n const checker = this.injector.get(PreconnectLinkChecker);\n checker.assertPreconnect(this.getRewrittenSrc(), this.ngSrc);\n if (typeof ngServerMode !== 'undefined' && !ngServerMode) {\n const applicationRef = this.injector.get(ApplicationRef);\n assetPriorityCountBelowThreshold(applicationRef);\n }\n }\n }\n if (this.placeholder) {\n this.removePlaceholderOnLoad(this.imgElement);\n }\n this.setHostAttributes();\n }\n setHostAttributes() {\n if (this.fill) {\n this.sizes ||= '100vw';\n } else {\n this.setHostAttribute('width', this.width.toString());\n this.setHostAttribute('height', this.height.toString());\n }\n this.setHostAttribute('loading', this.getLoadingBehavior());\n this.setHostAttribute('fetchpriority', this.getFetchPriority());\n this.setHostAttribute('decoding', this.getDecoding());\n this.setHostAttribute('ng-img', 'true');\n const rewrittenSrcset = this.updateSrcAndSrcset();\n if (this.sizes) {\n if (this.getLoadingBehavior() === 'lazy') {\n this.setHostAttribute('sizes', 'auto, ' + this.sizes);\n } else {\n this.setHostAttribute('sizes', this.sizes);\n }\n } else {\n if (this.ngSrcset && VALID_WIDTH_DESCRIPTOR_SRCSET.test(this.ngSrcset) && this.getLoadingBehavior() === 'lazy') {\n this.setHostAttribute('sizes', 'auto, 100vw');\n }\n }\n if (typeof ngServerMode !== 'undefined' && ngServerMode && this.priority) {\n const preloadLinkCreator = this.injector.get(PreloadLinkCreator);\n preloadLinkCreator.createPreloadLinkTag(this.renderer, this.getRewrittenSrc(), rewrittenSrcset, this.sizes);\n }\n }\n ngOnChanges(changes) {\n if (ngDevMode) {\n assertNoPostInitInputChange(this, changes, ['ngSrcset', 'width', 'height', 'priority', 'fill', 'loading', 'sizes', 'loaderParams', 'disableOptimizedSrcset']);\n }\n if (changes['ngSrc'] && !changes['ngSrc'].isFirstChange()) {\n const oldSrc = this._renderedSrc;\n this.updateSrcAndSrcset(true);\n if (ngDevMode) {\n const newSrc = this._renderedSrc;\n if (oldSrc && newSrc && oldSrc !== newSrc) {\n const ngZone = this.injector.get(NgZone);\n ngZone.runOutsideAngular(() => {\n this.lcpObserver.updateImage(oldSrc, newSrc);\n });\n }\n }\n }\n if (ngDevMode && changes['placeholder']?.currentValue && typeof ngServerMode !== 'undefined' && !ngServerMode) {\n assertPlaceholderDimensions(this, this.imgElement);\n }\n }\n getAspectRatio() {\n if (this.width && this.height && this.height !== 0) {\n return this.width / this.height;\n }\n return null;\n }\n callImageLoader(configWithoutCustomParams) {\n let augmentedConfig = configWithoutCustomParams;\n if (this.loaderParams) {\n augmentedConfig.loaderParams = this.loaderParams;\n }\n const ratio = this.getAspectRatio();\n if (ratio !== null && augmentedConfig.width) {\n augmentedConfig.height = Math.round(augmentedConfig.width / ratio);\n }\n return this.imageLoader(augmentedConfig);\n }\n getLoadingBehavior() {\n if (!this.priority && this.loading !== undefined) {\n return this.loading;\n }\n return this.priority ? 'eager' : 'lazy';\n }\n getFetchPriority() {\n return this.priority ? 'high' : 'auto';\n }\n getDecoding() {\n if (this.priority) {\n return 'sync';\n }\n return this.decoding ?? 'auto';\n }\n getRewrittenSrc() {\n if (!this._renderedSrc) {\n const imgConfig = {\n src: this.ngSrc\n };\n this._renderedSrc = this.callImageLoader(imgConfig);\n }\n return this._renderedSrc;\n }\n getRewrittenSrcset() {\n const widthSrcSet = VALID_WIDTH_DESCRIPTOR_SRCSET.test(this.ngSrcset);\n const finalSrcs = this.ngSrcset.split(',').filter(src => src !== '').map(srcStr => {\n srcStr = srcStr.trim();\n const width = widthSrcSet ? parseFloat(srcStr) : parseFloat(srcStr) * this.width;\n return `${this.callImageLoader({\n src: this.ngSrc,\n width\n })} ${srcStr}`;\n });\n return finalSrcs.join(', ');\n }\n getAutomaticSrcset() {\n if (this.sizes) {\n return this.getResponsiveSrcset();\n } else {\n return this.getFixedSrcset();\n }\n }\n getResponsiveSrcset() {\n const {\n breakpoints\n } = this.config;\n let filteredBreakpoints = breakpoints;\n if (this.sizes?.trim() === '100vw') {\n filteredBreakpoints = breakpoints.filter(bp => bp >= VIEWPORT_BREAKPOINT_CUTOFF);\n }\n const finalSrcs = filteredBreakpoints.map(bp => `${this.callImageLoader({\n src: this.ngSrc,\n width: bp\n })} ${bp}w`);\n return finalSrcs.join(', ');\n }\n updateSrcAndSrcset(forceSrcRecalc = false) {\n if (forceSrcRecalc) {\n this._renderedSrc = null;\n }\n const rewrittenSrc = this.getRewrittenSrc();\n this.setHostAttribute('src', rewrittenSrc);\n let rewrittenSrcset = undefined;\n if (this.ngSrcset) {\n rewrittenSrcset = this.getRewrittenSrcset();\n } else if (this.shouldGenerateAutomaticSrcset()) {\n rewrittenSrcset = this.getAutomaticSrcset();\n }\n if (rewrittenSrcset) {\n this.setHostAttribute('srcset', rewrittenSrcset);\n }\n return rewrittenSrcset;\n }\n getFixedSrcset() {\n const finalSrcs = DENSITY_SRCSET_MULTIPLIERS.map(multiplier => `${this.callImageLoader({\n src: this.ngSrc,\n width: this.width * multiplier\n })} ${multiplier}x`);\n return finalSrcs.join(', ');\n }\n shouldGenerateAutomaticSrcset() {\n let oversizedImage = false;\n if (!this.sizes) {\n oversizedImage = this.width > FIXED_SRCSET_WIDTH_LIMIT || this.height > FIXED_SRCSET_HEIGHT_LIMIT;\n }\n return !this.disableOptimizedSrcset && !this.srcset && this.imageLoader !== noopImageLoader && !oversizedImage;\n }\n generatePlaceholder(placeholderInput) {\n const {\n placeholderResolution\n } = this.config;\n if (placeholderInput === true) {\n return `url(${this.callImageLoader({\n src: this.ngSrc,\n width: placeholderResolution,\n isPlaceholder: true\n })})`;\n } else if (typeof placeholderInput === 'string') {\n return `url(${placeholderInput})`;\n }\n return null;\n }\n shouldBlurPlaceholder(placeholderConfig) {\n if (!placeholderConfig || !placeholderConfig.hasOwnProperty('blur')) {\n return true;\n }\n return Boolean(placeholderConfig.blur);\n }\n removePlaceholderOnLoad(img) {\n const callback = () => {\n const changeDetectorRef = this.injector.get(ChangeDetectorRef);\n removeLoadListenerFn();\n removeErrorListenerFn();\n this.placeholder = false;\n changeDetectorRef.markForCheck();\n };\n const removeLoadListenerFn = this.renderer.listen(img, 'load', callback);\n const removeErrorListenerFn = this.renderer.listen(img, 'error', callback);\n this.destroyRef.onDestroy(() => {\n removeLoadListenerFn();\n removeErrorListenerFn();\n });\n callOnLoadIfImageIsLoaded(img, callback);\n }\n setHostAttribute(name, value) {\n this.renderer.setAttribute(this.imgElement, name, value);\n }\n static \u0275fac = function NgOptimizedImage_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || NgOptimizedImage)();\n };\n static \u0275dir = /* @__PURE__ */i0.\u0275\u0275defineDirective({\n type: NgOptimizedImage,\n selectors: [[\"img\", \"ngSrc\", \"\"]],\n hostVars: 18,\n hostBindings: function NgOptimizedImage_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.\u0275\u0275styleProp(\"position\", ctx.fill ? \"absolute\" : null)(\"width\", ctx.fill ? \"100%\" : null)(\"height\", ctx.fill ? \"100%\" : null)(\"inset\", ctx.fill ? \"0\" : null)(\"background-size\", ctx.placeholder ? \"cover\" : null)(\"background-position\", ctx.placeholder ? \"50% 50%\" : null)(\"background-repeat\", ctx.placeholder ? \"no-repeat\" : null)(\"background-image\", ctx.placeholder ? ctx.generatePlaceholder(ctx.placeholder) : null)(\"filter\", ctx.placeholder && ctx.shouldBlurPlaceholder(ctx.placeholderConfig) ? \"blur(15px)\" : null);\n }\n },\n inputs: {\n ngSrc: [2, \"ngSrc\", \"ngSrc\", unwrapSafeUrl],\n ngSrcset: \"ngSrcset\",\n sizes: \"sizes\",\n width: [2, \"width\", \"width\", numberAttribute],\n height: [2, \"height\", \"height\", numberAttribute],\n decoding: \"decoding\",\n loading: \"loading\",\n priority: [2, \"priority\", \"priority\", booleanAttribute],\n loaderParams: \"loaderParams\",\n disableOptimizedSrcset: [2, \"disableOptimizedSrcset\", \"disableOptimizedSrcset\", booleanAttribute],\n fill: [2, \"fill\", \"fill\", booleanAttribute],\n placeholder: [2, \"placeholder\", \"placeholder\", booleanOrUrlAttribute],\n placeholderConfig: \"placeholderConfig\",\n src: \"src\",\n srcset: \"srcset\"\n },\n features: [i0.\u0275\u0275NgOnChangesFeature]\n });\n }\n return NgOptimizedImage;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nfunction processConfig(config) {\n let sortedBreakpoints = {};\n if (config.breakpoints) {\n sortedBreakpoints.breakpoints = config.breakpoints.sort((a, b) => a - b);\n }\n return Object.assign({}, _IMAGE_CONFIG_DEFAULTS, config, sortedBreakpoints);\n}\nfunction assertNoConflictingSrc(dir) {\n if (dir.src) {\n throw new _RuntimeError(2950, `${imgDirectiveDetails(dir.ngSrc)} both \\`src\\` and \\`ngSrc\\` have been set. ` + `Supplying both of these attributes breaks lazy loading. ` + `The NgOptimizedImage directive sets \\`src\\` itself based on the value of \\`ngSrc\\`. ` + `To fix this, please remove the \\`src\\` attribute.`);\n }\n}\nfunction assertNoConflictingSrcset(dir) {\n if (dir.srcset) {\n throw new _RuntimeError(2951, `${imgDirectiveDetails(dir.ngSrc)} both \\`srcset\\` and \\`ngSrcset\\` have been set. ` + `Supplying both of these attributes breaks lazy loading. ` + `The NgOptimizedImage directive sets \\`srcset\\` itself based on the value of ` + `\\`ngSrcset\\`. To fix this, please remove the \\`srcset\\` attribute.`);\n }\n}\nfunction assertNotBase64Image(dir) {\n let ngSrc = dir.ngSrc.trim();\n if (ngSrc.startsWith('data:')) {\n if (ngSrc.length > BASE64_IMG_MAX_LENGTH_IN_ERROR) {\n ngSrc = ngSrc.substring(0, BASE64_IMG_MAX_LENGTH_IN_ERROR) + '...';\n }\n throw new _RuntimeError(2952, `${imgDirectiveDetails(dir.ngSrc, false)} \\`ngSrc\\` is a Base64-encoded string ` + `(${ngSrc}). NgOptimizedImage does not support Base64-encoded strings. ` + `To fix this, disable the NgOptimizedImage directive for this element ` + `by removing \\`ngSrc\\` and using a standard \\`src\\` attribute instead.`);\n }\n}\nfunction assertNoComplexSizes(dir) {\n let sizes = dir.sizes;\n if (sizes?.match(/((\\)|,)\\s|^)\\d+px/)) {\n throw new _RuntimeError(2952, `${imgDirectiveDetails(dir.ngSrc, false)} \\`sizes\\` was set to a string including ` + `pixel values. For automatic \\`srcset\\` generation, \\`sizes\\` must only include responsive ` + `values, such as \\`sizes=\"50vw\"\\` or \\`sizes=\"(min-width: 768px) 50vw, 100vw\"\\`. ` + `To fix this, modify the \\`sizes\\` attribute, or provide your own \\`ngSrcset\\` value directly.`);\n }\n}\nfunction assertValidPlaceholder(dir, imageLoader) {\n assertNoPlaceholderConfigWithoutPlaceholder(dir);\n assertNoRelativePlaceholderWithoutLoader(dir, imageLoader);\n assertNoOversizedDataUrl(dir);\n}\nfunction assertNoPlaceholderConfigWithoutPlaceholder(dir) {\n if (dir.placeholderConfig && !dir.placeholder) {\n throw new _RuntimeError(2952, `${imgDirectiveDetails(dir.ngSrc, false)} \\`placeholderConfig\\` options were provided for an ` + `image that does not use the \\`placeholder\\` attribute, and will have no effect.`);\n }\n}\nfunction assertNoRelativePlaceholderWithoutLoader(dir, imageLoader) {\n if (dir.placeholder === true && imageLoader === noopImageLoader) {\n throw new _RuntimeError(2963, `${imgDirectiveDetails(dir.ngSrc)} the \\`placeholder\\` attribute is set to true but ` + `no image loader is configured (i.e. the default one is being used), ` + `which would result in the same image being used for the primary image and its placeholder. ` + `To fix this, provide a loader or remove the \\`placeholder\\` attribute from the image.`);\n }\n}\nfunction assertNoOversizedDataUrl(dir) {\n if (dir.placeholder && typeof dir.placeholder === 'string' && dir.placeholder.startsWith('data:')) {\n if (dir.placeholder.length > DATA_URL_ERROR_LIMIT) {\n throw new _RuntimeError(2965, `${imgDirectiveDetails(dir.ngSrc)} the \\`placeholder\\` attribute is set to a data URL which is longer ` + `than ${DATA_URL_ERROR_LIMIT} characters. This is strongly discouraged, as large inline placeholders ` + `directly increase the bundle size of Angular and hurt page load performance. To fix this, generate ` + `a smaller data URL placeholder.`);\n }\n if (dir.placeholder.length > DATA_URL_WARN_LIMIT) {\n console.warn(_formatRuntimeError(2965, `${imgDirectiveDetails(dir.ngSrc)} the \\`placeholder\\` attribute is set to a data URL which is longer ` + `than ${DATA_URL_WARN_LIMIT} characters. This is discouraged, as large inline placeholders ` + `directly increase the bundle size of Angular and hurt page load performance. For better loading performance, ` + `generate a smaller data URL placeholder.`));\n }\n }\n}\nfunction assertNotBlobUrl(dir) {\n const ngSrc = dir.ngSrc.trim();\n if (ngSrc.startsWith('blob:')) {\n throw new _RuntimeError(2952, `${imgDirectiveDetails(dir.ngSrc)} \\`ngSrc\\` was set to a blob URL (${ngSrc}). ` + `Blob URLs are not supported by the NgOptimizedImage directive. ` + `To fix this, disable the NgOptimizedImage directive for this element ` + `by removing \\`ngSrc\\` and using a regular \\`src\\` attribute instead.`);\n }\n}\nfunction assertNonEmptyInput(dir, name, value) {\n const isString = typeof value === 'string';\n const isEmptyString = isString && value.trim() === '';\n if (!isString || isEmptyString) {\n throw new _RuntimeError(2952, `${imgDirectiveDetails(dir.ngSrc)} \\`${name}\\` has an invalid value ` + `(\\`${value}\\`). To fix this, change the value to a non-empty string.`);\n }\n}\nfunction assertValidNgSrcset(dir, value) {\n if (value == null) return;\n assertNonEmptyInput(dir, 'ngSrcset', value);\n const stringVal = value;\n const isValidWidthDescriptor = VALID_WIDTH_DESCRIPTOR_SRCSET.test(stringVal);\n const isValidDensityDescriptor = VALID_DENSITY_DESCRIPTOR_SRCSET.test(stringVal);\n if (isValidDensityDescriptor) {\n assertUnderDensityCap(dir, stringVal);\n }\n const isValidSrcset = isValidWidthDescriptor || isValidDensityDescriptor;\n if (!isValidSrcset) {\n throw new _RuntimeError(2952, `${imgDirectiveDetails(dir.ngSrc)} \\`ngSrcset\\` has an invalid value (\\`${value}\\`). ` + `To fix this, supply \\`ngSrcset\\` using a comma-separated list of one or more width ` + `descriptors (e.g. \"100w, 200w\") or density descriptors (e.g. \"1x, 2x\").`);\n }\n}\nfunction assertUnderDensityCap(dir, value) {\n const underDensityCap = value.split(',').every(num => num === '' || parseFloat(num) <= ABSOLUTE_SRCSET_DENSITY_CAP);\n if (!underDensityCap) {\n throw new _RuntimeError(2952, `${imgDirectiveDetails(dir.ngSrc)} the \\`ngSrcset\\` contains an unsupported image density:` + `\\`${value}\\`. NgOptimizedImage generally recommends a max image density of ` + `${RECOMMENDED_SRCSET_DENSITY_CAP}x but supports image densities up to ` + `${ABSOLUTE_SRCSET_DENSITY_CAP}x. The human eye cannot distinguish between image densities ` + `greater than ${RECOMMENDED_SRCSET_DENSITY_CAP}x - which makes them unnecessary for ` + `most use cases. Images that will be pinch-zoomed are typically the primary use case for ` + `${ABSOLUTE_SRCSET_DENSITY_CAP}x images. Please remove the high density descriptor and try again.`);\n }\n}\nfunction postInitInputChangeError(dir, inputName) {\n let reason;\n if (inputName === 'width' || inputName === 'height') {\n reason = `Changing \\`${inputName}\\` may result in different attribute value ` + `applied to the underlying image element and cause layout shifts on a page.`;\n } else {\n reason = `Changing the \\`${inputName}\\` would have no effect on the underlying ` + `image element, because the resource loading has already occurred.`;\n }\n return new _RuntimeError(2953, `${imgDirectiveDetails(dir.ngSrc)} \\`${inputName}\\` was updated after initialization. ` + `The NgOptimizedImage directive will not react to this input change. ${reason} ` + `To fix this, either switch \\`${inputName}\\` to a static value ` + `or wrap the image element in an @if that is gated on the necessary value.`);\n}\nfunction assertNoPostInitInputChange(dir, changes, inputs) {\n inputs.forEach(input => {\n const isUpdated = changes.hasOwnProperty(input);\n if (isUpdated && !changes[input].isFirstChange()) {\n if (input === 'ngSrc') {\n dir = {\n ngSrc: changes[input].previousValue\n };\n }\n throw postInitInputChangeError(dir, input);\n }\n });\n}\nfunction assertGreaterThanZero(dir, inputValue, inputName) {\n const validNumber = typeof inputValue === 'number' && inputValue > 0;\n const validString = typeof inputValue === 'string' && /^\\d+$/.test(inputValue.trim()) && parseInt(inputValue) > 0;\n if (!validNumber && !validString) {\n throw new _RuntimeError(2952, `${imgDirectiveDetails(dir.ngSrc)} \\`${inputName}\\` has an invalid value. ` + `To fix this, provide \\`${inputName}\\` as a number greater than 0.`);\n }\n}\nfunction assertNoImageDistortion(dir, img, renderer, destroyRef) {\n const callback = () => {\n removeLoadListenerFn();\n removeErrorListenerFn();\n const computedStyle = window.getComputedStyle(img);\n let renderedWidth = parseFloat(computedStyle.getPropertyValue('width'));\n let renderedHeight = parseFloat(computedStyle.getPropertyValue('height'));\n const boxSizing = computedStyle.getPropertyValue('box-sizing');\n if (boxSizing === 'border-box') {\n const paddingTop = computedStyle.getPropertyValue('padding-top');\n const paddingRight = computedStyle.getPropertyValue('padding-right');\n const paddingBottom = computedStyle.getPropertyValue('padding-bottom');\n const paddingLeft = computedStyle.getPropertyValue('padding-left');\n renderedWidth -= parseFloat(paddingRight) + parseFloat(paddingLeft);\n renderedHeight -= parseFloat(paddingTop) + parseFloat(paddingBottom);\n }\n const renderedAspectRatio = renderedWidth / renderedHeight;\n const nonZeroRenderedDimensions = renderedWidth !== 0 && renderedHeight !== 0;\n const intrinsicWidth = img.naturalWidth;\n const intrinsicHeight = img.naturalHeight;\n const intrinsicAspectRatio = intrinsicWidth / intrinsicHeight;\n const suppliedWidth = dir.width;\n const suppliedHeight = dir.height;\n const suppliedAspectRatio = suppliedWidth / suppliedHeight;\n const inaccurateDimensions = Math.abs(suppliedAspectRatio - intrinsicAspectRatio) > ASPECT_RATIO_TOLERANCE;\n const stylingDistortion = nonZeroRenderedDimensions && Math.abs(intrinsicAspectRatio - renderedAspectRatio) > ASPECT_RATIO_TOLERANCE;\n if (inaccurateDimensions) {\n console.warn(_formatRuntimeError(2952, `${imgDirectiveDetails(dir.ngSrc)} the aspect ratio of the image does not match ` + `the aspect ratio indicated by the width and height attributes. ` + `\\nIntrinsic image size: ${intrinsicWidth}w x ${intrinsicHeight}h ` + `(aspect-ratio: ${round(intrinsicAspectRatio)}). \\nSupplied width and height attributes: ` + `${suppliedWidth}w x ${suppliedHeight}h (aspect-ratio: ${round(suppliedAspectRatio)}). ` + `\\nTo fix this, update the width and height attributes.`));\n } else if (stylingDistortion) {\n console.warn(_formatRuntimeError(2952, `${imgDirectiveDetails(dir.ngSrc)} the aspect ratio of the rendered image ` + `does not match the image's intrinsic aspect ratio. ` + `\\nIntrinsic image size: ${intrinsicWidth}w x ${intrinsicHeight}h ` + `(aspect-ratio: ${round(intrinsicAspectRatio)}). \\nRendered image size: ` + `${renderedWidth}w x ${renderedHeight}h (aspect-ratio: ` + `${round(renderedAspectRatio)}). \\nThis issue can occur if \"width\" and \"height\" ` + `attributes are added to an image without updating the corresponding ` + `image styling. To fix this, adjust image styling. In most cases, ` + `adding \"height: auto\" or \"width: auto\" to the image styling will fix ` + `this issue.`));\n } else if (!dir.ngSrcset && nonZeroRenderedDimensions) {\n const recommendedWidth = RECOMMENDED_SRCSET_DENSITY_CAP * renderedWidth;\n const recommendedHeight = RECOMMENDED_SRCSET_DENSITY_CAP * renderedHeight;\n const oversizedWidth = intrinsicWidth - recommendedWidth >= OVERSIZED_IMAGE_TOLERANCE;\n const oversizedHeight = intrinsicHeight - recommendedHeight >= OVERSIZED_IMAGE_TOLERANCE;\n if (oversizedWidth || oversizedHeight) {\n console.warn(_formatRuntimeError(2960, `${imgDirectiveDetails(dir.ngSrc)} the intrinsic image is significantly ` + `larger than necessary. ` + `\\nRendered image size: ${renderedWidth}w x ${renderedHeight}h. ` + `\\nIntrinsic image size: ${intrinsicWidth}w x ${intrinsicHeight}h. ` + `\\nRecommended intrinsic image size: ${recommendedWidth}w x ${recommendedHeight}h. ` + `\\nNote: Recommended intrinsic image size is calculated assuming a maximum DPR of ` + `${RECOMMENDED_SRCSET_DENSITY_CAP}. To improve loading time, resize the image ` + `or consider using the \"ngSrcset\" and \"sizes\" attributes.`));\n }\n }\n };\n const removeLoadListenerFn = renderer.listen(img, 'load', callback);\n const removeErrorListenerFn = renderer.listen(img, 'error', () => {\n removeLoadListenerFn();\n removeErrorListenerFn();\n });\n destroyRef.onDestroy(() => {\n removeLoadListenerFn();\n removeErrorListenerFn();\n });\n callOnLoadIfImageIsLoaded(img, callback);\n}\nfunction assertNonEmptyWidthAndHeight(dir) {\n let missingAttributes = [];\n if (dir.width === undefined) missingAttributes.push('width');\n if (dir.height === undefined) missingAttributes.push('height');\n if (missingAttributes.length > 0) {\n throw new _RuntimeError(2954, `${imgDirectiveDetails(dir.ngSrc)} these required attributes ` + `are missing: ${missingAttributes.map(attr => `\"${attr}\"`).join(', ')}. ` + `Including \"width\" and \"height\" attributes will prevent image-related layout shifts. ` + `To fix this, include \"width\" and \"height\" attributes on the image tag or turn on ` + `\"fill\" mode with the \\`fill\\` attribute.`);\n }\n}\nfunction assertEmptyWidthAndHeight(dir) {\n if (dir.width || dir.height) {\n throw new _RuntimeError(2952, `${imgDirectiveDetails(dir.ngSrc)} the attributes \\`height\\` and/or \\`width\\` are present ` + `along with the \\`fill\\` attribute. Because \\`fill\\` mode causes an image to fill its containing ` + `element, the size attributes have no effect and should be removed.`);\n }\n}\nfunction assertNonZeroRenderedHeight(dir, img, renderer, destroyRef) {\n const callback = () => {\n removeLoadListenerFn();\n removeErrorListenerFn();\n const renderedHeight = img.clientHeight;\n if (dir.fill && renderedHeight === 0) {\n console.warn(_formatRuntimeError(2952, `${imgDirectiveDetails(dir.ngSrc)} the height of the fill-mode image is zero. ` + `This is likely because the containing element does not have the CSS 'position' ` + `property set to one of the following: \"relative\", \"fixed\", or \"absolute\". ` + `To fix this problem, make sure the container element has the CSS 'position' ` + `property defined and the height of the element is not zero.`));\n }\n };\n const removeLoadListenerFn = renderer.listen(img, 'load', callback);\n const removeErrorListenerFn = renderer.listen(img, 'error', () => {\n removeLoadListenerFn();\n removeErrorListenerFn();\n });\n destroyRef.onDestroy(() => {\n removeLoadListenerFn();\n removeErrorListenerFn();\n });\n callOnLoadIfImageIsLoaded(img, callback);\n}\nfunction assertValidLoadingInput(dir) {\n if (dir.loading && dir.priority) {\n throw new _RuntimeError(2952, `${imgDirectiveDetails(dir.ngSrc)} the \\`loading\\` attribute ` + `was used on an image that was marked \"priority\". ` + `Setting \\`loading\\` on priority images is not allowed ` + `because these images will always be eagerly loaded. ` + `To fix this, remove the \u201Cloading\u201D attribute from the priority image.`);\n }\n const validInputs = ['auto', 'eager', 'lazy'];\n if (typeof dir.loading === 'string' && !validInputs.includes(dir.loading)) {\n throw new _RuntimeError(2952, `${imgDirectiveDetails(dir.ngSrc)} the \\`loading\\` attribute ` + `has an invalid value (\\`${dir.loading}\\`). ` + `To fix this, provide a valid value (\"lazy\", \"eager\", or \"auto\").`);\n }\n}\nfunction assertValidDecodingInput(dir) {\n const validInputs = ['sync', 'async', 'auto'];\n if (typeof dir.decoding === 'string' && !validInputs.includes(dir.decoding)) {\n throw new _RuntimeError(2952, `${imgDirectiveDetails(dir.ngSrc)} the \\`decoding\\` attribute ` + `has an invalid value (\\`${dir.decoding}\\`). ` + `To fix this, provide a valid value (\"sync\", \"async\", or \"auto\").`);\n }\n}\nfunction assertNotMissingBuiltInLoader(ngSrc, imageLoader) {\n if (imageLoader === noopImageLoader) {\n let builtInLoaderName = '';\n for (const loader of BUILT_IN_LOADERS) {\n if (loader.testUrl(ngSrc)) {\n builtInLoaderName = loader.name;\n break;\n }\n }\n if (builtInLoaderName) {\n console.warn(_formatRuntimeError(2962, `NgOptimizedImage: It looks like your images may be hosted on the ` + `${builtInLoaderName} CDN, but your app is not using Angular's ` + `built-in loader for that CDN. We recommend switching to use ` + `the built-in by calling \\`provide${builtInLoaderName}Loader()\\` ` + `in your \\`providers\\` and passing it your instance's base URL. ` + `If you don't want to use the built-in loader, define a custom ` + `loader function using IMAGE_LOADER to silence this warning.`));\n }\n }\n}\nfunction assertNoNgSrcsetWithoutLoader(dir, imageLoader) {\n if (dir.ngSrcset && imageLoader === noopImageLoader) {\n console.warn(_formatRuntimeError(2963, `${imgDirectiveDetails(dir.ngSrc)} the \\`ngSrcset\\` attribute is present but ` + `no image loader is configured (i.e. the default one is being used), ` + `which would result in the same image being used for all configured sizes. ` + `To fix this, provide a loader or remove the \\`ngSrcset\\` attribute from the image.`));\n }\n}\nfunction assertNoLoaderParamsWithoutLoader(dir, imageLoader) {\n if (dir.loaderParams && imageLoader === noopImageLoader) {\n console.warn(_formatRuntimeError(2963, `${imgDirectiveDetails(dir.ngSrc)} the \\`loaderParams\\` attribute is present but ` + `no image loader is configured (i.e. the default one is being used), ` + `which means that the loaderParams data will not be consumed and will not affect the URL. ` + `To fix this, provide a custom loader or remove the \\`loaderParams\\` attribute from the image.`));\n }\n}\nasync function assetPriorityCountBelowThreshold(appRef) {\n if (IMGS_WITH_PRIORITY_ATTR_COUNT === 0) {\n IMGS_WITH_PRIORITY_ATTR_COUNT++;\n await appRef.whenStable();\n if (IMGS_WITH_PRIORITY_ATTR_COUNT > PRIORITY_COUNT_THRESHOLD) {\n console.warn(_formatRuntimeError(2966, `NgOptimizedImage: The \"priority\" attribute is set to true more than ${PRIORITY_COUNT_THRESHOLD} times (${IMGS_WITH_PRIORITY_ATTR_COUNT} times). ` + `Marking too many images as \"high\" priority can hurt your application's LCP (https://web.dev/lcp). ` + `\"Priority\" should only be set on the image expected to be the page's LCP element.`));\n }\n } else {\n IMGS_WITH_PRIORITY_ATTR_COUNT++;\n }\n}\nfunction assertPlaceholderDimensions(dir, imgElement) {\n const computedStyle = window.getComputedStyle(imgElement);\n let renderedWidth = parseFloat(computedStyle.getPropertyValue('width'));\n let renderedHeight = parseFloat(computedStyle.getPropertyValue('height'));\n if (renderedWidth > PLACEHOLDER_DIMENSION_LIMIT || renderedHeight > PLACEHOLDER_DIMENSION_LIMIT) {\n console.warn(_formatRuntimeError(2967, `${imgDirectiveDetails(dir.ngSrc)} it uses a placeholder image, but at least one ` + `of the dimensions attribute (height or width) exceeds the limit of ${PLACEHOLDER_DIMENSION_LIMIT}px. ` + `To fix this, use a smaller image as a placeholder.`));\n }\n}\nfunction callOnLoadIfImageIsLoaded(img, callback) {\n if (img.complete && img.naturalWidth) {\n callback();\n }\n}\nfunction round(input) {\n return Number.isInteger(input) ? input : input.toFixed(2);\n}\nfunction unwrapSafeUrl(value) {\n if (typeof value === 'string') {\n return value;\n }\n return _unwrapSafeValue(value);\n}\nfunction booleanOrUrlAttribute(value) {\n if (typeof value === 'string' && value !== 'true' && value !== 'false' && value !== '') {\n return value;\n }\n return booleanAttribute(value);\n}\nexport { IMAGE_LOADER, Location, LocationStrategy, NgOptimizedImage, PRECONNECT_CHECK_BLOCKLIST, PlatformNavigation, VERSION, ViewportScroller, isPlatformBrowser, isPlatformServer, provideCloudflareLoader, provideCloudinaryLoader, provideImageKitLoader, provideImgixLoader, provideNetlifyLoader, registerLocaleData, NavigationAdapterForLocation as \u0275NavigationAdapterForLocation, NullViewportScroller as \u0275NullViewportScroller, PLATFORM_BROWSER_ID as \u0275PLATFORM_BROWSER_ID, PLATFORM_SERVER_ID as \u0275PLATFORM_SERVER_ID, normalizeQueryParams as \u0275normalizeQueryParams };\n"],mappings:"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",names:["joinWithSlash","start","end","stripTrailingSlash","url","pathEndIdx","normalizeQueryParams","params","LocationStrategy","relativePosition","__ngFactoryType__","\u0275\u0275defineInjectable","inject","PathLocationStrategy","APP_BASE_HREF","InjectionToken","_platformLocation","href","DOCUMENT","fn","internal","includeHash","pathname","hash","state","title","queryParams","externalUrl","\u0275\u0275inject","PlatformLocation","Location","Subject","locationStrategy","baseHref","_stripOrigin","stripTrailingSlash","_stripIndexHtml","ev","includeHash","path","query","normalizeQueryParams","url","_stripBasePath","state","relativePosition","fn","v","fnIndex","onNext","onThrow","onReturn","joinWithSlash","__ngFactoryType__","\u0275\u0275inject","LocationStrategy","\u0275\u0275defineInjectable","createLocation","basePath","strippedUrl","pathname","HashLocationStrategy","LocationStrategy","_platformLocation","_baseHref","fn","includeHash","path","internal","url","joinWithSlash","state","title","queryParams","normalizeQueryParams","relativePosition","__ngFactoryType__","\u0275\u0275inject","PlatformLocation","APP_BASE_HREF","\u0275\u0275defineInjectable","FormStyle","TranslationWidth","FormatWidth","NumberSymbol","getLocaleId","locale","findLocaleData","LocaleDataIndex","getLocaleDayPeriods","formStyle","width","data","amPmData","amPm","getLastDefinedValue","getLocaleDayNames","daysData","days","getLocaleMonthNames","monthsData","months","getLocaleEraNames","erasData","getLocaleDateFormat","locale","width","data","findLocaleData","getLastDefinedValue","LocaleDataIndex","getLocaleTimeFormat","getLocaleDateTimeFormat","dateTimeFormatData","getLocaleNumberSymbol","symbol","res","NumberSymbol","checkFullData","data","LocaleDataIndex","RuntimeError","getLocaleExtraDayPeriodRules","locale","findLocaleData","rule","extractTime","getLocaleExtraDayPeriods","formStyle","width","dayPeriodsData","dayPeriods","getLastDefinedValue","getLastDefinedValue","data","index","i","RuntimeError","extractTime","time","h","m","ISO8601_DATE_REGEX","NAMED_FORMATS","DATE_FORMATS_SPLIT","formatDate","value","format","locale","timezone","date","toDate","getNamedFormat","parts","match","part","dateTimezoneOffset","timezoneToOffset","convertTimezoneToLocal","text","dateFormatter","getDateFormatter","createDate","year","month","date","newDate","getNamedFormat","locale","format","localeId","getLocaleId","NAMED_FORMATS","formatValue","getLocaleDateFormat","FormatWidth","getLocaleTimeFormat","shortTime","shortDate","formatDateTime","getLocaleDateTimeFormat","mediumTime","mediumDate","longTime","longDate","fullTime","fullDate","str","opt_values","match","key","padNumber","num","digits","minusSign","trim","negWrap","neg","strNum","formatFractionalSeconds","milliseconds","dateGetter","name","size","offset","part","getDatePart","localeMinus","getLocaleNumberSymbol","NumberSymbol","RuntimeError","dateStrGetter","width","form","FormStyle","extended","getDateTranslation","getLocaleMonthNames","getLocaleDayNames","currentHours","currentMinutes","rules","getLocaleExtraDayPeriodRules","dayPeriods","getLocaleExtraDayPeriods","index","rule","from","to","afterFrom","beforeTo","getLocaleDayPeriods","getLocaleEraNames","unexpected","timeZoneGetter","zone","hours","JANUARY","THURSDAY","getFirstThursdayOfYear","firstDayOfYear","getThursdayThisIsoWeek","datetime","currentDay","deltaToThursday","weekGetter","monthBased","result","nbDaysBefore1stDayOfMonth","today","thisThurs","firstThurs","diff","weekNumberingYearGetter","weekNumberingYear","DATE_FORMATS","getDateFormatter","formatter","TranslationWidth","timezoneToOffset","timezone","fallback","requestedTimezoneOffset","addDateMinutes","minutes","convertTimezoneToLocal","reverse","dateTimezoneOffset","timezoneOffset","toDate","value","isDate","y","m","d","val","parsedNb","ISO8601_DATE_REGEX","isoStringToDate","tzHour","tzMin","dateSetter","timeSetter","h","s","ms","WS_REGEXP","EMPTY_ARRAY","NgClass","_ngEl","_renderer","value","klass","rawClass","nextEnabled","state","stateEntry","enabled","__ngFactoryType__","\u0275\u0275directiveInject","ElementRef","Renderer2","\u0275\u0275defineDirective","NgForOfContext","$implicit","ngForOf","index","count","NgForOf","fn","_viewContainer","_template","_differs","value","changes","viewContainer","item","adjustedPreviousIndex","currentIndex","view","applyViewChange","i","ilen","context","record","viewRef","dir","ctx","__ngFactoryType__","\u0275\u0275directiveInject","ViewContainerRef","TemplateRef","IterableDiffers","\u0275\u0275defineDirective","NgIf","NgIfContext","_viewContainer","templateRef","condition","assertTemplate","dir","ctx","__ngFactoryType__","\u0275\u0275directiveInject","ViewContainerRef","TemplateRef","\u0275\u0275defineDirective","property","RuntimeError","invalidPipeArgumentError","type","value","RuntimeError","SubscribableStrategy","async","updateLatestValue","onError","untracked","subscription","PromiseStrategy","v","e","_promiseStrategy","_subscribableStrategy","AsyncPipe","inject","INTERNAL_APPLICATION_ERROR_HANDLER","ref","obj","value","isPromise","isSubscribable","invalidPipeArgumentError","__ngFactoryType__","\u0275\u0275directiveInject","ChangeDetectorRef","\u0275\u0275definePipe","DEFAULT_DATE_FORMAT","DATE_PIPE_DEFAULT_TIMEZONE","InjectionToken","DATE_PIPE_DEFAULT_OPTIONS","DatePipe","locale","defaultTimezone","defaultOptions","value","format","timezone","_format","_timezone","formatDate","error","invalidPipeArgumentError","__ngFactoryType__","\u0275\u0275directiveInject","LOCALE_ID","\u0275\u0275definePipe","CommonModule","__ngFactoryType__","\u0275\u0275defineNgModule","\u0275\u0275defineInjector","PLATFORM_BROWSER_ID","isPlatformBrowser","platformId","PLATFORM_BROWSER_ID","ViewportScroller","\u0275\u0275defineInjectable","BrowserViewportScroller","inject","DOCUMENT","document","window","offset","position","options","__spreadProps","__spreadValues","target","elSelected","findAnchorFromDocument","scrollRestoration","formatRuntimeError","el","rect","left","top","documentResult","treeWalker","currentNode","shadowRoot","result"],x_google_ignoreList:[0,1,2]},_coverageSchema:"1a1c01bbd47fc00a2c39e90264f33305004495a9",hash:"7a985fe7e50fd259e34db1f4c27ad0eb4897fad3"};var coverage=global[gcv]||(global[gcv]={});if(!coverage[path]||coverage[path].hash!==hash){coverage[path]=coverageData;}var actualCoverage=coverage[path];{// @ts-ignore +cov_22auuzpf1n=function(){return actualCoverage;};}return actualCoverage;}cov_22auuzpf1n();import{Ca as te,Ea as ne,Fa as g,Ha as ie,I as E,J as Q,L as b,La as ye,M as me,Ma as $,Na as re,Nb as we,O as L,Ob as se,P as w,Q as I,Ra as Fe,Sa as Ee,Ub as oe,Vb as Ae,_ as T,ac as R,d as pe,ea as Ce,lb as D,ma as ee,mb as l}from"./chunk-RYTNMYZW.js";import{a as q,b as J}from"./chunk-VCZGUBMY.js";function U(e,n){cov_22auuzpf1n().f[0]++;cov_22auuzpf1n().s[0]++;return e?(cov_22auuzpf1n().b[0][0]++,n?(cov_22auuzpf1n().b[1][0]++,e.endsWith("/")?(cov_22auuzpf1n().b[2][0]++,n.startsWith("/")?(cov_22auuzpf1n().b[3][0]++,e+n.slice(1)):(cov_22auuzpf1n().b[3][1]++,e+n)):(cov_22auuzpf1n().b[2][1]++,n.startsWith("/")?(cov_22auuzpf1n().b[4][0]++,e+n):(cov_22auuzpf1n().b[4][1]++,`${e}/${n}`))):(cov_22auuzpf1n().b[1][1]++,e)):(cov_22auuzpf1n().b[0][1]++,n);}function Se(e){cov_22auuzpf1n().f[1]++;let n=(cov_22auuzpf1n().s[1]++,e.search(/#|\?|$/));cov_22auuzpf1n().s[2]++;return e[n-1]==="/"?(cov_22auuzpf1n().b[5][0]++,e.slice(0,n-1)+e.slice(n)):(cov_22auuzpf1n().b[5][1]++,e);}function m(e){cov_22auuzpf1n().f[2]++;cov_22auuzpf1n().s[3]++;return(cov_22auuzpf1n().b[7][0]++,e)&&(cov_22auuzpf1n().b[7][1]++,e[0]!=="?")?(cov_22auuzpf1n().b[6][0]++,`?${e}`):(cov_22auuzpf1n().b[6][1]++,e);}var M=(cov_22auuzpf1n().s[4]++,(()=>{cov_22auuzpf1n().f[3]++;class e{historyGo(t){cov_22auuzpf1n().f[4]++;cov_22auuzpf1n().s[5]++;throw new Error("");}static ɵfac=(cov_22auuzpf1n().s[6]++,function(i){cov_22auuzpf1n().f[5]++;cov_22auuzpf1n().s[7]++;return new((cov_22auuzpf1n().b[8][0]++,i)||(cov_22auuzpf1n().b[8][1]++,e))();});static ɵprov=(cov_22auuzpf1n().s[8]++,b({token:e,factory:()=>{cov_22auuzpf1n().f[6]++;cov_22auuzpf1n().s[9]++;return I(be);},providedIn:"root"}));}cov_22auuzpf1n().s[10]++;return e;})()),j=(cov_22auuzpf1n().s[11]++,new L("")),be=(cov_22auuzpf1n().s[12]++,(()=>{cov_22auuzpf1n().f[7]++;class e extends M{_platformLocation;_baseHref;_removeListenerFns=(cov_22auuzpf1n().s[13]++,[]);constructor(t,i){cov_22auuzpf1n().f[8]++;cov_22auuzpf1n().s[14]++;super(),this._platformLocation=t,this._baseHref=(cov_22auuzpf1n().b[9][0]++,i)??(cov_22auuzpf1n().b[9][1]++,this._platformLocation.getBaseHrefFromDOM())??(cov_22auuzpf1n().b[9][2]++,I(T).location?.origin)??(cov_22auuzpf1n().b[9][3]++,"");}ngOnDestroy(){cov_22auuzpf1n().f[9]++;cov_22auuzpf1n().s[15]++;for(;this._removeListenerFns.length;){cov_22auuzpf1n().s[16]++;this._removeListenerFns.pop()();}}onPopState(t){cov_22auuzpf1n().f[10]++;cov_22auuzpf1n().s[17]++;this._removeListenerFns.push(this._platformLocation.onPopState(t),this._platformLocation.onHashChange(t));}getBaseHref(){cov_22auuzpf1n().f[11]++;cov_22auuzpf1n().s[18]++;return this._baseHref;}prepareExternalUrl(t){cov_22auuzpf1n().f[12]++;cov_22auuzpf1n().s[19]++;return U(this._baseHref,t);}path(t=(cov_22auuzpf1n().b[10][0]++,!1)){cov_22auuzpf1n().f[13]++;let i=(cov_22auuzpf1n().s[20]++,this._platformLocation.pathname+m(this._platformLocation.search)),r=(cov_22auuzpf1n().s[21]++,this._platformLocation.hash);cov_22auuzpf1n().s[22]++;return(cov_22auuzpf1n().b[12][0]++,r)&&(cov_22auuzpf1n().b[12][1]++,t)?(cov_22auuzpf1n().b[11][0]++,`${i}${r}`):(cov_22auuzpf1n().b[11][1]++,i);}pushState(t,i,r,s){cov_22auuzpf1n().f[14]++;let o=(cov_22auuzpf1n().s[23]++,this.prepareExternalUrl(r+m(s)));cov_22auuzpf1n().s[24]++;this._platformLocation.pushState(t,i,o);}replaceState(t,i,r,s){cov_22auuzpf1n().f[15]++;let o=(cov_22auuzpf1n().s[25]++,this.prepareExternalUrl(r+m(s)));cov_22auuzpf1n().s[26]++;this._platformLocation.replaceState(t,i,o);}forward(){cov_22auuzpf1n().f[16]++;cov_22auuzpf1n().s[27]++;this._platformLocation.forward();}back(){cov_22auuzpf1n().f[17]++;cov_22auuzpf1n().s[28]++;this._platformLocation.back();}getState(){cov_22auuzpf1n().f[18]++;cov_22auuzpf1n().s[29]++;return this._platformLocation.getState();}historyGo(t=(cov_22auuzpf1n().b[13][0]++,0)){cov_22auuzpf1n().f[19]++;cov_22auuzpf1n().s[30]++;this._platformLocation.historyGo?.(t);}static ɵfac=(cov_22auuzpf1n().s[31]++,function(i){cov_22auuzpf1n().f[20]++;cov_22auuzpf1n().s[32]++;return new((cov_22auuzpf1n().b[14][0]++,i)||(cov_22auuzpf1n().b[14][1]++,e))(w(R),w(j,8));});static ɵprov=(cov_22auuzpf1n().s[33]++,b({token:e,factory:e.ɵfac,providedIn:"root"}));}cov_22auuzpf1n().s[34]++;return e;})());var ve=(cov_22auuzpf1n().s[35]++,(()=>{cov_22auuzpf1n().f[21]++;class e{_subject=(cov_22auuzpf1n().s[36]++,new pe());_basePath;_locationStrategy;_urlChangeListeners=(cov_22auuzpf1n().s[37]++,[]);_urlChangeSubscription=(cov_22auuzpf1n().s[38]++,null);constructor(t){cov_22auuzpf1n().f[22]++;cov_22auuzpf1n().s[39]++;this._locationStrategy=t;let i=(cov_22auuzpf1n().s[40]++,this._locationStrategy.getBaseHref());cov_22auuzpf1n().s[41]++;this._basePath=Xe(Se(_e(i))),this._locationStrategy.onPopState(r=>{cov_22auuzpf1n().f[23]++;cov_22auuzpf1n().s[42]++;this._subject.next({url:this.path(!0),pop:!0,state:r.state,type:r.type});});}ngOnDestroy(){cov_22auuzpf1n().f[24]++;cov_22auuzpf1n().s[43]++;this._urlChangeSubscription?.unsubscribe(),this._urlChangeListeners=[];}path(t=(cov_22auuzpf1n().b[15][0]++,!1)){cov_22auuzpf1n().f[25]++;cov_22auuzpf1n().s[44]++;return this.normalize(this._locationStrategy.path(t));}getState(){cov_22auuzpf1n().f[26]++;cov_22auuzpf1n().s[45]++;return this._locationStrategy.getState();}isCurrentPathEqualTo(t,i=(cov_22auuzpf1n().b[16][0]++,"")){cov_22auuzpf1n().f[27]++;cov_22auuzpf1n().s[46]++;return this.path()==this.normalize(t+m(i));}normalize(t){cov_22auuzpf1n().f[28]++;cov_22auuzpf1n().s[47]++;return e.stripTrailingSlash(Ke(this._basePath,_e(t)));}prepareExternalUrl(t){cov_22auuzpf1n().f[29]++;cov_22auuzpf1n().s[48]++;return(cov_22auuzpf1n().b[17][0]++,t)&&(cov_22auuzpf1n().b[17][1]++,t[0]!=="/")&&(cov_22auuzpf1n().b[17][2]++,t="/"+t),this._locationStrategy.prepareExternalUrl(t);}go(t,i=(cov_22auuzpf1n().b[18][0]++,""),r=(cov_22auuzpf1n().b[19][0]++,null)){cov_22auuzpf1n().f[30]++;cov_22auuzpf1n().s[49]++;this._locationStrategy.pushState(r,"",t,i),this._notifyUrlChangeListeners(this.prepareExternalUrl(t+m(i)),r);}replaceState(t,i=(cov_22auuzpf1n().b[20][0]++,""),r=(cov_22auuzpf1n().b[21][0]++,null)){cov_22auuzpf1n().f[31]++;cov_22auuzpf1n().s[50]++;this._locationStrategy.replaceState(r,"",t,i),this._notifyUrlChangeListeners(this.prepareExternalUrl(t+m(i)),r);}forward(){cov_22auuzpf1n().f[32]++;cov_22auuzpf1n().s[51]++;this._locationStrategy.forward();}back(){cov_22auuzpf1n().f[33]++;cov_22auuzpf1n().s[52]++;this._locationStrategy.back();}historyGo(t=(cov_22auuzpf1n().b[22][0]++,0)){cov_22auuzpf1n().f[34]++;cov_22auuzpf1n().s[53]++;this._locationStrategy.historyGo?.(t);}onUrlChange(t){cov_22auuzpf1n().f[35]++;cov_22auuzpf1n().s[54]++;return this._urlChangeListeners.push(t),this._urlChangeSubscription??=this.subscribe(i=>{cov_22auuzpf1n().f[36]++;cov_22auuzpf1n().s[55]++;this._notifyUrlChangeListeners(i.url,i.state);}),()=>{cov_22auuzpf1n().f[37]++;let i=(cov_22auuzpf1n().s[56]++,this._urlChangeListeners.indexOf(t));cov_22auuzpf1n().s[57]++;this._urlChangeListeners.splice(i,1),(cov_22auuzpf1n().b[23][0]++,this._urlChangeListeners.length===0)&&(cov_22auuzpf1n().b[23][1]++,this._urlChangeSubscription?.unsubscribe(),this._urlChangeSubscription=null);};}_notifyUrlChangeListeners(t=(cov_22auuzpf1n().b[24][0]++,""),i){cov_22auuzpf1n().f[38]++;cov_22auuzpf1n().s[58]++;this._urlChangeListeners.forEach(r=>{cov_22auuzpf1n().f[39]++;cov_22auuzpf1n().s[59]++;return r(t,i);});}subscribe(t,i,r){cov_22auuzpf1n().f[40]++;cov_22auuzpf1n().s[60]++;return this._subject.subscribe({next:t,error:(cov_22auuzpf1n().b[25][0]++,i)??(cov_22auuzpf1n().b[25][1]++,void 0),complete:(cov_22auuzpf1n().b[26][0]++,r)??(cov_22auuzpf1n().b[26][1]++,void 0)});}static normalizeQueryParams=(cov_22auuzpf1n().s[61]++,m);static joinWithSlash=(cov_22auuzpf1n().s[62]++,U);static stripTrailingSlash=(cov_22auuzpf1n().s[63]++,Se);static ɵfac=(cov_22auuzpf1n().s[64]++,function(i){cov_22auuzpf1n().f[41]++;cov_22auuzpf1n().s[65]++;return new((cov_22auuzpf1n().b[27][0]++,i)||(cov_22auuzpf1n().b[27][1]++,e))(w(M));});static ɵprov=(cov_22auuzpf1n().s[66]++,b({token:e,factory:()=>{cov_22auuzpf1n().f[42]++;cov_22auuzpf1n().s[67]++;return Ye();},providedIn:"root"}));}cov_22auuzpf1n().s[68]++;return e;})());function Ye(){cov_22auuzpf1n().f[43]++;cov_22auuzpf1n().s[69]++;return new ve(w(M));}function Ke(e,n){cov_22auuzpf1n().f[44]++;cov_22auuzpf1n().s[70]++;if((cov_22auuzpf1n().b[29][0]++,!e)||(cov_22auuzpf1n().b[29][1]++,!n.startsWith(e))){cov_22auuzpf1n().b[28][0]++;cov_22auuzpf1n().s[71]++;return n;}else{cov_22auuzpf1n().b[28][1]++;}let t=(cov_22auuzpf1n().s[72]++,n.substring(e.length));cov_22auuzpf1n().s[73]++;return(cov_22auuzpf1n().b[31][0]++,t==="")||(cov_22auuzpf1n().b[31][1]++,["/",";","?","#"].includes(t[0]))?(cov_22auuzpf1n().b[30][0]++,t):(cov_22auuzpf1n().b[30][1]++,n);}function _e(e){cov_22auuzpf1n().f[45]++;cov_22auuzpf1n().s[74]++;return e.replace(/\/index.html$/,"");}function Xe(e){cov_22auuzpf1n().f[46]++;cov_22auuzpf1n().s[75]++;if(new RegExp("^(https?:)?//").test(e)){cov_22auuzpf1n().b[32][0]++;let[,t]=(cov_22auuzpf1n().s[76]++,e.split(/\/\/[^\/]+/));cov_22auuzpf1n().s[77]++;return t;}else{cov_22auuzpf1n().b[32][1]++;}cov_22auuzpf1n().s[78]++;return e;}var Je=(cov_22auuzpf1n().s[79]++,(()=>{cov_22auuzpf1n().f[47]++;class e extends M{_platformLocation;_baseHref=(cov_22auuzpf1n().s[80]++,"");_removeListenerFns=(cov_22auuzpf1n().s[81]++,[]);constructor(t,i){cov_22auuzpf1n().f[48]++;cov_22auuzpf1n().s[82]++;super(),this._platformLocation=t,(cov_22auuzpf1n().b[33][0]++,i!=null)&&(cov_22auuzpf1n().b[33][1]++,this._baseHref=i);}ngOnDestroy(){cov_22auuzpf1n().f[49]++;cov_22auuzpf1n().s[83]++;for(;this._removeListenerFns.length;){cov_22auuzpf1n().s[84]++;this._removeListenerFns.pop()();}}onPopState(t){cov_22auuzpf1n().f[50]++;cov_22auuzpf1n().s[85]++;this._removeListenerFns.push(this._platformLocation.onPopState(t),this._platformLocation.onHashChange(t));}getBaseHref(){cov_22auuzpf1n().f[51]++;cov_22auuzpf1n().s[86]++;return this._baseHref;}path(t=(cov_22auuzpf1n().b[34][0]++,!1)){cov_22auuzpf1n().f[52]++;let i=(cov_22auuzpf1n().s[87]++,(cov_22auuzpf1n().b[35][0]++,this._platformLocation.hash)??(cov_22auuzpf1n().b[35][1]++,"#"));cov_22auuzpf1n().s[88]++;return i.length>0?(cov_22auuzpf1n().b[36][0]++,i.substring(1)):(cov_22auuzpf1n().b[36][1]++,i);}prepareExternalUrl(t){cov_22auuzpf1n().f[53]++;let i=(cov_22auuzpf1n().s[89]++,U(this._baseHref,t));cov_22auuzpf1n().s[90]++;return i.length>0?(cov_22auuzpf1n().b[37][0]++,"#"+i):(cov_22auuzpf1n().b[37][1]++,i);}pushState(t,i,r,s){cov_22auuzpf1n().f[54]++;let o=(cov_22auuzpf1n().s[91]++,(cov_22auuzpf1n().b[38][0]++,this.prepareExternalUrl(r+m(s)))||(cov_22auuzpf1n().b[38][1]++,this._platformLocation.pathname));cov_22auuzpf1n().s[92]++;this._platformLocation.pushState(t,i,o);}replaceState(t,i,r,s){cov_22auuzpf1n().f[55]++;let o=(cov_22auuzpf1n().s[93]++,(cov_22auuzpf1n().b[39][0]++,this.prepareExternalUrl(r+m(s)))||(cov_22auuzpf1n().b[39][1]++,this._platformLocation.pathname));cov_22auuzpf1n().s[94]++;this._platformLocation.replaceState(t,i,o);}forward(){cov_22auuzpf1n().f[56]++;cov_22auuzpf1n().s[95]++;this._platformLocation.forward();}back(){cov_22auuzpf1n().f[57]++;cov_22auuzpf1n().s[96]++;this._platformLocation.back();}getState(){cov_22auuzpf1n().f[58]++;cov_22auuzpf1n().s[97]++;return this._platformLocation.getState();}historyGo(t=(cov_22auuzpf1n().b[40][0]++,0)){cov_22auuzpf1n().f[59]++;cov_22auuzpf1n().s[98]++;this._platformLocation.historyGo?.(t);}static ɵfac=(cov_22auuzpf1n().s[99]++,function(i){cov_22auuzpf1n().f[60]++;cov_22auuzpf1n().s[100]++;return new((cov_22auuzpf1n().b[41][0]++,i)||(cov_22auuzpf1n().b[41][1]++,e))(w(R),w(j,8));});static ɵprov=(cov_22auuzpf1n().s[101]++,b({token:e,factory:e.ɵfac}));}cov_22auuzpf1n().s[102]++;return e;})());var f=(cov_22auuzpf1n().s[103]++,function(e){cov_22auuzpf1n().f[61]++;cov_22auuzpf1n().s[104]++;return e[e.Format=0]="Format",e[e.Standalone=1]="Standalone",e;}((cov_22auuzpf1n().b[42][0]++,f)||(cov_22auuzpf1n().b[42][1]++,{}))),u=(cov_22auuzpf1n().s[105]++,function(e){cov_22auuzpf1n().f[62]++;cov_22auuzpf1n().s[106]++;return e[e.Narrow=0]="Narrow",e[e.Abbreviated=1]="Abbreviated",e[e.Wide=2]="Wide",e[e.Short=3]="Short",e;}((cov_22auuzpf1n().b[43][0]++,u)||(cov_22auuzpf1n().b[43][1]++,{}))),h=(cov_22auuzpf1n().s[107]++,function(e){cov_22auuzpf1n().f[63]++;cov_22auuzpf1n().s[108]++;return e[e.Short=0]="Short",e[e.Medium=1]="Medium",e[e.Long=2]="Long",e[e.Full=3]="Full",e;}((cov_22auuzpf1n().b[44][0]++,h)||(cov_22auuzpf1n().b[44][1]++,{}))),S=(cov_22auuzpf1n().s[109]++,{Decimal:0,Group:1,List:2,PercentSign:3,PlusSign:4,MinusSign:5,Exponential:6,SuperscriptingExponent:7,PerMille:8,Infinity:9,NaN:10,TimeSeparator:11,CurrencyDecimal:12,CurrencyGroup:13});function Re(e){cov_22auuzpf1n().f[64]++;cov_22auuzpf1n().s[110]++;return D(e)[l.LocaleId];}function Oe(e,n,t){cov_22auuzpf1n().f[65]++;let i=(cov_22auuzpf1n().s[111]++,D(e)),r=(cov_22auuzpf1n().s[112]++,[i[l.DayPeriodsFormat],i[l.DayPeriodsStandalone]]),s=(cov_22auuzpf1n().s[113]++,p(r,n));cov_22auuzpf1n().s[114]++;return p(s,t);}function Pe(e,n,t){cov_22auuzpf1n().f[66]++;let i=(cov_22auuzpf1n().s[115]++,D(e)),r=(cov_22auuzpf1n().s[116]++,[i[l.DaysFormat],i[l.DaysStandalone]]),s=(cov_22auuzpf1n().s[117]++,p(r,n));cov_22auuzpf1n().s[118]++;return p(s,t);}function Be(e,n,t){cov_22auuzpf1n().f[67]++;let i=(cov_22auuzpf1n().s[119]++,D(e)),r=(cov_22auuzpf1n().s[120]++,[i[l.MonthsFormat],i[l.MonthsStandalone]]),s=(cov_22auuzpf1n().s[121]++,p(r,n));cov_22auuzpf1n().s[122]++;return p(s,t);}function Ne(e,n){cov_22auuzpf1n().f[68]++;let i=(cov_22auuzpf1n().s[123]++,D(e)[l.Eras]);cov_22auuzpf1n().s[124]++;return p(i,n);}function O(e,n){cov_22auuzpf1n().f[69]++;let t=(cov_22auuzpf1n().s[125]++,D(e));cov_22auuzpf1n().s[126]++;return p(t[l.DateFormat],n);}function P(e,n){cov_22auuzpf1n().f[70]++;let t=(cov_22auuzpf1n().s[127]++,D(e));cov_22auuzpf1n().s[128]++;return p(t[l.TimeFormat],n);}function B(e,n){cov_22auuzpf1n().f[71]++;let i=(cov_22auuzpf1n().s[129]++,D(e)[l.DateTimeFormat]);cov_22auuzpf1n().s[130]++;return p(i,n);}function N(e,n){cov_22auuzpf1n().f[72]++;let t=(cov_22auuzpf1n().s[131]++,D(e)),i=(cov_22auuzpf1n().s[132]++,t[l.NumberSymbols][n]);cov_22auuzpf1n().s[133]++;if(typeof i>"u"){cov_22auuzpf1n().b[45][0]++;cov_22auuzpf1n().s[134]++;if(n===S.CurrencyDecimal){cov_22auuzpf1n().b[46][0]++;cov_22auuzpf1n().s[135]++;return t[l.NumberSymbols][S.Decimal];}else{cov_22auuzpf1n().b[46][1]++;}cov_22auuzpf1n().s[136]++;if(n===S.CurrencyGroup){cov_22auuzpf1n().b[47][0]++;cov_22auuzpf1n().s[137]++;return t[l.NumberSymbols][S.Group];}else{cov_22auuzpf1n().b[47][1]++;}}else{cov_22auuzpf1n().b[45][1]++;}cov_22auuzpf1n().s[138]++;return i;}function ke(e){cov_22auuzpf1n().f[73]++;cov_22auuzpf1n().s[139]++;if(!e[l.ExtraData]){cov_22auuzpf1n().b[48][0]++;cov_22auuzpf1n().s[140]++;throw new E(2303,!1);}else{cov_22auuzpf1n().b[48][1]++;}}function xe(e){cov_22auuzpf1n().f[74]++;let n=(cov_22auuzpf1n().s[141]++,D(e));cov_22auuzpf1n().s[142]++;return ke(n),((cov_22auuzpf1n().b[49][0]++,n[l.ExtraData][2])||(cov_22auuzpf1n().b[49][1]++,[])).map(i=>{cov_22auuzpf1n().f[75]++;cov_22auuzpf1n().s[143]++;return typeof i=="string"?(cov_22auuzpf1n().b[50][0]++,ae(i)):(cov_22auuzpf1n().b[50][1]++,[ae(i[0]),ae(i[1])]);});}function $e(e,n,t){cov_22auuzpf1n().f[76]++;let i=(cov_22auuzpf1n().s[144]++,D(e));cov_22auuzpf1n().s[145]++;ke(i);let r=(cov_22auuzpf1n().s[146]++,[i[l.ExtraData][0],i[l.ExtraData][1]]),s=(cov_22auuzpf1n().s[147]++,(cov_22auuzpf1n().b[51][0]++,p(r,n))||(cov_22auuzpf1n().b[51][1]++,[]));cov_22auuzpf1n().s[148]++;return(cov_22auuzpf1n().b[52][0]++,p(s,t))||(cov_22auuzpf1n().b[52][1]++,[]);}function p(e,n){cov_22auuzpf1n().f[77]++;cov_22auuzpf1n().s[149]++;for(let t=(cov_22auuzpf1n().s[150]++,n);t>-1;t--){cov_22auuzpf1n().s[151]++;if(typeof e[t]<"u"){cov_22auuzpf1n().b[53][0]++;cov_22auuzpf1n().s[152]++;return e[t];}else{cov_22auuzpf1n().b[53][1]++;}}cov_22auuzpf1n().s[153]++;throw new E(2304,!1);}function ae(e){cov_22auuzpf1n().f[78]++;let[n,t]=(cov_22auuzpf1n().s[154]++,e.split(":"));cov_22auuzpf1n().s[155]++;return{hours:+n,minutes:+t};}var Qe=(cov_22auuzpf1n().s[156]++,/^(\d{4,})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/),z=(cov_22auuzpf1n().s[157]++,{}),et=(cov_22auuzpf1n().s[158]++,/((?:[^BEGHLMOSWYZabcdhmswyz']+)|(?:'(?:[^']|'')*')|(?:G{1,5}|y{1,4}|Y{1,4}|M{1,5}|L{1,5}|w{1,2}|W{1}|d{1,2}|E{1,6}|c{1,6}|a{1,5}|b{1,5}|B{1,5}|h{1,2}|H{1,2}|m{1,2}|s{1,2}|S{1,3}|z{1,4}|Z{1,5}|O{1,4}))([\s\S]*)/);function Ue(e,n,t,i){cov_22auuzpf1n().f[79]++;let r=(cov_22auuzpf1n().s[159]++,ct(e));cov_22auuzpf1n().s[160]++;n=(cov_22auuzpf1n().b[54][0]++,A(t,n))||(cov_22auuzpf1n().b[54][1]++,n);let o=(cov_22auuzpf1n().s[161]++,[]),a;cov_22auuzpf1n().s[162]++;for(;n;){cov_22auuzpf1n().s[163]++;if(a=et.exec(n),a){cov_22auuzpf1n().b[55][0]++;cov_22auuzpf1n().s[164]++;o=o.concat(a.slice(1));let F=(cov_22auuzpf1n().s[165]++,o.pop());cov_22auuzpf1n().s[166]++;if(!F){cov_22auuzpf1n().b[56][0]++;cov_22auuzpf1n().s[167]++;break;}else{cov_22auuzpf1n().b[56][1]++;}cov_22auuzpf1n().s[168]++;n=F;}else{cov_22auuzpf1n().b[55][1]++;cov_22auuzpf1n().s[169]++;o.push(n);cov_22auuzpf1n().s[170]++;break;}}let y=(cov_22auuzpf1n().s[171]++,r.getTimezoneOffset());cov_22auuzpf1n().s[172]++;(cov_22auuzpf1n().b[57][0]++,i)&&(cov_22auuzpf1n().b[57][1]++,y=ze(i,y),r=ut(r,i));let _=(cov_22auuzpf1n().s[173]++,"");cov_22auuzpf1n().s[174]++;return o.forEach(F=>{cov_22auuzpf1n().f[80]++;let v=(cov_22auuzpf1n().s[175]++,ot(F));cov_22auuzpf1n().s[176]++;_+=v?(cov_22auuzpf1n().b[58][0]++,v(r,t,y)):(cov_22auuzpf1n().b[58][1]++,F==="''"?(cov_22auuzpf1n().b[59][0]++,"'"):(cov_22auuzpf1n().b[59][1]++,F.replace(/(^'|'$)/g,"").replace(/''/g,"'")));}),_;}function Z(e,n,t){cov_22auuzpf1n().f[81]++;let i=(cov_22auuzpf1n().s[177]++,new Date(0));cov_22auuzpf1n().s[178]++;return i.setFullYear(e,n,t),i.setHours(0,0,0),i;}function A(e,n){cov_22auuzpf1n().f[82]++;let t=(cov_22auuzpf1n().s[179]++,Re(e));cov_22auuzpf1n().s[180]++;if(z[t]??={},z[t][n]){cov_22auuzpf1n().b[60][0]++;cov_22auuzpf1n().s[181]++;return z[t][n];}else{cov_22auuzpf1n().b[60][1]++;}let i=(cov_22auuzpf1n().s[182]++,"");cov_22auuzpf1n().s[183]++;switch(n){case"shortDate":cov_22auuzpf1n().b[61][0]++;cov_22auuzpf1n().s[184]++;i=O(e,h.Short);cov_22auuzpf1n().s[185]++;break;case"mediumDate":cov_22auuzpf1n().b[61][1]++;cov_22auuzpf1n().s[186]++;i=O(e,h.Medium);cov_22auuzpf1n().s[187]++;break;case"longDate":cov_22auuzpf1n().b[61][2]++;cov_22auuzpf1n().s[188]++;i=O(e,h.Long);cov_22auuzpf1n().s[189]++;break;case"fullDate":cov_22auuzpf1n().b[61][3]++;cov_22auuzpf1n().s[190]++;i=O(e,h.Full);cov_22auuzpf1n().s[191]++;break;case"shortTime":cov_22auuzpf1n().b[61][4]++;cov_22auuzpf1n().s[192]++;i=P(e,h.Short);cov_22auuzpf1n().s[193]++;break;case"mediumTime":cov_22auuzpf1n().b[61][5]++;cov_22auuzpf1n().s[194]++;i=P(e,h.Medium);cov_22auuzpf1n().s[195]++;break;case"longTime":cov_22auuzpf1n().b[61][6]++;cov_22auuzpf1n().s[196]++;i=P(e,h.Long);cov_22auuzpf1n().s[197]++;break;case"fullTime":cov_22auuzpf1n().b[61][7]++;cov_22auuzpf1n().s[198]++;i=P(e,h.Full);cov_22auuzpf1n().s[199]++;break;case"short":cov_22auuzpf1n().b[61][8]++;let r=(cov_22auuzpf1n().s[200]++,A(e,"shortTime")),s=(cov_22auuzpf1n().s[201]++,A(e,"shortDate"));cov_22auuzpf1n().s[202]++;i=V(B(e,h.Short),[r,s]);cov_22auuzpf1n().s[203]++;break;case"medium":cov_22auuzpf1n().b[61][9]++;let o=(cov_22auuzpf1n().s[204]++,A(e,"mediumTime")),a=(cov_22auuzpf1n().s[205]++,A(e,"mediumDate"));cov_22auuzpf1n().s[206]++;i=V(B(e,h.Medium),[o,a]);cov_22auuzpf1n().s[207]++;break;case"long":cov_22auuzpf1n().b[61][10]++;let y=(cov_22auuzpf1n().s[208]++,A(e,"longTime")),_=(cov_22auuzpf1n().s[209]++,A(e,"longDate"));cov_22auuzpf1n().s[210]++;i=V(B(e,h.Long),[y,_]);cov_22auuzpf1n().s[211]++;break;case"full":cov_22auuzpf1n().b[61][11]++;let F=(cov_22auuzpf1n().s[212]++,A(e,"fullTime")),v=(cov_22auuzpf1n().s[213]++,A(e,"fullDate"));cov_22auuzpf1n().s[214]++;i=V(B(e,h.Full),[F,v]);cov_22auuzpf1n().s[215]++;break;}cov_22auuzpf1n().s[216]++;return(cov_22auuzpf1n().b[62][0]++,i)&&(cov_22auuzpf1n().b[62][1]++,z[t][n]=i),i;}function V(e,n){cov_22auuzpf1n().f[83]++;cov_22auuzpf1n().s[217]++;return(cov_22auuzpf1n().b[63][0]++,n)&&(cov_22auuzpf1n().b[63][1]++,e=e.replace(/\{([^}]+)}/g,function(t,i){cov_22auuzpf1n().f[84]++;cov_22auuzpf1n().s[218]++;return(cov_22auuzpf1n().b[65][0]++,n!=null)&&(cov_22auuzpf1n().b[65][1]++,i in n)?(cov_22auuzpf1n().b[64][0]++,n[i]):(cov_22auuzpf1n().b[64][1]++,t);})),e;}function C(e,n,t=(cov_22auuzpf1n().b[66][0]++,"-"),i,r){cov_22auuzpf1n().f[85]++;let s=(cov_22auuzpf1n().s[219]++,"");cov_22auuzpf1n().s[220]++;((cov_22auuzpf1n().b[67][0]++,e<0)||(cov_22auuzpf1n().b[67][1]++,r)&&(cov_22auuzpf1n().b[67][2]++,e<=0))&&(cov_22auuzpf1n().b[67][3]++,r?(cov_22auuzpf1n().b[68][0]++,e=-e+1):(cov_22auuzpf1n().b[68][1]++,e=-e,s=t));let o=(cov_22auuzpf1n().s[221]++,String(e));cov_22auuzpf1n().s[222]++;for(;o.length0)||(cov_22auuzpf1n().b[74][1]++,a>-t))&&(cov_22auuzpf1n().b[74][2]++,a+=t),e===3){cov_22auuzpf1n().b[73][0]++;cov_22auuzpf1n().s[229]++;(cov_22auuzpf1n().b[75][0]++,a===0)&&(cov_22auuzpf1n().b[75][1]++,t===-12)&&(cov_22auuzpf1n().b[75][2]++,a=12);}else{cov_22auuzpf1n().b[73][1]++;cov_22auuzpf1n().s[230]++;if(e===6){cov_22auuzpf1n().b[76][0]++;cov_22auuzpf1n().s[231]++;return tt(a,n);}else{cov_22auuzpf1n().b[76][1]++;}}let y=(cov_22auuzpf1n().s[232]++,N(o,S.MinusSign));cov_22auuzpf1n().s[233]++;return C(a,n,y,i,r);};}function nt(e,n){cov_22auuzpf1n().f[89]++;cov_22auuzpf1n().s[234]++;switch(e){case 0:cov_22auuzpf1n().b[77][0]++;cov_22auuzpf1n().s[235]++;return n.getFullYear();case 1:cov_22auuzpf1n().b[77][1]++;cov_22auuzpf1n().s[236]++;return n.getMonth();case 2:cov_22auuzpf1n().b[77][2]++;cov_22auuzpf1n().s[237]++;return n.getDate();case 3:cov_22auuzpf1n().b[77][3]++;cov_22auuzpf1n().s[238]++;return n.getHours();case 4:cov_22auuzpf1n().b[77][4]++;cov_22auuzpf1n().s[239]++;return n.getMinutes();case 5:cov_22auuzpf1n().b[77][5]++;cov_22auuzpf1n().s[240]++;return n.getSeconds();case 6:cov_22auuzpf1n().b[77][6]++;cov_22auuzpf1n().s[241]++;return n.getMilliseconds();case 7:cov_22auuzpf1n().b[77][7]++;cov_22auuzpf1n().s[242]++;return n.getDay();default:cov_22auuzpf1n().b[77][8]++;cov_22auuzpf1n().s[243]++;throw new E(2301,!1);}}function c(e,n,t=(cov_22auuzpf1n().b[78][0]++,f.Format),i=(cov_22auuzpf1n().b[79][0]++,!1)){cov_22auuzpf1n().f[90]++;cov_22auuzpf1n().s[244]++;return function(r,s){cov_22auuzpf1n().f[91]++;cov_22auuzpf1n().s[245]++;return it(r,s,e,n,t,i);};}function it(e,n,t,i,r,s){cov_22auuzpf1n().f[92]++;cov_22auuzpf1n().s[246]++;switch(t){case 2:cov_22auuzpf1n().b[80][0]++;cov_22auuzpf1n().s[247]++;return Be(n,r,i)[e.getMonth()];case 1:cov_22auuzpf1n().b[80][1]++;cov_22auuzpf1n().s[248]++;return Pe(n,r,i)[e.getDay()];case 0:cov_22auuzpf1n().b[80][2]++;let o=(cov_22auuzpf1n().s[249]++,e.getHours()),a=(cov_22auuzpf1n().s[250]++,e.getMinutes());cov_22auuzpf1n().s[251]++;if(s){cov_22auuzpf1n().b[81][0]++;let _=(cov_22auuzpf1n().s[252]++,xe(n)),F=(cov_22auuzpf1n().s[253]++,$e(n,r,i)),v=(cov_22auuzpf1n().s[254]++,_.findIndex(k=>{cov_22auuzpf1n().f[93]++;cov_22auuzpf1n().s[255]++;if(Array.isArray(k)){cov_22auuzpf1n().b[82][0]++;let[X,x]=(cov_22auuzpf1n().s[256]++,k),ge=(cov_22auuzpf1n().s[257]++,(cov_22auuzpf1n().b[83][0]++,o>=X.hours)&&(cov_22auuzpf1n().b[83][1]++,a>=X.minutes)),De=(cov_22auuzpf1n().s[258]++,(cov_22auuzpf1n().b[84][0]++,o0?(cov_22auuzpf1n().b[95][0]++,Math.floor(r/60)):(cov_22auuzpf1n().b[95][1]++,Math.ceil(r/60)));cov_22auuzpf1n().s[277]++;switch(e){case 0:cov_22auuzpf1n().b[96][0]++;cov_22auuzpf1n().s[278]++;return(r>=0?(cov_22auuzpf1n().b[97][0]++,"+"):(cov_22auuzpf1n().b[97][1]++,""))+C(o,2,s)+C(Math.abs(r%60),2,s);case 1:cov_22auuzpf1n().b[96][1]++;cov_22auuzpf1n().s[279]++;return"GMT"+(r>=0?(cov_22auuzpf1n().b[98][0]++,"+"):(cov_22auuzpf1n().b[98][1]++,""))+C(o,1,s);case 2:cov_22auuzpf1n().b[96][2]++;cov_22auuzpf1n().s[280]++;return"GMT"+(r>=0?(cov_22auuzpf1n().b[99][0]++,"+"):(cov_22auuzpf1n().b[99][1]++,""))+C(o,2,s)+":"+C(Math.abs(r%60),2,s);case 3:cov_22auuzpf1n().b[96][3]++;cov_22auuzpf1n().s[281]++;return i===0?(cov_22auuzpf1n().b[100][0]++,"Z"):(cov_22auuzpf1n().b[100][1]++,(r>=0?(cov_22auuzpf1n().b[101][0]++,"+"):(cov_22auuzpf1n().b[101][1]++,""))+C(o,2,s)+":"+C(Math.abs(r%60),2,s));default:cov_22auuzpf1n().b[96][4]++;cov_22auuzpf1n().s[282]++;throw new E(2310,!1);}};}var rt=(cov_22auuzpf1n().s[283]++,0),W=(cov_22auuzpf1n().s[284]++,4);function st(e){cov_22auuzpf1n().f[96]++;let n=(cov_22auuzpf1n().s[285]++,Z(e,rt,1).getDay());cov_22auuzpf1n().s[286]++;return Z(e,0,1+(n<=W?(cov_22auuzpf1n().b[102][0]++,W):(cov_22auuzpf1n().b[102][1]++,W+7))-n);}function je(e){cov_22auuzpf1n().f[97]++;let n=(cov_22auuzpf1n().s[287]++,e.getDay()),t=(cov_22auuzpf1n().s[288]++,n===0?(cov_22auuzpf1n().b[103][0]++,-3):(cov_22auuzpf1n().b[103][1]++,W-n));cov_22auuzpf1n().s[289]++;return Z(e.getFullYear(),e.getMonth(),e.getDate()+t);}function ue(e,n=(cov_22auuzpf1n().b[104][0]++,!1)){cov_22auuzpf1n().f[98]++;cov_22auuzpf1n().s[290]++;return function(t,i){cov_22auuzpf1n().f[99]++;let r;cov_22auuzpf1n().s[291]++;if(n){cov_22auuzpf1n().b[105][0]++;let s=(cov_22auuzpf1n().s[292]++,new Date(t.getFullYear(),t.getMonth(),1).getDay()-1),o=(cov_22auuzpf1n().s[293]++,t.getDate());cov_22auuzpf1n().s[294]++;r=1+Math.floor((o+s)/7);}else{cov_22auuzpf1n().b[105][1]++;let s=(cov_22auuzpf1n().s[295]++,je(t)),o=(cov_22auuzpf1n().s[296]++,st(s.getFullYear())),a=(cov_22auuzpf1n().s[297]++,s.getTime()-o.getTime());cov_22auuzpf1n().s[298]++;r=1+Math.round(a/6048e5);}cov_22auuzpf1n().s[299]++;return C(r,e,N(i,S.MinusSign));};}function H(e,n=(cov_22auuzpf1n().b[106][0]++,!1)){cov_22auuzpf1n().f[100]++;cov_22auuzpf1n().s[300]++;return function(t,i){cov_22auuzpf1n().f[101]++;let s=(cov_22auuzpf1n().s[301]++,je(t).getFullYear());cov_22auuzpf1n().s[302]++;return C(s,e,N(i,S.MinusSign),n);};}var ce=(cov_22auuzpf1n().s[303]++,{});function ot(e){cov_22auuzpf1n().f[102]++;cov_22auuzpf1n().s[304]++;if(ce[e]){cov_22auuzpf1n().b[107][0]++;cov_22auuzpf1n().s[305]++;return ce[e];}else{cov_22auuzpf1n().b[107][1]++;}let n;cov_22auuzpf1n().s[306]++;switch(e){case"G":cov_22auuzpf1n().b[108][0]++;case"GG":cov_22auuzpf1n().b[108][1]++;case"GGG":cov_22auuzpf1n().b[108][2]++;cov_22auuzpf1n().s[307]++;n=c(3,u.Abbreviated);cov_22auuzpf1n().s[308]++;break;case"GGGG":cov_22auuzpf1n().b[108][3]++;cov_22auuzpf1n().s[309]++;n=c(3,u.Wide);cov_22auuzpf1n().s[310]++;break;case"GGGGG":cov_22auuzpf1n().b[108][4]++;cov_22auuzpf1n().s[311]++;n=c(3,u.Narrow);cov_22auuzpf1n().s[312]++;break;case"y":cov_22auuzpf1n().b[108][5]++;cov_22auuzpf1n().s[313]++;n=d(0,1,0,!1,!0);cov_22auuzpf1n().s[314]++;break;case"yy":cov_22auuzpf1n().b[108][6]++;cov_22auuzpf1n().s[315]++;n=d(0,2,0,!0,!0);cov_22auuzpf1n().s[316]++;break;case"yyy":cov_22auuzpf1n().b[108][7]++;cov_22auuzpf1n().s[317]++;n=d(0,3,0,!1,!0);cov_22auuzpf1n().s[318]++;break;case"yyyy":cov_22auuzpf1n().b[108][8]++;cov_22auuzpf1n().s[319]++;n=d(0,4,0,!1,!0);cov_22auuzpf1n().s[320]++;break;case"Y":cov_22auuzpf1n().b[108][9]++;cov_22auuzpf1n().s[321]++;n=H(1);cov_22auuzpf1n().s[322]++;break;case"YY":cov_22auuzpf1n().b[108][10]++;cov_22auuzpf1n().s[323]++;n=H(2,!0);cov_22auuzpf1n().s[324]++;break;case"YYY":cov_22auuzpf1n().b[108][11]++;cov_22auuzpf1n().s[325]++;n=H(3);cov_22auuzpf1n().s[326]++;break;case"YYYY":cov_22auuzpf1n().b[108][12]++;cov_22auuzpf1n().s[327]++;n=H(4);cov_22auuzpf1n().s[328]++;break;case"M":cov_22auuzpf1n().b[108][13]++;case"L":cov_22auuzpf1n().b[108][14]++;cov_22auuzpf1n().s[329]++;n=d(1,1,1);cov_22auuzpf1n().s[330]++;break;case"MM":cov_22auuzpf1n().b[108][15]++;case"LL":cov_22auuzpf1n().b[108][16]++;cov_22auuzpf1n().s[331]++;n=d(1,2,1);cov_22auuzpf1n().s[332]++;break;case"MMM":cov_22auuzpf1n().b[108][17]++;cov_22auuzpf1n().s[333]++;n=c(2,u.Abbreviated);cov_22auuzpf1n().s[334]++;break;case"MMMM":cov_22auuzpf1n().b[108][18]++;cov_22auuzpf1n().s[335]++;n=c(2,u.Wide);cov_22auuzpf1n().s[336]++;break;case"MMMMM":cov_22auuzpf1n().b[108][19]++;cov_22auuzpf1n().s[337]++;n=c(2,u.Narrow);cov_22auuzpf1n().s[338]++;break;case"LLL":cov_22auuzpf1n().b[108][20]++;cov_22auuzpf1n().s[339]++;n=c(2,u.Abbreviated,f.Standalone);cov_22auuzpf1n().s[340]++;break;case"LLLL":cov_22auuzpf1n().b[108][21]++;cov_22auuzpf1n().s[341]++;n=c(2,u.Wide,f.Standalone);cov_22auuzpf1n().s[342]++;break;case"LLLLL":cov_22auuzpf1n().b[108][22]++;cov_22auuzpf1n().s[343]++;n=c(2,u.Narrow,f.Standalone);cov_22auuzpf1n().s[344]++;break;case"w":cov_22auuzpf1n().b[108][23]++;cov_22auuzpf1n().s[345]++;n=ue(1);cov_22auuzpf1n().s[346]++;break;case"ww":cov_22auuzpf1n().b[108][24]++;cov_22auuzpf1n().s[347]++;n=ue(2);cov_22auuzpf1n().s[348]++;break;case"W":cov_22auuzpf1n().b[108][25]++;cov_22auuzpf1n().s[349]++;n=ue(1,!0);cov_22auuzpf1n().s[350]++;break;case"d":cov_22auuzpf1n().b[108][26]++;cov_22auuzpf1n().s[351]++;n=d(2,1);cov_22auuzpf1n().s[352]++;break;case"dd":cov_22auuzpf1n().b[108][27]++;cov_22auuzpf1n().s[353]++;n=d(2,2);cov_22auuzpf1n().s[354]++;break;case"c":cov_22auuzpf1n().b[108][28]++;case"cc":cov_22auuzpf1n().b[108][29]++;cov_22auuzpf1n().s[355]++;n=d(7,1);cov_22auuzpf1n().s[356]++;break;case"ccc":cov_22auuzpf1n().b[108][30]++;cov_22auuzpf1n().s[357]++;n=c(1,u.Abbreviated,f.Standalone);cov_22auuzpf1n().s[358]++;break;case"cccc":cov_22auuzpf1n().b[108][31]++;cov_22auuzpf1n().s[359]++;n=c(1,u.Wide,f.Standalone);cov_22auuzpf1n().s[360]++;break;case"ccccc":cov_22auuzpf1n().b[108][32]++;cov_22auuzpf1n().s[361]++;n=c(1,u.Narrow,f.Standalone);cov_22auuzpf1n().s[362]++;break;case"cccccc":cov_22auuzpf1n().b[108][33]++;cov_22auuzpf1n().s[363]++;n=c(1,u.Short,f.Standalone);cov_22auuzpf1n().s[364]++;break;case"E":cov_22auuzpf1n().b[108][34]++;case"EE":cov_22auuzpf1n().b[108][35]++;case"EEE":cov_22auuzpf1n().b[108][36]++;cov_22auuzpf1n().s[365]++;n=c(1,u.Abbreviated);cov_22auuzpf1n().s[366]++;break;case"EEEE":cov_22auuzpf1n().b[108][37]++;cov_22auuzpf1n().s[367]++;n=c(1,u.Wide);cov_22auuzpf1n().s[368]++;break;case"EEEEE":cov_22auuzpf1n().b[108][38]++;cov_22auuzpf1n().s[369]++;n=c(1,u.Narrow);cov_22auuzpf1n().s[370]++;break;case"EEEEEE":cov_22auuzpf1n().b[108][39]++;cov_22auuzpf1n().s[371]++;n=c(1,u.Short);cov_22auuzpf1n().s[372]++;break;case"a":cov_22auuzpf1n().b[108][40]++;case"aa":cov_22auuzpf1n().b[108][41]++;case"aaa":cov_22auuzpf1n().b[108][42]++;cov_22auuzpf1n().s[373]++;n=c(0,u.Abbreviated);cov_22auuzpf1n().s[374]++;break;case"aaaa":cov_22auuzpf1n().b[108][43]++;cov_22auuzpf1n().s[375]++;n=c(0,u.Wide);cov_22auuzpf1n().s[376]++;break;case"aaaaa":cov_22auuzpf1n().b[108][44]++;cov_22auuzpf1n().s[377]++;n=c(0,u.Narrow);cov_22auuzpf1n().s[378]++;break;case"b":cov_22auuzpf1n().b[108][45]++;case"bb":cov_22auuzpf1n().b[108][46]++;case"bbb":cov_22auuzpf1n().b[108][47]++;cov_22auuzpf1n().s[379]++;n=c(0,u.Abbreviated,f.Standalone,!0);cov_22auuzpf1n().s[380]++;break;case"bbbb":cov_22auuzpf1n().b[108][48]++;cov_22auuzpf1n().s[381]++;n=c(0,u.Wide,f.Standalone,!0);cov_22auuzpf1n().s[382]++;break;case"bbbbb":cov_22auuzpf1n().b[108][49]++;cov_22auuzpf1n().s[383]++;n=c(0,u.Narrow,f.Standalone,!0);cov_22auuzpf1n().s[384]++;break;case"B":cov_22auuzpf1n().b[108][50]++;case"BB":cov_22auuzpf1n().b[108][51]++;case"BBB":cov_22auuzpf1n().b[108][52]++;cov_22auuzpf1n().s[385]++;n=c(0,u.Abbreviated,f.Format,!0);cov_22auuzpf1n().s[386]++;break;case"BBBB":cov_22auuzpf1n().b[108][53]++;cov_22auuzpf1n().s[387]++;n=c(0,u.Wide,f.Format,!0);cov_22auuzpf1n().s[388]++;break;case"BBBBB":cov_22auuzpf1n().b[108][54]++;cov_22auuzpf1n().s[389]++;n=c(0,u.Narrow,f.Format,!0);cov_22auuzpf1n().s[390]++;break;case"h":cov_22auuzpf1n().b[108][55]++;cov_22auuzpf1n().s[391]++;n=d(3,1,-12);cov_22auuzpf1n().s[392]++;break;case"hh":cov_22auuzpf1n().b[108][56]++;cov_22auuzpf1n().s[393]++;n=d(3,2,-12);cov_22auuzpf1n().s[394]++;break;case"H":cov_22auuzpf1n().b[108][57]++;cov_22auuzpf1n().s[395]++;n=d(3,1);cov_22auuzpf1n().s[396]++;break;case"HH":cov_22auuzpf1n().b[108][58]++;cov_22auuzpf1n().s[397]++;n=d(3,2);cov_22auuzpf1n().s[398]++;break;case"m":cov_22auuzpf1n().b[108][59]++;cov_22auuzpf1n().s[399]++;n=d(4,1);cov_22auuzpf1n().s[400]++;break;case"mm":cov_22auuzpf1n().b[108][60]++;cov_22auuzpf1n().s[401]++;n=d(4,2);cov_22auuzpf1n().s[402]++;break;case"s":cov_22auuzpf1n().b[108][61]++;cov_22auuzpf1n().s[403]++;n=d(5,1);cov_22auuzpf1n().s[404]++;break;case"ss":cov_22auuzpf1n().b[108][62]++;cov_22auuzpf1n().s[405]++;n=d(5,2);cov_22auuzpf1n().s[406]++;break;case"S":cov_22auuzpf1n().b[108][63]++;cov_22auuzpf1n().s[407]++;n=d(6,1);cov_22auuzpf1n().s[408]++;break;case"SS":cov_22auuzpf1n().b[108][64]++;cov_22auuzpf1n().s[409]++;n=d(6,2);cov_22auuzpf1n().s[410]++;break;case"SSS":cov_22auuzpf1n().b[108][65]++;cov_22auuzpf1n().s[411]++;n=d(6,3);cov_22auuzpf1n().s[412]++;break;case"Z":cov_22auuzpf1n().b[108][66]++;case"ZZ":cov_22auuzpf1n().b[108][67]++;case"ZZZ":cov_22auuzpf1n().b[108][68]++;cov_22auuzpf1n().s[413]++;n=G(0);cov_22auuzpf1n().s[414]++;break;case"ZZZZZ":cov_22auuzpf1n().b[108][69]++;cov_22auuzpf1n().s[415]++;n=G(3);cov_22auuzpf1n().s[416]++;break;case"O":cov_22auuzpf1n().b[108][70]++;case"OO":cov_22auuzpf1n().b[108][71]++;case"OOO":cov_22auuzpf1n().b[108][72]++;case"z":cov_22auuzpf1n().b[108][73]++;case"zz":cov_22auuzpf1n().b[108][74]++;case"zzz":cov_22auuzpf1n().b[108][75]++;cov_22auuzpf1n().s[417]++;n=G(1);cov_22auuzpf1n().s[418]++;break;case"OOOO":cov_22auuzpf1n().b[108][76]++;case"ZZZZ":cov_22auuzpf1n().b[108][77]++;case"zzzz":cov_22auuzpf1n().b[108][78]++;cov_22auuzpf1n().s[419]++;n=G(2);cov_22auuzpf1n().s[420]++;break;default:cov_22auuzpf1n().b[108][79]++;cov_22auuzpf1n().s[421]++;return null;}cov_22auuzpf1n().s[422]++;return ce[e]=n,n;}function ze(e,n){cov_22auuzpf1n().f[103]++;cov_22auuzpf1n().s[423]++;e=e.replace(/:/g,"");let t=(cov_22auuzpf1n().s[424]++,Date.parse("Jan 01, 1970 00:00:00 "+e)/6e4);cov_22auuzpf1n().s[425]++;return isNaN(t)?(cov_22auuzpf1n().b[109][0]++,n):(cov_22auuzpf1n().b[109][1]++,t);}function at(e,n){cov_22auuzpf1n().f[104]++;cov_22auuzpf1n().s[426]++;return e=new Date(e.getTime()),e.setMinutes(e.getMinutes()+n),e;}function ut(e,n,t){cov_22auuzpf1n().f[105]++;let r=(cov_22auuzpf1n().s[427]++,e.getTimezoneOffset()),s=(cov_22auuzpf1n().s[428]++,ze(n,r));cov_22auuzpf1n().s[429]++;return at(e,-1*(s-r));}function ct(e){cov_22auuzpf1n().f[106]++;cov_22auuzpf1n().s[430]++;if(Ie(e)){cov_22auuzpf1n().b[110][0]++;cov_22auuzpf1n().s[431]++;return e;}else{cov_22auuzpf1n().b[110][1]++;}cov_22auuzpf1n().s[432]++;if((cov_22auuzpf1n().b[112][0]++,typeof e=="number")&&(cov_22auuzpf1n().b[112][1]++,!isNaN(e))){cov_22auuzpf1n().b[111][0]++;cov_22auuzpf1n().s[433]++;return new Date(e);}else{cov_22auuzpf1n().b[111][1]++;}cov_22auuzpf1n().s[434]++;if(typeof e=="string"){cov_22auuzpf1n().b[113][0]++;cov_22auuzpf1n().s[435]++;if(e=e.trim(),/^(\d{4}(-\d{1,2}(-\d{1,2})?)?)$/.test(e)){cov_22auuzpf1n().b[114][0]++;let[r,s=(cov_22auuzpf1n().b[115][0]++,1),o=(cov_22auuzpf1n().b[116][0]++,1)]=(cov_22auuzpf1n().s[436]++,e.split("-").map(a=>{cov_22auuzpf1n().f[107]++;cov_22auuzpf1n().s[437]++;return+a;}));cov_22auuzpf1n().s[438]++;return Z(r,s-1,o);}else{cov_22auuzpf1n().b[114][1]++;}let t=(cov_22auuzpf1n().s[439]++,parseFloat(e));cov_22auuzpf1n().s[440]++;if(!isNaN(e-t)){cov_22auuzpf1n().b[117][0]++;cov_22auuzpf1n().s[441]++;return new Date(t);}else{cov_22auuzpf1n().b[117][1]++;}let i;cov_22auuzpf1n().s[442]++;if(i=e.match(Qe)){cov_22auuzpf1n().b[118][0]++;cov_22auuzpf1n().s[443]++;return dt(i);}else{cov_22auuzpf1n().b[118][1]++;}}else{cov_22auuzpf1n().b[113][1]++;}let n=(cov_22auuzpf1n().s[444]++,new Date(e));cov_22auuzpf1n().s[445]++;if(!Ie(n)){cov_22auuzpf1n().b[119][0]++;cov_22auuzpf1n().s[446]++;throw new E(2311,!1);}else{cov_22auuzpf1n().b[119][1]++;}cov_22auuzpf1n().s[447]++;return n;}function dt(e){cov_22auuzpf1n().f[108]++;let n=(cov_22auuzpf1n().s[448]++,new Date(0)),t=(cov_22auuzpf1n().s[449]++,0),i=(cov_22auuzpf1n().s[450]++,0),r=(cov_22auuzpf1n().s[451]++,e[8]?(cov_22auuzpf1n().b[120][0]++,n.setUTCFullYear):(cov_22auuzpf1n().b[120][1]++,n.setFullYear)),s=(cov_22auuzpf1n().s[452]++,e[8]?(cov_22auuzpf1n().b[121][0]++,n.setUTCHours):(cov_22auuzpf1n().b[121][1]++,n.setHours));cov_22auuzpf1n().s[453]++;(cov_22auuzpf1n().b[122][0]++,e[9])&&(cov_22auuzpf1n().b[122][1]++,t=Number(e[9]+e[10]),i=Number(e[9]+e[11])),r.call(n,Number(e[1]),Number(e[2])-1,Number(e[3]));let o=(cov_22auuzpf1n().s[454]++,Number((cov_22auuzpf1n().b[123][0]++,e[4])||(cov_22auuzpf1n().b[123][1]++,0))-t),a=(cov_22auuzpf1n().s[455]++,Number((cov_22auuzpf1n().b[124][0]++,e[5])||(cov_22auuzpf1n().b[124][1]++,0))-i),y=(cov_22auuzpf1n().s[456]++,Number((cov_22auuzpf1n().b[125][0]++,e[6])||(cov_22auuzpf1n().b[125][1]++,0))),_=(cov_22auuzpf1n().s[457]++,Math.floor(parseFloat("0."+((cov_22auuzpf1n().b[126][0]++,e[7])||(cov_22auuzpf1n().b[126][1]++,0)))*1e3));cov_22auuzpf1n().s[458]++;return s.call(n,o,a,y,_),n;}function Ie(e){cov_22auuzpf1n().f[109]++;cov_22auuzpf1n().s[459]++;return(cov_22auuzpf1n().b[127][0]++,e instanceof Date)&&(cov_22auuzpf1n().b[127][1]++,!isNaN(e.valueOf()));}var de=(cov_22auuzpf1n().s[460]++,/\s+/),Le=(cov_22auuzpf1n().s[461]++,[]),lt=(cov_22auuzpf1n().s[462]++,(()=>{cov_22auuzpf1n().f[110]++;class e{_ngEl;_renderer;initialClasses=(cov_22auuzpf1n().s[463]++,Le);rawClass;stateMap=(cov_22auuzpf1n().s[464]++,new Map());constructor(t,i){cov_22auuzpf1n().f[111]++;cov_22auuzpf1n().s[465]++;this._ngEl=t,this._renderer=i;}set klass(t){cov_22auuzpf1n().f[112]++;cov_22auuzpf1n().s[466]++;this.initialClasses=t!=null?(cov_22auuzpf1n().b[128][0]++,t.trim().split(de)):(cov_22auuzpf1n().b[128][1]++,Le);}set ngClass(t){cov_22auuzpf1n().f[113]++;cov_22auuzpf1n().s[467]++;this.rawClass=typeof t=="string"?(cov_22auuzpf1n().b[129][0]++,t.trim().split(de)):(cov_22auuzpf1n().b[129][1]++,t);}ngDoCheck(){cov_22auuzpf1n().f[114]++;cov_22auuzpf1n().s[468]++;for(let i of this.initialClasses){cov_22auuzpf1n().s[469]++;this._updateState(i,!0);}let t=(cov_22auuzpf1n().s[470]++,this.rawClass);cov_22auuzpf1n().s[471]++;if((cov_22auuzpf1n().b[131][0]++,Array.isArray(t))||(cov_22auuzpf1n().b[131][1]++,t instanceof Set)){cov_22auuzpf1n().b[130][0]++;cov_22auuzpf1n().s[472]++;for(let i of t){cov_22auuzpf1n().s[473]++;this._updateState(i,!0);}}else{cov_22auuzpf1n().b[130][1]++;cov_22auuzpf1n().s[474]++;if(t!=null){cov_22auuzpf1n().b[132][0]++;cov_22auuzpf1n().s[475]++;for(let i of Object.keys(t)){cov_22auuzpf1n().s[476]++;this._updateState(i,!!t[i]);}}else{cov_22auuzpf1n().b[132][1]++;}}cov_22auuzpf1n().s[477]++;this._applyStateDiff();}_updateState(t,i){cov_22auuzpf1n().f[115]++;let r=(cov_22auuzpf1n().s[478]++,this.stateMap.get(t));cov_22auuzpf1n().s[479]++;r!==void 0?(cov_22auuzpf1n().b[133][0]++,(cov_22auuzpf1n().b[134][0]++,r.enabled!==i)&&(cov_22auuzpf1n().b[134][1]++,r.changed=!0,r.enabled=i),r.touched=!0):(cov_22auuzpf1n().b[133][1]++,this.stateMap.set(t,{enabled:i,changed:!0,touched:!0}));}_applyStateDiff(){cov_22auuzpf1n().f[116]++;cov_22auuzpf1n().s[480]++;for(let t of this.stateMap){let i=(cov_22auuzpf1n().s[481]++,t[0]),r=(cov_22auuzpf1n().s[482]++,t[1]);cov_22auuzpf1n().s[483]++;r.changed?(cov_22auuzpf1n().b[135][0]++,this._toggleClass(i,r.enabled),r.changed=!1):(cov_22auuzpf1n().b[135][1]++,(cov_22auuzpf1n().b[136][0]++,r.touched)||(cov_22auuzpf1n().b[136][1]++,(cov_22auuzpf1n().b[137][0]++,r.enabled)&&(cov_22auuzpf1n().b[137][1]++,this._toggleClass(i,!1)),this.stateMap.delete(i))),r.touched=!1;}}_toggleClass(t,i){cov_22auuzpf1n().f[117]++;cov_22auuzpf1n().s[484]++;t=t.trim(),(cov_22auuzpf1n().b[138][0]++,t.length>0)&&(cov_22auuzpf1n().b[138][1]++,t.split(de).forEach(r=>{cov_22auuzpf1n().f[118]++;cov_22auuzpf1n().s[485]++;i?(cov_22auuzpf1n().b[139][0]++,this._renderer.addClass(this._ngEl.nativeElement,r)):(cov_22auuzpf1n().b[139][1]++,this._renderer.removeClass(this._ngEl.nativeElement,r));}));}static ɵfac=(cov_22auuzpf1n().s[486]++,function(i){cov_22auuzpf1n().f[119]++;cov_22auuzpf1n().s[487]++;return new((cov_22auuzpf1n().b[140][0]++,i)||(cov_22auuzpf1n().b[140][1]++,e))(g(ee),g(ne));});static ɵdir=(cov_22auuzpf1n().s[488]++,$({type:e,selectors:[["","ngClass",""]],inputs:{klass:[0,"class","klass"],ngClass:"ngClass"}}));}cov_22auuzpf1n().s[489]++;return e;})());cov_22auuzpf1n().s[490]++;var Y=class{$implicit;ngForOf;index;count;constructor(n,t,i,r){cov_22auuzpf1n().f[120]++;cov_22auuzpf1n().s[491]++;this.$implicit=n,this.ngForOf=t,this.index=i,this.count=r;}get first(){cov_22auuzpf1n().f[121]++;cov_22auuzpf1n().s[492]++;return this.index===0;}get last(){cov_22auuzpf1n().f[122]++;cov_22auuzpf1n().s[493]++;return this.index===this.count-1;}get even(){cov_22auuzpf1n().f[123]++;cov_22auuzpf1n().s[494]++;return this.index%2===0;}get odd(){cov_22auuzpf1n().f[124]++;cov_22auuzpf1n().s[495]++;return!this.even;}},Ve=(cov_22auuzpf1n().s[496]++,(()=>{cov_22auuzpf1n().f[125]++;class e{_viewContainer;_template;_differs;set ngForOf(t){cov_22auuzpf1n().f[126]++;cov_22auuzpf1n().s[497]++;this._ngForOf=t,this._ngForOfDirty=!0;}set ngForTrackBy(t){cov_22auuzpf1n().f[127]++;cov_22auuzpf1n().s[498]++;this._trackByFn=t;}get ngForTrackBy(){cov_22auuzpf1n().f[128]++;cov_22auuzpf1n().s[499]++;return this._trackByFn;}_ngForOf=(cov_22auuzpf1n().s[500]++,null);_ngForOfDirty=(cov_22auuzpf1n().s[501]++,!0);_differ=(cov_22auuzpf1n().s[502]++,null);_trackByFn;constructor(t,i,r){cov_22auuzpf1n().f[129]++;cov_22auuzpf1n().s[503]++;this._viewContainer=t,this._template=i,this._differs=r;}set ngForTemplate(t){cov_22auuzpf1n().f[130]++;cov_22auuzpf1n().s[504]++;(cov_22auuzpf1n().b[141][0]++,t)&&(cov_22auuzpf1n().b[141][1]++,this._template=t);}ngDoCheck(){cov_22auuzpf1n().f[131]++;cov_22auuzpf1n().s[505]++;if(this._ngForOfDirty){cov_22auuzpf1n().b[142][0]++;cov_22auuzpf1n().s[506]++;this._ngForOfDirty=!1;let t=(cov_22auuzpf1n().s[507]++,this._ngForOf);cov_22auuzpf1n().s[508]++;(cov_22auuzpf1n().b[143][0]++,!this._differ)&&(cov_22auuzpf1n().b[143][1]++,t)&&(cov_22auuzpf1n().b[143][2]++,this._differ=this._differs.find(t).create(this.ngForTrackBy));}else{cov_22auuzpf1n().b[142][1]++;}cov_22auuzpf1n().s[509]++;if(this._differ){cov_22auuzpf1n().b[144][0]++;let t=(cov_22auuzpf1n().s[510]++,this._differ.diff(this._ngForOf));cov_22auuzpf1n().s[511]++;(cov_22auuzpf1n().b[145][0]++,t)&&(cov_22auuzpf1n().b[145][1]++,this._applyChanges(t));}else{cov_22auuzpf1n().b[144][1]++;}}_applyChanges(t){cov_22auuzpf1n().f[132]++;let i=(cov_22auuzpf1n().s[512]++,this._viewContainer);cov_22auuzpf1n().s[513]++;t.forEachOperation((r,s,o)=>{cov_22auuzpf1n().f[133]++;cov_22auuzpf1n().s[514]++;if(r.previousIndex==null){cov_22auuzpf1n().b[146][0]++;cov_22auuzpf1n().s[515]++;i.createEmbeddedView(this._template,new Y(r.item,this._ngForOf,-1,-1),o===null?(cov_22auuzpf1n().b[147][0]++,void 0):(cov_22auuzpf1n().b[147][1]++,o));}else{cov_22auuzpf1n().b[146][1]++;cov_22auuzpf1n().s[516]++;if(o==null){cov_22auuzpf1n().b[148][0]++;cov_22auuzpf1n().s[517]++;i.remove(s===null?(cov_22auuzpf1n().b[149][0]++,void 0):(cov_22auuzpf1n().b[149][1]++,s));}else{cov_22auuzpf1n().b[148][1]++;cov_22auuzpf1n().s[518]++;if(s!==null){cov_22auuzpf1n().b[150][0]++;let a=(cov_22auuzpf1n().s[519]++,i.get(s));cov_22auuzpf1n().s[520]++;i.move(a,o),Me(a,r);}else{cov_22auuzpf1n().b[150][1]++;}}}});cov_22auuzpf1n().s[521]++;for(let r=(cov_22auuzpf1n().s[522]++,0),s=(cov_22auuzpf1n().s[523]++,i.length);r{cov_22auuzpf1n().f[134]++;let s=(cov_22auuzpf1n().s[527]++,i.get(r.currentIndex));cov_22auuzpf1n().s[528]++;Me(s,r);});}static ngTemplateContextGuard(t,i){cov_22auuzpf1n().f[135]++;cov_22auuzpf1n().s[529]++;return!0;}static ɵfac=(cov_22auuzpf1n().s[530]++,function(i){cov_22auuzpf1n().f[136]++;cov_22auuzpf1n().s[531]++;return new((cov_22auuzpf1n().b[151][0]++,i)||(cov_22auuzpf1n().b[151][1]++,e))(g(ie),g(te),g(Ae));});static ɵdir=(cov_22auuzpf1n().s[532]++,$({type:e,selectors:[["","ngFor","","ngForOf",""]],inputs:{ngForOf:"ngForOf",ngForTrackBy:"ngForTrackBy",ngForTemplate:"ngForTemplate"}}));}cov_22auuzpf1n().s[533]++;return e;})());function Me(e,n){cov_22auuzpf1n().f[137]++;cov_22auuzpf1n().s[534]++;e.context.$implicit=n.item;}cov_22auuzpf1n().s[551]++;var ft=(cov_22auuzpf1n().s[535]++,(()=>{cov_22auuzpf1n().f[138]++;class e{_viewContainer;_context=(cov_22auuzpf1n().s[536]++,new K());_thenTemplateRef=(cov_22auuzpf1n().s[537]++,null);_elseTemplateRef=(cov_22auuzpf1n().s[538]++,null);_thenViewRef=(cov_22auuzpf1n().s[539]++,null);_elseViewRef=(cov_22auuzpf1n().s[540]++,null);constructor(t,i){cov_22auuzpf1n().f[139]++;cov_22auuzpf1n().s[541]++;this._viewContainer=t,this._thenTemplateRef=i;}set ngIf(t){cov_22auuzpf1n().f[140]++;cov_22auuzpf1n().s[542]++;this._context.$implicit=this._context.ngIf=t,this._updateView();}set ngIfThen(t){cov_22auuzpf1n().f[141]++;cov_22auuzpf1n().s[543]++;Te(t,!1),this._thenTemplateRef=t,this._thenViewRef=null,this._updateView();}set ngIfElse(t){cov_22auuzpf1n().f[142]++;cov_22auuzpf1n().s[544]++;Te(t,!1),this._elseTemplateRef=t,this._elseViewRef=null,this._updateView();}_updateView(){cov_22auuzpf1n().f[143]++;cov_22auuzpf1n().s[545]++;this._context.$implicit?(cov_22auuzpf1n().b[152][0]++,(cov_22auuzpf1n().b[153][0]++,this._thenViewRef)||(cov_22auuzpf1n().b[153][1]++,this._viewContainer.clear(),this._elseViewRef=null,(cov_22auuzpf1n().b[154][0]++,this._thenTemplateRef)&&(cov_22auuzpf1n().b[154][1]++,this._thenViewRef=this._viewContainer.createEmbeddedView(this._thenTemplateRef,this._context)))):(cov_22auuzpf1n().b[152][1]++,(cov_22auuzpf1n().b[155][0]++,this._elseViewRef)||(cov_22auuzpf1n().b[155][1]++,this._viewContainer.clear(),this._thenViewRef=null,(cov_22auuzpf1n().b[156][0]++,this._elseTemplateRef)&&(cov_22auuzpf1n().b[156][1]++,this._elseViewRef=this._viewContainer.createEmbeddedView(this._elseTemplateRef,this._context))));}static ngIfUseIfTypeGuard;static ngTemplateGuard_ngIf;static ngTemplateContextGuard(t,i){cov_22auuzpf1n().f[144]++;cov_22auuzpf1n().s[546]++;return!0;}static ɵfac=(cov_22auuzpf1n().s[547]++,function(i){cov_22auuzpf1n().f[145]++;cov_22auuzpf1n().s[548]++;return new((cov_22auuzpf1n().b[157][0]++,i)||(cov_22auuzpf1n().b[157][1]++,e))(g(ie),g(te));});static ɵdir=(cov_22auuzpf1n().s[549]++,$({type:e,selectors:[["","ngIf",""]],inputs:{ngIf:"ngIf",ngIfThen:"ngIfThen",ngIfElse:"ngIfElse"}}));}cov_22auuzpf1n().s[550]++;return e;})()),K=class{$implicit=(cov_22auuzpf1n().s[552]++,null);ngIf=(cov_22auuzpf1n().s[553]++,null);};function Te(e,n){cov_22auuzpf1n().f[146]++;cov_22auuzpf1n().s[554]++;if((cov_22auuzpf1n().b[159][0]++,e)&&(cov_22auuzpf1n().b[159][1]++,!e.createEmbeddedView)){cov_22auuzpf1n().b[158][0]++;cov_22auuzpf1n().s[555]++;throw new E(2020,!1);}else{cov_22auuzpf1n().b[158][1]++;}}function Ge(e,n){cov_22auuzpf1n().f[147]++;cov_22auuzpf1n().s[556]++;return new E(2100,!1);}cov_22auuzpf1n().s[557]++;cov_22auuzpf1n().s[562]++;var le=class{createSubscription(n,t,i){cov_22auuzpf1n().f[148]++;cov_22auuzpf1n().s[558]++;return se(()=>{cov_22auuzpf1n().f[149]++;cov_22auuzpf1n().s[559]++;return n.subscribe({next:t,error:i});});}dispose(n){cov_22auuzpf1n().f[150]++;cov_22auuzpf1n().s[560]++;se(()=>{cov_22auuzpf1n().f[151]++;cov_22auuzpf1n().s[561]++;return n.unsubscribe();});}},fe=class{createSubscription(n,t,i){cov_22auuzpf1n().f[152]++;cov_22auuzpf1n().s[563]++;return n.then(r=>{cov_22auuzpf1n().f[153]++;cov_22auuzpf1n().s[564]++;return t?.(r);},r=>{cov_22auuzpf1n().f[154]++;cov_22auuzpf1n().s[565]++;return i?.(r);}),{unsubscribe:()=>{cov_22auuzpf1n().f[155]++;cov_22auuzpf1n().s[566]++;t=null,i=null;}};}dispose(n){cov_22auuzpf1n().f[156]++;cov_22auuzpf1n().s[567]++;n.unsubscribe();}},ht=(cov_22auuzpf1n().s[568]++,new fe()),gt=(cov_22auuzpf1n().s[569]++,new le()),Dt=(cov_22auuzpf1n().s[570]++,(()=>{cov_22auuzpf1n().f[157]++;class e{_ref;_latestValue=(cov_22auuzpf1n().s[571]++,null);markForCheckOnValueUpdate=(cov_22auuzpf1n().s[572]++,!0);_subscription=(cov_22auuzpf1n().s[573]++,null);_obj=(cov_22auuzpf1n().s[574]++,null);_strategy=(cov_22auuzpf1n().s[575]++,null);applicationErrorHandler=(cov_22auuzpf1n().s[576]++,I(Ce));constructor(t){cov_22auuzpf1n().f[158]++;cov_22auuzpf1n().s[577]++;this._ref=t;}ngOnDestroy(){cov_22auuzpf1n().f[159]++;cov_22auuzpf1n().s[578]++;(cov_22auuzpf1n().b[160][0]++,this._subscription)&&(cov_22auuzpf1n().b[160][1]++,this._dispose()),this._ref=null;}transform(t){cov_22auuzpf1n().f[160]++;cov_22auuzpf1n().s[579]++;if(!this._obj){cov_22auuzpf1n().b[161][0]++;cov_22auuzpf1n().s[580]++;if(t){cov_22auuzpf1n().b[162][0]++;cov_22auuzpf1n().s[581]++;try{cov_22auuzpf1n().s[582]++;this.markForCheckOnValueUpdate=!1,this._subscribe(t);}finally{cov_22auuzpf1n().s[583]++;this.markForCheckOnValueUpdate=!0;}}else{cov_22auuzpf1n().b[162][1]++;}cov_22auuzpf1n().s[584]++;return this._latestValue;}else{cov_22auuzpf1n().b[161][1]++;}cov_22auuzpf1n().s[585]++;return t!==this._obj?(cov_22auuzpf1n().b[163][0]++,this._dispose(),this.transform(t)):(cov_22auuzpf1n().b[163][1]++,this._latestValue);}_subscribe(t){cov_22auuzpf1n().f[161]++;cov_22auuzpf1n().s[586]++;this._obj=t,this._strategy=this._selectStrategy(t),this._subscription=this._strategy.createSubscription(t,i=>{cov_22auuzpf1n().f[162]++;cov_22auuzpf1n().s[587]++;return this._updateLatestValue(t,i);},i=>{cov_22auuzpf1n().f[163]++;cov_22auuzpf1n().s[588]++;return this.applicationErrorHandler(i);});}_selectStrategy(t){cov_22auuzpf1n().f[164]++;cov_22auuzpf1n().s[589]++;if(Fe(t)){cov_22auuzpf1n().b[164][0]++;cov_22auuzpf1n().s[590]++;return ht;}else{cov_22auuzpf1n().b[164][1]++;}cov_22auuzpf1n().s[591]++;if(Ee(t)){cov_22auuzpf1n().b[165][0]++;cov_22auuzpf1n().s[592]++;return gt;}else{cov_22auuzpf1n().b[165][1]++;}cov_22auuzpf1n().s[593]++;throw Ge(e,t);}_dispose(){cov_22auuzpf1n().f[165]++;cov_22auuzpf1n().s[594]++;this._strategy.dispose(this._subscription),this._latestValue=null,this._subscription=null,this._obj=null;}_updateLatestValue(t,i){cov_22auuzpf1n().f[166]++;cov_22auuzpf1n().s[595]++;(cov_22auuzpf1n().b[166][0]++,t===this._obj)&&(cov_22auuzpf1n().b[166][1]++,this._latestValue=i,(cov_22auuzpf1n().b[167][0]++,this.markForCheckOnValueUpdate)&&(cov_22auuzpf1n().b[167][1]++,this._ref?.markForCheck()));}static ɵfac=(cov_22auuzpf1n().s[596]++,function(i){cov_22auuzpf1n().f[167]++;cov_22auuzpf1n().s[597]++;return new((cov_22auuzpf1n().b[168][0]++,i)||(cov_22auuzpf1n().b[168][1]++,e))(g(oe,16));});static ɵpipe=(cov_22auuzpf1n().s[598]++,re({name:"async",type:e,pure:!1}));}cov_22auuzpf1n().s[599]++;return e;})());var pt=(cov_22auuzpf1n().s[600]++,"mediumDate"),He=(cov_22auuzpf1n().s[601]++,new L("")),We=(cov_22auuzpf1n().s[602]++,new L("")),mt=(cov_22auuzpf1n().s[603]++,(()=>{cov_22auuzpf1n().f[168]++;class e{locale;defaultTimezone;defaultOptions;constructor(t,i,r){cov_22auuzpf1n().f[169]++;cov_22auuzpf1n().s[604]++;this.locale=t,this.defaultTimezone=i,this.defaultOptions=r;}transform(t,i,r,s){cov_22auuzpf1n().f[170]++;cov_22auuzpf1n().s[605]++;if((cov_22auuzpf1n().b[170][0]++,t==null)||(cov_22auuzpf1n().b[170][1]++,t==="")||(cov_22auuzpf1n().b[170][2]++,t!==t)){cov_22auuzpf1n().b[169][0]++;cov_22auuzpf1n().s[606]++;return null;}else{cov_22auuzpf1n().b[169][1]++;}cov_22auuzpf1n().s[607]++;try{let o=(cov_22auuzpf1n().s[608]++,(cov_22auuzpf1n().b[171][0]++,i)??(cov_22auuzpf1n().b[171][1]++,this.defaultOptions?.dateFormat)??(cov_22auuzpf1n().b[171][2]++,pt)),a=(cov_22auuzpf1n().s[609]++,(cov_22auuzpf1n().b[172][0]++,r)??(cov_22auuzpf1n().b[172][1]++,this.defaultOptions?.timezone)??(cov_22auuzpf1n().b[172][2]++,this.defaultTimezone)??(cov_22auuzpf1n().b[172][3]++,void 0));cov_22auuzpf1n().s[610]++;return Ue(t,o,(cov_22auuzpf1n().b[173][0]++,s)||(cov_22auuzpf1n().b[173][1]++,this.locale),a);}catch(o){cov_22auuzpf1n().s[611]++;throw Ge(e,o.message);}}static ɵfac=(cov_22auuzpf1n().s[612]++,function(i){cov_22auuzpf1n().f[171]++;cov_22auuzpf1n().s[613]++;return new((cov_22auuzpf1n().b[174][0]++,i)||(cov_22auuzpf1n().b[174][1]++,e))(g(we,16),g(He,24),g(We,24));});static ɵpipe=(cov_22auuzpf1n().s[614]++,re({name:"date",type:e,pure:!0}));}cov_22auuzpf1n().s[615]++;return e;})());var Ct=(cov_22auuzpf1n().s[616]++,(()=>{cov_22auuzpf1n().f[172]++;class e{static ɵfac=(cov_22auuzpf1n().s[617]++,function(i){cov_22auuzpf1n().f[173]++;cov_22auuzpf1n().s[618]++;return new((cov_22auuzpf1n().b[175][0]++,i)||(cov_22auuzpf1n().b[175][1]++,e))();});static ɵmod=(cov_22auuzpf1n().s[619]++,ye({type:e}));static ɵinj=(cov_22auuzpf1n().s[620]++,me({}));}cov_22auuzpf1n().s[621]++;return e;})());var Ft=(cov_22auuzpf1n().s[622]++,"browser");function ui(e){cov_22auuzpf1n().f[174]++;cov_22auuzpf1n().s[623]++;return e===Ft;}cov_22auuzpf1n().s[628]++;var ci=(cov_22auuzpf1n().s[624]++,(()=>{cov_22auuzpf1n().f[175]++;class e{static ɵprov=(cov_22auuzpf1n().s[625]++,b({token:e,providedIn:"root",factory:()=>{cov_22auuzpf1n().f[176]++;cov_22auuzpf1n().s[626]++;return new he(I(T),window);}}));}cov_22auuzpf1n().s[627]++;return e;})()),he=class{document;window;offset=(cov_22auuzpf1n().s[629]++,()=>{cov_22auuzpf1n().f[177]++;cov_22auuzpf1n().s[630]++;return[0,0];});constructor(n,t){cov_22auuzpf1n().f[178]++;cov_22auuzpf1n().s[631]++;this.document=n,this.window=t;}setOffset(n){cov_22auuzpf1n().f[179]++;cov_22auuzpf1n().s[632]++;Array.isArray(n)?(cov_22auuzpf1n().b[176][0]++,this.offset=()=>{cov_22auuzpf1n().f[180]++;cov_22auuzpf1n().s[633]++;return n;}):(cov_22auuzpf1n().b[176][1]++,this.offset=n);}getScrollPosition(){cov_22auuzpf1n().f[181]++;cov_22auuzpf1n().s[634]++;return[this.window.scrollX,this.window.scrollY];}scrollToPosition(n,t){cov_22auuzpf1n().f[182]++;cov_22auuzpf1n().s[635]++;this.window.scrollTo(J(q({},t),{left:n[0],top:n[1]}));}scrollToAnchor(n,t){cov_22auuzpf1n().f[183]++;let i=(cov_22auuzpf1n().s[636]++,Et(this.document,n));cov_22auuzpf1n().s[637]++;(cov_22auuzpf1n().b[177][0]++,i)&&(cov_22auuzpf1n().b[177][1]++,this.scrollToElement(i,t),i.focus());}setHistoryScrollRestoration(n){cov_22auuzpf1n().f[184]++;cov_22auuzpf1n().s[638]++;try{cov_22auuzpf1n().s[639]++;this.window.history.scrollRestoration=n;}catch{cov_22auuzpf1n().s[640]++;console.warn(Q(2400,!1));}}scrollToElement(n,t){cov_22auuzpf1n().f[185]++;let i=(cov_22auuzpf1n().s[641]++,n.getBoundingClientRect()),r=(cov_22auuzpf1n().s[642]++,i.left+this.window.pageXOffset),s=(cov_22auuzpf1n().s[643]++,i.top+this.window.pageYOffset),o=(cov_22auuzpf1n().s[644]++,this.offset());cov_22auuzpf1n().s[645]++;this.window.scrollTo(J(q({},t),{left:r-o[0],top:s-o[1]}));}};function Et(e,n){cov_22auuzpf1n().f[186]++;let t=(cov_22auuzpf1n().s[646]++,(cov_22auuzpf1n().b[178][0]++,e.getElementById(n))||(cov_22auuzpf1n().b[178][1]++,e.getElementsByName(n)[0]));cov_22auuzpf1n().s[647]++;if(t){cov_22auuzpf1n().b[179][0]++;cov_22auuzpf1n().s[648]++;return t;}else{cov_22auuzpf1n().b[179][1]++;}cov_22auuzpf1n().s[649]++;if((cov_22auuzpf1n().b[181][0]++,typeof e.createTreeWalker=="function")&&(cov_22auuzpf1n().b[181][1]++,e.body)&&(cov_22auuzpf1n().b[181][2]++,typeof e.body.attachShadow=="function")){cov_22auuzpf1n().b[180][0]++;let i=(cov_22auuzpf1n().s[650]++,e.createTreeWalker(e.body,NodeFilter.SHOW_ELEMENT)),r=(cov_22auuzpf1n().s[651]++,i.currentNode);cov_22auuzpf1n().s[652]++;for(;r;){let s=(cov_22auuzpf1n().s[653]++,r.shadowRoot);cov_22auuzpf1n().s[654]++;if(s){cov_22auuzpf1n().b[182][0]++;let o=(cov_22auuzpf1n().s[655]++,(cov_22auuzpf1n().b[183][0]++,s.getElementById(n))||(cov_22auuzpf1n().b[183][1]++,s.querySelector(`[name="${n}"]`)));cov_22auuzpf1n().s[656]++;if(o){cov_22auuzpf1n().b[184][0]++;cov_22auuzpf1n().s[657]++;return o;}else{cov_22auuzpf1n().b[184][1]++;}}else{cov_22auuzpf1n().b[182][1]++;}cov_22auuzpf1n().s[658]++;r=i.nextNode();}}else{cov_22auuzpf1n().b[180][1]++;}cov_22auuzpf1n().s[659]++;return null;}export{M as a,be as b,ve as c,Je as d,lt as e,Ve as f,ft as g,Dt as h,mt as i,Ct as j,Ft as k,ui as l,ci as m};//# sourceMappingURL=chunk-F6OGAIBI.js.map +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJVIiwiZSIsIm4iLCJjb3ZfMjJhdXV6cGYxbiIsImYiLCJzIiwiYiIsImVuZHNXaXRoIiwic3RhcnRzV2l0aCIsInNsaWNlIiwiU2UiLCJzZWFyY2giLCJtIiwiTSIsImhpc3RvcnlHbyIsInQiLCJFcnJvciIsIsm1ZmFjIiwiaSIsIsm1cHJvdiIsInRva2VuIiwiZmFjdG9yeSIsIkkiLCJiZSIsInByb3ZpZGVkSW4iLCJqIiwiTCIsIl9wbGF0Zm9ybUxvY2F0aW9uIiwiX2Jhc2VIcmVmIiwiX3JlbW92ZUxpc3RlbmVyRm5zIiwiY29uc3RydWN0b3IiLCJnZXRCYXNlSHJlZkZyb21ET00iLCJUIiwibG9jYXRpb24iLCJvcmlnaW4iLCJuZ09uRGVzdHJveSIsImxlbmd0aCIsInBvcCIsIm9uUG9wU3RhdGUiLCJwdXNoIiwib25IYXNoQ2hhbmdlIiwiZ2V0QmFzZUhyZWYiLCJwcmVwYXJlRXh0ZXJuYWxVcmwiLCJwYXRoIiwicGF0aG5hbWUiLCJyIiwiaGFzaCIsInB1c2hTdGF0ZSIsIm8iLCJyZXBsYWNlU3RhdGUiLCJmb3J3YXJkIiwiYmFjayIsImdldFN0YXRlIiwidyIsIlIiLCJ2ZSIsIl9zdWJqZWN0IiwicGUiLCJfYmFzZVBhdGgiLCJfbG9jYXRpb25TdHJhdGVneSIsIl91cmxDaGFuZ2VMaXN0ZW5lcnMiLCJfdXJsQ2hhbmdlU3Vic2NyaXB0aW9uIiwiWGUiLCJfZSIsIm5leHQiLCJ1cmwiLCJzdGF0ZSIsInR5cGUiLCJ1bnN1YnNjcmliZSIsIm5vcm1hbGl6ZSIsImlzQ3VycmVudFBhdGhFcXVhbFRvIiwic3RyaXBUcmFpbGluZ1NsYXNoIiwiS2UiLCJnbyIsIl9ub3RpZnlVcmxDaGFuZ2VMaXN0ZW5lcnMiLCJvblVybENoYW5nZSIsInN1YnNjcmliZSIsImluZGV4T2YiLCJzcGxpY2UiLCJmb3JFYWNoIiwiZXJyb3IiLCJjb21wbGV0ZSIsIm5vcm1hbGl6ZVF1ZXJ5UGFyYW1zIiwiam9pbldpdGhTbGFzaCIsIlllIiwic3Vic3RyaW5nIiwiaW5jbHVkZXMiLCJyZXBsYWNlIiwiUmVnRXhwIiwidGVzdCIsInNwbGl0IiwiSmUiLCJGb3JtYXQiLCJTdGFuZGFsb25lIiwidSIsIk5hcnJvdyIsIkFiYnJldmlhdGVkIiwiV2lkZSIsIlNob3J0IiwiaCIsIk1lZGl1bSIsIkxvbmciLCJGdWxsIiwiUyIsIkRlY2ltYWwiLCJHcm91cCIsIkxpc3QiLCJQZXJjZW50U2lnbiIsIlBsdXNTaWduIiwiTWludXNTaWduIiwiRXhwb25lbnRpYWwiLCJTdXBlcnNjcmlwdGluZ0V4cG9uZW50IiwiUGVyTWlsbGUiLCJJbmZpbml0eSIsIk5hTiIsIlRpbWVTZXBhcmF0b3IiLCJDdXJyZW5jeURlY2ltYWwiLCJDdXJyZW5jeUdyb3VwIiwiUmUiLCJEIiwibCIsIkxvY2FsZUlkIiwiT2UiLCJEYXlQZXJpb2RzRm9ybWF0IiwiRGF5UGVyaW9kc1N0YW5kYWxvbmUiLCJwIiwiUGUiLCJEYXlzRm9ybWF0IiwiRGF5c1N0YW5kYWxvbmUiLCJCZSIsIk1vbnRoc0Zvcm1hdCIsIk1vbnRoc1N0YW5kYWxvbmUiLCJOZSIsIkVyYXMiLCJPIiwiRGF0ZUZvcm1hdCIsIlAiLCJUaW1lRm9ybWF0IiwiQiIsIkRhdGVUaW1lRm9ybWF0IiwiTiIsIk51bWJlclN5bWJvbHMiLCJrZSIsIkV4dHJhRGF0YSIsIkUiLCJ4ZSIsIm1hcCIsImFlIiwiJGUiLCJob3VycyIsIm1pbnV0ZXMiLCJRZSIsInoiLCJldCIsIlVlIiwiY3QiLCJBIiwiYSIsImV4ZWMiLCJjb25jYXQiLCJGIiwieSIsImdldFRpbWV6b25lT2Zmc2V0IiwiemUiLCJ1dCIsIl8iLCJ2Iiwib3QiLCJaIiwiRGF0ZSIsInNldEZ1bGxZZWFyIiwic2V0SG91cnMiLCJWIiwiQyIsIlN0cmluZyIsInR0IiwiZCIsIm50IiwiZ2V0RnVsbFllYXIiLCJnZXRNb250aCIsImdldERhdGUiLCJnZXRIb3VycyIsImdldE1pbnV0ZXMiLCJnZXRTZWNvbmRzIiwiZ2V0TWlsbGlzZWNvbmRzIiwiZ2V0RGF5IiwiYyIsIml0IiwiZmluZEluZGV4IiwiayIsIkFycmF5IiwiaXNBcnJheSIsIlgiLCJ4IiwiZ2UiLCJEZSIsIkciLCJNYXRoIiwiZmxvb3IiLCJjZWlsIiwiYWJzIiwicnQiLCJXIiwic3QiLCJqZSIsInVlIiwiZ2V0VGltZSIsInJvdW5kIiwiSCIsImNlIiwicGFyc2UiLCJpc05hTiIsImF0Iiwic2V0TWludXRlcyIsIkllIiwidHJpbSIsInBhcnNlRmxvYXQiLCJtYXRjaCIsImR0Iiwic2V0VVRDRnVsbFllYXIiLCJzZXRVVENIb3VycyIsIk51bWJlciIsImNhbGwiLCJ2YWx1ZU9mIiwiZGUiLCJMZSIsImx0IiwiX25nRWwiLCJfcmVuZGVyZXIiLCJpbml0aWFsQ2xhc3NlcyIsInJhd0NsYXNzIiwic3RhdGVNYXAiLCJNYXAiLCJrbGFzcyIsIm5nQ2xhc3MiLCJuZ0RvQ2hlY2siLCJfdXBkYXRlU3RhdGUiLCJTZXQiLCJPYmplY3QiLCJrZXlzIiwiX2FwcGx5U3RhdGVEaWZmIiwiZ2V0IiwiZW5hYmxlZCIsImNoYW5nZWQiLCJ0b3VjaGVkIiwic2V0IiwiX3RvZ2dsZUNsYXNzIiwiZGVsZXRlIiwiYWRkQ2xhc3MiLCJuYXRpdmVFbGVtZW50IiwicmVtb3ZlQ2xhc3MiLCJnIiwiZWUiLCJuZSIsIsm1ZGlyIiwiJCIsInNlbGVjdG9ycyIsImlucHV0cyIsIlkiLCIkaW1wbGljaXQiLCJuZ0Zvck9mIiwiaW5kZXgiLCJjb3VudCIsImZpcnN0IiwibGFzdCIsImV2ZW4iLCJvZGQiLCJWZSIsIl92aWV3Q29udGFpbmVyIiwiX3RlbXBsYXRlIiwiX2RpZmZlcnMiLCJfbmdGb3JPZiIsIl9uZ0Zvck9mRGlydHkiLCJuZ0ZvclRyYWNrQnkiLCJfdHJhY2tCeUZuIiwiX2RpZmZlciIsIm5nRm9yVGVtcGxhdGUiLCJmaW5kIiwiY3JlYXRlIiwiZGlmZiIsIl9hcHBseUNoYW5nZXMiLCJmb3JFYWNoT3BlcmF0aW9uIiwicHJldmlvdXNJbmRleCIsImNyZWF0ZUVtYmVkZGVkVmlldyIsIml0ZW0iLCJyZW1vdmUiLCJtb3ZlIiwiTWUiLCJjb250ZXh0IiwiZm9yRWFjaElkZW50aXR5Q2hhbmdlIiwiY3VycmVudEluZGV4IiwibmdUZW1wbGF0ZUNvbnRleHRHdWFyZCIsImllIiwidGUiLCJBZSIsImZ0IiwiX2NvbnRleHQiLCJLIiwiX3RoZW5UZW1wbGF0ZVJlZiIsIl9lbHNlVGVtcGxhdGVSZWYiLCJfdGhlblZpZXdSZWYiLCJfZWxzZVZpZXdSZWYiLCJuZ0lmIiwiX3VwZGF0ZVZpZXciLCJuZ0lmVGhlbiIsIlRlIiwibmdJZkVsc2UiLCJjbGVhciIsIm5nSWZVc2VJZlR5cGVHdWFyZCIsIm5nVGVtcGxhdGVHdWFyZF9uZ0lmIiwiR2UiLCJsZSIsImNyZWF0ZVN1YnNjcmlwdGlvbiIsInNlIiwiZGlzcG9zZSIsImZlIiwidGhlbiIsImh0IiwiZ3QiLCJEdCIsIl9yZWYiLCJfbGF0ZXN0VmFsdWUiLCJtYXJrRm9yQ2hlY2tPblZhbHVlVXBkYXRlIiwiX3N1YnNjcmlwdGlvbiIsIl9vYmoiLCJfc3RyYXRlZ3kiLCJhcHBsaWNhdGlvbkVycm9ySGFuZGxlciIsIkNlIiwiX2Rpc3Bvc2UiLCJ0cmFuc2Zvcm0iLCJfc3Vic2NyaWJlIiwiX3NlbGVjdFN0cmF0ZWd5IiwiX3VwZGF0ZUxhdGVzdFZhbHVlIiwiRmUiLCJFZSIsIm1hcmtGb3JDaGVjayIsIm9lIiwiybVwaXBlIiwicmUiLCJuYW1lIiwicHVyZSIsInB0IiwiSGUiLCJXZSIsIm10IiwibG9jYWxlIiwiZGVmYXVsdFRpbWV6b25lIiwiZGVmYXVsdE9wdGlvbnMiLCJkYXRlRm9ybWF0IiwidGltZXpvbmUiLCJtZXNzYWdlIiwid2UiLCJDdCIsIsm1bW9kIiwieWUiLCLJtWluaiIsIm1lIiwiRnQiLCJ1aSIsImNpIiwiaGUiLCJ3aW5kb3ciLCJkb2N1bWVudCIsIm9mZnNldCIsInNldE9mZnNldCIsImdldFNjcm9sbFBvc2l0aW9uIiwic2Nyb2xsWCIsInNjcm9sbFkiLCJzY3JvbGxUb1Bvc2l0aW9uIiwic2Nyb2xsVG8iLCJKIiwicSIsImxlZnQiLCJ0b3AiLCJzY3JvbGxUb0FuY2hvciIsIkV0Iiwic2Nyb2xsVG9FbGVtZW50IiwiZm9jdXMiLCJzZXRIaXN0b3J5U2Nyb2xsUmVzdG9yYXRpb24iLCJoaXN0b3J5Iiwic2Nyb2xsUmVzdG9yYXRpb24iLCJjb25zb2xlIiwid2FybiIsIlEiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJwYWdlWE9mZnNldCIsInBhZ2VZT2Zmc2V0IiwiZ2V0RWxlbWVudEJ5SWQiLCJnZXRFbGVtZW50c0J5TmFtZSIsImNyZWF0ZVRyZWVXYWxrZXIiLCJib2R5IiwiYXR0YWNoU2hhZG93IiwiTm9kZUZpbHRlciIsIlNIT1dfRUxFTUVOVCIsImN1cnJlbnROb2RlIiwic2hhZG93Um9vdCIsInF1ZXJ5U2VsZWN0b3IiLCJuZXh0Tm9kZSJdLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9AYW5ndWxhci9jb21tb24vZmVzbTIwMjIvX2xvY2F0aW9uLWNodW5rLm1qcyIsIm5vZGVfbW9kdWxlcy9AYW5ndWxhci9jb21tb24vZmVzbTIwMjIvX2NvbW1vbl9tb2R1bGUtY2h1bmsubWpzIiwibm9kZV9tb2R1bGVzL0Bhbmd1bGFyL2NvbW1vbi9mZXNtMjAyMi9jb21tb24ubWpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2UgQW5ndWxhciB2MjEuMi40XG4gKiAoYykgMjAxMC0yMDI2IEdvb2dsZSBMTEMuIGh0dHBzOi8vYW5ndWxhci5kZXYvXG4gKiBMaWNlbnNlOiBNSVRcbiAqL1xuXG5pbXBvcnQgKiBhcyBpMCBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSwgSW5qZWN0aW9uVG9rZW4sIERPQ1VNRU5ULCBPcHRpb25hbCwgSW5qZWN0LCDJtcm1aW5qZWN0IGFzIF9faW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBQbGF0Zm9ybUxvY2F0aW9uIH0gZnJvbSAnLi9fcGxhdGZvcm1fbG9jYXRpb24tY2h1bmsubWpzJztcbmZ1bmN0aW9uIGpvaW5XaXRoU2xhc2goc3RhcnQsIGVuZCkge1xuICBpZiAoIXN0YXJ0KSByZXR1cm4gZW5kO1xuICBpZiAoIWVuZCkgcmV0dXJuIHN0YXJ0O1xuICBpZiAoc3RhcnQuZW5kc1dpdGgoJy8nKSkge1xuICAgIHJldHVybiBlbmQuc3RhcnRzV2l0aCgnLycpID8gc3RhcnQgKyBlbmQuc2xpY2UoMSkgOiBzdGFydCArIGVuZDtcbiAgfVxuICByZXR1cm4gZW5kLnN0YXJ0c1dpdGgoJy8nKSA/IHN0YXJ0ICsgZW5kIDogYCR7c3RhcnR9LyR7ZW5kfWA7XG59XG5mdW5jdGlvbiBzdHJpcFRyYWlsaW5nU2xhc2godXJsKSB7XG4gIGNvbnN0IHBhdGhFbmRJZHggPSB1cmwuc2VhcmNoKC8jfFxcP3wkLyk7XG4gIHJldHVybiB1cmxbcGF0aEVuZElkeCAtIDFdID09PSAnLycgPyB1cmwuc2xpY2UoMCwgcGF0aEVuZElkeCAtIDEpICsgdXJsLnNsaWNlKHBhdGhFbmRJZHgpIDogdXJsO1xufVxuZnVuY3Rpb24gbm9ybWFsaXplUXVlcnlQYXJhbXMocGFyYW1zKSB7XG4gIHJldHVybiBwYXJhbXMgJiYgcGFyYW1zWzBdICE9PSAnPycgPyBgPyR7cGFyYW1zfWAgOiBwYXJhbXM7XG59XG5sZXQgTG9jYXRpb25TdHJhdGVneSA9IC8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICBjbGFzcyBMb2NhdGlvblN0cmF0ZWd5IHtcbiAgICBoaXN0b3J5R28ocmVsYXRpdmVQb3NpdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKG5nRGV2TW9kZSA/ICdOb3QgaW1wbGVtZW50ZWQnIDogJycpO1xuICAgIH1cbiAgICBzdGF0aWMgybVmYWMgPSBmdW5jdGlvbiBMb2NhdGlvblN0cmF0ZWd5X0ZhY3RvcnkoX19uZ0ZhY3RvcnlUeXBlX18pIHtcbiAgICAgIHJldHVybiBuZXcgKF9fbmdGYWN0b3J5VHlwZV9fIHx8IExvY2F0aW9uU3RyYXRlZ3kpKCk7XG4gICAgfTtcbiAgICBzdGF0aWMgybVwcm92ID0gLyogQF9fUFVSRV9fICovaTAuybXJtWRlZmluZUluamVjdGFibGUoe1xuICAgICAgdG9rZW46IExvY2F0aW9uU3RyYXRlZ3ksXG4gICAgICBmYWN0b3J5OiAoKSA9PiAoKCkgPT4gaW5qZWN0KFBhdGhMb2NhdGlvblN0cmF0ZWd5KSkoKSxcbiAgICAgIHByb3ZpZGVkSW46ICdyb290J1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBMb2NhdGlvblN0cmF0ZWd5O1xufSkoKTtcbi8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICAodHlwZW9mIG5nRGV2TW9kZSA9PT0gXCJ1bmRlZmluZWRcIiB8fCBuZ0Rldk1vZGUpICYmIHZvaWQgMDtcbn0pKCk7XG5jb25zdCBBUFBfQkFTRV9IUkVGID0gLyojX19QVVJFX18qL25ldyBJbmplY3Rpb25Ub2tlbih0eXBlb2YgbmdEZXZNb2RlICE9PSAndW5kZWZpbmVkJyAmJiBuZ0Rldk1vZGUgPyAnYXBwQmFzZUhyZWYnIDogJycpO1xubGV0IFBhdGhMb2NhdGlvblN0cmF0ZWd5ID0gLyojX19QVVJFX18qLygoKSA9PiB7XG4gIGNsYXNzIFBhdGhMb2NhdGlvblN0cmF0ZWd5IGV4dGVuZHMgTG9jYXRpb25TdHJhdGVneSB7XG4gICAgX3BsYXRmb3JtTG9jYXRpb247XG4gICAgX2Jhc2VIcmVmO1xuICAgIF9yZW1vdmVMaXN0ZW5lckZucyA9IFtdO1xuICAgIGNvbnN0cnVjdG9yKF9wbGF0Zm9ybUxvY2F0aW9uLCBocmVmKSB7XG4gICAgICBzdXBlcigpO1xuICAgICAgdGhpcy5fcGxhdGZvcm1Mb2NhdGlvbiA9IF9wbGF0Zm9ybUxvY2F0aW9uO1xuICAgICAgdGhpcy5fYmFzZUhyZWYgPSBocmVmID8/IHRoaXMuX3BsYXRmb3JtTG9jYXRpb24uZ2V0QmFzZUhyZWZGcm9tRE9NKCkgPz8gaW5qZWN0KERPQ1VNRU5UKS5sb2NhdGlvbj8ub3JpZ2luID8/ICcnO1xuICAgIH1cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgIHdoaWxlICh0aGlzLl9yZW1vdmVMaXN0ZW5lckZucy5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5fcmVtb3ZlTGlzdGVuZXJGbnMucG9wKCkoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgb25Qb3BTdGF0ZShmbikge1xuICAgICAgdGhpcy5fcmVtb3ZlTGlzdGVuZXJGbnMucHVzaCh0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLm9uUG9wU3RhdGUoZm4pLCB0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLm9uSGFzaENoYW5nZShmbikpO1xuICAgIH1cbiAgICBnZXRCYXNlSHJlZigpIHtcbiAgICAgIHJldHVybiB0aGlzLl9iYXNlSHJlZjtcbiAgICB9XG4gICAgcHJlcGFyZUV4dGVybmFsVXJsKGludGVybmFsKSB7XG4gICAgICByZXR1cm4gam9pbldpdGhTbGFzaCh0aGlzLl9iYXNlSHJlZiwgaW50ZXJuYWwpO1xuICAgIH1cbiAgICBwYXRoKGluY2x1ZGVIYXNoID0gZmFsc2UpIHtcbiAgICAgIGNvbnN0IHBhdGhuYW1lID0gdGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5wYXRobmFtZSArIG5vcm1hbGl6ZVF1ZXJ5UGFyYW1zKHRoaXMuX3BsYXRmb3JtTG9jYXRpb24uc2VhcmNoKTtcbiAgICAgIGNvbnN0IGhhc2ggPSB0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLmhhc2g7XG4gICAgICByZXR1cm4gaGFzaCAmJiBpbmNsdWRlSGFzaCA/IGAke3BhdGhuYW1lfSR7aGFzaH1gIDogcGF0aG5hbWU7XG4gICAgfVxuICAgIHB1c2hTdGF0ZShzdGF0ZSwgdGl0bGUsIHVybCwgcXVlcnlQYXJhbXMpIHtcbiAgICAgIGNvbnN0IGV4dGVybmFsVXJsID0gdGhpcy5wcmVwYXJlRXh0ZXJuYWxVcmwodXJsICsgbm9ybWFsaXplUXVlcnlQYXJhbXMocXVlcnlQYXJhbXMpKTtcbiAgICAgIHRoaXMuX3BsYXRmb3JtTG9jYXRpb24ucHVzaFN0YXRlKHN0YXRlLCB0aXRsZSwgZXh0ZXJuYWxVcmwpO1xuICAgIH1cbiAgICByZXBsYWNlU3RhdGUoc3RhdGUsIHRpdGxlLCB1cmwsIHF1ZXJ5UGFyYW1zKSB7XG4gICAgICBjb25zdCBleHRlcm5hbFVybCA9IHRoaXMucHJlcGFyZUV4dGVybmFsVXJsKHVybCArIG5vcm1hbGl6ZVF1ZXJ5UGFyYW1zKHF1ZXJ5UGFyYW1zKSk7XG4gICAgICB0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLnJlcGxhY2VTdGF0ZShzdGF0ZSwgdGl0bGUsIGV4dGVybmFsVXJsKTtcbiAgICB9XG4gICAgZm9yd2FyZCgpIHtcbiAgICAgIHRoaXMuX3BsYXRmb3JtTG9jYXRpb24uZm9yd2FyZCgpO1xuICAgIH1cbiAgICBiYWNrKCkge1xuICAgICAgdGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5iYWNrKCk7XG4gICAgfVxuICAgIGdldFN0YXRlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3BsYXRmb3JtTG9jYXRpb24uZ2V0U3RhdGUoKTtcbiAgICB9XG4gICAgaGlzdG9yeUdvKHJlbGF0aXZlUG9zaXRpb24gPSAwKSB7XG4gICAgICB0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLmhpc3RvcnlHbz8uKHJlbGF0aXZlUG9zaXRpb24pO1xuICAgIH1cbiAgICBzdGF0aWMgybVmYWMgPSBmdW5jdGlvbiBQYXRoTG9jYXRpb25TdHJhdGVneV9GYWN0b3J5KF9fbmdGYWN0b3J5VHlwZV9fKSB7XG4gICAgICByZXR1cm4gbmV3IChfX25nRmFjdG9yeVR5cGVfXyB8fCBQYXRoTG9jYXRpb25TdHJhdGVneSkoaTAuybXJtWluamVjdChQbGF0Zm9ybUxvY2F0aW9uKSwgaTAuybXJtWluamVjdChBUFBfQkFTRV9IUkVGLCA4KSk7XG4gICAgfTtcbiAgICBzdGF0aWMgybVwcm92ID0gLyogQF9fUFVSRV9fICovaTAuybXJtWRlZmluZUluamVjdGFibGUoe1xuICAgICAgdG9rZW46IFBhdGhMb2NhdGlvblN0cmF0ZWd5LFxuICAgICAgZmFjdG9yeTogUGF0aExvY2F0aW9uU3RyYXRlZ3kuybVmYWMsXG4gICAgICBwcm92aWRlZEluOiAncm9vdCdcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gUGF0aExvY2F0aW9uU3RyYXRlZ3k7XG59KSgpO1xuLyojX19QVVJFX18qLygoKSA9PiB7XG4gICh0eXBlb2YgbmdEZXZNb2RlID09PSBcInVuZGVmaW5lZFwiIHx8IG5nRGV2TW9kZSkgJiYgdm9pZCAwO1xufSkoKTtcbmxldCBOb1RyYWlsaW5nU2xhc2hQYXRoTG9jYXRpb25TdHJhdGVneSA9IC8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICBjbGFzcyBOb1RyYWlsaW5nU2xhc2hQYXRoTG9jYXRpb25TdHJhdGVneSBleHRlbmRzIFBhdGhMb2NhdGlvblN0cmF0ZWd5IHtcbiAgICBwcmVwYXJlRXh0ZXJuYWxVcmwoaW50ZXJuYWwpIHtcbiAgICAgIGNvbnN0IHBhdGggPSBleHRyYWN0VXJsUGF0aChpbnRlcm5hbCk7XG4gICAgICBpZiAocGF0aC5lbmRzV2l0aCgnLycpICYmIHBhdGgubGVuZ3RoID4gMSkge1xuICAgICAgICBpbnRlcm5hbCA9IHBhdGguc2xpY2UoMCwgLTEpICsgaW50ZXJuYWwuc2xpY2UocGF0aC5sZW5ndGgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHN1cGVyLnByZXBhcmVFeHRlcm5hbFVybChpbnRlcm5hbCk7XG4gICAgfVxuICAgIHN0YXRpYyDJtWZhYyA9IC8qIEBfX1BVUkVfXyAqLygoKSA9PiB7XG4gICAgICBsZXQgybVOb1RyYWlsaW5nU2xhc2hQYXRoTG9jYXRpb25TdHJhdGVneV9CYXNlRmFjdG9yeTtcbiAgICAgIHJldHVybiBmdW5jdGlvbiBOb1RyYWlsaW5nU2xhc2hQYXRoTG9jYXRpb25TdHJhdGVneV9GYWN0b3J5KF9fbmdGYWN0b3J5VHlwZV9fKSB7XG4gICAgICAgIHJldHVybiAoybVOb1RyYWlsaW5nU2xhc2hQYXRoTG9jYXRpb25TdHJhdGVneV9CYXNlRmFjdG9yeSB8fCAoybVOb1RyYWlsaW5nU2xhc2hQYXRoTG9jYXRpb25TdHJhdGVneV9CYXNlRmFjdG9yeSA9IGkwLsm1ybVnZXRJbmhlcml0ZWRGYWN0b3J5KE5vVHJhaWxpbmdTbGFzaFBhdGhMb2NhdGlvblN0cmF0ZWd5KSkpKF9fbmdGYWN0b3J5VHlwZV9fIHx8IE5vVHJhaWxpbmdTbGFzaFBhdGhMb2NhdGlvblN0cmF0ZWd5KTtcbiAgICAgIH07XG4gICAgfSkoKTtcbiAgICBzdGF0aWMgybVwcm92ID0gLyogQF9fUFVSRV9fICovaTAuybXJtWRlZmluZUluamVjdGFibGUoe1xuICAgICAgdG9rZW46IE5vVHJhaWxpbmdTbGFzaFBhdGhMb2NhdGlvblN0cmF0ZWd5LFxuICAgICAgZmFjdG9yeTogTm9UcmFpbGluZ1NsYXNoUGF0aExvY2F0aW9uU3RyYXRlZ3kuybVmYWMsXG4gICAgICBwcm92aWRlZEluOiAncm9vdCdcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gTm9UcmFpbGluZ1NsYXNoUGF0aExvY2F0aW9uU3RyYXRlZ3k7XG59KSgpO1xuLyojX19QVVJFX18qLygoKSA9PiB7XG4gICh0eXBlb2YgbmdEZXZNb2RlID09PSBcInVuZGVmaW5lZFwiIHx8IG5nRGV2TW9kZSkgJiYgdm9pZCAwO1xufSkoKTtcbmxldCBUcmFpbGluZ1NsYXNoUGF0aExvY2F0aW9uU3RyYXRlZ3kgPSAvKiNfX1BVUkVfXyovKCgpID0+IHtcbiAgY2xhc3MgVHJhaWxpbmdTbGFzaFBhdGhMb2NhdGlvblN0cmF0ZWd5IGV4dGVuZHMgUGF0aExvY2F0aW9uU3RyYXRlZ3kge1xuICAgIHByZXBhcmVFeHRlcm5hbFVybChpbnRlcm5hbCkge1xuICAgICAgY29uc3QgcGF0aCA9IGV4dHJhY3RVcmxQYXRoKGludGVybmFsKTtcbiAgICAgIGlmICghcGF0aC5lbmRzV2l0aCgnLycpKSB7XG4gICAgICAgIGludGVybmFsID0gcGF0aCArICcvJyArIGludGVybmFsLnNsaWNlKHBhdGgubGVuZ3RoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzdXBlci5wcmVwYXJlRXh0ZXJuYWxVcmwoaW50ZXJuYWwpO1xuICAgIH1cbiAgICBzdGF0aWMgybVmYWMgPSAvKiBAX19QVVJFX18gKi8oKCkgPT4ge1xuICAgICAgbGV0IMm1VHJhaWxpbmdTbGFzaFBhdGhMb2NhdGlvblN0cmF0ZWd5X0Jhc2VGYWN0b3J5O1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIFRyYWlsaW5nU2xhc2hQYXRoTG9jYXRpb25TdHJhdGVneV9GYWN0b3J5KF9fbmdGYWN0b3J5VHlwZV9fKSB7XG4gICAgICAgIHJldHVybiAoybVUcmFpbGluZ1NsYXNoUGF0aExvY2F0aW9uU3RyYXRlZ3lfQmFzZUZhY3RvcnkgfHwgKMm1VHJhaWxpbmdTbGFzaFBhdGhMb2NhdGlvblN0cmF0ZWd5X0Jhc2VGYWN0b3J5ID0gaTAuybXJtWdldEluaGVyaXRlZEZhY3RvcnkoVHJhaWxpbmdTbGFzaFBhdGhMb2NhdGlvblN0cmF0ZWd5KSkpKF9fbmdGYWN0b3J5VHlwZV9fIHx8IFRyYWlsaW5nU2xhc2hQYXRoTG9jYXRpb25TdHJhdGVneSk7XG4gICAgICB9O1xuICAgIH0pKCk7XG4gICAgc3RhdGljIMm1cHJvdiA9IC8qIEBfX1BVUkVfXyAqL2kwLsm1ybVkZWZpbmVJbmplY3RhYmxlKHtcbiAgICAgIHRva2VuOiBUcmFpbGluZ1NsYXNoUGF0aExvY2F0aW9uU3RyYXRlZ3ksXG4gICAgICBmYWN0b3J5OiBUcmFpbGluZ1NsYXNoUGF0aExvY2F0aW9uU3RyYXRlZ3kuybVmYWMsXG4gICAgICBwcm92aWRlZEluOiAncm9vdCdcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gVHJhaWxpbmdTbGFzaFBhdGhMb2NhdGlvblN0cmF0ZWd5O1xufSkoKTtcbi8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICAodHlwZW9mIG5nRGV2TW9kZSA9PT0gXCJ1bmRlZmluZWRcIiB8fCBuZ0Rldk1vZGUpICYmIHZvaWQgMDtcbn0pKCk7XG5mdW5jdGlvbiBleHRyYWN0VXJsUGF0aCh1cmwpIHtcbiAgY29uc3QgcXVlc3Rpb25NYXJrT3JIYXNoSW5kZXggPSB1cmwuc2VhcmNoKC9bPyNdLyk7XG4gIGNvbnN0IHBhdGhFbmQgPSBxdWVzdGlvbk1hcmtPckhhc2hJbmRleCA+IC0xID8gcXVlc3Rpb25NYXJrT3JIYXNoSW5kZXggOiB1cmwubGVuZ3RoO1xuICByZXR1cm4gdXJsLnNsaWNlKDAsIHBhdGhFbmQpO1xufVxubGV0IExvY2F0aW9uID0gLyojX19QVVJFX18qLygoKSA9PiB7XG4gIGNsYXNzIExvY2F0aW9uIHtcbiAgICBfc3ViamVjdCA9IG5ldyBTdWJqZWN0KCk7XG4gICAgX2Jhc2VQYXRoO1xuICAgIF9sb2NhdGlvblN0cmF0ZWd5O1xuICAgIF91cmxDaGFuZ2VMaXN0ZW5lcnMgPSBbXTtcbiAgICBfdXJsQ2hhbmdlU3Vic2NyaXB0aW9uID0gbnVsbDtcbiAgICBjb25zdHJ1Y3Rvcihsb2NhdGlvblN0cmF0ZWd5KSB7XG4gICAgICB0aGlzLl9sb2NhdGlvblN0cmF0ZWd5ID0gbG9jYXRpb25TdHJhdGVneTtcbiAgICAgIGNvbnN0IGJhc2VIcmVmID0gdGhpcy5fbG9jYXRpb25TdHJhdGVneS5nZXRCYXNlSHJlZigpO1xuICAgICAgdGhpcy5fYmFzZVBhdGggPSBfc3RyaXBPcmlnaW4oc3RyaXBUcmFpbGluZ1NsYXNoKF9zdHJpcEluZGV4SHRtbChiYXNlSHJlZikpKTtcbiAgICAgIHRoaXMuX2xvY2F0aW9uU3RyYXRlZ3kub25Qb3BTdGF0ZShldiA9PiB7XG4gICAgICAgIHRoaXMuX3N1YmplY3QubmV4dCh7XG4gICAgICAgICAgJ3VybCc6IHRoaXMucGF0aCh0cnVlKSxcbiAgICAgICAgICAncG9wJzogdHJ1ZSxcbiAgICAgICAgICAnc3RhdGUnOiBldi5zdGF0ZSxcbiAgICAgICAgICAndHlwZSc6IGV2LnR5cGVcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICB0aGlzLl91cmxDaGFuZ2VTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICB0aGlzLl91cmxDaGFuZ2VMaXN0ZW5lcnMgPSBbXTtcbiAgICB9XG4gICAgcGF0aChpbmNsdWRlSGFzaCA9IGZhbHNlKSB7XG4gICAgICByZXR1cm4gdGhpcy5ub3JtYWxpemUodGhpcy5fbG9jYXRpb25TdHJhdGVneS5wYXRoKGluY2x1ZGVIYXNoKSk7XG4gICAgfVxuICAgIGdldFN0YXRlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2xvY2F0aW9uU3RyYXRlZ3kuZ2V0U3RhdGUoKTtcbiAgICB9XG4gICAgaXNDdXJyZW50UGF0aEVxdWFsVG8ocGF0aCwgcXVlcnkgPSAnJykge1xuICAgICAgcmV0dXJuIHRoaXMucGF0aCgpID09IHRoaXMubm9ybWFsaXplKHBhdGggKyBub3JtYWxpemVRdWVyeVBhcmFtcyhxdWVyeSkpO1xuICAgIH1cbiAgICBub3JtYWxpemUodXJsKSB7XG4gICAgICByZXR1cm4gTG9jYXRpb24uc3RyaXBUcmFpbGluZ1NsYXNoKF9zdHJpcEJhc2VQYXRoKHRoaXMuX2Jhc2VQYXRoLCBfc3RyaXBJbmRleEh0bWwodXJsKSkpO1xuICAgIH1cbiAgICBwcmVwYXJlRXh0ZXJuYWxVcmwodXJsKSB7XG4gICAgICBpZiAodXJsICYmIHVybFswXSAhPT0gJy8nKSB7XG4gICAgICAgIHVybCA9ICcvJyArIHVybDtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLl9sb2NhdGlvblN0cmF0ZWd5LnByZXBhcmVFeHRlcm5hbFVybCh1cmwpO1xuICAgIH1cbiAgICBnbyhwYXRoLCBxdWVyeSA9ICcnLCBzdGF0ZSA9IG51bGwpIHtcbiAgICAgIHRoaXMuX2xvY2F0aW9uU3RyYXRlZ3kucHVzaFN0YXRlKHN0YXRlLCAnJywgcGF0aCwgcXVlcnkpO1xuICAgICAgdGhpcy5fbm90aWZ5VXJsQ2hhbmdlTGlzdGVuZXJzKHRoaXMucHJlcGFyZUV4dGVybmFsVXJsKHBhdGggKyBub3JtYWxpemVRdWVyeVBhcmFtcyhxdWVyeSkpLCBzdGF0ZSk7XG4gICAgfVxuICAgIHJlcGxhY2VTdGF0ZShwYXRoLCBxdWVyeSA9ICcnLCBzdGF0ZSA9IG51bGwpIHtcbiAgICAgIHRoaXMuX2xvY2F0aW9uU3RyYXRlZ3kucmVwbGFjZVN0YXRlKHN0YXRlLCAnJywgcGF0aCwgcXVlcnkpO1xuICAgICAgdGhpcy5fbm90aWZ5VXJsQ2hhbmdlTGlzdGVuZXJzKHRoaXMucHJlcGFyZUV4dGVybmFsVXJsKHBhdGggKyBub3JtYWxpemVRdWVyeVBhcmFtcyhxdWVyeSkpLCBzdGF0ZSk7XG4gICAgfVxuICAgIGZvcndhcmQoKSB7XG4gICAgICB0aGlzLl9sb2NhdGlvblN0cmF0ZWd5LmZvcndhcmQoKTtcbiAgICB9XG4gICAgYmFjaygpIHtcbiAgICAgIHRoaXMuX2xvY2F0aW9uU3RyYXRlZ3kuYmFjaygpO1xuICAgIH1cbiAgICBoaXN0b3J5R28ocmVsYXRpdmVQb3NpdGlvbiA9IDApIHtcbiAgICAgIHRoaXMuX2xvY2F0aW9uU3RyYXRlZ3kuaGlzdG9yeUdvPy4ocmVsYXRpdmVQb3NpdGlvbik7XG4gICAgfVxuICAgIG9uVXJsQ2hhbmdlKGZuKSB7XG4gICAgICB0aGlzLl91cmxDaGFuZ2VMaXN0ZW5lcnMucHVzaChmbik7XG4gICAgICB0aGlzLl91cmxDaGFuZ2VTdWJzY3JpcHRpb24gPz89IHRoaXMuc3Vic2NyaWJlKHYgPT4ge1xuICAgICAgICB0aGlzLl9ub3RpZnlVcmxDaGFuZ2VMaXN0ZW5lcnModi51cmwsIHYuc3RhdGUpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICBjb25zdCBmbkluZGV4ID0gdGhpcy5fdXJsQ2hhbmdlTGlzdGVuZXJzLmluZGV4T2YoZm4pO1xuICAgICAgICB0aGlzLl91cmxDaGFuZ2VMaXN0ZW5lcnMuc3BsaWNlKGZuSW5kZXgsIDEpO1xuICAgICAgICBpZiAodGhpcy5fdXJsQ2hhbmdlTGlzdGVuZXJzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHRoaXMuX3VybENoYW5nZVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICB0aGlzLl91cmxDaGFuZ2VTdWJzY3JpcHRpb24gPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgICBfbm90aWZ5VXJsQ2hhbmdlTGlzdGVuZXJzKHVybCA9ICcnLCBzdGF0ZSkge1xuICAgICAgdGhpcy5fdXJsQ2hhbmdlTGlzdGVuZXJzLmZvckVhY2goZm4gPT4gZm4odXJsLCBzdGF0ZSkpO1xuICAgIH1cbiAgICBzdWJzY3JpYmUob25OZXh0LCBvblRocm93LCBvblJldHVybikge1xuICAgICAgcmV0dXJuIHRoaXMuX3N1YmplY3Quc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogb25OZXh0LFxuICAgICAgICBlcnJvcjogb25UaHJvdyA/PyB1bmRlZmluZWQsXG4gICAgICAgIGNvbXBsZXRlOiBvblJldHVybiA/PyB1bmRlZmluZWRcbiAgICAgIH0pO1xuICAgIH1cbiAgICBzdGF0aWMgbm9ybWFsaXplUXVlcnlQYXJhbXMgPSBub3JtYWxpemVRdWVyeVBhcmFtcztcbiAgICBzdGF0aWMgam9pbldpdGhTbGFzaCA9IGpvaW5XaXRoU2xhc2g7XG4gICAgc3RhdGljIHN0cmlwVHJhaWxpbmdTbGFzaCA9IHN0cmlwVHJhaWxpbmdTbGFzaDtcbiAgICBzdGF0aWMgybVmYWMgPSBmdW5jdGlvbiBMb2NhdGlvbl9GYWN0b3J5KF9fbmdGYWN0b3J5VHlwZV9fKSB7XG4gICAgICByZXR1cm4gbmV3IChfX25nRmFjdG9yeVR5cGVfXyB8fCBMb2NhdGlvbikoaTAuybXJtWluamVjdChMb2NhdGlvblN0cmF0ZWd5KSk7XG4gICAgfTtcbiAgICBzdGF0aWMgybVwcm92ID0gLyogQF9fUFVSRV9fICovaTAuybXJtWRlZmluZUluamVjdGFibGUoe1xuICAgICAgdG9rZW46IExvY2F0aW9uLFxuICAgICAgZmFjdG9yeTogKCkgPT4gY3JlYXRlTG9jYXRpb24oKSxcbiAgICAgIHByb3ZpZGVkSW46ICdyb290J1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBMb2NhdGlvbjtcbn0pKCk7XG4vKiNfX1BVUkVfXyovKCgpID0+IHtcbiAgKHR5cGVvZiBuZ0Rldk1vZGUgPT09IFwidW5kZWZpbmVkXCIgfHwgbmdEZXZNb2RlKSAmJiB2b2lkIDA7XG59KSgpO1xuZnVuY3Rpb24gY3JlYXRlTG9jYXRpb24oKSB7XG4gIHJldHVybiBuZXcgTG9jYXRpb24oX19pbmplY3QoTG9jYXRpb25TdHJhdGVneSkpO1xufVxuZnVuY3Rpb24gX3N0cmlwQmFzZVBhdGgoYmFzZVBhdGgsIHVybCkge1xuICBpZiAoIWJhc2VQYXRoIHx8ICF1cmwuc3RhcnRzV2l0aChiYXNlUGF0aCkpIHtcbiAgICByZXR1cm4gdXJsO1xuICB9XG4gIGNvbnN0IHN0cmlwcGVkVXJsID0gdXJsLnN1YnN0cmluZyhiYXNlUGF0aC5sZW5ndGgpO1xuICBpZiAoc3RyaXBwZWRVcmwgPT09ICcnIHx8IFsnLycsICc7JywgJz8nLCAnIyddLmluY2x1ZGVzKHN0cmlwcGVkVXJsWzBdKSkge1xuICAgIHJldHVybiBzdHJpcHBlZFVybDtcbiAgfVxuICByZXR1cm4gdXJsO1xufVxuZnVuY3Rpb24gX3N0cmlwSW5kZXhIdG1sKHVybCkge1xuICByZXR1cm4gdXJsLnJlcGxhY2UoL1xcL2luZGV4Lmh0bWwkLywgJycpO1xufVxuZnVuY3Rpb24gX3N0cmlwT3JpZ2luKGJhc2VIcmVmKSB7XG4gIGNvbnN0IGlzQWJzb2x1dGVVcmwgPSBuZXcgUmVnRXhwKCdeKGh0dHBzPzopPy8vJykudGVzdChiYXNlSHJlZik7XG4gIGlmIChpc0Fic29sdXRlVXJsKSB7XG4gICAgY29uc3QgWywgcGF0aG5hbWVdID0gYmFzZUhyZWYuc3BsaXQoL1xcL1xcL1teXFwvXSsvKTtcbiAgICByZXR1cm4gcGF0aG5hbWU7XG4gIH1cbiAgcmV0dXJuIGJhc2VIcmVmO1xufVxuZXhwb3J0IHsgQVBQX0JBU0VfSFJFRiwgTG9jYXRpb24sIExvY2F0aW9uU3RyYXRlZ3ksIE5vVHJhaWxpbmdTbGFzaFBhdGhMb2NhdGlvblN0cmF0ZWd5LCBQYXRoTG9jYXRpb25TdHJhdGVneSwgVHJhaWxpbmdTbGFzaFBhdGhMb2NhdGlvblN0cmF0ZWd5LCBqb2luV2l0aFNsYXNoLCBub3JtYWxpemVRdWVyeVBhcmFtcyB9O1xuIiwiLyoqXG4gKiBAbGljZW5zZSBBbmd1bGFyIHYyMS4yLjRcbiAqIChjKSAyMDEwLTIwMjYgR29vZ2xlIExMQy4gaHR0cHM6Ly9hbmd1bGFyLmRldi9cbiAqIExpY2Vuc2U6IE1JVFxuICovXG5cbmltcG9ydCAqIGFzIGkwIGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSwgT3B0aW9uYWwsIEluamVjdCwgybVmaW5kTG9jYWxlRGF0YSBhcyBfZmluZExvY2FsZURhdGEsIMm1TG9jYWxlRGF0YUluZGV4IGFzIF9Mb2NhbGVEYXRhSW5kZXgsIMm1Z2V0TG9jYWxlQ3VycmVuY3lDb2RlIGFzIF9nZXRMb2NhbGVDdXJyZW5jeUNvZGUsIMm1Z2V0TG9jYWxlUGx1cmFsQ2FzZSBhcyBfZ2V0TG9jYWxlUGx1cmFsQ2FzZSwgybVSdW50aW1lRXJyb3IgYXMgX1J1bnRpbWVFcnJvciwgybVmb3JtYXRSdW50aW1lRXJyb3IgYXMgX2Zvcm1hdFJ1bnRpbWVFcnJvciwgaW5qZWN0LCBMT0NBTEVfSUQsIMm1c3RyaW5naWZ5IGFzIF9zdHJpbmdpZnksIERpcmVjdGl2ZSwgSW5wdXQsIGNyZWF0ZU5nTW9kdWxlLCBOZ01vZHVsZVJlZiwgSG9zdCwgQXR0cmlidXRlLCBSZW5kZXJlclN0eWxlRmxhZ3MyLCBJbmplY3RvciwgaXNTaWduYWwsIMm1SU5URVJOQUxfQVBQTElDQVRJT05fRVJST1JfSEFORExFUiBhcyBfSU5URVJOQUxfQVBQTElDQVRJT05fRVJST1JfSEFORExFUiwgybVpc1Byb21pc2UgYXMgX2lzUHJvbWlzZSwgybVpc1N1YnNjcmliYWJsZSBhcyBfaXNTdWJzY3JpYmFibGUsIFBpcGUsIHVudHJhY2tlZCwgSW5qZWN0aW9uVG9rZW4sIERFRkFVTFRfQ1VSUkVOQ1lfQ09ERSwgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IExvY2F0aW9uU3RyYXRlZ3ksIGpvaW5XaXRoU2xhc2gsIG5vcm1hbGl6ZVF1ZXJ5UGFyYW1zLCBBUFBfQkFTRV9IUkVGIH0gZnJvbSAnLi9fbG9jYXRpb24tY2h1bmsubWpzJztcbmltcG9ydCB7IFBsYXRmb3JtTG9jYXRpb24gfSBmcm9tICcuL19wbGF0Zm9ybV9sb2NhdGlvbi1jaHVuay5tanMnO1xubGV0IEhhc2hMb2NhdGlvblN0cmF0ZWd5ID0gLyojX19QVVJFX18qLygoKSA9PiB7XG4gIGNsYXNzIEhhc2hMb2NhdGlvblN0cmF0ZWd5IGV4dGVuZHMgTG9jYXRpb25TdHJhdGVneSB7XG4gICAgX3BsYXRmb3JtTG9jYXRpb247XG4gICAgX2Jhc2VIcmVmID0gJyc7XG4gICAgX3JlbW92ZUxpc3RlbmVyRm5zID0gW107XG4gICAgY29uc3RydWN0b3IoX3BsYXRmb3JtTG9jYXRpb24sIF9iYXNlSHJlZikge1xuICAgICAgc3VwZXIoKTtcbiAgICAgIHRoaXMuX3BsYXRmb3JtTG9jYXRpb24gPSBfcGxhdGZvcm1Mb2NhdGlvbjtcbiAgICAgIGlmIChfYmFzZUhyZWYgIT0gbnVsbCkge1xuICAgICAgICB0aGlzLl9iYXNlSHJlZiA9IF9iYXNlSHJlZjtcbiAgICAgIH1cbiAgICB9XG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICB3aGlsZSAodGhpcy5fcmVtb3ZlTGlzdGVuZXJGbnMubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuX3JlbW92ZUxpc3RlbmVyRm5zLnBvcCgpKCk7XG4gICAgICB9XG4gICAgfVxuICAgIG9uUG9wU3RhdGUoZm4pIHtcbiAgICAgIHRoaXMuX3JlbW92ZUxpc3RlbmVyRm5zLnB1c2godGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5vblBvcFN0YXRlKGZuKSwgdGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5vbkhhc2hDaGFuZ2UoZm4pKTtcbiAgICB9XG4gICAgZ2V0QmFzZUhyZWYoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fYmFzZUhyZWY7XG4gICAgfVxuICAgIHBhdGgoaW5jbHVkZUhhc2ggPSBmYWxzZSkge1xuICAgICAgY29uc3QgcGF0aCA9IHRoaXMuX3BsYXRmb3JtTG9jYXRpb24uaGFzaCA/PyAnIyc7XG4gICAgICByZXR1cm4gcGF0aC5sZW5ndGggPiAwID8gcGF0aC5zdWJzdHJpbmcoMSkgOiBwYXRoO1xuICAgIH1cbiAgICBwcmVwYXJlRXh0ZXJuYWxVcmwoaW50ZXJuYWwpIHtcbiAgICAgIGNvbnN0IHVybCA9IGpvaW5XaXRoU2xhc2godGhpcy5fYmFzZUhyZWYsIGludGVybmFsKTtcbiAgICAgIHJldHVybiB1cmwubGVuZ3RoID4gMCA/ICcjJyArIHVybCA6IHVybDtcbiAgICB9XG4gICAgcHVzaFN0YXRlKHN0YXRlLCB0aXRsZSwgcGF0aCwgcXVlcnlQYXJhbXMpIHtcbiAgICAgIGNvbnN0IHVybCA9IHRoaXMucHJlcGFyZUV4dGVybmFsVXJsKHBhdGggKyBub3JtYWxpemVRdWVyeVBhcmFtcyhxdWVyeVBhcmFtcykpIHx8IHRoaXMuX3BsYXRmb3JtTG9jYXRpb24ucGF0aG5hbWU7XG4gICAgICB0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLnB1c2hTdGF0ZShzdGF0ZSwgdGl0bGUsIHVybCk7XG4gICAgfVxuICAgIHJlcGxhY2VTdGF0ZShzdGF0ZSwgdGl0bGUsIHBhdGgsIHF1ZXJ5UGFyYW1zKSB7XG4gICAgICBjb25zdCB1cmwgPSB0aGlzLnByZXBhcmVFeHRlcm5hbFVybChwYXRoICsgbm9ybWFsaXplUXVlcnlQYXJhbXMocXVlcnlQYXJhbXMpKSB8fCB0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLnBhdGhuYW1lO1xuICAgICAgdGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5yZXBsYWNlU3RhdGUoc3RhdGUsIHRpdGxlLCB1cmwpO1xuICAgIH1cbiAgICBmb3J3YXJkKCkge1xuICAgICAgdGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5mb3J3YXJkKCk7XG4gICAgfVxuICAgIGJhY2soKSB7XG4gICAgICB0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLmJhY2soKTtcbiAgICB9XG4gICAgZ2V0U3RhdGUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5nZXRTdGF0ZSgpO1xuICAgIH1cbiAgICBoaXN0b3J5R28ocmVsYXRpdmVQb3NpdGlvbiA9IDApIHtcbiAgICAgIHRoaXMuX3BsYXRmb3JtTG9jYXRpb24uaGlzdG9yeUdvPy4ocmVsYXRpdmVQb3NpdGlvbik7XG4gICAgfVxuICAgIHN0YXRpYyDJtWZhYyA9IGZ1bmN0aW9uIEhhc2hMb2NhdGlvblN0cmF0ZWd5X0ZhY3RvcnkoX19uZ0ZhY3RvcnlUeXBlX18pIHtcbiAgICAgIHJldHVybiBuZXcgKF9fbmdGYWN0b3J5VHlwZV9fIHx8IEhhc2hMb2NhdGlvblN0cmF0ZWd5KShpMC7Jtcm1aW5qZWN0KFBsYXRmb3JtTG9jYXRpb24pLCBpMC7Jtcm1aW5qZWN0KEFQUF9CQVNFX0hSRUYsIDgpKTtcbiAgICB9O1xuICAgIHN0YXRpYyDJtXByb3YgPSAvKiBAX19QVVJFX18gKi9pMC7Jtcm1ZGVmaW5lSW5qZWN0YWJsZSh7XG4gICAgICB0b2tlbjogSGFzaExvY2F0aW9uU3RyYXRlZ3ksXG4gICAgICBmYWN0b3J5OiBIYXNoTG9jYXRpb25TdHJhdGVneS7JtWZhY1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBIYXNoTG9jYXRpb25TdHJhdGVneTtcbn0pKCk7XG4vKiNfX1BVUkVfXyovKCgpID0+IHtcbiAgKHR5cGVvZiBuZ0Rldk1vZGUgPT09IFwidW5kZWZpbmVkXCIgfHwgbmdEZXZNb2RlKSAmJiB2b2lkIDA7XG59KSgpO1xuY29uc3QgQ1VSUkVOQ0lFU19FTiA9IHtcbiAgXCJBRFBcIjogW3VuZGVmaW5lZCwgdW5kZWZpbmVkLCAwXSxcbiAgXCJBRk5cIjogW3VuZGVmaW5lZCwgXCLYi1wiLCAwXSxcbiAgXCJBTExcIjogW3VuZGVmaW5lZCwgdW5kZWZpbmVkLCAwXSxcbiAgXCJBTURcIjogW3VuZGVmaW5lZCwgXCLWj1wiLCAyXSxcbiAgXCJBT0FcIjogW3VuZGVmaW5lZCwgXCJLelwiXSxcbiAgXCJBUlNcIjogW3VuZGVmaW5lZCwgXCIkXCJdLFxuICBcIkFVRFwiOiBbXCJBJFwiLCBcIiRcIl0sXG4gIFwiQVpOXCI6IFt1bmRlZmluZWQsIFwi4oK8XCJdLFxuICBcIkJBTVwiOiBbdW5kZWZpbmVkLCBcIktNXCJdLFxuICBcIkJCRFwiOiBbdW5kZWZpbmVkLCBcIiRcIl0sXG4gIFwiQkRUXCI6IFt1bmRlZmluZWQsIFwi4KezXCJdLFxuICBcIkJIRFwiOiBbdW5kZWZpbmVkLCB1bmRlZmluZWQsIDNdLFxuICBcIkJJRlwiOiBbdW5kZWZpbmVkLCB1bmRlZmluZWQsIDBdLFxuICBcIkJNRFwiOiBbdW5kZWZpbmVkLCBcIiRcIl0sXG4gIFwiQk5EXCI6IFt1bmRlZmluZWQsIFwiJFwiXSxcbiAgXCJCT0JcIjogW3VuZGVmaW5lZCwgXCJCc1wiXSxcbiAgXCJCUkxcIjogW1wiUiRcIl0sXG4gIFwiQlNEXCI6IFt1bmRlZmluZWQsIFwiJFwiXSxcbiAgXCJCV1BcIjogW3VuZGVmaW5lZCwgXCJQXCJdLFxuICBcIkJZTlwiOiBbdW5kZWZpbmVkLCB1bmRlZmluZWQsIDJdLFxuICBcIkJZUlwiOiBbdW5kZWZpbmVkLCB1bmRlZmluZWQsIDBdLFxuICBcIkJaRFwiOiBbdW5kZWZpbmVkLCBcIiRcIl0sXG4gIFwiQ0FEXCI6IFtcIkNBJFwiLCBcIiRcIiwgMl0sXG4gIFwiQ0hGXCI6IFt1bmRlZmluZWQsIHVuZGVmaW5lZCwgMl0sXG4gIFwiQ0xGXCI6IFt1bmRlZmluZWQsIHVuZGVmaW5lZCwgNF0sXG4gIFwiQ0xQXCI6IFt1bmRlZmluZWQsIFwiJFwiLCAwXSxcbiAgXCJDTllcIjogW1wiQ07CpVwiLCBcIsKlXCJdLFxuICBcIkNPUFwiOiBbdW5kZWZpbmVkLCBcIiRcIiwgMl0sXG4gIFwiQ1JDXCI6IFt1bmRlZmluZWQsIFwi4oKhXCIsIDJdLFxuICBcIkNVQ1wiOiBbdW5kZWZpbmVkLCBcIiRcIl0sXG4gIFwiQ1VQXCI6IFt1bmRlZmluZWQsIFwiJFwiXSxcbiAgXCJDWktcIjogW3VuZGVmaW5lZCwgXCJLxI1cIiwgMl0sXG4gIFwiREpGXCI6IFt1bmRlZmluZWQsIHVuZGVmaW5lZCwgMF0sXG4gIFwiREtLXCI6IFt1bmRlZmluZWQsIFwia3JcIiwgMl0sXG4gIFwiRE9QXCI6IFt1bmRlZmluZWQsIFwiJFwiXSxcbiAgXCJFR1BcIjogW3VuZGVmaW5lZCwgXCJFwqNcIl0sXG4gIFwiRVNQXCI6IFt1bmRlZmluZWQsIFwi4oKnXCIsIDBdLFxuICBcIkVVUlwiOiBbXCLigqxcIl0sXG4gIFwiRkpEXCI6IFt1bmRlZmluZWQsIFwiJFwiXSxcbiAgXCJGS1BcIjogW3VuZGVmaW5lZCwgXCLCo1wiXSxcbiAgXCJHQlBcIjogW1wiwqNcIl0sXG4gIFwiR0VMXCI6IFt1bmRlZmluZWQsIFwi4oK+XCJdLFxuICBcIkdIU1wiOiBbdW5kZWZpbmVkLCBcIkdI4oK1XCJdLFxuICBcIkdJUFwiOiBbdW5kZWZpbmVkLCBcIsKjXCJdLFxuICBcIkdORlwiOiBbdW5kZWZpbmVkLCBcIkZHXCIsIDBdLFxuICBcIkdUUVwiOiBbdW5kZWZpbmVkLCBcIlFcIl0sXG4gIFwiR1lEXCI6IFt1bmRlZmluZWQsIFwiJFwiLCAyXSxcbiAgXCJIS0RcIjogW1wiSEskXCIsIFwiJFwiXSxcbiAgXCJITkxcIjogW3VuZGVmaW5lZCwgXCJMXCJdLFxuICBcIkhSS1wiOiBbdW5kZWZpbmVkLCBcImtuXCJdLFxuICBcIkhVRlwiOiBbdW5kZWZpbmVkLCBcIkZ0XCIsIDJdLFxuICBcIklEUlwiOiBbdW5kZWZpbmVkLCBcIlJwXCIsIDJdLFxuICBcIklMU1wiOiBbXCLigqpcIl0sXG4gIFwiSU5SXCI6IFtcIuKCuVwiXSxcbiAgXCJJUURcIjogW3VuZGVmaW5lZCwgdW5kZWZpbmVkLCAwXSxcbiAgXCJJUlJcIjogW3VuZGVmaW5lZCwgdW5kZWZpbmVkLCAwXSxcbiAgXCJJU0tcIjogW3VuZGVmaW5lZCwgXCJrclwiLCAwXSxcbiAgXCJJVExcIjogW3VuZGVmaW5lZCwgdW5kZWZpbmVkLCAwXSxcbiAgXCJKTURcIjogW3VuZGVmaW5lZCwgXCIkXCJdLFxuICBcIkpPRFwiOiBbdW5kZWZpbmVkLCB1bmRlZmluZWQsIDNdLFxuICBcIkpQWVwiOiBbXCLCpVwiLCB1bmRlZmluZWQsIDBdLFxuICBcIktHU1wiOiBbdW5kZWZpbmVkLCBcIuKDgFwiXSxcbiAgXCJLSFJcIjogW3VuZGVmaW5lZCwgXCLhn5tcIl0sXG4gIFwiS01GXCI6IFt1bmRlZmluZWQsIFwiQ0ZcIiwgMF0sXG4gIFwiS1BXXCI6IFt1bmRlZmluZWQsIFwi4oKpXCIsIDBdLFxuICBcIktSV1wiOiBbXCLigqlcIiwgdW5kZWZpbmVkLCAwXSxcbiAgXCJLV0RcIjogW3VuZGVmaW5lZCwgdW5kZWZpbmVkLCAzXSxcbiAgXCJLWURcIjogW3VuZGVmaW5lZCwgXCIkXCJdLFxuICBcIktaVFwiOiBbdW5kZWZpbmVkLCBcIuKCuFwiXSxcbiAgXCJMQUtcIjogW3VuZGVmaW5lZCwgXCLigq1cIiwgMF0sXG4gIFwiTEJQXCI6IFt1bmRlZmluZWQsIFwiTMKjXCIsIDBdLFxuICBcIkxLUlwiOiBbdW5kZWZpbmVkLCBcIlJzXCJdLFxuICBcIkxSRFwiOiBbdW5kZWZpbmVkLCBcIiRcIl0sXG4gIFwiTFRMXCI6IFt1bmRlZmluZWQsIFwiTHRcIl0sXG4gIFwiTFVGXCI6IFt1bmRlZmluZWQsIHVuZGVmaW5lZCwgMF0sXG4gIFwiTFZMXCI6IFt1bmRlZmluZWQsIFwiTHNcIl0sXG4gIFwiTFlEXCI6IFt1bmRlZmluZWQsIHVuZGVmaW5lZCwgM10sXG4gIFwiTUdBXCI6IFt1bmRlZmluZWQsIFwiQXJcIiwgMF0sXG4gIFwiTUdGXCI6IFt1bmRlZmluZWQsIHVuZGVmaW5lZCwgMF0sXG4gIFwiTU1LXCI6IFt1bmRlZmluZWQsIFwiS1wiLCAwXSxcbiAgXCJNTlRcIjogW3VuZGVmaW5lZCwgXCLigq5cIiwgMl0sXG4gIFwiTVJPXCI6IFt1bmRlZmluZWQsIHVuZGVmaW5lZCwgMF0sXG4gIFwiTVVSXCI6IFt1bmRlZmluZWQsIFwiUnNcIiwgMl0sXG4gIFwiTVhOXCI6IFtcIk1YJFwiLCBcIiRcIl0sXG4gIFwiTVlSXCI6IFt1bmRlZmluZWQsIFwiUk1cIl0sXG4gIFwiTkFEXCI6IFt1bmRlZmluZWQsIFwiJFwiXSxcbiAgXCJOR05cIjogW3VuZGVmaW5lZCwgXCLigqZcIl0sXG4gIFwiTklPXCI6IFt1bmRlZmluZWQsIFwiQyRcIl0sXG4gIFwiTk9LXCI6IFt1bmRlZmluZWQsIFwia3JcIiwgMl0sXG4gIFwiTlBSXCI6IFt1bmRlZmluZWQsIFwiUnNcIl0sXG4gIFwiTlpEXCI6IFtcIk5aJFwiLCBcIiRcIl0sXG4gIFwiT01SXCI6IFt1bmRlZmluZWQsIHVuZGVmaW5lZCwgM10sXG4gIFwiUEhQXCI6IFtcIuKCsVwiXSxcbiAgXCJQS1JcIjogW3VuZGVmaW5lZCwgXCJSc1wiLCAyXSxcbiAgXCJQTE5cIjogW3VuZGVmaW5lZCwgXCJ6xYJcIl0sXG4gIFwiUFlHXCI6IFt1bmRlZmluZWQsIFwi4oKyXCIsIDBdLFxuICBcIlJPTlwiOiBbdW5kZWZpbmVkLCBcImxlaVwiXSxcbiAgXCJSU0RcIjogW3VuZGVmaW5lZCwgdW5kZWZpbmVkLCAwXSxcbiAgXCJSVUJcIjogW3VuZGVmaW5lZCwgXCLigr1cIl0sXG4gIFwiUldGXCI6IFt1bmRlZmluZWQsIFwiUkZcIiwgMF0sXG4gIFwiU0JEXCI6IFt1bmRlZmluZWQsIFwiJFwiXSxcbiAgXCJTRUtcIjogW3VuZGVmaW5lZCwgXCJrclwiLCAyXSxcbiAgXCJTR0RcIjogW3VuZGVmaW5lZCwgXCIkXCJdLFxuICBcIlNIUFwiOiBbdW5kZWZpbmVkLCBcIsKjXCJdLFxuICBcIlNMRVwiOiBbdW5kZWZpbmVkLCB1bmRlZmluZWQsIDJdLFxuICBcIlNMTFwiOiBbdW5kZWZpbmVkLCB1bmRlZmluZWQsIDBdLFxuICBcIlNPU1wiOiBbdW5kZWZpbmVkLCB1bmRlZmluZWQsIDBdLFxuICBcIlNSRFwiOiBbdW5kZWZpbmVkLCBcIiRcIl0sXG4gIFwiU1NQXCI6IFt1bmRlZmluZWQsIFwiwqNcIl0sXG4gIFwiU1REXCI6IFt1bmRlZmluZWQsIHVuZGVmaW5lZCwgMF0sXG4gIFwiU1ROXCI6IFt1bmRlZmluZWQsIFwiRGJcIl0sXG4gIFwiU1lQXCI6IFt1bmRlZmluZWQsIFwiwqNcIiwgMF0sXG4gIFwiVEhCXCI6IFt1bmRlZmluZWQsIFwi4Li/XCJdLFxuICBcIlRNTVwiOiBbdW5kZWZpbmVkLCB1bmRlZmluZWQsIDBdLFxuICBcIlRORFwiOiBbdW5kZWZpbmVkLCB1bmRlZmluZWQsIDNdLFxuICBcIlRPUFwiOiBbdW5kZWZpbmVkLCBcIlQkXCJdLFxuICBcIlRSTFwiOiBbdW5kZWZpbmVkLCB1bmRlZmluZWQsIDBdLFxuICBcIlRSWVwiOiBbdW5kZWZpbmVkLCBcIuKCulwiXSxcbiAgXCJUVERcIjogW3VuZGVmaW5lZCwgXCIkXCJdLFxuICBcIlRXRFwiOiBbXCJOVCRcIiwgXCIkXCIsIDJdLFxuICBcIlRaU1wiOiBbdW5kZWZpbmVkLCB1bmRlZmluZWQsIDJdLFxuICBcIlVBSFwiOiBbdW5kZWZpbmVkLCBcIuKCtFwiXSxcbiAgXCJVR1hcIjogW3VuZGVmaW5lZCwgdW5kZWZpbmVkLCAwXSxcbiAgXCJVU0RcIjogW1wiJFwiXSxcbiAgXCJVWUlcIjogW3VuZGVmaW5lZCwgdW5kZWZpbmVkLCAwXSxcbiAgXCJVWVVcIjogW3VuZGVmaW5lZCwgXCIkXCJdLFxuICBcIlVZV1wiOiBbdW5kZWZpbmVkLCB1bmRlZmluZWQsIDRdLFxuICBcIlVaU1wiOiBbdW5kZWZpbmVkLCB1bmRlZmluZWQsIDJdLFxuICBcIlZFRlwiOiBbdW5kZWZpbmVkLCBcIkJzXCIsIDJdLFxuICBcIlZORFwiOiBbXCLigqtcIiwgdW5kZWZpbmVkLCAwXSxcbiAgXCJWVVZcIjogW3VuZGVmaW5lZCwgdW5kZWZpbmVkLCAwXSxcbiAgXCJYQUZcIjogW1wiRkNGQVwiLCB1bmRlZmluZWQsIDBdLFxuICBcIlhDRFwiOiBbXCJFQyRcIiwgXCIkXCJdLFxuICBcIlhDR1wiOiBbXCJDZy5cIl0sXG4gIFwiWE9GXCI6IFtcIkbigK9DRkFcIiwgdW5kZWZpbmVkLCAwXSxcbiAgXCJYUEZcIjogW1wiQ0ZQRlwiLCB1bmRlZmluZWQsIDBdLFxuICBcIlhYWFwiOiBbXCLCpFwiXSxcbiAgXCJZRVJcIjogW3VuZGVmaW5lZCwgdW5kZWZpbmVkLCAwXSxcbiAgXCJaQVJcIjogW3VuZGVmaW5lZCwgXCJSXCJdLFxuICBcIlpNS1wiOiBbdW5kZWZpbmVkLCB1bmRlZmluZWQsIDBdLFxuICBcIlpNV1wiOiBbdW5kZWZpbmVkLCBcIlpLXCJdLFxuICBcIlpXRFwiOiBbdW5kZWZpbmVkLCB1bmRlZmluZWQsIDBdXG59O1xudmFyIE51bWJlckZvcm1hdFN0eWxlID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChOdW1iZXJGb3JtYXRTdHlsZSkge1xuICBOdW1iZXJGb3JtYXRTdHlsZVtOdW1iZXJGb3JtYXRTdHlsZVtcIkRlY2ltYWxcIl0gPSAwXSA9IFwiRGVjaW1hbFwiO1xuICBOdW1iZXJGb3JtYXRTdHlsZVtOdW1iZXJGb3JtYXRTdHlsZVtcIlBlcmNlbnRcIl0gPSAxXSA9IFwiUGVyY2VudFwiO1xuICBOdW1iZXJGb3JtYXRTdHlsZVtOdW1iZXJGb3JtYXRTdHlsZVtcIkN1cnJlbmN5XCJdID0gMl0gPSBcIkN1cnJlbmN5XCI7XG4gIE51bWJlckZvcm1hdFN0eWxlW051bWJlckZvcm1hdFN0eWxlW1wiU2NpZW50aWZpY1wiXSA9IDNdID0gXCJTY2llbnRpZmljXCI7XG4gIHJldHVybiBOdW1iZXJGb3JtYXRTdHlsZTtcbn0oTnVtYmVyRm9ybWF0U3R5bGUgfHwge30pO1xudmFyIFBsdXJhbCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoUGx1cmFsKSB7XG4gIFBsdXJhbFtQbHVyYWxbXCJaZXJvXCJdID0gMF0gPSBcIlplcm9cIjtcbiAgUGx1cmFsW1BsdXJhbFtcIk9uZVwiXSA9IDFdID0gXCJPbmVcIjtcbiAgUGx1cmFsW1BsdXJhbFtcIlR3b1wiXSA9IDJdID0gXCJUd29cIjtcbiAgUGx1cmFsW1BsdXJhbFtcIkZld1wiXSA9IDNdID0gXCJGZXdcIjtcbiAgUGx1cmFsW1BsdXJhbFtcIk1hbnlcIl0gPSA0XSA9IFwiTWFueVwiO1xuICBQbHVyYWxbUGx1cmFsW1wiT3RoZXJcIl0gPSA1XSA9IFwiT3RoZXJcIjtcbiAgcmV0dXJuIFBsdXJhbDtcbn0oUGx1cmFsIHx8IHt9KTtcbnZhciBGb3JtU3R5bGUgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKEZvcm1TdHlsZSkge1xuICBGb3JtU3R5bGVbRm9ybVN0eWxlW1wiRm9ybWF0XCJdID0gMF0gPSBcIkZvcm1hdFwiO1xuICBGb3JtU3R5bGVbRm9ybVN0eWxlW1wiU3RhbmRhbG9uZVwiXSA9IDFdID0gXCJTdGFuZGFsb25lXCI7XG4gIHJldHVybiBGb3JtU3R5bGU7XG59KEZvcm1TdHlsZSB8fCB7fSk7XG52YXIgVHJhbnNsYXRpb25XaWR0aCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoVHJhbnNsYXRpb25XaWR0aCkge1xuICBUcmFuc2xhdGlvbldpZHRoW1RyYW5zbGF0aW9uV2lkdGhbXCJOYXJyb3dcIl0gPSAwXSA9IFwiTmFycm93XCI7XG4gIFRyYW5zbGF0aW9uV2lkdGhbVHJhbnNsYXRpb25XaWR0aFtcIkFiYnJldmlhdGVkXCJdID0gMV0gPSBcIkFiYnJldmlhdGVkXCI7XG4gIFRyYW5zbGF0aW9uV2lkdGhbVHJhbnNsYXRpb25XaWR0aFtcIldpZGVcIl0gPSAyXSA9IFwiV2lkZVwiO1xuICBUcmFuc2xhdGlvbldpZHRoW1RyYW5zbGF0aW9uV2lkdGhbXCJTaG9ydFwiXSA9IDNdID0gXCJTaG9ydFwiO1xuICByZXR1cm4gVHJhbnNsYXRpb25XaWR0aDtcbn0oVHJhbnNsYXRpb25XaWR0aCB8fCB7fSk7XG52YXIgRm9ybWF0V2lkdGggPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKEZvcm1hdFdpZHRoKSB7XG4gIEZvcm1hdFdpZHRoW0Zvcm1hdFdpZHRoW1wiU2hvcnRcIl0gPSAwXSA9IFwiU2hvcnRcIjtcbiAgRm9ybWF0V2lkdGhbRm9ybWF0V2lkdGhbXCJNZWRpdW1cIl0gPSAxXSA9IFwiTWVkaXVtXCI7XG4gIEZvcm1hdFdpZHRoW0Zvcm1hdFdpZHRoW1wiTG9uZ1wiXSA9IDJdID0gXCJMb25nXCI7XG4gIEZvcm1hdFdpZHRoW0Zvcm1hdFdpZHRoW1wiRnVsbFwiXSA9IDNdID0gXCJGdWxsXCI7XG4gIHJldHVybiBGb3JtYXRXaWR0aDtcbn0oRm9ybWF0V2lkdGggfHwge30pO1xuY29uc3QgTnVtYmVyU3ltYm9sID0ge1xuICBEZWNpbWFsOiAwLFxuICBHcm91cDogMSxcbiAgTGlzdDogMixcbiAgUGVyY2VudFNpZ246IDMsXG4gIFBsdXNTaWduOiA0LFxuICBNaW51c1NpZ246IDUsXG4gIEV4cG9uZW50aWFsOiA2LFxuICBTdXBlcnNjcmlwdGluZ0V4cG9uZW50OiA3LFxuICBQZXJNaWxsZTogOCxcbiAgSW5maW5pdHk6IDksXG4gIE5hTjogMTAsXG4gIFRpbWVTZXBhcmF0b3I6IDExLFxuICBDdXJyZW5jeURlY2ltYWw6IDEyLFxuICBDdXJyZW5jeUdyb3VwOiAxM1xufTtcbnZhciBXZWVrRGF5ID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChXZWVrRGF5KSB7XG4gIFdlZWtEYXlbV2Vla0RheVtcIlN1bmRheVwiXSA9IDBdID0gXCJTdW5kYXlcIjtcbiAgV2Vla0RheVtXZWVrRGF5W1wiTW9uZGF5XCJdID0gMV0gPSBcIk1vbmRheVwiO1xuICBXZWVrRGF5W1dlZWtEYXlbXCJUdWVzZGF5XCJdID0gMl0gPSBcIlR1ZXNkYXlcIjtcbiAgV2Vla0RheVtXZWVrRGF5W1wiV2VkbmVzZGF5XCJdID0gM10gPSBcIldlZG5lc2RheVwiO1xuICBXZWVrRGF5W1dlZWtEYXlbXCJUaHVyc2RheVwiXSA9IDRdID0gXCJUaHVyc2RheVwiO1xuICBXZWVrRGF5W1dlZWtEYXlbXCJGcmlkYXlcIl0gPSA1XSA9IFwiRnJpZGF5XCI7XG4gIFdlZWtEYXlbV2Vla0RheVtcIlNhdHVyZGF5XCJdID0gNl0gPSBcIlNhdHVyZGF5XCI7XG4gIHJldHVybiBXZWVrRGF5O1xufShXZWVrRGF5IHx8IHt9KTtcbmZ1bmN0aW9uIGdldExvY2FsZUlkKGxvY2FsZSkge1xuICByZXR1cm4gX2ZpbmRMb2NhbGVEYXRhKGxvY2FsZSlbX0xvY2FsZURhdGFJbmRleC5Mb2NhbGVJZF07XG59XG5mdW5jdGlvbiBnZXRMb2NhbGVEYXlQZXJpb2RzKGxvY2FsZSwgZm9ybVN0eWxlLCB3aWR0aCkge1xuICBjb25zdCBkYXRhID0gX2ZpbmRMb2NhbGVEYXRhKGxvY2FsZSk7XG4gIGNvbnN0IGFtUG1EYXRhID0gW2RhdGFbX0xvY2FsZURhdGFJbmRleC5EYXlQZXJpb2RzRm9ybWF0XSwgZGF0YVtfTG9jYWxlRGF0YUluZGV4LkRheVBlcmlvZHNTdGFuZGFsb25lXV07XG4gIGNvbnN0IGFtUG0gPSBnZXRMYXN0RGVmaW5lZFZhbHVlKGFtUG1EYXRhLCBmb3JtU3R5bGUpO1xuICByZXR1cm4gZ2V0TGFzdERlZmluZWRWYWx1ZShhbVBtLCB3aWR0aCk7XG59XG5mdW5jdGlvbiBnZXRMb2NhbGVEYXlOYW1lcyhsb2NhbGUsIGZvcm1TdHlsZSwgd2lkdGgpIHtcbiAgY29uc3QgZGF0YSA9IF9maW5kTG9jYWxlRGF0YShsb2NhbGUpO1xuICBjb25zdCBkYXlzRGF0YSA9IFtkYXRhW19Mb2NhbGVEYXRhSW5kZXguRGF5c0Zvcm1hdF0sIGRhdGFbX0xvY2FsZURhdGFJbmRleC5EYXlzU3RhbmRhbG9uZV1dO1xuICBjb25zdCBkYXlzID0gZ2V0TGFzdERlZmluZWRWYWx1ZShkYXlzRGF0YSwgZm9ybVN0eWxlKTtcbiAgcmV0dXJuIGdldExhc3REZWZpbmVkVmFsdWUoZGF5cywgd2lkdGgpO1xufVxuZnVuY3Rpb24gZ2V0TG9jYWxlTW9udGhOYW1lcyhsb2NhbGUsIGZvcm1TdHlsZSwgd2lkdGgpIHtcbiAgY29uc3QgZGF0YSA9IF9maW5kTG9jYWxlRGF0YShsb2NhbGUpO1xuICBjb25zdCBtb250aHNEYXRhID0gW2RhdGFbX0xvY2FsZURhdGFJbmRleC5Nb250aHNGb3JtYXRdLCBkYXRhW19Mb2NhbGVEYXRhSW5kZXguTW9udGhzU3RhbmRhbG9uZV1dO1xuICBjb25zdCBtb250aHMgPSBnZXRMYXN0RGVmaW5lZFZhbHVlKG1vbnRoc0RhdGEsIGZvcm1TdHlsZSk7XG4gIHJldHVybiBnZXRMYXN0RGVmaW5lZFZhbHVlKG1vbnRocywgd2lkdGgpO1xufVxuZnVuY3Rpb24gZ2V0TG9jYWxlRXJhTmFtZXMobG9jYWxlLCB3aWR0aCkge1xuICBjb25zdCBkYXRhID0gX2ZpbmRMb2NhbGVEYXRhKGxvY2FsZSk7XG4gIGNvbnN0IGVyYXNEYXRhID0gZGF0YVtfTG9jYWxlRGF0YUluZGV4LkVyYXNdO1xuICByZXR1cm4gZ2V0TGFzdERlZmluZWRWYWx1ZShlcmFzRGF0YSwgd2lkdGgpO1xufVxuZnVuY3Rpb24gZ2V0TG9jYWxlRmlyc3REYXlPZldlZWsobG9jYWxlKSB7XG4gIGNvbnN0IGRhdGEgPSBfZmluZExvY2FsZURhdGEobG9jYWxlKTtcbiAgcmV0dXJuIGRhdGFbX0xvY2FsZURhdGFJbmRleC5GaXJzdERheU9mV2Vla107XG59XG5mdW5jdGlvbiBnZXRMb2NhbGVXZWVrRW5kUmFuZ2UobG9jYWxlKSB7XG4gIGNvbnN0IGRhdGEgPSBfZmluZExvY2FsZURhdGEobG9jYWxlKTtcbiAgcmV0dXJuIGRhdGFbX0xvY2FsZURhdGFJbmRleC5XZWVrZW5kUmFuZ2VdO1xufVxuZnVuY3Rpb24gZ2V0TG9jYWxlRGF0ZUZvcm1hdChsb2NhbGUsIHdpZHRoKSB7XG4gIGNvbnN0IGRhdGEgPSBfZmluZExvY2FsZURhdGEobG9jYWxlKTtcbiAgcmV0dXJuIGdldExhc3REZWZpbmVkVmFsdWUoZGF0YVtfTG9jYWxlRGF0YUluZGV4LkRhdGVGb3JtYXRdLCB3aWR0aCk7XG59XG5mdW5jdGlvbiBnZXRMb2NhbGVUaW1lRm9ybWF0KGxvY2FsZSwgd2lkdGgpIHtcbiAgY29uc3QgZGF0YSA9IF9maW5kTG9jYWxlRGF0YShsb2NhbGUpO1xuICByZXR1cm4gZ2V0TGFzdERlZmluZWRWYWx1ZShkYXRhW19Mb2NhbGVEYXRhSW5kZXguVGltZUZvcm1hdF0sIHdpZHRoKTtcbn1cbmZ1bmN0aW9uIGdldExvY2FsZURhdGVUaW1lRm9ybWF0KGxvY2FsZSwgd2lkdGgpIHtcbiAgY29uc3QgZGF0YSA9IF9maW5kTG9jYWxlRGF0YShsb2NhbGUpO1xuICBjb25zdCBkYXRlVGltZUZvcm1hdERhdGEgPSBkYXRhW19Mb2NhbGVEYXRhSW5kZXguRGF0ZVRpbWVGb3JtYXRdO1xuICByZXR1cm4gZ2V0TGFzdERlZmluZWRWYWx1ZShkYXRlVGltZUZvcm1hdERhdGEsIHdpZHRoKTtcbn1cbmZ1bmN0aW9uIGdldExvY2FsZU51bWJlclN5bWJvbChsb2NhbGUsIHN5bWJvbCkge1xuICBjb25zdCBkYXRhID0gX2ZpbmRMb2NhbGVEYXRhKGxvY2FsZSk7XG4gIGNvbnN0IHJlcyA9IGRhdGFbX0xvY2FsZURhdGFJbmRleC5OdW1iZXJTeW1ib2xzXVtzeW1ib2xdO1xuICBpZiAodHlwZW9mIHJlcyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBpZiAoc3ltYm9sID09PSBOdW1iZXJTeW1ib2wuQ3VycmVuY3lEZWNpbWFsKSB7XG4gICAgICByZXR1cm4gZGF0YVtfTG9jYWxlRGF0YUluZGV4Lk51bWJlclN5bWJvbHNdW051bWJlclN5bWJvbC5EZWNpbWFsXTtcbiAgICB9IGVsc2UgaWYgKHN5bWJvbCA9PT0gTnVtYmVyU3ltYm9sLkN1cnJlbmN5R3JvdXApIHtcbiAgICAgIHJldHVybiBkYXRhW19Mb2NhbGVEYXRhSW5kZXguTnVtYmVyU3ltYm9sc11bTnVtYmVyU3ltYm9sLkdyb3VwXTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cbmZ1bmN0aW9uIGdldExvY2FsZU51bWJlckZvcm1hdChsb2NhbGUsIHR5cGUpIHtcbiAgY29uc3QgZGF0YSA9IF9maW5kTG9jYWxlRGF0YShsb2NhbGUpO1xuICByZXR1cm4gZGF0YVtfTG9jYWxlRGF0YUluZGV4Lk51bWJlckZvcm1hdHNdW3R5cGVdO1xufVxuZnVuY3Rpb24gZ2V0TG9jYWxlQ3VycmVuY3lTeW1ib2wobG9jYWxlKSB7XG4gIGNvbnN0IGRhdGEgPSBfZmluZExvY2FsZURhdGEobG9jYWxlKTtcbiAgcmV0dXJuIGRhdGFbX0xvY2FsZURhdGFJbmRleC5DdXJyZW5jeVN5bWJvbF0gfHwgbnVsbDtcbn1cbmZ1bmN0aW9uIGdldExvY2FsZUN1cnJlbmN5TmFtZShsb2NhbGUpIHtcbiAgY29uc3QgZGF0YSA9IF9maW5kTG9jYWxlRGF0YShsb2NhbGUpO1xuICByZXR1cm4gZGF0YVtfTG9jYWxlRGF0YUluZGV4LkN1cnJlbmN5TmFtZV0gfHwgbnVsbDtcbn1cbmZ1bmN0aW9uIGdldExvY2FsZUN1cnJlbmN5Q29kZShsb2NhbGUpIHtcbiAgcmV0dXJuIF9nZXRMb2NhbGVDdXJyZW5jeUNvZGUobG9jYWxlKTtcbn1cbmZ1bmN0aW9uIGdldExvY2FsZUN1cnJlbmNpZXMobG9jYWxlKSB7XG4gIGNvbnN0IGRhdGEgPSBfZmluZExvY2FsZURhdGEobG9jYWxlKTtcbiAgcmV0dXJuIGRhdGFbX0xvY2FsZURhdGFJbmRleC5DdXJyZW5jaWVzXTtcbn1cbmNvbnN0IGdldExvY2FsZVBsdXJhbENhc2UgPSBfZ2V0TG9jYWxlUGx1cmFsQ2FzZTtcbmZ1bmN0aW9uIGNoZWNrRnVsbERhdGEoZGF0YSkge1xuICBpZiAoIWRhdGFbX0xvY2FsZURhdGFJbmRleC5FeHRyYURhdGFdKSB7XG4gICAgdGhyb3cgbmV3IF9SdW50aW1lRXJyb3IoMjMwMywgbmdEZXZNb2RlICYmIGBNaXNzaW5nIGV4dHJhIGxvY2FsZSBkYXRhIGZvciB0aGUgbG9jYWxlIFwiJHtkYXRhW19Mb2NhbGVEYXRhSW5kZXguTG9jYWxlSWRdfVwiLiBVc2UgXCJyZWdpc3RlckxvY2FsZURhdGFcIiB0byBsb2FkIG5ldyBkYXRhLiBTZWUgdGhlIFwiSTE4biBndWlkZVwiIG9uIGFuZ3VsYXIuaW8gdG8ga25vdyBtb3JlLmApO1xuICB9XG59XG5mdW5jdGlvbiBnZXRMb2NhbGVFeHRyYURheVBlcmlvZFJ1bGVzKGxvY2FsZSkge1xuICBjb25zdCBkYXRhID0gX2ZpbmRMb2NhbGVEYXRhKGxvY2FsZSk7XG4gIGNoZWNrRnVsbERhdGEoZGF0YSk7XG4gIGNvbnN0IHJ1bGVzID0gZGF0YVtfTG9jYWxlRGF0YUluZGV4LkV4dHJhRGF0YV1bMl0gfHwgW107XG4gIHJldHVybiBydWxlcy5tYXAocnVsZSA9PiB7XG4gICAgaWYgKHR5cGVvZiBydWxlID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIGV4dHJhY3RUaW1lKHJ1bGUpO1xuICAgIH1cbiAgICByZXR1cm4gW2V4dHJhY3RUaW1lKHJ1bGVbMF0pLCBleHRyYWN0VGltZShydWxlWzFdKV07XG4gIH0pO1xufVxuZnVuY3Rpb24gZ2V0TG9jYWxlRXh0cmFEYXlQZXJpb2RzKGxvY2FsZSwgZm9ybVN0eWxlLCB3aWR0aCkge1xuICBjb25zdCBkYXRhID0gX2ZpbmRMb2NhbGVEYXRhKGxvY2FsZSk7XG4gIGNoZWNrRnVsbERhdGEoZGF0YSk7XG4gIGNvbnN0IGRheVBlcmlvZHNEYXRhID0gW2RhdGFbX0xvY2FsZURhdGFJbmRleC5FeHRyYURhdGFdWzBdLCBkYXRhW19Mb2NhbGVEYXRhSW5kZXguRXh0cmFEYXRhXVsxXV07XG4gIGNvbnN0IGRheVBlcmlvZHMgPSBnZXRMYXN0RGVmaW5lZFZhbHVlKGRheVBlcmlvZHNEYXRhLCBmb3JtU3R5bGUpIHx8IFtdO1xuICByZXR1cm4gZ2V0TGFzdERlZmluZWRWYWx1ZShkYXlQZXJpb2RzLCB3aWR0aCkgfHwgW107XG59XG5mdW5jdGlvbiBnZXRMb2NhbGVEaXJlY3Rpb24obG9jYWxlKSB7XG4gIGNvbnN0IGRhdGEgPSBfZmluZExvY2FsZURhdGEobG9jYWxlKTtcbiAgcmV0dXJuIGRhdGFbX0xvY2FsZURhdGFJbmRleC5EaXJlY3Rpb25hbGl0eV07XG59XG5mdW5jdGlvbiBnZXRMYXN0RGVmaW5lZFZhbHVlKGRhdGEsIGluZGV4KSB7XG4gIGZvciAobGV0IGkgPSBpbmRleDsgaSA+IC0xOyBpLS0pIHtcbiAgICBpZiAodHlwZW9mIGRhdGFbaV0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gZGF0YVtpXTtcbiAgICB9XG4gIH1cbiAgdGhyb3cgbmV3IF9SdW50aW1lRXJyb3IoMjMwNCwgbmdEZXZNb2RlICYmICdMb2NhbGUgZGF0YSBBUEk6IGxvY2FsZSBkYXRhIHVuZGVmaW5lZCcpO1xufVxuZnVuY3Rpb24gZXh0cmFjdFRpbWUodGltZSkge1xuICBjb25zdCBbaCwgbV0gPSB0aW1lLnNwbGl0KCc6Jyk7XG4gIHJldHVybiB7XG4gICAgaG91cnM6ICtoLFxuICAgIG1pbnV0ZXM6ICttXG4gIH07XG59XG5mdW5jdGlvbiBnZXRDdXJyZW5jeVN5bWJvbChjb2RlLCBmb3JtYXQsIGxvY2FsZSA9ICdlbicpIHtcbiAgY29uc3QgY3VycmVuY3kgPSBnZXRMb2NhbGVDdXJyZW5jaWVzKGxvY2FsZSlbY29kZV0gfHwgQ1VSUkVOQ0lFU19FTltjb2RlXSB8fCBbXTtcbiAgY29uc3Qgc3ltYm9sTmFycm93ID0gY3VycmVuY3lbMV07XG4gIGlmIChmb3JtYXQgPT09ICduYXJyb3cnICYmIHR5cGVvZiBzeW1ib2xOYXJyb3cgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHN5bWJvbE5hcnJvdztcbiAgfVxuICByZXR1cm4gY3VycmVuY3lbMF0gfHwgY29kZTtcbn1cbmNvbnN0IERFRkFVTFRfTkJfT0ZfQ1VSUkVOQ1lfRElHSVRTID0gMjtcbmZ1bmN0aW9uIGdldE51bWJlck9mQ3VycmVuY3lEaWdpdHMoY29kZSkge1xuICBsZXQgZGlnaXRzO1xuICBjb25zdCBjdXJyZW5jeSA9IENVUlJFTkNJRVNfRU5bY29kZV07XG4gIGlmIChjdXJyZW5jeSkge1xuICAgIGRpZ2l0cyA9IGN1cnJlbmN5WzJdO1xuICB9XG4gIHJldHVybiB0eXBlb2YgZGlnaXRzID09PSAnbnVtYmVyJyA/IGRpZ2l0cyA6IERFRkFVTFRfTkJfT0ZfQ1VSUkVOQ1lfRElHSVRTO1xufVxuY29uc3QgSVNPODYwMV9EQVRFX1JFR0VYID0gL14oXFxkezQsfSktPyhcXGRcXGQpLT8oXFxkXFxkKSg/OlQoXFxkXFxkKSg/Ojo/KFxcZFxcZCkoPzo6PyhcXGRcXGQpKD86XFwuKFxcZCspKT8pPyk/KFp8KFsrLV0pKFxcZFxcZCk6PyhcXGRcXGQpKT8pPyQvO1xuY29uc3QgTkFNRURfRk9STUFUUyA9IHt9O1xuY29uc3QgREFURV9GT1JNQVRTX1NQTElUID0gLygoPzpbXkJFR0hMTU9TV1laYWJjZGhtc3d5eiddKyl8KD86Jyg/OlteJ118JycpKicpfCg/Okd7MSw1fXx5ezEsNH18WXsxLDR9fE17MSw1fXxMezEsNX18d3sxLDJ9fFd7MX18ZHsxLDJ9fEV7MSw2fXxjezEsNn18YXsxLDV9fGJ7MSw1fXxCezEsNX18aHsxLDJ9fEh7MSwyfXxtezEsMn18c3sxLDJ9fFN7MSwzfXx6ezEsNH18WnsxLDV9fE97MSw0fSkpKFtcXHNcXFNdKikvO1xuZnVuY3Rpb24gZm9ybWF0RGF0ZSh2YWx1ZSwgZm9ybWF0LCBsb2NhbGUsIHRpbWV6b25lKSB7XG4gIGxldCBkYXRlID0gdG9EYXRlKHZhbHVlKTtcbiAgY29uc3QgbmFtZWRGb3JtYXQgPSBnZXROYW1lZEZvcm1hdChsb2NhbGUsIGZvcm1hdCk7XG4gIGZvcm1hdCA9IG5hbWVkRm9ybWF0IHx8IGZvcm1hdDtcbiAgbGV0IHBhcnRzID0gW107XG4gIGxldCBtYXRjaDtcbiAgd2hpbGUgKGZvcm1hdCkge1xuICAgIG1hdGNoID0gREFURV9GT1JNQVRTX1NQTElULmV4ZWMoZm9ybWF0KTtcbiAgICBpZiAobWF0Y2gpIHtcbiAgICAgIHBhcnRzID0gcGFydHMuY29uY2F0KG1hdGNoLnNsaWNlKDEpKTtcbiAgICAgIGNvbnN0IHBhcnQgPSBwYXJ0cy5wb3AoKTtcbiAgICAgIGlmICghcGFydCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGZvcm1hdCA9IHBhcnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcnRzLnB1c2goZm9ybWF0KTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICBpZiAodHlwZW9mIG5nRGV2TW9kZSA9PT0gJ3VuZGVmaW5lZCcgfHwgbmdEZXZNb2RlKSB7XG4gICAgYXNzZXJ0VmFsaWREYXRlRm9ybWF0KHBhcnRzKTtcbiAgfVxuICBsZXQgZGF0ZVRpbWV6b25lT2Zmc2V0ID0gZGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpO1xuICBpZiAodGltZXpvbmUpIHtcbiAgICBkYXRlVGltZXpvbmVPZmZzZXQgPSB0aW1lem9uZVRvT2Zmc2V0KHRpbWV6b25lLCBkYXRlVGltZXpvbmVPZmZzZXQpO1xuICAgIGRhdGUgPSBjb252ZXJ0VGltZXpvbmVUb0xvY2FsKGRhdGUsIHRpbWV6b25lKTtcbiAgfVxuICBsZXQgdGV4dCA9ICcnO1xuICBwYXJ0cy5mb3JFYWNoKHZhbHVlID0+IHtcbiAgICBjb25zdCBkYXRlRm9ybWF0dGVyID0gZ2V0RGF0ZUZvcm1hdHRlcih2YWx1ZSk7XG4gICAgdGV4dCArPSBkYXRlRm9ybWF0dGVyID8gZGF0ZUZvcm1hdHRlcihkYXRlLCBsb2NhbGUsIGRhdGVUaW1lem9uZU9mZnNldCkgOiB2YWx1ZSA9PT0gXCInJ1wiID8gXCInXCIgOiB2YWx1ZS5yZXBsYWNlKC8oXid8JyQpL2csICcnKS5yZXBsYWNlKC8nJy9nLCBcIidcIik7XG4gIH0pO1xuICByZXR1cm4gdGV4dDtcbn1cbmZ1bmN0aW9uIGFzc2VydFZhbGlkRGF0ZUZvcm1hdChwYXJ0cykge1xuICBpZiAocGFydHMuc29tZShwYXJ0ID0+IC9eWSskLy50ZXN0KHBhcnQpKSAmJiAhcGFydHMuc29tZShwYXJ0ID0+IC9edyskLy50ZXN0KHBhcnQpKSkge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBgU3VzcGljaW91cyB1c2Ugb2Ygd2Vlay1iYXNlZCB5ZWFyIFwiWVwiIGluIGRhdGUgcGF0dGVybiBcIiR7cGFydHMuam9pbignJyl9XCIuIERpZCB5b3UgbWVhbiB0byB1c2UgY2FsZW5kYXIgeWVhciBcInlcIiBpbnN0ZWFkP2A7XG4gICAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgY29uc29sZS5lcnJvcihfZm9ybWF0UnVudGltZUVycm9yKDIzMDAsIG1lc3NhZ2UpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IF9SdW50aW1lRXJyb3IoMjMwMCwgbWVzc2FnZSk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBjcmVhdGVEYXRlKHllYXIsIG1vbnRoLCBkYXRlKSB7XG4gIGNvbnN0IG5ld0RhdGUgPSBuZXcgRGF0ZSgwKTtcbiAgbmV3RGF0ZS5zZXRGdWxsWWVhcih5ZWFyLCBtb250aCwgZGF0ZSk7XG4gIG5ld0RhdGUuc2V0SG91cnMoMCwgMCwgMCk7XG4gIHJldHVybiBuZXdEYXRlO1xufVxuZnVuY3Rpb24gZ2V0TmFtZWRGb3JtYXQobG9jYWxlLCBmb3JtYXQpIHtcbiAgY29uc3QgbG9jYWxlSWQgPSBnZXRMb2NhbGVJZChsb2NhbGUpO1xuICBOQU1FRF9GT1JNQVRTW2xvY2FsZUlkXSA/Pz0ge307XG4gIGlmIChOQU1FRF9GT1JNQVRTW2xvY2FsZUlkXVtmb3JtYXRdKSB7XG4gICAgcmV0dXJuIE5BTUVEX0ZPUk1BVFNbbG9jYWxlSWRdW2Zvcm1hdF07XG4gIH1cbiAgbGV0IGZvcm1hdFZhbHVlID0gJyc7XG4gIHN3aXRjaCAoZm9ybWF0KSB7XG4gICAgY2FzZSAnc2hvcnREYXRlJzpcbiAgICAgIGZvcm1hdFZhbHVlID0gZ2V0TG9jYWxlRGF0ZUZvcm1hdChsb2NhbGUsIEZvcm1hdFdpZHRoLlNob3J0KTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ21lZGl1bURhdGUnOlxuICAgICAgZm9ybWF0VmFsdWUgPSBnZXRMb2NhbGVEYXRlRm9ybWF0KGxvY2FsZSwgRm9ybWF0V2lkdGguTWVkaXVtKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2xvbmdEYXRlJzpcbiAgICAgIGZvcm1hdFZhbHVlID0gZ2V0TG9jYWxlRGF0ZUZvcm1hdChsb2NhbGUsIEZvcm1hdFdpZHRoLkxvbmcpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnZnVsbERhdGUnOlxuICAgICAgZm9ybWF0VmFsdWUgPSBnZXRMb2NhbGVEYXRlRm9ybWF0KGxvY2FsZSwgRm9ybWF0V2lkdGguRnVsbCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdzaG9ydFRpbWUnOlxuICAgICAgZm9ybWF0VmFsdWUgPSBnZXRMb2NhbGVUaW1lRm9ybWF0KGxvY2FsZSwgRm9ybWF0V2lkdGguU2hvcnQpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnbWVkaXVtVGltZSc6XG4gICAgICBmb3JtYXRWYWx1ZSA9IGdldExvY2FsZVRpbWVGb3JtYXQobG9jYWxlLCBGb3JtYXRXaWR0aC5NZWRpdW0pO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnbG9uZ1RpbWUnOlxuICAgICAgZm9ybWF0VmFsdWUgPSBnZXRMb2NhbGVUaW1lRm9ybWF0KGxvY2FsZSwgRm9ybWF0V2lkdGguTG9uZyk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdmdWxsVGltZSc6XG4gICAgICBmb3JtYXRWYWx1ZSA9IGdldExvY2FsZVRpbWVGb3JtYXQobG9jYWxlLCBGb3JtYXRXaWR0aC5GdWxsKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3Nob3J0JzpcbiAgICAgIGNvbnN0IHNob3J0VGltZSA9IGdldE5hbWVkRm9ybWF0KGxvY2FsZSwgJ3Nob3J0VGltZScpO1xuICAgICAgY29uc3Qgc2hvcnREYXRlID0gZ2V0TmFtZWRGb3JtYXQobG9jYWxlLCAnc2hvcnREYXRlJyk7XG4gICAgICBmb3JtYXRWYWx1ZSA9IGZvcm1hdERhdGVUaW1lKGdldExvY2FsZURhdGVUaW1lRm9ybWF0KGxvY2FsZSwgRm9ybWF0V2lkdGguU2hvcnQpLCBbc2hvcnRUaW1lLCBzaG9ydERhdGVdKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ21lZGl1bSc6XG4gICAgICBjb25zdCBtZWRpdW1UaW1lID0gZ2V0TmFtZWRGb3JtYXQobG9jYWxlLCAnbWVkaXVtVGltZScpO1xuICAgICAgY29uc3QgbWVkaXVtRGF0ZSA9IGdldE5hbWVkRm9ybWF0KGxvY2FsZSwgJ21lZGl1bURhdGUnKTtcbiAgICAgIGZvcm1hdFZhbHVlID0gZm9ybWF0RGF0ZVRpbWUoZ2V0TG9jYWxlRGF0ZVRpbWVGb3JtYXQobG9jYWxlLCBGb3JtYXRXaWR0aC5NZWRpdW0pLCBbbWVkaXVtVGltZSwgbWVkaXVtRGF0ZV0pO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnbG9uZyc6XG4gICAgICBjb25zdCBsb25nVGltZSA9IGdldE5hbWVkRm9ybWF0KGxvY2FsZSwgJ2xvbmdUaW1lJyk7XG4gICAgICBjb25zdCBsb25nRGF0ZSA9IGdldE5hbWVkRm9ybWF0KGxvY2FsZSwgJ2xvbmdEYXRlJyk7XG4gICAgICBmb3JtYXRWYWx1ZSA9IGZvcm1hdERhdGVUaW1lKGdldExvY2FsZURhdGVUaW1lRm9ybWF0KGxvY2FsZSwgRm9ybWF0V2lkdGguTG9uZyksIFtsb25nVGltZSwgbG9uZ0RhdGVdKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2Z1bGwnOlxuICAgICAgY29uc3QgZnVsbFRpbWUgPSBnZXROYW1lZEZvcm1hdChsb2NhbGUsICdmdWxsVGltZScpO1xuICAgICAgY29uc3QgZnVsbERhdGUgPSBnZXROYW1lZEZvcm1hdChsb2NhbGUsICdmdWxsRGF0ZScpO1xuICAgICAgZm9ybWF0VmFsdWUgPSBmb3JtYXREYXRlVGltZShnZXRMb2NhbGVEYXRlVGltZUZvcm1hdChsb2NhbGUsIEZvcm1hdFdpZHRoLkZ1bGwpLCBbZnVsbFRpbWUsIGZ1bGxEYXRlXSk7XG4gICAgICBicmVhaztcbiAgfVxuICBpZiAoZm9ybWF0VmFsdWUpIHtcbiAgICBOQU1FRF9GT1JNQVRTW2xvY2FsZUlkXVtmb3JtYXRdID0gZm9ybWF0VmFsdWU7XG4gIH1cbiAgcmV0dXJuIGZvcm1hdFZhbHVlO1xufVxuZnVuY3Rpb24gZm9ybWF0RGF0ZVRpbWUoc3RyLCBvcHRfdmFsdWVzKSB7XG4gIGlmIChvcHRfdmFsdWVzKSB7XG4gICAgc3RyID0gc3RyLnJlcGxhY2UoL1xceyhbXn1dKyl9L2csIGZ1bmN0aW9uIChtYXRjaCwga2V5KSB7XG4gICAgICByZXR1cm4gb3B0X3ZhbHVlcyAhPSBudWxsICYmIGtleSBpbiBvcHRfdmFsdWVzID8gb3B0X3ZhbHVlc1trZXldIDogbWF0Y2g7XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHN0cjtcbn1cbmZ1bmN0aW9uIHBhZE51bWJlcihudW0sIGRpZ2l0cywgbWludXNTaWduID0gJy0nLCB0cmltLCBuZWdXcmFwKSB7XG4gIGxldCBuZWcgPSAnJztcbiAgaWYgKG51bSA8IDAgfHwgbmVnV3JhcCAmJiBudW0gPD0gMCkge1xuICAgIGlmIChuZWdXcmFwKSB7XG4gICAgICBudW0gPSAtbnVtICsgMTtcbiAgICB9IGVsc2Uge1xuICAgICAgbnVtID0gLW51bTtcbiAgICAgIG5lZyA9IG1pbnVzU2lnbjtcbiAgICB9XG4gIH1cbiAgbGV0IHN0ck51bSA9IFN0cmluZyhudW0pO1xuICB3aGlsZSAoc3RyTnVtLmxlbmd0aCA8IGRpZ2l0cykge1xuICAgIHN0ck51bSA9ICcwJyArIHN0ck51bTtcbiAgfVxuICBpZiAodHJpbSkge1xuICAgIHN0ck51bSA9IHN0ck51bS5zbGljZShzdHJOdW0ubGVuZ3RoIC0gZGlnaXRzKTtcbiAgfVxuICByZXR1cm4gbmVnICsgc3RyTnVtO1xufVxuZnVuY3Rpb24gZm9ybWF0RnJhY3Rpb25hbFNlY29uZHMobWlsbGlzZWNvbmRzLCBkaWdpdHMpIHtcbiAgY29uc3Qgc3RyTXMgPSBwYWROdW1iZXIobWlsbGlzZWNvbmRzLCAzKTtcbiAgcmV0dXJuIHN0ck1zLnN1YnN0cmluZygwLCBkaWdpdHMpO1xufVxuZnVuY3Rpb24gZGF0ZUdldHRlcihuYW1lLCBzaXplLCBvZmZzZXQgPSAwLCB0cmltID0gZmFsc2UsIG5lZ1dyYXAgPSBmYWxzZSkge1xuICByZXR1cm4gZnVuY3Rpb24gKGRhdGUsIGxvY2FsZSkge1xuICAgIGxldCBwYXJ0ID0gZ2V0RGF0ZVBhcnQobmFtZSwgZGF0ZSk7XG4gICAgaWYgKG9mZnNldCA+IDAgfHwgcGFydCA+IC1vZmZzZXQpIHtcbiAgICAgIHBhcnQgKz0gb2Zmc2V0O1xuICAgIH1cbiAgICBpZiAobmFtZSA9PT0gMykge1xuICAgICAgaWYgKHBhcnQgPT09IDAgJiYgb2Zmc2V0ID09PSAtMTIpIHtcbiAgICAgICAgcGFydCA9IDEyO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAobmFtZSA9PT0gNikge1xuICAgICAgcmV0dXJuIGZvcm1hdEZyYWN0aW9uYWxTZWNvbmRzKHBhcnQsIHNpemUpO1xuICAgIH1cbiAgICBjb25zdCBsb2NhbGVNaW51cyA9IGdldExvY2FsZU51bWJlclN5bWJvbChsb2NhbGUsIE51bWJlclN5bWJvbC5NaW51c1NpZ24pO1xuICAgIHJldHVybiBwYWROdW1iZXIocGFydCwgc2l6ZSwgbG9jYWxlTWludXMsIHRyaW0sIG5lZ1dyYXApO1xuICB9O1xufVxuZnVuY3Rpb24gZ2V0RGF0ZVBhcnQocGFydCwgZGF0ZSkge1xuICBzd2l0Y2ggKHBhcnQpIHtcbiAgICBjYXNlIDA6XG4gICAgICByZXR1cm4gZGF0ZS5nZXRGdWxsWWVhcigpO1xuICAgIGNhc2UgMTpcbiAgICAgIHJldHVybiBkYXRlLmdldE1vbnRoKCk7XG4gICAgY2FzZSAyOlxuICAgICAgcmV0dXJuIGRhdGUuZ2V0RGF0ZSgpO1xuICAgIGNhc2UgMzpcbiAgICAgIHJldHVybiBkYXRlLmdldEhvdXJzKCk7XG4gICAgY2FzZSA0OlxuICAgICAgcmV0dXJuIGRhdGUuZ2V0TWludXRlcygpO1xuICAgIGNhc2UgNTpcbiAgICAgIHJldHVybiBkYXRlLmdldFNlY29uZHMoKTtcbiAgICBjYXNlIDY6XG4gICAgICByZXR1cm4gZGF0ZS5nZXRNaWxsaXNlY29uZHMoKTtcbiAgICBjYXNlIDc6XG4gICAgICByZXR1cm4gZGF0ZS5nZXREYXkoKTtcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IF9SdW50aW1lRXJyb3IoMjMwMSwgbmdEZXZNb2RlICYmIGBVbmtub3duIERhdGVUeXBlIHZhbHVlIFwiJHtwYXJ0fVwiLmApO1xuICB9XG59XG5mdW5jdGlvbiBkYXRlU3RyR2V0dGVyKG5hbWUsIHdpZHRoLCBmb3JtID0gRm9ybVN0eWxlLkZvcm1hdCwgZXh0ZW5kZWQgPSBmYWxzZSkge1xuICByZXR1cm4gZnVuY3Rpb24gKGRhdGUsIGxvY2FsZSkge1xuICAgIHJldHVybiBnZXREYXRlVHJhbnNsYXRpb24oZGF0ZSwgbG9jYWxlLCBuYW1lLCB3aWR0aCwgZm9ybSwgZXh0ZW5kZWQpO1xuICB9O1xufVxuZnVuY3Rpb24gZ2V0RGF0ZVRyYW5zbGF0aW9uKGRhdGUsIGxvY2FsZSwgbmFtZSwgd2lkdGgsIGZvcm0sIGV4dGVuZGVkKSB7XG4gIHN3aXRjaCAobmFtZSkge1xuICAgIGNhc2UgMjpcbiAgICAgIHJldHVybiBnZXRMb2NhbGVNb250aE5hbWVzKGxvY2FsZSwgZm9ybSwgd2lkdGgpW2RhdGUuZ2V0TW9udGgoKV07XG4gICAgY2FzZSAxOlxuICAgICAgcmV0dXJuIGdldExvY2FsZURheU5hbWVzKGxvY2FsZSwgZm9ybSwgd2lkdGgpW2RhdGUuZ2V0RGF5KCldO1xuICAgIGNhc2UgMDpcbiAgICAgIGNvbnN0IGN1cnJlbnRIb3VycyA9IGRhdGUuZ2V0SG91cnMoKTtcbiAgICAgIGNvbnN0IGN1cnJlbnRNaW51dGVzID0gZGF0ZS5nZXRNaW51dGVzKCk7XG4gICAgICBpZiAoZXh0ZW5kZWQpIHtcbiAgICAgICAgY29uc3QgcnVsZXMgPSBnZXRMb2NhbGVFeHRyYURheVBlcmlvZFJ1bGVzKGxvY2FsZSk7XG4gICAgICAgIGNvbnN0IGRheVBlcmlvZHMgPSBnZXRMb2NhbGVFeHRyYURheVBlcmlvZHMobG9jYWxlLCBmb3JtLCB3aWR0aCk7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gcnVsZXMuZmluZEluZGV4KHJ1bGUgPT4ge1xuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHJ1bGUpKSB7XG4gICAgICAgICAgICBjb25zdCBbZnJvbSwgdG9dID0gcnVsZTtcbiAgICAgICAgICAgIGNvbnN0IGFmdGVyRnJvbSA9IGN1cnJlbnRIb3VycyA+PSBmcm9tLmhvdXJzICYmIGN1cnJlbnRNaW51dGVzID49IGZyb20ubWludXRlcztcbiAgICAgICAgICAgIGNvbnN0IGJlZm9yZVRvID0gY3VycmVudEhvdXJzIDwgdG8uaG91cnMgfHwgY3VycmVudEhvdXJzID09PSB0by5ob3VycyAmJiBjdXJyZW50TWludXRlcyA8IHRvLm1pbnV0ZXM7XG4gICAgICAgICAgICBpZiAoZnJvbS5ob3VycyA8IHRvLmhvdXJzKSB7XG4gICAgICAgICAgICAgIGlmIChhZnRlckZyb20gJiYgYmVmb3JlVG8pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChhZnRlckZyb20gfHwgYmVmb3JlVG8pIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChydWxlLmhvdXJzID09PSBjdXJyZW50SG91cnMgJiYgcnVsZS5taW51dGVzID09PSBjdXJyZW50TWludXRlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICAgIHJldHVybiBkYXlQZXJpb2RzW2luZGV4XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGdldExvY2FsZURheVBlcmlvZHMobG9jYWxlLCBmb3JtLCB3aWR0aClbY3VycmVudEhvdXJzIDwgMTIgPyAwIDogMV07XG4gICAgY2FzZSAzOlxuICAgICAgcmV0dXJuIGdldExvY2FsZUVyYU5hbWVzKGxvY2FsZSwgd2lkdGgpW2RhdGUuZ2V0RnVsbFllYXIoKSA8PSAwID8gMCA6IDFdO1xuICAgIGRlZmF1bHQ6XG4gICAgICBjb25zdCB1bmV4cGVjdGVkID0gbmFtZTtcbiAgICAgIHRocm93IG5ldyBfUnVudGltZUVycm9yKDIzMDIsIG5nRGV2TW9kZSAmJiBgdW5leHBlY3RlZCB0cmFuc2xhdGlvbiB0eXBlICR7dW5leHBlY3RlZH1gKTtcbiAgfVxufVxuZnVuY3Rpb24gdGltZVpvbmVHZXR0ZXIod2lkdGgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChkYXRlLCBsb2NhbGUsIG9mZnNldCkge1xuICAgIGNvbnN0IHpvbmUgPSAtMSAqIG9mZnNldDtcbiAgICBjb25zdCBtaW51c1NpZ24gPSBnZXRMb2NhbGVOdW1iZXJTeW1ib2wobG9jYWxlLCBOdW1iZXJTeW1ib2wuTWludXNTaWduKTtcbiAgICBjb25zdCBob3VycyA9IHpvbmUgPiAwID8gTWF0aC5mbG9vcih6b25lIC8gNjApIDogTWF0aC5jZWlsKHpvbmUgLyA2MCk7XG4gICAgc3dpdGNoICh3aWR0aCkge1xuICAgICAgY2FzZSAwOlxuICAgICAgICByZXR1cm4gKHpvbmUgPj0gMCA/ICcrJyA6ICcnKSArIHBhZE51bWJlcihob3VycywgMiwgbWludXNTaWduKSArIHBhZE51bWJlcihNYXRoLmFicyh6b25lICUgNjApLCAyLCBtaW51c1NpZ24pO1xuICAgICAgY2FzZSAxOlxuICAgICAgICByZXR1cm4gJ0dNVCcgKyAoem9uZSA+PSAwID8gJysnIDogJycpICsgcGFkTnVtYmVyKGhvdXJzLCAxLCBtaW51c1NpZ24pO1xuICAgICAgY2FzZSAyOlxuICAgICAgICByZXR1cm4gJ0dNVCcgKyAoem9uZSA+PSAwID8gJysnIDogJycpICsgcGFkTnVtYmVyKGhvdXJzLCAyLCBtaW51c1NpZ24pICsgJzonICsgcGFkTnVtYmVyKE1hdGguYWJzKHpvbmUgJSA2MCksIDIsIG1pbnVzU2lnbik7XG4gICAgICBjYXNlIDM6XG4gICAgICAgIGlmIChvZmZzZXQgPT09IDApIHtcbiAgICAgICAgICByZXR1cm4gJ1onO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiAoem9uZSA+PSAwID8gJysnIDogJycpICsgcGFkTnVtYmVyKGhvdXJzLCAyLCBtaW51c1NpZ24pICsgJzonICsgcGFkTnVtYmVyKE1hdGguYWJzKHpvbmUgJSA2MCksIDIsIG1pbnVzU2lnbik7XG4gICAgICAgIH1cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBfUnVudGltZUVycm9yKDIzMTAsIG5nRGV2TW9kZSAmJiBgVW5rbm93biB6b25lIHdpZHRoIFwiJHt3aWR0aH1cImApO1xuICAgIH1cbiAgfTtcbn1cbmNvbnN0IEpBTlVBUlkgPSAwO1xuY29uc3QgVEhVUlNEQVkgPSA0O1xuZnVuY3Rpb24gZ2V0Rmlyc3RUaHVyc2RheU9mWWVhcih5ZWFyKSB7XG4gIGNvbnN0IGZpcnN0RGF5T2ZZZWFyID0gY3JlYXRlRGF0ZSh5ZWFyLCBKQU5VQVJZLCAxKS5nZXREYXkoKTtcbiAgcmV0dXJuIGNyZWF0ZURhdGUoeWVhciwgMCwgMSArIChmaXJzdERheU9mWWVhciA8PSBUSFVSU0RBWSA/IFRIVVJTREFZIDogVEhVUlNEQVkgKyA3KSAtIGZpcnN0RGF5T2ZZZWFyKTtcbn1cbmZ1bmN0aW9uIGdldFRodXJzZGF5VGhpc0lzb1dlZWsoZGF0ZXRpbWUpIHtcbiAgY29uc3QgY3VycmVudERheSA9IGRhdGV0aW1lLmdldERheSgpO1xuICBjb25zdCBkZWx0YVRvVGh1cnNkYXkgPSBjdXJyZW50RGF5ID09PSAwID8gLTMgOiBUSFVSU0RBWSAtIGN1cnJlbnREYXk7XG4gIHJldHVybiBjcmVhdGVEYXRlKGRhdGV0aW1lLmdldEZ1bGxZZWFyKCksIGRhdGV0aW1lLmdldE1vbnRoKCksIGRhdGV0aW1lLmdldERhdGUoKSArIGRlbHRhVG9UaHVyc2RheSk7XG59XG5mdW5jdGlvbiB3ZWVrR2V0dGVyKHNpemUsIG1vbnRoQmFzZWQgPSBmYWxzZSkge1xuICByZXR1cm4gZnVuY3Rpb24gKGRhdGUsIGxvY2FsZSkge1xuICAgIGxldCByZXN1bHQ7XG4gICAgaWYgKG1vbnRoQmFzZWQpIHtcbiAgICAgIGNvbnN0IG5iRGF5c0JlZm9yZTFzdERheU9mTW9udGggPSBuZXcgRGF0ZShkYXRlLmdldEZ1bGxZZWFyKCksIGRhdGUuZ2V0TW9udGgoKSwgMSkuZ2V0RGF5KCkgLSAxO1xuICAgICAgY29uc3QgdG9kYXkgPSBkYXRlLmdldERhdGUoKTtcbiAgICAgIHJlc3VsdCA9IDEgKyBNYXRoLmZsb29yKCh0b2RheSArIG5iRGF5c0JlZm9yZTFzdERheU9mTW9udGgpIC8gNyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHRoaXNUaHVycyA9IGdldFRodXJzZGF5VGhpc0lzb1dlZWsoZGF0ZSk7XG4gICAgICBjb25zdCBmaXJzdFRodXJzID0gZ2V0Rmlyc3RUaHVyc2RheU9mWWVhcih0aGlzVGh1cnMuZ2V0RnVsbFllYXIoKSk7XG4gICAgICBjb25zdCBkaWZmID0gdGhpc1RodXJzLmdldFRpbWUoKSAtIGZpcnN0VGh1cnMuZ2V0VGltZSgpO1xuICAgICAgcmVzdWx0ID0gMSArIE1hdGgucm91bmQoZGlmZiAvIDYuMDQ4ZTgpO1xuICAgIH1cbiAgICByZXR1cm4gcGFkTnVtYmVyKHJlc3VsdCwgc2l6ZSwgZ2V0TG9jYWxlTnVtYmVyU3ltYm9sKGxvY2FsZSwgTnVtYmVyU3ltYm9sLk1pbnVzU2lnbikpO1xuICB9O1xufVxuZnVuY3Rpb24gd2Vla051bWJlcmluZ1llYXJHZXR0ZXIoc2l6ZSwgdHJpbSA9IGZhbHNlKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoZGF0ZSwgbG9jYWxlKSB7XG4gICAgY29uc3QgdGhpc1RodXJzID0gZ2V0VGh1cnNkYXlUaGlzSXNvV2VlayhkYXRlKTtcbiAgICBjb25zdCB3ZWVrTnVtYmVyaW5nWWVhciA9IHRoaXNUaHVycy5nZXRGdWxsWWVhcigpO1xuICAgIHJldHVybiBwYWROdW1iZXIod2Vla051bWJlcmluZ1llYXIsIHNpemUsIGdldExvY2FsZU51bWJlclN5bWJvbChsb2NhbGUsIE51bWJlclN5bWJvbC5NaW51c1NpZ24pLCB0cmltKTtcbiAgfTtcbn1cbmNvbnN0IERBVEVfRk9STUFUUyA9IHt9O1xuZnVuY3Rpb24gZ2V0RGF0ZUZvcm1hdHRlcihmb3JtYXQpIHtcbiAgaWYgKERBVEVfRk9STUFUU1tmb3JtYXRdKSB7XG4gICAgcmV0dXJuIERBVEVfRk9STUFUU1tmb3JtYXRdO1xuICB9XG4gIGxldCBmb3JtYXR0ZXI7XG4gIHN3aXRjaCAoZm9ybWF0KSB7XG4gICAgY2FzZSAnRyc6XG4gICAgY2FzZSAnR0cnOlxuICAgIGNhc2UgJ0dHRyc6XG4gICAgICBmb3JtYXR0ZXIgPSBkYXRlU3RyR2V0dGVyKDMsIFRyYW5zbGF0aW9uV2lkdGguQWJicmV2aWF0ZWQpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnR0dHRyc6XG4gICAgICBmb3JtYXR0ZXIgPSBkYXRlU3RyR2V0dGVyKDMsIFRyYW5zbGF0aW9uV2lkdGguV2lkZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdHR0dHRyc6XG4gICAgICBmb3JtYXR0ZXIgPSBkYXRlU3RyR2V0dGVyKDMsIFRyYW5zbGF0aW9uV2lkdGguTmFycm93KTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3knOlxuICAgICAgZm9ybWF0dGVyID0gZGF0ZUdldHRlcigwLCAxLCAwLCBmYWxzZSwgdHJ1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICd5eSc6XG4gICAgICBmb3JtYXR0ZXIgPSBkYXRlR2V0dGVyKDAsIDIsIDAsIHRydWUsIHRydWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAneXl5JzpcbiAgICAgIGZvcm1hdHRlciA9IGRhdGVHZXR0ZXIoMCwgMywgMCwgZmFsc2UsIHRydWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAneXl5eSc6XG4gICAgICBmb3JtYXR0ZXIgPSBkYXRlR2V0dGVyKDAsIDQsIDAsIGZhbHNlLCB0cnVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ1knOlxuICAgICAgZm9ybWF0dGVyID0gd2Vla051bWJlcmluZ1llYXJHZXR0ZXIoMSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdZWSc6XG4gICAgICBmb3JtYXR0ZXIgPSB3ZWVrTnVtYmVyaW5nWWVhckdldHRlcigyLCB0cnVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ1lZWSc6XG4gICAgICBmb3JtYXR0ZXIgPSB3ZWVrTnVtYmVyaW5nWWVhckdldHRlcigzKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ1lZWVknOlxuICAgICAgZm9ybWF0dGVyID0gd2Vla051bWJlcmluZ1llYXJHZXR0ZXIoNCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdNJzpcbiAgICBjYXNlICdMJzpcbiAgICAgIGZvcm1hdHRlciA9IGRhdGVHZXR0ZXIoMSwgMSwgMSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdNTSc6XG4gICAgY2FzZSAnTEwnOlxuICAgICAgZm9ybWF0dGVyID0gZGF0ZUdldHRlcigxLCAyLCAxKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ01NTSc6XG4gICAgICBmb3JtYXR0ZXIgPSBkYXRlU3RyR2V0dGVyKDIsIFRyYW5zbGF0aW9uV2lkdGguQWJicmV2aWF0ZWQpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnTU1NTSc6XG4gICAgICBmb3JtYXR0ZXIgPSBkYXRlU3RyR2V0dGVyKDIsIFRyYW5zbGF0aW9uV2lkdGguV2lkZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdNTU1NTSc6XG4gICAgICBmb3JtYXR0ZXIgPSBkYXRlU3RyR2V0dGVyKDIsIFRyYW5zbGF0aW9uV2lkdGguTmFycm93KTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ0xMTCc6XG4gICAgICBmb3JtYXR0ZXIgPSBkYXRlU3RyR2V0dGVyKDIsIFRyYW5zbGF0aW9uV2lkdGguQWJicmV2aWF0ZWQsIEZvcm1TdHlsZS5TdGFuZGFsb25lKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ0xMTEwnOlxuICAgICAgZm9ybWF0dGVyID0gZGF0ZVN0ckdldHRlcigyLCBUcmFuc2xhdGlvbldpZHRoLldpZGUsIEZvcm1TdHlsZS5TdGFuZGFsb25lKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ0xMTExMJzpcbiAgICAgIGZvcm1hdHRlciA9IGRhdGVTdHJHZXR0ZXIoMiwgVHJhbnNsYXRpb25XaWR0aC5OYXJyb3csIEZvcm1TdHlsZS5TdGFuZGFsb25lKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3cnOlxuICAgICAgZm9ybWF0dGVyID0gd2Vla0dldHRlcigxKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3d3JzpcbiAgICAgIGZvcm1hdHRlciA9IHdlZWtHZXR0ZXIoMik7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdXJzpcbiAgICAgIGZvcm1hdHRlciA9IHdlZWtHZXR0ZXIoMSwgdHJ1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdkJzpcbiAgICAgIGZvcm1hdHRlciA9IGRhdGVHZXR0ZXIoMiwgMSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdkZCc6XG4gICAgICBmb3JtYXR0ZXIgPSBkYXRlR2V0dGVyKDIsIDIpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnYyc6XG4gICAgY2FzZSAnY2MnOlxuICAgICAgZm9ybWF0dGVyID0gZGF0ZUdldHRlcig3LCAxKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2NjYyc6XG4gICAgICBmb3JtYXR0ZXIgPSBkYXRlU3RyR2V0dGVyKDEsIFRyYW5zbGF0aW9uV2lkdGguQWJicmV2aWF0ZWQsIEZvcm1TdHlsZS5TdGFuZGFsb25lKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2NjY2MnOlxuICAgICAgZm9ybWF0dGVyID0gZGF0ZVN0ckdldHRlcigxLCBUcmFuc2xhdGlvbldpZHRoLldpZGUsIEZvcm1TdHlsZS5TdGFuZGFsb25lKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2NjY2NjJzpcbiAgICAgIGZvcm1hdHRlciA9IGRhdGVTdHJHZXR0ZXIoMSwgVHJhbnNsYXRpb25XaWR0aC5OYXJyb3csIEZvcm1TdHlsZS5TdGFuZGFsb25lKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2NjY2NjYyc6XG4gICAgICBmb3JtYXR0ZXIgPSBkYXRlU3RyR2V0dGVyKDEsIFRyYW5zbGF0aW9uV2lkdGguU2hvcnQsIEZvcm1TdHlsZS5TdGFuZGFsb25lKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ0UnOlxuICAgIGNhc2UgJ0VFJzpcbiAgICBjYXNlICdFRUUnOlxuICAgICAgZm9ybWF0dGVyID0gZGF0ZVN0ckdldHRlcigxLCBUcmFuc2xhdGlvbldpZHRoLkFiYnJldmlhdGVkKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ0VFRUUnOlxuICAgICAgZm9ybWF0dGVyID0gZGF0ZVN0ckdldHRlcigxLCBUcmFuc2xhdGlvbldpZHRoLldpZGUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnRUVFRUUnOlxuICAgICAgZm9ybWF0dGVyID0gZGF0ZVN0ckdldHRlcigxLCBUcmFuc2xhdGlvbldpZHRoLk5hcnJvdyk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdFRUVFRUUnOlxuICAgICAgZm9ybWF0dGVyID0gZGF0ZVN0ckdldHRlcigxLCBUcmFuc2xhdGlvbldpZHRoLlNob3J0KTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2EnOlxuICAgIGNhc2UgJ2FhJzpcbiAgICBjYXNlICdhYWEnOlxuICAgICAgZm9ybWF0dGVyID0gZGF0ZVN0ckdldHRlcigwLCBUcmFuc2xhdGlvbldpZHRoLkFiYnJldmlhdGVkKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2FhYWEnOlxuICAgICAgZm9ybWF0dGVyID0gZGF0ZVN0ckdldHRlcigwLCBUcmFuc2xhdGlvbldpZHRoLldpZGUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnYWFhYWEnOlxuICAgICAgZm9ybWF0dGVyID0gZGF0ZVN0ckdldHRlcigwLCBUcmFuc2xhdGlvbldpZHRoLk5hcnJvdyk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdiJzpcbiAgICBjYXNlICdiYic6XG4gICAgY2FzZSAnYmJiJzpcbiAgICAgIGZvcm1hdHRlciA9IGRhdGVTdHJHZXR0ZXIoMCwgVHJhbnNsYXRpb25XaWR0aC5BYmJyZXZpYXRlZCwgRm9ybVN0eWxlLlN0YW5kYWxvbmUsIHRydWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnYmJiYic6XG4gICAgICBmb3JtYXR0ZXIgPSBkYXRlU3RyR2V0dGVyKDAsIFRyYW5zbGF0aW9uV2lkdGguV2lkZSwgRm9ybVN0eWxlLlN0YW5kYWxvbmUsIHRydWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnYmJiYmInOlxuICAgICAgZm9ybWF0dGVyID0gZGF0ZVN0ckdldHRlcigwLCBUcmFuc2xhdGlvbldpZHRoLk5hcnJvdywgRm9ybVN0eWxlLlN0YW5kYWxvbmUsIHRydWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnQic6XG4gICAgY2FzZSAnQkInOlxuICAgIGNhc2UgJ0JCQic6XG4gICAgICBmb3JtYXR0ZXIgPSBkYXRlU3RyR2V0dGVyKDAsIFRyYW5zbGF0aW9uV2lkdGguQWJicmV2aWF0ZWQsIEZvcm1TdHlsZS5Gb3JtYXQsIHRydWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnQkJCQic6XG4gICAgICBmb3JtYXR0ZXIgPSBkYXRlU3RyR2V0dGVyKDAsIFRyYW5zbGF0aW9uV2lkdGguV2lkZSwgRm9ybVN0eWxlLkZvcm1hdCwgdHJ1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdCQkJCQic6XG4gICAgICBmb3JtYXR0ZXIgPSBkYXRlU3RyR2V0dGVyKDAsIFRyYW5zbGF0aW9uV2lkdGguTmFycm93LCBGb3JtU3R5bGUuRm9ybWF0LCB0cnVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2gnOlxuICAgICAgZm9ybWF0dGVyID0gZGF0ZUdldHRlcigzLCAxLCAtMTIpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnaGgnOlxuICAgICAgZm9ybWF0dGVyID0gZGF0ZUdldHRlcigzLCAyLCAtMTIpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnSCc6XG4gICAgICBmb3JtYXR0ZXIgPSBkYXRlR2V0dGVyKDMsIDEpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnSEgnOlxuICAgICAgZm9ybWF0dGVyID0gZGF0ZUdldHRlcigzLCAyKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ20nOlxuICAgICAgZm9ybWF0dGVyID0gZGF0ZUdldHRlcig0LCAxKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ21tJzpcbiAgICAgIGZvcm1hdHRlciA9IGRhdGVHZXR0ZXIoNCwgMik7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdzJzpcbiAgICAgIGZvcm1hdHRlciA9IGRhdGVHZXR0ZXIoNSwgMSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdzcyc6XG4gICAgICBmb3JtYXR0ZXIgPSBkYXRlR2V0dGVyKDUsIDIpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnUyc6XG4gICAgICBmb3JtYXR0ZXIgPSBkYXRlR2V0dGVyKDYsIDEpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnU1MnOlxuICAgICAgZm9ybWF0dGVyID0gZGF0ZUdldHRlcig2LCAyKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ1NTUyc6XG4gICAgICBmb3JtYXR0ZXIgPSBkYXRlR2V0dGVyKDYsIDMpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnWic6XG4gICAgY2FzZSAnWlonOlxuICAgIGNhc2UgJ1paWic6XG4gICAgICBmb3JtYXR0ZXIgPSB0aW1lWm9uZUdldHRlcigwKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ1paWlpaJzpcbiAgICAgIGZvcm1hdHRlciA9IHRpbWVab25lR2V0dGVyKDMpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnTyc6XG4gICAgY2FzZSAnT08nOlxuICAgIGNhc2UgJ09PTyc6XG4gICAgY2FzZSAneic6XG4gICAgY2FzZSAnenonOlxuICAgIGNhc2UgJ3p6eic6XG4gICAgICBmb3JtYXR0ZXIgPSB0aW1lWm9uZUdldHRlcigxKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ09PT08nOlxuICAgIGNhc2UgJ1paWlonOlxuICAgIGNhc2UgJ3p6enonOlxuICAgICAgZm9ybWF0dGVyID0gdGltZVpvbmVHZXR0ZXIoMik7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgREFURV9GT1JNQVRTW2Zvcm1hdF0gPSBmb3JtYXR0ZXI7XG4gIHJldHVybiBmb3JtYXR0ZXI7XG59XG5mdW5jdGlvbiB0aW1lem9uZVRvT2Zmc2V0KHRpbWV6b25lLCBmYWxsYmFjaykge1xuICB0aW1lem9uZSA9IHRpbWV6b25lLnJlcGxhY2UoLzovZywgJycpO1xuICBjb25zdCByZXF1ZXN0ZWRUaW1lem9uZU9mZnNldCA9IERhdGUucGFyc2UoJ0phbiAwMSwgMTk3MCAwMDowMDowMCAnICsgdGltZXpvbmUpIC8gNjAwMDA7XG4gIHJldHVybiBpc05hTihyZXF1ZXN0ZWRUaW1lem9uZU9mZnNldCkgPyBmYWxsYmFjayA6IHJlcXVlc3RlZFRpbWV6b25lT2Zmc2V0O1xufVxuZnVuY3Rpb24gYWRkRGF0ZU1pbnV0ZXMoZGF0ZSwgbWludXRlcykge1xuICBkYXRlID0gbmV3IERhdGUoZGF0ZS5nZXRUaW1lKCkpO1xuICBkYXRlLnNldE1pbnV0ZXMoZGF0ZS5nZXRNaW51dGVzKCkgKyBtaW51dGVzKTtcbiAgcmV0dXJuIGRhdGU7XG59XG5mdW5jdGlvbiBjb252ZXJ0VGltZXpvbmVUb0xvY2FsKGRhdGUsIHRpbWV6b25lLCByZXZlcnNlKSB7XG4gIGNvbnN0IHJldmVyc2VWYWx1ZSA9IC0xO1xuICBjb25zdCBkYXRlVGltZXpvbmVPZmZzZXQgPSBkYXRlLmdldFRpbWV6b25lT2Zmc2V0KCk7XG4gIGNvbnN0IHRpbWV6b25lT2Zmc2V0ID0gdGltZXpvbmVUb09mZnNldCh0aW1lem9uZSwgZGF0ZVRpbWV6b25lT2Zmc2V0KTtcbiAgcmV0dXJuIGFkZERhdGVNaW51dGVzKGRhdGUsIHJldmVyc2VWYWx1ZSAqICh0aW1lem9uZU9mZnNldCAtIGRhdGVUaW1lem9uZU9mZnNldCkpO1xufVxuZnVuY3Rpb24gdG9EYXRlKHZhbHVlKSB7XG4gIGlmIChpc0RhdGUodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmICFpc05hTih2YWx1ZSkpIHtcbiAgICByZXR1cm4gbmV3IERhdGUodmFsdWUpO1xuICB9XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgdmFsdWUgPSB2YWx1ZS50cmltKCk7XG4gICAgaWYgKC9eKFxcZHs0fSgtXFxkezEsMn0oLVxcZHsxLDJ9KT8pPykkLy50ZXN0KHZhbHVlKSkge1xuICAgICAgY29uc3QgW3ksIG0gPSAxLCBkID0gMV0gPSB2YWx1ZS5zcGxpdCgnLScpLm1hcCh2YWwgPT4gK3ZhbCk7XG4gICAgICByZXR1cm4gY3JlYXRlRGF0ZSh5LCBtIC0gMSwgZCk7XG4gICAgfVxuICAgIGNvbnN0IHBhcnNlZE5iID0gcGFyc2VGbG9hdCh2YWx1ZSk7XG4gICAgaWYgKCFpc05hTih2YWx1ZSAtIHBhcnNlZE5iKSkge1xuICAgICAgcmV0dXJuIG5ldyBEYXRlKHBhcnNlZE5iKTtcbiAgICB9XG4gICAgbGV0IG1hdGNoO1xuICAgIGlmIChtYXRjaCA9IHZhbHVlLm1hdGNoKElTTzg2MDFfREFURV9SRUdFWCkpIHtcbiAgICAgIHJldHVybiBpc29TdHJpbmdUb0RhdGUobWF0Y2gpO1xuICAgIH1cbiAgfVxuICBjb25zdCBkYXRlID0gbmV3IERhdGUodmFsdWUpO1xuICBpZiAoIWlzRGF0ZShkYXRlKSkge1xuICAgIHRocm93IG5ldyBfUnVudGltZUVycm9yKDIzMTEsIG5nRGV2TW9kZSAmJiBgVW5hYmxlIHRvIGNvbnZlcnQgXCIke3ZhbHVlfVwiIGludG8gYSBkYXRlYCk7XG4gIH1cbiAgcmV0dXJuIGRhdGU7XG59XG5mdW5jdGlvbiBpc29TdHJpbmdUb0RhdGUobWF0Y2gpIHtcbiAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKDApO1xuICBsZXQgdHpIb3VyID0gMDtcbiAgbGV0IHR6TWluID0gMDtcbiAgY29uc3QgZGF0ZVNldHRlciA9IG1hdGNoWzhdID8gZGF0ZS5zZXRVVENGdWxsWWVhciA6IGRhdGUuc2V0RnVsbFllYXI7XG4gIGNvbnN0IHRpbWVTZXR0ZXIgPSBtYXRjaFs4XSA/IGRhdGUuc2V0VVRDSG91cnMgOiBkYXRlLnNldEhvdXJzO1xuICBpZiAobWF0Y2hbOV0pIHtcbiAgICB0ekhvdXIgPSBOdW1iZXIobWF0Y2hbOV0gKyBtYXRjaFsxMF0pO1xuICAgIHR6TWluID0gTnVtYmVyKG1hdGNoWzldICsgbWF0Y2hbMTFdKTtcbiAgfVxuICBkYXRlU2V0dGVyLmNhbGwoZGF0ZSwgTnVtYmVyKG1hdGNoWzFdKSwgTnVtYmVyKG1hdGNoWzJdKSAtIDEsIE51bWJlcihtYXRjaFszXSkpO1xuICBjb25zdCBoID0gTnVtYmVyKG1hdGNoWzRdIHx8IDApIC0gdHpIb3VyO1xuICBjb25zdCBtID0gTnVtYmVyKG1hdGNoWzVdIHx8IDApIC0gdHpNaW47XG4gIGNvbnN0IHMgPSBOdW1iZXIobWF0Y2hbNl0gfHwgMCk7XG4gIGNvbnN0IG1zID0gTWF0aC5mbG9vcihwYXJzZUZsb2F0KCcwLicgKyAobWF0Y2hbN10gfHwgMCkpICogMTAwMCk7XG4gIHRpbWVTZXR0ZXIuY2FsbChkYXRlLCBoLCBtLCBzLCBtcyk7XG4gIHJldHVybiBkYXRlO1xufVxuZnVuY3Rpb24gaXNEYXRlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIERhdGUgJiYgIWlzTmFOKHZhbHVlLnZhbHVlT2YoKSk7XG59XG5jb25zdCBOVU1CRVJfRk9STUFUX1JFR0VYUCA9IC9eKFxcZCspP1xcLigoXFxkKykoLShcXGQrKSk/KT8kLztcbmNvbnN0IE1BWF9ESUdJVFMgPSAyMjtcbmNvbnN0IERFQ0lNQUxfU0VQID0gJy4nO1xuY29uc3QgWkVST19DSEFSID0gJzAnO1xuY29uc3QgUEFUVEVSTl9TRVAgPSAnOyc7XG5jb25zdCBHUk9VUF9TRVAgPSAnLCc7XG5jb25zdCBESUdJVF9DSEFSID0gJyMnO1xuY29uc3QgQ1VSUkVOQ1lfQ0hBUiA9ICfCpCc7XG5jb25zdCBQRVJDRU5UX0NIQVIgPSAnJSc7XG5mdW5jdGlvbiBmb3JtYXROdW1iZXJUb0xvY2FsZVN0cmluZyh2YWx1ZSwgcGF0dGVybiwgbG9jYWxlLCBncm91cFN5bWJvbCwgZGVjaW1hbFN5bWJvbCwgZGlnaXRzSW5mbywgaXNQZXJjZW50ID0gZmFsc2UpIHtcbiAgbGV0IGZvcm1hdHRlZFRleHQgPSAnJztcbiAgbGV0IGlzWmVybyA9IGZhbHNlO1xuICBpZiAoIWlzRmluaXRlKHZhbHVlKSkge1xuICAgIGZvcm1hdHRlZFRleHQgPSBnZXRMb2NhbGVOdW1iZXJTeW1ib2wobG9jYWxlLCBOdW1iZXJTeW1ib2wuSW5maW5pdHkpO1xuICB9IGVsc2Uge1xuICAgIGxldCBwYXJzZWROdW1iZXIgPSBwYXJzZU51bWJlcih2YWx1ZSk7XG4gICAgaWYgKGlzUGVyY2VudCkge1xuICAgICAgcGFyc2VkTnVtYmVyID0gdG9QZXJjZW50KHBhcnNlZE51bWJlcik7XG4gICAgfVxuICAgIGxldCBtaW5JbnQgPSBwYXR0ZXJuLm1pbkludDtcbiAgICBsZXQgbWluRnJhY3Rpb24gPSBwYXR0ZXJuLm1pbkZyYWM7XG4gICAgbGV0IG1heEZyYWN0aW9uID0gcGF0dGVybi5tYXhGcmFjO1xuICAgIGlmIChkaWdpdHNJbmZvKSB7XG4gICAgICBjb25zdCBwYXJ0cyA9IGRpZ2l0c0luZm8ubWF0Y2goTlVNQkVSX0ZPUk1BVF9SRUdFWFApO1xuICAgICAgaWYgKHBhcnRzID09PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBfUnVudGltZUVycm9yKDIzMDYsIG5nRGV2TW9kZSAmJiBgJHtkaWdpdHNJbmZvfSBpcyBub3QgYSB2YWxpZCBkaWdpdCBpbmZvYCk7XG4gICAgICB9XG4gICAgICBjb25zdCBtaW5JbnRQYXJ0ID0gcGFydHNbMV07XG4gICAgICBjb25zdCBtaW5GcmFjdGlvblBhcnQgPSBwYXJ0c1szXTtcbiAgICAgIGNvbnN0IG1heEZyYWN0aW9uUGFydCA9IHBhcnRzWzVdO1xuICAgICAgaWYgKG1pbkludFBhcnQgIT0gbnVsbCkge1xuICAgICAgICBtaW5JbnQgPSBwYXJzZUludEF1dG9SYWRpeChtaW5JbnRQYXJ0KTtcbiAgICAgIH1cbiAgICAgIGlmIChtaW5GcmFjdGlvblBhcnQgIT0gbnVsbCkge1xuICAgICAgICBtaW5GcmFjdGlvbiA9IHBhcnNlSW50QXV0b1JhZGl4KG1pbkZyYWN0aW9uUGFydCk7XG4gICAgICB9XG4gICAgICBpZiAobWF4RnJhY3Rpb25QYXJ0ICE9IG51bGwpIHtcbiAgICAgICAgbWF4RnJhY3Rpb24gPSBwYXJzZUludEF1dG9SYWRpeChtYXhGcmFjdGlvblBhcnQpO1xuICAgICAgfSBlbHNlIGlmIChtaW5GcmFjdGlvblBhcnQgIT0gbnVsbCAmJiBtaW5GcmFjdGlvbiA+IG1heEZyYWN0aW9uKSB7XG4gICAgICAgIG1heEZyYWN0aW9uID0gbWluRnJhY3Rpb247XG4gICAgICB9XG4gICAgfVxuICAgIHJvdW5kTnVtYmVyKHBhcnNlZE51bWJlciwgbWluRnJhY3Rpb24sIG1heEZyYWN0aW9uKTtcbiAgICBsZXQgZGlnaXRzID0gcGFyc2VkTnVtYmVyLmRpZ2l0cztcbiAgICBsZXQgaW50ZWdlckxlbiA9IHBhcnNlZE51bWJlci5pbnRlZ2VyTGVuO1xuICAgIGNvbnN0IGV4cG9uZW50ID0gcGFyc2VkTnVtYmVyLmV4cG9uZW50O1xuICAgIGxldCBkZWNpbWFscyA9IFtdO1xuICAgIGlzWmVybyA9IGRpZ2l0cy5ldmVyeShkID0+ICFkKTtcbiAgICBmb3IgKDsgaW50ZWdlckxlbiA8IG1pbkludDsgaW50ZWdlckxlbisrKSB7XG4gICAgICBkaWdpdHMudW5zaGlmdCgwKTtcbiAgICB9XG4gICAgZm9yICg7IGludGVnZXJMZW4gPCAwOyBpbnRlZ2VyTGVuKyspIHtcbiAgICAgIGRpZ2l0cy51bnNoaWZ0KDApO1xuICAgIH1cbiAgICBpZiAoaW50ZWdlckxlbiA+IDApIHtcbiAgICAgIGRlY2ltYWxzID0gZGlnaXRzLnNwbGljZShpbnRlZ2VyTGVuLCBkaWdpdHMubGVuZ3RoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVjaW1hbHMgPSBkaWdpdHM7XG4gICAgICBkaWdpdHMgPSBbMF07XG4gICAgfVxuICAgIGNvbnN0IGdyb3VwcyA9IFtdO1xuICAgIGlmIChkaWdpdHMubGVuZ3RoID49IHBhdHRlcm4ubGdTaXplKSB7XG4gICAgICBncm91cHMudW5zaGlmdChkaWdpdHMuc3BsaWNlKC1wYXR0ZXJuLmxnU2l6ZSwgZGlnaXRzLmxlbmd0aCkuam9pbignJykpO1xuICAgIH1cbiAgICB3aGlsZSAoZGlnaXRzLmxlbmd0aCA+IHBhdHRlcm4uZ1NpemUpIHtcbiAgICAgIGdyb3Vwcy51bnNoaWZ0KGRpZ2l0cy5zcGxpY2UoLXBhdHRlcm4uZ1NpemUsIGRpZ2l0cy5sZW5ndGgpLmpvaW4oJycpKTtcbiAgICB9XG4gICAgaWYgKGRpZ2l0cy5sZW5ndGgpIHtcbiAgICAgIGdyb3Vwcy51bnNoaWZ0KGRpZ2l0cy5qb2luKCcnKSk7XG4gICAgfVxuICAgIGZvcm1hdHRlZFRleHQgPSBncm91cHMuam9pbihnZXRMb2NhbGVOdW1iZXJTeW1ib2wobG9jYWxlLCBncm91cFN5bWJvbCkpO1xuICAgIGlmIChkZWNpbWFscy5sZW5ndGgpIHtcbiAgICAgIGZvcm1hdHRlZFRleHQgKz0gZ2V0TG9jYWxlTnVtYmVyU3ltYm9sKGxvY2FsZSwgZGVjaW1hbFN5bWJvbCkgKyBkZWNpbWFscy5qb2luKCcnKTtcbiAgICB9XG4gICAgaWYgKGV4cG9uZW50KSB7XG4gICAgICBmb3JtYXR0ZWRUZXh0ICs9IGdldExvY2FsZU51bWJlclN5bWJvbChsb2NhbGUsIE51bWJlclN5bWJvbC5FeHBvbmVudGlhbCkgKyAnKycgKyBleHBvbmVudDtcbiAgICB9XG4gIH1cbiAgaWYgKHZhbHVlIDwgMCAmJiAhaXNaZXJvKSB7XG4gICAgZm9ybWF0dGVkVGV4dCA9IHBhdHRlcm4ubmVnUHJlICsgZm9ybWF0dGVkVGV4dCArIHBhdHRlcm4ubmVnU3VmO1xuICB9IGVsc2Uge1xuICAgIGZvcm1hdHRlZFRleHQgPSBwYXR0ZXJuLnBvc1ByZSArIGZvcm1hdHRlZFRleHQgKyBwYXR0ZXJuLnBvc1N1ZjtcbiAgfVxuICByZXR1cm4gZm9ybWF0dGVkVGV4dDtcbn1cbmZ1bmN0aW9uIGZvcm1hdEN1cnJlbmN5KHZhbHVlLCBsb2NhbGUsIGN1cnJlbmN5LCBjdXJyZW5jeUNvZGUsIGRpZ2l0c0luZm8pIHtcbiAgY29uc3QgZm9ybWF0ID0gZ2V0TG9jYWxlTnVtYmVyRm9ybWF0KGxvY2FsZSwgTnVtYmVyRm9ybWF0U3R5bGUuQ3VycmVuY3kpO1xuICBjb25zdCBwYXR0ZXJuID0gcGFyc2VOdW1iZXJGb3JtYXQoZm9ybWF0LCBnZXRMb2NhbGVOdW1iZXJTeW1ib2wobG9jYWxlLCBOdW1iZXJTeW1ib2wuTWludXNTaWduKSk7XG4gIHBhdHRlcm4ubWluRnJhYyA9IGdldE51bWJlck9mQ3VycmVuY3lEaWdpdHMoY3VycmVuY3lDb2RlKTtcbiAgcGF0dGVybi5tYXhGcmFjID0gcGF0dGVybi5taW5GcmFjO1xuICBjb25zdCByZXMgPSBmb3JtYXROdW1iZXJUb0xvY2FsZVN0cmluZyh2YWx1ZSwgcGF0dGVybiwgbG9jYWxlLCBOdW1iZXJTeW1ib2wuQ3VycmVuY3lHcm91cCwgTnVtYmVyU3ltYm9sLkN1cnJlbmN5RGVjaW1hbCwgZGlnaXRzSW5mbyk7XG4gIHJldHVybiByZXMucmVwbGFjZShDVVJSRU5DWV9DSEFSLCBjdXJyZW5jeSkucmVwbGFjZShDVVJSRU5DWV9DSEFSLCAnJykudHJpbSgpO1xufVxuZnVuY3Rpb24gZm9ybWF0UGVyY2VudCh2YWx1ZSwgbG9jYWxlLCBkaWdpdHNJbmZvKSB7XG4gIGNvbnN0IGZvcm1hdCA9IGdldExvY2FsZU51bWJlckZvcm1hdChsb2NhbGUsIE51bWJlckZvcm1hdFN0eWxlLlBlcmNlbnQpO1xuICBjb25zdCBwYXR0ZXJuID0gcGFyc2VOdW1iZXJGb3JtYXQoZm9ybWF0LCBnZXRMb2NhbGVOdW1iZXJTeW1ib2wobG9jYWxlLCBOdW1iZXJTeW1ib2wuTWludXNTaWduKSk7XG4gIGNvbnN0IHJlcyA9IGZvcm1hdE51bWJlclRvTG9jYWxlU3RyaW5nKHZhbHVlLCBwYXR0ZXJuLCBsb2NhbGUsIE51bWJlclN5bWJvbC5Hcm91cCwgTnVtYmVyU3ltYm9sLkRlY2ltYWwsIGRpZ2l0c0luZm8sIHRydWUpO1xuICByZXR1cm4gcmVzLnJlcGxhY2UobmV3IFJlZ0V4cChQRVJDRU5UX0NIQVIsICdnJyksIGdldExvY2FsZU51bWJlclN5bWJvbChsb2NhbGUsIE51bWJlclN5bWJvbC5QZXJjZW50U2lnbikpO1xufVxuZnVuY3Rpb24gZm9ybWF0TnVtYmVyKHZhbHVlLCBsb2NhbGUsIGRpZ2l0c0luZm8pIHtcbiAgY29uc3QgZm9ybWF0ID0gZ2V0TG9jYWxlTnVtYmVyRm9ybWF0KGxvY2FsZSwgTnVtYmVyRm9ybWF0U3R5bGUuRGVjaW1hbCk7XG4gIGNvbnN0IHBhdHRlcm4gPSBwYXJzZU51bWJlckZvcm1hdChmb3JtYXQsIGdldExvY2FsZU51bWJlclN5bWJvbChsb2NhbGUsIE51bWJlclN5bWJvbC5NaW51c1NpZ24pKTtcbiAgcmV0dXJuIGZvcm1hdE51bWJlclRvTG9jYWxlU3RyaW5nKHZhbHVlLCBwYXR0ZXJuLCBsb2NhbGUsIE51bWJlclN5bWJvbC5Hcm91cCwgTnVtYmVyU3ltYm9sLkRlY2ltYWwsIGRpZ2l0c0luZm8pO1xufVxuZnVuY3Rpb24gcGFyc2VOdW1iZXJGb3JtYXQoZm9ybWF0LCBtaW51c1NpZ24gPSAnLScpIHtcbiAgY29uc3QgcCA9IHtcbiAgICBtaW5JbnQ6IDEsXG4gICAgbWluRnJhYzogMCxcbiAgICBtYXhGcmFjOiAwLFxuICAgIHBvc1ByZTogJycsXG4gICAgcG9zU3VmOiAnJyxcbiAgICBuZWdQcmU6ICcnLFxuICAgIG5lZ1N1ZjogJycsXG4gICAgZ1NpemU6IDAsXG4gICAgbGdTaXplOiAwXG4gIH07XG4gIGNvbnN0IHBhdHRlcm5QYXJ0cyA9IGZvcm1hdC5zcGxpdChQQVRURVJOX1NFUCk7XG4gIGNvbnN0IHBvc2l0aXZlID0gcGF0dGVyblBhcnRzWzBdO1xuICBjb25zdCBuZWdhdGl2ZSA9IHBhdHRlcm5QYXJ0c1sxXTtcbiAgY29uc3QgcG9zaXRpdmVQYXJ0cyA9IHBvc2l0aXZlLmluZGV4T2YoREVDSU1BTF9TRVApICE9PSAtMSA/IHBvc2l0aXZlLnNwbGl0KERFQ0lNQUxfU0VQKSA6IFtwb3NpdGl2ZS5zdWJzdHJpbmcoMCwgcG9zaXRpdmUubGFzdEluZGV4T2YoWkVST19DSEFSKSArIDEpLCBwb3NpdGl2ZS5zdWJzdHJpbmcocG9zaXRpdmUubGFzdEluZGV4T2YoWkVST19DSEFSKSArIDEpXSxcbiAgICBpbnRlZ2VyID0gcG9zaXRpdmVQYXJ0c1swXSxcbiAgICBmcmFjdGlvbiA9IHBvc2l0aXZlUGFydHNbMV0gfHwgJyc7XG4gIHAucG9zUHJlID0gaW50ZWdlci5zdWJzdHJpbmcoMCwgaW50ZWdlci5pbmRleE9mKERJR0lUX0NIQVIpKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBmcmFjdGlvbi5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGNoID0gZnJhY3Rpb24uY2hhckF0KGkpO1xuICAgIGlmIChjaCA9PT0gWkVST19DSEFSKSB7XG4gICAgICBwLm1pbkZyYWMgPSBwLm1heEZyYWMgPSBpICsgMTtcbiAgICB9IGVsc2UgaWYgKGNoID09PSBESUdJVF9DSEFSKSB7XG4gICAgICBwLm1heEZyYWMgPSBpICsgMTtcbiAgICB9IGVsc2Uge1xuICAgICAgcC5wb3NTdWYgKz0gY2g7XG4gICAgfVxuICB9XG4gIGNvbnN0IGdyb3VwcyA9IGludGVnZXIuc3BsaXQoR1JPVVBfU0VQKTtcbiAgcC5nU2l6ZSA9IGdyb3Vwc1sxXSA/IGdyb3Vwc1sxXS5sZW5ndGggOiAwO1xuICBwLmxnU2l6ZSA9IGdyb3Vwc1syXSB8fCBncm91cHNbMV0gPyAoZ3JvdXBzWzJdIHx8IGdyb3Vwc1sxXSkubGVuZ3RoIDogMDtcbiAgaWYgKG5lZ2F0aXZlKSB7XG4gICAgY29uc3QgdHJ1bmtMZW4gPSBwb3NpdGl2ZS5sZW5ndGggLSBwLnBvc1ByZS5sZW5ndGggLSBwLnBvc1N1Zi5sZW5ndGgsXG4gICAgICBwb3MgPSBuZWdhdGl2ZS5pbmRleE9mKERJR0lUX0NIQVIpO1xuICAgIHAubmVnUHJlID0gbmVnYXRpdmUuc3Vic3RyaW5nKDAsIHBvcykucmVwbGFjZSgvJy9nLCAnJyk7XG4gICAgcC5uZWdTdWYgPSBuZWdhdGl2ZS5zbGljZShwb3MgKyB0cnVua0xlbikucmVwbGFjZSgvJy9nLCAnJyk7XG4gIH0gZWxzZSB7XG4gICAgcC5uZWdQcmUgPSBtaW51c1NpZ24gKyBwLnBvc1ByZTtcbiAgICBwLm5lZ1N1ZiA9IHAucG9zU3VmO1xuICB9XG4gIHJldHVybiBwO1xufVxuZnVuY3Rpb24gdG9QZXJjZW50KHBhcnNlZE51bWJlcikge1xuICBpZiAocGFyc2VkTnVtYmVyLmRpZ2l0c1swXSA9PT0gMCkge1xuICAgIHJldHVybiBwYXJzZWROdW1iZXI7XG4gIH1cbiAgY29uc3QgZnJhY3Rpb25MZW4gPSBwYXJzZWROdW1iZXIuZGlnaXRzLmxlbmd0aCAtIHBhcnNlZE51bWJlci5pbnRlZ2VyTGVuO1xuICBpZiAocGFyc2VkTnVtYmVyLmV4cG9uZW50KSB7XG4gICAgcGFyc2VkTnVtYmVyLmV4cG9uZW50ICs9IDI7XG4gIH0gZWxzZSB7XG4gICAgaWYgKGZyYWN0aW9uTGVuID09PSAwKSB7XG4gICAgICBwYXJzZWROdW1iZXIuZGlnaXRzLnB1c2goMCwgMCk7XG4gICAgfSBlbHNlIGlmIChmcmFjdGlvbkxlbiA9PT0gMSkge1xuICAgICAgcGFyc2VkTnVtYmVyLmRpZ2l0cy5wdXNoKDApO1xuICAgIH1cbiAgICBwYXJzZWROdW1iZXIuaW50ZWdlckxlbiArPSAyO1xuICB9XG4gIHJldHVybiBwYXJzZWROdW1iZXI7XG59XG5mdW5jdGlvbiBwYXJzZU51bWJlcihudW0pIHtcbiAgbGV0IG51bVN0ciA9IE1hdGguYWJzKG51bSkgKyAnJztcbiAgbGV0IGV4cG9uZW50ID0gMCxcbiAgICBkaWdpdHMsXG4gICAgaW50ZWdlckxlbjtcbiAgbGV0IGksIGosIHplcm9zO1xuICBpZiAoKGludGVnZXJMZW4gPSBudW1TdHIuaW5kZXhPZihERUNJTUFMX1NFUCkpID4gLTEpIHtcbiAgICBudW1TdHIgPSBudW1TdHIucmVwbGFjZShERUNJTUFMX1NFUCwgJycpO1xuICB9XG4gIGlmICgoaSA9IG51bVN0ci5zZWFyY2goL2UvaSkpID4gMCkge1xuICAgIGlmIChpbnRlZ2VyTGVuIDwgMCkgaW50ZWdlckxlbiA9IGk7XG4gICAgaW50ZWdlckxlbiArPSArbnVtU3RyLnNsaWNlKGkgKyAxKTtcbiAgICBudW1TdHIgPSBudW1TdHIuc3Vic3RyaW5nKDAsIGkpO1xuICB9IGVsc2UgaWYgKGludGVnZXJMZW4gPCAwKSB7XG4gICAgaW50ZWdlckxlbiA9IG51bVN0ci5sZW5ndGg7XG4gIH1cbiAgZm9yIChpID0gMDsgbnVtU3RyLmNoYXJBdChpKSA9PT0gWkVST19DSEFSOyBpKyspIHt9XG4gIGlmIChpID09PSAoemVyb3MgPSBudW1TdHIubGVuZ3RoKSkge1xuICAgIGRpZ2l0cyA9IFswXTtcbiAgICBpbnRlZ2VyTGVuID0gMTtcbiAgfSBlbHNlIHtcbiAgICB6ZXJvcy0tO1xuICAgIHdoaWxlIChudW1TdHIuY2hhckF0KHplcm9zKSA9PT0gWkVST19DSEFSKSB6ZXJvcy0tO1xuICAgIGludGVnZXJMZW4gLT0gaTtcbiAgICBkaWdpdHMgPSBbXTtcbiAgICBmb3IgKGogPSAwOyBpIDw9IHplcm9zOyBpKyssIGorKykge1xuICAgICAgZGlnaXRzW2pdID0gTnVtYmVyKG51bVN0ci5jaGFyQXQoaSkpO1xuICAgIH1cbiAgfVxuICBpZiAoaW50ZWdlckxlbiA+IE1BWF9ESUdJVFMpIHtcbiAgICBkaWdpdHMgPSBkaWdpdHMuc3BsaWNlKDAsIE1BWF9ESUdJVFMgLSAxKTtcbiAgICBleHBvbmVudCA9IGludGVnZXJMZW4gLSAxO1xuICAgIGludGVnZXJMZW4gPSAxO1xuICB9XG4gIHJldHVybiB7XG4gICAgZGlnaXRzLFxuICAgIGV4cG9uZW50LFxuICAgIGludGVnZXJMZW5cbiAgfTtcbn1cbmZ1bmN0aW9uIHJvdW5kTnVtYmVyKHBhcnNlZE51bWJlciwgbWluRnJhYywgbWF4RnJhYykge1xuICBpZiAobWluRnJhYyA+IG1heEZyYWMpIHtcbiAgICB0aHJvdyBuZXcgX1J1bnRpbWVFcnJvcigyMzA3LCBuZ0Rldk1vZGUgJiYgYFRoZSBtaW5pbXVtIG51bWJlciBvZiBkaWdpdHMgYWZ0ZXIgZnJhY3Rpb24gKCR7bWluRnJhY30pIGlzIGhpZ2hlciB0aGFuIHRoZSBtYXhpbXVtICgke21heEZyYWN9KS5gKTtcbiAgfVxuICBsZXQgZGlnaXRzID0gcGFyc2VkTnVtYmVyLmRpZ2l0cztcbiAgbGV0IGZyYWN0aW9uTGVuID0gZGlnaXRzLmxlbmd0aCAtIHBhcnNlZE51bWJlci5pbnRlZ2VyTGVuO1xuICBjb25zdCBmcmFjdGlvblNpemUgPSBNYXRoLm1pbihNYXRoLm1heChtaW5GcmFjLCBmcmFjdGlvbkxlbiksIG1heEZyYWMpO1xuICBsZXQgcm91bmRBdCA9IGZyYWN0aW9uU2l6ZSArIHBhcnNlZE51bWJlci5pbnRlZ2VyTGVuO1xuICBsZXQgZGlnaXQgPSBkaWdpdHNbcm91bmRBdF07XG4gIGlmIChyb3VuZEF0ID4gMCkge1xuICAgIGRpZ2l0cy5zcGxpY2UoTWF0aC5tYXgocGFyc2VkTnVtYmVyLmludGVnZXJMZW4sIHJvdW5kQXQpKTtcbiAgICBmb3IgKGxldCBqID0gcm91bmRBdDsgaiA8IGRpZ2l0cy5sZW5ndGg7IGorKykge1xuICAgICAgZGlnaXRzW2pdID0gMDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZnJhY3Rpb25MZW4gPSBNYXRoLm1heCgwLCBmcmFjdGlvbkxlbik7XG4gICAgcGFyc2VkTnVtYmVyLmludGVnZXJMZW4gPSAxO1xuICAgIGRpZ2l0cy5sZW5ndGggPSBNYXRoLm1heCgxLCByb3VuZEF0ID0gZnJhY3Rpb25TaXplICsgMSk7XG4gICAgZGlnaXRzWzBdID0gMDtcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8IHJvdW5kQXQ7IGkrKykgZGlnaXRzW2ldID0gMDtcbiAgfVxuICBpZiAoZGlnaXQgPj0gNSkge1xuICAgIGlmIChyb3VuZEF0IC0gMSA8IDApIHtcbiAgICAgIGZvciAobGV0IGsgPSAwOyBrID4gcm91bmRBdDsgay0tKSB7XG4gICAgICAgIGRpZ2l0cy51bnNoaWZ0KDApO1xuICAgICAgICBwYXJzZWROdW1iZXIuaW50ZWdlckxlbisrO1xuICAgICAgfVxuICAgICAgZGlnaXRzLnVuc2hpZnQoMSk7XG4gICAgICBwYXJzZWROdW1iZXIuaW50ZWdlckxlbisrO1xuICAgIH0gZWxzZSB7XG4gICAgICBkaWdpdHNbcm91bmRBdCAtIDFdKys7XG4gICAgfVxuICB9XG4gIGZvciAoOyBmcmFjdGlvbkxlbiA8IE1hdGgubWF4KDAsIGZyYWN0aW9uU2l6ZSk7IGZyYWN0aW9uTGVuKyspIGRpZ2l0cy5wdXNoKDApO1xuICBsZXQgZHJvcFRyYWlsaW5nWmVyb3MgPSBmcmFjdGlvblNpemUgIT09IDA7XG4gIGNvbnN0IG1pbkxlbiA9IG1pbkZyYWMgKyBwYXJzZWROdW1iZXIuaW50ZWdlckxlbjtcbiAgY29uc3QgY2FycnkgPSBkaWdpdHMucmVkdWNlUmlnaHQoZnVuY3Rpb24gKGNhcnJ5LCBkLCBpLCBkaWdpdHMpIHtcbiAgICBkID0gZCArIGNhcnJ5O1xuICAgIGRpZ2l0c1tpXSA9IGQgPCAxMCA/IGQgOiBkIC0gMTA7XG4gICAgaWYgKGRyb3BUcmFpbGluZ1plcm9zKSB7XG4gICAgICBpZiAoZGlnaXRzW2ldID09PSAwICYmIGkgPj0gbWluTGVuKSB7XG4gICAgICAgIGRpZ2l0cy5wb3AoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRyb3BUcmFpbGluZ1plcm9zID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkID49IDEwID8gMSA6IDA7XG4gIH0sIDApO1xuICBpZiAoY2FycnkpIHtcbiAgICBkaWdpdHMudW5zaGlmdChjYXJyeSk7XG4gICAgcGFyc2VkTnVtYmVyLmludGVnZXJMZW4rKztcbiAgfVxufVxuZnVuY3Rpb24gcGFyc2VJbnRBdXRvUmFkaXgodGV4dCkge1xuICBjb25zdCByZXN1bHQgPSBwYXJzZUludCh0ZXh0KTtcbiAgaWYgKGlzTmFOKHJlc3VsdCkpIHtcbiAgICB0aHJvdyBuZXcgX1J1bnRpbWVFcnJvcigyMzA1LCBuZ0Rldk1vZGUgJiYgJ0ludmFsaWQgaW50ZWdlciBsaXRlcmFsIHdoZW4gcGFyc2luZyAnICsgdGV4dCk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cbmxldCBOZ0xvY2FsaXphdGlvbiA9IC8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICBjbGFzcyBOZ0xvY2FsaXphdGlvbiB7XG4gICAgc3RhdGljIMm1ZmFjID0gZnVuY3Rpb24gTmdMb2NhbGl6YXRpb25fRmFjdG9yeShfX25nRmFjdG9yeVR5cGVfXykge1xuICAgICAgcmV0dXJuIG5ldyAoX19uZ0ZhY3RvcnlUeXBlX18gfHwgTmdMb2NhbGl6YXRpb24pKCk7XG4gICAgfTtcbiAgICBzdGF0aWMgybVwcm92ID0gLyogQF9fUFVSRV9fICovaTAuybXJtWRlZmluZUluamVjdGFibGUoe1xuICAgICAgdG9rZW46IE5nTG9jYWxpemF0aW9uLFxuICAgICAgZmFjdG9yeTogKCkgPT4gKCgpID0+IG5ldyBOZ0xvY2FsZUxvY2FsaXphdGlvbihpbmplY3QoTE9DQUxFX0lEKSkpKCksXG4gICAgICBwcm92aWRlZEluOiAncm9vdCdcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gTmdMb2NhbGl6YXRpb247XG59KSgpO1xuLyojX19QVVJFX18qLygoKSA9PiB7XG4gICh0eXBlb2YgbmdEZXZNb2RlID09PSBcInVuZGVmaW5lZFwiIHx8IG5nRGV2TW9kZSkgJiYgdm9pZCAwO1xufSkoKTtcbmZ1bmN0aW9uIGdldFBsdXJhbENhdGVnb3J5KHZhbHVlLCBjYXNlcywgbmdMb2NhbGl6YXRpb24sIGxvY2FsZSkge1xuICBsZXQga2V5ID0gYD0ke3ZhbHVlfWA7XG4gIGlmIChjYXNlcy5pbmRleE9mKGtleSkgPiAtMSkge1xuICAgIHJldHVybiBrZXk7XG4gIH1cbiAga2V5ID0gbmdMb2NhbGl6YXRpb24uZ2V0UGx1cmFsQ2F0ZWdvcnkodmFsdWUsIGxvY2FsZSk7XG4gIGlmIChjYXNlcy5pbmRleE9mKGtleSkgPiAtMSkge1xuICAgIHJldHVybiBrZXk7XG4gIH1cbiAgaWYgKGNhc2VzLmluZGV4T2YoJ290aGVyJykgPiAtMSkge1xuICAgIHJldHVybiAnb3RoZXInO1xuICB9XG4gIHRocm93IG5ldyBfUnVudGltZUVycm9yKDIzMDgsIG5nRGV2TW9kZSAmJiBgTm8gcGx1cmFsIG1lc3NhZ2UgZm91bmQgZm9yIHZhbHVlIFwiJHt2YWx1ZX1cImApO1xufVxubGV0IE5nTG9jYWxlTG9jYWxpemF0aW9uID0gLyojX19QVVJFX18qLygoKSA9PiB7XG4gIGNsYXNzIE5nTG9jYWxlTG9jYWxpemF0aW9uIGV4dGVuZHMgTmdMb2NhbGl6YXRpb24ge1xuICAgIGxvY2FsZTtcbiAgICBjb25zdHJ1Y3Rvcihsb2NhbGUpIHtcbiAgICAgIHN1cGVyKCk7XG4gICAgICB0aGlzLmxvY2FsZSA9IGxvY2FsZTtcbiAgICB9XG4gICAgZ2V0UGx1cmFsQ2F0ZWdvcnkodmFsdWUsIGxvY2FsZSkge1xuICAgICAgY29uc3QgcGx1cmFsID0gZ2V0TG9jYWxlUGx1cmFsQ2FzZShsb2NhbGUgfHwgdGhpcy5sb2NhbGUpKHZhbHVlKTtcbiAgICAgIHN3aXRjaCAocGx1cmFsKSB7XG4gICAgICAgIGNhc2UgUGx1cmFsLlplcm86XG4gICAgICAgICAgcmV0dXJuICd6ZXJvJztcbiAgICAgICAgY2FzZSBQbHVyYWwuT25lOlxuICAgICAgICAgIHJldHVybiAnb25lJztcbiAgICAgICAgY2FzZSBQbHVyYWwuVHdvOlxuICAgICAgICAgIHJldHVybiAndHdvJztcbiAgICAgICAgY2FzZSBQbHVyYWwuRmV3OlxuICAgICAgICAgIHJldHVybiAnZmV3JztcbiAgICAgICAgY2FzZSBQbHVyYWwuTWFueTpcbiAgICAgICAgICByZXR1cm4gJ21hbnknO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiAnb3RoZXInO1xuICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgybVmYWMgPSBmdW5jdGlvbiBOZ0xvY2FsZUxvY2FsaXphdGlvbl9GYWN0b3J5KF9fbmdGYWN0b3J5VHlwZV9fKSB7XG4gICAgICByZXR1cm4gbmV3IChfX25nRmFjdG9yeVR5cGVfXyB8fCBOZ0xvY2FsZUxvY2FsaXphdGlvbikoaTAuybXJtWluamVjdChMT0NBTEVfSUQpKTtcbiAgICB9O1xuICAgIHN0YXRpYyDJtXByb3YgPSAvKiBAX19QVVJFX18gKi9pMC7Jtcm1ZGVmaW5lSW5qZWN0YWJsZSh7XG4gICAgICB0b2tlbjogTmdMb2NhbGVMb2NhbGl6YXRpb24sXG4gICAgICBmYWN0b3J5OiBOZ0xvY2FsZUxvY2FsaXphdGlvbi7JtWZhY1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBOZ0xvY2FsZUxvY2FsaXphdGlvbjtcbn0pKCk7XG4vKiNfX1BVUkVfXyovKCgpID0+IHtcbiAgKHR5cGVvZiBuZ0Rldk1vZGUgPT09IFwidW5kZWZpbmVkXCIgfHwgbmdEZXZNb2RlKSAmJiB2b2lkIDA7XG59KSgpO1xuY29uc3QgV1NfUkVHRVhQID0gL1xccysvO1xuY29uc3QgRU1QVFlfQVJSQVkgPSBbXTtcbmxldCBOZ0NsYXNzID0gLyojX19QVVJFX18qLygoKSA9PiB7XG4gIGNsYXNzIE5nQ2xhc3Mge1xuICAgIF9uZ0VsO1xuICAgIF9yZW5kZXJlcjtcbiAgICBpbml0aWFsQ2xhc3NlcyA9IEVNUFRZX0FSUkFZO1xuICAgIHJhd0NsYXNzO1xuICAgIHN0YXRlTWFwID0gbmV3IE1hcCgpO1xuICAgIGNvbnN0cnVjdG9yKF9uZ0VsLCBfcmVuZGVyZXIpIHtcbiAgICAgIHRoaXMuX25nRWwgPSBfbmdFbDtcbiAgICAgIHRoaXMuX3JlbmRlcmVyID0gX3JlbmRlcmVyO1xuICAgIH1cbiAgICBzZXQga2xhc3ModmFsdWUpIHtcbiAgICAgIHRoaXMuaW5pdGlhbENsYXNzZXMgPSB2YWx1ZSAhPSBudWxsID8gdmFsdWUudHJpbSgpLnNwbGl0KFdTX1JFR0VYUCkgOiBFTVBUWV9BUlJBWTtcbiAgICB9XG4gICAgc2V0IG5nQ2xhc3ModmFsdWUpIHtcbiAgICAgIHRoaXMucmF3Q2xhc3MgPSB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8gdmFsdWUudHJpbSgpLnNwbGl0KFdTX1JFR0VYUCkgOiB2YWx1ZTtcbiAgICB9XG4gICAgbmdEb0NoZWNrKCkge1xuICAgICAgZm9yIChjb25zdCBrbGFzcyBvZiB0aGlzLmluaXRpYWxDbGFzc2VzKSB7XG4gICAgICAgIHRoaXMuX3VwZGF0ZVN0YXRlKGtsYXNzLCB0cnVlKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJhd0NsYXNzID0gdGhpcy5yYXdDbGFzcztcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHJhd0NsYXNzKSB8fCByYXdDbGFzcyBpbnN0YW5jZW9mIFNldCkge1xuICAgICAgICBmb3IgKGNvbnN0IGtsYXNzIG9mIHJhd0NsYXNzKSB7XG4gICAgICAgICAgdGhpcy5fdXBkYXRlU3RhdGUoa2xhc3MsIHRydWUpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHJhd0NsYXNzICE9IG51bGwpIHtcbiAgICAgICAgZm9yIChjb25zdCBrbGFzcyBvZiBPYmplY3Qua2V5cyhyYXdDbGFzcykpIHtcbiAgICAgICAgICB0aGlzLl91cGRhdGVTdGF0ZShrbGFzcywgQm9vbGVhbihyYXdDbGFzc1trbGFzc10pKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5fYXBwbHlTdGF0ZURpZmYoKTtcbiAgICB9XG4gICAgX3VwZGF0ZVN0YXRlKGtsYXNzLCBuZXh0RW5hYmxlZCkge1xuICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzLnN0YXRlTWFwLmdldChrbGFzcyk7XG4gICAgICBpZiAoc3RhdGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAoc3RhdGUuZW5hYmxlZCAhPT0gbmV4dEVuYWJsZWQpIHtcbiAgICAgICAgICBzdGF0ZS5jaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgICBzdGF0ZS5lbmFibGVkID0gbmV4dEVuYWJsZWQ7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGUudG91Y2hlZCA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnN0YXRlTWFwLnNldChrbGFzcywge1xuICAgICAgICAgIGVuYWJsZWQ6IG5leHRFbmFibGVkLFxuICAgICAgICAgIGNoYW5nZWQ6IHRydWUsXG4gICAgICAgICAgdG91Y2hlZDogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgX2FwcGx5U3RhdGVEaWZmKCkge1xuICAgICAgZm9yIChjb25zdCBzdGF0ZUVudHJ5IG9mIHRoaXMuc3RhdGVNYXApIHtcbiAgICAgICAgY29uc3Qga2xhc3MgPSBzdGF0ZUVudHJ5WzBdO1xuICAgICAgICBjb25zdCBzdGF0ZSA9IHN0YXRlRW50cnlbMV07XG4gICAgICAgIGlmIChzdGF0ZS5jaGFuZ2VkKSB7XG4gICAgICAgICAgdGhpcy5fdG9nZ2xlQ2xhc3Moa2xhc3MsIHN0YXRlLmVuYWJsZWQpO1xuICAgICAgICAgIHN0YXRlLmNoYW5nZWQgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIGlmICghc3RhdGUudG91Y2hlZCkge1xuICAgICAgICAgIGlmIChzdGF0ZS5lbmFibGVkKSB7XG4gICAgICAgICAgICB0aGlzLl90b2dnbGVDbGFzcyhrbGFzcywgZmFsc2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnN0YXRlTWFwLmRlbGV0ZShrbGFzcyk7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGUudG91Y2hlZCA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICBfdG9nZ2xlQ2xhc3Moa2xhc3MsIGVuYWJsZWQpIHtcbiAgICAgIGlmIChuZ0Rldk1vZGUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBrbGFzcyAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5nQ2xhc3MgY2FuIG9ubHkgdG9nZ2xlIENTUyBjbGFzc2VzIGV4cHJlc3NlZCBhcyBzdHJpbmdzLCBnb3QgJHtfc3RyaW5naWZ5KGtsYXNzKX1gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAga2xhc3MgPSBrbGFzcy50cmltKCk7XG4gICAgICBpZiAoa2xhc3MubGVuZ3RoID4gMCkge1xuICAgICAgICBrbGFzcy5zcGxpdChXU19SRUdFWFApLmZvckVhY2goa2xhc3MgPT4ge1xuICAgICAgICAgIGlmIChlbmFibGVkKSB7XG4gICAgICAgICAgICB0aGlzLl9yZW5kZXJlci5hZGRDbGFzcyh0aGlzLl9uZ0VsLm5hdGl2ZUVsZW1lbnQsIGtsYXNzKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fcmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5fbmdFbC5uYXRpdmVFbGVtZW50LCBrbGFzcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIMm1ZmFjID0gZnVuY3Rpb24gTmdDbGFzc19GYWN0b3J5KF9fbmdGYWN0b3J5VHlwZV9fKSB7XG4gICAgICByZXR1cm4gbmV3IChfX25nRmFjdG9yeVR5cGVfXyB8fCBOZ0NsYXNzKShpMC7Jtcm1ZGlyZWN0aXZlSW5qZWN0KGkwLkVsZW1lbnRSZWYpLCBpMC7Jtcm1ZGlyZWN0aXZlSW5qZWN0KGkwLlJlbmRlcmVyMikpO1xuICAgIH07XG4gICAgc3RhdGljIMm1ZGlyID0gLyogQF9fUFVSRV9fICovaTAuybXJtWRlZmluZURpcmVjdGl2ZSh7XG4gICAgICB0eXBlOiBOZ0NsYXNzLFxuICAgICAgc2VsZWN0b3JzOiBbW1wiXCIsIFwibmdDbGFzc1wiLCBcIlwiXV0sXG4gICAgICBpbnB1dHM6IHtcbiAgICAgICAga2xhc3M6IFswLCBcImNsYXNzXCIsIFwia2xhc3NcIl0sXG4gICAgICAgIG5nQ2xhc3M6IFwibmdDbGFzc1wiXG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIE5nQ2xhc3M7XG59KSgpO1xuLyojX19QVVJFX18qLygoKSA9PiB7XG4gICh0eXBlb2YgbmdEZXZNb2RlID09PSBcInVuZGVmaW5lZFwiIHx8IG5nRGV2TW9kZSkgJiYgdm9pZCAwO1xufSkoKTtcbmxldCBOZ0NvbXBvbmVudE91dGxldCA9IC8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICBjbGFzcyBOZ0NvbXBvbmVudE91dGxldCB7XG4gICAgX3ZpZXdDb250YWluZXJSZWY7XG4gICAgbmdDb21wb25lbnRPdXRsZXQgPSBudWxsO1xuICAgIG5nQ29tcG9uZW50T3V0bGV0SW5wdXRzO1xuICAgIG5nQ29tcG9uZW50T3V0bGV0SW5qZWN0b3I7XG4gICAgbmdDb21wb25lbnRPdXRsZXRFbnZpcm9ubWVudEluamVjdG9yO1xuICAgIG5nQ29tcG9uZW50T3V0bGV0Q29udGVudDtcbiAgICBuZ0NvbXBvbmVudE91dGxldE5nTW9kdWxlO1xuICAgIF9jb21wb25lbnRSZWY7XG4gICAgX21vZHVsZVJlZjtcbiAgICBfaW5wdXRzVXNlZCA9IG5ldyBNYXAoKTtcbiAgICBnZXQgY29tcG9uZW50SW5zdGFuY2UoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fY29tcG9uZW50UmVmPy5pbnN0YW5jZSA/PyBudWxsO1xuICAgIH1cbiAgICBjb25zdHJ1Y3Rvcihfdmlld0NvbnRhaW5lclJlZikge1xuICAgICAgdGhpcy5fdmlld0NvbnRhaW5lclJlZiA9IF92aWV3Q29udGFpbmVyUmVmO1xuICAgIH1cbiAgICBfbmVlZFRvUmVDcmVhdGVOZ01vZHVsZUluc3RhbmNlKGNoYW5nZXMpIHtcbiAgICAgIHJldHVybiBjaGFuZ2VzWyduZ0NvbXBvbmVudE91dGxldE5nTW9kdWxlJ10gIT09IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgX25lZWRUb1JlQ3JlYXRlQ29tcG9uZW50SW5zdGFuY2UoY2hhbmdlcykge1xuICAgICAgcmV0dXJuIGNoYW5nZXNbJ25nQ29tcG9uZW50T3V0bGV0J10gIT09IHVuZGVmaW5lZCB8fCBjaGFuZ2VzWyduZ0NvbXBvbmVudE91dGxldENvbnRlbnQnXSAhPT0gdW5kZWZpbmVkIHx8IGNoYW5nZXNbJ25nQ29tcG9uZW50T3V0bGV0SW5qZWN0b3InXSAhPT0gdW5kZWZpbmVkIHx8IGNoYW5nZXNbJ25nQ29tcG9uZW50T3V0bGV0RW52aXJvbm1lbnRJbmplY3RvciddICE9PSB1bmRlZmluZWQgfHwgdGhpcy5fbmVlZFRvUmVDcmVhdGVOZ01vZHVsZUluc3RhbmNlKGNoYW5nZXMpO1xuICAgIH1cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzKSB7XG4gICAgICBpZiAodGhpcy5fbmVlZFRvUmVDcmVhdGVDb21wb25lbnRJbnN0YW5jZShjaGFuZ2VzKSkge1xuICAgICAgICB0aGlzLl92aWV3Q29udGFpbmVyUmVmLmNsZWFyKCk7XG4gICAgICAgIHRoaXMuX2lucHV0c1VzZWQuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5fY29tcG9uZW50UmVmID0gdW5kZWZpbmVkO1xuICAgICAgICBpZiAodGhpcy5uZ0NvbXBvbmVudE91dGxldCkge1xuICAgICAgICAgIGNvbnN0IGluamVjdG9yID0gdGhpcy5uZ0NvbXBvbmVudE91dGxldEluamVjdG9yIHx8IHRoaXMuX3ZpZXdDb250YWluZXJSZWYucGFyZW50SW5qZWN0b3I7XG4gICAgICAgICAgaWYgKHRoaXMuX25lZWRUb1JlQ3JlYXRlTmdNb2R1bGVJbnN0YW5jZShjaGFuZ2VzKSkge1xuICAgICAgICAgICAgdGhpcy5fbW9kdWxlUmVmPy5kZXN0cm95KCk7XG4gICAgICAgICAgICBpZiAodGhpcy5uZ0NvbXBvbmVudE91dGxldE5nTW9kdWxlKSB7XG4gICAgICAgICAgICAgIHRoaXMuX21vZHVsZVJlZiA9IGNyZWF0ZU5nTW9kdWxlKHRoaXMubmdDb21wb25lbnRPdXRsZXROZ01vZHVsZSwgZ2V0UGFyZW50SW5qZWN0b3IoaW5qZWN0b3IpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMuX21vZHVsZVJlZiA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5fY29tcG9uZW50UmVmID0gdGhpcy5fdmlld0NvbnRhaW5lclJlZi5jcmVhdGVDb21wb25lbnQodGhpcy5uZ0NvbXBvbmVudE91dGxldCwge1xuICAgICAgICAgICAgaW5qZWN0b3IsXG4gICAgICAgICAgICBuZ01vZHVsZVJlZjogdGhpcy5fbW9kdWxlUmVmLFxuICAgICAgICAgICAgcHJvamVjdGFibGVOb2RlczogdGhpcy5uZ0NvbXBvbmVudE91dGxldENvbnRlbnQsXG4gICAgICAgICAgICBlbnZpcm9ubWVudEluamVjdG9yOiB0aGlzLm5nQ29tcG9uZW50T3V0bGV0RW52aXJvbm1lbnRJbmplY3RvclxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIG5nRG9DaGVjaygpIHtcbiAgICAgIGlmICh0aGlzLl9jb21wb25lbnRSZWYpIHtcbiAgICAgICAgaWYgKHRoaXMubmdDb21wb25lbnRPdXRsZXRJbnB1dHMpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IGlucHV0TmFtZSBvZiBPYmplY3Qua2V5cyh0aGlzLm5nQ29tcG9uZW50T3V0bGV0SW5wdXRzKSkge1xuICAgICAgICAgICAgdGhpcy5faW5wdXRzVXNlZC5zZXQoaW5wdXROYW1lLCB0cnVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fYXBwbHlJbnB1dFN0YXRlRGlmZih0aGlzLl9jb21wb25lbnRSZWYpO1xuICAgICAgfVxuICAgIH1cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgIHRoaXMuX21vZHVsZVJlZj8uZGVzdHJveSgpO1xuICAgIH1cbiAgICBfYXBwbHlJbnB1dFN0YXRlRGlmZihjb21wb25lbnRSZWYpIHtcbiAgICAgIGZvciAoY29uc3QgW2lucHV0TmFtZSwgdG91Y2hlZF0gb2YgdGhpcy5faW5wdXRzVXNlZCkge1xuICAgICAgICBpZiAoIXRvdWNoZWQpIHtcbiAgICAgICAgICBjb21wb25lbnRSZWYuc2V0SW5wdXQoaW5wdXROYW1lLCB1bmRlZmluZWQpO1xuICAgICAgICAgIHRoaXMuX2lucHV0c1VzZWQuZGVsZXRlKGlucHV0TmFtZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29tcG9uZW50UmVmLnNldElucHV0KGlucHV0TmFtZSwgdGhpcy5uZ0NvbXBvbmVudE91dGxldElucHV0c1tpbnB1dE5hbWVdKTtcbiAgICAgICAgICB0aGlzLl9pbnB1dHNVc2VkLnNldChpbnB1dE5hbWUsIGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgybVmYWMgPSBmdW5jdGlvbiBOZ0NvbXBvbmVudE91dGxldF9GYWN0b3J5KF9fbmdGYWN0b3J5VHlwZV9fKSB7XG4gICAgICByZXR1cm4gbmV3IChfX25nRmFjdG9yeVR5cGVfXyB8fCBOZ0NvbXBvbmVudE91dGxldCkoaTAuybXJtWRpcmVjdGl2ZUluamVjdChpMC5WaWV3Q29udGFpbmVyUmVmKSk7XG4gICAgfTtcbiAgICBzdGF0aWMgybVkaXIgPSAvKiBAX19QVVJFX18gKi9pMC7Jtcm1ZGVmaW5lRGlyZWN0aXZlKHtcbiAgICAgIHR5cGU6IE5nQ29tcG9uZW50T3V0bGV0LFxuICAgICAgc2VsZWN0b3JzOiBbW1wiXCIsIFwibmdDb21wb25lbnRPdXRsZXRcIiwgXCJcIl1dLFxuICAgICAgaW5wdXRzOiB7XG4gICAgICAgIG5nQ29tcG9uZW50T3V0bGV0OiBcIm5nQ29tcG9uZW50T3V0bGV0XCIsXG4gICAgICAgIG5nQ29tcG9uZW50T3V0bGV0SW5wdXRzOiBcIm5nQ29tcG9uZW50T3V0bGV0SW5wdXRzXCIsXG4gICAgICAgIG5nQ29tcG9uZW50T3V0bGV0SW5qZWN0b3I6IFwibmdDb21wb25lbnRPdXRsZXRJbmplY3RvclwiLFxuICAgICAgICBuZ0NvbXBvbmVudE91dGxldEVudmlyb25tZW50SW5qZWN0b3I6IFwibmdDb21wb25lbnRPdXRsZXRFbnZpcm9ubWVudEluamVjdG9yXCIsXG4gICAgICAgIG5nQ29tcG9uZW50T3V0bGV0Q29udGVudDogXCJuZ0NvbXBvbmVudE91dGxldENvbnRlbnRcIixcbiAgICAgICAgbmdDb21wb25lbnRPdXRsZXROZ01vZHVsZTogXCJuZ0NvbXBvbmVudE91dGxldE5nTW9kdWxlXCJcbiAgICAgIH0sXG4gICAgICBleHBvcnRBczogW1wibmdDb21wb25lbnRPdXRsZXRcIl0sXG4gICAgICBmZWF0dXJlczogW2kwLsm1ybVOZ09uQ2hhbmdlc0ZlYXR1cmVdXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIE5nQ29tcG9uZW50T3V0bGV0O1xufSkoKTtcbi8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICAodHlwZW9mIG5nRGV2TW9kZSA9PT0gXCJ1bmRlZmluZWRcIiB8fCBuZ0Rldk1vZGUpICYmIHZvaWQgMDtcbn0pKCk7XG5mdW5jdGlvbiBnZXRQYXJlbnRJbmplY3RvcihpbmplY3Rvcikge1xuICBjb25zdCBwYXJlbnROZ01vZHVsZSA9IGluamVjdG9yLmdldChOZ01vZHVsZVJlZik7XG4gIHJldHVybiBwYXJlbnROZ01vZHVsZS5pbmplY3Rvcjtcbn1cbmNsYXNzIE5nRm9yT2ZDb250ZXh0IHtcbiAgJGltcGxpY2l0O1xuICBuZ0Zvck9mO1xuICBpbmRleDtcbiAgY291bnQ7XG4gIGNvbnN0cnVjdG9yKCRpbXBsaWNpdCwgbmdGb3JPZiwgaW5kZXgsIGNvdW50KSB7XG4gICAgdGhpcy4kaW1wbGljaXQgPSAkaW1wbGljaXQ7XG4gICAgdGhpcy5uZ0Zvck9mID0gbmdGb3JPZjtcbiAgICB0aGlzLmluZGV4ID0gaW5kZXg7XG4gICAgdGhpcy5jb3VudCA9IGNvdW50O1xuICB9XG4gIGdldCBmaXJzdCgpIHtcbiAgICByZXR1cm4gdGhpcy5pbmRleCA9PT0gMDtcbiAgfVxuICBnZXQgbGFzdCgpIHtcbiAgICByZXR1cm4gdGhpcy5pbmRleCA9PT0gdGhpcy5jb3VudCAtIDE7XG4gIH1cbiAgZ2V0IGV2ZW4oKSB7XG4gICAgcmV0dXJuIHRoaXMuaW5kZXggJSAyID09PSAwO1xuICB9XG4gIGdldCBvZGQoKSB7XG4gICAgcmV0dXJuICF0aGlzLmV2ZW47XG4gIH1cbn1cbmxldCBOZ0Zvck9mID0gLyojX19QVVJFX18qLygoKSA9PiB7XG4gIGNsYXNzIE5nRm9yT2Yge1xuICAgIF92aWV3Q29udGFpbmVyO1xuICAgIF90ZW1wbGF0ZTtcbiAgICBfZGlmZmVycztcbiAgICBzZXQgbmdGb3JPZihuZ0Zvck9mKSB7XG4gICAgICB0aGlzLl9uZ0Zvck9mID0gbmdGb3JPZjtcbiAgICAgIHRoaXMuX25nRm9yT2ZEaXJ0eSA9IHRydWU7XG4gICAgfVxuICAgIHNldCBuZ0ZvclRyYWNrQnkoZm4pIHtcbiAgICAgIGlmICgodHlwZW9mIG5nRGV2TW9kZSA9PT0gJ3VuZGVmaW5lZCcgfHwgbmdEZXZNb2RlKSAmJiBmbiAhPSBudWxsICYmIHR5cGVvZiBmbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjb25zb2xlLndhcm4oYHRyYWNrQnkgbXVzdCBiZSBhIGZ1bmN0aW9uLCBidXQgcmVjZWl2ZWQgJHtKU09OLnN0cmluZ2lmeShmbil9LiBgICsgYFNlZSBodHRwczovL2FuZ3VsYXIuZGV2L2FwaS9jb21tb24vTmdGb3JPZiNjaGFuZ2UtcHJvcGFnYXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uYCk7XG4gICAgICB9XG4gICAgICB0aGlzLl90cmFja0J5Rm4gPSBmbjtcbiAgICB9XG4gICAgZ2V0IG5nRm9yVHJhY2tCeSgpIHtcbiAgICAgIHJldHVybiB0aGlzLl90cmFja0J5Rm47XG4gICAgfVxuICAgIF9uZ0Zvck9mID0gbnVsbDtcbiAgICBfbmdGb3JPZkRpcnR5ID0gdHJ1ZTtcbiAgICBfZGlmZmVyID0gbnVsbDtcbiAgICBfdHJhY2tCeUZuO1xuICAgIGNvbnN0cnVjdG9yKF92aWV3Q29udGFpbmVyLCBfdGVtcGxhdGUsIF9kaWZmZXJzKSB7XG4gICAgICB0aGlzLl92aWV3Q29udGFpbmVyID0gX3ZpZXdDb250YWluZXI7XG4gICAgICB0aGlzLl90ZW1wbGF0ZSA9IF90ZW1wbGF0ZTtcbiAgICAgIHRoaXMuX2RpZmZlcnMgPSBfZGlmZmVycztcbiAgICB9XG4gICAgc2V0IG5nRm9yVGVtcGxhdGUodmFsdWUpIHtcbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICB0aGlzLl90ZW1wbGF0ZSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgICBuZ0RvQ2hlY2soKSB7XG4gICAgICBpZiAodGhpcy5fbmdGb3JPZkRpcnR5KSB7XG4gICAgICAgIHRoaXMuX25nRm9yT2ZEaXJ0eSA9IGZhbHNlO1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuX25nRm9yT2Y7XG4gICAgICAgIGlmICghdGhpcy5fZGlmZmVyICYmIHZhbHVlKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBuZ0Rldk1vZGUgPT09ICd1bmRlZmluZWQnIHx8IG5nRGV2TW9kZSkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgdGhpcy5fZGlmZmVyID0gdGhpcy5fZGlmZmVycy5maW5kKHZhbHVlKS5jcmVhdGUodGhpcy5uZ0ZvclRyYWNrQnkpO1xuICAgICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAgIGxldCBlcnJvck1lc3NhZ2UgPSBgQ2Fubm90IGZpbmQgYSBkaWZmZXIgc3VwcG9ydGluZyBvYmplY3QgJyR7dmFsdWV9JyBvZiB0eXBlICdgICsgYCR7Z2V0VHlwZU5hbWUodmFsdWUpfScuIE5nRm9yIG9ubHkgc3VwcG9ydHMgYmluZGluZyB0byBJdGVyYWJsZXMsIHN1Y2ggYXMgQXJyYXlzLmA7XG4gICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlICs9ICcgRGlkIHlvdSBtZWFuIHRvIHVzZSB0aGUga2V5dmFsdWUgcGlwZT8nO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHRocm93IG5ldyBfUnVudGltZUVycm9yKC0yMjAwLCBlcnJvck1lc3NhZ2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9kaWZmZXIgPSB0aGlzLl9kaWZmZXJzLmZpbmQodmFsdWUpLmNyZWF0ZSh0aGlzLm5nRm9yVHJhY2tCeSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5fZGlmZmVyKSB7XG4gICAgICAgIGNvbnN0IGNoYW5nZXMgPSB0aGlzLl9kaWZmZXIuZGlmZih0aGlzLl9uZ0Zvck9mKTtcbiAgICAgICAgaWYgKGNoYW5nZXMpIHRoaXMuX2FwcGx5Q2hhbmdlcyhjaGFuZ2VzKTtcbiAgICAgIH1cbiAgICB9XG4gICAgX2FwcGx5Q2hhbmdlcyhjaGFuZ2VzKSB7XG4gICAgICBjb25zdCB2aWV3Q29udGFpbmVyID0gdGhpcy5fdmlld0NvbnRhaW5lcjtcbiAgICAgIGNoYW5nZXMuZm9yRWFjaE9wZXJhdGlvbigoaXRlbSwgYWRqdXN0ZWRQcmV2aW91c0luZGV4LCBjdXJyZW50SW5kZXgpID0+IHtcbiAgICAgICAgaWYgKGl0ZW0ucHJldmlvdXNJbmRleCA9PSBudWxsKSB7XG4gICAgICAgICAgdmlld0NvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy5fdGVtcGxhdGUsIG5ldyBOZ0Zvck9mQ29udGV4dChpdGVtLml0ZW0sIHRoaXMuX25nRm9yT2YsIC0xLCAtMSksIGN1cnJlbnRJbmRleCA9PT0gbnVsbCA/IHVuZGVmaW5lZCA6IGN1cnJlbnRJbmRleCk7XG4gICAgICAgIH0gZWxzZSBpZiAoY3VycmVudEluZGV4ID09IG51bGwpIHtcbiAgICAgICAgICB2aWV3Q29udGFpbmVyLnJlbW92ZShhZGp1c3RlZFByZXZpb3VzSW5kZXggPT09IG51bGwgPyB1bmRlZmluZWQgOiBhZGp1c3RlZFByZXZpb3VzSW5kZXgpO1xuICAgICAgICB9IGVsc2UgaWYgKGFkanVzdGVkUHJldmlvdXNJbmRleCAhPT0gbnVsbCkge1xuICAgICAgICAgIGNvbnN0IHZpZXcgPSB2aWV3Q29udGFpbmVyLmdldChhZGp1c3RlZFByZXZpb3VzSW5kZXgpO1xuICAgICAgICAgIHZpZXdDb250YWluZXIubW92ZSh2aWV3LCBjdXJyZW50SW5kZXgpO1xuICAgICAgICAgIGFwcGx5Vmlld0NoYW5nZSh2aWV3LCBpdGVtKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBmb3IgKGxldCBpID0gMCwgaWxlbiA9IHZpZXdDb250YWluZXIubGVuZ3RoOyBpIDwgaWxlbjsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHZpZXdSZWYgPSB2aWV3Q29udGFpbmVyLmdldChpKTtcbiAgICAgICAgY29uc3QgY29udGV4dCA9IHZpZXdSZWYuY29udGV4dDtcbiAgICAgICAgY29udGV4dC5pbmRleCA9IGk7XG4gICAgICAgIGNvbnRleHQuY291bnQgPSBpbGVuO1xuICAgICAgICBjb250ZXh0Lm5nRm9yT2YgPSB0aGlzLl9uZ0Zvck9mO1xuICAgICAgfVxuICAgICAgY2hhbmdlcy5mb3JFYWNoSWRlbnRpdHlDaGFuZ2UocmVjb3JkID0+IHtcbiAgICAgICAgY29uc3Qgdmlld1JlZiA9IHZpZXdDb250YWluZXIuZ2V0KHJlY29yZC5jdXJyZW50SW5kZXgpO1xuICAgICAgICBhcHBseVZpZXdDaGFuZ2Uodmlld1JlZiwgcmVjb3JkKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBzdGF0aWMgbmdUZW1wbGF0ZUNvbnRleHRHdWFyZChkaXIsIGN0eCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHN0YXRpYyDJtWZhYyA9IGZ1bmN0aW9uIE5nRm9yT2ZfRmFjdG9yeShfX25nRmFjdG9yeVR5cGVfXykge1xuICAgICAgcmV0dXJuIG5ldyAoX19uZ0ZhY3RvcnlUeXBlX18gfHwgTmdGb3JPZikoaTAuybXJtWRpcmVjdGl2ZUluamVjdChpMC5WaWV3Q29udGFpbmVyUmVmKSwgaTAuybXJtWRpcmVjdGl2ZUluamVjdChpMC5UZW1wbGF0ZVJlZiksIGkwLsm1ybVkaXJlY3RpdmVJbmplY3QoaTAuSXRlcmFibGVEaWZmZXJzKSk7XG4gICAgfTtcbiAgICBzdGF0aWMgybVkaXIgPSAvKiBAX19QVVJFX18gKi9pMC7Jtcm1ZGVmaW5lRGlyZWN0aXZlKHtcbiAgICAgIHR5cGU6IE5nRm9yT2YsXG4gICAgICBzZWxlY3RvcnM6IFtbXCJcIiwgXCJuZ0ZvclwiLCBcIlwiLCBcIm5nRm9yT2ZcIiwgXCJcIl1dLFxuICAgICAgaW5wdXRzOiB7XG4gICAgICAgIG5nRm9yT2Y6IFwibmdGb3JPZlwiLFxuICAgICAgICBuZ0ZvclRyYWNrQnk6IFwibmdGb3JUcmFja0J5XCIsXG4gICAgICAgIG5nRm9yVGVtcGxhdGU6IFwibmdGb3JUZW1wbGF0ZVwiXG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIE5nRm9yT2Y7XG59KSgpO1xuLyojX19QVVJFX18qLygoKSA9PiB7XG4gICh0eXBlb2YgbmdEZXZNb2RlID09PSBcInVuZGVmaW5lZFwiIHx8IG5nRGV2TW9kZSkgJiYgdm9pZCAwO1xufSkoKTtcbmZ1bmN0aW9uIGFwcGx5Vmlld0NoYW5nZSh2aWV3LCByZWNvcmQpIHtcbiAgdmlldy5jb250ZXh0LiRpbXBsaWNpdCA9IHJlY29yZC5pdGVtO1xufVxuZnVuY3Rpb24gZ2V0VHlwZU5hbWUodHlwZSkge1xuICByZXR1cm4gdHlwZVsnbmFtZSddIHx8IHR5cGVvZiB0eXBlO1xufVxubGV0IE5nSWYgPSAvKiNfX1BVUkVfXyovKCgpID0+IHtcbiAgY2xhc3MgTmdJZiB7XG4gICAgX3ZpZXdDb250YWluZXI7XG4gICAgX2NvbnRleHQgPSBuZXcgTmdJZkNvbnRleHQoKTtcbiAgICBfdGhlblRlbXBsYXRlUmVmID0gbnVsbDtcbiAgICBfZWxzZVRlbXBsYXRlUmVmID0gbnVsbDtcbiAgICBfdGhlblZpZXdSZWYgPSBudWxsO1xuICAgIF9lbHNlVmlld1JlZiA9IG51bGw7XG4gICAgY29uc3RydWN0b3IoX3ZpZXdDb250YWluZXIsIHRlbXBsYXRlUmVmKSB7XG4gICAgICB0aGlzLl92aWV3Q29udGFpbmVyID0gX3ZpZXdDb250YWluZXI7XG4gICAgICB0aGlzLl90aGVuVGVtcGxhdGVSZWYgPSB0ZW1wbGF0ZVJlZjtcbiAgICB9XG4gICAgc2V0IG5nSWYoY29uZGl0aW9uKSB7XG4gICAgICB0aGlzLl9jb250ZXh0LiRpbXBsaWNpdCA9IHRoaXMuX2NvbnRleHQubmdJZiA9IGNvbmRpdGlvbjtcbiAgICAgIHRoaXMuX3VwZGF0ZVZpZXcoKTtcbiAgICB9XG4gICAgc2V0IG5nSWZUaGVuKHRlbXBsYXRlUmVmKSB7XG4gICAgICBhc3NlcnRUZW1wbGF0ZSh0ZW1wbGF0ZVJlZiwgKHR5cGVvZiBuZ0Rldk1vZGUgPT09ICd1bmRlZmluZWQnIHx8IG5nRGV2TW9kZSkgJiYgJ25nSWZUaGVuJyk7XG4gICAgICB0aGlzLl90aGVuVGVtcGxhdGVSZWYgPSB0ZW1wbGF0ZVJlZjtcbiAgICAgIHRoaXMuX3RoZW5WaWV3UmVmID0gbnVsbDtcbiAgICAgIHRoaXMuX3VwZGF0ZVZpZXcoKTtcbiAgICB9XG4gICAgc2V0IG5nSWZFbHNlKHRlbXBsYXRlUmVmKSB7XG4gICAgICBhc3NlcnRUZW1wbGF0ZSh0ZW1wbGF0ZVJlZiwgKHR5cGVvZiBuZ0Rldk1vZGUgPT09ICd1bmRlZmluZWQnIHx8IG5nRGV2TW9kZSkgJiYgJ25nSWZFbHNlJyk7XG4gICAgICB0aGlzLl9lbHNlVGVtcGxhdGVSZWYgPSB0ZW1wbGF0ZVJlZjtcbiAgICAgIHRoaXMuX2Vsc2VWaWV3UmVmID0gbnVsbDtcbiAgICAgIHRoaXMuX3VwZGF0ZVZpZXcoKTtcbiAgICB9XG4gICAgX3VwZGF0ZVZpZXcoKSB7XG4gICAgICBpZiAodGhpcy5fY29udGV4dC4kaW1wbGljaXQpIHtcbiAgICAgICAgaWYgKCF0aGlzLl90aGVuVmlld1JlZikge1xuICAgICAgICAgIHRoaXMuX3ZpZXdDb250YWluZXIuY2xlYXIoKTtcbiAgICAgICAgICB0aGlzLl9lbHNlVmlld1JlZiA9IG51bGw7XG4gICAgICAgICAgaWYgKHRoaXMuX3RoZW5UZW1wbGF0ZVJlZikge1xuICAgICAgICAgICAgdGhpcy5fdGhlblZpZXdSZWYgPSB0aGlzLl92aWV3Q29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLl90aGVuVGVtcGxhdGVSZWYsIHRoaXMuX2NvbnRleHQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKCF0aGlzLl9lbHNlVmlld1JlZikge1xuICAgICAgICAgIHRoaXMuX3ZpZXdDb250YWluZXIuY2xlYXIoKTtcbiAgICAgICAgICB0aGlzLl90aGVuVmlld1JlZiA9IG51bGw7XG4gICAgICAgICAgaWYgKHRoaXMuX2Vsc2VUZW1wbGF0ZVJlZikge1xuICAgICAgICAgICAgdGhpcy5fZWxzZVZpZXdSZWYgPSB0aGlzLl92aWV3Q29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLl9lbHNlVGVtcGxhdGVSZWYsIHRoaXMuX2NvbnRleHQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgbmdJZlVzZUlmVHlwZUd1YXJkO1xuICAgIHN0YXRpYyBuZ1RlbXBsYXRlR3VhcmRfbmdJZjtcbiAgICBzdGF0aWMgbmdUZW1wbGF0ZUNvbnRleHRHdWFyZChkaXIsIGN0eCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHN0YXRpYyDJtWZhYyA9IGZ1bmN0aW9uIE5nSWZfRmFjdG9yeShfX25nRmFjdG9yeVR5cGVfXykge1xuICAgICAgcmV0dXJuIG5ldyAoX19uZ0ZhY3RvcnlUeXBlX18gfHwgTmdJZikoaTAuybXJtWRpcmVjdGl2ZUluamVjdChpMC5WaWV3Q29udGFpbmVyUmVmKSwgaTAuybXJtWRpcmVjdGl2ZUluamVjdChpMC5UZW1wbGF0ZVJlZikpO1xuICAgIH07XG4gICAgc3RhdGljIMm1ZGlyID0gLyogQF9fUFVSRV9fICovaTAuybXJtWRlZmluZURpcmVjdGl2ZSh7XG4gICAgICB0eXBlOiBOZ0lmLFxuICAgICAgc2VsZWN0b3JzOiBbW1wiXCIsIFwibmdJZlwiLCBcIlwiXV0sXG4gICAgICBpbnB1dHM6IHtcbiAgICAgICAgbmdJZjogXCJuZ0lmXCIsXG4gICAgICAgIG5nSWZUaGVuOiBcIm5nSWZUaGVuXCIsXG4gICAgICAgIG5nSWZFbHNlOiBcIm5nSWZFbHNlXCJcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICByZXR1cm4gTmdJZjtcbn0pKCk7XG4vKiNfX1BVUkVfXyovKCgpID0+IHtcbiAgKHR5cGVvZiBuZ0Rldk1vZGUgPT09IFwidW5kZWZpbmVkXCIgfHwgbmdEZXZNb2RlKSAmJiB2b2lkIDA7XG59KSgpO1xuY2xhc3MgTmdJZkNvbnRleHQge1xuICAkaW1wbGljaXQgPSBudWxsO1xuICBuZ0lmID0gbnVsbDtcbn1cbmZ1bmN0aW9uIGFzc2VydFRlbXBsYXRlKHRlbXBsYXRlUmVmLCBwcm9wZXJ0eSkge1xuICBpZiAodGVtcGxhdGVSZWYgJiYgIXRlbXBsYXRlUmVmLmNyZWF0ZUVtYmVkZGVkVmlldykge1xuICAgIHRocm93IG5ldyBfUnVudGltZUVycm9yKDIwMjAsICh0eXBlb2YgbmdEZXZNb2RlID09PSAndW5kZWZpbmVkJyB8fCBuZ0Rldk1vZGUpICYmIGAke3Byb3BlcnR5fSBtdXN0IGJlIGEgVGVtcGxhdGVSZWYsIGJ1dCByZWNlaXZlZCAnJHtfc3RyaW5naWZ5KHRlbXBsYXRlUmVmKX0nLmApO1xuICB9XG59XG5jbGFzcyBTd2l0Y2hWaWV3IHtcbiAgX3ZpZXdDb250YWluZXJSZWY7XG4gIF90ZW1wbGF0ZVJlZjtcbiAgX2NyZWF0ZWQgPSBmYWxzZTtcbiAgY29uc3RydWN0b3IoX3ZpZXdDb250YWluZXJSZWYsIF90ZW1wbGF0ZVJlZikge1xuICAgIHRoaXMuX3ZpZXdDb250YWluZXJSZWYgPSBfdmlld0NvbnRhaW5lclJlZjtcbiAgICB0aGlzLl90ZW1wbGF0ZVJlZiA9IF90ZW1wbGF0ZVJlZjtcbiAgfVxuICBjcmVhdGUoKSB7XG4gICAgdGhpcy5fY3JlYXRlZCA9IHRydWU7XG4gICAgdGhpcy5fdmlld0NvbnRhaW5lclJlZi5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy5fdGVtcGxhdGVSZWYpO1xuICB9XG4gIGRlc3Ryb3koKSB7XG4gICAgdGhpcy5fY3JlYXRlZCA9IGZhbHNlO1xuICAgIHRoaXMuX3ZpZXdDb250YWluZXJSZWYuY2xlYXIoKTtcbiAgfVxuICBlbmZvcmNlU3RhdGUoY3JlYXRlZCkge1xuICAgIGlmIChjcmVhdGVkICYmICF0aGlzLl9jcmVhdGVkKSB7XG4gICAgICB0aGlzLmNyZWF0ZSgpO1xuICAgIH0gZWxzZSBpZiAoIWNyZWF0ZWQgJiYgdGhpcy5fY3JlYXRlZCkge1xuICAgICAgdGhpcy5kZXN0cm95KCk7XG4gICAgfVxuICB9XG59XG5sZXQgTmdTd2l0Y2ggPSAvKiNfX1BVUkVfXyovKCgpID0+IHtcbiAgY2xhc3MgTmdTd2l0Y2gge1xuICAgIF9kZWZhdWx0Vmlld3MgPSBbXTtcbiAgICBfZGVmYXVsdFVzZWQgPSBmYWxzZTtcbiAgICBfY2FzZUNvdW50ID0gMDtcbiAgICBfbGFzdENhc2VDaGVja0luZGV4ID0gMDtcbiAgICBfbGFzdENhc2VzTWF0Y2hlZCA9IGZhbHNlO1xuICAgIF9uZ1N3aXRjaDtcbiAgICBzZXQgbmdTd2l0Y2gobmV3VmFsdWUpIHtcbiAgICAgIHRoaXMuX25nU3dpdGNoID0gbmV3VmFsdWU7XG4gICAgICBpZiAodGhpcy5fY2FzZUNvdW50ID09PSAwKSB7XG4gICAgICAgIHRoaXMuX3VwZGF0ZURlZmF1bHRDYXNlcyh0cnVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgX2FkZENhc2UoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fY2FzZUNvdW50Kys7XG4gICAgfVxuICAgIF9hZGREZWZhdWx0KHZpZXcpIHtcbiAgICAgIHRoaXMuX2RlZmF1bHRWaWV3cy5wdXNoKHZpZXcpO1xuICAgIH1cbiAgICBfbWF0Y2hDYXNlKHZhbHVlKSB7XG4gICAgICBjb25zdCBtYXRjaGVkID0gdmFsdWUgPT09IHRoaXMuX25nU3dpdGNoO1xuICAgICAgdGhpcy5fbGFzdENhc2VzTWF0Y2hlZCB8fD0gbWF0Y2hlZDtcbiAgICAgIHRoaXMuX2xhc3RDYXNlQ2hlY2tJbmRleCsrO1xuICAgICAgaWYgKHRoaXMuX2xhc3RDYXNlQ2hlY2tJbmRleCA9PT0gdGhpcy5fY2FzZUNvdW50KSB7XG4gICAgICAgIHRoaXMuX3VwZGF0ZURlZmF1bHRDYXNlcyghdGhpcy5fbGFzdENhc2VzTWF0Y2hlZCk7XG4gICAgICAgIHRoaXMuX2xhc3RDYXNlQ2hlY2tJbmRleCA9IDA7XG4gICAgICAgIHRoaXMuX2xhc3RDYXNlc01hdGNoZWQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBtYXRjaGVkO1xuICAgIH1cbiAgICBfdXBkYXRlRGVmYXVsdENhc2VzKHVzZURlZmF1bHQpIHtcbiAgICAgIGlmICh0aGlzLl9kZWZhdWx0Vmlld3MubGVuZ3RoID4gMCAmJiB1c2VEZWZhdWx0ICE9PSB0aGlzLl9kZWZhdWx0VXNlZCkge1xuICAgICAgICB0aGlzLl9kZWZhdWx0VXNlZCA9IHVzZURlZmF1bHQ7XG4gICAgICAgIGZvciAoY29uc3QgZGVmYXVsdFZpZXcgb2YgdGhpcy5fZGVmYXVsdFZpZXdzKSB7XG4gICAgICAgICAgZGVmYXVsdFZpZXcuZW5mb3JjZVN0YXRlKHVzZURlZmF1bHQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyDJtWZhYyA9IGZ1bmN0aW9uIE5nU3dpdGNoX0ZhY3RvcnkoX19uZ0ZhY3RvcnlUeXBlX18pIHtcbiAgICAgIHJldHVybiBuZXcgKF9fbmdGYWN0b3J5VHlwZV9fIHx8IE5nU3dpdGNoKSgpO1xuICAgIH07XG4gICAgc3RhdGljIMm1ZGlyID0gLyogQF9fUFVSRV9fICovaTAuybXJtWRlZmluZURpcmVjdGl2ZSh7XG4gICAgICB0eXBlOiBOZ1N3aXRjaCxcbiAgICAgIHNlbGVjdG9yczogW1tcIlwiLCBcIm5nU3dpdGNoXCIsIFwiXCJdXSxcbiAgICAgIGlucHV0czoge1xuICAgICAgICBuZ1N3aXRjaDogXCJuZ1N3aXRjaFwiXG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIE5nU3dpdGNoO1xufSkoKTtcbi8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICAodHlwZW9mIG5nRGV2TW9kZSA9PT0gXCJ1bmRlZmluZWRcIiB8fCBuZ0Rldk1vZGUpICYmIHZvaWQgMDtcbn0pKCk7XG5sZXQgTmdTd2l0Y2hDYXNlID0gLyojX19QVVJFX18qLygoKSA9PiB7XG4gIGNsYXNzIE5nU3dpdGNoQ2FzZSB7XG4gICAgbmdTd2l0Y2g7XG4gICAgX3ZpZXc7XG4gICAgbmdTd2l0Y2hDYXNlO1xuICAgIGNvbnN0cnVjdG9yKHZpZXdDb250YWluZXIsIHRlbXBsYXRlUmVmLCBuZ1N3aXRjaCkge1xuICAgICAgdGhpcy5uZ1N3aXRjaCA9IG5nU3dpdGNoO1xuICAgICAgaWYgKCh0eXBlb2YgbmdEZXZNb2RlID09PSAndW5kZWZpbmVkJyB8fCBuZ0Rldk1vZGUpICYmICFuZ1N3aXRjaCkge1xuICAgICAgICB0aHJvd05nU3dpdGNoUHJvdmlkZXJOb3RGb3VuZEVycm9yKCduZ1N3aXRjaENhc2UnLCAnTmdTd2l0Y2hDYXNlJyk7XG4gICAgICB9XG4gICAgICBuZ1N3aXRjaC5fYWRkQ2FzZSgpO1xuICAgICAgdGhpcy5fdmlldyA9IG5ldyBTd2l0Y2hWaWV3KHZpZXdDb250YWluZXIsIHRlbXBsYXRlUmVmKTtcbiAgICB9XG4gICAgbmdEb0NoZWNrKCkge1xuICAgICAgdGhpcy5fdmlldy5lbmZvcmNlU3RhdGUodGhpcy5uZ1N3aXRjaC5fbWF0Y2hDYXNlKHRoaXMubmdTd2l0Y2hDYXNlKSk7XG4gICAgfVxuICAgIHN0YXRpYyDJtWZhYyA9IGZ1bmN0aW9uIE5nU3dpdGNoQ2FzZV9GYWN0b3J5KF9fbmdGYWN0b3J5VHlwZV9fKSB7XG4gICAgICByZXR1cm4gbmV3IChfX25nRmFjdG9yeVR5cGVfXyB8fCBOZ1N3aXRjaENhc2UpKGkwLsm1ybVkaXJlY3RpdmVJbmplY3QoaTAuVmlld0NvbnRhaW5lclJlZiksIGkwLsm1ybVkaXJlY3RpdmVJbmplY3QoaTAuVGVtcGxhdGVSZWYpLCBpMC7Jtcm1ZGlyZWN0aXZlSW5qZWN0KE5nU3dpdGNoLCA5KSk7XG4gICAgfTtcbiAgICBzdGF0aWMgybVkaXIgPSAvKiBAX19QVVJFX18gKi9pMC7Jtcm1ZGVmaW5lRGlyZWN0aXZlKHtcbiAgICAgIHR5cGU6IE5nU3dpdGNoQ2FzZSxcbiAgICAgIHNlbGVjdG9yczogW1tcIlwiLCBcIm5nU3dpdGNoQ2FzZVwiLCBcIlwiXV0sXG4gICAgICBpbnB1dHM6IHtcbiAgICAgICAgbmdTd2l0Y2hDYXNlOiBcIm5nU3dpdGNoQ2FzZVwiXG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIE5nU3dpdGNoQ2FzZTtcbn0pKCk7XG4vKiNfX1BVUkVfXyovKCgpID0+IHtcbiAgKHR5cGVvZiBuZ0Rldk1vZGUgPT09IFwidW5kZWZpbmVkXCIgfHwgbmdEZXZNb2RlKSAmJiB2b2lkIDA7XG59KSgpO1xubGV0IE5nU3dpdGNoRGVmYXVsdCA9IC8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICBjbGFzcyBOZ1N3aXRjaERlZmF1bHQge1xuICAgIGNvbnN0cnVjdG9yKHZpZXdDb250YWluZXIsIHRlbXBsYXRlUmVmLCBuZ1N3aXRjaCkge1xuICAgICAgaWYgKCh0eXBlb2YgbmdEZXZNb2RlID09PSAndW5kZWZpbmVkJyB8fCBuZ0Rldk1vZGUpICYmICFuZ1N3aXRjaCkge1xuICAgICAgICB0aHJvd05nU3dpdGNoUHJvdmlkZXJOb3RGb3VuZEVycm9yKCduZ1N3aXRjaERlZmF1bHQnLCAnTmdTd2l0Y2hEZWZhdWx0Jyk7XG4gICAgICB9XG4gICAgICBuZ1N3aXRjaC5fYWRkRGVmYXVsdChuZXcgU3dpdGNoVmlldyh2aWV3Q29udGFpbmVyLCB0ZW1wbGF0ZVJlZikpO1xuICAgIH1cbiAgICBzdGF0aWMgybVmYWMgPSBmdW5jdGlvbiBOZ1N3aXRjaERlZmF1bHRfRmFjdG9yeShfX25nRmFjdG9yeVR5cGVfXykge1xuICAgICAgcmV0dXJuIG5ldyAoX19uZ0ZhY3RvcnlUeXBlX18gfHwgTmdTd2l0Y2hEZWZhdWx0KShpMC7Jtcm1ZGlyZWN0aXZlSW5qZWN0KGkwLlZpZXdDb250YWluZXJSZWYpLCBpMC7Jtcm1ZGlyZWN0aXZlSW5qZWN0KGkwLlRlbXBsYXRlUmVmKSwgaTAuybXJtWRpcmVjdGl2ZUluamVjdChOZ1N3aXRjaCwgOSkpO1xuICAgIH07XG4gICAgc3RhdGljIMm1ZGlyID0gLyogQF9fUFVSRV9fICovaTAuybXJtWRlZmluZURpcmVjdGl2ZSh7XG4gICAgICB0eXBlOiBOZ1N3aXRjaERlZmF1bHQsXG4gICAgICBzZWxlY3RvcnM6IFtbXCJcIiwgXCJuZ1N3aXRjaERlZmF1bHRcIiwgXCJcIl1dXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIE5nU3dpdGNoRGVmYXVsdDtcbn0pKCk7XG4vKiNfX1BVUkVfXyovKCgpID0+IHtcbiAgKHR5cGVvZiBuZ0Rldk1vZGUgPT09IFwidW5kZWZpbmVkXCIgfHwgbmdEZXZNb2RlKSAmJiB2b2lkIDA7XG59KSgpO1xuZnVuY3Rpb24gdGhyb3dOZ1N3aXRjaFByb3ZpZGVyTm90Rm91bmRFcnJvcihhdHRyTmFtZSwgZGlyZWN0aXZlTmFtZSkge1xuICB0aHJvdyBuZXcgX1J1bnRpbWVFcnJvcigyMDAwLCBgQW4gZWxlbWVudCB3aXRoIHRoZSBcIiR7YXR0ck5hbWV9XCIgYXR0cmlidXRlIGAgKyBgKG1hdGNoaW5nIHRoZSBcIiR7ZGlyZWN0aXZlTmFtZX1cIiBkaXJlY3RpdmUpIG11c3QgYmUgbG9jYXRlZCBpbnNpZGUgYW4gZWxlbWVudCB3aXRoIHRoZSBcIm5nU3dpdGNoXCIgYXR0cmlidXRlIGAgKyBgKG1hdGNoaW5nIFwiTmdTd2l0Y2hcIiBkaXJlY3RpdmUpYCk7XG59XG5sZXQgTmdQbHVyYWwgPSAvKiNfX1BVUkVfXyovKCgpID0+IHtcbiAgY2xhc3MgTmdQbHVyYWwge1xuICAgIF9sb2NhbGl6YXRpb247XG4gICAgX2FjdGl2ZVZpZXc7XG4gICAgX2Nhc2VWaWV3cyA9IHt9O1xuICAgIGNvbnN0cnVjdG9yKF9sb2NhbGl6YXRpb24pIHtcbiAgICAgIHRoaXMuX2xvY2FsaXphdGlvbiA9IF9sb2NhbGl6YXRpb247XG4gICAgfVxuICAgIHNldCBuZ1BsdXJhbCh2YWx1ZSkge1xuICAgICAgdGhpcy5fdXBkYXRlVmlldyh2YWx1ZSk7XG4gICAgfVxuICAgIGFkZENhc2UodmFsdWUsIHN3aXRjaFZpZXcpIHtcbiAgICAgIHRoaXMuX2Nhc2VWaWV3c1t2YWx1ZV0gPSBzd2l0Y2hWaWV3O1xuICAgIH1cbiAgICBfdXBkYXRlVmlldyhzd2l0Y2hWYWx1ZSkge1xuICAgICAgdGhpcy5fY2xlYXJWaWV3cygpO1xuICAgICAgY29uc3QgY2FzZXMgPSBPYmplY3Qua2V5cyh0aGlzLl9jYXNlVmlld3MpO1xuICAgICAgY29uc3Qga2V5ID0gZ2V0UGx1cmFsQ2F0ZWdvcnkoc3dpdGNoVmFsdWUsIGNhc2VzLCB0aGlzLl9sb2NhbGl6YXRpb24pO1xuICAgICAgdGhpcy5fYWN0aXZhdGVWaWV3KHRoaXMuX2Nhc2VWaWV3c1trZXldKTtcbiAgICB9XG4gICAgX2NsZWFyVmlld3MoKSB7XG4gICAgICBpZiAodGhpcy5fYWN0aXZlVmlldykgdGhpcy5fYWN0aXZlVmlldy5kZXN0cm95KCk7XG4gICAgfVxuICAgIF9hY3RpdmF0ZVZpZXcodmlldykge1xuICAgICAgaWYgKHZpZXcpIHtcbiAgICAgICAgdGhpcy5fYWN0aXZlVmlldyA9IHZpZXc7XG4gICAgICAgIHRoaXMuX2FjdGl2ZVZpZXcuY3JlYXRlKCk7XG4gICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyDJtWZhYyA9IGZ1bmN0aW9uIE5nUGx1cmFsX0ZhY3RvcnkoX19uZ0ZhY3RvcnlUeXBlX18pIHtcbiAgICAgIHJldHVybiBuZXcgKF9fbmdGYWN0b3J5VHlwZV9fIHx8IE5nUGx1cmFsKShpMC7Jtcm1ZGlyZWN0aXZlSW5qZWN0KE5nTG9jYWxpemF0aW9uKSk7XG4gICAgfTtcbiAgICBzdGF0aWMgybVkaXIgPSAvKiBAX19QVVJFX18gKi9pMC7Jtcm1ZGVmaW5lRGlyZWN0aXZlKHtcbiAgICAgIHR5cGU6IE5nUGx1cmFsLFxuICAgICAgc2VsZWN0b3JzOiBbW1wiXCIsIFwibmdQbHVyYWxcIiwgXCJcIl1dLFxuICAgICAgaW5wdXRzOiB7XG4gICAgICAgIG5nUGx1cmFsOiBcIm5nUGx1cmFsXCJcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICByZXR1cm4gTmdQbHVyYWw7XG59KSgpO1xuLyojX19QVVJFX18qLygoKSA9PiB7XG4gICh0eXBlb2YgbmdEZXZNb2RlID09PSBcInVuZGVmaW5lZFwiIHx8IG5nRGV2TW9kZSkgJiYgdm9pZCAwO1xufSkoKTtcbmxldCBOZ1BsdXJhbENhc2UgPSAvKiNfX1BVUkVfXyovKCgpID0+IHtcbiAgY2xhc3MgTmdQbHVyYWxDYXNlIHtcbiAgICB2YWx1ZTtcbiAgICBjb25zdHJ1Y3Rvcih2YWx1ZSwgdGVtcGxhdGUsIHZpZXdDb250YWluZXIsIG5nUGx1cmFsKSB7XG4gICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICBjb25zdCBpc0FOdW1iZXIgPSAhaXNOYU4oTnVtYmVyKHZhbHVlKSk7XG4gICAgICBuZ1BsdXJhbC5hZGRDYXNlKGlzQU51bWJlciA/IGA9JHt2YWx1ZX1gIDogdmFsdWUsIG5ldyBTd2l0Y2hWaWV3KHZpZXdDb250YWluZXIsIHRlbXBsYXRlKSk7XG4gICAgfVxuICAgIHN0YXRpYyDJtWZhYyA9IGZ1bmN0aW9uIE5nUGx1cmFsQ2FzZV9GYWN0b3J5KF9fbmdGYWN0b3J5VHlwZV9fKSB7XG4gICAgICByZXR1cm4gbmV3IChfX25nRmFjdG9yeVR5cGVfXyB8fCBOZ1BsdXJhbENhc2UpKGkwLsm1ybVpbmplY3RBdHRyaWJ1dGUoJ25nUGx1cmFsQ2FzZScpLCBpMC7Jtcm1ZGlyZWN0aXZlSW5qZWN0KGkwLlRlbXBsYXRlUmVmKSwgaTAuybXJtWRpcmVjdGl2ZUluamVjdChpMC5WaWV3Q29udGFpbmVyUmVmKSwgaTAuybXJtWRpcmVjdGl2ZUluamVjdChOZ1BsdXJhbCwgMSkpO1xuICAgIH07XG4gICAgc3RhdGljIMm1ZGlyID0gLyogQF9fUFVSRV9fICovaTAuybXJtWRlZmluZURpcmVjdGl2ZSh7XG4gICAgICB0eXBlOiBOZ1BsdXJhbENhc2UsXG4gICAgICBzZWxlY3RvcnM6IFtbXCJcIiwgXCJuZ1BsdXJhbENhc2VcIiwgXCJcIl1dXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIE5nUGx1cmFsQ2FzZTtcbn0pKCk7XG4vKiNfX1BVUkVfXyovKCgpID0+IHtcbiAgKHR5cGVvZiBuZ0Rldk1vZGUgPT09IFwidW5kZWZpbmVkXCIgfHwgbmdEZXZNb2RlKSAmJiB2b2lkIDA7XG59KSgpO1xubGV0IE5nU3R5bGUgPSAvKiNfX1BVUkVfXyovKCgpID0+IHtcbiAgY2xhc3MgTmdTdHlsZSB7XG4gICAgX25nRWw7XG4gICAgX2RpZmZlcnM7XG4gICAgX3JlbmRlcmVyO1xuICAgIF9uZ1N0eWxlID0gbnVsbDtcbiAgICBfZGlmZmVyID0gbnVsbDtcbiAgICBjb25zdHJ1Y3RvcihfbmdFbCwgX2RpZmZlcnMsIF9yZW5kZXJlcikge1xuICAgICAgdGhpcy5fbmdFbCA9IF9uZ0VsO1xuICAgICAgdGhpcy5fZGlmZmVycyA9IF9kaWZmZXJzO1xuICAgICAgdGhpcy5fcmVuZGVyZXIgPSBfcmVuZGVyZXI7XG4gICAgfVxuICAgIHNldCBuZ1N0eWxlKHZhbHVlcykge1xuICAgICAgdGhpcy5fbmdTdHlsZSA9IHZhbHVlcztcbiAgICAgIGlmICghdGhpcy5fZGlmZmVyICYmIHZhbHVlcykge1xuICAgICAgICB0aGlzLl9kaWZmZXIgPSB0aGlzLl9kaWZmZXJzLmZpbmQodmFsdWVzKS5jcmVhdGUoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgbmdEb0NoZWNrKCkge1xuICAgICAgaWYgKHRoaXMuX2RpZmZlcikge1xuICAgICAgICBjb25zdCBjaGFuZ2VzID0gdGhpcy5fZGlmZmVyLmRpZmYodGhpcy5fbmdTdHlsZSk7XG4gICAgICAgIGlmIChjaGFuZ2VzKSB7XG4gICAgICAgICAgdGhpcy5fYXBwbHlDaGFuZ2VzKGNoYW5nZXMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIF9zZXRTdHlsZShuYW1lQW5kVW5pdCwgdmFsdWUpIHtcbiAgICAgIGNvbnN0IFtuYW1lLCB1bml0XSA9IG5hbWVBbmRVbml0LnNwbGl0KCcuJyk7XG4gICAgICBjb25zdCBmbGFncyA9IG5hbWUuaW5kZXhPZignLScpID09PSAtMSA/IHVuZGVmaW5lZCA6IFJlbmRlcmVyU3R5bGVGbGFnczIuRGFzaENhc2U7XG4gICAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgICAgICB0aGlzLl9yZW5kZXJlci5zZXRTdHlsZSh0aGlzLl9uZ0VsLm5hdGl2ZUVsZW1lbnQsIG5hbWUsIHVuaXQgPyBgJHt2YWx1ZX0ke3VuaXR9YCA6IHZhbHVlLCBmbGFncyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9yZW5kZXJlci5yZW1vdmVTdHlsZSh0aGlzLl9uZ0VsLm5hdGl2ZUVsZW1lbnQsIG5hbWUsIGZsYWdzKTtcbiAgICAgIH1cbiAgICB9XG4gICAgX2FwcGx5Q2hhbmdlcyhjaGFuZ2VzKSB7XG4gICAgICBjaGFuZ2VzLmZvckVhY2hSZW1vdmVkSXRlbShyZWNvcmQgPT4gdGhpcy5fc2V0U3R5bGUocmVjb3JkLmtleSwgbnVsbCkpO1xuICAgICAgY2hhbmdlcy5mb3JFYWNoQWRkZWRJdGVtKHJlY29yZCA9PiB0aGlzLl9zZXRTdHlsZShyZWNvcmQua2V5LCByZWNvcmQuY3VycmVudFZhbHVlKSk7XG4gICAgICBjaGFuZ2VzLmZvckVhY2hDaGFuZ2VkSXRlbShyZWNvcmQgPT4gdGhpcy5fc2V0U3R5bGUocmVjb3JkLmtleSwgcmVjb3JkLmN1cnJlbnRWYWx1ZSkpO1xuICAgIH1cbiAgICBzdGF0aWMgybVmYWMgPSBmdW5jdGlvbiBOZ1N0eWxlX0ZhY3RvcnkoX19uZ0ZhY3RvcnlUeXBlX18pIHtcbiAgICAgIHJldHVybiBuZXcgKF9fbmdGYWN0b3J5VHlwZV9fIHx8IE5nU3R5bGUpKGkwLsm1ybVkaXJlY3RpdmVJbmplY3QoaTAuRWxlbWVudFJlZiksIGkwLsm1ybVkaXJlY3RpdmVJbmplY3QoaTAuS2V5VmFsdWVEaWZmZXJzKSwgaTAuybXJtWRpcmVjdGl2ZUluamVjdChpMC5SZW5kZXJlcjIpKTtcbiAgICB9O1xuICAgIHN0YXRpYyDJtWRpciA9IC8qIEBfX1BVUkVfXyAqL2kwLsm1ybVkZWZpbmVEaXJlY3RpdmUoe1xuICAgICAgdHlwZTogTmdTdHlsZSxcbiAgICAgIHNlbGVjdG9yczogW1tcIlwiLCBcIm5nU3R5bGVcIiwgXCJcIl1dLFxuICAgICAgaW5wdXRzOiB7XG4gICAgICAgIG5nU3R5bGU6IFwibmdTdHlsZVwiXG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIE5nU3R5bGU7XG59KSgpO1xuLyojX19QVVJFX18qLygoKSA9PiB7XG4gICh0eXBlb2YgbmdEZXZNb2RlID09PSBcInVuZGVmaW5lZFwiIHx8IG5nRGV2TW9kZSkgJiYgdm9pZCAwO1xufSkoKTtcbmxldCBOZ1RlbXBsYXRlT3V0bGV0ID0gLyojX19QVVJFX18qLygoKSA9PiB7XG4gIGNsYXNzIE5nVGVtcGxhdGVPdXRsZXQge1xuICAgIF92aWV3Q29udGFpbmVyUmVmO1xuICAgIF92aWV3UmVmID0gbnVsbDtcbiAgICBuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCA9IG51bGw7XG4gICAgbmdUZW1wbGF0ZU91dGxldCA9IG51bGw7XG4gICAgbmdUZW1wbGF0ZU91dGxldEluamVjdG9yID0gbnVsbDtcbiAgICBpbmplY3RvciA9IGluamVjdChJbmplY3Rvcik7XG4gICAgY29uc3RydWN0b3IoX3ZpZXdDb250YWluZXJSZWYpIHtcbiAgICAgIHRoaXMuX3ZpZXdDb250YWluZXJSZWYgPSBfdmlld0NvbnRhaW5lclJlZjtcbiAgICB9XG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlcykge1xuICAgICAgaWYgKHRoaXMuX3Nob3VsZFJlY3JlYXRlVmlldyhjaGFuZ2VzKSkge1xuICAgICAgICBjb25zdCB2aWV3Q29udGFpbmVyUmVmID0gdGhpcy5fdmlld0NvbnRhaW5lclJlZjtcbiAgICAgICAgaWYgKHRoaXMuX3ZpZXdSZWYpIHtcbiAgICAgICAgICB2aWV3Q29udGFpbmVyUmVmLnJlbW92ZSh2aWV3Q29udGFpbmVyUmVmLmluZGV4T2YodGhpcy5fdmlld1JlZikpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5uZ1RlbXBsYXRlT3V0bGV0KSB7XG4gICAgICAgICAgdGhpcy5fdmlld1JlZiA9IG51bGw7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHZpZXdDb250ZXh0ID0gdGhpcy5fY3JlYXRlQ29udGV4dEZvcndhcmRQcm94eSgpO1xuICAgICAgICB0aGlzLl92aWV3UmVmID0gdmlld0NvbnRhaW5lclJlZi5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy5uZ1RlbXBsYXRlT3V0bGV0LCB2aWV3Q29udGV4dCwge1xuICAgICAgICAgIGluamVjdG9yOiB0aGlzLl9nZXRJbmplY3RvcigpXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICBfZ2V0SW5qZWN0b3IoKSB7XG4gICAgICBpZiAodGhpcy5uZ1RlbXBsYXRlT3V0bGV0SW5qZWN0b3IgPT09ICdvdXRsZXQnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmluamVjdG9yO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMubmdUZW1wbGF0ZU91dGxldEluamVjdG9yID8/IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgX3Nob3VsZFJlY3JlYXRlVmlldyhjaGFuZ2VzKSB7XG4gICAgICByZXR1cm4gISFjaGFuZ2VzWyduZ1RlbXBsYXRlT3V0bGV0J10gfHwgISFjaGFuZ2VzWyduZ1RlbXBsYXRlT3V0bGV0SW5qZWN0b3InXTtcbiAgICB9XG4gICAgX2NyZWF0ZUNvbnRleHRGb3J3YXJkUHJveHkoKSB7XG4gICAgICByZXR1cm4gbmV3IFByb3h5KHt9LCB7XG4gICAgICAgIHNldDogKF90YXJnZXQsIHByb3AsIG5ld1ZhbHVlKSA9PiB7XG4gICAgICAgICAgaWYgKCF0aGlzLm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0KSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBSZWZsZWN0LnNldCh0aGlzLm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0LCBwcm9wLCBuZXdWYWx1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIGdldDogKF90YXJnZXQsIHByb3AsIHJlY2VpdmVyKSA9PiB7XG4gICAgICAgICAgaWYgKCF0aGlzLm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0KSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gUmVmbGVjdC5nZXQodGhpcy5uZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCwgcHJvcCwgcmVjZWl2ZXIpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgc3RhdGljIMm1ZmFjID0gZnVuY3Rpb24gTmdUZW1wbGF0ZU91dGxldF9GYWN0b3J5KF9fbmdGYWN0b3J5VHlwZV9fKSB7XG4gICAgICByZXR1cm4gbmV3IChfX25nRmFjdG9yeVR5cGVfXyB8fCBOZ1RlbXBsYXRlT3V0bGV0KShpMC7Jtcm1ZGlyZWN0aXZlSW5qZWN0KGkwLlZpZXdDb250YWluZXJSZWYpKTtcbiAgICB9O1xuICAgIHN0YXRpYyDJtWRpciA9IC8qIEBfX1BVUkVfXyAqL2kwLsm1ybVkZWZpbmVEaXJlY3RpdmUoe1xuICAgICAgdHlwZTogTmdUZW1wbGF0ZU91dGxldCxcbiAgICAgIHNlbGVjdG9yczogW1tcIlwiLCBcIm5nVGVtcGxhdGVPdXRsZXRcIiwgXCJcIl1dLFxuICAgICAgaW5wdXRzOiB7XG4gICAgICAgIG5nVGVtcGxhdGVPdXRsZXRDb250ZXh0OiBcIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0XCIsXG4gICAgICAgIG5nVGVtcGxhdGVPdXRsZXQ6IFwibmdUZW1wbGF0ZU91dGxldFwiLFxuICAgICAgICBuZ1RlbXBsYXRlT3V0bGV0SW5qZWN0b3I6IFwibmdUZW1wbGF0ZU91dGxldEluamVjdG9yXCJcbiAgICAgIH0sXG4gICAgICBmZWF0dXJlczogW2kwLsm1ybVOZ09uQ2hhbmdlc0ZlYXR1cmVdXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIE5nVGVtcGxhdGVPdXRsZXQ7XG59KSgpO1xuLyojX19QVVJFX18qLygoKSA9PiB7XG4gICh0eXBlb2YgbmdEZXZNb2RlID09PSBcInVuZGVmaW5lZFwiIHx8IG5nRGV2TW9kZSkgJiYgdm9pZCAwO1xufSkoKTtcbmNvbnN0IENPTU1PTl9ESVJFQ1RJVkVTID0gW05nQ2xhc3MsIE5nQ29tcG9uZW50T3V0bGV0LCBOZ0Zvck9mLCBOZ0lmLCBOZ1RlbXBsYXRlT3V0bGV0LCBOZ1N0eWxlLCBOZ1N3aXRjaCwgTmdTd2l0Y2hDYXNlLCBOZ1N3aXRjaERlZmF1bHQsIE5nUGx1cmFsLCBOZ1BsdXJhbENhc2VdO1xuZnVuY3Rpb24gaW52YWxpZFBpcGVBcmd1bWVudEVycm9yKHR5cGUsIHZhbHVlKSB7XG4gIHJldHVybiBuZXcgX1J1bnRpbWVFcnJvcigyMTAwLCBuZ0Rldk1vZGUgJiYgYEludmFsaWRQaXBlQXJndW1lbnQ6ICcke3ZhbHVlfScgZm9yIHBpcGUgJyR7X3N0cmluZ2lmeSh0eXBlKX0nYCk7XG59XG5mdW5jdGlvbiB3YXJuSWZTaWduYWwocGlwZU5hbWUsIHZhbHVlKSB7XG4gIGlmIChpc1NpZ25hbCh2YWx1ZSkpIHtcbiAgICBjb25zb2xlLndhcm4oYFRoZSAke3BpcGVOYW1lfSBkb2VzIG5vdCB1bndyYXAgc2lnbmFscy4gUmVjZWl2ZWQgYSBzaWduYWwgd2l0aCB2YWx1ZTpgLCB2YWx1ZSgpKTtcbiAgfVxufVxuY2xhc3MgU3Vic2NyaWJhYmxlU3RyYXRlZ3kge1xuICBjcmVhdGVTdWJzY3JpcHRpb24oYXN5bmMsIHVwZGF0ZUxhdGVzdFZhbHVlLCBvbkVycm9yKSB7XG4gICAgcmV0dXJuIHVudHJhY2tlZCgoKSA9PiBhc3luYy5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogdXBkYXRlTGF0ZXN0VmFsdWUsXG4gICAgICBlcnJvcjogb25FcnJvclxuICAgIH0pKTtcbiAgfVxuICBkaXNwb3NlKHN1YnNjcmlwdGlvbikge1xuICAgIHVudHJhY2tlZCgoKSA9PiBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSk7XG4gIH1cbn1cbmNsYXNzIFByb21pc2VTdHJhdGVneSB7XG4gIGNyZWF0ZVN1YnNjcmlwdGlvbihhc3luYywgdXBkYXRlTGF0ZXN0VmFsdWUsIG9uRXJyb3IpIHtcbiAgICBhc3luYy50aGVuKHYgPT4gdXBkYXRlTGF0ZXN0VmFsdWU/Lih2KSwgZSA9PiBvbkVycm9yPy4oZSkpO1xuICAgIHJldHVybiB7XG4gICAgICB1bnN1YnNjcmliZTogKCkgPT4ge1xuICAgICAgICB1cGRhdGVMYXRlc3RWYWx1ZSA9IG51bGw7XG4gICAgICAgIG9uRXJyb3IgPSBudWxsO1xuICAgICAgfVxuICAgIH07XG4gIH1cbiAgZGlzcG9zZShzdWJzY3JpcHRpb24pIHtcbiAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgfVxufVxuY29uc3QgX3Byb21pc2VTdHJhdGVneSA9IC8qI19fUFVSRV9fKi9uZXcgUHJvbWlzZVN0cmF0ZWd5KCk7XG5jb25zdCBfc3Vic2NyaWJhYmxlU3RyYXRlZ3kgPSAvKiNfX1BVUkVfXyovbmV3IFN1YnNjcmliYWJsZVN0cmF0ZWd5KCk7XG5sZXQgQXN5bmNQaXBlID0gLyojX19QVVJFX18qLygoKSA9PiB7XG4gIGNsYXNzIEFzeW5jUGlwZSB7XG4gICAgX3JlZjtcbiAgICBfbGF0ZXN0VmFsdWUgPSBudWxsO1xuICAgIG1hcmtGb3JDaGVja09uVmFsdWVVcGRhdGUgPSB0cnVlO1xuICAgIF9zdWJzY3JpcHRpb24gPSBudWxsO1xuICAgIF9vYmogPSBudWxsO1xuICAgIF9zdHJhdGVneSA9IG51bGw7XG4gICAgYXBwbGljYXRpb25FcnJvckhhbmRsZXIgPSBpbmplY3QoX0lOVEVSTkFMX0FQUExJQ0FUSU9OX0VSUk9SX0hBTkRMRVIpO1xuICAgIGNvbnN0cnVjdG9yKHJlZikge1xuICAgICAgdGhpcy5fcmVmID0gcmVmO1xuICAgIH1cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgIGlmICh0aGlzLl9zdWJzY3JpcHRpb24pIHtcbiAgICAgICAgdGhpcy5fZGlzcG9zZSgpO1xuICAgICAgfVxuICAgICAgdGhpcy5fcmVmID0gbnVsbDtcbiAgICB9XG4gICAgdHJhbnNmb3JtKG9iaikge1xuICAgICAgaWYgKCF0aGlzLl9vYmopIHtcbiAgICAgICAgaWYgKG9iaikge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLm1hcmtGb3JDaGVja09uVmFsdWVVcGRhdGUgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuX3N1YnNjcmliZShvYmopO1xuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICB0aGlzLm1hcmtGb3JDaGVja09uVmFsdWVVcGRhdGUgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fbGF0ZXN0VmFsdWU7XG4gICAgICB9XG4gICAgICBpZiAob2JqICE9PSB0aGlzLl9vYmopIHtcbiAgICAgICAgdGhpcy5fZGlzcG9zZSgpO1xuICAgICAgICByZXR1cm4gdGhpcy50cmFuc2Zvcm0ob2JqKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLl9sYXRlc3RWYWx1ZTtcbiAgICB9XG4gICAgX3N1YnNjcmliZShvYmopIHtcbiAgICAgIHRoaXMuX29iaiA9IG9iajtcbiAgICAgIHRoaXMuX3N0cmF0ZWd5ID0gdGhpcy5fc2VsZWN0U3RyYXRlZ3kob2JqKTtcbiAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbiA9IHRoaXMuX3N0cmF0ZWd5LmNyZWF0ZVN1YnNjcmlwdGlvbihvYmosIHZhbHVlID0+IHRoaXMuX3VwZGF0ZUxhdGVzdFZhbHVlKG9iaiwgdmFsdWUpLCBlID0+IHRoaXMuYXBwbGljYXRpb25FcnJvckhhbmRsZXIoZSkpO1xuICAgIH1cbiAgICBfc2VsZWN0U3RyYXRlZ3kob2JqKSB7XG4gICAgICBpZiAoX2lzUHJvbWlzZShvYmopKSB7XG4gICAgICAgIHJldHVybiBfcHJvbWlzZVN0cmF0ZWd5O1xuICAgICAgfVxuICAgICAgaWYgKF9pc1N1YnNjcmliYWJsZShvYmopKSB7XG4gICAgICAgIHJldHVybiBfc3Vic2NyaWJhYmxlU3RyYXRlZ3k7XG4gICAgICB9XG4gICAgICB0aHJvdyBpbnZhbGlkUGlwZUFyZ3VtZW50RXJyb3IoQXN5bmNQaXBlLCBvYmopO1xuICAgIH1cbiAgICBfZGlzcG9zZSgpIHtcbiAgICAgIHRoaXMuX3N0cmF0ZWd5LmRpc3Bvc2UodGhpcy5fc3Vic2NyaXB0aW9uKTtcbiAgICAgIHRoaXMuX2xhdGVzdFZhbHVlID0gbnVsbDtcbiAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbiA9IG51bGw7XG4gICAgICB0aGlzLl9vYmogPSBudWxsO1xuICAgIH1cbiAgICBfdXBkYXRlTGF0ZXN0VmFsdWUoYXN5bmMsIHZhbHVlKSB7XG4gICAgICBpZiAoYXN5bmMgPT09IHRoaXMuX29iaikge1xuICAgICAgICB0aGlzLl9sYXRlc3RWYWx1ZSA9IHZhbHVlO1xuICAgICAgICBpZiAodGhpcy5tYXJrRm9yQ2hlY2tPblZhbHVlVXBkYXRlKSB7XG4gICAgICAgICAgdGhpcy5fcmVmPy5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgybVmYWMgPSBmdW5jdGlvbiBBc3luY1BpcGVfRmFjdG9yeShfX25nRmFjdG9yeVR5cGVfXykge1xuICAgICAgcmV0dXJuIG5ldyAoX19uZ0ZhY3RvcnlUeXBlX18gfHwgQXN5bmNQaXBlKShpMC7Jtcm1ZGlyZWN0aXZlSW5qZWN0KGkwLkNoYW5nZURldGVjdG9yUmVmLCAxNikpO1xuICAgIH07XG4gICAgc3RhdGljIMm1cGlwZSA9IC8qIEBfX1BVUkVfXyAqL2kwLsm1ybVkZWZpbmVQaXBlKHtcbiAgICAgIG5hbWU6IFwiYXN5bmNcIixcbiAgICAgIHR5cGU6IEFzeW5jUGlwZSxcbiAgICAgIHB1cmU6IGZhbHNlXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIEFzeW5jUGlwZTtcbn0pKCk7XG4vKiNfX1BVUkVfXyovKCgpID0+IHtcbiAgKHR5cGVvZiBuZ0Rldk1vZGUgPT09IFwidW5kZWZpbmVkXCIgfHwgbmdEZXZNb2RlKSAmJiB2b2lkIDA7XG59KSgpO1xubGV0IExvd2VyQ2FzZVBpcGUgPSAvKiNfX1BVUkVfXyovKCgpID0+IHtcbiAgY2xhc3MgTG93ZXJDYXNlUGlwZSB7XG4gICAgdHJhbnNmb3JtKHZhbHVlKSB7XG4gICAgICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIG51bGw7XG4gICAgICBhc3NlcnRQaXBlQXJndW1lbnQoTG93ZXJDYXNlUGlwZSwgdmFsdWUpO1xuICAgICAgcmV0dXJuIHZhbHVlLnRvTG93ZXJDYXNlKCk7XG4gICAgfVxuICAgIHN0YXRpYyDJtWZhYyA9IGZ1bmN0aW9uIExvd2VyQ2FzZVBpcGVfRmFjdG9yeShfX25nRmFjdG9yeVR5cGVfXykge1xuICAgICAgcmV0dXJuIG5ldyAoX19uZ0ZhY3RvcnlUeXBlX18gfHwgTG93ZXJDYXNlUGlwZSkoKTtcbiAgICB9O1xuICAgIHN0YXRpYyDJtXBpcGUgPSAvKiBAX19QVVJFX18gKi9pMC7Jtcm1ZGVmaW5lUGlwZSh7XG4gICAgICBuYW1lOiBcImxvd2VyY2FzZVwiLFxuICAgICAgdHlwZTogTG93ZXJDYXNlUGlwZSxcbiAgICAgIHB1cmU6IHRydWVcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gTG93ZXJDYXNlUGlwZTtcbn0pKCk7XG4vKiNfX1BVUkVfXyovKCgpID0+IHtcbiAgKHR5cGVvZiBuZ0Rldk1vZGUgPT09IFwidW5kZWZpbmVkXCIgfHwgbmdEZXZNb2RlKSAmJiB2b2lkIDA7XG59KSgpO1xuY29uc3QgdW5pY29kZVdvcmRNYXRjaCA9IC8oPzpbMC05QS1aYS16XFx4QUFcXHhCNVxceEJBXFx4QzAtXFx4RDZcXHhEOC1cXHhGNlxceEY4LVxcdTAyQzFcXHUwMkM2LVxcdTAyRDFcXHUwMkUwLVxcdTAyRTRcXHUwMkVDXFx1MDJFRVxcdTAzNzAtXFx1MDM3NFxcdTAzNzZcXHUwMzc3XFx1MDM3QS1cXHUwMzdEXFx1MDM3RlxcdTAzODZcXHUwMzg4LVxcdTAzOEFcXHUwMzhDXFx1MDM4RS1cXHUwM0ExXFx1MDNBMy1cXHUwM0Y1XFx1MDNGNy1cXHUwNDgxXFx1MDQ4QS1cXHUwNTJGXFx1MDUzMS1cXHUwNTU2XFx1MDU1OVxcdTA1NjAtXFx1MDU4OFxcdTA1RDAtXFx1MDVFQVxcdTA1RUYtXFx1MDVGMlxcdTA2MjAtXFx1MDY0QVxcdTA2NkVcXHUwNjZGXFx1MDY3MS1cXHUwNkQzXFx1MDZENVxcdTA2RTVcXHUwNkU2XFx1MDZFRVxcdTA2RUZcXHUwNkZBLVxcdTA2RkNcXHUwNkZGXFx1MDcxMFxcdTA3MTItXFx1MDcyRlxcdTA3NEQtXFx1MDdBNVxcdTA3QjFcXHUwN0NBLVxcdTA3RUFcXHUwN0Y0XFx1MDdGNVxcdTA3RkFcXHUwODAwLVxcdTA4MTVcXHUwODFBXFx1MDgyNFxcdTA4MjhcXHUwODQwLVxcdTA4NThcXHUwODYwLVxcdTA4NkFcXHUwODcwLVxcdTA4ODdcXHUwODg5LVxcdTA4OEVcXHUwOEEwLVxcdTA4QzlcXHUwOTA0LVxcdTA5MzlcXHUwOTNEXFx1MDk1MFxcdTA5NTgtXFx1MDk2MVxcdTA5NzEtXFx1MDk4MFxcdTA5ODUtXFx1MDk4Q1xcdTA5OEZcXHUwOTkwXFx1MDk5My1cXHUwOUE4XFx1MDlBQS1cXHUwOUIwXFx1MDlCMlxcdTA5QjYtXFx1MDlCOVxcdTA5QkRcXHUwOUNFXFx1MDlEQ1xcdTA5RERcXHUwOURGLVxcdTA5RTFcXHUwOUYwXFx1MDlGMVxcdTA5RkNcXHUwQTA1LVxcdTBBMEFcXHUwQTBGXFx1MEExMFxcdTBBMTMtXFx1MEEyOFxcdTBBMkEtXFx1MEEzMFxcdTBBMzJcXHUwQTMzXFx1MEEzNVxcdTBBMzZcXHUwQTM4XFx1MEEzOVxcdTBBNTktXFx1MEE1Q1xcdTBBNUVcXHUwQTcyLVxcdTBBNzRcXHUwQTg1LVxcdTBBOERcXHUwQThGLVxcdTBBOTFcXHUwQTkzLVxcdTBBQThcXHUwQUFBLVxcdTBBQjBcXHUwQUIyXFx1MEFCM1xcdTBBQjUtXFx1MEFCOVxcdTBBQkRcXHUwQUQwXFx1MEFFMFxcdTBBRTFcXHUwQUY5XFx1MEIwNS1cXHUwQjBDXFx1MEIwRlxcdTBCMTBcXHUwQjEzLVxcdTBCMjhcXHUwQjJBLVxcdTBCMzBcXHUwQjMyXFx1MEIzM1xcdTBCMzUtXFx1MEIzOVxcdTBCM0RcXHUwQjVDXFx1MEI1RFxcdTBCNUYtXFx1MEI2MVxcdTBCNzFcXHUwQjgzXFx1MEI4NS1cXHUwQjhBXFx1MEI4RS1cXHUwQjkwXFx1MEI5Mi1cXHUwQjk1XFx1MEI5OVxcdTBCOUFcXHUwQjlDXFx1MEI5RVxcdTBCOUZcXHUwQkEzXFx1MEJBNFxcdTBCQTgtXFx1MEJBQVxcdTBCQUUtXFx1MEJCOVxcdTBCRDBcXHUwQzA1LVxcdTBDMENcXHUwQzBFLVxcdTBDMTBcXHUwQzEyLVxcdTBDMjhcXHUwQzJBLVxcdTBDMzlcXHUwQzNEXFx1MEM1OC1cXHUwQzVBXFx1MEM1RFxcdTBDNjBcXHUwQzYxXFx1MEM4MFxcdTBDODUtXFx1MEM4Q1xcdTBDOEUtXFx1MEM5MFxcdTBDOTItXFx1MENBOFxcdTBDQUEtXFx1MENCM1xcdTBDQjUtXFx1MENCOVxcdTBDQkRcXHUwQ0REXFx1MENERVxcdTBDRTBcXHUwQ0UxXFx1MENGMVxcdTBDRjJcXHUwRDA0LVxcdTBEMENcXHUwRDBFLVxcdTBEMTBcXHUwRDEyLVxcdTBEM0FcXHUwRDNEXFx1MEQ0RVxcdTBENTQtXFx1MEQ1NlxcdTBENUYtXFx1MEQ2MVxcdTBEN0EtXFx1MEQ3RlxcdTBEODUtXFx1MEQ5NlxcdTBEOUEtXFx1MERCMVxcdTBEQjMtXFx1MERCQlxcdTBEQkRcXHUwREMwLVxcdTBEQzZcXHUwRTAxLVxcdTBFMzBcXHUwRTMyXFx1MEUzM1xcdTBFNDAtXFx1MEU0NlxcdTBFODFcXHUwRTgyXFx1MEU4NFxcdTBFODYtXFx1MEU4QVxcdTBFOEMtXFx1MEVBM1xcdTBFQTVcXHUwRUE3LVxcdTBFQjBcXHUwRUIyXFx1MEVCM1xcdTBFQkRcXHUwRUMwLVxcdTBFQzRcXHUwRUM2XFx1MEVEQy1cXHUwRURGXFx1MEYwMFxcdTBGNDAtXFx1MEY0N1xcdTBGNDktXFx1MEY2Q1xcdTBGODgtXFx1MEY4Q1xcdTEwMDAtXFx1MTAyQVxcdTEwM0ZcXHUxMDUwLVxcdTEwNTVcXHUxMDVBLVxcdTEwNURcXHUxMDYxXFx1MTA2NVxcdTEwNjZcXHUxMDZFLVxcdTEwNzBcXHUxMDc1LVxcdTEwODFcXHUxMDhFXFx1MTBBMC1cXHUxMEM1XFx1MTBDN1xcdTEwQ0RcXHUxMEQwLVxcdTEwRkFcXHUxMEZDLVxcdTEyNDhcXHUxMjRBLVxcdTEyNERcXHUxMjUwLVxcdTEyNTZcXHUxMjU4XFx1MTI1QS1cXHUxMjVEXFx1MTI2MC1cXHUxMjg4XFx1MTI4QS1cXHUxMjhEXFx1MTI5MC1cXHUxMkIwXFx1MTJCMi1cXHUxMkI1XFx1MTJCOC1cXHUxMkJFXFx1MTJDMFxcdTEyQzItXFx1MTJDNVxcdTEyQzgtXFx1MTJENlxcdTEyRDgtXFx1MTMxMFxcdTEzMTItXFx1MTMxNVxcdTEzMTgtXFx1MTM1QVxcdTEzODAtXFx1MTM4RlxcdTEzQTAtXFx1MTNGNVxcdTEzRjgtXFx1MTNGRFxcdTE0MDEtXFx1MTY2Q1xcdTE2NkYtXFx1MTY3RlxcdTE2ODEtXFx1MTY5QVxcdTE2QTAtXFx1MTZFQVxcdTE2RjEtXFx1MTZGOFxcdTE3MDAtXFx1MTcxMVxcdTE3MUYtXFx1MTczMVxcdTE3NDAtXFx1MTc1MVxcdTE3NjAtXFx1MTc2Q1xcdTE3NkUtXFx1MTc3MFxcdTE3ODAtXFx1MTdCM1xcdTE3RDdcXHUxN0RDXFx1MTgyMC1cXHUxODc4XFx1MTg4MC1cXHUxODg0XFx1MTg4Ny1cXHUxOEE4XFx1MThBQVxcdTE4QjAtXFx1MThGNVxcdTE5MDAtXFx1MTkxRVxcdTE5NTAtXFx1MTk2RFxcdTE5NzAtXFx1MTk3NFxcdTE5ODAtXFx1MTlBQlxcdTE5QjAtXFx1MTlDOVxcdTFBMDAtXFx1MUExNlxcdTFBMjAtXFx1MUE1NFxcdTFBQTdcXHUxQjA1LVxcdTFCMzNcXHUxQjQ1LVxcdTFCNENcXHUxQjgzLVxcdTFCQTBcXHUxQkFFXFx1MUJBRlxcdTFCQkEtXFx1MUJFNVxcdTFDMDAtXFx1MUMyM1xcdTFDNEQtXFx1MUM0RlxcdTFDNUEtXFx1MUM3RFxcdTFDODAtXFx1MUM4OFxcdTFDOTAtXFx1MUNCQVxcdTFDQkQtXFx1MUNCRlxcdTFDRTktXFx1MUNFQ1xcdTFDRUUtXFx1MUNGM1xcdTFDRjVcXHUxQ0Y2XFx1MUNGQVxcdTFEMDAtXFx1MURCRlxcdTFFMDAtXFx1MUYxNVxcdTFGMTgtXFx1MUYxRFxcdTFGMjAtXFx1MUY0NVxcdTFGNDgtXFx1MUY0RFxcdTFGNTAtXFx1MUY1N1xcdTFGNTlcXHUxRjVCXFx1MUY1RFxcdTFGNUYtXFx1MUY3RFxcdTFGODAtXFx1MUZCNFxcdTFGQjYtXFx1MUZCQ1xcdTFGQkVcXHUxRkMyLVxcdTFGQzRcXHUxRkM2LVxcdTFGQ0NcXHUxRkQwLVxcdTFGRDNcXHUxRkQ2LVxcdTFGREJcXHUxRkUwLVxcdTFGRUNcXHUxRkYyLVxcdTFGRjRcXHUxRkY2LVxcdTFGRkNcXHUyMDcxXFx1MjA3RlxcdTIwOTAtXFx1MjA5Q1xcdTIxMDJcXHUyMTA3XFx1MjEwQS1cXHUyMTEzXFx1MjExNVxcdTIxMTktXFx1MjExRFxcdTIxMjRcXHUyMTI2XFx1MjEyOFxcdTIxMkEtXFx1MjEyRFxcdTIxMkYtXFx1MjEzOVxcdTIxM0MtXFx1MjEzRlxcdTIxNDUtXFx1MjE0OVxcdTIxNEVcXHUyMTgzXFx1MjE4NFxcdTJDMDAtXFx1MkNFNFxcdTJDRUItXFx1MkNFRVxcdTJDRjJcXHUyQ0YzXFx1MkQwMC1cXHUyRDI1XFx1MkQyN1xcdTJEMkRcXHUyRDMwLVxcdTJENjdcXHUyRDZGXFx1MkQ4MC1cXHUyRDk2XFx1MkRBMC1cXHUyREE2XFx1MkRBOC1cXHUyREFFXFx1MkRCMC1cXHUyREI2XFx1MkRCOC1cXHUyREJFXFx1MkRDMC1cXHUyREM2XFx1MkRDOC1cXHUyRENFXFx1MkREMC1cXHUyREQ2XFx1MkREOC1cXHUyRERFXFx1MkUyRlxcdTMwMDVcXHUzMDA2XFx1MzAzMS1cXHUzMDM1XFx1MzAzQlxcdTMwM0NcXHUzMDQxLVxcdTMwOTZcXHUzMDlELVxcdTMwOUZcXHUzMEExLVxcdTMwRkFcXHUzMEZDLVxcdTMwRkZcXHUzMTA1LVxcdTMxMkZcXHUzMTMxLVxcdTMxOEVcXHUzMUEwLVxcdTMxQkZcXHUzMUYwLVxcdTMxRkZcXHUzNDAwLVxcdTREQkZcXHU0RTAwLVxcdUE0OENcXHVBNEQwLVxcdUE0RkRcXHVBNTAwLVxcdUE2MENcXHVBNjEwLVxcdUE2MUZcXHVBNjJBXFx1QTYyQlxcdUE2NDAtXFx1QTY2RVxcdUE2N0YtXFx1QTY5RFxcdUE2QTAtXFx1QTZFNVxcdUE3MTctXFx1QTcxRlxcdUE3MjItXFx1QTc4OFxcdUE3OEItXFx1QTdDQVxcdUE3RDBcXHVBN0QxXFx1QTdEM1xcdUE3RDUtXFx1QTdEOVxcdUE3RjItXFx1QTgwMVxcdUE4MDMtXFx1QTgwNVxcdUE4MDctXFx1QTgwQVxcdUE4MEMtXFx1QTgyMlxcdUE4NDAtXFx1QTg3M1xcdUE4ODItXFx1QThCM1xcdUE4RjItXFx1QThGN1xcdUE4RkJcXHVBOEZEXFx1QThGRVxcdUE5MEEtXFx1QTkyNVxcdUE5MzAtXFx1QTk0NlxcdUE5NjAtXFx1QTk3Q1xcdUE5ODQtXFx1QTlCMlxcdUE5Q0ZcXHVBOUUwLVxcdUE5RTRcXHVBOUU2LVxcdUE5RUZcXHVBOUZBLVxcdUE5RkVcXHVBQTAwLVxcdUFBMjhcXHVBQTQwLVxcdUFBNDJcXHVBQTQ0LVxcdUFBNEJcXHVBQTYwLVxcdUFBNzZcXHVBQTdBXFx1QUE3RS1cXHVBQUFGXFx1QUFCMVxcdUFBQjVcXHVBQUI2XFx1QUFCOS1cXHVBQUJEXFx1QUFDMFxcdUFBQzJcXHVBQURCLVxcdUFBRERcXHVBQUUwLVxcdUFBRUFcXHVBQUYyLVxcdUFBRjRcXHVBQjAxLVxcdUFCMDZcXHVBQjA5LVxcdUFCMEVcXHVBQjExLVxcdUFCMTZcXHVBQjIwLVxcdUFCMjZcXHVBQjI4LVxcdUFCMkVcXHVBQjMwLVxcdUFCNUFcXHVBQjVDLVxcdUFCNjlcXHVBQjcwLVxcdUFCRTJcXHVBQzAwLVxcdUQ3QTNcXHVEN0IwLVxcdUQ3QzZcXHVEN0NCLVxcdUQ3RkJcXHVGOTAwLVxcdUZBNkRcXHVGQTcwLVxcdUZBRDlcXHVGQjAwLVxcdUZCMDZcXHVGQjEzLVxcdUZCMTdcXHVGQjFEXFx1RkIxRi1cXHVGQjI4XFx1RkIyQS1cXHVGQjM2XFx1RkIzOC1cXHVGQjNDXFx1RkIzRVxcdUZCNDBcXHVGQjQxXFx1RkI0M1xcdUZCNDRcXHVGQjQ2LVxcdUZCQjFcXHVGQkQzLVxcdUZEM0RcXHVGRDUwLVxcdUZEOEZcXHVGRDkyLVxcdUZEQzdcXHVGREYwLVxcdUZERkJcXHVGRTcwLVxcdUZFNzRcXHVGRTc2LVxcdUZFRkNcXHVGRjIxLVxcdUZGM0FcXHVGRjQxLVxcdUZGNUFcXHVGRjY2LVxcdUZGQkVcXHVGRkMyLVxcdUZGQzdcXHVGRkNBLVxcdUZGQ0ZcXHVGRkQyLVxcdUZGRDdcXHVGRkRBLVxcdUZGRENdfFxcdUQ4MDBbXFx1REMwMC1cXHVEQzBCXFx1REMwRC1cXHVEQzI2XFx1REMyOC1cXHVEQzNBXFx1REMzQ1xcdURDM0RcXHVEQzNGLVxcdURDNERcXHVEQzUwLVxcdURDNURcXHVEQzgwLVxcdURDRkFcXHVERTgwLVxcdURFOUNcXHVERUEwLVxcdURFRDBcXHVERjAwLVxcdURGMUZcXHVERjJELVxcdURGNDBcXHVERjQyLVxcdURGNDlcXHVERjUwLVxcdURGNzVcXHVERjgwLVxcdURGOURcXHVERkEwLVxcdURGQzNcXHVERkM4LVxcdURGQ0ZdfFxcdUQ4MDFbXFx1REMwMC1cXHVEQzlEXFx1RENCMC1cXHVEQ0QzXFx1RENEOC1cXHVEQ0ZCXFx1REQwMC1cXHVERDI3XFx1REQzMC1cXHVERDYzXFx1REQ3MC1cXHVERDdBXFx1REQ3Qy1cXHVERDhBXFx1REQ4Qy1cXHVERDkyXFx1REQ5NFxcdUREOTVcXHVERDk3LVxcdUREQTFcXHVEREEzLVxcdUREQjFcXHVEREIzLVxcdUREQjlcXHVEREJCXFx1RERCQ1xcdURFMDAtXFx1REYzNlxcdURGNDAtXFx1REY1NVxcdURGNjAtXFx1REY2N1xcdURGODAtXFx1REY4NVxcdURGODctXFx1REZCMFxcdURGQjItXFx1REZCQV18XFx1RDgwMltcXHVEQzAwLVxcdURDMDVcXHVEQzA4XFx1REMwQS1cXHVEQzM1XFx1REMzN1xcdURDMzhcXHVEQzNDXFx1REMzRi1cXHVEQzU1XFx1REM2MC1cXHVEQzc2XFx1REM4MC1cXHVEQzlFXFx1RENFMC1cXHVEQ0YyXFx1RENGNFxcdURDRjVcXHVERDAwLVxcdUREMTVcXHVERDIwLVxcdUREMzlcXHVERDgwLVxcdUREQjdcXHVEREJFXFx1RERCRlxcdURFMDBcXHVERTEwLVxcdURFMTNcXHVERTE1LVxcdURFMTdcXHVERTE5LVxcdURFMzVcXHVERTYwLVxcdURFN0NcXHVERTgwLVxcdURFOUNcXHVERUMwLVxcdURFQzdcXHVERUM5LVxcdURFRTRcXHVERjAwLVxcdURGMzVcXHVERjQwLVxcdURGNTVcXHVERjYwLVxcdURGNzJcXHVERjgwLVxcdURGOTFdfFxcdUQ4MDNbXFx1REMwMC1cXHVEQzQ4XFx1REM4MC1cXHVEQ0IyXFx1RENDMC1cXHVEQ0YyXFx1REQwMC1cXHVERDIzXFx1REU4MC1cXHVERUE5XFx1REVCMFxcdURFQjFcXHVERjAwLVxcdURGMUNcXHVERjI3XFx1REYzMC1cXHVERjQ1XFx1REY3MC1cXHVERjgxXFx1REZCMC1cXHVERkM0XFx1REZFMC1cXHVERkY2XXxcXHVEODA0W1xcdURDMDMtXFx1REMzN1xcdURDNzFcXHVEQzcyXFx1REM3NVxcdURDODMtXFx1RENBRlxcdURDRDAtXFx1RENFOFxcdUREMDMtXFx1REQyNlxcdURENDRcXHVERDQ3XFx1REQ1MC1cXHVERDcyXFx1REQ3NlxcdUREODMtXFx1RERCMlxcdUREQzEtXFx1RERDNFxcdUREREFcXHVERERDXFx1REUwMC1cXHVERTExXFx1REUxMy1cXHVERTJCXFx1REU4MC1cXHVERTg2XFx1REU4OFxcdURFOEEtXFx1REU4RFxcdURFOEYtXFx1REU5RFxcdURFOUYtXFx1REVBOFxcdURFQjAtXFx1REVERVxcdURGMDUtXFx1REYwQ1xcdURGMEZcXHVERjEwXFx1REYxMy1cXHVERjI4XFx1REYyQS1cXHVERjMwXFx1REYzMlxcdURGMzNcXHVERjM1LVxcdURGMzlcXHVERjNEXFx1REY1MFxcdURGNUQtXFx1REY2MV18XFx1RDgwNVtcXHVEQzAwLVxcdURDMzRcXHVEQzQ3LVxcdURDNEFcXHVEQzVGLVxcdURDNjFcXHVEQzgwLVxcdURDQUZcXHVEQ0M0XFx1RENDNVxcdURDQzdcXHVERDgwLVxcdUREQUVcXHVEREQ4LVxcdUREREJcXHVERTAwLVxcdURFMkZcXHVERTQ0XFx1REU4MC1cXHVERUFBXFx1REVCOFxcdURGMDAtXFx1REYxQVxcdURGNDAtXFx1REY0Nl18XFx1RDgwNltcXHVEQzAwLVxcdURDMkJcXHVEQ0EwLVxcdURDREZcXHVEQ0ZGLVxcdUREMDZcXHVERDA5XFx1REQwQy1cXHVERDEzXFx1REQxNVxcdUREMTZcXHVERDE4LVxcdUREMkZcXHVERDNGXFx1REQ0MVxcdUREQTAtXFx1RERBN1xcdUREQUEtXFx1REREMFxcdURERTFcXHVEREUzXFx1REUwMFxcdURFMEItXFx1REUzMlxcdURFM0FcXHVERTUwXFx1REU1Qy1cXHVERTg5XFx1REU5RFxcdURFQjAtXFx1REVGOF18XFx1RDgwN1tcXHVEQzAwLVxcdURDMDhcXHVEQzBBLVxcdURDMkVcXHVEQzQwXFx1REM3Mi1cXHVEQzhGXFx1REQwMC1cXHVERDA2XFx1REQwOFxcdUREMDlcXHVERDBCLVxcdUREMzBcXHVERDQ2XFx1REQ2MC1cXHVERDY1XFx1REQ2N1xcdURENjhcXHVERDZBLVxcdUREODlcXHVERDk4XFx1REVFMC1cXHVERUYyXFx1REZCMF18XFx1RDgwOFtcXHVEQzAwLVxcdURGOTldfFxcdUQ4MDlbXFx1REM4MC1cXHVERDQzXXxcXHVEODBCW1xcdURGOTAtXFx1REZGMF18W1xcdUQ4MENcXHVEODFDLVxcdUQ4MjBcXHVEODIyXFx1RDg0MC1cXHVEODY4XFx1RDg2QS1cXHVEODZDXFx1RDg2Ri1cXHVEODcyXFx1RDg3NC1cXHVEODc5XFx1RDg4MC1cXHVEODgzXVtcXHVEQzAwLVxcdURGRkZdfFxcdUQ4MERbXFx1REMwMC1cXHVEQzJFXXxcXHVEODExW1xcdURDMDAtXFx1REU0Nl18XFx1RDgxQVtcXHVEQzAwLVxcdURFMzhcXHVERTQwLVxcdURFNUVcXHVERTcwLVxcdURFQkVcXHVERUQwLVxcdURFRURcXHVERjAwLVxcdURGMkZcXHVERjQwLVxcdURGNDNcXHVERjYzLVxcdURGNzdcXHVERjdELVxcdURGOEZdfFxcdUQ4MUJbXFx1REU0MC1cXHVERTdGXFx1REYwMC1cXHVERjRBXFx1REY1MFxcdURGOTMtXFx1REY5RlxcdURGRTBcXHVERkUxXFx1REZFM118XFx1RDgyMVtcXHVEQzAwLVxcdURGRjddfFxcdUQ4MjNbXFx1REMwMC1cXHVEQ0Q1XFx1REQwMC1cXHVERDA4XXxcXHVEODJCW1xcdURGRjAtXFx1REZGM1xcdURGRjUtXFx1REZGQlxcdURGRkRcXHVERkZFXXxcXHVEODJDW1xcdURDMDAtXFx1REQyMlxcdURENTAtXFx1REQ1MlxcdURENjQtXFx1REQ2N1xcdURENzAtXFx1REVGQl18XFx1RDgyRltcXHVEQzAwLVxcdURDNkFcXHVEQzcwLVxcdURDN0NcXHVEQzgwLVxcdURDODhcXHVEQzkwLVxcdURDOTldfFxcdUQ4MzVbXFx1REMwMC1cXHVEQzU0XFx1REM1Ni1cXHVEQzlDXFx1REM5RVxcdURDOUZcXHVEQ0EyXFx1RENBNVxcdURDQTZcXHVEQ0E5LVxcdURDQUNcXHVEQ0FFLVxcdURDQjlcXHVEQ0JCXFx1RENCRC1cXHVEQ0MzXFx1RENDNS1cXHVERDA1XFx1REQwNy1cXHVERDBBXFx1REQwRC1cXHVERDE0XFx1REQxNi1cXHVERDFDXFx1REQxRS1cXHVERDM5XFx1REQzQi1cXHVERDNFXFx1REQ0MC1cXHVERDQ0XFx1REQ0NlxcdURENEEtXFx1REQ1MFxcdURENTItXFx1REVBNVxcdURFQTgtXFx1REVDMFxcdURFQzItXFx1REVEQVxcdURFREMtXFx1REVGQVxcdURFRkMtXFx1REYxNFxcdURGMTYtXFx1REYzNFxcdURGMzYtXFx1REY0RVxcdURGNTAtXFx1REY2RVxcdURGNzAtXFx1REY4OFxcdURGOEEtXFx1REZBOFxcdURGQUEtXFx1REZDMlxcdURGQzQtXFx1REZDQl18XFx1RDgzN1tcXHVERjAwLVxcdURGMUVdfFxcdUQ4MzhbXFx1REQwMC1cXHVERDJDXFx1REQzNy1cXHVERDNEXFx1REQ0RVxcdURFOTAtXFx1REVBRFxcdURFQzAtXFx1REVFQl18XFx1RDgzOVtcXHVERkUwLVxcdURGRTZcXHVERkU4LVxcdURGRUJcXHVERkVEXFx1REZFRVxcdURGRjAtXFx1REZGRV18XFx1RDgzQVtcXHVEQzAwLVxcdURDQzRcXHVERDAwLVxcdURENDNcXHVERDRCXXxcXHVEODNCW1xcdURFMDAtXFx1REUwM1xcdURFMDUtXFx1REUxRlxcdURFMjFcXHVERTIyXFx1REUyNFxcdURFMjdcXHVERTI5LVxcdURFMzJcXHVERTM0LVxcdURFMzdcXHVERTM5XFx1REUzQlxcdURFNDJcXHVERTQ3XFx1REU0OVxcdURFNEJcXHVERTRELVxcdURFNEZcXHVERTUxXFx1REU1MlxcdURFNTRcXHVERTU3XFx1REU1OVxcdURFNUJcXHVERTVEXFx1REU1RlxcdURFNjFcXHVERTYyXFx1REU2NFxcdURFNjctXFx1REU2QVxcdURFNkMtXFx1REU3MlxcdURFNzQtXFx1REU3N1xcdURFNzktXFx1REU3Q1xcdURFN0VcXHVERTgwLVxcdURFODlcXHVERThCLVxcdURFOUJcXHVERUExLVxcdURFQTNcXHVERUE1LVxcdURFQTlcXHVERUFCLVxcdURFQkJdfFxcdUQ4NjlbXFx1REMwMC1cXHVERURGXFx1REYwMC1cXHVERkZGXXxcXHVEODZEW1xcdURDMDAtXFx1REYzOFxcdURGNDAtXFx1REZGRl18XFx1RDg2RVtcXHVEQzAwLVxcdURDMURcXHVEQzIwLVxcdURGRkZdfFxcdUQ4NzNbXFx1REMwMC1cXHVERUExXFx1REVCMC1cXHVERkZGXXxcXHVEODdBW1xcdURDMDAtXFx1REZFMF18XFx1RDg3RVtcXHVEQzAwLVxcdURFMURdfFxcdUQ4ODRbXFx1REMwMC1cXHVERjRBXSlcXFMqL2c7XG5sZXQgVGl0bGVDYXNlUGlwZSA9IC8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICBjbGFzcyBUaXRsZUNhc2VQaXBlIHtcbiAgICB0cmFuc2Zvcm0odmFsdWUpIHtcbiAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gbnVsbDtcbiAgICAgIGFzc2VydFBpcGVBcmd1bWVudChUaXRsZUNhc2VQaXBlLCB2YWx1ZSk7XG4gICAgICByZXR1cm4gdmFsdWUucmVwbGFjZSh1bmljb2RlV29yZE1hdGNoLCB0eHQgPT4gdHh0WzBdLnRvVXBwZXJDYXNlKCkgKyB0eHQuc2xpY2UoMSkudG9Mb3dlckNhc2UoKSk7XG4gICAgfVxuICAgIHN0YXRpYyDJtWZhYyA9IGZ1bmN0aW9uIFRpdGxlQ2FzZVBpcGVfRmFjdG9yeShfX25nRmFjdG9yeVR5cGVfXykge1xuICAgICAgcmV0dXJuIG5ldyAoX19uZ0ZhY3RvcnlUeXBlX18gfHwgVGl0bGVDYXNlUGlwZSkoKTtcbiAgICB9O1xuICAgIHN0YXRpYyDJtXBpcGUgPSAvKiBAX19QVVJFX18gKi9pMC7Jtcm1ZGVmaW5lUGlwZSh7XG4gICAgICBuYW1lOiBcInRpdGxlY2FzZVwiLFxuICAgICAgdHlwZTogVGl0bGVDYXNlUGlwZSxcbiAgICAgIHB1cmU6IHRydWVcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gVGl0bGVDYXNlUGlwZTtcbn0pKCk7XG4vKiNfX1BVUkVfXyovKCgpID0+IHtcbiAgKHR5cGVvZiBuZ0Rldk1vZGUgPT09IFwidW5kZWZpbmVkXCIgfHwgbmdEZXZNb2RlKSAmJiB2b2lkIDA7XG59KSgpO1xubGV0IFVwcGVyQ2FzZVBpcGUgPSAvKiNfX1BVUkVfXyovKCgpID0+IHtcbiAgY2xhc3MgVXBwZXJDYXNlUGlwZSB7XG4gICAgdHJhbnNmb3JtKHZhbHVlKSB7XG4gICAgICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIG51bGw7XG4gICAgICBhc3NlcnRQaXBlQXJndW1lbnQoVXBwZXJDYXNlUGlwZSwgdmFsdWUpO1xuICAgICAgcmV0dXJuIHZhbHVlLnRvVXBwZXJDYXNlKCk7XG4gICAgfVxuICAgIHN0YXRpYyDJtWZhYyA9IGZ1bmN0aW9uIFVwcGVyQ2FzZVBpcGVfRmFjdG9yeShfX25nRmFjdG9yeVR5cGVfXykge1xuICAgICAgcmV0dXJuIG5ldyAoX19uZ0ZhY3RvcnlUeXBlX18gfHwgVXBwZXJDYXNlUGlwZSkoKTtcbiAgICB9O1xuICAgIHN0YXRpYyDJtXBpcGUgPSAvKiBAX19QVVJFX18gKi9pMC7Jtcm1ZGVmaW5lUGlwZSh7XG4gICAgICBuYW1lOiBcInVwcGVyY2FzZVwiLFxuICAgICAgdHlwZTogVXBwZXJDYXNlUGlwZSxcbiAgICAgIHB1cmU6IHRydWVcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gVXBwZXJDYXNlUGlwZTtcbn0pKCk7XG4vKiNfX1BVUkVfXyovKCgpID0+IHtcbiAgKHR5cGVvZiBuZ0Rldk1vZGUgPT09IFwidW5kZWZpbmVkXCIgfHwgbmdEZXZNb2RlKSAmJiB2b2lkIDA7XG59KSgpO1xuZnVuY3Rpb24gYXNzZXJ0UGlwZUFyZ3VtZW50KHBpcGUsIHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKSB7XG4gICAgdGhyb3cgaW52YWxpZFBpcGVBcmd1bWVudEVycm9yKHBpcGUsIHZhbHVlKTtcbiAgfVxufVxuY29uc3QgREVGQVVMVF9EQVRFX0ZPUk1BVCA9ICdtZWRpdW1EYXRlJztcbmNvbnN0IERBVEVfUElQRV9ERUZBVUxUX1RJTUVaT05FID0gLyojX19QVVJFX18qL25ldyBJbmplY3Rpb25Ub2tlbih0eXBlb2YgbmdEZXZNb2RlICE9PSAndW5kZWZpbmVkJyAmJiBuZ0Rldk1vZGUgPyAnREFURV9QSVBFX0RFRkFVTFRfVElNRVpPTkUnIDogJycpO1xuY29uc3QgREFURV9QSVBFX0RFRkFVTFRfT1BUSU9OUyA9IC8qI19fUFVSRV9fKi9uZXcgSW5qZWN0aW9uVG9rZW4odHlwZW9mIG5nRGV2TW9kZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbmdEZXZNb2RlID8gJ0RBVEVfUElQRV9ERUZBVUxUX09QVElPTlMnIDogJycpO1xubGV0IERhdGVQaXBlID0gLyojX19QVVJFX18qLygoKSA9PiB7XG4gIGNsYXNzIERhdGVQaXBlIHtcbiAgICBsb2NhbGU7XG4gICAgZGVmYXVsdFRpbWV6b25lO1xuICAgIGRlZmF1bHRPcHRpb25zO1xuICAgIGNvbnN0cnVjdG9yKGxvY2FsZSwgZGVmYXVsdFRpbWV6b25lLCBkZWZhdWx0T3B0aW9ucykge1xuICAgICAgdGhpcy5sb2NhbGUgPSBsb2NhbGU7XG4gICAgICB0aGlzLmRlZmF1bHRUaW1lem9uZSA9IGRlZmF1bHRUaW1lem9uZTtcbiAgICAgIHRoaXMuZGVmYXVsdE9wdGlvbnMgPSBkZWZhdWx0T3B0aW9ucztcbiAgICB9XG4gICAgdHJhbnNmb3JtKHZhbHVlLCBmb3JtYXQsIHRpbWV6b25lLCBsb2NhbGUpIHtcbiAgICAgIGlmICh2YWx1ZSA9PSBudWxsIHx8IHZhbHVlID09PSAnJyB8fCB2YWx1ZSAhPT0gdmFsdWUpIHJldHVybiBudWxsO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgX2Zvcm1hdCA9IGZvcm1hdCA/PyB0aGlzLmRlZmF1bHRPcHRpb25zPy5kYXRlRm9ybWF0ID8/IERFRkFVTFRfREFURV9GT1JNQVQ7XG4gICAgICAgIGNvbnN0IF90aW1lem9uZSA9IHRpbWV6b25lID8/IHRoaXMuZGVmYXVsdE9wdGlvbnM/LnRpbWV6b25lID8/IHRoaXMuZGVmYXVsdFRpbWV6b25lID8/IHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIGZvcm1hdERhdGUodmFsdWUsIF9mb3JtYXQsIGxvY2FsZSB8fCB0aGlzLmxvY2FsZSwgX3RpbWV6b25lKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHRocm93IGludmFsaWRQaXBlQXJndW1lbnRFcnJvcihEYXRlUGlwZSwgZXJyb3IubWVzc2FnZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyDJtWZhYyA9IGZ1bmN0aW9uIERhdGVQaXBlX0ZhY3RvcnkoX19uZ0ZhY3RvcnlUeXBlX18pIHtcbiAgICAgIHJldHVybiBuZXcgKF9fbmdGYWN0b3J5VHlwZV9fIHx8IERhdGVQaXBlKShpMC7Jtcm1ZGlyZWN0aXZlSW5qZWN0KExPQ0FMRV9JRCwgMTYpLCBpMC7Jtcm1ZGlyZWN0aXZlSW5qZWN0KERBVEVfUElQRV9ERUZBVUxUX1RJTUVaT05FLCAyNCksIGkwLsm1ybVkaXJlY3RpdmVJbmplY3QoREFURV9QSVBFX0RFRkFVTFRfT1BUSU9OUywgMjQpKTtcbiAgICB9O1xuICAgIHN0YXRpYyDJtXBpcGUgPSAvKiBAX19QVVJFX18gKi9pMC7Jtcm1ZGVmaW5lUGlwZSh7XG4gICAgICBuYW1lOiBcImRhdGVcIixcbiAgICAgIHR5cGU6IERhdGVQaXBlLFxuICAgICAgcHVyZTogdHJ1ZVxuICAgIH0pO1xuICB9XG4gIHJldHVybiBEYXRlUGlwZTtcbn0pKCk7XG4vKiNfX1BVUkVfXyovKCgpID0+IHtcbiAgKHR5cGVvZiBuZ0Rldk1vZGUgPT09IFwidW5kZWZpbmVkXCIgfHwgbmdEZXZNb2RlKSAmJiB2b2lkIDA7XG59KSgpO1xuY29uc3QgX0lOVEVSUE9MQVRJT05fUkVHRVhQID0gLyMvZztcbmxldCBJMThuUGx1cmFsUGlwZSA9IC8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICBjbGFzcyBJMThuUGx1cmFsUGlwZSB7XG4gICAgX2xvY2FsaXphdGlvbjtcbiAgICBjb25zdHJ1Y3RvcihfbG9jYWxpemF0aW9uKSB7XG4gICAgICB0aGlzLl9sb2NhbGl6YXRpb24gPSBfbG9jYWxpemF0aW9uO1xuICAgIH1cbiAgICB0cmFuc2Zvcm0odmFsdWUsIHBsdXJhbE1hcCwgbG9jYWxlKSB7XG4gICAgICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuICcnO1xuICAgICAgaWYgKHR5cGVvZiBwbHVyYWxNYXAgIT09ICdvYmplY3QnIHx8IHBsdXJhbE1hcCA9PT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBpbnZhbGlkUGlwZUFyZ3VtZW50RXJyb3IoSTE4blBsdXJhbFBpcGUsIHBsdXJhbE1hcCk7XG4gICAgICB9XG4gICAgICBjb25zdCBrZXkgPSBnZXRQbHVyYWxDYXRlZ29yeSh2YWx1ZSwgT2JqZWN0LmtleXMocGx1cmFsTWFwKSwgdGhpcy5fbG9jYWxpemF0aW9uLCBsb2NhbGUpO1xuICAgICAgcmV0dXJuIHBsdXJhbE1hcFtrZXldLnJlcGxhY2UoX0lOVEVSUE9MQVRJT05fUkVHRVhQLCB2YWx1ZS50b1N0cmluZygpKTtcbiAgICB9XG4gICAgc3RhdGljIMm1ZmFjID0gZnVuY3Rpb24gSTE4blBsdXJhbFBpcGVfRmFjdG9yeShfX25nRmFjdG9yeVR5cGVfXykge1xuICAgICAgcmV0dXJuIG5ldyAoX19uZ0ZhY3RvcnlUeXBlX18gfHwgSTE4blBsdXJhbFBpcGUpKGkwLsm1ybVkaXJlY3RpdmVJbmplY3QoTmdMb2NhbGl6YXRpb24sIDE2KSk7XG4gICAgfTtcbiAgICBzdGF0aWMgybVwaXBlID0gLyogQF9fUFVSRV9fICovaTAuybXJtWRlZmluZVBpcGUoe1xuICAgICAgbmFtZTogXCJpMThuUGx1cmFsXCIsXG4gICAgICB0eXBlOiBJMThuUGx1cmFsUGlwZSxcbiAgICAgIHB1cmU6IHRydWVcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gSTE4blBsdXJhbFBpcGU7XG59KSgpO1xuLyojX19QVVJFX18qLygoKSA9PiB7XG4gICh0eXBlb2YgbmdEZXZNb2RlID09PSBcInVuZGVmaW5lZFwiIHx8IG5nRGV2TW9kZSkgJiYgdm9pZCAwO1xufSkoKTtcbmxldCBJMThuU2VsZWN0UGlwZSA9IC8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICBjbGFzcyBJMThuU2VsZWN0UGlwZSB7XG4gICAgdHJhbnNmb3JtKHZhbHVlLCBtYXBwaW5nKSB7XG4gICAgICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuICcnO1xuICAgICAgaWYgKHR5cGVvZiBtYXBwaW5nICE9PSAnb2JqZWN0JyB8fCB0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRocm93IGludmFsaWRQaXBlQXJndW1lbnRFcnJvcihJMThuU2VsZWN0UGlwZSwgbWFwcGluZyk7XG4gICAgICB9XG4gICAgICBpZiAobWFwcGluZy5oYXNPd25Qcm9wZXJ0eSh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIG1hcHBpbmdbdmFsdWVdO1xuICAgICAgfVxuICAgICAgaWYgKG1hcHBpbmcuaGFzT3duUHJvcGVydHkoJ290aGVyJykpIHtcbiAgICAgICAgcmV0dXJuIG1hcHBpbmdbJ290aGVyJ107XG4gICAgICB9XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIHN0YXRpYyDJtWZhYyA9IGZ1bmN0aW9uIEkxOG5TZWxlY3RQaXBlX0ZhY3RvcnkoX19uZ0ZhY3RvcnlUeXBlX18pIHtcbiAgICAgIHJldHVybiBuZXcgKF9fbmdGYWN0b3J5VHlwZV9fIHx8IEkxOG5TZWxlY3RQaXBlKSgpO1xuICAgIH07XG4gICAgc3RhdGljIMm1cGlwZSA9IC8qIEBfX1BVUkVfXyAqL2kwLsm1ybVkZWZpbmVQaXBlKHtcbiAgICAgIG5hbWU6IFwiaTE4blNlbGVjdFwiLFxuICAgICAgdHlwZTogSTE4blNlbGVjdFBpcGUsXG4gICAgICBwdXJlOiB0cnVlXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIEkxOG5TZWxlY3RQaXBlO1xufSkoKTtcbi8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICAodHlwZW9mIG5nRGV2TW9kZSA9PT0gXCJ1bmRlZmluZWRcIiB8fCBuZ0Rldk1vZGUpICYmIHZvaWQgMDtcbn0pKCk7XG5sZXQgSnNvblBpcGUgPSAvKiNfX1BVUkVfXyovKCgpID0+IHtcbiAgY2xhc3MgSnNvblBpcGUge1xuICAgIHRyYW5zZm9ybSh2YWx1ZSkge1xuICAgICAgbmdEZXZNb2RlICYmIHdhcm5JZlNpZ25hbCgnSnNvblBpcGUnLCB2YWx1ZSk7XG4gICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodmFsdWUsIG51bGwsIDIpO1xuICAgIH1cbiAgICBzdGF0aWMgybVmYWMgPSBmdW5jdGlvbiBKc29uUGlwZV9GYWN0b3J5KF9fbmdGYWN0b3J5VHlwZV9fKSB7XG4gICAgICByZXR1cm4gbmV3IChfX25nRmFjdG9yeVR5cGVfXyB8fCBKc29uUGlwZSkoKTtcbiAgICB9O1xuICAgIHN0YXRpYyDJtXBpcGUgPSAvKiBAX19QVVJFX18gKi9pMC7Jtcm1ZGVmaW5lUGlwZSh7XG4gICAgICBuYW1lOiBcImpzb25cIixcbiAgICAgIHR5cGU6IEpzb25QaXBlLFxuICAgICAgcHVyZTogZmFsc2VcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gSnNvblBpcGU7XG59KSgpO1xuLyojX19QVVJFX18qLygoKSA9PiB7XG4gICh0eXBlb2YgbmdEZXZNb2RlID09PSBcInVuZGVmaW5lZFwiIHx8IG5nRGV2TW9kZSkgJiYgdm9pZCAwO1xufSkoKTtcbmZ1bmN0aW9uIG1ha2VLZXlWYWx1ZVBhaXIoa2V5LCB2YWx1ZSkge1xuICByZXR1cm4ge1xuICAgIGtleToga2V5LFxuICAgIHZhbHVlOiB2YWx1ZVxuICB9O1xufVxubGV0IEtleVZhbHVlUGlwZSA9IC8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICBjbGFzcyBLZXlWYWx1ZVBpcGUge1xuICAgIGRpZmZlcnM7XG4gICAgY29uc3RydWN0b3IoZGlmZmVycykge1xuICAgICAgdGhpcy5kaWZmZXJzID0gZGlmZmVycztcbiAgICB9XG4gICAgZGlmZmVyO1xuICAgIGtleVZhbHVlcyA9IFtdO1xuICAgIGNvbXBhcmVGbiA9IGRlZmF1bHRDb21wYXJhdG9yO1xuICAgIHRyYW5zZm9ybShpbnB1dCwgY29tcGFyZUZuID0gZGVmYXVsdENvbXBhcmF0b3IpIHtcbiAgICAgIG5nRGV2TW9kZSAmJiB3YXJuSWZTaWduYWwoJ0tleVZhbHVlUGlwZScsIGlucHV0KTtcbiAgICAgIGlmICghaW5wdXQgfHwgIShpbnB1dCBpbnN0YW5jZW9mIE1hcCkgJiYgdHlwZW9mIGlucHV0ICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIHRoaXMuZGlmZmVyID8/PSB0aGlzLmRpZmZlcnMuZmluZChpbnB1dCkuY3JlYXRlKCk7XG4gICAgICBjb25zdCBkaWZmZXJDaGFuZ2VzID0gdGhpcy5kaWZmZXIuZGlmZihpbnB1dCk7XG4gICAgICBjb25zdCBjb21wYXJlRm5DaGFuZ2VkID0gY29tcGFyZUZuICE9PSB0aGlzLmNvbXBhcmVGbjtcbiAgICAgIGlmIChkaWZmZXJDaGFuZ2VzKSB7XG4gICAgICAgIHRoaXMua2V5VmFsdWVzID0gW107XG4gICAgICAgIGRpZmZlckNoYW5nZXMuZm9yRWFjaEl0ZW0ociA9PiB7XG4gICAgICAgICAgdGhpcy5rZXlWYWx1ZXMucHVzaChtYWtlS2V5VmFsdWVQYWlyKHIua2V5LCByLmN1cnJlbnRWYWx1ZSkpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmIChkaWZmZXJDaGFuZ2VzIHx8IGNvbXBhcmVGbkNoYW5nZWQpIHtcbiAgICAgICAgaWYgKGNvbXBhcmVGbikge1xuICAgICAgICAgIHRoaXMua2V5VmFsdWVzLnNvcnQoY29tcGFyZUZuKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNvbXBhcmVGbiA9IGNvbXBhcmVGbjtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmtleVZhbHVlcztcbiAgICB9XG4gICAgc3RhdGljIMm1ZmFjID0gZnVuY3Rpb24gS2V5VmFsdWVQaXBlX0ZhY3RvcnkoX19uZ0ZhY3RvcnlUeXBlX18pIHtcbiAgICAgIHJldHVybiBuZXcgKF9fbmdGYWN0b3J5VHlwZV9fIHx8IEtleVZhbHVlUGlwZSkoaTAuybXJtWRpcmVjdGl2ZUluamVjdChpMC5LZXlWYWx1ZURpZmZlcnMsIDE2KSk7XG4gICAgfTtcbiAgICBzdGF0aWMgybVwaXBlID0gLyogQF9fUFVSRV9fICovaTAuybXJtWRlZmluZVBpcGUoe1xuICAgICAgbmFtZTogXCJrZXl2YWx1ZVwiLFxuICAgICAgdHlwZTogS2V5VmFsdWVQaXBlLFxuICAgICAgcHVyZTogZmFsc2VcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gS2V5VmFsdWVQaXBlO1xufSkoKTtcbi8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICAodHlwZW9mIG5nRGV2TW9kZSA9PT0gXCJ1bmRlZmluZWRcIiB8fCBuZ0Rldk1vZGUpICYmIHZvaWQgMDtcbn0pKCk7XG5mdW5jdGlvbiBkZWZhdWx0Q29tcGFyYXRvcihrZXlWYWx1ZUEsIGtleVZhbHVlQikge1xuICBjb25zdCBhID0ga2V5VmFsdWVBLmtleTtcbiAgY29uc3QgYiA9IGtleVZhbHVlQi5rZXk7XG4gIGlmIChhID09PSBiKSByZXR1cm4gMDtcbiAgaWYgKGEgPT0gbnVsbCkgcmV0dXJuIDE7XG4gIGlmIChiID09IG51bGwpIHJldHVybiAtMTtcbiAgaWYgKHR5cGVvZiBhID09ICdzdHJpbmcnICYmIHR5cGVvZiBiID09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGEgPCBiID8gLTEgOiAxO1xuICB9XG4gIGlmICh0eXBlb2YgYSA9PSAnbnVtYmVyJyAmJiB0eXBlb2YgYiA9PSAnbnVtYmVyJykge1xuICAgIHJldHVybiBhIC0gYjtcbiAgfVxuICBpZiAodHlwZW9mIGEgPT0gJ2Jvb2xlYW4nICYmIHR5cGVvZiBiID09ICdib29sZWFuJykge1xuICAgIHJldHVybiBhIDwgYiA/IC0xIDogMTtcbiAgfVxuICBjb25zdCBhU3RyaW5nID0gU3RyaW5nKGEpO1xuICBjb25zdCBiU3RyaW5nID0gU3RyaW5nKGIpO1xuICByZXR1cm4gYVN0cmluZyA9PSBiU3RyaW5nID8gMCA6IGFTdHJpbmcgPCBiU3RyaW5nID8gLTEgOiAxO1xufVxubGV0IERlY2ltYWxQaXBlID0gLyojX19QVVJFX18qLygoKSA9PiB7XG4gIGNsYXNzIERlY2ltYWxQaXBlIHtcbiAgICBfbG9jYWxlO1xuICAgIGNvbnN0cnVjdG9yKF9sb2NhbGUpIHtcbiAgICAgIHRoaXMuX2xvY2FsZSA9IF9sb2NhbGU7XG4gICAgfVxuICAgIHRyYW5zZm9ybSh2YWx1ZSwgZGlnaXRzSW5mbywgbG9jYWxlKSB7XG4gICAgICBpZiAoIWlzVmFsdWUodmFsdWUpKSByZXR1cm4gbnVsbDtcbiAgICAgIGxvY2FsZSB8fD0gdGhpcy5fbG9jYWxlO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgbnVtID0gc3RyVG9OdW1iZXIodmFsdWUpO1xuICAgICAgICByZXR1cm4gZm9ybWF0TnVtYmVyKG51bSwgbG9jYWxlLCBkaWdpdHNJbmZvKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHRocm93IGludmFsaWRQaXBlQXJndW1lbnRFcnJvcihEZWNpbWFsUGlwZSwgZXJyb3IubWVzc2FnZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyDJtWZhYyA9IGZ1bmN0aW9uIERlY2ltYWxQaXBlX0ZhY3RvcnkoX19uZ0ZhY3RvcnlUeXBlX18pIHtcbiAgICAgIHJldHVybiBuZXcgKF9fbmdGYWN0b3J5VHlwZV9fIHx8IERlY2ltYWxQaXBlKShpMC7Jtcm1ZGlyZWN0aXZlSW5qZWN0KExPQ0FMRV9JRCwgMTYpKTtcbiAgICB9O1xuICAgIHN0YXRpYyDJtXBpcGUgPSAvKiBAX19QVVJFX18gKi9pMC7Jtcm1ZGVmaW5lUGlwZSh7XG4gICAgICBuYW1lOiBcIm51bWJlclwiLFxuICAgICAgdHlwZTogRGVjaW1hbFBpcGUsXG4gICAgICBwdXJlOiB0cnVlXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIERlY2ltYWxQaXBlO1xufSkoKTtcbi8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICAodHlwZW9mIG5nRGV2TW9kZSA9PT0gXCJ1bmRlZmluZWRcIiB8fCBuZ0Rldk1vZGUpICYmIHZvaWQgMDtcbn0pKCk7XG5sZXQgUGVyY2VudFBpcGUgPSAvKiNfX1BVUkVfXyovKCgpID0+IHtcbiAgY2xhc3MgUGVyY2VudFBpcGUge1xuICAgIF9sb2NhbGU7XG4gICAgY29uc3RydWN0b3IoX2xvY2FsZSkge1xuICAgICAgdGhpcy5fbG9jYWxlID0gX2xvY2FsZTtcbiAgICB9XG4gICAgdHJhbnNmb3JtKHZhbHVlLCBkaWdpdHNJbmZvLCBsb2NhbGUpIHtcbiAgICAgIGlmICghaXNWYWx1ZSh2YWx1ZSkpIHJldHVybiBudWxsO1xuICAgICAgbG9jYWxlIHx8PSB0aGlzLl9sb2NhbGU7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBudW0gPSBzdHJUb051bWJlcih2YWx1ZSk7XG4gICAgICAgIHJldHVybiBmb3JtYXRQZXJjZW50KG51bSwgbG9jYWxlLCBkaWdpdHNJbmZvKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHRocm93IGludmFsaWRQaXBlQXJndW1lbnRFcnJvcihQZXJjZW50UGlwZSwgZXJyb3IubWVzc2FnZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyDJtWZhYyA9IGZ1bmN0aW9uIFBlcmNlbnRQaXBlX0ZhY3RvcnkoX19uZ0ZhY3RvcnlUeXBlX18pIHtcbiAgICAgIHJldHVybiBuZXcgKF9fbmdGYWN0b3J5VHlwZV9fIHx8IFBlcmNlbnRQaXBlKShpMC7Jtcm1ZGlyZWN0aXZlSW5qZWN0KExPQ0FMRV9JRCwgMTYpKTtcbiAgICB9O1xuICAgIHN0YXRpYyDJtXBpcGUgPSAvKiBAX19QVVJFX18gKi9pMC7Jtcm1ZGVmaW5lUGlwZSh7XG4gICAgICBuYW1lOiBcInBlcmNlbnRcIixcbiAgICAgIHR5cGU6IFBlcmNlbnRQaXBlLFxuICAgICAgcHVyZTogdHJ1ZVxuICAgIH0pO1xuICB9XG4gIHJldHVybiBQZXJjZW50UGlwZTtcbn0pKCk7XG4vKiNfX1BVUkVfXyovKCgpID0+IHtcbiAgKHR5cGVvZiBuZ0Rldk1vZGUgPT09IFwidW5kZWZpbmVkXCIgfHwgbmdEZXZNb2RlKSAmJiB2b2lkIDA7XG59KSgpO1xubGV0IEN1cnJlbmN5UGlwZSA9IC8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICBjbGFzcyBDdXJyZW5jeVBpcGUge1xuICAgIF9sb2NhbGU7XG4gICAgX2RlZmF1bHRDdXJyZW5jeUNvZGU7XG4gICAgY29uc3RydWN0b3IoX2xvY2FsZSwgX2RlZmF1bHRDdXJyZW5jeUNvZGUgPSAnVVNEJykge1xuICAgICAgdGhpcy5fbG9jYWxlID0gX2xvY2FsZTtcbiAgICAgIHRoaXMuX2RlZmF1bHRDdXJyZW5jeUNvZGUgPSBfZGVmYXVsdEN1cnJlbmN5Q29kZTtcbiAgICB9XG4gICAgdHJhbnNmb3JtKHZhbHVlLCBjdXJyZW5jeUNvZGUgPSB0aGlzLl9kZWZhdWx0Q3VycmVuY3lDb2RlLCBkaXNwbGF5ID0gJ3N5bWJvbCcsIGRpZ2l0c0luZm8sIGxvY2FsZSkge1xuICAgICAgaWYgKCFpc1ZhbHVlKHZhbHVlKSkgcmV0dXJuIG51bGw7XG4gICAgICBsb2NhbGUgfHw9IHRoaXMuX2xvY2FsZTtcbiAgICAgIGlmICh0eXBlb2YgZGlzcGxheSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIGlmICh0eXBlb2YgbmdEZXZNb2RlID09PSAndW5kZWZpbmVkJyB8fCBuZ0Rldk1vZGUpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oYFdhcm5pbmc6IHRoZSBjdXJyZW5jeSBwaXBlIGhhcyBiZWVuIGNoYW5nZWQgaW4gQW5ndWxhciB2NS4gVGhlIHN5bWJvbERpc3BsYXkgb3B0aW9uICh0aGlyZCBwYXJhbWV0ZXIpIGlzIG5vdyBhIHN0cmluZyBpbnN0ZWFkIG9mIGEgYm9vbGVhbi4gVGhlIGFjY2VwdGVkIHZhbHVlcyBhcmUgXCJjb2RlXCIsIFwic3ltYm9sXCIgb3IgXCJzeW1ib2wtbmFycm93XCIuYCk7XG4gICAgICAgIH1cbiAgICAgICAgZGlzcGxheSA9IGRpc3BsYXkgPyAnc3ltYm9sJyA6ICdjb2RlJztcbiAgICAgIH1cbiAgICAgIGxldCBjdXJyZW5jeSA9IGN1cnJlbmN5Q29kZSB8fCB0aGlzLl9kZWZhdWx0Q3VycmVuY3lDb2RlO1xuICAgICAgaWYgKGRpc3BsYXkgIT09ICdjb2RlJykge1xuICAgICAgICBpZiAoZGlzcGxheSA9PT0gJ3N5bWJvbCcgfHwgZGlzcGxheSA9PT0gJ3N5bWJvbC1uYXJyb3cnKSB7XG4gICAgICAgICAgY3VycmVuY3kgPSBnZXRDdXJyZW5jeVN5bWJvbChjdXJyZW5jeSwgZGlzcGxheSA9PT0gJ3N5bWJvbCcgPyAnd2lkZScgOiAnbmFycm93JywgbG9jYWxlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjdXJyZW5jeSA9IGRpc3BsYXk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IG51bSA9IHN0clRvTnVtYmVyKHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIGZvcm1hdEN1cnJlbmN5KG51bSwgbG9jYWxlLCBjdXJyZW5jeSwgY3VycmVuY3lDb2RlLCBkaWdpdHNJbmZvKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHRocm93IGludmFsaWRQaXBlQXJndW1lbnRFcnJvcihDdXJyZW5jeVBpcGUsIGVycm9yLm1lc3NhZ2UpO1xuICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgybVmYWMgPSBmdW5jdGlvbiBDdXJyZW5jeVBpcGVfRmFjdG9yeShfX25nRmFjdG9yeVR5cGVfXykge1xuICAgICAgcmV0dXJuIG5ldyAoX19uZ0ZhY3RvcnlUeXBlX18gfHwgQ3VycmVuY3lQaXBlKShpMC7Jtcm1ZGlyZWN0aXZlSW5qZWN0KExPQ0FMRV9JRCwgMTYpLCBpMC7Jtcm1ZGlyZWN0aXZlSW5qZWN0KERFRkFVTFRfQ1VSUkVOQ1lfQ09ERSwgMTYpKTtcbiAgICB9O1xuICAgIHN0YXRpYyDJtXBpcGUgPSAvKiBAX19QVVJFX18gKi9pMC7Jtcm1ZGVmaW5lUGlwZSh7XG4gICAgICBuYW1lOiBcImN1cnJlbmN5XCIsXG4gICAgICB0eXBlOiBDdXJyZW5jeVBpcGUsXG4gICAgICBwdXJlOiB0cnVlXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIEN1cnJlbmN5UGlwZTtcbn0pKCk7XG4vKiNfX1BVUkVfXyovKCgpID0+IHtcbiAgKHR5cGVvZiBuZ0Rldk1vZGUgPT09IFwidW5kZWZpbmVkXCIgfHwgbmdEZXZNb2RlKSAmJiB2b2lkIDA7XG59KSgpO1xuZnVuY3Rpb24gaXNWYWx1ZSh2YWx1ZSkge1xuICByZXR1cm4gISh2YWx1ZSA9PSBudWxsIHx8IHZhbHVlID09PSAnJyB8fCB2YWx1ZSAhPT0gdmFsdWUpO1xufVxuZnVuY3Rpb24gc3RyVG9OdW1iZXIodmFsdWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgIWlzTmFOKE51bWJlcih2YWx1ZSkgLSBwYXJzZUZsb2F0KHZhbHVlKSkpIHtcbiAgICByZXR1cm4gTnVtYmVyKHZhbHVlKTtcbiAgfVxuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBfUnVudGltZUVycm9yKDIzMDksIG5nRGV2TW9kZSAmJiBgJHt2YWx1ZX0gaXMgbm90IGEgbnVtYmVyYCk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxubGV0IFNsaWNlUGlwZSA9IC8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICBjbGFzcyBTbGljZVBpcGUge1xuICAgIHRyYW5zZm9ybSh2YWx1ZSwgc3RhcnQsIGVuZCkge1xuICAgICAgaWYgKHZhbHVlID09IG51bGwpIHJldHVybiBudWxsO1xuICAgICAgY29uc3Qgc3VwcG9ydHMgPSB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnIHx8IEFycmF5LmlzQXJyYXkodmFsdWUpO1xuICAgICAgaWYgKCFzdXBwb3J0cykge1xuICAgICAgICB0aHJvdyBpbnZhbGlkUGlwZUFyZ3VtZW50RXJyb3IoU2xpY2VQaXBlLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsdWUuc2xpY2Uoc3RhcnQsIGVuZCk7XG4gICAgfVxuICAgIHN0YXRpYyDJtWZhYyA9IGZ1bmN0aW9uIFNsaWNlUGlwZV9GYWN0b3J5KF9fbmdGYWN0b3J5VHlwZV9fKSB7XG4gICAgICByZXR1cm4gbmV3IChfX25nRmFjdG9yeVR5cGVfXyB8fCBTbGljZVBpcGUpKCk7XG4gICAgfTtcbiAgICBzdGF0aWMgybVwaXBlID0gLyogQF9fUFVSRV9fICovaTAuybXJtWRlZmluZVBpcGUoe1xuICAgICAgbmFtZTogXCJzbGljZVwiLFxuICAgICAgdHlwZTogU2xpY2VQaXBlLFxuICAgICAgcHVyZTogZmFsc2VcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gU2xpY2VQaXBlO1xufSkoKTtcbi8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICAodHlwZW9mIG5nRGV2TW9kZSA9PT0gXCJ1bmRlZmluZWRcIiB8fCBuZ0Rldk1vZGUpICYmIHZvaWQgMDtcbn0pKCk7XG5jb25zdCBDT01NT05fUElQRVMgPSBbQXN5bmNQaXBlLCBVcHBlckNhc2VQaXBlLCBMb3dlckNhc2VQaXBlLCBKc29uUGlwZSwgU2xpY2VQaXBlLCBEZWNpbWFsUGlwZSwgUGVyY2VudFBpcGUsIFRpdGxlQ2FzZVBpcGUsIEN1cnJlbmN5UGlwZSwgRGF0ZVBpcGUsIEkxOG5QbHVyYWxQaXBlLCBJMThuU2VsZWN0UGlwZSwgS2V5VmFsdWVQaXBlXTtcbmxldCBDb21tb25Nb2R1bGUgPSAvKiNfX1BVUkVfXyovKCgpID0+IHtcbiAgY2xhc3MgQ29tbW9uTW9kdWxlIHtcbiAgICBzdGF0aWMgybVmYWMgPSBmdW5jdGlvbiBDb21tb25Nb2R1bGVfRmFjdG9yeShfX25nRmFjdG9yeVR5cGVfXykge1xuICAgICAgcmV0dXJuIG5ldyAoX19uZ0ZhY3RvcnlUeXBlX18gfHwgQ29tbW9uTW9kdWxlKSgpO1xuICAgIH07XG4gICAgc3RhdGljIMm1bW9kID0gLyogQF9fUFVSRV9fICovaTAuybXJtWRlZmluZU5nTW9kdWxlKHtcbiAgICAgIHR5cGU6IENvbW1vbk1vZHVsZVxuICAgIH0pO1xuICAgIHN0YXRpYyDJtWluaiA9IC8qIEBfX1BVUkVfXyAqL2kwLsm1ybVkZWZpbmVJbmplY3Rvcih7fSk7XG4gIH1cbiAgcmV0dXJuIENvbW1vbk1vZHVsZTtcbn0pKCk7XG4vKiNfX1BVUkVfXyovKCgpID0+IHtcbiAgKHR5cGVvZiBuZ0Rldk1vZGUgPT09IFwidW5kZWZpbmVkXCIgfHwgbmdEZXZNb2RlKSAmJiB2b2lkIDA7XG59KSgpO1xuZXhwb3J0IHsgQXN5bmNQaXBlLCBDb21tb25Nb2R1bGUsIEN1cnJlbmN5UGlwZSwgREFURV9QSVBFX0RFRkFVTFRfT1BUSU9OUywgREFURV9QSVBFX0RFRkFVTFRfVElNRVpPTkUsIERhdGVQaXBlLCBEZWNpbWFsUGlwZSwgRm9ybVN0eWxlLCBGb3JtYXRXaWR0aCwgSGFzaExvY2F0aW9uU3RyYXRlZ3ksIEkxOG5QbHVyYWxQaXBlLCBJMThuU2VsZWN0UGlwZSwgSnNvblBpcGUsIEtleVZhbHVlUGlwZSwgTG93ZXJDYXNlUGlwZSwgTmdDbGFzcywgTmdDb21wb25lbnRPdXRsZXQsIE5nRm9yT2YsIE5nRm9yT2ZDb250ZXh0LCBOZ0lmLCBOZ0lmQ29udGV4dCwgTmdMb2NhbGVMb2NhbGl6YXRpb24sIE5nTG9jYWxpemF0aW9uLCBOZ1BsdXJhbCwgTmdQbHVyYWxDYXNlLCBOZ1N0eWxlLCBOZ1N3aXRjaCwgTmdTd2l0Y2hDYXNlLCBOZ1N3aXRjaERlZmF1bHQsIE5nVGVtcGxhdGVPdXRsZXQsIE51bWJlckZvcm1hdFN0eWxlLCBOdW1iZXJTeW1ib2wsIFBlcmNlbnRQaXBlLCBQbHVyYWwsIFNsaWNlUGlwZSwgVGl0bGVDYXNlUGlwZSwgVHJhbnNsYXRpb25XaWR0aCwgVXBwZXJDYXNlUGlwZSwgV2Vla0RheSwgZm9ybWF0Q3VycmVuY3ksIGZvcm1hdERhdGUsIGZvcm1hdE51bWJlciwgZm9ybWF0UGVyY2VudCwgZ2V0Q3VycmVuY3lTeW1ib2wsIGdldExvY2FsZUN1cnJlbmN5Q29kZSwgZ2V0TG9jYWxlQ3VycmVuY3lOYW1lLCBnZXRMb2NhbGVDdXJyZW5jeVN5bWJvbCwgZ2V0TG9jYWxlRGF0ZUZvcm1hdCwgZ2V0TG9jYWxlRGF0ZVRpbWVGb3JtYXQsIGdldExvY2FsZURheU5hbWVzLCBnZXRMb2NhbGVEYXlQZXJpb2RzLCBnZXRMb2NhbGVEaXJlY3Rpb24sIGdldExvY2FsZUVyYU5hbWVzLCBnZXRMb2NhbGVFeHRyYURheVBlcmlvZFJ1bGVzLCBnZXRMb2NhbGVFeHRyYURheVBlcmlvZHMsIGdldExvY2FsZUZpcnN0RGF5T2ZXZWVrLCBnZXRMb2NhbGVJZCwgZ2V0TG9jYWxlTW9udGhOYW1lcywgZ2V0TG9jYWxlTnVtYmVyRm9ybWF0LCBnZXRMb2NhbGVOdW1iZXJTeW1ib2wsIGdldExvY2FsZVBsdXJhbENhc2UsIGdldExvY2FsZVRpbWVGb3JtYXQsIGdldExvY2FsZVdlZWtFbmRSYW5nZSwgZ2V0TnVtYmVyT2ZDdXJyZW5jeURpZ2l0cyB9O1xuIiwiLyoqXG4gKiBAbGljZW5zZSBBbmd1bGFyIHYyMS4yLjRcbiAqIChjKSAyMDEwLTIwMjYgR29vZ2xlIExMQy4gaHR0cHM6Ly9hbmd1bGFyLmRldi9cbiAqIExpY2Vuc2U6IE1JVFxuICovXG5cbmV4cG9ydCB7IEFzeW5jUGlwZSwgQ29tbW9uTW9kdWxlLCBDdXJyZW5jeVBpcGUsIERBVEVfUElQRV9ERUZBVUxUX09QVElPTlMsIERBVEVfUElQRV9ERUZBVUxUX1RJTUVaT05FLCBEYXRlUGlwZSwgRGVjaW1hbFBpcGUsIEZvcm1TdHlsZSwgRm9ybWF0V2lkdGgsIEhhc2hMb2NhdGlvblN0cmF0ZWd5LCBJMThuUGx1cmFsUGlwZSwgSTE4blNlbGVjdFBpcGUsIEpzb25QaXBlLCBLZXlWYWx1ZVBpcGUsIExvd2VyQ2FzZVBpcGUsIE5nQ2xhc3MsIE5nQ29tcG9uZW50T3V0bGV0LCBOZ0Zvck9mIGFzIE5nRm9yLCBOZ0Zvck9mLCBOZ0Zvck9mQ29udGV4dCwgTmdJZiwgTmdJZkNvbnRleHQsIE5nTG9jYWxlTG9jYWxpemF0aW9uLCBOZ0xvY2FsaXphdGlvbiwgTmdQbHVyYWwsIE5nUGx1cmFsQ2FzZSwgTmdTdHlsZSwgTmdTd2l0Y2gsIE5nU3dpdGNoQ2FzZSwgTmdTd2l0Y2hEZWZhdWx0LCBOZ1RlbXBsYXRlT3V0bGV0LCBOdW1iZXJGb3JtYXRTdHlsZSwgTnVtYmVyU3ltYm9sLCBQZXJjZW50UGlwZSwgUGx1cmFsLCBTbGljZVBpcGUsIFRpdGxlQ2FzZVBpcGUsIFRyYW5zbGF0aW9uV2lkdGgsIFVwcGVyQ2FzZVBpcGUsIFdlZWtEYXksIGZvcm1hdEN1cnJlbmN5LCBmb3JtYXREYXRlLCBmb3JtYXROdW1iZXIsIGZvcm1hdFBlcmNlbnQsIGdldEN1cnJlbmN5U3ltYm9sLCBnZXRMb2NhbGVDdXJyZW5jeUNvZGUsIGdldExvY2FsZUN1cnJlbmN5TmFtZSwgZ2V0TG9jYWxlQ3VycmVuY3lTeW1ib2wsIGdldExvY2FsZURhdGVGb3JtYXQsIGdldExvY2FsZURhdGVUaW1lRm9ybWF0LCBnZXRMb2NhbGVEYXlOYW1lcywgZ2V0TG9jYWxlRGF5UGVyaW9kcywgZ2V0TG9jYWxlRGlyZWN0aW9uLCBnZXRMb2NhbGVFcmFOYW1lcywgZ2V0TG9jYWxlRXh0cmFEYXlQZXJpb2RSdWxlcywgZ2V0TG9jYWxlRXh0cmFEYXlQZXJpb2RzLCBnZXRMb2NhbGVGaXJzdERheU9mV2VlaywgZ2V0TG9jYWxlSWQsIGdldExvY2FsZU1vbnRoTmFtZXMsIGdldExvY2FsZU51bWJlckZvcm1hdCwgZ2V0TG9jYWxlTnVtYmVyU3ltYm9sLCBnZXRMb2NhbGVQbHVyYWxDYXNlLCBnZXRMb2NhbGVUaW1lRm9ybWF0LCBnZXRMb2NhbGVXZWVrRW5kUmFuZ2UsIGdldE51bWJlck9mQ3VycmVuY3lEaWdpdHMgfSBmcm9tICcuL19jb21tb25fbW9kdWxlLWNodW5rLm1qcyc7XG5pbXBvcnQgKiBhcyBpMCBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGluamVjdCwgRGVzdHJveVJlZiwgSW5qZWN0YWJsZSwgybVyZWdpc3RlckxvY2FsZURhdGEgYXMgX3JlZ2lzdGVyTG9jYWxlRGF0YSwgVmVyc2lvbiwgybXJtWRlZmluZUluamVjdGFibGUgYXMgX19kZWZpbmVJbmplY3RhYmxlLCBET0NVTUVOVCwgybVmb3JtYXRSdW50aW1lRXJyb3IgYXMgX2Zvcm1hdFJ1bnRpbWVFcnJvciwgSW5qZWN0aW9uVG9rZW4sIMm1UnVudGltZUVycm9yIGFzIF9SdW50aW1lRXJyb3IsIMm1SU1BR0VfQ09ORklHIGFzIF9JTUFHRV9DT05GSUcsIFJlbmRlcmVyMiwgRWxlbWVudFJlZiwgSW5qZWN0b3IsIMm1cGVyZm9ybWFuY2VNYXJrRmVhdHVyZSBhcyBfcGVyZm9ybWFuY2VNYXJrRmVhdHVyZSwgTmdab25lLCBBcHBsaWNhdGlvblJlZiwgbnVtYmVyQXR0cmlidXRlLCBib29sZWFuQXR0cmlidXRlLCBEaXJlY3RpdmUsIElucHV0LCDJtUlNQUdFX0NPTkZJR19ERUZBVUxUUyBhcyBfSU1BR0VfQ09ORklHX0RFRkFVTFRTLCDJtXVud3JhcFNhZmVWYWx1ZSBhcyBfdW53cmFwU2FmZVZhbHVlLCBDaGFuZ2VEZXRlY3RvclJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuZXhwb3J0IHsgRE9DVU1FTlQsIMm1SU1BR0VfQ09ORklHIGFzIElNQUdFX0NPTkZJRyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUGxhdGZvcm1OYXZpZ2F0aW9uIH0gZnJvbSAnLi9fcGxhdGZvcm1fbmF2aWdhdGlvbi1jaHVuay5tanMnO1xuZXhwb3J0IHsgUFJFQ09NTUlUX0hBTkRMRVJfU1VQUE9SVEVEIGFzIMm1UFJFQ09NTUlUX0hBTkRMRVJfU1VQUE9SVEVEIH0gZnJvbSAnLi9fcGxhdGZvcm1fbmF2aWdhdGlvbi1jaHVuay5tanMnO1xuZXhwb3J0IHsgWGhyRmFjdG9yeSwgcGFyc2VDb29raWVWYWx1ZSBhcyDJtXBhcnNlQ29va2llVmFsdWUgfSBmcm9tICcuL194aHItY2h1bmsubWpzJztcbmltcG9ydCB7IExvY2F0aW9uLCBMb2NhdGlvblN0cmF0ZWd5LCBub3JtYWxpemVRdWVyeVBhcmFtcyB9IGZyb20gJy4vX2xvY2F0aW9uLWNodW5rLm1qcyc7XG5leHBvcnQgeyBBUFBfQkFTRV9IUkVGLCBOb1RyYWlsaW5nU2xhc2hQYXRoTG9jYXRpb25TdHJhdGVneSwgUGF0aExvY2F0aW9uU3RyYXRlZ3ksIFRyYWlsaW5nU2xhc2hQYXRoTG9jYXRpb25TdHJhdGVneSB9IGZyb20gJy4vX2xvY2F0aW9uLWNodW5rLm1qcyc7XG5leHBvcnQgeyBCcm93c2VyUGxhdGZvcm1Mb2NhdGlvbiwgTE9DQVRJT05fSU5JVElBTElaRUQsIFBsYXRmb3JtTG9jYXRpb24sIERvbUFkYXB0ZXIgYXMgybVEb21BZGFwdGVyLCBnZXRET00gYXMgybVnZXRET00sIHNldFJvb3REb21BZGFwdGVyIGFzIMm1c2V0Um9vdERvbUFkYXB0ZXIgfSBmcm9tICcuL19wbGF0Zm9ybV9sb2NhdGlvbi1jaHVuay5tanMnO1xuaW1wb3J0ICdyeGpzJztcbmxldCBOYXZpZ2F0aW9uQWRhcHRlckZvckxvY2F0aW9uID0gLyojX19QVVJFX18qLygoKSA9PiB7XG4gIGNsYXNzIE5hdmlnYXRpb25BZGFwdGVyRm9yTG9jYXRpb24gZXh0ZW5kcyBMb2NhdGlvbiB7XG4gICAgbmF2aWdhdGlvbiA9IGluamVjdChQbGF0Zm9ybU5hdmlnYXRpb24pO1xuICAgIGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICBzdXBlcihpbmplY3QoTG9jYXRpb25TdHJhdGVneSkpO1xuICAgICAgdGhpcy5yZWdpc3Rlck5hdmlnYXRpb25MaXN0ZW5lcnMoKTtcbiAgICB9XG4gICAgcmVnaXN0ZXJOYXZpZ2F0aW9uTGlzdGVuZXJzKCkge1xuICAgICAgY29uc3QgY3VycmVudEVudHJ5Q2hhbmdlTGlzdGVuZXIgPSAoKSA9PiB7XG4gICAgICAgIHRoaXMuX25vdGlmeVVybENoYW5nZUxpc3RlbmVycyh0aGlzLnBhdGgodHJ1ZSksIHRoaXMuZ2V0U3RhdGUoKSk7XG4gICAgICB9O1xuICAgICAgdGhpcy5uYXZpZ2F0aW9uLmFkZEV2ZW50TGlzdGVuZXIoJ2N1cnJlbnRlbnRyeWNoYW5nZScsIGN1cnJlbnRFbnRyeUNoYW5nZUxpc3RlbmVyKTtcbiAgICAgIHRoaXMuZGVzdHJveVJlZi5vbkRlc3Ryb3koKCkgPT4ge1xuICAgICAgICB0aGlzLm5hdmlnYXRpb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcignY3VycmVudGVudHJ5Y2hhbmdlJywgY3VycmVudEVudHJ5Q2hhbmdlTGlzdGVuZXIpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIGdldFN0YXRlKCkge1xuICAgICAgcmV0dXJuIHRoaXMubmF2aWdhdGlvbi5jdXJyZW50RW50cnk/LmdldFN0YXRlKCk7XG4gICAgfVxuICAgIHJlcGxhY2VTdGF0ZShwYXRoLCBxdWVyeSA9ICcnLCBzdGF0ZSA9IG51bGwpIHtcbiAgICAgIGNvbnN0IHVybCA9IHRoaXMucHJlcGFyZUV4dGVybmFsVXJsKHBhdGggKyBub3JtYWxpemVRdWVyeVBhcmFtcyhxdWVyeSkpO1xuICAgICAgdGhpcy5uYXZpZ2F0aW9uLm5hdmlnYXRlKHVybCwge1xuICAgICAgICBzdGF0ZSxcbiAgICAgICAgaGlzdG9yeTogJ3JlcGxhY2UnXG4gICAgICB9KTtcbiAgICB9XG4gICAgZ28ocGF0aCwgcXVlcnkgPSAnJywgc3RhdGUgPSBudWxsKSB7XG4gICAgICBjb25zdCB1cmwgPSB0aGlzLnByZXBhcmVFeHRlcm5hbFVybChwYXRoICsgbm9ybWFsaXplUXVlcnlQYXJhbXMocXVlcnkpKTtcbiAgICAgIHRoaXMubmF2aWdhdGlvbi5uYXZpZ2F0ZSh1cmwsIHtcbiAgICAgICAgc3RhdGUsXG4gICAgICAgIGhpc3Rvcnk6ICdwdXNoJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIGJhY2soKSB7XG4gICAgICB0aGlzLm5hdmlnYXRpb24uYmFjaygpO1xuICAgIH1cbiAgICBmb3J3YXJkKCkge1xuICAgICAgdGhpcy5uYXZpZ2F0aW9uLmZvcndhcmQoKTtcbiAgICB9XG4gICAgb25VcmxDaGFuZ2UoZm4pIHtcbiAgICAgIHRoaXMuX3VybENoYW5nZUxpc3RlbmVycy5wdXNoKGZuKTtcbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGZuSW5kZXggPSB0aGlzLl91cmxDaGFuZ2VMaXN0ZW5lcnMuaW5kZXhPZihmbik7XG4gICAgICAgIHRoaXMuX3VybENoYW5nZUxpc3RlbmVycy5zcGxpY2UoZm5JbmRleCwgMSk7XG4gICAgICB9O1xuICAgIH1cbiAgICBzdGF0aWMgybVmYWMgPSBmdW5jdGlvbiBOYXZpZ2F0aW9uQWRhcHRlckZvckxvY2F0aW9uX0ZhY3RvcnkoX19uZ0ZhY3RvcnlUeXBlX18pIHtcbiAgICAgIHJldHVybiBuZXcgKF9fbmdGYWN0b3J5VHlwZV9fIHx8IE5hdmlnYXRpb25BZGFwdGVyRm9yTG9jYXRpb24pKCk7XG4gICAgfTtcbiAgICBzdGF0aWMgybVwcm92ID0gLyogQF9fUFVSRV9fICovaTAuybXJtWRlZmluZUluamVjdGFibGUoe1xuICAgICAgdG9rZW46IE5hdmlnYXRpb25BZGFwdGVyRm9yTG9jYXRpb24sXG4gICAgICBmYWN0b3J5OiBOYXZpZ2F0aW9uQWRhcHRlckZvckxvY2F0aW9uLsm1ZmFjXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIE5hdmlnYXRpb25BZGFwdGVyRm9yTG9jYXRpb247XG59KSgpO1xuLyojX19QVVJFX18qLygoKSA9PiB7XG4gICh0eXBlb2YgbmdEZXZNb2RlID09PSBcInVuZGVmaW5lZFwiIHx8IG5nRGV2TW9kZSkgJiYgdm9pZCAwO1xufSkoKTtcbmZ1bmN0aW9uIHJlZ2lzdGVyTG9jYWxlRGF0YShkYXRhLCBsb2NhbGVJZCwgZXh0cmFEYXRhKSB7XG4gIHJldHVybiBfcmVnaXN0ZXJMb2NhbGVEYXRhKGRhdGEsIGxvY2FsZUlkLCBleHRyYURhdGEpO1xufVxuY29uc3QgUExBVEZPUk1fQlJPV1NFUl9JRCA9ICdicm93c2VyJztcbmNvbnN0IFBMQVRGT1JNX1NFUlZFUl9JRCA9ICdzZXJ2ZXInO1xuZnVuY3Rpb24gaXNQbGF0Zm9ybUJyb3dzZXIocGxhdGZvcm1JZCkge1xuICByZXR1cm4gcGxhdGZvcm1JZCA9PT0gUExBVEZPUk1fQlJPV1NFUl9JRDtcbn1cbmZ1bmN0aW9uIGlzUGxhdGZvcm1TZXJ2ZXIocGxhdGZvcm1JZCkge1xuICByZXR1cm4gcGxhdGZvcm1JZCA9PT0gUExBVEZPUk1fU0VSVkVSX0lEO1xufVxuY29uc3QgVkVSU0lPTiA9IC8qIEBfX1BVUkVfXyAqL25ldyBWZXJzaW9uKCcyMS4yLjQnKTtcbmxldCBWaWV3cG9ydFNjcm9sbGVyID0gLyojX19QVVJFX18qLygoKSA9PiB7XG4gIGNsYXNzIFZpZXdwb3J0U2Nyb2xsZXIge1xuICAgIHN0YXRpYyDJtXByb3YgPSAvKiBAX19QVVJFX18gKi9cbiAgICBfX2RlZmluZUluamVjdGFibGUoe1xuICAgICAgdG9rZW46IFZpZXdwb3J0U2Nyb2xsZXIsXG4gICAgICBwcm92aWRlZEluOiAncm9vdCcsXG4gICAgICBmYWN0b3J5OiAoKSA9PiB0eXBlb2YgbmdTZXJ2ZXJNb2RlICE9PSAndW5kZWZpbmVkJyAmJiBuZ1NlcnZlck1vZGUgPyBuZXcgTnVsbFZpZXdwb3J0U2Nyb2xsZXIoKSA6IG5ldyBCcm93c2VyVmlld3BvcnRTY3JvbGxlcihpbmplY3QoRE9DVU1FTlQpLCB3aW5kb3cpXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIFZpZXdwb3J0U2Nyb2xsZXI7XG59KSgpO1xuY2xhc3MgQnJvd3NlclZpZXdwb3J0U2Nyb2xsZXIge1xuICBkb2N1bWVudDtcbiAgd2luZG93O1xuICBvZmZzZXQgPSAoKSA9PiBbMCwgMF07XG4gIGNvbnN0cnVjdG9yKGRvY3VtZW50LCB3aW5kb3cpIHtcbiAgICB0aGlzLmRvY3VtZW50ID0gZG9jdW1lbnQ7XG4gICAgdGhpcy53aW5kb3cgPSB3aW5kb3c7XG4gIH1cbiAgc2V0T2Zmc2V0KG9mZnNldCkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KG9mZnNldCkpIHtcbiAgICAgIHRoaXMub2Zmc2V0ID0gKCkgPT4gb2Zmc2V0O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm9mZnNldCA9IG9mZnNldDtcbiAgICB9XG4gIH1cbiAgZ2V0U2Nyb2xsUG9zaXRpb24oKSB7XG4gICAgcmV0dXJuIFt0aGlzLndpbmRvdy5zY3JvbGxYLCB0aGlzLndpbmRvdy5zY3JvbGxZXTtcbiAgfVxuICBzY3JvbGxUb1Bvc2l0aW9uKHBvc2l0aW9uLCBvcHRpb25zKSB7XG4gICAgdGhpcy53aW5kb3cuc2Nyb2xsVG8oe1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIGxlZnQ6IHBvc2l0aW9uWzBdLFxuICAgICAgdG9wOiBwb3NpdGlvblsxXVxuICAgIH0pO1xuICB9XG4gIHNjcm9sbFRvQW5jaG9yKHRhcmdldCwgb3B0aW9ucykge1xuICAgIGNvbnN0IGVsU2VsZWN0ZWQgPSBmaW5kQW5jaG9yRnJvbURvY3VtZW50KHRoaXMuZG9jdW1lbnQsIHRhcmdldCk7XG4gICAgaWYgKGVsU2VsZWN0ZWQpIHtcbiAgICAgIHRoaXMuc2Nyb2xsVG9FbGVtZW50KGVsU2VsZWN0ZWQsIG9wdGlvbnMpO1xuICAgICAgZWxTZWxlY3RlZC5mb2N1cygpO1xuICAgIH1cbiAgfVxuICBzZXRIaXN0b3J5U2Nyb2xsUmVzdG9yYXRpb24oc2Nyb2xsUmVzdG9yYXRpb24pIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy53aW5kb3cuaGlzdG9yeS5zY3JvbGxSZXN0b3JhdGlvbiA9IHNjcm9sbFJlc3RvcmF0aW9uO1xuICAgIH0gY2F0Y2gge1xuICAgICAgY29uc29sZS53YXJuKF9mb3JtYXRSdW50aW1lRXJyb3IoMjQwMCwgbmdEZXZNb2RlICYmICdGYWlsZWQgdG8gc2V0IGB3aW5kb3cuaGlzdG9yeS5zY3JvbGxSZXN0b3JhdGlvbmAuICcgKyAnVGhpcyBtYXkgb2NjdXIgd2hlbjpcXG4nICsgJ+KAoiBUaGUgc2NyaXB0IGlzIHJ1bm5pbmcgaW5zaWRlIGEgc2FuZGJveGVkIGlmcmFtZVxcbicgKyAn4oCiIFRoZSB3aW5kb3cgaXMgcGFydGlhbGx5IG5hdmlnYXRlZCBvciBpbmFjdGl2ZVxcbicgKyAn4oCiIFRoZSBzY3JpcHQgaXMgZXhlY3V0ZWQgaW4gYW4gdW50cnVzdGVkIG9yIHNwZWNpYWwgY29udGV4dCAoZS5nLiwgdGVzdCBydW5uZXJzLCBicm93c2VyIGV4dGVuc2lvbnMsIG9yIGNvbnRlbnQgcHJldmlld3MpXFxuJyArICdTY3JvbGwgcG9zaXRpb24gbWF5IG5vdCBiZSBwcmVzZXJ2ZWQgYWNyb3NzIG5hdmlnYXRpb24uJykpO1xuICAgIH1cbiAgfVxuICBzY3JvbGxUb0VsZW1lbnQoZWwsIG9wdGlvbnMpIHtcbiAgICBjb25zdCByZWN0ID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3QgbGVmdCA9IHJlY3QubGVmdCArIHRoaXMud2luZG93LnBhZ2VYT2Zmc2V0O1xuICAgIGNvbnN0IHRvcCA9IHJlY3QudG9wICsgdGhpcy53aW5kb3cucGFnZVlPZmZzZXQ7XG4gICAgY29uc3Qgb2Zmc2V0ID0gdGhpcy5vZmZzZXQoKTtcbiAgICB0aGlzLndpbmRvdy5zY3JvbGxUbyh7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgbGVmdDogbGVmdCAtIG9mZnNldFswXSxcbiAgICAgIHRvcDogdG9wIC0gb2Zmc2V0WzFdXG4gICAgfSk7XG4gIH1cbn1cbmZ1bmN0aW9uIGZpbmRBbmNob3JGcm9tRG9jdW1lbnQoZG9jdW1lbnQsIHRhcmdldCkge1xuICBjb25zdCBkb2N1bWVudFJlc3VsdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRhcmdldCkgfHwgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUodGFyZ2V0KVswXTtcbiAgaWYgKGRvY3VtZW50UmVzdWx0KSB7XG4gICAgcmV0dXJuIGRvY3VtZW50UmVzdWx0O1xuICB9XG4gIGlmICh0eXBlb2YgZG9jdW1lbnQuY3JlYXRlVHJlZVdhbGtlciA9PT0gJ2Z1bmN0aW9uJyAmJiBkb2N1bWVudC5ib2R5ICYmIHR5cGVvZiBkb2N1bWVudC5ib2R5LmF0dGFjaFNoYWRvdyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNvbnN0IHRyZWVXYWxrZXIgPSBkb2N1bWVudC5jcmVhdGVUcmVlV2Fsa2VyKGRvY3VtZW50LmJvZHksIE5vZGVGaWx0ZXIuU0hPV19FTEVNRU5UKTtcbiAgICBsZXQgY3VycmVudE5vZGUgPSB0cmVlV2Fsa2VyLmN1cnJlbnROb2RlO1xuICAgIHdoaWxlIChjdXJyZW50Tm9kZSkge1xuICAgICAgY29uc3Qgc2hhZG93Um9vdCA9IGN1cnJlbnROb2RlLnNoYWRvd1Jvb3Q7XG4gICAgICBpZiAoc2hhZG93Um9vdCkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBzaGFkb3dSb290LmdldEVsZW1lbnRCeUlkKHRhcmdldCkgfHwgc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKGBbbmFtZT1cIiR7dGFyZ2V0fVwiXWApO1xuICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY3VycmVudE5vZGUgPSB0cmVlV2Fsa2VyLm5leHROb2RlKCk7XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsO1xufVxuY2xhc3MgTnVsbFZpZXdwb3J0U2Nyb2xsZXIge1xuICBzZXRPZmZzZXQob2Zmc2V0KSB7fVxuICBnZXRTY3JvbGxQb3NpdGlvbigpIHtcbiAgICByZXR1cm4gWzAsIDBdO1xuICB9XG4gIHNjcm9sbFRvUG9zaXRpb24ocG9zaXRpb24pIHt9XG4gIHNjcm9sbFRvQW5jaG9yKGFuY2hvcikge31cbiAgc2V0SGlzdG9yeVNjcm9sbFJlc3RvcmF0aW9uKHNjcm9sbFJlc3RvcmF0aW9uKSB7fVxufVxuY29uc3QgUExBQ0VIT0xERVJfUVVBTElUWSA9ICcyMCc7XG5mdW5jdGlvbiBnZXRVcmwoc3JjLCB3aW4pIHtcbiAgcmV0dXJuIGlzQWJzb2x1dGVVcmwoc3JjKSA/IG5ldyBVUkwoc3JjKSA6IG5ldyBVUkwoc3JjLCB3aW4ubG9jYXRpb24uaHJlZik7XG59XG5mdW5jdGlvbiBpc0Fic29sdXRlVXJsKHNyYykge1xuICByZXR1cm4gL15odHRwcz86XFwvXFwvLy50ZXN0KHNyYyk7XG59XG5mdW5jdGlvbiBleHRyYWN0SG9zdG5hbWUodXJsKSB7XG4gIHJldHVybiBpc0Fic29sdXRlVXJsKHVybCkgPyBuZXcgVVJMKHVybCkuaG9zdG5hbWUgOiB1cmw7XG59XG5mdW5jdGlvbiBpc1ZhbGlkUGF0aChwYXRoKSB7XG4gIGNvbnN0IGlzU3RyaW5nID0gdHlwZW9mIHBhdGggPT09ICdzdHJpbmcnO1xuICBpZiAoIWlzU3RyaW5nIHx8IHBhdGgudHJpbSgpID09PSAnJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB0cnkge1xuICAgIGNvbnN0IHVybCA9IG5ldyBVUkwocGF0aCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuZnVuY3Rpb24gbm9ybWFsaXplUGF0aChwYXRoKSB7XG4gIHJldHVybiBwYXRoLmVuZHNXaXRoKCcvJykgPyBwYXRoLnNsaWNlKDAsIC0xKSA6IHBhdGg7XG59XG5mdW5jdGlvbiBub3JtYWxpemVTcmMoc3JjKSB7XG4gIHJldHVybiBzcmMuc3RhcnRzV2l0aCgnLycpID8gc3JjLnNsaWNlKDEpIDogc3JjO1xufVxuY29uc3Qgbm9vcEltYWdlTG9hZGVyID0gY29uZmlnID0+IGNvbmZpZy5zcmM7XG5jb25zdCBJTUFHRV9MT0FERVIgPSAvKiNfX1BVUkVfXyovbmV3IEluamVjdGlvblRva2VuKHR5cGVvZiBuZ0Rldk1vZGUgIT09ICd1bmRlZmluZWQnICYmIG5nRGV2TW9kZSA/ICdJbWFnZUxvYWRlcicgOiAnJywge1xuICBmYWN0b3J5OiAoKSA9PiBub29wSW1hZ2VMb2FkZXJcbn0pO1xuZnVuY3Rpb24gY3JlYXRlSW1hZ2VMb2FkZXIoYnVpbGRVcmxGbiwgZXhhbXBsZVVybHMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHByb3ZpZGVJbWFnZUxvYWRlcihwYXRoKSB7XG4gICAgaWYgKCFpc1ZhbGlkUGF0aChwYXRoKSkge1xuICAgICAgdGhyb3dJbnZhbGlkUGF0aEVycm9yKHBhdGgsIGV4YW1wbGVVcmxzIHx8IFtdKTtcbiAgICB9XG4gICAgcGF0aCA9IG5vcm1hbGl6ZVBhdGgocGF0aCk7XG4gICAgY29uc3QgbG9hZGVyRm4gPSBjb25maWcgPT4ge1xuICAgICAgaWYgKGlzQWJzb2x1dGVVcmwoY29uZmlnLnNyYykpIHtcbiAgICAgICAgdGhyb3dVbmV4cGVjdGVkQWJzb2x1dGVVcmxFcnJvcihwYXRoLCBjb25maWcuc3JjKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBidWlsZFVybEZuKHBhdGgsIHtcbiAgICAgICAgLi4uY29uZmlnLFxuICAgICAgICBzcmM6IG5vcm1hbGl6ZVNyYyhjb25maWcuc3JjKVxuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBwcm92aWRlcnMgPSBbe1xuICAgICAgcHJvdmlkZTogSU1BR0VfTE9BREVSLFxuICAgICAgdXNlVmFsdWU6IGxvYWRlckZuXG4gICAgfV07XG4gICAgcmV0dXJuIHByb3ZpZGVycztcbiAgfTtcbn1cbmZ1bmN0aW9uIHRocm93SW52YWxpZFBhdGhFcnJvcihwYXRoLCBleGFtcGxlVXJscykge1xuICB0aHJvdyBuZXcgX1J1bnRpbWVFcnJvcigyOTU5LCBuZ0Rldk1vZGUgJiYgYEltYWdlIGxvYWRlciBoYXMgZGV0ZWN0ZWQgYW4gaW52YWxpZCBwYXRoIChcXGAke3BhdGh9XFxgKS4gYCArIGBUbyBmaXggdGhpcywgc3VwcGx5IGEgcGF0aCB1c2luZyBvbmUgb2YgdGhlIGZvbGxvd2luZyBmb3JtYXRzOiAke2V4YW1wbGVVcmxzLmpvaW4oJyBvciAnKX1gKTtcbn1cbmZ1bmN0aW9uIHRocm93VW5leHBlY3RlZEFic29sdXRlVXJsRXJyb3IocGF0aCwgdXJsKSB7XG4gIHRocm93IG5ldyBfUnVudGltZUVycm9yKDI5NTksIG5nRGV2TW9kZSAmJiBgSW1hZ2UgbG9hZGVyIGhhcyBkZXRlY3RlZCBhIFxcYDxpbWc+XFxgIHRhZyB3aXRoIGFuIGludmFsaWQgXFxgbmdTcmNcXGAgYXR0cmlidXRlOiAke3VybH0uIGAgKyBgVGhpcyBpbWFnZSBsb2FkZXIgZXhwZWN0cyBcXGBuZ1NyY1xcYCB0byBiZSBhIHJlbGF0aXZlIFVSTCAtIGAgKyBgaG93ZXZlciB0aGUgcHJvdmlkZWQgdmFsdWUgaXMgYW4gYWJzb2x1dGUgVVJMLiBgICsgYFRvIGZpeCB0aGlzLCBwcm92aWRlIFxcYG5nU3JjXFxgIGFzIGEgcGF0aCByZWxhdGl2ZSB0byB0aGUgYmFzZSBVUkwgYCArIGBjb25maWd1cmVkIGZvciB0aGlzIGxvYWRlciAoXFxgJHtwYXRofVxcYCkuYCk7XG59XG5mdW5jdGlvbiBub3JtYWxpemVMb2FkZXJUcmFuc2Zvcm0odHJhbnNmb3JtLCBzZXBhcmF0b3IpIHtcbiAgaWYgKHR5cGVvZiB0cmFuc2Zvcm0gPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHRyYW5zZm9ybTtcbiAgfVxuICByZXR1cm4gT2JqZWN0LmVudHJpZXModHJhbnNmb3JtKS5tYXAoKFtrZXksIHZhbHVlXSkgPT4gYCR7a2V5fSR7c2VwYXJhdG9yfSR7dmFsdWV9YCkuam9pbignLCcpO1xufVxuY29uc3QgcHJvdmlkZUNsb3VkZmxhcmVMb2FkZXIgPSAvKiNfX1BVUkVfXyovY3JlYXRlSW1hZ2VMb2FkZXIoY3JlYXRlQ2xvdWRmbGFyZVVybCwgbmdEZXZNb2RlID8gWydodHRwczovLzxaT05FPi9jZG4tY2dpL2ltYWdlLzxPUFRJT05TPi88U09VUkNFLUlNQUdFPiddIDogdW5kZWZpbmVkKTtcbmZ1bmN0aW9uIGNyZWF0ZUNsb3VkZmxhcmVVcmwocGF0aCwgY29uZmlnKSB7XG4gIGxldCBwYXJhbXMgPSBgZm9ybWF0PWF1dG9gO1xuICBpZiAoY29uZmlnLndpZHRoKSB7XG4gICAgcGFyYW1zICs9IGAsd2lkdGg9JHtjb25maWcud2lkdGh9YDtcbiAgfVxuICBpZiAoY29uZmlnLmhlaWdodCkge1xuICAgIHBhcmFtcyArPSBgLGhlaWdodD0ke2NvbmZpZy5oZWlnaHR9YDtcbiAgfVxuICBpZiAoY29uZmlnLmlzUGxhY2Vob2xkZXIpIHtcbiAgICBwYXJhbXMgKz0gYCxxdWFsaXR5PSR7UExBQ0VIT0xERVJfUVVBTElUWX1gO1xuICB9XG4gIGlmIChjb25maWcubG9hZGVyUGFyYW1zPy5bJ3RyYW5zZm9ybSddKSB7XG4gICAgY29uc3QgdHJhbnNmb3JtU3RyID0gbm9ybWFsaXplTG9hZGVyVHJhbnNmb3JtKGNvbmZpZy5sb2FkZXJQYXJhbXNbJ3RyYW5zZm9ybSddLCAnPScpO1xuICAgIHBhcmFtcyArPSBgLCR7dHJhbnNmb3JtU3RyfWA7XG4gIH1cbiAgcmV0dXJuIGAke3BhdGh9L2Nkbi1jZ2kvaW1hZ2UvJHtwYXJhbXN9LyR7Y29uZmlnLnNyY31gO1xufVxuY29uc3QgY2xvdWRpbmFyeUxvYWRlckluZm8gPSB7XG4gIG5hbWU6ICdDbG91ZGluYXJ5JyxcbiAgdGVzdFVybDogaXNDbG91ZGluYXJ5VXJsXG59O1xuY29uc3QgQ0xPVURJTkFSWV9MT0FERVJfUkVHRVggPSAvaHR0cHM/XFw6XFwvXFwvW15cXC9dK1xcLmNsb3VkaW5hcnlcXC5jb21cXC8uKy87XG5mdW5jdGlvbiBpc0Nsb3VkaW5hcnlVcmwodXJsKSB7XG4gIHJldHVybiBDTE9VRElOQVJZX0xPQURFUl9SRUdFWC50ZXN0KHVybCk7XG59XG5jb25zdCBwcm92aWRlQ2xvdWRpbmFyeUxvYWRlciA9IC8qI19fUFVSRV9fKi9jcmVhdGVJbWFnZUxvYWRlcihjcmVhdGVDbG91ZGluYXJ5VXJsLCBuZ0Rldk1vZGUgPyBbJ2h0dHBzOi8vcmVzLmNsb3VkaW5hcnkuY29tL215c2l0ZScsICdodHRwczovL215c2l0ZS5jbG91ZGluYXJ5LmNvbScsICdodHRwczovL3N1YmRvbWFpbi5teXNpdGUuY29tJ10gOiB1bmRlZmluZWQpO1xuZnVuY3Rpb24gY3JlYXRlQ2xvdWRpbmFyeVVybChwYXRoLCBjb25maWcpIHtcbiAgY29uc3QgcXVhbGl0eSA9IGNvbmZpZy5pc1BsYWNlaG9sZGVyID8gJ3FfYXV0bzpsb3cnIDogJ3FfYXV0byc7XG4gIGxldCBwYXJhbXMgPSBgZl9hdXRvLCR7cXVhbGl0eX1gO1xuICBpZiAoY29uZmlnLndpZHRoKSB7XG4gICAgcGFyYW1zICs9IGAsd18ke2NvbmZpZy53aWR0aH1gO1xuICB9XG4gIGlmIChjb25maWcuaGVpZ2h0KSB7XG4gICAgcGFyYW1zICs9IGAsaF8ke2NvbmZpZy5oZWlnaHR9YDtcbiAgfVxuICBpZiAoY29uZmlnLmxvYWRlclBhcmFtcz8uWydyb3VuZGVkJ10pIHtcbiAgICBwYXJhbXMgKz0gYCxyX21heGA7XG4gIH1cbiAgaWYgKGNvbmZpZy5sb2FkZXJQYXJhbXM/LlsndHJhbnNmb3JtJ10pIHtcbiAgICBjb25zdCB0cmFuc2Zvcm1TdHIgPSBub3JtYWxpemVMb2FkZXJUcmFuc2Zvcm0oY29uZmlnLmxvYWRlclBhcmFtc1sndHJhbnNmb3JtJ10sICdfJyk7XG4gICAgcGFyYW1zICs9IGAsJHt0cmFuc2Zvcm1TdHJ9YDtcbiAgfVxuICByZXR1cm4gYCR7cGF0aH0vaW1hZ2UvdXBsb2FkLyR7cGFyYW1zfS8ke2NvbmZpZy5zcmN9YDtcbn1cbmNvbnN0IGltYWdlS2l0TG9hZGVySW5mbyA9IHtcbiAgbmFtZTogJ0ltYWdlS2l0JyxcbiAgdGVzdFVybDogaXNJbWFnZUtpdFVybFxufTtcbmNvbnN0IElNQUdFX0tJVF9MT0FERVJfUkVHRVggPSAvaHR0cHM/XFw6XFwvXFwvW15cXC9dK1xcLmltYWdla2l0XFwuaW9cXC8uKy87XG5mdW5jdGlvbiBpc0ltYWdlS2l0VXJsKHVybCkge1xuICByZXR1cm4gSU1BR0VfS0lUX0xPQURFUl9SRUdFWC50ZXN0KHVybCk7XG59XG5jb25zdCBwcm92aWRlSW1hZ2VLaXRMb2FkZXIgPSAvKiNfX1BVUkVfXyovY3JlYXRlSW1hZ2VMb2FkZXIoY3JlYXRlSW1hZ2VraXRVcmwsIG5nRGV2TW9kZSA/IFsnaHR0cHM6Ly9pay5pbWFnZWtpdC5pby9teXNpdGUnLCAnaHR0cHM6Ly9zdWJkb21haW4ubXlzaXRlLmNvbSddIDogdW5kZWZpbmVkKTtcbmZ1bmN0aW9uIGNyZWF0ZUltYWdla2l0VXJsKHBhdGgsIGNvbmZpZykge1xuICBjb25zdCB7XG4gICAgc3JjLFxuICAgIHdpZHRoXG4gIH0gPSBjb25maWc7XG4gIGNvbnN0IHBhcmFtcyA9IFtdO1xuICBpZiAod2lkdGgpIHtcbiAgICBwYXJhbXMucHVzaChgdy0ke3dpZHRofWApO1xuICB9XG4gIGlmIChjb25maWcuaGVpZ2h0KSB7XG4gICAgcGFyYW1zLnB1c2goYGgtJHtjb25maWcuaGVpZ2h0fWApO1xuICB9XG4gIGlmIChjb25maWcuaXNQbGFjZWhvbGRlcikge1xuICAgIHBhcmFtcy5wdXNoKGBxLSR7UExBQ0VIT0xERVJfUVVBTElUWX1gKTtcbiAgfVxuICBpZiAoY29uZmlnLmxvYWRlclBhcmFtcz8uWyd0cmFuc2Zvcm0nXSkge1xuICAgIGNvbnN0IHRyYW5zZm9ybVN0ciA9IG5vcm1hbGl6ZUxvYWRlclRyYW5zZm9ybShjb25maWcubG9hZGVyUGFyYW1zWyd0cmFuc2Zvcm0nXSwgJy0nKTtcbiAgICBwYXJhbXMucHVzaCh0cmFuc2Zvcm1TdHIpO1xuICB9XG4gIGNvbnN0IHVybFNlZ21lbnRzID0gcGFyYW1zLmxlbmd0aCA/IFtwYXRoLCBgdHI6JHtwYXJhbXMuam9pbignLCcpfWAsIHNyY10gOiBbcGF0aCwgc3JjXTtcbiAgY29uc3QgdXJsID0gbmV3IFVSTCh1cmxTZWdtZW50cy5qb2luKCcvJykpO1xuICByZXR1cm4gdXJsLmhyZWY7XG59XG5jb25zdCBpbWdpeExvYWRlckluZm8gPSB7XG4gIG5hbWU6ICdJbWdpeCcsXG4gIHRlc3RVcmw6IGlzSW1naXhVcmxcbn07XG5jb25zdCBJTUdJWF9MT0FERVJfUkVHRVggPSAvaHR0cHM/XFw6XFwvXFwvW15cXC9dK1xcLmltZ2l4XFwubmV0XFwvLisvO1xuZnVuY3Rpb24gaXNJbWdpeFVybCh1cmwpIHtcbiAgcmV0dXJuIElNR0lYX0xPQURFUl9SRUdFWC50ZXN0KHVybCk7XG59XG5jb25zdCBwcm92aWRlSW1naXhMb2FkZXIgPSAvKiNfX1BVUkVfXyovY3JlYXRlSW1hZ2VMb2FkZXIoY3JlYXRlSW1naXhVcmwsIG5nRGV2TW9kZSA/IFsnaHR0cHM6Ly9zb21lcGF0aC5pbWdpeC5uZXQvJ10gOiB1bmRlZmluZWQpO1xuZnVuY3Rpb24gY3JlYXRlSW1naXhVcmwocGF0aCwgY29uZmlnKSB7XG4gIGNvbnN0IHBhcmFtcyA9IFtdO1xuICBwYXJhbXMucHVzaCgnYXV0bz1mb3JtYXQnKTtcbiAgaWYgKGNvbmZpZy53aWR0aCkge1xuICAgIHBhcmFtcy5wdXNoKGB3PSR7Y29uZmlnLndpZHRofWApO1xuICB9XG4gIGlmIChjb25maWcuaGVpZ2h0KSB7XG4gICAgcGFyYW1zLnB1c2goYGg9JHtjb25maWcuaGVpZ2h0fWApO1xuICB9XG4gIGlmIChjb25maWcuaXNQbGFjZWhvbGRlcikge1xuICAgIHBhcmFtcy5wdXNoKGBxPSR7UExBQ0VIT0xERVJfUVVBTElUWX1gKTtcbiAgfVxuICBpZiAoY29uZmlnLmxvYWRlclBhcmFtcz8uWyd0cmFuc2Zvcm0nXSkge1xuICAgIGNvbnN0IHRyYW5zZm9ybSA9IG5vcm1hbGl6ZUxvYWRlclRyYW5zZm9ybShjb25maWcubG9hZGVyUGFyYW1zWyd0cmFuc2Zvcm0nXSwgJz0nKS5zcGxpdCgnLCcpO1xuICAgIHBhcmFtcy5wdXNoKC4uLnRyYW5zZm9ybSk7XG4gIH1cbiAgY29uc3QgdXJsID0gbmV3IFVSTChgJHtwYXRofS8ke2NvbmZpZy5zcmN9YCk7XG4gIHVybC5zZWFyY2ggPSBwYXJhbXMuam9pbignJicpO1xuICByZXR1cm4gdXJsLmhyZWY7XG59XG5jb25zdCBuZXRsaWZ5TG9hZGVySW5mbyA9IHtcbiAgbmFtZTogJ05ldGxpZnknLFxuICB0ZXN0VXJsOiBpc05ldGxpZnlVcmxcbn07XG5jb25zdCBORVRMSUZZX0xPQURFUl9SRUdFWCA9IC9odHRwcz9cXDpcXC9cXC9bXlxcL10rXFwubmV0bGlmeVxcLmFwcFxcLy4rLztcbmZ1bmN0aW9uIGlzTmV0bGlmeVVybCh1cmwpIHtcbiAgcmV0dXJuIE5FVExJRllfTE9BREVSX1JFR0VYLnRlc3QodXJsKTtcbn1cbmZ1bmN0aW9uIHByb3ZpZGVOZXRsaWZ5TG9hZGVyKHBhdGgpIHtcbiAgaWYgKHBhdGggJiYgIWlzVmFsaWRQYXRoKHBhdGgpKSB7XG4gICAgdGhyb3cgbmV3IF9SdW50aW1lRXJyb3IoMjk1OSwgbmdEZXZNb2RlICYmIGBJbWFnZSBsb2FkZXIgaGFzIGRldGVjdGVkIGFuIGludmFsaWQgcGF0aCAoXFxgJHtwYXRofVxcYCkuIGAgKyBgVG8gZml4IHRoaXMsIHN1cHBseSBlaXRoZXIgdGhlIGZ1bGwgVVJMIHRvIHRoZSBOZXRsaWZ5IHNpdGUsIG9yIGxlYXZlIGl0IGVtcHR5IHRvIHVzZSB0aGUgY3VycmVudCBzaXRlLmApO1xuICB9XG4gIGlmIChwYXRoKSB7XG4gICAgY29uc3QgdXJsID0gbmV3IFVSTChwYXRoKTtcbiAgICBwYXRoID0gdXJsLm9yaWdpbjtcbiAgfVxuICBjb25zdCBsb2FkZXJGbiA9IGNvbmZpZyA9PiB7XG4gICAgcmV0dXJuIGNyZWF0ZU5ldGxpZnlVcmwoY29uZmlnLCBwYXRoKTtcbiAgfTtcbiAgY29uc3QgcHJvdmlkZXJzID0gW3tcbiAgICBwcm92aWRlOiBJTUFHRV9MT0FERVIsXG4gICAgdXNlVmFsdWU6IGxvYWRlckZuXG4gIH1dO1xuICByZXR1cm4gcHJvdmlkZXJzO1xufVxuY29uc3QgdmFsaWRQYXJhbXMgPSAvKiNfX1BVUkVfXyovbmV3IE1hcChbWydoZWlnaHQnLCAnaCddLCBbJ2ZpdCcsICdmaXQnXSwgWydxdWFsaXR5JywgJ3EnXSwgWydxJywgJ3EnXSwgWydwb3NpdGlvbicsICdwb3NpdGlvbiddXSk7XG5mdW5jdGlvbiBjcmVhdGVOZXRsaWZ5VXJsKGNvbmZpZywgcGF0aCkge1xuICBjb25zdCB1cmwgPSBuZXcgVVJMKHBhdGggPz8gJ2h0dHBzOi8vYS8nKTtcbiAgdXJsLnBhdGhuYW1lID0gJy8ubmV0bGlmeS9pbWFnZXMnO1xuICBpZiAoIWlzQWJzb2x1dGVVcmwoY29uZmlnLnNyYykgJiYgIWNvbmZpZy5zcmMuc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgY29uZmlnLnNyYyA9ICcvJyArIGNvbmZpZy5zcmM7XG4gIH1cbiAgdXJsLnNlYXJjaFBhcmFtcy5zZXQoJ3VybCcsIGNvbmZpZy5zcmMpO1xuICBpZiAoY29uZmlnLndpZHRoKSB7XG4gICAgdXJsLnNlYXJjaFBhcmFtcy5zZXQoJ3cnLCBjb25maWcud2lkdGgudG9TdHJpbmcoKSk7XG4gIH1cbiAgaWYgKGNvbmZpZy5oZWlnaHQpIHtcbiAgICB1cmwuc2VhcmNoUGFyYW1zLnNldCgnaCcsIGNvbmZpZy5oZWlnaHQudG9TdHJpbmcoKSk7XG4gIH1cbiAgY29uc3QgY29uZmlnUXVhbGl0eSA9IGNvbmZpZy5sb2FkZXJQYXJhbXM/LlsncXVhbGl0eSddID8/IGNvbmZpZy5sb2FkZXJQYXJhbXM/LlsncSddO1xuICBpZiAoY29uZmlnLmlzUGxhY2Vob2xkZXIgJiYgIWNvbmZpZ1F1YWxpdHkpIHtcbiAgICB1cmwuc2VhcmNoUGFyYW1zLnNldCgncScsIFBMQUNFSE9MREVSX1FVQUxJVFkpO1xuICB9XG4gIGZvciAoY29uc3QgW3BhcmFtLCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoY29uZmlnLmxvYWRlclBhcmFtcyA/PyB7fSkpIHtcbiAgICBpZiAodmFsaWRQYXJhbXMuaGFzKHBhcmFtKSkge1xuICAgICAgdXJsLnNlYXJjaFBhcmFtcy5zZXQodmFsaWRQYXJhbXMuZ2V0KHBhcmFtKSwgdmFsdWUudG9TdHJpbmcoKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChuZ0Rldk1vZGUpIHtcbiAgICAgICAgY29uc29sZS53YXJuKF9mb3JtYXRSdW50aW1lRXJyb3IoMjk1OSwgYFRoZSBOZXRsaWZ5IGltYWdlIGxvYWRlciBoYXMgZGV0ZWN0ZWQgYW4gXFxgPGltZz5cXGAgdGFnIHdpdGggdGhlIHVuc3VwcG9ydGVkIGF0dHJpYnV0ZSBcIlxcYCR7cGFyYW19XFxgXCIuYCkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gdXJsLmhvc3RuYW1lID09PSAnYScgPyB1cmwuaHJlZi5yZXBsYWNlKHVybC5vcmlnaW4sICcnKSA6IHVybC5ocmVmO1xufVxuZnVuY3Rpb24gaW1nRGlyZWN0aXZlRGV0YWlscyhuZ1NyYywgaW5jbHVkZU5nU3JjID0gdHJ1ZSkge1xuICBjb25zdCBuZ1NyY0luZm8gPSBpbmNsdWRlTmdTcmMgPyBgKGFjdGl2YXRlZCBvbiBhbiA8aW1nPiBlbGVtZW50IHdpdGggdGhlIFxcYG5nU3JjPVwiJHtuZ1NyY31cIlxcYCkgYCA6ICcnO1xuICByZXR1cm4gYFRoZSBOZ09wdGltaXplZEltYWdlIGRpcmVjdGl2ZSAke25nU3JjSW5mb31oYXMgZGV0ZWN0ZWQgdGhhdGA7XG59XG5mdW5jdGlvbiBhc3NlcnREZXZNb2RlKGNoZWNrTmFtZSkge1xuICBpZiAoIW5nRGV2TW9kZSkge1xuICAgIHRocm93IG5ldyBfUnVudGltZUVycm9yKDI5NTgsIGBVbmV4cGVjdGVkIGludm9jYXRpb24gb2YgdGhlICR7Y2hlY2tOYW1lfSBpbiB0aGUgcHJvZCBtb2RlLiBgICsgYFBsZWFzZSBtYWtlIHN1cmUgdGhhdCB0aGUgcHJvZCBtb2RlIGlzIGVuYWJsZWQgZm9yIHByb2R1Y3Rpb24gYnVpbGRzLmApO1xuICB9XG59XG5sZXQgTENQSW1hZ2VPYnNlcnZlciA9IC8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICBjbGFzcyBMQ1BJbWFnZU9ic2VydmVyIHtcbiAgICBpbWFnZXMgPSBuZXcgTWFwKCk7XG4gICAgd2luZG93ID0gaW5qZWN0KERPQ1VNRU5UKS5kZWZhdWx0VmlldztcbiAgICBvYnNlcnZlciA9IG51bGw7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICBhc3NlcnREZXZNb2RlKCdMQ1AgY2hlY2tlcicpO1xuICAgICAgaWYgKCh0eXBlb2YgbmdTZXJ2ZXJNb2RlID09PSAndW5kZWZpbmVkJyB8fCAhbmdTZXJ2ZXJNb2RlKSAmJiB0eXBlb2YgUGVyZm9ybWFuY2VPYnNlcnZlciAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgdGhpcy5vYnNlcnZlciA9IHRoaXMuaW5pdFBlcmZvcm1hbmNlT2JzZXJ2ZXIoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaW5pdFBlcmZvcm1hbmNlT2JzZXJ2ZXIoKSB7XG4gICAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBQZXJmb3JtYW5jZU9ic2VydmVyKGVudHJ5TGlzdCA9PiB7XG4gICAgICAgIGNvbnN0IGVudHJpZXMgPSBlbnRyeUxpc3QuZ2V0RW50cmllcygpO1xuICAgICAgICBpZiAoZW50cmllcy5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICAgICAgY29uc3QgbGNwRWxlbWVudCA9IGVudHJpZXNbZW50cmllcy5sZW5ndGggLSAxXTtcbiAgICAgICAgY29uc3QgaW1nU3JjID0gbGNwRWxlbWVudC5lbGVtZW50Py5zcmMgPz8gJyc7XG4gICAgICAgIGlmIChpbWdTcmMuc3RhcnRzV2l0aCgnZGF0YTonKSB8fCBpbWdTcmMuc3RhcnRzV2l0aCgnYmxvYjonKSkgcmV0dXJuO1xuICAgICAgICBjb25zdCBpbWcgPSB0aGlzLmltYWdlcy5nZXQoaW1nU3JjKTtcbiAgICAgICAgaWYgKCFpbWcpIHJldHVybjtcbiAgICAgICAgaWYgKCFpbWcucHJpb3JpdHkgJiYgIWltZy5hbHJlYWR5V2FybmVkUHJpb3JpdHkpIHtcbiAgICAgICAgICBpbWcuYWxyZWFkeVdhcm5lZFByaW9yaXR5ID0gdHJ1ZTtcbiAgICAgICAgICBsb2dNaXNzaW5nUHJpb3JpdHlFcnJvcihpbWdTcmMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpbWcubW9kaWZpZWQgJiYgIWltZy5hbHJlYWR5V2FybmVkTW9kaWZpZWQpIHtcbiAgICAgICAgICBpbWcuYWxyZWFkeVdhcm5lZE1vZGlmaWVkID0gdHJ1ZTtcbiAgICAgICAgICBsb2dNb2RpZmllZFdhcm5pbmcoaW1nU3JjKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBvYnNlcnZlci5vYnNlcnZlKHtcbiAgICAgICAgdHlwZTogJ2xhcmdlc3QtY29udGVudGZ1bC1wYWludCcsXG4gICAgICAgIGJ1ZmZlcmVkOiB0cnVlXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBvYnNlcnZlcjtcbiAgICB9XG4gICAgcmVnaXN0ZXJJbWFnZShyZXdyaXR0ZW5TcmMsIGlzUHJpb3JpdHkpIHtcbiAgICAgIGlmICghdGhpcy5vYnNlcnZlcikgcmV0dXJuO1xuICAgICAgY29uc3QgdXJsID0gZ2V0VXJsKHJld3JpdHRlblNyYywgdGhpcy53aW5kb3cpLmhyZWY7XG4gICAgICBjb25zdCBleGlzdGluZ1N0YXRlID0gdGhpcy5pbWFnZXMuZ2V0KHVybCk7XG4gICAgICBpZiAoZXhpc3RpbmdTdGF0ZSkge1xuICAgICAgICBleGlzdGluZ1N0YXRlLnByaW9yaXR5ID0gZXhpc3RpbmdTdGF0ZS5wcmlvcml0eSB8fCBpc1ByaW9yaXR5O1xuICAgICAgICBleGlzdGluZ1N0YXRlLmNvdW50Kys7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBuZXdPYnNlcnZlZEltYWdlU3RhdGUgPSB7XG4gICAgICAgICAgcHJpb3JpdHk6IGlzUHJpb3JpdHksXG4gICAgICAgICAgbW9kaWZpZWQ6IGZhbHNlLFxuICAgICAgICAgIGFscmVhZHlXYXJuZWRNb2RpZmllZDogZmFsc2UsXG4gICAgICAgICAgYWxyZWFkeVdhcm5lZFByaW9yaXR5OiBmYWxzZSxcbiAgICAgICAgICBjb3VudDogMVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmltYWdlcy5zZXQodXJsLCBuZXdPYnNlcnZlZEltYWdlU3RhdGUpO1xuICAgICAgfVxuICAgIH1cbiAgICB1bnJlZ2lzdGVySW1hZ2UocmV3cml0dGVuU3JjKSB7XG4gICAgICBpZiAoIXRoaXMub2JzZXJ2ZXIpIHJldHVybjtcbiAgICAgIGNvbnN0IHVybCA9IGdldFVybChyZXdyaXR0ZW5TcmMsIHRoaXMud2luZG93KS5ocmVmO1xuICAgICAgY29uc3QgZXhpc3RpbmdTdGF0ZSA9IHRoaXMuaW1hZ2VzLmdldCh1cmwpO1xuICAgICAgaWYgKGV4aXN0aW5nU3RhdGUpIHtcbiAgICAgICAgZXhpc3RpbmdTdGF0ZS5jb3VudC0tO1xuICAgICAgICBpZiAoZXhpc3RpbmdTdGF0ZS5jb3VudCA8PSAwKSB7XG4gICAgICAgICAgdGhpcy5pbWFnZXMuZGVsZXRlKHVybCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgdXBkYXRlSW1hZ2Uob3JpZ2luYWxTcmMsIG5ld1NyYykge1xuICAgICAgaWYgKCF0aGlzLm9ic2VydmVyKSByZXR1cm47XG4gICAgICBjb25zdCBvcmlnaW5hbFVybCA9IGdldFVybChvcmlnaW5hbFNyYywgdGhpcy53aW5kb3cpLmhyZWY7XG4gICAgICBjb25zdCBuZXdVcmwgPSBnZXRVcmwobmV3U3JjLCB0aGlzLndpbmRvdykuaHJlZjtcbiAgICAgIGlmIChvcmlnaW5hbFVybCA9PT0gbmV3VXJsKSByZXR1cm47XG4gICAgICBjb25zdCBvcmlnaW5hbFN0YXRlID0gdGhpcy5pbWFnZXMuZ2V0KG9yaWdpbmFsVXJsKTtcbiAgICAgIGlmICghb3JpZ2luYWxTdGF0ZSkgcmV0dXJuO1xuICAgICAgb3JpZ2luYWxTdGF0ZS5jb3VudC0tO1xuICAgICAgaWYgKG9yaWdpbmFsU3RhdGUuY291bnQgPD0gMCkge1xuICAgICAgICB0aGlzLmltYWdlcy5kZWxldGUob3JpZ2luYWxVcmwpO1xuICAgICAgfVxuICAgICAgY29uc3QgbmV3U3RhdGUgPSB0aGlzLmltYWdlcy5nZXQobmV3VXJsKTtcbiAgICAgIGlmIChuZXdTdGF0ZSkge1xuICAgICAgICBuZXdTdGF0ZS5wcmlvcml0eSA9IG5ld1N0YXRlLnByaW9yaXR5IHx8IG9yaWdpbmFsU3RhdGUucHJpb3JpdHk7XG4gICAgICAgIG5ld1N0YXRlLm1vZGlmaWVkID0gdHJ1ZTtcbiAgICAgICAgbmV3U3RhdGUuYWxyZWFkeVdhcm5lZFByaW9yaXR5ID0gbmV3U3RhdGUuYWxyZWFkeVdhcm5lZFByaW9yaXR5IHx8IG9yaWdpbmFsU3RhdGUuYWxyZWFkeVdhcm5lZFByaW9yaXR5O1xuICAgICAgICBuZXdTdGF0ZS5hbHJlYWR5V2FybmVkTW9kaWZpZWQgPSBuZXdTdGF0ZS5hbHJlYWR5V2FybmVkTW9kaWZpZWQgfHwgb3JpZ2luYWxTdGF0ZS5hbHJlYWR5V2FybmVkTW9kaWZpZWQ7XG4gICAgICAgIG5ld1N0YXRlLmNvdW50Kys7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmltYWdlcy5zZXQobmV3VXJsLCB7XG4gICAgICAgICAgcHJpb3JpdHk6IG9yaWdpbmFsU3RhdGUucHJpb3JpdHksXG4gICAgICAgICAgbW9kaWZpZWQ6IHRydWUsXG4gICAgICAgICAgYWxyZWFkeVdhcm5lZE1vZGlmaWVkOiBvcmlnaW5hbFN0YXRlLmFscmVhZHlXYXJuZWRNb2RpZmllZCxcbiAgICAgICAgICBhbHJlYWR5V2FybmVkUHJpb3JpdHk6IG9yaWdpbmFsU3RhdGUuYWxyZWFkeVdhcm5lZFByaW9yaXR5LFxuICAgICAgICAgIGNvdW50OiAxXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgIGlmICghdGhpcy5vYnNlcnZlcikgcmV0dXJuO1xuICAgICAgdGhpcy5vYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgICB0aGlzLmltYWdlcy5jbGVhcigpO1xuICAgIH1cbiAgICBzdGF0aWMgybVmYWMgPSBmdW5jdGlvbiBMQ1BJbWFnZU9ic2VydmVyX0ZhY3RvcnkoX19uZ0ZhY3RvcnlUeXBlX18pIHtcbiAgICAgIHJldHVybiBuZXcgKF9fbmdGYWN0b3J5VHlwZV9fIHx8IExDUEltYWdlT2JzZXJ2ZXIpKCk7XG4gICAgfTtcbiAgICBzdGF0aWMgybVwcm92ID0gLyogQF9fUFVSRV9fICovaTAuybXJtWRlZmluZUluamVjdGFibGUoe1xuICAgICAgdG9rZW46IExDUEltYWdlT2JzZXJ2ZXIsXG4gICAgICBmYWN0b3J5OiBMQ1BJbWFnZU9ic2VydmVyLsm1ZmFjLFxuICAgICAgcHJvdmlkZWRJbjogJ3Jvb3QnXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIExDUEltYWdlT2JzZXJ2ZXI7XG59KSgpO1xuLyojX19QVVJFX18qLygoKSA9PiB7XG4gICh0eXBlb2YgbmdEZXZNb2RlID09PSBcInVuZGVmaW5lZFwiIHx8IG5nRGV2TW9kZSkgJiYgdm9pZCAwO1xufSkoKTtcbmZ1bmN0aW9uIGxvZ01pc3NpbmdQcmlvcml0eUVycm9yKG5nU3JjKSB7XG4gIGNvbnN0IGRpcmVjdGl2ZURldGFpbHMgPSBpbWdEaXJlY3RpdmVEZXRhaWxzKG5nU3JjKTtcbiAgY29uc29sZS5lcnJvcihfZm9ybWF0UnVudGltZUVycm9yKDI5NTUsIGAke2RpcmVjdGl2ZURldGFpbHN9IHRoaXMgaW1hZ2UgaXMgdGhlIExhcmdlc3QgQ29udGVudGZ1bCBQYWludCAoTENQKSBgICsgYGVsZW1lbnQgYnV0IHdhcyBub3QgbWFya2VkIFwicHJpb3JpdHlcIi4gVGhpcyBpbWFnZSBzaG91bGQgYmUgbWFya2VkIGAgKyBgXCJwcmlvcml0eVwiIGluIG9yZGVyIHRvIHByaW9yaXRpemUgaXRzIGxvYWRpbmcuIGAgKyBgVG8gZml4IHRoaXMsIGFkZCB0aGUgXCJwcmlvcml0eVwiIGF0dHJpYnV0ZS5gKSk7XG59XG5mdW5jdGlvbiBsb2dNb2RpZmllZFdhcm5pbmcobmdTcmMpIHtcbiAgY29uc3QgZGlyZWN0aXZlRGV0YWlscyA9IGltZ0RpcmVjdGl2ZURldGFpbHMobmdTcmMpO1xuICBjb25zb2xlLndhcm4oX2Zvcm1hdFJ1bnRpbWVFcnJvcigyOTY0LCBgJHtkaXJlY3RpdmVEZXRhaWxzfSB0aGlzIGltYWdlIGlzIHRoZSBMYXJnZXN0IENvbnRlbnRmdWwgUGFpbnQgKExDUCkgYCArIGBlbGVtZW50IGFuZCBoYXMgaGFkIGl0cyBcIm5nU3JjXCIgYXR0cmlidXRlIG1vZGlmaWVkLiBUaGlzIGNhbiBjYXVzZSBgICsgYHNsb3dlciBsb2FkaW5nIHBlcmZvcm1hbmNlLiBJdCBpcyByZWNvbW1lbmRlZCBub3QgdG8gbW9kaWZ5IHRoZSBcIm5nU3JjXCIgYCArIGBwcm9wZXJ0eSBvbiBhbnkgaW1hZ2Ugd2hpY2ggY291bGQgYmUgdGhlIExDUCBlbGVtZW50LmApKTtcbn1cbmNvbnN0IElOVEVSTkFMX1BSRUNPTk5FQ1RfQ0hFQ0tfQkxPQ0tMSVNUID0gLyojX19QVVJFX18qL25ldyBTZXQoWydsb2NhbGhvc3QnLCAnMTI3LjAuMC4xJywgJzAuMC4wLjAnLCAnWzo6MV0nXSk7XG5jb25zdCBQUkVDT05ORUNUX0NIRUNLX0JMT0NLTElTVCA9IC8qI19fUFVSRV9fKi9uZXcgSW5qZWN0aW9uVG9rZW4odHlwZW9mIG5nRGV2TW9kZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbmdEZXZNb2RlID8gJ1BSRUNPTk5FQ1RfQ0hFQ0tfQkxPQ0tMSVNUJyA6ICcnKTtcbmxldCBQcmVjb25uZWN0TGlua0NoZWNrZXIgPSAvKiNfX1BVUkVfXyovKCgpID0+IHtcbiAgY2xhc3MgUHJlY29ubmVjdExpbmtDaGVja2VyIHtcbiAgICBkb2N1bWVudCA9IGluamVjdChET0NVTUVOVCk7XG4gICAgcHJlY29ubmVjdExpbmtzID0gbnVsbDtcbiAgICBhbHJlYWR5U2VlbiA9IG5ldyBTZXQoKTtcbiAgICB3aW5kb3cgPSB0aGlzLmRvY3VtZW50LmRlZmF1bHRWaWV3O1xuICAgIGJsb2NrbGlzdCA9IG5ldyBTZXQoSU5URVJOQUxfUFJFQ09OTkVDVF9DSEVDS19CTE9DS0xJU1QpO1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgYXNzZXJ0RGV2TW9kZSgncHJlY29ubmVjdCBsaW5rIGNoZWNrZXInKTtcbiAgICAgIGNvbnN0IGJsb2NrbGlzdCA9IGluamVjdChQUkVDT05ORUNUX0NIRUNLX0JMT0NLTElTVCwge1xuICAgICAgICBvcHRpb25hbDogdHJ1ZVxuICAgICAgfSk7XG4gICAgICBpZiAoYmxvY2tsaXN0KSB7XG4gICAgICAgIHRoaXMucG9wdWxhdGVCbG9ja2xpc3QoYmxvY2tsaXN0KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcG9wdWxhdGVCbG9ja2xpc3Qob3JpZ2lucykge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkob3JpZ2lucykpIHtcbiAgICAgICAgZGVlcEZvckVhY2gob3JpZ2lucywgb3JpZ2luID0+IHtcbiAgICAgICAgICB0aGlzLmJsb2NrbGlzdC5hZGQoZXh0cmFjdEhvc3RuYW1lKG9yaWdpbikpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuYmxvY2tsaXN0LmFkZChleHRyYWN0SG9zdG5hbWUob3JpZ2lucykpO1xuICAgICAgfVxuICAgIH1cbiAgICBhc3NlcnRQcmVjb25uZWN0KHJld3JpdHRlblNyYywgb3JpZ2luYWxOZ1NyYykge1xuICAgICAgaWYgKHR5cGVvZiBuZ1NlcnZlck1vZGUgIT09ICd1bmRlZmluZWQnICYmIG5nU2VydmVyTW9kZSkgcmV0dXJuO1xuICAgICAgY29uc3QgaW1nVXJsID0gZ2V0VXJsKHJld3JpdHRlblNyYywgdGhpcy53aW5kb3cpO1xuICAgICAgaWYgKHRoaXMuYmxvY2tsaXN0LmhhcyhpbWdVcmwuaG9zdG5hbWUpIHx8IHRoaXMuYWxyZWFkeVNlZW4uaGFzKGltZ1VybC5vcmlnaW4pKSByZXR1cm47XG4gICAgICB0aGlzLmFscmVhZHlTZWVuLmFkZChpbWdVcmwub3JpZ2luKTtcbiAgICAgIHRoaXMucHJlY29ubmVjdExpbmtzID8/PSB0aGlzLnF1ZXJ5UHJlY29ubmVjdExpbmtzKCk7XG4gICAgICBpZiAoIXRoaXMucHJlY29ubmVjdExpbmtzLmhhcyhpbWdVcmwub3JpZ2luKSkge1xuICAgICAgICBjb25zb2xlLndhcm4oX2Zvcm1hdFJ1bnRpbWVFcnJvcigyOTU2LCBgJHtpbWdEaXJlY3RpdmVEZXRhaWxzKG9yaWdpbmFsTmdTcmMpfSB0aGVyZSBpcyBubyBwcmVjb25uZWN0IHRhZyBwcmVzZW50IGZvciB0aGlzIGAgKyBgaW1hZ2UuIFByZWNvbm5lY3RpbmcgdG8gdGhlIG9yaWdpbihzKSB0aGF0IHNlcnZlIHByaW9yaXR5IGltYWdlcyBlbnN1cmVzIHRoYXQgdGhlc2UgYCArIGBpbWFnZXMgYXJlIGRlbGl2ZXJlZCBhcyBzb29uIGFzIHBvc3NpYmxlLiBUbyBmaXggdGhpcywgcGxlYXNlIGFkZCB0aGUgZm9sbG93aW5nIGAgKyBgZWxlbWVudCBpbnRvIHRoZSA8aGVhZD4gb2YgdGhlIGRvY3VtZW50OlxcbmAgKyBgICA8bGluayByZWw9XCJwcmVjb25uZWN0XCIgaHJlZj1cIiR7aW1nVXJsLm9yaWdpbn1cIj5gKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHF1ZXJ5UHJlY29ubmVjdExpbmtzKCkge1xuICAgICAgY29uc3QgcHJlY29ubmVjdFVybHMgPSBuZXcgU2V0KCk7XG4gICAgICBjb25zdCBsaW5rcyA9IHRoaXMuZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnbGlua1tyZWw9cHJlY29ubmVjdF0nKTtcbiAgICAgIGZvciAoY29uc3QgbGluayBvZiBsaW5rcykge1xuICAgICAgICBjb25zdCB1cmwgPSBnZXRVcmwobGluay5ocmVmLCB0aGlzLndpbmRvdyk7XG4gICAgICAgIHByZWNvbm5lY3RVcmxzLmFkZCh1cmwub3JpZ2luKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBwcmVjb25uZWN0VXJscztcbiAgICB9XG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICB0aGlzLnByZWNvbm5lY3RMaW5rcz8uY2xlYXIoKTtcbiAgICAgIHRoaXMuYWxyZWFkeVNlZW4uY2xlYXIoKTtcbiAgICB9XG4gICAgc3RhdGljIMm1ZmFjID0gZnVuY3Rpb24gUHJlY29ubmVjdExpbmtDaGVja2VyX0ZhY3RvcnkoX19uZ0ZhY3RvcnlUeXBlX18pIHtcbiAgICAgIHJldHVybiBuZXcgKF9fbmdGYWN0b3J5VHlwZV9fIHx8IFByZWNvbm5lY3RMaW5rQ2hlY2tlcikoKTtcbiAgICB9O1xuICAgIHN0YXRpYyDJtXByb3YgPSAvKiBAX19QVVJFX18gKi9pMC7Jtcm1ZGVmaW5lSW5qZWN0YWJsZSh7XG4gICAgICB0b2tlbjogUHJlY29ubmVjdExpbmtDaGVja2VyLFxuICAgICAgZmFjdG9yeTogUHJlY29ubmVjdExpbmtDaGVja2VyLsm1ZmFjLFxuICAgICAgcHJvdmlkZWRJbjogJ3Jvb3QnXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIFByZWNvbm5lY3RMaW5rQ2hlY2tlcjtcbn0pKCk7XG4vKiNfX1BVUkVfXyovKCgpID0+IHtcbiAgKHR5cGVvZiBuZ0Rldk1vZGUgPT09IFwidW5kZWZpbmVkXCIgfHwgbmdEZXZNb2RlKSAmJiB2b2lkIDA7XG59KSgpO1xuZnVuY3Rpb24gZGVlcEZvckVhY2goaW5wdXQsIGZuKSB7XG4gIGZvciAobGV0IHZhbHVlIG9mIGlucHV0KSB7XG4gICAgQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyBkZWVwRm9yRWFjaCh2YWx1ZSwgZm4pIDogZm4odmFsdWUpO1xuICB9XG59XG5jb25zdCBERUZBVUxUX1BSRUxPQURFRF9JTUFHRVNfTElNSVQgPSA1O1xuY29uc3QgUFJFTE9BREVEX0lNQUdFUyA9IC8qI19fUFVSRV9fKi9uZXcgSW5qZWN0aW9uVG9rZW4odHlwZW9mIG5nRGV2TW9kZSA9PT0gJ3VuZGVmaW5lZCcgfHwgbmdEZXZNb2RlID8gJ05HX09QVElNSVpFRF9QUkVMT0FERURfSU1BR0VTJyA6ICcnLCB7XG4gIGZhY3Rvcnk6ICgpID0+IG5ldyBTZXQoKVxufSk7XG5sZXQgUHJlbG9hZExpbmtDcmVhdG9yID0gLyojX19QVVJFX18qLygoKSA9PiB7XG4gIGNsYXNzIFByZWxvYWRMaW5rQ3JlYXRvciB7XG4gICAgcHJlbG9hZGVkSW1hZ2VzID0gaW5qZWN0KFBSRUxPQURFRF9JTUFHRVMpO1xuICAgIGRvY3VtZW50ID0gaW5qZWN0KERPQ1VNRU5UKTtcbiAgICBlcnJvclNob3duID0gZmFsc2U7XG4gICAgY3JlYXRlUHJlbG9hZExpbmtUYWcocmVuZGVyZXIsIHNyYywgc3Jjc2V0LCBzaXplcykge1xuICAgICAgaWYgKG5nRGV2TW9kZSAmJiAhdGhpcy5lcnJvclNob3duICYmIHRoaXMucHJlbG9hZGVkSW1hZ2VzLnNpemUgPj0gREVGQVVMVF9QUkVMT0FERURfSU1BR0VTX0xJTUlUKSB7XG4gICAgICAgIHRoaXMuZXJyb3JTaG93biA9IHRydWU7XG4gICAgICAgIGNvbnNvbGUud2FybihfZm9ybWF0UnVudGltZUVycm9yKDI5NjEsIGBUaGUgXFxgTmdPcHRpbWl6ZWRJbWFnZVxcYCBkaXJlY3RpdmUgaGFzIGRldGVjdGVkIHRoYXQgbW9yZSB0aGFuIGAgKyBgJHtERUZBVUxUX1BSRUxPQURFRF9JTUFHRVNfTElNSVR9IGltYWdlcyB3ZXJlIG1hcmtlZCBhcyBwcmlvcml0eS4gYCArIGBUaGlzIG1pZ2h0IG5lZ2F0aXZlbHkgYWZmZWN0IGFuIG92ZXJhbGwgcGVyZm9ybWFuY2Ugb2YgdGhlIHBhZ2UuIGAgKyBgVG8gZml4IHRoaXMsIHJlbW92ZSB0aGUgXCJwcmlvcml0eVwiIGF0dHJpYnV0ZSBmcm9tIGltYWdlcyB3aXRoIGxlc3MgcHJpb3JpdHkuYCkpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMucHJlbG9hZGVkSW1hZ2VzLmhhcyhzcmMpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMucHJlbG9hZGVkSW1hZ2VzLmFkZChzcmMpO1xuICAgICAgY29uc3QgcHJlbG9hZCA9IHJlbmRlcmVyLmNyZWF0ZUVsZW1lbnQoJ2xpbmsnKTtcbiAgICAgIHJlbmRlcmVyLnNldEF0dHJpYnV0ZShwcmVsb2FkLCAnYXMnLCAnaW1hZ2UnKTtcbiAgICAgIHJlbmRlcmVyLnNldEF0dHJpYnV0ZShwcmVsb2FkLCAnaHJlZicsIHNyYyk7XG4gICAgICByZW5kZXJlci5zZXRBdHRyaWJ1dGUocHJlbG9hZCwgJ3JlbCcsICdwcmVsb2FkJyk7XG4gICAgICByZW5kZXJlci5zZXRBdHRyaWJ1dGUocHJlbG9hZCwgJ2ZldGNocHJpb3JpdHknLCAnaGlnaCcpO1xuICAgICAgaWYgKHNpemVzKSB7XG4gICAgICAgIHJlbmRlcmVyLnNldEF0dHJpYnV0ZShwcmVsb2FkLCAnaW1hZ2VTaXplcycsIHNpemVzKTtcbiAgICAgIH1cbiAgICAgIGlmIChzcmNzZXQpIHtcbiAgICAgICAgcmVuZGVyZXIuc2V0QXR0cmlidXRlKHByZWxvYWQsICdpbWFnZVNyY3NldCcsIHNyY3NldCk7XG4gICAgICB9XG4gICAgICByZW5kZXJlci5hcHBlbmRDaGlsZCh0aGlzLmRvY3VtZW50LmhlYWQsIHByZWxvYWQpO1xuICAgIH1cbiAgICBzdGF0aWMgybVmYWMgPSBmdW5jdGlvbiBQcmVsb2FkTGlua0NyZWF0b3JfRmFjdG9yeShfX25nRmFjdG9yeVR5cGVfXykge1xuICAgICAgcmV0dXJuIG5ldyAoX19uZ0ZhY3RvcnlUeXBlX18gfHwgUHJlbG9hZExpbmtDcmVhdG9yKSgpO1xuICAgIH07XG4gICAgc3RhdGljIMm1cHJvdiA9IC8qIEBfX1BVUkVfXyAqL2kwLsm1ybVkZWZpbmVJbmplY3RhYmxlKHtcbiAgICAgIHRva2VuOiBQcmVsb2FkTGlua0NyZWF0b3IsXG4gICAgICBmYWN0b3J5OiBQcmVsb2FkTGlua0NyZWF0b3IuybVmYWMsXG4gICAgICBwcm92aWRlZEluOiAncm9vdCdcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gUHJlbG9hZExpbmtDcmVhdG9yO1xufSkoKTtcbi8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICAodHlwZW9mIG5nRGV2TW9kZSA9PT0gXCJ1bmRlZmluZWRcIiB8fCBuZ0Rldk1vZGUpICYmIHZvaWQgMDtcbn0pKCk7XG5jb25zdCBCQVNFNjRfSU1HX01BWF9MRU5HVEhfSU5fRVJST1IgPSA1MDtcbmNvbnN0IFZBTElEX1dJRFRIX0RFU0NSSVBUT1JfU1JDU0VUID0gL14oKFxccypcXGQrd1xccyooLHwkKSl7MSx9KSQvO1xuY29uc3QgVkFMSURfREVOU0lUWV9ERVNDUklQVE9SX1NSQ1NFVCA9IC9eKChcXHMqXFxkKyhcXC5cXGQrKT94XFxzKigsfCQpKXsxLH0pJC87XG5jb25zdCBBQlNPTFVURV9TUkNTRVRfREVOU0lUWV9DQVAgPSAzO1xuY29uc3QgUkVDT01NRU5ERURfU1JDU0VUX0RFTlNJVFlfQ0FQID0gMjtcbmNvbnN0IERFTlNJVFlfU1JDU0VUX01VTFRJUExJRVJTID0gWzEsIDJdO1xuY29uc3QgVklFV1BPUlRfQlJFQUtQT0lOVF9DVVRPRkYgPSA2NDA7XG5jb25zdCBBU1BFQ1RfUkFUSU9fVE9MRVJBTkNFID0gMC4xO1xuY29uc3QgT1ZFUlNJWkVEX0lNQUdFX1RPTEVSQU5DRSA9IDEwMDA7XG5jb25zdCBGSVhFRF9TUkNTRVRfV0lEVEhfTElNSVQgPSAxOTIwO1xuY29uc3QgRklYRURfU1JDU0VUX0hFSUdIVF9MSU1JVCA9IDEwODA7XG5jb25zdCBQTEFDRUhPTERFUl9ESU1FTlNJT05fTElNSVQgPSAxMDAwO1xuY29uc3QgREFUQV9VUkxfV0FSTl9MSU1JVCA9IDQwMDA7XG5jb25zdCBEQVRBX1VSTF9FUlJPUl9MSU1JVCA9IDEwMDAwO1xuY29uc3QgQlVJTFRfSU5fTE9BREVSUyA9IFtpbWdpeExvYWRlckluZm8sIGltYWdlS2l0TG9hZGVySW5mbywgY2xvdWRpbmFyeUxvYWRlckluZm8sIG5ldGxpZnlMb2FkZXJJbmZvXTtcbmNvbnN0IFBSSU9SSVRZX0NPVU5UX1RIUkVTSE9MRCA9IDEwO1xubGV0IElNR1NfV0lUSF9QUklPUklUWV9BVFRSX0NPVU5UID0gMDtcbmxldCBOZ09wdGltaXplZEltYWdlID0gLyojX19QVVJFX18qLygoKSA9PiB7XG4gIGNsYXNzIE5nT3B0aW1pemVkSW1hZ2Uge1xuICAgIGltYWdlTG9hZGVyID0gaW5qZWN0KElNQUdFX0xPQURFUik7XG4gICAgY29uZmlnID0gcHJvY2Vzc0NvbmZpZyhpbmplY3QoX0lNQUdFX0NPTkZJRykpO1xuICAgIHJlbmRlcmVyID0gaW5qZWN0KFJlbmRlcmVyMik7XG4gICAgaW1nRWxlbWVudCA9IGluamVjdChFbGVtZW50UmVmKS5uYXRpdmVFbGVtZW50O1xuICAgIGluamVjdG9yID0gaW5qZWN0KEluamVjdG9yKTtcbiAgICBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuICAgIGxjcE9ic2VydmVyO1xuICAgIF9yZW5kZXJlZFNyYyA9IG51bGw7XG4gICAgbmdTcmM7XG4gICAgbmdTcmNzZXQ7XG4gICAgc2l6ZXM7XG4gICAgd2lkdGg7XG4gICAgaGVpZ2h0O1xuICAgIGRlY29kaW5nO1xuICAgIGxvYWRpbmc7XG4gICAgcHJpb3JpdHkgPSBmYWxzZTtcbiAgICBsb2FkZXJQYXJhbXM7XG4gICAgZGlzYWJsZU9wdGltaXplZFNyY3NldCA9IGZhbHNlO1xuICAgIGZpbGwgPSBmYWxzZTtcbiAgICBwbGFjZWhvbGRlcjtcbiAgICBwbGFjZWhvbGRlckNvbmZpZztcbiAgICBzcmM7XG4gICAgc3Jjc2V0O1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgaWYgKG5nRGV2TW9kZSkge1xuICAgICAgICB0aGlzLmxjcE9ic2VydmVyID0gdGhpcy5pbmplY3Rvci5nZXQoTENQSW1hZ2VPYnNlcnZlcik7XG4gICAgICAgIHRoaXMuZGVzdHJveVJlZi5vbkRlc3Ryb3koKCkgPT4ge1xuICAgICAgICAgIGlmICghdGhpcy5wcmlvcml0eSAmJiB0aGlzLl9yZW5kZXJlZFNyYyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5sY3BPYnNlcnZlci51bnJlZ2lzdGVySW1hZ2UodGhpcy5fcmVuZGVyZWRTcmMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIG5nT25Jbml0KCkge1xuICAgICAgX3BlcmZvcm1hbmNlTWFya0ZlYXR1cmUoJ05nT3B0aW1pemVkSW1hZ2UnKTtcbiAgICAgIGlmIChuZ0Rldk1vZGUpIHtcbiAgICAgICAgY29uc3Qgbmdab25lID0gdGhpcy5pbmplY3Rvci5nZXQoTmdab25lKTtcbiAgICAgICAgYXNzZXJ0Tm9uRW1wdHlJbnB1dCh0aGlzLCAnbmdTcmMnLCB0aGlzLm5nU3JjKTtcbiAgICAgICAgYXNzZXJ0VmFsaWROZ1NyY3NldCh0aGlzLCB0aGlzLm5nU3Jjc2V0KTtcbiAgICAgICAgYXNzZXJ0Tm9Db25mbGljdGluZ1NyYyh0aGlzKTtcbiAgICAgICAgaWYgKHRoaXMubmdTcmNzZXQpIHtcbiAgICAgICAgICBhc3NlcnROb0NvbmZsaWN0aW5nU3Jjc2V0KHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIGFzc2VydE5vdEJhc2U2NEltYWdlKHRoaXMpO1xuICAgICAgICBhc3NlcnROb3RCbG9iVXJsKHRoaXMpO1xuICAgICAgICBpZiAodGhpcy5maWxsKSB7XG4gICAgICAgICAgYXNzZXJ0RW1wdHlXaWR0aEFuZEhlaWdodCh0aGlzKTtcbiAgICAgICAgICBuZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4gYXNzZXJ0Tm9uWmVyb1JlbmRlcmVkSGVpZ2h0KHRoaXMsIHRoaXMuaW1nRWxlbWVudCwgdGhpcy5yZW5kZXJlciwgdGhpcy5kZXN0cm95UmVmKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYXNzZXJ0Tm9uRW1wdHlXaWR0aEFuZEhlaWdodCh0aGlzKTtcbiAgICAgICAgICBpZiAodGhpcy5oZWlnaHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgYXNzZXJ0R3JlYXRlclRoYW5aZXJvKHRoaXMsIHRoaXMuaGVpZ2h0LCAnaGVpZ2h0Jyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0aGlzLndpZHRoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGFzc2VydEdyZWF0ZXJUaGFuWmVybyh0aGlzLCB0aGlzLndpZHRoLCAnd2lkdGgnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IGFzc2VydE5vSW1hZ2VEaXN0b3J0aW9uKHRoaXMsIHRoaXMuaW1nRWxlbWVudCwgdGhpcy5yZW5kZXJlciwgdGhpcy5kZXN0cm95UmVmKSk7XG4gICAgICAgIH1cbiAgICAgICAgYXNzZXJ0VmFsaWRMb2FkaW5nSW5wdXQodGhpcyk7XG4gICAgICAgIGFzc2VydFZhbGlkRGVjb2RpbmdJbnB1dCh0aGlzKTtcbiAgICAgICAgaWYgKCF0aGlzLm5nU3Jjc2V0KSB7XG4gICAgICAgICAgYXNzZXJ0Tm9Db21wbGV4U2l6ZXModGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgYXNzZXJ0VmFsaWRQbGFjZWhvbGRlcih0aGlzLCB0aGlzLmltYWdlTG9hZGVyKTtcbiAgICAgICAgYXNzZXJ0Tm90TWlzc2luZ0J1aWx0SW5Mb2FkZXIodGhpcy5uZ1NyYywgdGhpcy5pbWFnZUxvYWRlcik7XG4gICAgICAgIGFzc2VydE5vTmdTcmNzZXRXaXRob3V0TG9hZGVyKHRoaXMsIHRoaXMuaW1hZ2VMb2FkZXIpO1xuICAgICAgICBhc3NlcnROb0xvYWRlclBhcmFtc1dpdGhvdXRMb2FkZXIodGhpcywgdGhpcy5pbWFnZUxvYWRlcik7XG4gICAgICAgIG5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgdGhpcy5sY3BPYnNlcnZlci5yZWdpc3RlckltYWdlKHRoaXMuZ2V0UmV3cml0dGVuU3JjKCksIHRoaXMucHJpb3JpdHkpO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHRoaXMucHJpb3JpdHkpIHtcbiAgICAgICAgICBjb25zdCBjaGVja2VyID0gdGhpcy5pbmplY3Rvci5nZXQoUHJlY29ubmVjdExpbmtDaGVja2VyKTtcbiAgICAgICAgICBjaGVja2VyLmFzc2VydFByZWNvbm5lY3QodGhpcy5nZXRSZXdyaXR0ZW5TcmMoKSwgdGhpcy5uZ1NyYyk7XG4gICAgICAgICAgaWYgKHR5cGVvZiBuZ1NlcnZlck1vZGUgIT09ICd1bmRlZmluZWQnICYmICFuZ1NlcnZlck1vZGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGFwcGxpY2F0aW9uUmVmID0gdGhpcy5pbmplY3Rvci5nZXQoQXBwbGljYXRpb25SZWYpO1xuICAgICAgICAgICAgYXNzZXRQcmlvcml0eUNvdW50QmVsb3dUaHJlc2hvbGQoYXBwbGljYXRpb25SZWYpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHRoaXMucGxhY2Vob2xkZXIpIHtcbiAgICAgICAgdGhpcy5yZW1vdmVQbGFjZWhvbGRlck9uTG9hZCh0aGlzLmltZ0VsZW1lbnQpO1xuICAgICAgfVxuICAgICAgdGhpcy5zZXRIb3N0QXR0cmlidXRlcygpO1xuICAgIH1cbiAgICBzZXRIb3N0QXR0cmlidXRlcygpIHtcbiAgICAgIGlmICh0aGlzLmZpbGwpIHtcbiAgICAgICAgdGhpcy5zaXplcyB8fD0gJzEwMHZ3JztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2V0SG9zdEF0dHJpYnV0ZSgnd2lkdGgnLCB0aGlzLndpZHRoLnRvU3RyaW5nKCkpO1xuICAgICAgICB0aGlzLnNldEhvc3RBdHRyaWJ1dGUoJ2hlaWdodCcsIHRoaXMuaGVpZ2h0LnRvU3RyaW5nKCkpO1xuICAgICAgfVxuICAgICAgdGhpcy5zZXRIb3N0QXR0cmlidXRlKCdsb2FkaW5nJywgdGhpcy5nZXRMb2FkaW5nQmVoYXZpb3IoKSk7XG4gICAgICB0aGlzLnNldEhvc3RBdHRyaWJ1dGUoJ2ZldGNocHJpb3JpdHknLCB0aGlzLmdldEZldGNoUHJpb3JpdHkoKSk7XG4gICAgICB0aGlzLnNldEhvc3RBdHRyaWJ1dGUoJ2RlY29kaW5nJywgdGhpcy5nZXREZWNvZGluZygpKTtcbiAgICAgIHRoaXMuc2V0SG9zdEF0dHJpYnV0ZSgnbmctaW1nJywgJ3RydWUnKTtcbiAgICAgIGNvbnN0IHJld3JpdHRlblNyY3NldCA9IHRoaXMudXBkYXRlU3JjQW5kU3Jjc2V0KCk7XG4gICAgICBpZiAodGhpcy5zaXplcykge1xuICAgICAgICBpZiAodGhpcy5nZXRMb2FkaW5nQmVoYXZpb3IoKSA9PT0gJ2xhenknKSB7XG4gICAgICAgICAgdGhpcy5zZXRIb3N0QXR0cmlidXRlKCdzaXplcycsICdhdXRvLCAnICsgdGhpcy5zaXplcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zZXRIb3N0QXR0cmlidXRlKCdzaXplcycsIHRoaXMuc2l6ZXMpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodGhpcy5uZ1NyY3NldCAmJiBWQUxJRF9XSURUSF9ERVNDUklQVE9SX1NSQ1NFVC50ZXN0KHRoaXMubmdTcmNzZXQpICYmIHRoaXMuZ2V0TG9hZGluZ0JlaGF2aW9yKCkgPT09ICdsYXp5Jykge1xuICAgICAgICAgIHRoaXMuc2V0SG9zdEF0dHJpYnV0ZSgnc2l6ZXMnLCAnYXV0bywgMTAwdncnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBuZ1NlcnZlck1vZGUgIT09ICd1bmRlZmluZWQnICYmIG5nU2VydmVyTW9kZSAmJiB0aGlzLnByaW9yaXR5KSB7XG4gICAgICAgIGNvbnN0IHByZWxvYWRMaW5rQ3JlYXRvciA9IHRoaXMuaW5qZWN0b3IuZ2V0KFByZWxvYWRMaW5rQ3JlYXRvcik7XG4gICAgICAgIHByZWxvYWRMaW5rQ3JlYXRvci5jcmVhdGVQcmVsb2FkTGlua1RhZyh0aGlzLnJlbmRlcmVyLCB0aGlzLmdldFJld3JpdHRlblNyYygpLCByZXdyaXR0ZW5TcmNzZXQsIHRoaXMuc2l6ZXMpO1xuICAgICAgfVxuICAgIH1cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzKSB7XG4gICAgICBpZiAobmdEZXZNb2RlKSB7XG4gICAgICAgIGFzc2VydE5vUG9zdEluaXRJbnB1dENoYW5nZSh0aGlzLCBjaGFuZ2VzLCBbJ25nU3Jjc2V0JywgJ3dpZHRoJywgJ2hlaWdodCcsICdwcmlvcml0eScsICdmaWxsJywgJ2xvYWRpbmcnLCAnc2l6ZXMnLCAnbG9hZGVyUGFyYW1zJywgJ2Rpc2FibGVPcHRpbWl6ZWRTcmNzZXQnXSk7XG4gICAgICB9XG4gICAgICBpZiAoY2hhbmdlc1snbmdTcmMnXSAmJiAhY2hhbmdlc1snbmdTcmMnXS5pc0ZpcnN0Q2hhbmdlKCkpIHtcbiAgICAgICAgY29uc3Qgb2xkU3JjID0gdGhpcy5fcmVuZGVyZWRTcmM7XG4gICAgICAgIHRoaXMudXBkYXRlU3JjQW5kU3Jjc2V0KHRydWUpO1xuICAgICAgICBpZiAobmdEZXZNb2RlKSB7XG4gICAgICAgICAgY29uc3QgbmV3U3JjID0gdGhpcy5fcmVuZGVyZWRTcmM7XG4gICAgICAgICAgaWYgKG9sZFNyYyAmJiBuZXdTcmMgJiYgb2xkU3JjICE9PSBuZXdTcmMpIHtcbiAgICAgICAgICAgIGNvbnN0IG5nWm9uZSA9IHRoaXMuaW5qZWN0b3IuZ2V0KE5nWm9uZSk7XG4gICAgICAgICAgICBuZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLmxjcE9ic2VydmVyLnVwZGF0ZUltYWdlKG9sZFNyYywgbmV3U3JjKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKG5nRGV2TW9kZSAmJiBjaGFuZ2VzWydwbGFjZWhvbGRlciddPy5jdXJyZW50VmFsdWUgJiYgdHlwZW9mIG5nU2VydmVyTW9kZSAhPT0gJ3VuZGVmaW5lZCcgJiYgIW5nU2VydmVyTW9kZSkge1xuICAgICAgICBhc3NlcnRQbGFjZWhvbGRlckRpbWVuc2lvbnModGhpcywgdGhpcy5pbWdFbGVtZW50KTtcbiAgICAgIH1cbiAgICB9XG4gICAgZ2V0QXNwZWN0UmF0aW8oKSB7XG4gICAgICBpZiAodGhpcy53aWR0aCAmJiB0aGlzLmhlaWdodCAmJiB0aGlzLmhlaWdodCAhPT0gMCkge1xuICAgICAgICByZXR1cm4gdGhpcy53aWR0aCAvIHRoaXMuaGVpZ2h0O1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNhbGxJbWFnZUxvYWRlcihjb25maWdXaXRob3V0Q3VzdG9tUGFyYW1zKSB7XG4gICAgICBsZXQgYXVnbWVudGVkQ29uZmlnID0gY29uZmlnV2l0aG91dEN1c3RvbVBhcmFtcztcbiAgICAgIGlmICh0aGlzLmxvYWRlclBhcmFtcykge1xuICAgICAgICBhdWdtZW50ZWRDb25maWcubG9hZGVyUGFyYW1zID0gdGhpcy5sb2FkZXJQYXJhbXM7XG4gICAgICB9XG4gICAgICBjb25zdCByYXRpbyA9IHRoaXMuZ2V0QXNwZWN0UmF0aW8oKTtcbiAgICAgIGlmIChyYXRpbyAhPT0gbnVsbCAmJiBhdWdtZW50ZWRDb25maWcud2lkdGgpIHtcbiAgICAgICAgYXVnbWVudGVkQ29uZmlnLmhlaWdodCA9IE1hdGgucm91bmQoYXVnbWVudGVkQ29uZmlnLndpZHRoIC8gcmF0aW8pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuaW1hZ2VMb2FkZXIoYXVnbWVudGVkQ29uZmlnKTtcbiAgICB9XG4gICAgZ2V0TG9hZGluZ0JlaGF2aW9yKCkge1xuICAgICAgaWYgKCF0aGlzLnByaW9yaXR5ICYmIHRoaXMubG9hZGluZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvYWRpbmc7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5wcmlvcml0eSA/ICdlYWdlcicgOiAnbGF6eSc7XG4gICAgfVxuICAgIGdldEZldGNoUHJpb3JpdHkoKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcmlvcml0eSA/ICdoaWdoJyA6ICdhdXRvJztcbiAgICB9XG4gICAgZ2V0RGVjb2RpbmcoKSB7XG4gICAgICBpZiAodGhpcy5wcmlvcml0eSkge1xuICAgICAgICByZXR1cm4gJ3N5bmMnO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuZGVjb2RpbmcgPz8gJ2F1dG8nO1xuICAgIH1cbiAgICBnZXRSZXdyaXR0ZW5TcmMoKSB7XG4gICAgICBpZiAoIXRoaXMuX3JlbmRlcmVkU3JjKSB7XG4gICAgICAgIGNvbnN0IGltZ0NvbmZpZyA9IHtcbiAgICAgICAgICBzcmM6IHRoaXMubmdTcmNcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5fcmVuZGVyZWRTcmMgPSB0aGlzLmNhbGxJbWFnZUxvYWRlcihpbWdDb25maWcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuX3JlbmRlcmVkU3JjO1xuICAgIH1cbiAgICBnZXRSZXdyaXR0ZW5TcmNzZXQoKSB7XG4gICAgICBjb25zdCB3aWR0aFNyY1NldCA9IFZBTElEX1dJRFRIX0RFU0NSSVBUT1JfU1JDU0VULnRlc3QodGhpcy5uZ1NyY3NldCk7XG4gICAgICBjb25zdCBmaW5hbFNyY3MgPSB0aGlzLm5nU3Jjc2V0LnNwbGl0KCcsJykuZmlsdGVyKHNyYyA9PiBzcmMgIT09ICcnKS5tYXAoc3JjU3RyID0+IHtcbiAgICAgICAgc3JjU3RyID0gc3JjU3RyLnRyaW0oKTtcbiAgICAgICAgY29uc3Qgd2lkdGggPSB3aWR0aFNyY1NldCA/IHBhcnNlRmxvYXQoc3JjU3RyKSA6IHBhcnNlRmxvYXQoc3JjU3RyKSAqIHRoaXMud2lkdGg7XG4gICAgICAgIHJldHVybiBgJHt0aGlzLmNhbGxJbWFnZUxvYWRlcih7XG4gICAgICAgICAgc3JjOiB0aGlzLm5nU3JjLFxuICAgICAgICAgIHdpZHRoXG4gICAgICAgIH0pfSAke3NyY1N0cn1gO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gZmluYWxTcmNzLmpvaW4oJywgJyk7XG4gICAgfVxuICAgIGdldEF1dG9tYXRpY1NyY3NldCgpIHtcbiAgICAgIGlmICh0aGlzLnNpemVzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFJlc3BvbnNpdmVTcmNzZXQoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEZpeGVkU3Jjc2V0KCk7XG4gICAgICB9XG4gICAgfVxuICAgIGdldFJlc3BvbnNpdmVTcmNzZXQoKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGJyZWFrcG9pbnRzXG4gICAgICB9ID0gdGhpcy5jb25maWc7XG4gICAgICBsZXQgZmlsdGVyZWRCcmVha3BvaW50cyA9IGJyZWFrcG9pbnRzO1xuICAgICAgaWYgKHRoaXMuc2l6ZXM/LnRyaW0oKSA9PT0gJzEwMHZ3Jykge1xuICAgICAgICBmaWx0ZXJlZEJyZWFrcG9pbnRzID0gYnJlYWtwb2ludHMuZmlsdGVyKGJwID0+IGJwID49IFZJRVdQT1JUX0JSRUFLUE9JTlRfQ1VUT0ZGKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGZpbmFsU3JjcyA9IGZpbHRlcmVkQnJlYWtwb2ludHMubWFwKGJwID0+IGAke3RoaXMuY2FsbEltYWdlTG9hZGVyKHtcbiAgICAgICAgc3JjOiB0aGlzLm5nU3JjLFxuICAgICAgICB3aWR0aDogYnBcbiAgICAgIH0pfSAke2JwfXdgKTtcbiAgICAgIHJldHVybiBmaW5hbFNyY3Muam9pbignLCAnKTtcbiAgICB9XG4gICAgdXBkYXRlU3JjQW5kU3Jjc2V0KGZvcmNlU3JjUmVjYWxjID0gZmFsc2UpIHtcbiAgICAgIGlmIChmb3JjZVNyY1JlY2FsYykge1xuICAgICAgICB0aGlzLl9yZW5kZXJlZFNyYyA9IG51bGw7XG4gICAgICB9XG4gICAgICBjb25zdCByZXdyaXR0ZW5TcmMgPSB0aGlzLmdldFJld3JpdHRlblNyYygpO1xuICAgICAgdGhpcy5zZXRIb3N0QXR0cmlidXRlKCdzcmMnLCByZXdyaXR0ZW5TcmMpO1xuICAgICAgbGV0IHJld3JpdHRlblNyY3NldCA9IHVuZGVmaW5lZDtcbiAgICAgIGlmICh0aGlzLm5nU3Jjc2V0KSB7XG4gICAgICAgIHJld3JpdHRlblNyY3NldCA9IHRoaXMuZ2V0UmV3cml0dGVuU3Jjc2V0KCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuc2hvdWxkR2VuZXJhdGVBdXRvbWF0aWNTcmNzZXQoKSkge1xuICAgICAgICByZXdyaXR0ZW5TcmNzZXQgPSB0aGlzLmdldEF1dG9tYXRpY1NyY3NldCgpO1xuICAgICAgfVxuICAgICAgaWYgKHJld3JpdHRlblNyY3NldCkge1xuICAgICAgICB0aGlzLnNldEhvc3RBdHRyaWJ1dGUoJ3NyY3NldCcsIHJld3JpdHRlblNyY3NldCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmV3cml0dGVuU3Jjc2V0O1xuICAgIH1cbiAgICBnZXRGaXhlZFNyY3NldCgpIHtcbiAgICAgIGNvbnN0IGZpbmFsU3JjcyA9IERFTlNJVFlfU1JDU0VUX01VTFRJUExJRVJTLm1hcChtdWx0aXBsaWVyID0+IGAke3RoaXMuY2FsbEltYWdlTG9hZGVyKHtcbiAgICAgICAgc3JjOiB0aGlzLm5nU3JjLFxuICAgICAgICB3aWR0aDogdGhpcy53aWR0aCAqIG11bHRpcGxpZXJcbiAgICAgIH0pfSAke211bHRpcGxpZXJ9eGApO1xuICAgICAgcmV0dXJuIGZpbmFsU3Jjcy5qb2luKCcsICcpO1xuICAgIH1cbiAgICBzaG91bGRHZW5lcmF0ZUF1dG9tYXRpY1NyY3NldCgpIHtcbiAgICAgIGxldCBvdmVyc2l6ZWRJbWFnZSA9IGZhbHNlO1xuICAgICAgaWYgKCF0aGlzLnNpemVzKSB7XG4gICAgICAgIG92ZXJzaXplZEltYWdlID0gdGhpcy53aWR0aCA+IEZJWEVEX1NSQ1NFVF9XSURUSF9MSU1JVCB8fCB0aGlzLmhlaWdodCA+IEZJWEVEX1NSQ1NFVF9IRUlHSFRfTElNSVQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gIXRoaXMuZGlzYWJsZU9wdGltaXplZFNyY3NldCAmJiAhdGhpcy5zcmNzZXQgJiYgdGhpcy5pbWFnZUxvYWRlciAhPT0gbm9vcEltYWdlTG9hZGVyICYmICFvdmVyc2l6ZWRJbWFnZTtcbiAgICB9XG4gICAgZ2VuZXJhdGVQbGFjZWhvbGRlcihwbGFjZWhvbGRlcklucHV0KSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHBsYWNlaG9sZGVyUmVzb2x1dGlvblxuICAgICAgfSA9IHRoaXMuY29uZmlnO1xuICAgICAgaWYgKHBsYWNlaG9sZGVySW5wdXQgPT09IHRydWUpIHtcbiAgICAgICAgcmV0dXJuIGB1cmwoJHt0aGlzLmNhbGxJbWFnZUxvYWRlcih7XG4gICAgICAgICAgc3JjOiB0aGlzLm5nU3JjLFxuICAgICAgICAgIHdpZHRoOiBwbGFjZWhvbGRlclJlc29sdXRpb24sXG4gICAgICAgICAgaXNQbGFjZWhvbGRlcjogdHJ1ZVxuICAgICAgICB9KX0pYDtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHBsYWNlaG9sZGVySW5wdXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBgdXJsKCR7cGxhY2Vob2xkZXJJbnB1dH0pYDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBzaG91bGRCbHVyUGxhY2Vob2xkZXIocGxhY2Vob2xkZXJDb25maWcpIHtcbiAgICAgIGlmICghcGxhY2Vob2xkZXJDb25maWcgfHwgIXBsYWNlaG9sZGVyQ29uZmlnLmhhc093blByb3BlcnR5KCdibHVyJykpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gQm9vbGVhbihwbGFjZWhvbGRlckNvbmZpZy5ibHVyKTtcbiAgICB9XG4gICAgcmVtb3ZlUGxhY2Vob2xkZXJPbkxvYWQoaW1nKSB7XG4gICAgICBjb25zdCBjYWxsYmFjayA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgY2hhbmdlRGV0ZWN0b3JSZWYgPSB0aGlzLmluamVjdG9yLmdldChDaGFuZ2VEZXRlY3RvclJlZik7XG4gICAgICAgIHJlbW92ZUxvYWRMaXN0ZW5lckZuKCk7XG4gICAgICAgIHJlbW92ZUVycm9yTGlzdGVuZXJGbigpO1xuICAgICAgICB0aGlzLnBsYWNlaG9sZGVyID0gZmFsc2U7XG4gICAgICAgIGNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlbW92ZUxvYWRMaXN0ZW5lckZuID0gdGhpcy5yZW5kZXJlci5saXN0ZW4oaW1nLCAnbG9hZCcsIGNhbGxiYWNrKTtcbiAgICAgIGNvbnN0IHJlbW92ZUVycm9yTGlzdGVuZXJGbiA9IHRoaXMucmVuZGVyZXIubGlzdGVuKGltZywgJ2Vycm9yJywgY2FsbGJhY2spO1xuICAgICAgdGhpcy5kZXN0cm95UmVmLm9uRGVzdHJveSgoKSA9PiB7XG4gICAgICAgIHJlbW92ZUxvYWRMaXN0ZW5lckZuKCk7XG4gICAgICAgIHJlbW92ZUVycm9yTGlzdGVuZXJGbigpO1xuICAgICAgfSk7XG4gICAgICBjYWxsT25Mb2FkSWZJbWFnZUlzTG9hZGVkKGltZywgY2FsbGJhY2spO1xuICAgIH1cbiAgICBzZXRIb3N0QXR0cmlidXRlKG5hbWUsIHZhbHVlKSB7XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZSh0aGlzLmltZ0VsZW1lbnQsIG5hbWUsIHZhbHVlKTtcbiAgICB9XG4gICAgc3RhdGljIMm1ZmFjID0gZnVuY3Rpb24gTmdPcHRpbWl6ZWRJbWFnZV9GYWN0b3J5KF9fbmdGYWN0b3J5VHlwZV9fKSB7XG4gICAgICByZXR1cm4gbmV3IChfX25nRmFjdG9yeVR5cGVfXyB8fCBOZ09wdGltaXplZEltYWdlKSgpO1xuICAgIH07XG4gICAgc3RhdGljIMm1ZGlyID0gLyogQF9fUFVSRV9fICovaTAuybXJtWRlZmluZURpcmVjdGl2ZSh7XG4gICAgICB0eXBlOiBOZ09wdGltaXplZEltYWdlLFxuICAgICAgc2VsZWN0b3JzOiBbW1wiaW1nXCIsIFwibmdTcmNcIiwgXCJcIl1dLFxuICAgICAgaG9zdFZhcnM6IDE4LFxuICAgICAgaG9zdEJpbmRpbmdzOiBmdW5jdGlvbiBOZ09wdGltaXplZEltYWdlX0hvc3RCaW5kaW5ncyhyZiwgY3R4KSB7XG4gICAgICAgIGlmIChyZiAmIDIpIHtcbiAgICAgICAgICBpMC7Jtcm1c3R5bGVQcm9wKFwicG9zaXRpb25cIiwgY3R4LmZpbGwgPyBcImFic29sdXRlXCIgOiBudWxsKShcIndpZHRoXCIsIGN0eC5maWxsID8gXCIxMDAlXCIgOiBudWxsKShcImhlaWdodFwiLCBjdHguZmlsbCA/IFwiMTAwJVwiIDogbnVsbCkoXCJpbnNldFwiLCBjdHguZmlsbCA/IFwiMFwiIDogbnVsbCkoXCJiYWNrZ3JvdW5kLXNpemVcIiwgY3R4LnBsYWNlaG9sZGVyID8gXCJjb3ZlclwiIDogbnVsbCkoXCJiYWNrZ3JvdW5kLXBvc2l0aW9uXCIsIGN0eC5wbGFjZWhvbGRlciA/IFwiNTAlIDUwJVwiIDogbnVsbCkoXCJiYWNrZ3JvdW5kLXJlcGVhdFwiLCBjdHgucGxhY2Vob2xkZXIgPyBcIm5vLXJlcGVhdFwiIDogbnVsbCkoXCJiYWNrZ3JvdW5kLWltYWdlXCIsIGN0eC5wbGFjZWhvbGRlciA/IGN0eC5nZW5lcmF0ZVBsYWNlaG9sZGVyKGN0eC5wbGFjZWhvbGRlcikgOiBudWxsKShcImZpbHRlclwiLCBjdHgucGxhY2Vob2xkZXIgJiYgY3R4LnNob3VsZEJsdXJQbGFjZWhvbGRlcihjdHgucGxhY2Vob2xkZXJDb25maWcpID8gXCJibHVyKDE1cHgpXCIgOiBudWxsKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGlucHV0czoge1xuICAgICAgICBuZ1NyYzogWzIsIFwibmdTcmNcIiwgXCJuZ1NyY1wiLCB1bndyYXBTYWZlVXJsXSxcbiAgICAgICAgbmdTcmNzZXQ6IFwibmdTcmNzZXRcIixcbiAgICAgICAgc2l6ZXM6IFwic2l6ZXNcIixcbiAgICAgICAgd2lkdGg6IFsyLCBcIndpZHRoXCIsIFwid2lkdGhcIiwgbnVtYmVyQXR0cmlidXRlXSxcbiAgICAgICAgaGVpZ2h0OiBbMiwgXCJoZWlnaHRcIiwgXCJoZWlnaHRcIiwgbnVtYmVyQXR0cmlidXRlXSxcbiAgICAgICAgZGVjb2Rpbmc6IFwiZGVjb2RpbmdcIixcbiAgICAgICAgbG9hZGluZzogXCJsb2FkaW5nXCIsXG4gICAgICAgIHByaW9yaXR5OiBbMiwgXCJwcmlvcml0eVwiLCBcInByaW9yaXR5XCIsIGJvb2xlYW5BdHRyaWJ1dGVdLFxuICAgICAgICBsb2FkZXJQYXJhbXM6IFwibG9hZGVyUGFyYW1zXCIsXG4gICAgICAgIGRpc2FibGVPcHRpbWl6ZWRTcmNzZXQ6IFsyLCBcImRpc2FibGVPcHRpbWl6ZWRTcmNzZXRcIiwgXCJkaXNhYmxlT3B0aW1pemVkU3Jjc2V0XCIsIGJvb2xlYW5BdHRyaWJ1dGVdLFxuICAgICAgICBmaWxsOiBbMiwgXCJmaWxsXCIsIFwiZmlsbFwiLCBib29sZWFuQXR0cmlidXRlXSxcbiAgICAgICAgcGxhY2Vob2xkZXI6IFsyLCBcInBsYWNlaG9sZGVyXCIsIFwicGxhY2Vob2xkZXJcIiwgYm9vbGVhbk9yVXJsQXR0cmlidXRlXSxcbiAgICAgICAgcGxhY2Vob2xkZXJDb25maWc6IFwicGxhY2Vob2xkZXJDb25maWdcIixcbiAgICAgICAgc3JjOiBcInNyY1wiLFxuICAgICAgICBzcmNzZXQ6IFwic3Jjc2V0XCJcbiAgICAgIH0sXG4gICAgICBmZWF0dXJlczogW2kwLsm1ybVOZ09uQ2hhbmdlc0ZlYXR1cmVdXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIE5nT3B0aW1pemVkSW1hZ2U7XG59KSgpO1xuLyojX19QVVJFX18qLygoKSA9PiB7XG4gICh0eXBlb2YgbmdEZXZNb2RlID09PSBcInVuZGVmaW5lZFwiIHx8IG5nRGV2TW9kZSkgJiYgdm9pZCAwO1xufSkoKTtcbmZ1bmN0aW9uIHByb2Nlc3NDb25maWcoY29uZmlnKSB7XG4gIGxldCBzb3J0ZWRCcmVha3BvaW50cyA9IHt9O1xuICBpZiAoY29uZmlnLmJyZWFrcG9pbnRzKSB7XG4gICAgc29ydGVkQnJlYWtwb2ludHMuYnJlYWtwb2ludHMgPSBjb25maWcuYnJlYWtwb2ludHMuc29ydCgoYSwgYikgPT4gYSAtIGIpO1xuICB9XG4gIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBfSU1BR0VfQ09ORklHX0RFRkFVTFRTLCBjb25maWcsIHNvcnRlZEJyZWFrcG9pbnRzKTtcbn1cbmZ1bmN0aW9uIGFzc2VydE5vQ29uZmxpY3RpbmdTcmMoZGlyKSB7XG4gIGlmIChkaXIuc3JjKSB7XG4gICAgdGhyb3cgbmV3IF9SdW50aW1lRXJyb3IoMjk1MCwgYCR7aW1nRGlyZWN0aXZlRGV0YWlscyhkaXIubmdTcmMpfSBib3RoIFxcYHNyY1xcYCBhbmQgXFxgbmdTcmNcXGAgaGF2ZSBiZWVuIHNldC4gYCArIGBTdXBwbHlpbmcgYm90aCBvZiB0aGVzZSBhdHRyaWJ1dGVzIGJyZWFrcyBsYXp5IGxvYWRpbmcuIGAgKyBgVGhlIE5nT3B0aW1pemVkSW1hZ2UgZGlyZWN0aXZlIHNldHMgXFxgc3JjXFxgIGl0c2VsZiBiYXNlZCBvbiB0aGUgdmFsdWUgb2YgXFxgbmdTcmNcXGAuIGAgKyBgVG8gZml4IHRoaXMsIHBsZWFzZSByZW1vdmUgdGhlIFxcYHNyY1xcYCBhdHRyaWJ1dGUuYCk7XG4gIH1cbn1cbmZ1bmN0aW9uIGFzc2VydE5vQ29uZmxpY3RpbmdTcmNzZXQoZGlyKSB7XG4gIGlmIChkaXIuc3Jjc2V0KSB7XG4gICAgdGhyb3cgbmV3IF9SdW50aW1lRXJyb3IoMjk1MSwgYCR7aW1nRGlyZWN0aXZlRGV0YWlscyhkaXIubmdTcmMpfSBib3RoIFxcYHNyY3NldFxcYCBhbmQgXFxgbmdTcmNzZXRcXGAgaGF2ZSBiZWVuIHNldC4gYCArIGBTdXBwbHlpbmcgYm90aCBvZiB0aGVzZSBhdHRyaWJ1dGVzIGJyZWFrcyBsYXp5IGxvYWRpbmcuIGAgKyBgVGhlIE5nT3B0aW1pemVkSW1hZ2UgZGlyZWN0aXZlIHNldHMgXFxgc3Jjc2V0XFxgIGl0c2VsZiBiYXNlZCBvbiB0aGUgdmFsdWUgb2YgYCArIGBcXGBuZ1NyY3NldFxcYC4gVG8gZml4IHRoaXMsIHBsZWFzZSByZW1vdmUgdGhlIFxcYHNyY3NldFxcYCBhdHRyaWJ1dGUuYCk7XG4gIH1cbn1cbmZ1bmN0aW9uIGFzc2VydE5vdEJhc2U2NEltYWdlKGRpcikge1xuICBsZXQgbmdTcmMgPSBkaXIubmdTcmMudHJpbSgpO1xuICBpZiAobmdTcmMuc3RhcnRzV2l0aCgnZGF0YTonKSkge1xuICAgIGlmIChuZ1NyYy5sZW5ndGggPiBCQVNFNjRfSU1HX01BWF9MRU5HVEhfSU5fRVJST1IpIHtcbiAgICAgIG5nU3JjID0gbmdTcmMuc3Vic3RyaW5nKDAsIEJBU0U2NF9JTUdfTUFYX0xFTkdUSF9JTl9FUlJPUikgKyAnLi4uJztcbiAgICB9XG4gICAgdGhyb3cgbmV3IF9SdW50aW1lRXJyb3IoMjk1MiwgYCR7aW1nRGlyZWN0aXZlRGV0YWlscyhkaXIubmdTcmMsIGZhbHNlKX0gXFxgbmdTcmNcXGAgaXMgYSBCYXNlNjQtZW5jb2RlZCBzdHJpbmcgYCArIGAoJHtuZ1NyY30pLiBOZ09wdGltaXplZEltYWdlIGRvZXMgbm90IHN1cHBvcnQgQmFzZTY0LWVuY29kZWQgc3RyaW5ncy4gYCArIGBUbyBmaXggdGhpcywgZGlzYWJsZSB0aGUgTmdPcHRpbWl6ZWRJbWFnZSBkaXJlY3RpdmUgZm9yIHRoaXMgZWxlbWVudCBgICsgYGJ5IHJlbW92aW5nIFxcYG5nU3JjXFxgIGFuZCB1c2luZyBhIHN0YW5kYXJkIFxcYHNyY1xcYCBhdHRyaWJ1dGUgaW5zdGVhZC5gKTtcbiAgfVxufVxuZnVuY3Rpb24gYXNzZXJ0Tm9Db21wbGV4U2l6ZXMoZGlyKSB7XG4gIGxldCBzaXplcyA9IGRpci5zaXplcztcbiAgaWYgKHNpemVzPy5tYXRjaCgvKChcXCl8LClcXHN8XilcXGQrcHgvKSkge1xuICAgIHRocm93IG5ldyBfUnVudGltZUVycm9yKDI5NTIsIGAke2ltZ0RpcmVjdGl2ZURldGFpbHMoZGlyLm5nU3JjLCBmYWxzZSl9IFxcYHNpemVzXFxgIHdhcyBzZXQgdG8gYSBzdHJpbmcgaW5jbHVkaW5nIGAgKyBgcGl4ZWwgdmFsdWVzLiBGb3IgYXV0b21hdGljIFxcYHNyY3NldFxcYCBnZW5lcmF0aW9uLCBcXGBzaXplc1xcYCBtdXN0IG9ubHkgaW5jbHVkZSByZXNwb25zaXZlIGAgKyBgdmFsdWVzLCBzdWNoIGFzIFxcYHNpemVzPVwiNTB2d1wiXFxgIG9yIFxcYHNpemVzPVwiKG1pbi13aWR0aDogNzY4cHgpIDUwdncsIDEwMHZ3XCJcXGAuIGAgKyBgVG8gZml4IHRoaXMsIG1vZGlmeSB0aGUgXFxgc2l6ZXNcXGAgYXR0cmlidXRlLCBvciBwcm92aWRlIHlvdXIgb3duIFxcYG5nU3Jjc2V0XFxgIHZhbHVlIGRpcmVjdGx5LmApO1xuICB9XG59XG5mdW5jdGlvbiBhc3NlcnRWYWxpZFBsYWNlaG9sZGVyKGRpciwgaW1hZ2VMb2FkZXIpIHtcbiAgYXNzZXJ0Tm9QbGFjZWhvbGRlckNvbmZpZ1dpdGhvdXRQbGFjZWhvbGRlcihkaXIpO1xuICBhc3NlcnROb1JlbGF0aXZlUGxhY2Vob2xkZXJXaXRob3V0TG9hZGVyKGRpciwgaW1hZ2VMb2FkZXIpO1xuICBhc3NlcnROb092ZXJzaXplZERhdGFVcmwoZGlyKTtcbn1cbmZ1bmN0aW9uIGFzc2VydE5vUGxhY2Vob2xkZXJDb25maWdXaXRob3V0UGxhY2Vob2xkZXIoZGlyKSB7XG4gIGlmIChkaXIucGxhY2Vob2xkZXJDb25maWcgJiYgIWRpci5wbGFjZWhvbGRlcikge1xuICAgIHRocm93IG5ldyBfUnVudGltZUVycm9yKDI5NTIsIGAke2ltZ0RpcmVjdGl2ZURldGFpbHMoZGlyLm5nU3JjLCBmYWxzZSl9IFxcYHBsYWNlaG9sZGVyQ29uZmlnXFxgIG9wdGlvbnMgd2VyZSBwcm92aWRlZCBmb3IgYW4gYCArIGBpbWFnZSB0aGF0IGRvZXMgbm90IHVzZSB0aGUgXFxgcGxhY2Vob2xkZXJcXGAgYXR0cmlidXRlLCBhbmQgd2lsbCBoYXZlIG5vIGVmZmVjdC5gKTtcbiAgfVxufVxuZnVuY3Rpb24gYXNzZXJ0Tm9SZWxhdGl2ZVBsYWNlaG9sZGVyV2l0aG91dExvYWRlcihkaXIsIGltYWdlTG9hZGVyKSB7XG4gIGlmIChkaXIucGxhY2Vob2xkZXIgPT09IHRydWUgJiYgaW1hZ2VMb2FkZXIgPT09IG5vb3BJbWFnZUxvYWRlcikge1xuICAgIHRocm93IG5ldyBfUnVudGltZUVycm9yKDI5NjMsIGAke2ltZ0RpcmVjdGl2ZURldGFpbHMoZGlyLm5nU3JjKX0gdGhlIFxcYHBsYWNlaG9sZGVyXFxgIGF0dHJpYnV0ZSBpcyBzZXQgdG8gdHJ1ZSBidXQgYCArIGBubyBpbWFnZSBsb2FkZXIgaXMgY29uZmlndXJlZCAoaS5lLiB0aGUgZGVmYXVsdCBvbmUgaXMgYmVpbmcgdXNlZCksIGAgKyBgd2hpY2ggd291bGQgcmVzdWx0IGluIHRoZSBzYW1lIGltYWdlIGJlaW5nIHVzZWQgZm9yIHRoZSBwcmltYXJ5IGltYWdlIGFuZCBpdHMgcGxhY2Vob2xkZXIuIGAgKyBgVG8gZml4IHRoaXMsIHByb3ZpZGUgYSBsb2FkZXIgb3IgcmVtb3ZlIHRoZSBcXGBwbGFjZWhvbGRlclxcYCBhdHRyaWJ1dGUgZnJvbSB0aGUgaW1hZ2UuYCk7XG4gIH1cbn1cbmZ1bmN0aW9uIGFzc2VydE5vT3ZlcnNpemVkRGF0YVVybChkaXIpIHtcbiAgaWYgKGRpci5wbGFjZWhvbGRlciAmJiB0eXBlb2YgZGlyLnBsYWNlaG9sZGVyID09PSAnc3RyaW5nJyAmJiBkaXIucGxhY2Vob2xkZXIuc3RhcnRzV2l0aCgnZGF0YTonKSkge1xuICAgIGlmIChkaXIucGxhY2Vob2xkZXIubGVuZ3RoID4gREFUQV9VUkxfRVJST1JfTElNSVQpIHtcbiAgICAgIHRocm93IG5ldyBfUnVudGltZUVycm9yKDI5NjUsIGAke2ltZ0RpcmVjdGl2ZURldGFpbHMoZGlyLm5nU3JjKX0gdGhlIFxcYHBsYWNlaG9sZGVyXFxgIGF0dHJpYnV0ZSBpcyBzZXQgdG8gYSBkYXRhIFVSTCB3aGljaCBpcyBsb25nZXIgYCArIGB0aGFuICR7REFUQV9VUkxfRVJST1JfTElNSVR9IGNoYXJhY3RlcnMuIFRoaXMgaXMgc3Ryb25nbHkgZGlzY291cmFnZWQsIGFzIGxhcmdlIGlubGluZSBwbGFjZWhvbGRlcnMgYCArIGBkaXJlY3RseSBpbmNyZWFzZSB0aGUgYnVuZGxlIHNpemUgb2YgQW5ndWxhciBhbmQgaHVydCBwYWdlIGxvYWQgcGVyZm9ybWFuY2UuIFRvIGZpeCB0aGlzLCBnZW5lcmF0ZSBgICsgYGEgc21hbGxlciBkYXRhIFVSTCBwbGFjZWhvbGRlci5gKTtcbiAgICB9XG4gICAgaWYgKGRpci5wbGFjZWhvbGRlci5sZW5ndGggPiBEQVRBX1VSTF9XQVJOX0xJTUlUKSB7XG4gICAgICBjb25zb2xlLndhcm4oX2Zvcm1hdFJ1bnRpbWVFcnJvcigyOTY1LCBgJHtpbWdEaXJlY3RpdmVEZXRhaWxzKGRpci5uZ1NyYyl9IHRoZSBcXGBwbGFjZWhvbGRlclxcYCBhdHRyaWJ1dGUgaXMgc2V0IHRvIGEgZGF0YSBVUkwgd2hpY2ggaXMgbG9uZ2VyIGAgKyBgdGhhbiAke0RBVEFfVVJMX1dBUk5fTElNSVR9IGNoYXJhY3RlcnMuIFRoaXMgaXMgZGlzY291cmFnZWQsIGFzIGxhcmdlIGlubGluZSBwbGFjZWhvbGRlcnMgYCArIGBkaXJlY3RseSBpbmNyZWFzZSB0aGUgYnVuZGxlIHNpemUgb2YgQW5ndWxhciBhbmQgaHVydCBwYWdlIGxvYWQgcGVyZm9ybWFuY2UuIEZvciBiZXR0ZXIgbG9hZGluZyBwZXJmb3JtYW5jZSwgYCArIGBnZW5lcmF0ZSBhIHNtYWxsZXIgZGF0YSBVUkwgcGxhY2Vob2xkZXIuYCkpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gYXNzZXJ0Tm90QmxvYlVybChkaXIpIHtcbiAgY29uc3QgbmdTcmMgPSBkaXIubmdTcmMudHJpbSgpO1xuICBpZiAobmdTcmMuc3RhcnRzV2l0aCgnYmxvYjonKSkge1xuICAgIHRocm93IG5ldyBfUnVudGltZUVycm9yKDI5NTIsIGAke2ltZ0RpcmVjdGl2ZURldGFpbHMoZGlyLm5nU3JjKX0gXFxgbmdTcmNcXGAgd2FzIHNldCB0byBhIGJsb2IgVVJMICgke25nU3JjfSkuIGAgKyBgQmxvYiBVUkxzIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBOZ09wdGltaXplZEltYWdlIGRpcmVjdGl2ZS4gYCArIGBUbyBmaXggdGhpcywgZGlzYWJsZSB0aGUgTmdPcHRpbWl6ZWRJbWFnZSBkaXJlY3RpdmUgZm9yIHRoaXMgZWxlbWVudCBgICsgYGJ5IHJlbW92aW5nIFxcYG5nU3JjXFxgIGFuZCB1c2luZyBhIHJlZ3VsYXIgXFxgc3JjXFxgIGF0dHJpYnV0ZSBpbnN0ZWFkLmApO1xuICB9XG59XG5mdW5jdGlvbiBhc3NlcnROb25FbXB0eUlucHV0KGRpciwgbmFtZSwgdmFsdWUpIHtcbiAgY29uc3QgaXNTdHJpbmcgPSB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnO1xuICBjb25zdCBpc0VtcHR5U3RyaW5nID0gaXNTdHJpbmcgJiYgdmFsdWUudHJpbSgpID09PSAnJztcbiAgaWYgKCFpc1N0cmluZyB8fCBpc0VtcHR5U3RyaW5nKSB7XG4gICAgdGhyb3cgbmV3IF9SdW50aW1lRXJyb3IoMjk1MiwgYCR7aW1nRGlyZWN0aXZlRGV0YWlscyhkaXIubmdTcmMpfSBcXGAke25hbWV9XFxgIGhhcyBhbiBpbnZhbGlkIHZhbHVlIGAgKyBgKFxcYCR7dmFsdWV9XFxgKS4gVG8gZml4IHRoaXMsIGNoYW5nZSB0aGUgdmFsdWUgdG8gYSBub24tZW1wdHkgc3RyaW5nLmApO1xuICB9XG59XG5mdW5jdGlvbiBhc3NlcnRWYWxpZE5nU3Jjc2V0KGRpciwgdmFsdWUpIHtcbiAgaWYgKHZhbHVlID09IG51bGwpIHJldHVybjtcbiAgYXNzZXJ0Tm9uRW1wdHlJbnB1dChkaXIsICduZ1NyY3NldCcsIHZhbHVlKTtcbiAgY29uc3Qgc3RyaW5nVmFsID0gdmFsdWU7XG4gIGNvbnN0IGlzVmFsaWRXaWR0aERlc2NyaXB0b3IgPSBWQUxJRF9XSURUSF9ERVNDUklQVE9SX1NSQ1NFVC50ZXN0KHN0cmluZ1ZhbCk7XG4gIGNvbnN0IGlzVmFsaWREZW5zaXR5RGVzY3JpcHRvciA9IFZBTElEX0RFTlNJVFlfREVTQ1JJUFRPUl9TUkNTRVQudGVzdChzdHJpbmdWYWwpO1xuICBpZiAoaXNWYWxpZERlbnNpdHlEZXNjcmlwdG9yKSB7XG4gICAgYXNzZXJ0VW5kZXJEZW5zaXR5Q2FwKGRpciwgc3RyaW5nVmFsKTtcbiAgfVxuICBjb25zdCBpc1ZhbGlkU3Jjc2V0ID0gaXNWYWxpZFdpZHRoRGVzY3JpcHRvciB8fCBpc1ZhbGlkRGVuc2l0eURlc2NyaXB0b3I7XG4gIGlmICghaXNWYWxpZFNyY3NldCkge1xuICAgIHRocm93IG5ldyBfUnVudGltZUVycm9yKDI5NTIsIGAke2ltZ0RpcmVjdGl2ZURldGFpbHMoZGlyLm5nU3JjKX0gXFxgbmdTcmNzZXRcXGAgaGFzIGFuIGludmFsaWQgdmFsdWUgKFxcYCR7dmFsdWV9XFxgKS4gYCArIGBUbyBmaXggdGhpcywgc3VwcGx5IFxcYG5nU3Jjc2V0XFxgIHVzaW5nIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2Ygb25lIG9yIG1vcmUgd2lkdGggYCArIGBkZXNjcmlwdG9ycyAoZS5nLiBcIjEwMHcsIDIwMHdcIikgb3IgZGVuc2l0eSBkZXNjcmlwdG9ycyAoZS5nLiBcIjF4LCAyeFwiKS5gKTtcbiAgfVxufVxuZnVuY3Rpb24gYXNzZXJ0VW5kZXJEZW5zaXR5Q2FwKGRpciwgdmFsdWUpIHtcbiAgY29uc3QgdW5kZXJEZW5zaXR5Q2FwID0gdmFsdWUuc3BsaXQoJywnKS5ldmVyeShudW0gPT4gbnVtID09PSAnJyB8fCBwYXJzZUZsb2F0KG51bSkgPD0gQUJTT0xVVEVfU1JDU0VUX0RFTlNJVFlfQ0FQKTtcbiAgaWYgKCF1bmRlckRlbnNpdHlDYXApIHtcbiAgICB0aHJvdyBuZXcgX1J1bnRpbWVFcnJvcigyOTUyLCBgJHtpbWdEaXJlY3RpdmVEZXRhaWxzKGRpci5uZ1NyYyl9IHRoZSBcXGBuZ1NyY3NldFxcYCBjb250YWlucyBhbiB1bnN1cHBvcnRlZCBpbWFnZSBkZW5zaXR5OmAgKyBgXFxgJHt2YWx1ZX1cXGAuIE5nT3B0aW1pemVkSW1hZ2UgZ2VuZXJhbGx5IHJlY29tbWVuZHMgYSBtYXggaW1hZ2UgZGVuc2l0eSBvZiBgICsgYCR7UkVDT01NRU5ERURfU1JDU0VUX0RFTlNJVFlfQ0FQfXggYnV0IHN1cHBvcnRzIGltYWdlIGRlbnNpdGllcyB1cCB0byBgICsgYCR7QUJTT0xVVEVfU1JDU0VUX0RFTlNJVFlfQ0FQfXguIFRoZSBodW1hbiBleWUgY2Fubm90IGRpc3Rpbmd1aXNoIGJldHdlZW4gaW1hZ2UgZGVuc2l0aWVzIGAgKyBgZ3JlYXRlciB0aGFuICR7UkVDT01NRU5ERURfU1JDU0VUX0RFTlNJVFlfQ0FQfXggLSB3aGljaCBtYWtlcyB0aGVtIHVubmVjZXNzYXJ5IGZvciBgICsgYG1vc3QgdXNlIGNhc2VzLiBJbWFnZXMgdGhhdCB3aWxsIGJlIHBpbmNoLXpvb21lZCBhcmUgdHlwaWNhbGx5IHRoZSBwcmltYXJ5IHVzZSBjYXNlIGZvciBgICsgYCR7QUJTT0xVVEVfU1JDU0VUX0RFTlNJVFlfQ0FQfXggaW1hZ2VzLiBQbGVhc2UgcmVtb3ZlIHRoZSBoaWdoIGRlbnNpdHkgZGVzY3JpcHRvciBhbmQgdHJ5IGFnYWluLmApO1xuICB9XG59XG5mdW5jdGlvbiBwb3N0SW5pdElucHV0Q2hhbmdlRXJyb3IoZGlyLCBpbnB1dE5hbWUpIHtcbiAgbGV0IHJlYXNvbjtcbiAgaWYgKGlucHV0TmFtZSA9PT0gJ3dpZHRoJyB8fCBpbnB1dE5hbWUgPT09ICdoZWlnaHQnKSB7XG4gICAgcmVhc29uID0gYENoYW5naW5nIFxcYCR7aW5wdXROYW1lfVxcYCBtYXkgcmVzdWx0IGluIGRpZmZlcmVudCBhdHRyaWJ1dGUgdmFsdWUgYCArIGBhcHBsaWVkIHRvIHRoZSB1bmRlcmx5aW5nIGltYWdlIGVsZW1lbnQgYW5kIGNhdXNlIGxheW91dCBzaGlmdHMgb24gYSBwYWdlLmA7XG4gIH0gZWxzZSB7XG4gICAgcmVhc29uID0gYENoYW5naW5nIHRoZSBcXGAke2lucHV0TmFtZX1cXGAgd291bGQgaGF2ZSBubyBlZmZlY3Qgb24gdGhlIHVuZGVybHlpbmcgYCArIGBpbWFnZSBlbGVtZW50LCBiZWNhdXNlIHRoZSByZXNvdXJjZSBsb2FkaW5nIGhhcyBhbHJlYWR5IG9jY3VycmVkLmA7XG4gIH1cbiAgcmV0dXJuIG5ldyBfUnVudGltZUVycm9yKDI5NTMsIGAke2ltZ0RpcmVjdGl2ZURldGFpbHMoZGlyLm5nU3JjKX0gXFxgJHtpbnB1dE5hbWV9XFxgIHdhcyB1cGRhdGVkIGFmdGVyIGluaXRpYWxpemF0aW9uLiBgICsgYFRoZSBOZ09wdGltaXplZEltYWdlIGRpcmVjdGl2ZSB3aWxsIG5vdCByZWFjdCB0byB0aGlzIGlucHV0IGNoYW5nZS4gJHtyZWFzb259IGAgKyBgVG8gZml4IHRoaXMsIGVpdGhlciBzd2l0Y2ggXFxgJHtpbnB1dE5hbWV9XFxgIHRvIGEgc3RhdGljIHZhbHVlIGAgKyBgb3Igd3JhcCB0aGUgaW1hZ2UgZWxlbWVudCBpbiBhbiBAaWYgdGhhdCBpcyBnYXRlZCBvbiB0aGUgbmVjZXNzYXJ5IHZhbHVlLmApO1xufVxuZnVuY3Rpb24gYXNzZXJ0Tm9Qb3N0SW5pdElucHV0Q2hhbmdlKGRpciwgY2hhbmdlcywgaW5wdXRzKSB7XG4gIGlucHV0cy5mb3JFYWNoKGlucHV0ID0+IHtcbiAgICBjb25zdCBpc1VwZGF0ZWQgPSBjaGFuZ2VzLmhhc093blByb3BlcnR5KGlucHV0KTtcbiAgICBpZiAoaXNVcGRhdGVkICYmICFjaGFuZ2VzW2lucHV0XS5pc0ZpcnN0Q2hhbmdlKCkpIHtcbiAgICAgIGlmIChpbnB1dCA9PT0gJ25nU3JjJykge1xuICAgICAgICBkaXIgPSB7XG4gICAgICAgICAgbmdTcmM6IGNoYW5nZXNbaW5wdXRdLnByZXZpb3VzVmFsdWVcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHRocm93IHBvc3RJbml0SW5wdXRDaGFuZ2VFcnJvcihkaXIsIGlucHV0KTtcbiAgICB9XG4gIH0pO1xufVxuZnVuY3Rpb24gYXNzZXJ0R3JlYXRlclRoYW5aZXJvKGRpciwgaW5wdXRWYWx1ZSwgaW5wdXROYW1lKSB7XG4gIGNvbnN0IHZhbGlkTnVtYmVyID0gdHlwZW9mIGlucHV0VmFsdWUgPT09ICdudW1iZXInICYmIGlucHV0VmFsdWUgPiAwO1xuICBjb25zdCB2YWxpZFN0cmluZyA9IHR5cGVvZiBpbnB1dFZhbHVlID09PSAnc3RyaW5nJyAmJiAvXlxcZCskLy50ZXN0KGlucHV0VmFsdWUudHJpbSgpKSAmJiBwYXJzZUludChpbnB1dFZhbHVlKSA+IDA7XG4gIGlmICghdmFsaWROdW1iZXIgJiYgIXZhbGlkU3RyaW5nKSB7XG4gICAgdGhyb3cgbmV3IF9SdW50aW1lRXJyb3IoMjk1MiwgYCR7aW1nRGlyZWN0aXZlRGV0YWlscyhkaXIubmdTcmMpfSBcXGAke2lucHV0TmFtZX1cXGAgaGFzIGFuIGludmFsaWQgdmFsdWUuIGAgKyBgVG8gZml4IHRoaXMsIHByb3ZpZGUgXFxgJHtpbnB1dE5hbWV9XFxgIGFzIGEgbnVtYmVyIGdyZWF0ZXIgdGhhbiAwLmApO1xuICB9XG59XG5mdW5jdGlvbiBhc3NlcnROb0ltYWdlRGlzdG9ydGlvbihkaXIsIGltZywgcmVuZGVyZXIsIGRlc3Ryb3lSZWYpIHtcbiAgY29uc3QgY2FsbGJhY2sgPSAoKSA9PiB7XG4gICAgcmVtb3ZlTG9hZExpc3RlbmVyRm4oKTtcbiAgICByZW1vdmVFcnJvckxpc3RlbmVyRm4oKTtcbiAgICBjb25zdCBjb21wdXRlZFN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoaW1nKTtcbiAgICBsZXQgcmVuZGVyZWRXaWR0aCA9IHBhcnNlRmxvYXQoY29tcHV0ZWRTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKCd3aWR0aCcpKTtcbiAgICBsZXQgcmVuZGVyZWRIZWlnaHQgPSBwYXJzZUZsb2F0KGNvbXB1dGVkU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgnaGVpZ2h0JykpO1xuICAgIGNvbnN0IGJveFNpemluZyA9IGNvbXB1dGVkU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgnYm94LXNpemluZycpO1xuICAgIGlmIChib3hTaXppbmcgPT09ICdib3JkZXItYm94Jykge1xuICAgICAgY29uc3QgcGFkZGluZ1RvcCA9IGNvbXB1dGVkU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgncGFkZGluZy10b3AnKTtcbiAgICAgIGNvbnN0IHBhZGRpbmdSaWdodCA9IGNvbXB1dGVkU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgncGFkZGluZy1yaWdodCcpO1xuICAgICAgY29uc3QgcGFkZGluZ0JvdHRvbSA9IGNvbXB1dGVkU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgncGFkZGluZy1ib3R0b20nKTtcbiAgICAgIGNvbnN0IHBhZGRpbmdMZWZ0ID0gY29tcHV0ZWRTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKCdwYWRkaW5nLWxlZnQnKTtcbiAgICAgIHJlbmRlcmVkV2lkdGggLT0gcGFyc2VGbG9hdChwYWRkaW5nUmlnaHQpICsgcGFyc2VGbG9hdChwYWRkaW5nTGVmdCk7XG4gICAgICByZW5kZXJlZEhlaWdodCAtPSBwYXJzZUZsb2F0KHBhZGRpbmdUb3ApICsgcGFyc2VGbG9hdChwYWRkaW5nQm90dG9tKTtcbiAgICB9XG4gICAgY29uc3QgcmVuZGVyZWRBc3BlY3RSYXRpbyA9IHJlbmRlcmVkV2lkdGggLyByZW5kZXJlZEhlaWdodDtcbiAgICBjb25zdCBub25aZXJvUmVuZGVyZWREaW1lbnNpb25zID0gcmVuZGVyZWRXaWR0aCAhPT0gMCAmJiByZW5kZXJlZEhlaWdodCAhPT0gMDtcbiAgICBjb25zdCBpbnRyaW5zaWNXaWR0aCA9IGltZy5uYXR1cmFsV2lkdGg7XG4gICAgY29uc3QgaW50cmluc2ljSGVpZ2h0ID0gaW1nLm5hdHVyYWxIZWlnaHQ7XG4gICAgY29uc3QgaW50cmluc2ljQXNwZWN0UmF0aW8gPSBpbnRyaW5zaWNXaWR0aCAvIGludHJpbnNpY0hlaWdodDtcbiAgICBjb25zdCBzdXBwbGllZFdpZHRoID0gZGlyLndpZHRoO1xuICAgIGNvbnN0IHN1cHBsaWVkSGVpZ2h0ID0gZGlyLmhlaWdodDtcbiAgICBjb25zdCBzdXBwbGllZEFzcGVjdFJhdGlvID0gc3VwcGxpZWRXaWR0aCAvIHN1cHBsaWVkSGVpZ2h0O1xuICAgIGNvbnN0IGluYWNjdXJhdGVEaW1lbnNpb25zID0gTWF0aC5hYnMoc3VwcGxpZWRBc3BlY3RSYXRpbyAtIGludHJpbnNpY0FzcGVjdFJhdGlvKSA+IEFTUEVDVF9SQVRJT19UT0xFUkFOQ0U7XG4gICAgY29uc3Qgc3R5bGluZ0Rpc3RvcnRpb24gPSBub25aZXJvUmVuZGVyZWREaW1lbnNpb25zICYmIE1hdGguYWJzKGludHJpbnNpY0FzcGVjdFJhdGlvIC0gcmVuZGVyZWRBc3BlY3RSYXRpbykgPiBBU1BFQ1RfUkFUSU9fVE9MRVJBTkNFO1xuICAgIGlmIChpbmFjY3VyYXRlRGltZW5zaW9ucykge1xuICAgICAgY29uc29sZS53YXJuKF9mb3JtYXRSdW50aW1lRXJyb3IoMjk1MiwgYCR7aW1nRGlyZWN0aXZlRGV0YWlscyhkaXIubmdTcmMpfSB0aGUgYXNwZWN0IHJhdGlvIG9mIHRoZSBpbWFnZSBkb2VzIG5vdCBtYXRjaCBgICsgYHRoZSBhc3BlY3QgcmF0aW8gaW5kaWNhdGVkIGJ5IHRoZSB3aWR0aCBhbmQgaGVpZ2h0IGF0dHJpYnV0ZXMuIGAgKyBgXFxuSW50cmluc2ljIGltYWdlIHNpemU6ICR7aW50cmluc2ljV2lkdGh9dyB4ICR7aW50cmluc2ljSGVpZ2h0fWggYCArIGAoYXNwZWN0LXJhdGlvOiAke3JvdW5kKGludHJpbnNpY0FzcGVjdFJhdGlvKX0pLiBcXG5TdXBwbGllZCB3aWR0aCBhbmQgaGVpZ2h0IGF0dHJpYnV0ZXM6IGAgKyBgJHtzdXBwbGllZFdpZHRofXcgeCAke3N1cHBsaWVkSGVpZ2h0fWggKGFzcGVjdC1yYXRpbzogJHtyb3VuZChzdXBwbGllZEFzcGVjdFJhdGlvKX0pLiBgICsgYFxcblRvIGZpeCB0aGlzLCB1cGRhdGUgdGhlIHdpZHRoIGFuZCBoZWlnaHQgYXR0cmlidXRlcy5gKSk7XG4gICAgfSBlbHNlIGlmIChzdHlsaW5nRGlzdG9ydGlvbikge1xuICAgICAgY29uc29sZS53YXJuKF9mb3JtYXRSdW50aW1lRXJyb3IoMjk1MiwgYCR7aW1nRGlyZWN0aXZlRGV0YWlscyhkaXIubmdTcmMpfSB0aGUgYXNwZWN0IHJhdGlvIG9mIHRoZSByZW5kZXJlZCBpbWFnZSBgICsgYGRvZXMgbm90IG1hdGNoIHRoZSBpbWFnZSdzIGludHJpbnNpYyBhc3BlY3QgcmF0aW8uIGAgKyBgXFxuSW50cmluc2ljIGltYWdlIHNpemU6ICR7aW50cmluc2ljV2lkdGh9dyB4ICR7aW50cmluc2ljSGVpZ2h0fWggYCArIGAoYXNwZWN0LXJhdGlvOiAke3JvdW5kKGludHJpbnNpY0FzcGVjdFJhdGlvKX0pLiBcXG5SZW5kZXJlZCBpbWFnZSBzaXplOiBgICsgYCR7cmVuZGVyZWRXaWR0aH13IHggJHtyZW5kZXJlZEhlaWdodH1oIChhc3BlY3QtcmF0aW86IGAgKyBgJHtyb3VuZChyZW5kZXJlZEFzcGVjdFJhdGlvKX0pLiBcXG5UaGlzIGlzc3VlIGNhbiBvY2N1ciBpZiBcIndpZHRoXCIgYW5kIFwiaGVpZ2h0XCIgYCArIGBhdHRyaWJ1dGVzIGFyZSBhZGRlZCB0byBhbiBpbWFnZSB3aXRob3V0IHVwZGF0aW5nIHRoZSBjb3JyZXNwb25kaW5nIGAgKyBgaW1hZ2Ugc3R5bGluZy4gVG8gZml4IHRoaXMsIGFkanVzdCBpbWFnZSBzdHlsaW5nLiBJbiBtb3N0IGNhc2VzLCBgICsgYGFkZGluZyBcImhlaWdodDogYXV0b1wiIG9yIFwid2lkdGg6IGF1dG9cIiB0byB0aGUgaW1hZ2Ugc3R5bGluZyB3aWxsIGZpeCBgICsgYHRoaXMgaXNzdWUuYCkpO1xuICAgIH0gZWxzZSBpZiAoIWRpci5uZ1NyY3NldCAmJiBub25aZXJvUmVuZGVyZWREaW1lbnNpb25zKSB7XG4gICAgICBjb25zdCByZWNvbW1lbmRlZFdpZHRoID0gUkVDT01NRU5ERURfU1JDU0VUX0RFTlNJVFlfQ0FQICogcmVuZGVyZWRXaWR0aDtcbiAgICAgIGNvbnN0IHJlY29tbWVuZGVkSGVpZ2h0ID0gUkVDT01NRU5ERURfU1JDU0VUX0RFTlNJVFlfQ0FQICogcmVuZGVyZWRIZWlnaHQ7XG4gICAgICBjb25zdCBvdmVyc2l6ZWRXaWR0aCA9IGludHJpbnNpY1dpZHRoIC0gcmVjb21tZW5kZWRXaWR0aCA+PSBPVkVSU0laRURfSU1BR0VfVE9MRVJBTkNFO1xuICAgICAgY29uc3Qgb3ZlcnNpemVkSGVpZ2h0ID0gaW50cmluc2ljSGVpZ2h0IC0gcmVjb21tZW5kZWRIZWlnaHQgPj0gT1ZFUlNJWkVEX0lNQUdFX1RPTEVSQU5DRTtcbiAgICAgIGlmIChvdmVyc2l6ZWRXaWR0aCB8fCBvdmVyc2l6ZWRIZWlnaHQpIHtcbiAgICAgICAgY29uc29sZS53YXJuKF9mb3JtYXRSdW50aW1lRXJyb3IoMjk2MCwgYCR7aW1nRGlyZWN0aXZlRGV0YWlscyhkaXIubmdTcmMpfSB0aGUgaW50cmluc2ljIGltYWdlIGlzIHNpZ25pZmljYW50bHkgYCArIGBsYXJnZXIgdGhhbiBuZWNlc3NhcnkuIGAgKyBgXFxuUmVuZGVyZWQgaW1hZ2Ugc2l6ZTogJHtyZW5kZXJlZFdpZHRofXcgeCAke3JlbmRlcmVkSGVpZ2h0fWguIGAgKyBgXFxuSW50cmluc2ljIGltYWdlIHNpemU6ICR7aW50cmluc2ljV2lkdGh9dyB4ICR7aW50cmluc2ljSGVpZ2h0fWguIGAgKyBgXFxuUmVjb21tZW5kZWQgaW50cmluc2ljIGltYWdlIHNpemU6ICR7cmVjb21tZW5kZWRXaWR0aH13IHggJHtyZWNvbW1lbmRlZEhlaWdodH1oLiBgICsgYFxcbk5vdGU6IFJlY29tbWVuZGVkIGludHJpbnNpYyBpbWFnZSBzaXplIGlzIGNhbGN1bGF0ZWQgYXNzdW1pbmcgYSBtYXhpbXVtIERQUiBvZiBgICsgYCR7UkVDT01NRU5ERURfU1JDU0VUX0RFTlNJVFlfQ0FQfS4gVG8gaW1wcm92ZSBsb2FkaW5nIHRpbWUsIHJlc2l6ZSB0aGUgaW1hZ2UgYCArIGBvciBjb25zaWRlciB1c2luZyB0aGUgXCJuZ1NyY3NldFwiIGFuZCBcInNpemVzXCIgYXR0cmlidXRlcy5gKSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuICBjb25zdCByZW1vdmVMb2FkTGlzdGVuZXJGbiA9IHJlbmRlcmVyLmxpc3RlbihpbWcsICdsb2FkJywgY2FsbGJhY2spO1xuICBjb25zdCByZW1vdmVFcnJvckxpc3RlbmVyRm4gPSByZW5kZXJlci5saXN0ZW4oaW1nLCAnZXJyb3InLCAoKSA9PiB7XG4gICAgcmVtb3ZlTG9hZExpc3RlbmVyRm4oKTtcbiAgICByZW1vdmVFcnJvckxpc3RlbmVyRm4oKTtcbiAgfSk7XG4gIGRlc3Ryb3lSZWYub25EZXN0cm95KCgpID0+IHtcbiAgICByZW1vdmVMb2FkTGlzdGVuZXJGbigpO1xuICAgIHJlbW92ZUVycm9yTGlzdGVuZXJGbigpO1xuICB9KTtcbiAgY2FsbE9uTG9hZElmSW1hZ2VJc0xvYWRlZChpbWcsIGNhbGxiYWNrKTtcbn1cbmZ1bmN0aW9uIGFzc2VydE5vbkVtcHR5V2lkdGhBbmRIZWlnaHQoZGlyKSB7XG4gIGxldCBtaXNzaW5nQXR0cmlidXRlcyA9IFtdO1xuICBpZiAoZGlyLndpZHRoID09PSB1bmRlZmluZWQpIG1pc3NpbmdBdHRyaWJ1dGVzLnB1c2goJ3dpZHRoJyk7XG4gIGlmIChkaXIuaGVpZ2h0ID09PSB1bmRlZmluZWQpIG1pc3NpbmdBdHRyaWJ1dGVzLnB1c2goJ2hlaWdodCcpO1xuICBpZiAobWlzc2luZ0F0dHJpYnV0ZXMubGVuZ3RoID4gMCkge1xuICAgIHRocm93IG5ldyBfUnVudGltZUVycm9yKDI5NTQsIGAke2ltZ0RpcmVjdGl2ZURldGFpbHMoZGlyLm5nU3JjKX0gdGhlc2UgcmVxdWlyZWQgYXR0cmlidXRlcyBgICsgYGFyZSBtaXNzaW5nOiAke21pc3NpbmdBdHRyaWJ1dGVzLm1hcChhdHRyID0+IGBcIiR7YXR0cn1cImApLmpvaW4oJywgJyl9LiBgICsgYEluY2x1ZGluZyBcIndpZHRoXCIgYW5kIFwiaGVpZ2h0XCIgYXR0cmlidXRlcyB3aWxsIHByZXZlbnQgaW1hZ2UtcmVsYXRlZCBsYXlvdXQgc2hpZnRzLiBgICsgYFRvIGZpeCB0aGlzLCBpbmNsdWRlIFwid2lkdGhcIiBhbmQgXCJoZWlnaHRcIiBhdHRyaWJ1dGVzIG9uIHRoZSBpbWFnZSB0YWcgb3IgdHVybiBvbiBgICsgYFwiZmlsbFwiIG1vZGUgd2l0aCB0aGUgXFxgZmlsbFxcYCBhdHRyaWJ1dGUuYCk7XG4gIH1cbn1cbmZ1bmN0aW9uIGFzc2VydEVtcHR5V2lkdGhBbmRIZWlnaHQoZGlyKSB7XG4gIGlmIChkaXIud2lkdGggfHwgZGlyLmhlaWdodCkge1xuICAgIHRocm93IG5ldyBfUnVudGltZUVycm9yKDI5NTIsIGAke2ltZ0RpcmVjdGl2ZURldGFpbHMoZGlyLm5nU3JjKX0gdGhlIGF0dHJpYnV0ZXMgXFxgaGVpZ2h0XFxgIGFuZC9vciBcXGB3aWR0aFxcYCBhcmUgcHJlc2VudCBgICsgYGFsb25nIHdpdGggdGhlIFxcYGZpbGxcXGAgYXR0cmlidXRlLiBCZWNhdXNlIFxcYGZpbGxcXGAgbW9kZSBjYXVzZXMgYW4gaW1hZ2UgdG8gZmlsbCBpdHMgY29udGFpbmluZyBgICsgYGVsZW1lbnQsIHRoZSBzaXplIGF0dHJpYnV0ZXMgaGF2ZSBubyBlZmZlY3QgYW5kIHNob3VsZCBiZSByZW1vdmVkLmApO1xuICB9XG59XG5mdW5jdGlvbiBhc3NlcnROb25aZXJvUmVuZGVyZWRIZWlnaHQoZGlyLCBpbWcsIHJlbmRlcmVyLCBkZXN0cm95UmVmKSB7XG4gIGNvbnN0IGNhbGxiYWNrID0gKCkgPT4ge1xuICAgIHJlbW92ZUxvYWRMaXN0ZW5lckZuKCk7XG4gICAgcmVtb3ZlRXJyb3JMaXN0ZW5lckZuKCk7XG4gICAgY29uc3QgcmVuZGVyZWRIZWlnaHQgPSBpbWcuY2xpZW50SGVpZ2h0O1xuICAgIGlmIChkaXIuZmlsbCAmJiByZW5kZXJlZEhlaWdodCA9PT0gMCkge1xuICAgICAgY29uc29sZS53YXJuKF9mb3JtYXRSdW50aW1lRXJyb3IoMjk1MiwgYCR7aW1nRGlyZWN0aXZlRGV0YWlscyhkaXIubmdTcmMpfSB0aGUgaGVpZ2h0IG9mIHRoZSBmaWxsLW1vZGUgaW1hZ2UgaXMgemVyby4gYCArIGBUaGlzIGlzIGxpa2VseSBiZWNhdXNlIHRoZSBjb250YWluaW5nIGVsZW1lbnQgZG9lcyBub3QgaGF2ZSB0aGUgQ1NTICdwb3NpdGlvbicgYCArIGBwcm9wZXJ0eSBzZXQgdG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6IFwicmVsYXRpdmVcIiwgXCJmaXhlZFwiLCBvciBcImFic29sdXRlXCIuIGAgKyBgVG8gZml4IHRoaXMgcHJvYmxlbSwgbWFrZSBzdXJlIHRoZSBjb250YWluZXIgZWxlbWVudCBoYXMgdGhlIENTUyAncG9zaXRpb24nIGAgKyBgcHJvcGVydHkgZGVmaW5lZCBhbmQgdGhlIGhlaWdodCBvZiB0aGUgZWxlbWVudCBpcyBub3QgemVyby5gKSk7XG4gICAgfVxuICB9O1xuICBjb25zdCByZW1vdmVMb2FkTGlzdGVuZXJGbiA9IHJlbmRlcmVyLmxpc3RlbihpbWcsICdsb2FkJywgY2FsbGJhY2spO1xuICBjb25zdCByZW1vdmVFcnJvckxpc3RlbmVyRm4gPSByZW5kZXJlci5saXN0ZW4oaW1nLCAnZXJyb3InLCAoKSA9PiB7XG4gICAgcmVtb3ZlTG9hZExpc3RlbmVyRm4oKTtcbiAgICByZW1vdmVFcnJvckxpc3RlbmVyRm4oKTtcbiAgfSk7XG4gIGRlc3Ryb3lSZWYub25EZXN0cm95KCgpID0+IHtcbiAgICByZW1vdmVMb2FkTGlzdGVuZXJGbigpO1xuICAgIHJlbW92ZUVycm9yTGlzdGVuZXJGbigpO1xuICB9KTtcbiAgY2FsbE9uTG9hZElmSW1hZ2VJc0xvYWRlZChpbWcsIGNhbGxiYWNrKTtcbn1cbmZ1bmN0aW9uIGFzc2VydFZhbGlkTG9hZGluZ0lucHV0KGRpcikge1xuICBpZiAoZGlyLmxvYWRpbmcgJiYgZGlyLnByaW9yaXR5KSB7XG4gICAgdGhyb3cgbmV3IF9SdW50aW1lRXJyb3IoMjk1MiwgYCR7aW1nRGlyZWN0aXZlRGV0YWlscyhkaXIubmdTcmMpfSB0aGUgXFxgbG9hZGluZ1xcYCBhdHRyaWJ1dGUgYCArIGB3YXMgdXNlZCBvbiBhbiBpbWFnZSB0aGF0IHdhcyBtYXJrZWQgXCJwcmlvcml0eVwiLiBgICsgYFNldHRpbmcgXFxgbG9hZGluZ1xcYCBvbiBwcmlvcml0eSBpbWFnZXMgaXMgbm90IGFsbG93ZWQgYCArIGBiZWNhdXNlIHRoZXNlIGltYWdlcyB3aWxsIGFsd2F5cyBiZSBlYWdlcmx5IGxvYWRlZC4gYCArIGBUbyBmaXggdGhpcywgcmVtb3ZlIHRoZSDigJxsb2FkaW5n4oCdIGF0dHJpYnV0ZSBmcm9tIHRoZSBwcmlvcml0eSBpbWFnZS5gKTtcbiAgfVxuICBjb25zdCB2YWxpZElucHV0cyA9IFsnYXV0bycsICdlYWdlcicsICdsYXp5J107XG4gIGlmICh0eXBlb2YgZGlyLmxvYWRpbmcgPT09ICdzdHJpbmcnICYmICF2YWxpZElucHV0cy5pbmNsdWRlcyhkaXIubG9hZGluZykpIHtcbiAgICB0aHJvdyBuZXcgX1J1bnRpbWVFcnJvcigyOTUyLCBgJHtpbWdEaXJlY3RpdmVEZXRhaWxzKGRpci5uZ1NyYyl9IHRoZSBcXGBsb2FkaW5nXFxgIGF0dHJpYnV0ZSBgICsgYGhhcyBhbiBpbnZhbGlkIHZhbHVlIChcXGAke2Rpci5sb2FkaW5nfVxcYCkuIGAgKyBgVG8gZml4IHRoaXMsIHByb3ZpZGUgYSB2YWxpZCB2YWx1ZSAoXCJsYXp5XCIsIFwiZWFnZXJcIiwgb3IgXCJhdXRvXCIpLmApO1xuICB9XG59XG5mdW5jdGlvbiBhc3NlcnRWYWxpZERlY29kaW5nSW5wdXQoZGlyKSB7XG4gIGNvbnN0IHZhbGlkSW5wdXRzID0gWydzeW5jJywgJ2FzeW5jJywgJ2F1dG8nXTtcbiAgaWYgKHR5cGVvZiBkaXIuZGVjb2RpbmcgPT09ICdzdHJpbmcnICYmICF2YWxpZElucHV0cy5pbmNsdWRlcyhkaXIuZGVjb2RpbmcpKSB7XG4gICAgdGhyb3cgbmV3IF9SdW50aW1lRXJyb3IoMjk1MiwgYCR7aW1nRGlyZWN0aXZlRGV0YWlscyhkaXIubmdTcmMpfSB0aGUgXFxgZGVjb2RpbmdcXGAgYXR0cmlidXRlIGAgKyBgaGFzIGFuIGludmFsaWQgdmFsdWUgKFxcYCR7ZGlyLmRlY29kaW5nfVxcYCkuIGAgKyBgVG8gZml4IHRoaXMsIHByb3ZpZGUgYSB2YWxpZCB2YWx1ZSAoXCJzeW5jXCIsIFwiYXN5bmNcIiwgb3IgXCJhdXRvXCIpLmApO1xuICB9XG59XG5mdW5jdGlvbiBhc3NlcnROb3RNaXNzaW5nQnVpbHRJbkxvYWRlcihuZ1NyYywgaW1hZ2VMb2FkZXIpIHtcbiAgaWYgKGltYWdlTG9hZGVyID09PSBub29wSW1hZ2VMb2FkZXIpIHtcbiAgICBsZXQgYnVpbHRJbkxvYWRlck5hbWUgPSAnJztcbiAgICBmb3IgKGNvbnN0IGxvYWRlciBvZiBCVUlMVF9JTl9MT0FERVJTKSB7XG4gICAgICBpZiAobG9hZGVyLnRlc3RVcmwobmdTcmMpKSB7XG4gICAgICAgIGJ1aWx0SW5Mb2FkZXJOYW1lID0gbG9hZGVyLm5hbWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoYnVpbHRJbkxvYWRlck5hbWUpIHtcbiAgICAgIGNvbnNvbGUud2FybihfZm9ybWF0UnVudGltZUVycm9yKDI5NjIsIGBOZ09wdGltaXplZEltYWdlOiBJdCBsb29rcyBsaWtlIHlvdXIgaW1hZ2VzIG1heSBiZSBob3N0ZWQgb24gdGhlIGAgKyBgJHtidWlsdEluTG9hZGVyTmFtZX0gQ0ROLCBidXQgeW91ciBhcHAgaXMgbm90IHVzaW5nIEFuZ3VsYXIncyBgICsgYGJ1aWx0LWluIGxvYWRlciBmb3IgdGhhdCBDRE4uIFdlIHJlY29tbWVuZCBzd2l0Y2hpbmcgdG8gdXNlIGAgKyBgdGhlIGJ1aWx0LWluIGJ5IGNhbGxpbmcgXFxgcHJvdmlkZSR7YnVpbHRJbkxvYWRlck5hbWV9TG9hZGVyKClcXGAgYCArIGBpbiB5b3VyIFxcYHByb3ZpZGVyc1xcYCBhbmQgcGFzc2luZyBpdCB5b3VyIGluc3RhbmNlJ3MgYmFzZSBVUkwuIGAgKyBgSWYgeW91IGRvbid0IHdhbnQgdG8gdXNlIHRoZSBidWlsdC1pbiBsb2FkZXIsIGRlZmluZSBhIGN1c3RvbSBgICsgYGxvYWRlciBmdW5jdGlvbiB1c2luZyBJTUFHRV9MT0FERVIgdG8gc2lsZW5jZSB0aGlzIHdhcm5pbmcuYCkpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gYXNzZXJ0Tm9OZ1NyY3NldFdpdGhvdXRMb2FkZXIoZGlyLCBpbWFnZUxvYWRlcikge1xuICBpZiAoZGlyLm5nU3Jjc2V0ICYmIGltYWdlTG9hZGVyID09PSBub29wSW1hZ2VMb2FkZXIpIHtcbiAgICBjb25zb2xlLndhcm4oX2Zvcm1hdFJ1bnRpbWVFcnJvcigyOTYzLCBgJHtpbWdEaXJlY3RpdmVEZXRhaWxzKGRpci5uZ1NyYyl9IHRoZSBcXGBuZ1NyY3NldFxcYCBhdHRyaWJ1dGUgaXMgcHJlc2VudCBidXQgYCArIGBubyBpbWFnZSBsb2FkZXIgaXMgY29uZmlndXJlZCAoaS5lLiB0aGUgZGVmYXVsdCBvbmUgaXMgYmVpbmcgdXNlZCksIGAgKyBgd2hpY2ggd291bGQgcmVzdWx0IGluIHRoZSBzYW1lIGltYWdlIGJlaW5nIHVzZWQgZm9yIGFsbCBjb25maWd1cmVkIHNpemVzLiBgICsgYFRvIGZpeCB0aGlzLCBwcm92aWRlIGEgbG9hZGVyIG9yIHJlbW92ZSB0aGUgXFxgbmdTcmNzZXRcXGAgYXR0cmlidXRlIGZyb20gdGhlIGltYWdlLmApKTtcbiAgfVxufVxuZnVuY3Rpb24gYXNzZXJ0Tm9Mb2FkZXJQYXJhbXNXaXRob3V0TG9hZGVyKGRpciwgaW1hZ2VMb2FkZXIpIHtcbiAgaWYgKGRpci5sb2FkZXJQYXJhbXMgJiYgaW1hZ2VMb2FkZXIgPT09IG5vb3BJbWFnZUxvYWRlcikge1xuICAgIGNvbnNvbGUud2FybihfZm9ybWF0UnVudGltZUVycm9yKDI5NjMsIGAke2ltZ0RpcmVjdGl2ZURldGFpbHMoZGlyLm5nU3JjKX0gdGhlIFxcYGxvYWRlclBhcmFtc1xcYCBhdHRyaWJ1dGUgaXMgcHJlc2VudCBidXQgYCArIGBubyBpbWFnZSBsb2FkZXIgaXMgY29uZmlndXJlZCAoaS5lLiB0aGUgZGVmYXVsdCBvbmUgaXMgYmVpbmcgdXNlZCksIGAgKyBgd2hpY2ggbWVhbnMgdGhhdCB0aGUgbG9hZGVyUGFyYW1zIGRhdGEgd2lsbCBub3QgYmUgY29uc3VtZWQgYW5kIHdpbGwgbm90IGFmZmVjdCB0aGUgVVJMLiBgICsgYFRvIGZpeCB0aGlzLCBwcm92aWRlIGEgY3VzdG9tIGxvYWRlciBvciByZW1vdmUgdGhlIFxcYGxvYWRlclBhcmFtc1xcYCBhdHRyaWJ1dGUgZnJvbSB0aGUgaW1hZ2UuYCkpO1xuICB9XG59XG5hc3luYyBmdW5jdGlvbiBhc3NldFByaW9yaXR5Q291bnRCZWxvd1RocmVzaG9sZChhcHBSZWYpIHtcbiAgaWYgKElNR1NfV0lUSF9QUklPUklUWV9BVFRSX0NPVU5UID09PSAwKSB7XG4gICAgSU1HU19XSVRIX1BSSU9SSVRZX0FUVFJfQ09VTlQrKztcbiAgICBhd2FpdCBhcHBSZWYud2hlblN0YWJsZSgpO1xuICAgIGlmIChJTUdTX1dJVEhfUFJJT1JJVFlfQVRUUl9DT1VOVCA+IFBSSU9SSVRZX0NPVU5UX1RIUkVTSE9MRCkge1xuICAgICAgY29uc29sZS53YXJuKF9mb3JtYXRSdW50aW1lRXJyb3IoMjk2NiwgYE5nT3B0aW1pemVkSW1hZ2U6IFRoZSBcInByaW9yaXR5XCIgYXR0cmlidXRlIGlzIHNldCB0byB0cnVlIG1vcmUgdGhhbiAke1BSSU9SSVRZX0NPVU5UX1RIUkVTSE9MRH0gdGltZXMgKCR7SU1HU19XSVRIX1BSSU9SSVRZX0FUVFJfQ09VTlR9IHRpbWVzKS4gYCArIGBNYXJraW5nIHRvbyBtYW55IGltYWdlcyBhcyBcImhpZ2hcIiBwcmlvcml0eSBjYW4gaHVydCB5b3VyIGFwcGxpY2F0aW9uJ3MgTENQIChodHRwczovL3dlYi5kZXYvbGNwKS4gYCArIGBcIlByaW9yaXR5XCIgc2hvdWxkIG9ubHkgYmUgc2V0IG9uIHRoZSBpbWFnZSBleHBlY3RlZCB0byBiZSB0aGUgcGFnZSdzIExDUCBlbGVtZW50LmApKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgSU1HU19XSVRIX1BSSU9SSVRZX0FUVFJfQ09VTlQrKztcbiAgfVxufVxuZnVuY3Rpb24gYXNzZXJ0UGxhY2Vob2xkZXJEaW1lbnNpb25zKGRpciwgaW1nRWxlbWVudCkge1xuICBjb25zdCBjb21wdXRlZFN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoaW1nRWxlbWVudCk7XG4gIGxldCByZW5kZXJlZFdpZHRoID0gcGFyc2VGbG9hdChjb21wdXRlZFN0eWxlLmdldFByb3BlcnR5VmFsdWUoJ3dpZHRoJykpO1xuICBsZXQgcmVuZGVyZWRIZWlnaHQgPSBwYXJzZUZsb2F0KGNvbXB1dGVkU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgnaGVpZ2h0JykpO1xuICBpZiAocmVuZGVyZWRXaWR0aCA+IFBMQUNFSE9MREVSX0RJTUVOU0lPTl9MSU1JVCB8fCByZW5kZXJlZEhlaWdodCA+IFBMQUNFSE9MREVSX0RJTUVOU0lPTl9MSU1JVCkge1xuICAgIGNvbnNvbGUud2FybihfZm9ybWF0UnVudGltZUVycm9yKDI5NjcsIGAke2ltZ0RpcmVjdGl2ZURldGFpbHMoZGlyLm5nU3JjKX0gaXQgdXNlcyBhIHBsYWNlaG9sZGVyIGltYWdlLCBidXQgYXQgbGVhc3Qgb25lIGAgKyBgb2YgdGhlIGRpbWVuc2lvbnMgYXR0cmlidXRlIChoZWlnaHQgb3Igd2lkdGgpIGV4Y2VlZHMgdGhlIGxpbWl0IG9mICR7UExBQ0VIT0xERVJfRElNRU5TSU9OX0xJTUlUfXB4LiBgICsgYFRvIGZpeCB0aGlzLCB1c2UgYSBzbWFsbGVyIGltYWdlIGFzIGEgcGxhY2Vob2xkZXIuYCkpO1xuICB9XG59XG5mdW5jdGlvbiBjYWxsT25Mb2FkSWZJbWFnZUlzTG9hZGVkKGltZywgY2FsbGJhY2spIHtcbiAgaWYgKGltZy5jb21wbGV0ZSAmJiBpbWcubmF0dXJhbFdpZHRoKSB7XG4gICAgY2FsbGJhY2soKTtcbiAgfVxufVxuZnVuY3Rpb24gcm91bmQoaW5wdXQpIHtcbiAgcmV0dXJuIE51bWJlci5pc0ludGVnZXIoaW5wdXQpID8gaW5wdXQgOiBpbnB1dC50b0ZpeGVkKDIpO1xufVxuZnVuY3Rpb24gdW53cmFwU2FmZVVybCh2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICByZXR1cm4gX3Vud3JhcFNhZmVWYWx1ZSh2YWx1ZSk7XG59XG5mdW5jdGlvbiBib29sZWFuT3JVcmxBdHRyaWJ1dGUodmFsdWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUgIT09ICd0cnVlJyAmJiB2YWx1ZSAhPT0gJ2ZhbHNlJyAmJiB2YWx1ZSAhPT0gJycpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIGJvb2xlYW5BdHRyaWJ1dGUodmFsdWUpO1xufVxuZXhwb3J0IHsgSU1BR0VfTE9BREVSLCBMb2NhdGlvbiwgTG9jYXRpb25TdHJhdGVneSwgTmdPcHRpbWl6ZWRJbWFnZSwgUFJFQ09OTkVDVF9DSEVDS19CTE9DS0xJU1QsIFBsYXRmb3JtTmF2aWdhdGlvbiwgVkVSU0lPTiwgVmlld3BvcnRTY3JvbGxlciwgaXNQbGF0Zm9ybUJyb3dzZXIsIGlzUGxhdGZvcm1TZXJ2ZXIsIHByb3ZpZGVDbG91ZGZsYXJlTG9hZGVyLCBwcm92aWRlQ2xvdWRpbmFyeUxvYWRlciwgcHJvdmlkZUltYWdlS2l0TG9hZGVyLCBwcm92aWRlSW1naXhMb2FkZXIsIHByb3ZpZGVOZXRsaWZ5TG9hZGVyLCByZWdpc3RlckxvY2FsZURhdGEsIE5hdmlnYXRpb25BZGFwdGVyRm9yTG9jYXRpb24gYXMgybVOYXZpZ2F0aW9uQWRhcHRlckZvckxvY2F0aW9uLCBOdWxsVmlld3BvcnRTY3JvbGxlciBhcyDJtU51bGxWaWV3cG9ydFNjcm9sbGVyLCBQTEFURk9STV9CUk9XU0VSX0lEIGFzIMm1UExBVEZPUk1fQlJPV1NFUl9JRCwgUExBVEZPUk1fU0VSVkVSX0lEIGFzIMm1UExBVEZPUk1fU0VSVkVSX0lELCBub3JtYWxpemVRdWVyeVBhcmFtcyBhcyDJtW5vcm1hbGl6ZVF1ZXJ5UGFyYW1zIH07XG4iXSwibWFwcGluZ3MiOiI7eVlBVUEsUUFBUyxDQUFBQSxFQUFjQyxDQUFBLENBQU9DLENBQUEsQ0FBSyxDQUFBQyxjQUFBLEdBQUFDLENBQUEsS0FBQUQsQ0FBQSxpQkFBQUUsQ0FBQSxNQUNqQyxNQUFLLENBQUFKLENBQUEsRUFBQUUsY0FBQSxHQUFBRyxDQUFBLFNBQ0FKLENBQUEsRUFBQUMsY0FBQSxHQUFBRyxDQUFBLFNBQ0RMLENBQUEsQ0FBTU0sUUFBQSxDQUFTLEdBQUcsR0FBQUosY0FBQSxHQUFBRyxDQUFBLFNBQ2JKLENBQUEsQ0FBSU0sVUFBQSxDQUFXLEdBQUcsR0FBQUwsY0FBQSxHQUFBRyxDQUFBLFNBQUlMLENBQUEsQ0FBUUMsQ0FBQSxDQUFJTyxLQUFBLENBQU0sQ0FBQyxJQUFBTixjQUFBLEdBQUFHLENBQUEsU0FBSUwsQ0FBQSxDQUFRQyxDQUFBLElBQUFDLGNBQUEsR0FBQUcsQ0FBQSxTQUV2REosQ0FBQSxDQUFJTSxVQUFBLENBQVcsR0FBRyxHQUFBTCxjQUFBLEdBQUFHLENBQUEsU0FBSUwsQ0FBQSxDQUFRQyxDQUFBLEdBQUFDLGNBQUEsR0FBQUcsQ0FBQSxTQUFNLEdBQUdMLENBQUssSUFBSUMsQ0FBRyxPQUFBQyxjQUFBLEdBQUFHLENBQUEsU0FKekNMLENBQUEsSUFBQUUsY0FBQSxHQUFBRyxDQUFBLFNBREVKLENBTXJCLEdBQ0EsUUFBUyxDQUFBUSxHQUFtQlQs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QUFBLEdBQUFHLENBQUEsU0FBQUgsQ0FBQSxpQkFBQUUsQ0FBQSxRQUNIYSxDQUFBLENBQWNvSCxDQUFBLENBQW9CckksQ0FBQSxDQUFRa0csQ0FBQSxDQUFZRCxLQUFLLEVBQzNEL0YsY0FBQSxHQUFBRSxDQUFBLGNBQ0YsSUFBSyxhQUFBRixjQUFBLEdBQUFHLENBQUEsU0FBQUgsQ0FBQSxpQkFBQUUsQ0FBQSxRQUNIYSxDQUFBLENBQWNvSCxDQUFBLENBQW9CckksQ0FBQSxDQUFRa0csQ0FBQSxDQUFZQyxNQUFNLEVBQzVEakcsY0FBQSxHQUFBRSxDQUFBLGNBQ0YsSUFBSyxXQUFBRixjQUFBLEdBQUFHLENBQUEsU0FBQUgsQ0FBQSxpQkFBQUUsQ0FBQSxRQUNIYSxDQUFBLENBQWNvSCxDQUFBLENBQW9CckksQ0FBQSxDQUFRa0csQ0FBQSxDQUFZRSxJQUFJLEVBQzFEbEcsY0FBQSxHQUFBRSxDQUFBLGNBQ0YsSUFBSyxXQUFBRixjQUFBLEdBQUFHLENBQUEsU0FBQUgsQ0FBQSxpQkFBQUUsQ0FBQSxRQUNIYSxDQUFBLENBQWNvSCxDQUFBLENBQW9CckksQ0FBQSxDQUFRa0csQ0FBQSxDQUFZRyxJQUFJLEVBQzFEbkcsY0FBQSxHQUFBRSxDQUFBLGNBQ0YsSUFBSyxZQUFBRixjQUFBLEdBQUFHLENBQUEsU0FBQUgsQ0FBQSxpQkFBQUUsQ0FBQSxRQUNIYSxDQUFBLENBQWNzSCxDQUFBLENBQW9CdkksQ0FBQSxDQUFRa0csQ0FBQSxDQUFZRCxLQUFLLEVBQzNEL0YsY0FBQSxHQUFBRSxDQUFBLGNBQ0YsSUFBSyxhQUFBRixjQUFBLEdBQUFHLENBQUEsU0FBQUgsQ0FBQSxpQkFBQUUsQ0FBQSxRQUNIYSxDQUFBLENBQWNzSCxDQUFBLENBQW9CdkksQ0FBQSxDQUFRa0csQ0FBQSxDQUFZQyxNQUFNLEVBQzVEakcsY0FBQSxHQUFBRSxDQUFBLGNBQ0YsSUFBSyxXQUFBRixjQUFBLEdBQUFHLENBQUEsU0FBQUgsQ0FBQSxpQkFBQUUsQ0FBQSxRQUNIYSxDQUFBLENBQWNzSCxDQUFBLENBQW9CdkksQ0FB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 \ No newline at end of file diff --git a/frontend/dist-instrumented/chunk-F6OGAIBI.js.map b/frontend/dist-instrumented/chunk-F6OGAIBI.js.map new file mode 100644 index 00000000..3f70e471 --- /dev/null +++ b/frontend/dist-instrumented/chunk-F6OGAIBI.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["node_modules/@angular/common/fesm2022/_location-chunk.mjs","node_modules/@angular/common/fesm2022/_common_module-chunk.mjs","node_modules/@angular/common/fesm2022/common.mjs"],"sourcesContent":["/**\n * @license Angular v21.2.4\n * (c) 2010-2026 Google LLC. https://angular.dev/\n * License: MIT\n */\n\nimport * as i0 from '@angular/core';\nimport { inject, Injectable, InjectionToken, DOCUMENT, Optional, Inject, ɵɵinject as __inject } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { PlatformLocation } from './_platform_location-chunk.mjs';\nfunction joinWithSlash(start, end) {\n if (!start) return end;\n if (!end) return start;\n if (start.endsWith('/')) {\n return end.startsWith('/') ? start + end.slice(1) : start + end;\n }\n return end.startsWith('/') ? start + end : `${start}/${end}`;\n}\nfunction stripTrailingSlash(url) {\n const pathEndIdx = url.search(/#|\\?|$/);\n return url[pathEndIdx - 1] === '/' ? url.slice(0, pathEndIdx - 1) + url.slice(pathEndIdx) : url;\n}\nfunction normalizeQueryParams(params) {\n return params && params[0] !== '?' ? `?${params}` : params;\n}\nlet LocationStrategy = /*#__PURE__*/(() => {\n class LocationStrategy {\n historyGo(relativePosition) {\n throw new Error(ngDevMode ? 'Not implemented' : '');\n }\n static ɵfac = function LocationStrategy_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || LocationStrategy)();\n };\n static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: LocationStrategy,\n factory: () => (() => inject(PathLocationStrategy))(),\n providedIn: 'root'\n });\n }\n return LocationStrategy;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst APP_BASE_HREF = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'appBaseHref' : '');\nlet PathLocationStrategy = /*#__PURE__*/(() => {\n class PathLocationStrategy extends LocationStrategy {\n _platformLocation;\n _baseHref;\n _removeListenerFns = [];\n constructor(_platformLocation, href) {\n super();\n this._platformLocation = _platformLocation;\n this._baseHref = href ?? this._platformLocation.getBaseHrefFromDOM() ?? inject(DOCUMENT).location?.origin ?? '';\n }\n ngOnDestroy() {\n while (this._removeListenerFns.length) {\n this._removeListenerFns.pop()();\n }\n }\n onPopState(fn) {\n this._removeListenerFns.push(this._platformLocation.onPopState(fn), this._platformLocation.onHashChange(fn));\n }\n getBaseHref() {\n return this._baseHref;\n }\n prepareExternalUrl(internal) {\n return joinWithSlash(this._baseHref, internal);\n }\n path(includeHash = false) {\n const pathname = this._platformLocation.pathname + normalizeQueryParams(this._platformLocation.search);\n const hash = this._platformLocation.hash;\n return hash && includeHash ? `${pathname}${hash}` : pathname;\n }\n pushState(state, title, url, queryParams) {\n const externalUrl = this.prepareExternalUrl(url + normalizeQueryParams(queryParams));\n this._platformLocation.pushState(state, title, externalUrl);\n }\n replaceState(state, title, url, queryParams) {\n const externalUrl = this.prepareExternalUrl(url + normalizeQueryParams(queryParams));\n this._platformLocation.replaceState(state, title, externalUrl);\n }\n forward() {\n this._platformLocation.forward();\n }\n back() {\n this._platformLocation.back();\n }\n getState() {\n return this._platformLocation.getState();\n }\n historyGo(relativePosition = 0) {\n this._platformLocation.historyGo?.(relativePosition);\n }\n static ɵfac = function PathLocationStrategy_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || PathLocationStrategy)(i0.ɵɵinject(PlatformLocation), i0.ɵɵinject(APP_BASE_HREF, 8));\n };\n static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: PathLocationStrategy,\n factory: PathLocationStrategy.ɵfac,\n providedIn: 'root'\n });\n }\n return PathLocationStrategy;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet NoTrailingSlashPathLocationStrategy = /*#__PURE__*/(() => {\n class NoTrailingSlashPathLocationStrategy extends PathLocationStrategy {\n prepareExternalUrl(internal) {\n const path = extractUrlPath(internal);\n if (path.endsWith('/') && path.length > 1) {\n internal = path.slice(0, -1) + internal.slice(path.length);\n }\n return super.prepareExternalUrl(internal);\n }\n static ɵfac = /* @__PURE__ */(() => {\n let ɵNoTrailingSlashPathLocationStrategy_BaseFactory;\n return function NoTrailingSlashPathLocationStrategy_Factory(__ngFactoryType__) {\n return (ɵNoTrailingSlashPathLocationStrategy_BaseFactory || (ɵNoTrailingSlashPathLocationStrategy_BaseFactory = i0.ɵɵgetInheritedFactory(NoTrailingSlashPathLocationStrategy)))(__ngFactoryType__ || NoTrailingSlashPathLocationStrategy);\n };\n })();\n static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: NoTrailingSlashPathLocationStrategy,\n factory: NoTrailingSlashPathLocationStrategy.ɵfac,\n providedIn: 'root'\n });\n }\n return NoTrailingSlashPathLocationStrategy;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet TrailingSlashPathLocationStrategy = /*#__PURE__*/(() => {\n class TrailingSlashPathLocationStrategy extends PathLocationStrategy {\n prepareExternalUrl(internal) {\n const path = extractUrlPath(internal);\n if (!path.endsWith('/')) {\n internal = path + '/' + internal.slice(path.length);\n }\n return super.prepareExternalUrl(internal);\n }\n static ɵfac = /* @__PURE__ */(() => {\n let ɵTrailingSlashPathLocationStrategy_BaseFactory;\n return function TrailingSlashPathLocationStrategy_Factory(__ngFactoryType__) {\n return (ɵTrailingSlashPathLocationStrategy_BaseFactory || (ɵTrailingSlashPathLocationStrategy_BaseFactory = i0.ɵɵgetInheritedFactory(TrailingSlashPathLocationStrategy)))(__ngFactoryType__ || TrailingSlashPathLocationStrategy);\n };\n })();\n static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: TrailingSlashPathLocationStrategy,\n factory: TrailingSlashPathLocationStrategy.ɵfac,\n providedIn: 'root'\n });\n }\n return TrailingSlashPathLocationStrategy;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nfunction extractUrlPath(url) {\n const questionMarkOrHashIndex = url.search(/[?#]/);\n const pathEnd = questionMarkOrHashIndex > -1 ? questionMarkOrHashIndex : url.length;\n return url.slice(0, pathEnd);\n}\nlet Location = /*#__PURE__*/(() => {\n class Location {\n _subject = new Subject();\n _basePath;\n _locationStrategy;\n _urlChangeListeners = [];\n _urlChangeSubscription = null;\n constructor(locationStrategy) {\n this._locationStrategy = locationStrategy;\n const baseHref = this._locationStrategy.getBaseHref();\n this._basePath = _stripOrigin(stripTrailingSlash(_stripIndexHtml(baseHref)));\n this._locationStrategy.onPopState(ev => {\n this._subject.next({\n 'url': this.path(true),\n 'pop': true,\n 'state': ev.state,\n 'type': ev.type\n });\n });\n }\n ngOnDestroy() {\n this._urlChangeSubscription?.unsubscribe();\n this._urlChangeListeners = [];\n }\n path(includeHash = false) {\n return this.normalize(this._locationStrategy.path(includeHash));\n }\n getState() {\n return this._locationStrategy.getState();\n }\n isCurrentPathEqualTo(path, query = '') {\n return this.path() == this.normalize(path + normalizeQueryParams(query));\n }\n normalize(url) {\n return Location.stripTrailingSlash(_stripBasePath(this._basePath, _stripIndexHtml(url)));\n }\n prepareExternalUrl(url) {\n if (url && url[0] !== '/') {\n url = '/' + url;\n }\n return this._locationStrategy.prepareExternalUrl(url);\n }\n go(path, query = '', state = null) {\n this._locationStrategy.pushState(state, '', path, query);\n this._notifyUrlChangeListeners(this.prepareExternalUrl(path + normalizeQueryParams(query)), state);\n }\n replaceState(path, query = '', state = null) {\n this._locationStrategy.replaceState(state, '', path, query);\n this._notifyUrlChangeListeners(this.prepareExternalUrl(path + normalizeQueryParams(query)), state);\n }\n forward() {\n this._locationStrategy.forward();\n }\n back() {\n this._locationStrategy.back();\n }\n historyGo(relativePosition = 0) {\n this._locationStrategy.historyGo?.(relativePosition);\n }\n onUrlChange(fn) {\n this._urlChangeListeners.push(fn);\n this._urlChangeSubscription ??= this.subscribe(v => {\n this._notifyUrlChangeListeners(v.url, v.state);\n });\n return () => {\n const fnIndex = this._urlChangeListeners.indexOf(fn);\n this._urlChangeListeners.splice(fnIndex, 1);\n if (this._urlChangeListeners.length === 0) {\n this._urlChangeSubscription?.unsubscribe();\n this._urlChangeSubscription = null;\n }\n };\n }\n _notifyUrlChangeListeners(url = '', state) {\n this._urlChangeListeners.forEach(fn => fn(url, state));\n }\n subscribe(onNext, onThrow, onReturn) {\n return this._subject.subscribe({\n next: onNext,\n error: onThrow ?? undefined,\n complete: onReturn ?? undefined\n });\n }\n static normalizeQueryParams = normalizeQueryParams;\n static joinWithSlash = joinWithSlash;\n static stripTrailingSlash = stripTrailingSlash;\n static ɵfac = function Location_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || Location)(i0.ɵɵinject(LocationStrategy));\n };\n static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: Location,\n factory: () => createLocation(),\n providedIn: 'root'\n });\n }\n return Location;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nfunction createLocation() {\n return new Location(__inject(LocationStrategy));\n}\nfunction _stripBasePath(basePath, url) {\n if (!basePath || !url.startsWith(basePath)) {\n return url;\n }\n const strippedUrl = url.substring(basePath.length);\n if (strippedUrl === '' || ['/', ';', '?', '#'].includes(strippedUrl[0])) {\n return strippedUrl;\n }\n return url;\n}\nfunction _stripIndexHtml(url) {\n return url.replace(/\\/index.html$/, '');\n}\nfunction _stripOrigin(baseHref) {\n const isAbsoluteUrl = new RegExp('^(https?:)?//').test(baseHref);\n if (isAbsoluteUrl) {\n const [, pathname] = baseHref.split(/\\/\\/[^\\/]+/);\n return pathname;\n }\n return baseHref;\n}\nexport { APP_BASE_HREF, Location, LocationStrategy, NoTrailingSlashPathLocationStrategy, PathLocationStrategy, TrailingSlashPathLocationStrategy, joinWithSlash, normalizeQueryParams };\n","/**\n * @license Angular v21.2.4\n * (c) 2010-2026 Google LLC. https://angular.dev/\n * License: MIT\n */\n\nimport * as i0 from '@angular/core';\nimport { Injectable, Optional, Inject, ɵfindLocaleData as _findLocaleData, ɵLocaleDataIndex as _LocaleDataIndex, ɵgetLocaleCurrencyCode as _getLocaleCurrencyCode, ɵgetLocalePluralCase as _getLocalePluralCase, ɵRuntimeError as _RuntimeError, ɵformatRuntimeError as _formatRuntimeError, inject, LOCALE_ID, ɵstringify as _stringify, Directive, Input, createNgModule, NgModuleRef, Host, Attribute, RendererStyleFlags2, Injector, isSignal, ɵINTERNAL_APPLICATION_ERROR_HANDLER as _INTERNAL_APPLICATION_ERROR_HANDLER, ɵisPromise as _isPromise, ɵisSubscribable as _isSubscribable, Pipe, untracked, InjectionToken, DEFAULT_CURRENCY_CODE, NgModule } from '@angular/core';\nimport { LocationStrategy, joinWithSlash, normalizeQueryParams, APP_BASE_HREF } from './_location-chunk.mjs';\nimport { PlatformLocation } from './_platform_location-chunk.mjs';\nlet HashLocationStrategy = /*#__PURE__*/(() => {\n class HashLocationStrategy extends LocationStrategy {\n _platformLocation;\n _baseHref = '';\n _removeListenerFns = [];\n constructor(_platformLocation, _baseHref) {\n super();\n this._platformLocation = _platformLocation;\n if (_baseHref != null) {\n this._baseHref = _baseHref;\n }\n }\n ngOnDestroy() {\n while (this._removeListenerFns.length) {\n this._removeListenerFns.pop()();\n }\n }\n onPopState(fn) {\n this._removeListenerFns.push(this._platformLocation.onPopState(fn), this._platformLocation.onHashChange(fn));\n }\n getBaseHref() {\n return this._baseHref;\n }\n path(includeHash = false) {\n const path = this._platformLocation.hash ?? '#';\n return path.length > 0 ? path.substring(1) : path;\n }\n prepareExternalUrl(internal) {\n const url = joinWithSlash(this._baseHref, internal);\n return url.length > 0 ? '#' + url : url;\n }\n pushState(state, title, path, queryParams) {\n const url = this.prepareExternalUrl(path + normalizeQueryParams(queryParams)) || this._platformLocation.pathname;\n this._platformLocation.pushState(state, title, url);\n }\n replaceState(state, title, path, queryParams) {\n const url = this.prepareExternalUrl(path + normalizeQueryParams(queryParams)) || this._platformLocation.pathname;\n this._platformLocation.replaceState(state, title, url);\n }\n forward() {\n this._platformLocation.forward();\n }\n back() {\n this._platformLocation.back();\n }\n getState() {\n return this._platformLocation.getState();\n }\n historyGo(relativePosition = 0) {\n this._platformLocation.historyGo?.(relativePosition);\n }\n static ɵfac = function HashLocationStrategy_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || HashLocationStrategy)(i0.ɵɵinject(PlatformLocation), i0.ɵɵinject(APP_BASE_HREF, 8));\n };\n static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: HashLocationStrategy,\n factory: HashLocationStrategy.ɵfac\n });\n }\n return HashLocationStrategy;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst CURRENCIES_EN = {\n \"ADP\": [undefined, undefined, 0],\n \"AFN\": [undefined, \"؋\", 0],\n \"ALL\": [undefined, undefined, 0],\n \"AMD\": [undefined, \"֏\", 2],\n \"AOA\": [undefined, \"Kz\"],\n \"ARS\": [undefined, \"$\"],\n \"AUD\": [\"A$\", \"$\"],\n \"AZN\": [undefined, \"₼\"],\n \"BAM\": [undefined, \"KM\"],\n \"BBD\": [undefined, \"$\"],\n \"BDT\": [undefined, \"৳\"],\n \"BHD\": [undefined, undefined, 3],\n \"BIF\": [undefined, undefined, 0],\n \"BMD\": [undefined, \"$\"],\n \"BND\": [undefined, \"$\"],\n \"BOB\": [undefined, \"Bs\"],\n \"BRL\": [\"R$\"],\n \"BSD\": [undefined, \"$\"],\n \"BWP\": [undefined, \"P\"],\n \"BYN\": [undefined, undefined, 2],\n \"BYR\": [undefined, undefined, 0],\n \"BZD\": [undefined, \"$\"],\n \"CAD\": [\"CA$\", \"$\", 2],\n \"CHF\": [undefined, undefined, 2],\n \"CLF\": [undefined, undefined, 4],\n \"CLP\": [undefined, \"$\", 0],\n \"CNY\": [\"CN¥\", \"¥\"],\n \"COP\": [undefined, \"$\", 2],\n \"CRC\": [undefined, \"₡\", 2],\n \"CUC\": [undefined, \"$\"],\n \"CUP\": [undefined, \"$\"],\n \"CZK\": [undefined, \"Kč\", 2],\n \"DJF\": [undefined, undefined, 0],\n \"DKK\": [undefined, \"kr\", 2],\n \"DOP\": [undefined, \"$\"],\n \"EGP\": [undefined, \"E£\"],\n \"ESP\": [undefined, \"₧\", 0],\n \"EUR\": [\"€\"],\n \"FJD\": [undefined, \"$\"],\n \"FKP\": [undefined, \"£\"],\n \"GBP\": [\"£\"],\n \"GEL\": [undefined, \"₾\"],\n \"GHS\": [undefined, \"GH₵\"],\n \"GIP\": [undefined, \"£\"],\n \"GNF\": [undefined, \"FG\", 0],\n \"GTQ\": [undefined, \"Q\"],\n \"GYD\": [undefined, \"$\", 2],\n \"HKD\": [\"HK$\", \"$\"],\n \"HNL\": [undefined, \"L\"],\n \"HRK\": [undefined, \"kn\"],\n \"HUF\": [undefined, \"Ft\", 2],\n \"IDR\": [undefined, \"Rp\", 2],\n \"ILS\": [\"₪\"],\n \"INR\": [\"₹\"],\n \"IQD\": [undefined, undefined, 0],\n \"IRR\": [undefined, undefined, 0],\n \"ISK\": [undefined, \"kr\", 0],\n \"ITL\": [undefined, undefined, 0],\n \"JMD\": [undefined, \"$\"],\n \"JOD\": [undefined, undefined, 3],\n \"JPY\": [\"¥\", undefined, 0],\n \"KGS\": [undefined, \"⃀\"],\n \"KHR\": [undefined, \"៛\"],\n \"KMF\": [undefined, \"CF\", 0],\n \"KPW\": [undefined, \"₩\", 0],\n \"KRW\": [\"₩\", undefined, 0],\n \"KWD\": [undefined, undefined, 3],\n \"KYD\": [undefined, \"$\"],\n \"KZT\": [undefined, \"₸\"],\n \"LAK\": [undefined, \"₭\", 0],\n \"LBP\": [undefined, \"L£\", 0],\n \"LKR\": [undefined, \"Rs\"],\n \"LRD\": [undefined, \"$\"],\n \"LTL\": [undefined, \"Lt\"],\n \"LUF\": [undefined, undefined, 0],\n \"LVL\": [undefined, \"Ls\"],\n \"LYD\": [undefined, undefined, 3],\n \"MGA\": [undefined, \"Ar\", 0],\n \"MGF\": [undefined, undefined, 0],\n \"MMK\": [undefined, \"K\", 0],\n \"MNT\": [undefined, \"₮\", 2],\n \"MRO\": [undefined, undefined, 0],\n \"MUR\": [undefined, \"Rs\", 2],\n \"MXN\": [\"MX$\", \"$\"],\n \"MYR\": [undefined, \"RM\"],\n \"NAD\": [undefined, \"$\"],\n \"NGN\": [undefined, \"₦\"],\n \"NIO\": [undefined, \"C$\"],\n \"NOK\": [undefined, \"kr\", 2],\n \"NPR\": [undefined, \"Rs\"],\n \"NZD\": [\"NZ$\", \"$\"],\n \"OMR\": [undefined, undefined, 3],\n \"PHP\": [\"₱\"],\n \"PKR\": [undefined, \"Rs\", 2],\n \"PLN\": [undefined, \"zł\"],\n \"PYG\": [undefined, \"₲\", 0],\n \"RON\": [undefined, \"lei\"],\n \"RSD\": [undefined, undefined, 0],\n \"RUB\": [undefined, \"₽\"],\n \"RWF\": [undefined, \"RF\", 0],\n \"SBD\": [undefined, \"$\"],\n \"SEK\": [undefined, \"kr\", 2],\n \"SGD\": [undefined, \"$\"],\n \"SHP\": [undefined, \"£\"],\n \"SLE\": [undefined, undefined, 2],\n \"SLL\": [undefined, undefined, 0],\n \"SOS\": [undefined, undefined, 0],\n \"SRD\": [undefined, \"$\"],\n \"SSP\": [undefined, \"£\"],\n \"STD\": [undefined, undefined, 0],\n \"STN\": [undefined, \"Db\"],\n \"SYP\": [undefined, \"£\", 0],\n \"THB\": [undefined, \"฿\"],\n \"TMM\": [undefined, undefined, 0],\n \"TND\": [undefined, undefined, 3],\n \"TOP\": [undefined, \"T$\"],\n \"TRL\": [undefined, undefined, 0],\n \"TRY\": [undefined, \"₺\"],\n \"TTD\": [undefined, \"$\"],\n \"TWD\": [\"NT$\", \"$\", 2],\n \"TZS\": [undefined, undefined, 2],\n \"UAH\": [undefined, \"₴\"],\n \"UGX\": [undefined, undefined, 0],\n \"USD\": [\"$\"],\n \"UYI\": [undefined, undefined, 0],\n \"UYU\": [undefined, \"$\"],\n \"UYW\": [undefined, undefined, 4],\n \"UZS\": [undefined, undefined, 2],\n \"VEF\": [undefined, \"Bs\", 2],\n \"VND\": [\"₫\", undefined, 0],\n \"VUV\": [undefined, undefined, 0],\n \"XAF\": [\"FCFA\", undefined, 0],\n \"XCD\": [\"EC$\", \"$\"],\n \"XCG\": [\"Cg.\"],\n \"XOF\": [\"F CFA\", undefined, 0],\n \"XPF\": [\"CFPF\", undefined, 0],\n \"XXX\": [\"¤\"],\n \"YER\": [undefined, undefined, 0],\n \"ZAR\": [undefined, \"R\"],\n \"ZMK\": [undefined, undefined, 0],\n \"ZMW\": [undefined, \"ZK\"],\n \"ZWD\": [undefined, undefined, 0]\n};\nvar NumberFormatStyle = /*#__PURE__*/function (NumberFormatStyle) {\n NumberFormatStyle[NumberFormatStyle[\"Decimal\"] = 0] = \"Decimal\";\n NumberFormatStyle[NumberFormatStyle[\"Percent\"] = 1] = \"Percent\";\n NumberFormatStyle[NumberFormatStyle[\"Currency\"] = 2] = \"Currency\";\n NumberFormatStyle[NumberFormatStyle[\"Scientific\"] = 3] = \"Scientific\";\n return NumberFormatStyle;\n}(NumberFormatStyle || {});\nvar Plural = /*#__PURE__*/function (Plural) {\n Plural[Plural[\"Zero\"] = 0] = \"Zero\";\n Plural[Plural[\"One\"] = 1] = \"One\";\n Plural[Plural[\"Two\"] = 2] = \"Two\";\n Plural[Plural[\"Few\"] = 3] = \"Few\";\n Plural[Plural[\"Many\"] = 4] = \"Many\";\n Plural[Plural[\"Other\"] = 5] = \"Other\";\n return Plural;\n}(Plural || {});\nvar FormStyle = /*#__PURE__*/function (FormStyle) {\n FormStyle[FormStyle[\"Format\"] = 0] = \"Format\";\n FormStyle[FormStyle[\"Standalone\"] = 1] = \"Standalone\";\n return FormStyle;\n}(FormStyle || {});\nvar TranslationWidth = /*#__PURE__*/function (TranslationWidth) {\n TranslationWidth[TranslationWidth[\"Narrow\"] = 0] = \"Narrow\";\n TranslationWidth[TranslationWidth[\"Abbreviated\"] = 1] = \"Abbreviated\";\n TranslationWidth[TranslationWidth[\"Wide\"] = 2] = \"Wide\";\n TranslationWidth[TranslationWidth[\"Short\"] = 3] = \"Short\";\n return TranslationWidth;\n}(TranslationWidth || {});\nvar FormatWidth = /*#__PURE__*/function (FormatWidth) {\n FormatWidth[FormatWidth[\"Short\"] = 0] = \"Short\";\n FormatWidth[FormatWidth[\"Medium\"] = 1] = \"Medium\";\n FormatWidth[FormatWidth[\"Long\"] = 2] = \"Long\";\n FormatWidth[FormatWidth[\"Full\"] = 3] = \"Full\";\n return FormatWidth;\n}(FormatWidth || {});\nconst NumberSymbol = {\n Decimal: 0,\n Group: 1,\n List: 2,\n PercentSign: 3,\n PlusSign: 4,\n MinusSign: 5,\n Exponential: 6,\n SuperscriptingExponent: 7,\n PerMille: 8,\n Infinity: 9,\n NaN: 10,\n TimeSeparator: 11,\n CurrencyDecimal: 12,\n CurrencyGroup: 13\n};\nvar WeekDay = /*#__PURE__*/function (WeekDay) {\n WeekDay[WeekDay[\"Sunday\"] = 0] = \"Sunday\";\n WeekDay[WeekDay[\"Monday\"] = 1] = \"Monday\";\n WeekDay[WeekDay[\"Tuesday\"] = 2] = \"Tuesday\";\n WeekDay[WeekDay[\"Wednesday\"] = 3] = \"Wednesday\";\n WeekDay[WeekDay[\"Thursday\"] = 4] = \"Thursday\";\n WeekDay[WeekDay[\"Friday\"] = 5] = \"Friday\";\n WeekDay[WeekDay[\"Saturday\"] = 6] = \"Saturday\";\n return WeekDay;\n}(WeekDay || {});\nfunction getLocaleId(locale) {\n return _findLocaleData(locale)[_LocaleDataIndex.LocaleId];\n}\nfunction getLocaleDayPeriods(locale, formStyle, width) {\n const data = _findLocaleData(locale);\n const amPmData = [data[_LocaleDataIndex.DayPeriodsFormat], data[_LocaleDataIndex.DayPeriodsStandalone]];\n const amPm = getLastDefinedValue(amPmData, formStyle);\n return getLastDefinedValue(amPm, width);\n}\nfunction getLocaleDayNames(locale, formStyle, width) {\n const data = _findLocaleData(locale);\n const daysData = [data[_LocaleDataIndex.DaysFormat], data[_LocaleDataIndex.DaysStandalone]];\n const days = getLastDefinedValue(daysData, formStyle);\n return getLastDefinedValue(days, width);\n}\nfunction getLocaleMonthNames(locale, formStyle, width) {\n const data = _findLocaleData(locale);\n const monthsData = [data[_LocaleDataIndex.MonthsFormat], data[_LocaleDataIndex.MonthsStandalone]];\n const months = getLastDefinedValue(monthsData, formStyle);\n return getLastDefinedValue(months, width);\n}\nfunction getLocaleEraNames(locale, width) {\n const data = _findLocaleData(locale);\n const erasData = data[_LocaleDataIndex.Eras];\n return getLastDefinedValue(erasData, width);\n}\nfunction getLocaleFirstDayOfWeek(locale) {\n const data = _findLocaleData(locale);\n return data[_LocaleDataIndex.FirstDayOfWeek];\n}\nfunction getLocaleWeekEndRange(locale) {\n const data = _findLocaleData(locale);\n return data[_LocaleDataIndex.WeekendRange];\n}\nfunction getLocaleDateFormat(locale, width) {\n const data = _findLocaleData(locale);\n return getLastDefinedValue(data[_LocaleDataIndex.DateFormat], width);\n}\nfunction getLocaleTimeFormat(locale, width) {\n const data = _findLocaleData(locale);\n return getLastDefinedValue(data[_LocaleDataIndex.TimeFormat], width);\n}\nfunction getLocaleDateTimeFormat(locale, width) {\n const data = _findLocaleData(locale);\n const dateTimeFormatData = data[_LocaleDataIndex.DateTimeFormat];\n return getLastDefinedValue(dateTimeFormatData, width);\n}\nfunction getLocaleNumberSymbol(locale, symbol) {\n const data = _findLocaleData(locale);\n const res = data[_LocaleDataIndex.NumberSymbols][symbol];\n if (typeof res === 'undefined') {\n if (symbol === NumberSymbol.CurrencyDecimal) {\n return data[_LocaleDataIndex.NumberSymbols][NumberSymbol.Decimal];\n } else if (symbol === NumberSymbol.CurrencyGroup) {\n return data[_LocaleDataIndex.NumberSymbols][NumberSymbol.Group];\n }\n }\n return res;\n}\nfunction getLocaleNumberFormat(locale, type) {\n const data = _findLocaleData(locale);\n return data[_LocaleDataIndex.NumberFormats][type];\n}\nfunction getLocaleCurrencySymbol(locale) {\n const data = _findLocaleData(locale);\n return data[_LocaleDataIndex.CurrencySymbol] || null;\n}\nfunction getLocaleCurrencyName(locale) {\n const data = _findLocaleData(locale);\n return data[_LocaleDataIndex.CurrencyName] || null;\n}\nfunction getLocaleCurrencyCode(locale) {\n return _getLocaleCurrencyCode(locale);\n}\nfunction getLocaleCurrencies(locale) {\n const data = _findLocaleData(locale);\n return data[_LocaleDataIndex.Currencies];\n}\nconst getLocalePluralCase = _getLocalePluralCase;\nfunction checkFullData(data) {\n if (!data[_LocaleDataIndex.ExtraData]) {\n throw new _RuntimeError(2303, ngDevMode && `Missing extra locale data for the locale \"${data[_LocaleDataIndex.LocaleId]}\". Use \"registerLocaleData\" to load new data. See the \"I18n guide\" on angular.io to know more.`);\n }\n}\nfunction getLocaleExtraDayPeriodRules(locale) {\n const data = _findLocaleData(locale);\n checkFullData(data);\n const rules = data[_LocaleDataIndex.ExtraData][2] || [];\n return rules.map(rule => {\n if (typeof rule === 'string') {\n return extractTime(rule);\n }\n return [extractTime(rule[0]), extractTime(rule[1])];\n });\n}\nfunction getLocaleExtraDayPeriods(locale, formStyle, width) {\n const data = _findLocaleData(locale);\n checkFullData(data);\n const dayPeriodsData = [data[_LocaleDataIndex.ExtraData][0], data[_LocaleDataIndex.ExtraData][1]];\n const dayPeriods = getLastDefinedValue(dayPeriodsData, formStyle) || [];\n return getLastDefinedValue(dayPeriods, width) || [];\n}\nfunction getLocaleDirection(locale) {\n const data = _findLocaleData(locale);\n return data[_LocaleDataIndex.Directionality];\n}\nfunction getLastDefinedValue(data, index) {\n for (let i = index; i > -1; i--) {\n if (typeof data[i] !== 'undefined') {\n return data[i];\n }\n }\n throw new _RuntimeError(2304, ngDevMode && 'Locale data API: locale data undefined');\n}\nfunction extractTime(time) {\n const [h, m] = time.split(':');\n return {\n hours: +h,\n minutes: +m\n };\n}\nfunction getCurrencySymbol(code, format, locale = 'en') {\n const currency = getLocaleCurrencies(locale)[code] || CURRENCIES_EN[code] || [];\n const symbolNarrow = currency[1];\n if (format === 'narrow' && typeof symbolNarrow === 'string') {\n return symbolNarrow;\n }\n return currency[0] || code;\n}\nconst DEFAULT_NB_OF_CURRENCY_DIGITS = 2;\nfunction getNumberOfCurrencyDigits(code) {\n let digits;\n const currency = CURRENCIES_EN[code];\n if (currency) {\n digits = currency[2];\n }\n return typeof digits === 'number' ? digits : DEFAULT_NB_OF_CURRENCY_DIGITS;\n}\nconst ISO8601_DATE_REGEX = /^(\\d{4,})-?(\\d\\d)-?(\\d\\d)(?:T(\\d\\d)(?::?(\\d\\d)(?::?(\\d\\d)(?:\\.(\\d+))?)?)?(Z|([+-])(\\d\\d):?(\\d\\d))?)?$/;\nconst NAMED_FORMATS = {};\nconst DATE_FORMATS_SPLIT = /((?:[^BEGHLMOSWYZabcdhmswyz']+)|(?:'(?:[^']|'')*')|(?:G{1,5}|y{1,4}|Y{1,4}|M{1,5}|L{1,5}|w{1,2}|W{1}|d{1,2}|E{1,6}|c{1,6}|a{1,5}|b{1,5}|B{1,5}|h{1,2}|H{1,2}|m{1,2}|s{1,2}|S{1,3}|z{1,4}|Z{1,5}|O{1,4}))([\\s\\S]*)/;\nfunction formatDate(value, format, locale, timezone) {\n let date = toDate(value);\n const namedFormat = getNamedFormat(locale, format);\n format = namedFormat || format;\n let parts = [];\n let match;\n while (format) {\n match = DATE_FORMATS_SPLIT.exec(format);\n if (match) {\n parts = parts.concat(match.slice(1));\n const part = parts.pop();\n if (!part) {\n break;\n }\n format = part;\n } else {\n parts.push(format);\n break;\n }\n }\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n assertValidDateFormat(parts);\n }\n let dateTimezoneOffset = date.getTimezoneOffset();\n if (timezone) {\n dateTimezoneOffset = timezoneToOffset(timezone, dateTimezoneOffset);\n date = convertTimezoneToLocal(date, timezone);\n }\n let text = '';\n parts.forEach(value => {\n const dateFormatter = getDateFormatter(value);\n text += dateFormatter ? dateFormatter(date, locale, dateTimezoneOffset) : value === \"''\" ? \"'\" : value.replace(/(^'|'$)/g, '').replace(/''/g, \"'\");\n });\n return text;\n}\nfunction assertValidDateFormat(parts) {\n if (parts.some(part => /^Y+$/.test(part)) && !parts.some(part => /^w+$/.test(part))) {\n const message = `Suspicious use of week-based year \"Y\" in date pattern \"${parts.join('')}\". Did you mean to use calendar year \"y\" instead?`;\n if (parts.length === 1) {\n console.error(_formatRuntimeError(2300, message));\n } else {\n throw new _RuntimeError(2300, message);\n }\n }\n}\nfunction createDate(year, month, date) {\n const newDate = new Date(0);\n newDate.setFullYear(year, month, date);\n newDate.setHours(0, 0, 0);\n return newDate;\n}\nfunction getNamedFormat(locale, format) {\n const localeId = getLocaleId(locale);\n NAMED_FORMATS[localeId] ??= {};\n if (NAMED_FORMATS[localeId][format]) {\n return NAMED_FORMATS[localeId][format];\n }\n let formatValue = '';\n switch (format) {\n case 'shortDate':\n formatValue = getLocaleDateFormat(locale, FormatWidth.Short);\n break;\n case 'mediumDate':\n formatValue = getLocaleDateFormat(locale, FormatWidth.Medium);\n break;\n case 'longDate':\n formatValue = getLocaleDateFormat(locale, FormatWidth.Long);\n break;\n case 'fullDate':\n formatValue = getLocaleDateFormat(locale, FormatWidth.Full);\n break;\n case 'shortTime':\n formatValue = getLocaleTimeFormat(locale, FormatWidth.Short);\n break;\n case 'mediumTime':\n formatValue = getLocaleTimeFormat(locale, FormatWidth.Medium);\n break;\n case 'longTime':\n formatValue = getLocaleTimeFormat(locale, FormatWidth.Long);\n break;\n case 'fullTime':\n formatValue = getLocaleTimeFormat(locale, FormatWidth.Full);\n break;\n case 'short':\n const shortTime = getNamedFormat(locale, 'shortTime');\n const shortDate = getNamedFormat(locale, 'shortDate');\n formatValue = formatDateTime(getLocaleDateTimeFormat(locale, FormatWidth.Short), [shortTime, shortDate]);\n break;\n case 'medium':\n const mediumTime = getNamedFormat(locale, 'mediumTime');\n const mediumDate = getNamedFormat(locale, 'mediumDate');\n formatValue = formatDateTime(getLocaleDateTimeFormat(locale, FormatWidth.Medium), [mediumTime, mediumDate]);\n break;\n case 'long':\n const longTime = getNamedFormat(locale, 'longTime');\n const longDate = getNamedFormat(locale, 'longDate');\n formatValue = formatDateTime(getLocaleDateTimeFormat(locale, FormatWidth.Long), [longTime, longDate]);\n break;\n case 'full':\n const fullTime = getNamedFormat(locale, 'fullTime');\n const fullDate = getNamedFormat(locale, 'fullDate');\n formatValue = formatDateTime(getLocaleDateTimeFormat(locale, FormatWidth.Full), [fullTime, fullDate]);\n break;\n }\n if (formatValue) {\n NAMED_FORMATS[localeId][format] = formatValue;\n }\n return formatValue;\n}\nfunction formatDateTime(str, opt_values) {\n if (opt_values) {\n str = str.replace(/\\{([^}]+)}/g, function (match, key) {\n return opt_values != null && key in opt_values ? opt_values[key] : match;\n });\n }\n return str;\n}\nfunction padNumber(num, digits, minusSign = '-', trim, negWrap) {\n let neg = '';\n if (num < 0 || negWrap && num <= 0) {\n if (negWrap) {\n num = -num + 1;\n } else {\n num = -num;\n neg = minusSign;\n }\n }\n let strNum = String(num);\n while (strNum.length < digits) {\n strNum = '0' + strNum;\n }\n if (trim) {\n strNum = strNum.slice(strNum.length - digits);\n }\n return neg + strNum;\n}\nfunction formatFractionalSeconds(milliseconds, digits) {\n const strMs = padNumber(milliseconds, 3);\n return strMs.substring(0, digits);\n}\nfunction dateGetter(name, size, offset = 0, trim = false, negWrap = false) {\n return function (date, locale) {\n let part = getDatePart(name, date);\n if (offset > 0 || part > -offset) {\n part += offset;\n }\n if (name === 3) {\n if (part === 0 && offset === -12) {\n part = 12;\n }\n } else if (name === 6) {\n return formatFractionalSeconds(part, size);\n }\n const localeMinus = getLocaleNumberSymbol(locale, NumberSymbol.MinusSign);\n return padNumber(part, size, localeMinus, trim, negWrap);\n };\n}\nfunction getDatePart(part, date) {\n switch (part) {\n case 0:\n return date.getFullYear();\n case 1:\n return date.getMonth();\n case 2:\n return date.getDate();\n case 3:\n return date.getHours();\n case 4:\n return date.getMinutes();\n case 5:\n return date.getSeconds();\n case 6:\n return date.getMilliseconds();\n case 7:\n return date.getDay();\n default:\n throw new _RuntimeError(2301, ngDevMode && `Unknown DateType value \"${part}\".`);\n }\n}\nfunction dateStrGetter(name, width, form = FormStyle.Format, extended = false) {\n return function (date, locale) {\n return getDateTranslation(date, locale, name, width, form, extended);\n };\n}\nfunction getDateTranslation(date, locale, name, width, form, extended) {\n switch (name) {\n case 2:\n return getLocaleMonthNames(locale, form, width)[date.getMonth()];\n case 1:\n return getLocaleDayNames(locale, form, width)[date.getDay()];\n case 0:\n const currentHours = date.getHours();\n const currentMinutes = date.getMinutes();\n if (extended) {\n const rules = getLocaleExtraDayPeriodRules(locale);\n const dayPeriods = getLocaleExtraDayPeriods(locale, form, width);\n const index = rules.findIndex(rule => {\n if (Array.isArray(rule)) {\n const [from, to] = rule;\n const afterFrom = currentHours >= from.hours && currentMinutes >= from.minutes;\n const beforeTo = currentHours < to.hours || currentHours === to.hours && currentMinutes < to.minutes;\n if (from.hours < to.hours) {\n if (afterFrom && beforeTo) {\n return true;\n }\n } else if (afterFrom || beforeTo) {\n return true;\n }\n } else {\n if (rule.hours === currentHours && rule.minutes === currentMinutes) {\n return true;\n }\n }\n return false;\n });\n if (index !== -1) {\n return dayPeriods[index];\n }\n }\n return getLocaleDayPeriods(locale, form, width)[currentHours < 12 ? 0 : 1];\n case 3:\n return getLocaleEraNames(locale, width)[date.getFullYear() <= 0 ? 0 : 1];\n default:\n const unexpected = name;\n throw new _RuntimeError(2302, ngDevMode && `unexpected translation type ${unexpected}`);\n }\n}\nfunction timeZoneGetter(width) {\n return function (date, locale, offset) {\n const zone = -1 * offset;\n const minusSign = getLocaleNumberSymbol(locale, NumberSymbol.MinusSign);\n const hours = zone > 0 ? Math.floor(zone / 60) : Math.ceil(zone / 60);\n switch (width) {\n case 0:\n return (zone >= 0 ? '+' : '') + padNumber(hours, 2, minusSign) + padNumber(Math.abs(zone % 60), 2, minusSign);\n case 1:\n return 'GMT' + (zone >= 0 ? '+' : '') + padNumber(hours, 1, minusSign);\n case 2:\n return 'GMT' + (zone >= 0 ? '+' : '') + padNumber(hours, 2, minusSign) + ':' + padNumber(Math.abs(zone % 60), 2, minusSign);\n case 3:\n if (offset === 0) {\n return 'Z';\n } else {\n return (zone >= 0 ? '+' : '') + padNumber(hours, 2, minusSign) + ':' + padNumber(Math.abs(zone % 60), 2, minusSign);\n }\n default:\n throw new _RuntimeError(2310, ngDevMode && `Unknown zone width \"${width}\"`);\n }\n };\n}\nconst JANUARY = 0;\nconst THURSDAY = 4;\nfunction getFirstThursdayOfYear(year) {\n const firstDayOfYear = createDate(year, JANUARY, 1).getDay();\n return createDate(year, 0, 1 + (firstDayOfYear <= THURSDAY ? THURSDAY : THURSDAY + 7) - firstDayOfYear);\n}\nfunction getThursdayThisIsoWeek(datetime) {\n const currentDay = datetime.getDay();\n const deltaToThursday = currentDay === 0 ? -3 : THURSDAY - currentDay;\n return createDate(datetime.getFullYear(), datetime.getMonth(), datetime.getDate() + deltaToThursday);\n}\nfunction weekGetter(size, monthBased = false) {\n return function (date, locale) {\n let result;\n if (monthBased) {\n const nbDaysBefore1stDayOfMonth = new Date(date.getFullYear(), date.getMonth(), 1).getDay() - 1;\n const today = date.getDate();\n result = 1 + Math.floor((today + nbDaysBefore1stDayOfMonth) / 7);\n } else {\n const thisThurs = getThursdayThisIsoWeek(date);\n const firstThurs = getFirstThursdayOfYear(thisThurs.getFullYear());\n const diff = thisThurs.getTime() - firstThurs.getTime();\n result = 1 + Math.round(diff / 6.048e8);\n }\n return padNumber(result, size, getLocaleNumberSymbol(locale, NumberSymbol.MinusSign));\n };\n}\nfunction weekNumberingYearGetter(size, trim = false) {\n return function (date, locale) {\n const thisThurs = getThursdayThisIsoWeek(date);\n const weekNumberingYear = thisThurs.getFullYear();\n return padNumber(weekNumberingYear, size, getLocaleNumberSymbol(locale, NumberSymbol.MinusSign), trim);\n };\n}\nconst DATE_FORMATS = {};\nfunction getDateFormatter(format) {\n if (DATE_FORMATS[format]) {\n return DATE_FORMATS[format];\n }\n let formatter;\n switch (format) {\n case 'G':\n case 'GG':\n case 'GGG':\n formatter = dateStrGetter(3, TranslationWidth.Abbreviated);\n break;\n case 'GGGG':\n formatter = dateStrGetter(3, TranslationWidth.Wide);\n break;\n case 'GGGGG':\n formatter = dateStrGetter(3, TranslationWidth.Narrow);\n break;\n case 'y':\n formatter = dateGetter(0, 1, 0, false, true);\n break;\n case 'yy':\n formatter = dateGetter(0, 2, 0, true, true);\n break;\n case 'yyy':\n formatter = dateGetter(0, 3, 0, false, true);\n break;\n case 'yyyy':\n formatter = dateGetter(0, 4, 0, false, true);\n break;\n case 'Y':\n formatter = weekNumberingYearGetter(1);\n break;\n case 'YY':\n formatter = weekNumberingYearGetter(2, true);\n break;\n case 'YYY':\n formatter = weekNumberingYearGetter(3);\n break;\n case 'YYYY':\n formatter = weekNumberingYearGetter(4);\n break;\n case 'M':\n case 'L':\n formatter = dateGetter(1, 1, 1);\n break;\n case 'MM':\n case 'LL':\n formatter = dateGetter(1, 2, 1);\n break;\n case 'MMM':\n formatter = dateStrGetter(2, TranslationWidth.Abbreviated);\n break;\n case 'MMMM':\n formatter = dateStrGetter(2, TranslationWidth.Wide);\n break;\n case 'MMMMM':\n formatter = dateStrGetter(2, TranslationWidth.Narrow);\n break;\n case 'LLL':\n formatter = dateStrGetter(2, TranslationWidth.Abbreviated, FormStyle.Standalone);\n break;\n case 'LLLL':\n formatter = dateStrGetter(2, TranslationWidth.Wide, FormStyle.Standalone);\n break;\n case 'LLLLL':\n formatter = dateStrGetter(2, TranslationWidth.Narrow, FormStyle.Standalone);\n break;\n case 'w':\n formatter = weekGetter(1);\n break;\n case 'ww':\n formatter = weekGetter(2);\n break;\n case 'W':\n formatter = weekGetter(1, true);\n break;\n case 'd':\n formatter = dateGetter(2, 1);\n break;\n case 'dd':\n formatter = dateGetter(2, 2);\n break;\n case 'c':\n case 'cc':\n formatter = dateGetter(7, 1);\n break;\n case 'ccc':\n formatter = dateStrGetter(1, TranslationWidth.Abbreviated, FormStyle.Standalone);\n break;\n case 'cccc':\n formatter = dateStrGetter(1, TranslationWidth.Wide, FormStyle.Standalone);\n break;\n case 'ccccc':\n formatter = dateStrGetter(1, TranslationWidth.Narrow, FormStyle.Standalone);\n break;\n case 'cccccc':\n formatter = dateStrGetter(1, TranslationWidth.Short, FormStyle.Standalone);\n break;\n case 'E':\n case 'EE':\n case 'EEE':\n formatter = dateStrGetter(1, TranslationWidth.Abbreviated);\n break;\n case 'EEEE':\n formatter = dateStrGetter(1, TranslationWidth.Wide);\n break;\n case 'EEEEE':\n formatter = dateStrGetter(1, TranslationWidth.Narrow);\n break;\n case 'EEEEEE':\n formatter = dateStrGetter(1, TranslationWidth.Short);\n break;\n case 'a':\n case 'aa':\n case 'aaa':\n formatter = dateStrGetter(0, TranslationWidth.Abbreviated);\n break;\n case 'aaaa':\n formatter = dateStrGetter(0, TranslationWidth.Wide);\n break;\n case 'aaaaa':\n formatter = dateStrGetter(0, TranslationWidth.Narrow);\n break;\n case 'b':\n case 'bb':\n case 'bbb':\n formatter = dateStrGetter(0, TranslationWidth.Abbreviated, FormStyle.Standalone, true);\n break;\n case 'bbbb':\n formatter = dateStrGetter(0, TranslationWidth.Wide, FormStyle.Standalone, true);\n break;\n case 'bbbbb':\n formatter = dateStrGetter(0, TranslationWidth.Narrow, FormStyle.Standalone, true);\n break;\n case 'B':\n case 'BB':\n case 'BBB':\n formatter = dateStrGetter(0, TranslationWidth.Abbreviated, FormStyle.Format, true);\n break;\n case 'BBBB':\n formatter = dateStrGetter(0, TranslationWidth.Wide, FormStyle.Format, true);\n break;\n case 'BBBBB':\n formatter = dateStrGetter(0, TranslationWidth.Narrow, FormStyle.Format, true);\n break;\n case 'h':\n formatter = dateGetter(3, 1, -12);\n break;\n case 'hh':\n formatter = dateGetter(3, 2, -12);\n break;\n case 'H':\n formatter = dateGetter(3, 1);\n break;\n case 'HH':\n formatter = dateGetter(3, 2);\n break;\n case 'm':\n formatter = dateGetter(4, 1);\n break;\n case 'mm':\n formatter = dateGetter(4, 2);\n break;\n case 's':\n formatter = dateGetter(5, 1);\n break;\n case 'ss':\n formatter = dateGetter(5, 2);\n break;\n case 'S':\n formatter = dateGetter(6, 1);\n break;\n case 'SS':\n formatter = dateGetter(6, 2);\n break;\n case 'SSS':\n formatter = dateGetter(6, 3);\n break;\n case 'Z':\n case 'ZZ':\n case 'ZZZ':\n formatter = timeZoneGetter(0);\n break;\n case 'ZZZZZ':\n formatter = timeZoneGetter(3);\n break;\n case 'O':\n case 'OO':\n case 'OOO':\n case 'z':\n case 'zz':\n case 'zzz':\n formatter = timeZoneGetter(1);\n break;\n case 'OOOO':\n case 'ZZZZ':\n case 'zzzz':\n formatter = timeZoneGetter(2);\n break;\n default:\n return null;\n }\n DATE_FORMATS[format] = formatter;\n return formatter;\n}\nfunction timezoneToOffset(timezone, fallback) {\n timezone = timezone.replace(/:/g, '');\n const requestedTimezoneOffset = Date.parse('Jan 01, 1970 00:00:00 ' + timezone) / 60000;\n return isNaN(requestedTimezoneOffset) ? fallback : requestedTimezoneOffset;\n}\nfunction addDateMinutes(date, minutes) {\n date = new Date(date.getTime());\n date.setMinutes(date.getMinutes() + minutes);\n return date;\n}\nfunction convertTimezoneToLocal(date, timezone, reverse) {\n const reverseValue = -1;\n const dateTimezoneOffset = date.getTimezoneOffset();\n const timezoneOffset = timezoneToOffset(timezone, dateTimezoneOffset);\n return addDateMinutes(date, reverseValue * (timezoneOffset - dateTimezoneOffset));\n}\nfunction toDate(value) {\n if (isDate(value)) {\n return value;\n }\n if (typeof value === 'number' && !isNaN(value)) {\n return new Date(value);\n }\n if (typeof value === 'string') {\n value = value.trim();\n if (/^(\\d{4}(-\\d{1,2}(-\\d{1,2})?)?)$/.test(value)) {\n const [y, m = 1, d = 1] = value.split('-').map(val => +val);\n return createDate(y, m - 1, d);\n }\n const parsedNb = parseFloat(value);\n if (!isNaN(value - parsedNb)) {\n return new Date(parsedNb);\n }\n let match;\n if (match = value.match(ISO8601_DATE_REGEX)) {\n return isoStringToDate(match);\n }\n }\n const date = new Date(value);\n if (!isDate(date)) {\n throw new _RuntimeError(2311, ngDevMode && `Unable to convert \"${value}\" into a date`);\n }\n return date;\n}\nfunction isoStringToDate(match) {\n const date = new Date(0);\n let tzHour = 0;\n let tzMin = 0;\n const dateSetter = match[8] ? date.setUTCFullYear : date.setFullYear;\n const timeSetter = match[8] ? date.setUTCHours : date.setHours;\n if (match[9]) {\n tzHour = Number(match[9] + match[10]);\n tzMin = Number(match[9] + match[11]);\n }\n dateSetter.call(date, Number(match[1]), Number(match[2]) - 1, Number(match[3]));\n const h = Number(match[4] || 0) - tzHour;\n const m = Number(match[5] || 0) - tzMin;\n const s = Number(match[6] || 0);\n const ms = Math.floor(parseFloat('0.' + (match[7] || 0)) * 1000);\n timeSetter.call(date, h, m, s, ms);\n return date;\n}\nfunction isDate(value) {\n return value instanceof Date && !isNaN(value.valueOf());\n}\nconst NUMBER_FORMAT_REGEXP = /^(\\d+)?\\.((\\d+)(-(\\d+))?)?$/;\nconst MAX_DIGITS = 22;\nconst DECIMAL_SEP = '.';\nconst ZERO_CHAR = '0';\nconst PATTERN_SEP = ';';\nconst GROUP_SEP = ',';\nconst DIGIT_CHAR = '#';\nconst CURRENCY_CHAR = '¤';\nconst PERCENT_CHAR = '%';\nfunction formatNumberToLocaleString(value, pattern, locale, groupSymbol, decimalSymbol, digitsInfo, isPercent = false) {\n let formattedText = '';\n let isZero = false;\n if (!isFinite(value)) {\n formattedText = getLocaleNumberSymbol(locale, NumberSymbol.Infinity);\n } else {\n let parsedNumber = parseNumber(value);\n if (isPercent) {\n parsedNumber = toPercent(parsedNumber);\n }\n let minInt = pattern.minInt;\n let minFraction = pattern.minFrac;\n let maxFraction = pattern.maxFrac;\n if (digitsInfo) {\n const parts = digitsInfo.match(NUMBER_FORMAT_REGEXP);\n if (parts === null) {\n throw new _RuntimeError(2306, ngDevMode && `${digitsInfo} is not a valid digit info`);\n }\n const minIntPart = parts[1];\n const minFractionPart = parts[3];\n const maxFractionPart = parts[5];\n if (minIntPart != null) {\n minInt = parseIntAutoRadix(minIntPart);\n }\n if (minFractionPart != null) {\n minFraction = parseIntAutoRadix(minFractionPart);\n }\n if (maxFractionPart != null) {\n maxFraction = parseIntAutoRadix(maxFractionPart);\n } else if (minFractionPart != null && minFraction > maxFraction) {\n maxFraction = minFraction;\n }\n }\n roundNumber(parsedNumber, minFraction, maxFraction);\n let digits = parsedNumber.digits;\n let integerLen = parsedNumber.integerLen;\n const exponent = parsedNumber.exponent;\n let decimals = [];\n isZero = digits.every(d => !d);\n for (; integerLen < minInt; integerLen++) {\n digits.unshift(0);\n }\n for (; integerLen < 0; integerLen++) {\n digits.unshift(0);\n }\n if (integerLen > 0) {\n decimals = digits.splice(integerLen, digits.length);\n } else {\n decimals = digits;\n digits = [0];\n }\n const groups = [];\n if (digits.length >= pattern.lgSize) {\n groups.unshift(digits.splice(-pattern.lgSize, digits.length).join(''));\n }\n while (digits.length > pattern.gSize) {\n groups.unshift(digits.splice(-pattern.gSize, digits.length).join(''));\n }\n if (digits.length) {\n groups.unshift(digits.join(''));\n }\n formattedText = groups.join(getLocaleNumberSymbol(locale, groupSymbol));\n if (decimals.length) {\n formattedText += getLocaleNumberSymbol(locale, decimalSymbol) + decimals.join('');\n }\n if (exponent) {\n formattedText += getLocaleNumberSymbol(locale, NumberSymbol.Exponential) + '+' + exponent;\n }\n }\n if (value < 0 && !isZero) {\n formattedText = pattern.negPre + formattedText + pattern.negSuf;\n } else {\n formattedText = pattern.posPre + formattedText + pattern.posSuf;\n }\n return formattedText;\n}\nfunction formatCurrency(value, locale, currency, currencyCode, digitsInfo) {\n const format = getLocaleNumberFormat(locale, NumberFormatStyle.Currency);\n const pattern = parseNumberFormat(format, getLocaleNumberSymbol(locale, NumberSymbol.MinusSign));\n pattern.minFrac = getNumberOfCurrencyDigits(currencyCode);\n pattern.maxFrac = pattern.minFrac;\n const res = formatNumberToLocaleString(value, pattern, locale, NumberSymbol.CurrencyGroup, NumberSymbol.CurrencyDecimal, digitsInfo);\n return res.replace(CURRENCY_CHAR, currency).replace(CURRENCY_CHAR, '').trim();\n}\nfunction formatPercent(value, locale, digitsInfo) {\n const format = getLocaleNumberFormat(locale, NumberFormatStyle.Percent);\n const pattern = parseNumberFormat(format, getLocaleNumberSymbol(locale, NumberSymbol.MinusSign));\n const res = formatNumberToLocaleString(value, pattern, locale, NumberSymbol.Group, NumberSymbol.Decimal, digitsInfo, true);\n return res.replace(new RegExp(PERCENT_CHAR, 'g'), getLocaleNumberSymbol(locale, NumberSymbol.PercentSign));\n}\nfunction formatNumber(value, locale, digitsInfo) {\n const format = getLocaleNumberFormat(locale, NumberFormatStyle.Decimal);\n const pattern = parseNumberFormat(format, getLocaleNumberSymbol(locale, NumberSymbol.MinusSign));\n return formatNumberToLocaleString(value, pattern, locale, NumberSymbol.Group, NumberSymbol.Decimal, digitsInfo);\n}\nfunction parseNumberFormat(format, minusSign = '-') {\n const p = {\n minInt: 1,\n minFrac: 0,\n maxFrac: 0,\n posPre: '',\n posSuf: '',\n negPre: '',\n negSuf: '',\n gSize: 0,\n lgSize: 0\n };\n const patternParts = format.split(PATTERN_SEP);\n const positive = patternParts[0];\n const negative = patternParts[1];\n const positiveParts = positive.indexOf(DECIMAL_SEP) !== -1 ? positive.split(DECIMAL_SEP) : [positive.substring(0, positive.lastIndexOf(ZERO_CHAR) + 1), positive.substring(positive.lastIndexOf(ZERO_CHAR) + 1)],\n integer = positiveParts[0],\n fraction = positiveParts[1] || '';\n p.posPre = integer.substring(0, integer.indexOf(DIGIT_CHAR));\n for (let i = 0; i < fraction.length; i++) {\n const ch = fraction.charAt(i);\n if (ch === ZERO_CHAR) {\n p.minFrac = p.maxFrac = i + 1;\n } else if (ch === DIGIT_CHAR) {\n p.maxFrac = i + 1;\n } else {\n p.posSuf += ch;\n }\n }\n const groups = integer.split(GROUP_SEP);\n p.gSize = groups[1] ? groups[1].length : 0;\n p.lgSize = groups[2] || groups[1] ? (groups[2] || groups[1]).length : 0;\n if (negative) {\n const trunkLen = positive.length - p.posPre.length - p.posSuf.length,\n pos = negative.indexOf(DIGIT_CHAR);\n p.negPre = negative.substring(0, pos).replace(/'/g, '');\n p.negSuf = negative.slice(pos + trunkLen).replace(/'/g, '');\n } else {\n p.negPre = minusSign + p.posPre;\n p.negSuf = p.posSuf;\n }\n return p;\n}\nfunction toPercent(parsedNumber) {\n if (parsedNumber.digits[0] === 0) {\n return parsedNumber;\n }\n const fractionLen = parsedNumber.digits.length - parsedNumber.integerLen;\n if (parsedNumber.exponent) {\n parsedNumber.exponent += 2;\n } else {\n if (fractionLen === 0) {\n parsedNumber.digits.push(0, 0);\n } else if (fractionLen === 1) {\n parsedNumber.digits.push(0);\n }\n parsedNumber.integerLen += 2;\n }\n return parsedNumber;\n}\nfunction parseNumber(num) {\n let numStr = Math.abs(num) + '';\n let exponent = 0,\n digits,\n integerLen;\n let i, j, zeros;\n if ((integerLen = numStr.indexOf(DECIMAL_SEP)) > -1) {\n numStr = numStr.replace(DECIMAL_SEP, '');\n }\n if ((i = numStr.search(/e/i)) > 0) {\n if (integerLen < 0) integerLen = i;\n integerLen += +numStr.slice(i + 1);\n numStr = numStr.substring(0, i);\n } else if (integerLen < 0) {\n integerLen = numStr.length;\n }\n for (i = 0; numStr.charAt(i) === ZERO_CHAR; i++) {}\n if (i === (zeros = numStr.length)) {\n digits = [0];\n integerLen = 1;\n } else {\n zeros--;\n while (numStr.charAt(zeros) === ZERO_CHAR) zeros--;\n integerLen -= i;\n digits = [];\n for (j = 0; i <= zeros; i++, j++) {\n digits[j] = Number(numStr.charAt(i));\n }\n }\n if (integerLen > MAX_DIGITS) {\n digits = digits.splice(0, MAX_DIGITS - 1);\n exponent = integerLen - 1;\n integerLen = 1;\n }\n return {\n digits,\n exponent,\n integerLen\n };\n}\nfunction roundNumber(parsedNumber, minFrac, maxFrac) {\n if (minFrac > maxFrac) {\n throw new _RuntimeError(2307, ngDevMode && `The minimum number of digits after fraction (${minFrac}) is higher than the maximum (${maxFrac}).`);\n }\n let digits = parsedNumber.digits;\n let fractionLen = digits.length - parsedNumber.integerLen;\n const fractionSize = Math.min(Math.max(minFrac, fractionLen), maxFrac);\n let roundAt = fractionSize + parsedNumber.integerLen;\n let digit = digits[roundAt];\n if (roundAt > 0) {\n digits.splice(Math.max(parsedNumber.integerLen, roundAt));\n for (let j = roundAt; j < digits.length; j++) {\n digits[j] = 0;\n }\n } else {\n fractionLen = Math.max(0, fractionLen);\n parsedNumber.integerLen = 1;\n digits.length = Math.max(1, roundAt = fractionSize + 1);\n digits[0] = 0;\n for (let i = 1; i < roundAt; i++) digits[i] = 0;\n }\n if (digit >= 5) {\n if (roundAt - 1 < 0) {\n for (let k = 0; k > roundAt; k--) {\n digits.unshift(0);\n parsedNumber.integerLen++;\n }\n digits.unshift(1);\n parsedNumber.integerLen++;\n } else {\n digits[roundAt - 1]++;\n }\n }\n for (; fractionLen < Math.max(0, fractionSize); fractionLen++) digits.push(0);\n let dropTrailingZeros = fractionSize !== 0;\n const minLen = minFrac + parsedNumber.integerLen;\n const carry = digits.reduceRight(function (carry, d, i, digits) {\n d = d + carry;\n digits[i] = d < 10 ? d : d - 10;\n if (dropTrailingZeros) {\n if (digits[i] === 0 && i >= minLen) {\n digits.pop();\n } else {\n dropTrailingZeros = false;\n }\n }\n return d >= 10 ? 1 : 0;\n }, 0);\n if (carry) {\n digits.unshift(carry);\n parsedNumber.integerLen++;\n }\n}\nfunction parseIntAutoRadix(text) {\n const result = parseInt(text);\n if (isNaN(result)) {\n throw new _RuntimeError(2305, ngDevMode && 'Invalid integer literal when parsing ' + text);\n }\n return result;\n}\nlet NgLocalization = /*#__PURE__*/(() => {\n class NgLocalization {\n static ɵfac = function NgLocalization_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || NgLocalization)();\n };\n static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: NgLocalization,\n factory: () => (() => new NgLocaleLocalization(inject(LOCALE_ID)))(),\n providedIn: 'root'\n });\n }\n return NgLocalization;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nfunction getPluralCategory(value, cases, ngLocalization, locale) {\n let key = `=${value}`;\n if (cases.indexOf(key) > -1) {\n return key;\n }\n key = ngLocalization.getPluralCategory(value, locale);\n if (cases.indexOf(key) > -1) {\n return key;\n }\n if (cases.indexOf('other') > -1) {\n return 'other';\n }\n throw new _RuntimeError(2308, ngDevMode && `No plural message found for value \"${value}\"`);\n}\nlet NgLocaleLocalization = /*#__PURE__*/(() => {\n class NgLocaleLocalization extends NgLocalization {\n locale;\n constructor(locale) {\n super();\n this.locale = locale;\n }\n getPluralCategory(value, locale) {\n const plural = getLocalePluralCase(locale || this.locale)(value);\n switch (plural) {\n case Plural.Zero:\n return 'zero';\n case Plural.One:\n return 'one';\n case Plural.Two:\n return 'two';\n case Plural.Few:\n return 'few';\n case Plural.Many:\n return 'many';\n default:\n return 'other';\n }\n }\n static ɵfac = function NgLocaleLocalization_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || NgLocaleLocalization)(i0.ɵɵinject(LOCALE_ID));\n };\n static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: NgLocaleLocalization,\n factory: NgLocaleLocalization.ɵfac\n });\n }\n return NgLocaleLocalization;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst WS_REGEXP = /\\s+/;\nconst EMPTY_ARRAY = [];\nlet NgClass = /*#__PURE__*/(() => {\n class NgClass {\n _ngEl;\n _renderer;\n initialClasses = EMPTY_ARRAY;\n rawClass;\n stateMap = new Map();\n constructor(_ngEl, _renderer) {\n this._ngEl = _ngEl;\n this._renderer = _renderer;\n }\n set klass(value) {\n this.initialClasses = value != null ? value.trim().split(WS_REGEXP) : EMPTY_ARRAY;\n }\n set ngClass(value) {\n this.rawClass = typeof value === 'string' ? value.trim().split(WS_REGEXP) : value;\n }\n ngDoCheck() {\n for (const klass of this.initialClasses) {\n this._updateState(klass, true);\n }\n const rawClass = this.rawClass;\n if (Array.isArray(rawClass) || rawClass instanceof Set) {\n for (const klass of rawClass) {\n this._updateState(klass, true);\n }\n } else if (rawClass != null) {\n for (const klass of Object.keys(rawClass)) {\n this._updateState(klass, Boolean(rawClass[klass]));\n }\n }\n this._applyStateDiff();\n }\n _updateState(klass, nextEnabled) {\n const state = this.stateMap.get(klass);\n if (state !== undefined) {\n if (state.enabled !== nextEnabled) {\n state.changed = true;\n state.enabled = nextEnabled;\n }\n state.touched = true;\n } else {\n this.stateMap.set(klass, {\n enabled: nextEnabled,\n changed: true,\n touched: true\n });\n }\n }\n _applyStateDiff() {\n for (const stateEntry of this.stateMap) {\n const klass = stateEntry[0];\n const state = stateEntry[1];\n if (state.changed) {\n this._toggleClass(klass, state.enabled);\n state.changed = false;\n } else if (!state.touched) {\n if (state.enabled) {\n this._toggleClass(klass, false);\n }\n this.stateMap.delete(klass);\n }\n state.touched = false;\n }\n }\n _toggleClass(klass, enabled) {\n if (ngDevMode) {\n if (typeof klass !== 'string') {\n throw new Error(`NgClass can only toggle CSS classes expressed as strings, got ${_stringify(klass)}`);\n }\n }\n klass = klass.trim();\n if (klass.length > 0) {\n klass.split(WS_REGEXP).forEach(klass => {\n if (enabled) {\n this._renderer.addClass(this._ngEl.nativeElement, klass);\n } else {\n this._renderer.removeClass(this._ngEl.nativeElement, klass);\n }\n });\n }\n }\n static ɵfac = function NgClass_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || NgClass)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i0.Renderer2));\n };\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: NgClass,\n selectors: [[\"\", \"ngClass\", \"\"]],\n inputs: {\n klass: [0, \"class\", \"klass\"],\n ngClass: \"ngClass\"\n }\n });\n }\n return NgClass;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet NgComponentOutlet = /*#__PURE__*/(() => {\n class NgComponentOutlet {\n _viewContainerRef;\n ngComponentOutlet = null;\n ngComponentOutletInputs;\n ngComponentOutletInjector;\n ngComponentOutletEnvironmentInjector;\n ngComponentOutletContent;\n ngComponentOutletNgModule;\n _componentRef;\n _moduleRef;\n _inputsUsed = new Map();\n get componentInstance() {\n return this._componentRef?.instance ?? null;\n }\n constructor(_viewContainerRef) {\n this._viewContainerRef = _viewContainerRef;\n }\n _needToReCreateNgModuleInstance(changes) {\n return changes['ngComponentOutletNgModule'] !== undefined;\n }\n _needToReCreateComponentInstance(changes) {\n return changes['ngComponentOutlet'] !== undefined || changes['ngComponentOutletContent'] !== undefined || changes['ngComponentOutletInjector'] !== undefined || changes['ngComponentOutletEnvironmentInjector'] !== undefined || this._needToReCreateNgModuleInstance(changes);\n }\n ngOnChanges(changes) {\n if (this._needToReCreateComponentInstance(changes)) {\n this._viewContainerRef.clear();\n this._inputsUsed.clear();\n this._componentRef = undefined;\n if (this.ngComponentOutlet) {\n const injector = this.ngComponentOutletInjector || this._viewContainerRef.parentInjector;\n if (this._needToReCreateNgModuleInstance(changes)) {\n this._moduleRef?.destroy();\n if (this.ngComponentOutletNgModule) {\n this._moduleRef = createNgModule(this.ngComponentOutletNgModule, getParentInjector(injector));\n } else {\n this._moduleRef = undefined;\n }\n }\n this._componentRef = this._viewContainerRef.createComponent(this.ngComponentOutlet, {\n injector,\n ngModuleRef: this._moduleRef,\n projectableNodes: this.ngComponentOutletContent,\n environmentInjector: this.ngComponentOutletEnvironmentInjector\n });\n }\n }\n }\n ngDoCheck() {\n if (this._componentRef) {\n if (this.ngComponentOutletInputs) {\n for (const inputName of Object.keys(this.ngComponentOutletInputs)) {\n this._inputsUsed.set(inputName, true);\n }\n }\n this._applyInputStateDiff(this._componentRef);\n }\n }\n ngOnDestroy() {\n this._moduleRef?.destroy();\n }\n _applyInputStateDiff(componentRef) {\n for (const [inputName, touched] of this._inputsUsed) {\n if (!touched) {\n componentRef.setInput(inputName, undefined);\n this._inputsUsed.delete(inputName);\n } else {\n componentRef.setInput(inputName, this.ngComponentOutletInputs[inputName]);\n this._inputsUsed.set(inputName, false);\n }\n }\n }\n static ɵfac = function NgComponentOutlet_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || NgComponentOutlet)(i0.ɵɵdirectiveInject(i0.ViewContainerRef));\n };\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: NgComponentOutlet,\n selectors: [[\"\", \"ngComponentOutlet\", \"\"]],\n inputs: {\n ngComponentOutlet: \"ngComponentOutlet\",\n ngComponentOutletInputs: \"ngComponentOutletInputs\",\n ngComponentOutletInjector: \"ngComponentOutletInjector\",\n ngComponentOutletEnvironmentInjector: \"ngComponentOutletEnvironmentInjector\",\n ngComponentOutletContent: \"ngComponentOutletContent\",\n ngComponentOutletNgModule: \"ngComponentOutletNgModule\"\n },\n exportAs: [\"ngComponentOutlet\"],\n features: [i0.ɵɵNgOnChangesFeature]\n });\n }\n return NgComponentOutlet;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nfunction getParentInjector(injector) {\n const parentNgModule = injector.get(NgModuleRef);\n return parentNgModule.injector;\n}\nclass NgForOfContext {\n $implicit;\n ngForOf;\n index;\n count;\n constructor($implicit, ngForOf, index, count) {\n this.$implicit = $implicit;\n this.ngForOf = ngForOf;\n this.index = index;\n this.count = count;\n }\n get first() {\n return this.index === 0;\n }\n get last() {\n return this.index === this.count - 1;\n }\n get even() {\n return this.index % 2 === 0;\n }\n get odd() {\n return !this.even;\n }\n}\nlet NgForOf = /*#__PURE__*/(() => {\n class NgForOf {\n _viewContainer;\n _template;\n _differs;\n set ngForOf(ngForOf) {\n this._ngForOf = ngForOf;\n this._ngForOfDirty = true;\n }\n set ngForTrackBy(fn) {\n if ((typeof ngDevMode === 'undefined' || ngDevMode) && fn != null && typeof fn !== 'function') {\n console.warn(`trackBy must be a function, but received ${JSON.stringify(fn)}. ` + `See https://angular.dev/api/common/NgForOf#change-propagation for more information.`);\n }\n this._trackByFn = fn;\n }\n get ngForTrackBy() {\n return this._trackByFn;\n }\n _ngForOf = null;\n _ngForOfDirty = true;\n _differ = null;\n _trackByFn;\n constructor(_viewContainer, _template, _differs) {\n this._viewContainer = _viewContainer;\n this._template = _template;\n this._differs = _differs;\n }\n set ngForTemplate(value) {\n if (value) {\n this._template = value;\n }\n }\n ngDoCheck() {\n if (this._ngForOfDirty) {\n this._ngForOfDirty = false;\n const value = this._ngForOf;\n if (!this._differ && value) {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n try {\n this._differ = this._differs.find(value).create(this.ngForTrackBy);\n } catch {\n let errorMessage = `Cannot find a differ supporting object '${value}' of type '` + `${getTypeName(value)}'. NgFor only supports binding to Iterables, such as Arrays.`;\n if (typeof value === 'object') {\n errorMessage += ' Did you mean to use the keyvalue pipe?';\n }\n throw new _RuntimeError(-2200, errorMessage);\n }\n } else {\n this._differ = this._differs.find(value).create(this.ngForTrackBy);\n }\n }\n }\n if (this._differ) {\n const changes = this._differ.diff(this._ngForOf);\n if (changes) this._applyChanges(changes);\n }\n }\n _applyChanges(changes) {\n const viewContainer = this._viewContainer;\n changes.forEachOperation((item, adjustedPreviousIndex, currentIndex) => {\n if (item.previousIndex == null) {\n viewContainer.createEmbeddedView(this._template, new NgForOfContext(item.item, this._ngForOf, -1, -1), currentIndex === null ? undefined : currentIndex);\n } else if (currentIndex == null) {\n viewContainer.remove(adjustedPreviousIndex === null ? undefined : adjustedPreviousIndex);\n } else if (adjustedPreviousIndex !== null) {\n const view = viewContainer.get(adjustedPreviousIndex);\n viewContainer.move(view, currentIndex);\n applyViewChange(view, item);\n }\n });\n for (let i = 0, ilen = viewContainer.length; i < ilen; i++) {\n const viewRef = viewContainer.get(i);\n const context = viewRef.context;\n context.index = i;\n context.count = ilen;\n context.ngForOf = this._ngForOf;\n }\n changes.forEachIdentityChange(record => {\n const viewRef = viewContainer.get(record.currentIndex);\n applyViewChange(viewRef, record);\n });\n }\n static ngTemplateContextGuard(dir, ctx) {\n return true;\n }\n static ɵfac = function NgForOf_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || NgForOf)(i0.ɵɵdirectiveInject(i0.ViewContainerRef), i0.ɵɵdirectiveInject(i0.TemplateRef), i0.ɵɵdirectiveInject(i0.IterableDiffers));\n };\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: NgForOf,\n selectors: [[\"\", \"ngFor\", \"\", \"ngForOf\", \"\"]],\n inputs: {\n ngForOf: \"ngForOf\",\n ngForTrackBy: \"ngForTrackBy\",\n ngForTemplate: \"ngForTemplate\"\n }\n });\n }\n return NgForOf;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nfunction applyViewChange(view, record) {\n view.context.$implicit = record.item;\n}\nfunction getTypeName(type) {\n return type['name'] || typeof type;\n}\nlet NgIf = /*#__PURE__*/(() => {\n class NgIf {\n _viewContainer;\n _context = new NgIfContext();\n _thenTemplateRef = null;\n _elseTemplateRef = null;\n _thenViewRef = null;\n _elseViewRef = null;\n constructor(_viewContainer, templateRef) {\n this._viewContainer = _viewContainer;\n this._thenTemplateRef = templateRef;\n }\n set ngIf(condition) {\n this._context.$implicit = this._context.ngIf = condition;\n this._updateView();\n }\n set ngIfThen(templateRef) {\n assertTemplate(templateRef, (typeof ngDevMode === 'undefined' || ngDevMode) && 'ngIfThen');\n this._thenTemplateRef = templateRef;\n this._thenViewRef = null;\n this._updateView();\n }\n set ngIfElse(templateRef) {\n assertTemplate(templateRef, (typeof ngDevMode === 'undefined' || ngDevMode) && 'ngIfElse');\n this._elseTemplateRef = templateRef;\n this._elseViewRef = null;\n this._updateView();\n }\n _updateView() {\n if (this._context.$implicit) {\n if (!this._thenViewRef) {\n this._viewContainer.clear();\n this._elseViewRef = null;\n if (this._thenTemplateRef) {\n this._thenViewRef = this._viewContainer.createEmbeddedView(this._thenTemplateRef, this._context);\n }\n }\n } else {\n if (!this._elseViewRef) {\n this._viewContainer.clear();\n this._thenViewRef = null;\n if (this._elseTemplateRef) {\n this._elseViewRef = this._viewContainer.createEmbeddedView(this._elseTemplateRef, this._context);\n }\n }\n }\n }\n static ngIfUseIfTypeGuard;\n static ngTemplateGuard_ngIf;\n static ngTemplateContextGuard(dir, ctx) {\n return true;\n }\n static ɵfac = function NgIf_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || NgIf)(i0.ɵɵdirectiveInject(i0.ViewContainerRef), i0.ɵɵdirectiveInject(i0.TemplateRef));\n };\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: NgIf,\n selectors: [[\"\", \"ngIf\", \"\"]],\n inputs: {\n ngIf: \"ngIf\",\n ngIfThen: \"ngIfThen\",\n ngIfElse: \"ngIfElse\"\n }\n });\n }\n return NgIf;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nclass NgIfContext {\n $implicit = null;\n ngIf = null;\n}\nfunction assertTemplate(templateRef, property) {\n if (templateRef && !templateRef.createEmbeddedView) {\n throw new _RuntimeError(2020, (typeof ngDevMode === 'undefined' || ngDevMode) && `${property} must be a TemplateRef, but received '${_stringify(templateRef)}'.`);\n }\n}\nclass SwitchView {\n _viewContainerRef;\n _templateRef;\n _created = false;\n constructor(_viewContainerRef, _templateRef) {\n this._viewContainerRef = _viewContainerRef;\n this._templateRef = _templateRef;\n }\n create() {\n this._created = true;\n this._viewContainerRef.createEmbeddedView(this._templateRef);\n }\n destroy() {\n this._created = false;\n this._viewContainerRef.clear();\n }\n enforceState(created) {\n if (created && !this._created) {\n this.create();\n } else if (!created && this._created) {\n this.destroy();\n }\n }\n}\nlet NgSwitch = /*#__PURE__*/(() => {\n class NgSwitch {\n _defaultViews = [];\n _defaultUsed = false;\n _caseCount = 0;\n _lastCaseCheckIndex = 0;\n _lastCasesMatched = false;\n _ngSwitch;\n set ngSwitch(newValue) {\n this._ngSwitch = newValue;\n if (this._caseCount === 0) {\n this._updateDefaultCases(true);\n }\n }\n _addCase() {\n return this._caseCount++;\n }\n _addDefault(view) {\n this._defaultViews.push(view);\n }\n _matchCase(value) {\n const matched = value === this._ngSwitch;\n this._lastCasesMatched ||= matched;\n this._lastCaseCheckIndex++;\n if (this._lastCaseCheckIndex === this._caseCount) {\n this._updateDefaultCases(!this._lastCasesMatched);\n this._lastCaseCheckIndex = 0;\n this._lastCasesMatched = false;\n }\n return matched;\n }\n _updateDefaultCases(useDefault) {\n if (this._defaultViews.length > 0 && useDefault !== this._defaultUsed) {\n this._defaultUsed = useDefault;\n for (const defaultView of this._defaultViews) {\n defaultView.enforceState(useDefault);\n }\n }\n }\n static ɵfac = function NgSwitch_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || NgSwitch)();\n };\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: NgSwitch,\n selectors: [[\"\", \"ngSwitch\", \"\"]],\n inputs: {\n ngSwitch: \"ngSwitch\"\n }\n });\n }\n return NgSwitch;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet NgSwitchCase = /*#__PURE__*/(() => {\n class NgSwitchCase {\n ngSwitch;\n _view;\n ngSwitchCase;\n constructor(viewContainer, templateRef, ngSwitch) {\n this.ngSwitch = ngSwitch;\n if ((typeof ngDevMode === 'undefined' || ngDevMode) && !ngSwitch) {\n throwNgSwitchProviderNotFoundError('ngSwitchCase', 'NgSwitchCase');\n }\n ngSwitch._addCase();\n this._view = new SwitchView(viewContainer, templateRef);\n }\n ngDoCheck() {\n this._view.enforceState(this.ngSwitch._matchCase(this.ngSwitchCase));\n }\n static ɵfac = function NgSwitchCase_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || NgSwitchCase)(i0.ɵɵdirectiveInject(i0.ViewContainerRef), i0.ɵɵdirectiveInject(i0.TemplateRef), i0.ɵɵdirectiveInject(NgSwitch, 9));\n };\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: NgSwitchCase,\n selectors: [[\"\", \"ngSwitchCase\", \"\"]],\n inputs: {\n ngSwitchCase: \"ngSwitchCase\"\n }\n });\n }\n return NgSwitchCase;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet NgSwitchDefault = /*#__PURE__*/(() => {\n class NgSwitchDefault {\n constructor(viewContainer, templateRef, ngSwitch) {\n if ((typeof ngDevMode === 'undefined' || ngDevMode) && !ngSwitch) {\n throwNgSwitchProviderNotFoundError('ngSwitchDefault', 'NgSwitchDefault');\n }\n ngSwitch._addDefault(new SwitchView(viewContainer, templateRef));\n }\n static ɵfac = function NgSwitchDefault_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || NgSwitchDefault)(i0.ɵɵdirectiveInject(i0.ViewContainerRef), i0.ɵɵdirectiveInject(i0.TemplateRef), i0.ɵɵdirectiveInject(NgSwitch, 9));\n };\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: NgSwitchDefault,\n selectors: [[\"\", \"ngSwitchDefault\", \"\"]]\n });\n }\n return NgSwitchDefault;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nfunction throwNgSwitchProviderNotFoundError(attrName, directiveName) {\n throw new _RuntimeError(2000, `An element with the \"${attrName}\" attribute ` + `(matching the \"${directiveName}\" directive) must be located inside an element with the \"ngSwitch\" attribute ` + `(matching \"NgSwitch\" directive)`);\n}\nlet NgPlural = /*#__PURE__*/(() => {\n class NgPlural {\n _localization;\n _activeView;\n _caseViews = {};\n constructor(_localization) {\n this._localization = _localization;\n }\n set ngPlural(value) {\n this._updateView(value);\n }\n addCase(value, switchView) {\n this._caseViews[value] = switchView;\n }\n _updateView(switchValue) {\n this._clearViews();\n const cases = Object.keys(this._caseViews);\n const key = getPluralCategory(switchValue, cases, this._localization);\n this._activateView(this._caseViews[key]);\n }\n _clearViews() {\n if (this._activeView) this._activeView.destroy();\n }\n _activateView(view) {\n if (view) {\n this._activeView = view;\n this._activeView.create();\n }\n }\n static ɵfac = function NgPlural_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || NgPlural)(i0.ɵɵdirectiveInject(NgLocalization));\n };\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: NgPlural,\n selectors: [[\"\", \"ngPlural\", \"\"]],\n inputs: {\n ngPlural: \"ngPlural\"\n }\n });\n }\n return NgPlural;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet NgPluralCase = /*#__PURE__*/(() => {\n class NgPluralCase {\n value;\n constructor(value, template, viewContainer, ngPlural) {\n this.value = value;\n const isANumber = !isNaN(Number(value));\n ngPlural.addCase(isANumber ? `=${value}` : value, new SwitchView(viewContainer, template));\n }\n static ɵfac = function NgPluralCase_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || NgPluralCase)(i0.ɵɵinjectAttribute('ngPluralCase'), i0.ɵɵdirectiveInject(i0.TemplateRef), i0.ɵɵdirectiveInject(i0.ViewContainerRef), i0.ɵɵdirectiveInject(NgPlural, 1));\n };\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: NgPluralCase,\n selectors: [[\"\", \"ngPluralCase\", \"\"]]\n });\n }\n return NgPluralCase;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet NgStyle = /*#__PURE__*/(() => {\n class NgStyle {\n _ngEl;\n _differs;\n _renderer;\n _ngStyle = null;\n _differ = null;\n constructor(_ngEl, _differs, _renderer) {\n this._ngEl = _ngEl;\n this._differs = _differs;\n this._renderer = _renderer;\n }\n set ngStyle(values) {\n this._ngStyle = values;\n if (!this._differ && values) {\n this._differ = this._differs.find(values).create();\n }\n }\n ngDoCheck() {\n if (this._differ) {\n const changes = this._differ.diff(this._ngStyle);\n if (changes) {\n this._applyChanges(changes);\n }\n }\n }\n _setStyle(nameAndUnit, value) {\n const [name, unit] = nameAndUnit.split('.');\n const flags = name.indexOf('-') === -1 ? undefined : RendererStyleFlags2.DashCase;\n if (value != null) {\n this._renderer.setStyle(this._ngEl.nativeElement, name, unit ? `${value}${unit}` : value, flags);\n } else {\n this._renderer.removeStyle(this._ngEl.nativeElement, name, flags);\n }\n }\n _applyChanges(changes) {\n changes.forEachRemovedItem(record => this._setStyle(record.key, null));\n changes.forEachAddedItem(record => this._setStyle(record.key, record.currentValue));\n changes.forEachChangedItem(record => this._setStyle(record.key, record.currentValue));\n }\n static ɵfac = function NgStyle_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || NgStyle)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i0.KeyValueDiffers), i0.ɵɵdirectiveInject(i0.Renderer2));\n };\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: NgStyle,\n selectors: [[\"\", \"ngStyle\", \"\"]],\n inputs: {\n ngStyle: \"ngStyle\"\n }\n });\n }\n return NgStyle;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet NgTemplateOutlet = /*#__PURE__*/(() => {\n class NgTemplateOutlet {\n _viewContainerRef;\n _viewRef = null;\n ngTemplateOutletContext = null;\n ngTemplateOutlet = null;\n ngTemplateOutletInjector = null;\n injector = inject(Injector);\n constructor(_viewContainerRef) {\n this._viewContainerRef = _viewContainerRef;\n }\n ngOnChanges(changes) {\n if (this._shouldRecreateView(changes)) {\n const viewContainerRef = this._viewContainerRef;\n if (this._viewRef) {\n viewContainerRef.remove(viewContainerRef.indexOf(this._viewRef));\n }\n if (!this.ngTemplateOutlet) {\n this._viewRef = null;\n return;\n }\n const viewContext = this._createContextForwardProxy();\n this._viewRef = viewContainerRef.createEmbeddedView(this.ngTemplateOutlet, viewContext, {\n injector: this._getInjector()\n });\n }\n }\n _getInjector() {\n if (this.ngTemplateOutletInjector === 'outlet') {\n return this.injector;\n }\n return this.ngTemplateOutletInjector ?? undefined;\n }\n _shouldRecreateView(changes) {\n return !!changes['ngTemplateOutlet'] || !!changes['ngTemplateOutletInjector'];\n }\n _createContextForwardProxy() {\n return new Proxy({}, {\n set: (_target, prop, newValue) => {\n if (!this.ngTemplateOutletContext) {\n return false;\n }\n return Reflect.set(this.ngTemplateOutletContext, prop, newValue);\n },\n get: (_target, prop, receiver) => {\n if (!this.ngTemplateOutletContext) {\n return undefined;\n }\n return Reflect.get(this.ngTemplateOutletContext, prop, receiver);\n }\n });\n }\n static ɵfac = function NgTemplateOutlet_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || NgTemplateOutlet)(i0.ɵɵdirectiveInject(i0.ViewContainerRef));\n };\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: NgTemplateOutlet,\n selectors: [[\"\", \"ngTemplateOutlet\", \"\"]],\n inputs: {\n ngTemplateOutletContext: \"ngTemplateOutletContext\",\n ngTemplateOutlet: \"ngTemplateOutlet\",\n ngTemplateOutletInjector: \"ngTemplateOutletInjector\"\n },\n features: [i0.ɵɵNgOnChangesFeature]\n });\n }\n return NgTemplateOutlet;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst COMMON_DIRECTIVES = [NgClass, NgComponentOutlet, NgForOf, NgIf, NgTemplateOutlet, NgStyle, NgSwitch, NgSwitchCase, NgSwitchDefault, NgPlural, NgPluralCase];\nfunction invalidPipeArgumentError(type, value) {\n return new _RuntimeError(2100, ngDevMode && `InvalidPipeArgument: '${value}' for pipe '${_stringify(type)}'`);\n}\nfunction warnIfSignal(pipeName, value) {\n if (isSignal(value)) {\n console.warn(`The ${pipeName} does not unwrap signals. Received a signal with value:`, value());\n }\n}\nclass SubscribableStrategy {\n createSubscription(async, updateLatestValue, onError) {\n return untracked(() => async.subscribe({\n next: updateLatestValue,\n error: onError\n }));\n }\n dispose(subscription) {\n untracked(() => subscription.unsubscribe());\n }\n}\nclass PromiseStrategy {\n createSubscription(async, updateLatestValue, onError) {\n async.then(v => updateLatestValue?.(v), e => onError?.(e));\n return {\n unsubscribe: () => {\n updateLatestValue = null;\n onError = null;\n }\n };\n }\n dispose(subscription) {\n subscription.unsubscribe();\n }\n}\nconst _promiseStrategy = /*#__PURE__*/new PromiseStrategy();\nconst _subscribableStrategy = /*#__PURE__*/new SubscribableStrategy();\nlet AsyncPipe = /*#__PURE__*/(() => {\n class AsyncPipe {\n _ref;\n _latestValue = null;\n markForCheckOnValueUpdate = true;\n _subscription = null;\n _obj = null;\n _strategy = null;\n applicationErrorHandler = inject(_INTERNAL_APPLICATION_ERROR_HANDLER);\n constructor(ref) {\n this._ref = ref;\n }\n ngOnDestroy() {\n if (this._subscription) {\n this._dispose();\n }\n this._ref = null;\n }\n transform(obj) {\n if (!this._obj) {\n if (obj) {\n try {\n this.markForCheckOnValueUpdate = false;\n this._subscribe(obj);\n } finally {\n this.markForCheckOnValueUpdate = true;\n }\n }\n return this._latestValue;\n }\n if (obj !== this._obj) {\n this._dispose();\n return this.transform(obj);\n }\n return this._latestValue;\n }\n _subscribe(obj) {\n this._obj = obj;\n this._strategy = this._selectStrategy(obj);\n this._subscription = this._strategy.createSubscription(obj, value => this._updateLatestValue(obj, value), e => this.applicationErrorHandler(e));\n }\n _selectStrategy(obj) {\n if (_isPromise(obj)) {\n return _promiseStrategy;\n }\n if (_isSubscribable(obj)) {\n return _subscribableStrategy;\n }\n throw invalidPipeArgumentError(AsyncPipe, obj);\n }\n _dispose() {\n this._strategy.dispose(this._subscription);\n this._latestValue = null;\n this._subscription = null;\n this._obj = null;\n }\n _updateLatestValue(async, value) {\n if (async === this._obj) {\n this._latestValue = value;\n if (this.markForCheckOnValueUpdate) {\n this._ref?.markForCheck();\n }\n }\n }\n static ɵfac = function AsyncPipe_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || AsyncPipe)(i0.ɵɵdirectiveInject(i0.ChangeDetectorRef, 16));\n };\n static ɵpipe = /* @__PURE__ */i0.ɵɵdefinePipe({\n name: \"async\",\n type: AsyncPipe,\n pure: false\n });\n }\n return AsyncPipe;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet LowerCasePipe = /*#__PURE__*/(() => {\n class LowerCasePipe {\n transform(value) {\n if (value == null) return null;\n assertPipeArgument(LowerCasePipe, value);\n return value.toLowerCase();\n }\n static ɵfac = function LowerCasePipe_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || LowerCasePipe)();\n };\n static ɵpipe = /* @__PURE__ */i0.ɵɵdefinePipe({\n name: \"lowercase\",\n type: LowerCasePipe,\n pure: true\n });\n }\n return LowerCasePipe;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst unicodeWordMatch = /(?:[0-9A-Za-z\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05D0-\\u05EA\\u05EF-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086A\\u0870-\\u0887\\u0889-\\u088E\\u08A0-\\u08C9\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u09FC\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C5D\\u0C60\\u0C61\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D04-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E86-\\u0E8A\\u0E8C-\\u0EA3\\u0EA5\\u0EA7-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16F1-\\u16F8\\u1700-\\u1711\\u171F-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1878\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4C\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1C80-\\u1C88\\u1C90-\\u1CBA\\u1CBD-\\u1CBF\\u1CE9-\\u1CEC\\u1CEE-\\u1CF3\\u1CF5\\u1CF6\\u1CFA\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312F\\u3131-\\u318E\\u31A0-\\u31BF\\u31F0-\\u31FF\\u3400-\\u4DBF\\u4E00-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7CA\\uA7D0\\uA7D1\\uA7D3\\uA7D5-\\uA7D9\\uA7F2-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA8FE\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB69\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF2D-\\uDF40\\uDF42-\\uDF49\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF]|\\uD801[\\uDC00-\\uDC9D\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDD70-\\uDD7A\\uDD7C-\\uDD8A\\uDD8C-\\uDD92\\uDD94\\uDD95\\uDD97-\\uDDA1\\uDDA3-\\uDDB1\\uDDB3-\\uDDB9\\uDDBB\\uDDBC\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67\\uDF80-\\uDF85\\uDF87-\\uDFB0\\uDFB2-\\uDFBA]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE35\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE4\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2\\uDD00-\\uDD23\\uDE80-\\uDEA9\\uDEB0\\uDEB1\\uDF00-\\uDF1C\\uDF27\\uDF30-\\uDF45\\uDF70-\\uDF81\\uDFB0-\\uDFC4\\uDFE0-\\uDFF6]|\\uD804[\\uDC03-\\uDC37\\uDC71\\uDC72\\uDC75\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDD03-\\uDD26\\uDD44\\uDD47\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEDE\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF50\\uDF5D-\\uDF61]|\\uD805[\\uDC00-\\uDC34\\uDC47-\\uDC4A\\uDC5F-\\uDC61\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDD80-\\uDDAE\\uDDD8-\\uDDDB\\uDE00-\\uDE2F\\uDE44\\uDE80-\\uDEAA\\uDEB8\\uDF00-\\uDF1A\\uDF40-\\uDF46]|\\uD806[\\uDC00-\\uDC2B\\uDCA0-\\uDCDF\\uDCFF-\\uDD06\\uDD09\\uDD0C-\\uDD13\\uDD15\\uDD16\\uDD18-\\uDD2F\\uDD3F\\uDD41\\uDDA0-\\uDDA7\\uDDAA-\\uDDD0\\uDDE1\\uDDE3\\uDE00\\uDE0B-\\uDE32\\uDE3A\\uDE50\\uDE5C-\\uDE89\\uDE9D\\uDEB0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC2E\\uDC40\\uDC72-\\uDC8F\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD30\\uDD46\\uDD60-\\uDD65\\uDD67\\uDD68\\uDD6A-\\uDD89\\uDD98\\uDEE0-\\uDEF2\\uDFB0]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC80-\\uDD43]|\\uD80B[\\uDF90-\\uDFF0]|[\\uD80C\\uD81C-\\uD820\\uD822\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879\\uD880-\\uD883][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE70-\\uDEBE\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDE40-\\uDE7F\\uDF00-\\uDF4A\\uDF50\\uDF93-\\uDF9F\\uDFE0\\uDFE1\\uDFE3]|\\uD821[\\uDC00-\\uDFF7]|\\uD823[\\uDC00-\\uDCD5\\uDD00-\\uDD08]|\\uD82B[\\uDFF0-\\uDFF3\\uDFF5-\\uDFFB\\uDFFD\\uDFFE]|\\uD82C[\\uDC00-\\uDD22\\uDD50-\\uDD52\\uDD64-\\uDD67\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB]|\\uD837[\\uDF00-\\uDF1E]|\\uD838[\\uDD00-\\uDD2C\\uDD37-\\uDD3D\\uDD4E\\uDE90-\\uDEAD\\uDEC0-\\uDEEB]|\\uD839[\\uDFE0-\\uDFE6\\uDFE8-\\uDFEB\\uDFED\\uDFEE\\uDFF0-\\uDFFE]|\\uD83A[\\uDC00-\\uDCC4\\uDD00-\\uDD43\\uDD4B]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDEDF\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF38\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]|\\uD884[\\uDC00-\\uDF4A])\\S*/g;\nlet TitleCasePipe = /*#__PURE__*/(() => {\n class TitleCasePipe {\n transform(value) {\n if (value == null) return null;\n assertPipeArgument(TitleCasePipe, value);\n return value.replace(unicodeWordMatch, txt => txt[0].toUpperCase() + txt.slice(1).toLowerCase());\n }\n static ɵfac = function TitleCasePipe_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || TitleCasePipe)();\n };\n static ɵpipe = /* @__PURE__ */i0.ɵɵdefinePipe({\n name: \"titlecase\",\n type: TitleCasePipe,\n pure: true\n });\n }\n return TitleCasePipe;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet UpperCasePipe = /*#__PURE__*/(() => {\n class UpperCasePipe {\n transform(value) {\n if (value == null) return null;\n assertPipeArgument(UpperCasePipe, value);\n return value.toUpperCase();\n }\n static ɵfac = function UpperCasePipe_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || UpperCasePipe)();\n };\n static ɵpipe = /* @__PURE__ */i0.ɵɵdefinePipe({\n name: \"uppercase\",\n type: UpperCasePipe,\n pure: true\n });\n }\n return UpperCasePipe;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nfunction assertPipeArgument(pipe, value) {\n if (typeof value !== 'string') {\n throw invalidPipeArgumentError(pipe, value);\n }\n}\nconst DEFAULT_DATE_FORMAT = 'mediumDate';\nconst DATE_PIPE_DEFAULT_TIMEZONE = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'DATE_PIPE_DEFAULT_TIMEZONE' : '');\nconst DATE_PIPE_DEFAULT_OPTIONS = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'DATE_PIPE_DEFAULT_OPTIONS' : '');\nlet DatePipe = /*#__PURE__*/(() => {\n class DatePipe {\n locale;\n defaultTimezone;\n defaultOptions;\n constructor(locale, defaultTimezone, defaultOptions) {\n this.locale = locale;\n this.defaultTimezone = defaultTimezone;\n this.defaultOptions = defaultOptions;\n }\n transform(value, format, timezone, locale) {\n if (value == null || value === '' || value !== value) return null;\n try {\n const _format = format ?? this.defaultOptions?.dateFormat ?? DEFAULT_DATE_FORMAT;\n const _timezone = timezone ?? this.defaultOptions?.timezone ?? this.defaultTimezone ?? undefined;\n return formatDate(value, _format, locale || this.locale, _timezone);\n } catch (error) {\n throw invalidPipeArgumentError(DatePipe, error.message);\n }\n }\n static ɵfac = function DatePipe_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || DatePipe)(i0.ɵɵdirectiveInject(LOCALE_ID, 16), i0.ɵɵdirectiveInject(DATE_PIPE_DEFAULT_TIMEZONE, 24), i0.ɵɵdirectiveInject(DATE_PIPE_DEFAULT_OPTIONS, 24));\n };\n static ɵpipe = /* @__PURE__ */i0.ɵɵdefinePipe({\n name: \"date\",\n type: DatePipe,\n pure: true\n });\n }\n return DatePipe;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst _INTERPOLATION_REGEXP = /#/g;\nlet I18nPluralPipe = /*#__PURE__*/(() => {\n class I18nPluralPipe {\n _localization;\n constructor(_localization) {\n this._localization = _localization;\n }\n transform(value, pluralMap, locale) {\n if (value == null) return '';\n if (typeof pluralMap !== 'object' || pluralMap === null) {\n throw invalidPipeArgumentError(I18nPluralPipe, pluralMap);\n }\n const key = getPluralCategory(value, Object.keys(pluralMap), this._localization, locale);\n return pluralMap[key].replace(_INTERPOLATION_REGEXP, value.toString());\n }\n static ɵfac = function I18nPluralPipe_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || I18nPluralPipe)(i0.ɵɵdirectiveInject(NgLocalization, 16));\n };\n static ɵpipe = /* @__PURE__ */i0.ɵɵdefinePipe({\n name: \"i18nPlural\",\n type: I18nPluralPipe,\n pure: true\n });\n }\n return I18nPluralPipe;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet I18nSelectPipe = /*#__PURE__*/(() => {\n class I18nSelectPipe {\n transform(value, mapping) {\n if (value == null) return '';\n if (typeof mapping !== 'object' || typeof value !== 'string') {\n throw invalidPipeArgumentError(I18nSelectPipe, mapping);\n }\n if (mapping.hasOwnProperty(value)) {\n return mapping[value];\n }\n if (mapping.hasOwnProperty('other')) {\n return mapping['other'];\n }\n return '';\n }\n static ɵfac = function I18nSelectPipe_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || I18nSelectPipe)();\n };\n static ɵpipe = /* @__PURE__ */i0.ɵɵdefinePipe({\n name: \"i18nSelect\",\n type: I18nSelectPipe,\n pure: true\n });\n }\n return I18nSelectPipe;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet JsonPipe = /*#__PURE__*/(() => {\n class JsonPipe {\n transform(value) {\n ngDevMode && warnIfSignal('JsonPipe', value);\n return JSON.stringify(value, null, 2);\n }\n static ɵfac = function JsonPipe_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || JsonPipe)();\n };\n static ɵpipe = /* @__PURE__ */i0.ɵɵdefinePipe({\n name: \"json\",\n type: JsonPipe,\n pure: false\n });\n }\n return JsonPipe;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nfunction makeKeyValuePair(key, value) {\n return {\n key: key,\n value: value\n };\n}\nlet KeyValuePipe = /*#__PURE__*/(() => {\n class KeyValuePipe {\n differs;\n constructor(differs) {\n this.differs = differs;\n }\n differ;\n keyValues = [];\n compareFn = defaultComparator;\n transform(input, compareFn = defaultComparator) {\n ngDevMode && warnIfSignal('KeyValuePipe', input);\n if (!input || !(input instanceof Map) && typeof input !== 'object') {\n return null;\n }\n this.differ ??= this.differs.find(input).create();\n const differChanges = this.differ.diff(input);\n const compareFnChanged = compareFn !== this.compareFn;\n if (differChanges) {\n this.keyValues = [];\n differChanges.forEachItem(r => {\n this.keyValues.push(makeKeyValuePair(r.key, r.currentValue));\n });\n }\n if (differChanges || compareFnChanged) {\n if (compareFn) {\n this.keyValues.sort(compareFn);\n }\n this.compareFn = compareFn;\n }\n return this.keyValues;\n }\n static ɵfac = function KeyValuePipe_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || KeyValuePipe)(i0.ɵɵdirectiveInject(i0.KeyValueDiffers, 16));\n };\n static ɵpipe = /* @__PURE__ */i0.ɵɵdefinePipe({\n name: \"keyvalue\",\n type: KeyValuePipe,\n pure: false\n });\n }\n return KeyValuePipe;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nfunction defaultComparator(keyValueA, keyValueB) {\n const a = keyValueA.key;\n const b = keyValueB.key;\n if (a === b) return 0;\n if (a == null) return 1;\n if (b == null) return -1;\n if (typeof a == 'string' && typeof b == 'string') {\n return a < b ? -1 : 1;\n }\n if (typeof a == 'number' && typeof b == 'number') {\n return a - b;\n }\n if (typeof a == 'boolean' && typeof b == 'boolean') {\n return a < b ? -1 : 1;\n }\n const aString = String(a);\n const bString = String(b);\n return aString == bString ? 0 : aString < bString ? -1 : 1;\n}\nlet DecimalPipe = /*#__PURE__*/(() => {\n class DecimalPipe {\n _locale;\n constructor(_locale) {\n this._locale = _locale;\n }\n transform(value, digitsInfo, locale) {\n if (!isValue(value)) return null;\n locale ||= this._locale;\n try {\n const num = strToNumber(value);\n return formatNumber(num, locale, digitsInfo);\n } catch (error) {\n throw invalidPipeArgumentError(DecimalPipe, error.message);\n }\n }\n static ɵfac = function DecimalPipe_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || DecimalPipe)(i0.ɵɵdirectiveInject(LOCALE_ID, 16));\n };\n static ɵpipe = /* @__PURE__ */i0.ɵɵdefinePipe({\n name: \"number\",\n type: DecimalPipe,\n pure: true\n });\n }\n return DecimalPipe;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet PercentPipe = /*#__PURE__*/(() => {\n class PercentPipe {\n _locale;\n constructor(_locale) {\n this._locale = _locale;\n }\n transform(value, digitsInfo, locale) {\n if (!isValue(value)) return null;\n locale ||= this._locale;\n try {\n const num = strToNumber(value);\n return formatPercent(num, locale, digitsInfo);\n } catch (error) {\n throw invalidPipeArgumentError(PercentPipe, error.message);\n }\n }\n static ɵfac = function PercentPipe_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || PercentPipe)(i0.ɵɵdirectiveInject(LOCALE_ID, 16));\n };\n static ɵpipe = /* @__PURE__ */i0.ɵɵdefinePipe({\n name: \"percent\",\n type: PercentPipe,\n pure: true\n });\n }\n return PercentPipe;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet CurrencyPipe = /*#__PURE__*/(() => {\n class CurrencyPipe {\n _locale;\n _defaultCurrencyCode;\n constructor(_locale, _defaultCurrencyCode = 'USD') {\n this._locale = _locale;\n this._defaultCurrencyCode = _defaultCurrencyCode;\n }\n transform(value, currencyCode = this._defaultCurrencyCode, display = 'symbol', digitsInfo, locale) {\n if (!isValue(value)) return null;\n locale ||= this._locale;\n if (typeof display === 'boolean') {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n console.warn(`Warning: the currency pipe has been changed in Angular v5. The symbolDisplay option (third parameter) is now a string instead of a boolean. The accepted values are \"code\", \"symbol\" or \"symbol-narrow\".`);\n }\n display = display ? 'symbol' : 'code';\n }\n let currency = currencyCode || this._defaultCurrencyCode;\n if (display !== 'code') {\n if (display === 'symbol' || display === 'symbol-narrow') {\n currency = getCurrencySymbol(currency, display === 'symbol' ? 'wide' : 'narrow', locale);\n } else {\n currency = display;\n }\n }\n try {\n const num = strToNumber(value);\n return formatCurrency(num, locale, currency, currencyCode, digitsInfo);\n } catch (error) {\n throw invalidPipeArgumentError(CurrencyPipe, error.message);\n }\n }\n static ɵfac = function CurrencyPipe_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || CurrencyPipe)(i0.ɵɵdirectiveInject(LOCALE_ID, 16), i0.ɵɵdirectiveInject(DEFAULT_CURRENCY_CODE, 16));\n };\n static ɵpipe = /* @__PURE__ */i0.ɵɵdefinePipe({\n name: \"currency\",\n type: CurrencyPipe,\n pure: true\n });\n }\n return CurrencyPipe;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nfunction isValue(value) {\n return !(value == null || value === '' || value !== value);\n}\nfunction strToNumber(value) {\n if (typeof value === 'string' && !isNaN(Number(value) - parseFloat(value))) {\n return Number(value);\n }\n if (typeof value !== 'number') {\n throw new _RuntimeError(2309, ngDevMode && `${value} is not a number`);\n }\n return value;\n}\nlet SlicePipe = /*#__PURE__*/(() => {\n class SlicePipe {\n transform(value, start, end) {\n if (value == null) return null;\n const supports = typeof value === 'string' || Array.isArray(value);\n if (!supports) {\n throw invalidPipeArgumentError(SlicePipe, value);\n }\n return value.slice(start, end);\n }\n static ɵfac = function SlicePipe_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || SlicePipe)();\n };\n static ɵpipe = /* @__PURE__ */i0.ɵɵdefinePipe({\n name: \"slice\",\n type: SlicePipe,\n pure: false\n });\n }\n return SlicePipe;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst COMMON_PIPES = [AsyncPipe, UpperCasePipe, LowerCasePipe, JsonPipe, SlicePipe, DecimalPipe, PercentPipe, TitleCasePipe, CurrencyPipe, DatePipe, I18nPluralPipe, I18nSelectPipe, KeyValuePipe];\nlet CommonModule = /*#__PURE__*/(() => {\n class CommonModule {\n static ɵfac = function CommonModule_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || CommonModule)();\n };\n static ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: CommonModule\n });\n static ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({});\n }\n return CommonModule;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nexport { AsyncPipe, CommonModule, CurrencyPipe, DATE_PIPE_DEFAULT_OPTIONS, DATE_PIPE_DEFAULT_TIMEZONE, DatePipe, DecimalPipe, FormStyle, FormatWidth, HashLocationStrategy, I18nPluralPipe, I18nSelectPipe, JsonPipe, KeyValuePipe, LowerCasePipe, NgClass, NgComponentOutlet, NgForOf, NgForOfContext, NgIf, NgIfContext, NgLocaleLocalization, NgLocalization, NgPlural, NgPluralCase, NgStyle, NgSwitch, NgSwitchCase, NgSwitchDefault, NgTemplateOutlet, NumberFormatStyle, NumberSymbol, PercentPipe, Plural, SlicePipe, TitleCasePipe, TranslationWidth, UpperCasePipe, WeekDay, formatCurrency, formatDate, formatNumber, formatPercent, getCurrencySymbol, getLocaleCurrencyCode, getLocaleCurrencyName, getLocaleCurrencySymbol, getLocaleDateFormat, getLocaleDateTimeFormat, getLocaleDayNames, getLocaleDayPeriods, getLocaleDirection, getLocaleEraNames, getLocaleExtraDayPeriodRules, getLocaleExtraDayPeriods, getLocaleFirstDayOfWeek, getLocaleId, getLocaleMonthNames, getLocaleNumberFormat, getLocaleNumberSymbol, getLocalePluralCase, getLocaleTimeFormat, getLocaleWeekEndRange, getNumberOfCurrencyDigits };\n","/**\n * @license Angular v21.2.4\n * (c) 2010-2026 Google LLC. https://angular.dev/\n * License: MIT\n */\n\nexport { AsyncPipe, CommonModule, CurrencyPipe, DATE_PIPE_DEFAULT_OPTIONS, DATE_PIPE_DEFAULT_TIMEZONE, DatePipe, DecimalPipe, FormStyle, FormatWidth, HashLocationStrategy, I18nPluralPipe, I18nSelectPipe, JsonPipe, KeyValuePipe, LowerCasePipe, NgClass, NgComponentOutlet, NgForOf as NgFor, NgForOf, NgForOfContext, NgIf, NgIfContext, NgLocaleLocalization, NgLocalization, NgPlural, NgPluralCase, NgStyle, NgSwitch, NgSwitchCase, NgSwitchDefault, NgTemplateOutlet, NumberFormatStyle, NumberSymbol, PercentPipe, Plural, SlicePipe, TitleCasePipe, TranslationWidth, UpperCasePipe, WeekDay, formatCurrency, formatDate, formatNumber, formatPercent, getCurrencySymbol, getLocaleCurrencyCode, getLocaleCurrencyName, getLocaleCurrencySymbol, getLocaleDateFormat, getLocaleDateTimeFormat, getLocaleDayNames, getLocaleDayPeriods, getLocaleDirection, getLocaleEraNames, getLocaleExtraDayPeriodRules, getLocaleExtraDayPeriods, getLocaleFirstDayOfWeek, getLocaleId, getLocaleMonthNames, getLocaleNumberFormat, getLocaleNumberSymbol, getLocalePluralCase, getLocaleTimeFormat, getLocaleWeekEndRange, getNumberOfCurrencyDigits } from './_common_module-chunk.mjs';\nimport * as i0 from '@angular/core';\nimport { inject, DestroyRef, Injectable, ɵregisterLocaleData as _registerLocaleData, Version, ɵɵdefineInjectable as __defineInjectable, DOCUMENT, ɵformatRuntimeError as _formatRuntimeError, InjectionToken, ɵRuntimeError as _RuntimeError, ɵIMAGE_CONFIG as _IMAGE_CONFIG, Renderer2, ElementRef, Injector, ɵperformanceMarkFeature as _performanceMarkFeature, NgZone, ApplicationRef, numberAttribute, booleanAttribute, Directive, Input, ɵIMAGE_CONFIG_DEFAULTS as _IMAGE_CONFIG_DEFAULTS, ɵunwrapSafeValue as _unwrapSafeValue, ChangeDetectorRef } from '@angular/core';\nexport { DOCUMENT, ɵIMAGE_CONFIG as IMAGE_CONFIG } from '@angular/core';\nimport { PlatformNavigation } from './_platform_navigation-chunk.mjs';\nexport { PRECOMMIT_HANDLER_SUPPORTED as ɵPRECOMMIT_HANDLER_SUPPORTED } from './_platform_navigation-chunk.mjs';\nexport { XhrFactory, parseCookieValue as ɵparseCookieValue } from './_xhr-chunk.mjs';\nimport { Location, LocationStrategy, normalizeQueryParams } from './_location-chunk.mjs';\nexport { APP_BASE_HREF, NoTrailingSlashPathLocationStrategy, PathLocationStrategy, TrailingSlashPathLocationStrategy } from './_location-chunk.mjs';\nexport { BrowserPlatformLocation, LOCATION_INITIALIZED, PlatformLocation, DomAdapter as ɵDomAdapter, getDOM as ɵgetDOM, setRootDomAdapter as ɵsetRootDomAdapter } from './_platform_location-chunk.mjs';\nimport 'rxjs';\nlet NavigationAdapterForLocation = /*#__PURE__*/(() => {\n class NavigationAdapterForLocation extends Location {\n navigation = inject(PlatformNavigation);\n destroyRef = inject(DestroyRef);\n constructor() {\n super(inject(LocationStrategy));\n this.registerNavigationListeners();\n }\n registerNavigationListeners() {\n const currentEntryChangeListener = () => {\n this._notifyUrlChangeListeners(this.path(true), this.getState());\n };\n this.navigation.addEventListener('currententrychange', currentEntryChangeListener);\n this.destroyRef.onDestroy(() => {\n this.navigation.removeEventListener('currententrychange', currentEntryChangeListener);\n });\n }\n getState() {\n return this.navigation.currentEntry?.getState();\n }\n replaceState(path, query = '', state = null) {\n const url = this.prepareExternalUrl(path + normalizeQueryParams(query));\n this.navigation.navigate(url, {\n state,\n history: 'replace'\n });\n }\n go(path, query = '', state = null) {\n const url = this.prepareExternalUrl(path + normalizeQueryParams(query));\n this.navigation.navigate(url, {\n state,\n history: 'push'\n });\n }\n back() {\n this.navigation.back();\n }\n forward() {\n this.navigation.forward();\n }\n onUrlChange(fn) {\n this._urlChangeListeners.push(fn);\n return () => {\n const fnIndex = this._urlChangeListeners.indexOf(fn);\n this._urlChangeListeners.splice(fnIndex, 1);\n };\n }\n static ɵfac = function NavigationAdapterForLocation_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || NavigationAdapterForLocation)();\n };\n static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: NavigationAdapterForLocation,\n factory: NavigationAdapterForLocation.ɵfac\n });\n }\n return NavigationAdapterForLocation;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nfunction registerLocaleData(data, localeId, extraData) {\n return _registerLocaleData(data, localeId, extraData);\n}\nconst PLATFORM_BROWSER_ID = 'browser';\nconst PLATFORM_SERVER_ID = 'server';\nfunction isPlatformBrowser(platformId) {\n return platformId === PLATFORM_BROWSER_ID;\n}\nfunction isPlatformServer(platformId) {\n return platformId === PLATFORM_SERVER_ID;\n}\nconst VERSION = /* @__PURE__ */new Version('21.2.4');\nlet ViewportScroller = /*#__PURE__*/(() => {\n class ViewportScroller {\n static ɵprov = /* @__PURE__ */\n __defineInjectable({\n token: ViewportScroller,\n providedIn: 'root',\n factory: () => typeof ngServerMode !== 'undefined' && ngServerMode ? new NullViewportScroller() : new BrowserViewportScroller(inject(DOCUMENT), window)\n });\n }\n return ViewportScroller;\n})();\nclass BrowserViewportScroller {\n document;\n window;\n offset = () => [0, 0];\n constructor(document, window) {\n this.document = document;\n this.window = window;\n }\n setOffset(offset) {\n if (Array.isArray(offset)) {\n this.offset = () => offset;\n } else {\n this.offset = offset;\n }\n }\n getScrollPosition() {\n return [this.window.scrollX, this.window.scrollY];\n }\n scrollToPosition(position, options) {\n this.window.scrollTo({\n ...options,\n left: position[0],\n top: position[1]\n });\n }\n scrollToAnchor(target, options) {\n const elSelected = findAnchorFromDocument(this.document, target);\n if (elSelected) {\n this.scrollToElement(elSelected, options);\n elSelected.focus();\n }\n }\n setHistoryScrollRestoration(scrollRestoration) {\n try {\n this.window.history.scrollRestoration = scrollRestoration;\n } catch {\n console.warn(_formatRuntimeError(2400, ngDevMode && 'Failed to set `window.history.scrollRestoration`. ' + 'This may occur when:\\n' + '• The script is running inside a sandboxed iframe\\n' + '• The window is partially navigated or inactive\\n' + '• The script is executed in an untrusted or special context (e.g., test runners, browser extensions, or content previews)\\n' + 'Scroll position may not be preserved across navigation.'));\n }\n }\n scrollToElement(el, options) {\n const rect = el.getBoundingClientRect();\n const left = rect.left + this.window.pageXOffset;\n const top = rect.top + this.window.pageYOffset;\n const offset = this.offset();\n this.window.scrollTo({\n ...options,\n left: left - offset[0],\n top: top - offset[1]\n });\n }\n}\nfunction findAnchorFromDocument(document, target) {\n const documentResult = document.getElementById(target) || document.getElementsByName(target)[0];\n if (documentResult) {\n return documentResult;\n }\n if (typeof document.createTreeWalker === 'function' && document.body && typeof document.body.attachShadow === 'function') {\n const treeWalker = document.createTreeWalker(document.body, NodeFilter.SHOW_ELEMENT);\n let currentNode = treeWalker.currentNode;\n while (currentNode) {\n const shadowRoot = currentNode.shadowRoot;\n if (shadowRoot) {\n const result = shadowRoot.getElementById(target) || shadowRoot.querySelector(`[name=\"${target}\"]`);\n if (result) {\n return result;\n }\n }\n currentNode = treeWalker.nextNode();\n }\n }\n return null;\n}\nclass NullViewportScroller {\n setOffset(offset) {}\n getScrollPosition() {\n return [0, 0];\n }\n scrollToPosition(position) {}\n scrollToAnchor(anchor) {}\n setHistoryScrollRestoration(scrollRestoration) {}\n}\nconst PLACEHOLDER_QUALITY = '20';\nfunction getUrl(src, win) {\n return isAbsoluteUrl(src) ? new URL(src) : new URL(src, win.location.href);\n}\nfunction isAbsoluteUrl(src) {\n return /^https?:\\/\\//.test(src);\n}\nfunction extractHostname(url) {\n return isAbsoluteUrl(url) ? new URL(url).hostname : url;\n}\nfunction isValidPath(path) {\n const isString = typeof path === 'string';\n if (!isString || path.trim() === '') {\n return false;\n }\n try {\n const url = new URL(path);\n return true;\n } catch {\n return false;\n }\n}\nfunction normalizePath(path) {\n return path.endsWith('/') ? path.slice(0, -1) : path;\n}\nfunction normalizeSrc(src) {\n return src.startsWith('/') ? src.slice(1) : src;\n}\nconst noopImageLoader = config => config.src;\nconst IMAGE_LOADER = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'ImageLoader' : '', {\n factory: () => noopImageLoader\n});\nfunction createImageLoader(buildUrlFn, exampleUrls) {\n return function provideImageLoader(path) {\n if (!isValidPath(path)) {\n throwInvalidPathError(path, exampleUrls || []);\n }\n path = normalizePath(path);\n const loaderFn = config => {\n if (isAbsoluteUrl(config.src)) {\n throwUnexpectedAbsoluteUrlError(path, config.src);\n }\n return buildUrlFn(path, {\n ...config,\n src: normalizeSrc(config.src)\n });\n };\n const providers = [{\n provide: IMAGE_LOADER,\n useValue: loaderFn\n }];\n return providers;\n };\n}\nfunction throwInvalidPathError(path, exampleUrls) {\n throw new _RuntimeError(2959, ngDevMode && `Image loader has detected an invalid path (\\`${path}\\`). ` + `To fix this, supply a path using one of the following formats: ${exampleUrls.join(' or ')}`);\n}\nfunction throwUnexpectedAbsoluteUrlError(path, url) {\n throw new _RuntimeError(2959, ngDevMode && `Image loader has detected a \\`\\` tag with an invalid \\`ngSrc\\` attribute: ${url}. ` + `This image loader expects \\`ngSrc\\` to be a relative URL - ` + `however the provided value is an absolute URL. ` + `To fix this, provide \\`ngSrc\\` as a path relative to the base URL ` + `configured for this loader (\\`${path}\\`).`);\n}\nfunction normalizeLoaderTransform(transform, separator) {\n if (typeof transform === 'string') {\n return transform;\n }\n return Object.entries(transform).map(([key, value]) => `${key}${separator}${value}`).join(',');\n}\nconst provideCloudflareLoader = /*#__PURE__*/createImageLoader(createCloudflareUrl, ngDevMode ? ['https:///cdn-cgi/image//'] : undefined);\nfunction createCloudflareUrl(path, config) {\n let params = `format=auto`;\n if (config.width) {\n params += `,width=${config.width}`;\n }\n if (config.height) {\n params += `,height=${config.height}`;\n }\n if (config.isPlaceholder) {\n params += `,quality=${PLACEHOLDER_QUALITY}`;\n }\n if (config.loaderParams?.['transform']) {\n const transformStr = normalizeLoaderTransform(config.loaderParams['transform'], '=');\n params += `,${transformStr}`;\n }\n return `${path}/cdn-cgi/image/${params}/${config.src}`;\n}\nconst cloudinaryLoaderInfo = {\n name: 'Cloudinary',\n testUrl: isCloudinaryUrl\n};\nconst CLOUDINARY_LOADER_REGEX = /https?\\:\\/\\/[^\\/]+\\.cloudinary\\.com\\/.+/;\nfunction isCloudinaryUrl(url) {\n return CLOUDINARY_LOADER_REGEX.test(url);\n}\nconst provideCloudinaryLoader = /*#__PURE__*/createImageLoader(createCloudinaryUrl, ngDevMode ? ['https://res.cloudinary.com/mysite', 'https://mysite.cloudinary.com', 'https://subdomain.mysite.com'] : undefined);\nfunction createCloudinaryUrl(path, config) {\n const quality = config.isPlaceholder ? 'q_auto:low' : 'q_auto';\n let params = `f_auto,${quality}`;\n if (config.width) {\n params += `,w_${config.width}`;\n }\n if (config.height) {\n params += `,h_${config.height}`;\n }\n if (config.loaderParams?.['rounded']) {\n params += `,r_max`;\n }\n if (config.loaderParams?.['transform']) {\n const transformStr = normalizeLoaderTransform(config.loaderParams['transform'], '_');\n params += `,${transformStr}`;\n }\n return `${path}/image/upload/${params}/${config.src}`;\n}\nconst imageKitLoaderInfo = {\n name: 'ImageKit',\n testUrl: isImageKitUrl\n};\nconst IMAGE_KIT_LOADER_REGEX = /https?\\:\\/\\/[^\\/]+\\.imagekit\\.io\\/.+/;\nfunction isImageKitUrl(url) {\n return IMAGE_KIT_LOADER_REGEX.test(url);\n}\nconst provideImageKitLoader = /*#__PURE__*/createImageLoader(createImagekitUrl, ngDevMode ? ['https://ik.imagekit.io/mysite', 'https://subdomain.mysite.com'] : undefined);\nfunction createImagekitUrl(path, config) {\n const {\n src,\n width\n } = config;\n const params = [];\n if (width) {\n params.push(`w-${width}`);\n }\n if (config.height) {\n params.push(`h-${config.height}`);\n }\n if (config.isPlaceholder) {\n params.push(`q-${PLACEHOLDER_QUALITY}`);\n }\n if (config.loaderParams?.['transform']) {\n const transformStr = normalizeLoaderTransform(config.loaderParams['transform'], '-');\n params.push(transformStr);\n }\n const urlSegments = params.length ? [path, `tr:${params.join(',')}`, src] : [path, src];\n const url = new URL(urlSegments.join('/'));\n return url.href;\n}\nconst imgixLoaderInfo = {\n name: 'Imgix',\n testUrl: isImgixUrl\n};\nconst IMGIX_LOADER_REGEX = /https?\\:\\/\\/[^\\/]+\\.imgix\\.net\\/.+/;\nfunction isImgixUrl(url) {\n return IMGIX_LOADER_REGEX.test(url);\n}\nconst provideImgixLoader = /*#__PURE__*/createImageLoader(createImgixUrl, ngDevMode ? ['https://somepath.imgix.net/'] : undefined);\nfunction createImgixUrl(path, config) {\n const params = [];\n params.push('auto=format');\n if (config.width) {\n params.push(`w=${config.width}`);\n }\n if (config.height) {\n params.push(`h=${config.height}`);\n }\n if (config.isPlaceholder) {\n params.push(`q=${PLACEHOLDER_QUALITY}`);\n }\n if (config.loaderParams?.['transform']) {\n const transform = normalizeLoaderTransform(config.loaderParams['transform'], '=').split(',');\n params.push(...transform);\n }\n const url = new URL(`${path}/${config.src}`);\n url.search = params.join('&');\n return url.href;\n}\nconst netlifyLoaderInfo = {\n name: 'Netlify',\n testUrl: isNetlifyUrl\n};\nconst NETLIFY_LOADER_REGEX = /https?\\:\\/\\/[^\\/]+\\.netlify\\.app\\/.+/;\nfunction isNetlifyUrl(url) {\n return NETLIFY_LOADER_REGEX.test(url);\n}\nfunction provideNetlifyLoader(path) {\n if (path && !isValidPath(path)) {\n throw new _RuntimeError(2959, ngDevMode && `Image loader has detected an invalid path (\\`${path}\\`). ` + `To fix this, supply either the full URL to the Netlify site, or leave it empty to use the current site.`);\n }\n if (path) {\n const url = new URL(path);\n path = url.origin;\n }\n const loaderFn = config => {\n return createNetlifyUrl(config, path);\n };\n const providers = [{\n provide: IMAGE_LOADER,\n useValue: loaderFn\n }];\n return providers;\n}\nconst validParams = /*#__PURE__*/new Map([['height', 'h'], ['fit', 'fit'], ['quality', 'q'], ['q', 'q'], ['position', 'position']]);\nfunction createNetlifyUrl(config, path) {\n const url = new URL(path ?? 'https://a/');\n url.pathname = '/.netlify/images';\n if (!isAbsoluteUrl(config.src) && !config.src.startsWith('/')) {\n config.src = '/' + config.src;\n }\n url.searchParams.set('url', config.src);\n if (config.width) {\n url.searchParams.set('w', config.width.toString());\n }\n if (config.height) {\n url.searchParams.set('h', config.height.toString());\n }\n const configQuality = config.loaderParams?.['quality'] ?? config.loaderParams?.['q'];\n if (config.isPlaceholder && !configQuality) {\n url.searchParams.set('q', PLACEHOLDER_QUALITY);\n }\n for (const [param, value] of Object.entries(config.loaderParams ?? {})) {\n if (validParams.has(param)) {\n url.searchParams.set(validParams.get(param), value.toString());\n } else {\n if (ngDevMode) {\n console.warn(_formatRuntimeError(2959, `The Netlify image loader has detected an \\`\\` tag with the unsupported attribute \"\\`${param}\\`\".`));\n }\n }\n }\n return url.hostname === 'a' ? url.href.replace(url.origin, '') : url.href;\n}\nfunction imgDirectiveDetails(ngSrc, includeNgSrc = true) {\n const ngSrcInfo = includeNgSrc ? `(activated on an element with the \\`ngSrc=\"${ngSrc}\"\\`) ` : '';\n return `The NgOptimizedImage directive ${ngSrcInfo}has detected that`;\n}\nfunction assertDevMode(checkName) {\n if (!ngDevMode) {\n throw new _RuntimeError(2958, `Unexpected invocation of the ${checkName} in the prod mode. ` + `Please make sure that the prod mode is enabled for production builds.`);\n }\n}\nlet LCPImageObserver = /*#__PURE__*/(() => {\n class LCPImageObserver {\n images = new Map();\n window = inject(DOCUMENT).defaultView;\n observer = null;\n constructor() {\n assertDevMode('LCP checker');\n if ((typeof ngServerMode === 'undefined' || !ngServerMode) && typeof PerformanceObserver !== 'undefined') {\n this.observer = this.initPerformanceObserver();\n }\n }\n initPerformanceObserver() {\n const observer = new PerformanceObserver(entryList => {\n const entries = entryList.getEntries();\n if (entries.length === 0) return;\n const lcpElement = entries[entries.length - 1];\n const imgSrc = lcpElement.element?.src ?? '';\n if (imgSrc.startsWith('data:') || imgSrc.startsWith('blob:')) return;\n const img = this.images.get(imgSrc);\n if (!img) return;\n if (!img.priority && !img.alreadyWarnedPriority) {\n img.alreadyWarnedPriority = true;\n logMissingPriorityError(imgSrc);\n }\n if (img.modified && !img.alreadyWarnedModified) {\n img.alreadyWarnedModified = true;\n logModifiedWarning(imgSrc);\n }\n });\n observer.observe({\n type: 'largest-contentful-paint',\n buffered: true\n });\n return observer;\n }\n registerImage(rewrittenSrc, isPriority) {\n if (!this.observer) return;\n const url = getUrl(rewrittenSrc, this.window).href;\n const existingState = this.images.get(url);\n if (existingState) {\n existingState.priority = existingState.priority || isPriority;\n existingState.count++;\n } else {\n const newObservedImageState = {\n priority: isPriority,\n modified: false,\n alreadyWarnedModified: false,\n alreadyWarnedPriority: false,\n count: 1\n };\n this.images.set(url, newObservedImageState);\n }\n }\n unregisterImage(rewrittenSrc) {\n if (!this.observer) return;\n const url = getUrl(rewrittenSrc, this.window).href;\n const existingState = this.images.get(url);\n if (existingState) {\n existingState.count--;\n if (existingState.count <= 0) {\n this.images.delete(url);\n }\n }\n }\n updateImage(originalSrc, newSrc) {\n if (!this.observer) return;\n const originalUrl = getUrl(originalSrc, this.window).href;\n const newUrl = getUrl(newSrc, this.window).href;\n if (originalUrl === newUrl) return;\n const originalState = this.images.get(originalUrl);\n if (!originalState) return;\n originalState.count--;\n if (originalState.count <= 0) {\n this.images.delete(originalUrl);\n }\n const newState = this.images.get(newUrl);\n if (newState) {\n newState.priority = newState.priority || originalState.priority;\n newState.modified = true;\n newState.alreadyWarnedPriority = newState.alreadyWarnedPriority || originalState.alreadyWarnedPriority;\n newState.alreadyWarnedModified = newState.alreadyWarnedModified || originalState.alreadyWarnedModified;\n newState.count++;\n } else {\n this.images.set(newUrl, {\n priority: originalState.priority,\n modified: true,\n alreadyWarnedModified: originalState.alreadyWarnedModified,\n alreadyWarnedPriority: originalState.alreadyWarnedPriority,\n count: 1\n });\n }\n }\n ngOnDestroy() {\n if (!this.observer) return;\n this.observer.disconnect();\n this.images.clear();\n }\n static ɵfac = function LCPImageObserver_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || LCPImageObserver)();\n };\n static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: LCPImageObserver,\n factory: LCPImageObserver.ɵfac,\n providedIn: 'root'\n });\n }\n return LCPImageObserver;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nfunction logMissingPriorityError(ngSrc) {\n const directiveDetails = imgDirectiveDetails(ngSrc);\n console.error(_formatRuntimeError(2955, `${directiveDetails} this image is the Largest Contentful Paint (LCP) ` + `element but was not marked \"priority\". This image should be marked ` + `\"priority\" in order to prioritize its loading. ` + `To fix this, add the \"priority\" attribute.`));\n}\nfunction logModifiedWarning(ngSrc) {\n const directiveDetails = imgDirectiveDetails(ngSrc);\n console.warn(_formatRuntimeError(2964, `${directiveDetails} this image is the Largest Contentful Paint (LCP) ` + `element and has had its \"ngSrc\" attribute modified. This can cause ` + `slower loading performance. It is recommended not to modify the \"ngSrc\" ` + `property on any image which could be the LCP element.`));\n}\nconst INTERNAL_PRECONNECT_CHECK_BLOCKLIST = /*#__PURE__*/new Set(['localhost', '127.0.0.1', '0.0.0.0', '[::1]']);\nconst PRECONNECT_CHECK_BLOCKLIST = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'PRECONNECT_CHECK_BLOCKLIST' : '');\nlet PreconnectLinkChecker = /*#__PURE__*/(() => {\n class PreconnectLinkChecker {\n document = inject(DOCUMENT);\n preconnectLinks = null;\n alreadySeen = new Set();\n window = this.document.defaultView;\n blocklist = new Set(INTERNAL_PRECONNECT_CHECK_BLOCKLIST);\n constructor() {\n assertDevMode('preconnect link checker');\n const blocklist = inject(PRECONNECT_CHECK_BLOCKLIST, {\n optional: true\n });\n if (blocklist) {\n this.populateBlocklist(blocklist);\n }\n }\n populateBlocklist(origins) {\n if (Array.isArray(origins)) {\n deepForEach(origins, origin => {\n this.blocklist.add(extractHostname(origin));\n });\n } else {\n this.blocklist.add(extractHostname(origins));\n }\n }\n assertPreconnect(rewrittenSrc, originalNgSrc) {\n if (typeof ngServerMode !== 'undefined' && ngServerMode) return;\n const imgUrl = getUrl(rewrittenSrc, this.window);\n if (this.blocklist.has(imgUrl.hostname) || this.alreadySeen.has(imgUrl.origin)) return;\n this.alreadySeen.add(imgUrl.origin);\n this.preconnectLinks ??= this.queryPreconnectLinks();\n if (!this.preconnectLinks.has(imgUrl.origin)) {\n console.warn(_formatRuntimeError(2956, `${imgDirectiveDetails(originalNgSrc)} there is no preconnect tag present for this ` + `image. Preconnecting to the origin(s) that serve priority images ensures that these ` + `images are delivered as soon as possible. To fix this, please add the following ` + `element into the of the document:\\n` + ` `));\n }\n }\n queryPreconnectLinks() {\n const preconnectUrls = new Set();\n const links = this.document.querySelectorAll('link[rel=preconnect]');\n for (const link of links) {\n const url = getUrl(link.href, this.window);\n preconnectUrls.add(url.origin);\n }\n return preconnectUrls;\n }\n ngOnDestroy() {\n this.preconnectLinks?.clear();\n this.alreadySeen.clear();\n }\n static ɵfac = function PreconnectLinkChecker_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || PreconnectLinkChecker)();\n };\n static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: PreconnectLinkChecker,\n factory: PreconnectLinkChecker.ɵfac,\n providedIn: 'root'\n });\n }\n return PreconnectLinkChecker;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nfunction deepForEach(input, fn) {\n for (let value of input) {\n Array.isArray(value) ? deepForEach(value, fn) : fn(value);\n }\n}\nconst DEFAULT_PRELOADED_IMAGES_LIMIT = 5;\nconst PRELOADED_IMAGES = /*#__PURE__*/new InjectionToken(typeof ngDevMode === 'undefined' || ngDevMode ? 'NG_OPTIMIZED_PRELOADED_IMAGES' : '', {\n factory: () => new Set()\n});\nlet PreloadLinkCreator = /*#__PURE__*/(() => {\n class PreloadLinkCreator {\n preloadedImages = inject(PRELOADED_IMAGES);\n document = inject(DOCUMENT);\n errorShown = false;\n createPreloadLinkTag(renderer, src, srcset, sizes) {\n if (ngDevMode && !this.errorShown && this.preloadedImages.size >= DEFAULT_PRELOADED_IMAGES_LIMIT) {\n this.errorShown = true;\n console.warn(_formatRuntimeError(2961, `The \\`NgOptimizedImage\\` directive has detected that more than ` + `${DEFAULT_PRELOADED_IMAGES_LIMIT} images were marked as priority. ` + `This might negatively affect an overall performance of the page. ` + `To fix this, remove the \"priority\" attribute from images with less priority.`));\n }\n if (this.preloadedImages.has(src)) {\n return;\n }\n this.preloadedImages.add(src);\n const preload = renderer.createElement('link');\n renderer.setAttribute(preload, 'as', 'image');\n renderer.setAttribute(preload, 'href', src);\n renderer.setAttribute(preload, 'rel', 'preload');\n renderer.setAttribute(preload, 'fetchpriority', 'high');\n if (sizes) {\n renderer.setAttribute(preload, 'imageSizes', sizes);\n }\n if (srcset) {\n renderer.setAttribute(preload, 'imageSrcset', srcset);\n }\n renderer.appendChild(this.document.head, preload);\n }\n static ɵfac = function PreloadLinkCreator_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || PreloadLinkCreator)();\n };\n static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: PreloadLinkCreator,\n factory: PreloadLinkCreator.ɵfac,\n providedIn: 'root'\n });\n }\n return PreloadLinkCreator;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst BASE64_IMG_MAX_LENGTH_IN_ERROR = 50;\nconst VALID_WIDTH_DESCRIPTOR_SRCSET = /^((\\s*\\d+w\\s*(,|$)){1,})$/;\nconst VALID_DENSITY_DESCRIPTOR_SRCSET = /^((\\s*\\d+(\\.\\d+)?x\\s*(,|$)){1,})$/;\nconst ABSOLUTE_SRCSET_DENSITY_CAP = 3;\nconst RECOMMENDED_SRCSET_DENSITY_CAP = 2;\nconst DENSITY_SRCSET_MULTIPLIERS = [1, 2];\nconst VIEWPORT_BREAKPOINT_CUTOFF = 640;\nconst ASPECT_RATIO_TOLERANCE = 0.1;\nconst OVERSIZED_IMAGE_TOLERANCE = 1000;\nconst FIXED_SRCSET_WIDTH_LIMIT = 1920;\nconst FIXED_SRCSET_HEIGHT_LIMIT = 1080;\nconst PLACEHOLDER_DIMENSION_LIMIT = 1000;\nconst DATA_URL_WARN_LIMIT = 4000;\nconst DATA_URL_ERROR_LIMIT = 10000;\nconst BUILT_IN_LOADERS = [imgixLoaderInfo, imageKitLoaderInfo, cloudinaryLoaderInfo, netlifyLoaderInfo];\nconst PRIORITY_COUNT_THRESHOLD = 10;\nlet IMGS_WITH_PRIORITY_ATTR_COUNT = 0;\nlet NgOptimizedImage = /*#__PURE__*/(() => {\n class NgOptimizedImage {\n imageLoader = inject(IMAGE_LOADER);\n config = processConfig(inject(_IMAGE_CONFIG));\n renderer = inject(Renderer2);\n imgElement = inject(ElementRef).nativeElement;\n injector = inject(Injector);\n destroyRef = inject(DestroyRef);\n lcpObserver;\n _renderedSrc = null;\n ngSrc;\n ngSrcset;\n sizes;\n width;\n height;\n decoding;\n loading;\n priority = false;\n loaderParams;\n disableOptimizedSrcset = false;\n fill = false;\n placeholder;\n placeholderConfig;\n src;\n srcset;\n constructor() {\n if (ngDevMode) {\n this.lcpObserver = this.injector.get(LCPImageObserver);\n this.destroyRef.onDestroy(() => {\n if (!this.priority && this._renderedSrc !== null) {\n this.lcpObserver.unregisterImage(this._renderedSrc);\n }\n });\n }\n }\n ngOnInit() {\n _performanceMarkFeature('NgOptimizedImage');\n if (ngDevMode) {\n const ngZone = this.injector.get(NgZone);\n assertNonEmptyInput(this, 'ngSrc', this.ngSrc);\n assertValidNgSrcset(this, this.ngSrcset);\n assertNoConflictingSrc(this);\n if (this.ngSrcset) {\n assertNoConflictingSrcset(this);\n }\n assertNotBase64Image(this);\n assertNotBlobUrl(this);\n if (this.fill) {\n assertEmptyWidthAndHeight(this);\n ngZone.runOutsideAngular(() => assertNonZeroRenderedHeight(this, this.imgElement, this.renderer, this.destroyRef));\n } else {\n assertNonEmptyWidthAndHeight(this);\n if (this.height !== undefined) {\n assertGreaterThanZero(this, this.height, 'height');\n }\n if (this.width !== undefined) {\n assertGreaterThanZero(this, this.width, 'width');\n }\n ngZone.runOutsideAngular(() => assertNoImageDistortion(this, this.imgElement, this.renderer, this.destroyRef));\n }\n assertValidLoadingInput(this);\n assertValidDecodingInput(this);\n if (!this.ngSrcset) {\n assertNoComplexSizes(this);\n }\n assertValidPlaceholder(this, this.imageLoader);\n assertNotMissingBuiltInLoader(this.ngSrc, this.imageLoader);\n assertNoNgSrcsetWithoutLoader(this, this.imageLoader);\n assertNoLoaderParamsWithoutLoader(this, this.imageLoader);\n ngZone.runOutsideAngular(() => {\n this.lcpObserver.registerImage(this.getRewrittenSrc(), this.priority);\n });\n if (this.priority) {\n const checker = this.injector.get(PreconnectLinkChecker);\n checker.assertPreconnect(this.getRewrittenSrc(), this.ngSrc);\n if (typeof ngServerMode !== 'undefined' && !ngServerMode) {\n const applicationRef = this.injector.get(ApplicationRef);\n assetPriorityCountBelowThreshold(applicationRef);\n }\n }\n }\n if (this.placeholder) {\n this.removePlaceholderOnLoad(this.imgElement);\n }\n this.setHostAttributes();\n }\n setHostAttributes() {\n if (this.fill) {\n this.sizes ||= '100vw';\n } else {\n this.setHostAttribute('width', this.width.toString());\n this.setHostAttribute('height', this.height.toString());\n }\n this.setHostAttribute('loading', this.getLoadingBehavior());\n this.setHostAttribute('fetchpriority', this.getFetchPriority());\n this.setHostAttribute('decoding', this.getDecoding());\n this.setHostAttribute('ng-img', 'true');\n const rewrittenSrcset = this.updateSrcAndSrcset();\n if (this.sizes) {\n if (this.getLoadingBehavior() === 'lazy') {\n this.setHostAttribute('sizes', 'auto, ' + this.sizes);\n } else {\n this.setHostAttribute('sizes', this.sizes);\n }\n } else {\n if (this.ngSrcset && VALID_WIDTH_DESCRIPTOR_SRCSET.test(this.ngSrcset) && this.getLoadingBehavior() === 'lazy') {\n this.setHostAttribute('sizes', 'auto, 100vw');\n }\n }\n if (typeof ngServerMode !== 'undefined' && ngServerMode && this.priority) {\n const preloadLinkCreator = this.injector.get(PreloadLinkCreator);\n preloadLinkCreator.createPreloadLinkTag(this.renderer, this.getRewrittenSrc(), rewrittenSrcset, this.sizes);\n }\n }\n ngOnChanges(changes) {\n if (ngDevMode) {\n assertNoPostInitInputChange(this, changes, ['ngSrcset', 'width', 'height', 'priority', 'fill', 'loading', 'sizes', 'loaderParams', 'disableOptimizedSrcset']);\n }\n if (changes['ngSrc'] && !changes['ngSrc'].isFirstChange()) {\n const oldSrc = this._renderedSrc;\n this.updateSrcAndSrcset(true);\n if (ngDevMode) {\n const newSrc = this._renderedSrc;\n if (oldSrc && newSrc && oldSrc !== newSrc) {\n const ngZone = this.injector.get(NgZone);\n ngZone.runOutsideAngular(() => {\n this.lcpObserver.updateImage(oldSrc, newSrc);\n });\n }\n }\n }\n if (ngDevMode && changes['placeholder']?.currentValue && typeof ngServerMode !== 'undefined' && !ngServerMode) {\n assertPlaceholderDimensions(this, this.imgElement);\n }\n }\n getAspectRatio() {\n if (this.width && this.height && this.height !== 0) {\n return this.width / this.height;\n }\n return null;\n }\n callImageLoader(configWithoutCustomParams) {\n let augmentedConfig = configWithoutCustomParams;\n if (this.loaderParams) {\n augmentedConfig.loaderParams = this.loaderParams;\n }\n const ratio = this.getAspectRatio();\n if (ratio !== null && augmentedConfig.width) {\n augmentedConfig.height = Math.round(augmentedConfig.width / ratio);\n }\n return this.imageLoader(augmentedConfig);\n }\n getLoadingBehavior() {\n if (!this.priority && this.loading !== undefined) {\n return this.loading;\n }\n return this.priority ? 'eager' : 'lazy';\n }\n getFetchPriority() {\n return this.priority ? 'high' : 'auto';\n }\n getDecoding() {\n if (this.priority) {\n return 'sync';\n }\n return this.decoding ?? 'auto';\n }\n getRewrittenSrc() {\n if (!this._renderedSrc) {\n const imgConfig = {\n src: this.ngSrc\n };\n this._renderedSrc = this.callImageLoader(imgConfig);\n }\n return this._renderedSrc;\n }\n getRewrittenSrcset() {\n const widthSrcSet = VALID_WIDTH_DESCRIPTOR_SRCSET.test(this.ngSrcset);\n const finalSrcs = this.ngSrcset.split(',').filter(src => src !== '').map(srcStr => {\n srcStr = srcStr.trim();\n const width = widthSrcSet ? parseFloat(srcStr) : parseFloat(srcStr) * this.width;\n return `${this.callImageLoader({\n src: this.ngSrc,\n width\n })} ${srcStr}`;\n });\n return finalSrcs.join(', ');\n }\n getAutomaticSrcset() {\n if (this.sizes) {\n return this.getResponsiveSrcset();\n } else {\n return this.getFixedSrcset();\n }\n }\n getResponsiveSrcset() {\n const {\n breakpoints\n } = this.config;\n let filteredBreakpoints = breakpoints;\n if (this.sizes?.trim() === '100vw') {\n filteredBreakpoints = breakpoints.filter(bp => bp >= VIEWPORT_BREAKPOINT_CUTOFF);\n }\n const finalSrcs = filteredBreakpoints.map(bp => `${this.callImageLoader({\n src: this.ngSrc,\n width: bp\n })} ${bp}w`);\n return finalSrcs.join(', ');\n }\n updateSrcAndSrcset(forceSrcRecalc = false) {\n if (forceSrcRecalc) {\n this._renderedSrc = null;\n }\n const rewrittenSrc = this.getRewrittenSrc();\n this.setHostAttribute('src', rewrittenSrc);\n let rewrittenSrcset = undefined;\n if (this.ngSrcset) {\n rewrittenSrcset = this.getRewrittenSrcset();\n } else if (this.shouldGenerateAutomaticSrcset()) {\n rewrittenSrcset = this.getAutomaticSrcset();\n }\n if (rewrittenSrcset) {\n this.setHostAttribute('srcset', rewrittenSrcset);\n }\n return rewrittenSrcset;\n }\n getFixedSrcset() {\n const finalSrcs = DENSITY_SRCSET_MULTIPLIERS.map(multiplier => `${this.callImageLoader({\n src: this.ngSrc,\n width: this.width * multiplier\n })} ${multiplier}x`);\n return finalSrcs.join(', ');\n }\n shouldGenerateAutomaticSrcset() {\n let oversizedImage = false;\n if (!this.sizes) {\n oversizedImage = this.width > FIXED_SRCSET_WIDTH_LIMIT || this.height > FIXED_SRCSET_HEIGHT_LIMIT;\n }\n return !this.disableOptimizedSrcset && !this.srcset && this.imageLoader !== noopImageLoader && !oversizedImage;\n }\n generatePlaceholder(placeholderInput) {\n const {\n placeholderResolution\n } = this.config;\n if (placeholderInput === true) {\n return `url(${this.callImageLoader({\n src: this.ngSrc,\n width: placeholderResolution,\n isPlaceholder: true\n })})`;\n } else if (typeof placeholderInput === 'string') {\n return `url(${placeholderInput})`;\n }\n return null;\n }\n shouldBlurPlaceholder(placeholderConfig) {\n if (!placeholderConfig || !placeholderConfig.hasOwnProperty('blur')) {\n return true;\n }\n return Boolean(placeholderConfig.blur);\n }\n removePlaceholderOnLoad(img) {\n const callback = () => {\n const changeDetectorRef = this.injector.get(ChangeDetectorRef);\n removeLoadListenerFn();\n removeErrorListenerFn();\n this.placeholder = false;\n changeDetectorRef.markForCheck();\n };\n const removeLoadListenerFn = this.renderer.listen(img, 'load', callback);\n const removeErrorListenerFn = this.renderer.listen(img, 'error', callback);\n this.destroyRef.onDestroy(() => {\n removeLoadListenerFn();\n removeErrorListenerFn();\n });\n callOnLoadIfImageIsLoaded(img, callback);\n }\n setHostAttribute(name, value) {\n this.renderer.setAttribute(this.imgElement, name, value);\n }\n static ɵfac = function NgOptimizedImage_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || NgOptimizedImage)();\n };\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: NgOptimizedImage,\n selectors: [[\"img\", \"ngSrc\", \"\"]],\n hostVars: 18,\n hostBindings: function NgOptimizedImage_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵstyleProp(\"position\", ctx.fill ? \"absolute\" : null)(\"width\", ctx.fill ? \"100%\" : null)(\"height\", ctx.fill ? \"100%\" : null)(\"inset\", ctx.fill ? \"0\" : null)(\"background-size\", ctx.placeholder ? \"cover\" : null)(\"background-position\", ctx.placeholder ? \"50% 50%\" : null)(\"background-repeat\", ctx.placeholder ? \"no-repeat\" : null)(\"background-image\", ctx.placeholder ? ctx.generatePlaceholder(ctx.placeholder) : null)(\"filter\", ctx.placeholder && ctx.shouldBlurPlaceholder(ctx.placeholderConfig) ? \"blur(15px)\" : null);\n }\n },\n inputs: {\n ngSrc: [2, \"ngSrc\", \"ngSrc\", unwrapSafeUrl],\n ngSrcset: \"ngSrcset\",\n sizes: \"sizes\",\n width: [2, \"width\", \"width\", numberAttribute],\n height: [2, \"height\", \"height\", numberAttribute],\n decoding: \"decoding\",\n loading: \"loading\",\n priority: [2, \"priority\", \"priority\", booleanAttribute],\n loaderParams: \"loaderParams\",\n disableOptimizedSrcset: [2, \"disableOptimizedSrcset\", \"disableOptimizedSrcset\", booleanAttribute],\n fill: [2, \"fill\", \"fill\", booleanAttribute],\n placeholder: [2, \"placeholder\", \"placeholder\", booleanOrUrlAttribute],\n placeholderConfig: \"placeholderConfig\",\n src: \"src\",\n srcset: \"srcset\"\n },\n features: [i0.ɵɵNgOnChangesFeature]\n });\n }\n return NgOptimizedImage;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nfunction processConfig(config) {\n let sortedBreakpoints = {};\n if (config.breakpoints) {\n sortedBreakpoints.breakpoints = config.breakpoints.sort((a, b) => a - b);\n }\n return Object.assign({}, _IMAGE_CONFIG_DEFAULTS, config, sortedBreakpoints);\n}\nfunction assertNoConflictingSrc(dir) {\n if (dir.src) {\n throw new _RuntimeError(2950, `${imgDirectiveDetails(dir.ngSrc)} both \\`src\\` and \\`ngSrc\\` have been set. ` + `Supplying both of these attributes breaks lazy loading. ` + `The NgOptimizedImage directive sets \\`src\\` itself based on the value of \\`ngSrc\\`. ` + `To fix this, please remove the \\`src\\` attribute.`);\n }\n}\nfunction assertNoConflictingSrcset(dir) {\n if (dir.srcset) {\n throw new _RuntimeError(2951, `${imgDirectiveDetails(dir.ngSrc)} both \\`srcset\\` and \\`ngSrcset\\` have been set. ` + `Supplying both of these attributes breaks lazy loading. ` + `The NgOptimizedImage directive sets \\`srcset\\` itself based on the value of ` + `\\`ngSrcset\\`. To fix this, please remove the \\`srcset\\` attribute.`);\n }\n}\nfunction assertNotBase64Image(dir) {\n let ngSrc = dir.ngSrc.trim();\n if (ngSrc.startsWith('data:')) {\n if (ngSrc.length > BASE64_IMG_MAX_LENGTH_IN_ERROR) {\n ngSrc = ngSrc.substring(0, BASE64_IMG_MAX_LENGTH_IN_ERROR) + '...';\n }\n throw new _RuntimeError(2952, `${imgDirectiveDetails(dir.ngSrc, false)} \\`ngSrc\\` is a Base64-encoded string ` + `(${ngSrc}). NgOptimizedImage does not support Base64-encoded strings. ` + `To fix this, disable the NgOptimizedImage directive for this element ` + `by removing \\`ngSrc\\` and using a standard \\`src\\` attribute instead.`);\n }\n}\nfunction assertNoComplexSizes(dir) {\n let sizes = dir.sizes;\n if (sizes?.match(/((\\)|,)\\s|^)\\d+px/)) {\n throw new _RuntimeError(2952, `${imgDirectiveDetails(dir.ngSrc, false)} \\`sizes\\` was set to a string including ` + `pixel values. For automatic \\`srcset\\` generation, \\`sizes\\` must only include responsive ` + `values, such as \\`sizes=\"50vw\"\\` or \\`sizes=\"(min-width: 768px) 50vw, 100vw\"\\`. ` + `To fix this, modify the \\`sizes\\` attribute, or provide your own \\`ngSrcset\\` value directly.`);\n }\n}\nfunction assertValidPlaceholder(dir, imageLoader) {\n assertNoPlaceholderConfigWithoutPlaceholder(dir);\n assertNoRelativePlaceholderWithoutLoader(dir, imageLoader);\n assertNoOversizedDataUrl(dir);\n}\nfunction assertNoPlaceholderConfigWithoutPlaceholder(dir) {\n if (dir.placeholderConfig && !dir.placeholder) {\n throw new _RuntimeError(2952, `${imgDirectiveDetails(dir.ngSrc, false)} \\`placeholderConfig\\` options were provided for an ` + `image that does not use the \\`placeholder\\` attribute, and will have no effect.`);\n }\n}\nfunction assertNoRelativePlaceholderWithoutLoader(dir, imageLoader) {\n if (dir.placeholder === true && imageLoader === noopImageLoader) {\n throw new _RuntimeError(2963, `${imgDirectiveDetails(dir.ngSrc)} the \\`placeholder\\` attribute is set to true but ` + `no image loader is configured (i.e. the default one is being used), ` + `which would result in the same image being used for the primary image and its placeholder. ` + `To fix this, provide a loader or remove the \\`placeholder\\` attribute from the image.`);\n }\n}\nfunction assertNoOversizedDataUrl(dir) {\n if (dir.placeholder && typeof dir.placeholder === 'string' && dir.placeholder.startsWith('data:')) {\n if (dir.placeholder.length > DATA_URL_ERROR_LIMIT) {\n throw new _RuntimeError(2965, `${imgDirectiveDetails(dir.ngSrc)} the \\`placeholder\\` attribute is set to a data URL which is longer ` + `than ${DATA_URL_ERROR_LIMIT} characters. This is strongly discouraged, as large inline placeholders ` + `directly increase the bundle size of Angular and hurt page load performance. To fix this, generate ` + `a smaller data URL placeholder.`);\n }\n if (dir.placeholder.length > DATA_URL_WARN_LIMIT) {\n console.warn(_formatRuntimeError(2965, `${imgDirectiveDetails(dir.ngSrc)} the \\`placeholder\\` attribute is set to a data URL which is longer ` + `than ${DATA_URL_WARN_LIMIT} characters. This is discouraged, as large inline placeholders ` + `directly increase the bundle size of Angular and hurt page load performance. For better loading performance, ` + `generate a smaller data URL placeholder.`));\n }\n }\n}\nfunction assertNotBlobUrl(dir) {\n const ngSrc = dir.ngSrc.trim();\n if (ngSrc.startsWith('blob:')) {\n throw new _RuntimeError(2952, `${imgDirectiveDetails(dir.ngSrc)} \\`ngSrc\\` was set to a blob URL (${ngSrc}). ` + `Blob URLs are not supported by the NgOptimizedImage directive. ` + `To fix this, disable the NgOptimizedImage directive for this element ` + `by removing \\`ngSrc\\` and using a regular \\`src\\` attribute instead.`);\n }\n}\nfunction assertNonEmptyInput(dir, name, value) {\n const isString = typeof value === 'string';\n const isEmptyString = isString && value.trim() === '';\n if (!isString || isEmptyString) {\n throw new _RuntimeError(2952, `${imgDirectiveDetails(dir.ngSrc)} \\`${name}\\` has an invalid value ` + `(\\`${value}\\`). To fix this, change the value to a non-empty string.`);\n }\n}\nfunction assertValidNgSrcset(dir, value) {\n if (value == null) return;\n assertNonEmptyInput(dir, 'ngSrcset', value);\n const stringVal = value;\n const isValidWidthDescriptor = VALID_WIDTH_DESCRIPTOR_SRCSET.test(stringVal);\n const isValidDensityDescriptor = VALID_DENSITY_DESCRIPTOR_SRCSET.test(stringVal);\n if (isValidDensityDescriptor) {\n assertUnderDensityCap(dir, stringVal);\n }\n const isValidSrcset = isValidWidthDescriptor || isValidDensityDescriptor;\n if (!isValidSrcset) {\n throw new _RuntimeError(2952, `${imgDirectiveDetails(dir.ngSrc)} \\`ngSrcset\\` has an invalid value (\\`${value}\\`). ` + `To fix this, supply \\`ngSrcset\\` using a comma-separated list of one or more width ` + `descriptors (e.g. \"100w, 200w\") or density descriptors (e.g. \"1x, 2x\").`);\n }\n}\nfunction assertUnderDensityCap(dir, value) {\n const underDensityCap = value.split(',').every(num => num === '' || parseFloat(num) <= ABSOLUTE_SRCSET_DENSITY_CAP);\n if (!underDensityCap) {\n throw new _RuntimeError(2952, `${imgDirectiveDetails(dir.ngSrc)} the \\`ngSrcset\\` contains an unsupported image density:` + `\\`${value}\\`. NgOptimizedImage generally recommends a max image density of ` + `${RECOMMENDED_SRCSET_DENSITY_CAP}x but supports image densities up to ` + `${ABSOLUTE_SRCSET_DENSITY_CAP}x. The human eye cannot distinguish between image densities ` + `greater than ${RECOMMENDED_SRCSET_DENSITY_CAP}x - which makes them unnecessary for ` + `most use cases. Images that will be pinch-zoomed are typically the primary use case for ` + `${ABSOLUTE_SRCSET_DENSITY_CAP}x images. Please remove the high density descriptor and try again.`);\n }\n}\nfunction postInitInputChangeError(dir, inputName) {\n let reason;\n if (inputName === 'width' || inputName === 'height') {\n reason = `Changing \\`${inputName}\\` may result in different attribute value ` + `applied to the underlying image element and cause layout shifts on a page.`;\n } else {\n reason = `Changing the \\`${inputName}\\` would have no effect on the underlying ` + `image element, because the resource loading has already occurred.`;\n }\n return new _RuntimeError(2953, `${imgDirectiveDetails(dir.ngSrc)} \\`${inputName}\\` was updated after initialization. ` + `The NgOptimizedImage directive will not react to this input change. ${reason} ` + `To fix this, either switch \\`${inputName}\\` to a static value ` + `or wrap the image element in an @if that is gated on the necessary value.`);\n}\nfunction assertNoPostInitInputChange(dir, changes, inputs) {\n inputs.forEach(input => {\n const isUpdated = changes.hasOwnProperty(input);\n if (isUpdated && !changes[input].isFirstChange()) {\n if (input === 'ngSrc') {\n dir = {\n ngSrc: changes[input].previousValue\n };\n }\n throw postInitInputChangeError(dir, input);\n }\n });\n}\nfunction assertGreaterThanZero(dir, inputValue, inputName) {\n const validNumber = typeof inputValue === 'number' && inputValue > 0;\n const validString = typeof inputValue === 'string' && /^\\d+$/.test(inputValue.trim()) && parseInt(inputValue) > 0;\n if (!validNumber && !validString) {\n throw new _RuntimeError(2952, `${imgDirectiveDetails(dir.ngSrc)} \\`${inputName}\\` has an invalid value. ` + `To fix this, provide \\`${inputName}\\` as a number greater than 0.`);\n }\n}\nfunction assertNoImageDistortion(dir, img, renderer, destroyRef) {\n const callback = () => {\n removeLoadListenerFn();\n removeErrorListenerFn();\n const computedStyle = window.getComputedStyle(img);\n let renderedWidth = parseFloat(computedStyle.getPropertyValue('width'));\n let renderedHeight = parseFloat(computedStyle.getPropertyValue('height'));\n const boxSizing = computedStyle.getPropertyValue('box-sizing');\n if (boxSizing === 'border-box') {\n const paddingTop = computedStyle.getPropertyValue('padding-top');\n const paddingRight = computedStyle.getPropertyValue('padding-right');\n const paddingBottom = computedStyle.getPropertyValue('padding-bottom');\n const paddingLeft = computedStyle.getPropertyValue('padding-left');\n renderedWidth -= parseFloat(paddingRight) + parseFloat(paddingLeft);\n renderedHeight -= parseFloat(paddingTop) + parseFloat(paddingBottom);\n }\n const renderedAspectRatio = renderedWidth / renderedHeight;\n const nonZeroRenderedDimensions = renderedWidth !== 0 && renderedHeight !== 0;\n const intrinsicWidth = img.naturalWidth;\n const intrinsicHeight = img.naturalHeight;\n const intrinsicAspectRatio = intrinsicWidth / intrinsicHeight;\n const suppliedWidth = dir.width;\n const suppliedHeight = dir.height;\n const suppliedAspectRatio = suppliedWidth / suppliedHeight;\n const inaccurateDimensions = Math.abs(suppliedAspectRatio - intrinsicAspectRatio) > ASPECT_RATIO_TOLERANCE;\n const stylingDistortion = nonZeroRenderedDimensions && Math.abs(intrinsicAspectRatio - renderedAspectRatio) > ASPECT_RATIO_TOLERANCE;\n if (inaccurateDimensions) {\n console.warn(_formatRuntimeError(2952, `${imgDirectiveDetails(dir.ngSrc)} the aspect ratio of the image does not match ` + `the aspect ratio indicated by the width and height attributes. ` + `\\nIntrinsic image size: ${intrinsicWidth}w x ${intrinsicHeight}h ` + `(aspect-ratio: ${round(intrinsicAspectRatio)}). \\nSupplied width and height attributes: ` + `${suppliedWidth}w x ${suppliedHeight}h (aspect-ratio: ${round(suppliedAspectRatio)}). ` + `\\nTo fix this, update the width and height attributes.`));\n } else if (stylingDistortion) {\n console.warn(_formatRuntimeError(2952, `${imgDirectiveDetails(dir.ngSrc)} the aspect ratio of the rendered image ` + `does not match the image's intrinsic aspect ratio. ` + `\\nIntrinsic image size: ${intrinsicWidth}w x ${intrinsicHeight}h ` + `(aspect-ratio: ${round(intrinsicAspectRatio)}). \\nRendered image size: ` + `${renderedWidth}w x ${renderedHeight}h (aspect-ratio: ` + `${round(renderedAspectRatio)}). \\nThis issue can occur if \"width\" and \"height\" ` + `attributes are added to an image without updating the corresponding ` + `image styling. To fix this, adjust image styling. In most cases, ` + `adding \"height: auto\" or \"width: auto\" to the image styling will fix ` + `this issue.`));\n } else if (!dir.ngSrcset && nonZeroRenderedDimensions) {\n const recommendedWidth = RECOMMENDED_SRCSET_DENSITY_CAP * renderedWidth;\n const recommendedHeight = RECOMMENDED_SRCSET_DENSITY_CAP * renderedHeight;\n const oversizedWidth = intrinsicWidth - recommendedWidth >= OVERSIZED_IMAGE_TOLERANCE;\n const oversizedHeight = intrinsicHeight - recommendedHeight >= OVERSIZED_IMAGE_TOLERANCE;\n if (oversizedWidth || oversizedHeight) {\n console.warn(_formatRuntimeError(2960, `${imgDirectiveDetails(dir.ngSrc)} the intrinsic image is significantly ` + `larger than necessary. ` + `\\nRendered image size: ${renderedWidth}w x ${renderedHeight}h. ` + `\\nIntrinsic image size: ${intrinsicWidth}w x ${intrinsicHeight}h. ` + `\\nRecommended intrinsic image size: ${recommendedWidth}w x ${recommendedHeight}h. ` + `\\nNote: Recommended intrinsic image size is calculated assuming a maximum DPR of ` + `${RECOMMENDED_SRCSET_DENSITY_CAP}. To improve loading time, resize the image ` + `or consider using the \"ngSrcset\" and \"sizes\" attributes.`));\n }\n }\n };\n const removeLoadListenerFn = renderer.listen(img, 'load', callback);\n const removeErrorListenerFn = renderer.listen(img, 'error', () => {\n removeLoadListenerFn();\n removeErrorListenerFn();\n });\n destroyRef.onDestroy(() => {\n removeLoadListenerFn();\n removeErrorListenerFn();\n });\n callOnLoadIfImageIsLoaded(img, callback);\n}\nfunction assertNonEmptyWidthAndHeight(dir) {\n let missingAttributes = [];\n if (dir.width === undefined) missingAttributes.push('width');\n if (dir.height === undefined) missingAttributes.push('height');\n if (missingAttributes.length > 0) {\n throw new _RuntimeError(2954, `${imgDirectiveDetails(dir.ngSrc)} these required attributes ` + `are missing: ${missingAttributes.map(attr => `\"${attr}\"`).join(', ')}. ` + `Including \"width\" and \"height\" attributes will prevent image-related layout shifts. ` + `To fix this, include \"width\" and \"height\" attributes on the image tag or turn on ` + `\"fill\" mode with the \\`fill\\` attribute.`);\n }\n}\nfunction assertEmptyWidthAndHeight(dir) {\n if (dir.width || dir.height) {\n throw new _RuntimeError(2952, `${imgDirectiveDetails(dir.ngSrc)} the attributes \\`height\\` and/or \\`width\\` are present ` + `along with the \\`fill\\` attribute. Because \\`fill\\` mode causes an image to fill its containing ` + `element, the size attributes have no effect and should be removed.`);\n }\n}\nfunction assertNonZeroRenderedHeight(dir, img, renderer, destroyRef) {\n const callback = () => {\n removeLoadListenerFn();\n removeErrorListenerFn();\n const renderedHeight = img.clientHeight;\n if (dir.fill && renderedHeight === 0) {\n console.warn(_formatRuntimeError(2952, `${imgDirectiveDetails(dir.ngSrc)} the height of the fill-mode image is zero. ` + `This is likely because the containing element does not have the CSS 'position' ` + `property set to one of the following: \"relative\", \"fixed\", or \"absolute\". ` + `To fix this problem, make sure the container element has the CSS 'position' ` + `property defined and the height of the element is not zero.`));\n }\n };\n const removeLoadListenerFn = renderer.listen(img, 'load', callback);\n const removeErrorListenerFn = renderer.listen(img, 'error', () => {\n removeLoadListenerFn();\n removeErrorListenerFn();\n });\n destroyRef.onDestroy(() => {\n removeLoadListenerFn();\n removeErrorListenerFn();\n });\n callOnLoadIfImageIsLoaded(img, callback);\n}\nfunction assertValidLoadingInput(dir) {\n if (dir.loading && dir.priority) {\n throw new _RuntimeError(2952, `${imgDirectiveDetails(dir.ngSrc)} the \\`loading\\` attribute ` + `was used on an image that was marked \"priority\". ` + `Setting \\`loading\\` on priority images is not allowed ` + `because these images will always be eagerly loaded. ` + `To fix this, remove the “loading” attribute from the priority image.`);\n }\n const validInputs = ['auto', 'eager', 'lazy'];\n if (typeof dir.loading === 'string' && !validInputs.includes(dir.loading)) {\n throw new _RuntimeError(2952, `${imgDirectiveDetails(dir.ngSrc)} the \\`loading\\` attribute ` + `has an invalid value (\\`${dir.loading}\\`). ` + `To fix this, provide a valid value (\"lazy\", \"eager\", or \"auto\").`);\n }\n}\nfunction assertValidDecodingInput(dir) {\n const validInputs = ['sync', 'async', 'auto'];\n if (typeof dir.decoding === 'string' && !validInputs.includes(dir.decoding)) {\n throw new _RuntimeError(2952, `${imgDirectiveDetails(dir.ngSrc)} the \\`decoding\\` attribute ` + `has an invalid value (\\`${dir.decoding}\\`). ` + `To fix this, provide a valid value (\"sync\", \"async\", or \"auto\").`);\n }\n}\nfunction assertNotMissingBuiltInLoader(ngSrc, imageLoader) {\n if (imageLoader === noopImageLoader) {\n let builtInLoaderName = '';\n for (const loader of BUILT_IN_LOADERS) {\n if (loader.testUrl(ngSrc)) {\n builtInLoaderName = loader.name;\n break;\n }\n }\n if (builtInLoaderName) {\n console.warn(_formatRuntimeError(2962, `NgOptimizedImage: It looks like your images may be hosted on the ` + `${builtInLoaderName} CDN, but your app is not using Angular's ` + `built-in loader for that CDN. We recommend switching to use ` + `the built-in by calling \\`provide${builtInLoaderName}Loader()\\` ` + `in your \\`providers\\` and passing it your instance's base URL. ` + `If you don't want to use the built-in loader, define a custom ` + `loader function using IMAGE_LOADER to silence this warning.`));\n }\n }\n}\nfunction assertNoNgSrcsetWithoutLoader(dir, imageLoader) {\n if (dir.ngSrcset && imageLoader === noopImageLoader) {\n console.warn(_formatRuntimeError(2963, `${imgDirectiveDetails(dir.ngSrc)} the \\`ngSrcset\\` attribute is present but ` + `no image loader is configured (i.e. the default one is being used), ` + `which would result in the same image being used for all configured sizes. ` + `To fix this, provide a loader or remove the \\`ngSrcset\\` attribute from the image.`));\n }\n}\nfunction assertNoLoaderParamsWithoutLoader(dir, imageLoader) {\n if (dir.loaderParams && imageLoader === noopImageLoader) {\n console.warn(_formatRuntimeError(2963, `${imgDirectiveDetails(dir.ngSrc)} the \\`loaderParams\\` attribute is present but ` + `no image loader is configured (i.e. the default one is being used), ` + `which means that the loaderParams data will not be consumed and will not affect the URL. ` + `To fix this, provide a custom loader or remove the \\`loaderParams\\` attribute from the image.`));\n }\n}\nasync function assetPriorityCountBelowThreshold(appRef) {\n if (IMGS_WITH_PRIORITY_ATTR_COUNT === 0) {\n IMGS_WITH_PRIORITY_ATTR_COUNT++;\n await appRef.whenStable();\n if (IMGS_WITH_PRIORITY_ATTR_COUNT > PRIORITY_COUNT_THRESHOLD) {\n console.warn(_formatRuntimeError(2966, `NgOptimizedImage: The \"priority\" attribute is set to true more than ${PRIORITY_COUNT_THRESHOLD} times (${IMGS_WITH_PRIORITY_ATTR_COUNT} times). ` + `Marking too many images as \"high\" priority can hurt your application's LCP (https://web.dev/lcp). ` + `\"Priority\" should only be set on the image expected to be the page's LCP element.`));\n }\n } else {\n IMGS_WITH_PRIORITY_ATTR_COUNT++;\n }\n}\nfunction assertPlaceholderDimensions(dir, imgElement) {\n const computedStyle = window.getComputedStyle(imgElement);\n let renderedWidth = parseFloat(computedStyle.getPropertyValue('width'));\n let renderedHeight = parseFloat(computedStyle.getPropertyValue('height'));\n if (renderedWidth > PLACEHOLDER_DIMENSION_LIMIT || renderedHeight > PLACEHOLDER_DIMENSION_LIMIT) {\n console.warn(_formatRuntimeError(2967, `${imgDirectiveDetails(dir.ngSrc)} it uses a placeholder image, but at least one ` + `of the dimensions attribute (height or width) exceeds the limit of ${PLACEHOLDER_DIMENSION_LIMIT}px. ` + `To fix this, use a smaller image as a placeholder.`));\n }\n}\nfunction callOnLoadIfImageIsLoaded(img, callback) {\n if (img.complete && img.naturalWidth) {\n callback();\n }\n}\nfunction round(input) {\n return Number.isInteger(input) ? input : input.toFixed(2);\n}\nfunction unwrapSafeUrl(value) {\n if (typeof value === 'string') {\n return value;\n }\n return _unwrapSafeValue(value);\n}\nfunction booleanOrUrlAttribute(value) {\n if (typeof value === 'string' && value !== 'true' && value !== 'false' && value !== '') {\n return value;\n }\n return booleanAttribute(value);\n}\nexport { IMAGE_LOADER, Location, LocationStrategy, NgOptimizedImage, PRECONNECT_CHECK_BLOCKLIST, PlatformNavigation, VERSION, ViewportScroller, isPlatformBrowser, isPlatformServer, provideCloudflareLoader, provideCloudinaryLoader, provideImageKitLoader, provideImgixLoader, provideNetlifyLoader, registerLocaleData, NavigationAdapterForLocation as ɵNavigationAdapterForLocation, NullViewportScroller as ɵNullViewportScroller, PLATFORM_BROWSER_ID as ɵPLATFORM_BROWSER_ID, PLATFORM_SERVER_ID as ɵPLATFORM_SERVER_ID, normalizeQueryParams as ɵnormalizeQueryParams };\n"],"mappings":"8SAUA,SAASA,EAAcC,EAAOC,EAAK,CACjC,OAAKD,EACAC,EACDD,EAAM,SAAS,GAAG,EACbC,EAAI,WAAW,GAAG,EAAID,EAAQC,EAAI,MAAM,CAAC,EAAID,EAAQC,EAEvDA,EAAI,WAAW,GAAG,EAAID,EAAQC,EAAM,GAAGD,CAAK,IAAIC,CAAG,GAJzCD,EADEC,CAMrB,CACA,SAASC,GAAmBC,EAAK,CAC/B,IAAMC,EAAaD,EAAI,OAAO,QAAQ,EACtC,OAAOA,EAAIC,EAAa,CAAC,IAAM,IAAMD,EAAI,MAAM,EAAGC,EAAa,CAAC,EAAID,EAAI,MAAMC,CAAU,EAAID,CAC9F,CACA,SAASE,EAAqBC,EAAQ,CACpC,OAAOA,GAAUA,EAAO,CAAC,IAAM,IAAM,IAAIA,CAAM,GAAKA,CACtD,CACA,IAAIC,GAAiC,IAAM,CACzC,MAAMA,CAAiB,CACrB,UAAUC,EAAkB,CAC1B,MAAM,IAAI,MAAsC,EAAE,CACpD,CACA,OAAO,UAAO,SAAkCC,EAAmB,CACjE,OAAO,IAAKA,GAAqBF,EACnC,EACA,OAAO,WAA0BG,EAAmB,CAClD,MAAOH,EACP,QAAS,IAAaI,EAAOC,EAAoB,EACjD,WAAY,MACd,CAAC,CACH,CACA,OAAOL,CACT,GAAG,EAIGM,EAA6B,IAAIC,EAA+E,EAAE,EACpHF,IAAqC,IAAM,CAC7C,MAAMA,UAA6BL,CAAiB,CAClD,kBACA,UACA,mBAAqB,CAAC,EACtB,YAAYQ,EAAmBC,EAAM,CACnC,MAAM,EACN,KAAK,kBAAoBD,EACzB,KAAK,UAAYC,GAAQ,KAAK,kBAAkB,mBAAmB,GAAKL,EAAOM,CAAQ,EAAE,UAAU,QAAU,EAC/G,CACA,aAAc,CACZ,KAAO,KAAK,mBAAmB,QAC7B,KAAK,mBAAmB,IAAI,EAAE,CAElC,CACA,WAAWC,EAAI,CACb,KAAK,mBAAmB,KAAK,KAAK,kBAAkB,WAAWA,CAAE,EAAG,KAAK,kBAAkB,aAAaA,CAAE,CAAC,CAC7G,CACA,aAAc,CACZ,OAAO,KAAK,SACd,CACA,mBAAmBC,EAAU,CAC3B,OAAOpB,EAAc,KAAK,UAAWoB,CAAQ,CAC/C,CACA,KAAKC,EAAc,GAAO,CACxB,IAAMC,EAAW,KAAK,kBAAkB,SAAWhB,EAAqB,KAAK,kBAAkB,MAAM,EAC/FiB,EAAO,KAAK,kBAAkB,KACpC,OAAOA,GAAQF,EAAc,GAAGC,CAAQ,GAAGC,CAAI,GAAKD,CACtD,CACA,UAAUE,EAAOC,EAAOrB,EAAKsB,EAAa,CACxC,IAAMC,EAAc,KAAK,mBAAmBvB,EAAME,EAAqBoB,CAAW,CAAC,EACnF,KAAK,kBAAkB,UAAUF,EAAOC,EAAOE,CAAW,CAC5D,CACA,aAAaH,EAAOC,EAAOrB,EAAKsB,EAAa,CAC3C,IAAMC,EAAc,KAAK,mBAAmBvB,EAAME,EAAqBoB,CAAW,CAAC,EACnF,KAAK,kBAAkB,aAAaF,EAAOC,EAAOE,CAAW,CAC/D,CACA,SAAU,CACR,KAAK,kBAAkB,QAAQ,CACjC,CACA,MAAO,CACL,KAAK,kBAAkB,KAAK,CAC9B,CACA,UAAW,CACT,OAAO,KAAK,kBAAkB,SAAS,CACzC,CACA,UAAUlB,EAAmB,EAAG,CAC9B,KAAK,kBAAkB,YAAYA,CAAgB,CACrD,CACA,OAAO,UAAO,SAAsCC,EAAmB,CACrE,OAAO,IAAKA,GAAqBG,GAAyBe,EAASC,CAAgB,EAAMD,EAASd,EAAe,CAAC,CAAC,CACrH,EACA,OAAO,WAA0BH,EAAmB,CAClD,MAAOE,EACP,QAASA,EAAqB,UAC9B,WAAY,MACd,CAAC,CACH,CACA,OAAOA,CACT,GAAG,EA6DH,IAAIiB,IAAyB,IAAM,CACjC,MAAMA,CAAS,CACb,SAAW,IAAIC,GACf,UACA,kBACA,oBAAsB,CAAC,EACvB,uBAAyB,KACzB,YAAYC,EAAkB,CAC5B,KAAK,kBAAoBA,EACzB,IAAMC,EAAW,KAAK,kBAAkB,YAAY,EACpD,KAAK,UAAYC,GAAaC,GAAmBC,GAAgBH,CAAQ,CAAC,CAAC,EAC3E,KAAK,kBAAkB,WAAWI,GAAM,CACtC,KAAK,SAAS,KAAK,CACjB,IAAO,KAAK,KAAK,EAAI,EACrB,IAAO,GACP,MAASA,EAAG,MACZ,KAAQA,EAAG,IACb,CAAC,CACH,CAAC,CACH,CACA,aAAc,CACZ,KAAK,wBAAwB,YAAY,EACzC,KAAK,oBAAsB,CAAC,CAC9B,CACA,KAAKC,EAAc,GAAO,CACxB,OAAO,KAAK,UAAU,KAAK,kBAAkB,KAAKA,CAAW,CAAC,CAChE,CACA,UAAW,CACT,OAAO,KAAK,kBAAkB,SAAS,CACzC,CACA,qBAAqBC,EAAMC,EAAQ,GAAI,CACrC,OAAO,KAAK,KAAK,GAAK,KAAK,UAAUD,EAAOE,EAAqBD,CAAK,CAAC,CACzE,CACA,UAAUE,EAAK,CACb,OAAOZ,EAAS,mBAAmBa,GAAe,KAAK,UAAWP,GAAgBM,CAAG,CAAC,CAAC,CACzF,CACA,mBAAmBA,EAAK,CACtB,OAAIA,GAAOA,EAAI,CAAC,IAAM,MACpBA,EAAM,IAAMA,GAEP,KAAK,kBAAkB,mBAAmBA,CAAG,CACtD,CACA,GAAGH,EAAMC,EAAQ,GAAII,EAAQ,KAAM,CACjC,KAAK,kBAAkB,UAAUA,EAAO,GAAIL,EAAMC,CAAK,EACvD,KAAK,0BAA0B,KAAK,mBAAmBD,EAAOE,EAAqBD,CAAK,CAAC,EAAGI,CAAK,CACnG,CACA,aAAaL,EAAMC,EAAQ,GAAII,EAAQ,KAAM,CAC3C,KAAK,kBAAkB,aAAaA,EAAO,GAAIL,EAAMC,CAAK,EAC1D,KAAK,0BAA0B,KAAK,mBAAmBD,EAAOE,EAAqBD,CAAK,CAAC,EAAGI,CAAK,CACnG,CACA,SAAU,CACR,KAAK,kBAAkB,QAAQ,CACjC,CACA,MAAO,CACL,KAAK,kBAAkB,KAAK,CAC9B,CACA,UAAUC,EAAmB,EAAG,CAC9B,KAAK,kBAAkB,YAAYA,CAAgB,CACrD,CACA,YAAYC,EAAI,CACd,YAAK,oBAAoB,KAAKA,CAAE,EAChC,KAAK,yBAA2B,KAAK,UAAUC,GAAK,CAClD,KAAK,0BAA0BA,EAAE,IAAKA,EAAE,KAAK,CAC/C,CAAC,EACM,IAAM,CACX,IAAMC,EAAU,KAAK,oBAAoB,QAAQF,CAAE,EACnD,KAAK,oBAAoB,OAAOE,EAAS,CAAC,EACtC,KAAK,oBAAoB,SAAW,IACtC,KAAK,wBAAwB,YAAY,EACzC,KAAK,uBAAyB,KAElC,CACF,CACA,0BAA0BN,EAAM,GAAIE,EAAO,CACzC,KAAK,oBAAoB,QAAQE,GAAMA,EAAGJ,EAAKE,CAAK,CAAC,CACvD,CACA,UAAUK,EAAQC,EAASC,EAAU,CACnC,OAAO,KAAK,SAAS,UAAU,CAC7B,KAAMF,EACN,MAAOC,GAAW,OAClB,SAAUC,GAAY,MACxB,CAAC,CACH,CACA,OAAO,qBAAuBV,EAC9B,OAAO,cAAgBW,EACvB,OAAO,mBAAqBjB,GAC5B,OAAO,UAAO,SAA0BkB,EAAmB,CACzD,OAAO,IAAKA,GAAqBvB,GAAawB,EAASC,CAAgB,CAAC,CAC1E,EACA,OAAO,WAA0BC,EAAmB,CAClD,MAAO1B,EACP,QAAS,IAAM2B,GAAe,EAC9B,WAAY,MACd,CAAC,CACH,CACA,OAAO3B,CACT,GAAG,EAIH,SAAS2B,IAAiB,CACxB,OAAO,IAAI3B,GAASwB,EAASC,CAAgB,CAAC,CAChD,CACA,SAASZ,GAAee,EAAUhB,EAAK,CACrC,GAAI,CAACgB,GAAY,CAAChB,EAAI,WAAWgB,CAAQ,EACvC,OAAOhB,EAET,IAAMiB,EAAcjB,EAAI,UAAUgB,EAAS,MAAM,EACjD,OAAIC,IAAgB,IAAM,CAAC,IAAK,IAAK,IAAK,GAAG,EAAE,SAASA,EAAY,CAAC,CAAC,EAC7DA,EAEFjB,CACT,CACA,SAASN,GAAgBM,EAAK,CAC5B,OAAOA,EAAI,QAAQ,gBAAiB,EAAE,CACxC,CACA,SAASR,GAAaD,EAAU,CAE9B,GADsB,IAAI,OAAO,eAAe,EAAE,KAAKA,CAAQ,EAC5C,CACjB,GAAM,CAAC,CAAE2B,CAAQ,EAAI3B,EAAS,MAAM,YAAY,EAChD,OAAO2B,CACT,CACA,OAAO3B,CACT,CCtRA,IAAI4B,IAAqC,IAAM,CAC7C,MAAMA,UAA6BC,CAAiB,CAClD,kBACA,UAAY,GACZ,mBAAqB,CAAC,EACtB,YAAYC,EAAmBC,EAAW,CACxC,MAAM,EACN,KAAK,kBAAoBD,EACrBC,GAAa,OACf,KAAK,UAAYA,EAErB,CACA,aAAc,CACZ,KAAO,KAAK,mBAAmB,QAC7B,KAAK,mBAAmB,IAAI,EAAE,CAElC,CACA,WAAWC,EAAI,CACb,KAAK,mBAAmB,KAAK,KAAK,kBAAkB,WAAWA,CAAE,EAAG,KAAK,kBAAkB,aAAaA,CAAE,CAAC,CAC7G,CACA,aAAc,CACZ,OAAO,KAAK,SACd,CACA,KAAKC,EAAc,GAAO,CACxB,IAAMC,EAAO,KAAK,kBAAkB,MAAQ,IAC5C,OAAOA,EAAK,OAAS,EAAIA,EAAK,UAAU,CAAC,EAAIA,CAC/C,CACA,mBAAmBC,EAAU,CAC3B,IAAMC,EAAMC,EAAc,KAAK,UAAWF,CAAQ,EAClD,OAAOC,EAAI,OAAS,EAAI,IAAMA,EAAMA,CACtC,CACA,UAAUE,EAAOC,EAAOL,EAAMM,EAAa,CACzC,IAAMJ,EAAM,KAAK,mBAAmBF,EAAOO,EAAqBD,CAAW,CAAC,GAAK,KAAK,kBAAkB,SACxG,KAAK,kBAAkB,UAAUF,EAAOC,EAAOH,CAAG,CACpD,CACA,aAAaE,EAAOC,EAAOL,EAAMM,EAAa,CAC5C,IAAMJ,EAAM,KAAK,mBAAmBF,EAAOO,EAAqBD,CAAW,CAAC,GAAK,KAAK,kBAAkB,SACxG,KAAK,kBAAkB,aAAaF,EAAOC,EAAOH,CAAG,CACvD,CACA,SAAU,CACR,KAAK,kBAAkB,QAAQ,CACjC,CACA,MAAO,CACL,KAAK,kBAAkB,KAAK,CAC9B,CACA,UAAW,CACT,OAAO,KAAK,kBAAkB,SAAS,CACzC,CACA,UAAUM,EAAmB,EAAG,CAC9B,KAAK,kBAAkB,YAAYA,CAAgB,CACrD,CACA,OAAO,UAAO,SAAsCC,EAAmB,CACrE,OAAO,IAAKA,GAAqBf,GAAyBgB,EAASC,CAAgB,EAAMD,EAASE,EAAe,CAAC,CAAC,CACrH,EACA,OAAO,WAA0BC,EAAmB,CAClD,MAAOnB,EACP,QAASA,EAAqB,SAChC,CAAC,CACH,CACA,OAAOA,CACT,GAAG,EAoKH,IAAIoB,GAAyB,SAAUA,EAAW,CAChD,OAAAA,EAAUA,EAAU,OAAY,CAAC,EAAI,SACrCA,EAAUA,EAAU,WAAgB,CAAC,EAAI,aAClCA,CACT,GAAEA,GAAa,CAAC,CAAC,EACbC,GAAgC,SAAUA,EAAkB,CAC9D,OAAAA,EAAiBA,EAAiB,OAAY,CAAC,EAAI,SACnDA,EAAiBA,EAAiB,YAAiB,CAAC,EAAI,cACxDA,EAAiBA,EAAiB,KAAU,CAAC,EAAI,OACjDA,EAAiBA,EAAiB,MAAW,CAAC,EAAI,QAC3CA,CACT,GAAEA,GAAoB,CAAC,CAAC,EACpBC,GAA2B,SAAUA,EAAa,CACpD,OAAAA,EAAYA,EAAY,MAAW,CAAC,EAAI,QACxCA,EAAYA,EAAY,OAAY,CAAC,EAAI,SACzCA,EAAYA,EAAY,KAAU,CAAC,EAAI,OACvCA,EAAYA,EAAY,KAAU,CAAC,EAAI,OAChCA,CACT,GAAEA,GAAe,CAAC,CAAC,EACbC,EAAe,CACnB,QAAS,EACT,MAAO,EACP,KAAM,EACN,YAAa,EACb,SAAU,EACV,UAAW,EACX,YAAa,EACb,uBAAwB,EACxB,SAAU,EACV,SAAU,EACV,IAAK,GACL,cAAe,GACf,gBAAiB,GACjB,cAAe,EACjB,EAWA,SAASC,GAAYC,EAAQ,CAC3B,OAAOC,EAAgBD,CAAM,EAAEE,EAAiB,QAAQ,CAC1D,CACA,SAASC,GAAoBH,EAAQI,EAAWC,EAAO,CACrD,IAAMC,EAAOL,EAAgBD,CAAM,EAC7BO,EAAW,CAACD,EAAKJ,EAAiB,gBAAgB,EAAGI,EAAKJ,EAAiB,oBAAoB,CAAC,EAChGM,EAAOC,EAAoBF,EAAUH,CAAS,EACpD,OAAOK,EAAoBD,EAAMH,CAAK,CACxC,CACA,SAASK,GAAkBV,EAAQI,EAAWC,EAAO,CACnD,IAAMC,EAAOL,EAAgBD,CAAM,EAC7BW,EAAW,CAACL,EAAKJ,EAAiB,UAAU,EAAGI,EAAKJ,EAAiB,cAAc,CAAC,EACpFU,EAAOH,EAAoBE,EAAUP,CAAS,EACpD,OAAOK,EAAoBG,EAAMP,CAAK,CACxC,CACA,SAASQ,GAAoBb,EAAQI,EAAWC,EAAO,CACrD,IAAMC,EAAOL,EAAgBD,CAAM,EAC7Bc,EAAa,CAACR,EAAKJ,EAAiB,YAAY,EAAGI,EAAKJ,EAAiB,gBAAgB,CAAC,EAC1Fa,EAASN,EAAoBK,EAAYV,CAAS,EACxD,OAAOK,EAAoBM,EAAQV,CAAK,CAC1C,CACA,SAASW,GAAkBhB,EAAQK,EAAO,CAExC,IAAMY,EADOhB,EAAgBD,CAAM,EACbE,EAAiB,IAAI,EAC3C,OAAOO,EAAoBQ,EAAUZ,CAAK,CAC5C,CASA,SAASa,EAAoBC,EAAQC,EAAO,CAC1C,IAAMC,EAAOC,EAAgBH,CAAM,EACnC,OAAOI,EAAoBF,EAAKG,EAAiB,UAAU,EAAGJ,CAAK,CACrE,CACA,SAASK,EAAoBN,EAAQC,EAAO,CAC1C,IAAMC,EAAOC,EAAgBH,CAAM,EACnC,OAAOI,EAAoBF,EAAKG,EAAiB,UAAU,EAAGJ,CAAK,CACrE,CACA,SAASM,EAAwBP,EAAQC,EAAO,CAE9C,IAAMO,EADOL,EAAgBH,CAAM,EACHK,EAAiB,cAAc,EAC/D,OAAOD,EAAoBI,EAAoBP,CAAK,CACtD,CACA,SAASQ,EAAsBT,EAAQU,EAAQ,CAC7C,IAAMR,EAAOC,EAAgBH,CAAM,EAC7BW,EAAMT,EAAKG,EAAiB,aAAa,EAAEK,CAAM,EACvD,GAAI,OAAOC,EAAQ,IAAa,CAC9B,GAAID,IAAWE,EAAa,gBAC1B,OAAOV,EAAKG,EAAiB,aAAa,EAAEO,EAAa,OAAO,EAC3D,GAAIF,IAAWE,EAAa,cACjC,OAAOV,EAAKG,EAAiB,aAAa,EAAEO,EAAa,KAAK,CAElE,CACA,OAAOD,CACT,CAqBA,SAASE,GAAcC,EAAM,CAC3B,GAAI,CAACA,EAAKC,EAAiB,SAAS,EAClC,MAAM,IAAIC,EAAc,KAAM,EAAyL,CAE3N,CACA,SAASC,GAA6BC,EAAQ,CAC5C,IAAMJ,EAAOK,EAAgBD,CAAM,EACnC,OAAAL,GAAcC,CAAI,GACJA,EAAKC,EAAiB,SAAS,EAAE,CAAC,GAAK,CAAC,GACzC,IAAIK,GACX,OAAOA,GAAS,SACXC,GAAYD,CAAI,EAElB,CAACC,GAAYD,EAAK,CAAC,CAAC,EAAGC,GAAYD,EAAK,CAAC,CAAC,CAAC,CACnD,CACH,CACA,SAASE,GAAyBJ,EAAQK,EAAWC,EAAO,CAC1D,IAAMV,EAAOK,EAAgBD,CAAM,EACnCL,GAAcC,CAAI,EAClB,IAAMW,EAAiB,CAACX,EAAKC,EAAiB,SAAS,EAAE,CAAC,EAAGD,EAAKC,EAAiB,SAAS,EAAE,CAAC,CAAC,EAC1FW,EAAaC,EAAoBF,EAAgBF,CAAS,GAAK,CAAC,EACtE,OAAOI,EAAoBD,EAAYF,CAAK,GAAK,CAAC,CACpD,CAKA,SAASI,EAAoBC,EAAMC,EAAO,CACxC,QAASC,EAAID,EAAOC,EAAI,GAAIA,IAC1B,GAAI,OAAOF,EAAKE,CAAC,EAAM,IACrB,OAAOF,EAAKE,CAAC,EAGjB,MAAM,IAAIC,EAAc,KAAM,EAAqD,CACrF,CACA,SAASC,GAAYC,EAAM,CACzB,GAAM,CAACC,EAAGC,CAAC,EAAIF,EAAK,MAAM,GAAG,EAC7B,MAAO,CACL,MAAO,CAACC,EACR,QAAS,CAACC,CACZ,CACF,CAkBA,IAAMC,GAAqB,wGACrBC,EAAgB,CAAC,EACjBC,GAAqB,oNAC3B,SAASC,GAAWC,EAAOC,EAAQC,EAAQC,EAAU,CACnD,IAAIC,EAAOC,GAAOL,CAAK,EAEvBC,EADoBK,EAAeJ,EAAQD,CAAM,GACzBA,EACxB,IAAIM,EAAQ,CAAC,EACTC,EACJ,KAAOP,GAEL,GADAO,EAAQV,GAAmB,KAAKG,CAAM,EAClCO,EAAO,CACTD,EAAQA,EAAM,OAAOC,EAAM,MAAM,CAAC,CAAC,EACnC,IAAMC,EAAOF,EAAM,IAAI,EACvB,GAAI,CAACE,EACH,MAEFR,EAASQ,CACX,KAAO,CACLF,EAAM,KAAKN,CAAM,EACjB,KACF,CAKF,IAAIS,EAAqBN,EAAK,kBAAkB,EAC5CD,IACFO,EAAqBC,GAAiBR,EAAUO,CAAkB,EAClEN,EAAOQ,GAAuBR,EAAMD,CAAQ,GAE9C,IAAIU,EAAO,GACX,OAAAN,EAAM,QAAQP,GAAS,CACrB,IAAMc,EAAgBC,GAAiBf,CAAK,EAC5Ca,GAAQC,EAAgBA,EAAcV,EAAMF,EAAQQ,CAAkB,EAAIV,IAAU,KAAO,IAAMA,EAAM,QAAQ,WAAY,EAAE,EAAE,QAAQ,MAAO,GAAG,CACnJ,CAAC,EACMa,CACT,CAWA,SAASG,EAAWC,EAAMC,EAAOC,EAAM,CACrC,IAAMC,EAAU,IAAI,KAAK,CAAC,EAC1B,OAAAA,EAAQ,YAAYH,EAAMC,EAAOC,CAAI,EACrCC,EAAQ,SAAS,EAAG,EAAG,CAAC,EACjBA,CACT,CACA,SAASC,EAAeC,EAAQC,EAAQ,CACtC,IAAMC,EAAWC,GAAYH,CAAM,EAEnC,GADAI,EAAcF,CAAQ,IAAM,CAAC,EACzBE,EAAcF,CAAQ,EAAED,CAAM,EAChC,OAAOG,EAAcF,CAAQ,EAAED,CAAM,EAEvC,IAAII,EAAc,GAClB,OAAQJ,EAAQ,CACd,IAAK,YACHI,EAAcC,EAAoBN,EAAQO,EAAY,KAAK,EAC3D,MACF,IAAK,aACHF,EAAcC,EAAoBN,EAAQO,EAAY,MAAM,EAC5D,MACF,IAAK,WACHF,EAAcC,EAAoBN,EAAQO,EAAY,IAAI,EAC1D,MACF,IAAK,WACHF,EAAcC,EAAoBN,EAAQO,EAAY,IAAI,EAC1D,MACF,IAAK,YACHF,EAAcG,EAAoBR,EAAQO,EAAY,KAAK,EAC3D,MACF,IAAK,aACHF,EAAcG,EAAoBR,EAAQO,EAAY,MAAM,EAC5D,MACF,IAAK,WACHF,EAAcG,EAAoBR,EAAQO,EAAY,IAAI,EAC1D,MACF,IAAK,WACHF,EAAcG,EAAoBR,EAAQO,EAAY,IAAI,EAC1D,MACF,IAAK,QACH,IAAME,EAAYV,EAAeC,EAAQ,WAAW,EAC9CU,EAAYX,EAAeC,EAAQ,WAAW,EACpDK,EAAcM,EAAeC,EAAwBZ,EAAQO,EAAY,KAAK,EAAG,CAACE,EAAWC,CAAS,CAAC,EACvG,MACF,IAAK,SACH,IAAMG,EAAad,EAAeC,EAAQ,YAAY,EAChDc,EAAaf,EAAeC,EAAQ,YAAY,EACtDK,EAAcM,EAAeC,EAAwBZ,EAAQO,EAAY,MAAM,EAAG,CAACM,EAAYC,CAAU,CAAC,EAC1G,MACF,IAAK,OACH,IAAMC,EAAWhB,EAAeC,EAAQ,UAAU,EAC5CgB,EAAWjB,EAAeC,EAAQ,UAAU,EAClDK,EAAcM,EAAeC,EAAwBZ,EAAQO,EAAY,IAAI,EAAG,CAACQ,EAAUC,CAAQ,CAAC,EACpG,MACF,IAAK,OACH,IAAMC,EAAWlB,EAAeC,EAAQ,UAAU,EAC5CkB,EAAWnB,EAAeC,EAAQ,UAAU,EAClDK,EAAcM,EAAeC,EAAwBZ,EAAQO,EAAY,IAAI,EAAG,CAACU,EAAUC,CAAQ,CAAC,EACpG,KACJ,CACA,OAAIb,IACFD,EAAcF,CAAQ,EAAED,CAAM,EAAII,GAE7BA,CACT,CACA,SAASM,EAAeQ,EAAKC,EAAY,CACvC,OAAIA,IACFD,EAAMA,EAAI,QAAQ,cAAe,SAAUE,EAAOC,EAAK,CACrD,OAAOF,GAAc,MAAQE,KAAOF,EAAaA,EAAWE,CAAG,EAAID,CACrE,CAAC,GAEIF,CACT,CACA,SAASI,EAAUC,EAAKC,EAAQC,EAAY,IAAKC,EAAMC,EAAS,CAC9D,IAAIC,EAAM,IACNL,EAAM,GAAKI,GAAWJ,GAAO,KAC3BI,EACFJ,EAAM,CAACA,EAAM,GAEbA,EAAM,CAACA,EACPK,EAAMH,IAGV,IAAII,EAAS,OAAON,CAAG,EACvB,KAAOM,EAAO,OAASL,GACrBK,EAAS,IAAMA,EAEjB,OAAIH,IACFG,EAASA,EAAO,MAAMA,EAAO,OAASL,CAAM,GAEvCI,EAAMC,CACf,CACA,SAASC,GAAwBC,EAAcP,EAAQ,CAErD,OADcF,EAAUS,EAAc,CAAC,EAC1B,UAAU,EAAGP,CAAM,CAClC,CACA,SAASQ,EAAWC,EAAMC,EAAMC,EAAS,EAAGT,EAAO,GAAOC,EAAU,GAAO,CACzE,OAAO,SAAU/B,EAAMG,EAAQ,CAC7B,IAAIqC,EAAOC,GAAYJ,EAAMrC,CAAI,EAIjC,IAHIuC,EAAS,GAAKC,EAAO,CAACD,KACxBC,GAAQD,GAENF,IAAS,EACPG,IAAS,GAAKD,IAAW,MAC3BC,EAAO,YAEAH,IAAS,EAClB,OAAOH,GAAwBM,EAAMF,CAAI,EAE3C,IAAMI,EAAcC,EAAsBxC,EAAQyC,EAAa,SAAS,EACxE,OAAOlB,EAAUc,EAAMF,EAAMI,EAAaZ,EAAMC,CAAO,CACzD,CACF,CACA,SAASU,GAAYD,EAAMxC,EAAM,CAC/B,OAAQwC,EAAM,CACZ,IAAK,GACH,OAAOxC,EAAK,YAAY,EAC1B,IAAK,GACH,OAAOA,EAAK,SAAS,EACvB,IAAK,GACH,OAAOA,EAAK,QAAQ,EACtB,IAAK,GACH,OAAOA,EAAK,SAAS,EACvB,IAAK,GACH,OAAOA,EAAK,WAAW,EACzB,IAAK,GACH,OAAOA,EAAK,WAAW,EACzB,IAAK,GACH,OAAOA,EAAK,gBAAgB,EAC9B,IAAK,GACH,OAAOA,EAAK,OAAO,EACrB,QACE,MAAM,IAAI6C,EAAc,KAAM,EAAgD,CAClF,CACF,CACA,SAASC,EAAcT,EAAMU,EAAOC,EAAOC,EAAU,OAAQC,EAAW,GAAO,CAC7E,OAAO,SAAUlD,EAAMG,EAAQ,CAC7B,OAAOgD,GAAmBnD,EAAMG,EAAQkC,EAAMU,EAAOC,EAAME,CAAQ,CACrE,CACF,CACA,SAASC,GAAmBnD,EAAMG,EAAQkC,EAAMU,EAAOC,EAAME,EAAU,CACrE,OAAQb,EAAM,CACZ,IAAK,GACH,OAAOe,GAAoBjD,EAAQ6C,EAAMD,CAAK,EAAE/C,EAAK,SAAS,CAAC,EACjE,IAAK,GACH,OAAOqD,GAAkBlD,EAAQ6C,EAAMD,CAAK,EAAE/C,EAAK,OAAO,CAAC,EAC7D,IAAK,GACH,IAAMsD,EAAetD,EAAK,SAAS,EAC7BuD,EAAiBvD,EAAK,WAAW,EACvC,GAAIkD,EAAU,CACZ,IAAMM,EAAQC,GAA6BtD,CAAM,EAC3CuD,EAAaC,GAAyBxD,EAAQ6C,EAAMD,CAAK,EACzDa,EAAQJ,EAAM,UAAUK,GAAQ,CACpC,GAAI,MAAM,QAAQA,CAAI,EAAG,CACvB,GAAM,CAACC,EAAMC,CAAE,EAAIF,EACbG,GAAYV,GAAgBQ,EAAK,OAASP,GAAkBO,EAAK,QACjEG,GAAWX,EAAeS,EAAG,OAAST,IAAiBS,EAAG,OAASR,EAAiBQ,EAAG,QAC7F,GAAID,EAAK,MAAQC,EAAG,OAClB,GAAIC,IAAaC,GACf,MAAO,WAEAD,IAAaC,GACtB,MAAO,EAEX,SACMJ,EAAK,QAAUP,GAAgBO,EAAK,UAAYN,EAClD,MAAO,GAGX,MAAO,EACT,CAAC,EACD,GAAIK,IAAU,GACZ,OAAOF,EAAWE,CAAK,CAE3B,CACA,OAAOM,GAAoB/D,EAAQ6C,EAAMD,CAAK,EAAEO,EAAe,GAAK,EAAI,CAAC,EAC3E,IAAK,GACH,OAAOa,GAAkBhE,EAAQ4C,CAAK,EAAE/C,EAAK,YAAY,GAAK,EAAI,EAAI,CAAC,EACzE,QACE,IAAMoE,EAAa/B,EACnB,MAAM,IAAIQ,EAAc,KAAM,EAAwD,CAC1F,CACF,CACA,SAASwB,EAAetB,EAAO,CAC7B,OAAO,SAAU/C,EAAMG,EAAQoC,EAAQ,CACrC,IAAM+B,EAAO,GAAK/B,EACZV,EAAYc,EAAsBxC,EAAQyC,EAAa,SAAS,EAChE2B,EAAQD,EAAO,EAAI,KAAK,MAAMA,EAAO,EAAE,EAAI,KAAK,KAAKA,EAAO,EAAE,EACpE,OAAQvB,EAAO,CACb,IAAK,GACH,OAAQuB,GAAQ,EAAI,IAAM,IAAM5C,EAAU6C,EAAO,EAAG1C,CAAS,EAAIH,EAAU,KAAK,IAAI4C,EAAO,EAAE,EAAG,EAAGzC,CAAS,EAC9G,IAAK,GACH,MAAO,OAASyC,GAAQ,EAAI,IAAM,IAAM5C,EAAU6C,EAAO,EAAG1C,CAAS,EACvE,IAAK,GACH,MAAO,OAASyC,GAAQ,EAAI,IAAM,IAAM5C,EAAU6C,EAAO,EAAG1C,CAAS,EAAI,IAAMH,EAAU,KAAK,IAAI4C,EAAO,EAAE,EAAG,EAAGzC,CAAS,EAC5H,IAAK,GACH,OAAIU,IAAW,EACN,KAEC+B,GAAQ,EAAI,IAAM,IAAM5C,EAAU6C,EAAO,EAAG1C,CAAS,EAAI,IAAMH,EAAU,KAAK,IAAI4C,EAAO,EAAE,EAAG,EAAGzC,CAAS,EAEtH,QACE,MAAM,IAAIgB,EAAc,KAAM,EAA4C,CAC9E,CACF,CACF,CACA,IAAM2B,GAAU,EACVC,EAAW,EACjB,SAASC,GAAuB5E,EAAM,CACpC,IAAM6E,EAAiB9E,EAAWC,EAAM0E,GAAS,CAAC,EAAE,OAAO,EAC3D,OAAO3E,EAAWC,EAAM,EAAG,GAAK6E,GAAkBF,EAAWA,EAAWA,EAAW,GAAKE,CAAc,CACxG,CACA,SAASC,GAAuBC,EAAU,CACxC,IAAMC,EAAaD,EAAS,OAAO,EAC7BE,EAAkBD,IAAe,EAAI,GAAKL,EAAWK,EAC3D,OAAOjF,EAAWgF,EAAS,YAAY,EAAGA,EAAS,SAAS,EAAGA,EAAS,QAAQ,EAAIE,CAAe,CACrG,CACA,SAASC,GAAW1C,EAAM2C,EAAa,GAAO,CAC5C,OAAO,SAAUjF,EAAMG,EAAQ,CAC7B,IAAI+E,EACJ,GAAID,EAAY,CACd,IAAME,EAA4B,IAAI,KAAKnF,EAAK,YAAY,EAAGA,EAAK,SAAS,EAAG,CAAC,EAAE,OAAO,EAAI,EACxFoF,EAAQpF,EAAK,QAAQ,EAC3BkF,EAAS,EAAI,KAAK,OAAOE,EAAQD,GAA6B,CAAC,CACjE,KAAO,CACL,IAAME,EAAYT,GAAuB5E,CAAI,EACvCsF,EAAaZ,GAAuBW,EAAU,YAAY,CAAC,EAC3DE,EAAOF,EAAU,QAAQ,EAAIC,EAAW,QAAQ,EACtDJ,EAAS,EAAI,KAAK,MAAMK,EAAO,MAAO,CACxC,CACA,OAAO7D,EAAUwD,EAAQ5C,EAAMK,EAAsBxC,EAAQyC,EAAa,SAAS,CAAC,CACtF,CACF,CACA,SAAS4C,EAAwBlD,EAAMR,EAAO,GAAO,CACnD,OAAO,SAAU9B,EAAMG,EAAQ,CAE7B,IAAMsF,EADYb,GAAuB5E,CAAI,EACT,YAAY,EAChD,OAAO0B,EAAU+D,EAAmBnD,EAAMK,EAAsBxC,EAAQyC,EAAa,SAAS,EAAGd,CAAI,CACvG,CACF,CACA,IAAM4D,GAAe,CAAC,EACtB,SAASC,GAAiBvF,EAAQ,CAChC,GAAIsF,GAAatF,CAAM,EACrB,OAAOsF,GAAatF,CAAM,EAE5B,IAAIwF,EACJ,OAAQxF,EAAQ,CACd,IAAK,IACL,IAAK,KACL,IAAK,MACHwF,EAAY9C,EAAc,EAAG+C,EAAiB,WAAW,EACzD,MACF,IAAK,OACHD,EAAY9C,EAAc,EAAG+C,EAAiB,IAAI,EAClD,MACF,IAAK,QACHD,EAAY9C,EAAc,EAAG+C,EAAiB,MAAM,EACpD,MACF,IAAK,IACHD,EAAYxD,EAAW,EAAG,EAAG,EAAG,GAAO,EAAI,EAC3C,MACF,IAAK,KACHwD,EAAYxD,EAAW,EAAG,EAAG,EAAG,GAAM,EAAI,EAC1C,MACF,IAAK,MACHwD,EAAYxD,EAAW,EAAG,EAAG,EAAG,GAAO,EAAI,EAC3C,MACF,IAAK,OACHwD,EAAYxD,EAAW,EAAG,EAAG,EAAG,GAAO,EAAI,EAC3C,MACF,IAAK,IACHwD,EAAYJ,EAAwB,CAAC,EACrC,MACF,IAAK,KACHI,EAAYJ,EAAwB,EAAG,EAAI,EAC3C,MACF,IAAK,MACHI,EAAYJ,EAAwB,CAAC,EACrC,MACF,IAAK,OACHI,EAAYJ,EAAwB,CAAC,EACrC,MACF,IAAK,IACL,IAAK,IACHI,EAAYxD,EAAW,EAAG,EAAG,CAAC,EAC9B,MACF,IAAK,KACL,IAAK,KACHwD,EAAYxD,EAAW,EAAG,EAAG,CAAC,EAC9B,MACF,IAAK,MACHwD,EAAY9C,EAAc,EAAG+C,EAAiB,WAAW,EACzD,MACF,IAAK,OACHD,EAAY9C,EAAc,EAAG+C,EAAiB,IAAI,EAClD,MACF,IAAK,QACHD,EAAY9C,EAAc,EAAG+C,EAAiB,MAAM,EACpD,MACF,IAAK,MACHD,EAAY9C,EAAc,EAAG+C,EAAiB,YAAa5C,EAAU,UAAU,EAC/E,MACF,IAAK,OACH2C,EAAY9C,EAAc,EAAG+C,EAAiB,KAAM5C,EAAU,UAAU,EACxE,MACF,IAAK,QACH2C,EAAY9C,EAAc,EAAG+C,EAAiB,OAAQ5C,EAAU,UAAU,EAC1E,MACF,IAAK,IACH2C,EAAYZ,GAAW,CAAC,EACxB,MACF,IAAK,KACHY,EAAYZ,GAAW,CAAC,EACxB,MACF,IAAK,IACHY,EAAYZ,GAAW,EAAG,EAAI,EAC9B,MACF,IAAK,IACHY,EAAYxD,EAAW,EAAG,CAAC,EAC3B,MACF,IAAK,KACHwD,EAAYxD,EAAW,EAAG,CAAC,EAC3B,MACF,IAAK,IACL,IAAK,KACHwD,EAAYxD,EAAW,EAAG,CAAC,EAC3B,MACF,IAAK,MACHwD,EAAY9C,EAAc,EAAG+C,EAAiB,YAAa5C,EAAU,UAAU,EAC/E,MACF,IAAK,OACH2C,EAAY9C,EAAc,EAAG+C,EAAiB,KAAM5C,EAAU,UAAU,EACxE,MACF,IAAK,QACH2C,EAAY9C,EAAc,EAAG+C,EAAiB,OAAQ5C,EAAU,UAAU,EAC1E,MACF,IAAK,SACH2C,EAAY9C,EAAc,EAAG+C,EAAiB,MAAO5C,EAAU,UAAU,EACzE,MACF,IAAK,IACL,IAAK,KACL,IAAK,MACH2C,EAAY9C,EAAc,EAAG+C,EAAiB,WAAW,EACzD,MACF,IAAK,OACHD,EAAY9C,EAAc,EAAG+C,EAAiB,IAAI,EAClD,MACF,IAAK,QACHD,EAAY9C,EAAc,EAAG+C,EAAiB,MAAM,EACpD,MACF,IAAK,SACHD,EAAY9C,EAAc,EAAG+C,EAAiB,KAAK,EACnD,MACF,IAAK,IACL,IAAK,KACL,IAAK,MACHD,EAAY9C,EAAc,EAAG+C,EAAiB,WAAW,EACzD,MACF,IAAK,OACHD,EAAY9C,EAAc,EAAG+C,EAAiB,IAAI,EAClD,MACF,IAAK,QACHD,EAAY9C,EAAc,EAAG+C,EAAiB,MAAM,EACpD,MACF,IAAK,IACL,IAAK,KACL,IAAK,MACHD,EAAY9C,EAAc,EAAG+C,EAAiB,YAAa5C,EAAU,WAAY,EAAI,EACrF,MACF,IAAK,OACH2C,EAAY9C,EAAc,EAAG+C,EAAiB,KAAM5C,EAAU,WAAY,EAAI,EAC9E,MACF,IAAK,QACH2C,EAAY9C,EAAc,EAAG+C,EAAiB,OAAQ5C,EAAU,WAAY,EAAI,EAChF,MACF,IAAK,IACL,IAAK,KACL,IAAK,MACH2C,EAAY9C,EAAc,EAAG+C,EAAiB,YAAa5C,EAAU,OAAQ,EAAI,EACjF,MACF,IAAK,OACH2C,EAAY9C,EAAc,EAAG+C,EAAiB,KAAM5C,EAAU,OAAQ,EAAI,EAC1E,MACF,IAAK,QACH2C,EAAY9C,EAAc,EAAG+C,EAAiB,OAAQ5C,EAAU,OAAQ,EAAI,EAC5E,MACF,IAAK,IACH2C,EAAYxD,EAAW,EAAG,EAAG,GAAG,EAChC,MACF,IAAK,KACHwD,EAAYxD,EAAW,EAAG,EAAG,GAAG,EAChC,MACF,IAAK,IACHwD,EAAYxD,EAAW,EAAG,CAAC,EAC3B,MACF,IAAK,KACHwD,EAAYxD,EAAW,EAAG,CAAC,EAC3B,MACF,IAAK,IACHwD,EAAYxD,EAAW,EAAG,CAAC,EAC3B,MACF,IAAK,KACHwD,EAAYxD,EAAW,EAAG,CAAC,EAC3B,MACF,IAAK,IACHwD,EAAYxD,EAAW,EAAG,CAAC,EAC3B,MACF,IAAK,KACHwD,EAAYxD,EAAW,EAAG,CAAC,EAC3B,MACF,IAAK,IACHwD,EAAYxD,EAAW,EAAG,CAAC,EAC3B,MACF,IAAK,KACHwD,EAAYxD,EAAW,EAAG,CAAC,EAC3B,MACF,IAAK,MACHwD,EAAYxD,EAAW,EAAG,CAAC,EAC3B,MACF,IAAK,IACL,IAAK,KACL,IAAK,MACHwD,EAAYvB,EAAe,CAAC,EAC5B,MACF,IAAK,QACHuB,EAAYvB,EAAe,CAAC,EAC5B,MACF,IAAK,IACL,IAAK,KACL,IAAK,MACL,IAAK,IACL,IAAK,KACL,IAAK,MACHuB,EAAYvB,EAAe,CAAC,EAC5B,MACF,IAAK,OACL,IAAK,OACL,IAAK,OACHuB,EAAYvB,EAAe,CAAC,EAC5B,MACF,QACE,OAAO,IACX,CACA,OAAAqB,GAAatF,CAAM,EAAIwF,EAChBA,CACT,CACA,SAASE,GAAiBC,EAAUC,EAAU,CAC5CD,EAAWA,EAAS,QAAQ,KAAM,EAAE,EACpC,IAAME,EAA0B,KAAK,MAAM,yBAA2BF,CAAQ,EAAI,IAClF,OAAO,MAAME,CAAuB,EAAID,EAAWC,CACrD,CACA,SAASC,GAAelG,EAAMmG,EAAS,CACrC,OAAAnG,EAAO,IAAI,KAAKA,EAAK,QAAQ,CAAC,EAC9BA,EAAK,WAAWA,EAAK,WAAW,EAAImG,CAAO,EACpCnG,CACT,CACA,SAASoG,GAAuBpG,EAAM+F,EAAUM,EAAS,CAEvD,IAAMC,EAAqBtG,EAAK,kBAAkB,EAC5CuG,EAAiBT,GAAiBC,EAAUO,CAAkB,EACpE,OAAOJ,GAAelG,EAAM,IAAgBuG,EAAiBD,EAAmB,CAClF,CACA,SAASE,GAAOC,EAAO,CACrB,GAAIC,GAAOD,CAAK,EACd,OAAOA,EAET,GAAI,OAAOA,GAAU,UAAY,CAAC,MAAMA,CAAK,EAC3C,OAAO,IAAI,KAAKA,CAAK,EAEvB,GAAI,OAAOA,GAAU,SAAU,CAE7B,GADAA,EAAQA,EAAM,KAAK,EACf,kCAAkC,KAAKA,CAAK,EAAG,CACjD,GAAM,CAACE,EAAGC,EAAI,EAAGC,EAAI,CAAC,EAAIJ,EAAM,MAAM,GAAG,EAAE,IAAIK,GAAO,CAACA,CAAG,EAC1D,OAAOjH,EAAW8G,EAAGC,EAAI,EAAGC,CAAC,CAC/B,CACA,IAAME,EAAW,WAAWN,CAAK,EACjC,GAAI,CAAC,MAAMA,EAAQM,CAAQ,EACzB,OAAO,IAAI,KAAKA,CAAQ,EAE1B,IAAIvF,EACJ,GAAIA,EAAQiF,EAAM,MAAMO,EAAkB,EACxC,OAAOC,GAAgBzF,CAAK,CAEhC,CACA,IAAMxB,EAAO,IAAI,KAAKyG,CAAK,EAC3B,GAAI,CAACC,GAAO1G,CAAI,EACd,MAAM,IAAI6C,EAAc,KAAM,EAAuD,EAEvF,OAAO7C,CACT,CACA,SAASiH,GAAgBzF,EAAO,CAC9B,IAAMxB,EAAO,IAAI,KAAK,CAAC,EACnBkH,EAAS,EACTC,EAAQ,EACNC,EAAa5F,EAAM,CAAC,EAAIxB,EAAK,eAAiBA,EAAK,YACnDqH,EAAa7F,EAAM,CAAC,EAAIxB,EAAK,YAAcA,EAAK,SAClDwB,EAAM,CAAC,IACT0F,EAAS,OAAO1F,EAAM,CAAC,EAAIA,EAAM,EAAE,CAAC,EACpC2F,EAAQ,OAAO3F,EAAM,CAAC,EAAIA,EAAM,EAAE,CAAC,GAErC4F,EAAW,KAAKpH,EAAM,OAAOwB,EAAM,CAAC,CAAC,EAAG,OAAOA,EAAM,CAAC,CAAC,EAAI,EAAG,OAAOA,EAAM,CAAC,CAAC,CAAC,EAC9E,IAAM8F,EAAI,OAAO9F,EAAM,CAAC,GAAK,CAAC,EAAI0F,EAC5BN,EAAI,OAAOpF,EAAM,CAAC,GAAK,CAAC,EAAI2F,EAC5BI,EAAI,OAAO/F,EAAM,CAAC,GAAK,CAAC,EACxBgG,EAAK,KAAK,MAAM,WAAW,MAAQhG,EAAM,CAAC,GAAK,EAAE,EAAI,GAAI,EAC/D,OAAA6F,EAAW,KAAKrH,EAAMsH,EAAGV,EAAGW,EAAGC,CAAE,EAC1BxH,CACT,CACA,SAAS0G,GAAOD,EAAO,CACrB,OAAOA,aAAiB,MAAQ,CAAC,MAAMA,EAAM,QAAQ,CAAC,CACxD,CA4UA,IAAMgB,GAAY,MACZC,GAAc,CAAC,EACjBC,IAAwB,IAAM,CAChC,MAAMA,CAAQ,CACZ,MACA,UACA,eAAiBD,GACjB,SACA,SAAW,IAAI,IACf,YAAYE,EAAOC,EAAW,CAC5B,KAAK,MAAQD,EACb,KAAK,UAAYC,CACnB,CACA,IAAI,MAAMC,EAAO,CACf,KAAK,eAAiBA,GAAS,KAAOA,EAAM,KAAK,EAAE,MAAML,EAAS,EAAIC,EACxE,CACA,IAAI,QAAQI,EAAO,CACjB,KAAK,SAAW,OAAOA,GAAU,SAAWA,EAAM,KAAK,EAAE,MAAML,EAAS,EAAIK,CAC9E,CACA,WAAY,CACV,QAAWC,KAAS,KAAK,eACvB,KAAK,aAAaA,EAAO,EAAI,EAE/B,IAAMC,EAAW,KAAK,SACtB,GAAI,MAAM,QAAQA,CAAQ,GAAKA,aAAoB,IACjD,QAAWD,KAASC,EAClB,KAAK,aAAaD,EAAO,EAAI,UAEtBC,GAAY,KACrB,QAAWD,KAAS,OAAO,KAAKC,CAAQ,EACtC,KAAK,aAAaD,EAAO,EAAQC,EAASD,CAAK,CAAE,EAGrD,KAAK,gBAAgB,CACvB,CACA,aAAaA,EAAOE,EAAa,CAC/B,IAAMC,EAAQ,KAAK,SAAS,IAAIH,CAAK,EACjCG,IAAU,QACRA,EAAM,UAAYD,IACpBC,EAAM,QAAU,GAChBA,EAAM,QAAUD,GAElBC,EAAM,QAAU,IAEhB,KAAK,SAAS,IAAIH,EAAO,CACvB,QAASE,EACT,QAAS,GACT,QAAS,EACX,CAAC,CAEL,CACA,iBAAkB,CAChB,QAAWE,KAAc,KAAK,SAAU,CACtC,IAAMJ,EAAQI,EAAW,CAAC,EACpBD,EAAQC,EAAW,CAAC,EACtBD,EAAM,SACR,KAAK,aAAaH,EAAOG,EAAM,OAAO,EACtCA,EAAM,QAAU,IACNA,EAAM,UACZA,EAAM,SACR,KAAK,aAAaH,EAAO,EAAK,EAEhC,KAAK,SAAS,OAAOA,CAAK,GAE5BG,EAAM,QAAU,EAClB,CACF,CACA,aAAaH,EAAOK,EAAS,CAM3BL,EAAQA,EAAM,KAAK,EACfA,EAAM,OAAS,GACjBA,EAAM,MAAMN,EAAS,EAAE,QAAQM,GAAS,CAClCK,EACF,KAAK,UAAU,SAAS,KAAK,MAAM,cAAeL,CAAK,EAEvD,KAAK,UAAU,YAAY,KAAK,MAAM,cAAeA,CAAK,CAE9D,CAAC,CAEL,CACA,OAAO,UAAO,SAAyBM,EAAmB,CACxD,OAAO,IAAKA,GAAqBV,GAAYW,EAAqBC,EAAU,EAAMD,EAAqBE,EAAS,CAAC,CACnH,EACA,OAAO,UAAyBC,EAAkB,CAChD,KAAMd,EACN,UAAW,CAAC,CAAC,GAAI,UAAW,EAAE,CAAC,EAC/B,OAAQ,CACN,MAAO,CAAC,EAAG,QAAS,OAAO,EAC3B,QAAS,SACX,CACF,CAAC,CACH,CACA,OAAOA,CACT,GAAG,EAuGH,IAAMe,EAAN,KAAqB,CACnB,UACA,QACA,MACA,MACA,YAAYC,EAAWC,EAASC,EAAOC,EAAO,CAC5C,KAAK,UAAYH,EACjB,KAAK,QAAUC,EACf,KAAK,MAAQC,EACb,KAAK,MAAQC,CACf,CACA,IAAI,OAAQ,CACV,OAAO,KAAK,QAAU,CACxB,CACA,IAAI,MAAO,CACT,OAAO,KAAK,QAAU,KAAK,MAAQ,CACrC,CACA,IAAI,MAAO,CACT,OAAO,KAAK,MAAQ,IAAM,CAC5B,CACA,IAAI,KAAM,CACR,MAAO,CAAC,KAAK,IACf,CACF,EACIC,IAAwB,IAAM,CAChC,MAAMA,CAAQ,CACZ,eACA,UACA,SACA,IAAI,QAAQH,EAAS,CACnB,KAAK,SAAWA,EAChB,KAAK,cAAgB,EACvB,CACA,IAAI,aAAaI,EAAI,CAInB,KAAK,WAAaA,CACpB,CACA,IAAI,cAAe,CACjB,OAAO,KAAK,UACd,CACA,SAAW,KACX,cAAgB,GAChB,QAAU,KACV,WACA,YAAYC,EAAgBC,EAAWC,EAAU,CAC/C,KAAK,eAAiBF,EACtB,KAAK,UAAYC,EACjB,KAAK,SAAWC,CAClB,CACA,IAAI,cAAcC,EAAO,CACnBA,IACF,KAAK,UAAYA,EAErB,CACA,WAAY,CACV,GAAI,KAAK,cAAe,CACtB,KAAK,cAAgB,GACrB,IAAMA,EAAQ,KAAK,SACf,CAAC,KAAK,SAAWA,IAYjB,KAAK,QAAU,KAAK,SAAS,KAAKA,CAAK,EAAE,OAAO,KAAK,YAAY,EAGvE,CACA,GAAI,KAAK,QAAS,CAChB,IAAMC,EAAU,KAAK,QAAQ,KAAK,KAAK,QAAQ,EAC3CA,GAAS,KAAK,cAAcA,CAAO,CACzC,CACF,CACA,cAAcA,EAAS,CACrB,IAAMC,EAAgB,KAAK,eAC3BD,EAAQ,iBAAiB,CAACE,EAAMC,EAAuBC,IAAiB,CACtE,GAAIF,EAAK,eAAiB,KACxBD,EAAc,mBAAmB,KAAK,UAAW,IAAIZ,EAAea,EAAK,KAAM,KAAK,SAAU,GAAI,EAAE,EAAGE,IAAiB,KAAO,OAAYA,CAAY,UAC9IA,GAAgB,KACzBH,EAAc,OAAOE,IAA0B,KAAO,OAAYA,CAAqB,UAC9EA,IAA0B,KAAM,CACzC,IAAME,EAAOJ,EAAc,IAAIE,CAAqB,EACpDF,EAAc,KAAKI,EAAMD,CAAY,EACrCE,GAAgBD,EAAMH,CAAI,CAC5B,CACF,CAAC,EACD,QAASK,EAAI,EAAGC,EAAOP,EAAc,OAAQM,EAAIC,EAAMD,IAAK,CAE1D,IAAME,EADUR,EAAc,IAAIM,CAAC,EACX,QACxBE,EAAQ,MAAQF,EAChBE,EAAQ,MAAQD,EAChBC,EAAQ,QAAU,KAAK,QACzB,CACAT,EAAQ,sBAAsBU,GAAU,CACtC,IAAMC,EAAUV,EAAc,IAAIS,EAAO,YAAY,EACrDJ,GAAgBK,EAASD,CAAM,CACjC,CAAC,CACH,CACA,OAAO,uBAAuBE,EAAKC,EAAK,CACtC,MAAO,EACT,CACA,OAAO,UAAO,SAAyBC,EAAmB,CACxD,OAAO,IAAKA,GAAqBpB,GAAYqB,EAAqBC,EAAgB,EAAMD,EAAqBE,EAAW,EAAMF,EAAqBG,EAAe,CAAC,CACrK,EACA,OAAO,UAAyBC,EAAkB,CAChD,KAAMzB,EACN,UAAW,CAAC,CAAC,GAAI,QAAS,GAAI,UAAW,EAAE,CAAC,EAC5C,OAAQ,CACN,QAAS,UACT,aAAc,eACd,cAAe,eACjB,CACF,CAAC,CACH,CACA,OAAOA,CACT,GAAG,EAIH,SAASY,GAAgBD,EAAMK,EAAQ,CACrCL,EAAK,QAAQ,UAAYK,EAAO,IAClC,CAIA,IAAIU,IAAqB,IAAM,CAC7B,MAAMA,CAAK,CACT,eACA,SAAW,IAAIC,EACf,iBAAmB,KACnB,iBAAmB,KACnB,aAAe,KACf,aAAe,KACf,YAAYC,EAAgBC,EAAa,CACvC,KAAK,eAAiBD,EACtB,KAAK,iBAAmBC,CAC1B,CACA,IAAI,KAAKC,EAAW,CAClB,KAAK,SAAS,UAAY,KAAK,SAAS,KAAOA,EAC/C,KAAK,YAAY,CACnB,CACA,IAAI,SAASD,EAAa,CACxBE,GAAeF,EAAkD,EAAwB,EACzF,KAAK,iBAAmBA,EACxB,KAAK,aAAe,KACpB,KAAK,YAAY,CACnB,CACA,IAAI,SAASA,EAAa,CACxBE,GAAeF,EAAkD,EAAwB,EACzF,KAAK,iBAAmBA,EACxB,KAAK,aAAe,KACpB,KAAK,YAAY,CACnB,CACA,aAAc,CACR,KAAK,SAAS,UACX,KAAK,eACR,KAAK,eAAe,MAAM,EAC1B,KAAK,aAAe,KAChB,KAAK,mBACP,KAAK,aAAe,KAAK,eAAe,mBAAmB,KAAK,iBAAkB,KAAK,QAAQ,IAI9F,KAAK,eACR,KAAK,eAAe,MAAM,EAC1B,KAAK,aAAe,KAChB,KAAK,mBACP,KAAK,aAAe,KAAK,eAAe,mBAAmB,KAAK,iBAAkB,KAAK,QAAQ,GAIvG,CACA,OAAO,mBACP,OAAO,qBACP,OAAO,uBAAuBG,EAAKC,EAAK,CACtC,MAAO,EACT,CACA,OAAO,UAAO,SAAsBC,EAAmB,CACrD,OAAO,IAAKA,GAAqBR,GAASS,EAAqBC,EAAgB,EAAMD,EAAqBE,EAAW,CAAC,CACxH,EACA,OAAO,UAAyBC,EAAkB,CAChD,KAAMZ,EACN,UAAW,CAAC,CAAC,GAAI,OAAQ,EAAE,CAAC,EAC5B,OAAQ,CACN,KAAM,OACN,SAAU,WACV,SAAU,UACZ,CACF,CAAC,CACH,CACA,OAAOA,CACT,GAAG,EAIGC,EAAN,KAAkB,CAChB,UAAY,KACZ,KAAO,IACT,EACA,SAASI,GAAeF,EAAaU,EAAU,CAC7C,GAAIV,GAAe,CAACA,EAAY,mBAC9B,MAAM,IAAIW,EAAc,KAA2C,EAA6F,CAEpK,CA0UA,SAASC,GAAyBC,EAAMC,EAAO,CAC7C,OAAO,IAAIC,EAAc,KAAM,EAA6E,CAC9G,CAMA,IAAMC,GAAN,KAA2B,CACzB,mBAAmBC,EAAOC,EAAmBC,EAAS,CACpD,OAAOC,GAAU,IAAMH,EAAM,UAAU,CACrC,KAAMC,EACN,MAAOC,CACT,CAAC,CAAC,CACJ,CACA,QAAQE,EAAc,CACpBD,GAAU,IAAMC,EAAa,YAAY,CAAC,CAC5C,CACF,EACMC,GAAN,KAAsB,CACpB,mBAAmBL,EAAOC,EAAmBC,EAAS,CACpD,OAAAF,EAAM,KAAKM,GAAKL,IAAoBK,CAAC,EAAGC,GAAKL,IAAUK,CAAC,CAAC,EAClD,CACL,YAAa,IAAM,CACjBN,EAAoB,KACpBC,EAAU,IACZ,CACF,CACF,CACA,QAAQE,EAAc,CACpBA,EAAa,YAAY,CAC3B,CACF,EACMI,GAAgC,IAAIH,GACpCI,GAAqC,IAAIV,GAC3CW,IAA0B,IAAM,CAClC,MAAMA,CAAU,CACd,KACA,aAAe,KACf,0BAA4B,GAC5B,cAAgB,KAChB,KAAO,KACP,UAAY,KACZ,wBAA0BC,EAAOC,EAAmC,EACpE,YAAYC,EAAK,CACf,KAAK,KAAOA,CACd,CACA,aAAc,CACR,KAAK,eACP,KAAK,SAAS,EAEhB,KAAK,KAAO,IACd,CACA,UAAUC,EAAK,CACb,GAAI,CAAC,KAAK,KAAM,CACd,GAAIA,EACF,GAAI,CACF,KAAK,0BAA4B,GACjC,KAAK,WAAWA,CAAG,CACrB,QAAE,CACA,KAAK,0BAA4B,EACnC,CAEF,OAAO,KAAK,YACd,CACA,OAAIA,IAAQ,KAAK,MACf,KAAK,SAAS,EACP,KAAK,UAAUA,CAAG,GAEpB,KAAK,YACd,CACA,WAAWA,EAAK,CACd,KAAK,KAAOA,EACZ,KAAK,UAAY,KAAK,gBAAgBA,CAAG,EACzC,KAAK,cAAgB,KAAK,UAAU,mBAAmBA,EAAKC,GAAS,KAAK,mBAAmBD,EAAKC,CAAK,EAAGR,GAAK,KAAK,wBAAwBA,CAAC,CAAC,CAChJ,CACA,gBAAgBO,EAAK,CACnB,GAAIE,GAAWF,CAAG,EAChB,OAAON,GAET,GAAIS,GAAgBH,CAAG,EACrB,OAAOL,GAET,MAAMS,GAAyBR,EAAWI,CAAG,CAC/C,CACA,UAAW,CACT,KAAK,UAAU,QAAQ,KAAK,aAAa,EACzC,KAAK,aAAe,KACpB,KAAK,cAAgB,KACrB,KAAK,KAAO,IACd,CACA,mBAAmBd,EAAOe,EAAO,CAC3Bf,IAAU,KAAK,OACjB,KAAK,aAAee,EAChB,KAAK,2BACP,KAAK,MAAM,aAAa,EAG9B,CACA,OAAO,UAAO,SAA2BI,EAAmB,CAC1D,OAAO,IAAKA,GAAqBT,GAAcU,EAAqBC,GAAmB,EAAE,CAAC,CAC5F,EACA,OAAO,WAA0BC,GAAa,CAC5C,KAAM,QACN,KAAMZ,EACN,KAAM,EACR,CAAC,CACH,CACA,OAAOA,CACT,GAAG,EAyEH,IAAMa,GAAsB,aACtBC,GAA0C,IAAIC,EAA8F,EAAE,EAC9IC,GAAyC,IAAID,EAA6F,EAAE,EAC9IE,IAAyB,IAAM,CACjC,MAAMA,CAAS,CACb,OACA,gBACA,eACA,YAAYC,EAAQC,EAAiBC,EAAgB,CACnD,KAAK,OAASF,EACd,KAAK,gBAAkBC,EACvB,KAAK,eAAiBC,CACxB,CACA,UAAUC,EAAOC,EAAQC,EAAUL,EAAQ,CACzC,GAAIG,GAAS,MAAQA,IAAU,IAAMA,IAAUA,EAAO,OAAO,KAC7D,GAAI,CACF,IAAMG,EAAUF,GAAU,KAAK,gBAAgB,YAAcT,GACvDY,EAAYF,GAAY,KAAK,gBAAgB,UAAY,KAAK,iBAAmB,OACvF,OAAOG,GAAWL,EAAOG,EAASN,GAAU,KAAK,OAAQO,CAAS,CACpE,OAASE,EAAO,CACd,MAAMC,GAAyBX,EAAUU,EAAM,OAAO,CACxD,CACF,CACA,OAAO,UAAO,SAA0BE,EAAmB,CACzD,OAAO,IAAKA,GAAqBZ,GAAaa,EAAkBC,GAAW,EAAE,EAAMD,EAAkBhB,GAA4B,EAAE,EAAMgB,EAAkBd,GAA2B,EAAE,CAAC,CAC3L,EACA,OAAO,WAA0BgB,GAAa,CAC5C,KAAM,OACN,KAAMf,EACN,KAAM,EACR,CAAC,CACH,CACA,OAAOA,CACT,GAAG,EAuSH,IAAIgB,IAA6B,IAAM,CACrC,MAAMA,CAAa,CACjB,OAAO,UAAO,SAA8BC,EAAmB,CAC7D,OAAO,IAAKA,GAAqBD,EACnC,EACA,OAAO,UAAyBE,GAAiB,CAC/C,KAAMF,CACR,CAAC,EACD,OAAO,UAAyBG,GAAiB,CAAC,CAAC,CACrD,CACA,OAAOH,CACT,GAAG,ECx7EH,IAAMI,GAAsB,UAE5B,SAASC,GAAkBC,EAAY,CACrC,OAAOA,IAAeC,EACxB,CAKA,IAAIC,IAAiC,IAAM,CACzC,MAAMA,CAAiB,CACrB,OAAO,WACPC,EAAmB,CACjB,MAAOD,EACP,WAAY,OACZ,QAAS,IAAyF,IAAIE,GAAwBC,EAAOC,CAAQ,EAAG,MAAM,CACxJ,CAAC,CACH,CACA,OAAOJ,CACT,GAAG,EACGE,GAAN,KAA8B,CAC5B,SACA,OACA,OAAS,IAAM,CAAC,EAAG,CAAC,EACpB,YAAYG,EAAUC,EAAQ,CAC5B,KAAK,SAAWD,EAChB,KAAK,OAASC,CAChB,CACA,UAAUC,EAAQ,CACZ,MAAM,QAAQA,CAAM,EACtB,KAAK,OAAS,IAAMA,EAEpB,KAAK,OAASA,CAElB,CACA,mBAAoB,CAClB,MAAO,CAAC,KAAK,OAAO,QAAS,KAAK,OAAO,OAAO,CAClD,CACA,iBAAiBC,EAAUC,EAAS,CAClC,KAAK,OAAO,SAASC,EAAAC,EAAA,GAChBF,GADgB,CAEnB,KAAMD,EAAS,CAAC,EAChB,IAAKA,EAAS,CAAC,CACjB,EAAC,CACH,CACA,eAAeI,EAAQH,EAAS,CAC9B,IAAMI,EAAaC,GAAuB,KAAK,SAAUF,CAAM,EAC3DC,IACF,KAAK,gBAAgBA,EAAYJ,CAAO,EACxCI,EAAW,MAAM,EAErB,CACA,4BAA4BE,EAAmB,CAC7C,GAAI,CACF,KAAK,OAAO,QAAQ,kBAAoBA,CAC1C,MAAQ,CACN,QAAQ,KAAKC,EAAoB,KAAM,EAAsY,CAAC,CAChb,CACF,CACA,gBAAgBC,EAAIR,EAAS,CAC3B,IAAMS,EAAOD,EAAG,sBAAsB,EAChCE,EAAOD,EAAK,KAAO,KAAK,OAAO,YAC/BE,EAAMF,EAAK,IAAM,KAAK,OAAO,YAC7BX,EAAS,KAAK,OAAO,EAC3B,KAAK,OAAO,SAASG,EAAAC,EAAA,GAChBF,GADgB,CAEnB,KAAMU,EAAOZ,EAAO,CAAC,EACrB,IAAKa,EAAMb,EAAO,CAAC,CACrB,EAAC,CACH,CACF,EACA,SAASO,GAAuBT,EAAUO,EAAQ,CAChD,IAAMS,EAAiBhB,EAAS,eAAeO,CAAM,GAAKP,EAAS,kBAAkBO,CAAM,EAAE,CAAC,EAC9F,GAAIS,EACF,OAAOA,EAET,GAAI,OAAOhB,EAAS,kBAAqB,YAAcA,EAAS,MAAQ,OAAOA,EAAS,KAAK,cAAiB,WAAY,CACxH,IAAMiB,EAAajB,EAAS,iBAAiBA,EAAS,KAAM,WAAW,YAAY,EAC/EkB,EAAcD,EAAW,YAC7B,KAAOC,GAAa,CAClB,IAAMC,EAAaD,EAAY,WAC/B,GAAIC,EAAY,CACd,IAAMC,EAASD,EAAW,eAAeZ,CAAM,GAAKY,EAAW,cAAc,UAAUZ,CAAM,IAAI,EACjG,GAAIa,EACF,OAAOA,CAEX,CACAF,EAAcD,EAAW,SAAS,CACpC,CACF,CACA,OAAO,IACT","names":["joinWithSlash","start","end","stripTrailingSlash","url","pathEndIdx","normalizeQueryParams","params","LocationStrategy","relativePosition","__ngFactoryType__","ɵɵdefineInjectable","inject","PathLocationStrategy","APP_BASE_HREF","InjectionToken","_platformLocation","href","DOCUMENT","fn","internal","includeHash","pathname","hash","state","title","queryParams","externalUrl","ɵɵinject","PlatformLocation","Location","Subject","locationStrategy","baseHref","_stripOrigin","stripTrailingSlash","_stripIndexHtml","ev","includeHash","path","query","normalizeQueryParams","url","_stripBasePath","state","relativePosition","fn","v","fnIndex","onNext","onThrow","onReturn","joinWithSlash","__ngFactoryType__","ɵɵinject","LocationStrategy","ɵɵdefineInjectable","createLocation","basePath","strippedUrl","pathname","HashLocationStrategy","LocationStrategy","_platformLocation","_baseHref","fn","includeHash","path","internal","url","joinWithSlash","state","title","queryParams","normalizeQueryParams","relativePosition","__ngFactoryType__","ɵɵinject","PlatformLocation","APP_BASE_HREF","ɵɵdefineInjectable","FormStyle","TranslationWidth","FormatWidth","NumberSymbol","getLocaleId","locale","findLocaleData","LocaleDataIndex","getLocaleDayPeriods","formStyle","width","data","amPmData","amPm","getLastDefinedValue","getLocaleDayNames","daysData","days","getLocaleMonthNames","monthsData","months","getLocaleEraNames","erasData","getLocaleDateFormat","locale","width","data","findLocaleData","getLastDefinedValue","LocaleDataIndex","getLocaleTimeFormat","getLocaleDateTimeFormat","dateTimeFormatData","getLocaleNumberSymbol","symbol","res","NumberSymbol","checkFullData","data","LocaleDataIndex","RuntimeError","getLocaleExtraDayPeriodRules","locale","findLocaleData","rule","extractTime","getLocaleExtraDayPeriods","formStyle","width","dayPeriodsData","dayPeriods","getLastDefinedValue","getLastDefinedValue","data","index","i","RuntimeError","extractTime","time","h","m","ISO8601_DATE_REGEX","NAMED_FORMATS","DATE_FORMATS_SPLIT","formatDate","value","format","locale","timezone","date","toDate","getNamedFormat","parts","match","part","dateTimezoneOffset","timezoneToOffset","convertTimezoneToLocal","text","dateFormatter","getDateFormatter","createDate","year","month","date","newDate","getNamedFormat","locale","format","localeId","getLocaleId","NAMED_FORMATS","formatValue","getLocaleDateFormat","FormatWidth","getLocaleTimeFormat","shortTime","shortDate","formatDateTime","getLocaleDateTimeFormat","mediumTime","mediumDate","longTime","longDate","fullTime","fullDate","str","opt_values","match","key","padNumber","num","digits","minusSign","trim","negWrap","neg","strNum","formatFractionalSeconds","milliseconds","dateGetter","name","size","offset","part","getDatePart","localeMinus","getLocaleNumberSymbol","NumberSymbol","RuntimeError","dateStrGetter","width","form","FormStyle","extended","getDateTranslation","getLocaleMonthNames","getLocaleDayNames","currentHours","currentMinutes","rules","getLocaleExtraDayPeriodRules","dayPeriods","getLocaleExtraDayPeriods","index","rule","from","to","afterFrom","beforeTo","getLocaleDayPeriods","getLocaleEraNames","unexpected","timeZoneGetter","zone","hours","JANUARY","THURSDAY","getFirstThursdayOfYear","firstDayOfYear","getThursdayThisIsoWeek","datetime","currentDay","deltaToThursday","weekGetter","monthBased","result","nbDaysBefore1stDayOfMonth","today","thisThurs","firstThurs","diff","weekNumberingYearGetter","weekNumberingYear","DATE_FORMATS","getDateFormatter","formatter","TranslationWidth","timezoneToOffset","timezone","fallback","requestedTimezoneOffset","addDateMinutes","minutes","convertTimezoneToLocal","reverse","dateTimezoneOffset","timezoneOffset","toDate","value","isDate","y","m","d","val","parsedNb","ISO8601_DATE_REGEX","isoStringToDate","tzHour","tzMin","dateSetter","timeSetter","h","s","ms","WS_REGEXP","EMPTY_ARRAY","NgClass","_ngEl","_renderer","value","klass","rawClass","nextEnabled","state","stateEntry","enabled","__ngFactoryType__","ɵɵdirectiveInject","ElementRef","Renderer2","ɵɵdefineDirective","NgForOfContext","$implicit","ngForOf","index","count","NgForOf","fn","_viewContainer","_template","_differs","value","changes","viewContainer","item","adjustedPreviousIndex","currentIndex","view","applyViewChange","i","ilen","context","record","viewRef","dir","ctx","__ngFactoryType__","ɵɵdirectiveInject","ViewContainerRef","TemplateRef","IterableDiffers","ɵɵdefineDirective","NgIf","NgIfContext","_viewContainer","templateRef","condition","assertTemplate","dir","ctx","__ngFactoryType__","ɵɵdirectiveInject","ViewContainerRef","TemplateRef","ɵɵdefineDirective","property","RuntimeError","invalidPipeArgumentError","type","value","RuntimeError","SubscribableStrategy","async","updateLatestValue","onError","untracked","subscription","PromiseStrategy","v","e","_promiseStrategy","_subscribableStrategy","AsyncPipe","inject","INTERNAL_APPLICATION_ERROR_HANDLER","ref","obj","value","isPromise","isSubscribable","invalidPipeArgumentError","__ngFactoryType__","ɵɵdirectiveInject","ChangeDetectorRef","ɵɵdefinePipe","DEFAULT_DATE_FORMAT","DATE_PIPE_DEFAULT_TIMEZONE","InjectionToken","DATE_PIPE_DEFAULT_OPTIONS","DatePipe","locale","defaultTimezone","defaultOptions","value","format","timezone","_format","_timezone","formatDate","error","invalidPipeArgumentError","__ngFactoryType__","ɵɵdirectiveInject","LOCALE_ID","ɵɵdefinePipe","CommonModule","__ngFactoryType__","ɵɵdefineNgModule","ɵɵdefineInjector","PLATFORM_BROWSER_ID","isPlatformBrowser","platformId","PLATFORM_BROWSER_ID","ViewportScroller","ɵɵdefineInjectable","BrowserViewportScroller","inject","DOCUMENT","document","window","offset","position","options","__spreadProps","__spreadValues","target","elSelected","findAnchorFromDocument","scrollRestoration","formatRuntimeError","el","rect","left","top","documentResult","treeWalker","currentNode","shadowRoot","result"],"x_google_ignoreList":[0,1,2]} \ No newline at end of file diff --git a/frontend/dist-instrumented/chunk-FYGTVJAL.js b/frontend/dist-instrumented/chunk-FYGTVJAL.js new file mode 100644 index 00000000..06a9397a --- /dev/null +++ b/frontend/dist-instrumented/chunk-FYGTVJAL.js @@ -0,0 +1,3 @@ +function cov_57vuh9v2e(){var path="/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-FYGTVJAL.js";var hash="91da26e96d75f74b3ad382a97bfa7f5ebb0453f0";var global=new Function("return this")();var gcv="__coverage__";var coverageData={path:"/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-FYGTVJAL.js",statementMap:{"0":{start:{line:1,column:1031},end:{line:1,column:1077}},"1":{start:{line:1,column:1057},end:{line:1,column:1068}},"2":{start:{line:1,column:1081},end:{line:1,column:1429}},"3":{start:{line:1,column:1121},end:{line:1,column:1129}},"4":{start:{line:1,column:1142},end:{line:1,column:1150}},"5":{start:{line:1,column:1177},end:{line:1,column:1247}},"6":{start:{line:1,column:1214},end:{line:1,column:1247}},"7":{start:{line:1,column:1277},end:{line:1,column:1312}},"8":{start:{line:1,column:1330},end:{line:1,column:1365}},"9":{start:{line:1,column:1342},end:{line:1,column:1364}},"10":{start:{line:1,column:1384},end:{line:1,column:1416}},"11":{start:{line:1,column:1417},end:{line:1,column:1425}},"12":{start:{line:1,column:1433},end:{line:1,column:1442}},"13":{start:{line:1,column:1446},end:{line:1,column:2103}},"14":{start:{line:1,column:1494},end:{line:1,column:1501}},"15":{start:{line:1,column:1519},end:{line:1,column:1563}},"16":{start:{line:1,column:1546},end:{line:1,column:1560}},"17":{start:{line:1,column:1569},end:{line:1,column:1600}},"18":{start:{line:1,column:1581},end:{line:1,column:1599}},"19":{start:{line:1,column:1601},end:{line:1,column:1635}},"20":{start:{line:1,column:1641},end:{line:1,column:1667}},"21":{start:{line:1,column:1651},end:{line:1,column:1666}},"22":{start:{line:1,column:1668},end:{line:1,column:1692}},"23":{start:{line:1,column:1719},end:{line:1,column:1774}},"24":{start:{line:1,column:1785},end:{line:1,column:1802}},"25":{start:{line:1,column:1827},end:{line:1,column:1857}},"26":{start:{line:1,column:1858},end:{line:1,column:1872}},"27":{start:{line:1,column:1863},end:{line:1,column:1872}},"28":{start:{line:1,column:1872},end:{line:1,column:1938}},"29":{start:{line:1,column:1899},end:{line:1,column:1912}},"30":{start:{line:1,column:1917},end:{line:1,column:1938}},"31":{start:{line:1,column:1938},end:{line:1,column:1979}},"32":{start:{line:1,column:1997},end:{line:1,column:2039}},"33":{start:{line:1,column:2009},end:{line:1,column:2038}},"34":{start:{line:1,column:2058},end:{line:1,column:2090}},"35":{start:{line:1,column:2091},end:{line:1,column:2099}},"36":{start:{line:1,column:2107},end:{line:1,column:2118}},"37":{start:{line:1,column:2134},end:{line:1,column:2159}},"38":{start:{line:1,column:2149},end:{line:1,column:2159}},"39":{start:{line:1,column:2183},end:{line:1,column:2207}},"40":{start:{line:1,column:2208},end:{line:1,column:2232}},"41":{start:{line:1,column:2260},end:{line:1,column:2326}},"42":{start:{line:1,column:2327},end:{line:1,column:2526}},"43":{start:{line:1,column:2332},end:{line:1,column:2526}},"44":{start:{line:1,column:2347},end:{line:1,column:2526}},"45":{start:{line:1,column:2550},end:{line:1,column:2573}},"46":{start:{line:1,column:2574},end:{line:1,column:2642}},"47":{start:{line:1,column:2650},end:{line:1,column:3831}},"48":{start:{line:1,column:2687},end:{line:1,column:2694}},"49":{start:{line:1,column:2704},end:{line:1,column:2711}},"50":{start:{line:1,column:2718},end:{line:1,column:2725}},"51":{start:{line:1,column:2750},end:{line:1,column:2843}},"52":{start:{line:1,column:2859},end:{line:1,column:2906}},"53":{start:{line:1,column:2874},end:{line:1,column:2906}},"54":{start:{line:1,column:2906},end:{line:1,column:2954}},"55":{start:{line:1,column:2920},end:{line:1,column:2953}},"56":{start:{line:1,column:2973},end:{line:1,column:3020}},"57":{start:{line:1,column:2988},end:{line:1,column:3020}},"58":{start:{line:1,column:3020},end:{line:1,column:3068}},"59":{start:{line:1,column:3034},end:{line:1,column:3067}},"60":{start:{line:1,column:3091},end:{line:1,column:3099}},"61":{start:{line:1,column:3100},end:{line:1,column:3196}},"62":{start:{line:1,column:3161},end:{line:1,column:3193}},"63":{start:{line:1,column:3220},end:{line:1,column:3228}},"64":{start:{line:1,column:3229},end:{line:1,column:3284}},"65":{start:{line:1,column:3299},end:{line:1,column:3363}},"66":{start:{line:1,column:3357},end:{line:1,column:3363}},"67":{start:{line:1,column:3363},end:{line:1,column:3381}},"68":{start:{line:1,column:3393},end:{line:1,column:3411}},"69":{start:{line:1,column:3411},end:{line:1,column:3491}},"70":{start:{line:1,column:3449},end:{line:1,column:3491}},"71":{start:{line:1,column:3491},end:{line:1,column:3572}},"72":{start:{line:1,column:3531},end:{line:1,column:3572}},"73":{start:{line:1,column:3587},end:{line:1,column:3607}},"74":{start:{line:1,column:3624},end:{line:1,column:3694}},"75":{start:{line:1,column:3712},end:{line:1,column:3767}},"76":{start:{line:1,column:3724},end:{line:1,column:3766}},"77":{start:{line:1,column:3786},end:{line:1,column:3818}},"78":{start:{line:1,column:3819},end:{line:1,column:3827}},"79":{start:{line:1,column:3835},end:{line:1,column:4066}},"80":{start:{line:1,column:4070},end:{line:1,column:4079}},"81":{start:{line:1,column:4087},end:{line:1,column:4095}},"82":{start:{line:1,column:4099},end:{line:1,column:4114}},"83":{start:{line:1,column:4118},end:{line:1,column:4136}},"84":{start:{line:1,column:4140},end:{line:1,column:4142}},"85":{start:{line:1,column:4146},end:{line:1,column:4172}},"86":{start:{line:1,column:4168},end:{line:1,column:4170}},"87":{start:{line:1,column:4188},end:{line:1,column:4211}},"88":{start:{line:1,column:4227},end:{line:1,column:4250}},"89":{start:{line:1,column:4268},end:{line:1,column:4300}},"90":{start:{line:1,column:4284},end:{line:1,column:4299}},"91":{start:{line:1,column:4308},end:{line:1,column:5606}},"92":{start:{line:1,column:4433},end:{line:1,column:4440}},"93":{start:{line:1,column:4496},end:{line:1,column:4700}},"94":{start:{line:1,column:4721},end:{line:1,column:4759}},"95":{start:{line:1,column:4731},end:{line:1,column:4759}},"96":{start:{line:1,column:4765},end:{line:1,column:4794}},"97":{start:{line:1,column:4795},end:{line:1,column:4869}},"98":{start:{line:1,column:4901},end:{line:1,column:4922}},"99":{start:{line:1,column:4925},end:{line:1,column:4936}},"100":{start:{line:1,column:4937},end:{line:1,column:5340}},"101":{start:{line:1,column:4950},end:{line:1,column:4958}},"102":{start:{line:1,column:4961},end:{line:1,column:4972}},"103":{start:{line:1,column:4975},end:{line:1,column:4992}},"104":{start:{line:1,column:4995},end:{line:1,column:5016}},"105":{start:{line:1,column:5019},end:{line:1,column:5049}},"106":{start:{line:1,column:5052},end:{line:1,column:5071}},"107":{start:{line:1,column:5072},end:{line:1,column:5326}},"108":{start:{line:1,column:5113},end:{line:1,column:5148}},"109":{start:{line:1,column:5148},end:{line:1,column:5154}},"110":{start:{line:1,column:5172},end:{line:1,column:5212}},"111":{start:{line:1,column:5250},end:{line:1,column:5288}},"112":{start:{line:1,column:5296},end:{line:1,column:5320}},"113":{start:{line:1,column:5320},end:{line:1,column:5325}},"114":{start:{line:1,column:5326},end:{line:1,column:5339}},"115":{start:{line:1,column:5340},end:{line:1,column:5348}},"116":{start:{line:1,column:5363},end:{line:1,column:5392}},"117":{start:{line:1,column:5414},end:{line:1,column:5445}},"118":{start:{line:1,column:5463},end:{line:1,column:5542}},"119":{start:{line:1,column:5475},end:{line:1,column:5541}},"120":{start:{line:1,column:5561},end:{line:1,column:5593}},"121":{start:{line:1,column:5594},end:{line:1,column:5602}},"122":{start:{line:1,column:5610},end:{line:1,column:7309}},"123":{start:{line:1,column:5660},end:{line:1,column:5679}},"124":{start:{line:1,column:5702},end:{line:1,column:5704}},"125":{start:{line:1,column:5726},end:{line:1,column:5792}},"126":{start:{line:1,column:5816},end:{line:1,column:5820}},"127":{start:{line:1,column:5840},end:{line:1,column:5911}},"128":{start:{line:1,column:5929},end:{line:1,column:5961}},"129":{start:{line:1,column:5976},end:{line:1,column:6009}},"130":{start:{line:1,column:6027},end:{line:1,column:6061}},"131":{start:{line:1,column:6082},end:{line:1,column:6122}},"132":{start:{line:1,column:6140},end:{line:1,column:6150}},"133":{start:{line:1,column:6180},end:{line:1,column:6226}},"134":{start:{line:1,column:6227},end:{line:1,column:6255}},"135":{start:{line:1,column:6233},end:{line:1,column:6255}},"136":{start:{line:1,column:6255},end:{line:1,column:6285}},"137":{start:{line:1,column:6300},end:{line:1,column:6319}},"138":{start:{line:1,column:6335},end:{line:1,column:6355}},"139":{start:{line:1,column:6378},end:{line:1,column:6476}},"140":{start:{line:1,column:6384},end:{line:1,column:6394}},"141":{start:{line:1,column:6400},end:{line:1,column:6405}},"142":{start:{line:1,column:6406},end:{line:1,column:6451}},"143":{start:{line:1,column:6457},end:{line:1,column:6476}},"144":{start:{line:1,column:6500},end:{line:1,column:6601}},"145":{start:{line:1,column:6512},end:{line:1,column:6517}},"146":{start:{line:1,column:6518},end:{line:1,column:6575}},"147":{start:{line:1,column:6581},end:{line:1,column:6601}},"148":{start:{line:1,column:6616},end:{line:1,column:6634}},"149":{start:{line:1,column:6652},end:{line:1,column:6673}},"150":{start:{line:1,column:6692},end:{line:1,column:6788}},"151":{start:{line:1,column:6808},end:{line:1,column:6861}},"152":{start:{line:1,column:6881},end:{line:1,column:6898}},"153":{start:{line:1,column:6913},end:{line:1,column:6926}},"154":{start:{line:1,column:6943},end:{line:1,column:7032}},"155":{start:{line:1,column:7011},end:{line:1,column:7032}},"156":{start:{line:1,column:7038},end:{line:1,column:7068}},"157":{start:{line:1,column:7069},end:{line:1,column:7208}},"158":{start:{line:1,column:7235},end:{line:1,column:7307}},"159":{start:{line:1,column:7246},end:{line:1,column:7277}},"160":{start:{line:1,column:7268},end:{line:1,column:7277}},"161":{start:{line:1,column:7277},end:{line:1,column:7306}},"162":{start:{line:1,column:7325},end:{line:1,column:7374}},"163":{start:{line:1,column:7382},end:{line:1,column:8344}},"164":{start:{line:1,column:7463},end:{line:1,column:7632}},"165":{start:{line:1,column:7638},end:{line:1,column:7646}},"166":{start:{line:1,column:7647},end:{line:1,column:7660}},"167":{start:{line:1,column:7660},end:{line:1,column:7790}},"168":{start:{line:1,column:7682},end:{line:1,column:7713}},"169":{start:{line:1,column:7714},end:{line:1,column:7789}},"170":{start:{line:1,column:7796},end:{line:1,column:7819}},"171":{start:{line:1,column:7820},end:{line:1,column:7915}},"172":{start:{line:1,column:7825},end:{line:1,column:7915}},"173":{start:{line:1,column:7847},end:{line:1,column:7854}},"174":{start:{line:1,column:7855},end:{line:1,column:7914}},"175":{start:{line:1,column:7936},end:{line:1,column:7976}},"176":{start:{line:1,column:7994},end:{line:1,column:8046}},"177":{start:{line:1,column:8067},end:{line:1,column:8122}},"178":{start:{line:1,column:8140},end:{line:1,column:8172}},"179":{start:{line:1,column:8187},end:{line:1,column:8259}},"180":{start:{line:1,column:8270},end:{line:1,column:8342}},"181":{start:{line:1,column:8348},end:{line:1,column:8798}},"182":{start:{line:1,column:8454},end:{line:1,column:8526}},"183":{start:{line:1,column:8532},end:{line:1,column:8540}},"184":{start:{line:1,column:8541},end:{line:1,column:8604}},"185":{start:{line:1,column:8619},end:{line:1,column:8678}},"186":{start:{line:1,column:8689},end:{line:1,column:8796}},"187":{start:{line:1,column:8802},end:{line:1,column:9126}},"188":{start:{line:1,column:8875},end:{line:1,column:8885}},"189":{start:{line:1,column:8886},end:{line:1,column:8951}},"190":{start:{line:1,column:8967},end:{line:1,column:9023}},"191":{start:{line:1,column:9049},end:{line:1,column:9073}},"192":{start:{line:1,column:9074},end:{line:1,column:9124}},"193":{start:{line:1,column:9134},end:{line:1,column:9922}},"194":{start:{line:1,column:9171},end:{line:1,column:9173}},"195":{start:{line:1,column:9195},end:{line:1,column:9204}},"196":{start:{line:1,column:9226},end:{line:1,column:9293}},"197":{start:{line:1,column:9264},end:{line:1,column:9292}},"198":{start:{line:1,column:9313},end:{line:1,column:9331}},"199":{start:{line:1,column:9342},end:{line:1,column:9352}},"200":{start:{line:1,column:9372},end:{line:1,column:9428}},"201":{start:{line:1,column:9450},end:{line:1,column:9512}},"202":{start:{line:1,column:9534},end:{line:1,column:9549}},"203":{start:{line:1,column:9567},end:{line:1,column:9604}},"204":{start:{line:1,column:9621},end:{line:1,column:9657}},"205":{start:{line:1,column:9684},end:{line:1,column:9750}},"206":{start:{line:1,column:9772},end:{line:1,column:9776}},"207":{start:{line:1,column:9777},end:{line:1,column:9802}},"208":{start:{line:1,column:9822},end:{line:1,column:9829}},"209":{start:{line:1,column:9845},end:{line:1,column:9878}},"210":{start:{line:1,column:9892},end:{line:1,column:9920}},"211":{start:{line:1,column:9926},end:{line:1,column:9930}},"212":{start:{line:1,column:9945},end:{line:1,column:10026}},"213":{start:{line:1,column:10042},end:{line:1,column:10085}},"214":{start:{line:1,column:10093},end:{line:1,column:10251}},"215":{start:{line:1,column:10115},end:{line:1,column:10140}},"216":{start:{line:1,column:10158},end:{line:1,column:10187}},"217":{start:{line:1,column:10170},end:{line:1,column:10186}},"218":{start:{line:1,column:10206},end:{line:1,column:10238}},"219":{start:{line:1,column:10239},end:{line:1,column:10247}},"220":{start:{line:1,column:10255},end:{line:1,column:10287}},"221":{start:{line:1,column:10291},end:{line:1,column:10491}},"222":{start:{line:1,column:10495},end:{line:1,column:10571}},"223":{start:{line:1,column:10503},end:{line:1,column:10511}},"224":{start:{line:1,column:10523},end:{line:1,column:10532}},"225":{start:{line:1,column:10541},end:{line:1,column:10550}},"226":{start:{line:1,column:10560},end:{line:1,column:10570}},"227":{start:{line:1,column:10575},end:{line:1,column:11758}},"228":{start:{line:1,column:10615},end:{line:1,column:10623}},"229":{start:{line:1,column:10636},end:{line:1,column:10668}},"230":{start:{line:1,column:10701},end:{line:1,column:10720}},"231":{start:{line:1,column:10723},end:{line:1,column:10774}},"232":{start:{line:1,column:10775},end:{line:1,column:10866}},"233":{start:{line:1,column:10827},end:{line:1,column:10865}},"234":{start:{line:1,column:10898},end:{line:1,column:10924}},"235":{start:{line:1,column:10927},end:{line:1,column:10936}},"236":{start:{line:1,column:10937},end:{line:1,column:10996}},"237":{start:{line:1,column:10984},end:{line:1,column:10996}},"238":{start:{line:1,column:11002},end:{line:1,column:11026}},"239":{start:{line:1,column:11029},end:{line:1,column:11031}},"240":{start:{line:1,column:11034},end:{line:1,column:11051}},"241":{start:{line:1,column:11052},end:{line:1,column:11197}},"242":{start:{line:1,column:11108},end:{line:1,column:11120}},"243":{start:{line:1,column:11121},end:{line:1,column:11151}},"244":{start:{line:1,column:11185},end:{line:1,column:11197}},"245":{start:{line:1,column:11203},end:{line:1,column:11205}},"246":{start:{line:1,column:11206},end:{line:1,column:11243}},"247":{start:{line:1,column:11284},end:{line:1,column:11300}},"248":{start:{line:1,column:11303},end:{line:1,column:11305}},"249":{start:{line:1,column:11306},end:{line:1,column:11496}},"250":{start:{line:1,column:11443},end:{line:1,column:11482}},"251":{start:{line:1,column:11459},end:{line:1,column:11464}},"252":{start:{line:1,column:11465},end:{line:1,column:11481}},"253":{start:{line:1,column:11525},end:{line:1,column:11589}},"254":{start:{line:1,column:11536},end:{line:1,column:11588}},"255":{start:{line:1,column:11583},end:{line:1,column:11587}},"256":{start:{line:1,column:11614},end:{line:1,column:11641}},"257":{start:{line:1,column:11659},end:{line:1,column:11694}},"258":{start:{line:1,column:11671},end:{line:1,column:11693}},"259":{start:{line:1,column:11713},end:{line:1,column:11745}},"260":{start:{line:1,column:11746},end:{line:1,column:11754}},"261":{start:{line:1,column:11790},end:{line:1,column:11818}},"262":{start:{line:1,column:11819},end:{line:1,column:11831}},"263":{start:{line:1,column:11849},end:{line:1,column:11945}},"264":{start:{line:1,column:11960},end:{line:1,column:11976}},"265":{start:{line:1,column:11991},end:{line:1,column:12004}},"266":{start:{line:1,column:12019},end:{line:1,column:12047}},"267":{start:{line:1,column:12055},end:{line:1,column:12141}},"268":{start:{line:1,column:12149},end:{line:1,column:12339}},"269":{start:{line:1,column:12347},end:{line:1,column:12595}},"270":{start:{line:1,column:12381},end:{line:1,column:12392}},"271":{start:{line:1,column:12404},end:{line:1,column:12426}},"272":{start:{line:1,column:12439},end:{line:1,column:12460}},"273":{start:{line:1,column:12478},end:{line:1,column:12513}},"274":{start:{line:1,column:12490},end:{line:1,column:12512}},"275":{start:{line:1,column:12532},end:{line:1,column:12582}},"276":{start:{line:1,column:12583},end:{line:1,column:12591}},"277":{start:{line:1,column:12602},end:{line:1,column:12611}},"278":{start:{line:1,column:12615},end:{line:1,column:12635}},"279":{start:{line:1,column:12639},end:{line:1,column:12968}},"280":{start:{line:1,column:12667},end:{line:1,column:12684}},"281":{start:{line:1,column:12692},end:{line:1,column:12750}},"282":{start:{line:1,column:12758},end:{line:1,column:12826}},"283":{start:{line:1,column:12780},end:{line:1,column:12794}},"284":{start:{line:1,column:12795},end:{line:1,column:12825}},"285":{start:{line:1,column:12826},end:{line:1,column:12837}},"286":{start:{line:1,column:12848},end:{line:1,column:12915}},"287":{start:{line:1,column:12870},end:{line:1,column:12884}},"288":{start:{line:1,column:12885},end:{line:1,column:12914}},"289":{start:{line:1,column:12915},end:{line:1,column:12923}},"290":{start:{line:1,column:12935},end:{line:1,column:12966}},"291":{start:{line:1,column:12984},end:{line:1,column:13000}},"292":{start:{line:1,column:13020},end:{line:1,column:13128}},"293":{start:{line:1,column:13030},end:{line:1,column:13031}},"294":{start:{line:1,column:13054},end:{line:1,column:13058}},"295":{start:{line:1,column:13061},end:{line:1,column:13065}},"296":{start:{line:1,column:13066},end:{line:1,column:13127}},"297":{start:{line:1,column:13080},end:{line:1,column:13100}},"298":{start:{line:1,column:13105},end:{line:1,column:13127}},"299":{start:{line:1,column:13119},end:{line:1,column:13127}},"300":{start:{line:1,column:13128},end:{line:1,column:13136}},"301":{start:{line:1,column:13162},end:{line:1,column:13179}},"302":{start:{line:1,column:13182},end:{line:1,column:13197}},"303":{start:{line:1,column:13198},end:{line:1,column:13380}},"304":{start:{line:1,column:13209},end:{line:1,column:13302}},"305":{start:{line:1,column:13290},end:{line:1,column:13302}},"306":{start:{line:1,column:13308},end:{line:1,column:13310}},"307":{start:{line:1,column:13313},end:{line:1,column:13332}},"308":{start:{line:1,column:13333},end:{line:1,column:13379}},"309":{start:{line:1,column:13380},end:{line:1,column:13419}},"310":{start:{line:1,column:13407},end:{line:1,column:13419}},"311":{start:{line:1,column:13425},end:{line:1,column:13437}},"312":{start:{line:1,column:13440},end:{line:1,column:13452}},"313":{start:{line:1,column:13453},end:{line:1,column:13549}},"314":{start:{line:1,column:13537},end:{line:1,column:13549}},"315":{start:{line:1,column:13555},end:{line:1,column:13557}},"316":{start:{line:1,column:13558},end:{line:1,column:13659}},"317":{start:{line:1,column:13675},end:{line:1,column:13755}},"318":{start:{line:1,column:13702},end:{line:1,column:13753}},"319":{start:{line:1,column:13733},end:{line:1,column:13737}},"320":{start:{line:1,column:13747},end:{line:1,column:13751}},"321":{start:{line:1,column:13773},end:{line:1,column:13805}},"322":{start:{line:1,column:13796},end:{line:1,column:13805}},"323":{start:{line:1,column:13805},end:{line:1,column:13858}},"324":{start:{line:1,column:13815},end:{line:1,column:13816}},"325":{start:{line:1,column:13832},end:{line:1,column:13858}},"326":{start:{line:1,column:13849},end:{line:1,column:13858}},"327":{start:{line:1,column:13858},end:{line:1,column:13866}},"328":{start:{line:1,column:13889},end:{line:1,column:13903}},"329":{start:{line:1,column:13906},end:{line:1,column:13920}},"330":{start:{line:1,column:13921},end:{line:1,column:13960}},"331":{start:{line:1,column:13951},end:{line:1,column:13960}},"332":{start:{line:1,column:13966},end:{line:1,column:14027}},"333":{start:{line:1,column:13976},end:{line:1,column:13977}},"334":{start:{line:1,column:13993},end:{line:1,column:14027}},"335":{start:{line:1,column:14018},end:{line:1,column:14027}},"336":{start:{line:1,column:14027},end:{line:1,column:14035}},"337":{start:{line:1,column:14051},end:{line:1,column:14111}},"338":{start:{line:1,column:14129},end:{line:1,column:14285}},"339":{start:{line:1,column:14168},end:{line:1,column:14200}},"340":{start:{line:1,column:14191},end:{line:1,column:14200}},"341":{start:{line:1,column:14206},end:{line:1,column:14219}},"342":{start:{line:1,column:14222},end:{line:1,column:14235}},"343":{start:{line:1,column:14236},end:{line:1,column:14267}},"344":{start:{line:1,column:14258},end:{line:1,column:14266}},"345":{start:{line:1,column:14273},end:{line:1,column:14285}},"346":{start:{line:1,column:14301},end:{line:1,column:14337}},"347":{start:{line:1,column:14353},end:{line:1,column:14400}},"348":{start:{line:1,column:14416},end:{line:1,column:14453}},"349":{start:{line:1,column:14461},end:{line:1,column:14481}},"350":{start:{line:1,column:14485},end:{line:1,column:14520}},"351":{start:{line:1,column:14517},end:{line:1,column:14519}},"352":{start:{line:1,column:14524},end:{line:1,column:14601}},"353":{start:{line:1,column:14605},end:{line:1,column:14684}},"354":{start:{line:1,column:14710},end:{line:1,column:14740}},"355":{start:{line:1,column:14741},end:{line:1,column:14821}},"356":{start:{line:1,column:14755},end:{line:1,column:14820}},"357":{start:{line:1,column:14841},end:{line:1,column:14987}},"358":{start:{line:1,column:15005},end:{line:1,column:15018}},"359":{start:{line:1,column:15038},end:{line:1,column:15148}},"360":{start:{line:1,column:15139},end:{line:1,column:15148}},"361":{start:{line:1,column:15148},end:{line:1,column:15235}},"362":{start:{line:1,column:15172},end:{line:1,column:15235}},"363":{start:{line:1,column:15226},end:{line:1,column:15235}},"364":{start:{line:1,column:15235},end:{line:1,column:15243}},"365":{start:{line:1,column:15261},end:{line:1,column:15352}},"366":{start:{line:1,column:15338},end:{line:1,column:15351}},"367":{start:{line:1,column:15372},end:{line:1,column:15399}},"368":{start:{line:1,column:15421},end:{line:1,column:15876}},"369":{start:{line:1,column:15458},end:{line:1,column:15486}},"370":{start:{line:1,column:15487},end:{line:1,column:15533}},"371":{start:{line:1,column:15539},end:{line:1,column:15876}},"372":{start:{line:1,column:15572},end:{line:1,column:15623}},"373":{start:{line:1,column:15614},end:{line:1,column:15623}},"374":{start:{line:1,column:15623},end:{line:1,column:15710}},"375":{start:{line:1,column:15647},end:{line:1,column:15710}},"376":{start:{line:1,column:15701},end:{line:1,column:15710}},"377":{start:{line:1,column:15710},end:{line:1,column:15718}},"378":{start:{line:1,column:15730},end:{line:1,column:15758}},"379":{start:{line:1,column:15761},end:{line:1,column:15787}},"380":{start:{line:1,column:15788},end:{line:1,column:15875}},"381":{start:{line:1,column:15896},end:{line:1,column:15954}},"382":{start:{line:1,column:15918},end:{line:1,column:15953}},"383":{start:{line:1,column:15961},end:{line:1,column:16223}},"384":{start:{line:1,column:16048},end:{line:1,column:16094}},"385":{start:{line:1,column:16115},end:{line:1,column:16184}},"386":{start:{line:1,column:16196},end:{line:1,column:16221}},"387":{start:{line:1,column:16226},end:{line:1,column:16491}},"388":{start:{line:1,column:16257},end:{line:1,column:16261}},"389":{start:{line:1,column:16279},end:{line:1,column:16353}},"390":{start:{line:1,column:16339},end:{line:1,column:16352}},"391":{start:{line:1,column:16368},end:{line:1,column:16398}},"392":{start:{line:1,column:16422},end:{line:1,column:16462}},"393":{start:{line:1,column:16474},end:{line:1,column:16489}},"394":{start:{line:1,column:16494},end:{line:1,column:16691}},"395":{start:{line:1,column:16547},end:{line:1,column:16576}},"396":{start:{line:1,column:16596},end:{line:1,column:16662}},"397":{start:{line:1,column:16674},end:{line:1,column:16689}},"398":{start:{line:1,column:16709},end:{line:1,column:16772}},"399":{start:{line:1,column:16740},end:{line:1,column:16771}},"400":{start:{line:1,column:16790},end:{line:1,column:16854}},"401":{start:{line:1,column:16835},end:{line:1,column:16853}},"402":{start:{line:1,column:16878},end:{line:1,column:16880}},"403":{start:{line:1,column:16881},end:{line:1,column:17039}},"404":{start:{line:1,column:16933},end:{line:1,column:16960}},"405":{start:{line:1,column:17008},end:{line:1,column:17035}},"406":{start:{line:1,column:17047},end:{line:1,column:17187}},"407":{start:{line:1,column:17078},end:{line:1,column:17107}},"408":{start:{line:1,column:17090},end:{line:1,column:17106}},"409":{start:{line:1,column:17126},end:{line:1,column:17174}},"410":{start:{line:1,column:17149},end:{line:1,column:17154}},"411":{start:{line:1,column:17175},end:{line:1,column:17183}},"412":{start:{line:1,column:17190},end:{line:1,column:17430}},"413":{start:{line:1,column:17211},end:{line:1,column:17220}},"414":{start:{line:1,column:17221},end:{line:1,column:17294}},"415":{start:{line:1,column:17314},end:{line:1,column:17333}},"416":{start:{line:1,column:17336},end:{line:1,column:17353}},"417":{start:{line:1,column:17356},end:{line:1,column:17407}},"418":{start:{line:1,column:17408},end:{line:1,column:17428}},"419":{start:{line:1,column:17434},end:{line:1,column:17439}},"420":{start:{line:1,column:17455},end:{line:1,column:17496}},"421":{start:{line:1,column:17480},end:{line:1,column:17485}},"422":{start:{line:1,column:17514},end:{line:1,column:17547}},"423":{start:{line:1,column:17534},end:{line:1,column:17547}},"424":{start:{line:1,column:17547},end:{line:1,column:17912}},"425":{start:{line:1,column:17559},end:{line:1,column:17596}},"426":{start:{line:1,column:17599},end:{line:1,column:17601}},"427":{start:{line:1,column:17602},end:{line:1,column:17726}},"428":{start:{line:1,column:17654},end:{line:1,column:17687}},"429":{start:{line:1,column:17738},end:{line:1,column:17800}},"430":{start:{line:1,column:17750},end:{line:1,column:17799}},"431":{start:{line:1,column:17801},end:{line:1,column:17911}},"432":{start:{line:1,column:17928},end:{line:1,column:18038}},"433":{start:{line:1,column:18054},end:{line:1,column:18087}},"434":{start:{line:1,column:18103},end:{line:1,column:18122}},"435":{start:{line:1,column:18138},end:{line:1,column:18213}},"436":{start:{line:1,column:18229},end:{line:1,column:18257}},"437":{start:{line:1,column:18273},end:{line:1,column:18306}},"438":{start:{line:1,column:18322},end:{line:1,column:18362}},"439":{start:{line:1,column:18378},end:{line:1,column:18446}},"440":{start:{line:1,column:18416},end:{line:1,column:18436}},"441":{start:{line:1,column:18468},end:{line:1,column:18589}},"442":{start:{line:1,column:18499},end:{line:1,column:18575}},"443":{start:{line:1,column:18525},end:{line:1,column:18544}},"444":{start:{line:1,column:18587},end:{line:1,column:18588}},"445":{start:{line:1,column:18590},end:{line:1,column:18626}},"446":{start:{line:1,column:18634},end:{line:1,column:18648}},"447":{start:{line:1,column:18670},end:{line:1,column:18681}},"448":{start:{line:1,column:18682},end:{line:1,column:18698}},"449":{start:{line:1,column:18706},end:{line:1,column:18721}},"450":{start:{line:1,column:18743},end:{line:1,column:18754}},"451":{start:{line:1,column:18755},end:{line:1,column:18771}},"452":{start:{line:1,column:18779},end:{line:1,column:18790}},"453":{start:{line:1,column:18812},end:{line:1,column:18823}},"454":{start:{line:1,column:18824},end:{line:1,column:18840}},"455":{start:{line:1,column:18848},end:{line:1,column:18857}},"456":{start:{line:1,column:18879},end:{line:1,column:18890}},"457":{start:{line:1,column:18891},end:{line:1,column:18907}},"458":{start:{line:1,column:18915},end:{line:1,column:21208}},"459":{start:{line:1,column:18950},end:{line:1,column:18977}},"460":{start:{line:1,column:18997},end:{line:1,column:19145}},"461":{start:{line:1,column:19171},end:{line:1,column:19173}},"462":{start:{line:1,column:19174},end:{line:1,column:19263}},"463":{start:{line:1,column:19203},end:{line:1,column:19263}},"464":{start:{line:1,column:19206},end:{line:1,column:19230}},"465":{start:{line:1,column:19263},end:{line:1,column:19271}},"466":{start:{line:1,column:19288},end:{line:1,column:19360}},"467":{start:{line:1,column:19380},end:{line:1,column:19409}},"468":{start:{line:1,column:19388},end:{line:1,column:19409}},"469":{start:{line:1,column:19409},end:{line:1,column:19441}},"470":{start:{line:1,column:19432},end:{line:1,column:19441}},"471":{start:{line:1,column:19441},end:{line:1,column:19467}},"472":{start:{line:1,column:19473},end:{line:1,column:19475}},"473":{start:{line:1,column:19476},end:{line:1,column:19662}},"474":{start:{line:1,column:19616},end:{line:1,column:19662}},"475":{start:{line:1,column:19668},end:{line:1,column:19670}},"476":{start:{line:1,column:19671},end:{line:1,column:19743}},"477":{start:{line:1,column:19749},end:{line:1,column:19751}},"478":{start:{line:1,column:19752},end:{line:1,column:19870}},"479":{start:{line:1,column:19892},end:{line:1,column:19910}},"480":{start:{line:1,column:19911},end:{line:1,column:19968}},"481":{start:{line:1,column:19947},end:{line:1,column:19968}},"482":{start:{line:1,column:19968},end:{line:1,column:20028}},"483":{start:{line:1,column:20055},end:{line:1,column:20057}},"484":{start:{line:1,column:20058},end:{line:1,column:20109}},"485":{start:{line:1,column:20090},end:{line:1,column:20109}},"486":{start:{line:1,column:20109},end:{line:1,column:20117}},"487":{start:{line:1,column:20138},end:{line:1,column:20156}},"488":{start:{line:1,column:20157},end:{line:1,column:20170}},"489":{start:{line:1,column:20163},end:{line:1,column:20170}},"490":{start:{line:1,column:20170},end:{line:1,column:20186}},"491":{start:{line:1,column:20192},end:{line:1,column:20194}},"492":{start:{line:1,column:20195},end:{line:1,column:20275}},"493":{start:{line:1,column:20231},end:{line:1,column:20249}},"494":{start:{line:1,column:20250},end:{line:1,column:20274}},"495":{start:{line:1,column:20275},end:{line:1,column:20289}},"496":{start:{line:1,column:20315},end:{line:1,column:20333}},"497":{start:{line:1,column:20334},end:{line:1,column:20347}},"498":{start:{line:1,column:20340},end:{line:1,column:20347}},"499":{start:{line:1,column:20347},end:{line:1,column:20363}},"500":{start:{line:1,column:20369},end:{line:1,column:20371}},"501":{start:{line:1,column:20372},end:{line:1,column:20452}},"502":{start:{line:1,column:20408},end:{line:1,column:20426}},"503":{start:{line:1,column:20427},end:{line:1,column:20451}},"504":{start:{line:1,column:20458},end:{line:1,column:20463}},"505":{start:{line:1,column:20466},end:{line:1,column:20471}},"506":{start:{line:1,column:20472},end:{line:1,column:20561}},"507":{start:{line:1,column:20502},end:{line:1,column:20506}},"508":{start:{line:1,column:20507},end:{line:1,column:20549}},"509":{start:{line:1,column:20555},end:{line:1,column:20561}},"510":{start:{line:1,column:20585},end:{line:1,column:20587}},"511":{start:{line:1,column:20588},end:{line:1,column:20977}},"512":{start:{line:1,column:20670},end:{line:1,column:20688}},"513":{start:{line:1,column:20691},end:{line:1,column:20715}},"514":{start:{line:1,column:20716},end:{line:1,column:20766}},"515":{start:{line:1,column:20745},end:{line:1,column:20766}},"516":{start:{line:1,column:20772},end:{line:1,column:20863}},"517":{start:{line:1,column:20869},end:{line:1,column:20892}},"518":{start:{line:1,column:20893},end:{line:1,column:20976}},"519":{start:{line:1,column:20977},end:{line:1,column:20985}},"520":{start:{line:1,column:21004},end:{line:1,column:21039}},"521":{start:{line:1,column:21059},end:{line:1,column:21146}},"522":{start:{line:1,column:21158},end:{line:1,column:21206}},"523":{start:{line:1,column:21186},end:{line:1,column:21206}},"524":{start:{line:1,column:21224},end:{line:1,column:21270}},"525":{start:{line:1,column:21292},end:{line:1,column:21294}},"526":{start:{line:1,column:21295},end:{line:1,column:21501}},"527":{start:{line:1,column:21344},end:{line:1,column:21349}},"528":{start:{line:1,column:21350},end:{line:1,column:21500}},"529":{start:{line:1,column:21399},end:{line:1,column:21448}},"530":{start:{line:1,column:21441},end:{line:1,column:21448}},"531":{start:{line:1,column:21452},end:{line:1,column:21500}},"532":{start:{line:1,column:21507},end:{line:1,column:21526}},"533":{start:{line:1,column:21527},end:{line:1,column:21539}},"534":{start:{line:1,column:21555},end:{line:1,column:21672}},"535":{start:{line:1,column:21603},end:{line:1,column:21616}},"536":{start:{line:1,column:21617},end:{line:1,column:21671}},"537":{start:{line:1,column:21672},end:{line:1,column:21680}},"538":{start:{line:1,column:21696},end:{line:1,column:21717}},"539":{start:{line:1,column:21763},end:{line:1,column:21768}},"540":{start:{line:1,column:21769},end:{line:1,column:21789}},"541":{start:{line:1,column:21831},end:{line:1,column:21833}},"542":{start:{line:1,column:21834},end:{line:1,column:21884}},"543":{start:{line:1,column:21865},end:{line:1,column:21869}},"544":{start:{line:1,column:21870},end:{line:1,column:21883}},"545":{start:{line:1,column:21890},end:{line:1,column:21904}},"546":{start:{line:1,column:21905},end:{line:1,column:21926}},"547":{start:{line:1,column:21933},end:{line:1,column:21942}},"548":{start:{line:1,column:21945},end:{line:1,column:21950}},"549":{start:{line:1,column:21951},end:{line:1,column:21962}},"550":{start:{line:1,column:21992},end:{line:1,column:21993}},"551":{start:{line:1,column:21994},end:{line:1,column:22020}},"552":{start:{line:1,column:22009},end:{line:1,column:22020}},"553":{start:{line:1,column:22020},end:{line:1,column:22059}},"554":{start:{line:1,column:22036},end:{line:1,column:22059}},"555":{start:{line:1,column:22065},end:{line:1,column:22070}},"556":{start:{line:1,column:22071},end:{line:1,column:22119}},"557":{start:{line:1,column:22085},end:{line:1,column:22119}},"558":{start:{line:1,column:22125},end:{line:1,column:22134}},"559":{start:{line:1,column:22137},end:{line:1,column:22230}},"560":{start:{line:1,column:22231},end:{line:1,column:22266}},"561":{start:{line:1,column:22282},end:{line:1,column:22344}},"562":{start:{line:1,column:22360},end:{line:1,column:22405}},"563":{start:{line:1,column:22425},end:{line:1,column:22438}},"564":{start:{line:1,column:22444},end:{line:1,column:22449}},"565":{start:{line:1,column:22450},end:{line:1,column:22517}},"566":{start:{line:1,column:22549},end:{line:1,column:22551}},"567":{start:{line:1,column:22552},end:{line:1,column:22641}},"568":{start:{line:1,column:22589},end:{line:1,column:22641}},"569":{start:{line:1,column:22620},end:{line:1,column:22629}},"570":{start:{line:1,column:22647},end:{line:1,column:22669}},"571":{start:{line:1,column:22675},end:{line:1,column:22684}},"572":{start:{line:1,column:22685},end:{line:1,column:22704}},"573":{start:{line:1,column:22730},end:{line:1,column:22732}},"574":{start:{line:1,column:22733},end:{line:1,column:22834}},"575":{start:{line:1,column:22785},end:{line:1,column:22812}},"576":{start:{line:1,column:22842},end:{line:1,column:23150}},"577":{start:{line:1,column:22906},end:{line:1,column:23014}},"578":{start:{line:1,column:22993},end:{line:1,column:23014}},"579":{start:{line:1,column:23020},end:{line:1,column:23030}},"580":{start:{line:1,column:23031},end:{line:1,column:23067}},"581":{start:{line:1,column:23047},end:{line:1,column:23067}},"582":{start:{line:1,column:23077},end:{line:1,column:23148}},"583":{start:{line:1,column:23166},end:{line:1,column:23239}},"584":{start:{line:1,column:23217},end:{line:1,column:23239}},"585":{start:{line:1,column:23245},end:{line:1,column:23246}},"586":{start:{line:1,column:23249},end:{line:1,column:23251}},"587":{start:{line:1,column:23254},end:{line:1,column:23637}},"588":{start:{line:1,column:23273},end:{line:1,column:23483}},"589":{start:{line:1,column:23305},end:{line:1,column:23439}},"590":{start:{line:1,column:23325},end:{line:1,column:23327}},"591":{start:{line:1,column:23328},end:{line:1,column:23438}},"592":{start:{line:1,column:23379},end:{line:1,column:23417}},"593":{start:{line:1,column:23439},end:{line:1,column:23482}},"594":{start:{line:1,column:23456},end:{line:1,column:23482}},"595":{start:{line:1,column:23483},end:{line:1,column:23632}},"596":{start:{line:1,column:23554},end:{line:1,column:23618}},"597":{start:{line:1,column:23638},end:{line:1,column:23658}},"598":{start:{line:1,column:23666},end:{line:1,column:23783}},"599":{start:{line:1,column:23726},end:{line:1,column:23781}},"600":{start:{line:1,column:23803},end:{line:1,column:23841}},"601":{start:{line:1,column:23819},end:{line:1,column:23841}},"602":{start:{line:1,column:23841},end:{line:1,column:23871}},"603":{start:{line:1,column:23847},end:{line:1,column:23871}},"604":{start:{line:1,column:23871},end:{line:1,column:23912}},"605":{start:{line:1,column:23890},end:{line:1,column:23912}},"606":{start:{line:1,column:23918},end:{line:1,column:23939}},"607":{start:{line:1,column:23942},end:{line:1,column:23963}},"608":{start:{line:1,column:23964},end:{line:1,column:23999}},"609":{start:{line:1,column:24025},end:{line:1,column:24026}},"610":{start:{line:1,column:24029},end:{line:1,column:24030}},"611":{start:{line:1,column:24033},end:{line:1,column:24034}},"612":{start:{line:1,column:24035},end:{line:1,column:24109}},"613":{start:{line:1,column:24046},end:{line:1,column:24089}},"614":{start:{line:1,column:24068},end:{line:1,column:24089}},"615":{start:{line:1,column:24089},end:{line:1,column:24108}},"616":{start:{line:1,column:24109},end:{line:1,column:24132}},"617":{start:{line:1,column:24148},end:{line:1,column:24184}},"618":{start:{line:1,column:24204},end:{line:1,column:24280}},"619":{start:{line:1,column:24263},end:{line:1,column:24280}},"620":{start:{line:1,column:24286},end:{line:1,column:24295}},"621":{start:{line:1,column:24298},end:{line:1,column:24321}},"622":{start:{line:1,column:24322},end:{line:1,column:24610}},"623":{start:{line:1,column:24371},end:{line:1,column:24412}},"624":{start:{line:1,column:24413},end:{line:1,column:24491}},"625":{start:{line:1,column:24497},end:{line:1,column:24610}},"626":{start:{line:1,column:24630},end:{line:1,column:24674}},"627":{start:{line:1,column:24646},end:{line:1,column:24674}},"628":{start:{line:1,column:24681},end:{line:1,column:24686}},"629":{start:{line:1,column:24689},end:{line:1,column:24691}},"630":{start:{line:1,column:24692},end:{line:1,column:24864}},"631":{start:{line:1,column:24718},end:{line:1,column:24723}},"632":{start:{line:1,column:24806},end:{line:1,column:24827}},"633":{start:{line:1,column:24828},end:{line:1,column:24863}},"634":{start:{line:1,column:24864},end:{line:1,column:25066}},"635":{start:{line:1,column:24907},end:{line:1,column:24973}},"636":{start:{line:1,column:25021},end:{line:1,column:25044}},"637":{start:{line:1,column:25093},end:{line:1,column:25094}},"638":{start:{line:1,column:25097},end:{line:1,column:25098}},"639":{start:{line:1,column:25101},end:{line:1,column:25138}},"640":{start:{line:1,column:25139},end:{line:1,column:25411}},"641":{start:{line:1,column:25166},end:{line:1,column:25190}},"642":{start:{line:1,column:25181},end:{line:1,column:25190}},"643":{start:{line:1,column:25196},end:{line:1,column:25209}},"644":{start:{line:1,column:25212},end:{line:1,column:25216}},"645":{start:{line:1,column:25217},end:{line:1,column:25232}},"646":{start:{line:1,column:25226},end:{line:1,column:25232}},"647":{start:{line:1,column:25238},end:{line:1,column:25244}},"648":{start:{line:1,column:25247},end:{line:1,column:25271}},"649":{start:{line:1,column:25272},end:{line:1,column:25297}},"650":{start:{line:1,column:25291},end:{line:1,column:25297}},"651":{start:{line:1,column:25297},end:{line:1,column:25407}},"652":{start:{line:1,column:25346},end:{line:1,column:25369}},"653":{start:{line:1,column:25360},end:{line:1,column:25369}},"654":{start:{line:1,column:25369},end:{line:1,column:25373}},"655":{start:{line:1,column:25379},end:{line:1,column:25403}},"656":{start:{line:1,column:25394},end:{line:1,column:25403}},"657":{start:{line:1,column:25403},end:{line:1,column:25406}},"658":{start:{line:1,column:25407},end:{line:1,column:25410}},"659":{start:{line:1,column:25411},end:{line:1,column:25454}},"660":{start:{line:1,column:25480},end:{line:1,column:25501}},"661":{start:{line:1,column:25504},end:{line:1,column:25505}},"662":{start:{line:1,column:25506},end:{line:1,column:25794}},"663":{start:{line:1,column:25530},end:{line:1,column:25534}},"664":{start:{line:1,column:25535},end:{line:1,column:25583}},"665":{start:{line:1,column:25551},end:{line:1,column:25564}},"666":{start:{line:1,column:25565},end:{line:1,column:25582}},"667":{start:{line:1,column:25583},end:{line:1,column:25667}},"668":{start:{line:1,column:25609},end:{line:1,column:25622}},"669":{start:{line:1,column:25623},end:{line:1,column:25658}},"670":{start:{line:1,column:25658},end:{line:1,column:25666}},"671":{start:{line:1,column:25673},end:{line:1,column:25698}},"672":{start:{line:1,column:25701},end:{line:1,column:25725}},"673":{start:{line:1,column:25726},end:{line:1,column:25793}},"674":{start:{line:1,column:25794},end:{line:1,column:25812}},"675":{start:{line:1,column:25834},end:{line:1,column:25836}},"676":{start:{line:1,column:25837},end:{line:1,column:25949}},"677":{start:{line:1,column:25880},end:{line:1,column:25945}},"678":{start:{line:1,column:25971},end:{line:1,column:25973}},"679":{start:{line:1,column:25974},end:{line:1,column:26030}},"680":{start:{line:1,column:26016},end:{line:1,column:26027}},"681":{start:{line:1,column:26050},end:{line:1,column:26085}},"682":{start:{line:1,column:26093},end:{line:1,column:26105}},"683":{start:{line:1,column:26108},end:{line:1,column:26840}},"684":{start:{line:1,column:26121},end:{line:1,column:26831}},"685":{start:{line:1,column:26843},end:{line:1,column:26895}},"686":{start:{line:1,column:26873},end:{line:1,column:26893}},"687":{start:{line:1,column:26899},end:{line:1,column:27138}},"688":{start:{line:1,column:26920},end:{line:1,column:26937}},"689":{start:{line:1,column:27009},end:{line:1,column:27065}},"690":{start:{line:1,column:27077},end:{line:1,column:27136}},"691":{start:{line:1,column:27141},end:{line:1,column:27369}},"692":{start:{line:1,column:27180},end:{line:1,column:27195}},"693":{start:{line:1,column:27215},end:{line:1,column:27250}},"694":{start:{line:1,column:27262},end:{line:1,column:27367}},"695":{start:{line:1,column:27372},end:{line:1,column:27599}},"696":{start:{line:1,column:27385},end:{line:1,column:27590}},"697":{start:{line:1,column:27603},end:{line:1,column:27760}},"698":{start:{line:1,column:27616},end:{line:1,column:27750}},"699":{start:{line:1,column:27763},end:{line:1,column:27946}},"700":{start:{line:1,column:27796},end:{line:1,column:27814}},"701":{start:{line:1,column:27836},end:{line:1,column:27872}},"702":{start:{line:1,column:27884},end:{line:1,column:27944}},"703":{start:{line:1,column:27962},end:{line:1,column:28044}},"704":{start:{line:1,column:28051},end:{line:1,column:28163}},"705":{start:{line:1,column:28084},end:{line:1,column:28103}},"706":{start:{line:1,column:28125},end:{line:1,column:28161}},"707":{start:{line:1,column:28167},end:{line:1,column:28372}},"708":{start:{line:1,column:28201},end:{line:1,column:28218}},"709":{start:{line:1,column:28240},end:{line:1,column:28277}},"710":{start:{line:1,column:28289},end:{line:1,column:28370}},"711":{start:{line:1,column:28376},end:{line:1,column:28653}},"712":{start:{line:1,column:28421},end:{line:1,column:28439}},"713":{start:{line:1,column:28461},end:{line:1,column:28509}},"714":{start:{line:1,column:28521},end:{line:1,column:28651}},"715":{start:{line:1,column:28657},end:{line:1,column:28934}},"716":{start:{line:1,column:28702},end:{line:1,column:28720}},"717":{start:{line:1,column:28742},end:{line:1,column:28790}},"718":{start:{line:1,column:28802},end:{line:1,column:28932}},"719":{start:{line:1,column:28938},end:{line:1,column:29290}},"720":{start:{line:1,column:28998},end:{line:1,column:29014}},"721":{start:{line:1,column:29038},end:{line:1,column:29108}},"722":{start:{line:1,column:29120},end:{line:1,column:29288}},"723":{start:{line:1,column:29294},end:{line:1,column:29563}},"724":{start:{line:1,column:29339},end:{line:1,column:29353}},"725":{start:{line:1,column:29375},end:{line:1,column:29423}},"726":{start:{line:1,column:29435},end:{line:1,column:29561}},"727":{start:{line:1,column:29567},end:{line:1,column:29832}},"728":{start:{line:1,column:29612},end:{line:1,column:29624}},"729":{start:{line:1,column:29646},end:{line:1,column:29694}},"730":{start:{line:1,column:29706},end:{line:1,column:29830}},"731":{start:{line:1,column:29836},end:{line:1,column:29971}},"732":{start:{line:1,column:29853},end:{line:1,column:29875}},"733":{start:{line:1,column:29891},end:{line:1,column:29903}},"734":{start:{line:1,column:29915},end:{line:1,column:29969}},"735":{start:{line:1,column:29975},end:{line:1,column:30106}},"736":{start:{line:1,column:29992},end:{line:1,column:30012}},"737":{start:{line:1,column:30028},end:{line:1,column:30040}},"738":{start:{line:1,column:30052},end:{line:1,column:30104}},"739":{start:{line:1,column:30110},end:{line:1,column:30299}},"740":{start:{line:1,column:30130},end:{line:1,column:30152}},"741":{start:{line:1,column:30168},end:{line:1,column:30183}},"742":{start:{line:1,column:30195},end:{line:1,column:30297}},"743":{start:{line:1,column:30303},end:{line:1,column:30488}},"744":{start:{line:1,column:30323},end:{line:1,column:30343}},"745":{start:{line:1,column:30359},end:{line:1,column:30374}},"746":{start:{line:1,column:30386},end:{line:1,column:30486}},"747":{start:{line:1,column:30492},end:{line:1,column:30671}},"748":{start:{line:1,column:30512},end:{line:1,column:30529}},"749":{start:{line:1,column:30545},end:{line:1,column:30560}},"750":{start:{line:1,column:30572},end:{line:1,column:30669}},"751":{start:{line:1,column:30675},end:{line:1,column:30850}},"752":{start:{line:1,column:30695},end:{line:1,column:30710}},"753":{start:{line:1,column:30726},end:{line:1,column:30741}},"754":{start:{line:1,column:30753},end:{line:1,column:30848}},"755":{start:{line:1,column:30854},end:{line:1,column:31148}},"756":{start:{line:1,column:30908},end:{line:1,column:30916}},"757":{start:{line:1,column:30938},end:{line:1,column:31008}},"758":{start:{line:1,column:31026},end:{line:1,column:31087}},"759":{start:{line:1,column:31088},end:{line:1,column:31146}},"760":{start:{line:1,column:31152},end:{line:1,column:31159}},"761":{start:{line:1,column:31163},end:{line:1,column:31170}},"762":{start:{line:1,column:31174},end:{line:1,column:31272}},"763":{start:{line:1,column:31227},end:{line:1,column:31270}},"764":{start:{line:1,column:31288},end:{line:1,column:31352}},"765":{start:{line:1,column:31360},end:{line:1,column:31585}},"766":{start:{line:1,column:31386},end:{line:1,column:31390}},"767":{start:{line:1,column:31397},end:{line:1,column:31401}},"768":{start:{line:1,column:31421},end:{line:1,column:31425}},"769":{start:{line:1,column:31441},end:{line:1,column:31508}},"770":{start:{line:1,column:31524},end:{line:1,column:31583}},"771":{start:{line:1,column:31589},end:{line:1,column:32253}},"772":{start:{line:1,column:31625},end:{line:1,column:31632}},"773":{start:{line:1,column:31648},end:{line:1,column:31667}},"774":{start:{line:1,column:31700},end:{line:1,column:31726}},"775":{start:{line:1,column:31727},end:{line:1,column:31760}},"776":{start:{line:1,column:31793},end:{line:1,column:31811}},"777":{start:{line:1,column:31812},end:{line:1,column:31847}},"778":{start:{line:1,column:31876},end:{line:1,column:31889}},"779":{start:{line:1,column:31890},end:{line:1,column:31920}},"780":{start:{line:1,column:31943},end:{line:1,column:31958}},"781":{start:{line:1,column:31987},end:{line:1,column:32005}},"782":{start:{line:1,column:32006},end:{line:1,column:32070}},"783":{start:{line:1,column:32085},end:{line:1,column:32118}},"784":{start:{line:1,column:32136},end:{line:1,column:32171}},"785":{start:{line:1,column:32148},end:{line:1,column:32170}},"786":{start:{line:1,column:32190},end:{line:1,column:32240}},"787":{start:{line:1,column:32241},end:{line:1,column:32249}},"788":{start:{line:1,column:32257},end:{line:1,column:32741}},"789":{start:{line:1,column:32284},end:{line:1,column:32296}},"790":{start:{line:1,column:32308},end:{line:1,column:32331}},"791":{start:{line:1,column:32348},end:{line:1,column:32368}},"792":{start:{line:1,column:32369},end:{line:1,column:32405}},"793":{start:{line:1,column:32424},end:{line:1,column:32440}},"794":{start:{line:1,column:32441},end:{line:1,column:32479}},"795":{start:{line:1,column:32468},end:{line:1,column:32475}},"796":{start:{line:1,column:32500},end:{line:1,column:32516}},"797":{start:{line:1,column:32517},end:{line:1,column:32571}},"798":{start:{line:1,column:32590},end:{line:1,column:32606}},"799":{start:{line:1,column:32607},end:{line:1,column:32683}},"800":{start:{line:1,column:32658},end:{line:1,column:32665}},"801":{start:{line:1,column:32677},end:{line:1,column:32682}},"802":{start:{line:1,column:32700},end:{line:1,column:32739}},"803":{start:{line:1,column:32731},end:{line:1,column:32738}},"804":{start:{line:1,column:32759},end:{line:1,column:32783}},"805":{start:{line:1,column:32774},end:{line:1,column:32783}},"806":{start:{line:1,column:32783},end:{line:1,column:32836}},"807":{start:{line:1,column:32814},end:{line:1,column:32821}},"808":{start:{line:1,column:32822},end:{line:1,column:32835}},"809":{start:{line:1,column:32827},end:{line:1,column:32835}},"810":{start:{line:1,column:32836},end:{line:1,column:32847}},"811":{start:{line:1,column:32865},end:{line:1,column:32890}},"812":{start:{line:1,column:32880},end:{line:1,column:32890}},"813":{start:{line:1,column:32890},end:{line:1,column:32963}},"814":{start:{line:1,column:32921},end:{line:1,column:32928}},"815":{start:{line:1,column:32929},end:{line:1,column:32962}},"816":{start:{line:1,column:32941},end:{line:1,column:32962}},"817":{start:{line:1,column:32963},end:{line:1,column:32971}},"818":{start:{line:1,column:32978},end:{line:1,column:33089}},"819":{start:{line:1,column:33016},end:{line:1,column:33044}},"820":{start:{line:1,column:33056},end:{line:1,column:33087}},"821":{start:{line:1,column:33111},end:{line:1,column:33113}},"822":{start:{line:1,column:33114},end:{line:1,column:33168}},"823":{start:{line:1,column:33146},end:{line:1,column:33165}},"824":{start:{line:1,column:33176},end:{line:1,column:33299}},"825":{start:{line:1,column:33219},end:{line:1,column:33254}},"826":{start:{line:1,column:33266},end:{line:1,column:33297}},"827":{start:{line:1,column:33323},end:{line:1,column:33330}},"828":{start:{line:1,column:33333},end:{line:1,column:33354}},"829":{start:{line:1,column:33357},end:{line:1,column:33366}},"830":{start:{line:1,column:33369},end:{line:1,column:33378}},"831":{start:{line:1,column:33381},end:{line:1,column:33390}},"832":{start:{line:1,column:33393},end:{line:1,column:33402}},"833":{start:{line:1,column:33405},end:{line:1,column:33432}},"834":{start:{line:1,column:33433},end:{line:1,column:33479}},"835":{start:{line:1,column:33503},end:{line:1,column:33505}},"836":{start:{line:1,column:33508},end:{line:1,column:33510}},"837":{start:{line:1,column:33513},end:{line:1,column:33515}},"838":{start:{line:1,column:33518},end:{line:1,column:33551}},"839":{start:{line:1,column:33552},end:{line:1,column:33581}},"840":{start:{line:1,column:33588},end:{line:1,column:34716}},"841":{start:{line:1,column:33818},end:{line:1,column:34108}},"842":{start:{line:1,column:34018},end:{line:1,column:34023}},"843":{start:{line:1,column:34127},end:{line:1,column:34166}},"844":{start:{line:1,column:34178},end:{line:1,column:34207}},"845":{start:{line:1,column:34221},end:{line:1,column:34258}},"846":{start:{line:1,column:34276},end:{line:1,column:34317}},"847":{start:{line:1,column:34333},end:{line:1,column:34372}},"848":{start:{line:1,column:34392},end:{line:1,column:34435}},"849":{start:{line:1,column:34451},end:{line:1,column:34519}},"850":{start:{line:1,column:34497},end:{line:1,column:34502}},"851":{start:{line:1,column:34540},end:{line:1,column:34623}},"852":{start:{line:1,column:34596},end:{line:1,column:34601}},"853":{start:{line:1,column:34635},end:{line:1,column:34714}},"854":{start:{line:1,column:34770},end:{line:1,column:34771}},"855":{start:{line:1,column:34772},end:{line:1,column:35113}},"856":{start:{line:1,column:35121},end:{line:1,column:36079}},"857":{start:{line:1,column:35287},end:{line:1,column:35309}},"858":{start:{line:1,column:35343},end:{line:1,column:35508}},"859":{start:{line:1,column:35520},end:{line:1,column:35549}},"860":{start:{line:1,column:35563},end:{line:1,column:35600}},"861":{start:{line:1,column:35618},end:{line:1,column:35659}},"862":{start:{line:1,column:35675},end:{line:1,column:35714}},"863":{start:{line:1,column:35734},end:{line:1,column:35777}},"864":{start:{line:1,column:35793},end:{line:1,column:35847}},"865":{start:{line:1,column:35868},end:{line:1,column:35937}},"866":{start:{line:1,column:35955},end:{line:1,column:35994}},"867":{start:{line:1,column:35971},end:{line:1,column:35983}},"868":{start:{line:1,column:35997},end:{line:1,column:36038}},"869":{start:{line:1,column:36039},end:{line:1,column:36077}},"870":{start:{line:1,column:36083},end:{line:1,column:36186}},"871":{start:{line:1,column:36121},end:{line:1,column:36151}},"872":{start:{line:1,column:36163},end:{line:1,column:36184}},"873":{start:{line:1,column:36204},end:{line:1,column:36257}},"874":{start:{line:1,column:36249},end:{line:1,column:36256}},"875":{start:{line:1,column:36279},end:{line:1,column:36342}},"876":{start:{line:1,column:36343},end:{line:1,column:36365}},"877":{start:{line:1,column:36381},end:{line:1,column:36795}},"878":{start:{line:1,column:36402},end:{line:1,column:36412}},"879":{start:{line:1,column:36415},end:{line:1,column:36432}},"880":{start:{line:1,column:36433},end:{line:1,column:36718}},"881":{start:{line:1,column:36724},end:{line:1,column:36795}},"882":{start:{line:1,column:36819},end:{line:1,column:36856}},"883":{start:{line:1,column:36859},end:{line:1,column:36879}},"884":{start:{line:1,column:36880},end:{line:1,column:36928}},"885":{start:{line:1,column:36944},end:{line:1,column:36991}},"886":{start:{line:1,column:36999},end:{line:1,column:37008}},"887":{start:{line:1,column:37012},end:{line:1,column:39720}},"888":{start:{line:1,column:37036},end:{line:1,column:37040}},"889":{start:{line:1,column:37069},end:{line:1,column:37090}},"890":{start:{line:1,column:37107},end:{line:1,column:37111}},"891":{start:{line:1,column:37117},end:{line:1,column:37118}},"892":{start:{line:1,column:37134},end:{line:1,column:37140}},"893":{start:{line:1,column:37158},end:{line:1,column:37164}},"894":{start:{line:1,column:37178},end:{line:1,column:37184}},"895":{start:{line:1,column:37198},end:{line:1,column:37204}},"896":{start:{line:1,column:37222},end:{line:1,column:37226}},"897":{start:{line:1,column:37242},end:{line:1,column:37247}},"898":{start:{line:1,column:37257},end:{line:1,column:37262}},"899":{start:{line:1,column:37278},end:{line:1,column:37283}},"900":{start:{line:1,column:37296},end:{line:1,column:37315}},"901":{start:{line:1,column:37349},end:{line:1,column:37351}},"902":{start:{line:1,column:37367},end:{line:1,column:37565}},"903":{start:{line:1,column:37413},end:{line:1,column:37419}},"904":{start:{line:1,column:37420},end:{line:1,column:37432}},"905":{start:{line:1,column:37425},end:{line:1,column:37432}},"906":{start:{line:1,column:37432},end:{line:1,column:37564}},"907":{start:{line:1,column:37580},end:{line:1,column:37725}},"908":{start:{line:1,column:37755},end:{line:1,column:37810}},"909":{start:{line:1,column:37822},end:{line:1,column:37853}},"910":{start:{line:1,column:37881},end:{line:1,column:37963}},"911":{start:{line:1,column:37956},end:{line:1,column:37963}},"912":{start:{line:1,column:37969},end:{line:1,column:38010}},"913":{start:{line:1,column:38011},end:{line:1,column:38105}},"914":{start:{line:1,column:38124},end:{line:1,column:38146}},"915":{start:{line:1,column:38163},end:{line:1,column:38203}},"916":{start:{line:1,column:38182},end:{line:1,column:38203}},"917":{start:{line:1,column:38203},end:{line:1,column:38233}},"918":{start:{line:1,column:38255},end:{line:1,column:38295}},"919":{start:{line:1,column:38274},end:{line:1,column:38295}},"920":{start:{line:1,column:38295},end:{line:1,column:38322}},"921":{start:{line:1,column:38348},end:{line:1,column:38413}},"922":{start:{line:1,column:38423},end:{line:1,column:38463}},"923":{start:{line:1,column:38442},end:{line:1,column:38463}},"924":{start:{line:1,column:38463},end:{line:1,column:38486}},"925":{start:{line:1,column:38492},end:{line:1,column:38506}},"926":{start:{line:1,column:38507},end:{line:1,column:38596}},"927":{start:{line:1,column:38609},end:{line:1,column:38776}},"928":{start:{line:1,column:38790},end:{line:1,column:38931}},"929":{start:{line:1,column:38815},end:{line:1,column:38829}},"930":{start:{line:1,column:38830},end:{line:1,column:38930}},"931":{start:{line:1,column:38950},end:{line:1,column:38991}},"932":{start:{line:1,column:38970},end:{line:1,column:38991}},"933":{start:{line:1,column:38991},end:{line:1,column:39014}},"934":{start:{line:1,column:39020},end:{line:1,column:39033}},"935":{start:{line:1,column:39036},end:{line:1,column:39056}},"936":{start:{line:1,column:39059},end:{line:1,column:39117}},"937":{start:{line:1,column:39120},end:{line:1,column:39164}},"938":{start:{line:1,column:39165},end:{line:1,column:39395}},"939":{start:{line:1,column:39413},end:{line:1,column:39442}},"940":{start:{line:1,column:39425},end:{line:1,column:39441}},"941":{start:{line:1,column:39460},end:{line:1,column:39707}},"942":{start:{line:1,column:39708},end:{line:1,column:39716}},"943":{start:{line:1,column:39724},end:{line:1,column:39959}},"944":{start:{line:1,column:39789},end:{line:1,column:39854}},"945":{start:{line:1,column:39864},end:{line:1,column:39957}},"946":{start:{line:1,column:39963},end:{line:1,column:39972}},"947":{start:{line:1,column:39976},end:{line:1,column:40837}},"948":{start:{line:1,column:40014},end:{line:1,column:40021}},"949":{start:{line:1,column:40061},end:{line:1,column:40122}},"950":{start:{line:1,column:40151},end:{line:1,column:40240}},"951":{start:{line:1,column:40287},end:{line:1,column:40288}},"952":{start:{line:1,column:40291},end:{line:1,column:40688}},"953":{start:{line:1,column:40348},end:{line:1,column:40397}},"954":{start:{line:1,column:40415},end:{line:1,column:40542}},"955":{start:{line:1,column:40502},end:{line:1,column:40535}},"956":{start:{line:1,column:40535},end:{line:1,column:40541}},"957":{start:{line:1,column:40548},end:{line:1,column:40563}},"958":{start:{line:1,column:40564},end:{line:1,column:40611}},"959":{start:{line:1,column:40571},end:{line:1,column:40604}},"960":{start:{line:1,column:40604},end:{line:1,column:40610}},"961":{start:{line:1,column:40611},end:{line:1,column:40686}},"962":{start:{line:1,column:40646},end:{line:1,column:40686}},"963":{start:{line:1,column:40689},end:{line:1,column:40726}},"964":{start:{line:1,column:40744},end:{line:1,column:40773}},"965":{start:{line:1,column:40756},end:{line:1,column:40772}},"966":{start:{line:1,column:40792},end:{line:1,column:40824}},"967":{start:{line:1,column:40825},end:{line:1,column:40833}},"968":{start:{line:1,column:40841},end:{line:1,column:41104}},"969":{start:{line:1,column:40872},end:{line:1,column:40901}},"970":{start:{line:1,column:40884},end:{line:1,column:40900}},"971":{start:{line:1,column:40919},end:{line:1,column:41091}},"972":{start:{line:1,column:41028},end:{line:1,column:41054}},"973":{start:{line:1,column:41092},end:{line:1,column:41100}},"974":{start:{line:1,column:41126},end:{line:1,column:41156}},"975":{start:{line:1,column:41159},end:{line:1,column:41192}},"976":{start:{line:1,column:41193},end:{line:1,column:41294}},"977":{start:{line:1,column:41320},end:{line:1,column:41350}},"978":{start:{line:1,column:41351},end:{line:1,column:41369}},"979":{start:{line:1,column:41389},end:{line:1,column:41746}},"980":{start:{line:1,column:41447},end:{line:1,column:41454}},"981":{start:{line:1,column:41455},end:{line:1,column:41481}},"982":{start:{line:1,column:41487},end:{line:1,column:41496}},"983":{start:{line:1,column:41497},end:{line:1,column:41514}},"984":{start:{line:1,column:41520},end:{line:1,column:41681}},"985":{start:{line:1,column:41554},end:{line:1,column:41573}},"986":{start:{line:1,column:41574},end:{line:1,column:41680}},"987":{start:{line:1,column:41593},end:{line:1,column:41600}},"988":{start:{line:1,column:41601},end:{line:1,column:41679}},"989":{start:{line:1,column:41669},end:{line:1,column:41676}},"990":{start:{line:1,column:41687},end:{line:1,column:41698}},"991":{start:{line:1,column:41701},end:{line:1,column:41727}},"992":{start:{line:1,column:41719},end:{line:1,column:41726}},"993":{start:{line:1,column:41728},end:{line:1,column:41745}},"994":{start:{line:1,column:41766},end:{line:1,column:41897}},"995":{start:{line:1,column:41792},end:{line:1,column:41881}},"996":{start:{line:1,column:41816},end:{line:1,column:41881}},"997":{start:{line:1,column:41864},end:{line:1,column:41881}},"998":{start:{line:1,column:41881},end:{line:1,column:41895}},"999":{start:{line:1,column:41913},end:{line:1,column:42031}},"1000":{start:{line:1,column:42039},end:{line:1,column:42151}},"1001":{start:{line:1,column:42099},end:{line:1,column:42149}},"1002":{start:{line:1,column:42155},end:{line:1,column:42183}},"1003":{start:{line:1,column:42247},end:{line:1,column:42302}},"1004":{start:{line:1,column:42305},end:{line:1,column:42322}},"1005":{start:{line:1,column:42323},end:{line:1,column:42369}},"1006":{start:{line:1,column:42393},end:{line:1,column:42440}},"1007":{start:{line:1,column:42441},end:{line:1,column:42479}},"1008":{start:{line:1,column:42495},end:{line:1,column:42518}},"1009":{start:{line:1,column:42534},end:{line:1,column:42550}},"1010":{start:{line:1,column:42558},end:{line:1,column:45187}},"1011":{start:{line:1,column:42661},end:{line:1,column:42769}},"1012":{start:{line:1,column:42788},end:{line:1,column:42810}},"1013":{start:{line:1,column:42813},end:{line:1,column:42853}},"1014":{start:{line:1,column:42854},end:{line:1,column:42945}},"1015":{start:{line:1,column:42981},end:{line:1,column:42986}},"1016":{start:{line:1,column:42987},end:{line:1,column:43147}},"1017":{start:{line:1,column:43016},end:{line:1,column:43030}},"1018":{start:{line:1,column:43031},end:{line:1,column:43074}},"1019":{start:{line:1,column:43106},end:{line:1,column:43145}},"1020":{start:{line:1,column:43178},end:{line:1,column:43185}},"1021":{start:{line:1,column:43188},end:{line:1,column:43202}},"1022":{start:{line:1,column:43203},end:{line:1,column:43389}},"1023":{start:{line:1,column:43212},end:{line:1,column:43342}},"1024":{start:{line:1,column:43234},end:{line:1,column:43256}},"1025":{start:{line:1,column:43257},end:{line:1,column:43302}},"1026":{start:{line:1,column:43308},end:{line:1,column:43342}},"1027":{start:{line:1,column:43347},end:{line:1,column:43389}},"1028":{start:{line:1,column:43425},end:{line:1,column:43570}},"1029":{start:{line:1,column:43609},end:{line:1,column:43637}},"1030":{start:{line:1,column:43640},end:{line:1,column:43673}},"1031":{start:{line:1,column:43676},end:{line:1,column:43681}},"1032":{start:{line:1,column:43682},end:{line:1,column:43752}},"1033":{start:{line:1,column:43712},end:{line:1,column:43752}},"1034":{start:{line:1,column:43752},end:{line:1,column:43911}},"1035":{start:{line:1,column:43774},end:{line:1,column:43791}},"1036":{start:{line:1,column:43794},end:{line:1,column:43826}},"1037":{start:{line:1,column:43827},end:{line:1,column:43910}},"1038":{start:{line:1,column:43948},end:{line:1,column:43976}},"1039":{start:{line:1,column:43979},end:{line:1,column:44012}},"1040":{start:{line:1,column:44015},end:{line:1,column:44020}},"1041":{start:{line:1,column:44021},end:{line:1,column:44091}},"1042":{start:{line:1,column:44051},end:{line:1,column:44091}},"1043":{start:{line:1,column:44091},end:{line:1,column:44192}},"1044":{start:{line:1,column:44226},end:{line:1,column:44231}},"1045":{start:{line:1,column:44232},end:{line:1,column:44406}},"1046":{start:{line:1,column:44255},end:{line:1,column:44341}},"1047":{start:{line:1,column:44435},end:{line:1,column:44442}},"1048":{start:{line:1,column:44445},end:{line:1,column:44459}},"1049":{start:{line:1,column:44460},end:{line:1,column:45185}},"1050":{start:{line:1,column:44475},end:{line:1,column:44606}},"1051":{start:{line:1,column:44497},end:{line:1,column:44527}},"1052":{start:{line:1,column:44528},end:{line:1,column:44568}},"1053":{start:{line:1,column:44574},end:{line:1,column:44606}},"1054":{start:{line:1,column:44611},end:{line:1,column:45185}},"1055":{start:{line:1,column:44633},end:{line:1,column:44663}},"1056":{start:{line:1,column:44664},end:{line:1,column:45145}},"1057":{start:{line:1,column:44723},end:{line:1,column:44767}},"1058":{start:{line:1,column:44768},end:{line:1,column:45023}},"1059":{start:{line:1,column:45029},end:{line:1,column:45145}},"1060":{start:{line:1,column:45151},end:{line:1,column:45185}},"1061":{start:{line:1,column:45191},end:{line:1,column:45277}},"1062":{start:{line:1,column:45223},end:{line:1,column:45275}},"1063":{start:{line:1,column:45281},end:{line:1,column:45351}},"1064":{start:{line:1,column:45320},end:{line:1,column:45349}},"1065":{start:{line:1,column:45377},end:{line:1,column:45384}},"1066":{start:{line:1,column:45387},end:{line:1,column:45401}},"1067":{start:{line:1,column:45402},end:{line:1,column:45428}},"1068":{start:{line:1,column:45450},end:{line:1,column:45499}},"1069":{start:{line:1,column:45500},end:{line:1,column:45545}},"1070":{start:{line:1,column:45569},end:{line:1,column:45577}},"1071":{start:{line:1,column:45580},end:{line:1,column:45590}},"1072":{start:{line:1,column:45591},end:{line:1,column:45645}},"1073":{start:{line:1,column:45721},end:{line:1,column:45726}},"1074":{start:{line:1,column:45727},end:{line:1,column:45893}},"1075":{start:{line:1,column:45757},end:{line:1,column:45829}},"1076":{start:{line:1,column:45867},end:{line:1,column:45890}},"1077":{start:{line:1,column:45969},end:{line:1,column:45976}},"1078":{start:{line:1,column:45979},end:{line:1,column:45993}},"1079":{start:{line:1,column:45996},end:{line:1,column:46031}},"1080":{start:{line:1,column:46032},end:{line:1,column:46472}},"1081":{start:{line:1,column:46075},end:{line:1,column:46118}},"1082":{start:{line:1,column:46119},end:{line:1,column:46355}},"1083":{start:{line:1,column:46361},end:{line:1,column:46472}},"1084":{start:{line:1,column:46472},end:{line:1,column:46480}},"1085":{start:{line:1,column:46500},end:{line:1,column:46568}},"1086":{start:{line:1,column:46524},end:{line:1,column:46568}},"1087":{start:{line:1,column:46560},end:{line:1,column:46566}},"1088":{start:{line:1,column:46568},end:{line:1,column:46841}},"1089":{start:{line:1,column:46601},end:{line:1,column:46624}},"1090":{start:{line:1,column:46660},end:{line:1,column:46716}},"1091":{start:{line:1,column:46729},end:{line:1,column:46738}},"1092":{start:{line:1,column:46770},end:{line:1,column:46818}},"1093":{start:{line:1,column:46826},end:{line:1,column:46840}},"1094":{start:{line:1,column:46867},end:{line:1,column:46872}},"1095":{start:{line:1,column:46875},end:{line:1,column:46882}},"1096":{start:{line:1,column:46883},end:{line:1,column:47179}},"1097":{start:{line:1,column:46919},end:{line:1,column:46988}},"1098":{start:{line:1,column:47195},end:{line:1,column:47222}},"1099":{start:{line:1,column:47238},end:{line:1,column:47264}},"1100":{start:{line:1,column:47280},end:{line:1,column:47303}},"1101":{start:{line:1,column:47319},end:{line:1,column:47346}},"1102":{start:{line:1,column:47362},end:{line:1,column:47394}},"1103":{start:{line:1,column:47410},end:{line:1,column:47439}},"1104":{start:{line:1,column:47455},end:{line:1,column:47479}},"1105":{start:{line:1,column:47495},end:{line:1,column:47541}},"1106":{start:{line:1,column:47549},end:{line:1,column:47572}},"1107":{start:{line:1,column:47587},end:{line:1,column:47748}},"1108":{start:{line:1,column:47599},end:{line:1,column:47747}},"1109":{start:{line:1,column:47611},end:{line:1,column:47631}},"1110":{start:{line:1,column:47645},end:{line:1,column:47717}},"1111":{start:{line:1,column:47660},end:{line:1,column:47717}},"1112":{start:{line:1,column:47671},end:{line:1,column:47691}},"1113":{start:{line:1,column:47681},end:{line:1,column:47691}},"1114":{start:{line:1,column:47691},end:{line:1,column:47716}},"1115":{start:{line:1,column:47708},end:{line:1,column:47716}},"1116":{start:{line:1,column:47717},end:{line:1,column:47725}},"1117":{start:{line:1,column:47733},end:{line:1,column:47739}},"1118":{start:{line:1,column:47764},end:{line:1,column:47793}},"1119":{start:{line:1,column:47809},end:{line:1,column:47968}},"1120":{start:{line:1,column:47865},end:{line:1,column:47892}},"1121":{start:{line:1,column:47870},end:{line:1,column:47891}},"1122":{start:{line:1,column:47893},end:{line:1,column:47966}},"1123":{start:{line:1,column:47934},end:{line:1,column:47966}},"1124":{start:{line:1,column:47984},end:{line:1,column:48000}},"1125":{start:{line:1,column:48016},end:{line:1,column:48269}},"1126":{start:{line:1,column:48120},end:{line:1,column:48121}},"1127":{start:{line:1,column:48122},end:{line:1,column:48267}},"1128":{start:{line:1,column:48208},end:{line:1,column:48231}},"1129":{start:{line:1,column:48238},end:{line:1,column:48265}},"1130":{start:{line:1,column:48289},end:{line:1,column:48356}},"1131":{start:{line:1,column:48311},end:{line:1,column:48338}},"1132":{start:{line:1,column:48345},end:{line:1,column:48351}},"1133":{start:{line:1,column:48376},end:{line:1,column:48482}},"1134":{start:{line:1,column:48399},end:{line:1,column:48464}},"1135":{start:{line:1,column:48471},end:{line:1,column:48477}},"1136":{start:{line:1,column:48500},end:{line:1,column:48538}},"1137":{start:{line:1,column:48556},end:{line:1,column:48594}},"1138":{start:{line:1,column:48618},end:{line:1,column:48662}},"1139":{start:{line:1,column:48663},end:{line:1,column:48696}},"1140":{start:{line:1,column:48683},end:{line:1,column:48696}},"1141":{start:{line:1,column:48702},end:{line:1,column:48826}},"1142":{start:{line:1,column:48711},end:{line:1,column:48825}},"1143":{start:{line:1,column:48725},end:{line:1,column:48747}},"1144":{start:{line:1,column:48750},end:{line:1,column:48757}},"1145":{start:{line:1,column:48760},end:{line:1,column:48800}},"1146":{start:{line:1,column:48793},end:{line:1,column:48799}},"1147":{start:{line:1,column:48801},end:{line:1,column:48823}},"1148":{start:{line:1,column:48827},end:{line:1,column:48849}},"1149":{start:{line:1,column:48873},end:{line:1,column:48886}},"1150":{start:{line:1,column:48889},end:{line:1,column:49135}},"1151":{start:{line:1,column:48928},end:{line:1,column:48933}},"1152":{start:{line:1,column:48945},end:{line:1,column:48953}},"1153":{start:{line:1,column:48962},end:{line:1,column:49134}},"1154":{start:{line:1,column:48976},end:{line:1,column:49109}},"1155":{start:{line:1,column:48999},end:{line:1,column:49026}},"1156":{start:{line:1,column:49029},end:{line:1,column:49036}},"1157":{start:{line:1,column:49039},end:{line:1,column:49084}},"1158":{start:{line:1,column:49077},end:{line:1,column:49083}},"1159":{start:{line:1,column:49085},end:{line:1,column:49107}},"1160":{start:{line:1,column:49110},end:{line:1,column:49132}},"1161":{start:{line:1,column:49136},end:{line:1,column:49158}},"1162":{start:{line:1,column:49186},end:{line:1,column:49235}},"1163":{start:{line:1,column:49236},end:{line:1,column:49269}},"1164":{start:{line:1,column:49256},end:{line:1,column:49269}},"1165":{start:{line:1,column:49275},end:{line:1,column:49401}},"1166":{start:{line:1,column:49291},end:{line:1,column:49313}},"1167":{start:{line:1,column:49316},end:{line:1,column:49323}},"1168":{start:{line:1,column:49326},end:{line:1,column:49376}},"1169":{start:{line:1,column:49365},end:{line:1,column:49375}},"1170":{start:{line:1,column:49377},end:{line:1,column:49399}},"1171":{start:{line:1,column:49402},end:{line:1,column:49424}},"1172":{start:{line:1,column:49454},end:{line:1,column:49463}},"1173":{start:{line:1,column:49464},end:{line:1,column:49505}},"1174":{start:{line:1,column:49492},end:{line:1,column:49505}},"1175":{start:{line:1,column:49511},end:{line:1,column:49608}},"1176":{start:{line:1,column:49527},end:{line:1,column:49534}},"1177":{start:{line:1,column:49537},end:{line:1,column:49573}},"1178":{start:{line:1,column:49566},end:{line:1,column:49572}},"1179":{start:{line:1,column:49576},end:{line:1,column:49581}},"1180":{start:{line:1,column:49582},end:{line:1,column:49606}},"1181":{start:{line:1,column:49609},end:{line:1,column:49637}},"1182":{start:{line:1,column:49653},end:{line:1,column:49721}},"1183":{start:{line:1,column:49669},end:{line:1,column:49705}},"1184":{start:{line:1,column:49692},end:{line:1,column:49705}},"1185":{start:{line:1,column:49713},end:{line:1,column:49719}},"1186":{start:{line:1,column:49753},end:{line:1,column:49763}},"1187":{start:{line:1,column:49764},end:{line:1,column:49797}},"1188":{start:{line:1,column:49784},end:{line:1,column:49797}},"1189":{start:{line:1,column:49803},end:{line:1,column:49897}},"1190":{start:{line:1,column:49819},end:{line:1,column:49826}},"1191":{start:{line:1,column:49829},end:{line:1,column:49870}},"1192":{start:{line:1,column:49861},end:{line:1,column:49869}},"1193":{start:{line:1,column:49871},end:{line:1,column:49895}},"1194":{start:{line:1,column:49898},end:{line:1,column:49926}},"1195":{start:{line:1,column:49933},end:{line:1,column:50058}},"1196":{start:{line:1,column:49983},end:{line:1,column:50056}},"1197":{start:{line:1,column:50062},end:{line:1,column:50171}},"1198":{start:{line:1,column:50107},end:{line:1,column:50169}},"1199":{start:{line:1,column:50187},end:{line:1,column:50206}},"1200":{start:{line:1,column:50222},end:{line:1,column:50250}},"1201":{start:{line:1,column:50258},end:{line:1,column:51538}},"1202":{start:{line:1,column:50303},end:{line:1,column:50338}},"1203":{start:{line:1,column:50375},end:{line:1,column:50377}},"1204":{start:{line:1,column:50380},end:{line:1,column:50386}},"1205":{start:{line:1,column:50387},end:{line:1,column:50537}},"1206":{start:{line:1,column:50395},end:{line:1,column:50453}},"1207":{start:{line:1,column:50444},end:{line:1,column:50453}},"1208":{start:{line:1,column:50453},end:{line:1,column:50521}},"1209":{start:{line:1,column:50493},end:{line:1,column:50521}},"1210":{start:{line:1,column:50521},end:{line:1,column:50536}},"1211":{start:{line:1,column:50583},end:{line:1,column:50598}},"1212":{start:{line:1,column:50599},end:{line:1,column:50633}},"1213":{start:{line:1,column:50617},end:{line:1,column:50633}},"1214":{start:{line:1,column:50639},end:{line:1,column:50705}},"1215":{start:{line:1,column:50706},end:{line:1,column:50736}},"1216":{start:{line:1,column:50720},end:{line:1,column:50736}},"1217":{start:{line:1,column:50736},end:{line:1,column:50744}},"1218":{start:{line:1,column:50787},end:{line:1,column:50824}},"1219":{start:{line:1,column:50825},end:{line:1,column:50914}},"1220":{start:{line:1,column:50944},end:{line:1,column:50946}},"1221":{start:{line:1,column:50947},end:{line:1,column:51071}},"1222":{start:{line:1,column:50990},end:{line:1,column:51067}},"1223":{start:{line:1,column:51031},end:{line:1,column:51045}},"1224":{start:{line:1,column:51046},end:{line:1,column:51055}},"1225":{start:{line:1,column:51061},end:{line:1,column:51067}},"1226":{start:{line:1,column:51106},end:{line:1,column:51143}},"1227":{start:{line:1,column:51146},end:{line:1,column:51148}},"1228":{start:{line:1,column:51149},end:{line:1,column:51251}},"1229":{start:{line:1,column:51201},end:{line:1,column:51238}},"1230":{start:{line:1,column:51276},end:{line:1,column:51356}},"1231":{start:{line:1,column:51292},end:{line:1,column:51355}},"1232":{start:{line:1,column:51383},end:{line:1,column:51405}},"1233":{start:{line:1,column:51406},end:{line:1,column:51433}},"1234":{start:{line:1,column:51412},end:{line:1,column:51433}},"1235":{start:{line:1,column:51433},end:{line:1,column:51441}},"1236":{start:{line:1,column:51466},end:{line:1,column:51467}},"1237":{start:{line:1,column:51468},end:{line:1,column:51528}},"1238":{start:{line:1,column:51484},end:{line:1,column:51524}},"1239":{start:{line:1,column:51503},end:{line:1,column:51524}},"1240":{start:{line:1,column:51524},end:{line:1,column:51527}},"1241":{start:{line:1,column:51528},end:{line:1,column:51536}},"1242":{start:{line:1,column:51558},end:{line:1,column:51606}},"1243":{start:{line:1,column:51580},end:{line:1,column:51606}},"1244":{start:{line:1,column:51612},end:{line:1,column:51613}},"1245":{start:{line:1,column:51614},end:{line:1,column:51642}},"1246":{start:{line:1,column:51635},end:{line:1,column:51639}},"1247":{start:{line:1,column:51660},end:{line:1,column:51759}},"1248":{start:{line:1,column:51774},end:{line:1,column:51792}},"1249":{start:{line:1,column:51816},end:{line:1,column:51837}},"1250":{start:{line:1,column:51828},end:{line:1,column:51836}},"1251":{start:{line:1,column:51838},end:{line:1,column:51879}},"1252":{start:{line:1,column:51867},end:{line:1,column:51875}},"1253":{start:{line:1,column:51887},end:{line:1,column:51981}},"1254":{start:{line:1,column:51997},end:{line:1,column:52194}},"1255":{start:{line:1,column:52228},end:{line:1,column:52237}},"1256":{start:{line:1,column:52238},end:{line:1,column:52264}},"1257":{start:{line:1,column:52252},end:{line:1,column:52264}},"1258":{start:{line:1,column:52270},end:{line:1,column:52278}},"1259":{start:{line:1,column:52279},end:{line:1,column:52341}},"1260":{start:{line:1,column:52322},end:{line:1,column:52339}},"1261":{start:{line:1,column:52361},end:{line:1,column:52538}},"1262":{start:{line:1,column:52376},end:{line:1,column:52538}},"1263":{start:{line:1,column:52544},end:{line:1,column:52566}},"1264":{start:{line:1,column:52567},end:{line:1,column:52589}},"1265":{start:{line:1,column:52573},end:{line:1,column:52589}},"1266":{start:{line:1,column:52595},end:{line:1,column:52597}},"1267":{start:{line:1,column:52598},end:{line:1,column:52662}},"1268":{start:{line:1,column:52648},end:{line:1,column:52659}},"1269":{start:{line:1,column:52668},end:{line:1,column:52743}},"1270":{start:{line:1,column:52744},end:{line:1,column:52888}},"1271":{start:{line:1,column:52910},end:{line:1,column:53162}},"1272":{start:{line:1,column:53190},end:{line:1,column:53192}},"1273":{start:{line:1,column:53193},end:{line:1,column:53261}},"1274":{start:{line:1,column:53208},end:{line:1,column:53261}},"1275":{start:{line:1,column:53238},end:{line:1,column:53250}},"1276":{start:{line:1,column:53251},end:{line:1,column:53260}},"1277":{start:{line:1,column:53261},end:{line:1,column:53280}},"1278":{start:{line:1,column:53304},end:{line:1,column:53306}},"1279":{start:{line:1,column:53307},end:{line:1,column:53314}},"1280":{start:{line:1,column:53314},end:{line:1,column:53384}},"1281":{start:{line:1,column:53329},end:{line:1,column:53384}},"1282":{start:{line:1,column:53361},end:{line:1,column:53373}},"1283":{start:{line:1,column:53374},end:{line:1,column:53383}},"1284":{start:{line:1,column:53384},end:{line:1,column:53392}},"1285":{start:{line:1,column:53412},end:{line:1,column:53449}},"1286":{start:{line:1,column:53429},end:{line:1,column:53448}},"1287":{start:{line:1,column:53469},end:{line:1,column:53496}},"1288":{start:{line:1,column:53486},end:{line:1,column:53495}},"1289":{start:{line:1,column:53516},end:{line:1,column:53588}},"1290":{start:{line:1,column:53608},end:{line:1,column:53643}},"1291":{start:{line:1,column:53651},end:{line:1,column:53658}},"1292":{start:{line:1,column:53706},end:{line:1,column:53748}},"1293":{start:{line:1,column:53756},end:{line:1,column:53758}},"1294":{start:{line:1,column:53762},end:{line:1,column:58215}},"1295":{start:{line:1,column:53912},end:{line:1,column:53913}},"1296":{start:{line:1,column:53929},end:{line:1,column:53931}},"1297":{start:{line:1,column:53961},end:{line:1,column:54183}},"1298":{start:{line:1,column:54200},end:{line:1,column:54240}},"1299":{start:{line:1,column:54265},end:{line:1,column:54317}},"1300":{start:{line:1,column:54346},end:{line:1,column:54365}},"1301":{start:{line:1,column:54368},end:{line:1,column:54378}},"1302":{start:{line:1,column:54381},end:{line:1,column:54393}},"1303":{start:{line:1,column:54396},end:{line:1,column:54451}},"1304":{start:{line:1,column:54452},end:{line:1,column:54552}},"1305":{start:{line:1,column:54574},end:{line:1,column:54735}},"1306":{start:{line:1,column:54736},end:{line:1,column:54965}},"1307":{start:{line:1,column:54740},end:{line:1,column:54835}},"1308":{start:{line:1,column:54845},end:{line:1,column:54921}},"1309":{start:{line:1,column:54864},end:{line:1,column:54921}},"1310":{start:{line:1,column:54921},end:{line:1,column:54964}},"1311":{start:{line:1,column:55003},end:{line:1,column:55082}},"1312":{start:{line:1,column:55045},end:{line:1,column:55082}},"1313":{start:{line:1,column:55088},end:{line:1,column:55138}},"1314":{start:{line:1,column:55139},end:{line:1,column:55167}},"1315":{start:{line:1,column:55205},end:{line:1,column:55207}},"1316":{start:{line:1,column:55208},end:{line:1,column:55282}},"1317":{start:{line:1,column:55245},end:{line:1,column:55282}},"1318":{start:{line:1,column:55288},end:{line:1,column:55290}},"1319":{start:{line:1,column:55291},end:{line:1,column:55394}},"1320":{start:{line:1,column:55313},end:{line:1,column:55326}},"1321":{start:{line:1,column:55329},end:{line:1,column:55336}},"1322":{start:{line:1,column:55339},end:{line:1,column:55380}},"1323":{start:{line:1,column:55381},end:{line:1,column:55393}},"1324":{start:{line:1,column:55400},end:{line:1,column:55405}},"1325":{start:{line:1,column:55406},end:{line:1,column:55420}},"1326":{start:{line:1,column:55457},end:{line:1,column:55602}},"1327":{start:{line:1,column:55472},end:{line:1,column:55602}},"1328":{start:{line:1,column:55476},end:{line:1,column:55550}},"1329":{start:{line:1,column:55560},end:{line:1,column:55594}},"1330":{start:{line:1,column:55585},end:{line:1,column:55594}},"1331":{start:{line:1,column:55594},end:{line:1,column:55601}},"1332":{start:{line:1,column:55602},end:{line:1,column:55629}},"1333":{start:{line:1,column:55615},end:{line:1,column:55629}},"1334":{start:{line:1,column:55629},end:{line:1,column:55643}},"1335":{start:{line:1,column:55694},end:{line:1,column:55742}},"1336":{start:{line:1,column:55727},end:{line:1,column:55742}},"1337":{start:{line:1,column:55742},end:{line:1,column:55817}},"1338":{start:{line:1,column:55767},end:{line:1,column:55817}},"1339":{start:{line:1,column:55817},end:{line:1,column:55909}},"1340":{start:{line:1,column:55843},end:{line:1,column:55909}},"1341":{start:{line:1,column:55909},end:{line:1,column:55923}},"1342":{start:{line:1,column:56077},end:{line:1,column:56086}},"1343":{start:{line:1,column:56087},end:{line:1,column:56108}},"1344":{start:{line:1,column:56093},end:{line:1,column:56108}},"1345":{start:{line:1,column:56108},end:{line:1,column:56249}},"1346":{start:{line:1,column:56256},end:{line:1,column:56286}},"1347":{start:{line:1,column:56287},end:{line:1,column:56356}},"1348":{start:{line:1,column:56315},end:{line:1,column:56356}},"1349":{start:{line:1,column:56362},end:{line:1,column:56436}},"1350":{start:{line:1,column:56440},end:{line:1,column:56489}},"1351":{start:{line:1,column:56490},end:{line:1,column:56543}},"1352":{start:{line:1,column:56576},end:{line:1,column:56714}},"1353":{start:{line:1,column:56717},end:{line:1,column:56755}},"1354":{start:{line:1,column:56756},end:{line:1,column:56826}},"1355":{start:{line:1,column:56871},end:{line:1,column:56940}},"1356":{start:{line:1,column:56899},end:{line:1,column:56940}},"1357":{start:{line:1,column:56946},end:{line:1,column:57010}},"1358":{start:{line:1,column:56950},end:{line:1,column:57010}},"1359":{start:{line:1,column:57013},end:{line:1,column:57072}},"1360":{start:{line:1,column:57073},end:{line:1,column:57134}},"1361":{start:{line:1,column:57119},end:{line:1,column:57134}},"1362":{start:{line:1,column:57134},end:{line:1,column:57151}},"1363":{start:{line:1,column:57165},end:{line:1,column:57197}},"1364":{start:{line:1,column:57200},end:{line:1,column:57220}},"1365":{start:{line:1,column:57276},end:{line:1,column:57277}},"1366":{start:{line:1,column:57280},end:{line:1,column:57310}},"1367":{start:{line:1,column:57347},end:{line:1,column:57359}},"1368":{start:{line:1,column:57360},end:{line:1,column:57459}},"1369":{start:{line:1,column:57403},end:{line:1,column:57439}},"1370":{start:{line:1,column:57440},end:{line:1,column:57458}},"1371":{start:{line:1,column:57459},end:{line:1,column:57509}},"1372":{start:{line:1,column:57490},end:{line:1,column:57509}},"1373":{start:{line:1,column:57516},end:{line:1,column:57524}},"1374":{start:{line:1,column:57528},end:{line:1,column:57576}},"1375":{start:{line:1,column:57577},end:{line:1,column:57616}},"1376":{start:{line:1,column:57645},end:{line:1,column:57696}},"1377":{start:{line:1,column:57659},end:{line:1,column:57696}},"1378":{start:{line:1,column:57696},end:{line:1,column:58185}},"1379":{start:{line:1,column:57715},end:{line:1,column:57898}},"1380":{start:{line:1,column:57750},end:{line:1,column:57774}},"1381":{start:{line:1,column:57775},end:{line:1,column:57897}},"1382":{start:{line:1,column:57898},end:{line:1,column:57967}},"1383":{start:{line:1,column:57926},end:{line:1,column:57967}},"1384":{start:{line:1,column:57967},end:{line:1,column:58173}},"1385":{start:{line:1,column:58033},end:{line:1,column:58074}},"1386":{start:{line:1,column:58075},end:{line:1,column:58172}},"1387":{start:{line:1,column:58173},end:{line:1,column:58184}},"1388":{start:{line:1,column:58185},end:{line:1,column:58213}},"1389":{start:{line:1,column:58231},end:{line:1,column:58333}},"1390":{start:{line:1,column:58245},end:{line:1,column:58332}},"1391":{start:{line:1,column:58355},end:{line:1,column:58374}},"1392":{start:{line:1,column:58375},end:{line:1,column:58396}},"1393":{start:{line:1,column:58418},end:{line:1,column:58420}},"1394":{start:{line:1,column:58423},end:{line:1,column:58430}},"1395":{start:{line:1,column:58431},end:{line:1,column:58599}},"1396":{start:{line:1,column:58447},end:{line:1,column:58477}},"1397":{start:{line:1,column:58458},end:{line:1,column:58468}},"1398":{start:{line:1,column:58468},end:{line:1,column:58476}},"1399":{start:{line:1,column:58483},end:{line:1,column:58535}},"1400":{start:{line:1,column:58493},end:{line:1,column:58534}},"1401":{start:{line:1,column:58536},end:{line:1,column:58598}},"1402":{start:{line:1,column:58599},end:{line:1,column:58661}},"1403":{start:{line:1,column:58621},end:{line:1,column:58635}},"1404":{start:{line:1,column:58636},end:{line:1,column:58660}},"1405":{start:{line:1,column:58661},end:{line:1,column:58690}},"1406":{start:{line:1,column:58680},end:{line:1,column:58689}},"1407":{start:{line:1,column:58706},end:{line:1,column:58723}},"1408":{start:{line:1,column:58739},end:{line:1,column:58759}},"1409":{start:{line:1,column:58787},end:{line:1,column:58923}},"1410":{start:{line:1,column:58826},end:{line:1,column:58864}},"1411":{start:{line:1,column:58865},end:{line:1,column:58921}},"1412":{start:{line:1,column:58939},end:{line:1,column:59267}},"1413":{start:{line:1,column:59003},end:{line:1,column:59004}},"1414":{start:{line:1,column:59005},end:{line:1,column:59030}},"1415":{start:{line:1,column:59018},end:{line:1,column:59030}},"1416":{start:{line:1,column:59036},end:{line:1,column:59062}},"1417":{start:{line:1,column:59053},end:{line:1,column:59060}},"1418":{start:{line:1,column:59065},end:{line:1,column:59072}},"1419":{start:{line:1,column:59073},end:{line:1,column:59129}},"1420":{start:{line:1,column:59088},end:{line:1,column:59129}},"1421":{start:{line:1,column:59101},end:{line:1,column:59129}},"1422":{start:{line:1,column:59120},end:{line:1,column:59129}},"1423":{start:{line:1,column:59135},end:{line:1,column:59136}},"1424":{start:{line:1,column:59137},end:{line:1,column:59265}},"1425":{start:{line:1,column:59160},end:{line:1,column:59222}},"1426":{start:{line:1,column:59230},end:{line:1,column:59233}},"1427":{start:{line:1,column:59246},end:{line:1,column:59263}},"1428":{start:{line:1,column:59289},end:{line:1,column:59320}},"1429":{start:{line:1,column:59307},end:{line:1,column:59312}},"1430":{start:{line:1,column:59321},end:{line:1,column:59335}},"1431":{start:{line:1,column:59361},end:{line:1,column:59374}},"1432":{start:{line:1,column:59377},end:{line:1,column:59387}},"1433":{start:{line:1,column:59388},end:{line:1,column:59551}},"1434":{start:{line:1,column:59446},end:{line:1,column:59549}},"1435":{start:{line:1,column:59499},end:{line:1,column:59546}},"1436":{start:{line:1,column:59577},end:{line:1,column:59582}},"1437":{start:{line:1,column:59583},end:{line:1,column:59612}},"1438":{start:{line:1,column:59599},end:{line:1,column:59612}},"1439":{start:{line:1,column:59618},end:{line:1,column:59620}},"1440":{start:{line:1,column:59621},end:{line:1,column:59755}},"1441":{start:{line:1,column:59643},end:{line:1,column:59717}},"1442":{start:{line:1,column:59671},end:{line:1,column:59708}},"1443":{start:{line:1,column:59690},end:{line:1,column:59708}},"1444":{start:{line:1,column:59708},end:{line:1,column:59714}},"1445":{start:{line:1,column:59731},end:{line:1,column:59732}},"1446":{start:{line:1,column:59740},end:{line:1,column:59753}},"1447":{start:{line:1,column:59781},end:{line:1,column:59803}},"1448":{start:{line:1,column:59806},end:{line:1,column:59813}},"1449":{start:{line:1,column:59816},end:{line:1,column:59856}},"1450":{start:{line:1,column:59849},end:{line:1,column:59855}},"1451":{start:{line:1,column:59857},end:{line:1,column:59869}},"1452":{start:{line:1,column:59885},end:{line:1,column:59944}},"1453":{start:{line:1,column:59904},end:{line:1,column:59908}},"1454":{start:{line:1,column:59909},end:{line:1,column:59942}},"1455":{start:{line:1,column:59934},end:{line:1,column:59935}},"1456":{start:{line:1,column:59952},end:{line:1,column:60266}},"1457":{start:{line:1,column:59988},end:{line:1,column:59994}},"1458":{start:{line:1,column:59995},end:{line:1,column:60085}},"1459":{start:{line:1,column:60012},end:{line:1,column:60085}},"1460":{start:{line:1,column:60071},end:{line:1,column:60083}},"1461":{start:{line:1,column:60085},end:{line:1,column:60093}},"1462":{start:{line:1,column:60122},end:{line:1,column:60139}},"1463":{start:{line:1,column:60157},end:{line:1,column:60186}},"1464":{start:{line:1,column:60169},end:{line:1,column:60185}},"1465":{start:{line:1,column:60205},end:{line:1,column:60253}},"1466":{start:{line:1,column:60228},end:{line:1,column:60233}},"1467":{start:{line:1,column:60254},end:{line:1,column:60262}},"1468":{start:{line:1,column:60270},end:{line:1,column:60547}},"1469":{start:{line:1,column:60316},end:{line:1,column:60336}},"1470":{start:{line:1,column:60358},end:{line:1,column:60376}},"1471":{start:{line:1,column:60377},end:{line:1,column:60411}},"1472":{start:{line:1,column:60429},end:{line:1,column:60465}},"1473":{start:{line:1,column:60441},end:{line:1,column:60464}},"1474":{start:{line:1,column:60484},end:{line:1,column:60534}},"1475":{start:{line:1,column:60535},end:{line:1,column:60543}},"1476":{start:{line:1,column:60551},end:{line:1,column:60579}},"1477":{start:{line:1,column:60574},end:{line:1,column:60576}},"1478":{start:{line:1,column:60583},end:{line:1,column:60592}},"1479":{start:{line:1,column:60596},end:{line:1,column:61799}},"1480":{start:{line:1,column:60627},end:{line:1,column:60638}},"1481":{start:{line:1,column:60655},end:{line:1,column:60666}},"1482":{start:{line:1,column:60714},end:{line:1,column:60719}},"1483":{start:{line:1,column:60745},end:{line:1,column:60813}},"1484":{start:{line:1,column:60777},end:{line:1,column:60813}},"1485":{start:{line:1,column:60813},end:{line:1,column:60878}},"1486":{start:{line:1,column:60835},end:{line:1,column:60878}},"1487":{start:{line:1,column:60878},end:{line:1,column:60932}},"1488":{start:{line:1,column:60938},end:{line:1,column:61138}},"1489":{start:{line:1,column:60949},end:{line:1,column:61134}},"1490":{start:{line:1,column:60959},end:{line:1,column:60995}},"1491":{start:{line:1,column:60976},end:{line:1,column:60993}},"1492":{start:{line:1,column:60998},end:{line:1,column:61013}},"1493":{start:{line:1,column:61014},end:{line:1,column:61093}},"1494":{start:{line:1,column:61102},end:{line:1,column:61133}},"1495":{start:{line:1,column:61139},end:{line:1,column:61178}},"1496":{start:{line:1,column:61197},end:{line:1,column:61263}},"1497":{start:{line:1,column:61228},end:{line:1,column:61263}},"1498":{start:{line:1,column:61263},end:{line:1,column:61358}},"1499":{start:{line:1,column:61282},end:{line:1,column:61358}},"1500":{start:{line:1,column:61358},end:{line:1,column:61412}},"1501":{start:{line:1,column:61418},end:{line:1,column:61631}},"1502":{start:{line:1,column:61429},end:{line:1,column:61627}},"1503":{start:{line:1,column:61439},end:{line:1,column:61489}},"1504":{start:{line:1,column:61490},end:{line:1,column:61587}},"1505":{start:{line:1,column:61596},end:{line:1,column:61626}},"1506":{start:{line:1,column:61632},end:{line:1,column:61670}},"1507":{start:{line:1,column:61688},end:{line:1,column:61717}},"1508":{start:{line:1,column:61700},end:{line:1,column:61716}},"1509":{start:{line:1,column:61736},end:{line:1,column:61786}},"1510":{start:{line:1,column:61787},end:{line:1,column:61795}},"1511":{start:{line:1,column:61833},end:{line:1,column:61868}},"1512":{start:{line:1,column:61850},end:{line:1,column:61866}},"1513":{start:{line:1,column:61871},end:{line:1,column:61886}},"1514":{start:{line:1,column:61889},end:{line:1,column:61967}},"1515":{start:{line:1,column:61977},end:{line:1,column:61979}},"1516":{start:{line:1,column:61982},end:{line:1,column:62129}},"1517":{start:{line:1,column:62145},end:{line:1,column:62188}},"1518":{start:{line:1,column:62204},end:{line:1,column:62228}},"1519":{start:{line:1,column:62250},end:{line:1,column:62258}},"1520":{start:{line:1,column:62266},end:{line:1,column:62406}},"1521":{start:{line:1,column:62297},end:{line:1,column:62326}},"1522":{start:{line:1,column:62309},end:{line:1,column:62325}},"1523":{start:{line:1,column:62345},end:{line:1,column:62393}},"1524":{start:{line:1,column:62368},end:{line:1,column:62373}},"1525":{start:{line:1,column:62394},end:{line:1,column:62402}},"1526":{start:{line:1,column:62410},end:{line:1,column:62621}},"1527":{start:{line:1,column:62444},end:{line:1,column:62452}},"1528":{start:{line:1,column:62464},end:{line:1,column:62472}},"1529":{start:{line:1,column:62484},end:{line:1,column:62492}},"1530":{start:{line:1,column:62510},end:{line:1,column:62539}},"1531":{start:{line:1,column:62522},end:{line:1,column:62538}},"1532":{start:{line:1,column:62558},end:{line:1,column:62608}},"1533":{start:{line:1,column:62609},end:{line:1,column:62617}},"1534":{start:{line:1,column:62625},end:{line:1,column:62634}},"1535":{start:{line:1,column:62638},end:{line:1,column:62647}},"1536":{start:{line:1,column:62673},end:{line:1,column:62682}},"1537":{start:{line:1,column:62685},end:{line:1,column:62693}},"1538":{start:{line:1,column:62694},end:{line:1,column:62803}},"1539":{start:{line:1,column:62742},end:{line:1,column:62803}},"1540":{start:{line:1,column:62788},end:{line:1,column:62801}},"1541":{start:{line:1,column:62811},end:{line:1,column:62832}},"1542":{start:{line:1,column:62827},end:{line:1,column:62830}},"1543":{start:{line:1,column:62835},end:{line:1,column:62873}},"1544":{start:{line:1,column:62862},end:{line:1,column:62871}},"1545":{start:{line:1,column:62874},end:{line:1,column:62953}},"1546":{start:{line:1,column:62984},end:{line:1,column:62985}},"1547":{start:{line:1,column:62986},end:{line:1,column:63036}},"1548":{start:{line:1,column:63004},end:{line:1,column:63033}},"1549":{start:{line:1,column:63052},end:{line:1,column:63118}},"1550":{start:{line:1,column:63075},end:{line:1,column:63116}},"1551":{start:{line:1,column:63088},end:{line:1,column:63101}},"1552":{start:{line:1,column:63126},end:{line:1,column:63132}},"1553":{start:{line:1,column:63136},end:{line:1,column:63145}},"1554":{start:{line:1,column:63149},end:{line:1,column:71289}},"1555":{start:{line:1,column:63181},end:{line:1,column:63203}},"1556":{start:{line:1,column:63199},end:{line:1,column:63201}},"1557":{start:{line:1,column:63222},end:{line:1,column:63226}},"1558":{start:{line:1,column:63252},end:{line:1,column:63259}},"1559":{start:{line:1,column:63267},end:{line:1,column:63273}},"1560":{start:{line:1,column:63306},end:{line:1,column:63312}},"1561":{start:{line:1,column:63326},end:{line:1,column:63331}},"1562":{start:{line:1,column:63352},end:{line:1,column:63356}},"1563":{start:{line:1,column:63368},end:{line:1,column:63373}},"1564":{start:{line:1,column:63388},end:{line:1,column:63393}},"1565":{start:{line:1,column:63407},end:{line:1,column:63412}},"1566":{start:{line:1,column:63422},end:{line:1,column:63427}},"1567":{start:{line:1,column:63448},end:{line:1,column:63474}},"1568":{start:{line:1,column:63489},end:{line:1,column:63494}},"1569":{start:{line:1,column:63503},end:{line:1,column:63526}},"1570":{start:{line:1,column:63553},end:{line:1,column:63604}},"1571":{start:{line:1,column:63625},end:{line:1,column:63630}},"1572":{start:{line:1,column:63652},end:{line:1,column:63671}},"1573":{start:{line:1,column:63695},end:{line:1,column:63714}},"1574":{start:{line:1,column:63728},end:{line:1,column:63729}},"1575":{start:{line:1,column:63759},end:{line:1,column:63787}},"1576":{start:{line:1,column:63819},end:{line:1,column:63832}},"1577":{start:{line:1,column:63823},end:{line:1,column:63832}},"1578":{start:{line:1,column:63851},end:{line:1,column:63855}},"1579":{start:{line:1,column:63866},end:{line:1,column:63868}},"1580":{start:{line:1,column:63889},end:{line:1,column:63919}},"1581":{start:{line:1,column:63892},end:{line:1,column:63919}},"1582":{start:{line:1,column:63922},end:{line:1,column:63952}},"1583":{start:{line:1,column:63925},end:{line:1,column:63952}},"1584":{start:{line:1,column:63953},end:{line:1,column:64081}},"1585":{start:{line:1,column:64062},end:{line:1,column:64079}},"1586":{start:{line:1,column:64093},end:{line:1,column:64121}},"1587":{start:{line:1,column:64155},end:{line:1,column:64174}},"1588":{start:{line:1,column:64175},end:{line:1,column:64446}},"1589":{start:{line:1,column:64182},end:{line:1,column:64444}},"1590":{start:{line:1,column:64467},end:{line:1,column:70647}},"1591":{start:{line:1,column:64530},end:{line:1,column:64538}},"1592":{start:{line:1,column:64552},end:{line:1,column:64554}},"1593":{start:{line:1,column:64557},end:{line:1,column:64576}},"1594":{start:{line:1,column:64579},end:{line:1,column:64620}},"1595":{start:{line:1,column:64583},end:{line:1,column:64620}},"1596":{start:{line:1,column:64621},end:{line:1,column:70644}},"1597":{start:{line:1,column:64644},end:{line:1,column:64745}},"1598":{start:{line:1,column:64670},end:{line:1,column:64745}},"1599":{start:{line:1,column:64745},end:{line:1,column:64770}},"1600":{start:{line:1,column:64776},end:{line:1,column:64807}},"1601":{start:{line:1,column:64808},end:{line:1,column:65224}},"1602":{start:{line:1,column:65118},end:{line:1,column:65127}},"1603":{start:{line:1,column:65230},end:{line:1,column:65302}},"1604":{start:{line:1,column:65305},end:{line:1,column:65356}},"1605":{start:{line:1,column:65357},end:{line:1,column:65500}},"1606":{start:{line:1,column:65377},end:{line:1,column:65500}},"1607":{start:{line:1,column:65500},end:{line:1,column:66277}},"1608":{start:{line:1,column:65555},end:{line:1,column:66277}},"1609":{start:{line:1,column:65578},end:{line:1,column:65724}},"1610":{start:{line:1,column:65871},end:{line:1,column:66038}},"1611":{start:{line:1,column:65979},end:{line:1,column:66011}},"1612":{start:{line:1,column:66046},end:{line:1,column:66114}},"1613":{start:{line:1,column:66111},end:{line:1,column:66112}},"1614":{start:{line:1,column:66129},end:{line:1,column:66253}},"1615":{start:{line:1,column:66254},end:{line:1,column:66273}},"1616":{start:{line:1,column:66277},end:{line:1,column:66881}},"1617":{start:{line:1,column:66404},end:{line:1,column:66405}},"1618":{start:{line:1,column:66409},end:{line:1,column:66455}},"1619":{start:{line:1,column:66456},end:{line:1,column:66477}},"1620":{start:{line:1,column:66484},end:{line:1,column:66544}},"1621":{start:{line:1,column:66545},end:{line:1,column:66743}},"1622":{start:{line:1,column:66720},end:{line:1,column:66736}},"1623":{start:{line:1,column:66749},end:{line:1,column:66881}},"1624":{start:{line:1,column:66896},end:{line:1,column:67020}},"1625":{start:{line:1,column:67021},end:{line:1,column:67151}},"1626":{start:{line:1,column:67160},end:{line:1,column:67179}},"1627":{start:{line:1,column:67187},end:{line:1,column:67313}},"1628":{start:{line:1,column:67269},end:{line:1,column:67313}},"1629":{start:{line:1,column:67319},end:{line:1,column:67460}},"1630":{start:{line:1,column:67461},end:{line:1,column:67498}},"1631":{start:{line:1,column:67489},end:{line:1,column:67498}},"1632":{start:{line:1,column:67498},end:{line:1,column:67580}},"1633":{start:{line:1,column:67517},end:{line:1,column:67580}},"1634":{start:{line:1,column:67580},end:{line:1,column:67633}},"1635":{start:{line:1,column:67621},end:{line:1,column:67633}},"1636":{start:{line:1,column:67639},end:{line:1,column:67763}},"1637":{start:{line:1,column:67764},end:{line:1,column:67801}},"1638":{start:{line:1,column:67792},end:{line:1,column:67801}},"1639":{start:{line:1,column:67807},end:{line:1,column:67809}},"1640":{start:{line:1,column:67810},end:{line:1,column:68111}},"1641":{start:{line:1,column:67875},end:{line:1,column:67880}},"1642":{start:{line:1,column:67886},end:{line:1,column:68010}},"1643":{start:{line:1,column:68011},end:{line:1,column:68030}},"1644":{start:{line:1,column:68046},end:{line:1,column:68107}},"1645":{start:{line:1,column:68127},end:{line:1,column:68419}},"1646":{start:{line:1,column:68137},end:{line:1,column:68139}},"1647":{start:{line:1,column:68140},end:{line:1,column:68370}},"1648":{start:{line:1,column:68175},end:{line:1,column:68219}},"1649":{start:{line:1,column:68224},end:{line:1,column:68370}},"1650":{start:{line:1,column:68263},end:{line:1,column:68285}},"1651":{start:{line:1,column:68286},end:{line:1,column:68369}},"1652":{start:{line:1,column:68352},end:{line:1,column:68366}},"1653":{start:{line:1,column:68370},end:{line:1,column:68410}},"1654":{start:{line:1,column:68394},end:{line:1,column:68410}},"1655":{start:{line:1,column:68410},end:{line:1,column:68418}},"1656":{start:{line:1,column:68422},end:{line:1,column:68446}},"1657":{start:{line:1,column:68447},end:{line:1,column:68501}},"1658":{start:{line:1,column:68498},end:{line:1,column:68499}},"1659":{start:{line:1,column:68511},end:{line:1,column:68536}},"1660":{start:{line:1,column:68585},end:{line:1,column:68586}},"1661":{start:{line:1,column:68589},end:{line:1,column:68656}},"1662":{start:{line:1,column:68657},end:{line:1,column:68690}},"1663":{start:{line:1,column:68682},end:{line:1,column:68683}},"1664":{start:{line:1,column:68711},end:{line:1,column:68773}},"1665":{start:{line:1,column:68774},end:{line:1,column:68919}},"1666":{start:{line:1,column:68868},end:{line:1,column:68891}},"1667":{start:{line:1,column:68925},end:{line:1,column:68963}},"1668":{start:{line:1,column:68964},end:{line:1,column:68994}},"1669":{start:{line:1,column:68986},end:{line:1,column:68987}},"1670":{start:{line:1,column:69003},end:{line:1,column:69471}},"1671":{start:{line:1,column:69075},end:{line:1,column:69094}},"1672":{start:{line:1,column:69194},end:{line:1,column:69206}},"1673":{start:{line:1,column:69501},end:{line:1,column:69525}},"1674":{start:{line:1,column:69534},end:{line:1,column:69597}},"1675":{start:{line:1,column:69619},end:{line:1,column:69623}},"1676":{start:{line:1,column:69678},end:{line:1,column:69685}},"1677":{start:{line:1,column:69698},end:{line:1,column:69874}},"1678":{start:{line:1,column:69884},end:{line:1,column:69930}},"1679":{start:{line:1,column:69907},end:{line:1,column:69930}},"1680":{start:{line:1,column:69930},end:{line:1,column:70633}},"1681":{start:{line:1,column:69939},end:{line:1,column:70123}},"1682":{start:{line:1,column:70134},end:{line:1,column:70218}},"1683":{start:{line:1,column:70219},end:{line:1,column:70632}},"1684":{start:{line:1,column:70229},end:{line:1,column:70293}},"1685":{start:{line:1,column:70260},end:{line:1,column:70292}},"1686":{start:{line:1,column:70294},end:{line:1,column:70551}},"1687":{start:{line:1,column:70348},end:{line:1,column:70372}},"1688":{start:{line:1,column:70373},end:{line:1,column:70518}},"1689":{start:{line:1,column:70524},end:{line:1,column:70551}},"1690":{start:{line:1,column:70561},end:{line:1,column:70631}},"1691":{start:{line:1,column:70633},end:{line:1,column:70641}},"1692":{start:{line:1,column:70688},end:{line:1,column:70748}},"1693":{start:{line:1,column:70749},end:{line:1,column:70782}},"1694":{start:{line:1,column:70809},end:{line:1,column:70915}},"1695":{start:{line:1,column:70944},end:{line:1,column:71026}},"1696":{start:{line:1,column:71029},end:{line:1,column:71054}},"1697":{start:{line:1,column:71057},end:{line:1,column:71093}},"1698":{start:{line:1,column:71094},end:{line:1,column:71160}},"1699":{start:{line:1,column:71178},end:{line:1,column:71207}},"1700":{start:{line:1,column:71190},end:{line:1,column:71206}},"1701":{start:{line:1,column:71226},end:{line:1,column:71276}},"1702":{start:{line:1,column:71277},end:{line:1,column:71285}},"1703":{start:{line:1,column:71305},end:{line:1,column:71318}},"1704":{start:{line:1,column:71326},end:{line:1,column:71335}},"1705":{start:{line:1,column:71343},end:{line:1,column:71483}},"1706":{start:{line:1,column:71374},end:{line:1,column:71403}},"1707":{start:{line:1,column:71386},end:{line:1,column:71402}},"1708":{start:{line:1,column:71422},end:{line:1,column:71470}},"1709":{start:{line:1,column:71445},end:{line:1,column:71450}},"1710":{start:{line:1,column:71471},end:{line:1,column:71479}},"1711":{start:{line:1,column:71487},end:{line:1,column:71673}},"1712":{start:{line:1,column:71509},end:{line:1,column:71517}},"1713":{start:{line:1,column:71546},end:{line:1,column:71554}},"1714":{start:{line:1,column:71567},end:{line:1,column:71578}},"1715":{start:{line:1,column:71601},end:{line:1,column:71637}},"1716":{start:{line:1,column:71663},end:{line:1,column:71671}},"1717":{start:{line:1,column:71677},end:{line:1,column:71863}},"1718":{start:{line:1,column:71719},end:{line:1,column:71781}},"1719":{start:{line:1,column:71731},end:{line:1,column:71777}},"1720":{start:{line:1,column:71750},end:{line:1,column:71776}},"1721":{start:{line:1,column:71800},end:{line:1,column:71850}},"1722":{start:{line:1,column:71851},end:{line:1,column:71859}},"1723":{start:{line:1,column:71867},end:{line:1,column:73131}},"1724":{start:{line:1,column:71895},end:{line:1,column:71900}},"1725":{start:{line:1,column:71909},end:{line:1,column:71932}},"1726":{start:{line:1,column:71962},end:{line:1,column:72014}},"1727":{start:{line:1,column:72024},end:{line:1,column:72029}},"1728":{start:{line:1,column:72050},end:{line:1,column:72055}},"1729":{start:{line:1,column:72074},end:{line:1,column:72116}},"1730":{start:{line:1,column:72132},end:{line:1,column:72137}},"1731":{start:{line:1,column:72158},end:{line:1,column:72184}},"1732":{start:{line:1,column:72196},end:{line:1,column:72215}},"1733":{start:{line:1,column:72232},end:{line:1,column:72254}},"1734":{start:{line:1,column:72325},end:{line:1,column:72373}},"1735":{start:{line:1,column:72376},end:{line:1,column:72380}},"1736":{start:{line:1,column:72381},end:{line:1,column:72436}},"1737":{start:{line:1,column:72501},end:{line:1,column:72618}},"1738":{start:{line:1,column:72631},end:{line:1,column:72644}},"1739":{start:{line:1,column:72662},end:{line:1,column:72685}},"1740":{start:{line:1,column:72700},end:{line:1,column:72725}},"1741":{start:{line:1,column:72745},end:{line:1,column:72770}},"1742":{start:{line:1,column:72792},end:{line:1,column:72836}},"1743":{start:{line:1,column:72858},end:{line:1,column:72956}},"1744":{start:{line:1,column:72973},end:{line:1,column:73004}},"1745":{start:{line:1,column:73022},end:{line:1,column:73051}},"1746":{start:{line:1,column:73034},end:{line:1,column:73050}},"1747":{start:{line:1,column:73070},end:{line:1,column:73118}},"1748":{start:{line:1,column:73093},end:{line:1,column:73098}},"1749":{start:{line:1,column:73119},end:{line:1,column:73127}},"1750":{start:{line:1,column:73135},end:{line:1,column:75463}},"1751":{start:{line:1,column:73174},end:{line:1,column:73175}},"1752":{start:{line:1,column:73193},end:{line:1,column:73195}},"1753":{start:{line:1,column:73216},end:{line:1,column:73349}},"1754":{start:{line:1,column:73397},end:{line:1,column:73516}},"1755":{start:{line:1,column:73432},end:{line:1,column:73514}},"1756":{start:{line:1,column:73469},end:{line:1,column:73512}},"1757":{start:{line:1,column:73540},end:{line:1,column:74079}},"1758":{start:{line:1,column:74139},end:{line:1,column:74140}},"1759":{start:{line:1,column:74141},end:{line:1,column:74389}},"1760":{start:{line:1,column:74192},end:{line:1,column:74210}},"1761":{start:{line:1,column:74213},end:{line:1,column:74255}},"1762":{start:{line:1,column:74256},end:{line:1,column:74290}},"1763":{start:{line:1,column:74302},end:{line:1,column:74363}},"1764":{start:{line:1,column:74364},end:{line:1,column:74388}},"1765":{start:{line:1,column:74413},end:{line:1,column:74767}},"1766":{start:{line:1,column:74470},end:{line:1,column:74488}},"1767":{start:{line:1,column:74491},end:{line:1,column:74511}},"1768":{start:{line:1,column:74512},end:{line:1,column:74651}},"1769":{start:{line:1,column:74657},end:{line:1,column:74767}},"1770":{start:{line:1,column:74801},end:{line:1,column:74987}},"1771":{start:{line:1,column:75015},end:{line:1,column:75165}},"1772":{start:{line:1,column:75193},end:{line:1,column:75301}},"1773":{start:{line:1,column:75319},end:{line:1,column:75381}},"1774":{start:{line:1,column:75331},end:{line:1,column:75377}},"1775":{start:{line:1,column:75350},end:{line:1,column:75376}},"1776":{start:{line:1,column:75400},end:{line:1,column:75450}},"1777":{start:{line:1,column:75451},end:{line:1,column:75459}},"1778":{start:{line:1,column:75481},end:{line:1,column:75725}},"1779":{start:{line:1,column:75500},end:{line:1,column:75563}},"1780":{start:{line:1,column:75570},end:{line:1,column:75684}},"1781":{start:{line:1,column:75691},end:{line:1,column:75696}},"1782":{start:{line:1,column:75720},end:{line:1,column:75723}},"1783":{start:{line:1,column:75732},end:{line:1,column:81098}},"1784":{start:{line:1,column:75767},end:{line:1,column:75811}},"1785":{start:{line:1,column:75829},end:{line:1,column:75869}},"1786":{start:{line:1,column:75879},end:{line:1,column:75881}},"1787":{start:{line:1,column:75930},end:{line:1,column:75935}},"1788":{start:{line:1,column:75949},end:{line:1,column:75954}},"1789":{start:{line:1,column:75963},end:{line:1,column:75986}},"1790":{start:{line:1,column:76000},end:{line:1,column:76005}},"1791":{start:{line:1,column:76024},end:{line:1,column:76066}},"1792":{start:{line:1,column:76089},end:{line:1,column:76094}},"1793":{start:{line:1,column:76109},end:{line:1,column:76114}},"1794":{start:{line:1,column:76124},end:{line:1,column:76129}},"1795":{start:{line:1,column:76150},end:{line:1,column:76155}},"1796":{start:{line:1,column:76165},end:{line:1,column:76169}},"1797":{start:{line:1,column:76178},end:{line:1,column:76184}},"1798":{start:{line:1,column:76198},end:{line:1,column:76217}},"1799":{start:{line:1,column:76236},end:{line:1,column:76277}},"1800":{start:{line:1,column:76288},end:{line:1,column:76290}},"1801":{start:{line:1,column:76310},end:{line:1,column:76315}},"1802":{start:{line:1,column:76332},end:{line:1,column:76351}},"1803":{start:{line:1,column:76372},end:{line:1,column:76414}},"1804":{start:{line:1,column:76422},end:{line:1,column:76453}},"1805":{start:{line:1,column:76483},end:{line:1,column:76504}},"1806":{start:{line:1,column:76523},end:{line:1,column:76580}},"1807":{start:{line:1,column:76595},end:{line:1,column:76734}},"1808":{start:{line:1,column:76754},end:{line:1,column:76760}},"1809":{start:{line:1,column:76797},end:{line:1,column:77748}},"1810":{start:{line:1,column:76845},end:{line:1,column:77746}},"1811":{start:{line:1,column:76855},end:{line:1,column:76899}},"1812":{start:{line:1,column:76902},end:{line:1,column:76949}},"1813":{start:{line:1,column:76950},end:{line:1,column:77642}},"1814":{start:{line:1,column:76973},end:{line:1,column:77641}},"1815":{start:{line:1,column:77091},end:{line:1,column:77109}},"1816":{start:{line:1,column:77114},end:{line:1,column:77641}},"1817":{start:{line:1,column:77132},end:{line:1,column:77227}},"1818":{start:{line:1,column:77232},end:{line:1,column:77641}},"1819":{start:{line:1,column:77258},end:{line:1,column:77285}},"1820":{start:{line:1,column:77288},end:{line:1,column:77341}},"1821":{start:{line:1,column:77344},end:{line:1,column:77549}},"1822":{start:{line:1,column:77550},end:{line:1,column:77640}},"1823":{start:{line:1,column:77642},end:{line:1,column:77669}},"1824":{start:{line:1,column:77679},end:{line:1,column:77745}},"1825":{start:{line:1,column:77749},end:{line:1,column:77779}},"1826":{start:{line:1,column:77806},end:{line:1,column:77886}},"1827":{start:{line:1,column:77907},end:{line:1,column:78100}},"1828":{start:{line:1,column:78131},end:{line:1,column:78293}},"1829":{start:{line:1,column:78252},end:{line:1,column:78291}},"1830":{start:{line:1,column:78335},end:{line:1,column:78357}},"1831":{start:{line:1,column:78358},end:{line:1,column:78467}},"1832":{start:{line:1,column:78370},end:{line:1,column:78377}},"1833":{start:{line:1,column:78378},end:{line:1,column:78466}},"1834":{start:{line:1,column:78473},end:{line:1,column:78489}},"1835":{start:{line:1,column:78490},end:{line:1,column:78574}},"1836":{start:{line:1,column:78533},end:{line:1,column:78572}},"1837":{start:{line:1,column:78585},end:{line:1,column:78630}},"1838":{start:{line:1,column:78654},end:{line:1,column:78708}},"1839":{start:{line:1,column:78740},end:{line:1,column:78798}},"1840":{start:{line:1,column:78814},end:{line:1,column:78853}},"1841":{start:{line:1,column:78868},end:{line:1,column:78882}},"1842":{start:{line:1,column:78893},end:{line:1,column:79124}},"1843":{start:{line:1,column:79231},end:{line:1,column:79232}},"1844":{start:{line:1,column:79235},end:{line:1,column:79267}},"1845":{start:{line:1,column:79270},end:{line:1,column:79274}},"1846":{start:{line:1,column:79275},end:{line:1,column:79462}},"1847":{start:{line:1,column:79338},end:{line:1,column:79383}},"1848":{start:{line:1,column:79383},end:{line:1,column:79389}},"1849":{start:{line:1,column:79404},end:{line:1,column:79438}},"1850":{start:{line:1,column:79438},end:{line:1,column:79444}},"1851":{start:{line:1,column:79452},end:{line:1,column:79461}},"1852":{start:{line:1,column:79462},end:{line:1,column:79501}},"1853":{start:{line:1,column:79507},end:{line:1,column:79649}},"1854":{start:{line:1,column:79517},end:{line:1,column:79560}},"1855":{start:{line:1,column:79561},end:{line:1,column:79568}},"1856":{start:{line:1,column:79575},end:{line:1,column:79648}},"1857":{start:{line:1,column:79649},end:{line:1,column:79692}},"1858":{start:{line:1,column:79742},end:{line:1,column:79766}},"1859":{start:{line:1,column:79769},end:{line:1,column:79818}},"1860":{start:{line:1,column:79819},end:{line:1,column:79862}},"1861":{start:{line:1,column:79901},end:{line:1,column:79959}},"1862":{start:{line:1,column:79976},end:{line:1,column:80014}},"1863":{start:{line:1,column:80027},end:{line:1,column:80140}},"1864":{start:{line:1,column:80031},end:{line:1,column:80065}},"1865":{start:{line:1,column:80072},end:{line:1,column:80139}},"1866":{start:{line:1,column:80161},end:{line:1,column:80257}},"1867":{start:{line:1,column:80222},end:{line:1,column:80257}},"1868":{start:{line:1,column:80263},end:{line:1,column:80279}},"1869":{start:{line:1,column:80280},end:{line:1,column:80314}},"1870":{start:{line:1,column:80335},end:{line:1,column:80403}},"1871":{start:{line:1,column:80379},end:{line:1,column:80398}},"1872":{start:{line:1,column:80434},end:{line:1,column:80478}},"1873":{start:{line:1,column:80451},end:{line:1,column:80478}},"1874":{start:{line:1,column:80488},end:{line:1,column:80559}},"1875":{start:{line:1,column:80549},end:{line:1,column:80556}},"1876":{start:{line:1,column:80565},end:{line:1,column:80588}},"1877":{start:{line:1,column:80589},end:{line:1,column:80969}},"1878":{start:{line:1,column:80609},end:{line:1,column:80656}},"1879":{start:{line:1,column:80628},end:{line:1,column:80655}},"1880":{start:{line:1,column:80987},end:{line:1,column:81016}},"1881":{start:{line:1,column:80999},end:{line:1,column:81015}},"1882":{start:{line:1,column:81035},end:{line:1,column:81085}},"1883":{start:{line:1,column:81086},end:{line:1,column:81094}},"1884":{start:{line:1,column:81114},end:{line:1,column:81175}},"1885":{start:{line:1,column:81124},end:{line:1,column:81125}},"1886":{start:{line:1,column:81141},end:{line:1,column:81175}},"1887":{start:{line:1,column:81155},end:{line:1,column:81175}},"1888":{start:{line:1,column:81183},end:{line:1,column:81706}},"1889":{start:{line:1,column:81204},end:{line:1,column:81208}},"1890":{start:{line:1,column:81222},end:{line:1,column:81227}},"1891":{start:{line:1,column:81237},end:{line:1,column:81242}},"1892":{start:{line:1,column:81255},end:{line:1,column:81260}},"1893":{start:{line:1,column:81266},end:{line:1,column:81271}},"1894":{start:{line:1,column:81283},end:{line:1,column:81288}},"1895":{start:{line:1,column:81303},end:{line:1,column:81392}},"1896":{start:{line:1,column:81356},end:{line:1,column:81390}},"1897":{start:{line:1,column:81444},end:{line:1,column:81481}},"1898":{start:{line:1,column:81482},end:{line:1,column:81577}},"1899":{start:{line:1,column:81595},end:{line:1,column:81624}},"1900":{start:{line:1,column:81607},end:{line:1,column:81623}},"1901":{start:{line:1,column:81643},end:{line:1,column:81693}},"1902":{start:{line:1,column:81694},end:{line:1,column:81702}},"1903":{start:{line:1,column:81710},end:{line:1,column:86070}},"1904":{start:{line:1,column:81803},end:{line:1,column:81834}},"1905":{start:{line:1,column:81848},end:{line:1,column:81934}},"1906":{start:{line:1,column:81855},end:{line:1,column:81933}},"1907":{start:{line:1,column:81946},end:{line:1,column:81973}},"1908":{start:{line:1,column:81986},end:{line:1,column:82010}},"1909":{start:{line:1,column:82025},end:{line:1,column:82044}},"1910":{start:{line:1,column:82058},end:{line:1,column:82080}},"1911":{start:{line:1,column:82089},end:{line:1,column:82098}},"1912":{start:{line:1,column:82118},end:{line:1,column:82142}},"1913":{start:{line:1,column:82161},end:{line:1,column:82188}},"1914":{start:{line:1,column:82202},end:{line:1,column:82226}},"1915":{start:{line:1,column:82222},end:{line:1,column:82224}},"1916":{start:{line:1,column:82243},end:{line:1,column:82264}},"1917":{start:{line:1,column:82280},end:{line:1,column:82304}},"1918":{start:{line:1,column:82315},end:{line:1,column:82324}},"1919":{start:{line:1,column:82352},end:{line:1,column:82384}},"1920":{start:{line:1,column:82411},end:{line:1,column:82446}},"1921":{start:{line:1,column:82468},end:{line:1,column:82477}},"1922":{start:{line:1,column:82491},end:{line:1,column:82509}},"1923":{start:{line:1,column:82522},end:{line:1,column:82543}},"1924":{start:{line:1,column:82551},end:{line:1,column:82575}},"1925":{start:{line:1,column:82571},end:{line:1,column:82573}},"1926":{start:{line:1,column:82588},end:{line:1,column:82605}},"1927":{start:{line:1,column:82617},end:{line:1,column:82637}},"1928":{start:{line:1,column:82644},end:{line:1,column:82668}},"1929":{start:{line:1,column:82664},end:{line:1,column:82666}},"1930":{start:{line:1,column:82687},end:{line:1,column:82710}},"1931":{start:{line:1,column:82728},end:{line:1,column:82754}},"1932":{start:{line:1,column:82767},end:{line:1,column:82776}},"1933":{start:{line:1,column:82801},end:{line:1,column:82830}},"1934":{start:{line:1,column:82854},end:{line:1,column:82886}},"1935":{start:{line:1,column:82905},end:{line:1,column:82910}},"1936":{start:{line:1,column:82937},end:{line:1,column:82968}},"1937":{start:{line:1,column:82994},end:{line:1,column:83028}},"1938":{start:{line:1,column:83049},end:{line:1,column:83054}},"1939":{start:{line:1,column:83073},end:{line:1,column:83096}},"1940":{start:{line:1,column:83114},end:{line:1,column:83140}},"1941":{start:{line:1,column:83153},end:{line:1,column:83158}},"1942":{start:{line:1,column:83185},end:{line:1,column:83191}},"1943":{start:{line:1,column:83216},end:{line:1,column:83221}},"1944":{start:{line:1,column:83230},end:{line:1,column:83249}},"1945":{start:{line:1,column:83270},end:{line:1,column:83275}},"1946":{start:{line:1,column:83301},end:{line:1,column:83403}},"1947":{start:{line:1,column:83409},end:{line:1,column:83447}},"1948":{start:{line:1,column:83448},end:{line:1,column:83588}},"1949":{start:{line:1,column:83619},end:{line:1,column:83709}},"1950":{start:{line:1,column:83725},end:{line:1,column:83750}},"1951":{start:{line:1,column:83767},end:{line:1,column:83774}},"1952":{start:{line:1,column:83793},end:{line:1,column:83993}},"1953":{start:{line:1,column:84019},end:{line:1,column:84034}},"1954":{start:{line:1,column:84035},end:{line:1,column:84151}},"1955":{start:{line:1,column:84142},end:{line:1,column:84151}},"1956":{start:{line:1,column:84157},end:{line:1,column:84260}},"1957":{start:{line:1,column:84261},end:{line:1,column:84365}},"1958":{start:{line:1,column:84310},end:{line:1,column:84341}},"1959":{start:{line:1,column:84412},end:{line:1,column:84425}},"1960":{start:{line:1,column:84428},end:{line:1,column:84449}},"1961":{start:{line:1,column:84450},end:{line:1,column:84503}},"1962":{start:{line:1,column:84513},end:{line:1,column:85162}},"1963":{start:{line:1,column:84521},end:{line:1,column:84615}},"1964":{start:{line:1,column:84621},end:{line:1,column:84651}},"1965":{start:{line:1,column:84624},end:{line:1,column:84651}},"1966":{start:{line:1,column:84652},end:{line:1,column:84770}},"1967":{start:{line:1,column:84776},end:{line:1,column:84798}},"1968":{start:{line:1,column:84799},end:{line:1,column:85103}},"1969":{start:{line:1,column:85119},end:{line:1,column:85160}},"1970":{start:{line:1,column:85177},end:{line:1,column:85200}},"1971":{start:{line:1,column:85216},end:{line:1,column:85334}},"1972":{start:{line:1,column:85352},end:{line:1,column:85425}},"1973":{start:{line:1,column:85364},end:{line:1,column:85424}},"1974":{start:{line:1,column:85443},end:{line:1,column:86057}},"1975":{start:{line:1,column:85525},end:{line:1,column:85679}},"1976":{start:{line:1,column:85553},end:{line:1,column:85619}},"1977":{start:{line:1,column:86058},end:{line:1,column:86066}},"1978":{start:{line:1,column:86074},end:{line:1,column:88458}},"1979":{start:{line:1,column:86130},end:{line:1,column:86132}},"1980":{start:{line:1,column:86197},end:{line:1,column:86199}},"1981":{start:{line:1,column:86215},end:{line:1,column:86236}},"1982":{start:{line:1,column:86261},end:{line:1,column:86271}},"1983":{start:{line:1,column:86309},end:{line:1,column:86315}},"1984":{start:{line:1,column:86321},end:{line:1,column:86340}},"1985":{start:{line:1,column:86362},end:{line:1,column:86502}},"1986":{start:{line:1,column:86471},end:{line:1,column:86500}},"1987":{start:{line:1,column:86524},end:{line:1,column:86630}},"1988":{start:{line:1,column:86579},end:{line:1,column:86628}},"1989":{start:{line:1,column:86662},end:{line:1,column:86711}},"1990":{start:{line:1,column:86717},end:{line:1,column:86787}},"1991":{start:{line:1,column:86763},end:{line:1,column:86766}},"1992":{start:{line:1,column:86775},end:{line:1,column:86786}},"1993":{start:{line:1,column:86788},end:{line:1,column:86919}},"1994":{start:{line:1,column:86852},end:{line:1,column:86917}},"1995":{start:{line:1,column:86950},end:{line:1,column:86981}},"1996":{start:{line:1,column:86982},end:{line:1,column:87011}},"1997":{start:{line:1,column:87007},end:{line:1,column:87010}},"1998":{start:{line:1,column:87027},end:{line:1,column:87040}},"1999":{start:{line:1,column:87055},end:{line:1,column:87147}},"2000":{start:{line:1,column:87157},end:{line:1,column:87692}},"2001":{start:{line:1,column:87220},end:{line:1,column:87241}},"2002":{start:{line:1,column:87242},end:{line:1,column:87690}},"2003":{start:{line:1,column:87267},end:{line:1,column:87377}},"2004":{start:{line:1,column:87715},end:{line:1,column:87833}},"2005":{start:{line:1,column:87834},end:{line:1,column:87886}},"2006":{start:{line:1,column:87851},end:{line:1,column:87860}},"2007":{start:{line:1,column:87861},end:{line:1,column:87885}},"2008":{start:{line:1,column:87910},end:{line:1,column:87940}},"2009":{start:{line:1,column:87941},end:{line:1,column:87991}},"2010":{start:{line:1,column:88009},end:{line:1,column:88062}},"2011":{start:{line:1,column:88021},end:{line:1,column:88061}},"2012":{start:{line:1,column:88080},end:{line:1,column:88445}},"2013":{start:{line:1,column:88161},end:{line:1,column:88215}},"2014":{start:{line:1,column:88191},end:{line:1,column:88214}},"2015":{start:{line:1,column:88446},end:{line:1,column:88454}},"2016":{start:{line:1,column:88480},end:{line:1,column:88481}},"2017":{start:{line:1,column:88482},end:{line:1,column:88542}},"2018":{start:{line:1,column:88550},end:{line:1,column:88557}},"2019":{start:{line:1,column:88565},end:{line:1,column:90093}},"2020":{start:{line:1,column:88655},end:{line:1,column:88724}},"2021":{start:{line:1,column:88743},end:{line:1,column:88847}},"2022":{start:{line:1,column:88790},end:{line:1,column:88804}},"2023":{start:{line:1,column:88813},end:{line:1,column:88827}},"2024":{start:{line:1,column:88858},end:{line:1,column:88917}},"2025":{start:{line:1,column:88932},end:{line:1,column:88964}},"2026":{start:{line:1,column:88990},end:{line:1,column:88992}},"2027":{start:{line:1,column:88993},end:{line:1,column:89444}},"2028":{start:{line:1,column:89009},end:{line:1,column:89071}},"2029":{start:{line:1,column:89077},end:{line:1,column:89091}},"2030":{start:{line:1,column:89092},end:{line:1,column:89202}},"2031":{start:{line:1,column:89208},end:{line:1,column:89228}},"2032":{start:{line:1,column:89229},end:{line:1,column:89443}},"2033":{start:{line:1,column:89444},end:{line:1,column:89466}},"2034":{start:{line:1,column:89486},end:{line:1,column:89941}},"2035":{start:{line:1,column:89532},end:{line:1,column:89562}},"2036":{start:{line:1,column:89547},end:{line:1,column:89562}},"2037":{start:{line:1,column:89568},end:{line:1,column:89648}},"2038":{start:{line:1,column:89654},end:{line:1,column:89820}},"2039":{start:{line:1,column:89666},end:{line:1,column:89818}},"2040":{start:{line:1,column:89821},end:{line:1,column:89939}},"2041":{start:{line:1,column:89868},end:{line:1,column:89898}},"2042":{start:{line:1,column:89899},end:{line:1,column:89925}},"2043":{start:{line:1,column:89931},end:{line:1,column:89939}},"2044":{start:{line:1,column:89959},end:{line:1,column:90011}},"2045":{start:{line:1,column:89971},end:{line:1,column:90010}},"2046":{start:{line:1,column:90030},end:{line:1,column:90080}},"2047":{start:{line:1,column:90081},end:{line:1,column:90089}},"2048":{start:{line:1,column:90097},end:{line:1,column:90106}},"2049":{start:{line:1,column:90110},end:{line:1,column:92302}},"2050":{start:{line:1,column:90189},end:{line:1,column:90190}},"2051":{start:{line:1,column:90202},end:{line:1,column:90204}},"2052":{start:{line:1,column:90216},end:{line:1,column:90217}},"2053":{start:{line:1,column:90224},end:{line:1,column:90226}},"2054":{start:{line:1,column:90241},end:{line:1,column:90246}},"2055":{start:{line:1,column:90252},end:{line:1,column:90257}},"2056":{start:{line:1,column:90275},end:{line:1,column:90280}},"2057":{start:{line:1,column:90293},end:{line:1,column:90298}},"2058":{start:{line:1,column:90314},end:{line:1,column:90422}},"2059":{start:{line:1,column:90430},end:{line:1,column:90655}},"2060":{start:{line:1,column:90677},end:{line:1,column:91189}},"2061":{start:{line:1,column:90722},end:{line:1,column:91187}},"2062":{start:{line:1,column:91212},end:{line:1,column:91751}},"2063":{start:{line:1,column:91257},end:{line:1,column:91315}},"2064":{start:{line:1,column:91308},end:{line:1,column:91315}},"2065":{start:{line:1,column:91321},end:{line:1,column:91341}},"2066":{start:{line:1,column:91342},end:{line:1,column:91749}},"2067":{start:{line:1,column:91783},end:{line:1,column:91835}},"2068":{start:{line:1,column:91836},end:{line:1,column:92099}},"2069":{start:{line:1,column:91874},end:{line:1,column:92097}},"2070":{start:{line:1,column:91896},end:{line:1,column:91968}},"2071":{start:{line:1,column:91990},end:{line:1,column:92095}},"2072":{start:{line:1,column:92114},end:{line:1,column:92203}},"2073":{start:{line:1,column:92221},end:{line:1,column:92238}},"2074":{start:{line:1,column:92233},end:{line:1,column:92237}},"2075":{start:{line:1,column:92257},end:{line:1,column:92289}},"2076":{start:{line:1,column:92290},end:{line:1,column:92298}},"2077":{start:{line:1,column:92323},end:{line:1,column:92461}},"2078":{start:{line:1,column:92441},end:{line:1,column:92458}},"2079":{start:{line:1,column:92476},end:{line:1,column:92504}},"2080":{start:{line:1,column:92522},end:{line:1,column:92560}},"2081":{start:{line:1,column:92581},end:{line:1,column:92586}},"2082":{start:{line:1,column:92587},end:{line:1,column:92889}},"2083":{start:{line:1,column:92604},end:{line:1,column:92613}},"2084":{start:{line:1,column:92614},end:{line:1,column:92644}},"2085":{start:{line:1,column:92637},end:{line:1,column:92644}},"2086":{start:{line:1,column:92650},end:{line:1,column:92658}},"2087":{start:{line:1,column:92661},end:{line:1,column:92670}},"2088":{start:{line:1,column:92671},end:{line:1,column:92888}},"2089":{start:{line:1,column:92897},end:{line:1,column:92927}},"2090":{start:{line:1,column:92919},end:{line:1,column:92925}},"2091":{start:{line:1,column:92931},end:{line:1,column:92956}},"2092":{start:{line:1,column:92953},end:{line:1,column:92954}},"2093":{start:{line:1,column:92977},end:{line:1,column:93241}},"2094":{start:{line:1,column:93041},end:{line:1,column:93046}},"2095":{start:{line:1,column:93047},end:{line:1,column:93238}},"2096":{start:{line:1,column:93091},end:{line:1,column:93237}},"2097":{start:{line:1,column:93113},end:{line:1,column:93121}},"2098":{start:{line:1,column:93124},end:{line:1,column:93133}},"2099":{start:{line:1,column:93134},end:{line:1,column:93235}},"2100":{start:{line:1,column:93144},end:{line:1,column:93149}},"2101":{start:{line:1,column:93186},end:{line:1,column:93212}},"2102":{start:{line:1,column:93242},end:{line:1,column:93256}},"2103":{start:{line:1,column:93277},end:{line:1,column:93347}},"2104":{start:{line:1,column:93286},end:{line:1,column:93320}},"2105":{start:{line:1,column:93348},end:{line:1,column:93362}},"2106":{start:{line:1,column:93370},end:{line:1,column:93379}},"2107":{start:{line:1,column:93395},end:{line:1,column:93464}},"2108":{start:{line:1,column:93479},end:{line:1,column:93524}},"2109":{start:{line:1,column:93540},end:{line:1,column:93570}},"2110":{start:{line:1,column:93576},end:{line:1,column:93677}},"2111":{start:{line:1,column:93678},end:{line:1,column:93692}},"2112":{start:{line:1,column:93700},end:{line:1,column:93765}},"2113":{start:{line:1,column:93769},end:{line:1,column:94396}},"2114":{start:{line:1,column:93818},end:{line:1,column:94199}},"2115":{start:{line:1,column:94219},end:{line:1,column:94282}},"2116":{start:{line:1,column:94300},end:{line:1,column:94329}},"2117":{start:{line:1,column:94312},end:{line:1,column:94328}},"2118":{start:{line:1,column:94347},end:{line:1,column:94359}},"2119":{start:{line:1,column:94377},end:{line:1,column:94383}},"2120":{start:{line:1,column:94384},end:{line:1,column:94392}},"2121":{start:{line:1,column:94411},end:{line:1,column:94527}},"2122":{start:{line:1,column:94451},end:{line:1,column:94456}},"2123":{start:{line:1,column:94459},end:{line:1,column:94464}},"2124":{start:{line:1,column:94465},end:{line:1,column:94525}},"2125":{start:{line:1,column:94542},end:{line:1,column:94572}},"2126":{start:{line:1,column:94587},end:{line:1,column:94617}},"2127":{start:{line:1,column:94633},end:{line:1,column:94761}},"2128":{start:{line:1,column:94769},end:{line:1,column:94778}},"2129":{start:{line:1,column:94793},end:{line:1,column:94864}}},fnMap:{"0":{name:"(anonymous_0)",decl:{start:{line:1,column:1042},end:{line:1,column:1043}},loc:{start:{line:1,column:1056},end:{line:1,column:1069}},line:1},"1":{name:"(anonymous_1)",decl:{start:{line:1,column:1082},end:{line:1,column:1083}},loc:{start:{line:1,column:1086},end:{line:1,column:1426}},line:1},"2":{name:"(anonymous_2)",decl:{start:{line:1,column:1106},end:{line:1,column:1107}},loc:{start:{line:1,column:1120},end:{line:1,column:1130}},line:1},"3":{name:"(anonymous_3)",decl:{start:{line:1,column:1130},end:{line:1,column:1131}},loc:{start:{line:1,column:1141},end:{line:1,column:1151}},line:1},"4":{name:"(anonymous_4)",decl:{start:{line:1,column:1151},end:{line:1,column:1152}},loc:{start:{line:1,column:1176},end:{line:1,column:1248}},line:1},"5":{name:"(anonymous_5)",decl:{start:{line:1,column:1210},end:{line:1,column:1211}},loc:{start:{line:1,column:1214},end:{line:1,column:1247}},line:1},"6":{name:"(anonymous_6)",decl:{start:{line:1,column:1248},end:{line:1,column:1249}},loc:{start:{line:1,column:1276},end:{line:1,column:1313}},line:1},"7":{name:"(anonymous_7)",decl:{start:{line:1,column:1330},end:{line:1,column:1331}},loc:{start:{line:1,column:1341},end:{line:1,column:1365}},line:1},"8":{name:"(anonymous_8)",decl:{start:{line:1,column:1447},end:{line:1,column:1448}},loc:{start:{line:1,column:1451},end:{line:1,column:2100}},line:1},"9":{name:"(anonymous_9)",decl:{start:{line:1,column:1502},end:{line:1,column:1503}},loc:{start:{line:1,column:1518},end:{line:1,column:1693}},line:1},"10":{name:"(anonymous_10)",decl:{start:{line:1,column:1542},end:{line:1,column:1543}},loc:{start:{line:1,column:1545},end:{line:1,column:1561}},line:1},"11":{name:"(anonymous_11)",decl:{start:{line:1,column:1578},end:{line:1,column:1579}},loc:{start:{line:1,column:1581},end:{line:1,column:1599}},line:1},"12":{name:"(anonymous_12)",decl:{start:{line:1,column:1648},end:{line:1,column:1649}},loc:{start:{line:1,column:1651},end:{line:1,column:1666}},line:1},"13":{name:"(anonymous_13)",decl:{start:{line:1,column:1693},end:{line:1,column:1694}},loc:{start:{line:1,column:1718},end:{line:1,column:1775}},line:1},"14":{name:"(anonymous_14)",decl:{start:{line:1,column:1775},end:{line:1,column:1776}},loc:{start:{line:1,column:1784},end:{line:1,column:1803}},line:1},"15":{name:"(anonymous_15)",decl:{start:{line:1,column:1803},end:{line:1,column:1804}},loc:{start:{line:1,column:1820},end:{line:1,column:1980}},line:1},"16":{name:"(anonymous_16)",decl:{start:{line:1,column:1896},end:{line:1,column:1897}},loc:{start:{line:1,column:1899},end:{line:1,column:1912}},line:1},"17":{name:"(anonymous_17)",decl:{start:{line:1,column:1997},end:{line:1,column:1998}},loc:{start:{line:1,column:2008},end:{line:1,column:2039}},line:1},"18":{name:"Jr",decl:{start:{line:1,column:2128},end:{line:1,column:2130}},loc:{start:{line:1,column:2133},end:{line:1,column:2160}},line:1},"19":{name:"Xr",decl:{start:{line:1,column:2169},end:{line:1,column:2171}},loc:{start:{line:1,column:2176},end:{line:1,column:2233}},line:1},"20":{name:"uo",decl:{start:{line:1,column:2242},end:{line:1,column:2244}},loc:{start:{line:1,column:2253},end:{line:1,column:2527}},line:1},"21":{name:"Rn",decl:{start:{line:1,column:2536},end:{line:1,column:2538}},loc:{start:{line:1,column:2543},end:{line:1,column:2643}},line:1},"22":{name:"(anonymous_22)",decl:{start:{line:1,column:2651},end:{line:1,column:2652}},loc:{start:{line:1,column:2655},end:{line:1,column:3828}},line:1},"23":{name:"(anonymous_23)",decl:{start:{line:1,column:2726},end:{line:1,column:2727}},loc:{start:{line:1,column:2749},end:{line:1,column:2844}},line:1},"24":{name:"(anonymous_24)",decl:{start:{line:1,column:2844},end:{line:1,column:2845}},loc:{start:{line:1,column:2858},end:{line:1,column:2955}},line:1},"25":{name:"(anonymous_25)",decl:{start:{line:1,column:2917},end:{line:1,column:2918}},loc:{start:{line:1,column:2920},end:{line:1,column:2953}},line:1},"26":{name:"(anonymous_26)",decl:{start:{line:1,column:2955},end:{line:1,column:2956}},loc:{start:{line:1,column:2972},end:{line:1,column:3069}},line:1},"27":{name:"(anonymous_27)",decl:{start:{line:1,column:3031},end:{line:1,column:3032}},loc:{start:{line:1,column:3034},end:{line:1,column:3067}},line:1},"28":{name:"(anonymous_28)",decl:{start:{line:1,column:3069},end:{line:1,column:3070}},loc:{start:{line:1,column:3084},end:{line:1,column:3197}},line:1},"29":{name:"(anonymous_29)",decl:{start:{line:1,column:3158},end:{line:1,column:3159}},loc:{start:{line:1,column:3161},end:{line:1,column:3193}},line:1},"30":{name:"(anonymous_30)",decl:{start:{line:1,column:3197},end:{line:1,column:3198}},loc:{start:{line:1,column:3213},end:{line:1,column:3285}},line:1},"31":{name:"(anonymous_31)",decl:{start:{line:1,column:3285},end:{line:1,column:3286}},loc:{start:{line:1,column:3298},end:{line:1,column:3382}},line:1},"32":{name:"(anonymous_32)",decl:{start:{line:1,column:3382},end:{line:1,column:3383}},loc:{start:{line:1,column:3392},end:{line:1,column:3573}},line:1},"33":{name:"(anonymous_33)",decl:{start:{line:1,column:3573},end:{line:1,column:3574}},loc:{start:{line:1,column:3586},end:{line:1,column:3608}},line:1},"34":{name:"(anonymous_34)",decl:{start:{line:1,column:3608},end:{line:1,column:3609}},loc:{start:{line:1,column:3623},end:{line:1,column:3695}},line:1},"35":{name:"(anonymous_35)",decl:{start:{line:1,column:3712},end:{line:1,column:3713}},loc:{start:{line:1,column:3723},end:{line:1,column:3767}},line:1},"36":{name:"(anonymous_36)",decl:{start:{line:1,column:4164},end:{line:1,column:4165}},loc:{start:{line:1,column:4168},end:{line:1,column:4170}},line:1},"37":{name:"go",decl:{start:{line:1,column:4182},end:{line:1,column:4184}},loc:{start:{line:1,column:4187},end:{line:1,column:4212}},line:1},"38":{name:"vo",decl:{start:{line:1,column:4221},end:{line:1,column:4223}},loc:{start:{line:1,column:4226},end:{line:1,column:4251}},line:1},"39":{name:"ni",decl:{start:{line:1,column:4260},end:{line:1,column:4262}},loc:{start:{line:1,column:4267},end:{line:1,column:4301}},line:1},"40":{name:"(anonymous_40)",decl:{start:{line:1,column:4281},end:{line:1,column:4282}},loc:{start:{line:1,column:4284},end:{line:1,column:4299}},line:1},"41":{name:"(anonymous_41)",decl:{start:{line:1,column:4309},end:{line:1,column:4310}},loc:{start:{line:1,column:4313},end:{line:1,column:5603}},line:1},"42":{name:"(anonymous_42)",decl:{start:{line:1,column:4457},end:{line:1,column:4458}},loc:{start:{line:1,column:4495},end:{line:1,column:4701}},line:1},"43":{name:"(anonymous_43)",decl:{start:{line:1,column:4701},end:{line:1,column:4702}},loc:{start:{line:1,column:4720},end:{line:1,column:4870}},line:1},"44":{name:"(anonymous_44)",decl:{start:{line:1,column:4870},end:{line:1,column:4871}},loc:{start:{line:1,column:4894},end:{line:1,column:5349}},line:1},"45":{name:"(anonymous_45)",decl:{start:{line:1,column:5349},end:{line:1,column:5350}},loc:{start:{line:1,column:5362},end:{line:1,column:5393}},line:1},"46":{name:"(anonymous_46)",decl:{start:{line:1,column:5393},end:{line:1,column:5394}},loc:{start:{line:1,column:5413},end:{line:1,column:5446}},line:1},"47":{name:"(anonymous_47)",decl:{start:{line:1,column:5463},end:{line:1,column:5464}},loc:{start:{line:1,column:5474},end:{line:1,column:5542}},line:1},"48":{name:"(anonymous_48)",decl:{start:{line:1,column:5705},end:{line:1,column:5706}},loc:{start:{line:1,column:5725},end:{line:1,column:5793}},line:1},"49":{name:"(anonymous_49)",decl:{start:{line:1,column:5793},end:{line:1,column:5794}},loc:{start:{line:1,column:5802},end:{line:1,column:5804}},line:1},"50":{name:"(anonymous_50)",decl:{start:{line:1,column:5821},end:{line:1,column:5822}},loc:{start:{line:1,column:5839},end:{line:1,column:5912}},line:1},"51":{name:"(anonymous_51)",decl:{start:{line:1,column:5912},end:{line:1,column:5913}},loc:{start:{line:1,column:5928},end:{line:1,column:5962}},line:1},"52":{name:"(anonymous_52)",decl:{start:{line:1,column:5962},end:{line:1,column:5963}},loc:{start:{line:1,column:5975},end:{line:1,column:6010}},line:1},"53":{name:"(anonymous_53)",decl:{start:{line:1,column:6010},end:{line:1,column:6011}},loc:{start:{line:1,column:6026},end:{line:1,column:6062}},line:1},"54":{name:"(anonymous_54)",decl:{start:{line:1,column:6062},end:{line:1,column:6063}},loc:{start:{line:1,column:6081},end:{line:1,column:6123}},line:1},"55":{name:"(anonymous_55)",decl:{start:{line:1,column:6123},end:{line:1,column:6124}},loc:{start:{line:1,column:6139},end:{line:1,column:6151}},line:1},"56":{name:"(anonymous_56)",decl:{start:{line:1,column:6151},end:{line:1,column:6152}},loc:{start:{line:1,column:6173},end:{line:1,column:6286}},line:1},"57":{name:"(anonymous_57)",decl:{start:{line:1,column:6286},end:{line:1,column:6287}},loc:{start:{line:1,column:6299},end:{line:1,column:6320}},line:1},"58":{name:"(anonymous_58)",decl:{start:{line:1,column:6320},end:{line:1,column:6321}},loc:{start:{line:1,column:6334},end:{line:1,column:6356}},line:1},"59":{name:"(anonymous_59)",decl:{start:{line:1,column:6356},end:{line:1,column:6357}},loc:{start:{line:1,column:6377},end:{line:1,column:6477}},line:1},"60":{name:"(anonymous_60)",decl:{start:{line:1,column:6477},end:{line:1,column:6478}},loc:{start:{line:1,column:6499},end:{line:1,column:6602}},line:1},"61":{name:"(anonymous_61)",decl:{start:{line:1,column:6602},end:{line:1,column:6603}},loc:{start:{line:1,column:6615},end:{line:1,column:6635}},line:1},"62":{name:"(anonymous_62)",decl:{start:{line:1,column:6635},end:{line:1,column:6636}},loc:{start:{line:1,column:6651},end:{line:1,column:6674}},line:1},"63":{name:"(anonymous_63)",decl:{start:{line:1,column:6674},end:{line:1,column:6675}},loc:{start:{line:1,column:6691},end:{line:1,column:6789}},line:1},"64":{name:"(anonymous_64)",decl:{start:{line:1,column:6789},end:{line:1,column:6790}},loc:{start:{line:1,column:6807},end:{line:1,column:6862}},line:1},"65":{name:"(anonymous_65)",decl:{start:{line:1,column:6862},end:{line:1,column:6863}},loc:{start:{line:1,column:6880},end:{line:1,column:6899}},line:1},"66":{name:"(anonymous_66)",decl:{start:{line:1,column:6899},end:{line:1,column:6900}},loc:{start:{line:1,column:6912},end:{line:1,column:6927}},line:1},"67":{name:"(anonymous_67)",decl:{start:{line:1,column:6927},end:{line:1,column:6928}},loc:{start:{line:1,column:6942},end:{line:1,column:7209}},line:1},"68":{name:"(anonymous_68)",decl:{start:{line:1,column:7209},end:{line:1,column:7210}},loc:{start:{line:1,column:7234},end:{line:1,column:7308}},line:1},"69":{name:"(anonymous_69)",decl:{start:{line:1,column:7242},end:{line:1,column:7243}},loc:{start:{line:1,column:7245},end:{line:1,column:7307}},line:1},"70":{name:"ei",decl:{start:{line:1,column:7319},end:{line:1,column:7321}},loc:{start:{line:1,column:7324},end:{line:1,column:7375}},line:1},"71":{name:"(anonymous_71)",decl:{start:{line:1,column:7434},end:{line:1,column:7435}},loc:{start:{line:1,column:7462},end:{line:1,column:7916}},line:1},"72":{name:"(anonymous_72)",decl:{start:{line:1,column:7916},end:{line:1,column:7917}},loc:{start:{line:1,column:7935},end:{line:1,column:7977}},line:1},"73":{name:"(anonymous_73)",decl:{start:{line:1,column:7977},end:{line:1,column:7978}},loc:{start:{line:1,column:7993},end:{line:1,column:8047}},line:1},"74":{name:"(anonymous_74)",decl:{start:{line:1,column:8047},end:{line:1,column:8048}},loc:{start:{line:1,column:8066},end:{line:1,column:8123}},line:1},"75":{name:"(anonymous_75)",decl:{start:{line:1,column:8123},end:{line:1,column:8124}},loc:{start:{line:1,column:8139},end:{line:1,column:8173}},line:1},"76":{name:"(anonymous_76)",decl:{start:{line:1,column:8173},end:{line:1,column:8174}},loc:{start:{line:1,column:8186},end:{line:1,column:8260}},line:1},"77":{name:"(anonymous_77)",decl:{start:{line:1,column:8260},end:{line:1,column:8261}},loc:{start:{line:1,column:8269},end:{line:1,column:8343}},line:1},"78":{name:"(anonymous_78)",decl:{start:{line:1,column:8425},end:{line:1,column:8426}},loc:{start:{line:1,column:8453},end:{line:1,column:8605}},line:1},"79":{name:"(anonymous_79)",decl:{start:{line:1,column:8605},end:{line:1,column:8606}},loc:{start:{line:1,column:8618},end:{line:1,column:8679}},line:1},"80":{name:"(anonymous_80)",decl:{start:{line:1,column:8679},end:{line:1,column:8680}},loc:{start:{line:1,column:8688},end:{line:1,column:8797}},line:1},"81":{name:"(anonymous_81)",decl:{start:{line:1,column:8840},end:{line:1,column:8841}},loc:{start:{line:1,column:8868},end:{line:1,column:8952}},line:1},"82":{name:"(anonymous_82)",decl:{start:{line:1,column:8952},end:{line:1,column:8953}},loc:{start:{line:1,column:8966},end:{line:1,column:9024}},line:1},"83":{name:"(anonymous_83)",decl:{start:{line:1,column:9024},end:{line:1,column:9025}},loc:{start:{line:1,column:9042},end:{line:1,column:9125}},line:1},"84":{name:"(anonymous_84)",decl:{start:{line:1,column:9174},end:{line:1,column:9175}},loc:{start:{line:1,column:9194},end:{line:1,column:9205}},line:1},"85":{name:"(anonymous_85)",decl:{start:{line:1,column:9205},end:{line:1,column:9206}},loc:{start:{line:1,column:9225},end:{line:1,column:9294}},line:1},"86":{name:"(anonymous_86)",decl:{start:{line:1,column:9259},end:{line:1,column:9260}},loc:{start:{line:1,column:9263},end:{line:1,column:9293}},line:1},"87":{name:"(anonymous_87)",decl:{start:{line:1,column:9294},end:{line:1,column:9295}},loc:{start:{line:1,column:9312},end:{line:1,column:9332}},line:1},"88":{name:"(anonymous_88)",decl:{start:{line:1,column:9332},end:{line:1,column:9333}},loc:{start:{line:1,column:9341},end:{line:1,column:9353}},line:1},"89":{name:"(anonymous_89)",decl:{start:{line:1,column:9353},end:{line:1,column:9354}},loc:{start:{line:1,column:9371},end:{line:1,column:9429}},line:1},"90":{name:"(anonymous_90)",decl:{start:{line:1,column:9429},end:{line:1,column:9430}},loc:{start:{line:1,column:9449},end:{line:1,column:9513}},line:1},"91":{name:"(anonymous_91)",decl:{start:{line:1,column:9513},end:{line:1,column:9514}},loc:{start:{line:1,column:9533},end:{line:1,column:9550}},line:1},"92":{name:"(anonymous_92)",decl:{start:{line:1,column:9550},end:{line:1,column:9551}},loc:{start:{line:1,column:9566},end:{line:1,column:9605}},line:1},"93":{name:"(anonymous_93)",decl:{start:{line:1,column:9605},end:{line:1,column:9606}},loc:{start:{line:1,column:9620},end:{line:1,column:9658}},line:1},"94":{name:"(anonymous_94)",decl:{start:{line:1,column:9658},end:{line:1,column:9659}},loc:{start:{line:1,column:9683},end:{line:1,column:9751}},line:1},"95":{name:"(anonymous_95)",decl:{start:{line:1,column:9751},end:{line:1,column:9752}},loc:{start:{line:1,column:9765},end:{line:1,column:9803}},line:1},"96":{name:"(anonymous_96)",decl:{start:{line:1,column:9803},end:{line:1,column:9804}},loc:{start:{line:1,column:9821},end:{line:1,column:9830}},line:1},"97":{name:"(anonymous_97)",decl:{start:{line:1,column:9830},end:{line:1,column:9831}},loc:{start:{line:1,column:9844},end:{line:1,column:9879}},line:1},"98":{name:"(anonymous_98)",decl:{start:{line:1,column:9879},end:{line:1,column:9880}},loc:{start:{line:1,column:9891},end:{line:1,column:9921}},line:1},"99":{name:"mo",decl:{start:{line:1,column:9940},end:{line:1,column:9942}},loc:{start:{line:1,column:9944},end:{line:1,column:10027}},line:1},"100":{name:"yo",decl:{start:{line:1,column:10036},end:{line:1,column:10038}},loc:{start:{line:1,column:10041},end:{line:1,column:10086}},line:1},"101":{name:"(anonymous_101)",decl:{start:{line:1,column:10094},end:{line:1,column:10095}},loc:{start:{line:1,column:10098},end:{line:1,column:10248}},line:1},"102":{name:"(anonymous_102)",decl:{start:{line:1,column:10107},end:{line:1,column:10108}},loc:{start:{line:1,column:10114},end:{line:1,column:10141}},line:1},"103":{name:"(anonymous_103)",decl:{start:{line:1,column:10158},end:{line:1,column:10159}},loc:{start:{line:1,column:10169},end:{line:1,column:10187}},line:1},"104":{name:"(anonymous_104)",decl:{start:{line:1,column:10500},end:{line:1,column:10501}},loc:{start:{line:1,column:10503},end:{line:1,column:10511}},line:1},"105":{name:"(anonymous_105)",decl:{start:{line:1,column:10520},end:{line:1,column:10521}},loc:{start:{line:1,column:10523},end:{line:1,column:10532}},line:1},"106":{name:"(anonymous_106)",decl:{start:{line:1,column:10538},end:{line:1,column:10539}},loc:{start:{line:1,column:10541},end:{line:1,column:10550}},line:1},"107":{name:"(anonymous_107)",decl:{start:{line:1,column:10557},end:{line:1,column:10558}},loc:{start:{line:1,column:10560},end:{line:1,column:10570}},line:1},"108":{name:"(anonymous_108)",decl:{start:{line:1,column:10576},end:{line:1,column:10577}},loc:{start:{line:1,column:10580},end:{line:1,column:11755}},line:1},"109":{name:"(anonymous_109)",decl:{start:{line:1,column:10600},end:{line:1,column:10601}},loc:{start:{line:1,column:10614},end:{line:1,column:10624}},line:1},"110":{name:"(anonymous_110)",decl:{start:{line:1,column:10624},end:{line:1,column:10625}},loc:{start:{line:1,column:10635},end:{line:1,column:10669}},line:1},"111":{name:"(anonymous_111)",decl:{start:{line:1,column:10669},end:{line:1,column:10670}},loc:{start:{line:1,column:10694},end:{line:1,column:10867}},line:1},"112":{name:"(anonymous_112)",decl:{start:{line:1,column:10823},end:{line:1,column:10824}},loc:{start:{line:1,column:10827},end:{line:1,column:10865}},line:1},"113":{name:"(anonymous_113)",decl:{start:{line:1,column:10867},end:{line:1,column:10868}},loc:{start:{line:1,column:10891},end:{line:1,column:11244}},line:1},"114":{name:"(anonymous_114)",decl:{start:{line:1,column:11098},end:{line:1,column:11099}},loc:{start:{line:1,column:11101},end:{line:1,column:11152}},line:1},"115":{name:"(anonymous_115)",decl:{start:{line:1,column:11244},end:{line:1,column:11245}},loc:{start:{line:1,column:11277},end:{line:1,column:11497}},line:1},"116":{name:"(anonymous_116)",decl:{start:{line:1,column:11439},end:{line:1,column:11440}},loc:{start:{line:1,column:11442},end:{line:1,column:11483}},line:1},"117":{name:"(anonymous_117)",decl:{start:{line:1,column:11497},end:{line:1,column:11498}},loc:{start:{line:1,column:11524},end:{line:1,column:11590}},line:1},"118":{name:"(anonymous_118)",decl:{start:{line:1,column:11532},end:{line:1,column:11533}},loc:{start:{line:1,column:11535},end:{line:1,column:11589}},line:1},"119":{name:"(anonymous_119)",decl:{start:{line:1,column:11579},end:{line:1,column:11580}},loc:{start:{line:1,column:11583},end:{line:1,column:11587}},line:1},"120":{name:"(anonymous_120)",decl:{start:{line:1,column:11590},end:{line:1,column:11591}},loc:{start:{line:1,column:11613},end:{line:1,column:11642}},line:1},"121":{name:"(anonymous_121)",decl:{start:{line:1,column:11659},end:{line:1,column:11660}},loc:{start:{line:1,column:11670},end:{line:1,column:11694}},line:1},"122":{name:"Co",decl:{start:{line:1,column:11774},end:{line:1,column:11776}},loc:{start:{line:1,column:11783},end:{line:1,column:11832}},line:1},"123":{name:"Eo",decl:{start:{line:1,column:11841},end:{line:1,column:11843}},loc:{start:{line:1,column:11848},end:{line:1,column:11946}},line:1},"124":{name:"bo",decl:{start:{line:1,column:11955},end:{line:1,column:11957}},loc:{start:{line:1,column:11959},end:{line:1,column:11977}},line:1},"125":{name:"Mo",decl:{start:{line:1,column:11986},end:{line:1,column:11988}},loc:{start:{line:1,column:11990},end:{line:1,column:12005}},line:1},"126":{name:"Io",decl:{start:{line:1,column:12014},end:{line:1,column:12016}},loc:{start:{line:1,column:12018},end:{line:1,column:12048}},line:1},"127":{name:"(anonymous_127)",decl:{start:{line:1,column:12348},end:{line:1,column:12349}},loc:{start:{line:1,column:12352},end:{line:1,column:12592}},line:1},"128":{name:"(anonymous_128)",decl:{start:{line:1,column:12366},end:{line:1,column:12367}},loc:{start:{line:1,column:12380},end:{line:1,column:12393}},line:1},"129":{name:"(anonymous_129)",decl:{start:{line:1,column:12393},end:{line:1,column:12394}},loc:{start:{line:1,column:12403},end:{line:1,column:12427}},line:1},"130":{name:"(anonymous_130)",decl:{start:{line:1,column:12427},end:{line:1,column:12428}},loc:{start:{line:1,column:12438},end:{line:1,column:12461}},line:1},"131":{name:"(anonymous_131)",decl:{start:{line:1,column:12478},end:{line:1,column:12479}},loc:{start:{line:1,column:12489},end:{line:1,column:12513}},line:1},"132":{name:"(anonymous_132)",decl:{start:{line:1,column:12652},end:{line:1,column:12653}},loc:{start:{line:1,column:12666},end:{line:1,column:12685}},line:1},"133":{name:"(anonymous_133)",decl:{start:{line:1,column:12685},end:{line:1,column:12686}},loc:{start:{line:1,column:12691},end:{line:1,column:12751}},line:1},"134":{name:"(anonymous_134)",decl:{start:{line:1,column:12751},end:{line:1,column:12752}},loc:{start:{line:1,column:12757},end:{line:1,column:12838}},line:1},"135":{name:"(anonymous_135)",decl:{start:{line:1,column:12838},end:{line:1,column:12839}},loc:{start:{line:1,column:12847},end:{line:1,column:12924}},line:1},"136":{name:"(anonymous_136)",decl:{start:{line:1,column:12924},end:{line:1,column:12925}},loc:{start:{line:1,column:12934},end:{line:1,column:12967}},line:1},"137":{name:"ue",decl:{start:{line:1,column:12978},end:{line:1,column:12980}},loc:{start:{line:1,column:12983},end:{line:1,column:13001}},line:1},"138":{name:"bn",decl:{start:{line:1,column:13010},end:{line:1,column:13012}},loc:{start:{line:1,column:13019},end:{line:1,column:13137}},line:1},"139":{name:"hi",decl:{start:{line:1,column:13146},end:{line:1,column:13148}},loc:{start:{line:1,column:13155},end:{line:1,column:13660}},line:1},"140":{name:"_t",decl:{start:{line:1,column:13669},end:{line:1,column:13671}},loc:{start:{line:1,column:13674},end:{line:1,column:13756}},line:1},"141":{name:"(anonymous_141)",decl:{start:{line:1,column:13694},end:{line:1,column:13695}},loc:{start:{line:1,column:13701},end:{line:1,column:13754}},line:1},"142":{name:"(anonymous_142)",decl:{start:{line:1,column:13730},end:{line:1,column:13731}},loc:{start:{line:1,column:13733},end:{line:1,column:13737}},line:1},"143":{name:"(anonymous_143)",decl:{start:{line:1,column:13744},end:{line:1,column:13745}},loc:{start:{line:1,column:13747},end:{line:1,column:13751}},line:1},"144":{name:"_o",decl:{start:{line:1,column:13765},end:{line:1,column:13767}},loc:{start:{line:1,column:13772},end:{line:1,column:13867}},line:1},"145":{name:"B",decl:{start:{line:1,column:13876},end:{line:1,column:13877}},loc:{start:{line:1,column:13882},end:{line:1,column:14036}},line:1},"146":{name:"An",decl:{start:{line:1,column:14045},end:{line:1,column:14047}},loc:{start:{line:1,column:14050},end:{line:1,column:14112}},line:1},"147":{name:"fi",decl:{start:{line:1,column:14121},end:{line:1,column:14123}},loc:{start:{line:1,column:14128},end:{line:1,column:14286}},line:1},"148":{name:"(anonymous_148)",decl:{start:{line:1,column:14251},end:{line:1,column:14252}},loc:{start:{line:1,column:14258},end:{line:1,column:14266}},line:1},"149":{name:"Oo",decl:{start:{line:1,column:14295},end:{line:1,column:14297}},loc:{start:{line:1,column:14300},end:{line:1,column:14338}},line:1},"150":{name:"de",decl:{start:{line:1,column:14347},end:{line:1,column:14349}},loc:{start:{line:1,column:14352},end:{line:1,column:14401}},line:1},"151":{name:"pi",decl:{start:{line:1,column:14410},end:{line:1,column:14412}},loc:{start:{line:1,column:14415},end:{line:1,column:14454}},line:1},"152":{name:"(anonymous_152)",decl:{start:{line:1,column:14513},end:{line:1,column:14514}},loc:{start:{line:1,column:14517},end:{line:1,column:14519}},line:1},"153":{name:"qn",decl:{start:{line:1,column:14694},end:{line:1,column:14696}},loc:{start:{line:1,column:14703},end:{line:1,column:14822}},line:1},"154":{name:"(anonymous_154)",decl:{start:{line:1,column:14751},end:{line:1,column:14752}},loc:{start:{line:1,column:14755},end:{line:1,column:14820}},line:1},"155":{name:"_n",decl:{start:{line:1,column:14831},end:{line:1,column:14833}},loc:{start:{line:1,column:14840},end:{line:1,column:14988}},line:1},"156":{name:"Po",decl:{start:{line:1,column:14997},end:{line:1,column:14999}},loc:{start:{line:1,column:15004},end:{line:1,column:15019}},line:1},"157":{name:"vi",decl:{start:{line:1,column:15028},end:{line:1,column:15030}},loc:{start:{line:1,column:15037},end:{line:1,column:15244}},line:1},"158":{name:"Uo",decl:{start:{line:1,column:15253},end:{line:1,column:15255}},loc:{start:{line:1,column:15260},end:{line:1,column:15353}},line:1},"159":{name:"(anonymous_159)",decl:{start:{line:1,column:15335},end:{line:1,column:15336}},loc:{start:{line:1,column:15338},end:{line:1,column:15351}},line:1},"160":{name:"mi",decl:{start:{line:1,column:15362},end:{line:1,column:15364}},loc:{start:{line:1,column:15371},end:{line:1,column:15400}},line:1},"161":{name:"yi",decl:{start:{line:1,column:15409},end:{line:1,column:15411}},loc:{start:{line:1,column:15420},end:{line:1,column:15877}},line:1},"162":{name:"Tt",decl:{start:{line:1,column:15886},end:{line:1,column:15888}},loc:{start:{line:1,column:15895},end:{line:1,column:15955}},line:1},"163":{name:"(anonymous_163)",decl:{start:{line:1,column:15911},end:{line:1,column:15912}},loc:{start:{line:1,column:15918},end:{line:1,column:15953}},line:1},"164":{name:"(anonymous_164)",decl:{start:{line:1,column:16008},end:{line:1,column:16009}},loc:{start:{line:1,column:16047},end:{line:1,column:16095}},line:1},"165":{name:"(anonymous_165)",decl:{start:{line:1,column:16095},end:{line:1,column:16096}},loc:{start:{line:1,column:16114},end:{line:1,column:16185}},line:1},"166":{name:"(anonymous_166)",decl:{start:{line:1,column:16185},end:{line:1,column:16186}},loc:{start:{line:1,column:16195},end:{line:1,column:16222}},line:1},"167":{name:"(anonymous_167)",decl:{start:{line:1,column:16262},end:{line:1,column:16263}},loc:{start:{line:1,column:16278},end:{line:1,column:16354}},line:1},"168":{name:"(anonymous_168)",decl:{start:{line:1,column:16336},end:{line:1,column:16337}},loc:{start:{line:1,column:16339},end:{line:1,column:16352}},line:1},"169":{name:"(anonymous_169)",decl:{start:{line:1,column:16354},end:{line:1,column:16355}},loc:{start:{line:1,column:16367},end:{line:1,column:16399}},line:1},"170":{name:"(anonymous_170)",decl:{start:{line:1,column:16399},end:{line:1,column:16400}},loc:{start:{line:1,column:16421},end:{line:1,column:16463}},line:1},"171":{name:"(anonymous_171)",decl:{start:{line:1,column:16463},end:{line:1,column:16464}},loc:{start:{line:1,column:16473},end:{line:1,column:16490}},line:1},"172":{name:"(anonymous_172)",decl:{start:{line:1,column:16530},end:{line:1,column:16531}},loc:{start:{line:1,column:16546},end:{line:1,column:16577}},line:1},"173":{name:"(anonymous_173)",decl:{start:{line:1,column:16577},end:{line:1,column:16578}},loc:{start:{line:1,column:16595},end:{line:1,column:16663}},line:1},"174":{name:"(anonymous_174)",decl:{start:{line:1,column:16663},end:{line:1,column:16664}},loc:{start:{line:1,column:16673},end:{line:1,column:16690}},line:1},"175":{name:"Lo",decl:{start:{line:1,column:16701},end:{line:1,column:16703}},loc:{start:{line:1,column:16708},end:{line:1,column:16773}},line:1},"176":{name:"(anonymous_176)",decl:{start:{line:1,column:16733},end:{line:1,column:16734}},loc:{start:{line:1,column:16740},end:{line:1,column:16771}},line:1},"177":{name:"ce",decl:{start:{line:1,column:16782},end:{line:1,column:16784}},loc:{start:{line:1,column:16789},end:{line:1,column:16855}},line:1},"178":{name:"(anonymous_178)",decl:{start:{line:1,column:16828},end:{line:1,column:16829}},loc:{start:{line:1,column:16835},end:{line:1,column:16853}},line:1},"179":{name:"xo",decl:{start:{line:1,column:16864},end:{line:1,column:16866}},loc:{start:{line:1,column:16871},end:{line:1,column:17040}},line:1},"180":{name:"(anonymous_180)",decl:{start:{line:1,column:16923},end:{line:1,column:16924}},loc:{start:{line:1,column:16932},end:{line:1,column:16961}},line:1},"181":{name:"(anonymous_181)",decl:{start:{line:1,column:16998},end:{line:1,column:16999}},loc:{start:{line:1,column:17007},end:{line:1,column:17036}},line:1},"182":{name:"(anonymous_182)",decl:{start:{line:1,column:17048},end:{line:1,column:17049}},loc:{start:{line:1,column:17052},end:{line:1,column:17184}},line:1},"183":{name:"(anonymous_183)",decl:{start:{line:1,column:17078},end:{line:1,column:17079}},loc:{start:{line:1,column:17089},end:{line:1,column:17107}},line:1},"184":{name:"(anonymous_184)",decl:{start:{line:1,column:17145},end:{line:1,column:17146}},loc:{start:{line:1,column:17149},end:{line:1,column:17154}},line:1},"185":{name:"(anonymous_185)",decl:{start:{line:1,column:17196},end:{line:1,column:17197}},loc:{start:{line:1,column:17204},end:{line:1,column:17295}},line:1},"186":{name:"(anonymous_186)",decl:{start:{line:1,column:17295},end:{line:1,column:17296}},loc:{start:{line:1,column:17307},end:{line:1,column:17429}},line:1},"187":{name:"Dt",decl:{start:{line:1,column:17449},end:{line:1,column:17451}},loc:{start:{line:1,column:17454},end:{line:1,column:17497}},line:1},"188":{name:"(anonymous_188)",decl:{start:{line:1,column:17477},end:{line:1,column:17478}},loc:{start:{line:1,column:17480},end:{line:1,column:17485}},line:1},"189":{name:"Fe",decl:{start:{line:1,column:17506},end:{line:1,column:17508}},loc:{start:{line:1,column:17513},end:{line:1,column:17913}},line:1},"190":{name:"(anonymous_190)",decl:{start:{line:1,column:17644},end:{line:1,column:17645}},loc:{start:{line:1,column:17653},end:{line:1,column:17688}},line:1},"191":{name:"(anonymous_191)",decl:{start:{line:1,column:17743},end:{line:1,column:17744}},loc:{start:{line:1,column:17750},end:{line:1,column:17799}},line:1},"192":{name:"Ri",decl:{start:{line:1,column:17922},end:{line:1,column:17924}},loc:{start:{line:1,column:17927},end:{line:1,column:18039}},line:1},"193":{name:"Mt",decl:{start:{line:1,column:18048},end:{line:1,column:18050}},loc:{start:{line:1,column:18053},end:{line:1,column:18088}},line:1},"194":{name:"ko",decl:{start:{line:1,column:18097},end:{line:1,column:18099}},loc:{start:{line:1,column:18102},end:{line:1,column:18123}},line:1},"195":{name:"On",decl:{start:{line:1,column:18132},end:{line:1,column:18134}},loc:{start:{line:1,column:18137},end:{line:1,column:18214}},line:1},"196":{name:"At",decl:{start:{line:1,column:18223},end:{line:1,column:18225}},loc:{start:{line:1,column:18228},end:{line:1,column:18258}},line:1},"197":{name:"si",decl:{start:{line:1,column:18267},end:{line:1,column:18269}},loc:{start:{line:1,column:18272},end:{line:1,column:18307}},line:1},"198":{name:"Si",decl:{start:{line:1,column:18316},end:{line:1,column:18318}},loc:{start:{line:1,column:18321},end:{line:1,column:18363}},line:1},"199":{name:"Ho",decl:{start:{line:1,column:18372},end:{line:1,column:18374}},loc:{start:{line:1,column:18377},end:{line:1,column:18447}},line:1},"200":{name:"(anonymous_200)",decl:{start:{line:1,column:18407},end:{line:1,column:18408}},loc:{start:{line:1,column:18416},end:{line:1,column:18436}},line:1},"201":{name:"$o",decl:{start:{line:1,column:18456},end:{line:1,column:18458}},loc:{start:{line:1,column:18461},end:{line:1,column:18627}},line:1},"202":{name:"(anonymous_202)",decl:{start:{line:1,column:18490},end:{line:1,column:18491}},loc:{start:{line:1,column:18499},end:{line:1,column:18575}},line:1},"203":{name:"(anonymous_203)",decl:{start:{line:1,column:18522},end:{line:1,column:18523}},loc:{start:{line:1,column:18525},end:{line:1,column:18544}},line:1},"204":{name:"(anonymous_204)",decl:{start:{line:1,column:18584},end:{line:1,column:18585}},loc:{start:{line:1,column:18587},end:{line:1,column:18588}},line:1},"205":{name:"Mn",decl:{start:{line:1,column:18658},end:{line:1,column:18660}},loc:{start:{line:1,column:18663},end:{line:1,column:18699}},line:1},"206":{name:"Bo",decl:{start:{line:1,column:18731},end:{line:1,column:18733}},loc:{start:{line:1,column:18736},end:{line:1,column:18772}},line:1},"207":{name:"Vo",decl:{start:{line:1,column:18800},end:{line:1,column:18802}},loc:{start:{line:1,column:18805},end:{line:1,column:18841}},line:1},"208":{name:"Wo",decl:{start:{line:1,column:18867},end:{line:1,column:18869}},loc:{start:{line:1,column:18872},end:{line:1,column:18908}},line:1},"209":{name:"(anonymous_209)",decl:{start:{line:1,column:18935},end:{line:1,column:18936}},loc:{start:{line:1,column:18949},end:{line:1,column:18978}},line:1},"210":{name:"(anonymous_210)",decl:{start:{line:1,column:18978},end:{line:1,column:18979}},loc:{start:{line:1,column:18996},end:{line:1,column:19146}},line:1},"211":{name:"(anonymous_211)",decl:{start:{line:1,column:19146},end:{line:1,column:19147}},loc:{start:{line:1,column:19164},end:{line:1,column:19272}},line:1},"212":{name:"(anonymous_212)",decl:{start:{line:1,column:19272},end:{line:1,column:19273}},loc:{start:{line:1,column:19287},end:{line:1,column:19361}},line:1},"213":{name:"(anonymous_213)",decl:{start:{line:1,column:19361},end:{line:1,column:19362}},loc:{start:{line:1,column:19379},end:{line:1,column:19871}},line:1},"214":{name:"(anonymous_214)",decl:{start:{line:1,column:19871},end:{line:1,column:19872}},loc:{start:{line:1,column:19885},end:{line:1,column:20029}},line:1},"215":{name:"(anonymous_215)",decl:{start:{line:1,column:20029},end:{line:1,column:20030}},loc:{start:{line:1,column:20048},end:{line:1,column:20118}},line:1},"216":{name:"(anonymous_216)",decl:{start:{line:1,column:20118},end:{line:1,column:20119}},loc:{start:{line:1,column:20131},end:{line:1,column:20290}},line:1},"217":{name:"(anonymous_217)",decl:{start:{line:1,column:20290},end:{line:1,column:20291}},loc:{start:{line:1,column:20308},end:{line:1,column:20562}},line:1},"218":{name:"(anonymous_218)",decl:{start:{line:1,column:20562},end:{line:1,column:20563}},loc:{start:{line:1,column:20578},end:{line:1,column:20986}},line:1},"219":{name:"(anonymous_219)",decl:{start:{line:1,column:20986},end:{line:1,column:20987}},loc:{start:{line:1,column:21003},end:{line:1,column:21040}},line:1},"220":{name:"(anonymous_220)",decl:{start:{line:1,column:21040},end:{line:1,column:21041}},loc:{start:{line:1,column:21058},end:{line:1,column:21147}},line:1},"221":{name:"(anonymous_221)",decl:{start:{line:1,column:21147},end:{line:1,column:21148}},loc:{start:{line:1,column:21157},end:{line:1,column:21207}},line:1},"222":{name:"wi",decl:{start:{line:1,column:21218},end:{line:1,column:21220}},loc:{start:{line:1,column:21223},end:{line:1,column:21271}},line:1},"223":{name:"Ci",decl:{start:{line:1,column:21280},end:{line:1,column:21282}},loc:{start:{line:1,column:21285},end:{line:1,column:21540}},line:1},"224":{name:"Yo",decl:{start:{line:1,column:21549},end:{line:1,column:21551}},loc:{start:{line:1,column:21554},end:{line:1,column:21681}},line:1},"225":{name:"ee",decl:{start:{line:1,column:21690},end:{line:1,column:21692}},loc:{start:{line:1,column:21695},end:{line:1,column:21718}},line:1},"226":{name:"Ei",decl:{start:{line:1,column:21727},end:{line:1,column:21729}},loc:{start:{line:1,column:21756},end:{line:1,column:21790}},line:1},"227":{name:"bi",decl:{start:{line:1,column:21799},end:{line:1,column:21801}},loc:{start:{line:1,column:21804},end:{line:1,column:21963}},line:1},"228":{name:"e",decl:{start:{line:1,column:21820},end:{line:1,column:21821}},loc:{start:{line:1,column:21824},end:{line:1,column:21927}},line:1},"229":{name:"Mi",decl:{start:{line:1,column:21972},end:{line:1,column:21974}},loc:{start:{line:1,column:21985},end:{line:1,column:22267}},line:1},"230":{name:"Ot",decl:{start:{line:1,column:22276},end:{line:1,column:22278}},loc:{start:{line:1,column:22281},end:{line:1,column:22345}},line:1},"231":{name:"We",decl:{start:{line:1,column:22354},end:{line:1,column:22356}},loc:{start:{line:1,column:22359},end:{line:1,column:22406}},line:1},"232":{name:"ai",decl:{start:{line:1,column:22415},end:{line:1,column:22417}},loc:{start:{line:1,column:22424},end:{line:1,column:22518}},line:1},"233":{name:"In",decl:{start:{line:1,column:22527},end:{line:1,column:22529}},loc:{start:{line:1,column:22542},end:{line:1,column:22705}},line:1},"234":{name:"(anonymous_234)",decl:{start:{line:1,column:22617},end:{line:1,column:22618}},loc:{start:{line:1,column:22620},end:{line:1,column:22629}},line:1},"235":{name:"Ii",decl:{start:{line:1,column:22714},end:{line:1,column:22716}},loc:{start:{line:1,column:22723},end:{line:1,column:22835}},line:1},"236":{name:"(anonymous_236)",decl:{start:{line:1,column:22775},end:{line:1,column:22776}},loc:{start:{line:1,column:22784},end:{line:1,column:22813}},line:1},"237":{name:"(anonymous_237)",decl:{start:{line:1,column:22887},end:{line:1,column:22888}},loc:{start:{line:1,column:22905},end:{line:1,column:23068}},line:1},"238":{name:"(anonymous_238)",decl:{start:{line:1,column:23068},end:{line:1,column:23069}},loc:{start:{line:1,column:23076},end:{line:1,column:23149}},line:1},"239":{name:"Qo",decl:{start:{line:1,column:23160},end:{line:1,column:23162}},loc:{start:{line:1,column:23165},end:{line:1,column:23659}},line:1},"240":{name:"(anonymous_240)",decl:{start:{line:1,column:23263},end:{line:1,column:23264}},loc:{start:{line:1,column:23272},end:{line:1,column:23633}},line:1},"241":{name:"(anonymous_241)",decl:{start:{line:1,column:23369},end:{line:1,column:23370}},loc:{start:{line:1,column:23378},end:{line:1,column:23418}},line:1},"242":{name:"(anonymous_242)",decl:{start:{line:1,column:23546},end:{line:1,column:23547}},loc:{start:{line:1,column:23553},end:{line:1,column:23619}},line:1},"243":{name:"(anonymous_243)",decl:{start:{line:1,column:23707},end:{line:1,column:23708}},loc:{start:{line:1,column:23725},end:{line:1,column:23782}},line:1},"244":{name:"Ko",decl:{start:{line:1,column:23793},end:{line:1,column:23795}},loc:{start:{line:1,column:23802},end:{line:1,column:24000}},line:1},"245":{name:"Zo",decl:{start:{line:1,column:24009},end:{line:1,column:24011}},loc:{start:{line:1,column:24018},end:{line:1,column:24133}},line:1},"246":{name:"Jo",decl:{start:{line:1,column:24142},end:{line:1,column:24144}},loc:{start:{line:1,column:24147},end:{line:1,column:24185}},line:1},"247":{name:"Ti",decl:{start:{line:1,column:24194},end:{line:1,column:24196}},loc:{start:{line:1,column:24203},end:{line:1,column:24611}},line:1},"248":{name:"qe",decl:{start:{line:1,column:24620},end:{line:1,column:24622}},loc:{start:{line:1,column:24629},end:{line:1,column:25068}},line:1},"249":{name:"(anonymous_249)",decl:{start:{line:1,column:24715},end:{line:1,column:24716}},loc:{start:{line:1,column:24718},end:{line:1,column:24723}},line:1},"250":{name:"(anonymous_250)",decl:{start:{line:1,column:24897},end:{line:1,column:24898}},loc:{start:{line:1,column:24906},end:{line:1,column:24974}},line:1},"251":{name:"(anonymous_251)",decl:{start:{line:1,column:25011},end:{line:1,column:25012}},loc:{start:{line:1,column:25020},end:{line:1,column:25045}},line:1},"252":{name:"Xo",decl:{start:{line:1,column:25077},end:{line:1,column:25079}},loc:{start:{line:1,column:25086},end:{line:1,column:25455}},line:1},"253":{name:"Pn",decl:{start:{line:1,column:25464},end:{line:1,column:25466}},loc:{start:{line:1,column:25473},end:{line:1,column:25813}},line:1},"254":{name:"es",decl:{start:{line:1,column:25822},end:{line:1,column:25824}},loc:{start:{line:1,column:25827},end:{line:1,column:25950}},line:1},"255":{name:"(anonymous_255)",decl:{start:{line:1,column:25870},end:{line:1,column:25871}},loc:{start:{line:1,column:25879},end:{line:1,column:25946}},line:1},"256":{name:"ci",decl:{start:{line:1,column:25959},end:{line:1,column:25961}},loc:{start:{line:1,column:25964},end:{line:1,column:26031}},line:1},"257":{name:"(anonymous_257)",decl:{start:{line:1,column:26007},end:{line:1,column:26008}},loc:{start:{line:1,column:26016},end:{line:1,column:26027}},line:1},"258":{name:"ui",decl:{start:{line:1,column:26040},end:{line:1,column:26042}},loc:{start:{line:1,column:26049},end:{line:1,column:26086}},line:1},"259":{name:"(anonymous_259)",decl:{start:{line:1,column:26109},end:{line:1,column:26110}},loc:{start:{line:1,column:26120},end:{line:1,column:26832}},line:1},"260":{name:"(anonymous_260)",decl:{start:{line:1,column:26856},end:{line:1,column:26857}},loc:{start:{line:1,column:26872},end:{line:1,column:26894}},line:1},"261":{name:"(anonymous_261)",decl:{start:{line:1,column:26970},end:{line:1,column:26971}},loc:{start:{line:1,column:27008},end:{line:1,column:27066}},line:1},"262":{name:"(anonymous_262)",decl:{start:{line:1,column:27066},end:{line:1,column:27067}},loc:{start:{line:1,column:27076},end:{line:1,column:27137}},line:1},"263":{name:"(anonymous_263)",decl:{start:{line:1,column:27196},end:{line:1,column:27197}},loc:{start:{line:1,column:27214},end:{line:1,column:27251}},line:1},"264":{name:"(anonymous_264)",decl:{start:{line:1,column:27251},end:{line:1,column:27252}},loc:{start:{line:1,column:27261},end:{line:1,column:27368}},line:1},"265":{name:"(anonymous_265)",decl:{start:{line:1,column:27373},end:{line:1,column:27374}},loc:{start:{line:1,column:27384},end:{line:1,column:27591}},line:1},"266":{name:"(anonymous_266)",decl:{start:{line:1,column:27604},end:{line:1,column:27605}},loc:{start:{line:1,column:27615},end:{line:1,column:27751}},line:1},"267":{name:"(anonymous_267)",decl:{start:{line:1,column:27815},end:{line:1,column:27816}},loc:{start:{line:1,column:27835},end:{line:1,column:27873}},line:1},"268":{name:"(anonymous_268)",decl:{start:{line:1,column:27873},end:{line:1,column:27874}},loc:{start:{line:1,column:27883},end:{line:1,column:27945}},line:1},"269":{name:"Di",decl:{start:{line:1,column:27956},end:{line:1,column:27958}},loc:{start:{line:1,column:27961},end:{line:1,column:28045}},line:1},"270":{name:"(anonymous_270)",decl:{start:{line:1,column:28104},end:{line:1,column:28105}},loc:{start:{line:1,column:28124},end:{line:1,column:28162}},line:1},"271":{name:"(anonymous_271)",decl:{start:{line:1,column:28219},end:{line:1,column:28220}},loc:{start:{line:1,column:28239},end:{line:1,column:28278}},line:1},"272":{name:"(anonymous_272)",decl:{start:{line:1,column:28278},end:{line:1,column:28279}},loc:{start:{line:1,column:28288},end:{line:1,column:28371}},line:1},"273":{name:"(anonymous_273)",decl:{start:{line:1,column:28440},end:{line:1,column:28441}},loc:{start:{line:1,column:28460},end:{line:1,column:28510}},line:1},"274":{name:"(anonymous_274)",decl:{start:{line:1,column:28510},end:{line:1,column:28511}},loc:{start:{line:1,column:28520},end:{line:1,column:28652}},line:1},"275":{name:"(anonymous_275)",decl:{start:{line:1,column:28721},end:{line:1,column:28722}},loc:{start:{line:1,column:28741},end:{line:1,column:28791}},line:1},"276":{name:"(anonymous_276)",decl:{start:{line:1,column:28791},end:{line:1,column:28792}},loc:{start:{line:1,column:28801},end:{line:1,column:28933}},line:1},"277":{name:"(anonymous_277)",decl:{start:{line:1,column:29015},end:{line:1,column:29016}},loc:{start:{line:1,column:29037},end:{line:1,column:29109}},line:1},"278":{name:"(anonymous_278)",decl:{start:{line:1,column:29109},end:{line:1,column:29110}},loc:{start:{line:1,column:29119},end:{line:1,column:29289}},line:1},"279":{name:"(anonymous_279)",decl:{start:{line:1,column:29354},end:{line:1,column:29355}},loc:{start:{line:1,column:29374},end:{line:1,column:29424}},line:1},"280":{name:"(anonymous_280)",decl:{start:{line:1,column:29424},end:{line:1,column:29425}},loc:{start:{line:1,column:29434},end:{line:1,column:29562}},line:1},"281":{name:"(anonymous_281)",decl:{start:{line:1,column:29625},end:{line:1,column:29626}},loc:{start:{line:1,column:29645},end:{line:1,column:29695}},line:1},"282":{name:"(anonymous_282)",decl:{start:{line:1,column:29695},end:{line:1,column:29696}},loc:{start:{line:1,column:29705},end:{line:1,column:29831}},line:1},"283":{name:"(anonymous_283)",decl:{start:{line:1,column:29876},end:{line:1,column:29877}},loc:{start:{line:1,column:29890},end:{line:1,column:29904}},line:1},"284":{name:"(anonymous_284)",decl:{start:{line:1,column:29904},end:{line:1,column:29905}},loc:{start:{line:1,column:29914},end:{line:1,column:29970}},line:1},"285":{name:"(anonymous_285)",decl:{start:{line:1,column:30013},end:{line:1,column:30014}},loc:{start:{line:1,column:30027},end:{line:1,column:30041}},line:1},"286":{name:"(anonymous_286)",decl:{start:{line:1,column:30041},end:{line:1,column:30042}},loc:{start:{line:1,column:30051},end:{line:1,column:30105}},line:1},"287":{name:"(anonymous_287)",decl:{start:{line:1,column:30153},end:{line:1,column:30154}},loc:{start:{line:1,column:30167},end:{line:1,column:30184}},line:1},"288":{name:"(anonymous_288)",decl:{start:{line:1,column:30184},end:{line:1,column:30185}},loc:{start:{line:1,column:30194},end:{line:1,column:30298}},line:1},"289":{name:"(anonymous_289)",decl:{start:{line:1,column:30344},end:{line:1,column:30345}},loc:{start:{line:1,column:30358},end:{line:1,column:30375}},line:1},"290":{name:"(anonymous_290)",decl:{start:{line:1,column:30375},end:{line:1,column:30376}},loc:{start:{line:1,column:30385},end:{line:1,column:30487}},line:1},"291":{name:"(anonymous_291)",decl:{start:{line:1,column:30530},end:{line:1,column:30531}},loc:{start:{line:1,column:30544},end:{line:1,column:30561}},line:1},"292":{name:"(anonymous_292)",decl:{start:{line:1,column:30561},end:{line:1,column:30562}},loc:{start:{line:1,column:30571},end:{line:1,column:30670}},line:1},"293":{name:"(anonymous_293)",decl:{start:{line:1,column:30711},end:{line:1,column:30712}},loc:{start:{line:1,column:30725},end:{line:1,column:30742}},line:1},"294":{name:"(anonymous_294)",decl:{start:{line:1,column:30742},end:{line:1,column:30743}},loc:{start:{line:1,column:30752},end:{line:1,column:30849}},line:1},"295":{name:"(anonymous_295)",decl:{start:{line:1,column:30917},end:{line:1,column:30918}},loc:{start:{line:1,column:30937},end:{line:1,column:31009}},line:1},"296":{name:"(anonymous_296)",decl:{start:{line:1,column:31009},end:{line:1,column:31010}},loc:{start:{line:1,column:31019},end:{line:1,column:31147}},line:1},"297":{name:"(anonymous_297)",decl:{start:{line:1,column:31210},end:{line:1,column:31211}},loc:{start:{line:1,column:31226},end:{line:1,column:31271}},line:1},"298":{name:"ts",decl:{start:{line:1,column:31282},end:{line:1,column:31284}},loc:{start:{line:1,column:31287},end:{line:1,column:31353}},line:1},"299":{name:"(anonymous_299)",decl:{start:{line:1,column:31426},end:{line:1,column:31427}},loc:{start:{line:1,column:31440},end:{line:1,column:31509}},line:1},"300":{name:"(anonymous_300)",decl:{start:{line:1,column:31509},end:{line:1,column:31510}},loc:{start:{line:1,column:31523},end:{line:1,column:31584}},line:1},"301":{name:"(anonymous_301)",decl:{start:{line:1,column:31590},end:{line:1,column:31591}},loc:{start:{line:1,column:31594},end:{line:1,column:32250}},line:1},"302":{name:"(anonymous_302)",decl:{start:{line:1,column:31633},end:{line:1,column:31634}},loc:{start:{line:1,column:31647},end:{line:1,column:31668}},line:1},"303":{name:"(anonymous_303)",decl:{start:{line:1,column:31668},end:{line:1,column:31669}},loc:{start:{line:1,column:31693},end:{line:1,column:31761}},line:1},"304":{name:"(anonymous_304)",decl:{start:{line:1,column:31761},end:{line:1,column:31762}},loc:{start:{line:1,column:31786},end:{line:1,column:31848}},line:1},"305":{name:"(anonymous_305)",decl:{start:{line:1,column:31848},end:{line:1,column:31849}},loc:{start:{line:1,column:31869},end:{line:1,column:31921}},line:1},"306":{name:"(anonymous_306)",decl:{start:{line:1,column:31921},end:{line:1,column:31922}},loc:{start:{line:1,column:31942},end:{line:1,column:31959}},line:1},"307":{name:"(anonymous_307)",decl:{start:{line:1,column:31959},end:{line:1,column:31960}},loc:{start:{line:1,column:31980},end:{line:1,column:32071}},line:1},"308":{name:"(anonymous_308)",decl:{start:{line:1,column:32071},end:{line:1,column:32072}},loc:{start:{line:1,column:32084},end:{line:1,column:32119}},line:1},"309":{name:"(anonymous_309)",decl:{start:{line:1,column:32136},end:{line:1,column:32137}},loc:{start:{line:1,column:32147},end:{line:1,column:32171}},line:1},"310":{name:"(anonymous_310)",decl:{start:{line:1,column:32269},end:{line:1,column:32270}},loc:{start:{line:1,column:32283},end:{line:1,column:32297}},line:1},"311":{name:"(anonymous_311)",decl:{start:{line:1,column:32297},end:{line:1,column:32298}},loc:{start:{line:1,column:32307},end:{line:1,column:32332}},line:1},"312":{name:"(anonymous_312)",decl:{start:{line:1,column:32332},end:{line:1,column:32333}},loc:{start:{line:1,column:32341},end:{line:1,column:32406}},line:1},"313":{name:"(anonymous_313)",decl:{start:{line:1,column:32406},end:{line:1,column:32407}},loc:{start:{line:1,column:32417},end:{line:1,column:32480}},line:1},"314":{name:"(anonymous_314)",decl:{start:{line:1,column:32465},end:{line:1,column:32466}},loc:{start:{line:1,column:32468},end:{line:1,column:32475}},line:1},"315":{name:"(anonymous_315)",decl:{start:{line:1,column:32480},end:{line:1,column:32481}},loc:{start:{line:1,column:32493},end:{line:1,column:32572}},line:1},"316":{name:"(anonymous_316)",decl:{start:{line:1,column:32572},end:{line:1,column:32573}},loc:{start:{line:1,column:32583},end:{line:1,column:32684}},line:1},"317":{name:"(anonymous_317)",decl:{start:{line:1,column:32655},end:{line:1,column:32656}},loc:{start:{line:1,column:32658},end:{line:1,column:32665}},line:1},"318":{name:"(anonymous_318)",decl:{start:{line:1,column:32674},end:{line:1,column:32675}},loc:{start:{line:1,column:32677},end:{line:1,column:32682}},line:1},"319":{name:"(anonymous_319)",decl:{start:{line:1,column:32684},end:{line:1,column:32685}},loc:{start:{line:1,column:32699},end:{line:1,column:32740}},line:1},"320":{name:"(anonymous_320)",decl:{start:{line:1,column:32728},end:{line:1,column:32729}},loc:{start:{line:1,column:32731},end:{line:1,column:32738}},line:1},"321":{name:"Un",decl:{start:{line:1,column:32751},end:{line:1,column:32753}},loc:{start:{line:1,column:32758},end:{line:1,column:32848}},line:1},"322":{name:"Ln",decl:{start:{line:1,column:32857},end:{line:1,column:32859}},loc:{start:{line:1,column:32864},end:{line:1,column:32972}},line:1},"323":{name:"(anonymous_323)",decl:{start:{line:1,column:32999},end:{line:1,column:33000}},loc:{start:{line:1,column:33015},end:{line:1,column:33045}},line:1},"324":{name:"(anonymous_324)",decl:{start:{line:1,column:33045},end:{line:1,column:33046}},loc:{start:{line:1,column:33055},end:{line:1,column:33088}},line:1},"325":{name:"ve",decl:{start:{line:1,column:33099},end:{line:1,column:33101}},loc:{start:{line:1,column:33104},end:{line:1,column:33169}},line:1},"326":{name:"(anonymous_326)",decl:{start:{line:1,column:33143},end:{line:1,column:33144}},loc:{start:{line:1,column:33146},end:{line:1,column:33165}},line:1},"327":{name:"(anonymous_327)",decl:{start:{line:1,column:33202},end:{line:1,column:33203}},loc:{start:{line:1,column:33218},end:{line:1,column:33255}},line:1},"328":{name:"(anonymous_328)",decl:{start:{line:1,column:33255},end:{line:1,column:33256}},loc:{start:{line:1,column:33265},end:{line:1,column:33298}},line:1},"329":{name:"Ai",decl:{start:{line:1,column:33309},end:{line:1,column:33311}},loc:{start:{line:1,column:33316},end:{line:1,column:33480}},line:1},"330":{name:"ns",decl:{start:{line:1,column:33489},end:{line:1,column:33491}},loc:{start:{line:1,column:33496},end:{line:1,column:33582}},line:1},"331":{name:"(anonymous_331)",decl:{start:{line:1,column:33789},end:{line:1,column:33790}},loc:{start:{line:1,column:33817},end:{line:1,column:34109}},line:1},"332":{name:"(anonymous_332)",decl:{start:{line:1,column:34015},end:{line:1,column:34016}},loc:{start:{line:1,column:34018},end:{line:1,column:34023}},line:1},"333":{name:"(anonymous_333)",decl:{start:{line:1,column:34109},end:{line:1,column:34110}},loc:{start:{line:1,column:34126},end:{line:1,column:34167}},line:1},"334":{name:"(anonymous_334)",decl:{start:{line:1,column:34167},end:{line:1,column:34168}},loc:{start:{line:1,column:34177},end:{line:1,column:34208}},line:1},"335":{name:"(anonymous_335)",decl:{start:{line:1,column:34208},end:{line:1,column:34209}},loc:{start:{line:1,column:34220},end:{line:1,column:34259}},line:1},"336":{name:"(anonymous_336)",decl:{start:{line:1,column:34259},end:{line:1,column:34260}},loc:{start:{line:1,column:34275},end:{line:1,column:34318}},line:1},"337":{name:"(anonymous_337)",decl:{start:{line:1,column:34318},end:{line:1,column:34319}},loc:{start:{line:1,column:34332},end:{line:1,column:34373}},line:1},"338":{name:"(anonymous_338)",decl:{start:{line:1,column:34373},end:{line:1,column:34374}},loc:{start:{line:1,column:34391},end:{line:1,column:34436}},line:1},"339":{name:"(anonymous_339)",decl:{start:{line:1,column:34436},end:{line:1,column:34437}},loc:{start:{line:1,column:34450},end:{line:1,column:34520}},line:1},"340":{name:"(anonymous_340)",decl:{start:{line:1,column:34494},end:{line:1,column:34495}},loc:{start:{line:1,column:34497},end:{line:1,column:34502}},line:1},"341":{name:"(anonymous_341)",decl:{start:{line:1,column:34520},end:{line:1,column:34521}},loc:{start:{line:1,column:34539},end:{line:1,column:34624}},line:1},"342":{name:"(anonymous_342)",decl:{start:{line:1,column:34593},end:{line:1,column:34594}},loc:{start:{line:1,column:34596},end:{line:1,column:34601}},line:1},"343":{name:"(anonymous_343)",decl:{start:{line:1,column:34624},end:{line:1,column:34625}},loc:{start:{line:1,column:34634},end:{line:1,column:34715}},line:1},"344":{name:"Vn",decl:{start:{line:1,column:34726},end:{line:1,column:34728}},loc:{start:{line:1,column:34747},end:{line:1,column:35114}},line:1},"345":{name:"(anonymous_345)",decl:{start:{line:1,column:35275},end:{line:1,column:35276}},loc:{start:{line:1,column:35286},end:{line:1,column:35310}},line:1},"346":{name:"(anonymous_346)",decl:{start:{line:1,column:35310},end:{line:1,column:35311}},loc:{start:{line:1,column:35342},end:{line:1,column:35509}},line:1},"347":{name:"(anonymous_347)",decl:{start:{line:1,column:35509},end:{line:1,column:35510}},loc:{start:{line:1,column:35519},end:{line:1,column:35550}},line:1},"348":{name:"(anonymous_348)",decl:{start:{line:1,column:35550},end:{line:1,column:35551}},loc:{start:{line:1,column:35562},end:{line:1,column:35601}},line:1},"349":{name:"(anonymous_349)",decl:{start:{line:1,column:35601},end:{line:1,column:35602}},loc:{start:{line:1,column:35617},end:{line:1,column:35660}},line:1},"350":{name:"(anonymous_350)",decl:{start:{line:1,column:35660},end:{line:1,column:35661}},loc:{start:{line:1,column:35674},end:{line:1,column:35715}},line:1},"351":{name:"(anonymous_351)",decl:{start:{line:1,column:35715},end:{line:1,column:35716}},loc:{start:{line:1,column:35733},end:{line:1,column:35778}},line:1},"352":{name:"(anonymous_352)",decl:{start:{line:1,column:35778},end:{line:1,column:35779}},loc:{start:{line:1,column:35792},end:{line:1,column:35848}},line:1},"353":{name:"(anonymous_353)",decl:{start:{line:1,column:35848},end:{line:1,column:35849}},loc:{start:{line:1,column:35867},end:{line:1,column:35938}},line:1},"354":{name:"(anonymous_354)",decl:{start:{line:1,column:35938},end:{line:1,column:35939}},loc:{start:{line:1,column:35948},end:{line:1,column:36078}},line:1},"355":{name:"(anonymous_355)",decl:{start:{line:1,column:35968},end:{line:1,column:35969}},loc:{start:{line:1,column:35971},end:{line:1,column:35983}},line:1},"356":{name:"(anonymous_356)",decl:{start:{line:1,column:36104},end:{line:1,column:36105}},loc:{start:{line:1,column:36120},end:{line:1,column:36152}},line:1},"357":{name:"(anonymous_357)",decl:{start:{line:1,column:36152},end:{line:1,column:36153}},loc:{start:{line:1,column:36162},end:{line:1,column:36185}},line:1},"358":{name:"Gn",decl:{start:{line:1,column:36196},end:{line:1,column:36198}},loc:{start:{line:1,column:36203},end:{line:1,column:36258}},line:1},"359":{name:"(anonymous_359)",decl:{start:{line:1,column:36246},end:{line:1,column:36247}},loc:{start:{line:1,column:36249},end:{line:1,column:36256}},line:1},"360":{name:"_i",decl:{start:{line:1,column:36267},end:{line:1,column:36269}},loc:{start:{line:1,column:36272},end:{line:1,column:36366}},line:1},"361":{name:"Tn",decl:{start:{line:1,column:36375},end:{line:1,column:36377}},loc:{start:{line:1,column:36380},end:{line:1,column:36796}},line:1},"362":{name:"xn",decl:{start:{line:1,column:36805},end:{line:1,column:36807}},loc:{start:{line:1,column:36812},end:{line:1,column:36929}},line:1},"363":{name:"Oi",decl:{start:{line:1,column:36938},end:{line:1,column:36940}},loc:{start:{line:1,column:36943},end:{line:1,column:36992}},line:1},"364":{name:"(anonymous_364)",decl:{start:{line:1,column:37013},end:{line:1,column:37014}},loc:{start:{line:1,column:37017},end:{line:1,column:39717}},line:1},"365":{name:"(anonymous_365)",decl:{start:{line:1,column:37041},end:{line:1,column:37042}},loc:{start:{line:1,column:37068},end:{line:1,column:37091}},line:1},"366":{name:"(anonymous_366)",decl:{start:{line:1,column:37352},end:{line:1,column:37353}},loc:{start:{line:1,column:37366},end:{line:1,column:37566}},line:1},"367":{name:"(anonymous_367)",decl:{start:{line:1,column:37566},end:{line:1,column:37567}},loc:{start:{line:1,column:37579},end:{line:1,column:37726}},line:1},"368":{name:"(anonymous_368)",decl:{start:{line:1,column:37726},end:{line:1,column:37727}},loc:{start:{line:1,column:37754},end:{line:1,column:37811}},line:1},"369":{name:"(anonymous_369)",decl:{start:{line:1,column:37811},end:{line:1,column:37812}},loc:{start:{line:1,column:37821},end:{line:1,column:37854}},line:1},"370":{name:"(anonymous_370)",decl:{start:{line:1,column:37854},end:{line:1,column:37855}},loc:{start:{line:1,column:37880},end:{line:1,column:38106}},line:1},"371":{name:"(anonymous_371)",decl:{start:{line:1,column:38106},end:{line:1,column:38107}},loc:{start:{line:1,column:38123},end:{line:1,column:38147}},line:1},"372":{name:"(anonymous_372)",decl:{start:{line:1,column:38147},end:{line:1,column:38148}},loc:{start:{line:1,column:38162},end:{line:1,column:38234}},line:1},"373":{name:"(anonymous_373)",decl:{start:{line:1,column:38234},end:{line:1,column:38235}},loc:{start:{line:1,column:38254},end:{line:1,column:38323}},line:1},"374":{name:"(anonymous_374)",decl:{start:{line:1,column:38323},end:{line:1,column:38324}},loc:{start:{line:1,column:38347},end:{line:1,column:38414}},line:1},"375":{name:"(anonymous_375)",decl:{start:{line:1,column:38414},end:{line:1,column:38415}},loc:{start:{line:1,column:38422},end:{line:1,column:38597}},line:1},"376":{name:"(anonymous_376)",decl:{start:{line:1,column:38597},end:{line:1,column:38598}},loc:{start:{line:1,column:38608},end:{line:1,column:38777}},line:1},"377":{name:"(anonymous_377)",decl:{start:{line:1,column:38777},end:{line:1,column:38778}},loc:{start:{line:1,column:38789},end:{line:1,column:38932}},line:1},"378":{name:"(anonymous_378)",decl:{start:{line:1,column:38932},end:{line:1,column:38933}},loc:{start:{line:1,column:38949},end:{line:1,column:39396}},line:1},"379":{name:"(anonymous_379)",decl:{start:{line:1,column:39413},end:{line:1,column:39414}},loc:{start:{line:1,column:39424},end:{line:1,column:39442}},line:1},"380":{name:"(anonymous_380)",decl:{start:{line:1,column:39768},end:{line:1,column:39769}},loc:{start:{line:1,column:39788},end:{line:1,column:39855}},line:1},"381":{name:"(anonymous_381)",decl:{start:{line:1,column:39855},end:{line:1,column:39856}},loc:{start:{line:1,column:39863},end:{line:1,column:39958}},line:1},"382":{name:"(anonymous_382)",decl:{start:{line:1,column:39977},end:{line:1,column:39978}},loc:{start:{line:1,column:39981},end:{line:1,column:40834}},line:1},"383":{name:"(anonymous_383)",decl:{start:{line:1,column:40022},end:{line:1,column:40023}},loc:{start:{line:1,column:40060},end:{line:1,column:40123}},line:1},"384":{name:"(anonymous_384)",decl:{start:{line:1,column:40123},end:{line:1,column:40124}},loc:{start:{line:1,column:40150},end:{line:1,column:40241}},line:1},"385":{name:"(anonymous_385)",decl:{start:{line:1,column:40241},end:{line:1,column:40242}},loc:{start:{line:1,column:40264},end:{line:1,column:40727}},line:1},"386":{name:"(anonymous_386)",decl:{start:{line:1,column:40334},end:{line:1,column:40335}},loc:{start:{line:1,column:40348},end:{line:1,column:40397}},line:1},"387":{name:"(anonymous_387)",decl:{start:{line:1,column:40411},end:{line:1,column:40412}},loc:{start:{line:1,column:40414},end:{line:1,column:40687}},line:1},"388":{name:"(anonymous_388)",decl:{start:{line:1,column:40744},end:{line:1,column:40745}},loc:{start:{line:1,column:40755},end:{line:1,column:40773}},line:1},"389":{name:"(anonymous_389)",decl:{start:{line:1,column:40842},end:{line:1,column:40843}},loc:{start:{line:1,column:40846},end:{line:1,column:41101}},line:1},"390":{name:"(anonymous_390)",decl:{start:{line:1,column:40872},end:{line:1,column:40873}},loc:{start:{line:1,column:40883},end:{line:1,column:40901}},line:1},"391":{name:"(anonymous_391)",decl:{start:{line:1,column:41014},end:{line:1,column:41015}},loc:{start:{line:1,column:41027},end:{line:1,column:41055}},line:1},"392":{name:"Kn",decl:{start:{line:1,column:41114},end:{line:1,column:41116}},loc:{start:{line:1,column:41119},end:{line:1,column:41295}},line:1},"393":{name:"rs",decl:{start:{line:1,column:41304},end:{line:1,column:41306}},loc:{start:{line:1,column:41313},end:{line:1,column:41370}},line:1},"394":{name:"Je",decl:{start:{line:1,column:41379},end:{line:1,column:41381}},loc:{start:{line:1,column:41388},end:{line:1,column:41747}},line:1},"395":{name:"(anonymous_395)",decl:{start:{line:1,column:41666},end:{line:1,column:41667}},loc:{start:{line:1,column:41669},end:{line:1,column:41676}},line:1},"396":{name:"(anonymous_396)",decl:{start:{line:1,column:41716},end:{line:1,column:41717}},loc:{start:{line:1,column:41719},end:{line:1,column:41726}},line:1},"397":{name:"is",decl:{start:{line:1,column:41756},end:{line:1,column:41758}},loc:{start:{line:1,column:41765},end:{line:1,column:41898}},line:1},"398":{name:"(anonymous_398)",decl:{start:{line:1,column:41788},end:{line:1,column:41789}},loc:{start:{line:1,column:41791},end:{line:1,column:41896}},line:1},"399":{name:"os",decl:{start:{line:1,column:41907},end:{line:1,column:41909}},loc:{start:{line:1,column:41912},end:{line:1,column:42032}},line:1},"400":{name:"(anonymous_400)",decl:{start:{line:1,column:42082},end:{line:1,column:42083}},loc:{start:{line:1,column:42098},end:{line:1,column:42150}},line:1},"401":{name:"Vt",decl:{start:{line:1,column:42193},end:{line:1,column:42195}},loc:{start:{line:1,column:42200},end:{line:1,column:42370}},line:1},"402":{name:"Ui",decl:{start:{line:1,column:42379},end:{line:1,column:42381}},loc:{start:{line:1,column:42386},end:{line:1,column:42480}},line:1},"403":{name:"ss",decl:{start:{line:1,column:42489},end:{line:1,column:42491}},loc:{start:{line:1,column:42494},end:{line:1,column:42519}},line:1},"404":{name:"Li",decl:{start:{line:1,column:42528},end:{line:1,column:42530}},loc:{start:{line:1,column:42533},end:{line:1,column:42551}},line:1},"405":{name:"(anonymous_405)",decl:{start:{line:1,column:42638},end:{line:1,column:42639}},loc:{start:{line:1,column:42660},end:{line:1,column:42770}},line:1},"406":{name:"(anonymous_406)",decl:{start:{line:1,column:42770},end:{line:1,column:42771}},loc:{start:{line:1,column:42781},end:{line:1,column:42946}},line:1},"407":{name:"(anonymous_407)",decl:{start:{line:1,column:42946},end:{line:1,column:42947}},loc:{start:{line:1,column:42974},end:{line:1,column:43148}},line:1},"408":{name:"(anonymous_408)",decl:{start:{line:1,column:43006},end:{line:1,column:43007}},loc:{start:{line:1,column:43009},end:{line:1,column:43075}},line:1},"409":{name:"(anonymous_409)",decl:{start:{line:1,column:43102},end:{line:1,column:43103}},loc:{start:{line:1,column:43105},end:{line:1,column:43146}},line:1},"410":{name:"(anonymous_410)",decl:{start:{line:1,column:43148},end:{line:1,column:43149}},loc:{start:{line:1,column:43171},end:{line:1,column:43390}},line:1},"411":{name:"(anonymous_411)",decl:{start:{line:1,column:43390},end:{line:1,column:43391}},loc:{start:{line:1,column:43424},end:{line:1,column:43571}},line:1},"412":{name:"(anonymous_412)",decl:{start:{line:1,column:43571},end:{line:1,column:43572}},loc:{start:{line:1,column:43602},end:{line:1,column:43912}},line:1},"413":{name:"(anonymous_413)",decl:{start:{line:1,column:43912},end:{line:1,column:43913}},loc:{start:{line:1,column:43941},end:{line:1,column:44193}},line:1},"414":{name:"(anonymous_414)",decl:{start:{line:1,column:44193},end:{line:1,column:44194}},loc:{start:{line:1,column:44219},end:{line:1,column:44407}},line:1},"415":{name:"(anonymous_415)",decl:{start:{line:1,column:44251},end:{line:1,column:44252}},loc:{start:{line:1,column:44254},end:{line:1,column:44342}},line:1},"416":{name:"(anonymous_416)",decl:{start:{line:1,column:44407},end:{line:1,column:44408}},loc:{start:{line:1,column:44428},end:{line:1,column:45186}},line:1},"417":{name:"(anonymous_417)",decl:{start:{line:1,column:45208},end:{line:1,column:45209}},loc:{start:{line:1,column:45222},end:{line:1,column:45276}},line:1},"418":{name:"(anonymous_418)",decl:{start:{line:1,column:45303},end:{line:1,column:45304}},loc:{start:{line:1,column:45319},end:{line:1,column:45350}},line:1},"419":{name:"as",decl:{start:{line:1,column:45361},end:{line:1,column:45363}},loc:{start:{line:1,column:45370},end:{line:1,column:45429}},line:1},"420":{name:"cs",decl:{start:{line:1,column:45438},end:{line:1,column:45440}},loc:{start:{line:1,column:45443},end:{line:1,column:45546}},line:1},"421":{name:"Te",decl:{start:{line:1,column:45555},end:{line:1,column:45557}},loc:{start:{line:1,column:45562},end:{line:1,column:45646}},line:1},"422":{name:"Be",decl:{start:{line:1,column:45655},end:{line:1,column:45657}},loc:{start:{line:1,column:45714},end:{line:1,column:45894}},line:1},"423":{name:"(anonymous_423)",decl:{start:{line:1,column:45753},end:{line:1,column:45754}},loc:{start:{line:1,column:45756},end:{line:1,column:45830}},line:1},"424":{name:"(anonymous_424)",decl:{start:{line:1,column:45858},end:{line:1,column:45859}},loc:{start:{line:1,column:45867},end:{line:1,column:45890}},line:1},"425":{name:"us",decl:{start:{line:1,column:45903},end:{line:1,column:45905}},loc:{start:{line:1,column:45962},end:{line:1,column:46481}},line:1},"426":{name:"ls",decl:{start:{line:1,column:46490},end:{line:1,column:46492}},loc:{start:{line:1,column:46499},end:{line:1,column:46842}},line:1},"427":{name:"(anonymous_427)",decl:{start:{line:1,column:46556},end:{line:1,column:46557}},loc:{start:{line:1,column:46560},end:{line:1,column:46566}},line:1},"428":{name:"Ve",decl:{start:{line:1,column:46851},end:{line:1,column:46853}},loc:{start:{line:1,column:46860},end:{line:1,column:47180}},line:1},"429":{name:"(anonymous_429)",decl:{start:{line:1,column:46909},end:{line:1,column:46910}},loc:{start:{line:1,column:46918},end:{line:1,column:46989}},line:1},"430":{name:"nt",decl:{start:{line:1,column:47189},end:{line:1,column:47191}},loc:{start:{line:1,column:47194},end:{line:1,column:47223}},line:1},"431":{name:"ds",decl:{start:{line:1,column:47232},end:{line:1,column:47234}},loc:{start:{line:1,column:47237},end:{line:1,column:47265}},line:1},"432":{name:"hs",decl:{start:{line:1,column:47274},end:{line:1,column:47276}},loc:{start:{line:1,column:47279},end:{line:1,column:47304}},line:1},"433":{name:"fs",decl:{start:{line:1,column:47313},end:{line:1,column:47315}},loc:{start:{line:1,column:47318},end:{line:1,column:47347}},line:1},"434":{name:"ps",decl:{start:{line:1,column:47356},end:{line:1,column:47358}},loc:{start:{line:1,column:47361},end:{line:1,column:47395}},line:1},"435":{name:"gs",decl:{start:{line:1,column:47404},end:{line:1,column:47406}},loc:{start:{line:1,column:47409},end:{line:1,column:47440}},line:1},"436":{name:"vs",decl:{start:{line:1,column:47449},end:{line:1,column:47451}},loc:{start:{line:1,column:47454},end:{line:1,column:47480}},line:1},"437":{name:"xi",decl:{start:{line:1,column:47489},end:{line:1,column:47491}},loc:{start:{line:1,column:47494},end:{line:1,column:47542}},line:1},"438":{name:"Ie",decl:{start:{line:1,column:47582},end:{line:1,column:47584}},loc:{start:{line:1,column:47586},end:{line:1,column:47749}},line:1},"439":{name:"(anonymous_439)",decl:{start:{line:1,column:47596},end:{line:1,column:47597}},loc:{start:{line:1,column:47599},end:{line:1,column:47747}},line:1},"440":{name:"(anonymous_440)",decl:{start:{line:1,column:47608},end:{line:1,column:47609}},loc:{start:{line:1,column:47611},end:{line:1,column:47631}},line:1},"441":{name:"(anonymous_441)",decl:{start:{line:1,column:47641},end:{line:1,column:47642}},loc:{start:{line:1,column:47644},end:{line:1,column:47726}},line:1},"442":{name:"(anonymous_442)",decl:{start:{line:1,column:47730},end:{line:1,column:47731}},loc:{start:{line:1,column:47733},end:{line:1,column:47739}},line:1},"443":{name:"ms",decl:{start:{line:1,column:47758},end:{line:1,column:47760}},loc:{start:{line:1,column:47763},end:{line:1,column:47794}},line:1},"444":{name:"ji",decl:{start:{line:1,column:47803},end:{line:1,column:47805}},loc:{start:{line:1,column:47808},end:{line:1,column:47969}},line:1},"445":{name:"(anonymous_445)",decl:{start:{line:1,column:47855},end:{line:1,column:47856}},loc:{start:{line:1,column:47858},end:{line:1,column:47967}},line:1},"446":{name:"(anonymous_446)",decl:{start:{line:1,column:47865},end:{line:1,column:47866}},loc:{start:{line:1,column:47869},end:{line:1,column:47892}},line:1},"447":{name:"(anonymous_447)",decl:{start:{line:1,column:47930},end:{line:1,column:47931}},loc:{start:{line:1,column:47934},end:{line:1,column:47966}},line:1},"448":{name:"ki",decl:{start:{line:1,column:47978},end:{line:1,column:47980}},loc:{start:{line:1,column:47983},end:{line:1,column:48001}},line:1},"449":{name:"ys",decl:{start:{line:1,column:48010},end:{line:1,column:48012}},loc:{start:{line:1,column:48015},end:{line:1,column:48270}},line:1},"450":{name:"(anonymous_450)",decl:{start:{line:1,column:48025},end:{line:1,column:48026}},loc:{start:{line:1,column:48028},end:{line:1,column:48268}},line:1},"451":{name:"(anonymous_451)",decl:{start:{line:1,column:48205},end:{line:1,column:48206}},loc:{start:{line:1,column:48208},end:{line:1,column:48231}},line:1},"452":{name:"(anonymous_452)",decl:{start:{line:1,column:48235},end:{line:1,column:48236}},loc:{start:{line:1,column:48238},end:{line:1,column:48265}},line:1},"453":{name:"Rs",decl:{start:{line:1,column:48279},end:{line:1,column:48281}},loc:{start:{line:1,column:48288},end:{line:1,column:48357}},line:1},"454":{name:"(anonymous_454)",decl:{start:{line:1,column:48308},end:{line:1,column:48309}},loc:{start:{line:1,column:48311},end:{line:1,column:48338}},line:1},"455":{name:"(anonymous_455)",decl:{start:{line:1,column:48342},end:{line:1,column:48343}},loc:{start:{line:1,column:48345},end:{line:1,column:48351}},line:1},"456":{name:"Ss",decl:{start:{line:1,column:48366},end:{line:1,column:48368}},loc:{start:{line:1,column:48375},end:{line:1,column:48483}},line:1},"457":{name:"(anonymous_457)",decl:{start:{line:1,column:48396},end:{line:1,column:48397}},loc:{start:{line:1,column:48399},end:{line:1,column:48464}},line:1},"458":{name:"(anonymous_458)",decl:{start:{line:1,column:48468},end:{line:1,column:48469}},loc:{start:{line:1,column:48471},end:{line:1,column:48477}},line:1},"459":{name:"ws",decl:{start:{line:1,column:48492},end:{line:1,column:48494}},loc:{start:{line:1,column:48499},end:{line:1,column:48539}},line:1},"460":{name:"Cs",decl:{start:{line:1,column:48548},end:{line:1,column:48550}},loc:{start:{line:1,column:48555},end:{line:1,column:48595}},line:1},"461":{name:"Es",decl:{start:{line:1,column:48604},end:{line:1,column:48606}},loc:{start:{line:1,column:48611},end:{line:1,column:48850}},line:1},"462":{name:"(anonymous_462)",decl:{start:{line:1,column:48708},end:{line:1,column:48709}},loc:{start:{line:1,column:48711},end:{line:1,column:48825}},line:1},"463":{name:"(anonymous_463)",decl:{start:{line:1,column:48714},end:{line:1,column:48715}},loc:{start:{line:1,column:48718},end:{line:1,column:48824}},line:1},"464":{name:"(anonymous_464)",decl:{start:{line:1,column:48789},end:{line:1,column:48790}},loc:{start:{line:1,column:48793},end:{line:1,column:48799}},line:1},"465":{name:"bs",decl:{start:{line:1,column:48859},end:{line:1,column:48861}},loc:{start:{line:1,column:48866},end:{line:1,column:49159}},line:1},"466":{name:"(anonymous_466)",decl:{start:{line:1,column:48925},end:{line:1,column:48926}},loc:{start:{line:1,column:48928},end:{line:1,column:48933}},line:1},"467":{name:"(anonymous_467)",decl:{start:{line:1,column:48942},end:{line:1,column:48943}},loc:{start:{line:1,column:48945},end:{line:1,column:48953}},line:1},"468":{name:"(anonymous_468)",decl:{start:{line:1,column:48959},end:{line:1,column:48960}},loc:{start:{line:1,column:48962},end:{line:1,column:49134}},line:1},"469":{name:"(anonymous_469)",decl:{start:{line:1,column:48965},end:{line:1,column:48966}},loc:{start:{line:1,column:48969},end:{line:1,column:49133}},line:1},"470":{name:"(anonymous_470)",decl:{start:{line:1,column:48989},end:{line:1,column:48990}},loc:{start:{line:1,column:48992},end:{line:1,column:49108}},line:1},"471":{name:"(anonymous_471)",decl:{start:{line:1,column:49073},end:{line:1,column:49074}},loc:{start:{line:1,column:49077},end:{line:1,column:49083}},line:1},"472":{name:"Ms",decl:{start:{line:1,column:49168},end:{line:1,column:49170}},loc:{start:{line:1,column:49179},end:{line:1,column:49425}},line:1},"473":{name:"(anonymous_473)",decl:{start:{line:1,column:49281},end:{line:1,column:49282}},loc:{start:{line:1,column:49284},end:{line:1,column:49400}},line:1},"474":{name:"(anonymous_474)",decl:{start:{line:1,column:49361},end:{line:1,column:49362}},loc:{start:{line:1,column:49365},end:{line:1,column:49375}},line:1},"475":{name:"Is",decl:{start:{line:1,column:49434},end:{line:1,column:49436}},loc:{start:{line:1,column:49447},end:{line:1,column:49638}},line:1},"476":{name:"(anonymous_476)",decl:{start:{line:1,column:49517},end:{line:1,column:49518}},loc:{start:{line:1,column:49520},end:{line:1,column:49607}},line:1},"477":{name:"(anonymous_477)",decl:{start:{line:1,column:49562},end:{line:1,column:49563}},loc:{start:{line:1,column:49566},end:{line:1,column:49572}},line:1},"478":{name:"Hi",decl:{start:{line:1,column:49647},end:{line:1,column:49649}},loc:{start:{line:1,column:49652},end:{line:1,column:49722}},line:1},"479":{name:"(anonymous_479)",decl:{start:{line:1,column:49665},end:{line:1,column:49666}},loc:{start:{line:1,column:49668},end:{line:1,column:49706}},line:1},"480":{name:"(anonymous_480)",decl:{start:{line:1,column:49710},end:{line:1,column:49711}},loc:{start:{line:1,column:49713},end:{line:1,column:49719}},line:1},"481":{name:"Ts",decl:{start:{line:1,column:49731},end:{line:1,column:49733}},loc:{start:{line:1,column:49746},end:{line:1,column:49927}},line:1},"482":{name:"(anonymous_482)",decl:{start:{line:1,column:49809},end:{line:1,column:49810}},loc:{start:{line:1,column:49812},end:{line:1,column:49896}},line:1},"483":{name:"(anonymous_483)",decl:{start:{line:1,column:49857},end:{line:1,column:49858}},loc:{start:{line:1,column:49861},end:{line:1,column:49869}},line:1},"484":{name:"(anonymous_484)",decl:{start:{line:1,column:49968},end:{line:1,column:49969}},loc:{start:{line:1,column:49982},end:{line:1,column:50057}},line:1},"485":{name:"(anonymous_485)",decl:{start:{line:1,column:50092},end:{line:1,column:50093}},loc:{start:{line:1,column:50106},end:{line:1,column:50170}},line:1},"486":{name:"Ds",decl:{start:{line:1,column:50181},end:{line:1,column:50183}},loc:{start:{line:1,column:50186},end:{line:1,column:50207}},line:1},"487":{name:"As",decl:{start:{line:1,column:50216},end:{line:1,column:50218}},loc:{start:{line:1,column:50221},end:{line:1,column:50251}},line:1},"488":{name:"(anonymous_488)",decl:{start:{line:1,column:50286},end:{line:1,column:50287}},loc:{start:{line:1,column:50302},end:{line:1,column:50339}},line:1},"489":{name:"(anonymous_489)",decl:{start:{line:1,column:50339},end:{line:1,column:50340}},loc:{start:{line:1,column:50368},end:{line:1,column:50538}},line:1},"490":{name:"(anonymous_490)",decl:{start:{line:1,column:50538},end:{line:1,column:50539}},loc:{start:{line:1,column:50576},end:{line:1,column:50745}},line:1},"491":{name:"(anonymous_491)",decl:{start:{line:1,column:50745},end:{line:1,column:50746}},loc:{start:{line:1,column:50780},end:{line:1,column:50915}},line:1},"492":{name:"(anonymous_492)",decl:{start:{line:1,column:50915},end:{line:1,column:50916}},loc:{start:{line:1,column:50937},end:{line:1,column:51072}},line:1},"493":{name:"(anonymous_493)",decl:{start:{line:1,column:50980},end:{line:1,column:50981}},loc:{start:{line:1,column:50989},end:{line:1,column:51068}},line:1},"494":{name:"(anonymous_494)",decl:{start:{line:1,column:51072},end:{line:1,column:51073}},loc:{start:{line:1,column:51099},end:{line:1,column:51252}},line:1},"495":{name:"(anonymous_495)",decl:{start:{line:1,column:51191},end:{line:1,column:51192}},loc:{start:{line:1,column:51200},end:{line:1,column:51239}},line:1},"496":{name:"(anonymous_496)",decl:{start:{line:1,column:51252},end:{line:1,column:51253}},loc:{start:{line:1,column:51275},end:{line:1,column:51357}},line:1},"497":{name:"(anonymous_497)",decl:{start:{line:1,column:51289},end:{line:1,column:51290}},loc:{start:{line:1,column:51292},end:{line:1,column:51355}},line:1},"498":{name:"(anonymous_498)",decl:{start:{line:1,column:51357},end:{line:1,column:51358}},loc:{start:{line:1,column:51376},end:{line:1,column:51442}},line:1},"499":{name:"(anonymous_499)",decl:{start:{line:1,column:51442},end:{line:1,column:51443}},loc:{start:{line:1,column:51459},end:{line:1,column:51537}},line:1},"500":{name:"_s",decl:{start:{line:1,column:51548},end:{line:1,column:51550}},loc:{start:{line:1,column:51557},end:{line:1,column:51643}},line:1},"501":{name:"(anonymous_501)",decl:{start:{line:1,column:51631},end:{line:1,column:51632}},loc:{start:{line:1,column:51635},end:{line:1,column:51639}},line:1},"502":{name:"Os",decl:{start:{line:1,column:51652},end:{line:1,column:51654}},loc:{start:{line:1,column:51659},end:{line:1,column:51760}},line:1},"503":{name:"q",decl:{start:{line:1,column:51769},end:{line:1,column:51770}},loc:{start:{line:1,column:51773},end:{line:1,column:51793}},line:1},"504":{name:"Ns",decl:{start:{line:1,column:51802},end:{line:1,column:51804}},loc:{start:{line:1,column:51809},end:{line:1,column:51880}},line:1},"505":{name:"(anonymous_505)",decl:{start:{line:1,column:51825},end:{line:1,column:51826}},loc:{start:{line:1,column:51828},end:{line:1,column:51836}},line:1},"506":{name:"(anonymous_506)",decl:{start:{line:1,column:51864},end:{line:1,column:51865}},loc:{start:{line:1,column:51867},end:{line:1,column:51875}},line:1},"507":{name:"$i",decl:{start:{line:1,column:51991},end:{line:1,column:51993}},loc:{start:{line:1,column:51996},end:{line:1,column:52195}},line:1},"508":{name:"Ps",decl:{start:{line:1,column:52204},end:{line:1,column:52206}},loc:{start:{line:1,column:52221},end:{line:1,column:52342}},line:1},"509":{name:"(anonymous_509)",decl:{start:{line:1,column:52319},end:{line:1,column:52320}},loc:{start:{line:1,column:52322},end:{line:1,column:52339}},line:1},"510":{name:"zi",decl:{start:{line:1,column:52351},end:{line:1,column:52353}},loc:{start:{line:1,column:52360},end:{line:1,column:52889}},line:1},"511":{name:"(anonymous_511)",decl:{start:{line:1,column:52638},end:{line:1,column:52639}},loc:{start:{line:1,column:52647},end:{line:1,column:52660}},line:1},"512":{name:"li",decl:{start:{line:1,column:52898},end:{line:1,column:52900}},loc:{start:{line:1,column:52909},end:{line:1,column:53163}},line:1},"513":{name:"Us",decl:{start:{line:1,column:53172},end:{line:1,column:53174}},loc:{start:{line:1,column:53183},end:{line:1,column:53281}},line:1},"514":{name:"Ls",decl:{start:{line:1,column:53290},end:{line:1,column:53292}},loc:{start:{line:1,column:53297},end:{line:1,column:53393}},line:1},"515":{name:"xs",decl:{start:{line:1,column:53402},end:{line:1,column:53404}},loc:{start:{line:1,column:53411},end:{line:1,column:53450}},line:1},"516":{name:"(anonymous_516)",decl:{start:{line:1,column:53426},end:{line:1,column:53427}},loc:{start:{line:1,column:53429},end:{line:1,column:53448}},line:1},"517":{name:"js",decl:{start:{line:1,column:53459},end:{line:1,column:53461}},loc:{start:{line:1,column:53468},end:{line:1,column:53497}},line:1},"518":{name:"(anonymous_518)",decl:{start:{line:1,column:53483},end:{line:1,column:53484}},loc:{start:{line:1,column:53486},end:{line:1,column:53495}},line:1},"519":{name:"Yt",decl:{start:{line:1,column:53506},end:{line:1,column:53508}},loc:{start:{line:1,column:53515},end:{line:1,column:53589}},line:1},"520":{name:"ks",decl:{start:{line:1,column:53598},end:{line:1,column:53600}},loc:{start:{line:1,column:53607},end:{line:1,column:53644}},line:1},"521":{name:"Hs",decl:{start:{line:1,column:53674},end:{line:1,column:53676}},loc:{start:{line:1,column:53705},end:{line:1,column:53749}},line:1},"522":{name:"(anonymous_522)",decl:{start:{line:1,column:53932},end:{line:1,column:53933}},loc:{start:{line:1,column:53960},end:{line:1,column:54184}},line:1},"523":{name:"(anonymous_523)",decl:{start:{line:1,column:54184},end:{line:1,column:54185}},loc:{start:{line:1,column:54199},end:{line:1,column:54241}},line:1},"524":{name:"(anonymous_524)",decl:{start:{line:1,column:54241},end:{line:1,column:54242}},loc:{start:{line:1,column:54258},end:{line:1,column:54553}},line:1},"525":{name:"(anonymous_525)",decl:{start:{line:1,column:54553},end:{line:1,column:54554}},loc:{start:{line:1,column:54567},end:{line:1,column:54966}},line:1},"526":{name:"(anonymous_526)",decl:{start:{line:1,column:54966},end:{line:1,column:54967}},loc:{start:{line:1,column:55002},end:{line:1,column:55168}},line:1},"527":{name:"(anonymous_527)",decl:{start:{line:1,column:55168},end:{line:1,column:55169}},loc:{start:{line:1,column:55198},end:{line:1,column:55421}},line:1},"528":{name:"(anonymous_528)",decl:{start:{line:1,column:55421},end:{line:1,column:55422}},loc:{start:{line:1,column:55456},end:{line:1,column:55644}},line:1},"529":{name:"(anonymous_529)",decl:{start:{line:1,column:55644},end:{line:1,column:55645}},loc:{start:{line:1,column:55693},end:{line:1,column:55924}},line:1},"530":{name:"(anonymous_530)",decl:{start:{line:1,column:55924},end:{line:1,column:55925}},loc:{start:{line:1,column:55983},end:{line:1,column:56544}},line:1},"531":{name:"(anonymous_531)",decl:{start:{line:1,column:56544},end:{line:1,column:56545}},loc:{start:{line:1,column:56569},end:{line:1,column:56827}},line:1},"532":{name:"(anonymous_532)",decl:{start:{line:1,column:56827},end:{line:1,column:56828}},loc:{start:{line:1,column:56870},end:{line:1,column:57617}},line:1},"533":{name:"(anonymous_533)",decl:{start:{line:1,column:56946},end:{line:1,column:56947}},loc:{start:{line:1,column:56950},end:{line:1,column:57010}},line:1},"534":{name:"(anonymous_534)",decl:{start:{line:1,column:57617},end:{line:1,column:57618}},loc:{start:{line:1,column:57644},end:{line:1,column:58214}},line:1},"535":{name:"zs",decl:{start:{line:1,column:58225},end:{line:1,column:58227}},loc:{start:{line:1,column:58230},end:{line:1,column:58334}},line:1},"536":{name:"(anonymous_536)",decl:{start:{line:1,column:58238},end:{line:1,column:58239}},loc:{start:{line:1,column:58245},end:{line:1,column:58332}},line:1},"537":{name:"Fs",decl:{start:{line:1,column:58343},end:{line:1,column:58345}},loc:{start:{line:1,column:58348},end:{line:1,column:58397}},line:1},"538":{name:"Fi",decl:{start:{line:1,column:58406},end:{line:1,column:58408}},loc:{start:{line:1,column:58411},end:{line:1,column:58691}},line:1},"539":{name:"(anonymous_539)",decl:{start:{line:1,column:58490},end:{line:1,column:58491}},loc:{start:{line:1,column:58493},end:{line:1,column:58534}},line:1},"540":{name:"(anonymous_540)",decl:{start:{line:1,column:58677},end:{line:1,column:58678}},loc:{start:{line:1,column:58680},end:{line:1,column:58689}},line:1},"541":{name:"Bs",decl:{start:{line:1,column:58700},end:{line:1,column:58702}},loc:{start:{line:1,column:58705},end:{line:1,column:58724}},line:1},"542":{name:"qs",decl:{start:{line:1,column:58733},end:{line:1,column:58735}},loc:{start:{line:1,column:58738},end:{line:1,column:58760}},line:1},"543":{name:"Vs",decl:{start:{line:1,column:58769},end:{line:1,column:58771}},loc:{start:{line:1,column:58786},end:{line:1,column:58924}},line:1},"544":{name:"(anonymous_544)",decl:{start:{line:1,column:58796},end:{line:1,column:58797}},loc:{start:{line:1,column:58805},end:{line:1,column:58922}},line:1},"545":{name:"Gs",decl:{start:{line:1,column:58933},end:{line:1,column:58935}},loc:{start:{line:1,column:58938},end:{line:1,column:59268}},line:1},"546":{name:"(anonymous_546)",decl:{start:{line:1,column:58948},end:{line:1,column:58949}},loc:{start:{line:1,column:58951},end:{line:1,column:59266}},line:1},"547":{name:"(anonymous_547)",decl:{start:{line:1,column:59050},end:{line:1,column:59051}},loc:{start:{line:1,column:59053},end:{line:1,column:59060}},line:1},"548":{name:"(anonymous_548)",decl:{start:{line:1,column:59157},end:{line:1,column:59158}},loc:{start:{line:1,column:59160},end:{line:1,column:59222}},line:1},"549":{name:"(anonymous_549)",decl:{start:{line:1,column:59226},end:{line:1,column:59227}},loc:{start:{line:1,column:59230},end:{line:1,column:59233}},line:1},"550":{name:"(anonymous_550)",decl:{start:{line:1,column:59243},end:{line:1,column:59244}},loc:{start:{line:1,column:59246},end:{line:1,column:59263}},line:1},"551":{name:"Bi",decl:{start:{line:1,column:59277},end:{line:1,column:59279}},loc:{start:{line:1,column:59282},end:{line:1,column:59336}},line:1},"552":{name:"(anonymous_552)",decl:{start:{line:1,column:59304},end:{line:1,column:59305}},loc:{start:{line:1,column:59307},end:{line:1,column:59312}},line:1},"553":{name:"Ws",decl:{start:{line:1,column:59345},end:{line:1,column:59347}},loc:{start:{line:1,column:59354},end:{line:1,column:59552}},line:1},"554":{name:"(anonymous_554)",decl:{start:{line:1,column:59441},end:{line:1,column:59442}},loc:{start:{line:1,column:59446},end:{line:1,column:59549}},line:1},"555":{name:"(anonymous_555)",decl:{start:{line:1,column:59495},end:{line:1,column:59496}},loc:{start:{line:1,column:59499},end:{line:1,column:59546}},line:1},"556":{name:"Ys",decl:{start:{line:1,column:59561},end:{line:1,column:59563}},loc:{start:{line:1,column:59570},end:{line:1,column:59756}},line:1},"557":{name:"(anonymous_557)",decl:{start:{line:1,column:59640},end:{line:1,column:59641}},loc:{start:{line:1,column:59643},end:{line:1,column:59717}},line:1},"558":{name:"(anonymous_558)",decl:{start:{line:1,column:59667},end:{line:1,column:59668}},loc:{start:{line:1,column:59670},end:{line:1,column:59715}},line:1},"559":{name:"(anonymous_559)",decl:{start:{line:1,column:59727},end:{line:1,column:59728}},loc:{start:{line:1,column:59731},end:{line:1,column:59732}},line:1},"560":{name:"(anonymous_560)",decl:{start:{line:1,column:59737},end:{line:1,column:59738}},loc:{start:{line:1,column:59740},end:{line:1,column:59753}},line:1},"561":{name:"Qs",decl:{start:{line:1,column:59765},end:{line:1,column:59767}},loc:{start:{line:1,column:59774},end:{line:1,column:59870}},line:1},"562":{name:"(anonymous_562)",decl:{start:{line:1,column:59845},end:{line:1,column:59846}},loc:{start:{line:1,column:59849},end:{line:1,column:59855}},line:1},"563":{name:"di",decl:{start:{line:1,column:59879},end:{line:1,column:59881}},loc:{start:{line:1,column:59884},end:{line:1,column:59945}},line:1},"564":{name:"(anonymous_564)",decl:{start:{line:1,column:59894},end:{line:1,column:59895}},loc:{start:{line:1,column:59897},end:{line:1,column:59943}},line:1},"565":{name:"(anonymous_565)",decl:{start:{line:1,column:59930},end:{line:1,column:59931}},loc:{start:{line:1,column:59934},end:{line:1,column:59935}},line:1},"566":{name:"(anonymous_566)",decl:{start:{line:1,column:59953},end:{line:1,column:59954}},loc:{start:{line:1,column:59957},end:{line:1,column:60263}},line:1},"567":{name:"(anonymous_567)",decl:{start:{line:1,column:59966},end:{line:1,column:59967}},loc:{start:{line:1,column:59979},end:{line:1,column:60094}},line:1},"568":{name:"(anonymous_568)",decl:{start:{line:1,column:60068},end:{line:1,column:60069}},loc:{start:{line:1,column:60071},end:{line:1,column:60083}},line:1},"569":{name:"(anonymous_569)",decl:{start:{line:1,column:60094},end:{line:1,column:60095}},loc:{start:{line:1,column:60121},end:{line:1,column:60140}},line:1},"570":{name:"(anonymous_570)",decl:{start:{line:1,column:60157},end:{line:1,column:60158}},loc:{start:{line:1,column:60168},end:{line:1,column:60186}},line:1},"571":{name:"(anonymous_571)",decl:{start:{line:1,column:60224},end:{line:1,column:60225}},loc:{start:{line:1,column:60228},end:{line:1,column:60233}},line:1},"572":{name:"(anonymous_572)",decl:{start:{line:1,column:60271},end:{line:1,column:60272}},loc:{start:{line:1,column:60275},end:{line:1,column:60544}},line:1},"573":{name:"(anonymous_573)",decl:{start:{line:1,column:60301},end:{line:1,column:60302}},loc:{start:{line:1,column:60315},end:{line:1,column:60337}},line:1},"574":{name:"(anonymous_574)",decl:{start:{line:1,column:60337},end:{line:1,column:60338}},loc:{start:{line:1,column:60351},end:{line:1,column:60412}},line:1},"575":{name:"(anonymous_575)",decl:{start:{line:1,column:60429},end:{line:1,column:60430}},loc:{start:{line:1,column:60440},end:{line:1,column:60465}},line:1},"576":{name:"(anonymous_576)",decl:{start:{line:1,column:60569},end:{line:1,column:60570}},loc:{start:{line:1,column:60574},end:{line:1,column:60576}},line:1},"577":{name:"(anonymous_577)",decl:{start:{line:1,column:60597},end:{line:1,column:60598}},loc:{start:{line:1,column:60601},end:{line:1,column:61796}},line:1},"578":{name:"(anonymous_578)",decl:{start:{line:1,column:60720},end:{line:1,column:60721}},loc:{start:{line:1,column:60744},end:{line:1,column:61179}},line:1},"579":{name:"(anonymous_579)",decl:{start:{line:1,column:60939},end:{line:1,column:60940}},loc:{start:{line:1,column:60948},end:{line:1,column:61135}},line:1},"580":{name:"(anonymous_580)",decl:{start:{line:1,column:60972},end:{line:1,column:60973}},loc:{start:{line:1,column:60976},end:{line:1,column:60993}},line:1},"581":{name:"(anonymous_581)",decl:{start:{line:1,column:61179},end:{line:1,column:61180}},loc:{start:{line:1,column:61196},end:{line:1,column:61671}},line:1},"582":{name:"(anonymous_582)",decl:{start:{line:1,column:61419},end:{line:1,column:61420}},loc:{start:{line:1,column:61428},end:{line:1,column:61628}},line:1},"583":{name:"(anonymous_583)",decl:{start:{line:1,column:61688},end:{line:1,column:61689}},loc:{start:{line:1,column:61699},end:{line:1,column:61717}},line:1},"584":{name:"Vi",decl:{start:{line:1,column:61815},end:{line:1,column:61817}},loc:{start:{line:1,column:61826},end:{line:1,column:62130}},line:1},"585":{name:"(anonymous_585)",decl:{start:{line:1,column:61846},end:{line:1,column:61847}},loc:{start:{line:1,column:61850},end:{line:1,column:61866}},line:1},"586":{name:"Ks",decl:{start:{line:1,column:62139},end:{line:1,column:62141}},loc:{start:{line:1,column:62144},end:{line:1,column:62189}},line:1},"587":{name:"Gi",decl:{start:{line:1,column:62198},end:{line:1,column:62200}},loc:{start:{line:1,column:62203},end:{line:1,column:62229}},line:1},"588":{name:"Wi",decl:{start:{line:1,column:62244},end:{line:1,column:62246}},loc:{start:{line:1,column:62249},end:{line:1,column:62259}},line:1},"589":{name:"(anonymous_589)",decl:{start:{line:1,column:62267},end:{line:1,column:62268}},loc:{start:{line:1,column:62271},end:{line:1,column:62403}},line:1},"590":{name:"(anonymous_590)",decl:{start:{line:1,column:62297},end:{line:1,column:62298}},loc:{start:{line:1,column:62308},end:{line:1,column:62326}},line:1},"591":{name:"(anonymous_591)",decl:{start:{line:1,column:62364},end:{line:1,column:62365}},loc:{start:{line:1,column:62368},end:{line:1,column:62373}},line:1},"592":{name:"(anonymous_592)",decl:{start:{line:1,column:62411},end:{line:1,column:62412}},loc:{start:{line:1,column:62415},end:{line:1,column:62618}},line:1},"593":{name:"(anonymous_593)",decl:{start:{line:1,column:62424},end:{line:1,column:62425}},loc:{start:{line:1,column:62443},end:{line:1,column:62453}},line:1},"594":{name:"(anonymous_594)",decl:{start:{line:1,column:62453},end:{line:1,column:62454}},loc:{start:{line:1,column:62463},end:{line:1,column:62473}},line:1},"595":{name:"(anonymous_595)",decl:{start:{line:1,column:62473},end:{line:1,column:62474}},loc:{start:{line:1,column:62483},end:{line:1,column:62493}},line:1},"596":{name:"(anonymous_596)",decl:{start:{line:1,column:62510},end:{line:1,column:62511}},loc:{start:{line:1,column:62521},end:{line:1,column:62539}},line:1},"597":{name:"Yi",decl:{start:{line:1,column:62657},end:{line:1,column:62659}},loc:{start:{line:1,column:62666},end:{line:1,column:63037}},line:1},"598":{name:"(anonymous_598)",decl:{start:{line:1,column:62785},end:{line:1,column:62786}},loc:{start:{line:1,column:62788},end:{line:1,column:62801}},line:1},"599":{name:"(anonymous_599)",decl:{start:{line:1,column:62823},end:{line:1,column:62824}},loc:{start:{line:1,column:62826},end:{line:1,column:62831}},line:1},"600":{name:"(anonymous_600)",decl:{start:{line:1,column:62857},end:{line:1,column:62858}},loc:{start:{line:1,column:62862},end:{line:1,column:62871}},line:1},"601":{name:"(anonymous_601)",decl:{start:{line:1,column:62901},end:{line:1,column:62902}},loc:{start:{line:1,column:62904},end:{line:1,column:62906}},line:1},"602":{name:"(anonymous_602)",decl:{start:{line:1,column:62922},end:{line:1,column:62923}},loc:{start:{line:1,column:62925},end:{line:1,column:62927}},line:1},"603":{name:"(anonymous_603)",decl:{start:{line:1,column:62946},end:{line:1,column:62947}},loc:{start:{line:1,column:62949},end:{line:1,column:62951}},line:1},"604":{name:"(anonymous_604)",decl:{start:{line:1,column:63000},end:{line:1,column:63001}},loc:{start:{line:1,column:63004},end:{line:1,column:63033}},line:1},"605":{name:"Js",decl:{start:{line:1,column:63046},end:{line:1,column:63048}},loc:{start:{line:1,column:63051},end:{line:1,column:63119}},line:1},"606":{name:"(anonymous_606)",decl:{start:{line:1,column:63071},end:{line:1,column:63072}},loc:{start:{line:1,column:63074},end:{line:1,column:63117}},line:1},"607":{name:"(anonymous_607)",decl:{start:{line:1,column:63084},end:{line:1,column:63085}},loc:{start:{line:1,column:63088},end:{line:1,column:63101}},line:1},"608":{name:"(anonymous_608)",decl:{start:{line:1,column:63126},end:{line:1,column:63127}},loc:{start:{line:1,column:63130},end:{line:1,column:63132}},line:1},"609":{name:"(anonymous_609)",decl:{start:{line:1,column:63150},end:{line:1,column:63151}},loc:{start:{line:1,column:63154},end:{line:1,column:71286}},line:1},"610":{name:"(anonymous_610)",decl:{start:{line:1,column:63195},end:{line:1,column:63196}},loc:{start:{line:1,column:63199},end:{line:1,column:63201}},line:1},"611":{name:"(anonymous_611)",decl:{start:{line:1,column:63730},end:{line:1,column:63731}},loc:{start:{line:1,column:63758},end:{line:1,column:63788}},line:1},"612":{name:"(anonymous_612)",decl:{start:{line:1,column:63819},end:{line:1,column:63820}},loc:{start:{line:1,column:63823},end:{line:1,column:63832}},line:1},"613":{name:"(anonymous_613)",decl:{start:{line:1,column:63869},end:{line:1,column:63870}},loc:{start:{line:1,column:63882},end:{line:1,column:64082}},line:1},"614":{name:"(anonymous_614)",decl:{start:{line:1,column:63889},end:{line:1,column:63890}},loc:{start:{line:1,column:63892},end:{line:1,column:63919}},line:1},"615":{name:"(anonymous_615)",decl:{start:{line:1,column:63922},end:{line:1,column:63923}},loc:{start:{line:1,column:63925},end:{line:1,column:63952}},line:1},"616":{name:"(anonymous_616)",decl:{start:{line:1,column:64057},end:{line:1,column:64058}},loc:{start:{line:1,column:64061},end:{line:1,column:64080}},line:1},"617":{name:"(anonymous_617)",decl:{start:{line:1,column:64082},end:{line:1,column:64083}},loc:{start:{line:1,column:64092},end:{line:1,column:64122}},line:1},"618":{name:"(anonymous_618)",decl:{start:{line:1,column:64122},end:{line:1,column:64123}},loc:{start:{line:1,column:64148},end:{line:1,column:64447}},line:1},"619":{name:"(anonymous_619)",decl:{start:{line:1,column:64177},end:{line:1,column:64178}},loc:{start:{line:1,column:64181},end:{line:1,column:64445}},line:1},"620":{name:"(anonymous_620)",decl:{start:{line:1,column:64447},end:{line:1,column:64448}},loc:{start:{line:1,column:64466},end:{line:1,column:70648}},line:1},"621":{name:"(anonymous_621)",decl:{start:{line:1,column:64527},end:{line:1,column:64528}},loc:{start:{line:1,column:64530},end:{line:1,column:64538}},line:1},"622":{name:"(anonymous_622)",decl:{start:{line:1,column:64542},end:{line:1,column:64543}},loc:{start:{line:1,column:64545},end:{line:1,column:70645}},line:1},"623":{name:"(anonymous_623)",decl:{start:{line:1,column:64579},end:{line:1,column:64580}},loc:{start:{line:1,column:64583},end:{line:1,column:64620}},line:1},"624":{name:"(anonymous_624)",decl:{start:{line:1,column:64640},end:{line:1,column:64641}},loc:{start:{line:1,column:64643},end:{line:1,column:66882}},line:1},"625":{name:"(anonymous_625)",decl:{start:{line:1,column:65114},end:{line:1,column:65115}},loc:{start:{line:1,column:65118},end:{line:1,column:65127}},line:1},"626":{name:"(anonymous_626)",decl:{start:{line:1,column:65574},end:{line:1,column:65575}},loc:{start:{line:1,column:65578},end:{line:1,column:65724}},line:1},"627":{name:"(anonymous_627)",decl:{start:{line:1,column:65867},end:{line:1,column:65868}},loc:{start:{line:1,column:65870},end:{line:1,column:66039}},line:1},"628":{name:"(anonymous_628)",decl:{start:{line:1,column:65975},end:{line:1,column:65976}},loc:{start:{line:1,column:65979},end:{line:1,column:66011}},line:1},"629":{name:"(anonymous_629)",decl:{start:{line:1,column:66043},end:{line:1,column:66044}},loc:{start:{line:1,column:66046},end:{line:1,column:66114}},line:1},"630":{name:"(anonymous_630)",decl:{start:{line:1,column:66107},end:{line:1,column:66108}},loc:{start:{line:1,column:66111},end:{line:1,column:66112}},line:1},"631":{name:"(anonymous_631)",decl:{start:{line:1,column:66118},end:{line:1,column:66119}},loc:{start:{line:1,column:66122},end:{line:1,column:66274}},line:1},"632":{name:"(anonymous_632)",decl:{start:{line:1,column:66715},end:{line:1,column:66716}},loc:{start:{line:1,column:66720},end:{line:1,column:66736}},line:1},"633":{name:"(anonymous_633)",decl:{start:{line:1,column:66886},end:{line:1,column:66887}},loc:{start:{line:1,column:66889},end:{line:1,column:67152}},line:1},"634":{name:"(anonymous_634)",decl:{start:{line:1,column:67157},end:{line:1,column:67158}},loc:{start:{line:1,column:67160},end:{line:1,column:67179}},line:1},"635":{name:"(anonymous_635)",decl:{start:{line:1,column:67183},end:{line:1,column:67184}},loc:{start:{line:1,column:67186},end:{line:1,column:68112}},line:1},"636":{name:"(anonymous_636)",decl:{start:{line:1,column:67870},end:{line:1,column:67871}},loc:{start:{line:1,column:67874},end:{line:1,column:68031}},line:1},"637":{name:"(anonymous_637)",decl:{start:{line:1,column:68041},end:{line:1,column:68042}},loc:{start:{line:1,column:68045},end:{line:1,column:68108}},line:1},"638":{name:"(anonymous_638)",decl:{start:{line:1,column:68117},end:{line:1,column:68118}},loc:{start:{line:1,column:68120},end:{line:1,column:68502}},line:1},"639":{name:"(anonymous_639)",decl:{start:{line:1,column:68127},end:{line:1,column:68128}},loc:{start:{line:1,column:68130},end:{line:1,column:68419}},line:1},"640":{name:"(anonymous_640)",decl:{start:{line:1,column:68347},end:{line:1,column:68348}},loc:{start:{line:1,column:68351},end:{line:1,column:68367}},line:1},"641":{name:"(anonymous_641)",decl:{start:{line:1,column:68494},end:{line:1,column:68495}},loc:{start:{line:1,column:68498},end:{line:1,column:68499}},line:1},"642":{name:"(anonymous_642)",decl:{start:{line:1,column:68507},end:{line:1,column:68508}},loc:{start:{line:1,column:68511},end:{line:1,column:68536}},line:1},"643":{name:"(anonymous_643)",decl:{start:{line:1,column:68540},end:{line:1,column:68541}},loc:{start:{line:1,column:68544},end:{line:1,column:68691}},line:1},"644":{name:"(anonymous_644)",decl:{start:{line:1,column:68678},end:{line:1,column:68679}},loc:{start:{line:1,column:68682},end:{line:1,column:68683}},line:1},"645":{name:"(anonymous_645)",decl:{start:{line:1,column:68701},end:{line:1,column:68702}},loc:{start:{line:1,column:68704},end:{line:1,column:68995}},line:1},"646":{name:"(anonymous_646)",decl:{start:{line:1,column:68864},end:{line:1,column:68865}},loc:{start:{line:1,column:68868},end:{line:1,column:68891}},line:1},"647":{name:"(anonymous_647)",decl:{start:{line:1,column:68982},end:{line:1,column:68983}},loc:{start:{line:1,column:68986},end:{line:1,column:68987}},line:1},"648":{name:"(anonymous_648)",decl:{start:{line:1,column:68999},end:{line:1,column:69000}},loc:{start:{line:1,column:69002},end:{line:1,column:69472}},line:1},"649":{name:"(anonymous_649)",decl:{start:{line:1,column:69072},end:{line:1,column:69073}},loc:{start:{line:1,column:69075},end:{line:1,column:69094}},line:1},"650":{name:"(anonymous_650)",decl:{start:{line:1,column:69190},end:{line:1,column:69191}},loc:{start:{line:1,column:69194},end:{line:1,column:69206}},line:1},"651":{name:"(anonymous_651)",decl:{start:{line:1,column:69497},end:{line:1,column:69498}},loc:{start:{line:1,column:69501},end:{line:1,column:69525}},line:1},"652":{name:"(anonymous_652)",decl:{start:{line:1,column:69529},end:{line:1,column:69530}},loc:{start:{line:1,column:69533},end:{line:1,column:69598}},line:1},"653":{name:"(anonymous_653)",decl:{start:{line:1,column:69614},end:{line:1,column:69615}},loc:{start:{line:1,column:69618},end:{line:1,column:69624}},line:1},"654":{name:"(anonymous_654)",decl:{start:{line:1,column:69674},end:{line:1,column:69675}},loc:{start:{line:1,column:69677},end:{line:1,column:69686}},line:1},"655":{name:"(anonymous_655)",decl:{start:{line:1,column:69693},end:{line:1,column:69694}},loc:{start:{line:1,column:69697},end:{line:1,column:69875}},line:1},"656":{name:"(anonymous_656)",decl:{start:{line:1,column:69880},end:{line:1,column:69881}},loc:{start:{line:1,column:69883},end:{line:1,column:70642}},line:1},"657":{name:"(anonymous_657)",decl:{start:{line:1,column:70256},end:{line:1,column:70257}},loc:{start:{line:1,column:70260},end:{line:1,column:70292}},line:1},"658":{name:"(anonymous_658)",decl:{start:{line:1,column:70648},end:{line:1,column:70649}},loc:{start:{line:1,column:70681},end:{line:1,column:70783}},line:1},"659":{name:"(anonymous_659)",decl:{start:{line:1,column:70783},end:{line:1,column:70784}},loc:{start:{line:1,column:70808},end:{line:1,column:70916}},line:1},"660":{name:"(anonymous_660)",decl:{start:{line:1,column:70916},end:{line:1,column:70917}},loc:{start:{line:1,column:70937},end:{line:1,column:71161}},line:1},"661":{name:"(anonymous_661)",decl:{start:{line:1,column:71178},end:{line:1,column:71179}},loc:{start:{line:1,column:71189},end:{line:1,column:71207}},line:1},"662":{name:"ea",decl:{start:{line:1,column:71299},end:{line:1,column:71301}},loc:{start:{line:1,column:71304},end:{line:1,column:71319}},line:1},"663":{name:"(anonymous_663)",decl:{start:{line:1,column:71344},end:{line:1,column:71345}},loc:{start:{line:1,column:71348},end:{line:1,column:71480}},line:1},"664":{name:"(anonymous_664)",decl:{start:{line:1,column:71374},end:{line:1,column:71375}},loc:{start:{line:1,column:71385},end:{line:1,column:71403}},line:1},"665":{name:"(anonymous_665)",decl:{start:{line:1,column:71441},end:{line:1,column:71442}},loc:{start:{line:1,column:71445},end:{line:1,column:71450}},line:1},"666":{name:"(anonymous_666)",decl:{start:{line:1,column:71493},end:{line:1,column:71494}},loc:{start:{line:1,column:71508},end:{line:1,column:71518}},line:1},"667":{name:"(anonymous_667)",decl:{start:{line:1,column:71518},end:{line:1,column:71519}},loc:{start:{line:1,column:71528},end:{line:1,column:71530}},line:1},"668":{name:"(anonymous_668)",decl:{start:{line:1,column:71530},end:{line:1,column:71531}},loc:{start:{line:1,column:71545},end:{line:1,column:71555}},line:1},"669":{name:"(anonymous_669)",decl:{start:{line:1,column:71555},end:{line:1,column:71556}},loc:{start:{line:1,column:71566},end:{line:1,column:71579}},line:1},"670":{name:"(anonymous_670)",decl:{start:{line:1,column:71579},end:{line:1,column:71580}},loc:{start:{line:1,column:71600},end:{line:1,column:71638}},line:1},"671":{name:"(anonymous_671)",decl:{start:{line:1,column:71638},end:{line:1,column:71639}},loc:{start:{line:1,column:71662},end:{line:1,column:71672}},line:1},"672":{name:"(anonymous_672)",decl:{start:{line:1,column:71678},end:{line:1,column:71679}},loc:{start:{line:1,column:71682},end:{line:1,column:71860}},line:1},"673":{name:"(anonymous_673)",decl:{start:{line:1,column:71720},end:{line:1,column:71721}},loc:{start:{line:1,column:71724},end:{line:1,column:71778}},line:1},"674":{name:"(anonymous_674)",decl:{start:{line:1,column:71738},end:{line:1,column:71739}},loc:{start:{line:1,column:71749},end:{line:1,column:71777}},line:1},"675":{name:"(anonymous_675)",decl:{start:{line:1,column:71868},end:{line:1,column:71869}},loc:{start:{line:1,column:71872},end:{line:1,column:73128}},line:1},"676":{name:"(anonymous_676)",decl:{start:{line:1,column:72138},end:{line:1,column:72139}},loc:{start:{line:1,column:72157},end:{line:1,column:72185}},line:1},"677":{name:"(anonymous_677)",decl:{start:{line:1,column:72216},end:{line:1,column:72217}},loc:{start:{line:1,column:72231},end:{line:1,column:72255}},line:1},"678":{name:"(anonymous_678)",decl:{start:{line:1,column:72255},end:{line:1,column:72256}},loc:{start:{line:1,column:72318},end:{line:1,column:72437}},line:1},"679":{name:"(anonymous_679)",decl:{start:{line:1,column:72437},end:{line:1,column:72438}},loc:{start:{line:1,column:72500},end:{line:1,column:72619}},line:1},"680":{name:"(anonymous_680)",decl:{start:{line:1,column:72645},end:{line:1,column:72646}},loc:{start:{line:1,column:72661},end:{line:1,column:72686}},line:1},"681":{name:"(anonymous_681)",decl:{start:{line:1,column:72726},end:{line:1,column:72727}},loc:{start:{line:1,column:72744},end:{line:1,column:72771}},line:1},"682":{name:"(anonymous_682)",decl:{start:{line:1,column:72771},end:{line:1,column:72772}},loc:{start:{line:1,column:72791},end:{line:1,column:72837}},line:1},"683":{name:"(anonymous_683)",decl:{start:{line:1,column:72837},end:{line:1,column:72838}},loc:{start:{line:1,column:72857},end:{line:1,column:72957}},line:1},"684":{name:"(anonymous_684)",decl:{start:{line:1,column:72957},end:{line:1,column:72958}},loc:{start:{line:1,column:72972},end:{line:1,column:73005}},line:1},"685":{name:"(anonymous_685)",decl:{start:{line:1,column:73022},end:{line:1,column:73023}},loc:{start:{line:1,column:73033},end:{line:1,column:73051}},line:1},"686":{name:"(anonymous_686)",decl:{start:{line:1,column:73089},end:{line:1,column:73090}},loc:{start:{line:1,column:73093},end:{line:1,column:73098}},line:1},"687":{name:"(anonymous_687)",decl:{start:{line:1,column:73136},end:{line:1,column:73137}},loc:{start:{line:1,column:73140},end:{line:1,column:75460}},line:1},"688":{name:"(anonymous_688)",decl:{start:{line:1,column:73196},end:{line:1,column:73197}},loc:{start:{line:1,column:73215},end:{line:1,column:73350}},line:1},"689":{name:"(anonymous_689)",decl:{start:{line:1,column:73350},end:{line:1,column:73351}},loc:{start:{line:1,column:73396},end:{line:1,column:73517}},line:1},"690":{name:"(anonymous_690)",decl:{start:{line:1,column:73428},end:{line:1,column:73429}},loc:{start:{line:1,column:73431},end:{line:1,column:73515}},line:1},"691":{name:"(anonymous_691)",decl:{start:{line:1,column:73464},end:{line:1,column:73465}},loc:{start:{line:1,column:73468},end:{line:1,column:73513}},line:1},"692":{name:"(anonymous_692)",decl:{start:{line:1,column:73517},end:{line:1,column:73518}},loc:{start:{line:1,column:73539},end:{line:1,column:74080}},line:1},"693":{name:"(anonymous_693)",decl:{start:{line:1,column:74080},end:{line:1,column:74081}},loc:{start:{line:1,column:74112},end:{line:1,column:74390}},line:1},"694":{name:"(anonymous_694)",decl:{start:{line:1,column:74390},end:{line:1,column:74391}},loc:{start:{line:1,column:74412},end:{line:1,column:74768}},line:1},"695":{name:"(anonymous_695)",decl:{start:{line:1,column:74768},end:{line:1,column:74769}},loc:{start:{line:1,column:74800},end:{line:1,column:74988}},line:1},"696":{name:"(anonymous_696)",decl:{start:{line:1,column:74988},end:{line:1,column:74989}},loc:{start:{line:1,column:75014},end:{line:1,column:75166}},line:1},"697":{name:"(anonymous_697)",decl:{start:{line:1,column:75166},end:{line:1,column:75167}},loc:{start:{line:1,column:75192},end:{line:1,column:75302}},line:1},"698":{name:"(anonymous_698)",decl:{start:{line:1,column:75320},end:{line:1,column:75321}},loc:{start:{line:1,column:75324},end:{line:1,column:75378}},line:1},"699":{name:"(anonymous_699)",decl:{start:{line:1,column:75338},end:{line:1,column:75339}},loc:{start:{line:1,column:75349},end:{line:1,column:75377}},line:1},"700":{name:"Xt",decl:{start:{line:1,column:75473},end:{line:1,column:75475}},loc:{start:{line:1,column:75480},end:{line:1,column:75726}},line:1},"701":{name:"(anonymous_701)",decl:{start:{line:1,column:75497},end:{line:1,column:75498}},loc:{start:{line:1,column:75500},end:{line:1,column:75563}},line:1},"702":{name:"(anonymous_702)",decl:{start:{line:1,column:75567},end:{line:1,column:75568}},loc:{start:{line:1,column:75570},end:{line:1,column:75684}},line:1},"703":{name:"(anonymous_703)",decl:{start:{line:1,column:75688},end:{line:1,column:75689}},loc:{start:{line:1,column:75691},end:{line:1,column:75696}},line:1},"704":{name:"(anonymous_704)",decl:{start:{line:1,column:75715},end:{line:1,column:75716}},loc:{start:{line:1,column:75719},end:{line:1,column:75724}},line:1},"705":{name:"(anonymous_705)",decl:{start:{line:1,column:75733},end:{line:1,column:75734}},loc:{start:{line:1,column:75737},end:{line:1,column:81095}},line:1},"706":{name:"(anonymous_706)",decl:{start:{line:1,column:75746},end:{line:1,column:75747}},loc:{start:{line:1,column:75766},end:{line:1,column:75812}},line:1},"707":{name:"(anonymous_707)",decl:{start:{line:1,column:75812},end:{line:1,column:75813}},loc:{start:{line:1,column:75828},end:{line:1,column:75870}},line:1},"708":{name:"(anonymous_708)",decl:{start:{line:1,column:76185},end:{line:1,column:76186}},loc:{start:{line:1,column:76197},end:{line:1,column:76218}},line:1},"709":{name:"(anonymous_709)",decl:{start:{line:1,column:76218},end:{line:1,column:76219}},loc:{start:{line:1,column:76235},end:{line:1,column:76278}},line:1},"710":{name:"(anonymous_710)",decl:{start:{line:1,column:76581},end:{line:1,column:76582}},loc:{start:{line:1,column:76594},end:{line:1,column:76735}},line:1},"711":{name:"(anonymous_711)",decl:{start:{line:1,column:76692},end:{line:1,column:76693}},loc:{start:{line:1,column:76695},end:{line:1,column:76697}},line:1},"712":{name:"(anonymous_712)",decl:{start:{line:1,column:76761},end:{line:1,column:76762}},loc:{start:{line:1,column:76790},end:{line:1,column:77780}},line:1},"713":{name:"(anonymous_713)",decl:{start:{line:1,column:76841},end:{line:1,column:76842}},loc:{start:{line:1,column:76844},end:{line:1,column:77747}},line:1},"714":{name:"(anonymous_714)",decl:{start:{line:1,column:77780},end:{line:1,column:77781}},loc:{start:{line:1,column:77805},end:{line:1,column:77887}},line:1},"715":{name:"(anonymous_715)",decl:{start:{line:1,column:77887},end:{line:1,column:77888}},loc:{start:{line:1,column:77906},end:{line:1,column:78101}},line:1},"716":{name:"(anonymous_716)",decl:{start:{line:1,column:78101},end:{line:1,column:78102}},loc:{start:{line:1,column:78130},end:{line:1,column:78294}},line:1},"717":{name:"(anonymous_717)",decl:{start:{line:1,column:78240},end:{line:1,column:78241}},loc:{start:{line:1,column:78251},end:{line:1,column:78292}},line:1},"718":{name:"(anonymous_718)",decl:{start:{line:1,column:78294},end:{line:1,column:78295}},loc:{start:{line:1,column:78328},end:{line:1,column:78575}},line:1},"719":{name:"(anonymous_719)",decl:{start:{line:1,column:78529},end:{line:1,column:78530}},loc:{start:{line:1,column:78532},end:{line:1,column:78573}},line:1},"720":{name:"(anonymous_720)",decl:{start:{line:1,column:78575},end:{line:1,column:78576}},loc:{start:{line:1,column:78584},end:{line:1,column:78631}},line:1},"721":{name:"(anonymous_721)",decl:{start:{line:1,column:78631},end:{line:1,column:78632}},loc:{start:{line:1,column:78653},end:{line:1,column:78709}},line:1},"722":{name:"(anonymous_722)",decl:{start:{line:1,column:78709},end:{line:1,column:78710}},loc:{start:{line:1,column:78739},end:{line:1,column:78799}},line:1},"723":{name:"(anonymous_723)",decl:{start:{line:1,column:78799},end:{line:1,column:78800}},loc:{start:{line:1,column:78813},end:{line:1,column:78854}},line:1},"724":{name:"(anonymous_724)",decl:{start:{line:1,column:78854},end:{line:1,column:78855}},loc:{start:{line:1,column:78867},end:{line:1,column:78883}},line:1},"725":{name:"(anonymous_725)",decl:{start:{line:1,column:78883},end:{line:1,column:78884}},loc:{start:{line:1,column:78892},end:{line:1,column:79125}},line:1},"726":{name:"(anonymous_726)",decl:{start:{line:1,column:79125},end:{line:1,column:79126}},loc:{start:{line:1,column:79146},end:{line:1,column:79693}},line:1},"727":{name:"(anonymous_727)",decl:{start:{line:1,column:79693},end:{line:1,column:79694}},loc:{start:{line:1,column:79735},end:{line:1,column:79863}},line:1},"728":{name:"(anonymous_728)",decl:{start:{line:1,column:79863},end:{line:1,column:79864}},loc:{start:{line:1,column:79900},end:{line:1,column:79960}},line:1},"729":{name:"(anonymous_729)",decl:{start:{line:1,column:79960},end:{line:1,column:79961}},loc:{start:{line:1,column:79975},end:{line:1,column:80015}},line:1},"730":{name:"(anonymous_730)",decl:{start:{line:1,column:80015},end:{line:1,column:80016}},loc:{start:{line:1,column:80026},end:{line:1,column:80141}},line:1},"731":{name:"(anonymous_731)",decl:{start:{line:1,column:80141},end:{line:1,column:80142}},loc:{start:{line:1,column:80154},end:{line:1,column:80315}},line:1},"732":{name:"(anonymous_732)",decl:{start:{line:1,column:80315},end:{line:1,column:80316}},loc:{start:{line:1,column:80334},end:{line:1,column:80404}},line:1},"733":{name:"(anonymous_733)",decl:{start:{line:1,column:80367},end:{line:1,column:80368}},loc:{start:{line:1,column:80379},end:{line:1,column:80398}},line:1},"734":{name:"(anonymous_734)",decl:{start:{line:1,column:80404},end:{line:1,column:80405}},loc:{start:{line:1,column:80433},end:{line:1,column:80970}},line:1},"735":{name:"(anonymous_735)",decl:{start:{line:1,column:80541},end:{line:1,column:80542}},loc:{start:{line:1,column:80548},end:{line:1,column:80557}},line:1},"736":{name:"(anonymous_736)",decl:{start:{line:1,column:80604},end:{line:1,column:80605}},loc:{start:{line:1,column:80608},end:{line:1,column:80657}},line:1},"737":{name:"(anonymous_737)",decl:{start:{line:1,column:80624},end:{line:1,column:80625}},loc:{start:{line:1,column:80628},end:{line:1,column:80655}},line:1},"738":{name:"(anonymous_738)",decl:{start:{line:1,column:80987},end:{line:1,column:80988}},loc:{start:{line:1,column:80998},end:{line:1,column:81016}},line:1},"739":{name:"ra",decl:{start:{line:1,column:81108},end:{line:1,column:81110}},loc:{start:{line:1,column:81113},end:{line:1,column:81176}},line:1},"740":{name:"(anonymous_740)",decl:{start:{line:1,column:81184},end:{line:1,column:81185}},loc:{start:{line:1,column:81188},end:{line:1,column:81703}},line:1},"741":{name:"(anonymous_741)",decl:{start:{line:1,column:81289},end:{line:1,column:81290}},loc:{start:{line:1,column:81302},end:{line:1,column:81393}},line:1},"742":{name:"(anonymous_742)",decl:{start:{line:1,column:81352},end:{line:1,column:81353}},loc:{start:{line:1,column:81355},end:{line:1,column:81391}},line:1},"743":{name:"(anonymous_743)",decl:{start:{line:1,column:81393},end:{line:1,column:81394}},loc:{start:{line:1,column:81406},end:{line:1,column:81578}},line:1},"744":{name:"(anonymous_744)",decl:{start:{line:1,column:81595},end:{line:1,column:81596}},loc:{start:{line:1,column:81606},end:{line:1,column:81624}},line:1},"745":{name:"(anonymous_745)",decl:{start:{line:1,column:81711},end:{line:1,column:81712}},loc:{start:{line:1,column:81715},end:{line:1,column:86067}},line:1},"746":{name:"(anonymous_746)",decl:{start:{line:1,column:81851},end:{line:1,column:81852}},loc:{start:{line:1,column:81855},end:{line:1,column:81933}},line:1},"747":{name:"(anonymous_747)",decl:{start:{line:1,column:81935},end:{line:1,column:81936}},loc:{start:{line:1,column:81945},end:{line:1,column:81974}},line:1},"748":{name:"(anonymous_748)",decl:{start:{line:1,column:81974},end:{line:1,column:81975}},loc:{start:{line:1,column:81985},end:{line:1,column:82011}},line:1},"749":{name:"(anonymous_749)",decl:{start:{line:1,column:82011},end:{line:1,column:82012}},loc:{start:{line:1,column:82024},end:{line:1,column:82045}},line:1},"750":{name:"(anonymous_750)",decl:{start:{line:1,column:82045},end:{line:1,column:82046}},loc:{start:{line:1,column:82057},end:{line:1,column:82081}},line:1},"751":{name:"(anonymous_751)",decl:{start:{line:1,column:82099},end:{line:1,column:82100}},loc:{start:{line:1,column:82117},end:{line:1,column:82143}},line:1},"752":{name:"(anonymous_752)",decl:{start:{line:1,column:82143},end:{line:1,column:82144}},loc:{start:{line:1,column:82160},end:{line:1,column:82189}},line:1},"753":{name:"(anonymous_753)",decl:{start:{line:1,column:82218},end:{line:1,column:82219}},loc:{start:{line:1,column:82222},end:{line:1,column:82224}},line:1},"754":{name:"(anonymous_754)",decl:{start:{line:1,column:82227},end:{line:1,column:82228}},loc:{start:{line:1,column:82242},end:{line:1,column:82265}},line:1},"755":{name:"(anonymous_755)",decl:{start:{line:1,column:82265},end:{line:1,column:82266}},loc:{start:{line:1,column:82279},end:{line:1,column:82305}},line:1},"756":{name:"(anonymous_756)",decl:{start:{line:1,column:82325},end:{line:1,column:82326}},loc:{start:{line:1,column:82351},end:{line:1,column:82385}},line:1},"757":{name:"(anonymous_757)",decl:{start:{line:1,column:82385},end:{line:1,column:82386}},loc:{start:{line:1,column:82410},end:{line:1,column:82447}},line:1},"758":{name:"(anonymous_758)",decl:{start:{line:1,column:82478},end:{line:1,column:82479}},loc:{start:{line:1,column:82490},end:{line:1,column:82510}},line:1},"759":{name:"(anonymous_759)",decl:{start:{line:1,column:82510},end:{line:1,column:82511}},loc:{start:{line:1,column:82521},end:{line:1,column:82544}},line:1},"760":{name:"(anonymous_760)",decl:{start:{line:1,column:82567},end:{line:1,column:82568}},loc:{start:{line:1,column:82571},end:{line:1,column:82573}},line:1},"761":{name:"(anonymous_761)",decl:{start:{line:1,column:82576},end:{line:1,column:82577}},loc:{start:{line:1,column:82587},end:{line:1,column:82606}},line:1},"762":{name:"(anonymous_762)",decl:{start:{line:1,column:82606},end:{line:1,column:82607}},loc:{start:{line:1,column:82616},end:{line:1,column:82638}},line:1},"763":{name:"(anonymous_763)",decl:{start:{line:1,column:82660},end:{line:1,column:82661}},loc:{start:{line:1,column:82664},end:{line:1,column:82666}},line:1},"764":{name:"(anonymous_764)",decl:{start:{line:1,column:82669},end:{line:1,column:82670}},loc:{start:{line:1,column:82686},end:{line:1,column:82711}},line:1},"765":{name:"(anonymous_765)",decl:{start:{line:1,column:82711},end:{line:1,column:82712}},loc:{start:{line:1,column:82727},end:{line:1,column:82755}},line:1},"766":{name:"(anonymous_766)",decl:{start:{line:1,column:82777},end:{line:1,column:82778}},loc:{start:{line:1,column:82800},end:{line:1,column:82831}},line:1},"767":{name:"(anonymous_767)",decl:{start:{line:1,column:82831},end:{line:1,column:82832}},loc:{start:{line:1,column:82853},end:{line:1,column:82887}},line:1},"768":{name:"(anonymous_768)",decl:{start:{line:1,column:82911},end:{line:1,column:82912}},loc:{start:{line:1,column:82936},end:{line:1,column:82969}},line:1},"769":{name:"(anonymous_769)",decl:{start:{line:1,column:82969},end:{line:1,column:82970}},loc:{start:{line:1,column:82993},end:{line:1,column:83029}},line:1},"770":{name:"(anonymous_770)",decl:{start:{line:1,column:83055},end:{line:1,column:83056}},loc:{start:{line:1,column:83072},end:{line:1,column:83097}},line:1},"771":{name:"(anonymous_771)",decl:{start:{line:1,column:83097},end:{line:1,column:83098}},loc:{start:{line:1,column:83113},end:{line:1,column:83141}},line:1},"772":{name:"(anonymous_772)",decl:{start:{line:1,column:83276},end:{line:1,column:83277}},loc:{start:{line:1,column:83300},end:{line:1,column:83589}},line:1},"773":{name:"(anonymous_773)",decl:{start:{line:1,column:83589},end:{line:1,column:83590}},loc:{start:{line:1,column:83618},end:{line:1,column:83710}},line:1},"774":{name:"(anonymous_774)",decl:{start:{line:1,column:83710},end:{line:1,column:83711}},loc:{start:{line:1,column:83724},end:{line:1,column:83751}},line:1},"775":{name:"(anonymous_775)",decl:{start:{line:1,column:83775},end:{line:1,column:83776}},loc:{start:{line:1,column:83792},end:{line:1,column:83994}},line:1},"776":{name:"(anonymous_776)",decl:{start:{line:1,column:83994},end:{line:1,column:83995}},loc:{start:{line:1,column:84012},end:{line:1,column:84366}},line:1},"777":{name:"(anonymous_777)",decl:{start:{line:1,column:84306},end:{line:1,column:84307}},loc:{start:{line:1,column:84309},end:{line:1,column:84342}},line:1},"778":{name:"(anonymous_778)",decl:{start:{line:1,column:84366},end:{line:1,column:84367}},loc:{start:{line:1,column:84379},end:{line:1,column:84381}},line:1},"779":{name:"(anonymous_779)",decl:{start:{line:1,column:84381},end:{line:1,column:84382}},loc:{start:{line:1,column:84405},end:{line:1,column:84504}},line:1},"780":{name:"(anonymous_780)",decl:{start:{line:1,column:84516},end:{line:1,column:84517}},loc:{start:{line:1,column:84520},end:{line:1,column:85104}},line:1},"781":{name:"(anonymous_781)",decl:{start:{line:1,column:84621},end:{line:1,column:84622}},loc:{start:{line:1,column:84624},end:{line:1,column:84651}},line:1},"782":{name:"(anonymous_782)",decl:{start:{line:1,column:85112},end:{line:1,column:85113}},loc:{start:{line:1,column:85119},end:{line:1,column:85160}},line:1},"783":{name:"(anonymous_783)",decl:{start:{line:1,column:85163},end:{line:1,column:85164}},loc:{start:{line:1,column:85176},end:{line:1,column:85201}},line:1},"784":{name:"(anonymous_784)",decl:{start:{line:1,column:85201},end:{line:1,column:85202}},loc:{start:{line:1,column:85215},end:{line:1,column:85335}},line:1},"785":{name:"(anonymous_785)",decl:{start:{line:1,column:85352},end:{line:1,column:85353}},loc:{start:{line:1,column:85363},end:{line:1,column:85425}},line:1},"786":{name:"(anonymous_786)",decl:{start:{line:1,column:85511},end:{line:1,column:85512}},loc:{start:{line:1,column:85524},end:{line:1,column:85680}},line:1},"787":{name:"(anonymous_787)",decl:{start:{line:1,column:85541},end:{line:1,column:85542}},loc:{start:{line:1,column:85552},end:{line:1,column:85620}},line:1},"788":{name:"(anonymous_788)",decl:{start:{line:1,column:86075},end:{line:1,column:86076}},loc:{start:{line:1,column:86079},end:{line:1,column:88455}},line:1},"789":{name:"(anonymous_789)",decl:{start:{line:1,column:86200},end:{line:1,column:86201}},loc:{start:{line:1,column:86214},end:{line:1,column:86237}},line:1},"790":{name:"(anonymous_790)",decl:{start:{line:1,column:86341},end:{line:1,column:86342}},loc:{start:{line:1,column:86361},end:{line:1,column:86503}},line:1},"791":{name:"(anonymous_791)",decl:{start:{line:1,column:86467},end:{line:1,column:86468}},loc:{start:{line:1,column:86470},end:{line:1,column:86501}},line:1},"792":{name:"(anonymous_792)",decl:{start:{line:1,column:86503},end:{line:1,column:86504}},loc:{start:{line:1,column:86523},end:{line:1,column:86631}},line:1},"793":{name:"(anonymous_793)",decl:{start:{line:1,column:86575},end:{line:1,column:86576}},loc:{start:{line:1,column:86578},end:{line:1,column:86629}},line:1},"794":{name:"(anonymous_794)",decl:{start:{line:1,column:86631},end:{line:1,column:86632}},loc:{start:{line:1,column:86661},end:{line:1,column:86920}},line:1},"795":{name:"(anonymous_795)",decl:{start:{line:1,column:86760},end:{line:1,column:86761}},loc:{start:{line:1,column:86763},end:{line:1,column:86766}},line:1},"796":{name:"(anonymous_796)",decl:{start:{line:1,column:86772},end:{line:1,column:86773}},loc:{start:{line:1,column:86775},end:{line:1,column:86786}},line:1},"797":{name:"(anonymous_797)",decl:{start:{line:1,column:86848},end:{line:1,column:86849}},loc:{start:{line:1,column:86851},end:{line:1,column:86918}},line:1},"798":{name:"(anonymous_798)",decl:{start:{line:1,column:86920},end:{line:1,column:86921}},loc:{start:{line:1,column:86943},end:{line:1,column:87012}},line:1},"799":{name:"(anonymous_799)",decl:{start:{line:1,column:87004},end:{line:1,column:87005}},loc:{start:{line:1,column:87007},end:{line:1,column:87010}},line:1},"800":{name:"(anonymous_800)",decl:{start:{line:1,column:87012},end:{line:1,column:87013}},loc:{start:{line:1,column:87026},end:{line:1,column:87041}},line:1},"801":{name:"(anonymous_801)",decl:{start:{line:1,column:87041},end:{line:1,column:87042}},loc:{start:{line:1,column:87054},end:{line:1,column:87148}},line:1},"802":{name:"(anonymous_802)",decl:{start:{line:1,column:87148},end:{line:1,column:87149}},loc:{start:{line:1,column:87156},end:{line:1,column:87693}},line:1},"803":{name:"(anonymous_803)",decl:{start:{line:1,column:87209},end:{line:1,column:87210}},loc:{start:{line:1,column:87213},end:{line:1,column:87691}},line:1},"804":{name:"(anonymous_804)",decl:{start:{line:1,column:87263},end:{line:1,column:87264}},loc:{start:{line:1,column:87266},end:{line:1,column:87378}},line:1},"805":{name:"(anonymous_805)",decl:{start:{line:1,column:87693},end:{line:1,column:87694}},loc:{start:{line:1,column:87708},end:{line:1,column:87887}},line:1},"806":{name:"(anonymous_806)",decl:{start:{line:1,column:87841},end:{line:1,column:87842}},loc:{start:{line:1,column:87844},end:{line:1,column:87886}},line:1},"807":{name:"(anonymous_807)",decl:{start:{line:1,column:87887},end:{line:1,column:87888}},loc:{start:{line:1,column:87903},end:{line:1,column:87992}},line:1},"808":{name:"(anonymous_808)",decl:{start:{line:1,column:88009},end:{line:1,column:88010}},loc:{start:{line:1,column:88020},end:{line:1,column:88062}},line:1},"809":{name:"(anonymous_809)",decl:{start:{line:1,column:88145},end:{line:1,column:88146}},loc:{start:{line:1,column:88160},end:{line:1,column:88216}},line:1},"810":{name:"sa",decl:{start:{line:1,column:88468},end:{line:1,column:88470}},loc:{start:{line:1,column:88473},end:{line:1,column:88543}},line:1},"811":{name:"(anonymous_811)",decl:{start:{line:1,column:88566},end:{line:1,column:88567}},loc:{start:{line:1,column:88570},end:{line:1,column:90090}},line:1},"812":{name:"(anonymous_812)",decl:{start:{line:1,column:88634},end:{line:1,column:88635}},loc:{start:{line:1,column:88654},end:{line:1,column:88725}},line:1},"813":{name:"(anonymous_813)",decl:{start:{line:1,column:88725},end:{line:1,column:88726}},loc:{start:{line:1,column:88742},end:{line:1,column:88848}},line:1},"814":{name:"(anonymous_814)",decl:{start:{line:1,column:88787},end:{line:1,column:88788}},loc:{start:{line:1,column:88790},end:{line:1,column:88804}},line:1},"815":{name:"(anonymous_815)",decl:{start:{line:1,column:88809},end:{line:1,column:88810}},loc:{start:{line:1,column:88813},end:{line:1,column:88827}},line:1},"816":{name:"(anonymous_816)",decl:{start:{line:1,column:88840},end:{line:1,column:88841}},loc:{start:{line:1,column:88844},end:{line:1,column:88846}},line:1},"817":{name:"(anonymous_817)",decl:{start:{line:1,column:88848},end:{line:1,column:88849}},loc:{start:{line:1,column:88857},end:{line:1,column:88918}},line:1},"818":{name:"(anonymous_818)",decl:{start:{line:1,column:88918},end:{line:1,column:88919}},loc:{start:{line:1,column:88931},end:{line:1,column:88965}},line:1},"819":{name:"(anonymous_819)",decl:{start:{line:1,column:88965},end:{line:1,column:88966}},loc:{start:{line:1,column:88983},end:{line:1,column:89467}},line:1},"820":{name:"(anonymous_820)",decl:{start:{line:1,column:89467},end:{line:1,column:89468}},loc:{start:{line:1,column:89485},end:{line:1,column:89942}},line:1},"821":{name:"(anonymous_821)",decl:{start:{line:1,column:89527},end:{line:1,column:89528}},loc:{start:{line:1,column:89531},end:{line:1,column:89940}},line:1},"822":{name:"(anonymous_822)",decl:{start:{line:1,column:89663},end:{line:1,column:89664}},loc:{start:{line:1,column:89666},end:{line:1,column:89818}},line:1},"823":{name:"(anonymous_823)",decl:{start:{line:1,column:89959},end:{line:1,column:89960}},loc:{start:{line:1,column:89970},end:{line:1,column:90011}},line:1},"824":{name:"(anonymous_824)",decl:{start:{line:1,column:90111},end:{line:1,column:90112}},loc:{start:{line:1,column:90115},end:{line:1,column:92299}},line:1},"825":{name:"(anonymous_825)",decl:{start:{line:1,column:90299},end:{line:1,column:90300}},loc:{start:{line:1,column:90313},end:{line:1,column:90423}},line:1},"826":{name:"(anonymous_826)",decl:{start:{line:1,column:90423},end:{line:1,column:90424}},loc:{start:{line:1,column:90429},end:{line:1,column:90656}},line:1},"827":{name:"(anonymous_827)",decl:{start:{line:1,column:90656},end:{line:1,column:90657}},loc:{start:{line:1,column:90676},end:{line:1,column:91190}},line:1},"828":{name:"(anonymous_828)",decl:{start:{line:1,column:90718},end:{line:1,column:90719}},loc:{start:{line:1,column:90721},end:{line:1,column:91188}},line:1},"829":{name:"(anonymous_829)",decl:{start:{line:1,column:91190},end:{line:1,column:91191}},loc:{start:{line:1,column:91211},end:{line:1,column:91752}},line:1},"830":{name:"(anonymous_830)",decl:{start:{line:1,column:91253},end:{line:1,column:91254}},loc:{start:{line:1,column:91256},end:{line:1,column:91750}},line:1},"831":{name:"(anonymous_831)",decl:{start:{line:1,column:91752},end:{line:1,column:91753}},loc:{start:{line:1,column:91776},end:{line:1,column:92100}},line:1},"832":{name:"(anonymous_832)",decl:{start:{line:1,column:91864},end:{line:1,column:91865}},loc:{start:{line:1,column:91873},end:{line:1,column:92098}},line:1},"833":{name:"(anonymous_833)",decl:{start:{line:1,column:91892},end:{line:1,column:91893}},loc:{start:{line:1,column:91895},end:{line:1,column:91969}},line:1},"834":{name:"(anonymous_834)",decl:{start:{line:1,column:91985},end:{line:1,column:91986}},loc:{start:{line:1,column:91989},end:{line:1,column:92096}},line:1},"835":{name:"(anonymous_835)",decl:{start:{line:1,column:92100},end:{line:1,column:92101}},loc:{start:{line:1,column:92113},end:{line:1,column:92204}},line:1},"836":{name:"(anonymous_836)",decl:{start:{line:1,column:92221},end:{line:1,column:92222}},loc:{start:{line:1,column:92232},end:{line:1,column:92238}},line:1},"837":{name:"ca",decl:{start:{line:1,column:92312},end:{line:1,column:92314}},loc:{start:{line:1,column:92322},end:{line:1,column:92462}},line:1},"838":{name:"(anonymous_838)",decl:{start:{line:1,column:92438},end:{line:1,column:92439}},loc:{start:{line:1,column:92441},end:{line:1,column:92458}},line:1},"839":{name:"Xi",decl:{start:{line:1,column:92471},end:{line:1,column:92473}},loc:{start:{line:1,column:92475},end:{line:1,column:92505}},line:1},"840":{name:"it",decl:{start:{line:1,column:92514},end:{line:1,column:92516}},loc:{start:{line:1,column:92521},end:{line:1,column:92561}},line:1},"841":{name:"eo",decl:{start:{line:1,column:92570},end:{line:1,column:92572}},loc:{start:{line:1,column:92574},end:{line:1,column:92890}},line:1},"842":{name:"(anonymous_842)",decl:{start:{line:1,column:92594},end:{line:1,column:92595}},loc:{start:{line:1,column:92597},end:{line:1,column:92889}},line:1},"843":{name:"(anonymous_843)",decl:{start:{line:1,column:92915},end:{line:1,column:92916}},loc:{start:{line:1,column:92919},end:{line:1,column:92925}},line:1},"844":{name:"(anonymous_844)",decl:{start:{line:1,column:92949},end:{line:1,column:92950}},loc:{start:{line:1,column:92953},end:{line:1,column:92954}},line:1},"845":{name:"no",decl:{start:{line:1,column:92966},end:{line:1,column:92968}},loc:{start:{line:1,column:92970},end:{line:1,column:93257}},line:1},"846":{name:"(anonymous_846)",decl:{start:{line:1,column:93030},end:{line:1,column:93031}},loc:{start:{line:1,column:93034},end:{line:1,column:93239}},line:1},"847":{name:"(anonymous_847)",decl:{start:{line:1,column:93087},end:{line:1,column:93088}},loc:{start:{line:1,column:93091},end:{line:1,column:93237}},line:1},"848":{name:"(anonymous_848)",decl:{start:{line:1,column:93103},end:{line:1,column:93104}},loc:{start:{line:1,column:93106},end:{line:1,column:93236}},line:1},"849":{name:"(anonymous_849)",decl:{start:{line:1,column:93139},end:{line:1,column:93140}},loc:{start:{line:1,column:93143},end:{line:1,column:93150}},line:1},"850":{name:"(anonymous_850)",decl:{start:{line:1,column:93181},end:{line:1,column:93182}},loc:{start:{line:1,column:93186},end:{line:1,column:93212}},line:1},"851":{name:"ro",decl:{start:{line:1,column:93266},end:{line:1,column:93268}},loc:{start:{line:1,column:93270},end:{line:1,column:93363}},line:1},"852":{name:"(anonymous_852)",decl:{start:{line:1,column:93281},end:{line:1,column:93282}},loc:{start:{line:1,column:93285},end:{line:1,column:93321}},line:1},"853":{name:"oo",decl:{start:{line:1,column:93389},end:{line:1,column:93391}},loc:{start:{line:1,column:93394},end:{line:1,column:93465}},line:1},"854":{name:"so",decl:{start:{line:1,column:93474},end:{line:1,column:93476}},loc:{start:{line:1,column:93478},end:{line:1,column:93525}},line:1},"855":{name:"ao",decl:{start:{line:1,column:93534},end:{line:1,column:93536}},loc:{start:{line:1,column:93539},end:{line:1,column:93693}},line:1},"856":{name:"(anonymous_856)",decl:{start:{line:1,column:93770},end:{line:1,column:93771}},loc:{start:{line:1,column:93774},end:{line:1,column:94393}},line:1},"857":{name:"(anonymous_857)",decl:{start:{line:1,column:93783},end:{line:1,column:93784}},loc:{start:{line:1,column:93796},end:{line:1,column:93798}},line:1},"858":{name:"(anonymous_858)",decl:{start:{line:1,column:93798},end:{line:1,column:93799}},loc:{start:{line:1,column:93817},end:{line:1,column:94200}},line:1},"859":{name:"(anonymous_859)",decl:{start:{line:1,column:94200},end:{line:1,column:94201}},loc:{start:{line:1,column:94218},end:{line:1,column:94283}},line:1},"860":{name:"(anonymous_860)",decl:{start:{line:1,column:94300},end:{line:1,column:94301}},loc:{start:{line:1,column:94311},end:{line:1,column:94329}},line:1},"861":{name:"la",decl:{start:{line:1,column:94406},end:{line:1,column:94408}},loc:{start:{line:1,column:94410},end:{line:1,column:94528}},line:1},"862":{name:"(anonymous_862)",decl:{start:{line:1,column:94440},end:{line:1,column:94441}},loc:{start:{line:1,column:94444},end:{line:1,column:94526}},line:1},"863":{name:"da",decl:{start:{line:1,column:94537},end:{line:1,column:94539}},loc:{start:{line:1,column:94541},end:{line:1,column:94573}},line:1},"864":{name:"ha",decl:{start:{line:1,column:94582},end:{line:1,column:94584}},loc:{start:{line:1,column:94586},end:{line:1,column:94618}},line:1},"865":{name:"fa",decl:{start:{line:1,column:94627},end:{line:1,column:94629}},loc:{start:{line:1,column:94632},end:{line:1,column:94762}},line:1},"866":{name:"pa",decl:{start:{line:1,column:94788},end:{line:1,column:94790}},loc:{start:{line:1,column:94792},end:{line:1,column:94865}},line:1}},branchMap:{"0":{loc:{start:{line:1,column:1353},end:{line:1,column:1357}},type:"binary-expr",locations:[{start:{line:1,column:1353},end:{line:1,column:1354}},{start:{line:1,column:1356},end:{line:1,column:1357}}],line:1},"1":{loc:{start:{line:1,column:1668},end:{line:1,column:1692}},type:"binary-expr",locations:[{start:{line:1,column:1668},end:{line:1,column:1669}},{start:{line:1,column:1671},end:{line:1,column:1692}}],line:1},"2":{loc:{start:{line:1,column:1858},end:{line:1,column:1872}},type:"if",locations:[{start:{line:1,column:1858},end:{line:1,column:1872}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"3":{loc:{start:{line:1,column:1872},end:{line:1,column:1938}},type:"if",locations:[{start:{line:1,column:1872},end:{line:1,column:1938}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"4":{loc:{start:{line:1,column:2020},end:{line:1,column:2024}},type:"binary-expr",locations:[{start:{line:1,column:2020},end:{line:1,column:2021}},{start:{line:1,column:2023},end:{line:1,column:2024}}],line:1},"5":{loc:{start:{line:1,column:2327},end:{line:1,column:2526}},type:"if",locations:[{start:{line:1,column:2327},end:{line:1,column:2526}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"6":{loc:{start:{line:1,column:2369},end:{line:1,column:2526}},type:"cond-expr",locations:[{start:{line:1,column:2398},end:{line:1,column:2467}},{start:{line:1,column:2468},end:{line:1,column:2526}}],line:1},"7":{loc:{start:{line:1,column:2468},end:{line:1,column:2526}},type:"binary-expr",locations:[{start:{line:1,column:2468},end:{line:1,column:2481}},{start:{line:1,column:2483},end:{line:1,column:2526}}],line:1},"8":{loc:{start:{line:1,column:2744},end:{line:1,column:2748}},type:"default-arg",locations:[{start:{line:1,column:2746},end:{line:1,column:2748}}],line:1},"9":{loc:{start:{line:1,column:3100},end:{line:1,column:3196}},type:"cond-expr",locations:[{start:{line:1,column:3102},end:{line:1,column:3111}},{start:{line:1,column:3112},end:{line:1,column:3196}}],line:1},"10":{loc:{start:{line:1,column:3229},end:{line:1,column:3284}},type:"binary-expr",locations:[{start:{line:1,column:3229},end:{line:1,column:3230}},{start:{line:1,column:3233},end:{line:1,column:3283}}],line:1},"11":{loc:{start:{line:1,column:3243},end:{line:1,column:3283}},type:"binary-expr",locations:[{start:{line:1,column:3243},end:{line:1,column:3253}},{start:{line:1,column:3256},end:{line:1,column:3282}}],line:1},"12":{loc:{start:{line:1,column:3631},end:{line:1,column:3677}},type:"binary-expr",locations:[{start:{line:1,column:3631},end:{line:1,column:3641}},{start:{line:1,column:3643},end:{line:1,column:3677}}],line:1},"13":{loc:{start:{line:1,column:3735},end:{line:1,column:3739}},type:"binary-expr",locations:[{start:{line:1,column:3735},end:{line:1,column:3736}},{start:{line:1,column:3738},end:{line:1,column:3739}}],line:1},"14":{loc:{start:{line:1,column:4481},end:{line:1,column:4487}},type:"default-arg",locations:[{start:{line:1,column:4483},end:{line:1,column:4487}}],line:1},"15":{loc:{start:{line:1,column:4488},end:{line:1,column:4494}},type:"default-arg",locations:[{start:{line:1,column:4490},end:{line:1,column:4494}}],line:1},"16":{loc:{start:{line:1,column:4721},end:{line:1,column:4759}},type:"if",locations:[{start:{line:1,column:4721},end:{line:1,column:4759}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"17":{loc:{start:{line:1,column:4724},end:{line:1,column:4730}},type:"binary-expr",locations:[{start:{line:1,column:4724},end:{line:1,column:4726}},{start:{line:1,column:4728},end:{line:1,column:4730}}],line:1},"18":{loc:{start:{line:1,column:4802},end:{line:1,column:4867}},type:"cond-expr",locations:[{start:{line:1,column:4818},end:{line:1,column:4834}},{start:{line:1,column:4835},end:{line:1,column:4867}}],line:1},"19":{loc:{start:{line:1,column:4835},end:{line:1,column:4867}},type:"binary-expr",locations:[{start:{line:1,column:4835},end:{line:1,column:4850}},{start:{line:1,column:4852},end:{line:1,column:4867}}],line:1},"20":{loc:{start:{line:1,column:4937},end:{line:1,column:5340}},type:"if",locations:[{start:{line:1,column:4937},end:{line:1,column:5340}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"21":{loc:{start:{line:1,column:5072},end:{line:1,column:5326}},type:"switch",locations:[{start:{line:1,column:5096},end:{line:1,column:5154}},{start:{line:1,column:5154},end:{line:1,column:5212}},{start:{line:1,column:5212},end:{line:1,column:5288}},{start:{line:1,column:5288},end:{line:1,column:5325}}],line:1},"22":{loc:{start:{line:1,column:5486},end:{line:1,column:5490}},type:"binary-expr",locations:[{start:{line:1,column:5486},end:{line:1,column:5487}},{start:{line:1,column:5489},end:{line:1,column:5490}}],line:1},"23":{loc:{start:{line:1,column:5847},end:{line:1,column:5911}},type:"cond-expr",locations:[{start:{line:1,column:5849},end:{line:1,column:5885}},{start:{line:1,column:5886},end:{line:1,column:5911}}],line:1},"24":{loc:{start:{line:1,column:5874},end:{line:1,column:5882}},type:"binary-expr",locations:[{start:{line:1,column:5874},end:{line:1,column:5879}},{start:{line:1,column:5881},end:{line:1,column:5882}}],line:1},"25":{loc:{start:{line:1,column:6028},end:{line:1,column:6045}},type:"cond-expr",locations:[{start:{line:1,column:6034},end:{line:1,column:6043}},{start:{line:1,column:6044},end:{line:1,column:6045}}],line:1},"26":{loc:{start:{line:1,column:6082},end:{line:1,column:6122}},type:"binary-expr",locations:[{start:{line:1,column:6082},end:{line:1,column:6083}},{start:{line:1,column:6085},end:{line:1,column:6122}}],line:1},"27":{loc:{start:{line:1,column:6086},end:{line:1,column:6103}},type:"cond-expr",locations:[{start:{line:1,column:6092},end:{line:1,column:6101}},{start:{line:1,column:6102},end:{line:1,column:6103}}],line:1},"28":{loc:{start:{line:1,column:6180},end:{line:1,column:6226}},type:"cond-expr",locations:[{start:{line:1,column:6199},end:{line:1,column:6224}},{start:{line:1,column:6225},end:{line:1,column:6226}}],line:1},"29":{loc:{start:{line:1,column:6227},end:{line:1,column:6255}},type:"if",locations:[{start:{line:1,column:6227},end:{line:1,column:6255}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"30":{loc:{start:{line:1,column:6262},end:{line:1,column:6283}},type:"binary-expr",locations:[{start:{line:1,column:6262},end:{line:1,column:6263}},{start:{line:1,column:6266},end:{line:1,column:6282}}],line:1},"31":{loc:{start:{line:1,column:6378},end:{line:1,column:6476}},type:"if",locations:[{start:{line:1,column:6378},end:{line:1,column:6476}},{start:{line:1,column:6457},end:{line:1,column:6476}}],line:1},"32":{loc:{start:{line:1,column:6406},end:{line:1,column:6451}},type:"cond-expr",locations:[{start:{line:1,column:6408},end:{line:1,column:6431}},{start:{line:1,column:6432},end:{line:1,column:6451}}],line:1},"33":{loc:{start:{line:1,column:6500},end:{line:1,column:6601}},type:"if",locations:[{start:{line:1,column:6500},end:{line:1,column:6601}},{start:{line:1,column:6581},end:{line:1,column:6601}}],line:1},"34":{loc:{start:{line:1,column:6518},end:{line:1,column:6575}},type:"cond-expr",locations:[{start:{line:1,column:6520},end:{line:1,column:6544}},{start:{line:1,column:6545},end:{line:1,column:6575}}],line:1},"35":{loc:{start:{line:1,column:6692},end:{line:1,column:6788}},type:"cond-expr",locations:[{start:{line:1,column:6721},end:{line:1,column:6775}},{start:{line:1,column:6776},end:{line:1,column:6788}}],line:1},"36":{loc:{start:{line:1,column:6745},end:{line:1,column:6774}},type:"cond-expr",locations:[{start:{line:1,column:6760},end:{line:1,column:6771}},{start:{line:1,column:6772},end:{line:1,column:6774}}],line:1},"37":{loc:{start:{line:1,column:6808},end:{line:1,column:6861}},type:"cond-expr",locations:[{start:{line:1,column:6822},end:{line:1,column:6847}},{start:{line:1,column:6848},end:{line:1,column:6861}}],line:1},"38":{loc:{start:{line:1,column:6881},end:{line:1,column:6898}},type:"binary-expr",locations:[{start:{line:1,column:6881},end:{line:1,column:6888}},{start:{line:1,column:6891},end:{line:1,column:6897}}],line:1},"39":{loc:{start:{line:1,column:6943},end:{line:1,column:7032}},type:"if",locations:[{start:{line:1,column:6943},end:{line:1,column:7032}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"40":{loc:{start:{line:1,column:6946},end:{line:1,column:7010}},type:"binary-expr",locations:[{start:{line:1,column:6946},end:{line:1,column:6964}},{start:{line:1,column:6967},end:{line:1,column:7009}}],line:1},"41":{loc:{start:{line:1,column:7076},end:{line:1,column:7164}},type:"binary-expr",locations:[{start:{line:1,column:7076},end:{line:1,column:7114}},{start:{line:1,column:7117},end:{line:1,column:7163}}],line:1},"42":{loc:{start:{line:1,column:7246},end:{line:1,column:7277}},type:"if",locations:[{start:{line:1,column:7246},end:{line:1,column:7277}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"43":{loc:{start:{line:1,column:7277},end:{line:1,column:7306}},type:"binary-expr",locations:[{start:{line:1,column:7277},end:{line:1,column:7286}},{start:{line:1,column:7288},end:{line:1,column:7306}}],line:1},"44":{loc:{start:{line:1,column:7332},end:{line:1,column:7374}},type:"binary-expr",locations:[{start:{line:1,column:7332},end:{line:1,column:7354}},{start:{line:1,column:7356},end:{line:1,column:7374}}],line:1},"45":{loc:{start:{line:1,column:7562},end:{line:1,column:7631}},type:"binary-expr",locations:[{start:{line:1,column:7562},end:{line:1,column:7583}},{start:{line:1,column:7585},end:{line:1,column:7631}}],line:1},"46":{loc:{start:{line:1,column:7714},end:{line:1,column:7742}},type:"binary-expr",locations:[{start:{line:1,column:7714},end:{line:1,column:7715}},{start:{line:1,column:7717},end:{line:1,column:7742}}],line:1},"47":{loc:{start:{line:1,column:7820},end:{line:1,column:7915}},type:"if",locations:[{start:{line:1,column:7820},end:{line:1,column:7915}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"48":{loc:{start:{line:1,column:7855},end:{line:1,column:7883}},type:"binary-expr",locations:[{start:{line:1,column:7855},end:{line:1,column:7856}},{start:{line:1,column:7858},end:{line:1,column:7883}}],line:1},"49":{loc:{start:{line:1,column:7943},end:{line:1,column:7976}},type:"cond-expr",locations:[{start:{line:1,column:7959},end:{line:1,column:7974}},{start:{line:1,column:7975},end:{line:1,column:7976}}],line:1},"50":{loc:{start:{line:1,column:8270},end:{line:1,column:8342}},type:"binary-expr",locations:[{start:{line:1,column:8270},end:{line:1,column:8291}},{start:{line:1,column:8293},end:{line:1,column:8342}}],line:1},"51":{loc:{start:{line:1,column:8553},end:{line:1,column:8564}},type:"cond-expr",locations:[{start:{line:1,column:8555},end:{line:1,column:8562}},{start:{line:1,column:8563},end:{line:1,column:8564}}],line:1},"52":{loc:{start:{line:1,column:8689},end:{line:1,column:8796}},type:"binary-expr",locations:[{start:{line:1,column:8689},end:{line:1,column:8719}},{start:{line:1,column:8721},end:{line:1,column:8732}},{start:{line:1,column:8734},end:{line:1,column:8796}}],line:1},"53":{loc:{start:{line:1,column:9381},end:{line:1,column:9409}},type:"binary-expr",locations:[{start:{line:1,column:9381},end:{line:1,column:9382}},{start:{line:1,column:9384},end:{line:1,column:9409}}],line:1},"54":{loc:{start:{line:1,column:9691},end:{line:1,column:9750}},type:"cond-expr",locations:[{start:{line:1,column:9704},end:{line:1,column:9710}},{start:{line:1,column:9711},end:{line:1,column:9750}}],line:1},"55":{loc:{start:{line:1,column:9711},end:{line:1,column:9750}},type:"cond-expr",locations:[{start:{line:1,column:9726},end:{line:1,column:9727}},{start:{line:1,column:9728},end:{line:1,column:9750}}],line:1},"56":{loc:{start:{line:1,column:9728},end:{line:1,column:9750}},type:"cond-expr",locations:[{start:{line:1,column:9739},end:{line:1,column:9745}},{start:{line:1,column:9746},end:{line:1,column:9750}}],line:1},"57":{loc:{start:{line:1,column:9784},end:{line:1,column:9802}},type:"cond-expr",locations:[{start:{line:1,column:9792},end:{line:1,column:9796}},{start:{line:1,column:9797},end:{line:1,column:9802}}],line:1},"58":{loc:{start:{line:1,column:9955},end:{line:1,column:9994}},type:"binary-expr",locations:[{start:{line:1,column:9955},end:{line:1,column:9957}},{start:{line:1,column:9959},end:{line:1,column:9994}}],line:1},"59":{loc:{start:{line:1,column:9995},end:{line:1,column:10026}},type:"cond-expr",locations:[{start:{line:1,column:9998},end:{line:1,column:10021}},{start:{line:1,column:10022},end:{line:1,column:10026}}],line:1},"60":{loc:{start:{line:1,column:10181},end:{line:1,column:10185}},type:"binary-expr",locations:[{start:{line:1,column:10181},end:{line:1,column:10182}},{start:{line:1,column:10184},end:{line:1,column:10185}}],line:1},"61":{loc:{start:{line:1,column:10937},end:{line:1,column:10996}},type:"if",locations:[{start:{line:1,column:10937},end:{line:1,column:10996}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"62":{loc:{start:{line:1,column:10940},end:{line:1,column:10983}},type:"binary-expr",locations:[{start:{line:1,column:10940},end:{line:1,column:10952}},{start:{line:1,column:10954},end:{line:1,column:10983}}],line:1},"63":{loc:{start:{line:1,column:10956},end:{line:1,column:10982}},type:"binary-expr",locations:[{start:{line:1,column:10956},end:{line:1,column:10969}},{start:{line:1,column:10971},end:{line:1,column:10982}}],line:1},"64":{loc:{start:{line:1,column:11052},end:{line:1,column:11197}},type:"if",locations:[{start:{line:1,column:11052},end:{line:1,column:11197}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"65":{loc:{start:{line:1,column:11055},end:{line:1,column:11086}},type:"binary-expr",locations:[{start:{line:1,column:11055},end:{line:1,column:11059}},{start:{line:1,column:11062},end:{line:1,column:11085}}],line:1},"66":{loc:{start:{line:1,column:11121},end:{line:1,column:11151}},type:"binary-expr",locations:[{start:{line:1,column:11121},end:{line:1,column:11125}},{start:{line:1,column:11128},end:{line:1,column:11150}}],line:1},"67":{loc:{start:{line:1,column:11159},end:{line:1,column:11184}},type:"binary-expr",locations:[{start:{line:1,column:11159},end:{line:1,column:11170}},{start:{line:1,column:11172},end:{line:1,column:11184}}],line:1},"68":{loc:{start:{line:1,column:11284},end:{line:1,column:11300}},type:"binary-expr",locations:[{start:{line:1,column:11284},end:{line:1,column:11293}},{start:{line:1,column:11295},end:{line:1,column:11300}}],line:1},"69":{loc:{start:{line:1,column:11313},end:{line:1,column:11356}},type:"binary-expr",locations:[{start:{line:1,column:11313},end:{line:1,column:11334}},{start:{line:1,column:11337},end:{line:1,column:11355}}],line:1},"70":{loc:{start:{line:1,column:11357},end:{line:1,column:11496}},type:"cond-expr",locations:[{start:{line:1,column:11369},end:{line:1,column:11371}},{start:{line:1,column:11373},end:{line:1,column:11495}}],line:1},"71":{loc:{start:{line:1,column:11357},end:{line:1,column:11368}},type:"binary-expr",locations:[{start:{line:1,column:11357},end:{line:1,column:11364}},{start:{line:1,column:11366},end:{line:1,column:11368}}],line:1},"72":{loc:{start:{line:1,column:11391},end:{line:1,column:11427}},type:"cond-expr",locations:[{start:{line:1,column:11399},end:{line:1,column:11408}},{start:{line:1,column:11409},end:{line:1,column:11427}}],line:1},"73":{loc:{start:{line:1,column:11409},end:{line:1,column:11427}},type:"binary-expr",locations:[{start:{line:1,column:11409},end:{line:1,column:11416}},{start:{line:1,column:11419},end:{line:1,column:11426}}],line:1},"74":{loc:{start:{line:1,column:11443},end:{line:1,column:11482}},type:"if",locations:[{start:{line:1,column:11443},end:{line:1,column:11482}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"75":{loc:{start:{line:1,column:11465},end:{line:1,column:11481}},type:"binary-expr",locations:[{start:{line:1,column:11465},end:{line:1,column:11469}},{start:{line:1,column:11472},end:{line:1,column:11480}}],line:1},"76":{loc:{start:{line:1,column:11536},end:{line:1,column:11588}},type:"binary-expr",locations:[{start:{line:1,column:11536},end:{line:1,column:11564}},{start:{line:1,column:11566},end:{line:1,column:11588}}],line:1},"77":{loc:{start:{line:1,column:11621},end:{line:1,column:11641}},type:"cond-expr",locations:[{start:{line:1,column:11631},end:{line:1,column:11639}},{start:{line:1,column:11640},end:{line:1,column:11641}}],line:1},"78":{loc:{start:{line:1,column:11682},end:{line:1,column:11686}},type:"binary-expr",locations:[{start:{line:1,column:11682},end:{line:1,column:11683}},{start:{line:1,column:11685},end:{line:1,column:11686}}],line:1},"79":{loc:{start:{line:1,column:11906},end:{line:1,column:11922}},type:"binary-expr",locations:[{start:{line:1,column:11906},end:{line:1,column:11918}},{start:{line:1,column:11920},end:{line:1,column:11922}}],line:1},"80":{loc:{start:{line:1,column:12455},end:{line:1,column:12460}},type:"binary-expr",locations:[{start:{line:1,column:12455},end:{line:1,column:12456}},{start:{line:1,column:12458},end:{line:1,column:12460}}],line:1},"81":{loc:{start:{line:1,column:12501},end:{line:1,column:12505}},type:"binary-expr",locations:[{start:{line:1,column:12501},end:{line:1,column:12502}},{start:{line:1,column:12504},end:{line:1,column:12505}}],line:1},"82":{loc:{start:{line:1,column:12679},end:{line:1,column:12684}},type:"binary-expr",locations:[{start:{line:1,column:12679},end:{line:1,column:12680}},{start:{line:1,column:12682},end:{line:1,column:12684}}],line:1},"83":{loc:{start:{line:1,column:12758},end:{line:1,column:12826}},type:"if",locations:[{start:{line:1,column:12758},end:{line:1,column:12826}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"84":{loc:{start:{line:1,column:12802},end:{line:1,column:12825}},type:"cond-expr",locations:[{start:{line:1,column:12819},end:{line:1,column:12823}},{start:{line:1,column:12824},end:{line:1,column:12825}}],line:1},"85":{loc:{start:{line:1,column:12848},end:{line:1,column:12915}},type:"if",locations:[{start:{line:1,column:12848},end:{line:1,column:12915}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"86":{loc:{start:{line:1,column:12892},end:{line:1,column:12914}},type:"cond-expr",locations:[{start:{line:1,column:12909},end:{line:1,column:12910}},{start:{line:1,column:12911},end:{line:1,column:12914}}],line:1},"87":{loc:{start:{line:1,column:13066},end:{line:1,column:13127}},type:"if",locations:[{start:{line:1,column:13066},end:{line:1,column:13127}},{start:{line:1,column:13105},end:{line:1,column:13127}}],line:1},"88":{loc:{start:{line:1,column:13105},end:{line:1,column:13127}},type:"if",locations:[{start:{line:1,column:13105},end:{line:1,column:13127}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"89":{loc:{start:{line:1,column:13198},end:{line:1,column:13380}},type:"if",locations:[{start:{line:1,column:13198},end:{line:1,column:13380}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"90":{loc:{start:{line:1,column:13209},end:{line:1,column:13302}},type:"if",locations:[{start:{line:1,column:13209},end:{line:1,column:13302}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"91":{loc:{start:{line:1,column:13212},end:{line:1,column:13289}},type:"binary-expr",locations:[{start:{line:1,column:13212},end:{line:1,column:13229}},{start:{line:1,column:13231},end:{line:1,column:13251}},{start:{line:1,column:13254},end:{line:1,column:13269}},{start:{line:1,column:13271},end:{line:1,column:13288}}],line:1},"92":{loc:{start:{line:1,column:13340},end:{line:1,column:13379}},type:"cond-expr",locations:[{start:{line:1,column:13350},end:{line:1,column:13374}},{start:{line:1,column:13375},end:{line:1,column:13379}}],line:1},"93":{loc:{start:{line:1,column:13380},end:{line:1,column:13419}},type:"if",locations:[{start:{line:1,column:13380},end:{line:1,column:13419}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"94":{loc:{start:{line:1,column:13453},end:{line:1,column:13549}},type:"if",locations:[{start:{line:1,column:13453},end:{line:1,column:13549}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"95":{loc:{start:{line:1,column:13456},end:{line:1,column:13536}},type:"binary-expr",locations:[{start:{line:1,column:13456},end:{line:1,column:13482}},{start:{line:1,column:13484},end:{line:1,column:13504}},{start:{line:1,column:13506},end:{line:1,column:13521}},{start:{line:1,column:13523},end:{line:1,column:13536}}],line:1},"96":{loc:{start:{line:1,column:13564},end:{line:1,column:13659}},type:"cond-expr",locations:[{start:{line:1,column:13630},end:{line:1,column:13634}},{start:{line:1,column:13635},end:{line:1,column:13659}}],line:1},"97":{loc:{start:{line:1,column:13564},end:{line:1,column:13629}},type:"binary-expr",locations:[{start:{line:1,column:13564},end:{line:1,column:13592}},{start:{line:1,column:13594},end:{line:1,column:13629}}],line:1},"98":{loc:{start:{line:1,column:13773},end:{line:1,column:13805}},type:"if",locations:[{start:{line:1,column:13773},end:{line:1,column:13805}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"99":{loc:{start:{line:1,column:13832},end:{line:1,column:13858}},type:"if",locations:[{start:{line:1,column:13832},end:{line:1,column:13858}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"100":{loc:{start:{line:1,column:13889},end:{line:1,column:13903}},type:"cond-expr",locations:[{start:{line:1,column:13891},end:{line:1,column:13896}},{start:{line:1,column:13897},end:{line:1,column:13903}}],line:1},"101":{loc:{start:{line:1,column:13906},end:{line:1,column:13920}},type:"cond-expr",locations:[{start:{line:1,column:13908},end:{line:1,column:13913}},{start:{line:1,column:13914},end:{line:1,column:13920}}],line:1},"102":{loc:{start:{line:1,column:13921},end:{line:1,column:13960}},type:"if",locations:[{start:{line:1,column:13921},end:{line:1,column:13960}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"103":{loc:{start:{line:1,column:13924},end:{line:1,column:13950}},type:"binary-expr",locations:[{start:{line:1,column:13924},end:{line:1,column:13926}},{start:{line:1,column:13928},end:{line:1,column:13930}},{start:{line:1,column:13932},end:{line:1,column:13950}}],line:1},"104":{loc:{start:{line:1,column:13993},end:{line:1,column:14027}},type:"if",locations:[{start:{line:1,column:13993},end:{line:1,column:14027}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"105":{loc:{start:{line:1,column:14129},end:{line:1,column:14285}},type:"if",locations:[{start:{line:1,column:14129},end:{line:1,column:14285}},{start:{line:1,column:14273},end:{line:1,column:14285}}],line:1},"106":{loc:{start:{line:1,column:14132},end:{line:1,column:14166}},type:"binary-expr",locations:[{start:{line:1,column:14132},end:{line:1,column:14148}},{start:{line:1,column:14150},end:{line:1,column:14166}}],line:1},"107":{loc:{start:{line:1,column:14168},end:{line:1,column:14200}},type:"if",locations:[{start:{line:1,column:14168},end:{line:1,column:14200}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"108":{loc:{start:{line:1,column:14308},end:{line:1,column:14337}},type:"cond-expr",locations:[{start:{line:1,column:14319},end:{line:1,column:14332}},{start:{line:1,column:14333},end:{line:1,column:14337}}],line:1},"109":{loc:{start:{line:1,column:14360},end:{line:1,column:14400}},type:"cond-expr",locations:[{start:{line:1,column:14366},end:{line:1,column:14367}},{start:{line:1,column:14368},end:{line:1,column:14400}}],line:1},"110":{loc:{start:{line:1,column:14368},end:{line:1,column:14400}},type:"cond-expr",locations:[{start:{line:1,column:14374},end:{line:1,column:14395}},{start:{line:1,column:14396},end:{line:1,column:14400}}],line:1},"111":{loc:{start:{line:1,column:14423},end:{line:1,column:14453}},type:"cond-expr",locations:[{start:{line:1,column:14429},end:{line:1,column:14434}},{start:{line:1,column:14435},end:{line:1,column:14453}}],line:1},"112":{loc:{start:{line:1,column:14710},end:{line:1,column:14740}},type:"cond-expr",locations:[{start:{line:1,column:14725},end:{line:1,column:14726}},{start:{line:1,column:14727},end:{line:1,column:14740}}],line:1},"113":{loc:{start:{line:1,column:14758},end:{line:1,column:14803}},type:"binary-expr",locations:[{start:{line:1,column:14758},end:{line:1,column:14796}},{start:{line:1,column:14798},end:{line:1,column:14803}}],line:1},"114":{loc:{start:{line:1,column:14848},end:{line:1,column:14987}},type:"binary-expr",locations:[{start:{line:1,column:14848},end:{line:1,column:14889}},{start:{line:1,column:14891},end:{line:1,column:14937}},{start:{line:1,column:14939},end:{line:1,column:14987}}],line:1},"115":{loc:{start:{line:1,column:14941},end:{line:1,column:14986}},type:"binary-expr",locations:[{start:{line:1,column:14941},end:{line:1,column:14961}},{start:{line:1,column:14963},end:{line:1,column:14986}}],line:1},"116":{loc:{start:{line:1,column:15038},end:{line:1,column:15148}},type:"if",locations:[{start:{line:1,column:15038},end:{line:1,column:15148}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"117":{loc:{start:{line:1,column:15041},end:{line:1,column:15138}},type:"binary-expr",locations:[{start:{line:1,column:15041},end:{line:1,column:15067}},{start:{line:1,column:15069},end:{line:1,column:15097}},{start:{line:1,column:15099},end:{line:1,column:15138}}],line:1},"118":{loc:{start:{line:1,column:15172},end:{line:1,column:15235}},type:"if",locations:[{start:{line:1,column:15172},end:{line:1,column:15235}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"119":{loc:{start:{line:1,column:15175},end:{line:1,column:15225}},type:"binary-expr",locations:[{start:{line:1,column:15175},end:{line:1,column:15189}},{start:{line:1,column:15191},end:{line:1,column:15225}}],line:1},"120":{loc:{start:{line:1,column:15268},end:{line:1,column:15352}},type:"binary-expr",locations:[{start:{line:1,column:15268},end:{line:1,column:15312}},{start:{line:1,column:15314},end:{line:1,column:15352}}],line:1},"121":{loc:{start:{line:1,column:15421},end:{line:1,column:15876}},type:"if",locations:[{start:{line:1,column:15421},end:{line:1,column:15876}},{start:{line:1,column:15539},end:{line:1,column:15876}}],line:1},"122":{loc:{start:{line:1,column:15495},end:{line:1,column:15532}},type:"binary-expr",locations:[{start:{line:1,column:15495},end:{line:1,column:15503}},{start:{line:1,column:15505},end:{line:1,column:15520}},{start:{line:1,column:15522},end:{line:1,column:15532}}],line:1},"123":{loc:{start:{line:1,column:15539},end:{line:1,column:15876}},type:"if",locations:[{start:{line:1,column:15539},end:{line:1,column:15876}},{start:{line:1,column:15723},end:{line:1,column:15876}}],line:1},"124":{loc:{start:{line:1,column:15572},end:{line:1,column:15623}},type:"if",locations:[{start:{line:1,column:15572},end:{line:1,column:15623}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"125":{loc:{start:{line:1,column:15575},end:{line:1,column:15613}},type:"binary-expr",locations:[{start:{line:1,column:15575},end:{line:1,column:15592}},{start:{line:1,column:15594},end:{line:1,column:15613}}],line:1},"126":{loc:{start:{line:1,column:15647},end:{line:1,column:15710}},type:"if",locations:[{start:{line:1,column:15647},end:{line:1,column:15710}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"127":{loc:{start:{line:1,column:15650},end:{line:1,column:15700}},type:"binary-expr",locations:[{start:{line:1,column:15650},end:{line:1,column:15664}},{start:{line:1,column:15666},end:{line:1,column:15700}}],line:1},"128":{loc:{start:{line:1,column:15794},end:{line:1,column:15875}},type:"cond-expr",locations:[{start:{line:1,column:15849},end:{line:1,column:15851}},{start:{line:1,column:15852},end:{line:1,column:15875}}],line:1},"129":{loc:{start:{line:1,column:15794},end:{line:1,column:15848}},type:"binary-expr",locations:[{start:{line:1,column:15794},end:{line:1,column:15811}},{start:{line:1,column:15813},end:{line:1,column:15832}},{start:{line:1,column:15834},end:{line:1,column:15848}}],line:1},"130":{loc:{start:{line:1,column:16020},end:{line:1,column:16034}},type:"default-arg",locations:[{start:{line:1,column:16022},end:{line:1,column:16034}}],line:1},"131":{loc:{start:{line:1,column:16035},end:{line:1,column:16039}},type:"default-arg",locations:[{start:{line:1,column:16037},end:{line:1,column:16039}}],line:1},"132":{loc:{start:{line:1,column:16040},end:{line:1,column:16046}},type:"default-arg",locations:[{start:{line:1,column:16042},end:{line:1,column:16046}}],line:1},"133":{loc:{start:{line:1,column:16716},end:{line:1,column:16772}},type:"binary-expr",locations:[{start:{line:1,column:16716},end:{line:1,column:16723}},{start:{line:1,column:16725},end:{line:1,column:16772}}],line:1},"134":{loc:{start:{line:1,column:16797},end:{line:1,column:16854}},type:"cond-expr",locations:[{start:{line:1,column:16817},end:{line:1,column:16819}},{start:{line:1,column:16820},end:{line:1,column:16854}}],line:1},"135":{loc:{start:{line:1,column:16933},end:{line:1,column:16960}},type:"binary-expr",locations:[{start:{line:1,column:16933},end:{line:1,column:16938}},{start:{line:1,column:16941},end:{line:1,column:16959}}],line:1},"136":{loc:{start:{line:1,column:17008},end:{line:1,column:17035}},type:"binary-expr",locations:[{start:{line:1,column:17008},end:{line:1,column:17013}},{start:{line:1,column:17016},end:{line:1,column:17034}}],line:1},"137":{loc:{start:{line:1,column:17101},end:{line:1,column:17105}},type:"binary-expr",locations:[{start:{line:1,column:17101},end:{line:1,column:17102}},{start:{line:1,column:17104},end:{line:1,column:17105}}],line:1},"138":{loc:{start:{line:1,column:17356},end:{line:1,column:17407}},type:"cond-expr",locations:[{start:{line:1,column:17384},end:{line:1,column:17404}},{start:{line:1,column:17405},end:{line:1,column:17407}}],line:1},"139":{loc:{start:{line:1,column:17514},end:{line:1,column:17547}},type:"if",locations:[{start:{line:1,column:17514},end:{line:1,column:17547}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"140":{loc:{start:{line:1,column:17547},end:{line:1,column:17912}},type:"if",locations:[{start:{line:1,column:17547},end:{line:1,column:17912}},{start:{line:1,column:17731},end:{line:1,column:17912}}],line:1},"141":{loc:{start:{line:1,column:17559},end:{line:1,column:17596}},type:"cond-expr",locations:[{start:{line:1,column:17573},end:{line:1,column:17593}},{start:{line:1,column:17594},end:{line:1,column:17596}}],line:1},"142":{loc:{start:{line:1,column:17654},end:{line:1,column:17687}},type:"binary-expr",locations:[{start:{line:1,column:17654},end:{line:1,column:17659}},{start:{line:1,column:17661},end:{line:1,column:17687}}],line:1},"143":{loc:{start:{line:1,column:17690},end:{line:1,column:17726}},type:"cond-expr",locations:[{start:{line:1,column:17701},end:{line:1,column:17724}},{start:{line:1,column:17725},end:{line:1,column:17726}}],line:1},"144":{loc:{start:{line:1,column:17750},end:{line:1,column:17799}},type:"cond-expr",locations:[{start:{line:1,column:17756},end:{line:1,column:17778}},{start:{line:1,column:17779},end:{line:1,column:17799}}],line:1},"145":{loc:{start:{line:1,column:17808},end:{line:1,column:17911}},type:"cond-expr",locations:[{start:{line:1,column:17864},end:{line:1,column:17882}},{start:{line:1,column:17883},end:{line:1,column:17911}}],line:1},"146":{loc:{start:{line:1,column:17808},end:{line:1,column:17863}},type:"binary-expr",locations:[{start:{line:1,column:17808},end:{line:1,column:17842}},{start:{line:1,column:17844},end:{line:1,column:17863}}],line:1},"147":{loc:{start:{line:1,column:18499},end:{line:1,column:18575}},type:"cond-expr",locations:[{start:{line:1,column:18516},end:{line:1,column:18555}},{start:{line:1,column:18556},end:{line:1,column:18575}}],line:1},"148":{loc:{start:{line:1,column:18597},end:{line:1,column:18626}},type:"cond-expr",locations:[{start:{line:1,column:18606},end:{line:1,column:18623}},{start:{line:1,column:18624},end:{line:1,column:18626}}],line:1},"149":{loc:{start:{line:1,column:18689},end:{line:1,column:18698}},type:"cond-expr",locations:[{start:{line:1,column:18691},end:{line:1,column:18695}},{start:{line:1,column:18696},end:{line:1,column:18698}}],line:1},"150":{loc:{start:{line:1,column:18762},end:{line:1,column:18771}},type:"cond-expr",locations:[{start:{line:1,column:18764},end:{line:1,column:18768}},{start:{line:1,column:18769},end:{line:1,column:18771}}],line:1},"151":{loc:{start:{line:1,column:18831},end:{line:1,column:18840}},type:"cond-expr",locations:[{start:{line:1,column:18833},end:{line:1,column:18837}},{start:{line:1,column:18838},end:{line:1,column:18840}}],line:1},"152":{loc:{start:{line:1,column:18898},end:{line:1,column:18907}},type:"cond-expr",locations:[{start:{line:1,column:18900},end:{line:1,column:18904}},{start:{line:1,column:18905},end:{line:1,column:18907}}],line:1},"153":{loc:{start:{line:1,column:19030},end:{line:1,column:19145}},type:"cond-expr",locations:[{start:{line:1,column:19102},end:{line:1,column:19114}},{start:{line:1,column:19115},end:{line:1,column:19145}}],line:1},"154":{loc:{start:{line:1,column:19030},end:{line:1,column:19101}},type:"binary-expr",locations:[{start:{line:1,column:19030},end:{line:1,column:19049}},{start:{line:1,column:19051},end:{line:1,column:19075}},{start:{line:1,column:19077},end:{line:1,column:19101}}],line:1},"155":{loc:{start:{line:1,column:19174},end:{line:1,column:19263}},type:"if",locations:[{start:{line:1,column:19174},end:{line:1,column:19263}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"156":{loc:{start:{line:1,column:19295},end:{line:1,column:19360}},type:"cond-expr",locations:[{start:{line:1,column:19321},end:{line:1,column:19355}},{start:{line:1,column:19356},end:{line:1,column:19360}}],line:1},"157":{loc:{start:{line:1,column:19375},end:{line:1,column:19378}},type:"default-arg",locations:[{start:{line:1,column:19377},end:{line:1,column:19378}}],line:1},"158":{loc:{start:{line:1,column:19380},end:{line:1,column:19409}},type:"if",locations:[{start:{line:1,column:19380},end:{line:1,column:19409}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"159":{loc:{start:{line:1,column:19409},end:{line:1,column:19441}},type:"if",locations:[{start:{line:1,column:19409},end:{line:1,column:19441}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"160":{loc:{start:{line:1,column:19480},end:{line:1,column:19533}},type:"binary-expr",locations:[{start:{line:1,column:19480},end:{line:1,column:19504}},{start:{line:1,column:19506},end:{line:1,column:19533}}],line:1},"161":{loc:{start:{line:1,column:19534},end:{line:1,column:19614}},type:"binary-expr",locations:[{start:{line:1,column:19534},end:{line:1,column:19558}},{start:{line:1,column:19560},end:{line:1,column:19586}},{start:{line:1,column:19588},end:{line:1,column:19614}}],line:1},"162":{loc:{start:{line:1,column:19671},end:{line:1,column:19742}},type:"binary-expr",locations:[{start:{line:1,column:19671},end:{line:1,column:19696}},{start:{line:1,column:19699},end:{line:1,column:19741}}],line:1},"163":{loc:{start:{line:1,column:19759},end:{line:1,column:19811}},type:"binary-expr",locations:[{start:{line:1,column:19759},end:{line:1,column:19783}},{start:{line:1,column:19786},end:{line:1,column:19810}}],line:1},"164":{loc:{start:{line:1,column:19812},end:{line:1,column:19868}},type:"binary-expr",locations:[{start:{line:1,column:19813},end:{line:1,column:19823}},{start:{line:1,column:19825},end:{line:1,column:19848}},{start:{line:1,column:19852},end:{line:1,column:19867}}],line:1},"165":{loc:{start:{line:1,column:19911},end:{line:1,column:19968}},type:"if",locations:[{start:{line:1,column:19911},end:{line:1,column:19968}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"166":{loc:{start:{line:1,column:19914},end:{line:1,column:19946}},type:"binary-expr",locations:[{start:{line:1,column:19914},end:{line:1,column:19920}},{start:{line:1,column:19922},end:{line:1,column:19946}}],line:1},"167":{loc:{start:{line:1,column:20157},end:{line:1,column:20170}},type:"if",locations:[{start:{line:1,column:20157},end:{line:1,column:20170}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"168":{loc:{start:{line:1,column:20195},end:{line:1,column:20275}},type:"if",locations:[{start:{line:1,column:20195},end:{line:1,column:20275}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"169":{loc:{start:{line:1,column:20250},end:{line:1,column:20274}},type:"binary-expr",locations:[{start:{line:1,column:20250},end:{line:1,column:20251}},{start:{line:1,column:20254},end:{line:1,column:20273}}],line:1},"170":{loc:{start:{line:1,column:20334},end:{line:1,column:20347}},type:"if",locations:[{start:{line:1,column:20334},end:{line:1,column:20347}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"171":{loc:{start:{line:1,column:20372},end:{line:1,column:20452}},type:"if",locations:[{start:{line:1,column:20372},end:{line:1,column:20452}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"172":{loc:{start:{line:1,column:20427},end:{line:1,column:20451}},type:"binary-expr",locations:[{start:{line:1,column:20427},end:{line:1,column:20428}},{start:{line:1,column:20431},end:{line:1,column:20450}}],line:1},"173":{loc:{start:{line:1,column:20472},end:{line:1,column:20561}},type:"if",locations:[{start:{line:1,column:20472},end:{line:1,column:20561}},{start:{line:1,column:20555},end:{line:1,column:20561}}],line:1},"174":{loc:{start:{line:1,column:20507},end:{line:1,column:20539}},type:"binary-expr",locations:[{start:{line:1,column:20507},end:{line:1,column:20523}},{start:{line:1,column:20526},end:{line:1,column:20538}}],line:1},"175":{loc:{start:{line:1,column:20610},end:{line:1,column:20661}},type:"binary-expr",locations:[{start:{line:1,column:20610},end:{line:1,column:20636}},{start:{line:1,column:20638},end:{line:1,column:20661}}],line:1},"176":{loc:{start:{line:1,column:20716},end:{line:1,column:20766}},type:"if",locations:[{start:{line:1,column:20716},end:{line:1,column:20766}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"177":{loc:{start:{line:1,column:20719},end:{line:1,column:20744}},type:"binary-expr",locations:[{start:{line:1,column:20719},end:{line:1,column:20726}},{start:{line:1,column:20728},end:{line:1,column:20735}},{start:{line:1,column:20737},end:{line:1,column:20744}}],line:1},"178":{loc:{start:{line:1,column:20772},end:{line:1,column:20862}},type:"cond-expr",locations:[{start:{line:1,column:20791},end:{line:1,column:20852}},{start:{line:1,column:20854},end:{line:1,column:20862}}],line:1},"179":{loc:{start:{line:1,column:20854},end:{line:1,column:20862}},type:"binary-expr",locations:[{start:{line:1,column:20854},end:{line:1,column:20855}},{start:{line:1,column:20858},end:{line:1,column:20861}}],line:1},"180":{loc:{start:{line:1,column:20895},end:{line:1,column:20899}},type:"binary-expr",locations:[{start:{line:1,column:20895},end:{line:1,column:20896}},{start:{line:1,column:20898},end:{line:1,column:20899}}],line:1},"181":{loc:{start:{line:1,column:20901},end:{line:1,column:20949}},type:"cond-expr",locations:[{start:{line:1,column:20933},end:{line:1,column:20937}},{start:{line:1,column:20938},end:{line:1,column:20949}}],line:1},"182":{loc:{start:{line:1,column:20901},end:{line:1,column:20932}},type:"binary-expr",locations:[{start:{line:1,column:20901},end:{line:1,column:20926}},{start:{line:1,column:20928},end:{line:1,column:20932}}],line:1},"183":{loc:{start:{line:1,column:21066},end:{line:1,column:21146}},type:"cond-expr",locations:[{start:{line:1,column:21090},end:{line:1,column:21142}},{start:{line:1,column:21144},end:{line:1,column:21146}}],line:1},"184":{loc:{start:{line:1,column:21158},end:{line:1,column:21206}},type:"if",locations:[{start:{line:1,column:21158},end:{line:1,column:21206}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"185":{loc:{start:{line:1,column:21231},end:{line:1,column:21270}},type:"cond-expr",locations:[{start:{line:1,column:21251},end:{line:1,column:21268}},{start:{line:1,column:21269},end:{line:1,column:21270}}],line:1},"186":{loc:{start:{line:1,column:21350},end:{line:1,column:21500}},type:"if",locations:[{start:{line:1,column:21350},end:{line:1,column:21500}},{start:{line:1,column:21452},end:{line:1,column:21500}}],line:1},"187":{loc:{start:{line:1,column:21353},end:{line:1,column:21398}},type:"binary-expr",locations:[{start:{line:1,column:21353},end:{line:1,column:21358}},{start:{line:1,column:21360},end:{line:1,column:21381}},{start:{line:1,column:21383},end:{line:1,column:21398}}],line:1},"188":{loc:{start:{line:1,column:21452},end:{line:1,column:21500}},type:"binary-expr",locations:[{start:{line:1,column:21453},end:{line:1,column:21472}},{start:{line:1,column:21474},end:{line:1,column:21489}},{start:{line:1,column:21493},end:{line:1,column:21499}}],line:1},"189":{loc:{start:{line:1,column:21555},end:{line:1,column:21672}},type:"if",locations:[{start:{line:1,column:21555},end:{line:1,column:21672}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"190":{loc:{start:{line:1,column:21558},end:{line:1,column:21595}},type:"binary-expr",locations:[{start:{line:1,column:21558},end:{line:1,column:21580}},{start:{line:1,column:21582},end:{line:1,column:21595}}],line:1},"191":{loc:{start:{line:1,column:21734},end:{line:1,column:21740}},type:"default-arg",locations:[{start:{line:1,column:21736},end:{line:1,column:21740}}],line:1},"192":{loc:{start:{line:1,column:21741},end:{line:1,column:21747}},type:"default-arg",locations:[{start:{line:1,column:21743},end:{line:1,column:21747}}],line:1},"193":{loc:{start:{line:1,column:21748},end:{line:1,column:21755}},type:"default-arg",locations:[{start:{line:1,column:21750},end:{line:1,column:21755}}],line:1},"194":{loc:{start:{line:1,column:21912},end:{line:1,column:21924}},type:"binary-expr",locations:[{start:{line:1,column:21912},end:{line:1,column:21917}},{start:{line:1,column:21920},end:{line:1,column:21923}}],line:1},"195":{loc:{start:{line:1,column:21958},end:{line:1,column:21962}},type:"binary-expr",locations:[{start:{line:1,column:21958},end:{line:1,column:21959}},{start:{line:1,column:21961},end:{line:1,column:21962}}],line:1},"196":{loc:{start:{line:1,column:22020},end:{line:1,column:22059}},type:"if",locations:[{start:{line:1,column:22020},end:{line:1,column:22059}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"197":{loc:{start:{line:1,column:22071},end:{line:1,column:22119}},type:"if",locations:[{start:{line:1,column:22071},end:{line:1,column:22119}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"198":{loc:{start:{line:1,column:22137},end:{line:1,column:22230}},type:"cond-expr",locations:[{start:{line:1,column:22155},end:{line:1,column:22192}},{start:{line:1,column:22193},end:{line:1,column:22230}}],line:1},"199":{loc:{start:{line:1,column:22289},end:{line:1,column:22344}},type:"binary-expr",locations:[{start:{line:1,column:22289},end:{line:1,column:22307}},{start:{line:1,column:22309},end:{line:1,column:22316}},{start:{line:1,column:22318},end:{line:1,column:22328}},{start:{line:1,column:22330},end:{line:1,column:22344}}],line:1},"200":{loc:{start:{line:1,column:22367},end:{line:1,column:22405}},type:"binary-expr",locations:[{start:{line:1,column:22367},end:{line:1,column:22385}},{start:{line:1,column:22387},end:{line:1,column:22394}},{start:{line:1,column:22396},end:{line:1,column:22405}}],line:1},"201":{loc:{start:{line:1,column:22582},end:{line:1,column:22587}},type:"binary-expr",locations:[{start:{line:1,column:22582},end:{line:1,column:22583}},{start:{line:1,column:22585},end:{line:1,column:22587}}],line:1},"202":{loc:{start:{line:1,column:22594},end:{line:1,column:22640}},type:"cond-expr",locations:[{start:{line:1,column:22611},end:{line:1,column:22630}},{start:{line:1,column:22631},end:{line:1,column:22640}}],line:1},"203":{loc:{start:{line:1,column:22647},end:{line:1,column:22668}},type:"cond-expr",locations:[{start:{line:1,column:22653},end:{line:1,column:22656}},{start:{line:1,column:22657},end:{line:1,column:22668}}],line:1},"204":{loc:{start:{line:1,column:22785},end:{line:1,column:22812}},type:"cond-expr",locations:[{start:{line:1,column:22791},end:{line:1,column:22797}},{start:{line:1,column:22798},end:{line:1,column:22812}}],line:1},"205":{loc:{start:{line:1,column:22906},end:{line:1,column:23014}},type:"if",locations:[{start:{line:1,column:22906},end:{line:1,column:23014}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"206":{loc:{start:{line:1,column:22969},end:{line:1,column:22992}},type:"binary-expr",locations:[{start:{line:1,column:22969},end:{line:1,column:22970}},{start:{line:1,column:22972},end:{line:1,column:22982}},{start:{line:1,column:22984},end:{line:1,column:22992}}],line:1},"207":{loc:{start:{line:1,column:23031},end:{line:1,column:23067}},type:"if",locations:[{start:{line:1,column:23031},end:{line:1,column:23067}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"208":{loc:{start:{line:1,column:23034},end:{line:1,column:23046}},type:"binary-expr",locations:[{start:{line:1,column:23034},end:{line:1,column:23035}},{start:{line:1,column:23037},end:{line:1,column:23046}}],line:1},"209":{loc:{start:{line:1,column:23084},end:{line:1,column:23148}},type:"binary-expr",locations:[{start:{line:1,column:23084},end:{line:1,column:23099}},{start:{line:1,column:23101},end:{line:1,column:23125}},{start:{line:1,column:23127},end:{line:1,column:23148}}],line:1},"210":{loc:{start:{line:1,column:23166},end:{line:1,column:23239}},type:"if",locations:[{start:{line:1,column:23166},end:{line:1,column:23239}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"211":{loc:{start:{line:1,column:23169},end:{line:1,column:23216}},type:"binary-expr",locations:[{start:{line:1,column:23169},end:{line:1,column:23190}},{start:{line:1,column:23192},end:{line:1,column:23204}},{start:{line:1,column:23206},end:{line:1,column:23216}}],line:1},"212":{loc:{start:{line:1,column:23273},end:{line:1,column:23483}},type:"if",locations:[{start:{line:1,column:23273},end:{line:1,column:23483}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"213":{loc:{start:{line:1,column:23276},end:{line:1,column:23303}},type:"binary-expr",locations:[{start:{line:1,column:23276},end:{line:1,column:23294}},{start:{line:1,column:23296},end:{line:1,column:23303}}],line:1},"214":{loc:{start:{line:1,column:23305},end:{line:1,column:23439}},type:"if",locations:[{start:{line:1,column:23305},end:{line:1,column:23439}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"215":{loc:{start:{line:1,column:23384},end:{line:1,column:23417}},type:"cond-expr",locations:[{start:{line:1,column:23403},end:{line:1,column:23415}},{start:{line:1,column:23416},end:{line:1,column:23417}}],line:1},"216":{loc:{start:{line:1,column:23439},end:{line:1,column:23482}},type:"if",locations:[{start:{line:1,column:23439},end:{line:1,column:23482}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"217":{loc:{start:{line:1,column:23490},end:{line:1,column:23632}},type:"cond-expr",locations:[{start:{line:1,column:23509},end:{line:1,column:23517}},{start:{line:1,column:23518},end:{line:1,column:23632}}],line:1},"218":{loc:{start:{line:1,column:23518},end:{line:1,column:23632}},type:"cond-expr",locations:[{start:{line:1,column:23525},end:{line:1,column:23622}},{start:{line:1,column:23624},end:{line:1,column:23632}}],line:1},"219":{loc:{start:{line:1,column:23554},end:{line:1,column:23618}},type:"binary-expr",locations:[{start:{line:1,column:23554},end:{line:1,column:23558}},{start:{line:1,column:23560},end:{line:1,column:23567}},{start:{line:1,column:23570},end:{line:1,column:23617}}],line:1},"220":{loc:{start:{line:1,column:23570},end:{line:1,column:23617}},type:"cond-expr",locations:[{start:{line:1,column:23583},end:{line:1,column:23587}},{start:{line:1,column:23588},end:{line:1,column:23617}}],line:1},"221":{loc:{start:{line:1,column:23570},end:{line:1,column:23582}},type:"binary-expr",locations:[{start:{line:1,column:23570},end:{line:1,column:23574}},{start:{line:1,column:23576},end:{line:1,column:23582}}],line:1},"222":{loc:{start:{line:1,column:23588},end:{line:1,column:23617}},type:"cond-expr",locations:[{start:{line:1,column:23597},end:{line:1,column:23600}},{start:{line:1,column:23601},end:{line:1,column:23617}}],line:1},"223":{loc:{start:{line:1,column:23601},end:{line:1,column:23617}},type:"binary-expr",locations:[{start:{line:1,column:23601},end:{line:1,column:23606}},{start:{line:1,column:23608},end:{line:1,column:23617}}],line:1},"224":{loc:{start:{line:1,column:23803},end:{line:1,column:23841}},type:"if",locations:[{start:{line:1,column:23803},end:{line:1,column:23841}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"225":{loc:{start:{line:1,column:23841},end:{line:1,column:23871}},type:"if",locations:[{start:{line:1,column:23841},end:{line:1,column:23871}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"226":{loc:{start:{line:1,column:23871},end:{line:1,column:23912}},type:"if",locations:[{start:{line:1,column:23871},end:{line:1,column:23912}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"227":{loc:{start:{line:1,column:23918},end:{line:1,column:23939}},type:"cond-expr",locations:[{start:{line:1,column:23936},end:{line:1,column:23937}},{start:{line:1,column:23938},end:{line:1,column:23939}}],line:1},"228":{loc:{start:{line:1,column:24046},end:{line:1,column:24089}},type:"if",locations:[{start:{line:1,column:24046},end:{line:1,column:24089}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"229":{loc:{start:{line:1,column:24155},end:{line:1,column:24184}},type:"cond-expr",locations:[{start:{line:1,column:24164},end:{line:1,column:24176}},{start:{line:1,column:24177},end:{line:1,column:24184}}],line:1},"230":{loc:{start:{line:1,column:24204},end:{line:1,column:24280}},type:"if",locations:[{start:{line:1,column:24204},end:{line:1,column:24280}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"231":{loc:{start:{line:1,column:24224},end:{line:1,column:24262}},type:"binary-expr",locations:[{start:{line:1,column:24224},end:{line:1,column:24245}},{start:{line:1,column:24247},end:{line:1,column:24262}}],line:1},"232":{loc:{start:{line:1,column:24322},end:{line:1,column:24610}},type:"if",locations:[{start:{line:1,column:24322},end:{line:1,column:24610}},{start:{line:1,column:24497},end:{line:1,column:24610}}],line:1},"233":{loc:{start:{line:1,column:24325},end:{line:1,column:24363}},type:"binary-expr",locations:[{start:{line:1,column:24325},end:{line:1,column:24332}},{start:{line:1,column:24334},end:{line:1,column:24363}}],line:1},"234":{loc:{start:{line:1,column:24504},end:{line:1,column:24610}},type:"cond-expr",locations:[{start:{line:1,column:24526},end:{line:1,column:24546}},{start:{line:1,column:24547},end:{line:1,column:24610}}],line:1},"235":{loc:{start:{line:1,column:24504},end:{line:1,column:24525}},type:"binary-expr",locations:[{start:{line:1,column:24504},end:{line:1,column:24511}},{start:{line:1,column:24513},end:{line:1,column:24525}}],line:1},"236":{loc:{start:{line:1,column:24547},end:{line:1,column:24610}},type:"cond-expr",locations:[{start:{line:1,column:24573},end:{line:1,column:24582}},{start:{line:1,column:24583},end:{line:1,column:24610}}],line:1},"237":{loc:{start:{line:1,column:24547},end:{line:1,column:24572}},type:"binary-expr",locations:[{start:{line:1,column:24547},end:{line:1,column:24554}},{start:{line:1,column:24556},end:{line:1,column:24572}}],line:1},"238":{loc:{start:{line:1,column:24583},end:{line:1,column:24610}},type:"cond-expr",locations:[{start:{line:1,column:24591},end:{line:1,column:24600}},{start:{line:1,column:24601},end:{line:1,column:24610}}],line:1},"239":{loc:{start:{line:1,column:24630},end:{line:1,column:24674}},type:"if",locations:[{start:{line:1,column:24630},end:{line:1,column:24674}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"240":{loc:{start:{line:1,column:24692},end:{line:1,column:24864}},type:"if",locations:[{start:{line:1,column:24692},end:{line:1,column:24864}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"241":{loc:{start:{line:1,column:24695},end:{line:1,column:24798}},type:"binary-expr",locations:[{start:{line:1,column:24695},end:{line:1,column:24724}},{start:{line:1,column:24726},end:{line:1,column:24739}},{start:{line:1,column:24741},end:{line:1,column:24763}},{start:{line:1,column:24765},end:{line:1,column:24798}}],line:1},"242":{loc:{start:{line:1,column:24907},end:{line:1,column:24934}},type:"binary-expr",locations:[{start:{line:1,column:24907},end:{line:1,column:24925}},{start:{line:1,column:24928},end:{line:1,column:24933}}],line:1},"243":{loc:{start:{line:1,column:24935},end:{line:1,column:24973}},type:"binary-expr",locations:[{start:{line:1,column:24935},end:{line:1,column:24943}},{start:{line:1,column:24946},end:{line:1,column:24972}}],line:1},"244":{loc:{start:{line:1,column:25021},end:{line:1,column:25044}},type:"binary-expr",locations:[{start:{line:1,column:25021},end:{line:1,column:25034}},{start:{line:1,column:25037},end:{line:1,column:25043}}],line:1},"245":{loc:{start:{line:1,column:25166},end:{line:1,column:25190}},type:"if",locations:[{start:{line:1,column:25166},end:{line:1,column:25190}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"246":{loc:{start:{line:1,column:25217},end:{line:1,column:25232}},type:"if",locations:[{start:{line:1,column:25217},end:{line:1,column:25232}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"247":{loc:{start:{line:1,column:25247},end:{line:1,column:25271}},type:"cond-expr",locations:[{start:{line:1,column:25260},end:{line:1,column:25266}},{start:{line:1,column:25267},end:{line:1,column:25271}}],line:1},"248":{loc:{start:{line:1,column:25272},end:{line:1,column:25297}},type:"if",locations:[{start:{line:1,column:25272},end:{line:1,column:25297}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"249":{loc:{start:{line:1,column:25275},end:{line:1,column:25290}},type:"binary-expr",locations:[{start:{line:1,column:25275},end:{line:1,column:25278}},{start:{line:1,column:25280},end:{line:1,column:25290}}],line:1},"250":{loc:{start:{line:1,column:25297},end:{line:1,column:25407}},type:"if",locations:[{start:{line:1,column:25297},end:{line:1,column:25407}},{start:{line:1,column:25378},end:{line:1,column:25407}}],line:1},"251":{loc:{start:{line:1,column:25300},end:{line:1,column:25344}},type:"binary-expr",locations:[{start:{line:1,column:25300},end:{line:1,column:25301}},{start:{line:1,column:25303},end:{line:1,column:25304}},{start:{line:1,column:25306},end:{line:1,column:25324}},{start:{line:1,column:25326},end:{line:1,column:25344}}],line:1},"252":{loc:{start:{line:1,column:25346},end:{line:1,column:25369}},type:"if",locations:[{start:{line:1,column:25346},end:{line:1,column:25369}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"253":{loc:{start:{line:1,column:25379},end:{line:1,column:25403}},type:"if",locations:[{start:{line:1,column:25379},end:{line:1,column:25403}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"254":{loc:{start:{line:1,column:25535},end:{line:1,column:25583}},type:"if",locations:[{start:{line:1,column:25535},end:{line:1,column:25583}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"255":{loc:{start:{line:1,column:25583},end:{line:1,column:25667}},type:"if",locations:[{start:{line:1,column:25583},end:{line:1,column:25667}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"256":{loc:{start:{line:1,column:25586},end:{line:1,column:25601}},type:"binary-expr",locations:[{start:{line:1,column:25586},end:{line:1,column:25591}},{start:{line:1,column:25593},end:{line:1,column:25601}}],line:1},"257":{loc:{start:{line:1,column:25673},end:{line:1,column:25698}},type:"cond-expr",locations:[{start:{line:1,column:25679},end:{line:1,column:25691}},{start:{line:1,column:25692},end:{line:1,column:25698}}],line:1},"258":{loc:{start:{line:1,column:25701},end:{line:1,column:25725}},type:"cond-expr",locations:[{start:{line:1,column:25714},end:{line:1,column:25720}},{start:{line:1,column:25721},end:{line:1,column:25725}}],line:1},"259":{loc:{start:{line:1,column:25726},end:{line:1,column:25793}},type:"cond-expr",locations:[{start:{line:1,column:25739},end:{line:1,column:25766}},{start:{line:1,column:25769},end:{line:1,column:25792}}],line:1},"260":{loc:{start:{line:1,column:25726},end:{line:1,column:25737}},type:"binary-expr",locations:[{start:{line:1,column:25726},end:{line:1,column:25727}},{start:{line:1,column:25729},end:{line:1,column:25730}},{start:{line:1,column:25732},end:{line:1,column:25737}}],line:1},"261":{loc:{start:{line:1,column:25880},end:{line:1,column:25907}},type:"binary-expr",locations:[{start:{line:1,column:25880},end:{line:1,column:25898}},{start:{line:1,column:25901},end:{line:1,column:25906}}],line:1},"262":{loc:{start:{line:1,column:25908},end:{line:1,column:25945}},type:"binary-expr",locations:[{start:{line:1,column:25908},end:{line:1,column:25916}},{start:{line:1,column:25919},end:{line:1,column:25944}}],line:1},"263":{loc:{start:{line:1,column:26057},end:{line:1,column:26085}},type:"binary-expr",locations:[{start:{line:1,column:26057},end:{line:1,column:26066}},{start:{line:1,column:26068},end:{line:1,column:26085}}],line:1},"264":{loc:{start:{line:1,column:26834},end:{line:1,column:26839}},type:"binary-expr",locations:[{start:{line:1,column:26834},end:{line:1,column:26835}},{start:{line:1,column:26837},end:{line:1,column:26839}}],line:1},"265":{loc:{start:{line:1,column:26986},end:{line:1,column:27000}},type:"default-arg",locations:[{start:{line:1,column:26988},end:{line:1,column:27000}}],line:1},"266":{loc:{start:{line:1,column:27001},end:{line:1,column:27007}},type:"default-arg",locations:[{start:{line:1,column:27003},end:{line:1,column:27007}}],line:1},"267":{loc:{start:{line:1,column:27593},end:{line:1,column:27598}},type:"binary-expr",locations:[{start:{line:1,column:27593},end:{line:1,column:27594}},{start:{line:1,column:27596},end:{line:1,column:27598}}],line:1},"268":{loc:{start:{line:1,column:27753},end:{line:1,column:27759}},type:"binary-expr",locations:[{start:{line:1,column:27753},end:{line:1,column:27755}},{start:{line:1,column:27757},end:{line:1,column:27759}}],line:1},"269":{loc:{start:{line:1,column:27969},end:{line:1,column:28044}},type:"binary-expr",locations:[{start:{line:1,column:27969},end:{line:1,column:27983}},{start:{line:1,column:27986},end:{line:1,column:28005}},{start:{line:1,column:28007},end:{line:1,column:28043}}],line:1},"270":{loc:{start:{line:1,column:30232},end:{line:1,column:30293}},type:"binary-expr",locations:[{start:{line:1,column:30232},end:{line:1,column:30257}},{start:{line:1,column:30259},end:{line:1,column:30289}},{start:{line:1,column:30291},end:{line:1,column:30293}}],line:1},"271":{loc:{start:{line:1,column:30421},end:{line:1,column:30482}},type:"binary-expr",locations:[{start:{line:1,column:30421},end:{line:1,column:30446}},{start:{line:1,column:30448},end:{line:1,column:30478}},{start:{line:1,column:30480},end:{line:1,column:30482}}],line:1},"272":{loc:{start:{line:1,column:30604},end:{line:1,column:30665}},type:"binary-expr",locations:[{start:{line:1,column:30604},end:{line:1,column:30629}},{start:{line:1,column:30631},end:{line:1,column:30661}},{start:{line:1,column:30663},end:{line:1,column:30665}}],line:1},"273":{loc:{start:{line:1,column:30783},end:{line:1,column:30844}},type:"binary-expr",locations:[{start:{line:1,column:30783},end:{line:1,column:30808}},{start:{line:1,column:30810},end:{line:1,column:30840}},{start:{line:1,column:30842},end:{line:1,column:30844}}],line:1},"274":{loc:{start:{line:1,column:31026},end:{line:1,column:31087}},type:"cond-expr",locations:[{start:{line:1,column:31040},end:{line:1,column:31082}},{start:{line:1,column:31083},end:{line:1,column:31087}}],line:1},"275":{loc:{start:{line:1,column:31294},end:{line:1,column:31352}},type:"binary-expr",locations:[{start:{line:1,column:31294},end:{line:1,column:31312}},{start:{line:1,column:31314},end:{line:1,column:31332}},{start:{line:1,column:31334},end:{line:1,column:31352}}],line:1},"276":{loc:{start:{line:1,column:31448},end:{line:1,column:31508}},type:"binary-expr",locations:[{start:{line:1,column:31448},end:{line:1,column:31489}},{start:{line:1,column:31491},end:{line:1,column:31508}}],line:1},"277":{loc:{start:{line:1,column:31812},end:{line:1,column:31847}},type:"binary-expr",locations:[{start:{line:1,column:31812},end:{line:1,column:31813}},{start:{line:1,column:31816},end:{line:1,column:31846}}],line:1},"278":{loc:{start:{line:1,column:32013},end:{line:1,column:32068}},type:"binary-expr",locations:[{start:{line:1,column:32013},end:{line:1,column:32014}},{start:{line:1,column:32017},end:{line:1,column:32067}}],line:1},"279":{loc:{start:{line:1,column:32092},end:{line:1,column:32118}},type:"binary-expr",locations:[{start:{line:1,column:32092},end:{line:1,column:32112}},{start:{line:1,column:32114},end:{line:1,column:32118}}],line:1},"280":{loc:{start:{line:1,column:32159},end:{line:1,column:32163}},type:"binary-expr",locations:[{start:{line:1,column:32159},end:{line:1,column:32160}},{start:{line:1,column:32162},end:{line:1,column:32163}}],line:1},"281":{loc:{start:{line:1,column:32376},end:{line:1,column:32405}},type:"cond-expr",locations:[{start:{line:1,column:32387},end:{line:1,column:32400}},{start:{line:1,column:32401},end:{line:1,column:32405}}],line:1},"282":{loc:{start:{line:1,column:32448},end:{line:1,column:32479}},type:"cond-expr",locations:[{start:{line:1,column:32450},end:{line:1,column:32476}},{start:{line:1,column:32477},end:{line:1,column:32479}}],line:1},"283":{loc:{start:{line:1,column:32524},end:{line:1,column:32571}},type:"cond-expr",locations:[{start:{line:1,column:32547},end:{line:1,column:32566}},{start:{line:1,column:32567},end:{line:1,column:32571}}],line:1},"284":{loc:{start:{line:1,column:32524},end:{line:1,column:32546}},type:"binary-expr",locations:[{start:{line:1,column:32524},end:{line:1,column:32525}},{start:{line:1,column:32527},end:{line:1,column:32546}}],line:1},"285":{loc:{start:{line:1,column:32614},end:{line:1,column:32683}},type:"cond-expr",locations:[{start:{line:1,column:32625},end:{line:1,column:32627}},{start:{line:1,column:32628},end:{line:1,column:32683}}],line:1},"286":{loc:{start:{line:1,column:32759},end:{line:1,column:32783}},type:"if",locations:[{start:{line:1,column:32759},end:{line:1,column:32783}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"287":{loc:{start:{line:1,column:32822},end:{line:1,column:32835}},type:"if",locations:[{start:{line:1,column:32822},end:{line:1,column:32835}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"288":{loc:{start:{line:1,column:32865},end:{line:1,column:32890}},type:"if",locations:[{start:{line:1,column:32865},end:{line:1,column:32890}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"289":{loc:{start:{line:1,column:32929},end:{line:1,column:32962}},type:"if",locations:[{start:{line:1,column:32929},end:{line:1,column:32962}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"290":{loc:{start:{line:1,column:33121},end:{line:1,column:33166}},type:"binary-expr",locations:[{start:{line:1,column:33121},end:{line:1,column:33122}},{start:{line:1,column:33124},end:{line:1,column:33166}}],line:1},"291":{loc:{start:{line:1,column:33990},end:{line:1,column:34036}},type:"binary-expr",locations:[{start:{line:1,column:33990},end:{line:1,column:34025}},{start:{line:1,column:34027},end:{line:1,column:34036}}],line:1},"292":{loc:{start:{line:1,column:34642},end:{line:1,column:34714}},type:"cond-expr",locations:[{start:{line:1,column:34656},end:{line:1,column:34680}},{start:{line:1,column:34681},end:{line:1,column:34714}}],line:1},"293":{loc:{start:{line:1,column:34733},end:{line:1,column:34746}},type:"default-arg",locations:[{start:{line:1,column:34735},end:{line:1,column:34746}}],line:1},"294":{loc:{start:{line:1,column:34779},end:{line:1,column:35077}},type:"cond-expr",locations:[{start:{line:1,column:34863},end:{line:1,column:34989}},{start:{line:1,column:34990},end:{line:1,column:35077}}],line:1},"295":{loc:{start:{line:1,column:34779},end:{line:1,column:34862}},type:"binary-expr",locations:[{start:{line:1,column:34779},end:{line:1,column:34787}},{start:{line:1,column:34790},end:{line:1,column:34802}},{start:{line:1,column:34804},end:{line:1,column:34816}},{start:{line:1,column:34818},end:{line:1,column:34830}},{start:{line:1,column:34832},end:{line:1,column:34861}}],line:1},"296":{loc:{start:{line:1,column:35056},end:{line:1,column:35075}},type:"binary-expr",locations:[{start:{line:1,column:35056},end:{line:1,column:35071}},{start:{line:1,column:35073},end:{line:1,column:35075}}],line:1},"297":{loc:{start:{line:1,column:35078},end:{line:1,column:35111}},type:"binary-expr",locations:[{start:{line:1,column:35078},end:{line:1,column:35079}},{start:{line:1,column:35081},end:{line:1,column:35086}},{start:{line:1,column:35089},end:{line:1,column:35110}}],line:1},"298":{loc:{start:{line:1,column:35997},end:{line:1,column:36038}},type:"cond-expr",locations:[{start:{line:1,column:36014},end:{line:1,column:36035}},{start:{line:1,column:36036},end:{line:1,column:36038}}],line:1},"299":{loc:{start:{line:1,column:36279},end:{line:1,column:36342}},type:"cond-expr",locations:[{start:{line:1,column:36299},end:{line:1,column:36339}},{start:{line:1,column:36340},end:{line:1,column:36342}}],line:1},"300":{loc:{start:{line:1,column:36381},end:{line:1,column:36795}},type:"if",locations:[{start:{line:1,column:36381},end:{line:1,column:36795}},{start:{line:1,column:36724},end:{line:1,column:36795}}],line:1},"301":{loc:{start:{line:1,column:36446},end:{line:1,column:36518}},type:"binary-expr",locations:[{start:{line:1,column:36446},end:{line:1,column:36476}},{start:{line:1,column:36478},end:{line:1,column:36518}}],line:1},"302":{loc:{start:{line:1,column:36519},end:{line:1,column:36578}},type:"binary-expr",locations:[{start:{line:1,column:36519},end:{line:1,column:36542}},{start:{line:1,column:36544},end:{line:1,column:36578}}],line:1},"303":{loc:{start:{line:1,column:36579},end:{line:1,column:36631}},type:"binary-expr",locations:[{start:{line:1,column:36579},end:{line:1,column:36599}},{start:{line:1,column:36601},end:{line:1,column:36631}}],line:1},"304":{loc:{start:{line:1,column:36632},end:{line:1,column:36673}},type:"binary-expr",locations:[{start:{line:1,column:36632},end:{line:1,column:36647}},{start:{line:1,column:36649},end:{line:1,column:36673}}],line:1},"305":{loc:{start:{line:1,column:36674},end:{line:1,column:36718}},type:"binary-expr",locations:[{start:{line:1,column:36674},end:{line:1,column:36690}},{start:{line:1,column:36692},end:{line:1,column:36718}}],line:1},"306":{loc:{start:{line:1,column:36819},end:{line:1,column:36856}},type:"binary-expr",locations:[{start:{line:1,column:36819},end:{line:1,column:36839}},{start:{line:1,column:36841},end:{line:1,column:36856}}],line:1},"307":{loc:{start:{line:1,column:36887},end:{line:1,column:36928}},type:"binary-expr",locations:[{start:{line:1,column:36887},end:{line:1,column:36888}},{start:{line:1,column:36890},end:{line:1,column:36892}},{start:{line:1,column:36895},end:{line:1,column:36904}},{start:{line:1,column:36906},end:{line:1,column:36927}}],line:1},"308":{loc:{start:{line:1,column:36951},end:{line:1,column:36991}},type:"binary-expr",locations:[{start:{line:1,column:36951},end:{line:1,column:36975}},{start:{line:1,column:36977},end:{line:1,column:36991}}],line:1},"309":{loc:{start:{line:1,column:37367},end:{line:1,column:37565}},type:"if",locations:[{start:{line:1,column:37367},end:{line:1,column:37565}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"310":{loc:{start:{line:1,column:37420},end:{line:1,column:37432}},type:"if",locations:[{start:{line:1,column:37420},end:{line:1,column:37432}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"311":{loc:{start:{line:1,column:37432},end:{line:1,column:37532}},type:"binary-expr",locations:[{start:{line:1,column:37432},end:{line:1,column:37465}},{start:{line:1,column:37468},end:{line:1,column:37531}}],line:1},"312":{loc:{start:{line:1,column:37580},end:{line:1,column:37676}},type:"binary-expr",locations:[{start:{line:1,column:37580},end:{line:1,column:37621}},{start:{line:1,column:37623},end:{line:1,column:37676}}],line:1},"313":{loc:{start:{line:1,column:37881},end:{line:1,column:37963}},type:"if",locations:[{start:{line:1,column:37881},end:{line:1,column:37963}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"314":{loc:{start:{line:1,column:38011},end:{line:1,column:38105}},type:"binary-expr",locations:[{start:{line:1,column:38011},end:{line:1,column:38019}},{start:{line:1,column:38022},end:{line:1,column:38104}}],line:1},"315":{loc:{start:{line:1,column:38022},end:{line:1,column:38104}},type:"cond-expr",locations:[{start:{line:1,column:38034},end:{line:1,column:38066}},{start:{line:1,column:38067},end:{line:1,column:38104}}],line:1},"316":{loc:{start:{line:1,column:38163},end:{line:1,column:38203}},type:"if",locations:[{start:{line:1,column:38163},end:{line:1,column:38203}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"317":{loc:{start:{line:1,column:38255},end:{line:1,column:38295}},type:"if",locations:[{start:{line:1,column:38255},end:{line:1,column:38295}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"318":{loc:{start:{line:1,column:38355},end:{line:1,column:38413}},type:"cond-expr",locations:[{start:{line:1,column:38376},end:{line:1,column:38410}},{start:{line:1,column:38411},end:{line:1,column:38413}}],line:1},"319":{loc:{start:{line:1,column:38423},end:{line:1,column:38463}},type:"if",locations:[{start:{line:1,column:38423},end:{line:1,column:38463}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"320":{loc:{start:{line:1,column:38790},end:{line:1,column:38931}},type:"if",locations:[{start:{line:1,column:38790},end:{line:1,column:38931}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"321":{loc:{start:{line:1,column:38950},end:{line:1,column:38991}},type:"if",locations:[{start:{line:1,column:38950},end:{line:1,column:38991}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"322":{loc:{start:{line:1,column:39436},end:{line:1,column:39440}},type:"binary-expr",locations:[{start:{line:1,column:39436},end:{line:1,column:39437}},{start:{line:1,column:39439},end:{line:1,column:39440}}],line:1},"323":{loc:{start:{line:1,column:39871},end:{line:1,column:39957}},type:"cond-expr",locations:[{start:{line:1,column:39877},end:{line:1,column:39887}},{start:{line:1,column:39888},end:{line:1,column:39957}}],line:1},"324":{loc:{start:{line:1,column:39888},end:{line:1,column:39957}},type:"cond-expr",locations:[{start:{line:1,column:39895},end:{line:1,column:39913}},{start:{line:1,column:39914},end:{line:1,column:39957}}],line:1},"325":{loc:{start:{line:1,column:39914},end:{line:1,column:39957}},type:"cond-expr",locations:[{start:{line:1,column:39921},end:{line:1,column:39936}},{start:{line:1,column:39937},end:{line:1,column:39957}}],line:1},"326":{loc:{start:{line:1,column:40368},end:{line:1,column:40397}},type:"cond-expr",locations:[{start:{line:1,column:40374},end:{line:1,column:40378}},{start:{line:1,column:40379},end:{line:1,column:40397}}],line:1},"327":{loc:{start:{line:1,column:40415},end:{line:1,column:40542}},type:"if",locations:[{start:{line:1,column:40415},end:{line:1,column:40542}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"328":{loc:{start:{line:1,column:40418},end:{line:1,column:40500}},type:"binary-expr",locations:[{start:{line:1,column:40418},end:{line:1,column:40432}},{start:{line:1,column:40434},end:{line:1,column:40458}},{start:{line:1,column:40460},end:{line:1,column:40480}},{start:{line:1,column:40482},end:{line:1,column:40500}}],line:1},"329":{loc:{start:{line:1,column:40564},end:{line:1,column:40611}},type:"if",locations:[{start:{line:1,column:40564},end:{line:1,column:40611}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"330":{loc:{start:{line:1,column:40767},end:{line:1,column:40771}},type:"binary-expr",locations:[{start:{line:1,column:40767},end:{line:1,column:40768}},{start:{line:1,column:40770},end:{line:1,column:40771}}],line:1},"331":{loc:{start:{line:1,column:40895},end:{line:1,column:40899}},type:"binary-expr",locations:[{start:{line:1,column:40895},end:{line:1,column:40896}},{start:{line:1,column:40898},end:{line:1,column:40899}}],line:1},"332":{loc:{start:{line:1,column:41028},end:{line:1,column:41054}},type:"binary-expr",locations:[{start:{line:1,column:41028},end:{line:1,column:41031}},{start:{line:1,column:41033},end:{line:1,column:41054}}],line:1},"333":{loc:{start:{line:1,column:41126},end:{line:1,column:41156}},type:"binary-expr",locations:[{start:{line:1,column:41126},end:{line:1,column:41136}},{start:{line:1,column:41138},end:{line:1,column:41156}}],line:1},"334":{loc:{start:{line:1,column:41159},end:{line:1,column:41192}},type:"cond-expr",locations:[{start:{line:1,column:41161},end:{line:1,column:41184}},{start:{line:1,column:41185},end:{line:1,column:41192}}],line:1},"335":{loc:{start:{line:1,column:41199},end:{line:1,column:41292}},type:"binary-expr",locations:[{start:{line:1,column:41199},end:{line:1,column:41211}},{start:{line:1,column:41213},end:{line:1,column:41229}},{start:{line:1,column:41232},end:{line:1,column:41233}},{start:{line:1,column:41235},end:{line:1,column:41249}},{start:{line:1,column:41252},end:{line:1,column:41260}},{start:{line:1,column:41262},end:{line:1,column:41274}},{start:{line:1,column:41277},end:{line:1,column:41291}}],line:1},"336":{loc:{start:{line:1,column:41333},end:{line:1,column:41349}},type:"cond-expr",locations:[{start:{line:1,column:41335},end:{line:1,column:41342}},{start:{line:1,column:41343},end:{line:1,column:41349}}],line:1},"337":{loc:{start:{line:1,column:41389},end:{line:1,column:41746}},type:"if",locations:[{start:{line:1,column:41389},end:{line:1,column:41746}},{start:{line:1,column:41519},end:{line:1,column:41746}}],line:1},"338":{loc:{start:{line:1,column:41392},end:{line:1,column:41439}},type:"binary-expr",locations:[{start:{line:1,column:41392},end:{line:1,column:41393}},{start:{line:1,column:41395},end:{line:1,column:41439}}],line:1},"339":{loc:{start:{line:1,column:41520},end:{line:1,column:41681}},type:"if",locations:[{start:{line:1,column:41520},end:{line:1,column:41681}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"340":{loc:{start:{line:1,column:41574},end:{line:1,column:41680}},type:"if",locations:[{start:{line:1,column:41574},end:{line:1,column:41680}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"341":{loc:{start:{line:1,column:41816},end:{line:1,column:41881}},type:"if",locations:[{start:{line:1,column:41816},end:{line:1,column:41881}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"342":{loc:{start:{line:1,column:42247},end:{line:1,column:42302}},type:"cond-expr",locations:[{start:{line:1,column:42253},end:{line:1,column:42300}},{start:{line:1,column:42301},end:{line:1,column:42302}}],line:1},"343":{loc:{start:{line:1,column:42432},end:{line:1,column:42437}},type:"binary-expr",locations:[{start:{line:1,column:42432},end:{line:1,column:42433}},{start:{line:1,column:42435},end:{line:1,column:42437}}],line:1},"344":{loc:{start:{line:1,column:42502},end:{line:1,column:42518}},type:"binary-expr",locations:[{start:{line:1,column:42502},end:{line:1,column:42507}},{start:{line:1,column:42509},end:{line:1,column:42518}}],line:1},"345":{loc:{start:{line:1,column:42540},end:{line:1,column:42550}},type:"binary-expr",locations:[{start:{line:1,column:42540},end:{line:1,column:42543}},{start:{line:1,column:42545},end:{line:1,column:42550}}],line:1},"346":{loc:{start:{line:1,column:42813},end:{line:1,column:42853}},type:"cond-expr",locations:[{start:{line:1,column:42828},end:{line:1,column:42848}},{start:{line:1,column:42849},end:{line:1,column:42853}}],line:1},"347":{loc:{start:{line:1,column:43188},end:{line:1,column:43202}},type:"cond-expr",locations:[{start:{line:1,column:43190},end:{line:1,column:43197}},{start:{line:1,column:43198},end:{line:1,column:43202}}],line:1},"348":{loc:{start:{line:1,column:43203},end:{line:1,column:43389}},type:"if",locations:[{start:{line:1,column:43203},end:{line:1,column:43389}},{start:{line:1,column:43347},end:{line:1,column:43389}}],line:1},"349":{loc:{start:{line:1,column:43212},end:{line:1,column:43342}},type:"if",locations:[{start:{line:1,column:43212},end:{line:1,column:43342}},{start:{line:1,column:43308},end:{line:1,column:43342}}],line:1},"350":{loc:{start:{line:1,column:43257},end:{line:1,column:43302}},type:"binary-expr",locations:[{start:{line:1,column:43257},end:{line:1,column:43258}},{start:{line:1,column:43260},end:{line:1,column:43302}}],line:1},"351":{loc:{start:{line:1,column:43347},end:{line:1,column:43389}},type:"binary-expr",locations:[{start:{line:1,column:43347},end:{line:1,column:43348}},{start:{line:1,column:43350},end:{line:1,column:43389}}],line:1},"352":{loc:{start:{line:1,column:43425},end:{line:1,column:43570}},type:"cond-expr",locations:[{start:{line:1,column:43499},end:{line:1,column:43535}},{start:{line:1,column:43536},end:{line:1,column:43570}}],line:1},"353":{loc:{start:{line:1,column:43425},end:{line:1,column:43498}},type:"binary-expr",locations:[{start:{line:1,column:43425},end:{line:1,column:43442}},{start:{line:1,column:43444},end:{line:1,column:43498}}],line:1},"354":{loc:{start:{line:1,column:43640},end:{line:1,column:43673}},type:"cond-expr",locations:[{start:{line:1,column:43661},end:{line:1,column:43671}},{start:{line:1,column:43672},end:{line:1,column:43673}}],line:1},"355":{loc:{start:{line:1,column:43640},end:{line:1,column:43660}},type:"binary-expr",locations:[{start:{line:1,column:43640},end:{line:1,column:43641}},{start:{line:1,column:43643},end:{line:1,column:43660}}],line:1},"356":{loc:{start:{line:1,column:43752},end:{line:1,column:43911}},type:"if",locations:[{start:{line:1,column:43752},end:{line:1,column:43911}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"357":{loc:{start:{line:1,column:43755},end:{line:1,column:43766}},type:"binary-expr",locations:[{start:{line:1,column:43755},end:{line:1,column:43756}},{start:{line:1,column:43758},end:{line:1,column:43766}}],line:1},"358":{loc:{start:{line:1,column:43979},end:{line:1,column:44012}},type:"cond-expr",locations:[{start:{line:1,column:44000},end:{line:1,column:44010}},{start:{line:1,column:44011},end:{line:1,column:44012}}],line:1},"359":{loc:{start:{line:1,column:43979},end:{line:1,column:43999}},type:"binary-expr",locations:[{start:{line:1,column:43979},end:{line:1,column:43980}},{start:{line:1,column:43982},end:{line:1,column:43999}}],line:1},"360":{loc:{start:{line:1,column:44091},end:{line:1,column:44192}},type:"binary-expr",locations:[{start:{line:1,column:44091},end:{line:1,column:44092}},{start:{line:1,column:44095},end:{line:1,column:44191}}],line:1},"361":{loc:{start:{line:1,column:44095},end:{line:1,column:44161}},type:"binary-expr",locations:[{start:{line:1,column:44095},end:{line:1,column:44103}},{start:{line:1,column:44106},end:{line:1,column:44160}}],line:1},"362":{loc:{start:{line:1,column:44344},end:{line:1,column:44406}},type:"binary-expr",locations:[{start:{line:1,column:44344},end:{line:1,column:44361}},{start:{line:1,column:44363},end:{line:1,column:44406}}],line:1},"363":{loc:{start:{line:1,column:44445},end:{line:1,column:44459}},type:"cond-expr",locations:[{start:{line:1,column:44447},end:{line:1,column:44454}},{start:{line:1,column:44455},end:{line:1,column:44459}}],line:1},"364":{loc:{start:{line:1,column:44460},end:{line:1,column:45185}},type:"if",locations:[{start:{line:1,column:44460},end:{line:1,column:45185}},{start:{line:1,column:44611},end:{line:1,column:45185}}],line:1},"365":{loc:{start:{line:1,column:44475},end:{line:1,column:44606}},type:"if",locations:[{start:{line:1,column:44475},end:{line:1,column:44606}},{start:{line:1,column:44574},end:{line:1,column:44606}}],line:1},"366":{loc:{start:{line:1,column:44611},end:{line:1,column:45185}},type:"if",locations:[{start:{line:1,column:44611},end:{line:1,column:45185}},{start:{line:1,column:45151},end:{line:1,column:45185}}],line:1},"367":{loc:{start:{line:1,column:44664},end:{line:1,column:45145}},type:"if",locations:[{start:{line:1,column:44664},end:{line:1,column:45145}},{start:{line:1,column:45029},end:{line:1,column:45145}}],line:1},"368":{loc:{start:{line:1,column:44906},end:{line:1,column:44961}},type:"binary-expr",locations:[{start:{line:1,column:44906},end:{line:1,column:44914}},{start:{line:1,column:44916},end:{line:1,column:44961}}],line:1},"369":{loc:{start:{line:1,column:45056},end:{line:1,column:45101}},type:"binary-expr",locations:[{start:{line:1,column:45056},end:{line:1,column:45064}},{start:{line:1,column:45066},end:{line:1,column:45101}}],line:1},"370":{loc:{start:{line:1,column:45387},end:{line:1,column:45401}},type:"cond-expr",locations:[{start:{line:1,column:45389},end:{line:1,column:45396}},{start:{line:1,column:45397},end:{line:1,column:45401}}],line:1},"371":{loc:{start:{line:1,column:45450},end:{line:1,column:45499}},type:"cond-expr",locations:[{start:{line:1,column:45464},end:{line:1,column:45494}},{start:{line:1,column:45495},end:{line:1,column:45499}}],line:1},"372":{loc:{start:{line:1,column:45506},end:{line:1,column:45545}},type:"cond-expr",locations:[{start:{line:1,column:45523},end:{line:1,column:45527}},{start:{line:1,column:45528},end:{line:1,column:45545}}],line:1},"373":{loc:{start:{line:1,column:45506},end:{line:1,column:45522}},type:"binary-expr",locations:[{start:{line:1,column:45506},end:{line:1,column:45508}},{start:{line:1,column:45510},end:{line:1,column:45522}}],line:1},"374":{loc:{start:{line:1,column:45598},end:{line:1,column:45645}},type:"cond-expr",locations:[{start:{line:1,column:45604},end:{line:1,column:45643}},{start:{line:1,column:45644},end:{line:1,column:45645}}],line:1},"375":{loc:{start:{line:1,column:45604},end:{line:1,column:45643}},type:"cond-expr",locations:[{start:{line:1,column:45633},end:{line:1,column:45634}},{start:{line:1,column:45635},end:{line:1,column:45643}}],line:1},"376":{loc:{start:{line:1,column:45604},end:{line:1,column:45632}},type:"binary-expr",locations:[{start:{line:1,column:45604},end:{line:1,column:45624}},{start:{line:1,column:45626},end:{line:1,column:45632}}],line:1},"377":{loc:{start:{line:1,column:45666},end:{line:1,column:45713}},type:"default-arg",locations:[{start:{line:1,column:45668},end:{line:1,column:45713}}],line:1},"378":{loc:{start:{line:1,column:45914},end:{line:1,column:45961}},type:"default-arg",locations:[{start:{line:1,column:45916},end:{line:1,column:45961}}],line:1},"379":{loc:{start:{line:1,column:45979},end:{line:1,column:45993}},type:"cond-expr",locations:[{start:{line:1,column:45981},end:{line:1,column:45988}},{start:{line:1,column:45989},end:{line:1,column:45993}}],line:1},"380":{loc:{start:{line:1,column:45996},end:{line:1,column:46031}},type:"cond-expr",locations:[{start:{line:1,column:45998},end:{line:1,column:46026}},{start:{line:1,column:46027},end:{line:1,column:46031}}],line:1},"381":{loc:{start:{line:1,column:46032},end:{line:1,column:46472}},type:"if",locations:[{start:{line:1,column:46032},end:{line:1,column:46472}},{start:{line:1,column:46361},end:{line:1,column:46472}}],line:1},"382":{loc:{start:{line:1,column:46035},end:{line:1,column:46067}},type:"binary-expr",locations:[{start:{line:1,column:46035},end:{line:1,column:46036}},{start:{line:1,column:46038},end:{line:1,column:46067}}],line:1},"383":{loc:{start:{line:1,column:46119},end:{line:1,column:46204}},type:"cond-expr",locations:[{start:{line:1,column:46121},end:{line:1,column:46156}},{start:{line:1,column:46158},end:{line:1,column:46203}}],line:1},"384":{loc:{start:{line:1,column:46205},end:{line:1,column:46260}},type:"cond-expr",locations:[{start:{line:1,column:46217},end:{line:1,column:46246}},{start:{line:1,column:46247},end:{line:1,column:46260}}],line:1},"385":{loc:{start:{line:1,column:46224},end:{line:1,column:46241}},type:"cond-expr",locations:[{start:{line:1,column:46226},end:{line:1,column:46236}},{start:{line:1,column:46237},end:{line:1,column:46241}}],line:1},"386":{loc:{start:{line:1,column:46261},end:{line:1,column:46355}},type:"binary-expr",locations:[{start:{line:1,column:46261},end:{line:1,column:46262}},{start:{line:1,column:46264},end:{line:1,column:46265}},{start:{line:1,column:46267},end:{line:1,column:46275}},{start:{line:1,column:46277},end:{line:1,column:46297}},{start:{line:1,column:46299},end:{line:1,column:46355}}],line:1},"387":{loc:{start:{line:1,column:46361},end:{line:1,column:46373}},type:"binary-expr",locations:[{start:{line:1,column:46361},end:{line:1,column:46362}},{start:{line:1,column:46364},end:{line:1,column:46373}}],line:1},"388":{loc:{start:{line:1,column:46410},end:{line:1,column:46471}},type:"cond-expr",locations:[{start:{line:1,column:46422},end:{line:1,column:46454}},{start:{line:1,column:46455},end:{line:1,column:46471}}],line:1},"389":{loc:{start:{line:1,column:46432},end:{line:1,column:46449}},type:"cond-expr",locations:[{start:{line:1,column:46434},end:{line:1,column:46444}},{start:{line:1,column:46445},end:{line:1,column:46449}}],line:1},"390":{loc:{start:{line:1,column:46500},end:{line:1,column:46568}},type:"if",locations:[{start:{line:1,column:46500},end:{line:1,column:46568}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"391":{loc:{start:{line:1,column:46568},end:{line:1,column:46841}},type:"switch",locations:[{start:{line:1,column:46578},end:{line:1,column:46624}},{start:{line:1,column:46624},end:{line:1,column:46716}},{start:{line:1,column:46716},end:{line:1,column:46738}},{start:{line:1,column:46738},end:{line:1,column:46818}},{start:{line:1,column:46818},end:{line:1,column:46840}}],line:1},"392":{loc:{start:{line:1,column:46666},end:{line:1,column:46715}},type:"binary-expr",locations:[{start:{line:1,column:46666},end:{line:1,column:46682}},{start:{line:1,column:46684},end:{line:1,column:46715}}],line:1},"393":{loc:{start:{line:1,column:46776},end:{line:1,column:46817}},type:"binary-expr",locations:[{start:{line:1,column:46776},end:{line:1,column:46784}},{start:{line:1,column:46786},end:{line:1,column:46817}}],line:1},"394":{loc:{start:{line:1,column:46919},end:{line:1,column:46988}},type:"cond-expr",locations:[{start:{line:1,column:46931},end:{line:1,column:46978}},{start:{line:1,column:46979},end:{line:1,column:46988}}],line:1},"395":{loc:{start:{line:1,column:46931},end:{line:1,column:46978}},type:"cond-expr",locations:[{start:{line:1,column:46933},end:{line:1,column:46965}},{start:{line:1,column:46966},end:{line:1,column:46978}}],line:1},"396":{loc:{start:{line:1,column:46991},end:{line:1,column:47179}},type:"cond-expr",locations:[{start:{line:1,column:47003},end:{line:1,column:47136}},{start:{line:1,column:47137},end:{line:1,column:47179}}],line:1},"397":{loc:{start:{line:1,column:47003},end:{line:1,column:47136}},type:"cond-expr",locations:[{start:{line:1,column:47037},end:{line:1,column:47093}},{start:{line:1,column:47094},end:{line:1,column:47136}}],line:1},"398":{loc:{start:{line:1,column:47003},end:{line:1,column:47036}},type:"binary-expr",locations:[{start:{line:1,column:47003},end:{line:1,column:47004}},{start:{line:1,column:47006},end:{line:1,column:47014}},{start:{line:1,column:47016},end:{line:1,column:47036}}],line:1},"399":{loc:{start:{line:1,column:47287},end:{line:1,column:47303}},type:"binary-expr",locations:[{start:{line:1,column:47287},end:{line:1,column:47288}},{start:{line:1,column:47290},end:{line:1,column:47303}}],line:1},"400":{loc:{start:{line:1,column:47326},end:{line:1,column:47346}},type:"binary-expr",locations:[{start:{line:1,column:47326},end:{line:1,column:47327}},{start:{line:1,column:47329},end:{line:1,column:47346}}],line:1},"401":{loc:{start:{line:1,column:47369},end:{line:1,column:47394}},type:"binary-expr",locations:[{start:{line:1,column:47369},end:{line:1,column:47370}},{start:{line:1,column:47372},end:{line:1,column:47394}}],line:1},"402":{loc:{start:{line:1,column:47417},end:{line:1,column:47439}},type:"binary-expr",locations:[{start:{line:1,column:47417},end:{line:1,column:47418}},{start:{line:1,column:47420},end:{line:1,column:47439}}],line:1},"403":{loc:{start:{line:1,column:47462},end:{line:1,column:47479}},type:"binary-expr",locations:[{start:{line:1,column:47462},end:{line:1,column:47463}},{start:{line:1,column:47465},end:{line:1,column:47479}}],line:1},"404":{loc:{start:{line:1,column:47502},end:{line:1,column:47541}},type:"binary-expr",locations:[{start:{line:1,column:47502},end:{line:1,column:47517}},{start:{line:1,column:47519},end:{line:1,column:47541}}],line:1},"405":{loc:{start:{line:1,column:47660},end:{line:1,column:47717}},type:"if",locations:[{start:{line:1,column:47660},end:{line:1,column:47717}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"406":{loc:{start:{line:1,column:47671},end:{line:1,column:47691}},type:"if",locations:[{start:{line:1,column:47671},end:{line:1,column:47691}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"407":{loc:{start:{line:1,column:47691},end:{line:1,column:47716}},type:"if",locations:[{start:{line:1,column:47691},end:{line:1,column:47716}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"408":{loc:{start:{line:1,column:47694},end:{line:1,column:47707}},type:"binary-expr",locations:[{start:{line:1,column:47694},end:{line:1,column:47700}},{start:{line:1,column:47702},end:{line:1,column:47707}}],line:1},"409":{loc:{start:{line:1,column:47771},end:{line:1,column:47793}},type:"binary-expr",locations:[{start:{line:1,column:47771},end:{line:1,column:47776}},{start:{line:1,column:47778},end:{line:1,column:47793}}],line:1},"410":{loc:{start:{line:1,column:47816},end:{line:1,column:47968}},type:"cond-expr",locations:[{start:{line:1,column:47826},end:{line:1,column:47847}},{start:{line:1,column:47848},end:{line:1,column:47968}}],line:1},"411":{loc:{start:{line:1,column:48129},end:{line:1,column:48267}},type:"cond-expr",locations:[{start:{line:1,column:48156},end:{line:1,column:48187}},{start:{line:1,column:48188},end:{line:1,column:48267}}],line:1},"412":{loc:{start:{line:1,column:48129},end:{line:1,column:48155}},type:"binary-expr",locations:[{start:{line:1,column:48129},end:{line:1,column:48141}},{start:{line:1,column:48143},end:{line:1,column:48155}}],line:1},"413":{loc:{start:{line:1,column:48208},end:{line:1,column:48231}},type:"cond-expr",locations:[{start:{line:1,column:48217},end:{line:1,column:48226}},{start:{line:1,column:48227},end:{line:1,column:48231}}],line:1},"414":{loc:{start:{line:1,column:48208},end:{line:1,column:48216}},type:"binary-expr",locations:[{start:{line:1,column:48208},end:{line:1,column:48209}},{start:{line:1,column:48211},end:{line:1,column:48216}}],line:1},"415":{loc:{start:{line:1,column:48507},end:{line:1,column:48532}},type:"binary-expr",locations:[{start:{line:1,column:48507},end:{line:1,column:48515}},{start:{line:1,column:48517},end:{line:1,column:48518}},{start:{line:1,column:48520},end:{line:1,column:48532}}],line:1},"416":{loc:{start:{line:1,column:48563},end:{line:1,column:48588}},type:"binary-expr",locations:[{start:{line:1,column:48563},end:{line:1,column:48571}},{start:{line:1,column:48573},end:{line:1,column:48574}},{start:{line:1,column:48576},end:{line:1,column:48588}}],line:1},"417":{loc:{start:{line:1,column:48618},end:{line:1,column:48662}},type:"cond-expr",locations:[{start:{line:1,column:48632},end:{line:1,column:48657}},{start:{line:1,column:48658},end:{line:1,column:48662}}],line:1},"418":{loc:{start:{line:1,column:48663},end:{line:1,column:48696}},type:"if",locations:[{start:{line:1,column:48663},end:{line:1,column:48696}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"419":{loc:{start:{line:1,column:48666},end:{line:1,column:48682}},type:"binary-expr",locations:[{start:{line:1,column:48666},end:{line:1,column:48668}},{start:{line:1,column:48670},end:{line:1,column:48682}}],line:1},"420":{loc:{start:{line:1,column:48760},end:{line:1,column:48800}},type:"cond-expr",locations:[{start:{line:1,column:48766},end:{line:1,column:48784}},{start:{line:1,column:48785},end:{line:1,column:48800}}],line:1},"421":{loc:{start:{line:1,column:49039},end:{line:1,column:49084}},type:"cond-expr",locations:[{start:{line:1,column:49045},end:{line:1,column:49068}},{start:{line:1,column:49069},end:{line:1,column:49084}}],line:1},"422":{loc:{start:{line:1,column:49186},end:{line:1,column:49235}},type:"cond-expr",locations:[{start:{line:1,column:49203},end:{line:1,column:49230}},{start:{line:1,column:49231},end:{line:1,column:49235}}],line:1},"423":{loc:{start:{line:1,column:49186},end:{line:1,column:49202}},type:"binary-expr",locations:[{start:{line:1,column:49186},end:{line:1,column:49187}},{start:{line:1,column:49189},end:{line:1,column:49202}}],line:1},"424":{loc:{start:{line:1,column:49236},end:{line:1,column:49269}},type:"if",locations:[{start:{line:1,column:49236},end:{line:1,column:49269}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"425":{loc:{start:{line:1,column:49239},end:{line:1,column:49255}},type:"binary-expr",locations:[{start:{line:1,column:49239},end:{line:1,column:49241}},{start:{line:1,column:49243},end:{line:1,column:49255}}],line:1},"426":{loc:{start:{line:1,column:49326},end:{line:1,column:49376}},type:"cond-expr",locations:[{start:{line:1,column:49332},end:{line:1,column:49356}},{start:{line:1,column:49357},end:{line:1,column:49376}}],line:1},"427":{loc:{start:{line:1,column:49464},end:{line:1,column:49505}},type:"if",locations:[{start:{line:1,column:49464},end:{line:1,column:49505}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"428":{loc:{start:{line:1,column:49467},end:{line:1,column:49491}},type:"binary-expr",locations:[{start:{line:1,column:49467},end:{line:1,column:49477}},{start:{line:1,column:49479},end:{line:1,column:49491}}],line:1},"429":{loc:{start:{line:1,column:49537},end:{line:1,column:49573}},type:"cond-expr",locations:[{start:{line:1,column:49543},end:{line:1,column:49557}},{start:{line:1,column:49558},end:{line:1,column:49573}}],line:1},"430":{loc:{start:{line:1,column:49589},end:{line:1,column:49606}},type:"cond-expr",locations:[{start:{line:1,column:49591},end:{line:1,column:49604}},{start:{line:1,column:49605},end:{line:1,column:49606}}],line:1},"431":{loc:{start:{line:1,column:49669},end:{line:1,column:49705}},type:"if",locations:[{start:{line:1,column:49669},end:{line:1,column:49705}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"432":{loc:{start:{line:1,column:49764},end:{line:1,column:49797}},type:"if",locations:[{start:{line:1,column:49764},end:{line:1,column:49797}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"433":{loc:{start:{line:1,column:49767},end:{line:1,column:49783}},type:"binary-expr",locations:[{start:{line:1,column:49767},end:{line:1,column:49769}},{start:{line:1,column:49771},end:{line:1,column:49783}}],line:1},"434":{loc:{start:{line:1,column:49829},end:{line:1,column:49870}},type:"cond-expr",locations:[{start:{line:1,column:49835},end:{line:1,column:49852}},{start:{line:1,column:49853},end:{line:1,column:49870}}],line:1},"435":{loc:{start:{line:1,column:50009},end:{line:1,column:50016}},type:"binary-expr",locations:[{start:{line:1,column:50009},end:{line:1,column:50010}},{start:{line:1,column:50012},end:{line:1,column:50016}}],line:1},"436":{loc:{start:{line:1,column:50395},end:{line:1,column:50453}},type:"if",locations:[{start:{line:1,column:50395},end:{line:1,column:50453}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"437":{loc:{start:{line:1,column:50453},end:{line:1,column:50521}},type:"if",locations:[{start:{line:1,column:50453},end:{line:1,column:50521}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"438":{loc:{start:{line:1,column:50456},end:{line:1,column:50492}},type:"binary-expr",locations:[{start:{line:1,column:50456},end:{line:1,column:50476}},{start:{line:1,column:50478},end:{line:1,column:50492}}],line:1},"439":{loc:{start:{line:1,column:50599},end:{line:1,column:50633}},type:"if",locations:[{start:{line:1,column:50599},end:{line:1,column:50633}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"440":{loc:{start:{line:1,column:50706},end:{line:1,column:50736}},type:"if",locations:[{start:{line:1,column:50706},end:{line:1,column:50736}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"441":{loc:{start:{line:1,column:50990},end:{line:1,column:51067}},type:"if",locations:[{start:{line:1,column:50990},end:{line:1,column:51067}},{start:{line:1,column:51061},end:{line:1,column:51067}}],line:1},"442":{loc:{start:{line:1,column:50993},end:{line:1,column:51023}},type:"binary-expr",locations:[{start:{line:1,column:50993},end:{line:1,column:51011}},{start:{line:1,column:51013},end:{line:1,column:51023}}],line:1},"443":{loc:{start:{line:1,column:51292},end:{line:1,column:51355}},type:"cond-expr",locations:[{start:{line:1,column:51308},end:{line:1,column:51332}},{start:{line:1,column:51333},end:{line:1,column:51355}}],line:1},"444":{loc:{start:{line:1,column:51406},end:{line:1,column:51433}},type:"if",locations:[{start:{line:1,column:51406},end:{line:1,column:51433}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"445":{loc:{start:{line:1,column:51484},end:{line:1,column:51524}},type:"if",locations:[{start:{line:1,column:51484},end:{line:1,column:51524}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"446":{loc:{start:{line:1,column:51558},end:{line:1,column:51606}},type:"if",locations:[{start:{line:1,column:51558},end:{line:1,column:51606}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"447":{loc:{start:{line:1,column:51667},end:{line:1,column:51744}},type:"binary-expr",locations:[{start:{line:1,column:51667},end:{line:1,column:51678}},{start:{line:1,column:51680},end:{line:1,column:51692}},{start:{line:1,column:51695},end:{line:1,column:51743}}],line:1},"448":{loc:{start:{line:1,column:51745},end:{line:1,column:51759}},type:"binary-expr",locations:[{start:{line:1,column:51745},end:{line:1,column:51756}},{start:{line:1,column:51758},end:{line:1,column:51759}}],line:1},"449":{loc:{start:{line:1,column:51781},end:{line:1,column:51792}},type:"binary-expr",locations:[{start:{line:1,column:51781},end:{line:1,column:51789}},{start:{line:1,column:51791},end:{line:1,column:51792}}],line:1},"450":{loc:{start:{line:1,column:52238},end:{line:1,column:52264}},type:"if",locations:[{start:{line:1,column:52238},end:{line:1,column:52264}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"451":{loc:{start:{line:1,column:52322},end:{line:1,column:52339}},type:"cond-expr",locations:[{start:{line:1,column:52329},end:{line:1,column:52330}},{start:{line:1,column:52331},end:{line:1,column:52339}}],line:1},"452":{loc:{start:{line:1,column:52361},end:{line:1,column:52538}},type:"if",locations:[{start:{line:1,column:52361},end:{line:1,column:52538}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"453":{loc:{start:{line:1,column:52383},end:{line:1,column:52537}},type:"cond-expr",locations:[{start:{line:1,column:52435},end:{line:1,column:52443}},{start:{line:1,column:52444},end:{line:1,column:52537}}],line:1},"454":{loc:{start:{line:1,column:52383},end:{line:1,column:52434}},type:"binary-expr",locations:[{start:{line:1,column:52383},end:{line:1,column:52403}},{start:{line:1,column:52406},end:{line:1,column:52421}},{start:{line:1,column:52423},end:{line:1,column:52433}}],line:1},"455":{loc:{start:{line:1,column:52545},end:{line:1,column:52558}},type:"binary-expr",locations:[{start:{line:1,column:52545},end:{line:1,column:52554}},{start:{line:1,column:52556},end:{line:1,column:52558}}],line:1},"456":{loc:{start:{line:1,column:52567},end:{line:1,column:52589}},type:"if",locations:[{start:{line:1,column:52567},end:{line:1,column:52589}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"457":{loc:{start:{line:1,column:52613},end:{line:1,column:52628}},type:"binary-expr",locations:[{start:{line:1,column:52613},end:{line:1,column:52624}},{start:{line:1,column:52626},end:{line:1,column:52628}}],line:1},"458":{loc:{start:{line:1,column:52668},end:{line:1,column:52743}},type:"cond-expr",locations:[{start:{line:1,column:52688},end:{line:1,column:52741}},{start:{line:1,column:52742},end:{line:1,column:52743}}],line:1},"459":{loc:{start:{line:1,column:52872},end:{line:1,column:52887}},type:"binary-expr",locations:[{start:{line:1,column:52872},end:{line:1,column:52883}},{start:{line:1,column:52885},end:{line:1,column:52887}}],line:1},"460":{loc:{start:{line:1,column:52917},end:{line:1,column:53162}},type:"cond-expr",locations:[{start:{line:1,column:52939},end:{line:1,column:53006}},{start:{line:1,column:53007},end:{line:1,column:53162}}],line:1},"461":{loc:{start:{line:1,column:52917},end:{line:1,column:52938}},type:"binary-expr",locations:[{start:{line:1,column:52917},end:{line:1,column:52927}},{start:{line:1,column:52929},end:{line:1,column:52938}}],line:1},"462":{loc:{start:{line:1,column:53007},end:{line:1,column:53162}},type:"cond-expr",locations:[{start:{line:1,column:53031},end:{line:1,column:53101}},{start:{line:1,column:53102},end:{line:1,column:53162}}],line:1},"463":{loc:{start:{line:1,column:53007},end:{line:1,column:53030}},type:"binary-expr",locations:[{start:{line:1,column:53007},end:{line:1,column:53019}},{start:{line:1,column:53021},end:{line:1,column:53030}}],line:1},"464":{loc:{start:{line:1,column:53208},end:{line:1,column:53261}},type:"if",locations:[{start:{line:1,column:53208},end:{line:1,column:53261}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"465":{loc:{start:{line:1,column:53211},end:{line:1,column:53230}},type:"binary-expr",locations:[{start:{line:1,column:53211},end:{line:1,column:53220}},{start:{line:1,column:53222},end:{line:1,column:53230}}],line:1},"466":{loc:{start:{line:1,column:53329},end:{line:1,column:53384}},type:"if",locations:[{start:{line:1,column:53329},end:{line:1,column:53384}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"467":{loc:{start:{line:1,column:53332},end:{line:1,column:53353}},type:"binary-expr",locations:[{start:{line:1,column:53332},end:{line:1,column:53343}},{start:{line:1,column:53345},end:{line:1,column:53353}}],line:1},"468":{loc:{start:{line:1,column:53429},end:{line:1,column:53448}},type:"binary-expr",locations:[{start:{line:1,column:53429},end:{line:1,column:53438}},{start:{line:1,column:53440},end:{line:1,column:53448}}],line:1},"469":{loc:{start:{line:1,column:53522},end:{line:1,column:53588}},type:"cond-expr",locations:[{start:{line:1,column:53574},end:{line:1,column:53576}},{start:{line:1,column:53577},end:{line:1,column:53588}}],line:1},"470":{loc:{start:{line:1,column:53522},end:{line:1,column:53573}},type:"binary-expr",locations:[{start:{line:1,column:53523},end:{line:1,column:53538}},{start:{line:1,column:53540},end:{line:1,column:53550}},{start:{line:1,column:53553},end:{line:1,column:53573}}],line:1},"471":{loc:{start:{line:1,column:53615},end:{line:1,column:53643}},type:"binary-expr",locations:[{start:{line:1,column:53615},end:{line:1,column:53627}},{start:{line:1,column:53629},end:{line:1,column:53643}}],line:1},"472":{loc:{start:{line:1,column:53689},end:{line:1,column:53702}},type:"default-arg",locations:[{start:{line:1,column:53691},end:{line:1,column:53702}}],line:1},"473":{loc:{start:{line:1,column:54845},end:{line:1,column:54921}},type:"if",locations:[{start:{line:1,column:54845},end:{line:1,column:54921}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"474":{loc:{start:{line:1,column:54927},end:{line:1,column:54964}},type:"cond-expr",locations:[{start:{line:1,column:54942},end:{line:1,column:54962}},{start:{line:1,column:54963},end:{line:1,column:54964}}],line:1},"475":{loc:{start:{line:1,column:55003},end:{line:1,column:55082}},type:"if",locations:[{start:{line:1,column:55003},end:{line:1,column:55082}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"476":{loc:{start:{line:1,column:55006},end:{line:1,column:55044}},type:"binary-expr",locations:[{start:{line:1,column:55006},end:{line:1,column:55027}},{start:{line:1,column:55029},end:{line:1,column:55044}}],line:1},"477":{loc:{start:{line:1,column:55146},end:{line:1,column:55167}},type:"cond-expr",locations:[{start:{line:1,column:55161},end:{line:1,column:55164}},{start:{line:1,column:55165},end:{line:1,column:55167}}],line:1},"478":{loc:{start:{line:1,column:55245},end:{line:1,column:55281}},type:"cond-expr",locations:[{start:{line:1,column:55259},end:{line:1,column:55271}},{start:{line:1,column:55272},end:{line:1,column:55281}}],line:1},"479":{loc:{start:{line:1,column:55521},end:{line:1,column:55535}},type:"binary-expr",locations:[{start:{line:1,column:55521},end:{line:1,column:55532}},{start:{line:1,column:55534},end:{line:1,column:55535}}],line:1},"480":{loc:{start:{line:1,column:55560},end:{line:1,column:55594}},type:"if",locations:[{start:{line:1,column:55560},end:{line:1,column:55594}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"481":{loc:{start:{line:1,column:55563},end:{line:1,column:55584}},type:"binary-expr",locations:[{start:{line:1,column:55563},end:{line:1,column:55577}},{start:{line:1,column:55579},end:{line:1,column:55584}}],line:1},"482":{loc:{start:{line:1,column:55602},end:{line:1,column:55629}},type:"if",locations:[{start:{line:1,column:55602},end:{line:1,column:55629}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"483":{loc:{start:{line:1,column:55694},end:{line:1,column:55742}},type:"if",locations:[{start:{line:1,column:55694},end:{line:1,column:55742}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"484":{loc:{start:{line:1,column:55697},end:{line:1,column:55726}},type:"binary-expr",locations:[{start:{line:1,column:55697},end:{line:1,column:55705}},{start:{line:1,column:55708},end:{line:1,column:55713}},{start:{line:1,column:55715},end:{line:1,column:55725}}],line:1},"485":{loc:{start:{line:1,column:55742},end:{line:1,column:55817}},type:"if",locations:[{start:{line:1,column:55742},end:{line:1,column:55817}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"486":{loc:{start:{line:1,column:55817},end:{line:1,column:55909}},type:"if",locations:[{start:{line:1,column:55817},end:{line:1,column:55909}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"487":{loc:{start:{line:1,column:55820},end:{line:1,column:55842}},type:"binary-expr",locations:[{start:{line:1,column:55820},end:{line:1,column:55839}},{start:{line:1,column:55841},end:{line:1,column:55842}}],line:1},"488":{loc:{start:{line:1,column:56087},end:{line:1,column:56108}},type:"if",locations:[{start:{line:1,column:56087},end:{line:1,column:56108}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"489":{loc:{start:{line:1,column:56108},end:{line:1,column:56248}},type:"binary-expr",locations:[{start:{line:1,column:56108},end:{line:1,column:56137}},{start:{line:1,column:56139},end:{line:1,column:56160}},{start:{line:1,column:56163},end:{line:1,column:56247}}],line:1},"490":{loc:{start:{line:1,column:56192},end:{line:1,column:56247}},type:"binary-expr",locations:[{start:{line:1,column:56192},end:{line:1,column:56221}},{start:{line:1,column:56224},end:{line:1,column:56246}}],line:1},"491":{loc:{start:{line:1,column:56287},end:{line:1,column:56356}},type:"if",locations:[{start:{line:1,column:56287},end:{line:1,column:56356}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"492":{loc:{start:{line:1,column:56666},end:{line:1,column:56703}},type:"binary-expr",locations:[{start:{line:1,column:56666},end:{line:1,column:56677}},{start:{line:1,column:56679},end:{line:1,column:56697}},{start:{line:1,column:56699},end:{line:1,column:56703}}],line:1},"493":{loc:{start:{line:1,column:56871},end:{line:1,column:56940}},type:"if",locations:[{start:{line:1,column:56871},end:{line:1,column:56940}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"494":{loc:{start:{line:1,column:57073},end:{line:1,column:57134}},type:"if",locations:[{start:{line:1,column:57073},end:{line:1,column:57134}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"495":{loc:{start:{line:1,column:57076},end:{line:1,column:57106}},type:"binary-expr",locations:[{start:{line:1,column:57076},end:{line:1,column:57089}},{start:{line:1,column:57092},end:{line:1,column:57105}}],line:1},"496":{loc:{start:{line:1,column:57136},end:{line:1,column:57150}},type:"binary-expr",locations:[{start:{line:1,column:57136},end:{line:1,column:57147}},{start:{line:1,column:57149},end:{line:1,column:57150}}],line:1},"497":{loc:{start:{line:1,column:57200},end:{line:1,column:57220}},type:"binary-expr",locations:[{start:{line:1,column:57200},end:{line:1,column:57217}},{start:{line:1,column:57219},end:{line:1,column:57220}}],line:1},"498":{loc:{start:{line:1,column:57360},end:{line:1,column:57459}},type:"if",locations:[{start:{line:1,column:57360},end:{line:1,column:57459}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"499":{loc:{start:{line:1,column:57363},end:{line:1,column:57394}},type:"binary-expr",locations:[{start:{line:1,column:57363},end:{line:1,column:57376}},{start:{line:1,column:57378},end:{line:1,column:57394}}],line:1},"500":{loc:{start:{line:1,column:57459},end:{line:1,column:57509}},type:"if",locations:[{start:{line:1,column:57459},end:{line:1,column:57509}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"501":{loc:{start:{line:1,column:57462},end:{line:1,column:57489}},type:"binary-expr",locations:[{start:{line:1,column:57462},end:{line:1,column:57474}},{start:{line:1,column:57476},end:{line:1,column:57489}}],line:1},"502":{loc:{start:{line:1,column:57564},end:{line:1,column:57570}},type:"cond-expr",locations:[{start:{line:1,column:57567},end:{line:1,column:57568}},{start:{line:1,column:57569},end:{line:1,column:57570}}],line:1},"503":{loc:{start:{line:1,column:57592},end:{line:1,column:57615}},type:"cond-expr",locations:[{start:{line:1,column:57608},end:{line:1,column:57612}},{start:{line:1,column:57613},end:{line:1,column:57615}}],line:1},"504":{loc:{start:{line:1,column:57645},end:{line:1,column:57696}},type:"if",locations:[{start:{line:1,column:57645},end:{line:1,column:57696}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"505":{loc:{start:{line:1,column:57696},end:{line:1,column:58185}},type:"if",locations:[{start:{line:1,column:57696},end:{line:1,column:58185}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"506":{loc:{start:{line:1,column:57715},end:{line:1,column:57898}},type:"if",locations:[{start:{line:1,column:57715},end:{line:1,column:57898}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"507":{loc:{start:{line:1,column:57782},end:{line:1,column:57845}},type:"binary-expr",locations:[{start:{line:1,column:57782},end:{line:1,column:57783}},{start:{line:1,column:57785},end:{line:1,column:57803}},{start:{line:1,column:57806},end:{line:1,column:57844}}],line:1},"508":{loc:{start:{line:1,column:57898},end:{line:1,column:57967}},type:"if",locations:[{start:{line:1,column:57898},end:{line:1,column:57967}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"509":{loc:{start:{line:1,column:57967},end:{line:1,column:58173}},type:"if",locations:[{start:{line:1,column:57967},end:{line:1,column:58173}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"510":{loc:{start:{line:1,column:58245},end:{line:1,column:58332}},type:"cond-expr",locations:[{start:{line:1,column:58264},end:{line:1,column:58266}},{start:{line:1,column:58267},end:{line:1,column:58332}}],line:1},"511":{loc:{start:{line:1,column:58267},end:{line:1,column:58332}},type:"cond-expr",locations:[{start:{line:1,column:58286},end:{line:1,column:58287}},{start:{line:1,column:58288},end:{line:1,column:58332}}],line:1},"512":{loc:{start:{line:1,column:58382},end:{line:1,column:58396}},type:"binary-expr",locations:[{start:{line:1,column:58382},end:{line:1,column:58383}},{start:{line:1,column:58385},end:{line:1,column:58396}}],line:1},"513":{loc:{start:{line:1,column:58447},end:{line:1,column:58477}},type:"if",locations:[{start:{line:1,column:58447},end:{line:1,column:58477}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"514":{loc:{start:{line:1,column:58536},end:{line:1,column:58598}},type:"cond-expr",locations:[{start:{line:1,column:58548},end:{line:1,column:58587}},{start:{line:1,column:58589},end:{line:1,column:58598}}],line:1},"515":{loc:{start:{line:1,column:58713},end:{line:1,column:58723}},type:"binary-expr",locations:[{start:{line:1,column:58713},end:{line:1,column:58719}},{start:{line:1,column:58721},end:{line:1,column:58723}}],line:1},"516":{loc:{start:{line:1,column:58746},end:{line:1,column:58759}},type:"binary-expr",locations:[{start:{line:1,column:58746},end:{line:1,column:58755}},{start:{line:1,column:58757},end:{line:1,column:58759}}],line:1},"517":{loc:{start:{line:1,column:59005},end:{line:1,column:59030}},type:"if",locations:[{start:{line:1,column:59005},end:{line:1,column:59030}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"518":{loc:{start:{line:1,column:59088},end:{line:1,column:59129}},type:"if",locations:[{start:{line:1,column:59088},end:{line:1,column:59129}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"519":{loc:{start:{line:1,column:59160},end:{line:1,column:59222}},type:"cond-expr",locations:[{start:{line:1,column:59169},end:{line:1,column:59178}},{start:{line:1,column:59180},end:{line:1,column:59221}}],line:1},"520":{loc:{start:{line:1,column:59246},end:{line:1,column:59263}},type:"cond-expr",locations:[{start:{line:1,column:59257},end:{line:1,column:59261}},{start:{line:1,column:59262},end:{line:1,column:59263}}],line:1},"521":{loc:{start:{line:1,column:59395},end:{line:1,column:59437}},type:"binary-expr",locations:[{start:{line:1,column:59395},end:{line:1,column:59412}},{start:{line:1,column:59414},end:{line:1,column:59420}},{start:{line:1,column:59423},end:{line:1,column:59436}}],line:1},"522":{loc:{start:{line:1,column:59583},end:{line:1,column:59612}},type:"if",locations:[{start:{line:1,column:59583},end:{line:1,column:59612}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"523":{loc:{start:{line:1,column:59671},end:{line:1,column:59708}},type:"if",locations:[{start:{line:1,column:59671},end:{line:1,column:59708}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"524":{loc:{start:{line:1,column:59740},end:{line:1,column:59753}},type:"cond-expr",locations:[{start:{line:1,column:59746},end:{line:1,column:59747}},{start:{line:1,column:59748},end:{line:1,column:59753}}],line:1},"525":{loc:{start:{line:1,column:59816},end:{line:1,column:59856}},type:"cond-expr",locations:[{start:{line:1,column:59826},end:{line:1,column:59840}},{start:{line:1,column:59841},end:{line:1,column:59856}}],line:1},"526":{loc:{start:{line:1,column:59916},end:{line:1,column:59942}},type:"cond-expr",locations:[{start:{line:1,column:59918},end:{line:1,column:59937}},{start:{line:1,column:59938},end:{line:1,column:59942}}],line:1},"527":{loc:{start:{line:1,column:60014},end:{line:1,column:60049}},type:"binary-expr",locations:[{start:{line:1,column:60014},end:{line:1,column:60046}},{start:{line:1,column:60048},end:{line:1,column:60049}}],line:1},"528":{loc:{start:{line:1,column:60180},end:{line:1,column:60184}},type:"binary-expr",locations:[{start:{line:1,column:60180},end:{line:1,column:60181}},{start:{line:1,column:60183},end:{line:1,column:60184}}],line:1},"529":{loc:{start:{line:1,column:60377},end:{line:1,column:60411}},type:"binary-expr",locations:[{start:{line:1,column:60377},end:{line:1,column:60387}},{start:{line:1,column:60389},end:{line:1,column:60411}}],line:1},"530":{loc:{start:{line:1,column:60452},end:{line:1,column:60456}},type:"binary-expr",locations:[{start:{line:1,column:60452},end:{line:1,column:60453}},{start:{line:1,column:60455},end:{line:1,column:60456}}],line:1},"531":{loc:{start:{line:1,column:60745},end:{line:1,column:60813}},type:"if",locations:[{start:{line:1,column:60745},end:{line:1,column:60813}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"532":{loc:{start:{line:1,column:60813},end:{line:1,column:60878}},type:"if",locations:[{start:{line:1,column:60813},end:{line:1,column:60878}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"533":{loc:{start:{line:1,column:60878},end:{line:1,column:60931}},type:"binary-expr",locations:[{start:{line:1,column:60878},end:{line:1,column:60902}},{start:{line:1,column:60904},end:{line:1,column:60931}}],line:1},"534":{loc:{start:{line:1,column:61021},end:{line:1,column:61070}},type:"binary-expr",locations:[{start:{line:1,column:61021},end:{line:1,column:61043}},{start:{line:1,column:61045},end:{line:1,column:61070}}],line:1},"535":{loc:{start:{line:1,column:61197},end:{line:1,column:61263}},type:"if",locations:[{start:{line:1,column:61197},end:{line:1,column:61263}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"536":{loc:{start:{line:1,column:61263},end:{line:1,column:61358}},type:"if",locations:[{start:{line:1,column:61263},end:{line:1,column:61358}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"537":{loc:{start:{line:1,column:61358},end:{line:1,column:61411}},type:"binary-expr",locations:[{start:{line:1,column:61358},end:{line:1,column:61382}},{start:{line:1,column:61384},end:{line:1,column:61411}}],line:1},"538":{loc:{start:{line:1,column:61711},end:{line:1,column:61715}},type:"binary-expr",locations:[{start:{line:1,column:61711},end:{line:1,column:61712}},{start:{line:1,column:61714},end:{line:1,column:61715}}],line:1},"539":{loc:{start:{line:1,column:61889},end:{line:1,column:61958}},type:"cond-expr",locations:[{start:{line:1,column:61923},end:{line:1,column:61926}},{start:{line:1,column:61927},end:{line:1,column:61958}}],line:1},"540":{loc:{start:{line:1,column:61889},end:{line:1,column:61922}},type:"binary-expr",locations:[{start:{line:1,column:61889},end:{line:1,column:61904}},{start:{line:1,column:61906},end:{line:1,column:61922}}],line:1},"541":{loc:{start:{line:1,column:61959},end:{line:1,column:61966}},type:"binary-expr",locations:[{start:{line:1,column:61959},end:{line:1,column:61960}},{start:{line:1,column:61962},end:{line:1,column:61966}}],line:1},"542":{loc:{start:{line:1,column:61989},end:{line:1,column:62089}},type:"cond-expr",locations:[{start:{line:1,column:62007},end:{line:1,column:62015}},{start:{line:1,column:62018},end:{line:1,column:62088}}],line:1},"543":{loc:{start:{line:1,column:62152},end:{line:1,column:62188}},type:"binary-expr",locations:[{start:{line:1,column:62152},end:{line:1,column:62153}},{start:{line:1,column:62155},end:{line:1,column:62173}},{start:{line:1,column:62175},end:{line:1,column:62188}}],line:1},"544":{loc:{start:{line:1,column:62211},end:{line:1,column:62228}},type:"cond-expr",locations:[{start:{line:1,column:62217},end:{line:1,column:62226}},{start:{line:1,column:62227},end:{line:1,column:62228}}],line:1},"545":{loc:{start:{line:1,column:62320},end:{line:1,column:62324}},type:"binary-expr",locations:[{start:{line:1,column:62320},end:{line:1,column:62321}},{start:{line:1,column:62323},end:{line:1,column:62324}}],line:1},"546":{loc:{start:{line:1,column:62533},end:{line:1,column:62537}},type:"binary-expr",locations:[{start:{line:1,column:62533},end:{line:1,column:62534}},{start:{line:1,column:62536},end:{line:1,column:62537}}],line:1},"547":{loc:{start:{line:1,column:62694},end:{line:1,column:62803}},type:"if",locations:[{start:{line:1,column:62694},end:{line:1,column:62803}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"548":{loc:{start:{line:1,column:62697},end:{line:1,column:62741}},type:"binary-expr",locations:[{start:{line:1,column:62697},end:{line:1,column:62719}},{start:{line:1,column:62721},end:{line:1,column:62741}}],line:1},"549":{loc:{start:{line:1,column:62993},end:{line:1,column:63034}},type:"binary-expr",locations:[{start:{line:1,column:62993},end:{line:1,column:62994}},{start:{line:1,column:62996},end:{line:1,column:63034}}],line:1},"550":{loc:{start:{line:1,column:63503},end:{line:1,column:63526}},type:"binary-expr",locations:[{start:{line:1,column:63503},end:{line:1,column:63522}},{start:{line:1,column:63524},end:{line:1,column:63526}}],line:1},"551":{loc:{start:{line:1,column:63553},end:{line:1,column:63604}},type:"binary-expr",locations:[{start:{line:1,column:63553},end:{line:1,column:63591}},{start:{line:1,column:63593},end:{line:1,column:63604}}],line:1},"552":{loc:{start:{line:1,column:64583},end:{line:1,column:64620}},type:"binary-expr",locations:[{start:{line:1,column:64583},end:{line:1,column:64585}},{start:{line:1,column:64587},end:{line:1,column:64620}}],line:1},"553":{loc:{start:{line:1,column:64644},end:{line:1,column:64745}},type:"if",locations:[{start:{line:1,column:64644},end:{line:1,column:64745}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"554":{loc:{start:{line:1,column:64909},end:{line:1,column:65011}},type:"cond-expr",locations:[{start:{line:1,column:64946},end:{line:1,column:64991}},{start:{line:1,column:64992},end:{line:1,column:65011}}],line:1},"555":{loc:{start:{line:1,column:65064},end:{line:1,column:65107}},type:"cond-expr",locations:[{start:{line:1,column:65066},end:{line:1,column:65102}},{start:{line:1,column:65103},end:{line:1,column:65107}}],line:1},"556":{loc:{start:{line:1,column:65230},end:{line:1,column:65302}},type:"binary-expr",locations:[{start:{line:1,column:65230},end:{line:1,column:65242}},{start:{line:1,column:65244},end:{line:1,column:65274}},{start:{line:1,column:65276},end:{line:1,column:65302}}],line:1},"557":{loc:{start:{line:1,column:65305},end:{line:1,column:65356}},type:"binary-expr",locations:[{start:{line:1,column:65305},end:{line:1,column:65333}},{start:{line:1,column:65335},end:{line:1,column:65356}}],line:1},"558":{loc:{start:{line:1,column:65357},end:{line:1,column:65500}},type:"if",locations:[{start:{line:1,column:65357},end:{line:1,column:65500}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"559":{loc:{start:{line:1,column:65360},end:{line:1,column:65376}},type:"binary-expr",locations:[{start:{line:1,column:65360},end:{line:1,column:65362}},{start:{line:1,column:65364},end:{line:1,column:65376}}],line:1},"560":{loc:{start:{line:1,column:65500},end:{line:1,column:66277}},type:"if",locations:[{start:{line:1,column:65500},end:{line:1,column:66277}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"561":{loc:{start:{line:1,column:65679},end:{line:1,column:65724}},type:"cond-expr",locations:[{start:{line:1,column:65704},end:{line:1,column:65705}},{start:{line:1,column:65706},end:{line:1,column:65724}}],line:1},"562":{loc:{start:{line:1,column:66048},end:{line:1,column:66098}},type:"binary-expr",locations:[{start:{line:1,column:66048},end:{line:1,column:66087}},{start:{line:1,column:66089},end:{line:1,column:66098}}],line:1},"563":{loc:{start:{line:1,column:66277},end:{line:1,column:66881}},type:"if",locations:[{start:{line:1,column:66277},end:{line:1,column:66881}},{start:{line:1,column:66749},end:{line:1,column:66881}}],line:1},"564":{loc:{start:{line:1,column:66280},end:{line:1,column:66341}},type:"binary-expr",locations:[{start:{line:1,column:66280},end:{line:1,column:66281}},{start:{line:1,column:66283},end:{line:1,column:66341}}],line:1},"565":{loc:{start:{line:1,column:67187},end:{line:1,column:67313}},type:"if",locations:[{start:{line:1,column:67187},end:{line:1,column:67313}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"566":{loc:{start:{line:1,column:67220},end:{line:1,column:67268}},type:"binary-expr",locations:[{start:{line:1,column:67220},end:{line:1,column:67234}},{start:{line:1,column:67236},end:{line:1,column:67268}}],line:1},"567":{loc:{start:{line:1,column:67461},end:{line:1,column:67498}},type:"if",locations:[{start:{line:1,column:67461},end:{line:1,column:67498}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"568":{loc:{start:{line:1,column:67498},end:{line:1,column:67580}},type:"if",locations:[{start:{line:1,column:67498},end:{line:1,column:67580}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"569":{loc:{start:{line:1,column:67580},end:{line:1,column:67633}},type:"if",locations:[{start:{line:1,column:67580},end:{line:1,column:67633}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"570":{loc:{start:{line:1,column:67764},end:{line:1,column:67801}},type:"if",locations:[{start:{line:1,column:67764},end:{line:1,column:67801}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"571":{loc:{start:{line:1,column:68046},end:{line:1,column:68107}},type:"binary-expr",locations:[{start:{line:1,column:68046},end:{line:1,column:68047}},{start:{line:1,column:68049},end:{line:1,column:68107}}],line:1},"572":{loc:{start:{line:1,column:68140},end:{line:1,column:68370}},type:"if",locations:[{start:{line:1,column:68140},end:{line:1,column:68370}},{start:{line:1,column:68224},end:{line:1,column:68370}}],line:1},"573":{loc:{start:{line:1,column:68224},end:{line:1,column:68370}},type:"if",locations:[{start:{line:1,column:68224},end:{line:1,column:68370}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"574":{loc:{start:{line:1,column:68454},end:{line:1,column:68501}},type:"cond-expr",locations:[{start:{line:1,column:68467},end:{line:1,column:68471}},{start:{line:1,column:68472},end:{line:1,column:68501}}],line:1},"575":{loc:{start:{line:1,column:68664},end:{line:1,column:68690}},type:"cond-expr",locations:[{start:{line:1,column:68666},end:{line:1,column:68685}},{start:{line:1,column:68686},end:{line:1,column:68690}}],line:1},"576":{loc:{start:{line:1,column:68971},end:{line:1,column:68994}},type:"cond-expr",locations:[{start:{line:1,column:68973},end:{line:1,column:68989}},{start:{line:1,column:68990},end:{line:1,column:68994}}],line:1},"577":{loc:{start:{line:1,column:69149},end:{line:1,column:69471}},type:"binary-expr",locations:[{start:{line:1,column:69149},end:{line:1,column:69152}},{start:{line:1,column:69155},end:{line:1,column:69470}}],line:1},"578":{loc:{start:{line:1,column:69501},end:{line:1,column:69525}},type:"binary-expr",locations:[{start:{line:1,column:69501},end:{line:1,column:69503}},{start:{line:1,column:69505},end:{line:1,column:69525}}],line:1},"579":{loc:{start:{line:1,column:69708},end:{line:1,column:69776}},type:"binary-expr",locations:[{start:{line:1,column:69708},end:{line:1,column:69709}},{start:{line:1,column:69711},end:{line:1,column:69776}}],line:1},"580":{loc:{start:{line:1,column:69777},end:{line:1,column:69874}},type:"binary-expr",locations:[{start:{line:1,column:69777},end:{line:1,column:69810}},{start:{line:1,column:69813},end:{line:1,column:69873}}],line:1},"581":{loc:{start:{line:1,column:69884},end:{line:1,column:69930}},type:"if",locations:[{start:{line:1,column:69884},end:{line:1,column:69930}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"582":{loc:{start:{line:1,column:69930},end:{line:1,column:70633}},type:"if",locations:[{start:{line:1,column:69930},end:{line:1,column:70633}},{start:{line:1,column:70127},end:{line:1,column:70633}}],line:1},"583":{loc:{start:{line:1,column:70043},end:{line:1,column:70122}},type:"cond-expr",locations:[{start:{line:1,column:70049},end:{line:1,column:70108}},{start:{line:1,column:70109},end:{line:1,column:70122}}],line:1},"584":{loc:{start:{line:1,column:70193},end:{line:1,column:70217}},type:"binary-expr",locations:[{start:{line:1,column:70193},end:{line:1,column:70209}},{start:{line:1,column:70211},end:{line:1,column:70217}}],line:1},"585":{loc:{start:{line:1,column:70294},end:{line:1,column:70551}},type:"if",locations:[{start:{line:1,column:70294},end:{line:1,column:70551}},{start:{line:1,column:70524},end:{line:1,column:70551}}],line:1},"586":{loc:{start:{line:1,column:70561},end:{line:1,column:70631}},type:"cond-expr",locations:[{start:{line:1,column:70606},end:{line:1,column:70619}},{start:{line:1,column:70620},end:{line:1,column:70631}}],line:1},"587":{loc:{start:{line:1,column:71057},end:{line:1,column:71093}},type:"binary-expr",locations:[{start:{line:1,column:71057},end:{line:1,column:71076}},{start:{line:1,column:71078},end:{line:1,column:71093}}],line:1},"588":{loc:{start:{line:1,column:71101},end:{line:1,column:71160}},type:"binary-expr",locations:[{start:{line:1,column:71101},end:{line:1,column:71129}},{start:{line:1,column:71131},end:{line:1,column:71160}}],line:1},"589":{loc:{start:{line:1,column:71201},end:{line:1,column:71205}},type:"binary-expr",locations:[{start:{line:1,column:71201},end:{line:1,column:71202}},{start:{line:1,column:71204},end:{line:1,column:71205}}],line:1},"590":{loc:{start:{line:1,column:71397},end:{line:1,column:71401}},type:"binary-expr",locations:[{start:{line:1,column:71397},end:{line:1,column:71398}},{start:{line:1,column:71400},end:{line:1,column:71401}}],line:1},"591":{loc:{start:{line:1,column:71757},end:{line:1,column:71769}},type:"binary-expr",locations:[{start:{line:1,column:71757},end:{line:1,column:71758}},{start:{line:1,column:71761},end:{line:1,column:71768}}],line:1},"592":{loc:{start:{line:1,column:71771},end:{line:1,column:71775}},type:"binary-expr",locations:[{start:{line:1,column:71771},end:{line:1,column:71772}},{start:{line:1,column:71774},end:{line:1,column:71775}}],line:1},"593":{loc:{start:{line:1,column:71909},end:{line:1,column:71932}},type:"binary-expr",locations:[{start:{line:1,column:71909},end:{line:1,column:71928}},{start:{line:1,column:71930},end:{line:1,column:71932}}],line:1},"594":{loc:{start:{line:1,column:71962},end:{line:1,column:72014}},type:"binary-expr",locations:[{start:{line:1,column:71962},end:{line:1,column:72003}},{start:{line:1,column:72005},end:{line:1,column:72014}}],line:1},"595":{loc:{start:{line:1,column:72074},end:{line:1,column:72116}},type:"binary-expr",locations:[{start:{line:1,column:72074},end:{line:1,column:72104}},{start:{line:1,column:72106},end:{line:1,column:72116}}],line:1},"596":{loc:{start:{line:1,column:72325},end:{line:1,column:72373}},type:"cond-expr",locations:[{start:{line:1,column:72336},end:{line:1,column:72371}},{start:{line:1,column:72372},end:{line:1,column:72373}}],line:1},"597":{loc:{start:{line:1,column:72376},end:{line:1,column:72380}},type:"binary-expr",locations:[{start:{line:1,column:72376},end:{line:1,column:72377}},{start:{line:1,column:72379},end:{line:1,column:72380}}],line:1},"598":{loc:{start:{line:1,column:72388},end:{line:1,column:72436}},type:"cond-expr",locations:[{start:{line:1,column:72403},end:{line:1,column:72434}},{start:{line:1,column:72435},end:{line:1,column:72436}}],line:1},"599":{loc:{start:{line:1,column:72501},end:{line:1,column:72618}},type:"cond-expr",locations:[{start:{line:1,column:72507},end:{line:1,column:72599}},{start:{line:1,column:72601},end:{line:1,column:72618}}],line:1},"600":{loc:{start:{line:1,column:72501},end:{line:1,column:72505}},type:"binary-expr",locations:[{start:{line:1,column:72501},end:{line:1,column:72502}},{start:{line:1,column:72504},end:{line:1,column:72505}}],line:1},"601":{loc:{start:{line:1,column:73045},end:{line:1,column:73049}},type:"binary-expr",locations:[{start:{line:1,column:73045},end:{line:1,column:73046}},{start:{line:1,column:73048},end:{line:1,column:73049}}],line:1},"602":{loc:{start:{line:1,column:73223},end:{line:1,column:73349}},type:"cond-expr",locations:[{start:{line:1,column:73270},end:{line:1,column:73288}},{start:{line:1,column:73289},end:{line:1,column:73349}}],line:1},"603":{loc:{start:{line:1,column:73289},end:{line:1,column:73349}},type:"binary-expr",locations:[{start:{line:1,column:73289},end:{line:1,column:73329}},{start:{line:1,column:73331},end:{line:1,column:73349}}],line:1},"604":{loc:{start:{line:1,column:73432},end:{line:1,column:73514}},type:"binary-expr",locations:[{start:{line:1,column:73432},end:{line:1,column:73451}},{start:{line:1,column:73453},end:{line:1,column:73514}}],line:1},"605":{loc:{start:{line:1,column:73540},end:{line:1,column:74079}},type:"cond-expr",locations:[{start:{line:1,column:73556},end:{line:1,column:73581}},{start:{line:1,column:73582},end:{line:1,column:74079}}],line:1},"606":{loc:{start:{line:1,column:73582},end:{line:1,column:74079}},type:"cond-expr",locations:[{start:{line:1,column:73597},end:{line:1,column:73621}},{start:{line:1,column:73622},end:{line:1,column:74079}}],line:1},"607":{loc:{start:{line:1,column:73622},end:{line:1,column:74079}},type:"cond-expr",locations:[{start:{line:1,column:73638},end:{line:1,column:73750}},{start:{line:1,column:73751},end:{line:1,column:74079}}],line:1},"608":{loc:{start:{line:1,column:73638},end:{line:1,column:73750}},type:"binary-expr",locations:[{start:{line:1,column:73638},end:{line:1,column:73670}},{start:{line:1,column:73673},end:{line:1,column:73700}},{start:{line:1,column:73702},end:{line:1,column:73749}}],line:1},"609":{loc:{start:{line:1,column:73751},end:{line:1,column:74079}},type:"cond-expr",locations:[{start:{line:1,column:73768},end:{line:1,column:73907}},{start:{line:1,column:73909},end:{line:1,column:74079}}],line:1},"610":{loc:{start:{line:1,column:73793},end:{line:1,column:73907}},type:"binary-expr",locations:[{start:{line:1,column:73793},end:{line:1,column:73828}},{start:{line:1,column:73830},end:{line:1,column:73858}},{start:{line:1,column:73860},end:{line:1,column:73907}}],line:1},"611":{loc:{start:{line:1,column:73909},end:{line:1,column:74079}},type:"cond-expr",locations:[{start:{line:1,column:73932},end:{line:1,column:73954}},{start:{line:1,column:73955},end:{line:1,column:74079}}],line:1},"612":{loc:{start:{line:1,column:73909},end:{line:1,column:73931}},type:"binary-expr",locations:[{start:{line:1,column:73909},end:{line:1,column:73923}},{start:{line:1,column:73925},end:{line:1,column:73931}}],line:1},"613":{loc:{start:{line:1,column:73955},end:{line:1,column:74079}},type:"cond-expr",locations:[{start:{line:1,column:73971},end:{line:1,column:73996}},{start:{line:1,column:73997},end:{line:1,column:74079}}],line:1},"614":{loc:{start:{line:1,column:73997},end:{line:1,column:74079}},type:"binary-expr",locations:[{start:{line:1,column:73997},end:{line:1,column:74011}},{start:{line:1,column:74014},end:{line:1,column:74078}}],line:1},"615":{loc:{start:{line:1,column:74141},end:{line:1,column:74389}},type:"if",locations:[{start:{line:1,column:74141},end:{line:1,column:74389}},{start:{line:1,column:74295},end:{line:1,column:74389}}],line:1},"616":{loc:{start:{line:1,column:74144},end:{line:1,column:74184}},type:"binary-expr",locations:[{start:{line:1,column:74144},end:{line:1,column:74181}},{start:{line:1,column:74183},end:{line:1,column:74184}}],line:1},"617":{loc:{start:{line:1,column:74407},end:{line:1,column:74411}},type:"default-arg",locations:[{start:{line:1,column:74409},end:{line:1,column:74411}}],line:1},"618":{loc:{start:{line:1,column:74413},end:{line:1,column:74767}},type:"if",locations:[{start:{line:1,column:74413},end:{line:1,column:74767}},{start:{line:1,column:74657},end:{line:1,column:74767}}],line:1},"619":{loc:{start:{line:1,column:74512},end:{line:1,column:74651}},type:"cond-expr",locations:[{start:{line:1,column:74518},end:{line:1,column:74544}},{start:{line:1,column:74545},end:{line:1,column:74651}}],line:1},"620":{loc:{start:{line:1,column:74545},end:{line:1,column:74651}},type:"binary-expr",locations:[{start:{line:1,column:74545},end:{line:1,column:74582}},{start:{line:1,column:74584},end:{line:1,column:74589}},{start:{line:1,column:74592},end:{line:1,column:74650}}],line:1},"621":{loc:{start:{line:1,column:74657},end:{line:1,column:74767}},type:"binary-expr",locations:[{start:{line:1,column:74657},end:{line:1,column:74702}},{start:{line:1,column:74705},end:{line:1,column:74766}}],line:1},"622":{loc:{start:{line:1,column:74705},end:{line:1,column:74734}},type:"binary-expr",locations:[{start:{line:1,column:74705},end:{line:1,column:74706}},{start:{line:1,column:74708},end:{line:1,column:74734}}],line:1},"623":{loc:{start:{line:1,column:74968},end:{line:1,column:74986}},type:"binary-expr",locations:[{start:{line:1,column:74968},end:{line:1,column:74969}},{start:{line:1,column:74971},end:{line:1,column:74986}}],line:1},"624":{loc:{start:{line:1,column:75200},end:{line:1,column:75301}},type:"cond-expr",locations:[{start:{line:1,column:75247},end:{line:1,column:75284}},{start:{line:1,column:75285},end:{line:1,column:75301}}],line:1},"625":{loc:{start:{line:1,column:75357},end:{line:1,column:75369}},type:"binary-expr",locations:[{start:{line:1,column:75357},end:{line:1,column:75358}},{start:{line:1,column:75361},end:{line:1,column:75368}}],line:1},"626":{loc:{start:{line:1,column:75371},end:{line:1,column:75375}},type:"binary-expr",locations:[{start:{line:1,column:75371},end:{line:1,column:75372}},{start:{line:1,column:75374},end:{line:1,column:75375}}],line:1},"627":{loc:{start:{line:1,column:75500},end:{line:1,column:75563}},type:"binary-expr",locations:[{start:{line:1,column:75500},end:{line:1,column:75514}},{start:{line:1,column:75516},end:{line:1,column:75530}},{start:{line:1,column:75532},end:{line:1,column:75547}},{start:{line:1,column:75549},end:{line:1,column:75563}}],line:1},"628":{loc:{start:{line:1,column:75570},end:{line:1,column:75684}},type:"cond-expr",locations:[{start:{line:1,column:75601},end:{line:1,column:75602}},{start:{line:1,column:75603},end:{line:1,column:75684}}],line:1},"629":{loc:{start:{line:1,column:75570},end:{line:1,column:75600}},type:"binary-expr",locations:[{start:{line:1,column:75570},end:{line:1,column:75584}},{start:{line:1,column:75586},end:{line:1,column:75600}}],line:1},"630":{loc:{start:{line:1,column:75603},end:{line:1,column:75684}},type:"cond-expr",locations:[{start:{line:1,column:75681},end:{line:1,column:75682}},{start:{line:1,column:75683},end:{line:1,column:75684}}],line:1},"631":{loc:{start:{line:1,column:75604},end:{line:1,column:75679}},type:"cond-expr",locations:[{start:{line:1,column:75619},end:{line:1,column:75676}},{start:{line:1,column:75677},end:{line:1,column:75679}}],line:1},"632":{loc:{start:{line:1,column:75619},end:{line:1,column:75676}},type:"binary-expr",locations:[{start:{line:1,column:75619},end:{line:1,column:75638}},{start:{line:1,column:75640},end:{line:1,column:75676}}],line:1},"633":{loc:{start:{line:1,column:75963},end:{line:1,column:75986}},type:"binary-expr",locations:[{start:{line:1,column:75963},end:{line:1,column:75982}},{start:{line:1,column:75984},end:{line:1,column:75986}}],line:1},"634":{loc:{start:{line:1,column:76024},end:{line:1,column:76066}},type:"binary-expr",locations:[{start:{line:1,column:76024},end:{line:1,column:76054}},{start:{line:1,column:76056},end:{line:1,column:76066}}],line:1},"635":{loc:{start:{line:1,column:76372},end:{line:1,column:76414}},type:"binary-expr",locations:[{start:{line:1,column:76372},end:{line:1,column:76404}},{start:{line:1,column:76406},end:{line:1,column:76414}}],line:1},"636":{loc:{start:{line:1,column:76422},end:{line:1,column:76453}},type:"binary-expr",locations:[{start:{line:1,column:76422},end:{line:1,column:76449}},{start:{line:1,column:76451},end:{line:1,column:76453}}],line:1},"637":{loc:{start:{line:1,column:76950},end:{line:1,column:77642}},type:"if",locations:[{start:{line:1,column:76950},end:{line:1,column:77642}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"638":{loc:{start:{line:1,column:76953},end:{line:1,column:76971}},type:"binary-expr",locations:[{start:{line:1,column:76953},end:{line:1,column:76961}},{start:{line:1,column:76963},end:{line:1,column:76971}}],line:1},"639":{loc:{start:{line:1,column:76973},end:{line:1,column:77641}},type:"if",locations:[{start:{line:1,column:76973},end:{line:1,column:77641}},{start:{line:1,column:77114},end:{line:1,column:77641}}],line:1},"640":{loc:{start:{line:1,column:77017},end:{line:1,column:77090}},type:"binary-expr",locations:[{start:{line:1,column:77017},end:{line:1,column:77031}},{start:{line:1,column:77033},end:{line:1,column:77052}},{start:{line:1,column:77054},end:{line:1,column:77090}}],line:1},"641":{loc:{start:{line:1,column:77114},end:{line:1,column:77641}},type:"if",locations:[{start:{line:1,column:77114},end:{line:1,column:77641}},{start:{line:1,column:77232},end:{line:1,column:77641}}],line:1},"642":{loc:{start:{line:1,column:77232},end:{line:1,column:77641}},type:"if",locations:[{start:{line:1,column:77232},end:{line:1,column:77641}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"643":{loc:{start:{line:1,column:77478},end:{line:1,column:77545}},type:"binary-expr",locations:[{start:{line:1,column:77478},end:{line:1,column:77497}},{start:{line:1,column:77499},end:{line:1,column:77531}},{start:{line:1,column:77533},end:{line:1,column:77545}}],line:1},"644":{loc:{start:{line:1,column:77642},end:{line:1,column:77669}},type:"binary-expr",locations:[{start:{line:1,column:77642},end:{line:1,column:77647}},{start:{line:1,column:77649},end:{line:1,column:77669}}],line:1},"645":{loc:{start:{line:1,column:77942},end:{line:1,column:78100}},type:"binary-expr",locations:[{start:{line:1,column:77942},end:{line:1,column:77991}},{start:{line:1,column:77993},end:{line:1,column:78100}}],line:1},"646":{loc:{start:{line:1,column:78335},end:{line:1,column:78357}},type:"cond-expr",locations:[{start:{line:1,column:78351},end:{line:1,column:78352}},{start:{line:1,column:78353},end:{line:1,column:78357}}],line:1},"647":{loc:{start:{line:1,column:78358},end:{line:1,column:78467}},type:"if",locations:[{start:{line:1,column:78358},end:{line:1,column:78467}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"648":{loc:{start:{line:1,column:78428},end:{line:1,column:78466}},type:"binary-expr",locations:[{start:{line:1,column:78428},end:{line:1,column:78453}},{start:{line:1,column:78456},end:{line:1,column:78465}}],line:1},"649":{loc:{start:{line:1,column:78533},end:{line:1,column:78572}},type:"binary-expr",locations:[{start:{line:1,column:78533},end:{line:1,column:78546}},{start:{line:1,column:78548},end:{line:1,column:78572}}],line:1},"650":{loc:{start:{line:1,column:79141},end:{line:1,column:79145}},type:"default-arg",locations:[{start:{line:1,column:79143},end:{line:1,column:79145}}],line:1},"651":{loc:{start:{line:1,column:79235},end:{line:1,column:79267}},type:"cond-expr",locations:[{start:{line:1,column:79237},end:{line:1,column:79265}},{start:{line:1,column:79266},end:{line:1,column:79267}}],line:1},"652":{loc:{start:{line:1,column:79275},end:{line:1,column:79462}},type:"switch",locations:[{start:{line:1,column:79326},end:{line:1,column:79389}},{start:{line:1,column:79389},end:{line:1,column:79444}},{start:{line:1,column:79444},end:{line:1,column:79461}}],line:1},"653":{loc:{start:{line:1,column:79282},end:{line:1,column:79324}},type:"binary-expr",locations:[{start:{line:1,column:79282},end:{line:1,column:79283}},{start:{line:1,column:79285},end:{line:1,column:79324}}],line:1},"654":{loc:{start:{line:1,column:79454},end:{line:1,column:79461}},type:"binary-expr",locations:[{start:{line:1,column:79454},end:{line:1,column:79455}},{start:{line:1,column:79457},end:{line:1,column:79461}}],line:1},"655":{loc:{start:{line:1,column:79462},end:{line:1,column:79500}},type:"binary-expr",locations:[{start:{line:1,column:79462},end:{line:1,column:79470}},{start:{line:1,column:79473},end:{line:1,column:79499}}],line:1},"656":{loc:{start:{line:1,column:79517},end:{line:1,column:79560}},type:"cond-expr",locations:[{start:{line:1,column:79519},end:{line:1,column:79529}},{start:{line:1,column:79530},end:{line:1,column:79560}}],line:1},"657":{loc:{start:{line:1,column:79575},end:{line:1,column:79621}},type:"binary-expr",locations:[{start:{line:1,column:79576},end:{line:1,column:79597}},{start:{line:1,column:79599},end:{line:1,column:79612}},{start:{line:1,column:79616},end:{line:1,column:79620}}],line:1},"658":{loc:{start:{line:1,column:79665},end:{line:1,column:79672}},type:"binary-expr",locations:[{start:{line:1,column:79665},end:{line:1,column:79666}},{start:{line:1,column:79668},end:{line:1,column:79672}}],line:1},"659":{loc:{start:{line:1,column:79709},end:{line:1,column:79734}},type:"default-arg",locations:[{start:{line:1,column:79711},end:{line:1,column:79734}}],line:1},"660":{loc:{start:{line:1,column:79742},end:{line:1,column:79766}},type:"cond-expr",locations:[{start:{line:1,column:79748},end:{line:1,column:79749}},{start:{line:1,column:79750},end:{line:1,column:79766}}],line:1},"661":{loc:{start:{line:1,column:79874},end:{line:1,column:79899}},type:"default-arg",locations:[{start:{line:1,column:79876},end:{line:1,column:79899}}],line:1},"662":{loc:{start:{line:1,column:80161},end:{line:1,column:80257}},type:"if",locations:[{start:{line:1,column:80161},end:{line:1,column:80257}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"663":{loc:{start:{line:1,column:80164},end:{line:1,column:80215}},type:"cond-expr",locations:[{start:{line:1,column:80171},end:{line:1,column:80181}},{start:{line:1,column:80182},end:{line:1,column:80215}}],line:1},"664":{loc:{start:{line:1,column:80182},end:{line:1,column:80215}},type:"cond-expr",locations:[{start:{line:1,column:80189},end:{line:1,column:80199}},{start:{line:1,column:80200},end:{line:1,column:80215}}],line:1},"665":{loc:{start:{line:1,column:80379},end:{line:1,column:80396}},type:"binary-expr",locations:[{start:{line:1,column:80379},end:{line:1,column:80386}},{start:{line:1,column:80389},end:{line:1,column:80395}}],line:1},"666":{loc:{start:{line:1,column:80434},end:{line:1,column:80478}},type:"if",locations:[{start:{line:1,column:80434},end:{line:1,column:80478}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"667":{loc:{start:{line:1,column:80488},end:{line:1,column:80558}},type:"cond-expr",locations:[{start:{line:1,column:80491},end:{line:1,column:80525}},{start:{line:1,column:80527},end:{line:1,column:80558}}],line:1},"668":{loc:{start:{line:1,column:81010},end:{line:1,column:81014}},type:"binary-expr",locations:[{start:{line:1,column:81010},end:{line:1,column:81011}},{start:{line:1,column:81013},end:{line:1,column:81014}}],line:1},"669":{loc:{start:{line:1,column:81141},end:{line:1,column:81175}},type:"if",locations:[{start:{line:1,column:81141},end:{line:1,column:81175}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"670":{loc:{start:{line:1,column:81356},end:{line:1,column:81390}},type:"binary-expr",locations:[{start:{line:1,column:81356},end:{line:1,column:81370}},{start:{line:1,column:81372},end:{line:1,column:81390}}],line:1},"671":{loc:{start:{line:1,column:81618},end:{line:1,column:81622}},type:"binary-expr",locations:[{start:{line:1,column:81618},end:{line:1,column:81619}},{start:{line:1,column:81621},end:{line:1,column:81622}}],line:1},"672":{loc:{start:{line:1,column:81855},end:{line:1,column:81933}},type:"cond-expr",locations:[{start:{line:1,column:81876},end:{line:1,column:81909}},{start:{line:1,column:81910},end:{line:1,column:81933}}],line:1},"673":{loc:{start:{line:1,column:83469},end:{line:1,column:83588}},type:"binary-expr",locations:[{start:{line:1,column:83469},end:{line:1,column:83476}},{start:{line:1,column:83478},end:{line:1,column:83488}},{start:{line:1,column:83490},end:{line:1,column:83588}}],line:1},"674":{loc:{start:{line:1,column:83493},end:{line:1,column:83587}},type:"binary-expr",locations:[{start:{line:1,column:83493},end:{line:1,column:83524}},{start:{line:1,column:83526},end:{line:1,column:83587}}],line:1},"675":{loc:{start:{line:1,column:83619},end:{line:1,column:83709}},type:"binary-expr",locations:[{start:{line:1,column:83619},end:{line:1,column:83647}},{start:{line:1,column:83649},end:{line:1,column:83669}},{start:{line:1,column:83671},end:{line:1,column:83709}}],line:1},"676":{loc:{start:{line:1,column:83793},end:{line:1,column:83993}},type:"cond-expr",locations:[{start:{line:1,column:83802},end:{line:1,column:83870}},{start:{line:1,column:83873},end:{line:1,column:83992}}],line:1},"677":{loc:{start:{line:1,column:83873},end:{line:1,column:83955}},type:"cond-expr",locations:[{start:{line:1,column:83879},end:{line:1,column:83906}},{start:{line:1,column:83907},end:{line:1,column:83955}}],line:1},"678":{loc:{start:{line:1,column:83932},end:{line:1,column:83954}},type:"cond-expr",locations:[{start:{line:1,column:83949},end:{line:1,column:83950}},{start:{line:1,column:83951},end:{line:1,column:83954}}],line:1},"679":{loc:{start:{line:1,column:84035},end:{line:1,column:84151}},type:"if",locations:[{start:{line:1,column:84035},end:{line:1,column:84151}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"680":{loc:{start:{line:1,column:84038},end:{line:1,column:84141}},type:"binary-expr",locations:[{start:{line:1,column:84038},end:{line:1,column:84046}},{start:{line:1,column:84048},end:{line:1,column:84068}},{start:{line:1,column:84071},end:{line:1,column:84076}},{start:{line:1,column:84078},end:{line:1,column:84079}},{start:{line:1,column:84081},end:{line:1,column:84082}},{start:{line:1,column:84084},end:{line:1,column:84085}},{start:{line:1,column:84087},end:{line:1,column:84088}},{start:{line:1,column:84090},end:{line:1,column:84118}},{start:{line:1,column:84120},end:{line:1,column:84140}}],line:1},"681":{loc:{start:{line:1,column:84450},end:{line:1,column:84503}},type:"cond-expr",locations:[{start:{line:1,column:84459},end:{line:1,column:84480}},{start:{line:1,column:84481},end:{line:1,column:84503}}],line:1},"682":{loc:{start:{line:1,column:84553},end:{line:1,column:84614}},type:"binary-expr",locations:[{start:{line:1,column:84553},end:{line:1,column:84577}},{start:{line:1,column:84579},end:{line:1,column:84614}}],line:1},"683":{loc:{start:{line:1,column:84624},end:{line:1,column:84651}},type:"binary-expr",locations:[{start:{line:1,column:84624},end:{line:1,column:84638}},{start:{line:1,column:84640},end:{line:1,column:84651}}],line:1},"684":{loc:{start:{line:1,column:84652},end:{line:1,column:84769}},type:"binary-expr",locations:[{start:{line:1,column:84653},end:{line:1,column:84683}},{start:{line:1,column:84685},end:{line:1,column:84728}},{start:{line:1,column:84731},end:{line:1,column:84769}}],line:1},"685":{loc:{start:{line:1,column:84806},end:{line:1,column:85103}},type:"cond-expr",locations:[{start:{line:1,column:84843},end:{line:1,column:84847}},{start:{line:1,column:84848},end:{line:1,column:85103}}],line:1},"686":{loc:{start:{line:1,column:84806},end:{line:1,column:84842}},type:"binary-expr",locations:[{start:{line:1,column:84806},end:{line:1,column:84814}},{start:{line:1,column:84816},end:{line:1,column:84842}}],line:1},"687":{loc:{start:{line:1,column:84848},end:{line:1,column:85103}},type:"cond-expr",locations:[{start:{line:1,column:84854},end:{line:1,column:84855}},{start:{line:1,column:84856},end:{line:1,column:85103}}],line:1},"688":{loc:{start:{line:1,column:84896},end:{line:1,column:84953}},type:"cond-expr",locations:[{start:{line:1,column:84924},end:{line:1,column:84942}},{start:{line:1,column:84943},end:{line:1,column:84953}}],line:1},"689":{loc:{start:{line:1,column:85223},end:{line:1,column:85334}},type:"cond-expr",locations:[{start:{line:1,column:85255},end:{line:1,column:85329}},{start:{line:1,column:85330},end:{line:1,column:85334}}],line:1},"690":{loc:{start:{line:1,column:85223},end:{line:1,column:85254}},type:"binary-expr",locations:[{start:{line:1,column:85223},end:{line:1,column:85231}},{start:{line:1,column:85233},end:{line:1,column:85254}}],line:1},"691":{loc:{start:{line:1,column:85255},end:{line:1,column:85329}},type:"binary-expr",locations:[{start:{line:1,column:85255},end:{line:1,column:85325}},{start:{line:1,column:85327},end:{line:1,column:85329}}],line:1},"692":{loc:{start:{line:1,column:85375},end:{line:1,column:85379}},type:"binary-expr",locations:[{start:{line:1,column:85375},end:{line:1,column:85376}},{start:{line:1,column:85378},end:{line:1,column:85379}}],line:1},"693":{loc:{start:{line:1,column:85525},end:{line:1,column:85621}},type:"binary-expr",locations:[{start:{line:1,column:85525},end:{line:1,column:85528}},{start:{line:1,column:85530},end:{line:1,column:85621}}],line:1},"694":{loc:{start:{line:1,column:85622},end:{line:1,column:85679}},type:"binary-expr",locations:[{start:{line:1,column:85622},end:{line:1,column:85625}},{start:{line:1,column:85627},end:{line:1,column:85679}}],line:1},"695":{loc:{start:{line:1,column:86471},end:{line:1,column:86500}},type:"binary-expr",locations:[{start:{line:1,column:86471},end:{line:1,column:86485}},{start:{line:1,column:86487},end:{line:1,column:86500}}],line:1},"696":{loc:{start:{line:1,column:86852},end:{line:1,column:86917}},type:"binary-expr",locations:[{start:{line:1,column:86852},end:{line:1,column:86902}},{start:{line:1,column:86904},end:{line:1,column:86917}}],line:1},"697":{loc:{start:{line:1,column:86950},end:{line:1,column:86981}},type:"cond-expr",locations:[{start:{line:1,column:86967},end:{line:1,column:86968}},{start:{line:1,column:86969},end:{line:1,column:86981}}],line:1},"698":{loc:{start:{line:1,column:87157},end:{line:1,column:87692}},type:"binary-expr",locations:[{start:{line:1,column:87157},end:{line:1,column:87168}},{start:{line:1,column:87170},end:{line:1,column:87192}},{start:{line:1,column:87194},end:{line:1,column:87692}}],line:1},"699":{loc:{start:{line:1,column:87267},end:{line:1,column:87377}},type:"cond-expr",locations:[{start:{line:1,column:87269},end:{line:1,column:87321}},{start:{line:1,column:87322},end:{line:1,column:87377}}],line:1},"700":{loc:{start:{line:1,column:87380},end:{line:1,column:87599}},type:"cond-expr",locations:[{start:{line:1,column:87419},end:{line:1,column:87526}},{start:{line:1,column:87527},end:{line:1,column:87599}}],line:1},"701":{loc:{start:{line:1,column:87380},end:{line:1,column:87418}},type:"binary-expr",locations:[{start:{line:1,column:87380},end:{line:1,column:87381}},{start:{line:1,column:87383},end:{line:1,column:87418}}],line:1},"702":{loc:{start:{line:1,column:87600},end:{line:1,column:87690}},type:"binary-expr",locations:[{start:{line:1,column:87600},end:{line:1,column:87618}},{start:{line:1,column:87621},end:{line:1,column:87689}}],line:1},"703":{loc:{start:{line:1,column:87715},end:{line:1,column:87833}},type:"cond-expr",locations:[{start:{line:1,column:87748},end:{line:1,column:87776}},{start:{line:1,column:87777},end:{line:1,column:87833}}],line:1},"704":{loc:{start:{line:1,column:87777},end:{line:1,column:87833}},type:"cond-expr",locations:[{start:{line:1,column:87816},end:{line:1,column:87824}},{start:{line:1,column:87825},end:{line:1,column:87833}}],line:1},"705":{loc:{start:{line:1,column:87777},end:{line:1,column:87815}},type:"binary-expr",locations:[{start:{line:1,column:87777},end:{line:1,column:87811}},{start:{line:1,column:87813},end:{line:1,column:87815}}],line:1},"706":{loc:{start:{line:1,column:87868},end:{line:1,column:87885}},type:"cond-expr",locations:[{start:{line:1,column:87870},end:{line:1,column:87882}},{start:{line:1,column:87883},end:{line:1,column:87885}}],line:1},"707":{loc:{start:{line:1,column:87948},end:{line:1,column:87991}},type:"binary-expr",locations:[{start:{line:1,column:87948},end:{line:1,column:87957}},{start:{line:1,column:87959},end:{line:1,column:87971}},{start:{line:1,column:87973},end:{line:1,column:87991}}],line:1},"708":{loc:{start:{line:1,column:88032},end:{line:1,column:88036}},type:"binary-expr",locations:[{start:{line:1,column:88032},end:{line:1,column:88033}},{start:{line:1,column:88035},end:{line:1,column:88036}}],line:1},"709":{loc:{start:{line:1,column:88161},end:{line:1,column:88215}},type:"if",locations:[{start:{line:1,column:88161},end:{line:1,column:88215}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"710":{loc:{start:{line:1,column:88164},end:{line:1,column:88179}},type:"binary-expr",locations:[{start:{line:1,column:88164},end:{line:1,column:88167}},{start:{line:1,column:88169},end:{line:1,column:88179}}],line:1},"711":{loc:{start:{line:1,column:88191},end:{line:1,column:88214}},type:"binary-expr",locations:[{start:{line:1,column:88191},end:{line:1,column:88201}},{start:{line:1,column:88204},end:{line:1,column:88213}}],line:1},"712":{loc:{start:{line:1,column:88491},end:{line:1,column:88541}},type:"binary-expr",locations:[{start:{line:1,column:88491},end:{line:1,column:88498}},{start:{line:1,column:88500},end:{line:1,column:88514}},{start:{line:1,column:88516},end:{line:1,column:88529}},{start:{line:1,column:88531},end:{line:1,column:88541}}],line:1},"713":{loc:{start:{line:1,column:89009},end:{line:1,column:89070}},type:"binary-expr",locations:[{start:{line:1,column:89009},end:{line:1,column:89020}},{start:{line:1,column:89022},end:{line:1,column:89034}},{start:{line:1,column:89037},end:{line:1,column:89069}}],line:1},"714":{loc:{start:{line:1,column:89077},end:{line:1,column:89091}},type:"binary-expr",locations:[{start:{line:1,column:89077},end:{line:1,column:89088}},{start:{line:1,column:89090},end:{line:1,column:89091}}],line:1},"715":{loc:{start:{line:1,column:89092},end:{line:1,column:89201}},type:"binary-expr",locations:[{start:{line:1,column:89092},end:{line:1,column:89116}},{start:{line:1,column:89118},end:{line:1,column:89136}},{start:{line:1,column:89139},end:{line:1,column:89200}}],line:1},"716":{loc:{start:{line:1,column:89208},end:{line:1,column:89228}},type:"binary-expr",locations:[{start:{line:1,column:89208},end:{line:1,column:89225}},{start:{line:1,column:89227},end:{line:1,column:89228}}],line:1},"717":{loc:{start:{line:1,column:89229},end:{line:1,column:89354}},type:"binary-expr",locations:[{start:{line:1,column:89230},end:{line:1,column:89244}},{start:{line:1,column:89246},end:{line:1,column:89262}},{start:{line:1,column:89264},end:{line:1,column:89282}},{start:{line:1,column:89284},end:{line:1,column:89299}},{start:{line:1,column:89301},end:{line:1,column:89320}},{start:{line:1,column:89323},end:{line:1,column:89354}}],line:1},"718":{loc:{start:{line:1,column:89355},end:{line:1,column:89443}},type:"binary-expr",locations:[{start:{line:1,column:89356},end:{line:1,column:89366}},{start:{line:1,column:89368},end:{line:1,column:89383}},{start:{line:1,column:89386},end:{line:1,column:89443}}],line:1},"719":{loc:{start:{line:1,column:89414},end:{line:1,column:89441}},type:"binary-expr",locations:[{start:{line:1,column:89414},end:{line:1,column:89424}},{start:{line:1,column:89426},end:{line:1,column:89441}}],line:1},"720":{loc:{start:{line:1,column:89532},end:{line:1,column:89562}},type:"if",locations:[{start:{line:1,column:89532},end:{line:1,column:89562}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"721":{loc:{start:{line:1,column:89568},end:{line:1,column:89647}},type:"cond-expr",locations:[{start:{line:1,column:89603},end:{line:1,column:89637}},{start:{line:1,column:89638},end:{line:1,column:89647}}],line:1},"722":{loc:{start:{line:1,column:89568},end:{line:1,column:89602}},type:"binary-expr",locations:[{start:{line:1,column:89568},end:{line:1,column:89582}},{start:{line:1,column:89584},end:{line:1,column:89602}}],line:1},"723":{loc:{start:{line:1,column:89666},end:{line:1,column:89818}},type:"cond-expr",locations:[{start:{line:1,column:89675},end:{line:1,column:89684}},{start:{line:1,column:89686},end:{line:1,column:89817}}],line:1},"724":{loc:{start:{line:1,column:89794},end:{line:1,column:89807}},type:"binary-expr",locations:[{start:{line:1,column:89794},end:{line:1,column:89804}},{start:{line:1,column:89806},end:{line:1,column:89807}}],line:1},"725":{loc:{start:{line:1,column:89821},end:{line:1,column:89939}},type:"if",locations:[{start:{line:1,column:89821},end:{line:1,column:89939}},{start:{line:1,column:89931},end:{line:1,column:89939}}],line:1},"726":{loc:{start:{line:1,column:89824},end:{line:1,column:89860}},type:"binary-expr",locations:[{start:{line:1,column:89824},end:{line:1,column:89839}},{start:{line:1,column:89841},end:{line:1,column:89860}}],line:1},"727":{loc:{start:{line:1,column:89982},end:{line:1,column:89986}},type:"binary-expr",locations:[{start:{line:1,column:89982},end:{line:1,column:89983}},{start:{line:1,column:89985},end:{line:1,column:89986}}],line:1},"728":{loc:{start:{line:1,column:90430},end:{line:1,column:90542}},type:"binary-expr",locations:[{start:{line:1,column:90430},end:{line:1,column:90481}},{start:{line:1,column:90483},end:{line:1,column:90542}}],line:1},"729":{loc:{start:{line:1,column:90722},end:{line:1,column:91187}},type:"cond-expr",locations:[{start:{line:1,column:90739},end:{line:1,column:90903}},{start:{line:1,column:90905},end:{line:1,column:91187}}],line:1},"730":{loc:{start:{line:1,column:90857},end:{line:1,column:90903}},type:"cond-expr",locations:[{start:{line:1,column:90873},end:{line:1,column:90901}},{start:{line:1,column:90902},end:{line:1,column:90903}}],line:1},"731":{loc:{start:{line:1,column:90905},end:{line:1,column:91187}},type:"cond-expr",locations:[{start:{line:1,column:90921},end:{line:1,column:91020}},{start:{line:1,column:91022},end:{line:1,column:91187}}],line:1},"732":{loc:{start:{line:1,column:91022},end:{line:1,column:91187}},type:"binary-expr",locations:[{start:{line:1,column:91022},end:{line:1,column:91036}},{start:{line:1,column:91038},end:{line:1,column:91074}},{start:{line:1,column:91077},end:{line:1,column:91186}}],line:1},"733":{loc:{start:{line:1,column:91257},end:{line:1,column:91315}},type:"if",locations:[{start:{line:1,column:91257},end:{line:1,column:91315}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"734":{loc:{start:{line:1,column:91260},end:{line:1,column:91307}},type:"binary-expr",locations:[{start:{line:1,column:91260},end:{line:1,column:91278}},{start:{line:1,column:91280},end:{line:1,column:91307}}],line:1},"735":{loc:{start:{line:1,column:91342},end:{line:1,column:91749}},type:"cond-expr",locations:[{start:{line:1,column:91353},end:{line:1,column:91552}},{start:{line:1,column:91553},end:{line:1,column:91749}}],line:1},"736":{loc:{start:{line:1,column:91353},end:{line:1,column:91552}},type:"cond-expr",locations:[{start:{line:1,column:91400},end:{line:1,column:91447}},{start:{line:1,column:91448},end:{line:1,column:91552}}],line:1},"737":{loc:{start:{line:1,column:91448},end:{line:1,column:91552}},type:"binary-expr",locations:[{start:{line:1,column:91448},end:{line:1,column:91498}},{start:{line:1,column:91500},end:{line:1,column:91552}}],line:1},"738":{loc:{start:{line:1,column:91553},end:{line:1,column:91749}},type:"cond-expr",locations:[{start:{line:1,column:91604},end:{line:1,column:91650}},{start:{line:1,column:91651},end:{line:1,column:91749}}],line:1},"739":{loc:{start:{line:1,column:91553},end:{line:1,column:91603}},type:"binary-expr",locations:[{start:{line:1,column:91553},end:{line:1,column:91561}},{start:{line:1,column:91563},end:{line:1,column:91603}}],line:1},"740":{loc:{start:{line:1,column:91651},end:{line:1,column:91749}},type:"binary-expr",locations:[{start:{line:1,column:91651},end:{line:1,column:91702}},{start:{line:1,column:91704},end:{line:1,column:91749}}],line:1},"741":{loc:{start:{line:1,column:91910},end:{line:1,column:91968}},type:"binary-expr",locations:[{start:{line:1,column:91910},end:{line:1,column:91942}},{start:{line:1,column:91944},end:{line:1,column:91968}}],line:1},"742":{loc:{start:{line:1,column:92028},end:{line:1,column:92089}},type:"cond-expr",locations:[{start:{line:1,column:92057},end:{line:1,column:92084}},{start:{line:1,column:92085},end:{line:1,column:92089}}],line:1},"743":{loc:{start:{line:1,column:92614},end:{line:1,column:92644}},type:"if",locations:[{start:{line:1,column:92614},end:{line:1,column:92644}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"744":{loc:{start:{line:1,column:92671},end:{line:1,column:92707}},type:"binary-expr",locations:[{start:{line:1,column:92671},end:{line:1,column:92684}},{start:{line:1,column:92686},end:{line:1,column:92707}}],line:1},"745":{loc:{start:{line:1,column:92839},end:{line:1,column:92888}},type:"binary-expr",locations:[{start:{line:1,column:92839},end:{line:1,column:92847}},{start:{line:1,column:92850},end:{line:1,column:92887}}],line:1},"746":{loc:{start:{line:1,column:93192},end:{line:1,column:93212}},type:"cond-expr",locations:[{start:{line:1,column:93201},end:{line:1,column:93210}},{start:{line:1,column:93211},end:{line:1,column:93212}}],line:1},"747":{loc:{start:{line:1,column:93889},end:{line:1,column:93944}},type:"cond-expr",locations:[{start:{line:1,column:93905},end:{line:1,column:93941}},{start:{line:1,column:93942},end:{line:1,column:93944}}],line:1},"748":{loc:{start:{line:1,column:93966},end:{line:1,column:93971}},type:"binary-expr",locations:[{start:{line:1,column:93966},end:{line:1,column:93967}},{start:{line:1,column:93969},end:{line:1,column:93971}}],line:1},"749":{loc:{start:{line:1,column:93973},end:{line:1,column:93993}},type:"cond-expr",locations:[{start:{line:1,column:93984},end:{line:1,column:93988}},{start:{line:1,column:93989},end:{line:1,column:93993}}],line:1},"750":{loc:{start:{line:1,column:93999},end:{line:1,column:94064}},type:"cond-expr",locations:[{start:{line:1,column:94021},end:{line:1,column:94061}},{start:{line:1,column:94062},end:{line:1,column:94064}}],line:1},"751":{loc:{start:{line:1,column:94065},end:{line:1,column:94094}},type:"cond-expr",locations:[{start:{line:1,column:94086},end:{line:1,column:94091}},{start:{line:1,column:94092},end:{line:1,column:94094}}],line:1},"752":{loc:{start:{line:1,column:94095},end:{line:1,column:94143}},type:"cond-expr",locations:[{start:{line:1,column:94120},end:{line:1,column:94140}},{start:{line:1,column:94141},end:{line:1,column:94143}}],line:1},"753":{loc:{start:{line:1,column:94144},end:{line:1,column:94192}},type:"cond-expr",locations:[{start:{line:1,column:94169},end:{line:1,column:94189}},{start:{line:1,column:94190},end:{line:1,column:94192}}],line:1},"754":{loc:{start:{line:1,column:94323},end:{line:1,column:94327}},type:"binary-expr",locations:[{start:{line:1,column:94323},end:{line:1,column:94324}},{start:{line:1,column:94326},end:{line:1,column:94327}}],line:1},"755":{loc:{start:{line:1,column:94472},end:{line:1,column:94515}},type:"binary-expr",locations:[{start:{line:1,column:94472},end:{line:1,column:94486}},{start:{line:1,column:94488},end:{line:1,column:94515}}],line:1},"756":{loc:{start:{line:1,column:94640},end:{line:1,column:94696}},type:"cond-expr",locations:[{start:{line:1,column:94673},end:{line:1,column:94693}},{start:{line:1,column:94694},end:{line:1,column:94696}}],line:1},"757":{loc:{start:{line:1,column:94697},end:{line:1,column:94760}},type:"cond-expr",locations:[{start:{line:1,column:94737},end:{line:1,column:94757}},{start:{line:1,column:94758},end:{line:1,column:94760}}],line:1}},s:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"116":0,"117":0,"118":0,"119":0,"120":0,"121":0,"122":0,"123":0,"124":0,"125":0,"126":0,"127":0,"128":0,"129":0,"130":0,"131":0,"132":0,"133":0,"134":0,"135":0,"136":0,"137":0,"138":0,"139":0,"140":0,"141":0,"142":0,"143":0,"144":0,"145":0,"146":0,"147":0,"148":0,"149":0,"150":0,"151":0,"152":0,"153":0,"154":0,"155":0,"156":0,"157":0,"158":0,"159":0,"160":0,"161":0,"162":0,"163":0,"164":0,"165":0,"166":0,"167":0,"168":0,"169":0,"170":0,"171":0,"172":0,"173":0,"174":0,"175":0,"176":0,"177":0,"178":0,"179":0,"180":0,"181":0,"182":0,"183":0,"184":0,"185":0,"186":0,"187":0,"188":0,"189":0,"190":0,"191":0,"192":0,"193":0,"194":0,"195":0,"196":0,"197":0,"198":0,"199":0,"200":0,"201":0,"202":0,"203":0,"204":0,"205":0,"206":0,"207":0,"208":0,"209":0,"210":0,"211":0,"212":0,"213":0,"214":0,"215":0,"216":0,"217":0,"218":0,"219":0,"220":0,"221":0,"222":0,"223":0,"224":0,"225":0,"226":0,"227":0,"228":0,"229":0,"230":0,"231":0,"232":0,"233":0,"234":0,"235":0,"236":0,"237":0,"238":0,"239":0,"240":0,"241":0,"242":0,"243":0,"244":0,"245":0,"246":0,"247":0,"248":0,"249":0,"250":0,"251":0,"252":0,"253":0,"254":0,"255":0,"256":0,"257":0,"258":0,"259":0,"260":0,"261":0,"262":0,"263":0,"264":0,"265":0,"266":0,"267":0,"268":0,"269":0,"270":0,"271":0,"272":0,"273":0,"274":0,"275":0,"276":0,"277":0,"278":0,"279":0,"280":0,"281":0,"282":0,"283":0,"284":0,"285":0,"286":0,"287":0,"288":0,"289":0,"290":0,"291":0,"292":0,"293":0,"294":0,"295":0,"296":0,"297":0,"298":0,"299":0,"300":0,"301":0,"302":0,"303":0,"304":0,"305":0,"306":0,"307":0,"308":0,"309":0,"310":0,"311":0,"312":0,"313":0,"314":0,"315":0,"316":0,"317":0,"318":0,"319":0,"320":0,"321":0,"322":0,"323":0,"324":0,"325":0,"326":0,"327":0,"328":0,"329":0,"330":0,"331":0,"332":0,"333":0,"334":0,"335":0,"336":0,"337":0,"338":0,"339":0,"340":0,"341":0,"342":0,"343":0,"344":0,"345":0,"346":0,"347":0,"348":0,"349":0,"350":0,"351":0,"352":0,"353":0,"354":0,"355":0,"356":0,"357":0,"358":0,"359":0,"360":0,"361":0,"362":0,"363":0,"364":0,"365":0,"366":0,"367":0,"368":0,"369":0,"370":0,"371":0,"372":0,"373":0,"374":0,"375":0,"376":0,"377":0,"378":0,"379":0,"380":0,"381":0,"382":0,"383":0,"384":0,"385":0,"386":0,"387":0,"388":0,"389":0,"390":0,"391":0,"392":0,"393":0,"394":0,"395":0,"396":0,"397":0,"398":0,"399":0,"400":0,"401":0,"402":0,"403":0,"404":0,"405":0,"406":0,"407":0,"408":0,"409":0,"410":0,"411":0,"412":0,"413":0,"414":0,"415":0,"416":0,"417":0,"418":0,"419":0,"420":0,"421":0,"422":0,"423":0,"424":0,"425":0,"426":0,"427":0,"428":0,"429":0,"430":0,"431":0,"432":0,"433":0,"434":0,"435":0,"436":0,"437":0,"438":0,"439":0,"440":0,"441":0,"442":0,"443":0,"444":0,"445":0,"446":0,"447":0,"448":0,"449":0,"450":0,"451":0,"452":0,"453":0,"454":0,"455":0,"456":0,"457":0,"458":0,"459":0,"460":0,"461":0,"462":0,"463":0,"464":0,"465":0,"466":0,"467":0,"468":0,"469":0,"470":0,"471":0,"472":0,"473":0,"474":0,"475":0,"476":0,"477":0,"478":0,"479":0,"480":0,"481":0,"482":0,"483":0,"484":0,"485":0,"486":0,"487":0,"488":0,"489":0,"490":0,"491":0,"492":0,"493":0,"494":0,"495":0,"496":0,"497":0,"498":0,"499":0,"500":0,"501":0,"502":0,"503":0,"504":0,"505":0,"506":0,"507":0,"508":0,"509":0,"510":0,"511":0,"512":0,"513":0,"514":0,"515":0,"516":0,"517":0,"518":0,"519":0,"520":0,"521":0,"522":0,"523":0,"524":0,"525":0,"526":0,"527":0,"528":0,"529":0,"530":0,"531":0,"532":0,"533":0,"534":0,"535":0,"536":0,"537":0,"538":0,"539":0,"540":0,"541":0,"542":0,"543":0,"544":0,"545":0,"546":0,"547":0,"548":0,"549":0,"550":0,"551":0,"552":0,"553":0,"554":0,"555":0,"556":0,"557":0,"558":0,"559":0,"560":0,"561":0,"562":0,"563":0,"564":0,"565":0,"566":0,"567":0,"568":0,"569":0,"570":0,"571":0,"572":0,"573":0,"574":0,"575":0,"576":0,"577":0,"578":0,"579":0,"580":0,"581":0,"582":0,"583":0,"584":0,"585":0,"586":0,"587":0,"588":0,"589":0,"590":0,"591":0,"592":0,"593":0,"594":0,"595":0,"596":0,"597":0,"598":0,"599":0,"600":0,"601":0,"602":0,"603":0,"604":0,"605":0,"606":0,"607":0,"608":0,"609":0,"610":0,"611":0,"612":0,"613":0,"614":0,"615":0,"616":0,"617":0,"618":0,"619":0,"620":0,"621":0,"622":0,"623":0,"624":0,"625":0,"626":0,"627":0,"628":0,"629":0,"630":0,"631":0,"632":0,"633":0,"634":0,"635":0,"636":0,"637":0,"638":0,"639":0,"640":0,"641":0,"642":0,"643":0,"644":0,"645":0,"646":0,"647":0,"648":0,"649":0,"650":0,"651":0,"652":0,"653":0,"654":0,"655":0,"656":0,"657":0,"658":0,"659":0,"660":0,"661":0,"662":0,"663":0,"664":0,"665":0,"666":0,"667":0,"668":0,"669":0,"670":0,"671":0,"672":0,"673":0,"674":0,"675":0,"676":0,"677":0,"678":0,"679":0,"680":0,"681":0,"682":0,"683":0,"684":0,"685":0,"686":0,"687":0,"688":0,"689":0,"690":0,"691":0,"692":0,"693":0,"694":0,"695":0,"696":0,"697":0,"698":0,"699":0,"700":0,"701":0,"702":0,"703":0,"704":0,"705":0,"706":0,"707":0,"708":0,"709":0,"710":0,"711":0,"712":0,"713":0,"714":0,"715":0,"716":0,"717":0,"718":0,"719":0,"720":0,"721":0,"722":0,"723":0,"724":0,"725":0,"726":0,"727":0,"728":0,"729":0,"730":0,"731":0,"732":0,"733":0,"734":0,"735":0,"736":0,"737":0,"738":0,"739":0,"740":0,"741":0,"742":0,"743":0,"744":0,"745":0,"746":0,"747":0,"748":0,"749":0,"750":0,"751":0,"752":0,"753":0,"754":0,"755":0,"756":0,"757":0,"758":0,"759":0,"760":0,"761":0,"762":0,"763":0,"764":0,"765":0,"766":0,"767":0,"768":0,"769":0,"770":0,"771":0,"772":0,"773":0,"774":0,"775":0,"776":0,"777":0,"778":0,"779":0,"780":0,"781":0,"782":0,"783":0,"784":0,"785":0,"786":0,"787":0,"788":0,"789":0,"790":0,"791":0,"792":0,"793":0,"794":0,"795":0,"796":0,"797":0,"798":0,"799":0,"800":0,"801":0,"802":0,"803":0,"804":0,"805":0,"806":0,"807":0,"808":0,"809":0,"810":0,"811":0,"812":0,"813":0,"814":0,"815":0,"816":0,"817":0,"818":0,"819":0,"820":0,"821":0,"822":0,"823":0,"824":0,"825":0,"826":0,"827":0,"828":0,"829":0,"830":0,"831":0,"832":0,"833":0,"834":0,"835":0,"836":0,"837":0,"838":0,"839":0,"840":0,"841":0,"842":0,"843":0,"844":0,"845":0,"846":0,"847":0,"848":0,"849":0,"850":0,"851":0,"852":0,"853":0,"854":0,"855":0,"856":0,"857":0,"858":0,"859":0,"860":0,"861":0,"862":0,"863":0,"864":0,"865":0,"866":0,"867":0,"868":0,"869":0,"870":0,"871":0,"872":0,"873":0,"874":0,"875":0,"876":0,"877":0,"878":0,"879":0,"880":0,"881":0,"882":0,"883":0,"884":0,"885":0,"886":0,"887":0,"888":0,"889":0,"890":0,"891":0,"892":0,"893":0,"894":0,"895":0,"896":0,"897":0,"898":0,"899":0,"900":0,"901":0,"902":0,"903":0,"904":0,"905":0,"906":0,"907":0,"908":0,"909":0,"910":0,"911":0,"912":0,"913":0,"914":0,"915":0,"916":0,"917":0,"918":0,"919":0,"920":0,"921":0,"922":0,"923":0,"924":0,"925":0,"926":0,"927":0,"928":0,"929":0,"930":0,"931":0,"932":0,"933":0,"934":0,"935":0,"936":0,"937":0,"938":0,"939":0,"940":0,"941":0,"942":0,"943":0,"944":0,"945":0,"946":0,"947":0,"948":0,"949":0,"950":0,"951":0,"952":0,"953":0,"954":0,"955":0,"956":0,"957":0,"958":0,"959":0,"960":0,"961":0,"962":0,"963":0,"964":0,"965":0,"966":0,"967":0,"968":0,"969":0,"970":0,"971":0,"972":0,"973":0,"974":0,"975":0,"976":0,"977":0,"978":0,"979":0,"980":0,"981":0,"982":0,"983":0,"984":0,"985":0,"986":0,"987":0,"988":0,"989":0,"990":0,"991":0,"992":0,"993":0,"994":0,"995":0,"996":0,"997":0,"998":0,"999":0,"1000":0,"1001":0,"1002":0,"1003":0,"1004":0,"1005":0,"1006":0,"1007":0,"1008":0,"1009":0,"1010":0,"1011":0,"1012":0,"1013":0,"1014":0,"1015":0,"1016":0,"1017":0,"1018":0,"1019":0,"1020":0,"1021":0,"1022":0,"1023":0,"1024":0,"1025":0,"1026":0,"1027":0,"1028":0,"1029":0,"1030":0,"1031":0,"1032":0,"1033":0,"1034":0,"1035":0,"1036":0,"1037":0,"1038":0,"1039":0,"1040":0,"1041":0,"1042":0,"1043":0,"1044":0,"1045":0,"1046":0,"1047":0,"1048":0,"1049":0,"1050":0,"1051":0,"1052":0,"1053":0,"1054":0,"1055":0,"1056":0,"1057":0,"1058":0,"1059":0,"1060":0,"1061":0,"1062":0,"1063":0,"1064":0,"1065":0,"1066":0,"1067":0,"1068":0,"1069":0,"1070":0,"1071":0,"1072":0,"1073":0,"1074":0,"1075":0,"1076":0,"1077":0,"1078":0,"1079":0,"1080":0,"1081":0,"1082":0,"1083":0,"1084":0,"1085":0,"1086":0,"1087":0,"1088":0,"1089":0,"1090":0,"1091":0,"1092":0,"1093":0,"1094":0,"1095":0,"1096":0,"1097":0,"1098":0,"1099":0,"1100":0,"1101":0,"1102":0,"1103":0,"1104":0,"1105":0,"1106":0,"1107":0,"1108":0,"1109":0,"1110":0,"1111":0,"1112":0,"1113":0,"1114":0,"1115":0,"1116":0,"1117":0,"1118":0,"1119":0,"1120":0,"1121":0,"1122":0,"1123":0,"1124":0,"1125":0,"1126":0,"1127":0,"1128":0,"1129":0,"1130":0,"1131":0,"1132":0,"1133":0,"1134":0,"1135":0,"1136":0,"1137":0,"1138":0,"1139":0,"1140":0,"1141":0,"1142":0,"1143":0,"1144":0,"1145":0,"1146":0,"1147":0,"1148":0,"1149":0,"1150":0,"1151":0,"1152":0,"1153":0,"1154":0,"1155":0,"1156":0,"1157":0,"1158":0,"1159":0,"1160":0,"1161":0,"1162":0,"1163":0,"1164":0,"1165":0,"1166":0,"1167":0,"1168":0,"1169":0,"1170":0,"1171":0,"1172":0,"1173":0,"1174":0,"1175":0,"1176":0,"1177":0,"1178":0,"1179":0,"1180":0,"1181":0,"1182":0,"1183":0,"1184":0,"1185":0,"1186":0,"1187":0,"1188":0,"1189":0,"1190":0,"1191":0,"1192":0,"1193":0,"1194":0,"1195":0,"1196":0,"1197":0,"1198":0,"1199":0,"1200":0,"1201":0,"1202":0,"1203":0,"1204":0,"1205":0,"1206":0,"1207":0,"1208":0,"1209":0,"1210":0,"1211":0,"1212":0,"1213":0,"1214":0,"1215":0,"1216":0,"1217":0,"1218":0,"1219":0,"1220":0,"1221":0,"1222":0,"1223":0,"1224":0,"1225":0,"1226":0,"1227":0,"1228":0,"1229":0,"1230":0,"1231":0,"1232":0,"1233":0,"1234":0,"1235":0,"1236":0,"1237":0,"1238":0,"1239":0,"1240":0,"1241":0,"1242":0,"1243":0,"1244":0,"1245":0,"1246":0,"1247":0,"1248":0,"1249":0,"1250":0,"1251":0,"1252":0,"1253":0,"1254":0,"1255":0,"1256":0,"1257":0,"1258":0,"1259":0,"1260":0,"1261":0,"1262":0,"1263":0,"1264":0,"1265":0,"1266":0,"1267":0,"1268":0,"1269":0,"1270":0,"1271":0,"1272":0,"1273":0,"1274":0,"1275":0,"1276":0,"1277":0,"1278":0,"1279":0,"1280":0,"1281":0,"1282":0,"1283":0,"1284":0,"1285":0,"1286":0,"1287":0,"1288":0,"1289":0,"1290":0,"1291":0,"1292":0,"1293":0,"1294":0,"1295":0,"1296":0,"1297":0,"1298":0,"1299":0,"1300":0,"1301":0,"1302":0,"1303":0,"1304":0,"1305":0,"1306":0,"1307":0,"1308":0,"1309":0,"1310":0,"1311":0,"1312":0,"1313":0,"1314":0,"1315":0,"1316":0,"1317":0,"1318":0,"1319":0,"1320":0,"1321":0,"1322":0,"1323":0,"1324":0,"1325":0,"1326":0,"1327":0,"1328":0,"1329":0,"1330":0,"1331":0,"1332":0,"1333":0,"1334":0,"1335":0,"1336":0,"1337":0,"1338":0,"1339":0,"1340":0,"1341":0,"1342":0,"1343":0,"1344":0,"1345":0,"1346":0,"1347":0,"1348":0,"1349":0,"1350":0,"1351":0,"1352":0,"1353":0,"1354":0,"1355":0,"1356":0,"1357":0,"1358":0,"1359":0,"1360":0,"1361":0,"1362":0,"1363":0,"1364":0,"1365":0,"1366":0,"1367":0,"1368":0,"1369":0,"1370":0,"1371":0,"1372":0,"1373":0,"1374":0,"1375":0,"1376":0,"1377":0,"1378":0,"1379":0,"1380":0,"1381":0,"1382":0,"1383":0,"1384":0,"1385":0,"1386":0,"1387":0,"1388":0,"1389":0,"1390":0,"1391":0,"1392":0,"1393":0,"1394":0,"1395":0,"1396":0,"1397":0,"1398":0,"1399":0,"1400":0,"1401":0,"1402":0,"1403":0,"1404":0,"1405":0,"1406":0,"1407":0,"1408":0,"1409":0,"1410":0,"1411":0,"1412":0,"1413":0,"1414":0,"1415":0,"1416":0,"1417":0,"1418":0,"1419":0,"1420":0,"1421":0,"1422":0,"1423":0,"1424":0,"1425":0,"1426":0,"1427":0,"1428":0,"1429":0,"1430":0,"1431":0,"1432":0,"1433":0,"1434":0,"1435":0,"1436":0,"1437":0,"1438":0,"1439":0,"1440":0,"1441":0,"1442":0,"1443":0,"1444":0,"1445":0,"1446":0,"1447":0,"1448":0,"1449":0,"1450":0,"1451":0,"1452":0,"1453":0,"1454":0,"1455":0,"1456":0,"1457":0,"1458":0,"1459":0,"1460":0,"1461":0,"1462":0,"1463":0,"1464":0,"1465":0,"1466":0,"1467":0,"1468":0,"1469":0,"1470":0,"1471":0,"1472":0,"1473":0,"1474":0,"1475":0,"1476":0,"1477":0,"1478":0,"1479":0,"1480":0,"1481":0,"1482":0,"1483":0,"1484":0,"1485":0,"1486":0,"1487":0,"1488":0,"1489":0,"1490":0,"1491":0,"1492":0,"1493":0,"1494":0,"1495":0,"1496":0,"1497":0,"1498":0,"1499":0,"1500":0,"1501":0,"1502":0,"1503":0,"1504":0,"1505":0,"1506":0,"1507":0,"1508":0,"1509":0,"1510":0,"1511":0,"1512":0,"1513":0,"1514":0,"1515":0,"1516":0,"1517":0,"1518":0,"1519":0,"1520":0,"1521":0,"1522":0,"1523":0,"1524":0,"1525":0,"1526":0,"1527":0,"1528":0,"1529":0,"1530":0,"1531":0,"1532":0,"1533":0,"1534":0,"1535":0,"1536":0,"1537":0,"1538":0,"1539":0,"1540":0,"1541":0,"1542":0,"1543":0,"1544":0,"1545":0,"1546":0,"1547":0,"1548":0,"1549":0,"1550":0,"1551":0,"1552":0,"1553":0,"1554":0,"1555":0,"1556":0,"1557":0,"1558":0,"1559":0,"1560":0,"1561":0,"1562":0,"1563":0,"1564":0,"1565":0,"1566":0,"1567":0,"1568":0,"1569":0,"1570":0,"1571":0,"1572":0,"1573":0,"1574":0,"1575":0,"1576":0,"1577":0,"1578":0,"1579":0,"1580":0,"1581":0,"1582":0,"1583":0,"1584":0,"1585":0,"1586":0,"1587":0,"1588":0,"1589":0,"1590":0,"1591":0,"1592":0,"1593":0,"1594":0,"1595":0,"1596":0,"1597":0,"1598":0,"1599":0,"1600":0,"1601":0,"1602":0,"1603":0,"1604":0,"1605":0,"1606":0,"1607":0,"1608":0,"1609":0,"1610":0,"1611":0,"1612":0,"1613":0,"1614":0,"1615":0,"1616":0,"1617":0,"1618":0,"1619":0,"1620":0,"1621":0,"1622":0,"1623":0,"1624":0,"1625":0,"1626":0,"1627":0,"1628":0,"1629":0,"1630":0,"1631":0,"1632":0,"1633":0,"1634":0,"1635":0,"1636":0,"1637":0,"1638":0,"1639":0,"1640":0,"1641":0,"1642":0,"1643":0,"1644":0,"1645":0,"1646":0,"1647":0,"1648":0,"1649":0,"1650":0,"1651":0,"1652":0,"1653":0,"1654":0,"1655":0,"1656":0,"1657":0,"1658":0,"1659":0,"1660":0,"1661":0,"1662":0,"1663":0,"1664":0,"1665":0,"1666":0,"1667":0,"1668":0,"1669":0,"1670":0,"1671":0,"1672":0,"1673":0,"1674":0,"1675":0,"1676":0,"1677":0,"1678":0,"1679":0,"1680":0,"1681":0,"1682":0,"1683":0,"1684":0,"1685":0,"1686":0,"1687":0,"1688":0,"1689":0,"1690":0,"1691":0,"1692":0,"1693":0,"1694":0,"1695":0,"1696":0,"1697":0,"1698":0,"1699":0,"1700":0,"1701":0,"1702":0,"1703":0,"1704":0,"1705":0,"1706":0,"1707":0,"1708":0,"1709":0,"1710":0,"1711":0,"1712":0,"1713":0,"1714":0,"1715":0,"1716":0,"1717":0,"1718":0,"1719":0,"1720":0,"1721":0,"1722":0,"1723":0,"1724":0,"1725":0,"1726":0,"1727":0,"1728":0,"1729":0,"1730":0,"1731":0,"1732":0,"1733":0,"1734":0,"1735":0,"1736":0,"1737":0,"1738":0,"1739":0,"1740":0,"1741":0,"1742":0,"1743":0,"1744":0,"1745":0,"1746":0,"1747":0,"1748":0,"1749":0,"1750":0,"1751":0,"1752":0,"1753":0,"1754":0,"1755":0,"1756":0,"1757":0,"1758":0,"1759":0,"1760":0,"1761":0,"1762":0,"1763":0,"1764":0,"1765":0,"1766":0,"1767":0,"1768":0,"1769":0,"1770":0,"1771":0,"1772":0,"1773":0,"1774":0,"1775":0,"1776":0,"1777":0,"1778":0,"1779":0,"1780":0,"1781":0,"1782":0,"1783":0,"1784":0,"1785":0,"1786":0,"1787":0,"1788":0,"1789":0,"1790":0,"1791":0,"1792":0,"1793":0,"1794":0,"1795":0,"1796":0,"1797":0,"1798":0,"1799":0,"1800":0,"1801":0,"1802":0,"1803":0,"1804":0,"1805":0,"1806":0,"1807":0,"1808":0,"1809":0,"1810":0,"1811":0,"1812":0,"1813":0,"1814":0,"1815":0,"1816":0,"1817":0,"1818":0,"1819":0,"1820":0,"1821":0,"1822":0,"1823":0,"1824":0,"1825":0,"1826":0,"1827":0,"1828":0,"1829":0,"1830":0,"1831":0,"1832":0,"1833":0,"1834":0,"1835":0,"1836":0,"1837":0,"1838":0,"1839":0,"1840":0,"1841":0,"1842":0,"1843":0,"1844":0,"1845":0,"1846":0,"1847":0,"1848":0,"1849":0,"1850":0,"1851":0,"1852":0,"1853":0,"1854":0,"1855":0,"1856":0,"1857":0,"1858":0,"1859":0,"1860":0,"1861":0,"1862":0,"1863":0,"1864":0,"1865":0,"1866":0,"1867":0,"1868":0,"1869":0,"1870":0,"1871":0,"1872":0,"1873":0,"1874":0,"1875":0,"1876":0,"1877":0,"1878":0,"1879":0,"1880":0,"1881":0,"1882":0,"1883":0,"1884":0,"1885":0,"1886":0,"1887":0,"1888":0,"1889":0,"1890":0,"1891":0,"1892":0,"1893":0,"1894":0,"1895":0,"1896":0,"1897":0,"1898":0,"1899":0,"1900":0,"1901":0,"1902":0,"1903":0,"1904":0,"1905":0,"1906":0,"1907":0,"1908":0,"1909":0,"1910":0,"1911":0,"1912":0,"1913":0,"1914":0,"1915":0,"1916":0,"1917":0,"1918":0,"1919":0,"1920":0,"1921":0,"1922":0,"1923":0,"1924":0,"1925":0,"1926":0,"1927":0,"1928":0,"1929":0,"1930":0,"1931":0,"1932":0,"1933":0,"1934":0,"1935":0,"1936":0,"1937":0,"1938":0,"1939":0,"1940":0,"1941":0,"1942":0,"1943":0,"1944":0,"1945":0,"1946":0,"1947":0,"1948":0,"1949":0,"1950":0,"1951":0,"1952":0,"1953":0,"1954":0,"1955":0,"1956":0,"1957":0,"1958":0,"1959":0,"1960":0,"1961":0,"1962":0,"1963":0,"1964":0,"1965":0,"1966":0,"1967":0,"1968":0,"1969":0,"1970":0,"1971":0,"1972":0,"1973":0,"1974":0,"1975":0,"1976":0,"1977":0,"1978":0,"1979":0,"1980":0,"1981":0,"1982":0,"1983":0,"1984":0,"1985":0,"1986":0,"1987":0,"1988":0,"1989":0,"1990":0,"1991":0,"1992":0,"1993":0,"1994":0,"1995":0,"1996":0,"1997":0,"1998":0,"1999":0,"2000":0,"2001":0,"2002":0,"2003":0,"2004":0,"2005":0,"2006":0,"2007":0,"2008":0,"2009":0,"2010":0,"2011":0,"2012":0,"2013":0,"2014":0,"2015":0,"2016":0,"2017":0,"2018":0,"2019":0,"2020":0,"2021":0,"2022":0,"2023":0,"2024":0,"2025":0,"2026":0,"2027":0,"2028":0,"2029":0,"2030":0,"2031":0,"2032":0,"2033":0,"2034":0,"2035":0,"2036":0,"2037":0,"2038":0,"2039":0,"2040":0,"2041":0,"2042":0,"2043":0,"2044":0,"2045":0,"2046":0,"2047":0,"2048":0,"2049":0,"2050":0,"2051":0,"2052":0,"2053":0,"2054":0,"2055":0,"2056":0,"2057":0,"2058":0,"2059":0,"2060":0,"2061":0,"2062":0,"2063":0,"2064":0,"2065":0,"2066":0,"2067":0,"2068":0,"2069":0,"2070":0,"2071":0,"2072":0,"2073":0,"2074":0,"2075":0,"2076":0,"2077":0,"2078":0,"2079":0,"2080":0,"2081":0,"2082":0,"2083":0,"2084":0,"2085":0,"2086":0,"2087":0,"2088":0,"2089":0,"2090":0,"2091":0,"2092":0,"2093":0,"2094":0,"2095":0,"2096":0,"2097":0,"2098":0,"2099":0,"2100":0,"2101":0,"2102":0,"2103":0,"2104":0,"2105":0,"2106":0,"2107":0,"2108":0,"2109":0,"2110":0,"2111":0,"2112":0,"2113":0,"2114":0,"2115":0,"2116":0,"2117":0,"2118":0,"2119":0,"2120":0,"2121":0,"2122":0,"2123":0,"2124":0,"2125":0,"2126":0,"2127":0,"2128":0,"2129":0},f:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"116":0,"117":0,"118":0,"119":0,"120":0,"121":0,"122":0,"123":0,"124":0,"125":0,"126":0,"127":0,"128":0,"129":0,"130":0,"131":0,"132":0,"133":0,"134":0,"135":0,"136":0,"137":0,"138":0,"139":0,"140":0,"141":0,"142":0,"143":0,"144":0,"145":0,"146":0,"147":0,"148":0,"149":0,"150":0,"151":0,"152":0,"153":0,"154":0,"155":0,"156":0,"157":0,"158":0,"159":0,"160":0,"161":0,"162":0,"163":0,"164":0,"165":0,"166":0,"167":0,"168":0,"169":0,"170":0,"171":0,"172":0,"173":0,"174":0,"175":0,"176":0,"177":0,"178":0,"179":0,"180":0,"181":0,"182":0,"183":0,"184":0,"185":0,"186":0,"187":0,"188":0,"189":0,"190":0,"191":0,"192":0,"193":0,"194":0,"195":0,"196":0,"197":0,"198":0,"199":0,"200":0,"201":0,"202":0,"203":0,"204":0,"205":0,"206":0,"207":0,"208":0,"209":0,"210":0,"211":0,"212":0,"213":0,"214":0,"215":0,"216":0,"217":0,"218":0,"219":0,"220":0,"221":0,"222":0,"223":0,"224":0,"225":0,"226":0,"227":0,"228":0,"229":0,"230":0,"231":0,"232":0,"233":0,"234":0,"235":0,"236":0,"237":0,"238":0,"239":0,"240":0,"241":0,"242":0,"243":0,"244":0,"245":0,"246":0,"247":0,"248":0,"249":0,"250":0,"251":0,"252":0,"253":0,"254":0,"255":0,"256":0,"257":0,"258":0,"259":0,"260":0,"261":0,"262":0,"263":0,"264":0,"265":0,"266":0,"267":0,"268":0,"269":0,"270":0,"271":0,"272":0,"273":0,"274":0,"275":0,"276":0,"277":0,"278":0,"279":0,"280":0,"281":0,"282":0,"283":0,"284":0,"285":0,"286":0,"287":0,"288":0,"289":0,"290":0,"291":0,"292":0,"293":0,"294":0,"295":0,"296":0,"297":0,"298":0,"299":0,"300":0,"301":0,"302":0,"303":0,"304":0,"305":0,"306":0,"307":0,"308":0,"309":0,"310":0,"311":0,"312":0,"313":0,"314":0,"315":0,"316":0,"317":0,"318":0,"319":0,"320":0,"321":0,"322":0,"323":0,"324":0,"325":0,"326":0,"327":0,"328":0,"329":0,"330":0,"331":0,"332":0,"333":0,"334":0,"335":0,"336":0,"337":0,"338":0,"339":0,"340":0,"341":0,"342":0,"343":0,"344":0,"345":0,"346":0,"347":0,"348":0,"349":0,"350":0,"351":0,"352":0,"353":0,"354":0,"355":0,"356":0,"357":0,"358":0,"359":0,"360":0,"361":0,"362":0,"363":0,"364":0,"365":0,"366":0,"367":0,"368":0,"369":0,"370":0,"371":0,"372":0,"373":0,"374":0,"375":0,"376":0,"377":0,"378":0,"379":0,"380":0,"381":0,"382":0,"383":0,"384":0,"385":0,"386":0,"387":0,"388":0,"389":0,"390":0,"391":0,"392":0,"393":0,"394":0,"395":0,"396":0,"397":0,"398":0,"399":0,"400":0,"401":0,"402":0,"403":0,"404":0,"405":0,"406":0,"407":0,"408":0,"409":0,"410":0,"411":0,"412":0,"413":0,"414":0,"415":0,"416":0,"417":0,"418":0,"419":0,"420":0,"421":0,"422":0,"423":0,"424":0,"425":0,"426":0,"427":0,"428":0,"429":0,"430":0,"431":0,"432":0,"433":0,"434":0,"435":0,"436":0,"437":0,"438":0,"439":0,"440":0,"441":0,"442":0,"443":0,"444":0,"445":0,"446":0,"447":0,"448":0,"449":0,"450":0,"451":0,"452":0,"453":0,"454":0,"455":0,"456":0,"457":0,"458":0,"459":0,"460":0,"461":0,"462":0,"463":0,"464":0,"465":0,"466":0,"467":0,"468":0,"469":0,"470":0,"471":0,"472":0,"473":0,"474":0,"475":0,"476":0,"477":0,"478":0,"479":0,"480":0,"481":0,"482":0,"483":0,"484":0,"485":0,"486":0,"487":0,"488":0,"489":0,"490":0,"491":0,"492":0,"493":0,"494":0,"495":0,"496":0,"497":0,"498":0,"499":0,"500":0,"501":0,"502":0,"503":0,"504":0,"505":0,"506":0,"507":0,"508":0,"509":0,"510":0,"511":0,"512":0,"513":0,"514":0,"515":0,"516":0,"517":0,"518":0,"519":0,"520":0,"521":0,"522":0,"523":0,"524":0,"525":0,"526":0,"527":0,"528":0,"529":0,"530":0,"531":0,"532":0,"533":0,"534":0,"535":0,"536":0,"537":0,"538":0,"539":0,"540":0,"541":0,"542":0,"543":0,"544":0,"545":0,"546":0,"547":0,"548":0,"549":0,"550":0,"551":0,"552":0,"553":0,"554":0,"555":0,"556":0,"557":0,"558":0,"559":0,"560":0,"561":0,"562":0,"563":0,"564":0,"565":0,"566":0,"567":0,"568":0,"569":0,"570":0,"571":0,"572":0,"573":0,"574":0,"575":0,"576":0,"577":0,"578":0,"579":0,"580":0,"581":0,"582":0,"583":0,"584":0,"585":0,"586":0,"587":0,"588":0,"589":0,"590":0,"591":0,"592":0,"593":0,"594":0,"595":0,"596":0,"597":0,"598":0,"599":0,"600":0,"601":0,"602":0,"603":0,"604":0,"605":0,"606":0,"607":0,"608":0,"609":0,"610":0,"611":0,"612":0,"613":0,"614":0,"615":0,"616":0,"617":0,"618":0,"619":0,"620":0,"621":0,"622":0,"623":0,"624":0,"625":0,"626":0,"627":0,"628":0,"629":0,"630":0,"631":0,"632":0,"633":0,"634":0,"635":0,"636":0,"637":0,"638":0,"639":0,"640":0,"641":0,"642":0,"643":0,"644":0,"645":0,"646":0,"647":0,"648":0,"649":0,"650":0,"651":0,"652":0,"653":0,"654":0,"655":0,"656":0,"657":0,"658":0,"659":0,"660":0,"661":0,"662":0,"663":0,"664":0,"665":0,"666":0,"667":0,"668":0,"669":0,"670":0,"671":0,"672":0,"673":0,"674":0,"675":0,"676":0,"677":0,"678":0,"679":0,"680":0,"681":0,"682":0,"683":0,"684":0,"685":0,"686":0,"687":0,"688":0,"689":0,"690":0,"691":0,"692":0,"693":0,"694":0,"695":0,"696":0,"697":0,"698":0,"699":0,"700":0,"701":0,"702":0,"703":0,"704":0,"705":0,"706":0,"707":0,"708":0,"709":0,"710":0,"711":0,"712":0,"713":0,"714":0,"715":0,"716":0,"717":0,"718":0,"719":0,"720":0,"721":0,"722":0,"723":0,"724":0,"725":0,"726":0,"727":0,"728":0,"729":0,"730":0,"731":0,"732":0,"733":0,"734":0,"735":0,"736":0,"737":0,"738":0,"739":0,"740":0,"741":0,"742":0,"743":0,"744":0,"745":0,"746":0,"747":0,"748":0,"749":0,"750":0,"751":0,"752":0,"753":0,"754":0,"755":0,"756":0,"757":0,"758":0,"759":0,"760":0,"761":0,"762":0,"763":0,"764":0,"765":0,"766":0,"767":0,"768":0,"769":0,"770":0,"771":0,"772":0,"773":0,"774":0,"775":0,"776":0,"777":0,"778":0,"779":0,"780":0,"781":0,"782":0,"783":0,"784":0,"785":0,"786":0,"787":0,"788":0,"789":0,"790":0,"791":0,"792":0,"793":0,"794":0,"795":0,"796":0,"797":0,"798":0,"799":0,"800":0,"801":0,"802":0,"803":0,"804":0,"805":0,"806":0,"807":0,"808":0,"809":0,"810":0,"811":0,"812":0,"813":0,"814":0,"815":0,"816":0,"817":0,"818":0,"819":0,"820":0,"821":0,"822":0,"823":0,"824":0,"825":0,"826":0,"827":0,"828":0,"829":0,"830":0,"831":0,"832":0,"833":0,"834":0,"835":0,"836":0,"837":0,"838":0,"839":0,"840":0,"841":0,"842":0,"843":0,"844":0,"845":0,"846":0,"847":0,"848":0,"849":0,"850":0,"851":0,"852":0,"853":0,"854":0,"855":0,"856":0,"857":0,"858":0,"859":0,"860":0,"861":0,"862":0,"863":0,"864":0,"865":0,"866":0},b:{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0],"9":[0,0],"10":[0,0],"11":[0,0],"12":[0,0],"13":[0,0],"14":[0],"15":[0],"16":[0,0],"17":[0,0],"18":[0,0],"19":[0,0],"20":[0,0],"21":[0,0,0,0],"22":[0,0],"23":[0,0],"24":[0,0],"25":[0,0],"26":[0,0],"27":[0,0],"28":[0,0],"29":[0,0],"30":[0,0],"31":[0,0],"32":[0,0],"33":[0,0],"34":[0,0],"35":[0,0],"36":[0,0],"37":[0,0],"38":[0,0],"39":[0,0],"40":[0,0],"41":[0,0],"42":[0,0],"43":[0,0],"44":[0,0],"45":[0,0],"46":[0,0],"47":[0,0],"48":[0,0],"49":[0,0],"50":[0,0],"51":[0,0],"52":[0,0,0],"53":[0,0],"54":[0,0],"55":[0,0],"56":[0,0],"57":[0,0],"58":[0,0],"59":[0,0],"60":[0,0],"61":[0,0],"62":[0,0],"63":[0,0],"64":[0,0],"65":[0,0],"66":[0,0],"67":[0,0],"68":[0,0],"69":[0,0],"70":[0,0],"71":[0,0],"72":[0,0],"73":[0,0],"74":[0,0],"75":[0,0],"76":[0,0],"77":[0,0],"78":[0,0],"79":[0,0],"80":[0,0],"81":[0,0],"82":[0,0],"83":[0,0],"84":[0,0],"85":[0,0],"86":[0,0],"87":[0,0],"88":[0,0],"89":[0,0],"90":[0,0],"91":[0,0,0,0],"92":[0,0],"93":[0,0],"94":[0,0],"95":[0,0,0,0],"96":[0,0],"97":[0,0],"98":[0,0],"99":[0,0],"100":[0,0],"101":[0,0],"102":[0,0],"103":[0,0,0],"104":[0,0],"105":[0,0],"106":[0,0],"107":[0,0],"108":[0,0],"109":[0,0],"110":[0,0],"111":[0,0],"112":[0,0],"113":[0,0],"114":[0,0,0],"115":[0,0],"116":[0,0],"117":[0,0,0],"118":[0,0],"119":[0,0],"120":[0,0],"121":[0,0],"122":[0,0,0],"123":[0,0],"124":[0,0],"125":[0,0],"126":[0,0],"127":[0,0],"128":[0,0],"129":[0,0,0],"130":[0],"131":[0],"132":[0],"133":[0,0],"134":[0,0],"135":[0,0],"136":[0,0],"137":[0,0],"138":[0,0],"139":[0,0],"140":[0,0],"141":[0,0],"142":[0,0],"143":[0,0],"144":[0,0],"145":[0,0],"146":[0,0],"147":[0,0],"148":[0,0],"149":[0,0],"150":[0,0],"151":[0,0],"152":[0,0],"153":[0,0],"154":[0,0,0],"155":[0,0],"156":[0,0],"157":[0],"158":[0,0],"159":[0,0],"160":[0,0],"161":[0,0,0],"162":[0,0],"163":[0,0],"164":[0,0,0],"165":[0,0],"166":[0,0],"167":[0,0],"168":[0,0],"169":[0,0],"170":[0,0],"171":[0,0],"172":[0,0],"173":[0,0],"174":[0,0],"175":[0,0],"176":[0,0],"177":[0,0,0],"178":[0,0],"179":[0,0],"180":[0,0],"181":[0,0],"182":[0,0],"183":[0,0],"184":[0,0],"185":[0,0],"186":[0,0],"187":[0,0,0],"188":[0,0,0],"189":[0,0],"190":[0,0],"191":[0],"192":[0],"193":[0],"194":[0,0],"195":[0,0],"196":[0,0],"197":[0,0],"198":[0,0],"199":[0,0,0,0],"200":[0,0,0],"201":[0,0],"202":[0,0],"203":[0,0],"204":[0,0],"205":[0,0],"206":[0,0,0],"207":[0,0],"208":[0,0],"209":[0,0,0],"210":[0,0],"211":[0,0,0],"212":[0,0],"213":[0,0],"214":[0,0],"215":[0,0],"216":[0,0],"217":[0,0],"218":[0,0],"219":[0,0,0],"220":[0,0],"221":[0,0],"222":[0,0],"223":[0,0],"224":[0,0],"225":[0,0],"226":[0,0],"227":[0,0],"228":[0,0],"229":[0,0],"230":[0,0],"231":[0,0],"232":[0,0],"233":[0,0],"234":[0,0],"235":[0,0],"236":[0,0],"237":[0,0],"238":[0,0],"239":[0,0],"240":[0,0],"241":[0,0,0,0],"242":[0,0],"243":[0,0],"244":[0,0],"245":[0,0],"246":[0,0],"247":[0,0],"248":[0,0],"249":[0,0],"250":[0,0],"251":[0,0,0,0],"252":[0,0],"253":[0,0],"254":[0,0],"255":[0,0],"256":[0,0],"257":[0,0],"258":[0,0],"259":[0,0],"260":[0,0,0],"261":[0,0],"262":[0,0],"263":[0,0],"264":[0,0],"265":[0],"266":[0],"267":[0,0],"268":[0,0],"269":[0,0,0],"270":[0,0,0],"271":[0,0,0],"272":[0,0,0],"273":[0,0,0],"274":[0,0],"275":[0,0,0],"276":[0,0],"277":[0,0],"278":[0,0],"279":[0,0],"280":[0,0],"281":[0,0],"282":[0,0],"283":[0,0],"284":[0,0],"285":[0,0],"286":[0,0],"287":[0,0],"288":[0,0],"289":[0,0],"290":[0,0],"291":[0,0],"292":[0,0],"293":[0],"294":[0,0],"295":[0,0,0,0,0],"296":[0,0],"297":[0,0,0],"298":[0,0],"299":[0,0],"300":[0,0],"301":[0,0],"302":[0,0],"303":[0,0],"304":[0,0],"305":[0,0],"306":[0,0],"307":[0,0,0,0],"308":[0,0],"309":[0,0],"310":[0,0],"311":[0,0],"312":[0,0],"313":[0,0],"314":[0,0],"315":[0,0],"316":[0,0],"317":[0,0],"318":[0,0],"319":[0,0],"320":[0,0],"321":[0,0],"322":[0,0],"323":[0,0],"324":[0,0],"325":[0,0],"326":[0,0],"327":[0,0],"328":[0,0,0,0],"329":[0,0],"330":[0,0],"331":[0,0],"332":[0,0],"333":[0,0],"334":[0,0],"335":[0,0,0,0,0,0,0],"336":[0,0],"337":[0,0],"338":[0,0],"339":[0,0],"340":[0,0],"341":[0,0],"342":[0,0],"343":[0,0],"344":[0,0],"345":[0,0],"346":[0,0],"347":[0,0],"348":[0,0],"349":[0,0],"350":[0,0],"351":[0,0],"352":[0,0],"353":[0,0],"354":[0,0],"355":[0,0],"356":[0,0],"357":[0,0],"358":[0,0],"359":[0,0],"360":[0,0],"361":[0,0],"362":[0,0],"363":[0,0],"364":[0,0],"365":[0,0],"366":[0,0],"367":[0,0],"368":[0,0],"369":[0,0],"370":[0,0],"371":[0,0],"372":[0,0],"373":[0,0],"374":[0,0],"375":[0,0],"376":[0,0],"377":[0],"378":[0],"379":[0,0],"380":[0,0],"381":[0,0],"382":[0,0],"383":[0,0],"384":[0,0],"385":[0,0],"386":[0,0,0,0,0],"387":[0,0],"388":[0,0],"389":[0,0],"390":[0,0],"391":[0,0,0,0,0],"392":[0,0],"393":[0,0],"394":[0,0],"395":[0,0],"396":[0,0],"397":[0,0],"398":[0,0,0],"399":[0,0],"400":[0,0],"401":[0,0],"402":[0,0],"403":[0,0],"404":[0,0],"405":[0,0],"406":[0,0],"407":[0,0],"408":[0,0],"409":[0,0],"410":[0,0],"411":[0,0],"412":[0,0],"413":[0,0],"414":[0,0],"415":[0,0,0],"416":[0,0,0],"417":[0,0],"418":[0,0],"419":[0,0],"420":[0,0],"421":[0,0],"422":[0,0],"423":[0,0],"424":[0,0],"425":[0,0],"426":[0,0],"427":[0,0],"428":[0,0],"429":[0,0],"430":[0,0],"431":[0,0],"432":[0,0],"433":[0,0],"434":[0,0],"435":[0,0],"436":[0,0],"437":[0,0],"438":[0,0],"439":[0,0],"440":[0,0],"441":[0,0],"442":[0,0],"443":[0,0],"444":[0,0],"445":[0,0],"446":[0,0],"447":[0,0,0],"448":[0,0],"449":[0,0],"450":[0,0],"451":[0,0],"452":[0,0],"453":[0,0],"454":[0,0,0],"455":[0,0],"456":[0,0],"457":[0,0],"458":[0,0],"459":[0,0],"460":[0,0],"461":[0,0],"462":[0,0],"463":[0,0],"464":[0,0],"465":[0,0],"466":[0,0],"467":[0,0],"468":[0,0],"469":[0,0],"470":[0,0,0],"471":[0,0],"472":[0],"473":[0,0],"474":[0,0],"475":[0,0],"476":[0,0],"477":[0,0],"478":[0,0],"479":[0,0],"480":[0,0],"481":[0,0],"482":[0,0],"483":[0,0],"484":[0,0,0],"485":[0,0],"486":[0,0],"487":[0,0],"488":[0,0],"489":[0,0,0],"490":[0,0],"491":[0,0],"492":[0,0,0],"493":[0,0],"494":[0,0],"495":[0,0],"496":[0,0],"497":[0,0],"498":[0,0],"499":[0,0],"500":[0,0],"501":[0,0],"502":[0,0],"503":[0,0],"504":[0,0],"505":[0,0],"506":[0,0],"507":[0,0,0],"508":[0,0],"509":[0,0],"510":[0,0],"511":[0,0],"512":[0,0],"513":[0,0],"514":[0,0],"515":[0,0],"516":[0,0],"517":[0,0],"518":[0,0],"519":[0,0],"520":[0,0],"521":[0,0,0],"522":[0,0],"523":[0,0],"524":[0,0],"525":[0,0],"526":[0,0],"527":[0,0],"528":[0,0],"529":[0,0],"530":[0,0],"531":[0,0],"532":[0,0],"533":[0,0],"534":[0,0],"535":[0,0],"536":[0,0],"537":[0,0],"538":[0,0],"539":[0,0],"540":[0,0],"541":[0,0],"542":[0,0],"543":[0,0,0],"544":[0,0],"545":[0,0],"546":[0,0],"547":[0,0],"548":[0,0],"549":[0,0],"550":[0,0],"551":[0,0],"552":[0,0],"553":[0,0],"554":[0,0],"555":[0,0],"556":[0,0,0],"557":[0,0],"558":[0,0],"559":[0,0],"560":[0,0],"561":[0,0],"562":[0,0],"563":[0,0],"564":[0,0],"565":[0,0],"566":[0,0],"567":[0,0],"568":[0,0],"569":[0,0],"570":[0,0],"571":[0,0],"572":[0,0],"573":[0,0],"574":[0,0],"575":[0,0],"576":[0,0],"577":[0,0],"578":[0,0],"579":[0,0],"580":[0,0],"581":[0,0],"582":[0,0],"583":[0,0],"584":[0,0],"585":[0,0],"586":[0,0],"587":[0,0],"588":[0,0],"589":[0,0],"590":[0,0],"591":[0,0],"592":[0,0],"593":[0,0],"594":[0,0],"595":[0,0],"596":[0,0],"597":[0,0],"598":[0,0],"599":[0,0],"600":[0,0],"601":[0,0],"602":[0,0],"603":[0,0],"604":[0,0],"605":[0,0],"606":[0,0],"607":[0,0],"608":[0,0,0],"609":[0,0],"610":[0,0,0],"611":[0,0],"612":[0,0],"613":[0,0],"614":[0,0],"615":[0,0],"616":[0,0],"617":[0],"618":[0,0],"619":[0,0],"620":[0,0,0],"621":[0,0],"622":[0,0],"623":[0,0],"624":[0,0],"625":[0,0],"626":[0,0],"627":[0,0,0,0],"628":[0,0],"629":[0,0],"630":[0,0],"631":[0,0],"632":[0,0],"633":[0,0],"634":[0,0],"635":[0,0],"636":[0,0],"637":[0,0],"638":[0,0],"639":[0,0],"640":[0,0,0],"641":[0,0],"642":[0,0],"643":[0,0,0],"644":[0,0],"645":[0,0],"646":[0,0],"647":[0,0],"648":[0,0],"649":[0,0],"650":[0],"651":[0,0],"652":[0,0,0],"653":[0,0],"654":[0,0],"655":[0,0],"656":[0,0],"657":[0,0,0],"658":[0,0],"659":[0],"660":[0,0],"661":[0],"662":[0,0],"663":[0,0],"664":[0,0],"665":[0,0],"666":[0,0],"667":[0,0],"668":[0,0],"669":[0,0],"670":[0,0],"671":[0,0],"672":[0,0],"673":[0,0,0],"674":[0,0],"675":[0,0,0],"676":[0,0],"677":[0,0],"678":[0,0],"679":[0,0],"680":[0,0,0,0,0,0,0,0,0],"681":[0,0],"682":[0,0],"683":[0,0],"684":[0,0,0],"685":[0,0],"686":[0,0],"687":[0,0],"688":[0,0],"689":[0,0],"690":[0,0],"691":[0,0],"692":[0,0],"693":[0,0],"694":[0,0],"695":[0,0],"696":[0,0],"697":[0,0],"698":[0,0,0],"699":[0,0],"700":[0,0],"701":[0,0],"702":[0,0],"703":[0,0],"704":[0,0],"705":[0,0],"706":[0,0],"707":[0,0,0],"708":[0,0],"709":[0,0],"710":[0,0],"711":[0,0],"712":[0,0,0,0],"713":[0,0,0],"714":[0,0],"715":[0,0,0],"716":[0,0],"717":[0,0,0,0,0,0],"718":[0,0,0],"719":[0,0],"720":[0,0],"721":[0,0],"722":[0,0],"723":[0,0],"724":[0,0],"725":[0,0],"726":[0,0],"727":[0,0],"728":[0,0],"729":[0,0],"730":[0,0],"731":[0,0],"732":[0,0,0],"733":[0,0],"734":[0,0],"735":[0,0],"736":[0,0],"737":[0,0],"738":[0,0],"739":[0,0],"740":[0,0],"741":[0,0],"742":[0,0],"743":[0,0],"744":[0,0],"745":[0,0],"746":[0,0],"747":[0,0],"748":[0,0],"749":[0,0],"750":[0,0],"751":[0,0],"752":[0,0],"753":[0,0],"754":[0,0],"755":[0,0],"756":[0,0],"757":[0,0]},inputSourceMap:{version:3,sources:["node_modules/@angular/platform-browser/fesm2022/_dom_renderer-chunk.mjs","node_modules/@angular/platform-browser/fesm2022/_browser-chunk.mjs","node_modules/@angular/platform-browser/fesm2022/platform-browser.mjs","node_modules/@angular/router/fesm2022/_router-chunk.mjs","node_modules/@angular/router/fesm2022/_router_module-chunk.mjs"],sourcesContent:["/**\n * @license Angular v21.2.4\n * (c) 2010-2026 Google LLC. https://angular.dev/\n * License: MIT\n */\n\nimport { DOCUMENT, \u0275getDOM as _getDOM } from '@angular/common';\nimport * as i0 from '@angular/core';\nimport { Injectable, Inject, InjectionToken, \u0275RuntimeError as _RuntimeError, APP_ID, CSP_NONCE, PLATFORM_ID, Optional, ViewEncapsulation, \u0275TracingService as _TracingService, RendererStyleFlags2, \u0275allLeavingAnimations as _allLeavingAnimations } from '@angular/core';\nclass EventManagerPlugin {\n _doc;\n constructor(_doc) {\n this._doc = _doc;\n }\n manager;\n}\nlet DomEventsPlugin = /*#__PURE__*/(() => {\n class DomEventsPlugin extends EventManagerPlugin {\n constructor(doc) {\n super(doc);\n }\n supports(eventName) {\n return true;\n }\n addEventListener(element, eventName, handler, options) {\n element.addEventListener(eventName, handler, options);\n return () => this.removeEventListener(element, eventName, handler, options);\n }\n removeEventListener(target, eventName, callback, options) {\n return target.removeEventListener(eventName, callback, options);\n }\n static \u0275fac = function DomEventsPlugin_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || DomEventsPlugin)(i0.\u0275\u0275inject(DOCUMENT));\n };\n static \u0275prov = /* @__PURE__ */i0.\u0275\u0275defineInjectable({\n token: DomEventsPlugin,\n factory: DomEventsPlugin.\u0275fac\n });\n }\n return DomEventsPlugin;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst EVENT_MANAGER_PLUGINS = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'EventManagerPlugins' : '');\nlet EventManager = /*#__PURE__*/(() => {\n class EventManager {\n _zone;\n _plugins;\n _eventNameToPlugin = new Map();\n constructor(plugins, _zone) {\n this._zone = _zone;\n plugins.forEach(plugin => {\n plugin.manager = this;\n });\n const otherPlugins = plugins.filter(p => !(p instanceof DomEventsPlugin));\n this._plugins = otherPlugins.slice().reverse();\n const domEventPlugin = plugins.find(p => p instanceof DomEventsPlugin);\n if (domEventPlugin) {\n this._plugins.push(domEventPlugin);\n }\n }\n addEventListener(element, eventName, handler, options) {\n const plugin = this._findPluginFor(eventName);\n return plugin.addEventListener(element, eventName, handler, options);\n }\n getZone() {\n return this._zone;\n }\n _findPluginFor(eventName) {\n let plugin = this._eventNameToPlugin.get(eventName);\n if (plugin) {\n return plugin;\n }\n const plugins = this._plugins;\n plugin = plugins.find(plugin => plugin.supports(eventName));\n if (!plugin) {\n throw new _RuntimeError(5101, (typeof ngDevMode === 'undefined' || ngDevMode) && `No event manager plugin found for event ${eventName}`);\n }\n this._eventNameToPlugin.set(eventName, plugin);\n return plugin;\n }\n static \u0275fac = function EventManager_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || EventManager)(i0.\u0275\u0275inject(EVENT_MANAGER_PLUGINS), i0.\u0275\u0275inject(i0.NgZone));\n };\n static \u0275prov = /* @__PURE__ */i0.\u0275\u0275defineInjectable({\n token: EventManager,\n factory: EventManager.\u0275fac\n });\n }\n return EventManager;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst APP_ID_ATTRIBUTE_NAME = 'ng-app-id';\nfunction removeElements(elements) {\n for (const element of elements) {\n element.remove();\n }\n}\nfunction createStyleElement(style, doc) {\n const styleElement = doc.createElement('style');\n styleElement.textContent = style;\n return styleElement;\n}\nfunction addServerStyles(doc, appId, inline, external) {\n const elements = doc.head?.querySelectorAll(`style[${APP_ID_ATTRIBUTE_NAME}=\"${appId}\"],link[${APP_ID_ATTRIBUTE_NAME}=\"${appId}\"]`);\n if (elements) {\n for (const styleElement of elements) {\n styleElement.removeAttribute(APP_ID_ATTRIBUTE_NAME);\n if (styleElement instanceof HTMLLinkElement) {\n external.set(styleElement.href.slice(styleElement.href.lastIndexOf('/') + 1), {\n usage: 0,\n elements: [styleElement]\n });\n } else if (styleElement.textContent) {\n inline.set(styleElement.textContent, {\n usage: 0,\n elements: [styleElement]\n });\n }\n }\n }\n}\nfunction createLinkElement(url, doc) {\n const linkElement = doc.createElement('link');\n linkElement.setAttribute('rel', 'stylesheet');\n linkElement.setAttribute('href', url);\n return linkElement;\n}\nlet SharedStylesHost = /*#__PURE__*/(() => {\n class SharedStylesHost {\n doc;\n appId;\n nonce;\n inline = new Map();\n external = new Map();\n hosts = new Set();\n constructor(doc, appId, nonce, platformId = {}) {\n this.doc = doc;\n this.appId = appId;\n this.nonce = nonce;\n addServerStyles(doc, appId, this.inline, this.external);\n this.hosts.add(doc.head);\n }\n addStyles(styles, urls) {\n for (const value of styles) {\n this.addUsage(value, this.inline, createStyleElement);\n }\n urls?.forEach(value => this.addUsage(value, this.external, createLinkElement));\n }\n removeStyles(styles, urls) {\n for (const value of styles) {\n this.removeUsage(value, this.inline);\n }\n urls?.forEach(value => this.removeUsage(value, this.external));\n }\n addUsage(value, usages, creator) {\n const record = usages.get(value);\n if (record) {\n if ((typeof ngDevMode === 'undefined' || ngDevMode) && record.usage === 0) {\n record.elements.forEach(element => element.setAttribute('ng-style-reused', ''));\n }\n record.usage++;\n } else {\n usages.set(value, {\n usage: 1,\n elements: [...this.hosts].map(host => this.addElement(host, creator(value, this.doc)))\n });\n }\n }\n removeUsage(value, usages) {\n const record = usages.get(value);\n if (record) {\n record.usage--;\n if (record.usage <= 0) {\n removeElements(record.elements);\n usages.delete(value);\n }\n }\n }\n ngOnDestroy() {\n for (const [, {\n elements\n }] of [...this.inline, ...this.external]) {\n removeElements(elements);\n }\n this.hosts.clear();\n }\n addHost(hostNode) {\n this.hosts.add(hostNode);\n for (const [style, {\n elements\n }] of this.inline) {\n elements.push(this.addElement(hostNode, createStyleElement(style, this.doc)));\n }\n for (const [url, {\n elements\n }] of this.external) {\n elements.push(this.addElement(hostNode, createLinkElement(url, this.doc)));\n }\n }\n removeHost(hostNode) {\n this.hosts.delete(hostNode);\n }\n addElement(host, element) {\n if (this.nonce) {\n element.setAttribute('nonce', this.nonce);\n }\n if (typeof ngServerMode !== 'undefined' && ngServerMode) {\n element.setAttribute(APP_ID_ATTRIBUTE_NAME, this.appId);\n }\n return host.appendChild(element);\n }\n static \u0275fac = function SharedStylesHost_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || SharedStylesHost)(i0.\u0275\u0275inject(DOCUMENT), i0.\u0275\u0275inject(APP_ID), i0.\u0275\u0275inject(CSP_NONCE, 8), i0.\u0275\u0275inject(PLATFORM_ID));\n };\n static \u0275prov = /* @__PURE__ */i0.\u0275\u0275defineInjectable({\n token: SharedStylesHost,\n factory: SharedStylesHost.\u0275fac\n });\n }\n return SharedStylesHost;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst NAMESPACE_URIS = {\n 'svg': 'http://www.w3.org/2000/svg',\n 'xhtml': 'http://www.w3.org/1999/xhtml',\n 'xlink': 'http://www.w3.org/1999/xlink',\n 'xml': 'http://www.w3.org/XML/1998/namespace',\n 'xmlns': 'http://www.w3.org/2000/xmlns/',\n 'math': 'http://www.w3.org/1998/Math/MathML'\n};\nconst COMPONENT_REGEX = /%COMP%/g;\nconst SOURCEMAP_URL_REGEXP = /\\/\\*#\\s*sourceMappingURL=(.+?)\\s*\\*\\//;\nconst PROTOCOL_REGEXP = /^https?:/;\nconst COMPONENT_VARIABLE = '%COMP%';\nconst HOST_ATTR = `_nghost-${COMPONENT_VARIABLE}`;\nconst CONTENT_ATTR = `_ngcontent-${COMPONENT_VARIABLE}`;\nconst REMOVE_STYLES_ON_COMPONENT_DESTROY_DEFAULT = true;\nconst REMOVE_STYLES_ON_COMPONENT_DESTROY = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'RemoveStylesOnCompDestroy' : '', {\n factory: () => REMOVE_STYLES_ON_COMPONENT_DESTROY_DEFAULT\n});\nfunction shimContentAttribute(componentShortId) {\n return CONTENT_ATTR.replace(COMPONENT_REGEX, componentShortId);\n}\nfunction shimHostAttribute(componentShortId) {\n return HOST_ATTR.replace(COMPONENT_REGEX, componentShortId);\n}\nfunction shimStylesContent(compId, styles) {\n return styles.map(s => s.replace(COMPONENT_REGEX, compId));\n}\nfunction addBaseHrefToCssSourceMap(baseHref, styles) {\n if (!baseHref) {\n return styles;\n }\n const absoluteBaseHrefUrl = new URL(baseHref, 'http://localhost');\n return styles.map(cssContent => {\n if (!cssContent.includes('sourceMappingURL=')) {\n return cssContent;\n }\n return cssContent.replace(SOURCEMAP_URL_REGEXP, (_, sourceMapUrl) => {\n if (sourceMapUrl[0] === '/' || sourceMapUrl.startsWith('data:') || PROTOCOL_REGEXP.test(sourceMapUrl)) {\n return `/*# sourceMappingURL=${sourceMapUrl} */`;\n }\n const {\n pathname: resolvedSourceMapUrl\n } = new URL(sourceMapUrl, absoluteBaseHrefUrl);\n return `/*# sourceMappingURL=${resolvedSourceMapUrl} */`;\n });\n });\n}\nlet DomRendererFactory2 = /*#__PURE__*/(() => {\n class DomRendererFactory2 {\n eventManager;\n sharedStylesHost;\n appId;\n removeStylesOnCompDestroy;\n doc;\n ngZone;\n nonce;\n tracingService;\n rendererByCompId = new Map();\n defaultRenderer;\n constructor(eventManager, sharedStylesHost, appId, removeStylesOnCompDestroy, doc, ngZone, nonce = null, tracingService = null) {\n this.eventManager = eventManager;\n this.sharedStylesHost = sharedStylesHost;\n this.appId = appId;\n this.removeStylesOnCompDestroy = removeStylesOnCompDestroy;\n this.doc = doc;\n this.ngZone = ngZone;\n this.nonce = nonce;\n this.tracingService = tracingService;\n this.defaultRenderer = new DefaultDomRenderer2(eventManager, doc, ngZone, this.tracingService);\n }\n createRenderer(element, type) {\n if (!element || !type) {\n return this.defaultRenderer;\n }\n if (typeof ngServerMode !== 'undefined' && ngServerMode && (type.encapsulation === ViewEncapsulation.ShadowDom || type.encapsulation === ViewEncapsulation.ExperimentalIsolatedShadowDom)) {\n type = {\n ...type,\n encapsulation: ViewEncapsulation.Emulated\n };\n }\n const renderer = this.getOrCreateRenderer(element, type);\n if (renderer instanceof EmulatedEncapsulationDomRenderer2) {\n renderer.applyToHost(element);\n } else if (renderer instanceof NoneEncapsulationDomRenderer) {\n renderer.applyStyles();\n }\n return renderer;\n }\n getOrCreateRenderer(element, type) {\n const rendererByCompId = this.rendererByCompId;\n let renderer = rendererByCompId.get(type.id);\n if (!renderer) {\n const doc = this.doc;\n const ngZone = this.ngZone;\n const eventManager = this.eventManager;\n const sharedStylesHost = this.sharedStylesHost;\n const removeStylesOnCompDestroy = this.removeStylesOnCompDestroy;\n const tracingService = this.tracingService;\n switch (type.encapsulation) {\n case ViewEncapsulation.Emulated:\n renderer = new EmulatedEncapsulationDomRenderer2(eventManager, sharedStylesHost, type, this.appId, removeStylesOnCompDestroy, doc, ngZone, tracingService);\n break;\n case ViewEncapsulation.ShadowDom:\n return new ShadowDomRenderer(eventManager, element, type, doc, ngZone, this.nonce, tracingService, sharedStylesHost);\n case ViewEncapsulation.ExperimentalIsolatedShadowDom:\n return new ShadowDomRenderer(eventManager, element, type, doc, ngZone, this.nonce, tracingService);\n default:\n renderer = new NoneEncapsulationDomRenderer(eventManager, sharedStylesHost, type, removeStylesOnCompDestroy, doc, ngZone, tracingService);\n break;\n }\n rendererByCompId.set(type.id, renderer);\n }\n return renderer;\n }\n ngOnDestroy() {\n this.rendererByCompId.clear();\n }\n componentReplaced(componentId) {\n this.rendererByCompId.delete(componentId);\n }\n static \u0275fac = function DomRendererFactory2_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || DomRendererFactory2)(i0.\u0275\u0275inject(EventManager), i0.\u0275\u0275inject(SharedStylesHost), i0.\u0275\u0275inject(APP_ID), i0.\u0275\u0275inject(REMOVE_STYLES_ON_COMPONENT_DESTROY), i0.\u0275\u0275inject(DOCUMENT), i0.\u0275\u0275inject(i0.NgZone), i0.\u0275\u0275inject(CSP_NONCE), i0.\u0275\u0275inject(_TracingService, 8));\n };\n static \u0275prov = /* @__PURE__ */i0.\u0275\u0275defineInjectable({\n token: DomRendererFactory2,\n factory: DomRendererFactory2.\u0275fac\n });\n }\n return DomRendererFactory2;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nclass DefaultDomRenderer2 {\n eventManager;\n doc;\n ngZone;\n tracingService;\n data = /*#__PURE__*/Object.create(null);\n throwOnSyntheticProps = true;\n constructor(eventManager, doc, ngZone, tracingService) {\n this.eventManager = eventManager;\n this.doc = doc;\n this.ngZone = ngZone;\n this.tracingService = tracingService;\n }\n destroy() {}\n destroyNode = null;\n createElement(name, namespace) {\n if (namespace) {\n return this.doc.createElementNS(NAMESPACE_URIS[namespace] || namespace, name);\n }\n return this.doc.createElement(name);\n }\n createComment(value) {\n return this.doc.createComment(value);\n }\n createText(value) {\n return this.doc.createTextNode(value);\n }\n appendChild(parent, newChild) {\n const targetParent = isTemplateNode(parent) ? parent.content : parent;\n targetParent.appendChild(newChild);\n }\n insertBefore(parent, newChild, refChild) {\n if (parent) {\n const targetParent = isTemplateNode(parent) ? parent.content : parent;\n targetParent.insertBefore(newChild, refChild);\n }\n }\n removeChild(_parent, oldChild) {\n oldChild.remove();\n }\n selectRootElement(selectorOrNode, preserveContent) {\n let el = typeof selectorOrNode === 'string' ? this.doc.querySelector(selectorOrNode) : selectorOrNode;\n if (!el) {\n throw new _RuntimeError(-5104, (typeof ngDevMode === 'undefined' || ngDevMode) && `The selector \"${selectorOrNode}\" did not match any elements`);\n }\n if (!preserveContent) {\n el.textContent = '';\n }\n return el;\n }\n parentNode(node) {\n return node.parentNode;\n }\n nextSibling(node) {\n return node.nextSibling;\n }\n setAttribute(el, name, value, namespace) {\n if (namespace) {\n name = namespace + ':' + name;\n const namespaceUri = NAMESPACE_URIS[namespace];\n if (namespaceUri) {\n el.setAttributeNS(namespaceUri, name, value);\n } else {\n el.setAttribute(name, value);\n }\n } else {\n el.setAttribute(name, value);\n }\n }\n removeAttribute(el, name, namespace) {\n if (namespace) {\n const namespaceUri = NAMESPACE_URIS[namespace];\n if (namespaceUri) {\n el.removeAttributeNS(namespaceUri, name);\n } else {\n el.removeAttribute(`${namespace}:${name}`);\n }\n } else {\n el.removeAttribute(name);\n }\n }\n addClass(el, name) {\n el.classList.add(name);\n }\n removeClass(el, name) {\n el.classList.remove(name);\n }\n setStyle(el, style, value, flags) {\n if (flags & (RendererStyleFlags2.DashCase | RendererStyleFlags2.Important)) {\n el.style.setProperty(style, value, flags & RendererStyleFlags2.Important ? 'important' : '');\n } else {\n el.style[style] = value;\n }\n }\n removeStyle(el, style, flags) {\n if (flags & RendererStyleFlags2.DashCase) {\n el.style.removeProperty(style);\n } else {\n el.style[style] = '';\n }\n }\n setProperty(el, name, value) {\n if (el == null) {\n return;\n }\n (typeof ngDevMode === 'undefined' || ngDevMode) && this.throwOnSyntheticProps && checkNoSyntheticProp(name, 'property');\n el[name] = value;\n }\n setValue(node, value) {\n node.nodeValue = value;\n }\n listen(target, event, callback, options) {\n (typeof ngDevMode === 'undefined' || ngDevMode) && this.throwOnSyntheticProps && checkNoSyntheticProp(event, 'listener');\n if (typeof target === 'string') {\n target = _getDOM().getGlobalEventTarget(this.doc, target);\n if (!target) {\n throw new _RuntimeError(5102, (typeof ngDevMode === 'undefined' || ngDevMode) && `Unsupported event target ${target} for event ${event}`);\n }\n }\n let wrappedCallback = this.decoratePreventDefault(callback);\n if (this.tracingService?.wrapEventListener) {\n wrappedCallback = this.tracingService.wrapEventListener(target, event, wrappedCallback);\n }\n return this.eventManager.addEventListener(target, event, wrappedCallback, options);\n }\n decoratePreventDefault(eventHandler) {\n return event => {\n if (event === '__ngUnwrap__') {\n return eventHandler;\n }\n const allowDefaultBehavior = typeof ngServerMode !== 'undefined' && ngServerMode ? this.ngZone.runGuarded(() => eventHandler(event)) : eventHandler(event);\n if (allowDefaultBehavior === false) {\n event.preventDefault();\n }\n return undefined;\n };\n }\n}\nconst AT_CHARCODE = /*#__PURE__*/(() => '@'.charCodeAt(0))();\nfunction checkNoSyntheticProp(name, nameKind) {\n if (name.charCodeAt(0) === AT_CHARCODE) {\n throw new _RuntimeError(5105, `Unexpected synthetic ${nameKind} ${name} found. Please make sure that:\n - Make sure \\`provideAnimationsAsync()\\`, \\`provideAnimations()\\` or \\`provideNoopAnimations()\\` call was added to a list of providers used to bootstrap an application.\n - There is a corresponding animation configuration named \\`${name}\\` defined in the \\`animations\\` field of the \\`@Component\\` decorator (see https://angular.dev/api/core/Component#animations).`);\n }\n}\nfunction isTemplateNode(node) {\n return node.tagName === 'TEMPLATE' && node.content !== undefined;\n}\nclass ShadowDomRenderer extends DefaultDomRenderer2 {\n hostEl;\n sharedStylesHost;\n shadowRoot;\n constructor(eventManager, hostEl, component, doc, ngZone, nonce, tracingService, sharedStylesHost) {\n super(eventManager, doc, ngZone, tracingService);\n this.hostEl = hostEl;\n this.sharedStylesHost = sharedStylesHost;\n this.shadowRoot = hostEl.attachShadow({\n mode: 'open'\n });\n if (this.sharedStylesHost) {\n this.sharedStylesHost.addHost(this.shadowRoot);\n }\n let styles = component.styles;\n if (ngDevMode) {\n const baseHref = _getDOM().getBaseHref(doc) ?? '';\n styles = addBaseHrefToCssSourceMap(baseHref, styles);\n }\n styles = shimStylesContent(component.id, styles);\n for (const style of styles) {\n const styleEl = document.createElement('style');\n if (nonce) {\n styleEl.setAttribute('nonce', nonce);\n }\n styleEl.textContent = style;\n this.shadowRoot.appendChild(styleEl);\n }\n const styleUrls = component.getExternalStyles?.();\n if (styleUrls) {\n for (const styleUrl of styleUrls) {\n const linkEl = createLinkElement(styleUrl, doc);\n if (nonce) {\n linkEl.setAttribute('nonce', nonce);\n }\n this.shadowRoot.appendChild(linkEl);\n }\n }\n }\n nodeOrShadowRoot(node) {\n return node === this.hostEl ? this.shadowRoot : node;\n }\n appendChild(parent, newChild) {\n return super.appendChild(this.nodeOrShadowRoot(parent), newChild);\n }\n insertBefore(parent, newChild, refChild) {\n return super.insertBefore(this.nodeOrShadowRoot(parent), newChild, refChild);\n }\n removeChild(_parent, oldChild) {\n return super.removeChild(null, oldChild);\n }\n parentNode(node) {\n return this.nodeOrShadowRoot(super.parentNode(this.nodeOrShadowRoot(node)));\n }\n destroy() {\n if (this.sharedStylesHost) {\n this.sharedStylesHost.removeHost(this.shadowRoot);\n }\n }\n}\nclass NoneEncapsulationDomRenderer extends DefaultDomRenderer2 {\n sharedStylesHost;\n removeStylesOnCompDestroy;\n styles;\n styleUrls;\n constructor(eventManager, sharedStylesHost, component, removeStylesOnCompDestroy, doc, ngZone, tracingService, compId) {\n super(eventManager, doc, ngZone, tracingService);\n this.sharedStylesHost = sharedStylesHost;\n this.removeStylesOnCompDestroy = removeStylesOnCompDestroy;\n let styles = component.styles;\n if (ngDevMode) {\n const baseHref = _getDOM().getBaseHref(doc) ?? '';\n styles = addBaseHrefToCssSourceMap(baseHref, styles);\n }\n this.styles = compId ? shimStylesContent(compId, styles) : styles;\n this.styleUrls = component.getExternalStyles?.(compId);\n }\n applyStyles() {\n this.sharedStylesHost.addStyles(this.styles, this.styleUrls);\n }\n destroy() {\n if (!this.removeStylesOnCompDestroy) {\n return;\n }\n if (_allLeavingAnimations.size === 0) {\n this.sharedStylesHost.removeStyles(this.styles, this.styleUrls);\n }\n }\n}\nclass EmulatedEncapsulationDomRenderer2 extends NoneEncapsulationDomRenderer {\n contentAttr;\n hostAttr;\n constructor(eventManager, sharedStylesHost, component, appId, removeStylesOnCompDestroy, doc, ngZone, tracingService) {\n const compId = appId + '-' + component.id;\n super(eventManager, sharedStylesHost, component, removeStylesOnCompDestroy, doc, ngZone, tracingService, compId);\n this.contentAttr = shimContentAttribute(compId);\n this.hostAttr = shimHostAttribute(compId);\n }\n applyToHost(element) {\n this.applyStyles();\n this.setAttribute(element, this.hostAttr, '');\n }\n createElement(parent, name) {\n const el = super.createElement(parent, name);\n super.setAttribute(el, this.contentAttr, '');\n return el;\n }\n}\nexport { DomEventsPlugin, DomRendererFactory2, EVENT_MANAGER_PLUGINS, EventManager, EventManagerPlugin, REMOVE_STYLES_ON_COMPONENT_DESTROY, SharedStylesHost };\n","/**\n * @license Angular v21.2.4\n * (c) 2010-2026 Google LLC. https://angular.dev/\n * License: MIT\n */\n\nimport { \u0275DomAdapter as _DomAdapter, \u0275setRootDomAdapter as _setRootDomAdapter, \u0275parseCookieValue as _parseCookieValue, \u0275getDOM as _getDOM, DOCUMENT, \u0275PLATFORM_BROWSER_ID as _PLATFORM_BROWSER_ID, XhrFactory, CommonModule } from '@angular/common';\nimport * as i0 from '@angular/core';\nimport { \u0275global as _global, \u0275RuntimeError as _RuntimeError, Injectable, Inject, \u0275internalCreateApplication as _internalCreateApplication, \u0275resolveComponentResources as _resolveComponentResources, PLATFORM_ID, PLATFORM_INITIALIZER, createPlatformFactory, platformCore, InjectionToken, \u0275TESTABILITY_GETTER as _TESTABILITY_GETTER, \u0275TESTABILITY as _TESTABILITY, Testability, \u0275INJECTOR_SCOPE as _INJECTOR_SCOPE, ErrorHandler, RendererFactory2, inject, ApplicationModule, NgModule, \u0275setDocument as _setDocument } from '@angular/core';\nimport { EventManagerPlugin, EVENT_MANAGER_PLUGINS, DomEventsPlugin, DomRendererFactory2, SharedStylesHost, EventManager } from './_dom_renderer-chunk.mjs';\nclass BrowserDomAdapter extends _DomAdapter {\n supportsDOMEvents = true;\n static makeCurrent() {\n _setRootDomAdapter(new BrowserDomAdapter());\n }\n onAndCancel(el, evt, listener, options) {\n el.addEventListener(evt, listener, options);\n return () => {\n el.removeEventListener(evt, listener, options);\n };\n }\n dispatchEvent(el, evt) {\n el.dispatchEvent(evt);\n }\n remove(node) {\n node.remove();\n }\n createElement(tagName, doc) {\n doc = doc || this.getDefaultDocument();\n return doc.createElement(tagName);\n }\n createHtmlDocument() {\n return document.implementation.createHTMLDocument('fakeTitle');\n }\n getDefaultDocument() {\n return document;\n }\n isElementNode(node) {\n return node.nodeType === Node.ELEMENT_NODE;\n }\n isShadowRoot(node) {\n return node instanceof DocumentFragment;\n }\n getGlobalEventTarget(doc, target) {\n if (target === 'window') {\n return window;\n }\n if (target === 'document') {\n return doc;\n }\n if (target === 'body') {\n return doc.body;\n }\n return null;\n }\n getBaseHref(doc) {\n const href = getBaseElementHref();\n return href == null ? null : relativePath(href);\n }\n resetBaseElement() {\n baseElement = null;\n }\n getUserAgent() {\n return window.navigator.userAgent;\n }\n getCookie(name) {\n return _parseCookieValue(document.cookie, name);\n }\n}\nlet baseElement = null;\nfunction getBaseElementHref() {\n baseElement = baseElement || document.head.querySelector('base');\n return baseElement ? baseElement.getAttribute('href') : null;\n}\nfunction relativePath(url) {\n return new URL(url, document.baseURI).pathname;\n}\nclass BrowserGetTestability {\n addToWindow(registry) {\n _global['getAngularTestability'] = (elem, findInAncestors = true) => {\n const testability = registry.findTestabilityInTree(elem, findInAncestors);\n if (testability == null) {\n throw new _RuntimeError(5103, (typeof ngDevMode === 'undefined' || ngDevMode) && 'Could not find testability for element.');\n }\n return testability;\n };\n _global['getAllAngularTestabilities'] = () => registry.getAllTestabilities();\n _global['getAllAngularRootElements'] = () => registry.getAllRootElements();\n const whenAllStable = callback => {\n const testabilities = _global['getAllAngularTestabilities']();\n let count = testabilities.length;\n const decrement = function () {\n count--;\n if (count == 0) {\n callback();\n }\n };\n testabilities.forEach(testability => {\n testability.whenStable(decrement);\n });\n };\n if (!_global['frameworkStabilizers']) {\n _global['frameworkStabilizers'] = [];\n }\n _global['frameworkStabilizers'].push(whenAllStable);\n }\n findTestabilityInTree(registry, elem, findInAncestors) {\n if (elem == null) {\n return null;\n }\n const t = registry.getTestability(elem);\n if (t != null) {\n return t;\n } else if (!findInAncestors) {\n return null;\n }\n if (_getDOM().isShadowRoot(elem)) {\n return this.findTestabilityInTree(registry, elem.host, true);\n }\n return this.findTestabilityInTree(registry, elem.parentElement, true);\n }\n}\nlet BrowserXhr = /*#__PURE__*/(() => {\n class BrowserXhr {\n build() {\n return new XMLHttpRequest();\n }\n static \u0275fac = function BrowserXhr_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || BrowserXhr)();\n };\n static \u0275prov = /* @__PURE__ */i0.\u0275\u0275defineInjectable({\n token: BrowserXhr,\n factory: BrowserXhr.\u0275fac\n });\n }\n return BrowserXhr;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst MODIFIER_KEYS = ['alt', 'control', 'meta', 'shift'];\nconst _keyMap = {\n '\\b': 'Backspace',\n '\\t': 'Tab',\n '\\x7F': 'Delete',\n '\\x1B': 'Escape',\n 'Del': 'Delete',\n 'Esc': 'Escape',\n 'Left': 'ArrowLeft',\n 'Right': 'ArrowRight',\n 'Up': 'ArrowUp',\n 'Down': 'ArrowDown',\n 'Menu': 'ContextMenu',\n 'Scroll': 'ScrollLock',\n 'Win': 'OS'\n};\nconst MODIFIER_KEY_GETTERS = {\n 'alt': event => event.altKey,\n 'control': event => event.ctrlKey,\n 'meta': event => event.metaKey,\n 'shift': event => event.shiftKey\n};\nlet KeyEventsPlugin = /*#__PURE__*/(() => {\n class KeyEventsPlugin extends EventManagerPlugin {\n constructor(doc) {\n super(doc);\n }\n supports(eventName) {\n return KeyEventsPlugin.parseEventName(eventName) != null;\n }\n addEventListener(element, eventName, handler, options) {\n const parsedEvent = KeyEventsPlugin.parseEventName(eventName);\n const outsideHandler = KeyEventsPlugin.eventCallback(parsedEvent['fullKey'], handler, this.manager.getZone());\n return this.manager.getZone().runOutsideAngular(() => {\n return _getDOM().onAndCancel(element, parsedEvent['domEventName'], outsideHandler, options);\n });\n }\n static parseEventName(eventName) {\n const parts = eventName.toLowerCase().split('.');\n const domEventName = parts.shift();\n if (parts.length === 0 || !(domEventName === 'keydown' || domEventName === 'keyup')) {\n return null;\n }\n const key = KeyEventsPlugin._normalizeKey(parts.pop());\n let fullKey = '';\n let codeIX = parts.indexOf('code');\n if (codeIX > -1) {\n parts.splice(codeIX, 1);\n fullKey = 'code.';\n }\n MODIFIER_KEYS.forEach(modifierName => {\n const index = parts.indexOf(modifierName);\n if (index > -1) {\n parts.splice(index, 1);\n fullKey += modifierName + '.';\n }\n });\n fullKey += key;\n if (parts.length != 0 || key.length === 0) {\n return null;\n }\n const result = {};\n result['domEventName'] = domEventName;\n result['fullKey'] = fullKey;\n return result;\n }\n static matchEventFullKeyCode(event, fullKeyCode) {\n let keycode = _keyMap[event.key] || event.key;\n let key = '';\n if (fullKeyCode.indexOf('code.') > -1) {\n keycode = event.code;\n key = 'code.';\n }\n if (keycode == null || !keycode) return false;\n keycode = keycode.toLowerCase();\n if (keycode === ' ') {\n keycode = 'space';\n } else if (keycode === '.') {\n keycode = 'dot';\n }\n MODIFIER_KEYS.forEach(modifierName => {\n if (modifierName !== keycode) {\n const modifierGetter = MODIFIER_KEY_GETTERS[modifierName];\n if (modifierGetter(event)) {\n key += modifierName + '.';\n }\n }\n });\n key += keycode;\n return key === fullKeyCode;\n }\n static eventCallback(fullKey, handler, zone) {\n return event => {\n if (KeyEventsPlugin.matchEventFullKeyCode(event, fullKey)) {\n zone.runGuarded(() => handler(event));\n }\n };\n }\n static _normalizeKey(keyName) {\n return keyName === 'esc' ? 'escape' : keyName;\n }\n static \u0275fac = function KeyEventsPlugin_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || KeyEventsPlugin)(i0.\u0275\u0275inject(DOCUMENT));\n };\n static \u0275prov = /* @__PURE__ */i0.\u0275\u0275defineInjectable({\n token: KeyEventsPlugin,\n factory: KeyEventsPlugin.\u0275fac\n });\n }\n return KeyEventsPlugin;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nasync function bootstrapApplication(rootComponent, options, context) {\n const config = {\n rootComponent,\n ...createProvidersConfig(options, context)\n };\n if ((typeof ngJitMode === 'undefined' || ngJitMode) && typeof fetch === 'function') {\n await resolveJitResources();\n }\n return _internalCreateApplication(config);\n}\nasync function createApplication(options, context) {\n if ((typeof ngJitMode === 'undefined' || ngJitMode) && typeof fetch === 'function') {\n await resolveJitResources();\n }\n return _internalCreateApplication(createProvidersConfig(options, context));\n}\nfunction createProvidersConfig(options, context) {\n return {\n platformRef: context?.platformRef,\n appProviders: [...BROWSER_MODULE_PROVIDERS, ...(options?.providers ?? [])],\n platformProviders: INTERNAL_BROWSER_PLATFORM_PROVIDERS\n };\n}\nasync function resolveJitResources() {\n try {\n return await _resolveComponentResources(fetch);\n } catch (error) {\n console.error(error);\n }\n}\nfunction provideProtractorTestingSupport() {\n return [...TESTABILITY_PROVIDERS];\n}\nfunction initDomAdapter() {\n BrowserDomAdapter.makeCurrent();\n}\nfunction errorHandler() {\n return new ErrorHandler();\n}\nfunction _document() {\n _setDocument(document);\n return document;\n}\nconst INTERNAL_BROWSER_PLATFORM_PROVIDERS = [{\n provide: PLATFORM_ID,\n useValue: _PLATFORM_BROWSER_ID\n}, {\n provide: PLATFORM_INITIALIZER,\n useValue: initDomAdapter,\n multi: true\n}, {\n provide: DOCUMENT,\n useFactory: _document\n}];\nconst platformBrowser = /*#__PURE__*/createPlatformFactory(platformCore, 'browser', INTERNAL_BROWSER_PLATFORM_PROVIDERS);\nconst BROWSER_MODULE_PROVIDERS_MARKER = /*#__PURE__*/new InjectionToken(typeof ngDevMode === 'undefined' || ngDevMode ? 'BrowserModule Providers Marker' : '');\nconst TESTABILITY_PROVIDERS = [{\n provide: _TESTABILITY_GETTER,\n useClass: BrowserGetTestability\n}, {\n provide: _TESTABILITY,\n useClass: Testability\n}, {\n provide: Testability,\n useClass: Testability\n}];\nconst BROWSER_MODULE_PROVIDERS = [{\n provide: _INJECTOR_SCOPE,\n useValue: 'root'\n}, {\n provide: ErrorHandler,\n useFactory: errorHandler\n}, {\n provide: EVENT_MANAGER_PLUGINS,\n useClass: DomEventsPlugin,\n multi: true\n}, {\n provide: EVENT_MANAGER_PLUGINS,\n useClass: KeyEventsPlugin,\n multi: true\n}, DomRendererFactory2, SharedStylesHost, EventManager, {\n provide: RendererFactory2,\n useExisting: DomRendererFactory2\n}, {\n provide: XhrFactory,\n useClass: BrowserXhr\n}, typeof ngDevMode === 'undefined' || ngDevMode ? {\n provide: BROWSER_MODULE_PROVIDERS_MARKER,\n useValue: true\n} : []];\nlet BrowserModule = /*#__PURE__*/(() => {\n class BrowserModule {\n constructor() {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n const providersAlreadyPresent = inject(BROWSER_MODULE_PROVIDERS_MARKER, {\n optional: true,\n skipSelf: true\n });\n if (providersAlreadyPresent) {\n throw new _RuntimeError(5100, `Providers from the \\`BrowserModule\\` have already been loaded. If you need access ` + `to common directives such as NgIf and NgFor, import the \\`CommonModule\\` instead.`);\n }\n }\n }\n static \u0275fac = function BrowserModule_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || BrowserModule)();\n };\n static \u0275mod = /* @__PURE__ */i0.\u0275\u0275defineNgModule({\n type: BrowserModule\n });\n static \u0275inj = /* @__PURE__ */i0.\u0275\u0275defineInjector({\n providers: [...BROWSER_MODULE_PROVIDERS, ...TESTABILITY_PROVIDERS],\n imports: [CommonModule, ApplicationModule]\n });\n }\n return BrowserModule;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nexport { BrowserDomAdapter, BrowserGetTestability, BrowserModule, KeyEventsPlugin, bootstrapApplication, createApplication, platformBrowser, provideProtractorTestingSupport };\n","/**\n * @license Angular v21.2.4\n * (c) 2010-2026 Google LLC. https://angular.dev/\n * License: MIT\n */\n\nexport { BrowserModule, bootstrapApplication, createApplication, platformBrowser, provideProtractorTestingSupport, BrowserDomAdapter as \u0275BrowserDomAdapter, BrowserGetTestability as \u0275BrowserGetTestability, KeyEventsPlugin as \u0275KeyEventsPlugin } from './_browser-chunk.mjs';\nimport { \u0275getDOM as _getDOM, DOCUMENT } from '@angular/common';\nexport { \u0275getDOM } from '@angular/common';\nimport * as i0 from '@angular/core';\nimport { Injectable, Inject, \u0275global as _global, ApplicationRef, InjectionToken, \u0275Console as _Console, Optional, Injector, NgModule, forwardRef, \u0275RuntimeError as _RuntimeError, \u0275XSS_SECURITY_URL as _XSS_SECURITY_URL, SecurityContext, \u0275allowSanitizationBypassAndThrow as _allowSanitizationBypassAndThrow, \u0275unwrapSafeValue as _unwrapSafeValue, \u0275_sanitizeUrl as __sanitizeUrl, \u0275_sanitizeHtml as __sanitizeHtml, \u0275bypassSanitizationTrustHtml as _bypassSanitizationTrustHtml, \u0275bypassSanitizationTrustStyle as _bypassSanitizationTrustStyle, \u0275bypassSanitizationTrustScript as _bypassSanitizationTrustScript, \u0275bypassSanitizationTrustUrl as _bypassSanitizationTrustUrl, \u0275bypassSanitizationTrustResourceUrl as _bypassSanitizationTrustResourceUrl, \u0275withI18nSupport as _withI18nSupport, \u0275withEventReplay as _withEventReplay, \u0275withIncrementalHydration as _withIncrementalHydration, makeEnvironmentProviders, provideStabilityDebugging, \u0275withDomHydration as _withDomHydration, ENVIRONMENT_INITIALIZER, inject, \u0275IS_ENABLED_BLOCKING_INITIAL_NAVIGATION as _IS_ENABLED_BLOCKING_INITIAL_NAVIGATION, \u0275formatRuntimeError as _formatRuntimeError, Version } from '@angular/core';\nimport { EventManagerPlugin, EVENT_MANAGER_PLUGINS } from './_dom_renderer-chunk.mjs';\nexport { EventManager, REMOVE_STYLES_ON_COMPONENT_DESTROY, DomEventsPlugin as \u0275DomEventsPlugin, DomRendererFactory2 as \u0275DomRendererFactory2, SharedStylesHost as \u0275SharedStylesHost } from './_dom_renderer-chunk.mjs';\nimport { \u0275withHttpTransferCache as _withHttpTransferCache } from '@angular/common/http';\nlet Meta = /*#__PURE__*/(() => {\n class Meta {\n _doc;\n _dom;\n constructor(_doc) {\n this._doc = _doc;\n this._dom = _getDOM();\n }\n addTag(tag, forceCreation = false) {\n if (!tag) return null;\n return this._getOrCreateElement(tag, forceCreation);\n }\n addTags(tags, forceCreation = false) {\n if (!tags) return [];\n return tags.reduce((result, tag) => {\n if (tag) {\n result.push(this._getOrCreateElement(tag, forceCreation));\n }\n return result;\n }, []);\n }\n getTag(attrSelector) {\n if (!attrSelector) return null;\n return this._doc.querySelector(`meta[${attrSelector}]`) || null;\n }\n getTags(attrSelector) {\n if (!attrSelector) return [];\n const list = this._doc.querySelectorAll(`meta[${attrSelector}]`);\n return list ? [].slice.call(list) : [];\n }\n updateTag(tag, selector) {\n if (!tag) return null;\n selector = selector || this._parseSelector(tag);\n const meta = this.getTag(selector);\n if (meta) {\n return this._setMetaElementAttributes(tag, meta);\n }\n return this._getOrCreateElement(tag, true);\n }\n removeTag(attrSelector) {\n this.removeTagElement(this.getTag(attrSelector));\n }\n removeTagElement(meta) {\n if (meta) {\n this._dom.remove(meta);\n }\n }\n _getOrCreateElement(meta, forceCreation = false) {\n if (!forceCreation) {\n const selector = this._parseSelector(meta);\n const elem = this.getTags(selector).filter(elem => this._containsAttributes(meta, elem))[0];\n if (elem !== undefined) return elem;\n }\n const element = this._dom.createElement('meta');\n this._setMetaElementAttributes(meta, element);\n const head = this._doc.getElementsByTagName('head')[0];\n head.appendChild(element);\n return element;\n }\n _setMetaElementAttributes(tag, el) {\n Object.keys(tag).forEach(prop => el.setAttribute(this._getMetaKeyMap(prop), tag[prop]));\n return el;\n }\n _parseSelector(tag) {\n const attr = tag.name ? 'name' : 'property';\n return `${attr}=\"${tag[attr]}\"`;\n }\n _containsAttributes(tag, elem) {\n return Object.keys(tag).every(key => elem.getAttribute(this._getMetaKeyMap(key)) === tag[key]);\n }\n _getMetaKeyMap(prop) {\n return META_KEYS_MAP[prop] || prop;\n }\n static \u0275fac = function Meta_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || Meta)(i0.\u0275\u0275inject(DOCUMENT));\n };\n static \u0275prov = /* @__PURE__ */i0.\u0275\u0275defineInjectable({\n token: Meta,\n factory: Meta.\u0275fac,\n providedIn: 'root'\n });\n }\n return Meta;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst META_KEYS_MAP = {\n httpEquiv: 'http-equiv'\n};\nlet Title = /*#__PURE__*/(() => {\n class Title {\n _doc;\n constructor(_doc) {\n this._doc = _doc;\n }\n getTitle() {\n return this._doc.title;\n }\n setTitle(newTitle) {\n this._doc.title = newTitle || '';\n }\n static \u0275fac = function Title_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || Title)(i0.\u0275\u0275inject(DOCUMENT));\n };\n static \u0275prov = /* @__PURE__ */i0.\u0275\u0275defineInjectable({\n token: Title,\n factory: Title.\u0275fac,\n providedIn: 'root'\n });\n }\n return Title;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nfunction exportNgVar(name, value) {\n if (typeof COMPILED === 'undefined' || !COMPILED) {\n const ng = _global['ng'] = _global['ng'] || {};\n ng[name] = value;\n }\n}\nclass ChangeDetectionPerfRecord {\n msPerTick;\n numTicks;\n constructor(msPerTick, numTicks) {\n this.msPerTick = msPerTick;\n this.numTicks = numTicks;\n }\n}\nclass AngularProfiler {\n appRef;\n constructor(ref) {\n this.appRef = ref.injector.get(ApplicationRef);\n }\n timeChangeDetection(config) {\n const record = config && config['record'];\n const profileName = 'Change Detection';\n if (record && 'profile' in console && typeof console.profile === 'function') {\n console.profile(profileName);\n }\n const start = performance.now();\n let numTicks = 0;\n while (numTicks < 5 || performance.now() - start < 500) {\n this.appRef.tick();\n numTicks++;\n }\n const end = performance.now();\n if (record && 'profileEnd' in console && typeof console.profileEnd === 'function') {\n console.profileEnd(profileName);\n }\n const msPerTick = (end - start) / numTicks;\n console.log(`ran ${numTicks} change detection cycles`);\n console.log(`${msPerTick.toFixed(2)} ms per check`);\n return new ChangeDetectionPerfRecord(msPerTick, numTicks);\n }\n}\nconst PROFILER_GLOBAL_NAME = 'profiler';\nfunction enableDebugTools(ref) {\n exportNgVar(PROFILER_GLOBAL_NAME, new AngularProfiler(ref));\n return ref;\n}\nfunction disableDebugTools() {\n exportNgVar(PROFILER_GLOBAL_NAME, null);\n}\nclass By {\n static all() {\n return () => true;\n }\n static css(selector) {\n return debugElement => {\n return debugElement.nativeElement != null ? elementMatches(debugElement.nativeElement, selector) : false;\n };\n }\n static directive(type) {\n return debugNode => debugNode.providerTokens.indexOf(type) !== -1;\n }\n}\nfunction elementMatches(n, selector) {\n if (_getDOM().isElementNode(n)) {\n return n.matches && n.matches(selector) || n.msMatchesSelector && n.msMatchesSelector(selector) || n.webkitMatchesSelector && n.webkitMatchesSelector(selector);\n }\n return false;\n}\nconst EVENT_NAMES = {\n 'pan': true,\n 'panstart': true,\n 'panmove': true,\n 'panend': true,\n 'pancancel': true,\n 'panleft': true,\n 'panright': true,\n 'panup': true,\n 'pandown': true,\n 'pinch': true,\n 'pinchstart': true,\n 'pinchmove': true,\n 'pinchend': true,\n 'pinchcancel': true,\n 'pinchin': true,\n 'pinchout': true,\n 'press': true,\n 'pressup': true,\n 'rotate': true,\n 'rotatestart': true,\n 'rotatemove': true,\n 'rotateend': true,\n 'rotatecancel': true,\n 'swipe': true,\n 'swipeleft': true,\n 'swiperight': true,\n 'swipeup': true,\n 'swipedown': true,\n 'tap': true,\n 'doubletap': true\n};\nconst HAMMER_GESTURE_CONFIG = /*#__PURE__*/new InjectionToken(typeof ngDevMode === 'undefined' || ngDevMode ? 'HammerGestureConfig' : '');\nconst HAMMER_LOADER = /*#__PURE__*/new InjectionToken(typeof ngDevMode === 'undefined' || ngDevMode ? 'HammerLoader' : '');\nlet HammerGestureConfig = /*#__PURE__*/(() => {\n class HammerGestureConfig {\n events = [];\n overrides = {};\n options;\n buildHammer(element) {\n const mc = new Hammer(element, this.options);\n mc.get('pinch').set({\n enable: true\n });\n mc.get('rotate').set({\n enable: true\n });\n for (const eventName in this.overrides) {\n mc.get(eventName).set(this.overrides[eventName]);\n }\n return mc;\n }\n static \u0275fac = function HammerGestureConfig_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || HammerGestureConfig)();\n };\n static \u0275prov = /* @__PURE__ */i0.\u0275\u0275defineInjectable({\n token: HammerGestureConfig,\n factory: HammerGestureConfig.\u0275fac\n });\n }\n return HammerGestureConfig;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet HammerGesturesPlugin = /*#__PURE__*/(() => {\n class HammerGesturesPlugin extends EventManagerPlugin {\n _config;\n _injector;\n loader;\n _loaderPromise = null;\n constructor(doc, _config, _injector, loader) {\n super(doc);\n this._config = _config;\n this._injector = _injector;\n this.loader = loader;\n }\n supports(eventName) {\n if (!EVENT_NAMES.hasOwnProperty(eventName.toLowerCase()) && !this.isCustomEvent(eventName)) {\n return false;\n }\n if (!window.Hammer && !this.loader) {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n const _console = this._injector.get(_Console);\n _console.warn(`The \"${eventName}\" event cannot be bound because Hammer.JS is not ` + `loaded and no custom loader has been specified.`);\n }\n return false;\n }\n return true;\n }\n addEventListener(element, eventName, handler) {\n const zone = this.manager.getZone();\n eventName = eventName.toLowerCase();\n if (!window.Hammer && this.loader) {\n this._loaderPromise = this._loaderPromise || zone.runOutsideAngular(() => this.loader());\n let cancelRegistration = false;\n let deregister = () => {\n cancelRegistration = true;\n };\n zone.runOutsideAngular(() => this._loaderPromise.then(() => {\n if (!window.Hammer) {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n const _console = this._injector.get(_Console);\n _console.warn(`The custom HAMMER_LOADER completed, but Hammer.JS is not present.`);\n }\n deregister = () => {};\n return;\n }\n if (!cancelRegistration) {\n deregister = this.addEventListener(element, eventName, handler);\n }\n }).catch(() => {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n const _console = this._injector.get(_Console);\n _console.warn(`The \"${eventName}\" event cannot be bound because the custom ` + `Hammer.JS loader failed.`);\n }\n deregister = () => {};\n }));\n return () => {\n deregister();\n };\n }\n return zone.runOutsideAngular(() => {\n const mc = this._config.buildHammer(element);\n const callback = function (eventObj) {\n zone.runGuarded(function () {\n handler(eventObj);\n });\n };\n mc.on(eventName, callback);\n return () => {\n mc.off(eventName, callback);\n if (typeof mc.destroy === 'function') {\n mc.destroy();\n }\n };\n });\n }\n isCustomEvent(eventName) {\n return this._config.events.indexOf(eventName) > -1;\n }\n static \u0275fac = function HammerGesturesPlugin_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || HammerGesturesPlugin)(i0.\u0275\u0275inject(DOCUMENT), i0.\u0275\u0275inject(HAMMER_GESTURE_CONFIG), i0.\u0275\u0275inject(i0.Injector), i0.\u0275\u0275inject(HAMMER_LOADER, 8));\n };\n static \u0275prov = /* @__PURE__ */i0.\u0275\u0275defineInjectable({\n token: HammerGesturesPlugin,\n factory: HammerGesturesPlugin.\u0275fac\n });\n }\n return HammerGesturesPlugin;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet HammerModule = /*#__PURE__*/(() => {\n class HammerModule {\n static \u0275fac = function HammerModule_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || HammerModule)();\n };\n static \u0275mod = /* @__PURE__ */i0.\u0275\u0275defineNgModule({\n type: HammerModule\n });\n static \u0275inj = /* @__PURE__ */i0.\u0275\u0275defineInjector({\n providers: [{\n provide: EVENT_MANAGER_PLUGINS,\n useClass: HammerGesturesPlugin,\n multi: true,\n deps: [DOCUMENT, HAMMER_GESTURE_CONFIG, Injector, [new Optional(), HAMMER_LOADER]]\n }, {\n provide: HAMMER_GESTURE_CONFIG,\n useClass: HammerGestureConfig\n }]\n });\n }\n return HammerModule;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet DomSanitizer = /*#__PURE__*/(() => {\n class DomSanitizer {\n static \u0275fac = function DomSanitizer_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || DomSanitizer)();\n };\n static \u0275prov = /* @__PURE__ */i0.\u0275\u0275defineInjectable({\n token: DomSanitizer,\n factory: function DomSanitizer_Factory(__ngFactoryType__) {\n let __ngConditionalFactory__ = null;\n if (__ngFactoryType__) {\n __ngConditionalFactory__ = new (__ngFactoryType__ || DomSanitizer)();\n } else {\n __ngConditionalFactory__ = i0.\u0275\u0275inject(DomSanitizerImpl);\n }\n return __ngConditionalFactory__;\n },\n providedIn: 'root'\n });\n }\n return DomSanitizer;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet DomSanitizerImpl = /*#__PURE__*/(() => {\n class DomSanitizerImpl extends DomSanitizer {\n _doc;\n constructor(_doc) {\n super();\n this._doc = _doc;\n }\n sanitize(ctx, value) {\n if (value == null) return null;\n switch (ctx) {\n case SecurityContext.NONE:\n return value;\n case SecurityContext.HTML:\n if (_allowSanitizationBypassAndThrow(value, \"HTML\")) {\n return _unwrapSafeValue(value);\n }\n return __sanitizeHtml(this._doc, String(value)).toString();\n case SecurityContext.STYLE:\n if (_allowSanitizationBypassAndThrow(value, \"Style\")) {\n return _unwrapSafeValue(value);\n }\n return value;\n case SecurityContext.SCRIPT:\n if (_allowSanitizationBypassAndThrow(value, \"Script\")) {\n return _unwrapSafeValue(value);\n }\n throw new _RuntimeError(5200, (typeof ngDevMode === 'undefined' || ngDevMode) && 'unsafe value used in a script context');\n case SecurityContext.URL:\n if (_allowSanitizationBypassAndThrow(value, \"URL\")) {\n return _unwrapSafeValue(value);\n }\n return __sanitizeUrl(String(value));\n case SecurityContext.RESOURCE_URL:\n if (_allowSanitizationBypassAndThrow(value, \"ResourceURL\")) {\n return _unwrapSafeValue(value);\n }\n throw new _RuntimeError(5201, (typeof ngDevMode === 'undefined' || ngDevMode) && `unsafe value used in a resource URL context (see ${_XSS_SECURITY_URL})`);\n default:\n throw new _RuntimeError(5202, (typeof ngDevMode === 'undefined' || ngDevMode) && `Unexpected SecurityContext ${ctx} (see ${_XSS_SECURITY_URL})`);\n }\n }\n bypassSecurityTrustHtml(value) {\n return _bypassSanitizationTrustHtml(value);\n }\n bypassSecurityTrustStyle(value) {\n return _bypassSanitizationTrustStyle(value);\n }\n bypassSecurityTrustScript(value) {\n return _bypassSanitizationTrustScript(value);\n }\n bypassSecurityTrustUrl(value) {\n return _bypassSanitizationTrustUrl(value);\n }\n bypassSecurityTrustResourceUrl(value) {\n return _bypassSanitizationTrustResourceUrl(value);\n }\n static \u0275fac = function DomSanitizerImpl_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || DomSanitizerImpl)(i0.\u0275\u0275inject(DOCUMENT));\n };\n static \u0275prov = /* @__PURE__ */i0.\u0275\u0275defineInjectable({\n token: DomSanitizerImpl,\n factory: DomSanitizerImpl.\u0275fac,\n providedIn: 'root'\n });\n }\n return DomSanitizerImpl;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nvar HydrationFeatureKind = /*#__PURE__*/function (HydrationFeatureKind) {\n HydrationFeatureKind[HydrationFeatureKind[\"NoHttpTransferCache\"] = 0] = \"NoHttpTransferCache\";\n HydrationFeatureKind[HydrationFeatureKind[\"HttpTransferCacheOptions\"] = 1] = \"HttpTransferCacheOptions\";\n HydrationFeatureKind[HydrationFeatureKind[\"I18nSupport\"] = 2] = \"I18nSupport\";\n HydrationFeatureKind[HydrationFeatureKind[\"EventReplay\"] = 3] = \"EventReplay\";\n HydrationFeatureKind[HydrationFeatureKind[\"IncrementalHydration\"] = 4] = \"IncrementalHydration\";\n return HydrationFeatureKind;\n}(HydrationFeatureKind || {});\nfunction hydrationFeature(\u0275kind, \u0275providers = [], \u0275options = {}) {\n return {\n \u0275kind,\n \u0275providers\n };\n}\nfunction withNoHttpTransferCache() {\n return hydrationFeature(HydrationFeatureKind.NoHttpTransferCache);\n}\nfunction withHttpTransferCacheOptions(options) {\n return hydrationFeature(HydrationFeatureKind.HttpTransferCacheOptions, _withHttpTransferCache(options));\n}\nfunction withI18nSupport() {\n return hydrationFeature(HydrationFeatureKind.I18nSupport, _withI18nSupport());\n}\nfunction withEventReplay() {\n return hydrationFeature(HydrationFeatureKind.EventReplay, _withEventReplay());\n}\nfunction withIncrementalHydration() {\n return hydrationFeature(HydrationFeatureKind.IncrementalHydration, _withIncrementalHydration());\n}\nfunction provideEnabledBlockingInitialNavigationDetector() {\n return [{\n provide: ENVIRONMENT_INITIALIZER,\n useValue: () => {\n const isEnabledBlockingInitialNavigation = inject(_IS_ENABLED_BLOCKING_INITIAL_NAVIGATION, {\n optional: true\n });\n if (isEnabledBlockingInitialNavigation) {\n const console = inject(_Console);\n const message = _formatRuntimeError(5001, 'Configuration error: found both hydration and enabledBlocking initial navigation ' + 'in the same application, which is a contradiction.');\n console.warn(message);\n }\n },\n multi: true\n }];\n}\nfunction provideClientHydration(...features) {\n const providers = [];\n const featuresKind = new Set();\n for (const {\n \u0275providers,\n \u0275kind\n } of features) {\n featuresKind.add(\u0275kind);\n if (\u0275providers.length) {\n providers.push(\u0275providers);\n }\n }\n const hasHttpTransferCacheOptions = featuresKind.has(HydrationFeatureKind.HttpTransferCacheOptions);\n if (typeof ngDevMode !== 'undefined' && ngDevMode && featuresKind.has(HydrationFeatureKind.NoHttpTransferCache) && hasHttpTransferCacheOptions) {\n throw new _RuntimeError(5001, 'Configuration error: found both withHttpTransferCacheOptions() and withNoHttpTransferCache() in the same call to provideClientHydration(), which is a contradiction.');\n }\n return makeEnvironmentProviders([typeof ngDevMode !== 'undefined' && ngDevMode ? provideEnabledBlockingInitialNavigationDetector() : [], typeof ngDevMode !== 'undefined' && ngDevMode ? provideStabilityDebugging() : [], _withDomHydration(), featuresKind.has(HydrationFeatureKind.NoHttpTransferCache) || hasHttpTransferCacheOptions ? [] : _withHttpTransferCache({}), providers]);\n}\nconst VERSION = /* @__PURE__ */new Version('21.2.4');\nexport { By, DomSanitizer, EVENT_MANAGER_PLUGINS, EventManagerPlugin, HAMMER_GESTURE_CONFIG, HAMMER_LOADER, HammerGestureConfig, HammerModule, HydrationFeatureKind, Meta, Title, VERSION, disableDebugTools, enableDebugTools, provideClientHydration, withEventReplay, withHttpTransferCacheOptions, withI18nSupport, withIncrementalHydration, withNoHttpTransferCache, DomSanitizerImpl as \u0275DomSanitizerImpl, HammerGesturesPlugin as \u0275HammerGesturesPlugin };\n","/**\n * @license Angular v21.2.4\n * (c) 2010-2026 Google LLC. https://angular.dev/\n * License: MIT\n */\n\nimport { DOCUMENT, Location } from '@angular/common';\nimport * as i0 from '@angular/core';\nimport { \u0275isPromise as _isPromise, computed, \u0275RuntimeError as _RuntimeError, Injectable, InjectionToken, EventEmitter, input, inject, ViewContainerRef, ChangeDetectorRef, Directive, Input, Output, reflectComponentType, Component, runInInjectionContext, \u0275isInjectable as _isInjectable, \u0275isNgModule as _isNgModule, isStandalone, createEnvironmentInjector, Compiler, NgModuleFactory, \u0275resolveComponentResources as _resolveComponentResources, afterNextRender, signal, EnvironmentInjector, DestroyRef, untracked, \u0275Console as _Console, \u0275PendingTasksInternal as _PendingTasksInternal, \u0275INTERNAL_APPLICATION_ERROR_HANDLER as _INTERNAL_APPLICATION_ERROR_HANDLER, \u0275formatRuntimeError as _formatRuntimeError } from '@angular/core';\nimport { isObservable, from, of, BehaviorSubject, combineLatest, EmptyError, Observable, concat, defer, pipe, EMPTY, throwError, Subject, Subscription } from 'rxjs';\nimport { first, map, switchMap, take, startWith, filter, takeUntil, mergeMap, concatMap, tap, takeLast, catchError, finalize } from 'rxjs/operators';\nimport * as i1 from '@angular/platform-browser';\nconst PRIMARY_OUTLET = 'primary';\nconst RouteTitleKey = /* @__PURE__ */Symbol('RouteTitle');\nclass ParamsAsMap {\n params;\n constructor(params) {\n this.params = params || {};\n }\n has(name) {\n return Object.prototype.hasOwnProperty.call(this.params, name);\n }\n get(name) {\n if (this.has(name)) {\n const v = this.params[name];\n return Array.isArray(v) ? v[0] : v;\n }\n return null;\n }\n getAll(name) {\n if (this.has(name)) {\n const v = this.params[name];\n return Array.isArray(v) ? v : [v];\n }\n return [];\n }\n get keys() {\n return Object.keys(this.params);\n }\n}\nfunction convertToParamMap(params) {\n return new ParamsAsMap(params);\n}\nfunction matchParts(routeParts, urlSegments, posParams) {\n for (let i = 0; i < routeParts.length; i++) {\n const part = routeParts[i];\n const segment = urlSegments[i];\n const isParameter = part[0] === ':';\n if (isParameter) {\n posParams[part.substring(1)] = segment;\n } else if (part !== segment.path) {\n return false;\n }\n }\n return true;\n}\nfunction defaultUrlMatcher(segments, segmentGroup, route) {\n const parts = route.path.split('/');\n const wildcardIndex = parts.indexOf('**');\n if (wildcardIndex === -1) {\n if (parts.length > segments.length) {\n return null;\n }\n if (route.pathMatch === 'full' && (segmentGroup.hasChildren() || parts.length < segments.length)) {\n return null;\n }\n const posParams = {};\n const consumed = segments.slice(0, parts.length);\n if (!matchParts(parts, consumed, posParams)) {\n return null;\n }\n return {\n consumed,\n posParams\n };\n }\n if (wildcardIndex !== parts.lastIndexOf('**')) {\n return null;\n }\n const pre = parts.slice(0, wildcardIndex);\n const post = parts.slice(wildcardIndex + 1);\n if (pre.length + post.length > segments.length) {\n return null;\n }\n if (route.pathMatch === 'full' && segmentGroup.hasChildren() && route.path !== '**') {\n return null;\n }\n const posParams = {};\n if (!matchParts(pre, segments.slice(0, pre.length), posParams)) {\n return null;\n }\n if (!matchParts(post, segments.slice(segments.length - post.length), posParams)) {\n return null;\n }\n return {\n consumed: segments,\n posParams\n };\n}\nfunction firstValueFrom(source) {\n return new Promise((resolve, reject) => {\n source.pipe(first()).subscribe({\n next: value => resolve(value),\n error: err => reject(err)\n });\n });\n}\nfunction shallowEqualArrays(a, b) {\n if (a.length !== b.length) return false;\n for (let i = 0; i < a.length; ++i) {\n if (!shallowEqual(a[i], b[i])) return false;\n }\n return true;\n}\nfunction shallowEqual(a, b) {\n const k1 = a ? getDataKeys(a) : undefined;\n const k2 = b ? getDataKeys(b) : undefined;\n if (!k1 || !k2 || k1.length != k2.length) {\n return false;\n }\n let key;\n for (let i = 0; i < k1.length; i++) {\n key = k1[i];\n if (!equalArraysOrString(a[key], b[key])) {\n return false;\n }\n }\n return true;\n}\nfunction getDataKeys(obj) {\n return [...Object.keys(obj), ...Object.getOwnPropertySymbols(obj)];\n}\nfunction equalArraysOrString(a, b) {\n if (Array.isArray(a) && Array.isArray(b)) {\n if (a.length !== b.length) return false;\n const aSorted = [...a].sort();\n const bSorted = [...b].sort();\n return aSorted.every((val, index) => bSorted[index] === val);\n } else {\n return a === b;\n }\n}\nfunction last(a) {\n return a.length > 0 ? a[a.length - 1] : null;\n}\nfunction wrapIntoObservable(value) {\n if (isObservable(value)) {\n return value;\n }\n if (_isPromise(value)) {\n return from(Promise.resolve(value));\n }\n return of(value);\n}\nfunction wrapIntoPromise(value) {\n if (isObservable(value)) {\n return firstValueFrom(value);\n }\n return Promise.resolve(value);\n}\nconst pathCompareMap = {\n 'exact': equalSegmentGroups,\n 'subset': containsSegmentGroup\n};\nconst paramCompareMap = {\n 'exact': equalParams,\n 'subset': containsParams,\n 'ignored': () => true\n};\nconst exactMatchOptions = {\n paths: 'exact',\n fragment: 'ignored',\n matrixParams: 'ignored',\n queryParams: 'exact'\n};\nconst subsetMatchOptions = {\n paths: 'subset',\n fragment: 'ignored',\n matrixParams: 'ignored',\n queryParams: 'subset'\n};\nfunction isActive(url, router, matchOptions) {\n const urlTree = url instanceof UrlTree ? url : router.parseUrl(url);\n return computed(() => containsTree(router.lastSuccessfulNavigation()?.finalUrl ?? new UrlTree(), urlTree, {\n ...subsetMatchOptions,\n ...matchOptions\n }));\n}\nfunction containsTree(container, containee, options) {\n return pathCompareMap[options.paths](container.root, containee.root, options.matrixParams) && paramCompareMap[options.queryParams](container.queryParams, containee.queryParams) && !(options.fragment === 'exact' && container.fragment !== containee.fragment);\n}\nfunction equalParams(container, containee) {\n return shallowEqual(container, containee);\n}\nfunction equalSegmentGroups(container, containee, matrixParams) {\n if (!equalPath(container.segments, containee.segments)) return false;\n if (!matrixParamsMatch(container.segments, containee.segments, matrixParams)) {\n return false;\n }\n if (container.numberOfChildren !== containee.numberOfChildren) return false;\n for (const c in containee.children) {\n if (!container.children[c]) return false;\n if (!equalSegmentGroups(container.children[c], containee.children[c], matrixParams)) return false;\n }\n return true;\n}\nfunction containsParams(container, containee) {\n return Object.keys(containee).length <= Object.keys(container).length && Object.keys(containee).every(key => equalArraysOrString(container[key], containee[key]));\n}\nfunction containsSegmentGroup(container, containee, matrixParams) {\n return containsSegmentGroupHelper(container, containee, containee.segments, matrixParams);\n}\nfunction containsSegmentGroupHelper(container, containee, containeePaths, matrixParams) {\n if (container.segments.length > containeePaths.length) {\n const current = container.segments.slice(0, containeePaths.length);\n if (!equalPath(current, containeePaths)) return false;\n if (containee.hasChildren()) return false;\n if (!matrixParamsMatch(current, containeePaths, matrixParams)) return false;\n return true;\n } else if (container.segments.length === containeePaths.length) {\n if (!equalPath(container.segments, containeePaths)) return false;\n if (!matrixParamsMatch(container.segments, containeePaths, matrixParams)) return false;\n for (const c in containee.children) {\n if (!container.children[c]) return false;\n if (!containsSegmentGroup(container.children[c], containee.children[c], matrixParams)) {\n return false;\n }\n }\n return true;\n } else {\n const current = containeePaths.slice(0, container.segments.length);\n const next = containeePaths.slice(container.segments.length);\n if (!equalPath(container.segments, current)) return false;\n if (!matrixParamsMatch(container.segments, current, matrixParams)) return false;\n if (!container.children[PRIMARY_OUTLET]) return false;\n return containsSegmentGroupHelper(container.children[PRIMARY_OUTLET], containee, next, matrixParams);\n }\n}\nfunction matrixParamsMatch(containerPaths, containeePaths, options) {\n return containeePaths.every((containeeSegment, i) => {\n return paramCompareMap[options](containerPaths[i].parameters, containeeSegment.parameters);\n });\n}\nclass UrlTree {\n root;\n queryParams;\n fragment;\n _queryParamMap;\n constructor(root = new UrlSegmentGroup([], {}), queryParams = {}, fragment = null) {\n this.root = root;\n this.queryParams = queryParams;\n this.fragment = fragment;\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n if (root.segments.length > 0) {\n throw new _RuntimeError(4015, 'The root `UrlSegmentGroup` should not contain `segments`. ' + 'Instead, these segments belong in the `children` so they can be associated with a named outlet.');\n }\n }\n }\n get queryParamMap() {\n this._queryParamMap ??= convertToParamMap(this.queryParams);\n return this._queryParamMap;\n }\n toString() {\n return DEFAULT_SERIALIZER.serialize(this);\n }\n}\nclass UrlSegmentGroup {\n segments;\n children;\n parent = null;\n constructor(segments, children) {\n this.segments = segments;\n this.children = children;\n Object.values(children).forEach(v => v.parent = this);\n }\n hasChildren() {\n return this.numberOfChildren > 0;\n }\n get numberOfChildren() {\n return Object.keys(this.children).length;\n }\n toString() {\n return serializePaths(this);\n }\n}\nclass UrlSegment {\n path;\n parameters;\n _parameterMap;\n constructor(path, parameters) {\n this.path = path;\n this.parameters = parameters;\n }\n get parameterMap() {\n this._parameterMap ??= convertToParamMap(this.parameters);\n return this._parameterMap;\n }\n toString() {\n return serializePath(this);\n }\n}\nfunction equalSegments(as, bs) {\n return equalPath(as, bs) && as.every((a, i) => shallowEqual(a.parameters, bs[i].parameters));\n}\nfunction equalPath(as, bs) {\n if (as.length !== bs.length) return false;\n return as.every((a, i) => a.path === bs[i].path);\n}\nfunction mapChildrenIntoArray(segment, fn) {\n let res = [];\n Object.entries(segment.children).forEach(([childOutlet, child]) => {\n if (childOutlet === PRIMARY_OUTLET) {\n res = res.concat(fn(child, childOutlet));\n }\n });\n Object.entries(segment.children).forEach(([childOutlet, child]) => {\n if (childOutlet !== PRIMARY_OUTLET) {\n res = res.concat(fn(child, childOutlet));\n }\n });\n return res;\n}\nlet UrlSerializer = /*#__PURE__*/(() => {\n class UrlSerializer {\n static \u0275fac = function UrlSerializer_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || UrlSerializer)();\n };\n static \u0275prov = /* @__PURE__ */i0.\u0275\u0275defineInjectable({\n token: UrlSerializer,\n factory: () => (() => new DefaultUrlSerializer())(),\n providedIn: 'root'\n });\n }\n return UrlSerializer;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nclass DefaultUrlSerializer {\n parse(url) {\n const p = new UrlParser(url);\n return new UrlTree(p.parseRootSegment(), p.parseQueryParams(), p.parseFragment());\n }\n serialize(tree) {\n const segment = `/${serializeSegment(tree.root, true)}`;\n const query = serializeQueryParams(tree.queryParams);\n const fragment = typeof tree.fragment === `string` ? `#${encodeUriFragment(tree.fragment)}` : '';\n return `${segment}${query}${fragment}`;\n }\n}\nconst DEFAULT_SERIALIZER = /*#__PURE__*/new DefaultUrlSerializer();\nfunction serializePaths(segment) {\n return segment.segments.map(p => serializePath(p)).join('/');\n}\nfunction serializeSegment(segment, root) {\n if (!segment.hasChildren()) {\n return serializePaths(segment);\n }\n if (root) {\n const primary = segment.children[PRIMARY_OUTLET] ? serializeSegment(segment.children[PRIMARY_OUTLET], false) : '';\n const children = [];\n Object.entries(segment.children).forEach(([k, v]) => {\n if (k !== PRIMARY_OUTLET) {\n children.push(`${k}:${serializeSegment(v, false)}`);\n }\n });\n return children.length > 0 ? `${primary}(${children.join('//')})` : primary;\n } else {\n const children = mapChildrenIntoArray(segment, (v, k) => {\n if (k === PRIMARY_OUTLET) {\n return [serializeSegment(segment.children[PRIMARY_OUTLET], false)];\n }\n return [`${k}:${serializeSegment(v, false)}`];\n });\n if (Object.keys(segment.children).length === 1 && segment.children[PRIMARY_OUTLET] != null) {\n return `${serializePaths(segment)}/${children[0]}`;\n }\n return `${serializePaths(segment)}/(${children.join('//')})`;\n }\n}\nfunction encodeUriString(s) {\n return encodeURIComponent(s).replace(/%40/g, '@').replace(/%3A/gi, ':').replace(/%24/g, '$').replace(/%2C/gi, ',');\n}\nfunction encodeUriQuery(s) {\n return encodeUriString(s).replace(/%3B/gi, ';');\n}\nfunction encodeUriFragment(s) {\n return encodeURI(s);\n}\nfunction encodeUriSegment(s) {\n return encodeUriString(s).replace(/\\(/g, '%28').replace(/\\)/g, '%29').replace(/%26/gi, '&');\n}\nfunction decode(s) {\n return decodeURIComponent(s);\n}\nfunction decodeQuery(s) {\n return decode(s.replace(/\\+/g, '%20'));\n}\nfunction serializePath(path) {\n return `${encodeUriSegment(path.path)}${serializeMatrixParams(path.parameters)}`;\n}\nfunction serializeMatrixParams(params) {\n return Object.entries(params).map(([key, value]) => `;${encodeUriSegment(key)}=${encodeUriSegment(value)}`).join('');\n}\nfunction serializeQueryParams(params) {\n const strParams = Object.entries(params).map(([name, value]) => {\n return Array.isArray(value) ? value.map(v => `${encodeUriQuery(name)}=${encodeUriQuery(v)}`).join('&') : `${encodeUriQuery(name)}=${encodeUriQuery(value)}`;\n }).filter(s => s);\n return strParams.length ? `?${strParams.join('&')}` : '';\n}\nconst SEGMENT_RE = /^[^\\/()?;#]+/;\nfunction matchSegments(str) {\n const match = str.match(SEGMENT_RE);\n return match ? match[0] : '';\n}\nconst MATRIX_PARAM_SEGMENT_RE = /^[^\\/()?;=#]+/;\nfunction matchMatrixKeySegments(str) {\n const match = str.match(MATRIX_PARAM_SEGMENT_RE);\n return match ? match[0] : '';\n}\nconst QUERY_PARAM_RE = /^[^=?&#]+/;\nfunction matchQueryParams(str) {\n const match = str.match(QUERY_PARAM_RE);\n return match ? match[0] : '';\n}\nconst QUERY_PARAM_VALUE_RE = /^[^&#]+/;\nfunction matchUrlQueryParamValue(str) {\n const match = str.match(QUERY_PARAM_VALUE_RE);\n return match ? match[0] : '';\n}\nclass UrlParser {\n url;\n remaining;\n constructor(url) {\n this.url = url;\n this.remaining = url;\n }\n parseRootSegment() {\n this.consumeOptional('/');\n if (this.remaining === '' || this.peekStartsWith('?') || this.peekStartsWith('#')) {\n return new UrlSegmentGroup([], {});\n }\n return new UrlSegmentGroup([], this.parseChildren());\n }\n parseQueryParams() {\n const params = {};\n if (this.consumeOptional('?')) {\n do {\n this.parseQueryParam(params);\n } while (this.consumeOptional('&'));\n }\n return params;\n }\n parseFragment() {\n return this.consumeOptional('#') ? decodeURIComponent(this.remaining) : null;\n }\n parseChildren(depth = 0) {\n if (depth > 50) {\n throw new _RuntimeError(4010, (typeof ngDevMode === 'undefined' || ngDevMode) && 'URL is too deep');\n }\n if (this.remaining === '') {\n return {};\n }\n this.consumeOptional('/');\n const segments = [];\n if (!this.peekStartsWith('(')) {\n segments.push(this.parseSegment());\n }\n while (this.peekStartsWith('/') && !this.peekStartsWith('//') && !this.peekStartsWith('/(')) {\n this.capture('/');\n segments.push(this.parseSegment());\n }\n let children = {};\n if (this.peekStartsWith('/(')) {\n this.capture('/');\n children = this.parseParens(true, depth);\n }\n let res = {};\n if (this.peekStartsWith('(')) {\n res = this.parseParens(false, depth);\n }\n if (segments.length > 0 || Object.keys(children).length > 0) {\n res[PRIMARY_OUTLET] = new UrlSegmentGroup(segments, children);\n }\n return res;\n }\n parseSegment() {\n const path = matchSegments(this.remaining);\n if (path === '' && this.peekStartsWith(';')) {\n throw new _RuntimeError(4009, (typeof ngDevMode === 'undefined' || ngDevMode) && `Empty path url segment cannot have parameters: '${this.remaining}'.`);\n }\n this.capture(path);\n return new UrlSegment(decode(path), this.parseMatrixParams());\n }\n parseMatrixParams() {\n const params = {};\n while (this.consumeOptional(';')) {\n this.parseParam(params);\n }\n return params;\n }\n parseParam(params) {\n const key = matchMatrixKeySegments(this.remaining);\n if (!key) {\n return;\n }\n this.capture(key);\n let value = '';\n if (this.consumeOptional('=')) {\n const valueMatch = matchSegments(this.remaining);\n if (valueMatch) {\n value = valueMatch;\n this.capture(value);\n }\n }\n params[decode(key)] = decode(value);\n }\n parseQueryParam(params) {\n const key = matchQueryParams(this.remaining);\n if (!key) {\n return;\n }\n this.capture(key);\n let value = '';\n if (this.consumeOptional('=')) {\n const valueMatch = matchUrlQueryParamValue(this.remaining);\n if (valueMatch) {\n value = valueMatch;\n this.capture(value);\n }\n }\n const decodedKey = decodeQuery(key);\n const decodedVal = decodeQuery(value);\n if (params.hasOwnProperty(decodedKey)) {\n let currentVal = params[decodedKey];\n if (!Array.isArray(currentVal)) {\n currentVal = [currentVal];\n params[decodedKey] = currentVal;\n }\n currentVal.push(decodedVal);\n } else {\n params[decodedKey] = decodedVal;\n }\n }\n parseParens(allowPrimary, depth) {\n const segments = {};\n this.capture('(');\n while (!this.consumeOptional(')') && this.remaining.length > 0) {\n const path = matchSegments(this.remaining);\n const next = this.remaining[path.length];\n if (next !== '/' && next !== ')' && next !== ';') {\n throw new _RuntimeError(4010, (typeof ngDevMode === 'undefined' || ngDevMode) && `Cannot parse url '${this.url}'`);\n }\n let outletName;\n if (path.indexOf(':') > -1) {\n outletName = path.slice(0, path.indexOf(':'));\n this.capture(outletName);\n this.capture(':');\n } else if (allowPrimary) {\n outletName = PRIMARY_OUTLET;\n }\n const children = this.parseChildren(depth + 1);\n segments[outletName ?? PRIMARY_OUTLET] = Object.keys(children).length === 1 && children[PRIMARY_OUTLET] ? children[PRIMARY_OUTLET] : new UrlSegmentGroup([], children);\n this.consumeOptional('//');\n }\n return segments;\n }\n peekStartsWith(str) {\n return this.remaining.startsWith(str);\n }\n consumeOptional(str) {\n if (this.peekStartsWith(str)) {\n this.remaining = this.remaining.substring(str.length);\n return true;\n }\n return false;\n }\n capture(str) {\n if (!this.consumeOptional(str)) {\n throw new _RuntimeError(4011, (typeof ngDevMode === 'undefined' || ngDevMode) && `Expected \"${str}\".`);\n }\n }\n}\nfunction createRoot(rootCandidate) {\n return rootCandidate.segments.length > 0 ? new UrlSegmentGroup([], {\n [PRIMARY_OUTLET]: rootCandidate\n }) : rootCandidate;\n}\nfunction squashSegmentGroup(segmentGroup) {\n const newChildren = {};\n for (const [childOutlet, child] of Object.entries(segmentGroup.children)) {\n const childCandidate = squashSegmentGroup(child);\n if (childOutlet === PRIMARY_OUTLET && childCandidate.segments.length === 0 && childCandidate.hasChildren()) {\n for (const [grandChildOutlet, grandChild] of Object.entries(childCandidate.children)) {\n newChildren[grandChildOutlet] = grandChild;\n }\n } else if (childCandidate.segments.length > 0 || childCandidate.hasChildren()) {\n newChildren[childOutlet] = childCandidate;\n }\n }\n const s = new UrlSegmentGroup(segmentGroup.segments, newChildren);\n return mergeTrivialChildren(s);\n}\nfunction mergeTrivialChildren(s) {\n if (s.numberOfChildren === 1 && s.children[PRIMARY_OUTLET]) {\n const c = s.children[PRIMARY_OUTLET];\n return new UrlSegmentGroup(s.segments.concat(c.segments), c.children);\n }\n return s;\n}\nfunction isUrlTree(v) {\n return v instanceof UrlTree;\n}\nfunction createUrlTreeFromSnapshot(relativeTo, commands, queryParams = null, fragment = null, urlSerializer = new DefaultUrlSerializer()) {\n const relativeToUrlSegmentGroup = createSegmentGroupFromRoute(relativeTo);\n return createUrlTreeFromSegmentGroup(relativeToUrlSegmentGroup, commands, queryParams, fragment, urlSerializer);\n}\nfunction createSegmentGroupFromRoute(route) {\n let targetGroup;\n function createSegmentGroupFromRouteRecursive(currentRoute) {\n const childOutlets = {};\n for (const childSnapshot of currentRoute.children) {\n const root = createSegmentGroupFromRouteRecursive(childSnapshot);\n childOutlets[childSnapshot.outlet] = root;\n }\n const segmentGroup = new UrlSegmentGroup(currentRoute.url, childOutlets);\n if (currentRoute === route) {\n targetGroup = segmentGroup;\n }\n return segmentGroup;\n }\n const rootCandidate = createSegmentGroupFromRouteRecursive(route.root);\n const rootSegmentGroup = createRoot(rootCandidate);\n return targetGroup ?? rootSegmentGroup;\n}\nfunction createUrlTreeFromSegmentGroup(relativeTo, commands, queryParams, fragment, urlSerializer) {\n let root = relativeTo;\n while (root.parent) {\n root = root.parent;\n }\n if (commands.length === 0) {\n return tree(root, root, root, queryParams, fragment, urlSerializer);\n }\n const nav = computeNavigation(commands);\n if (nav.toRoot()) {\n return tree(root, root, new UrlSegmentGroup([], {}), queryParams, fragment, urlSerializer);\n }\n const position = findStartingPositionForTargetGroup(nav, root, relativeTo);\n const newSegmentGroup = position.processChildren ? updateSegmentGroupChildren(position.segmentGroup, position.index, nav.commands) : updateSegmentGroup(position.segmentGroup, position.index, nav.commands);\n return tree(root, position.segmentGroup, newSegmentGroup, queryParams, fragment, urlSerializer);\n}\nfunction isMatrixParams(command) {\n return typeof command === 'object' && command != null && !command.outlets && !command.segmentPath;\n}\nfunction isCommandWithOutlets(command) {\n return typeof command === 'object' && command != null && command.outlets;\n}\nfunction normalizeQueryParams(k, v, urlSerializer) {\n k ||= '\u0275';\n const tree = new UrlTree();\n tree.queryParams = {\n [k]: v\n };\n return urlSerializer.parse(urlSerializer.serialize(tree)).queryParams[k];\n}\nfunction tree(oldRoot, oldSegmentGroup, newSegmentGroup, queryParams, fragment, urlSerializer) {\n const qp = {};\n for (const [key, value] of Object.entries(queryParams ?? {})) {\n qp[key] = Array.isArray(value) ? value.map(v => normalizeQueryParams(key, v, urlSerializer)) : normalizeQueryParams(key, value, urlSerializer);\n }\n let rootCandidate;\n if (oldRoot === oldSegmentGroup) {\n rootCandidate = newSegmentGroup;\n } else {\n rootCandidate = replaceSegment(oldRoot, oldSegmentGroup, newSegmentGroup);\n }\n const newRoot = createRoot(squashSegmentGroup(rootCandidate));\n return new UrlTree(newRoot, qp, fragment);\n}\nfunction replaceSegment(current, oldSegment, newSegment) {\n const children = {};\n Object.entries(current.children).forEach(([outletName, c]) => {\n if (c === oldSegment) {\n children[outletName] = newSegment;\n } else {\n children[outletName] = replaceSegment(c, oldSegment, newSegment);\n }\n });\n return new UrlSegmentGroup(current.segments, children);\n}\nclass Navigation {\n isAbsolute;\n numberOfDoubleDots;\n commands;\n constructor(isAbsolute, numberOfDoubleDots, commands) {\n this.isAbsolute = isAbsolute;\n this.numberOfDoubleDots = numberOfDoubleDots;\n this.commands = commands;\n if (isAbsolute && commands.length > 0 && isMatrixParams(commands[0])) {\n throw new _RuntimeError(4003, (typeof ngDevMode === 'undefined' || ngDevMode) && 'Root segment cannot have matrix parameters');\n }\n const cmdWithOutlet = commands.find(isCommandWithOutlets);\n if (cmdWithOutlet && cmdWithOutlet !== last(commands)) {\n throw new _RuntimeError(4004, (typeof ngDevMode === 'undefined' || ngDevMode) && '{outlets:{}} has to be the last command');\n }\n }\n toRoot() {\n return this.isAbsolute && this.commands.length === 1 && this.commands[0] == '/';\n }\n}\nfunction computeNavigation(commands) {\n if (typeof commands[0] === 'string' && commands.length === 1 && commands[0] === '/') {\n return new Navigation(true, 0, commands);\n }\n let numberOfDoubleDots = 0;\n let isAbsolute = false;\n const res = commands.reduce((res, cmd, cmdIdx) => {\n if (typeof cmd === 'object' && cmd != null) {\n if (cmd.outlets) {\n const outlets = {};\n Object.entries(cmd.outlets).forEach(([name, commands]) => {\n outlets[name] = typeof commands === 'string' ? commands.split('/') : commands;\n });\n return [...res, {\n outlets\n }];\n }\n if (cmd.segmentPath) {\n return [...res, cmd.segmentPath];\n }\n }\n if (!(typeof cmd === 'string')) {\n return [...res, cmd];\n }\n if (cmdIdx === 0) {\n cmd.split('/').forEach((urlPart, partIndex) => {\n if (partIndex == 0 && urlPart === '.') ;else if (partIndex == 0 && urlPart === '') {\n isAbsolute = true;\n } else if (urlPart === '..') {\n numberOfDoubleDots++;\n } else if (urlPart != '') {\n res.push(urlPart);\n }\n });\n return res;\n }\n return [...res, cmd];\n }, []);\n return new Navigation(isAbsolute, numberOfDoubleDots, res);\n}\nclass Position {\n segmentGroup;\n processChildren;\n index;\n constructor(segmentGroup, processChildren, index) {\n this.segmentGroup = segmentGroup;\n this.processChildren = processChildren;\n this.index = index;\n }\n}\nfunction findStartingPositionForTargetGroup(nav, root, target) {\n if (nav.isAbsolute) {\n return new Position(root, true, 0);\n }\n if (!target) {\n return new Position(root, false, NaN);\n }\n if (target.parent === null) {\n return new Position(target, true, 0);\n }\n const modifier = isMatrixParams(nav.commands[0]) ? 0 : 1;\n const index = target.segments.length - 1 + modifier;\n return createPositionApplyingDoubleDots(target, index, nav.numberOfDoubleDots);\n}\nfunction createPositionApplyingDoubleDots(group, index, numberOfDoubleDots) {\n let g = group;\n let ci = index;\n let dd = numberOfDoubleDots;\n while (dd > ci) {\n dd -= ci;\n g = g.parent;\n if (!g) {\n throw new _RuntimeError(4005, (typeof ngDevMode === 'undefined' || ngDevMode) && \"Invalid number of '../'\");\n }\n ci = g.segments.length;\n }\n return new Position(g, false, ci - dd);\n}\nfunction getOutlets(commands) {\n if (isCommandWithOutlets(commands[0])) {\n return commands[0].outlets;\n }\n return {\n [PRIMARY_OUTLET]: commands\n };\n}\nfunction updateSegmentGroup(segmentGroup, startIndex, commands) {\n segmentGroup ??= new UrlSegmentGroup([], {});\n if (segmentGroup.segments.length === 0 && segmentGroup.hasChildren()) {\n return updateSegmentGroupChildren(segmentGroup, startIndex, commands);\n }\n const m = prefixedWith(segmentGroup, startIndex, commands);\n const slicedCommands = commands.slice(m.commandIndex);\n if (m.match && m.pathIndex < segmentGroup.segments.length) {\n const g = new UrlSegmentGroup(segmentGroup.segments.slice(0, m.pathIndex), {});\n g.children[PRIMARY_OUTLET] = new UrlSegmentGroup(segmentGroup.segments.slice(m.pathIndex), segmentGroup.children);\n return updateSegmentGroupChildren(g, 0, slicedCommands);\n } else if (m.match && slicedCommands.length === 0) {\n return new UrlSegmentGroup(segmentGroup.segments, {});\n } else if (m.match && !segmentGroup.hasChildren()) {\n return createNewSegmentGroup(segmentGroup, startIndex, commands);\n } else if (m.match) {\n return updateSegmentGroupChildren(segmentGroup, 0, slicedCommands);\n } else {\n return createNewSegmentGroup(segmentGroup, startIndex, commands);\n }\n}\nfunction updateSegmentGroupChildren(segmentGroup, startIndex, commands) {\n if (commands.length === 0) {\n return new UrlSegmentGroup(segmentGroup.segments, {});\n } else {\n const outlets = getOutlets(commands);\n const children = {};\n if (Object.keys(outlets).some(o => o !== PRIMARY_OUTLET) && segmentGroup.children[PRIMARY_OUTLET] && segmentGroup.numberOfChildren === 1 && segmentGroup.children[PRIMARY_OUTLET].segments.length === 0) {\n const childrenOfEmptyChild = updateSegmentGroupChildren(segmentGroup.children[PRIMARY_OUTLET], startIndex, commands);\n return new UrlSegmentGroup(segmentGroup.segments, childrenOfEmptyChild.children);\n }\n Object.entries(outlets).forEach(([outlet, commands]) => {\n if (typeof commands === 'string') {\n commands = [commands];\n }\n if (commands !== null) {\n children[outlet] = updateSegmentGroup(segmentGroup.children[outlet], startIndex, commands);\n }\n });\n Object.entries(segmentGroup.children).forEach(([childOutlet, child]) => {\n if (outlets[childOutlet] === undefined) {\n children[childOutlet] = child;\n }\n });\n return new UrlSegmentGroup(segmentGroup.segments, children);\n }\n}\nfunction prefixedWith(segmentGroup, startIndex, commands) {\n let currentCommandIndex = 0;\n let currentPathIndex = startIndex;\n const noMatch = {\n match: false,\n pathIndex: 0,\n commandIndex: 0\n };\n while (currentPathIndex < segmentGroup.segments.length) {\n if (currentCommandIndex >= commands.length) return noMatch;\n const path = segmentGroup.segments[currentPathIndex];\n const command = commands[currentCommandIndex];\n if (isCommandWithOutlets(command)) {\n break;\n }\n const curr = `${command}`;\n const next = currentCommandIndex < commands.length - 1 ? commands[currentCommandIndex + 1] : null;\n if (currentPathIndex > 0 && curr === undefined) break;\n if (curr && next && typeof next === 'object' && next.outlets === undefined) {\n if (!compare(curr, next, path)) return noMatch;\n currentCommandIndex += 2;\n } else {\n if (!compare(curr, {}, path)) return noMatch;\n currentCommandIndex++;\n }\n currentPathIndex++;\n }\n return {\n match: true,\n pathIndex: currentPathIndex,\n commandIndex: currentCommandIndex\n };\n}\nfunction createNewSegmentGroup(segmentGroup, startIndex, commands) {\n const paths = segmentGroup.segments.slice(0, startIndex);\n let i = 0;\n while (i < commands.length) {\n const command = commands[i];\n if (isCommandWithOutlets(command)) {\n const children = createNewSegmentChildren(command.outlets);\n return new UrlSegmentGroup(paths, children);\n }\n if (i === 0 && isMatrixParams(commands[0])) {\n const p = segmentGroup.segments[startIndex];\n paths.push(new UrlSegment(p.path, stringify(commands[0])));\n i++;\n continue;\n }\n const curr = isCommandWithOutlets(command) ? command.outlets[PRIMARY_OUTLET] : `${command}`;\n const next = i < commands.length - 1 ? commands[i + 1] : null;\n if (curr && next && isMatrixParams(next)) {\n paths.push(new UrlSegment(curr, stringify(next)));\n i += 2;\n } else {\n paths.push(new UrlSegment(curr, {}));\n i++;\n }\n }\n return new UrlSegmentGroup(paths, {});\n}\nfunction createNewSegmentChildren(outlets) {\n const children = {};\n Object.entries(outlets).forEach(([outlet, commands]) => {\n if (typeof commands === 'string') {\n commands = [commands];\n }\n if (commands !== null) {\n children[outlet] = createNewSegmentGroup(new UrlSegmentGroup([], {}), 0, commands);\n }\n });\n return children;\n}\nfunction stringify(params) {\n const res = {};\n Object.entries(params).forEach(([k, v]) => res[k] = `${v}`);\n return res;\n}\nfunction compare(path, params, segment) {\n return path == segment.path && shallowEqual(params, segment.parameters);\n}\nconst IMPERATIVE_NAVIGATION = 'imperative';\nvar EventType = /*#__PURE__*/function (EventType) {\n EventType[EventType[\"NavigationStart\"] = 0] = \"NavigationStart\";\n EventType[EventType[\"NavigationEnd\"] = 1] = \"NavigationEnd\";\n EventType[EventType[\"NavigationCancel\"] = 2] = \"NavigationCancel\";\n EventType[EventType[\"NavigationError\"] = 3] = \"NavigationError\";\n EventType[EventType[\"RoutesRecognized\"] = 4] = \"RoutesRecognized\";\n EventType[EventType[\"ResolveStart\"] = 5] = \"ResolveStart\";\n EventType[EventType[\"ResolveEnd\"] = 6] = \"ResolveEnd\";\n EventType[EventType[\"GuardsCheckStart\"] = 7] = \"GuardsCheckStart\";\n EventType[EventType[\"GuardsCheckEnd\"] = 8] = \"GuardsCheckEnd\";\n EventType[EventType[\"RouteConfigLoadStart\"] = 9] = \"RouteConfigLoadStart\";\n EventType[EventType[\"RouteConfigLoadEnd\"] = 10] = \"RouteConfigLoadEnd\";\n EventType[EventType[\"ChildActivationStart\"] = 11] = \"ChildActivationStart\";\n EventType[EventType[\"ChildActivationEnd\"] = 12] = \"ChildActivationEnd\";\n EventType[EventType[\"ActivationStart\"] = 13] = \"ActivationStart\";\n EventType[EventType[\"ActivationEnd\"] = 14] = \"ActivationEnd\";\n EventType[EventType[\"Scroll\"] = 15] = \"Scroll\";\n EventType[EventType[\"NavigationSkipped\"] = 16] = \"NavigationSkipped\";\n return EventType;\n}(EventType || {});\nclass RouterEvent {\n id;\n url;\n constructor(id, url) {\n this.id = id;\n this.url = url;\n }\n}\nclass NavigationStart extends RouterEvent {\n type = EventType.NavigationStart;\n navigationTrigger;\n restoredState;\n constructor(id, url, navigationTrigger = 'imperative', restoredState = null) {\n super(id, url);\n this.navigationTrigger = navigationTrigger;\n this.restoredState = restoredState;\n }\n toString() {\n return `NavigationStart(id: ${this.id}, url: '${this.url}')`;\n }\n}\nclass NavigationEnd extends RouterEvent {\n urlAfterRedirects;\n type = EventType.NavigationEnd;\n constructor(id, url, urlAfterRedirects) {\n super(id, url);\n this.urlAfterRedirects = urlAfterRedirects;\n }\n toString() {\n return `NavigationEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}')`;\n }\n}\nvar NavigationCancellationCode = /*#__PURE__*/function (NavigationCancellationCode) {\n NavigationCancellationCode[NavigationCancellationCode[\"Redirect\"] = 0] = \"Redirect\";\n NavigationCancellationCode[NavigationCancellationCode[\"SupersededByNewNavigation\"] = 1] = \"SupersededByNewNavigation\";\n NavigationCancellationCode[NavigationCancellationCode[\"NoDataFromResolver\"] = 2] = \"NoDataFromResolver\";\n NavigationCancellationCode[NavigationCancellationCode[\"GuardRejected\"] = 3] = \"GuardRejected\";\n NavigationCancellationCode[NavigationCancellationCode[\"Aborted\"] = 4] = \"Aborted\";\n return NavigationCancellationCode;\n}(NavigationCancellationCode || {});\nvar NavigationSkippedCode = /*#__PURE__*/function (NavigationSkippedCode) {\n NavigationSkippedCode[NavigationSkippedCode[\"IgnoredSameUrlNavigation\"] = 0] = \"IgnoredSameUrlNavigation\";\n NavigationSkippedCode[NavigationSkippedCode[\"IgnoredByUrlHandlingStrategy\"] = 1] = \"IgnoredByUrlHandlingStrategy\";\n return NavigationSkippedCode;\n}(NavigationSkippedCode || {});\nclass NavigationCancel extends RouterEvent {\n reason;\n code;\n type = EventType.NavigationCancel;\n constructor(id, url, reason, code) {\n super(id, url);\n this.reason = reason;\n this.code = code;\n }\n toString() {\n return `NavigationCancel(id: ${this.id}, url: '${this.url}')`;\n }\n}\nfunction isRedirectingEvent(event) {\n return event instanceof NavigationCancel && (event.code === NavigationCancellationCode.Redirect || event.code === NavigationCancellationCode.SupersededByNewNavigation);\n}\nclass NavigationSkipped extends RouterEvent {\n reason;\n code;\n type = EventType.NavigationSkipped;\n constructor(id, url, reason, code) {\n super(id, url);\n this.reason = reason;\n this.code = code;\n }\n}\nclass NavigationError extends RouterEvent {\n error;\n target;\n type = EventType.NavigationError;\n constructor(id, url, error, target) {\n super(id, url);\n this.error = error;\n this.target = target;\n }\n toString() {\n return `NavigationError(id: ${this.id}, url: '${this.url}', error: ${this.error})`;\n }\n}\nclass RoutesRecognized extends RouterEvent {\n urlAfterRedirects;\n state;\n type = EventType.RoutesRecognized;\n constructor(id, url, urlAfterRedirects, state) {\n super(id, url);\n this.urlAfterRedirects = urlAfterRedirects;\n this.state = state;\n }\n toString() {\n return `RoutesRecognized(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`;\n }\n}\nclass GuardsCheckStart extends RouterEvent {\n urlAfterRedirects;\n state;\n type = EventType.GuardsCheckStart;\n constructor(id, url, urlAfterRedirects, state) {\n super(id, url);\n this.urlAfterRedirects = urlAfterRedirects;\n this.state = state;\n }\n toString() {\n return `GuardsCheckStart(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`;\n }\n}\nclass GuardsCheckEnd extends RouterEvent {\n urlAfterRedirects;\n state;\n shouldActivate;\n type = EventType.GuardsCheckEnd;\n constructor(id, url, urlAfterRedirects, state, shouldActivate) {\n super(id, url);\n this.urlAfterRedirects = urlAfterRedirects;\n this.state = state;\n this.shouldActivate = shouldActivate;\n }\n toString() {\n return `GuardsCheckEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state}, shouldActivate: ${this.shouldActivate})`;\n }\n}\nclass ResolveStart extends RouterEvent {\n urlAfterRedirects;\n state;\n type = EventType.ResolveStart;\n constructor(id, url, urlAfterRedirects, state) {\n super(id, url);\n this.urlAfterRedirects = urlAfterRedirects;\n this.state = state;\n }\n toString() {\n return `ResolveStart(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`;\n }\n}\nclass ResolveEnd extends RouterEvent {\n urlAfterRedirects;\n state;\n type = EventType.ResolveEnd;\n constructor(id, url, urlAfterRedirects, state) {\n super(id, url);\n this.urlAfterRedirects = urlAfterRedirects;\n this.state = state;\n }\n toString() {\n return `ResolveEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`;\n }\n}\nclass RouteConfigLoadStart {\n route;\n type = EventType.RouteConfigLoadStart;\n constructor(route) {\n this.route = route;\n }\n toString() {\n return `RouteConfigLoadStart(path: ${this.route.path})`;\n }\n}\nclass RouteConfigLoadEnd {\n route;\n type = EventType.RouteConfigLoadEnd;\n constructor(route) {\n this.route = route;\n }\n toString() {\n return `RouteConfigLoadEnd(path: ${this.route.path})`;\n }\n}\nclass ChildActivationStart {\n snapshot;\n type = EventType.ChildActivationStart;\n constructor(snapshot) {\n this.snapshot = snapshot;\n }\n toString() {\n const path = this.snapshot.routeConfig && this.snapshot.routeConfig.path || '';\n return `ChildActivationStart(path: '${path}')`;\n }\n}\nclass ChildActivationEnd {\n snapshot;\n type = EventType.ChildActivationEnd;\n constructor(snapshot) {\n this.snapshot = snapshot;\n }\n toString() {\n const path = this.snapshot.routeConfig && this.snapshot.routeConfig.path || '';\n return `ChildActivationEnd(path: '${path}')`;\n }\n}\nclass ActivationStart {\n snapshot;\n type = EventType.ActivationStart;\n constructor(snapshot) {\n this.snapshot = snapshot;\n }\n toString() {\n const path = this.snapshot.routeConfig && this.snapshot.routeConfig.path || '';\n return `ActivationStart(path: '${path}')`;\n }\n}\nclass ActivationEnd {\n snapshot;\n type = EventType.ActivationEnd;\n constructor(snapshot) {\n this.snapshot = snapshot;\n }\n toString() {\n const path = this.snapshot.routeConfig && this.snapshot.routeConfig.path || '';\n return `ActivationEnd(path: '${path}')`;\n }\n}\nclass Scroll {\n routerEvent;\n position;\n anchor;\n scrollBehavior;\n type = EventType.Scroll;\n constructor(routerEvent, position, anchor, scrollBehavior) {\n this.routerEvent = routerEvent;\n this.position = position;\n this.anchor = anchor;\n this.scrollBehavior = scrollBehavior;\n }\n toString() {\n const pos = this.position ? `${this.position[0]}, ${this.position[1]}` : null;\n return `Scroll(anchor: '${this.anchor}', position: '${pos}')`;\n }\n}\nclass BeforeActivateRoutes {}\nclass BeforeRoutesRecognized {}\nclass RedirectRequest {\n url;\n navigationBehaviorOptions;\n constructor(url, navigationBehaviorOptions) {\n this.url = url;\n this.navigationBehaviorOptions = navigationBehaviorOptions;\n }\n}\nfunction isPublicRouterEvent(e) {\n return !(e instanceof BeforeActivateRoutes) && !(e instanceof RedirectRequest) && !(e instanceof BeforeRoutesRecognized);\n}\nfunction stringifyEvent(routerEvent) {\n switch (routerEvent.type) {\n case EventType.ActivationEnd:\n return `ActivationEnd(path: '${routerEvent.snapshot.routeConfig?.path || ''}')`;\n case EventType.ActivationStart:\n return `ActivationStart(path: '${routerEvent.snapshot.routeConfig?.path || ''}')`;\n case EventType.ChildActivationEnd:\n return `ChildActivationEnd(path: '${routerEvent.snapshot.routeConfig?.path || ''}')`;\n case EventType.ChildActivationStart:\n return `ChildActivationStart(path: '${routerEvent.snapshot.routeConfig?.path || ''}')`;\n case EventType.GuardsCheckEnd:\n return `GuardsCheckEnd(id: ${routerEvent.id}, url: '${routerEvent.url}', urlAfterRedirects: '${routerEvent.urlAfterRedirects}', state: ${routerEvent.state}, shouldActivate: ${routerEvent.shouldActivate})`;\n case EventType.GuardsCheckStart:\n return `GuardsCheckStart(id: ${routerEvent.id}, url: '${routerEvent.url}', urlAfterRedirects: '${routerEvent.urlAfterRedirects}', state: ${routerEvent.state})`;\n case EventType.NavigationCancel:\n return `NavigationCancel(id: ${routerEvent.id}, url: '${routerEvent.url}')`;\n case EventType.NavigationSkipped:\n return `NavigationSkipped(id: ${routerEvent.id}, url: '${routerEvent.url}')`;\n case EventType.NavigationEnd:\n return `NavigationEnd(id: ${routerEvent.id}, url: '${routerEvent.url}', urlAfterRedirects: '${routerEvent.urlAfterRedirects}')`;\n case EventType.NavigationError:\n return `NavigationError(id: ${routerEvent.id}, url: '${routerEvent.url}', error: ${routerEvent.error})`;\n case EventType.NavigationStart:\n return `NavigationStart(id: ${routerEvent.id}, url: '${routerEvent.url}')`;\n case EventType.ResolveEnd:\n return `ResolveEnd(id: ${routerEvent.id}, url: '${routerEvent.url}', urlAfterRedirects: '${routerEvent.urlAfterRedirects}', state: ${routerEvent.state})`;\n case EventType.ResolveStart:\n return `ResolveStart(id: ${routerEvent.id}, url: '${routerEvent.url}', urlAfterRedirects: '${routerEvent.urlAfterRedirects}', state: ${routerEvent.state})`;\n case EventType.RouteConfigLoadEnd:\n return `RouteConfigLoadEnd(path: ${routerEvent.route.path})`;\n case EventType.RouteConfigLoadStart:\n return `RouteConfigLoadStart(path: ${routerEvent.route.path})`;\n case EventType.RoutesRecognized:\n return `RoutesRecognized(id: ${routerEvent.id}, url: '${routerEvent.url}', urlAfterRedirects: '${routerEvent.urlAfterRedirects}', state: ${routerEvent.state})`;\n case EventType.Scroll:\n const pos = routerEvent.position ? `${routerEvent.position[0]}, ${routerEvent.position[1]}` : null;\n return `Scroll(anchor: '${routerEvent.anchor}', position: '${pos}')`;\n }\n}\nclass OutletContext {\n rootInjector;\n outlet = null;\n route = null;\n children;\n attachRef = null;\n get injector() {\n return this.route?.snapshot._environmentInjector ?? this.rootInjector;\n }\n constructor(rootInjector) {\n this.rootInjector = rootInjector;\n this.children = new ChildrenOutletContexts(this.rootInjector);\n }\n}\nlet ChildrenOutletContexts = /*#__PURE__*/(() => {\n class ChildrenOutletContexts {\n rootInjector;\n contexts = new Map();\n constructor(rootInjector) {\n this.rootInjector = rootInjector;\n }\n onChildOutletCreated(childName, outlet) {\n const context = this.getOrCreateContext(childName);\n context.outlet = outlet;\n this.contexts.set(childName, context);\n }\n onChildOutletDestroyed(childName) {\n const context = this.getContext(childName);\n if (context) {\n context.outlet = null;\n context.attachRef = null;\n }\n }\n onOutletDeactivated() {\n const contexts = this.contexts;\n this.contexts = new Map();\n return contexts;\n }\n onOutletReAttached(contexts) {\n this.contexts = contexts;\n }\n getOrCreateContext(childName) {\n let context = this.getContext(childName);\n if (!context) {\n context = new OutletContext(this.rootInjector);\n this.contexts.set(childName, context);\n }\n return context;\n }\n getContext(childName) {\n return this.contexts.get(childName) || null;\n }\n static \u0275fac = function ChildrenOutletContexts_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || ChildrenOutletContexts)(i0.\u0275\u0275inject(i0.EnvironmentInjector));\n };\n static \u0275prov = /* @__PURE__ */i0.\u0275\u0275defineInjectable({\n token: ChildrenOutletContexts,\n factory: ChildrenOutletContexts.\u0275fac,\n providedIn: 'root'\n });\n }\n return ChildrenOutletContexts;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nclass Tree {\n _root;\n constructor(root) {\n this._root = root;\n }\n get root() {\n return this._root.value;\n }\n parent(t) {\n const p = this.pathFromRoot(t);\n return p.length > 1 ? p[p.length - 2] : null;\n }\n children(t) {\n const n = findNode(t, this._root);\n return n ? n.children.map(t => t.value) : [];\n }\n firstChild(t) {\n const n = findNode(t, this._root);\n return n && n.children.length > 0 ? n.children[0].value : null;\n }\n siblings(t) {\n const p = findPath(t, this._root);\n if (p.length < 2) return [];\n const c = p[p.length - 2].children.map(c => c.value);\n return c.filter(cc => cc !== t);\n }\n pathFromRoot(t) {\n return findPath(t, this._root).map(s => s.value);\n }\n}\nfunction findNode(value, node) {\n if (value === node.value) return node;\n for (const child of node.children) {\n const node = findNode(value, child);\n if (node) return node;\n }\n return null;\n}\nfunction findPath(value, node) {\n if (value === node.value) return [node];\n for (const child of node.children) {\n const path = findPath(value, child);\n if (path.length) {\n path.unshift(node);\n return path;\n }\n }\n return [];\n}\nclass TreeNode {\n value;\n children;\n constructor(value, children) {\n this.value = value;\n this.children = children;\n }\n toString() {\n return `TreeNode(${this.value})`;\n }\n}\nfunction nodeChildrenAsMap(node) {\n const map = {};\n if (node) {\n node.children.forEach(child => map[child.value.outlet] = child);\n }\n return map;\n}\nclass RouterState extends Tree {\n snapshot;\n constructor(root, snapshot) {\n super(root);\n this.snapshot = snapshot;\n setRouterState(this, root);\n }\n toString() {\n return this.snapshot.toString();\n }\n}\nfunction createEmptyState(rootComponent, injector) {\n const snapshot = createEmptyStateSnapshot(rootComponent, injector);\n const emptyUrl = new BehaviorSubject([new UrlSegment('', {})]);\n const emptyParams = new BehaviorSubject({});\n const emptyData = new BehaviorSubject({});\n const emptyQueryParams = new BehaviorSubject({});\n const fragment = new BehaviorSubject('');\n const activated = new ActivatedRoute(emptyUrl, emptyParams, emptyQueryParams, fragment, emptyData, PRIMARY_OUTLET, rootComponent, snapshot.root);\n activated.snapshot = snapshot.root;\n return new RouterState(new TreeNode(activated, []), snapshot);\n}\nfunction createEmptyStateSnapshot(rootComponent, injector) {\n const emptyParams = {};\n const emptyData = {};\n const emptyQueryParams = {};\n const fragment = '';\n const activated = new ActivatedRouteSnapshot([], emptyParams, emptyQueryParams, fragment, emptyData, PRIMARY_OUTLET, rootComponent, null, {}, injector);\n return new RouterStateSnapshot('', new TreeNode(activated, []));\n}\nclass ActivatedRoute {\n urlSubject;\n paramsSubject;\n queryParamsSubject;\n fragmentSubject;\n dataSubject;\n outlet;\n component;\n snapshot;\n _futureSnapshot;\n _routerState;\n _paramMap;\n _queryParamMap;\n title;\n url;\n params;\n queryParams;\n fragment;\n data;\n constructor(urlSubject, paramsSubject, queryParamsSubject, fragmentSubject, dataSubject, outlet, component, futureSnapshot) {\n this.urlSubject = urlSubject;\n this.paramsSubject = paramsSubject;\n this.queryParamsSubject = queryParamsSubject;\n this.fragmentSubject = fragmentSubject;\n this.dataSubject = dataSubject;\n this.outlet = outlet;\n this.component = component;\n this._futureSnapshot = futureSnapshot;\n this.title = this.dataSubject?.pipe(map(d => d[RouteTitleKey])) ?? of(undefined);\n this.url = urlSubject;\n this.params = paramsSubject;\n this.queryParams = queryParamsSubject;\n this.fragment = fragmentSubject;\n this.data = dataSubject;\n }\n get routeConfig() {\n return this._futureSnapshot.routeConfig;\n }\n get root() {\n return this._routerState.root;\n }\n get parent() {\n return this._routerState.parent(this);\n }\n get firstChild() {\n return this._routerState.firstChild(this);\n }\n get children() {\n return this._routerState.children(this);\n }\n get pathFromRoot() {\n return this._routerState.pathFromRoot(this);\n }\n get paramMap() {\n this._paramMap ??= this.params.pipe(map(p => convertToParamMap(p)));\n return this._paramMap;\n }\n get queryParamMap() {\n this._queryParamMap ??= this.queryParams.pipe(map(p => convertToParamMap(p)));\n return this._queryParamMap;\n }\n toString() {\n return this.snapshot ? this.snapshot.toString() : `Future(${this._futureSnapshot})`;\n }\n}\nfunction getInherited(route, parent, paramsInheritanceStrategy = 'emptyOnly') {\n let inherited;\n const {\n routeConfig\n } = route;\n if (parent !== null && (paramsInheritanceStrategy === 'always' || routeConfig?.path === '' || !parent.component && !parent.routeConfig?.loadComponent)) {\n inherited = {\n params: {\n ...parent.params,\n ...route.params\n },\n data: {\n ...parent.data,\n ...route.data\n },\n resolve: {\n ...route.data,\n ...parent.data,\n ...routeConfig?.data,\n ...route._resolvedData\n }\n };\n } else {\n inherited = {\n params: {\n ...route.params\n },\n data: {\n ...route.data\n },\n resolve: {\n ...route.data,\n ...(route._resolvedData ?? {})\n }\n };\n }\n if (routeConfig && hasStaticTitle(routeConfig)) {\n inherited.resolve[RouteTitleKey] = routeConfig.title;\n }\n return inherited;\n}\nclass ActivatedRouteSnapshot {\n url;\n params;\n queryParams;\n fragment;\n data;\n outlet;\n component;\n routeConfig;\n _resolve;\n _resolvedData;\n _routerState;\n _paramMap;\n _queryParamMap;\n _environmentInjector;\n get title() {\n return this.data?.[RouteTitleKey];\n }\n constructor(url, params, queryParams, fragment, data, outlet, component, routeConfig, resolve, environmentInjector) {\n this.url = url;\n this.params = params;\n this.queryParams = queryParams;\n this.fragment = fragment;\n this.data = data;\n this.outlet = outlet;\n this.component = component;\n this.routeConfig = routeConfig;\n this._resolve = resolve;\n this._environmentInjector = environmentInjector;\n }\n get root() {\n return this._routerState.root;\n }\n get parent() {\n return this._routerState.parent(this);\n }\n get firstChild() {\n return this._routerState.firstChild(this);\n }\n get children() {\n return this._routerState.children(this);\n }\n get pathFromRoot() {\n return this._routerState.pathFromRoot(this);\n }\n get paramMap() {\n this._paramMap ??= convertToParamMap(this.params);\n return this._paramMap;\n }\n get queryParamMap() {\n this._queryParamMap ??= convertToParamMap(this.queryParams);\n return this._queryParamMap;\n }\n toString() {\n const url = this.url.map(segment => segment.toString()).join('/');\n const matched = this.routeConfig ? this.routeConfig.path : '';\n return `Route(url:'${url}', path:'${matched}')`;\n }\n}\nclass RouterStateSnapshot extends Tree {\n url;\n constructor(url, root) {\n super(root);\n this.url = url;\n setRouterState(this, root);\n }\n toString() {\n return serializeNode(this._root);\n }\n}\nfunction setRouterState(state, node) {\n node.value._routerState = state;\n node.children.forEach(c => setRouterState(state, c));\n}\nfunction serializeNode(node) {\n const c = node.children.length > 0 ? ` { ${node.children.map(serializeNode).join(', ')} } ` : '';\n return `${node.value}${c}`;\n}\nfunction advanceActivatedRoute(route) {\n if (route.snapshot) {\n const currentSnapshot = route.snapshot;\n const nextSnapshot = route._futureSnapshot;\n route.snapshot = nextSnapshot;\n if (!shallowEqual(currentSnapshot.queryParams, nextSnapshot.queryParams)) {\n route.queryParamsSubject.next(nextSnapshot.queryParams);\n }\n if (currentSnapshot.fragment !== nextSnapshot.fragment) {\n route.fragmentSubject.next(nextSnapshot.fragment);\n }\n if (!shallowEqual(currentSnapshot.params, nextSnapshot.params)) {\n route.paramsSubject.next(nextSnapshot.params);\n }\n if (!shallowEqualArrays(currentSnapshot.url, nextSnapshot.url)) {\n route.urlSubject.next(nextSnapshot.url);\n }\n if (!shallowEqual(currentSnapshot.data, nextSnapshot.data)) {\n route.dataSubject.next(nextSnapshot.data);\n }\n } else {\n route.snapshot = route._futureSnapshot;\n route.dataSubject.next(route._futureSnapshot.data);\n }\n}\nfunction equalParamsAndUrlSegments(a, b) {\n const equalUrlParams = shallowEqual(a.params, b.params) && equalSegments(a.url, b.url);\n const parentsMismatch = !a.parent !== !b.parent;\n return equalUrlParams && !parentsMismatch && (!a.parent || equalParamsAndUrlSegments(a.parent, b.parent));\n}\nfunction hasStaticTitle(config) {\n return typeof config.title === 'string' || config.title === null;\n}\nconst ROUTER_OUTLET_DATA = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'RouterOutlet data' : '');\nlet RouterOutlet = /*#__PURE__*/(() => {\n class RouterOutlet {\n activated = null;\n get activatedComponentRef() {\n return this.activated;\n }\n _activatedRoute = null;\n name = PRIMARY_OUTLET;\n activateEvents = new EventEmitter();\n deactivateEvents = new EventEmitter();\n attachEvents = new EventEmitter();\n detachEvents = new EventEmitter();\n routerOutletData = input(...(ngDevMode ? [undefined, {\n debugName: \"routerOutletData\"\n }] : []));\n parentContexts = inject(ChildrenOutletContexts);\n location = inject(ViewContainerRef);\n changeDetector = inject(ChangeDetectorRef);\n inputBinder = inject(INPUT_BINDER, {\n optional: true\n });\n supportsBindingToComponentInputs = true;\n ngOnChanges(changes) {\n if (changes['name']) {\n const {\n firstChange,\n previousValue\n } = changes['name'];\n if (firstChange) {\n return;\n }\n if (this.isTrackedInParentContexts(previousValue)) {\n this.deactivate();\n this.parentContexts.onChildOutletDestroyed(previousValue);\n }\n this.initializeOutletWithName();\n }\n }\n ngOnDestroy() {\n if (this.isTrackedInParentContexts(this.name)) {\n this.parentContexts.onChildOutletDestroyed(this.name);\n }\n this.inputBinder?.unsubscribeFromRouteData(this);\n }\n isTrackedInParentContexts(outletName) {\n return this.parentContexts.getContext(outletName)?.outlet === this;\n }\n ngOnInit() {\n this.initializeOutletWithName();\n }\n initializeOutletWithName() {\n this.parentContexts.onChildOutletCreated(this.name, this);\n if (this.activated) {\n return;\n }\n const context = this.parentContexts.getContext(this.name);\n if (context?.route) {\n if (context.attachRef) {\n this.attach(context.attachRef, context.route);\n } else {\n this.activateWith(context.route, context.injector);\n }\n }\n }\n get isActivated() {\n return !!this.activated;\n }\n get component() {\n if (!this.activated) throw new _RuntimeError(4012, (typeof ngDevMode === 'undefined' || ngDevMode) && 'Outlet is not activated');\n return this.activated.instance;\n }\n get activatedRoute() {\n if (!this.activated) throw new _RuntimeError(4012, (typeof ngDevMode === 'undefined' || ngDevMode) && 'Outlet is not activated');\n return this._activatedRoute;\n }\n get activatedRouteData() {\n if (this._activatedRoute) {\n return this._activatedRoute.snapshot.data;\n }\n return {};\n }\n detach() {\n if (!this.activated) throw new _RuntimeError(4012, (typeof ngDevMode === 'undefined' || ngDevMode) && 'Outlet is not activated');\n this.location.detach();\n const cmp = this.activated;\n this.activated = null;\n this._activatedRoute = null;\n this.detachEvents.emit(cmp.instance);\n return cmp;\n }\n attach(ref, activatedRoute) {\n this.activated = ref;\n this._activatedRoute = activatedRoute;\n this.location.insert(ref.hostView);\n this.inputBinder?.bindActivatedRouteToOutletComponent(this);\n this.attachEvents.emit(ref.instance);\n }\n deactivate() {\n if (this.activated) {\n const c = this.component;\n this.activated.destroy();\n this.activated = null;\n this._activatedRoute = null;\n this.deactivateEvents.emit(c);\n }\n }\n activateWith(activatedRoute, environmentInjector) {\n if (this.isActivated) {\n throw new _RuntimeError(4013, (typeof ngDevMode === 'undefined' || ngDevMode) && 'Cannot activate an already activated outlet');\n }\n this._activatedRoute = activatedRoute;\n const location = this.location;\n const snapshot = activatedRoute.snapshot;\n const component = snapshot.component;\n const childContexts = this.parentContexts.getOrCreateContext(this.name).children;\n const injector = new OutletInjector(activatedRoute, childContexts, location.injector, this.routerOutletData);\n this.activated = location.createComponent(component, {\n index: location.length,\n injector,\n environmentInjector: environmentInjector\n });\n this.changeDetector.markForCheck();\n this.inputBinder?.bindActivatedRouteToOutletComponent(this);\n this.activateEvents.emit(this.activated.instance);\n }\n static \u0275fac = function RouterOutlet_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || RouterOutlet)();\n };\n static \u0275dir = /* @__PURE__ */i0.\u0275\u0275defineDirective({\n type: RouterOutlet,\n selectors: [[\"router-outlet\"]],\n inputs: {\n name: \"name\",\n routerOutletData: [1, \"routerOutletData\"]\n },\n outputs: {\n activateEvents: \"activate\",\n deactivateEvents: \"deactivate\",\n attachEvents: \"attach\",\n detachEvents: \"detach\"\n },\n exportAs: [\"outlet\"],\n features: [i0.\u0275\u0275NgOnChangesFeature]\n });\n }\n return RouterOutlet;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nclass OutletInjector {\n route;\n childContexts;\n parent;\n outletData;\n constructor(route, childContexts, parent, outletData) {\n this.route = route;\n this.childContexts = childContexts;\n this.parent = parent;\n this.outletData = outletData;\n }\n get(token, notFoundValue) {\n if (token === ActivatedRoute) {\n return this.route;\n }\n if (token === ChildrenOutletContexts) {\n return this.childContexts;\n }\n if (token === ROUTER_OUTLET_DATA) {\n return this.outletData;\n }\n return this.parent.get(token, notFoundValue);\n }\n}\nconst INPUT_BINDER = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'Router Input Binder' : '');\nlet RoutedComponentInputBinder = /*#__PURE__*/(() => {\n class RoutedComponentInputBinder {\n outletDataSubscriptions = new Map();\n bindActivatedRouteToOutletComponent(outlet) {\n this.unsubscribeFromRouteData(outlet);\n this.subscribeToRouteData(outlet);\n }\n unsubscribeFromRouteData(outlet) {\n this.outletDataSubscriptions.get(outlet)?.unsubscribe();\n this.outletDataSubscriptions.delete(outlet);\n }\n subscribeToRouteData(outlet) {\n const {\n activatedRoute\n } = outlet;\n const dataSubscription = combineLatest([activatedRoute.queryParams, activatedRoute.params, activatedRoute.data]).pipe(switchMap(([queryParams, params, data], index) => {\n data = {\n ...queryParams,\n ...params,\n ...data\n };\n if (index === 0) {\n return of(data);\n }\n return Promise.resolve(data);\n })).subscribe(data => {\n if (!outlet.isActivated || !outlet.activatedComponentRef || outlet.activatedRoute !== activatedRoute || activatedRoute.component === null) {\n this.unsubscribeFromRouteData(outlet);\n return;\n }\n const mirror = reflectComponentType(activatedRoute.component);\n if (!mirror) {\n this.unsubscribeFromRouteData(outlet);\n return;\n }\n for (const {\n templateName\n } of mirror.inputs) {\n outlet.activatedComponentRef.setInput(templateName, data[templateName]);\n }\n });\n this.outletDataSubscriptions.set(outlet, dataSubscription);\n }\n static \u0275fac = function RoutedComponentInputBinder_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || RoutedComponentInputBinder)();\n };\n static \u0275prov = /* @__PURE__ */i0.\u0275\u0275defineInjectable({\n token: RoutedComponentInputBinder,\n factory: RoutedComponentInputBinder.\u0275fac\n });\n }\n return RoutedComponentInputBinder;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet \u0275EmptyOutletComponent = /*#__PURE__*/(() => {\n class \u0275EmptyOutletComponent {\n static \u0275fac = function \u0275EmptyOutletComponent_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || \u0275EmptyOutletComponent)();\n };\n static \u0275cmp = /* @__PURE__ */i0.\u0275\u0275defineComponent({\n type: \u0275EmptyOutletComponent,\n selectors: [[\"ng-component\"]],\n exportAs: [\"emptyRouterOutlet\"],\n decls: 1,\n vars: 0,\n template: function _EmptyOutletComponent_Template(rf, ctx) {\n if (rf & 1) {\n i0.\u0275\u0275element(0, \"router-outlet\");\n }\n },\n dependencies: [RouterOutlet],\n encapsulation: 2\n });\n }\n return \u0275EmptyOutletComponent;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nfunction standardizeConfig(r) {\n const children = r.children && r.children.map(standardizeConfig);\n const c = children ? {\n ...r,\n children\n } : {\n ...r\n };\n if (!c.component && !c.loadComponent && (children || c.loadChildren) && c.outlet && c.outlet !== PRIMARY_OUTLET) {\n c.component = \u0275EmptyOutletComponent;\n }\n return c;\n}\nfunction createRouterState(routeReuseStrategy, curr, prevState) {\n const root = createNode(routeReuseStrategy, curr._root, prevState ? prevState._root : undefined);\n return new RouterState(root, curr);\n}\nfunction createNode(routeReuseStrategy, curr, prevState) {\n if (prevState && routeReuseStrategy.shouldReuseRoute(curr.value, prevState.value.snapshot)) {\n const value = prevState.value;\n value._futureSnapshot = curr.value;\n const children = createOrReuseChildren(routeReuseStrategy, curr, prevState);\n return new TreeNode(value, children);\n } else {\n if (routeReuseStrategy.shouldAttach(curr.value)) {\n const detachedRouteHandle = routeReuseStrategy.retrieve(curr.value);\n if (detachedRouteHandle !== null) {\n const tree = detachedRouteHandle.route;\n tree.value._futureSnapshot = curr.value;\n tree.children = curr.children.map(c => createNode(routeReuseStrategy, c));\n return tree;\n }\n }\n const value = createActivatedRoute(curr.value);\n const children = curr.children.map(c => createNode(routeReuseStrategy, c));\n return new TreeNode(value, children);\n }\n}\nfunction createOrReuseChildren(routeReuseStrategy, curr, prevState) {\n return curr.children.map(child => {\n for (const p of prevState.children) {\n if (routeReuseStrategy.shouldReuseRoute(child.value, p.value.snapshot)) {\n return createNode(routeReuseStrategy, child, p);\n }\n }\n return createNode(routeReuseStrategy, child);\n });\n}\nfunction createActivatedRoute(c) {\n return new ActivatedRoute(new BehaviorSubject(c.url), new BehaviorSubject(c.params), new BehaviorSubject(c.queryParams), new BehaviorSubject(c.fragment), new BehaviorSubject(c.data), c.outlet, c.component, c);\n}\nclass RedirectCommand {\n redirectTo;\n navigationBehaviorOptions;\n constructor(redirectTo, navigationBehaviorOptions) {\n this.redirectTo = redirectTo;\n this.navigationBehaviorOptions = navigationBehaviorOptions;\n }\n}\nconst NAVIGATION_CANCELING_ERROR = 'ngNavigationCancelingError';\nfunction redirectingNavigationError(urlSerializer, redirect) {\n const {\n redirectTo,\n navigationBehaviorOptions\n } = isUrlTree(redirect) ? {\n redirectTo: redirect,\n navigationBehaviorOptions: undefined\n } : redirect;\n const error = navigationCancelingError(ngDevMode && `Redirecting to \"${urlSerializer.serialize(redirectTo)}\"`, NavigationCancellationCode.Redirect);\n error.url = redirectTo;\n error.navigationBehaviorOptions = navigationBehaviorOptions;\n return error;\n}\nfunction navigationCancelingError(message, code) {\n const error = new Error(`NavigationCancelingError: ${message || ''}`);\n error[NAVIGATION_CANCELING_ERROR] = true;\n error.cancellationCode = code;\n return error;\n}\nfunction isRedirectingNavigationCancelingError(error) {\n return isNavigationCancelingError(error) && isUrlTree(error.url);\n}\nfunction isNavigationCancelingError(error) {\n return !!error && error[NAVIGATION_CANCELING_ERROR];\n}\nlet warnedAboutUnsupportedInputBinding = false;\nclass ActivateRoutes {\n routeReuseStrategy;\n futureState;\n currState;\n forwardEvent;\n inputBindingEnabled;\n constructor(routeReuseStrategy, futureState, currState, forwardEvent, inputBindingEnabled) {\n this.routeReuseStrategy = routeReuseStrategy;\n this.futureState = futureState;\n this.currState = currState;\n this.forwardEvent = forwardEvent;\n this.inputBindingEnabled = inputBindingEnabled;\n }\n activate(parentContexts) {\n const futureRoot = this.futureState._root;\n const currRoot = this.currState ? this.currState._root : null;\n this.deactivateChildRoutes(futureRoot, currRoot, parentContexts);\n advanceActivatedRoute(this.futureState.root);\n this.activateChildRoutes(futureRoot, currRoot, parentContexts);\n }\n deactivateChildRoutes(futureNode, currNode, contexts) {\n const children = nodeChildrenAsMap(currNode);\n futureNode.children.forEach(futureChild => {\n const childOutletName = futureChild.value.outlet;\n this.deactivateRoutes(futureChild, children[childOutletName], contexts);\n delete children[childOutletName];\n });\n Object.values(children).forEach(v => {\n this.deactivateRouteAndItsChildren(v, contexts);\n });\n }\n deactivateRoutes(futureNode, currNode, parentContext) {\n const future = futureNode.value;\n const curr = currNode ? currNode.value : null;\n if (future === curr) {\n if (future.component) {\n const context = parentContext.getContext(future.outlet);\n if (context) {\n this.deactivateChildRoutes(futureNode, currNode, context.children);\n }\n } else {\n this.deactivateChildRoutes(futureNode, currNode, parentContext);\n }\n } else {\n if (curr) {\n this.deactivateRouteAndItsChildren(currNode, parentContext);\n }\n }\n }\n deactivateRouteAndItsChildren(route, parentContexts) {\n if (route.value.component && this.routeReuseStrategy.shouldDetach(route.value.snapshot)) {\n this.detachAndStoreRouteSubtree(route, parentContexts);\n } else {\n this.deactivateRouteAndOutlet(route, parentContexts);\n }\n }\n detachAndStoreRouteSubtree(route, parentContexts) {\n const context = parentContexts.getContext(route.value.outlet);\n const contexts = context && route.value.component ? context.children : parentContexts;\n const children = nodeChildrenAsMap(route);\n for (const treeNode of Object.values(children)) {\n this.deactivateRouteAndItsChildren(treeNode, contexts);\n }\n if (context && context.outlet) {\n const componentRef = context.outlet.detach();\n const contexts = context.children.onOutletDeactivated();\n this.routeReuseStrategy.store(route.value.snapshot, {\n componentRef,\n route,\n contexts\n });\n }\n }\n deactivateRouteAndOutlet(route, parentContexts) {\n const context = parentContexts.getContext(route.value.outlet);\n const contexts = context && route.value.component ? context.children : parentContexts;\n const children = nodeChildrenAsMap(route);\n for (const treeNode of Object.values(children)) {\n this.deactivateRouteAndItsChildren(treeNode, contexts);\n }\n if (context) {\n if (context.outlet) {\n context.outlet.deactivate();\n context.children.onOutletDeactivated();\n }\n context.attachRef = null;\n context.route = null;\n }\n }\n activateChildRoutes(futureNode, currNode, contexts) {\n const children = nodeChildrenAsMap(currNode);\n futureNode.children.forEach(c => {\n this.activateRoutes(c, children[c.value.outlet], contexts);\n this.forwardEvent(new ActivationEnd(c.value.snapshot));\n });\n if (futureNode.children.length) {\n this.forwardEvent(new ChildActivationEnd(futureNode.value.snapshot));\n }\n }\n activateRoutes(futureNode, currNode, parentContexts) {\n const future = futureNode.value;\n const curr = currNode ? currNode.value : null;\n advanceActivatedRoute(future);\n if (future === curr) {\n if (future.component) {\n const context = parentContexts.getOrCreateContext(future.outlet);\n this.activateChildRoutes(futureNode, currNode, context.children);\n } else {\n this.activateChildRoutes(futureNode, currNode, parentContexts);\n }\n } else {\n if (future.component) {\n const context = parentContexts.getOrCreateContext(future.outlet);\n if (this.routeReuseStrategy.shouldAttach(future.snapshot)) {\n const stored = this.routeReuseStrategy.retrieve(future.snapshot);\n this.routeReuseStrategy.store(future.snapshot, null);\n context.children.onOutletReAttached(stored.contexts);\n context.attachRef = stored.componentRef;\n context.route = stored.route.value;\n if (context.outlet) {\n context.outlet.attach(stored.componentRef, stored.route.value);\n }\n advanceActivatedRoute(stored.route.value);\n this.activateChildRoutes(futureNode, null, context.children);\n } else {\n context.attachRef = null;\n context.route = future;\n if (context.outlet) {\n context.outlet.activateWith(future, context.injector);\n }\n this.activateChildRoutes(futureNode, null, context.children);\n }\n } else {\n this.activateChildRoutes(futureNode, null, parentContexts);\n }\n }\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n const context = parentContexts.getOrCreateContext(future.outlet);\n const outlet = context.outlet;\n if (outlet && this.inputBindingEnabled && !outlet.supportsBindingToComponentInputs && !warnedAboutUnsupportedInputBinding) {\n console.warn(`'withComponentInputBinding' feature is enabled but ` + `this application is using an outlet that may not support binding to component inputs.`);\n warnedAboutUnsupportedInputBinding = true;\n }\n }\n }\n}\nclass CanActivate {\n path;\n route;\n constructor(path) {\n this.path = path;\n this.route = this.path[this.path.length - 1];\n }\n}\nclass CanDeactivate {\n component;\n route;\n constructor(component, route) {\n this.component = component;\n this.route = route;\n }\n}\nfunction getAllRouteGuards(future, curr, parentContexts) {\n const futureRoot = future._root;\n const currRoot = curr ? curr._root : null;\n return getChildRouteGuards(futureRoot, currRoot, parentContexts, [futureRoot.value]);\n}\nfunction getCanActivateChild(p) {\n const canActivateChild = p.routeConfig ? p.routeConfig.canActivateChild : null;\n if (!canActivateChild || canActivateChild.length === 0) return null;\n return {\n node: p,\n guards: canActivateChild\n };\n}\nfunction getTokenOrFunctionIdentity(tokenOrFunction, injector) {\n const NOT_FOUND = Symbol();\n const result = injector.get(tokenOrFunction, NOT_FOUND);\n if (result === NOT_FOUND) {\n if (typeof tokenOrFunction === 'function' && !_isInjectable(tokenOrFunction)) {\n return tokenOrFunction;\n } else {\n return injector.get(tokenOrFunction);\n }\n }\n return result;\n}\nfunction getChildRouteGuards(futureNode, currNode, contexts, futurePath, checks = {\n canDeactivateChecks: [],\n canActivateChecks: []\n}) {\n const prevChildren = nodeChildrenAsMap(currNode);\n futureNode.children.forEach(c => {\n getRouteGuards(c, prevChildren[c.value.outlet], contexts, futurePath.concat([c.value]), checks);\n delete prevChildren[c.value.outlet];\n });\n Object.entries(prevChildren).forEach(([k, v]) => deactivateRouteAndItsChildren(v, contexts.getContext(k), checks));\n return checks;\n}\nfunction getRouteGuards(futureNode, currNode, parentContexts, futurePath, checks = {\n canDeactivateChecks: [],\n canActivateChecks: []\n}) {\n const future = futureNode.value;\n const curr = currNode ? currNode.value : null;\n const context = parentContexts ? parentContexts.getContext(futureNode.value.outlet) : null;\n if (curr && future.routeConfig === curr.routeConfig) {\n const shouldRun = shouldRunGuardsAndResolvers(curr, future, future.routeConfig.runGuardsAndResolvers);\n if (shouldRun) {\n checks.canActivateChecks.push(new CanActivate(futurePath));\n } else {\n future.data = curr.data;\n future._resolvedData = curr._resolvedData;\n }\n if (future.component) {\n getChildRouteGuards(futureNode, currNode, context ? context.children : null, futurePath, checks);\n } else {\n getChildRouteGuards(futureNode, currNode, parentContexts, futurePath, checks);\n }\n if (shouldRun && context && context.outlet && context.outlet.isActivated) {\n checks.canDeactivateChecks.push(new CanDeactivate(context.outlet.component, curr));\n }\n } else {\n if (curr) {\n deactivateRouteAndItsChildren(currNode, context, checks);\n }\n checks.canActivateChecks.push(new CanActivate(futurePath));\n if (future.component) {\n getChildRouteGuards(futureNode, null, context ? context.children : null, futurePath, checks);\n } else {\n getChildRouteGuards(futureNode, null, parentContexts, futurePath, checks);\n }\n }\n return checks;\n}\nfunction shouldRunGuardsAndResolvers(curr, future, mode) {\n if (typeof mode === 'function') {\n return runInInjectionContext(future._environmentInjector, () => mode(curr, future));\n }\n switch (mode) {\n case 'pathParamsChange':\n return !equalPath(curr.url, future.url);\n case 'pathParamsOrQueryParamsChange':\n return !equalPath(curr.url, future.url) || !shallowEqual(curr.queryParams, future.queryParams);\n case 'always':\n return true;\n case 'paramsOrQueryParamsChange':\n return !equalParamsAndUrlSegments(curr, future) || !shallowEqual(curr.queryParams, future.queryParams);\n case 'paramsChange':\n default:\n return !equalParamsAndUrlSegments(curr, future);\n }\n}\nfunction deactivateRouteAndItsChildren(route, context, checks) {\n const children = nodeChildrenAsMap(route);\n const r = route.value;\n Object.entries(children).forEach(([childName, node]) => {\n if (!r.component) {\n deactivateRouteAndItsChildren(node, context, checks);\n } else if (context) {\n deactivateRouteAndItsChildren(node, context.children.getContext(childName), checks);\n } else {\n deactivateRouteAndItsChildren(node, null, checks);\n }\n });\n if (!r.component) {\n checks.canDeactivateChecks.push(new CanDeactivate(null, r));\n } else if (context && context.outlet && context.outlet.isActivated) {\n checks.canDeactivateChecks.push(new CanDeactivate(context.outlet.component, r));\n } else {\n checks.canDeactivateChecks.push(new CanDeactivate(null, r));\n }\n}\nfunction isFunction(v) {\n return typeof v === 'function';\n}\nfunction isBoolean(v) {\n return typeof v === 'boolean';\n}\nfunction isCanLoad(guard) {\n return guard && isFunction(guard.canLoad);\n}\nfunction isCanActivate(guard) {\n return guard && isFunction(guard.canActivate);\n}\nfunction isCanActivateChild(guard) {\n return guard && isFunction(guard.canActivateChild);\n}\nfunction isCanDeactivate(guard) {\n return guard && isFunction(guard.canDeactivate);\n}\nfunction isCanMatch(guard) {\n return guard && isFunction(guard.canMatch);\n}\nfunction isEmptyError(e) {\n return e instanceof EmptyError || e?.name === 'EmptyError';\n}\nconst INITIAL_VALUE = /* @__PURE__ */Symbol('INITIAL_VALUE');\nfunction prioritizedGuardValue() {\n return switchMap(obs => {\n return combineLatest(obs.map(o => o.pipe(take(1), startWith(INITIAL_VALUE)))).pipe(map(results => {\n for (const result of results) {\n if (result === true) {\n continue;\n } else if (result === INITIAL_VALUE) {\n return INITIAL_VALUE;\n } else if (result === false || isRedirect(result)) {\n return result;\n }\n }\n return true;\n }), filter(item => item !== INITIAL_VALUE), take(1));\n });\n}\nfunction isRedirect(val) {\n return isUrlTree(val) || val instanceof RedirectCommand;\n}\nfunction abortSignalToObservable(signal) {\n if (signal.aborted) {\n return of(undefined).pipe(take(1));\n }\n return new Observable(subscriber => {\n const handler = () => {\n subscriber.next();\n subscriber.complete();\n };\n signal.addEventListener('abort', handler);\n return () => signal.removeEventListener('abort', handler);\n });\n}\nfunction takeUntilAbort(signal) {\n return takeUntil(abortSignalToObservable(signal));\n}\nfunction checkGuards(forwardEvent) {\n return mergeMap(t => {\n const {\n targetSnapshot,\n currentSnapshot,\n guards: {\n canActivateChecks,\n canDeactivateChecks\n }\n } = t;\n if (canDeactivateChecks.length === 0 && canActivateChecks.length === 0) {\n return of({\n ...t,\n guardsResult: true\n });\n }\n return runCanDeactivateChecks(canDeactivateChecks, targetSnapshot, currentSnapshot).pipe(mergeMap(canDeactivate => {\n return canDeactivate && isBoolean(canDeactivate) ? runCanActivateChecks(targetSnapshot, canActivateChecks, forwardEvent) : of(canDeactivate);\n }), map(guardsResult => ({\n ...t,\n guardsResult\n })));\n });\n}\nfunction runCanDeactivateChecks(checks, futureRSS, currRSS) {\n return from(checks).pipe(mergeMap(check => runCanDeactivate(check.component, check.route, currRSS, futureRSS)), first(result => {\n return result !== true;\n }, true));\n}\nfunction runCanActivateChecks(futureSnapshot, checks, forwardEvent) {\n return from(checks).pipe(concatMap(check => {\n return concat(fireChildActivationStart(check.route.parent, forwardEvent), fireActivationStart(check.route, forwardEvent), runCanActivateChild(futureSnapshot, check.path), runCanActivate(futureSnapshot, check.route));\n }), first(result => {\n return result !== true;\n }, true));\n}\nfunction fireActivationStart(snapshot, forwardEvent) {\n if (snapshot !== null && forwardEvent) {\n forwardEvent(new ActivationStart(snapshot));\n }\n return of(true);\n}\nfunction fireChildActivationStart(snapshot, forwardEvent) {\n if (snapshot !== null && forwardEvent) {\n forwardEvent(new ChildActivationStart(snapshot));\n }\n return of(true);\n}\nfunction runCanActivate(futureRSS, futureARS) {\n const canActivate = futureARS.routeConfig ? futureARS.routeConfig.canActivate : null;\n if (!canActivate || canActivate.length === 0) return of(true);\n const canActivateObservables = canActivate.map(canActivate => {\n return defer(() => {\n const closestInjector = futureARS._environmentInjector;\n const guard = getTokenOrFunctionIdentity(canActivate, closestInjector);\n const guardVal = isCanActivate(guard) ? guard.canActivate(futureARS, futureRSS) : runInInjectionContext(closestInjector, () => guard(futureARS, futureRSS));\n return wrapIntoObservable(guardVal).pipe(first());\n });\n });\n return of(canActivateObservables).pipe(prioritizedGuardValue());\n}\nfunction runCanActivateChild(futureRSS, path) {\n const futureARS = path[path.length - 1];\n const canActivateChildGuards = path.slice(0, path.length - 1).reverse().map(p => getCanActivateChild(p)).filter(_ => _ !== null);\n const canActivateChildGuardsMapped = canActivateChildGuards.map(d => {\n return defer(() => {\n const guardsMapped = d.guards.map(canActivateChild => {\n const closestInjector = d.node._environmentInjector;\n const guard = getTokenOrFunctionIdentity(canActivateChild, closestInjector);\n const guardVal = isCanActivateChild(guard) ? guard.canActivateChild(futureARS, futureRSS) : runInInjectionContext(closestInjector, () => guard(futureARS, futureRSS));\n return wrapIntoObservable(guardVal).pipe(first());\n });\n return of(guardsMapped).pipe(prioritizedGuardValue());\n });\n });\n return of(canActivateChildGuardsMapped).pipe(prioritizedGuardValue());\n}\nfunction runCanDeactivate(component, currARS, currRSS, futureRSS) {\n const canDeactivate = currARS && currARS.routeConfig ? currARS.routeConfig.canDeactivate : null;\n if (!canDeactivate || canDeactivate.length === 0) return of(true);\n const canDeactivateObservables = canDeactivate.map(c => {\n const closestInjector = currARS._environmentInjector;\n const guard = getTokenOrFunctionIdentity(c, closestInjector);\n const guardVal = isCanDeactivate(guard) ? guard.canDeactivate(component, currARS, currRSS, futureRSS) : runInInjectionContext(closestInjector, () => guard(component, currARS, currRSS, futureRSS));\n return wrapIntoObservable(guardVal).pipe(first());\n });\n return of(canDeactivateObservables).pipe(prioritizedGuardValue());\n}\nfunction runCanLoadGuards(injector, route, segments, urlSerializer, abortSignal) {\n const canLoad = route.canLoad;\n if (canLoad === undefined || canLoad.length === 0) {\n return of(true);\n }\n const canLoadObservables = canLoad.map(injectionToken => {\n const guard = getTokenOrFunctionIdentity(injectionToken, injector);\n const guardVal = isCanLoad(guard) ? guard.canLoad(route, segments) : runInInjectionContext(injector, () => guard(route, segments));\n const obs$ = wrapIntoObservable(guardVal);\n return abortSignal ? obs$.pipe(takeUntilAbort(abortSignal)) : obs$;\n });\n return of(canLoadObservables).pipe(prioritizedGuardValue(), redirectIfUrlTree(urlSerializer));\n}\nfunction redirectIfUrlTree(urlSerializer) {\n return pipe(tap(result => {\n if (typeof result === 'boolean') return;\n throw redirectingNavigationError(urlSerializer, result);\n }), map(result => result === true));\n}\nfunction runCanMatchGuards(injector, route, segments, urlSerializer, currentSnapshot, abortSignal) {\n const canMatch = route.canMatch;\n if (!canMatch || canMatch.length === 0) return of(true);\n const canMatchObservables = canMatch.map(injectionToken => {\n const guard = getTokenOrFunctionIdentity(injectionToken, injector);\n const guardVal = isCanMatch(guard) ? guard.canMatch(route, segments, currentSnapshot) : runInInjectionContext(injector, () => guard(route, segments, currentSnapshot));\n return wrapIntoObservable(guardVal).pipe(takeUntilAbort(abortSignal));\n });\n return of(canMatchObservables).pipe(prioritizedGuardValue(), redirectIfUrlTree(urlSerializer));\n}\nclass NoMatch extends Error {\n segmentGroup;\n constructor(segmentGroup) {\n super();\n this.segmentGroup = segmentGroup || null;\n Object.setPrototypeOf(this, NoMatch.prototype);\n }\n}\nclass AbsoluteRedirect extends Error {\n urlTree;\n constructor(urlTree) {\n super();\n this.urlTree = urlTree;\n Object.setPrototypeOf(this, AbsoluteRedirect.prototype);\n }\n}\nfunction namedOutletsRedirect(redirectTo) {\n throw new _RuntimeError(4000, (typeof ngDevMode === 'undefined' || ngDevMode) && `Only absolute redirects can have named outlets. redirectTo: '${redirectTo}'`);\n}\nfunction canLoadFails(route) {\n throw navigationCancelingError((typeof ngDevMode === 'undefined' || ngDevMode) && `Cannot load children because the guard of the route \"path: '${route.path}'\" returned false`, NavigationCancellationCode.GuardRejected);\n}\nclass ApplyRedirects {\n urlSerializer;\n urlTree;\n constructor(urlSerializer, urlTree) {\n this.urlSerializer = urlSerializer;\n this.urlTree = urlTree;\n }\n async lineralizeSegments(route, urlTree) {\n let res = [];\n let c = urlTree.root;\n while (true) {\n res = res.concat(c.segments);\n if (c.numberOfChildren === 0) {\n return res;\n }\n if (c.numberOfChildren > 1 || !c.children[PRIMARY_OUTLET]) {\n throw namedOutletsRedirect(`${route.redirectTo}`);\n }\n c = c.children[PRIMARY_OUTLET];\n }\n }\n async applyRedirectCommands(segments, redirectTo, posParams, currentSnapshot, injector) {\n const redirect = await getRedirectResult(redirectTo, currentSnapshot, injector);\n if (redirect instanceof UrlTree) {\n throw new AbsoluteRedirect(redirect);\n }\n const newTree = this.applyRedirectCreateUrlTree(redirect, this.urlSerializer.parse(redirect), segments, posParams);\n if (redirect[0] === '/') {\n throw new AbsoluteRedirect(newTree);\n }\n return newTree;\n }\n applyRedirectCreateUrlTree(redirectTo, urlTree, segments, posParams) {\n const newRoot = this.createSegmentGroup(redirectTo, urlTree.root, segments, posParams);\n return new UrlTree(newRoot, this.createQueryParams(urlTree.queryParams, this.urlTree.queryParams), urlTree.fragment);\n }\n createQueryParams(redirectToParams, actualParams) {\n const res = {};\n Object.entries(redirectToParams).forEach(([k, v]) => {\n const copySourceValue = typeof v === 'string' && v[0] === ':';\n if (copySourceValue) {\n const sourceName = v.substring(1);\n res[k] = actualParams[sourceName];\n } else {\n res[k] = v;\n }\n });\n return res;\n }\n createSegmentGroup(redirectTo, group, segments, posParams) {\n const updatedSegments = this.createSegments(redirectTo, group.segments, segments, posParams);\n let children = {};\n Object.entries(group.children).forEach(([name, child]) => {\n children[name] = this.createSegmentGroup(redirectTo, child, segments, posParams);\n });\n return new UrlSegmentGroup(updatedSegments, children);\n }\n createSegments(redirectTo, redirectToSegments, actualSegments, posParams) {\n return redirectToSegments.map(s => s.path[0] === ':' ? this.findPosParam(redirectTo, s, posParams) : this.findOrReturn(s, actualSegments));\n }\n findPosParam(redirectTo, redirectToUrlSegment, posParams) {\n const pos = posParams[redirectToUrlSegment.path.substring(1)];\n if (!pos) throw new _RuntimeError(4001, (typeof ngDevMode === 'undefined' || ngDevMode) && `Cannot redirect to '${redirectTo}'. Cannot find '${redirectToUrlSegment.path}'.`);\n return pos;\n }\n findOrReturn(redirectToUrlSegment, actualSegments) {\n let idx = 0;\n for (const s of actualSegments) {\n if (s.path === redirectToUrlSegment.path) {\n actualSegments.splice(idx);\n return s;\n }\n idx++;\n }\n return redirectToUrlSegment;\n }\n}\nfunction getRedirectResult(redirectTo, currentSnapshot, injector) {\n if (typeof redirectTo === 'string') {\n return Promise.resolve(redirectTo);\n }\n const redirectToFn = redirectTo;\n return firstValueFrom(wrapIntoObservable(runInInjectionContext(injector, () => redirectToFn(currentSnapshot))));\n}\nfunction getOrCreateRouteInjectorIfNeeded(route, currentInjector) {\n if (route.providers && !route._injector) {\n route._injector = createEnvironmentInjector(route.providers, currentInjector, `Route: ${route.path}`);\n }\n return route._injector ?? currentInjector;\n}\nfunction validateConfig(config, parentPath = '', requireStandaloneComponents = false) {\n for (let i = 0; i < config.length; i++) {\n const route = config[i];\n const fullPath = getFullPath(parentPath, route);\n validateNode(route, fullPath, requireStandaloneComponents);\n }\n}\nfunction assertStandalone(fullPath, component) {\n if (component && _isNgModule(component)) {\n throw new _RuntimeError(4014, `Invalid configuration of route '${fullPath}'. You are using 'loadComponent' with a module, ` + `but it must be used with standalone components. Use 'loadChildren' instead.`);\n } else if (component && !isStandalone(component)) {\n throw new _RuntimeError(4014, `Invalid configuration of route '${fullPath}'. The component must be standalone.`);\n }\n}\nfunction validateNode(route, fullPath, requireStandaloneComponents) {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n if (!route) {\n throw new _RuntimeError(4014, `\n Invalid configuration of route '${fullPath}': Encountered undefined route.\n The reason might be an extra comma.\n\n Example:\n const routes: Routes = [\n { path: '', redirectTo: '/dashboard', pathMatch: 'full' },\n { path: 'dashboard', component: DashboardComponent },, << two commas\n { path: 'detail/:id', component: HeroDetailComponent }\n ];\n `);\n }\n if (Array.isArray(route)) {\n throw new _RuntimeError(4014, `Invalid configuration of route '${fullPath}': Array cannot be specified`);\n }\n if (!route.redirectTo && !route.component && !route.loadComponent && !route.children && !route.loadChildren && route.outlet && route.outlet !== PRIMARY_OUTLET) {\n throw new _RuntimeError(4014, `Invalid configuration of route '${fullPath}': a componentless route without children or loadChildren cannot have a named outlet set`);\n }\n if (route.redirectTo && route.children) {\n throw new _RuntimeError(4014, `Invalid configuration of route '${fullPath}': redirectTo and children cannot be used together`);\n }\n if (route.redirectTo && route.loadChildren) {\n throw new _RuntimeError(4014, `Invalid configuration of route '${fullPath}': redirectTo and loadChildren cannot be used together`);\n }\n if (route.children && route.loadChildren) {\n throw new _RuntimeError(4014, `Invalid configuration of route '${fullPath}': children and loadChildren cannot be used together`);\n }\n if (route.component && route.loadComponent) {\n throw new _RuntimeError(4014, `Invalid configuration of route '${fullPath}': component and loadComponent cannot be used together`);\n }\n if (route.redirectTo) {\n if (route.component || route.loadComponent) {\n throw new _RuntimeError(4014, `Invalid configuration of route '${fullPath}': redirectTo and component/loadComponent cannot be used together`);\n }\n if (route.canMatch || route.canActivate) {\n throw new _RuntimeError(4014, `Invalid configuration of route '${fullPath}': redirectTo and ${route.canMatch ? 'canMatch' : 'canActivate'} cannot be used together.` + `Redirects happen before guards are executed.`);\n }\n }\n if (route.path && route.matcher) {\n throw new _RuntimeError(4014, `Invalid configuration of route '${fullPath}': path and matcher cannot be used together`);\n }\n if (route.redirectTo === void 0 && !route.component && !route.loadComponent && !route.children && !route.loadChildren) {\n throw new _RuntimeError(4014, `Invalid configuration of route '${fullPath}'. One of the following must be provided: component, loadComponent, redirectTo, children or loadChildren`);\n }\n if (route.path === void 0 && route.matcher === void 0) {\n throw new _RuntimeError(4014, `Invalid configuration of route '${fullPath}': routes must have either a path or a matcher specified`);\n }\n if (typeof route.path === 'string' && route.path.charAt(0) === '/') {\n throw new _RuntimeError(4014, `Invalid configuration of route '${fullPath}': path cannot start with a slash`);\n }\n if (route.path === '' && route.redirectTo !== void 0 && route.pathMatch === void 0) {\n const exp = `The default value of 'pathMatch' is 'prefix', but often the intent is to use 'full'.`;\n throw new _RuntimeError(4014, `Invalid configuration of route '{path: \"${fullPath}\", redirectTo: \"${route.redirectTo}\"}': please provide 'pathMatch'. ${exp}`);\n }\n if (requireStandaloneComponents) {\n assertStandalone(fullPath, route.component);\n }\n }\n if (route.children) {\n validateConfig(route.children, fullPath, requireStandaloneComponents);\n }\n}\nfunction getFullPath(parentPath, currentRoute) {\n if (!currentRoute) {\n return parentPath;\n }\n if (!parentPath && !currentRoute.path) {\n return '';\n } else if (parentPath && !currentRoute.path) {\n return `${parentPath}/`;\n } else if (!parentPath && currentRoute.path) {\n return currentRoute.path;\n } else {\n return `${parentPath}/${currentRoute.path}`;\n }\n}\nfunction getOutlet(route) {\n return route.outlet || PRIMARY_OUTLET;\n}\nfunction sortByMatchingOutlets(routes, outletName) {\n const sortedConfig = routes.filter(r => getOutlet(r) === outletName);\n sortedConfig.push(...routes.filter(r => getOutlet(r) !== outletName));\n return sortedConfig;\n}\nconst noMatch = {\n matched: false,\n consumedSegments: [],\n remainingSegments: [],\n parameters: {},\n positionalParamSegments: {}\n};\nfunction createPreMatchRouteSnapshot(snapshot) {\n return {\n routeConfig: snapshot.routeConfig,\n url: snapshot.url,\n params: snapshot.params,\n queryParams: snapshot.queryParams,\n fragment: snapshot.fragment,\n data: snapshot.data,\n outlet: snapshot.outlet,\n title: snapshot.title,\n paramMap: snapshot.paramMap,\n queryParamMap: snapshot.queryParamMap\n };\n}\nfunction matchWithChecks(segmentGroup, route, segments, injector, urlSerializer, createSnapshot, abortSignal) {\n const result = match(segmentGroup, route, segments);\n if (!result.matched) {\n return of(result);\n }\n const currentSnapshot = createPreMatchRouteSnapshot(createSnapshot(result));\n injector = getOrCreateRouteInjectorIfNeeded(route, injector);\n return runCanMatchGuards(injector, route, segments, urlSerializer, currentSnapshot, abortSignal).pipe(map(v => v === true ? result : {\n ...noMatch\n }));\n}\nfunction match(segmentGroup, route, segments) {\n if (route.path === '') {\n if (route.pathMatch === 'full' && (segmentGroup.hasChildren() || segments.length > 0)) {\n return {\n ...noMatch\n };\n }\n return {\n matched: true,\n consumedSegments: [],\n remainingSegments: segments,\n parameters: {},\n positionalParamSegments: {}\n };\n }\n const matcher = route.matcher || defaultUrlMatcher;\n const res = matcher(segments, segmentGroup, route);\n if (!res) return {\n ...noMatch\n };\n const posParams = {};\n Object.entries(res.posParams ?? {}).forEach(([k, v]) => {\n posParams[k] = v.path;\n });\n const parameters = res.consumed.length > 0 ? {\n ...posParams,\n ...res.consumed[res.consumed.length - 1].parameters\n } : posParams;\n return {\n matched: true,\n consumedSegments: res.consumed,\n remainingSegments: segments.slice(res.consumed.length),\n parameters,\n positionalParamSegments: res.posParams ?? {}\n };\n}\nfunction split(segmentGroup, consumedSegments, slicedSegments, config) {\n if (slicedSegments.length > 0 && containsEmptyPathMatchesWithNamedOutlets(segmentGroup, slicedSegments, config)) {\n const s = new UrlSegmentGroup(consumedSegments, createChildrenForEmptyPaths(config, new UrlSegmentGroup(slicedSegments, segmentGroup.children)));\n return {\n segmentGroup: s,\n slicedSegments: []\n };\n }\n if (slicedSegments.length === 0 && containsEmptyPathMatches(segmentGroup, slicedSegments, config)) {\n const s = new UrlSegmentGroup(segmentGroup.segments, addEmptyPathsToChildrenIfNeeded(segmentGroup, slicedSegments, config, segmentGroup.children));\n return {\n segmentGroup: s,\n slicedSegments\n };\n }\n const s = new UrlSegmentGroup(segmentGroup.segments, segmentGroup.children);\n return {\n segmentGroup: s,\n slicedSegments\n };\n}\nfunction addEmptyPathsToChildrenIfNeeded(segmentGroup, slicedSegments, routes, children) {\n const res = {};\n for (const r of routes) {\n if (emptyPathMatch(segmentGroup, slicedSegments, r) && !children[getOutlet(r)]) {\n const s = new UrlSegmentGroup([], {});\n res[getOutlet(r)] = s;\n }\n }\n return {\n ...children,\n ...res\n };\n}\nfunction createChildrenForEmptyPaths(routes, primarySegment) {\n const res = {};\n res[PRIMARY_OUTLET] = primarySegment;\n for (const r of routes) {\n if (r.path === '' && getOutlet(r) !== PRIMARY_OUTLET) {\n const s = new UrlSegmentGroup([], {});\n res[getOutlet(r)] = s;\n }\n }\n return res;\n}\nfunction containsEmptyPathMatchesWithNamedOutlets(segmentGroup, slicedSegments, routes) {\n return routes.some(r => emptyPathMatch(segmentGroup, slicedSegments, r) && getOutlet(r) !== PRIMARY_OUTLET);\n}\nfunction containsEmptyPathMatches(segmentGroup, slicedSegments, routes) {\n return routes.some(r => emptyPathMatch(segmentGroup, slicedSegments, r));\n}\nfunction emptyPathMatch(segmentGroup, slicedSegments, r) {\n if ((segmentGroup.hasChildren() || slicedSegments.length > 0) && r.pathMatch === 'full') {\n return false;\n }\n return r.path === '';\n}\nfunction noLeftoversInUrl(segmentGroup, segments, outlet) {\n return segments.length === 0 && !segmentGroup.children[outlet];\n}\nclass NoLeftoversInUrl {}\nasync function recognize$1(injector, configLoader, rootComponentType, config, urlTree, urlSerializer, paramsInheritanceStrategy = 'emptyOnly', abortSignal) {\n return new Recognizer(injector, configLoader, rootComponentType, config, urlTree, paramsInheritanceStrategy, urlSerializer, abortSignal).recognize();\n}\nconst MAX_ALLOWED_REDIRECTS = 31;\nclass Recognizer {\n injector;\n configLoader;\n rootComponentType;\n config;\n urlTree;\n paramsInheritanceStrategy;\n urlSerializer;\n abortSignal;\n applyRedirects;\n absoluteRedirectCount = 0;\n allowRedirects = true;\n constructor(injector, configLoader, rootComponentType, config, urlTree, paramsInheritanceStrategy, urlSerializer, abortSignal) {\n this.injector = injector;\n this.configLoader = configLoader;\n this.rootComponentType = rootComponentType;\n this.config = config;\n this.urlTree = urlTree;\n this.paramsInheritanceStrategy = paramsInheritanceStrategy;\n this.urlSerializer = urlSerializer;\n this.abortSignal = abortSignal;\n this.applyRedirects = new ApplyRedirects(this.urlSerializer, this.urlTree);\n }\n noMatchError(e) {\n return new _RuntimeError(4002, typeof ngDevMode === 'undefined' || ngDevMode ? `Cannot match any routes. URL Segment: '${e.segmentGroup}'` : `'${e.segmentGroup}'`);\n }\n async recognize() {\n const rootSegmentGroup = split(this.urlTree.root, [], [], this.config).segmentGroup;\n const {\n children,\n rootSnapshot\n } = await this.match(rootSegmentGroup);\n const rootNode = new TreeNode(rootSnapshot, children);\n const routeState = new RouterStateSnapshot('', rootNode);\n const tree = createUrlTreeFromSnapshot(rootSnapshot, [], this.urlTree.queryParams, this.urlTree.fragment);\n tree.queryParams = this.urlTree.queryParams;\n routeState.url = this.urlSerializer.serialize(tree);\n return {\n state: routeState,\n tree\n };\n }\n async match(rootSegmentGroup) {\n const rootSnapshot = new ActivatedRouteSnapshot([], Object.freeze({}), Object.freeze({\n ...this.urlTree.queryParams\n }), this.urlTree.fragment, Object.freeze({}), PRIMARY_OUTLET, this.rootComponentType, null, {}, this.injector);\n try {\n const children = await this.processSegmentGroup(this.injector, this.config, rootSegmentGroup, PRIMARY_OUTLET, rootSnapshot);\n return {\n children,\n rootSnapshot\n };\n } catch (e) {\n if (e instanceof AbsoluteRedirect) {\n this.urlTree = e.urlTree;\n return this.match(e.urlTree.root);\n }\n if (e instanceof NoMatch) {\n throw this.noMatchError(e);\n }\n throw e;\n }\n }\n async processSegmentGroup(injector, config, segmentGroup, outlet, parentRoute) {\n if (segmentGroup.segments.length === 0 && segmentGroup.hasChildren()) {\n return this.processChildren(injector, config, segmentGroup, parentRoute);\n }\n const child = await this.processSegment(injector, config, segmentGroup, segmentGroup.segments, outlet, true, parentRoute);\n return child instanceof TreeNode ? [child] : [];\n }\n async processChildren(injector, config, segmentGroup, parentRoute) {\n const childOutlets = [];\n for (const child of Object.keys(segmentGroup.children)) {\n if (child === 'primary') {\n childOutlets.unshift(child);\n } else {\n childOutlets.push(child);\n }\n }\n let children = [];\n for (const childOutlet of childOutlets) {\n const child = segmentGroup.children[childOutlet];\n const sortedConfig = sortByMatchingOutlets(config, childOutlet);\n const outletChildren = await this.processSegmentGroup(injector, sortedConfig, child, childOutlet, parentRoute);\n children.push(...outletChildren);\n }\n const mergedChildren = mergeEmptyPathMatches(children);\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n checkOutletNameUniqueness(mergedChildren);\n }\n sortActivatedRouteSnapshots(mergedChildren);\n return mergedChildren;\n }\n async processSegment(injector, routes, segmentGroup, segments, outlet, allowRedirects, parentRoute) {\n for (const r of routes) {\n try {\n return await this.processSegmentAgainstRoute(r._injector ?? injector, routes, r, segmentGroup, segments, outlet, allowRedirects, parentRoute);\n } catch (e) {\n if (e instanceof NoMatch || isEmptyError(e)) {\n continue;\n }\n throw e;\n }\n }\n if (noLeftoversInUrl(segmentGroup, segments, outlet)) {\n return new NoLeftoversInUrl();\n }\n throw new NoMatch(segmentGroup);\n }\n async processSegmentAgainstRoute(injector, routes, route, rawSegment, segments, outlet, allowRedirects, parentRoute) {\n if (getOutlet(route) !== outlet && (outlet === PRIMARY_OUTLET || !emptyPathMatch(rawSegment, segments, route))) {\n throw new NoMatch(rawSegment);\n }\n if (route.redirectTo === undefined) {\n return this.matchSegmentAgainstRoute(injector, rawSegment, route, segments, outlet, parentRoute);\n }\n if (this.allowRedirects && allowRedirects) {\n return this.expandSegmentAgainstRouteUsingRedirect(injector, rawSegment, routes, route, segments, outlet, parentRoute);\n }\n throw new NoMatch(rawSegment);\n }\n async expandSegmentAgainstRouteUsingRedirect(injector, segmentGroup, routes, route, segments, outlet, parentRoute) {\n const {\n matched,\n parameters,\n consumedSegments,\n positionalParamSegments,\n remainingSegments\n } = match(segmentGroup, route, segments);\n if (!matched) throw new NoMatch(segmentGroup);\n if (typeof route.redirectTo === 'string' && route.redirectTo[0] === '/') {\n this.absoluteRedirectCount++;\n if (this.absoluteRedirectCount > MAX_ALLOWED_REDIRECTS) {\n if (ngDevMode) {\n throw new _RuntimeError(4016, `Detected possible infinite redirect when redirecting from '${this.urlTree}' to '${route.redirectTo}'.\\n` + `This is currently a dev mode only error but will become a` + ` call stack size exceeded error in production in a future major version.`);\n }\n this.allowRedirects = false;\n }\n }\n const currentSnapshot = this.createSnapshot(injector, route, segments, parameters, parentRoute);\n if (this.abortSignal.aborted) {\n throw new Error(this.abortSignal.reason);\n }\n const newTree = await this.applyRedirects.applyRedirectCommands(consumedSegments, route.redirectTo, positionalParamSegments, createPreMatchRouteSnapshot(currentSnapshot), injector);\n const newSegments = await this.applyRedirects.lineralizeSegments(route, newTree);\n return this.processSegment(injector, routes, segmentGroup, newSegments.concat(remainingSegments), outlet, false, parentRoute);\n }\n createSnapshot(injector, route, segments, parameters, parentRoute) {\n const snapshot = new ActivatedRouteSnapshot(segments, parameters, Object.freeze({\n ...this.urlTree.queryParams\n }), this.urlTree.fragment, getData(route), getOutlet(route), route.component ?? route._loadedComponent ?? null, route, getResolve(route), injector);\n const inherited = getInherited(snapshot, parentRoute, this.paramsInheritanceStrategy);\n snapshot.params = Object.freeze(inherited.params);\n snapshot.data = Object.freeze(inherited.data);\n return snapshot;\n }\n async matchSegmentAgainstRoute(injector, rawSegment, route, segments, outlet, parentRoute) {\n if (this.abortSignal.aborted) {\n throw new Error(this.abortSignal.reason);\n }\n const createSnapshot = result => this.createSnapshot(injector, route, result.consumedSegments, result.parameters, parentRoute);\n const result = await firstValueFrom(matchWithChecks(rawSegment, route, segments, injector, this.urlSerializer, createSnapshot, this.abortSignal));\n if (route.path === '**') {\n rawSegment.children = {};\n }\n if (!result?.matched) {\n throw new NoMatch(rawSegment);\n }\n injector = route._injector ?? injector;\n const {\n routes: childConfig\n } = await this.getChildConfig(injector, route, segments);\n const childInjector = route._loadedInjector ?? injector;\n const {\n parameters,\n consumedSegments,\n remainingSegments\n } = result;\n const snapshot = this.createSnapshot(injector, route, consumedSegments, parameters, parentRoute);\n const {\n segmentGroup,\n slicedSegments\n } = split(rawSegment, consumedSegments, remainingSegments, childConfig);\n if (slicedSegments.length === 0 && segmentGroup.hasChildren()) {\n const children = await this.processChildren(childInjector, childConfig, segmentGroup, snapshot);\n return new TreeNode(snapshot, children);\n }\n if (childConfig.length === 0 && slicedSegments.length === 0) {\n return new TreeNode(snapshot, []);\n }\n const matchedOnOutlet = getOutlet(route) === outlet;\n const child = await this.processSegment(childInjector, childConfig, segmentGroup, slicedSegments, matchedOnOutlet ? PRIMARY_OUTLET : outlet, true, snapshot);\n return new TreeNode(snapshot, child instanceof TreeNode ? [child] : []);\n }\n async getChildConfig(injector, route, segments) {\n if (route.children) {\n return {\n routes: route.children,\n injector\n };\n }\n if (route.loadChildren) {\n if (route._loadedRoutes !== undefined) {\n const ngModuleFactory = route._loadedNgModuleFactory;\n if (ngModuleFactory && !route._loadedInjector) {\n route._loadedInjector = ngModuleFactory.create(injector).injector;\n }\n return {\n routes: route._loadedRoutes,\n injector: route._loadedInjector\n };\n }\n if (this.abortSignal.aborted) {\n throw new Error(this.abortSignal.reason);\n }\n const shouldLoadResult = await firstValueFrom(runCanLoadGuards(injector, route, segments, this.urlSerializer, this.abortSignal));\n if (shouldLoadResult) {\n const cfg = await this.configLoader.loadChildren(injector, route);\n route._loadedRoutes = cfg.routes;\n route._loadedInjector = cfg.injector;\n route._loadedNgModuleFactory = cfg.factory;\n return cfg;\n }\n throw canLoadFails(route);\n }\n return {\n routes: [],\n injector\n };\n }\n}\nfunction sortActivatedRouteSnapshots(nodes) {\n nodes.sort((a, b) => {\n if (a.value.outlet === PRIMARY_OUTLET) return -1;\n if (b.value.outlet === PRIMARY_OUTLET) return 1;\n return a.value.outlet.localeCompare(b.value.outlet);\n });\n}\nfunction hasEmptyPathConfig(node) {\n const config = node.value.routeConfig;\n return config && config.path === '';\n}\nfunction mergeEmptyPathMatches(nodes) {\n const result = [];\n const mergedNodes = new Set();\n for (const node of nodes) {\n if (!hasEmptyPathConfig(node)) {\n result.push(node);\n continue;\n }\n const duplicateEmptyPathNode = result.find(resultNode => node.value.routeConfig === resultNode.value.routeConfig);\n if (duplicateEmptyPathNode !== undefined) {\n duplicateEmptyPathNode.children.push(...node.children);\n mergedNodes.add(duplicateEmptyPathNode);\n } else {\n result.push(node);\n }\n }\n for (const mergedNode of mergedNodes) {\n const mergedChildren = mergeEmptyPathMatches(mergedNode.children);\n result.push(new TreeNode(mergedNode.value, mergedChildren));\n }\n return result.filter(n => !mergedNodes.has(n));\n}\nfunction checkOutletNameUniqueness(nodes) {\n const names = {};\n nodes.forEach(n => {\n const routeWithSameOutletName = names[n.value.outlet];\n if (routeWithSameOutletName) {\n const p = routeWithSameOutletName.url.map(s => s.toString()).join('/');\n const c = n.value.url.map(s => s.toString()).join('/');\n throw new _RuntimeError(4006, (typeof ngDevMode === 'undefined' || ngDevMode) && `Two segments cannot have the same outlet name: '${p}' and '${c}'.`);\n }\n names[n.value.outlet] = n.value;\n });\n}\nfunction getData(route) {\n return route.data || {};\n}\nfunction getResolve(route) {\n return route.resolve || {};\n}\nfunction recognize(injector, configLoader, rootComponentType, config, serializer, paramsInheritanceStrategy, abortSignal) {\n return mergeMap(async t => {\n const {\n state: targetSnapshot,\n tree: urlAfterRedirects\n } = await recognize$1(injector, configLoader, rootComponentType, config, t.extractedUrl, serializer, paramsInheritanceStrategy, abortSignal);\n return {\n ...t,\n targetSnapshot,\n urlAfterRedirects\n };\n });\n}\nfunction resolveData(paramsInheritanceStrategy) {\n return mergeMap(t => {\n const {\n targetSnapshot,\n guards: {\n canActivateChecks\n }\n } = t;\n if (!canActivateChecks.length) {\n return of(t);\n }\n const routesWithResolversToRun = new Set(canActivateChecks.map(check => check.route));\n const routesNeedingDataUpdates = new Set();\n for (const route of routesWithResolversToRun) {\n if (routesNeedingDataUpdates.has(route)) {\n continue;\n }\n for (const newRoute of flattenRouteTree(route)) {\n routesNeedingDataUpdates.add(newRoute);\n }\n }\n let routesProcessed = 0;\n return from(routesNeedingDataUpdates).pipe(concatMap(route => {\n if (routesWithResolversToRun.has(route)) {\n return runResolve(route, targetSnapshot, paramsInheritanceStrategy);\n } else {\n route.data = getInherited(route, route.parent, paramsInheritanceStrategy).resolve;\n return of(void 0);\n }\n }), tap(() => routesProcessed++), takeLast(1), mergeMap(_ => routesProcessed === routesNeedingDataUpdates.size ? of(t) : EMPTY));\n });\n}\nfunction flattenRouteTree(route) {\n const descendants = route.children.map(child => flattenRouteTree(child)).flat();\n return [route, ...descendants];\n}\nfunction runResolve(futureARS, futureRSS, paramsInheritanceStrategy) {\n const config = futureARS.routeConfig;\n const resolve = futureARS._resolve;\n if (config?.title !== undefined && !hasStaticTitle(config)) {\n resolve[RouteTitleKey] = config.title;\n }\n return defer(() => {\n futureARS.data = getInherited(futureARS, futureARS.parent, paramsInheritanceStrategy).resolve;\n return resolveNode(resolve, futureARS, futureRSS).pipe(map(resolvedData => {\n futureARS._resolvedData = resolvedData;\n futureARS.data = {\n ...futureARS.data,\n ...resolvedData\n };\n return null;\n }));\n });\n}\nfunction resolveNode(resolve, futureARS, futureRSS) {\n const keys = getDataKeys(resolve);\n if (keys.length === 0) {\n return of({});\n }\n const data = {};\n return from(keys).pipe(mergeMap(key => getResolver(resolve[key], futureARS, futureRSS).pipe(first(), tap(value => {\n if (value instanceof RedirectCommand) {\n throw redirectingNavigationError(new DefaultUrlSerializer(), value);\n }\n data[key] = value;\n }))), takeLast(1), map(() => data), catchError(e => isEmptyError(e) ? EMPTY : throwError(e)));\n}\nfunction getResolver(injectionToken, futureARS, futureRSS) {\n const closestInjector = futureARS._environmentInjector;\n const resolver = getTokenOrFunctionIdentity(injectionToken, closestInjector);\n const resolverValue = resolver.resolve ? resolver.resolve(futureARS, futureRSS) : runInInjectionContext(closestInjector, () => resolver(futureARS, futureRSS));\n return wrapIntoObservable(resolverValue);\n}\nfunction switchTap(next) {\n return switchMap(v => {\n const nextResult = next(v);\n if (nextResult) {\n return from(nextResult).pipe(map(() => v));\n }\n return of(v);\n });\n}\nlet TitleStrategy = /*#__PURE__*/(() => {\n class TitleStrategy {\n buildTitle(snapshot) {\n let pageTitle;\n let route = snapshot.root;\n while (route !== undefined) {\n pageTitle = this.getResolvedTitleForRoute(route) ?? pageTitle;\n route = route.children.find(child => child.outlet === PRIMARY_OUTLET);\n }\n return pageTitle;\n }\n getResolvedTitleForRoute(snapshot) {\n return snapshot.data[RouteTitleKey];\n }\n static \u0275fac = function TitleStrategy_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || TitleStrategy)();\n };\n static \u0275prov = /* @__PURE__ */i0.\u0275\u0275defineInjectable({\n token: TitleStrategy,\n factory: () => (() => inject(DefaultTitleStrategy))(),\n providedIn: 'root'\n });\n }\n return TitleStrategy;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet DefaultTitleStrategy = /*#__PURE__*/(() => {\n class DefaultTitleStrategy extends TitleStrategy {\n title;\n constructor(title) {\n super();\n this.title = title;\n }\n updateTitle(snapshot) {\n const title = this.buildTitle(snapshot);\n if (title !== undefined) {\n this.title.setTitle(title);\n }\n }\n static \u0275fac = function DefaultTitleStrategy_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || DefaultTitleStrategy)(i0.\u0275\u0275inject(i1.Title));\n };\n static \u0275prov = /* @__PURE__ */i0.\u0275\u0275defineInjectable({\n token: DefaultTitleStrategy,\n factory: DefaultTitleStrategy.\u0275fac,\n providedIn: 'root'\n });\n }\n return DefaultTitleStrategy;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst ROUTER_CONFIGURATION = /*#__PURE__*/new InjectionToken(typeof ngDevMode === 'undefined' || ngDevMode ? 'router config' : '', {\n factory: () => ({})\n});\nconst ROUTES = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'ROUTES' : '');\nlet RouterConfigLoader = /*#__PURE__*/(() => {\n class RouterConfigLoader {\n componentLoaders = new WeakMap();\n childrenLoaders = new WeakMap();\n onLoadStartListener;\n onLoadEndListener;\n compiler = inject(Compiler);\n async loadComponent(injector, route) {\n if (this.componentLoaders.get(route)) {\n return this.componentLoaders.get(route);\n } else if (route._loadedComponent) {\n return Promise.resolve(route._loadedComponent);\n }\n if (this.onLoadStartListener) {\n this.onLoadStartListener(route);\n }\n const loader = (async () => {\n try {\n const loaded = await wrapIntoPromise(runInInjectionContext(injector, () => route.loadComponent()));\n const component = await maybeResolveResources(maybeUnwrapDefaultExport(loaded));\n if (this.onLoadEndListener) {\n this.onLoadEndListener(route);\n }\n (typeof ngDevMode === 'undefined' || ngDevMode) && assertStandalone(route.path ?? '', component);\n route._loadedComponent = component;\n return component;\n } finally {\n this.componentLoaders.delete(route);\n }\n })();\n this.componentLoaders.set(route, loader);\n return loader;\n }\n loadChildren(parentInjector, route) {\n if (this.childrenLoaders.get(route)) {\n return this.childrenLoaders.get(route);\n } else if (route._loadedRoutes) {\n return Promise.resolve({\n routes: route._loadedRoutes,\n injector: route._loadedInjector\n });\n }\n if (this.onLoadStartListener) {\n this.onLoadStartListener(route);\n }\n const loader = (async () => {\n try {\n const result = await loadChildren(route, this.compiler, parentInjector, this.onLoadEndListener);\n route._loadedRoutes = result.routes;\n route._loadedInjector = result.injector;\n route._loadedNgModuleFactory = result.factory;\n return result;\n } finally {\n this.childrenLoaders.delete(route);\n }\n })();\n this.childrenLoaders.set(route, loader);\n return loader;\n }\n static \u0275fac = function RouterConfigLoader_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || RouterConfigLoader)();\n };\n static \u0275prov = /* @__PURE__ */i0.\u0275\u0275defineInjectable({\n token: RouterConfigLoader,\n factory: RouterConfigLoader.\u0275fac,\n providedIn: 'root'\n });\n }\n return RouterConfigLoader;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nasync function loadChildren(route, compiler, parentInjector, onLoadEndListener) {\n const loaded = await wrapIntoPromise(runInInjectionContext(parentInjector, () => route.loadChildren()));\n const t = await maybeResolveResources(maybeUnwrapDefaultExport(loaded));\n let factoryOrRoutes;\n if (t instanceof NgModuleFactory || Array.isArray(t)) {\n factoryOrRoutes = t;\n } else {\n factoryOrRoutes = await compiler.compileModuleAsync(t);\n }\n if (onLoadEndListener) {\n onLoadEndListener(route);\n }\n let injector;\n let rawRoutes;\n let requireStandaloneComponents = false;\n let factory = undefined;\n if (Array.isArray(factoryOrRoutes)) {\n rawRoutes = factoryOrRoutes;\n requireStandaloneComponents = true;\n } else {\n injector = factoryOrRoutes.create(parentInjector).injector;\n factory = factoryOrRoutes;\n rawRoutes = injector.get(ROUTES, [], {\n optional: true,\n self: true\n }).flat();\n }\n const routes = rawRoutes.map(standardizeConfig);\n (typeof ngDevMode === 'undefined' || ngDevMode) && validateConfig(routes, route.path, requireStandaloneComponents);\n return {\n routes,\n injector,\n factory\n };\n}\nfunction isWrappedDefaultExport(value) {\n return value && typeof value === 'object' && 'default' in value;\n}\nfunction maybeUnwrapDefaultExport(input) {\n return isWrappedDefaultExport(input) ? input['default'] : input;\n}\nasync function maybeResolveResources(value) {\n if ((typeof ngJitMode === 'undefined' || ngJitMode) && typeof fetch === 'function') {\n try {\n await _resolveComponentResources(fetch);\n } catch (error) {\n console.error(error);\n }\n }\n return value;\n}\nlet UrlHandlingStrategy = /*#__PURE__*/(() => {\n class UrlHandlingStrategy {\n static \u0275fac = function UrlHandlingStrategy_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || UrlHandlingStrategy)();\n };\n static \u0275prov = /* @__PURE__ */i0.\u0275\u0275defineInjectable({\n token: UrlHandlingStrategy,\n factory: () => (() => inject(DefaultUrlHandlingStrategy))(),\n providedIn: 'root'\n });\n }\n return UrlHandlingStrategy;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet DefaultUrlHandlingStrategy = /*#__PURE__*/(() => {\n class DefaultUrlHandlingStrategy {\n shouldProcessUrl(url) {\n return true;\n }\n extract(url) {\n return url;\n }\n merge(newUrlPart, wholeUrl) {\n return newUrlPart;\n }\n static \u0275fac = function DefaultUrlHandlingStrategy_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || DefaultUrlHandlingStrategy)();\n };\n static \u0275prov = /* @__PURE__ */i0.\u0275\u0275defineInjectable({\n token: DefaultUrlHandlingStrategy,\n factory: DefaultUrlHandlingStrategy.\u0275fac,\n providedIn: 'root'\n });\n }\n return DefaultUrlHandlingStrategy;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst CREATE_VIEW_TRANSITION = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'view transition helper' : '');\nconst VIEW_TRANSITION_OPTIONS = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'view transition options' : '');\nfunction createViewTransition(injector, from, to) {\n const transitionOptions = injector.get(VIEW_TRANSITION_OPTIONS);\n const document = injector.get(DOCUMENT);\n if (!document.startViewTransition || transitionOptions.skipNextTransition) {\n transitionOptions.skipNextTransition = false;\n return new Promise(resolve => setTimeout(resolve));\n }\n let resolveViewTransitionStarted;\n const viewTransitionStarted = new Promise(resolve => {\n resolveViewTransitionStarted = resolve;\n });\n const transition = document.startViewTransition(() => {\n resolveViewTransitionStarted();\n return createRenderPromise(injector);\n });\n transition.updateCallbackDone.catch(error => {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n console.error(error);\n }\n });\n transition.ready.catch(error => {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n console.error(error);\n }\n });\n transition.finished.catch(error => {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n console.error(error);\n }\n });\n const {\n onViewTransitionCreated\n } = transitionOptions;\n if (onViewTransitionCreated) {\n runInInjectionContext(injector, () => onViewTransitionCreated({\n transition,\n from,\n to\n }));\n }\n return viewTransitionStarted;\n}\nfunction createRenderPromise(injector) {\n return new Promise(resolve => {\n afterNextRender({\n read: () => setTimeout(resolve)\n }, {\n injector\n });\n });\n}\nconst noop = () => {};\nconst NAVIGATION_ERROR_HANDLER = /*#__PURE__*/new InjectionToken(typeof ngDevMode === 'undefined' || ngDevMode ? 'navigation error handler' : '');\nlet NavigationTransitions = /*#__PURE__*/(() => {\n class NavigationTransitions {\n currentNavigation = signal(null, {\n ...(ngDevMode ? {\n debugName: \"currentNavigation\"\n } : {}),\n equal: () => false\n });\n currentTransition = null;\n lastSuccessfulNavigation = signal(null, ...(ngDevMode ? [{\n debugName: \"lastSuccessfulNavigation\"\n }] : []));\n events = new Subject();\n transitionAbortWithErrorSubject = new Subject();\n configLoader = inject(RouterConfigLoader);\n environmentInjector = inject(EnvironmentInjector);\n destroyRef = inject(DestroyRef);\n urlSerializer = inject(UrlSerializer);\n rootContexts = inject(ChildrenOutletContexts);\n location = inject(Location);\n inputBindingEnabled = inject(INPUT_BINDER, {\n optional: true\n }) !== null;\n titleStrategy = inject(TitleStrategy);\n options = inject(ROUTER_CONFIGURATION, {\n optional: true\n }) || {};\n paramsInheritanceStrategy = this.options.paramsInheritanceStrategy || 'emptyOnly';\n urlHandlingStrategy = inject(UrlHandlingStrategy);\n createViewTransition = inject(CREATE_VIEW_TRANSITION, {\n optional: true\n });\n navigationErrorHandler = inject(NAVIGATION_ERROR_HANDLER, {\n optional: true\n });\n navigationId = 0;\n get hasRequestedNavigation() {\n return this.navigationId !== 0;\n }\n transitions;\n afterPreactivation = () => of(void 0);\n rootComponentType = null;\n destroyed = false;\n constructor() {\n const onLoadStart = r => this.events.next(new RouteConfigLoadStart(r));\n const onLoadEnd = r => this.events.next(new RouteConfigLoadEnd(r));\n this.configLoader.onLoadEndListener = onLoadEnd;\n this.configLoader.onLoadStartListener = onLoadStart;\n this.destroyRef.onDestroy(() => {\n this.destroyed = true;\n });\n }\n complete() {\n this.transitions?.complete();\n }\n handleNavigationRequest(request) {\n const id = ++this.navigationId;\n untracked(() => {\n this.transitions?.next({\n ...request,\n extractedUrl: this.urlHandlingStrategy.extract(request.rawUrl),\n targetSnapshot: null,\n targetRouterState: null,\n guards: {\n canActivateChecks: [],\n canDeactivateChecks: []\n },\n guardsResult: null,\n id,\n routesRecognizeHandler: {},\n beforeActivateHandler: {}\n });\n });\n }\n setupNavigations(router) {\n this.transitions = new BehaviorSubject(null);\n return this.transitions.pipe(filter(t => t !== null), switchMap(overallTransitionState => {\n let completedOrAborted = false;\n const abortController = new AbortController();\n const shouldContinueNavigation = () => {\n return !completedOrAborted && this.currentTransition?.id === overallTransitionState.id;\n };\n return of(overallTransitionState).pipe(switchMap(t => {\n if (this.navigationId > overallTransitionState.id) {\n const cancellationReason = typeof ngDevMode === 'undefined' || ngDevMode ? `Navigation ID ${overallTransitionState.id} is not equal to the current navigation id ${this.navigationId}` : '';\n this.cancelNavigationTransition(overallTransitionState, cancellationReason, NavigationCancellationCode.SupersededByNewNavigation);\n return EMPTY;\n }\n this.currentTransition = overallTransitionState;\n const lastSuccessfulNavigation = this.lastSuccessfulNavigation();\n this.currentNavigation.set({\n id: t.id,\n initialUrl: t.rawUrl,\n extractedUrl: t.extractedUrl,\n targetBrowserUrl: typeof t.extras.browserUrl === 'string' ? this.urlSerializer.parse(t.extras.browserUrl) : t.extras.browserUrl,\n trigger: t.source,\n extras: t.extras,\n previousNavigation: !lastSuccessfulNavigation ? null : {\n ...lastSuccessfulNavigation,\n previousNavigation: null\n },\n abort: () => abortController.abort(),\n routesRecognizeHandler: t.routesRecognizeHandler,\n beforeActivateHandler: t.beforeActivateHandler\n });\n const urlTransition = !router.navigated || this.isUpdatingInternalState() || this.isUpdatedBrowserUrl();\n const onSameUrlNavigation = t.extras.onSameUrlNavigation ?? router.onSameUrlNavigation;\n if (!urlTransition && onSameUrlNavigation !== 'reload') {\n const reason = typeof ngDevMode === 'undefined' || ngDevMode ? `Navigation to ${t.rawUrl} was ignored because it is the same as the current Router URL.` : '';\n this.events.next(new NavigationSkipped(t.id, this.urlSerializer.serialize(t.rawUrl), reason, NavigationSkippedCode.IgnoredSameUrlNavigation));\n t.resolve(false);\n return EMPTY;\n }\n if (this.urlHandlingStrategy.shouldProcessUrl(t.rawUrl)) {\n return of(t).pipe(switchMap(t => {\n this.events.next(new NavigationStart(t.id, this.urlSerializer.serialize(t.extractedUrl), t.source, t.restoredState));\n if (t.id !== this.navigationId) {\n return EMPTY;\n }\n return Promise.resolve(t);\n }), recognize(this.environmentInjector, this.configLoader, this.rootComponentType, router.config, this.urlSerializer, this.paramsInheritanceStrategy, abortController.signal), tap(t => {\n overallTransitionState.targetSnapshot = t.targetSnapshot;\n overallTransitionState.urlAfterRedirects = t.urlAfterRedirects;\n this.currentNavigation.update(nav => {\n nav.finalUrl = t.urlAfterRedirects;\n return nav;\n });\n this.events.next(new BeforeRoutesRecognized());\n }), switchMap(value => from(overallTransitionState.routesRecognizeHandler.deferredHandle ?? of(void 0)).pipe(map(() => value))), tap(() => {\n const routesRecognized = new RoutesRecognized(t.id, this.urlSerializer.serialize(t.extractedUrl), this.urlSerializer.serialize(t.urlAfterRedirects), t.targetSnapshot);\n this.events.next(routesRecognized);\n }));\n } else if (urlTransition && this.urlHandlingStrategy.shouldProcessUrl(t.currentRawUrl)) {\n const {\n id,\n extractedUrl,\n source,\n restoredState,\n extras\n } = t;\n const navStart = new NavigationStart(id, this.urlSerializer.serialize(extractedUrl), source, restoredState);\n this.events.next(navStart);\n const targetSnapshot = createEmptyState(this.rootComponentType, this.environmentInjector).snapshot;\n this.currentTransition = overallTransitionState = {\n ...t,\n targetSnapshot,\n urlAfterRedirects: extractedUrl,\n extras: {\n ...extras,\n skipLocationChange: false,\n replaceUrl: false\n }\n };\n this.currentNavigation.update(nav => {\n nav.finalUrl = extractedUrl;\n return nav;\n });\n return of(overallTransitionState);\n } else {\n const reason = typeof ngDevMode === 'undefined' || ngDevMode ? `Navigation was ignored because the UrlHandlingStrategy` + ` indicated neither the current URL ${t.currentRawUrl} nor target URL ${t.rawUrl} should be processed.` : '';\n this.events.next(new NavigationSkipped(t.id, this.urlSerializer.serialize(t.extractedUrl), reason, NavigationSkippedCode.IgnoredByUrlHandlingStrategy));\n t.resolve(false);\n return EMPTY;\n }\n }), map(t => {\n const guardsStart = new GuardsCheckStart(t.id, this.urlSerializer.serialize(t.extractedUrl), this.urlSerializer.serialize(t.urlAfterRedirects), t.targetSnapshot);\n this.events.next(guardsStart);\n this.currentTransition = overallTransitionState = {\n ...t,\n guards: getAllRouteGuards(t.targetSnapshot, t.currentSnapshot, this.rootContexts)\n };\n return overallTransitionState;\n }), checkGuards(evt => this.events.next(evt)), switchMap(t => {\n overallTransitionState.guardsResult = t.guardsResult;\n if (t.guardsResult && typeof t.guardsResult !== 'boolean') {\n throw redirectingNavigationError(this.urlSerializer, t.guardsResult);\n }\n const guardsEnd = new GuardsCheckEnd(t.id, this.urlSerializer.serialize(t.extractedUrl), this.urlSerializer.serialize(t.urlAfterRedirects), t.targetSnapshot, !!t.guardsResult);\n this.events.next(guardsEnd);\n if (!shouldContinueNavigation()) {\n return EMPTY;\n }\n if (!t.guardsResult) {\n this.cancelNavigationTransition(t, '', NavigationCancellationCode.GuardRejected);\n return EMPTY;\n }\n if (t.guards.canActivateChecks.length === 0) {\n return of(t);\n }\n const resolveStart = new ResolveStart(t.id, this.urlSerializer.serialize(t.extractedUrl), this.urlSerializer.serialize(t.urlAfterRedirects), t.targetSnapshot);\n this.events.next(resolveStart);\n if (!shouldContinueNavigation()) {\n return EMPTY;\n }\n let dataResolved = false;\n return of(t).pipe(resolveData(this.paramsInheritanceStrategy), tap({\n next: () => {\n dataResolved = true;\n const resolveEnd = new ResolveEnd(t.id, this.urlSerializer.serialize(t.extractedUrl), this.urlSerializer.serialize(t.urlAfterRedirects), t.targetSnapshot);\n this.events.next(resolveEnd);\n },\n complete: () => {\n if (!dataResolved) {\n this.cancelNavigationTransition(t, typeof ngDevMode === 'undefined' || ngDevMode ? `At least one route resolver didn't emit any value.` : '', NavigationCancellationCode.NoDataFromResolver);\n }\n }\n }));\n }), switchTap(t => {\n const loadComponents = route => {\n const loaders = [];\n if (route.routeConfig?._loadedComponent) {\n route.component = route.routeConfig?._loadedComponent;\n } else if (route.routeConfig?.loadComponent) {\n const injector = route._environmentInjector;\n loaders.push(this.configLoader.loadComponent(injector, route.routeConfig).then(loadedComponent => {\n route.component = loadedComponent;\n }));\n }\n for (const child of route.children) {\n loaders.push(...loadComponents(child));\n }\n return loaders;\n };\n const loaders = loadComponents(t.targetSnapshot.root);\n return loaders.length === 0 ? of(t) : from(Promise.all(loaders).then(() => t));\n }), switchTap(() => this.afterPreactivation()), switchMap(() => {\n const {\n currentSnapshot,\n targetSnapshot\n } = overallTransitionState;\n const viewTransitionStarted = this.createViewTransition?.(this.environmentInjector, currentSnapshot.root, targetSnapshot.root);\n return viewTransitionStarted ? from(viewTransitionStarted).pipe(map(() => overallTransitionState)) : of(overallTransitionState);\n }), take(1), switchMap(t => {\n const targetRouterState = createRouterState(router.routeReuseStrategy, t.targetSnapshot, t.currentRouterState);\n this.currentTransition = overallTransitionState = t = {\n ...t,\n targetRouterState\n };\n this.currentNavigation.update(nav => {\n nav.targetRouterState = targetRouterState;\n return nav;\n });\n this.events.next(new BeforeActivateRoutes());\n const deferred = overallTransitionState.beforeActivateHandler.deferredHandle;\n return deferred ? from(deferred.then(() => t)) : of(t);\n }), tap(t => {\n new ActivateRoutes(router.routeReuseStrategy, overallTransitionState.targetRouterState, overallTransitionState.currentRouterState, evt => this.events.next(evt), this.inputBindingEnabled).activate(this.rootContexts);\n if (!shouldContinueNavigation()) {\n return;\n }\n completedOrAborted = true;\n this.currentNavigation.update(nav => {\n nav.abort = noop;\n return nav;\n });\n this.lastSuccessfulNavigation.set(untracked(this.currentNavigation));\n this.events.next(new NavigationEnd(t.id, this.urlSerializer.serialize(t.extractedUrl), this.urlSerializer.serialize(t.urlAfterRedirects)));\n this.titleStrategy?.updateTitle(t.targetRouterState.snapshot);\n t.resolve(true);\n }), takeUntil(abortSignalToObservable(abortController.signal).pipe(filter(() => !completedOrAborted && !overallTransitionState.targetRouterState), tap(() => {\n this.cancelNavigationTransition(overallTransitionState, abortController.signal.reason + '', NavigationCancellationCode.Aborted);\n }))), tap({\n complete: () => {\n completedOrAborted = true;\n }\n }), takeUntil(this.transitionAbortWithErrorSubject.pipe(tap(err => {\n throw err;\n }))), finalize(() => {\n abortController.abort();\n if (!completedOrAborted) {\n const cancelationReason = typeof ngDevMode === 'undefined' || ngDevMode ? `Navigation ID ${overallTransitionState.id} is not equal to the current navigation id ${this.navigationId}` : '';\n this.cancelNavigationTransition(overallTransitionState, cancelationReason, NavigationCancellationCode.SupersededByNewNavigation);\n }\n if (this.currentTransition?.id === overallTransitionState.id) {\n this.currentNavigation.set(null);\n this.currentTransition = null;\n }\n }), catchError(e => {\n completedOrAborted = true;\n if (this.destroyed) {\n overallTransitionState.resolve(false);\n return EMPTY;\n }\n if (isNavigationCancelingError(e)) {\n this.events.next(new NavigationCancel(overallTransitionState.id, this.urlSerializer.serialize(overallTransitionState.extractedUrl), e.message, e.cancellationCode));\n if (!isRedirectingNavigationCancelingError(e)) {\n overallTransitionState.resolve(false);\n } else {\n this.events.next(new RedirectRequest(e.url, e.navigationBehaviorOptions));\n }\n } else {\n const navigationError = new NavigationError(overallTransitionState.id, this.urlSerializer.serialize(overallTransitionState.extractedUrl), e, overallTransitionState.targetSnapshot ?? undefined);\n try {\n const navigationErrorHandlerResult = runInInjectionContext(this.environmentInjector, () => this.navigationErrorHandler?.(navigationError));\n if (navigationErrorHandlerResult instanceof RedirectCommand) {\n const {\n message,\n cancellationCode\n } = redirectingNavigationError(this.urlSerializer, navigationErrorHandlerResult);\n this.events.next(new NavigationCancel(overallTransitionState.id, this.urlSerializer.serialize(overallTransitionState.extractedUrl), message, cancellationCode));\n this.events.next(new RedirectRequest(navigationErrorHandlerResult.redirectTo, navigationErrorHandlerResult.navigationBehaviorOptions));\n } else {\n this.events.next(navigationError);\n throw e;\n }\n } catch (ee) {\n if (this.options.resolveNavigationPromiseOnError) {\n overallTransitionState.resolve(false);\n } else {\n overallTransitionState.reject(ee);\n }\n }\n }\n return EMPTY;\n }));\n }));\n }\n cancelNavigationTransition(t, reason, code) {\n const navCancel = new NavigationCancel(t.id, this.urlSerializer.serialize(t.extractedUrl), reason, code);\n this.events.next(navCancel);\n t.resolve(false);\n }\n isUpdatingInternalState() {\n return this.currentTransition?.extractedUrl.toString() !== this.currentTransition?.currentUrlTree.toString();\n }\n isUpdatedBrowserUrl() {\n const currentBrowserUrl = this.urlHandlingStrategy.extract(this.urlSerializer.parse(this.location.path(true)));\n const currentNavigation = untracked(this.currentNavigation);\n const targetBrowserUrl = currentNavigation?.targetBrowserUrl ?? currentNavigation?.extractedUrl;\n return currentBrowserUrl.toString() !== targetBrowserUrl?.toString() && !currentNavigation?.extras.skipLocationChange;\n }\n static \u0275fac = function NavigationTransitions_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || NavigationTransitions)();\n };\n static \u0275prov = /* @__PURE__ */i0.\u0275\u0275defineInjectable({\n token: NavigationTransitions,\n factory: NavigationTransitions.\u0275fac,\n providedIn: 'root'\n });\n }\n return NavigationTransitions;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nfunction isBrowserTriggeredNavigation(source) {\n return source !== IMPERATIVE_NAVIGATION;\n}\nconst ROUTE_INJECTOR_CLEANUP = /*#__PURE__*/new InjectionToken(typeof ngDevMode === 'undefined' || ngDevMode ? 'RouteInjectorCleanup' : '');\nfunction routeInjectorCleanup(routeReuseStrategy, routerState, config) {\n const activeRoutes = new Set();\n if (routerState.snapshot.root) {\n collectDescendants(routerState.snapshot.root, activeRoutes);\n }\n const storedHandles = routeReuseStrategy.retrieveStoredRouteHandles?.() || [];\n for (const handle of storedHandles) {\n const internalHandle = handle;\n if (internalHandle?.route?.value?.snapshot) {\n for (const snapshot of internalHandle.route.value.snapshot.pathFromRoot) {\n if (snapshot.routeConfig) {\n activeRoutes.add(snapshot.routeConfig);\n }\n }\n }\n }\n destroyUnusedInjectors(config, activeRoutes, routeReuseStrategy, false);\n}\nfunction collectDescendants(snapshot, activeRoutes) {\n if (snapshot.routeConfig) {\n activeRoutes.add(snapshot.routeConfig);\n }\n for (const child of snapshot.children) {\n collectDescendants(child, activeRoutes);\n }\n}\nfunction destroyUnusedInjectors(routes, activeRoutes, strategy, inheritedForceDestroy) {\n for (const route of routes) {\n const shouldDestroyCurrentRoute = inheritedForceDestroy || !!((route._injector || route._loadedInjector) && !activeRoutes.has(route) && (strategy.shouldDestroyInjector?.(route) ?? false));\n if (route.children) {\n destroyUnusedInjectors(route.children, activeRoutes, strategy, shouldDestroyCurrentRoute);\n }\n if (route.loadChildren && route._loadedRoutes) {\n destroyUnusedInjectors(route._loadedRoutes, activeRoutes, strategy, shouldDestroyCurrentRoute);\n }\n if (shouldDestroyCurrentRoute) {\n if (route._injector) {\n route._injector.destroy();\n route._injector = undefined;\n }\n if (route._loadedInjector) {\n route._loadedInjector.destroy();\n route._loadedInjector = undefined;\n }\n }\n }\n}\nfunction destroyDetachedRouteHandle(handle) {\n const internalHandle = handle;\n if (internalHandle && internalHandle.componentRef) {\n internalHandle.componentRef.destroy();\n }\n}\nlet RouteReuseStrategy = /*#__PURE__*/(() => {\n class RouteReuseStrategy {\n static \u0275fac = function RouteReuseStrategy_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || RouteReuseStrategy)();\n };\n static \u0275prov = /* @__PURE__ */i0.\u0275\u0275defineInjectable({\n token: RouteReuseStrategy,\n factory: () => (() => inject(DefaultRouteReuseStrategy))(),\n providedIn: 'root'\n });\n }\n return RouteReuseStrategy;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nclass BaseRouteReuseStrategy {\n shouldDetach(route) {\n return false;\n }\n store(route, detachedTree) {}\n shouldAttach(route) {\n return false;\n }\n retrieve(route) {\n return null;\n }\n shouldReuseRoute(future, curr) {\n return future.routeConfig === curr.routeConfig;\n }\n shouldDestroyInjector(route) {\n return true;\n }\n}\nlet DefaultRouteReuseStrategy = /*#__PURE__*/(() => {\n class DefaultRouteReuseStrategy extends BaseRouteReuseStrategy {\n static \u0275fac = /* @__PURE__ */(() => {\n let \u0275DefaultRouteReuseStrategy_BaseFactory;\n return function DefaultRouteReuseStrategy_Factory(__ngFactoryType__) {\n return (\u0275DefaultRouteReuseStrategy_BaseFactory || (\u0275DefaultRouteReuseStrategy_BaseFactory = i0.\u0275\u0275getInheritedFactory(DefaultRouteReuseStrategy)))(__ngFactoryType__ || DefaultRouteReuseStrategy);\n };\n })();\n static \u0275prov = /* @__PURE__ */i0.\u0275\u0275defineInjectable({\n token: DefaultRouteReuseStrategy,\n factory: DefaultRouteReuseStrategy.\u0275fac,\n providedIn: 'root'\n });\n }\n return DefaultRouteReuseStrategy;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet StateManager = /*#__PURE__*/(() => {\n class StateManager {\n urlSerializer = inject(UrlSerializer);\n options = inject(ROUTER_CONFIGURATION, {\n optional: true\n }) || {};\n canceledNavigationResolution = this.options.canceledNavigationResolution || 'replace';\n location = inject(Location);\n urlHandlingStrategy = inject(UrlHandlingStrategy);\n urlUpdateStrategy = this.options.urlUpdateStrategy || 'deferred';\n currentUrlTree = new UrlTree();\n getCurrentUrlTree() {\n return this.currentUrlTree;\n }\n rawUrlTree = this.currentUrlTree;\n getRawUrlTree() {\n return this.rawUrlTree;\n }\n createBrowserPath({\n finalUrl,\n initialUrl,\n targetBrowserUrl\n }) {\n const rawUrl = finalUrl !== undefined ? this.urlHandlingStrategy.merge(finalUrl, initialUrl) : initialUrl;\n const url = targetBrowserUrl ?? rawUrl;\n const path = url instanceof UrlTree ? this.urlSerializer.serialize(url) : url;\n return path;\n }\n commitTransition({\n targetRouterState,\n finalUrl,\n initialUrl\n }) {\n if (finalUrl && targetRouterState) {\n this.currentUrlTree = finalUrl;\n this.rawUrlTree = this.urlHandlingStrategy.merge(finalUrl, initialUrl);\n this.routerState = targetRouterState;\n } else {\n this.rawUrlTree = initialUrl;\n }\n }\n routerState = createEmptyState(null, inject(EnvironmentInjector));\n getRouterState() {\n return this.routerState;\n }\n _stateMemento = this.createStateMemento();\n get stateMemento() {\n return this._stateMemento;\n }\n updateStateMemento() {\n this._stateMemento = this.createStateMemento();\n }\n createStateMemento() {\n return {\n rawUrlTree: this.rawUrlTree,\n currentUrlTree: this.currentUrlTree,\n routerState: this.routerState\n };\n }\n restoredState() {\n return this.location.getState();\n }\n static \u0275fac = function StateManager_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || StateManager)();\n };\n static \u0275prov = /* @__PURE__ */i0.\u0275\u0275defineInjectable({\n token: StateManager,\n factory: () => (() => inject(HistoryStateManager))(),\n providedIn: 'root'\n });\n }\n return StateManager;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet HistoryStateManager = /*#__PURE__*/(() => {\n class HistoryStateManager extends StateManager {\n currentPageId = 0;\n lastSuccessfulId = -1;\n get browserPageId() {\n if (this.canceledNavigationResolution !== 'computed') {\n return this.currentPageId;\n }\n return this.restoredState()?.\u0275routerPageId ?? this.currentPageId;\n }\n registerNonRouterCurrentEntryChangeListener(listener) {\n return this.location.subscribe(event => {\n if (event['type'] === 'popstate') {\n setTimeout(() => {\n listener(event['url'], event.state, 'popstate', {\n replaceUrl: true\n });\n });\n }\n });\n }\n handleRouterEvent(e, currentTransition) {\n if (e instanceof NavigationStart) {\n this.updateStateMemento();\n } else if (e instanceof NavigationSkipped) {\n this.commitTransition(currentTransition);\n } else if (e instanceof RoutesRecognized) {\n if (this.urlUpdateStrategy === 'eager') {\n if (!currentTransition.extras.skipLocationChange) {\n this.setBrowserUrl(this.createBrowserPath(currentTransition), currentTransition);\n }\n }\n } else if (e instanceof BeforeActivateRoutes) {\n this.commitTransition(currentTransition);\n if (this.urlUpdateStrategy === 'deferred' && !currentTransition.extras.skipLocationChange) {\n this.setBrowserUrl(this.createBrowserPath(currentTransition), currentTransition);\n }\n } else if (e instanceof NavigationCancel && !isRedirectingEvent(e)) {\n this.restoreHistory(currentTransition);\n } else if (e instanceof NavigationError) {\n this.restoreHistory(currentTransition, true);\n } else if (e instanceof NavigationEnd) {\n this.lastSuccessfulId = e.id;\n this.currentPageId = this.browserPageId;\n }\n }\n setBrowserUrl(path, {\n extras,\n id\n }) {\n const {\n replaceUrl,\n state\n } = extras;\n if (this.location.isCurrentPathEqualTo(path) || !!replaceUrl) {\n const currentBrowserPageId = this.browserPageId;\n const newState = {\n ...state,\n ...this.generateNgRouterState(id, currentBrowserPageId)\n };\n this.location.replaceState(path, '', newState);\n } else {\n const newState = {\n ...state,\n ...this.generateNgRouterState(id, this.browserPageId + 1)\n };\n this.location.go(path, '', newState);\n }\n }\n restoreHistory(navigation, restoringFromCaughtError = false) {\n if (this.canceledNavigationResolution === 'computed') {\n const currentBrowserPageId = this.browserPageId;\n const targetPagePosition = this.currentPageId - currentBrowserPageId;\n if (targetPagePosition !== 0) {\n this.location.historyGo(targetPagePosition);\n } else if (this.getCurrentUrlTree() === navigation.finalUrl && targetPagePosition === 0) {\n this.resetInternalState(navigation);\n this.resetUrlToCurrentUrlTree();\n } else ;\n } else if (this.canceledNavigationResolution === 'replace') {\n if (restoringFromCaughtError) {\n this.resetInternalState(navigation);\n }\n this.resetUrlToCurrentUrlTree();\n }\n }\n resetInternalState({\n finalUrl\n }) {\n this.routerState = this.stateMemento.routerState;\n this.currentUrlTree = this.stateMemento.currentUrlTree;\n this.rawUrlTree = this.urlHandlingStrategy.merge(this.currentUrlTree, finalUrl ?? this.rawUrlTree);\n }\n resetUrlToCurrentUrlTree() {\n this.location.replaceState(this.urlSerializer.serialize(this.getRawUrlTree()), '', this.generateNgRouterState(this.lastSuccessfulId, this.currentPageId));\n }\n generateNgRouterState(navigationId, routerPageId) {\n if (this.canceledNavigationResolution === 'computed') {\n return {\n navigationId,\n \u0275routerPageId: routerPageId\n };\n }\n return {\n navigationId\n };\n }\n static \u0275fac = /* @__PURE__ */(() => {\n let \u0275HistoryStateManager_BaseFactory;\n return function HistoryStateManager_Factory(__ngFactoryType__) {\n return (\u0275HistoryStateManager_BaseFactory || (\u0275HistoryStateManager_BaseFactory = i0.\u0275\u0275getInheritedFactory(HistoryStateManager)))(__ngFactoryType__ || HistoryStateManager);\n };\n })();\n static \u0275prov = /* @__PURE__ */i0.\u0275\u0275defineInjectable({\n token: HistoryStateManager,\n factory: HistoryStateManager.\u0275fac,\n providedIn: 'root'\n });\n }\n return HistoryStateManager;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nfunction afterNextNavigation(router, action) {\n router.events.pipe(filter(e => e instanceof NavigationEnd || e instanceof NavigationCancel || e instanceof NavigationError || e instanceof NavigationSkipped), map(e => {\n if (e instanceof NavigationEnd || e instanceof NavigationSkipped) {\n return 0;\n }\n const redirecting = e instanceof NavigationCancel ? e.code === NavigationCancellationCode.Redirect || e.code === NavigationCancellationCode.SupersededByNewNavigation : false;\n return redirecting ? 2 : 1;\n }), filter(result => result !== 2), take(1)).subscribe(() => {\n action();\n });\n}\nlet Router = /*#__PURE__*/(() => {\n class Router {\n get currentUrlTree() {\n return this.stateManager.getCurrentUrlTree();\n }\n get rawUrlTree() {\n return this.stateManager.getRawUrlTree();\n }\n disposed = false;\n nonRouterCurrentEntryChangeSubscription;\n console = inject(_Console);\n stateManager = inject(StateManager);\n options = inject(ROUTER_CONFIGURATION, {\n optional: true\n }) || {};\n pendingTasks = inject(_PendingTasksInternal);\n urlUpdateStrategy = this.options.urlUpdateStrategy || 'deferred';\n navigationTransitions = inject(NavigationTransitions);\n urlSerializer = inject(UrlSerializer);\n location = inject(Location);\n urlHandlingStrategy = inject(UrlHandlingStrategy);\n injector = inject(EnvironmentInjector);\n _events = new Subject();\n get events() {\n return this._events;\n }\n get routerState() {\n return this.stateManager.getRouterState();\n }\n navigated = false;\n routeReuseStrategy = inject(RouteReuseStrategy);\n injectorCleanup = inject(ROUTE_INJECTOR_CLEANUP, {\n optional: true\n });\n onSameUrlNavigation = this.options.onSameUrlNavigation || 'ignore';\n config = inject(ROUTES, {\n optional: true\n })?.flat() ?? [];\n componentInputBindingEnabled = !!inject(INPUT_BINDER, {\n optional: true\n });\n currentNavigation = this.navigationTransitions.currentNavigation.asReadonly();\n constructor() {\n this.resetConfig(this.config);\n this.navigationTransitions.setupNavigations(this).subscribe({\n error: e => {}\n });\n this.subscribeToNavigationEvents();\n }\n eventsSubscription = new Subscription();\n subscribeToNavigationEvents() {\n const subscription = this.navigationTransitions.events.subscribe(e => {\n try {\n const currentTransition = this.navigationTransitions.currentTransition;\n const currentNavigation = untracked(this.navigationTransitions.currentNavigation);\n if (currentTransition !== null && currentNavigation !== null) {\n this.stateManager.handleRouterEvent(e, currentNavigation);\n if (e instanceof NavigationCancel && e.code !== NavigationCancellationCode.Redirect && e.code !== NavigationCancellationCode.SupersededByNewNavigation) {\n this.navigated = true;\n } else if (e instanceof NavigationEnd) {\n this.navigated = true;\n this.injectorCleanup?.(this.routeReuseStrategy, this.routerState, this.config);\n } else if (e instanceof RedirectRequest) {\n const opts = e.navigationBehaviorOptions;\n const mergedTree = this.urlHandlingStrategy.merge(e.url, currentTransition.currentRawUrl);\n const extras = {\n scroll: currentTransition.extras.scroll,\n browserUrl: currentTransition.extras.browserUrl,\n info: currentTransition.extras.info,\n skipLocationChange: currentTransition.extras.skipLocationChange,\n replaceUrl: currentTransition.extras.replaceUrl || this.urlUpdateStrategy === 'eager' || isBrowserTriggeredNavigation(currentTransition.source),\n ...opts\n };\n this.scheduleNavigation(mergedTree, IMPERATIVE_NAVIGATION, null, extras, {\n resolve: currentTransition.resolve,\n reject: currentTransition.reject,\n promise: currentTransition.promise\n });\n }\n }\n if (isPublicRouterEvent(e)) {\n this._events.next(e);\n }\n } catch (e) {\n this.navigationTransitions.transitionAbortWithErrorSubject.next(e);\n }\n });\n this.eventsSubscription.add(subscription);\n }\n resetRootComponentType(rootComponentType) {\n this.routerState.root.component = rootComponentType;\n this.navigationTransitions.rootComponentType = rootComponentType;\n }\n initialNavigation() {\n this.setUpLocationChangeListener();\n if (!this.navigationTransitions.hasRequestedNavigation) {\n this.navigateToSyncWithBrowser(this.location.path(true), IMPERATIVE_NAVIGATION, this.stateManager.restoredState(), {\n replaceUrl: true\n });\n }\n }\n setUpLocationChangeListener() {\n this.nonRouterCurrentEntryChangeSubscription ??= this.stateManager.registerNonRouterCurrentEntryChangeListener((url, state, source, extras) => {\n this.navigateToSyncWithBrowser(url, source, state, extras);\n });\n }\n navigateToSyncWithBrowser(url, source, state, extras) {\n const restoredState = state?.navigationId ? state : null;\n if (state) {\n const stateCopy = {\n ...state\n };\n delete stateCopy.navigationId;\n delete stateCopy.\u0275routerPageId;\n if (Object.keys(stateCopy).length !== 0) {\n extras.state = stateCopy;\n }\n }\n const urlTree = this.parseUrl(url);\n this.scheduleNavigation(urlTree, source, restoredState, extras).catch(e => {\n if (this.disposed) {\n return;\n }\n this.injector.get(_INTERNAL_APPLICATION_ERROR_HANDLER)(e);\n });\n }\n get url() {\n return this.serializeUrl(this.currentUrlTree);\n }\n getCurrentNavigation() {\n return untracked(this.navigationTransitions.currentNavigation);\n }\n get lastSuccessfulNavigation() {\n return this.navigationTransitions.lastSuccessfulNavigation;\n }\n resetConfig(config) {\n (typeof ngDevMode === 'undefined' || ngDevMode) && validateConfig(config);\n this.config = config.map(standardizeConfig);\n this.navigated = false;\n }\n ngOnDestroy() {\n this.dispose();\n }\n dispose() {\n this._events.unsubscribe();\n this.navigationTransitions.complete();\n this.nonRouterCurrentEntryChangeSubscription?.unsubscribe();\n this.nonRouterCurrentEntryChangeSubscription = undefined;\n this.disposed = true;\n this.eventsSubscription.unsubscribe();\n }\n createUrlTree(commands, navigationExtras = {}) {\n const {\n relativeTo,\n queryParams,\n fragment,\n queryParamsHandling,\n preserveFragment\n } = navigationExtras;\n const f = preserveFragment ? this.currentUrlTree.fragment : fragment;\n let q = null;\n switch (queryParamsHandling ?? this.options.defaultQueryParamsHandling) {\n case 'merge':\n q = {\n ...this.currentUrlTree.queryParams,\n ...queryParams\n };\n break;\n case 'preserve':\n q = this.currentUrlTree.queryParams;\n break;\n default:\n q = queryParams || null;\n }\n if (q !== null) {\n q = this.removeEmptyProps(q);\n }\n let relativeToUrlSegmentGroup;\n try {\n const relativeToSnapshot = relativeTo ? relativeTo.snapshot : this.routerState.snapshot.root;\n relativeToUrlSegmentGroup = createSegmentGroupFromRoute(relativeToSnapshot);\n } catch (e) {\n if (typeof commands[0] !== 'string' || commands[0][0] !== '/') {\n commands = [];\n }\n relativeToUrlSegmentGroup = this.currentUrlTree.root;\n }\n return createUrlTreeFromSegmentGroup(relativeToUrlSegmentGroup, commands, q, f ?? null, this.urlSerializer);\n }\n navigateByUrl(url, extras = {\n skipLocationChange: false\n }) {\n const urlTree = isUrlTree(url) ? url : this.parseUrl(url);\n const mergedTree = this.urlHandlingStrategy.merge(urlTree, this.rawUrlTree);\n return this.scheduleNavigation(mergedTree, IMPERATIVE_NAVIGATION, null, extras);\n }\n navigate(commands, extras = {\n skipLocationChange: false\n }) {\n validateCommands(commands);\n return this.navigateByUrl(this.createUrlTree(commands, extras), extras);\n }\n serializeUrl(url) {\n return this.urlSerializer.serialize(url);\n }\n parseUrl(url) {\n try {\n return this.urlSerializer.parse(url);\n } catch (e) {\n this.console.warn(_formatRuntimeError(4018, ngDevMode && `Error parsing URL ${url}. Falling back to '/' instead. \\n` + e));\n return this.urlSerializer.parse('/');\n }\n }\n isActive(url, matchOptions) {\n let options;\n if (matchOptions === true) {\n options = {\n ...exactMatchOptions\n };\n } else if (matchOptions === false) {\n options = {\n ...subsetMatchOptions\n };\n } else {\n options = {\n ...subsetMatchOptions,\n ...matchOptions\n };\n }\n if (isUrlTree(url)) {\n return containsTree(this.currentUrlTree, url, options);\n }\n const urlTree = this.parseUrl(url);\n return containsTree(this.currentUrlTree, urlTree, options);\n }\n removeEmptyProps(params) {\n return Object.entries(params).reduce((result, [key, value]) => {\n if (value !== null && value !== undefined) {\n result[key] = value;\n }\n return result;\n }, {});\n }\n scheduleNavigation(rawUrl, source, restoredState, extras, priorPromise) {\n if (this.disposed) {\n return Promise.resolve(false);\n }\n let resolve;\n let reject;\n let promise;\n if (priorPromise) {\n resolve = priorPromise.resolve;\n reject = priorPromise.reject;\n promise = priorPromise.promise;\n } else {\n promise = new Promise((res, rej) => {\n resolve = res;\n reject = rej;\n });\n }\n const taskId = this.pendingTasks.add();\n afterNextNavigation(this, () => {\n queueMicrotask(() => this.pendingTasks.remove(taskId));\n });\n this.navigationTransitions.handleNavigationRequest({\n source,\n restoredState,\n currentUrlTree: this.currentUrlTree,\n currentRawUrl: this.currentUrlTree,\n rawUrl,\n extras,\n resolve: resolve,\n reject: reject,\n promise,\n currentSnapshot: this.routerState.snapshot,\n currentRouterState: this.routerState\n });\n return promise.catch(Promise.reject.bind(Promise));\n }\n static \u0275fac = function Router_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || Router)();\n };\n static \u0275prov = /* @__PURE__ */i0.\u0275\u0275defineInjectable({\n token: Router,\n factory: Router.\u0275fac,\n providedIn: 'root'\n });\n }\n return Router;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nfunction validateCommands(commands) {\n for (let i = 0; i < commands.length; i++) {\n const cmd = commands[i];\n if (cmd == null) {\n throw new _RuntimeError(4008, (typeof ngDevMode === 'undefined' || ngDevMode) && `The requested path contains ${cmd} segment at index ${i}`);\n }\n }\n}\nexport { ActivatedRoute, ActivatedRouteSnapshot, ActivationEnd, ActivationStart, BaseRouteReuseStrategy, BeforeActivateRoutes, BeforeRoutesRecognized, CREATE_VIEW_TRANSITION, ChildActivationEnd, ChildActivationStart, ChildrenOutletContexts, DefaultTitleStrategy, DefaultUrlSerializer, EventType, GuardsCheckEnd, GuardsCheckStart, IMPERATIVE_NAVIGATION, INPUT_BINDER, NAVIGATION_ERROR_HANDLER, NavigationCancel, NavigationCancellationCode, NavigationEnd, NavigationError, NavigationSkipped, NavigationSkippedCode, NavigationStart, NavigationTransitions, OutletContext, PRIMARY_OUTLET, ROUTER_CONFIGURATION, ROUTER_OUTLET_DATA, ROUTES, ROUTE_INJECTOR_CLEANUP, RedirectCommand, ResolveEnd, ResolveStart, RouteConfigLoadEnd, RouteConfigLoadStart, RouteReuseStrategy, RoutedComponentInputBinder, Router, RouterConfigLoader, RouterEvent, RouterOutlet, RouterState, RouterStateSnapshot, RoutesRecognized, Scroll, StateManager, TitleStrategy, UrlHandlingStrategy, UrlSegment, UrlSegmentGroup, UrlSerializer, UrlTree, VIEW_TRANSITION_OPTIONS, afterNextNavigation, convertToParamMap, createUrlTreeFromSnapshot, createViewTransition, defaultUrlMatcher, destroyDetachedRouteHandle, exactMatchOptions, isActive, isRedirectingEvent, isUrlTree, loadChildren, routeInjectorCleanup, stringifyEvent, subsetMatchOptions, \u0275EmptyOutletComponent };\n","/**\n * @license Angular v21.2.4\n * (c) 2010-2026 Google LLC. https://angular.dev/\n * License: MIT\n */\n\nimport * as i3 from '@angular/common';\nimport { ViewportScroller, PlatformNavigation, PlatformLocation, \u0275PRECOMMIT_HANDLER_SUPPORTED as _PRECOMMIT_HANDLER_SUPPORTED, Location, \u0275NavigationAdapterForLocation as _NavigationAdapterForLocation, LOCATION_INITIALIZED, LocationStrategy, HashLocationStrategy, PathLocationStrategy } from '@angular/common';\nimport * as i0 from '@angular/core';\nimport { inject, signal, Injectable, HostAttributeToken, linkedSignal, untracked, \u0275INTERNAL_APPLICATION_ERROR_HANDLER as _INTERNAL_APPLICATION_ERROR_HANDLER, effect, \u0275RuntimeError as _RuntimeError, computed, booleanAttribute, Directive, Attribute, Input, HostListener, EventEmitter, ContentChildren, Output, createEnvironmentInjector, InjectionToken, NgZone, EnvironmentInjector, DestroyRef, afterNextRender, \u0275promiseWithResolvers as _promiseWithResolvers, \u0275publishExternalGlobalUtil as _publishExternalGlobalUtil, makeEnvironmentProviders, APP_BOOTSTRAP_LISTENER, provideEnvironmentInitializer, Injector, ApplicationRef, \u0275IS_ENABLED_BLOCKING_INITIAL_NAVIGATION as _IS_ENABLED_BLOCKING_INITIAL_NAVIGATION, provideAppInitializer, \u0275performanceMarkFeature as _performanceMarkFeature, ENVIRONMENT_INITIALIZER, NgModule } from '@angular/core';\nimport { Router, StateManager, UrlSerializer, NavigationEnd, UrlTree, ROUTER_CONFIGURATION, isUrlTree, ActivatedRoute, isActive, exactMatchOptions, subsetMatchOptions, RouterConfigLoader, IMPERATIVE_NAVIGATION, NavigationTransitions, NavigationStart, NavigationSkipped, NavigationSkippedCode, Scroll, BeforeRoutesRecognized, BeforeActivateRoutes, NavigationCancel, NavigationError, isRedirectingEvent, NavigationCancellationCode, ROUTES, afterNextNavigation, ROUTE_INJECTOR_CLEANUP, routeInjectorCleanup, stringifyEvent, NAVIGATION_ERROR_HANDLER, RoutedComponentInputBinder, INPUT_BINDER, CREATE_VIEW_TRANSITION, createViewTransition, VIEW_TRANSITION_OPTIONS, DefaultUrlSerializer, ChildrenOutletContexts, RouterOutlet, \u0275EmptyOutletComponent as _EmptyOutletComponent } from './_router-chunk.mjs';\nimport { Subject, of, from } from 'rxjs';\nimport { mergeAll, catchError, filter, concatMap, mergeMap } from 'rxjs/operators';\nlet ReactiveRouterState = /*#__PURE__*/(() => {\n class ReactiveRouterState {\n router = inject(Router);\n stateManager = inject(StateManager);\n fragment = signal('', ...(ngDevMode ? [{\n debugName: \"fragment\"\n }] : []));\n queryParams = signal({}, ...(ngDevMode ? [{\n debugName: \"queryParams\"\n }] : []));\n path = signal('', ...(ngDevMode ? [{\n debugName: \"path\"\n }] : []));\n serializer = inject(UrlSerializer);\n constructor() {\n this.updateState();\n this.router.events?.subscribe(e => {\n if (e instanceof NavigationEnd) {\n this.updateState();\n }\n });\n }\n updateState() {\n const {\n fragment,\n root,\n queryParams\n } = this.stateManager.getCurrentUrlTree();\n this.fragment.set(fragment);\n this.queryParams.set(queryParams);\n this.path.set(this.serializer.serialize(new UrlTree(root)));\n }\n static \u0275fac = function ReactiveRouterState_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || ReactiveRouterState)();\n };\n static \u0275prov = /* @__PURE__ */i0.\u0275\u0275defineInjectable({\n token: ReactiveRouterState,\n factory: ReactiveRouterState.\u0275fac,\n providedIn: 'root'\n });\n }\n return ReactiveRouterState;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet RouterLink = /*#__PURE__*/(() => {\n class RouterLink {\n router;\n route;\n tabIndexAttribute;\n renderer;\n el;\n locationStrategy;\n hrefAttributeValue = inject(new HostAttributeToken('href'), {\n optional: true\n });\n reactiveHref = linkedSignal(() => {\n if (!this.isAnchorElement) {\n return this.hrefAttributeValue;\n }\n return this.computeHref(this._urlTree());\n }, ...(ngDevMode ? [{\n debugName: \"reactiveHref\"\n }] : []));\n get href() {\n return untracked(this.reactiveHref);\n }\n set href(value) {\n this.reactiveHref.set(value);\n }\n set target(value) {\n this._target.set(value);\n }\n get target() {\n return untracked(this._target);\n }\n _target = signal(undefined, ...(ngDevMode ? [{\n debugName: \"_target\"\n }] : []));\n set queryParams(value) {\n this._queryParams.set(value);\n }\n get queryParams() {\n return untracked(this._queryParams);\n }\n _queryParams = signal(undefined, {\n ...(ngDevMode ? {\n debugName: \"_queryParams\"\n } : {}),\n equal: () => false\n });\n set fragment(value) {\n this._fragment.set(value);\n }\n get fragment() {\n return untracked(this._fragment);\n }\n _fragment = signal(undefined, ...(ngDevMode ? [{\n debugName: \"_fragment\"\n }] : []));\n set queryParamsHandling(value) {\n this._queryParamsHandling.set(value);\n }\n get queryParamsHandling() {\n return untracked(this._queryParamsHandling);\n }\n _queryParamsHandling = signal(undefined, ...(ngDevMode ? [{\n debugName: \"_queryParamsHandling\"\n }] : []));\n set state(value) {\n this._state.set(value);\n }\n get state() {\n return untracked(this._state);\n }\n _state = signal(undefined, {\n ...(ngDevMode ? {\n debugName: \"_state\"\n } : {}),\n equal: () => false\n });\n set info(value) {\n this._info.set(value);\n }\n get info() {\n return untracked(this._info);\n }\n _info = signal(undefined, {\n ...(ngDevMode ? {\n debugName: \"_info\"\n } : {}),\n equal: () => false\n });\n set relativeTo(value) {\n this._relativeTo.set(value);\n }\n get relativeTo() {\n return untracked(this._relativeTo);\n }\n _relativeTo = signal(undefined, ...(ngDevMode ? [{\n debugName: \"_relativeTo\"\n }] : []));\n set preserveFragment(value) {\n this._preserveFragment.set(value);\n }\n get preserveFragment() {\n return untracked(this._preserveFragment);\n }\n _preserveFragment = signal(false, ...(ngDevMode ? [{\n debugName: \"_preserveFragment\"\n }] : []));\n set skipLocationChange(value) {\n this._skipLocationChange.set(value);\n }\n get skipLocationChange() {\n return untracked(this._skipLocationChange);\n }\n _skipLocationChange = signal(false, ...(ngDevMode ? [{\n debugName: \"_skipLocationChange\"\n }] : []));\n set replaceUrl(value) {\n this._replaceUrl.set(value);\n }\n get replaceUrl() {\n return untracked(this._replaceUrl);\n }\n _replaceUrl = signal(false, ...(ngDevMode ? [{\n debugName: \"_replaceUrl\"\n }] : []));\n isAnchorElement;\n onChanges = new Subject();\n applicationErrorHandler = inject(_INTERNAL_APPLICATION_ERROR_HANDLER);\n options = inject(ROUTER_CONFIGURATION, {\n optional: true\n });\n reactiveRouterState = inject(ReactiveRouterState);\n constructor(router, route, tabIndexAttribute, renderer, el, locationStrategy) {\n this.router = router;\n this.route = route;\n this.tabIndexAttribute = tabIndexAttribute;\n this.renderer = renderer;\n this.el = el;\n this.locationStrategy = locationStrategy;\n const tagName = el.nativeElement.tagName?.toLowerCase();\n this.isAnchorElement = tagName === 'a' || tagName === 'area' || !!(typeof customElements === 'object' && customElements.get(tagName)?.observedAttributes?.includes?.('href'));\n if (typeof ngDevMode !== 'undefined' && ngDevMode) {\n effect(() => {\n if (isUrlTree(this.routerLinkInput()) && (this._fragment() !== undefined || this._queryParams() || this._queryParamsHandling() || this._preserveFragment() || this._relativeTo())) {\n throw new _RuntimeError(4017, 'Cannot configure queryParams or fragment when using a UrlTree as the routerLink input value.');\n }\n });\n }\n }\n setTabIndexIfNotOnNativeEl(newTabIndex) {\n if (this.tabIndexAttribute != null || this.isAnchorElement) {\n return;\n }\n this.applyAttributeValue('tabindex', newTabIndex);\n }\n ngOnChanges(changes) {\n this.onChanges.next(this);\n }\n routerLinkInput = signal(null, ...(ngDevMode ? [{\n debugName: \"routerLinkInput\"\n }] : []));\n set routerLink(commandsOrUrlTree) {\n if (commandsOrUrlTree == null) {\n this.routerLinkInput.set(null);\n this.setTabIndexIfNotOnNativeEl(null);\n } else {\n if (isUrlTree(commandsOrUrlTree)) {\n this.routerLinkInput.set(commandsOrUrlTree);\n } else {\n this.routerLinkInput.set(Array.isArray(commandsOrUrlTree) ? commandsOrUrlTree : [commandsOrUrlTree]);\n }\n this.setTabIndexIfNotOnNativeEl('0');\n }\n }\n onClick(button, ctrlKey, shiftKey, altKey, metaKey) {\n const urlTree = this._urlTree();\n if (urlTree === null) {\n return true;\n }\n if (this.isAnchorElement) {\n if (button !== 0 || ctrlKey || shiftKey || altKey || metaKey) {\n return true;\n }\n if (typeof this.target === 'string' && this.target != '_self') {\n return true;\n }\n }\n const extras = {\n skipLocationChange: this.skipLocationChange,\n replaceUrl: this.replaceUrl,\n state: this.state,\n info: this.info\n };\n this.router.navigateByUrl(urlTree, extras)?.catch(e => {\n this.applicationErrorHandler(e);\n });\n return !this.isAnchorElement;\n }\n ngOnDestroy() {}\n applyAttributeValue(attrName, attrValue) {\n const renderer = this.renderer;\n const nativeElement = this.el.nativeElement;\n if (attrValue !== null) {\n renderer.setAttribute(nativeElement, attrName, attrValue);\n } else {\n renderer.removeAttribute(nativeElement, attrName);\n }\n }\n _urlTree = computed(() => {\n this.reactiveRouterState.path();\n if (this._preserveFragment()) {\n this.reactiveRouterState.fragment();\n }\n const shouldTrackParams = handling => handling === 'preserve' || handling === 'merge';\n if (shouldTrackParams(this._queryParamsHandling()) || shouldTrackParams(this.options?.defaultQueryParamsHandling)) {\n this.reactiveRouterState.queryParams();\n }\n const routerLinkInput = this.routerLinkInput();\n if (routerLinkInput === null || !this.router.createUrlTree) {\n return null;\n } else if (isUrlTree(routerLinkInput)) {\n return routerLinkInput;\n }\n return this.router.createUrlTree(routerLinkInput, {\n relativeTo: this._relativeTo() !== undefined ? this._relativeTo() : this.route,\n queryParams: this._queryParams(),\n fragment: this._fragment(),\n queryParamsHandling: this._queryParamsHandling(),\n preserveFragment: this._preserveFragment()\n });\n }, {\n ...(ngDevMode ? {\n debugName: \"_urlTree\"\n } : {}),\n equal: (a, b) => this.computeHref(a) === this.computeHref(b)\n });\n get urlTree() {\n return untracked(this._urlTree);\n }\n computeHref(urlTree) {\n return urlTree !== null && this.locationStrategy ? this.locationStrategy?.prepareExternalUrl(this.router.serializeUrl(urlTree)) ?? '' : null;\n }\n static \u0275fac = function RouterLink_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || RouterLink)(i0.\u0275\u0275directiveInject(Router), i0.\u0275\u0275directiveInject(ActivatedRoute), i0.\u0275\u0275injectAttribute('tabindex'), i0.\u0275\u0275directiveInject(i0.Renderer2), i0.\u0275\u0275directiveInject(i0.ElementRef), i0.\u0275\u0275directiveInject(i3.LocationStrategy));\n };\n static \u0275dir = /* @__PURE__ */i0.\u0275\u0275defineDirective({\n type: RouterLink,\n selectors: [[\"\", \"routerLink\", \"\"]],\n hostVars: 2,\n hostBindings: function RouterLink_HostBindings(rf, ctx) {\n if (rf & 1) {\n i0.\u0275\u0275listener(\"click\", function RouterLink_click_HostBindingHandler($event) {\n return ctx.onClick($event.button, $event.ctrlKey, $event.shiftKey, $event.altKey, $event.metaKey);\n });\n }\n if (rf & 2) {\n i0.\u0275\u0275attribute(\"href\", ctx.reactiveHref(), i0.\u0275\u0275sanitizeUrlOrResourceUrl)(\"target\", ctx._target());\n }\n },\n inputs: {\n target: \"target\",\n queryParams: \"queryParams\",\n fragment: \"fragment\",\n queryParamsHandling: \"queryParamsHandling\",\n state: \"state\",\n info: \"info\",\n relativeTo: \"relativeTo\",\n preserveFragment: [2, \"preserveFragment\", \"preserveFragment\", booleanAttribute],\n skipLocationChange: [2, \"skipLocationChange\", \"skipLocationChange\", booleanAttribute],\n replaceUrl: [2, \"replaceUrl\", \"replaceUrl\", booleanAttribute],\n routerLink: \"routerLink\"\n },\n features: [i0.\u0275\u0275NgOnChangesFeature]\n });\n }\n return RouterLink;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet RouterLinkActive = /*#__PURE__*/(() => {\n class RouterLinkActive {\n router;\n element;\n renderer;\n cdr;\n links;\n classes = [];\n routerEventsSubscription;\n linkInputChangesSubscription;\n _isActive = false;\n get isActive() {\n return this._isActive;\n }\n routerLinkActiveOptions = {\n exact: false\n };\n ariaCurrentWhenActive;\n isActiveChange = new EventEmitter();\n link = inject(RouterLink, {\n optional: true\n });\n constructor(router, element, renderer, cdr) {\n this.router = router;\n this.element = element;\n this.renderer = renderer;\n this.cdr = cdr;\n this.routerEventsSubscription = router.events.subscribe(s => {\n if (s instanceof NavigationEnd) {\n this.update();\n }\n });\n }\n ngAfterContentInit() {\n of(this.links.changes, of(null)).pipe(mergeAll()).subscribe(_ => {\n this.update();\n this.subscribeToEachLinkOnChanges();\n });\n }\n subscribeToEachLinkOnChanges() {\n this.linkInputChangesSubscription?.unsubscribe();\n const allLinkChanges = [...this.links.toArray(), this.link].filter(link => !!link).map(link => link.onChanges);\n this.linkInputChangesSubscription = from(allLinkChanges).pipe(mergeAll()).subscribe(link => {\n if (this._isActive !== this.isLinkActive(this.router)(link)) {\n this.update();\n }\n });\n }\n set routerLinkActive(data) {\n const classes = Array.isArray(data) ? data : data.split(' ');\n this.classes = classes.filter(c => !!c);\n }\n ngOnChanges(changes) {\n this.update();\n }\n ngOnDestroy() {\n this.routerEventsSubscription.unsubscribe();\n this.linkInputChangesSubscription?.unsubscribe();\n }\n update() {\n if (!this.links || !this.router.navigated) return;\n queueMicrotask(() => {\n const hasActiveLinks = this.hasActiveLinks();\n this.classes.forEach(c => {\n if (hasActiveLinks) {\n this.renderer.addClass(this.element.nativeElement, c);\n } else {\n this.renderer.removeClass(this.element.nativeElement, c);\n }\n });\n if (hasActiveLinks && this.ariaCurrentWhenActive !== undefined) {\n this.renderer.setAttribute(this.element.nativeElement, 'aria-current', this.ariaCurrentWhenActive.toString());\n } else {\n this.renderer.removeAttribute(this.element.nativeElement, 'aria-current');\n }\n if (this._isActive !== hasActiveLinks) {\n this._isActive = hasActiveLinks;\n this.cdr.markForCheck();\n this.isActiveChange.emit(hasActiveLinks);\n }\n });\n }\n isLinkActive(router) {\n const options = isActiveMatchOptions(this.routerLinkActiveOptions) ? this.routerLinkActiveOptions : this.routerLinkActiveOptions.exact ?? false ? {\n ...exactMatchOptions\n } : {\n ...subsetMatchOptions\n };\n return link => {\n const urlTree = link.urlTree;\n return urlTree ? untracked(isActive(urlTree, router, options)) : false;\n };\n }\n hasActiveLinks() {\n const isActiveCheckFn = this.isLinkActive(this.router);\n return this.link && isActiveCheckFn(this.link) || this.links.some(isActiveCheckFn);\n }\n static \u0275fac = function RouterLinkActive_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || RouterLinkActive)(i0.\u0275\u0275directiveInject(Router), i0.\u0275\u0275directiveInject(i0.ElementRef), i0.\u0275\u0275directiveInject(i0.Renderer2), i0.\u0275\u0275directiveInject(i0.ChangeDetectorRef));\n };\n static \u0275dir = /* @__PURE__ */i0.\u0275\u0275defineDirective({\n type: RouterLinkActive,\n selectors: [[\"\", \"routerLinkActive\", \"\"]],\n contentQueries: function RouterLinkActive_ContentQueries(rf, ctx, dirIndex) {\n if (rf & 1) {\n i0.\u0275\u0275contentQuery(dirIndex, RouterLink, 5);\n }\n if (rf & 2) {\n let _t;\n i0.\u0275\u0275queryRefresh(_t = i0.\u0275\u0275loadQuery()) && (ctx.links = _t);\n }\n },\n inputs: {\n routerLinkActiveOptions: \"routerLinkActiveOptions\",\n ariaCurrentWhenActive: \"ariaCurrentWhenActive\",\n routerLinkActive: \"routerLinkActive\"\n },\n outputs: {\n isActiveChange: \"isActiveChange\"\n },\n exportAs: [\"routerLinkActive\"],\n features: [i0.\u0275\u0275NgOnChangesFeature]\n });\n }\n return RouterLinkActive;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nfunction isActiveMatchOptions(options) {\n const o = options;\n return !!(o.paths || o.matrixParams || o.queryParams || o.fragment);\n}\nclass PreloadingStrategy {}\nlet PreloadAllModules = /*#__PURE__*/(() => {\n class PreloadAllModules {\n preload(route, fn) {\n return fn().pipe(catchError(() => of(null)));\n }\n static \u0275fac = function PreloadAllModules_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || PreloadAllModules)();\n };\n static \u0275prov = /* @__PURE__ */i0.\u0275\u0275defineInjectable({\n token: PreloadAllModules,\n factory: PreloadAllModules.\u0275fac,\n providedIn: 'root'\n });\n }\n return PreloadAllModules;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet NoPreloading = /*#__PURE__*/(() => {\n class NoPreloading {\n preload(route, fn) {\n return of(null);\n }\n static \u0275fac = function NoPreloading_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || NoPreloading)();\n };\n static \u0275prov = /* @__PURE__ */i0.\u0275\u0275defineInjectable({\n token: NoPreloading,\n factory: NoPreloading.\u0275fac,\n providedIn: 'root'\n });\n }\n return NoPreloading;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet RouterPreloader = /*#__PURE__*/(() => {\n class RouterPreloader {\n router;\n injector;\n preloadingStrategy;\n loader;\n subscription;\n constructor(router, injector, preloadingStrategy, loader) {\n this.router = router;\n this.injector = injector;\n this.preloadingStrategy = preloadingStrategy;\n this.loader = loader;\n }\n setUpPreloading() {\n this.subscription = this.router.events.pipe(filter(e => e instanceof NavigationEnd), concatMap(() => this.preload())).subscribe(() => {});\n }\n preload() {\n return this.processRoutes(this.injector, this.router.config);\n }\n ngOnDestroy() {\n this.subscription?.unsubscribe();\n }\n processRoutes(injector, routes) {\n const res = [];\n for (const route of routes) {\n if (route.providers && !route._injector) {\n route._injector = createEnvironmentInjector(route.providers, injector, typeof ngDevMode === 'undefined' || ngDevMode ? `Route: ${route.path}` : '');\n }\n const injectorForCurrentRoute = route._injector ?? injector;\n if (route._loadedNgModuleFactory && !route._loadedInjector) {\n route._loadedInjector = route._loadedNgModuleFactory.create(injectorForCurrentRoute).injector;\n }\n const injectorForChildren = route._loadedInjector ?? injectorForCurrentRoute;\n if (route.loadChildren && !route._loadedRoutes && route.canLoad === undefined || route.loadComponent && !route._loadedComponent) {\n res.push(this.preloadConfig(injectorForCurrentRoute, route));\n }\n if (route.children || route._loadedRoutes) {\n res.push(this.processRoutes(injectorForChildren, route.children ?? route._loadedRoutes));\n }\n }\n return from(res).pipe(mergeAll());\n }\n preloadConfig(injector, route) {\n return this.preloadingStrategy.preload(route, () => {\n if (injector.destroyed) {\n return of(null);\n }\n let loadedChildren$;\n if (route.loadChildren && route.canLoad === undefined) {\n loadedChildren$ = from(this.loader.loadChildren(injector, route));\n } else {\n loadedChildren$ = of(null);\n }\n const recursiveLoadChildren$ = loadedChildren$.pipe(mergeMap(config => {\n if (config === null) {\n return of(void 0);\n }\n route._loadedRoutes = config.routes;\n route._loadedInjector = config.injector;\n route._loadedNgModuleFactory = config.factory;\n return this.processRoutes(config.injector ?? injector, config.routes);\n }));\n if (route.loadComponent && !route._loadedComponent) {\n const loadComponent$ = this.loader.loadComponent(injector, route);\n return from([recursiveLoadChildren$, loadComponent$]).pipe(mergeAll());\n } else {\n return recursiveLoadChildren$;\n }\n });\n }\n static \u0275fac = function RouterPreloader_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || RouterPreloader)(i0.\u0275\u0275inject(Router), i0.\u0275\u0275inject(i0.EnvironmentInjector), i0.\u0275\u0275inject(PreloadingStrategy), i0.\u0275\u0275inject(RouterConfigLoader));\n };\n static \u0275prov = /* @__PURE__ */i0.\u0275\u0275defineInjectable({\n token: RouterPreloader,\n factory: RouterPreloader.\u0275fac,\n providedIn: 'root'\n });\n }\n return RouterPreloader;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst ROUTER_SCROLLER = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'Router Scroller' : '');\nlet RouterScroller = /*#__PURE__*/(() => {\n class RouterScroller {\n options;\n routerEventsSubscription;\n scrollEventsSubscription;\n lastId = 0;\n lastSource = IMPERATIVE_NAVIGATION;\n restoredId = 0;\n store = {};\n urlSerializer = inject(UrlSerializer);\n zone = inject(NgZone);\n viewportScroller = inject(ViewportScroller);\n transitions = inject(NavigationTransitions);\n constructor(options) {\n this.options = options;\n this.options.scrollPositionRestoration ||= 'disabled';\n this.options.anchorScrolling ||= 'disabled';\n }\n init() {\n if (this.options.scrollPositionRestoration !== 'disabled') {\n this.viewportScroller.setHistoryScrollRestoration('manual');\n }\n this.routerEventsSubscription = this.createScrollEvents();\n this.scrollEventsSubscription = this.consumeScrollEvents();\n }\n createScrollEvents() {\n return this.transitions.events.subscribe(e => {\n if (e instanceof NavigationStart) {\n this.store[this.lastId] = this.viewportScroller.getScrollPosition();\n this.lastSource = e.navigationTrigger;\n this.restoredId = e.restoredState ? e.restoredState.navigationId : 0;\n } else if (e instanceof NavigationEnd) {\n this.lastId = e.id;\n this.scheduleScrollEvent(e, this.urlSerializer.parse(e.urlAfterRedirects).fragment);\n } else if (e instanceof NavigationSkipped && e.code === NavigationSkippedCode.IgnoredSameUrlNavigation) {\n this.lastSource = undefined;\n this.restoredId = 0;\n this.scheduleScrollEvent(e, this.urlSerializer.parse(e.url).fragment);\n }\n });\n }\n consumeScrollEvents() {\n return this.transitions.events.subscribe(e => {\n if (!(e instanceof Scroll) || e.scrollBehavior === 'manual') return;\n const instantScroll = {\n behavior: 'instant'\n };\n if (e.position) {\n if (this.options.scrollPositionRestoration === 'top') {\n this.viewportScroller.scrollToPosition([0, 0], instantScroll);\n } else if (this.options.scrollPositionRestoration === 'enabled') {\n this.viewportScroller.scrollToPosition(e.position, instantScroll);\n }\n } else {\n if (e.anchor && this.options.anchorScrolling === 'enabled') {\n this.viewportScroller.scrollToAnchor(e.anchor);\n } else if (this.options.scrollPositionRestoration !== 'disabled') {\n this.viewportScroller.scrollToPosition([0, 0]);\n }\n }\n });\n }\n scheduleScrollEvent(routerEvent, anchor) {\n const scroll = untracked(this.transitions.currentNavigation)?.extras.scroll;\n this.zone.runOutsideAngular(async () => {\n await new Promise(resolve => {\n setTimeout(resolve);\n if (typeof requestAnimationFrame !== 'undefined') {\n requestAnimationFrame(resolve);\n }\n });\n this.zone.run(() => {\n this.transitions.events.next(new Scroll(routerEvent, this.lastSource === 'popstate' ? this.store[this.restoredId] : null, anchor, scroll));\n });\n });\n }\n ngOnDestroy() {\n this.routerEventsSubscription?.unsubscribe();\n this.scrollEventsSubscription?.unsubscribe();\n }\n static \u0275fac = function RouterScroller_Factory(__ngFactoryType__) {\n i0.\u0275\u0275invalidFactory();\n };\n static \u0275prov = /* @__PURE__ */i0.\u0275\u0275defineInjectable({\n token: RouterScroller,\n factory: RouterScroller.\u0275fac\n });\n }\n return RouterScroller;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nfunction getLoadedRoutes(route) {\n return route._loadedRoutes;\n}\nfunction getRouterInstance(injector) {\n return injector.get(Router, null, {\n optional: true\n });\n}\nfunction navigateByUrl(router, url) {\n if (!(router instanceof Router)) {\n throw new Error('The provided router is not an Angular Router.');\n }\n return router.navigateByUrl(url);\n}\nlet NavigationStateManager = /*#__PURE__*/(() => {\n class NavigationStateManager extends StateManager {\n injector = inject(EnvironmentInjector);\n navigation = inject(PlatformNavigation);\n inMemoryScrollingEnabled = inject(ROUTER_SCROLLER, {\n optional: true\n }) !== null;\n base = new URL(inject(PlatformLocation).href).origin;\n appRootURL = new URL(this.location.prepareExternalUrl?.('/') ?? '/', this.base).href;\n precommitHandlerSupported = inject(_PRECOMMIT_HANDLER_SUPPORTED);\n activeHistoryEntry = this.navigation.currentEntry;\n currentNavigation = {};\n nonRouterCurrentEntryChangeSubject = new Subject();\n nonRouterEntryChangeListener;\n get registered() {\n return this.nonRouterEntryChangeListener !== undefined && !this.nonRouterEntryChangeListener.closed;\n }\n constructor() {\n super();\n const navigateListener = event => {\n this.handleNavigate(event);\n };\n this.navigation.addEventListener('navigate', navigateListener);\n inject(DestroyRef).onDestroy(() => this.navigation.removeEventListener('navigate', navigateListener));\n }\n registerNonRouterCurrentEntryChangeListener(listener) {\n this.activeHistoryEntry = this.navigation.currentEntry;\n this.nonRouterEntryChangeListener = this.nonRouterCurrentEntryChangeSubject.subscribe(({\n path,\n state\n }) => {\n listener(path, state, 'popstate', !this.precommitHandlerSupported ? {\n replaceUrl: true\n } : {});\n });\n return this.nonRouterEntryChangeListener;\n }\n async handleRouterEvent(e, transition) {\n this.currentNavigation = {\n ...this.currentNavigation,\n routerTransition: transition\n };\n if (e instanceof NavigationStart) {\n this.updateStateMemento();\n if (this.precommitHandlerSupported) {\n this.maybeCreateNavigationForTransition(transition);\n }\n } else if (e instanceof NavigationSkipped) {\n this.finishNavigation();\n this.commitTransition(transition);\n } else if (e instanceof BeforeRoutesRecognized) {\n transition.routesRecognizeHandler.deferredHandle = new Promise(async resolve => {\n if (this.urlUpdateStrategy === 'eager') {\n try {\n this.maybeCreateNavigationForTransition(transition);\n await this.currentNavigation.commitUrl?.();\n } catch {\n return;\n }\n }\n resolve();\n });\n } else if (e instanceof BeforeActivateRoutes) {\n transition.beforeActivateHandler.deferredHandle = new Promise(async resolve => {\n if (this.urlUpdateStrategy === 'deferred') {\n try {\n this.maybeCreateNavigationForTransition(transition);\n await this.currentNavigation.commitUrl?.();\n } catch {\n return;\n }\n }\n this.commitTransition(transition);\n resolve();\n });\n } else if (e instanceof NavigationCancel || e instanceof NavigationError) {\n const redirectingBeforeUrlCommit = e instanceof NavigationCancel && e.code === NavigationCancellationCode.Redirect && !!this.currentNavigation.commitUrl;\n if (redirectingBeforeUrlCommit) {\n return;\n }\n void this.cancel(transition, e);\n } else if (e instanceof NavigationEnd) {\n const {\n resolveHandler,\n removeAbortListener\n } = this.currentNavigation;\n this.currentNavigation = {};\n removeAbortListener?.();\n this.activeHistoryEntry = this.navigation.currentEntry;\n afterNextRender({\n read: () => resolveHandler?.()\n }, {\n injector: this.injector\n });\n }\n }\n maybeCreateNavigationForTransition(transition) {\n const {\n navigationEvent,\n commitUrl\n } = this.currentNavigation;\n if (commitUrl || navigationEvent && navigationEvent.navigationType === 'traverse' && this.eventAndRouterDestinationsMatch(navigationEvent, transition)) {\n return;\n }\n this.currentNavigation.removeAbortListener?.();\n const path = this.createBrowserPath(transition);\n this.navigate(path, transition);\n }\n navigate(internalPath, transition) {\n const path = transition.extras.skipLocationChange ? this.navigation.currentEntry.url : this.location.prepareExternalUrl(internalPath);\n const state = {\n ...transition.extras.state,\n navigationId: transition.id\n };\n const info = {\n \u0275routerInfo: {\n intercept: true\n }\n };\n if (!this.navigation.transition && this.currentNavigation.navigationEvent) {\n transition.extras.replaceUrl = false;\n }\n const history = this.location.isCurrentPathEqualTo(path) || transition.extras.replaceUrl || transition.extras.skipLocationChange ? 'replace' : 'push';\n handleResultRejections(this.navigation.navigate(path, {\n state,\n history,\n info\n }));\n }\n finishNavigation() {\n this.currentNavigation.commitUrl?.();\n this.currentNavigation?.resolveHandler?.();\n this.currentNavigation = {};\n }\n async cancel(transition, cause) {\n this.currentNavigation.rejectNavigateEvent?.();\n const clearedState = {};\n this.currentNavigation = clearedState;\n if (isRedirectingEvent(cause)) {\n return;\n }\n const isTraversalReset = this.canceledNavigationResolution === 'computed' && this.navigation.currentEntry.key !== this.activeHistoryEntry.key;\n this.resetInternalState(transition.finalUrl, isTraversalReset);\n if (this.navigation.currentEntry.id === this.activeHistoryEntry.id) {\n return;\n }\n if (cause instanceof NavigationCancel && cause.code === NavigationCancellationCode.Aborted) {\n await Promise.resolve();\n if (this.currentNavigation !== clearedState) {\n return;\n }\n }\n if (isTraversalReset) {\n handleResultRejections(this.navigation.traverseTo(this.activeHistoryEntry.key, {\n info: {\n \u0275routerInfo: {\n intercept: false\n }\n }\n }));\n } else {\n const internalPath = this.urlSerializer.serialize(this.getCurrentUrlTree());\n const pathOrUrl = this.location.prepareExternalUrl(internalPath);\n handleResultRejections(this.navigation.navigate(pathOrUrl, {\n state: this.activeHistoryEntry.getState(),\n history: 'replace',\n info: {\n \u0275routerInfo: {\n intercept: false\n }\n }\n }));\n }\n }\n resetInternalState(finalUrl, traversalReset) {\n this.routerState = this.stateMemento.routerState;\n this.currentUrlTree = this.stateMemento.currentUrlTree;\n this.rawUrlTree = traversalReset ? this.stateMemento.rawUrlTree : this.urlHandlingStrategy.merge(this.currentUrlTree, finalUrl ?? this.rawUrlTree);\n }\n handleNavigate(event) {\n if (!event.canIntercept || event.navigationType === 'reload') {\n return;\n }\n const routerInfo = event?.info?.\u0275routerInfo;\n if (routerInfo && !routerInfo.intercept) {\n return;\n }\n const isTriggeredByRouterTransition = !!routerInfo;\n if (!isTriggeredByRouterTransition) {\n this.currentNavigation.routerTransition?.abort();\n if (!this.registered) {\n this.finishNavigation();\n return;\n }\n }\n this.currentNavigation = {\n ...this.currentNavigation\n };\n this.currentNavigation.navigationEvent = event;\n const abortHandler = () => {\n this.currentNavigation.routerTransition?.abort();\n };\n event.signal.addEventListener('abort', abortHandler);\n this.currentNavigation.removeAbortListener = () => event.signal.removeEventListener('abort', abortHandler);\n let scroll = this.inMemoryScrollingEnabled ? 'manual' : this.currentNavigation.routerTransition?.extras.scroll ?? 'after-transition';\n const interceptOptions = {\n scroll\n };\n const {\n promise: handlerPromise,\n resolve: resolveHandler,\n reject: rejectHandler\n } = _promiseWithResolvers();\n const {\n promise: precommitHandlerPromise,\n resolve: resolvePrecommitHandler,\n reject: rejectPrecommitHandler\n } = _promiseWithResolvers();\n this.currentNavigation.rejectNavigateEvent = () => {\n event.signal.removeEventListener('abort', abortHandler);\n rejectPrecommitHandler();\n rejectHandler();\n };\n this.currentNavigation.resolveHandler = () => {\n this.currentNavigation.removeAbortListener?.();\n resolveHandler();\n };\n handlerPromise.catch(() => {});\n precommitHandlerPromise.catch(() => {});\n interceptOptions.handler = () => handlerPromise;\n if (this.deferredCommitSupported(event)) {\n const redirect = new Promise(resolve => {\n interceptOptions.precommitHandler = controller => {\n if (this.navigation.transition?.navigationType === 'traverse') {\n resolve(() => {});\n } else {\n resolve(controller.redirect.bind(controller));\n }\n return precommitHandlerPromise;\n };\n });\n this.currentNavigation.commitUrl = async () => {\n this.currentNavigation.commitUrl = undefined;\n const transition = this.currentNavigation.routerTransition;\n if (transition && !transition.extras.skipLocationChange) {\n const internalPath = this.createBrowserPath(transition);\n const history = this.location.isCurrentPathEqualTo(internalPath) || !!transition.extras.replaceUrl ? 'replace' : 'push';\n const state = {\n ...transition.extras.state,\n navigationId: transition.id\n };\n const pathOrUrl = this.location.prepareExternalUrl(internalPath);\n (await redirect)(pathOrUrl, {\n state,\n history\n });\n }\n resolvePrecommitHandler();\n return await this.navigation.transition?.committed;\n };\n }\n event.intercept(interceptOptions);\n if (!isTriggeredByRouterTransition) {\n this.handleNavigateEventTriggeredOutsideRouterAPIs(event);\n }\n }\n handleNavigateEventTriggeredOutsideRouterAPIs(event) {\n const path = event.destination.url.substring(this.appRootURL.length - 1);\n const state = event.destination.getState();\n this.nonRouterCurrentEntryChangeSubject.next({\n path,\n state\n });\n }\n eventAndRouterDestinationsMatch(navigateEvent, transition) {\n const internalPath = this.createBrowserPath(transition);\n const eventDestination = new URL(navigateEvent.destination.url);\n const routerDestination = this.location.prepareExternalUrl(internalPath);\n return new URL(routerDestination, eventDestination.origin).href === eventDestination.href;\n }\n deferredCommitSupported(event) {\n return this.precommitHandlerSupported && event.cancelable;\n }\n static \u0275fac = function NavigationStateManager_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || NavigationStateManager)();\n };\n static \u0275prov = /* @__PURE__ */i0.\u0275\u0275defineInjectable({\n token: NavigationStateManager,\n factory: NavigationStateManager.\u0275fac,\n providedIn: 'root'\n });\n }\n return NavigationStateManager;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nfunction handleResultRejections(result) {\n result.finished?.catch(() => {});\n result.committed?.catch(() => {});\n return result;\n}\nfunction provideRouter(routes, ...features) {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n _publishExternalGlobalUtil('\u0275getLoadedRoutes', getLoadedRoutes);\n _publishExternalGlobalUtil('\u0275getRouterInstance', getRouterInstance);\n _publishExternalGlobalUtil('\u0275navigateByUrl', navigateByUrl);\n }\n return makeEnvironmentProviders([{\n provide: ROUTES,\n multi: true,\n useValue: routes\n }, typeof ngDevMode === 'undefined' || ngDevMode ? {\n provide: ROUTER_IS_PROVIDED,\n useValue: true\n } : [], {\n provide: ActivatedRoute,\n useFactory: rootRoute\n }, {\n provide: APP_BOOTSTRAP_LISTENER,\n multi: true,\n useFactory: getBootstrapListener\n }, features.map(feature => feature.\u0275providers)]);\n}\nfunction rootRoute() {\n return inject(Router).routerState.root;\n}\nfunction routerFeature(kind, providers) {\n return {\n \u0275kind: kind,\n \u0275providers: providers\n };\n}\nconst ROUTER_IS_PROVIDED = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'Router is provided' : '', {\n factory: () => false\n});\nconst routerIsProvidedDevModeCheck = {\n provide: ENVIRONMENT_INITIALIZER,\n multi: true,\n useFactory() {\n return () => {\n if (!inject(ROUTER_IS_PROVIDED)) {\n console.warn('`provideRoutes` was called without `provideRouter` or `RouterModule.forRoot`. ' + 'This is likely a mistake.');\n }\n };\n }\n};\nfunction provideRoutes(routes) {\n return [{\n provide: ROUTES,\n multi: true,\n useValue: routes\n }, typeof ngDevMode === 'undefined' || ngDevMode ? routerIsProvidedDevModeCheck : []];\n}\nfunction withInMemoryScrolling(options = {}) {\n const providers = [{\n provide: ROUTER_SCROLLER,\n useFactory: () => new RouterScroller(options)\n }];\n return routerFeature(4, providers);\n}\nfunction withExperimentalPlatformNavigation() {\n const devModeLocationCheck = typeof ngDevMode === 'undefined' || ngDevMode ? [provideEnvironmentInitializer(() => {\n const locationInstance = inject(Location);\n if (!(locationInstance instanceof _NavigationAdapterForLocation)) {\n const locationConstructorName = locationInstance.constructor.name;\n let message = `'withExperimentalPlatformNavigation' provides a 'Location' implementation that ensures navigation APIs are consistently used.` + ` An instance of ${locationConstructorName} was found instead.`;\n if (locationConstructorName === 'SpyLocation') {\n message += ` One of 'RouterTestingModule' or 'provideLocationMocks' was likely used. 'withExperimentalPlatformNavigation' does not work with these because they override the Location implementation.`;\n }\n throw new Error(message);\n }\n })] : [];\n const providers = [{\n provide: StateManager,\n useExisting: NavigationStateManager\n }, {\n provide: Location,\n useClass: _NavigationAdapterForLocation\n }, devModeLocationCheck];\n return routerFeature(11, providers);\n}\nfunction getBootstrapListener() {\n const injector = inject(Injector);\n return bootstrappedComponentRef => {\n const ref = injector.get(ApplicationRef);\n if (bootstrappedComponentRef !== ref.components[0]) {\n return;\n }\n const router = injector.get(Router);\n const bootstrapDone = injector.get(BOOTSTRAP_DONE);\n if (injector.get(INITIAL_NAVIGATION) === 1) {\n router.initialNavigation();\n }\n injector.get(ROUTER_PRELOADER, null, {\n optional: true\n })?.setUpPreloading();\n injector.get(ROUTER_SCROLLER, null, {\n optional: true\n })?.init();\n router.resetRootComponentType(ref.componentTypes[0]);\n if (!bootstrapDone.closed) {\n bootstrapDone.next();\n bootstrapDone.complete();\n bootstrapDone.unsubscribe();\n }\n };\n}\nconst BOOTSTRAP_DONE = /*#__PURE__*/new InjectionToken(typeof ngDevMode === 'undefined' || ngDevMode ? 'bootstrap done indicator' : '', {\n factory: () => {\n return new Subject();\n }\n});\nconst INITIAL_NAVIGATION = /*#__PURE__*/new InjectionToken(typeof ngDevMode === 'undefined' || ngDevMode ? 'initial navigation' : '', {\n factory: () => 1\n});\nfunction withEnabledBlockingInitialNavigation() {\n const providers = [{\n provide: _IS_ENABLED_BLOCKING_INITIAL_NAVIGATION,\n useValue: true\n }, {\n provide: INITIAL_NAVIGATION,\n useValue: 0\n }, provideAppInitializer(() => {\n const injector = inject(Injector);\n const locationInitialized = injector.get(LOCATION_INITIALIZED, Promise.resolve());\n return locationInitialized.then(() => {\n return new Promise(resolve => {\n const router = injector.get(Router);\n const bootstrapDone = injector.get(BOOTSTRAP_DONE);\n afterNextNavigation(router, () => {\n resolve(true);\n });\n injector.get(NavigationTransitions).afterPreactivation = () => {\n resolve(true);\n return bootstrapDone.closed ? of(void 0) : bootstrapDone;\n };\n router.initialNavigation();\n });\n });\n })];\n return routerFeature(2, providers);\n}\nfunction withDisabledInitialNavigation() {\n const providers = [provideAppInitializer(() => {\n inject(Router).setUpLocationChangeListener();\n }), {\n provide: INITIAL_NAVIGATION,\n useValue: 2\n }];\n return routerFeature(3, providers);\n}\nfunction withDebugTracing() {\n let providers = [];\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n providers = [{\n provide: ENVIRONMENT_INITIALIZER,\n multi: true,\n useFactory: () => {\n const router = inject(Router);\n return () => router.events.subscribe(e => {\n console.group?.(`Router Event: ${e.constructor.name}`);\n console.log(stringifyEvent(e));\n console.log(e);\n console.groupEnd?.();\n });\n }\n }];\n } else {\n providers = [];\n }\n return routerFeature(1, providers);\n}\nconst ROUTER_PRELOADER = /*#__PURE__*/new InjectionToken(typeof ngDevMode === 'undefined' || ngDevMode ? 'router preloader' : '');\nfunction withPreloading(preloadingStrategy) {\n const providers = [{\n provide: ROUTER_PRELOADER,\n useExisting: RouterPreloader\n }, {\n provide: PreloadingStrategy,\n useExisting: preloadingStrategy\n }];\n return routerFeature(0, providers);\n}\nfunction withRouterConfig(options) {\n const providers = [{\n provide: ROUTER_CONFIGURATION,\n useValue: options\n }];\n return routerFeature(5, providers);\n}\nfunction withHashLocation() {\n const providers = [{\n provide: LocationStrategy,\n useClass: HashLocationStrategy\n }];\n return routerFeature(6, providers);\n}\nfunction withNavigationErrorHandler(handler) {\n const providers = [{\n provide: NAVIGATION_ERROR_HANDLER,\n useValue: handler\n }];\n return routerFeature(7, providers);\n}\nfunction withExperimentalAutoCleanupInjectors() {\n return routerFeature(10, [{\n provide: ROUTE_INJECTOR_CLEANUP,\n useValue: routeInjectorCleanup\n }]);\n}\nfunction withComponentInputBinding() {\n const providers = [RoutedComponentInputBinder, {\n provide: INPUT_BINDER,\n useExisting: RoutedComponentInputBinder\n }];\n return routerFeature(8, providers);\n}\nfunction withViewTransitions(options) {\n _performanceMarkFeature('NgRouterViewTransitions');\n const providers = [{\n provide: CREATE_VIEW_TRANSITION,\n useValue: createViewTransition\n }, {\n provide: VIEW_TRANSITION_OPTIONS,\n useValue: {\n skipNextTransition: !!options?.skipInitialTransition,\n ...options\n }\n }];\n return routerFeature(9, providers);\n}\nconst ROUTER_DIRECTIVES = [RouterOutlet, RouterLink, RouterLinkActive, _EmptyOutletComponent];\nconst ROUTER_FORROOT_GUARD = /*#__PURE__*/new InjectionToken(typeof ngDevMode === 'undefined' || ngDevMode ? 'router duplicate forRoot guard' : '');\nconst ROUTER_PROVIDERS = [Location, {\n provide: UrlSerializer,\n useClass: DefaultUrlSerializer\n}, Router, ChildrenOutletContexts, {\n provide: ActivatedRoute,\n useFactory: rootRoute\n}, RouterConfigLoader, typeof ngDevMode === 'undefined' || ngDevMode ? {\n provide: ROUTER_IS_PROVIDED,\n useValue: true\n} : []];\nlet RouterModule = /*#__PURE__*/(() => {\n class RouterModule {\n constructor() {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n inject(ROUTER_FORROOT_GUARD, {\n optional: true\n });\n }\n }\n static forRoot(routes, config) {\n return {\n ngModule: RouterModule,\n providers: [ROUTER_PROVIDERS, typeof ngDevMode === 'undefined' || ngDevMode ? config?.enableTracing ? withDebugTracing().\u0275providers : [] : [], {\n provide: ROUTES,\n multi: true,\n useValue: routes\n }, typeof ngDevMode === 'undefined' || ngDevMode ? {\n provide: ROUTER_FORROOT_GUARD,\n useFactory: provideForRootGuard\n } : [], config?.errorHandler ? {\n provide: NAVIGATION_ERROR_HANDLER,\n useValue: config.errorHandler\n } : [], {\n provide: ROUTER_CONFIGURATION,\n useValue: config ? config : {}\n }, config?.useHash ? provideHashLocationStrategy() : providePathLocationStrategy(), provideRouterScroller(), config?.preloadingStrategy ? withPreloading(config.preloadingStrategy).\u0275providers : [], config?.initialNavigation ? provideInitialNavigation(config) : [], config?.bindToComponentInputs ? withComponentInputBinding().\u0275providers : [], config?.enableViewTransitions ? withViewTransitions().\u0275providers : [], provideRouterInitializer()]\n };\n }\n static forChild(routes) {\n return {\n ngModule: RouterModule,\n providers: [{\n provide: ROUTES,\n multi: true,\n useValue: routes\n }]\n };\n }\n static \u0275fac = function RouterModule_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || RouterModule)();\n };\n static \u0275mod = /* @__PURE__ */i0.\u0275\u0275defineNgModule({\n type: RouterModule\n });\n static \u0275inj = /* @__PURE__ */i0.\u0275\u0275defineInjector({});\n }\n return RouterModule;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nfunction provideRouterScroller() {\n return {\n provide: ROUTER_SCROLLER,\n useFactory: () => {\n const viewportScroller = inject(ViewportScroller);\n const config = inject(ROUTER_CONFIGURATION);\n if (config.scrollOffset) {\n viewportScroller.setOffset(config.scrollOffset);\n }\n return new RouterScroller(config);\n }\n };\n}\nfunction provideHashLocationStrategy() {\n return {\n provide: LocationStrategy,\n useClass: HashLocationStrategy\n };\n}\nfunction providePathLocationStrategy() {\n return {\n provide: LocationStrategy,\n useClass: PathLocationStrategy\n };\n}\nfunction provideForRootGuard() {\n const router = inject(Router, {\n optional: true,\n skipSelf: true\n });\n if (router) {\n throw new _RuntimeError(4007, `The Router was provided more than once. This can happen if 'forRoot' is used outside of the root injector.` + ` Lazy loaded modules should use RouterModule.forChild() instead.`);\n }\n return 'guarded';\n}\nfunction provideInitialNavigation(config) {\n return [config.initialNavigation === 'disabled' ? withDisabledInitialNavigation().\u0275providers : [], config.initialNavigation === 'enabledBlocking' ? withEnabledBlockingInitialNavigation().\u0275providers : []];\n}\nconst ROUTER_INITIALIZER = /*#__PURE__*/new InjectionToken(typeof ngDevMode === 'undefined' || ngDevMode ? 'Router Initializer' : '');\nfunction provideRouterInitializer() {\n return [{\n provide: ROUTER_INITIALIZER,\n useFactory: getBootstrapListener\n }, {\n provide: APP_BOOTSTRAP_LISTENER,\n multi: true,\n useExisting: ROUTER_INITIALIZER\n }];\n}\nexport { NoPreloading, PreloadAllModules, PreloadingStrategy, ROUTER_INITIALIZER, ROUTER_PROVIDERS, RouterLink, RouterLinkActive, RouterModule, RouterPreloader, provideRouter, provideRoutes, withComponentInputBinding, withDebugTracing, withDisabledInitialNavigation, withEnabledBlockingInitialNavigation, withExperimentalAutoCleanupInjectors, withExperimentalPlatformNavigation, withHashLocation, withInMemoryScrolling, withNavigationErrorHandler, withPreloading, withRouterConfig, withViewTransitions };\n"],mappings:"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",names:["EventManagerPlugin","_doc","DomEventsPlugin","doc","eventName","element","handler","options","target","callback","__ngFactoryType__","\u0275\u0275inject","DOCUMENT","\u0275\u0275defineInjectable","EVENT_MANAGER_PLUGINS","InjectionToken","EventManager","plugins","_zone","plugin","otherPlugins","p","domEventPlugin","RuntimeError","NgZone","APP_ID_ATTRIBUTE_NAME","removeElements","elements","createStyleElement","style","styleElement","addServerStyles","appId","inline","external","createLinkElement","url","linkElement","SharedStylesHost","nonce","platformId","styles","urls","value","usages","creator","record","host","hostNode","APP_ID","CSP_NONCE","PLATFORM_ID","NAMESPACE_URIS","COMPONENT_REGEX","COMPONENT_VARIABLE","HOST_ATTR","CONTENT_ATTR","REMOVE_STYLES_ON_COMPONENT_DESTROY_DEFAULT","REMOVE_STYLES_ON_COMPONENT_DESTROY","InjectionToken","shimContentAttribute","componentShortId","COMPONENT_REGEX","shimHostAttribute","shimStylesContent","compId","styles","s","DomRendererFactory2","eventManager","sharedStylesHost","appId","removeStylesOnCompDestroy","doc","ngZone","nonce","tracingService","DefaultDomRenderer2","element","type","renderer","EmulatedEncapsulationDomRenderer2","NoneEncapsulationDomRenderer","rendererByCompId","ViewEncapsulation","ShadowDomRenderer","componentId","__ngFactoryType__","\u0275\u0275inject","EventManager","SharedStylesHost","APP_ID","REMOVE_STYLES_ON_COMPONENT_DESTROY","DOCUMENT","NgZone","CSP_NONCE","TracingService","\u0275\u0275defineInjectable","name","namespace","NAMESPACE_URIS","value","parent","newChild","isTemplateNode","refChild","_parent","oldChild","selectorOrNode","preserveContent","el","RuntimeError","node","namespaceUri","style","flags","RendererStyleFlags2","target","event","callback","options","getDOM","wrappedCallback","eventHandler","isTemplateNode","node","ShadowDomRenderer","DefaultDomRenderer2","eventManager","hostEl","component","doc","ngZone","nonce","tracingService","sharedStylesHost","styles","shimStylesContent","style","styleEl","styleUrls","styleUrl","linkEl","createLinkElement","parent","newChild","refChild","_parent","oldChild","NoneEncapsulationDomRenderer","removeStylesOnCompDestroy","compId","allLeavingAnimations","EmulatedEncapsulationDomRenderer2","appId","shimContentAttribute","shimHostAttribute","element","name","el","BrowserDomAdapter","_BrowserDomAdapter","DomAdapter","setRootDomAdapter","el","evt","listener","options","node","tagName","doc","target","href","getBaseElementHref","relativePath","baseElement","name","parseCookieValue","url","BrowserXhr","__ngFactoryType__","\u0275\u0275defineInjectable","MODIFIER_KEYS","_keyMap","MODIFIER_KEY_GETTERS","event","KeyEventsPlugin","EventManagerPlugin","doc","eventName","element","handler","options","parsedEvent","outsideHandler","getDOM","parts","domEventName","key","fullKey","codeIX","modifierName","index","result","fullKeyCode","keycode","modifierGetter","zone","keyName","\u0275\u0275inject","DOCUMENT","bootstrapApplication","rootComponent","context","config","__spreadValues","createProvidersConfig","internalCreateApplication","createProvidersConfig","options","context","BROWSER_MODULE_PROVIDERS","INTERNAL_BROWSER_PLATFORM_PROVIDERS","initDomAdapter","BrowserDomAdapter","errorHandler","ErrorHandler","_document","setDocument","INTERNAL_BROWSER_PLATFORM_PROVIDERS","PLATFORM_ID","PLATFORM_BROWSER_ID","PLATFORM_INITIALIZER","DOCUMENT","BROWSER_MODULE_PROVIDERS","INJECTOR_SCOPE","ErrorHandler","errorHandler","EVENT_MANAGER_PLUGINS","DomEventsPlugin","KeyEventsPlugin","DomRendererFactory2","SharedStylesHost","EventManager","RendererFactory2","XhrFactory","BrowserXhr","Title","_doc","newTitle","__ngFactoryType__","\u0275\u0275inject","DOCUMENT","\u0275\u0275defineInjectable","PRIMARY_OUTLET","RouteTitleKey","ParamsAsMap","params","name","v","convertToParamMap","matchParts","routeParts","urlSegments","posParams","i","part","segment","defaultUrlMatcher","segments","segmentGroup","route","parts","wildcardIndex","consumed","pre","post","firstValueFrom","source","resolve","reject","first","value","err","shallowEqualArrays","a","b","shallowEqual","k1","getDataKeys","k2","key","equalArraysOrString","obj","aSorted","bSorted","val","index","last","wrapIntoObservable","isObservable","isPromise","from","of","wrapIntoPromise","pathCompareMap","equalSegmentGroups","containsSegmentGroup","paramCompareMap","equalParams","containsParams","exactMatchOptions","subsetMatchOptions","isActive","url","router","matchOptions","urlTree","UrlTree","computed","containsTree","__spreadValues","container","containee","options","matrixParams","equalPath","matrixParamsMatch","c","containsSegmentGroupHelper","containeePaths","current","next","containerPaths","containeeSegment","root","UrlSegmentGroup","queryParams","fragment","DEFAULT_SERIALIZER","children","serializePaths","UrlSegment","path","parameters","serializePath","equalSegments","as","bs","mapChildrenIntoArray","fn","res","childOutlet","child","UrlSerializer","__ngFactoryType__","\u0275\u0275defineInjectable","DefaultUrlSerializer","p","UrlParser","tree","serializeSegment","query","serializeQueryParams","encodeUriFragment","primary","k","encodeUriString","s","encodeUriQuery","encodeUriSegment","decode","decodeQuery","serializeMatrixParams","strParams","SEGMENT_RE","matchSegments","str","match","MATRIX_PARAM_SEGMENT_RE","matchMatrixKeySegments","QUERY_PARAM_RE","matchQueryParams","QUERY_PARAM_VALUE_RE","matchUrlQueryParamValue","depth","RuntimeError","valueMatch","decodedKey","decodedVal","currentVal","allowPrimary","outletName","createRoot","rootCandidate","squashSegmentGroup","newChildren","childCandidate","grandChildOutlet","grandChild","mergeTrivialChildren","isUrlTree","createUrlTreeFromSnapshot","relativeTo","commands","urlSerializer","relativeToUrlSegmentGroup","createSegmentGroupFromRoute","createUrlTreeFromSegmentGroup","targetGroup","createSegmentGroupFromRouteRecursive","currentRoute","childOutlets","childSnapshot","rootSegmentGroup","nav","computeNavigation","position","findStartingPositionForTargetGroup","newSegmentGroup","updateSegmentGroupChildren","updateSegmentGroup","isMatrixParams","command","isCommandWithOutlets","normalizeQueryParams","oldRoot","oldSegmentGroup","qp","replaceSegment","newRoot","oldSegment","newSegment","Navigation","isAbsolute","numberOfDoubleDots","cmdWithOutlet","cmd","cmdIdx","outlets","urlPart","partIndex","Position","processChildren","target","modifier","createPositionApplyingDoubleDots","group","g","ci","dd","getOutlets","startIndex","m","prefixedWith","slicedCommands","createNewSegmentGroup","childrenOfEmptyChild","outlet","currentCommandIndex","currentPathIndex","noMatch","curr","compare","paths","createNewSegmentChildren","stringify","IMPERATIVE_NAVIGATION","EventType","RouterEvent","id","NavigationStart","navigationTrigger","restoredState","NavigationEnd","urlAfterRedirects","NavigationCancellationCode","NavigationSkippedCode","NavigationCancel","reason","code","isRedirectingEvent","event","NavigationSkipped","NavigationError","error","RoutesRecognized","state","GuardsCheckStart","GuardsCheckEnd","shouldActivate","ResolveStart","ResolveEnd","RouteConfigLoadStart","RouteConfigLoadEnd","ChildActivationStart","snapshot","ChildActivationEnd","ActivationStart","ActivationEnd","Scroll","routerEvent","anchor","scrollBehavior","pos","BeforeActivateRoutes","BeforeRoutesRecognized","RedirectRequest","navigationBehaviorOptions","isPublicRouterEvent","e","OutletContext","rootInjector","ChildrenOutletContexts","childName","outlet","context","contexts","__ngFactoryType__","\u0275\u0275inject","EnvironmentInjector","\u0275\u0275defineInjectable","Tree","root","t","p","n","findNode","findPath","c","cc","s","value","node","child","path","TreeNode","children","nodeChildrenAsMap","map","RouterState","snapshot","setRouterState","createEmptyState","rootComponent","injector","createEmptyStateSnapshot","emptyUrl","BehaviorSubject","UrlSegment","emptyParams","emptyData","emptyQueryParams","fragment","activated","ActivatedRoute","PRIMARY_OUTLET","ActivatedRouteSnapshot","RouterStateSnapshot","urlSubject","paramsSubject","queryParamsSubject","fragmentSubject","dataSubject","component","futureSnapshot","d","RouteTitleKey","of","convertToParamMap","getInherited","route","parent","paramsInheritanceStrategy","inherited","routeConfig","__spreadValues","hasStaticTitle","url","params","queryParams","data","resolve","environmentInjector","segment","matched","serializeNode","state","advanceActivatedRoute","currentSnapshot","nextSnapshot","shallowEqual","shallowEqualArrays","equalParamsAndUrlSegments","a","b","equalUrlParams","equalSegments","parentsMismatch","config","ROUTER_OUTLET_DATA","InjectionToken","RouterOutlet","EventEmitter","input","inject","ViewContainerRef","ChangeDetectorRef","INPUT_BINDER","changes","firstChange","previousValue","outletName","RuntimeError","cmp","ref","activatedRoute","location","childContexts","OutletInjector","\u0275\u0275defineDirective","\u0275\u0275NgOnChangesFeature","outletData","token","notFoundValue","RoutedComponentInputBinder","dataSubscription","combineLatest","switchMap","index","mirror","reflectComponentType","templateName","\u0275EmptyOutletComponent","\u0275\u0275defineComponent","rf","ctx","\u0275\u0275element","standardizeConfig","r","__spreadProps","createRouterState","routeReuseStrategy","curr","prevState","createNode","createOrReuseChildren","detachedRouteHandle","tree","createActivatedRoute","RedirectCommand","redirectTo","navigationBehaviorOptions","NAVIGATION_CANCELING_ERROR","redirectingNavigationError","urlSerializer","redirect","isUrlTree","error","navigationCancelingError","NavigationCancellationCode","message","code","isRedirectingNavigationCancelingError","isNavigationCancelingError","ActivateRoutes","routeReuseStrategy","futureState","currState","forwardEvent","inputBindingEnabled","parentContexts","futureRoot","currRoot","advanceActivatedRoute","futureNode","currNode","contexts","children","nodeChildrenAsMap","futureChild","childOutletName","v","parentContext","future","curr","context","route","treeNode","componentRef","c","ActivationEnd","ChildActivationEnd","stored","CanActivate","path","CanDeactivate","component","getAllRouteGuards","getChildRouteGuards","getCanActivateChild","p","canActivateChild","getTokenOrFunctionIdentity","tokenOrFunction","injector","NOT_FOUND","result","isInjectable","futurePath","checks","prevChildren","getRouteGuards","k","deactivateRouteAndItsChildren","shouldRun","shouldRunGuardsAndResolvers","mode","runInInjectionContext","equalPath","shallowEqual","equalParamsAndUrlSegments","r","childName","node","isFunction","isBoolean","isCanLoad","guard","isCanActivate","isCanActivateChild","isCanDeactivate","isCanMatch","isEmptyError","e","EmptyError","INITIAL_VALUE","prioritizedGuardValue","switchMap","obs","combineLatest","o","take","startWith","map","results","isRedirect","filter","item","val","isUrlTree","RedirectCommand","abortSignalToObservable","signal","of","Observable","subscriber","handler","takeUntilAbort","takeUntil","checkGuards","mergeMap","t","targetSnapshot","currentSnapshot","canActivateChecks","canDeactivateChecks","__spreadProps","__spreadValues","runCanDeactivateChecks","canDeactivate","runCanActivateChecks","guardsResult","futureRSS","currRSS","from","check","runCanDeactivate","first","futureSnapshot","concatMap","concat","fireChildActivationStart","fireActivationStart","runCanActivateChild","runCanActivate","snapshot","ActivationStart","ChildActivationStart","futureARS","canActivate","canActivateObservables","defer","closestInjector","guardVal","wrapIntoObservable","canActivateChildGuardsMapped","_","d","guardsMapped","currARS","canDeactivateObservables","runCanLoadGuards","segments","urlSerializer","abortSignal","canLoad","canLoadObservables","injectionToken","obs$","redirectIfUrlTree","pipe","tap","redirectingNavigationError","runCanMatchGuards","canMatch","canMatchObservables","NoMatch","_NoMatch","segmentGroup","AbsoluteRedirect","_AbsoluteRedirect","urlTree","namedOutletsRedirect","redirectTo","RuntimeError","canLoadFails","navigationCancelingError","NavigationCancellationCode","ApplyRedirects","res","PRIMARY_OUTLET","posParams","redirect","getRedirectResult","UrlTree","newTree","newRoot","redirectToParams","actualParams","sourceName","group","updatedSegments","name","child","UrlSegmentGroup","redirectToSegments","actualSegments","s","redirectToUrlSegment","pos","idx","redirectToFn","firstValueFrom","getOrCreateRouteInjectorIfNeeded","currentInjector","createEnvironmentInjector","getOutlet","route","PRIMARY_OUTLET","sortByMatchingOutlets","routes","outletName","sortedConfig","r","noMatch","createPreMatchRouteSnapshot","snapshot","matchWithChecks","segmentGroup","segments","injector","urlSerializer","createSnapshot","abortSignal","result","match","of","currentSnapshot","getOrCreateRouteInjectorIfNeeded","runCanMatchGuards","map","v","__spreadValues","res","defaultUrlMatcher","posParams","k","parameters","split","consumedSegments","slicedSegments","config","containsEmptyPathMatchesWithNamedOutlets","UrlSegmentGroup","createChildrenForEmptyPaths","containsEmptyPathMatches","addEmptyPathsToChildrenIfNeeded","children","emptyPathMatch","primarySegment","s","noLeftoversInUrl","outlet","NoLeftoversInUrl","recognize$1","configLoader","rootComponentType","urlTree","paramsInheritanceStrategy","Recognizer","MAX_ALLOWED_REDIRECTS","ApplyRedirects","e","RuntimeError","rootSegmentGroup","rootSnapshot","rootNode","TreeNode","routeState","RouterStateSnapshot","tree","createUrlTreeFromSnapshot","ActivatedRouteSnapshot","AbsoluteRedirect","NoMatch","parentRoute","child","childOutlets","childOutlet","outletChildren","mergedChildren","mergeEmptyPathMatches","sortActivatedRouteSnapshots","allowRedirects","isEmptyError","rawSegment","matched","positionalParamSegments","remainingSegments","newTree","newSegments","getData","getResolve","inherited","getInherited","firstValueFrom","childConfig","childInjector","matchedOnOutlet","ngModuleFactory","runCanLoadGuards","cfg","canLoadFails","nodes","a","b","hasEmptyPathConfig","node","mergedNodes","duplicateEmptyPathNode","resultNode","mergedNode","getData","route","getResolve","recognize","injector","configLoader","rootComponentType","config","serializer","paramsInheritanceStrategy","abortSignal","mergeMap","t","targetSnapshot","urlAfterRedirects","recognize$1","__spreadProps","__spreadValues","resolveData","canActivateChecks","of","routesWithResolversToRun","check","routesNeedingDataUpdates","newRoute","flattenRouteTree","routesProcessed","from","concatMap","runResolve","getInherited","tap","takeLast","_","EMPTY","descendants","child","futureARS","futureRSS","resolve","hasStaticTitle","RouteTitleKey","defer","resolveNode","map","resolvedData","keys","getDataKeys","data","key","getResolver","first","value","RedirectCommand","redirectingNavigationError","DefaultUrlSerializer","catchError","e","isEmptyError","throwError","injectionToken","closestInjector","resolver","getTokenOrFunctionIdentity","resolverValue","runInInjectionContext","wrapIntoObservable","switchTap","next","switchMap","v","nextResult","TitleStrategy","snapshot","pageTitle","PRIMARY_OUTLET","__ngFactoryType__","\u0275\u0275defineInjectable","inject","DefaultTitleStrategy","title","\u0275\u0275inject","Title","ROUTER_CONFIGURATION","InjectionToken","ROUTES","RouterConfigLoader","Compiler","loader","loaded","wrapIntoPromise","component","maybeResolveResources","maybeUnwrapDefaultExport","parentInjector","result","loadChildren","compiler","onLoadEndListener","factoryOrRoutes","NgModuleFactory$1","rawRoutes","requireStandaloneComponents","factory","standardizeConfig","isWrappedDefaultExport","input","UrlHandlingStrategy","DefaultUrlHandlingStrategy","url","newUrlPart","wholeUrl","CREATE_VIEW_TRANSITION","VIEW_TRANSITION_OPTIONS","createViewTransition","to","transitionOptions","document","DOCUMENT","resolveViewTransitionStarted","viewTransitionStarted","transition","createRenderPromise","error","onViewTransitionCreated","afterNextRender","noop","NAVIGATION_ERROR_HANDLER","NavigationTransitions","signal","Subject","EnvironmentInjector","DestroyRef","UrlSerializer","ChildrenOutletContexts","Location","INPUT_BINDER","onLoadStart","r","RouteConfigLoadStart","onLoadEnd","RouteConfigLoadEnd","request","id","untracked","router","BehaviorSubject","filter","overallTransitionState","completedOrAborted","abortController","shouldContinueNavigation","NavigationCancellationCode","lastSuccessfulNavigation","urlTransition","onSameUrlNavigation","NavigationSkipped","NavigationSkippedCode","NavigationStart","nav","BeforeRoutesRecognized","routesRecognized","RoutesRecognized","extractedUrl","source","restoredState","extras","navStart","createEmptyState","guardsStart","GuardsCheckStart","getAllRouteGuards","checkGuards","evt","guardsEnd","GuardsCheckEnd","resolveStart","ResolveStart","dataResolved","resolveEnd","ResolveEnd","loadComponents","loaders","loadedComponent","currentSnapshot","take","targetRouterState","createRouterState","BeforeActivateRoutes","deferred","ActivateRoutes","NavigationEnd","takeUntil","abortSignalToObservable","err","finalize","isNavigationCancelingError","NavigationCancel","isRedirectingNavigationCancelingError","RedirectRequest","navigationError","NavigationError","navigationErrorHandlerResult","message","cancellationCode","ee","reason","code","navCancel","currentBrowserUrl","currentNavigation","targetBrowserUrl","isBrowserTriggeredNavigation","IMPERATIVE_NAVIGATION","ROUTE_INJECTOR_CLEANUP","RouteReuseStrategy","__ngFactoryType__","\u0275\u0275defineInjectable","inject","DefaultRouteReuseStrategy","BaseRouteReuseStrategy","route","detachedTree","future","curr","\u0275DefaultRouteReuseStrategy_BaseFactory","\u0275\u0275getInheritedFactory","StateManager","UrlSerializer","ROUTER_CONFIGURATION","Location","UrlHandlingStrategy","UrlTree","finalUrl","initialUrl","targetBrowserUrl","rawUrl","url","targetRouterState","createEmptyState","EnvironmentInjector","HistoryStateManager","listener","event","currentTransition","NavigationStart","NavigationSkipped","RoutesRecognized","BeforeActivateRoutes","NavigationCancel","isRedirectingEvent","NavigationError","NavigationEnd","path","extras","id","replaceUrl","state","currentBrowserPageId","newState","__spreadValues","navigation","restoringFromCaughtError","targetPagePosition","navigationId","routerPageId","\u0275HistoryStateManager_BaseFactory","afterNextNavigation","router","action","filter","map","NavigationCancellationCode","result","take","Router","Console","PendingTasksInternal","NavigationTransitions","Subject","ROUTE_INJECTOR_CLEANUP","ROUTES","INPUT_BINDER","Subscription","subscription","e","currentNavigation","untracked","RedirectRequest","opts","mergedTree","isBrowserTriggeredNavigation","IMPERATIVE_NAVIGATION","isPublicRouterEvent","rootComponentType","source","restoredState","stateCopy","urlTree","INTERNAL_APPLICATION_ERROR_HANDLER","config","standardizeConfig","commands","navigationExtras","relativeTo","queryParams","fragment","queryParamsHandling","preserveFragment","f","q","relativeToUrlSegmentGroup","relativeToSnapshot","createSegmentGroupFromRoute","createUrlTreeFromSegmentGroup","isUrlTree","validateCommands","formatRuntimeError","matchOptions","options","exactMatchOptions","subsetMatchOptions","containsTree","params","key","value","priorPromise","resolve","reject","promise","res","rej","taskId","i","RuntimeError","ReactiveRouterState","inject","Router","StateManager","signal","UrlSerializer","NavigationEnd","fragment","root","queryParams","UrlTree","__ngFactoryType__","\u0275\u0275defineInjectable","RouterLink","HostAttributeToken","linkedSignal","untracked","value","Subject","INTERNAL_APPLICATION_ERROR_HANDLER","ROUTER_CONFIGURATION","router","route","tabIndexAttribute","renderer","el","locationStrategy","tagName","newTabIndex","changes","commandsOrUrlTree","isUrlTree","button","ctrlKey","shiftKey","altKey","metaKey","urlTree","extras","e","attrName","attrValue","nativeElement","computed","shouldTrackParams","handling","routerLinkInput","a","b","\u0275\u0275directiveInject","ActivatedRoute","\u0275\u0275injectAttribute","Renderer2","ElementRef","LocationStrategy","\u0275\u0275defineDirective","rf","ctx","\u0275\u0275listener","$event","\u0275\u0275attribute","\u0275\u0275sanitizeUrlOrResourceUrl","booleanAttribute","\u0275\u0275NgOnChangesFeature","RouterLinkActive","EventEmitter","element","cdr","of","mergeAll","_","allLinkChanges","link","from","data","classes","c","hasActiveLinks","options","isActiveMatchOptions","__spreadValues","exactMatchOptions","subsetMatchOptions","isActive","isActiveCheckFn","ChangeDetectorRef","dirIndex","\u0275\u0275contentQuery","_t","\u0275\u0275queryRefresh","\u0275\u0275loadQuery","o","PreloadingStrategy","RouterPreloader","router","injector","preloadingStrategy","loader","filter","NavigationEnd","concatMap","routes","res","route","createEnvironmentInjector","injectorForCurrentRoute","injectorForChildren","from","mergeAll","of","loadedChildren$","recursiveLoadChildren$","mergeMap","config","loadComponent$","__ngFactoryType__","\u0275\u0275inject","Router","EnvironmentInjector","PreloadingStrategy","RouterConfigLoader","\u0275\u0275defineInjectable","ROUTER_SCROLLER","InjectionToken","RouterScroller","IMPERATIVE_NAVIGATION","inject","UrlSerializer","NgZone","ViewportScroller","NavigationTransitions","options","NavigationStart","NavigationSkipped","NavigationSkippedCode","Scroll","instantScroll","routerEvent","anchor","scroll","untracked","resolve","\u0275\u0275invalidFactory","provideRouter","routes","features","makeEnvironmentProviders","ROUTES","ActivatedRoute","rootRoute","APP_BOOTSTRAP_LISTENER","getBootstrapListener","feature","inject","Router","routerFeature","kind","providers","getBootstrapListener","injector","inject","Injector","bootstrappedComponentRef","ref","ApplicationRef","router","Router","bootstrapDone","BOOTSTRAP_DONE","INITIAL_NAVIGATION","ROUTER_PRELOADER","ROUTER_SCROLLER","InjectionToken","Subject","withEnabledBlockingInitialNavigation","providers","IS_ENABLED_BLOCKING_INITIAL_NAVIGATION","provideAppInitializer","LOCATION_INITIALIZED","resolve","afterNextNavigation","NavigationTransitions","of","routerFeature","withDisabledInitialNavigation","ROUTER_PRELOADER","InjectionToken","withPreloading","preloadingStrategy","routerFeature","RouterPreloader","PreloadingStrategy","withComponentInputBinding","routerFeature","RoutedComponentInputBinder","INPUT_BINDER","withViewTransitions","options","performanceMarkFeature","providers","CREATE_VIEW_TRANSITION","createViewTransition","VIEW_TRANSITION_OPTIONS","__spreadValues","ROUTER_PROVIDERS","Location","UrlSerializer","DefaultUrlSerializer","Router","ChildrenOutletContexts","ActivatedRoute","rootRoute","RouterConfigLoader","RouterModule","routes","config","ROUTES","NAVIGATION_ERROR_HANDLER","ROUTER_CONFIGURATION","provideHashLocationStrategy","providePathLocationStrategy","provideRouterScroller","withPreloading","provideInitialNavigation","withComponentInputBinding","withViewTransitions","provideRouterInitializer","__ngFactoryType__","\u0275\u0275defineNgModule","\u0275\u0275defineInjector","ROUTER_SCROLLER","viewportScroller","inject","ViewportScroller","RouterScroller","LocationStrategy","HashLocationStrategy","PathLocationStrategy","provideInitialNavigation","config","withDisabledInitialNavigation","withEnabledBlockingInitialNavigation","ROUTER_INITIALIZER","InjectionToken","provideRouterInitializer","getBootstrapListener","APP_BOOTSTRAP_LISTENER"],x_google_ignoreList:[0,1,2,3,4]},_coverageSchema:"1a1c01bbd47fc00a2c39e90264f33305004495a9",hash:"91da26e96d75f74b3ad382a97bfa7f5ebb0453f0"};var coverage=global[gcv]||(global[gcv]={});if(!coverage[path]||coverage[path].hash!==hash){coverage[path]=coverageData;}var actualCoverage=coverage[path];{// @ts-ignore +cov_57vuh9v2e=function(){return actualCoverage;};}return actualCoverage;}cov_57vuh9v2e();import{a as je,b as Wr,c as ge,d as Yr,k as Zr,m as vn}from"./chunk-F6OGAIBI.js";import{$ as sn,$b as Vr,A as ur,Aa as Er,B as J,Ba as hn,C as on,Da as br,E as lr,Ea as fn,F as j,Fa as F,G as ct,Ga as Mr,H as k,Ha as Ir,I as S,Ia as Tr,J as dr,Ja as pt,Ka as Dr,L as m,La as gt,M as ut,Ma as Le,Mb as kr,N as hr,O as C,Ob as w,P as y,Pb as vt,Q as h,Qa as Ar,Qb as Hr,R as fr,Ra as _r,Rb as $r,S as pr,T as Y,Ta as pn,Tb as zr,U as _,Ua as gn,Ub as mt,Va as Or,Wa as Nr,Wb as Fr,Xb as yt,Yb as Br,Z as lt,Zb as xe,_ as H,_b as qr,a as rr,aa as gr,b as ir,ba as ae,bc as Gr,c as or,ca as Ne,cc as Qr,d as se,da as an,dc as Kr,e as U,ea as dt,f as L,fb as Pr,g as M,ga as b,h as g,i as sr,j as nn,ja as Pe,k as ar,ka as cn,la as vr,m as T,ma as un,n as rn,na as mr,nb as Ur,o as z,oa as ln,p as _e,pa as yr,q as cr,qa as ht,r as st,ra as dn,sa as Rr,sb as Lr,ta as ft,ub as xr,v as Z,va as Sr,vb as jr,w as at,x as Oe,xa as Ue,y as pe,ya as wr,za as Cr}from"./chunk-RYTNMYZW.js";import{a as d,b as A}from"./chunk-VCZGUBMY.js";cov_57vuh9v2e().s[0]++;var ke=class{_doc;constructor(r){cov_57vuh9v2e().f[0]++;cov_57vuh9v2e().s[1]++;this._doc=r;}manager;},Rt=(cov_57vuh9v2e().s[2]++,(()=>{cov_57vuh9v2e().f[1]++;class t extends ke{constructor(e){cov_57vuh9v2e().f[2]++;cov_57vuh9v2e().s[3]++;super(e);}supports(e){cov_57vuh9v2e().f[3]++;cov_57vuh9v2e().s[4]++;return!0;}addEventListener(e,n,i,o){cov_57vuh9v2e().f[4]++;cov_57vuh9v2e().s[5]++;return e.addEventListener(n,i,o),()=>{cov_57vuh9v2e().f[5]++;cov_57vuh9v2e().s[6]++;return this.removeEventListener(e,n,i,o);};}removeEventListener(e,n,i,o){cov_57vuh9v2e().f[6]++;cov_57vuh9v2e().s[7]++;return e.removeEventListener(n,i,o);}static ɵfac=(cov_57vuh9v2e().s[8]++,function(n){cov_57vuh9v2e().f[7]++;cov_57vuh9v2e().s[9]++;return new((cov_57vuh9v2e().b[0][0]++,n)||(cov_57vuh9v2e().b[0][1]++,t))(y(H));});static ɵprov=(cov_57vuh9v2e().s[10]++,m({token:t,factory:t.ɵfac}));}cov_57vuh9v2e().s[11]++;return t;})()),Et=(cov_57vuh9v2e().s[12]++,new C("")),Sn=(cov_57vuh9v2e().s[13]++,(()=>{cov_57vuh9v2e().f[8]++;class t{_zone;_plugins;_eventNameToPlugin=(cov_57vuh9v2e().s[14]++,new Map());constructor(e,n){cov_57vuh9v2e().f[9]++;cov_57vuh9v2e().s[15]++;this._zone=n,e.forEach(s=>{cov_57vuh9v2e().f[10]++;cov_57vuh9v2e().s[16]++;s.manager=this;});let i=(cov_57vuh9v2e().s[17]++,e.filter(s=>{cov_57vuh9v2e().f[11]++;cov_57vuh9v2e().s[18]++;return!(s instanceof Rt);}));cov_57vuh9v2e().s[19]++;this._plugins=i.slice().reverse();let o=(cov_57vuh9v2e().s[20]++,e.find(s=>{cov_57vuh9v2e().f[12]++;cov_57vuh9v2e().s[21]++;return s instanceof Rt;}));cov_57vuh9v2e().s[22]++;(cov_57vuh9v2e().b[1][0]++,o)&&(cov_57vuh9v2e().b[1][1]++,this._plugins.push(o));}addEventListener(e,n,i,o){cov_57vuh9v2e().f[13]++;cov_57vuh9v2e().s[23]++;return this._findPluginFor(n).addEventListener(e,n,i,o);}getZone(){cov_57vuh9v2e().f[14]++;cov_57vuh9v2e().s[24]++;return this._zone;}_findPluginFor(e){cov_57vuh9v2e().f[15]++;let n=(cov_57vuh9v2e().s[25]++,this._eventNameToPlugin.get(e));cov_57vuh9v2e().s[26]++;if(n){cov_57vuh9v2e().b[2][0]++;cov_57vuh9v2e().s[27]++;return n;}else{cov_57vuh9v2e().b[2][1]++;}cov_57vuh9v2e().s[28]++;if(n=this._plugins.find(o=>{cov_57vuh9v2e().f[16]++;cov_57vuh9v2e().s[29]++;return o.supports(e);}),!n){cov_57vuh9v2e().b[3][0]++;cov_57vuh9v2e().s[30]++;throw new S(5101,!1);}else{cov_57vuh9v2e().b[3][1]++;}cov_57vuh9v2e().s[31]++;return this._eventNameToPlugin.set(e,n),n;}static ɵfac=(cov_57vuh9v2e().s[32]++,function(n){cov_57vuh9v2e().f[17]++;cov_57vuh9v2e().s[33]++;return new((cov_57vuh9v2e().b[4][0]++,n)||(cov_57vuh9v2e().b[4][1]++,t))(y(Et),y(Ne));});static ɵprov=(cov_57vuh9v2e().s[34]++,m({token:t,factory:t.ɵfac}));}cov_57vuh9v2e().s[35]++;return t;})()),mn=(cov_57vuh9v2e().s[36]++,"ng-app-id");function Jr(t){cov_57vuh9v2e().f[18]++;cov_57vuh9v2e().s[37]++;for(let r of t){cov_57vuh9v2e().s[38]++;r.remove();}}function Xr(t,r){cov_57vuh9v2e().f[19]++;let e=(cov_57vuh9v2e().s[39]++,r.createElement("style"));cov_57vuh9v2e().s[40]++;return e.textContent=t,e;}function uo(t,r,e,n){cov_57vuh9v2e().f[20]++;let i=(cov_57vuh9v2e().s[41]++,t.head?.querySelectorAll(`style[${mn}="${r}"],link[${mn}="${r}"]`));cov_57vuh9v2e().s[42]++;if(i){cov_57vuh9v2e().b[5][0]++;cov_57vuh9v2e().s[43]++;for(let o of i){cov_57vuh9v2e().s[44]++;o.removeAttribute(mn),o instanceof HTMLLinkElement?(cov_57vuh9v2e().b[6][0]++,n.set(o.href.slice(o.href.lastIndexOf("/")+1),{usage:0,elements:[o]})):(cov_57vuh9v2e().b[6][1]++,(cov_57vuh9v2e().b[7][0]++,o.textContent)&&(cov_57vuh9v2e().b[7][1]++,e.set(o.textContent,{usage:0,elements:[o]})));}}else{cov_57vuh9v2e().b[5][1]++;}}function Rn(t,r){cov_57vuh9v2e().f[21]++;let e=(cov_57vuh9v2e().s[45]++,r.createElement("link"));cov_57vuh9v2e().s[46]++;return e.setAttribute("rel","stylesheet"),e.setAttribute("href",t),e;}var wn=(cov_57vuh9v2e().s[47]++,(()=>{cov_57vuh9v2e().f[22]++;class t{doc;appId;nonce;inline=(cov_57vuh9v2e().s[48]++,new Map());external=(cov_57vuh9v2e().s[49]++,new Map());hosts=(cov_57vuh9v2e().s[50]++,new Set());constructor(e,n,i,o=(cov_57vuh9v2e().b[8][0]++,{})){cov_57vuh9v2e().f[23]++;cov_57vuh9v2e().s[51]++;this.doc=e,this.appId=n,this.nonce=i,uo(e,n,this.inline,this.external),this.hosts.add(e.head);}addStyles(e,n){cov_57vuh9v2e().f[24]++;cov_57vuh9v2e().s[52]++;for(let i of e){cov_57vuh9v2e().s[53]++;this.addUsage(i,this.inline,Xr);}cov_57vuh9v2e().s[54]++;n?.forEach(i=>{cov_57vuh9v2e().f[25]++;cov_57vuh9v2e().s[55]++;return this.addUsage(i,this.external,Rn);});}removeStyles(e,n){cov_57vuh9v2e().f[26]++;cov_57vuh9v2e().s[56]++;for(let i of e){cov_57vuh9v2e().s[57]++;this.removeUsage(i,this.inline);}cov_57vuh9v2e().s[58]++;n?.forEach(i=>{cov_57vuh9v2e().f[27]++;cov_57vuh9v2e().s[59]++;return this.removeUsage(i,this.external);});}addUsage(e,n,i){cov_57vuh9v2e().f[28]++;let o=(cov_57vuh9v2e().s[60]++,n.get(e));cov_57vuh9v2e().s[61]++;o?(cov_57vuh9v2e().b[9][0]++,o.usage++):(cov_57vuh9v2e().b[9][1]++,n.set(e,{usage:1,elements:[...this.hosts].map(s=>{cov_57vuh9v2e().f[29]++;cov_57vuh9v2e().s[62]++;return this.addElement(s,i(e,this.doc));})}));}removeUsage(e,n){cov_57vuh9v2e().f[30]++;let i=(cov_57vuh9v2e().s[63]++,n.get(e));cov_57vuh9v2e().s[64]++;(cov_57vuh9v2e().b[10][0]++,i)&&(cov_57vuh9v2e().b[10][1]++,i.usage--,(cov_57vuh9v2e().b[11][0]++,i.usage<=0)&&(cov_57vuh9v2e().b[11][1]++,Jr(i.elements),n.delete(e)));}ngOnDestroy(){cov_57vuh9v2e().f[31]++;cov_57vuh9v2e().s[65]++;for(let[,{elements:e}]of[...this.inline,...this.external]){cov_57vuh9v2e().s[66]++;Jr(e);}cov_57vuh9v2e().s[67]++;this.hosts.clear();}addHost(e){cov_57vuh9v2e().f[32]++;cov_57vuh9v2e().s[68]++;this.hosts.add(e);cov_57vuh9v2e().s[69]++;for(let[n,{elements:i}]of this.inline){cov_57vuh9v2e().s[70]++;i.push(this.addElement(e,Xr(n,this.doc)));}cov_57vuh9v2e().s[71]++;for(let[n,{elements:i}]of this.external){cov_57vuh9v2e().s[72]++;i.push(this.addElement(e,Rn(n,this.doc)));}}removeHost(e){cov_57vuh9v2e().f[33]++;cov_57vuh9v2e().s[73]++;this.hosts.delete(e);}addElement(e,n){cov_57vuh9v2e().f[34]++;cov_57vuh9v2e().s[74]++;return(cov_57vuh9v2e().b[12][0]++,this.nonce)&&(cov_57vuh9v2e().b[12][1]++,n.setAttribute("nonce",this.nonce)),e.appendChild(n);}static ɵfac=(cov_57vuh9v2e().s[75]++,function(n){cov_57vuh9v2e().f[35]++;cov_57vuh9v2e().s[76]++;return new((cov_57vuh9v2e().b[13][0]++,n)||(cov_57vuh9v2e().b[13][1]++,t))(y(H),y(ln),y(dn,8),y(ht));});static ɵprov=(cov_57vuh9v2e().s[77]++,m({token:t,factory:t.ɵfac}));}cov_57vuh9v2e().s[78]++;return t;})()),yn=(cov_57vuh9v2e().s[79]++,{svg:"http://www.w3.org/2000/svg",xhtml:"http://www.w3.org/1999/xhtml",xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/",math:"http://www.w3.org/1998/Math/MathML"}),Cn=(cov_57vuh9v2e().s[80]++,/%COMP%/g);var ti=(cov_57vuh9v2e().s[81]++,"%COMP%"),lo=(cov_57vuh9v2e().s[82]++,`_nghost-${ti}`),ho=(cov_57vuh9v2e().s[83]++,`_ngcontent-${ti}`),fo=(cov_57vuh9v2e().s[84]++,!0),po=(cov_57vuh9v2e().s[85]++,new C("",{factory:()=>{cov_57vuh9v2e().f[36]++;cov_57vuh9v2e().s[86]++;return fo;}}));function go(t){cov_57vuh9v2e().f[37]++;cov_57vuh9v2e().s[87]++;return ho.replace(Cn,t);}function vo(t){cov_57vuh9v2e().f[38]++;cov_57vuh9v2e().s[88]++;return lo.replace(Cn,t);}function ni(t,r){cov_57vuh9v2e().f[39]++;cov_57vuh9v2e().s[89]++;return r.map(e=>{cov_57vuh9v2e().f[40]++;cov_57vuh9v2e().s[90]++;return e.replace(Cn,t);});}cov_57vuh9v2e().s[122]++;var En=(cov_57vuh9v2e().s[91]++,(()=>{cov_57vuh9v2e().f[41]++;class t{eventManager;sharedStylesHost;appId;removeStylesOnCompDestroy;doc;ngZone;nonce;tracingService;rendererByCompId=(cov_57vuh9v2e().s[92]++,new Map());defaultRenderer;constructor(e,n,i,o,s,a,c=(cov_57vuh9v2e().b[14][0]++,null),u=(cov_57vuh9v2e().b[15][0]++,null)){cov_57vuh9v2e().f[42]++;cov_57vuh9v2e().s[93]++;this.eventManager=e,this.sharedStylesHost=n,this.appId=i,this.removeStylesOnCompDestroy=o,this.doc=s,this.ngZone=a,this.nonce=c,this.tracingService=u,this.defaultRenderer=new He(e,s,a,this.tracingService);}createRenderer(e,n){cov_57vuh9v2e().f[43]++;cov_57vuh9v2e().s[94]++;if((cov_57vuh9v2e().b[17][0]++,!e)||(cov_57vuh9v2e().b[17][1]++,!n)){cov_57vuh9v2e().b[16][0]++;cov_57vuh9v2e().s[95]++;return this.defaultRenderer;}else{cov_57vuh9v2e().b[16][1]++;}let i=(cov_57vuh9v2e().s[96]++,this.getOrCreateRenderer(e,n));cov_57vuh9v2e().s[97]++;return i instanceof wt?(cov_57vuh9v2e().b[18][0]++,i.applyToHost(e)):(cov_57vuh9v2e().b[18][1]++,(cov_57vuh9v2e().b[19][0]++,i instanceof $e)&&(cov_57vuh9v2e().b[19][1]++,i.applyStyles())),i;}getOrCreateRenderer(e,n){cov_57vuh9v2e().f[44]++;let i=(cov_57vuh9v2e().s[98]++,this.rendererByCompId),o=(cov_57vuh9v2e().s[99]++,i.get(n.id));cov_57vuh9v2e().s[100]++;if(!o){cov_57vuh9v2e().b[20][0]++;let s=(cov_57vuh9v2e().s[101]++,this.doc),a=(cov_57vuh9v2e().s[102]++,this.ngZone),c=(cov_57vuh9v2e().s[103]++,this.eventManager),u=(cov_57vuh9v2e().s[104]++,this.sharedStylesHost),l=(cov_57vuh9v2e().s[105]++,this.removeStylesOnCompDestroy),f=(cov_57vuh9v2e().s[106]++,this.tracingService);cov_57vuh9v2e().s[107]++;switch(n.encapsulation){case ft.Emulated:cov_57vuh9v2e().b[21][0]++;cov_57vuh9v2e().s[108]++;o=new wt(c,u,n,this.appId,l,s,a,f);cov_57vuh9v2e().s[109]++;break;case ft.ShadowDom:cov_57vuh9v2e().b[21][1]++;cov_57vuh9v2e().s[110]++;return new St(c,e,n,s,a,this.nonce,f,u);case ft.ExperimentalIsolatedShadowDom:cov_57vuh9v2e().b[21][2]++;cov_57vuh9v2e().s[111]++;return new St(c,e,n,s,a,this.nonce,f);default:cov_57vuh9v2e().b[21][3]++;cov_57vuh9v2e().s[112]++;o=new $e(c,u,n,l,s,a,f);cov_57vuh9v2e().s[113]++;break;}cov_57vuh9v2e().s[114]++;i.set(n.id,o);}else{cov_57vuh9v2e().b[20][1]++;}cov_57vuh9v2e().s[115]++;return o;}ngOnDestroy(){cov_57vuh9v2e().f[45]++;cov_57vuh9v2e().s[116]++;this.rendererByCompId.clear();}componentReplaced(e){cov_57vuh9v2e().f[46]++;cov_57vuh9v2e().s[117]++;this.rendererByCompId.delete(e);}static ɵfac=(cov_57vuh9v2e().s[118]++,function(n){cov_57vuh9v2e().f[47]++;cov_57vuh9v2e().s[119]++;return new((cov_57vuh9v2e().b[22][0]++,n)||(cov_57vuh9v2e().b[22][1]++,t))(y(Sn),y(wn),y(ln),y(po),y(H),y(Ne),y(dn),y(Cr,8));});static ɵprov=(cov_57vuh9v2e().s[120]++,m({token:t,factory:t.ɵfac}));}cov_57vuh9v2e().s[121]++;return t;})()),He=class{eventManager;doc;ngZone;tracingService;data=(cov_57vuh9v2e().s[123]++,Object.create(null));throwOnSyntheticProps=(cov_57vuh9v2e().s[124]++,!0);constructor(r,e,n,i){cov_57vuh9v2e().f[48]++;cov_57vuh9v2e().s[125]++;this.eventManager=r,this.doc=e,this.ngZone=n,this.tracingService=i;}destroy(){cov_57vuh9v2e().f[49]++;}destroyNode=(cov_57vuh9v2e().s[126]++,null);createElement(r,e){cov_57vuh9v2e().f[50]++;cov_57vuh9v2e().s[127]++;return e?(cov_57vuh9v2e().b[23][0]++,this.doc.createElementNS((cov_57vuh9v2e().b[24][0]++,yn[e])||(cov_57vuh9v2e().b[24][1]++,e),r)):(cov_57vuh9v2e().b[23][1]++,this.doc.createElement(r));}createComment(r){cov_57vuh9v2e().f[51]++;cov_57vuh9v2e().s[128]++;return this.doc.createComment(r);}createText(r){cov_57vuh9v2e().f[52]++;cov_57vuh9v2e().s[129]++;return this.doc.createTextNode(r);}appendChild(r,e){cov_57vuh9v2e().f[53]++;cov_57vuh9v2e().s[130]++;(ei(r)?(cov_57vuh9v2e().b[25][0]++,r.content):(cov_57vuh9v2e().b[25][1]++,r)).appendChild(e);}insertBefore(r,e,n){cov_57vuh9v2e().f[54]++;cov_57vuh9v2e().s[131]++;(cov_57vuh9v2e().b[26][0]++,r)&&(cov_57vuh9v2e().b[26][1]++,(ei(r)?(cov_57vuh9v2e().b[27][0]++,r.content):(cov_57vuh9v2e().b[27][1]++,r)).insertBefore(e,n));}removeChild(r,e){cov_57vuh9v2e().f[55]++;cov_57vuh9v2e().s[132]++;e.remove();}selectRootElement(r,e){cov_57vuh9v2e().f[56]++;let n=(cov_57vuh9v2e().s[133]++,typeof r=="string"?(cov_57vuh9v2e().b[28][0]++,this.doc.querySelector(r)):(cov_57vuh9v2e().b[28][1]++,r));cov_57vuh9v2e().s[134]++;if(!n){cov_57vuh9v2e().b[29][0]++;cov_57vuh9v2e().s[135]++;throw new S(-5104,!1);}else{cov_57vuh9v2e().b[29][1]++;}cov_57vuh9v2e().s[136]++;return(cov_57vuh9v2e().b[30][0]++,e)||(cov_57vuh9v2e().b[30][1]++,n.textContent=""),n;}parentNode(r){cov_57vuh9v2e().f[57]++;cov_57vuh9v2e().s[137]++;return r.parentNode;}nextSibling(r){cov_57vuh9v2e().f[58]++;cov_57vuh9v2e().s[138]++;return r.nextSibling;}setAttribute(r,e,n,i){cov_57vuh9v2e().f[59]++;cov_57vuh9v2e().s[139]++;if(i){cov_57vuh9v2e().b[31][0]++;cov_57vuh9v2e().s[140]++;e=i+":"+e;let o=(cov_57vuh9v2e().s[141]++,yn[i]);cov_57vuh9v2e().s[142]++;o?(cov_57vuh9v2e().b[32][0]++,r.setAttributeNS(o,e,n)):(cov_57vuh9v2e().b[32][1]++,r.setAttribute(e,n));}else{cov_57vuh9v2e().b[31][1]++;cov_57vuh9v2e().s[143]++;r.setAttribute(e,n);}}removeAttribute(r,e,n){cov_57vuh9v2e().f[60]++;cov_57vuh9v2e().s[144]++;if(n){cov_57vuh9v2e().b[33][0]++;let i=(cov_57vuh9v2e().s[145]++,yn[n]);cov_57vuh9v2e().s[146]++;i?(cov_57vuh9v2e().b[34][0]++,r.removeAttributeNS(i,e)):(cov_57vuh9v2e().b[34][1]++,r.removeAttribute(`${n}:${e}`));}else{cov_57vuh9v2e().b[33][1]++;cov_57vuh9v2e().s[147]++;r.removeAttribute(e);}}addClass(r,e){cov_57vuh9v2e().f[61]++;cov_57vuh9v2e().s[148]++;r.classList.add(e);}removeClass(r,e){cov_57vuh9v2e().f[62]++;cov_57vuh9v2e().s[149]++;r.classList.remove(e);}setStyle(r,e,n,i){cov_57vuh9v2e().f[63]++;cov_57vuh9v2e().s[150]++;i&(Ue.DashCase|Ue.Important)?(cov_57vuh9v2e().b[35][0]++,r.style.setProperty(e,n,i&Ue.Important?(cov_57vuh9v2e().b[36][0]++,"important"):(cov_57vuh9v2e().b[36][1]++,""))):(cov_57vuh9v2e().b[35][1]++,r.style[e]=n);}removeStyle(r,e,n){cov_57vuh9v2e().f[64]++;cov_57vuh9v2e().s[151]++;n&Ue.DashCase?(cov_57vuh9v2e().b[37][0]++,r.style.removeProperty(e)):(cov_57vuh9v2e().b[37][1]++,r.style[e]="");}setProperty(r,e,n){cov_57vuh9v2e().f[65]++;cov_57vuh9v2e().s[152]++;(cov_57vuh9v2e().b[38][0]++,r!=null)&&(cov_57vuh9v2e().b[38][1]++,r[e]=n);}setValue(r,e){cov_57vuh9v2e().f[66]++;cov_57vuh9v2e().s[153]++;r.nodeValue=e;}listen(r,e,n,i){cov_57vuh9v2e().f[67]++;cov_57vuh9v2e().s[154]++;if((cov_57vuh9v2e().b[40][0]++,typeof r=="string")&&(cov_57vuh9v2e().b[40][1]++,r=xe().getGlobalEventTarget(this.doc,r),!r)){cov_57vuh9v2e().b[39][0]++;cov_57vuh9v2e().s[155]++;throw new S(5102,!1);}else{cov_57vuh9v2e().b[39][1]++;}let o=(cov_57vuh9v2e().s[156]++,this.decoratePreventDefault(n));cov_57vuh9v2e().s[157]++;return(cov_57vuh9v2e().b[41][0]++,this.tracingService?.wrapEventListener)&&(cov_57vuh9v2e().b[41][1]++,o=this.tracingService.wrapEventListener(r,e,o)),this.eventManager.addEventListener(r,e,o,i);}decoratePreventDefault(r){cov_57vuh9v2e().f[68]++;cov_57vuh9v2e().s[158]++;return e=>{cov_57vuh9v2e().f[69]++;cov_57vuh9v2e().s[159]++;if(e==="__ngUnwrap__"){cov_57vuh9v2e().b[42][0]++;cov_57vuh9v2e().s[160]++;return r;}else{cov_57vuh9v2e().b[42][1]++;}cov_57vuh9v2e().s[161]++;(cov_57vuh9v2e().b[43][0]++,r(e)===!1)&&(cov_57vuh9v2e().b[43][1]++,e.preventDefault());};}};function ei(t){cov_57vuh9v2e().f[70]++;cov_57vuh9v2e().s[162]++;return(cov_57vuh9v2e().b[44][0]++,t.tagName==="TEMPLATE")&&(cov_57vuh9v2e().b[44][1]++,t.content!==void 0);}cov_57vuh9v2e().s[163]++;cov_57vuh9v2e().s[181]++;cov_57vuh9v2e().s[187]++;var St=class extends He{hostEl;sharedStylesHost;shadowRoot;constructor(r,e,n,i,o,s,a,c){cov_57vuh9v2e().f[71]++;cov_57vuh9v2e().s[164]++;super(r,i,o,a),this.hostEl=e,this.sharedStylesHost=c,this.shadowRoot=e.attachShadow({mode:"open"}),(cov_57vuh9v2e().b[45][0]++,this.sharedStylesHost)&&(cov_57vuh9v2e().b[45][1]++,this.sharedStylesHost.addHost(this.shadowRoot));let u=(cov_57vuh9v2e().s[165]++,n.styles);cov_57vuh9v2e().s[166]++;u=ni(n.id,u);cov_57vuh9v2e().s[167]++;for(let f of u){let R=(cov_57vuh9v2e().s[168]++,document.createElement("style"));cov_57vuh9v2e().s[169]++;(cov_57vuh9v2e().b[46][0]++,s)&&(cov_57vuh9v2e().b[46][1]++,R.setAttribute("nonce",s)),R.textContent=f,this.shadowRoot.appendChild(R);}let l=(cov_57vuh9v2e().s[170]++,n.getExternalStyles?.());cov_57vuh9v2e().s[171]++;if(l){cov_57vuh9v2e().b[47][0]++;cov_57vuh9v2e().s[172]++;for(let f of l){let R=(cov_57vuh9v2e().s[173]++,Rn(f,i));cov_57vuh9v2e().s[174]++;(cov_57vuh9v2e().b[48][0]++,s)&&(cov_57vuh9v2e().b[48][1]++,R.setAttribute("nonce",s)),this.shadowRoot.appendChild(R);}}else{cov_57vuh9v2e().b[47][1]++;}}nodeOrShadowRoot(r){cov_57vuh9v2e().f[72]++;cov_57vuh9v2e().s[175]++;return r===this.hostEl?(cov_57vuh9v2e().b[49][0]++,this.shadowRoot):(cov_57vuh9v2e().b[49][1]++,r);}appendChild(r,e){cov_57vuh9v2e().f[73]++;cov_57vuh9v2e().s[176]++;return super.appendChild(this.nodeOrShadowRoot(r),e);}insertBefore(r,e,n){cov_57vuh9v2e().f[74]++;cov_57vuh9v2e().s[177]++;return super.insertBefore(this.nodeOrShadowRoot(r),e,n);}removeChild(r,e){cov_57vuh9v2e().f[75]++;cov_57vuh9v2e().s[178]++;return super.removeChild(null,e);}parentNode(r){cov_57vuh9v2e().f[76]++;cov_57vuh9v2e().s[179]++;return this.nodeOrShadowRoot(super.parentNode(this.nodeOrShadowRoot(r)));}destroy(){cov_57vuh9v2e().f[77]++;cov_57vuh9v2e().s[180]++;(cov_57vuh9v2e().b[50][0]++,this.sharedStylesHost)&&(cov_57vuh9v2e().b[50][1]++,this.sharedStylesHost.removeHost(this.shadowRoot));}},$e=class extends He{sharedStylesHost;removeStylesOnCompDestroy;styles;styleUrls;constructor(r,e,n,i,o,s,a,c){cov_57vuh9v2e().f[78]++;cov_57vuh9v2e().s[182]++;super(r,o,s,a),this.sharedStylesHost=e,this.removeStylesOnCompDestroy=i;let u=(cov_57vuh9v2e().s[183]++,n.styles);cov_57vuh9v2e().s[184]++;this.styles=c?(cov_57vuh9v2e().b[51][0]++,ni(c,u)):(cov_57vuh9v2e().b[51][1]++,u),this.styleUrls=n.getExternalStyles?.(c);}applyStyles(){cov_57vuh9v2e().f[79]++;cov_57vuh9v2e().s[185]++;this.sharedStylesHost.addStyles(this.styles,this.styleUrls);}destroy(){cov_57vuh9v2e().f[80]++;cov_57vuh9v2e().s[186]++;(cov_57vuh9v2e().b[52][0]++,this.removeStylesOnCompDestroy)&&(cov_57vuh9v2e().b[52][1]++,wr.size===0)&&(cov_57vuh9v2e().b[52][2]++,this.sharedStylesHost.removeStyles(this.styles,this.styleUrls));}},wt=class extends $e{contentAttr;hostAttr;constructor(r,e,n,i,o,s,a,c){cov_57vuh9v2e().f[81]++;let u=(cov_57vuh9v2e().s[188]++,i+"-"+n.id);cov_57vuh9v2e().s[189]++;super(r,e,n,o,s,a,c,u),this.contentAttr=go(u),this.hostAttr=vo(u);}applyToHost(r){cov_57vuh9v2e().f[82]++;cov_57vuh9v2e().s[190]++;this.applyStyles(),this.setAttribute(r,this.hostAttr,"");}createElement(r,e){cov_57vuh9v2e().f[83]++;let n=(cov_57vuh9v2e().s[191]++,super.createElement(r,e));cov_57vuh9v2e().s[192]++;return super.setAttribute(n,this.contentAttr,""),n;}};cov_57vuh9v2e().s[193]++;var bt=class t extends Vr{supportsDOMEvents=(cov_57vuh9v2e().s[194]++,!0);static makeCurrent(){cov_57vuh9v2e().f[84]++;cov_57vuh9v2e().s[195]++;qr(new t());}onAndCancel(r,e,n,i){cov_57vuh9v2e().f[85]++;cov_57vuh9v2e().s[196]++;return r.addEventListener(e,n,i),()=>{cov_57vuh9v2e().f[86]++;cov_57vuh9v2e().s[197]++;r.removeEventListener(e,n,i);};}dispatchEvent(r,e){cov_57vuh9v2e().f[87]++;cov_57vuh9v2e().s[198]++;r.dispatchEvent(e);}remove(r){cov_57vuh9v2e().f[88]++;cov_57vuh9v2e().s[199]++;r.remove();}createElement(r,e){cov_57vuh9v2e().f[89]++;cov_57vuh9v2e().s[200]++;return e=(cov_57vuh9v2e().b[53][0]++,e)||(cov_57vuh9v2e().b[53][1]++,this.getDefaultDocument()),e.createElement(r);}createHtmlDocument(){cov_57vuh9v2e().f[90]++;cov_57vuh9v2e().s[201]++;return document.implementation.createHTMLDocument("fakeTitle");}getDefaultDocument(){cov_57vuh9v2e().f[91]++;cov_57vuh9v2e().s[202]++;return document;}isElementNode(r){cov_57vuh9v2e().f[92]++;cov_57vuh9v2e().s[203]++;return r.nodeType===Node.ELEMENT_NODE;}isShadowRoot(r){cov_57vuh9v2e().f[93]++;cov_57vuh9v2e().s[204]++;return r instanceof DocumentFragment;}getGlobalEventTarget(r,e){cov_57vuh9v2e().f[94]++;cov_57vuh9v2e().s[205]++;return e==="window"?(cov_57vuh9v2e().b[54][0]++,window):(cov_57vuh9v2e().b[54][1]++,e==="document"?(cov_57vuh9v2e().b[55][0]++,r):(cov_57vuh9v2e().b[55][1]++,e==="body"?(cov_57vuh9v2e().b[56][0]++,r.body):(cov_57vuh9v2e().b[56][1]++,null)));}getBaseHref(r){cov_57vuh9v2e().f[95]++;let e=(cov_57vuh9v2e().s[206]++,mo());cov_57vuh9v2e().s[207]++;return e==null?(cov_57vuh9v2e().b[57][0]++,null):(cov_57vuh9v2e().b[57][1]++,yo(e));}resetBaseElement(){cov_57vuh9v2e().f[96]++;cov_57vuh9v2e().s[208]++;ze=null;}getUserAgent(){cov_57vuh9v2e().f[97]++;cov_57vuh9v2e().s[209]++;return window.navigator.userAgent;}getCookie(r){cov_57vuh9v2e().f[98]++;cov_57vuh9v2e().s[210]++;return Qr(document.cookie,r);}},ze=(cov_57vuh9v2e().s[211]++,null);function mo(){cov_57vuh9v2e().f[99]++;cov_57vuh9v2e().s[212]++;return ze=(cov_57vuh9v2e().b[58][0]++,ze)||(cov_57vuh9v2e().b[58][1]++,document.head.querySelector("base")),ze?(cov_57vuh9v2e().b[59][0]++,ze.getAttribute("href")):(cov_57vuh9v2e().b[59][1]++,null);}function yo(t){cov_57vuh9v2e().f[100]++;cov_57vuh9v2e().s[213]++;return new URL(t,document.baseURI).pathname;}var Ro=(cov_57vuh9v2e().s[214]++,(()=>{cov_57vuh9v2e().f[101]++;class t{build(){cov_57vuh9v2e().f[102]++;cov_57vuh9v2e().s[215]++;return new XMLHttpRequest();}static ɵfac=(cov_57vuh9v2e().s[216]++,function(n){cov_57vuh9v2e().f[103]++;cov_57vuh9v2e().s[217]++;return new((cov_57vuh9v2e().b[60][0]++,n)||(cov_57vuh9v2e().b[60][1]++,t))();});static ɵprov=(cov_57vuh9v2e().s[218]++,m({token:t,factory:t.ɵfac}));}cov_57vuh9v2e().s[219]++;return t;})()),ri=(cov_57vuh9v2e().s[220]++,["alt","control","meta","shift"]),So=(cov_57vuh9v2e().s[221]++,{"\b":"Backspace"," ":"Tab","\x7F":"Delete","\x1B":"Escape",Del:"Delete",Esc:"Escape",Left:"ArrowLeft",Right:"ArrowRight",Up:"ArrowUp",Down:"ArrowDown",Menu:"ContextMenu",Scroll:"ScrollLock",Win:"OS"}),wo=(cov_57vuh9v2e().s[222]++,{alt:t=>{cov_57vuh9v2e().f[104]++;cov_57vuh9v2e().s[223]++;return t.altKey;},control:t=>{cov_57vuh9v2e().f[105]++;cov_57vuh9v2e().s[224]++;return t.ctrlKey;},meta:t=>{cov_57vuh9v2e().f[106]++;cov_57vuh9v2e().s[225]++;return t.metaKey;},shift:t=>{cov_57vuh9v2e().f[107]++;cov_57vuh9v2e().s[226]++;return t.shiftKey;}}),ii=(cov_57vuh9v2e().s[227]++,(()=>{cov_57vuh9v2e().f[108]++;class t extends ke{constructor(e){cov_57vuh9v2e().f[109]++;cov_57vuh9v2e().s[228]++;super(e);}supports(e){cov_57vuh9v2e().f[110]++;cov_57vuh9v2e().s[229]++;return t.parseEventName(e)!=null;}addEventListener(e,n,i,o){cov_57vuh9v2e().f[111]++;let s=(cov_57vuh9v2e().s[230]++,t.parseEventName(n)),a=(cov_57vuh9v2e().s[231]++,t.eventCallback(s.fullKey,i,this.manager.getZone()));cov_57vuh9v2e().s[232]++;return this.manager.getZone().runOutsideAngular(()=>{cov_57vuh9v2e().f[112]++;cov_57vuh9v2e().s[233]++;return xe().onAndCancel(e,s.domEventName,a,o);});}static parseEventName(e){cov_57vuh9v2e().f[113]++;let n=(cov_57vuh9v2e().s[234]++,e.toLowerCase().split(".")),i=(cov_57vuh9v2e().s[235]++,n.shift());cov_57vuh9v2e().s[236]++;if((cov_57vuh9v2e().b[62][0]++,n.length===0)||(cov_57vuh9v2e().b[62][1]++,!((cov_57vuh9v2e().b[63][0]++,i==="keydown")||(cov_57vuh9v2e().b[63][1]++,i==="keyup")))){cov_57vuh9v2e().b[61][0]++;cov_57vuh9v2e().s[237]++;return null;}else{cov_57vuh9v2e().b[61][1]++;}let o=(cov_57vuh9v2e().s[238]++,t._normalizeKey(n.pop())),s=(cov_57vuh9v2e().s[239]++,""),a=(cov_57vuh9v2e().s[240]++,n.indexOf("code"));cov_57vuh9v2e().s[241]++;if((cov_57vuh9v2e().b[65][0]++,a>-1)&&(cov_57vuh9v2e().b[65][1]++,n.splice(a,1),s="code."),ri.forEach(u=>{cov_57vuh9v2e().f[114]++;let l=(cov_57vuh9v2e().s[242]++,n.indexOf(u));cov_57vuh9v2e().s[243]++;(cov_57vuh9v2e().b[66][0]++,l>-1)&&(cov_57vuh9v2e().b[66][1]++,n.splice(l,1),s+=u+".");}),s+=o,(cov_57vuh9v2e().b[67][0]++,n.length!=0)||(cov_57vuh9v2e().b[67][1]++,o.length===0)){cov_57vuh9v2e().b[64][0]++;cov_57vuh9v2e().s[244]++;return null;}else{cov_57vuh9v2e().b[64][1]++;}let c=(cov_57vuh9v2e().s[245]++,{});cov_57vuh9v2e().s[246]++;return c.domEventName=i,c.fullKey=s,c;}static matchEventFullKeyCode(e,n){cov_57vuh9v2e().f[115]++;let i=(cov_57vuh9v2e().s[247]++,(cov_57vuh9v2e().b[68][0]++,So[e.key])||(cov_57vuh9v2e().b[68][1]++,e.key)),o=(cov_57vuh9v2e().s[248]++,"");cov_57vuh9v2e().s[249]++;return(cov_57vuh9v2e().b[69][0]++,n.indexOf("code.")>-1)&&(cov_57vuh9v2e().b[69][1]++,i=e.code,o="code."),(cov_57vuh9v2e().b[71][0]++,i==null)||(cov_57vuh9v2e().b[71][1]++,!i)?(cov_57vuh9v2e().b[70][0]++,!1):(cov_57vuh9v2e().b[70][1]++,i=i.toLowerCase(),i===" "?(cov_57vuh9v2e().b[72][0]++,i="space"):(cov_57vuh9v2e().b[72][1]++,(cov_57vuh9v2e().b[73][0]++,i===".")&&(cov_57vuh9v2e().b[73][1]++,i="dot")),ri.forEach(s=>{cov_57vuh9v2e().f[116]++;cov_57vuh9v2e().s[250]++;if(s!==i){cov_57vuh9v2e().b[74][0]++;let a=(cov_57vuh9v2e().s[251]++,wo[s]);cov_57vuh9v2e().s[252]++;(cov_57vuh9v2e().b[75][0]++,a(e))&&(cov_57vuh9v2e().b[75][1]++,o+=s+".");}else{cov_57vuh9v2e().b[74][1]++;}}),o+=i,o===n);}static eventCallback(e,n,i){cov_57vuh9v2e().f[117]++;cov_57vuh9v2e().s[253]++;return o=>{cov_57vuh9v2e().f[118]++;cov_57vuh9v2e().s[254]++;(cov_57vuh9v2e().b[76][0]++,t.matchEventFullKeyCode(o,e))&&(cov_57vuh9v2e().b[76][1]++,i.runGuarded(()=>{cov_57vuh9v2e().f[119]++;cov_57vuh9v2e().s[255]++;return n(o);}));};}static _normalizeKey(e){cov_57vuh9v2e().f[120]++;cov_57vuh9v2e().s[256]++;return e==="esc"?(cov_57vuh9v2e().b[77][0]++,"escape"):(cov_57vuh9v2e().b[77][1]++,e);}static ɵfac=(cov_57vuh9v2e().s[257]++,function(n){cov_57vuh9v2e().f[121]++;cov_57vuh9v2e().s[258]++;return new((cov_57vuh9v2e().b[78][0]++,n)||(cov_57vuh9v2e().b[78][1]++,t))(y(H));});static ɵprov=(cov_57vuh9v2e().s[259]++,m({token:t,factory:t.ɵfac}));}cov_57vuh9v2e().s[260]++;return t;})());async function Co(t,r,e){cov_57vuh9v2e().f[122]++;let n=(cov_57vuh9v2e().s[261]++,d({rootComponent:t},Eo(r,e)));cov_57vuh9v2e().s[262]++;return Fr(n);}function Eo(t,r){cov_57vuh9v2e().f[123]++;cov_57vuh9v2e().s[263]++;return{platformRef:r?.platformRef,appProviders:[...Do,...((cov_57vuh9v2e().b[79][0]++,t?.providers)??(cov_57vuh9v2e().b[79][1]++,[]))],platformProviders:To};}function bo(){cov_57vuh9v2e().f[124]++;cov_57vuh9v2e().s[264]++;bt.makeCurrent();}function Mo(){cov_57vuh9v2e().f[125]++;cov_57vuh9v2e().s[265]++;return new an();}function Io(){cov_57vuh9v2e().f[126]++;cov_57vuh9v2e().s[266]++;return mr(document),document;}var To=(cov_57vuh9v2e().s[267]++,[{provide:ht,useValue:Zr},{provide:yr,useValue:bo,multi:!0},{provide:H,useFactory:Io}]);var Do=(cov_57vuh9v2e().s[268]++,[{provide:pr,useValue:"root"},{provide:an,useFactory:Mo},{provide:Et,useClass:Rt,multi:!0},{provide:Et,useClass:ii,multi:!0},En,wn,Sn,{provide:br,useExisting:En},{provide:Kr,useClass:Ro},[]]);var oi=(cov_57vuh9v2e().s[269]++,(()=>{cov_57vuh9v2e().f[127]++;class t{_doc;constructor(e){cov_57vuh9v2e().f[128]++;cov_57vuh9v2e().s[270]++;this._doc=e;}getTitle(){cov_57vuh9v2e().f[129]++;cov_57vuh9v2e().s[271]++;return this._doc.title;}setTitle(e){cov_57vuh9v2e().f[130]++;cov_57vuh9v2e().s[272]++;this._doc.title=(cov_57vuh9v2e().b[80][0]++,e)||(cov_57vuh9v2e().b[80][1]++,"");}static ɵfac=(cov_57vuh9v2e().s[273]++,function(n){cov_57vuh9v2e().f[131]++;cov_57vuh9v2e().s[274]++;return new((cov_57vuh9v2e().b[81][0]++,n)||(cov_57vuh9v2e().b[81][1]++,t))(y(H));});static ɵprov=(cov_57vuh9v2e().s[275]++,m({token:t,factory:t.ɵfac,providedIn:"root"}));}cov_57vuh9v2e().s[276]++;return t;})());cov_57vuh9v2e().s[279]++;var p=(cov_57vuh9v2e().s[277]++,"primary"),et=(cov_57vuh9v2e().s[278]++,Symbol("RouteTitle")),Dn=class{params;constructor(r){cov_57vuh9v2e().f[132]++;cov_57vuh9v2e().s[280]++;this.params=(cov_57vuh9v2e().b[82][0]++,r)||(cov_57vuh9v2e().b[82][1]++,{});}has(r){cov_57vuh9v2e().f[133]++;cov_57vuh9v2e().s[281]++;return Object.prototype.hasOwnProperty.call(this.params,r);}get(r){cov_57vuh9v2e().f[134]++;cov_57vuh9v2e().s[282]++;if(this.has(r)){cov_57vuh9v2e().b[83][0]++;let e=(cov_57vuh9v2e().s[283]++,this.params[r]);cov_57vuh9v2e().s[284]++;return Array.isArray(e)?(cov_57vuh9v2e().b[84][0]++,e[0]):(cov_57vuh9v2e().b[84][1]++,e);}else{cov_57vuh9v2e().b[83][1]++;}cov_57vuh9v2e().s[285]++;return null;}getAll(r){cov_57vuh9v2e().f[135]++;cov_57vuh9v2e().s[286]++;if(this.has(r)){cov_57vuh9v2e().b[85][0]++;let e=(cov_57vuh9v2e().s[287]++,this.params[r]);cov_57vuh9v2e().s[288]++;return Array.isArray(e)?(cov_57vuh9v2e().b[86][0]++,e):(cov_57vuh9v2e().b[86][1]++,[e]);}else{cov_57vuh9v2e().b[85][1]++;}cov_57vuh9v2e().s[289]++;return[];}get keys(){cov_57vuh9v2e().f[136]++;cov_57vuh9v2e().s[290]++;return Object.keys(this.params);}};function ue(t){cov_57vuh9v2e().f[137]++;cov_57vuh9v2e().s[291]++;return new Dn(t);}function bn(t,r,e){cov_57vuh9v2e().f[138]++;cov_57vuh9v2e().s[292]++;for(let n=(cov_57vuh9v2e().s[293]++,0);nt.length)||(cov_57vuh9v2e().b[91][1]++,e.pathMatch==="full")&&((cov_57vuh9v2e().b[91][2]++,r.hasChildren())||(cov_57vuh9v2e().b[91][3]++,n.lengtht.length)||(cov_57vuh9v2e().b[95][1]++,e.pathMatch==="full")&&(cov_57vuh9v2e().b[95][2]++,r.hasChildren())&&(cov_57vuh9v2e().b[95][3]++,e.path!=="**")){cov_57vuh9v2e().b[94][0]++;cov_57vuh9v2e().s[314]++;return null;}else{cov_57vuh9v2e().b[94][1]++;}let a=(cov_57vuh9v2e().s[315]++,{});cov_57vuh9v2e().s[316]++;return(cov_57vuh9v2e().b[97][0]++,!bn(o,t.slice(0,o.length),a))||(cov_57vuh9v2e().b[97][1]++,!bn(s,t.slice(t.length-s.length),a))?(cov_57vuh9v2e().b[96][0]++,null):(cov_57vuh9v2e().b[96][1]++,{consumed:t,posParams:a});}function _t(t){cov_57vuh9v2e().f[140]++;cov_57vuh9v2e().s[317]++;return new Promise((r,e)=>{cov_57vuh9v2e().f[141]++;cov_57vuh9v2e().s[318]++;t.pipe(J()).subscribe({next:n=>{cov_57vuh9v2e().f[142]++;cov_57vuh9v2e().s[319]++;return r(n);},error:n=>{cov_57vuh9v2e().f[143]++;cov_57vuh9v2e().s[320]++;return e(n);}});});}function _o(t,r){cov_57vuh9v2e().f[144]++;cov_57vuh9v2e().s[321]++;if(t.length!==r.length){cov_57vuh9v2e().b[98][0]++;cov_57vuh9v2e().s[322]++;return!1;}else{cov_57vuh9v2e().b[98][1]++;}cov_57vuh9v2e().s[323]++;for(let e=(cov_57vuh9v2e().s[324]++,0);e{cov_57vuh9v2e().f[148]++;cov_57vuh9v2e().s[344]++;return n[o]===i;});}else{cov_57vuh9v2e().b[105][1]++;cov_57vuh9v2e().s[345]++;return t===r;}}function Oo(t){cov_57vuh9v2e().f[149]++;cov_57vuh9v2e().s[346]++;return t.length>0?(cov_57vuh9v2e().b[108][0]++,t[t.length-1]):(cov_57vuh9v2e().b[108][1]++,null);}function de(t){cov_57vuh9v2e().f[150]++;cov_57vuh9v2e().s[347]++;return nn(t)?(cov_57vuh9v2e().b[109][0]++,t):(cov_57vuh9v2e().b[109][1]++,_r(t)?(cov_57vuh9v2e().b[110][0]++,M(Promise.resolve(t))):(cov_57vuh9v2e().b[110][1]++,g(t)));}function pi(t){cov_57vuh9v2e().f[151]++;cov_57vuh9v2e().s[348]++;return nn(t)?(cov_57vuh9v2e().b[111][0]++,_t(t)):(cov_57vuh9v2e().b[111][1]++,Promise.resolve(t));}var No=(cov_57vuh9v2e().s[349]++,{exact:vi,subset:mi}),gi=(cov_57vuh9v2e().s[350]++,{exact:Po,subset:Uo,ignored:()=>{cov_57vuh9v2e().f[152]++;cov_57vuh9v2e().s[351]++;return!0;}}),Bn=(cov_57vuh9v2e().s[352]++,{paths:"exact",fragment:"ignored",matrixParams:"ignored",queryParams:"exact"}),Ge=(cov_57vuh9v2e().s[353]++,{paths:"subset",fragment:"ignored",matrixParams:"ignored",queryParams:"subset"});function qn(t,r,e){cov_57vuh9v2e().f[153]++;let n=(cov_57vuh9v2e().s[354]++,t instanceof D?(cov_57vuh9v2e().b[112][0]++,t):(cov_57vuh9v2e().b[112][1]++,r.parseUrl(t)));cov_57vuh9v2e().s[355]++;return vt(()=>{cov_57vuh9v2e().f[154]++;cov_57vuh9v2e().s[356]++;return _n((cov_57vuh9v2e().b[113][0]++,r.lastSuccessfulNavigation()?.finalUrl)??(cov_57vuh9v2e().b[113][1]++,new D()),n,d(d({},Ge),e));});}function _n(t,r,e){cov_57vuh9v2e().f[155]++;cov_57vuh9v2e().s[357]++;return(cov_57vuh9v2e().b[114][0]++,No[e.paths](t.root,r.root,e.matrixParams))&&(cov_57vuh9v2e().b[114][1]++,gi[e.queryParams](t.queryParams,r.queryParams))&&(cov_57vuh9v2e().b[114][2]++,!((cov_57vuh9v2e().b[115][0]++,e.fragment==="exact")&&(cov_57vuh9v2e().b[115][1]++,t.fragment!==r.fragment)));}function Po(t,r){cov_57vuh9v2e().f[156]++;cov_57vuh9v2e().s[358]++;return B(t,r);}function vi(t,r,e){cov_57vuh9v2e().f[157]++;cov_57vuh9v2e().s[359]++;if((cov_57vuh9v2e().b[117][0]++,!ce(t.segments,r.segments))||(cov_57vuh9v2e().b[117][1]++,!Tt(t.segments,r.segments,e))||(cov_57vuh9v2e().b[117][2]++,t.numberOfChildren!==r.numberOfChildren)){cov_57vuh9v2e().b[116][0]++;cov_57vuh9v2e().s[360]++;return!1;}else{cov_57vuh9v2e().b[116][1]++;}cov_57vuh9v2e().s[361]++;for(let n in r.children){cov_57vuh9v2e().s[362]++;if((cov_57vuh9v2e().b[119][0]++,!t.children[n])||(cov_57vuh9v2e().b[119][1]++,!vi(t.children[n],r.children[n],e))){cov_57vuh9v2e().b[118][0]++;cov_57vuh9v2e().s[363]++;return!1;}else{cov_57vuh9v2e().b[118][1]++;}}cov_57vuh9v2e().s[364]++;return!0;}function Uo(t,r){cov_57vuh9v2e().f[158]++;cov_57vuh9v2e().s[365]++;return(cov_57vuh9v2e().b[120][0]++,Object.keys(r).length<=Object.keys(t).length)&&(cov_57vuh9v2e().b[120][1]++,Object.keys(r).every(e=>{cov_57vuh9v2e().f[159]++;cov_57vuh9v2e().s[366]++;return fi(t[e],r[e]);}));}function mi(t,r,e){cov_57vuh9v2e().f[160]++;cov_57vuh9v2e().s[367]++;return yi(t,r,r.segments,e);}function yi(t,r,e,n){cov_57vuh9v2e().f[161]++;cov_57vuh9v2e().s[368]++;if(t.segments.length>e.length){cov_57vuh9v2e().b[121][0]++;let i=(cov_57vuh9v2e().s[369]++,t.segments.slice(0,e.length));cov_57vuh9v2e().s[370]++;return!((cov_57vuh9v2e().b[122][0]++,!ce(i,e))||(cov_57vuh9v2e().b[122][1]++,r.hasChildren())||(cov_57vuh9v2e().b[122][2]++,!Tt(i,e,n)));}else{cov_57vuh9v2e().b[121][1]++;cov_57vuh9v2e().s[371]++;if(t.segments.length===e.length){cov_57vuh9v2e().b[123][0]++;cov_57vuh9v2e().s[372]++;if((cov_57vuh9v2e().b[125][0]++,!ce(t.segments,e))||(cov_57vuh9v2e().b[125][1]++,!Tt(t.segments,e,n))){cov_57vuh9v2e().b[124][0]++;cov_57vuh9v2e().s[373]++;return!1;}else{cov_57vuh9v2e().b[124][1]++;}cov_57vuh9v2e().s[374]++;for(let i in r.children){cov_57vuh9v2e().s[375]++;if((cov_57vuh9v2e().b[127][0]++,!t.children[i])||(cov_57vuh9v2e().b[127][1]++,!mi(t.children[i],r.children[i],n))){cov_57vuh9v2e().b[126][0]++;cov_57vuh9v2e().s[376]++;return!1;}else{cov_57vuh9v2e().b[126][1]++;}}cov_57vuh9v2e().s[377]++;return!0;}else{cov_57vuh9v2e().b[123][1]++;let i=(cov_57vuh9v2e().s[378]++,e.slice(0,t.segments.length)),o=(cov_57vuh9v2e().s[379]++,e.slice(t.segments.length));cov_57vuh9v2e().s[380]++;return(cov_57vuh9v2e().b[129][0]++,!ce(t.segments,i))||(cov_57vuh9v2e().b[129][1]++,!Tt(t.segments,i,n))||(cov_57vuh9v2e().b[129][2]++,!t.children[p])?(cov_57vuh9v2e().b[128][0]++,!1):(cov_57vuh9v2e().b[128][1]++,yi(t.children[p],r,o,n));}}}function Tt(t,r,e){cov_57vuh9v2e().f[162]++;cov_57vuh9v2e().s[381]++;return r.every((n,i)=>{cov_57vuh9v2e().f[163]++;cov_57vuh9v2e().s[382]++;return gi[e](t[i].parameters,n.parameters);});}cov_57vuh9v2e().s[383]++;cov_57vuh9v2e().s[387]++;cov_57vuh9v2e().s[394]++;var D=class{root;queryParams;fragment;_queryParamMap;constructor(r=(cov_57vuh9v2e().b[130][0]++,new v([],{})),e=(cov_57vuh9v2e().b[131][0]++,{}),n=(cov_57vuh9v2e().b[132][0]++,null)){cov_57vuh9v2e().f[164]++;cov_57vuh9v2e().s[384]++;this.root=r,this.queryParams=e,this.fragment=n;}get queryParamMap(){cov_57vuh9v2e().f[165]++;cov_57vuh9v2e().s[385]++;return this._queryParamMap??=ue(this.queryParams),this._queryParamMap;}toString(){cov_57vuh9v2e().f[166]++;cov_57vuh9v2e().s[386]++;return jo.serialize(this);}},v=class{segments;children;parent=(cov_57vuh9v2e().s[388]++,null);constructor(r,e){cov_57vuh9v2e().f[167]++;cov_57vuh9v2e().s[389]++;this.segments=r,this.children=e,Object.values(e).forEach(n=>{cov_57vuh9v2e().f[168]++;cov_57vuh9v2e().s[390]++;return n.parent=this;});}hasChildren(){cov_57vuh9v2e().f[169]++;cov_57vuh9v2e().s[391]++;return this.numberOfChildren>0;}get numberOfChildren(){cov_57vuh9v2e().f[170]++;cov_57vuh9v2e().s[392]++;return Object.keys(this.children).length;}toString(){cov_57vuh9v2e().f[171]++;cov_57vuh9v2e().s[393]++;return Dt(this);}},X=class{path;parameters;_parameterMap;constructor(r,e){cov_57vuh9v2e().f[172]++;cov_57vuh9v2e().s[395]++;this.path=r,this.parameters=e;}get parameterMap(){cov_57vuh9v2e().f[173]++;cov_57vuh9v2e().s[396]++;return this._parameterMap??=ue(this.parameters),this._parameterMap;}toString(){cov_57vuh9v2e().f[174]++;cov_57vuh9v2e().s[397]++;return Si(this);}};function Lo(t,r){cov_57vuh9v2e().f[175]++;cov_57vuh9v2e().s[398]++;return(cov_57vuh9v2e().b[133][0]++,ce(t,r))&&(cov_57vuh9v2e().b[133][1]++,t.every((e,n)=>{cov_57vuh9v2e().f[176]++;cov_57vuh9v2e().s[399]++;return B(e.parameters,r[n].parameters);}));}function ce(t,r){cov_57vuh9v2e().f[177]++;cov_57vuh9v2e().s[400]++;return t.length!==r.length?(cov_57vuh9v2e().b[134][0]++,!1):(cov_57vuh9v2e().b[134][1]++,t.every((e,n)=>{cov_57vuh9v2e().f[178]++;cov_57vuh9v2e().s[401]++;return e.path===r[n].path;}));}function xo(t,r){cov_57vuh9v2e().f[179]++;let e=(cov_57vuh9v2e().s[402]++,[]);cov_57vuh9v2e().s[403]++;return Object.entries(t.children).forEach(([n,i])=>{cov_57vuh9v2e().f[180]++;cov_57vuh9v2e().s[404]++;(cov_57vuh9v2e().b[135][0]++,n===p)&&(cov_57vuh9v2e().b[135][1]++,e=e.concat(r(i,n)));}),Object.entries(t.children).forEach(([n,i])=>{cov_57vuh9v2e().f[181]++;cov_57vuh9v2e().s[405]++;(cov_57vuh9v2e().b[136][0]++,n!==p)&&(cov_57vuh9v2e().b[136][1]++,e=e.concat(r(i,n)));}),e;}cov_57vuh9v2e().s[412]++;var ne=(cov_57vuh9v2e().s[406]++,(()=>{cov_57vuh9v2e().f[182]++;class t{static ɵfac=(cov_57vuh9v2e().s[407]++,function(n){cov_57vuh9v2e().f[183]++;cov_57vuh9v2e().s[408]++;return new((cov_57vuh9v2e().b[137][0]++,n)||(cov_57vuh9v2e().b[137][1]++,t))();});static ɵprov=(cov_57vuh9v2e().s[409]++,m({token:t,factory:()=>{cov_57vuh9v2e().f[184]++;cov_57vuh9v2e().s[410]++;return new K();},providedIn:"root"}));}cov_57vuh9v2e().s[411]++;return t;})()),K=class{parse(r){cov_57vuh9v2e().f[185]++;let e=(cov_57vuh9v2e().s[413]++,new Nn(r));cov_57vuh9v2e().s[414]++;return new D(e.parseRootSegment(),e.parseQueryParams(),e.parseFragment());}serialize(r){cov_57vuh9v2e().f[186]++;let e=(cov_57vuh9v2e().s[415]++,`/${Fe(r.root,!0)}`),n=(cov_57vuh9v2e().s[416]++,$o(r.queryParams)),i=(cov_57vuh9v2e().s[417]++,typeof r.fragment=="string"?(cov_57vuh9v2e().b[138][0]++,`#${ko(r.fragment)}`):(cov_57vuh9v2e().b[138][1]++,""));cov_57vuh9v2e().s[418]++;return`${e}${n}${i}`;}},jo=(cov_57vuh9v2e().s[419]++,new K());function Dt(t){cov_57vuh9v2e().f[187]++;cov_57vuh9v2e().s[420]++;return t.segments.map(r=>{cov_57vuh9v2e().f[188]++;cov_57vuh9v2e().s[421]++;return Si(r);}).join("/");}function Fe(t,r){cov_57vuh9v2e().f[189]++;cov_57vuh9v2e().s[422]++;if(!t.hasChildren()){cov_57vuh9v2e().b[139][0]++;cov_57vuh9v2e().s[423]++;return Dt(t);}else{cov_57vuh9v2e().b[139][1]++;}cov_57vuh9v2e().s[424]++;if(r){cov_57vuh9v2e().b[140][0]++;let e=(cov_57vuh9v2e().s[425]++,t.children[p]?(cov_57vuh9v2e().b[141][0]++,Fe(t.children[p],!1)):(cov_57vuh9v2e().b[141][1]++,"")),n=(cov_57vuh9v2e().s[426]++,[]);cov_57vuh9v2e().s[427]++;return Object.entries(t.children).forEach(([i,o])=>{cov_57vuh9v2e().f[190]++;cov_57vuh9v2e().s[428]++;(cov_57vuh9v2e().b[142][0]++,i!==p)&&(cov_57vuh9v2e().b[142][1]++,n.push(`${i}:${Fe(o,!1)}`));}),n.length>0?(cov_57vuh9v2e().b[143][0]++,`${e}(${n.join("//")})`):(cov_57vuh9v2e().b[143][1]++,e);}else{cov_57vuh9v2e().b[140][1]++;let e=(cov_57vuh9v2e().s[429]++,xo(t,(n,i)=>{cov_57vuh9v2e().f[191]++;cov_57vuh9v2e().s[430]++;return i===p?(cov_57vuh9v2e().b[144][0]++,[Fe(t.children[p],!1)]):(cov_57vuh9v2e().b[144][1]++,[`${i}:${Fe(n,!1)}`]);}));cov_57vuh9v2e().s[431]++;return(cov_57vuh9v2e().b[146][0]++,Object.keys(t.children).length===1)&&(cov_57vuh9v2e().b[146][1]++,t.children[p]!=null)?(cov_57vuh9v2e().b[145][0]++,`${Dt(t)}/${e[0]}`):(cov_57vuh9v2e().b[145][1]++,`${Dt(t)}/(${e.join("//")})`);}}function Ri(t){cov_57vuh9v2e().f[192]++;cov_57vuh9v2e().s[432]++;return encodeURIComponent(t).replace(/%40/g,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",");}function Mt(t){cov_57vuh9v2e().f[193]++;cov_57vuh9v2e().s[433]++;return Ri(t).replace(/%3B/gi,";");}function ko(t){cov_57vuh9v2e().f[194]++;cov_57vuh9v2e().s[434]++;return encodeURI(t);}function On(t){cov_57vuh9v2e().f[195]++;cov_57vuh9v2e().s[435]++;return Ri(t).replace(/\(/g,"%28").replace(/\)/g,"%29").replace(/%26/gi,"&");}function At(t){cov_57vuh9v2e().f[196]++;cov_57vuh9v2e().s[436]++;return decodeURIComponent(t);}function si(t){cov_57vuh9v2e().f[197]++;cov_57vuh9v2e().s[437]++;return At(t.replace(/\+/g,"%20"));}function Si(t){cov_57vuh9v2e().f[198]++;cov_57vuh9v2e().s[438]++;return`${On(t.path)}${Ho(t.parameters)}`;}function Ho(t){cov_57vuh9v2e().f[199]++;cov_57vuh9v2e().s[439]++;return Object.entries(t).map(([r,e])=>{cov_57vuh9v2e().f[200]++;cov_57vuh9v2e().s[440]++;return`;${On(r)}=${On(e)}`;}).join("");}function $o(t){cov_57vuh9v2e().f[201]++;let r=(cov_57vuh9v2e().s[441]++,Object.entries(t).map(([e,n])=>{cov_57vuh9v2e().f[202]++;cov_57vuh9v2e().s[442]++;return Array.isArray(n)?(cov_57vuh9v2e().b[147][0]++,n.map(i=>{cov_57vuh9v2e().f[203]++;cov_57vuh9v2e().s[443]++;return`${Mt(e)}=${Mt(i)}`;}).join("&")):(cov_57vuh9v2e().b[147][1]++,`${Mt(e)}=${Mt(n)}`);}).filter(e=>{cov_57vuh9v2e().f[204]++;cov_57vuh9v2e().s[444]++;return e;}));cov_57vuh9v2e().s[445]++;return r.length?(cov_57vuh9v2e().b[148][0]++,`?${r.join("&")}`):(cov_57vuh9v2e().b[148][1]++,"");}var zo=(cov_57vuh9v2e().s[446]++,/^[^\/()?;#]+/);function Mn(t){cov_57vuh9v2e().f[205]++;let r=(cov_57vuh9v2e().s[447]++,t.match(zo));cov_57vuh9v2e().s[448]++;return r?(cov_57vuh9v2e().b[149][0]++,r[0]):(cov_57vuh9v2e().b[149][1]++,"");}var Fo=(cov_57vuh9v2e().s[449]++,/^[^\/()?;=#]+/);function Bo(t){cov_57vuh9v2e().f[206]++;let r=(cov_57vuh9v2e().s[450]++,t.match(Fo));cov_57vuh9v2e().s[451]++;return r?(cov_57vuh9v2e().b[150][0]++,r[0]):(cov_57vuh9v2e().b[150][1]++,"");}var qo=(cov_57vuh9v2e().s[452]++,/^[^=?&#]+/);function Vo(t){cov_57vuh9v2e().f[207]++;let r=(cov_57vuh9v2e().s[453]++,t.match(qo));cov_57vuh9v2e().s[454]++;return r?(cov_57vuh9v2e().b[151][0]++,r[0]):(cov_57vuh9v2e().b[151][1]++,"");}var Go=(cov_57vuh9v2e().s[455]++,/^[^&#]+/);function Wo(t){cov_57vuh9v2e().f[208]++;let r=(cov_57vuh9v2e().s[456]++,t.match(Go));cov_57vuh9v2e().s[457]++;return r?(cov_57vuh9v2e().b[152][0]++,r[0]):(cov_57vuh9v2e().b[152][1]++,"");}cov_57vuh9v2e().s[458]++;var Nn=class{url;remaining;constructor(r){cov_57vuh9v2e().f[209]++;cov_57vuh9v2e().s[459]++;this.url=r,this.remaining=r;}parseRootSegment(){cov_57vuh9v2e().f[210]++;cov_57vuh9v2e().s[460]++;return this.consumeOptional("/"),(cov_57vuh9v2e().b[154][0]++,this.remaining==="")||(cov_57vuh9v2e().b[154][1]++,this.peekStartsWith("?"))||(cov_57vuh9v2e().b[154][2]++,this.peekStartsWith("#"))?(cov_57vuh9v2e().b[153][0]++,new v([],{})):(cov_57vuh9v2e().b[153][1]++,new v([],this.parseChildren()));}parseQueryParams(){cov_57vuh9v2e().f[211]++;let r=(cov_57vuh9v2e().s[461]++,{});cov_57vuh9v2e().s[462]++;if(this.consumeOptional("?")){cov_57vuh9v2e().b[155][0]++;cov_57vuh9v2e().s[463]++;do{cov_57vuh9v2e().s[464]++;this.parseQueryParam(r);}while(this.consumeOptional("&"));}else{cov_57vuh9v2e().b[155][1]++;}cov_57vuh9v2e().s[465]++;return r;}parseFragment(){cov_57vuh9v2e().f[212]++;cov_57vuh9v2e().s[466]++;return this.consumeOptional("#")?(cov_57vuh9v2e().b[156][0]++,decodeURIComponent(this.remaining)):(cov_57vuh9v2e().b[156][1]++,null);}parseChildren(r=(cov_57vuh9v2e().b[157][0]++,0)){cov_57vuh9v2e().f[213]++;cov_57vuh9v2e().s[467]++;if(r>50){cov_57vuh9v2e().b[158][0]++;cov_57vuh9v2e().s[468]++;throw new S(4010,!1);}else{cov_57vuh9v2e().b[158][1]++;}cov_57vuh9v2e().s[469]++;if(this.remaining===""){cov_57vuh9v2e().b[159][0]++;cov_57vuh9v2e().s[470]++;return{};}else{cov_57vuh9v2e().b[159][1]++;}cov_57vuh9v2e().s[471]++;this.consumeOptional("/");let e=(cov_57vuh9v2e().s[472]++,[]);cov_57vuh9v2e().s[473]++;for((cov_57vuh9v2e().b[160][0]++,this.peekStartsWith("("))||(cov_57vuh9v2e().b[160][1]++,e.push(this.parseSegment()));(cov_57vuh9v2e().b[161][0]++,this.peekStartsWith("/"))&&(cov_57vuh9v2e().b[161][1]++,!this.peekStartsWith("//"))&&(cov_57vuh9v2e().b[161][2]++,!this.peekStartsWith("/("));){cov_57vuh9v2e().s[474]++;this.capture("/"),e.push(this.parseSegment());}let n=(cov_57vuh9v2e().s[475]++,{});cov_57vuh9v2e().s[476]++;(cov_57vuh9v2e().b[162][0]++,this.peekStartsWith("/("))&&(cov_57vuh9v2e().b[162][1]++,this.capture("/"),n=this.parseParens(!0,r));let i=(cov_57vuh9v2e().s[477]++,{});cov_57vuh9v2e().s[478]++;return(cov_57vuh9v2e().b[163][0]++,this.peekStartsWith("("))&&(cov_57vuh9v2e().b[163][1]++,i=this.parseParens(!1,r)),((cov_57vuh9v2e().b[164][0]++,e.length>0)||(cov_57vuh9v2e().b[164][1]++,Object.keys(n).length>0))&&(cov_57vuh9v2e().b[164][2]++,i[p]=new v(e,n)),i;}parseSegment(){cov_57vuh9v2e().f[214]++;let r=(cov_57vuh9v2e().s[479]++,Mn(this.remaining));cov_57vuh9v2e().s[480]++;if((cov_57vuh9v2e().b[166][0]++,r==="")&&(cov_57vuh9v2e().b[166][1]++,this.peekStartsWith(";"))){cov_57vuh9v2e().b[165][0]++;cov_57vuh9v2e().s[481]++;throw new S(4009,!1);}else{cov_57vuh9v2e().b[165][1]++;}cov_57vuh9v2e().s[482]++;return this.capture(r),new X(At(r),this.parseMatrixParams());}parseMatrixParams(){cov_57vuh9v2e().f[215]++;let r=(cov_57vuh9v2e().s[483]++,{});cov_57vuh9v2e().s[484]++;for(;this.consumeOptional(";");){cov_57vuh9v2e().s[485]++;this.parseParam(r);}cov_57vuh9v2e().s[486]++;return r;}parseParam(r){cov_57vuh9v2e().f[216]++;let e=(cov_57vuh9v2e().s[487]++,Bo(this.remaining));cov_57vuh9v2e().s[488]++;if(!e){cov_57vuh9v2e().b[167][0]++;cov_57vuh9v2e().s[489]++;return;}else{cov_57vuh9v2e().b[167][1]++;}cov_57vuh9v2e().s[490]++;this.capture(e);let n=(cov_57vuh9v2e().s[491]++,"");cov_57vuh9v2e().s[492]++;if(this.consumeOptional("=")){cov_57vuh9v2e().b[168][0]++;let i=(cov_57vuh9v2e().s[493]++,Mn(this.remaining));cov_57vuh9v2e().s[494]++;(cov_57vuh9v2e().b[169][0]++,i)&&(cov_57vuh9v2e().b[169][1]++,n=i,this.capture(n));}else{cov_57vuh9v2e().b[168][1]++;}cov_57vuh9v2e().s[495]++;r[At(e)]=At(n);}parseQueryParam(r){cov_57vuh9v2e().f[217]++;let e=(cov_57vuh9v2e().s[496]++,Vo(this.remaining));cov_57vuh9v2e().s[497]++;if(!e){cov_57vuh9v2e().b[170][0]++;cov_57vuh9v2e().s[498]++;return;}else{cov_57vuh9v2e().b[170][1]++;}cov_57vuh9v2e().s[499]++;this.capture(e);let n=(cov_57vuh9v2e().s[500]++,"");cov_57vuh9v2e().s[501]++;if(this.consumeOptional("=")){cov_57vuh9v2e().b[171][0]++;let s=(cov_57vuh9v2e().s[502]++,Wo(this.remaining));cov_57vuh9v2e().s[503]++;(cov_57vuh9v2e().b[172][0]++,s)&&(cov_57vuh9v2e().b[172][1]++,n=s,this.capture(n));}else{cov_57vuh9v2e().b[171][1]++;}let i=(cov_57vuh9v2e().s[504]++,si(e)),o=(cov_57vuh9v2e().s[505]++,si(n));cov_57vuh9v2e().s[506]++;if(r.hasOwnProperty(i)){cov_57vuh9v2e().b[173][0]++;let s=(cov_57vuh9v2e().s[507]++,r[i]);cov_57vuh9v2e().s[508]++;(cov_57vuh9v2e().b[174][0]++,Array.isArray(s))||(cov_57vuh9v2e().b[174][1]++,s=[s],r[i]=s),s.push(o);}else{cov_57vuh9v2e().b[173][1]++;cov_57vuh9v2e().s[509]++;r[i]=o;}}parseParens(r,e){cov_57vuh9v2e().f[218]++;let n=(cov_57vuh9v2e().s[510]++,{});cov_57vuh9v2e().s[511]++;for(this.capture("(");(cov_57vuh9v2e().b[175][0]++,!this.consumeOptional(")"))&&(cov_57vuh9v2e().b[175][1]++,this.remaining.length>0);){let i=(cov_57vuh9v2e().s[512]++,Mn(this.remaining)),o=(cov_57vuh9v2e().s[513]++,this.remaining[i.length]);cov_57vuh9v2e().s[514]++;if((cov_57vuh9v2e().b[177][0]++,o!=="/")&&(cov_57vuh9v2e().b[177][1]++,o!==")")&&(cov_57vuh9v2e().b[177][2]++,o!==";")){cov_57vuh9v2e().b[176][0]++;cov_57vuh9v2e().s[515]++;throw new S(4010,!1);}else{cov_57vuh9v2e().b[176][1]++;}let s;cov_57vuh9v2e().s[516]++;i.indexOf(":")>-1?(cov_57vuh9v2e().b[178][0]++,s=i.slice(0,i.indexOf(":")),this.capture(s),this.capture(":")):(cov_57vuh9v2e().b[178][1]++,(cov_57vuh9v2e().b[179][0]++,r)&&(cov_57vuh9v2e().b[179][1]++,s=p));let a=(cov_57vuh9v2e().s[517]++,this.parseChildren(e+1));cov_57vuh9v2e().s[518]++;n[(cov_57vuh9v2e().b[180][0]++,s)??(cov_57vuh9v2e().b[180][1]++,p)]=(cov_57vuh9v2e().b[182][0]++,Object.keys(a).length===1)&&(cov_57vuh9v2e().b[182][1]++,a[p])?(cov_57vuh9v2e().b[181][0]++,a[p]):(cov_57vuh9v2e().b[181][1]++,new v([],a)),this.consumeOptional("//");}cov_57vuh9v2e().s[519]++;return n;}peekStartsWith(r){cov_57vuh9v2e().f[219]++;cov_57vuh9v2e().s[520]++;return this.remaining.startsWith(r);}consumeOptional(r){cov_57vuh9v2e().f[220]++;cov_57vuh9v2e().s[521]++;return this.peekStartsWith(r)?(cov_57vuh9v2e().b[183][0]++,this.remaining=this.remaining.substring(r.length),!0):(cov_57vuh9v2e().b[183][1]++,!1);}capture(r){cov_57vuh9v2e().f[221]++;cov_57vuh9v2e().s[522]++;if(!this.consumeOptional(r)){cov_57vuh9v2e().b[184][0]++;cov_57vuh9v2e().s[523]++;throw new S(4011,!1);}else{cov_57vuh9v2e().b[184][1]++;}}};function wi(t){cov_57vuh9v2e().f[222]++;cov_57vuh9v2e().s[524]++;return t.segments.length>0?(cov_57vuh9v2e().b[185][0]++,new v([],{[p]:t})):(cov_57vuh9v2e().b[185][1]++,t);}function Ci(t){cov_57vuh9v2e().f[223]++;let r=(cov_57vuh9v2e().s[525]++,{});cov_57vuh9v2e().s[526]++;for(let[n,i]of Object.entries(t.children)){let o=(cov_57vuh9v2e().s[527]++,Ci(i));cov_57vuh9v2e().s[528]++;if((cov_57vuh9v2e().b[187][0]++,n===p)&&(cov_57vuh9v2e().b[187][1]++,o.segments.length===0)&&(cov_57vuh9v2e().b[187][2]++,o.hasChildren())){cov_57vuh9v2e().b[186][0]++;cov_57vuh9v2e().s[529]++;for(let[s,a]of Object.entries(o.children)){cov_57vuh9v2e().s[530]++;r[s]=a;}}else{cov_57vuh9v2e().b[186][1]++;cov_57vuh9v2e().s[531]++;((cov_57vuh9v2e().b[188][0]++,o.segments.length>0)||(cov_57vuh9v2e().b[188][1]++,o.hasChildren()))&&(cov_57vuh9v2e().b[188][2]++,r[n]=o);}}let e=(cov_57vuh9v2e().s[532]++,new v(t.segments,r));cov_57vuh9v2e().s[533]++;return Yo(e);}function Yo(t){cov_57vuh9v2e().f[224]++;cov_57vuh9v2e().s[534]++;if((cov_57vuh9v2e().b[190][0]++,t.numberOfChildren===1)&&(cov_57vuh9v2e().b[190][1]++,t.children[p])){cov_57vuh9v2e().b[189][0]++;let r=(cov_57vuh9v2e().s[535]++,t.children[p]);cov_57vuh9v2e().s[536]++;return new v(t.segments.concat(r.segments),r.children);}else{cov_57vuh9v2e().b[189][1]++;}cov_57vuh9v2e().s[537]++;return t;}function ee(t){cov_57vuh9v2e().f[225]++;cov_57vuh9v2e().s[538]++;return t instanceof D;}function Ei(t,r,e=(cov_57vuh9v2e().b[191][0]++,null),n=(cov_57vuh9v2e().b[192][0]++,null),i=(cov_57vuh9v2e().b[193][0]++,new K())){cov_57vuh9v2e().f[226]++;let o=(cov_57vuh9v2e().s[539]++,bi(t));cov_57vuh9v2e().s[540]++;return Mi(o,r,e,n,i);}function bi(t){cov_57vuh9v2e().f[227]++;let r;function e(o){cov_57vuh9v2e().f[228]++;let s=(cov_57vuh9v2e().s[541]++,{});cov_57vuh9v2e().s[542]++;for(let c of o.children){let u=(cov_57vuh9v2e().s[543]++,e(c));cov_57vuh9v2e().s[544]++;s[c.outlet]=u;}let a=(cov_57vuh9v2e().s[545]++,new v(o.url,s));cov_57vuh9v2e().s[546]++;return(cov_57vuh9v2e().b[194][0]++,o===t)&&(cov_57vuh9v2e().b[194][1]++,r=a),a;}let n=(cov_57vuh9v2e().s[547]++,e(t.root)),i=(cov_57vuh9v2e().s[548]++,wi(n));cov_57vuh9v2e().s[549]++;return(cov_57vuh9v2e().b[195][0]++,r)??(cov_57vuh9v2e().b[195][1]++,i);}function Mi(t,r,e,n,i){cov_57vuh9v2e().f[229]++;let o=(cov_57vuh9v2e().s[550]++,t);cov_57vuh9v2e().s[551]++;for(;o.parent;){cov_57vuh9v2e().s[552]++;o=o.parent;}cov_57vuh9v2e().s[553]++;if(r.length===0){cov_57vuh9v2e().b[196][0]++;cov_57vuh9v2e().s[554]++;return In(o,o,o,e,n,i);}else{cov_57vuh9v2e().b[196][1]++;}let s=(cov_57vuh9v2e().s[555]++,Qo(r));cov_57vuh9v2e().s[556]++;if(s.toRoot()){cov_57vuh9v2e().b[197][0]++;cov_57vuh9v2e().s[557]++;return In(o,o,new v([],{}),e,n,i);}else{cov_57vuh9v2e().b[197][1]++;}let a=(cov_57vuh9v2e().s[558]++,Ko(s,o,t)),c=(cov_57vuh9v2e().s[559]++,a.processChildren?(cov_57vuh9v2e().b[198][0]++,qe(a.segmentGroup,a.index,s.commands)):(cov_57vuh9v2e().b[198][1]++,Ti(a.segmentGroup,a.index,s.commands)));cov_57vuh9v2e().s[560]++;return In(o,a.segmentGroup,c,e,n,i);}function Ot(t){cov_57vuh9v2e().f[230]++;cov_57vuh9v2e().s[561]++;return(cov_57vuh9v2e().b[199][0]++,typeof t=="object")&&(cov_57vuh9v2e().b[199][1]++,t!=null)&&(cov_57vuh9v2e().b[199][2]++,!t.outlets)&&(cov_57vuh9v2e().b[199][3]++,!t.segmentPath);}function We(t){cov_57vuh9v2e().f[231]++;cov_57vuh9v2e().s[562]++;return(cov_57vuh9v2e().b[200][0]++,typeof t=="object")&&(cov_57vuh9v2e().b[200][1]++,t!=null)&&(cov_57vuh9v2e().b[200][2]++,t.outlets);}function ai(t,r,e){cov_57vuh9v2e().f[232]++;cov_57vuh9v2e().s[563]++;t||="\u0275";let n=(cov_57vuh9v2e().s[564]++,new D());cov_57vuh9v2e().s[565]++;return n.queryParams={[t]:r},e.parse(e.serialize(n)).queryParams[t];}function In(t,r,e,n,i,o){cov_57vuh9v2e().f[233]++;let s=(cov_57vuh9v2e().s[566]++,{});cov_57vuh9v2e().s[567]++;for(let[u,l]of Object.entries((cov_57vuh9v2e().b[201][0]++,n)??(cov_57vuh9v2e().b[201][1]++,{}))){cov_57vuh9v2e().s[568]++;s[u]=Array.isArray(l)?(cov_57vuh9v2e().b[202][0]++,l.map(f=>{cov_57vuh9v2e().f[234]++;cov_57vuh9v2e().s[569]++;return ai(u,f,o);})):(cov_57vuh9v2e().b[202][1]++,ai(u,l,o));}let a;cov_57vuh9v2e().s[570]++;t===r?(cov_57vuh9v2e().b[203][0]++,a=e):(cov_57vuh9v2e().b[203][1]++,a=Ii(t,r,e));let c=(cov_57vuh9v2e().s[571]++,wi(Ci(a)));cov_57vuh9v2e().s[572]++;return new D(c,s,i);}function Ii(t,r,e){cov_57vuh9v2e().f[235]++;let n=(cov_57vuh9v2e().s[573]++,{});cov_57vuh9v2e().s[574]++;return Object.entries(t.children).forEach(([i,o])=>{cov_57vuh9v2e().f[236]++;cov_57vuh9v2e().s[575]++;o===r?(cov_57vuh9v2e().b[204][0]++,n[i]=e):(cov_57vuh9v2e().b[204][1]++,n[i]=Ii(o,r,e));}),new v(t.segments,n);}cov_57vuh9v2e().s[576]++;var Nt=class{isAbsolute;numberOfDoubleDots;commands;constructor(r,e,n){cov_57vuh9v2e().f[237]++;cov_57vuh9v2e().s[577]++;if(this.isAbsolute=r,this.numberOfDoubleDots=e,this.commands=n,(cov_57vuh9v2e().b[206][0]++,r)&&(cov_57vuh9v2e().b[206][1]++,n.length>0)&&(cov_57vuh9v2e().b[206][2]++,Ot(n[0]))){cov_57vuh9v2e().b[205][0]++;cov_57vuh9v2e().s[578]++;throw new S(4003,!1);}else{cov_57vuh9v2e().b[205][1]++;}let i=(cov_57vuh9v2e().s[579]++,n.find(We));cov_57vuh9v2e().s[580]++;if((cov_57vuh9v2e().b[208][0]++,i)&&(cov_57vuh9v2e().b[208][1]++,i!==Oo(n))){cov_57vuh9v2e().b[207][0]++;cov_57vuh9v2e().s[581]++;throw new S(4004,!1);}else{cov_57vuh9v2e().b[207][1]++;}}toRoot(){cov_57vuh9v2e().f[238]++;cov_57vuh9v2e().s[582]++;return(cov_57vuh9v2e().b[209][0]++,this.isAbsolute)&&(cov_57vuh9v2e().b[209][1]++,this.commands.length===1)&&(cov_57vuh9v2e().b[209][2]++,this.commands[0]=="/");}};function Qo(t){cov_57vuh9v2e().f[239]++;cov_57vuh9v2e().s[583]++;if((cov_57vuh9v2e().b[211][0]++,typeof t[0]=="string")&&(cov_57vuh9v2e().b[211][1]++,t.length===1)&&(cov_57vuh9v2e().b[211][2]++,t[0]==="/")){cov_57vuh9v2e().b[210][0]++;cov_57vuh9v2e().s[584]++;return new Nt(!0,0,t);}else{cov_57vuh9v2e().b[210][1]++;}let r=(cov_57vuh9v2e().s[585]++,0),e=(cov_57vuh9v2e().s[586]++,!1),n=(cov_57vuh9v2e().s[587]++,t.reduce((i,o,s)=>{cov_57vuh9v2e().f[240]++;cov_57vuh9v2e().s[588]++;if((cov_57vuh9v2e().b[213][0]++,typeof o=="object")&&(cov_57vuh9v2e().b[213][1]++,o!=null)){cov_57vuh9v2e().b[212][0]++;cov_57vuh9v2e().s[589]++;if(o.outlets){cov_57vuh9v2e().b[214][0]++;let a=(cov_57vuh9v2e().s[590]++,{});cov_57vuh9v2e().s[591]++;return Object.entries(o.outlets).forEach(([c,u])=>{cov_57vuh9v2e().f[241]++;cov_57vuh9v2e().s[592]++;a[c]=typeof u=="string"?(cov_57vuh9v2e().b[215][0]++,u.split("/")):(cov_57vuh9v2e().b[215][1]++,u);}),[...i,{outlets:a}];}else{cov_57vuh9v2e().b[214][1]++;}cov_57vuh9v2e().s[593]++;if(o.segmentPath){cov_57vuh9v2e().b[216][0]++;cov_57vuh9v2e().s[594]++;return[...i,o.segmentPath];}else{cov_57vuh9v2e().b[216][1]++;}}else{cov_57vuh9v2e().b[212][1]++;}cov_57vuh9v2e().s[595]++;return typeof o!="string"?(cov_57vuh9v2e().b[217][0]++,[...i,o]):(cov_57vuh9v2e().b[217][1]++,s===0?(cov_57vuh9v2e().b[218][0]++,o.split("/").forEach((a,c)=>{cov_57vuh9v2e().f[242]++;cov_57vuh9v2e().s[596]++;(cov_57vuh9v2e().b[219][0]++,c==0)&&(cov_57vuh9v2e().b[219][1]++,a===".")||(cov_57vuh9v2e().b[219][2]++,(cov_57vuh9v2e().b[221][0]++,c==0)&&(cov_57vuh9v2e().b[221][1]++,a==="")?(cov_57vuh9v2e().b[220][0]++,e=!0):(cov_57vuh9v2e().b[220][1]++,a===".."?(cov_57vuh9v2e().b[222][0]++,r++):(cov_57vuh9v2e().b[222][1]++,(cov_57vuh9v2e().b[223][0]++,a!="")&&(cov_57vuh9v2e().b[223][1]++,i.push(a)))));}),i):(cov_57vuh9v2e().b[218][1]++,[...i,o]));},[]));cov_57vuh9v2e().s[597]++;return new Nt(e,r,n);}cov_57vuh9v2e().s[598]++;var me=class{segmentGroup;processChildren;index;constructor(r,e,n){cov_57vuh9v2e().f[243]++;cov_57vuh9v2e().s[599]++;this.segmentGroup=r,this.processChildren=e,this.index=n;}};function Ko(t,r,e){cov_57vuh9v2e().f[244]++;cov_57vuh9v2e().s[600]++;if(t.isAbsolute){cov_57vuh9v2e().b[224][0]++;cov_57vuh9v2e().s[601]++;return new me(r,!0,0);}else{cov_57vuh9v2e().b[224][1]++;}cov_57vuh9v2e().s[602]++;if(!e){cov_57vuh9v2e().b[225][0]++;cov_57vuh9v2e().s[603]++;return new me(r,!1,NaN);}else{cov_57vuh9v2e().b[225][1]++;}cov_57vuh9v2e().s[604]++;if(e.parent===null){cov_57vuh9v2e().b[226][0]++;cov_57vuh9v2e().s[605]++;return new me(e,!0,0);}else{cov_57vuh9v2e().b[226][1]++;}let n=(cov_57vuh9v2e().s[606]++,Ot(t.commands[0])?(cov_57vuh9v2e().b[227][0]++,0):(cov_57vuh9v2e().b[227][1]++,1)),i=(cov_57vuh9v2e().s[607]++,e.segments.length-1+n);cov_57vuh9v2e().s[608]++;return Zo(e,i,t.numberOfDoubleDots);}function Zo(t,r,e){cov_57vuh9v2e().f[245]++;let n=(cov_57vuh9v2e().s[609]++,t),i=(cov_57vuh9v2e().s[610]++,r),o=(cov_57vuh9v2e().s[611]++,e);cov_57vuh9v2e().s[612]++;for(;o>i;){cov_57vuh9v2e().s[613]++;if(o-=i,n=n.parent,!n){cov_57vuh9v2e().b[228][0]++;cov_57vuh9v2e().s[614]++;throw new S(4005,!1);}else{cov_57vuh9v2e().b[228][1]++;}cov_57vuh9v2e().s[615]++;i=n.segments.length;}cov_57vuh9v2e().s[616]++;return new me(n,!1,i-o);}function Jo(t){cov_57vuh9v2e().f[246]++;cov_57vuh9v2e().s[617]++;return We(t[0])?(cov_57vuh9v2e().b[229][0]++,t[0].outlets):(cov_57vuh9v2e().b[229][1]++,{[p]:t});}function Ti(t,r,e){cov_57vuh9v2e().f[247]++;cov_57vuh9v2e().s[618]++;if(t??=new v([],{}),(cov_57vuh9v2e().b[231][0]++,t.segments.length===0)&&(cov_57vuh9v2e().b[231][1]++,t.hasChildren())){cov_57vuh9v2e().b[230][0]++;cov_57vuh9v2e().s[619]++;return qe(t,r,e);}else{cov_57vuh9v2e().b[230][1]++;}let n=(cov_57vuh9v2e().s[620]++,Xo(t,r,e)),i=(cov_57vuh9v2e().s[621]++,e.slice(n.commandIndex));cov_57vuh9v2e().s[622]++;if((cov_57vuh9v2e().b[233][0]++,n.match)&&(cov_57vuh9v2e().b[233][1]++,n.pathIndex{cov_57vuh9v2e().f[249]++;cov_57vuh9v2e().s[631]++;return o!==p;}))&&(cov_57vuh9v2e().b[241][1]++,t.children[p])&&(cov_57vuh9v2e().b[241][2]++,t.numberOfChildren===1)&&(cov_57vuh9v2e().b[241][3]++,t.children[p].segments.length===0)){cov_57vuh9v2e().b[240][0]++;let o=(cov_57vuh9v2e().s[632]++,qe(t.children[p],r,e));cov_57vuh9v2e().s[633]++;return new v(t.segments,o.children);}else{cov_57vuh9v2e().b[240][1]++;}cov_57vuh9v2e().s[634]++;return Object.entries(n).forEach(([o,s])=>{cov_57vuh9v2e().f[250]++;cov_57vuh9v2e().s[635]++;(cov_57vuh9v2e().b[242][0]++,typeof s=="string")&&(cov_57vuh9v2e().b[242][1]++,s=[s]),(cov_57vuh9v2e().b[243][0]++,s!==null)&&(cov_57vuh9v2e().b[243][1]++,i[o]=Ti(t.children[o],r,s));}),Object.entries(t.children).forEach(([o,s])=>{cov_57vuh9v2e().f[251]++;cov_57vuh9v2e().s[636]++;(cov_57vuh9v2e().b[244][0]++,n[o]===void 0)&&(cov_57vuh9v2e().b[244][1]++,i[o]=s);}),new v(t.segments,i);}}function Xo(t,r,e){cov_57vuh9v2e().f[252]++;let n=(cov_57vuh9v2e().s[637]++,0),i=(cov_57vuh9v2e().s[638]++,r),o=(cov_57vuh9v2e().s[639]++,{match:!1,pathIndex:0,commandIndex:0});cov_57vuh9v2e().s[640]++;for(;i=e.length){cov_57vuh9v2e().b[245][0]++;cov_57vuh9v2e().s[642]++;return o;}else{cov_57vuh9v2e().b[245][1]++;}let s=(cov_57vuh9v2e().s[643]++,t.segments[i]),a=(cov_57vuh9v2e().s[644]++,e[n]);cov_57vuh9v2e().s[645]++;if(We(a)){cov_57vuh9v2e().b[246][0]++;cov_57vuh9v2e().s[646]++;break;}else{cov_57vuh9v2e().b[246][1]++;}let c=(cov_57vuh9v2e().s[647]++,`${a}`),u=(cov_57vuh9v2e().s[648]++,n0)&&(cov_57vuh9v2e().b[249][1]++,c===void 0)){cov_57vuh9v2e().b[248][0]++;cov_57vuh9v2e().s[650]++;break;}else{cov_57vuh9v2e().b[248][1]++;}cov_57vuh9v2e().s[651]++;if((cov_57vuh9v2e().b[251][0]++,c)&&(cov_57vuh9v2e().b[251][1]++,u)&&(cov_57vuh9v2e().b[251][2]++,typeof u=="object")&&(cov_57vuh9v2e().b[251][3]++,u.outlets===void 0)){cov_57vuh9v2e().b[250][0]++;cov_57vuh9v2e().s[652]++;if(!ui(c,u,s)){cov_57vuh9v2e().b[252][0]++;cov_57vuh9v2e().s[653]++;return o;}else{cov_57vuh9v2e().b[252][1]++;}cov_57vuh9v2e().s[654]++;n+=2;}else{cov_57vuh9v2e().b[250][1]++;cov_57vuh9v2e().s[655]++;if(!ui(c,{},s)){cov_57vuh9v2e().b[253][0]++;cov_57vuh9v2e().s[656]++;return o;}else{cov_57vuh9v2e().b[253][1]++;}cov_57vuh9v2e().s[657]++;n++;}cov_57vuh9v2e().s[658]++;i++;}cov_57vuh9v2e().s[659]++;return{match:!0,pathIndex:i,commandIndex:n};}function Pn(t,r,e){cov_57vuh9v2e().f[253]++;let n=(cov_57vuh9v2e().s[660]++,t.segments.slice(0,r)),i=(cov_57vuh9v2e().s[661]++,0);cov_57vuh9v2e().s[662]++;for(;i{cov_57vuh9v2e().f[255]++;cov_57vuh9v2e().s[677]++;(cov_57vuh9v2e().b[261][0]++,typeof n=="string")&&(cov_57vuh9v2e().b[261][1]++,n=[n]),(cov_57vuh9v2e().b[262][0]++,n!==null)&&(cov_57vuh9v2e().b[262][1]++,r[e]=Pn(new v([],{}),0,n));}),r;}function ci(t){cov_57vuh9v2e().f[256]++;let r=(cov_57vuh9v2e().s[678]++,{});cov_57vuh9v2e().s[679]++;return Object.entries(t).forEach(([e,n])=>{cov_57vuh9v2e().f[257]++;cov_57vuh9v2e().s[680]++;return r[e]=`${n}`;}),r;}function ui(t,r,e){cov_57vuh9v2e().f[258]++;cov_57vuh9v2e().s[681]++;return(cov_57vuh9v2e().b[263][0]++,t==e.path)&&(cov_57vuh9v2e().b[263][1]++,B(r,e.parameters));}cov_57vuh9v2e().s[685]++;cov_57vuh9v2e().s[687]++;cov_57vuh9v2e().s[691]++;cov_57vuh9v2e().s[699]++;var ye=(cov_57vuh9v2e().s[682]++,"imperative"),E=(cov_57vuh9v2e().s[683]++,function(t){cov_57vuh9v2e().f[259]++;cov_57vuh9v2e().s[684]++;return t[t.NavigationStart=0]="NavigationStart",t[t.NavigationEnd=1]="NavigationEnd",t[t.NavigationCancel=2]="NavigationCancel",t[t.NavigationError=3]="NavigationError",t[t.RoutesRecognized=4]="RoutesRecognized",t[t.ResolveStart=5]="ResolveStart",t[t.ResolveEnd=6]="ResolveEnd",t[t.GuardsCheckStart=7]="GuardsCheckStart",t[t.GuardsCheckEnd=8]="GuardsCheckEnd",t[t.RouteConfigLoadStart=9]="RouteConfigLoadStart",t[t.RouteConfigLoadEnd=10]="RouteConfigLoadEnd",t[t.ChildActivationStart=11]="ChildActivationStart",t[t.ChildActivationEnd=12]="ChildActivationEnd",t[t.ActivationStart=13]="ActivationStart",t[t.ActivationEnd=14]="ActivationEnd",t[t.Scroll=15]="Scroll",t[t.NavigationSkipped=16]="NavigationSkipped",t;}((cov_57vuh9v2e().b[264][0]++,E)||(cov_57vuh9v2e().b[264][1]++,{}))),N=class{id;url;constructor(r,e){cov_57vuh9v2e().f[260]++;cov_57vuh9v2e().s[686]++;this.id=r,this.url=e;}},te=class extends N{type=(cov_57vuh9v2e().s[688]++,E.NavigationStart);navigationTrigger;restoredState;constructor(r,e,n=(cov_57vuh9v2e().b[265][0]++,"imperative"),i=(cov_57vuh9v2e().b[266][0]++,null)){cov_57vuh9v2e().f[261]++;cov_57vuh9v2e().s[689]++;super(r,e),this.navigationTrigger=n,this.restoredState=i;}toString(){cov_57vuh9v2e().f[262]++;cov_57vuh9v2e().s[690]++;return`NavigationStart(id: ${this.id}, url: '${this.url}')`;}},P=class extends N{urlAfterRedirects;type=(cov_57vuh9v2e().s[692]++,E.NavigationEnd);constructor(r,e,n){cov_57vuh9v2e().f[263]++;cov_57vuh9v2e().s[693]++;super(r,e),this.urlAfterRedirects=n;}toString(){cov_57vuh9v2e().f[264]++;cov_57vuh9v2e().s[694]++;return`NavigationEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}')`;}},I=(cov_57vuh9v2e().s[695]++,function(t){cov_57vuh9v2e().f[265]++;cov_57vuh9v2e().s[696]++;return t[t.Redirect=0]="Redirect",t[t.SupersededByNewNavigation=1]="SupersededByNewNavigation",t[t.NoDataFromResolver=2]="NoDataFromResolver",t[t.GuardRejected=3]="GuardRejected",t[t.Aborted=4]="Aborted",t;}((cov_57vuh9v2e().b[267][0]++,I)||(cov_57vuh9v2e().b[267][1]++,{}))),Se=(cov_57vuh9v2e().s[697]++,function(t){cov_57vuh9v2e().f[266]++;cov_57vuh9v2e().s[698]++;return t[t.IgnoredSameUrlNavigation=0]="IgnoredSameUrlNavigation",t[t.IgnoredByUrlHandlingStrategy=1]="IgnoredByUrlHandlingStrategy",t;}((cov_57vuh9v2e().b[268][0]++,Se)||(cov_57vuh9v2e().b[268][1]++,{}))),x=class extends N{reason;code;type=(cov_57vuh9v2e().s[700]++,E.NavigationCancel);constructor(r,e,n,i){cov_57vuh9v2e().f[267]++;cov_57vuh9v2e().s[701]++;super(r,e),this.reason=n,this.code=i;}toString(){cov_57vuh9v2e().f[268]++;cov_57vuh9v2e().s[702]++;return`NavigationCancel(id: ${this.id}, url: '${this.url}')`;}};function Di(t){cov_57vuh9v2e().f[269]++;cov_57vuh9v2e().s[703]++;return(cov_57vuh9v2e().b[269][0]++,t instanceof x)&&((cov_57vuh9v2e().b[269][1]++,t.code===I.Redirect)||(cov_57vuh9v2e().b[269][2]++,t.code===I.SupersededByNewNavigation));}cov_57vuh9v2e().s[704]++;cov_57vuh9v2e().s[707]++;cov_57vuh9v2e().s[711]++;cov_57vuh9v2e().s[715]++;cov_57vuh9v2e().s[719]++;cov_57vuh9v2e().s[723]++;cov_57vuh9v2e().s[727]++;cov_57vuh9v2e().s[731]++;cov_57vuh9v2e().s[735]++;cov_57vuh9v2e().s[739]++;cov_57vuh9v2e().s[743]++;cov_57vuh9v2e().s[747]++;cov_57vuh9v2e().s[751]++;cov_57vuh9v2e().s[755]++;cov_57vuh9v2e().s[760]++;cov_57vuh9v2e().s[761]++;cov_57vuh9v2e().s[762]++;var V=class extends N{reason;code;type=(cov_57vuh9v2e().s[705]++,E.NavigationSkipped);constructor(r,e,n,i){cov_57vuh9v2e().f[270]++;cov_57vuh9v2e().s[706]++;super(r,e),this.reason=n,this.code=i;}},le=class extends N{error;target;type=(cov_57vuh9v2e().s[708]++,E.NavigationError);constructor(r,e,n,i){cov_57vuh9v2e().f[271]++;cov_57vuh9v2e().s[709]++;super(r,e),this.error=n,this.target=i;}toString(){cov_57vuh9v2e().f[272]++;cov_57vuh9v2e().s[710]++;return`NavigationError(id: ${this.id}, url: '${this.url}', error: ${this.error})`;}},Ye=class extends N{urlAfterRedirects;state;type=(cov_57vuh9v2e().s[712]++,E.RoutesRecognized);constructor(r,e,n,i){cov_57vuh9v2e().f[273]++;cov_57vuh9v2e().s[713]++;super(r,e),this.urlAfterRedirects=n,this.state=i;}toString(){cov_57vuh9v2e().f[274]++;cov_57vuh9v2e().s[714]++;return`RoutesRecognized(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`;}},Pt=class extends N{urlAfterRedirects;state;type=(cov_57vuh9v2e().s[716]++,E.GuardsCheckStart);constructor(r,e,n,i){cov_57vuh9v2e().f[275]++;cov_57vuh9v2e().s[717]++;super(r,e),this.urlAfterRedirects=n,this.state=i;}toString(){cov_57vuh9v2e().f[276]++;cov_57vuh9v2e().s[718]++;return`GuardsCheckStart(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`;}},Ut=class extends N{urlAfterRedirects;state;shouldActivate;type=(cov_57vuh9v2e().s[720]++,E.GuardsCheckEnd);constructor(r,e,n,i,o){cov_57vuh9v2e().f[277]++;cov_57vuh9v2e().s[721]++;super(r,e),this.urlAfterRedirects=n,this.state=i,this.shouldActivate=o;}toString(){cov_57vuh9v2e().f[278]++;cov_57vuh9v2e().s[722]++;return`GuardsCheckEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state}, shouldActivate: ${this.shouldActivate})`;}},Lt=class extends N{urlAfterRedirects;state;type=(cov_57vuh9v2e().s[724]++,E.ResolveStart);constructor(r,e,n,i){cov_57vuh9v2e().f[279]++;cov_57vuh9v2e().s[725]++;super(r,e),this.urlAfterRedirects=n,this.state=i;}toString(){cov_57vuh9v2e().f[280]++;cov_57vuh9v2e().s[726]++;return`ResolveStart(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`;}},xt=class extends N{urlAfterRedirects;state;type=(cov_57vuh9v2e().s[728]++,E.ResolveEnd);constructor(r,e,n,i){cov_57vuh9v2e().f[281]++;cov_57vuh9v2e().s[729]++;super(r,e),this.urlAfterRedirects=n,this.state=i;}toString(){cov_57vuh9v2e().f[282]++;cov_57vuh9v2e().s[730]++;return`ResolveEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`;}},jt=class{route;type=(cov_57vuh9v2e().s[732]++,E.RouteConfigLoadStart);constructor(r){cov_57vuh9v2e().f[283]++;cov_57vuh9v2e().s[733]++;this.route=r;}toString(){cov_57vuh9v2e().f[284]++;cov_57vuh9v2e().s[734]++;return`RouteConfigLoadStart(path: ${this.route.path})`;}},kt=class{route;type=(cov_57vuh9v2e().s[736]++,E.RouteConfigLoadEnd);constructor(r){cov_57vuh9v2e().f[285]++;cov_57vuh9v2e().s[737]++;this.route=r;}toString(){cov_57vuh9v2e().f[286]++;cov_57vuh9v2e().s[738]++;return`RouteConfigLoadEnd(path: ${this.route.path})`;}},Ht=class{snapshot;type=(cov_57vuh9v2e().s[740]++,E.ChildActivationStart);constructor(r){cov_57vuh9v2e().f[287]++;cov_57vuh9v2e().s[741]++;this.snapshot=r;}toString(){cov_57vuh9v2e().f[288]++;cov_57vuh9v2e().s[742]++;return`ChildActivationStart(path: '${(cov_57vuh9v2e().b[270][0]++,this.snapshot.routeConfig)&&(cov_57vuh9v2e().b[270][1]++,this.snapshot.routeConfig.path)||(cov_57vuh9v2e().b[270][2]++,"")}')`;}},$t=class{snapshot;type=(cov_57vuh9v2e().s[744]++,E.ChildActivationEnd);constructor(r){cov_57vuh9v2e().f[289]++;cov_57vuh9v2e().s[745]++;this.snapshot=r;}toString(){cov_57vuh9v2e().f[290]++;cov_57vuh9v2e().s[746]++;return`ChildActivationEnd(path: '${(cov_57vuh9v2e().b[271][0]++,this.snapshot.routeConfig)&&(cov_57vuh9v2e().b[271][1]++,this.snapshot.routeConfig.path)||(cov_57vuh9v2e().b[271][2]++,"")}')`;}},zt=class{snapshot;type=(cov_57vuh9v2e().s[748]++,E.ActivationStart);constructor(r){cov_57vuh9v2e().f[291]++;cov_57vuh9v2e().s[749]++;this.snapshot=r;}toString(){cov_57vuh9v2e().f[292]++;cov_57vuh9v2e().s[750]++;return`ActivationStart(path: '${(cov_57vuh9v2e().b[272][0]++,this.snapshot.routeConfig)&&(cov_57vuh9v2e().b[272][1]++,this.snapshot.routeConfig.path)||(cov_57vuh9v2e().b[272][2]++,"")}')`;}},Ft=class{snapshot;type=(cov_57vuh9v2e().s[752]++,E.ActivationEnd);constructor(r){cov_57vuh9v2e().f[293]++;cov_57vuh9v2e().s[753]++;this.snapshot=r;}toString(){cov_57vuh9v2e().f[294]++;cov_57vuh9v2e().s[754]++;return`ActivationEnd(path: '${(cov_57vuh9v2e().b[273][0]++,this.snapshot.routeConfig)&&(cov_57vuh9v2e().b[273][1]++,this.snapshot.routeConfig.path)||(cov_57vuh9v2e().b[273][2]++,"")}')`;}},we=class{routerEvent;position;anchor;scrollBehavior;type=(cov_57vuh9v2e().s[756]++,E.Scroll);constructor(r,e,n,i){cov_57vuh9v2e().f[295]++;cov_57vuh9v2e().s[757]++;this.routerEvent=r,this.position=e,this.anchor=n,this.scrollBehavior=i;}toString(){cov_57vuh9v2e().f[296]++;let r=(cov_57vuh9v2e().s[758]++,this.position?(cov_57vuh9v2e().b[274][0]++,`${this.position[0]}, ${this.position[1]}`):(cov_57vuh9v2e().b[274][1]++,null));cov_57vuh9v2e().s[759]++;return`Scroll(anchor: '${this.anchor}', position: '${r}')`;}},Ce=class{},Qe=class{},Ee=class{url;navigationBehaviorOptions;constructor(r,e){cov_57vuh9v2e().f[297]++;cov_57vuh9v2e().s[763]++;this.url=r,this.navigationBehaviorOptions=e;}};function ts(t){cov_57vuh9v2e().f[298]++;cov_57vuh9v2e().s[764]++;return(cov_57vuh9v2e().b[275][0]++,!(t instanceof Ce))&&(cov_57vuh9v2e().b[275][1]++,!(t instanceof Ee))&&(cov_57vuh9v2e().b[275][2]++,!(t instanceof Qe));}cov_57vuh9v2e().s[765]++;cov_57vuh9v2e().s[788]++;var Bt=class{rootInjector;outlet=(cov_57vuh9v2e().s[766]++,null);route=(cov_57vuh9v2e().s[767]++,null);children;attachRef=(cov_57vuh9v2e().s[768]++,null);get injector(){cov_57vuh9v2e().f[299]++;cov_57vuh9v2e().s[769]++;return(cov_57vuh9v2e().b[276][0]++,this.route?.snapshot._environmentInjector)??(cov_57vuh9v2e().b[276][1]++,this.rootInjector);}constructor(r){cov_57vuh9v2e().f[300]++;cov_57vuh9v2e().s[770]++;this.rootInjector=r,this.children=new he(this.rootInjector);}},he=(cov_57vuh9v2e().s[771]++,(()=>{cov_57vuh9v2e().f[301]++;class t{rootInjector;contexts=(cov_57vuh9v2e().s[772]++,new Map());constructor(e){cov_57vuh9v2e().f[302]++;cov_57vuh9v2e().s[773]++;this.rootInjector=e;}onChildOutletCreated(e,n){cov_57vuh9v2e().f[303]++;let i=(cov_57vuh9v2e().s[774]++,this.getOrCreateContext(e));cov_57vuh9v2e().s[775]++;i.outlet=n,this.contexts.set(e,i);}onChildOutletDestroyed(e){cov_57vuh9v2e().f[304]++;let n=(cov_57vuh9v2e().s[776]++,this.getContext(e));cov_57vuh9v2e().s[777]++;(cov_57vuh9v2e().b[277][0]++,n)&&(cov_57vuh9v2e().b[277][1]++,n.outlet=null,n.attachRef=null);}onOutletDeactivated(){cov_57vuh9v2e().f[305]++;let e=(cov_57vuh9v2e().s[778]++,this.contexts);cov_57vuh9v2e().s[779]++;return this.contexts=new Map(),e;}onOutletReAttached(e){cov_57vuh9v2e().f[306]++;cov_57vuh9v2e().s[780]++;this.contexts=e;}getOrCreateContext(e){cov_57vuh9v2e().f[307]++;let n=(cov_57vuh9v2e().s[781]++,this.getContext(e));cov_57vuh9v2e().s[782]++;return(cov_57vuh9v2e().b[278][0]++,n)||(cov_57vuh9v2e().b[278][1]++,n=new Bt(this.rootInjector),this.contexts.set(e,n)),n;}getContext(e){cov_57vuh9v2e().f[308]++;cov_57vuh9v2e().s[783]++;return(cov_57vuh9v2e().b[279][0]++,this.contexts.get(e))||(cov_57vuh9v2e().b[279][1]++,null);}static ɵfac=(cov_57vuh9v2e().s[784]++,function(n){cov_57vuh9v2e().f[309]++;cov_57vuh9v2e().s[785]++;return new((cov_57vuh9v2e().b[280][0]++,n)||(cov_57vuh9v2e().b[280][1]++,t))(y(Y));});static ɵprov=(cov_57vuh9v2e().s[786]++,m({token:t,factory:t.ɵfac,providedIn:"root"}));}cov_57vuh9v2e().s[787]++;return t;})()),qt=class{_root;constructor(r){cov_57vuh9v2e().f[310]++;cov_57vuh9v2e().s[789]++;this._root=r;}get root(){cov_57vuh9v2e().f[311]++;cov_57vuh9v2e().s[790]++;return this._root.value;}parent(r){cov_57vuh9v2e().f[312]++;let e=(cov_57vuh9v2e().s[791]++,this.pathFromRoot(r));cov_57vuh9v2e().s[792]++;return e.length>1?(cov_57vuh9v2e().b[281][0]++,e[e.length-2]):(cov_57vuh9v2e().b[281][1]++,null);}children(r){cov_57vuh9v2e().f[313]++;let e=(cov_57vuh9v2e().s[793]++,Un(r,this._root));cov_57vuh9v2e().s[794]++;return e?(cov_57vuh9v2e().b[282][0]++,e.children.map(n=>{cov_57vuh9v2e().f[314]++;cov_57vuh9v2e().s[795]++;return n.value;})):(cov_57vuh9v2e().b[282][1]++,[]);}firstChild(r){cov_57vuh9v2e().f[315]++;let e=(cov_57vuh9v2e().s[796]++,Un(r,this._root));cov_57vuh9v2e().s[797]++;return(cov_57vuh9v2e().b[284][0]++,e)&&(cov_57vuh9v2e().b[284][1]++,e.children.length>0)?(cov_57vuh9v2e().b[283][0]++,e.children[0].value):(cov_57vuh9v2e().b[283][1]++,null);}siblings(r){cov_57vuh9v2e().f[316]++;let e=(cov_57vuh9v2e().s[798]++,Ln(r,this._root));cov_57vuh9v2e().s[799]++;return e.length<2?(cov_57vuh9v2e().b[285][0]++,[]):(cov_57vuh9v2e().b[285][1]++,e[e.length-2].children.map(i=>{cov_57vuh9v2e().f[317]++;cov_57vuh9v2e().s[800]++;return i.value;}).filter(i=>{cov_57vuh9v2e().f[318]++;cov_57vuh9v2e().s[801]++;return i!==r;}));}pathFromRoot(r){cov_57vuh9v2e().f[319]++;cov_57vuh9v2e().s[802]++;return Ln(r,this._root).map(e=>{cov_57vuh9v2e().f[320]++;cov_57vuh9v2e().s[803]++;return e.value;});}};function Un(t,r){cov_57vuh9v2e().f[321]++;cov_57vuh9v2e().s[804]++;if(t===r.value){cov_57vuh9v2e().b[286][0]++;cov_57vuh9v2e().s[805]++;return r;}else{cov_57vuh9v2e().b[286][1]++;}cov_57vuh9v2e().s[806]++;for(let e of r.children){let n=(cov_57vuh9v2e().s[807]++,Un(t,e));cov_57vuh9v2e().s[808]++;if(n){cov_57vuh9v2e().b[287][0]++;cov_57vuh9v2e().s[809]++;return n;}else{cov_57vuh9v2e().b[287][1]++;}}cov_57vuh9v2e().s[810]++;return null;}function Ln(t,r){cov_57vuh9v2e().f[322]++;cov_57vuh9v2e().s[811]++;if(t===r.value){cov_57vuh9v2e().b[288][0]++;cov_57vuh9v2e().s[812]++;return[r];}else{cov_57vuh9v2e().b[288][1]++;}cov_57vuh9v2e().s[813]++;for(let e of r.children){let n=(cov_57vuh9v2e().s[814]++,Ln(t,e));cov_57vuh9v2e().s[815]++;if(n.length){cov_57vuh9v2e().b[289][0]++;cov_57vuh9v2e().s[816]++;return n.unshift(r),n;}else{cov_57vuh9v2e().b[289][1]++;}}cov_57vuh9v2e().s[817]++;return[];}cov_57vuh9v2e().s[818]++;var O=class{value;children;constructor(r,e){cov_57vuh9v2e().f[323]++;cov_57vuh9v2e().s[819]++;this.value=r,this.children=e;}toString(){cov_57vuh9v2e().f[324]++;cov_57vuh9v2e().s[820]++;return`TreeNode(${this.value})`;}};function ve(t){cov_57vuh9v2e().f[325]++;let r=(cov_57vuh9v2e().s[821]++,{});cov_57vuh9v2e().s[822]++;return(cov_57vuh9v2e().b[290][0]++,t)&&(cov_57vuh9v2e().b[290][1]++,t.children.forEach(e=>{cov_57vuh9v2e().f[326]++;cov_57vuh9v2e().s[823]++;return r[e.value.outlet]=e;})),r;}cov_57vuh9v2e().s[824]++;var Ke=class extends qt{snapshot;constructor(r,e){cov_57vuh9v2e().f[327]++;cov_57vuh9v2e().s[825]++;super(r),this.snapshot=e,Gn(this,r);}toString(){cov_57vuh9v2e().f[328]++;cov_57vuh9v2e().s[826]++;return this.snapshot.toString();}};function Ai(t,r){cov_57vuh9v2e().f[329]++;let e=(cov_57vuh9v2e().s[827]++,ns(t,r)),n=(cov_57vuh9v2e().s[828]++,new U([new X("",{})])),i=(cov_57vuh9v2e().s[829]++,new U({})),o=(cov_57vuh9v2e().s[830]++,new U({})),s=(cov_57vuh9v2e().s[831]++,new U({})),a=(cov_57vuh9v2e().s[832]++,new U("")),c=(cov_57vuh9v2e().s[833]++,new G(n,i,s,a,o,p,t,e.root));cov_57vuh9v2e().s[834]++;return c.snapshot=e.root,new Ke(new O(c,[]),e);}function ns(t,r){cov_57vuh9v2e().f[330]++;let e=(cov_57vuh9v2e().s[835]++,{}),n=(cov_57vuh9v2e().s[836]++,{}),i=(cov_57vuh9v2e().s[837]++,{}),s=(cov_57vuh9v2e().s[838]++,new be([],e,i,"",n,p,t,null,{},r));cov_57vuh9v2e().s[839]++;return new Ze("",new O(s,[]));}cov_57vuh9v2e().s[840]++;var G=class{urlSubject;paramsSubject;queryParamsSubject;fragmentSubject;dataSubject;outlet;component;snapshot;_futureSnapshot;_routerState;_paramMap;_queryParamMap;title;url;params;queryParams;fragment;data;constructor(r,e,n,i,o,s,a,c){cov_57vuh9v2e().f[331]++;cov_57vuh9v2e().s[841]++;this.urlSubject=r,this.paramsSubject=e,this.queryParamsSubject=n,this.fragmentSubject=i,this.dataSubject=o,this.outlet=s,this.component=a,this._futureSnapshot=c,this.title=(cov_57vuh9v2e().b[291][0]++,this.dataSubject?.pipe(T(u=>{cov_57vuh9v2e().f[332]++;cov_57vuh9v2e().s[842]++;return u[et];})))??(cov_57vuh9v2e().b[291][1]++,g(void 0)),this.url=r,this.params=e,this.queryParams=n,this.fragment=i,this.data=o;}get routeConfig(){cov_57vuh9v2e().f[333]++;cov_57vuh9v2e().s[843]++;return this._futureSnapshot.routeConfig;}get root(){cov_57vuh9v2e().f[334]++;cov_57vuh9v2e().s[844]++;return this._routerState.root;}get parent(){cov_57vuh9v2e().f[335]++;cov_57vuh9v2e().s[845]++;return this._routerState.parent(this);}get firstChild(){cov_57vuh9v2e().f[336]++;cov_57vuh9v2e().s[846]++;return this._routerState.firstChild(this);}get children(){cov_57vuh9v2e().f[337]++;cov_57vuh9v2e().s[847]++;return this._routerState.children(this);}get pathFromRoot(){cov_57vuh9v2e().f[338]++;cov_57vuh9v2e().s[848]++;return this._routerState.pathFromRoot(this);}get paramMap(){cov_57vuh9v2e().f[339]++;cov_57vuh9v2e().s[849]++;return this._paramMap??=this.params.pipe(T(r=>{cov_57vuh9v2e().f[340]++;cov_57vuh9v2e().s[850]++;return ue(r);})),this._paramMap;}get queryParamMap(){cov_57vuh9v2e().f[341]++;cov_57vuh9v2e().s[851]++;return this._queryParamMap??=this.queryParams.pipe(T(r=>{cov_57vuh9v2e().f[342]++;cov_57vuh9v2e().s[852]++;return ue(r);})),this._queryParamMap;}toString(){cov_57vuh9v2e().f[343]++;cov_57vuh9v2e().s[853]++;return this.snapshot?(cov_57vuh9v2e().b[292][0]++,this.snapshot.toString()):(cov_57vuh9v2e().b[292][1]++,`Future(${this._futureSnapshot})`);}};function Vn(t,r,e=(cov_57vuh9v2e().b[293][0]++,"emptyOnly")){cov_57vuh9v2e().f[344]++;let n,{routeConfig:i}=(cov_57vuh9v2e().s[854]++,t);cov_57vuh9v2e().s[855]++;return(cov_57vuh9v2e().b[295][0]++,r!==null)&&((cov_57vuh9v2e().b[295][1]++,e==="always")||(cov_57vuh9v2e().b[295][2]++,i?.path==="")||(cov_57vuh9v2e().b[295][3]++,!r.component)&&(cov_57vuh9v2e().b[295][4]++,!r.routeConfig?.loadComponent))?(cov_57vuh9v2e().b[294][0]++,n={params:d(d({},r.params),t.params),data:d(d({},r.data),t.data),resolve:d(d(d(d({},t.data),r.data),i?.data),t._resolvedData)}):(cov_57vuh9v2e().b[294][1]++,n={params:d({},t.params),data:d({},t.data),resolve:d(d({},t.data),(cov_57vuh9v2e().b[296][0]++,t._resolvedData)??(cov_57vuh9v2e().b[296][1]++,{}))}),(cov_57vuh9v2e().b[297][0]++,i)&&(cov_57vuh9v2e().b[297][1]++,Oi(i))&&(cov_57vuh9v2e().b[297][2]++,n.resolve[et]=i.title),n;}cov_57vuh9v2e().s[856]++;cov_57vuh9v2e().s[870]++;var be=class{url;params;queryParams;fragment;data;outlet;component;routeConfig;_resolve;_resolvedData;_routerState;_paramMap;_queryParamMap;_environmentInjector;get title(){cov_57vuh9v2e().f[345]++;cov_57vuh9v2e().s[857]++;return this.data?.[et];}constructor(r,e,n,i,o,s,a,c,u,l){cov_57vuh9v2e().f[346]++;cov_57vuh9v2e().s[858]++;this.url=r,this.params=e,this.queryParams=n,this.fragment=i,this.data=o,this.outlet=s,this.component=a,this.routeConfig=c,this._resolve=u,this._environmentInjector=l;}get root(){cov_57vuh9v2e().f[347]++;cov_57vuh9v2e().s[859]++;return this._routerState.root;}get parent(){cov_57vuh9v2e().f[348]++;cov_57vuh9v2e().s[860]++;return this._routerState.parent(this);}get firstChild(){cov_57vuh9v2e().f[349]++;cov_57vuh9v2e().s[861]++;return this._routerState.firstChild(this);}get children(){cov_57vuh9v2e().f[350]++;cov_57vuh9v2e().s[862]++;return this._routerState.children(this);}get pathFromRoot(){cov_57vuh9v2e().f[351]++;cov_57vuh9v2e().s[863]++;return this._routerState.pathFromRoot(this);}get paramMap(){cov_57vuh9v2e().f[352]++;cov_57vuh9v2e().s[864]++;return this._paramMap??=ue(this.params),this._paramMap;}get queryParamMap(){cov_57vuh9v2e().f[353]++;cov_57vuh9v2e().s[865]++;return this._queryParamMap??=ue(this.queryParams),this._queryParamMap;}toString(){cov_57vuh9v2e().f[354]++;let r=(cov_57vuh9v2e().s[866]++,this.url.map(n=>{cov_57vuh9v2e().f[355]++;cov_57vuh9v2e().s[867]++;return n.toString();}).join("/")),e=(cov_57vuh9v2e().s[868]++,this.routeConfig?(cov_57vuh9v2e().b[298][0]++,this.routeConfig.path):(cov_57vuh9v2e().b[298][1]++,""));cov_57vuh9v2e().s[869]++;return`Route(url:'${r}', path:'${e}')`;}},Ze=class extends qt{url;constructor(r,e){cov_57vuh9v2e().f[356]++;cov_57vuh9v2e().s[871]++;super(e),this.url=r,Gn(this,e);}toString(){cov_57vuh9v2e().f[357]++;cov_57vuh9v2e().s[872]++;return _i(this._root);}};function Gn(t,r){cov_57vuh9v2e().f[358]++;cov_57vuh9v2e().s[873]++;r.value._routerState=t,r.children.forEach(e=>{cov_57vuh9v2e().f[359]++;cov_57vuh9v2e().s[874]++;return Gn(t,e);});}function _i(t){cov_57vuh9v2e().f[360]++;let r=(cov_57vuh9v2e().s[875]++,t.children.length>0?(cov_57vuh9v2e().b[299][0]++,` { ${t.children.map(_i).join(", ")} } `):(cov_57vuh9v2e().b[299][1]++,""));cov_57vuh9v2e().s[876]++;return`${t.value}${r}`;}function Tn(t){cov_57vuh9v2e().f[361]++;cov_57vuh9v2e().s[877]++;if(t.snapshot){cov_57vuh9v2e().b[300][0]++;let r=(cov_57vuh9v2e().s[878]++,t.snapshot),e=(cov_57vuh9v2e().s[879]++,t._futureSnapshot);cov_57vuh9v2e().s[880]++;t.snapshot=e,(cov_57vuh9v2e().b[301][0]++,B(r.queryParams,e.queryParams))||(cov_57vuh9v2e().b[301][1]++,t.queryParamsSubject.next(e.queryParams)),(cov_57vuh9v2e().b[302][0]++,r.fragment!==e.fragment)&&(cov_57vuh9v2e().b[302][1]++,t.fragmentSubject.next(e.fragment)),(cov_57vuh9v2e().b[303][0]++,B(r.params,e.params))||(cov_57vuh9v2e().b[303][1]++,t.paramsSubject.next(e.params)),(cov_57vuh9v2e().b[304][0]++,_o(r.url,e.url))||(cov_57vuh9v2e().b[304][1]++,t.urlSubject.next(e.url)),(cov_57vuh9v2e().b[305][0]++,B(r.data,e.data))||(cov_57vuh9v2e().b[305][1]++,t.dataSubject.next(e.data));}else{cov_57vuh9v2e().b[300][1]++;cov_57vuh9v2e().s[881]++;t.snapshot=t._futureSnapshot,t.dataSubject.next(t._futureSnapshot.data);}}function xn(t,r){cov_57vuh9v2e().f[362]++;let e=(cov_57vuh9v2e().s[882]++,(cov_57vuh9v2e().b[306][0]++,B(t.params,r.params))&&(cov_57vuh9v2e().b[306][1]++,Lo(t.url,r.url))),n=(cov_57vuh9v2e().s[883]++,!t.parent!=!r.parent);cov_57vuh9v2e().s[884]++;return(cov_57vuh9v2e().b[307][0]++,e)&&(cov_57vuh9v2e().b[307][1]++,!n)&&((cov_57vuh9v2e().b[307][2]++,!t.parent)||(cov_57vuh9v2e().b[307][3]++,xn(t.parent,r.parent)));}function Oi(t){cov_57vuh9v2e().f[363]++;cov_57vuh9v2e().s[885]++;return(cov_57vuh9v2e().b[308][0]++,typeof t.title=="string")||(cov_57vuh9v2e().b[308][1]++,t.title===null);}cov_57vuh9v2e().s[943]++;var Ni=(cov_57vuh9v2e().s[886]++,new C("")),Wn=(cov_57vuh9v2e().s[887]++,(()=>{cov_57vuh9v2e().f[364]++;class t{activated=(cov_57vuh9v2e().s[888]++,null);get activatedComponentRef(){cov_57vuh9v2e().f[365]++;cov_57vuh9v2e().s[889]++;return this.activated;}_activatedRoute=(cov_57vuh9v2e().s[890]++,null);name=(cov_57vuh9v2e().s[891]++,p);activateEvents=(cov_57vuh9v2e().s[892]++,new ae());deactivateEvents=(cov_57vuh9v2e().s[893]++,new ae());attachEvents=(cov_57vuh9v2e().s[894]++,new ae());detachEvents=(cov_57vuh9v2e().s[895]++,new ae());routerOutletData=(cov_57vuh9v2e().s[896]++,zr());parentContexts=(cov_57vuh9v2e().s[897]++,h(he));location=(cov_57vuh9v2e().s[898]++,h(Ir));changeDetector=(cov_57vuh9v2e().s[899]++,h(mt));inputBinder=(cov_57vuh9v2e().s[900]++,h(tt,{optional:!0}));supportsBindingToComponentInputs=(cov_57vuh9v2e().s[901]++,!0);ngOnChanges(e){cov_57vuh9v2e().f[366]++;cov_57vuh9v2e().s[902]++;if(e.name){cov_57vuh9v2e().b[309][0]++;let{firstChange:n,previousValue:i}=(cov_57vuh9v2e().s[903]++,e.name);cov_57vuh9v2e().s[904]++;if(n){cov_57vuh9v2e().b[310][0]++;cov_57vuh9v2e().s[905]++;return;}else{cov_57vuh9v2e().b[310][1]++;}cov_57vuh9v2e().s[906]++;(cov_57vuh9v2e().b[311][0]++,this.isTrackedInParentContexts(i))&&(cov_57vuh9v2e().b[311][1]++,this.deactivate(),this.parentContexts.onChildOutletDestroyed(i)),this.initializeOutletWithName();}else{cov_57vuh9v2e().b[309][1]++;}}ngOnDestroy(){cov_57vuh9v2e().f[367]++;cov_57vuh9v2e().s[907]++;(cov_57vuh9v2e().b[312][0]++,this.isTrackedInParentContexts(this.name))&&(cov_57vuh9v2e().b[312][1]++,this.parentContexts.onChildOutletDestroyed(this.name)),this.inputBinder?.unsubscribeFromRouteData(this);}isTrackedInParentContexts(e){cov_57vuh9v2e().f[368]++;cov_57vuh9v2e().s[908]++;return this.parentContexts.getContext(e)?.outlet===this;}ngOnInit(){cov_57vuh9v2e().f[369]++;cov_57vuh9v2e().s[909]++;this.initializeOutletWithName();}initializeOutletWithName(){cov_57vuh9v2e().f[370]++;cov_57vuh9v2e().s[910]++;if(this.parentContexts.onChildOutletCreated(this.name,this),this.activated){cov_57vuh9v2e().b[313][0]++;cov_57vuh9v2e().s[911]++;return;}else{cov_57vuh9v2e().b[313][1]++;}let e=(cov_57vuh9v2e().s[912]++,this.parentContexts.getContext(this.name));cov_57vuh9v2e().s[913]++;(cov_57vuh9v2e().b[314][0]++,e?.route)&&(cov_57vuh9v2e().b[314][1]++,e.attachRef?(cov_57vuh9v2e().b[315][0]++,this.attach(e.attachRef,e.route)):(cov_57vuh9v2e().b[315][1]++,this.activateWith(e.route,e.injector)));}get isActivated(){cov_57vuh9v2e().f[371]++;cov_57vuh9v2e().s[914]++;return!!this.activated;}get component(){cov_57vuh9v2e().f[372]++;cov_57vuh9v2e().s[915]++;if(!this.activated){cov_57vuh9v2e().b[316][0]++;cov_57vuh9v2e().s[916]++;throw new S(4012,!1);}else{cov_57vuh9v2e().b[316][1]++;}cov_57vuh9v2e().s[917]++;return this.activated.instance;}get activatedRoute(){cov_57vuh9v2e().f[373]++;cov_57vuh9v2e().s[918]++;if(!this.activated){cov_57vuh9v2e().b[317][0]++;cov_57vuh9v2e().s[919]++;throw new S(4012,!1);}else{cov_57vuh9v2e().b[317][1]++;}cov_57vuh9v2e().s[920]++;return this._activatedRoute;}get activatedRouteData(){cov_57vuh9v2e().f[374]++;cov_57vuh9v2e().s[921]++;return this._activatedRoute?(cov_57vuh9v2e().b[318][0]++,this._activatedRoute.snapshot.data):(cov_57vuh9v2e().b[318][1]++,{});}detach(){cov_57vuh9v2e().f[375]++;cov_57vuh9v2e().s[922]++;if(!this.activated){cov_57vuh9v2e().b[319][0]++;cov_57vuh9v2e().s[923]++;throw new S(4012,!1);}else{cov_57vuh9v2e().b[319][1]++;}cov_57vuh9v2e().s[924]++;this.location.detach();let e=(cov_57vuh9v2e().s[925]++,this.activated);cov_57vuh9v2e().s[926]++;return this.activated=null,this._activatedRoute=null,this.detachEvents.emit(e.instance),e;}attach(e,n){cov_57vuh9v2e().f[376]++;cov_57vuh9v2e().s[927]++;this.activated=e,this._activatedRoute=n,this.location.insert(e.hostView),this.inputBinder?.bindActivatedRouteToOutletComponent(this),this.attachEvents.emit(e.instance);}deactivate(){cov_57vuh9v2e().f[377]++;cov_57vuh9v2e().s[928]++;if(this.activated){cov_57vuh9v2e().b[320][0]++;let e=(cov_57vuh9v2e().s[929]++,this.component);cov_57vuh9v2e().s[930]++;this.activated.destroy(),this.activated=null,this._activatedRoute=null,this.deactivateEvents.emit(e);}else{cov_57vuh9v2e().b[320][1]++;}}activateWith(e,n){cov_57vuh9v2e().f[378]++;cov_57vuh9v2e().s[931]++;if(this.isActivated){cov_57vuh9v2e().b[321][0]++;cov_57vuh9v2e().s[932]++;throw new S(4013,!1);}else{cov_57vuh9v2e().b[321][1]++;}cov_57vuh9v2e().s[933]++;this._activatedRoute=e;let i=(cov_57vuh9v2e().s[934]++,this.location),s=(cov_57vuh9v2e().s[935]++,e.snapshot.component),a=(cov_57vuh9v2e().s[936]++,this.parentContexts.getOrCreateContext(this.name).children),c=(cov_57vuh9v2e().s[937]++,new jn(e,a,i.injector,this.routerOutletData));cov_57vuh9v2e().s[938]++;this.activated=i.createComponent(s,{index:i.length,injector:c,environmentInjector:n}),this.changeDetector.markForCheck(),this.inputBinder?.bindActivatedRouteToOutletComponent(this),this.activateEvents.emit(this.activated.instance);}static ɵfac=(cov_57vuh9v2e().s[939]++,function(n){cov_57vuh9v2e().f[379]++;cov_57vuh9v2e().s[940]++;return new((cov_57vuh9v2e().b[322][0]++,n)||(cov_57vuh9v2e().b[322][1]++,t))();});static ɵdir=(cov_57vuh9v2e().s[941]++,Le({type:t,selectors:[["router-outlet"]],inputs:{name:"name",routerOutletData:[1,"routerOutletData"]},outputs:{activateEvents:"activate",deactivateEvents:"deactivate",attachEvents:"attach",detachEvents:"detach"},exportAs:["outlet"],features:[Pe]}));}cov_57vuh9v2e().s[942]++;return t;})()),jn=class{route;childContexts;parent;outletData;constructor(r,e,n,i){cov_57vuh9v2e().f[380]++;cov_57vuh9v2e().s[944]++;this.route=r,this.childContexts=e,this.parent=n,this.outletData=i;}get(r,e){cov_57vuh9v2e().f[381]++;cov_57vuh9v2e().s[945]++;return r===G?(cov_57vuh9v2e().b[323][0]++,this.route):(cov_57vuh9v2e().b[323][1]++,r===he?(cov_57vuh9v2e().b[324][0]++,this.childContexts):(cov_57vuh9v2e().b[324][1]++,r===Ni?(cov_57vuh9v2e().b[325][0]++,this.outletData):(cov_57vuh9v2e().b[325][1]++,this.parent.get(r,e))));}},tt=(cov_57vuh9v2e().s[946]++,new C("")),Yn=(cov_57vuh9v2e().s[947]++,(()=>{cov_57vuh9v2e().f[382]++;class t{outletDataSubscriptions=(cov_57vuh9v2e().s[948]++,new Map());bindActivatedRouteToOutletComponent(e){cov_57vuh9v2e().f[383]++;cov_57vuh9v2e().s[949]++;this.unsubscribeFromRouteData(e),this.subscribeToRouteData(e);}unsubscribeFromRouteData(e){cov_57vuh9v2e().f[384]++;cov_57vuh9v2e().s[950]++;this.outletDataSubscriptions.get(e)?.unsubscribe(),this.outletDataSubscriptions.delete(e);}subscribeToRouteData(e){cov_57vuh9v2e().f[385]++;let{activatedRoute:n}=(cov_57vuh9v2e().s[951]++,e),i=(cov_57vuh9v2e().s[952]++,rn([n.queryParams,n.params,n.data]).pipe(j(([o,s,a],c)=>{cov_57vuh9v2e().f[386]++;cov_57vuh9v2e().s[953]++;return a=d(d(d({},o),s),a),c===0?(cov_57vuh9v2e().b[326][0]++,g(a)):(cov_57vuh9v2e().b[326][1]++,Promise.resolve(a));})).subscribe(o=>{cov_57vuh9v2e().f[387]++;cov_57vuh9v2e().s[954]++;if((cov_57vuh9v2e().b[328][0]++,!e.isActivated)||(cov_57vuh9v2e().b[328][1]++,!e.activatedComponentRef)||(cov_57vuh9v2e().b[328][2]++,e.activatedRoute!==n)||(cov_57vuh9v2e().b[328][3]++,n.component===null)){cov_57vuh9v2e().b[327][0]++;cov_57vuh9v2e().s[955]++;this.unsubscribeFromRouteData(e);cov_57vuh9v2e().s[956]++;return;}else{cov_57vuh9v2e().b[327][1]++;}let s=(cov_57vuh9v2e().s[957]++,Br(n.component));cov_57vuh9v2e().s[958]++;if(!s){cov_57vuh9v2e().b[329][0]++;cov_57vuh9v2e().s[959]++;this.unsubscribeFromRouteData(e);cov_57vuh9v2e().s[960]++;return;}else{cov_57vuh9v2e().b[329][1]++;}cov_57vuh9v2e().s[961]++;for(let{templateName:a}of s.inputs){cov_57vuh9v2e().s[962]++;e.activatedComponentRef.setInput(a,o[a]);}}));cov_57vuh9v2e().s[963]++;this.outletDataSubscriptions.set(e,i);}static ɵfac=(cov_57vuh9v2e().s[964]++,function(n){cov_57vuh9v2e().f[388]++;cov_57vuh9v2e().s[965]++;return new((cov_57vuh9v2e().b[330][0]++,n)||(cov_57vuh9v2e().b[330][1]++,t))();});static ɵprov=(cov_57vuh9v2e().s[966]++,m({token:t,factory:t.ɵfac}));}cov_57vuh9v2e().s[967]++;return t;})()),Qn=(cov_57vuh9v2e().s[968]++,(()=>{cov_57vuh9v2e().f[389]++;class t{static ɵfac=(cov_57vuh9v2e().s[969]++,function(n){cov_57vuh9v2e().f[390]++;cov_57vuh9v2e().s[970]++;return new((cov_57vuh9v2e().b[331][0]++,n)||(cov_57vuh9v2e().b[331][1]++,t))();});static ɵcmp=(cov_57vuh9v2e().s[971]++,Dr({type:t,selectors:[["ng-component"]],exportAs:["emptyRouterOutlet"],decls:1,vars:0,template:function(n,i){cov_57vuh9v2e().f[391]++;cov_57vuh9v2e().s[972]++;(cov_57vuh9v2e().b[332][0]++,n&1)&&(cov_57vuh9v2e().b[332][1]++,Pr(0,"router-outlet"));},dependencies:[Wn],encapsulation:2}));}cov_57vuh9v2e().s[973]++;return t;})());function Kn(t){cov_57vuh9v2e().f[392]++;let r=(cov_57vuh9v2e().s[974]++,(cov_57vuh9v2e().b[333][0]++,t.children)&&(cov_57vuh9v2e().b[333][1]++,t.children.map(Kn))),e=(cov_57vuh9v2e().s[975]++,r?(cov_57vuh9v2e().b[334][0]++,A(d({},t),{children:r})):(cov_57vuh9v2e().b[334][1]++,d({},t)));cov_57vuh9v2e().s[976]++;return(cov_57vuh9v2e().b[335][0]++,!e.component)&&(cov_57vuh9v2e().b[335][1]++,!e.loadComponent)&&((cov_57vuh9v2e().b[335][2]++,r)||(cov_57vuh9v2e().b[335][3]++,e.loadChildren))&&(cov_57vuh9v2e().b[335][4]++,e.outlet)&&(cov_57vuh9v2e().b[335][5]++,e.outlet!==p)&&(cov_57vuh9v2e().b[335][6]++,e.component=Qn),e;}function rs(t,r,e){cov_57vuh9v2e().f[393]++;let n=(cov_57vuh9v2e().s[977]++,Je(t,r._root,e?(cov_57vuh9v2e().b[336][0]++,e._root):(cov_57vuh9v2e().b[336][1]++,void 0)));cov_57vuh9v2e().s[978]++;return new Ke(n,r);}function Je(t,r,e){cov_57vuh9v2e().f[394]++;cov_57vuh9v2e().s[979]++;if((cov_57vuh9v2e().b[338][0]++,e)&&(cov_57vuh9v2e().b[338][1]++,t.shouldReuseRoute(r.value,e.value.snapshot))){cov_57vuh9v2e().b[337][0]++;let n=(cov_57vuh9v2e().s[980]++,e.value);cov_57vuh9v2e().s[981]++;n._futureSnapshot=r.value;let i=(cov_57vuh9v2e().s[982]++,is(t,r,e));cov_57vuh9v2e().s[983]++;return new O(n,i);}else{cov_57vuh9v2e().b[337][1]++;cov_57vuh9v2e().s[984]++;if(t.shouldAttach(r.value)){cov_57vuh9v2e().b[339][0]++;let o=(cov_57vuh9v2e().s[985]++,t.retrieve(r.value));cov_57vuh9v2e().s[986]++;if(o!==null){cov_57vuh9v2e().b[340][0]++;let s=(cov_57vuh9v2e().s[987]++,o.route);cov_57vuh9v2e().s[988]++;return s.value._futureSnapshot=r.value,s.children=r.children.map(a=>{cov_57vuh9v2e().f[395]++;cov_57vuh9v2e().s[989]++;return Je(t,a);}),s;}else{cov_57vuh9v2e().b[340][1]++;}}else{cov_57vuh9v2e().b[339][1]++;}let n=(cov_57vuh9v2e().s[990]++,os(r.value)),i=(cov_57vuh9v2e().s[991]++,r.children.map(o=>{cov_57vuh9v2e().f[396]++;cov_57vuh9v2e().s[992]++;return Je(t,o);}));cov_57vuh9v2e().s[993]++;return new O(n,i);}}function is(t,r,e){cov_57vuh9v2e().f[397]++;cov_57vuh9v2e().s[994]++;return r.children.map(n=>{cov_57vuh9v2e().f[398]++;cov_57vuh9v2e().s[995]++;for(let i of e.children){cov_57vuh9v2e().s[996]++;if(t.shouldReuseRoute(n.value,i.value.snapshot)){cov_57vuh9v2e().b[341][0]++;cov_57vuh9v2e().s[997]++;return Je(t,n,i);}else{cov_57vuh9v2e().b[341][1]++;}}cov_57vuh9v2e().s[998]++;return Je(t,n);});}function os(t){cov_57vuh9v2e().f[399]++;cov_57vuh9v2e().s[999]++;return new G(new U(t.url),new U(t.params),new U(t.queryParams),new U(t.fragment),new U(t.data),t.outlet,t.component,t);}cov_57vuh9v2e().s[1000]++;var Me=class{redirectTo;navigationBehaviorOptions;constructor(r,e){cov_57vuh9v2e().f[400]++;cov_57vuh9v2e().s[1001]++;this.redirectTo=r,this.navigationBehaviorOptions=e;}},Pi=(cov_57vuh9v2e().s[1002]++,"ngNavigationCancelingError");function Vt(t,r){cov_57vuh9v2e().f[401]++;let{redirectTo:e,navigationBehaviorOptions:n}=(cov_57vuh9v2e().s[1003]++,ee(r)?(cov_57vuh9v2e().b[342][0]++,{redirectTo:r,navigationBehaviorOptions:void 0}):(cov_57vuh9v2e().b[342][1]++,r)),i=(cov_57vuh9v2e().s[1004]++,Ui(!1,I.Redirect));cov_57vuh9v2e().s[1005]++;return i.url=e,i.navigationBehaviorOptions=n,i;}function Ui(t,r){cov_57vuh9v2e().f[402]++;let e=(cov_57vuh9v2e().s[1006]++,new Error(`NavigationCancelingError: ${(cov_57vuh9v2e().b[343][0]++,t)||(cov_57vuh9v2e().b[343][1]++,"")}`));cov_57vuh9v2e().s[1007]++;return e[Pi]=!0,e.cancellationCode=r,e;}function ss(t){cov_57vuh9v2e().f[403]++;cov_57vuh9v2e().s[1008]++;return(cov_57vuh9v2e().b[344][0]++,Li(t))&&(cov_57vuh9v2e().b[344][1]++,ee(t.url));}function Li(t){cov_57vuh9v2e().f[404]++;cov_57vuh9v2e().s[1009]++;return(cov_57vuh9v2e().b[345][0]++,!!t)&&(cov_57vuh9v2e().b[345][1]++,t[Pi]);}cov_57vuh9v2e().s[1010]++;cov_57vuh9v2e().s[1061]++;cov_57vuh9v2e().s[1063]++;var kn=class{routeReuseStrategy;futureState;currState;forwardEvent;inputBindingEnabled;constructor(r,e,n,i,o){cov_57vuh9v2e().f[405]++;cov_57vuh9v2e().s[1011]++;this.routeReuseStrategy=r,this.futureState=e,this.currState=n,this.forwardEvent=i,this.inputBindingEnabled=o;}activate(r){cov_57vuh9v2e().f[406]++;let e=(cov_57vuh9v2e().s[1012]++,this.futureState._root),n=(cov_57vuh9v2e().s[1013]++,this.currState?(cov_57vuh9v2e().b[346][0]++,this.currState._root):(cov_57vuh9v2e().b[346][1]++,null));cov_57vuh9v2e().s[1014]++;this.deactivateChildRoutes(e,n,r),Tn(this.futureState.root),this.activateChildRoutes(e,n,r);}deactivateChildRoutes(r,e,n){cov_57vuh9v2e().f[407]++;let i=(cov_57vuh9v2e().s[1015]++,ve(e));cov_57vuh9v2e().s[1016]++;r.children.forEach(o=>{cov_57vuh9v2e().f[408]++;let s=(cov_57vuh9v2e().s[1017]++,o.value.outlet);cov_57vuh9v2e().s[1018]++;this.deactivateRoutes(o,i[s],n),delete i[s];}),Object.values(i).forEach(o=>{cov_57vuh9v2e().f[409]++;cov_57vuh9v2e().s[1019]++;this.deactivateRouteAndItsChildren(o,n);});}deactivateRoutes(r,e,n){cov_57vuh9v2e().f[410]++;let i=(cov_57vuh9v2e().s[1020]++,r.value),o=(cov_57vuh9v2e().s[1021]++,e?(cov_57vuh9v2e().b[347][0]++,e.value):(cov_57vuh9v2e().b[347][1]++,null));cov_57vuh9v2e().s[1022]++;if(i===o){cov_57vuh9v2e().b[348][0]++;cov_57vuh9v2e().s[1023]++;if(i.component){cov_57vuh9v2e().b[349][0]++;let s=(cov_57vuh9v2e().s[1024]++,n.getContext(i.outlet));cov_57vuh9v2e().s[1025]++;(cov_57vuh9v2e().b[350][0]++,s)&&(cov_57vuh9v2e().b[350][1]++,this.deactivateChildRoutes(r,e,s.children));}else{cov_57vuh9v2e().b[349][1]++;cov_57vuh9v2e().s[1026]++;this.deactivateChildRoutes(r,e,n);}}else{cov_57vuh9v2e().b[348][1]++;cov_57vuh9v2e().s[1027]++;(cov_57vuh9v2e().b[351][0]++,o)&&(cov_57vuh9v2e().b[351][1]++,this.deactivateRouteAndItsChildren(e,n));}}deactivateRouteAndItsChildren(r,e){cov_57vuh9v2e().f[411]++;cov_57vuh9v2e().s[1028]++;(cov_57vuh9v2e().b[353][0]++,r.value.component)&&(cov_57vuh9v2e().b[353][1]++,this.routeReuseStrategy.shouldDetach(r.value.snapshot))?(cov_57vuh9v2e().b[352][0]++,this.detachAndStoreRouteSubtree(r,e)):(cov_57vuh9v2e().b[352][1]++,this.deactivateRouteAndOutlet(r,e));}detachAndStoreRouteSubtree(r,e){cov_57vuh9v2e().f[412]++;let n=(cov_57vuh9v2e().s[1029]++,e.getContext(r.value.outlet)),i=(cov_57vuh9v2e().s[1030]++,(cov_57vuh9v2e().b[355][0]++,n)&&(cov_57vuh9v2e().b[355][1]++,r.value.component)?(cov_57vuh9v2e().b[354][0]++,n.children):(cov_57vuh9v2e().b[354][1]++,e)),o=(cov_57vuh9v2e().s[1031]++,ve(r));cov_57vuh9v2e().s[1032]++;for(let s of Object.values(o)){cov_57vuh9v2e().s[1033]++;this.deactivateRouteAndItsChildren(s,i);}cov_57vuh9v2e().s[1034]++;if((cov_57vuh9v2e().b[357][0]++,n)&&(cov_57vuh9v2e().b[357][1]++,n.outlet)){cov_57vuh9v2e().b[356][0]++;let s=(cov_57vuh9v2e().s[1035]++,n.outlet.detach()),a=(cov_57vuh9v2e().s[1036]++,n.children.onOutletDeactivated());cov_57vuh9v2e().s[1037]++;this.routeReuseStrategy.store(r.value.snapshot,{componentRef:s,route:r,contexts:a});}else{cov_57vuh9v2e().b[356][1]++;}}deactivateRouteAndOutlet(r,e){cov_57vuh9v2e().f[413]++;let n=(cov_57vuh9v2e().s[1038]++,e.getContext(r.value.outlet)),i=(cov_57vuh9v2e().s[1039]++,(cov_57vuh9v2e().b[359][0]++,n)&&(cov_57vuh9v2e().b[359][1]++,r.value.component)?(cov_57vuh9v2e().b[358][0]++,n.children):(cov_57vuh9v2e().b[358][1]++,e)),o=(cov_57vuh9v2e().s[1040]++,ve(r));cov_57vuh9v2e().s[1041]++;for(let s of Object.values(o)){cov_57vuh9v2e().s[1042]++;this.deactivateRouteAndItsChildren(s,i);}cov_57vuh9v2e().s[1043]++;(cov_57vuh9v2e().b[360][0]++,n)&&(cov_57vuh9v2e().b[360][1]++,(cov_57vuh9v2e().b[361][0]++,n.outlet)&&(cov_57vuh9v2e().b[361][1]++,n.outlet.deactivate(),n.children.onOutletDeactivated()),n.attachRef=null,n.route=null);}activateChildRoutes(r,e,n){cov_57vuh9v2e().f[414]++;let i=(cov_57vuh9v2e().s[1044]++,ve(e));cov_57vuh9v2e().s[1045]++;r.children.forEach(o=>{cov_57vuh9v2e().f[415]++;cov_57vuh9v2e().s[1046]++;this.activateRoutes(o,i[o.value.outlet],n),this.forwardEvent(new Ft(o.value.snapshot));}),(cov_57vuh9v2e().b[362][0]++,r.children.length)&&(cov_57vuh9v2e().b[362][1]++,this.forwardEvent(new $t(r.value.snapshot)));}activateRoutes(r,e,n){cov_57vuh9v2e().f[416]++;let i=(cov_57vuh9v2e().s[1047]++,r.value),o=(cov_57vuh9v2e().s[1048]++,e?(cov_57vuh9v2e().b[363][0]++,e.value):(cov_57vuh9v2e().b[363][1]++,null));cov_57vuh9v2e().s[1049]++;if(Tn(i),i===o){cov_57vuh9v2e().b[364][0]++;cov_57vuh9v2e().s[1050]++;if(i.component){cov_57vuh9v2e().b[365][0]++;let s=(cov_57vuh9v2e().s[1051]++,n.getOrCreateContext(i.outlet));cov_57vuh9v2e().s[1052]++;this.activateChildRoutes(r,e,s.children);}else{cov_57vuh9v2e().b[365][1]++;cov_57vuh9v2e().s[1053]++;this.activateChildRoutes(r,e,n);}}else{cov_57vuh9v2e().b[364][1]++;cov_57vuh9v2e().s[1054]++;if(i.component){cov_57vuh9v2e().b[366][0]++;let s=(cov_57vuh9v2e().s[1055]++,n.getOrCreateContext(i.outlet));cov_57vuh9v2e().s[1056]++;if(this.routeReuseStrategy.shouldAttach(i.snapshot)){cov_57vuh9v2e().b[367][0]++;let a=(cov_57vuh9v2e().s[1057]++,this.routeReuseStrategy.retrieve(i.snapshot));cov_57vuh9v2e().s[1058]++;this.routeReuseStrategy.store(i.snapshot,null),s.children.onOutletReAttached(a.contexts),s.attachRef=a.componentRef,s.route=a.route.value,(cov_57vuh9v2e().b[368][0]++,s.outlet)&&(cov_57vuh9v2e().b[368][1]++,s.outlet.attach(a.componentRef,a.route.value)),Tn(a.route.value),this.activateChildRoutes(r,null,s.children);}else{cov_57vuh9v2e().b[367][1]++;cov_57vuh9v2e().s[1059]++;s.attachRef=null,s.route=i,(cov_57vuh9v2e().b[369][0]++,s.outlet)&&(cov_57vuh9v2e().b[369][1]++,s.outlet.activateWith(i,s.injector)),this.activateChildRoutes(r,null,s.children);}}else{cov_57vuh9v2e().b[366][1]++;cov_57vuh9v2e().s[1060]++;this.activateChildRoutes(r,null,n);}}}},Gt=class{path;route;constructor(r){cov_57vuh9v2e().f[417]++;cov_57vuh9v2e().s[1062]++;this.path=r,this.route=this.path[this.path.length-1];}},Re=class{component;route;constructor(r,e){cov_57vuh9v2e().f[418]++;cov_57vuh9v2e().s[1064]++;this.component=r,this.route=e;}};function as(t,r,e){cov_57vuh9v2e().f[419]++;let n=(cov_57vuh9v2e().s[1065]++,t._root),i=(cov_57vuh9v2e().s[1066]++,r?(cov_57vuh9v2e().b[370][0]++,r._root):(cov_57vuh9v2e().b[370][1]++,null));cov_57vuh9v2e().s[1067]++;return Be(n,i,e,[n.value]);}function cs(t){cov_57vuh9v2e().f[420]++;let r=(cov_57vuh9v2e().s[1068]++,t.routeConfig?(cov_57vuh9v2e().b[371][0]++,t.routeConfig.canActivateChild):(cov_57vuh9v2e().b[371][1]++,null));cov_57vuh9v2e().s[1069]++;return(cov_57vuh9v2e().b[373][0]++,!r)||(cov_57vuh9v2e().b[373][1]++,r.length===0)?(cov_57vuh9v2e().b[372][0]++,null):(cov_57vuh9v2e().b[372][1]++,{node:t,guards:r});}function Te(t,r){cov_57vuh9v2e().f[421]++;let e=(cov_57vuh9v2e().s[1070]++,Symbol()),n=(cov_57vuh9v2e().s[1071]++,r.get(t,e));cov_57vuh9v2e().s[1072]++;return n===e?(cov_57vuh9v2e().b[374][0]++,(cov_57vuh9v2e().b[376][0]++,typeof t=="function")&&(cov_57vuh9v2e().b[376][1]++,!hr(t))?(cov_57vuh9v2e().b[375][0]++,t):(cov_57vuh9v2e().b[375][1]++,r.get(t))):(cov_57vuh9v2e().b[374][1]++,n);}function Be(t,r,e,n,i=(cov_57vuh9v2e().b[377][0]++,{canDeactivateChecks:[],canActivateChecks:[]})){cov_57vuh9v2e().f[422]++;let o=(cov_57vuh9v2e().s[1073]++,ve(r));cov_57vuh9v2e().s[1074]++;return t.children.forEach(s=>{cov_57vuh9v2e().f[423]++;cov_57vuh9v2e().s[1075]++;us(s,o[s.value.outlet],e,n.concat([s.value]),i),delete o[s.value.outlet];}),Object.entries(o).forEach(([s,a])=>{cov_57vuh9v2e().f[424]++;cov_57vuh9v2e().s[1076]++;return Ve(a,e.getContext(s),i);}),i;}function us(t,r,e,n,i=(cov_57vuh9v2e().b[378][0]++,{canDeactivateChecks:[],canActivateChecks:[]})){cov_57vuh9v2e().f[425]++;let o=(cov_57vuh9v2e().s[1077]++,t.value),s=(cov_57vuh9v2e().s[1078]++,r?(cov_57vuh9v2e().b[379][0]++,r.value):(cov_57vuh9v2e().b[379][1]++,null)),a=(cov_57vuh9v2e().s[1079]++,e?(cov_57vuh9v2e().b[380][0]++,e.getContext(t.value.outlet)):(cov_57vuh9v2e().b[380][1]++,null));cov_57vuh9v2e().s[1080]++;if((cov_57vuh9v2e().b[382][0]++,s)&&(cov_57vuh9v2e().b[382][1]++,o.routeConfig===s.routeConfig)){cov_57vuh9v2e().b[381][0]++;let c=(cov_57vuh9v2e().s[1081]++,ls(s,o,o.routeConfig.runGuardsAndResolvers));cov_57vuh9v2e().s[1082]++;c?(cov_57vuh9v2e().b[383][0]++,i.canActivateChecks.push(new Gt(n))):(cov_57vuh9v2e().b[383][1]++,o.data=s.data,o._resolvedData=s._resolvedData),o.component?(cov_57vuh9v2e().b[384][0]++,Be(t,r,a?(cov_57vuh9v2e().b[385][0]++,a.children):(cov_57vuh9v2e().b[385][1]++,null),n,i)):(cov_57vuh9v2e().b[384][1]++,Be(t,r,e,n,i)),(cov_57vuh9v2e().b[386][0]++,c)&&(cov_57vuh9v2e().b[386][1]++,a)&&(cov_57vuh9v2e().b[386][2]++,a.outlet)&&(cov_57vuh9v2e().b[386][3]++,a.outlet.isActivated)&&(cov_57vuh9v2e().b[386][4]++,i.canDeactivateChecks.push(new Re(a.outlet.component,s)));}else{cov_57vuh9v2e().b[381][1]++;cov_57vuh9v2e().s[1083]++;(cov_57vuh9v2e().b[387][0]++,s)&&(cov_57vuh9v2e().b[387][1]++,Ve(r,a,i)),i.canActivateChecks.push(new Gt(n)),o.component?(cov_57vuh9v2e().b[388][0]++,Be(t,null,a?(cov_57vuh9v2e().b[389][0]++,a.children):(cov_57vuh9v2e().b[389][1]++,null),n,i)):(cov_57vuh9v2e().b[388][1]++,Be(t,null,e,n,i));}cov_57vuh9v2e().s[1084]++;return i;}function ls(t,r,e){cov_57vuh9v2e().f[426]++;cov_57vuh9v2e().s[1085]++;if(typeof e=="function"){cov_57vuh9v2e().b[390][0]++;cov_57vuh9v2e().s[1086]++;return _(r._environmentInjector,()=>{cov_57vuh9v2e().f[427]++;cov_57vuh9v2e().s[1087]++;return e(t,r);});}else{cov_57vuh9v2e().b[390][1]++;}cov_57vuh9v2e().s[1088]++;switch(e){case"pathParamsChange":cov_57vuh9v2e().b[391][0]++;cov_57vuh9v2e().s[1089]++;return!ce(t.url,r.url);case"pathParamsOrQueryParamsChange":cov_57vuh9v2e().b[391][1]++;cov_57vuh9v2e().s[1090]++;return(cov_57vuh9v2e().b[392][0]++,!ce(t.url,r.url))||(cov_57vuh9v2e().b[392][1]++,!B(t.queryParams,r.queryParams));case"always":cov_57vuh9v2e().b[391][2]++;cov_57vuh9v2e().s[1091]++;return!0;case"paramsOrQueryParamsChange":cov_57vuh9v2e().b[391][3]++;cov_57vuh9v2e().s[1092]++;return(cov_57vuh9v2e().b[393][0]++,!xn(t,r))||(cov_57vuh9v2e().b[393][1]++,!B(t.queryParams,r.queryParams));default:cov_57vuh9v2e().b[391][4]++;cov_57vuh9v2e().s[1093]++;return!xn(t,r);}}function Ve(t,r,e){cov_57vuh9v2e().f[428]++;let n=(cov_57vuh9v2e().s[1094]++,ve(t)),i=(cov_57vuh9v2e().s[1095]++,t.value);cov_57vuh9v2e().s[1096]++;Object.entries(n).forEach(([o,s])=>{cov_57vuh9v2e().f[429]++;cov_57vuh9v2e().s[1097]++;i.component?(cov_57vuh9v2e().b[394][0]++,r?(cov_57vuh9v2e().b[395][0]++,Ve(s,r.children.getContext(o),e)):(cov_57vuh9v2e().b[395][1]++,Ve(s,null,e))):(cov_57vuh9v2e().b[394][1]++,Ve(s,r,e));}),i.component?(cov_57vuh9v2e().b[396][0]++,(cov_57vuh9v2e().b[398][0]++,r)&&(cov_57vuh9v2e().b[398][1]++,r.outlet)&&(cov_57vuh9v2e().b[398][2]++,r.outlet.isActivated)?(cov_57vuh9v2e().b[397][0]++,e.canDeactivateChecks.push(new Re(r.outlet.component,i))):(cov_57vuh9v2e().b[397][1]++,e.canDeactivateChecks.push(new Re(null,i)))):(cov_57vuh9v2e().b[396][1]++,e.canDeactivateChecks.push(new Re(null,i)));}function nt(t){cov_57vuh9v2e().f[430]++;cov_57vuh9v2e().s[1098]++;return typeof t=="function";}function ds(t){cov_57vuh9v2e().f[431]++;cov_57vuh9v2e().s[1099]++;return typeof t=="boolean";}function hs(t){cov_57vuh9v2e().f[432]++;cov_57vuh9v2e().s[1100]++;return(cov_57vuh9v2e().b[399][0]++,t)&&(cov_57vuh9v2e().b[399][1]++,nt(t.canLoad));}function fs(t){cov_57vuh9v2e().f[433]++;cov_57vuh9v2e().s[1101]++;return(cov_57vuh9v2e().b[400][0]++,t)&&(cov_57vuh9v2e().b[400][1]++,nt(t.canActivate));}function ps(t){cov_57vuh9v2e().f[434]++;cov_57vuh9v2e().s[1102]++;return(cov_57vuh9v2e().b[401][0]++,t)&&(cov_57vuh9v2e().b[401][1]++,nt(t.canActivateChild));}function gs(t){cov_57vuh9v2e().f[435]++;cov_57vuh9v2e().s[1103]++;return(cov_57vuh9v2e().b[402][0]++,t)&&(cov_57vuh9v2e().b[402][1]++,nt(t.canDeactivate));}function vs(t){cov_57vuh9v2e().f[436]++;cov_57vuh9v2e().s[1104]++;return(cov_57vuh9v2e().b[403][0]++,t)&&(cov_57vuh9v2e().b[403][1]++,nt(t.canMatch));}function xi(t){cov_57vuh9v2e().f[437]++;cov_57vuh9v2e().s[1105]++;return(cov_57vuh9v2e().b[404][0]++,t instanceof ar)||(cov_57vuh9v2e().b[404][1]++,t?.name==="EmptyError");}var It=(cov_57vuh9v2e().s[1106]++,Symbol("INITIAL_VALUE"));function Ie(){cov_57vuh9v2e().f[438]++;cov_57vuh9v2e().s[1107]++;return j(t=>{cov_57vuh9v2e().f[439]++;cov_57vuh9v2e().s[1108]++;return rn(t.map(r=>{cov_57vuh9v2e().f[440]++;cov_57vuh9v2e().s[1109]++;return r.pipe(pe(1),lr(It));})).pipe(T(r=>{cov_57vuh9v2e().f[441]++;cov_57vuh9v2e().s[1110]++;for(let e of r){cov_57vuh9v2e().s[1111]++;if(e!==!0){cov_57vuh9v2e().b[405][0]++;cov_57vuh9v2e().s[1112]++;if(e===It){cov_57vuh9v2e().b[406][0]++;cov_57vuh9v2e().s[1113]++;return It;}else{cov_57vuh9v2e().b[406][1]++;}cov_57vuh9v2e().s[1114]++;if((cov_57vuh9v2e().b[408][0]++,e===!1)||(cov_57vuh9v2e().b[408][1]++,ms(e))){cov_57vuh9v2e().b[407][0]++;cov_57vuh9v2e().s[1115]++;return e;}else{cov_57vuh9v2e().b[407][1]++;}}else{cov_57vuh9v2e().b[405][1]++;}}cov_57vuh9v2e().s[1116]++;return!0;}),Z(r=>{cov_57vuh9v2e().f[442]++;cov_57vuh9v2e().s[1117]++;return r!==It;}),pe(1));});}function ms(t){cov_57vuh9v2e().f[443]++;cov_57vuh9v2e().s[1118]++;return(cov_57vuh9v2e().b[409][0]++,ee(t))||(cov_57vuh9v2e().b[409][1]++,t instanceof Me);}function ji(t){cov_57vuh9v2e().f[444]++;cov_57vuh9v2e().s[1119]++;return t.aborted?(cov_57vuh9v2e().b[410][0]++,g(void 0).pipe(pe(1))):(cov_57vuh9v2e().b[410][1]++,new or(r=>{cov_57vuh9v2e().f[445]++;cov_57vuh9v2e().s[1120]++;let e=()=>{cov_57vuh9v2e().f[446]++;cov_57vuh9v2e().s[1121]++;r.next(),r.complete();};cov_57vuh9v2e().s[1122]++;return t.addEventListener("abort",e),()=>{cov_57vuh9v2e().f[447]++;cov_57vuh9v2e().s[1123]++;return t.removeEventListener("abort",e);};}));}function ki(t){cov_57vuh9v2e().f[448]++;cov_57vuh9v2e().s[1124]++;return ct(ji(t));}function ys(t){cov_57vuh9v2e().f[449]++;cov_57vuh9v2e().s[1125]++;return z(r=>{cov_57vuh9v2e().f[450]++;let{targetSnapshot:e,currentSnapshot:n,guards:{canActivateChecks:i,canDeactivateChecks:o}}=(cov_57vuh9v2e().s[1126]++,r);cov_57vuh9v2e().s[1127]++;return(cov_57vuh9v2e().b[412][0]++,o.length===0)&&(cov_57vuh9v2e().b[412][1]++,i.length===0)?(cov_57vuh9v2e().b[411][0]++,g(A(d({},r),{guardsResult:!0}))):(cov_57vuh9v2e().b[411][1]++,Rs(o,e,n).pipe(z(s=>{cov_57vuh9v2e().f[451]++;cov_57vuh9v2e().s[1128]++;return(cov_57vuh9v2e().b[414][0]++,s)&&(cov_57vuh9v2e().b[414][1]++,ds(s))?(cov_57vuh9v2e().b[413][0]++,Ss(e,i,t)):(cov_57vuh9v2e().b[413][1]++,g(s));}),T(s=>{cov_57vuh9v2e().f[452]++;cov_57vuh9v2e().s[1129]++;return A(d({},r),{guardsResult:s});})));});}function Rs(t,r,e){cov_57vuh9v2e().f[453]++;cov_57vuh9v2e().s[1130]++;return M(t).pipe(z(n=>{cov_57vuh9v2e().f[454]++;cov_57vuh9v2e().s[1131]++;return Ms(n.component,n.route,e,r);}),J(n=>{cov_57vuh9v2e().f[455]++;cov_57vuh9v2e().s[1132]++;return n!==!0;},!0));}function Ss(t,r,e){cov_57vuh9v2e().f[456]++;cov_57vuh9v2e().s[1133]++;return M(r).pipe(Oe(n=>{cov_57vuh9v2e().f[457]++;cov_57vuh9v2e().s[1134]++;return cr(Cs(n.route.parent,e),ws(n.route,e),bs(t,n.path),Es(t,n.route));}),J(n=>{cov_57vuh9v2e().f[458]++;cov_57vuh9v2e().s[1135]++;return n!==!0;},!0));}function ws(t,r){cov_57vuh9v2e().f[459]++;cov_57vuh9v2e().s[1136]++;return(cov_57vuh9v2e().b[415][0]++,t!==null)&&(cov_57vuh9v2e().b[415][1]++,r)&&(cov_57vuh9v2e().b[415][2]++,r(new zt(t))),g(!0);}function Cs(t,r){cov_57vuh9v2e().f[460]++;cov_57vuh9v2e().s[1137]++;return(cov_57vuh9v2e().b[416][0]++,t!==null)&&(cov_57vuh9v2e().b[416][1]++,r)&&(cov_57vuh9v2e().b[416][2]++,r(new Ht(t))),g(!0);}function Es(t,r){cov_57vuh9v2e().f[461]++;let e=(cov_57vuh9v2e().s[1138]++,r.routeConfig?(cov_57vuh9v2e().b[417][0]++,r.routeConfig.canActivate):(cov_57vuh9v2e().b[417][1]++,null));cov_57vuh9v2e().s[1139]++;if((cov_57vuh9v2e().b[419][0]++,!e)||(cov_57vuh9v2e().b[419][1]++,e.length===0)){cov_57vuh9v2e().b[418][0]++;cov_57vuh9v2e().s[1140]++;return g(!0);}else{cov_57vuh9v2e().b[418][1]++;}let n=(cov_57vuh9v2e().s[1141]++,e.map(i=>{cov_57vuh9v2e().f[462]++;cov_57vuh9v2e().s[1142]++;return st(()=>{cov_57vuh9v2e().f[463]++;let o=(cov_57vuh9v2e().s[1143]++,r._environmentInjector),s=(cov_57vuh9v2e().s[1144]++,Te(i,o)),a=(cov_57vuh9v2e().s[1145]++,fs(s)?(cov_57vuh9v2e().b[420][0]++,s.canActivate(r,t)):(cov_57vuh9v2e().b[420][1]++,_(o,()=>{cov_57vuh9v2e().f[464]++;cov_57vuh9v2e().s[1146]++;return s(r,t);})));cov_57vuh9v2e().s[1147]++;return de(a).pipe(J());});}));cov_57vuh9v2e().s[1148]++;return g(n).pipe(Ie());}function bs(t,r){cov_57vuh9v2e().f[465]++;let e=(cov_57vuh9v2e().s[1149]++,r[r.length-1]),i=(cov_57vuh9v2e().s[1150]++,r.slice(0,r.length-1).reverse().map(o=>{cov_57vuh9v2e().f[466]++;cov_57vuh9v2e().s[1151]++;return cs(o);}).filter(o=>{cov_57vuh9v2e().f[467]++;cov_57vuh9v2e().s[1152]++;return o!==null;}).map(o=>{cov_57vuh9v2e().f[468]++;cov_57vuh9v2e().s[1153]++;return st(()=>{cov_57vuh9v2e().f[469]++;let s=(cov_57vuh9v2e().s[1154]++,o.guards.map(a=>{cov_57vuh9v2e().f[470]++;let c=(cov_57vuh9v2e().s[1155]++,o.node._environmentInjector),u=(cov_57vuh9v2e().s[1156]++,Te(a,c)),l=(cov_57vuh9v2e().s[1157]++,ps(u)?(cov_57vuh9v2e().b[421][0]++,u.canActivateChild(e,t)):(cov_57vuh9v2e().b[421][1]++,_(c,()=>{cov_57vuh9v2e().f[471]++;cov_57vuh9v2e().s[1158]++;return u(e,t);})));cov_57vuh9v2e().s[1159]++;return de(l).pipe(J());}));cov_57vuh9v2e().s[1160]++;return g(s).pipe(Ie());});}));cov_57vuh9v2e().s[1161]++;return g(i).pipe(Ie());}function Ms(t,r,e,n){cov_57vuh9v2e().f[472]++;let i=(cov_57vuh9v2e().s[1162]++,(cov_57vuh9v2e().b[423][0]++,r)&&(cov_57vuh9v2e().b[423][1]++,r.routeConfig)?(cov_57vuh9v2e().b[422][0]++,r.routeConfig.canDeactivate):(cov_57vuh9v2e().b[422][1]++,null));cov_57vuh9v2e().s[1163]++;if((cov_57vuh9v2e().b[425][0]++,!i)||(cov_57vuh9v2e().b[425][1]++,i.length===0)){cov_57vuh9v2e().b[424][0]++;cov_57vuh9v2e().s[1164]++;return g(!0);}else{cov_57vuh9v2e().b[424][1]++;}let o=(cov_57vuh9v2e().s[1165]++,i.map(s=>{cov_57vuh9v2e().f[473]++;let a=(cov_57vuh9v2e().s[1166]++,r._environmentInjector),c=(cov_57vuh9v2e().s[1167]++,Te(s,a)),u=(cov_57vuh9v2e().s[1168]++,gs(c)?(cov_57vuh9v2e().b[426][0]++,c.canDeactivate(t,r,e,n)):(cov_57vuh9v2e().b[426][1]++,_(a,()=>{cov_57vuh9v2e().f[474]++;cov_57vuh9v2e().s[1169]++;return c(t,r,e,n);})));cov_57vuh9v2e().s[1170]++;return de(u).pipe(J());}));cov_57vuh9v2e().s[1171]++;return g(o).pipe(Ie());}function Is(t,r,e,n,i){cov_57vuh9v2e().f[475]++;let o=(cov_57vuh9v2e().s[1172]++,r.canLoad);cov_57vuh9v2e().s[1173]++;if((cov_57vuh9v2e().b[428][0]++,o===void 0)||(cov_57vuh9v2e().b[428][1]++,o.length===0)){cov_57vuh9v2e().b[427][0]++;cov_57vuh9v2e().s[1174]++;return g(!0);}else{cov_57vuh9v2e().b[427][1]++;}let s=(cov_57vuh9v2e().s[1175]++,o.map(a=>{cov_57vuh9v2e().f[476]++;let c=(cov_57vuh9v2e().s[1176]++,Te(a,t)),u=(cov_57vuh9v2e().s[1177]++,hs(c)?(cov_57vuh9v2e().b[429][0]++,c.canLoad(r,e)):(cov_57vuh9v2e().b[429][1]++,_(t,()=>{cov_57vuh9v2e().f[477]++;cov_57vuh9v2e().s[1178]++;return c(r,e);}))),l=(cov_57vuh9v2e().s[1179]++,de(u));cov_57vuh9v2e().s[1180]++;return i?(cov_57vuh9v2e().b[430][0]++,l.pipe(ki(i))):(cov_57vuh9v2e().b[430][1]++,l);}));cov_57vuh9v2e().s[1181]++;return g(s).pipe(Ie(),Hi(n));}function Hi(t){cov_57vuh9v2e().f[478]++;cov_57vuh9v2e().s[1182]++;return ir(k(r=>{cov_57vuh9v2e().f[479]++;cov_57vuh9v2e().s[1183]++;if(typeof r!="boolean"){cov_57vuh9v2e().b[431][0]++;cov_57vuh9v2e().s[1184]++;throw Vt(t,r);}else{cov_57vuh9v2e().b[431][1]++;}}),T(r=>{cov_57vuh9v2e().f[480]++;cov_57vuh9v2e().s[1185]++;return r===!0;}));}function Ts(t,r,e,n,i,o){cov_57vuh9v2e().f[481]++;let s=(cov_57vuh9v2e().s[1186]++,r.canMatch);cov_57vuh9v2e().s[1187]++;if((cov_57vuh9v2e().b[433][0]++,!s)||(cov_57vuh9v2e().b[433][1]++,s.length===0)){cov_57vuh9v2e().b[432][0]++;cov_57vuh9v2e().s[1188]++;return g(!0);}else{cov_57vuh9v2e().b[432][1]++;}let a=(cov_57vuh9v2e().s[1189]++,s.map(c=>{cov_57vuh9v2e().f[482]++;let u=(cov_57vuh9v2e().s[1190]++,Te(c,t)),l=(cov_57vuh9v2e().s[1191]++,vs(u)?(cov_57vuh9v2e().b[434][0]++,u.canMatch(r,e,i)):(cov_57vuh9v2e().b[434][1]++,_(t,()=>{cov_57vuh9v2e().f[483]++;cov_57vuh9v2e().s[1192]++;return u(r,e,i);})));cov_57vuh9v2e().s[1193]++;return de(l).pipe(ki(o));}));cov_57vuh9v2e().s[1194]++;return g(a).pipe(Ie(),Hi(n));}cov_57vuh9v2e().s[1195]++;cov_57vuh9v2e().s[1197]++;var Q=class t extends Error{segmentGroup;constructor(r){cov_57vuh9v2e().f[484]++;cov_57vuh9v2e().s[1196]++;super(),this.segmentGroup=(cov_57vuh9v2e().b[435][0]++,r)||(cov_57vuh9v2e().b[435][1]++,null),Object.setPrototypeOf(this,t.prototype);}},Xe=class t extends Error{urlTree;constructor(r){cov_57vuh9v2e().f[485]++;cov_57vuh9v2e().s[1198]++;super(),this.urlTree=r,Object.setPrototypeOf(this,t.prototype);}};function Ds(t){cov_57vuh9v2e().f[486]++;cov_57vuh9v2e().s[1199]++;throw new S(4e3,!1);}function As(t){cov_57vuh9v2e().f[487]++;cov_57vuh9v2e().s[1200]++;throw Ui(!1,I.GuardRejected);}cov_57vuh9v2e().s[1201]++;var Hn=class{urlSerializer;urlTree;constructor(r,e){cov_57vuh9v2e().f[488]++;cov_57vuh9v2e().s[1202]++;this.urlSerializer=r,this.urlTree=e;}async lineralizeSegments(r,e){cov_57vuh9v2e().f[489]++;let n=(cov_57vuh9v2e().s[1203]++,[]),i=(cov_57vuh9v2e().s[1204]++,e.root);cov_57vuh9v2e().s[1205]++;for(;;){cov_57vuh9v2e().s[1206]++;if(n=n.concat(i.segments),i.numberOfChildren===0){cov_57vuh9v2e().b[436][0]++;cov_57vuh9v2e().s[1207]++;return n;}else{cov_57vuh9v2e().b[436][1]++;}cov_57vuh9v2e().s[1208]++;if((cov_57vuh9v2e().b[438][0]++,i.numberOfChildren>1)||(cov_57vuh9v2e().b[438][1]++,!i.children[p])){cov_57vuh9v2e().b[437][0]++;cov_57vuh9v2e().s[1209]++;throw Ds(`${r.redirectTo}`);}else{cov_57vuh9v2e().b[437][1]++;}cov_57vuh9v2e().s[1210]++;i=i.children[p];}}async applyRedirectCommands(r,e,n,i,o){cov_57vuh9v2e().f[490]++;let s=(cov_57vuh9v2e().s[1211]++,await _s(e,i,o));cov_57vuh9v2e().s[1212]++;if(s instanceof D){cov_57vuh9v2e().b[439][0]++;cov_57vuh9v2e().s[1213]++;throw new Xe(s);}else{cov_57vuh9v2e().b[439][1]++;}let a=(cov_57vuh9v2e().s[1214]++,this.applyRedirectCreateUrlTree(s,this.urlSerializer.parse(s),r,n));cov_57vuh9v2e().s[1215]++;if(s[0]==="/"){cov_57vuh9v2e().b[440][0]++;cov_57vuh9v2e().s[1216]++;throw new Xe(a);}else{cov_57vuh9v2e().b[440][1]++;}cov_57vuh9v2e().s[1217]++;return a;}applyRedirectCreateUrlTree(r,e,n,i){cov_57vuh9v2e().f[491]++;let o=(cov_57vuh9v2e().s[1218]++,this.createSegmentGroup(r,e.root,n,i));cov_57vuh9v2e().s[1219]++;return new D(o,this.createQueryParams(e.queryParams,this.urlTree.queryParams),e.fragment);}createQueryParams(r,e){cov_57vuh9v2e().f[492]++;let n=(cov_57vuh9v2e().s[1220]++,{});cov_57vuh9v2e().s[1221]++;return Object.entries(r).forEach(([i,o])=>{cov_57vuh9v2e().f[493]++;cov_57vuh9v2e().s[1222]++;if((cov_57vuh9v2e().b[442][0]++,typeof o=="string")&&(cov_57vuh9v2e().b[442][1]++,o[0]===":")){cov_57vuh9v2e().b[441][0]++;let a=(cov_57vuh9v2e().s[1223]++,o.substring(1));cov_57vuh9v2e().s[1224]++;n[i]=e[a];}else{cov_57vuh9v2e().b[441][1]++;cov_57vuh9v2e().s[1225]++;n[i]=o;}}),n;}createSegmentGroup(r,e,n,i){cov_57vuh9v2e().f[494]++;let o=(cov_57vuh9v2e().s[1226]++,this.createSegments(r,e.segments,n,i)),s=(cov_57vuh9v2e().s[1227]++,{});cov_57vuh9v2e().s[1228]++;return Object.entries(e.children).forEach(([a,c])=>{cov_57vuh9v2e().f[495]++;cov_57vuh9v2e().s[1229]++;s[a]=this.createSegmentGroup(r,c,n,i);}),new v(o,s);}createSegments(r,e,n,i){cov_57vuh9v2e().f[496]++;cov_57vuh9v2e().s[1230]++;return e.map(o=>{cov_57vuh9v2e().f[497]++;cov_57vuh9v2e().s[1231]++;return o.path[0]===":"?(cov_57vuh9v2e().b[443][0]++,this.findPosParam(r,o,i)):(cov_57vuh9v2e().b[443][1]++,this.findOrReturn(o,n));});}findPosParam(r,e,n){cov_57vuh9v2e().f[498]++;let i=(cov_57vuh9v2e().s[1232]++,n[e.path.substring(1)]);cov_57vuh9v2e().s[1233]++;if(!i){cov_57vuh9v2e().b[444][0]++;cov_57vuh9v2e().s[1234]++;throw new S(4001,!1);}else{cov_57vuh9v2e().b[444][1]++;}cov_57vuh9v2e().s[1235]++;return i;}findOrReturn(r,e){cov_57vuh9v2e().f[499]++;let n=(cov_57vuh9v2e().s[1236]++,0);cov_57vuh9v2e().s[1237]++;for(let i of e){cov_57vuh9v2e().s[1238]++;if(i.path===r.path){cov_57vuh9v2e().b[445][0]++;cov_57vuh9v2e().s[1239]++;return e.splice(n),i;}else{cov_57vuh9v2e().b[445][1]++;}cov_57vuh9v2e().s[1240]++;n++;}cov_57vuh9v2e().s[1241]++;return r;}};function _s(t,r,e){cov_57vuh9v2e().f[500]++;cov_57vuh9v2e().s[1242]++;if(typeof t=="string"){cov_57vuh9v2e().b[446][0]++;cov_57vuh9v2e().s[1243]++;return Promise.resolve(t);}else{cov_57vuh9v2e().b[446][1]++;}let n=(cov_57vuh9v2e().s[1244]++,t);cov_57vuh9v2e().s[1245]++;return _t(de(_(e,()=>{cov_57vuh9v2e().f[501]++;cov_57vuh9v2e().s[1246]++;return n(r);})));}function Os(t,r){cov_57vuh9v2e().f[502]++;cov_57vuh9v2e().s[1247]++;return(cov_57vuh9v2e().b[447][0]++,t.providers)&&(cov_57vuh9v2e().b[447][1]++,!t._injector)&&(cov_57vuh9v2e().b[447][2]++,t._injector=pt(t.providers,r,`Route: ${t.path}`)),(cov_57vuh9v2e().b[448][0]++,t._injector)??(cov_57vuh9v2e().b[448][1]++,r);}function q(t){cov_57vuh9v2e().f[503]++;cov_57vuh9v2e().s[1248]++;return(cov_57vuh9v2e().b[449][0]++,t.outlet)||(cov_57vuh9v2e().b[449][1]++,p);}function Ns(t,r){cov_57vuh9v2e().f[504]++;let e=(cov_57vuh9v2e().s[1249]++,t.filter(n=>{cov_57vuh9v2e().f[505]++;cov_57vuh9v2e().s[1250]++;return q(n)===r;}));cov_57vuh9v2e().s[1251]++;return e.push(...t.filter(n=>{cov_57vuh9v2e().f[506]++;cov_57vuh9v2e().s[1252]++;return q(n)!==r;})),e;}var $n=(cov_57vuh9v2e().s[1253]++,{matched:!1,consumedSegments:[],remainingSegments:[],parameters:{},positionalParamSegments:{}});function $i(t){cov_57vuh9v2e().f[507]++;cov_57vuh9v2e().s[1254]++;return{routeConfig:t.routeConfig,url:t.url,params:t.params,queryParams:t.queryParams,fragment:t.fragment,data:t.data,outlet:t.outlet,title:t.title,paramMap:t.paramMap,queryParamMap:t.queryParamMap};}function Ps(t,r,e,n,i,o,s){cov_57vuh9v2e().f[508]++;let a=(cov_57vuh9v2e().s[1255]++,zi(t,r,e));cov_57vuh9v2e().s[1256]++;if(!a.matched){cov_57vuh9v2e().b[450][0]++;cov_57vuh9v2e().s[1257]++;return g(a);}else{cov_57vuh9v2e().b[450][1]++;}let c=(cov_57vuh9v2e().s[1258]++,$i(o(a)));cov_57vuh9v2e().s[1259]++;return n=Os(r,n),Ts(n,r,e,i,c,s).pipe(T(u=>{cov_57vuh9v2e().f[509]++;cov_57vuh9v2e().s[1260]++;return u===!0?(cov_57vuh9v2e().b[451][0]++,a):(cov_57vuh9v2e().b[451][1]++,d({},$n));}));}function zi(t,r,e){cov_57vuh9v2e().f[510]++;cov_57vuh9v2e().s[1261]++;if(r.path===""){cov_57vuh9v2e().b[452][0]++;cov_57vuh9v2e().s[1262]++;return(cov_57vuh9v2e().b[454][0]++,r.pathMatch==="full")&&((cov_57vuh9v2e().b[454][1]++,t.hasChildren())||(cov_57vuh9v2e().b[454][2]++,e.length>0))?(cov_57vuh9v2e().b[453][0]++,d({},$n)):(cov_57vuh9v2e().b[453][1]++,{matched:!0,consumedSegments:[],remainingSegments:e,parameters:{},positionalParamSegments:{}});}else{cov_57vuh9v2e().b[452][1]++;}let i=(cov_57vuh9v2e().s[1263]++,((cov_57vuh9v2e().b[455][0]++,r.matcher)||(cov_57vuh9v2e().b[455][1]++,hi))(e,t,r));cov_57vuh9v2e().s[1264]++;if(!i){cov_57vuh9v2e().b[456][0]++;cov_57vuh9v2e().s[1265]++;return d({},$n);}else{cov_57vuh9v2e().b[456][1]++;}let o=(cov_57vuh9v2e().s[1266]++,{});cov_57vuh9v2e().s[1267]++;Object.entries((cov_57vuh9v2e().b[457][0]++,i.posParams)??(cov_57vuh9v2e().b[457][1]++,{})).forEach(([a,c])=>{cov_57vuh9v2e().f[511]++;cov_57vuh9v2e().s[1268]++;o[a]=c.path;});let s=(cov_57vuh9v2e().s[1269]++,i.consumed.length>0?(cov_57vuh9v2e().b[458][0]++,d(d({},o),i.consumed[i.consumed.length-1].parameters)):(cov_57vuh9v2e().b[458][1]++,o));cov_57vuh9v2e().s[1270]++;return{matched:!0,consumedSegments:i.consumed,remainingSegments:e.slice(i.consumed.length),parameters:s,positionalParamSegments:(cov_57vuh9v2e().b[459][0]++,i.posParams)??(cov_57vuh9v2e().b[459][1]++,{})};}function li(t,r,e,n){cov_57vuh9v2e().f[512]++;cov_57vuh9v2e().s[1271]++;return(cov_57vuh9v2e().b[461][0]++,e.length>0)&&(cov_57vuh9v2e().b[461][1]++,xs(t,e,n))?(cov_57vuh9v2e().b[460][0]++,{segmentGroup:new v(r,Ls(n,new v(e,t.children))),slicedSegments:[]}):(cov_57vuh9v2e().b[460][1]++,(cov_57vuh9v2e().b[463][0]++,e.length===0)&&(cov_57vuh9v2e().b[463][1]++,js(t,e,n))?(cov_57vuh9v2e().b[462][0]++,{segmentGroup:new v(t.segments,Us(t,e,n,t.children)),slicedSegments:e}):(cov_57vuh9v2e().b[462][1]++,{segmentGroup:new v(t.segments,t.children),slicedSegments:e}));}function Us(t,r,e,n){cov_57vuh9v2e().f[513]++;let i=(cov_57vuh9v2e().s[1272]++,{});cov_57vuh9v2e().s[1273]++;for(let o of e){cov_57vuh9v2e().s[1274]++;if((cov_57vuh9v2e().b[465][0]++,Yt(t,r,o))&&(cov_57vuh9v2e().b[465][1]++,!n[q(o)])){cov_57vuh9v2e().b[464][0]++;let s=(cov_57vuh9v2e().s[1275]++,new v([],{}));cov_57vuh9v2e().s[1276]++;i[q(o)]=s;}else{cov_57vuh9v2e().b[464][1]++;}}cov_57vuh9v2e().s[1277]++;return d(d({},n),i);}function Ls(t,r){cov_57vuh9v2e().f[514]++;let e=(cov_57vuh9v2e().s[1278]++,{});cov_57vuh9v2e().s[1279]++;e[p]=r;cov_57vuh9v2e().s[1280]++;for(let n of t){cov_57vuh9v2e().s[1281]++;if((cov_57vuh9v2e().b[467][0]++,n.path==="")&&(cov_57vuh9v2e().b[467][1]++,q(n)!==p)){cov_57vuh9v2e().b[466][0]++;let i=(cov_57vuh9v2e().s[1282]++,new v([],{}));cov_57vuh9v2e().s[1283]++;e[q(n)]=i;}else{cov_57vuh9v2e().b[466][1]++;}}cov_57vuh9v2e().s[1284]++;return e;}function xs(t,r,e){cov_57vuh9v2e().f[515]++;cov_57vuh9v2e().s[1285]++;return e.some(n=>{cov_57vuh9v2e().f[516]++;cov_57vuh9v2e().s[1286]++;return(cov_57vuh9v2e().b[468][0]++,Yt(t,r,n))&&(cov_57vuh9v2e().b[468][1]++,q(n)!==p);});}function js(t,r,e){cov_57vuh9v2e().f[517]++;cov_57vuh9v2e().s[1287]++;return e.some(n=>{cov_57vuh9v2e().f[518]++;cov_57vuh9v2e().s[1288]++;return Yt(t,r,n);});}function Yt(t,r,e){cov_57vuh9v2e().f[519]++;cov_57vuh9v2e().s[1289]++;return((cov_57vuh9v2e().b[470][0]++,t.hasChildren())||(cov_57vuh9v2e().b[470][1]++,r.length>0))&&(cov_57vuh9v2e().b[470][2]++,e.pathMatch==="full")?(cov_57vuh9v2e().b[469][0]++,!1):(cov_57vuh9v2e().b[469][1]++,e.path==="");}function ks(t,r,e){cov_57vuh9v2e().f[520]++;cov_57vuh9v2e().s[1290]++;return(cov_57vuh9v2e().b[471][0]++,r.length===0)&&(cov_57vuh9v2e().b[471][1]++,!t.children[e]);}cov_57vuh9v2e().s[1291]++;var zn=class{};async function Hs(t,r,e,n,i,o,s=(cov_57vuh9v2e().b[472][0]++,"emptyOnly"),a){cov_57vuh9v2e().f[521]++;cov_57vuh9v2e().s[1292]++;return new Fn(t,r,e,n,i,s,o,a).recognize();}cov_57vuh9v2e().s[1294]++;var $s=(cov_57vuh9v2e().s[1293]++,31),Fn=class{injector;configLoader;rootComponentType;config;urlTree;paramsInheritanceStrategy;urlSerializer;abortSignal;applyRedirects;absoluteRedirectCount=(cov_57vuh9v2e().s[1295]++,0);allowRedirects=(cov_57vuh9v2e().s[1296]++,!0);constructor(r,e,n,i,o,s,a,c){cov_57vuh9v2e().f[522]++;cov_57vuh9v2e().s[1297]++;this.injector=r,this.configLoader=e,this.rootComponentType=n,this.config=i,this.urlTree=o,this.paramsInheritanceStrategy=s,this.urlSerializer=a,this.abortSignal=c,this.applyRedirects=new Hn(this.urlSerializer,this.urlTree);}noMatchError(r){cov_57vuh9v2e().f[523]++;cov_57vuh9v2e().s[1298]++;return new S(4002,`'${r.segmentGroup}'`);}async recognize(){cov_57vuh9v2e().f[524]++;let r=(cov_57vuh9v2e().s[1299]++,li(this.urlTree.root,[],[],this.config).segmentGroup),{children:e,rootSnapshot:n}=(cov_57vuh9v2e().s[1300]++,await this.match(r)),i=(cov_57vuh9v2e().s[1301]++,new O(n,e)),o=(cov_57vuh9v2e().s[1302]++,new Ze("",i)),s=(cov_57vuh9v2e().s[1303]++,Ei(n,[],this.urlTree.queryParams,this.urlTree.fragment));cov_57vuh9v2e().s[1304]++;return s.queryParams=this.urlTree.queryParams,o.url=this.urlSerializer.serialize(s),{state:o,tree:s};}async match(r){cov_57vuh9v2e().f[525]++;let e=(cov_57vuh9v2e().s[1305]++,new be([],Object.freeze({}),Object.freeze(d({},this.urlTree.queryParams)),this.urlTree.fragment,Object.freeze({}),p,this.rootComponentType,null,{},this.injector));cov_57vuh9v2e().s[1306]++;try{cov_57vuh9v2e().s[1307]++;return{children:await this.processSegmentGroup(this.injector,this.config,r,p,e),rootSnapshot:e};}catch(n){cov_57vuh9v2e().s[1308]++;if(n instanceof Xe){cov_57vuh9v2e().b[473][0]++;cov_57vuh9v2e().s[1309]++;return this.urlTree=n.urlTree,this.match(n.urlTree.root);}else{cov_57vuh9v2e().b[473][1]++;}cov_57vuh9v2e().s[1310]++;throw n instanceof Q?(cov_57vuh9v2e().b[474][0]++,this.noMatchError(n)):(cov_57vuh9v2e().b[474][1]++,n);}}async processSegmentGroup(r,e,n,i,o){cov_57vuh9v2e().f[526]++;cov_57vuh9v2e().s[1311]++;if((cov_57vuh9v2e().b[476][0]++,n.segments.length===0)&&(cov_57vuh9v2e().b[476][1]++,n.hasChildren())){cov_57vuh9v2e().b[475][0]++;cov_57vuh9v2e().s[1312]++;return this.processChildren(r,e,n,o);}else{cov_57vuh9v2e().b[475][1]++;}let s=(cov_57vuh9v2e().s[1313]++,await this.processSegment(r,e,n,n.segments,i,!0,o));cov_57vuh9v2e().s[1314]++;return s instanceof O?(cov_57vuh9v2e().b[477][0]++,[s]):(cov_57vuh9v2e().b[477][1]++,[]);}async processChildren(r,e,n,i){cov_57vuh9v2e().f[527]++;let o=(cov_57vuh9v2e().s[1315]++,[]);cov_57vuh9v2e().s[1316]++;for(let c of Object.keys(n.children)){cov_57vuh9v2e().s[1317]++;c==="primary"?(cov_57vuh9v2e().b[478][0]++,o.unshift(c)):(cov_57vuh9v2e().b[478][1]++,o.push(c));}let s=(cov_57vuh9v2e().s[1318]++,[]);cov_57vuh9v2e().s[1319]++;for(let c of o){let u=(cov_57vuh9v2e().s[1320]++,n.children[c]),l=(cov_57vuh9v2e().s[1321]++,Ns(e,c)),f=(cov_57vuh9v2e().s[1322]++,await this.processSegmentGroup(r,l,u,c,i));cov_57vuh9v2e().s[1323]++;s.push(...f);}let a=(cov_57vuh9v2e().s[1324]++,Fi(s));cov_57vuh9v2e().s[1325]++;return zs(a),a;}async processSegment(r,e,n,i,o,s,a){cov_57vuh9v2e().f[528]++;cov_57vuh9v2e().s[1326]++;for(let c of e){cov_57vuh9v2e().s[1327]++;try{cov_57vuh9v2e().s[1328]++;return await this.processSegmentAgainstRoute((cov_57vuh9v2e().b[479][0]++,c._injector)??(cov_57vuh9v2e().b[479][1]++,r),e,c,n,i,o,s,a);}catch(u){cov_57vuh9v2e().s[1329]++;if((cov_57vuh9v2e().b[481][0]++,u instanceof Q)||(cov_57vuh9v2e().b[481][1]++,xi(u))){cov_57vuh9v2e().b[480][0]++;cov_57vuh9v2e().s[1330]++;continue;}else{cov_57vuh9v2e().b[480][1]++;}cov_57vuh9v2e().s[1331]++;throw u;}}cov_57vuh9v2e().s[1332]++;if(ks(n,i,o)){cov_57vuh9v2e().b[482][0]++;cov_57vuh9v2e().s[1333]++;return new zn();}else{cov_57vuh9v2e().b[482][1]++;}cov_57vuh9v2e().s[1334]++;throw new Q(n);}async processSegmentAgainstRoute(r,e,n,i,o,s,a,c){cov_57vuh9v2e().f[529]++;cov_57vuh9v2e().s[1335]++;if((cov_57vuh9v2e().b[484][0]++,q(n)!==s)&&((cov_57vuh9v2e().b[484][1]++,s===p)||(cov_57vuh9v2e().b[484][2]++,!Yt(i,o,n)))){cov_57vuh9v2e().b[483][0]++;cov_57vuh9v2e().s[1336]++;throw new Q(i);}else{cov_57vuh9v2e().b[483][1]++;}cov_57vuh9v2e().s[1337]++;if(n.redirectTo===void 0){cov_57vuh9v2e().b[485][0]++;cov_57vuh9v2e().s[1338]++;return this.matchSegmentAgainstRoute(r,i,n,o,s,c);}else{cov_57vuh9v2e().b[485][1]++;}cov_57vuh9v2e().s[1339]++;if((cov_57vuh9v2e().b[487][0]++,this.allowRedirects)&&(cov_57vuh9v2e().b[487][1]++,a)){cov_57vuh9v2e().b[486][0]++;cov_57vuh9v2e().s[1340]++;return this.expandSegmentAgainstRouteUsingRedirect(r,i,e,n,o,s,c);}else{cov_57vuh9v2e().b[486][1]++;}cov_57vuh9v2e().s[1341]++;throw new Q(i);}async expandSegmentAgainstRouteUsingRedirect(r,e,n,i,o,s,a){cov_57vuh9v2e().f[530]++;let{matched:c,parameters:u,consumedSegments:l,positionalParamSegments:f,remainingSegments:R}=(cov_57vuh9v2e().s[1342]++,zi(e,i,o));cov_57vuh9v2e().s[1343]++;if(!c){cov_57vuh9v2e().b[488][0]++;cov_57vuh9v2e().s[1344]++;throw new Q(e);}else{cov_57vuh9v2e().b[488][1]++;}cov_57vuh9v2e().s[1345]++;(cov_57vuh9v2e().b[489][0]++,typeof i.redirectTo=="string")&&(cov_57vuh9v2e().b[489][1]++,i.redirectTo[0]==="/")&&(cov_57vuh9v2e().b[489][2]++,this.absoluteRedirectCount++,(cov_57vuh9v2e().b[490][0]++,this.absoluteRedirectCount>$s)&&(cov_57vuh9v2e().b[490][1]++,this.allowRedirects=!1));let ie=(cov_57vuh9v2e().s[1346]++,this.createSnapshot(r,i,o,u,a));cov_57vuh9v2e().s[1347]++;if(this.abortSignal.aborted){cov_57vuh9v2e().b[491][0]++;cov_57vuh9v2e().s[1348]++;throw new Error(this.abortSignal.reason);}else{cov_57vuh9v2e().b[491][1]++;}let W=(cov_57vuh9v2e().s[1349]++,await this.applyRedirects.applyRedirectCommands(l,i.redirectTo,f,$i(ie),r)),oe=(cov_57vuh9v2e().s[1350]++,await this.applyRedirects.lineralizeSegments(i,W));cov_57vuh9v2e().s[1351]++;return this.processSegment(r,n,e,oe.concat(R),s,!1,a);}createSnapshot(r,e,n,i,o){cov_57vuh9v2e().f[531]++;let s=(cov_57vuh9v2e().s[1352]++,new be(n,i,Object.freeze(d({},this.urlTree.queryParams)),this.urlTree.fragment,Bs(e),q(e),(cov_57vuh9v2e().b[492][0]++,e.component)??(cov_57vuh9v2e().b[492][1]++,e._loadedComponent)??(cov_57vuh9v2e().b[492][2]++,null),e,qs(e),r)),a=(cov_57vuh9v2e().s[1353]++,Vn(s,o,this.paramsInheritanceStrategy));cov_57vuh9v2e().s[1354]++;return s.params=Object.freeze(a.params),s.data=Object.freeze(a.data),s;}async matchSegmentAgainstRoute(r,e,n,i,o,s){cov_57vuh9v2e().f[532]++;cov_57vuh9v2e().s[1355]++;if(this.abortSignal.aborted){cov_57vuh9v2e().b[493][0]++;cov_57vuh9v2e().s[1356]++;throw new Error(this.abortSignal.reason);}else{cov_57vuh9v2e().b[493][1]++;}cov_57vuh9v2e().s[1357]++;let a=ot=>{cov_57vuh9v2e().f[533]++;cov_57vuh9v2e().s[1358]++;return this.createSnapshot(r,n,ot.consumedSegments,ot.parameters,s);},c=(cov_57vuh9v2e().s[1359]++,await _t(Ps(e,n,i,r,this.urlSerializer,a,this.abortSignal)));cov_57vuh9v2e().s[1360]++;if((cov_57vuh9v2e().b[495][0]++,n.path==="**")&&(cov_57vuh9v2e().b[495][1]++,e.children={}),!c?.matched){cov_57vuh9v2e().b[494][0]++;cov_57vuh9v2e().s[1361]++;throw new Q(e);}else{cov_57vuh9v2e().b[494][1]++;}cov_57vuh9v2e().s[1362]++;r=(cov_57vuh9v2e().b[496][0]++,n._injector)??(cov_57vuh9v2e().b[496][1]++,r);let{routes:u}=(cov_57vuh9v2e().s[1363]++,await this.getChildConfig(r,n,i)),l=(cov_57vuh9v2e().s[1364]++,(cov_57vuh9v2e().b[497][0]++,n._loadedInjector)??(cov_57vuh9v2e().b[497][1]++,r)),{parameters:f,consumedSegments:R,remainingSegments:ie}=(cov_57vuh9v2e().s[1365]++,c),W=(cov_57vuh9v2e().s[1366]++,this.createSnapshot(r,n,R,f,s)),{segmentGroup:oe,slicedSegments:De}=(cov_57vuh9v2e().s[1367]++,li(e,R,ie,u));cov_57vuh9v2e().s[1368]++;if((cov_57vuh9v2e().b[499][0]++,De.length===0)&&(cov_57vuh9v2e().b[499][1]++,oe.hasChildren())){cov_57vuh9v2e().b[498][0]++;let ot=(cov_57vuh9v2e().s[1369]++,await this.processChildren(l,u,oe,W));cov_57vuh9v2e().s[1370]++;return new O(W,ot);}else{cov_57vuh9v2e().b[498][1]++;}cov_57vuh9v2e().s[1371]++;if((cov_57vuh9v2e().b[501][0]++,u.length===0)&&(cov_57vuh9v2e().b[501][1]++,De.length===0)){cov_57vuh9v2e().b[500][0]++;cov_57vuh9v2e().s[1372]++;return new O(W,[]);}else{cov_57vuh9v2e().b[500][1]++;}let tn=(cov_57vuh9v2e().s[1373]++,q(n)===o),Ae=(cov_57vuh9v2e().s[1374]++,await this.processSegment(l,u,oe,De,tn?(cov_57vuh9v2e().b[502][0]++,p):(cov_57vuh9v2e().b[502][1]++,o),!0,W));cov_57vuh9v2e().s[1375]++;return new O(W,Ae instanceof O?(cov_57vuh9v2e().b[503][0]++,[Ae]):(cov_57vuh9v2e().b[503][1]++,[]));}async getChildConfig(r,e,n){cov_57vuh9v2e().f[534]++;cov_57vuh9v2e().s[1376]++;if(e.children){cov_57vuh9v2e().b[504][0]++;cov_57vuh9v2e().s[1377]++;return{routes:e.children,injector:r};}else{cov_57vuh9v2e().b[504][1]++;}cov_57vuh9v2e().s[1378]++;if(e.loadChildren){cov_57vuh9v2e().b[505][0]++;cov_57vuh9v2e().s[1379]++;if(e._loadedRoutes!==void 0){cov_57vuh9v2e().b[506][0]++;let o=(cov_57vuh9v2e().s[1380]++,e._loadedNgModuleFactory);cov_57vuh9v2e().s[1381]++;return(cov_57vuh9v2e().b[507][0]++,o)&&(cov_57vuh9v2e().b[507][1]++,!e._loadedInjector)&&(cov_57vuh9v2e().b[507][2]++,e._loadedInjector=o.create(r).injector),{routes:e._loadedRoutes,injector:e._loadedInjector};}else{cov_57vuh9v2e().b[506][1]++;}cov_57vuh9v2e().s[1382]++;if(this.abortSignal.aborted){cov_57vuh9v2e().b[508][0]++;cov_57vuh9v2e().s[1383]++;throw new Error(this.abortSignal.reason);}else{cov_57vuh9v2e().b[508][1]++;}cov_57vuh9v2e().s[1384]++;if(await _t(Is(r,e,n,this.urlSerializer,this.abortSignal))){cov_57vuh9v2e().b[509][0]++;let o=(cov_57vuh9v2e().s[1385]++,await this.configLoader.loadChildren(r,e));cov_57vuh9v2e().s[1386]++;return e._loadedRoutes=o.routes,e._loadedInjector=o.injector,e._loadedNgModuleFactory=o.factory,o;}else{cov_57vuh9v2e().b[509][1]++;}cov_57vuh9v2e().s[1387]++;throw As(e);}else{cov_57vuh9v2e().b[505][1]++;}cov_57vuh9v2e().s[1388]++;return{routes:[],injector:r};}};function zs(t){cov_57vuh9v2e().f[535]++;cov_57vuh9v2e().s[1389]++;t.sort((r,e)=>{cov_57vuh9v2e().f[536]++;cov_57vuh9v2e().s[1390]++;return r.value.outlet===p?(cov_57vuh9v2e().b[510][0]++,-1):(cov_57vuh9v2e().b[510][1]++,e.value.outlet===p?(cov_57vuh9v2e().b[511][0]++,1):(cov_57vuh9v2e().b[511][1]++,r.value.outlet.localeCompare(e.value.outlet)));});}function Fs(t){cov_57vuh9v2e().f[537]++;let r=(cov_57vuh9v2e().s[1391]++,t.value.routeConfig);cov_57vuh9v2e().s[1392]++;return(cov_57vuh9v2e().b[512][0]++,r)&&(cov_57vuh9v2e().b[512][1]++,r.path==="");}function Fi(t){cov_57vuh9v2e().f[538]++;let r=(cov_57vuh9v2e().s[1393]++,[]),e=(cov_57vuh9v2e().s[1394]++,new Set());cov_57vuh9v2e().s[1395]++;for(let n of t){cov_57vuh9v2e().s[1396]++;if(!Fs(n)){cov_57vuh9v2e().b[513][0]++;cov_57vuh9v2e().s[1397]++;r.push(n);cov_57vuh9v2e().s[1398]++;continue;}else{cov_57vuh9v2e().b[513][1]++;}let i=(cov_57vuh9v2e().s[1399]++,r.find(o=>{cov_57vuh9v2e().f[539]++;cov_57vuh9v2e().s[1400]++;return n.value.routeConfig===o.value.routeConfig;}));cov_57vuh9v2e().s[1401]++;i!==void 0?(cov_57vuh9v2e().b[514][0]++,i.children.push(...n.children),e.add(i)):(cov_57vuh9v2e().b[514][1]++,r.push(n));}cov_57vuh9v2e().s[1402]++;for(let n of e){let i=(cov_57vuh9v2e().s[1403]++,Fi(n.children));cov_57vuh9v2e().s[1404]++;r.push(new O(n.value,i));}cov_57vuh9v2e().s[1405]++;return r.filter(n=>{cov_57vuh9v2e().f[540]++;cov_57vuh9v2e().s[1406]++;return!e.has(n);});}function Bs(t){cov_57vuh9v2e().f[541]++;cov_57vuh9v2e().s[1407]++;return(cov_57vuh9v2e().b[515][0]++,t.data)||(cov_57vuh9v2e().b[515][1]++,{});}function qs(t){cov_57vuh9v2e().f[542]++;cov_57vuh9v2e().s[1408]++;return(cov_57vuh9v2e().b[516][0]++,t.resolve)||(cov_57vuh9v2e().b[516][1]++,{});}function Vs(t,r,e,n,i,o,s){cov_57vuh9v2e().f[543]++;cov_57vuh9v2e().s[1409]++;return z(async a=>{cov_57vuh9v2e().f[544]++;let{state:c,tree:u}=(cov_57vuh9v2e().s[1410]++,await Hs(t,r,e,n,a.extractedUrl,i,o,s));cov_57vuh9v2e().s[1411]++;return A(d({},a),{targetSnapshot:c,urlAfterRedirects:u});});}function Gs(t){cov_57vuh9v2e().f[545]++;cov_57vuh9v2e().s[1412]++;return z(r=>{cov_57vuh9v2e().f[546]++;let{targetSnapshot:e,guards:{canActivateChecks:n}}=(cov_57vuh9v2e().s[1413]++,r);cov_57vuh9v2e().s[1414]++;if(!n.length){cov_57vuh9v2e().b[517][0]++;cov_57vuh9v2e().s[1415]++;return g(r);}else{cov_57vuh9v2e().b[517][1]++;}let i=(cov_57vuh9v2e().s[1416]++,new Set(n.map(a=>{cov_57vuh9v2e().f[547]++;cov_57vuh9v2e().s[1417]++;return a.route;}))),o=(cov_57vuh9v2e().s[1418]++,new Set());cov_57vuh9v2e().s[1419]++;for(let a of i){cov_57vuh9v2e().s[1420]++;if(!o.has(a)){cov_57vuh9v2e().b[518][0]++;cov_57vuh9v2e().s[1421]++;for(let c of Bi(a)){cov_57vuh9v2e().s[1422]++;o.add(c);}}else{cov_57vuh9v2e().b[518][1]++;}}let s=(cov_57vuh9v2e().s[1423]++,0);cov_57vuh9v2e().s[1424]++;return M(o).pipe(Oe(a=>{cov_57vuh9v2e().f[548]++;cov_57vuh9v2e().s[1425]++;return i.has(a)?(cov_57vuh9v2e().b[519][0]++,Ws(a,e,t)):(cov_57vuh9v2e().b[519][1]++,a.data=Vn(a,a.parent,t).resolve,g(void 0));}),k(()=>{cov_57vuh9v2e().f[549]++;cov_57vuh9v2e().s[1426]++;return s++;}),on(1),z(a=>{cov_57vuh9v2e().f[550]++;cov_57vuh9v2e().s[1427]++;return s===o.size?(cov_57vuh9v2e().b[520][0]++,g(r)):(cov_57vuh9v2e().b[520][1]++,L);}));});}function Bi(t){cov_57vuh9v2e().f[551]++;let r=(cov_57vuh9v2e().s[1428]++,t.children.map(e=>{cov_57vuh9v2e().f[552]++;cov_57vuh9v2e().s[1429]++;return Bi(e);}).flat());cov_57vuh9v2e().s[1430]++;return[t,...r];}function Ws(t,r,e){cov_57vuh9v2e().f[553]++;let n=(cov_57vuh9v2e().s[1431]++,t.routeConfig),i=(cov_57vuh9v2e().s[1432]++,t._resolve);cov_57vuh9v2e().s[1433]++;return(cov_57vuh9v2e().b[521][0]++,n?.title!==void 0)&&(cov_57vuh9v2e().b[521][1]++,!Oi(n))&&(cov_57vuh9v2e().b[521][2]++,i[et]=n.title),st(()=>{cov_57vuh9v2e().f[554]++;cov_57vuh9v2e().s[1434]++;return t.data=Vn(t,t.parent,e).resolve,Ys(i,t,r).pipe(T(o=>{cov_57vuh9v2e().f[555]++;cov_57vuh9v2e().s[1435]++;return t._resolvedData=o,t.data=d(d({},t.data),o),null;}));});}function Ys(t,r,e){cov_57vuh9v2e().f[556]++;let n=(cov_57vuh9v2e().s[1436]++,An(t));cov_57vuh9v2e().s[1437]++;if(n.length===0){cov_57vuh9v2e().b[522][0]++;cov_57vuh9v2e().s[1438]++;return g({});}else{cov_57vuh9v2e().b[522][1]++;}let i=(cov_57vuh9v2e().s[1439]++,{});cov_57vuh9v2e().s[1440]++;return M(n).pipe(z(o=>{cov_57vuh9v2e().f[557]++;cov_57vuh9v2e().s[1441]++;return Qs(t[o],r,e).pipe(J(),k(s=>{cov_57vuh9v2e().f[558]++;cov_57vuh9v2e().s[1442]++;if(s instanceof Me){cov_57vuh9v2e().b[523][0]++;cov_57vuh9v2e().s[1443]++;throw Vt(new K(),s);}else{cov_57vuh9v2e().b[523][1]++;}cov_57vuh9v2e().s[1444]++;i[o]=s;}));}),on(1),T(()=>{cov_57vuh9v2e().f[559]++;cov_57vuh9v2e().s[1445]++;return i;}),at(o=>{cov_57vuh9v2e().f[560]++;cov_57vuh9v2e().s[1446]++;return xi(o)?(cov_57vuh9v2e().b[524][0]++,L):(cov_57vuh9v2e().b[524][1]++,sr(o));}));}function Qs(t,r,e){cov_57vuh9v2e().f[561]++;let n=(cov_57vuh9v2e().s[1447]++,r._environmentInjector),i=(cov_57vuh9v2e().s[1448]++,Te(t,n)),o=(cov_57vuh9v2e().s[1449]++,i.resolve?(cov_57vuh9v2e().b[525][0]++,i.resolve(r,e)):(cov_57vuh9v2e().b[525][1]++,_(n,()=>{cov_57vuh9v2e().f[562]++;cov_57vuh9v2e().s[1450]++;return i(r,e);})));cov_57vuh9v2e().s[1451]++;return de(o);}function di(t){cov_57vuh9v2e().f[563]++;cov_57vuh9v2e().s[1452]++;return j(r=>{cov_57vuh9v2e().f[564]++;let e=(cov_57vuh9v2e().s[1453]++,t(r));cov_57vuh9v2e().s[1454]++;return e?(cov_57vuh9v2e().b[526][0]++,M(e).pipe(T(()=>{cov_57vuh9v2e().f[565]++;cov_57vuh9v2e().s[1455]++;return r;}))):(cov_57vuh9v2e().b[526][1]++,g(r));});}var Zn=(cov_57vuh9v2e().s[1456]++,(()=>{cov_57vuh9v2e().f[566]++;class t{buildTitle(e){cov_57vuh9v2e().f[567]++;let n,i=(cov_57vuh9v2e().s[1457]++,e.root);cov_57vuh9v2e().s[1458]++;for(;i!==void 0;){cov_57vuh9v2e().s[1459]++;n=(cov_57vuh9v2e().b[527][0]++,this.getResolvedTitleForRoute(i))??(cov_57vuh9v2e().b[527][1]++,n),i=i.children.find(o=>{cov_57vuh9v2e().f[568]++;cov_57vuh9v2e().s[1460]++;return o.outlet===p;});}cov_57vuh9v2e().s[1461]++;return n;}getResolvedTitleForRoute(e){cov_57vuh9v2e().f[569]++;cov_57vuh9v2e().s[1462]++;return e.data[et];}static ɵfac=(cov_57vuh9v2e().s[1463]++,function(n){cov_57vuh9v2e().f[570]++;cov_57vuh9v2e().s[1464]++;return new((cov_57vuh9v2e().b[528][0]++,n)||(cov_57vuh9v2e().b[528][1]++,t))();});static ɵprov=(cov_57vuh9v2e().s[1465]++,m({token:t,factory:()=>{cov_57vuh9v2e().f[571]++;cov_57vuh9v2e().s[1466]++;return h(qi);},providedIn:"root"}));}cov_57vuh9v2e().s[1467]++;return t;})()),qi=(cov_57vuh9v2e().s[1468]++,(()=>{cov_57vuh9v2e().f[572]++;class t extends Zn{title;constructor(e){cov_57vuh9v2e().f[573]++;cov_57vuh9v2e().s[1469]++;super(),this.title=e;}updateTitle(e){cov_57vuh9v2e().f[574]++;let n=(cov_57vuh9v2e().s[1470]++,this.buildTitle(e));cov_57vuh9v2e().s[1471]++;(cov_57vuh9v2e().b[529][0]++,n!==void 0)&&(cov_57vuh9v2e().b[529][1]++,this.title.setTitle(n));}static ɵfac=(cov_57vuh9v2e().s[1472]++,function(n){cov_57vuh9v2e().f[575]++;cov_57vuh9v2e().s[1473]++;return new((cov_57vuh9v2e().b[530][0]++,n)||(cov_57vuh9v2e().b[530][1]++,t))(y(oi));});static ɵprov=(cov_57vuh9v2e().s[1474]++,m({token:t,factory:t.ɵfac,providedIn:"root"}));}cov_57vuh9v2e().s[1475]++;return t;})()),re=(cov_57vuh9v2e().s[1476]++,new C("",{factory:()=>{cov_57vuh9v2e().f[576]++;cov_57vuh9v2e().s[1477]++;return{};}})),fe=(cov_57vuh9v2e().s[1478]++,new C("")),Qt=(cov_57vuh9v2e().s[1479]++,(()=>{cov_57vuh9v2e().f[577]++;class t{componentLoaders=(cov_57vuh9v2e().s[1480]++,new WeakMap());childrenLoaders=(cov_57vuh9v2e().s[1481]++,new WeakMap());onLoadStartListener;onLoadEndListener;compiler=(cov_57vuh9v2e().s[1482]++,h(kr));async loadComponent(e,n){cov_57vuh9v2e().f[578]++;cov_57vuh9v2e().s[1483]++;if(this.componentLoaders.get(n)){cov_57vuh9v2e().b[531][0]++;cov_57vuh9v2e().s[1484]++;return this.componentLoaders.get(n);}else{cov_57vuh9v2e().b[531][1]++;}cov_57vuh9v2e().s[1485]++;if(n._loadedComponent){cov_57vuh9v2e().b[532][0]++;cov_57vuh9v2e().s[1486]++;return Promise.resolve(n._loadedComponent);}else{cov_57vuh9v2e().b[532][1]++;}cov_57vuh9v2e().s[1487]++;(cov_57vuh9v2e().b[533][0]++,this.onLoadStartListener)&&(cov_57vuh9v2e().b[533][1]++,this.onLoadStartListener(n));let i=(cov_57vuh9v2e().s[1488]++,(async()=>{cov_57vuh9v2e().f[579]++;cov_57vuh9v2e().s[1489]++;try{let o=(cov_57vuh9v2e().s[1490]++,await pi(_(e,()=>{cov_57vuh9v2e().f[580]++;cov_57vuh9v2e().s[1491]++;return n.loadComponent();}))),s=(cov_57vuh9v2e().s[1492]++,await Wi(Gi(o)));cov_57vuh9v2e().s[1493]++;return(cov_57vuh9v2e().b[534][0]++,this.onLoadEndListener)&&(cov_57vuh9v2e().b[534][1]++,this.onLoadEndListener(n)),n._loadedComponent=s,s;}finally{cov_57vuh9v2e().s[1494]++;this.componentLoaders.delete(n);}})());cov_57vuh9v2e().s[1495]++;return this.componentLoaders.set(n,i),i;}loadChildren(e,n){cov_57vuh9v2e().f[581]++;cov_57vuh9v2e().s[1496]++;if(this.childrenLoaders.get(n)){cov_57vuh9v2e().b[535][0]++;cov_57vuh9v2e().s[1497]++;return this.childrenLoaders.get(n);}else{cov_57vuh9v2e().b[535][1]++;}cov_57vuh9v2e().s[1498]++;if(n._loadedRoutes){cov_57vuh9v2e().b[536][0]++;cov_57vuh9v2e().s[1499]++;return Promise.resolve({routes:n._loadedRoutes,injector:n._loadedInjector});}else{cov_57vuh9v2e().b[536][1]++;}cov_57vuh9v2e().s[1500]++;(cov_57vuh9v2e().b[537][0]++,this.onLoadStartListener)&&(cov_57vuh9v2e().b[537][1]++,this.onLoadStartListener(n));let i=(cov_57vuh9v2e().s[1501]++,(async()=>{cov_57vuh9v2e().f[582]++;cov_57vuh9v2e().s[1502]++;try{let o=(cov_57vuh9v2e().s[1503]++,await Vi(n,this.compiler,e,this.onLoadEndListener));cov_57vuh9v2e().s[1504]++;return n._loadedRoutes=o.routes,n._loadedInjector=o.injector,n._loadedNgModuleFactory=o.factory,o;}finally{cov_57vuh9v2e().s[1505]++;this.childrenLoaders.delete(n);}})());cov_57vuh9v2e().s[1506]++;return this.childrenLoaders.set(n,i),i;}static ɵfac=(cov_57vuh9v2e().s[1507]++,function(n){cov_57vuh9v2e().f[583]++;cov_57vuh9v2e().s[1508]++;return new((cov_57vuh9v2e().b[538][0]++,n)||(cov_57vuh9v2e().b[538][1]++,t))();});static ɵprov=(cov_57vuh9v2e().s[1509]++,m({token:t,factory:t.ɵfac,providedIn:"root"}));}cov_57vuh9v2e().s[1510]++;return t;})());async function Vi(t,r,e,n){cov_57vuh9v2e().f[584]++;let i=(cov_57vuh9v2e().s[1511]++,await pi(_(e,()=>{cov_57vuh9v2e().f[585]++;cov_57vuh9v2e().s[1512]++;return t.loadChildren();}))),o=(cov_57vuh9v2e().s[1513]++,await Wi(Gi(i))),s;cov_57vuh9v2e().s[1514]++;(cov_57vuh9v2e().b[540][0]++,o instanceof Tr)||(cov_57vuh9v2e().b[540][1]++,Array.isArray(o))?(cov_57vuh9v2e().b[539][0]++,s=o):(cov_57vuh9v2e().b[539][1]++,s=await r.compileModuleAsync(o)),(cov_57vuh9v2e().b[541][0]++,n)&&(cov_57vuh9v2e().b[541][1]++,n(t));let a,c,u=(cov_57vuh9v2e().s[1515]++,!1),l;cov_57vuh9v2e().s[1516]++;return Array.isArray(s)?(cov_57vuh9v2e().b[542][0]++,c=s,u=!0):(cov_57vuh9v2e().b[542][1]++,a=s.create(e).injector,l=s,c=a.get(fe,[],{optional:!0,self:!0}).flat()),{routes:c.map(Kn),injector:a,factory:l};}function Ks(t){cov_57vuh9v2e().f[586]++;cov_57vuh9v2e().s[1517]++;return(cov_57vuh9v2e().b[543][0]++,t)&&(cov_57vuh9v2e().b[543][1]++,typeof t=="object")&&(cov_57vuh9v2e().b[543][2]++,"default"in t);}function Gi(t){cov_57vuh9v2e().f[587]++;cov_57vuh9v2e().s[1518]++;return Ks(t)?(cov_57vuh9v2e().b[544][0]++,t.default):(cov_57vuh9v2e().b[544][1]++,t);}async function Wi(t){cov_57vuh9v2e().f[588]++;cov_57vuh9v2e().s[1519]++;return t;}var Kt=(cov_57vuh9v2e().s[1520]++,(()=>{cov_57vuh9v2e().f[589]++;class t{static ɵfac=(cov_57vuh9v2e().s[1521]++,function(n){cov_57vuh9v2e().f[590]++;cov_57vuh9v2e().s[1522]++;return new((cov_57vuh9v2e().b[545][0]++,n)||(cov_57vuh9v2e().b[545][1]++,t))();});static ɵprov=(cov_57vuh9v2e().s[1523]++,m({token:t,factory:()=>{cov_57vuh9v2e().f[591]++;cov_57vuh9v2e().s[1524]++;return h(Zs);},providedIn:"root"}));}cov_57vuh9v2e().s[1525]++;return t;})()),Zs=(cov_57vuh9v2e().s[1526]++,(()=>{cov_57vuh9v2e().f[592]++;class t{shouldProcessUrl(e){cov_57vuh9v2e().f[593]++;cov_57vuh9v2e().s[1527]++;return!0;}extract(e){cov_57vuh9v2e().f[594]++;cov_57vuh9v2e().s[1528]++;return e;}merge(e,n){cov_57vuh9v2e().f[595]++;cov_57vuh9v2e().s[1529]++;return e;}static ɵfac=(cov_57vuh9v2e().s[1530]++,function(n){cov_57vuh9v2e().f[596]++;cov_57vuh9v2e().s[1531]++;return new((cov_57vuh9v2e().b[546][0]++,n)||(cov_57vuh9v2e().b[546][1]++,t))();});static ɵprov=(cov_57vuh9v2e().s[1532]++,m({token:t,factory:t.ɵfac,providedIn:"root"}));}cov_57vuh9v2e().s[1533]++;return t;})()),Jn=(cov_57vuh9v2e().s[1534]++,new C("")),Xn=(cov_57vuh9v2e().s[1535]++,new C(""));function Yi(t,r,e){cov_57vuh9v2e().f[597]++;let n=(cov_57vuh9v2e().s[1536]++,t.get(Xn)),i=(cov_57vuh9v2e().s[1537]++,t.get(H));cov_57vuh9v2e().s[1538]++;if((cov_57vuh9v2e().b[548][0]++,!i.startViewTransition)||(cov_57vuh9v2e().b[548][1]++,n.skipNextTransition)){cov_57vuh9v2e().b[547][0]++;cov_57vuh9v2e().s[1539]++;return n.skipNextTransition=!1,new Promise(u=>{cov_57vuh9v2e().f[598]++;cov_57vuh9v2e().s[1540]++;return setTimeout(u);});}else{cov_57vuh9v2e().b[547][1]++;}let o,s=(cov_57vuh9v2e().s[1541]++,new Promise(u=>{cov_57vuh9v2e().f[599]++;cov_57vuh9v2e().s[1542]++;o=u;})),a=(cov_57vuh9v2e().s[1543]++,i.startViewTransition(()=>{cov_57vuh9v2e().f[600]++;cov_57vuh9v2e().s[1544]++;return o(),Js(t);}));cov_57vuh9v2e().s[1545]++;a.updateCallbackDone.catch(u=>{cov_57vuh9v2e().f[601]++;}),a.ready.catch(u=>{cov_57vuh9v2e().f[602]++;}),a.finished.catch(u=>{cov_57vuh9v2e().f[603]++;});let{onViewTransitionCreated:c}=(cov_57vuh9v2e().s[1546]++,n);cov_57vuh9v2e().s[1547]++;return(cov_57vuh9v2e().b[549][0]++,c)&&(cov_57vuh9v2e().b[549][1]++,_(t,()=>{cov_57vuh9v2e().f[604]++;cov_57vuh9v2e().s[1548]++;return c({transition:a,from:r,to:e});})),s;}function Js(t){cov_57vuh9v2e().f[605]++;cov_57vuh9v2e().s[1549]++;return new Promise(r=>{cov_57vuh9v2e().f[606]++;cov_57vuh9v2e().s[1550]++;hn({read:()=>{cov_57vuh9v2e().f[607]++;cov_57vuh9v2e().s[1551]++;return setTimeout(r);}},{injector:t});});}cov_57vuh9v2e().s[1552]++;var Xs=()=>{cov_57vuh9v2e().f[608]++;},er=(cov_57vuh9v2e().s[1553]++,new C("")),Zt=(cov_57vuh9v2e().s[1554]++,(()=>{cov_57vuh9v2e().f[609]++;class t{currentNavigation=(cov_57vuh9v2e().s[1555]++,b(null,{equal:()=>{cov_57vuh9v2e().f[610]++;cov_57vuh9v2e().s[1556]++;return!1;}}));currentTransition=(cov_57vuh9v2e().s[1557]++,null);lastSuccessfulNavigation=(cov_57vuh9v2e().s[1558]++,b(null));events=(cov_57vuh9v2e().s[1559]++,new se());transitionAbortWithErrorSubject=(cov_57vuh9v2e().s[1560]++,new se());configLoader=(cov_57vuh9v2e().s[1561]++,h(Qt));environmentInjector=(cov_57vuh9v2e().s[1562]++,h(Y));destroyRef=(cov_57vuh9v2e().s[1563]++,h(sn));urlSerializer=(cov_57vuh9v2e().s[1564]++,h(ne));rootContexts=(cov_57vuh9v2e().s[1565]++,h(he));location=(cov_57vuh9v2e().s[1566]++,h(ge));inputBindingEnabled=(cov_57vuh9v2e().s[1567]++,h(tt,{optional:!0})!==null);titleStrategy=(cov_57vuh9v2e().s[1568]++,h(Zn));options=(cov_57vuh9v2e().s[1569]++,(cov_57vuh9v2e().b[550][0]++,h(re,{optional:!0}))||(cov_57vuh9v2e().b[550][1]++,{}));paramsInheritanceStrategy=(cov_57vuh9v2e().s[1570]++,(cov_57vuh9v2e().b[551][0]++,this.options.paramsInheritanceStrategy)||(cov_57vuh9v2e().b[551][1]++,"emptyOnly"));urlHandlingStrategy=(cov_57vuh9v2e().s[1571]++,h(Kt));createViewTransition=(cov_57vuh9v2e().s[1572]++,h(Jn,{optional:!0}));navigationErrorHandler=(cov_57vuh9v2e().s[1573]++,h(er,{optional:!0}));navigationId=(cov_57vuh9v2e().s[1574]++,0);get hasRequestedNavigation(){cov_57vuh9v2e().f[611]++;cov_57vuh9v2e().s[1575]++;return this.navigationId!==0;}transitions;afterPreactivation=(cov_57vuh9v2e().s[1576]++,()=>{cov_57vuh9v2e().f[612]++;cov_57vuh9v2e().s[1577]++;return g(void 0);});rootComponentType=(cov_57vuh9v2e().s[1578]++,null);destroyed=(cov_57vuh9v2e().s[1579]++,!1);constructor(){cov_57vuh9v2e().f[613]++;cov_57vuh9v2e().s[1580]++;cov_57vuh9v2e().s[1582]++;let e=i=>{cov_57vuh9v2e().f[614]++;cov_57vuh9v2e().s[1581]++;return this.events.next(new jt(i));},n=i=>{cov_57vuh9v2e().f[615]++;cov_57vuh9v2e().s[1583]++;return this.events.next(new kt(i));};cov_57vuh9v2e().s[1584]++;this.configLoader.onLoadEndListener=n,this.configLoader.onLoadStartListener=e,this.destroyRef.onDestroy(()=>{cov_57vuh9v2e().f[616]++;cov_57vuh9v2e().s[1585]++;this.destroyed=!0;});}complete(){cov_57vuh9v2e().f[617]++;cov_57vuh9v2e().s[1586]++;this.transitions?.complete();}handleNavigationRequest(e){cov_57vuh9v2e().f[618]++;let n=(cov_57vuh9v2e().s[1587]++,++this.navigationId);cov_57vuh9v2e().s[1588]++;w(()=>{cov_57vuh9v2e().f[619]++;cov_57vuh9v2e().s[1589]++;this.transitions?.next(A(d({},e),{extractedUrl:this.urlHandlingStrategy.extract(e.rawUrl),targetSnapshot:null,targetRouterState:null,guards:{canActivateChecks:[],canDeactivateChecks:[]},guardsResult:null,id:n,routesRecognizeHandler:{},beforeActivateHandler:{}}));});}setupNavigations(e){cov_57vuh9v2e().f[620]++;cov_57vuh9v2e().s[1590]++;return this.transitions=new U(null),this.transitions.pipe(Z(n=>{cov_57vuh9v2e().f[621]++;cov_57vuh9v2e().s[1591]++;return n!==null;}),j(n=>{cov_57vuh9v2e().f[622]++;cov_57vuh9v2e().s[1594]++;let i=(cov_57vuh9v2e().s[1592]++,!1),o=(cov_57vuh9v2e().s[1593]++,new AbortController()),s=()=>{cov_57vuh9v2e().f[623]++;cov_57vuh9v2e().s[1595]++;return(cov_57vuh9v2e().b[552][0]++,!i)&&(cov_57vuh9v2e().b[552][1]++,this.currentTransition?.id===n.id);};cov_57vuh9v2e().s[1596]++;return g(n).pipe(j(a=>{cov_57vuh9v2e().f[624]++;cov_57vuh9v2e().s[1597]++;if(this.navigationId>n.id){cov_57vuh9v2e().b[553][0]++;cov_57vuh9v2e().s[1598]++;return this.cancelNavigationTransition(n,"",I.SupersededByNewNavigation),L;}else{cov_57vuh9v2e().b[553][1]++;}cov_57vuh9v2e().s[1599]++;this.currentTransition=n;let c=(cov_57vuh9v2e().s[1600]++,this.lastSuccessfulNavigation());cov_57vuh9v2e().s[1601]++;this.currentNavigation.set({id:a.id,initialUrl:a.rawUrl,extractedUrl:a.extractedUrl,targetBrowserUrl:typeof a.extras.browserUrl=="string"?(cov_57vuh9v2e().b[554][0]++,this.urlSerializer.parse(a.extras.browserUrl)):(cov_57vuh9v2e().b[554][1]++,a.extras.browserUrl),trigger:a.source,extras:a.extras,previousNavigation:c?(cov_57vuh9v2e().b[555][0]++,A(d({},c),{previousNavigation:null})):(cov_57vuh9v2e().b[555][1]++,null),abort:()=>{cov_57vuh9v2e().f[625]++;cov_57vuh9v2e().s[1602]++;return o.abort();},routesRecognizeHandler:a.routesRecognizeHandler,beforeActivateHandler:a.beforeActivateHandler});let u=(cov_57vuh9v2e().s[1603]++,(cov_57vuh9v2e().b[556][0]++,!e.navigated)||(cov_57vuh9v2e().b[556][1]++,this.isUpdatingInternalState())||(cov_57vuh9v2e().b[556][2]++,this.isUpdatedBrowserUrl())),l=(cov_57vuh9v2e().s[1604]++,(cov_57vuh9v2e().b[557][0]++,a.extras.onSameUrlNavigation)??(cov_57vuh9v2e().b[557][1]++,e.onSameUrlNavigation));cov_57vuh9v2e().s[1605]++;if((cov_57vuh9v2e().b[559][0]++,!u)&&(cov_57vuh9v2e().b[559][1]++,l!=="reload")){cov_57vuh9v2e().b[558][0]++;cov_57vuh9v2e().s[1606]++;return this.events.next(new V(a.id,this.urlSerializer.serialize(a.rawUrl),"",Se.IgnoredSameUrlNavigation)),a.resolve(!1),L;}else{cov_57vuh9v2e().b[558][1]++;}cov_57vuh9v2e().s[1607]++;if(this.urlHandlingStrategy.shouldProcessUrl(a.rawUrl)){cov_57vuh9v2e().b[560][0]++;cov_57vuh9v2e().s[1608]++;return g(a).pipe(j(f=>{cov_57vuh9v2e().f[626]++;cov_57vuh9v2e().s[1609]++;return this.events.next(new te(f.id,this.urlSerializer.serialize(f.extractedUrl),f.source,f.restoredState)),f.id!==this.navigationId?(cov_57vuh9v2e().b[561][0]++,L):(cov_57vuh9v2e().b[561][1]++,Promise.resolve(f));}),Vs(this.environmentInjector,this.configLoader,this.rootComponentType,e.config,this.urlSerializer,this.paramsInheritanceStrategy,o.signal),k(f=>{cov_57vuh9v2e().f[627]++;cov_57vuh9v2e().s[1610]++;n.targetSnapshot=f.targetSnapshot,n.urlAfterRedirects=f.urlAfterRedirects,this.currentNavigation.update(R=>{cov_57vuh9v2e().f[628]++;cov_57vuh9v2e().s[1611]++;return R.finalUrl=f.urlAfterRedirects,R;}),this.events.next(new Qe());}),j(f=>{cov_57vuh9v2e().f[629]++;cov_57vuh9v2e().s[1612]++;return M((cov_57vuh9v2e().b[562][0]++,n.routesRecognizeHandler.deferredHandle)??(cov_57vuh9v2e().b[562][1]++,g(void 0))).pipe(T(()=>{cov_57vuh9v2e().f[630]++;cov_57vuh9v2e().s[1613]++;return f;}));}),k(()=>{cov_57vuh9v2e().f[631]++;let f=(cov_57vuh9v2e().s[1614]++,new Ye(a.id,this.urlSerializer.serialize(a.extractedUrl),this.urlSerializer.serialize(a.urlAfterRedirects),a.targetSnapshot));cov_57vuh9v2e().s[1615]++;this.events.next(f);}));}else{cov_57vuh9v2e().b[560][1]++;}cov_57vuh9v2e().s[1616]++;if((cov_57vuh9v2e().b[564][0]++,u)&&(cov_57vuh9v2e().b[564][1]++,this.urlHandlingStrategy.shouldProcessUrl(a.currentRawUrl))){cov_57vuh9v2e().b[563][0]++;let{id:f,extractedUrl:R,source:ie,restoredState:W,extras:oe}=(cov_57vuh9v2e().s[1617]++,a),De=(cov_57vuh9v2e().s[1618]++,new te(f,this.urlSerializer.serialize(R),ie,W));cov_57vuh9v2e().s[1619]++;this.events.next(De);let tn=(cov_57vuh9v2e().s[1620]++,Ai(this.rootComponentType,this.environmentInjector).snapshot);cov_57vuh9v2e().s[1621]++;return this.currentTransition=n=A(d({},a),{targetSnapshot:tn,urlAfterRedirects:R,extras:A(d({},oe),{skipLocationChange:!1,replaceUrl:!1})}),this.currentNavigation.update(Ae=>{cov_57vuh9v2e().f[632]++;cov_57vuh9v2e().s[1622]++;return Ae.finalUrl=R,Ae;}),g(n);}else{cov_57vuh9v2e().b[563][1]++;cov_57vuh9v2e().s[1623]++;return this.events.next(new V(a.id,this.urlSerializer.serialize(a.extractedUrl),"",Se.IgnoredByUrlHandlingStrategy)),a.resolve(!1),L;}}),T(a=>{cov_57vuh9v2e().f[633]++;let c=(cov_57vuh9v2e().s[1624]++,new Pt(a.id,this.urlSerializer.serialize(a.extractedUrl),this.urlSerializer.serialize(a.urlAfterRedirects),a.targetSnapshot));cov_57vuh9v2e().s[1625]++;return this.events.next(c),this.currentTransition=n=A(d({},a),{guards:as(a.targetSnapshot,a.currentSnapshot,this.rootContexts)}),n;}),ys(a=>{cov_57vuh9v2e().f[634]++;cov_57vuh9v2e().s[1626]++;return this.events.next(a);}),j(a=>{cov_57vuh9v2e().f[635]++;cov_57vuh9v2e().s[1627]++;if(n.guardsResult=a.guardsResult,(cov_57vuh9v2e().b[566][0]++,a.guardsResult)&&(cov_57vuh9v2e().b[566][1]++,typeof a.guardsResult!="boolean")){cov_57vuh9v2e().b[565][0]++;cov_57vuh9v2e().s[1628]++;throw Vt(this.urlSerializer,a.guardsResult);}else{cov_57vuh9v2e().b[565][1]++;}let c=(cov_57vuh9v2e().s[1629]++,new Ut(a.id,this.urlSerializer.serialize(a.extractedUrl),this.urlSerializer.serialize(a.urlAfterRedirects),a.targetSnapshot,!!a.guardsResult));cov_57vuh9v2e().s[1630]++;if(this.events.next(c),!s()){cov_57vuh9v2e().b[567][0]++;cov_57vuh9v2e().s[1631]++;return L;}else{cov_57vuh9v2e().b[567][1]++;}cov_57vuh9v2e().s[1632]++;if(!a.guardsResult){cov_57vuh9v2e().b[568][0]++;cov_57vuh9v2e().s[1633]++;return this.cancelNavigationTransition(a,"",I.GuardRejected),L;}else{cov_57vuh9v2e().b[568][1]++;}cov_57vuh9v2e().s[1634]++;if(a.guards.canActivateChecks.length===0){cov_57vuh9v2e().b[569][0]++;cov_57vuh9v2e().s[1635]++;return g(a);}else{cov_57vuh9v2e().b[569][1]++;}let u=(cov_57vuh9v2e().s[1636]++,new Lt(a.id,this.urlSerializer.serialize(a.extractedUrl),this.urlSerializer.serialize(a.urlAfterRedirects),a.targetSnapshot));cov_57vuh9v2e().s[1637]++;if(this.events.next(u),!s()){cov_57vuh9v2e().b[570][0]++;cov_57vuh9v2e().s[1638]++;return L;}else{cov_57vuh9v2e().b[570][1]++;}let l=(cov_57vuh9v2e().s[1639]++,!1);cov_57vuh9v2e().s[1640]++;return g(a).pipe(Gs(this.paramsInheritanceStrategy),k({next:()=>{cov_57vuh9v2e().f[636]++;cov_57vuh9v2e().s[1641]++;l=!0;let f=(cov_57vuh9v2e().s[1642]++,new xt(a.id,this.urlSerializer.serialize(a.extractedUrl),this.urlSerializer.serialize(a.urlAfterRedirects),a.targetSnapshot));cov_57vuh9v2e().s[1643]++;this.events.next(f);},complete:()=>{cov_57vuh9v2e().f[637]++;cov_57vuh9v2e().s[1644]++;(cov_57vuh9v2e().b[571][0]++,l)||(cov_57vuh9v2e().b[571][1]++,this.cancelNavigationTransition(a,"",I.NoDataFromResolver));}}));}),di(a=>{cov_57vuh9v2e().f[638]++;cov_57vuh9v2e().s[1645]++;let c=l=>{cov_57vuh9v2e().f[639]++;let f=(cov_57vuh9v2e().s[1646]++,[]);cov_57vuh9v2e().s[1647]++;if(l.routeConfig?._loadedComponent){cov_57vuh9v2e().b[572][0]++;cov_57vuh9v2e().s[1648]++;l.component=l.routeConfig?._loadedComponent;}else{cov_57vuh9v2e().b[572][1]++;cov_57vuh9v2e().s[1649]++;if(l.routeConfig?.loadComponent){cov_57vuh9v2e().b[573][0]++;let R=(cov_57vuh9v2e().s[1650]++,l._environmentInjector);cov_57vuh9v2e().s[1651]++;f.push(this.configLoader.loadComponent(R,l.routeConfig).then(ie=>{cov_57vuh9v2e().f[640]++;cov_57vuh9v2e().s[1652]++;l.component=ie;}));}else{cov_57vuh9v2e().b[573][1]++;}}cov_57vuh9v2e().s[1653]++;for(let R of l.children){cov_57vuh9v2e().s[1654]++;f.push(...c(R));}cov_57vuh9v2e().s[1655]++;return f;},u=(cov_57vuh9v2e().s[1656]++,c(a.targetSnapshot.root));cov_57vuh9v2e().s[1657]++;return u.length===0?(cov_57vuh9v2e().b[574][0]++,g(a)):(cov_57vuh9v2e().b[574][1]++,M(Promise.all(u).then(()=>{cov_57vuh9v2e().f[641]++;cov_57vuh9v2e().s[1658]++;return a;})));}),di(()=>{cov_57vuh9v2e().f[642]++;cov_57vuh9v2e().s[1659]++;return this.afterPreactivation();}),j(()=>{cov_57vuh9v2e().f[643]++;let{currentSnapshot:a,targetSnapshot:c}=(cov_57vuh9v2e().s[1660]++,n),u=(cov_57vuh9v2e().s[1661]++,this.createViewTransition?.(this.environmentInjector,a.root,c.root));cov_57vuh9v2e().s[1662]++;return u?(cov_57vuh9v2e().b[575][0]++,M(u).pipe(T(()=>{cov_57vuh9v2e().f[644]++;cov_57vuh9v2e().s[1663]++;return n;}))):(cov_57vuh9v2e().b[575][1]++,g(n));}),pe(1),j(a=>{cov_57vuh9v2e().f[645]++;let c=(cov_57vuh9v2e().s[1664]++,rs(e.routeReuseStrategy,a.targetSnapshot,a.currentRouterState));cov_57vuh9v2e().s[1665]++;this.currentTransition=n=a=A(d({},a),{targetRouterState:c}),this.currentNavigation.update(l=>{cov_57vuh9v2e().f[646]++;cov_57vuh9v2e().s[1666]++;return l.targetRouterState=c,l;}),this.events.next(new Ce());let u=(cov_57vuh9v2e().s[1667]++,n.beforeActivateHandler.deferredHandle);cov_57vuh9v2e().s[1668]++;return u?(cov_57vuh9v2e().b[576][0]++,M(u.then(()=>{cov_57vuh9v2e().f[647]++;cov_57vuh9v2e().s[1669]++;return a;}))):(cov_57vuh9v2e().b[576][1]++,g(a));}),k(a=>{cov_57vuh9v2e().f[648]++;cov_57vuh9v2e().s[1670]++;new kn(e.routeReuseStrategy,n.targetRouterState,n.currentRouterState,c=>{cov_57vuh9v2e().f[649]++;cov_57vuh9v2e().s[1671]++;return this.events.next(c);},this.inputBindingEnabled).activate(this.rootContexts),(cov_57vuh9v2e().b[577][0]++,s())&&(cov_57vuh9v2e().b[577][1]++,i=!0,this.currentNavigation.update(c=>{cov_57vuh9v2e().f[650]++;cov_57vuh9v2e().s[1672]++;return c.abort=Xs,c;}),this.lastSuccessfulNavigation.set(w(this.currentNavigation)),this.events.next(new P(a.id,this.urlSerializer.serialize(a.extractedUrl),this.urlSerializer.serialize(a.urlAfterRedirects))),this.titleStrategy?.updateTitle(a.targetRouterState.snapshot),a.resolve(!0));}),ct(ji(o.signal).pipe(Z(()=>{cov_57vuh9v2e().f[651]++;cov_57vuh9v2e().s[1673]++;return(cov_57vuh9v2e().b[578][0]++,!i)&&(cov_57vuh9v2e().b[578][1]++,!n.targetRouterState);}),k(()=>{cov_57vuh9v2e().f[652]++;cov_57vuh9v2e().s[1674]++;this.cancelNavigationTransition(n,o.signal.reason+"",I.Aborted);}))),k({complete:()=>{cov_57vuh9v2e().f[653]++;cov_57vuh9v2e().s[1675]++;i=!0;}}),ct(this.transitionAbortWithErrorSubject.pipe(k(a=>{cov_57vuh9v2e().f[654]++;cov_57vuh9v2e().s[1676]++;throw a;}))),ur(()=>{cov_57vuh9v2e().f[655]++;cov_57vuh9v2e().s[1677]++;o.abort(),(cov_57vuh9v2e().b[579][0]++,i)||(cov_57vuh9v2e().b[579][1]++,this.cancelNavigationTransition(n,"",I.SupersededByNewNavigation)),(cov_57vuh9v2e().b[580][0]++,this.currentTransition?.id===n.id)&&(cov_57vuh9v2e().b[580][1]++,this.currentNavigation.set(null),this.currentTransition=null);}),at(a=>{cov_57vuh9v2e().f[656]++;cov_57vuh9v2e().s[1678]++;if(i=!0,this.destroyed){cov_57vuh9v2e().b[581][0]++;cov_57vuh9v2e().s[1679]++;return n.resolve(!1),L;}else{cov_57vuh9v2e().b[581][1]++;}cov_57vuh9v2e().s[1680]++;if(Li(a)){cov_57vuh9v2e().b[582][0]++;cov_57vuh9v2e().s[1681]++;this.events.next(new x(n.id,this.urlSerializer.serialize(n.extractedUrl),a.message,a.cancellationCode)),ss(a)?(cov_57vuh9v2e().b[583][0]++,this.events.next(new Ee(a.url,a.navigationBehaviorOptions))):(cov_57vuh9v2e().b[583][1]++,n.resolve(!1));}else{cov_57vuh9v2e().b[582][1]++;let c=(cov_57vuh9v2e().s[1682]++,new le(n.id,this.urlSerializer.serialize(n.extractedUrl),a,(cov_57vuh9v2e().b[584][0]++,n.targetSnapshot)??(cov_57vuh9v2e().b[584][1]++,void 0)));cov_57vuh9v2e().s[1683]++;try{let u=(cov_57vuh9v2e().s[1684]++,_(this.environmentInjector,()=>{cov_57vuh9v2e().f[657]++;cov_57vuh9v2e().s[1685]++;return this.navigationErrorHandler?.(c);}));cov_57vuh9v2e().s[1686]++;if(u instanceof Me){cov_57vuh9v2e().b[585][0]++;let{message:l,cancellationCode:f}=(cov_57vuh9v2e().s[1687]++,Vt(this.urlSerializer,u));cov_57vuh9v2e().s[1688]++;this.events.next(new x(n.id,this.urlSerializer.serialize(n.extractedUrl),l,f)),this.events.next(new Ee(u.redirectTo,u.navigationBehaviorOptions));}else{cov_57vuh9v2e().b[585][1]++;cov_57vuh9v2e().s[1689]++;throw this.events.next(c),a;}}catch(u){cov_57vuh9v2e().s[1690]++;this.options.resolveNavigationPromiseOnError?(cov_57vuh9v2e().b[586][0]++,n.resolve(!1)):(cov_57vuh9v2e().b[586][1]++,n.reject(u));}}cov_57vuh9v2e().s[1691]++;return L;}));}));}cancelNavigationTransition(e,n,i){cov_57vuh9v2e().f[658]++;let o=(cov_57vuh9v2e().s[1692]++,new x(e.id,this.urlSerializer.serialize(e.extractedUrl),n,i));cov_57vuh9v2e().s[1693]++;this.events.next(o),e.resolve(!1);}isUpdatingInternalState(){cov_57vuh9v2e().f[659]++;cov_57vuh9v2e().s[1694]++;return this.currentTransition?.extractedUrl.toString()!==this.currentTransition?.currentUrlTree.toString();}isUpdatedBrowserUrl(){cov_57vuh9v2e().f[660]++;let e=(cov_57vuh9v2e().s[1695]++,this.urlHandlingStrategy.extract(this.urlSerializer.parse(this.location.path(!0)))),n=(cov_57vuh9v2e().s[1696]++,w(this.currentNavigation)),i=(cov_57vuh9v2e().s[1697]++,(cov_57vuh9v2e().b[587][0]++,n?.targetBrowserUrl)??(cov_57vuh9v2e().b[587][1]++,n?.extractedUrl));cov_57vuh9v2e().s[1698]++;return(cov_57vuh9v2e().b[588][0]++,e.toString()!==i?.toString())&&(cov_57vuh9v2e().b[588][1]++,!n?.extras.skipLocationChange);}static ɵfac=(cov_57vuh9v2e().s[1699]++,function(n){cov_57vuh9v2e().f[661]++;cov_57vuh9v2e().s[1700]++;return new((cov_57vuh9v2e().b[589][0]++,n)||(cov_57vuh9v2e().b[589][1]++,t))();});static ɵprov=(cov_57vuh9v2e().s[1701]++,m({token:t,factory:t.ɵfac,providedIn:"root"}));}cov_57vuh9v2e().s[1702]++;return t;})());function ea(t){cov_57vuh9v2e().f[662]++;cov_57vuh9v2e().s[1703]++;return t!==ye;}var Qi=(cov_57vuh9v2e().s[1704]++,new C(""));cov_57vuh9v2e().s[1711]++;var Ki=(cov_57vuh9v2e().s[1705]++,(()=>{cov_57vuh9v2e().f[663]++;class t{static ɵfac=(cov_57vuh9v2e().s[1706]++,function(n){cov_57vuh9v2e().f[664]++;cov_57vuh9v2e().s[1707]++;return new((cov_57vuh9v2e().b[590][0]++,n)||(cov_57vuh9v2e().b[590][1]++,t))();});static ɵprov=(cov_57vuh9v2e().s[1708]++,m({token:t,factory:()=>{cov_57vuh9v2e().f[665]++;cov_57vuh9v2e().s[1709]++;return h(ta);},providedIn:"root"}));}cov_57vuh9v2e().s[1710]++;return t;})()),Wt=class{shouldDetach(r){cov_57vuh9v2e().f[666]++;cov_57vuh9v2e().s[1712]++;return!1;}store(r,e){cov_57vuh9v2e().f[667]++;}shouldAttach(r){cov_57vuh9v2e().f[668]++;cov_57vuh9v2e().s[1713]++;return!1;}retrieve(r){cov_57vuh9v2e().f[669]++;cov_57vuh9v2e().s[1714]++;return null;}shouldReuseRoute(r,e){cov_57vuh9v2e().f[670]++;cov_57vuh9v2e().s[1715]++;return r.routeConfig===e.routeConfig;}shouldDestroyInjector(r){cov_57vuh9v2e().f[671]++;cov_57vuh9v2e().s[1716]++;return!0;}},ta=(cov_57vuh9v2e().s[1717]++,(()=>{cov_57vuh9v2e().f[672]++;class t extends Wt{static ɵfac=(cov_57vuh9v2e().s[1718]++,(()=>{cov_57vuh9v2e().f[673]++;let e;cov_57vuh9v2e().s[1719]++;return function(i){cov_57vuh9v2e().f[674]++;cov_57vuh9v2e().s[1720]++;return((cov_57vuh9v2e().b[591][0]++,e)||(cov_57vuh9v2e().b[591][1]++,e=cn(t)))((cov_57vuh9v2e().b[592][0]++,i)||(cov_57vuh9v2e().b[592][1]++,t));};})());static ɵprov=(cov_57vuh9v2e().s[1721]++,m({token:t,factory:t.ɵfac,providedIn:"root"}));}cov_57vuh9v2e().s[1722]++;return t;})()),Jt=(cov_57vuh9v2e().s[1723]++,(()=>{cov_57vuh9v2e().f[675]++;class t{urlSerializer=(cov_57vuh9v2e().s[1724]++,h(ne));options=(cov_57vuh9v2e().s[1725]++,(cov_57vuh9v2e().b[593][0]++,h(re,{optional:!0}))||(cov_57vuh9v2e().b[593][1]++,{}));canceledNavigationResolution=(cov_57vuh9v2e().s[1726]++,(cov_57vuh9v2e().b[594][0]++,this.options.canceledNavigationResolution)||(cov_57vuh9v2e().b[594][1]++,"replace"));location=(cov_57vuh9v2e().s[1727]++,h(ge));urlHandlingStrategy=(cov_57vuh9v2e().s[1728]++,h(Kt));urlUpdateStrategy=(cov_57vuh9v2e().s[1729]++,(cov_57vuh9v2e().b[595][0]++,this.options.urlUpdateStrategy)||(cov_57vuh9v2e().b[595][1]++,"deferred"));currentUrlTree=(cov_57vuh9v2e().s[1730]++,new D());getCurrentUrlTree(){cov_57vuh9v2e().f[676]++;cov_57vuh9v2e().s[1731]++;return this.currentUrlTree;}rawUrlTree=(cov_57vuh9v2e().s[1732]++,this.currentUrlTree);getRawUrlTree(){cov_57vuh9v2e().f[677]++;cov_57vuh9v2e().s[1733]++;return this.rawUrlTree;}createBrowserPath({finalUrl:e,initialUrl:n,targetBrowserUrl:i}){cov_57vuh9v2e().f[678]++;let o=(cov_57vuh9v2e().s[1734]++,e!==void 0?(cov_57vuh9v2e().b[596][0]++,this.urlHandlingStrategy.merge(e,n)):(cov_57vuh9v2e().b[596][1]++,n)),s=(cov_57vuh9v2e().s[1735]++,(cov_57vuh9v2e().b[597][0]++,i)??(cov_57vuh9v2e().b[597][1]++,o));cov_57vuh9v2e().s[1736]++;return s instanceof D?(cov_57vuh9v2e().b[598][0]++,this.urlSerializer.serialize(s)):(cov_57vuh9v2e().b[598][1]++,s);}commitTransition({targetRouterState:e,finalUrl:n,initialUrl:i}){cov_57vuh9v2e().f[679]++;cov_57vuh9v2e().s[1737]++;(cov_57vuh9v2e().b[600][0]++,n)&&(cov_57vuh9v2e().b[600][1]++,e)?(cov_57vuh9v2e().b[599][0]++,this.currentUrlTree=n,this.rawUrlTree=this.urlHandlingStrategy.merge(n,i),this.routerState=e):(cov_57vuh9v2e().b[599][1]++,this.rawUrlTree=i);}routerState=(cov_57vuh9v2e().s[1738]++,Ai(null,h(Y)));getRouterState(){cov_57vuh9v2e().f[680]++;cov_57vuh9v2e().s[1739]++;return this.routerState;}_stateMemento=(cov_57vuh9v2e().s[1740]++,this.createStateMemento());get stateMemento(){cov_57vuh9v2e().f[681]++;cov_57vuh9v2e().s[1741]++;return this._stateMemento;}updateStateMemento(){cov_57vuh9v2e().f[682]++;cov_57vuh9v2e().s[1742]++;this._stateMemento=this.createStateMemento();}createStateMemento(){cov_57vuh9v2e().f[683]++;cov_57vuh9v2e().s[1743]++;return{rawUrlTree:this.rawUrlTree,currentUrlTree:this.currentUrlTree,routerState:this.routerState};}restoredState(){cov_57vuh9v2e().f[684]++;cov_57vuh9v2e().s[1744]++;return this.location.getState();}static ɵfac=(cov_57vuh9v2e().s[1745]++,function(n){cov_57vuh9v2e().f[685]++;cov_57vuh9v2e().s[1746]++;return new((cov_57vuh9v2e().b[601][0]++,n)||(cov_57vuh9v2e().b[601][1]++,t))();});static ɵprov=(cov_57vuh9v2e().s[1747]++,m({token:t,factory:()=>{cov_57vuh9v2e().f[686]++;cov_57vuh9v2e().s[1748]++;return h(na);},providedIn:"root"}));}cov_57vuh9v2e().s[1749]++;return t;})()),na=(cov_57vuh9v2e().s[1750]++,(()=>{cov_57vuh9v2e().f[687]++;class t extends Jt{currentPageId=(cov_57vuh9v2e().s[1751]++,0);lastSuccessfulId=(cov_57vuh9v2e().s[1752]++,-1);get browserPageId(){cov_57vuh9v2e().f[688]++;cov_57vuh9v2e().s[1753]++;return this.canceledNavigationResolution!=="computed"?(cov_57vuh9v2e().b[602][0]++,this.currentPageId):(cov_57vuh9v2e().b[602][1]++,(cov_57vuh9v2e().b[603][0]++,this.restoredState()?.ɵrouterPageId)??(cov_57vuh9v2e().b[603][1]++,this.currentPageId));}registerNonRouterCurrentEntryChangeListener(e){cov_57vuh9v2e().f[689]++;cov_57vuh9v2e().s[1754]++;return this.location.subscribe(n=>{cov_57vuh9v2e().f[690]++;cov_57vuh9v2e().s[1755]++;(cov_57vuh9v2e().b[604][0]++,n.type==="popstate")&&(cov_57vuh9v2e().b[604][1]++,setTimeout(()=>{cov_57vuh9v2e().f[691]++;cov_57vuh9v2e().s[1756]++;e(n.url,n.state,"popstate",{replaceUrl:!0});}));});}handleRouterEvent(e,n){cov_57vuh9v2e().f[692]++;cov_57vuh9v2e().s[1757]++;e instanceof te?(cov_57vuh9v2e().b[605][0]++,this.updateStateMemento()):(cov_57vuh9v2e().b[605][1]++,e instanceof V?(cov_57vuh9v2e().b[606][0]++,this.commitTransition(n)):(cov_57vuh9v2e().b[606][1]++,e instanceof Ye?(cov_57vuh9v2e().b[607][0]++,(cov_57vuh9v2e().b[608][0]++,this.urlUpdateStrategy==="eager")&&((cov_57vuh9v2e().b[608][1]++,n.extras.skipLocationChange)||(cov_57vuh9v2e().b[608][2]++,this.setBrowserUrl(this.createBrowserPath(n),n)))):(cov_57vuh9v2e().b[607][1]++,e instanceof Ce?(cov_57vuh9v2e().b[609][0]++,this.commitTransition(n),(cov_57vuh9v2e().b[610][0]++,this.urlUpdateStrategy==="deferred")&&(cov_57vuh9v2e().b[610][1]++,!n.extras.skipLocationChange)&&(cov_57vuh9v2e().b[610][2]++,this.setBrowserUrl(this.createBrowserPath(n),n))):(cov_57vuh9v2e().b[609][1]++,(cov_57vuh9v2e().b[612][0]++,e instanceof x)&&(cov_57vuh9v2e().b[612][1]++,!Di(e))?(cov_57vuh9v2e().b[611][0]++,this.restoreHistory(n)):(cov_57vuh9v2e().b[611][1]++,e instanceof le?(cov_57vuh9v2e().b[613][0]++,this.restoreHistory(n,!0)):(cov_57vuh9v2e().b[613][1]++,(cov_57vuh9v2e().b[614][0]++,e instanceof P)&&(cov_57vuh9v2e().b[614][1]++,this.lastSuccessfulId=e.id,this.currentPageId=this.browserPageId)))))));}setBrowserUrl(e,{extras:n,id:i}){cov_57vuh9v2e().f[693]++;let{replaceUrl:o,state:s}=(cov_57vuh9v2e().s[1758]++,n);cov_57vuh9v2e().s[1759]++;if((cov_57vuh9v2e().b[616][0]++,this.location.isCurrentPathEqualTo(e))||(cov_57vuh9v2e().b[616][1]++,o)){cov_57vuh9v2e().b[615][0]++;let a=(cov_57vuh9v2e().s[1760]++,this.browserPageId),c=(cov_57vuh9v2e().s[1761]++,d(d({},s),this.generateNgRouterState(i,a)));cov_57vuh9v2e().s[1762]++;this.location.replaceState(e,"",c);}else{cov_57vuh9v2e().b[615][1]++;let a=(cov_57vuh9v2e().s[1763]++,d(d({},s),this.generateNgRouterState(i,this.browserPageId+1)));cov_57vuh9v2e().s[1764]++;this.location.go(e,"",a);}}restoreHistory(e,n=(cov_57vuh9v2e().b[617][0]++,!1)){cov_57vuh9v2e().f[694]++;cov_57vuh9v2e().s[1765]++;if(this.canceledNavigationResolution==="computed"){cov_57vuh9v2e().b[618][0]++;let i=(cov_57vuh9v2e().s[1766]++,this.browserPageId),o=(cov_57vuh9v2e().s[1767]++,this.currentPageId-i);cov_57vuh9v2e().s[1768]++;o!==0?(cov_57vuh9v2e().b[619][0]++,this.location.historyGo(o)):(cov_57vuh9v2e().b[619][1]++,(cov_57vuh9v2e().b[620][0]++,this.getCurrentUrlTree()===e.finalUrl)&&(cov_57vuh9v2e().b[620][1]++,o===0)&&(cov_57vuh9v2e().b[620][2]++,this.resetInternalState(e),this.resetUrlToCurrentUrlTree()));}else{cov_57vuh9v2e().b[618][1]++;cov_57vuh9v2e().s[1769]++;(cov_57vuh9v2e().b[621][0]++,this.canceledNavigationResolution==="replace")&&(cov_57vuh9v2e().b[621][1]++,(cov_57vuh9v2e().b[622][0]++,n)&&(cov_57vuh9v2e().b[622][1]++,this.resetInternalState(e)),this.resetUrlToCurrentUrlTree());}}resetInternalState({finalUrl:e}){cov_57vuh9v2e().f[695]++;cov_57vuh9v2e().s[1770]++;this.routerState=this.stateMemento.routerState,this.currentUrlTree=this.stateMemento.currentUrlTree,this.rawUrlTree=this.urlHandlingStrategy.merge(this.currentUrlTree,(cov_57vuh9v2e().b[623][0]++,e)??(cov_57vuh9v2e().b[623][1]++,this.rawUrlTree));}resetUrlToCurrentUrlTree(){cov_57vuh9v2e().f[696]++;cov_57vuh9v2e().s[1771]++;this.location.replaceState(this.urlSerializer.serialize(this.getRawUrlTree()),"",this.generateNgRouterState(this.lastSuccessfulId,this.currentPageId));}generateNgRouterState(e,n){cov_57vuh9v2e().f[697]++;cov_57vuh9v2e().s[1772]++;return this.canceledNavigationResolution==="computed"?(cov_57vuh9v2e().b[624][0]++,{navigationId:e,ɵrouterPageId:n}):(cov_57vuh9v2e().b[624][1]++,{navigationId:e});}static ɵfac=(cov_57vuh9v2e().s[1773]++,(()=>{cov_57vuh9v2e().f[698]++;let e;cov_57vuh9v2e().s[1774]++;return function(i){cov_57vuh9v2e().f[699]++;cov_57vuh9v2e().s[1775]++;return((cov_57vuh9v2e().b[625][0]++,e)||(cov_57vuh9v2e().b[625][1]++,e=cn(t)))((cov_57vuh9v2e().b[626][0]++,i)||(cov_57vuh9v2e().b[626][1]++,t));};})());static ɵprov=(cov_57vuh9v2e().s[1776]++,m({token:t,factory:t.ɵfac,providedIn:"root"}));}cov_57vuh9v2e().s[1777]++;return t;})());function Xt(t,r){cov_57vuh9v2e().f[700]++;cov_57vuh9v2e().s[1778]++;t.events.pipe(Z(e=>{cov_57vuh9v2e().f[701]++;cov_57vuh9v2e().s[1779]++;return(cov_57vuh9v2e().b[627][0]++,e instanceof P)||(cov_57vuh9v2e().b[627][1]++,e instanceof x)||(cov_57vuh9v2e().b[627][2]++,e instanceof le)||(cov_57vuh9v2e().b[627][3]++,e instanceof V);}),T(e=>{cov_57vuh9v2e().f[702]++;cov_57vuh9v2e().s[1780]++;return(cov_57vuh9v2e().b[629][0]++,e instanceof P)||(cov_57vuh9v2e().b[629][1]++,e instanceof V)?(cov_57vuh9v2e().b[628][0]++,0):(cov_57vuh9v2e().b[628][1]++,(e instanceof x?(cov_57vuh9v2e().b[631][0]++,(cov_57vuh9v2e().b[632][0]++,e.code===I.Redirect)||(cov_57vuh9v2e().b[632][1]++,e.code===I.SupersededByNewNavigation)):(cov_57vuh9v2e().b[631][1]++,!1))?(cov_57vuh9v2e().b[630][0]++,2):(cov_57vuh9v2e().b[630][1]++,1));}),Z(e=>{cov_57vuh9v2e().f[703]++;cov_57vuh9v2e().s[1781]++;return e!==2;}),pe(1)).subscribe(()=>{cov_57vuh9v2e().f[704]++;cov_57vuh9v2e().s[1782]++;r();});}var $=(cov_57vuh9v2e().s[1783]++,(()=>{cov_57vuh9v2e().f[705]++;class t{get currentUrlTree(){cov_57vuh9v2e().f[706]++;cov_57vuh9v2e().s[1784]++;return this.stateManager.getCurrentUrlTree();}get rawUrlTree(){cov_57vuh9v2e().f[707]++;cov_57vuh9v2e().s[1785]++;return this.stateManager.getRawUrlTree();}disposed=(cov_57vuh9v2e().s[1786]++,!1);nonRouterCurrentEntryChangeSubscription;console=(cov_57vuh9v2e().s[1787]++,h(Ar));stateManager=(cov_57vuh9v2e().s[1788]++,h(Jt));options=(cov_57vuh9v2e().s[1789]++,(cov_57vuh9v2e().b[633][0]++,h(re,{optional:!0}))||(cov_57vuh9v2e().b[633][1]++,{}));pendingTasks=(cov_57vuh9v2e().s[1790]++,h(gr));urlUpdateStrategy=(cov_57vuh9v2e().s[1791]++,(cov_57vuh9v2e().b[634][0]++,this.options.urlUpdateStrategy)||(cov_57vuh9v2e().b[634][1]++,"deferred"));navigationTransitions=(cov_57vuh9v2e().s[1792]++,h(Zt));urlSerializer=(cov_57vuh9v2e().s[1793]++,h(ne));location=(cov_57vuh9v2e().s[1794]++,h(ge));urlHandlingStrategy=(cov_57vuh9v2e().s[1795]++,h(Kt));injector=(cov_57vuh9v2e().s[1796]++,h(Y));_events=(cov_57vuh9v2e().s[1797]++,new se());get events(){cov_57vuh9v2e().f[708]++;cov_57vuh9v2e().s[1798]++;return this._events;}get routerState(){cov_57vuh9v2e().f[709]++;cov_57vuh9v2e().s[1799]++;return this.stateManager.getRouterState();}navigated=(cov_57vuh9v2e().s[1800]++,!1);routeReuseStrategy=(cov_57vuh9v2e().s[1801]++,h(Ki));injectorCleanup=(cov_57vuh9v2e().s[1802]++,h(Qi,{optional:!0}));onSameUrlNavigation=(cov_57vuh9v2e().s[1803]++,(cov_57vuh9v2e().b[635][0]++,this.options.onSameUrlNavigation)||(cov_57vuh9v2e().b[635][1]++,"ignore"));config=(cov_57vuh9v2e().s[1804]++,(cov_57vuh9v2e().b[636][0]++,h(fe,{optional:!0})?.flat())??(cov_57vuh9v2e().b[636][1]++,[]));componentInputBindingEnabled=(cov_57vuh9v2e().s[1805]++,!!h(tt,{optional:!0}));currentNavigation=(cov_57vuh9v2e().s[1806]++,this.navigationTransitions.currentNavigation.asReadonly());constructor(){cov_57vuh9v2e().f[710]++;cov_57vuh9v2e().s[1807]++;this.resetConfig(this.config),this.navigationTransitions.setupNavigations(this).subscribe({error:e=>{cov_57vuh9v2e().f[711]++;}}),this.subscribeToNavigationEvents();}eventsSubscription=(cov_57vuh9v2e().s[1808]++,new rr());subscribeToNavigationEvents(){cov_57vuh9v2e().f[712]++;let e=(cov_57vuh9v2e().s[1809]++,this.navigationTransitions.events.subscribe(n=>{cov_57vuh9v2e().f[713]++;cov_57vuh9v2e().s[1810]++;try{let i=(cov_57vuh9v2e().s[1811]++,this.navigationTransitions.currentTransition),o=(cov_57vuh9v2e().s[1812]++,w(this.navigationTransitions.currentNavigation));cov_57vuh9v2e().s[1813]++;if((cov_57vuh9v2e().b[638][0]++,i!==null)&&(cov_57vuh9v2e().b[638][1]++,o!==null)){cov_57vuh9v2e().b[637][0]++;cov_57vuh9v2e().s[1814]++;if(this.stateManager.handleRouterEvent(n,o),(cov_57vuh9v2e().b[640][0]++,n instanceof x)&&(cov_57vuh9v2e().b[640][1]++,n.code!==I.Redirect)&&(cov_57vuh9v2e().b[640][2]++,n.code!==I.SupersededByNewNavigation)){cov_57vuh9v2e().b[639][0]++;cov_57vuh9v2e().s[1815]++;this.navigated=!0;}else{cov_57vuh9v2e().b[639][1]++;cov_57vuh9v2e().s[1816]++;if(n instanceof P){cov_57vuh9v2e().b[641][0]++;cov_57vuh9v2e().s[1817]++;this.navigated=!0,this.injectorCleanup?.(this.routeReuseStrategy,this.routerState,this.config);}else{cov_57vuh9v2e().b[641][1]++;cov_57vuh9v2e().s[1818]++;if(n instanceof Ee){cov_57vuh9v2e().b[642][0]++;let s=(cov_57vuh9v2e().s[1819]++,n.navigationBehaviorOptions),a=(cov_57vuh9v2e().s[1820]++,this.urlHandlingStrategy.merge(n.url,i.currentRawUrl)),c=(cov_57vuh9v2e().s[1821]++,d({scroll:i.extras.scroll,browserUrl:i.extras.browserUrl,info:i.extras.info,skipLocationChange:i.extras.skipLocationChange,replaceUrl:(cov_57vuh9v2e().b[643][0]++,i.extras.replaceUrl)||(cov_57vuh9v2e().b[643][1]++,this.urlUpdateStrategy==="eager")||(cov_57vuh9v2e().b[643][2]++,ea(i.source))},s));cov_57vuh9v2e().s[1822]++;this.scheduleNavigation(a,ye,null,c,{resolve:i.resolve,reject:i.reject,promise:i.promise});}else{cov_57vuh9v2e().b[642][1]++;}}}}else{cov_57vuh9v2e().b[637][1]++;}cov_57vuh9v2e().s[1823]++;(cov_57vuh9v2e().b[644][0]++,ts(n))&&(cov_57vuh9v2e().b[644][1]++,this._events.next(n));}catch(i){cov_57vuh9v2e().s[1824]++;this.navigationTransitions.transitionAbortWithErrorSubject.next(i);}}));cov_57vuh9v2e().s[1825]++;this.eventsSubscription.add(e);}resetRootComponentType(e){cov_57vuh9v2e().f[714]++;cov_57vuh9v2e().s[1826]++;this.routerState.root.component=e,this.navigationTransitions.rootComponentType=e;}initialNavigation(){cov_57vuh9v2e().f[715]++;cov_57vuh9v2e().s[1827]++;this.setUpLocationChangeListener(),(cov_57vuh9v2e().b[645][0]++,this.navigationTransitions.hasRequestedNavigation)||(cov_57vuh9v2e().b[645][1]++,this.navigateToSyncWithBrowser(this.location.path(!0),ye,this.stateManager.restoredState(),{replaceUrl:!0}));}setUpLocationChangeListener(){cov_57vuh9v2e().f[716]++;cov_57vuh9v2e().s[1828]++;this.nonRouterCurrentEntryChangeSubscription??=this.stateManager.registerNonRouterCurrentEntryChangeListener((e,n,i,o)=>{cov_57vuh9v2e().f[717]++;cov_57vuh9v2e().s[1829]++;this.navigateToSyncWithBrowser(e,i,n,o);});}navigateToSyncWithBrowser(e,n,i,o){cov_57vuh9v2e().f[718]++;let s=(cov_57vuh9v2e().s[1830]++,i?.navigationId?(cov_57vuh9v2e().b[646][0]++,i):(cov_57vuh9v2e().b[646][1]++,null));cov_57vuh9v2e().s[1831]++;if(i){cov_57vuh9v2e().b[647][0]++;let c=(cov_57vuh9v2e().s[1832]++,d({},i));cov_57vuh9v2e().s[1833]++;delete c.navigationId,delete c.ɵrouterPageId,(cov_57vuh9v2e().b[648][0]++,Object.keys(c).length!==0)&&(cov_57vuh9v2e().b[648][1]++,o.state=c);}else{cov_57vuh9v2e().b[647][1]++;}let a=(cov_57vuh9v2e().s[1834]++,this.parseUrl(e));cov_57vuh9v2e().s[1835]++;this.scheduleNavigation(a,n,s,o).catch(c=>{cov_57vuh9v2e().f[719]++;cov_57vuh9v2e().s[1836]++;(cov_57vuh9v2e().b[649][0]++,this.disposed)||(cov_57vuh9v2e().b[649][1]++,this.injector.get(dt)(c));});}get url(){cov_57vuh9v2e().f[720]++;cov_57vuh9v2e().s[1837]++;return this.serializeUrl(this.currentUrlTree);}getCurrentNavigation(){cov_57vuh9v2e().f[721]++;cov_57vuh9v2e().s[1838]++;return w(this.navigationTransitions.currentNavigation);}get lastSuccessfulNavigation(){cov_57vuh9v2e().f[722]++;cov_57vuh9v2e().s[1839]++;return this.navigationTransitions.lastSuccessfulNavigation;}resetConfig(e){cov_57vuh9v2e().f[723]++;cov_57vuh9v2e().s[1840]++;this.config=e.map(Kn),this.navigated=!1;}ngOnDestroy(){cov_57vuh9v2e().f[724]++;cov_57vuh9v2e().s[1841]++;this.dispose();}dispose(){cov_57vuh9v2e().f[725]++;cov_57vuh9v2e().s[1842]++;this._events.unsubscribe(),this.navigationTransitions.complete(),this.nonRouterCurrentEntryChangeSubscription?.unsubscribe(),this.nonRouterCurrentEntryChangeSubscription=void 0,this.disposed=!0,this.eventsSubscription.unsubscribe();}createUrlTree(e,n=(cov_57vuh9v2e().b[650][0]++,{})){cov_57vuh9v2e().f[726]++;let{relativeTo:i,queryParams:o,fragment:s,queryParamsHandling:a,preserveFragment:c}=(cov_57vuh9v2e().s[1843]++,n),u=(cov_57vuh9v2e().s[1844]++,c?(cov_57vuh9v2e().b[651][0]++,this.currentUrlTree.fragment):(cov_57vuh9v2e().b[651][1]++,s)),l=(cov_57vuh9v2e().s[1845]++,null);cov_57vuh9v2e().s[1846]++;switch((cov_57vuh9v2e().b[653][0]++,a)??(cov_57vuh9v2e().b[653][1]++,this.options.defaultQueryParamsHandling)){case"merge":cov_57vuh9v2e().b[652][0]++;cov_57vuh9v2e().s[1847]++;l=d(d({},this.currentUrlTree.queryParams),o);cov_57vuh9v2e().s[1848]++;break;case"preserve":cov_57vuh9v2e().b[652][1]++;cov_57vuh9v2e().s[1849]++;l=this.currentUrlTree.queryParams;cov_57vuh9v2e().s[1850]++;break;default:cov_57vuh9v2e().b[652][2]++;cov_57vuh9v2e().s[1851]++;l=(cov_57vuh9v2e().b[654][0]++,o)||(cov_57vuh9v2e().b[654][1]++,null);}cov_57vuh9v2e().s[1852]++;(cov_57vuh9v2e().b[655][0]++,l!==null)&&(cov_57vuh9v2e().b[655][1]++,l=this.removeEmptyProps(l));let f;cov_57vuh9v2e().s[1853]++;try{let R=(cov_57vuh9v2e().s[1854]++,i?(cov_57vuh9v2e().b[656][0]++,i.snapshot):(cov_57vuh9v2e().b[656][1]++,this.routerState.snapshot.root));cov_57vuh9v2e().s[1855]++;f=bi(R);}catch{cov_57vuh9v2e().s[1856]++;((cov_57vuh9v2e().b[657][0]++,typeof e[0]!="string")||(cov_57vuh9v2e().b[657][1]++,e[0][0]!=="/"))&&(cov_57vuh9v2e().b[657][2]++,e=[]),f=this.currentUrlTree.root;}cov_57vuh9v2e().s[1857]++;return Mi(f,e,l,(cov_57vuh9v2e().b[658][0]++,u)??(cov_57vuh9v2e().b[658][1]++,null),this.urlSerializer);}navigateByUrl(e,n=(cov_57vuh9v2e().b[659][0]++,{skipLocationChange:!1})){cov_57vuh9v2e().f[727]++;let i=(cov_57vuh9v2e().s[1858]++,ee(e)?(cov_57vuh9v2e().b[660][0]++,e):(cov_57vuh9v2e().b[660][1]++,this.parseUrl(e))),o=(cov_57vuh9v2e().s[1859]++,this.urlHandlingStrategy.merge(i,this.rawUrlTree));cov_57vuh9v2e().s[1860]++;return this.scheduleNavigation(o,ye,null,n);}navigate(e,n=(cov_57vuh9v2e().b[661][0]++,{skipLocationChange:!1})){cov_57vuh9v2e().f[728]++;cov_57vuh9v2e().s[1861]++;return ra(e),this.navigateByUrl(this.createUrlTree(e,n),n);}serializeUrl(e){cov_57vuh9v2e().f[729]++;cov_57vuh9v2e().s[1862]++;return this.urlSerializer.serialize(e);}parseUrl(e){cov_57vuh9v2e().f[730]++;cov_57vuh9v2e().s[1863]++;try{cov_57vuh9v2e().s[1864]++;return this.urlSerializer.parse(e);}catch{cov_57vuh9v2e().s[1865]++;return this.console.warn(dr(4018,!1)),this.urlSerializer.parse("/");}}isActive(e,n){cov_57vuh9v2e().f[731]++;let i;cov_57vuh9v2e().s[1866]++;if(n===!0?(cov_57vuh9v2e().b[663][0]++,i=d({},Bn)):(cov_57vuh9v2e().b[663][1]++,n===!1?(cov_57vuh9v2e().b[664][0]++,i=d({},Ge)):(cov_57vuh9v2e().b[664][1]++,i=d(d({},Ge),n))),ee(e)){cov_57vuh9v2e().b[662][0]++;cov_57vuh9v2e().s[1867]++;return _n(this.currentUrlTree,e,i);}else{cov_57vuh9v2e().b[662][1]++;}let o=(cov_57vuh9v2e().s[1868]++,this.parseUrl(e));cov_57vuh9v2e().s[1869]++;return _n(this.currentUrlTree,o,i);}removeEmptyProps(e){cov_57vuh9v2e().f[732]++;cov_57vuh9v2e().s[1870]++;return Object.entries(e).reduce((n,[i,o])=>{cov_57vuh9v2e().f[733]++;cov_57vuh9v2e().s[1871]++;return(cov_57vuh9v2e().b[665][0]++,o!=null)&&(cov_57vuh9v2e().b[665][1]++,n[i]=o),n;},{});}scheduleNavigation(e,n,i,o,s){cov_57vuh9v2e().f[734]++;cov_57vuh9v2e().s[1872]++;if(this.disposed){cov_57vuh9v2e().b[666][0]++;cov_57vuh9v2e().s[1873]++;return Promise.resolve(!1);}else{cov_57vuh9v2e().b[666][1]++;}let a,c,u;cov_57vuh9v2e().s[1874]++;s?(cov_57vuh9v2e().b[667][0]++,a=s.resolve,c=s.reject,u=s.promise):(cov_57vuh9v2e().b[667][1]++,u=new Promise((f,R)=>{cov_57vuh9v2e().f[735]++;cov_57vuh9v2e().s[1875]++;a=f,c=R;}));let l=(cov_57vuh9v2e().s[1876]++,this.pendingTasks.add());cov_57vuh9v2e().s[1877]++;return Xt(this,()=>{cov_57vuh9v2e().f[736]++;cov_57vuh9v2e().s[1878]++;queueMicrotask(()=>{cov_57vuh9v2e().f[737]++;cov_57vuh9v2e().s[1879]++;return this.pendingTasks.remove(l);});}),this.navigationTransitions.handleNavigationRequest({source:n,restoredState:i,currentUrlTree:this.currentUrlTree,currentRawUrl:this.currentUrlTree,rawUrl:e,extras:o,resolve:a,reject:c,promise:u,currentSnapshot:this.routerState.snapshot,currentRouterState:this.routerState}),u.catch(Promise.reject.bind(Promise));}static ɵfac=(cov_57vuh9v2e().s[1880]++,function(n){cov_57vuh9v2e().f[738]++;cov_57vuh9v2e().s[1881]++;return new((cov_57vuh9v2e().b[668][0]++,n)||(cov_57vuh9v2e().b[668][1]++,t))();});static ɵprov=(cov_57vuh9v2e().s[1882]++,m({token:t,factory:t.ɵfac,providedIn:"root"}));}cov_57vuh9v2e().s[1883]++;return t;})());function ra(t){cov_57vuh9v2e().f[739]++;cov_57vuh9v2e().s[1884]++;for(let r=(cov_57vuh9v2e().s[1885]++,0);r{cov_57vuh9v2e().f[740]++;class t{router=(cov_57vuh9v2e().s[1889]++,h($));stateManager=(cov_57vuh9v2e().s[1890]++,h(Jt));fragment=(cov_57vuh9v2e().s[1891]++,b(""));queryParams=(cov_57vuh9v2e().s[1892]++,b({}));path=(cov_57vuh9v2e().s[1893]++,b(""));serializer=(cov_57vuh9v2e().s[1894]++,h(ne));constructor(){cov_57vuh9v2e().f[741]++;cov_57vuh9v2e().s[1895]++;this.updateState(),this.router.events?.subscribe(e=>{cov_57vuh9v2e().f[742]++;cov_57vuh9v2e().s[1896]++;(cov_57vuh9v2e().b[670][0]++,e instanceof P)&&(cov_57vuh9v2e().b[670][1]++,this.updateState());});}updateState(){cov_57vuh9v2e().f[743]++;let{fragment:e,root:n,queryParams:i}=(cov_57vuh9v2e().s[1897]++,this.stateManager.getCurrentUrlTree());cov_57vuh9v2e().s[1898]++;this.fragment.set(e),this.queryParams.set(i),this.path.set(this.serializer.serialize(new D(n)));}static ɵfac=(cov_57vuh9v2e().s[1899]++,function(n){cov_57vuh9v2e().f[744]++;cov_57vuh9v2e().s[1900]++;return new((cov_57vuh9v2e().b[671][0]++,n)||(cov_57vuh9v2e().b[671][1]++,t))();});static ɵprov=(cov_57vuh9v2e().s[1901]++,m({token:t,factory:t.ɵfac,providedIn:"root"}));}cov_57vuh9v2e().s[1902]++;return t;})()),en=(cov_57vuh9v2e().s[1903]++,(()=>{cov_57vuh9v2e().f[745]++;class t{router;route;tabIndexAttribute;renderer;el;locationStrategy;hrefAttributeValue=(cov_57vuh9v2e().s[1904]++,h(new $r("href"),{optional:!0}));reactiveHref=(cov_57vuh9v2e().s[1905]++,Hr(()=>{cov_57vuh9v2e().f[746]++;cov_57vuh9v2e().s[1906]++;return this.isAnchorElement?(cov_57vuh9v2e().b[672][0]++,this.computeHref(this._urlTree())):(cov_57vuh9v2e().b[672][1]++,this.hrefAttributeValue);}));get href(){cov_57vuh9v2e().f[747]++;cov_57vuh9v2e().s[1907]++;return w(this.reactiveHref);}set href(e){cov_57vuh9v2e().f[748]++;cov_57vuh9v2e().s[1908]++;this.reactiveHref.set(e);}set target(e){cov_57vuh9v2e().f[749]++;cov_57vuh9v2e().s[1909]++;this._target.set(e);}get target(){cov_57vuh9v2e().f[750]++;cov_57vuh9v2e().s[1910]++;return w(this._target);}_target=(cov_57vuh9v2e().s[1911]++,b(void 0));set queryParams(e){cov_57vuh9v2e().f[751]++;cov_57vuh9v2e().s[1912]++;this._queryParams.set(e);}get queryParams(){cov_57vuh9v2e().f[752]++;cov_57vuh9v2e().s[1913]++;return w(this._queryParams);}_queryParams=(cov_57vuh9v2e().s[1914]++,b(void 0,{equal:()=>{cov_57vuh9v2e().f[753]++;cov_57vuh9v2e().s[1915]++;return!1;}}));set fragment(e){cov_57vuh9v2e().f[754]++;cov_57vuh9v2e().s[1916]++;this._fragment.set(e);}get fragment(){cov_57vuh9v2e().f[755]++;cov_57vuh9v2e().s[1917]++;return w(this._fragment);}_fragment=(cov_57vuh9v2e().s[1918]++,b(void 0));set queryParamsHandling(e){cov_57vuh9v2e().f[756]++;cov_57vuh9v2e().s[1919]++;this._queryParamsHandling.set(e);}get queryParamsHandling(){cov_57vuh9v2e().f[757]++;cov_57vuh9v2e().s[1920]++;return w(this._queryParamsHandling);}_queryParamsHandling=(cov_57vuh9v2e().s[1921]++,b(void 0));set state(e){cov_57vuh9v2e().f[758]++;cov_57vuh9v2e().s[1922]++;this._state.set(e);}get state(){cov_57vuh9v2e().f[759]++;cov_57vuh9v2e().s[1923]++;return w(this._state);}_state=(cov_57vuh9v2e().s[1924]++,b(void 0,{equal:()=>{cov_57vuh9v2e().f[760]++;cov_57vuh9v2e().s[1925]++;return!1;}}));set info(e){cov_57vuh9v2e().f[761]++;cov_57vuh9v2e().s[1926]++;this._info.set(e);}get info(){cov_57vuh9v2e().f[762]++;cov_57vuh9v2e().s[1927]++;return w(this._info);}_info=(cov_57vuh9v2e().s[1928]++,b(void 0,{equal:()=>{cov_57vuh9v2e().f[763]++;cov_57vuh9v2e().s[1929]++;return!1;}}));set relativeTo(e){cov_57vuh9v2e().f[764]++;cov_57vuh9v2e().s[1930]++;this._relativeTo.set(e);}get relativeTo(){cov_57vuh9v2e().f[765]++;cov_57vuh9v2e().s[1931]++;return w(this._relativeTo);}_relativeTo=(cov_57vuh9v2e().s[1932]++,b(void 0));set preserveFragment(e){cov_57vuh9v2e().f[766]++;cov_57vuh9v2e().s[1933]++;this._preserveFragment.set(e);}get preserveFragment(){cov_57vuh9v2e().f[767]++;cov_57vuh9v2e().s[1934]++;return w(this._preserveFragment);}_preserveFragment=(cov_57vuh9v2e().s[1935]++,b(!1));set skipLocationChange(e){cov_57vuh9v2e().f[768]++;cov_57vuh9v2e().s[1936]++;this._skipLocationChange.set(e);}get skipLocationChange(){cov_57vuh9v2e().f[769]++;cov_57vuh9v2e().s[1937]++;return w(this._skipLocationChange);}_skipLocationChange=(cov_57vuh9v2e().s[1938]++,b(!1));set replaceUrl(e){cov_57vuh9v2e().f[770]++;cov_57vuh9v2e().s[1939]++;this._replaceUrl.set(e);}get replaceUrl(){cov_57vuh9v2e().f[771]++;cov_57vuh9v2e().s[1940]++;return w(this._replaceUrl);}_replaceUrl=(cov_57vuh9v2e().s[1941]++,b(!1));isAnchorElement;onChanges=(cov_57vuh9v2e().s[1942]++,new se());applicationErrorHandler=(cov_57vuh9v2e().s[1943]++,h(dt));options=(cov_57vuh9v2e().s[1944]++,h(re,{optional:!0}));reactiveRouterState=(cov_57vuh9v2e().s[1945]++,h(ia));constructor(e,n,i,o,s,a){cov_57vuh9v2e().f[772]++;cov_57vuh9v2e().s[1946]++;this.router=e,this.route=n,this.tabIndexAttribute=i,this.renderer=o,this.el=s,this.locationStrategy=a;let c=(cov_57vuh9v2e().s[1947]++,s.nativeElement.tagName?.toLowerCase());cov_57vuh9v2e().s[1948]++;this.isAnchorElement=(cov_57vuh9v2e().b[673][0]++,c==="a")||(cov_57vuh9v2e().b[673][1]++,c==="area")||(cov_57vuh9v2e().b[673][2]++,!!((cov_57vuh9v2e().b[674][0]++,typeof customElements=="object")&&(cov_57vuh9v2e().b[674][1]++,customElements.get(c)?.observedAttributes?.includes?.("href"))));}setTabIndexIfNotOnNativeEl(e){cov_57vuh9v2e().f[773]++;cov_57vuh9v2e().s[1949]++;(cov_57vuh9v2e().b[675][0]++,this.tabIndexAttribute!=null)||(cov_57vuh9v2e().b[675][1]++,this.isAnchorElement)||(cov_57vuh9v2e().b[675][2]++,this.applyAttributeValue("tabindex",e));}ngOnChanges(e){cov_57vuh9v2e().f[774]++;cov_57vuh9v2e().s[1950]++;this.onChanges.next(this);}routerLinkInput=(cov_57vuh9v2e().s[1951]++,b(null));set routerLink(e){cov_57vuh9v2e().f[775]++;cov_57vuh9v2e().s[1952]++;e==null?(cov_57vuh9v2e().b[676][0]++,this.routerLinkInput.set(null),this.setTabIndexIfNotOnNativeEl(null)):(cov_57vuh9v2e().b[676][1]++,ee(e)?(cov_57vuh9v2e().b[677][0]++,this.routerLinkInput.set(e)):(cov_57vuh9v2e().b[677][1]++,this.routerLinkInput.set(Array.isArray(e)?(cov_57vuh9v2e().b[678][0]++,e):(cov_57vuh9v2e().b[678][1]++,[e]))),this.setTabIndexIfNotOnNativeEl("0"));}onClick(e,n,i,o,s){cov_57vuh9v2e().f[776]++;let a=(cov_57vuh9v2e().s[1953]++,this._urlTree());cov_57vuh9v2e().s[1954]++;if((cov_57vuh9v2e().b[680][0]++,a===null)||(cov_57vuh9v2e().b[680][1]++,this.isAnchorElement)&&((cov_57vuh9v2e().b[680][2]++,e!==0)||(cov_57vuh9v2e().b[680][3]++,n)||(cov_57vuh9v2e().b[680][4]++,i)||(cov_57vuh9v2e().b[680][5]++,o)||(cov_57vuh9v2e().b[680][6]++,s)||(cov_57vuh9v2e().b[680][7]++,typeof this.target=="string")&&(cov_57vuh9v2e().b[680][8]++,this.target!="_self"))){cov_57vuh9v2e().b[679][0]++;cov_57vuh9v2e().s[1955]++;return!0;}else{cov_57vuh9v2e().b[679][1]++;}let c=(cov_57vuh9v2e().s[1956]++,{skipLocationChange:this.skipLocationChange,replaceUrl:this.replaceUrl,state:this.state,info:this.info});cov_57vuh9v2e().s[1957]++;return this.router.navigateByUrl(a,c)?.catch(u=>{cov_57vuh9v2e().f[777]++;cov_57vuh9v2e().s[1958]++;this.applicationErrorHandler(u);}),!this.isAnchorElement;}ngOnDestroy(){cov_57vuh9v2e().f[778]++;}applyAttributeValue(e,n){cov_57vuh9v2e().f[779]++;let i=(cov_57vuh9v2e().s[1959]++,this.renderer),o=(cov_57vuh9v2e().s[1960]++,this.el.nativeElement);cov_57vuh9v2e().s[1961]++;n!==null?(cov_57vuh9v2e().b[681][0]++,i.setAttribute(o,e,n)):(cov_57vuh9v2e().b[681][1]++,i.removeAttribute(o,e));}_urlTree=(cov_57vuh9v2e().s[1962]++,vt(()=>{cov_57vuh9v2e().f[780]++;cov_57vuh9v2e().s[1963]++;this.reactiveRouterState.path(),(cov_57vuh9v2e().b[682][0]++,this._preserveFragment())&&(cov_57vuh9v2e().b[682][1]++,this.reactiveRouterState.fragment());cov_57vuh9v2e().s[1964]++;let e=i=>{cov_57vuh9v2e().f[781]++;cov_57vuh9v2e().s[1965]++;return(cov_57vuh9v2e().b[683][0]++,i==="preserve")||(cov_57vuh9v2e().b[683][1]++,i==="merge");};cov_57vuh9v2e().s[1966]++;((cov_57vuh9v2e().b[684][0]++,e(this._queryParamsHandling()))||(cov_57vuh9v2e().b[684][1]++,e(this.options?.defaultQueryParamsHandling)))&&(cov_57vuh9v2e().b[684][2]++,this.reactiveRouterState.queryParams());let n=(cov_57vuh9v2e().s[1967]++,this.routerLinkInput());cov_57vuh9v2e().s[1968]++;return(cov_57vuh9v2e().b[686][0]++,n===null)||(cov_57vuh9v2e().b[686][1]++,!this.router.createUrlTree)?(cov_57vuh9v2e().b[685][0]++,null):(cov_57vuh9v2e().b[685][1]++,ee(n)?(cov_57vuh9v2e().b[687][0]++,n):(cov_57vuh9v2e().b[687][1]++,this.router.createUrlTree(n,{relativeTo:this._relativeTo()!==void 0?(cov_57vuh9v2e().b[688][0]++,this._relativeTo()):(cov_57vuh9v2e().b[688][1]++,this.route),queryParams:this._queryParams(),fragment:this._fragment(),queryParamsHandling:this._queryParamsHandling(),preserveFragment:this._preserveFragment()})));},{equal:(e,n)=>{cov_57vuh9v2e().f[782]++;cov_57vuh9v2e().s[1969]++;return this.computeHref(e)===this.computeHref(n);}}));get urlTree(){cov_57vuh9v2e().f[783]++;cov_57vuh9v2e().s[1970]++;return w(this._urlTree);}computeHref(e){cov_57vuh9v2e().f[784]++;cov_57vuh9v2e().s[1971]++;return(cov_57vuh9v2e().b[690][0]++,e!==null)&&(cov_57vuh9v2e().b[690][1]++,this.locationStrategy)?(cov_57vuh9v2e().b[689][0]++,(cov_57vuh9v2e().b[691][0]++,this.locationStrategy?.prepareExternalUrl(this.router.serializeUrl(e)))??(cov_57vuh9v2e().b[691][1]++,"")):(cov_57vuh9v2e().b[689][1]++,null);}static ɵfac=(cov_57vuh9v2e().s[1972]++,function(n){cov_57vuh9v2e().f[785]++;cov_57vuh9v2e().s[1973]++;return new((cov_57vuh9v2e().b[692][0]++,n)||(cov_57vuh9v2e().b[692][1]++,t))(F($),F(G),vr("tabindex"),F(fn),F(un),F(je));});static ɵdir=(cov_57vuh9v2e().s[1974]++,Le({type:t,selectors:[["","routerLink",""]],hostVars:2,hostBindings:function(n,i){cov_57vuh9v2e().f[786]++;cov_57vuh9v2e().s[1975]++;(cov_57vuh9v2e().b[693][0]++,n&1)&&(cov_57vuh9v2e().b[693][1]++,Ur("click",function(s){cov_57vuh9v2e().f[787]++;cov_57vuh9v2e().s[1976]++;return i.onClick(s.button,s.ctrlKey,s.shiftKey,s.altKey,s.metaKey);})),(cov_57vuh9v2e().b[694][0]++,n&2)&&(cov_57vuh9v2e().b[694][1]++,Nr("href",i.reactiveHref(),Sr)("target",i._target()));},inputs:{target:"target",queryParams:"queryParams",fragment:"fragment",queryParamsHandling:"queryParamsHandling",state:"state",info:"info",relativeTo:"relativeTo",preserveFragment:[2,"preserveFragment","preserveFragment",yt],skipLocationChange:[2,"skipLocationChange","skipLocationChange",yt],replaceUrl:[2,"replaceUrl","replaceUrl",yt],routerLink:"routerLink"},features:[Pe]}));}cov_57vuh9v2e().s[1977]++;return t;})()),oa=(cov_57vuh9v2e().s[1978]++,(()=>{cov_57vuh9v2e().f[788]++;class t{router;element;renderer;cdr;links;classes=(cov_57vuh9v2e().s[1979]++,[]);routerEventsSubscription;linkInputChangesSubscription;_isActive=(cov_57vuh9v2e().s[1980]++,!1);get isActive(){cov_57vuh9v2e().f[789]++;cov_57vuh9v2e().s[1981]++;return this._isActive;}routerLinkActiveOptions=(cov_57vuh9v2e().s[1982]++,{exact:!1});ariaCurrentWhenActive;isActiveChange=(cov_57vuh9v2e().s[1983]++,new ae());link=(cov_57vuh9v2e().s[1984]++,h(en,{optional:!0}));constructor(e,n,i,o){cov_57vuh9v2e().f[790]++;cov_57vuh9v2e().s[1985]++;this.router=e,this.element=n,this.renderer=i,this.cdr=o,this.routerEventsSubscription=e.events.subscribe(s=>{cov_57vuh9v2e().f[791]++;cov_57vuh9v2e().s[1986]++;(cov_57vuh9v2e().b[695][0]++,s instanceof P)&&(cov_57vuh9v2e().b[695][1]++,this.update());});}ngAfterContentInit(){cov_57vuh9v2e().f[792]++;cov_57vuh9v2e().s[1987]++;g(this.links.changes,g(null)).pipe(_e()).subscribe(e=>{cov_57vuh9v2e().f[793]++;cov_57vuh9v2e().s[1988]++;this.update(),this.subscribeToEachLinkOnChanges();});}subscribeToEachLinkOnChanges(){cov_57vuh9v2e().f[794]++;cov_57vuh9v2e().s[1989]++;this.linkInputChangesSubscription?.unsubscribe();let e=(cov_57vuh9v2e().s[1990]++,[...this.links.toArray(),this.link].filter(n=>{cov_57vuh9v2e().f[795]++;cov_57vuh9v2e().s[1991]++;return!!n;}).map(n=>{cov_57vuh9v2e().f[796]++;cov_57vuh9v2e().s[1992]++;return n.onChanges;}));cov_57vuh9v2e().s[1993]++;this.linkInputChangesSubscription=M(e).pipe(_e()).subscribe(n=>{cov_57vuh9v2e().f[797]++;cov_57vuh9v2e().s[1994]++;(cov_57vuh9v2e().b[696][0]++,this._isActive!==this.isLinkActive(this.router)(n))&&(cov_57vuh9v2e().b[696][1]++,this.update());});}set routerLinkActive(e){cov_57vuh9v2e().f[798]++;let n=(cov_57vuh9v2e().s[1995]++,Array.isArray(e)?(cov_57vuh9v2e().b[697][0]++,e):(cov_57vuh9v2e().b[697][1]++,e.split(" ")));cov_57vuh9v2e().s[1996]++;this.classes=n.filter(i=>{cov_57vuh9v2e().f[799]++;cov_57vuh9v2e().s[1997]++;return!!i;});}ngOnChanges(e){cov_57vuh9v2e().f[800]++;cov_57vuh9v2e().s[1998]++;this.update();}ngOnDestroy(){cov_57vuh9v2e().f[801]++;cov_57vuh9v2e().s[1999]++;this.routerEventsSubscription.unsubscribe(),this.linkInputChangesSubscription?.unsubscribe();}update(){cov_57vuh9v2e().f[802]++;cov_57vuh9v2e().s[2000]++;(cov_57vuh9v2e().b[698][0]++,!this.links)||(cov_57vuh9v2e().b[698][1]++,!this.router.navigated)||(cov_57vuh9v2e().b[698][2]++,queueMicrotask(()=>{cov_57vuh9v2e().f[803]++;let e=(cov_57vuh9v2e().s[2001]++,this.hasActiveLinks());cov_57vuh9v2e().s[2002]++;this.classes.forEach(n=>{cov_57vuh9v2e().f[804]++;cov_57vuh9v2e().s[2003]++;e?(cov_57vuh9v2e().b[699][0]++,this.renderer.addClass(this.element.nativeElement,n)):(cov_57vuh9v2e().b[699][1]++,this.renderer.removeClass(this.element.nativeElement,n));}),(cov_57vuh9v2e().b[701][0]++,e)&&(cov_57vuh9v2e().b[701][1]++,this.ariaCurrentWhenActive!==void 0)?(cov_57vuh9v2e().b[700][0]++,this.renderer.setAttribute(this.element.nativeElement,"aria-current",this.ariaCurrentWhenActive.toString())):(cov_57vuh9v2e().b[700][1]++,this.renderer.removeAttribute(this.element.nativeElement,"aria-current")),(cov_57vuh9v2e().b[702][0]++,this._isActive!==e)&&(cov_57vuh9v2e().b[702][1]++,this._isActive=e,this.cdr.markForCheck(),this.isActiveChange.emit(e));}));}isLinkActive(e){cov_57vuh9v2e().f[805]++;let n=(cov_57vuh9v2e().s[2004]++,sa(this.routerLinkActiveOptions)?(cov_57vuh9v2e().b[703][0]++,this.routerLinkActiveOptions):(cov_57vuh9v2e().b[703][1]++,(cov_57vuh9v2e().b[705][0]++,this.routerLinkActiveOptions.exact)??(cov_57vuh9v2e().b[705][1]++,!1)?(cov_57vuh9v2e().b[704][0]++,d({},Bn)):(cov_57vuh9v2e().b[704][1]++,d({},Ge))));cov_57vuh9v2e().s[2005]++;return i=>{cov_57vuh9v2e().f[806]++;let o=(cov_57vuh9v2e().s[2006]++,i.urlTree);cov_57vuh9v2e().s[2007]++;return o?(cov_57vuh9v2e().b[706][0]++,w(qn(o,e,n))):(cov_57vuh9v2e().b[706][1]++,!1);};}hasActiveLinks(){cov_57vuh9v2e().f[807]++;let e=(cov_57vuh9v2e().s[2008]++,this.isLinkActive(this.router));cov_57vuh9v2e().s[2009]++;return(cov_57vuh9v2e().b[707][0]++,this.link)&&(cov_57vuh9v2e().b[707][1]++,e(this.link))||(cov_57vuh9v2e().b[707][2]++,this.links.some(e));}static ɵfac=(cov_57vuh9v2e().s[2010]++,function(n){cov_57vuh9v2e().f[808]++;cov_57vuh9v2e().s[2011]++;return new((cov_57vuh9v2e().b[708][0]++,n)||(cov_57vuh9v2e().b[708][1]++,t))(F($),F(un),F(fn),F(mt));});static ɵdir=(cov_57vuh9v2e().s[2012]++,Le({type:t,selectors:[["","routerLinkActive",""]],contentQueries:function(n,i,o){cov_57vuh9v2e().f[809]++;cov_57vuh9v2e().s[2013]++;if((cov_57vuh9v2e().b[710][0]++,n&1)&&(cov_57vuh9v2e().b[710][1]++,Lr(o,en,5)),n&2){cov_57vuh9v2e().b[709][0]++;let s;cov_57vuh9v2e().s[2014]++;(cov_57vuh9v2e().b[711][0]++,xr(s=jr()))&&(cov_57vuh9v2e().b[711][1]++,i.links=s);}else{cov_57vuh9v2e().b[709][1]++;}},inputs:{routerLinkActiveOptions:"routerLinkActiveOptions",ariaCurrentWhenActive:"ariaCurrentWhenActive",routerLinkActive:"routerLinkActive"},outputs:{isActiveChange:"isActiveChange"},exportAs:["routerLinkActive"],features:[Pe]}));}cov_57vuh9v2e().s[2015]++;return t;})());function sa(t){cov_57vuh9v2e().f[810]++;let r=(cov_57vuh9v2e().s[2016]++,t);cov_57vuh9v2e().s[2017]++;return!!((cov_57vuh9v2e().b[712][0]++,r.paths)||(cov_57vuh9v2e().b[712][1]++,r.matrixParams)||(cov_57vuh9v2e().b[712][2]++,r.queryParams)||(cov_57vuh9v2e().b[712][3]++,r.fragment));}cov_57vuh9v2e().s[2018]++;var rt=class{};var Zi=(cov_57vuh9v2e().s[2019]++,(()=>{cov_57vuh9v2e().f[811]++;class t{router;injector;preloadingStrategy;loader;subscription;constructor(e,n,i,o){cov_57vuh9v2e().f[812]++;cov_57vuh9v2e().s[2020]++;this.router=e,this.injector=n,this.preloadingStrategy=i,this.loader=o;}setUpPreloading(){cov_57vuh9v2e().f[813]++;cov_57vuh9v2e().s[2021]++;this.subscription=this.router.events.pipe(Z(e=>{cov_57vuh9v2e().f[814]++;cov_57vuh9v2e().s[2022]++;return e instanceof P;}),Oe(()=>{cov_57vuh9v2e().f[815]++;cov_57vuh9v2e().s[2023]++;return this.preload();})).subscribe(()=>{cov_57vuh9v2e().f[816]++;});}preload(){cov_57vuh9v2e().f[817]++;cov_57vuh9v2e().s[2024]++;return this.processRoutes(this.injector,this.router.config);}ngOnDestroy(){cov_57vuh9v2e().f[818]++;cov_57vuh9v2e().s[2025]++;this.subscription?.unsubscribe();}processRoutes(e,n){cov_57vuh9v2e().f[819]++;let i=(cov_57vuh9v2e().s[2026]++,[]);cov_57vuh9v2e().s[2027]++;for(let o of n){cov_57vuh9v2e().s[2028]++;(cov_57vuh9v2e().b[713][0]++,o.providers)&&(cov_57vuh9v2e().b[713][1]++,!o._injector)&&(cov_57vuh9v2e().b[713][2]++,o._injector=pt(o.providers,e,""));let s=(cov_57vuh9v2e().s[2029]++,(cov_57vuh9v2e().b[714][0]++,o._injector)??(cov_57vuh9v2e().b[714][1]++,e));cov_57vuh9v2e().s[2030]++;(cov_57vuh9v2e().b[715][0]++,o._loadedNgModuleFactory)&&(cov_57vuh9v2e().b[715][1]++,!o._loadedInjector)&&(cov_57vuh9v2e().b[715][2]++,o._loadedInjector=o._loadedNgModuleFactory.create(s).injector);let a=(cov_57vuh9v2e().s[2031]++,(cov_57vuh9v2e().b[716][0]++,o._loadedInjector)??(cov_57vuh9v2e().b[716][1]++,s));cov_57vuh9v2e().s[2032]++;((cov_57vuh9v2e().b[717][0]++,o.loadChildren)&&(cov_57vuh9v2e().b[717][1]++,!o._loadedRoutes)&&(cov_57vuh9v2e().b[717][2]++,o.canLoad===void 0)||(cov_57vuh9v2e().b[717][3]++,o.loadComponent)&&(cov_57vuh9v2e().b[717][4]++,!o._loadedComponent))&&(cov_57vuh9v2e().b[717][5]++,i.push(this.preloadConfig(s,o))),((cov_57vuh9v2e().b[718][0]++,o.children)||(cov_57vuh9v2e().b[718][1]++,o._loadedRoutes))&&(cov_57vuh9v2e().b[718][2]++,i.push(this.processRoutes(a,(cov_57vuh9v2e().b[719][0]++,o.children)??(cov_57vuh9v2e().b[719][1]++,o._loadedRoutes))));}cov_57vuh9v2e().s[2033]++;return M(i).pipe(_e());}preloadConfig(e,n){cov_57vuh9v2e().f[820]++;cov_57vuh9v2e().s[2034]++;return this.preloadingStrategy.preload(n,()=>{cov_57vuh9v2e().f[821]++;cov_57vuh9v2e().s[2035]++;if(e.destroyed){cov_57vuh9v2e().b[720][0]++;cov_57vuh9v2e().s[2036]++;return g(null);}else{cov_57vuh9v2e().b[720][1]++;}let i;cov_57vuh9v2e().s[2037]++;(cov_57vuh9v2e().b[722][0]++,n.loadChildren)&&(cov_57vuh9v2e().b[722][1]++,n.canLoad===void 0)?(cov_57vuh9v2e().b[721][0]++,i=M(this.loader.loadChildren(e,n))):(cov_57vuh9v2e().b[721][1]++,i=g(null));let o=(cov_57vuh9v2e().s[2038]++,i.pipe(z(s=>{cov_57vuh9v2e().f[822]++;cov_57vuh9v2e().s[2039]++;return s===null?(cov_57vuh9v2e().b[723][0]++,g(void 0)):(cov_57vuh9v2e().b[723][1]++,n._loadedRoutes=s.routes,n._loadedInjector=s.injector,n._loadedNgModuleFactory=s.factory,this.processRoutes((cov_57vuh9v2e().b[724][0]++,s.injector)??(cov_57vuh9v2e().b[724][1]++,e),s.routes));})));cov_57vuh9v2e().s[2040]++;if((cov_57vuh9v2e().b[726][0]++,n.loadComponent)&&(cov_57vuh9v2e().b[726][1]++,!n._loadedComponent)){cov_57vuh9v2e().b[725][0]++;let s=(cov_57vuh9v2e().s[2041]++,this.loader.loadComponent(e,n));cov_57vuh9v2e().s[2042]++;return M([o,s]).pipe(_e());}else{cov_57vuh9v2e().b[725][1]++;cov_57vuh9v2e().s[2043]++;return o;}});}static ɵfac=(cov_57vuh9v2e().s[2044]++,function(n){cov_57vuh9v2e().f[823]++;cov_57vuh9v2e().s[2045]++;return new((cov_57vuh9v2e().b[727][0]++,n)||(cov_57vuh9v2e().b[727][1]++,t))(y($),y(Y),y(rt),y(Qt));});static ɵprov=(cov_57vuh9v2e().s[2046]++,m({token:t,factory:t.ɵfac,providedIn:"root"}));}cov_57vuh9v2e().s[2047]++;return t;})()),Ji=(cov_57vuh9v2e().s[2048]++,new C("")),aa=(cov_57vuh9v2e().s[2049]++,(()=>{cov_57vuh9v2e().f[824]++;class t{options;routerEventsSubscription;scrollEventsSubscription;lastId=(cov_57vuh9v2e().s[2050]++,0);lastSource=(cov_57vuh9v2e().s[2051]++,ye);restoredId=(cov_57vuh9v2e().s[2052]++,0);store=(cov_57vuh9v2e().s[2053]++,{});urlSerializer=(cov_57vuh9v2e().s[2054]++,h(ne));zone=(cov_57vuh9v2e().s[2055]++,h(Ne));viewportScroller=(cov_57vuh9v2e().s[2056]++,h(vn));transitions=(cov_57vuh9v2e().s[2057]++,h(Zt));constructor(e){cov_57vuh9v2e().f[825]++;cov_57vuh9v2e().s[2058]++;this.options=e,this.options.scrollPositionRestoration||="disabled",this.options.anchorScrolling||="disabled";}init(){cov_57vuh9v2e().f[826]++;cov_57vuh9v2e().s[2059]++;(cov_57vuh9v2e().b[728][0]++,this.options.scrollPositionRestoration!=="disabled")&&(cov_57vuh9v2e().b[728][1]++,this.viewportScroller.setHistoryScrollRestoration("manual")),this.routerEventsSubscription=this.createScrollEvents(),this.scrollEventsSubscription=this.consumeScrollEvents();}createScrollEvents(){cov_57vuh9v2e().f[827]++;cov_57vuh9v2e().s[2060]++;return this.transitions.events.subscribe(e=>{cov_57vuh9v2e().f[828]++;cov_57vuh9v2e().s[2061]++;e instanceof te?(cov_57vuh9v2e().b[729][0]++,this.store[this.lastId]=this.viewportScroller.getScrollPosition(),this.lastSource=e.navigationTrigger,this.restoredId=e.restoredState?(cov_57vuh9v2e().b[730][0]++,e.restoredState.navigationId):(cov_57vuh9v2e().b[730][1]++,0)):(cov_57vuh9v2e().b[729][1]++,e instanceof P?(cov_57vuh9v2e().b[731][0]++,this.lastId=e.id,this.scheduleScrollEvent(e,this.urlSerializer.parse(e.urlAfterRedirects).fragment)):(cov_57vuh9v2e().b[731][1]++,(cov_57vuh9v2e().b[732][0]++,e instanceof V)&&(cov_57vuh9v2e().b[732][1]++,e.code===Se.IgnoredSameUrlNavigation)&&(cov_57vuh9v2e().b[732][2]++,this.lastSource=void 0,this.restoredId=0,this.scheduleScrollEvent(e,this.urlSerializer.parse(e.url).fragment))));});}consumeScrollEvents(){cov_57vuh9v2e().f[829]++;cov_57vuh9v2e().s[2062]++;return this.transitions.events.subscribe(e=>{cov_57vuh9v2e().f[830]++;cov_57vuh9v2e().s[2063]++;if((cov_57vuh9v2e().b[734][0]++,!(e instanceof we))||(cov_57vuh9v2e().b[734][1]++,e.scrollBehavior==="manual")){cov_57vuh9v2e().b[733][0]++;cov_57vuh9v2e().s[2064]++;return;}else{cov_57vuh9v2e().b[733][1]++;}let n=(cov_57vuh9v2e().s[2065]++,{behavior:"instant"});cov_57vuh9v2e().s[2066]++;e.position?(cov_57vuh9v2e().b[735][0]++,this.options.scrollPositionRestoration==="top"?(cov_57vuh9v2e().b[736][0]++,this.viewportScroller.scrollToPosition([0,0],n)):(cov_57vuh9v2e().b[736][1]++,(cov_57vuh9v2e().b[737][0]++,this.options.scrollPositionRestoration==="enabled")&&(cov_57vuh9v2e().b[737][1]++,this.viewportScroller.scrollToPosition(e.position,n)))):(cov_57vuh9v2e().b[735][1]++,(cov_57vuh9v2e().b[739][0]++,e.anchor)&&(cov_57vuh9v2e().b[739][1]++,this.options.anchorScrolling==="enabled")?(cov_57vuh9v2e().b[738][0]++,this.viewportScroller.scrollToAnchor(e.anchor)):(cov_57vuh9v2e().b[738][1]++,(cov_57vuh9v2e().b[740][0]++,this.options.scrollPositionRestoration!=="disabled")&&(cov_57vuh9v2e().b[740][1]++,this.viewportScroller.scrollToPosition([0,0]))));});}scheduleScrollEvent(e,n){cov_57vuh9v2e().f[831]++;let i=(cov_57vuh9v2e().s[2067]++,w(this.transitions.currentNavigation)?.extras.scroll);cov_57vuh9v2e().s[2068]++;this.zone.runOutsideAngular(async()=>{cov_57vuh9v2e().f[832]++;cov_57vuh9v2e().s[2069]++;await new Promise(o=>{cov_57vuh9v2e().f[833]++;cov_57vuh9v2e().s[2070]++;setTimeout(o),(cov_57vuh9v2e().b[741][0]++,typeof requestAnimationFrame<"u")&&(cov_57vuh9v2e().b[741][1]++,requestAnimationFrame(o));}),this.zone.run(()=>{cov_57vuh9v2e().f[834]++;cov_57vuh9v2e().s[2071]++;this.transitions.events.next(new we(e,this.lastSource==="popstate"?(cov_57vuh9v2e().b[742][0]++,this.store[this.restoredId]):(cov_57vuh9v2e().b[742][1]++,null),n,i));});});}ngOnDestroy(){cov_57vuh9v2e().f[835]++;cov_57vuh9v2e().s[2072]++;this.routerEventsSubscription?.unsubscribe(),this.scrollEventsSubscription?.unsubscribe();}static ɵfac=(cov_57vuh9v2e().s[2073]++,function(n){cov_57vuh9v2e().f[836]++;cov_57vuh9v2e().s[2074]++;Mr();});static ɵprov=(cov_57vuh9v2e().s[2075]++,m({token:t,factory:t.ɵfac}));}cov_57vuh9v2e().s[2076]++;return t;})());function ca(t,...r){cov_57vuh9v2e().f[837]++;cov_57vuh9v2e().s[2077]++;return fr([{provide:fe,multi:!0,useValue:t},[],{provide:G,useFactory:Xi},{provide:gn,multi:!0,useFactory:eo},r.map(e=>{cov_57vuh9v2e().f[838]++;cov_57vuh9v2e().s[2078]++;return e.ɵproviders;})]);}function Xi(){cov_57vuh9v2e().f[839]++;cov_57vuh9v2e().s[2079]++;return h($).routerState.root;}function it(t,r){cov_57vuh9v2e().f[840]++;cov_57vuh9v2e().s[2080]++;return{ɵkind:t,ɵproviders:r};}function eo(){cov_57vuh9v2e().f[841]++;let t=(cov_57vuh9v2e().s[2081]++,h(lt));cov_57vuh9v2e().s[2082]++;return r=>{cov_57vuh9v2e().f[842]++;let e=(cov_57vuh9v2e().s[2083]++,t.get(Or));cov_57vuh9v2e().s[2084]++;if(r!==e.components[0]){cov_57vuh9v2e().b[743][0]++;cov_57vuh9v2e().s[2085]++;return;}else{cov_57vuh9v2e().b[743][1]++;}let n=(cov_57vuh9v2e().s[2086]++,t.get($)),i=(cov_57vuh9v2e().s[2087]++,t.get(to));cov_57vuh9v2e().s[2088]++;(cov_57vuh9v2e().b[744][0]++,t.get(nr)===1)&&(cov_57vuh9v2e().b[744][1]++,n.initialNavigation()),t.get(io,null,{optional:!0})?.setUpPreloading(),t.get(Ji,null,{optional:!0})?.init(),n.resetRootComponentType(e.componentTypes[0]),(cov_57vuh9v2e().b[745][0]++,i.closed)||(cov_57vuh9v2e().b[745][1]++,i.next(),i.complete(),i.unsubscribe());};}var to=(cov_57vuh9v2e().s[2089]++,new C("",{factory:()=>{cov_57vuh9v2e().f[843]++;cov_57vuh9v2e().s[2090]++;return new se();}})),nr=(cov_57vuh9v2e().s[2091]++,new C("",{factory:()=>{cov_57vuh9v2e().f[844]++;cov_57vuh9v2e().s[2092]++;return 1;}}));function no(){cov_57vuh9v2e().f[845]++;let t=(cov_57vuh9v2e().s[2093]++,[{provide:Rr,useValue:!0},{provide:nr,useValue:0},pn(()=>{cov_57vuh9v2e().f[846]++;let r=(cov_57vuh9v2e().s[2094]++,h(lt));cov_57vuh9v2e().s[2095]++;return r.get(Gr,Promise.resolve()).then(()=>{cov_57vuh9v2e().f[847]++;cov_57vuh9v2e().s[2096]++;return new Promise(n=>{cov_57vuh9v2e().f[848]++;let i=(cov_57vuh9v2e().s[2097]++,r.get($)),o=(cov_57vuh9v2e().s[2098]++,r.get(to));cov_57vuh9v2e().s[2099]++;Xt(i,()=>{cov_57vuh9v2e().f[849]++;cov_57vuh9v2e().s[2100]++;n(!0);}),r.get(Zt).afterPreactivation=()=>{cov_57vuh9v2e().f[850]++;cov_57vuh9v2e().s[2101]++;return n(!0),o.closed?(cov_57vuh9v2e().b[746][0]++,g(void 0)):(cov_57vuh9v2e().b[746][1]++,o);},i.initialNavigation();});});})]);cov_57vuh9v2e().s[2102]++;return it(2,t);}function ro(){cov_57vuh9v2e().f[851]++;let t=(cov_57vuh9v2e().s[2103]++,[pn(()=>{cov_57vuh9v2e().f[852]++;cov_57vuh9v2e().s[2104]++;h($).setUpLocationChangeListener();}),{provide:nr,useValue:2}]);cov_57vuh9v2e().s[2105]++;return it(3,t);}var io=(cov_57vuh9v2e().s[2106]++,new C(""));function oo(t){cov_57vuh9v2e().f[853]++;cov_57vuh9v2e().s[2107]++;return it(0,[{provide:io,useExisting:Zi},{provide:rt,useExisting:t}]);}function so(){cov_57vuh9v2e().f[854]++;cov_57vuh9v2e().s[2108]++;return it(8,[Yn,{provide:tt,useExisting:Yn}]);}function ao(t){cov_57vuh9v2e().f[855]++;cov_57vuh9v2e().s[2109]++;Er("NgRouterViewTransitions");let r=(cov_57vuh9v2e().s[2110]++,[{provide:Jn,useValue:Yi},{provide:Xn,useValue:d({skipNextTransition:!!t?.skipInitialTransition},t)}]);cov_57vuh9v2e().s[2111]++;return it(9,r);}var co=(cov_57vuh9v2e().s[2112]++,[ge,{provide:ne,useClass:K},$,he,{provide:G,useFactory:Xi},Qt,[]]),ua=(cov_57vuh9v2e().s[2113]++,(()=>{cov_57vuh9v2e().f[856]++;class t{constructor(){cov_57vuh9v2e().f[857]++;}static forRoot(e,n){cov_57vuh9v2e().f[858]++;cov_57vuh9v2e().s[2114]++;return{ngModule:t,providers:[co,[],{provide:fe,multi:!0,useValue:e},[],n?.errorHandler?(cov_57vuh9v2e().b[747][0]++,{provide:er,useValue:n.errorHandler}):(cov_57vuh9v2e().b[747][1]++,[]),{provide:re,useValue:(cov_57vuh9v2e().b[748][0]++,n)||(cov_57vuh9v2e().b[748][1]++,{})},n?.useHash?(cov_57vuh9v2e().b[749][0]++,da()):(cov_57vuh9v2e().b[749][1]++,ha()),la(),n?.preloadingStrategy?(cov_57vuh9v2e().b[750][0]++,oo(n.preloadingStrategy).ɵproviders):(cov_57vuh9v2e().b[750][1]++,[]),n?.initialNavigation?(cov_57vuh9v2e().b[751][0]++,fa(n)):(cov_57vuh9v2e().b[751][1]++,[]),n?.bindToComponentInputs?(cov_57vuh9v2e().b[752][0]++,so().ɵproviders):(cov_57vuh9v2e().b[752][1]++,[]),n?.enableViewTransitions?(cov_57vuh9v2e().b[753][0]++,ao().ɵproviders):(cov_57vuh9v2e().b[753][1]++,[]),pa()]};}static forChild(e){cov_57vuh9v2e().f[859]++;cov_57vuh9v2e().s[2115]++;return{ngModule:t,providers:[{provide:fe,multi:!0,useValue:e}]};}static ɵfac=(cov_57vuh9v2e().s[2116]++,function(n){cov_57vuh9v2e().f[860]++;cov_57vuh9v2e().s[2117]++;return new((cov_57vuh9v2e().b[754][0]++,n)||(cov_57vuh9v2e().b[754][1]++,t))();});static ɵmod=(cov_57vuh9v2e().s[2118]++,gt({type:t}));static ɵinj=(cov_57vuh9v2e().s[2119]++,ut({}));}cov_57vuh9v2e().s[2120]++;return t;})());function la(){cov_57vuh9v2e().f[861]++;cov_57vuh9v2e().s[2121]++;return{provide:Ji,useFactory:()=>{cov_57vuh9v2e().f[862]++;let t=(cov_57vuh9v2e().s[2122]++,h(vn)),r=(cov_57vuh9v2e().s[2123]++,h(re));cov_57vuh9v2e().s[2124]++;return(cov_57vuh9v2e().b[755][0]++,r.scrollOffset)&&(cov_57vuh9v2e().b[755][1]++,t.setOffset(r.scrollOffset)),new aa(r);}};}function da(){cov_57vuh9v2e().f[863]++;cov_57vuh9v2e().s[2125]++;return{provide:je,useClass:Yr};}function ha(){cov_57vuh9v2e().f[864]++;cov_57vuh9v2e().s[2126]++;return{provide:je,useClass:Wr};}function fa(t){cov_57vuh9v2e().f[865]++;cov_57vuh9v2e().s[2127]++;return[t.initialNavigation==="disabled"?(cov_57vuh9v2e().b[756][0]++,ro().ɵproviders):(cov_57vuh9v2e().b[756][1]++,[]),t.initialNavigation==="enabledBlocking"?(cov_57vuh9v2e().b[757][0]++,no().ɵproviders):(cov_57vuh9v2e().b[757][1]++,[])];}var tr=(cov_57vuh9v2e().s[2128]++,new C(""));function pa(){cov_57vuh9v2e().f[866]++;cov_57vuh9v2e().s[2129]++;return[{provide:tr,useFactory:eo},{provide:gn,multi:!0,useExisting:tr}];}export{Co as a,P as b,G as c,Wn as d,$ as e,en as f,oa as g,ca as h,ua as i};//# sourceMappingURL=chunk-FYGTVJAL.js.map +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb3ZfNTd2dWg5djJlIiwicyIsImtlIiwiX2RvYyIsImNvbnN0cnVjdG9yIiwiciIsImYiLCJtYW5hZ2VyIiwiUnQiLCJ0IiwiZSIsInN1cHBvcnRzIiwiYWRkRXZlbnRMaXN0ZW5lciIsIm4iLCJpIiwibyIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCLJtWZhYyIsImIiLCJ5IiwiSCIsIsm1cHJvdiIsIm0iLCJ0b2tlbiIsImZhY3RvcnkiLCJFdCIsIkMiLCJTbiIsIl96b25lIiwiX3BsdWdpbnMiLCJfZXZlbnROYW1lVG9QbHVnaW4iLCJNYXAiLCJmb3JFYWNoIiwiZmlsdGVyIiwic2xpY2UiLCJyZXZlcnNlIiwiZmluZCIsInB1c2giLCJfZmluZFBsdWdpbkZvciIsImdldFpvbmUiLCJnZXQiLCJTIiwic2V0IiwiTmUiLCJtbiIsIkpyIiwicmVtb3ZlIiwiWHIiLCJjcmVhdGVFbGVtZW50IiwidGV4dENvbnRlbnQiLCJ1byIsImhlYWQiLCJxdWVyeVNlbGVjdG9yQWxsIiwicmVtb3ZlQXR0cmlidXRlIiwiSFRNTExpbmtFbGVtZW50IiwiaHJlZiIsImxhc3RJbmRleE9mIiwidXNhZ2UiLCJlbGVtZW50cyIsIlJuIiwic2V0QXR0cmlidXRlIiwid24iLCJkb2MiLCJhcHBJZCIsIm5vbmNlIiwiaW5saW5lIiwiZXh0ZXJuYWwiLCJob3N0cyIsIlNldCIsImFkZCIsImFkZFN0eWxlcyIsImFkZFVzYWdlIiwicmVtb3ZlU3R5bGVzIiwicmVtb3ZlVXNhZ2UiLCJtYXAiLCJhZGRFbGVtZW50IiwiZGVsZXRlIiwibmdPbkRlc3Ryb3kiLCJjbGVhciIsImFkZEhvc3QiLCJyZW1vdmVIb3N0IiwiYXBwZW5kQ2hpbGQiLCJsbiIsImRuIiwiaHQiLCJ5biIsInN2ZyIsInhodG1sIiwieGxpbmsiLCJ4bWwiLCJ4bWxucyIsIm1hdGgiLCJDbiIsInRpIiwibG8iLCJobyIsImZvIiwicG8iLCJnbyIsInJlcGxhY2UiLCJ2byIsIm5pIiwiRW4iLCJldmVudE1hbmFnZXIiLCJzaGFyZWRTdHlsZXNIb3N0IiwicmVtb3ZlU3R5bGVzT25Db21wRGVzdHJveSIsIm5nWm9uZSIsInRyYWNpbmdTZXJ2aWNlIiwicmVuZGVyZXJCeUNvbXBJZCIsImRlZmF1bHRSZW5kZXJlciIsImEiLCJjIiwidSIsIkhlIiwiY3JlYXRlUmVuZGVyZXIiLCJnZXRPckNyZWF0ZVJlbmRlcmVyIiwid3QiLCJhcHBseVRvSG9zdCIsIiRlIiwiYXBwbHlTdHlsZXMiLCJpZCIsImwiLCJlbmNhcHN1bGF0aW9uIiwiZnQiLCJFbXVsYXRlZCIsIlNoYWRvd0RvbSIsIlN0IiwiRXhwZXJpbWVudGFsSXNvbGF0ZWRTaGFkb3dEb20iLCJjb21wb25lbnRSZXBsYWNlZCIsIkNyIiwiZGF0YSIsIk9iamVjdCIsImNyZWF0ZSIsInRocm93T25TeW50aGV0aWNQcm9wcyIsImRlc3Ryb3kiLCJkZXN0cm95Tm9kZSIsImNyZWF0ZUVsZW1lbnROUyIsImNyZWF0ZUNvbW1lbnQiLCJjcmVhdGVUZXh0IiwiY3JlYXRlVGV4dE5vZGUiLCJlaSIsImNvbnRlbnQiLCJpbnNlcnRCZWZvcmUiLCJyZW1vdmVDaGlsZCIsInNlbGVjdFJvb3RFbGVtZW50IiwicXVlcnlTZWxlY3RvciIsInBhcmVudE5vZGUiLCJuZXh0U2libGluZyIsInNldEF0dHJpYnV0ZU5TIiwicmVtb3ZlQXR0cmlidXRlTlMiLCJhZGRDbGFzcyIsImNsYXNzTGlzdCIsInJlbW92ZUNsYXNzIiwic2V0U3R5bGUiLCJVZSIsIkRhc2hDYXNlIiwiSW1wb3J0YW50Iiwic3R5bGUiLCJzZXRQcm9wZXJ0eSIsInJlbW92ZVN0eWxlIiwicmVtb3ZlUHJvcGVydHkiLCJzZXRWYWx1ZSIsIm5vZGVWYWx1ZSIsImxpc3RlbiIsInhlIiwiZ2V0R2xvYmFsRXZlbnRUYXJnZXQiLCJkZWNvcmF0ZVByZXZlbnREZWZhdWx0Iiwid3JhcEV2ZW50TGlzdGVuZXIiLCJwcmV2ZW50RGVmYXVsdCIsInRhZ05hbWUiLCJob3N0RWwiLCJzaGFkb3dSb290IiwiYXR0YWNoU2hhZG93IiwibW9kZSIsInN0eWxlcyIsIlIiLCJkb2N1bWVudCIsImdldEV4dGVybmFsU3R5bGVzIiwibm9kZU9yU2hhZG93Um9vdCIsInN0eWxlVXJscyIsIndyIiwic2l6ZSIsImNvbnRlbnRBdHRyIiwiaG9zdEF0dHIiLCJidCIsIlZyIiwic3VwcG9ydHNET01FdmVudHMiLCJtYWtlQ3VycmVudCIsInFyIiwib25BbmRDYW5jZWwiLCJkaXNwYXRjaEV2ZW50IiwiZ2V0RGVmYXVsdERvY3VtZW50IiwiY3JlYXRlSHRtbERvY3VtZW50IiwiaW1wbGVtZW50YXRpb24iLCJjcmVhdGVIVE1MRG9jdW1lbnQiLCJpc0VsZW1lbnROb2RlIiwibm9kZVR5cGUiLCJOb2RlIiwiRUxFTUVOVF9OT0RFIiwiaXNTaGFkb3dSb290IiwiRG9jdW1lbnRGcmFnbWVudCIsIndpbmRvdyIsImJvZHkiLCJnZXRCYXNlSHJlZiIsIm1vIiwieW8iLCJyZXNldEJhc2VFbGVtZW50IiwiemUiLCJnZXRVc2VyQWdlbnQiLCJuYXZpZ2F0b3IiLCJ1c2VyQWdlbnQiLCJnZXRDb29raWUiLCJRciIsImNvb2tpZSIsImdldEF0dHJpYnV0ZSIsIlVSTCIsImJhc2VVUkkiLCJwYXRobmFtZSIsIlJvIiwiYnVpbGQiLCJYTUxIdHRwUmVxdWVzdCIsInJpIiwiU28iLCJEZWwiLCJFc2MiLCJMZWZ0IiwiUmlnaHQiLCJVcCIsIkRvd24iLCJNZW51IiwiU2Nyb2xsIiwiV2luIiwid28iLCJhbHQiLCJhbHRLZXkiLCJjb250cm9sIiwiY3RybEtleSIsIm1ldGEiLCJtZXRhS2V5Iiwic2hpZnQiLCJzaGlmdEtleSIsImlpIiwicGFyc2VFdmVudE5hbWUiLCJldmVudENhbGxiYWNrIiwiZnVsbEtleSIsInJ1bk91dHNpZGVBbmd1bGFyIiwiZG9tRXZlbnROYW1lIiwidG9Mb3dlckNhc2UiLCJzcGxpdCIsImxlbmd0aCIsIl9ub3JtYWxpemVLZXkiLCJwb3AiLCJpbmRleE9mIiwic3BsaWNlIiwibWF0Y2hFdmVudEZ1bGxLZXlDb2RlIiwia2V5IiwiY29kZSIsInJ1bkd1YXJkZWQiLCJDbyIsImQiLCJyb290Q29tcG9uZW50IiwiRW8iLCJGciIsInBsYXRmb3JtUmVmIiwiYXBwUHJvdmlkZXJzIiwiRG8iLCJwcm92aWRlcnMiLCJwbGF0Zm9ybVByb3ZpZGVycyIsIlRvIiwiYm8iLCJNbyIsImFuIiwiSW8iLCJtciIsInByb3ZpZGUiLCJ1c2VWYWx1ZSIsIlpyIiwieXIiLCJtdWx0aSIsInVzZUZhY3RvcnkiLCJwciIsInVzZUNsYXNzIiwiYnIiLCJ1c2VFeGlzdGluZyIsIktyIiwib2kiLCJnZXRUaXRsZSIsInRpdGxlIiwic2V0VGl0bGUiLCJwcm92aWRlZEluIiwicCIsImV0IiwiU3ltYm9sIiwiRG4iLCJwYXJhbXMiLCJoYXMiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJBcnJheSIsImlzQXJyYXkiLCJnZXRBbGwiLCJrZXlzIiwidWUiLCJibiIsInN1YnN0cmluZyIsInBhdGgiLCJoaSIsInBhdGhNYXRjaCIsImhhc0NoaWxkcmVuIiwiY29uc3VtZWQiLCJwb3NQYXJhbXMiLCJfdCIsIlByb21pc2UiLCJwaXBlIiwiSiIsInN1YnNjcmliZSIsIm5leHQiLCJlcnJvciIsIl9vIiwiQiIsIkFuIiwiZmkiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJzb3J0IiwiZXZlcnkiLCJPbyIsImRlIiwibm4iLCJfciIsIk0iLCJyZXNvbHZlIiwiZyIsInBpIiwiTm8iLCJleGFjdCIsInZpIiwic3Vic2V0IiwibWkiLCJnaSIsIlBvIiwiVW8iLCJpZ25vcmVkIiwiQm4iLCJwYXRocyIsImZyYWdtZW50IiwibWF0cml4UGFyYW1zIiwicXVlcnlQYXJhbXMiLCJHZSIsInFuIiwiRCIsInBhcnNlVXJsIiwidnQiLCJfbiIsImxhc3RTdWNjZXNzZnVsTmF2aWdhdGlvbiIsImZpbmFsVXJsIiwicm9vdCIsImNlIiwic2VnbWVudHMiLCJUdCIsIm51bWJlck9mQ2hpbGRyZW4iLCJjaGlsZHJlbiIsInlpIiwicGFyYW1ldGVycyIsIl9xdWVyeVBhcmFtTWFwIiwidiIsInF1ZXJ5UGFyYW1NYXAiLCJ0b1N0cmluZyIsImpvIiwic2VyaWFsaXplIiwicGFyZW50IiwidmFsdWVzIiwiRHQiLCJYIiwiX3BhcmFtZXRlck1hcCIsInBhcmFtZXRlck1hcCIsIlNpIiwiTG8iLCJ4byIsImVudHJpZXMiLCJjb25jYXQiLCJuZSIsIksiLCJwYXJzZSIsIk5uIiwicGFyc2VSb290U2VnbWVudCIsInBhcnNlUXVlcnlQYXJhbXMiLCJwYXJzZUZyYWdtZW50IiwiRmUiLCIkbyIsImtvIiwiam9pbiIsIlJpIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiTXQiLCJlbmNvZGVVUkkiLCJPbiIsIkF0IiwiZGVjb2RlVVJJQ29tcG9uZW50Iiwic2kiLCJIbyIsInpvIiwiTW4iLCJtYXRjaCIsIkZvIiwiQm8iLCJxbyIsIlZvIiwiR28iLCJXbyIsInVybCIsInJlbWFpbmluZyIsImNvbnN1bWVPcHRpb25hbCIsInBlZWtTdGFydHNXaXRoIiwicGFyc2VDaGlsZHJlbiIsInBhcnNlUXVlcnlQYXJhbSIsInBhcnNlU2VnbWVudCIsImNhcHR1cmUiLCJwYXJzZVBhcmVucyIsInBhcnNlTWF0cml4UGFyYW1zIiwicGFyc2VQYXJhbSIsInN0YXJ0c1dpdGgiLCJ3aSIsIkNpIiwiWW8iLCJlZSIsIkVpIiwiYmkiLCJNaSIsIm91dGxldCIsIkluIiwiUW8iLCJ0b1Jvb3QiLCJLbyIsInByb2Nlc3NDaGlsZHJlbiIsInFlIiwic2VnbWVudEdyb3VwIiwiaW5kZXgiLCJjb21tYW5kcyIsIlRpIiwiT3QiLCJvdXRsZXRzIiwic2VnbWVudFBhdGgiLCJXZSIsImFpIiwiSWkiLCJOdCIsImlzQWJzb2x1dGUiLCJudW1iZXJPZkRvdWJsZURvdHMiLCJyZWR1Y2UiLCJtZSIsIk5hTiIsIlpvIiwiSm8iLCJYbyIsImNvbW1hbmRJbmRleCIsInBhdGhJbmRleCIsIlBuIiwic29tZSIsInVpIiwiZXMiLCJjaSIsInllIiwiRSIsIk5hdmlnYXRpb25TdGFydCIsIk5hdmlnYXRpb25FbmQiLCJOYXZpZ2F0aW9uQ2FuY2VsIiwiTmF2aWdhdGlvbkVycm9yIiwiUm91dGVzUmVjb2duaXplZCIsIlJlc29sdmVTdGFydCIsIlJlc29sdmVFbmQiLCJHdWFyZHNDaGVja1N0YXJ0IiwiR3VhcmRzQ2hlY2tFbmQiLCJSb3V0ZUNvbmZpZ0xvYWRTdGFydCIsIlJvdXRlQ29uZmlnTG9hZEVuZCIsIkNoaWxkQWN0aXZhdGlvblN0YXJ0IiwiQ2hpbGRBY3RpdmF0aW9uRW5kIiwiQWN0aXZhdGlvblN0YXJ0IiwiQWN0aXZhdGlvbkVuZCIsIk5hdmlnYXRpb25Ta2lwcGVkIiwiTiIsInRlIiwidHlwZSIsIm5hdmlnYXRpb25UcmlnZ2VyIiwicmVzdG9yZWRTdGF0ZSIsIlAiLCJ1cmxBZnRlclJlZGlyZWN0cyIsIkkiLCJSZWRpcmVjdCIsIlN1cGVyc2VkZWRCeU5ld05hdmlnYXRpb24iLCJOb0RhdGFGcm9tUmVzb2x2ZXIiLCJHdWFyZFJlamVjdGVkIiwiQWJvcnRlZCIsIlNlIiwiSWdub3JlZFNhbWVVcmxOYXZpZ2F0aW9uIiwiSWdub3JlZEJ5VXJsSGFuZGxpbmdTdHJhdGVneSIsIngiLCJyZWFzb24iLCJEaSIsIlYiLCJsZSIsInRhcmdldCIsIlllIiwic3RhdGUiLCJQdCIsIlV0Iiwic2hvdWxkQWN0aXZhdGUiLCJMdCIsInh0IiwianQiLCJyb3V0ZSIsImt0IiwiSHQiLCJzbmFwc2hvdCIsInJvdXRlQ29uZmlnIiwiJHQiLCJ6dCIsIkZ0Iiwid2UiLCJyb3V0ZXJFdmVudCIsInBvc2l0aW9uIiwiYW5jaG9yIiwic2Nyb2xsQmVoYXZpb3IiLCJDZSIsIlFlIiwiRWUiLCJuYXZpZ2F0aW9uQmVoYXZpb3JPcHRpb25zIiwidHMiLCJCdCIsInJvb3RJbmplY3RvciIsImF0dGFjaFJlZiIsImluamVjdG9yIiwiX2Vudmlyb25tZW50SW5qZWN0b3IiLCJoZSIsImNvbnRleHRzIiwib25DaGlsZE91dGxldENyZWF0ZWQiLCJnZXRPckNyZWF0ZUNvbnRleHQiLCJvbkNoaWxkT3V0bGV0RGVzdHJveWVkIiwiZ2V0Q29udGV4dCIsIm9uT3V0bGV0RGVhY3RpdmF0ZWQiLCJvbk91dGxldFJlQXR0YWNoZWQiLCJZIiwicXQiLCJfcm9vdCIsInZhbHVlIiwicGF0aEZyb21Sb290IiwiVW4iLCJmaXJzdENoaWxkIiwic2libGluZ3MiLCJMbiIsInVuc2hpZnQiLCJPIiwidmUiLCJLZSIsIkduIiwiQWkiLCJucyIsIlUiLCJHIiwiYmUiLCJaZSIsInVybFN1YmplY3QiLCJwYXJhbXNTdWJqZWN0IiwicXVlcnlQYXJhbXNTdWJqZWN0IiwiZnJhZ21lbnRTdWJqZWN0IiwiZGF0YVN1YmplY3QiLCJjb21wb25lbnQiLCJfZnV0dXJlU25hcHNob3QiLCJfcm91dGVyU3RhdGUiLCJfcGFyYW1NYXAiLCJUIiwicGFyYW1NYXAiLCJWbiIsImxvYWRDb21wb25lbnQiLCJfcmVzb2x2ZWREYXRhIiwiT2kiLCJfcmVzb2x2ZSIsIl9pIiwiVG4iLCJ4biIsIk5pIiwiV24iLCJhY3RpdmF0ZWQiLCJhY3RpdmF0ZWRDb21wb25lbnRSZWYiLCJfYWN0aXZhdGVkUm91dGUiLCJuYW1lIiwiYWN0aXZhdGVFdmVudHMiLCJhZSIsImRlYWN0aXZhdGVFdmVudHMiLCJhdHRhY2hFdmVudHMiLCJkZXRhY2hFdmVudHMiLCJyb3V0ZXJPdXRsZXREYXRhIiwienIiLCJwYXJlbnRDb250ZXh0cyIsImgiLCJsb2NhdGlvbiIsIklyIiwiY2hhbmdlRGV0ZWN0b3IiLCJtdCIsImlucHV0QmluZGVyIiwidHQiLCJvcHRpb25hbCIsInN1cHBvcnRzQmluZGluZ1RvQ29tcG9uZW50SW5wdXRzIiwibmdPbkNoYW5nZXMiLCJmaXJzdENoYW5nZSIsInByZXZpb3VzVmFsdWUiLCJpc1RyYWNrZWRJblBhcmVudENvbnRleHRzIiwiZGVhY3RpdmF0ZSIsImluaXRpYWxpemVPdXRsZXRXaXRoTmFtZSIsInVuc3Vic2NyaWJlRnJvbVJvdXRlRGF0YSIsIm5nT25Jbml0IiwiYXR0YWNoIiwiYWN0aXZhdGVXaXRoIiwiaXNBY3RpdmF0ZWQiLCJpbnN0YW5jZSIsImFjdGl2YXRlZFJvdXRlIiwiYWN0aXZhdGVkUm91dGVEYXRhIiwiZGV0YWNoIiwiZW1pdCIsImluc2VydCIsImhvc3RWaWV3IiwiYmluZEFjdGl2YXRlZFJvdXRlVG9PdXRsZXRDb21wb25lbnQiLCJqbiIsImNyZWF0ZUNvbXBvbmVudCIsImVudmlyb25tZW50SW5qZWN0b3IiLCJtYXJrRm9yQ2hlY2siLCLJtWRpciIsIkxlIiwic2VsZWN0b3JzIiwiaW5wdXRzIiwib3V0cHV0cyIsImV4cG9ydEFzIiwiZmVhdHVyZXMiLCJQZSIsImNoaWxkQ29udGV4dHMiLCJvdXRsZXREYXRhIiwiWW4iLCJvdXRsZXREYXRhU3Vic2NyaXB0aW9ucyIsInN1YnNjcmliZVRvUm91dGVEYXRhIiwidW5zdWJzY3JpYmUiLCJybiIsImoiLCJCciIsInRlbXBsYXRlTmFtZSIsInNldElucHV0IiwiUW4iLCLJtWNtcCIsIkRyIiwiZGVjbHMiLCJ2YXJzIiwidGVtcGxhdGUiLCJQciIsImRlcGVuZGVuY2llcyIsIktuIiwiQSIsImxvYWRDaGlsZHJlbiIsInJzIiwiSmUiLCJzaG91bGRSZXVzZVJvdXRlIiwiaXMiLCJzaG91bGRBdHRhY2giLCJyZXRyaWV2ZSIsIm9zIiwiTWUiLCJyZWRpcmVjdFRvIiwiUGkiLCJWdCIsIlVpIiwiRXJyb3IiLCJjYW5jZWxsYXRpb25Db2RlIiwic3MiLCJMaSIsImtuIiwicm91dGVSZXVzZVN0cmF0ZWd5IiwiZnV0dXJlU3RhdGUiLCJjdXJyU3RhdGUiLCJmb3J3YXJkRXZlbnQiLCJpbnB1dEJpbmRpbmdFbmFibGVkIiwiYWN0aXZhdGUiLCJkZWFjdGl2YXRlQ2hpbGRSb3V0ZXMiLCJhY3RpdmF0ZUNoaWxkUm91dGVzIiwiZGVhY3RpdmF0ZVJvdXRlcyIsImRlYWN0aXZhdGVSb3V0ZUFuZEl0c0NoaWxkcmVuIiwic2hvdWxkRGV0YWNoIiwiZGV0YWNoQW5kU3RvcmVSb3V0ZVN1YnRyZWUiLCJkZWFjdGl2YXRlUm91dGVBbmRPdXRsZXQiLCJzdG9yZSIsImNvbXBvbmVudFJlZiIsImFjdGl2YXRlUm91dGVzIiwiR3QiLCJSZSIsImFzIiwiQmUiLCJjcyIsImNhbkFjdGl2YXRlQ2hpbGQiLCJub2RlIiwiZ3VhcmRzIiwiVGUiLCJociIsImNhbkRlYWN0aXZhdGVDaGVja3MiLCJjYW5BY3RpdmF0ZUNoZWNrcyIsInVzIiwiVmUiLCJscyIsInJ1bkd1YXJkc0FuZFJlc29sdmVycyIsIl8iLCJudCIsImRzIiwiaHMiLCJjYW5Mb2FkIiwiZnMiLCJjYW5BY3RpdmF0ZSIsInBzIiwiZ3MiLCJjYW5EZWFjdGl2YXRlIiwidnMiLCJjYW5NYXRjaCIsInhpIiwiYXIiLCJJdCIsIkllIiwicGUiLCJsciIsIm1zIiwiWiIsImppIiwiYWJvcnRlZCIsIm9yIiwiaGFuZGxlciIsImNvbXBsZXRlIiwia2kiLCJjdCIsInlzIiwieiIsInRhcmdldFNuYXBzaG90IiwiY3VycmVudFNuYXBzaG90IiwiZ3VhcmRzUmVzdWx0IiwiUnMiLCJTcyIsIk1zIiwiT2UiLCJjciIsIkNzIiwid3MiLCJicyIsIkVzIiwic3QiLCJJcyIsIkhpIiwiaXIiLCJrIiwiVHMiLCJRIiwic2V0UHJvdG90eXBlT2YiLCJYZSIsInVybFRyZWUiLCJEcyIsIkFzIiwiSG4iLCJ1cmxTZXJpYWxpemVyIiwibGluZXJhbGl6ZVNlZ21lbnRzIiwiYXBwbHlSZWRpcmVjdENvbW1hbmRzIiwiX3MiLCJhcHBseVJlZGlyZWN0Q3JlYXRlVXJsVHJlZSIsImNyZWF0ZVNlZ21lbnRHcm91cCIsImNyZWF0ZVF1ZXJ5UGFyYW1zIiwiY3JlYXRlU2VnbWVudHMiLCJmaW5kUG9zUGFyYW0iLCJmaW5kT3JSZXR1cm4iLCJPcyIsIl9pbmplY3RvciIsInB0IiwicSIsIk5zIiwiJG4iLCJtYXRjaGVkIiwiY29uc3VtZWRTZWdtZW50cyIsInJlbWFpbmluZ1NlZ21lbnRzIiwicG9zaXRpb25hbFBhcmFtU2VnbWVudHMiLCIkaSIsIlBzIiwiemkiLCJtYXRjaGVyIiwibGkiLCJ4cyIsIkxzIiwic2xpY2VkU2VnbWVudHMiLCJqcyIsIlVzIiwiWXQiLCJrcyIsInpuIiwiSHMiLCJGbiIsInJlY29nbml6ZSIsIiRzIiwiY29uZmlnTG9hZGVyIiwicm9vdENvbXBvbmVudFR5cGUiLCJjb25maWciLCJwYXJhbXNJbmhlcml0YW5jZVN0cmF0ZWd5IiwiYWJvcnRTaWduYWwiLCJhcHBseVJlZGlyZWN0cyIsImFic29sdXRlUmVkaXJlY3RDb3VudCIsImFsbG93UmVkaXJlY3RzIiwibm9NYXRjaEVycm9yIiwicm9vdFNuYXBzaG90IiwidHJlZSIsImZyZWV6ZSIsInByb2Nlc3NTZWdtZW50R3JvdXAiLCJwcm9jZXNzU2VnbWVudCIsIkZpIiwienMiLCJwcm9jZXNzU2VnbWVudEFnYWluc3RSb3V0ZSIsIm1hdGNoU2VnbWVudEFnYWluc3RSb3V0ZSIsImV4cGFuZFNlZ21lbnRBZ2FpbnN0Um91dGVVc2luZ1JlZGlyZWN0IiwiaWUiLCJjcmVhdGVTbmFwc2hvdCIsIlciLCJvZSIsIkJzIiwiX2xvYWRlZENvbXBvbmVudCIsInFzIiwib3QiLCJyb3V0ZXMiLCJnZXRDaGlsZENvbmZpZyIsIl9sb2FkZWRJbmplY3RvciIsIkRlIiwidG4iLCJBZSIsIl9sb2FkZWRSb3V0ZXMiLCJfbG9hZGVkTmdNb2R1bGVGYWN0b3J5IiwibG9jYWxlQ29tcGFyZSIsIkZzIiwiVnMiLCJleHRyYWN0ZWRVcmwiLCJHcyIsIkJpIiwiV3MiLCJvbiIsIkwiLCJmbGF0IiwiWXMiLCJRcyIsImF0Iiwic3IiLCJkaSIsIlpuIiwiYnVpbGRUaXRsZSIsImdldFJlc29sdmVkVGl0bGVGb3JSb3V0ZSIsInFpIiwidXBkYXRlVGl0bGUiLCJyZSIsImZlIiwiUXQiLCJjb21wb25lbnRMb2FkZXJzIiwiV2Vha01hcCIsImNoaWxkcmVuTG9hZGVycyIsIm9uTG9hZFN0YXJ0TGlzdGVuZXIiLCJvbkxvYWRFbmRMaXN0ZW5lciIsImNvbXBpbGVyIiwia3IiLCJXaSIsIkdpIiwiVmkiLCJUciIsImNvbXBpbGVNb2R1bGVBc3luYyIsInNlbGYiLCJLcyIsImRlZmF1bHQiLCJLdCIsIlpzIiwic2hvdWxkUHJvY2Vzc1VybCIsImV4dHJhY3QiLCJtZXJnZSIsIkpuIiwiWG4iLCJZaSIsInN0YXJ0Vmlld1RyYW5zaXRpb24iLCJza2lwTmV4dFRyYW5zaXRpb24iLCJzZXRUaW1lb3V0IiwiSnMiLCJ1cGRhdGVDYWxsYmFja0RvbmUiLCJjYXRjaCIsInJlYWR5IiwiZmluaXNoZWQiLCJvblZpZXdUcmFuc2l0aW9uQ3JlYXRlZCIsInRyYW5zaXRpb24iLCJmcm9tIiwidG8iLCJobiIsInJlYWQiLCJYcyIsIm5vb3AiLCJlciIsIlp0IiwiY3VycmVudE5hdmlnYXRpb24iLCJlcXVhbCIsImN1cnJlbnRUcmFuc2l0aW9uIiwiZXZlbnRzIiwic2UiLCJ0cmFuc2l0aW9uQWJvcnRXaXRoRXJyb3JTdWJqZWN0IiwiZGVzdHJveVJlZiIsInNuIiwicm9vdENvbnRleHRzIiwiZ2UiLCJ0aXRsZVN0cmF0ZWd5Iiwib3B0aW9ucyIsInVybEhhbmRsaW5nU3RyYXRlZ3kiLCJjcmVhdGVWaWV3VHJhbnNpdGlvbiIsIm5hdmlnYXRpb25FcnJvckhhbmRsZXIiLCJuYXZpZ2F0aW9uSWQiLCJoYXNSZXF1ZXN0ZWROYXZpZ2F0aW9uIiwidHJhbnNpdGlvbnMiLCJhZnRlclByZWFjdGl2YXRpb24iLCJkZXN0cm95ZWQiLCJvbkRlc3Ryb3kiLCJoYW5kbGVOYXZpZ2F0aW9uUmVxdWVzdCIsInciLCJyYXdVcmwiLCJ0YXJnZXRSb3V0ZXJTdGF0ZSIsInJvdXRlc1JlY29nbml6ZUhhbmRsZXIiLCJiZWZvcmVBY3RpdmF0ZUhhbmRsZXIiLCJzZXR1cE5hdmlnYXRpb25zIiwiQWJvcnRDb250cm9sbGVyIiwic2hvdWxkQ29udGludWVOYXZpZ2F0aW9uIiwiY2FuY2VsTmF2aWdhdGlvblRyYW5zaXRpb24iLCJpbml0aWFsVXJsIiwidGFyZ2V0QnJvd3NlclVybCIsImV4dHJhcyIsImJyb3dzZXJVcmwiLCJ0cmlnZ2VyIiwic291cmNlIiwicHJldmlvdXNOYXZpZ2F0aW9uIiwiYWJvcnQiLCJuYXZpZ2F0ZWQiLCJpc1VwZGF0aW5nSW50ZXJuYWxTdGF0ZSIsImlzVXBkYXRlZEJyb3dzZXJVcmwiLCJvblNhbWVVcmxOYXZpZ2F0aW9uIiwic2lnbmFsIiwidXBkYXRlIiwiZGVmZXJyZWRIYW5kbGUiLCJjdXJyZW50UmF3VXJsIiwic2tpcExvY2F0aW9uQ2hhbmdlIiwicmVwbGFjZVVybCIsInRoZW4iLCJhbGwiLCJjdXJyZW50Um91dGVyU3RhdGUiLCJ1ciIsIm1lc3NhZ2UiLCJyZXNvbHZlTmF2aWdhdGlvblByb21pc2VPbkVycm9yIiwicmVqZWN0IiwiY3VycmVudFVybFRyZWUiLCJlYSIsIlFpIiwiS2kiLCJ0YSIsIld0Iiwic2hvdWxkRGVzdHJveUluamVjdG9yIiwiY24iLCJKdCIsImNhbmNlbGVkTmF2aWdhdGlvblJlc29sdXRpb24iLCJ1cmxVcGRhdGVTdHJhdGVneSIsImdldEN1cnJlbnRVcmxUcmVlIiwicmF3VXJsVHJlZSIsImdldFJhd1VybFRyZWUiLCJjcmVhdGVCcm93c2VyUGF0aCIsImNvbW1pdFRyYW5zaXRpb24iLCJyb3V0ZXJTdGF0ZSIsImdldFJvdXRlclN0YXRlIiwiX3N0YXRlTWVtZW50byIsImNyZWF0ZVN0YXRlTWVtZW50byIsInN0YXRlTWVtZW50byIsInVwZGF0ZVN0YXRlTWVtZW50byIsImdldFN0YXRlIiwibmEiLCJjdXJyZW50UGFnZUlkIiwibGFzdFN1Y2Nlc3NmdWxJZCIsImJyb3dzZXJQYWdlSWQiLCLJtXJvdXRlclBhZ2VJZCIsInJlZ2lzdGVyTm9uUm91dGVyQ3VycmVudEVudHJ5Q2hhbmdlTGlzdGVuZXIiLCJoYW5kbGVSb3V0ZXJFdmVudCIsInNldEJyb3dzZXJVcmwiLCJyZXN0b3JlSGlzdG9yeSIsImlzQ3VycmVudFBhdGhFcXVhbFRvIiwiZ2VuZXJhdGVOZ1JvdXRlclN0YXRlIiwicmVwbGFjZVN0YXRlIiwiaGlzdG9yeUdvIiwicmVzZXRJbnRlcm5hbFN0YXRlIiwicmVzZXRVcmxUb0N1cnJlbnRVcmxUcmVlIiwiWHQiLCIkIiwic3RhdGVNYW5hZ2VyIiwiZGlzcG9zZWQiLCJub25Sb3V0ZXJDdXJyZW50RW50cnlDaGFuZ2VTdWJzY3JpcHRpb24iLCJjb25zb2xlIiwiQXIiLCJwZW5kaW5nVGFza3MiLCJnciIsIm5hdmlnYXRpb25UcmFuc2l0aW9ucyIsIl9ldmVudHMiLCJpbmplY3RvckNsZWFudXAiLCJjb21wb25lbnRJbnB1dEJpbmRpbmdFbmFibGVkIiwiYXNSZWFkb25seSIsInJlc2V0Q29uZmlnIiwic3Vic2NyaWJlVG9OYXZpZ2F0aW9uRXZlbnRzIiwiZXZlbnRzU3Vic2NyaXB0aW9uIiwicnIiLCJzY3JvbGwiLCJpbmZvIiwic2NoZWR1bGVOYXZpZ2F0aW9uIiwicHJvbWlzZSIsInJlc2V0Um9vdENvbXBvbmVudFR5cGUiLCJpbml0aWFsTmF2aWdhdGlvbiIsInNldFVwTG9jYXRpb25DaGFuZ2VMaXN0ZW5lciIsIm5hdmlnYXRlVG9TeW5jV2l0aEJyb3dzZXIiLCJkdCIsInNlcmlhbGl6ZVVybCIsImdldEN1cnJlbnROYXZpZ2F0aW9uIiwiZGlzcG9zZSIsImNyZWF0ZVVybFRyZWUiLCJyZWxhdGl2ZVRvIiwicXVlcnlQYXJhbXNIYW5kbGluZyIsInByZXNlcnZlRnJhZ21lbnQiLCJkZWZhdWx0UXVlcnlQYXJhbXNIYW5kbGluZyIsInJlbW92ZUVtcHR5UHJvcHMiLCJuYXZpZ2F0ZUJ5VXJsIiwibmF2aWdhdGUiLCJyYSIsIndhcm4iLCJkciIsImlzQWN0aXZlIiwicXVldWVNaWNyb3Rhc2siLCJiaW5kIiwiaWEiLCJyb3V0ZXIiLCJzZXJpYWxpemVyIiwidXBkYXRlU3RhdGUiLCJlbiIsInRhYkluZGV4QXR0cmlidXRlIiwicmVuZGVyZXIiLCJlbCIsImxvY2F0aW9uU3RyYXRlZ3kiLCJocmVmQXR0cmlidXRlVmFsdWUiLCIkciIsInJlYWN0aXZlSHJlZiIsIkhyIiwiaXNBbmNob3JFbGVtZW50IiwiY29tcHV0ZUhyZWYiLCJfdXJsVHJlZSIsIl90YXJnZXQiLCJfcXVlcnlQYXJhbXMiLCJfZnJhZ21lbnQiLCJfcXVlcnlQYXJhbXNIYW5kbGluZyIsIl9zdGF0ZSIsIl9pbmZvIiwiX3JlbGF0aXZlVG8iLCJfcHJlc2VydmVGcmFnbWVudCIsIl9za2lwTG9jYXRpb25DaGFuZ2UiLCJfcmVwbGFjZVVybCIsIm9uQ2hhbmdlcyIsImFwcGxpY2F0aW9uRXJyb3JIYW5kbGVyIiwicmVhY3RpdmVSb3V0ZXJTdGF0ZSIsIm5hdGl2ZUVsZW1lbnQiLCJjdXN0b21FbGVtZW50cyIsIm9ic2VydmVkQXR0cmlidXRlcyIsImluY2x1ZGVzIiwic2V0VGFiSW5kZXhJZk5vdE9uTmF0aXZlRWwiLCJhcHBseUF0dHJpYnV0ZVZhbHVlIiwicm91dGVyTGlua0lucHV0Iiwicm91dGVyTGluayIsIm9uQ2xpY2siLCJwcmVwYXJlRXh0ZXJuYWxVcmwiLCJGIiwidnIiLCJmbiIsInVuIiwiamUiLCJob3N0VmFycyIsImhvc3RCaW5kaW5ncyIsIlVyIiwiYnV0dG9uIiwiTnIiLCJTciIsInl0Iiwib2EiLCJlbGVtZW50IiwiY2RyIiwibGlua3MiLCJjbGFzc2VzIiwicm91dGVyRXZlbnRzU3Vic2NyaXB0aW9uIiwibGlua0lucHV0Q2hhbmdlc1N1YnNjcmlwdGlvbiIsIl9pc0FjdGl2ZSIsInJvdXRlckxpbmtBY3RpdmVPcHRpb25zIiwiYXJpYUN1cnJlbnRXaGVuQWN0aXZlIiwiaXNBY3RpdmVDaGFuZ2UiLCJsaW5rIiwibmdBZnRlckNvbnRlbnRJbml0IiwiY2hhbmdlcyIsIl9lIiwic3Vic2NyaWJlVG9FYWNoTGlua09uQ2hhbmdlcyIsInRvQXJyYXkiLCJpc0xpbmtBY3RpdmUiLCJyb3V0ZXJMaW5rQWN0aXZlIiwiaGFzQWN0aXZlTGlua3MiLCJzYSIsImNvbnRlbnRRdWVyaWVzIiwiTHIiLCJ4ciIsImpyIiwicnQiLCJaaSIsInByZWxvYWRpbmdTdHJhdGVneSIsImxvYWRlciIsInN1YnNjcmlwdGlvbiIsInNldFVwUHJlbG9hZGluZyIsInByZWxvYWQiLCJwcm9jZXNzUm91dGVzIiwicHJlbG9hZENvbmZpZyIsIkppIiwiYWEiLCJzY3JvbGxFdmVudHNTdWJzY3JpcHRpb24iLCJsYXN0SWQiLCJsYXN0U291cmNlIiwicmVzdG9yZWRJZCIsInpvbmUiLCJ2aWV3cG9ydFNjcm9sbGVyIiwidm4iLCJzY3JvbGxQb3NpdGlvblJlc3RvcmF0aW9uIiwiYW5jaG9yU2Nyb2xsaW5nIiwiaW5pdCIsInNldEhpc3RvcnlTY3JvbGxSZXN0b3JhdGlvbiIsImNyZWF0ZVNjcm9sbEV2ZW50cyIsImNvbnN1bWVTY3JvbGxFdmVudHMiLCJnZXRTY3JvbGxQb3NpdGlvbiIsInNjaGVkdWxlU2Nyb2xsRXZlbnQiLCJiZWhhdmlvciIsInNjcm9sbFRvUG9zaXRpb24iLCJzY3JvbGxUb0FuY2hvciIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsInJ1biIsIk1yIiwiY2EiLCJmciIsIlhpIiwiZ24iLCJlbyIsIsm1cHJvdmlkZXJzIiwiaXQiLCLJtWtpbmQiLCJsdCIsIk9yIiwiY29tcG9uZW50cyIsIm5yIiwiaW8iLCJjb21wb25lbnRUeXBlcyIsImNsb3NlZCIsIm5vIiwiUnIiLCJwbiIsIkdyIiwicm8iLCJvbyIsInNvIiwiYW8iLCJFciIsInNraXBJbml0aWFsVHJhbnNpdGlvbiIsImNvIiwidWEiLCJmb3JSb290IiwibmdNb2R1bGUiLCJlcnJvckhhbmRsZXIiLCJ1c2VIYXNoIiwiZGEiLCJoYSIsImxhIiwiZmEiLCJiaW5kVG9Db21wb25lbnRJbnB1dHMiLCJlbmFibGVWaWV3VHJhbnNpdGlvbnMiLCJwYSIsImZvckNoaWxkIiwiybVtb2QiLCJndCIsIsm1aW5qIiwidXQiLCJzY3JvbGxPZmZzZXQiLCJzZXRPZmZzZXQiLCJZciIsIldyIiwidHIiXSwic291cmNlcyI6WyJub2RlX21vZHVsZXMvQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlci9mZXNtMjAyMi9fZG9tX3JlbmRlcmVyLWNodW5rLm1qcyIsIm5vZGVfbW9kdWxlcy9AYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyL2Zlc20yMDIyL19icm93c2VyLWNodW5rLm1qcyIsIm5vZGVfbW9kdWxlcy9AYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyL2Zlc20yMDIyL3BsYXRmb3JtLWJyb3dzZXIubWpzIiwibm9kZV9tb2R1bGVzL0Bhbmd1bGFyL3JvdXRlci9mZXNtMjAyMi9fcm91dGVyLWNodW5rLm1qcyIsIm5vZGVfbW9kdWxlcy9AYW5ndWxhci9yb3V0ZXIvZmVzbTIwMjIvX3JvdXRlcl9tb2R1bGUtY2h1bmsubWpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2UgQW5ndWxhciB2MjEuMi40XG4gKiAoYykgMjAxMC0yMDI2IEdvb2dsZSBMTEMuIGh0dHBzOi8vYW5ndWxhci5kZXYvXG4gKiBMaWNlbnNlOiBNSVRcbiAqL1xuXG5pbXBvcnQgeyBET0NVTUVOVCwgybVnZXRET00gYXMgX2dldERPTSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgKiBhcyBpMCBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEluamVjdGFibGUsIEluamVjdCwgSW5qZWN0aW9uVG9rZW4sIMm1UnVudGltZUVycm9yIGFzIF9SdW50aW1lRXJyb3IsIEFQUF9JRCwgQ1NQX05PTkNFLCBQTEFURk9STV9JRCwgT3B0aW9uYWwsIFZpZXdFbmNhcHN1bGF0aW9uLCDJtVRyYWNpbmdTZXJ2aWNlIGFzIF9UcmFjaW5nU2VydmljZSwgUmVuZGVyZXJTdHlsZUZsYWdzMiwgybVhbGxMZWF2aW5nQW5pbWF0aW9ucyBhcyBfYWxsTGVhdmluZ0FuaW1hdGlvbnMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmNsYXNzIEV2ZW50TWFuYWdlclBsdWdpbiB7XG4gIF9kb2M7XG4gIGNvbnN0cnVjdG9yKF9kb2MpIHtcbiAgICB0aGlzLl9kb2MgPSBfZG9jO1xuICB9XG4gIG1hbmFnZXI7XG59XG5sZXQgRG9tRXZlbnRzUGx1Z2luID0gLyojX19QVVJFX18qLygoKSA9PiB7XG4gIGNsYXNzIERvbUV2ZW50c1BsdWdpbiBleHRlbmRzIEV2ZW50TWFuYWdlclBsdWdpbiB7XG4gICAgY29uc3RydWN0b3IoZG9jKSB7XG4gICAgICBzdXBlcihkb2MpO1xuICAgIH1cbiAgICBzdXBwb3J0cyhldmVudE5hbWUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBhZGRFdmVudExpc3RlbmVyKGVsZW1lbnQsIGV2ZW50TmFtZSwgaGFuZGxlciwgb3B0aW9ucykge1xuICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgaGFuZGxlciwgb3B0aW9ucyk7XG4gICAgICByZXR1cm4gKCkgPT4gdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGVsZW1lbnQsIGV2ZW50TmFtZSwgaGFuZGxlciwgb3B0aW9ucyk7XG4gICAgfVxuICAgIHJlbW92ZUV2ZW50TGlzdGVuZXIodGFyZ2V0LCBldmVudE5hbWUsIGNhbGxiYWNrLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gdGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBjYWxsYmFjaywgb3B0aW9ucyk7XG4gICAgfVxuICAgIHN0YXRpYyDJtWZhYyA9IGZ1bmN0aW9uIERvbUV2ZW50c1BsdWdpbl9GYWN0b3J5KF9fbmdGYWN0b3J5VHlwZV9fKSB7XG4gICAgICByZXR1cm4gbmV3IChfX25nRmFjdG9yeVR5cGVfXyB8fCBEb21FdmVudHNQbHVnaW4pKGkwLsm1ybVpbmplY3QoRE9DVU1FTlQpKTtcbiAgICB9O1xuICAgIHN0YXRpYyDJtXByb3YgPSAvKiBAX19QVVJFX18gKi9pMC7Jtcm1ZGVmaW5lSW5qZWN0YWJsZSh7XG4gICAgICB0b2tlbjogRG9tRXZlbnRzUGx1Z2luLFxuICAgICAgZmFjdG9yeTogRG9tRXZlbnRzUGx1Z2luLsm1ZmFjXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIERvbUV2ZW50c1BsdWdpbjtcbn0pKCk7XG4vKiNfX1BVUkVfXyovKCgpID0+IHtcbiAgKHR5cGVvZiBuZ0Rldk1vZGUgPT09IFwidW5kZWZpbmVkXCIgfHwgbmdEZXZNb2RlKSAmJiB2b2lkIDA7XG59KSgpO1xuY29uc3QgRVZFTlRfTUFOQUdFUl9QTFVHSU5TID0gLyojX19QVVJFX18qL25ldyBJbmplY3Rpb25Ub2tlbih0eXBlb2YgbmdEZXZNb2RlICE9PSAndW5kZWZpbmVkJyAmJiBuZ0Rldk1vZGUgPyAnRXZlbnRNYW5hZ2VyUGx1Z2lucycgOiAnJyk7XG5sZXQgRXZlbnRNYW5hZ2VyID0gLyojX19QVVJFX18qLygoKSA9PiB7XG4gIGNsYXNzIEV2ZW50TWFuYWdlciB7XG4gICAgX3pvbmU7XG4gICAgX3BsdWdpbnM7XG4gICAgX2V2ZW50TmFtZVRvUGx1Z2luID0gbmV3IE1hcCgpO1xuICAgIGNvbnN0cnVjdG9yKHBsdWdpbnMsIF96b25lKSB7XG4gICAgICB0aGlzLl96b25lID0gX3pvbmU7XG4gICAgICBwbHVnaW5zLmZvckVhY2gocGx1Z2luID0+IHtcbiAgICAgICAgcGx1Z2luLm1hbmFnZXIgPSB0aGlzO1xuICAgICAgfSk7XG4gICAgICBjb25zdCBvdGhlclBsdWdpbnMgPSBwbHVnaW5zLmZpbHRlcihwID0+ICEocCBpbnN0YW5jZW9mIERvbUV2ZW50c1BsdWdpbikpO1xuICAgICAgdGhpcy5fcGx1Z2lucyA9IG90aGVyUGx1Z2lucy5zbGljZSgpLnJldmVyc2UoKTtcbiAgICAgIGNvbnN0IGRvbUV2ZW50UGx1Z2luID0gcGx1Z2lucy5maW5kKHAgPT4gcCBpbnN0YW5jZW9mIERvbUV2ZW50c1BsdWdpbik7XG4gICAgICBpZiAoZG9tRXZlbnRQbHVnaW4pIHtcbiAgICAgICAgdGhpcy5fcGx1Z2lucy5wdXNoKGRvbUV2ZW50UGx1Z2luKTtcbiAgICAgIH1cbiAgICB9XG4gICAgYWRkRXZlbnRMaXN0ZW5lcihlbGVtZW50LCBldmVudE5hbWUsIGhhbmRsZXIsIG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IHBsdWdpbiA9IHRoaXMuX2ZpbmRQbHVnaW5Gb3IoZXZlbnROYW1lKTtcbiAgICAgIHJldHVybiBwbHVnaW4uYWRkRXZlbnRMaXN0ZW5lcihlbGVtZW50LCBldmVudE5hbWUsIGhhbmRsZXIsIG9wdGlvbnMpO1xuICAgIH1cbiAgICBnZXRab25lKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3pvbmU7XG4gICAgfVxuICAgIF9maW5kUGx1Z2luRm9yKGV2ZW50TmFtZSkge1xuICAgICAgbGV0IHBsdWdpbiA9IHRoaXMuX2V2ZW50TmFtZVRvUGx1Z2luLmdldChldmVudE5hbWUpO1xuICAgICAgaWYgKHBsdWdpbikge1xuICAgICAgICByZXR1cm4gcGx1Z2luO1xuICAgICAgfVxuICAgICAgY29uc3QgcGx1Z2lucyA9IHRoaXMuX3BsdWdpbnM7XG4gICAgICBwbHVnaW4gPSBwbHVnaW5zLmZpbmQocGx1Z2luID0+IHBsdWdpbi5zdXBwb3J0cyhldmVudE5hbWUpKTtcbiAgICAgIGlmICghcGx1Z2luKSB7XG4gICAgICAgIHRocm93IG5ldyBfUnVudGltZUVycm9yKDUxMDEsICh0eXBlb2YgbmdEZXZNb2RlID09PSAndW5kZWZpbmVkJyB8fCBuZ0Rldk1vZGUpICYmIGBObyBldmVudCBtYW5hZ2VyIHBsdWdpbiBmb3VuZCBmb3IgZXZlbnQgJHtldmVudE5hbWV9YCk7XG4gICAgICB9XG4gICAgICB0aGlzLl9ldmVudE5hbWVUb1BsdWdpbi5zZXQoZXZlbnROYW1lLCBwbHVnaW4pO1xuICAgICAgcmV0dXJuIHBsdWdpbjtcbiAgICB9XG4gICAgc3RhdGljIMm1ZmFjID0gZnVuY3Rpb24gRXZlbnRNYW5hZ2VyX0ZhY3RvcnkoX19uZ0ZhY3RvcnlUeXBlX18pIHtcbiAgICAgIHJldHVybiBuZXcgKF9fbmdGYWN0b3J5VHlwZV9fIHx8IEV2ZW50TWFuYWdlcikoaTAuybXJtWluamVjdChFVkVOVF9NQU5BR0VSX1BMVUdJTlMpLCBpMC7Jtcm1aW5qZWN0KGkwLk5nWm9uZSkpO1xuICAgIH07XG4gICAgc3RhdGljIMm1cHJvdiA9IC8qIEBfX1BVUkVfXyAqL2kwLsm1ybVkZWZpbmVJbmplY3RhYmxlKHtcbiAgICAgIHRva2VuOiBFdmVudE1hbmFnZXIsXG4gICAgICBmYWN0b3J5OiBFdmVudE1hbmFnZXIuybVmYWNcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gRXZlbnRNYW5hZ2VyO1xufSkoKTtcbi8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICAodHlwZW9mIG5nRGV2TW9kZSA9PT0gXCJ1bmRlZmluZWRcIiB8fCBuZ0Rldk1vZGUpICYmIHZvaWQgMDtcbn0pKCk7XG5jb25zdCBBUFBfSURfQVRUUklCVVRFX05BTUUgPSAnbmctYXBwLWlkJztcbmZ1bmN0aW9uIHJlbW92ZUVsZW1lbnRzKGVsZW1lbnRzKSB7XG4gIGZvciAoY29uc3QgZWxlbWVudCBvZiBlbGVtZW50cykge1xuICAgIGVsZW1lbnQucmVtb3ZlKCk7XG4gIH1cbn1cbmZ1bmN0aW9uIGNyZWF0ZVN0eWxlRWxlbWVudChzdHlsZSwgZG9jKSB7XG4gIGNvbnN0IHN0eWxlRWxlbWVudCA9IGRvYy5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuICBzdHlsZUVsZW1lbnQudGV4dENvbnRlbnQgPSBzdHlsZTtcbiAgcmV0dXJuIHN0eWxlRWxlbWVudDtcbn1cbmZ1bmN0aW9uIGFkZFNlcnZlclN0eWxlcyhkb2MsIGFwcElkLCBpbmxpbmUsIGV4dGVybmFsKSB7XG4gIGNvbnN0IGVsZW1lbnRzID0gZG9jLmhlYWQ/LnF1ZXJ5U2VsZWN0b3JBbGwoYHN0eWxlWyR7QVBQX0lEX0FUVFJJQlVURV9OQU1FfT1cIiR7YXBwSWR9XCJdLGxpbmtbJHtBUFBfSURfQVRUUklCVVRFX05BTUV9PVwiJHthcHBJZH1cIl1gKTtcbiAgaWYgKGVsZW1lbnRzKSB7XG4gICAgZm9yIChjb25zdCBzdHlsZUVsZW1lbnQgb2YgZWxlbWVudHMpIHtcbiAgICAgIHN0eWxlRWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoQVBQX0lEX0FUVFJJQlVURV9OQU1FKTtcbiAgICAgIGlmIChzdHlsZUVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MTGlua0VsZW1lbnQpIHtcbiAgICAgICAgZXh0ZXJuYWwuc2V0KHN0eWxlRWxlbWVudC5ocmVmLnNsaWNlKHN0eWxlRWxlbWVudC5ocmVmLmxhc3RJbmRleE9mKCcvJykgKyAxKSwge1xuICAgICAgICAgIHVzYWdlOiAwLFxuICAgICAgICAgIGVsZW1lbnRzOiBbc3R5bGVFbGVtZW50XVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAoc3R5bGVFbGVtZW50LnRleHRDb250ZW50KSB7XG4gICAgICAgIGlubGluZS5zZXQoc3R5bGVFbGVtZW50LnRleHRDb250ZW50LCB7XG4gICAgICAgICAgdXNhZ2U6IDAsXG4gICAgICAgICAgZWxlbWVudHM6IFtzdHlsZUVsZW1lbnRdXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gY3JlYXRlTGlua0VsZW1lbnQodXJsLCBkb2MpIHtcbiAgY29uc3QgbGlua0VsZW1lbnQgPSBkb2MuY3JlYXRlRWxlbWVudCgnbGluaycpO1xuICBsaW5rRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3JlbCcsICdzdHlsZXNoZWV0Jyk7XG4gIGxpbmtFbGVtZW50LnNldEF0dHJpYnV0ZSgnaHJlZicsIHVybCk7XG4gIHJldHVybiBsaW5rRWxlbWVudDtcbn1cbmxldCBTaGFyZWRTdHlsZXNIb3N0ID0gLyojX19QVVJFX18qLygoKSA9PiB7XG4gIGNsYXNzIFNoYXJlZFN0eWxlc0hvc3Qge1xuICAgIGRvYztcbiAgICBhcHBJZDtcbiAgICBub25jZTtcbiAgICBpbmxpbmUgPSBuZXcgTWFwKCk7XG4gICAgZXh0ZXJuYWwgPSBuZXcgTWFwKCk7XG4gICAgaG9zdHMgPSBuZXcgU2V0KCk7XG4gICAgY29uc3RydWN0b3IoZG9jLCBhcHBJZCwgbm9uY2UsIHBsYXRmb3JtSWQgPSB7fSkge1xuICAgICAgdGhpcy5kb2MgPSBkb2M7XG4gICAgICB0aGlzLmFwcElkID0gYXBwSWQ7XG4gICAgICB0aGlzLm5vbmNlID0gbm9uY2U7XG4gICAgICBhZGRTZXJ2ZXJTdHlsZXMoZG9jLCBhcHBJZCwgdGhpcy5pbmxpbmUsIHRoaXMuZXh0ZXJuYWwpO1xuICAgICAgdGhpcy5ob3N0cy5hZGQoZG9jLmhlYWQpO1xuICAgIH1cbiAgICBhZGRTdHlsZXMoc3R5bGVzLCB1cmxzKSB7XG4gICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHN0eWxlcykge1xuICAgICAgICB0aGlzLmFkZFVzYWdlKHZhbHVlLCB0aGlzLmlubGluZSwgY3JlYXRlU3R5bGVFbGVtZW50KTtcbiAgICAgIH1cbiAgICAgIHVybHM/LmZvckVhY2godmFsdWUgPT4gdGhpcy5hZGRVc2FnZSh2YWx1ZSwgdGhpcy5leHRlcm5hbCwgY3JlYXRlTGlua0VsZW1lbnQpKTtcbiAgICB9XG4gICAgcmVtb3ZlU3R5bGVzKHN0eWxlcywgdXJscykge1xuICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiBzdHlsZXMpIHtcbiAgICAgICAgdGhpcy5yZW1vdmVVc2FnZSh2YWx1ZSwgdGhpcy5pbmxpbmUpO1xuICAgICAgfVxuICAgICAgdXJscz8uZm9yRWFjaCh2YWx1ZSA9PiB0aGlzLnJlbW92ZVVzYWdlKHZhbHVlLCB0aGlzLmV4dGVybmFsKSk7XG4gICAgfVxuICAgIGFkZFVzYWdlKHZhbHVlLCB1c2FnZXMsIGNyZWF0b3IpIHtcbiAgICAgIGNvbnN0IHJlY29yZCA9IHVzYWdlcy5nZXQodmFsdWUpO1xuICAgICAgaWYgKHJlY29yZCkge1xuICAgICAgICBpZiAoKHR5cGVvZiBuZ0Rldk1vZGUgPT09ICd1bmRlZmluZWQnIHx8IG5nRGV2TW9kZSkgJiYgcmVjb3JkLnVzYWdlID09PSAwKSB7XG4gICAgICAgICAgcmVjb3JkLmVsZW1lbnRzLmZvckVhY2goZWxlbWVudCA9PiBlbGVtZW50LnNldEF0dHJpYnV0ZSgnbmctc3R5bGUtcmV1c2VkJywgJycpKTtcbiAgICAgICAgfVxuICAgICAgICByZWNvcmQudXNhZ2UrKztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHVzYWdlcy5zZXQodmFsdWUsIHtcbiAgICAgICAgICB1c2FnZTogMSxcbiAgICAgICAgICBlbGVtZW50czogWy4uLnRoaXMuaG9zdHNdLm1hcChob3N0ID0+IHRoaXMuYWRkRWxlbWVudChob3N0LCBjcmVhdG9yKHZhbHVlLCB0aGlzLmRvYykpKVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmVtb3ZlVXNhZ2UodmFsdWUsIHVzYWdlcykge1xuICAgICAgY29uc3QgcmVjb3JkID0gdXNhZ2VzLmdldCh2YWx1ZSk7XG4gICAgICBpZiAocmVjb3JkKSB7XG4gICAgICAgIHJlY29yZC51c2FnZS0tO1xuICAgICAgICBpZiAocmVjb3JkLnVzYWdlIDw9IDApIHtcbiAgICAgICAgICByZW1vdmVFbGVtZW50cyhyZWNvcmQuZWxlbWVudHMpO1xuICAgICAgICAgIHVzYWdlcy5kZWxldGUodmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgZm9yIChjb25zdCBbLCB7XG4gICAgICAgIGVsZW1lbnRzXG4gICAgICB9XSBvZiBbLi4udGhpcy5pbmxpbmUsIC4uLnRoaXMuZXh0ZXJuYWxdKSB7XG4gICAgICAgIHJlbW92ZUVsZW1lbnRzKGVsZW1lbnRzKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuaG9zdHMuY2xlYXIoKTtcbiAgICB9XG4gICAgYWRkSG9zdChob3N0Tm9kZSkge1xuICAgICAgdGhpcy5ob3N0cy5hZGQoaG9zdE5vZGUpO1xuICAgICAgZm9yIChjb25zdCBbc3R5bGUsIHtcbiAgICAgICAgZWxlbWVudHNcbiAgICAgIH1dIG9mIHRoaXMuaW5saW5lKSB7XG4gICAgICAgIGVsZW1lbnRzLnB1c2godGhpcy5hZGRFbGVtZW50KGhvc3ROb2RlLCBjcmVhdGVTdHlsZUVsZW1lbnQoc3R5bGUsIHRoaXMuZG9jKSkpO1xuICAgICAgfVxuICAgICAgZm9yIChjb25zdCBbdXJsLCB7XG4gICAgICAgIGVsZW1lbnRzXG4gICAgICB9XSBvZiB0aGlzLmV4dGVybmFsKSB7XG4gICAgICAgIGVsZW1lbnRzLnB1c2godGhpcy5hZGRFbGVtZW50KGhvc3ROb2RlLCBjcmVhdGVMaW5rRWxlbWVudCh1cmwsIHRoaXMuZG9jKSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZW1vdmVIb3N0KGhvc3ROb2RlKSB7XG4gICAgICB0aGlzLmhvc3RzLmRlbGV0ZShob3N0Tm9kZSk7XG4gICAgfVxuICAgIGFkZEVsZW1lbnQoaG9zdCwgZWxlbWVudCkge1xuICAgICAgaWYgKHRoaXMubm9uY2UpIHtcbiAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ25vbmNlJywgdGhpcy5ub25jZSk7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIG5nU2VydmVyTW9kZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbmdTZXJ2ZXJNb2RlKSB7XG4gICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKEFQUF9JRF9BVFRSSUJVVEVfTkFNRSwgdGhpcy5hcHBJZCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gaG9zdC5hcHBlbmRDaGlsZChlbGVtZW50KTtcbiAgICB9XG4gICAgc3RhdGljIMm1ZmFjID0gZnVuY3Rpb24gU2hhcmVkU3R5bGVzSG9zdF9GYWN0b3J5KF9fbmdGYWN0b3J5VHlwZV9fKSB7XG4gICAgICByZXR1cm4gbmV3IChfX25nRmFjdG9yeVR5cGVfXyB8fCBTaGFyZWRTdHlsZXNIb3N0KShpMC7Jtcm1aW5qZWN0KERPQ1VNRU5UKSwgaTAuybXJtWluamVjdChBUFBfSUQpLCBpMC7Jtcm1aW5qZWN0KENTUF9OT05DRSwgOCksIGkwLsm1ybVpbmplY3QoUExBVEZPUk1fSUQpKTtcbiAgICB9O1xuICAgIHN0YXRpYyDJtXByb3YgPSAvKiBAX19QVVJFX18gKi9pMC7Jtcm1ZGVmaW5lSW5qZWN0YWJsZSh7XG4gICAgICB0b2tlbjogU2hhcmVkU3R5bGVzSG9zdCxcbiAgICAgIGZhY3Rvcnk6IFNoYXJlZFN0eWxlc0hvc3QuybVmYWNcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gU2hhcmVkU3R5bGVzSG9zdDtcbn0pKCk7XG4vKiNfX1BVUkVfXyovKCgpID0+IHtcbiAgKHR5cGVvZiBuZ0Rldk1vZGUgPT09IFwidW5kZWZpbmVkXCIgfHwgbmdEZXZNb2RlKSAmJiB2b2lkIDA7XG59KSgpO1xuY29uc3QgTkFNRVNQQUNFX1VSSVMgPSB7XG4gICdzdmcnOiAnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLFxuICAneGh0bWwnOiAnaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCcsXG4gICd4bGluayc6ICdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rJyxcbiAgJ3htbCc6ICdodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UnLFxuICAneG1sbnMnOiAnaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8nLFxuICAnbWF0aCc6ICdodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MJ1xufTtcbmNvbnN0IENPTVBPTkVOVF9SRUdFWCA9IC8lQ09NUCUvZztcbmNvbnN0IFNPVVJDRU1BUF9VUkxfUkVHRVhQID0gL1xcL1xcKiNcXHMqc291cmNlTWFwcGluZ1VSTD0oLis/KVxccypcXCpcXC8vO1xuY29uc3QgUFJPVE9DT0xfUkVHRVhQID0gL15odHRwcz86LztcbmNvbnN0IENPTVBPTkVOVF9WQVJJQUJMRSA9ICclQ09NUCUnO1xuY29uc3QgSE9TVF9BVFRSID0gYF9uZ2hvc3QtJHtDT01QT05FTlRfVkFSSUFCTEV9YDtcbmNvbnN0IENPTlRFTlRfQVRUUiA9IGBfbmdjb250ZW50LSR7Q09NUE9ORU5UX1ZBUklBQkxFfWA7XG5jb25zdCBSRU1PVkVfU1RZTEVTX09OX0NPTVBPTkVOVF9ERVNUUk9ZX0RFRkFVTFQgPSB0cnVlO1xuY29uc3QgUkVNT1ZFX1NUWUxFU19PTl9DT01QT05FTlRfREVTVFJPWSA9IC8qI19fUFVSRV9fKi9uZXcgSW5qZWN0aW9uVG9rZW4odHlwZW9mIG5nRGV2TW9kZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbmdEZXZNb2RlID8gJ1JlbW92ZVN0eWxlc09uQ29tcERlc3Ryb3knIDogJycsIHtcbiAgZmFjdG9yeTogKCkgPT4gUkVNT1ZFX1NUWUxFU19PTl9DT01QT05FTlRfREVTVFJPWV9ERUZBVUxUXG59KTtcbmZ1bmN0aW9uIHNoaW1Db250ZW50QXR0cmlidXRlKGNvbXBvbmVudFNob3J0SWQpIHtcbiAgcmV0dXJuIENPTlRFTlRfQVRUUi5yZXBsYWNlKENPTVBPTkVOVF9SRUdFWCwgY29tcG9uZW50U2hvcnRJZCk7XG59XG5mdW5jdGlvbiBzaGltSG9zdEF0dHJpYnV0ZShjb21wb25lbnRTaG9ydElkKSB7XG4gIHJldHVybiBIT1NUX0FUVFIucmVwbGFjZShDT01QT05FTlRfUkVHRVgsIGNvbXBvbmVudFNob3J0SWQpO1xufVxuZnVuY3Rpb24gc2hpbVN0eWxlc0NvbnRlbnQoY29tcElkLCBzdHlsZXMpIHtcbiAgcmV0dXJuIHN0eWxlcy5tYXAocyA9PiBzLnJlcGxhY2UoQ09NUE9ORU5UX1JFR0VYLCBjb21wSWQpKTtcbn1cbmZ1bmN0aW9uIGFkZEJhc2VIcmVmVG9Dc3NTb3VyY2VNYXAoYmFzZUhyZWYsIHN0eWxlcykge1xuICBpZiAoIWJhc2VIcmVmKSB7XG4gICAgcmV0dXJuIHN0eWxlcztcbiAgfVxuICBjb25zdCBhYnNvbHV0ZUJhc2VIcmVmVXJsID0gbmV3IFVSTChiYXNlSHJlZiwgJ2h0dHA6Ly9sb2NhbGhvc3QnKTtcbiAgcmV0dXJuIHN0eWxlcy5tYXAoY3NzQ29udGVudCA9PiB7XG4gICAgaWYgKCFjc3NDb250ZW50LmluY2x1ZGVzKCdzb3VyY2VNYXBwaW5nVVJMPScpKSB7XG4gICAgICByZXR1cm4gY3NzQ29udGVudDtcbiAgICB9XG4gICAgcmV0dXJuIGNzc0NvbnRlbnQucmVwbGFjZShTT1VSQ0VNQVBfVVJMX1JFR0VYUCwgKF8sIHNvdXJjZU1hcFVybCkgPT4ge1xuICAgICAgaWYgKHNvdXJjZU1hcFVybFswXSA9PT0gJy8nIHx8IHNvdXJjZU1hcFVybC5zdGFydHNXaXRoKCdkYXRhOicpIHx8IFBST1RPQ09MX1JFR0VYUC50ZXN0KHNvdXJjZU1hcFVybCkpIHtcbiAgICAgICAgcmV0dXJuIGAvKiMgc291cmNlTWFwcGluZ1VSTD0ke3NvdXJjZU1hcFVybH0gKi9gO1xuICAgICAgfVxuICAgICAgY29uc3Qge1xuICAgICAgICBwYXRobmFtZTogcmVzb2x2ZWRTb3VyY2VNYXBVcmxcbiAgICAgIH0gPSBuZXcgVVJMKHNvdXJjZU1hcFVybCwgYWJzb2x1dGVCYXNlSHJlZlVybCk7XG4gICAgICByZXR1cm4gYC8qIyBzb3VyY2VNYXBwaW5nVVJMPSR7cmVzb2x2ZWRTb3VyY2VNYXBVcmx9ICovYDtcbiAgICB9KTtcbiAgfSk7XG59XG5sZXQgRG9tUmVuZGVyZXJGYWN0b3J5MiA9IC8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICBjbGFzcyBEb21SZW5kZXJlckZhY3RvcnkyIHtcbiAgICBldmVudE1hbmFnZXI7XG4gICAgc2hhcmVkU3R5bGVzSG9zdDtcbiAgICBhcHBJZDtcbiAgICByZW1vdmVTdHlsZXNPbkNvbXBEZXN0cm95O1xuICAgIGRvYztcbiAgICBuZ1pvbmU7XG4gICAgbm9uY2U7XG4gICAgdHJhY2luZ1NlcnZpY2U7XG4gICAgcmVuZGVyZXJCeUNvbXBJZCA9IG5ldyBNYXAoKTtcbiAgICBkZWZhdWx0UmVuZGVyZXI7XG4gICAgY29uc3RydWN0b3IoZXZlbnRNYW5hZ2VyLCBzaGFyZWRTdHlsZXNIb3N0LCBhcHBJZCwgcmVtb3ZlU3R5bGVzT25Db21wRGVzdHJveSwgZG9jLCBuZ1pvbmUsIG5vbmNlID0gbnVsbCwgdHJhY2luZ1NlcnZpY2UgPSBudWxsKSB7XG4gICAgICB0aGlzLmV2ZW50TWFuYWdlciA9IGV2ZW50TWFuYWdlcjtcbiAgICAgIHRoaXMuc2hhcmVkU3R5bGVzSG9zdCA9IHNoYXJlZFN0eWxlc0hvc3Q7XG4gICAgICB0aGlzLmFwcElkID0gYXBwSWQ7XG4gICAgICB0aGlzLnJlbW92ZVN0eWxlc09uQ29tcERlc3Ryb3kgPSByZW1vdmVTdHlsZXNPbkNvbXBEZXN0cm95O1xuICAgICAgdGhpcy5kb2MgPSBkb2M7XG4gICAgICB0aGlzLm5nWm9uZSA9IG5nWm9uZTtcbiAgICAgIHRoaXMubm9uY2UgPSBub25jZTtcbiAgICAgIHRoaXMudHJhY2luZ1NlcnZpY2UgPSB0cmFjaW5nU2VydmljZTtcbiAgICAgIHRoaXMuZGVmYXVsdFJlbmRlcmVyID0gbmV3IERlZmF1bHREb21SZW5kZXJlcjIoZXZlbnRNYW5hZ2VyLCBkb2MsIG5nWm9uZSwgdGhpcy50cmFjaW5nU2VydmljZSk7XG4gICAgfVxuICAgIGNyZWF0ZVJlbmRlcmVyKGVsZW1lbnQsIHR5cGUpIHtcbiAgICAgIGlmICghZWxlbWVudCB8fCAhdHlwZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UmVuZGVyZXI7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIG5nU2VydmVyTW9kZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbmdTZXJ2ZXJNb2RlICYmICh0eXBlLmVuY2Fwc3VsYXRpb24gPT09IFZpZXdFbmNhcHN1bGF0aW9uLlNoYWRvd0RvbSB8fCB0eXBlLmVuY2Fwc3VsYXRpb24gPT09IFZpZXdFbmNhcHN1bGF0aW9uLkV4cGVyaW1lbnRhbElzb2xhdGVkU2hhZG93RG9tKSkge1xuICAgICAgICB0eXBlID0ge1xuICAgICAgICAgIC4uLnR5cGUsXG4gICAgICAgICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uRW11bGF0ZWRcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlbmRlcmVyID0gdGhpcy5nZXRPckNyZWF0ZVJlbmRlcmVyKGVsZW1lbnQsIHR5cGUpO1xuICAgICAgaWYgKHJlbmRlcmVyIGluc3RhbmNlb2YgRW11bGF0ZWRFbmNhcHN1bGF0aW9uRG9tUmVuZGVyZXIyKSB7XG4gICAgICAgIHJlbmRlcmVyLmFwcGx5VG9Ib3N0KGVsZW1lbnQpO1xuICAgICAgfSBlbHNlIGlmIChyZW5kZXJlciBpbnN0YW5jZW9mIE5vbmVFbmNhcHN1bGF0aW9uRG9tUmVuZGVyZXIpIHtcbiAgICAgICAgcmVuZGVyZXIuYXBwbHlTdHlsZXMoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZW5kZXJlcjtcbiAgICB9XG4gICAgZ2V0T3JDcmVhdGVSZW5kZXJlcihlbGVtZW50LCB0eXBlKSB7XG4gICAgICBjb25zdCByZW5kZXJlckJ5Q29tcElkID0gdGhpcy5yZW5kZXJlckJ5Q29tcElkO1xuICAgICAgbGV0IHJlbmRlcmVyID0gcmVuZGVyZXJCeUNvbXBJZC5nZXQodHlwZS5pZCk7XG4gICAgICBpZiAoIXJlbmRlcmVyKSB7XG4gICAgICAgIGNvbnN0IGRvYyA9IHRoaXMuZG9jO1xuICAgICAgICBjb25zdCBuZ1pvbmUgPSB0aGlzLm5nWm9uZTtcbiAgICAgICAgY29uc3QgZXZlbnRNYW5hZ2VyID0gdGhpcy5ldmVudE1hbmFnZXI7XG4gICAgICAgIGNvbnN0IHNoYXJlZFN0eWxlc0hvc3QgPSB0aGlzLnNoYXJlZFN0eWxlc0hvc3Q7XG4gICAgICAgIGNvbnN0IHJlbW92ZVN0eWxlc09uQ29tcERlc3Ryb3kgPSB0aGlzLnJlbW92ZVN0eWxlc09uQ29tcERlc3Ryb3k7XG4gICAgICAgIGNvbnN0IHRyYWNpbmdTZXJ2aWNlID0gdGhpcy50cmFjaW5nU2VydmljZTtcbiAgICAgICAgc3dpdGNoICh0eXBlLmVuY2Fwc3VsYXRpb24pIHtcbiAgICAgICAgICBjYXNlIFZpZXdFbmNhcHN1bGF0aW9uLkVtdWxhdGVkOlxuICAgICAgICAgICAgcmVuZGVyZXIgPSBuZXcgRW11bGF0ZWRFbmNhcHN1bGF0aW9uRG9tUmVuZGVyZXIyKGV2ZW50TWFuYWdlciwgc2hhcmVkU3R5bGVzSG9zdCwgdHlwZSwgdGhpcy5hcHBJZCwgcmVtb3ZlU3R5bGVzT25Db21wRGVzdHJveSwgZG9jLCBuZ1pvbmUsIHRyYWNpbmdTZXJ2aWNlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgVmlld0VuY2Fwc3VsYXRpb24uU2hhZG93RG9tOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBTaGFkb3dEb21SZW5kZXJlcihldmVudE1hbmFnZXIsIGVsZW1lbnQsIHR5cGUsIGRvYywgbmdab25lLCB0aGlzLm5vbmNlLCB0cmFjaW5nU2VydmljZSwgc2hhcmVkU3R5bGVzSG9zdCk7XG4gICAgICAgICAgY2FzZSBWaWV3RW5jYXBzdWxhdGlvbi5FeHBlcmltZW50YWxJc29sYXRlZFNoYWRvd0RvbTpcbiAgICAgICAgICAgIHJldHVybiBuZXcgU2hhZG93RG9tUmVuZGVyZXIoZXZlbnRNYW5hZ2VyLCBlbGVtZW50LCB0eXBlLCBkb2MsIG5nWm9uZSwgdGhpcy5ub25jZSwgdHJhY2luZ1NlcnZpY2UpO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZW5kZXJlciA9IG5ldyBOb25lRW5jYXBzdWxhdGlvbkRvbVJlbmRlcmVyKGV2ZW50TWFuYWdlciwgc2hhcmVkU3R5bGVzSG9zdCwgdHlwZSwgcmVtb3ZlU3R5bGVzT25Db21wRGVzdHJveSwgZG9jLCBuZ1pvbmUsIHRyYWNpbmdTZXJ2aWNlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHJlbmRlcmVyQnlDb21wSWQuc2V0KHR5cGUuaWQsIHJlbmRlcmVyKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZW5kZXJlcjtcbiAgICB9XG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICB0aGlzLnJlbmRlcmVyQnlDb21wSWQuY2xlYXIoKTtcbiAgICB9XG4gICAgY29tcG9uZW50UmVwbGFjZWQoY29tcG9uZW50SWQpIHtcbiAgICAgIHRoaXMucmVuZGVyZXJCeUNvbXBJZC5kZWxldGUoY29tcG9uZW50SWQpO1xuICAgIH1cbiAgICBzdGF0aWMgybVmYWMgPSBmdW5jdGlvbiBEb21SZW5kZXJlckZhY3RvcnkyX0ZhY3RvcnkoX19uZ0ZhY3RvcnlUeXBlX18pIHtcbiAgICAgIHJldHVybiBuZXcgKF9fbmdGYWN0b3J5VHlwZV9fIHx8IERvbVJlbmRlcmVyRmFjdG9yeTIpKGkwLsm1ybVpbmplY3QoRXZlbnRNYW5hZ2VyKSwgaTAuybXJtWluamVjdChTaGFyZWRTdHlsZXNIb3N0KSwgaTAuybXJtWluamVjdChBUFBfSUQpLCBpMC7Jtcm1aW5qZWN0KFJFTU9WRV9TVFlMRVNfT05fQ09NUE9ORU5UX0RFU1RST1kpLCBpMC7Jtcm1aW5qZWN0KERPQ1VNRU5UKSwgaTAuybXJtWluamVjdChpMC5OZ1pvbmUpLCBpMC7Jtcm1aW5qZWN0KENTUF9OT05DRSksIGkwLsm1ybVpbmplY3QoX1RyYWNpbmdTZXJ2aWNlLCA4KSk7XG4gICAgfTtcbiAgICBzdGF0aWMgybVwcm92ID0gLyogQF9fUFVSRV9fICovaTAuybXJtWRlZmluZUluamVjdGFibGUoe1xuICAgICAgdG9rZW46IERvbVJlbmRlcmVyRmFjdG9yeTIsXG4gICAgICBmYWN0b3J5OiBEb21SZW5kZXJlckZhY3RvcnkyLsm1ZmFjXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIERvbVJlbmRlcmVyRmFjdG9yeTI7XG59KSgpO1xuLyojX19QVVJFX18qLygoKSA9PiB7XG4gICh0eXBlb2YgbmdEZXZNb2RlID09PSBcInVuZGVmaW5lZFwiIHx8IG5nRGV2TW9kZSkgJiYgdm9pZCAwO1xufSkoKTtcbmNsYXNzIERlZmF1bHREb21SZW5kZXJlcjIge1xuICBldmVudE1hbmFnZXI7XG4gIGRvYztcbiAgbmdab25lO1xuICB0cmFjaW5nU2VydmljZTtcbiAgZGF0YSA9IC8qI19fUFVSRV9fKi9PYmplY3QuY3JlYXRlKG51bGwpO1xuICB0aHJvd09uU3ludGhldGljUHJvcHMgPSB0cnVlO1xuICBjb25zdHJ1Y3RvcihldmVudE1hbmFnZXIsIGRvYywgbmdab25lLCB0cmFjaW5nU2VydmljZSkge1xuICAgIHRoaXMuZXZlbnRNYW5hZ2VyID0gZXZlbnRNYW5hZ2VyO1xuICAgIHRoaXMuZG9jID0gZG9jO1xuICAgIHRoaXMubmdab25lID0gbmdab25lO1xuICAgIHRoaXMudHJhY2luZ1NlcnZpY2UgPSB0cmFjaW5nU2VydmljZTtcbiAgfVxuICBkZXN0cm95KCkge31cbiAgZGVzdHJveU5vZGUgPSBudWxsO1xuICBjcmVhdGVFbGVtZW50KG5hbWUsIG5hbWVzcGFjZSkge1xuICAgIGlmIChuYW1lc3BhY2UpIHtcbiAgICAgIHJldHVybiB0aGlzLmRvYy5jcmVhdGVFbGVtZW50TlMoTkFNRVNQQUNFX1VSSVNbbmFtZXNwYWNlXSB8fCBuYW1lc3BhY2UsIG5hbWUpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5kb2MuY3JlYXRlRWxlbWVudChuYW1lKTtcbiAgfVxuICBjcmVhdGVDb21tZW50KHZhbHVlKSB7XG4gICAgcmV0dXJuIHRoaXMuZG9jLmNyZWF0ZUNvbW1lbnQodmFsdWUpO1xuICB9XG4gIGNyZWF0ZVRleHQodmFsdWUpIHtcbiAgICByZXR1cm4gdGhpcy5kb2MuY3JlYXRlVGV4dE5vZGUodmFsdWUpO1xuICB9XG4gIGFwcGVuZENoaWxkKHBhcmVudCwgbmV3Q2hpbGQpIHtcbiAgICBjb25zdCB0YXJnZXRQYXJlbnQgPSBpc1RlbXBsYXRlTm9kZShwYXJlbnQpID8gcGFyZW50LmNvbnRlbnQgOiBwYXJlbnQ7XG4gICAgdGFyZ2V0UGFyZW50LmFwcGVuZENoaWxkKG5ld0NoaWxkKTtcbiAgfVxuICBpbnNlcnRCZWZvcmUocGFyZW50LCBuZXdDaGlsZCwgcmVmQ2hpbGQpIHtcbiAgICBpZiAocGFyZW50KSB7XG4gICAgICBjb25zdCB0YXJnZXRQYXJlbnQgPSBpc1RlbXBsYXRlTm9kZShwYXJlbnQpID8gcGFyZW50LmNvbnRlbnQgOiBwYXJlbnQ7XG4gICAgICB0YXJnZXRQYXJlbnQuaW5zZXJ0QmVmb3JlKG5ld0NoaWxkLCByZWZDaGlsZCk7XG4gICAgfVxuICB9XG4gIHJlbW92ZUNoaWxkKF9wYXJlbnQsIG9sZENoaWxkKSB7XG4gICAgb2xkQ2hpbGQucmVtb3ZlKCk7XG4gIH1cbiAgc2VsZWN0Um9vdEVsZW1lbnQoc2VsZWN0b3JPck5vZGUsIHByZXNlcnZlQ29udGVudCkge1xuICAgIGxldCBlbCA9IHR5cGVvZiBzZWxlY3Rvck9yTm9kZSA9PT0gJ3N0cmluZycgPyB0aGlzLmRvYy5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yT3JOb2RlKSA6IHNlbGVjdG9yT3JOb2RlO1xuICAgIGlmICghZWwpIHtcbiAgICAgIHRocm93IG5ldyBfUnVudGltZUVycm9yKC01MTA0LCAodHlwZW9mIG5nRGV2TW9kZSA9PT0gJ3VuZGVmaW5lZCcgfHwgbmdEZXZNb2RlKSAmJiBgVGhlIHNlbGVjdG9yIFwiJHtzZWxlY3Rvck9yTm9kZX1cIiBkaWQgbm90IG1hdGNoIGFueSBlbGVtZW50c2ApO1xuICAgIH1cbiAgICBpZiAoIXByZXNlcnZlQ29udGVudCkge1xuICAgICAgZWwudGV4dENvbnRlbnQgPSAnJztcbiAgICB9XG4gICAgcmV0dXJuIGVsO1xuICB9XG4gIHBhcmVudE5vZGUobm9kZSkge1xuICAgIHJldHVybiBub2RlLnBhcmVudE5vZGU7XG4gIH1cbiAgbmV4dFNpYmxpbmcobm9kZSkge1xuICAgIHJldHVybiBub2RlLm5leHRTaWJsaW5nO1xuICB9XG4gIHNldEF0dHJpYnV0ZShlbCwgbmFtZSwgdmFsdWUsIG5hbWVzcGFjZSkge1xuICAgIGlmIChuYW1lc3BhY2UpIHtcbiAgICAgIG5hbWUgPSBuYW1lc3BhY2UgKyAnOicgKyBuYW1lO1xuICAgICAgY29uc3QgbmFtZXNwYWNlVXJpID0gTkFNRVNQQUNFX1VSSVNbbmFtZXNwYWNlXTtcbiAgICAgIGlmIChuYW1lc3BhY2VVcmkpIHtcbiAgICAgICAgZWwuc2V0QXR0cmlidXRlTlMobmFtZXNwYWNlVXJpLCBuYW1lLCB2YWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbC5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBlbC5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpO1xuICAgIH1cbiAgfVxuICByZW1vdmVBdHRyaWJ1dGUoZWwsIG5hbWUsIG5hbWVzcGFjZSkge1xuICAgIGlmIChuYW1lc3BhY2UpIHtcbiAgICAgIGNvbnN0IG5hbWVzcGFjZVVyaSA9IE5BTUVTUEFDRV9VUklTW25hbWVzcGFjZV07XG4gICAgICBpZiAobmFtZXNwYWNlVXJpKSB7XG4gICAgICAgIGVsLnJlbW92ZUF0dHJpYnV0ZU5TKG5hbWVzcGFjZVVyaSwgbmFtZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbC5yZW1vdmVBdHRyaWJ1dGUoYCR7bmFtZXNwYWNlfToke25hbWV9YCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgICB9XG4gIH1cbiAgYWRkQ2xhc3MoZWwsIG5hbWUpIHtcbiAgICBlbC5jbGFzc0xpc3QuYWRkKG5hbWUpO1xuICB9XG4gIHJlbW92ZUNsYXNzKGVsLCBuYW1lKSB7XG4gICAgZWwuY2xhc3NMaXN0LnJlbW92ZShuYW1lKTtcbiAgfVxuICBzZXRTdHlsZShlbCwgc3R5bGUsIHZhbHVlLCBmbGFncykge1xuICAgIGlmIChmbGFncyAmIChSZW5kZXJlclN0eWxlRmxhZ3MyLkRhc2hDYXNlIHwgUmVuZGVyZXJTdHlsZUZsYWdzMi5JbXBvcnRhbnQpKSB7XG4gICAgICBlbC5zdHlsZS5zZXRQcm9wZXJ0eShzdHlsZSwgdmFsdWUsIGZsYWdzICYgUmVuZGVyZXJTdHlsZUZsYWdzMi5JbXBvcnRhbnQgPyAnaW1wb3J0YW50JyA6ICcnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZWwuc3R5bGVbc3R5bGVdID0gdmFsdWU7XG4gICAgfVxuICB9XG4gIHJlbW92ZVN0eWxlKGVsLCBzdHlsZSwgZmxhZ3MpIHtcbiAgICBpZiAoZmxhZ3MgJiBSZW5kZXJlclN0eWxlRmxhZ3MyLkRhc2hDYXNlKSB7XG4gICAgICBlbC5zdHlsZS5yZW1vdmVQcm9wZXJ0eShzdHlsZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsLnN0eWxlW3N0eWxlXSA9ICcnO1xuICAgIH1cbiAgfVxuICBzZXRQcm9wZXJ0eShlbCwgbmFtZSwgdmFsdWUpIHtcbiAgICBpZiAoZWwgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAodHlwZW9mIG5nRGV2TW9kZSA9PT0gJ3VuZGVmaW5lZCcgfHwgbmdEZXZNb2RlKSAmJiB0aGlzLnRocm93T25TeW50aGV0aWNQcm9wcyAmJiBjaGVja05vU3ludGhldGljUHJvcChuYW1lLCAncHJvcGVydHknKTtcbiAgICBlbFtuYW1lXSA9IHZhbHVlO1xuICB9XG4gIHNldFZhbHVlKG5vZGUsIHZhbHVlKSB7XG4gICAgbm9kZS5ub2RlVmFsdWUgPSB2YWx1ZTtcbiAgfVxuICBsaXN0ZW4odGFyZ2V0LCBldmVudCwgY2FsbGJhY2ssIG9wdGlvbnMpIHtcbiAgICAodHlwZW9mIG5nRGV2TW9kZSA9PT0gJ3VuZGVmaW5lZCcgfHwgbmdEZXZNb2RlKSAmJiB0aGlzLnRocm93T25TeW50aGV0aWNQcm9wcyAmJiBjaGVja05vU3ludGhldGljUHJvcChldmVudCwgJ2xpc3RlbmVyJyk7XG4gICAgaWYgKHR5cGVvZiB0YXJnZXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0YXJnZXQgPSBfZ2V0RE9NKCkuZ2V0R2xvYmFsRXZlbnRUYXJnZXQodGhpcy5kb2MsIHRhcmdldCk7XG4gICAgICBpZiAoIXRhcmdldCkge1xuICAgICAgICB0aHJvdyBuZXcgX1J1bnRpbWVFcnJvcig1MTAyLCAodHlwZW9mIG5nRGV2TW9kZSA9PT0gJ3VuZGVmaW5lZCcgfHwgbmdEZXZNb2RlKSAmJiBgVW5zdXBwb3J0ZWQgZXZlbnQgdGFyZ2V0ICR7dGFyZ2V0fSBmb3IgZXZlbnQgJHtldmVudH1gKTtcbiAgICAgIH1cbiAgICB9XG4gICAgbGV0IHdyYXBwZWRDYWxsYmFjayA9IHRoaXMuZGVjb3JhdGVQcmV2ZW50RGVmYXVsdChjYWxsYmFjayk7XG4gICAgaWYgKHRoaXMudHJhY2luZ1NlcnZpY2U/LndyYXBFdmVudExpc3RlbmVyKSB7XG4gICAgICB3cmFwcGVkQ2FsbGJhY2sgPSB0aGlzLnRyYWNpbmdTZXJ2aWNlLndyYXBFdmVudExpc3RlbmVyKHRhcmdldCwgZXZlbnQsIHdyYXBwZWRDYWxsYmFjayk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHRhcmdldCwgZXZlbnQsIHdyYXBwZWRDYWxsYmFjaywgb3B0aW9ucyk7XG4gIH1cbiAgZGVjb3JhdGVQcmV2ZW50RGVmYXVsdChldmVudEhhbmRsZXIpIHtcbiAgICByZXR1cm4gZXZlbnQgPT4ge1xuICAgICAgaWYgKGV2ZW50ID09PSAnX19uZ1Vud3JhcF9fJykge1xuICAgICAgICByZXR1cm4gZXZlbnRIYW5kbGVyO1xuICAgICAgfVxuICAgICAgY29uc3QgYWxsb3dEZWZhdWx0QmVoYXZpb3IgPSB0eXBlb2YgbmdTZXJ2ZXJNb2RlICE9PSAndW5kZWZpbmVkJyAmJiBuZ1NlcnZlck1vZGUgPyB0aGlzLm5nWm9uZS5ydW5HdWFyZGVkKCgpID0+IGV2ZW50SGFuZGxlcihldmVudCkpIDogZXZlbnRIYW5kbGVyKGV2ZW50KTtcbiAgICAgIGlmIChhbGxvd0RlZmF1bHRCZWhhdmlvciA9PT0gZmFsc2UpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfTtcbiAgfVxufVxuY29uc3QgQVRfQ0hBUkNPREUgPSAvKiNfX1BVUkVfXyovKCgpID0+ICdAJy5jaGFyQ29kZUF0KDApKSgpO1xuZnVuY3Rpb24gY2hlY2tOb1N5bnRoZXRpY1Byb3AobmFtZSwgbmFtZUtpbmQpIHtcbiAgaWYgKG5hbWUuY2hhckNvZGVBdCgwKSA9PT0gQVRfQ0hBUkNPREUpIHtcbiAgICB0aHJvdyBuZXcgX1J1bnRpbWVFcnJvcig1MTA1LCBgVW5leHBlY3RlZCBzeW50aGV0aWMgJHtuYW1lS2luZH0gJHtuYW1lfSBmb3VuZC4gUGxlYXNlIG1ha2Ugc3VyZSB0aGF0OlxuICAtIE1ha2Ugc3VyZSBcXGBwcm92aWRlQW5pbWF0aW9uc0FzeW5jKClcXGAsIFxcYHByb3ZpZGVBbmltYXRpb25zKClcXGAgb3IgXFxgcHJvdmlkZU5vb3BBbmltYXRpb25zKClcXGAgY2FsbCB3YXMgYWRkZWQgdG8gYSBsaXN0IG9mIHByb3ZpZGVycyB1c2VkIHRvIGJvb3RzdHJhcCBhbiBhcHBsaWNhdGlvbi5cbiAgLSBUaGVyZSBpcyBhIGNvcnJlc3BvbmRpbmcgYW5pbWF0aW9uIGNvbmZpZ3VyYXRpb24gbmFtZWQgXFxgJHtuYW1lfVxcYCBkZWZpbmVkIGluIHRoZSBcXGBhbmltYXRpb25zXFxgIGZpZWxkIG9mIHRoZSBcXGBAQ29tcG9uZW50XFxgIGRlY29yYXRvciAoc2VlIGh0dHBzOi8vYW5ndWxhci5kZXYvYXBpL2NvcmUvQ29tcG9uZW50I2FuaW1hdGlvbnMpLmApO1xuICB9XG59XG5mdW5jdGlvbiBpc1RlbXBsYXRlTm9kZShub2RlKSB7XG4gIHJldHVybiBub2RlLnRhZ05hbWUgPT09ICdURU1QTEFURScgJiYgbm9kZS5jb250ZW50ICE9PSB1bmRlZmluZWQ7XG59XG5jbGFzcyBTaGFkb3dEb21SZW5kZXJlciBleHRlbmRzIERlZmF1bHREb21SZW5kZXJlcjIge1xuICBob3N0RWw7XG4gIHNoYXJlZFN0eWxlc0hvc3Q7XG4gIHNoYWRvd1Jvb3Q7XG4gIGNvbnN0cnVjdG9yKGV2ZW50TWFuYWdlciwgaG9zdEVsLCBjb21wb25lbnQsIGRvYywgbmdab25lLCBub25jZSwgdHJhY2luZ1NlcnZpY2UsIHNoYXJlZFN0eWxlc0hvc3QpIHtcbiAgICBzdXBlcihldmVudE1hbmFnZXIsIGRvYywgbmdab25lLCB0cmFjaW5nU2VydmljZSk7XG4gICAgdGhpcy5ob3N0RWwgPSBob3N0RWw7XG4gICAgdGhpcy5zaGFyZWRTdHlsZXNIb3N0ID0gc2hhcmVkU3R5bGVzSG9zdDtcbiAgICB0aGlzLnNoYWRvd1Jvb3QgPSBob3N0RWwuYXR0YWNoU2hhZG93KHtcbiAgICAgIG1vZGU6ICdvcGVuJ1xuICAgIH0pO1xuICAgIGlmICh0aGlzLnNoYXJlZFN0eWxlc0hvc3QpIHtcbiAgICAgIHRoaXMuc2hhcmVkU3R5bGVzSG9zdC5hZGRIb3N0KHRoaXMuc2hhZG93Um9vdCk7XG4gICAgfVxuICAgIGxldCBzdHlsZXMgPSBjb21wb25lbnQuc3R5bGVzO1xuICAgIGlmIChuZ0Rldk1vZGUpIHtcbiAgICAgIGNvbnN0IGJhc2VIcmVmID0gX2dldERPTSgpLmdldEJhc2VIcmVmKGRvYykgPz8gJyc7XG4gICAgICBzdHlsZXMgPSBhZGRCYXNlSHJlZlRvQ3NzU291cmNlTWFwKGJhc2VIcmVmLCBzdHlsZXMpO1xuICAgIH1cbiAgICBzdHlsZXMgPSBzaGltU3R5bGVzQ29udGVudChjb21wb25lbnQuaWQsIHN0eWxlcyk7XG4gICAgZm9yIChjb25zdCBzdHlsZSBvZiBzdHlsZXMpIHtcbiAgICAgIGNvbnN0IHN0eWxlRWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuICAgICAgaWYgKG5vbmNlKSB7XG4gICAgICAgIHN0eWxlRWwuc2V0QXR0cmlidXRlKCdub25jZScsIG5vbmNlKTtcbiAgICAgIH1cbiAgICAgIHN0eWxlRWwudGV4dENvbnRlbnQgPSBzdHlsZTtcbiAgICAgIHRoaXMuc2hhZG93Um9vdC5hcHBlbmRDaGlsZChzdHlsZUVsKTtcbiAgICB9XG4gICAgY29uc3Qgc3R5bGVVcmxzID0gY29tcG9uZW50LmdldEV4dGVybmFsU3R5bGVzPy4oKTtcbiAgICBpZiAoc3R5bGVVcmxzKSB7XG4gICAgICBmb3IgKGNvbnN0IHN0eWxlVXJsIG9mIHN0eWxlVXJscykge1xuICAgICAgICBjb25zdCBsaW5rRWwgPSBjcmVhdGVMaW5rRWxlbWVudChzdHlsZVVybCwgZG9jKTtcbiAgICAgICAgaWYgKG5vbmNlKSB7XG4gICAgICAgICAgbGlua0VsLnNldEF0dHJpYnV0ZSgnbm9uY2UnLCBub25jZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zaGFkb3dSb290LmFwcGVuZENoaWxkKGxpbmtFbCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIG5vZGVPclNoYWRvd1Jvb3Qobm9kZSkge1xuICAgIHJldHVybiBub2RlID09PSB0aGlzLmhvc3RFbCA/IHRoaXMuc2hhZG93Um9vdCA6IG5vZGU7XG4gIH1cbiAgYXBwZW5kQ2hpbGQocGFyZW50LCBuZXdDaGlsZCkge1xuICAgIHJldHVybiBzdXBlci5hcHBlbmRDaGlsZCh0aGlzLm5vZGVPclNoYWRvd1Jvb3QocGFyZW50KSwgbmV3Q2hpbGQpO1xuICB9XG4gIGluc2VydEJlZm9yZShwYXJlbnQsIG5ld0NoaWxkLCByZWZDaGlsZCkge1xuICAgIHJldHVybiBzdXBlci5pbnNlcnRCZWZvcmUodGhpcy5ub2RlT3JTaGFkb3dSb290KHBhcmVudCksIG5ld0NoaWxkLCByZWZDaGlsZCk7XG4gIH1cbiAgcmVtb3ZlQ2hpbGQoX3BhcmVudCwgb2xkQ2hpbGQpIHtcbiAgICByZXR1cm4gc3VwZXIucmVtb3ZlQ2hpbGQobnVsbCwgb2xkQ2hpbGQpO1xuICB9XG4gIHBhcmVudE5vZGUobm9kZSkge1xuICAgIHJldHVybiB0aGlzLm5vZGVPclNoYWRvd1Jvb3Qoc3VwZXIucGFyZW50Tm9kZSh0aGlzLm5vZGVPclNoYWRvd1Jvb3Qobm9kZSkpKTtcbiAgfVxuICBkZXN0cm95KCkge1xuICAgIGlmICh0aGlzLnNoYXJlZFN0eWxlc0hvc3QpIHtcbiAgICAgIHRoaXMuc2hhcmVkU3R5bGVzSG9zdC5yZW1vdmVIb3N0KHRoaXMuc2hhZG93Um9vdCk7XG4gICAgfVxuICB9XG59XG5jbGFzcyBOb25lRW5jYXBzdWxhdGlvbkRvbVJlbmRlcmVyIGV4dGVuZHMgRGVmYXVsdERvbVJlbmRlcmVyMiB7XG4gIHNoYXJlZFN0eWxlc0hvc3Q7XG4gIHJlbW92ZVN0eWxlc09uQ29tcERlc3Ryb3k7XG4gIHN0eWxlcztcbiAgc3R5bGVVcmxzO1xuICBjb25zdHJ1Y3RvcihldmVudE1hbmFnZXIsIHNoYXJlZFN0eWxlc0hvc3QsIGNvbXBvbmVudCwgcmVtb3ZlU3R5bGVzT25Db21wRGVzdHJveSwgZG9jLCBuZ1pvbmUsIHRyYWNpbmdTZXJ2aWNlLCBjb21wSWQpIHtcbiAgICBzdXBlcihldmVudE1hbmFnZXIsIGRvYywgbmdab25lLCB0cmFjaW5nU2VydmljZSk7XG4gICAgdGhpcy5zaGFyZWRTdHlsZXNIb3N0ID0gc2hhcmVkU3R5bGVzSG9zdDtcbiAgICB0aGlzLnJlbW92ZVN0eWxlc09uQ29tcERlc3Ryb3kgPSByZW1vdmVTdHlsZXNPbkNvbXBEZXN0cm95O1xuICAgIGxldCBzdHlsZXMgPSBjb21wb25lbnQuc3R5bGVzO1xuICAgIGlmIChuZ0Rldk1vZGUpIHtcbiAgICAgIGNvbnN0IGJhc2VIcmVmID0gX2dldERPTSgpLmdldEJhc2VIcmVmKGRvYykgPz8gJyc7XG4gICAgICBzdHlsZXMgPSBhZGRCYXNlSHJlZlRvQ3NzU291cmNlTWFwKGJhc2VIcmVmLCBzdHlsZXMpO1xuICAgIH1cbiAgICB0aGlzLnN0eWxlcyA9IGNvbXBJZCA/IHNoaW1TdHlsZXNDb250ZW50KGNvbXBJZCwgc3R5bGVzKSA6IHN0eWxlcztcbiAgICB0aGlzLnN0eWxlVXJscyA9IGNvbXBvbmVudC5nZXRFeHRlcm5hbFN0eWxlcz8uKGNvbXBJZCk7XG4gIH1cbiAgYXBwbHlTdHlsZXMoKSB7XG4gICAgdGhpcy5zaGFyZWRTdHlsZXNIb3N0LmFkZFN0eWxlcyh0aGlzLnN0eWxlcywgdGhpcy5zdHlsZVVybHMpO1xuICB9XG4gIGRlc3Ryb3koKSB7XG4gICAgaWYgKCF0aGlzLnJlbW92ZVN0eWxlc09uQ29tcERlc3Ryb3kpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKF9hbGxMZWF2aW5nQW5pbWF0aW9ucy5zaXplID09PSAwKSB7XG4gICAgICB0aGlzLnNoYXJlZFN0eWxlc0hvc3QucmVtb3ZlU3R5bGVzKHRoaXMuc3R5bGVzLCB0aGlzLnN0eWxlVXJscyk7XG4gICAgfVxuICB9XG59XG5jbGFzcyBFbXVsYXRlZEVuY2Fwc3VsYXRpb25Eb21SZW5kZXJlcjIgZXh0ZW5kcyBOb25lRW5jYXBzdWxhdGlvbkRvbVJlbmRlcmVyIHtcbiAgY29udGVudEF0dHI7XG4gIGhvc3RBdHRyO1xuICBjb25zdHJ1Y3RvcihldmVudE1hbmFnZXIsIHNoYXJlZFN0eWxlc0hvc3QsIGNvbXBvbmVudCwgYXBwSWQsIHJlbW92ZVN0eWxlc09uQ29tcERlc3Ryb3ksIGRvYywgbmdab25lLCB0cmFjaW5nU2VydmljZSkge1xuICAgIGNvbnN0IGNvbXBJZCA9IGFwcElkICsgJy0nICsgY29tcG9uZW50LmlkO1xuICAgIHN1cGVyKGV2ZW50TWFuYWdlciwgc2hhcmVkU3R5bGVzSG9zdCwgY29tcG9uZW50LCByZW1vdmVTdHlsZXNPbkNvbXBEZXN0cm95LCBkb2MsIG5nWm9uZSwgdHJhY2luZ1NlcnZpY2UsIGNvbXBJZCk7XG4gICAgdGhpcy5jb250ZW50QXR0ciA9IHNoaW1Db250ZW50QXR0cmlidXRlKGNvbXBJZCk7XG4gICAgdGhpcy5ob3N0QXR0ciA9IHNoaW1Ib3N0QXR0cmlidXRlKGNvbXBJZCk7XG4gIH1cbiAgYXBwbHlUb0hvc3QoZWxlbWVudCkge1xuICAgIHRoaXMuYXBwbHlTdHlsZXMoKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShlbGVtZW50LCB0aGlzLmhvc3RBdHRyLCAnJyk7XG4gIH1cbiAgY3JlYXRlRWxlbWVudChwYXJlbnQsIG5hbWUpIHtcbiAgICBjb25zdCBlbCA9IHN1cGVyLmNyZWF0ZUVsZW1lbnQocGFyZW50LCBuYW1lKTtcbiAgICBzdXBlci5zZXRBdHRyaWJ1dGUoZWwsIHRoaXMuY29udGVudEF0dHIsICcnKTtcbiAgICByZXR1cm4gZWw7XG4gIH1cbn1cbmV4cG9ydCB7IERvbUV2ZW50c1BsdWdpbiwgRG9tUmVuZGVyZXJGYWN0b3J5MiwgRVZFTlRfTUFOQUdFUl9QTFVHSU5TLCBFdmVudE1hbmFnZXIsIEV2ZW50TWFuYWdlclBsdWdpbiwgUkVNT1ZFX1NUWUxFU19PTl9DT01QT05FTlRfREVTVFJPWSwgU2hhcmVkU3R5bGVzSG9zdCB9O1xuIiwiLyoqXG4gKiBAbGljZW5zZSBBbmd1bGFyIHYyMS4yLjRcbiAqIChjKSAyMDEwLTIwMjYgR29vZ2xlIExMQy4gaHR0cHM6Ly9hbmd1bGFyLmRldi9cbiAqIExpY2Vuc2U6IE1JVFxuICovXG5cbmltcG9ydCB7IMm1RG9tQWRhcHRlciBhcyBfRG9tQWRhcHRlciwgybVzZXRSb290RG9tQWRhcHRlciBhcyBfc2V0Um9vdERvbUFkYXB0ZXIsIMm1cGFyc2VDb29raWVWYWx1ZSBhcyBfcGFyc2VDb29raWVWYWx1ZSwgybVnZXRET00gYXMgX2dldERPTSwgRE9DVU1FTlQsIMm1UExBVEZPUk1fQlJPV1NFUl9JRCBhcyBfUExBVEZPUk1fQlJPV1NFUl9JRCwgWGhyRmFjdG9yeSwgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCAqIGFzIGkwIGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgybVnbG9iYWwgYXMgX2dsb2JhbCwgybVSdW50aW1lRXJyb3IgYXMgX1J1bnRpbWVFcnJvciwgSW5qZWN0YWJsZSwgSW5qZWN0LCDJtWludGVybmFsQ3JlYXRlQXBwbGljYXRpb24gYXMgX2ludGVybmFsQ3JlYXRlQXBwbGljYXRpb24sIMm1cmVzb2x2ZUNvbXBvbmVudFJlc291cmNlcyBhcyBfcmVzb2x2ZUNvbXBvbmVudFJlc291cmNlcywgUExBVEZPUk1fSUQsIFBMQVRGT1JNX0lOSVRJQUxJWkVSLCBjcmVhdGVQbGF0Zm9ybUZhY3RvcnksIHBsYXRmb3JtQ29yZSwgSW5qZWN0aW9uVG9rZW4sIMm1VEVTVEFCSUxJVFlfR0VUVEVSIGFzIF9URVNUQUJJTElUWV9HRVRURVIsIMm1VEVTVEFCSUxJVFkgYXMgX1RFU1RBQklMSVRZLCBUZXN0YWJpbGl0eSwgybVJTkpFQ1RPUl9TQ09QRSBhcyBfSU5KRUNUT1JfU0NPUEUsIEVycm9ySGFuZGxlciwgUmVuZGVyZXJGYWN0b3J5MiwgaW5qZWN0LCBBcHBsaWNhdGlvbk1vZHVsZSwgTmdNb2R1bGUsIMm1c2V0RG9jdW1lbnQgYXMgX3NldERvY3VtZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBFdmVudE1hbmFnZXJQbHVnaW4sIEVWRU5UX01BTkFHRVJfUExVR0lOUywgRG9tRXZlbnRzUGx1Z2luLCBEb21SZW5kZXJlckZhY3RvcnkyLCBTaGFyZWRTdHlsZXNIb3N0LCBFdmVudE1hbmFnZXIgfSBmcm9tICcuL19kb21fcmVuZGVyZXItY2h1bmsubWpzJztcbmNsYXNzIEJyb3dzZXJEb21BZGFwdGVyIGV4dGVuZHMgX0RvbUFkYXB0ZXIge1xuICBzdXBwb3J0c0RPTUV2ZW50cyA9IHRydWU7XG4gIHN0YXRpYyBtYWtlQ3VycmVudCgpIHtcbiAgICBfc2V0Um9vdERvbUFkYXB0ZXIobmV3IEJyb3dzZXJEb21BZGFwdGVyKCkpO1xuICB9XG4gIG9uQW5kQ2FuY2VsKGVsLCBldnQsIGxpc3RlbmVyLCBvcHRpb25zKSB7XG4gICAgZWwuYWRkRXZlbnRMaXN0ZW5lcihldnQsIGxpc3RlbmVyLCBvcHRpb25zKTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihldnQsIGxpc3RlbmVyLCBvcHRpb25zKTtcbiAgICB9O1xuICB9XG4gIGRpc3BhdGNoRXZlbnQoZWwsIGV2dCkge1xuICAgIGVsLmRpc3BhdGNoRXZlbnQoZXZ0KTtcbiAgfVxuICByZW1vdmUobm9kZSkge1xuICAgIG5vZGUucmVtb3ZlKCk7XG4gIH1cbiAgY3JlYXRlRWxlbWVudCh0YWdOYW1lLCBkb2MpIHtcbiAgICBkb2MgPSBkb2MgfHwgdGhpcy5nZXREZWZhdWx0RG9jdW1lbnQoKTtcbiAgICByZXR1cm4gZG9jLmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7XG4gIH1cbiAgY3JlYXRlSHRtbERvY3VtZW50KCkge1xuICAgIHJldHVybiBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoJ2Zha2VUaXRsZScpO1xuICB9XG4gIGdldERlZmF1bHREb2N1bWVudCgpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQ7XG4gIH1cbiAgaXNFbGVtZW50Tm9kZShub2RlKSB7XG4gICAgcmV0dXJuIG5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFO1xuICB9XG4gIGlzU2hhZG93Um9vdChub2RlKSB7XG4gICAgcmV0dXJuIG5vZGUgaW5zdGFuY2VvZiBEb2N1bWVudEZyYWdtZW50O1xuICB9XG4gIGdldEdsb2JhbEV2ZW50VGFyZ2V0KGRvYywgdGFyZ2V0KSB7XG4gICAgaWYgKHRhcmdldCA9PT0gJ3dpbmRvdycpIHtcbiAgICAgIHJldHVybiB3aW5kb3c7XG4gICAgfVxuICAgIGlmICh0YXJnZXQgPT09ICdkb2N1bWVudCcpIHtcbiAgICAgIHJldHVybiBkb2M7XG4gICAgfVxuICAgIGlmICh0YXJnZXQgPT09ICdib2R5Jykge1xuICAgICAgcmV0dXJuIGRvYy5ib2R5O1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBnZXRCYXNlSHJlZihkb2MpIHtcbiAgICBjb25zdCBocmVmID0gZ2V0QmFzZUVsZW1lbnRIcmVmKCk7XG4gICAgcmV0dXJuIGhyZWYgPT0gbnVsbCA/IG51bGwgOiByZWxhdGl2ZVBhdGgoaHJlZik7XG4gIH1cbiAgcmVzZXRCYXNlRWxlbWVudCgpIHtcbiAgICBiYXNlRWxlbWVudCA9IG51bGw7XG4gIH1cbiAgZ2V0VXNlckFnZW50KCkge1xuICAgIHJldHVybiB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudDtcbiAgfVxuICBnZXRDb29raWUobmFtZSkge1xuICAgIHJldHVybiBfcGFyc2VDb29raWVWYWx1ZShkb2N1bWVudC5jb29raWUsIG5hbWUpO1xuICB9XG59XG5sZXQgYmFzZUVsZW1lbnQgPSBudWxsO1xuZnVuY3Rpb24gZ2V0QmFzZUVsZW1lbnRIcmVmKCkge1xuICBiYXNlRWxlbWVudCA9IGJhc2VFbGVtZW50IHx8IGRvY3VtZW50LmhlYWQucXVlcnlTZWxlY3RvcignYmFzZScpO1xuICByZXR1cm4gYmFzZUVsZW1lbnQgPyBiYXNlRWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2hyZWYnKSA6IG51bGw7XG59XG5mdW5jdGlvbiByZWxhdGl2ZVBhdGgodXJsKSB7XG4gIHJldHVybiBuZXcgVVJMKHVybCwgZG9jdW1lbnQuYmFzZVVSSSkucGF0aG5hbWU7XG59XG5jbGFzcyBCcm93c2VyR2V0VGVzdGFiaWxpdHkge1xuICBhZGRUb1dpbmRvdyhyZWdpc3RyeSkge1xuICAgIF9nbG9iYWxbJ2dldEFuZ3VsYXJUZXN0YWJpbGl0eSddID0gKGVsZW0sIGZpbmRJbkFuY2VzdG9ycyA9IHRydWUpID0+IHtcbiAgICAgIGNvbnN0IHRlc3RhYmlsaXR5ID0gcmVnaXN0cnkuZmluZFRlc3RhYmlsaXR5SW5UcmVlKGVsZW0sIGZpbmRJbkFuY2VzdG9ycyk7XG4gICAgICBpZiAodGVzdGFiaWxpdHkgPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgX1J1bnRpbWVFcnJvcig1MTAzLCAodHlwZW9mIG5nRGV2TW9kZSA9PT0gJ3VuZGVmaW5lZCcgfHwgbmdEZXZNb2RlKSAmJiAnQ291bGQgbm90IGZpbmQgdGVzdGFiaWxpdHkgZm9yIGVsZW1lbnQuJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGVzdGFiaWxpdHk7XG4gICAgfTtcbiAgICBfZ2xvYmFsWydnZXRBbGxBbmd1bGFyVGVzdGFiaWxpdGllcyddID0gKCkgPT4gcmVnaXN0cnkuZ2V0QWxsVGVzdGFiaWxpdGllcygpO1xuICAgIF9nbG9iYWxbJ2dldEFsbEFuZ3VsYXJSb290RWxlbWVudHMnXSA9ICgpID0+IHJlZ2lzdHJ5LmdldEFsbFJvb3RFbGVtZW50cygpO1xuICAgIGNvbnN0IHdoZW5BbGxTdGFibGUgPSBjYWxsYmFjayA9PiB7XG4gICAgICBjb25zdCB0ZXN0YWJpbGl0aWVzID0gX2dsb2JhbFsnZ2V0QWxsQW5ndWxhclRlc3RhYmlsaXRpZXMnXSgpO1xuICAgICAgbGV0IGNvdW50ID0gdGVzdGFiaWxpdGllcy5sZW5ndGg7XG4gICAgICBjb25zdCBkZWNyZW1lbnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvdW50LS07XG4gICAgICAgIGlmIChjb3VudCA9PSAwKSB7XG4gICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHRlc3RhYmlsaXRpZXMuZm9yRWFjaCh0ZXN0YWJpbGl0eSA9PiB7XG4gICAgICAgIHRlc3RhYmlsaXR5LndoZW5TdGFibGUoZGVjcmVtZW50KTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgaWYgKCFfZ2xvYmFsWydmcmFtZXdvcmtTdGFiaWxpemVycyddKSB7XG4gICAgICBfZ2xvYmFsWydmcmFtZXdvcmtTdGFiaWxpemVycyddID0gW107XG4gICAgfVxuICAgIF9nbG9iYWxbJ2ZyYW1ld29ya1N0YWJpbGl6ZXJzJ10ucHVzaCh3aGVuQWxsU3RhYmxlKTtcbiAgfVxuICBmaW5kVGVzdGFiaWxpdHlJblRyZWUocmVnaXN0cnksIGVsZW0sIGZpbmRJbkFuY2VzdG9ycykge1xuICAgIGlmIChlbGVtID09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCB0ID0gcmVnaXN0cnkuZ2V0VGVzdGFiaWxpdHkoZWxlbSk7XG4gICAgaWYgKHQgIT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHQ7XG4gICAgfSBlbHNlIGlmICghZmluZEluQW5jZXN0b3JzKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgaWYgKF9nZXRET00oKS5pc1NoYWRvd1Jvb3QoZWxlbSkpIHtcbiAgICAgIHJldHVybiB0aGlzLmZpbmRUZXN0YWJpbGl0eUluVHJlZShyZWdpc3RyeSwgZWxlbS5ob3N0LCB0cnVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZmluZFRlc3RhYmlsaXR5SW5UcmVlKHJlZ2lzdHJ5LCBlbGVtLnBhcmVudEVsZW1lbnQsIHRydWUpO1xuICB9XG59XG5sZXQgQnJvd3NlclhociA9IC8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICBjbGFzcyBCcm93c2VyWGhyIHtcbiAgICBidWlsZCgpIHtcbiAgICAgIHJldHVybiBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICB9XG4gICAgc3RhdGljIMm1ZmFjID0gZnVuY3Rpb24gQnJvd3Nlclhocl9GYWN0b3J5KF9fbmdGYWN0b3J5VHlwZV9fKSB7XG4gICAgICByZXR1cm4gbmV3IChfX25nRmFjdG9yeVR5cGVfXyB8fCBCcm93c2VyWGhyKSgpO1xuICAgIH07XG4gICAgc3RhdGljIMm1cHJvdiA9IC8qIEBfX1BVUkVfXyAqL2kwLsm1ybVkZWZpbmVJbmplY3RhYmxlKHtcbiAgICAgIHRva2VuOiBCcm93c2VyWGhyLFxuICAgICAgZmFjdG9yeTogQnJvd3Nlclhoci7JtWZhY1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBCcm93c2VyWGhyO1xufSkoKTtcbi8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICAodHlwZW9mIG5nRGV2TW9kZSA9PT0gXCJ1bmRlZmluZWRcIiB8fCBuZ0Rldk1vZGUpICYmIHZvaWQgMDtcbn0pKCk7XG5jb25zdCBNT0RJRklFUl9LRVlTID0gWydhbHQnLCAnY29udHJvbCcsICdtZXRhJywgJ3NoaWZ0J107XG5jb25zdCBfa2V5TWFwID0ge1xuICAnXFxiJzogJ0JhY2tzcGFjZScsXG4gICdcXHQnOiAnVGFiJyxcbiAgJ1xceDdGJzogJ0RlbGV0ZScsXG4gICdcXHgxQic6ICdFc2NhcGUnLFxuICAnRGVsJzogJ0RlbGV0ZScsXG4gICdFc2MnOiAnRXNjYXBlJyxcbiAgJ0xlZnQnOiAnQXJyb3dMZWZ0JyxcbiAgJ1JpZ2h0JzogJ0Fycm93UmlnaHQnLFxuICAnVXAnOiAnQXJyb3dVcCcsXG4gICdEb3duJzogJ0Fycm93RG93bicsXG4gICdNZW51JzogJ0NvbnRleHRNZW51JyxcbiAgJ1Njcm9sbCc6ICdTY3JvbGxMb2NrJyxcbiAgJ1dpbic6ICdPUydcbn07XG5jb25zdCBNT0RJRklFUl9LRVlfR0VUVEVSUyA9IHtcbiAgJ2FsdCc6IGV2ZW50ID0+IGV2ZW50LmFsdEtleSxcbiAgJ2NvbnRyb2wnOiBldmVudCA9PiBldmVudC5jdHJsS2V5LFxuICAnbWV0YSc6IGV2ZW50ID0+IGV2ZW50Lm1ldGFLZXksXG4gICdzaGlmdCc6IGV2ZW50ID0+IGV2ZW50LnNoaWZ0S2V5XG59O1xubGV0IEtleUV2ZW50c1BsdWdpbiA9IC8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICBjbGFzcyBLZXlFdmVudHNQbHVnaW4gZXh0ZW5kcyBFdmVudE1hbmFnZXJQbHVnaW4ge1xuICAgIGNvbnN0cnVjdG9yKGRvYykge1xuICAgICAgc3VwZXIoZG9jKTtcbiAgICB9XG4gICAgc3VwcG9ydHMoZXZlbnROYW1lKSB7XG4gICAgICByZXR1cm4gS2V5RXZlbnRzUGx1Z2luLnBhcnNlRXZlbnROYW1lKGV2ZW50TmFtZSkgIT0gbnVsbDtcbiAgICB9XG4gICAgYWRkRXZlbnRMaXN0ZW5lcihlbGVtZW50LCBldmVudE5hbWUsIGhhbmRsZXIsIG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IHBhcnNlZEV2ZW50ID0gS2V5RXZlbnRzUGx1Z2luLnBhcnNlRXZlbnROYW1lKGV2ZW50TmFtZSk7XG4gICAgICBjb25zdCBvdXRzaWRlSGFuZGxlciA9IEtleUV2ZW50c1BsdWdpbi5ldmVudENhbGxiYWNrKHBhcnNlZEV2ZW50WydmdWxsS2V5J10sIGhhbmRsZXIsIHRoaXMubWFuYWdlci5nZXRab25lKCkpO1xuICAgICAgcmV0dXJuIHRoaXMubWFuYWdlci5nZXRab25lKCkucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICByZXR1cm4gX2dldERPTSgpLm9uQW5kQ2FuY2VsKGVsZW1lbnQsIHBhcnNlZEV2ZW50Wydkb21FdmVudE5hbWUnXSwgb3V0c2lkZUhhbmRsZXIsIG9wdGlvbnMpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHN0YXRpYyBwYXJzZUV2ZW50TmFtZShldmVudE5hbWUpIHtcbiAgICAgIGNvbnN0IHBhcnRzID0gZXZlbnROYW1lLnRvTG93ZXJDYXNlKCkuc3BsaXQoJy4nKTtcbiAgICAgIGNvbnN0IGRvbUV2ZW50TmFtZSA9IHBhcnRzLnNoaWZ0KCk7XG4gICAgICBpZiAocGFydHMubGVuZ3RoID09PSAwIHx8ICEoZG9tRXZlbnROYW1lID09PSAna2V5ZG93bicgfHwgZG9tRXZlbnROYW1lID09PSAna2V5dXAnKSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGtleSA9IEtleUV2ZW50c1BsdWdpbi5fbm9ybWFsaXplS2V5KHBhcnRzLnBvcCgpKTtcbiAgICAgIGxldCBmdWxsS2V5ID0gJyc7XG4gICAgICBsZXQgY29kZUlYID0gcGFydHMuaW5kZXhPZignY29kZScpO1xuICAgICAgaWYgKGNvZGVJWCA+IC0xKSB7XG4gICAgICAgIHBhcnRzLnNwbGljZShjb2RlSVgsIDEpO1xuICAgICAgICBmdWxsS2V5ID0gJ2NvZGUuJztcbiAgICAgIH1cbiAgICAgIE1PRElGSUVSX0tFWVMuZm9yRWFjaChtb2RpZmllck5hbWUgPT4ge1xuICAgICAgICBjb25zdCBpbmRleCA9IHBhcnRzLmluZGV4T2YobW9kaWZpZXJOYW1lKTtcbiAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICBwYXJ0cy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgIGZ1bGxLZXkgKz0gbW9kaWZpZXJOYW1lICsgJy4nO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGZ1bGxLZXkgKz0ga2V5O1xuICAgICAgaWYgKHBhcnRzLmxlbmd0aCAhPSAwIHx8IGtleS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICAgIHJlc3VsdFsnZG9tRXZlbnROYW1lJ10gPSBkb21FdmVudE5hbWU7XG4gICAgICByZXN1bHRbJ2Z1bGxLZXknXSA9IGZ1bGxLZXk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBzdGF0aWMgbWF0Y2hFdmVudEZ1bGxLZXlDb2RlKGV2ZW50LCBmdWxsS2V5Q29kZSkge1xuICAgICAgbGV0IGtleWNvZGUgPSBfa2V5TWFwW2V2ZW50LmtleV0gfHwgZXZlbnQua2V5O1xuICAgICAgbGV0IGtleSA9ICcnO1xuICAgICAgaWYgKGZ1bGxLZXlDb2RlLmluZGV4T2YoJ2NvZGUuJykgPiAtMSkge1xuICAgICAgICBrZXljb2RlID0gZXZlbnQuY29kZTtcbiAgICAgICAga2V5ID0gJ2NvZGUuJztcbiAgICAgIH1cbiAgICAgIGlmIChrZXljb2RlID09IG51bGwgfHwgIWtleWNvZGUpIHJldHVybiBmYWxzZTtcbiAgICAgIGtleWNvZGUgPSBrZXljb2RlLnRvTG93ZXJDYXNlKCk7XG4gICAgICBpZiAoa2V5Y29kZSA9PT0gJyAnKSB7XG4gICAgICAgIGtleWNvZGUgPSAnc3BhY2UnO1xuICAgICAgfSBlbHNlIGlmIChrZXljb2RlID09PSAnLicpIHtcbiAgICAgICAga2V5Y29kZSA9ICdkb3QnO1xuICAgICAgfVxuICAgICAgTU9ESUZJRVJfS0VZUy5mb3JFYWNoKG1vZGlmaWVyTmFtZSA9PiB7XG4gICAgICAgIGlmIChtb2RpZmllck5hbWUgIT09IGtleWNvZGUpIHtcbiAgICAgICAgICBjb25zdCBtb2RpZmllckdldHRlciA9IE1PRElGSUVSX0tFWV9HRVRURVJTW21vZGlmaWVyTmFtZV07XG4gICAgICAgICAgaWYgKG1vZGlmaWVyR2V0dGVyKGV2ZW50KSkge1xuICAgICAgICAgICAga2V5ICs9IG1vZGlmaWVyTmFtZSArICcuJztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAga2V5ICs9IGtleWNvZGU7XG4gICAgICByZXR1cm4ga2V5ID09PSBmdWxsS2V5Q29kZTtcbiAgICB9XG4gICAgc3RhdGljIGV2ZW50Q2FsbGJhY2soZnVsbEtleSwgaGFuZGxlciwgem9uZSkge1xuICAgICAgcmV0dXJuIGV2ZW50ID0+IHtcbiAgICAgICAgaWYgKEtleUV2ZW50c1BsdWdpbi5tYXRjaEV2ZW50RnVsbEtleUNvZGUoZXZlbnQsIGZ1bGxLZXkpKSB7XG4gICAgICAgICAgem9uZS5ydW5HdWFyZGVkKCgpID0+IGhhbmRsZXIoZXZlbnQpKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG4gICAgc3RhdGljIF9ub3JtYWxpemVLZXkoa2V5TmFtZSkge1xuICAgICAgcmV0dXJuIGtleU5hbWUgPT09ICdlc2MnID8gJ2VzY2FwZScgOiBrZXlOYW1lO1xuICAgIH1cbiAgICBzdGF0aWMgybVmYWMgPSBmdW5jdGlvbiBLZXlFdmVudHNQbHVnaW5fRmFjdG9yeShfX25nRmFjdG9yeVR5cGVfXykge1xuICAgICAgcmV0dXJuIG5ldyAoX19uZ0ZhY3RvcnlUeXBlX18gfHwgS2V5RXZlbnRzUGx1Z2luKShpMC7Jtcm1aW5qZWN0KERPQ1VNRU5UKSk7XG4gICAgfTtcbiAgICBzdGF0aWMgybVwcm92ID0gLyogQF9fUFVSRV9fICovaTAuybXJtWRlZmluZUluamVjdGFibGUoe1xuICAgICAgdG9rZW46IEtleUV2ZW50c1BsdWdpbixcbiAgICAgIGZhY3Rvcnk6IEtleUV2ZW50c1BsdWdpbi7JtWZhY1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBLZXlFdmVudHNQbHVnaW47XG59KSgpO1xuLyojX19QVVJFX18qLygoKSA9PiB7XG4gICh0eXBlb2YgbmdEZXZNb2RlID09PSBcInVuZGVmaW5lZFwiIHx8IG5nRGV2TW9kZSkgJiYgdm9pZCAwO1xufSkoKTtcbmFzeW5jIGZ1bmN0aW9uIGJvb3RzdHJhcEFwcGxpY2F0aW9uKHJvb3RDb21wb25lbnQsIG9wdGlvbnMsIGNvbnRleHQpIHtcbiAgY29uc3QgY29uZmlnID0ge1xuICAgIHJvb3RDb21wb25lbnQsXG4gICAgLi4uY3JlYXRlUHJvdmlkZXJzQ29uZmlnKG9wdGlvbnMsIGNvbnRleHQpXG4gIH07XG4gIGlmICgodHlwZW9mIG5nSml0TW9kZSA9PT0gJ3VuZGVmaW5lZCcgfHwgbmdKaXRNb2RlKSAmJiB0eXBlb2YgZmV0Y2ggPT09ICdmdW5jdGlvbicpIHtcbiAgICBhd2FpdCByZXNvbHZlSml0UmVzb3VyY2VzKCk7XG4gIH1cbiAgcmV0dXJuIF9pbnRlcm5hbENyZWF0ZUFwcGxpY2F0aW9uKGNvbmZpZyk7XG59XG5hc3luYyBmdW5jdGlvbiBjcmVhdGVBcHBsaWNhdGlvbihvcHRpb25zLCBjb250ZXh0KSB7XG4gIGlmICgodHlwZW9mIG5nSml0TW9kZSA9PT0gJ3VuZGVmaW5lZCcgfHwgbmdKaXRNb2RlKSAmJiB0eXBlb2YgZmV0Y2ggPT09ICdmdW5jdGlvbicpIHtcbiAgICBhd2FpdCByZXNvbHZlSml0UmVzb3VyY2VzKCk7XG4gIH1cbiAgcmV0dXJuIF9pbnRlcm5hbENyZWF0ZUFwcGxpY2F0aW9uKGNyZWF0ZVByb3ZpZGVyc0NvbmZpZyhvcHRpb25zLCBjb250ZXh0KSk7XG59XG5mdW5jdGlvbiBjcmVhdGVQcm92aWRlcnNDb25maWcob3B0aW9ucywgY29udGV4dCkge1xuICByZXR1cm4ge1xuICAgIHBsYXRmb3JtUmVmOiBjb250ZXh0Py5wbGF0Zm9ybVJlZixcbiAgICBhcHBQcm92aWRlcnM6IFsuLi5CUk9XU0VSX01PRFVMRV9QUk9WSURFUlMsIC4uLihvcHRpb25zPy5wcm92aWRlcnMgPz8gW10pXSxcbiAgICBwbGF0Zm9ybVByb3ZpZGVyczogSU5URVJOQUxfQlJPV1NFUl9QTEFURk9STV9QUk9WSURFUlNcbiAgfTtcbn1cbmFzeW5jIGZ1bmN0aW9uIHJlc29sdmVKaXRSZXNvdXJjZXMoKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IF9yZXNvbHZlQ29tcG9uZW50UmVzb3VyY2VzKGZldGNoKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgfVxufVxuZnVuY3Rpb24gcHJvdmlkZVByb3RyYWN0b3JUZXN0aW5nU3VwcG9ydCgpIHtcbiAgcmV0dXJuIFsuLi5URVNUQUJJTElUWV9QUk9WSURFUlNdO1xufVxuZnVuY3Rpb24gaW5pdERvbUFkYXB0ZXIoKSB7XG4gIEJyb3dzZXJEb21BZGFwdGVyLm1ha2VDdXJyZW50KCk7XG59XG5mdW5jdGlvbiBlcnJvckhhbmRsZXIoKSB7XG4gIHJldHVybiBuZXcgRXJyb3JIYW5kbGVyKCk7XG59XG5mdW5jdGlvbiBfZG9jdW1lbnQoKSB7XG4gIF9zZXREb2N1bWVudChkb2N1bWVudCk7XG4gIHJldHVybiBkb2N1bWVudDtcbn1cbmNvbnN0IElOVEVSTkFMX0JST1dTRVJfUExBVEZPUk1fUFJPVklERVJTID0gW3tcbiAgcHJvdmlkZTogUExBVEZPUk1fSUQsXG4gIHVzZVZhbHVlOiBfUExBVEZPUk1fQlJPV1NFUl9JRFxufSwge1xuICBwcm92aWRlOiBQTEFURk9STV9JTklUSUFMSVpFUixcbiAgdXNlVmFsdWU6IGluaXREb21BZGFwdGVyLFxuICBtdWx0aTogdHJ1ZVxufSwge1xuICBwcm92aWRlOiBET0NVTUVOVCxcbiAgdXNlRmFjdG9yeTogX2RvY3VtZW50XG59XTtcbmNvbnN0IHBsYXRmb3JtQnJvd3NlciA9IC8qI19fUFVSRV9fKi9jcmVhdGVQbGF0Zm9ybUZhY3RvcnkocGxhdGZvcm1Db3JlLCAnYnJvd3NlcicsIElOVEVSTkFMX0JST1dTRVJfUExBVEZPUk1fUFJPVklERVJTKTtcbmNvbnN0IEJST1dTRVJfTU9EVUxFX1BST1ZJREVSU19NQVJLRVIgPSAvKiNfX1BVUkVfXyovbmV3IEluamVjdGlvblRva2VuKHR5cGVvZiBuZ0Rldk1vZGUgPT09ICd1bmRlZmluZWQnIHx8IG5nRGV2TW9kZSA/ICdCcm93c2VyTW9kdWxlIFByb3ZpZGVycyBNYXJrZXInIDogJycpO1xuY29uc3QgVEVTVEFCSUxJVFlfUFJPVklERVJTID0gW3tcbiAgcHJvdmlkZTogX1RFU1RBQklMSVRZX0dFVFRFUixcbiAgdXNlQ2xhc3M6IEJyb3dzZXJHZXRUZXN0YWJpbGl0eVxufSwge1xuICBwcm92aWRlOiBfVEVTVEFCSUxJVFksXG4gIHVzZUNsYXNzOiBUZXN0YWJpbGl0eVxufSwge1xuICBwcm92aWRlOiBUZXN0YWJpbGl0eSxcbiAgdXNlQ2xhc3M6IFRlc3RhYmlsaXR5XG59XTtcbmNvbnN0IEJST1dTRVJfTU9EVUxFX1BST1ZJREVSUyA9IFt7XG4gIHByb3ZpZGU6IF9JTkpFQ1RPUl9TQ09QRSxcbiAgdXNlVmFsdWU6ICdyb290J1xufSwge1xuICBwcm92aWRlOiBFcnJvckhhbmRsZXIsXG4gIHVzZUZhY3Rvcnk6IGVycm9ySGFuZGxlclxufSwge1xuICBwcm92aWRlOiBFVkVOVF9NQU5BR0VSX1BMVUdJTlMsXG4gIHVzZUNsYXNzOiBEb21FdmVudHNQbHVnaW4sXG4gIG11bHRpOiB0cnVlXG59LCB7XG4gIHByb3ZpZGU6IEVWRU5UX01BTkFHRVJfUExVR0lOUyxcbiAgdXNlQ2xhc3M6IEtleUV2ZW50c1BsdWdpbixcbiAgbXVsdGk6IHRydWVcbn0sIERvbVJlbmRlcmVyRmFjdG9yeTIsIFNoYXJlZFN0eWxlc0hvc3QsIEV2ZW50TWFuYWdlciwge1xuICBwcm92aWRlOiBSZW5kZXJlckZhY3RvcnkyLFxuICB1c2VFeGlzdGluZzogRG9tUmVuZGVyZXJGYWN0b3J5MlxufSwge1xuICBwcm92aWRlOiBYaHJGYWN0b3J5LFxuICB1c2VDbGFzczogQnJvd3NlclhoclxufSwgdHlwZW9mIG5nRGV2TW9kZSA9PT0gJ3VuZGVmaW5lZCcgfHwgbmdEZXZNb2RlID8ge1xuICBwcm92aWRlOiBCUk9XU0VSX01PRFVMRV9QUk9WSURFUlNfTUFSS0VSLFxuICB1c2VWYWx1ZTogdHJ1ZVxufSA6IFtdXTtcbmxldCBCcm93c2VyTW9kdWxlID0gLyojX19QVVJFX18qLygoKSA9PiB7XG4gIGNsYXNzIEJyb3dzZXJNb2R1bGUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgaWYgKHR5cGVvZiBuZ0Rldk1vZGUgPT09ICd1bmRlZmluZWQnIHx8IG5nRGV2TW9kZSkge1xuICAgICAgICBjb25zdCBwcm92aWRlcnNBbHJlYWR5UHJlc2VudCA9IGluamVjdChCUk9XU0VSX01PRFVMRV9QUk9WSURFUlNfTUFSS0VSLCB7XG4gICAgICAgICAgb3B0aW9uYWw6IHRydWUsXG4gICAgICAgICAgc2tpcFNlbGY6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChwcm92aWRlcnNBbHJlYWR5UHJlc2VudCkge1xuICAgICAgICAgIHRocm93IG5ldyBfUnVudGltZUVycm9yKDUxMDAsIGBQcm92aWRlcnMgZnJvbSB0aGUgXFxgQnJvd3Nlck1vZHVsZVxcYCBoYXZlIGFscmVhZHkgYmVlbiBsb2FkZWQuIElmIHlvdSBuZWVkIGFjY2VzcyBgICsgYHRvIGNvbW1vbiBkaXJlY3RpdmVzIHN1Y2ggYXMgTmdJZiBhbmQgTmdGb3IsIGltcG9ydCB0aGUgXFxgQ29tbW9uTW9kdWxlXFxgIGluc3RlYWQuYCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIMm1ZmFjID0gZnVuY3Rpb24gQnJvd3Nlck1vZHVsZV9GYWN0b3J5KF9fbmdGYWN0b3J5VHlwZV9fKSB7XG4gICAgICByZXR1cm4gbmV3IChfX25nRmFjdG9yeVR5cGVfXyB8fCBCcm93c2VyTW9kdWxlKSgpO1xuICAgIH07XG4gICAgc3RhdGljIMm1bW9kID0gLyogQF9fUFVSRV9fICovaTAuybXJtWRlZmluZU5nTW9kdWxlKHtcbiAgICAgIHR5cGU6IEJyb3dzZXJNb2R1bGVcbiAgICB9KTtcbiAgICBzdGF0aWMgybVpbmogPSAvKiBAX19QVVJFX18gKi9pMC7Jtcm1ZGVmaW5lSW5qZWN0b3Ioe1xuICAgICAgcHJvdmlkZXJzOiBbLi4uQlJPV1NFUl9NT0RVTEVfUFJPVklERVJTLCAuLi5URVNUQUJJTElUWV9QUk9WSURFUlNdLFxuICAgICAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgQXBwbGljYXRpb25Nb2R1bGVdXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIEJyb3dzZXJNb2R1bGU7XG59KSgpO1xuLyojX19QVVJFX18qLygoKSA9PiB7XG4gICh0eXBlb2YgbmdEZXZNb2RlID09PSBcInVuZGVmaW5lZFwiIHx8IG5nRGV2TW9kZSkgJiYgdm9pZCAwO1xufSkoKTtcbmV4cG9ydCB7IEJyb3dzZXJEb21BZGFwdGVyLCBCcm93c2VyR2V0VGVzdGFiaWxpdHksIEJyb3dzZXJNb2R1bGUsIEtleUV2ZW50c1BsdWdpbiwgYm9vdHN0cmFwQXBwbGljYXRpb24sIGNyZWF0ZUFwcGxpY2F0aW9uLCBwbGF0Zm9ybUJyb3dzZXIsIHByb3ZpZGVQcm90cmFjdG9yVGVzdGluZ1N1cHBvcnQgfTtcbiIsIi8qKlxuICogQGxpY2Vuc2UgQW5ndWxhciB2MjEuMi40XG4gKiAoYykgMjAxMC0yMDI2IEdvb2dsZSBMTEMuIGh0dHBzOi8vYW5ndWxhci5kZXYvXG4gKiBMaWNlbnNlOiBNSVRcbiAqL1xuXG5leHBvcnQgeyBCcm93c2VyTW9kdWxlLCBib290c3RyYXBBcHBsaWNhdGlvbiwgY3JlYXRlQXBwbGljYXRpb24sIHBsYXRmb3JtQnJvd3NlciwgcHJvdmlkZVByb3RyYWN0b3JUZXN0aW5nU3VwcG9ydCwgQnJvd3NlckRvbUFkYXB0ZXIgYXMgybVCcm93c2VyRG9tQWRhcHRlciwgQnJvd3NlckdldFRlc3RhYmlsaXR5IGFzIMm1QnJvd3NlckdldFRlc3RhYmlsaXR5LCBLZXlFdmVudHNQbHVnaW4gYXMgybVLZXlFdmVudHNQbHVnaW4gfSBmcm9tICcuL19icm93c2VyLWNodW5rLm1qcyc7XG5pbXBvcnQgeyDJtWdldERPTSBhcyBfZ2V0RE9NLCBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5leHBvcnQgeyDJtWdldERPTSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgKiBhcyBpMCBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEluamVjdGFibGUsIEluamVjdCwgybVnbG9iYWwgYXMgX2dsb2JhbCwgQXBwbGljYXRpb25SZWYsIEluamVjdGlvblRva2VuLCDJtUNvbnNvbGUgYXMgX0NvbnNvbGUsIE9wdGlvbmFsLCBJbmplY3RvciwgTmdNb2R1bGUsIGZvcndhcmRSZWYsIMm1UnVudGltZUVycm9yIGFzIF9SdW50aW1lRXJyb3IsIMm1WFNTX1NFQ1VSSVRZX1VSTCBhcyBfWFNTX1NFQ1VSSVRZX1VSTCwgU2VjdXJpdHlDb250ZXh0LCDJtWFsbG93U2FuaXRpemF0aW9uQnlwYXNzQW5kVGhyb3cgYXMgX2FsbG93U2FuaXRpemF0aW9uQnlwYXNzQW5kVGhyb3csIMm1dW53cmFwU2FmZVZhbHVlIGFzIF91bndyYXBTYWZlVmFsdWUsIMm1X3Nhbml0aXplVXJsIGFzIF9fc2FuaXRpemVVcmwsIMm1X3Nhbml0aXplSHRtbCBhcyBfX3Nhbml0aXplSHRtbCwgybVieXBhc3NTYW5pdGl6YXRpb25UcnVzdEh0bWwgYXMgX2J5cGFzc1Nhbml0aXphdGlvblRydXN0SHRtbCwgybVieXBhc3NTYW5pdGl6YXRpb25UcnVzdFN0eWxlIGFzIF9ieXBhc3NTYW5pdGl6YXRpb25UcnVzdFN0eWxlLCDJtWJ5cGFzc1Nhbml0aXphdGlvblRydXN0U2NyaXB0IGFzIF9ieXBhc3NTYW5pdGl6YXRpb25UcnVzdFNjcmlwdCwgybVieXBhc3NTYW5pdGl6YXRpb25UcnVzdFVybCBhcyBfYnlwYXNzU2FuaXRpemF0aW9uVHJ1c3RVcmwsIMm1YnlwYXNzU2FuaXRpemF0aW9uVHJ1c3RSZXNvdXJjZVVybCBhcyBfYnlwYXNzU2FuaXRpemF0aW9uVHJ1c3RSZXNvdXJjZVVybCwgybV3aXRoSTE4blN1cHBvcnQgYXMgX3dpdGhJMThuU3VwcG9ydCwgybV3aXRoRXZlbnRSZXBsYXkgYXMgX3dpdGhFdmVudFJlcGxheSwgybV3aXRoSW5jcmVtZW50YWxIeWRyYXRpb24gYXMgX3dpdGhJbmNyZW1lbnRhbEh5ZHJhdGlvbiwgbWFrZUVudmlyb25tZW50UHJvdmlkZXJzLCBwcm92aWRlU3RhYmlsaXR5RGVidWdnaW5nLCDJtXdpdGhEb21IeWRyYXRpb24gYXMgX3dpdGhEb21IeWRyYXRpb24sIEVOVklST05NRU5UX0lOSVRJQUxJWkVSLCBpbmplY3QsIMm1SVNfRU5BQkxFRF9CTE9DS0lOR19JTklUSUFMX05BVklHQVRJT04gYXMgX0lTX0VOQUJMRURfQkxPQ0tJTkdfSU5JVElBTF9OQVZJR0FUSU9OLCDJtWZvcm1hdFJ1bnRpbWVFcnJvciBhcyBfZm9ybWF0UnVudGltZUVycm9yLCBWZXJzaW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBFdmVudE1hbmFnZXJQbHVnaW4sIEVWRU5UX01BTkFHRVJfUExVR0lOUyB9IGZyb20gJy4vX2RvbV9yZW5kZXJlci1jaHVuay5tanMnO1xuZXhwb3J0IHsgRXZlbnRNYW5hZ2VyLCBSRU1PVkVfU1RZTEVTX09OX0NPTVBPTkVOVF9ERVNUUk9ZLCBEb21FdmVudHNQbHVnaW4gYXMgybVEb21FdmVudHNQbHVnaW4sIERvbVJlbmRlcmVyRmFjdG9yeTIgYXMgybVEb21SZW5kZXJlckZhY3RvcnkyLCBTaGFyZWRTdHlsZXNIb3N0IGFzIMm1U2hhcmVkU3R5bGVzSG9zdCB9IGZyb20gJy4vX2RvbV9yZW5kZXJlci1jaHVuay5tanMnO1xuaW1wb3J0IHsgybV3aXRoSHR0cFRyYW5zZmVyQ2FjaGUgYXMgX3dpdGhIdHRwVHJhbnNmZXJDYWNoZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmxldCBNZXRhID0gLyojX19QVVJFX18qLygoKSA9PiB7XG4gIGNsYXNzIE1ldGEge1xuICAgIF9kb2M7XG4gICAgX2RvbTtcbiAgICBjb25zdHJ1Y3RvcihfZG9jKSB7XG4gICAgICB0aGlzLl9kb2MgPSBfZG9jO1xuICAgICAgdGhpcy5fZG9tID0gX2dldERPTSgpO1xuICAgIH1cbiAgICBhZGRUYWcodGFnLCBmb3JjZUNyZWF0aW9uID0gZmFsc2UpIHtcbiAgICAgIGlmICghdGFnKSByZXR1cm4gbnVsbDtcbiAgICAgIHJldHVybiB0aGlzLl9nZXRPckNyZWF0ZUVsZW1lbnQodGFnLCBmb3JjZUNyZWF0aW9uKTtcbiAgICB9XG4gICAgYWRkVGFncyh0YWdzLCBmb3JjZUNyZWF0aW9uID0gZmFsc2UpIHtcbiAgICAgIGlmICghdGFncykgcmV0dXJuIFtdO1xuICAgICAgcmV0dXJuIHRhZ3MucmVkdWNlKChyZXN1bHQsIHRhZykgPT4ge1xuICAgICAgICBpZiAodGFnKSB7XG4gICAgICAgICAgcmVzdWx0LnB1c2godGhpcy5fZ2V0T3JDcmVhdGVFbGVtZW50KHRhZywgZm9yY2VDcmVhdGlvbikpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9LCBbXSk7XG4gICAgfVxuICAgIGdldFRhZyhhdHRyU2VsZWN0b3IpIHtcbiAgICAgIGlmICghYXR0clNlbGVjdG9yKSByZXR1cm4gbnVsbDtcbiAgICAgIHJldHVybiB0aGlzLl9kb2MucXVlcnlTZWxlY3RvcihgbWV0YVske2F0dHJTZWxlY3Rvcn1dYCkgfHwgbnVsbDtcbiAgICB9XG4gICAgZ2V0VGFncyhhdHRyU2VsZWN0b3IpIHtcbiAgICAgIGlmICghYXR0clNlbGVjdG9yKSByZXR1cm4gW107XG4gICAgICBjb25zdCBsaXN0ID0gdGhpcy5fZG9jLnF1ZXJ5U2VsZWN0b3JBbGwoYG1ldGFbJHthdHRyU2VsZWN0b3J9XWApO1xuICAgICAgcmV0dXJuIGxpc3QgPyBbXS5zbGljZS5jYWxsKGxpc3QpIDogW107XG4gICAgfVxuICAgIHVwZGF0ZVRhZyh0YWcsIHNlbGVjdG9yKSB7XG4gICAgICBpZiAoIXRhZykgcmV0dXJuIG51bGw7XG4gICAgICBzZWxlY3RvciA9IHNlbGVjdG9yIHx8IHRoaXMuX3BhcnNlU2VsZWN0b3IodGFnKTtcbiAgICAgIGNvbnN0IG1ldGEgPSB0aGlzLmdldFRhZyhzZWxlY3Rvcik7XG4gICAgICBpZiAobWV0YSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2V0TWV0YUVsZW1lbnRBdHRyaWJ1dGVzKHRhZywgbWV0YSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5fZ2V0T3JDcmVhdGVFbGVtZW50KHRhZywgdHJ1ZSk7XG4gICAgfVxuICAgIHJlbW92ZVRhZyhhdHRyU2VsZWN0b3IpIHtcbiAgICAgIHRoaXMucmVtb3ZlVGFnRWxlbWVudCh0aGlzLmdldFRhZyhhdHRyU2VsZWN0b3IpKTtcbiAgICB9XG4gICAgcmVtb3ZlVGFnRWxlbWVudChtZXRhKSB7XG4gICAgICBpZiAobWV0YSkge1xuICAgICAgICB0aGlzLl9kb20ucmVtb3ZlKG1ldGEpO1xuICAgICAgfVxuICAgIH1cbiAgICBfZ2V0T3JDcmVhdGVFbGVtZW50KG1ldGEsIGZvcmNlQ3JlYXRpb24gPSBmYWxzZSkge1xuICAgICAgaWYgKCFmb3JjZUNyZWF0aW9uKSB7XG4gICAgICAgIGNvbnN0IHNlbGVjdG9yID0gdGhpcy5fcGFyc2VTZWxlY3RvcihtZXRhKTtcbiAgICAgICAgY29uc3QgZWxlbSA9IHRoaXMuZ2V0VGFncyhzZWxlY3RvcikuZmlsdGVyKGVsZW0gPT4gdGhpcy5fY29udGFpbnNBdHRyaWJ1dGVzKG1ldGEsIGVsZW0pKVswXTtcbiAgICAgICAgaWYgKGVsZW0gIT09IHVuZGVmaW5lZCkgcmV0dXJuIGVsZW07XG4gICAgICB9XG4gICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5fZG9tLmNyZWF0ZUVsZW1lbnQoJ21ldGEnKTtcbiAgICAgIHRoaXMuX3NldE1ldGFFbGVtZW50QXR0cmlidXRlcyhtZXRhLCBlbGVtZW50KTtcbiAgICAgIGNvbnN0IGhlYWQgPSB0aGlzLl9kb2MuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXTtcbiAgICAgIGhlYWQuYXBwZW5kQ2hpbGQoZWxlbWVudCk7XG4gICAgICByZXR1cm4gZWxlbWVudDtcbiAgICB9XG4gICAgX3NldE1ldGFFbGVtZW50QXR0cmlidXRlcyh0YWcsIGVsKSB7XG4gICAgICBPYmplY3Qua2V5cyh0YWcpLmZvckVhY2gocHJvcCA9PiBlbC5zZXRBdHRyaWJ1dGUodGhpcy5fZ2V0TWV0YUtleU1hcChwcm9wKSwgdGFnW3Byb3BdKSk7XG4gICAgICByZXR1cm4gZWw7XG4gICAgfVxuICAgIF9wYXJzZVNlbGVjdG9yKHRhZykge1xuICAgICAgY29uc3QgYXR0ciA9IHRhZy5uYW1lID8gJ25hbWUnIDogJ3Byb3BlcnR5JztcbiAgICAgIHJldHVybiBgJHthdHRyfT1cIiR7dGFnW2F0dHJdfVwiYDtcbiAgICB9XG4gICAgX2NvbnRhaW5zQXR0cmlidXRlcyh0YWcsIGVsZW0pIHtcbiAgICAgIHJldHVybiBPYmplY3Qua2V5cyh0YWcpLmV2ZXJ5KGtleSA9PiBlbGVtLmdldEF0dHJpYnV0ZSh0aGlzLl9nZXRNZXRhS2V5TWFwKGtleSkpID09PSB0YWdba2V5XSk7XG4gICAgfVxuICAgIF9nZXRNZXRhS2V5TWFwKHByb3ApIHtcbiAgICAgIHJldHVybiBNRVRBX0tFWVNfTUFQW3Byb3BdIHx8IHByb3A7XG4gICAgfVxuICAgIHN0YXRpYyDJtWZhYyA9IGZ1bmN0aW9uIE1ldGFfRmFjdG9yeShfX25nRmFjdG9yeVR5cGVfXykge1xuICAgICAgcmV0dXJuIG5ldyAoX19uZ0ZhY3RvcnlUeXBlX18gfHwgTWV0YSkoaTAuybXJtWluamVjdChET0NVTUVOVCkpO1xuICAgIH07XG4gICAgc3RhdGljIMm1cHJvdiA9IC8qIEBfX1BVUkVfXyAqL2kwLsm1ybVkZWZpbmVJbmplY3RhYmxlKHtcbiAgICAgIHRva2VuOiBNZXRhLFxuICAgICAgZmFjdG9yeTogTWV0YS7JtWZhYyxcbiAgICAgIHByb3ZpZGVkSW46ICdyb290J1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBNZXRhO1xufSkoKTtcbi8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICAodHlwZW9mIG5nRGV2TW9kZSA9PT0gXCJ1bmRlZmluZWRcIiB8fCBuZ0Rldk1vZGUpICYmIHZvaWQgMDtcbn0pKCk7XG5jb25zdCBNRVRBX0tFWVNfTUFQID0ge1xuICBodHRwRXF1aXY6ICdodHRwLWVxdWl2J1xufTtcbmxldCBUaXRsZSA9IC8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICBjbGFzcyBUaXRsZSB7XG4gICAgX2RvYztcbiAgICBjb25zdHJ1Y3RvcihfZG9jKSB7XG4gICAgICB0aGlzLl9kb2MgPSBfZG9jO1xuICAgIH1cbiAgICBnZXRUaXRsZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9kb2MudGl0bGU7XG4gICAgfVxuICAgIHNldFRpdGxlKG5ld1RpdGxlKSB7XG4gICAgICB0aGlzLl9kb2MudGl0bGUgPSBuZXdUaXRsZSB8fCAnJztcbiAgICB9XG4gICAgc3RhdGljIMm1ZmFjID0gZnVuY3Rpb24gVGl0bGVfRmFjdG9yeShfX25nRmFjdG9yeVR5cGVfXykge1xuICAgICAgcmV0dXJuIG5ldyAoX19uZ0ZhY3RvcnlUeXBlX18gfHwgVGl0bGUpKGkwLsm1ybVpbmplY3QoRE9DVU1FTlQpKTtcbiAgICB9O1xuICAgIHN0YXRpYyDJtXByb3YgPSAvKiBAX19QVVJFX18gKi9pMC7Jtcm1ZGVmaW5lSW5qZWN0YWJsZSh7XG4gICAgICB0b2tlbjogVGl0bGUsXG4gICAgICBmYWN0b3J5OiBUaXRsZS7JtWZhYyxcbiAgICAgIHByb3ZpZGVkSW46ICdyb290J1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBUaXRsZTtcbn0pKCk7XG4vKiNfX1BVUkVfXyovKCgpID0+IHtcbiAgKHR5cGVvZiBuZ0Rldk1vZGUgPT09IFwidW5kZWZpbmVkXCIgfHwgbmdEZXZNb2RlKSAmJiB2b2lkIDA7XG59KSgpO1xuZnVuY3Rpb24gZXhwb3J0TmdWYXIobmFtZSwgdmFsdWUpIHtcbiAgaWYgKHR5cGVvZiBDT01QSUxFRCA9PT0gJ3VuZGVmaW5lZCcgfHwgIUNPTVBJTEVEKSB7XG4gICAgY29uc3QgbmcgPSBfZ2xvYmFsWyduZyddID0gX2dsb2JhbFsnbmcnXSB8fCB7fTtcbiAgICBuZ1tuYW1lXSA9IHZhbHVlO1xuICB9XG59XG5jbGFzcyBDaGFuZ2VEZXRlY3Rpb25QZXJmUmVjb3JkIHtcbiAgbXNQZXJUaWNrO1xuICBudW1UaWNrcztcbiAgY29uc3RydWN0b3IobXNQZXJUaWNrLCBudW1UaWNrcykge1xuICAgIHRoaXMubXNQZXJUaWNrID0gbXNQZXJUaWNrO1xuICAgIHRoaXMubnVtVGlja3MgPSBudW1UaWNrcztcbiAgfVxufVxuY2xhc3MgQW5ndWxhclByb2ZpbGVyIHtcbiAgYXBwUmVmO1xuICBjb25zdHJ1Y3RvcihyZWYpIHtcbiAgICB0aGlzLmFwcFJlZiA9IHJlZi5pbmplY3Rvci5nZXQoQXBwbGljYXRpb25SZWYpO1xuICB9XG4gIHRpbWVDaGFuZ2VEZXRlY3Rpb24oY29uZmlnKSB7XG4gICAgY29uc3QgcmVjb3JkID0gY29uZmlnICYmIGNvbmZpZ1sncmVjb3JkJ107XG4gICAgY29uc3QgcHJvZmlsZU5hbWUgPSAnQ2hhbmdlIERldGVjdGlvbic7XG4gICAgaWYgKHJlY29yZCAmJiAncHJvZmlsZScgaW4gY29uc29sZSAmJiB0eXBlb2YgY29uc29sZS5wcm9maWxlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb25zb2xlLnByb2ZpbGUocHJvZmlsZU5hbWUpO1xuICAgIH1cbiAgICBjb25zdCBzdGFydCA9IHBlcmZvcm1hbmNlLm5vdygpO1xuICAgIGxldCBudW1UaWNrcyA9IDA7XG4gICAgd2hpbGUgKG51bVRpY2tzIDwgNSB8fCBwZXJmb3JtYW5jZS5ub3coKSAtIHN0YXJ0IDwgNTAwKSB7XG4gICAgICB0aGlzLmFwcFJlZi50aWNrKCk7XG4gICAgICBudW1UaWNrcysrO1xuICAgIH1cbiAgICBjb25zdCBlbmQgPSBwZXJmb3JtYW5jZS5ub3coKTtcbiAgICBpZiAocmVjb3JkICYmICdwcm9maWxlRW5kJyBpbiBjb25zb2xlICYmIHR5cGVvZiBjb25zb2xlLnByb2ZpbGVFbmQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbnNvbGUucHJvZmlsZUVuZChwcm9maWxlTmFtZSk7XG4gICAgfVxuICAgIGNvbnN0IG1zUGVyVGljayA9IChlbmQgLSBzdGFydCkgLyBudW1UaWNrcztcbiAgICBjb25zb2xlLmxvZyhgcmFuICR7bnVtVGlja3N9IGNoYW5nZSBkZXRlY3Rpb24gY3ljbGVzYCk7XG4gICAgY29uc29sZS5sb2coYCR7bXNQZXJUaWNrLnRvRml4ZWQoMil9IG1zIHBlciBjaGVja2ApO1xuICAgIHJldHVybiBuZXcgQ2hhbmdlRGV0ZWN0aW9uUGVyZlJlY29yZChtc1BlclRpY2ssIG51bVRpY2tzKTtcbiAgfVxufVxuY29uc3QgUFJPRklMRVJfR0xPQkFMX05BTUUgPSAncHJvZmlsZXInO1xuZnVuY3Rpb24gZW5hYmxlRGVidWdUb29scyhyZWYpIHtcbiAgZXhwb3J0TmdWYXIoUFJPRklMRVJfR0xPQkFMX05BTUUsIG5ldyBBbmd1bGFyUHJvZmlsZXIocmVmKSk7XG4gIHJldHVybiByZWY7XG59XG5mdW5jdGlvbiBkaXNhYmxlRGVidWdUb29scygpIHtcbiAgZXhwb3J0TmdWYXIoUFJPRklMRVJfR0xPQkFMX05BTUUsIG51bGwpO1xufVxuY2xhc3MgQnkge1xuICBzdGF0aWMgYWxsKCkge1xuICAgIHJldHVybiAoKSA9PiB0cnVlO1xuICB9XG4gIHN0YXRpYyBjc3Moc2VsZWN0b3IpIHtcbiAgICByZXR1cm4gZGVidWdFbGVtZW50ID0+IHtcbiAgICAgIHJldHVybiBkZWJ1Z0VsZW1lbnQubmF0aXZlRWxlbWVudCAhPSBudWxsID8gZWxlbWVudE1hdGNoZXMoZGVidWdFbGVtZW50Lm5hdGl2ZUVsZW1lbnQsIHNlbGVjdG9yKSA6IGZhbHNlO1xuICAgIH07XG4gIH1cbiAgc3RhdGljIGRpcmVjdGl2ZSh0eXBlKSB7XG4gICAgcmV0dXJuIGRlYnVnTm9kZSA9PiBkZWJ1Z05vZGUucHJvdmlkZXJUb2tlbnMuaW5kZXhPZih0eXBlKSAhPT0gLTE7XG4gIH1cbn1cbmZ1bmN0aW9uIGVsZW1lbnRNYXRjaGVzKG4sIHNlbGVjdG9yKSB7XG4gIGlmIChfZ2V0RE9NKCkuaXNFbGVtZW50Tm9kZShuKSkge1xuICAgIHJldHVybiBuLm1hdGNoZXMgJiYgbi5tYXRjaGVzKHNlbGVjdG9yKSB8fCBuLm1zTWF0Y2hlc1NlbGVjdG9yICYmIG4ubXNNYXRjaGVzU2VsZWN0b3Ioc2VsZWN0b3IpIHx8IG4ud2Via2l0TWF0Y2hlc1NlbGVjdG9yICYmIG4ud2Via2l0TWF0Y2hlc1NlbGVjdG9yKHNlbGVjdG9yKTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5jb25zdCBFVkVOVF9OQU1FUyA9IHtcbiAgJ3Bhbic6IHRydWUsXG4gICdwYW5zdGFydCc6IHRydWUsXG4gICdwYW5tb3ZlJzogdHJ1ZSxcbiAgJ3BhbmVuZCc6IHRydWUsXG4gICdwYW5jYW5jZWwnOiB0cnVlLFxuICAncGFubGVmdCc6IHRydWUsXG4gICdwYW5yaWdodCc6IHRydWUsXG4gICdwYW51cCc6IHRydWUsXG4gICdwYW5kb3duJzogdHJ1ZSxcbiAgJ3BpbmNoJzogdHJ1ZSxcbiAgJ3BpbmNoc3RhcnQnOiB0cnVlLFxuICAncGluY2htb3ZlJzogdHJ1ZSxcbiAgJ3BpbmNoZW5kJzogdHJ1ZSxcbiAgJ3BpbmNoY2FuY2VsJzogdHJ1ZSxcbiAgJ3BpbmNoaW4nOiB0cnVlLFxuICAncGluY2hvdXQnOiB0cnVlLFxuICAncHJlc3MnOiB0cnVlLFxuICAncHJlc3N1cCc6IHRydWUsXG4gICdyb3RhdGUnOiB0cnVlLFxuICAncm90YXRlc3RhcnQnOiB0cnVlLFxuICAncm90YXRlbW92ZSc6IHRydWUsXG4gICdyb3RhdGVlbmQnOiB0cnVlLFxuICAncm90YXRlY2FuY2VsJzogdHJ1ZSxcbiAgJ3N3aXBlJzogdHJ1ZSxcbiAgJ3N3aXBlbGVmdCc6IHRydWUsXG4gICdzd2lwZXJpZ2h0JzogdHJ1ZSxcbiAgJ3N3aXBldXAnOiB0cnVlLFxuICAnc3dpcGVkb3duJzogdHJ1ZSxcbiAgJ3RhcCc6IHRydWUsXG4gICdkb3VibGV0YXAnOiB0cnVlXG59O1xuY29uc3QgSEFNTUVSX0dFU1RVUkVfQ09ORklHID0gLyojX19QVVJFX18qL25ldyBJbmplY3Rpb25Ub2tlbih0eXBlb2YgbmdEZXZNb2RlID09PSAndW5kZWZpbmVkJyB8fCBuZ0Rldk1vZGUgPyAnSGFtbWVyR2VzdHVyZUNvbmZpZycgOiAnJyk7XG5jb25zdCBIQU1NRVJfTE9BREVSID0gLyojX19QVVJFX18qL25ldyBJbmplY3Rpb25Ub2tlbih0eXBlb2YgbmdEZXZNb2RlID09PSAndW5kZWZpbmVkJyB8fCBuZ0Rldk1vZGUgPyAnSGFtbWVyTG9hZGVyJyA6ICcnKTtcbmxldCBIYW1tZXJHZXN0dXJlQ29uZmlnID0gLyojX19QVVJFX18qLygoKSA9PiB7XG4gIGNsYXNzIEhhbW1lckdlc3R1cmVDb25maWcge1xuICAgIGV2ZW50cyA9IFtdO1xuICAgIG92ZXJyaWRlcyA9IHt9O1xuICAgIG9wdGlvbnM7XG4gICAgYnVpbGRIYW1tZXIoZWxlbWVudCkge1xuICAgICAgY29uc3QgbWMgPSBuZXcgSGFtbWVyKGVsZW1lbnQsIHRoaXMub3B0aW9ucyk7XG4gICAgICBtYy5nZXQoJ3BpbmNoJykuc2V0KHtcbiAgICAgICAgZW5hYmxlOiB0cnVlXG4gICAgICB9KTtcbiAgICAgIG1jLmdldCgncm90YXRlJykuc2V0KHtcbiAgICAgICAgZW5hYmxlOiB0cnVlXG4gICAgICB9KTtcbiAgICAgIGZvciAoY29uc3QgZXZlbnROYW1lIGluIHRoaXMub3ZlcnJpZGVzKSB7XG4gICAgICAgIG1jLmdldChldmVudE5hbWUpLnNldCh0aGlzLm92ZXJyaWRlc1tldmVudE5hbWVdKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBtYztcbiAgICB9XG4gICAgc3RhdGljIMm1ZmFjID0gZnVuY3Rpb24gSGFtbWVyR2VzdHVyZUNvbmZpZ19GYWN0b3J5KF9fbmdGYWN0b3J5VHlwZV9fKSB7XG4gICAgICByZXR1cm4gbmV3IChfX25nRmFjdG9yeVR5cGVfXyB8fCBIYW1tZXJHZXN0dXJlQ29uZmlnKSgpO1xuICAgIH07XG4gICAgc3RhdGljIMm1cHJvdiA9IC8qIEBfX1BVUkVfXyAqL2kwLsm1ybVkZWZpbmVJbmplY3RhYmxlKHtcbiAgICAgIHRva2VuOiBIYW1tZXJHZXN0dXJlQ29uZmlnLFxuICAgICAgZmFjdG9yeTogSGFtbWVyR2VzdHVyZUNvbmZpZy7JtWZhY1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBIYW1tZXJHZXN0dXJlQ29uZmlnO1xufSkoKTtcbi8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICAodHlwZW9mIG5nRGV2TW9kZSA9PT0gXCJ1bmRlZmluZWRcIiB8fCBuZ0Rldk1vZGUpICYmIHZvaWQgMDtcbn0pKCk7XG5sZXQgSGFtbWVyR2VzdHVyZXNQbHVnaW4gPSAvKiNfX1BVUkVfXyovKCgpID0+IHtcbiAgY2xhc3MgSGFtbWVyR2VzdHVyZXNQbHVnaW4gZXh0ZW5kcyBFdmVudE1hbmFnZXJQbHVnaW4ge1xuICAgIF9jb25maWc7XG4gICAgX2luamVjdG9yO1xuICAgIGxvYWRlcjtcbiAgICBfbG9hZGVyUHJvbWlzZSA9IG51bGw7XG4gICAgY29uc3RydWN0b3IoZG9jLCBfY29uZmlnLCBfaW5qZWN0b3IsIGxvYWRlcikge1xuICAgICAgc3VwZXIoZG9jKTtcbiAgICAgIHRoaXMuX2NvbmZpZyA9IF9jb25maWc7XG4gICAgICB0aGlzLl9pbmplY3RvciA9IF9pbmplY3RvcjtcbiAgICAgIHRoaXMubG9hZGVyID0gbG9hZGVyO1xuICAgIH1cbiAgICBzdXBwb3J0cyhldmVudE5hbWUpIHtcbiAgICAgIGlmICghRVZFTlRfTkFNRVMuaGFzT3duUHJvcGVydHkoZXZlbnROYW1lLnRvTG93ZXJDYXNlKCkpICYmICF0aGlzLmlzQ3VzdG9tRXZlbnQoZXZlbnROYW1lKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAoIXdpbmRvdy5IYW1tZXIgJiYgIXRoaXMubG9hZGVyKSB7XG4gICAgICAgIGlmICh0eXBlb2YgbmdEZXZNb2RlID09PSAndW5kZWZpbmVkJyB8fCBuZ0Rldk1vZGUpIHtcbiAgICAgICAgICBjb25zdCBfY29uc29sZSA9IHRoaXMuX2luamVjdG9yLmdldChfQ29uc29sZSk7XG4gICAgICAgICAgX2NvbnNvbGUud2FybihgVGhlIFwiJHtldmVudE5hbWV9XCIgZXZlbnQgY2Fubm90IGJlIGJvdW5kIGJlY2F1c2UgSGFtbWVyLkpTIGlzIG5vdCBgICsgYGxvYWRlZCBhbmQgbm8gY3VzdG9tIGxvYWRlciBoYXMgYmVlbiBzcGVjaWZpZWQuYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGFkZEV2ZW50TGlzdGVuZXIoZWxlbWVudCwgZXZlbnROYW1lLCBoYW5kbGVyKSB7XG4gICAgICBjb25zdCB6b25lID0gdGhpcy5tYW5hZ2VyLmdldFpvbmUoKTtcbiAgICAgIGV2ZW50TmFtZSA9IGV2ZW50TmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgaWYgKCF3aW5kb3cuSGFtbWVyICYmIHRoaXMubG9hZGVyKSB7XG4gICAgICAgIHRoaXMuX2xvYWRlclByb21pc2UgPSB0aGlzLl9sb2FkZXJQcm9taXNlIHx8IHpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4gdGhpcy5sb2FkZXIoKSk7XG4gICAgICAgIGxldCBjYW5jZWxSZWdpc3RyYXRpb24gPSBmYWxzZTtcbiAgICAgICAgbGV0IGRlcmVnaXN0ZXIgPSAoKSA9PiB7XG4gICAgICAgICAgY2FuY2VsUmVnaXN0cmF0aW9uID0gdHJ1ZTtcbiAgICAgICAgfTtcbiAgICAgICAgem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB0aGlzLl9sb2FkZXJQcm9taXNlLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIGlmICghd2luZG93LkhhbW1lcikge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBuZ0Rldk1vZGUgPT09ICd1bmRlZmluZWQnIHx8IG5nRGV2TW9kZSkge1xuICAgICAgICAgICAgICBjb25zdCBfY29uc29sZSA9IHRoaXMuX2luamVjdG9yLmdldChfQ29uc29sZSk7XG4gICAgICAgICAgICAgIF9jb25zb2xlLndhcm4oYFRoZSBjdXN0b20gSEFNTUVSX0xPQURFUiBjb21wbGV0ZWQsIGJ1dCBIYW1tZXIuSlMgaXMgbm90IHByZXNlbnQuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZXJlZ2lzdGVyID0gKCkgPT4ge307XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghY2FuY2VsUmVnaXN0cmF0aW9uKSB7XG4gICAgICAgICAgICBkZXJlZ2lzdGVyID0gdGhpcy5hZGRFdmVudExpc3RlbmVyKGVsZW1lbnQsIGV2ZW50TmFtZSwgaGFuZGxlcik7XG4gICAgICAgICAgfVxuICAgICAgICB9KS5jYXRjaCgoKSA9PiB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBuZ0Rldk1vZGUgPT09ICd1bmRlZmluZWQnIHx8IG5nRGV2TW9kZSkge1xuICAgICAgICAgICAgY29uc3QgX2NvbnNvbGUgPSB0aGlzLl9pbmplY3Rvci5nZXQoX0NvbnNvbGUpO1xuICAgICAgICAgICAgX2NvbnNvbGUud2FybihgVGhlIFwiJHtldmVudE5hbWV9XCIgZXZlbnQgY2Fubm90IGJlIGJvdW5kIGJlY2F1c2UgdGhlIGN1c3RvbSBgICsgYEhhbW1lci5KUyBsb2FkZXIgZmFpbGVkLmApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBkZXJlZ2lzdGVyID0gKCkgPT4ge307XG4gICAgICAgIH0pKTtcbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICBkZXJlZ2lzdGVyKCk7XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4gem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgIGNvbnN0IG1jID0gdGhpcy5fY29uZmlnLmJ1aWxkSGFtbWVyKGVsZW1lbnQpO1xuICAgICAgICBjb25zdCBjYWxsYmFjayA9IGZ1bmN0aW9uIChldmVudE9iaikge1xuICAgICAgICAgIHpvbmUucnVuR3VhcmRlZChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBoYW5kbGVyKGV2ZW50T2JqKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgICAgbWMub24oZXZlbnROYW1lLCBjYWxsYmFjayk7XG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgbWMub2ZmKGV2ZW50TmFtZSwgY2FsbGJhY2spO1xuICAgICAgICAgIGlmICh0eXBlb2YgbWMuZGVzdHJveSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgbWMuZGVzdHJveSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpc0N1c3RvbUV2ZW50KGV2ZW50TmFtZSkge1xuICAgICAgcmV0dXJuIHRoaXMuX2NvbmZpZy5ldmVudHMuaW5kZXhPZihldmVudE5hbWUpID4gLTE7XG4gICAgfVxuICAgIHN0YXRpYyDJtWZhYyA9IGZ1bmN0aW9uIEhhbW1lckdlc3R1cmVzUGx1Z2luX0ZhY3RvcnkoX19uZ0ZhY3RvcnlUeXBlX18pIHtcbiAgICAgIHJldHVybiBuZXcgKF9fbmdGYWN0b3J5VHlwZV9fIHx8IEhhbW1lckdlc3R1cmVzUGx1Z2luKShpMC7Jtcm1aW5qZWN0KERPQ1VNRU5UKSwgaTAuybXJtWluamVjdChIQU1NRVJfR0VTVFVSRV9DT05GSUcpLCBpMC7Jtcm1aW5qZWN0KGkwLkluamVjdG9yKSwgaTAuybXJtWluamVjdChIQU1NRVJfTE9BREVSLCA4KSk7XG4gICAgfTtcbiAgICBzdGF0aWMgybVwcm92ID0gLyogQF9fUFVSRV9fICovaTAuybXJtWRlZmluZUluamVjdGFibGUoe1xuICAgICAgdG9rZW46IEhhbW1lckdlc3R1cmVzUGx1Z2luLFxuICAgICAgZmFjdG9yeTogSGFtbWVyR2VzdHVyZXNQbHVnaW4uybVmYWNcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gSGFtbWVyR2VzdHVyZXNQbHVnaW47XG59KSgpO1xuLyojX19QVVJFX18qLygoKSA9PiB7XG4gICh0eXBlb2YgbmdEZXZNb2RlID09PSBcInVuZGVmaW5lZFwiIHx8IG5nRGV2TW9kZSkgJiYgdm9pZCAwO1xufSkoKTtcbmxldCBIYW1tZXJNb2R1bGUgPSAvKiNfX1BVUkVfXyovKCgpID0+IHtcbiAgY2xhc3MgSGFtbWVyTW9kdWxlIHtcbiAgICBzdGF0aWMgybVmYWMgPSBmdW5jdGlvbiBIYW1tZXJNb2R1bGVfRmFjdG9yeShfX25nRmFjdG9yeVR5cGVfXykge1xuICAgICAgcmV0dXJuIG5ldyAoX19uZ0ZhY3RvcnlUeXBlX18gfHwgSGFtbWVyTW9kdWxlKSgpO1xuICAgIH07XG4gICAgc3RhdGljIMm1bW9kID0gLyogQF9fUFVSRV9fICovaTAuybXJtWRlZmluZU5nTW9kdWxlKHtcbiAgICAgIHR5cGU6IEhhbW1lck1vZHVsZVxuICAgIH0pO1xuICAgIHN0YXRpYyDJtWluaiA9IC8qIEBfX1BVUkVfXyAqL2kwLsm1ybVkZWZpbmVJbmplY3Rvcih7XG4gICAgICBwcm92aWRlcnM6IFt7XG4gICAgICAgIHByb3ZpZGU6IEVWRU5UX01BTkFHRVJfUExVR0lOUyxcbiAgICAgICAgdXNlQ2xhc3M6IEhhbW1lckdlc3R1cmVzUGx1Z2luLFxuICAgICAgICBtdWx0aTogdHJ1ZSxcbiAgICAgICAgZGVwczogW0RPQ1VNRU5ULCBIQU1NRVJfR0VTVFVSRV9DT05GSUcsIEluamVjdG9yLCBbbmV3IE9wdGlvbmFsKCksIEhBTU1FUl9MT0FERVJdXVxuICAgICAgfSwge1xuICAgICAgICBwcm92aWRlOiBIQU1NRVJfR0VTVFVSRV9DT05GSUcsXG4gICAgICAgIHVzZUNsYXNzOiBIYW1tZXJHZXN0dXJlQ29uZmlnXG4gICAgICB9XVxuICAgIH0pO1xuICB9XG4gIHJldHVybiBIYW1tZXJNb2R1bGU7XG59KSgpO1xuLyojX19QVVJFX18qLygoKSA9PiB7XG4gICh0eXBlb2YgbmdEZXZNb2RlID09PSBcInVuZGVmaW5lZFwiIHx8IG5nRGV2TW9kZSkgJiYgdm9pZCAwO1xufSkoKTtcbmxldCBEb21TYW5pdGl6ZXIgPSAvKiNfX1BVUkVfXyovKCgpID0+IHtcbiAgY2xhc3MgRG9tU2FuaXRpemVyIHtcbiAgICBzdGF0aWMgybVmYWMgPSBmdW5jdGlvbiBEb21TYW5pdGl6ZXJfRmFjdG9yeShfX25nRmFjdG9yeVR5cGVfXykge1xuICAgICAgcmV0dXJuIG5ldyAoX19uZ0ZhY3RvcnlUeXBlX18gfHwgRG9tU2FuaXRpemVyKSgpO1xuICAgIH07XG4gICAgc3RhdGljIMm1cHJvdiA9IC8qIEBfX1BVUkVfXyAqL2kwLsm1ybVkZWZpbmVJbmplY3RhYmxlKHtcbiAgICAgIHRva2VuOiBEb21TYW5pdGl6ZXIsXG4gICAgICBmYWN0b3J5OiBmdW5jdGlvbiBEb21TYW5pdGl6ZXJfRmFjdG9yeShfX25nRmFjdG9yeVR5cGVfXykge1xuICAgICAgICBsZXQgX19uZ0NvbmRpdGlvbmFsRmFjdG9yeV9fID0gbnVsbDtcbiAgICAgICAgaWYgKF9fbmdGYWN0b3J5VHlwZV9fKSB7XG4gICAgICAgICAgX19uZ0NvbmRpdGlvbmFsRmFjdG9yeV9fID0gbmV3IChfX25nRmFjdG9yeVR5cGVfXyB8fCBEb21TYW5pdGl6ZXIpKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgX19uZ0NvbmRpdGlvbmFsRmFjdG9yeV9fID0gaTAuybXJtWluamVjdChEb21TYW5pdGl6ZXJJbXBsKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX19uZ0NvbmRpdGlvbmFsRmFjdG9yeV9fO1xuICAgICAgfSxcbiAgICAgIHByb3ZpZGVkSW46ICdyb290J1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBEb21TYW5pdGl6ZXI7XG59KSgpO1xuLyojX19QVVJFX18qLygoKSA9PiB7XG4gICh0eXBlb2YgbmdEZXZNb2RlID09PSBcInVuZGVmaW5lZFwiIHx8IG5nRGV2TW9kZSkgJiYgdm9pZCAwO1xufSkoKTtcbmxldCBEb21TYW5pdGl6ZXJJbXBsID0gLyojX19QVVJFX18qLygoKSA9PiB7XG4gIGNsYXNzIERvbVNhbml0aXplckltcGwgZXh0ZW5kcyBEb21TYW5pdGl6ZXIge1xuICAgIF9kb2M7XG4gICAgY29uc3RydWN0b3IoX2RvYykge1xuICAgICAgc3VwZXIoKTtcbiAgICAgIHRoaXMuX2RvYyA9IF9kb2M7XG4gICAgfVxuICAgIHNhbml0aXplKGN0eCwgdmFsdWUpIHtcbiAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gbnVsbDtcbiAgICAgIHN3aXRjaCAoY3R4KSB7XG4gICAgICAgIGNhc2UgU2VjdXJpdHlDb250ZXh0Lk5PTkU6XG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICBjYXNlIFNlY3VyaXR5Q29udGV4dC5IVE1MOlxuICAgICAgICAgIGlmIChfYWxsb3dTYW5pdGl6YXRpb25CeXBhc3NBbmRUaHJvdyh2YWx1ZSwgXCJIVE1MXCIpKSB7XG4gICAgICAgICAgICByZXR1cm4gX3Vud3JhcFNhZmVWYWx1ZSh2YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBfX3Nhbml0aXplSHRtbCh0aGlzLl9kb2MsIFN0cmluZyh2YWx1ZSkpLnRvU3RyaW5nKCk7XG4gICAgICAgIGNhc2UgU2VjdXJpdHlDb250ZXh0LlNUWUxFOlxuICAgICAgICAgIGlmIChfYWxsb3dTYW5pdGl6YXRpb25CeXBhc3NBbmRUaHJvdyh2YWx1ZSwgXCJTdHlsZVwiKSkge1xuICAgICAgICAgICAgcmV0dXJuIF91bndyYXBTYWZlVmFsdWUodmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIGNhc2UgU2VjdXJpdHlDb250ZXh0LlNDUklQVDpcbiAgICAgICAgICBpZiAoX2FsbG93U2FuaXRpemF0aW9uQnlwYXNzQW5kVGhyb3codmFsdWUsIFwiU2NyaXB0XCIpKSB7XG4gICAgICAgICAgICByZXR1cm4gX3Vud3JhcFNhZmVWYWx1ZSh2YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRocm93IG5ldyBfUnVudGltZUVycm9yKDUyMDAsICh0eXBlb2YgbmdEZXZNb2RlID09PSAndW5kZWZpbmVkJyB8fCBuZ0Rldk1vZGUpICYmICd1bnNhZmUgdmFsdWUgdXNlZCBpbiBhIHNjcmlwdCBjb250ZXh0Jyk7XG4gICAgICAgIGNhc2UgU2VjdXJpdHlDb250ZXh0LlVSTDpcbiAgICAgICAgICBpZiAoX2FsbG93U2FuaXRpemF0aW9uQnlwYXNzQW5kVGhyb3codmFsdWUsIFwiVVJMXCIpKSB7XG4gICAgICAgICAgICByZXR1cm4gX3Vud3JhcFNhZmVWYWx1ZSh2YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBfX3Nhbml0aXplVXJsKFN0cmluZyh2YWx1ZSkpO1xuICAgICAgICBjYXNlIFNlY3VyaXR5Q29udGV4dC5SRVNPVVJDRV9VUkw6XG4gICAgICAgICAgaWYgKF9hbGxvd1Nhbml0aXphdGlvbkJ5cGFzc0FuZFRocm93KHZhbHVlLCBcIlJlc291cmNlVVJMXCIpKSB7XG4gICAgICAgICAgICByZXR1cm4gX3Vud3JhcFNhZmVWYWx1ZSh2YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRocm93IG5ldyBfUnVudGltZUVycm9yKDUyMDEsICh0eXBlb2YgbmdEZXZNb2RlID09PSAndW5kZWZpbmVkJyB8fCBuZ0Rldk1vZGUpICYmIGB1bnNhZmUgdmFsdWUgdXNlZCBpbiBhIHJlc291cmNlIFVSTCBjb250ZXh0IChzZWUgJHtfWFNTX1NFQ1VSSVRZX1VSTH0pYCk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgbmV3IF9SdW50aW1lRXJyb3IoNTIwMiwgKHR5cGVvZiBuZ0Rldk1vZGUgPT09ICd1bmRlZmluZWQnIHx8IG5nRGV2TW9kZSkgJiYgYFVuZXhwZWN0ZWQgU2VjdXJpdHlDb250ZXh0ICR7Y3R4fSAoc2VlICR7X1hTU19TRUNVUklUWV9VUkx9KWApO1xuICAgICAgfVxuICAgIH1cbiAgICBieXBhc3NTZWN1cml0eVRydXN0SHRtbCh2YWx1ZSkge1xuICAgICAgcmV0dXJuIF9ieXBhc3NTYW5pdGl6YXRpb25UcnVzdEh0bWwodmFsdWUpO1xuICAgIH1cbiAgICBieXBhc3NTZWN1cml0eVRydXN0U3R5bGUodmFsdWUpIHtcbiAgICAgIHJldHVybiBfYnlwYXNzU2FuaXRpemF0aW9uVHJ1c3RTdHlsZSh2YWx1ZSk7XG4gICAgfVxuICAgIGJ5cGFzc1NlY3VyaXR5VHJ1c3RTY3JpcHQodmFsdWUpIHtcbiAgICAgIHJldHVybiBfYnlwYXNzU2FuaXRpemF0aW9uVHJ1c3RTY3JpcHQodmFsdWUpO1xuICAgIH1cbiAgICBieXBhc3NTZWN1cml0eVRydXN0VXJsKHZhbHVlKSB7XG4gICAgICByZXR1cm4gX2J5cGFzc1Nhbml0aXphdGlvblRydXN0VXJsKHZhbHVlKTtcbiAgICB9XG4gICAgYnlwYXNzU2VjdXJpdHlUcnVzdFJlc291cmNlVXJsKHZhbHVlKSB7XG4gICAgICByZXR1cm4gX2J5cGFzc1Nhbml0aXphdGlvblRydXN0UmVzb3VyY2VVcmwodmFsdWUpO1xuICAgIH1cbiAgICBzdGF0aWMgybVmYWMgPSBmdW5jdGlvbiBEb21TYW5pdGl6ZXJJbXBsX0ZhY3RvcnkoX19uZ0ZhY3RvcnlUeXBlX18pIHtcbiAgICAgIHJldHVybiBuZXcgKF9fbmdGYWN0b3J5VHlwZV9fIHx8IERvbVNhbml0aXplckltcGwpKGkwLsm1ybVpbmplY3QoRE9DVU1FTlQpKTtcbiAgICB9O1xuICAgIHN0YXRpYyDJtXByb3YgPSAvKiBAX19QVVJFX18gKi9pMC7Jtcm1ZGVmaW5lSW5qZWN0YWJsZSh7XG4gICAgICB0b2tlbjogRG9tU2FuaXRpemVySW1wbCxcbiAgICAgIGZhY3Rvcnk6IERvbVNhbml0aXplckltcGwuybVmYWMsXG4gICAgICBwcm92aWRlZEluOiAncm9vdCdcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gRG9tU2FuaXRpemVySW1wbDtcbn0pKCk7XG4vKiNfX1BVUkVfXyovKCgpID0+IHtcbiAgKHR5cGVvZiBuZ0Rldk1vZGUgPT09IFwidW5kZWZpbmVkXCIgfHwgbmdEZXZNb2RlKSAmJiB2b2lkIDA7XG59KSgpO1xudmFyIEh5ZHJhdGlvbkZlYXR1cmVLaW5kID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChIeWRyYXRpb25GZWF0dXJlS2luZCkge1xuICBIeWRyYXRpb25GZWF0dXJlS2luZFtIeWRyYXRpb25GZWF0dXJlS2luZFtcIk5vSHR0cFRyYW5zZmVyQ2FjaGVcIl0gPSAwXSA9IFwiTm9IdHRwVHJhbnNmZXJDYWNoZVwiO1xuICBIeWRyYXRpb25GZWF0dXJlS2luZFtIeWRyYXRpb25GZWF0dXJlS2luZFtcIkh0dHBUcmFuc2ZlckNhY2hlT3B0aW9uc1wiXSA9IDFdID0gXCJIdHRwVHJhbnNmZXJDYWNoZU9wdGlvbnNcIjtcbiAgSHlkcmF0aW9uRmVhdHVyZUtpbmRbSHlkcmF0aW9uRmVhdHVyZUtpbmRbXCJJMThuU3VwcG9ydFwiXSA9IDJdID0gXCJJMThuU3VwcG9ydFwiO1xuICBIeWRyYXRpb25GZWF0dXJlS2luZFtIeWRyYXRpb25GZWF0dXJlS2luZFtcIkV2ZW50UmVwbGF5XCJdID0gM10gPSBcIkV2ZW50UmVwbGF5XCI7XG4gIEh5ZHJhdGlvbkZlYXR1cmVLaW5kW0h5ZHJhdGlvbkZlYXR1cmVLaW5kW1wiSW5jcmVtZW50YWxIeWRyYXRpb25cIl0gPSA0XSA9IFwiSW5jcmVtZW50YWxIeWRyYXRpb25cIjtcbiAgcmV0dXJuIEh5ZHJhdGlvbkZlYXR1cmVLaW5kO1xufShIeWRyYXRpb25GZWF0dXJlS2luZCB8fCB7fSk7XG5mdW5jdGlvbiBoeWRyYXRpb25GZWF0dXJlKMm1a2luZCwgybVwcm92aWRlcnMgPSBbXSwgybVvcHRpb25zID0ge30pIHtcbiAgcmV0dXJuIHtcbiAgICDJtWtpbmQsXG4gICAgybVwcm92aWRlcnNcbiAgfTtcbn1cbmZ1bmN0aW9uIHdpdGhOb0h0dHBUcmFuc2ZlckNhY2hlKCkge1xuICByZXR1cm4gaHlkcmF0aW9uRmVhdHVyZShIeWRyYXRpb25GZWF0dXJlS2luZC5Ob0h0dHBUcmFuc2ZlckNhY2hlKTtcbn1cbmZ1bmN0aW9uIHdpdGhIdHRwVHJhbnNmZXJDYWNoZU9wdGlvbnMob3B0aW9ucykge1xuICByZXR1cm4gaHlkcmF0aW9uRmVhdHVyZShIeWRyYXRpb25GZWF0dXJlS2luZC5IdHRwVHJhbnNmZXJDYWNoZU9wdGlvbnMsIF93aXRoSHR0cFRyYW5zZmVyQ2FjaGUob3B0aW9ucykpO1xufVxuZnVuY3Rpb24gd2l0aEkxOG5TdXBwb3J0KCkge1xuICByZXR1cm4gaHlkcmF0aW9uRmVhdHVyZShIeWRyYXRpb25GZWF0dXJlS2luZC5JMThuU3VwcG9ydCwgX3dpdGhJMThuU3VwcG9ydCgpKTtcbn1cbmZ1bmN0aW9uIHdpdGhFdmVudFJlcGxheSgpIHtcbiAgcmV0dXJuIGh5ZHJhdGlvbkZlYXR1cmUoSHlkcmF0aW9uRmVhdHVyZUtpbmQuRXZlbnRSZXBsYXksIF93aXRoRXZlbnRSZXBsYXkoKSk7XG59XG5mdW5jdGlvbiB3aXRoSW5jcmVtZW50YWxIeWRyYXRpb24oKSB7XG4gIHJldHVybiBoeWRyYXRpb25GZWF0dXJlKEh5ZHJhdGlvbkZlYXR1cmVLaW5kLkluY3JlbWVudGFsSHlkcmF0aW9uLCBfd2l0aEluY3JlbWVudGFsSHlkcmF0aW9uKCkpO1xufVxuZnVuY3Rpb24gcHJvdmlkZUVuYWJsZWRCbG9ja2luZ0luaXRpYWxOYXZpZ2F0aW9uRGV0ZWN0b3IoKSB7XG4gIHJldHVybiBbe1xuICAgIHByb3ZpZGU6IEVOVklST05NRU5UX0lOSVRJQUxJWkVSLFxuICAgIHVzZVZhbHVlOiAoKSA9PiB7XG4gICAgICBjb25zdCBpc0VuYWJsZWRCbG9ja2luZ0luaXRpYWxOYXZpZ2F0aW9uID0gaW5qZWN0KF9JU19FTkFCTEVEX0JMT0NLSU5HX0lOSVRJQUxfTkFWSUdBVElPTiwge1xuICAgICAgICBvcHRpb25hbDogdHJ1ZVxuICAgICAgfSk7XG4gICAgICBpZiAoaXNFbmFibGVkQmxvY2tpbmdJbml0aWFsTmF2aWdhdGlvbikge1xuICAgICAgICBjb25zdCBjb25zb2xlID0gaW5qZWN0KF9Db25zb2xlKTtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IF9mb3JtYXRSdW50aW1lRXJyb3IoNTAwMSwgJ0NvbmZpZ3VyYXRpb24gZXJyb3I6IGZvdW5kIGJvdGggaHlkcmF0aW9uIGFuZCBlbmFibGVkQmxvY2tpbmcgaW5pdGlhbCBuYXZpZ2F0aW9uICcgKyAnaW4gdGhlIHNhbWUgYXBwbGljYXRpb24sIHdoaWNoIGlzIGEgY29udHJhZGljdGlvbi4nKTtcbiAgICAgICAgY29uc29sZS53YXJuKG1lc3NhZ2UpO1xuICAgICAgfVxuICAgIH0sXG4gICAgbXVsdGk6IHRydWVcbiAgfV07XG59XG5mdW5jdGlvbiBwcm92aWRlQ2xpZW50SHlkcmF0aW9uKC4uLmZlYXR1cmVzKSB7XG4gIGNvbnN0IHByb3ZpZGVycyA9IFtdO1xuICBjb25zdCBmZWF0dXJlc0tpbmQgPSBuZXcgU2V0KCk7XG4gIGZvciAoY29uc3Qge1xuICAgIMm1cHJvdmlkZXJzLFxuICAgIMm1a2luZFxuICB9IG9mIGZlYXR1cmVzKSB7XG4gICAgZmVhdHVyZXNLaW5kLmFkZCjJtWtpbmQpO1xuICAgIGlmICjJtXByb3ZpZGVycy5sZW5ndGgpIHtcbiAgICAgIHByb3ZpZGVycy5wdXNoKMm1cHJvdmlkZXJzKTtcbiAgICB9XG4gIH1cbiAgY29uc3QgaGFzSHR0cFRyYW5zZmVyQ2FjaGVPcHRpb25zID0gZmVhdHVyZXNLaW5kLmhhcyhIeWRyYXRpb25GZWF0dXJlS2luZC5IdHRwVHJhbnNmZXJDYWNoZU9wdGlvbnMpO1xuICBpZiAodHlwZW9mIG5nRGV2TW9kZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbmdEZXZNb2RlICYmIGZlYXR1cmVzS2luZC5oYXMoSHlkcmF0aW9uRmVhdHVyZUtpbmQuTm9IdHRwVHJhbnNmZXJDYWNoZSkgJiYgaGFzSHR0cFRyYW5zZmVyQ2FjaGVPcHRpb25zKSB7XG4gICAgdGhyb3cgbmV3IF9SdW50aW1lRXJyb3IoNTAwMSwgJ0NvbmZpZ3VyYXRpb24gZXJyb3I6IGZvdW5kIGJvdGggd2l0aEh0dHBUcmFuc2ZlckNhY2hlT3B0aW9ucygpIGFuZCB3aXRoTm9IdHRwVHJhbnNmZXJDYWNoZSgpIGluIHRoZSBzYW1lIGNhbGwgdG8gcHJvdmlkZUNsaWVudEh5ZHJhdGlvbigpLCB3aGljaCBpcyBhIGNvbnRyYWRpY3Rpb24uJyk7XG4gIH1cbiAgcmV0dXJuIG1ha2VFbnZpcm9ubWVudFByb3ZpZGVycyhbdHlwZW9mIG5nRGV2TW9kZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbmdEZXZNb2RlID8gcHJvdmlkZUVuYWJsZWRCbG9ja2luZ0luaXRpYWxOYXZpZ2F0aW9uRGV0ZWN0b3IoKSA6IFtdLCB0eXBlb2YgbmdEZXZNb2RlICE9PSAndW5kZWZpbmVkJyAmJiBuZ0Rldk1vZGUgPyBwcm92aWRlU3RhYmlsaXR5RGVidWdnaW5nKCkgOiBbXSwgX3dpdGhEb21IeWRyYXRpb24oKSwgZmVhdHVyZXNLaW5kLmhhcyhIeWRyYXRpb25GZWF0dXJlS2luZC5Ob0h0dHBUcmFuc2ZlckNhY2hlKSB8fCBoYXNIdHRwVHJhbnNmZXJDYWNoZU9wdGlvbnMgPyBbXSA6IF93aXRoSHR0cFRyYW5zZmVyQ2FjaGUoe30pLCBwcm92aWRlcnNdKTtcbn1cbmNvbnN0IFZFUlNJT04gPSAvKiBAX19QVVJFX18gKi9uZXcgVmVyc2lvbignMjEuMi40Jyk7XG5leHBvcnQgeyBCeSwgRG9tU2FuaXRpemVyLCBFVkVOVF9NQU5BR0VSX1BMVUdJTlMsIEV2ZW50TWFuYWdlclBsdWdpbiwgSEFNTUVSX0dFU1RVUkVfQ09ORklHLCBIQU1NRVJfTE9BREVSLCBIYW1tZXJHZXN0dXJlQ29uZmlnLCBIYW1tZXJNb2R1bGUsIEh5ZHJhdGlvbkZlYXR1cmVLaW5kLCBNZXRhLCBUaXRsZSwgVkVSU0lPTiwgZGlzYWJsZURlYnVnVG9vbHMsIGVuYWJsZURlYnVnVG9vbHMsIHByb3ZpZGVDbGllbnRIeWRyYXRpb24sIHdpdGhFdmVudFJlcGxheSwgd2l0aEh0dHBUcmFuc2ZlckNhY2hlT3B0aW9ucywgd2l0aEkxOG5TdXBwb3J0LCB3aXRoSW5jcmVtZW50YWxIeWRyYXRpb24sIHdpdGhOb0h0dHBUcmFuc2ZlckNhY2hlLCBEb21TYW5pdGl6ZXJJbXBsIGFzIMm1RG9tU2FuaXRpemVySW1wbCwgSGFtbWVyR2VzdHVyZXNQbHVnaW4gYXMgybVIYW1tZXJHZXN0dXJlc1BsdWdpbiB9O1xuIiwiLyoqXG4gKiBAbGljZW5zZSBBbmd1bGFyIHYyMS4yLjRcbiAqIChjKSAyMDEwLTIwMjYgR29vZ2xlIExMQy4gaHR0cHM6Ly9hbmd1bGFyLmRldi9cbiAqIExpY2Vuc2U6IE1JVFxuICovXG5cbmltcG9ydCB7IERPQ1VNRU5ULCBMb2NhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgKiBhcyBpMCBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IMm1aXNQcm9taXNlIGFzIF9pc1Byb21pc2UsIGNvbXB1dGVkLCDJtVJ1bnRpbWVFcnJvciBhcyBfUnVudGltZUVycm9yLCBJbmplY3RhYmxlLCBJbmplY3Rpb25Ub2tlbiwgRXZlbnRFbWl0dGVyLCBpbnB1dCwgaW5qZWN0LCBWaWV3Q29udGFpbmVyUmVmLCBDaGFuZ2VEZXRlY3RvclJlZiwgRGlyZWN0aXZlLCBJbnB1dCwgT3V0cHV0LCByZWZsZWN0Q29tcG9uZW50VHlwZSwgQ29tcG9uZW50LCBydW5JbkluamVjdGlvbkNvbnRleHQsIMm1aXNJbmplY3RhYmxlIGFzIF9pc0luamVjdGFibGUsIMm1aXNOZ01vZHVsZSBhcyBfaXNOZ01vZHVsZSwgaXNTdGFuZGFsb25lLCBjcmVhdGVFbnZpcm9ubWVudEluamVjdG9yLCBDb21waWxlciwgTmdNb2R1bGVGYWN0b3J5LCDJtXJlc29sdmVDb21wb25lbnRSZXNvdXJjZXMgYXMgX3Jlc29sdmVDb21wb25lbnRSZXNvdXJjZXMsIGFmdGVyTmV4dFJlbmRlciwgc2lnbmFsLCBFbnZpcm9ubWVudEluamVjdG9yLCBEZXN0cm95UmVmLCB1bnRyYWNrZWQsIMm1Q29uc29sZSBhcyBfQ29uc29sZSwgybVQZW5kaW5nVGFza3NJbnRlcm5hbCBhcyBfUGVuZGluZ1Rhc2tzSW50ZXJuYWwsIMm1SU5URVJOQUxfQVBQTElDQVRJT05fRVJST1JfSEFORExFUiBhcyBfSU5URVJOQUxfQVBQTElDQVRJT05fRVJST1JfSEFORExFUiwgybVmb3JtYXRSdW50aW1lRXJyb3IgYXMgX2Zvcm1hdFJ1bnRpbWVFcnJvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgaXNPYnNlcnZhYmxlLCBmcm9tLCBvZiwgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBFbXB0eUVycm9yLCBPYnNlcnZhYmxlLCBjb25jYXQsIGRlZmVyLCBwaXBlLCBFTVBUWSwgdGhyb3dFcnJvciwgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaXJzdCwgbWFwLCBzd2l0Y2hNYXAsIHRha2UsIHN0YXJ0V2l0aCwgZmlsdGVyLCB0YWtlVW50aWwsIG1lcmdlTWFwLCBjb25jYXRNYXAsIHRhcCwgdGFrZUxhc3QsIGNhdGNoRXJyb3IsIGZpbmFsaXplIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0ICogYXMgaTEgZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5jb25zdCBQUklNQVJZX09VVExFVCA9ICdwcmltYXJ5JztcbmNvbnN0IFJvdXRlVGl0bGVLZXkgPSAvKiBAX19QVVJFX18gKi9TeW1ib2woJ1JvdXRlVGl0bGUnKTtcbmNsYXNzIFBhcmFtc0FzTWFwIHtcbiAgcGFyYW1zO1xuICBjb25zdHJ1Y3RvcihwYXJhbXMpIHtcbiAgICB0aGlzLnBhcmFtcyA9IHBhcmFtcyB8fCB7fTtcbiAgfVxuICBoYXMobmFtZSkge1xuICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5wYXJhbXMsIG5hbWUpO1xuICB9XG4gIGdldChuYW1lKSB7XG4gICAgaWYgKHRoaXMuaGFzKG5hbWUpKSB7XG4gICAgICBjb25zdCB2ID0gdGhpcy5wYXJhbXNbbmFtZV07XG4gICAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh2KSA/IHZbMF0gOiB2O1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBnZXRBbGwobmFtZSkge1xuICAgIGlmICh0aGlzLmhhcyhuYW1lKSkge1xuICAgICAgY29uc3QgdiA9IHRoaXMucGFyYW1zW25hbWVdO1xuICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkodikgPyB2IDogW3ZdO1xuICAgIH1cbiAgICByZXR1cm4gW107XG4gIH1cbiAgZ2V0IGtleXMoKSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMucGFyYW1zKTtcbiAgfVxufVxuZnVuY3Rpb24gY29udmVydFRvUGFyYW1NYXAocGFyYW1zKSB7XG4gIHJldHVybiBuZXcgUGFyYW1zQXNNYXAocGFyYW1zKTtcbn1cbmZ1bmN0aW9uIG1hdGNoUGFydHMocm91dGVQYXJ0cywgdXJsU2VnbWVudHMsIHBvc1BhcmFtcykge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHJvdXRlUGFydHMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBwYXJ0ID0gcm91dGVQYXJ0c1tpXTtcbiAgICBjb25zdCBzZWdtZW50ID0gdXJsU2VnbWVudHNbaV07XG4gICAgY29uc3QgaXNQYXJhbWV0ZXIgPSBwYXJ0WzBdID09PSAnOic7XG4gICAgaWYgKGlzUGFyYW1ldGVyKSB7XG4gICAgICBwb3NQYXJhbXNbcGFydC5zdWJzdHJpbmcoMSldID0gc2VnbWVudDtcbiAgICB9IGVsc2UgaWYgKHBhcnQgIT09IHNlZ21lbnQucGF0aCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cbmZ1bmN0aW9uIGRlZmF1bHRVcmxNYXRjaGVyKHNlZ21lbnRzLCBzZWdtZW50R3JvdXAsIHJvdXRlKSB7XG4gIGNvbnN0IHBhcnRzID0gcm91dGUucGF0aC5zcGxpdCgnLycpO1xuICBjb25zdCB3aWxkY2FyZEluZGV4ID0gcGFydHMuaW5kZXhPZignKionKTtcbiAgaWYgKHdpbGRjYXJkSW5kZXggPT09IC0xKSB7XG4gICAgaWYgKHBhcnRzLmxlbmd0aCA+IHNlZ21lbnRzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlmIChyb3V0ZS5wYXRoTWF0Y2ggPT09ICdmdWxsJyAmJiAoc2VnbWVudEdyb3VwLmhhc0NoaWxkcmVuKCkgfHwgcGFydHMubGVuZ3RoIDwgc2VnbWVudHMubGVuZ3RoKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IHBvc1BhcmFtcyA9IHt9O1xuICAgIGNvbnN0IGNvbnN1bWVkID0gc2VnbWVudHMuc2xpY2UoMCwgcGFydHMubGVuZ3RoKTtcbiAgICBpZiAoIW1hdGNoUGFydHMocGFydHMsIGNvbnN1bWVkLCBwb3NQYXJhbXMpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbnN1bWVkLFxuICAgICAgcG9zUGFyYW1zXG4gICAgfTtcbiAgfVxuICBpZiAod2lsZGNhcmRJbmRleCAhPT0gcGFydHMubGFzdEluZGV4T2YoJyoqJykpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCBwcmUgPSBwYXJ0cy5zbGljZSgwLCB3aWxkY2FyZEluZGV4KTtcbiAgY29uc3QgcG9zdCA9IHBhcnRzLnNsaWNlKHdpbGRjYXJkSW5kZXggKyAxKTtcbiAgaWYgKHByZS5sZW5ndGggKyBwb3N0Lmxlbmd0aCA+IHNlZ21lbnRzLmxlbmd0aCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGlmIChyb3V0ZS5wYXRoTWF0Y2ggPT09ICdmdWxsJyAmJiBzZWdtZW50R3JvdXAuaGFzQ2hpbGRyZW4oKSAmJiByb3V0ZS5wYXRoICE9PSAnKionKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3QgcG9zUGFyYW1zID0ge307XG4gIGlmICghbWF0Y2hQYXJ0cyhwcmUsIHNlZ21lbnRzLnNsaWNlKDAsIHByZS5sZW5ndGgpLCBwb3NQYXJhbXMpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgaWYgKCFtYXRjaFBhcnRzKHBvc3QsIHNlZ21lbnRzLnNsaWNlKHNlZ21lbnRzLmxlbmd0aCAtIHBvc3QubGVuZ3RoKSwgcG9zUGFyYW1zKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiB7XG4gICAgY29uc3VtZWQ6IHNlZ21lbnRzLFxuICAgIHBvc1BhcmFtc1xuICB9O1xufVxuZnVuY3Rpb24gZmlyc3RWYWx1ZUZyb20oc291cmNlKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgc291cmNlLnBpcGUoZmlyc3QoKSkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IHZhbHVlID0+IHJlc29sdmUodmFsdWUpLFxuICAgICAgZXJyb3I6IGVyciA9PiByZWplY3QoZXJyKVxuICAgIH0pO1xuICB9KTtcbn1cbmZ1bmN0aW9uIHNoYWxsb3dFcXVhbEFycmF5cyhhLCBiKSB7XG4gIGlmIChhLmxlbmd0aCAhPT0gYi5sZW5ndGgpIHJldHVybiBmYWxzZTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhLmxlbmd0aDsgKytpKSB7XG4gICAgaWYgKCFzaGFsbG93RXF1YWwoYVtpXSwgYltpXSkpIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cbmZ1bmN0aW9uIHNoYWxsb3dFcXVhbChhLCBiKSB7XG4gIGNvbnN0IGsxID0gYSA/IGdldERhdGFLZXlzKGEpIDogdW5kZWZpbmVkO1xuICBjb25zdCBrMiA9IGIgPyBnZXREYXRhS2V5cyhiKSA6IHVuZGVmaW5lZDtcbiAgaWYgKCFrMSB8fCAhazIgfHwgazEubGVuZ3RoICE9IGsyLmxlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBsZXQga2V5O1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGsxLmxlbmd0aDsgaSsrKSB7XG4gICAga2V5ID0gazFbaV07XG4gICAgaWYgKCFlcXVhbEFycmF5c09yU3RyaW5nKGFba2V5XSwgYltrZXldKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cbmZ1bmN0aW9uIGdldERhdGFLZXlzKG9iaikge1xuICByZXR1cm4gWy4uLk9iamVjdC5rZXlzKG9iaiksIC4uLk9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqKV07XG59XG5mdW5jdGlvbiBlcXVhbEFycmF5c09yU3RyaW5nKGEsIGIpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYSkgJiYgQXJyYXkuaXNBcnJheShiKSkge1xuICAgIGlmIChhLmxlbmd0aCAhPT0gYi5sZW5ndGgpIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBhU29ydGVkID0gWy4uLmFdLnNvcnQoKTtcbiAgICBjb25zdCBiU29ydGVkID0gWy4uLmJdLnNvcnQoKTtcbiAgICByZXR1cm4gYVNvcnRlZC5ldmVyeSgodmFsLCBpbmRleCkgPT4gYlNvcnRlZFtpbmRleF0gPT09IHZhbCk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGEgPT09IGI7XG4gIH1cbn1cbmZ1bmN0aW9uIGxhc3QoYSkge1xuICByZXR1cm4gYS5sZW5ndGggPiAwID8gYVthLmxlbmd0aCAtIDFdIDogbnVsbDtcbn1cbmZ1bmN0aW9uIHdyYXBJbnRvT2JzZXJ2YWJsZSh2YWx1ZSkge1xuICBpZiAoaXNPYnNlcnZhYmxlKHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICBpZiAoX2lzUHJvbWlzZSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZnJvbShQcm9taXNlLnJlc29sdmUodmFsdWUpKTtcbiAgfVxuICByZXR1cm4gb2YodmFsdWUpO1xufVxuZnVuY3Rpb24gd3JhcEludG9Qcm9taXNlKHZhbHVlKSB7XG4gIGlmIChpc09ic2VydmFibGUodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZpcnN0VmFsdWVGcm9tKHZhbHVlKTtcbiAgfVxuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHZhbHVlKTtcbn1cbmNvbnN0IHBhdGhDb21wYXJlTWFwID0ge1xuICAnZXhhY3QnOiBlcXVhbFNlZ21lbnRHcm91cHMsXG4gICdzdWJzZXQnOiBjb250YWluc1NlZ21lbnRHcm91cFxufTtcbmNvbnN0IHBhcmFtQ29tcGFyZU1hcCA9IHtcbiAgJ2V4YWN0JzogZXF1YWxQYXJhbXMsXG4gICdzdWJzZXQnOiBjb250YWluc1BhcmFtcyxcbiAgJ2lnbm9yZWQnOiAoKSA9PiB0cnVlXG59O1xuY29uc3QgZXhhY3RNYXRjaE9wdGlvbnMgPSB7XG4gIHBhdGhzOiAnZXhhY3QnLFxuICBmcmFnbWVudDogJ2lnbm9yZWQnLFxuICBtYXRyaXhQYXJhbXM6ICdpZ25vcmVkJyxcbiAgcXVlcnlQYXJhbXM6ICdleGFjdCdcbn07XG5jb25zdCBzdWJzZXRNYXRjaE9wdGlvbnMgPSB7XG4gIHBhdGhzOiAnc3Vic2V0JyxcbiAgZnJhZ21lbnQ6ICdpZ25vcmVkJyxcbiAgbWF0cml4UGFyYW1zOiAnaWdub3JlZCcsXG4gIHF1ZXJ5UGFyYW1zOiAnc3Vic2V0J1xufTtcbmZ1bmN0aW9uIGlzQWN0aXZlKHVybCwgcm91dGVyLCBtYXRjaE9wdGlvbnMpIHtcbiAgY29uc3QgdXJsVHJlZSA9IHVybCBpbnN0YW5jZW9mIFVybFRyZWUgPyB1cmwgOiByb3V0ZXIucGFyc2VVcmwodXJsKTtcbiAgcmV0dXJuIGNvbXB1dGVkKCgpID0+IGNvbnRhaW5zVHJlZShyb3V0ZXIubGFzdFN1Y2Nlc3NmdWxOYXZpZ2F0aW9uKCk/LmZpbmFsVXJsID8/IG5ldyBVcmxUcmVlKCksIHVybFRyZWUsIHtcbiAgICAuLi5zdWJzZXRNYXRjaE9wdGlvbnMsXG4gICAgLi4ubWF0Y2hPcHRpb25zXG4gIH0pKTtcbn1cbmZ1bmN0aW9uIGNvbnRhaW5zVHJlZShjb250YWluZXIsIGNvbnRhaW5lZSwgb3B0aW9ucykge1xuICByZXR1cm4gcGF0aENvbXBhcmVNYXBbb3B0aW9ucy5wYXRoc10oY29udGFpbmVyLnJvb3QsIGNvbnRhaW5lZS5yb290LCBvcHRpb25zLm1hdHJpeFBhcmFtcykgJiYgcGFyYW1Db21wYXJlTWFwW29wdGlvbnMucXVlcnlQYXJhbXNdKGNvbnRhaW5lci5xdWVyeVBhcmFtcywgY29udGFpbmVlLnF1ZXJ5UGFyYW1zKSAmJiAhKG9wdGlvbnMuZnJhZ21lbnQgPT09ICdleGFjdCcgJiYgY29udGFpbmVyLmZyYWdtZW50ICE9PSBjb250YWluZWUuZnJhZ21lbnQpO1xufVxuZnVuY3Rpb24gZXF1YWxQYXJhbXMoY29udGFpbmVyLCBjb250YWluZWUpIHtcbiAgcmV0dXJuIHNoYWxsb3dFcXVhbChjb250YWluZXIsIGNvbnRhaW5lZSk7XG59XG5mdW5jdGlvbiBlcXVhbFNlZ21lbnRHcm91cHMoY29udGFpbmVyLCBjb250YWluZWUsIG1hdHJpeFBhcmFtcykge1xuICBpZiAoIWVxdWFsUGF0aChjb250YWluZXIuc2VnbWVudHMsIGNvbnRhaW5lZS5zZWdtZW50cykpIHJldHVybiBmYWxzZTtcbiAgaWYgKCFtYXRyaXhQYXJhbXNNYXRjaChjb250YWluZXIuc2VnbWVudHMsIGNvbnRhaW5lZS5zZWdtZW50cywgbWF0cml4UGFyYW1zKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoY29udGFpbmVyLm51bWJlck9mQ2hpbGRyZW4gIT09IGNvbnRhaW5lZS5udW1iZXJPZkNoaWxkcmVuKSByZXR1cm4gZmFsc2U7XG4gIGZvciAoY29uc3QgYyBpbiBjb250YWluZWUuY2hpbGRyZW4pIHtcbiAgICBpZiAoIWNvbnRhaW5lci5jaGlsZHJlbltjXSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmICghZXF1YWxTZWdtZW50R3JvdXBzKGNvbnRhaW5lci5jaGlsZHJlbltjXSwgY29udGFpbmVlLmNoaWxkcmVuW2NdLCBtYXRyaXhQYXJhbXMpKSByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5mdW5jdGlvbiBjb250YWluc1BhcmFtcyhjb250YWluZXIsIGNvbnRhaW5lZSkge1xuICByZXR1cm4gT2JqZWN0LmtleXMoY29udGFpbmVlKS5sZW5ndGggPD0gT2JqZWN0LmtleXMoY29udGFpbmVyKS5sZW5ndGggJiYgT2JqZWN0LmtleXMoY29udGFpbmVlKS5ldmVyeShrZXkgPT4gZXF1YWxBcnJheXNPclN0cmluZyhjb250YWluZXJba2V5XSwgY29udGFpbmVlW2tleV0pKTtcbn1cbmZ1bmN0aW9uIGNvbnRhaW5zU2VnbWVudEdyb3VwKGNvbnRhaW5lciwgY29udGFpbmVlLCBtYXRyaXhQYXJhbXMpIHtcbiAgcmV0dXJuIGNvbnRhaW5zU2VnbWVudEdyb3VwSGVscGVyKGNvbnRhaW5lciwgY29udGFpbmVlLCBjb250YWluZWUuc2VnbWVudHMsIG1hdHJpeFBhcmFtcyk7XG59XG5mdW5jdGlvbiBjb250YWluc1NlZ21lbnRHcm91cEhlbHBlcihjb250YWluZXIsIGNvbnRhaW5lZSwgY29udGFpbmVlUGF0aHMsIG1hdHJpeFBhcmFtcykge1xuICBpZiAoY29udGFpbmVyLnNlZ21lbnRzLmxlbmd0aCA+IGNvbnRhaW5lZVBhdGhzLmxlbmd0aCkge1xuICAgIGNvbnN0IGN1cnJlbnQgPSBjb250YWluZXIuc2VnbWVudHMuc2xpY2UoMCwgY29udGFpbmVlUGF0aHMubGVuZ3RoKTtcbiAgICBpZiAoIWVxdWFsUGF0aChjdXJyZW50LCBjb250YWluZWVQYXRocykpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoY29udGFpbmVlLmhhc0NoaWxkcmVuKCkpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoIW1hdHJpeFBhcmFtc01hdGNoKGN1cnJlbnQsIGNvbnRhaW5lZVBhdGhzLCBtYXRyaXhQYXJhbXMpKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gZWxzZSBpZiAoY29udGFpbmVyLnNlZ21lbnRzLmxlbmd0aCA9PT0gY29udGFpbmVlUGF0aHMubGVuZ3RoKSB7XG4gICAgaWYgKCFlcXVhbFBhdGgoY29udGFpbmVyLnNlZ21lbnRzLCBjb250YWluZWVQYXRocykpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoIW1hdHJpeFBhcmFtc01hdGNoKGNvbnRhaW5lci5zZWdtZW50cywgY29udGFpbmVlUGF0aHMsIG1hdHJpeFBhcmFtcykpIHJldHVybiBmYWxzZTtcbiAgICBmb3IgKGNvbnN0IGMgaW4gY29udGFpbmVlLmNoaWxkcmVuKSB7XG4gICAgICBpZiAoIWNvbnRhaW5lci5jaGlsZHJlbltjXSkgcmV0dXJuIGZhbHNlO1xuICAgICAgaWYgKCFjb250YWluc1NlZ21lbnRHcm91cChjb250YWluZXIuY2hpbGRyZW5bY10sIGNvbnRhaW5lZS5jaGlsZHJlbltjXSwgbWF0cml4UGFyYW1zKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGN1cnJlbnQgPSBjb250YWluZWVQYXRocy5zbGljZSgwLCBjb250YWluZXIuc2VnbWVudHMubGVuZ3RoKTtcbiAgICBjb25zdCBuZXh0ID0gY29udGFpbmVlUGF0aHMuc2xpY2UoY29udGFpbmVyLnNlZ21lbnRzLmxlbmd0aCk7XG4gICAgaWYgKCFlcXVhbFBhdGgoY29udGFpbmVyLnNlZ21lbnRzLCBjdXJyZW50KSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmICghbWF0cml4UGFyYW1zTWF0Y2goY29udGFpbmVyLnNlZ21lbnRzLCBjdXJyZW50LCBtYXRyaXhQYXJhbXMpKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKCFjb250YWluZXIuY2hpbGRyZW5bUFJJTUFSWV9PVVRMRVRdKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIGNvbnRhaW5zU2VnbWVudEdyb3VwSGVscGVyKGNvbnRhaW5lci5jaGlsZHJlbltQUklNQVJZX09VVExFVF0sIGNvbnRhaW5lZSwgbmV4dCwgbWF0cml4UGFyYW1zKTtcbiAgfVxufVxuZnVuY3Rpb24gbWF0cml4UGFyYW1zTWF0Y2goY29udGFpbmVyUGF0aHMsIGNvbnRhaW5lZVBhdGhzLCBvcHRpb25zKSB7XG4gIHJldHVybiBjb250YWluZWVQYXRocy5ldmVyeSgoY29udGFpbmVlU2VnbWVudCwgaSkgPT4ge1xuICAgIHJldHVybiBwYXJhbUNvbXBhcmVNYXBbb3B0aW9uc10oY29udGFpbmVyUGF0aHNbaV0ucGFyYW1ldGVycywgY29udGFpbmVlU2VnbWVudC5wYXJhbWV0ZXJzKTtcbiAgfSk7XG59XG5jbGFzcyBVcmxUcmVlIHtcbiAgcm9vdDtcbiAgcXVlcnlQYXJhbXM7XG4gIGZyYWdtZW50O1xuICBfcXVlcnlQYXJhbU1hcDtcbiAgY29uc3RydWN0b3Iocm9vdCA9IG5ldyBVcmxTZWdtZW50R3JvdXAoW10sIHt9KSwgcXVlcnlQYXJhbXMgPSB7fSwgZnJhZ21lbnQgPSBudWxsKSB7XG4gICAgdGhpcy5yb290ID0gcm9vdDtcbiAgICB0aGlzLnF1ZXJ5UGFyYW1zID0gcXVlcnlQYXJhbXM7XG4gICAgdGhpcy5mcmFnbWVudCA9IGZyYWdtZW50O1xuICAgIGlmICh0eXBlb2YgbmdEZXZNb2RlID09PSAndW5kZWZpbmVkJyB8fCBuZ0Rldk1vZGUpIHtcbiAgICAgIGlmIChyb290LnNlZ21lbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IF9SdW50aW1lRXJyb3IoNDAxNSwgJ1RoZSByb290IGBVcmxTZWdtZW50R3JvdXBgIHNob3VsZCBub3QgY29udGFpbiBgc2VnbWVudHNgLiAnICsgJ0luc3RlYWQsIHRoZXNlIHNlZ21lbnRzIGJlbG9uZyBpbiB0aGUgYGNoaWxkcmVuYCBzbyB0aGV5IGNhbiBiZSBhc3NvY2lhdGVkIHdpdGggYSBuYW1lZCBvdXRsZXQuJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGdldCBxdWVyeVBhcmFtTWFwKCkge1xuICAgIHRoaXMuX3F1ZXJ5UGFyYW1NYXAgPz89IGNvbnZlcnRUb1BhcmFtTWFwKHRoaXMucXVlcnlQYXJhbXMpO1xuICAgIHJldHVybiB0aGlzLl9xdWVyeVBhcmFtTWFwO1xuICB9XG4gIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiBERUZBVUxUX1NFUklBTElaRVIuc2VyaWFsaXplKHRoaXMpO1xuICB9XG59XG5jbGFzcyBVcmxTZWdtZW50R3JvdXAge1xuICBzZWdtZW50cztcbiAgY2hpbGRyZW47XG4gIHBhcmVudCA9IG51bGw7XG4gIGNvbnN0cnVjdG9yKHNlZ21lbnRzLCBjaGlsZHJlbikge1xuICAgIHRoaXMuc2VnbWVudHMgPSBzZWdtZW50cztcbiAgICB0aGlzLmNoaWxkcmVuID0gY2hpbGRyZW47XG4gICAgT2JqZWN0LnZhbHVlcyhjaGlsZHJlbikuZm9yRWFjaCh2ID0+IHYucGFyZW50ID0gdGhpcyk7XG4gIH1cbiAgaGFzQ2hpbGRyZW4oKSB7XG4gICAgcmV0dXJuIHRoaXMubnVtYmVyT2ZDaGlsZHJlbiA+IDA7XG4gIH1cbiAgZ2V0IG51bWJlck9mQ2hpbGRyZW4oKSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuY2hpbGRyZW4pLmxlbmd0aDtcbiAgfVxuICB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gc2VyaWFsaXplUGF0aHModGhpcyk7XG4gIH1cbn1cbmNsYXNzIFVybFNlZ21lbnQge1xuICBwYXRoO1xuICBwYXJhbWV0ZXJzO1xuICBfcGFyYW1ldGVyTWFwO1xuICBjb25zdHJ1Y3RvcihwYXRoLCBwYXJhbWV0ZXJzKSB7XG4gICAgdGhpcy5wYXRoID0gcGF0aDtcbiAgICB0aGlzLnBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzO1xuICB9XG4gIGdldCBwYXJhbWV0ZXJNYXAoKSB7XG4gICAgdGhpcy5fcGFyYW1ldGVyTWFwID8/PSBjb252ZXJ0VG9QYXJhbU1hcCh0aGlzLnBhcmFtZXRlcnMpO1xuICAgIHJldHVybiB0aGlzLl9wYXJhbWV0ZXJNYXA7XG4gIH1cbiAgdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIHNlcmlhbGl6ZVBhdGgodGhpcyk7XG4gIH1cbn1cbmZ1bmN0aW9uIGVxdWFsU2VnbWVudHMoYXMsIGJzKSB7XG4gIHJldHVybiBlcXVhbFBhdGgoYXMsIGJzKSAmJiBhcy5ldmVyeSgoYSwgaSkgPT4gc2hhbGxvd0VxdWFsKGEucGFyYW1ldGVycywgYnNbaV0ucGFyYW1ldGVycykpO1xufVxuZnVuY3Rpb24gZXF1YWxQYXRoKGFzLCBicykge1xuICBpZiAoYXMubGVuZ3RoICE9PSBicy5sZW5ndGgpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIGFzLmV2ZXJ5KChhLCBpKSA9PiBhLnBhdGggPT09IGJzW2ldLnBhdGgpO1xufVxuZnVuY3Rpb24gbWFwQ2hpbGRyZW5JbnRvQXJyYXkoc2VnbWVudCwgZm4pIHtcbiAgbGV0IHJlcyA9IFtdO1xuICBPYmplY3QuZW50cmllcyhzZWdtZW50LmNoaWxkcmVuKS5mb3JFYWNoKChbY2hpbGRPdXRsZXQsIGNoaWxkXSkgPT4ge1xuICAgIGlmIChjaGlsZE91dGxldCA9PT0gUFJJTUFSWV9PVVRMRVQpIHtcbiAgICAgIHJlcyA9IHJlcy5jb25jYXQoZm4oY2hpbGQsIGNoaWxkT3V0bGV0KSk7XG4gICAgfVxuICB9KTtcbiAgT2JqZWN0LmVudHJpZXMoc2VnbWVudC5jaGlsZHJlbikuZm9yRWFjaCgoW2NoaWxkT3V0bGV0LCBjaGlsZF0pID0+IHtcbiAgICBpZiAoY2hpbGRPdXRsZXQgIT09IFBSSU1BUllfT1VUTEVUKSB7XG4gICAgICByZXMgPSByZXMuY29uY2F0KGZuKGNoaWxkLCBjaGlsZE91dGxldCkpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByZXM7XG59XG5sZXQgVXJsU2VyaWFsaXplciA9IC8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICBjbGFzcyBVcmxTZXJpYWxpemVyIHtcbiAgICBzdGF0aWMgybVmYWMgPSBmdW5jdGlvbiBVcmxTZXJpYWxpemVyX0ZhY3RvcnkoX19uZ0ZhY3RvcnlUeXBlX18pIHtcbiAgICAgIHJldHVybiBuZXcgKF9fbmdGYWN0b3J5VHlwZV9fIHx8IFVybFNlcmlhbGl6ZXIpKCk7XG4gICAgfTtcbiAgICBzdGF0aWMgybVwcm92ID0gLyogQF9fUFVSRV9fICovaTAuybXJtWRlZmluZUluamVjdGFibGUoe1xuICAgICAgdG9rZW46IFVybFNlcmlhbGl6ZXIsXG4gICAgICBmYWN0b3J5OiAoKSA9PiAoKCkgPT4gbmV3IERlZmF1bHRVcmxTZXJpYWxpemVyKCkpKCksXG4gICAgICBwcm92aWRlZEluOiAncm9vdCdcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gVXJsU2VyaWFsaXplcjtcbn0pKCk7XG4vKiNfX1BVUkVfXyovKCgpID0+IHtcbiAgKHR5cGVvZiBuZ0Rldk1vZGUgPT09IFwidW5kZWZpbmVkXCIgfHwgbmdEZXZNb2RlKSAmJiB2b2lkIDA7XG59KSgpO1xuY2xhc3MgRGVmYXVsdFVybFNlcmlhbGl6ZXIge1xuICBwYXJzZSh1cmwpIHtcbiAgICBjb25zdCBwID0gbmV3IFVybFBhcnNlcih1cmwpO1xuICAgIHJldHVybiBuZXcgVXJsVHJlZShwLnBhcnNlUm9vdFNlZ21lbnQoKSwgcC5wYXJzZVF1ZXJ5UGFyYW1zKCksIHAucGFyc2VGcmFnbWVudCgpKTtcbiAgfVxuICBzZXJpYWxpemUodHJlZSkge1xuICAgIGNvbnN0IHNlZ21lbnQgPSBgLyR7c2VyaWFsaXplU2VnbWVudCh0cmVlLnJvb3QsIHRydWUpfWA7XG4gICAgY29uc3QgcXVlcnkgPSBzZXJpYWxpemVRdWVyeVBhcmFtcyh0cmVlLnF1ZXJ5UGFyYW1zKTtcbiAgICBjb25zdCBmcmFnbWVudCA9IHR5cGVvZiB0cmVlLmZyYWdtZW50ID09PSBgc3RyaW5nYCA/IGAjJHtlbmNvZGVVcmlGcmFnbWVudCh0cmVlLmZyYWdtZW50KX1gIDogJyc7XG4gICAgcmV0dXJuIGAke3NlZ21lbnR9JHtxdWVyeX0ke2ZyYWdtZW50fWA7XG4gIH1cbn1cbmNvbnN0IERFRkFVTFRfU0VSSUFMSVpFUiA9IC8qI19fUFVSRV9fKi9uZXcgRGVmYXVsdFVybFNlcmlhbGl6ZXIoKTtcbmZ1bmN0aW9uIHNlcmlhbGl6ZVBhdGhzKHNlZ21lbnQpIHtcbiAgcmV0dXJuIHNlZ21lbnQuc2VnbWVudHMubWFwKHAgPT4gc2VyaWFsaXplUGF0aChwKSkuam9pbignLycpO1xufVxuZnVuY3Rpb24gc2VyaWFsaXplU2VnbWVudChzZWdtZW50LCByb290KSB7XG4gIGlmICghc2VnbWVudC5oYXNDaGlsZHJlbigpKSB7XG4gICAgcmV0dXJuIHNlcmlhbGl6ZVBhdGhzKHNlZ21lbnQpO1xuICB9XG4gIGlmIChyb290KSB7XG4gICAgY29uc3QgcHJpbWFyeSA9IHNlZ21lbnQuY2hpbGRyZW5bUFJJTUFSWV9PVVRMRVRdID8gc2VyaWFsaXplU2VnbWVudChzZWdtZW50LmNoaWxkcmVuW1BSSU1BUllfT1VUTEVUXSwgZmFsc2UpIDogJyc7XG4gICAgY29uc3QgY2hpbGRyZW4gPSBbXTtcbiAgICBPYmplY3QuZW50cmllcyhzZWdtZW50LmNoaWxkcmVuKS5mb3JFYWNoKChbaywgdl0pID0+IHtcbiAgICAgIGlmIChrICE9PSBQUklNQVJZX09VVExFVCkge1xuICAgICAgICBjaGlsZHJlbi5wdXNoKGAke2t9OiR7c2VyaWFsaXplU2VnbWVudCh2LCBmYWxzZSl9YCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGNoaWxkcmVuLmxlbmd0aCA+IDAgPyBgJHtwcmltYXJ5fSgke2NoaWxkcmVuLmpvaW4oJy8vJyl9KWAgOiBwcmltYXJ5O1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGNoaWxkcmVuID0gbWFwQ2hpbGRyZW5JbnRvQXJyYXkoc2VnbWVudCwgKHYsIGspID0+IHtcbiAgICAgIGlmIChrID09PSBQUklNQVJZX09VVExFVCkge1xuICAgICAgICByZXR1cm4gW3NlcmlhbGl6ZVNlZ21lbnQoc2VnbWVudC5jaGlsZHJlbltQUklNQVJZX09VVExFVF0sIGZhbHNlKV07XG4gICAgICB9XG4gICAgICByZXR1cm4gW2Ake2t9OiR7c2VyaWFsaXplU2VnbWVudCh2LCBmYWxzZSl9YF07XG4gICAgfSk7XG4gICAgaWYgKE9iamVjdC5rZXlzKHNlZ21lbnQuY2hpbGRyZW4pLmxlbmd0aCA9PT0gMSAmJiBzZWdtZW50LmNoaWxkcmVuW1BSSU1BUllfT1VUTEVUXSAhPSBudWxsKSB7XG4gICAgICByZXR1cm4gYCR7c2VyaWFsaXplUGF0aHMoc2VnbWVudCl9LyR7Y2hpbGRyZW5bMF19YDtcbiAgICB9XG4gICAgcmV0dXJuIGAke3NlcmlhbGl6ZVBhdGhzKHNlZ21lbnQpfS8oJHtjaGlsZHJlbi5qb2luKCcvLycpfSlgO1xuICB9XG59XG5mdW5jdGlvbiBlbmNvZGVVcmlTdHJpbmcocykge1xuICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHMpLnJlcGxhY2UoLyU0MC9nLCAnQCcpLnJlcGxhY2UoLyUzQS9naSwgJzonKS5yZXBsYWNlKC8lMjQvZywgJyQnKS5yZXBsYWNlKC8lMkMvZ2ksICcsJyk7XG59XG5mdW5jdGlvbiBlbmNvZGVVcmlRdWVyeShzKSB7XG4gIHJldHVybiBlbmNvZGVVcmlTdHJpbmcocykucmVwbGFjZSgvJTNCL2dpLCAnOycpO1xufVxuZnVuY3Rpb24gZW5jb2RlVXJpRnJhZ21lbnQocykge1xuICByZXR1cm4gZW5jb2RlVVJJKHMpO1xufVxuZnVuY3Rpb24gZW5jb2RlVXJpU2VnbWVudChzKSB7XG4gIHJldHVybiBlbmNvZGVVcmlTdHJpbmcocykucmVwbGFjZSgvXFwoL2csICclMjgnKS5yZXBsYWNlKC9cXCkvZywgJyUyOScpLnJlcGxhY2UoLyUyNi9naSwgJyYnKTtcbn1cbmZ1bmN0aW9uIGRlY29kZShzKSB7XG4gIHJldHVybiBkZWNvZGVVUklDb21wb25lbnQocyk7XG59XG5mdW5jdGlvbiBkZWNvZGVRdWVyeShzKSB7XG4gIHJldHVybiBkZWNvZGUocy5yZXBsYWNlKC9cXCsvZywgJyUyMCcpKTtcbn1cbmZ1bmN0aW9uIHNlcmlhbGl6ZVBhdGgocGF0aCkge1xuICByZXR1cm4gYCR7ZW5jb2RlVXJpU2VnbWVudChwYXRoLnBhdGgpfSR7c2VyaWFsaXplTWF0cml4UGFyYW1zKHBhdGgucGFyYW1ldGVycyl9YDtcbn1cbmZ1bmN0aW9uIHNlcmlhbGl6ZU1hdHJpeFBhcmFtcyhwYXJhbXMpIHtcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHBhcmFtcykubWFwKChba2V5LCB2YWx1ZV0pID0+IGA7JHtlbmNvZGVVcmlTZWdtZW50KGtleSl9PSR7ZW5jb2RlVXJpU2VnbWVudCh2YWx1ZSl9YCkuam9pbignJyk7XG59XG5mdW5jdGlvbiBzZXJpYWxpemVRdWVyeVBhcmFtcyhwYXJhbXMpIHtcbiAgY29uc3Qgc3RyUGFyYW1zID0gT2JqZWN0LmVudHJpZXMocGFyYW1zKS5tYXAoKFtuYW1lLCB2YWx1ZV0pID0+IHtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZS5tYXAodiA9PiBgJHtlbmNvZGVVcmlRdWVyeShuYW1lKX09JHtlbmNvZGVVcmlRdWVyeSh2KX1gKS5qb2luKCcmJykgOiBgJHtlbmNvZGVVcmlRdWVyeShuYW1lKX09JHtlbmNvZGVVcmlRdWVyeSh2YWx1ZSl9YDtcbiAgfSkuZmlsdGVyKHMgPT4gcyk7XG4gIHJldHVybiBzdHJQYXJhbXMubGVuZ3RoID8gYD8ke3N0clBhcmFtcy5qb2luKCcmJyl9YCA6ICcnO1xufVxuY29uc3QgU0VHTUVOVF9SRSA9IC9eW15cXC8oKT87I10rLztcbmZ1bmN0aW9uIG1hdGNoU2VnbWVudHMoc3RyKSB7XG4gIGNvbnN0IG1hdGNoID0gc3RyLm1hdGNoKFNFR01FTlRfUkUpO1xuICByZXR1cm4gbWF0Y2ggPyBtYXRjaFswXSA6ICcnO1xufVxuY29uc3QgTUFUUklYX1BBUkFNX1NFR01FTlRfUkUgPSAvXlteXFwvKCk/Oz0jXSsvO1xuZnVuY3Rpb24gbWF0Y2hNYXRyaXhLZXlTZWdtZW50cyhzdHIpIHtcbiAgY29uc3QgbWF0Y2ggPSBzdHIubWF0Y2goTUFUUklYX1BBUkFNX1NFR01FTlRfUkUpO1xuICByZXR1cm4gbWF0Y2ggPyBtYXRjaFswXSA6ICcnO1xufVxuY29uc3QgUVVFUllfUEFSQU1fUkUgPSAvXltePT8mI10rLztcbmZ1bmN0aW9uIG1hdGNoUXVlcnlQYXJhbXMoc3RyKSB7XG4gIGNvbnN0IG1hdGNoID0gc3RyLm1hdGNoKFFVRVJZX1BBUkFNX1JFKTtcbiAgcmV0dXJuIG1hdGNoID8gbWF0Y2hbMF0gOiAnJztcbn1cbmNvbnN0IFFVRVJZX1BBUkFNX1ZBTFVFX1JFID0gL15bXiYjXSsvO1xuZnVuY3Rpb24gbWF0Y2hVcmxRdWVyeVBhcmFtVmFsdWUoc3RyKSB7XG4gIGNvbnN0IG1hdGNoID0gc3RyLm1hdGNoKFFVRVJZX1BBUkFNX1ZBTFVFX1JFKTtcbiAgcmV0dXJuIG1hdGNoID8gbWF0Y2hbMF0gOiAnJztcbn1cbmNsYXNzIFVybFBhcnNlciB7XG4gIHVybDtcbiAgcmVtYWluaW5nO1xuICBjb25zdHJ1Y3Rvcih1cmwpIHtcbiAgICB0aGlzLnVybCA9IHVybDtcbiAgICB0aGlzLnJlbWFpbmluZyA9IHVybDtcbiAgfVxuICBwYXJzZVJvb3RTZWdtZW50KCkge1xuICAgIHRoaXMuY29uc3VtZU9wdGlvbmFsKCcvJyk7XG4gICAgaWYgKHRoaXMucmVtYWluaW5nID09PSAnJyB8fCB0aGlzLnBlZWtTdGFydHNXaXRoKCc/JykgfHwgdGhpcy5wZWVrU3RhcnRzV2l0aCgnIycpKSB7XG4gICAgICByZXR1cm4gbmV3IFVybFNlZ21lbnRHcm91cChbXSwge30pO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFVybFNlZ21lbnRHcm91cChbXSwgdGhpcy5wYXJzZUNoaWxkcmVuKCkpO1xuICB9XG4gIHBhcnNlUXVlcnlQYXJhbXMoKSB7XG4gICAgY29uc3QgcGFyYW1zID0ge307XG4gICAgaWYgKHRoaXMuY29uc3VtZU9wdGlvbmFsKCc/JykpIHtcbiAgICAgIGRvIHtcbiAgICAgICAgdGhpcy5wYXJzZVF1ZXJ5UGFyYW0ocGFyYW1zKTtcbiAgICAgIH0gd2hpbGUgKHRoaXMuY29uc3VtZU9wdGlvbmFsKCcmJykpO1xuICAgIH1cbiAgICByZXR1cm4gcGFyYW1zO1xuICB9XG4gIHBhcnNlRnJhZ21lbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29uc3VtZU9wdGlvbmFsKCcjJykgPyBkZWNvZGVVUklDb21wb25lbnQodGhpcy5yZW1haW5pbmcpIDogbnVsbDtcbiAgfVxuICBwYXJzZUNoaWxkcmVuKGRlcHRoID0gMCkge1xuICAgIGlmIChkZXB0aCA+IDUwKSB7XG4gICAgICB0aHJvdyBuZXcgX1J1bnRpbWVFcnJvcig0MDEwLCAodHlwZW9mIG5nRGV2TW9kZSA9PT0gJ3VuZGVmaW5lZCcgfHwgbmdEZXZNb2RlKSAmJiAnVVJMIGlzIHRvbyBkZWVwJyk7XG4gICAgfVxuICAgIGlmICh0aGlzLnJlbWFpbmluZyA9PT0gJycpIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgdGhpcy5jb25zdW1lT3B0aW9uYWwoJy8nKTtcbiAgICBjb25zdCBzZWdtZW50cyA9IFtdO1xuICAgIGlmICghdGhpcy5wZWVrU3RhcnRzV2l0aCgnKCcpKSB7XG4gICAgICBzZWdtZW50cy5wdXNoKHRoaXMucGFyc2VTZWdtZW50KCkpO1xuICAgIH1cbiAgICB3aGlsZSAodGhpcy5wZWVrU3RhcnRzV2l0aCgnLycpICYmICF0aGlzLnBlZWtTdGFydHNXaXRoKCcvLycpICYmICF0aGlzLnBlZWtTdGFydHNXaXRoKCcvKCcpKSB7XG4gICAgICB0aGlzLmNhcHR1cmUoJy8nKTtcbiAgICAgIHNlZ21lbnRzLnB1c2godGhpcy5wYXJzZVNlZ21lbnQoKSk7XG4gICAgfVxuICAgIGxldCBjaGlsZHJlbiA9IHt9O1xuICAgIGlmICh0aGlzLnBlZWtTdGFydHNXaXRoKCcvKCcpKSB7XG4gICAgICB0aGlzLmNhcHR1cmUoJy8nKTtcbiAgICAgIGNoaWxkcmVuID0gdGhpcy5wYXJzZVBhcmVucyh0cnVlLCBkZXB0aCk7XG4gICAgfVxuICAgIGxldCByZXMgPSB7fTtcbiAgICBpZiAodGhpcy5wZWVrU3RhcnRzV2l0aCgnKCcpKSB7XG4gICAgICByZXMgPSB0aGlzLnBhcnNlUGFyZW5zKGZhbHNlLCBkZXB0aCk7XG4gICAgfVxuICAgIGlmIChzZWdtZW50cy5sZW5ndGggPiAwIHx8IE9iamVjdC5rZXlzKGNoaWxkcmVuKS5sZW5ndGggPiAwKSB7XG4gICAgICByZXNbUFJJTUFSWV9PVVRMRVRdID0gbmV3IFVybFNlZ21lbnRHcm91cChzZWdtZW50cywgY2hpbGRyZW4pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHBhcnNlU2VnbWVudCgpIHtcbiAgICBjb25zdCBwYXRoID0gbWF0Y2hTZWdtZW50cyh0aGlzLnJlbWFpbmluZyk7XG4gICAgaWYgKHBhdGggPT09ICcnICYmIHRoaXMucGVla1N0YXJ0c1dpdGgoJzsnKSkge1xuICAgICAgdGhyb3cgbmV3IF9SdW50aW1lRXJyb3IoNDAwOSwgKHR5cGVvZiBuZ0Rldk1vZGUgPT09ICd1bmRlZmluZWQnIHx8IG5nRGV2TW9kZSkgJiYgYEVtcHR5IHBhdGggdXJsIHNlZ21lbnQgY2Fubm90IGhhdmUgcGFyYW1ldGVyczogJyR7dGhpcy5yZW1haW5pbmd9Jy5gKTtcbiAgICB9XG4gICAgdGhpcy5jYXB0dXJlKHBhdGgpO1xuICAgIHJldHVybiBuZXcgVXJsU2VnbWVudChkZWNvZGUocGF0aCksIHRoaXMucGFyc2VNYXRyaXhQYXJhbXMoKSk7XG4gIH1cbiAgcGFyc2VNYXRyaXhQYXJhbXMoKSB7XG4gICAgY29uc3QgcGFyYW1zID0ge307XG4gICAgd2hpbGUgKHRoaXMuY29uc3VtZU9wdGlvbmFsKCc7JykpIHtcbiAgICAgIHRoaXMucGFyc2VQYXJhbShwYXJhbXMpO1xuICAgIH1cbiAgICByZXR1cm4gcGFyYW1zO1xuICB9XG4gIHBhcnNlUGFyYW0ocGFyYW1zKSB7XG4gICAgY29uc3Qga2V5ID0gbWF0Y2hNYXRyaXhLZXlTZWdtZW50cyh0aGlzLnJlbWFpbmluZyk7XG4gICAgaWYgKCFrZXkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5jYXB0dXJlKGtleSk7XG4gICAgbGV0IHZhbHVlID0gJyc7XG4gICAgaWYgKHRoaXMuY29uc3VtZU9wdGlvbmFsKCc9JykpIHtcbiAgICAgIGNvbnN0IHZhbHVlTWF0Y2ggPSBtYXRjaFNlZ21lbnRzKHRoaXMucmVtYWluaW5nKTtcbiAgICAgIGlmICh2YWx1ZU1hdGNoKSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWVNYXRjaDtcbiAgICAgICAgdGhpcy5jYXB0dXJlKHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcGFyYW1zW2RlY29kZShrZXkpXSA9IGRlY29kZSh2YWx1ZSk7XG4gIH1cbiAgcGFyc2VRdWVyeVBhcmFtKHBhcmFtcykge1xuICAgIGNvbnN0IGtleSA9IG1hdGNoUXVlcnlQYXJhbXModGhpcy5yZW1haW5pbmcpO1xuICAgIGlmICgha2V5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuY2FwdHVyZShrZXkpO1xuICAgIGxldCB2YWx1ZSA9ICcnO1xuICAgIGlmICh0aGlzLmNvbnN1bWVPcHRpb25hbCgnPScpKSB7XG4gICAgICBjb25zdCB2YWx1ZU1hdGNoID0gbWF0Y2hVcmxRdWVyeVBhcmFtVmFsdWUodGhpcy5yZW1haW5pbmcpO1xuICAgICAgaWYgKHZhbHVlTWF0Y2gpIHtcbiAgICAgICAgdmFsdWUgPSB2YWx1ZU1hdGNoO1xuICAgICAgICB0aGlzLmNhcHR1cmUodmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBkZWNvZGVkS2V5ID0gZGVjb2RlUXVlcnkoa2V5KTtcbiAgICBjb25zdCBkZWNvZGVkVmFsID0gZGVjb2RlUXVlcnkodmFsdWUpO1xuICAgIGlmIChwYXJhbXMuaGFzT3duUHJvcGVydHkoZGVjb2RlZEtleSkpIHtcbiAgICAgIGxldCBjdXJyZW50VmFsID0gcGFyYW1zW2RlY29kZWRLZXldO1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGN1cnJlbnRWYWwpKSB7XG4gICAgICAgIGN1cnJlbnRWYWwgPSBbY3VycmVudFZhbF07XG4gICAgICAgIHBhcmFtc1tkZWNvZGVkS2V5XSA9IGN1cnJlbnRWYWw7XG4gICAgICB9XG4gICAgICBjdXJyZW50VmFsLnB1c2goZGVjb2RlZFZhbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcmFtc1tkZWNvZGVkS2V5XSA9IGRlY29kZWRWYWw7XG4gICAgfVxuICB9XG4gIHBhcnNlUGFyZW5zKGFsbG93UHJpbWFyeSwgZGVwdGgpIHtcbiAgICBjb25zdCBzZWdtZW50cyA9IHt9O1xuICAgIHRoaXMuY2FwdHVyZSgnKCcpO1xuICAgIHdoaWxlICghdGhpcy5jb25zdW1lT3B0aW9uYWwoJyknKSAmJiB0aGlzLnJlbWFpbmluZy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBwYXRoID0gbWF0Y2hTZWdtZW50cyh0aGlzLnJlbWFpbmluZyk7XG4gICAgICBjb25zdCBuZXh0ID0gdGhpcy5yZW1haW5pbmdbcGF0aC5sZW5ndGhdO1xuICAgICAgaWYgKG5leHQgIT09ICcvJyAmJiBuZXh0ICE9PSAnKScgJiYgbmV4dCAhPT0gJzsnKSB7XG4gICAgICAgIHRocm93IG5ldyBfUnVudGltZUVycm9yKDQwMTAsICh0eXBlb2YgbmdEZXZNb2RlID09PSAndW5kZWZpbmVkJyB8fCBuZ0Rldk1vZGUpICYmIGBDYW5ub3QgcGFyc2UgdXJsICcke3RoaXMudXJsfSdgKTtcbiAgICAgIH1cbiAgICAgIGxldCBvdXRsZXROYW1lO1xuICAgICAgaWYgKHBhdGguaW5kZXhPZignOicpID4gLTEpIHtcbiAgICAgICAgb3V0bGV0TmFtZSA9IHBhdGguc2xpY2UoMCwgcGF0aC5pbmRleE9mKCc6JykpO1xuICAgICAgICB0aGlzLmNhcHR1cmUob3V0bGV0TmFtZSk7XG4gICAgICAgIHRoaXMuY2FwdHVyZSgnOicpO1xuICAgICAgfSBlbHNlIGlmIChhbGxvd1ByaW1hcnkpIHtcbiAgICAgICAgb3V0bGV0TmFtZSA9IFBSSU1BUllfT1VUTEVUO1xuICAgICAgfVxuICAgICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLnBhcnNlQ2hpbGRyZW4oZGVwdGggKyAxKTtcbiAgICAgIHNlZ21lbnRzW291dGxldE5hbWUgPz8gUFJJTUFSWV9PVVRMRVRdID0gT2JqZWN0LmtleXMoY2hpbGRyZW4pLmxlbmd0aCA9PT0gMSAmJiBjaGlsZHJlbltQUklNQVJZX09VVExFVF0gPyBjaGlsZHJlbltQUklNQVJZX09VVExFVF0gOiBuZXcgVXJsU2VnbWVudEdyb3VwKFtdLCBjaGlsZHJlbik7XG4gICAgICB0aGlzLmNvbnN1bWVPcHRpb25hbCgnLy8nKTtcbiAgICB9XG4gICAgcmV0dXJuIHNlZ21lbnRzO1xuICB9XG4gIHBlZWtTdGFydHNXaXRoKHN0cikge1xuICAgIHJldHVybiB0aGlzLnJlbWFpbmluZy5zdGFydHNXaXRoKHN0cik7XG4gIH1cbiAgY29uc3VtZU9wdGlvbmFsKHN0cikge1xuICAgIGlmICh0aGlzLnBlZWtTdGFydHNXaXRoKHN0cikpIHtcbiAgICAgIHRoaXMucmVtYWluaW5nID0gdGhpcy5yZW1haW5pbmcuc3Vic3RyaW5nKHN0ci5sZW5ndGgpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBjYXB0dXJlKHN0cikge1xuICAgIGlmICghdGhpcy5jb25zdW1lT3B0aW9uYWwoc3RyKSkge1xuICAgICAgdGhyb3cgbmV3IF9SdW50aW1lRXJyb3IoNDAxMSwgKHR5cGVvZiBuZ0Rldk1vZGUgPT09ICd1bmRlZmluZWQnIHx8IG5nRGV2TW9kZSkgJiYgYEV4cGVjdGVkIFwiJHtzdHJ9XCIuYCk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBjcmVhdGVSb290KHJvb3RDYW5kaWRhdGUpIHtcbiAgcmV0dXJuIHJvb3RDYW5kaWRhdGUuc2VnbWVudHMubGVuZ3RoID4gMCA/IG5ldyBVcmxTZWdtZW50R3JvdXAoW10sIHtcbiAgICBbUFJJTUFSWV9PVVRMRVRdOiByb290Q2FuZGlkYXRlXG4gIH0pIDogcm9vdENhbmRpZGF0ZTtcbn1cbmZ1bmN0aW9uIHNxdWFzaFNlZ21lbnRHcm91cChzZWdtZW50R3JvdXApIHtcbiAgY29uc3QgbmV3Q2hpbGRyZW4gPSB7fTtcbiAgZm9yIChjb25zdCBbY2hpbGRPdXRsZXQsIGNoaWxkXSBvZiBPYmplY3QuZW50cmllcyhzZWdtZW50R3JvdXAuY2hpbGRyZW4pKSB7XG4gICAgY29uc3QgY2hpbGRDYW5kaWRhdGUgPSBzcXVhc2hTZWdtZW50R3JvdXAoY2hpbGQpO1xuICAgIGlmIChjaGlsZE91dGxldCA9PT0gUFJJTUFSWV9PVVRMRVQgJiYgY2hpbGRDYW5kaWRhdGUuc2VnbWVudHMubGVuZ3RoID09PSAwICYmIGNoaWxkQ2FuZGlkYXRlLmhhc0NoaWxkcmVuKCkpIHtcbiAgICAgIGZvciAoY29uc3QgW2dyYW5kQ2hpbGRPdXRsZXQsIGdyYW5kQ2hpbGRdIG9mIE9iamVjdC5lbnRyaWVzKGNoaWxkQ2FuZGlkYXRlLmNoaWxkcmVuKSkge1xuICAgICAgICBuZXdDaGlsZHJlbltncmFuZENoaWxkT3V0bGV0XSA9IGdyYW5kQ2hpbGQ7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChjaGlsZENhbmRpZGF0ZS5zZWdtZW50cy5sZW5ndGggPiAwIHx8IGNoaWxkQ2FuZGlkYXRlLmhhc0NoaWxkcmVuKCkpIHtcbiAgICAgIG5ld0NoaWxkcmVuW2NoaWxkT3V0bGV0XSA9IGNoaWxkQ2FuZGlkYXRlO1xuICAgIH1cbiAgfVxuICBjb25zdCBzID0gbmV3IFVybFNlZ21lbnRHcm91cChzZWdtZW50R3JvdXAuc2VnbWVudHMsIG5ld0NoaWxkcmVuKTtcbiAgcmV0dXJuIG1lcmdlVHJpdmlhbENoaWxkcmVuKHMpO1xufVxuZnVuY3Rpb24gbWVyZ2VUcml2aWFsQ2hpbGRyZW4ocykge1xuICBpZiAocy5udW1iZXJPZkNoaWxkcmVuID09PSAxICYmIHMuY2hpbGRyZW5bUFJJTUFSWV9PVVRMRVRdKSB7XG4gICAgY29uc3QgYyA9IHMuY2hpbGRyZW5bUFJJTUFSWV9PVVRMRVRdO1xuICAgIHJldHVybiBuZXcgVXJsU2VnbWVudEdyb3VwKHMuc2VnbWVudHMuY29uY2F0KGMuc2VnbWVudHMpLCBjLmNoaWxkcmVuKTtcbiAgfVxuICByZXR1cm4gcztcbn1cbmZ1bmN0aW9uIGlzVXJsVHJlZSh2KSB7XG4gIHJldHVybiB2IGluc3RhbmNlb2YgVXJsVHJlZTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZVVybFRyZWVGcm9tU25hcHNob3QocmVsYXRpdmVUbywgY29tbWFuZHMsIHF1ZXJ5UGFyYW1zID0gbnVsbCwgZnJhZ21lbnQgPSBudWxsLCB1cmxTZXJpYWxpemVyID0gbmV3IERlZmF1bHRVcmxTZXJpYWxpemVyKCkpIHtcbiAgY29uc3QgcmVsYXRpdmVUb1VybFNlZ21lbnRHcm91cCA9IGNyZWF0ZVNlZ21lbnRHcm91cEZyb21Sb3V0ZShyZWxhdGl2ZVRvKTtcbiAgcmV0dXJuIGNyZWF0ZVVybFRyZWVGcm9tU2VnbWVudEdyb3VwKHJlbGF0aXZlVG9VcmxTZWdtZW50R3JvdXAsIGNvbW1hbmRzLCBxdWVyeVBhcmFtcywgZnJhZ21lbnQsIHVybFNlcmlhbGl6ZXIpO1xufVxuZnVuY3Rpb24gY3JlYXRlU2VnbWVudEdyb3VwRnJvbVJvdXRlKHJvdXRlKSB7XG4gIGxldCB0YXJnZXRHcm91cDtcbiAgZnVuY3Rpb24gY3JlYXRlU2VnbWVudEdyb3VwRnJvbVJvdXRlUmVjdXJzaXZlKGN1cnJlbnRSb3V0ZSkge1xuICAgIGNvbnN0IGNoaWxkT3V0bGV0cyA9IHt9O1xuICAgIGZvciAoY29uc3QgY2hpbGRTbmFwc2hvdCBvZiBjdXJyZW50Um91dGUuY2hpbGRyZW4pIHtcbiAgICAgIGNvbnN0IHJvb3QgPSBjcmVhdGVTZWdtZW50R3JvdXBGcm9tUm91dGVSZWN1cnNpdmUoY2hpbGRTbmFwc2hvdCk7XG4gICAgICBjaGlsZE91dGxldHNbY2hpbGRTbmFwc2hvdC5vdXRsZXRdID0gcm9vdDtcbiAgICB9XG4gICAgY29uc3Qgc2VnbWVudEdyb3VwID0gbmV3IFVybFNlZ21lbnRHcm91cChjdXJyZW50Um91dGUudXJsLCBjaGlsZE91dGxldHMpO1xuICAgIGlmIChjdXJyZW50Um91dGUgPT09IHJvdXRlKSB7XG4gICAgICB0YXJnZXRHcm91cCA9IHNlZ21lbnRHcm91cDtcbiAgICB9XG4gICAgcmV0dXJuIHNlZ21lbnRHcm91cDtcbiAgfVxuICBjb25zdCByb290Q2FuZGlkYXRlID0gY3JlYXRlU2VnbWVudEdyb3VwRnJvbVJvdXRlUmVjdXJzaXZlKHJvdXRlLnJvb3QpO1xuICBjb25zdCByb290U2VnbWVudEdyb3VwID0gY3JlYXRlUm9vdChyb290Q2FuZGlkYXRlKTtcbiAgcmV0dXJuIHRhcmdldEdyb3VwID8/IHJvb3RTZWdtZW50R3JvdXA7XG59XG5mdW5jdGlvbiBjcmVhdGVVcmxUcmVlRnJvbVNlZ21lbnRHcm91cChyZWxhdGl2ZVRvLCBjb21tYW5kcywgcXVlcnlQYXJhbXMsIGZyYWdtZW50LCB1cmxTZXJpYWxpemVyKSB7XG4gIGxldCByb290ID0gcmVsYXRpdmVUbztcbiAgd2hpbGUgKHJvb3QucGFyZW50KSB7XG4gICAgcm9vdCA9IHJvb3QucGFyZW50O1xuICB9XG4gIGlmIChjb21tYW5kcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gdHJlZShyb290LCByb290LCByb290LCBxdWVyeVBhcmFtcywgZnJhZ21lbnQsIHVybFNlcmlhbGl6ZXIpO1xuICB9XG4gIGNvbnN0IG5hdiA9IGNvbXB1dGVOYXZpZ2F0aW9uKGNvbW1hbmRzKTtcbiAgaWYgKG5hdi50b1Jvb3QoKSkge1xuICAgIHJldHVybiB0cmVlKHJvb3QsIHJvb3QsIG5ldyBVcmxTZWdtZW50R3JvdXAoW10sIHt9KSwgcXVlcnlQYXJhbXMsIGZyYWdtZW50LCB1cmxTZXJpYWxpemVyKTtcbiAgfVxuICBjb25zdCBwb3NpdGlvbiA9IGZpbmRTdGFydGluZ1Bvc2l0aW9uRm9yVGFyZ2V0R3JvdXAobmF2LCByb290LCByZWxhdGl2ZVRvKTtcbiAgY29uc3QgbmV3U2VnbWVudEdyb3VwID0gcG9zaXRpb24ucHJvY2Vzc0NoaWxkcmVuID8gdXBkYXRlU2VnbWVudEdyb3VwQ2hpbGRyZW4ocG9zaXRpb24uc2VnbWVudEdyb3VwLCBwb3NpdGlvbi5pbmRleCwgbmF2LmNvbW1hbmRzKSA6IHVwZGF0ZVNlZ21lbnRHcm91cChwb3NpdGlvbi5zZWdtZW50R3JvdXAsIHBvc2l0aW9uLmluZGV4LCBuYXYuY29tbWFuZHMpO1xuICByZXR1cm4gdHJlZShyb290LCBwb3NpdGlvbi5zZWdtZW50R3JvdXAsIG5ld1NlZ21lbnRHcm91cCwgcXVlcnlQYXJhbXMsIGZyYWdtZW50LCB1cmxTZXJpYWxpemVyKTtcbn1cbmZ1bmN0aW9uIGlzTWF0cml4UGFyYW1zKGNvbW1hbmQpIHtcbiAgcmV0dXJuIHR5cGVvZiBjb21tYW5kID09PSAnb2JqZWN0JyAmJiBjb21tYW5kICE9IG51bGwgJiYgIWNvbW1hbmQub3V0bGV0cyAmJiAhY29tbWFuZC5zZWdtZW50UGF0aDtcbn1cbmZ1bmN0aW9uIGlzQ29tbWFuZFdpdGhPdXRsZXRzKGNvbW1hbmQpIHtcbiAgcmV0dXJuIHR5cGVvZiBjb21tYW5kID09PSAnb2JqZWN0JyAmJiBjb21tYW5kICE9IG51bGwgJiYgY29tbWFuZC5vdXRsZXRzO1xufVxuZnVuY3Rpb24gbm9ybWFsaXplUXVlcnlQYXJhbXMoaywgdiwgdXJsU2VyaWFsaXplcikge1xuICBrIHx8PSAnybUnO1xuICBjb25zdCB0cmVlID0gbmV3IFVybFRyZWUoKTtcbiAgdHJlZS5xdWVyeVBhcmFtcyA9IHtcbiAgICBba106IHZcbiAgfTtcbiAgcmV0dXJuIHVybFNlcmlhbGl6ZXIucGFyc2UodXJsU2VyaWFsaXplci5zZXJpYWxpemUodHJlZSkpLnF1ZXJ5UGFyYW1zW2tdO1xufVxuZnVuY3Rpb24gdHJlZShvbGRSb290LCBvbGRTZWdtZW50R3JvdXAsIG5ld1NlZ21lbnRHcm91cCwgcXVlcnlQYXJhbXMsIGZyYWdtZW50LCB1cmxTZXJpYWxpemVyKSB7XG4gIGNvbnN0IHFwID0ge307XG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHF1ZXJ5UGFyYW1zID8/IHt9KSkge1xuICAgIHFwW2tleV0gPSBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlLm1hcCh2ID0+IG5vcm1hbGl6ZVF1ZXJ5UGFyYW1zKGtleSwgdiwgdXJsU2VyaWFsaXplcikpIDogbm9ybWFsaXplUXVlcnlQYXJhbXMoa2V5LCB2YWx1ZSwgdXJsU2VyaWFsaXplcik7XG4gIH1cbiAgbGV0IHJvb3RDYW5kaWRhdGU7XG4gIGlmIChvbGRSb290ID09PSBvbGRTZWdtZW50R3JvdXApIHtcbiAgICByb290Q2FuZGlkYXRlID0gbmV3U2VnbWVudEdyb3VwO1xuICB9IGVsc2Uge1xuICAgIHJvb3RDYW5kaWRhdGUgPSByZXBsYWNlU2VnbWVudChvbGRSb290LCBvbGRTZWdtZW50R3JvdXAsIG5ld1NlZ21lbnRHcm91cCk7XG4gIH1cbiAgY29uc3QgbmV3Um9vdCA9IGNyZWF0ZVJvb3Qoc3F1YXNoU2VnbWVudEdyb3VwKHJvb3RDYW5kaWRhdGUpKTtcbiAgcmV0dXJuIG5ldyBVcmxUcmVlKG5ld1Jvb3QsIHFwLCBmcmFnbWVudCk7XG59XG5mdW5jdGlvbiByZXBsYWNlU2VnbWVudChjdXJyZW50LCBvbGRTZWdtZW50LCBuZXdTZWdtZW50KSB7XG4gIGNvbnN0IGNoaWxkcmVuID0ge307XG4gIE9iamVjdC5lbnRyaWVzKGN1cnJlbnQuY2hpbGRyZW4pLmZvckVhY2goKFtvdXRsZXROYW1lLCBjXSkgPT4ge1xuICAgIGlmIChjID09PSBvbGRTZWdtZW50KSB7XG4gICAgICBjaGlsZHJlbltvdXRsZXROYW1lXSA9IG5ld1NlZ21lbnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNoaWxkcmVuW291dGxldE5hbWVdID0gcmVwbGFjZVNlZ21lbnQoYywgb2xkU2VnbWVudCwgbmV3U2VnbWVudCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIG5ldyBVcmxTZWdtZW50R3JvdXAoY3VycmVudC5zZWdtZW50cywgY2hpbGRyZW4pO1xufVxuY2xhc3MgTmF2aWdhdGlvbiB7XG4gIGlzQWJzb2x1dGU7XG4gIG51bWJlck9mRG91YmxlRG90cztcbiAgY29tbWFuZHM7XG4gIGNvbnN0cnVjdG9yKGlzQWJzb2x1dGUsIG51bWJlck9mRG91YmxlRG90cywgY29tbWFuZHMpIHtcbiAgICB0aGlzLmlzQWJzb2x1dGUgPSBpc0Fic29sdXRlO1xuICAgIHRoaXMubnVtYmVyT2ZEb3VibGVEb3RzID0gbnVtYmVyT2ZEb3VibGVEb3RzO1xuICAgIHRoaXMuY29tbWFuZHMgPSBjb21tYW5kcztcbiAgICBpZiAoaXNBYnNvbHV0ZSAmJiBjb21tYW5kcy5sZW5ndGggPiAwICYmIGlzTWF0cml4UGFyYW1zKGNvbW1hbmRzWzBdKSkge1xuICAgICAgdGhyb3cgbmV3IF9SdW50aW1lRXJyb3IoNDAwMywgKHR5cGVvZiBuZ0Rldk1vZGUgPT09ICd1bmRlZmluZWQnIHx8IG5nRGV2TW9kZSkgJiYgJ1Jvb3Qgc2VnbWVudCBjYW5ub3QgaGF2ZSBtYXRyaXggcGFyYW1ldGVycycpO1xuICAgIH1cbiAgICBjb25zdCBjbWRXaXRoT3V0bGV0ID0gY29tbWFuZHMuZmluZChpc0NvbW1hbmRXaXRoT3V0bGV0cyk7XG4gICAgaWYgKGNtZFdpdGhPdXRsZXQgJiYgY21kV2l0aE91dGxldCAhPT0gbGFzdChjb21tYW5kcykpIHtcbiAgICAgIHRocm93IG5ldyBfUnVudGltZUVycm9yKDQwMDQsICh0eXBlb2YgbmdEZXZNb2RlID09PSAndW5kZWZpbmVkJyB8fCBuZ0Rldk1vZGUpICYmICd7b3V0bGV0czp7fX0gaGFzIHRvIGJlIHRoZSBsYXN0IGNvbW1hbmQnKTtcbiAgICB9XG4gIH1cbiAgdG9Sb290KCkge1xuICAgIHJldHVybiB0aGlzLmlzQWJzb2x1dGUgJiYgdGhpcy5jb21tYW5kcy5sZW5ndGggPT09IDEgJiYgdGhpcy5jb21tYW5kc1swXSA9PSAnLyc7XG4gIH1cbn1cbmZ1bmN0aW9uIGNvbXB1dGVOYXZpZ2F0aW9uKGNvbW1hbmRzKSB7XG4gIGlmICh0eXBlb2YgY29tbWFuZHNbMF0gPT09ICdzdHJpbmcnICYmIGNvbW1hbmRzLmxlbmd0aCA9PT0gMSAmJiBjb21tYW5kc1swXSA9PT0gJy8nKSB7XG4gICAgcmV0dXJuIG5ldyBOYXZpZ2F0aW9uKHRydWUsIDAsIGNvbW1hbmRzKTtcbiAgfVxuICBsZXQgbnVtYmVyT2ZEb3VibGVEb3RzID0gMDtcbiAgbGV0IGlzQWJzb2x1dGUgPSBmYWxzZTtcbiAgY29uc3QgcmVzID0gY29tbWFuZHMucmVkdWNlKChyZXMsIGNtZCwgY21kSWR4KSA9PiB7XG4gICAgaWYgKHR5cGVvZiBjbWQgPT09ICdvYmplY3QnICYmIGNtZCAhPSBudWxsKSB7XG4gICAgICBpZiAoY21kLm91dGxldHMpIHtcbiAgICAgICAgY29uc3Qgb3V0bGV0cyA9IHt9O1xuICAgICAgICBPYmplY3QuZW50cmllcyhjbWQub3V0bGV0cykuZm9yRWFjaCgoW25hbWUsIGNvbW1hbmRzXSkgPT4ge1xuICAgICAgICAgIG91dGxldHNbbmFtZV0gPSB0eXBlb2YgY29tbWFuZHMgPT09ICdzdHJpbmcnID8gY29tbWFuZHMuc3BsaXQoJy8nKSA6IGNvbW1hbmRzO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIFsuLi5yZXMsIHtcbiAgICAgICAgICBvdXRsZXRzXG4gICAgICAgIH1dO1xuICAgICAgfVxuICAgICAgaWYgKGNtZC5zZWdtZW50UGF0aCkge1xuICAgICAgICByZXR1cm4gWy4uLnJlcywgY21kLnNlZ21lbnRQYXRoXTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCEodHlwZW9mIGNtZCA9PT0gJ3N0cmluZycpKSB7XG4gICAgICByZXR1cm4gWy4uLnJlcywgY21kXTtcbiAgICB9XG4gICAgaWYgKGNtZElkeCA9PT0gMCkge1xuICAgICAgY21kLnNwbGl0KCcvJykuZm9yRWFjaCgodXJsUGFydCwgcGFydEluZGV4KSA9PiB7XG4gICAgICAgIGlmIChwYXJ0SW5kZXggPT0gMCAmJiB1cmxQYXJ0ID09PSAnLicpIDtlbHNlIGlmIChwYXJ0SW5kZXggPT0gMCAmJiB1cmxQYXJ0ID09PSAnJykge1xuICAgICAgICAgIGlzQWJzb2x1dGUgPSB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKHVybFBhcnQgPT09ICcuLicpIHtcbiAgICAgICAgICBudW1iZXJPZkRvdWJsZURvdHMrKztcbiAgICAgICAgfSBlbHNlIGlmICh1cmxQYXJ0ICE9ICcnKSB7XG4gICAgICAgICAgcmVzLnB1c2godXJsUGFydCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG4gICAgcmV0dXJuIFsuLi5yZXMsIGNtZF07XG4gIH0sIFtdKTtcbiAgcmV0dXJuIG5ldyBOYXZpZ2F0aW9uKGlzQWJzb2x1dGUsIG51bWJlck9mRG91YmxlRG90cywgcmVzKTtcbn1cbmNsYXNzIFBvc2l0aW9uIHtcbiAgc2VnbWVudEdyb3VwO1xuICBwcm9jZXNzQ2hpbGRyZW47XG4gIGluZGV4O1xuICBjb25zdHJ1Y3RvcihzZWdtZW50R3JvdXAsIHByb2Nlc3NDaGlsZHJlbiwgaW5kZXgpIHtcbiAgICB0aGlzLnNlZ21lbnRHcm91cCA9IHNlZ21lbnRHcm91cDtcbiAgICB0aGlzLnByb2Nlc3NDaGlsZHJlbiA9IHByb2Nlc3NDaGlsZHJlbjtcbiAgICB0aGlzLmluZGV4ID0gaW5kZXg7XG4gIH1cbn1cbmZ1bmN0aW9uIGZpbmRTdGFydGluZ1Bvc2l0aW9uRm9yVGFyZ2V0R3JvdXAobmF2LCByb290LCB0YXJnZXQpIHtcbiAgaWYgKG5hdi5pc0Fic29sdXRlKSB7XG4gICAgcmV0dXJuIG5ldyBQb3NpdGlvbihyb290LCB0cnVlLCAwKTtcbiAgfVxuICBpZiAoIXRhcmdldCkge1xuICAgIHJldHVybiBuZXcgUG9zaXRpb24ocm9vdCwgZmFsc2UsIE5hTik7XG4gIH1cbiAgaWYgKHRhcmdldC5wYXJlbnQgPT09IG51bGwpIHtcbiAgICByZXR1cm4gbmV3IFBvc2l0aW9uKHRhcmdldCwgdHJ1ZSwgMCk7XG4gIH1cbiAgY29uc3QgbW9kaWZpZXIgPSBpc01hdHJpeFBhcmFtcyhuYXYuY29tbWFuZHNbMF0pID8gMCA6IDE7XG4gIGNvbnN0IGluZGV4ID0gdGFyZ2V0LnNlZ21lbnRzLmxlbmd0aCAtIDEgKyBtb2RpZmllcjtcbiAgcmV0dXJuIGNyZWF0ZVBvc2l0aW9uQXBwbHlpbmdEb3VibGVEb3RzKHRhcmdldCwgaW5kZXgsIG5hdi5udW1iZXJPZkRvdWJsZURvdHMpO1xufVxuZnVuY3Rpb24gY3JlYXRlUG9zaXRpb25BcHBseWluZ0RvdWJsZURvdHMoZ3JvdXAsIGluZGV4LCBudW1iZXJPZkRvdWJsZURvdHMpIHtcbiAgbGV0IGcgPSBncm91cDtcbiAgbGV0IGNpID0gaW5kZXg7XG4gIGxldCBkZCA9IG51bWJlck9mRG91YmxlRG90cztcbiAgd2hpbGUgKGRkID4gY2kpIHtcbiAgICBkZCAtPSBjaTtcbiAgICBnID0gZy5wYXJlbnQ7XG4gICAgaWYgKCFnKSB7XG4gICAgICB0aHJvdyBuZXcgX1J1bnRpbWVFcnJvcig0MDA1LCAodHlwZW9mIG5nRGV2TW9kZSA9PT0gJ3VuZGVmaW5lZCcgfHwgbmdEZXZNb2RlKSAmJiBcIkludmFsaWQgbnVtYmVyIG9mICcuLi8nXCIpO1xuICAgIH1cbiAgICBjaSA9IGcuc2VnbWVudHMubGVuZ3RoO1xuICB9XG4gIHJldHVybiBuZXcgUG9zaXRpb24oZywgZmFsc2UsIGNpIC0gZGQpO1xufVxuZnVuY3Rpb24gZ2V0T3V0bGV0cyhjb21tYW5kcykge1xuICBpZiAoaXNDb21tYW5kV2l0aE91dGxldHMoY29tbWFuZHNbMF0pKSB7XG4gICAgcmV0dXJuIGNvbW1hbmRzWzBdLm91dGxldHM7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBbUFJJTUFSWV9PVVRMRVRdOiBjb21tYW5kc1xuICB9O1xufVxuZnVuY3Rpb24gdXBkYXRlU2VnbWVudEdyb3VwKHNlZ21lbnRHcm91cCwgc3RhcnRJbmRleCwgY29tbWFuZHMpIHtcbiAgc2VnbWVudEdyb3VwID8/PSBuZXcgVXJsU2VnbWVudEdyb3VwKFtdLCB7fSk7XG4gIGlmIChzZWdtZW50R3JvdXAuc2VnbWVudHMubGVuZ3RoID09PSAwICYmIHNlZ21lbnRHcm91cC5oYXNDaGlsZHJlbigpKSB7XG4gICAgcmV0dXJuIHVwZGF0ZVNlZ21lbnRHcm91cENoaWxkcmVuKHNlZ21lbnRHcm91cCwgc3RhcnRJbmRleCwgY29tbWFuZHMpO1xuICB9XG4gIGNvbnN0IG0gPSBwcmVmaXhlZFdpdGgoc2VnbWVudEdyb3VwLCBzdGFydEluZGV4LCBjb21tYW5kcyk7XG4gIGNvbnN0IHNsaWNlZENvbW1hbmRzID0gY29tbWFuZHMuc2xpY2UobS5jb21tYW5kSW5kZXgpO1xuICBpZiAobS5tYXRjaCAmJiBtLnBhdGhJbmRleCA8IHNlZ21lbnRHcm91cC5zZWdtZW50cy5sZW5ndGgpIHtcbiAgICBjb25zdCBnID0gbmV3IFVybFNlZ21lbnRHcm91cChzZWdtZW50R3JvdXAuc2VnbWVudHMuc2xpY2UoMCwgbS5wYXRoSW5kZXgpLCB7fSk7XG4gICAgZy5jaGlsZHJlbltQUklNQVJZX09VVExFVF0gPSBuZXcgVXJsU2VnbWVudEdyb3VwKHNlZ21lbnRHcm91cC5zZWdtZW50cy5zbGljZShtLnBhdGhJbmRleCksIHNlZ21lbnRHcm91cC5jaGlsZHJlbik7XG4gICAgcmV0dXJuIHVwZGF0ZVNlZ21lbnRHcm91cENoaWxkcmVuKGcsIDAsIHNsaWNlZENvbW1hbmRzKTtcbiAgfSBlbHNlIGlmIChtLm1hdGNoICYmIHNsaWNlZENvbW1hbmRzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBuZXcgVXJsU2VnbWVudEdyb3VwKHNlZ21lbnRHcm91cC5zZWdtZW50cywge30pO1xuICB9IGVsc2UgaWYgKG0ubWF0Y2ggJiYgIXNlZ21lbnRHcm91cC5oYXNDaGlsZHJlbigpKSB7XG4gICAgcmV0dXJuIGNyZWF0ZU5ld1NlZ21lbnRHcm91cChzZWdtZW50R3JvdXAsIHN0YXJ0SW5kZXgsIGNvbW1hbmRzKTtcbiAgfSBlbHNlIGlmIChtLm1hdGNoKSB7XG4gICAgcmV0dXJuIHVwZGF0ZVNlZ21lbnRHcm91cENoaWxkcmVuKHNlZ21lbnRHcm91cCwgMCwgc2xpY2VkQ29tbWFuZHMpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBjcmVhdGVOZXdTZWdtZW50R3JvdXAoc2VnbWVudEdyb3VwLCBzdGFydEluZGV4LCBjb21tYW5kcyk7XG4gIH1cbn1cbmZ1bmN0aW9uIHVwZGF0ZVNlZ21lbnRHcm91cENoaWxkcmVuKHNlZ21lbnRHcm91cCwgc3RhcnRJbmRleCwgY29tbWFuZHMpIHtcbiAgaWYgKGNvbW1hbmRzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBuZXcgVXJsU2VnbWVudEdyb3VwKHNlZ21lbnRHcm91cC5zZWdtZW50cywge30pO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IG91dGxldHMgPSBnZXRPdXRsZXRzKGNvbW1hbmRzKTtcbiAgICBjb25zdCBjaGlsZHJlbiA9IHt9O1xuICAgIGlmIChPYmplY3Qua2V5cyhvdXRsZXRzKS5zb21lKG8gPT4gbyAhPT0gUFJJTUFSWV9PVVRMRVQpICYmIHNlZ21lbnRHcm91cC5jaGlsZHJlbltQUklNQVJZX09VVExFVF0gJiYgc2VnbWVudEdyb3VwLm51bWJlck9mQ2hpbGRyZW4gPT09IDEgJiYgc2VnbWVudEdyb3VwLmNoaWxkcmVuW1BSSU1BUllfT1VUTEVUXS5zZWdtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgIGNvbnN0IGNoaWxkcmVuT2ZFbXB0eUNoaWxkID0gdXBkYXRlU2VnbWVudEdyb3VwQ2hpbGRyZW4oc2VnbWVudEdyb3VwLmNoaWxkcmVuW1BSSU1BUllfT1VUTEVUXSwgc3RhcnRJbmRleCwgY29tbWFuZHMpO1xuICAgICAgcmV0dXJuIG5ldyBVcmxTZWdtZW50R3JvdXAoc2VnbWVudEdyb3VwLnNlZ21lbnRzLCBjaGlsZHJlbk9mRW1wdHlDaGlsZC5jaGlsZHJlbik7XG4gICAgfVxuICAgIE9iamVjdC5lbnRyaWVzKG91dGxldHMpLmZvckVhY2goKFtvdXRsZXQsIGNvbW1hbmRzXSkgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBjb21tYW5kcyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY29tbWFuZHMgPSBbY29tbWFuZHNdO1xuICAgICAgfVxuICAgICAgaWYgKGNvbW1hbmRzICE9PSBudWxsKSB7XG4gICAgICAgIGNoaWxkcmVuW291dGxldF0gPSB1cGRhdGVTZWdtZW50R3JvdXAoc2VnbWVudEdyb3VwLmNoaWxkcmVuW291dGxldF0sIHN0YXJ0SW5kZXgsIGNvbW1hbmRzKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBPYmplY3QuZW50cmllcyhzZWdtZW50R3JvdXAuY2hpbGRyZW4pLmZvckVhY2goKFtjaGlsZE91dGxldCwgY2hpbGRdKSA9PiB7XG4gICAgICBpZiAob3V0bGV0c1tjaGlsZE91dGxldF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjaGlsZHJlbltjaGlsZE91dGxldF0gPSBjaGlsZDtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gbmV3IFVybFNlZ21lbnRHcm91cChzZWdtZW50R3JvdXAuc2VnbWVudHMsIGNoaWxkcmVuKTtcbiAgfVxufVxuZnVuY3Rpb24gcHJlZml4ZWRXaXRoKHNlZ21lbnRHcm91cCwgc3RhcnRJbmRleCwgY29tbWFuZHMpIHtcbiAgbGV0IGN1cnJlbnRDb21tYW5kSW5kZXggPSAwO1xuICBsZXQgY3VycmVudFBhdGhJbmRleCA9IHN0YXJ0SW5kZXg7XG4gIGNvbnN0IG5vTWF0Y2ggPSB7XG4gICAgbWF0Y2g6IGZhbHNlLFxuICAgIHBhdGhJbmRleDogMCxcbiAgICBjb21tYW5kSW5kZXg6IDBcbiAgfTtcbiAgd2hpbGUgKGN1cnJlbnRQYXRoSW5kZXggPCBzZWdtZW50R3JvdXAuc2VnbWVudHMubGVuZ3RoKSB7XG4gICAgaWYgKGN1cnJlbnRDb21tYW5kSW5kZXggPj0gY29tbWFuZHMubGVuZ3RoKSByZXR1cm4gbm9NYXRjaDtcbiAgICBjb25zdCBwYXRoID0gc2VnbWVudEdyb3VwLnNlZ21lbnRzW2N1cnJlbnRQYXRoSW5kZXhdO1xuICAgIGNvbnN0IGNvbW1hbmQgPSBjb21tYW5kc1tjdXJyZW50Q29tbWFuZEluZGV4XTtcbiAgICBpZiAoaXNDb21tYW5kV2l0aE91dGxldHMoY29tbWFuZCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjb25zdCBjdXJyID0gYCR7Y29tbWFuZH1gO1xuICAgIGNvbnN0IG5leHQgPSBjdXJyZW50Q29tbWFuZEluZGV4IDwgY29tbWFuZHMubGVuZ3RoIC0gMSA/IGNvbW1hbmRzW2N1cnJlbnRDb21tYW5kSW5kZXggKyAxXSA6IG51bGw7XG4gICAgaWYgKGN1cnJlbnRQYXRoSW5kZXggPiAwICYmIGN1cnIgPT09IHVuZGVmaW5lZCkgYnJlYWs7XG4gICAgaWYgKGN1cnIgJiYgbmV4dCAmJiB0eXBlb2YgbmV4dCA9PT0gJ29iamVjdCcgJiYgbmV4dC5vdXRsZXRzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICghY29tcGFyZShjdXJyLCBuZXh0LCBwYXRoKSkgcmV0dXJuIG5vTWF0Y2g7XG4gICAgICBjdXJyZW50Q29tbWFuZEluZGV4ICs9IDI7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghY29tcGFyZShjdXJyLCB7fSwgcGF0aCkpIHJldHVybiBub01hdGNoO1xuICAgICAgY3VycmVudENvbW1hbmRJbmRleCsrO1xuICAgIH1cbiAgICBjdXJyZW50UGF0aEluZGV4Kys7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBtYXRjaDogdHJ1ZSxcbiAgICBwYXRoSW5kZXg6IGN1cnJlbnRQYXRoSW5kZXgsXG4gICAgY29tbWFuZEluZGV4OiBjdXJyZW50Q29tbWFuZEluZGV4XG4gIH07XG59XG5mdW5jdGlvbiBjcmVhdGVOZXdTZWdtZW50R3JvdXAoc2VnbWVudEdyb3VwLCBzdGFydEluZGV4LCBjb21tYW5kcykge1xuICBjb25zdCBwYXRocyA9IHNlZ21lbnRHcm91cC5zZWdtZW50cy5zbGljZSgwLCBzdGFydEluZGV4KTtcbiAgbGV0IGkgPSAwO1xuICB3aGlsZSAoaSA8IGNvbW1hbmRzLmxlbmd0aCkge1xuICAgIGNvbnN0IGNvbW1hbmQgPSBjb21tYW5kc1tpXTtcbiAgICBpZiAoaXNDb21tYW5kV2l0aE91dGxldHMoY29tbWFuZCkpIHtcbiAgICAgIGNvbnN0IGNoaWxkcmVuID0gY3JlYXRlTmV3U2VnbWVudENoaWxkcmVuKGNvbW1hbmQub3V0bGV0cyk7XG4gICAgICByZXR1cm4gbmV3IFVybFNlZ21lbnRHcm91cChwYXRocywgY2hpbGRyZW4pO1xuICAgIH1cbiAgICBpZiAoaSA9PT0gMCAmJiBpc01hdHJpeFBhcmFtcyhjb21tYW5kc1swXSkpIHtcbiAgICAgIGNvbnN0IHAgPSBzZWdtZW50R3JvdXAuc2VnbWVudHNbc3RhcnRJbmRleF07XG4gICAgICBwYXRocy5wdXNoKG5ldyBVcmxTZWdtZW50KHAucGF0aCwgc3RyaW5naWZ5KGNvbW1hbmRzWzBdKSkpO1xuICAgICAgaSsrO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IGN1cnIgPSBpc0NvbW1hbmRXaXRoT3V0bGV0cyhjb21tYW5kKSA/IGNvbW1hbmQub3V0bGV0c1tQUklNQVJZX09VVExFVF0gOiBgJHtjb21tYW5kfWA7XG4gICAgY29uc3QgbmV4dCA9IGkgPCBjb21tYW5kcy5sZW5ndGggLSAxID8gY29tbWFuZHNbaSArIDFdIDogbnVsbDtcbiAgICBpZiAoY3VyciAmJiBuZXh0ICYmIGlzTWF0cml4UGFyYW1zKG5leHQpKSB7XG4gICAgICBwYXRocy5wdXNoKG5ldyBVcmxTZWdtZW50KGN1cnIsIHN0cmluZ2lmeShuZXh0KSkpO1xuICAgICAgaSArPSAyO1xuICAgIH0gZWxzZSB7XG4gICAgICBwYXRocy5wdXNoKG5ldyBVcmxTZWdtZW50KGN1cnIsIHt9KSk7XG4gICAgICBpKys7XG4gICAgfVxuICB9XG4gIHJldHVybiBuZXcgVXJsU2VnbWVudEdyb3VwKHBhdGhzLCB7fSk7XG59XG5mdW5jdGlvbiBjcmVhdGVOZXdTZWdtZW50Q2hpbGRyZW4ob3V0bGV0cykge1xuICBjb25zdCBjaGlsZHJlbiA9IHt9O1xuICBPYmplY3QuZW50cmllcyhvdXRsZXRzKS5mb3JFYWNoKChbb3V0bGV0LCBjb21tYW5kc10pID0+IHtcbiAgICBpZiAodHlwZW9mIGNvbW1hbmRzID09PSAnc3RyaW5nJykge1xuICAgICAgY29tbWFuZHMgPSBbY29tbWFuZHNdO1xuICAgIH1cbiAgICBpZiAoY29tbWFuZHMgIT09IG51bGwpIHtcbiAgICAgIGNoaWxkcmVuW291dGxldF0gPSBjcmVhdGVOZXdTZWdtZW50R3JvdXAobmV3IFVybFNlZ21lbnRHcm91cChbXSwge30pLCAwLCBjb21tYW5kcyk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGNoaWxkcmVuO1xufVxuZnVuY3Rpb24gc3RyaW5naWZ5KHBhcmFtcykge1xuICBjb25zdCByZXMgPSB7fTtcbiAgT2JqZWN0LmVudHJpZXMocGFyYW1zKS5mb3JFYWNoKChbaywgdl0pID0+IHJlc1trXSA9IGAke3Z9YCk7XG4gIHJldHVybiByZXM7XG59XG5mdW5jdGlvbiBjb21wYXJlKHBhdGgsIHBhcmFtcywgc2VnbWVudCkge1xuICByZXR1cm4gcGF0aCA9PSBzZWdtZW50LnBhdGggJiYgc2hhbGxvd0VxdWFsKHBhcmFtcywgc2VnbWVudC5wYXJhbWV0ZXJzKTtcbn1cbmNvbnN0IElNUEVSQVRJVkVfTkFWSUdBVElPTiA9ICdpbXBlcmF0aXZlJztcbnZhciBFdmVudFR5cGUgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKEV2ZW50VHlwZSkge1xuICBFdmVudFR5cGVbRXZlbnRUeXBlW1wiTmF2aWdhdGlvblN0YXJ0XCJdID0gMF0gPSBcIk5hdmlnYXRpb25TdGFydFwiO1xuICBFdmVudFR5cGVbRXZlbnRUeXBlW1wiTmF2aWdhdGlvbkVuZFwiXSA9IDFdID0gXCJOYXZpZ2F0aW9uRW5kXCI7XG4gIEV2ZW50VHlwZVtFdmVudFR5cGVbXCJOYXZpZ2F0aW9uQ2FuY2VsXCJdID0gMl0gPSBcIk5hdmlnYXRpb25DYW5jZWxcIjtcbiAgRXZlbnRUeXBlW0V2ZW50VHlwZVtcIk5hdmlnYXRpb25FcnJvclwiXSA9IDNdID0gXCJOYXZpZ2F0aW9uRXJyb3JcIjtcbiAgRXZlbnRUeXBlW0V2ZW50VHlwZVtcIlJvdXRlc1JlY29nbml6ZWRcIl0gPSA0XSA9IFwiUm91dGVzUmVjb2duaXplZFwiO1xuICBFdmVudFR5cGVbRXZlbnRUeXBlW1wiUmVzb2x2ZVN0YXJ0XCJdID0gNV0gPSBcIlJlc29sdmVTdGFydFwiO1xuICBFdmVudFR5cGVbRXZlbnRUeXBlW1wiUmVzb2x2ZUVuZFwiXSA9IDZdID0gXCJSZXNvbHZlRW5kXCI7XG4gIEV2ZW50VHlwZVtFdmVudFR5cGVbXCJHdWFyZHNDaGVja1N0YXJ0XCJdID0gN10gPSBcIkd1YXJkc0NoZWNrU3RhcnRcIjtcbiAgRXZlbnRUeXBlW0V2ZW50VHlwZVtcIkd1YXJkc0NoZWNrRW5kXCJdID0gOF0gPSBcIkd1YXJkc0NoZWNrRW5kXCI7XG4gIEV2ZW50VHlwZVtFdmVudFR5cGVbXCJSb3V0ZUNvbmZpZ0xvYWRTdGFydFwiXSA9IDldID0gXCJSb3V0ZUNvbmZpZ0xvYWRTdGFydFwiO1xuICBFdmVudFR5cGVbRXZlbnRUeXBlW1wiUm91dGVDb25maWdMb2FkRW5kXCJdID0gMTBdID0gXCJSb3V0ZUNvbmZpZ0xvYWRFbmRcIjtcbiAgRXZlbnRUeXBlW0V2ZW50VHlwZVtcIkNoaWxkQWN0aXZhdGlvblN0YXJ0XCJdID0gMTFdID0gXCJDaGlsZEFjdGl2YXRpb25TdGFydFwiO1xuICBFdmVudFR5cGVbRXZlbnRUeXBlW1wiQ2hpbGRBY3RpdmF0aW9uRW5kXCJdID0gMTJdID0gXCJDaGlsZEFjdGl2YXRpb25FbmRcIjtcbiAgRXZlbnRUeXBlW0V2ZW50VHlwZVtcIkFjdGl2YXRpb25TdGFydFwiXSA9IDEzXSA9IFwiQWN0aXZhdGlvblN0YXJ0XCI7XG4gIEV2ZW50VHlwZVtFdmVudFR5cGVbXCJBY3RpdmF0aW9uRW5kXCJdID0gMTRdID0gXCJBY3RpdmF0aW9uRW5kXCI7XG4gIEV2ZW50VHlwZVtFdmVudFR5cGVbXCJTY3JvbGxcIl0gPSAxNV0gPSBcIlNjcm9sbFwiO1xuICBFdmVudFR5cGVbRXZlbnRUeXBlW1wiTmF2aWdhdGlvblNraXBwZWRcIl0gPSAxNl0gPSBcIk5hdmlnYXRpb25Ta2lwcGVkXCI7XG4gIHJldHVybiBFdmVudFR5cGU7XG59KEV2ZW50VHlwZSB8fCB7fSk7XG5jbGFzcyBSb3V0ZXJFdmVudCB7XG4gIGlkO1xuICB1cmw7XG4gIGNvbnN0cnVjdG9yKGlkLCB1cmwpIHtcbiAgICB0aGlzLmlkID0gaWQ7XG4gICAgdGhpcy51cmwgPSB1cmw7XG4gIH1cbn1cbmNsYXNzIE5hdmlnYXRpb25TdGFydCBleHRlbmRzIFJvdXRlckV2ZW50IHtcbiAgdHlwZSA9IEV2ZW50VHlwZS5OYXZpZ2F0aW9uU3RhcnQ7XG4gIG5hdmlnYXRpb25UcmlnZ2VyO1xuICByZXN0b3JlZFN0YXRlO1xuICBjb25zdHJ1Y3RvcihpZCwgdXJsLCBuYXZpZ2F0aW9uVHJpZ2dlciA9ICdpbXBlcmF0aXZlJywgcmVzdG9yZWRTdGF0ZSA9IG51bGwpIHtcbiAgICBzdXBlcihpZCwgdXJsKTtcbiAgICB0aGlzLm5hdmlnYXRpb25UcmlnZ2VyID0gbmF2aWdhdGlvblRyaWdnZXI7XG4gICAgdGhpcy5yZXN0b3JlZFN0YXRlID0gcmVzdG9yZWRTdGF0ZTtcbiAgfVxuICB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gYE5hdmlnYXRpb25TdGFydChpZDogJHt0aGlzLmlkfSwgdXJsOiAnJHt0aGlzLnVybH0nKWA7XG4gIH1cbn1cbmNsYXNzIE5hdmlnYXRpb25FbmQgZXh0ZW5kcyBSb3V0ZXJFdmVudCB7XG4gIHVybEFmdGVyUmVkaXJlY3RzO1xuICB0eXBlID0gRXZlbnRUeXBlLk5hdmlnYXRpb25FbmQ7XG4gIGNvbnN0cnVjdG9yKGlkLCB1cmwsIHVybEFmdGVyUmVkaXJlY3RzKSB7XG4gICAgc3VwZXIoaWQsIHVybCk7XG4gICAgdGhpcy51cmxBZnRlclJlZGlyZWN0cyA9IHVybEFmdGVyUmVkaXJlY3RzO1xuICB9XG4gIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiBgTmF2aWdhdGlvbkVuZChpZDogJHt0aGlzLmlkfSwgdXJsOiAnJHt0aGlzLnVybH0nLCB1cmxBZnRlclJlZGlyZWN0czogJyR7dGhpcy51cmxBZnRlclJlZGlyZWN0c30nKWA7XG4gIH1cbn1cbnZhciBOYXZpZ2F0aW9uQ2FuY2VsbGF0aW9uQ29kZSA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoTmF2aWdhdGlvbkNhbmNlbGxhdGlvbkNvZGUpIHtcbiAgTmF2aWdhdGlvbkNhbmNlbGxhdGlvbkNvZGVbTmF2aWdhdGlvbkNhbmNlbGxhdGlvbkNvZGVbXCJSZWRpcmVjdFwiXSA9IDBdID0gXCJSZWRpcmVjdFwiO1xuICBOYXZpZ2F0aW9uQ2FuY2VsbGF0aW9uQ29kZVtOYXZpZ2F0aW9uQ2FuY2VsbGF0aW9uQ29kZVtcIlN1cGVyc2VkZWRCeU5ld05hdmlnYXRpb25cIl0gPSAxXSA9IFwiU3VwZXJzZWRlZEJ5TmV3TmF2aWdhdGlvblwiO1xuICBOYXZpZ2F0aW9uQ2FuY2VsbGF0aW9uQ29kZVtOYXZpZ2F0aW9uQ2FuY2VsbGF0aW9uQ29kZVtcIk5vRGF0YUZyb21SZXNvbHZlclwiXSA9IDJdID0gXCJOb0RhdGFGcm9tUmVzb2x2ZXJcIjtcbiAgTmF2aWdhdGlvbkNhbmNlbGxhdGlvbkNvZGVbTmF2aWdhdGlvbkNhbmNlbGxhdGlvbkNvZGVbXCJHdWFyZFJlamVjdGVkXCJdID0gM10gPSBcIkd1YXJkUmVqZWN0ZWRcIjtcbiAgTmF2aWdhdGlvbkNhbmNlbGxhdGlvbkNvZGVbTmF2aWdhdGlvbkNhbmNlbGxhdGlvbkNvZGVbXCJBYm9ydGVkXCJdID0gNF0gPSBcIkFib3J0ZWRcIjtcbiAgcmV0dXJuIE5hdmlnYXRpb25DYW5jZWxsYXRpb25Db2RlO1xufShOYXZpZ2F0aW9uQ2FuY2VsbGF0aW9uQ29kZSB8fCB7fSk7XG52YXIgTmF2aWdhdGlvblNraXBwZWRDb2RlID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChOYXZpZ2F0aW9uU2tpcHBlZENvZGUpIHtcbiAgTmF2aWdhdGlvblNraXBwZWRDb2RlW05hdmlnYXRpb25Ta2lwcGVkQ29kZVtcIklnbm9yZWRTYW1lVXJsTmF2aWdhdGlvblwiXSA9IDBdID0gXCJJZ25vcmVkU2FtZVVybE5hdmlnYXRpb25cIjtcbiAgTmF2aWdhdGlvblNraXBwZWRDb2RlW05hdmlnYXRpb25Ta2lwcGVkQ29kZVtcIklnbm9yZWRCeVVybEhhbmRsaW5nU3RyYXRlZ3lcIl0gPSAxXSA9IFwiSWdub3JlZEJ5VXJsSGFuZGxpbmdTdHJhdGVneVwiO1xuICByZXR1cm4gTmF2aWdhdGlvblNraXBwZWRDb2RlO1xufShOYXZpZ2F0aW9uU2tpcHBlZENvZGUgfHwge30pO1xuY2xhc3MgTmF2aWdhdGlvbkNhbmNlbCBleHRlbmRzIFJvdXRlckV2ZW50IHtcbiAgcmVhc29uO1xuICBjb2RlO1xuICB0eXBlID0gRXZlbnRUeXBlLk5hdmlnYXRpb25DYW5jZWw7XG4gIGNvbnN0cnVjdG9yKGlkLCB1cmwsIHJlYXNvbiwgY29kZSkge1xuICAgIHN1cGVyKGlkLCB1cmwpO1xuICAgIHRoaXMucmVhc29uID0gcmVhc29uO1xuICAgIHRoaXMuY29kZSA9IGNvZGU7XG4gIH1cbiAgdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIGBOYXZpZ2F0aW9uQ2FuY2VsKGlkOiAke3RoaXMuaWR9LCB1cmw6ICcke3RoaXMudXJsfScpYDtcbiAgfVxufVxuZnVuY3Rpb24gaXNSZWRpcmVjdGluZ0V2ZW50KGV2ZW50KSB7XG4gIHJldHVybiBldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25DYW5jZWwgJiYgKGV2ZW50LmNvZGUgPT09IE5hdmlnYXRpb25DYW5jZWxsYXRpb25Db2RlLlJlZGlyZWN0IHx8IGV2ZW50LmNvZGUgPT09IE5hdmlnYXRpb25DYW5jZWxsYXRpb25Db2RlLlN1cGVyc2VkZWRCeU5ld05hdmlnYXRpb24pO1xufVxuY2xhc3MgTmF2aWdhdGlvblNraXBwZWQgZXh0ZW5kcyBSb3V0ZXJFdmVudCB7XG4gIHJlYXNvbjtcbiAgY29kZTtcbiAgdHlwZSA9IEV2ZW50VHlwZS5OYXZpZ2F0aW9uU2tpcHBlZDtcbiAgY29uc3RydWN0b3IoaWQsIHVybCwgcmVhc29uLCBjb2RlKSB7XG4gICAgc3VwZXIoaWQsIHVybCk7XG4gICAgdGhpcy5yZWFzb24gPSByZWFzb247XG4gICAgdGhpcy5jb2RlID0gY29kZTtcbiAgfVxufVxuY2xhc3MgTmF2aWdhdGlvbkVycm9yIGV4dGVuZHMgUm91dGVyRXZlbnQge1xuICBlcnJvcjtcbiAgdGFyZ2V0O1xuICB0eXBlID0gRXZlbnRUeXBlLk5hdmlnYXRpb25FcnJvcjtcbiAgY29uc3RydWN0b3IoaWQsIHVybCwgZXJyb3IsIHRhcmdldCkge1xuICAgIHN1cGVyKGlkLCB1cmwpO1xuICAgIHRoaXMuZXJyb3IgPSBlcnJvcjtcbiAgICB0aGlzLnRhcmdldCA9IHRhcmdldDtcbiAgfVxuICB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gYE5hdmlnYXRpb25FcnJvcihpZDogJHt0aGlzLmlkfSwgdXJsOiAnJHt0aGlzLnVybH0nLCBlcnJvcjogJHt0aGlzLmVycm9yfSlgO1xuICB9XG59XG5jbGFzcyBSb3V0ZXNSZWNvZ25pemVkIGV4dGVuZHMgUm91dGVyRXZlbnQge1xuICB1cmxBZnRlclJlZGlyZWN0cztcbiAgc3RhdGU7XG4gIHR5cGUgPSBFdmVudFR5cGUuUm91dGVzUmVjb2duaXplZDtcbiAgY29uc3RydWN0b3IoaWQsIHVybCwgdXJsQWZ0ZXJSZWRpcmVjdHMsIHN0YXRlKSB7XG4gICAgc3VwZXIoaWQsIHVybCk7XG4gICAgdGhpcy51cmxBZnRlclJlZGlyZWN0cyA9IHVybEFmdGVyUmVkaXJlY3RzO1xuICAgIHRoaXMuc3RhdGUgPSBzdGF0ZTtcbiAgfVxuICB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gYFJvdXRlc1JlY29nbml6ZWQoaWQ6ICR7dGhpcy5pZH0sIHVybDogJyR7dGhpcy51cmx9JywgdXJsQWZ0ZXJSZWRpcmVjdHM6ICcke3RoaXMudXJsQWZ0ZXJSZWRpcmVjdHN9Jywgc3RhdGU6ICR7dGhpcy5zdGF0ZX0pYDtcbiAgfVxufVxuY2xhc3MgR3VhcmRzQ2hlY2tTdGFydCBleHRlbmRzIFJvdXRlckV2ZW50IHtcbiAgdXJsQWZ0ZXJSZWRpcmVjdHM7XG4gIHN0YXRlO1xuICB0eXBlID0gRXZlbnRUeXBlLkd1YXJkc0NoZWNrU3RhcnQ7XG4gIGNvbnN0cnVjdG9yKGlkLCB1cmwsIHVybEFmdGVyUmVkaXJlY3RzLCBzdGF0ZSkge1xuICAgIHN1cGVyKGlkLCB1cmwpO1xuICAgIHRoaXMudXJsQWZ0ZXJSZWRpcmVjdHMgPSB1cmxBZnRlclJlZGlyZWN0cztcbiAgICB0aGlzLnN0YXRlID0gc3RhdGU7XG4gIH1cbiAgdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIGBHdWFyZHNDaGVja1N0YXJ0KGlkOiAke3RoaXMuaWR9LCB1cmw6ICcke3RoaXMudXJsfScsIHVybEFmdGVyUmVkaXJlY3RzOiAnJHt0aGlzLnVybEFmdGVyUmVkaXJlY3RzfScsIHN0YXRlOiAke3RoaXMuc3RhdGV9KWA7XG4gIH1cbn1cbmNsYXNzIEd1YXJkc0NoZWNrRW5kIGV4dGVuZHMgUm91dGVyRXZlbnQge1xuICB1cmxBZnRlclJlZGlyZWN0cztcbiAgc3RhdGU7XG4gIHNob3VsZEFjdGl2YXRlO1xuICB0eXBlID0gRXZlbnRUeXBlLkd1YXJkc0NoZWNrRW5kO1xuICBjb25zdHJ1Y3RvcihpZCwgdXJsLCB1cmxBZnRlclJlZGlyZWN0cywgc3RhdGUsIHNob3VsZEFjdGl2YXRlKSB7XG4gICAgc3VwZXIoaWQsIHVybCk7XG4gICAgdGhpcy51cmxBZnRlclJlZGlyZWN0cyA9IHVybEFmdGVyUmVkaXJlY3RzO1xuICAgIHRoaXMuc3RhdGUgPSBzdGF0ZTtcbiAgICB0aGlzLnNob3VsZEFjdGl2YXRlID0gc2hvdWxkQWN0aXZhdGU7XG4gIH1cbiAgdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIGBHdWFyZHNDaGVja0VuZChpZDogJHt0aGlzLmlkfSwgdXJsOiAnJHt0aGlzLnVybH0nLCB1cmxBZnRlclJlZGlyZWN0czogJyR7dGhpcy51cmxBZnRlclJlZGlyZWN0c30nLCBzdGF0ZTogJHt0aGlzLnN0YXRlfSwgc2hvdWxkQWN0aXZhdGU6ICR7dGhpcy5zaG91bGRBY3RpdmF0ZX0pYDtcbiAgfVxufVxuY2xhc3MgUmVzb2x2ZVN0YXJ0IGV4dGVuZHMgUm91dGVyRXZlbnQge1xuICB1cmxBZnRlclJlZGlyZWN0cztcbiAgc3RhdGU7XG4gIHR5cGUgPSBFdmVudFR5cGUuUmVzb2x2ZVN0YXJ0O1xuICBjb25zdHJ1Y3RvcihpZCwgdXJsLCB1cmxBZnRlclJlZGlyZWN0cywgc3RhdGUpIHtcbiAgICBzdXBlcihpZCwgdXJsKTtcbiAgICB0aGlzLnVybEFmdGVyUmVkaXJlY3RzID0gdXJsQWZ0ZXJSZWRpcmVjdHM7XG4gICAgdGhpcy5zdGF0ZSA9IHN0YXRlO1xuICB9XG4gIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiBgUmVzb2x2ZVN0YXJ0KGlkOiAke3RoaXMuaWR9LCB1cmw6ICcke3RoaXMudXJsfScsIHVybEFmdGVyUmVkaXJlY3RzOiAnJHt0aGlzLnVybEFmdGVyUmVkaXJlY3RzfScsIHN0YXRlOiAke3RoaXMuc3RhdGV9KWA7XG4gIH1cbn1cbmNsYXNzIFJlc29sdmVFbmQgZXh0ZW5kcyBSb3V0ZXJFdmVudCB7XG4gIHVybEFmdGVyUmVkaXJlY3RzO1xuICBzdGF0ZTtcbiAgdHlwZSA9IEV2ZW50VHlwZS5SZXNvbHZlRW5kO1xuICBjb25zdHJ1Y3RvcihpZCwgdXJsLCB1cmxBZnRlclJlZGlyZWN0cywgc3RhdGUpIHtcbiAgICBzdXBlcihpZCwgdXJsKTtcbiAgICB0aGlzLnVybEFmdGVyUmVkaXJlY3RzID0gdXJsQWZ0ZXJSZWRpcmVjdHM7XG4gICAgdGhpcy5zdGF0ZSA9IHN0YXRlO1xuICB9XG4gIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiBgUmVzb2x2ZUVuZChpZDogJHt0aGlzLmlkfSwgdXJsOiAnJHt0aGlzLnVybH0nLCB1cmxBZnRlclJlZGlyZWN0czogJyR7dGhpcy51cmxBZnRlclJlZGlyZWN0c30nLCBzdGF0ZTogJHt0aGlzLnN0YXRlfSlgO1xuICB9XG59XG5jbGFzcyBSb3V0ZUNvbmZpZ0xvYWRTdGFydCB7XG4gIHJvdXRlO1xuICB0eXBlID0gRXZlbnRUeXBlLlJvdXRlQ29uZmlnTG9hZFN0YXJ0O1xuICBjb25zdHJ1Y3Rvcihyb3V0ZSkge1xuICAgIHRoaXMucm91dGUgPSByb3V0ZTtcbiAgfVxuICB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gYFJvdXRlQ29uZmlnTG9hZFN0YXJ0KHBhdGg6ICR7dGhpcy5yb3V0ZS5wYXRofSlgO1xuICB9XG59XG5jbGFzcyBSb3V0ZUNvbmZpZ0xvYWRFbmQge1xuICByb3V0ZTtcbiAgdHlwZSA9IEV2ZW50VHlwZS5Sb3V0ZUNvbmZpZ0xvYWRFbmQ7XG4gIGNvbnN0cnVjdG9yKHJvdXRlKSB7XG4gICAgdGhpcy5yb3V0ZSA9IHJvdXRlO1xuICB9XG4gIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiBgUm91dGVDb25maWdMb2FkRW5kKHBhdGg6ICR7dGhpcy5yb3V0ZS5wYXRofSlgO1xuICB9XG59XG5jbGFzcyBDaGlsZEFjdGl2YXRpb25TdGFydCB7XG4gIHNuYXBzaG90O1xuICB0eXBlID0gRXZlbnRUeXBlLkNoaWxkQWN0aXZhdGlvblN0YXJ0O1xuICBjb25zdHJ1Y3RvcihzbmFwc2hvdCkge1xuICAgIHRoaXMuc25hcHNob3QgPSBzbmFwc2hvdDtcbiAgfVxuICB0b1N0cmluZygpIHtcbiAgICBjb25zdCBwYXRoID0gdGhpcy5zbmFwc2hvdC5yb3V0ZUNvbmZpZyAmJiB0aGlzLnNuYXBzaG90LnJvdXRlQ29uZmlnLnBhdGggfHwgJyc7XG4gICAgcmV0dXJuIGBDaGlsZEFjdGl2YXRpb25TdGFydChwYXRoOiAnJHtwYXRofScpYDtcbiAgfVxufVxuY2xhc3MgQ2hpbGRBY3RpdmF0aW9uRW5kIHtcbiAgc25hcHNob3Q7XG4gIHR5cGUgPSBFdmVudFR5cGUuQ2hpbGRBY3RpdmF0aW9uRW5kO1xuICBjb25zdHJ1Y3RvcihzbmFwc2hvdCkge1xuICAgIHRoaXMuc25hcHNob3QgPSBzbmFwc2hvdDtcbiAgfVxuICB0b1N0cmluZygpIHtcbiAgICBjb25zdCBwYXRoID0gdGhpcy5zbmFwc2hvdC5yb3V0ZUNvbmZpZyAmJiB0aGlzLnNuYXBzaG90LnJvdXRlQ29uZmlnLnBhdGggfHwgJyc7XG4gICAgcmV0dXJuIGBDaGlsZEFjdGl2YXRpb25FbmQocGF0aDogJyR7cGF0aH0nKWA7XG4gIH1cbn1cbmNsYXNzIEFjdGl2YXRpb25TdGFydCB7XG4gIHNuYXBzaG90O1xuICB0eXBlID0gRXZlbnRUeXBlLkFjdGl2YXRpb25TdGFydDtcbiAgY29uc3RydWN0b3Ioc25hcHNob3QpIHtcbiAgICB0aGlzLnNuYXBzaG90ID0gc25hcHNob3Q7XG4gIH1cbiAgdG9TdHJpbmcoKSB7XG4gICAgY29uc3QgcGF0aCA9IHRoaXMuc25hcHNob3Qucm91dGVDb25maWcgJiYgdGhpcy5zbmFwc2hvdC5yb3V0ZUNvbmZpZy5wYXRoIHx8ICcnO1xuICAgIHJldHVybiBgQWN0aXZhdGlvblN0YXJ0KHBhdGg6ICcke3BhdGh9JylgO1xuICB9XG59XG5jbGFzcyBBY3RpdmF0aW9uRW5kIHtcbiAgc25hcHNob3Q7XG4gIHR5cGUgPSBFdmVudFR5cGUuQWN0aXZhdGlvbkVuZDtcbiAgY29uc3RydWN0b3Ioc25hcHNob3QpIHtcbiAgICB0aGlzLnNuYXBzaG90ID0gc25hcHNob3Q7XG4gIH1cbiAgdG9TdHJpbmcoKSB7XG4gICAgY29uc3QgcGF0aCA9IHRoaXMuc25hcHNob3Qucm91dGVDb25maWcgJiYgdGhpcy5zbmFwc2hvdC5yb3V0ZUNvbmZpZy5wYXRoIHx8ICcnO1xuICAgIHJldHVybiBgQWN0aXZhdGlvbkVuZChwYXRoOiAnJHtwYXRofScpYDtcbiAgfVxufVxuY2xhc3MgU2Nyb2xsIHtcbiAgcm91dGVyRXZlbnQ7XG4gIHBvc2l0aW9uO1xuICBhbmNob3I7XG4gIHNjcm9sbEJlaGF2aW9yO1xuICB0eXBlID0gRXZlbnRUeXBlLlNjcm9sbDtcbiAgY29uc3RydWN0b3Iocm91dGVyRXZlbnQsIHBvc2l0aW9uLCBhbmNob3IsIHNjcm9sbEJlaGF2aW9yKSB7XG4gICAgdGhpcy5yb3V0ZXJFdmVudCA9IHJvdXRlckV2ZW50O1xuICAgIHRoaXMucG9zaXRpb24gPSBwb3NpdGlvbjtcbiAgICB0aGlzLmFuY2hvciA9IGFuY2hvcjtcbiAgICB0aGlzLnNjcm9sbEJlaGF2aW9yID0gc2Nyb2xsQmVoYXZpb3I7XG4gIH1cbiAgdG9TdHJpbmcoKSB7XG4gICAgY29uc3QgcG9zID0gdGhpcy5wb3NpdGlvbiA/IGAke3RoaXMucG9zaXRpb25bMF19LCAke3RoaXMucG9zaXRpb25bMV19YCA6IG51bGw7XG4gICAgcmV0dXJuIGBTY3JvbGwoYW5jaG9yOiAnJHt0aGlzLmFuY2hvcn0nLCBwb3NpdGlvbjogJyR7cG9zfScpYDtcbiAgfVxufVxuY2xhc3MgQmVmb3JlQWN0aXZhdGVSb3V0ZXMge31cbmNsYXNzIEJlZm9yZVJvdXRlc1JlY29nbml6ZWQge31cbmNsYXNzIFJlZGlyZWN0UmVxdWVzdCB7XG4gIHVybDtcbiAgbmF2aWdhdGlvbkJlaGF2aW9yT3B0aW9ucztcbiAgY29uc3RydWN0b3IodXJsLCBuYXZpZ2F0aW9uQmVoYXZpb3JPcHRpb25zKSB7XG4gICAgdGhpcy51cmwgPSB1cmw7XG4gICAgdGhpcy5uYXZpZ2F0aW9uQmVoYXZpb3JPcHRpb25zID0gbmF2aWdhdGlvbkJlaGF2aW9yT3B0aW9ucztcbiAgfVxufVxuZnVuY3Rpb24gaXNQdWJsaWNSb3V0ZXJFdmVudChlKSB7XG4gIHJldHVybiAhKGUgaW5zdGFuY2VvZiBCZWZvcmVBY3RpdmF0ZVJvdXRlcykgJiYgIShlIGluc3RhbmNlb2YgUmVkaXJlY3RSZXF1ZXN0KSAmJiAhKGUgaW5zdGFuY2VvZiBCZWZvcmVSb3V0ZXNSZWNvZ25pemVkKTtcbn1cbmZ1bmN0aW9uIHN0cmluZ2lmeUV2ZW50KHJvdXRlckV2ZW50KSB7XG4gIHN3aXRjaCAocm91dGVyRXZlbnQudHlwZSkge1xuICAgIGNhc2UgRXZlbnRUeXBlLkFjdGl2YXRpb25FbmQ6XG4gICAgICByZXR1cm4gYEFjdGl2YXRpb25FbmQocGF0aDogJyR7cm91dGVyRXZlbnQuc25hcHNob3Qucm91dGVDb25maWc/LnBhdGggfHwgJyd9JylgO1xuICAgIGNhc2UgRXZlbnRUeXBlLkFjdGl2YXRpb25TdGFydDpcbiAgICAgIHJldHVybiBgQWN0aXZhdGlvblN0YXJ0KHBhdGg6ICcke3JvdXRlckV2ZW50LnNuYXBzaG90LnJvdXRlQ29uZmlnPy5wYXRoIHx8ICcnfScpYDtcbiAgICBjYXNlIEV2ZW50VHlwZS5DaGlsZEFjdGl2YXRpb25FbmQ6XG4gICAgICByZXR1cm4gYENoaWxkQWN0aXZhdGlvbkVuZChwYXRoOiAnJHtyb3V0ZXJFdmVudC5zbmFwc2hvdC5yb3V0ZUNvbmZpZz8ucGF0aCB8fCAnJ30nKWA7XG4gICAgY2FzZSBFdmVudFR5cGUuQ2hpbGRBY3RpdmF0aW9uU3RhcnQ6XG4gICAgICByZXR1cm4gYENoaWxkQWN0aXZhdGlvblN0YXJ0KHBhdGg6ICcke3JvdXRlckV2ZW50LnNuYXBzaG90LnJvdXRlQ29uZmlnPy5wYXRoIHx8ICcnfScpYDtcbiAgICBjYXNlIEV2ZW50VHlwZS5HdWFyZHNDaGVja0VuZDpcbiAgICAgIHJldHVybiBgR3VhcmRzQ2hlY2tFbmQoaWQ6ICR7cm91dGVyRXZlbnQuaWR9LCB1cmw6ICcke3JvdXRlckV2ZW50LnVybH0nLCB1cmxBZnRlclJlZGlyZWN0czogJyR7cm91dGVyRXZlbnQudXJsQWZ0ZXJSZWRpcmVjdHN9Jywgc3RhdGU6ICR7cm91dGVyRXZlbnQuc3RhdGV9LCBzaG91bGRBY3RpdmF0ZTogJHtyb3V0ZXJFdmVudC5zaG91bGRBY3RpdmF0ZX0pYDtcbiAgICBjYXNlIEV2ZW50VHlwZS5HdWFyZHNDaGVja1N0YXJ0OlxuICAgICAgcmV0dXJuIGBHdWFyZHNDaGVja1N0YXJ0KGlkOiAke3JvdXRlckV2ZW50LmlkfSwgdXJsOiAnJHtyb3V0ZXJFdmVudC51cmx9JywgdXJsQWZ0ZXJSZWRpcmVjdHM6ICcke3JvdXRlckV2ZW50LnVybEFmdGVyUmVkaXJlY3RzfScsIHN0YXRlOiAke3JvdXRlckV2ZW50LnN0YXRlfSlgO1xuICAgIGNhc2UgRXZlbnRUeXBlLk5hdmlnYXRpb25DYW5jZWw6XG4gICAgICByZXR1cm4gYE5hdmlnYXRpb25DYW5jZWwoaWQ6ICR7cm91dGVyRXZlbnQuaWR9LCB1cmw6ICcke3JvdXRlckV2ZW50LnVybH0nKWA7XG4gICAgY2FzZSBFdmVudFR5cGUuTmF2aWdhdGlvblNraXBwZWQ6XG4gICAgICByZXR1cm4gYE5hdmlnYXRpb25Ta2lwcGVkKGlkOiAke3JvdXRlckV2ZW50LmlkfSwgdXJsOiAnJHtyb3V0ZXJFdmVudC51cmx9JylgO1xuICAgIGNhc2UgRXZlbnRUeXBlLk5hdmlnYXRpb25FbmQ6XG4gICAgICByZXR1cm4gYE5hdmlnYXRpb25FbmQoaWQ6ICR7cm91dGVyRXZlbnQuaWR9LCB1cmw6ICcke3JvdXRlckV2ZW50LnVybH0nLCB1cmxBZnRlclJlZGlyZWN0czogJyR7cm91dGVyRXZlbnQudXJsQWZ0ZXJSZWRpcmVjdHN9JylgO1xuICAgIGNhc2UgRXZlbnRUeXBlLk5hdmlnYXRpb25FcnJvcjpcbiAgICAgIHJldHVybiBgTmF2aWdhdGlvbkVycm9yKGlkOiAke3JvdXRlckV2ZW50LmlkfSwgdXJsOiAnJHtyb3V0ZXJFdmVudC51cmx9JywgZXJyb3I6ICR7cm91dGVyRXZlbnQuZXJyb3J9KWA7XG4gICAgY2FzZSBFdmVudFR5cGUuTmF2aWdhdGlvblN0YXJ0OlxuICAgICAgcmV0dXJuIGBOYXZpZ2F0aW9uU3RhcnQoaWQ6ICR7cm91dGVyRXZlbnQuaWR9LCB1cmw6ICcke3JvdXRlckV2ZW50LnVybH0nKWA7XG4gICAgY2FzZSBFdmVudFR5cGUuUmVzb2x2ZUVuZDpcbiAgICAgIHJldHVybiBgUmVzb2x2ZUVuZChpZDogJHtyb3V0ZXJFdmVudC5pZH0sIHVybDogJyR7cm91dGVyRXZlbnQudXJsfScsIHVybEFmdGVyUmVkaXJlY3RzOiAnJHtyb3V0ZXJFdmVudC51cmxBZnRlclJlZGlyZWN0c30nLCBzdGF0ZTogJHtyb3V0ZXJFdmVudC5zdGF0ZX0pYDtcbiAgICBjYXNlIEV2ZW50VHlwZS5SZXNvbHZlU3RhcnQ6XG4gICAgICByZXR1cm4gYFJlc29sdmVTdGFydChpZDogJHtyb3V0ZXJFdmVudC5pZH0sIHVybDogJyR7cm91dGVyRXZlbnQudXJsfScsIHVybEFmdGVyUmVkaXJlY3RzOiAnJHtyb3V0ZXJFdmVudC51cmxBZnRlclJlZGlyZWN0c30nLCBzdGF0ZTogJHtyb3V0ZXJFdmVudC5zdGF0ZX0pYDtcbiAgICBjYXNlIEV2ZW50VHlwZS5Sb3V0ZUNvbmZpZ0xvYWRFbmQ6XG4gICAgICByZXR1cm4gYFJvdXRlQ29uZmlnTG9hZEVuZChwYXRoOiAke3JvdXRlckV2ZW50LnJvdXRlLnBhdGh9KWA7XG4gICAgY2FzZSBFdmVudFR5cGUuUm91dGVDb25maWdMb2FkU3RhcnQ6XG4gICAgICByZXR1cm4gYFJvdXRlQ29uZmlnTG9hZFN0YXJ0KHBhdGg6ICR7cm91dGVyRXZlbnQucm91dGUucGF0aH0pYDtcbiAgICBjYXNlIEV2ZW50VHlwZS5Sb3V0ZXNSZWNvZ25pemVkOlxuICAgICAgcmV0dXJuIGBSb3V0ZXNSZWNvZ25pemVkKGlkOiAke3JvdXRlckV2ZW50LmlkfSwgdXJsOiAnJHtyb3V0ZXJFdmVudC51cmx9JywgdXJsQWZ0ZXJSZWRpcmVjdHM6ICcke3JvdXRlckV2ZW50LnVybEFmdGVyUmVkaXJlY3RzfScsIHN0YXRlOiAke3JvdXRlckV2ZW50LnN0YXRlfSlgO1xuICAgIGNhc2UgRXZlbnRUeXBlLlNjcm9sbDpcbiAgICAgIGNvbnN0IHBvcyA9IHJvdXRlckV2ZW50LnBvc2l0aW9uID8gYCR7cm91dGVyRXZlbnQucG9zaXRpb25bMF19LCAke3JvdXRlckV2ZW50LnBvc2l0aW9uWzFdfWAgOiBudWxsO1xuICAgICAgcmV0dXJuIGBTY3JvbGwoYW5jaG9yOiAnJHtyb3V0ZXJFdmVudC5hbmNob3J9JywgcG9zaXRpb246ICcke3Bvc30nKWA7XG4gIH1cbn1cbmNsYXNzIE91dGxldENvbnRleHQge1xuICByb290SW5qZWN0b3I7XG4gIG91dGxldCA9IG51bGw7XG4gIHJvdXRlID0gbnVsbDtcbiAgY2hpbGRyZW47XG4gIGF0dGFjaFJlZiA9IG51bGw7XG4gIGdldCBpbmplY3RvcigpIHtcbiAgICByZXR1cm4gdGhpcy5yb3V0ZT8uc25hcHNob3QuX2Vudmlyb25tZW50SW5qZWN0b3IgPz8gdGhpcy5yb290SW5qZWN0b3I7XG4gIH1cbiAgY29uc3RydWN0b3Iocm9vdEluamVjdG9yKSB7XG4gICAgdGhpcy5yb290SW5qZWN0b3IgPSByb290SW5qZWN0b3I7XG4gICAgdGhpcy5jaGlsZHJlbiA9IG5ldyBDaGlsZHJlbk91dGxldENvbnRleHRzKHRoaXMucm9vdEluamVjdG9yKTtcbiAgfVxufVxubGV0IENoaWxkcmVuT3V0bGV0Q29udGV4dHMgPSAvKiNfX1BVUkVfXyovKCgpID0+IHtcbiAgY2xhc3MgQ2hpbGRyZW5PdXRsZXRDb250ZXh0cyB7XG4gICAgcm9vdEluamVjdG9yO1xuICAgIGNvbnRleHRzID0gbmV3IE1hcCgpO1xuICAgIGNvbnN0cnVjdG9yKHJvb3RJbmplY3Rvcikge1xuICAgICAgdGhpcy5yb290SW5qZWN0b3IgPSByb290SW5qZWN0b3I7XG4gICAgfVxuICAgIG9uQ2hpbGRPdXRsZXRDcmVhdGVkKGNoaWxkTmFtZSwgb3V0bGV0KSB7XG4gICAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRPckNyZWF0ZUNvbnRleHQoY2hpbGROYW1lKTtcbiAgICAgIGNvbnRleHQub3V0bGV0ID0gb3V0bGV0O1xuICAgICAgdGhpcy5jb250ZXh0cy5zZXQoY2hpbGROYW1lLCBjb250ZXh0KTtcbiAgICB9XG4gICAgb25DaGlsZE91dGxldERlc3Ryb3llZChjaGlsZE5hbWUpIHtcbiAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoY2hpbGROYW1lKTtcbiAgICAgIGlmIChjb250ZXh0KSB7XG4gICAgICAgIGNvbnRleHQub3V0bGV0ID0gbnVsbDtcbiAgICAgICAgY29udGV4dC5hdHRhY2hSZWYgPSBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgICBvbk91dGxldERlYWN0aXZhdGVkKCkge1xuICAgICAgY29uc3QgY29udGV4dHMgPSB0aGlzLmNvbnRleHRzO1xuICAgICAgdGhpcy5jb250ZXh0cyA9IG5ldyBNYXAoKTtcbiAgICAgIHJldHVybiBjb250ZXh0cztcbiAgICB9XG4gICAgb25PdXRsZXRSZUF0dGFjaGVkKGNvbnRleHRzKSB7XG4gICAgICB0aGlzLmNvbnRleHRzID0gY29udGV4dHM7XG4gICAgfVxuICAgIGdldE9yQ3JlYXRlQ29udGV4dChjaGlsZE5hbWUpIHtcbiAgICAgIGxldCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KGNoaWxkTmFtZSk7XG4gICAgICBpZiAoIWNvbnRleHQpIHtcbiAgICAgICAgY29udGV4dCA9IG5ldyBPdXRsZXRDb250ZXh0KHRoaXMucm9vdEluamVjdG9yKTtcbiAgICAgICAgdGhpcy5jb250ZXh0cy5zZXQoY2hpbGROYW1lLCBjb250ZXh0KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjb250ZXh0O1xuICAgIH1cbiAgICBnZXRDb250ZXh0KGNoaWxkTmFtZSkge1xuICAgICAgcmV0dXJuIHRoaXMuY29udGV4dHMuZ2V0KGNoaWxkTmFtZSkgfHwgbnVsbDtcbiAgICB9XG4gICAgc3RhdGljIMm1ZmFjID0gZnVuY3Rpb24gQ2hpbGRyZW5PdXRsZXRDb250ZXh0c19GYWN0b3J5KF9fbmdGYWN0b3J5VHlwZV9fKSB7XG4gICAgICByZXR1cm4gbmV3IChfX25nRmFjdG9yeVR5cGVfXyB8fCBDaGlsZHJlbk91dGxldENvbnRleHRzKShpMC7Jtcm1aW5qZWN0KGkwLkVudmlyb25tZW50SW5qZWN0b3IpKTtcbiAgICB9O1xuICAgIHN0YXRpYyDJtXByb3YgPSAvKiBAX19QVVJFX18gKi9pMC7Jtcm1ZGVmaW5lSW5qZWN0YWJsZSh7XG4gICAgICB0b2tlbjogQ2hpbGRyZW5PdXRsZXRDb250ZXh0cyxcbiAgICAgIGZhY3Rvcnk6IENoaWxkcmVuT3V0bGV0Q29udGV4dHMuybVmYWMsXG4gICAgICBwcm92aWRlZEluOiAncm9vdCdcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gQ2hpbGRyZW5PdXRsZXRDb250ZXh0cztcbn0pKCk7XG4vKiNfX1BVUkVfXyovKCgpID0+IHtcbiAgKHR5cGVvZiBuZ0Rldk1vZGUgPT09IFwidW5kZWZpbmVkXCIgfHwgbmdEZXZNb2RlKSAmJiB2b2lkIDA7XG59KSgpO1xuY2xhc3MgVHJlZSB7XG4gIF9yb290O1xuICBjb25zdHJ1Y3Rvcihyb290KSB7XG4gICAgdGhpcy5fcm9vdCA9IHJvb3Q7XG4gIH1cbiAgZ2V0IHJvb3QoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Jvb3QudmFsdWU7XG4gIH1cbiAgcGFyZW50KHQpIHtcbiAgICBjb25zdCBwID0gdGhpcy5wYXRoRnJvbVJvb3QodCk7XG4gICAgcmV0dXJuIHAubGVuZ3RoID4gMSA/IHBbcC5sZW5ndGggLSAyXSA6IG51bGw7XG4gIH1cbiAgY2hpbGRyZW4odCkge1xuICAgIGNvbnN0IG4gPSBmaW5kTm9kZSh0LCB0aGlzLl9yb290KTtcbiAgICByZXR1cm4gbiA/IG4uY2hpbGRyZW4ubWFwKHQgPT4gdC52YWx1ZSkgOiBbXTtcbiAgfVxuICBmaXJzdENoaWxkKHQpIHtcbiAgICBjb25zdCBuID0gZmluZE5vZGUodCwgdGhpcy5fcm9vdCk7XG4gICAgcmV0dXJuIG4gJiYgbi5jaGlsZHJlbi5sZW5ndGggPiAwID8gbi5jaGlsZHJlblswXS52YWx1ZSA6IG51bGw7XG4gIH1cbiAgc2libGluZ3ModCkge1xuICAgIGNvbnN0IHAgPSBmaW5kUGF0aCh0LCB0aGlzLl9yb290KTtcbiAgICBpZiAocC5sZW5ndGggPCAyKSByZXR1cm4gW107XG4gICAgY29uc3QgYyA9IHBbcC5sZW5ndGggLSAyXS5jaGlsZHJlbi5tYXAoYyA9PiBjLnZhbHVlKTtcbiAgICByZXR1cm4gYy5maWx0ZXIoY2MgPT4gY2MgIT09IHQpO1xuICB9XG4gIHBhdGhGcm9tUm9vdCh0KSB7XG4gICAgcmV0dXJuIGZpbmRQYXRoKHQsIHRoaXMuX3Jvb3QpLm1hcChzID0+IHMudmFsdWUpO1xuICB9XG59XG5mdW5jdGlvbiBmaW5kTm9kZSh2YWx1ZSwgbm9kZSkge1xuICBpZiAodmFsdWUgPT09IG5vZGUudmFsdWUpIHJldHVybiBub2RlO1xuICBmb3IgKGNvbnN0IGNoaWxkIG9mIG5vZGUuY2hpbGRyZW4pIHtcbiAgICBjb25zdCBub2RlID0gZmluZE5vZGUodmFsdWUsIGNoaWxkKTtcbiAgICBpZiAobm9kZSkgcmV0dXJuIG5vZGU7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5mdW5jdGlvbiBmaW5kUGF0aCh2YWx1ZSwgbm9kZSkge1xuICBpZiAodmFsdWUgPT09IG5vZGUudmFsdWUpIHJldHVybiBbbm9kZV07XG4gIGZvciAoY29uc3QgY2hpbGQgb2Ygbm9kZS5jaGlsZHJlbikge1xuICAgIGNvbnN0IHBhdGggPSBmaW5kUGF0aCh2YWx1ZSwgY2hpbGQpO1xuICAgIGlmIChwYXRoLmxlbmd0aCkge1xuICAgICAgcGF0aC51bnNoaWZ0KG5vZGUpO1xuICAgICAgcmV0dXJuIHBhdGg7XG4gICAgfVxuICB9XG4gIHJldHVybiBbXTtcbn1cbmNsYXNzIFRyZWVOb2RlIHtcbiAgdmFsdWU7XG4gIGNoaWxkcmVuO1xuICBjb25zdHJ1Y3Rvcih2YWx1ZSwgY2hpbGRyZW4pIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5jaGlsZHJlbiA9IGNoaWxkcmVuO1xuICB9XG4gIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiBgVHJlZU5vZGUoJHt0aGlzLnZhbHVlfSlgO1xuICB9XG59XG5mdW5jdGlvbiBub2RlQ2hpbGRyZW5Bc01hcChub2RlKSB7XG4gIGNvbnN0IG1hcCA9IHt9O1xuICBpZiAobm9kZSkge1xuICAgIG5vZGUuY2hpbGRyZW4uZm9yRWFjaChjaGlsZCA9PiBtYXBbY2hpbGQudmFsdWUub3V0bGV0XSA9IGNoaWxkKTtcbiAgfVxuICByZXR1cm4gbWFwO1xufVxuY2xhc3MgUm91dGVyU3RhdGUgZXh0ZW5kcyBUcmVlIHtcbiAgc25hcHNob3Q7XG4gIGNvbnN0cnVjdG9yKHJvb3QsIHNuYXBzaG90KSB7XG4gICAgc3VwZXIocm9vdCk7XG4gICAgdGhpcy5zbmFwc2hvdCA9IHNuYXBzaG90O1xuICAgIHNldFJvdXRlclN0YXRlKHRoaXMsIHJvb3QpO1xuICB9XG4gIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiB0aGlzLnNuYXBzaG90LnRvU3RyaW5nKCk7XG4gIH1cbn1cbmZ1bmN0aW9uIGNyZWF0ZUVtcHR5U3RhdGUocm9vdENvbXBvbmVudCwgaW5qZWN0b3IpIHtcbiAgY29uc3Qgc25hcHNob3QgPSBjcmVhdGVFbXB0eVN0YXRlU25hcHNob3Qocm9vdENvbXBvbmVudCwgaW5qZWN0b3IpO1xuICBjb25zdCBlbXB0eVVybCA9IG5ldyBCZWhhdmlvclN1YmplY3QoW25ldyBVcmxTZWdtZW50KCcnLCB7fSldKTtcbiAgY29uc3QgZW1wdHlQYXJhbXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHt9KTtcbiAgY29uc3QgZW1wdHlEYXRhID0gbmV3IEJlaGF2aW9yU3ViamVjdCh7fSk7XG4gIGNvbnN0IGVtcHR5UXVlcnlQYXJhbXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHt9KTtcbiAgY29uc3QgZnJhZ21lbnQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KCcnKTtcbiAgY29uc3QgYWN0aXZhdGVkID0gbmV3IEFjdGl2YXRlZFJvdXRlKGVtcHR5VXJsLCBlbXB0eVBhcmFtcywgZW1wdHlRdWVyeVBhcmFtcywgZnJhZ21lbnQsIGVtcHR5RGF0YSwgUFJJTUFSWV9PVVRMRVQsIHJvb3RDb21wb25lbnQsIHNuYXBzaG90LnJvb3QpO1xuICBhY3RpdmF0ZWQuc25hcHNob3QgPSBzbmFwc2hvdC5yb290O1xuICByZXR1cm4gbmV3IFJvdXRlclN0YXRlKG5ldyBUcmVlTm9kZShhY3RpdmF0ZWQsIFtdKSwgc25hcHNob3QpO1xufVxuZnVuY3Rpb24gY3JlYXRlRW1wdHlTdGF0ZVNuYXBzaG90KHJvb3RDb21wb25lbnQsIGluamVjdG9yKSB7XG4gIGNvbnN0IGVtcHR5UGFyYW1zID0ge307XG4gIGNvbnN0IGVtcHR5RGF0YSA9IHt9O1xuICBjb25zdCBlbXB0eVF1ZXJ5UGFyYW1zID0ge307XG4gIGNvbnN0IGZyYWdtZW50ID0gJyc7XG4gIGNvbnN0IGFjdGl2YXRlZCA9IG5ldyBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90KFtdLCBlbXB0eVBhcmFtcywgZW1wdHlRdWVyeVBhcmFtcywgZnJhZ21lbnQsIGVtcHR5RGF0YSwgUFJJTUFSWV9PVVRMRVQsIHJvb3RDb21wb25lbnQsIG51bGwsIHt9LCBpbmplY3Rvcik7XG4gIHJldHVybiBuZXcgUm91dGVyU3RhdGVTbmFwc2hvdCgnJywgbmV3IFRyZWVOb2RlKGFjdGl2YXRlZCwgW10pKTtcbn1cbmNsYXNzIEFjdGl2YXRlZFJvdXRlIHtcbiAgdXJsU3ViamVjdDtcbiAgcGFyYW1zU3ViamVjdDtcbiAgcXVlcnlQYXJhbXNTdWJqZWN0O1xuICBmcmFnbWVudFN1YmplY3Q7XG4gIGRhdGFTdWJqZWN0O1xuICBvdXRsZXQ7XG4gIGNvbXBvbmVudDtcbiAgc25hcHNob3Q7XG4gIF9mdXR1cmVTbmFwc2hvdDtcbiAgX3JvdXRlclN0YXRlO1xuICBfcGFyYW1NYXA7XG4gIF9xdWVyeVBhcmFtTWFwO1xuICB0aXRsZTtcbiAgdXJsO1xuICBwYXJhbXM7XG4gIHF1ZXJ5UGFyYW1zO1xuICBmcmFnbWVudDtcbiAgZGF0YTtcbiAgY29uc3RydWN0b3IodXJsU3ViamVjdCwgcGFyYW1zU3ViamVjdCwgcXVlcnlQYXJhbXNTdWJqZWN0LCBmcmFnbWVudFN1YmplY3QsIGRhdGFTdWJqZWN0LCBvdXRsZXQsIGNvbXBvbmVudCwgZnV0dXJlU25hcHNob3QpIHtcbiAgICB0aGlzLnVybFN1YmplY3QgPSB1cmxTdWJqZWN0O1xuICAgIHRoaXMucGFyYW1zU3ViamVjdCA9IHBhcmFtc1N1YmplY3Q7XG4gICAgdGhpcy5xdWVyeVBhcmFtc1N1YmplY3QgPSBxdWVyeVBhcmFtc1N1YmplY3Q7XG4gICAgdGhpcy5mcmFnbWVudFN1YmplY3QgPSBmcmFnbWVudFN1YmplY3Q7XG4gICAgdGhpcy5kYXRhU3ViamVjdCA9IGRhdGFTdWJqZWN0O1xuICAgIHRoaXMub3V0bGV0ID0gb3V0bGV0O1xuICAgIHRoaXMuY29tcG9uZW50ID0gY29tcG9uZW50O1xuICAgIHRoaXMuX2Z1dHVyZVNuYXBzaG90ID0gZnV0dXJlU25hcHNob3Q7XG4gICAgdGhpcy50aXRsZSA9IHRoaXMuZGF0YVN1YmplY3Q/LnBpcGUobWFwKGQgPT4gZFtSb3V0ZVRpdGxlS2V5XSkpID8/IG9mKHVuZGVmaW5lZCk7XG4gICAgdGhpcy51cmwgPSB1cmxTdWJqZWN0O1xuICAgIHRoaXMucGFyYW1zID0gcGFyYW1zU3ViamVjdDtcbiAgICB0aGlzLnF1ZXJ5UGFyYW1zID0gcXVlcnlQYXJhbXNTdWJqZWN0O1xuICAgIHRoaXMuZnJhZ21lbnQgPSBmcmFnbWVudFN1YmplY3Q7XG4gICAgdGhpcy5kYXRhID0gZGF0YVN1YmplY3Q7XG4gIH1cbiAgZ2V0IHJvdXRlQ29uZmlnKCkge1xuICAgIHJldHVybiB0aGlzLl9mdXR1cmVTbmFwc2hvdC5yb3V0ZUNvbmZpZztcbiAgfVxuICBnZXQgcm9vdCgpIHtcbiAgICByZXR1cm4gdGhpcy5fcm91dGVyU3RhdGUucm9vdDtcbiAgfVxuICBnZXQgcGFyZW50KCkge1xuICAgIHJldHVybiB0aGlzLl9yb3V0ZXJTdGF0ZS5wYXJlbnQodGhpcyk7XG4gIH1cbiAgZ2V0IGZpcnN0Q2hpbGQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3JvdXRlclN0YXRlLmZpcnN0Q2hpbGQodGhpcyk7XG4gIH1cbiAgZ2V0IGNoaWxkcmVuKCkge1xuICAgIHJldHVybiB0aGlzLl9yb3V0ZXJTdGF0ZS5jaGlsZHJlbih0aGlzKTtcbiAgfVxuICBnZXQgcGF0aEZyb21Sb290KCkge1xuICAgIHJldHVybiB0aGlzLl9yb3V0ZXJTdGF0ZS5wYXRoRnJvbVJvb3QodGhpcyk7XG4gIH1cbiAgZ2V0IHBhcmFtTWFwKCkge1xuICAgIHRoaXMuX3BhcmFtTWFwID8/PSB0aGlzLnBhcmFtcy5waXBlKG1hcChwID0+IGNvbnZlcnRUb1BhcmFtTWFwKHApKSk7XG4gICAgcmV0dXJuIHRoaXMuX3BhcmFtTWFwO1xuICB9XG4gIGdldCBxdWVyeVBhcmFtTWFwKCkge1xuICAgIHRoaXMuX3F1ZXJ5UGFyYW1NYXAgPz89IHRoaXMucXVlcnlQYXJhbXMucGlwZShtYXAocCA9PiBjb252ZXJ0VG9QYXJhbU1hcChwKSkpO1xuICAgIHJldHVybiB0aGlzLl9xdWVyeVBhcmFtTWFwO1xuICB9XG4gIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiB0aGlzLnNuYXBzaG90ID8gdGhpcy5zbmFwc2hvdC50b1N0cmluZygpIDogYEZ1dHVyZSgke3RoaXMuX2Z1dHVyZVNuYXBzaG90fSlgO1xuICB9XG59XG5mdW5jdGlvbiBnZXRJbmhlcml0ZWQocm91dGUsIHBhcmVudCwgcGFyYW1zSW5oZXJpdGFuY2VTdHJhdGVneSA9ICdlbXB0eU9ubHknKSB7XG4gIGxldCBpbmhlcml0ZWQ7XG4gIGNvbnN0IHtcbiAgICByb3V0ZUNvbmZpZ1xuICB9ID0gcm91dGU7XG4gIGlmIChwYXJlbnQgIT09IG51bGwgJiYgKHBhcmFtc0luaGVyaXRhbmNlU3RyYXRlZ3kgPT09ICdhbHdheXMnIHx8IHJvdXRlQ29uZmlnPy5wYXRoID09PSAnJyB8fCAhcGFyZW50LmNvbXBvbmVudCAmJiAhcGFyZW50LnJvdXRlQ29uZmlnPy5sb2FkQ29tcG9uZW50KSkge1xuICAgIGluaGVyaXRlZCA9IHtcbiAgICAgIHBhcmFtczoge1xuICAgICAgICAuLi5wYXJlbnQucGFyYW1zLFxuICAgICAgICAuLi5yb3V0ZS5wYXJhbXNcbiAgICAgIH0sXG4gICAgICBkYXRhOiB7XG4gICAgICAgIC4uLnBhcmVudC5kYXRhLFxuICAgICAgICAuLi5yb3V0ZS5kYXRhXG4gICAgICB9LFxuICAgICAgcmVzb2x2ZToge1xuICAgICAgICAuLi5yb3V0ZS5kYXRhLFxuICAgICAgICAuLi5wYXJlbnQuZGF0YSxcbiAgICAgICAgLi4ucm91dGVDb25maWc/LmRhdGEsXG4gICAgICAgIC4uLnJvdXRlLl9yZXNvbHZlZERhdGFcbiAgICAgIH1cbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIGluaGVyaXRlZCA9IHtcbiAgICAgIHBhcmFtczoge1xuICAgICAgICAuLi5yb3V0ZS5wYXJhbXNcbiAgICAgIH0sXG4gICAgICBkYXRhOiB7XG4gICAgICAgIC4uLnJvdXRlLmRhdGFcbiAgICAgIH0sXG4gICAgICByZXNvbHZlOiB7XG4gICAgICAgIC4uLnJvdXRlLmRhdGEsXG4gICAgICAgIC4uLihyb3V0ZS5fcmVzb2x2ZWREYXRhID8/IHt9KVxuICAgICAgfVxuICAgIH07XG4gIH1cbiAgaWYgKHJvdXRlQ29uZmlnICYmIGhhc1N0YXRpY1RpdGxlKHJvdXRlQ29uZmlnKSkge1xuICAgIGluaGVyaXRlZC5yZXNvbHZlW1JvdXRlVGl0bGVLZXldID0gcm91dGVDb25maWcudGl0bGU7XG4gIH1cbiAgcmV0dXJuIGluaGVyaXRlZDtcbn1cbmNsYXNzIEFjdGl2YXRlZFJvdXRlU25hcHNob3Qge1xuICB1cmw7XG4gIHBhcmFtcztcbiAgcXVlcnlQYXJhbXM7XG4gIGZyYWdtZW50O1xuICBkYXRhO1xuICBvdXRsZXQ7XG4gIGNvbXBvbmVudDtcbiAgcm91dGVDb25maWc7XG4gIF9yZXNvbHZlO1xuICBfcmVzb2x2ZWREYXRhO1xuICBfcm91dGVyU3RhdGU7XG4gIF9wYXJhbU1hcDtcbiAgX3F1ZXJ5UGFyYW1NYXA7XG4gIF9lbnZpcm9ubWVudEluamVjdG9yO1xuICBnZXQgdGl0bGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YT8uW1JvdXRlVGl0bGVLZXldO1xuICB9XG4gIGNvbnN0cnVjdG9yKHVybCwgcGFyYW1zLCBxdWVyeVBhcmFtcywgZnJhZ21lbnQsIGRhdGEsIG91dGxldCwgY29tcG9uZW50LCByb3V0ZUNvbmZpZywgcmVzb2x2ZSwgZW52aXJvbm1lbnRJbmplY3Rvcikge1xuICAgIHRoaXMudXJsID0gdXJsO1xuICAgIHRoaXMucGFyYW1zID0gcGFyYW1zO1xuICAgIHRoaXMucXVlcnlQYXJhbXMgPSBxdWVyeVBhcmFtcztcbiAgICB0aGlzLmZyYWdtZW50ID0gZnJhZ21lbnQ7XG4gICAgdGhpcy5kYXRhID0gZGF0YTtcbiAgICB0aGlzLm91dGxldCA9IG91dGxldDtcbiAgICB0aGlzLmNvbXBvbmVudCA9IGNvbXBvbmVudDtcbiAgICB0aGlzLnJvdXRlQ29uZmlnID0gcm91dGVDb25maWc7XG4gICAgdGhpcy5fcmVzb2x2ZSA9IHJlc29sdmU7XG4gICAgdGhpcy5fZW52aXJvbm1lbnRJbmplY3RvciA9IGVudmlyb25tZW50SW5qZWN0b3I7XG4gIH1cbiAgZ2V0IHJvb3QoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3JvdXRlclN0YXRlLnJvb3Q7XG4gIH1cbiAgZ2V0IHBhcmVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5fcm91dGVyU3RhdGUucGFyZW50KHRoaXMpO1xuICB9XG4gIGdldCBmaXJzdENoaWxkKCkge1xuICAgIHJldHVybiB0aGlzLl9yb3V0ZXJTdGF0ZS5maXJzdENoaWxkKHRoaXMpO1xuICB9XG4gIGdldCBjaGlsZHJlbigpIHtcbiAgICByZXR1cm4gdGhpcy5fcm91dGVyU3RhdGUuY2hpbGRyZW4odGhpcyk7XG4gIH1cbiAgZ2V0IHBhdGhGcm9tUm9vdCgpIHtcbiAgICByZXR1cm4gdGhpcy5fcm91dGVyU3RhdGUucGF0aEZyb21Sb290KHRoaXMpO1xuICB9XG4gIGdldCBwYXJhbU1hcCgpIHtcbiAgICB0aGlzLl9wYXJhbU1hcCA/Pz0gY29udmVydFRvUGFyYW1NYXAodGhpcy5wYXJhbXMpO1xuICAgIHJldHVybiB0aGlzLl9wYXJhbU1hcDtcbiAgfVxuICBnZXQgcXVlcnlQYXJhbU1hcCgpIHtcbiAgICB0aGlzLl9xdWVyeVBhcmFtTWFwID8/PSBjb252ZXJ0VG9QYXJhbU1hcCh0aGlzLnF1ZXJ5UGFyYW1zKTtcbiAgICByZXR1cm4gdGhpcy5fcXVlcnlQYXJhbU1hcDtcbiAgfVxuICB0b1N0cmluZygpIHtcbiAgICBjb25zdCB1cmwgPSB0aGlzLnVybC5tYXAoc2VnbWVudCA9PiBzZWdtZW50LnRvU3RyaW5nKCkpLmpvaW4oJy8nKTtcbiAgICBjb25zdCBtYXRjaGVkID0gdGhpcy5yb3V0ZUNvbmZpZyA/IHRoaXMucm91dGVDb25maWcucGF0aCA6ICcnO1xuICAgIHJldHVybiBgUm91dGUodXJsOicke3VybH0nLCBwYXRoOicke21hdGNoZWR9JylgO1xuICB9XG59XG5jbGFzcyBSb3V0ZXJTdGF0ZVNuYXBzaG90IGV4dGVuZHMgVHJlZSB7XG4gIHVybDtcbiAgY29uc3RydWN0b3IodXJsLCByb290KSB7XG4gICAgc3VwZXIocm9vdCk7XG4gICAgdGhpcy51cmwgPSB1cmw7XG4gICAgc2V0Um91dGVyU3RhdGUodGhpcywgcm9vdCk7XG4gIH1cbiAgdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIHNlcmlhbGl6ZU5vZGUodGhpcy5fcm9vdCk7XG4gIH1cbn1cbmZ1bmN0aW9uIHNldFJvdXRlclN0YXRlKHN0YXRlLCBub2RlKSB7XG4gIG5vZGUudmFsdWUuX3JvdXRlclN0YXRlID0gc3RhdGU7XG4gIG5vZGUuY2hpbGRyZW4uZm9yRWFjaChjID0+IHNldFJvdXRlclN0YXRlKHN0YXRlLCBjKSk7XG59XG5mdW5jdGlvbiBzZXJpYWxpemVOb2RlKG5vZGUpIHtcbiAgY29uc3QgYyA9IG5vZGUuY2hpbGRyZW4ubGVuZ3RoID4gMCA/IGAgeyAke25vZGUuY2hpbGRyZW4ubWFwKHNlcmlhbGl6ZU5vZGUpLmpvaW4oJywgJyl9IH0gYCA6ICcnO1xuICByZXR1cm4gYCR7bm9kZS52YWx1ZX0ke2N9YDtcbn1cbmZ1bmN0aW9uIGFkdmFuY2VBY3RpdmF0ZWRSb3V0ZShyb3V0ZSkge1xuICBpZiAocm91dGUuc25hcHNob3QpIHtcbiAgICBjb25zdCBjdXJyZW50U25hcHNob3QgPSByb3V0ZS5zbmFwc2hvdDtcbiAgICBjb25zdCBuZXh0U25hcHNob3QgPSByb3V0ZS5fZnV0dXJlU25hcHNob3Q7XG4gICAgcm91dGUuc25hcHNob3QgPSBuZXh0U25hcHNob3Q7XG4gICAgaWYgKCFzaGFsbG93RXF1YWwoY3VycmVudFNuYXBzaG90LnF1ZXJ5UGFyYW1zLCBuZXh0U25hcHNob3QucXVlcnlQYXJhbXMpKSB7XG4gICAgICByb3V0ZS5xdWVyeVBhcmFtc1N1YmplY3QubmV4dChuZXh0U25hcHNob3QucXVlcnlQYXJhbXMpO1xuICAgIH1cbiAgICBpZiAoY3VycmVudFNuYXBzaG90LmZyYWdtZW50ICE9PSBuZXh0U25hcHNob3QuZnJhZ21lbnQpIHtcbiAgICAgIHJvdXRlLmZyYWdtZW50U3ViamVjdC5uZXh0KG5leHRTbmFwc2hvdC5mcmFnbWVudCk7XG4gICAgfVxuICAgIGlmICghc2hhbGxvd0VxdWFsKGN1cnJlbnRTbmFwc2hvdC5wYXJhbXMsIG5leHRTbmFwc2hvdC5wYXJhbXMpKSB7XG4gICAgICByb3V0ZS5wYXJhbXNTdWJqZWN0Lm5leHQobmV4dFNuYXBzaG90LnBhcmFtcyk7XG4gICAgfVxuICAgIGlmICghc2hhbGxvd0VxdWFsQXJyYXlzKGN1cnJlbnRTbmFwc2hvdC51cmwsIG5leHRTbmFwc2hvdC51cmwpKSB7XG4gICAgICByb3V0ZS51cmxTdWJqZWN0Lm5leHQobmV4dFNuYXBzaG90LnVybCk7XG4gICAgfVxuICAgIGlmICghc2hhbGxvd0VxdWFsKGN1cnJlbnRTbmFwc2hvdC5kYXRhLCBuZXh0U25hcHNob3QuZGF0YSkpIHtcbiAgICAgIHJvdXRlLmRhdGFTdWJqZWN0Lm5leHQobmV4dFNuYXBzaG90LmRhdGEpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICByb3V0ZS5zbmFwc2hvdCA9IHJvdXRlLl9mdXR1cmVTbmFwc2hvdDtcbiAgICByb3V0ZS5kYXRhU3ViamVjdC5uZXh0KHJvdXRlLl9mdXR1cmVTbmFwc2hvdC5kYXRhKTtcbiAgfVxufVxuZnVuY3Rpb24gZXF1YWxQYXJhbXNBbmRVcmxTZWdtZW50cyhhLCBiKSB7XG4gIGNvbnN0IGVxdWFsVXJsUGFyYW1zID0gc2hhbGxvd0VxdWFsKGEucGFyYW1zLCBiLnBhcmFtcykgJiYgZXF1YWxTZWdtZW50cyhhLnVybCwgYi51cmwpO1xuICBjb25zdCBwYXJlbnRzTWlzbWF0Y2ggPSAhYS5wYXJlbnQgIT09ICFiLnBhcmVudDtcbiAgcmV0dXJuIGVxdWFsVXJsUGFyYW1zICYmICFwYXJlbnRzTWlzbWF0Y2ggJiYgKCFhLnBhcmVudCB8fCBlcXVhbFBhcmFtc0FuZFVybFNlZ21lbnRzKGEucGFyZW50LCBiLnBhcmVudCkpO1xufVxuZnVuY3Rpb24gaGFzU3RhdGljVGl0bGUoY29uZmlnKSB7XG4gIHJldHVybiB0eXBlb2YgY29uZmlnLnRpdGxlID09PSAnc3RyaW5nJyB8fCBjb25maWcudGl0bGUgPT09IG51bGw7XG59XG5jb25zdCBST1VURVJfT1VUTEVUX0RBVEEgPSAvKiNfX1BVUkVfXyovbmV3IEluamVjdGlvblRva2VuKHR5cGVvZiBuZ0Rldk1vZGUgIT09ICd1bmRlZmluZWQnICYmIG5nRGV2TW9kZSA/ICdSb3V0ZXJPdXRsZXQgZGF0YScgOiAnJyk7XG5sZXQgUm91dGVyT3V0bGV0ID0gLyojX19QVVJFX18qLygoKSA9PiB7XG4gIGNsYXNzIFJvdXRlck91dGxldCB7XG4gICAgYWN0aXZhdGVkID0gbnVsbDtcbiAgICBnZXQgYWN0aXZhdGVkQ29tcG9uZW50UmVmKCkge1xuICAgICAgcmV0dXJuIHRoaXMuYWN0aXZhdGVkO1xuICAgIH1cbiAgICBfYWN0aXZhdGVkUm91dGUgPSBudWxsO1xuICAgIG5hbWUgPSBQUklNQVJZX09VVExFVDtcbiAgICBhY3RpdmF0ZUV2ZW50cyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICBkZWFjdGl2YXRlRXZlbnRzID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIGF0dGFjaEV2ZW50cyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICBkZXRhY2hFdmVudHMgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgcm91dGVyT3V0bGV0RGF0YSA9IGlucHV0KC4uLihuZ0Rldk1vZGUgPyBbdW5kZWZpbmVkLCB7XG4gICAgICBkZWJ1Z05hbWU6IFwicm91dGVyT3V0bGV0RGF0YVwiXG4gICAgfV0gOiBbXSkpO1xuICAgIHBhcmVudENvbnRleHRzID0gaW5qZWN0KENoaWxkcmVuT3V0bGV0Q29udGV4dHMpO1xuICAgIGxvY2F0aW9uID0gaW5qZWN0KFZpZXdDb250YWluZXJSZWYpO1xuICAgIGNoYW5nZURldGVjdG9yID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcbiAgICBpbnB1dEJpbmRlciA9IGluamVjdChJTlBVVF9CSU5ERVIsIHtcbiAgICAgIG9wdGlvbmFsOiB0cnVlXG4gICAgfSk7XG4gICAgc3VwcG9ydHNCaW5kaW5nVG9Db21wb25lbnRJbnB1dHMgPSB0cnVlO1xuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXMpIHtcbiAgICAgIGlmIChjaGFuZ2VzWyduYW1lJ10pIHtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgIGZpcnN0Q2hhbmdlLFxuICAgICAgICAgIHByZXZpb3VzVmFsdWVcbiAgICAgICAgfSA9IGNoYW5nZXNbJ25hbWUnXTtcbiAgICAgICAgaWYgKGZpcnN0Q2hhbmdlKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmlzVHJhY2tlZEluUGFyZW50Q29udGV4dHMocHJldmlvdXNWYWx1ZSkpIHtcbiAgICAgICAgICB0aGlzLmRlYWN0aXZhdGUoKTtcbiAgICAgICAgICB0aGlzLnBhcmVudENvbnRleHRzLm9uQ2hpbGRPdXRsZXREZXN0cm95ZWQocHJldmlvdXNWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbml0aWFsaXplT3V0bGV0V2l0aE5hbWUoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICBpZiAodGhpcy5pc1RyYWNrZWRJblBhcmVudENvbnRleHRzKHRoaXMubmFtZSkpIHtcbiAgICAgICAgdGhpcy5wYXJlbnRDb250ZXh0cy5vbkNoaWxkT3V0bGV0RGVzdHJveWVkKHRoaXMubmFtZSk7XG4gICAgICB9XG4gICAgICB0aGlzLmlucHV0QmluZGVyPy51bnN1YnNjcmliZUZyb21Sb3V0ZURhdGEodGhpcyk7XG4gICAgfVxuICAgIGlzVHJhY2tlZEluUGFyZW50Q29udGV4dHMob3V0bGV0TmFtZSkge1xuICAgICAgcmV0dXJuIHRoaXMucGFyZW50Q29udGV4dHMuZ2V0Q29udGV4dChvdXRsZXROYW1lKT8ub3V0bGV0ID09PSB0aGlzO1xuICAgIH1cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZU91dGxldFdpdGhOYW1lKCk7XG4gICAgfVxuICAgIGluaXRpYWxpemVPdXRsZXRXaXRoTmFtZSgpIHtcbiAgICAgIHRoaXMucGFyZW50Q29udGV4dHMub25DaGlsZE91dGxldENyZWF0ZWQodGhpcy5uYW1lLCB0aGlzKTtcbiAgICAgIGlmICh0aGlzLmFjdGl2YXRlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5wYXJlbnRDb250ZXh0cy5nZXRDb250ZXh0KHRoaXMubmFtZSk7XG4gICAgICBpZiAoY29udGV4dD8ucm91dGUpIHtcbiAgICAgICAgaWYgKGNvbnRleHQuYXR0YWNoUmVmKSB7XG4gICAgICAgICAgdGhpcy5hdHRhY2goY29udGV4dC5hdHRhY2hSZWYsIGNvbnRleHQucm91dGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuYWN0aXZhdGVXaXRoKGNvbnRleHQucm91dGUsIGNvbnRleHQuaW5qZWN0b3IpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGdldCBpc0FjdGl2YXRlZCgpIHtcbiAgICAgIHJldHVybiAhIXRoaXMuYWN0aXZhdGVkO1xuICAgIH1cbiAgICBnZXQgY29tcG9uZW50KCkge1xuICAgICAgaWYgKCF0aGlzLmFjdGl2YXRlZCkgdGhyb3cgbmV3IF9SdW50aW1lRXJyb3IoNDAxMiwgKHR5cGVvZiBuZ0Rldk1vZGUgPT09ICd1bmRlZmluZWQnIHx8IG5nRGV2TW9kZSkgJiYgJ091dGxldCBpcyBub3QgYWN0aXZhdGVkJyk7XG4gICAgICByZXR1cm4gdGhpcy5hY3RpdmF0ZWQuaW5zdGFuY2U7XG4gICAgfVxuICAgIGdldCBhY3RpdmF0ZWRSb3V0ZSgpIHtcbiAgICAgIGlmICghdGhpcy5hY3RpdmF0ZWQpIHRocm93IG5ldyBfUnVudGltZUVycm9yKDQwMTIsICh0eXBlb2YgbmdEZXZNb2RlID09PSAndW5kZWZpbmVkJyB8fCBuZ0Rldk1vZGUpICYmICdPdXRsZXQgaXMgbm90IGFjdGl2YXRlZCcpO1xuICAgICAgcmV0dXJuIHRoaXMuX2FjdGl2YXRlZFJvdXRlO1xuICAgIH1cbiAgICBnZXQgYWN0aXZhdGVkUm91dGVEYXRhKCkge1xuICAgICAgaWYgKHRoaXMuX2FjdGl2YXRlZFJvdXRlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hY3RpdmF0ZWRSb3V0ZS5zbmFwc2hvdC5kYXRhO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgICBkZXRhY2goKSB7XG4gICAgICBpZiAoIXRoaXMuYWN0aXZhdGVkKSB0aHJvdyBuZXcgX1J1bnRpbWVFcnJvcig0MDEyLCAodHlwZW9mIG5nRGV2TW9kZSA9PT0gJ3VuZGVmaW5lZCcgfHwgbmdEZXZNb2RlKSAmJiAnT3V0bGV0IGlzIG5vdCBhY3RpdmF0ZWQnKTtcbiAgICAgIHRoaXMubG9jYXRpb24uZGV0YWNoKCk7XG4gICAgICBjb25zdCBjbXAgPSB0aGlzLmFjdGl2YXRlZDtcbiAgICAgIHRoaXMuYWN0aXZhdGVkID0gbnVsbDtcbiAgICAgIHRoaXMuX2FjdGl2YXRlZFJvdXRlID0gbnVsbDtcbiAgICAgIHRoaXMuZGV0YWNoRXZlbnRzLmVtaXQoY21wLmluc3RhbmNlKTtcbiAgICAgIHJldHVybiBjbXA7XG4gICAgfVxuICAgIGF0dGFjaChyZWYsIGFjdGl2YXRlZFJvdXRlKSB7XG4gICAgICB0aGlzLmFjdGl2YXRlZCA9IHJlZjtcbiAgICAgIHRoaXMuX2FjdGl2YXRlZFJvdXRlID0gYWN0aXZhdGVkUm91dGU7XG4gICAgICB0aGlzLmxvY2F0aW9uLmluc2VydChyZWYuaG9zdFZpZXcpO1xuICAgICAgdGhpcy5pbnB1dEJpbmRlcj8uYmluZEFjdGl2YXRlZFJvdXRlVG9PdXRsZXRDb21wb25lbnQodGhpcyk7XG4gICAgICB0aGlzLmF0dGFjaEV2ZW50cy5lbWl0KHJlZi5pbnN0YW5jZSk7XG4gICAgfVxuICAgIGRlYWN0aXZhdGUoKSB7XG4gICAgICBpZiAodGhpcy5hY3RpdmF0ZWQpIHtcbiAgICAgICAgY29uc3QgYyA9IHRoaXMuY29tcG9uZW50O1xuICAgICAgICB0aGlzLmFjdGl2YXRlZC5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMuYWN0aXZhdGVkID0gbnVsbDtcbiAgICAgICAgdGhpcy5fYWN0aXZhdGVkUm91dGUgPSBudWxsO1xuICAgICAgICB0aGlzLmRlYWN0aXZhdGVFdmVudHMuZW1pdChjKTtcbiAgICAgIH1cbiAgICB9XG4gICAgYWN0aXZhdGVXaXRoKGFjdGl2YXRlZFJvdXRlLCBlbnZpcm9ubWVudEluamVjdG9yKSB7XG4gICAgICBpZiAodGhpcy5pc0FjdGl2YXRlZCkge1xuICAgICAgICB0aHJvdyBuZXcgX1J1bnRpbWVFcnJvcig0MDEzLCAodHlwZW9mIG5nRGV2TW9kZSA9PT0gJ3VuZGVmaW5lZCcgfHwgbmdEZXZNb2RlKSAmJiAnQ2Fubm90IGFjdGl2YXRlIGFuIGFscmVhZHkgYWN0aXZhdGVkIG91dGxldCcpO1xuICAgICAgfVxuICAgICAgdGhpcy5fYWN0aXZhdGVkUm91dGUgPSBhY3RpdmF0ZWRSb3V0ZTtcbiAgICAgIGNvbnN0IGxvY2F0aW9uID0gdGhpcy5sb2NhdGlvbjtcbiAgICAgIGNvbnN0IHNuYXBzaG90ID0gYWN0aXZhdGVkUm91dGUuc25hcHNob3Q7XG4gICAgICBjb25zdCBjb21wb25lbnQgPSBzbmFwc2hvdC5jb21wb25lbnQ7XG4gICAgICBjb25zdCBjaGlsZENvbnRleHRzID0gdGhpcy5wYXJlbnRDb250ZXh0cy5nZXRPckNyZWF0ZUNvbnRleHQodGhpcy5uYW1lKS5jaGlsZHJlbjtcbiAgICAgIGNvbnN0IGluamVjdG9yID0gbmV3IE91dGxldEluamVjdG9yKGFjdGl2YXRlZFJvdXRlLCBjaGlsZENvbnRleHRzLCBsb2NhdGlvbi5pbmplY3RvciwgdGhpcy5yb3V0ZXJPdXRsZXREYXRhKTtcbiAgICAgIHRoaXMuYWN0aXZhdGVkID0gbG9jYXRpb24uY3JlYXRlQ29tcG9uZW50KGNvbXBvbmVudCwge1xuICAgICAgICBpbmRleDogbG9jYXRpb24ubGVuZ3RoLFxuICAgICAgICBpbmplY3RvcixcbiAgICAgICAgZW52aXJvbm1lbnRJbmplY3RvcjogZW52aXJvbm1lbnRJbmplY3RvclxuICAgICAgfSk7XG4gICAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgICAgdGhpcy5pbnB1dEJpbmRlcj8uYmluZEFjdGl2YXRlZFJvdXRlVG9PdXRsZXRDb21wb25lbnQodGhpcyk7XG4gICAgICB0aGlzLmFjdGl2YXRlRXZlbnRzLmVtaXQodGhpcy5hY3RpdmF0ZWQuaW5zdGFuY2UpO1xuICAgIH1cbiAgICBzdGF0aWMgybVmYWMgPSBmdW5jdGlvbiBSb3V0ZXJPdXRsZXRfRmFjdG9yeShfX25nRmFjdG9yeVR5cGVfXykge1xuICAgICAgcmV0dXJuIG5ldyAoX19uZ0ZhY3RvcnlUeXBlX18gfHwgUm91dGVyT3V0bGV0KSgpO1xuICAgIH07XG4gICAgc3RhdGljIMm1ZGlyID0gLyogQF9fUFVSRV9fICovaTAuybXJtWRlZmluZURpcmVjdGl2ZSh7XG4gICAgICB0eXBlOiBSb3V0ZXJPdXRsZXQsXG4gICAgICBzZWxlY3RvcnM6IFtbXCJyb3V0ZXItb3V0bGV0XCJdXSxcbiAgICAgIGlucHV0czoge1xuICAgICAgICBuYW1lOiBcIm5hbWVcIixcbiAgICAgICAgcm91dGVyT3V0bGV0RGF0YTogWzEsIFwicm91dGVyT3V0bGV0RGF0YVwiXVxuICAgICAgfSxcbiAgICAgIG91dHB1dHM6IHtcbiAgICAgICAgYWN0aXZhdGVFdmVudHM6IFwiYWN0aXZhdGVcIixcbiAgICAgICAgZGVhY3RpdmF0ZUV2ZW50czogXCJkZWFjdGl2YXRlXCIsXG4gICAgICAgIGF0dGFjaEV2ZW50czogXCJhdHRhY2hcIixcbiAgICAgICAgZGV0YWNoRXZlbnRzOiBcImRldGFjaFwiXG4gICAgICB9LFxuICAgICAgZXhwb3J0QXM6IFtcIm91dGxldFwiXSxcbiAgICAgIGZlYXR1cmVzOiBbaTAuybXJtU5nT25DaGFuZ2VzRmVhdHVyZV1cbiAgICB9KTtcbiAgfVxuICByZXR1cm4gUm91dGVyT3V0bGV0O1xufSkoKTtcbi8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICAodHlwZW9mIG5nRGV2TW9kZSA9PT0gXCJ1bmRlZmluZWRcIiB8fCBuZ0Rldk1vZGUpICYmIHZvaWQgMDtcbn0pKCk7XG5jbGFzcyBPdXRsZXRJbmplY3RvciB7XG4gIHJvdXRlO1xuICBjaGlsZENvbnRleHRzO1xuICBwYXJlbnQ7XG4gIG91dGxldERhdGE7XG4gIGNvbnN0cnVjdG9yKHJvdXRlLCBjaGlsZENvbnRleHRzLCBwYXJlbnQsIG91dGxldERhdGEpIHtcbiAgICB0aGlzLnJvdXRlID0gcm91dGU7XG4gICAgdGhpcy5jaGlsZENvbnRleHRzID0gY2hpbGRDb250ZXh0cztcbiAgICB0aGlzLnBhcmVudCA9IHBhcmVudDtcbiAgICB0aGlzLm91dGxldERhdGEgPSBvdXRsZXREYXRhO1xuICB9XG4gIGdldCh0b2tlbiwgbm90Rm91bmRWYWx1ZSkge1xuICAgIGlmICh0b2tlbiA9PT0gQWN0aXZhdGVkUm91dGUpIHtcbiAgICAgIHJldHVybiB0aGlzLnJvdXRlO1xuICAgIH1cbiAgICBpZiAodG9rZW4gPT09IENoaWxkcmVuT3V0bGV0Q29udGV4dHMpIHtcbiAgICAgIHJldHVybiB0aGlzLmNoaWxkQ29udGV4dHM7XG4gICAgfVxuICAgIGlmICh0b2tlbiA9PT0gUk9VVEVSX09VVExFVF9EQVRBKSB7XG4gICAgICByZXR1cm4gdGhpcy5vdXRsZXREYXRhO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5wYXJlbnQuZ2V0KHRva2VuLCBub3RGb3VuZFZhbHVlKTtcbiAgfVxufVxuY29uc3QgSU5QVVRfQklOREVSID0gLyojX19QVVJFX18qL25ldyBJbmplY3Rpb25Ub2tlbih0eXBlb2YgbmdEZXZNb2RlICE9PSAndW5kZWZpbmVkJyAmJiBuZ0Rldk1vZGUgPyAnUm91dGVyIElucHV0IEJpbmRlcicgOiAnJyk7XG5sZXQgUm91dGVkQ29tcG9uZW50SW5wdXRCaW5kZXIgPSAvKiNfX1BVUkVfXyovKCgpID0+IHtcbiAgY2xhc3MgUm91dGVkQ29tcG9uZW50SW5wdXRCaW5kZXIge1xuICAgIG91dGxldERhdGFTdWJzY3JpcHRpb25zID0gbmV3IE1hcCgpO1xuICAgIGJpbmRBY3RpdmF0ZWRSb3V0ZVRvT3V0bGV0Q29tcG9uZW50KG91dGxldCkge1xuICAgICAgdGhpcy51bnN1YnNjcmliZUZyb21Sb3V0ZURhdGEob3V0bGV0KTtcbiAgICAgIHRoaXMuc3Vic2NyaWJlVG9Sb3V0ZURhdGEob3V0bGV0KTtcbiAgICB9XG4gICAgdW5zdWJzY3JpYmVGcm9tUm91dGVEYXRhKG91dGxldCkge1xuICAgICAgdGhpcy5vdXRsZXREYXRhU3Vic2NyaXB0aW9ucy5nZXQob3V0bGV0KT8udW5zdWJzY3JpYmUoKTtcbiAgICAgIHRoaXMub3V0bGV0RGF0YVN1YnNjcmlwdGlvbnMuZGVsZXRlKG91dGxldCk7XG4gICAgfVxuICAgIHN1YnNjcmliZVRvUm91dGVEYXRhKG91dGxldCkge1xuICAgICAgY29uc3Qge1xuICAgICAgICBhY3RpdmF0ZWRSb3V0ZVxuICAgICAgfSA9IG91dGxldDtcbiAgICAgIGNvbnN0IGRhdGFTdWJzY3JpcHRpb24gPSBjb21iaW5lTGF0ZXN0KFthY3RpdmF0ZWRSb3V0ZS5xdWVyeVBhcmFtcywgYWN0aXZhdGVkUm91dGUucGFyYW1zLCBhY3RpdmF0ZWRSb3V0ZS5kYXRhXSkucGlwZShzd2l0Y2hNYXAoKFtxdWVyeVBhcmFtcywgcGFyYW1zLCBkYXRhXSwgaW5kZXgpID0+IHtcbiAgICAgICAgZGF0YSA9IHtcbiAgICAgICAgICAuLi5xdWVyeVBhcmFtcyxcbiAgICAgICAgICAuLi5wYXJhbXMsXG4gICAgICAgICAgLi4uZGF0YVxuICAgICAgICB9O1xuICAgICAgICBpZiAoaW5kZXggPT09IDApIHtcbiAgICAgICAgICByZXR1cm4gb2YoZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShkYXRhKTtcbiAgICAgIH0pKS5zdWJzY3JpYmUoZGF0YSA9PiB7XG4gICAgICAgIGlmICghb3V0bGV0LmlzQWN0aXZhdGVkIHx8ICFvdXRsZXQuYWN0aXZhdGVkQ29tcG9uZW50UmVmIHx8IG91dGxldC5hY3RpdmF0ZWRSb3V0ZSAhPT0gYWN0aXZhdGVkUm91dGUgfHwgYWN0aXZhdGVkUm91dGUuY29tcG9uZW50ID09PSBudWxsKSB7XG4gICAgICAgICAgdGhpcy51bnN1YnNjcmliZUZyb21Sb3V0ZURhdGEob3V0bGV0KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbWlycm9yID0gcmVmbGVjdENvbXBvbmVudFR5cGUoYWN0aXZhdGVkUm91dGUuY29tcG9uZW50KTtcbiAgICAgICAgaWYgKCFtaXJyb3IpIHtcbiAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlRnJvbVJvdXRlRGF0YShvdXRsZXQpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IHtcbiAgICAgICAgICB0ZW1wbGF0ZU5hbWVcbiAgICAgICAgfSBvZiBtaXJyb3IuaW5wdXRzKSB7XG4gICAgICAgICAgb3V0bGV0LmFjdGl2YXRlZENvbXBvbmVudFJlZi5zZXRJbnB1dCh0ZW1wbGF0ZU5hbWUsIGRhdGFbdGVtcGxhdGVOYW1lXSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgdGhpcy5vdXRsZXREYXRhU3Vic2NyaXB0aW9ucy5zZXQob3V0bGV0LCBkYXRhU3Vic2NyaXB0aW9uKTtcbiAgICB9XG4gICAgc3RhdGljIMm1ZmFjID0gZnVuY3Rpb24gUm91dGVkQ29tcG9uZW50SW5wdXRCaW5kZXJfRmFjdG9yeShfX25nRmFjdG9yeVR5cGVfXykge1xuICAgICAgcmV0dXJuIG5ldyAoX19uZ0ZhY3RvcnlUeXBlX18gfHwgUm91dGVkQ29tcG9uZW50SW5wdXRCaW5kZXIpKCk7XG4gICAgfTtcbiAgICBzdGF0aWMgybVwcm92ID0gLyogQF9fUFVSRV9fICovaTAuybXJtWRlZmluZUluamVjdGFibGUoe1xuICAgICAgdG9rZW46IFJvdXRlZENvbXBvbmVudElucHV0QmluZGVyLFxuICAgICAgZmFjdG9yeTogUm91dGVkQ29tcG9uZW50SW5wdXRCaW5kZXIuybVmYWNcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gUm91dGVkQ29tcG9uZW50SW5wdXRCaW5kZXI7XG59KSgpO1xuLyojX19QVVJFX18qLygoKSA9PiB7XG4gICh0eXBlb2YgbmdEZXZNb2RlID09PSBcInVuZGVmaW5lZFwiIHx8IG5nRGV2TW9kZSkgJiYgdm9pZCAwO1xufSkoKTtcbmxldCDJtUVtcHR5T3V0bGV0Q29tcG9uZW50ID0gLyojX19QVVJFX18qLygoKSA9PiB7XG4gIGNsYXNzIMm1RW1wdHlPdXRsZXRDb21wb25lbnQge1xuICAgIHN0YXRpYyDJtWZhYyA9IGZ1bmN0aW9uIMm1RW1wdHlPdXRsZXRDb21wb25lbnRfRmFjdG9yeShfX25nRmFjdG9yeVR5cGVfXykge1xuICAgICAgcmV0dXJuIG5ldyAoX19uZ0ZhY3RvcnlUeXBlX18gfHwgybVFbXB0eU91dGxldENvbXBvbmVudCkoKTtcbiAgICB9O1xuICAgIHN0YXRpYyDJtWNtcCA9IC8qIEBfX1BVUkVfXyAqL2kwLsm1ybVkZWZpbmVDb21wb25lbnQoe1xuICAgICAgdHlwZTogybVFbXB0eU91dGxldENvbXBvbmVudCxcbiAgICAgIHNlbGVjdG9yczogW1tcIm5nLWNvbXBvbmVudFwiXV0sXG4gICAgICBleHBvcnRBczogW1wiZW1wdHlSb3V0ZXJPdXRsZXRcIl0sXG4gICAgICBkZWNsczogMSxcbiAgICAgIHZhcnM6IDAsXG4gICAgICB0ZW1wbGF0ZTogZnVuY3Rpb24gX0VtcHR5T3V0bGV0Q29tcG9uZW50X1RlbXBsYXRlKHJmLCBjdHgpIHtcbiAgICAgICAgaWYgKHJmICYgMSkge1xuICAgICAgICAgIGkwLsm1ybVlbGVtZW50KDAsIFwicm91dGVyLW91dGxldFwiKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGRlcGVuZGVuY2llczogW1JvdXRlck91dGxldF0sXG4gICAgICBlbmNhcHN1bGF0aW9uOiAyXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIMm1RW1wdHlPdXRsZXRDb21wb25lbnQ7XG59KSgpO1xuLyojX19QVVJFX18qLygoKSA9PiB7XG4gICh0eXBlb2YgbmdEZXZNb2RlID09PSBcInVuZGVmaW5lZFwiIHx8IG5nRGV2TW9kZSkgJiYgdm9pZCAwO1xufSkoKTtcbmZ1bmN0aW9uIHN0YW5kYXJkaXplQ29uZmlnKHIpIHtcbiAgY29uc3QgY2hpbGRyZW4gPSByLmNoaWxkcmVuICYmIHIuY2hpbGRyZW4ubWFwKHN0YW5kYXJkaXplQ29uZmlnKTtcbiAgY29uc3QgYyA9IGNoaWxkcmVuID8ge1xuICAgIC4uLnIsXG4gICAgY2hpbGRyZW5cbiAgfSA6IHtcbiAgICAuLi5yXG4gIH07XG4gIGlmICghYy5jb21wb25lbnQgJiYgIWMubG9hZENvbXBvbmVudCAmJiAoY2hpbGRyZW4gfHwgYy5sb2FkQ2hpbGRyZW4pICYmIGMub3V0bGV0ICYmIGMub3V0bGV0ICE9PSBQUklNQVJZX09VVExFVCkge1xuICAgIGMuY29tcG9uZW50ID0gybVFbXB0eU91dGxldENvbXBvbmVudDtcbiAgfVxuICByZXR1cm4gYztcbn1cbmZ1bmN0aW9uIGNyZWF0ZVJvdXRlclN0YXRlKHJvdXRlUmV1c2VTdHJhdGVneSwgY3VyciwgcHJldlN0YXRlKSB7XG4gIGNvbnN0IHJvb3QgPSBjcmVhdGVOb2RlKHJvdXRlUmV1c2VTdHJhdGVneSwgY3Vyci5fcm9vdCwgcHJldlN0YXRlID8gcHJldlN0YXRlLl9yb290IDogdW5kZWZpbmVkKTtcbiAgcmV0dXJuIG5ldyBSb3V0ZXJTdGF0ZShyb290LCBjdXJyKTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZU5vZGUocm91dGVSZXVzZVN0cmF0ZWd5LCBjdXJyLCBwcmV2U3RhdGUpIHtcbiAgaWYgKHByZXZTdGF0ZSAmJiByb3V0ZVJldXNlU3RyYXRlZ3kuc2hvdWxkUmV1c2VSb3V0ZShjdXJyLnZhbHVlLCBwcmV2U3RhdGUudmFsdWUuc25hcHNob3QpKSB7XG4gICAgY29uc3QgdmFsdWUgPSBwcmV2U3RhdGUudmFsdWU7XG4gICAgdmFsdWUuX2Z1dHVyZVNuYXBzaG90ID0gY3Vyci52YWx1ZTtcbiAgICBjb25zdCBjaGlsZHJlbiA9IGNyZWF0ZU9yUmV1c2VDaGlsZHJlbihyb3V0ZVJldXNlU3RyYXRlZ3ksIGN1cnIsIHByZXZTdGF0ZSk7XG4gICAgcmV0dXJuIG5ldyBUcmVlTm9kZSh2YWx1ZSwgY2hpbGRyZW4pO1xuICB9IGVsc2Uge1xuICAgIGlmIChyb3V0ZVJldXNlU3RyYXRlZ3kuc2hvdWxkQXR0YWNoKGN1cnIudmFsdWUpKSB7XG4gICAgICBjb25zdCBkZXRhY2hlZFJvdXRlSGFuZGxlID0gcm91dGVSZXVzZVN0cmF0ZWd5LnJldHJpZXZlKGN1cnIudmFsdWUpO1xuICAgICAgaWYgKGRldGFjaGVkUm91dGVIYW5kbGUgIT09IG51bGwpIHtcbiAgICAgICAgY29uc3QgdHJlZSA9IGRldGFjaGVkUm91dGVIYW5kbGUucm91dGU7XG4gICAgICAgIHRyZWUudmFsdWUuX2Z1dHVyZVNuYXBzaG90ID0gY3Vyci52YWx1ZTtcbiAgICAgICAgdHJlZS5jaGlsZHJlbiA9IGN1cnIuY2hpbGRyZW4ubWFwKGMgPT4gY3JlYXRlTm9kZShyb3V0ZVJldXNlU3RyYXRlZ3ksIGMpKTtcbiAgICAgICAgcmV0dXJuIHRyZWU7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHZhbHVlID0gY3JlYXRlQWN0aXZhdGVkUm91dGUoY3Vyci52YWx1ZSk7XG4gICAgY29uc3QgY2hpbGRyZW4gPSBjdXJyLmNoaWxkcmVuLm1hcChjID0+IGNyZWF0ZU5vZGUocm91dGVSZXVzZVN0cmF0ZWd5LCBjKSk7XG4gICAgcmV0dXJuIG5ldyBUcmVlTm9kZSh2YWx1ZSwgY2hpbGRyZW4pO1xuICB9XG59XG5mdW5jdGlvbiBjcmVhdGVPclJldXNlQ2hpbGRyZW4ocm91dGVSZXVzZVN0cmF0ZWd5LCBjdXJyLCBwcmV2U3RhdGUpIHtcbiAgcmV0dXJuIGN1cnIuY2hpbGRyZW4ubWFwKGNoaWxkID0+IHtcbiAgICBmb3IgKGNvbnN0IHAgb2YgcHJldlN0YXRlLmNoaWxkcmVuKSB7XG4gICAgICBpZiAocm91dGVSZXVzZVN0cmF0ZWd5LnNob3VsZFJldXNlUm91dGUoY2hpbGQudmFsdWUsIHAudmFsdWUuc25hcHNob3QpKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVOb2RlKHJvdXRlUmV1c2VTdHJhdGVneSwgY2hpbGQsIHApO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlTm9kZShyb3V0ZVJldXNlU3RyYXRlZ3ksIGNoaWxkKTtcbiAgfSk7XG59XG5mdW5jdGlvbiBjcmVhdGVBY3RpdmF0ZWRSb3V0ZShjKSB7XG4gIHJldHVybiBuZXcgQWN0aXZhdGVkUm91dGUobmV3IEJlaGF2aW9yU3ViamVjdChjLnVybCksIG5ldyBCZWhhdmlvclN1YmplY3QoYy5wYXJhbXMpLCBuZXcgQmVoYXZpb3JTdWJqZWN0KGMucXVlcnlQYXJhbXMpLCBuZXcgQmVoYXZpb3JTdWJqZWN0KGMuZnJhZ21lbnQpLCBuZXcgQmVoYXZpb3JTdWJqZWN0KGMuZGF0YSksIGMub3V0bGV0LCBjLmNvbXBvbmVudCwgYyk7XG59XG5jbGFzcyBSZWRpcmVjdENvbW1hbmQge1xuICByZWRpcmVjdFRvO1xuICBuYXZpZ2F0aW9uQmVoYXZpb3JPcHRpb25zO1xuICBjb25zdHJ1Y3RvcihyZWRpcmVjdFRvLCBuYXZpZ2F0aW9uQmVoYXZpb3JPcHRpb25zKSB7XG4gICAgdGhpcy5yZWRpcmVjdFRvID0gcmVkaXJlY3RUbztcbiAgICB0aGlzLm5hdmlnYXRpb25CZWhhdmlvck9wdGlvbnMgPSBuYXZpZ2F0aW9uQmVoYXZpb3JPcHRpb25zO1xuICB9XG59XG5jb25zdCBOQVZJR0FUSU9OX0NBTkNFTElOR19FUlJPUiA9ICduZ05hdmlnYXRpb25DYW5jZWxpbmdFcnJvcic7XG5mdW5jdGlvbiByZWRpcmVjdGluZ05hdmlnYXRpb25FcnJvcih1cmxTZXJpYWxpemVyLCByZWRpcmVjdCkge1xuICBjb25zdCB7XG4gICAgcmVkaXJlY3RUbyxcbiAgICBuYXZpZ2F0aW9uQmVoYXZpb3JPcHRpb25zXG4gIH0gPSBpc1VybFRyZWUocmVkaXJlY3QpID8ge1xuICAgIHJlZGlyZWN0VG86IHJlZGlyZWN0LFxuICAgIG5hdmlnYXRpb25CZWhhdmlvck9wdGlvbnM6IHVuZGVmaW5lZFxuICB9IDogcmVkaXJlY3Q7XG4gIGNvbnN0IGVycm9yID0gbmF2aWdhdGlvbkNhbmNlbGluZ0Vycm9yKG5nRGV2TW9kZSAmJiBgUmVkaXJlY3RpbmcgdG8gXCIke3VybFNlcmlhbGl6ZXIuc2VyaWFsaXplKHJlZGlyZWN0VG8pfVwiYCwgTmF2aWdhdGlvbkNhbmNlbGxhdGlvbkNvZGUuUmVkaXJlY3QpO1xuICBlcnJvci51cmwgPSByZWRpcmVjdFRvO1xuICBlcnJvci5uYXZpZ2F0aW9uQmVoYXZpb3JPcHRpb25zID0gbmF2aWdhdGlvbkJlaGF2aW9yT3B0aW9ucztcbiAgcmV0dXJuIGVycm9yO1xufVxuZnVuY3Rpb24gbmF2aWdhdGlvbkNhbmNlbGluZ0Vycm9yKG1lc3NhZ2UsIGNvZGUpIHtcbiAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoYE5hdmlnYXRpb25DYW5jZWxpbmdFcnJvcjogJHttZXNzYWdlIHx8ICcnfWApO1xuICBlcnJvcltOQVZJR0FUSU9OX0NBTkNFTElOR19FUlJPUl0gPSB0cnVlO1xuICBlcnJvci5jYW5jZWxsYXRpb25Db2RlID0gY29kZTtcbiAgcmV0dXJuIGVycm9yO1xufVxuZnVuY3Rpb24gaXNSZWRpcmVjdGluZ05hdmlnYXRpb25DYW5jZWxpbmdFcnJvcihlcnJvcikge1xuICByZXR1cm4gaXNOYXZpZ2F0aW9uQ2FuY2VsaW5nRXJyb3IoZXJyb3IpICYmIGlzVXJsVHJlZShlcnJvci51cmwpO1xufVxuZnVuY3Rpb24gaXNOYXZpZ2F0aW9uQ2FuY2VsaW5nRXJyb3IoZXJyb3IpIHtcbiAgcmV0dXJuICEhZXJyb3IgJiYgZXJyb3JbTkFWSUdBVElPTl9DQU5DRUxJTkdfRVJST1JdO1xufVxubGV0IHdhcm5lZEFib3V0VW5zdXBwb3J0ZWRJbnB1dEJpbmRpbmcgPSBmYWxzZTtcbmNsYXNzIEFjdGl2YXRlUm91dGVzIHtcbiAgcm91dGVSZXVzZVN0cmF0ZWd5O1xuICBmdXR1cmVTdGF0ZTtcbiAgY3VyclN0YXRlO1xuICBmb3J3YXJkRXZlbnQ7XG4gIGlucHV0QmluZGluZ0VuYWJsZWQ7XG4gIGNvbnN0cnVjdG9yKHJvdXRlUmV1c2VTdHJhdGVneSwgZnV0dXJlU3RhdGUsIGN1cnJTdGF0ZSwgZm9yd2FyZEV2ZW50LCBpbnB1dEJpbmRpbmdFbmFibGVkKSB7XG4gICAgdGhpcy5yb3V0ZVJldXNlU3RyYXRlZ3kgPSByb3V0ZVJldXNlU3RyYXRlZ3k7XG4gICAgdGhpcy5mdXR1cmVTdGF0ZSA9IGZ1dHVyZVN0YXRlO1xuICAgIHRoaXMuY3VyclN0YXRlID0gY3VyclN0YXRlO1xuICAgIHRoaXMuZm9yd2FyZEV2ZW50ID0gZm9yd2FyZEV2ZW50O1xuICAgIHRoaXMuaW5wdXRCaW5kaW5nRW5hYmxlZCA9IGlucHV0QmluZGluZ0VuYWJsZWQ7XG4gIH1cbiAgYWN0aXZhdGUocGFyZW50Q29udGV4dHMpIHtcbiAgICBjb25zdCBmdXR1cmVSb290ID0gdGhpcy5mdXR1cmVTdGF0ZS5fcm9vdDtcbiAgICBjb25zdCBjdXJyUm9vdCA9IHRoaXMuY3VyclN0YXRlID8gdGhpcy5jdXJyU3RhdGUuX3Jvb3QgOiBudWxsO1xuICAgIHRoaXMuZGVhY3RpdmF0ZUNoaWxkUm91dGVzKGZ1dHVyZVJvb3QsIGN1cnJSb290LCBwYXJlbnRDb250ZXh0cyk7XG4gICAgYWR2YW5jZUFjdGl2YXRlZFJvdXRlKHRoaXMuZnV0dXJlU3RhdGUucm9vdCk7XG4gICAgdGhpcy5hY3RpdmF0ZUNoaWxkUm91dGVzKGZ1dHVyZVJvb3QsIGN1cnJSb290LCBwYXJlbnRDb250ZXh0cyk7XG4gIH1cbiAgZGVhY3RpdmF0ZUNoaWxkUm91dGVzKGZ1dHVyZU5vZGUsIGN1cnJOb2RlLCBjb250ZXh0cykge1xuICAgIGNvbnN0IGNoaWxkcmVuID0gbm9kZUNoaWxkcmVuQXNNYXAoY3Vyck5vZGUpO1xuICAgIGZ1dHVyZU5vZGUuY2hpbGRyZW4uZm9yRWFjaChmdXR1cmVDaGlsZCA9PiB7XG4gICAgICBjb25zdCBjaGlsZE91dGxldE5hbWUgPSBmdXR1cmVDaGlsZC52YWx1ZS5vdXRsZXQ7XG4gICAgICB0aGlzLmRlYWN0aXZhdGVSb3V0ZXMoZnV0dXJlQ2hpbGQsIGNoaWxkcmVuW2NoaWxkT3V0bGV0TmFtZV0sIGNvbnRleHRzKTtcbiAgICAgIGRlbGV0ZSBjaGlsZHJlbltjaGlsZE91dGxldE5hbWVdO1xuICAgIH0pO1xuICAgIE9iamVjdC52YWx1ZXMoY2hpbGRyZW4pLmZvckVhY2godiA9PiB7XG4gICAgICB0aGlzLmRlYWN0aXZhdGVSb3V0ZUFuZEl0c0NoaWxkcmVuKHYsIGNvbnRleHRzKTtcbiAgICB9KTtcbiAgfVxuICBkZWFjdGl2YXRlUm91dGVzKGZ1dHVyZU5vZGUsIGN1cnJOb2RlLCBwYXJlbnRDb250ZXh0KSB7XG4gICAgY29uc3QgZnV0dXJlID0gZnV0dXJlTm9kZS52YWx1ZTtcbiAgICBjb25zdCBjdXJyID0gY3Vyck5vZGUgPyBjdXJyTm9kZS52YWx1ZSA6IG51bGw7XG4gICAgaWYgKGZ1dHVyZSA9PT0gY3Vycikge1xuICAgICAgaWYgKGZ1dHVyZS5jb21wb25lbnQpIHtcbiAgICAgICAgY29uc3QgY29udGV4dCA9IHBhcmVudENvbnRleHQuZ2V0Q29udGV4dChmdXR1cmUub3V0bGV0KTtcbiAgICAgICAgaWYgKGNvbnRleHQpIHtcbiAgICAgICAgICB0aGlzLmRlYWN0aXZhdGVDaGlsZFJvdXRlcyhmdXR1cmVOb2RlLCBjdXJyTm9kZSwgY29udGV4dC5jaGlsZHJlbik7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZGVhY3RpdmF0ZUNoaWxkUm91dGVzKGZ1dHVyZU5vZGUsIGN1cnJOb2RlLCBwYXJlbnRDb250ZXh0KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGN1cnIpIHtcbiAgICAgICAgdGhpcy5kZWFjdGl2YXRlUm91dGVBbmRJdHNDaGlsZHJlbihjdXJyTm9kZSwgcGFyZW50Q29udGV4dCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGRlYWN0aXZhdGVSb3V0ZUFuZEl0c0NoaWxkcmVuKHJvdXRlLCBwYXJlbnRDb250ZXh0cykge1xuICAgIGlmIChyb3V0ZS52YWx1ZS5jb21wb25lbnQgJiYgdGhpcy5yb3V0ZVJldXNlU3RyYXRlZ3kuc2hvdWxkRGV0YWNoKHJvdXRlLnZhbHVlLnNuYXBzaG90KSkge1xuICAgICAgdGhpcy5kZXRhY2hBbmRTdG9yZVJvdXRlU3VidHJlZShyb3V0ZSwgcGFyZW50Q29udGV4dHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRlYWN0aXZhdGVSb3V0ZUFuZE91dGxldChyb3V0ZSwgcGFyZW50Q29udGV4dHMpO1xuICAgIH1cbiAgfVxuICBkZXRhY2hBbmRTdG9yZVJvdXRlU3VidHJlZShyb3V0ZSwgcGFyZW50Q29udGV4dHMpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gcGFyZW50Q29udGV4dHMuZ2V0Q29udGV4dChyb3V0ZS52YWx1ZS5vdXRsZXQpO1xuICAgIGNvbnN0IGNvbnRleHRzID0gY29udGV4dCAmJiByb3V0ZS52YWx1ZS5jb21wb25lbnQgPyBjb250ZXh0LmNoaWxkcmVuIDogcGFyZW50Q29udGV4dHM7XG4gICAgY29uc3QgY2hpbGRyZW4gPSBub2RlQ2hpbGRyZW5Bc01hcChyb3V0ZSk7XG4gICAgZm9yIChjb25zdCB0cmVlTm9kZSBvZiBPYmplY3QudmFsdWVzKGNoaWxkcmVuKSkge1xuICAgICAgdGhpcy5kZWFjdGl2YXRlUm91dGVBbmRJdHNDaGlsZHJlbih0cmVlTm9kZSwgY29udGV4dHMpO1xuICAgIH1cbiAgICBpZiAoY29udGV4dCAmJiBjb250ZXh0Lm91dGxldCkge1xuICAgICAgY29uc3QgY29tcG9uZW50UmVmID0gY29udGV4dC5vdXRsZXQuZGV0YWNoKCk7XG4gICAgICBjb25zdCBjb250ZXh0cyA9IGNvbnRleHQuY2hpbGRyZW4ub25PdXRsZXREZWFjdGl2YXRlZCgpO1xuICAgICAgdGhpcy5yb3V0ZVJldXNlU3RyYXRlZ3kuc3RvcmUocm91dGUudmFsdWUuc25hcHNob3QsIHtcbiAgICAgICAgY29tcG9uZW50UmVmLFxuICAgICAgICByb3V0ZSxcbiAgICAgICAgY29udGV4dHNcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICBkZWFjdGl2YXRlUm91dGVBbmRPdXRsZXQocm91dGUsIHBhcmVudENvbnRleHRzKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHBhcmVudENvbnRleHRzLmdldENvbnRleHQocm91dGUudmFsdWUub3V0bGV0KTtcbiAgICBjb25zdCBjb250ZXh0cyA9IGNvbnRleHQgJiYgcm91dGUudmFsdWUuY29tcG9uZW50ID8gY29udGV4dC5jaGlsZHJlbiA6IHBhcmVudENvbnRleHRzO1xuICAgIGNvbnN0IGNoaWxkcmVuID0gbm9kZUNoaWxkcmVuQXNNYXAocm91dGUpO1xuICAgIGZvciAoY29uc3QgdHJlZU5vZGUgb2YgT2JqZWN0LnZhbHVlcyhjaGlsZHJlbikpIHtcbiAgICAgIHRoaXMuZGVhY3RpdmF0ZVJvdXRlQW5kSXRzQ2hpbGRyZW4odHJlZU5vZGUsIGNvbnRleHRzKTtcbiAgICB9XG4gICAgaWYgKGNvbnRleHQpIHtcbiAgICAgIGlmIChjb250ZXh0Lm91dGxldCkge1xuICAgICAgICBjb250ZXh0Lm91dGxldC5kZWFjdGl2YXRlKCk7XG4gICAgICAgIGNvbnRleHQuY2hpbGRyZW4ub25PdXRsZXREZWFjdGl2YXRlZCgpO1xuICAgICAgfVxuICAgICAgY29udGV4dC5hdHRhY2hSZWYgPSBudWxsO1xuICAgICAgY29udGV4dC5yb3V0ZSA9IG51bGw7XG4gICAgfVxuICB9XG4gIGFjdGl2YXRlQ2hpbGRSb3V0ZXMoZnV0dXJlTm9kZSwgY3Vyck5vZGUsIGNvbnRleHRzKSB7XG4gICAgY29uc3QgY2hpbGRyZW4gPSBub2RlQ2hpbGRyZW5Bc01hcChjdXJyTm9kZSk7XG4gICAgZnV0dXJlTm9kZS5jaGlsZHJlbi5mb3JFYWNoKGMgPT4ge1xuICAgICAgdGhpcy5hY3RpdmF0ZVJvdXRlcyhjLCBjaGlsZHJlbltjLnZhbHVlLm91dGxldF0sIGNvbnRleHRzKTtcbiAgICAgIHRoaXMuZm9yd2FyZEV2ZW50KG5ldyBBY3RpdmF0aW9uRW5kKGMudmFsdWUuc25hcHNob3QpKTtcbiAgICB9KTtcbiAgICBpZiAoZnV0dXJlTm9kZS5jaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgIHRoaXMuZm9yd2FyZEV2ZW50KG5ldyBDaGlsZEFjdGl2YXRpb25FbmQoZnV0dXJlTm9kZS52YWx1ZS5zbmFwc2hvdCkpO1xuICAgIH1cbiAgfVxuICBhY3RpdmF0ZVJvdXRlcyhmdXR1cmVOb2RlLCBjdXJyTm9kZSwgcGFyZW50Q29udGV4dHMpIHtcbiAgICBjb25zdCBmdXR1cmUgPSBmdXR1cmVOb2RlLnZhbHVlO1xuICAgIGNvbnN0IGN1cnIgPSBjdXJyTm9kZSA/IGN1cnJOb2RlLnZhbHVlIDogbnVsbDtcbiAgICBhZHZhbmNlQWN0aXZhdGVkUm91dGUoZnV0dXJlKTtcbiAgICBpZiAoZnV0dXJlID09PSBjdXJyKSB7XG4gICAgICBpZiAoZnV0dXJlLmNvbXBvbmVudCkge1xuICAgICAgICBjb25zdCBjb250ZXh0ID0gcGFyZW50Q29udGV4dHMuZ2V0T3JDcmVhdGVDb250ZXh0KGZ1dHVyZS5vdXRsZXQpO1xuICAgICAgICB0aGlzLmFjdGl2YXRlQ2hpbGRSb3V0ZXMoZnV0dXJlTm9kZSwgY3Vyck5vZGUsIGNvbnRleHQuY2hpbGRyZW4pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5hY3RpdmF0ZUNoaWxkUm91dGVzKGZ1dHVyZU5vZGUsIGN1cnJOb2RlLCBwYXJlbnRDb250ZXh0cyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChmdXR1cmUuY29tcG9uZW50KSB7XG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSBwYXJlbnRDb250ZXh0cy5nZXRPckNyZWF0ZUNvbnRleHQoZnV0dXJlLm91dGxldCk7XG4gICAgICAgIGlmICh0aGlzLnJvdXRlUmV1c2VTdHJhdGVneS5zaG91bGRBdHRhY2goZnV0dXJlLnNuYXBzaG90KSkge1xuICAgICAgICAgIGNvbnN0IHN0b3JlZCA9IHRoaXMucm91dGVSZXVzZVN0cmF0ZWd5LnJldHJpZXZlKGZ1dHVyZS5zbmFwc2hvdCk7XG4gICAgICAgICAgdGhpcy5yb3V0ZVJldXNlU3RyYXRlZ3kuc3RvcmUoZnV0dXJlLnNuYXBzaG90LCBudWxsKTtcbiAgICAgICAgICBjb250ZXh0LmNoaWxkcmVuLm9uT3V0bGV0UmVBdHRhY2hlZChzdG9yZWQuY29udGV4dHMpO1xuICAgICAgICAgIGNvbnRleHQuYXR0YWNoUmVmID0gc3RvcmVkLmNvbXBvbmVudFJlZjtcbiAgICAgICAgICBjb250ZXh0LnJvdXRlID0gc3RvcmVkLnJvdXRlLnZhbHVlO1xuICAgICAgICAgIGlmIChjb250ZXh0Lm91dGxldCkge1xuICAgICAgICAgICAgY29udGV4dC5vdXRsZXQuYXR0YWNoKHN0b3JlZC5jb21wb25lbnRSZWYsIHN0b3JlZC5yb3V0ZS52YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGFkdmFuY2VBY3RpdmF0ZWRSb3V0ZShzdG9yZWQucm91dGUudmFsdWUpO1xuICAgICAgICAgIHRoaXMuYWN0aXZhdGVDaGlsZFJvdXRlcyhmdXR1cmVOb2RlLCBudWxsLCBjb250ZXh0LmNoaWxkcmVuKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb250ZXh0LmF0dGFjaFJlZiA9IG51bGw7XG4gICAgICAgICAgY29udGV4dC5yb3V0ZSA9IGZ1dHVyZTtcbiAgICAgICAgICBpZiAoY29udGV4dC5vdXRsZXQpIHtcbiAgICAgICAgICAgIGNvbnRleHQub3V0bGV0LmFjdGl2YXRlV2l0aChmdXR1cmUsIGNvbnRleHQuaW5qZWN0b3IpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmFjdGl2YXRlQ2hpbGRSb3V0ZXMoZnV0dXJlTm9kZSwgbnVsbCwgY29udGV4dC5jaGlsZHJlbik7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuYWN0aXZhdGVDaGlsZFJvdXRlcyhmdXR1cmVOb2RlLCBudWxsLCBwYXJlbnRDb250ZXh0cyk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0eXBlb2YgbmdEZXZNb2RlID09PSAndW5kZWZpbmVkJyB8fCBuZ0Rldk1vZGUpIHtcbiAgICAgIGNvbnN0IGNvbnRleHQgPSBwYXJlbnRDb250ZXh0cy5nZXRPckNyZWF0ZUNvbnRleHQoZnV0dXJlLm91dGxldCk7XG4gICAgICBjb25zdCBvdXRsZXQgPSBjb250ZXh0Lm91dGxldDtcbiAgICAgIGlmIChvdXRsZXQgJiYgdGhpcy5pbnB1dEJpbmRpbmdFbmFibGVkICYmICFvdXRsZXQuc3VwcG9ydHNCaW5kaW5nVG9Db21wb25lbnRJbnB1dHMgJiYgIXdhcm5lZEFib3V0VW5zdXBwb3J0ZWRJbnB1dEJpbmRpbmcpIHtcbiAgICAgICAgY29uc29sZS53YXJuKGAnd2l0aENvbXBvbmVudElucHV0QmluZGluZycgZmVhdHVyZSBpcyBlbmFibGVkIGJ1dCBgICsgYHRoaXMgYXBwbGljYXRpb24gaXMgdXNpbmcgYW4gb3V0bGV0IHRoYXQgbWF5IG5vdCBzdXBwb3J0IGJpbmRpbmcgdG8gY29tcG9uZW50IGlucHV0cy5gKTtcbiAgICAgICAgd2FybmVkQWJvdXRVbnN1cHBvcnRlZElucHV0QmluZGluZyA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5jbGFzcyBDYW5BY3RpdmF0ZSB7XG4gIHBhdGg7XG4gIHJvdXRlO1xuICBjb25zdHJ1Y3RvcihwYXRoKSB7XG4gICAgdGhpcy5wYXRoID0gcGF0aDtcbiAgICB0aGlzLnJvdXRlID0gdGhpcy5wYXRoW3RoaXMucGF0aC5sZW5ndGggLSAxXTtcbiAgfVxufVxuY2xhc3MgQ2FuRGVhY3RpdmF0ZSB7XG4gIGNvbXBvbmVudDtcbiAgcm91dGU7XG4gIGNvbnN0cnVjdG9yKGNvbXBvbmVudCwgcm91dGUpIHtcbiAgICB0aGlzLmNvbXBvbmVudCA9IGNvbXBvbmVudDtcbiAgICB0aGlzLnJvdXRlID0gcm91dGU7XG4gIH1cbn1cbmZ1bmN0aW9uIGdldEFsbFJvdXRlR3VhcmRzKGZ1dHVyZSwgY3VyciwgcGFyZW50Q29udGV4dHMpIHtcbiAgY29uc3QgZnV0dXJlUm9vdCA9IGZ1dHVyZS5fcm9vdDtcbiAgY29uc3QgY3VyclJvb3QgPSBjdXJyID8gY3Vyci5fcm9vdCA6IG51bGw7XG4gIHJldHVybiBnZXRDaGlsZFJvdXRlR3VhcmRzKGZ1dHVyZVJvb3QsIGN1cnJSb290LCBwYXJlbnRDb250ZXh0cywgW2Z1dHVyZVJvb3QudmFsdWVdKTtcbn1cbmZ1bmN0aW9uIGdldENhbkFjdGl2YXRlQ2hpbGQocCkge1xuICBjb25zdCBjYW5BY3RpdmF0ZUNoaWxkID0gcC5yb3V0ZUNvbmZpZyA/IHAucm91dGVDb25maWcuY2FuQWN0aXZhdGVDaGlsZCA6IG51bGw7XG4gIGlmICghY2FuQWN0aXZhdGVDaGlsZCB8fCBjYW5BY3RpdmF0ZUNoaWxkLmxlbmd0aCA9PT0gMCkgcmV0dXJuIG51bGw7XG4gIHJldHVybiB7XG4gICAgbm9kZTogcCxcbiAgICBndWFyZHM6IGNhbkFjdGl2YXRlQ2hpbGRcbiAgfTtcbn1cbmZ1bmN0aW9uIGdldFRva2VuT3JGdW5jdGlvbklkZW50aXR5KHRva2VuT3JGdW5jdGlvbiwgaW5qZWN0b3IpIHtcbiAgY29uc3QgTk9UX0ZPVU5EID0gU3ltYm9sKCk7XG4gIGNvbnN0IHJlc3VsdCA9IGluamVjdG9yLmdldCh0b2tlbk9yRnVuY3Rpb24sIE5PVF9GT1VORCk7XG4gIGlmIChyZXN1bHQgPT09IE5PVF9GT1VORCkge1xuICAgIGlmICh0eXBlb2YgdG9rZW5PckZ1bmN0aW9uID09PSAnZnVuY3Rpb24nICYmICFfaXNJbmplY3RhYmxlKHRva2VuT3JGdW5jdGlvbikpIHtcbiAgICAgIHJldHVybiB0b2tlbk9yRnVuY3Rpb247XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBpbmplY3Rvci5nZXQodG9rZW5PckZ1bmN0aW9uKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cbmZ1bmN0aW9uIGdldENoaWxkUm91dGVHdWFyZHMoZnV0dXJlTm9kZSwgY3Vyck5vZGUsIGNvbnRleHRzLCBmdXR1cmVQYXRoLCBjaGVja3MgPSB7XG4gIGNhbkRlYWN0aXZhdGVDaGVja3M6IFtdLFxuICBjYW5BY3RpdmF0ZUNoZWNrczogW11cbn0pIHtcbiAgY29uc3QgcHJldkNoaWxkcmVuID0gbm9kZUNoaWxkcmVuQXNNYXAoY3Vyck5vZGUpO1xuICBmdXR1cmVOb2RlLmNoaWxkcmVuLmZvckVhY2goYyA9PiB7XG4gICAgZ2V0Um91dGVHdWFyZHMoYywgcHJldkNoaWxkcmVuW2MudmFsdWUub3V0bGV0XSwgY29udGV4dHMsIGZ1dHVyZVBhdGguY29uY2F0KFtjLnZhbHVlXSksIGNoZWNrcyk7XG4gICAgZGVsZXRlIHByZXZDaGlsZHJlbltjLnZhbHVlLm91dGxldF07XG4gIH0pO1xuICBPYmplY3QuZW50cmllcyhwcmV2Q2hpbGRyZW4pLmZvckVhY2goKFtrLCB2XSkgPT4gZGVhY3RpdmF0ZVJvdXRlQW5kSXRzQ2hpbGRyZW4odiwgY29udGV4dHMuZ2V0Q29udGV4dChrKSwgY2hlY2tzKSk7XG4gIHJldHVybiBjaGVja3M7XG59XG5mdW5jdGlvbiBnZXRSb3V0ZUd1YXJkcyhmdXR1cmVOb2RlLCBjdXJyTm9kZSwgcGFyZW50Q29udGV4dHMsIGZ1dHVyZVBhdGgsIGNoZWNrcyA9IHtcbiAgY2FuRGVhY3RpdmF0ZUNoZWNrczogW10sXG4gIGNhbkFjdGl2YXRlQ2hlY2tzOiBbXVxufSkge1xuICBjb25zdCBmdXR1cmUgPSBmdXR1cmVOb2RlLnZhbHVlO1xuICBjb25zdCBjdXJyID0gY3Vyck5vZGUgPyBjdXJyTm9kZS52YWx1ZSA6IG51bGw7XG4gIGNvbnN0IGNvbnRleHQgPSBwYXJlbnRDb250ZXh0cyA/IHBhcmVudENvbnRleHRzLmdldENvbnRleHQoZnV0dXJlTm9kZS52YWx1ZS5vdXRsZXQpIDogbnVsbDtcbiAgaWYgKGN1cnIgJiYgZnV0dXJlLnJvdXRlQ29uZmlnID09PSBjdXJyLnJvdXRlQ29uZmlnKSB7XG4gICAgY29uc3Qgc2hvdWxkUnVuID0gc2hvdWxkUnVuR3VhcmRzQW5kUmVzb2x2ZXJzKGN1cnIsIGZ1dHVyZSwgZnV0dXJlLnJvdXRlQ29uZmlnLnJ1bkd1YXJkc0FuZFJlc29sdmVycyk7XG4gICAgaWYgKHNob3VsZFJ1bikge1xuICAgICAgY2hlY2tzLmNhbkFjdGl2YXRlQ2hlY2tzLnB1c2gobmV3IENhbkFjdGl2YXRlKGZ1dHVyZVBhdGgpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZnV0dXJlLmRhdGEgPSBjdXJyLmRhdGE7XG4gICAgICBmdXR1cmUuX3Jlc29sdmVkRGF0YSA9IGN1cnIuX3Jlc29sdmVkRGF0YTtcbiAgICB9XG4gICAgaWYgKGZ1dHVyZS5jb21wb25lbnQpIHtcbiAgICAgIGdldENoaWxkUm91dGVHdWFyZHMoZnV0dXJlTm9kZSwgY3Vyck5vZGUsIGNvbnRleHQgPyBjb250ZXh0LmNoaWxkcmVuIDogbnVsbCwgZnV0dXJlUGF0aCwgY2hlY2tzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZ2V0Q2hpbGRSb3V0ZUd1YXJkcyhmdXR1cmVOb2RlLCBjdXJyTm9kZSwgcGFyZW50Q29udGV4dHMsIGZ1dHVyZVBhdGgsIGNoZWNrcyk7XG4gICAgfVxuICAgIGlmIChzaG91bGRSdW4gJiYgY29udGV4dCAmJiBjb250ZXh0Lm91dGxldCAmJiBjb250ZXh0Lm91dGxldC5pc0FjdGl2YXRlZCkge1xuICAgICAgY2hlY2tzLmNhbkRlYWN0aXZhdGVDaGVja3MucHVzaChuZXcgQ2FuRGVhY3RpdmF0ZShjb250ZXh0Lm91dGxldC5jb21wb25lbnQsIGN1cnIpKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKGN1cnIpIHtcbiAgICAgIGRlYWN0aXZhdGVSb3V0ZUFuZEl0c0NoaWxkcmVuKGN1cnJOb2RlLCBjb250ZXh0LCBjaGVja3MpO1xuICAgIH1cbiAgICBjaGVja3MuY2FuQWN0aXZhdGVDaGVja3MucHVzaChuZXcgQ2FuQWN0aXZhdGUoZnV0dXJlUGF0aCkpO1xuICAgIGlmIChmdXR1cmUuY29tcG9uZW50KSB7XG4gICAgICBnZXRDaGlsZFJvdXRlR3VhcmRzKGZ1dHVyZU5vZGUsIG51bGwsIGNvbnRleHQgPyBjb250ZXh0LmNoaWxkcmVuIDogbnVsbCwgZnV0dXJlUGF0aCwgY2hlY2tzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZ2V0Q2hpbGRSb3V0ZUd1YXJkcyhmdXR1cmVOb2RlLCBudWxsLCBwYXJlbnRDb250ZXh0cywgZnV0dXJlUGF0aCwgY2hlY2tzKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNoZWNrcztcbn1cbmZ1bmN0aW9uIHNob3VsZFJ1bkd1YXJkc0FuZFJlc29sdmVycyhjdXJyLCBmdXR1cmUsIG1vZGUpIHtcbiAgaWYgKHR5cGVvZiBtb2RlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIHJ1bkluSW5qZWN0aW9uQ29udGV4dChmdXR1cmUuX2Vudmlyb25tZW50SW5qZWN0b3IsICgpID0+IG1vZGUoY3VyciwgZnV0dXJlKSk7XG4gIH1cbiAgc3dpdGNoIChtb2RlKSB7XG4gICAgY2FzZSAncGF0aFBhcmFtc0NoYW5nZSc6XG4gICAgICByZXR1cm4gIWVxdWFsUGF0aChjdXJyLnVybCwgZnV0dXJlLnVybCk7XG4gICAgY2FzZSAncGF0aFBhcmFtc09yUXVlcnlQYXJhbXNDaGFuZ2UnOlxuICAgICAgcmV0dXJuICFlcXVhbFBhdGgoY3Vyci51cmwsIGZ1dHVyZS51cmwpIHx8ICFzaGFsbG93RXF1YWwoY3Vyci5xdWVyeVBhcmFtcywgZnV0dXJlLnF1ZXJ5UGFyYW1zKTtcbiAgICBjYXNlICdhbHdheXMnOlxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgY2FzZSAncGFyYW1zT3JRdWVyeVBhcmFtc0NoYW5nZSc6XG4gICAgICByZXR1cm4gIWVxdWFsUGFyYW1zQW5kVXJsU2VnbWVudHMoY3VyciwgZnV0dXJlKSB8fCAhc2hhbGxvd0VxdWFsKGN1cnIucXVlcnlQYXJhbXMsIGZ1dHVyZS5xdWVyeVBhcmFtcyk7XG4gICAgY2FzZSAncGFyYW1zQ2hhbmdlJzpcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuICFlcXVhbFBhcmFtc0FuZFVybFNlZ21lbnRzKGN1cnIsIGZ1dHVyZSk7XG4gIH1cbn1cbmZ1bmN0aW9uIGRlYWN0aXZhdGVSb3V0ZUFuZEl0c0NoaWxkcmVuKHJvdXRlLCBjb250ZXh0LCBjaGVja3MpIHtcbiAgY29uc3QgY2hpbGRyZW4gPSBub2RlQ2hpbGRyZW5Bc01hcChyb3V0ZSk7XG4gIGNvbnN0IHIgPSByb3V0ZS52YWx1ZTtcbiAgT2JqZWN0LmVudHJpZXMoY2hpbGRyZW4pLmZvckVhY2goKFtjaGlsZE5hbWUsIG5vZGVdKSA9PiB7XG4gICAgaWYgKCFyLmNvbXBvbmVudCkge1xuICAgICAgZGVhY3RpdmF0ZVJvdXRlQW5kSXRzQ2hpbGRyZW4obm9kZSwgY29udGV4dCwgY2hlY2tzKTtcbiAgICB9IGVsc2UgaWYgKGNvbnRleHQpIHtcbiAgICAgIGRlYWN0aXZhdGVSb3V0ZUFuZEl0c0NoaWxkcmVuKG5vZGUsIGNvbnRleHQuY2hpbGRyZW4uZ2V0Q29udGV4dChjaGlsZE5hbWUpLCBjaGVja3MpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWFjdGl2YXRlUm91dGVBbmRJdHNDaGlsZHJlbihub2RlLCBudWxsLCBjaGVja3MpO1xuICAgIH1cbiAgfSk7XG4gIGlmICghci5jb21wb25lbnQpIHtcbiAgICBjaGVja3MuY2FuRGVhY3RpdmF0ZUNoZWNrcy5wdXNoKG5ldyBDYW5EZWFjdGl2YXRlKG51bGwsIHIpKTtcbiAgfSBlbHNlIGlmIChjb250ZXh0ICYmIGNvbnRleHQub3V0bGV0ICYmIGNvbnRleHQub3V0bGV0LmlzQWN0aXZhdGVkKSB7XG4gICAgY2hlY2tzLmNhbkRlYWN0aXZhdGVDaGVja3MucHVzaChuZXcgQ2FuRGVhY3RpdmF0ZShjb250ZXh0Lm91dGxldC5jb21wb25lbnQsIHIpKTtcbiAgfSBlbHNlIHtcbiAgICBjaGVja3MuY2FuRGVhY3RpdmF0ZUNoZWNrcy5wdXNoKG5ldyBDYW5EZWFjdGl2YXRlKG51bGwsIHIpKTtcbiAgfVxufVxuZnVuY3Rpb24gaXNGdW5jdGlvbih2KSB7XG4gIHJldHVybiB0eXBlb2YgdiA9PT0gJ2Z1bmN0aW9uJztcbn1cbmZ1bmN0aW9uIGlzQm9vbGVhbih2KSB7XG4gIHJldHVybiB0eXBlb2YgdiA9PT0gJ2Jvb2xlYW4nO1xufVxuZnVuY3Rpb24gaXNDYW5Mb2FkKGd1YXJkKSB7XG4gIHJldHVybiBndWFyZCAmJiBpc0Z1bmN0aW9uKGd1YXJkLmNhbkxvYWQpO1xufVxuZnVuY3Rpb24gaXNDYW5BY3RpdmF0ZShndWFyZCkge1xuICByZXR1cm4gZ3VhcmQgJiYgaXNGdW5jdGlvbihndWFyZC5jYW5BY3RpdmF0ZSk7XG59XG5mdW5jdGlvbiBpc0NhbkFjdGl2YXRlQ2hpbGQoZ3VhcmQpIHtcbiAgcmV0dXJuIGd1YXJkICYmIGlzRnVuY3Rpb24oZ3VhcmQuY2FuQWN0aXZhdGVDaGlsZCk7XG59XG5mdW5jdGlvbiBpc0NhbkRlYWN0aXZhdGUoZ3VhcmQpIHtcbiAgcmV0dXJuIGd1YXJkICYmIGlzRnVuY3Rpb24oZ3VhcmQuY2FuRGVhY3RpdmF0ZSk7XG59XG5mdW5jdGlvbiBpc0Nhbk1hdGNoKGd1YXJkKSB7XG4gIHJldHVybiBndWFyZCAmJiBpc0Z1bmN0aW9uKGd1YXJkLmNhbk1hdGNoKTtcbn1cbmZ1bmN0aW9uIGlzRW1wdHlFcnJvcihlKSB7XG4gIHJldHVybiBlIGluc3RhbmNlb2YgRW1wdHlFcnJvciB8fCBlPy5uYW1lID09PSAnRW1wdHlFcnJvcic7XG59XG5jb25zdCBJTklUSUFMX1ZBTFVFID0gLyogQF9fUFVSRV9fICovU3ltYm9sKCdJTklUSUFMX1ZBTFVFJyk7XG5mdW5jdGlvbiBwcmlvcml0aXplZEd1YXJkVmFsdWUoKSB7XG4gIHJldHVybiBzd2l0Y2hNYXAob2JzID0+IHtcbiAgICByZXR1cm4gY29tYmluZUxhdGVzdChvYnMubWFwKG8gPT4gby5waXBlKHRha2UoMSksIHN0YXJ0V2l0aChJTklUSUFMX1ZBTFVFKSkpKS5waXBlKG1hcChyZXN1bHRzID0+IHtcbiAgICAgIGZvciAoY29uc3QgcmVzdWx0IG9mIHJlc3VsdHMpIHtcbiAgICAgICAgaWYgKHJlc3VsdCA9PT0gdHJ1ZSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdCA9PT0gSU5JVElBTF9WQUxVRSkge1xuICAgICAgICAgIHJldHVybiBJTklUSUFMX1ZBTFVFO1xuICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdCA9PT0gZmFsc2UgfHwgaXNSZWRpcmVjdChyZXN1bHQpKSB7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSksIGZpbHRlcihpdGVtID0+IGl0ZW0gIT09IElOSVRJQUxfVkFMVUUpLCB0YWtlKDEpKTtcbiAgfSk7XG59XG5mdW5jdGlvbiBpc1JlZGlyZWN0KHZhbCkge1xuICByZXR1cm4gaXNVcmxUcmVlKHZhbCkgfHwgdmFsIGluc3RhbmNlb2YgUmVkaXJlY3RDb21tYW5kO1xufVxuZnVuY3Rpb24gYWJvcnRTaWduYWxUb09ic2VydmFibGUoc2lnbmFsKSB7XG4gIGlmIChzaWduYWwuYWJvcnRlZCkge1xuICAgIHJldHVybiBvZih1bmRlZmluZWQpLnBpcGUodGFrZSgxKSk7XG4gIH1cbiAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKHN1YnNjcmliZXIgPT4ge1xuICAgIGNvbnN0IGhhbmRsZXIgPSAoKSA9PiB7XG4gICAgICBzdWJzY3JpYmVyLm5leHQoKTtcbiAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICB9O1xuICAgIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIGhhbmRsZXIpO1xuICAgIHJldHVybiAoKSA9PiBzaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBoYW5kbGVyKTtcbiAgfSk7XG59XG5mdW5jdGlvbiB0YWtlVW50aWxBYm9ydChzaWduYWwpIHtcbiAgcmV0dXJuIHRha2VVbnRpbChhYm9ydFNpZ25hbFRvT2JzZXJ2YWJsZShzaWduYWwpKTtcbn1cbmZ1bmN0aW9uIGNoZWNrR3VhcmRzKGZvcndhcmRFdmVudCkge1xuICByZXR1cm4gbWVyZ2VNYXAodCA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgdGFyZ2V0U25hcHNob3QsXG4gICAgICBjdXJyZW50U25hcHNob3QsXG4gICAgICBndWFyZHM6IHtcbiAgICAgICAgY2FuQWN0aXZhdGVDaGVja3MsXG4gICAgICAgIGNhbkRlYWN0aXZhdGVDaGVja3NcbiAgICAgIH1cbiAgICB9ID0gdDtcbiAgICBpZiAoY2FuRGVhY3RpdmF0ZUNoZWNrcy5sZW5ndGggPT09IDAgJiYgY2FuQWN0aXZhdGVDaGVja3MubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gb2Yoe1xuICAgICAgICAuLi50LFxuICAgICAgICBndWFyZHNSZXN1bHQ6IHRydWVcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcnVuQ2FuRGVhY3RpdmF0ZUNoZWNrcyhjYW5EZWFjdGl2YXRlQ2hlY2tzLCB0YXJnZXRTbmFwc2hvdCwgY3VycmVudFNuYXBzaG90KS5waXBlKG1lcmdlTWFwKGNhbkRlYWN0aXZhdGUgPT4ge1xuICAgICAgcmV0dXJuIGNhbkRlYWN0aXZhdGUgJiYgaXNCb29sZWFuKGNhbkRlYWN0aXZhdGUpID8gcnVuQ2FuQWN0aXZhdGVDaGVja3ModGFyZ2V0U25hcHNob3QsIGNhbkFjdGl2YXRlQ2hlY2tzLCBmb3J3YXJkRXZlbnQpIDogb2YoY2FuRGVhY3RpdmF0ZSk7XG4gICAgfSksIG1hcChndWFyZHNSZXN1bHQgPT4gKHtcbiAgICAgIC4uLnQsXG4gICAgICBndWFyZHNSZXN1bHRcbiAgICB9KSkpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIHJ1bkNhbkRlYWN0aXZhdGVDaGVja3MoY2hlY2tzLCBmdXR1cmVSU1MsIGN1cnJSU1MpIHtcbiAgcmV0dXJuIGZyb20oY2hlY2tzKS5waXBlKG1lcmdlTWFwKGNoZWNrID0+IHJ1bkNhbkRlYWN0aXZhdGUoY2hlY2suY29tcG9uZW50LCBjaGVjay5yb3V0ZSwgY3VyclJTUywgZnV0dXJlUlNTKSksIGZpcnN0KHJlc3VsdCA9PiB7XG4gICAgcmV0dXJuIHJlc3VsdCAhPT0gdHJ1ZTtcbiAgfSwgdHJ1ZSkpO1xufVxuZnVuY3Rpb24gcnVuQ2FuQWN0aXZhdGVDaGVja3MoZnV0dXJlU25hcHNob3QsIGNoZWNrcywgZm9yd2FyZEV2ZW50KSB7XG4gIHJldHVybiBmcm9tKGNoZWNrcykucGlwZShjb25jYXRNYXAoY2hlY2sgPT4ge1xuICAgIHJldHVybiBjb25jYXQoZmlyZUNoaWxkQWN0aXZhdGlvblN0YXJ0KGNoZWNrLnJvdXRlLnBhcmVudCwgZm9yd2FyZEV2ZW50KSwgZmlyZUFjdGl2YXRpb25TdGFydChjaGVjay5yb3V0ZSwgZm9yd2FyZEV2ZW50KSwgcnVuQ2FuQWN0aXZhdGVDaGlsZChmdXR1cmVTbmFwc2hvdCwgY2hlY2sucGF0aCksIHJ1bkNhbkFjdGl2YXRlKGZ1dHVyZVNuYXBzaG90LCBjaGVjay5yb3V0ZSkpO1xuICB9KSwgZmlyc3QocmVzdWx0ID0+IHtcbiAgICByZXR1cm4gcmVzdWx0ICE9PSB0cnVlO1xuICB9LCB0cnVlKSk7XG59XG5mdW5jdGlvbiBmaXJlQWN0aXZhdGlvblN0YXJ0KHNuYXBzaG90LCBmb3J3YXJkRXZlbnQpIHtcbiAgaWYgKHNuYXBzaG90ICE9PSBudWxsICYmIGZvcndhcmRFdmVudCkge1xuICAgIGZvcndhcmRFdmVudChuZXcgQWN0aXZhdGlvblN0YXJ0KHNuYXBzaG90KSk7XG4gIH1cbiAgcmV0dXJuIG9mKHRydWUpO1xufVxuZnVuY3Rpb24gZmlyZUNoaWxkQWN0aXZhdGlvblN0YXJ0KHNuYXBzaG90LCBmb3J3YXJkRXZlbnQpIHtcbiAgaWYgKHNuYXBzaG90ICE9PSBudWxsICYmIGZvcndhcmRFdmVudCkge1xuICAgIGZvcndhcmRFdmVudChuZXcgQ2hpbGRBY3RpdmF0aW9uU3RhcnQoc25hcHNob3QpKTtcbiAgfVxuICByZXR1cm4gb2YodHJ1ZSk7XG59XG5mdW5jdGlvbiBydW5DYW5BY3RpdmF0ZShmdXR1cmVSU1MsIGZ1dHVyZUFSUykge1xuICBjb25zdCBjYW5BY3RpdmF0ZSA9IGZ1dHVyZUFSUy5yb3V0ZUNvbmZpZyA/IGZ1dHVyZUFSUy5yb3V0ZUNvbmZpZy5jYW5BY3RpdmF0ZSA6IG51bGw7XG4gIGlmICghY2FuQWN0aXZhdGUgfHwgY2FuQWN0aXZhdGUubGVuZ3RoID09PSAwKSByZXR1cm4gb2YodHJ1ZSk7XG4gIGNvbnN0IGNhbkFjdGl2YXRlT2JzZXJ2YWJsZXMgPSBjYW5BY3RpdmF0ZS5tYXAoY2FuQWN0aXZhdGUgPT4ge1xuICAgIHJldHVybiBkZWZlcigoKSA9PiB7XG4gICAgICBjb25zdCBjbG9zZXN0SW5qZWN0b3IgPSBmdXR1cmVBUlMuX2Vudmlyb25tZW50SW5qZWN0b3I7XG4gICAgICBjb25zdCBndWFyZCA9IGdldFRva2VuT3JGdW5jdGlvbklkZW50aXR5KGNhbkFjdGl2YXRlLCBjbG9zZXN0SW5qZWN0b3IpO1xuICAgICAgY29uc3QgZ3VhcmRWYWwgPSBpc0NhbkFjdGl2YXRlKGd1YXJkKSA/IGd1YXJkLmNhbkFjdGl2YXRlKGZ1dHVyZUFSUywgZnV0dXJlUlNTKSA6IHJ1bkluSW5qZWN0aW9uQ29udGV4dChjbG9zZXN0SW5qZWN0b3IsICgpID0+IGd1YXJkKGZ1dHVyZUFSUywgZnV0dXJlUlNTKSk7XG4gICAgICByZXR1cm4gd3JhcEludG9PYnNlcnZhYmxlKGd1YXJkVmFsKS5waXBlKGZpcnN0KCkpO1xuICAgIH0pO1xuICB9KTtcbiAgcmV0dXJuIG9mKGNhbkFjdGl2YXRlT2JzZXJ2YWJsZXMpLnBpcGUocHJpb3JpdGl6ZWRHdWFyZFZhbHVlKCkpO1xufVxuZnVuY3Rpb24gcnVuQ2FuQWN0aXZhdGVDaGlsZChmdXR1cmVSU1MsIHBhdGgpIHtcbiAgY29uc3QgZnV0dXJlQVJTID0gcGF0aFtwYXRoLmxlbmd0aCAtIDFdO1xuICBjb25zdCBjYW5BY3RpdmF0ZUNoaWxkR3VhcmRzID0gcGF0aC5zbGljZSgwLCBwYXRoLmxlbmd0aCAtIDEpLnJldmVyc2UoKS5tYXAocCA9PiBnZXRDYW5BY3RpdmF0ZUNoaWxkKHApKS5maWx0ZXIoXyA9PiBfICE9PSBudWxsKTtcbiAgY29uc3QgY2FuQWN0aXZhdGVDaGlsZEd1YXJkc01hcHBlZCA9IGNhbkFjdGl2YXRlQ2hpbGRHdWFyZHMubWFwKGQgPT4ge1xuICAgIHJldHVybiBkZWZlcigoKSA9PiB7XG4gICAgICBjb25zdCBndWFyZHNNYXBwZWQgPSBkLmd1YXJkcy5tYXAoY2FuQWN0aXZhdGVDaGlsZCA9PiB7XG4gICAgICAgIGNvbnN0IGNsb3Nlc3RJbmplY3RvciA9IGQubm9kZS5fZW52aXJvbm1lbnRJbmplY3RvcjtcbiAgICAgICAgY29uc3QgZ3VhcmQgPSBnZXRUb2tlbk9yRnVuY3Rpb25JZGVudGl0eShjYW5BY3RpdmF0ZUNoaWxkLCBjbG9zZXN0SW5qZWN0b3IpO1xuICAgICAgICBjb25zdCBndWFyZFZhbCA9IGlzQ2FuQWN0aXZhdGVDaGlsZChndWFyZCkgPyBndWFyZC5jYW5BY3RpdmF0ZUNoaWxkKGZ1dHVyZUFSUywgZnV0dXJlUlNTKSA6IHJ1bkluSW5qZWN0aW9uQ29udGV4dChjbG9zZXN0SW5qZWN0b3IsICgpID0+IGd1YXJkKGZ1dHVyZUFSUywgZnV0dXJlUlNTKSk7XG4gICAgICAgIHJldHVybiB3cmFwSW50b09ic2VydmFibGUoZ3VhcmRWYWwpLnBpcGUoZmlyc3QoKSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBvZihndWFyZHNNYXBwZWQpLnBpcGUocHJpb3JpdGl6ZWRHdWFyZFZhbHVlKCkpO1xuICAgIH0pO1xuICB9KTtcbiAgcmV0dXJuIG9mKGNhbkFjdGl2YXRlQ2hpbGRHdWFyZHNNYXBwZWQpLnBpcGUocHJpb3JpdGl6ZWRHdWFyZFZhbHVlKCkpO1xufVxuZnVuY3Rpb24gcnVuQ2FuRGVhY3RpdmF0ZShjb21wb25lbnQsIGN1cnJBUlMsIGN1cnJSU1MsIGZ1dHVyZVJTUykge1xuICBjb25zdCBjYW5EZWFjdGl2YXRlID0gY3VyckFSUyAmJiBjdXJyQVJTLnJvdXRlQ29uZmlnID8gY3VyckFSUy5yb3V0ZUNvbmZpZy5jYW5EZWFjdGl2YXRlIDogbnVsbDtcbiAgaWYgKCFjYW5EZWFjdGl2YXRlIHx8IGNhbkRlYWN0aXZhdGUubGVuZ3RoID09PSAwKSByZXR1cm4gb2YodHJ1ZSk7XG4gIGNvbnN0IGNhbkRlYWN0aXZhdGVPYnNlcnZhYmxlcyA9IGNhbkRlYWN0aXZhdGUubWFwKGMgPT4ge1xuICAgIGNvbnN0IGNsb3Nlc3RJbmplY3RvciA9IGN1cnJBUlMuX2Vudmlyb25tZW50SW5qZWN0b3I7XG4gICAgY29uc3QgZ3VhcmQgPSBnZXRUb2tlbk9yRnVuY3Rpb25JZGVudGl0eShjLCBjbG9zZXN0SW5qZWN0b3IpO1xuICAgIGNvbnN0IGd1YXJkVmFsID0gaXNDYW5EZWFjdGl2YXRlKGd1YXJkKSA/IGd1YXJkLmNhbkRlYWN0aXZhdGUoY29tcG9uZW50LCBjdXJyQVJTLCBjdXJyUlNTLCBmdXR1cmVSU1MpIDogcnVuSW5JbmplY3Rpb25Db250ZXh0KGNsb3Nlc3RJbmplY3RvciwgKCkgPT4gZ3VhcmQoY29tcG9uZW50LCBjdXJyQVJTLCBjdXJyUlNTLCBmdXR1cmVSU1MpKTtcbiAgICByZXR1cm4gd3JhcEludG9PYnNlcnZhYmxlKGd1YXJkVmFsKS5waXBlKGZpcnN0KCkpO1xuICB9KTtcbiAgcmV0dXJuIG9mKGNhbkRlYWN0aXZhdGVPYnNlcnZhYmxlcykucGlwZShwcmlvcml0aXplZEd1YXJkVmFsdWUoKSk7XG59XG5mdW5jdGlvbiBydW5DYW5Mb2FkR3VhcmRzKGluamVjdG9yLCByb3V0ZSwgc2VnbWVudHMsIHVybFNlcmlhbGl6ZXIsIGFib3J0U2lnbmFsKSB7XG4gIGNvbnN0IGNhbkxvYWQgPSByb3V0ZS5jYW5Mb2FkO1xuICBpZiAoY2FuTG9hZCA9PT0gdW5kZWZpbmVkIHx8IGNhbkxvYWQubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG9mKHRydWUpO1xuICB9XG4gIGNvbnN0IGNhbkxvYWRPYnNlcnZhYmxlcyA9IGNhbkxvYWQubWFwKGluamVjdGlvblRva2VuID0+IHtcbiAgICBjb25zdCBndWFyZCA9IGdldFRva2VuT3JGdW5jdGlvbklkZW50aXR5KGluamVjdGlvblRva2VuLCBpbmplY3Rvcik7XG4gICAgY29uc3QgZ3VhcmRWYWwgPSBpc0NhbkxvYWQoZ3VhcmQpID8gZ3VhcmQuY2FuTG9hZChyb3V0ZSwgc2VnbWVudHMpIDogcnVuSW5JbmplY3Rpb25Db250ZXh0KGluamVjdG9yLCAoKSA9PiBndWFyZChyb3V0ZSwgc2VnbWVudHMpKTtcbiAgICBjb25zdCBvYnMkID0gd3JhcEludG9PYnNlcnZhYmxlKGd1YXJkVmFsKTtcbiAgICByZXR1cm4gYWJvcnRTaWduYWwgPyBvYnMkLnBpcGUodGFrZVVudGlsQWJvcnQoYWJvcnRTaWduYWwpKSA6IG9icyQ7XG4gIH0pO1xuICByZXR1cm4gb2YoY2FuTG9hZE9ic2VydmFibGVzKS5waXBlKHByaW9yaXRpemVkR3VhcmRWYWx1ZSgpLCByZWRpcmVjdElmVXJsVHJlZSh1cmxTZXJpYWxpemVyKSk7XG59XG5mdW5jdGlvbiByZWRpcmVjdElmVXJsVHJlZSh1cmxTZXJpYWxpemVyKSB7XG4gIHJldHVybiBwaXBlKHRhcChyZXN1bHQgPT4ge1xuICAgIGlmICh0eXBlb2YgcmVzdWx0ID09PSAnYm9vbGVhbicpIHJldHVybjtcbiAgICB0aHJvdyByZWRpcmVjdGluZ05hdmlnYXRpb25FcnJvcih1cmxTZXJpYWxpemVyLCByZXN1bHQpO1xuICB9KSwgbWFwKHJlc3VsdCA9PiByZXN1bHQgPT09IHRydWUpKTtcbn1cbmZ1bmN0aW9uIHJ1bkNhbk1hdGNoR3VhcmRzKGluamVjdG9yLCByb3V0ZSwgc2VnbWVudHMsIHVybFNlcmlhbGl6ZXIsIGN1cnJlbnRTbmFwc2hvdCwgYWJvcnRTaWduYWwpIHtcbiAgY29uc3QgY2FuTWF0Y2ggPSByb3V0ZS5jYW5NYXRjaDtcbiAgaWYgKCFjYW5NYXRjaCB8fCBjYW5NYXRjaC5sZW5ndGggPT09IDApIHJldHVybiBvZih0cnVlKTtcbiAgY29uc3QgY2FuTWF0Y2hPYnNlcnZhYmxlcyA9IGNhbk1hdGNoLm1hcChpbmplY3Rpb25Ub2tlbiA9PiB7XG4gICAgY29uc3QgZ3VhcmQgPSBnZXRUb2tlbk9yRnVuY3Rpb25JZGVudGl0eShpbmplY3Rpb25Ub2tlbiwgaW5qZWN0b3IpO1xuICAgIGNvbnN0IGd1YXJkVmFsID0gaXNDYW5NYXRjaChndWFyZCkgPyBndWFyZC5jYW5NYXRjaChyb3V0ZSwgc2VnbWVudHMsIGN1cnJlbnRTbmFwc2hvdCkgOiBydW5JbkluamVjdGlvbkNvbnRleHQoaW5qZWN0b3IsICgpID0+IGd1YXJkKHJvdXRlLCBzZWdtZW50cywgY3VycmVudFNuYXBzaG90KSk7XG4gICAgcmV0dXJuIHdyYXBJbnRvT2JzZXJ2YWJsZShndWFyZFZhbCkucGlwZSh0YWtlVW50aWxBYm9ydChhYm9ydFNpZ25hbCkpO1xuICB9KTtcbiAgcmV0dXJuIG9mKGNhbk1hdGNoT2JzZXJ2YWJsZXMpLnBpcGUocHJpb3JpdGl6ZWRHdWFyZFZhbHVlKCksIHJlZGlyZWN0SWZVcmxUcmVlKHVybFNlcmlhbGl6ZXIpKTtcbn1cbmNsYXNzIE5vTWF0Y2ggZXh0ZW5kcyBFcnJvciB7XG4gIHNlZ21lbnRHcm91cDtcbiAgY29uc3RydWN0b3Ioc2VnbWVudEdyb3VwKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLnNlZ21lbnRHcm91cCA9IHNlZ21lbnRHcm91cCB8fCBudWxsO1xuICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBOb01hdGNoLnByb3RvdHlwZSk7XG4gIH1cbn1cbmNsYXNzIEFic29sdXRlUmVkaXJlY3QgZXh0ZW5kcyBFcnJvciB7XG4gIHVybFRyZWU7XG4gIGNvbnN0cnVjdG9yKHVybFRyZWUpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMudXJsVHJlZSA9IHVybFRyZWU7XG4gICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsIEFic29sdXRlUmVkaXJlY3QucHJvdG90eXBlKTtcbiAgfVxufVxuZnVuY3Rpb24gbmFtZWRPdXRsZXRzUmVkaXJlY3QocmVkaXJlY3RUbykge1xuICB0aHJvdyBuZXcgX1J1bnRpbWVFcnJvcig0MDAwLCAodHlwZW9mIG5nRGV2TW9kZSA9PT0gJ3VuZGVmaW5lZCcgfHwgbmdEZXZNb2RlKSAmJiBgT25seSBhYnNvbHV0ZSByZWRpcmVjdHMgY2FuIGhhdmUgbmFtZWQgb3V0bGV0cy4gcmVkaXJlY3RUbzogJyR7cmVkaXJlY3RUb30nYCk7XG59XG5mdW5jdGlvbiBjYW5Mb2FkRmFpbHMocm91dGUpIHtcbiAgdGhyb3cgbmF2aWdhdGlvbkNhbmNlbGluZ0Vycm9yKCh0eXBlb2YgbmdEZXZNb2RlID09PSAndW5kZWZpbmVkJyB8fCBuZ0Rldk1vZGUpICYmIGBDYW5ub3QgbG9hZCBjaGlsZHJlbiBiZWNhdXNlIHRoZSBndWFyZCBvZiB0aGUgcm91dGUgXCJwYXRoOiAnJHtyb3V0ZS5wYXRofSdcIiByZXR1cm5lZCBmYWxzZWAsIE5hdmlnYXRpb25DYW5jZWxsYXRpb25Db2RlLkd1YXJkUmVqZWN0ZWQpO1xufVxuY2xhc3MgQXBwbHlSZWRpcmVjdHMge1xuICB1cmxTZXJpYWxpemVyO1xuICB1cmxUcmVlO1xuICBjb25zdHJ1Y3Rvcih1cmxTZXJpYWxpemVyLCB1cmxUcmVlKSB7XG4gICAgdGhpcy51cmxTZXJpYWxpemVyID0gdXJsU2VyaWFsaXplcjtcbiAgICB0aGlzLnVybFRyZWUgPSB1cmxUcmVlO1xuICB9XG4gIGFzeW5jIGxpbmVyYWxpemVTZWdtZW50cyhyb3V0ZSwgdXJsVHJlZSkge1xuICAgIGxldCByZXMgPSBbXTtcbiAgICBsZXQgYyA9IHVybFRyZWUucm9vdDtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgcmVzID0gcmVzLmNvbmNhdChjLnNlZ21lbnRzKTtcbiAgICAgIGlmIChjLm51bWJlck9mQ2hpbGRyZW4gPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH1cbiAgICAgIGlmIChjLm51bWJlck9mQ2hpbGRyZW4gPiAxIHx8ICFjLmNoaWxkcmVuW1BSSU1BUllfT1VUTEVUXSkge1xuICAgICAgICB0aHJvdyBuYW1lZE91dGxldHNSZWRpcmVjdChgJHtyb3V0ZS5yZWRpcmVjdFRvfWApO1xuICAgICAgfVxuICAgICAgYyA9IGMuY2hpbGRyZW5bUFJJTUFSWV9PVVRMRVRdO1xuICAgIH1cbiAgfVxuICBhc3luYyBhcHBseVJlZGlyZWN0Q29tbWFuZHMoc2VnbWVudHMsIHJlZGlyZWN0VG8sIHBvc1BhcmFtcywgY3VycmVudFNuYXBzaG90LCBpbmplY3Rvcikge1xuICAgIGNvbnN0IHJlZGlyZWN0ID0gYXdhaXQgZ2V0UmVkaXJlY3RSZXN1bHQocmVkaXJlY3RUbywgY3VycmVudFNuYXBzaG90LCBpbmplY3Rvcik7XG4gICAgaWYgKHJlZGlyZWN0IGluc3RhbmNlb2YgVXJsVHJlZSkge1xuICAgICAgdGhyb3cgbmV3IEFic29sdXRlUmVkaXJlY3QocmVkaXJlY3QpO1xuICAgIH1cbiAgICBjb25zdCBuZXdUcmVlID0gdGhpcy5hcHBseVJlZGlyZWN0Q3JlYXRlVXJsVHJlZShyZWRpcmVjdCwgdGhpcy51cmxTZXJpYWxpemVyLnBhcnNlKHJlZGlyZWN0KSwgc2VnbWVudHMsIHBvc1BhcmFtcyk7XG4gICAgaWYgKHJlZGlyZWN0WzBdID09PSAnLycpIHtcbiAgICAgIHRocm93IG5ldyBBYnNvbHV0ZVJlZGlyZWN0KG5ld1RyZWUpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3VHJlZTtcbiAgfVxuICBhcHBseVJlZGlyZWN0Q3JlYXRlVXJsVHJlZShyZWRpcmVjdFRvLCB1cmxUcmVlLCBzZWdtZW50cywgcG9zUGFyYW1zKSB7XG4gICAgY29uc3QgbmV3Um9vdCA9IHRoaXMuY3JlYXRlU2VnbWVudEdyb3VwKHJlZGlyZWN0VG8sIHVybFRyZWUucm9vdCwgc2VnbWVudHMsIHBvc1BhcmFtcyk7XG4gICAgcmV0dXJuIG5ldyBVcmxUcmVlKG5ld1Jvb3QsIHRoaXMuY3JlYXRlUXVlcnlQYXJhbXModXJsVHJlZS5xdWVyeVBhcmFtcywgdGhpcy51cmxUcmVlLnF1ZXJ5UGFyYW1zKSwgdXJsVHJlZS5mcmFnbWVudCk7XG4gIH1cbiAgY3JlYXRlUXVlcnlQYXJhbXMocmVkaXJlY3RUb1BhcmFtcywgYWN0dWFsUGFyYW1zKSB7XG4gICAgY29uc3QgcmVzID0ge307XG4gICAgT2JqZWN0LmVudHJpZXMocmVkaXJlY3RUb1BhcmFtcykuZm9yRWFjaCgoW2ssIHZdKSA9PiB7XG4gICAgICBjb25zdCBjb3B5U291cmNlVmFsdWUgPSB0eXBlb2YgdiA9PT0gJ3N0cmluZycgJiYgdlswXSA9PT0gJzonO1xuICAgICAgaWYgKGNvcHlTb3VyY2VWYWx1ZSkge1xuICAgICAgICBjb25zdCBzb3VyY2VOYW1lID0gdi5zdWJzdHJpbmcoMSk7XG4gICAgICAgIHJlc1trXSA9IGFjdHVhbFBhcmFtc1tzb3VyY2VOYW1lXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc1trXSA9IHY7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBjcmVhdGVTZWdtZW50R3JvdXAocmVkaXJlY3RUbywgZ3JvdXAsIHNlZ21lbnRzLCBwb3NQYXJhbXMpIHtcbiAgICBjb25zdCB1cGRhdGVkU2VnbWVudHMgPSB0aGlzLmNyZWF0ZVNlZ21lbnRzKHJlZGlyZWN0VG8sIGdyb3VwLnNlZ21lbnRzLCBzZWdtZW50cywgcG9zUGFyYW1zKTtcbiAgICBsZXQgY2hpbGRyZW4gPSB7fTtcbiAgICBPYmplY3QuZW50cmllcyhncm91cC5jaGlsZHJlbikuZm9yRWFjaCgoW25hbWUsIGNoaWxkXSkgPT4ge1xuICAgICAgY2hpbGRyZW5bbmFtZV0gPSB0aGlzLmNyZWF0ZVNlZ21lbnRHcm91cChyZWRpcmVjdFRvLCBjaGlsZCwgc2VnbWVudHMsIHBvc1BhcmFtcyk7XG4gICAgfSk7XG4gICAgcmV0dXJuIG5ldyBVcmxTZWdtZW50R3JvdXAodXBkYXRlZFNlZ21lbnRzLCBjaGlsZHJlbik7XG4gIH1cbiAgY3JlYXRlU2VnbWVudHMocmVkaXJlY3RUbywgcmVkaXJlY3RUb1NlZ21lbnRzLCBhY3R1YWxTZWdtZW50cywgcG9zUGFyYW1zKSB7XG4gICAgcmV0dXJuIHJlZGlyZWN0VG9TZWdtZW50cy5tYXAocyA9PiBzLnBhdGhbMF0gPT09ICc6JyA/IHRoaXMuZmluZFBvc1BhcmFtKHJlZGlyZWN0VG8sIHMsIHBvc1BhcmFtcykgOiB0aGlzLmZpbmRPclJldHVybihzLCBhY3R1YWxTZWdtZW50cykpO1xuICB9XG4gIGZpbmRQb3NQYXJhbShyZWRpcmVjdFRvLCByZWRpcmVjdFRvVXJsU2VnbWVudCwgcG9zUGFyYW1zKSB7XG4gICAgY29uc3QgcG9zID0gcG9zUGFyYW1zW3JlZGlyZWN0VG9VcmxTZWdtZW50LnBhdGguc3Vic3RyaW5nKDEpXTtcbiAgICBpZiAoIXBvcykgdGhyb3cgbmV3IF9SdW50aW1lRXJyb3IoNDAwMSwgKHR5cGVvZiBuZ0Rldk1vZGUgPT09ICd1bmRlZmluZWQnIHx8IG5nRGV2TW9kZSkgJiYgYENhbm5vdCByZWRpcmVjdCB0byAnJHtyZWRpcmVjdFRvfScuIENhbm5vdCBmaW5kICcke3JlZGlyZWN0VG9VcmxTZWdtZW50LnBhdGh9Jy5gKTtcbiAgICByZXR1cm4gcG9zO1xuICB9XG4gIGZpbmRPclJldHVybihyZWRpcmVjdFRvVXJsU2VnbWVudCwgYWN0dWFsU2VnbWVudHMpIHtcbiAgICBsZXQgaWR4ID0gMDtcbiAgICBmb3IgKGNvbnN0IHMgb2YgYWN0dWFsU2VnbWVudHMpIHtcbiAgICAgIGlmIChzLnBhdGggPT09IHJlZGlyZWN0VG9VcmxTZWdtZW50LnBhdGgpIHtcbiAgICAgICAgYWN0dWFsU2VnbWVudHMuc3BsaWNlKGlkeCk7XG4gICAgICAgIHJldHVybiBzO1xuICAgICAgfVxuICAgICAgaWR4Kys7XG4gICAgfVxuICAgIHJldHVybiByZWRpcmVjdFRvVXJsU2VnbWVudDtcbiAgfVxufVxuZnVuY3Rpb24gZ2V0UmVkaXJlY3RSZXN1bHQocmVkaXJlY3RUbywgY3VycmVudFNuYXBzaG90LCBpbmplY3Rvcikge1xuICBpZiAodHlwZW9mIHJlZGlyZWN0VG8gPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyZWRpcmVjdFRvKTtcbiAgfVxuICBjb25zdCByZWRpcmVjdFRvRm4gPSByZWRpcmVjdFRvO1xuICByZXR1cm4gZmlyc3RWYWx1ZUZyb20od3JhcEludG9PYnNlcnZhYmxlKHJ1bkluSW5qZWN0aW9uQ29udGV4dChpbmplY3RvciwgKCkgPT4gcmVkaXJlY3RUb0ZuKGN1cnJlbnRTbmFwc2hvdCkpKSk7XG59XG5mdW5jdGlvbiBnZXRPckNyZWF0ZVJvdXRlSW5qZWN0b3JJZk5lZWRlZChyb3V0ZSwgY3VycmVudEluamVjdG9yKSB7XG4gIGlmIChyb3V0ZS5wcm92aWRlcnMgJiYgIXJvdXRlLl9pbmplY3Rvcikge1xuICAgIHJvdXRlLl9pbmplY3RvciA9IGNyZWF0ZUVudmlyb25tZW50SW5qZWN0b3Iocm91dGUucHJvdmlkZXJzLCBjdXJyZW50SW5qZWN0b3IsIGBSb3V0ZTogJHtyb3V0ZS5wYXRofWApO1xuICB9XG4gIHJldHVybiByb3V0ZS5faW5qZWN0b3IgPz8gY3VycmVudEluamVjdG9yO1xufVxuZnVuY3Rpb24gdmFsaWRhdGVDb25maWcoY29uZmlnLCBwYXJlbnRQYXRoID0gJycsIHJlcXVpcmVTdGFuZGFsb25lQ29tcG9uZW50cyA9IGZhbHNlKSB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgY29uZmlnLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3Qgcm91dGUgPSBjb25maWdbaV07XG4gICAgY29uc3QgZnVsbFBhdGggPSBnZXRGdWxsUGF0aChwYXJlbnRQYXRoLCByb3V0ZSk7XG4gICAgdmFsaWRhdGVOb2RlKHJvdXRlLCBmdWxsUGF0aCwgcmVxdWlyZVN0YW5kYWxvbmVDb21wb25lbnRzKTtcbiAgfVxufVxuZnVuY3Rpb24gYXNzZXJ0U3RhbmRhbG9uZShmdWxsUGF0aCwgY29tcG9uZW50KSB7XG4gIGlmIChjb21wb25lbnQgJiYgX2lzTmdNb2R1bGUoY29tcG9uZW50KSkge1xuICAgIHRocm93IG5ldyBfUnVudGltZUVycm9yKDQwMTQsIGBJbnZhbGlkIGNvbmZpZ3VyYXRpb24gb2Ygcm91dGUgJyR7ZnVsbFBhdGh9Jy4gWW91IGFyZSB1c2luZyAnbG9hZENvbXBvbmVudCcgd2l0aCBhIG1vZHVsZSwgYCArIGBidXQgaXQgbXVzdCBiZSB1c2VkIHdpdGggc3RhbmRhbG9uZSBjb21wb25lbnRzLiBVc2UgJ2xvYWRDaGlsZHJlbicgaW5zdGVhZC5gKTtcbiAgfSBlbHNlIGlmIChjb21wb25lbnQgJiYgIWlzU3RhbmRhbG9uZShjb21wb25lbnQpKSB7XG4gICAgdGhyb3cgbmV3IF9SdW50aW1lRXJyb3IoNDAxNCwgYEludmFsaWQgY29uZmlndXJhdGlvbiBvZiByb3V0ZSAnJHtmdWxsUGF0aH0nLiBUaGUgY29tcG9uZW50IG11c3QgYmUgc3RhbmRhbG9uZS5gKTtcbiAgfVxufVxuZnVuY3Rpb24gdmFsaWRhdGVOb2RlKHJvdXRlLCBmdWxsUGF0aCwgcmVxdWlyZVN0YW5kYWxvbmVDb21wb25lbnRzKSB7XG4gIGlmICh0eXBlb2YgbmdEZXZNb2RlID09PSAndW5kZWZpbmVkJyB8fCBuZ0Rldk1vZGUpIHtcbiAgICBpZiAoIXJvdXRlKSB7XG4gICAgICB0aHJvdyBuZXcgX1J1bnRpbWVFcnJvcig0MDE0LCBgXG4gICAgICBJbnZhbGlkIGNvbmZpZ3VyYXRpb24gb2Ygcm91dGUgJyR7ZnVsbFBhdGh9JzogRW5jb3VudGVyZWQgdW5kZWZpbmVkIHJvdXRlLlxuICAgICAgVGhlIHJlYXNvbiBtaWdodCBiZSBhbiBleHRyYSBjb21tYS5cblxuICAgICAgRXhhbXBsZTpcbiAgICAgIGNvbnN0IHJvdXRlczogUm91dGVzID0gW1xuICAgICAgICB7IHBhdGg6ICcnLCByZWRpcmVjdFRvOiAnL2Rhc2hib2FyZCcsIHBhdGhNYXRjaDogJ2Z1bGwnIH0sXG4gICAgICAgIHsgcGF0aDogJ2Rhc2hib2FyZCcsICBjb21wb25lbnQ6IERhc2hib2FyZENvbXBvbmVudCB9LCwgPDwgdHdvIGNvbW1hc1xuICAgICAgICB7IHBhdGg6ICdkZXRhaWwvOmlkJywgY29tcG9uZW50OiBIZXJvRGV0YWlsQ29tcG9uZW50IH1cbiAgICAgIF07XG4gICAgYCk7XG4gICAgfVxuICAgIGlmIChBcnJheS5pc0FycmF5KHJvdXRlKSkge1xuICAgICAgdGhyb3cgbmV3IF9SdW50aW1lRXJyb3IoNDAxNCwgYEludmFsaWQgY29uZmlndXJhdGlvbiBvZiByb3V0ZSAnJHtmdWxsUGF0aH0nOiBBcnJheSBjYW5ub3QgYmUgc3BlY2lmaWVkYCk7XG4gICAgfVxuICAgIGlmICghcm91dGUucmVkaXJlY3RUbyAmJiAhcm91dGUuY29tcG9uZW50ICYmICFyb3V0ZS5sb2FkQ29tcG9uZW50ICYmICFyb3V0ZS5jaGlsZHJlbiAmJiAhcm91dGUubG9hZENoaWxkcmVuICYmIHJvdXRlLm91dGxldCAmJiByb3V0ZS5vdXRsZXQgIT09IFBSSU1BUllfT1VUTEVUKSB7XG4gICAgICB0aHJvdyBuZXcgX1J1bnRpbWVFcnJvcig0MDE0LCBgSW52YWxpZCBjb25maWd1cmF0aW9uIG9mIHJvdXRlICcke2Z1bGxQYXRofSc6IGEgY29tcG9uZW50bGVzcyByb3V0ZSB3aXRob3V0IGNoaWxkcmVuIG9yIGxvYWRDaGlsZHJlbiBjYW5ub3QgaGF2ZSBhIG5hbWVkIG91dGxldCBzZXRgKTtcbiAgICB9XG4gICAgaWYgKHJvdXRlLnJlZGlyZWN0VG8gJiYgcm91dGUuY2hpbGRyZW4pIHtcbiAgICAgIHRocm93IG5ldyBfUnVudGltZUVycm9yKDQwMTQsIGBJbnZhbGlkIGNvbmZpZ3VyYXRpb24gb2Ygcm91dGUgJyR7ZnVsbFBhdGh9JzogcmVkaXJlY3RUbyBhbmQgY2hpbGRyZW4gY2Fubm90IGJlIHVzZWQgdG9nZXRoZXJgKTtcbiAgICB9XG4gICAgaWYgKHJvdXRlLnJlZGlyZWN0VG8gJiYgcm91dGUubG9hZENoaWxkcmVuKSB7XG4gICAgICB0aHJvdyBuZXcgX1J1bnRpbWVFcnJvcig0MDE0LCBgSW52YWxpZCBjb25maWd1cmF0aW9uIG9mIHJvdXRlICcke2Z1bGxQYXRofSc6IHJlZGlyZWN0VG8gYW5kIGxvYWRDaGlsZHJlbiBjYW5ub3QgYmUgdXNlZCB0b2dldGhlcmApO1xuICAgIH1cbiAgICBpZiAocm91dGUuY2hpbGRyZW4gJiYgcm91dGUubG9hZENoaWxkcmVuKSB7XG4gICAgICB0aHJvdyBuZXcgX1J1bnRpbWVFcnJvcig0MDE0LCBgSW52YWxpZCBjb25maWd1cmF0aW9uIG9mIHJvdXRlICcke2Z1bGxQYXRofSc6IGNoaWxkcmVuIGFuZCBsb2FkQ2hpbGRyZW4gY2Fubm90IGJlIHVzZWQgdG9nZXRoZXJgKTtcbiAgICB9XG4gICAgaWYgKHJvdXRlLmNvbXBvbmVudCAmJiByb3V0ZS5sb2FkQ29tcG9uZW50KSB7XG4gICAgICB0aHJvdyBuZXcgX1J1bnRpbWVFcnJvcig0MDE0LCBgSW52YWxpZCBjb25maWd1cmF0aW9uIG9mIHJvdXRlICcke2Z1bGxQYXRofSc6IGNvbXBvbmVudCBhbmQgbG9hZENvbXBvbmVudCBjYW5ub3QgYmUgdXNlZCB0b2dldGhlcmApO1xuICAgIH1cbiAgICBpZiAocm91dGUucmVkaXJlY3RUbykge1xuICAgICAgaWYgKHJvdXRlLmNvbXBvbmVudCB8fCByb3V0ZS5sb2FkQ29tcG9uZW50KSB7XG4gICAgICAgIHRocm93IG5ldyBfUnVudGltZUVycm9yKDQwMTQsIGBJbnZhbGlkIGNvbmZpZ3VyYXRpb24gb2Ygcm91dGUgJyR7ZnVsbFBhdGh9JzogcmVkaXJlY3RUbyBhbmQgY29tcG9uZW50L2xvYWRDb21wb25lbnQgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXJgKTtcbiAgICAgIH1cbiAgICAgIGlmIChyb3V0ZS5jYW5NYXRjaCB8fCByb3V0ZS5jYW5BY3RpdmF0ZSkge1xuICAgICAgICB0aHJvdyBuZXcgX1J1bnRpbWVFcnJvcig0MDE0LCBgSW52YWxpZCBjb25maWd1cmF0aW9uIG9mIHJvdXRlICcke2Z1bGxQYXRofSc6IHJlZGlyZWN0VG8gYW5kICR7cm91dGUuY2FuTWF0Y2ggPyAnY2FuTWF0Y2gnIDogJ2NhbkFjdGl2YXRlJ30gY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIuYCArIGBSZWRpcmVjdHMgaGFwcGVuIGJlZm9yZSBndWFyZHMgYXJlIGV4ZWN1dGVkLmApO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAocm91dGUucGF0aCAmJiByb3V0ZS5tYXRjaGVyKSB7XG4gICAgICB0aHJvdyBuZXcgX1J1bnRpbWVFcnJvcig0MDE0LCBgSW52YWxpZCBjb25maWd1cmF0aW9uIG9mIHJvdXRlICcke2Z1bGxQYXRofSc6IHBhdGggYW5kIG1hdGNoZXIgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXJgKTtcbiAgICB9XG4gICAgaWYgKHJvdXRlLnJlZGlyZWN0VG8gPT09IHZvaWQgMCAmJiAhcm91dGUuY29tcG9uZW50ICYmICFyb3V0ZS5sb2FkQ29tcG9uZW50ICYmICFyb3V0ZS5jaGlsZHJlbiAmJiAhcm91dGUubG9hZENoaWxkcmVuKSB7XG4gICAgICB0aHJvdyBuZXcgX1J1bnRpbWVFcnJvcig0MDE0LCBgSW52YWxpZCBjb25maWd1cmF0aW9uIG9mIHJvdXRlICcke2Z1bGxQYXRofScuIE9uZSBvZiB0aGUgZm9sbG93aW5nIG11c3QgYmUgcHJvdmlkZWQ6IGNvbXBvbmVudCwgbG9hZENvbXBvbmVudCwgcmVkaXJlY3RUbywgY2hpbGRyZW4gb3IgbG9hZENoaWxkcmVuYCk7XG4gICAgfVxuICAgIGlmIChyb3V0ZS5wYXRoID09PSB2b2lkIDAgJiYgcm91dGUubWF0Y2hlciA9PT0gdm9pZCAwKSB7XG4gICAgICB0aHJvdyBuZXcgX1J1bnRpbWVFcnJvcig0MDE0LCBgSW52YWxpZCBjb25maWd1cmF0aW9uIG9mIHJvdXRlICcke2Z1bGxQYXRofSc6IHJvdXRlcyBtdXN0IGhhdmUgZWl0aGVyIGEgcGF0aCBvciBhIG1hdGNoZXIgc3BlY2lmaWVkYCk7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygcm91dGUucGF0aCA9PT0gJ3N0cmluZycgJiYgcm91dGUucGF0aC5jaGFyQXQoMCkgPT09ICcvJykge1xuICAgICAgdGhyb3cgbmV3IF9SdW50aW1lRXJyb3IoNDAxNCwgYEludmFsaWQgY29uZmlndXJhdGlvbiBvZiByb3V0ZSAnJHtmdWxsUGF0aH0nOiBwYXRoIGNhbm5vdCBzdGFydCB3aXRoIGEgc2xhc2hgKTtcbiAgICB9XG4gICAgaWYgKHJvdXRlLnBhdGggPT09ICcnICYmIHJvdXRlLnJlZGlyZWN0VG8gIT09IHZvaWQgMCAmJiByb3V0ZS5wYXRoTWF0Y2ggPT09IHZvaWQgMCkge1xuICAgICAgY29uc3QgZXhwID0gYFRoZSBkZWZhdWx0IHZhbHVlIG9mICdwYXRoTWF0Y2gnIGlzICdwcmVmaXgnLCBidXQgb2Z0ZW4gdGhlIGludGVudCBpcyB0byB1c2UgJ2Z1bGwnLmA7XG4gICAgICB0aHJvdyBuZXcgX1J1bnRpbWVFcnJvcig0MDE0LCBgSW52YWxpZCBjb25maWd1cmF0aW9uIG9mIHJvdXRlICd7cGF0aDogXCIke2Z1bGxQYXRofVwiLCByZWRpcmVjdFRvOiBcIiR7cm91dGUucmVkaXJlY3RUb31cIn0nOiBwbGVhc2UgcHJvdmlkZSAncGF0aE1hdGNoJy4gJHtleHB9YCk7XG4gICAgfVxuICAgIGlmIChyZXF1aXJlU3RhbmRhbG9uZUNvbXBvbmVudHMpIHtcbiAgICAgIGFzc2VydFN0YW5kYWxvbmUoZnVsbFBhdGgsIHJvdXRlLmNvbXBvbmVudCk7XG4gICAgfVxuICB9XG4gIGlmIChyb3V0ZS5jaGlsZHJlbikge1xuICAgIHZhbGlkYXRlQ29uZmlnKHJvdXRlLmNoaWxkcmVuLCBmdWxsUGF0aCwgcmVxdWlyZVN0YW5kYWxvbmVDb21wb25lbnRzKTtcbiAgfVxufVxuZnVuY3Rpb24gZ2V0RnVsbFBhdGgocGFyZW50UGF0aCwgY3VycmVudFJvdXRlKSB7XG4gIGlmICghY3VycmVudFJvdXRlKSB7XG4gICAgcmV0dXJuIHBhcmVudFBhdGg7XG4gIH1cbiAgaWYgKCFwYXJlbnRQYXRoICYmICFjdXJyZW50Um91dGUucGF0aCkge1xuICAgIHJldHVybiAnJztcbiAgfSBlbHNlIGlmIChwYXJlbnRQYXRoICYmICFjdXJyZW50Um91dGUucGF0aCkge1xuICAgIHJldHVybiBgJHtwYXJlbnRQYXRofS9gO1xuICB9IGVsc2UgaWYgKCFwYXJlbnRQYXRoICYmIGN1cnJlbnRSb3V0ZS5wYXRoKSB7XG4gICAgcmV0dXJuIGN1cnJlbnRSb3V0ZS5wYXRoO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBgJHtwYXJlbnRQYXRofS8ke2N1cnJlbnRSb3V0ZS5wYXRofWA7XG4gIH1cbn1cbmZ1bmN0aW9uIGdldE91dGxldChyb3V0ZSkge1xuICByZXR1cm4gcm91dGUub3V0bGV0IHx8IFBSSU1BUllfT1VUTEVUO1xufVxuZnVuY3Rpb24gc29ydEJ5TWF0Y2hpbmdPdXRsZXRzKHJvdXRlcywgb3V0bGV0TmFtZSkge1xuICBjb25zdCBzb3J0ZWRDb25maWcgPSByb3V0ZXMuZmlsdGVyKHIgPT4gZ2V0T3V0bGV0KHIpID09PSBvdXRsZXROYW1lKTtcbiAgc29ydGVkQ29uZmlnLnB1c2goLi4ucm91dGVzLmZpbHRlcihyID0+IGdldE91dGxldChyKSAhPT0gb3V0bGV0TmFtZSkpO1xuICByZXR1cm4gc29ydGVkQ29uZmlnO1xufVxuY29uc3Qgbm9NYXRjaCA9IHtcbiAgbWF0Y2hlZDogZmFsc2UsXG4gIGNvbnN1bWVkU2VnbWVudHM6IFtdLFxuICByZW1haW5pbmdTZWdtZW50czogW10sXG4gIHBhcmFtZXRlcnM6IHt9LFxuICBwb3NpdGlvbmFsUGFyYW1TZWdtZW50czoge31cbn07XG5mdW5jdGlvbiBjcmVhdGVQcmVNYXRjaFJvdXRlU25hcHNob3Qoc25hcHNob3QpIHtcbiAgcmV0dXJuIHtcbiAgICByb3V0ZUNvbmZpZzogc25hcHNob3Qucm91dGVDb25maWcsXG4gICAgdXJsOiBzbmFwc2hvdC51cmwsXG4gICAgcGFyYW1zOiBzbmFwc2hvdC5wYXJhbXMsXG4gICAgcXVlcnlQYXJhbXM6IHNuYXBzaG90LnF1ZXJ5UGFyYW1zLFxuICAgIGZyYWdtZW50OiBzbmFwc2hvdC5mcmFnbWVudCxcbiAgICBkYXRhOiBzbmFwc2hvdC5kYXRhLFxuICAgIG91dGxldDogc25hcHNob3Qub3V0bGV0LFxuICAgIHRpdGxlOiBzbmFwc2hvdC50aXRsZSxcbiAgICBwYXJhbU1hcDogc25hcHNob3QucGFyYW1NYXAsXG4gICAgcXVlcnlQYXJhbU1hcDogc25hcHNob3QucXVlcnlQYXJhbU1hcFxuICB9O1xufVxuZnVuY3Rpb24gbWF0Y2hXaXRoQ2hlY2tzKHNlZ21lbnRHcm91cCwgcm91dGUsIHNlZ21lbnRzLCBpbmplY3RvciwgdXJsU2VyaWFsaXplciwgY3JlYXRlU25hcHNob3QsIGFib3J0U2lnbmFsKSB7XG4gIGNvbnN0IHJlc3VsdCA9IG1hdGNoKHNlZ21lbnRHcm91cCwgcm91dGUsIHNlZ21lbnRzKTtcbiAgaWYgKCFyZXN1bHQubWF0Y2hlZCkge1xuICAgIHJldHVybiBvZihyZXN1bHQpO1xuICB9XG4gIGNvbnN0IGN1cnJlbnRTbmFwc2hvdCA9IGNyZWF0ZVByZU1hdGNoUm91dGVTbmFwc2hvdChjcmVhdGVTbmFwc2hvdChyZXN1bHQpKTtcbiAgaW5qZWN0b3IgPSBnZXRPckNyZWF0ZVJvdXRlSW5qZWN0b3JJZk5lZWRlZChyb3V0ZSwgaW5qZWN0b3IpO1xuICByZXR1cm4gcnVuQ2FuTWF0Y2hHdWFyZHMoaW5qZWN0b3IsIHJvdXRlLCBzZWdtZW50cywgdXJsU2VyaWFsaXplciwgY3VycmVudFNuYXBzaG90LCBhYm9ydFNpZ25hbCkucGlwZShtYXAodiA9PiB2ID09PSB0cnVlID8gcmVzdWx0IDoge1xuICAgIC4uLm5vTWF0Y2hcbiAgfSkpO1xufVxuZnVuY3Rpb24gbWF0Y2goc2VnbWVudEdyb3VwLCByb3V0ZSwgc2VnbWVudHMpIHtcbiAgaWYgKHJvdXRlLnBhdGggPT09ICcnKSB7XG4gICAgaWYgKHJvdXRlLnBhdGhNYXRjaCA9PT0gJ2Z1bGwnICYmIChzZWdtZW50R3JvdXAuaGFzQ2hpbGRyZW4oKSB8fCBzZWdtZW50cy5sZW5ndGggPiAwKSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ubm9NYXRjaFxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIG1hdGNoZWQ6IHRydWUsXG4gICAgICBjb25zdW1lZFNlZ21lbnRzOiBbXSxcbiAgICAgIHJlbWFpbmluZ1NlZ21lbnRzOiBzZWdtZW50cyxcbiAgICAgIHBhcmFtZXRlcnM6IHt9LFxuICAgICAgcG9zaXRpb25hbFBhcmFtU2VnbWVudHM6IHt9XG4gICAgfTtcbiAgfVxuICBjb25zdCBtYXRjaGVyID0gcm91dGUubWF0Y2hlciB8fCBkZWZhdWx0VXJsTWF0Y2hlcjtcbiAgY29uc3QgcmVzID0gbWF0Y2hlcihzZWdtZW50cywgc2VnbWVudEdyb3VwLCByb3V0ZSk7XG4gIGlmICghcmVzKSByZXR1cm4ge1xuICAgIC4uLm5vTWF0Y2hcbiAgfTtcbiAgY29uc3QgcG9zUGFyYW1zID0ge307XG4gIE9iamVjdC5lbnRyaWVzKHJlcy5wb3NQYXJhbXMgPz8ge30pLmZvckVhY2goKFtrLCB2XSkgPT4ge1xuICAgIHBvc1BhcmFtc1trXSA9IHYucGF0aDtcbiAgfSk7XG4gIGNvbnN0IHBhcmFtZXRlcnMgPSByZXMuY29uc3VtZWQubGVuZ3RoID4gMCA/IHtcbiAgICAuLi5wb3NQYXJhbXMsXG4gICAgLi4ucmVzLmNvbnN1bWVkW3Jlcy5jb25zdW1lZC5sZW5ndGggLSAxXS5wYXJhbWV0ZXJzXG4gIH0gOiBwb3NQYXJhbXM7XG4gIHJldHVybiB7XG4gICAgbWF0Y2hlZDogdHJ1ZSxcbiAgICBjb25zdW1lZFNlZ21lbnRzOiByZXMuY29uc3VtZWQsXG4gICAgcmVtYWluaW5nU2VnbWVudHM6IHNlZ21lbnRzLnNsaWNlKHJlcy5jb25zdW1lZC5sZW5ndGgpLFxuICAgIHBhcmFtZXRlcnMsXG4gICAgcG9zaXRpb25hbFBhcmFtU2VnbWVudHM6IHJlcy5wb3NQYXJhbXMgPz8ge31cbiAgfTtcbn1cbmZ1bmN0aW9uIHNwbGl0KHNlZ21lbnRHcm91cCwgY29uc3VtZWRTZWdtZW50cywgc2xpY2VkU2VnbWVudHMsIGNvbmZpZykge1xuICBpZiAoc2xpY2VkU2VnbWVudHMubGVuZ3RoID4gMCAmJiBjb250YWluc0VtcHR5UGF0aE1hdGNoZXNXaXRoTmFtZWRPdXRsZXRzKHNlZ21lbnRHcm91cCwgc2xpY2VkU2VnbWVudHMsIGNvbmZpZykpIHtcbiAgICBjb25zdCBzID0gbmV3IFVybFNlZ21lbnRHcm91cChjb25zdW1lZFNlZ21lbnRzLCBjcmVhdGVDaGlsZHJlbkZvckVtcHR5UGF0aHMoY29uZmlnLCBuZXcgVXJsU2VnbWVudEdyb3VwKHNsaWNlZFNlZ21lbnRzLCBzZWdtZW50R3JvdXAuY2hpbGRyZW4pKSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNlZ21lbnRHcm91cDogcyxcbiAgICAgIHNsaWNlZFNlZ21lbnRzOiBbXVxuICAgIH07XG4gIH1cbiAgaWYgKHNsaWNlZFNlZ21lbnRzLmxlbmd0aCA9PT0gMCAmJiBjb250YWluc0VtcHR5UGF0aE1hdGNoZXMoc2VnbWVudEdyb3VwLCBzbGljZWRTZWdtZW50cywgY29uZmlnKSkge1xuICAgIGNvbnN0IHMgPSBuZXcgVXJsU2VnbWVudEdyb3VwKHNlZ21lbnRHcm91cC5zZWdtZW50cywgYWRkRW1wdHlQYXRoc1RvQ2hpbGRyZW5JZk5lZWRlZChzZWdtZW50R3JvdXAsIHNsaWNlZFNlZ21lbnRzLCBjb25maWcsIHNlZ21lbnRHcm91cC5jaGlsZHJlbikpO1xuICAgIHJldHVybiB7XG4gICAgICBzZWdtZW50R3JvdXA6IHMsXG4gICAgICBzbGljZWRTZWdtZW50c1xuICAgIH07XG4gIH1cbiAgY29uc3QgcyA9IG5ldyBVcmxTZWdtZW50R3JvdXAoc2VnbWVudEdyb3VwLnNlZ21lbnRzLCBzZWdtZW50R3JvdXAuY2hpbGRyZW4pO1xuICByZXR1cm4ge1xuICAgIHNlZ21lbnRHcm91cDogcyxcbiAgICBzbGljZWRTZWdtZW50c1xuICB9O1xufVxuZnVuY3Rpb24gYWRkRW1wdHlQYXRoc1RvQ2hpbGRyZW5JZk5lZWRlZChzZWdtZW50R3JvdXAsIHNsaWNlZFNlZ21lbnRzLCByb3V0ZXMsIGNoaWxkcmVuKSB7XG4gIGNvbnN0IHJlcyA9IHt9O1xuICBmb3IgKGNvbnN0IHIgb2Ygcm91dGVzKSB7XG4gICAgaWYgKGVtcHR5UGF0aE1hdGNoKHNlZ21lbnRHcm91cCwgc2xpY2VkU2VnbWVudHMsIHIpICYmICFjaGlsZHJlbltnZXRPdXRsZXQocildKSB7XG4gICAgICBjb25zdCBzID0gbmV3IFVybFNlZ21lbnRHcm91cChbXSwge30pO1xuICAgICAgcmVzW2dldE91dGxldChyKV0gPSBzO1xuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLmNoaWxkcmVuLFxuICAgIC4uLnJlc1xuICB9O1xufVxuZnVuY3Rpb24gY3JlYXRlQ2hpbGRyZW5Gb3JFbXB0eVBhdGhzKHJvdXRlcywgcHJpbWFyeVNlZ21lbnQpIHtcbiAgY29uc3QgcmVzID0ge307XG4gIHJlc1tQUklNQVJZX09VVExFVF0gPSBwcmltYXJ5U2VnbWVudDtcbiAgZm9yIChjb25zdCByIG9mIHJvdXRlcykge1xuICAgIGlmIChyLnBhdGggPT09ICcnICYmIGdldE91dGxldChyKSAhPT0gUFJJTUFSWV9PVVRMRVQpIHtcbiAgICAgIGNvbnN0IHMgPSBuZXcgVXJsU2VnbWVudEdyb3VwKFtdLCB7fSk7XG4gICAgICByZXNbZ2V0T3V0bGV0KHIpXSA9IHM7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXM7XG59XG5mdW5jdGlvbiBjb250YWluc0VtcHR5UGF0aE1hdGNoZXNXaXRoTmFtZWRPdXRsZXRzKHNlZ21lbnRHcm91cCwgc2xpY2VkU2VnbWVudHMsIHJvdXRlcykge1xuICByZXR1cm4gcm91dGVzLnNvbWUociA9PiBlbXB0eVBhdGhNYXRjaChzZWdtZW50R3JvdXAsIHNsaWNlZFNlZ21lbnRzLCByKSAmJiBnZXRPdXRsZXQocikgIT09IFBSSU1BUllfT1VUTEVUKTtcbn1cbmZ1bmN0aW9uIGNvbnRhaW5zRW1wdHlQYXRoTWF0Y2hlcyhzZWdtZW50R3JvdXAsIHNsaWNlZFNlZ21lbnRzLCByb3V0ZXMpIHtcbiAgcmV0dXJuIHJvdXRlcy5zb21lKHIgPT4gZW1wdHlQYXRoTWF0Y2goc2VnbWVudEdyb3VwLCBzbGljZWRTZWdtZW50cywgcikpO1xufVxuZnVuY3Rpb24gZW1wdHlQYXRoTWF0Y2goc2VnbWVudEdyb3VwLCBzbGljZWRTZWdtZW50cywgcikge1xuICBpZiAoKHNlZ21lbnRHcm91cC5oYXNDaGlsZHJlbigpIHx8IHNsaWNlZFNlZ21lbnRzLmxlbmd0aCA+IDApICYmIHIucGF0aE1hdGNoID09PSAnZnVsbCcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHIucGF0aCA9PT0gJyc7XG59XG5mdW5jdGlvbiBub0xlZnRvdmVyc0luVXJsKHNlZ21lbnRHcm91cCwgc2VnbWVudHMsIG91dGxldCkge1xuICByZXR1cm4gc2VnbWVudHMubGVuZ3RoID09PSAwICYmICFzZWdtZW50R3JvdXAuY2hpbGRyZW5bb3V0bGV0XTtcbn1cbmNsYXNzIE5vTGVmdG92ZXJzSW5Vcmwge31cbmFzeW5jIGZ1bmN0aW9uIHJlY29nbml6ZSQxKGluamVjdG9yLCBjb25maWdMb2FkZXIsIHJvb3RDb21wb25lbnRUeXBlLCBjb25maWcsIHVybFRyZWUsIHVybFNlcmlhbGl6ZXIsIHBhcmFtc0luaGVyaXRhbmNlU3RyYXRlZ3kgPSAnZW1wdHlPbmx5JywgYWJvcnRTaWduYWwpIHtcbiAgcmV0dXJuIG5ldyBSZWNvZ25pemVyKGluamVjdG9yLCBjb25maWdMb2FkZXIsIHJvb3RDb21wb25lbnRUeXBlLCBjb25maWcsIHVybFRyZWUsIHBhcmFtc0luaGVyaXRhbmNlU3RyYXRlZ3ksIHVybFNlcmlhbGl6ZXIsIGFib3J0U2lnbmFsKS5yZWNvZ25pemUoKTtcbn1cbmNvbnN0IE1BWF9BTExPV0VEX1JFRElSRUNUUyA9IDMxO1xuY2xhc3MgUmVjb2duaXplciB7XG4gIGluamVjdG9yO1xuICBjb25maWdMb2FkZXI7XG4gIHJvb3RDb21wb25lbnRUeXBlO1xuICBjb25maWc7XG4gIHVybFRyZWU7XG4gIHBhcmFtc0luaGVyaXRhbmNlU3RyYXRlZ3k7XG4gIHVybFNlcmlhbGl6ZXI7XG4gIGFib3J0U2lnbmFsO1xuICBhcHBseVJlZGlyZWN0cztcbiAgYWJzb2x1dGVSZWRpcmVjdENvdW50ID0gMDtcbiAgYWxsb3dSZWRpcmVjdHMgPSB0cnVlO1xuICBjb25zdHJ1Y3RvcihpbmplY3RvciwgY29uZmlnTG9hZGVyLCByb290Q29tcG9uZW50VHlwZSwgY29uZmlnLCB1cmxUcmVlLCBwYXJhbXNJbmhlcml0YW5jZVN0cmF0ZWd5LCB1cmxTZXJpYWxpemVyLCBhYm9ydFNpZ25hbCkge1xuICAgIHRoaXMuaW5qZWN0b3IgPSBpbmplY3RvcjtcbiAgICB0aGlzLmNvbmZpZ0xvYWRlciA9IGNvbmZpZ0xvYWRlcjtcbiAgICB0aGlzLnJvb3RDb21wb25lbnRUeXBlID0gcm9vdENvbXBvbmVudFR5cGU7XG4gICAgdGhpcy5jb25maWcgPSBjb25maWc7XG4gICAgdGhpcy51cmxUcmVlID0gdXJsVHJlZTtcbiAgICB0aGlzLnBhcmFtc0luaGVyaXRhbmNlU3RyYXRlZ3kgPSBwYXJhbXNJbmhlcml0YW5jZVN0cmF0ZWd5O1xuICAgIHRoaXMudXJsU2VyaWFsaXplciA9IHVybFNlcmlhbGl6ZXI7XG4gICAgdGhpcy5hYm9ydFNpZ25hbCA9IGFib3J0U2lnbmFsO1xuICAgIHRoaXMuYXBwbHlSZWRpcmVjdHMgPSBuZXcgQXBwbHlSZWRpcmVjdHModGhpcy51cmxTZXJpYWxpemVyLCB0aGlzLnVybFRyZWUpO1xuICB9XG4gIG5vTWF0Y2hFcnJvcihlKSB7XG4gICAgcmV0dXJuIG5ldyBfUnVudGltZUVycm9yKDQwMDIsIHR5cGVvZiBuZ0Rldk1vZGUgPT09ICd1bmRlZmluZWQnIHx8IG5nRGV2TW9kZSA/IGBDYW5ub3QgbWF0Y2ggYW55IHJvdXRlcy4gVVJMIFNlZ21lbnQ6ICcke2Uuc2VnbWVudEdyb3VwfSdgIDogYCcke2Uuc2VnbWVudEdyb3VwfSdgKTtcbiAgfVxuICBhc3luYyByZWNvZ25pemUoKSB7XG4gICAgY29uc3Qgcm9vdFNlZ21lbnRHcm91cCA9IHNwbGl0KHRoaXMudXJsVHJlZS5yb290LCBbXSwgW10sIHRoaXMuY29uZmlnKS5zZWdtZW50R3JvdXA7XG4gICAgY29uc3Qge1xuICAgICAgY2hpbGRyZW4sXG4gICAgICByb290U25hcHNob3RcbiAgICB9ID0gYXdhaXQgdGhpcy5tYXRjaChyb290U2VnbWVudEdyb3VwKTtcbiAgICBjb25zdCByb290Tm9kZSA9IG5ldyBUcmVlTm9kZShyb290U25hcHNob3QsIGNoaWxkcmVuKTtcbiAgICBjb25zdCByb3V0ZVN0YXRlID0gbmV3IFJvdXRlclN0YXRlU25hcHNob3QoJycsIHJvb3ROb2RlKTtcbiAgICBjb25zdCB0cmVlID0gY3JlYXRlVXJsVHJlZUZyb21TbmFwc2hvdChyb290U25hcHNob3QsIFtdLCB0aGlzLnVybFRyZWUucXVlcnlQYXJhbXMsIHRoaXMudXJsVHJlZS5mcmFnbWVudCk7XG4gICAgdHJlZS5xdWVyeVBhcmFtcyA9IHRoaXMudXJsVHJlZS5xdWVyeVBhcmFtcztcbiAgICByb3V0ZVN0YXRlLnVybCA9IHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUodHJlZSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXRlOiByb3V0ZVN0YXRlLFxuICAgICAgdHJlZVxuICAgIH07XG4gIH1cbiAgYXN5bmMgbWF0Y2gocm9vdFNlZ21lbnRHcm91cCkge1xuICAgIGNvbnN0IHJvb3RTbmFwc2hvdCA9IG5ldyBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90KFtdLCBPYmplY3QuZnJlZXplKHt9KSwgT2JqZWN0LmZyZWV6ZSh7XG4gICAgICAuLi50aGlzLnVybFRyZWUucXVlcnlQYXJhbXNcbiAgICB9KSwgdGhpcy51cmxUcmVlLmZyYWdtZW50LCBPYmplY3QuZnJlZXplKHt9KSwgUFJJTUFSWV9PVVRMRVQsIHRoaXMucm9vdENvbXBvbmVudFR5cGUsIG51bGwsIHt9LCB0aGlzLmluamVjdG9yKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgY2hpbGRyZW4gPSBhd2FpdCB0aGlzLnByb2Nlc3NTZWdtZW50R3JvdXAodGhpcy5pbmplY3RvciwgdGhpcy5jb25maWcsIHJvb3RTZWdtZW50R3JvdXAsIFBSSU1BUllfT1VUTEVULCByb290U25hcHNob3QpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY2hpbGRyZW4sXG4gICAgICAgIHJvb3RTbmFwc2hvdFxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAoZSBpbnN0YW5jZW9mIEFic29sdXRlUmVkaXJlY3QpIHtcbiAgICAgICAgdGhpcy51cmxUcmVlID0gZS51cmxUcmVlO1xuICAgICAgICByZXR1cm4gdGhpcy5tYXRjaChlLnVybFRyZWUucm9vdCk7XG4gICAgICB9XG4gICAgICBpZiAoZSBpbnN0YW5jZW9mIE5vTWF0Y2gpIHtcbiAgICAgICAgdGhyb3cgdGhpcy5ub01hdGNoRXJyb3IoZSk7XG4gICAgICB9XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgfVxuICBhc3luYyBwcm9jZXNzU2VnbWVudEdyb3VwKGluamVjdG9yLCBjb25maWcsIHNlZ21lbnRHcm91cCwgb3V0bGV0LCBwYXJlbnRSb3V0ZSkge1xuICAgIGlmIChzZWdtZW50R3JvdXAuc2VnbWVudHMubGVuZ3RoID09PSAwICYmIHNlZ21lbnRHcm91cC5oYXNDaGlsZHJlbigpKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9jZXNzQ2hpbGRyZW4oaW5qZWN0b3IsIGNvbmZpZywgc2VnbWVudEdyb3VwLCBwYXJlbnRSb3V0ZSk7XG4gICAgfVxuICAgIGNvbnN0IGNoaWxkID0gYXdhaXQgdGhpcy5wcm9jZXNzU2VnbWVudChpbmplY3RvciwgY29uZmlnLCBzZWdtZW50R3JvdXAsIHNlZ21lbnRHcm91cC5zZWdtZW50cywgb3V0bGV0LCB0cnVlLCBwYXJlbnRSb3V0ZSk7XG4gICAgcmV0dXJuIGNoaWxkIGluc3RhbmNlb2YgVHJlZU5vZGUgPyBbY2hpbGRdIDogW107XG4gIH1cbiAgYXN5bmMgcHJvY2Vzc0NoaWxkcmVuKGluamVjdG9yLCBjb25maWcsIHNlZ21lbnRHcm91cCwgcGFyZW50Um91dGUpIHtcbiAgICBjb25zdCBjaGlsZE91dGxldHMgPSBbXTtcbiAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIE9iamVjdC5rZXlzKHNlZ21lbnRHcm91cC5jaGlsZHJlbikpIHtcbiAgICAgIGlmIChjaGlsZCA9PT0gJ3ByaW1hcnknKSB7XG4gICAgICAgIGNoaWxkT3V0bGV0cy51bnNoaWZ0KGNoaWxkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNoaWxkT3V0bGV0cy5wdXNoKGNoaWxkKTtcbiAgICAgIH1cbiAgICB9XG4gICAgbGV0IGNoaWxkcmVuID0gW107XG4gICAgZm9yIChjb25zdCBjaGlsZE91dGxldCBvZiBjaGlsZE91dGxldHMpIHtcbiAgICAgIGNvbnN0IGNoaWxkID0gc2VnbWVudEdyb3VwLmNoaWxkcmVuW2NoaWxkT3V0bGV0XTtcbiAgICAgIGNvbnN0IHNvcnRlZENvbmZpZyA9IHNvcnRCeU1hdGNoaW5nT3V0bGV0cyhjb25maWcsIGNoaWxkT3V0bGV0KTtcbiAgICAgIGNvbnN0IG91dGxldENoaWxkcmVuID0gYXdhaXQgdGhpcy5wcm9jZXNzU2VnbWVudEdyb3VwKGluamVjdG9yLCBzb3J0ZWRDb25maWcsIGNoaWxkLCBjaGlsZE91dGxldCwgcGFyZW50Um91dGUpO1xuICAgICAgY2hpbGRyZW4ucHVzaCguLi5vdXRsZXRDaGlsZHJlbik7XG4gICAgfVxuICAgIGNvbnN0IG1lcmdlZENoaWxkcmVuID0gbWVyZ2VFbXB0eVBhdGhNYXRjaGVzKGNoaWxkcmVuKTtcbiAgICBpZiAodHlwZW9mIG5nRGV2TW9kZSA9PT0gJ3VuZGVmaW5lZCcgfHwgbmdEZXZNb2RlKSB7XG4gICAgICBjaGVja091dGxldE5hbWVVbmlxdWVuZXNzKG1lcmdlZENoaWxkcmVuKTtcbiAgICB9XG4gICAgc29ydEFjdGl2YXRlZFJvdXRlU25hcHNob3RzKG1lcmdlZENoaWxkcmVuKTtcbiAgICByZXR1cm4gbWVyZ2VkQ2hpbGRyZW47XG4gIH1cbiAgYXN5bmMgcHJvY2Vzc1NlZ21lbnQoaW5qZWN0b3IsIHJvdXRlcywgc2VnbWVudEdyb3VwLCBzZWdtZW50cywgb3V0bGV0LCBhbGxvd1JlZGlyZWN0cywgcGFyZW50Um91dGUpIHtcbiAgICBmb3IgKGNvbnN0IHIgb2Ygcm91dGVzKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5wcm9jZXNzU2VnbWVudEFnYWluc3RSb3V0ZShyLl9pbmplY3RvciA/PyBpbmplY3Rvciwgcm91dGVzLCByLCBzZWdtZW50R3JvdXAsIHNlZ21lbnRzLCBvdXRsZXQsIGFsbG93UmVkaXJlY3RzLCBwYXJlbnRSb3V0ZSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmIChlIGluc3RhbmNlb2YgTm9NYXRjaCB8fCBpc0VtcHR5RXJyb3IoZSkpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAobm9MZWZ0b3ZlcnNJblVybChzZWdtZW50R3JvdXAsIHNlZ21lbnRzLCBvdXRsZXQpKSB7XG4gICAgICByZXR1cm4gbmV3IE5vTGVmdG92ZXJzSW5VcmwoKTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IE5vTWF0Y2goc2VnbWVudEdyb3VwKTtcbiAgfVxuICBhc3luYyBwcm9jZXNzU2VnbWVudEFnYWluc3RSb3V0ZShpbmplY3Rvciwgcm91dGVzLCByb3V0ZSwgcmF3U2VnbWVudCwgc2VnbWVudHMsIG91dGxldCwgYWxsb3dSZWRpcmVjdHMsIHBhcmVudFJvdXRlKSB7XG4gICAgaWYgKGdldE91dGxldChyb3V0ZSkgIT09IG91dGxldCAmJiAob3V0bGV0ID09PSBQUklNQVJZX09VVExFVCB8fCAhZW1wdHlQYXRoTWF0Y2gocmF3U2VnbWVudCwgc2VnbWVudHMsIHJvdXRlKSkpIHtcbiAgICAgIHRocm93IG5ldyBOb01hdGNoKHJhd1NlZ21lbnQpO1xuICAgIH1cbiAgICBpZiAocm91dGUucmVkaXJlY3RUbyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdGhpcy5tYXRjaFNlZ21lbnRBZ2FpbnN0Um91dGUoaW5qZWN0b3IsIHJhd1NlZ21lbnQsIHJvdXRlLCBzZWdtZW50cywgb3V0bGV0LCBwYXJlbnRSb3V0ZSk7XG4gICAgfVxuICAgIGlmICh0aGlzLmFsbG93UmVkaXJlY3RzICYmIGFsbG93UmVkaXJlY3RzKSB7XG4gICAgICByZXR1cm4gdGhpcy5leHBhbmRTZWdtZW50QWdhaW5zdFJvdXRlVXNpbmdSZWRpcmVjdChpbmplY3RvciwgcmF3U2VnbWVudCwgcm91dGVzLCByb3V0ZSwgc2VnbWVudHMsIG91dGxldCwgcGFyZW50Um91dGUpO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgTm9NYXRjaChyYXdTZWdtZW50KTtcbiAgfVxuICBhc3luYyBleHBhbmRTZWdtZW50QWdhaW5zdFJvdXRlVXNpbmdSZWRpcmVjdChpbmplY3Rvciwgc2VnbWVudEdyb3VwLCByb3V0ZXMsIHJvdXRlLCBzZWdtZW50cywgb3V0bGV0LCBwYXJlbnRSb3V0ZSkge1xuICAgIGNvbnN0IHtcbiAgICAgIG1hdGNoZWQsXG4gICAgICBwYXJhbWV0ZXJzLFxuICAgICAgY29uc3VtZWRTZWdtZW50cyxcbiAgICAgIHBvc2l0aW9uYWxQYXJhbVNlZ21lbnRzLFxuICAgICAgcmVtYWluaW5nU2VnbWVudHNcbiAgICB9ID0gbWF0Y2goc2VnbWVudEdyb3VwLCByb3V0ZSwgc2VnbWVudHMpO1xuICAgIGlmICghbWF0Y2hlZCkgdGhyb3cgbmV3IE5vTWF0Y2goc2VnbWVudEdyb3VwKTtcbiAgICBpZiAodHlwZW9mIHJvdXRlLnJlZGlyZWN0VG8gPT09ICdzdHJpbmcnICYmIHJvdXRlLnJlZGlyZWN0VG9bMF0gPT09ICcvJykge1xuICAgICAgdGhpcy5hYnNvbHV0ZVJlZGlyZWN0Q291bnQrKztcbiAgICAgIGlmICh0aGlzLmFic29sdXRlUmVkaXJlY3RDb3VudCA+IE1BWF9BTExPV0VEX1JFRElSRUNUUykge1xuICAgICAgICBpZiAobmdEZXZNb2RlKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IF9SdW50aW1lRXJyb3IoNDAxNiwgYERldGVjdGVkIHBvc3NpYmxlIGluZmluaXRlIHJlZGlyZWN0IHdoZW4gcmVkaXJlY3RpbmcgZnJvbSAnJHt0aGlzLnVybFRyZWV9JyB0byAnJHtyb3V0ZS5yZWRpcmVjdFRvfScuXFxuYCArIGBUaGlzIGlzIGN1cnJlbnRseSBhIGRldiBtb2RlIG9ubHkgZXJyb3IgYnV0IHdpbGwgYmVjb21lIGFgICsgYCBjYWxsIHN0YWNrIHNpemUgZXhjZWVkZWQgZXJyb3IgaW4gcHJvZHVjdGlvbiBpbiBhIGZ1dHVyZSBtYWpvciB2ZXJzaW9uLmApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYWxsb3dSZWRpcmVjdHMgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgY3VycmVudFNuYXBzaG90ID0gdGhpcy5jcmVhdGVTbmFwc2hvdChpbmplY3Rvciwgcm91dGUsIHNlZ21lbnRzLCBwYXJhbWV0ZXJzLCBwYXJlbnRSb3V0ZSk7XG4gICAgaWYgKHRoaXMuYWJvcnRTaWduYWwuYWJvcnRlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKHRoaXMuYWJvcnRTaWduYWwucmVhc29uKTtcbiAgICB9XG4gICAgY29uc3QgbmV3VHJlZSA9IGF3YWl0IHRoaXMuYXBwbHlSZWRpcmVjdHMuYXBwbHlSZWRpcmVjdENvbW1hbmRzKGNvbnN1bWVkU2VnbWVudHMsIHJvdXRlLnJlZGlyZWN0VG8sIHBvc2l0aW9uYWxQYXJhbVNlZ21lbnRzLCBjcmVhdGVQcmVNYXRjaFJvdXRlU25hcHNob3QoY3VycmVudFNuYXBzaG90KSwgaW5qZWN0b3IpO1xuICAgIGNvbnN0IG5ld1NlZ21lbnRzID0gYXdhaXQgdGhpcy5hcHBseVJlZGlyZWN0cy5saW5lcmFsaXplU2VnbWVudHMocm91dGUsIG5ld1RyZWUpO1xuICAgIHJldHVybiB0aGlzLnByb2Nlc3NTZWdtZW50KGluamVjdG9yLCByb3V0ZXMsIHNlZ21lbnRHcm91cCwgbmV3U2VnbWVudHMuY29uY2F0KHJlbWFpbmluZ1NlZ21lbnRzKSwgb3V0bGV0LCBmYWxzZSwgcGFyZW50Um91dGUpO1xuICB9XG4gIGNyZWF0ZVNuYXBzaG90KGluamVjdG9yLCByb3V0ZSwgc2VnbWVudHMsIHBhcmFtZXRlcnMsIHBhcmVudFJvdXRlKSB7XG4gICAgY29uc3Qgc25hcHNob3QgPSBuZXcgQWN0aXZhdGVkUm91dGVTbmFwc2hvdChzZWdtZW50cywgcGFyYW1ldGVycywgT2JqZWN0LmZyZWV6ZSh7XG4gICAgICAuLi50aGlzLnVybFRyZWUucXVlcnlQYXJhbXNcbiAgICB9KSwgdGhpcy51cmxUcmVlLmZyYWdtZW50LCBnZXREYXRhKHJvdXRlKSwgZ2V0T3V0bGV0KHJvdXRlKSwgcm91dGUuY29tcG9uZW50ID8/IHJvdXRlLl9sb2FkZWRDb21wb25lbnQgPz8gbnVsbCwgcm91dGUsIGdldFJlc29sdmUocm91dGUpLCBpbmplY3Rvcik7XG4gICAgY29uc3QgaW5oZXJpdGVkID0gZ2V0SW5oZXJpdGVkKHNuYXBzaG90LCBwYXJlbnRSb3V0ZSwgdGhpcy5wYXJhbXNJbmhlcml0YW5jZVN0cmF0ZWd5KTtcbiAgICBzbmFwc2hvdC5wYXJhbXMgPSBPYmplY3QuZnJlZXplKGluaGVyaXRlZC5wYXJhbXMpO1xuICAgIHNuYXBzaG90LmRhdGEgPSBPYmplY3QuZnJlZXplKGluaGVyaXRlZC5kYXRhKTtcbiAgICByZXR1cm4gc25hcHNob3Q7XG4gIH1cbiAgYXN5bmMgbWF0Y2hTZWdtZW50QWdhaW5zdFJvdXRlKGluamVjdG9yLCByYXdTZWdtZW50LCByb3V0ZSwgc2VnbWVudHMsIG91dGxldCwgcGFyZW50Um91dGUpIHtcbiAgICBpZiAodGhpcy5hYm9ydFNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IodGhpcy5hYm9ydFNpZ25hbC5yZWFzb24pO1xuICAgIH1cbiAgICBjb25zdCBjcmVhdGVTbmFwc2hvdCA9IHJlc3VsdCA9PiB0aGlzLmNyZWF0ZVNuYXBzaG90KGluamVjdG9yLCByb3V0ZSwgcmVzdWx0LmNvbnN1bWVkU2VnbWVudHMsIHJlc3VsdC5wYXJhbWV0ZXJzLCBwYXJlbnRSb3V0ZSk7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20obWF0Y2hXaXRoQ2hlY2tzKHJhd1NlZ21lbnQsIHJvdXRlLCBzZWdtZW50cywgaW5qZWN0b3IsIHRoaXMudXJsU2VyaWFsaXplciwgY3JlYXRlU25hcHNob3QsIHRoaXMuYWJvcnRTaWduYWwpKTtcbiAgICBpZiAocm91dGUucGF0aCA9PT0gJyoqJykge1xuICAgICAgcmF3U2VnbWVudC5jaGlsZHJlbiA9IHt9O1xuICAgIH1cbiAgICBpZiAoIXJlc3VsdD8ubWF0Y2hlZCkge1xuICAgICAgdGhyb3cgbmV3IE5vTWF0Y2gocmF3U2VnbWVudCk7XG4gICAgfVxuICAgIGluamVjdG9yID0gcm91dGUuX2luamVjdG9yID8/IGluamVjdG9yO1xuICAgIGNvbnN0IHtcbiAgICAgIHJvdXRlczogY2hpbGRDb25maWdcbiAgICB9ID0gYXdhaXQgdGhpcy5nZXRDaGlsZENvbmZpZyhpbmplY3Rvciwgcm91dGUsIHNlZ21lbnRzKTtcbiAgICBjb25zdCBjaGlsZEluamVjdG9yID0gcm91dGUuX2xvYWRlZEluamVjdG9yID8/IGluamVjdG9yO1xuICAgIGNvbnN0IHtcbiAgICAgIHBhcmFtZXRlcnMsXG4gICAgICBjb25zdW1lZFNlZ21lbnRzLFxuICAgICAgcmVtYWluaW5nU2VnbWVudHNcbiAgICB9ID0gcmVzdWx0O1xuICAgIGNvbnN0IHNuYXBzaG90ID0gdGhpcy5jcmVhdGVTbmFwc2hvdChpbmplY3Rvciwgcm91dGUsIGNvbnN1bWVkU2VnbWVudHMsIHBhcmFtZXRlcnMsIHBhcmVudFJvdXRlKTtcbiAgICBjb25zdCB7XG4gICAgICBzZWdtZW50R3JvdXAsXG4gICAgICBzbGljZWRTZWdtZW50c1xuICAgIH0gPSBzcGxpdChyYXdTZWdtZW50LCBjb25zdW1lZFNlZ21lbnRzLCByZW1haW5pbmdTZWdtZW50cywgY2hpbGRDb25maWcpO1xuICAgIGlmIChzbGljZWRTZWdtZW50cy5sZW5ndGggPT09IDAgJiYgc2VnbWVudEdyb3VwLmhhc0NoaWxkcmVuKCkpIHtcbiAgICAgIGNvbnN0IGNoaWxkcmVuID0gYXdhaXQgdGhpcy5wcm9jZXNzQ2hpbGRyZW4oY2hpbGRJbmplY3RvciwgY2hpbGRDb25maWcsIHNlZ21lbnRHcm91cCwgc25hcHNob3QpO1xuICAgICAgcmV0dXJuIG5ldyBUcmVlTm9kZShzbmFwc2hvdCwgY2hpbGRyZW4pO1xuICAgIH1cbiAgICBpZiAoY2hpbGRDb25maWcubGVuZ3RoID09PSAwICYmIHNsaWNlZFNlZ21lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG5ldyBUcmVlTm9kZShzbmFwc2hvdCwgW10pO1xuICAgIH1cbiAgICBjb25zdCBtYXRjaGVkT25PdXRsZXQgPSBnZXRPdXRsZXQocm91dGUpID09PSBvdXRsZXQ7XG4gICAgY29uc3QgY2hpbGQgPSBhd2FpdCB0aGlzLnByb2Nlc3NTZWdtZW50KGNoaWxkSW5qZWN0b3IsIGNoaWxkQ29uZmlnLCBzZWdtZW50R3JvdXAsIHNsaWNlZFNlZ21lbnRzLCBtYXRjaGVkT25PdXRsZXQgPyBQUklNQVJZX09VVExFVCA6IG91dGxldCwgdHJ1ZSwgc25hcHNob3QpO1xuICAgIHJldHVybiBuZXcgVHJlZU5vZGUoc25hcHNob3QsIGNoaWxkIGluc3RhbmNlb2YgVHJlZU5vZGUgPyBbY2hpbGRdIDogW10pO1xuICB9XG4gIGFzeW5jIGdldENoaWxkQ29uZmlnKGluamVjdG9yLCByb3V0ZSwgc2VnbWVudHMpIHtcbiAgICBpZiAocm91dGUuY2hpbGRyZW4pIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHJvdXRlczogcm91dGUuY2hpbGRyZW4sXG4gICAgICAgIGluamVjdG9yXG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAocm91dGUubG9hZENoaWxkcmVuKSB7XG4gICAgICBpZiAocm91dGUuX2xvYWRlZFJvdXRlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IG5nTW9kdWxlRmFjdG9yeSA9IHJvdXRlLl9sb2FkZWROZ01vZHVsZUZhY3Rvcnk7XG4gICAgICAgIGlmIChuZ01vZHVsZUZhY3RvcnkgJiYgIXJvdXRlLl9sb2FkZWRJbmplY3Rvcikge1xuICAgICAgICAgIHJvdXRlLl9sb2FkZWRJbmplY3RvciA9IG5nTW9kdWxlRmFjdG9yeS5jcmVhdGUoaW5qZWN0b3IpLmluamVjdG9yO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcm91dGVzOiByb3V0ZS5fbG9hZGVkUm91dGVzLFxuICAgICAgICAgIGluamVjdG9yOiByb3V0ZS5fbG9hZGVkSW5qZWN0b3JcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmFib3J0U2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKHRoaXMuYWJvcnRTaWduYWwucmVhc29uKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHNob3VsZExvYWRSZXN1bHQgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbShydW5DYW5Mb2FkR3VhcmRzKGluamVjdG9yLCByb3V0ZSwgc2VnbWVudHMsIHRoaXMudXJsU2VyaWFsaXplciwgdGhpcy5hYm9ydFNpZ25hbCkpO1xuICAgICAgaWYgKHNob3VsZExvYWRSZXN1bHQpIHtcbiAgICAgICAgY29uc3QgY2ZnID0gYXdhaXQgdGhpcy5jb25maWdMb2FkZXIubG9hZENoaWxkcmVuKGluamVjdG9yLCByb3V0ZSk7XG4gICAgICAgIHJvdXRlLl9sb2FkZWRSb3V0ZXMgPSBjZmcucm91dGVzO1xuICAgICAgICByb3V0ZS5fbG9hZGVkSW5qZWN0b3IgPSBjZmcuaW5qZWN0b3I7XG4gICAgICAgIHJvdXRlLl9sb2FkZWROZ01vZHVsZUZhY3RvcnkgPSBjZmcuZmFjdG9yeTtcbiAgICAgICAgcmV0dXJuIGNmZztcbiAgICAgIH1cbiAgICAgIHRocm93IGNhbkxvYWRGYWlscyhyb3V0ZSk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICByb3V0ZXM6IFtdLFxuICAgICAgaW5qZWN0b3JcbiAgICB9O1xuICB9XG59XG5mdW5jdGlvbiBzb3J0QWN0aXZhdGVkUm91dGVTbmFwc2hvdHMobm9kZXMpIHtcbiAgbm9kZXMuc29ydCgoYSwgYikgPT4ge1xuICAgIGlmIChhLnZhbHVlLm91dGxldCA9PT0gUFJJTUFSWV9PVVRMRVQpIHJldHVybiAtMTtcbiAgICBpZiAoYi52YWx1ZS5vdXRsZXQgPT09IFBSSU1BUllfT1VUTEVUKSByZXR1cm4gMTtcbiAgICByZXR1cm4gYS52YWx1ZS5vdXRsZXQubG9jYWxlQ29tcGFyZShiLnZhbHVlLm91dGxldCk7XG4gIH0pO1xufVxuZnVuY3Rpb24gaGFzRW1wdHlQYXRoQ29uZmlnKG5vZGUpIHtcbiAgY29uc3QgY29uZmlnID0gbm9kZS52YWx1ZS5yb3V0ZUNvbmZpZztcbiAgcmV0dXJuIGNvbmZpZyAmJiBjb25maWcucGF0aCA9PT0gJyc7XG59XG5mdW5jdGlvbiBtZXJnZUVtcHR5UGF0aE1hdGNoZXMobm9kZXMpIHtcbiAgY29uc3QgcmVzdWx0ID0gW107XG4gIGNvbnN0IG1lcmdlZE5vZGVzID0gbmV3IFNldCgpO1xuICBmb3IgKGNvbnN0IG5vZGUgb2Ygbm9kZXMpIHtcbiAgICBpZiAoIWhhc0VtcHR5UGF0aENvbmZpZyhub2RlKSkge1xuICAgICAgcmVzdWx0LnB1c2gobm9kZSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3QgZHVwbGljYXRlRW1wdHlQYXRoTm9kZSA9IHJlc3VsdC5maW5kKHJlc3VsdE5vZGUgPT4gbm9kZS52YWx1ZS5yb3V0ZUNvbmZpZyA9PT0gcmVzdWx0Tm9kZS52YWx1ZS5yb3V0ZUNvbmZpZyk7XG4gICAgaWYgKGR1cGxpY2F0ZUVtcHR5UGF0aE5vZGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZHVwbGljYXRlRW1wdHlQYXRoTm9kZS5jaGlsZHJlbi5wdXNoKC4uLm5vZGUuY2hpbGRyZW4pO1xuICAgICAgbWVyZ2VkTm9kZXMuYWRkKGR1cGxpY2F0ZUVtcHR5UGF0aE5vZGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQucHVzaChub2RlKTtcbiAgICB9XG4gIH1cbiAgZm9yIChjb25zdCBtZXJnZWROb2RlIG9mIG1lcmdlZE5vZGVzKSB7XG4gICAgY29uc3QgbWVyZ2VkQ2hpbGRyZW4gPSBtZXJnZUVtcHR5UGF0aE1hdGNoZXMobWVyZ2VkTm9kZS5jaGlsZHJlbik7XG4gICAgcmVzdWx0LnB1c2gobmV3IFRyZWVOb2RlKG1lcmdlZE5vZGUudmFsdWUsIG1lcmdlZENoaWxkcmVuKSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdC5maWx0ZXIobiA9PiAhbWVyZ2VkTm9kZXMuaGFzKG4pKTtcbn1cbmZ1bmN0aW9uIGNoZWNrT3V0bGV0TmFtZVVuaXF1ZW5lc3Mobm9kZXMpIHtcbiAgY29uc3QgbmFtZXMgPSB7fTtcbiAgbm9kZXMuZm9yRWFjaChuID0+IHtcbiAgICBjb25zdCByb3V0ZVdpdGhTYW1lT3V0bGV0TmFtZSA9IG5hbWVzW24udmFsdWUub3V0bGV0XTtcbiAgICBpZiAocm91dGVXaXRoU2FtZU91dGxldE5hbWUpIHtcbiAgICAgIGNvbnN0IHAgPSByb3V0ZVdpdGhTYW1lT3V0bGV0TmFtZS51cmwubWFwKHMgPT4gcy50b1N0cmluZygpKS5qb2luKCcvJyk7XG4gICAgICBjb25zdCBjID0gbi52YWx1ZS51cmwubWFwKHMgPT4gcy50b1N0cmluZygpKS5qb2luKCcvJyk7XG4gICAgICB0aHJvdyBuZXcgX1J1bnRpbWVFcnJvcig0MDA2LCAodHlwZW9mIG5nRGV2TW9kZSA9PT0gJ3VuZGVmaW5lZCcgfHwgbmdEZXZNb2RlKSAmJiBgVHdvIHNlZ21lbnRzIGNhbm5vdCBoYXZlIHRoZSBzYW1lIG91dGxldCBuYW1lOiAnJHtwfScgYW5kICcke2N9Jy5gKTtcbiAgICB9XG4gICAgbmFtZXNbbi52YWx1ZS5vdXRsZXRdID0gbi52YWx1ZTtcbiAgfSk7XG59XG5mdW5jdGlvbiBnZXREYXRhKHJvdXRlKSB7XG4gIHJldHVybiByb3V0ZS5kYXRhIHx8IHt9O1xufVxuZnVuY3Rpb24gZ2V0UmVzb2x2ZShyb3V0ZSkge1xuICByZXR1cm4gcm91dGUucmVzb2x2ZSB8fCB7fTtcbn1cbmZ1bmN0aW9uIHJlY29nbml6ZShpbmplY3RvciwgY29uZmlnTG9hZGVyLCByb290Q29tcG9uZW50VHlwZSwgY29uZmlnLCBzZXJpYWxpemVyLCBwYXJhbXNJbmhlcml0YW5jZVN0cmF0ZWd5LCBhYm9ydFNpZ25hbCkge1xuICByZXR1cm4gbWVyZ2VNYXAoYXN5bmMgdCA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgc3RhdGU6IHRhcmdldFNuYXBzaG90LFxuICAgICAgdHJlZTogdXJsQWZ0ZXJSZWRpcmVjdHNcbiAgICB9ID0gYXdhaXQgcmVjb2duaXplJDEoaW5qZWN0b3IsIGNvbmZpZ0xvYWRlciwgcm9vdENvbXBvbmVudFR5cGUsIGNvbmZpZywgdC5leHRyYWN0ZWRVcmwsIHNlcmlhbGl6ZXIsIHBhcmFtc0luaGVyaXRhbmNlU3RyYXRlZ3ksIGFib3J0U2lnbmFsKTtcbiAgICByZXR1cm4ge1xuICAgICAgLi4udCxcbiAgICAgIHRhcmdldFNuYXBzaG90LFxuICAgICAgdXJsQWZ0ZXJSZWRpcmVjdHNcbiAgICB9O1xuICB9KTtcbn1cbmZ1bmN0aW9uIHJlc29sdmVEYXRhKHBhcmFtc0luaGVyaXRhbmNlU3RyYXRlZ3kpIHtcbiAgcmV0dXJuIG1lcmdlTWFwKHQgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIHRhcmdldFNuYXBzaG90LFxuICAgICAgZ3VhcmRzOiB7XG4gICAgICAgIGNhbkFjdGl2YXRlQ2hlY2tzXG4gICAgICB9XG4gICAgfSA9IHQ7XG4gICAgaWYgKCFjYW5BY3RpdmF0ZUNoZWNrcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBvZih0KTtcbiAgICB9XG4gICAgY29uc3Qgcm91dGVzV2l0aFJlc29sdmVyc1RvUnVuID0gbmV3IFNldChjYW5BY3RpdmF0ZUNoZWNrcy5tYXAoY2hlY2sgPT4gY2hlY2sucm91dGUpKTtcbiAgICBjb25zdCByb3V0ZXNOZWVkaW5nRGF0YVVwZGF0ZXMgPSBuZXcgU2V0KCk7XG4gICAgZm9yIChjb25zdCByb3V0ZSBvZiByb3V0ZXNXaXRoUmVzb2x2ZXJzVG9SdW4pIHtcbiAgICAgIGlmIChyb3V0ZXNOZWVkaW5nRGF0YVVwZGF0ZXMuaGFzKHJvdXRlKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGZvciAoY29uc3QgbmV3Um91dGUgb2YgZmxhdHRlblJvdXRlVHJlZShyb3V0ZSkpIHtcbiAgICAgICAgcm91dGVzTmVlZGluZ0RhdGFVcGRhdGVzLmFkZChuZXdSb3V0ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGxldCByb3V0ZXNQcm9jZXNzZWQgPSAwO1xuICAgIHJldHVybiBmcm9tKHJvdXRlc05lZWRpbmdEYXRhVXBkYXRlcykucGlwZShjb25jYXRNYXAocm91dGUgPT4ge1xuICAgICAgaWYgKHJvdXRlc1dpdGhSZXNvbHZlcnNUb1J1bi5oYXMocm91dGUpKSB7XG4gICAgICAgIHJldHVybiBydW5SZXNvbHZlKHJvdXRlLCB0YXJnZXRTbmFwc2hvdCwgcGFyYW1zSW5oZXJpdGFuY2VTdHJhdGVneSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByb3V0ZS5kYXRhID0gZ2V0SW5oZXJpdGVkKHJvdXRlLCByb3V0ZS5wYXJlbnQsIHBhcmFtc0luaGVyaXRhbmNlU3RyYXRlZ3kpLnJlc29sdmU7XG4gICAgICAgIHJldHVybiBvZih2b2lkIDApO1xuICAgICAgfVxuICAgIH0pLCB0YXAoKCkgPT4gcm91dGVzUHJvY2Vzc2VkKyspLCB0YWtlTGFzdCgxKSwgbWVyZ2VNYXAoXyA9PiByb3V0ZXNQcm9jZXNzZWQgPT09IHJvdXRlc05lZWRpbmdEYXRhVXBkYXRlcy5zaXplID8gb2YodCkgOiBFTVBUWSkpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIGZsYXR0ZW5Sb3V0ZVRyZWUocm91dGUpIHtcbiAgY29uc3QgZGVzY2VuZGFudHMgPSByb3V0ZS5jaGlsZHJlbi5tYXAoY2hpbGQgPT4gZmxhdHRlblJvdXRlVHJlZShjaGlsZCkpLmZsYXQoKTtcbiAgcmV0dXJuIFtyb3V0ZSwgLi4uZGVzY2VuZGFudHNdO1xufVxuZnVuY3Rpb24gcnVuUmVzb2x2ZShmdXR1cmVBUlMsIGZ1dHVyZVJTUywgcGFyYW1zSW5oZXJpdGFuY2VTdHJhdGVneSkge1xuICBjb25zdCBjb25maWcgPSBmdXR1cmVBUlMucm91dGVDb25maWc7XG4gIGNvbnN0IHJlc29sdmUgPSBmdXR1cmVBUlMuX3Jlc29sdmU7XG4gIGlmIChjb25maWc/LnRpdGxlICE9PSB1bmRlZmluZWQgJiYgIWhhc1N0YXRpY1RpdGxlKGNvbmZpZykpIHtcbiAgICByZXNvbHZlW1JvdXRlVGl0bGVLZXldID0gY29uZmlnLnRpdGxlO1xuICB9XG4gIHJldHVybiBkZWZlcigoKSA9PiB7XG4gICAgZnV0dXJlQVJTLmRhdGEgPSBnZXRJbmhlcml0ZWQoZnV0dXJlQVJTLCBmdXR1cmVBUlMucGFyZW50LCBwYXJhbXNJbmhlcml0YW5jZVN0cmF0ZWd5KS5yZXNvbHZlO1xuICAgIHJldHVybiByZXNvbHZlTm9kZShyZXNvbHZlLCBmdXR1cmVBUlMsIGZ1dHVyZVJTUykucGlwZShtYXAocmVzb2x2ZWREYXRhID0+IHtcbiAgICAgIGZ1dHVyZUFSUy5fcmVzb2x2ZWREYXRhID0gcmVzb2x2ZWREYXRhO1xuICAgICAgZnV0dXJlQVJTLmRhdGEgPSB7XG4gICAgICAgIC4uLmZ1dHVyZUFSUy5kYXRhLFxuICAgICAgICAuLi5yZXNvbHZlZERhdGFcbiAgICAgIH07XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9KSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gcmVzb2x2ZU5vZGUocmVzb2x2ZSwgZnV0dXJlQVJTLCBmdXR1cmVSU1MpIHtcbiAgY29uc3Qga2V5cyA9IGdldERhdGFLZXlzKHJlc29sdmUpO1xuICBpZiAoa2V5cy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gb2Yoe30pO1xuICB9XG4gIGNvbnN0IGRhdGEgPSB7fTtcbiAgcmV0dXJuIGZyb20oa2V5cykucGlwZShtZXJnZU1hcChrZXkgPT4gZ2V0UmVzb2x2ZXIocmVzb2x2ZVtrZXldLCBmdXR1cmVBUlMsIGZ1dHVyZVJTUykucGlwZShmaXJzdCgpLCB0YXAodmFsdWUgPT4ge1xuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFJlZGlyZWN0Q29tbWFuZCkge1xuICAgICAgdGhyb3cgcmVkaXJlY3RpbmdOYXZpZ2F0aW9uRXJyb3IobmV3IERlZmF1bHRVcmxTZXJpYWxpemVyKCksIHZhbHVlKTtcbiAgICB9XG4gICAgZGF0YVtrZXldID0gdmFsdWU7XG4gIH0pKSksIHRha2VMYXN0KDEpLCBtYXAoKCkgPT4gZGF0YSksIGNhdGNoRXJyb3IoZSA9PiBpc0VtcHR5RXJyb3IoZSkgPyBFTVBUWSA6IHRocm93RXJyb3IoZSkpKTtcbn1cbmZ1bmN0aW9uIGdldFJlc29sdmVyKGluamVjdGlvblRva2VuLCBmdXR1cmVBUlMsIGZ1dHVyZVJTUykge1xuICBjb25zdCBjbG9zZXN0SW5qZWN0b3IgPSBmdXR1cmVBUlMuX2Vudmlyb25tZW50SW5qZWN0b3I7XG4gIGNvbnN0IHJlc29sdmVyID0gZ2V0VG9rZW5PckZ1bmN0aW9uSWRlbnRpdHkoaW5qZWN0aW9uVG9rZW4sIGNsb3Nlc3RJbmplY3Rvcik7XG4gIGNvbnN0IHJlc29sdmVyVmFsdWUgPSByZXNvbHZlci5yZXNvbHZlID8gcmVzb2x2ZXIucmVzb2x2ZShmdXR1cmVBUlMsIGZ1dHVyZVJTUykgOiBydW5JbkluamVjdGlvbkNvbnRleHQoY2xvc2VzdEluamVjdG9yLCAoKSA9PiByZXNvbHZlcihmdXR1cmVBUlMsIGZ1dHVyZVJTUykpO1xuICByZXR1cm4gd3JhcEludG9PYnNlcnZhYmxlKHJlc29sdmVyVmFsdWUpO1xufVxuZnVuY3Rpb24gc3dpdGNoVGFwKG5leHQpIHtcbiAgcmV0dXJuIHN3aXRjaE1hcCh2ID0+IHtcbiAgICBjb25zdCBuZXh0UmVzdWx0ID0gbmV4dCh2KTtcbiAgICBpZiAobmV4dFJlc3VsdCkge1xuICAgICAgcmV0dXJuIGZyb20obmV4dFJlc3VsdCkucGlwZShtYXAoKCkgPT4gdikpO1xuICAgIH1cbiAgICByZXR1cm4gb2Yodik7XG4gIH0pO1xufVxubGV0IFRpdGxlU3RyYXRlZ3kgPSAvKiNfX1BVUkVfXyovKCgpID0+IHtcbiAgY2xhc3MgVGl0bGVTdHJhdGVneSB7XG4gICAgYnVpbGRUaXRsZShzbmFwc2hvdCkge1xuICAgICAgbGV0IHBhZ2VUaXRsZTtcbiAgICAgIGxldCByb3V0ZSA9IHNuYXBzaG90LnJvb3Q7XG4gICAgICB3aGlsZSAocm91dGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBwYWdlVGl0bGUgPSB0aGlzLmdldFJlc29sdmVkVGl0bGVGb3JSb3V0ZShyb3V0ZSkgPz8gcGFnZVRpdGxlO1xuICAgICAgICByb3V0ZSA9IHJvdXRlLmNoaWxkcmVuLmZpbmQoY2hpbGQgPT4gY2hpbGQub3V0bGV0ID09PSBQUklNQVJZX09VVExFVCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcGFnZVRpdGxlO1xuICAgIH1cbiAgICBnZXRSZXNvbHZlZFRpdGxlRm9yUm91dGUoc25hcHNob3QpIHtcbiAgICAgIHJldHVybiBzbmFwc2hvdC5kYXRhW1JvdXRlVGl0bGVLZXldO1xuICAgIH1cbiAgICBzdGF0aWMgybVmYWMgPSBmdW5jdGlvbiBUaXRsZVN0cmF0ZWd5X0ZhY3RvcnkoX19uZ0ZhY3RvcnlUeXBlX18pIHtcbiAgICAgIHJldHVybiBuZXcgKF9fbmdGYWN0b3J5VHlwZV9fIHx8IFRpdGxlU3RyYXRlZ3kpKCk7XG4gICAgfTtcbiAgICBzdGF0aWMgybVwcm92ID0gLyogQF9fUFVSRV9fICovaTAuybXJtWRlZmluZUluamVjdGFibGUoe1xuICAgICAgdG9rZW46IFRpdGxlU3RyYXRlZ3ksXG4gICAgICBmYWN0b3J5OiAoKSA9PiAoKCkgPT4gaW5qZWN0KERlZmF1bHRUaXRsZVN0cmF0ZWd5KSkoKSxcbiAgICAgIHByb3ZpZGVkSW46ICdyb290J1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBUaXRsZVN0cmF0ZWd5O1xufSkoKTtcbi8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICAodHlwZW9mIG5nRGV2TW9kZSA9PT0gXCJ1bmRlZmluZWRcIiB8fCBuZ0Rldk1vZGUpICYmIHZvaWQgMDtcbn0pKCk7XG5sZXQgRGVmYXVsdFRpdGxlU3RyYXRlZ3kgPSAvKiNfX1BVUkVfXyovKCgpID0+IHtcbiAgY2xhc3MgRGVmYXVsdFRpdGxlU3RyYXRlZ3kgZXh0ZW5kcyBUaXRsZVN0cmF0ZWd5IHtcbiAgICB0aXRsZTtcbiAgICBjb25zdHJ1Y3Rvcih0aXRsZSkge1xuICAgICAgc3VwZXIoKTtcbiAgICAgIHRoaXMudGl0bGUgPSB0aXRsZTtcbiAgICB9XG4gICAgdXBkYXRlVGl0bGUoc25hcHNob3QpIHtcbiAgICAgIGNvbnN0IHRpdGxlID0gdGhpcy5idWlsZFRpdGxlKHNuYXBzaG90KTtcbiAgICAgIGlmICh0aXRsZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMudGl0bGUuc2V0VGl0bGUodGl0bGUpO1xuICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgybVmYWMgPSBmdW5jdGlvbiBEZWZhdWx0VGl0bGVTdHJhdGVneV9GYWN0b3J5KF9fbmdGYWN0b3J5VHlwZV9fKSB7XG4gICAgICByZXR1cm4gbmV3IChfX25nRmFjdG9yeVR5cGVfXyB8fCBEZWZhdWx0VGl0bGVTdHJhdGVneSkoaTAuybXJtWluamVjdChpMS5UaXRsZSkpO1xuICAgIH07XG4gICAgc3RhdGljIMm1cHJvdiA9IC8qIEBfX1BVUkVfXyAqL2kwLsm1ybVkZWZpbmVJbmplY3RhYmxlKHtcbiAgICAgIHRva2VuOiBEZWZhdWx0VGl0bGVTdHJhdGVneSxcbiAgICAgIGZhY3Rvcnk6IERlZmF1bHRUaXRsZVN0cmF0ZWd5Lsm1ZmFjLFxuICAgICAgcHJvdmlkZWRJbjogJ3Jvb3QnXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIERlZmF1bHRUaXRsZVN0cmF0ZWd5O1xufSkoKTtcbi8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICAodHlwZW9mIG5nRGV2TW9kZSA9PT0gXCJ1bmRlZmluZWRcIiB8fCBuZ0Rldk1vZGUpICYmIHZvaWQgMDtcbn0pKCk7XG5jb25zdCBST1VURVJfQ09ORklHVVJBVElPTiA9IC8qI19fUFVSRV9fKi9uZXcgSW5qZWN0aW9uVG9rZW4odHlwZW9mIG5nRGV2TW9kZSA9PT0gJ3VuZGVmaW5lZCcgfHwgbmdEZXZNb2RlID8gJ3JvdXRlciBjb25maWcnIDogJycsIHtcbiAgZmFjdG9yeTogKCkgPT4gKHt9KVxufSk7XG5jb25zdCBST1VURVMgPSAvKiNfX1BVUkVfXyovbmV3IEluamVjdGlvblRva2VuKHR5cGVvZiBuZ0Rldk1vZGUgIT09ICd1bmRlZmluZWQnICYmIG5nRGV2TW9kZSA/ICdST1VURVMnIDogJycpO1xubGV0IFJvdXRlckNvbmZpZ0xvYWRlciA9IC8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICBjbGFzcyBSb3V0ZXJDb25maWdMb2FkZXIge1xuICAgIGNvbXBvbmVudExvYWRlcnMgPSBuZXcgV2Vha01hcCgpO1xuICAgIGNoaWxkcmVuTG9hZGVycyA9IG5ldyBXZWFrTWFwKCk7XG4gICAgb25Mb2FkU3RhcnRMaXN0ZW5lcjtcbiAgICBvbkxvYWRFbmRMaXN0ZW5lcjtcbiAgICBjb21waWxlciA9IGluamVjdChDb21waWxlcik7XG4gICAgYXN5bmMgbG9hZENvbXBvbmVudChpbmplY3Rvciwgcm91dGUpIHtcbiAgICAgIGlmICh0aGlzLmNvbXBvbmVudExvYWRlcnMuZ2V0KHJvdXRlKSkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb21wb25lbnRMb2FkZXJzLmdldChyb3V0ZSk7XG4gICAgICB9IGVsc2UgaWYgKHJvdXRlLl9sb2FkZWRDb21wb25lbnQpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyb3V0ZS5fbG9hZGVkQ29tcG9uZW50KTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLm9uTG9hZFN0YXJ0TGlzdGVuZXIpIHtcbiAgICAgICAgdGhpcy5vbkxvYWRTdGFydExpc3RlbmVyKHJvdXRlKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGxvYWRlciA9IChhc3luYyAoKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgbG9hZGVkID0gYXdhaXQgd3JhcEludG9Qcm9taXNlKHJ1bkluSW5qZWN0aW9uQ29udGV4dChpbmplY3RvciwgKCkgPT4gcm91dGUubG9hZENvbXBvbmVudCgpKSk7XG4gICAgICAgICAgY29uc3QgY29tcG9uZW50ID0gYXdhaXQgbWF5YmVSZXNvbHZlUmVzb3VyY2VzKG1heWJlVW53cmFwRGVmYXVsdEV4cG9ydChsb2FkZWQpKTtcbiAgICAgICAgICBpZiAodGhpcy5vbkxvYWRFbmRMaXN0ZW5lcikge1xuICAgICAgICAgICAgdGhpcy5vbkxvYWRFbmRMaXN0ZW5lcihyb3V0ZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgICh0eXBlb2YgbmdEZXZNb2RlID09PSAndW5kZWZpbmVkJyB8fCBuZ0Rldk1vZGUpICYmIGFzc2VydFN0YW5kYWxvbmUocm91dGUucGF0aCA/PyAnJywgY29tcG9uZW50KTtcbiAgICAgICAgICByb3V0ZS5fbG9hZGVkQ29tcG9uZW50ID0gY29tcG9uZW50O1xuICAgICAgICAgIHJldHVybiBjb21wb25lbnQ7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgdGhpcy5jb21wb25lbnRMb2FkZXJzLmRlbGV0ZShyb3V0ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pKCk7XG4gICAgICB0aGlzLmNvbXBvbmVudExvYWRlcnMuc2V0KHJvdXRlLCBsb2FkZXIpO1xuICAgICAgcmV0dXJuIGxvYWRlcjtcbiAgICB9XG4gICAgbG9hZENoaWxkcmVuKHBhcmVudEluamVjdG9yLCByb3V0ZSkge1xuICAgICAgaWYgKHRoaXMuY2hpbGRyZW5Mb2FkZXJzLmdldChyb3V0ZSkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hpbGRyZW5Mb2FkZXJzLmdldChyb3V0ZSk7XG4gICAgICB9IGVsc2UgaWYgKHJvdXRlLl9sb2FkZWRSb3V0ZXMpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7XG4gICAgICAgICAgcm91dGVzOiByb3V0ZS5fbG9hZGVkUm91dGVzLFxuICAgICAgICAgIGluamVjdG9yOiByb3V0ZS5fbG9hZGVkSW5qZWN0b3JcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5vbkxvYWRTdGFydExpc3RlbmVyKSB7XG4gICAgICAgIHRoaXMub25Mb2FkU3RhcnRMaXN0ZW5lcihyb3V0ZSk7XG4gICAgICB9XG4gICAgICBjb25zdCBsb2FkZXIgPSAoYXN5bmMgKCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGxvYWRDaGlsZHJlbihyb3V0ZSwgdGhpcy5jb21waWxlciwgcGFyZW50SW5qZWN0b3IsIHRoaXMub25Mb2FkRW5kTGlzdGVuZXIpO1xuICAgICAgICAgIHJvdXRlLl9sb2FkZWRSb3V0ZXMgPSByZXN1bHQucm91dGVzO1xuICAgICAgICAgIHJvdXRlLl9sb2FkZWRJbmplY3RvciA9IHJlc3VsdC5pbmplY3RvcjtcbiAgICAgICAgICByb3V0ZS5fbG9hZGVkTmdNb2R1bGVGYWN0b3J5ID0gcmVzdWx0LmZhY3Rvcnk7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICB0aGlzLmNoaWxkcmVuTG9hZGVycy5kZWxldGUocm91dGUpO1xuICAgICAgICB9XG4gICAgICB9KSgpO1xuICAgICAgdGhpcy5jaGlsZHJlbkxvYWRlcnMuc2V0KHJvdXRlLCBsb2FkZXIpO1xuICAgICAgcmV0dXJuIGxvYWRlcjtcbiAgICB9XG4gICAgc3RhdGljIMm1ZmFjID0gZnVuY3Rpb24gUm91dGVyQ29uZmlnTG9hZGVyX0ZhY3RvcnkoX19uZ0ZhY3RvcnlUeXBlX18pIHtcbiAgICAgIHJldHVybiBuZXcgKF9fbmdGYWN0b3J5VHlwZV9fIHx8IFJvdXRlckNvbmZpZ0xvYWRlcikoKTtcbiAgICB9O1xuICAgIHN0YXRpYyDJtXByb3YgPSAvKiBAX19QVVJFX18gKi9pMC7Jtcm1ZGVmaW5lSW5qZWN0YWJsZSh7XG4gICAgICB0b2tlbjogUm91dGVyQ29uZmlnTG9hZGVyLFxuICAgICAgZmFjdG9yeTogUm91dGVyQ29uZmlnTG9hZGVyLsm1ZmFjLFxuICAgICAgcHJvdmlkZWRJbjogJ3Jvb3QnXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIFJvdXRlckNvbmZpZ0xvYWRlcjtcbn0pKCk7XG4vKiNfX1BVUkVfXyovKCgpID0+IHtcbiAgKHR5cGVvZiBuZ0Rldk1vZGUgPT09IFwidW5kZWZpbmVkXCIgfHwgbmdEZXZNb2RlKSAmJiB2b2lkIDA7XG59KSgpO1xuYXN5bmMgZnVuY3Rpb24gbG9hZENoaWxkcmVuKHJvdXRlLCBjb21waWxlciwgcGFyZW50SW5qZWN0b3IsIG9uTG9hZEVuZExpc3RlbmVyKSB7XG4gIGNvbnN0IGxvYWRlZCA9IGF3YWl0IHdyYXBJbnRvUHJvbWlzZShydW5JbkluamVjdGlvbkNvbnRleHQocGFyZW50SW5qZWN0b3IsICgpID0+IHJvdXRlLmxvYWRDaGlsZHJlbigpKSk7XG4gIGNvbnN0IHQgPSBhd2FpdCBtYXliZVJlc29sdmVSZXNvdXJjZXMobWF5YmVVbndyYXBEZWZhdWx0RXhwb3J0KGxvYWRlZCkpO1xuICBsZXQgZmFjdG9yeU9yUm91dGVzO1xuICBpZiAodCBpbnN0YW5jZW9mIE5nTW9kdWxlRmFjdG9yeSB8fCBBcnJheS5pc0FycmF5KHQpKSB7XG4gICAgZmFjdG9yeU9yUm91dGVzID0gdDtcbiAgfSBlbHNlIHtcbiAgICBmYWN0b3J5T3JSb3V0ZXMgPSBhd2FpdCBjb21waWxlci5jb21waWxlTW9kdWxlQXN5bmModCk7XG4gIH1cbiAgaWYgKG9uTG9hZEVuZExpc3RlbmVyKSB7XG4gICAgb25Mb2FkRW5kTGlzdGVuZXIocm91dGUpO1xuICB9XG4gIGxldCBpbmplY3RvcjtcbiAgbGV0IHJhd1JvdXRlcztcbiAgbGV0IHJlcXVpcmVTdGFuZGFsb25lQ29tcG9uZW50cyA9IGZhbHNlO1xuICBsZXQgZmFjdG9yeSA9IHVuZGVmaW5lZDtcbiAgaWYgKEFycmF5LmlzQXJyYXkoZmFjdG9yeU9yUm91dGVzKSkge1xuICAgIHJhd1JvdXRlcyA9IGZhY3RvcnlPclJvdXRlcztcbiAgICByZXF1aXJlU3RhbmRhbG9uZUNvbXBvbmVudHMgPSB0cnVlO1xuICB9IGVsc2Uge1xuICAgIGluamVjdG9yID0gZmFjdG9yeU9yUm91dGVzLmNyZWF0ZShwYXJlbnRJbmplY3RvcikuaW5qZWN0b3I7XG4gICAgZmFjdG9yeSA9IGZhY3RvcnlPclJvdXRlcztcbiAgICByYXdSb3V0ZXMgPSBpbmplY3Rvci5nZXQoUk9VVEVTLCBbXSwge1xuICAgICAgb3B0aW9uYWw6IHRydWUsXG4gICAgICBzZWxmOiB0cnVlXG4gICAgfSkuZmxhdCgpO1xuICB9XG4gIGNvbnN0IHJvdXRlcyA9IHJhd1JvdXRlcy5tYXAoc3RhbmRhcmRpemVDb25maWcpO1xuICAodHlwZW9mIG5nRGV2TW9kZSA9PT0gJ3VuZGVmaW5lZCcgfHwgbmdEZXZNb2RlKSAmJiB2YWxpZGF0ZUNvbmZpZyhyb3V0ZXMsIHJvdXRlLnBhdGgsIHJlcXVpcmVTdGFuZGFsb25lQ29tcG9uZW50cyk7XG4gIHJldHVybiB7XG4gICAgcm91dGVzLFxuICAgIGluamVjdG9yLFxuICAgIGZhY3RvcnlcbiAgfTtcbn1cbmZ1bmN0aW9uIGlzV3JhcHBlZERlZmF1bHRFeHBvcnQodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgJ2RlZmF1bHQnIGluIHZhbHVlO1xufVxuZnVuY3Rpb24gbWF5YmVVbndyYXBEZWZhdWx0RXhwb3J0KGlucHV0KSB7XG4gIHJldHVybiBpc1dyYXBwZWREZWZhdWx0RXhwb3J0KGlucHV0KSA/IGlucHV0WydkZWZhdWx0J10gOiBpbnB1dDtcbn1cbmFzeW5jIGZ1bmN0aW9uIG1heWJlUmVzb2x2ZVJlc291cmNlcyh2YWx1ZSkge1xuICBpZiAoKHR5cGVvZiBuZ0ppdE1vZGUgPT09ICd1bmRlZmluZWQnIHx8IG5nSml0TW9kZSkgJiYgdHlwZW9mIGZldGNoID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IF9yZXNvbHZlQ29tcG9uZW50UmVzb3VyY2VzKGZldGNoKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgfVxuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cbmxldCBVcmxIYW5kbGluZ1N0cmF0ZWd5ID0gLyojX19QVVJFX18qLygoKSA9PiB7XG4gIGNsYXNzIFVybEhhbmRsaW5nU3RyYXRlZ3kge1xuICAgIHN0YXRpYyDJtWZhYyA9IGZ1bmN0aW9uIFVybEhhbmRsaW5nU3RyYXRlZ3lfRmFjdG9yeShfX25nRmFjdG9yeVR5cGVfXykge1xuICAgICAgcmV0dXJuIG5ldyAoX19uZ0ZhY3RvcnlUeXBlX18gfHwgVXJsSGFuZGxpbmdTdHJhdGVneSkoKTtcbiAgICB9O1xuICAgIHN0YXRpYyDJtXByb3YgPSAvKiBAX19QVVJFX18gKi9pMC7Jtcm1ZGVmaW5lSW5qZWN0YWJsZSh7XG4gICAgICB0b2tlbjogVXJsSGFuZGxpbmdTdHJhdGVneSxcbiAgICAgIGZhY3Rvcnk6ICgpID0+ICgoKSA9PiBpbmplY3QoRGVmYXVsdFVybEhhbmRsaW5nU3RyYXRlZ3kpKSgpLFxuICAgICAgcHJvdmlkZWRJbjogJ3Jvb3QnXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIFVybEhhbmRsaW5nU3RyYXRlZ3k7XG59KSgpO1xuLyojX19QVVJFX18qLygoKSA9PiB7XG4gICh0eXBlb2YgbmdEZXZNb2RlID09PSBcInVuZGVmaW5lZFwiIHx8IG5nRGV2TW9kZSkgJiYgdm9pZCAwO1xufSkoKTtcbmxldCBEZWZhdWx0VXJsSGFuZGxpbmdTdHJhdGVneSA9IC8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICBjbGFzcyBEZWZhdWx0VXJsSGFuZGxpbmdTdHJhdGVneSB7XG4gICAgc2hvdWxkUHJvY2Vzc1VybCh1cmwpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBleHRyYWN0KHVybCkge1xuICAgICAgcmV0dXJuIHVybDtcbiAgICB9XG4gICAgbWVyZ2UobmV3VXJsUGFydCwgd2hvbGVVcmwpIHtcbiAgICAgIHJldHVybiBuZXdVcmxQYXJ0O1xuICAgIH1cbiAgICBzdGF0aWMgybVmYWMgPSBmdW5jdGlvbiBEZWZhdWx0VXJsSGFuZGxpbmdTdHJhdGVneV9GYWN0b3J5KF9fbmdGYWN0b3J5VHlwZV9fKSB7XG4gICAgICByZXR1cm4gbmV3IChfX25nRmFjdG9yeVR5cGVfXyB8fCBEZWZhdWx0VXJsSGFuZGxpbmdTdHJhdGVneSkoKTtcbiAgICB9O1xuICAgIHN0YXRpYyDJtXByb3YgPSAvKiBAX19QVVJFX18gKi9pMC7Jtcm1ZGVmaW5lSW5qZWN0YWJsZSh7XG4gICAgICB0b2tlbjogRGVmYXVsdFVybEhhbmRsaW5nU3RyYXRlZ3ksXG4gICAgICBmYWN0b3J5OiBEZWZhdWx0VXJsSGFuZGxpbmdTdHJhdGVneS7JtWZhYyxcbiAgICAgIHByb3ZpZGVkSW46ICdyb290J1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBEZWZhdWx0VXJsSGFuZGxpbmdTdHJhdGVneTtcbn0pKCk7XG4vKiNfX1BVUkVfXyovKCgpID0+IHtcbiAgKHR5cGVvZiBuZ0Rldk1vZGUgPT09IFwidW5kZWZpbmVkXCIgfHwgbmdEZXZNb2RlKSAmJiB2b2lkIDA7XG59KSgpO1xuY29uc3QgQ1JFQVRFX1ZJRVdfVFJBTlNJVElPTiA9IC8qI19fUFVSRV9fKi9uZXcgSW5qZWN0aW9uVG9rZW4odHlwZW9mIG5nRGV2TW9kZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbmdEZXZNb2RlID8gJ3ZpZXcgdHJhbnNpdGlvbiBoZWxwZXInIDogJycpO1xuY29uc3QgVklFV19UUkFOU0lUSU9OX09QVElPTlMgPSAvKiNfX1BVUkVfXyovbmV3IEluamVjdGlvblRva2VuKHR5cGVvZiBuZ0Rldk1vZGUgIT09ICd1bmRlZmluZWQnICYmIG5nRGV2TW9kZSA/ICd2aWV3IHRyYW5zaXRpb24gb3B0aW9ucycgOiAnJyk7XG5mdW5jdGlvbiBjcmVhdGVWaWV3VHJhbnNpdGlvbihpbmplY3RvciwgZnJvbSwgdG8pIHtcbiAgY29uc3QgdHJhbnNpdGlvbk9wdGlvbnMgPSBpbmplY3Rvci5nZXQoVklFV19UUkFOU0lUSU9OX09QVElPTlMpO1xuICBjb25zdCBkb2N1bWVudCA9IGluamVjdG9yLmdldChET0NVTUVOVCk7XG4gIGlmICghZG9jdW1lbnQuc3RhcnRWaWV3VHJhbnNpdGlvbiB8fCB0cmFuc2l0aW9uT3B0aW9ucy5za2lwTmV4dFRyYW5zaXRpb24pIHtcbiAgICB0cmFuc2l0aW9uT3B0aW9ucy5za2lwTmV4dFRyYW5zaXRpb24gPSBmYWxzZTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUpKTtcbiAgfVxuICBsZXQgcmVzb2x2ZVZpZXdUcmFuc2l0aW9uU3RhcnRlZDtcbiAgY29uc3Qgdmlld1RyYW5zaXRpb25TdGFydGVkID0gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgcmVzb2x2ZVZpZXdUcmFuc2l0aW9uU3RhcnRlZCA9IHJlc29sdmU7XG4gIH0pO1xuICBjb25zdCB0cmFuc2l0aW9uID0gZG9jdW1lbnQuc3RhcnRWaWV3VHJhbnNpdGlvbigoKSA9PiB7XG4gICAgcmVzb2x2ZVZpZXdUcmFuc2l0aW9uU3RhcnRlZCgpO1xuICAgIHJldHVybiBjcmVhdGVSZW5kZXJQcm9taXNlKGluamVjdG9yKTtcbiAgfSk7XG4gIHRyYW5zaXRpb24udXBkYXRlQ2FsbGJhY2tEb25lLmNhdGNoKGVycm9yID0+IHtcbiAgICBpZiAodHlwZW9mIG5nRGV2TW9kZSA9PT0gJ3VuZGVmaW5lZCcgfHwgbmdEZXZNb2RlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICB9XG4gIH0pO1xuICB0cmFuc2l0aW9uLnJlYWR5LmNhdGNoKGVycm9yID0+IHtcbiAgICBpZiAodHlwZW9mIG5nRGV2TW9kZSA9PT0gJ3VuZGVmaW5lZCcgfHwgbmdEZXZNb2RlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICB9XG4gIH0pO1xuICB0cmFuc2l0aW9uLmZpbmlzaGVkLmNhdGNoKGVycm9yID0+IHtcbiAgICBpZiAodHlwZW9mIG5nRGV2TW9kZSA9PT0gJ3VuZGVmaW5lZCcgfHwgbmdEZXZNb2RlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICB9XG4gIH0pO1xuICBjb25zdCB7XG4gICAgb25WaWV3VHJhbnNpdGlvbkNyZWF0ZWRcbiAgfSA9IHRyYW5zaXRpb25PcHRpb25zO1xuICBpZiAob25WaWV3VHJhbnNpdGlvbkNyZWF0ZWQpIHtcbiAgICBydW5JbkluamVjdGlvbkNvbnRleHQoaW5qZWN0b3IsICgpID0+IG9uVmlld1RyYW5zaXRpb25DcmVhdGVkKHtcbiAgICAgIHRyYW5zaXRpb24sXG4gICAgICBmcm9tLFxuICAgICAgdG9cbiAgICB9KSk7XG4gIH1cbiAgcmV0dXJuIHZpZXdUcmFuc2l0aW9uU3RhcnRlZDtcbn1cbmZ1bmN0aW9uIGNyZWF0ZVJlbmRlclByb21pc2UoaW5qZWN0b3IpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgIGFmdGVyTmV4dFJlbmRlcih7XG4gICAgICByZWFkOiAoKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUpXG4gICAgfSwge1xuICAgICAgaW5qZWN0b3JcbiAgICB9KTtcbiAgfSk7XG59XG5jb25zdCBub29wID0gKCkgPT4ge307XG5jb25zdCBOQVZJR0FUSU9OX0VSUk9SX0hBTkRMRVIgPSAvKiNfX1BVUkVfXyovbmV3IEluamVjdGlvblRva2VuKHR5cGVvZiBuZ0Rldk1vZGUgPT09ICd1bmRlZmluZWQnIHx8IG5nRGV2TW9kZSA/ICduYXZpZ2F0aW9uIGVycm9yIGhhbmRsZXInIDogJycpO1xubGV0IE5hdmlnYXRpb25UcmFuc2l0aW9ucyA9IC8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICBjbGFzcyBOYXZpZ2F0aW9uVHJhbnNpdGlvbnMge1xuICAgIGN1cnJlbnROYXZpZ2F0aW9uID0gc2lnbmFsKG51bGwsIHtcbiAgICAgIC4uLihuZ0Rldk1vZGUgPyB7XG4gICAgICAgIGRlYnVnTmFtZTogXCJjdXJyZW50TmF2aWdhdGlvblwiXG4gICAgICB9IDoge30pLFxuICAgICAgZXF1YWw6ICgpID0+IGZhbHNlXG4gICAgfSk7XG4gICAgY3VycmVudFRyYW5zaXRpb24gPSBudWxsO1xuICAgIGxhc3RTdWNjZXNzZnVsTmF2aWdhdGlvbiA9IHNpZ25hbChudWxsLCAuLi4obmdEZXZNb2RlID8gW3tcbiAgICAgIGRlYnVnTmFtZTogXCJsYXN0U3VjY2Vzc2Z1bE5hdmlnYXRpb25cIlxuICAgIH1dIDogW10pKTtcbiAgICBldmVudHMgPSBuZXcgU3ViamVjdCgpO1xuICAgIHRyYW5zaXRpb25BYm9ydFdpdGhFcnJvclN1YmplY3QgPSBuZXcgU3ViamVjdCgpO1xuICAgIGNvbmZpZ0xvYWRlciA9IGluamVjdChSb3V0ZXJDb25maWdMb2FkZXIpO1xuICAgIGVudmlyb25tZW50SW5qZWN0b3IgPSBpbmplY3QoRW52aXJvbm1lbnRJbmplY3Rvcik7XG4gICAgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcbiAgICB1cmxTZXJpYWxpemVyID0gaW5qZWN0KFVybFNlcmlhbGl6ZXIpO1xuICAgIHJvb3RDb250ZXh0cyA9IGluamVjdChDaGlsZHJlbk91dGxldENvbnRleHRzKTtcbiAgICBsb2NhdGlvbiA9IGluamVjdChMb2NhdGlvbik7XG4gICAgaW5wdXRCaW5kaW5nRW5hYmxlZCA9IGluamVjdChJTlBVVF9CSU5ERVIsIHtcbiAgICAgIG9wdGlvbmFsOiB0cnVlXG4gICAgfSkgIT09IG51bGw7XG4gICAgdGl0bGVTdHJhdGVneSA9IGluamVjdChUaXRsZVN0cmF0ZWd5KTtcbiAgICBvcHRpb25zID0gaW5qZWN0KFJPVVRFUl9DT05GSUdVUkFUSU9OLCB7XG4gICAgICBvcHRpb25hbDogdHJ1ZVxuICAgIH0pIHx8IHt9O1xuICAgIHBhcmFtc0luaGVyaXRhbmNlU3RyYXRlZ3kgPSB0aGlzLm9wdGlvbnMucGFyYW1zSW5oZXJpdGFuY2VTdHJhdGVneSB8fCAnZW1wdHlPbmx5JztcbiAgICB1cmxIYW5kbGluZ1N0cmF0ZWd5ID0gaW5qZWN0KFVybEhhbmRsaW5nU3RyYXRlZ3kpO1xuICAgIGNyZWF0ZVZpZXdUcmFuc2l0aW9uID0gaW5qZWN0KENSRUFURV9WSUVXX1RSQU5TSVRJT04sIHtcbiAgICAgIG9wdGlvbmFsOiB0cnVlXG4gICAgfSk7XG4gICAgbmF2aWdhdGlvbkVycm9ySGFuZGxlciA9IGluamVjdChOQVZJR0FUSU9OX0VSUk9SX0hBTkRMRVIsIHtcbiAgICAgIG9wdGlvbmFsOiB0cnVlXG4gICAgfSk7XG4gICAgbmF2aWdhdGlvbklkID0gMDtcbiAgICBnZXQgaGFzUmVxdWVzdGVkTmF2aWdhdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLm5hdmlnYXRpb25JZCAhPT0gMDtcbiAgICB9XG4gICAgdHJhbnNpdGlvbnM7XG4gICAgYWZ0ZXJQcmVhY3RpdmF0aW9uID0gKCkgPT4gb2Yodm9pZCAwKTtcbiAgICByb290Q29tcG9uZW50VHlwZSA9IG51bGw7XG4gICAgZGVzdHJveWVkID0gZmFsc2U7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICBjb25zdCBvbkxvYWRTdGFydCA9IHIgPT4gdGhpcy5ldmVudHMubmV4dChuZXcgUm91dGVDb25maWdMb2FkU3RhcnQocikpO1xuICAgICAgY29uc3Qgb25Mb2FkRW5kID0gciA9PiB0aGlzLmV2ZW50cy5uZXh0KG5ldyBSb3V0ZUNvbmZpZ0xvYWRFbmQocikpO1xuICAgICAgdGhpcy5jb25maWdMb2FkZXIub25Mb2FkRW5kTGlzdGVuZXIgPSBvbkxvYWRFbmQ7XG4gICAgICB0aGlzLmNvbmZpZ0xvYWRlci5vbkxvYWRTdGFydExpc3RlbmVyID0gb25Mb2FkU3RhcnQ7XG4gICAgICB0aGlzLmRlc3Ryb3lSZWYub25EZXN0cm95KCgpID0+IHtcbiAgICAgICAgdGhpcy5kZXN0cm95ZWQgPSB0cnVlO1xuICAgICAgfSk7XG4gICAgfVxuICAgIGNvbXBsZXRlKCkge1xuICAgICAgdGhpcy50cmFuc2l0aW9ucz8uY29tcGxldGUoKTtcbiAgICB9XG4gICAgaGFuZGxlTmF2aWdhdGlvblJlcXVlc3QocmVxdWVzdCkge1xuICAgICAgY29uc3QgaWQgPSArK3RoaXMubmF2aWdhdGlvbklkO1xuICAgICAgdW50cmFja2VkKCgpID0+IHtcbiAgICAgICAgdGhpcy50cmFuc2l0aW9ucz8ubmV4dCh7XG4gICAgICAgICAgLi4ucmVxdWVzdCxcbiAgICAgICAgICBleHRyYWN0ZWRVcmw6IHRoaXMudXJsSGFuZGxpbmdTdHJhdGVneS5leHRyYWN0KHJlcXVlc3QucmF3VXJsKSxcbiAgICAgICAgICB0YXJnZXRTbmFwc2hvdDogbnVsbCxcbiAgICAgICAgICB0YXJnZXRSb3V0ZXJTdGF0ZTogbnVsbCxcbiAgICAgICAgICBndWFyZHM6IHtcbiAgICAgICAgICAgIGNhbkFjdGl2YXRlQ2hlY2tzOiBbXSxcbiAgICAgICAgICAgIGNhbkRlYWN0aXZhdGVDaGVja3M6IFtdXG4gICAgICAgICAgfSxcbiAgICAgICAgICBndWFyZHNSZXN1bHQ6IG51bGwsXG4gICAgICAgICAgaWQsXG4gICAgICAgICAgcm91dGVzUmVjb2duaXplSGFuZGxlcjoge30sXG4gICAgICAgICAgYmVmb3JlQWN0aXZhdGVIYW5kbGVyOiB7fVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBzZXR1cE5hdmlnYXRpb25zKHJvdXRlcikge1xuICAgICAgdGhpcy50cmFuc2l0aW9ucyA9IG5ldyBCZWhhdmlvclN1YmplY3QobnVsbCk7XG4gICAgICByZXR1cm4gdGhpcy50cmFuc2l0aW9ucy5waXBlKGZpbHRlcih0ID0+IHQgIT09IG51bGwpLCBzd2l0Y2hNYXAob3ZlcmFsbFRyYW5zaXRpb25TdGF0ZSA9PiB7XG4gICAgICAgIGxldCBjb21wbGV0ZWRPckFib3J0ZWQgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgYWJvcnRDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICAgICAgICBjb25zdCBzaG91bGRDb250aW51ZU5hdmlnYXRpb24gPSAoKSA9PiB7XG4gICAgICAgICAgcmV0dXJuICFjb21wbGV0ZWRPckFib3J0ZWQgJiYgdGhpcy5jdXJyZW50VHJhbnNpdGlvbj8uaWQgPT09IG92ZXJhbGxUcmFuc2l0aW9uU3RhdGUuaWQ7XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBvZihvdmVyYWxsVHJhbnNpdGlvblN0YXRlKS5waXBlKHN3aXRjaE1hcCh0ID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5uYXZpZ2F0aW9uSWQgPiBvdmVyYWxsVHJhbnNpdGlvblN0YXRlLmlkKSB7XG4gICAgICAgICAgICBjb25zdCBjYW5jZWxsYXRpb25SZWFzb24gPSB0eXBlb2YgbmdEZXZNb2RlID09PSAndW5kZWZpbmVkJyB8fCBuZ0Rldk1vZGUgPyBgTmF2aWdhdGlvbiBJRCAke292ZXJhbGxUcmFuc2l0aW9uU3RhdGUuaWR9IGlzIG5vdCBlcXVhbCB0byB0aGUgY3VycmVudCBuYXZpZ2F0aW9uIGlkICR7dGhpcy5uYXZpZ2F0aW9uSWR9YCA6ICcnO1xuICAgICAgICAgICAgdGhpcy5jYW5jZWxOYXZpZ2F0aW9uVHJhbnNpdGlvbihvdmVyYWxsVHJhbnNpdGlvblN0YXRlLCBjYW5jZWxsYXRpb25SZWFzb24sIE5hdmlnYXRpb25DYW5jZWxsYXRpb25Db2RlLlN1cGVyc2VkZWRCeU5ld05hdmlnYXRpb24pO1xuICAgICAgICAgICAgcmV0dXJuIEVNUFRZO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmN1cnJlbnRUcmFuc2l0aW9uID0gb3ZlcmFsbFRyYW5zaXRpb25TdGF0ZTtcbiAgICAgICAgICBjb25zdCBsYXN0U3VjY2Vzc2Z1bE5hdmlnYXRpb24gPSB0aGlzLmxhc3RTdWNjZXNzZnVsTmF2aWdhdGlvbigpO1xuICAgICAgICAgIHRoaXMuY3VycmVudE5hdmlnYXRpb24uc2V0KHtcbiAgICAgICAgICAgIGlkOiB0LmlkLFxuICAgICAgICAgICAgaW5pdGlhbFVybDogdC5yYXdVcmwsXG4gICAgICAgICAgICBleHRyYWN0ZWRVcmw6IHQuZXh0cmFjdGVkVXJsLFxuICAgICAgICAgICAgdGFyZ2V0QnJvd3NlclVybDogdHlwZW9mIHQuZXh0cmFzLmJyb3dzZXJVcmwgPT09ICdzdHJpbmcnID8gdGhpcy51cmxTZXJpYWxpemVyLnBhcnNlKHQuZXh0cmFzLmJyb3dzZXJVcmwpIDogdC5leHRyYXMuYnJvd3NlclVybCxcbiAgICAgICAgICAgIHRyaWdnZXI6IHQuc291cmNlLFxuICAgICAgICAgICAgZXh0cmFzOiB0LmV4dHJhcyxcbiAgICAgICAgICAgIHByZXZpb3VzTmF2aWdhdGlvbjogIWxhc3RTdWNjZXNzZnVsTmF2aWdhdGlvbiA/IG51bGwgOiB7XG4gICAgICAgICAgICAgIC4uLmxhc3RTdWNjZXNzZnVsTmF2aWdhdGlvbixcbiAgICAgICAgICAgICAgcHJldmlvdXNOYXZpZ2F0aW9uOiBudWxsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYWJvcnQ6ICgpID0+IGFib3J0Q29udHJvbGxlci5hYm9ydCgpLFxuICAgICAgICAgICAgcm91dGVzUmVjb2duaXplSGFuZGxlcjogdC5yb3V0ZXNSZWNvZ25pemVIYW5kbGVyLFxuICAgICAgICAgICAgYmVmb3JlQWN0aXZhdGVIYW5kbGVyOiB0LmJlZm9yZUFjdGl2YXRlSGFuZGxlclxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGNvbnN0IHVybFRyYW5zaXRpb24gPSAhcm91dGVyLm5hdmlnYXRlZCB8fCB0aGlzLmlzVXBkYXRpbmdJbnRlcm5hbFN0YXRlKCkgfHwgdGhpcy5pc1VwZGF0ZWRCcm93c2VyVXJsKCk7XG4gICAgICAgICAgY29uc3Qgb25TYW1lVXJsTmF2aWdhdGlvbiA9IHQuZXh0cmFzLm9uU2FtZVVybE5hdmlnYXRpb24gPz8gcm91dGVyLm9uU2FtZVVybE5hdmlnYXRpb247XG4gICAgICAgICAgaWYgKCF1cmxUcmFuc2l0aW9uICYmIG9uU2FtZVVybE5hdmlnYXRpb24gIT09ICdyZWxvYWQnKSB7XG4gICAgICAgICAgICBjb25zdCByZWFzb24gPSB0eXBlb2YgbmdEZXZNb2RlID09PSAndW5kZWZpbmVkJyB8fCBuZ0Rldk1vZGUgPyBgTmF2aWdhdGlvbiB0byAke3QucmF3VXJsfSB3YXMgaWdub3JlZCBiZWNhdXNlIGl0IGlzIHRoZSBzYW1lIGFzIHRoZSBjdXJyZW50IFJvdXRlciBVUkwuYCA6ICcnO1xuICAgICAgICAgICAgdGhpcy5ldmVudHMubmV4dChuZXcgTmF2aWdhdGlvblNraXBwZWQodC5pZCwgdGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZSh0LnJhd1VybCksIHJlYXNvbiwgTmF2aWdhdGlvblNraXBwZWRDb2RlLklnbm9yZWRTYW1lVXJsTmF2aWdhdGlvbikpO1xuICAgICAgICAgICAgdC5yZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgIHJldHVybiBFTVBUWTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHRoaXMudXJsSGFuZGxpbmdTdHJhdGVneS5zaG91bGRQcm9jZXNzVXJsKHQucmF3VXJsKSkge1xuICAgICAgICAgICAgcmV0dXJuIG9mKHQpLnBpcGUoc3dpdGNoTWFwKHQgPT4ge1xuICAgICAgICAgICAgICB0aGlzLmV2ZW50cy5uZXh0KG5ldyBOYXZpZ2F0aW9uU3RhcnQodC5pZCwgdGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZSh0LmV4dHJhY3RlZFVybCksIHQuc291cmNlLCB0LnJlc3RvcmVkU3RhdGUpKTtcbiAgICAgICAgICAgICAgaWYgKHQuaWQgIT09IHRoaXMubmF2aWdhdGlvbklkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIEVNUFRZO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodCk7XG4gICAgICAgICAgICB9KSwgcmVjb2duaXplKHRoaXMuZW52aXJvbm1lbnRJbmplY3RvciwgdGhpcy5jb25maWdMb2FkZXIsIHRoaXMucm9vdENvbXBvbmVudFR5cGUsIHJvdXRlci5jb25maWcsIHRoaXMudXJsU2VyaWFsaXplciwgdGhpcy5wYXJhbXNJbmhlcml0YW5jZVN0cmF0ZWd5LCBhYm9ydENvbnRyb2xsZXIuc2lnbmFsKSwgdGFwKHQgPT4ge1xuICAgICAgICAgICAgICBvdmVyYWxsVHJhbnNpdGlvblN0YXRlLnRhcmdldFNuYXBzaG90ID0gdC50YXJnZXRTbmFwc2hvdDtcbiAgICAgICAgICAgICAgb3ZlcmFsbFRyYW5zaXRpb25TdGF0ZS51cmxBZnRlclJlZGlyZWN0cyA9IHQudXJsQWZ0ZXJSZWRpcmVjdHM7XG4gICAgICAgICAgICAgIHRoaXMuY3VycmVudE5hdmlnYXRpb24udXBkYXRlKG5hdiA9PiB7XG4gICAgICAgICAgICAgICAgbmF2LmZpbmFsVXJsID0gdC51cmxBZnRlclJlZGlyZWN0cztcbiAgICAgICAgICAgICAgICByZXR1cm4gbmF2O1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgdGhpcy5ldmVudHMubmV4dChuZXcgQmVmb3JlUm91dGVzUmVjb2duaXplZCgpKTtcbiAgICAgICAgICAgIH0pLCBzd2l0Y2hNYXAodmFsdWUgPT4gZnJvbShvdmVyYWxsVHJhbnNpdGlvblN0YXRlLnJvdXRlc1JlY29nbml6ZUhhbmRsZXIuZGVmZXJyZWRIYW5kbGUgPz8gb2Yodm9pZCAwKSkucGlwZShtYXAoKCkgPT4gdmFsdWUpKSksIHRhcCgoKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHJvdXRlc1JlY29nbml6ZWQgPSBuZXcgUm91dGVzUmVjb2duaXplZCh0LmlkLCB0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKHQuZXh0cmFjdGVkVXJsKSwgdGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZSh0LnVybEFmdGVyUmVkaXJlY3RzKSwgdC50YXJnZXRTbmFwc2hvdCk7XG4gICAgICAgICAgICAgIHRoaXMuZXZlbnRzLm5leHQocm91dGVzUmVjb2duaXplZCk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgfSBlbHNlIGlmICh1cmxUcmFuc2l0aW9uICYmIHRoaXMudXJsSGFuZGxpbmdTdHJhdGVneS5zaG91bGRQcm9jZXNzVXJsKHQuY3VycmVudFJhd1VybCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICAgIGV4dHJhY3RlZFVybCxcbiAgICAgICAgICAgICAgc291cmNlLFxuICAgICAgICAgICAgICByZXN0b3JlZFN0YXRlLFxuICAgICAgICAgICAgICBleHRyYXNcbiAgICAgICAgICAgIH0gPSB0O1xuICAgICAgICAgICAgY29uc3QgbmF2U3RhcnQgPSBuZXcgTmF2aWdhdGlvblN0YXJ0KGlkLCB0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKGV4dHJhY3RlZFVybCksIHNvdXJjZSwgcmVzdG9yZWRTdGF0ZSk7XG4gICAgICAgICAgICB0aGlzLmV2ZW50cy5uZXh0KG5hdlN0YXJ0KTtcbiAgICAgICAgICAgIGNvbnN0IHRhcmdldFNuYXBzaG90ID0gY3JlYXRlRW1wdHlTdGF0ZSh0aGlzLnJvb3RDb21wb25lbnRUeXBlLCB0aGlzLmVudmlyb25tZW50SW5qZWN0b3IpLnNuYXBzaG90O1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50VHJhbnNpdGlvbiA9IG92ZXJhbGxUcmFuc2l0aW9uU3RhdGUgPSB7XG4gICAgICAgICAgICAgIC4uLnQsXG4gICAgICAgICAgICAgIHRhcmdldFNuYXBzaG90LFxuICAgICAgICAgICAgICB1cmxBZnRlclJlZGlyZWN0czogZXh0cmFjdGVkVXJsLFxuICAgICAgICAgICAgICBleHRyYXM6IHtcbiAgICAgICAgICAgICAgICAuLi5leHRyYXMsXG4gICAgICAgICAgICAgICAgc2tpcExvY2F0aW9uQ2hhbmdlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICByZXBsYWNlVXJsOiBmYWxzZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50TmF2aWdhdGlvbi51cGRhdGUobmF2ID0+IHtcbiAgICAgICAgICAgICAgbmF2LmZpbmFsVXJsID0gZXh0cmFjdGVkVXJsO1xuICAgICAgICAgICAgICByZXR1cm4gbmF2O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gb2Yob3ZlcmFsbFRyYW5zaXRpb25TdGF0ZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHJlYXNvbiA9IHR5cGVvZiBuZ0Rldk1vZGUgPT09ICd1bmRlZmluZWQnIHx8IG5nRGV2TW9kZSA/IGBOYXZpZ2F0aW9uIHdhcyBpZ25vcmVkIGJlY2F1c2UgdGhlIFVybEhhbmRsaW5nU3RyYXRlZ3lgICsgYCBpbmRpY2F0ZWQgbmVpdGhlciB0aGUgY3VycmVudCBVUkwgJHt0LmN1cnJlbnRSYXdVcmx9IG5vciB0YXJnZXQgVVJMICR7dC5yYXdVcmx9IHNob3VsZCBiZSBwcm9jZXNzZWQuYCA6ICcnO1xuICAgICAgICAgICAgdGhpcy5ldmVudHMubmV4dChuZXcgTmF2aWdhdGlvblNraXBwZWQodC5pZCwgdGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZSh0LmV4dHJhY3RlZFVybCksIHJlYXNvbiwgTmF2aWdhdGlvblNraXBwZWRDb2RlLklnbm9yZWRCeVVybEhhbmRsaW5nU3RyYXRlZ3kpKTtcbiAgICAgICAgICAgIHQucmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICByZXR1cm4gRU1QVFk7XG4gICAgICAgICAgfVxuICAgICAgICB9KSwgbWFwKHQgPT4ge1xuICAgICAgICAgIGNvbnN0IGd1YXJkc1N0YXJ0ID0gbmV3IEd1YXJkc0NoZWNrU3RhcnQodC5pZCwgdGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZSh0LmV4dHJhY3RlZFVybCksIHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUodC51cmxBZnRlclJlZGlyZWN0cyksIHQudGFyZ2V0U25hcHNob3QpO1xuICAgICAgICAgIHRoaXMuZXZlbnRzLm5leHQoZ3VhcmRzU3RhcnQpO1xuICAgICAgICAgIHRoaXMuY3VycmVudFRyYW5zaXRpb24gPSBvdmVyYWxsVHJhbnNpdGlvblN0YXRlID0ge1xuICAgICAgICAgICAgLi4udCxcbiAgICAgICAgICAgIGd1YXJkczogZ2V0QWxsUm91dGVHdWFyZHModC50YXJnZXRTbmFwc2hvdCwgdC5jdXJyZW50U25hcHNob3QsIHRoaXMucm9vdENvbnRleHRzKVxuICAgICAgICAgIH07XG4gICAgICAgICAgcmV0dXJuIG92ZXJhbGxUcmFuc2l0aW9uU3RhdGU7XG4gICAgICAgIH0pLCBjaGVja0d1YXJkcyhldnQgPT4gdGhpcy5ldmVudHMubmV4dChldnQpKSwgc3dpdGNoTWFwKHQgPT4ge1xuICAgICAgICAgIG92ZXJhbGxUcmFuc2l0aW9uU3RhdGUuZ3VhcmRzUmVzdWx0ID0gdC5ndWFyZHNSZXN1bHQ7XG4gICAgICAgICAgaWYgKHQuZ3VhcmRzUmVzdWx0ICYmIHR5cGVvZiB0Lmd1YXJkc1Jlc3VsdCAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICB0aHJvdyByZWRpcmVjdGluZ05hdmlnYXRpb25FcnJvcih0aGlzLnVybFNlcmlhbGl6ZXIsIHQuZ3VhcmRzUmVzdWx0KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgZ3VhcmRzRW5kID0gbmV3IEd1YXJkc0NoZWNrRW5kKHQuaWQsIHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUodC5leHRyYWN0ZWRVcmwpLCB0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKHQudXJsQWZ0ZXJSZWRpcmVjdHMpLCB0LnRhcmdldFNuYXBzaG90LCAhIXQuZ3VhcmRzUmVzdWx0KTtcbiAgICAgICAgICB0aGlzLmV2ZW50cy5uZXh0KGd1YXJkc0VuZCk7XG4gICAgICAgICAgaWYgKCFzaG91bGRDb250aW51ZU5hdmlnYXRpb24oKSkge1xuICAgICAgICAgICAgcmV0dXJuIEVNUFRZO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIXQuZ3VhcmRzUmVzdWx0KSB7XG4gICAgICAgICAgICB0aGlzLmNhbmNlbE5hdmlnYXRpb25UcmFuc2l0aW9uKHQsICcnLCBOYXZpZ2F0aW9uQ2FuY2VsbGF0aW9uQ29kZS5HdWFyZFJlamVjdGVkKTtcbiAgICAgICAgICAgIHJldHVybiBFTVBUWTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHQuZ3VhcmRzLmNhbkFjdGl2YXRlQ2hlY2tzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIG9mKHQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCByZXNvbHZlU3RhcnQgPSBuZXcgUmVzb2x2ZVN0YXJ0KHQuaWQsIHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUodC5leHRyYWN0ZWRVcmwpLCB0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKHQudXJsQWZ0ZXJSZWRpcmVjdHMpLCB0LnRhcmdldFNuYXBzaG90KTtcbiAgICAgICAgICB0aGlzLmV2ZW50cy5uZXh0KHJlc29sdmVTdGFydCk7XG4gICAgICAgICAgaWYgKCFzaG91bGRDb250aW51ZU5hdmlnYXRpb24oKSkge1xuICAgICAgICAgICAgcmV0dXJuIEVNUFRZO1xuICAgICAgICAgIH1cbiAgICAgICAgICBsZXQgZGF0YVJlc29sdmVkID0gZmFsc2U7XG4gICAgICAgICAgcmV0dXJuIG9mKHQpLnBpcGUocmVzb2x2ZURhdGEodGhpcy5wYXJhbXNJbmhlcml0YW5jZVN0cmF0ZWd5KSwgdGFwKHtcbiAgICAgICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgZGF0YVJlc29sdmVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgY29uc3QgcmVzb2x2ZUVuZCA9IG5ldyBSZXNvbHZlRW5kKHQuaWQsIHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUodC5leHRyYWN0ZWRVcmwpLCB0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKHQudXJsQWZ0ZXJSZWRpcmVjdHMpLCB0LnRhcmdldFNuYXBzaG90KTtcbiAgICAgICAgICAgICAgdGhpcy5ldmVudHMubmV4dChyZXNvbHZlRW5kKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb21wbGV0ZTogKCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoIWRhdGFSZXNvbHZlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FuY2VsTmF2aWdhdGlvblRyYW5zaXRpb24odCwgdHlwZW9mIG5nRGV2TW9kZSA9PT0gJ3VuZGVmaW5lZCcgfHwgbmdEZXZNb2RlID8gYEF0IGxlYXN0IG9uZSByb3V0ZSByZXNvbHZlciBkaWRuJ3QgZW1pdCBhbnkgdmFsdWUuYCA6ICcnLCBOYXZpZ2F0aW9uQ2FuY2VsbGF0aW9uQ29kZS5Ob0RhdGFGcm9tUmVzb2x2ZXIpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkpO1xuICAgICAgICB9KSwgc3dpdGNoVGFwKHQgPT4ge1xuICAgICAgICAgIGNvbnN0IGxvYWRDb21wb25lbnRzID0gcm91dGUgPT4ge1xuICAgICAgICAgICAgY29uc3QgbG9hZGVycyA9IFtdO1xuICAgICAgICAgICAgaWYgKHJvdXRlLnJvdXRlQ29uZmlnPy5fbG9hZGVkQ29tcG9uZW50KSB7XG4gICAgICAgICAgICAgIHJvdXRlLmNvbXBvbmVudCA9IHJvdXRlLnJvdXRlQ29uZmlnPy5fbG9hZGVkQ29tcG9uZW50O1xuICAgICAgICAgICAgfSBlbHNlIGlmIChyb3V0ZS5yb3V0ZUNvbmZpZz8ubG9hZENvbXBvbmVudCkge1xuICAgICAgICAgICAgICBjb25zdCBpbmplY3RvciA9IHJvdXRlLl9lbnZpcm9ubWVudEluamVjdG9yO1xuICAgICAgICAgICAgICBsb2FkZXJzLnB1c2godGhpcy5jb25maWdMb2FkZXIubG9hZENvbXBvbmVudChpbmplY3Rvciwgcm91dGUucm91dGVDb25maWcpLnRoZW4obG9hZGVkQ29tcG9uZW50ID0+IHtcbiAgICAgICAgICAgICAgICByb3V0ZS5jb21wb25lbnQgPSBsb2FkZWRDb21wb25lbnQ7XG4gICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAoY29uc3QgY2hpbGQgb2Ygcm91dGUuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgbG9hZGVycy5wdXNoKC4uLmxvYWRDb21wb25lbnRzKGNoaWxkKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbG9hZGVycztcbiAgICAgICAgICB9O1xuICAgICAgICAgIGNvbnN0IGxvYWRlcnMgPSBsb2FkQ29tcG9uZW50cyh0LnRhcmdldFNuYXBzaG90LnJvb3QpO1xuICAgICAgICAgIHJldHVybiBsb2FkZXJzLmxlbmd0aCA9PT0gMCA/IG9mKHQpIDogZnJvbShQcm9taXNlLmFsbChsb2FkZXJzKS50aGVuKCgpID0+IHQpKTtcbiAgICAgICAgfSksIHN3aXRjaFRhcCgoKSA9PiB0aGlzLmFmdGVyUHJlYWN0aXZhdGlvbigpKSwgc3dpdGNoTWFwKCgpID0+IHtcbiAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBjdXJyZW50U25hcHNob3QsXG4gICAgICAgICAgICB0YXJnZXRTbmFwc2hvdFxuICAgICAgICAgIH0gPSBvdmVyYWxsVHJhbnNpdGlvblN0YXRlO1xuICAgICAgICAgIGNvbnN0IHZpZXdUcmFuc2l0aW9uU3RhcnRlZCA9IHRoaXMuY3JlYXRlVmlld1RyYW5zaXRpb24/Lih0aGlzLmVudmlyb25tZW50SW5qZWN0b3IsIGN1cnJlbnRTbmFwc2hvdC5yb290LCB0YXJnZXRTbmFwc2hvdC5yb290KTtcbiAgICAgICAgICByZXR1cm4gdmlld1RyYW5zaXRpb25TdGFydGVkID8gZnJvbSh2aWV3VHJhbnNpdGlvblN0YXJ0ZWQpLnBpcGUobWFwKCgpID0+IG92ZXJhbGxUcmFuc2l0aW9uU3RhdGUpKSA6IG9mKG92ZXJhbGxUcmFuc2l0aW9uU3RhdGUpO1xuICAgICAgICB9KSwgdGFrZSgxKSwgc3dpdGNoTWFwKHQgPT4ge1xuICAgICAgICAgIGNvbnN0IHRhcmdldFJvdXRlclN0YXRlID0gY3JlYXRlUm91dGVyU3RhdGUocm91dGVyLnJvdXRlUmV1c2VTdHJhdGVneSwgdC50YXJnZXRTbmFwc2hvdCwgdC5jdXJyZW50Um91dGVyU3RhdGUpO1xuICAgICAgICAgIHRoaXMuY3VycmVudFRyYW5zaXRpb24gPSBvdmVyYWxsVHJhbnNpdGlvblN0YXRlID0gdCA9IHtcbiAgICAgICAgICAgIC4uLnQsXG4gICAgICAgICAgICB0YXJnZXRSb3V0ZXJTdGF0ZVxuICAgICAgICAgIH07XG4gICAgICAgICAgdGhpcy5jdXJyZW50TmF2aWdhdGlvbi51cGRhdGUobmF2ID0+IHtcbiAgICAgICAgICAgIG5hdi50YXJnZXRSb3V0ZXJTdGF0ZSA9IHRhcmdldFJvdXRlclN0YXRlO1xuICAgICAgICAgICAgcmV0dXJuIG5hdjtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLmV2ZW50cy5uZXh0KG5ldyBCZWZvcmVBY3RpdmF0ZVJvdXRlcygpKTtcbiAgICAgICAgICBjb25zdCBkZWZlcnJlZCA9IG92ZXJhbGxUcmFuc2l0aW9uU3RhdGUuYmVmb3JlQWN0aXZhdGVIYW5kbGVyLmRlZmVycmVkSGFuZGxlO1xuICAgICAgICAgIHJldHVybiBkZWZlcnJlZCA/IGZyb20oZGVmZXJyZWQudGhlbigoKSA9PiB0KSkgOiBvZih0KTtcbiAgICAgICAgfSksIHRhcCh0ID0+IHtcbiAgICAgICAgICBuZXcgQWN0aXZhdGVSb3V0ZXMocm91dGVyLnJvdXRlUmV1c2VTdHJhdGVneSwgb3ZlcmFsbFRyYW5zaXRpb25TdGF0ZS50YXJnZXRSb3V0ZXJTdGF0ZSwgb3ZlcmFsbFRyYW5zaXRpb25TdGF0ZS5jdXJyZW50Um91dGVyU3RhdGUsIGV2dCA9PiB0aGlzLmV2ZW50cy5uZXh0KGV2dCksIHRoaXMuaW5wdXRCaW5kaW5nRW5hYmxlZCkuYWN0aXZhdGUodGhpcy5yb290Q29udGV4dHMpO1xuICAgICAgICAgIGlmICghc2hvdWxkQ29udGludWVOYXZpZ2F0aW9uKCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29tcGxldGVkT3JBYm9ydGVkID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLmN1cnJlbnROYXZpZ2F0aW9uLnVwZGF0ZShuYXYgPT4ge1xuICAgICAgICAgICAgbmF2LmFib3J0ID0gbm9vcDtcbiAgICAgICAgICAgIHJldHVybiBuYXY7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5sYXN0U3VjY2Vzc2Z1bE5hdmlnYXRpb24uc2V0KHVudHJhY2tlZCh0aGlzLmN1cnJlbnROYXZpZ2F0aW9uKSk7XG4gICAgICAgICAgdGhpcy5ldmVudHMubmV4dChuZXcgTmF2aWdhdGlvbkVuZCh0LmlkLCB0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKHQuZXh0cmFjdGVkVXJsKSwgdGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZSh0LnVybEFmdGVyUmVkaXJlY3RzKSkpO1xuICAgICAgICAgIHRoaXMudGl0bGVTdHJhdGVneT8udXBkYXRlVGl0bGUodC50YXJnZXRSb3V0ZXJTdGF0ZS5zbmFwc2hvdCk7XG4gICAgICAgICAgdC5yZXNvbHZlKHRydWUpO1xuICAgICAgICB9KSwgdGFrZVVudGlsKGFib3J0U2lnbmFsVG9PYnNlcnZhYmxlKGFib3J0Q29udHJvbGxlci5zaWduYWwpLnBpcGUoZmlsdGVyKCgpID0+ICFjb21wbGV0ZWRPckFib3J0ZWQgJiYgIW92ZXJhbGxUcmFuc2l0aW9uU3RhdGUudGFyZ2V0Um91dGVyU3RhdGUpLCB0YXAoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuY2FuY2VsTmF2aWdhdGlvblRyYW5zaXRpb24ob3ZlcmFsbFRyYW5zaXRpb25TdGF0ZSwgYWJvcnRDb250cm9sbGVyLnNpZ25hbC5yZWFzb24gKyAnJywgTmF2aWdhdGlvbkNhbmNlbGxhdGlvbkNvZGUuQWJvcnRlZCk7XG4gICAgICAgIH0pKSksIHRhcCh7XG4gICAgICAgICAgY29tcGxldGU6ICgpID0+IHtcbiAgICAgICAgICAgIGNvbXBsZXRlZE9yQWJvcnRlZCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KSwgdGFrZVVudGlsKHRoaXMudHJhbnNpdGlvbkFib3J0V2l0aEVycm9yU3ViamVjdC5waXBlKHRhcChlcnIgPT4ge1xuICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfSkpKSwgZmluYWxpemUoKCkgPT4ge1xuICAgICAgICAgIGFib3J0Q29udHJvbGxlci5hYm9ydCgpO1xuICAgICAgICAgIGlmICghY29tcGxldGVkT3JBYm9ydGVkKSB7XG4gICAgICAgICAgICBjb25zdCBjYW5jZWxhdGlvblJlYXNvbiA9IHR5cGVvZiBuZ0Rldk1vZGUgPT09ICd1bmRlZmluZWQnIHx8IG5nRGV2TW9kZSA/IGBOYXZpZ2F0aW9uIElEICR7b3ZlcmFsbFRyYW5zaXRpb25TdGF0ZS5pZH0gaXMgbm90IGVxdWFsIHRvIHRoZSBjdXJyZW50IG5hdmlnYXRpb24gaWQgJHt0aGlzLm5hdmlnYXRpb25JZH1gIDogJyc7XG4gICAgICAgICAgICB0aGlzLmNhbmNlbE5hdmlnYXRpb25UcmFuc2l0aW9uKG92ZXJhbGxUcmFuc2l0aW9uU3RhdGUsIGNhbmNlbGF0aW9uUmVhc29uLCBOYXZpZ2F0aW9uQ2FuY2VsbGF0aW9uQ29kZS5TdXBlcnNlZGVkQnlOZXdOYXZpZ2F0aW9uKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHRoaXMuY3VycmVudFRyYW5zaXRpb24/LmlkID09PSBvdmVyYWxsVHJhbnNpdGlvblN0YXRlLmlkKSB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnROYXZpZ2F0aW9uLnNldChudWxsKTtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFRyYW5zaXRpb24gPSBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgfSksIGNhdGNoRXJyb3IoZSA9PiB7XG4gICAgICAgICAgY29tcGxldGVkT3JBYm9ydGVkID0gdHJ1ZTtcbiAgICAgICAgICBpZiAodGhpcy5kZXN0cm95ZWQpIHtcbiAgICAgICAgICAgIG92ZXJhbGxUcmFuc2l0aW9uU3RhdGUucmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICByZXR1cm4gRU1QVFk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChpc05hdmlnYXRpb25DYW5jZWxpbmdFcnJvcihlKSkge1xuICAgICAgICAgICAgdGhpcy5ldmVudHMubmV4dChuZXcgTmF2aWdhdGlvbkNhbmNlbChvdmVyYWxsVHJhbnNpdGlvblN0YXRlLmlkLCB0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKG92ZXJhbGxUcmFuc2l0aW9uU3RhdGUuZXh0cmFjdGVkVXJsKSwgZS5tZXNzYWdlLCBlLmNhbmNlbGxhdGlvbkNvZGUpKTtcbiAgICAgICAgICAgIGlmICghaXNSZWRpcmVjdGluZ05hdmlnYXRpb25DYW5jZWxpbmdFcnJvcihlKSkge1xuICAgICAgICAgICAgICBvdmVyYWxsVHJhbnNpdGlvblN0YXRlLnJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5ldmVudHMubmV4dChuZXcgUmVkaXJlY3RSZXF1ZXN0KGUudXJsLCBlLm5hdmlnYXRpb25CZWhhdmlvck9wdGlvbnMpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgbmF2aWdhdGlvbkVycm9yID0gbmV3IE5hdmlnYXRpb25FcnJvcihvdmVyYWxsVHJhbnNpdGlvblN0YXRlLmlkLCB0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKG92ZXJhbGxUcmFuc2l0aW9uU3RhdGUuZXh0cmFjdGVkVXJsKSwgZSwgb3ZlcmFsbFRyYW5zaXRpb25TdGF0ZS50YXJnZXRTbmFwc2hvdCA/PyB1bmRlZmluZWQpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgY29uc3QgbmF2aWdhdGlvbkVycm9ySGFuZGxlclJlc3VsdCA9IHJ1bkluSW5qZWN0aW9uQ29udGV4dCh0aGlzLmVudmlyb25tZW50SW5qZWN0b3IsICgpID0+IHRoaXMubmF2aWdhdGlvbkVycm9ySGFuZGxlcj8uKG5hdmlnYXRpb25FcnJvcikpO1xuICAgICAgICAgICAgICBpZiAobmF2aWdhdGlvbkVycm9ySGFuZGxlclJlc3VsdCBpbnN0YW5jZW9mIFJlZGlyZWN0Q29tbWFuZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgICAgICAgIG1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICBjYW5jZWxsYXRpb25Db2RlXG4gICAgICAgICAgICAgICAgfSA9IHJlZGlyZWN0aW5nTmF2aWdhdGlvbkVycm9yKHRoaXMudXJsU2VyaWFsaXplciwgbmF2aWdhdGlvbkVycm9ySGFuZGxlclJlc3VsdCk7XG4gICAgICAgICAgICAgICAgdGhpcy5ldmVudHMubmV4dChuZXcgTmF2aWdhdGlvbkNhbmNlbChvdmVyYWxsVHJhbnNpdGlvblN0YXRlLmlkLCB0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKG92ZXJhbGxUcmFuc2l0aW9uU3RhdGUuZXh0cmFjdGVkVXJsKSwgbWVzc2FnZSwgY2FuY2VsbGF0aW9uQ29kZSkpO1xuICAgICAgICAgICAgICAgIHRoaXMuZXZlbnRzLm5leHQobmV3IFJlZGlyZWN0UmVxdWVzdChuYXZpZ2F0aW9uRXJyb3JIYW5kbGVyUmVzdWx0LnJlZGlyZWN0VG8sIG5hdmlnYXRpb25FcnJvckhhbmRsZXJSZXN1bHQubmF2aWdhdGlvbkJlaGF2aW9yT3B0aW9ucykpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuZXZlbnRzLm5leHQobmF2aWdhdGlvbkVycm9yKTtcbiAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGNhdGNoIChlZSkge1xuICAgICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJlc29sdmVOYXZpZ2F0aW9uUHJvbWlzZU9uRXJyb3IpIHtcbiAgICAgICAgICAgICAgICBvdmVyYWxsVHJhbnNpdGlvblN0YXRlLnJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG92ZXJhbGxUcmFuc2l0aW9uU3RhdGUucmVqZWN0KGVlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gRU1QVFk7XG4gICAgICAgIH0pKTtcbiAgICAgIH0pKTtcbiAgICB9XG4gICAgY2FuY2VsTmF2aWdhdGlvblRyYW5zaXRpb24odCwgcmVhc29uLCBjb2RlKSB7XG4gICAgICBjb25zdCBuYXZDYW5jZWwgPSBuZXcgTmF2aWdhdGlvbkNhbmNlbCh0LmlkLCB0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKHQuZXh0cmFjdGVkVXJsKSwgcmVhc29uLCBjb2RlKTtcbiAgICAgIHRoaXMuZXZlbnRzLm5leHQobmF2Q2FuY2VsKTtcbiAgICAgIHQucmVzb2x2ZShmYWxzZSk7XG4gICAgfVxuICAgIGlzVXBkYXRpbmdJbnRlcm5hbFN0YXRlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY3VycmVudFRyYW5zaXRpb24/LmV4dHJhY3RlZFVybC50b1N0cmluZygpICE9PSB0aGlzLmN1cnJlbnRUcmFuc2l0aW9uPy5jdXJyZW50VXJsVHJlZS50b1N0cmluZygpO1xuICAgIH1cbiAgICBpc1VwZGF0ZWRCcm93c2VyVXJsKCkge1xuICAgICAgY29uc3QgY3VycmVudEJyb3dzZXJVcmwgPSB0aGlzLnVybEhhbmRsaW5nU3RyYXRlZ3kuZXh0cmFjdCh0aGlzLnVybFNlcmlhbGl6ZXIucGFyc2UodGhpcy5sb2NhdGlvbi5wYXRoKHRydWUpKSk7XG4gICAgICBjb25zdCBjdXJyZW50TmF2aWdhdGlvbiA9IHVudHJhY2tlZCh0aGlzLmN1cnJlbnROYXZpZ2F0aW9uKTtcbiAgICAgIGNvbnN0IHRhcmdldEJyb3dzZXJVcmwgPSBjdXJyZW50TmF2aWdhdGlvbj8udGFyZ2V0QnJvd3NlclVybCA/PyBjdXJyZW50TmF2aWdhdGlvbj8uZXh0cmFjdGVkVXJsO1xuICAgICAgcmV0dXJuIGN1cnJlbnRCcm93c2VyVXJsLnRvU3RyaW5nKCkgIT09IHRhcmdldEJyb3dzZXJVcmw/LnRvU3RyaW5nKCkgJiYgIWN1cnJlbnROYXZpZ2F0aW9uPy5leHRyYXMuc2tpcExvY2F0aW9uQ2hhbmdlO1xuICAgIH1cbiAgICBzdGF0aWMgybVmYWMgPSBmdW5jdGlvbiBOYXZpZ2F0aW9uVHJhbnNpdGlvbnNfRmFjdG9yeShfX25nRmFjdG9yeVR5cGVfXykge1xuICAgICAgcmV0dXJuIG5ldyAoX19uZ0ZhY3RvcnlUeXBlX18gfHwgTmF2aWdhdGlvblRyYW5zaXRpb25zKSgpO1xuICAgIH07XG4gICAgc3RhdGljIMm1cHJvdiA9IC8qIEBfX1BVUkVfXyAqL2kwLsm1ybVkZWZpbmVJbmplY3RhYmxlKHtcbiAgICAgIHRva2VuOiBOYXZpZ2F0aW9uVHJhbnNpdGlvbnMsXG4gICAgICBmYWN0b3J5OiBOYXZpZ2F0aW9uVHJhbnNpdGlvbnMuybVmYWMsXG4gICAgICBwcm92aWRlZEluOiAncm9vdCdcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gTmF2aWdhdGlvblRyYW5zaXRpb25zO1xufSkoKTtcbi8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICAodHlwZW9mIG5nRGV2TW9kZSA9PT0gXCJ1bmRlZmluZWRcIiB8fCBuZ0Rldk1vZGUpICYmIHZvaWQgMDtcbn0pKCk7XG5mdW5jdGlvbiBpc0Jyb3dzZXJUcmlnZ2VyZWROYXZpZ2F0aW9uKHNvdXJjZSkge1xuICByZXR1cm4gc291cmNlICE9PSBJTVBFUkFUSVZFX05BVklHQVRJT047XG59XG5jb25zdCBST1VURV9JTkpFQ1RPUl9DTEVBTlVQID0gLyojX19QVVJFX18qL25ldyBJbmplY3Rpb25Ub2tlbih0eXBlb2YgbmdEZXZNb2RlID09PSAndW5kZWZpbmVkJyB8fCBuZ0Rldk1vZGUgPyAnUm91dGVJbmplY3RvckNsZWFudXAnIDogJycpO1xuZnVuY3Rpb24gcm91dGVJbmplY3RvckNsZWFudXAocm91dGVSZXVzZVN0cmF0ZWd5LCByb3V0ZXJTdGF0ZSwgY29uZmlnKSB7XG4gIGNvbnN0IGFjdGl2ZVJvdXRlcyA9IG5ldyBTZXQoKTtcbiAgaWYgKHJvdXRlclN0YXRlLnNuYXBzaG90LnJvb3QpIHtcbiAgICBjb2xsZWN0RGVzY2VuZGFudHMocm91dGVyU3RhdGUuc25hcHNob3Qucm9vdCwgYWN0aXZlUm91dGVzKTtcbiAgfVxuICBjb25zdCBzdG9yZWRIYW5kbGVzID0gcm91dGVSZXVzZVN0cmF0ZWd5LnJldHJpZXZlU3RvcmVkUm91dGVIYW5kbGVzPy4oKSB8fCBbXTtcbiAgZm9yIChjb25zdCBoYW5kbGUgb2Ygc3RvcmVkSGFuZGxlcykge1xuICAgIGNvbnN0IGludGVybmFsSGFuZGxlID0gaGFuZGxlO1xuICAgIGlmIChpbnRlcm5hbEhhbmRsZT8ucm91dGU/LnZhbHVlPy5zbmFwc2hvdCkge1xuICAgICAgZm9yIChjb25zdCBzbmFwc2hvdCBvZiBpbnRlcm5hbEhhbmRsZS5yb3V0ZS52YWx1ZS5zbmFwc2hvdC5wYXRoRnJvbVJvb3QpIHtcbiAgICAgICAgaWYgKHNuYXBzaG90LnJvdXRlQ29uZmlnKSB7XG4gICAgICAgICAgYWN0aXZlUm91dGVzLmFkZChzbmFwc2hvdC5yb3V0ZUNvbmZpZyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgZGVzdHJveVVudXNlZEluamVjdG9ycyhjb25maWcsIGFjdGl2ZVJvdXRlcywgcm91dGVSZXVzZVN0cmF0ZWd5LCBmYWxzZSk7XG59XG5mdW5jdGlvbiBjb2xsZWN0RGVzY2VuZGFudHMoc25hcHNob3QsIGFjdGl2ZVJvdXRlcykge1xuICBpZiAoc25hcHNob3Qucm91dGVDb25maWcpIHtcbiAgICBhY3RpdmVSb3V0ZXMuYWRkKHNuYXBzaG90LnJvdXRlQ29uZmlnKTtcbiAgfVxuICBmb3IgKGNvbnN0IGNoaWxkIG9mIHNuYXBzaG90LmNoaWxkcmVuKSB7XG4gICAgY29sbGVjdERlc2NlbmRhbnRzKGNoaWxkLCBhY3RpdmVSb3V0ZXMpO1xuICB9XG59XG5mdW5jdGlvbiBkZXN0cm95VW51c2VkSW5qZWN0b3JzKHJvdXRlcywgYWN0aXZlUm91dGVzLCBzdHJhdGVneSwgaW5oZXJpdGVkRm9yY2VEZXN0cm95KSB7XG4gIGZvciAoY29uc3Qgcm91dGUgb2Ygcm91dGVzKSB7XG4gICAgY29uc3Qgc2hvdWxkRGVzdHJveUN1cnJlbnRSb3V0ZSA9IGluaGVyaXRlZEZvcmNlRGVzdHJveSB8fCAhISgocm91dGUuX2luamVjdG9yIHx8IHJvdXRlLl9sb2FkZWRJbmplY3RvcikgJiYgIWFjdGl2ZVJvdXRlcy5oYXMocm91dGUpICYmIChzdHJhdGVneS5zaG91bGREZXN0cm95SW5qZWN0b3I/Lihyb3V0ZSkgPz8gZmFsc2UpKTtcbiAgICBpZiAocm91dGUuY2hpbGRyZW4pIHtcbiAgICAgIGRlc3Ryb3lVbnVzZWRJbmplY3RvcnMocm91dGUuY2hpbGRyZW4sIGFjdGl2ZVJvdXRlcywgc3RyYXRlZ3ksIHNob3VsZERlc3Ryb3lDdXJyZW50Um91dGUpO1xuICAgIH1cbiAgICBpZiAocm91dGUubG9hZENoaWxkcmVuICYmIHJvdXRlLl9sb2FkZWRSb3V0ZXMpIHtcbiAgICAgIGRlc3Ryb3lVbnVzZWRJbmplY3RvcnMocm91dGUuX2xvYWRlZFJvdXRlcywgYWN0aXZlUm91dGVzLCBzdHJhdGVneSwgc2hvdWxkRGVzdHJveUN1cnJlbnRSb3V0ZSk7XG4gICAgfVxuICAgIGlmIChzaG91bGREZXN0cm95Q3VycmVudFJvdXRlKSB7XG4gICAgICBpZiAocm91dGUuX2luamVjdG9yKSB7XG4gICAgICAgIHJvdXRlLl9pbmplY3Rvci5kZXN0cm95KCk7XG4gICAgICAgIHJvdXRlLl9pbmplY3RvciA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGlmIChyb3V0ZS5fbG9hZGVkSW5qZWN0b3IpIHtcbiAgICAgICAgcm91dGUuX2xvYWRlZEluamVjdG9yLmRlc3Ryb3koKTtcbiAgICAgICAgcm91dGUuX2xvYWRlZEluamVjdG9yID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gZGVzdHJveURldGFjaGVkUm91dGVIYW5kbGUoaGFuZGxlKSB7XG4gIGNvbnN0IGludGVybmFsSGFuZGxlID0gaGFuZGxlO1xuICBpZiAoaW50ZXJuYWxIYW5kbGUgJiYgaW50ZXJuYWxIYW5kbGUuY29tcG9uZW50UmVmKSB7XG4gICAgaW50ZXJuYWxIYW5kbGUuY29tcG9uZW50UmVmLmRlc3Ryb3koKTtcbiAgfVxufVxubGV0IFJvdXRlUmV1c2VTdHJhdGVneSA9IC8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICBjbGFzcyBSb3V0ZVJldXNlU3RyYXRlZ3kge1xuICAgIHN0YXRpYyDJtWZhYyA9IGZ1bmN0aW9uIFJvdXRlUmV1c2VTdHJhdGVneV9GYWN0b3J5KF9fbmdGYWN0b3J5VHlwZV9fKSB7XG4gICAgICByZXR1cm4gbmV3IChfX25nRmFjdG9yeVR5cGVfXyB8fCBSb3V0ZVJldXNlU3RyYXRlZ3kpKCk7XG4gICAgfTtcbiAgICBzdGF0aWMgybVwcm92ID0gLyogQF9fUFVSRV9fICovaTAuybXJtWRlZmluZUluamVjdGFibGUoe1xuICAgICAgdG9rZW46IFJvdXRlUmV1c2VTdHJhdGVneSxcbiAgICAgIGZhY3Rvcnk6ICgpID0+ICgoKSA9PiBpbmplY3QoRGVmYXVsdFJvdXRlUmV1c2VTdHJhdGVneSkpKCksXG4gICAgICBwcm92aWRlZEluOiAncm9vdCdcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gUm91dGVSZXVzZVN0cmF0ZWd5O1xufSkoKTtcbi8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICAodHlwZW9mIG5nRGV2TW9kZSA9PT0gXCJ1bmRlZmluZWRcIiB8fCBuZ0Rldk1vZGUpICYmIHZvaWQgMDtcbn0pKCk7XG5jbGFzcyBCYXNlUm91dGVSZXVzZVN0cmF0ZWd5IHtcbiAgc2hvdWxkRGV0YWNoKHJvdXRlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHN0b3JlKHJvdXRlLCBkZXRhY2hlZFRyZWUpIHt9XG4gIHNob3VsZEF0dGFjaChyb3V0ZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXRyaWV2ZShyb3V0ZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHNob3VsZFJldXNlUm91dGUoZnV0dXJlLCBjdXJyKSB7XG4gICAgcmV0dXJuIGZ1dHVyZS5yb3V0ZUNvbmZpZyA9PT0gY3Vyci5yb3V0ZUNvbmZpZztcbiAgfVxuICBzaG91bGREZXN0cm95SW5qZWN0b3Iocm91dGUpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxubGV0IERlZmF1bHRSb3V0ZVJldXNlU3RyYXRlZ3kgPSAvKiNfX1BVUkVfXyovKCgpID0+IHtcbiAgY2xhc3MgRGVmYXVsdFJvdXRlUmV1c2VTdHJhdGVneSBleHRlbmRzIEJhc2VSb3V0ZVJldXNlU3RyYXRlZ3kge1xuICAgIHN0YXRpYyDJtWZhYyA9IC8qIEBfX1BVUkVfXyAqLygoKSA9PiB7XG4gICAgICBsZXQgybVEZWZhdWx0Um91dGVSZXVzZVN0cmF0ZWd5X0Jhc2VGYWN0b3J5O1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIERlZmF1bHRSb3V0ZVJldXNlU3RyYXRlZ3lfRmFjdG9yeShfX25nRmFjdG9yeVR5cGVfXykge1xuICAgICAgICByZXR1cm4gKMm1RGVmYXVsdFJvdXRlUmV1c2VTdHJhdGVneV9CYXNlRmFjdG9yeSB8fCAoybVEZWZhdWx0Um91dGVSZXVzZVN0cmF0ZWd5X0Jhc2VGYWN0b3J5ID0gaTAuybXJtWdldEluaGVyaXRlZEZhY3RvcnkoRGVmYXVsdFJvdXRlUmV1c2VTdHJhdGVneSkpKShfX25nRmFjdG9yeVR5cGVfXyB8fCBEZWZhdWx0Um91dGVSZXVzZVN0cmF0ZWd5KTtcbiAgICAgIH07XG4gICAgfSkoKTtcbiAgICBzdGF0aWMgybVwcm92ID0gLyogQF9fUFVSRV9fICovaTAuybXJtWRlZmluZUluamVjdGFibGUoe1xuICAgICAgdG9rZW46IERlZmF1bHRSb3V0ZVJldXNlU3RyYXRlZ3ksXG4gICAgICBmYWN0b3J5OiBEZWZhdWx0Um91dGVSZXVzZVN0cmF0ZWd5Lsm1ZmFjLFxuICAgICAgcHJvdmlkZWRJbjogJ3Jvb3QnXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIERlZmF1bHRSb3V0ZVJldXNlU3RyYXRlZ3k7XG59KSgpO1xuLyojX19QVVJFX18qLygoKSA9PiB7XG4gICh0eXBlb2YgbmdEZXZNb2RlID09PSBcInVuZGVmaW5lZFwiIHx8IG5nRGV2TW9kZSkgJiYgdm9pZCAwO1xufSkoKTtcbmxldCBTdGF0ZU1hbmFnZXIgPSAvKiNfX1BVUkVfXyovKCgpID0+IHtcbiAgY2xhc3MgU3RhdGVNYW5hZ2VyIHtcbiAgICB1cmxTZXJpYWxpemVyID0gaW5qZWN0KFVybFNlcmlhbGl6ZXIpO1xuICAgIG9wdGlvbnMgPSBpbmplY3QoUk9VVEVSX0NPTkZJR1VSQVRJT04sIHtcbiAgICAgIG9wdGlvbmFsOiB0cnVlXG4gICAgfSkgfHwge307XG4gICAgY2FuY2VsZWROYXZpZ2F0aW9uUmVzb2x1dGlvbiA9IHRoaXMub3B0aW9ucy5jYW5jZWxlZE5hdmlnYXRpb25SZXNvbHV0aW9uIHx8ICdyZXBsYWNlJztcbiAgICBsb2NhdGlvbiA9IGluamVjdChMb2NhdGlvbik7XG4gICAgdXJsSGFuZGxpbmdTdHJhdGVneSA9IGluamVjdChVcmxIYW5kbGluZ1N0cmF0ZWd5KTtcbiAgICB1cmxVcGRhdGVTdHJhdGVneSA9IHRoaXMub3B0aW9ucy51cmxVcGRhdGVTdHJhdGVneSB8fCAnZGVmZXJyZWQnO1xuICAgIGN1cnJlbnRVcmxUcmVlID0gbmV3IFVybFRyZWUoKTtcbiAgICBnZXRDdXJyZW50VXJsVHJlZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRVcmxUcmVlO1xuICAgIH1cbiAgICByYXdVcmxUcmVlID0gdGhpcy5jdXJyZW50VXJsVHJlZTtcbiAgICBnZXRSYXdVcmxUcmVlKCkge1xuICAgICAgcmV0dXJuIHRoaXMucmF3VXJsVHJlZTtcbiAgICB9XG4gICAgY3JlYXRlQnJvd3NlclBhdGgoe1xuICAgICAgZmluYWxVcmwsXG4gICAgICBpbml0aWFsVXJsLFxuICAgICAgdGFyZ2V0QnJvd3NlclVybFxuICAgIH0pIHtcbiAgICAgIGNvbnN0IHJhd1VybCA9IGZpbmFsVXJsICE9PSB1bmRlZmluZWQgPyB0aGlzLnVybEhhbmRsaW5nU3RyYXRlZ3kubWVyZ2UoZmluYWxVcmwsIGluaXRpYWxVcmwpIDogaW5pdGlhbFVybDtcbiAgICAgIGNvbnN0IHVybCA9IHRhcmdldEJyb3dzZXJVcmwgPz8gcmF3VXJsO1xuICAgICAgY29uc3QgcGF0aCA9IHVybCBpbnN0YW5jZW9mIFVybFRyZWUgPyB0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKHVybCkgOiB1cmw7XG4gICAgICByZXR1cm4gcGF0aDtcbiAgICB9XG4gICAgY29tbWl0VHJhbnNpdGlvbih7XG4gICAgICB0YXJnZXRSb3V0ZXJTdGF0ZSxcbiAgICAgIGZpbmFsVXJsLFxuICAgICAgaW5pdGlhbFVybFxuICAgIH0pIHtcbiAgICAgIGlmIChmaW5hbFVybCAmJiB0YXJnZXRSb3V0ZXJTdGF0ZSkge1xuICAgICAgICB0aGlzLmN1cnJlbnRVcmxUcmVlID0gZmluYWxVcmw7XG4gICAgICAgIHRoaXMucmF3VXJsVHJlZSA9IHRoaXMudXJsSGFuZGxpbmdTdHJhdGVneS5tZXJnZShmaW5hbFVybCwgaW5pdGlhbFVybCk7XG4gICAgICAgIHRoaXMucm91dGVyU3RhdGUgPSB0YXJnZXRSb3V0ZXJTdGF0ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucmF3VXJsVHJlZSA9IGluaXRpYWxVcmw7XG4gICAgICB9XG4gICAgfVxuICAgIHJvdXRlclN0YXRlID0gY3JlYXRlRW1wdHlTdGF0ZShudWxsLCBpbmplY3QoRW52aXJvbm1lbnRJbmplY3RvcikpO1xuICAgIGdldFJvdXRlclN0YXRlKCkge1xuICAgICAgcmV0dXJuIHRoaXMucm91dGVyU3RhdGU7XG4gICAgfVxuICAgIF9zdGF0ZU1lbWVudG8gPSB0aGlzLmNyZWF0ZVN0YXRlTWVtZW50bygpO1xuICAgIGdldCBzdGF0ZU1lbWVudG8oKSB7XG4gICAgICByZXR1cm4gdGhpcy5fc3RhdGVNZW1lbnRvO1xuICAgIH1cbiAgICB1cGRhdGVTdGF0ZU1lbWVudG8oKSB7XG4gICAgICB0aGlzLl9zdGF0ZU1lbWVudG8gPSB0aGlzLmNyZWF0ZVN0YXRlTWVtZW50bygpO1xuICAgIH1cbiAgICBjcmVhdGVTdGF0ZU1lbWVudG8oKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICByYXdVcmxUcmVlOiB0aGlzLnJhd1VybFRyZWUsXG4gICAgICAgIGN1cnJlbnRVcmxUcmVlOiB0aGlzLmN1cnJlbnRVcmxUcmVlLFxuICAgICAgICByb3V0ZXJTdGF0ZTogdGhpcy5yb3V0ZXJTdGF0ZVxuICAgICAgfTtcbiAgICB9XG4gICAgcmVzdG9yZWRTdGF0ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmxvY2F0aW9uLmdldFN0YXRlKCk7XG4gICAgfVxuICAgIHN0YXRpYyDJtWZhYyA9IGZ1bmN0aW9uIFN0YXRlTWFuYWdlcl9GYWN0b3J5KF9fbmdGYWN0b3J5VHlwZV9fKSB7XG4gICAgICByZXR1cm4gbmV3IChfX25nRmFjdG9yeVR5cGVfXyB8fCBTdGF0ZU1hbmFnZXIpKCk7XG4gICAgfTtcbiAgICBzdGF0aWMgybVwcm92ID0gLyogQF9fUFVSRV9fICovaTAuybXJtWRlZmluZUluamVjdGFibGUoe1xuICAgICAgdG9rZW46IFN0YXRlTWFuYWdlcixcbiAgICAgIGZhY3Rvcnk6ICgpID0+ICgoKSA9PiBpbmplY3QoSGlzdG9yeVN0YXRlTWFuYWdlcikpKCksXG4gICAgICBwcm92aWRlZEluOiAncm9vdCdcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gU3RhdGVNYW5hZ2VyO1xufSkoKTtcbi8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICAodHlwZW9mIG5nRGV2TW9kZSA9PT0gXCJ1bmRlZmluZWRcIiB8fCBuZ0Rldk1vZGUpICYmIHZvaWQgMDtcbn0pKCk7XG5sZXQgSGlzdG9yeVN0YXRlTWFuYWdlciA9IC8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICBjbGFzcyBIaXN0b3J5U3RhdGVNYW5hZ2VyIGV4dGVuZHMgU3RhdGVNYW5hZ2VyIHtcbiAgICBjdXJyZW50UGFnZUlkID0gMDtcbiAgICBsYXN0U3VjY2Vzc2Z1bElkID0gLTE7XG4gICAgZ2V0IGJyb3dzZXJQYWdlSWQoKSB7XG4gICAgICBpZiAodGhpcy5jYW5jZWxlZE5hdmlnYXRpb25SZXNvbHV0aW9uICE9PSAnY29tcHV0ZWQnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRQYWdlSWQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5yZXN0b3JlZFN0YXRlKCk/Lsm1cm91dGVyUGFnZUlkID8/IHRoaXMuY3VycmVudFBhZ2VJZDtcbiAgICB9XG4gICAgcmVnaXN0ZXJOb25Sb3V0ZXJDdXJyZW50RW50cnlDaGFuZ2VMaXN0ZW5lcihsaXN0ZW5lcikge1xuICAgICAgcmV0dXJuIHRoaXMubG9jYXRpb24uc3Vic2NyaWJlKGV2ZW50ID0+IHtcbiAgICAgICAgaWYgKGV2ZW50Wyd0eXBlJ10gPT09ICdwb3BzdGF0ZScpIHtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGxpc3RlbmVyKGV2ZW50Wyd1cmwnXSwgZXZlbnQuc3RhdGUsICdwb3BzdGF0ZScsIHtcbiAgICAgICAgICAgICAgcmVwbGFjZVVybDogdHJ1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICBoYW5kbGVSb3V0ZXJFdmVudChlLCBjdXJyZW50VHJhbnNpdGlvbikge1xuICAgICAgaWYgKGUgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uU3RhcnQpIHtcbiAgICAgICAgdGhpcy51cGRhdGVTdGF0ZU1lbWVudG8oKTtcbiAgICAgIH0gZWxzZSBpZiAoZSBpbnN0YW5jZW9mIE5hdmlnYXRpb25Ta2lwcGVkKSB7XG4gICAgICAgIHRoaXMuY29tbWl0VHJhbnNpdGlvbihjdXJyZW50VHJhbnNpdGlvbik7XG4gICAgICB9IGVsc2UgaWYgKGUgaW5zdGFuY2VvZiBSb3V0ZXNSZWNvZ25pemVkKSB7XG4gICAgICAgIGlmICh0aGlzLnVybFVwZGF0ZVN0cmF0ZWd5ID09PSAnZWFnZXInKSB7XG4gICAgICAgICAgaWYgKCFjdXJyZW50VHJhbnNpdGlvbi5leHRyYXMuc2tpcExvY2F0aW9uQ2hhbmdlKSB7XG4gICAgICAgICAgICB0aGlzLnNldEJyb3dzZXJVcmwodGhpcy5jcmVhdGVCcm93c2VyUGF0aChjdXJyZW50VHJhbnNpdGlvbiksIGN1cnJlbnRUcmFuc2l0aW9uKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZSBpbnN0YW5jZW9mIEJlZm9yZUFjdGl2YXRlUm91dGVzKSB7XG4gICAgICAgIHRoaXMuY29tbWl0VHJhbnNpdGlvbihjdXJyZW50VHJhbnNpdGlvbik7XG4gICAgICAgIGlmICh0aGlzLnVybFVwZGF0ZVN0cmF0ZWd5ID09PSAnZGVmZXJyZWQnICYmICFjdXJyZW50VHJhbnNpdGlvbi5leHRyYXMuc2tpcExvY2F0aW9uQ2hhbmdlKSB7XG4gICAgICAgICAgdGhpcy5zZXRCcm93c2VyVXJsKHRoaXMuY3JlYXRlQnJvd3NlclBhdGgoY3VycmVudFRyYW5zaXRpb24pLCBjdXJyZW50VHJhbnNpdGlvbik7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZSBpbnN0YW5jZW9mIE5hdmlnYXRpb25DYW5jZWwgJiYgIWlzUmVkaXJlY3RpbmdFdmVudChlKSkge1xuICAgICAgICB0aGlzLnJlc3RvcmVIaXN0b3J5KGN1cnJlbnRUcmFuc2l0aW9uKTtcbiAgICAgIH0gZWxzZSBpZiAoZSBpbnN0YW5jZW9mIE5hdmlnYXRpb25FcnJvcikge1xuICAgICAgICB0aGlzLnJlc3RvcmVIaXN0b3J5KGN1cnJlbnRUcmFuc2l0aW9uLCB0cnVlKTtcbiAgICAgIH0gZWxzZSBpZiAoZSBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQpIHtcbiAgICAgICAgdGhpcy5sYXN0U3VjY2Vzc2Z1bElkID0gZS5pZDtcbiAgICAgICAgdGhpcy5jdXJyZW50UGFnZUlkID0gdGhpcy5icm93c2VyUGFnZUlkO1xuICAgICAgfVxuICAgIH1cbiAgICBzZXRCcm93c2VyVXJsKHBhdGgsIHtcbiAgICAgIGV4dHJhcyxcbiAgICAgIGlkXG4gICAgfSkge1xuICAgICAgY29uc3Qge1xuICAgICAgICByZXBsYWNlVXJsLFxuICAgICAgICBzdGF0ZVxuICAgICAgfSA9IGV4dHJhcztcbiAgICAgIGlmICh0aGlzLmxvY2F0aW9uLmlzQ3VycmVudFBhdGhFcXVhbFRvKHBhdGgpIHx8ICEhcmVwbGFjZVVybCkge1xuICAgICAgICBjb25zdCBjdXJyZW50QnJvd3NlclBhZ2VJZCA9IHRoaXMuYnJvd3NlclBhZ2VJZDtcbiAgICAgICAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgLi4udGhpcy5nZW5lcmF0ZU5nUm91dGVyU3RhdGUoaWQsIGN1cnJlbnRCcm93c2VyUGFnZUlkKVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmxvY2F0aW9uLnJlcGxhY2VTdGF0ZShwYXRoLCAnJywgbmV3U3RhdGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgLi4udGhpcy5nZW5lcmF0ZU5nUm91dGVyU3RhdGUoaWQsIHRoaXMuYnJvd3NlclBhZ2VJZCArIDEpXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMubG9jYXRpb24uZ28ocGF0aCwgJycsIG5ld1N0YXRlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmVzdG9yZUhpc3RvcnkobmF2aWdhdGlvbiwgcmVzdG9yaW5nRnJvbUNhdWdodEVycm9yID0gZmFsc2UpIHtcbiAgICAgIGlmICh0aGlzLmNhbmNlbGVkTmF2aWdhdGlvblJlc29sdXRpb24gPT09ICdjb21wdXRlZCcpIHtcbiAgICAgICAgY29uc3QgY3VycmVudEJyb3dzZXJQYWdlSWQgPSB0aGlzLmJyb3dzZXJQYWdlSWQ7XG4gICAgICAgIGNvbnN0IHRhcmdldFBhZ2VQb3NpdGlvbiA9IHRoaXMuY3VycmVudFBhZ2VJZCAtIGN1cnJlbnRCcm93c2VyUGFnZUlkO1xuICAgICAgICBpZiAodGFyZ2V0UGFnZVBvc2l0aW9uICE9PSAwKSB7XG4gICAgICAgICAgdGhpcy5sb2NhdGlvbi5oaXN0b3J5R28odGFyZ2V0UGFnZVBvc2l0aW9uKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmdldEN1cnJlbnRVcmxUcmVlKCkgPT09IG5hdmlnYXRpb24uZmluYWxVcmwgJiYgdGFyZ2V0UGFnZVBvc2l0aW9uID09PSAwKSB7XG4gICAgICAgICAgdGhpcy5yZXNldEludGVybmFsU3RhdGUobmF2aWdhdGlvbik7XG4gICAgICAgICAgdGhpcy5yZXNldFVybFRvQ3VycmVudFVybFRyZWUoKTtcbiAgICAgICAgfSBlbHNlIDtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jYW5jZWxlZE5hdmlnYXRpb25SZXNvbHV0aW9uID09PSAncmVwbGFjZScpIHtcbiAgICAgICAgaWYgKHJlc3RvcmluZ0Zyb21DYXVnaHRFcnJvcikge1xuICAgICAgICAgIHRoaXMucmVzZXRJbnRlcm5hbFN0YXRlKG5hdmlnYXRpb24pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVzZXRVcmxUb0N1cnJlbnRVcmxUcmVlKCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJlc2V0SW50ZXJuYWxTdGF0ZSh7XG4gICAgICBmaW5hbFVybFxuICAgIH0pIHtcbiAgICAgIHRoaXMucm91dGVyU3RhdGUgPSB0aGlzLnN0YXRlTWVtZW50by5yb3V0ZXJTdGF0ZTtcbiAgICAgIHRoaXMuY3VycmVudFVybFRyZWUgPSB0aGlzLnN0YXRlTWVtZW50by5jdXJyZW50VXJsVHJlZTtcbiAgICAgIHRoaXMucmF3VXJsVHJlZSA9IHRoaXMudXJsSGFuZGxpbmdTdHJhdGVneS5tZXJnZSh0aGlzLmN1cnJlbnRVcmxUcmVlLCBmaW5hbFVybCA/PyB0aGlzLnJhd1VybFRyZWUpO1xuICAgIH1cbiAgICByZXNldFVybFRvQ3VycmVudFVybFRyZWUoKSB7XG4gICAgICB0aGlzLmxvY2F0aW9uLnJlcGxhY2VTdGF0ZSh0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKHRoaXMuZ2V0UmF3VXJsVHJlZSgpKSwgJycsIHRoaXMuZ2VuZXJhdGVOZ1JvdXRlclN0YXRlKHRoaXMubGFzdFN1Y2Nlc3NmdWxJZCwgdGhpcy5jdXJyZW50UGFnZUlkKSk7XG4gICAgfVxuICAgIGdlbmVyYXRlTmdSb3V0ZXJTdGF0ZShuYXZpZ2F0aW9uSWQsIHJvdXRlclBhZ2VJZCkge1xuICAgICAgaWYgKHRoaXMuY2FuY2VsZWROYXZpZ2F0aW9uUmVzb2x1dGlvbiA9PT0gJ2NvbXB1dGVkJykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG5hdmlnYXRpb25JZCxcbiAgICAgICAgICDJtXJvdXRlclBhZ2VJZDogcm91dGVyUGFnZUlkXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYXZpZ2F0aW9uSWRcbiAgICAgIH07XG4gICAgfVxuICAgIHN0YXRpYyDJtWZhYyA9IC8qIEBfX1BVUkVfXyAqLygoKSA9PiB7XG4gICAgICBsZXQgybVIaXN0b3J5U3RhdGVNYW5hZ2VyX0Jhc2VGYWN0b3J5O1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIEhpc3RvcnlTdGF0ZU1hbmFnZXJfRmFjdG9yeShfX25nRmFjdG9yeVR5cGVfXykge1xuICAgICAgICByZXR1cm4gKMm1SGlzdG9yeVN0YXRlTWFuYWdlcl9CYXNlRmFjdG9yeSB8fCAoybVIaXN0b3J5U3RhdGVNYW5hZ2VyX0Jhc2VGYWN0b3J5ID0gaTAuybXJtWdldEluaGVyaXRlZEZhY3RvcnkoSGlzdG9yeVN0YXRlTWFuYWdlcikpKShfX25nRmFjdG9yeVR5cGVfXyB8fCBIaXN0b3J5U3RhdGVNYW5hZ2VyKTtcbiAgICAgIH07XG4gICAgfSkoKTtcbiAgICBzdGF0aWMgybVwcm92ID0gLyogQF9fUFVSRV9fICovaTAuybXJtWRlZmluZUluamVjdGFibGUoe1xuICAgICAgdG9rZW46IEhpc3RvcnlTdGF0ZU1hbmFnZXIsXG4gICAgICBmYWN0b3J5OiBIaXN0b3J5U3RhdGVNYW5hZ2VyLsm1ZmFjLFxuICAgICAgcHJvdmlkZWRJbjogJ3Jvb3QnXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIEhpc3RvcnlTdGF0ZU1hbmFnZXI7XG59KSgpO1xuLyojX19QVVJFX18qLygoKSA9PiB7XG4gICh0eXBlb2YgbmdEZXZNb2RlID09PSBcInVuZGVmaW5lZFwiIHx8IG5nRGV2TW9kZSkgJiYgdm9pZCAwO1xufSkoKTtcbmZ1bmN0aW9uIGFmdGVyTmV4dE5hdmlnYXRpb24ocm91dGVyLCBhY3Rpb24pIHtcbiAgcm91dGVyLmV2ZW50cy5waXBlKGZpbHRlcihlID0+IGUgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRW5kIHx8IGUgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uQ2FuY2VsIHx8IGUgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRXJyb3IgfHwgZSBpbnN0YW5jZW9mIE5hdmlnYXRpb25Ta2lwcGVkKSwgbWFwKGUgPT4ge1xuICAgIGlmIChlIGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCB8fCBlIGluc3RhbmNlb2YgTmF2aWdhdGlvblNraXBwZWQpIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgICBjb25zdCByZWRpcmVjdGluZyA9IGUgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uQ2FuY2VsID8gZS5jb2RlID09PSBOYXZpZ2F0aW9uQ2FuY2VsbGF0aW9uQ29kZS5SZWRpcmVjdCB8fCBlLmNvZGUgPT09IE5hdmlnYXRpb25DYW5jZWxsYXRpb25Db2RlLlN1cGVyc2VkZWRCeU5ld05hdmlnYXRpb24gOiBmYWxzZTtcbiAgICByZXR1cm4gcmVkaXJlY3RpbmcgPyAyIDogMTtcbiAgfSksIGZpbHRlcihyZXN1bHQgPT4gcmVzdWx0ICE9PSAyKSwgdGFrZSgxKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICBhY3Rpb24oKTtcbiAgfSk7XG59XG5sZXQgUm91dGVyID0gLyojX19QVVJFX18qLygoKSA9PiB7XG4gIGNsYXNzIFJvdXRlciB7XG4gICAgZ2V0IGN1cnJlbnRVcmxUcmVlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc3RhdGVNYW5hZ2VyLmdldEN1cnJlbnRVcmxUcmVlKCk7XG4gICAgfVxuICAgIGdldCByYXdVcmxUcmVlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc3RhdGVNYW5hZ2VyLmdldFJhd1VybFRyZWUoKTtcbiAgICB9XG4gICAgZGlzcG9zZWQgPSBmYWxzZTtcbiAgICBub25Sb3V0ZXJDdXJyZW50RW50cnlDaGFuZ2VTdWJzY3JpcHRpb247XG4gICAgY29uc29sZSA9IGluamVjdChfQ29uc29sZSk7XG4gICAgc3RhdGVNYW5hZ2VyID0gaW5qZWN0KFN0YXRlTWFuYWdlcik7XG4gICAgb3B0aW9ucyA9IGluamVjdChST1VURVJfQ09ORklHVVJBVElPTiwge1xuICAgICAgb3B0aW9uYWw6IHRydWVcbiAgICB9KSB8fCB7fTtcbiAgICBwZW5kaW5nVGFza3MgPSBpbmplY3QoX1BlbmRpbmdUYXNrc0ludGVybmFsKTtcbiAgICB1cmxVcGRhdGVTdHJhdGVneSA9IHRoaXMub3B0aW9ucy51cmxVcGRhdGVTdHJhdGVneSB8fCAnZGVmZXJyZWQnO1xuICAgIG5hdmlnYXRpb25UcmFuc2l0aW9ucyA9IGluamVjdChOYXZpZ2F0aW9uVHJhbnNpdGlvbnMpO1xuICAgIHVybFNlcmlhbGl6ZXIgPSBpbmplY3QoVXJsU2VyaWFsaXplcik7XG4gICAgbG9jYXRpb24gPSBpbmplY3QoTG9jYXRpb24pO1xuICAgIHVybEhhbmRsaW5nU3RyYXRlZ3kgPSBpbmplY3QoVXJsSGFuZGxpbmdTdHJhdGVneSk7XG4gICAgaW5qZWN0b3IgPSBpbmplY3QoRW52aXJvbm1lbnRJbmplY3Rvcik7XG4gICAgX2V2ZW50cyA9IG5ldyBTdWJqZWN0KCk7XG4gICAgZ2V0IGV2ZW50cygpIHtcbiAgICAgIHJldHVybiB0aGlzLl9ldmVudHM7XG4gICAgfVxuICAgIGdldCByb3V0ZXJTdGF0ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnN0YXRlTWFuYWdlci5nZXRSb3V0ZXJTdGF0ZSgpO1xuICAgIH1cbiAgICBuYXZpZ2F0ZWQgPSBmYWxzZTtcbiAgICByb3V0ZVJldXNlU3RyYXRlZ3kgPSBpbmplY3QoUm91dGVSZXVzZVN0cmF0ZWd5KTtcbiAgICBpbmplY3RvckNsZWFudXAgPSBpbmplY3QoUk9VVEVfSU5KRUNUT1JfQ0xFQU5VUCwge1xuICAgICAgb3B0aW9uYWw6IHRydWVcbiAgICB9KTtcbiAgICBvblNhbWVVcmxOYXZpZ2F0aW9uID0gdGhpcy5vcHRpb25zLm9uU2FtZVVybE5hdmlnYXRpb24gfHwgJ2lnbm9yZSc7XG4gICAgY29uZmlnID0gaW5qZWN0KFJPVVRFUywge1xuICAgICAgb3B0aW9uYWw6IHRydWVcbiAgICB9KT8uZmxhdCgpID8/IFtdO1xuICAgIGNvbXBvbmVudElucHV0QmluZGluZ0VuYWJsZWQgPSAhIWluamVjdChJTlBVVF9CSU5ERVIsIHtcbiAgICAgIG9wdGlvbmFsOiB0cnVlXG4gICAgfSk7XG4gICAgY3VycmVudE5hdmlnYXRpb24gPSB0aGlzLm5hdmlnYXRpb25UcmFuc2l0aW9ucy5jdXJyZW50TmF2aWdhdGlvbi5hc1JlYWRvbmx5KCk7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICB0aGlzLnJlc2V0Q29uZmlnKHRoaXMuY29uZmlnKTtcbiAgICAgIHRoaXMubmF2aWdhdGlvblRyYW5zaXRpb25zLnNldHVwTmF2aWdhdGlvbnModGhpcykuc3Vic2NyaWJlKHtcbiAgICAgICAgZXJyb3I6IGUgPT4ge31cbiAgICAgIH0pO1xuICAgICAgdGhpcy5zdWJzY3JpYmVUb05hdmlnYXRpb25FdmVudHMoKTtcbiAgICB9XG4gICAgZXZlbnRzU3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICAgIHN1YnNjcmliZVRvTmF2aWdhdGlvbkV2ZW50cygpIHtcbiAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IHRoaXMubmF2aWdhdGlvblRyYW5zaXRpb25zLmV2ZW50cy5zdWJzY3JpYmUoZSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgY3VycmVudFRyYW5zaXRpb24gPSB0aGlzLm5hdmlnYXRpb25UcmFuc2l0aW9ucy5jdXJyZW50VHJhbnNpdGlvbjtcbiAgICAgICAgICBjb25zdCBjdXJyZW50TmF2aWdhdGlvbiA9IHVudHJhY2tlZCh0aGlzLm5hdmlnYXRpb25UcmFuc2l0aW9ucy5jdXJyZW50TmF2aWdhdGlvbik7XG4gICAgICAgICAgaWYgKGN1cnJlbnRUcmFuc2l0aW9uICE9PSBudWxsICYmIGN1cnJlbnROYXZpZ2F0aW9uICE9PSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXRlTWFuYWdlci5oYW5kbGVSb3V0ZXJFdmVudChlLCBjdXJyZW50TmF2aWdhdGlvbik7XG4gICAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIE5hdmlnYXRpb25DYW5jZWwgJiYgZS5jb2RlICE9PSBOYXZpZ2F0aW9uQ2FuY2VsbGF0aW9uQ29kZS5SZWRpcmVjdCAmJiBlLmNvZGUgIT09IE5hdmlnYXRpb25DYW5jZWxsYXRpb25Db2RlLlN1cGVyc2VkZWRCeU5ld05hdmlnYXRpb24pIHtcbiAgICAgICAgICAgICAgdGhpcy5uYXZpZ2F0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChlIGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCkge1xuICAgICAgICAgICAgICB0aGlzLm5hdmlnYXRlZCA9IHRydWU7XG4gICAgICAgICAgICAgIHRoaXMuaW5qZWN0b3JDbGVhbnVwPy4odGhpcy5yb3V0ZVJldXNlU3RyYXRlZ3ksIHRoaXMucm91dGVyU3RhdGUsIHRoaXMuY29uZmlnKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZSBpbnN0YW5jZW9mIFJlZGlyZWN0UmVxdWVzdCkge1xuICAgICAgICAgICAgICBjb25zdCBvcHRzID0gZS5uYXZpZ2F0aW9uQmVoYXZpb3JPcHRpb25zO1xuICAgICAgICAgICAgICBjb25zdCBtZXJnZWRUcmVlID0gdGhpcy51cmxIYW5kbGluZ1N0cmF0ZWd5Lm1lcmdlKGUudXJsLCBjdXJyZW50VHJhbnNpdGlvbi5jdXJyZW50UmF3VXJsKTtcbiAgICAgICAgICAgICAgY29uc3QgZXh0cmFzID0ge1xuICAgICAgICAgICAgICAgIHNjcm9sbDogY3VycmVudFRyYW5zaXRpb24uZXh0cmFzLnNjcm9sbCxcbiAgICAgICAgICAgICAgICBicm93c2VyVXJsOiBjdXJyZW50VHJhbnNpdGlvbi5leHRyYXMuYnJvd3NlclVybCxcbiAgICAgICAgICAgICAgICBpbmZvOiBjdXJyZW50VHJhbnNpdGlvbi5leHRyYXMuaW5mbyxcbiAgICAgICAgICAgICAgICBza2lwTG9jYXRpb25DaGFuZ2U6IGN1cnJlbnRUcmFuc2l0aW9uLmV4dHJhcy5za2lwTG9jYXRpb25DaGFuZ2UsXG4gICAgICAgICAgICAgICAgcmVwbGFjZVVybDogY3VycmVudFRyYW5zaXRpb24uZXh0cmFzLnJlcGxhY2VVcmwgfHwgdGhpcy51cmxVcGRhdGVTdHJhdGVneSA9PT0gJ2VhZ2VyJyB8fCBpc0Jyb3dzZXJUcmlnZ2VyZWROYXZpZ2F0aW9uKGN1cnJlbnRUcmFuc2l0aW9uLnNvdXJjZSksXG4gICAgICAgICAgICAgICAgLi4ub3B0c1xuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICB0aGlzLnNjaGVkdWxlTmF2aWdhdGlvbihtZXJnZWRUcmVlLCBJTVBFUkFUSVZFX05BVklHQVRJT04sIG51bGwsIGV4dHJhcywge1xuICAgICAgICAgICAgICAgIHJlc29sdmU6IGN1cnJlbnRUcmFuc2l0aW9uLnJlc29sdmUsXG4gICAgICAgICAgICAgICAgcmVqZWN0OiBjdXJyZW50VHJhbnNpdGlvbi5yZWplY3QsXG4gICAgICAgICAgICAgICAgcHJvbWlzZTogY3VycmVudFRyYW5zaXRpb24ucHJvbWlzZVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGlzUHVibGljUm91dGVyRXZlbnQoZSkpIHtcbiAgICAgICAgICAgIHRoaXMuX2V2ZW50cy5uZXh0KGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIHRoaXMubmF2aWdhdGlvblRyYW5zaXRpb25zLnRyYW5zaXRpb25BYm9ydFdpdGhFcnJvclN1YmplY3QubmV4dChlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICB0aGlzLmV2ZW50c1N1YnNjcmlwdGlvbi5hZGQoc3Vic2NyaXB0aW9uKTtcbiAgICB9XG4gICAgcmVzZXRSb290Q29tcG9uZW50VHlwZShyb290Q29tcG9uZW50VHlwZSkge1xuICAgICAgdGhpcy5yb3V0ZXJTdGF0ZS5yb290LmNvbXBvbmVudCA9IHJvb3RDb21wb25lbnRUeXBlO1xuICAgICAgdGhpcy5uYXZpZ2F0aW9uVHJhbnNpdGlvbnMucm9vdENvbXBvbmVudFR5cGUgPSByb290Q29tcG9uZW50VHlwZTtcbiAgICB9XG4gICAgaW5pdGlhbE5hdmlnYXRpb24oKSB7XG4gICAgICB0aGlzLnNldFVwTG9jYXRpb25DaGFuZ2VMaXN0ZW5lcigpO1xuICAgICAgaWYgKCF0aGlzLm5hdmlnYXRpb25UcmFuc2l0aW9ucy5oYXNSZXF1ZXN0ZWROYXZpZ2F0aW9uKSB7XG4gICAgICAgIHRoaXMubmF2aWdhdGVUb1N5bmNXaXRoQnJvd3Nlcih0aGlzLmxvY2F0aW9uLnBhdGgodHJ1ZSksIElNUEVSQVRJVkVfTkFWSUdBVElPTiwgdGhpcy5zdGF0ZU1hbmFnZXIucmVzdG9yZWRTdGF0ZSgpLCB7XG4gICAgICAgICAgcmVwbGFjZVVybDogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgc2V0VXBMb2NhdGlvbkNoYW5nZUxpc3RlbmVyKCkge1xuICAgICAgdGhpcy5ub25Sb3V0ZXJDdXJyZW50RW50cnlDaGFuZ2VTdWJzY3JpcHRpb24gPz89IHRoaXMuc3RhdGVNYW5hZ2VyLnJlZ2lzdGVyTm9uUm91dGVyQ3VycmVudEVudHJ5Q2hhbmdlTGlzdGVuZXIoKHVybCwgc3RhdGUsIHNvdXJjZSwgZXh0cmFzKSA9PiB7XG4gICAgICAgIHRoaXMubmF2aWdhdGVUb1N5bmNXaXRoQnJvd3Nlcih1cmwsIHNvdXJjZSwgc3RhdGUsIGV4dHJhcyk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgbmF2aWdhdGVUb1N5bmNXaXRoQnJvd3Nlcih1cmwsIHNvdXJjZSwgc3RhdGUsIGV4dHJhcykge1xuICAgICAgY29uc3QgcmVzdG9yZWRTdGF0ZSA9IHN0YXRlPy5uYXZpZ2F0aW9uSWQgPyBzdGF0ZSA6IG51bGw7XG4gICAgICBpZiAoc3RhdGUpIHtcbiAgICAgICAgY29uc3Qgc3RhdGVDb3B5ID0ge1xuICAgICAgICAgIC4uLnN0YXRlXG4gICAgICAgIH07XG4gICAgICAgIGRlbGV0ZSBzdGF0ZUNvcHkubmF2aWdhdGlvbklkO1xuICAgICAgICBkZWxldGUgc3RhdGVDb3B5Lsm1cm91dGVyUGFnZUlkO1xuICAgICAgICBpZiAoT2JqZWN0LmtleXMoc3RhdGVDb3B5KS5sZW5ndGggIT09IDApIHtcbiAgICAgICAgICBleHRyYXMuc3RhdGUgPSBzdGF0ZUNvcHk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbnN0IHVybFRyZWUgPSB0aGlzLnBhcnNlVXJsKHVybCk7XG4gICAgICB0aGlzLnNjaGVkdWxlTmF2aWdhdGlvbih1cmxUcmVlLCBzb3VyY2UsIHJlc3RvcmVkU3RhdGUsIGV4dHJhcykuY2F0Y2goZSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmRpc3Bvc2VkKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaW5qZWN0b3IuZ2V0KF9JTlRFUk5BTF9BUFBMSUNBVElPTl9FUlJPUl9IQU5ETEVSKShlKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBnZXQgdXJsKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2VyaWFsaXplVXJsKHRoaXMuY3VycmVudFVybFRyZWUpO1xuICAgIH1cbiAgICBnZXRDdXJyZW50TmF2aWdhdGlvbigpIHtcbiAgICAgIHJldHVybiB1bnRyYWNrZWQodGhpcy5uYXZpZ2F0aW9uVHJhbnNpdGlvbnMuY3VycmVudE5hdmlnYXRpb24pO1xuICAgIH1cbiAgICBnZXQgbGFzdFN1Y2Nlc3NmdWxOYXZpZ2F0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMubmF2aWdhdGlvblRyYW5zaXRpb25zLmxhc3RTdWNjZXNzZnVsTmF2aWdhdGlvbjtcbiAgICB9XG4gICAgcmVzZXRDb25maWcoY29uZmlnKSB7XG4gICAgICAodHlwZW9mIG5nRGV2TW9kZSA9PT0gJ3VuZGVmaW5lZCcgfHwgbmdEZXZNb2RlKSAmJiB2YWxpZGF0ZUNvbmZpZyhjb25maWcpO1xuICAgICAgdGhpcy5jb25maWcgPSBjb25maWcubWFwKHN0YW5kYXJkaXplQ29uZmlnKTtcbiAgICAgIHRoaXMubmF2aWdhdGVkID0gZmFsc2U7XG4gICAgfVxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgdGhpcy5kaXNwb3NlKCk7XG4gICAgfVxuICAgIGRpc3Bvc2UoKSB7XG4gICAgICB0aGlzLl9ldmVudHMudW5zdWJzY3JpYmUoKTtcbiAgICAgIHRoaXMubmF2aWdhdGlvblRyYW5zaXRpb25zLmNvbXBsZXRlKCk7XG4gICAgICB0aGlzLm5vblJvdXRlckN1cnJlbnRFbnRyeUNoYW5nZVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgIHRoaXMubm9uUm91dGVyQ3VycmVudEVudHJ5Q2hhbmdlU3Vic2NyaXB0aW9uID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5kaXNwb3NlZCA9IHRydWU7XG4gICAgICB0aGlzLmV2ZW50c1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICBjcmVhdGVVcmxUcmVlKGNvbW1hbmRzLCBuYXZpZ2F0aW9uRXh0cmFzID0ge30pIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgcmVsYXRpdmVUbyxcbiAgICAgICAgcXVlcnlQYXJhbXMsXG4gICAgICAgIGZyYWdtZW50LFxuICAgICAgICBxdWVyeVBhcmFtc0hhbmRsaW5nLFxuICAgICAgICBwcmVzZXJ2ZUZyYWdtZW50XG4gICAgICB9ID0gbmF2aWdhdGlvbkV4dHJhcztcbiAgICAgIGNvbnN0IGYgPSBwcmVzZXJ2ZUZyYWdtZW50ID8gdGhpcy5jdXJyZW50VXJsVHJlZS5mcmFnbWVudCA6IGZyYWdtZW50O1xuICAgICAgbGV0IHEgPSBudWxsO1xuICAgICAgc3dpdGNoIChxdWVyeVBhcmFtc0hhbmRsaW5nID8/IHRoaXMub3B0aW9ucy5kZWZhdWx0UXVlcnlQYXJhbXNIYW5kbGluZykge1xuICAgICAgICBjYXNlICdtZXJnZSc6XG4gICAgICAgICAgcSA9IHtcbiAgICAgICAgICAgIC4uLnRoaXMuY3VycmVudFVybFRyZWUucXVlcnlQYXJhbXMsXG4gICAgICAgICAgICAuLi5xdWVyeVBhcmFtc1xuICAgICAgICAgIH07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3ByZXNlcnZlJzpcbiAgICAgICAgICBxID0gdGhpcy5jdXJyZW50VXJsVHJlZS5xdWVyeVBhcmFtcztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBxID0gcXVlcnlQYXJhbXMgfHwgbnVsbDtcbiAgICAgIH1cbiAgICAgIGlmIChxICE9PSBudWxsKSB7XG4gICAgICAgIHEgPSB0aGlzLnJlbW92ZUVtcHR5UHJvcHMocSk7XG4gICAgICB9XG4gICAgICBsZXQgcmVsYXRpdmVUb1VybFNlZ21lbnRHcm91cDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlbGF0aXZlVG9TbmFwc2hvdCA9IHJlbGF0aXZlVG8gPyByZWxhdGl2ZVRvLnNuYXBzaG90IDogdGhpcy5yb3V0ZXJTdGF0ZS5zbmFwc2hvdC5yb290O1xuICAgICAgICByZWxhdGl2ZVRvVXJsU2VnbWVudEdyb3VwID0gY3JlYXRlU2VnbWVudEdyb3VwRnJvbVJvdXRlKHJlbGF0aXZlVG9TbmFwc2hvdCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY29tbWFuZHNbMF0gIT09ICdzdHJpbmcnIHx8IGNvbW1hbmRzWzBdWzBdICE9PSAnLycpIHtcbiAgICAgICAgICBjb21tYW5kcyA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIHJlbGF0aXZlVG9VcmxTZWdtZW50R3JvdXAgPSB0aGlzLmN1cnJlbnRVcmxUcmVlLnJvb3Q7XG4gICAgICB9XG4gICAgICByZXR1cm4gY3JlYXRlVXJsVHJlZUZyb21TZWdtZW50R3JvdXAocmVsYXRpdmVUb1VybFNlZ21lbnRHcm91cCwgY29tbWFuZHMsIHEsIGYgPz8gbnVsbCwgdGhpcy51cmxTZXJpYWxpemVyKTtcbiAgICB9XG4gICAgbmF2aWdhdGVCeVVybCh1cmwsIGV4dHJhcyA9IHtcbiAgICAgIHNraXBMb2NhdGlvbkNoYW5nZTogZmFsc2VcbiAgICB9KSB7XG4gICAgICBjb25zdCB1cmxUcmVlID0gaXNVcmxUcmVlKHVybCkgPyB1cmwgOiB0aGlzLnBhcnNlVXJsKHVybCk7XG4gICAgICBjb25zdCBtZXJnZWRUcmVlID0gdGhpcy51cmxIYW5kbGluZ1N0cmF0ZWd5Lm1lcmdlKHVybFRyZWUsIHRoaXMucmF3VXJsVHJlZSk7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlZHVsZU5hdmlnYXRpb24obWVyZ2VkVHJlZSwgSU1QRVJBVElWRV9OQVZJR0FUSU9OLCBudWxsLCBleHRyYXMpO1xuICAgIH1cbiAgICBuYXZpZ2F0ZShjb21tYW5kcywgZXh0cmFzID0ge1xuICAgICAgc2tpcExvY2F0aW9uQ2hhbmdlOiBmYWxzZVxuICAgIH0pIHtcbiAgICAgIHZhbGlkYXRlQ29tbWFuZHMoY29tbWFuZHMpO1xuICAgICAgcmV0dXJuIHRoaXMubmF2aWdhdGVCeVVybCh0aGlzLmNyZWF0ZVVybFRyZWUoY29tbWFuZHMsIGV4dHJhcyksIGV4dHJhcyk7XG4gICAgfVxuICAgIHNlcmlhbGl6ZVVybCh1cmwpIHtcbiAgICAgIHJldHVybiB0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKHVybCk7XG4gICAgfVxuICAgIHBhcnNlVXJsKHVybCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHRoaXMudXJsU2VyaWFsaXplci5wYXJzZSh1cmwpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0aGlzLmNvbnNvbGUud2FybihfZm9ybWF0UnVudGltZUVycm9yKDQwMTgsIG5nRGV2TW9kZSAmJiBgRXJyb3IgcGFyc2luZyBVUkwgJHt1cmx9LiBGYWxsaW5nIGJhY2sgdG8gJy8nIGluc3RlYWQuIFxcbmAgKyBlKSk7XG4gICAgICAgIHJldHVybiB0aGlzLnVybFNlcmlhbGl6ZXIucGFyc2UoJy8nKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaXNBY3RpdmUodXJsLCBtYXRjaE9wdGlvbnMpIHtcbiAgICAgIGxldCBvcHRpb25zO1xuICAgICAgaWYgKG1hdGNoT3B0aW9ucyA9PT0gdHJ1ZSkge1xuICAgICAgICBvcHRpb25zID0ge1xuICAgICAgICAgIC4uLmV4YWN0TWF0Y2hPcHRpb25zXG4gICAgICAgIH07XG4gICAgICB9IGVsc2UgaWYgKG1hdGNoT3B0aW9ucyA9PT0gZmFsc2UpIHtcbiAgICAgICAgb3B0aW9ucyA9IHtcbiAgICAgICAgICAuLi5zdWJzZXRNYXRjaE9wdGlvbnNcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9wdGlvbnMgPSB7XG4gICAgICAgICAgLi4uc3Vic2V0TWF0Y2hPcHRpb25zLFxuICAgICAgICAgIC4uLm1hdGNoT3B0aW9uc1xuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgaWYgKGlzVXJsVHJlZSh1cmwpKSB7XG4gICAgICAgIHJldHVybiBjb250YWluc1RyZWUodGhpcy5jdXJyZW50VXJsVHJlZSwgdXJsLCBvcHRpb25zKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHVybFRyZWUgPSB0aGlzLnBhcnNlVXJsKHVybCk7XG4gICAgICByZXR1cm4gY29udGFpbnNUcmVlKHRoaXMuY3VycmVudFVybFRyZWUsIHVybFRyZWUsIG9wdGlvbnMpO1xuICAgIH1cbiAgICByZW1vdmVFbXB0eVByb3BzKHBhcmFtcykge1xuICAgICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHBhcmFtcykucmVkdWNlKChyZXN1bHQsIFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICBpZiAodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJlc3VsdFtrZXldID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0sIHt9KTtcbiAgICB9XG4gICAgc2NoZWR1bGVOYXZpZ2F0aW9uKHJhd1VybCwgc291cmNlLCByZXN0b3JlZFN0YXRlLCBleHRyYXMsIHByaW9yUHJvbWlzZSkge1xuICAgICAgaWYgKHRoaXMuZGlzcG9zZWQpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XG4gICAgICB9XG4gICAgICBsZXQgcmVzb2x2ZTtcbiAgICAgIGxldCByZWplY3Q7XG4gICAgICBsZXQgcHJvbWlzZTtcbiAgICAgIGlmIChwcmlvclByb21pc2UpIHtcbiAgICAgICAgcmVzb2x2ZSA9IHByaW9yUHJvbWlzZS5yZXNvbHZlO1xuICAgICAgICByZWplY3QgPSBwcmlvclByb21pc2UucmVqZWN0O1xuICAgICAgICBwcm9taXNlID0gcHJpb3JQcm9taXNlLnByb21pc2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwcm9taXNlID0gbmV3IFByb21pc2UoKHJlcywgcmVqKSA9PiB7XG4gICAgICAgICAgcmVzb2x2ZSA9IHJlcztcbiAgICAgICAgICByZWplY3QgPSByZWo7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgY29uc3QgdGFza0lkID0gdGhpcy5wZW5kaW5nVGFza3MuYWRkKCk7XG4gICAgICBhZnRlck5leHROYXZpZ2F0aW9uKHRoaXMsICgpID0+IHtcbiAgICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4gdGhpcy5wZW5kaW5nVGFza3MucmVtb3ZlKHRhc2tJZCkpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLm5hdmlnYXRpb25UcmFuc2l0aW9ucy5oYW5kbGVOYXZpZ2F0aW9uUmVxdWVzdCh7XG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgcmVzdG9yZWRTdGF0ZSxcbiAgICAgICAgY3VycmVudFVybFRyZWU6IHRoaXMuY3VycmVudFVybFRyZWUsXG4gICAgICAgIGN1cnJlbnRSYXdVcmw6IHRoaXMuY3VycmVudFVybFRyZWUsXG4gICAgICAgIHJhd1VybCxcbiAgICAgICAgZXh0cmFzLFxuICAgICAgICByZXNvbHZlOiByZXNvbHZlLFxuICAgICAgICByZWplY3Q6IHJlamVjdCxcbiAgICAgICAgcHJvbWlzZSxcbiAgICAgICAgY3VycmVudFNuYXBzaG90OiB0aGlzLnJvdXRlclN0YXRlLnNuYXBzaG90LFxuICAgICAgICBjdXJyZW50Um91dGVyU3RhdGU6IHRoaXMucm91dGVyU3RhdGVcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHByb21pc2UuY2F0Y2goUHJvbWlzZS5yZWplY3QuYmluZChQcm9taXNlKSk7XG4gICAgfVxuICAgIHN0YXRpYyDJtWZhYyA9IGZ1bmN0aW9uIFJvdXRlcl9GYWN0b3J5KF9fbmdGYWN0b3J5VHlwZV9fKSB7XG4gICAgICByZXR1cm4gbmV3IChfX25nRmFjdG9yeVR5cGVfXyB8fCBSb3V0ZXIpKCk7XG4gICAgfTtcbiAgICBzdGF0aWMgybVwcm92ID0gLyogQF9fUFVSRV9fICovaTAuybXJtWRlZmluZUluamVjdGFibGUoe1xuICAgICAgdG9rZW46IFJvdXRlcixcbiAgICAgIGZhY3Rvcnk6IFJvdXRlci7JtWZhYyxcbiAgICAgIHByb3ZpZGVkSW46ICdyb290J1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBSb3V0ZXI7XG59KSgpO1xuLyojX19QVVJFX18qLygoKSA9PiB7XG4gICh0eXBlb2YgbmdEZXZNb2RlID09PSBcInVuZGVmaW5lZFwiIHx8IG5nRGV2TW9kZSkgJiYgdm9pZCAwO1xufSkoKTtcbmZ1bmN0aW9uIHZhbGlkYXRlQ29tbWFuZHMoY29tbWFuZHMpIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb21tYW5kcy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGNtZCA9IGNvbW1hbmRzW2ldO1xuICAgIGlmIChjbWQgPT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IF9SdW50aW1lRXJyb3IoNDAwOCwgKHR5cGVvZiBuZ0Rldk1vZGUgPT09ICd1bmRlZmluZWQnIHx8IG5nRGV2TW9kZSkgJiYgYFRoZSByZXF1ZXN0ZWQgcGF0aCBjb250YWlucyAke2NtZH0gc2VnbWVudCBhdCBpbmRleCAke2l9YCk7XG4gICAgfVxuICB9XG59XG5leHBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgQWN0aXZhdGVkUm91dGVTbmFwc2hvdCwgQWN0aXZhdGlvbkVuZCwgQWN0aXZhdGlvblN0YXJ0LCBCYXNlUm91dGVSZXVzZVN0cmF0ZWd5LCBCZWZvcmVBY3RpdmF0ZVJvdXRlcywgQmVmb3JlUm91dGVzUmVjb2duaXplZCwgQ1JFQVRFX1ZJRVdfVFJBTlNJVElPTiwgQ2hpbGRBY3RpdmF0aW9uRW5kLCBDaGlsZEFjdGl2YXRpb25TdGFydCwgQ2hpbGRyZW5PdXRsZXRDb250ZXh0cywgRGVmYXVsdFRpdGxlU3RyYXRlZ3ksIERlZmF1bHRVcmxTZXJpYWxpemVyLCBFdmVudFR5cGUsIEd1YXJkc0NoZWNrRW5kLCBHdWFyZHNDaGVja1N0YXJ0LCBJTVBFUkFUSVZFX05BVklHQVRJT04sIElOUFVUX0JJTkRFUiwgTkFWSUdBVElPTl9FUlJPUl9IQU5ETEVSLCBOYXZpZ2F0aW9uQ2FuY2VsLCBOYXZpZ2F0aW9uQ2FuY2VsbGF0aW9uQ29kZSwgTmF2aWdhdGlvbkVuZCwgTmF2aWdhdGlvbkVycm9yLCBOYXZpZ2F0aW9uU2tpcHBlZCwgTmF2aWdhdGlvblNraXBwZWRDb2RlLCBOYXZpZ2F0aW9uU3RhcnQsIE5hdmlnYXRpb25UcmFuc2l0aW9ucywgT3V0bGV0Q29udGV4dCwgUFJJTUFSWV9PVVRMRVQsIFJPVVRFUl9DT05GSUdVUkFUSU9OLCBST1VURVJfT1VUTEVUX0RBVEEsIFJPVVRFUywgUk9VVEVfSU5KRUNUT1JfQ0xFQU5VUCwgUmVkaXJlY3RDb21tYW5kLCBSZXNvbHZlRW5kLCBSZXNvbHZlU3RhcnQsIFJvdXRlQ29uZmlnTG9hZEVuZCwgUm91dGVDb25maWdMb2FkU3RhcnQsIFJvdXRlUmV1c2VTdHJhdGVneSwgUm91dGVkQ29tcG9uZW50SW5wdXRCaW5kZXIsIFJvdXRlciwgUm91dGVyQ29uZmlnTG9hZGVyLCBSb3V0ZXJFdmVudCwgUm91dGVyT3V0bGV0LCBSb3V0ZXJTdGF0ZSwgUm91dGVyU3RhdGVTbmFwc2hvdCwgUm91dGVzUmVjb2duaXplZCwgU2Nyb2xsLCBTdGF0ZU1hbmFnZXIsIFRpdGxlU3RyYXRlZ3ksIFVybEhhbmRsaW5nU3RyYXRlZ3ksIFVybFNlZ21lbnQsIFVybFNlZ21lbnRHcm91cCwgVXJsU2VyaWFsaXplciwgVXJsVHJlZSwgVklFV19UUkFOU0lUSU9OX09QVElPTlMsIGFmdGVyTmV4dE5hdmlnYXRpb24sIGNvbnZlcnRUb1BhcmFtTWFwLCBjcmVhdGVVcmxUcmVlRnJvbVNuYXBzaG90LCBjcmVhdGVWaWV3VHJhbnNpdGlvbiwgZGVmYXVsdFVybE1hdGNoZXIsIGRlc3Ryb3lEZXRhY2hlZFJvdXRlSGFuZGxlLCBleGFjdE1hdGNoT3B0aW9ucywgaXNBY3RpdmUsIGlzUmVkaXJlY3RpbmdFdmVudCwgaXNVcmxUcmVlLCBsb2FkQ2hpbGRyZW4sIHJvdXRlSW5qZWN0b3JDbGVhbnVwLCBzdHJpbmdpZnlFdmVudCwgc3Vic2V0TWF0Y2hPcHRpb25zLCDJtUVtcHR5T3V0bGV0Q29tcG9uZW50IH07XG4iLCIvKipcbiAqIEBsaWNlbnNlIEFuZ3VsYXIgdjIxLjIuNFxuICogKGMpIDIwMTAtMjAyNiBHb29nbGUgTExDLiBodHRwczovL2FuZ3VsYXIuZGV2L1xuICogTGljZW5zZTogTUlUXG4gKi9cblxuaW1wb3J0ICogYXMgaTMgZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFZpZXdwb3J0U2Nyb2xsZXIsIFBsYXRmb3JtTmF2aWdhdGlvbiwgUGxhdGZvcm1Mb2NhdGlvbiwgybVQUkVDT01NSVRfSEFORExFUl9TVVBQT1JURUQgYXMgX1BSRUNPTU1JVF9IQU5ETEVSX1NVUFBPUlRFRCwgTG9jYXRpb24sIMm1TmF2aWdhdGlvbkFkYXB0ZXJGb3JMb2NhdGlvbiBhcyBfTmF2aWdhdGlvbkFkYXB0ZXJGb3JMb2NhdGlvbiwgTE9DQVRJT05fSU5JVElBTElaRUQsIExvY2F0aW9uU3RyYXRlZ3ksIEhhc2hMb2NhdGlvblN0cmF0ZWd5LCBQYXRoTG9jYXRpb25TdHJhdGVneSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgKiBhcyBpMCBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGluamVjdCwgc2lnbmFsLCBJbmplY3RhYmxlLCBIb3N0QXR0cmlidXRlVG9rZW4sIGxpbmtlZFNpZ25hbCwgdW50cmFja2VkLCDJtUlOVEVSTkFMX0FQUExJQ0FUSU9OX0VSUk9SX0hBTkRMRVIgYXMgX0lOVEVSTkFMX0FQUExJQ0FUSU9OX0VSUk9SX0hBTkRMRVIsIGVmZmVjdCwgybVSdW50aW1lRXJyb3IgYXMgX1J1bnRpbWVFcnJvciwgY29tcHV0ZWQsIGJvb2xlYW5BdHRyaWJ1dGUsIERpcmVjdGl2ZSwgQXR0cmlidXRlLCBJbnB1dCwgSG9zdExpc3RlbmVyLCBFdmVudEVtaXR0ZXIsIENvbnRlbnRDaGlsZHJlbiwgT3V0cHV0LCBjcmVhdGVFbnZpcm9ubWVudEluamVjdG9yLCBJbmplY3Rpb25Ub2tlbiwgTmdab25lLCBFbnZpcm9ubWVudEluamVjdG9yLCBEZXN0cm95UmVmLCBhZnRlck5leHRSZW5kZXIsIMm1cHJvbWlzZVdpdGhSZXNvbHZlcnMgYXMgX3Byb21pc2VXaXRoUmVzb2x2ZXJzLCDJtXB1Ymxpc2hFeHRlcm5hbEdsb2JhbFV0aWwgYXMgX3B1Ymxpc2hFeHRlcm5hbEdsb2JhbFV0aWwsIG1ha2VFbnZpcm9ubWVudFByb3ZpZGVycywgQVBQX0JPT1RTVFJBUF9MSVNURU5FUiwgcHJvdmlkZUVudmlyb25tZW50SW5pdGlhbGl6ZXIsIEluamVjdG9yLCBBcHBsaWNhdGlvblJlZiwgybVJU19FTkFCTEVEX0JMT0NLSU5HX0lOSVRJQUxfTkFWSUdBVElPTiBhcyBfSVNfRU5BQkxFRF9CTE9DS0lOR19JTklUSUFMX05BVklHQVRJT04sIHByb3ZpZGVBcHBJbml0aWFsaXplciwgybVwZXJmb3JtYW5jZU1hcmtGZWF0dXJlIGFzIF9wZXJmb3JtYW5jZU1hcmtGZWF0dXJlLCBFTlZJUk9OTUVOVF9JTklUSUFMSVpFUiwgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJvdXRlciwgU3RhdGVNYW5hZ2VyLCBVcmxTZXJpYWxpemVyLCBOYXZpZ2F0aW9uRW5kLCBVcmxUcmVlLCBST1VURVJfQ09ORklHVVJBVElPTiwgaXNVcmxUcmVlLCBBY3RpdmF0ZWRSb3V0ZSwgaXNBY3RpdmUsIGV4YWN0TWF0Y2hPcHRpb25zLCBzdWJzZXRNYXRjaE9wdGlvbnMsIFJvdXRlckNvbmZpZ0xvYWRlciwgSU1QRVJBVElWRV9OQVZJR0FUSU9OLCBOYXZpZ2F0aW9uVHJhbnNpdGlvbnMsIE5hdmlnYXRpb25TdGFydCwgTmF2aWdhdGlvblNraXBwZWQsIE5hdmlnYXRpb25Ta2lwcGVkQ29kZSwgU2Nyb2xsLCBCZWZvcmVSb3V0ZXNSZWNvZ25pemVkLCBCZWZvcmVBY3RpdmF0ZVJvdXRlcywgTmF2aWdhdGlvbkNhbmNlbCwgTmF2aWdhdGlvbkVycm9yLCBpc1JlZGlyZWN0aW5nRXZlbnQsIE5hdmlnYXRpb25DYW5jZWxsYXRpb25Db2RlLCBST1VURVMsIGFmdGVyTmV4dE5hdmlnYXRpb24sIFJPVVRFX0lOSkVDVE9SX0NMRUFOVVAsIHJvdXRlSW5qZWN0b3JDbGVhbnVwLCBzdHJpbmdpZnlFdmVudCwgTkFWSUdBVElPTl9FUlJPUl9IQU5ETEVSLCBSb3V0ZWRDb21wb25lbnRJbnB1dEJpbmRlciwgSU5QVVRfQklOREVSLCBDUkVBVEVfVklFV19UUkFOU0lUSU9OLCBjcmVhdGVWaWV3VHJhbnNpdGlvbiwgVklFV19UUkFOU0lUSU9OX09QVElPTlMsIERlZmF1bHRVcmxTZXJpYWxpemVyLCBDaGlsZHJlbk91dGxldENvbnRleHRzLCBSb3V0ZXJPdXRsZXQsIMm1RW1wdHlPdXRsZXRDb21wb25lbnQgYXMgX0VtcHR5T3V0bGV0Q29tcG9uZW50IH0gZnJvbSAnLi9fcm91dGVyLWNodW5rLm1qcyc7XG5pbXBvcnQgeyBTdWJqZWN0LCBvZiwgZnJvbSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWVyZ2VBbGwsIGNhdGNoRXJyb3IsIGZpbHRlciwgY29uY2F0TWFwLCBtZXJnZU1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmxldCBSZWFjdGl2ZVJvdXRlclN0YXRlID0gLyojX19QVVJFX18qLygoKSA9PiB7XG4gIGNsYXNzIFJlYWN0aXZlUm91dGVyU3RhdGUge1xuICAgIHJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xuICAgIHN0YXRlTWFuYWdlciA9IGluamVjdChTdGF0ZU1hbmFnZXIpO1xuICAgIGZyYWdtZW50ID0gc2lnbmFsKCcnLCAuLi4obmdEZXZNb2RlID8gW3tcbiAgICAgIGRlYnVnTmFtZTogXCJmcmFnbWVudFwiXG4gICAgfV0gOiBbXSkpO1xuICAgIHF1ZXJ5UGFyYW1zID0gc2lnbmFsKHt9LCAuLi4obmdEZXZNb2RlID8gW3tcbiAgICAgIGRlYnVnTmFtZTogXCJxdWVyeVBhcmFtc1wiXG4gICAgfV0gOiBbXSkpO1xuICAgIHBhdGggPSBzaWduYWwoJycsIC4uLihuZ0Rldk1vZGUgPyBbe1xuICAgICAgZGVidWdOYW1lOiBcInBhdGhcIlxuICAgIH1dIDogW10pKTtcbiAgICBzZXJpYWxpemVyID0gaW5qZWN0KFVybFNlcmlhbGl6ZXIpO1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgdGhpcy51cGRhdGVTdGF0ZSgpO1xuICAgICAgdGhpcy5yb3V0ZXIuZXZlbnRzPy5zdWJzY3JpYmUoZSA9PiB7XG4gICAgICAgIGlmIChlIGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCkge1xuICAgICAgICAgIHRoaXMudXBkYXRlU3RhdGUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHVwZGF0ZVN0YXRlKCkge1xuICAgICAgY29uc3Qge1xuICAgICAgICBmcmFnbWVudCxcbiAgICAgICAgcm9vdCxcbiAgICAgICAgcXVlcnlQYXJhbXNcbiAgICAgIH0gPSB0aGlzLnN0YXRlTWFuYWdlci5nZXRDdXJyZW50VXJsVHJlZSgpO1xuICAgICAgdGhpcy5mcmFnbWVudC5zZXQoZnJhZ21lbnQpO1xuICAgICAgdGhpcy5xdWVyeVBhcmFtcy5zZXQocXVlcnlQYXJhbXMpO1xuICAgICAgdGhpcy5wYXRoLnNldCh0aGlzLnNlcmlhbGl6ZXIuc2VyaWFsaXplKG5ldyBVcmxUcmVlKHJvb3QpKSk7XG4gICAgfVxuICAgIHN0YXRpYyDJtWZhYyA9IGZ1bmN0aW9uIFJlYWN0aXZlUm91dGVyU3RhdGVfRmFjdG9yeShfX25nRmFjdG9yeVR5cGVfXykge1xuICAgICAgcmV0dXJuIG5ldyAoX19uZ0ZhY3RvcnlUeXBlX18gfHwgUmVhY3RpdmVSb3V0ZXJTdGF0ZSkoKTtcbiAgICB9O1xuICAgIHN0YXRpYyDJtXByb3YgPSAvKiBAX19QVVJFX18gKi9pMC7Jtcm1ZGVmaW5lSW5qZWN0YWJsZSh7XG4gICAgICB0b2tlbjogUmVhY3RpdmVSb3V0ZXJTdGF0ZSxcbiAgICAgIGZhY3Rvcnk6IFJlYWN0aXZlUm91dGVyU3RhdGUuybVmYWMsXG4gICAgICBwcm92aWRlZEluOiAncm9vdCdcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gUmVhY3RpdmVSb3V0ZXJTdGF0ZTtcbn0pKCk7XG4vKiNfX1BVUkVfXyovKCgpID0+IHtcbiAgKHR5cGVvZiBuZ0Rldk1vZGUgPT09IFwidW5kZWZpbmVkXCIgfHwgbmdEZXZNb2RlKSAmJiB2b2lkIDA7XG59KSgpO1xubGV0IFJvdXRlckxpbmsgPSAvKiNfX1BVUkVfXyovKCgpID0+IHtcbiAgY2xhc3MgUm91dGVyTGluayB7XG4gICAgcm91dGVyO1xuICAgIHJvdXRlO1xuICAgIHRhYkluZGV4QXR0cmlidXRlO1xuICAgIHJlbmRlcmVyO1xuICAgIGVsO1xuICAgIGxvY2F0aW9uU3RyYXRlZ3k7XG4gICAgaHJlZkF0dHJpYnV0ZVZhbHVlID0gaW5qZWN0KG5ldyBIb3N0QXR0cmlidXRlVG9rZW4oJ2hyZWYnKSwge1xuICAgICAgb3B0aW9uYWw6IHRydWVcbiAgICB9KTtcbiAgICByZWFjdGl2ZUhyZWYgPSBsaW5rZWRTaWduYWwoKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLmlzQW5jaG9yRWxlbWVudCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ocmVmQXR0cmlidXRlVmFsdWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5jb21wdXRlSHJlZih0aGlzLl91cmxUcmVlKCkpO1xuICAgIH0sIC4uLihuZ0Rldk1vZGUgPyBbe1xuICAgICAgZGVidWdOYW1lOiBcInJlYWN0aXZlSHJlZlwiXG4gICAgfV0gOiBbXSkpO1xuICAgIGdldCBocmVmKCkge1xuICAgICAgcmV0dXJuIHVudHJhY2tlZCh0aGlzLnJlYWN0aXZlSHJlZik7XG4gICAgfVxuICAgIHNldCBocmVmKHZhbHVlKSB7XG4gICAgICB0aGlzLnJlYWN0aXZlSHJlZi5zZXQodmFsdWUpO1xuICAgIH1cbiAgICBzZXQgdGFyZ2V0KHZhbHVlKSB7XG4gICAgICB0aGlzLl90YXJnZXQuc2V0KHZhbHVlKTtcbiAgICB9XG4gICAgZ2V0IHRhcmdldCgpIHtcbiAgICAgIHJldHVybiB1bnRyYWNrZWQodGhpcy5fdGFyZ2V0KTtcbiAgICB9XG4gICAgX3RhcmdldCA9IHNpZ25hbCh1bmRlZmluZWQsIC4uLihuZ0Rldk1vZGUgPyBbe1xuICAgICAgZGVidWdOYW1lOiBcIl90YXJnZXRcIlxuICAgIH1dIDogW10pKTtcbiAgICBzZXQgcXVlcnlQYXJhbXModmFsdWUpIHtcbiAgICAgIHRoaXMuX3F1ZXJ5UGFyYW1zLnNldCh2YWx1ZSk7XG4gICAgfVxuICAgIGdldCBxdWVyeVBhcmFtcygpIHtcbiAgICAgIHJldHVybiB1bnRyYWNrZWQodGhpcy5fcXVlcnlQYXJhbXMpO1xuICAgIH1cbiAgICBfcXVlcnlQYXJhbXMgPSBzaWduYWwodW5kZWZpbmVkLCB7XG4gICAgICAuLi4obmdEZXZNb2RlID8ge1xuICAgICAgICBkZWJ1Z05hbWU6IFwiX3F1ZXJ5UGFyYW1zXCJcbiAgICAgIH0gOiB7fSksXG4gICAgICBlcXVhbDogKCkgPT4gZmFsc2VcbiAgICB9KTtcbiAgICBzZXQgZnJhZ21lbnQodmFsdWUpIHtcbiAgICAgIHRoaXMuX2ZyYWdtZW50LnNldCh2YWx1ZSk7XG4gICAgfVxuICAgIGdldCBmcmFnbWVudCgpIHtcbiAgICAgIHJldHVybiB1bnRyYWNrZWQodGhpcy5fZnJhZ21lbnQpO1xuICAgIH1cbiAgICBfZnJhZ21lbnQgPSBzaWduYWwodW5kZWZpbmVkLCAuLi4obmdEZXZNb2RlID8gW3tcbiAgICAgIGRlYnVnTmFtZTogXCJfZnJhZ21lbnRcIlxuICAgIH1dIDogW10pKTtcbiAgICBzZXQgcXVlcnlQYXJhbXNIYW5kbGluZyh2YWx1ZSkge1xuICAgICAgdGhpcy5fcXVlcnlQYXJhbXNIYW5kbGluZy5zZXQodmFsdWUpO1xuICAgIH1cbiAgICBnZXQgcXVlcnlQYXJhbXNIYW5kbGluZygpIHtcbiAgICAgIHJldHVybiB1bnRyYWNrZWQodGhpcy5fcXVlcnlQYXJhbXNIYW5kbGluZyk7XG4gICAgfVxuICAgIF9xdWVyeVBhcmFtc0hhbmRsaW5nID0gc2lnbmFsKHVuZGVmaW5lZCwgLi4uKG5nRGV2TW9kZSA/IFt7XG4gICAgICBkZWJ1Z05hbWU6IFwiX3F1ZXJ5UGFyYW1zSGFuZGxpbmdcIlxuICAgIH1dIDogW10pKTtcbiAgICBzZXQgc3RhdGUodmFsdWUpIHtcbiAgICAgIHRoaXMuX3N0YXRlLnNldCh2YWx1ZSk7XG4gICAgfVxuICAgIGdldCBzdGF0ZSgpIHtcbiAgICAgIHJldHVybiB1bnRyYWNrZWQodGhpcy5fc3RhdGUpO1xuICAgIH1cbiAgICBfc3RhdGUgPSBzaWduYWwodW5kZWZpbmVkLCB7XG4gICAgICAuLi4obmdEZXZNb2RlID8ge1xuICAgICAgICBkZWJ1Z05hbWU6IFwiX3N0YXRlXCJcbiAgICAgIH0gOiB7fSksXG4gICAgICBlcXVhbDogKCkgPT4gZmFsc2VcbiAgICB9KTtcbiAgICBzZXQgaW5mbyh2YWx1ZSkge1xuICAgICAgdGhpcy5faW5mby5zZXQodmFsdWUpO1xuICAgIH1cbiAgICBnZXQgaW5mbygpIHtcbiAgICAgIHJldHVybiB1bnRyYWNrZWQodGhpcy5faW5mbyk7XG4gICAgfVxuICAgIF9pbmZvID0gc2lnbmFsKHVuZGVmaW5lZCwge1xuICAgICAgLi4uKG5nRGV2TW9kZSA/IHtcbiAgICAgICAgZGVidWdOYW1lOiBcIl9pbmZvXCJcbiAgICAgIH0gOiB7fSksXG4gICAgICBlcXVhbDogKCkgPT4gZmFsc2VcbiAgICB9KTtcbiAgICBzZXQgcmVsYXRpdmVUbyh2YWx1ZSkge1xuICAgICAgdGhpcy5fcmVsYXRpdmVUby5zZXQodmFsdWUpO1xuICAgIH1cbiAgICBnZXQgcmVsYXRpdmVUbygpIHtcbiAgICAgIHJldHVybiB1bnRyYWNrZWQodGhpcy5fcmVsYXRpdmVUbyk7XG4gICAgfVxuICAgIF9yZWxhdGl2ZVRvID0gc2lnbmFsKHVuZGVmaW5lZCwgLi4uKG5nRGV2TW9kZSA/IFt7XG4gICAgICBkZWJ1Z05hbWU6IFwiX3JlbGF0aXZlVG9cIlxuICAgIH1dIDogW10pKTtcbiAgICBzZXQgcHJlc2VydmVGcmFnbWVudCh2YWx1ZSkge1xuICAgICAgdGhpcy5fcHJlc2VydmVGcmFnbWVudC5zZXQodmFsdWUpO1xuICAgIH1cbiAgICBnZXQgcHJlc2VydmVGcmFnbWVudCgpIHtcbiAgICAgIHJldHVybiB1bnRyYWNrZWQodGhpcy5fcHJlc2VydmVGcmFnbWVudCk7XG4gICAgfVxuICAgIF9wcmVzZXJ2ZUZyYWdtZW50ID0gc2lnbmFsKGZhbHNlLCAuLi4obmdEZXZNb2RlID8gW3tcbiAgICAgIGRlYnVnTmFtZTogXCJfcHJlc2VydmVGcmFnbWVudFwiXG4gICAgfV0gOiBbXSkpO1xuICAgIHNldCBza2lwTG9jYXRpb25DaGFuZ2UodmFsdWUpIHtcbiAgICAgIHRoaXMuX3NraXBMb2NhdGlvbkNoYW5nZS5zZXQodmFsdWUpO1xuICAgIH1cbiAgICBnZXQgc2tpcExvY2F0aW9uQ2hhbmdlKCkge1xuICAgICAgcmV0dXJuIHVudHJhY2tlZCh0aGlzLl9za2lwTG9jYXRpb25DaGFuZ2UpO1xuICAgIH1cbiAgICBfc2tpcExvY2F0aW9uQ2hhbmdlID0gc2lnbmFsKGZhbHNlLCAuLi4obmdEZXZNb2RlID8gW3tcbiAgICAgIGRlYnVnTmFtZTogXCJfc2tpcExvY2F0aW9uQ2hhbmdlXCJcbiAgICB9XSA6IFtdKSk7XG4gICAgc2V0IHJlcGxhY2VVcmwodmFsdWUpIHtcbiAgICAgIHRoaXMuX3JlcGxhY2VVcmwuc2V0KHZhbHVlKTtcbiAgICB9XG4gICAgZ2V0IHJlcGxhY2VVcmwoKSB7XG4gICAgICByZXR1cm4gdW50cmFja2VkKHRoaXMuX3JlcGxhY2VVcmwpO1xuICAgIH1cbiAgICBfcmVwbGFjZVVybCA9IHNpZ25hbChmYWxzZSwgLi4uKG5nRGV2TW9kZSA/IFt7XG4gICAgICBkZWJ1Z05hbWU6IFwiX3JlcGxhY2VVcmxcIlxuICAgIH1dIDogW10pKTtcbiAgICBpc0FuY2hvckVsZW1lbnQ7XG4gICAgb25DaGFuZ2VzID0gbmV3IFN1YmplY3QoKTtcbiAgICBhcHBsaWNhdGlvbkVycm9ySGFuZGxlciA9IGluamVjdChfSU5URVJOQUxfQVBQTElDQVRJT05fRVJST1JfSEFORExFUik7XG4gICAgb3B0aW9ucyA9IGluamVjdChST1VURVJfQ09ORklHVVJBVElPTiwge1xuICAgICAgb3B0aW9uYWw6IHRydWVcbiAgICB9KTtcbiAgICByZWFjdGl2ZVJvdXRlclN0YXRlID0gaW5qZWN0KFJlYWN0aXZlUm91dGVyU3RhdGUpO1xuICAgIGNvbnN0cnVjdG9yKHJvdXRlciwgcm91dGUsIHRhYkluZGV4QXR0cmlidXRlLCByZW5kZXJlciwgZWwsIGxvY2F0aW9uU3RyYXRlZ3kpIHtcbiAgICAgIHRoaXMucm91dGVyID0gcm91dGVyO1xuICAgICAgdGhpcy5yb3V0ZSA9IHJvdXRlO1xuICAgICAgdGhpcy50YWJJbmRleEF0dHJpYnV0ZSA9IHRhYkluZGV4QXR0cmlidXRlO1xuICAgICAgdGhpcy5yZW5kZXJlciA9IHJlbmRlcmVyO1xuICAgICAgdGhpcy5lbCA9IGVsO1xuICAgICAgdGhpcy5sb2NhdGlvblN0cmF0ZWd5ID0gbG9jYXRpb25TdHJhdGVneTtcbiAgICAgIGNvbnN0IHRhZ05hbWUgPSBlbC5uYXRpdmVFbGVtZW50LnRhZ05hbWU/LnRvTG93ZXJDYXNlKCk7XG4gICAgICB0aGlzLmlzQW5jaG9yRWxlbWVudCA9IHRhZ05hbWUgPT09ICdhJyB8fCB0YWdOYW1lID09PSAnYXJlYScgfHwgISEodHlwZW9mIGN1c3RvbUVsZW1lbnRzID09PSAnb2JqZWN0JyAmJiBjdXN0b21FbGVtZW50cy5nZXQodGFnTmFtZSk/Lm9ic2VydmVkQXR0cmlidXRlcz8uaW5jbHVkZXM/LignaHJlZicpKTtcbiAgICAgIGlmICh0eXBlb2YgbmdEZXZNb2RlICE9PSAndW5kZWZpbmVkJyAmJiBuZ0Rldk1vZGUpIHtcbiAgICAgICAgZWZmZWN0KCgpID0+IHtcbiAgICAgICAgICBpZiAoaXNVcmxUcmVlKHRoaXMucm91dGVyTGlua0lucHV0KCkpICYmICh0aGlzLl9mcmFnbWVudCgpICE9PSB1bmRlZmluZWQgfHwgdGhpcy5fcXVlcnlQYXJhbXMoKSB8fCB0aGlzLl9xdWVyeVBhcmFtc0hhbmRsaW5nKCkgfHwgdGhpcy5fcHJlc2VydmVGcmFnbWVudCgpIHx8IHRoaXMuX3JlbGF0aXZlVG8oKSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBfUnVudGltZUVycm9yKDQwMTcsICdDYW5ub3QgY29uZmlndXJlIHF1ZXJ5UGFyYW1zIG9yIGZyYWdtZW50IHdoZW4gdXNpbmcgYSBVcmxUcmVlIGFzIHRoZSByb3V0ZXJMaW5rIGlucHV0IHZhbHVlLicpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIHNldFRhYkluZGV4SWZOb3RPbk5hdGl2ZUVsKG5ld1RhYkluZGV4KSB7XG4gICAgICBpZiAodGhpcy50YWJJbmRleEF0dHJpYnV0ZSAhPSBudWxsIHx8IHRoaXMuaXNBbmNob3JFbGVtZW50KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuYXBwbHlBdHRyaWJ1dGVWYWx1ZSgndGFiaW5kZXgnLCBuZXdUYWJJbmRleCk7XG4gICAgfVxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXMpIHtcbiAgICAgIHRoaXMub25DaGFuZ2VzLm5leHQodGhpcyk7XG4gICAgfVxuICAgIHJvdXRlckxpbmtJbnB1dCA9IHNpZ25hbChudWxsLCAuLi4obmdEZXZNb2RlID8gW3tcbiAgICAgIGRlYnVnTmFtZTogXCJyb3V0ZXJMaW5rSW5wdXRcIlxuICAgIH1dIDogW10pKTtcbiAgICBzZXQgcm91dGVyTGluayhjb21tYW5kc09yVXJsVHJlZSkge1xuICAgICAgaWYgKGNvbW1hbmRzT3JVcmxUcmVlID09IG51bGwpIHtcbiAgICAgICAgdGhpcy5yb3V0ZXJMaW5rSW5wdXQuc2V0KG51bGwpO1xuICAgICAgICB0aGlzLnNldFRhYkluZGV4SWZOb3RPbk5hdGl2ZUVsKG51bGwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGlzVXJsVHJlZShjb21tYW5kc09yVXJsVHJlZSkpIHtcbiAgICAgICAgICB0aGlzLnJvdXRlckxpbmtJbnB1dC5zZXQoY29tbWFuZHNPclVybFRyZWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMucm91dGVyTGlua0lucHV0LnNldChBcnJheS5pc0FycmF5KGNvbW1hbmRzT3JVcmxUcmVlKSA/IGNvbW1hbmRzT3JVcmxUcmVlIDogW2NvbW1hbmRzT3JVcmxUcmVlXSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXRUYWJJbmRleElmTm90T25OYXRpdmVFbCgnMCcpO1xuICAgICAgfVxuICAgIH1cbiAgICBvbkNsaWNrKGJ1dHRvbiwgY3RybEtleSwgc2hpZnRLZXksIGFsdEtleSwgbWV0YUtleSkge1xuICAgICAgY29uc3QgdXJsVHJlZSA9IHRoaXMuX3VybFRyZWUoKTtcbiAgICAgIGlmICh1cmxUcmVlID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuaXNBbmNob3JFbGVtZW50KSB7XG4gICAgICAgIGlmIChidXR0b24gIT09IDAgfHwgY3RybEtleSB8fCBzaGlmdEtleSB8fCBhbHRLZXkgfHwgbWV0YUtleSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy50YXJnZXQgPT09ICdzdHJpbmcnICYmIHRoaXMudGFyZ2V0ICE9ICdfc2VsZicpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29uc3QgZXh0cmFzID0ge1xuICAgICAgICBza2lwTG9jYXRpb25DaGFuZ2U6IHRoaXMuc2tpcExvY2F0aW9uQ2hhbmdlLFxuICAgICAgICByZXBsYWNlVXJsOiB0aGlzLnJlcGxhY2VVcmwsXG4gICAgICAgIHN0YXRlOiB0aGlzLnN0YXRlLFxuICAgICAgICBpbmZvOiB0aGlzLmluZm9cbiAgICAgIH07XG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHVybFRyZWUsIGV4dHJhcyk/LmNhdGNoKGUgPT4ge1xuICAgICAgICB0aGlzLmFwcGxpY2F0aW9uRXJyb3JIYW5kbGVyKGUpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gIXRoaXMuaXNBbmNob3JFbGVtZW50O1xuICAgIH1cbiAgICBuZ09uRGVzdHJveSgpIHt9XG4gICAgYXBwbHlBdHRyaWJ1dGVWYWx1ZShhdHRyTmFtZSwgYXR0clZhbHVlKSB7XG4gICAgICBjb25zdCByZW5kZXJlciA9IHRoaXMucmVuZGVyZXI7XG4gICAgICBjb25zdCBuYXRpdmVFbGVtZW50ID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50O1xuICAgICAgaWYgKGF0dHJWYWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICByZW5kZXJlci5zZXRBdHRyaWJ1dGUobmF0aXZlRWxlbWVudCwgYXR0ck5hbWUsIGF0dHJWYWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZW5kZXJlci5yZW1vdmVBdHRyaWJ1dGUobmF0aXZlRWxlbWVudCwgYXR0ck5hbWUpO1xuICAgICAgfVxuICAgIH1cbiAgICBfdXJsVHJlZSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgIHRoaXMucmVhY3RpdmVSb3V0ZXJTdGF0ZS5wYXRoKCk7XG4gICAgICBpZiAodGhpcy5fcHJlc2VydmVGcmFnbWVudCgpKSB7XG4gICAgICAgIHRoaXMucmVhY3RpdmVSb3V0ZXJTdGF0ZS5mcmFnbWVudCgpO1xuICAgICAgfVxuICAgICAgY29uc3Qgc2hvdWxkVHJhY2tQYXJhbXMgPSBoYW5kbGluZyA9PiBoYW5kbGluZyA9PT0gJ3ByZXNlcnZlJyB8fCBoYW5kbGluZyA9PT0gJ21lcmdlJztcbiAgICAgIGlmIChzaG91bGRUcmFja1BhcmFtcyh0aGlzLl9xdWVyeVBhcmFtc0hhbmRsaW5nKCkpIHx8IHNob3VsZFRyYWNrUGFyYW1zKHRoaXMub3B0aW9ucz8uZGVmYXVsdFF1ZXJ5UGFyYW1zSGFuZGxpbmcpKSB7XG4gICAgICAgIHRoaXMucmVhY3RpdmVSb3V0ZXJTdGF0ZS5xdWVyeVBhcmFtcygpO1xuICAgICAgfVxuICAgICAgY29uc3Qgcm91dGVyTGlua0lucHV0ID0gdGhpcy5yb3V0ZXJMaW5rSW5wdXQoKTtcbiAgICAgIGlmIChyb3V0ZXJMaW5rSW5wdXQgPT09IG51bGwgfHwgIXRoaXMucm91dGVyLmNyZWF0ZVVybFRyZWUpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9IGVsc2UgaWYgKGlzVXJsVHJlZShyb3V0ZXJMaW5rSW5wdXQpKSB7XG4gICAgICAgIHJldHVybiByb3V0ZXJMaW5rSW5wdXQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5yb3V0ZXIuY3JlYXRlVXJsVHJlZShyb3V0ZXJMaW5rSW5wdXQsIHtcbiAgICAgICAgcmVsYXRpdmVUbzogdGhpcy5fcmVsYXRpdmVUbygpICE9PSB1bmRlZmluZWQgPyB0aGlzLl9yZWxhdGl2ZVRvKCkgOiB0aGlzLnJvdXRlLFxuICAgICAgICBxdWVyeVBhcmFtczogdGhpcy5fcXVlcnlQYXJhbXMoKSxcbiAgICAgICAgZnJhZ21lbnQ6IHRoaXMuX2ZyYWdtZW50KCksXG4gICAgICAgIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6IHRoaXMuX3F1ZXJ5UGFyYW1zSGFuZGxpbmcoKSxcbiAgICAgICAgcHJlc2VydmVGcmFnbWVudDogdGhpcy5fcHJlc2VydmVGcmFnbWVudCgpXG4gICAgICB9KTtcbiAgICB9LCB7XG4gICAgICAuLi4obmdEZXZNb2RlID8ge1xuICAgICAgICBkZWJ1Z05hbWU6IFwiX3VybFRyZWVcIlxuICAgICAgfSA6IHt9KSxcbiAgICAgIGVxdWFsOiAoYSwgYikgPT4gdGhpcy5jb21wdXRlSHJlZihhKSA9PT0gdGhpcy5jb21wdXRlSHJlZihiKVxuICAgIH0pO1xuICAgIGdldCB1cmxUcmVlKCkge1xuICAgICAgcmV0dXJuIHVudHJhY2tlZCh0aGlzLl91cmxUcmVlKTtcbiAgICB9XG4gICAgY29tcHV0ZUhyZWYodXJsVHJlZSkge1xuICAgICAgcmV0dXJuIHVybFRyZWUgIT09IG51bGwgJiYgdGhpcy5sb2NhdGlvblN0cmF0ZWd5ID8gdGhpcy5sb2NhdGlvblN0cmF0ZWd5Py5wcmVwYXJlRXh0ZXJuYWxVcmwodGhpcy5yb3V0ZXIuc2VyaWFsaXplVXJsKHVybFRyZWUpKSA/PyAnJyA6IG51bGw7XG4gICAgfVxuICAgIHN0YXRpYyDJtWZhYyA9IGZ1bmN0aW9uIFJvdXRlckxpbmtfRmFjdG9yeShfX25nRmFjdG9yeVR5cGVfXykge1xuICAgICAgcmV0dXJuIG5ldyAoX19uZ0ZhY3RvcnlUeXBlX18gfHwgUm91dGVyTGluaykoaTAuybXJtWRpcmVjdGl2ZUluamVjdChSb3V0ZXIpLCBpMC7Jtcm1ZGlyZWN0aXZlSW5qZWN0KEFjdGl2YXRlZFJvdXRlKSwgaTAuybXJtWluamVjdEF0dHJpYnV0ZSgndGFiaW5kZXgnKSwgaTAuybXJtWRpcmVjdGl2ZUluamVjdChpMC5SZW5kZXJlcjIpLCBpMC7Jtcm1ZGlyZWN0aXZlSW5qZWN0KGkwLkVsZW1lbnRSZWYpLCBpMC7Jtcm1ZGlyZWN0aXZlSW5qZWN0KGkzLkxvY2F0aW9uU3RyYXRlZ3kpKTtcbiAgICB9O1xuICAgIHN0YXRpYyDJtWRpciA9IC8qIEBfX1BVUkVfXyAqL2kwLsm1ybVkZWZpbmVEaXJlY3RpdmUoe1xuICAgICAgdHlwZTogUm91dGVyTGluayxcbiAgICAgIHNlbGVjdG9yczogW1tcIlwiLCBcInJvdXRlckxpbmtcIiwgXCJcIl1dLFxuICAgICAgaG9zdFZhcnM6IDIsXG4gICAgICBob3N0QmluZGluZ3M6IGZ1bmN0aW9uIFJvdXRlckxpbmtfSG9zdEJpbmRpbmdzKHJmLCBjdHgpIHtcbiAgICAgICAgaWYgKHJmICYgMSkge1xuICAgICAgICAgIGkwLsm1ybVsaXN0ZW5lcihcImNsaWNrXCIsIGZ1bmN0aW9uIFJvdXRlckxpbmtfY2xpY2tfSG9zdEJpbmRpbmdIYW5kbGVyKCRldmVudCkge1xuICAgICAgICAgICAgcmV0dXJuIGN0eC5vbkNsaWNrKCRldmVudC5idXR0b24sICRldmVudC5jdHJsS2V5LCAkZXZlbnQuc2hpZnRLZXksICRldmVudC5hbHRLZXksICRldmVudC5tZXRhS2V5KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmYgJiAyKSB7XG4gICAgICAgICAgaTAuybXJtWF0dHJpYnV0ZShcImhyZWZcIiwgY3R4LnJlYWN0aXZlSHJlZigpLCBpMC7Jtcm1c2FuaXRpemVVcmxPclJlc291cmNlVXJsKShcInRhcmdldFwiLCBjdHguX3RhcmdldCgpKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGlucHV0czoge1xuICAgICAgICB0YXJnZXQ6IFwidGFyZ2V0XCIsXG4gICAgICAgIHF1ZXJ5UGFyYW1zOiBcInF1ZXJ5UGFyYW1zXCIsXG4gICAgICAgIGZyYWdtZW50OiBcImZyYWdtZW50XCIsXG4gICAgICAgIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6IFwicXVlcnlQYXJhbXNIYW5kbGluZ1wiLFxuICAgICAgICBzdGF0ZTogXCJzdGF0ZVwiLFxuICAgICAgICBpbmZvOiBcImluZm9cIixcbiAgICAgICAgcmVsYXRpdmVUbzogXCJyZWxhdGl2ZVRvXCIsXG4gICAgICAgIHByZXNlcnZlRnJhZ21lbnQ6IFsyLCBcInByZXNlcnZlRnJhZ21lbnRcIiwgXCJwcmVzZXJ2ZUZyYWdtZW50XCIsIGJvb2xlYW5BdHRyaWJ1dGVdLFxuICAgICAgICBza2lwTG9jYXRpb25DaGFuZ2U6IFsyLCBcInNraXBMb2NhdGlvbkNoYW5nZVwiLCBcInNraXBMb2NhdGlvbkNoYW5nZVwiLCBib29sZWFuQXR0cmlidXRlXSxcbiAgICAgICAgcmVwbGFjZVVybDogWzIsIFwicmVwbGFjZVVybFwiLCBcInJlcGxhY2VVcmxcIiwgYm9vbGVhbkF0dHJpYnV0ZV0sXG4gICAgICAgIHJvdXRlckxpbms6IFwicm91dGVyTGlua1wiXG4gICAgICB9LFxuICAgICAgZmVhdHVyZXM6IFtpMC7Jtcm1TmdPbkNoYW5nZXNGZWF0dXJlXVxuICAgIH0pO1xuICB9XG4gIHJldHVybiBSb3V0ZXJMaW5rO1xufSkoKTtcbi8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICAodHlwZW9mIG5nRGV2TW9kZSA9PT0gXCJ1bmRlZmluZWRcIiB8fCBuZ0Rldk1vZGUpICYmIHZvaWQgMDtcbn0pKCk7XG5sZXQgUm91dGVyTGlua0FjdGl2ZSA9IC8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICBjbGFzcyBSb3V0ZXJMaW5rQWN0aXZlIHtcbiAgICByb3V0ZXI7XG4gICAgZWxlbWVudDtcbiAgICByZW5kZXJlcjtcbiAgICBjZHI7XG4gICAgbGlua3M7XG4gICAgY2xhc3NlcyA9IFtdO1xuICAgIHJvdXRlckV2ZW50c1N1YnNjcmlwdGlvbjtcbiAgICBsaW5rSW5wdXRDaGFuZ2VzU3Vic2NyaXB0aW9uO1xuICAgIF9pc0FjdGl2ZSA9IGZhbHNlO1xuICAgIGdldCBpc0FjdGl2ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9pc0FjdGl2ZTtcbiAgICB9XG4gICAgcm91dGVyTGlua0FjdGl2ZU9wdGlvbnMgPSB7XG4gICAgICBleGFjdDogZmFsc2VcbiAgICB9O1xuICAgIGFyaWFDdXJyZW50V2hlbkFjdGl2ZTtcbiAgICBpc0FjdGl2ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICBsaW5rID0gaW5qZWN0KFJvdXRlckxpbmssIHtcbiAgICAgIG9wdGlvbmFsOiB0cnVlXG4gICAgfSk7XG4gICAgY29uc3RydWN0b3Iocm91dGVyLCBlbGVtZW50LCByZW5kZXJlciwgY2RyKSB7XG4gICAgICB0aGlzLnJvdXRlciA9IHJvdXRlcjtcbiAgICAgIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgICB0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG4gICAgICB0aGlzLmNkciA9IGNkcjtcbiAgICAgIHRoaXMucm91dGVyRXZlbnRzU3Vic2NyaXB0aW9uID0gcm91dGVyLmV2ZW50cy5zdWJzY3JpYmUocyA9PiB7XG4gICAgICAgIGlmIChzIGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCkge1xuICAgICAgICAgIHRoaXMudXBkYXRlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICBuZ0FmdGVyQ29udGVudEluaXQoKSB7XG4gICAgICBvZih0aGlzLmxpbmtzLmNoYW5nZXMsIG9mKG51bGwpKS5waXBlKG1lcmdlQWxsKCkpLnN1YnNjcmliZShfID0+IHtcbiAgICAgICAgdGhpcy51cGRhdGUoKTtcbiAgICAgICAgdGhpcy5zdWJzY3JpYmVUb0VhY2hMaW5rT25DaGFuZ2VzKCk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgc3Vic2NyaWJlVG9FYWNoTGlua09uQ2hhbmdlcygpIHtcbiAgICAgIHRoaXMubGlua0lucHV0Q2hhbmdlc1N1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgIGNvbnN0IGFsbExpbmtDaGFuZ2VzID0gWy4uLnRoaXMubGlua3MudG9BcnJheSgpLCB0aGlzLmxpbmtdLmZpbHRlcihsaW5rID0+ICEhbGluaykubWFwKGxpbmsgPT4gbGluay5vbkNoYW5nZXMpO1xuICAgICAgdGhpcy5saW5rSW5wdXRDaGFuZ2VzU3Vic2NyaXB0aW9uID0gZnJvbShhbGxMaW5rQ2hhbmdlcykucGlwZShtZXJnZUFsbCgpKS5zdWJzY3JpYmUobGluayA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9pc0FjdGl2ZSAhPT0gdGhpcy5pc0xpbmtBY3RpdmUodGhpcy5yb3V0ZXIpKGxpbmspKSB7XG4gICAgICAgICAgdGhpcy51cGRhdGUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHNldCByb3V0ZXJMaW5rQWN0aXZlKGRhdGEpIHtcbiAgICAgIGNvbnN0IGNsYXNzZXMgPSBBcnJheS5pc0FycmF5KGRhdGEpID8gZGF0YSA6IGRhdGEuc3BsaXQoJyAnKTtcbiAgICAgIHRoaXMuY2xhc3NlcyA9IGNsYXNzZXMuZmlsdGVyKGMgPT4gISFjKTtcbiAgICB9XG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlcykge1xuICAgICAgdGhpcy51cGRhdGUoKTtcbiAgICB9XG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICB0aGlzLnJvdXRlckV2ZW50c1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgdGhpcy5saW5rSW5wdXRDaGFuZ2VzU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICB1cGRhdGUoKSB7XG4gICAgICBpZiAoIXRoaXMubGlua3MgfHwgIXRoaXMucm91dGVyLm5hdmlnYXRlZCkgcmV0dXJuO1xuICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICBjb25zdCBoYXNBY3RpdmVMaW5rcyA9IHRoaXMuaGFzQWN0aXZlTGlua3MoKTtcbiAgICAgICAgdGhpcy5jbGFzc2VzLmZvckVhY2goYyA9PiB7XG4gICAgICAgICAgaWYgKGhhc0FjdGl2ZUxpbmtzKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LCBjKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCwgYyk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGhhc0FjdGl2ZUxpbmtzICYmIHRoaXMuYXJpYUN1cnJlbnRXaGVuQWN0aXZlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZSh0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCwgJ2FyaWEtY3VycmVudCcsIHRoaXMuYXJpYUN1cnJlbnRXaGVuQWN0aXZlLnRvU3RyaW5nKCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQXR0cmlidXRlKHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LCAnYXJpYS1jdXJyZW50Jyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX2lzQWN0aXZlICE9PSBoYXNBY3RpdmVMaW5rcykge1xuICAgICAgICAgIHRoaXMuX2lzQWN0aXZlID0gaGFzQWN0aXZlTGlua3M7XG4gICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgdGhpcy5pc0FjdGl2ZUNoYW5nZS5lbWl0KGhhc0FjdGl2ZUxpbmtzKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIGlzTGlua0FjdGl2ZShyb3V0ZXIpIHtcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSBpc0FjdGl2ZU1hdGNoT3B0aW9ucyh0aGlzLnJvdXRlckxpbmtBY3RpdmVPcHRpb25zKSA/IHRoaXMucm91dGVyTGlua0FjdGl2ZU9wdGlvbnMgOiB0aGlzLnJvdXRlckxpbmtBY3RpdmVPcHRpb25zLmV4YWN0ID8/IGZhbHNlID8ge1xuICAgICAgICAuLi5leGFjdE1hdGNoT3B0aW9uc1xuICAgICAgfSA6IHtcbiAgICAgICAgLi4uc3Vic2V0TWF0Y2hPcHRpb25zXG4gICAgICB9O1xuICAgICAgcmV0dXJuIGxpbmsgPT4ge1xuICAgICAgICBjb25zdCB1cmxUcmVlID0gbGluay51cmxUcmVlO1xuICAgICAgICByZXR1cm4gdXJsVHJlZSA/IHVudHJhY2tlZChpc0FjdGl2ZSh1cmxUcmVlLCByb3V0ZXIsIG9wdGlvbnMpKSA6IGZhbHNlO1xuICAgICAgfTtcbiAgICB9XG4gICAgaGFzQWN0aXZlTGlua3MoKSB7XG4gICAgICBjb25zdCBpc0FjdGl2ZUNoZWNrRm4gPSB0aGlzLmlzTGlua0FjdGl2ZSh0aGlzLnJvdXRlcik7XG4gICAgICByZXR1cm4gdGhpcy5saW5rICYmIGlzQWN0aXZlQ2hlY2tGbih0aGlzLmxpbmspIHx8IHRoaXMubGlua3Muc29tZShpc0FjdGl2ZUNoZWNrRm4pO1xuICAgIH1cbiAgICBzdGF0aWMgybVmYWMgPSBmdW5jdGlvbiBSb3V0ZXJMaW5rQWN0aXZlX0ZhY3RvcnkoX19uZ0ZhY3RvcnlUeXBlX18pIHtcbiAgICAgIHJldHVybiBuZXcgKF9fbmdGYWN0b3J5VHlwZV9fIHx8IFJvdXRlckxpbmtBY3RpdmUpKGkwLsm1ybVkaXJlY3RpdmVJbmplY3QoUm91dGVyKSwgaTAuybXJtWRpcmVjdGl2ZUluamVjdChpMC5FbGVtZW50UmVmKSwgaTAuybXJtWRpcmVjdGl2ZUluamVjdChpMC5SZW5kZXJlcjIpLCBpMC7Jtcm1ZGlyZWN0aXZlSW5qZWN0KGkwLkNoYW5nZURldGVjdG9yUmVmKSk7XG4gICAgfTtcbiAgICBzdGF0aWMgybVkaXIgPSAvKiBAX19QVVJFX18gKi9pMC7Jtcm1ZGVmaW5lRGlyZWN0aXZlKHtcbiAgICAgIHR5cGU6IFJvdXRlckxpbmtBY3RpdmUsXG4gICAgICBzZWxlY3RvcnM6IFtbXCJcIiwgXCJyb3V0ZXJMaW5rQWN0aXZlXCIsIFwiXCJdXSxcbiAgICAgIGNvbnRlbnRRdWVyaWVzOiBmdW5jdGlvbiBSb3V0ZXJMaW5rQWN0aXZlX0NvbnRlbnRRdWVyaWVzKHJmLCBjdHgsIGRpckluZGV4KSB7XG4gICAgICAgIGlmIChyZiAmIDEpIHtcbiAgICAgICAgICBpMC7Jtcm1Y29udGVudFF1ZXJ5KGRpckluZGV4LCBSb3V0ZXJMaW5rLCA1KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmYgJiAyKSB7XG4gICAgICAgICAgbGV0IF90O1xuICAgICAgICAgIGkwLsm1ybVxdWVyeVJlZnJlc2goX3QgPSBpMC7Jtcm1bG9hZFF1ZXJ5KCkpICYmIChjdHgubGlua3MgPSBfdCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBpbnB1dHM6IHtcbiAgICAgICAgcm91dGVyTGlua0FjdGl2ZU9wdGlvbnM6IFwicm91dGVyTGlua0FjdGl2ZU9wdGlvbnNcIixcbiAgICAgICAgYXJpYUN1cnJlbnRXaGVuQWN0aXZlOiBcImFyaWFDdXJyZW50V2hlbkFjdGl2ZVwiLFxuICAgICAgICByb3V0ZXJMaW5rQWN0aXZlOiBcInJvdXRlckxpbmtBY3RpdmVcIlxuICAgICAgfSxcbiAgICAgIG91dHB1dHM6IHtcbiAgICAgICAgaXNBY3RpdmVDaGFuZ2U6IFwiaXNBY3RpdmVDaGFuZ2VcIlxuICAgICAgfSxcbiAgICAgIGV4cG9ydEFzOiBbXCJyb3V0ZXJMaW5rQWN0aXZlXCJdLFxuICAgICAgZmVhdHVyZXM6IFtpMC7Jtcm1TmdPbkNoYW5nZXNGZWF0dXJlXVxuICAgIH0pO1xuICB9XG4gIHJldHVybiBSb3V0ZXJMaW5rQWN0aXZlO1xufSkoKTtcbi8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICAodHlwZW9mIG5nRGV2TW9kZSA9PT0gXCJ1bmRlZmluZWRcIiB8fCBuZ0Rldk1vZGUpICYmIHZvaWQgMDtcbn0pKCk7XG5mdW5jdGlvbiBpc0FjdGl2ZU1hdGNoT3B0aW9ucyhvcHRpb25zKSB7XG4gIGNvbnN0IG8gPSBvcHRpb25zO1xuICByZXR1cm4gISEoby5wYXRocyB8fCBvLm1hdHJpeFBhcmFtcyB8fCBvLnF1ZXJ5UGFyYW1zIHx8IG8uZnJhZ21lbnQpO1xufVxuY2xhc3MgUHJlbG9hZGluZ1N0cmF0ZWd5IHt9XG5sZXQgUHJlbG9hZEFsbE1vZHVsZXMgPSAvKiNfX1BVUkVfXyovKCgpID0+IHtcbiAgY2xhc3MgUHJlbG9hZEFsbE1vZHVsZXMge1xuICAgIHByZWxvYWQocm91dGUsIGZuKSB7XG4gICAgICByZXR1cm4gZm4oKS5waXBlKGNhdGNoRXJyb3IoKCkgPT4gb2YobnVsbCkpKTtcbiAgICB9XG4gICAgc3RhdGljIMm1ZmFjID0gZnVuY3Rpb24gUHJlbG9hZEFsbE1vZHVsZXNfRmFjdG9yeShfX25nRmFjdG9yeVR5cGVfXykge1xuICAgICAgcmV0dXJuIG5ldyAoX19uZ0ZhY3RvcnlUeXBlX18gfHwgUHJlbG9hZEFsbE1vZHVsZXMpKCk7XG4gICAgfTtcbiAgICBzdGF0aWMgybVwcm92ID0gLyogQF9fUFVSRV9fICovaTAuybXJtWRlZmluZUluamVjdGFibGUoe1xuICAgICAgdG9rZW46IFByZWxvYWRBbGxNb2R1bGVzLFxuICAgICAgZmFjdG9yeTogUHJlbG9hZEFsbE1vZHVsZXMuybVmYWMsXG4gICAgICBwcm92aWRlZEluOiAncm9vdCdcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gUHJlbG9hZEFsbE1vZHVsZXM7XG59KSgpO1xuLyojX19QVVJFX18qLygoKSA9PiB7XG4gICh0eXBlb2YgbmdEZXZNb2RlID09PSBcInVuZGVmaW5lZFwiIHx8IG5nRGV2TW9kZSkgJiYgdm9pZCAwO1xufSkoKTtcbmxldCBOb1ByZWxvYWRpbmcgPSAvKiNfX1BVUkVfXyovKCgpID0+IHtcbiAgY2xhc3MgTm9QcmVsb2FkaW5nIHtcbiAgICBwcmVsb2FkKHJvdXRlLCBmbikge1xuICAgICAgcmV0dXJuIG9mKG51bGwpO1xuICAgIH1cbiAgICBzdGF0aWMgybVmYWMgPSBmdW5jdGlvbiBOb1ByZWxvYWRpbmdfRmFjdG9yeShfX25nRmFjdG9yeVR5cGVfXykge1xuICAgICAgcmV0dXJuIG5ldyAoX19uZ0ZhY3RvcnlUeXBlX18gfHwgTm9QcmVsb2FkaW5nKSgpO1xuICAgIH07XG4gICAgc3RhdGljIMm1cHJvdiA9IC8qIEBfX1BVUkVfXyAqL2kwLsm1ybVkZWZpbmVJbmplY3RhYmxlKHtcbiAgICAgIHRva2VuOiBOb1ByZWxvYWRpbmcsXG4gICAgICBmYWN0b3J5OiBOb1ByZWxvYWRpbmcuybVmYWMsXG4gICAgICBwcm92aWRlZEluOiAncm9vdCdcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gTm9QcmVsb2FkaW5nO1xufSkoKTtcbi8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICAodHlwZW9mIG5nRGV2TW9kZSA9PT0gXCJ1bmRlZmluZWRcIiB8fCBuZ0Rldk1vZGUpICYmIHZvaWQgMDtcbn0pKCk7XG5sZXQgUm91dGVyUHJlbG9hZGVyID0gLyojX19QVVJFX18qLygoKSA9PiB7XG4gIGNsYXNzIFJvdXRlclByZWxvYWRlciB7XG4gICAgcm91dGVyO1xuICAgIGluamVjdG9yO1xuICAgIHByZWxvYWRpbmdTdHJhdGVneTtcbiAgICBsb2FkZXI7XG4gICAgc3Vic2NyaXB0aW9uO1xuICAgIGNvbnN0cnVjdG9yKHJvdXRlciwgaW5qZWN0b3IsIHByZWxvYWRpbmdTdHJhdGVneSwgbG9hZGVyKSB7XG4gICAgICB0aGlzLnJvdXRlciA9IHJvdXRlcjtcbiAgICAgIHRoaXMuaW5qZWN0b3IgPSBpbmplY3RvcjtcbiAgICAgIHRoaXMucHJlbG9hZGluZ1N0cmF0ZWd5ID0gcHJlbG9hZGluZ1N0cmF0ZWd5O1xuICAgICAgdGhpcy5sb2FkZXIgPSBsb2FkZXI7XG4gICAgfVxuICAgIHNldFVwUHJlbG9hZGluZygpIHtcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gdGhpcy5yb3V0ZXIuZXZlbnRzLnBpcGUoZmlsdGVyKGUgPT4gZSBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQpLCBjb25jYXRNYXAoKCkgPT4gdGhpcy5wcmVsb2FkKCkpKS5zdWJzY3JpYmUoKCkgPT4ge30pO1xuICAgIH1cbiAgICBwcmVsb2FkKCkge1xuICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc1JvdXRlcyh0aGlzLmluamVjdG9yLCB0aGlzLnJvdXRlci5jb25maWcpO1xuICAgIH1cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICBwcm9jZXNzUm91dGVzKGluamVjdG9yLCByb3V0ZXMpIHtcbiAgICAgIGNvbnN0IHJlcyA9IFtdO1xuICAgICAgZm9yIChjb25zdCByb3V0ZSBvZiByb3V0ZXMpIHtcbiAgICAgICAgaWYgKHJvdXRlLnByb3ZpZGVycyAmJiAhcm91dGUuX2luamVjdG9yKSB7XG4gICAgICAgICAgcm91dGUuX2luamVjdG9yID0gY3JlYXRlRW52aXJvbm1lbnRJbmplY3Rvcihyb3V0ZS5wcm92aWRlcnMsIGluamVjdG9yLCB0eXBlb2YgbmdEZXZNb2RlID09PSAndW5kZWZpbmVkJyB8fCBuZ0Rldk1vZGUgPyBgUm91dGU6ICR7cm91dGUucGF0aH1gIDogJycpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGluamVjdG9yRm9yQ3VycmVudFJvdXRlID0gcm91dGUuX2luamVjdG9yID8/IGluamVjdG9yO1xuICAgICAgICBpZiAocm91dGUuX2xvYWRlZE5nTW9kdWxlRmFjdG9yeSAmJiAhcm91dGUuX2xvYWRlZEluamVjdG9yKSB7XG4gICAgICAgICAgcm91dGUuX2xvYWRlZEluamVjdG9yID0gcm91dGUuX2xvYWRlZE5nTW9kdWxlRmFjdG9yeS5jcmVhdGUoaW5qZWN0b3JGb3JDdXJyZW50Um91dGUpLmluamVjdG9yO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGluamVjdG9yRm9yQ2hpbGRyZW4gPSByb3V0ZS5fbG9hZGVkSW5qZWN0b3IgPz8gaW5qZWN0b3JGb3JDdXJyZW50Um91dGU7XG4gICAgICAgIGlmIChyb3V0ZS5sb2FkQ2hpbGRyZW4gJiYgIXJvdXRlLl9sb2FkZWRSb3V0ZXMgJiYgcm91dGUuY2FuTG9hZCA9PT0gdW5kZWZpbmVkIHx8IHJvdXRlLmxvYWRDb21wb25lbnQgJiYgIXJvdXRlLl9sb2FkZWRDb21wb25lbnQpIHtcbiAgICAgICAgICByZXMucHVzaCh0aGlzLnByZWxvYWRDb25maWcoaW5qZWN0b3JGb3JDdXJyZW50Um91dGUsIHJvdXRlKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJvdXRlLmNoaWxkcmVuIHx8IHJvdXRlLl9sb2FkZWRSb3V0ZXMpIHtcbiAgICAgICAgICByZXMucHVzaCh0aGlzLnByb2Nlc3NSb3V0ZXMoaW5qZWN0b3JGb3JDaGlsZHJlbiwgcm91dGUuY2hpbGRyZW4gPz8gcm91dGUuX2xvYWRlZFJvdXRlcykpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZnJvbShyZXMpLnBpcGUobWVyZ2VBbGwoKSk7XG4gICAgfVxuICAgIHByZWxvYWRDb25maWcoaW5qZWN0b3IsIHJvdXRlKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcmVsb2FkaW5nU3RyYXRlZ3kucHJlbG9hZChyb3V0ZSwgKCkgPT4ge1xuICAgICAgICBpZiAoaW5qZWN0b3IuZGVzdHJveWVkKSB7XG4gICAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBsb2FkZWRDaGlsZHJlbiQ7XG4gICAgICAgIGlmIChyb3V0ZS5sb2FkQ2hpbGRyZW4gJiYgcm91dGUuY2FuTG9hZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgbG9hZGVkQ2hpbGRyZW4kID0gZnJvbSh0aGlzLmxvYWRlci5sb2FkQ2hpbGRyZW4oaW5qZWN0b3IsIHJvdXRlKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbG9hZGVkQ2hpbGRyZW4kID0gb2YobnVsbCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVjdXJzaXZlTG9hZENoaWxkcmVuJCA9IGxvYWRlZENoaWxkcmVuJC5waXBlKG1lcmdlTWFwKGNvbmZpZyA9PiB7XG4gICAgICAgICAgaWYgKGNvbmZpZyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIG9mKHZvaWQgMCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJvdXRlLl9sb2FkZWRSb3V0ZXMgPSBjb25maWcucm91dGVzO1xuICAgICAgICAgIHJvdXRlLl9sb2FkZWRJbmplY3RvciA9IGNvbmZpZy5pbmplY3RvcjtcbiAgICAgICAgICByb3V0ZS5fbG9hZGVkTmdNb2R1bGVGYWN0b3J5ID0gY29uZmlnLmZhY3Rvcnk7XG4gICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc1JvdXRlcyhjb25maWcuaW5qZWN0b3IgPz8gaW5qZWN0b3IsIGNvbmZpZy5yb3V0ZXMpO1xuICAgICAgICB9KSk7XG4gICAgICAgIGlmIChyb3V0ZS5sb2FkQ29tcG9uZW50ICYmICFyb3V0ZS5fbG9hZGVkQ29tcG9uZW50KSB7XG4gICAgICAgICAgY29uc3QgbG9hZENvbXBvbmVudCQgPSB0aGlzLmxvYWRlci5sb2FkQ29tcG9uZW50KGluamVjdG9yLCByb3V0ZSk7XG4gICAgICAgICAgcmV0dXJuIGZyb20oW3JlY3Vyc2l2ZUxvYWRDaGlsZHJlbiQsIGxvYWRDb21wb25lbnQkXSkucGlwZShtZXJnZUFsbCgpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gcmVjdXJzaXZlTG9hZENoaWxkcmVuJDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHN0YXRpYyDJtWZhYyA9IGZ1bmN0aW9uIFJvdXRlclByZWxvYWRlcl9GYWN0b3J5KF9fbmdGYWN0b3J5VHlwZV9fKSB7XG4gICAgICByZXR1cm4gbmV3IChfX25nRmFjdG9yeVR5cGVfXyB8fCBSb3V0ZXJQcmVsb2FkZXIpKGkwLsm1ybVpbmplY3QoUm91dGVyKSwgaTAuybXJtWluamVjdChpMC5FbnZpcm9ubWVudEluamVjdG9yKSwgaTAuybXJtWluamVjdChQcmVsb2FkaW5nU3RyYXRlZ3kpLCBpMC7Jtcm1aW5qZWN0KFJvdXRlckNvbmZpZ0xvYWRlcikpO1xuICAgIH07XG4gICAgc3RhdGljIMm1cHJvdiA9IC8qIEBfX1BVUkVfXyAqL2kwLsm1ybVkZWZpbmVJbmplY3RhYmxlKHtcbiAgICAgIHRva2VuOiBSb3V0ZXJQcmVsb2FkZXIsXG4gICAgICBmYWN0b3J5OiBSb3V0ZXJQcmVsb2FkZXIuybVmYWMsXG4gICAgICBwcm92aWRlZEluOiAncm9vdCdcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gUm91dGVyUHJlbG9hZGVyO1xufSkoKTtcbi8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICAodHlwZW9mIG5nRGV2TW9kZSA9PT0gXCJ1bmRlZmluZWRcIiB8fCBuZ0Rldk1vZGUpICYmIHZvaWQgMDtcbn0pKCk7XG5jb25zdCBST1VURVJfU0NST0xMRVIgPSAvKiNfX1BVUkVfXyovbmV3IEluamVjdGlvblRva2VuKHR5cGVvZiBuZ0Rldk1vZGUgIT09ICd1bmRlZmluZWQnICYmIG5nRGV2TW9kZSA/ICdSb3V0ZXIgU2Nyb2xsZXInIDogJycpO1xubGV0IFJvdXRlclNjcm9sbGVyID0gLyojX19QVVJFX18qLygoKSA9PiB7XG4gIGNsYXNzIFJvdXRlclNjcm9sbGVyIHtcbiAgICBvcHRpb25zO1xuICAgIHJvdXRlckV2ZW50c1N1YnNjcmlwdGlvbjtcbiAgICBzY3JvbGxFdmVudHNTdWJzY3JpcHRpb247XG4gICAgbGFzdElkID0gMDtcbiAgICBsYXN0U291cmNlID0gSU1QRVJBVElWRV9OQVZJR0FUSU9OO1xuICAgIHJlc3RvcmVkSWQgPSAwO1xuICAgIHN0b3JlID0ge307XG4gICAgdXJsU2VyaWFsaXplciA9IGluamVjdChVcmxTZXJpYWxpemVyKTtcbiAgICB6b25lID0gaW5qZWN0KE5nWm9uZSk7XG4gICAgdmlld3BvcnRTY3JvbGxlciA9IGluamVjdChWaWV3cG9ydFNjcm9sbGVyKTtcbiAgICB0cmFuc2l0aW9ucyA9IGluamVjdChOYXZpZ2F0aW9uVHJhbnNpdGlvbnMpO1xuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgICB0aGlzLm9wdGlvbnMuc2Nyb2xsUG9zaXRpb25SZXN0b3JhdGlvbiB8fD0gJ2Rpc2FibGVkJztcbiAgICAgIHRoaXMub3B0aW9ucy5hbmNob3JTY3JvbGxpbmcgfHw9ICdkaXNhYmxlZCc7XG4gICAgfVxuICAgIGluaXQoKSB7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLnNjcm9sbFBvc2l0aW9uUmVzdG9yYXRpb24gIT09ICdkaXNhYmxlZCcpIHtcbiAgICAgICAgdGhpcy52aWV3cG9ydFNjcm9sbGVyLnNldEhpc3RvcnlTY3JvbGxSZXN0b3JhdGlvbignbWFudWFsJyk7XG4gICAgICB9XG4gICAgICB0aGlzLnJvdXRlckV2ZW50c1N1YnNjcmlwdGlvbiA9IHRoaXMuY3JlYXRlU2Nyb2xsRXZlbnRzKCk7XG4gICAgICB0aGlzLnNjcm9sbEV2ZW50c1N1YnNjcmlwdGlvbiA9IHRoaXMuY29uc3VtZVNjcm9sbEV2ZW50cygpO1xuICAgIH1cbiAgICBjcmVhdGVTY3JvbGxFdmVudHMoKSB7XG4gICAgICByZXR1cm4gdGhpcy50cmFuc2l0aW9ucy5ldmVudHMuc3Vic2NyaWJlKGUgPT4ge1xuICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIE5hdmlnYXRpb25TdGFydCkge1xuICAgICAgICAgIHRoaXMuc3RvcmVbdGhpcy5sYXN0SWRdID0gdGhpcy52aWV3cG9ydFNjcm9sbGVyLmdldFNjcm9sbFBvc2l0aW9uKCk7XG4gICAgICAgICAgdGhpcy5sYXN0U291cmNlID0gZS5uYXZpZ2F0aW9uVHJpZ2dlcjtcbiAgICAgICAgICB0aGlzLnJlc3RvcmVkSWQgPSBlLnJlc3RvcmVkU3RhdGUgPyBlLnJlc3RvcmVkU3RhdGUubmF2aWdhdGlvbklkIDogMDtcbiAgICAgICAgfSBlbHNlIGlmIChlIGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCkge1xuICAgICAgICAgIHRoaXMubGFzdElkID0gZS5pZDtcbiAgICAgICAgICB0aGlzLnNjaGVkdWxlU2Nyb2xsRXZlbnQoZSwgdGhpcy51cmxTZXJpYWxpemVyLnBhcnNlKGUudXJsQWZ0ZXJSZWRpcmVjdHMpLmZyYWdtZW50KTtcbiAgICAgICAgfSBlbHNlIGlmIChlIGluc3RhbmNlb2YgTmF2aWdhdGlvblNraXBwZWQgJiYgZS5jb2RlID09PSBOYXZpZ2F0aW9uU2tpcHBlZENvZGUuSWdub3JlZFNhbWVVcmxOYXZpZ2F0aW9uKSB7XG4gICAgICAgICAgdGhpcy5sYXN0U291cmNlID0gdW5kZWZpbmVkO1xuICAgICAgICAgIHRoaXMucmVzdG9yZWRJZCA9IDA7XG4gICAgICAgICAgdGhpcy5zY2hlZHVsZVNjcm9sbEV2ZW50KGUsIHRoaXMudXJsU2VyaWFsaXplci5wYXJzZShlLnVybCkuZnJhZ21lbnQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgY29uc3VtZVNjcm9sbEV2ZW50cygpIHtcbiAgICAgIHJldHVybiB0aGlzLnRyYW5zaXRpb25zLmV2ZW50cy5zdWJzY3JpYmUoZSA9PiB7XG4gICAgICAgIGlmICghKGUgaW5zdGFuY2VvZiBTY3JvbGwpIHx8IGUuc2Nyb2xsQmVoYXZpb3IgPT09ICdtYW51YWwnKSByZXR1cm47XG4gICAgICAgIGNvbnN0IGluc3RhbnRTY3JvbGwgPSB7XG4gICAgICAgICAgYmVoYXZpb3I6ICdpbnN0YW50J1xuICAgICAgICB9O1xuICAgICAgICBpZiAoZS5wb3NpdGlvbikge1xuICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2Nyb2xsUG9zaXRpb25SZXN0b3JhdGlvbiA9PT0gJ3RvcCcpIHtcbiAgICAgICAgICAgIHRoaXMudmlld3BvcnRTY3JvbGxlci5zY3JvbGxUb1Bvc2l0aW9uKFswLCAwXSwgaW5zdGFudFNjcm9sbCk7XG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLm9wdGlvbnMuc2Nyb2xsUG9zaXRpb25SZXN0b3JhdGlvbiA9PT0gJ2VuYWJsZWQnKSB7XG4gICAgICAgICAgICB0aGlzLnZpZXdwb3J0U2Nyb2xsZXIuc2Nyb2xsVG9Qb3NpdGlvbihlLnBvc2l0aW9uLCBpbnN0YW50U2Nyb2xsKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKGUuYW5jaG9yICYmIHRoaXMub3B0aW9ucy5hbmNob3JTY3JvbGxpbmcgPT09ICdlbmFibGVkJykge1xuICAgICAgICAgICAgdGhpcy52aWV3cG9ydFNjcm9sbGVyLnNjcm9sbFRvQW5jaG9yKGUuYW5jaG9yKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMub3B0aW9ucy5zY3JvbGxQb3NpdGlvblJlc3RvcmF0aW9uICE9PSAnZGlzYWJsZWQnKSB7XG4gICAgICAgICAgICB0aGlzLnZpZXdwb3J0U2Nyb2xsZXIuc2Nyb2xsVG9Qb3NpdGlvbihbMCwgMF0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHNjaGVkdWxlU2Nyb2xsRXZlbnQocm91dGVyRXZlbnQsIGFuY2hvcikge1xuICAgICAgY29uc3Qgc2Nyb2xsID0gdW50cmFja2VkKHRoaXMudHJhbnNpdGlvbnMuY3VycmVudE5hdmlnYXRpb24pPy5leHRyYXMuc2Nyb2xsO1xuICAgICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgICAgc2V0VGltZW91dChyZXNvbHZlKTtcbiAgICAgICAgICBpZiAodHlwZW9mIHJlcXVlc3RBbmltYXRpb25GcmFtZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShyZXNvbHZlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnpvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICB0aGlzLnRyYW5zaXRpb25zLmV2ZW50cy5uZXh0KG5ldyBTY3JvbGwocm91dGVyRXZlbnQsIHRoaXMubGFzdFNvdXJjZSA9PT0gJ3BvcHN0YXRlJyA/IHRoaXMuc3RvcmVbdGhpcy5yZXN0b3JlZElkXSA6IG51bGwsIGFuY2hvciwgc2Nyb2xsKSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgdGhpcy5yb3V0ZXJFdmVudHNTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICB0aGlzLnNjcm9sbEV2ZW50c1N1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgc3RhdGljIMm1ZmFjID0gZnVuY3Rpb24gUm91dGVyU2Nyb2xsZXJfRmFjdG9yeShfX25nRmFjdG9yeVR5cGVfXykge1xuICAgICAgaTAuybXJtWludmFsaWRGYWN0b3J5KCk7XG4gICAgfTtcbiAgICBzdGF0aWMgybVwcm92ID0gLyogQF9fUFVSRV9fICovaTAuybXJtWRlZmluZUluamVjdGFibGUoe1xuICAgICAgdG9rZW46IFJvdXRlclNjcm9sbGVyLFxuICAgICAgZmFjdG9yeTogUm91dGVyU2Nyb2xsZXIuybVmYWNcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gUm91dGVyU2Nyb2xsZXI7XG59KSgpO1xuLyojX19QVVJFX18qLygoKSA9PiB7XG4gICh0eXBlb2YgbmdEZXZNb2RlID09PSBcInVuZGVmaW5lZFwiIHx8IG5nRGV2TW9kZSkgJiYgdm9pZCAwO1xufSkoKTtcbmZ1bmN0aW9uIGdldExvYWRlZFJvdXRlcyhyb3V0ZSkge1xuICByZXR1cm4gcm91dGUuX2xvYWRlZFJvdXRlcztcbn1cbmZ1bmN0aW9uIGdldFJvdXRlckluc3RhbmNlKGluamVjdG9yKSB7XG4gIHJldHVybiBpbmplY3Rvci5nZXQoUm91dGVyLCBudWxsLCB7XG4gICAgb3B0aW9uYWw6IHRydWVcbiAgfSk7XG59XG5mdW5jdGlvbiBuYXZpZ2F0ZUJ5VXJsKHJvdXRlciwgdXJsKSB7XG4gIGlmICghKHJvdXRlciBpbnN0YW5jZW9mIFJvdXRlcikpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBwcm92aWRlZCByb3V0ZXIgaXMgbm90IGFuIEFuZ3VsYXIgUm91dGVyLicpO1xuICB9XG4gIHJldHVybiByb3V0ZXIubmF2aWdhdGVCeVVybCh1cmwpO1xufVxubGV0IE5hdmlnYXRpb25TdGF0ZU1hbmFnZXIgPSAvKiNfX1BVUkVfXyovKCgpID0+IHtcbiAgY2xhc3MgTmF2aWdhdGlvblN0YXRlTWFuYWdlciBleHRlbmRzIFN0YXRlTWFuYWdlciB7XG4gICAgaW5qZWN0b3IgPSBpbmplY3QoRW52aXJvbm1lbnRJbmplY3Rvcik7XG4gICAgbmF2aWdhdGlvbiA9IGluamVjdChQbGF0Zm9ybU5hdmlnYXRpb24pO1xuICAgIGluTWVtb3J5U2Nyb2xsaW5nRW5hYmxlZCA9IGluamVjdChST1VURVJfU0NST0xMRVIsIHtcbiAgICAgIG9wdGlvbmFsOiB0cnVlXG4gICAgfSkgIT09IG51bGw7XG4gICAgYmFzZSA9IG5ldyBVUkwoaW5qZWN0KFBsYXRmb3JtTG9jYXRpb24pLmhyZWYpLm9yaWdpbjtcbiAgICBhcHBSb290VVJMID0gbmV3IFVSTCh0aGlzLmxvY2F0aW9uLnByZXBhcmVFeHRlcm5hbFVybD8uKCcvJykgPz8gJy8nLCB0aGlzLmJhc2UpLmhyZWY7XG4gICAgcHJlY29tbWl0SGFuZGxlclN1cHBvcnRlZCA9IGluamVjdChfUFJFQ09NTUlUX0hBTkRMRVJfU1VQUE9SVEVEKTtcbiAgICBhY3RpdmVIaXN0b3J5RW50cnkgPSB0aGlzLm5hdmlnYXRpb24uY3VycmVudEVudHJ5O1xuICAgIGN1cnJlbnROYXZpZ2F0aW9uID0ge307XG4gICAgbm9uUm91dGVyQ3VycmVudEVudHJ5Q2hhbmdlU3ViamVjdCA9IG5ldyBTdWJqZWN0KCk7XG4gICAgbm9uUm91dGVyRW50cnlDaGFuZ2VMaXN0ZW5lcjtcbiAgICBnZXQgcmVnaXN0ZXJlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLm5vblJvdXRlckVudHJ5Q2hhbmdlTGlzdGVuZXIgIT09IHVuZGVmaW5lZCAmJiAhdGhpcy5ub25Sb3V0ZXJFbnRyeUNoYW5nZUxpc3RlbmVyLmNsb3NlZDtcbiAgICB9XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICBzdXBlcigpO1xuICAgICAgY29uc3QgbmF2aWdhdGVMaXN0ZW5lciA9IGV2ZW50ID0+IHtcbiAgICAgICAgdGhpcy5oYW5kbGVOYXZpZ2F0ZShldmVudCk7XG4gICAgICB9O1xuICAgICAgdGhpcy5uYXZpZ2F0aW9uLmFkZEV2ZW50TGlzdGVuZXIoJ25hdmlnYXRlJywgbmF2aWdhdGVMaXN0ZW5lcik7XG4gICAgICBpbmplY3QoRGVzdHJveVJlZikub25EZXN0cm95KCgpID0+IHRoaXMubmF2aWdhdGlvbi5yZW1vdmVFdmVudExpc3RlbmVyKCduYXZpZ2F0ZScsIG5hdmlnYXRlTGlzdGVuZXIpKTtcbiAgICB9XG4gICAgcmVnaXN0ZXJOb25Sb3V0ZXJDdXJyZW50RW50cnlDaGFuZ2VMaXN0ZW5lcihsaXN0ZW5lcikge1xuICAgICAgdGhpcy5hY3RpdmVIaXN0b3J5RW50cnkgPSB0aGlzLm5hdmlnYXRpb24uY3VycmVudEVudHJ5O1xuICAgICAgdGhpcy5ub25Sb3V0ZXJFbnRyeUNoYW5nZUxpc3RlbmVyID0gdGhpcy5ub25Sb3V0ZXJDdXJyZW50RW50cnlDaGFuZ2VTdWJqZWN0LnN1YnNjcmliZSgoe1xuICAgICAgICBwYXRoLFxuICAgICAgICBzdGF0ZVxuICAgICAgfSkgPT4ge1xuICAgICAgICBsaXN0ZW5lcihwYXRoLCBzdGF0ZSwgJ3BvcHN0YXRlJywgIXRoaXMucHJlY29tbWl0SGFuZGxlclN1cHBvcnRlZCA/IHtcbiAgICAgICAgICByZXBsYWNlVXJsOiB0cnVlXG4gICAgICAgIH0gOiB7fSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiB0aGlzLm5vblJvdXRlckVudHJ5Q2hhbmdlTGlzdGVuZXI7XG4gICAgfVxuICAgIGFzeW5jIGhhbmRsZVJvdXRlckV2ZW50KGUsIHRyYW5zaXRpb24pIHtcbiAgICAgIHRoaXMuY3VycmVudE5hdmlnYXRpb24gPSB7XG4gICAgICAgIC4uLnRoaXMuY3VycmVudE5hdmlnYXRpb24sXG4gICAgICAgIHJvdXRlclRyYW5zaXRpb246IHRyYW5zaXRpb25cbiAgICAgIH07XG4gICAgICBpZiAoZSBpbnN0YW5jZW9mIE5hdmlnYXRpb25TdGFydCkge1xuICAgICAgICB0aGlzLnVwZGF0ZVN0YXRlTWVtZW50bygpO1xuICAgICAgICBpZiAodGhpcy5wcmVjb21taXRIYW5kbGVyU3VwcG9ydGVkKSB7XG4gICAgICAgICAgdGhpcy5tYXliZUNyZWF0ZU5hdmlnYXRpb25Gb3JUcmFuc2l0aW9uKHRyYW5zaXRpb24pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGUgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uU2tpcHBlZCkge1xuICAgICAgICB0aGlzLmZpbmlzaE5hdmlnYXRpb24oKTtcbiAgICAgICAgdGhpcy5jb21taXRUcmFuc2l0aW9uKHRyYW5zaXRpb24pO1xuICAgICAgfSBlbHNlIGlmIChlIGluc3RhbmNlb2YgQmVmb3JlUm91dGVzUmVjb2duaXplZCkge1xuICAgICAgICB0cmFuc2l0aW9uLnJvdXRlc1JlY29nbml6ZUhhbmRsZXIuZGVmZXJyZWRIYW5kbGUgPSBuZXcgUHJvbWlzZShhc3luYyByZXNvbHZlID0+IHtcbiAgICAgICAgICBpZiAodGhpcy51cmxVcGRhdGVTdHJhdGVneSA9PT0gJ2VhZ2VyJykge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgdGhpcy5tYXliZUNyZWF0ZU5hdmlnYXRpb25Gb3JUcmFuc2l0aW9uKHRyYW5zaXRpb24pO1xuICAgICAgICAgICAgICBhd2FpdCB0aGlzLmN1cnJlbnROYXZpZ2F0aW9uLmNvbW1pdFVybD8uKCk7XG4gICAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmIChlIGluc3RhbmNlb2YgQmVmb3JlQWN0aXZhdGVSb3V0ZXMpIHtcbiAgICAgICAgdHJhbnNpdGlvbi5iZWZvcmVBY3RpdmF0ZUhhbmRsZXIuZGVmZXJyZWRIYW5kbGUgPSBuZXcgUHJvbWlzZShhc3luYyByZXNvbHZlID0+IHtcbiAgICAgICAgICBpZiAodGhpcy51cmxVcGRhdGVTdHJhdGVneSA9PT0gJ2RlZmVycmVkJykge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgdGhpcy5tYXliZUNyZWF0ZU5hdmlnYXRpb25Gb3JUcmFuc2l0aW9uKHRyYW5zaXRpb24pO1xuICAgICAgICAgICAgICBhd2FpdCB0aGlzLmN1cnJlbnROYXZpZ2F0aW9uLmNvbW1pdFVybD8uKCk7XG4gICAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmNvbW1pdFRyYW5zaXRpb24odHJhbnNpdGlvbik7XG4gICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAoZSBpbnN0YW5jZW9mIE5hdmlnYXRpb25DYW5jZWwgfHwgZSBpbnN0YW5jZW9mIE5hdmlnYXRpb25FcnJvcikge1xuICAgICAgICBjb25zdCByZWRpcmVjdGluZ0JlZm9yZVVybENvbW1pdCA9IGUgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uQ2FuY2VsICYmIGUuY29kZSA9PT0gTmF2aWdhdGlvbkNhbmNlbGxhdGlvbkNvZGUuUmVkaXJlY3QgJiYgISF0aGlzLmN1cnJlbnROYXZpZ2F0aW9uLmNvbW1pdFVybDtcbiAgICAgICAgaWYgKHJlZGlyZWN0aW5nQmVmb3JlVXJsQ29tbWl0KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHZvaWQgdGhpcy5jYW5jZWwodHJhbnNpdGlvbiwgZSk7XG4gICAgICB9IGVsc2UgaWYgKGUgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRW5kKSB7XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICByZXNvbHZlSGFuZGxlcixcbiAgICAgICAgICByZW1vdmVBYm9ydExpc3RlbmVyXG4gICAgICAgIH0gPSB0aGlzLmN1cnJlbnROYXZpZ2F0aW9uO1xuICAgICAgICB0aGlzLmN1cnJlbnROYXZpZ2F0aW9uID0ge307XG4gICAgICAgIHJlbW92ZUFib3J0TGlzdGVuZXI/LigpO1xuICAgICAgICB0aGlzLmFjdGl2ZUhpc3RvcnlFbnRyeSA9IHRoaXMubmF2aWdhdGlvbi5jdXJyZW50RW50cnk7XG4gICAgICAgIGFmdGVyTmV4dFJlbmRlcih7XG4gICAgICAgICAgcmVhZDogKCkgPT4gcmVzb2x2ZUhhbmRsZXI/LigpXG4gICAgICAgIH0sIHtcbiAgICAgICAgICBpbmplY3RvcjogdGhpcy5pbmplY3RvclxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgbWF5YmVDcmVhdGVOYXZpZ2F0aW9uRm9yVHJhbnNpdGlvbih0cmFuc2l0aW9uKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIG5hdmlnYXRpb25FdmVudCxcbiAgICAgICAgY29tbWl0VXJsXG4gICAgICB9ID0gdGhpcy5jdXJyZW50TmF2aWdhdGlvbjtcbiAgICAgIGlmIChjb21taXRVcmwgfHwgbmF2aWdhdGlvbkV2ZW50ICYmIG5hdmlnYXRpb25FdmVudC5uYXZpZ2F0aW9uVHlwZSA9PT0gJ3RyYXZlcnNlJyAmJiB0aGlzLmV2ZW50QW5kUm91dGVyRGVzdGluYXRpb25zTWF0Y2gobmF2aWdhdGlvbkV2ZW50LCB0cmFuc2l0aW9uKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLmN1cnJlbnROYXZpZ2F0aW9uLnJlbW92ZUFib3J0TGlzdGVuZXI/LigpO1xuICAgICAgY29uc3QgcGF0aCA9IHRoaXMuY3JlYXRlQnJvd3NlclBhdGgodHJhbnNpdGlvbik7XG4gICAgICB0aGlzLm5hdmlnYXRlKHBhdGgsIHRyYW5zaXRpb24pO1xuICAgIH1cbiAgICBuYXZpZ2F0ZShpbnRlcm5hbFBhdGgsIHRyYW5zaXRpb24pIHtcbiAgICAgIGNvbnN0IHBhdGggPSB0cmFuc2l0aW9uLmV4dHJhcy5za2lwTG9jYXRpb25DaGFuZ2UgPyB0aGlzLm5hdmlnYXRpb24uY3VycmVudEVudHJ5LnVybCA6IHRoaXMubG9jYXRpb24ucHJlcGFyZUV4dGVybmFsVXJsKGludGVybmFsUGF0aCk7XG4gICAgICBjb25zdCBzdGF0ZSA9IHtcbiAgICAgICAgLi4udHJhbnNpdGlvbi5leHRyYXMuc3RhdGUsXG4gICAgICAgIG5hdmlnYXRpb25JZDogdHJhbnNpdGlvbi5pZFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGluZm8gPSB7XG4gICAgICAgIMm1cm91dGVySW5mbzoge1xuICAgICAgICAgIGludGVyY2VwdDogdHJ1ZVxuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgaWYgKCF0aGlzLm5hdmlnYXRpb24udHJhbnNpdGlvbiAmJiB0aGlzLmN1cnJlbnROYXZpZ2F0aW9uLm5hdmlnYXRpb25FdmVudCkge1xuICAgICAgICB0cmFuc2l0aW9uLmV4dHJhcy5yZXBsYWNlVXJsID0gZmFsc2U7XG4gICAgICB9XG4gICAgICBjb25zdCBoaXN0b3J5ID0gdGhpcy5sb2NhdGlvbi5pc0N1cnJlbnRQYXRoRXF1YWxUbyhwYXRoKSB8fCB0cmFuc2l0aW9uLmV4dHJhcy5yZXBsYWNlVXJsIHx8IHRyYW5zaXRpb24uZXh0cmFzLnNraXBMb2NhdGlvbkNoYW5nZSA/ICdyZXBsYWNlJyA6ICdwdXNoJztcbiAgICAgIGhhbmRsZVJlc3VsdFJlamVjdGlvbnModGhpcy5uYXZpZ2F0aW9uLm5hdmlnYXRlKHBhdGgsIHtcbiAgICAgICAgc3RhdGUsXG4gICAgICAgIGhpc3RvcnksXG4gICAgICAgIGluZm9cbiAgICAgIH0pKTtcbiAgICB9XG4gICAgZmluaXNoTmF2aWdhdGlvbigpIHtcbiAgICAgIHRoaXMuY3VycmVudE5hdmlnYXRpb24uY29tbWl0VXJsPy4oKTtcbiAgICAgIHRoaXMuY3VycmVudE5hdmlnYXRpb24/LnJlc29sdmVIYW5kbGVyPy4oKTtcbiAgICAgIHRoaXMuY3VycmVudE5hdmlnYXRpb24gPSB7fTtcbiAgICB9XG4gICAgYXN5bmMgY2FuY2VsKHRyYW5zaXRpb24sIGNhdXNlKSB7XG4gICAgICB0aGlzLmN1cnJlbnROYXZpZ2F0aW9uLnJlamVjdE5hdmlnYXRlRXZlbnQ/LigpO1xuICAgICAgY29uc3QgY2xlYXJlZFN0YXRlID0ge307XG4gICAgICB0aGlzLmN1cnJlbnROYXZpZ2F0aW9uID0gY2xlYXJlZFN0YXRlO1xuICAgICAgaWYgKGlzUmVkaXJlY3RpbmdFdmVudChjYXVzZSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgaXNUcmF2ZXJzYWxSZXNldCA9IHRoaXMuY2FuY2VsZWROYXZpZ2F0aW9uUmVzb2x1dGlvbiA9PT0gJ2NvbXB1dGVkJyAmJiB0aGlzLm5hdmlnYXRpb24uY3VycmVudEVudHJ5LmtleSAhPT0gdGhpcy5hY3RpdmVIaXN0b3J5RW50cnkua2V5O1xuICAgICAgdGhpcy5yZXNldEludGVybmFsU3RhdGUodHJhbnNpdGlvbi5maW5hbFVybCwgaXNUcmF2ZXJzYWxSZXNldCk7XG4gICAgICBpZiAodGhpcy5uYXZpZ2F0aW9uLmN1cnJlbnRFbnRyeS5pZCA9PT0gdGhpcy5hY3RpdmVIaXN0b3J5RW50cnkuaWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGNhdXNlIGluc3RhbmNlb2YgTmF2aWdhdGlvbkNhbmNlbCAmJiBjYXVzZS5jb2RlID09PSBOYXZpZ2F0aW9uQ2FuY2VsbGF0aW9uQ29kZS5BYm9ydGVkKSB7XG4gICAgICAgIGF3YWl0IFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50TmF2aWdhdGlvbiAhPT0gY2xlYXJlZFN0YXRlKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoaXNUcmF2ZXJzYWxSZXNldCkge1xuICAgICAgICBoYW5kbGVSZXN1bHRSZWplY3Rpb25zKHRoaXMubmF2aWdhdGlvbi50cmF2ZXJzZVRvKHRoaXMuYWN0aXZlSGlzdG9yeUVudHJ5LmtleSwge1xuICAgICAgICAgIGluZm86IHtcbiAgICAgICAgICAgIMm1cm91dGVySW5mbzoge1xuICAgICAgICAgICAgICBpbnRlcmNlcHQ6IGZhbHNlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBpbnRlcm5hbFBhdGggPSB0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKHRoaXMuZ2V0Q3VycmVudFVybFRyZWUoKSk7XG4gICAgICAgIGNvbnN0IHBhdGhPclVybCA9IHRoaXMubG9jYXRpb24ucHJlcGFyZUV4dGVybmFsVXJsKGludGVybmFsUGF0aCk7XG4gICAgICAgIGhhbmRsZVJlc3VsdFJlamVjdGlvbnModGhpcy5uYXZpZ2F0aW9uLm5hdmlnYXRlKHBhdGhPclVybCwge1xuICAgICAgICAgIHN0YXRlOiB0aGlzLmFjdGl2ZUhpc3RvcnlFbnRyeS5nZXRTdGF0ZSgpLFxuICAgICAgICAgIGhpc3Rvcnk6ICdyZXBsYWNlJyxcbiAgICAgICAgICBpbmZvOiB7XG4gICAgICAgICAgICDJtXJvdXRlckluZm86IHtcbiAgICAgICAgICAgICAgaW50ZXJjZXB0OiBmYWxzZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXNldEludGVybmFsU3RhdGUoZmluYWxVcmwsIHRyYXZlcnNhbFJlc2V0KSB7XG4gICAgICB0aGlzLnJvdXRlclN0YXRlID0gdGhpcy5zdGF0ZU1lbWVudG8ucm91dGVyU3RhdGU7XG4gICAgICB0aGlzLmN1cnJlbnRVcmxUcmVlID0gdGhpcy5zdGF0ZU1lbWVudG8uY3VycmVudFVybFRyZWU7XG4gICAgICB0aGlzLnJhd1VybFRyZWUgPSB0cmF2ZXJzYWxSZXNldCA/IHRoaXMuc3RhdGVNZW1lbnRvLnJhd1VybFRyZWUgOiB0aGlzLnVybEhhbmRsaW5nU3RyYXRlZ3kubWVyZ2UodGhpcy5jdXJyZW50VXJsVHJlZSwgZmluYWxVcmwgPz8gdGhpcy5yYXdVcmxUcmVlKTtcbiAgICB9XG4gICAgaGFuZGxlTmF2aWdhdGUoZXZlbnQpIHtcbiAgICAgIGlmICghZXZlbnQuY2FuSW50ZXJjZXB0IHx8IGV2ZW50Lm5hdmlnYXRpb25UeXBlID09PSAncmVsb2FkJykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCByb3V0ZXJJbmZvID0gZXZlbnQ/LmluZm8/Lsm1cm91dGVySW5mbztcbiAgICAgIGlmIChyb3V0ZXJJbmZvICYmICFyb3V0ZXJJbmZvLmludGVyY2VwdCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBpc1RyaWdnZXJlZEJ5Um91dGVyVHJhbnNpdGlvbiA9ICEhcm91dGVySW5mbztcbiAgICAgIGlmICghaXNUcmlnZ2VyZWRCeVJvdXRlclRyYW5zaXRpb24pIHtcbiAgICAgICAgdGhpcy5jdXJyZW50TmF2aWdhdGlvbi5yb3V0ZXJUcmFuc2l0aW9uPy5hYm9ydCgpO1xuICAgICAgICBpZiAoIXRoaXMucmVnaXN0ZXJlZCkge1xuICAgICAgICAgIHRoaXMuZmluaXNoTmF2aWdhdGlvbigpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5jdXJyZW50TmF2aWdhdGlvbiA9IHtcbiAgICAgICAgLi4udGhpcy5jdXJyZW50TmF2aWdhdGlvblxuICAgICAgfTtcbiAgICAgIHRoaXMuY3VycmVudE5hdmlnYXRpb24ubmF2aWdhdGlvbkV2ZW50ID0gZXZlbnQ7XG4gICAgICBjb25zdCBhYm9ydEhhbmRsZXIgPSAoKSA9PiB7XG4gICAgICAgIHRoaXMuY3VycmVudE5hdmlnYXRpb24ucm91dGVyVHJhbnNpdGlvbj8uYWJvcnQoKTtcbiAgICAgIH07XG4gICAgICBldmVudC5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBhYm9ydEhhbmRsZXIpO1xuICAgICAgdGhpcy5jdXJyZW50TmF2aWdhdGlvbi5yZW1vdmVBYm9ydExpc3RlbmVyID0gKCkgPT4gZXZlbnQuc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgYWJvcnRIYW5kbGVyKTtcbiAgICAgIGxldCBzY3JvbGwgPSB0aGlzLmluTWVtb3J5U2Nyb2xsaW5nRW5hYmxlZCA/ICdtYW51YWwnIDogdGhpcy5jdXJyZW50TmF2aWdhdGlvbi5yb3V0ZXJUcmFuc2l0aW9uPy5leHRyYXMuc2Nyb2xsID8/ICdhZnRlci10cmFuc2l0aW9uJztcbiAgICAgIGNvbnN0IGludGVyY2VwdE9wdGlvbnMgPSB7XG4gICAgICAgIHNjcm9sbFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgcHJvbWlzZTogaGFuZGxlclByb21pc2UsXG4gICAgICAgIHJlc29sdmU6IHJlc29sdmVIYW5kbGVyLFxuICAgICAgICByZWplY3Q6IHJlamVjdEhhbmRsZXJcbiAgICAgIH0gPSBfcHJvbWlzZVdpdGhSZXNvbHZlcnMoKTtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgcHJvbWlzZTogcHJlY29tbWl0SGFuZGxlclByb21pc2UsXG4gICAgICAgIHJlc29sdmU6IHJlc29sdmVQcmVjb21taXRIYW5kbGVyLFxuICAgICAgICByZWplY3Q6IHJlamVjdFByZWNvbW1pdEhhbmRsZXJcbiAgICAgIH0gPSBfcHJvbWlzZVdpdGhSZXNvbHZlcnMoKTtcbiAgICAgIHRoaXMuY3VycmVudE5hdmlnYXRpb24ucmVqZWN0TmF2aWdhdGVFdmVudCA9ICgpID0+IHtcbiAgICAgICAgZXZlbnQuc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgYWJvcnRIYW5kbGVyKTtcbiAgICAgICAgcmVqZWN0UHJlY29tbWl0SGFuZGxlcigpO1xuICAgICAgICByZWplY3RIYW5kbGVyKCk7XG4gICAgICB9O1xuICAgICAgdGhpcy5jdXJyZW50TmF2aWdhdGlvbi5yZXNvbHZlSGFuZGxlciA9ICgpID0+IHtcbiAgICAgICAgdGhpcy5jdXJyZW50TmF2aWdhdGlvbi5yZW1vdmVBYm9ydExpc3RlbmVyPy4oKTtcbiAgICAgICAgcmVzb2x2ZUhhbmRsZXIoKTtcbiAgICAgIH07XG4gICAgICBoYW5kbGVyUHJvbWlzZS5jYXRjaCgoKSA9PiB7fSk7XG4gICAgICBwcmVjb21taXRIYW5kbGVyUHJvbWlzZS5jYXRjaCgoKSA9PiB7fSk7XG4gICAgICBpbnRlcmNlcHRPcHRpb25zLmhhbmRsZXIgPSAoKSA9PiBoYW5kbGVyUHJvbWlzZTtcbiAgICAgIGlmICh0aGlzLmRlZmVycmVkQ29tbWl0U3VwcG9ydGVkKGV2ZW50KSkge1xuICAgICAgICBjb25zdCByZWRpcmVjdCA9IG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICAgIGludGVyY2VwdE9wdGlvbnMucHJlY29tbWl0SGFuZGxlciA9IGNvbnRyb2xsZXIgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMubmF2aWdhdGlvbi50cmFuc2l0aW9uPy5uYXZpZ2F0aW9uVHlwZSA9PT0gJ3RyYXZlcnNlJykge1xuICAgICAgICAgICAgICByZXNvbHZlKCgpID0+IHt9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJlc29sdmUoY29udHJvbGxlci5yZWRpcmVjdC5iaW5kKGNvbnRyb2xsZXIpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBwcmVjb21taXRIYW5kbGVyUHJvbWlzZTtcbiAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5jdXJyZW50TmF2aWdhdGlvbi5jb21taXRVcmwgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5jdXJyZW50TmF2aWdhdGlvbi5jb21taXRVcmwgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgY29uc3QgdHJhbnNpdGlvbiA9IHRoaXMuY3VycmVudE5hdmlnYXRpb24ucm91dGVyVHJhbnNpdGlvbjtcbiAgICAgICAgICBpZiAodHJhbnNpdGlvbiAmJiAhdHJhbnNpdGlvbi5leHRyYXMuc2tpcExvY2F0aW9uQ2hhbmdlKSB7XG4gICAgICAgICAgICBjb25zdCBpbnRlcm5hbFBhdGggPSB0aGlzLmNyZWF0ZUJyb3dzZXJQYXRoKHRyYW5zaXRpb24pO1xuICAgICAgICAgICAgY29uc3QgaGlzdG9yeSA9IHRoaXMubG9jYXRpb24uaXNDdXJyZW50UGF0aEVxdWFsVG8oaW50ZXJuYWxQYXRoKSB8fCAhIXRyYW5zaXRpb24uZXh0cmFzLnJlcGxhY2VVcmwgPyAncmVwbGFjZScgOiAncHVzaCc7XG4gICAgICAgICAgICBjb25zdCBzdGF0ZSA9IHtcbiAgICAgICAgICAgICAgLi4udHJhbnNpdGlvbi5leHRyYXMuc3RhdGUsXG4gICAgICAgICAgICAgIG5hdmlnYXRpb25JZDogdHJhbnNpdGlvbi5pZFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IHBhdGhPclVybCA9IHRoaXMubG9jYXRpb24ucHJlcGFyZUV4dGVybmFsVXJsKGludGVybmFsUGF0aCk7XG4gICAgICAgICAgICAoYXdhaXQgcmVkaXJlY3QpKHBhdGhPclVybCwge1xuICAgICAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgICAgICAgaGlzdG9yeVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJlc29sdmVQcmVjb21taXRIYW5kbGVyKCk7XG4gICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMubmF2aWdhdGlvbi50cmFuc2l0aW9uPy5jb21taXR0ZWQ7XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBldmVudC5pbnRlcmNlcHQoaW50ZXJjZXB0T3B0aW9ucyk7XG4gICAgICBpZiAoIWlzVHJpZ2dlcmVkQnlSb3V0ZXJUcmFuc2l0aW9uKSB7XG4gICAgICAgIHRoaXMuaGFuZGxlTmF2aWdhdGVFdmVudFRyaWdnZXJlZE91dHNpZGVSb3V0ZXJBUElzKGV2ZW50KTtcbiAgICAgIH1cbiAgICB9XG4gICAgaGFuZGxlTmF2aWdhdGVFdmVudFRyaWdnZXJlZE91dHNpZGVSb3V0ZXJBUElzKGV2ZW50KSB7XG4gICAgICBjb25zdCBwYXRoID0gZXZlbnQuZGVzdGluYXRpb24udXJsLnN1YnN0cmluZyh0aGlzLmFwcFJvb3RVUkwubGVuZ3RoIC0gMSk7XG4gICAgICBjb25zdCBzdGF0ZSA9IGV2ZW50LmRlc3RpbmF0aW9uLmdldFN0YXRlKCk7XG4gICAgICB0aGlzLm5vblJvdXRlckN1cnJlbnRFbnRyeUNoYW5nZVN1YmplY3QubmV4dCh7XG4gICAgICAgIHBhdGgsXG4gICAgICAgIHN0YXRlXG4gICAgICB9KTtcbiAgICB9XG4gICAgZXZlbnRBbmRSb3V0ZXJEZXN0aW5hdGlvbnNNYXRjaChuYXZpZ2F0ZUV2ZW50LCB0cmFuc2l0aW9uKSB7XG4gICAgICBjb25zdCBpbnRlcm5hbFBhdGggPSB0aGlzLmNyZWF0ZUJyb3dzZXJQYXRoKHRyYW5zaXRpb24pO1xuICAgICAgY29uc3QgZXZlbnREZXN0aW5hdGlvbiA9IG5ldyBVUkwobmF2aWdhdGVFdmVudC5kZXN0aW5hdGlvbi51cmwpO1xuICAgICAgY29uc3Qgcm91dGVyRGVzdGluYXRpb24gPSB0aGlzLmxvY2F0aW9uLnByZXBhcmVFeHRlcm5hbFVybChpbnRlcm5hbFBhdGgpO1xuICAgICAgcmV0dXJuIG5ldyBVUkwocm91dGVyRGVzdGluYXRpb24sIGV2ZW50RGVzdGluYXRpb24ub3JpZ2luKS5ocmVmID09PSBldmVudERlc3RpbmF0aW9uLmhyZWY7XG4gICAgfVxuICAgIGRlZmVycmVkQ29tbWl0U3VwcG9ydGVkKGV2ZW50KSB7XG4gICAgICByZXR1cm4gdGhpcy5wcmVjb21taXRIYW5kbGVyU3VwcG9ydGVkICYmIGV2ZW50LmNhbmNlbGFibGU7XG4gICAgfVxuICAgIHN0YXRpYyDJtWZhYyA9IGZ1bmN0aW9uIE5hdmlnYXRpb25TdGF0ZU1hbmFnZXJfRmFjdG9yeShfX25nRmFjdG9yeVR5cGVfXykge1xuICAgICAgcmV0dXJuIG5ldyAoX19uZ0ZhY3RvcnlUeXBlX18gfHwgTmF2aWdhdGlvblN0YXRlTWFuYWdlcikoKTtcbiAgICB9O1xuICAgIHN0YXRpYyDJtXByb3YgPSAvKiBAX19QVVJFX18gKi9pMC7Jtcm1ZGVmaW5lSW5qZWN0YWJsZSh7XG4gICAgICB0b2tlbjogTmF2aWdhdGlvblN0YXRlTWFuYWdlcixcbiAgICAgIGZhY3Rvcnk6IE5hdmlnYXRpb25TdGF0ZU1hbmFnZXIuybVmYWMsXG4gICAgICBwcm92aWRlZEluOiAncm9vdCdcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gTmF2aWdhdGlvblN0YXRlTWFuYWdlcjtcbn0pKCk7XG4vKiNfX1BVUkVfXyovKCgpID0+IHtcbiAgKHR5cGVvZiBuZ0Rldk1vZGUgPT09IFwidW5kZWZpbmVkXCIgfHwgbmdEZXZNb2RlKSAmJiB2b2lkIDA7XG59KSgpO1xuZnVuY3Rpb24gaGFuZGxlUmVzdWx0UmVqZWN0aW9ucyhyZXN1bHQpIHtcbiAgcmVzdWx0LmZpbmlzaGVkPy5jYXRjaCgoKSA9PiB7fSk7XG4gIHJlc3VsdC5jb21taXR0ZWQ/LmNhdGNoKCgpID0+IHt9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cbmZ1bmN0aW9uIHByb3ZpZGVSb3V0ZXIocm91dGVzLCAuLi5mZWF0dXJlcykge1xuICBpZiAodHlwZW9mIG5nRGV2TW9kZSA9PT0gJ3VuZGVmaW5lZCcgfHwgbmdEZXZNb2RlKSB7XG4gICAgX3B1Ymxpc2hFeHRlcm5hbEdsb2JhbFV0aWwoJ8m1Z2V0TG9hZGVkUm91dGVzJywgZ2V0TG9hZGVkUm91dGVzKTtcbiAgICBfcHVibGlzaEV4dGVybmFsR2xvYmFsVXRpbCgnybVnZXRSb3V0ZXJJbnN0YW5jZScsIGdldFJvdXRlckluc3RhbmNlKTtcbiAgICBfcHVibGlzaEV4dGVybmFsR2xvYmFsVXRpbCgnybVuYXZpZ2F0ZUJ5VXJsJywgbmF2aWdhdGVCeVVybCk7XG4gIH1cbiAgcmV0dXJuIG1ha2VFbnZpcm9ubWVudFByb3ZpZGVycyhbe1xuICAgIHByb3ZpZGU6IFJPVVRFUyxcbiAgICBtdWx0aTogdHJ1ZSxcbiAgICB1c2VWYWx1ZTogcm91dGVzXG4gIH0sIHR5cGVvZiBuZ0Rldk1vZGUgPT09ICd1bmRlZmluZWQnIHx8IG5nRGV2TW9kZSA/IHtcbiAgICBwcm92aWRlOiBST1VURVJfSVNfUFJPVklERUQsXG4gICAgdXNlVmFsdWU6IHRydWVcbiAgfSA6IFtdLCB7XG4gICAgcHJvdmlkZTogQWN0aXZhdGVkUm91dGUsXG4gICAgdXNlRmFjdG9yeTogcm9vdFJvdXRlXG4gIH0sIHtcbiAgICBwcm92aWRlOiBBUFBfQk9PVFNUUkFQX0xJU1RFTkVSLFxuICAgIG11bHRpOiB0cnVlLFxuICAgIHVzZUZhY3Rvcnk6IGdldEJvb3RzdHJhcExpc3RlbmVyXG4gIH0sIGZlYXR1cmVzLm1hcChmZWF0dXJlID0+IGZlYXR1cmUuybVwcm92aWRlcnMpXSk7XG59XG5mdW5jdGlvbiByb290Um91dGUoKSB7XG4gIHJldHVybiBpbmplY3QoUm91dGVyKS5yb3V0ZXJTdGF0ZS5yb290O1xufVxuZnVuY3Rpb24gcm91dGVyRmVhdHVyZShraW5kLCBwcm92aWRlcnMpIHtcbiAgcmV0dXJuIHtcbiAgICDJtWtpbmQ6IGtpbmQsXG4gICAgybVwcm92aWRlcnM6IHByb3ZpZGVyc1xuICB9O1xufVxuY29uc3QgUk9VVEVSX0lTX1BST1ZJREVEID0gLyojX19QVVJFX18qL25ldyBJbmplY3Rpb25Ub2tlbih0eXBlb2YgbmdEZXZNb2RlICE9PSAndW5kZWZpbmVkJyAmJiBuZ0Rldk1vZGUgPyAnUm91dGVyIGlzIHByb3ZpZGVkJyA6ICcnLCB7XG4gIGZhY3Rvcnk6ICgpID0+IGZhbHNlXG59KTtcbmNvbnN0IHJvdXRlcklzUHJvdmlkZWREZXZNb2RlQ2hlY2sgPSB7XG4gIHByb3ZpZGU6IEVOVklST05NRU5UX0lOSVRJQUxJWkVSLFxuICBtdWx0aTogdHJ1ZSxcbiAgdXNlRmFjdG9yeSgpIHtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgaWYgKCFpbmplY3QoUk9VVEVSX0lTX1BST1ZJREVEKSkge1xuICAgICAgICBjb25zb2xlLndhcm4oJ2Bwcm92aWRlUm91dGVzYCB3YXMgY2FsbGVkIHdpdGhvdXQgYHByb3ZpZGVSb3V0ZXJgIG9yIGBSb3V0ZXJNb2R1bGUuZm9yUm9vdGAuICcgKyAnVGhpcyBpcyBsaWtlbHkgYSBtaXN0YWtlLicpO1xuICAgICAgfVxuICAgIH07XG4gIH1cbn07XG5mdW5jdGlvbiBwcm92aWRlUm91dGVzKHJvdXRlcykge1xuICByZXR1cm4gW3tcbiAgICBwcm92aWRlOiBST1VURVMsXG4gICAgbXVsdGk6IHRydWUsXG4gICAgdXNlVmFsdWU6IHJvdXRlc1xuICB9LCB0eXBlb2YgbmdEZXZNb2RlID09PSAndW5kZWZpbmVkJyB8fCBuZ0Rldk1vZGUgPyByb3V0ZXJJc1Byb3ZpZGVkRGV2TW9kZUNoZWNrIDogW11dO1xufVxuZnVuY3Rpb24gd2l0aEluTWVtb3J5U2Nyb2xsaW5nKG9wdGlvbnMgPSB7fSkge1xuICBjb25zdCBwcm92aWRlcnMgPSBbe1xuICAgIHByb3ZpZGU6IFJPVVRFUl9TQ1JPTExFUixcbiAgICB1c2VGYWN0b3J5OiAoKSA9PiBuZXcgUm91dGVyU2Nyb2xsZXIob3B0aW9ucylcbiAgfV07XG4gIHJldHVybiByb3V0ZXJGZWF0dXJlKDQsIHByb3ZpZGVycyk7XG59XG5mdW5jdGlvbiB3aXRoRXhwZXJpbWVudGFsUGxhdGZvcm1OYXZpZ2F0aW9uKCkge1xuICBjb25zdCBkZXZNb2RlTG9jYXRpb25DaGVjayA9IHR5cGVvZiBuZ0Rldk1vZGUgPT09ICd1bmRlZmluZWQnIHx8IG5nRGV2TW9kZSA/IFtwcm92aWRlRW52aXJvbm1lbnRJbml0aWFsaXplcigoKSA9PiB7XG4gICAgY29uc3QgbG9jYXRpb25JbnN0YW5jZSA9IGluamVjdChMb2NhdGlvbik7XG4gICAgaWYgKCEobG9jYXRpb25JbnN0YW5jZSBpbnN0YW5jZW9mIF9OYXZpZ2F0aW9uQWRhcHRlckZvckxvY2F0aW9uKSkge1xuICAgICAgY29uc3QgbG9jYXRpb25Db25zdHJ1Y3Rvck5hbWUgPSBsb2NhdGlvbkluc3RhbmNlLmNvbnN0cnVjdG9yLm5hbWU7XG4gICAgICBsZXQgbWVzc2FnZSA9IGAnd2l0aEV4cGVyaW1lbnRhbFBsYXRmb3JtTmF2aWdhdGlvbicgcHJvdmlkZXMgYSAnTG9jYXRpb24nIGltcGxlbWVudGF0aW9uIHRoYXQgZW5zdXJlcyBuYXZpZ2F0aW9uIEFQSXMgYXJlIGNvbnNpc3RlbnRseSB1c2VkLmAgKyBgIEFuIGluc3RhbmNlIG9mICR7bG9jYXRpb25Db25zdHJ1Y3Rvck5hbWV9IHdhcyBmb3VuZCBpbnN0ZWFkLmA7XG4gICAgICBpZiAobG9jYXRpb25Db25zdHJ1Y3Rvck5hbWUgPT09ICdTcHlMb2NhdGlvbicpIHtcbiAgICAgICAgbWVzc2FnZSArPSBgIE9uZSBvZiAnUm91dGVyVGVzdGluZ01vZHVsZScgb3IgJ3Byb3ZpZGVMb2NhdGlvbk1vY2tzJyB3YXMgbGlrZWx5IHVzZWQuICd3aXRoRXhwZXJpbWVudGFsUGxhdGZvcm1OYXZpZ2F0aW9uJyBkb2VzIG5vdCB3b3JrIHdpdGggdGhlc2UgYmVjYXVzZSB0aGV5IG92ZXJyaWRlIHRoZSBMb2NhdGlvbiBpbXBsZW1lbnRhdGlvbi5gO1xuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xuICAgIH1cbiAgfSldIDogW107XG4gIGNvbnN0IHByb3ZpZGVycyA9IFt7XG4gICAgcHJvdmlkZTogU3RhdGVNYW5hZ2VyLFxuICAgIHVzZUV4aXN0aW5nOiBOYXZpZ2F0aW9uU3RhdGVNYW5hZ2VyXG4gIH0sIHtcbiAgICBwcm92aWRlOiBMb2NhdGlvbixcbiAgICB1c2VDbGFzczogX05hdmlnYXRpb25BZGFwdGVyRm9yTG9jYXRpb25cbiAgfSwgZGV2TW9kZUxvY2F0aW9uQ2hlY2tdO1xuICByZXR1cm4gcm91dGVyRmVhdHVyZSgxMSwgcHJvdmlkZXJzKTtcbn1cbmZ1bmN0aW9uIGdldEJvb3RzdHJhcExpc3RlbmVyKCkge1xuICBjb25zdCBpbmplY3RvciA9IGluamVjdChJbmplY3Rvcik7XG4gIHJldHVybiBib290c3RyYXBwZWRDb21wb25lbnRSZWYgPT4ge1xuICAgIGNvbnN0IHJlZiA9IGluamVjdG9yLmdldChBcHBsaWNhdGlvblJlZik7XG4gICAgaWYgKGJvb3RzdHJhcHBlZENvbXBvbmVudFJlZiAhPT0gcmVmLmNvbXBvbmVudHNbMF0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgcm91dGVyID0gaW5qZWN0b3IuZ2V0KFJvdXRlcik7XG4gICAgY29uc3QgYm9vdHN0cmFwRG9uZSA9IGluamVjdG9yLmdldChCT09UU1RSQVBfRE9ORSk7XG4gICAgaWYgKGluamVjdG9yLmdldChJTklUSUFMX05BVklHQVRJT04pID09PSAxKSB7XG4gICAgICByb3V0ZXIuaW5pdGlhbE5hdmlnYXRpb24oKTtcbiAgICB9XG4gICAgaW5qZWN0b3IuZ2V0KFJPVVRFUl9QUkVMT0FERVIsIG51bGwsIHtcbiAgICAgIG9wdGlvbmFsOiB0cnVlXG4gICAgfSk/LnNldFVwUHJlbG9hZGluZygpO1xuICAgIGluamVjdG9yLmdldChST1VURVJfU0NST0xMRVIsIG51bGwsIHtcbiAgICAgIG9wdGlvbmFsOiB0cnVlXG4gICAgfSk/LmluaXQoKTtcbiAgICByb3V0ZXIucmVzZXRSb290Q29tcG9uZW50VHlwZShyZWYuY29tcG9uZW50VHlwZXNbMF0pO1xuICAgIGlmICghYm9vdHN0cmFwRG9uZS5jbG9zZWQpIHtcbiAgICAgIGJvb3RzdHJhcERvbmUubmV4dCgpO1xuICAgICAgYm9vdHN0cmFwRG9uZS5jb21wbGV0ZSgpO1xuICAgICAgYm9vdHN0cmFwRG9uZS51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfTtcbn1cbmNvbnN0IEJPT1RTVFJBUF9ET05FID0gLyojX19QVVJFX18qL25ldyBJbmplY3Rpb25Ub2tlbih0eXBlb2YgbmdEZXZNb2RlID09PSAndW5kZWZpbmVkJyB8fCBuZ0Rldk1vZGUgPyAnYm9vdHN0cmFwIGRvbmUgaW5kaWNhdG9yJyA6ICcnLCB7XG4gIGZhY3Rvcnk6ICgpID0+IHtcbiAgICByZXR1cm4gbmV3IFN1YmplY3QoKTtcbiAgfVxufSk7XG5jb25zdCBJTklUSUFMX05BVklHQVRJT04gPSAvKiNfX1BVUkVfXyovbmV3IEluamVjdGlvblRva2VuKHR5cGVvZiBuZ0Rldk1vZGUgPT09ICd1bmRlZmluZWQnIHx8IG5nRGV2TW9kZSA/ICdpbml0aWFsIG5hdmlnYXRpb24nIDogJycsIHtcbiAgZmFjdG9yeTogKCkgPT4gMVxufSk7XG5mdW5jdGlvbiB3aXRoRW5hYmxlZEJsb2NraW5nSW5pdGlhbE5hdmlnYXRpb24oKSB7XG4gIGNvbnN0IHByb3ZpZGVycyA9IFt7XG4gICAgcHJvdmlkZTogX0lTX0VOQUJMRURfQkxPQ0tJTkdfSU5JVElBTF9OQVZJR0FUSU9OLFxuICAgIHVzZVZhbHVlOiB0cnVlXG4gIH0sIHtcbiAgICBwcm92aWRlOiBJTklUSUFMX05BVklHQVRJT04sXG4gICAgdXNlVmFsdWU6IDBcbiAgfSwgcHJvdmlkZUFwcEluaXRpYWxpemVyKCgpID0+IHtcbiAgICBjb25zdCBpbmplY3RvciA9IGluamVjdChJbmplY3Rvcik7XG4gICAgY29uc3QgbG9jYXRpb25Jbml0aWFsaXplZCA9IGluamVjdG9yLmdldChMT0NBVElPTl9JTklUSUFMSVpFRCwgUHJvbWlzZS5yZXNvbHZlKCkpO1xuICAgIHJldHVybiBsb2NhdGlvbkluaXRpYWxpemVkLnRoZW4oKCkgPT4ge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICBjb25zdCByb3V0ZXIgPSBpbmplY3Rvci5nZXQoUm91dGVyKTtcbiAgICAgICAgY29uc3QgYm9vdHN0cmFwRG9uZSA9IGluamVjdG9yLmdldChCT09UU1RSQVBfRE9ORSk7XG4gICAgICAgIGFmdGVyTmV4dE5hdmlnYXRpb24ocm91dGVyLCAoKSA9PiB7XG4gICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGluamVjdG9yLmdldChOYXZpZ2F0aW9uVHJhbnNpdGlvbnMpLmFmdGVyUHJlYWN0aXZhdGlvbiA9ICgpID0+IHtcbiAgICAgICAgICByZXNvbHZlKHRydWUpO1xuICAgICAgICAgIHJldHVybiBib290c3RyYXBEb25lLmNsb3NlZCA/IG9mKHZvaWQgMCkgOiBib290c3RyYXBEb25lO1xuICAgICAgICB9O1xuICAgICAgICByb3V0ZXIuaW5pdGlhbE5hdmlnYXRpb24oKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KV07XG4gIHJldHVybiByb3V0ZXJGZWF0dXJlKDIsIHByb3ZpZGVycyk7XG59XG5mdW5jdGlvbiB3aXRoRGlzYWJsZWRJbml0aWFsTmF2aWdhdGlvbigpIHtcbiAgY29uc3QgcHJvdmlkZXJzID0gW3Byb3ZpZGVBcHBJbml0aWFsaXplcigoKSA9PiB7XG4gICAgaW5qZWN0KFJvdXRlcikuc2V0VXBMb2NhdGlvbkNoYW5nZUxpc3RlbmVyKCk7XG4gIH0pLCB7XG4gICAgcHJvdmlkZTogSU5JVElBTF9OQVZJR0FUSU9OLFxuICAgIHVzZVZhbHVlOiAyXG4gIH1dO1xuICByZXR1cm4gcm91dGVyRmVhdHVyZSgzLCBwcm92aWRlcnMpO1xufVxuZnVuY3Rpb24gd2l0aERlYnVnVHJhY2luZygpIHtcbiAgbGV0IHByb3ZpZGVycyA9IFtdO1xuICBpZiAodHlwZW9mIG5nRGV2TW9kZSA9PT0gJ3VuZGVmaW5lZCcgfHwgbmdEZXZNb2RlKSB7XG4gICAgcHJvdmlkZXJzID0gW3tcbiAgICAgIHByb3ZpZGU6IEVOVklST05NRU5UX0lOSVRJQUxJWkVSLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgICB1c2VGYWN0b3J5OiAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xuICAgICAgICByZXR1cm4gKCkgPT4gcm91dGVyLmV2ZW50cy5zdWJzY3JpYmUoZSA9PiB7XG4gICAgICAgICAgY29uc29sZS5ncm91cD8uKGBSb3V0ZXIgRXZlbnQ6ICR7ZS5jb25zdHJ1Y3Rvci5uYW1lfWApO1xuICAgICAgICAgIGNvbnNvbGUubG9nKHN0cmluZ2lmeUV2ZW50KGUpKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhlKTtcbiAgICAgICAgICBjb25zb2xlLmdyb3VwRW5kPy4oKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfV07XG4gIH0gZWxzZSB7XG4gICAgcHJvdmlkZXJzID0gW107XG4gIH1cbiAgcmV0dXJuIHJvdXRlckZlYXR1cmUoMSwgcHJvdmlkZXJzKTtcbn1cbmNvbnN0IFJPVVRFUl9QUkVMT0FERVIgPSAvKiNfX1BVUkVfXyovbmV3IEluamVjdGlvblRva2VuKHR5cGVvZiBuZ0Rldk1vZGUgPT09ICd1bmRlZmluZWQnIHx8IG5nRGV2TW9kZSA/ICdyb3V0ZXIgcHJlbG9hZGVyJyA6ICcnKTtcbmZ1bmN0aW9uIHdpdGhQcmVsb2FkaW5nKHByZWxvYWRpbmdTdHJhdGVneSkge1xuICBjb25zdCBwcm92aWRlcnMgPSBbe1xuICAgIHByb3ZpZGU6IFJPVVRFUl9QUkVMT0FERVIsXG4gICAgdXNlRXhpc3Rpbmc6IFJvdXRlclByZWxvYWRlclxuICB9LCB7XG4gICAgcHJvdmlkZTogUHJlbG9hZGluZ1N0cmF0ZWd5LFxuICAgIHVzZUV4aXN0aW5nOiBwcmVsb2FkaW5nU3RyYXRlZ3lcbiAgfV07XG4gIHJldHVybiByb3V0ZXJGZWF0dXJlKDAsIHByb3ZpZGVycyk7XG59XG5mdW5jdGlvbiB3aXRoUm91dGVyQ29uZmlnKG9wdGlvbnMpIHtcbiAgY29uc3QgcHJvdmlkZXJzID0gW3tcbiAgICBwcm92aWRlOiBST1VURVJfQ09ORklHVVJBVElPTixcbiAgICB1c2VWYWx1ZTogb3B0aW9uc1xuICB9XTtcbiAgcmV0dXJuIHJvdXRlckZlYXR1cmUoNSwgcHJvdmlkZXJzKTtcbn1cbmZ1bmN0aW9uIHdpdGhIYXNoTG9jYXRpb24oKSB7XG4gIGNvbnN0IHByb3ZpZGVycyA9IFt7XG4gICAgcHJvdmlkZTogTG9jYXRpb25TdHJhdGVneSxcbiAgICB1c2VDbGFzczogSGFzaExvY2F0aW9uU3RyYXRlZ3lcbiAgfV07XG4gIHJldHVybiByb3V0ZXJGZWF0dXJlKDYsIHByb3ZpZGVycyk7XG59XG5mdW5jdGlvbiB3aXRoTmF2aWdhdGlvbkVycm9ySGFuZGxlcihoYW5kbGVyKSB7XG4gIGNvbnN0IHByb3ZpZGVycyA9IFt7XG4gICAgcHJvdmlkZTogTkFWSUdBVElPTl9FUlJPUl9IQU5ETEVSLFxuICAgIHVzZVZhbHVlOiBoYW5kbGVyXG4gIH1dO1xuICByZXR1cm4gcm91dGVyRmVhdHVyZSg3LCBwcm92aWRlcnMpO1xufVxuZnVuY3Rpb24gd2l0aEV4cGVyaW1lbnRhbEF1dG9DbGVhbnVwSW5qZWN0b3JzKCkge1xuICByZXR1cm4gcm91dGVyRmVhdHVyZSgxMCwgW3tcbiAgICBwcm92aWRlOiBST1VURV9JTkpFQ1RPUl9DTEVBTlVQLFxuICAgIHVzZVZhbHVlOiByb3V0ZUluamVjdG9yQ2xlYW51cFxuICB9XSk7XG59XG5mdW5jdGlvbiB3aXRoQ29tcG9uZW50SW5wdXRCaW5kaW5nKCkge1xuICBjb25zdCBwcm92aWRlcnMgPSBbUm91dGVkQ29tcG9uZW50SW5wdXRCaW5kZXIsIHtcbiAgICBwcm92aWRlOiBJTlBVVF9CSU5ERVIsXG4gICAgdXNlRXhpc3Rpbmc6IFJvdXRlZENvbXBvbmVudElucHV0QmluZGVyXG4gIH1dO1xuICByZXR1cm4gcm91dGVyRmVhdHVyZSg4LCBwcm92aWRlcnMpO1xufVxuZnVuY3Rpb24gd2l0aFZpZXdUcmFuc2l0aW9ucyhvcHRpb25zKSB7XG4gIF9wZXJmb3JtYW5jZU1hcmtGZWF0dXJlKCdOZ1JvdXRlclZpZXdUcmFuc2l0aW9ucycpO1xuICBjb25zdCBwcm92aWRlcnMgPSBbe1xuICAgIHByb3ZpZGU6IENSRUFURV9WSUVXX1RSQU5TSVRJT04sXG4gICAgdXNlVmFsdWU6IGNyZWF0ZVZpZXdUcmFuc2l0aW9uXG4gIH0sIHtcbiAgICBwcm92aWRlOiBWSUVXX1RSQU5TSVRJT05fT1BUSU9OUyxcbiAgICB1c2VWYWx1ZToge1xuICAgICAgc2tpcE5leHRUcmFuc2l0aW9uOiAhIW9wdGlvbnM/LnNraXBJbml0aWFsVHJhbnNpdGlvbixcbiAgICAgIC4uLm9wdGlvbnNcbiAgICB9XG4gIH1dO1xuICByZXR1cm4gcm91dGVyRmVhdHVyZSg5LCBwcm92aWRlcnMpO1xufVxuY29uc3QgUk9VVEVSX0RJUkVDVElWRVMgPSBbUm91dGVyT3V0bGV0LCBSb3V0ZXJMaW5rLCBSb3V0ZXJMaW5rQWN0aXZlLCBfRW1wdHlPdXRsZXRDb21wb25lbnRdO1xuY29uc3QgUk9VVEVSX0ZPUlJPT1RfR1VBUkQgPSAvKiNfX1BVUkVfXyovbmV3IEluamVjdGlvblRva2VuKHR5cGVvZiBuZ0Rldk1vZGUgPT09ICd1bmRlZmluZWQnIHx8IG5nRGV2TW9kZSA/ICdyb3V0ZXIgZHVwbGljYXRlIGZvclJvb3QgZ3VhcmQnIDogJycpO1xuY29uc3QgUk9VVEVSX1BST1ZJREVSUyA9IFtMb2NhdGlvbiwge1xuICBwcm92aWRlOiBVcmxTZXJpYWxpemVyLFxuICB1c2VDbGFzczogRGVmYXVsdFVybFNlcmlhbGl6ZXJcbn0sIFJvdXRlciwgQ2hpbGRyZW5PdXRsZXRDb250ZXh0cywge1xuICBwcm92aWRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgdXNlRmFjdG9yeTogcm9vdFJvdXRlXG59LCBSb3V0ZXJDb25maWdMb2FkZXIsIHR5cGVvZiBuZ0Rldk1vZGUgPT09ICd1bmRlZmluZWQnIHx8IG5nRGV2TW9kZSA/IHtcbiAgcHJvdmlkZTogUk9VVEVSX0lTX1BST1ZJREVELFxuICB1c2VWYWx1ZTogdHJ1ZVxufSA6IFtdXTtcbmxldCBSb3V0ZXJNb2R1bGUgPSAvKiNfX1BVUkVfXyovKCgpID0+IHtcbiAgY2xhc3MgUm91dGVyTW9kdWxlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgIGlmICh0eXBlb2YgbmdEZXZNb2RlID09PSAndW5kZWZpbmVkJyB8fCBuZ0Rldk1vZGUpIHtcbiAgICAgICAgaW5qZWN0KFJPVVRFUl9GT1JST09UX0dVQVJELCB7XG4gICAgICAgICAgb3B0aW9uYWw6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBmb3JSb290KHJvdXRlcywgY29uZmlnKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBuZ01vZHVsZTogUm91dGVyTW9kdWxlLFxuICAgICAgICBwcm92aWRlcnM6IFtST1VURVJfUFJPVklERVJTLCB0eXBlb2YgbmdEZXZNb2RlID09PSAndW5kZWZpbmVkJyB8fCBuZ0Rldk1vZGUgPyBjb25maWc/LmVuYWJsZVRyYWNpbmcgPyB3aXRoRGVidWdUcmFjaW5nKCkuybVwcm92aWRlcnMgOiBbXSA6IFtdLCB7XG4gICAgICAgICAgcHJvdmlkZTogUk9VVEVTLFxuICAgICAgICAgIG11bHRpOiB0cnVlLFxuICAgICAgICAgIHVzZVZhbHVlOiByb3V0ZXNcbiAgICAgICAgfSwgdHlwZW9mIG5nRGV2TW9kZSA9PT0gJ3VuZGVmaW5lZCcgfHwgbmdEZXZNb2RlID8ge1xuICAgICAgICAgIHByb3ZpZGU6IFJPVVRFUl9GT1JST09UX0dVQVJELFxuICAgICAgICAgIHVzZUZhY3Rvcnk6IHByb3ZpZGVGb3JSb290R3VhcmRcbiAgICAgICAgfSA6IFtdLCBjb25maWc/LmVycm9ySGFuZGxlciA/IHtcbiAgICAgICAgICBwcm92aWRlOiBOQVZJR0FUSU9OX0VSUk9SX0hBTkRMRVIsXG4gICAgICAgICAgdXNlVmFsdWU6IGNvbmZpZy5lcnJvckhhbmRsZXJcbiAgICAgICAgfSA6IFtdLCB7XG4gICAgICAgICAgcHJvdmlkZTogUk9VVEVSX0NPTkZJR1VSQVRJT04sXG4gICAgICAgICAgdXNlVmFsdWU6IGNvbmZpZyA/IGNvbmZpZyA6IHt9XG4gICAgICAgIH0sIGNvbmZpZz8udXNlSGFzaCA/IHByb3ZpZGVIYXNoTG9jYXRpb25TdHJhdGVneSgpIDogcHJvdmlkZVBhdGhMb2NhdGlvblN0cmF0ZWd5KCksIHByb3ZpZGVSb3V0ZXJTY3JvbGxlcigpLCBjb25maWc/LnByZWxvYWRpbmdTdHJhdGVneSA/IHdpdGhQcmVsb2FkaW5nKGNvbmZpZy5wcmVsb2FkaW5nU3RyYXRlZ3kpLsm1cHJvdmlkZXJzIDogW10sIGNvbmZpZz8uaW5pdGlhbE5hdmlnYXRpb24gPyBwcm92aWRlSW5pdGlhbE5hdmlnYXRpb24oY29uZmlnKSA6IFtdLCBjb25maWc/LmJpbmRUb0NvbXBvbmVudElucHV0cyA/IHdpdGhDb21wb25lbnRJbnB1dEJpbmRpbmcoKS7JtXByb3ZpZGVycyA6IFtdLCBjb25maWc/LmVuYWJsZVZpZXdUcmFuc2l0aW9ucyA/IHdpdGhWaWV3VHJhbnNpdGlvbnMoKS7JtXByb3ZpZGVycyA6IFtdLCBwcm92aWRlUm91dGVySW5pdGlhbGl6ZXIoKV1cbiAgICAgIH07XG4gICAgfVxuICAgIHN0YXRpYyBmb3JDaGlsZChyb3V0ZXMpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5nTW9kdWxlOiBSb3V0ZXJNb2R1bGUsXG4gICAgICAgIHByb3ZpZGVyczogW3tcbiAgICAgICAgICBwcm92aWRlOiBST1VURVMsXG4gICAgICAgICAgbXVsdGk6IHRydWUsXG4gICAgICAgICAgdXNlVmFsdWU6IHJvdXRlc1xuICAgICAgICB9XVxuICAgICAgfTtcbiAgICB9XG4gICAgc3RhdGljIMm1ZmFjID0gZnVuY3Rpb24gUm91dGVyTW9kdWxlX0ZhY3RvcnkoX19uZ0ZhY3RvcnlUeXBlX18pIHtcbiAgICAgIHJldHVybiBuZXcgKF9fbmdGYWN0b3J5VHlwZV9fIHx8IFJvdXRlck1vZHVsZSkoKTtcbiAgICB9O1xuICAgIHN0YXRpYyDJtW1vZCA9IC8qIEBfX1BVUkVfXyAqL2kwLsm1ybVkZWZpbmVOZ01vZHVsZSh7XG4gICAgICB0eXBlOiBSb3V0ZXJNb2R1bGVcbiAgICB9KTtcbiAgICBzdGF0aWMgybVpbmogPSAvKiBAX19QVVJFX18gKi9pMC7Jtcm1ZGVmaW5lSW5qZWN0b3Ioe30pO1xuICB9XG4gIHJldHVybiBSb3V0ZXJNb2R1bGU7XG59KSgpO1xuLyojX19QVVJFX18qLygoKSA9PiB7XG4gICh0eXBlb2YgbmdEZXZNb2RlID09PSBcInVuZGVmaW5lZFwiIHx8IG5nRGV2TW9kZSkgJiYgdm9pZCAwO1xufSkoKTtcbmZ1bmN0aW9uIHByb3ZpZGVSb3V0ZXJTY3JvbGxlcigpIHtcbiAgcmV0dXJuIHtcbiAgICBwcm92aWRlOiBST1VURVJfU0NST0xMRVIsXG4gICAgdXNlRmFjdG9yeTogKCkgPT4ge1xuICAgICAgY29uc3Qgdmlld3BvcnRTY3JvbGxlciA9IGluamVjdChWaWV3cG9ydFNjcm9sbGVyKTtcbiAgICAgIGNvbnN0IGNvbmZpZyA9IGluamVjdChST1VURVJfQ09ORklHVVJBVElPTik7XG4gICAgICBpZiAoY29uZmlnLnNjcm9sbE9mZnNldCkge1xuICAgICAgICB2aWV3cG9ydFNjcm9sbGVyLnNldE9mZnNldChjb25maWcuc2Nyb2xsT2Zmc2V0KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXcgUm91dGVyU2Nyb2xsZXIoY29uZmlnKTtcbiAgICB9XG4gIH07XG59XG5mdW5jdGlvbiBwcm92aWRlSGFzaExvY2F0aW9uU3RyYXRlZ3koKSB7XG4gIHJldHVybiB7XG4gICAgcHJvdmlkZTogTG9jYXRpb25TdHJhdGVneSxcbiAgICB1c2VDbGFzczogSGFzaExvY2F0aW9uU3RyYXRlZ3lcbiAgfTtcbn1cbmZ1bmN0aW9uIHByb3ZpZGVQYXRoTG9jYXRpb25TdHJhdGVneSgpIHtcbiAgcmV0dXJuIHtcbiAgICBwcm92aWRlOiBMb2NhdGlvblN0cmF0ZWd5LFxuICAgIHVzZUNsYXNzOiBQYXRoTG9jYXRpb25TdHJhdGVneVxuICB9O1xufVxuZnVuY3Rpb24gcHJvdmlkZUZvclJvb3RHdWFyZCgpIHtcbiAgY29uc3Qgcm91dGVyID0gaW5qZWN0KFJvdXRlciwge1xuICAgIG9wdGlvbmFsOiB0cnVlLFxuICAgIHNraXBTZWxmOiB0cnVlXG4gIH0pO1xuICBpZiAocm91dGVyKSB7XG4gICAgdGhyb3cgbmV3IF9SdW50aW1lRXJyb3IoNDAwNywgYFRoZSBSb3V0ZXIgd2FzIHByb3ZpZGVkIG1vcmUgdGhhbiBvbmNlLiBUaGlzIGNhbiBoYXBwZW4gaWYgJ2ZvclJvb3QnIGlzIHVzZWQgb3V0c2lkZSBvZiB0aGUgcm9vdCBpbmplY3Rvci5gICsgYCBMYXp5IGxvYWRlZCBtb2R1bGVzIHNob3VsZCB1c2UgUm91dGVyTW9kdWxlLmZvckNoaWxkKCkgaW5zdGVhZC5gKTtcbiAgfVxuICByZXR1cm4gJ2d1YXJkZWQnO1xufVxuZnVuY3Rpb24gcHJvdmlkZUluaXRpYWxOYXZpZ2F0aW9uKGNvbmZpZykge1xuICByZXR1cm4gW2NvbmZpZy5pbml0aWFsTmF2aWdhdGlvbiA9PT0gJ2Rpc2FibGVkJyA/IHdpdGhEaXNhYmxlZEluaXRpYWxOYXZpZ2F0aW9uKCkuybVwcm92aWRlcnMgOiBbXSwgY29uZmlnLmluaXRpYWxOYXZpZ2F0aW9uID09PSAnZW5hYmxlZEJsb2NraW5nJyA/IHdpdGhFbmFibGVkQmxvY2tpbmdJbml0aWFsTmF2aWdhdGlvbigpLsm1cHJvdmlkZXJzIDogW11dO1xufVxuY29uc3QgUk9VVEVSX0lOSVRJQUxJWkVSID0gLyojX19QVVJFX18qL25ldyBJbmplY3Rpb25Ub2tlbih0eXBlb2YgbmdEZXZNb2RlID09PSAndW5kZWZpbmVkJyB8fCBuZ0Rldk1vZGUgPyAnUm91dGVyIEluaXRpYWxpemVyJyA6ICcnKTtcbmZ1bmN0aW9uIHByb3ZpZGVSb3V0ZXJJbml0aWFsaXplcigpIHtcbiAgcmV0dXJuIFt7XG4gICAgcHJvdmlkZTogUk9VVEVSX0lOSVRJQUxJWkVSLFxuICAgIHVzZUZhY3Rvcnk6IGdldEJvb3RzdHJhcExpc3RlbmVyXG4gIH0sIHtcbiAgICBwcm92aWRlOiBBUFBfQk9PVFNUUkFQX0xJU1RFTkVSLFxuICAgIG11bHRpOiB0cnVlLFxuICAgIHVzZUV4aXN0aW5nOiBST1VURVJfSU5JVElBTElaRVJcbiAgfV07XG59XG5leHBvcnQgeyBOb1ByZWxvYWRpbmcsIFByZWxvYWRBbGxNb2R1bGVzLCBQcmVsb2FkaW5nU3RyYXRlZ3ksIFJPVVRFUl9JTklUSUFMSVpFUiwgUk9VVEVSX1BST1ZJREVSUywgUm91dGVyTGluaywgUm91dGVyTGlua0FjdGl2ZSwgUm91dGVyTW9kdWxlLCBSb3V0ZXJQcmVsb2FkZXIsIHByb3ZpZGVSb3V0ZXIsIHByb3ZpZGVSb3V0ZXMsIHdpdGhDb21wb25lbnRJbnB1dEJpbmRpbmcsIHdpdGhEZWJ1Z1RyYWNpbmcsIHdpdGhEaXNhYmxlZEluaXRpYWxOYXZpZ2F0aW9uLCB3aXRoRW5hYmxlZEJsb2NraW5nSW5pdGlhbE5hdmlnYXRpb24sIHdpdGhFeHBlcmltZW50YWxBdXRvQ2xlYW51cEluamVjdG9ycywgd2l0aEV4cGVyaW1lbnRhbFBsYXRmb3JtTmF2aWdhdGlvbiwgd2l0aEhhc2hMb2NhdGlvbiwgd2l0aEluTWVtb3J5U2Nyb2xsaW5nLCB3aXRoTmF2aWdhdGlvbkVycm9ySGFuZGxlciwgd2l0aFByZWxvYWRpbmcsIHdpdGhSb3V0ZXJDb25maWcsIHdpdGhWaWV3VHJhbnNpdGlvbnMgfTtcbiJdLCJtYXBwaW5ncyI6Ijt5bENBU0FBLGFBQUEsR0FBQUMsQ0FBQSxTQUFNLENBQUFDLEVBQUEsQ0FBTixLQUF5QixDQUN2QkMsSUFBQSxDQUNBQyxZQUFZQyxDQUFBLENBQU0sQ0FBQUwsYUFBQSxHQUFBTSxDQUFBLEtBQUFOLENBQUEsZ0JBQUFDLENBQUEsTUFDaEIsS0FBS0UsSUFBQSxDQUFPRSxDQUNk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 \ No newline at end of file diff --git a/frontend/dist-instrumented/chunk-FYGTVJAL.js.map b/frontend/dist-instrumented/chunk-FYGTVJAL.js.map new file mode 100644 index 00000000..8044c7b6 --- /dev/null +++ b/frontend/dist-instrumented/chunk-FYGTVJAL.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["node_modules/@angular/platform-browser/fesm2022/_dom_renderer-chunk.mjs","node_modules/@angular/platform-browser/fesm2022/_browser-chunk.mjs","node_modules/@angular/platform-browser/fesm2022/platform-browser.mjs","node_modules/@angular/router/fesm2022/_router-chunk.mjs","node_modules/@angular/router/fesm2022/_router_module-chunk.mjs"],"sourcesContent":["/**\n * @license Angular v21.2.4\n * (c) 2010-2026 Google LLC. https://angular.dev/\n * License: MIT\n */\n\nimport { DOCUMENT, ɵgetDOM as _getDOM } from '@angular/common';\nimport * as i0 from '@angular/core';\nimport { Injectable, Inject, InjectionToken, ɵRuntimeError as _RuntimeError, APP_ID, CSP_NONCE, PLATFORM_ID, Optional, ViewEncapsulation, ɵTracingService as _TracingService, RendererStyleFlags2, ɵallLeavingAnimations as _allLeavingAnimations } from '@angular/core';\nclass EventManagerPlugin {\n _doc;\n constructor(_doc) {\n this._doc = _doc;\n }\n manager;\n}\nlet DomEventsPlugin = /*#__PURE__*/(() => {\n class DomEventsPlugin extends EventManagerPlugin {\n constructor(doc) {\n super(doc);\n }\n supports(eventName) {\n return true;\n }\n addEventListener(element, eventName, handler, options) {\n element.addEventListener(eventName, handler, options);\n return () => this.removeEventListener(element, eventName, handler, options);\n }\n removeEventListener(target, eventName, callback, options) {\n return target.removeEventListener(eventName, callback, options);\n }\n static ɵfac = function DomEventsPlugin_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || DomEventsPlugin)(i0.ɵɵinject(DOCUMENT));\n };\n static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: DomEventsPlugin,\n factory: DomEventsPlugin.ɵfac\n });\n }\n return DomEventsPlugin;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst EVENT_MANAGER_PLUGINS = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'EventManagerPlugins' : '');\nlet EventManager = /*#__PURE__*/(() => {\n class EventManager {\n _zone;\n _plugins;\n _eventNameToPlugin = new Map();\n constructor(plugins, _zone) {\n this._zone = _zone;\n plugins.forEach(plugin => {\n plugin.manager = this;\n });\n const otherPlugins = plugins.filter(p => !(p instanceof DomEventsPlugin));\n this._plugins = otherPlugins.slice().reverse();\n const domEventPlugin = plugins.find(p => p instanceof DomEventsPlugin);\n if (domEventPlugin) {\n this._plugins.push(domEventPlugin);\n }\n }\n addEventListener(element, eventName, handler, options) {\n const plugin = this._findPluginFor(eventName);\n return plugin.addEventListener(element, eventName, handler, options);\n }\n getZone() {\n return this._zone;\n }\n _findPluginFor(eventName) {\n let plugin = this._eventNameToPlugin.get(eventName);\n if (plugin) {\n return plugin;\n }\n const plugins = this._plugins;\n plugin = plugins.find(plugin => plugin.supports(eventName));\n if (!plugin) {\n throw new _RuntimeError(5101, (typeof ngDevMode === 'undefined' || ngDevMode) && `No event manager plugin found for event ${eventName}`);\n }\n this._eventNameToPlugin.set(eventName, plugin);\n return plugin;\n }\n static ɵfac = function EventManager_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || EventManager)(i0.ɵɵinject(EVENT_MANAGER_PLUGINS), i0.ɵɵinject(i0.NgZone));\n };\n static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: EventManager,\n factory: EventManager.ɵfac\n });\n }\n return EventManager;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst APP_ID_ATTRIBUTE_NAME = 'ng-app-id';\nfunction removeElements(elements) {\n for (const element of elements) {\n element.remove();\n }\n}\nfunction createStyleElement(style, doc) {\n const styleElement = doc.createElement('style');\n styleElement.textContent = style;\n return styleElement;\n}\nfunction addServerStyles(doc, appId, inline, external) {\n const elements = doc.head?.querySelectorAll(`style[${APP_ID_ATTRIBUTE_NAME}=\"${appId}\"],link[${APP_ID_ATTRIBUTE_NAME}=\"${appId}\"]`);\n if (elements) {\n for (const styleElement of elements) {\n styleElement.removeAttribute(APP_ID_ATTRIBUTE_NAME);\n if (styleElement instanceof HTMLLinkElement) {\n external.set(styleElement.href.slice(styleElement.href.lastIndexOf('/') + 1), {\n usage: 0,\n elements: [styleElement]\n });\n } else if (styleElement.textContent) {\n inline.set(styleElement.textContent, {\n usage: 0,\n elements: [styleElement]\n });\n }\n }\n }\n}\nfunction createLinkElement(url, doc) {\n const linkElement = doc.createElement('link');\n linkElement.setAttribute('rel', 'stylesheet');\n linkElement.setAttribute('href', url);\n return linkElement;\n}\nlet SharedStylesHost = /*#__PURE__*/(() => {\n class SharedStylesHost {\n doc;\n appId;\n nonce;\n inline = new Map();\n external = new Map();\n hosts = new Set();\n constructor(doc, appId, nonce, platformId = {}) {\n this.doc = doc;\n this.appId = appId;\n this.nonce = nonce;\n addServerStyles(doc, appId, this.inline, this.external);\n this.hosts.add(doc.head);\n }\n addStyles(styles, urls) {\n for (const value of styles) {\n this.addUsage(value, this.inline, createStyleElement);\n }\n urls?.forEach(value => this.addUsage(value, this.external, createLinkElement));\n }\n removeStyles(styles, urls) {\n for (const value of styles) {\n this.removeUsage(value, this.inline);\n }\n urls?.forEach(value => this.removeUsage(value, this.external));\n }\n addUsage(value, usages, creator) {\n const record = usages.get(value);\n if (record) {\n if ((typeof ngDevMode === 'undefined' || ngDevMode) && record.usage === 0) {\n record.elements.forEach(element => element.setAttribute('ng-style-reused', ''));\n }\n record.usage++;\n } else {\n usages.set(value, {\n usage: 1,\n elements: [...this.hosts].map(host => this.addElement(host, creator(value, this.doc)))\n });\n }\n }\n removeUsage(value, usages) {\n const record = usages.get(value);\n if (record) {\n record.usage--;\n if (record.usage <= 0) {\n removeElements(record.elements);\n usages.delete(value);\n }\n }\n }\n ngOnDestroy() {\n for (const [, {\n elements\n }] of [...this.inline, ...this.external]) {\n removeElements(elements);\n }\n this.hosts.clear();\n }\n addHost(hostNode) {\n this.hosts.add(hostNode);\n for (const [style, {\n elements\n }] of this.inline) {\n elements.push(this.addElement(hostNode, createStyleElement(style, this.doc)));\n }\n for (const [url, {\n elements\n }] of this.external) {\n elements.push(this.addElement(hostNode, createLinkElement(url, this.doc)));\n }\n }\n removeHost(hostNode) {\n this.hosts.delete(hostNode);\n }\n addElement(host, element) {\n if (this.nonce) {\n element.setAttribute('nonce', this.nonce);\n }\n if (typeof ngServerMode !== 'undefined' && ngServerMode) {\n element.setAttribute(APP_ID_ATTRIBUTE_NAME, this.appId);\n }\n return host.appendChild(element);\n }\n static ɵfac = function SharedStylesHost_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || SharedStylesHost)(i0.ɵɵinject(DOCUMENT), i0.ɵɵinject(APP_ID), i0.ɵɵinject(CSP_NONCE, 8), i0.ɵɵinject(PLATFORM_ID));\n };\n static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: SharedStylesHost,\n factory: SharedStylesHost.ɵfac\n });\n }\n return SharedStylesHost;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst NAMESPACE_URIS = {\n 'svg': 'http://www.w3.org/2000/svg',\n 'xhtml': 'http://www.w3.org/1999/xhtml',\n 'xlink': 'http://www.w3.org/1999/xlink',\n 'xml': 'http://www.w3.org/XML/1998/namespace',\n 'xmlns': 'http://www.w3.org/2000/xmlns/',\n 'math': 'http://www.w3.org/1998/Math/MathML'\n};\nconst COMPONENT_REGEX = /%COMP%/g;\nconst SOURCEMAP_URL_REGEXP = /\\/\\*#\\s*sourceMappingURL=(.+?)\\s*\\*\\//;\nconst PROTOCOL_REGEXP = /^https?:/;\nconst COMPONENT_VARIABLE = '%COMP%';\nconst HOST_ATTR = `_nghost-${COMPONENT_VARIABLE}`;\nconst CONTENT_ATTR = `_ngcontent-${COMPONENT_VARIABLE}`;\nconst REMOVE_STYLES_ON_COMPONENT_DESTROY_DEFAULT = true;\nconst REMOVE_STYLES_ON_COMPONENT_DESTROY = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'RemoveStylesOnCompDestroy' : '', {\n factory: () => REMOVE_STYLES_ON_COMPONENT_DESTROY_DEFAULT\n});\nfunction shimContentAttribute(componentShortId) {\n return CONTENT_ATTR.replace(COMPONENT_REGEX, componentShortId);\n}\nfunction shimHostAttribute(componentShortId) {\n return HOST_ATTR.replace(COMPONENT_REGEX, componentShortId);\n}\nfunction shimStylesContent(compId, styles) {\n return styles.map(s => s.replace(COMPONENT_REGEX, compId));\n}\nfunction addBaseHrefToCssSourceMap(baseHref, styles) {\n if (!baseHref) {\n return styles;\n }\n const absoluteBaseHrefUrl = new URL(baseHref, 'http://localhost');\n return styles.map(cssContent => {\n if (!cssContent.includes('sourceMappingURL=')) {\n return cssContent;\n }\n return cssContent.replace(SOURCEMAP_URL_REGEXP, (_, sourceMapUrl) => {\n if (sourceMapUrl[0] === '/' || sourceMapUrl.startsWith('data:') || PROTOCOL_REGEXP.test(sourceMapUrl)) {\n return `/*# sourceMappingURL=${sourceMapUrl} */`;\n }\n const {\n pathname: resolvedSourceMapUrl\n } = new URL(sourceMapUrl, absoluteBaseHrefUrl);\n return `/*# sourceMappingURL=${resolvedSourceMapUrl} */`;\n });\n });\n}\nlet DomRendererFactory2 = /*#__PURE__*/(() => {\n class DomRendererFactory2 {\n eventManager;\n sharedStylesHost;\n appId;\n removeStylesOnCompDestroy;\n doc;\n ngZone;\n nonce;\n tracingService;\n rendererByCompId = new Map();\n defaultRenderer;\n constructor(eventManager, sharedStylesHost, appId, removeStylesOnCompDestroy, doc, ngZone, nonce = null, tracingService = null) {\n this.eventManager = eventManager;\n this.sharedStylesHost = sharedStylesHost;\n this.appId = appId;\n this.removeStylesOnCompDestroy = removeStylesOnCompDestroy;\n this.doc = doc;\n this.ngZone = ngZone;\n this.nonce = nonce;\n this.tracingService = tracingService;\n this.defaultRenderer = new DefaultDomRenderer2(eventManager, doc, ngZone, this.tracingService);\n }\n createRenderer(element, type) {\n if (!element || !type) {\n return this.defaultRenderer;\n }\n if (typeof ngServerMode !== 'undefined' && ngServerMode && (type.encapsulation === ViewEncapsulation.ShadowDom || type.encapsulation === ViewEncapsulation.ExperimentalIsolatedShadowDom)) {\n type = {\n ...type,\n encapsulation: ViewEncapsulation.Emulated\n };\n }\n const renderer = this.getOrCreateRenderer(element, type);\n if (renderer instanceof EmulatedEncapsulationDomRenderer2) {\n renderer.applyToHost(element);\n } else if (renderer instanceof NoneEncapsulationDomRenderer) {\n renderer.applyStyles();\n }\n return renderer;\n }\n getOrCreateRenderer(element, type) {\n const rendererByCompId = this.rendererByCompId;\n let renderer = rendererByCompId.get(type.id);\n if (!renderer) {\n const doc = this.doc;\n const ngZone = this.ngZone;\n const eventManager = this.eventManager;\n const sharedStylesHost = this.sharedStylesHost;\n const removeStylesOnCompDestroy = this.removeStylesOnCompDestroy;\n const tracingService = this.tracingService;\n switch (type.encapsulation) {\n case ViewEncapsulation.Emulated:\n renderer = new EmulatedEncapsulationDomRenderer2(eventManager, sharedStylesHost, type, this.appId, removeStylesOnCompDestroy, doc, ngZone, tracingService);\n break;\n case ViewEncapsulation.ShadowDom:\n return new ShadowDomRenderer(eventManager, element, type, doc, ngZone, this.nonce, tracingService, sharedStylesHost);\n case ViewEncapsulation.ExperimentalIsolatedShadowDom:\n return new ShadowDomRenderer(eventManager, element, type, doc, ngZone, this.nonce, tracingService);\n default:\n renderer = new NoneEncapsulationDomRenderer(eventManager, sharedStylesHost, type, removeStylesOnCompDestroy, doc, ngZone, tracingService);\n break;\n }\n rendererByCompId.set(type.id, renderer);\n }\n return renderer;\n }\n ngOnDestroy() {\n this.rendererByCompId.clear();\n }\n componentReplaced(componentId) {\n this.rendererByCompId.delete(componentId);\n }\n static ɵfac = function DomRendererFactory2_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || DomRendererFactory2)(i0.ɵɵinject(EventManager), i0.ɵɵinject(SharedStylesHost), i0.ɵɵinject(APP_ID), i0.ɵɵinject(REMOVE_STYLES_ON_COMPONENT_DESTROY), i0.ɵɵinject(DOCUMENT), i0.ɵɵinject(i0.NgZone), i0.ɵɵinject(CSP_NONCE), i0.ɵɵinject(_TracingService, 8));\n };\n static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: DomRendererFactory2,\n factory: DomRendererFactory2.ɵfac\n });\n }\n return DomRendererFactory2;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nclass DefaultDomRenderer2 {\n eventManager;\n doc;\n ngZone;\n tracingService;\n data = /*#__PURE__*/Object.create(null);\n throwOnSyntheticProps = true;\n constructor(eventManager, doc, ngZone, tracingService) {\n this.eventManager = eventManager;\n this.doc = doc;\n this.ngZone = ngZone;\n this.tracingService = tracingService;\n }\n destroy() {}\n destroyNode = null;\n createElement(name, namespace) {\n if (namespace) {\n return this.doc.createElementNS(NAMESPACE_URIS[namespace] || namespace, name);\n }\n return this.doc.createElement(name);\n }\n createComment(value) {\n return this.doc.createComment(value);\n }\n createText(value) {\n return this.doc.createTextNode(value);\n }\n appendChild(parent, newChild) {\n const targetParent = isTemplateNode(parent) ? parent.content : parent;\n targetParent.appendChild(newChild);\n }\n insertBefore(parent, newChild, refChild) {\n if (parent) {\n const targetParent = isTemplateNode(parent) ? parent.content : parent;\n targetParent.insertBefore(newChild, refChild);\n }\n }\n removeChild(_parent, oldChild) {\n oldChild.remove();\n }\n selectRootElement(selectorOrNode, preserveContent) {\n let el = typeof selectorOrNode === 'string' ? this.doc.querySelector(selectorOrNode) : selectorOrNode;\n if (!el) {\n throw new _RuntimeError(-5104, (typeof ngDevMode === 'undefined' || ngDevMode) && `The selector \"${selectorOrNode}\" did not match any elements`);\n }\n if (!preserveContent) {\n el.textContent = '';\n }\n return el;\n }\n parentNode(node) {\n return node.parentNode;\n }\n nextSibling(node) {\n return node.nextSibling;\n }\n setAttribute(el, name, value, namespace) {\n if (namespace) {\n name = namespace + ':' + name;\n const namespaceUri = NAMESPACE_URIS[namespace];\n if (namespaceUri) {\n el.setAttributeNS(namespaceUri, name, value);\n } else {\n el.setAttribute(name, value);\n }\n } else {\n el.setAttribute(name, value);\n }\n }\n removeAttribute(el, name, namespace) {\n if (namespace) {\n const namespaceUri = NAMESPACE_URIS[namespace];\n if (namespaceUri) {\n el.removeAttributeNS(namespaceUri, name);\n } else {\n el.removeAttribute(`${namespace}:${name}`);\n }\n } else {\n el.removeAttribute(name);\n }\n }\n addClass(el, name) {\n el.classList.add(name);\n }\n removeClass(el, name) {\n el.classList.remove(name);\n }\n setStyle(el, style, value, flags) {\n if (flags & (RendererStyleFlags2.DashCase | RendererStyleFlags2.Important)) {\n el.style.setProperty(style, value, flags & RendererStyleFlags2.Important ? 'important' : '');\n } else {\n el.style[style] = value;\n }\n }\n removeStyle(el, style, flags) {\n if (flags & RendererStyleFlags2.DashCase) {\n el.style.removeProperty(style);\n } else {\n el.style[style] = '';\n }\n }\n setProperty(el, name, value) {\n if (el == null) {\n return;\n }\n (typeof ngDevMode === 'undefined' || ngDevMode) && this.throwOnSyntheticProps && checkNoSyntheticProp(name, 'property');\n el[name] = value;\n }\n setValue(node, value) {\n node.nodeValue = value;\n }\n listen(target, event, callback, options) {\n (typeof ngDevMode === 'undefined' || ngDevMode) && this.throwOnSyntheticProps && checkNoSyntheticProp(event, 'listener');\n if (typeof target === 'string') {\n target = _getDOM().getGlobalEventTarget(this.doc, target);\n if (!target) {\n throw new _RuntimeError(5102, (typeof ngDevMode === 'undefined' || ngDevMode) && `Unsupported event target ${target} for event ${event}`);\n }\n }\n let wrappedCallback = this.decoratePreventDefault(callback);\n if (this.tracingService?.wrapEventListener) {\n wrappedCallback = this.tracingService.wrapEventListener(target, event, wrappedCallback);\n }\n return this.eventManager.addEventListener(target, event, wrappedCallback, options);\n }\n decoratePreventDefault(eventHandler) {\n return event => {\n if (event === '__ngUnwrap__') {\n return eventHandler;\n }\n const allowDefaultBehavior = typeof ngServerMode !== 'undefined' && ngServerMode ? this.ngZone.runGuarded(() => eventHandler(event)) : eventHandler(event);\n if (allowDefaultBehavior === false) {\n event.preventDefault();\n }\n return undefined;\n };\n }\n}\nconst AT_CHARCODE = /*#__PURE__*/(() => '@'.charCodeAt(0))();\nfunction checkNoSyntheticProp(name, nameKind) {\n if (name.charCodeAt(0) === AT_CHARCODE) {\n throw new _RuntimeError(5105, `Unexpected synthetic ${nameKind} ${name} found. Please make sure that:\n - Make sure \\`provideAnimationsAsync()\\`, \\`provideAnimations()\\` or \\`provideNoopAnimations()\\` call was added to a list of providers used to bootstrap an application.\n - There is a corresponding animation configuration named \\`${name}\\` defined in the \\`animations\\` field of the \\`@Component\\` decorator (see https://angular.dev/api/core/Component#animations).`);\n }\n}\nfunction isTemplateNode(node) {\n return node.tagName === 'TEMPLATE' && node.content !== undefined;\n}\nclass ShadowDomRenderer extends DefaultDomRenderer2 {\n hostEl;\n sharedStylesHost;\n shadowRoot;\n constructor(eventManager, hostEl, component, doc, ngZone, nonce, tracingService, sharedStylesHost) {\n super(eventManager, doc, ngZone, tracingService);\n this.hostEl = hostEl;\n this.sharedStylesHost = sharedStylesHost;\n this.shadowRoot = hostEl.attachShadow({\n mode: 'open'\n });\n if (this.sharedStylesHost) {\n this.sharedStylesHost.addHost(this.shadowRoot);\n }\n let styles = component.styles;\n if (ngDevMode) {\n const baseHref = _getDOM().getBaseHref(doc) ?? '';\n styles = addBaseHrefToCssSourceMap(baseHref, styles);\n }\n styles = shimStylesContent(component.id, styles);\n for (const style of styles) {\n const styleEl = document.createElement('style');\n if (nonce) {\n styleEl.setAttribute('nonce', nonce);\n }\n styleEl.textContent = style;\n this.shadowRoot.appendChild(styleEl);\n }\n const styleUrls = component.getExternalStyles?.();\n if (styleUrls) {\n for (const styleUrl of styleUrls) {\n const linkEl = createLinkElement(styleUrl, doc);\n if (nonce) {\n linkEl.setAttribute('nonce', nonce);\n }\n this.shadowRoot.appendChild(linkEl);\n }\n }\n }\n nodeOrShadowRoot(node) {\n return node === this.hostEl ? this.shadowRoot : node;\n }\n appendChild(parent, newChild) {\n return super.appendChild(this.nodeOrShadowRoot(parent), newChild);\n }\n insertBefore(parent, newChild, refChild) {\n return super.insertBefore(this.nodeOrShadowRoot(parent), newChild, refChild);\n }\n removeChild(_parent, oldChild) {\n return super.removeChild(null, oldChild);\n }\n parentNode(node) {\n return this.nodeOrShadowRoot(super.parentNode(this.nodeOrShadowRoot(node)));\n }\n destroy() {\n if (this.sharedStylesHost) {\n this.sharedStylesHost.removeHost(this.shadowRoot);\n }\n }\n}\nclass NoneEncapsulationDomRenderer extends DefaultDomRenderer2 {\n sharedStylesHost;\n removeStylesOnCompDestroy;\n styles;\n styleUrls;\n constructor(eventManager, sharedStylesHost, component, removeStylesOnCompDestroy, doc, ngZone, tracingService, compId) {\n super(eventManager, doc, ngZone, tracingService);\n this.sharedStylesHost = sharedStylesHost;\n this.removeStylesOnCompDestroy = removeStylesOnCompDestroy;\n let styles = component.styles;\n if (ngDevMode) {\n const baseHref = _getDOM().getBaseHref(doc) ?? '';\n styles = addBaseHrefToCssSourceMap(baseHref, styles);\n }\n this.styles = compId ? shimStylesContent(compId, styles) : styles;\n this.styleUrls = component.getExternalStyles?.(compId);\n }\n applyStyles() {\n this.sharedStylesHost.addStyles(this.styles, this.styleUrls);\n }\n destroy() {\n if (!this.removeStylesOnCompDestroy) {\n return;\n }\n if (_allLeavingAnimations.size === 0) {\n this.sharedStylesHost.removeStyles(this.styles, this.styleUrls);\n }\n }\n}\nclass EmulatedEncapsulationDomRenderer2 extends NoneEncapsulationDomRenderer {\n contentAttr;\n hostAttr;\n constructor(eventManager, sharedStylesHost, component, appId, removeStylesOnCompDestroy, doc, ngZone, tracingService) {\n const compId = appId + '-' + component.id;\n super(eventManager, sharedStylesHost, component, removeStylesOnCompDestroy, doc, ngZone, tracingService, compId);\n this.contentAttr = shimContentAttribute(compId);\n this.hostAttr = shimHostAttribute(compId);\n }\n applyToHost(element) {\n this.applyStyles();\n this.setAttribute(element, this.hostAttr, '');\n }\n createElement(parent, name) {\n const el = super.createElement(parent, name);\n super.setAttribute(el, this.contentAttr, '');\n return el;\n }\n}\nexport { DomEventsPlugin, DomRendererFactory2, EVENT_MANAGER_PLUGINS, EventManager, EventManagerPlugin, REMOVE_STYLES_ON_COMPONENT_DESTROY, SharedStylesHost };\n","/**\n * @license Angular v21.2.4\n * (c) 2010-2026 Google LLC. https://angular.dev/\n * License: MIT\n */\n\nimport { ɵDomAdapter as _DomAdapter, ɵsetRootDomAdapter as _setRootDomAdapter, ɵparseCookieValue as _parseCookieValue, ɵgetDOM as _getDOM, DOCUMENT, ɵPLATFORM_BROWSER_ID as _PLATFORM_BROWSER_ID, XhrFactory, CommonModule } from '@angular/common';\nimport * as i0 from '@angular/core';\nimport { ɵglobal as _global, ɵRuntimeError as _RuntimeError, Injectable, Inject, ɵinternalCreateApplication as _internalCreateApplication, ɵresolveComponentResources as _resolveComponentResources, PLATFORM_ID, PLATFORM_INITIALIZER, createPlatformFactory, platformCore, InjectionToken, ɵTESTABILITY_GETTER as _TESTABILITY_GETTER, ɵTESTABILITY as _TESTABILITY, Testability, ɵINJECTOR_SCOPE as _INJECTOR_SCOPE, ErrorHandler, RendererFactory2, inject, ApplicationModule, NgModule, ɵsetDocument as _setDocument } from '@angular/core';\nimport { EventManagerPlugin, EVENT_MANAGER_PLUGINS, DomEventsPlugin, DomRendererFactory2, SharedStylesHost, EventManager } from './_dom_renderer-chunk.mjs';\nclass BrowserDomAdapter extends _DomAdapter {\n supportsDOMEvents = true;\n static makeCurrent() {\n _setRootDomAdapter(new BrowserDomAdapter());\n }\n onAndCancel(el, evt, listener, options) {\n el.addEventListener(evt, listener, options);\n return () => {\n el.removeEventListener(evt, listener, options);\n };\n }\n dispatchEvent(el, evt) {\n el.dispatchEvent(evt);\n }\n remove(node) {\n node.remove();\n }\n createElement(tagName, doc) {\n doc = doc || this.getDefaultDocument();\n return doc.createElement(tagName);\n }\n createHtmlDocument() {\n return document.implementation.createHTMLDocument('fakeTitle');\n }\n getDefaultDocument() {\n return document;\n }\n isElementNode(node) {\n return node.nodeType === Node.ELEMENT_NODE;\n }\n isShadowRoot(node) {\n return node instanceof DocumentFragment;\n }\n getGlobalEventTarget(doc, target) {\n if (target === 'window') {\n return window;\n }\n if (target === 'document') {\n return doc;\n }\n if (target === 'body') {\n return doc.body;\n }\n return null;\n }\n getBaseHref(doc) {\n const href = getBaseElementHref();\n return href == null ? null : relativePath(href);\n }\n resetBaseElement() {\n baseElement = null;\n }\n getUserAgent() {\n return window.navigator.userAgent;\n }\n getCookie(name) {\n return _parseCookieValue(document.cookie, name);\n }\n}\nlet baseElement = null;\nfunction getBaseElementHref() {\n baseElement = baseElement || document.head.querySelector('base');\n return baseElement ? baseElement.getAttribute('href') : null;\n}\nfunction relativePath(url) {\n return new URL(url, document.baseURI).pathname;\n}\nclass BrowserGetTestability {\n addToWindow(registry) {\n _global['getAngularTestability'] = (elem, findInAncestors = true) => {\n const testability = registry.findTestabilityInTree(elem, findInAncestors);\n if (testability == null) {\n throw new _RuntimeError(5103, (typeof ngDevMode === 'undefined' || ngDevMode) && 'Could not find testability for element.');\n }\n return testability;\n };\n _global['getAllAngularTestabilities'] = () => registry.getAllTestabilities();\n _global['getAllAngularRootElements'] = () => registry.getAllRootElements();\n const whenAllStable = callback => {\n const testabilities = _global['getAllAngularTestabilities']();\n let count = testabilities.length;\n const decrement = function () {\n count--;\n if (count == 0) {\n callback();\n }\n };\n testabilities.forEach(testability => {\n testability.whenStable(decrement);\n });\n };\n if (!_global['frameworkStabilizers']) {\n _global['frameworkStabilizers'] = [];\n }\n _global['frameworkStabilizers'].push(whenAllStable);\n }\n findTestabilityInTree(registry, elem, findInAncestors) {\n if (elem == null) {\n return null;\n }\n const t = registry.getTestability(elem);\n if (t != null) {\n return t;\n } else if (!findInAncestors) {\n return null;\n }\n if (_getDOM().isShadowRoot(elem)) {\n return this.findTestabilityInTree(registry, elem.host, true);\n }\n return this.findTestabilityInTree(registry, elem.parentElement, true);\n }\n}\nlet BrowserXhr = /*#__PURE__*/(() => {\n class BrowserXhr {\n build() {\n return new XMLHttpRequest();\n }\n static ɵfac = function BrowserXhr_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || BrowserXhr)();\n };\n static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: BrowserXhr,\n factory: BrowserXhr.ɵfac\n });\n }\n return BrowserXhr;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst MODIFIER_KEYS = ['alt', 'control', 'meta', 'shift'];\nconst _keyMap = {\n '\\b': 'Backspace',\n '\\t': 'Tab',\n '\\x7F': 'Delete',\n '\\x1B': 'Escape',\n 'Del': 'Delete',\n 'Esc': 'Escape',\n 'Left': 'ArrowLeft',\n 'Right': 'ArrowRight',\n 'Up': 'ArrowUp',\n 'Down': 'ArrowDown',\n 'Menu': 'ContextMenu',\n 'Scroll': 'ScrollLock',\n 'Win': 'OS'\n};\nconst MODIFIER_KEY_GETTERS = {\n 'alt': event => event.altKey,\n 'control': event => event.ctrlKey,\n 'meta': event => event.metaKey,\n 'shift': event => event.shiftKey\n};\nlet KeyEventsPlugin = /*#__PURE__*/(() => {\n class KeyEventsPlugin extends EventManagerPlugin {\n constructor(doc) {\n super(doc);\n }\n supports(eventName) {\n return KeyEventsPlugin.parseEventName(eventName) != null;\n }\n addEventListener(element, eventName, handler, options) {\n const parsedEvent = KeyEventsPlugin.parseEventName(eventName);\n const outsideHandler = KeyEventsPlugin.eventCallback(parsedEvent['fullKey'], handler, this.manager.getZone());\n return this.manager.getZone().runOutsideAngular(() => {\n return _getDOM().onAndCancel(element, parsedEvent['domEventName'], outsideHandler, options);\n });\n }\n static parseEventName(eventName) {\n const parts = eventName.toLowerCase().split('.');\n const domEventName = parts.shift();\n if (parts.length === 0 || !(domEventName === 'keydown' || domEventName === 'keyup')) {\n return null;\n }\n const key = KeyEventsPlugin._normalizeKey(parts.pop());\n let fullKey = '';\n let codeIX = parts.indexOf('code');\n if (codeIX > -1) {\n parts.splice(codeIX, 1);\n fullKey = 'code.';\n }\n MODIFIER_KEYS.forEach(modifierName => {\n const index = parts.indexOf(modifierName);\n if (index > -1) {\n parts.splice(index, 1);\n fullKey += modifierName + '.';\n }\n });\n fullKey += key;\n if (parts.length != 0 || key.length === 0) {\n return null;\n }\n const result = {};\n result['domEventName'] = domEventName;\n result['fullKey'] = fullKey;\n return result;\n }\n static matchEventFullKeyCode(event, fullKeyCode) {\n let keycode = _keyMap[event.key] || event.key;\n let key = '';\n if (fullKeyCode.indexOf('code.') > -1) {\n keycode = event.code;\n key = 'code.';\n }\n if (keycode == null || !keycode) return false;\n keycode = keycode.toLowerCase();\n if (keycode === ' ') {\n keycode = 'space';\n } else if (keycode === '.') {\n keycode = 'dot';\n }\n MODIFIER_KEYS.forEach(modifierName => {\n if (modifierName !== keycode) {\n const modifierGetter = MODIFIER_KEY_GETTERS[modifierName];\n if (modifierGetter(event)) {\n key += modifierName + '.';\n }\n }\n });\n key += keycode;\n return key === fullKeyCode;\n }\n static eventCallback(fullKey, handler, zone) {\n return event => {\n if (KeyEventsPlugin.matchEventFullKeyCode(event, fullKey)) {\n zone.runGuarded(() => handler(event));\n }\n };\n }\n static _normalizeKey(keyName) {\n return keyName === 'esc' ? 'escape' : keyName;\n }\n static ɵfac = function KeyEventsPlugin_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || KeyEventsPlugin)(i0.ɵɵinject(DOCUMENT));\n };\n static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: KeyEventsPlugin,\n factory: KeyEventsPlugin.ɵfac\n });\n }\n return KeyEventsPlugin;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nasync function bootstrapApplication(rootComponent, options, context) {\n const config = {\n rootComponent,\n ...createProvidersConfig(options, context)\n };\n if ((typeof ngJitMode === 'undefined' || ngJitMode) && typeof fetch === 'function') {\n await resolveJitResources();\n }\n return _internalCreateApplication(config);\n}\nasync function createApplication(options, context) {\n if ((typeof ngJitMode === 'undefined' || ngJitMode) && typeof fetch === 'function') {\n await resolveJitResources();\n }\n return _internalCreateApplication(createProvidersConfig(options, context));\n}\nfunction createProvidersConfig(options, context) {\n return {\n platformRef: context?.platformRef,\n appProviders: [...BROWSER_MODULE_PROVIDERS, ...(options?.providers ?? [])],\n platformProviders: INTERNAL_BROWSER_PLATFORM_PROVIDERS\n };\n}\nasync function resolveJitResources() {\n try {\n return await _resolveComponentResources(fetch);\n } catch (error) {\n console.error(error);\n }\n}\nfunction provideProtractorTestingSupport() {\n return [...TESTABILITY_PROVIDERS];\n}\nfunction initDomAdapter() {\n BrowserDomAdapter.makeCurrent();\n}\nfunction errorHandler() {\n return new ErrorHandler();\n}\nfunction _document() {\n _setDocument(document);\n return document;\n}\nconst INTERNAL_BROWSER_PLATFORM_PROVIDERS = [{\n provide: PLATFORM_ID,\n useValue: _PLATFORM_BROWSER_ID\n}, {\n provide: PLATFORM_INITIALIZER,\n useValue: initDomAdapter,\n multi: true\n}, {\n provide: DOCUMENT,\n useFactory: _document\n}];\nconst platformBrowser = /*#__PURE__*/createPlatformFactory(platformCore, 'browser', INTERNAL_BROWSER_PLATFORM_PROVIDERS);\nconst BROWSER_MODULE_PROVIDERS_MARKER = /*#__PURE__*/new InjectionToken(typeof ngDevMode === 'undefined' || ngDevMode ? 'BrowserModule Providers Marker' : '');\nconst TESTABILITY_PROVIDERS = [{\n provide: _TESTABILITY_GETTER,\n useClass: BrowserGetTestability\n}, {\n provide: _TESTABILITY,\n useClass: Testability\n}, {\n provide: Testability,\n useClass: Testability\n}];\nconst BROWSER_MODULE_PROVIDERS = [{\n provide: _INJECTOR_SCOPE,\n useValue: 'root'\n}, {\n provide: ErrorHandler,\n useFactory: errorHandler\n}, {\n provide: EVENT_MANAGER_PLUGINS,\n useClass: DomEventsPlugin,\n multi: true\n}, {\n provide: EVENT_MANAGER_PLUGINS,\n useClass: KeyEventsPlugin,\n multi: true\n}, DomRendererFactory2, SharedStylesHost, EventManager, {\n provide: RendererFactory2,\n useExisting: DomRendererFactory2\n}, {\n provide: XhrFactory,\n useClass: BrowserXhr\n}, typeof ngDevMode === 'undefined' || ngDevMode ? {\n provide: BROWSER_MODULE_PROVIDERS_MARKER,\n useValue: true\n} : []];\nlet BrowserModule = /*#__PURE__*/(() => {\n class BrowserModule {\n constructor() {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n const providersAlreadyPresent = inject(BROWSER_MODULE_PROVIDERS_MARKER, {\n optional: true,\n skipSelf: true\n });\n if (providersAlreadyPresent) {\n throw new _RuntimeError(5100, `Providers from the \\`BrowserModule\\` have already been loaded. If you need access ` + `to common directives such as NgIf and NgFor, import the \\`CommonModule\\` instead.`);\n }\n }\n }\n static ɵfac = function BrowserModule_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || BrowserModule)();\n };\n static ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: BrowserModule\n });\n static ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n providers: [...BROWSER_MODULE_PROVIDERS, ...TESTABILITY_PROVIDERS],\n imports: [CommonModule, ApplicationModule]\n });\n }\n return BrowserModule;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nexport { BrowserDomAdapter, BrowserGetTestability, BrowserModule, KeyEventsPlugin, bootstrapApplication, createApplication, platformBrowser, provideProtractorTestingSupport };\n","/**\n * @license Angular v21.2.4\n * (c) 2010-2026 Google LLC. https://angular.dev/\n * License: MIT\n */\n\nexport { BrowserModule, bootstrapApplication, createApplication, platformBrowser, provideProtractorTestingSupport, BrowserDomAdapter as ɵBrowserDomAdapter, BrowserGetTestability as ɵBrowserGetTestability, KeyEventsPlugin as ɵKeyEventsPlugin } from './_browser-chunk.mjs';\nimport { ɵgetDOM as _getDOM, DOCUMENT } from '@angular/common';\nexport { ɵgetDOM } from '@angular/common';\nimport * as i0 from '@angular/core';\nimport { Injectable, Inject, ɵglobal as _global, ApplicationRef, InjectionToken, ɵConsole as _Console, Optional, Injector, NgModule, forwardRef, ɵRuntimeError as _RuntimeError, ɵXSS_SECURITY_URL as _XSS_SECURITY_URL, SecurityContext, ɵallowSanitizationBypassAndThrow as _allowSanitizationBypassAndThrow, ɵunwrapSafeValue as _unwrapSafeValue, ɵ_sanitizeUrl as __sanitizeUrl, ɵ_sanitizeHtml as __sanitizeHtml, ɵbypassSanitizationTrustHtml as _bypassSanitizationTrustHtml, ɵbypassSanitizationTrustStyle as _bypassSanitizationTrustStyle, ɵbypassSanitizationTrustScript as _bypassSanitizationTrustScript, ɵbypassSanitizationTrustUrl as _bypassSanitizationTrustUrl, ɵbypassSanitizationTrustResourceUrl as _bypassSanitizationTrustResourceUrl, ɵwithI18nSupport as _withI18nSupport, ɵwithEventReplay as _withEventReplay, ɵwithIncrementalHydration as _withIncrementalHydration, makeEnvironmentProviders, provideStabilityDebugging, ɵwithDomHydration as _withDomHydration, ENVIRONMENT_INITIALIZER, inject, ɵIS_ENABLED_BLOCKING_INITIAL_NAVIGATION as _IS_ENABLED_BLOCKING_INITIAL_NAVIGATION, ɵformatRuntimeError as _formatRuntimeError, Version } from '@angular/core';\nimport { EventManagerPlugin, EVENT_MANAGER_PLUGINS } from './_dom_renderer-chunk.mjs';\nexport { EventManager, REMOVE_STYLES_ON_COMPONENT_DESTROY, DomEventsPlugin as ɵDomEventsPlugin, DomRendererFactory2 as ɵDomRendererFactory2, SharedStylesHost as ɵSharedStylesHost } from './_dom_renderer-chunk.mjs';\nimport { ɵwithHttpTransferCache as _withHttpTransferCache } from '@angular/common/http';\nlet Meta = /*#__PURE__*/(() => {\n class Meta {\n _doc;\n _dom;\n constructor(_doc) {\n this._doc = _doc;\n this._dom = _getDOM();\n }\n addTag(tag, forceCreation = false) {\n if (!tag) return null;\n return this._getOrCreateElement(tag, forceCreation);\n }\n addTags(tags, forceCreation = false) {\n if (!tags) return [];\n return tags.reduce((result, tag) => {\n if (tag) {\n result.push(this._getOrCreateElement(tag, forceCreation));\n }\n return result;\n }, []);\n }\n getTag(attrSelector) {\n if (!attrSelector) return null;\n return this._doc.querySelector(`meta[${attrSelector}]`) || null;\n }\n getTags(attrSelector) {\n if (!attrSelector) return [];\n const list = this._doc.querySelectorAll(`meta[${attrSelector}]`);\n return list ? [].slice.call(list) : [];\n }\n updateTag(tag, selector) {\n if (!tag) return null;\n selector = selector || this._parseSelector(tag);\n const meta = this.getTag(selector);\n if (meta) {\n return this._setMetaElementAttributes(tag, meta);\n }\n return this._getOrCreateElement(tag, true);\n }\n removeTag(attrSelector) {\n this.removeTagElement(this.getTag(attrSelector));\n }\n removeTagElement(meta) {\n if (meta) {\n this._dom.remove(meta);\n }\n }\n _getOrCreateElement(meta, forceCreation = false) {\n if (!forceCreation) {\n const selector = this._parseSelector(meta);\n const elem = this.getTags(selector).filter(elem => this._containsAttributes(meta, elem))[0];\n if (elem !== undefined) return elem;\n }\n const element = this._dom.createElement('meta');\n this._setMetaElementAttributes(meta, element);\n const head = this._doc.getElementsByTagName('head')[0];\n head.appendChild(element);\n return element;\n }\n _setMetaElementAttributes(tag, el) {\n Object.keys(tag).forEach(prop => el.setAttribute(this._getMetaKeyMap(prop), tag[prop]));\n return el;\n }\n _parseSelector(tag) {\n const attr = tag.name ? 'name' : 'property';\n return `${attr}=\"${tag[attr]}\"`;\n }\n _containsAttributes(tag, elem) {\n return Object.keys(tag).every(key => elem.getAttribute(this._getMetaKeyMap(key)) === tag[key]);\n }\n _getMetaKeyMap(prop) {\n return META_KEYS_MAP[prop] || prop;\n }\n static ɵfac = function Meta_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || Meta)(i0.ɵɵinject(DOCUMENT));\n };\n static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: Meta,\n factory: Meta.ɵfac,\n providedIn: 'root'\n });\n }\n return Meta;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst META_KEYS_MAP = {\n httpEquiv: 'http-equiv'\n};\nlet Title = /*#__PURE__*/(() => {\n class Title {\n _doc;\n constructor(_doc) {\n this._doc = _doc;\n }\n getTitle() {\n return this._doc.title;\n }\n setTitle(newTitle) {\n this._doc.title = newTitle || '';\n }\n static ɵfac = function Title_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || Title)(i0.ɵɵinject(DOCUMENT));\n };\n static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: Title,\n factory: Title.ɵfac,\n providedIn: 'root'\n });\n }\n return Title;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nfunction exportNgVar(name, value) {\n if (typeof COMPILED === 'undefined' || !COMPILED) {\n const ng = _global['ng'] = _global['ng'] || {};\n ng[name] = value;\n }\n}\nclass ChangeDetectionPerfRecord {\n msPerTick;\n numTicks;\n constructor(msPerTick, numTicks) {\n this.msPerTick = msPerTick;\n this.numTicks = numTicks;\n }\n}\nclass AngularProfiler {\n appRef;\n constructor(ref) {\n this.appRef = ref.injector.get(ApplicationRef);\n }\n timeChangeDetection(config) {\n const record = config && config['record'];\n const profileName = 'Change Detection';\n if (record && 'profile' in console && typeof console.profile === 'function') {\n console.profile(profileName);\n }\n const start = performance.now();\n let numTicks = 0;\n while (numTicks < 5 || performance.now() - start < 500) {\n this.appRef.tick();\n numTicks++;\n }\n const end = performance.now();\n if (record && 'profileEnd' in console && typeof console.profileEnd === 'function') {\n console.profileEnd(profileName);\n }\n const msPerTick = (end - start) / numTicks;\n console.log(`ran ${numTicks} change detection cycles`);\n console.log(`${msPerTick.toFixed(2)} ms per check`);\n return new ChangeDetectionPerfRecord(msPerTick, numTicks);\n }\n}\nconst PROFILER_GLOBAL_NAME = 'profiler';\nfunction enableDebugTools(ref) {\n exportNgVar(PROFILER_GLOBAL_NAME, new AngularProfiler(ref));\n return ref;\n}\nfunction disableDebugTools() {\n exportNgVar(PROFILER_GLOBAL_NAME, null);\n}\nclass By {\n static all() {\n return () => true;\n }\n static css(selector) {\n return debugElement => {\n return debugElement.nativeElement != null ? elementMatches(debugElement.nativeElement, selector) : false;\n };\n }\n static directive(type) {\n return debugNode => debugNode.providerTokens.indexOf(type) !== -1;\n }\n}\nfunction elementMatches(n, selector) {\n if (_getDOM().isElementNode(n)) {\n return n.matches && n.matches(selector) || n.msMatchesSelector && n.msMatchesSelector(selector) || n.webkitMatchesSelector && n.webkitMatchesSelector(selector);\n }\n return false;\n}\nconst EVENT_NAMES = {\n 'pan': true,\n 'panstart': true,\n 'panmove': true,\n 'panend': true,\n 'pancancel': true,\n 'panleft': true,\n 'panright': true,\n 'panup': true,\n 'pandown': true,\n 'pinch': true,\n 'pinchstart': true,\n 'pinchmove': true,\n 'pinchend': true,\n 'pinchcancel': true,\n 'pinchin': true,\n 'pinchout': true,\n 'press': true,\n 'pressup': true,\n 'rotate': true,\n 'rotatestart': true,\n 'rotatemove': true,\n 'rotateend': true,\n 'rotatecancel': true,\n 'swipe': true,\n 'swipeleft': true,\n 'swiperight': true,\n 'swipeup': true,\n 'swipedown': true,\n 'tap': true,\n 'doubletap': true\n};\nconst HAMMER_GESTURE_CONFIG = /*#__PURE__*/new InjectionToken(typeof ngDevMode === 'undefined' || ngDevMode ? 'HammerGestureConfig' : '');\nconst HAMMER_LOADER = /*#__PURE__*/new InjectionToken(typeof ngDevMode === 'undefined' || ngDevMode ? 'HammerLoader' : '');\nlet HammerGestureConfig = /*#__PURE__*/(() => {\n class HammerGestureConfig {\n events = [];\n overrides = {};\n options;\n buildHammer(element) {\n const mc = new Hammer(element, this.options);\n mc.get('pinch').set({\n enable: true\n });\n mc.get('rotate').set({\n enable: true\n });\n for (const eventName in this.overrides) {\n mc.get(eventName).set(this.overrides[eventName]);\n }\n return mc;\n }\n static ɵfac = function HammerGestureConfig_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || HammerGestureConfig)();\n };\n static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: HammerGestureConfig,\n factory: HammerGestureConfig.ɵfac\n });\n }\n return HammerGestureConfig;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet HammerGesturesPlugin = /*#__PURE__*/(() => {\n class HammerGesturesPlugin extends EventManagerPlugin {\n _config;\n _injector;\n loader;\n _loaderPromise = null;\n constructor(doc, _config, _injector, loader) {\n super(doc);\n this._config = _config;\n this._injector = _injector;\n this.loader = loader;\n }\n supports(eventName) {\n if (!EVENT_NAMES.hasOwnProperty(eventName.toLowerCase()) && !this.isCustomEvent(eventName)) {\n return false;\n }\n if (!window.Hammer && !this.loader) {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n const _console = this._injector.get(_Console);\n _console.warn(`The \"${eventName}\" event cannot be bound because Hammer.JS is not ` + `loaded and no custom loader has been specified.`);\n }\n return false;\n }\n return true;\n }\n addEventListener(element, eventName, handler) {\n const zone = this.manager.getZone();\n eventName = eventName.toLowerCase();\n if (!window.Hammer && this.loader) {\n this._loaderPromise = this._loaderPromise || zone.runOutsideAngular(() => this.loader());\n let cancelRegistration = false;\n let deregister = () => {\n cancelRegistration = true;\n };\n zone.runOutsideAngular(() => this._loaderPromise.then(() => {\n if (!window.Hammer) {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n const _console = this._injector.get(_Console);\n _console.warn(`The custom HAMMER_LOADER completed, but Hammer.JS is not present.`);\n }\n deregister = () => {};\n return;\n }\n if (!cancelRegistration) {\n deregister = this.addEventListener(element, eventName, handler);\n }\n }).catch(() => {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n const _console = this._injector.get(_Console);\n _console.warn(`The \"${eventName}\" event cannot be bound because the custom ` + `Hammer.JS loader failed.`);\n }\n deregister = () => {};\n }));\n return () => {\n deregister();\n };\n }\n return zone.runOutsideAngular(() => {\n const mc = this._config.buildHammer(element);\n const callback = function (eventObj) {\n zone.runGuarded(function () {\n handler(eventObj);\n });\n };\n mc.on(eventName, callback);\n return () => {\n mc.off(eventName, callback);\n if (typeof mc.destroy === 'function') {\n mc.destroy();\n }\n };\n });\n }\n isCustomEvent(eventName) {\n return this._config.events.indexOf(eventName) > -1;\n }\n static ɵfac = function HammerGesturesPlugin_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || HammerGesturesPlugin)(i0.ɵɵinject(DOCUMENT), i0.ɵɵinject(HAMMER_GESTURE_CONFIG), i0.ɵɵinject(i0.Injector), i0.ɵɵinject(HAMMER_LOADER, 8));\n };\n static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: HammerGesturesPlugin,\n factory: HammerGesturesPlugin.ɵfac\n });\n }\n return HammerGesturesPlugin;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet HammerModule = /*#__PURE__*/(() => {\n class HammerModule {\n static ɵfac = function HammerModule_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || HammerModule)();\n };\n static ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: HammerModule\n });\n static ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n providers: [{\n provide: EVENT_MANAGER_PLUGINS,\n useClass: HammerGesturesPlugin,\n multi: true,\n deps: [DOCUMENT, HAMMER_GESTURE_CONFIG, Injector, [new Optional(), HAMMER_LOADER]]\n }, {\n provide: HAMMER_GESTURE_CONFIG,\n useClass: HammerGestureConfig\n }]\n });\n }\n return HammerModule;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet DomSanitizer = /*#__PURE__*/(() => {\n class DomSanitizer {\n static ɵfac = function DomSanitizer_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || DomSanitizer)();\n };\n static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: DomSanitizer,\n factory: function DomSanitizer_Factory(__ngFactoryType__) {\n let __ngConditionalFactory__ = null;\n if (__ngFactoryType__) {\n __ngConditionalFactory__ = new (__ngFactoryType__ || DomSanitizer)();\n } else {\n __ngConditionalFactory__ = i0.ɵɵinject(DomSanitizerImpl);\n }\n return __ngConditionalFactory__;\n },\n providedIn: 'root'\n });\n }\n return DomSanitizer;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet DomSanitizerImpl = /*#__PURE__*/(() => {\n class DomSanitizerImpl extends DomSanitizer {\n _doc;\n constructor(_doc) {\n super();\n this._doc = _doc;\n }\n sanitize(ctx, value) {\n if (value == null) return null;\n switch (ctx) {\n case SecurityContext.NONE:\n return value;\n case SecurityContext.HTML:\n if (_allowSanitizationBypassAndThrow(value, \"HTML\")) {\n return _unwrapSafeValue(value);\n }\n return __sanitizeHtml(this._doc, String(value)).toString();\n case SecurityContext.STYLE:\n if (_allowSanitizationBypassAndThrow(value, \"Style\")) {\n return _unwrapSafeValue(value);\n }\n return value;\n case SecurityContext.SCRIPT:\n if (_allowSanitizationBypassAndThrow(value, \"Script\")) {\n return _unwrapSafeValue(value);\n }\n throw new _RuntimeError(5200, (typeof ngDevMode === 'undefined' || ngDevMode) && 'unsafe value used in a script context');\n case SecurityContext.URL:\n if (_allowSanitizationBypassAndThrow(value, \"URL\")) {\n return _unwrapSafeValue(value);\n }\n return __sanitizeUrl(String(value));\n case SecurityContext.RESOURCE_URL:\n if (_allowSanitizationBypassAndThrow(value, \"ResourceURL\")) {\n return _unwrapSafeValue(value);\n }\n throw new _RuntimeError(5201, (typeof ngDevMode === 'undefined' || ngDevMode) && `unsafe value used in a resource URL context (see ${_XSS_SECURITY_URL})`);\n default:\n throw new _RuntimeError(5202, (typeof ngDevMode === 'undefined' || ngDevMode) && `Unexpected SecurityContext ${ctx} (see ${_XSS_SECURITY_URL})`);\n }\n }\n bypassSecurityTrustHtml(value) {\n return _bypassSanitizationTrustHtml(value);\n }\n bypassSecurityTrustStyle(value) {\n return _bypassSanitizationTrustStyle(value);\n }\n bypassSecurityTrustScript(value) {\n return _bypassSanitizationTrustScript(value);\n }\n bypassSecurityTrustUrl(value) {\n return _bypassSanitizationTrustUrl(value);\n }\n bypassSecurityTrustResourceUrl(value) {\n return _bypassSanitizationTrustResourceUrl(value);\n }\n static ɵfac = function DomSanitizerImpl_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || DomSanitizerImpl)(i0.ɵɵinject(DOCUMENT));\n };\n static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: DomSanitizerImpl,\n factory: DomSanitizerImpl.ɵfac,\n providedIn: 'root'\n });\n }\n return DomSanitizerImpl;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nvar HydrationFeatureKind = /*#__PURE__*/function (HydrationFeatureKind) {\n HydrationFeatureKind[HydrationFeatureKind[\"NoHttpTransferCache\"] = 0] = \"NoHttpTransferCache\";\n HydrationFeatureKind[HydrationFeatureKind[\"HttpTransferCacheOptions\"] = 1] = \"HttpTransferCacheOptions\";\n HydrationFeatureKind[HydrationFeatureKind[\"I18nSupport\"] = 2] = \"I18nSupport\";\n HydrationFeatureKind[HydrationFeatureKind[\"EventReplay\"] = 3] = \"EventReplay\";\n HydrationFeatureKind[HydrationFeatureKind[\"IncrementalHydration\"] = 4] = \"IncrementalHydration\";\n return HydrationFeatureKind;\n}(HydrationFeatureKind || {});\nfunction hydrationFeature(ɵkind, ɵproviders = [], ɵoptions = {}) {\n return {\n ɵkind,\n ɵproviders\n };\n}\nfunction withNoHttpTransferCache() {\n return hydrationFeature(HydrationFeatureKind.NoHttpTransferCache);\n}\nfunction withHttpTransferCacheOptions(options) {\n return hydrationFeature(HydrationFeatureKind.HttpTransferCacheOptions, _withHttpTransferCache(options));\n}\nfunction withI18nSupport() {\n return hydrationFeature(HydrationFeatureKind.I18nSupport, _withI18nSupport());\n}\nfunction withEventReplay() {\n return hydrationFeature(HydrationFeatureKind.EventReplay, _withEventReplay());\n}\nfunction withIncrementalHydration() {\n return hydrationFeature(HydrationFeatureKind.IncrementalHydration, _withIncrementalHydration());\n}\nfunction provideEnabledBlockingInitialNavigationDetector() {\n return [{\n provide: ENVIRONMENT_INITIALIZER,\n useValue: () => {\n const isEnabledBlockingInitialNavigation = inject(_IS_ENABLED_BLOCKING_INITIAL_NAVIGATION, {\n optional: true\n });\n if (isEnabledBlockingInitialNavigation) {\n const console = inject(_Console);\n const message = _formatRuntimeError(5001, 'Configuration error: found both hydration and enabledBlocking initial navigation ' + 'in the same application, which is a contradiction.');\n console.warn(message);\n }\n },\n multi: true\n }];\n}\nfunction provideClientHydration(...features) {\n const providers = [];\n const featuresKind = new Set();\n for (const {\n ɵproviders,\n ɵkind\n } of features) {\n featuresKind.add(ɵkind);\n if (ɵproviders.length) {\n providers.push(ɵproviders);\n }\n }\n const hasHttpTransferCacheOptions = featuresKind.has(HydrationFeatureKind.HttpTransferCacheOptions);\n if (typeof ngDevMode !== 'undefined' && ngDevMode && featuresKind.has(HydrationFeatureKind.NoHttpTransferCache) && hasHttpTransferCacheOptions) {\n throw new _RuntimeError(5001, 'Configuration error: found both withHttpTransferCacheOptions() and withNoHttpTransferCache() in the same call to provideClientHydration(), which is a contradiction.');\n }\n return makeEnvironmentProviders([typeof ngDevMode !== 'undefined' && ngDevMode ? provideEnabledBlockingInitialNavigationDetector() : [], typeof ngDevMode !== 'undefined' && ngDevMode ? provideStabilityDebugging() : [], _withDomHydration(), featuresKind.has(HydrationFeatureKind.NoHttpTransferCache) || hasHttpTransferCacheOptions ? [] : _withHttpTransferCache({}), providers]);\n}\nconst VERSION = /* @__PURE__ */new Version('21.2.4');\nexport { By, DomSanitizer, EVENT_MANAGER_PLUGINS, EventManagerPlugin, HAMMER_GESTURE_CONFIG, HAMMER_LOADER, HammerGestureConfig, HammerModule, HydrationFeatureKind, Meta, Title, VERSION, disableDebugTools, enableDebugTools, provideClientHydration, withEventReplay, withHttpTransferCacheOptions, withI18nSupport, withIncrementalHydration, withNoHttpTransferCache, DomSanitizerImpl as ɵDomSanitizerImpl, HammerGesturesPlugin as ɵHammerGesturesPlugin };\n","/**\n * @license Angular v21.2.4\n * (c) 2010-2026 Google LLC. https://angular.dev/\n * License: MIT\n */\n\nimport { DOCUMENT, Location } from '@angular/common';\nimport * as i0 from '@angular/core';\nimport { ɵisPromise as _isPromise, computed, ɵRuntimeError as _RuntimeError, Injectable, InjectionToken, EventEmitter, input, inject, ViewContainerRef, ChangeDetectorRef, Directive, Input, Output, reflectComponentType, Component, runInInjectionContext, ɵisInjectable as _isInjectable, ɵisNgModule as _isNgModule, isStandalone, createEnvironmentInjector, Compiler, NgModuleFactory, ɵresolveComponentResources as _resolveComponentResources, afterNextRender, signal, EnvironmentInjector, DestroyRef, untracked, ɵConsole as _Console, ɵPendingTasksInternal as _PendingTasksInternal, ɵINTERNAL_APPLICATION_ERROR_HANDLER as _INTERNAL_APPLICATION_ERROR_HANDLER, ɵformatRuntimeError as _formatRuntimeError } from '@angular/core';\nimport { isObservable, from, of, BehaviorSubject, combineLatest, EmptyError, Observable, concat, defer, pipe, EMPTY, throwError, Subject, Subscription } from 'rxjs';\nimport { first, map, switchMap, take, startWith, filter, takeUntil, mergeMap, concatMap, tap, takeLast, catchError, finalize } from 'rxjs/operators';\nimport * as i1 from '@angular/platform-browser';\nconst PRIMARY_OUTLET = 'primary';\nconst RouteTitleKey = /* @__PURE__ */Symbol('RouteTitle');\nclass ParamsAsMap {\n params;\n constructor(params) {\n this.params = params || {};\n }\n has(name) {\n return Object.prototype.hasOwnProperty.call(this.params, name);\n }\n get(name) {\n if (this.has(name)) {\n const v = this.params[name];\n return Array.isArray(v) ? v[0] : v;\n }\n return null;\n }\n getAll(name) {\n if (this.has(name)) {\n const v = this.params[name];\n return Array.isArray(v) ? v : [v];\n }\n return [];\n }\n get keys() {\n return Object.keys(this.params);\n }\n}\nfunction convertToParamMap(params) {\n return new ParamsAsMap(params);\n}\nfunction matchParts(routeParts, urlSegments, posParams) {\n for (let i = 0; i < routeParts.length; i++) {\n const part = routeParts[i];\n const segment = urlSegments[i];\n const isParameter = part[0] === ':';\n if (isParameter) {\n posParams[part.substring(1)] = segment;\n } else if (part !== segment.path) {\n return false;\n }\n }\n return true;\n}\nfunction defaultUrlMatcher(segments, segmentGroup, route) {\n const parts = route.path.split('/');\n const wildcardIndex = parts.indexOf('**');\n if (wildcardIndex === -1) {\n if (parts.length > segments.length) {\n return null;\n }\n if (route.pathMatch === 'full' && (segmentGroup.hasChildren() || parts.length < segments.length)) {\n return null;\n }\n const posParams = {};\n const consumed = segments.slice(0, parts.length);\n if (!matchParts(parts, consumed, posParams)) {\n return null;\n }\n return {\n consumed,\n posParams\n };\n }\n if (wildcardIndex !== parts.lastIndexOf('**')) {\n return null;\n }\n const pre = parts.slice(0, wildcardIndex);\n const post = parts.slice(wildcardIndex + 1);\n if (pre.length + post.length > segments.length) {\n return null;\n }\n if (route.pathMatch === 'full' && segmentGroup.hasChildren() && route.path !== '**') {\n return null;\n }\n const posParams = {};\n if (!matchParts(pre, segments.slice(0, pre.length), posParams)) {\n return null;\n }\n if (!matchParts(post, segments.slice(segments.length - post.length), posParams)) {\n return null;\n }\n return {\n consumed: segments,\n posParams\n };\n}\nfunction firstValueFrom(source) {\n return new Promise((resolve, reject) => {\n source.pipe(first()).subscribe({\n next: value => resolve(value),\n error: err => reject(err)\n });\n });\n}\nfunction shallowEqualArrays(a, b) {\n if (a.length !== b.length) return false;\n for (let i = 0; i < a.length; ++i) {\n if (!shallowEqual(a[i], b[i])) return false;\n }\n return true;\n}\nfunction shallowEqual(a, b) {\n const k1 = a ? getDataKeys(a) : undefined;\n const k2 = b ? getDataKeys(b) : undefined;\n if (!k1 || !k2 || k1.length != k2.length) {\n return false;\n }\n let key;\n for (let i = 0; i < k1.length; i++) {\n key = k1[i];\n if (!equalArraysOrString(a[key], b[key])) {\n return false;\n }\n }\n return true;\n}\nfunction getDataKeys(obj) {\n return [...Object.keys(obj), ...Object.getOwnPropertySymbols(obj)];\n}\nfunction equalArraysOrString(a, b) {\n if (Array.isArray(a) && Array.isArray(b)) {\n if (a.length !== b.length) return false;\n const aSorted = [...a].sort();\n const bSorted = [...b].sort();\n return aSorted.every((val, index) => bSorted[index] === val);\n } else {\n return a === b;\n }\n}\nfunction last(a) {\n return a.length > 0 ? a[a.length - 1] : null;\n}\nfunction wrapIntoObservable(value) {\n if (isObservable(value)) {\n return value;\n }\n if (_isPromise(value)) {\n return from(Promise.resolve(value));\n }\n return of(value);\n}\nfunction wrapIntoPromise(value) {\n if (isObservable(value)) {\n return firstValueFrom(value);\n }\n return Promise.resolve(value);\n}\nconst pathCompareMap = {\n 'exact': equalSegmentGroups,\n 'subset': containsSegmentGroup\n};\nconst paramCompareMap = {\n 'exact': equalParams,\n 'subset': containsParams,\n 'ignored': () => true\n};\nconst exactMatchOptions = {\n paths: 'exact',\n fragment: 'ignored',\n matrixParams: 'ignored',\n queryParams: 'exact'\n};\nconst subsetMatchOptions = {\n paths: 'subset',\n fragment: 'ignored',\n matrixParams: 'ignored',\n queryParams: 'subset'\n};\nfunction isActive(url, router, matchOptions) {\n const urlTree = url instanceof UrlTree ? url : router.parseUrl(url);\n return computed(() => containsTree(router.lastSuccessfulNavigation()?.finalUrl ?? new UrlTree(), urlTree, {\n ...subsetMatchOptions,\n ...matchOptions\n }));\n}\nfunction containsTree(container, containee, options) {\n return pathCompareMap[options.paths](container.root, containee.root, options.matrixParams) && paramCompareMap[options.queryParams](container.queryParams, containee.queryParams) && !(options.fragment === 'exact' && container.fragment !== containee.fragment);\n}\nfunction equalParams(container, containee) {\n return shallowEqual(container, containee);\n}\nfunction equalSegmentGroups(container, containee, matrixParams) {\n if (!equalPath(container.segments, containee.segments)) return false;\n if (!matrixParamsMatch(container.segments, containee.segments, matrixParams)) {\n return false;\n }\n if (container.numberOfChildren !== containee.numberOfChildren) return false;\n for (const c in containee.children) {\n if (!container.children[c]) return false;\n if (!equalSegmentGroups(container.children[c], containee.children[c], matrixParams)) return false;\n }\n return true;\n}\nfunction containsParams(container, containee) {\n return Object.keys(containee).length <= Object.keys(container).length && Object.keys(containee).every(key => equalArraysOrString(container[key], containee[key]));\n}\nfunction containsSegmentGroup(container, containee, matrixParams) {\n return containsSegmentGroupHelper(container, containee, containee.segments, matrixParams);\n}\nfunction containsSegmentGroupHelper(container, containee, containeePaths, matrixParams) {\n if (container.segments.length > containeePaths.length) {\n const current = container.segments.slice(0, containeePaths.length);\n if (!equalPath(current, containeePaths)) return false;\n if (containee.hasChildren()) return false;\n if (!matrixParamsMatch(current, containeePaths, matrixParams)) return false;\n return true;\n } else if (container.segments.length === containeePaths.length) {\n if (!equalPath(container.segments, containeePaths)) return false;\n if (!matrixParamsMatch(container.segments, containeePaths, matrixParams)) return false;\n for (const c in containee.children) {\n if (!container.children[c]) return false;\n if (!containsSegmentGroup(container.children[c], containee.children[c], matrixParams)) {\n return false;\n }\n }\n return true;\n } else {\n const current = containeePaths.slice(0, container.segments.length);\n const next = containeePaths.slice(container.segments.length);\n if (!equalPath(container.segments, current)) return false;\n if (!matrixParamsMatch(container.segments, current, matrixParams)) return false;\n if (!container.children[PRIMARY_OUTLET]) return false;\n return containsSegmentGroupHelper(container.children[PRIMARY_OUTLET], containee, next, matrixParams);\n }\n}\nfunction matrixParamsMatch(containerPaths, containeePaths, options) {\n return containeePaths.every((containeeSegment, i) => {\n return paramCompareMap[options](containerPaths[i].parameters, containeeSegment.parameters);\n });\n}\nclass UrlTree {\n root;\n queryParams;\n fragment;\n _queryParamMap;\n constructor(root = new UrlSegmentGroup([], {}), queryParams = {}, fragment = null) {\n this.root = root;\n this.queryParams = queryParams;\n this.fragment = fragment;\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n if (root.segments.length > 0) {\n throw new _RuntimeError(4015, 'The root `UrlSegmentGroup` should not contain `segments`. ' + 'Instead, these segments belong in the `children` so they can be associated with a named outlet.');\n }\n }\n }\n get queryParamMap() {\n this._queryParamMap ??= convertToParamMap(this.queryParams);\n return this._queryParamMap;\n }\n toString() {\n return DEFAULT_SERIALIZER.serialize(this);\n }\n}\nclass UrlSegmentGroup {\n segments;\n children;\n parent = null;\n constructor(segments, children) {\n this.segments = segments;\n this.children = children;\n Object.values(children).forEach(v => v.parent = this);\n }\n hasChildren() {\n return this.numberOfChildren > 0;\n }\n get numberOfChildren() {\n return Object.keys(this.children).length;\n }\n toString() {\n return serializePaths(this);\n }\n}\nclass UrlSegment {\n path;\n parameters;\n _parameterMap;\n constructor(path, parameters) {\n this.path = path;\n this.parameters = parameters;\n }\n get parameterMap() {\n this._parameterMap ??= convertToParamMap(this.parameters);\n return this._parameterMap;\n }\n toString() {\n return serializePath(this);\n }\n}\nfunction equalSegments(as, bs) {\n return equalPath(as, bs) && as.every((a, i) => shallowEqual(a.parameters, bs[i].parameters));\n}\nfunction equalPath(as, bs) {\n if (as.length !== bs.length) return false;\n return as.every((a, i) => a.path === bs[i].path);\n}\nfunction mapChildrenIntoArray(segment, fn) {\n let res = [];\n Object.entries(segment.children).forEach(([childOutlet, child]) => {\n if (childOutlet === PRIMARY_OUTLET) {\n res = res.concat(fn(child, childOutlet));\n }\n });\n Object.entries(segment.children).forEach(([childOutlet, child]) => {\n if (childOutlet !== PRIMARY_OUTLET) {\n res = res.concat(fn(child, childOutlet));\n }\n });\n return res;\n}\nlet UrlSerializer = /*#__PURE__*/(() => {\n class UrlSerializer {\n static ɵfac = function UrlSerializer_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || UrlSerializer)();\n };\n static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: UrlSerializer,\n factory: () => (() => new DefaultUrlSerializer())(),\n providedIn: 'root'\n });\n }\n return UrlSerializer;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nclass DefaultUrlSerializer {\n parse(url) {\n const p = new UrlParser(url);\n return new UrlTree(p.parseRootSegment(), p.parseQueryParams(), p.parseFragment());\n }\n serialize(tree) {\n const segment = `/${serializeSegment(tree.root, true)}`;\n const query = serializeQueryParams(tree.queryParams);\n const fragment = typeof tree.fragment === `string` ? `#${encodeUriFragment(tree.fragment)}` : '';\n return `${segment}${query}${fragment}`;\n }\n}\nconst DEFAULT_SERIALIZER = /*#__PURE__*/new DefaultUrlSerializer();\nfunction serializePaths(segment) {\n return segment.segments.map(p => serializePath(p)).join('/');\n}\nfunction serializeSegment(segment, root) {\n if (!segment.hasChildren()) {\n return serializePaths(segment);\n }\n if (root) {\n const primary = segment.children[PRIMARY_OUTLET] ? serializeSegment(segment.children[PRIMARY_OUTLET], false) : '';\n const children = [];\n Object.entries(segment.children).forEach(([k, v]) => {\n if (k !== PRIMARY_OUTLET) {\n children.push(`${k}:${serializeSegment(v, false)}`);\n }\n });\n return children.length > 0 ? `${primary}(${children.join('//')})` : primary;\n } else {\n const children = mapChildrenIntoArray(segment, (v, k) => {\n if (k === PRIMARY_OUTLET) {\n return [serializeSegment(segment.children[PRIMARY_OUTLET], false)];\n }\n return [`${k}:${serializeSegment(v, false)}`];\n });\n if (Object.keys(segment.children).length === 1 && segment.children[PRIMARY_OUTLET] != null) {\n return `${serializePaths(segment)}/${children[0]}`;\n }\n return `${serializePaths(segment)}/(${children.join('//')})`;\n }\n}\nfunction encodeUriString(s) {\n return encodeURIComponent(s).replace(/%40/g, '@').replace(/%3A/gi, ':').replace(/%24/g, '$').replace(/%2C/gi, ',');\n}\nfunction encodeUriQuery(s) {\n return encodeUriString(s).replace(/%3B/gi, ';');\n}\nfunction encodeUriFragment(s) {\n return encodeURI(s);\n}\nfunction encodeUriSegment(s) {\n return encodeUriString(s).replace(/\\(/g, '%28').replace(/\\)/g, '%29').replace(/%26/gi, '&');\n}\nfunction decode(s) {\n return decodeURIComponent(s);\n}\nfunction decodeQuery(s) {\n return decode(s.replace(/\\+/g, '%20'));\n}\nfunction serializePath(path) {\n return `${encodeUriSegment(path.path)}${serializeMatrixParams(path.parameters)}`;\n}\nfunction serializeMatrixParams(params) {\n return Object.entries(params).map(([key, value]) => `;${encodeUriSegment(key)}=${encodeUriSegment(value)}`).join('');\n}\nfunction serializeQueryParams(params) {\n const strParams = Object.entries(params).map(([name, value]) => {\n return Array.isArray(value) ? value.map(v => `${encodeUriQuery(name)}=${encodeUriQuery(v)}`).join('&') : `${encodeUriQuery(name)}=${encodeUriQuery(value)}`;\n }).filter(s => s);\n return strParams.length ? `?${strParams.join('&')}` : '';\n}\nconst SEGMENT_RE = /^[^\\/()?;#]+/;\nfunction matchSegments(str) {\n const match = str.match(SEGMENT_RE);\n return match ? match[0] : '';\n}\nconst MATRIX_PARAM_SEGMENT_RE = /^[^\\/()?;=#]+/;\nfunction matchMatrixKeySegments(str) {\n const match = str.match(MATRIX_PARAM_SEGMENT_RE);\n return match ? match[0] : '';\n}\nconst QUERY_PARAM_RE = /^[^=?&#]+/;\nfunction matchQueryParams(str) {\n const match = str.match(QUERY_PARAM_RE);\n return match ? match[0] : '';\n}\nconst QUERY_PARAM_VALUE_RE = /^[^&#]+/;\nfunction matchUrlQueryParamValue(str) {\n const match = str.match(QUERY_PARAM_VALUE_RE);\n return match ? match[0] : '';\n}\nclass UrlParser {\n url;\n remaining;\n constructor(url) {\n this.url = url;\n this.remaining = url;\n }\n parseRootSegment() {\n this.consumeOptional('/');\n if (this.remaining === '' || this.peekStartsWith('?') || this.peekStartsWith('#')) {\n return new UrlSegmentGroup([], {});\n }\n return new UrlSegmentGroup([], this.parseChildren());\n }\n parseQueryParams() {\n const params = {};\n if (this.consumeOptional('?')) {\n do {\n this.parseQueryParam(params);\n } while (this.consumeOptional('&'));\n }\n return params;\n }\n parseFragment() {\n return this.consumeOptional('#') ? decodeURIComponent(this.remaining) : null;\n }\n parseChildren(depth = 0) {\n if (depth > 50) {\n throw new _RuntimeError(4010, (typeof ngDevMode === 'undefined' || ngDevMode) && 'URL is too deep');\n }\n if (this.remaining === '') {\n return {};\n }\n this.consumeOptional('/');\n const segments = [];\n if (!this.peekStartsWith('(')) {\n segments.push(this.parseSegment());\n }\n while (this.peekStartsWith('/') && !this.peekStartsWith('//') && !this.peekStartsWith('/(')) {\n this.capture('/');\n segments.push(this.parseSegment());\n }\n let children = {};\n if (this.peekStartsWith('/(')) {\n this.capture('/');\n children = this.parseParens(true, depth);\n }\n let res = {};\n if (this.peekStartsWith('(')) {\n res = this.parseParens(false, depth);\n }\n if (segments.length > 0 || Object.keys(children).length > 0) {\n res[PRIMARY_OUTLET] = new UrlSegmentGroup(segments, children);\n }\n return res;\n }\n parseSegment() {\n const path = matchSegments(this.remaining);\n if (path === '' && this.peekStartsWith(';')) {\n throw new _RuntimeError(4009, (typeof ngDevMode === 'undefined' || ngDevMode) && `Empty path url segment cannot have parameters: '${this.remaining}'.`);\n }\n this.capture(path);\n return new UrlSegment(decode(path), this.parseMatrixParams());\n }\n parseMatrixParams() {\n const params = {};\n while (this.consumeOptional(';')) {\n this.parseParam(params);\n }\n return params;\n }\n parseParam(params) {\n const key = matchMatrixKeySegments(this.remaining);\n if (!key) {\n return;\n }\n this.capture(key);\n let value = '';\n if (this.consumeOptional('=')) {\n const valueMatch = matchSegments(this.remaining);\n if (valueMatch) {\n value = valueMatch;\n this.capture(value);\n }\n }\n params[decode(key)] = decode(value);\n }\n parseQueryParam(params) {\n const key = matchQueryParams(this.remaining);\n if (!key) {\n return;\n }\n this.capture(key);\n let value = '';\n if (this.consumeOptional('=')) {\n const valueMatch = matchUrlQueryParamValue(this.remaining);\n if (valueMatch) {\n value = valueMatch;\n this.capture(value);\n }\n }\n const decodedKey = decodeQuery(key);\n const decodedVal = decodeQuery(value);\n if (params.hasOwnProperty(decodedKey)) {\n let currentVal = params[decodedKey];\n if (!Array.isArray(currentVal)) {\n currentVal = [currentVal];\n params[decodedKey] = currentVal;\n }\n currentVal.push(decodedVal);\n } else {\n params[decodedKey] = decodedVal;\n }\n }\n parseParens(allowPrimary, depth) {\n const segments = {};\n this.capture('(');\n while (!this.consumeOptional(')') && this.remaining.length > 0) {\n const path = matchSegments(this.remaining);\n const next = this.remaining[path.length];\n if (next !== '/' && next !== ')' && next !== ';') {\n throw new _RuntimeError(4010, (typeof ngDevMode === 'undefined' || ngDevMode) && `Cannot parse url '${this.url}'`);\n }\n let outletName;\n if (path.indexOf(':') > -1) {\n outletName = path.slice(0, path.indexOf(':'));\n this.capture(outletName);\n this.capture(':');\n } else if (allowPrimary) {\n outletName = PRIMARY_OUTLET;\n }\n const children = this.parseChildren(depth + 1);\n segments[outletName ?? PRIMARY_OUTLET] = Object.keys(children).length === 1 && children[PRIMARY_OUTLET] ? children[PRIMARY_OUTLET] : new UrlSegmentGroup([], children);\n this.consumeOptional('//');\n }\n return segments;\n }\n peekStartsWith(str) {\n return this.remaining.startsWith(str);\n }\n consumeOptional(str) {\n if (this.peekStartsWith(str)) {\n this.remaining = this.remaining.substring(str.length);\n return true;\n }\n return false;\n }\n capture(str) {\n if (!this.consumeOptional(str)) {\n throw new _RuntimeError(4011, (typeof ngDevMode === 'undefined' || ngDevMode) && `Expected \"${str}\".`);\n }\n }\n}\nfunction createRoot(rootCandidate) {\n return rootCandidate.segments.length > 0 ? new UrlSegmentGroup([], {\n [PRIMARY_OUTLET]: rootCandidate\n }) : rootCandidate;\n}\nfunction squashSegmentGroup(segmentGroup) {\n const newChildren = {};\n for (const [childOutlet, child] of Object.entries(segmentGroup.children)) {\n const childCandidate = squashSegmentGroup(child);\n if (childOutlet === PRIMARY_OUTLET && childCandidate.segments.length === 0 && childCandidate.hasChildren()) {\n for (const [grandChildOutlet, grandChild] of Object.entries(childCandidate.children)) {\n newChildren[grandChildOutlet] = grandChild;\n }\n } else if (childCandidate.segments.length > 0 || childCandidate.hasChildren()) {\n newChildren[childOutlet] = childCandidate;\n }\n }\n const s = new UrlSegmentGroup(segmentGroup.segments, newChildren);\n return mergeTrivialChildren(s);\n}\nfunction mergeTrivialChildren(s) {\n if (s.numberOfChildren === 1 && s.children[PRIMARY_OUTLET]) {\n const c = s.children[PRIMARY_OUTLET];\n return new UrlSegmentGroup(s.segments.concat(c.segments), c.children);\n }\n return s;\n}\nfunction isUrlTree(v) {\n return v instanceof UrlTree;\n}\nfunction createUrlTreeFromSnapshot(relativeTo, commands, queryParams = null, fragment = null, urlSerializer = new DefaultUrlSerializer()) {\n const relativeToUrlSegmentGroup = createSegmentGroupFromRoute(relativeTo);\n return createUrlTreeFromSegmentGroup(relativeToUrlSegmentGroup, commands, queryParams, fragment, urlSerializer);\n}\nfunction createSegmentGroupFromRoute(route) {\n let targetGroup;\n function createSegmentGroupFromRouteRecursive(currentRoute) {\n const childOutlets = {};\n for (const childSnapshot of currentRoute.children) {\n const root = createSegmentGroupFromRouteRecursive(childSnapshot);\n childOutlets[childSnapshot.outlet] = root;\n }\n const segmentGroup = new UrlSegmentGroup(currentRoute.url, childOutlets);\n if (currentRoute === route) {\n targetGroup = segmentGroup;\n }\n return segmentGroup;\n }\n const rootCandidate = createSegmentGroupFromRouteRecursive(route.root);\n const rootSegmentGroup = createRoot(rootCandidate);\n return targetGroup ?? rootSegmentGroup;\n}\nfunction createUrlTreeFromSegmentGroup(relativeTo, commands, queryParams, fragment, urlSerializer) {\n let root = relativeTo;\n while (root.parent) {\n root = root.parent;\n }\n if (commands.length === 0) {\n return tree(root, root, root, queryParams, fragment, urlSerializer);\n }\n const nav = computeNavigation(commands);\n if (nav.toRoot()) {\n return tree(root, root, new UrlSegmentGroup([], {}), queryParams, fragment, urlSerializer);\n }\n const position = findStartingPositionForTargetGroup(nav, root, relativeTo);\n const newSegmentGroup = position.processChildren ? updateSegmentGroupChildren(position.segmentGroup, position.index, nav.commands) : updateSegmentGroup(position.segmentGroup, position.index, nav.commands);\n return tree(root, position.segmentGroup, newSegmentGroup, queryParams, fragment, urlSerializer);\n}\nfunction isMatrixParams(command) {\n return typeof command === 'object' && command != null && !command.outlets && !command.segmentPath;\n}\nfunction isCommandWithOutlets(command) {\n return typeof command === 'object' && command != null && command.outlets;\n}\nfunction normalizeQueryParams(k, v, urlSerializer) {\n k ||= 'ɵ';\n const tree = new UrlTree();\n tree.queryParams = {\n [k]: v\n };\n return urlSerializer.parse(urlSerializer.serialize(tree)).queryParams[k];\n}\nfunction tree(oldRoot, oldSegmentGroup, newSegmentGroup, queryParams, fragment, urlSerializer) {\n const qp = {};\n for (const [key, value] of Object.entries(queryParams ?? {})) {\n qp[key] = Array.isArray(value) ? value.map(v => normalizeQueryParams(key, v, urlSerializer)) : normalizeQueryParams(key, value, urlSerializer);\n }\n let rootCandidate;\n if (oldRoot === oldSegmentGroup) {\n rootCandidate = newSegmentGroup;\n } else {\n rootCandidate = replaceSegment(oldRoot, oldSegmentGroup, newSegmentGroup);\n }\n const newRoot = createRoot(squashSegmentGroup(rootCandidate));\n return new UrlTree(newRoot, qp, fragment);\n}\nfunction replaceSegment(current, oldSegment, newSegment) {\n const children = {};\n Object.entries(current.children).forEach(([outletName, c]) => {\n if (c === oldSegment) {\n children[outletName] = newSegment;\n } else {\n children[outletName] = replaceSegment(c, oldSegment, newSegment);\n }\n });\n return new UrlSegmentGroup(current.segments, children);\n}\nclass Navigation {\n isAbsolute;\n numberOfDoubleDots;\n commands;\n constructor(isAbsolute, numberOfDoubleDots, commands) {\n this.isAbsolute = isAbsolute;\n this.numberOfDoubleDots = numberOfDoubleDots;\n this.commands = commands;\n if (isAbsolute && commands.length > 0 && isMatrixParams(commands[0])) {\n throw new _RuntimeError(4003, (typeof ngDevMode === 'undefined' || ngDevMode) && 'Root segment cannot have matrix parameters');\n }\n const cmdWithOutlet = commands.find(isCommandWithOutlets);\n if (cmdWithOutlet && cmdWithOutlet !== last(commands)) {\n throw new _RuntimeError(4004, (typeof ngDevMode === 'undefined' || ngDevMode) && '{outlets:{}} has to be the last command');\n }\n }\n toRoot() {\n return this.isAbsolute && this.commands.length === 1 && this.commands[0] == '/';\n }\n}\nfunction computeNavigation(commands) {\n if (typeof commands[0] === 'string' && commands.length === 1 && commands[0] === '/') {\n return new Navigation(true, 0, commands);\n }\n let numberOfDoubleDots = 0;\n let isAbsolute = false;\n const res = commands.reduce((res, cmd, cmdIdx) => {\n if (typeof cmd === 'object' && cmd != null) {\n if (cmd.outlets) {\n const outlets = {};\n Object.entries(cmd.outlets).forEach(([name, commands]) => {\n outlets[name] = typeof commands === 'string' ? commands.split('/') : commands;\n });\n return [...res, {\n outlets\n }];\n }\n if (cmd.segmentPath) {\n return [...res, cmd.segmentPath];\n }\n }\n if (!(typeof cmd === 'string')) {\n return [...res, cmd];\n }\n if (cmdIdx === 0) {\n cmd.split('/').forEach((urlPart, partIndex) => {\n if (partIndex == 0 && urlPart === '.') ;else if (partIndex == 0 && urlPart === '') {\n isAbsolute = true;\n } else if (urlPart === '..') {\n numberOfDoubleDots++;\n } else if (urlPart != '') {\n res.push(urlPart);\n }\n });\n return res;\n }\n return [...res, cmd];\n }, []);\n return new Navigation(isAbsolute, numberOfDoubleDots, res);\n}\nclass Position {\n segmentGroup;\n processChildren;\n index;\n constructor(segmentGroup, processChildren, index) {\n this.segmentGroup = segmentGroup;\n this.processChildren = processChildren;\n this.index = index;\n }\n}\nfunction findStartingPositionForTargetGroup(nav, root, target) {\n if (nav.isAbsolute) {\n return new Position(root, true, 0);\n }\n if (!target) {\n return new Position(root, false, NaN);\n }\n if (target.parent === null) {\n return new Position(target, true, 0);\n }\n const modifier = isMatrixParams(nav.commands[0]) ? 0 : 1;\n const index = target.segments.length - 1 + modifier;\n return createPositionApplyingDoubleDots(target, index, nav.numberOfDoubleDots);\n}\nfunction createPositionApplyingDoubleDots(group, index, numberOfDoubleDots) {\n let g = group;\n let ci = index;\n let dd = numberOfDoubleDots;\n while (dd > ci) {\n dd -= ci;\n g = g.parent;\n if (!g) {\n throw new _RuntimeError(4005, (typeof ngDevMode === 'undefined' || ngDevMode) && \"Invalid number of '../'\");\n }\n ci = g.segments.length;\n }\n return new Position(g, false, ci - dd);\n}\nfunction getOutlets(commands) {\n if (isCommandWithOutlets(commands[0])) {\n return commands[0].outlets;\n }\n return {\n [PRIMARY_OUTLET]: commands\n };\n}\nfunction updateSegmentGroup(segmentGroup, startIndex, commands) {\n segmentGroup ??= new UrlSegmentGroup([], {});\n if (segmentGroup.segments.length === 0 && segmentGroup.hasChildren()) {\n return updateSegmentGroupChildren(segmentGroup, startIndex, commands);\n }\n const m = prefixedWith(segmentGroup, startIndex, commands);\n const slicedCommands = commands.slice(m.commandIndex);\n if (m.match && m.pathIndex < segmentGroup.segments.length) {\n const g = new UrlSegmentGroup(segmentGroup.segments.slice(0, m.pathIndex), {});\n g.children[PRIMARY_OUTLET] = new UrlSegmentGroup(segmentGroup.segments.slice(m.pathIndex), segmentGroup.children);\n return updateSegmentGroupChildren(g, 0, slicedCommands);\n } else if (m.match && slicedCommands.length === 0) {\n return new UrlSegmentGroup(segmentGroup.segments, {});\n } else if (m.match && !segmentGroup.hasChildren()) {\n return createNewSegmentGroup(segmentGroup, startIndex, commands);\n } else if (m.match) {\n return updateSegmentGroupChildren(segmentGroup, 0, slicedCommands);\n } else {\n return createNewSegmentGroup(segmentGroup, startIndex, commands);\n }\n}\nfunction updateSegmentGroupChildren(segmentGroup, startIndex, commands) {\n if (commands.length === 0) {\n return new UrlSegmentGroup(segmentGroup.segments, {});\n } else {\n const outlets = getOutlets(commands);\n const children = {};\n if (Object.keys(outlets).some(o => o !== PRIMARY_OUTLET) && segmentGroup.children[PRIMARY_OUTLET] && segmentGroup.numberOfChildren === 1 && segmentGroup.children[PRIMARY_OUTLET].segments.length === 0) {\n const childrenOfEmptyChild = updateSegmentGroupChildren(segmentGroup.children[PRIMARY_OUTLET], startIndex, commands);\n return new UrlSegmentGroup(segmentGroup.segments, childrenOfEmptyChild.children);\n }\n Object.entries(outlets).forEach(([outlet, commands]) => {\n if (typeof commands === 'string') {\n commands = [commands];\n }\n if (commands !== null) {\n children[outlet] = updateSegmentGroup(segmentGroup.children[outlet], startIndex, commands);\n }\n });\n Object.entries(segmentGroup.children).forEach(([childOutlet, child]) => {\n if (outlets[childOutlet] === undefined) {\n children[childOutlet] = child;\n }\n });\n return new UrlSegmentGroup(segmentGroup.segments, children);\n }\n}\nfunction prefixedWith(segmentGroup, startIndex, commands) {\n let currentCommandIndex = 0;\n let currentPathIndex = startIndex;\n const noMatch = {\n match: false,\n pathIndex: 0,\n commandIndex: 0\n };\n while (currentPathIndex < segmentGroup.segments.length) {\n if (currentCommandIndex >= commands.length) return noMatch;\n const path = segmentGroup.segments[currentPathIndex];\n const command = commands[currentCommandIndex];\n if (isCommandWithOutlets(command)) {\n break;\n }\n const curr = `${command}`;\n const next = currentCommandIndex < commands.length - 1 ? commands[currentCommandIndex + 1] : null;\n if (currentPathIndex > 0 && curr === undefined) break;\n if (curr && next && typeof next === 'object' && next.outlets === undefined) {\n if (!compare(curr, next, path)) return noMatch;\n currentCommandIndex += 2;\n } else {\n if (!compare(curr, {}, path)) return noMatch;\n currentCommandIndex++;\n }\n currentPathIndex++;\n }\n return {\n match: true,\n pathIndex: currentPathIndex,\n commandIndex: currentCommandIndex\n };\n}\nfunction createNewSegmentGroup(segmentGroup, startIndex, commands) {\n const paths = segmentGroup.segments.slice(0, startIndex);\n let i = 0;\n while (i < commands.length) {\n const command = commands[i];\n if (isCommandWithOutlets(command)) {\n const children = createNewSegmentChildren(command.outlets);\n return new UrlSegmentGroup(paths, children);\n }\n if (i === 0 && isMatrixParams(commands[0])) {\n const p = segmentGroup.segments[startIndex];\n paths.push(new UrlSegment(p.path, stringify(commands[0])));\n i++;\n continue;\n }\n const curr = isCommandWithOutlets(command) ? command.outlets[PRIMARY_OUTLET] : `${command}`;\n const next = i < commands.length - 1 ? commands[i + 1] : null;\n if (curr && next && isMatrixParams(next)) {\n paths.push(new UrlSegment(curr, stringify(next)));\n i += 2;\n } else {\n paths.push(new UrlSegment(curr, {}));\n i++;\n }\n }\n return new UrlSegmentGroup(paths, {});\n}\nfunction createNewSegmentChildren(outlets) {\n const children = {};\n Object.entries(outlets).forEach(([outlet, commands]) => {\n if (typeof commands === 'string') {\n commands = [commands];\n }\n if (commands !== null) {\n children[outlet] = createNewSegmentGroup(new UrlSegmentGroup([], {}), 0, commands);\n }\n });\n return children;\n}\nfunction stringify(params) {\n const res = {};\n Object.entries(params).forEach(([k, v]) => res[k] = `${v}`);\n return res;\n}\nfunction compare(path, params, segment) {\n return path == segment.path && shallowEqual(params, segment.parameters);\n}\nconst IMPERATIVE_NAVIGATION = 'imperative';\nvar EventType = /*#__PURE__*/function (EventType) {\n EventType[EventType[\"NavigationStart\"] = 0] = \"NavigationStart\";\n EventType[EventType[\"NavigationEnd\"] = 1] = \"NavigationEnd\";\n EventType[EventType[\"NavigationCancel\"] = 2] = \"NavigationCancel\";\n EventType[EventType[\"NavigationError\"] = 3] = \"NavigationError\";\n EventType[EventType[\"RoutesRecognized\"] = 4] = \"RoutesRecognized\";\n EventType[EventType[\"ResolveStart\"] = 5] = \"ResolveStart\";\n EventType[EventType[\"ResolveEnd\"] = 6] = \"ResolveEnd\";\n EventType[EventType[\"GuardsCheckStart\"] = 7] = \"GuardsCheckStart\";\n EventType[EventType[\"GuardsCheckEnd\"] = 8] = \"GuardsCheckEnd\";\n EventType[EventType[\"RouteConfigLoadStart\"] = 9] = \"RouteConfigLoadStart\";\n EventType[EventType[\"RouteConfigLoadEnd\"] = 10] = \"RouteConfigLoadEnd\";\n EventType[EventType[\"ChildActivationStart\"] = 11] = \"ChildActivationStart\";\n EventType[EventType[\"ChildActivationEnd\"] = 12] = \"ChildActivationEnd\";\n EventType[EventType[\"ActivationStart\"] = 13] = \"ActivationStart\";\n EventType[EventType[\"ActivationEnd\"] = 14] = \"ActivationEnd\";\n EventType[EventType[\"Scroll\"] = 15] = \"Scroll\";\n EventType[EventType[\"NavigationSkipped\"] = 16] = \"NavigationSkipped\";\n return EventType;\n}(EventType || {});\nclass RouterEvent {\n id;\n url;\n constructor(id, url) {\n this.id = id;\n this.url = url;\n }\n}\nclass NavigationStart extends RouterEvent {\n type = EventType.NavigationStart;\n navigationTrigger;\n restoredState;\n constructor(id, url, navigationTrigger = 'imperative', restoredState = null) {\n super(id, url);\n this.navigationTrigger = navigationTrigger;\n this.restoredState = restoredState;\n }\n toString() {\n return `NavigationStart(id: ${this.id}, url: '${this.url}')`;\n }\n}\nclass NavigationEnd extends RouterEvent {\n urlAfterRedirects;\n type = EventType.NavigationEnd;\n constructor(id, url, urlAfterRedirects) {\n super(id, url);\n this.urlAfterRedirects = urlAfterRedirects;\n }\n toString() {\n return `NavigationEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}')`;\n }\n}\nvar NavigationCancellationCode = /*#__PURE__*/function (NavigationCancellationCode) {\n NavigationCancellationCode[NavigationCancellationCode[\"Redirect\"] = 0] = \"Redirect\";\n NavigationCancellationCode[NavigationCancellationCode[\"SupersededByNewNavigation\"] = 1] = \"SupersededByNewNavigation\";\n NavigationCancellationCode[NavigationCancellationCode[\"NoDataFromResolver\"] = 2] = \"NoDataFromResolver\";\n NavigationCancellationCode[NavigationCancellationCode[\"GuardRejected\"] = 3] = \"GuardRejected\";\n NavigationCancellationCode[NavigationCancellationCode[\"Aborted\"] = 4] = \"Aborted\";\n return NavigationCancellationCode;\n}(NavigationCancellationCode || {});\nvar NavigationSkippedCode = /*#__PURE__*/function (NavigationSkippedCode) {\n NavigationSkippedCode[NavigationSkippedCode[\"IgnoredSameUrlNavigation\"] = 0] = \"IgnoredSameUrlNavigation\";\n NavigationSkippedCode[NavigationSkippedCode[\"IgnoredByUrlHandlingStrategy\"] = 1] = \"IgnoredByUrlHandlingStrategy\";\n return NavigationSkippedCode;\n}(NavigationSkippedCode || {});\nclass NavigationCancel extends RouterEvent {\n reason;\n code;\n type = EventType.NavigationCancel;\n constructor(id, url, reason, code) {\n super(id, url);\n this.reason = reason;\n this.code = code;\n }\n toString() {\n return `NavigationCancel(id: ${this.id}, url: '${this.url}')`;\n }\n}\nfunction isRedirectingEvent(event) {\n return event instanceof NavigationCancel && (event.code === NavigationCancellationCode.Redirect || event.code === NavigationCancellationCode.SupersededByNewNavigation);\n}\nclass NavigationSkipped extends RouterEvent {\n reason;\n code;\n type = EventType.NavigationSkipped;\n constructor(id, url, reason, code) {\n super(id, url);\n this.reason = reason;\n this.code = code;\n }\n}\nclass NavigationError extends RouterEvent {\n error;\n target;\n type = EventType.NavigationError;\n constructor(id, url, error, target) {\n super(id, url);\n this.error = error;\n this.target = target;\n }\n toString() {\n return `NavigationError(id: ${this.id}, url: '${this.url}', error: ${this.error})`;\n }\n}\nclass RoutesRecognized extends RouterEvent {\n urlAfterRedirects;\n state;\n type = EventType.RoutesRecognized;\n constructor(id, url, urlAfterRedirects, state) {\n super(id, url);\n this.urlAfterRedirects = urlAfterRedirects;\n this.state = state;\n }\n toString() {\n return `RoutesRecognized(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`;\n }\n}\nclass GuardsCheckStart extends RouterEvent {\n urlAfterRedirects;\n state;\n type = EventType.GuardsCheckStart;\n constructor(id, url, urlAfterRedirects, state) {\n super(id, url);\n this.urlAfterRedirects = urlAfterRedirects;\n this.state = state;\n }\n toString() {\n return `GuardsCheckStart(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`;\n }\n}\nclass GuardsCheckEnd extends RouterEvent {\n urlAfterRedirects;\n state;\n shouldActivate;\n type = EventType.GuardsCheckEnd;\n constructor(id, url, urlAfterRedirects, state, shouldActivate) {\n super(id, url);\n this.urlAfterRedirects = urlAfterRedirects;\n this.state = state;\n this.shouldActivate = shouldActivate;\n }\n toString() {\n return `GuardsCheckEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state}, shouldActivate: ${this.shouldActivate})`;\n }\n}\nclass ResolveStart extends RouterEvent {\n urlAfterRedirects;\n state;\n type = EventType.ResolveStart;\n constructor(id, url, urlAfterRedirects, state) {\n super(id, url);\n this.urlAfterRedirects = urlAfterRedirects;\n this.state = state;\n }\n toString() {\n return `ResolveStart(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`;\n }\n}\nclass ResolveEnd extends RouterEvent {\n urlAfterRedirects;\n state;\n type = EventType.ResolveEnd;\n constructor(id, url, urlAfterRedirects, state) {\n super(id, url);\n this.urlAfterRedirects = urlAfterRedirects;\n this.state = state;\n }\n toString() {\n return `ResolveEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`;\n }\n}\nclass RouteConfigLoadStart {\n route;\n type = EventType.RouteConfigLoadStart;\n constructor(route) {\n this.route = route;\n }\n toString() {\n return `RouteConfigLoadStart(path: ${this.route.path})`;\n }\n}\nclass RouteConfigLoadEnd {\n route;\n type = EventType.RouteConfigLoadEnd;\n constructor(route) {\n this.route = route;\n }\n toString() {\n return `RouteConfigLoadEnd(path: ${this.route.path})`;\n }\n}\nclass ChildActivationStart {\n snapshot;\n type = EventType.ChildActivationStart;\n constructor(snapshot) {\n this.snapshot = snapshot;\n }\n toString() {\n const path = this.snapshot.routeConfig && this.snapshot.routeConfig.path || '';\n return `ChildActivationStart(path: '${path}')`;\n }\n}\nclass ChildActivationEnd {\n snapshot;\n type = EventType.ChildActivationEnd;\n constructor(snapshot) {\n this.snapshot = snapshot;\n }\n toString() {\n const path = this.snapshot.routeConfig && this.snapshot.routeConfig.path || '';\n return `ChildActivationEnd(path: '${path}')`;\n }\n}\nclass ActivationStart {\n snapshot;\n type = EventType.ActivationStart;\n constructor(snapshot) {\n this.snapshot = snapshot;\n }\n toString() {\n const path = this.snapshot.routeConfig && this.snapshot.routeConfig.path || '';\n return `ActivationStart(path: '${path}')`;\n }\n}\nclass ActivationEnd {\n snapshot;\n type = EventType.ActivationEnd;\n constructor(snapshot) {\n this.snapshot = snapshot;\n }\n toString() {\n const path = this.snapshot.routeConfig && this.snapshot.routeConfig.path || '';\n return `ActivationEnd(path: '${path}')`;\n }\n}\nclass Scroll {\n routerEvent;\n position;\n anchor;\n scrollBehavior;\n type = EventType.Scroll;\n constructor(routerEvent, position, anchor, scrollBehavior) {\n this.routerEvent = routerEvent;\n this.position = position;\n this.anchor = anchor;\n this.scrollBehavior = scrollBehavior;\n }\n toString() {\n const pos = this.position ? `${this.position[0]}, ${this.position[1]}` : null;\n return `Scroll(anchor: '${this.anchor}', position: '${pos}')`;\n }\n}\nclass BeforeActivateRoutes {}\nclass BeforeRoutesRecognized {}\nclass RedirectRequest {\n url;\n navigationBehaviorOptions;\n constructor(url, navigationBehaviorOptions) {\n this.url = url;\n this.navigationBehaviorOptions = navigationBehaviorOptions;\n }\n}\nfunction isPublicRouterEvent(e) {\n return !(e instanceof BeforeActivateRoutes) && !(e instanceof RedirectRequest) && !(e instanceof BeforeRoutesRecognized);\n}\nfunction stringifyEvent(routerEvent) {\n switch (routerEvent.type) {\n case EventType.ActivationEnd:\n return `ActivationEnd(path: '${routerEvent.snapshot.routeConfig?.path || ''}')`;\n case EventType.ActivationStart:\n return `ActivationStart(path: '${routerEvent.snapshot.routeConfig?.path || ''}')`;\n case EventType.ChildActivationEnd:\n return `ChildActivationEnd(path: '${routerEvent.snapshot.routeConfig?.path || ''}')`;\n case EventType.ChildActivationStart:\n return `ChildActivationStart(path: '${routerEvent.snapshot.routeConfig?.path || ''}')`;\n case EventType.GuardsCheckEnd:\n return `GuardsCheckEnd(id: ${routerEvent.id}, url: '${routerEvent.url}', urlAfterRedirects: '${routerEvent.urlAfterRedirects}', state: ${routerEvent.state}, shouldActivate: ${routerEvent.shouldActivate})`;\n case EventType.GuardsCheckStart:\n return `GuardsCheckStart(id: ${routerEvent.id}, url: '${routerEvent.url}', urlAfterRedirects: '${routerEvent.urlAfterRedirects}', state: ${routerEvent.state})`;\n case EventType.NavigationCancel:\n return `NavigationCancel(id: ${routerEvent.id}, url: '${routerEvent.url}')`;\n case EventType.NavigationSkipped:\n return `NavigationSkipped(id: ${routerEvent.id}, url: '${routerEvent.url}')`;\n case EventType.NavigationEnd:\n return `NavigationEnd(id: ${routerEvent.id}, url: '${routerEvent.url}', urlAfterRedirects: '${routerEvent.urlAfterRedirects}')`;\n case EventType.NavigationError:\n return `NavigationError(id: ${routerEvent.id}, url: '${routerEvent.url}', error: ${routerEvent.error})`;\n case EventType.NavigationStart:\n return `NavigationStart(id: ${routerEvent.id}, url: '${routerEvent.url}')`;\n case EventType.ResolveEnd:\n return `ResolveEnd(id: ${routerEvent.id}, url: '${routerEvent.url}', urlAfterRedirects: '${routerEvent.urlAfterRedirects}', state: ${routerEvent.state})`;\n case EventType.ResolveStart:\n return `ResolveStart(id: ${routerEvent.id}, url: '${routerEvent.url}', urlAfterRedirects: '${routerEvent.urlAfterRedirects}', state: ${routerEvent.state})`;\n case EventType.RouteConfigLoadEnd:\n return `RouteConfigLoadEnd(path: ${routerEvent.route.path})`;\n case EventType.RouteConfigLoadStart:\n return `RouteConfigLoadStart(path: ${routerEvent.route.path})`;\n case EventType.RoutesRecognized:\n return `RoutesRecognized(id: ${routerEvent.id}, url: '${routerEvent.url}', urlAfterRedirects: '${routerEvent.urlAfterRedirects}', state: ${routerEvent.state})`;\n case EventType.Scroll:\n const pos = routerEvent.position ? `${routerEvent.position[0]}, ${routerEvent.position[1]}` : null;\n return `Scroll(anchor: '${routerEvent.anchor}', position: '${pos}')`;\n }\n}\nclass OutletContext {\n rootInjector;\n outlet = null;\n route = null;\n children;\n attachRef = null;\n get injector() {\n return this.route?.snapshot._environmentInjector ?? this.rootInjector;\n }\n constructor(rootInjector) {\n this.rootInjector = rootInjector;\n this.children = new ChildrenOutletContexts(this.rootInjector);\n }\n}\nlet ChildrenOutletContexts = /*#__PURE__*/(() => {\n class ChildrenOutletContexts {\n rootInjector;\n contexts = new Map();\n constructor(rootInjector) {\n this.rootInjector = rootInjector;\n }\n onChildOutletCreated(childName, outlet) {\n const context = this.getOrCreateContext(childName);\n context.outlet = outlet;\n this.contexts.set(childName, context);\n }\n onChildOutletDestroyed(childName) {\n const context = this.getContext(childName);\n if (context) {\n context.outlet = null;\n context.attachRef = null;\n }\n }\n onOutletDeactivated() {\n const contexts = this.contexts;\n this.contexts = new Map();\n return contexts;\n }\n onOutletReAttached(contexts) {\n this.contexts = contexts;\n }\n getOrCreateContext(childName) {\n let context = this.getContext(childName);\n if (!context) {\n context = new OutletContext(this.rootInjector);\n this.contexts.set(childName, context);\n }\n return context;\n }\n getContext(childName) {\n return this.contexts.get(childName) || null;\n }\n static ɵfac = function ChildrenOutletContexts_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || ChildrenOutletContexts)(i0.ɵɵinject(i0.EnvironmentInjector));\n };\n static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: ChildrenOutletContexts,\n factory: ChildrenOutletContexts.ɵfac,\n providedIn: 'root'\n });\n }\n return ChildrenOutletContexts;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nclass Tree {\n _root;\n constructor(root) {\n this._root = root;\n }\n get root() {\n return this._root.value;\n }\n parent(t) {\n const p = this.pathFromRoot(t);\n return p.length > 1 ? p[p.length - 2] : null;\n }\n children(t) {\n const n = findNode(t, this._root);\n return n ? n.children.map(t => t.value) : [];\n }\n firstChild(t) {\n const n = findNode(t, this._root);\n return n && n.children.length > 0 ? n.children[0].value : null;\n }\n siblings(t) {\n const p = findPath(t, this._root);\n if (p.length < 2) return [];\n const c = p[p.length - 2].children.map(c => c.value);\n return c.filter(cc => cc !== t);\n }\n pathFromRoot(t) {\n return findPath(t, this._root).map(s => s.value);\n }\n}\nfunction findNode(value, node) {\n if (value === node.value) return node;\n for (const child of node.children) {\n const node = findNode(value, child);\n if (node) return node;\n }\n return null;\n}\nfunction findPath(value, node) {\n if (value === node.value) return [node];\n for (const child of node.children) {\n const path = findPath(value, child);\n if (path.length) {\n path.unshift(node);\n return path;\n }\n }\n return [];\n}\nclass TreeNode {\n value;\n children;\n constructor(value, children) {\n this.value = value;\n this.children = children;\n }\n toString() {\n return `TreeNode(${this.value})`;\n }\n}\nfunction nodeChildrenAsMap(node) {\n const map = {};\n if (node) {\n node.children.forEach(child => map[child.value.outlet] = child);\n }\n return map;\n}\nclass RouterState extends Tree {\n snapshot;\n constructor(root, snapshot) {\n super(root);\n this.snapshot = snapshot;\n setRouterState(this, root);\n }\n toString() {\n return this.snapshot.toString();\n }\n}\nfunction createEmptyState(rootComponent, injector) {\n const snapshot = createEmptyStateSnapshot(rootComponent, injector);\n const emptyUrl = new BehaviorSubject([new UrlSegment('', {})]);\n const emptyParams = new BehaviorSubject({});\n const emptyData = new BehaviorSubject({});\n const emptyQueryParams = new BehaviorSubject({});\n const fragment = new BehaviorSubject('');\n const activated = new ActivatedRoute(emptyUrl, emptyParams, emptyQueryParams, fragment, emptyData, PRIMARY_OUTLET, rootComponent, snapshot.root);\n activated.snapshot = snapshot.root;\n return new RouterState(new TreeNode(activated, []), snapshot);\n}\nfunction createEmptyStateSnapshot(rootComponent, injector) {\n const emptyParams = {};\n const emptyData = {};\n const emptyQueryParams = {};\n const fragment = '';\n const activated = new ActivatedRouteSnapshot([], emptyParams, emptyQueryParams, fragment, emptyData, PRIMARY_OUTLET, rootComponent, null, {}, injector);\n return new RouterStateSnapshot('', new TreeNode(activated, []));\n}\nclass ActivatedRoute {\n urlSubject;\n paramsSubject;\n queryParamsSubject;\n fragmentSubject;\n dataSubject;\n outlet;\n component;\n snapshot;\n _futureSnapshot;\n _routerState;\n _paramMap;\n _queryParamMap;\n title;\n url;\n params;\n queryParams;\n fragment;\n data;\n constructor(urlSubject, paramsSubject, queryParamsSubject, fragmentSubject, dataSubject, outlet, component, futureSnapshot) {\n this.urlSubject = urlSubject;\n this.paramsSubject = paramsSubject;\n this.queryParamsSubject = queryParamsSubject;\n this.fragmentSubject = fragmentSubject;\n this.dataSubject = dataSubject;\n this.outlet = outlet;\n this.component = component;\n this._futureSnapshot = futureSnapshot;\n this.title = this.dataSubject?.pipe(map(d => d[RouteTitleKey])) ?? of(undefined);\n this.url = urlSubject;\n this.params = paramsSubject;\n this.queryParams = queryParamsSubject;\n this.fragment = fragmentSubject;\n this.data = dataSubject;\n }\n get routeConfig() {\n return this._futureSnapshot.routeConfig;\n }\n get root() {\n return this._routerState.root;\n }\n get parent() {\n return this._routerState.parent(this);\n }\n get firstChild() {\n return this._routerState.firstChild(this);\n }\n get children() {\n return this._routerState.children(this);\n }\n get pathFromRoot() {\n return this._routerState.pathFromRoot(this);\n }\n get paramMap() {\n this._paramMap ??= this.params.pipe(map(p => convertToParamMap(p)));\n return this._paramMap;\n }\n get queryParamMap() {\n this._queryParamMap ??= this.queryParams.pipe(map(p => convertToParamMap(p)));\n return this._queryParamMap;\n }\n toString() {\n return this.snapshot ? this.snapshot.toString() : `Future(${this._futureSnapshot})`;\n }\n}\nfunction getInherited(route, parent, paramsInheritanceStrategy = 'emptyOnly') {\n let inherited;\n const {\n routeConfig\n } = route;\n if (parent !== null && (paramsInheritanceStrategy === 'always' || routeConfig?.path === '' || !parent.component && !parent.routeConfig?.loadComponent)) {\n inherited = {\n params: {\n ...parent.params,\n ...route.params\n },\n data: {\n ...parent.data,\n ...route.data\n },\n resolve: {\n ...route.data,\n ...parent.data,\n ...routeConfig?.data,\n ...route._resolvedData\n }\n };\n } else {\n inherited = {\n params: {\n ...route.params\n },\n data: {\n ...route.data\n },\n resolve: {\n ...route.data,\n ...(route._resolvedData ?? {})\n }\n };\n }\n if (routeConfig && hasStaticTitle(routeConfig)) {\n inherited.resolve[RouteTitleKey] = routeConfig.title;\n }\n return inherited;\n}\nclass ActivatedRouteSnapshot {\n url;\n params;\n queryParams;\n fragment;\n data;\n outlet;\n component;\n routeConfig;\n _resolve;\n _resolvedData;\n _routerState;\n _paramMap;\n _queryParamMap;\n _environmentInjector;\n get title() {\n return this.data?.[RouteTitleKey];\n }\n constructor(url, params, queryParams, fragment, data, outlet, component, routeConfig, resolve, environmentInjector) {\n this.url = url;\n this.params = params;\n this.queryParams = queryParams;\n this.fragment = fragment;\n this.data = data;\n this.outlet = outlet;\n this.component = component;\n this.routeConfig = routeConfig;\n this._resolve = resolve;\n this._environmentInjector = environmentInjector;\n }\n get root() {\n return this._routerState.root;\n }\n get parent() {\n return this._routerState.parent(this);\n }\n get firstChild() {\n return this._routerState.firstChild(this);\n }\n get children() {\n return this._routerState.children(this);\n }\n get pathFromRoot() {\n return this._routerState.pathFromRoot(this);\n }\n get paramMap() {\n this._paramMap ??= convertToParamMap(this.params);\n return this._paramMap;\n }\n get queryParamMap() {\n this._queryParamMap ??= convertToParamMap(this.queryParams);\n return this._queryParamMap;\n }\n toString() {\n const url = this.url.map(segment => segment.toString()).join('/');\n const matched = this.routeConfig ? this.routeConfig.path : '';\n return `Route(url:'${url}', path:'${matched}')`;\n }\n}\nclass RouterStateSnapshot extends Tree {\n url;\n constructor(url, root) {\n super(root);\n this.url = url;\n setRouterState(this, root);\n }\n toString() {\n return serializeNode(this._root);\n }\n}\nfunction setRouterState(state, node) {\n node.value._routerState = state;\n node.children.forEach(c => setRouterState(state, c));\n}\nfunction serializeNode(node) {\n const c = node.children.length > 0 ? ` { ${node.children.map(serializeNode).join(', ')} } ` : '';\n return `${node.value}${c}`;\n}\nfunction advanceActivatedRoute(route) {\n if (route.snapshot) {\n const currentSnapshot = route.snapshot;\n const nextSnapshot = route._futureSnapshot;\n route.snapshot = nextSnapshot;\n if (!shallowEqual(currentSnapshot.queryParams, nextSnapshot.queryParams)) {\n route.queryParamsSubject.next(nextSnapshot.queryParams);\n }\n if (currentSnapshot.fragment !== nextSnapshot.fragment) {\n route.fragmentSubject.next(nextSnapshot.fragment);\n }\n if (!shallowEqual(currentSnapshot.params, nextSnapshot.params)) {\n route.paramsSubject.next(nextSnapshot.params);\n }\n if (!shallowEqualArrays(currentSnapshot.url, nextSnapshot.url)) {\n route.urlSubject.next(nextSnapshot.url);\n }\n if (!shallowEqual(currentSnapshot.data, nextSnapshot.data)) {\n route.dataSubject.next(nextSnapshot.data);\n }\n } else {\n route.snapshot = route._futureSnapshot;\n route.dataSubject.next(route._futureSnapshot.data);\n }\n}\nfunction equalParamsAndUrlSegments(a, b) {\n const equalUrlParams = shallowEqual(a.params, b.params) && equalSegments(a.url, b.url);\n const parentsMismatch = !a.parent !== !b.parent;\n return equalUrlParams && !parentsMismatch && (!a.parent || equalParamsAndUrlSegments(a.parent, b.parent));\n}\nfunction hasStaticTitle(config) {\n return typeof config.title === 'string' || config.title === null;\n}\nconst ROUTER_OUTLET_DATA = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'RouterOutlet data' : '');\nlet RouterOutlet = /*#__PURE__*/(() => {\n class RouterOutlet {\n activated = null;\n get activatedComponentRef() {\n return this.activated;\n }\n _activatedRoute = null;\n name = PRIMARY_OUTLET;\n activateEvents = new EventEmitter();\n deactivateEvents = new EventEmitter();\n attachEvents = new EventEmitter();\n detachEvents = new EventEmitter();\n routerOutletData = input(...(ngDevMode ? [undefined, {\n debugName: \"routerOutletData\"\n }] : []));\n parentContexts = inject(ChildrenOutletContexts);\n location = inject(ViewContainerRef);\n changeDetector = inject(ChangeDetectorRef);\n inputBinder = inject(INPUT_BINDER, {\n optional: true\n });\n supportsBindingToComponentInputs = true;\n ngOnChanges(changes) {\n if (changes['name']) {\n const {\n firstChange,\n previousValue\n } = changes['name'];\n if (firstChange) {\n return;\n }\n if (this.isTrackedInParentContexts(previousValue)) {\n this.deactivate();\n this.parentContexts.onChildOutletDestroyed(previousValue);\n }\n this.initializeOutletWithName();\n }\n }\n ngOnDestroy() {\n if (this.isTrackedInParentContexts(this.name)) {\n this.parentContexts.onChildOutletDestroyed(this.name);\n }\n this.inputBinder?.unsubscribeFromRouteData(this);\n }\n isTrackedInParentContexts(outletName) {\n return this.parentContexts.getContext(outletName)?.outlet === this;\n }\n ngOnInit() {\n this.initializeOutletWithName();\n }\n initializeOutletWithName() {\n this.parentContexts.onChildOutletCreated(this.name, this);\n if (this.activated) {\n return;\n }\n const context = this.parentContexts.getContext(this.name);\n if (context?.route) {\n if (context.attachRef) {\n this.attach(context.attachRef, context.route);\n } else {\n this.activateWith(context.route, context.injector);\n }\n }\n }\n get isActivated() {\n return !!this.activated;\n }\n get component() {\n if (!this.activated) throw new _RuntimeError(4012, (typeof ngDevMode === 'undefined' || ngDevMode) && 'Outlet is not activated');\n return this.activated.instance;\n }\n get activatedRoute() {\n if (!this.activated) throw new _RuntimeError(4012, (typeof ngDevMode === 'undefined' || ngDevMode) && 'Outlet is not activated');\n return this._activatedRoute;\n }\n get activatedRouteData() {\n if (this._activatedRoute) {\n return this._activatedRoute.snapshot.data;\n }\n return {};\n }\n detach() {\n if (!this.activated) throw new _RuntimeError(4012, (typeof ngDevMode === 'undefined' || ngDevMode) && 'Outlet is not activated');\n this.location.detach();\n const cmp = this.activated;\n this.activated = null;\n this._activatedRoute = null;\n this.detachEvents.emit(cmp.instance);\n return cmp;\n }\n attach(ref, activatedRoute) {\n this.activated = ref;\n this._activatedRoute = activatedRoute;\n this.location.insert(ref.hostView);\n this.inputBinder?.bindActivatedRouteToOutletComponent(this);\n this.attachEvents.emit(ref.instance);\n }\n deactivate() {\n if (this.activated) {\n const c = this.component;\n this.activated.destroy();\n this.activated = null;\n this._activatedRoute = null;\n this.deactivateEvents.emit(c);\n }\n }\n activateWith(activatedRoute, environmentInjector) {\n if (this.isActivated) {\n throw new _RuntimeError(4013, (typeof ngDevMode === 'undefined' || ngDevMode) && 'Cannot activate an already activated outlet');\n }\n this._activatedRoute = activatedRoute;\n const location = this.location;\n const snapshot = activatedRoute.snapshot;\n const component = snapshot.component;\n const childContexts = this.parentContexts.getOrCreateContext(this.name).children;\n const injector = new OutletInjector(activatedRoute, childContexts, location.injector, this.routerOutletData);\n this.activated = location.createComponent(component, {\n index: location.length,\n injector,\n environmentInjector: environmentInjector\n });\n this.changeDetector.markForCheck();\n this.inputBinder?.bindActivatedRouteToOutletComponent(this);\n this.activateEvents.emit(this.activated.instance);\n }\n static ɵfac = function RouterOutlet_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || RouterOutlet)();\n };\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: RouterOutlet,\n selectors: [[\"router-outlet\"]],\n inputs: {\n name: \"name\",\n routerOutletData: [1, \"routerOutletData\"]\n },\n outputs: {\n activateEvents: \"activate\",\n deactivateEvents: \"deactivate\",\n attachEvents: \"attach\",\n detachEvents: \"detach\"\n },\n exportAs: [\"outlet\"],\n features: [i0.ɵɵNgOnChangesFeature]\n });\n }\n return RouterOutlet;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nclass OutletInjector {\n route;\n childContexts;\n parent;\n outletData;\n constructor(route, childContexts, parent, outletData) {\n this.route = route;\n this.childContexts = childContexts;\n this.parent = parent;\n this.outletData = outletData;\n }\n get(token, notFoundValue) {\n if (token === ActivatedRoute) {\n return this.route;\n }\n if (token === ChildrenOutletContexts) {\n return this.childContexts;\n }\n if (token === ROUTER_OUTLET_DATA) {\n return this.outletData;\n }\n return this.parent.get(token, notFoundValue);\n }\n}\nconst INPUT_BINDER = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'Router Input Binder' : '');\nlet RoutedComponentInputBinder = /*#__PURE__*/(() => {\n class RoutedComponentInputBinder {\n outletDataSubscriptions = new Map();\n bindActivatedRouteToOutletComponent(outlet) {\n this.unsubscribeFromRouteData(outlet);\n this.subscribeToRouteData(outlet);\n }\n unsubscribeFromRouteData(outlet) {\n this.outletDataSubscriptions.get(outlet)?.unsubscribe();\n this.outletDataSubscriptions.delete(outlet);\n }\n subscribeToRouteData(outlet) {\n const {\n activatedRoute\n } = outlet;\n const dataSubscription = combineLatest([activatedRoute.queryParams, activatedRoute.params, activatedRoute.data]).pipe(switchMap(([queryParams, params, data], index) => {\n data = {\n ...queryParams,\n ...params,\n ...data\n };\n if (index === 0) {\n return of(data);\n }\n return Promise.resolve(data);\n })).subscribe(data => {\n if (!outlet.isActivated || !outlet.activatedComponentRef || outlet.activatedRoute !== activatedRoute || activatedRoute.component === null) {\n this.unsubscribeFromRouteData(outlet);\n return;\n }\n const mirror = reflectComponentType(activatedRoute.component);\n if (!mirror) {\n this.unsubscribeFromRouteData(outlet);\n return;\n }\n for (const {\n templateName\n } of mirror.inputs) {\n outlet.activatedComponentRef.setInput(templateName, data[templateName]);\n }\n });\n this.outletDataSubscriptions.set(outlet, dataSubscription);\n }\n static ɵfac = function RoutedComponentInputBinder_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || RoutedComponentInputBinder)();\n };\n static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: RoutedComponentInputBinder,\n factory: RoutedComponentInputBinder.ɵfac\n });\n }\n return RoutedComponentInputBinder;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet ɵEmptyOutletComponent = /*#__PURE__*/(() => {\n class ɵEmptyOutletComponent {\n static ɵfac = function ɵEmptyOutletComponent_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || ɵEmptyOutletComponent)();\n };\n static ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: ɵEmptyOutletComponent,\n selectors: [[\"ng-component\"]],\n exportAs: [\"emptyRouterOutlet\"],\n decls: 1,\n vars: 0,\n template: function _EmptyOutletComponent_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelement(0, \"router-outlet\");\n }\n },\n dependencies: [RouterOutlet],\n encapsulation: 2\n });\n }\n return ɵEmptyOutletComponent;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nfunction standardizeConfig(r) {\n const children = r.children && r.children.map(standardizeConfig);\n const c = children ? {\n ...r,\n children\n } : {\n ...r\n };\n if (!c.component && !c.loadComponent && (children || c.loadChildren) && c.outlet && c.outlet !== PRIMARY_OUTLET) {\n c.component = ɵEmptyOutletComponent;\n }\n return c;\n}\nfunction createRouterState(routeReuseStrategy, curr, prevState) {\n const root = createNode(routeReuseStrategy, curr._root, prevState ? prevState._root : undefined);\n return new RouterState(root, curr);\n}\nfunction createNode(routeReuseStrategy, curr, prevState) {\n if (prevState && routeReuseStrategy.shouldReuseRoute(curr.value, prevState.value.snapshot)) {\n const value = prevState.value;\n value._futureSnapshot = curr.value;\n const children = createOrReuseChildren(routeReuseStrategy, curr, prevState);\n return new TreeNode(value, children);\n } else {\n if (routeReuseStrategy.shouldAttach(curr.value)) {\n const detachedRouteHandle = routeReuseStrategy.retrieve(curr.value);\n if (detachedRouteHandle !== null) {\n const tree = detachedRouteHandle.route;\n tree.value._futureSnapshot = curr.value;\n tree.children = curr.children.map(c => createNode(routeReuseStrategy, c));\n return tree;\n }\n }\n const value = createActivatedRoute(curr.value);\n const children = curr.children.map(c => createNode(routeReuseStrategy, c));\n return new TreeNode(value, children);\n }\n}\nfunction createOrReuseChildren(routeReuseStrategy, curr, prevState) {\n return curr.children.map(child => {\n for (const p of prevState.children) {\n if (routeReuseStrategy.shouldReuseRoute(child.value, p.value.snapshot)) {\n return createNode(routeReuseStrategy, child, p);\n }\n }\n return createNode(routeReuseStrategy, child);\n });\n}\nfunction createActivatedRoute(c) {\n return new ActivatedRoute(new BehaviorSubject(c.url), new BehaviorSubject(c.params), new BehaviorSubject(c.queryParams), new BehaviorSubject(c.fragment), new BehaviorSubject(c.data), c.outlet, c.component, c);\n}\nclass RedirectCommand {\n redirectTo;\n navigationBehaviorOptions;\n constructor(redirectTo, navigationBehaviorOptions) {\n this.redirectTo = redirectTo;\n this.navigationBehaviorOptions = navigationBehaviorOptions;\n }\n}\nconst NAVIGATION_CANCELING_ERROR = 'ngNavigationCancelingError';\nfunction redirectingNavigationError(urlSerializer, redirect) {\n const {\n redirectTo,\n navigationBehaviorOptions\n } = isUrlTree(redirect) ? {\n redirectTo: redirect,\n navigationBehaviorOptions: undefined\n } : redirect;\n const error = navigationCancelingError(ngDevMode && `Redirecting to \"${urlSerializer.serialize(redirectTo)}\"`, NavigationCancellationCode.Redirect);\n error.url = redirectTo;\n error.navigationBehaviorOptions = navigationBehaviorOptions;\n return error;\n}\nfunction navigationCancelingError(message, code) {\n const error = new Error(`NavigationCancelingError: ${message || ''}`);\n error[NAVIGATION_CANCELING_ERROR] = true;\n error.cancellationCode = code;\n return error;\n}\nfunction isRedirectingNavigationCancelingError(error) {\n return isNavigationCancelingError(error) && isUrlTree(error.url);\n}\nfunction isNavigationCancelingError(error) {\n return !!error && error[NAVIGATION_CANCELING_ERROR];\n}\nlet warnedAboutUnsupportedInputBinding = false;\nclass ActivateRoutes {\n routeReuseStrategy;\n futureState;\n currState;\n forwardEvent;\n inputBindingEnabled;\n constructor(routeReuseStrategy, futureState, currState, forwardEvent, inputBindingEnabled) {\n this.routeReuseStrategy = routeReuseStrategy;\n this.futureState = futureState;\n this.currState = currState;\n this.forwardEvent = forwardEvent;\n this.inputBindingEnabled = inputBindingEnabled;\n }\n activate(parentContexts) {\n const futureRoot = this.futureState._root;\n const currRoot = this.currState ? this.currState._root : null;\n this.deactivateChildRoutes(futureRoot, currRoot, parentContexts);\n advanceActivatedRoute(this.futureState.root);\n this.activateChildRoutes(futureRoot, currRoot, parentContexts);\n }\n deactivateChildRoutes(futureNode, currNode, contexts) {\n const children = nodeChildrenAsMap(currNode);\n futureNode.children.forEach(futureChild => {\n const childOutletName = futureChild.value.outlet;\n this.deactivateRoutes(futureChild, children[childOutletName], contexts);\n delete children[childOutletName];\n });\n Object.values(children).forEach(v => {\n this.deactivateRouteAndItsChildren(v, contexts);\n });\n }\n deactivateRoutes(futureNode, currNode, parentContext) {\n const future = futureNode.value;\n const curr = currNode ? currNode.value : null;\n if (future === curr) {\n if (future.component) {\n const context = parentContext.getContext(future.outlet);\n if (context) {\n this.deactivateChildRoutes(futureNode, currNode, context.children);\n }\n } else {\n this.deactivateChildRoutes(futureNode, currNode, parentContext);\n }\n } else {\n if (curr) {\n this.deactivateRouteAndItsChildren(currNode, parentContext);\n }\n }\n }\n deactivateRouteAndItsChildren(route, parentContexts) {\n if (route.value.component && this.routeReuseStrategy.shouldDetach(route.value.snapshot)) {\n this.detachAndStoreRouteSubtree(route, parentContexts);\n } else {\n this.deactivateRouteAndOutlet(route, parentContexts);\n }\n }\n detachAndStoreRouteSubtree(route, parentContexts) {\n const context = parentContexts.getContext(route.value.outlet);\n const contexts = context && route.value.component ? context.children : parentContexts;\n const children = nodeChildrenAsMap(route);\n for (const treeNode of Object.values(children)) {\n this.deactivateRouteAndItsChildren(treeNode, contexts);\n }\n if (context && context.outlet) {\n const componentRef = context.outlet.detach();\n const contexts = context.children.onOutletDeactivated();\n this.routeReuseStrategy.store(route.value.snapshot, {\n componentRef,\n route,\n contexts\n });\n }\n }\n deactivateRouteAndOutlet(route, parentContexts) {\n const context = parentContexts.getContext(route.value.outlet);\n const contexts = context && route.value.component ? context.children : parentContexts;\n const children = nodeChildrenAsMap(route);\n for (const treeNode of Object.values(children)) {\n this.deactivateRouteAndItsChildren(treeNode, contexts);\n }\n if (context) {\n if (context.outlet) {\n context.outlet.deactivate();\n context.children.onOutletDeactivated();\n }\n context.attachRef = null;\n context.route = null;\n }\n }\n activateChildRoutes(futureNode, currNode, contexts) {\n const children = nodeChildrenAsMap(currNode);\n futureNode.children.forEach(c => {\n this.activateRoutes(c, children[c.value.outlet], contexts);\n this.forwardEvent(new ActivationEnd(c.value.snapshot));\n });\n if (futureNode.children.length) {\n this.forwardEvent(new ChildActivationEnd(futureNode.value.snapshot));\n }\n }\n activateRoutes(futureNode, currNode, parentContexts) {\n const future = futureNode.value;\n const curr = currNode ? currNode.value : null;\n advanceActivatedRoute(future);\n if (future === curr) {\n if (future.component) {\n const context = parentContexts.getOrCreateContext(future.outlet);\n this.activateChildRoutes(futureNode, currNode, context.children);\n } else {\n this.activateChildRoutes(futureNode, currNode, parentContexts);\n }\n } else {\n if (future.component) {\n const context = parentContexts.getOrCreateContext(future.outlet);\n if (this.routeReuseStrategy.shouldAttach(future.snapshot)) {\n const stored = this.routeReuseStrategy.retrieve(future.snapshot);\n this.routeReuseStrategy.store(future.snapshot, null);\n context.children.onOutletReAttached(stored.contexts);\n context.attachRef = stored.componentRef;\n context.route = stored.route.value;\n if (context.outlet) {\n context.outlet.attach(stored.componentRef, stored.route.value);\n }\n advanceActivatedRoute(stored.route.value);\n this.activateChildRoutes(futureNode, null, context.children);\n } else {\n context.attachRef = null;\n context.route = future;\n if (context.outlet) {\n context.outlet.activateWith(future, context.injector);\n }\n this.activateChildRoutes(futureNode, null, context.children);\n }\n } else {\n this.activateChildRoutes(futureNode, null, parentContexts);\n }\n }\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n const context = parentContexts.getOrCreateContext(future.outlet);\n const outlet = context.outlet;\n if (outlet && this.inputBindingEnabled && !outlet.supportsBindingToComponentInputs && !warnedAboutUnsupportedInputBinding) {\n console.warn(`'withComponentInputBinding' feature is enabled but ` + `this application is using an outlet that may not support binding to component inputs.`);\n warnedAboutUnsupportedInputBinding = true;\n }\n }\n }\n}\nclass CanActivate {\n path;\n route;\n constructor(path) {\n this.path = path;\n this.route = this.path[this.path.length - 1];\n }\n}\nclass CanDeactivate {\n component;\n route;\n constructor(component, route) {\n this.component = component;\n this.route = route;\n }\n}\nfunction getAllRouteGuards(future, curr, parentContexts) {\n const futureRoot = future._root;\n const currRoot = curr ? curr._root : null;\n return getChildRouteGuards(futureRoot, currRoot, parentContexts, [futureRoot.value]);\n}\nfunction getCanActivateChild(p) {\n const canActivateChild = p.routeConfig ? p.routeConfig.canActivateChild : null;\n if (!canActivateChild || canActivateChild.length === 0) return null;\n return {\n node: p,\n guards: canActivateChild\n };\n}\nfunction getTokenOrFunctionIdentity(tokenOrFunction, injector) {\n const NOT_FOUND = Symbol();\n const result = injector.get(tokenOrFunction, NOT_FOUND);\n if (result === NOT_FOUND) {\n if (typeof tokenOrFunction === 'function' && !_isInjectable(tokenOrFunction)) {\n return tokenOrFunction;\n } else {\n return injector.get(tokenOrFunction);\n }\n }\n return result;\n}\nfunction getChildRouteGuards(futureNode, currNode, contexts, futurePath, checks = {\n canDeactivateChecks: [],\n canActivateChecks: []\n}) {\n const prevChildren = nodeChildrenAsMap(currNode);\n futureNode.children.forEach(c => {\n getRouteGuards(c, prevChildren[c.value.outlet], contexts, futurePath.concat([c.value]), checks);\n delete prevChildren[c.value.outlet];\n });\n Object.entries(prevChildren).forEach(([k, v]) => deactivateRouteAndItsChildren(v, contexts.getContext(k), checks));\n return checks;\n}\nfunction getRouteGuards(futureNode, currNode, parentContexts, futurePath, checks = {\n canDeactivateChecks: [],\n canActivateChecks: []\n}) {\n const future = futureNode.value;\n const curr = currNode ? currNode.value : null;\n const context = parentContexts ? parentContexts.getContext(futureNode.value.outlet) : null;\n if (curr && future.routeConfig === curr.routeConfig) {\n const shouldRun = shouldRunGuardsAndResolvers(curr, future, future.routeConfig.runGuardsAndResolvers);\n if (shouldRun) {\n checks.canActivateChecks.push(new CanActivate(futurePath));\n } else {\n future.data = curr.data;\n future._resolvedData = curr._resolvedData;\n }\n if (future.component) {\n getChildRouteGuards(futureNode, currNode, context ? context.children : null, futurePath, checks);\n } else {\n getChildRouteGuards(futureNode, currNode, parentContexts, futurePath, checks);\n }\n if (shouldRun && context && context.outlet && context.outlet.isActivated) {\n checks.canDeactivateChecks.push(new CanDeactivate(context.outlet.component, curr));\n }\n } else {\n if (curr) {\n deactivateRouteAndItsChildren(currNode, context, checks);\n }\n checks.canActivateChecks.push(new CanActivate(futurePath));\n if (future.component) {\n getChildRouteGuards(futureNode, null, context ? context.children : null, futurePath, checks);\n } else {\n getChildRouteGuards(futureNode, null, parentContexts, futurePath, checks);\n }\n }\n return checks;\n}\nfunction shouldRunGuardsAndResolvers(curr, future, mode) {\n if (typeof mode === 'function') {\n return runInInjectionContext(future._environmentInjector, () => mode(curr, future));\n }\n switch (mode) {\n case 'pathParamsChange':\n return !equalPath(curr.url, future.url);\n case 'pathParamsOrQueryParamsChange':\n return !equalPath(curr.url, future.url) || !shallowEqual(curr.queryParams, future.queryParams);\n case 'always':\n return true;\n case 'paramsOrQueryParamsChange':\n return !equalParamsAndUrlSegments(curr, future) || !shallowEqual(curr.queryParams, future.queryParams);\n case 'paramsChange':\n default:\n return !equalParamsAndUrlSegments(curr, future);\n }\n}\nfunction deactivateRouteAndItsChildren(route, context, checks) {\n const children = nodeChildrenAsMap(route);\n const r = route.value;\n Object.entries(children).forEach(([childName, node]) => {\n if (!r.component) {\n deactivateRouteAndItsChildren(node, context, checks);\n } else if (context) {\n deactivateRouteAndItsChildren(node, context.children.getContext(childName), checks);\n } else {\n deactivateRouteAndItsChildren(node, null, checks);\n }\n });\n if (!r.component) {\n checks.canDeactivateChecks.push(new CanDeactivate(null, r));\n } else if (context && context.outlet && context.outlet.isActivated) {\n checks.canDeactivateChecks.push(new CanDeactivate(context.outlet.component, r));\n } else {\n checks.canDeactivateChecks.push(new CanDeactivate(null, r));\n }\n}\nfunction isFunction(v) {\n return typeof v === 'function';\n}\nfunction isBoolean(v) {\n return typeof v === 'boolean';\n}\nfunction isCanLoad(guard) {\n return guard && isFunction(guard.canLoad);\n}\nfunction isCanActivate(guard) {\n return guard && isFunction(guard.canActivate);\n}\nfunction isCanActivateChild(guard) {\n return guard && isFunction(guard.canActivateChild);\n}\nfunction isCanDeactivate(guard) {\n return guard && isFunction(guard.canDeactivate);\n}\nfunction isCanMatch(guard) {\n return guard && isFunction(guard.canMatch);\n}\nfunction isEmptyError(e) {\n return e instanceof EmptyError || e?.name === 'EmptyError';\n}\nconst INITIAL_VALUE = /* @__PURE__ */Symbol('INITIAL_VALUE');\nfunction prioritizedGuardValue() {\n return switchMap(obs => {\n return combineLatest(obs.map(o => o.pipe(take(1), startWith(INITIAL_VALUE)))).pipe(map(results => {\n for (const result of results) {\n if (result === true) {\n continue;\n } else if (result === INITIAL_VALUE) {\n return INITIAL_VALUE;\n } else if (result === false || isRedirect(result)) {\n return result;\n }\n }\n return true;\n }), filter(item => item !== INITIAL_VALUE), take(1));\n });\n}\nfunction isRedirect(val) {\n return isUrlTree(val) || val instanceof RedirectCommand;\n}\nfunction abortSignalToObservable(signal) {\n if (signal.aborted) {\n return of(undefined).pipe(take(1));\n }\n return new Observable(subscriber => {\n const handler = () => {\n subscriber.next();\n subscriber.complete();\n };\n signal.addEventListener('abort', handler);\n return () => signal.removeEventListener('abort', handler);\n });\n}\nfunction takeUntilAbort(signal) {\n return takeUntil(abortSignalToObservable(signal));\n}\nfunction checkGuards(forwardEvent) {\n return mergeMap(t => {\n const {\n targetSnapshot,\n currentSnapshot,\n guards: {\n canActivateChecks,\n canDeactivateChecks\n }\n } = t;\n if (canDeactivateChecks.length === 0 && canActivateChecks.length === 0) {\n return of({\n ...t,\n guardsResult: true\n });\n }\n return runCanDeactivateChecks(canDeactivateChecks, targetSnapshot, currentSnapshot).pipe(mergeMap(canDeactivate => {\n return canDeactivate && isBoolean(canDeactivate) ? runCanActivateChecks(targetSnapshot, canActivateChecks, forwardEvent) : of(canDeactivate);\n }), map(guardsResult => ({\n ...t,\n guardsResult\n })));\n });\n}\nfunction runCanDeactivateChecks(checks, futureRSS, currRSS) {\n return from(checks).pipe(mergeMap(check => runCanDeactivate(check.component, check.route, currRSS, futureRSS)), first(result => {\n return result !== true;\n }, true));\n}\nfunction runCanActivateChecks(futureSnapshot, checks, forwardEvent) {\n return from(checks).pipe(concatMap(check => {\n return concat(fireChildActivationStart(check.route.parent, forwardEvent), fireActivationStart(check.route, forwardEvent), runCanActivateChild(futureSnapshot, check.path), runCanActivate(futureSnapshot, check.route));\n }), first(result => {\n return result !== true;\n }, true));\n}\nfunction fireActivationStart(snapshot, forwardEvent) {\n if (snapshot !== null && forwardEvent) {\n forwardEvent(new ActivationStart(snapshot));\n }\n return of(true);\n}\nfunction fireChildActivationStart(snapshot, forwardEvent) {\n if (snapshot !== null && forwardEvent) {\n forwardEvent(new ChildActivationStart(snapshot));\n }\n return of(true);\n}\nfunction runCanActivate(futureRSS, futureARS) {\n const canActivate = futureARS.routeConfig ? futureARS.routeConfig.canActivate : null;\n if (!canActivate || canActivate.length === 0) return of(true);\n const canActivateObservables = canActivate.map(canActivate => {\n return defer(() => {\n const closestInjector = futureARS._environmentInjector;\n const guard = getTokenOrFunctionIdentity(canActivate, closestInjector);\n const guardVal = isCanActivate(guard) ? guard.canActivate(futureARS, futureRSS) : runInInjectionContext(closestInjector, () => guard(futureARS, futureRSS));\n return wrapIntoObservable(guardVal).pipe(first());\n });\n });\n return of(canActivateObservables).pipe(prioritizedGuardValue());\n}\nfunction runCanActivateChild(futureRSS, path) {\n const futureARS = path[path.length - 1];\n const canActivateChildGuards = path.slice(0, path.length - 1).reverse().map(p => getCanActivateChild(p)).filter(_ => _ !== null);\n const canActivateChildGuardsMapped = canActivateChildGuards.map(d => {\n return defer(() => {\n const guardsMapped = d.guards.map(canActivateChild => {\n const closestInjector = d.node._environmentInjector;\n const guard = getTokenOrFunctionIdentity(canActivateChild, closestInjector);\n const guardVal = isCanActivateChild(guard) ? guard.canActivateChild(futureARS, futureRSS) : runInInjectionContext(closestInjector, () => guard(futureARS, futureRSS));\n return wrapIntoObservable(guardVal).pipe(first());\n });\n return of(guardsMapped).pipe(prioritizedGuardValue());\n });\n });\n return of(canActivateChildGuardsMapped).pipe(prioritizedGuardValue());\n}\nfunction runCanDeactivate(component, currARS, currRSS, futureRSS) {\n const canDeactivate = currARS && currARS.routeConfig ? currARS.routeConfig.canDeactivate : null;\n if (!canDeactivate || canDeactivate.length === 0) return of(true);\n const canDeactivateObservables = canDeactivate.map(c => {\n const closestInjector = currARS._environmentInjector;\n const guard = getTokenOrFunctionIdentity(c, closestInjector);\n const guardVal = isCanDeactivate(guard) ? guard.canDeactivate(component, currARS, currRSS, futureRSS) : runInInjectionContext(closestInjector, () => guard(component, currARS, currRSS, futureRSS));\n return wrapIntoObservable(guardVal).pipe(first());\n });\n return of(canDeactivateObservables).pipe(prioritizedGuardValue());\n}\nfunction runCanLoadGuards(injector, route, segments, urlSerializer, abortSignal) {\n const canLoad = route.canLoad;\n if (canLoad === undefined || canLoad.length === 0) {\n return of(true);\n }\n const canLoadObservables = canLoad.map(injectionToken => {\n const guard = getTokenOrFunctionIdentity(injectionToken, injector);\n const guardVal = isCanLoad(guard) ? guard.canLoad(route, segments) : runInInjectionContext(injector, () => guard(route, segments));\n const obs$ = wrapIntoObservable(guardVal);\n return abortSignal ? obs$.pipe(takeUntilAbort(abortSignal)) : obs$;\n });\n return of(canLoadObservables).pipe(prioritizedGuardValue(), redirectIfUrlTree(urlSerializer));\n}\nfunction redirectIfUrlTree(urlSerializer) {\n return pipe(tap(result => {\n if (typeof result === 'boolean') return;\n throw redirectingNavigationError(urlSerializer, result);\n }), map(result => result === true));\n}\nfunction runCanMatchGuards(injector, route, segments, urlSerializer, currentSnapshot, abortSignal) {\n const canMatch = route.canMatch;\n if (!canMatch || canMatch.length === 0) return of(true);\n const canMatchObservables = canMatch.map(injectionToken => {\n const guard = getTokenOrFunctionIdentity(injectionToken, injector);\n const guardVal = isCanMatch(guard) ? guard.canMatch(route, segments, currentSnapshot) : runInInjectionContext(injector, () => guard(route, segments, currentSnapshot));\n return wrapIntoObservable(guardVal).pipe(takeUntilAbort(abortSignal));\n });\n return of(canMatchObservables).pipe(prioritizedGuardValue(), redirectIfUrlTree(urlSerializer));\n}\nclass NoMatch extends Error {\n segmentGroup;\n constructor(segmentGroup) {\n super();\n this.segmentGroup = segmentGroup || null;\n Object.setPrototypeOf(this, NoMatch.prototype);\n }\n}\nclass AbsoluteRedirect extends Error {\n urlTree;\n constructor(urlTree) {\n super();\n this.urlTree = urlTree;\n Object.setPrototypeOf(this, AbsoluteRedirect.prototype);\n }\n}\nfunction namedOutletsRedirect(redirectTo) {\n throw new _RuntimeError(4000, (typeof ngDevMode === 'undefined' || ngDevMode) && `Only absolute redirects can have named outlets. redirectTo: '${redirectTo}'`);\n}\nfunction canLoadFails(route) {\n throw navigationCancelingError((typeof ngDevMode === 'undefined' || ngDevMode) && `Cannot load children because the guard of the route \"path: '${route.path}'\" returned false`, NavigationCancellationCode.GuardRejected);\n}\nclass ApplyRedirects {\n urlSerializer;\n urlTree;\n constructor(urlSerializer, urlTree) {\n this.urlSerializer = urlSerializer;\n this.urlTree = urlTree;\n }\n async lineralizeSegments(route, urlTree) {\n let res = [];\n let c = urlTree.root;\n while (true) {\n res = res.concat(c.segments);\n if (c.numberOfChildren === 0) {\n return res;\n }\n if (c.numberOfChildren > 1 || !c.children[PRIMARY_OUTLET]) {\n throw namedOutletsRedirect(`${route.redirectTo}`);\n }\n c = c.children[PRIMARY_OUTLET];\n }\n }\n async applyRedirectCommands(segments, redirectTo, posParams, currentSnapshot, injector) {\n const redirect = await getRedirectResult(redirectTo, currentSnapshot, injector);\n if (redirect instanceof UrlTree) {\n throw new AbsoluteRedirect(redirect);\n }\n const newTree = this.applyRedirectCreateUrlTree(redirect, this.urlSerializer.parse(redirect), segments, posParams);\n if (redirect[0] === '/') {\n throw new AbsoluteRedirect(newTree);\n }\n return newTree;\n }\n applyRedirectCreateUrlTree(redirectTo, urlTree, segments, posParams) {\n const newRoot = this.createSegmentGroup(redirectTo, urlTree.root, segments, posParams);\n return new UrlTree(newRoot, this.createQueryParams(urlTree.queryParams, this.urlTree.queryParams), urlTree.fragment);\n }\n createQueryParams(redirectToParams, actualParams) {\n const res = {};\n Object.entries(redirectToParams).forEach(([k, v]) => {\n const copySourceValue = typeof v === 'string' && v[0] === ':';\n if (copySourceValue) {\n const sourceName = v.substring(1);\n res[k] = actualParams[sourceName];\n } else {\n res[k] = v;\n }\n });\n return res;\n }\n createSegmentGroup(redirectTo, group, segments, posParams) {\n const updatedSegments = this.createSegments(redirectTo, group.segments, segments, posParams);\n let children = {};\n Object.entries(group.children).forEach(([name, child]) => {\n children[name] = this.createSegmentGroup(redirectTo, child, segments, posParams);\n });\n return new UrlSegmentGroup(updatedSegments, children);\n }\n createSegments(redirectTo, redirectToSegments, actualSegments, posParams) {\n return redirectToSegments.map(s => s.path[0] === ':' ? this.findPosParam(redirectTo, s, posParams) : this.findOrReturn(s, actualSegments));\n }\n findPosParam(redirectTo, redirectToUrlSegment, posParams) {\n const pos = posParams[redirectToUrlSegment.path.substring(1)];\n if (!pos) throw new _RuntimeError(4001, (typeof ngDevMode === 'undefined' || ngDevMode) && `Cannot redirect to '${redirectTo}'. Cannot find '${redirectToUrlSegment.path}'.`);\n return pos;\n }\n findOrReturn(redirectToUrlSegment, actualSegments) {\n let idx = 0;\n for (const s of actualSegments) {\n if (s.path === redirectToUrlSegment.path) {\n actualSegments.splice(idx);\n return s;\n }\n idx++;\n }\n return redirectToUrlSegment;\n }\n}\nfunction getRedirectResult(redirectTo, currentSnapshot, injector) {\n if (typeof redirectTo === 'string') {\n return Promise.resolve(redirectTo);\n }\n const redirectToFn = redirectTo;\n return firstValueFrom(wrapIntoObservable(runInInjectionContext(injector, () => redirectToFn(currentSnapshot))));\n}\nfunction getOrCreateRouteInjectorIfNeeded(route, currentInjector) {\n if (route.providers && !route._injector) {\n route._injector = createEnvironmentInjector(route.providers, currentInjector, `Route: ${route.path}`);\n }\n return route._injector ?? currentInjector;\n}\nfunction validateConfig(config, parentPath = '', requireStandaloneComponents = false) {\n for (let i = 0; i < config.length; i++) {\n const route = config[i];\n const fullPath = getFullPath(parentPath, route);\n validateNode(route, fullPath, requireStandaloneComponents);\n }\n}\nfunction assertStandalone(fullPath, component) {\n if (component && _isNgModule(component)) {\n throw new _RuntimeError(4014, `Invalid configuration of route '${fullPath}'. You are using 'loadComponent' with a module, ` + `but it must be used with standalone components. Use 'loadChildren' instead.`);\n } else if (component && !isStandalone(component)) {\n throw new _RuntimeError(4014, `Invalid configuration of route '${fullPath}'. The component must be standalone.`);\n }\n}\nfunction validateNode(route, fullPath, requireStandaloneComponents) {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n if (!route) {\n throw new _RuntimeError(4014, `\n Invalid configuration of route '${fullPath}': Encountered undefined route.\n The reason might be an extra comma.\n\n Example:\n const routes: Routes = [\n { path: '', redirectTo: '/dashboard', pathMatch: 'full' },\n { path: 'dashboard', component: DashboardComponent },, << two commas\n { path: 'detail/:id', component: HeroDetailComponent }\n ];\n `);\n }\n if (Array.isArray(route)) {\n throw new _RuntimeError(4014, `Invalid configuration of route '${fullPath}': Array cannot be specified`);\n }\n if (!route.redirectTo && !route.component && !route.loadComponent && !route.children && !route.loadChildren && route.outlet && route.outlet !== PRIMARY_OUTLET) {\n throw new _RuntimeError(4014, `Invalid configuration of route '${fullPath}': a componentless route without children or loadChildren cannot have a named outlet set`);\n }\n if (route.redirectTo && route.children) {\n throw new _RuntimeError(4014, `Invalid configuration of route '${fullPath}': redirectTo and children cannot be used together`);\n }\n if (route.redirectTo && route.loadChildren) {\n throw new _RuntimeError(4014, `Invalid configuration of route '${fullPath}': redirectTo and loadChildren cannot be used together`);\n }\n if (route.children && route.loadChildren) {\n throw new _RuntimeError(4014, `Invalid configuration of route '${fullPath}': children and loadChildren cannot be used together`);\n }\n if (route.component && route.loadComponent) {\n throw new _RuntimeError(4014, `Invalid configuration of route '${fullPath}': component and loadComponent cannot be used together`);\n }\n if (route.redirectTo) {\n if (route.component || route.loadComponent) {\n throw new _RuntimeError(4014, `Invalid configuration of route '${fullPath}': redirectTo and component/loadComponent cannot be used together`);\n }\n if (route.canMatch || route.canActivate) {\n throw new _RuntimeError(4014, `Invalid configuration of route '${fullPath}': redirectTo and ${route.canMatch ? 'canMatch' : 'canActivate'} cannot be used together.` + `Redirects happen before guards are executed.`);\n }\n }\n if (route.path && route.matcher) {\n throw new _RuntimeError(4014, `Invalid configuration of route '${fullPath}': path and matcher cannot be used together`);\n }\n if (route.redirectTo === void 0 && !route.component && !route.loadComponent && !route.children && !route.loadChildren) {\n throw new _RuntimeError(4014, `Invalid configuration of route '${fullPath}'. One of the following must be provided: component, loadComponent, redirectTo, children or loadChildren`);\n }\n if (route.path === void 0 && route.matcher === void 0) {\n throw new _RuntimeError(4014, `Invalid configuration of route '${fullPath}': routes must have either a path or a matcher specified`);\n }\n if (typeof route.path === 'string' && route.path.charAt(0) === '/') {\n throw new _RuntimeError(4014, `Invalid configuration of route '${fullPath}': path cannot start with a slash`);\n }\n if (route.path === '' && route.redirectTo !== void 0 && route.pathMatch === void 0) {\n const exp = `The default value of 'pathMatch' is 'prefix', but often the intent is to use 'full'.`;\n throw new _RuntimeError(4014, `Invalid configuration of route '{path: \"${fullPath}\", redirectTo: \"${route.redirectTo}\"}': please provide 'pathMatch'. ${exp}`);\n }\n if (requireStandaloneComponents) {\n assertStandalone(fullPath, route.component);\n }\n }\n if (route.children) {\n validateConfig(route.children, fullPath, requireStandaloneComponents);\n }\n}\nfunction getFullPath(parentPath, currentRoute) {\n if (!currentRoute) {\n return parentPath;\n }\n if (!parentPath && !currentRoute.path) {\n return '';\n } else if (parentPath && !currentRoute.path) {\n return `${parentPath}/`;\n } else if (!parentPath && currentRoute.path) {\n return currentRoute.path;\n } else {\n return `${parentPath}/${currentRoute.path}`;\n }\n}\nfunction getOutlet(route) {\n return route.outlet || PRIMARY_OUTLET;\n}\nfunction sortByMatchingOutlets(routes, outletName) {\n const sortedConfig = routes.filter(r => getOutlet(r) === outletName);\n sortedConfig.push(...routes.filter(r => getOutlet(r) !== outletName));\n return sortedConfig;\n}\nconst noMatch = {\n matched: false,\n consumedSegments: [],\n remainingSegments: [],\n parameters: {},\n positionalParamSegments: {}\n};\nfunction createPreMatchRouteSnapshot(snapshot) {\n return {\n routeConfig: snapshot.routeConfig,\n url: snapshot.url,\n params: snapshot.params,\n queryParams: snapshot.queryParams,\n fragment: snapshot.fragment,\n data: snapshot.data,\n outlet: snapshot.outlet,\n title: snapshot.title,\n paramMap: snapshot.paramMap,\n queryParamMap: snapshot.queryParamMap\n };\n}\nfunction matchWithChecks(segmentGroup, route, segments, injector, urlSerializer, createSnapshot, abortSignal) {\n const result = match(segmentGroup, route, segments);\n if (!result.matched) {\n return of(result);\n }\n const currentSnapshot = createPreMatchRouteSnapshot(createSnapshot(result));\n injector = getOrCreateRouteInjectorIfNeeded(route, injector);\n return runCanMatchGuards(injector, route, segments, urlSerializer, currentSnapshot, abortSignal).pipe(map(v => v === true ? result : {\n ...noMatch\n }));\n}\nfunction match(segmentGroup, route, segments) {\n if (route.path === '') {\n if (route.pathMatch === 'full' && (segmentGroup.hasChildren() || segments.length > 0)) {\n return {\n ...noMatch\n };\n }\n return {\n matched: true,\n consumedSegments: [],\n remainingSegments: segments,\n parameters: {},\n positionalParamSegments: {}\n };\n }\n const matcher = route.matcher || defaultUrlMatcher;\n const res = matcher(segments, segmentGroup, route);\n if (!res) return {\n ...noMatch\n };\n const posParams = {};\n Object.entries(res.posParams ?? {}).forEach(([k, v]) => {\n posParams[k] = v.path;\n });\n const parameters = res.consumed.length > 0 ? {\n ...posParams,\n ...res.consumed[res.consumed.length - 1].parameters\n } : posParams;\n return {\n matched: true,\n consumedSegments: res.consumed,\n remainingSegments: segments.slice(res.consumed.length),\n parameters,\n positionalParamSegments: res.posParams ?? {}\n };\n}\nfunction split(segmentGroup, consumedSegments, slicedSegments, config) {\n if (slicedSegments.length > 0 && containsEmptyPathMatchesWithNamedOutlets(segmentGroup, slicedSegments, config)) {\n const s = new UrlSegmentGroup(consumedSegments, createChildrenForEmptyPaths(config, new UrlSegmentGroup(slicedSegments, segmentGroup.children)));\n return {\n segmentGroup: s,\n slicedSegments: []\n };\n }\n if (slicedSegments.length === 0 && containsEmptyPathMatches(segmentGroup, slicedSegments, config)) {\n const s = new UrlSegmentGroup(segmentGroup.segments, addEmptyPathsToChildrenIfNeeded(segmentGroup, slicedSegments, config, segmentGroup.children));\n return {\n segmentGroup: s,\n slicedSegments\n };\n }\n const s = new UrlSegmentGroup(segmentGroup.segments, segmentGroup.children);\n return {\n segmentGroup: s,\n slicedSegments\n };\n}\nfunction addEmptyPathsToChildrenIfNeeded(segmentGroup, slicedSegments, routes, children) {\n const res = {};\n for (const r of routes) {\n if (emptyPathMatch(segmentGroup, slicedSegments, r) && !children[getOutlet(r)]) {\n const s = new UrlSegmentGroup([], {});\n res[getOutlet(r)] = s;\n }\n }\n return {\n ...children,\n ...res\n };\n}\nfunction createChildrenForEmptyPaths(routes, primarySegment) {\n const res = {};\n res[PRIMARY_OUTLET] = primarySegment;\n for (const r of routes) {\n if (r.path === '' && getOutlet(r) !== PRIMARY_OUTLET) {\n const s = new UrlSegmentGroup([], {});\n res[getOutlet(r)] = s;\n }\n }\n return res;\n}\nfunction containsEmptyPathMatchesWithNamedOutlets(segmentGroup, slicedSegments, routes) {\n return routes.some(r => emptyPathMatch(segmentGroup, slicedSegments, r) && getOutlet(r) !== PRIMARY_OUTLET);\n}\nfunction containsEmptyPathMatches(segmentGroup, slicedSegments, routes) {\n return routes.some(r => emptyPathMatch(segmentGroup, slicedSegments, r));\n}\nfunction emptyPathMatch(segmentGroup, slicedSegments, r) {\n if ((segmentGroup.hasChildren() || slicedSegments.length > 0) && r.pathMatch === 'full') {\n return false;\n }\n return r.path === '';\n}\nfunction noLeftoversInUrl(segmentGroup, segments, outlet) {\n return segments.length === 0 && !segmentGroup.children[outlet];\n}\nclass NoLeftoversInUrl {}\nasync function recognize$1(injector, configLoader, rootComponentType, config, urlTree, urlSerializer, paramsInheritanceStrategy = 'emptyOnly', abortSignal) {\n return new Recognizer(injector, configLoader, rootComponentType, config, urlTree, paramsInheritanceStrategy, urlSerializer, abortSignal).recognize();\n}\nconst MAX_ALLOWED_REDIRECTS = 31;\nclass Recognizer {\n injector;\n configLoader;\n rootComponentType;\n config;\n urlTree;\n paramsInheritanceStrategy;\n urlSerializer;\n abortSignal;\n applyRedirects;\n absoluteRedirectCount = 0;\n allowRedirects = true;\n constructor(injector, configLoader, rootComponentType, config, urlTree, paramsInheritanceStrategy, urlSerializer, abortSignal) {\n this.injector = injector;\n this.configLoader = configLoader;\n this.rootComponentType = rootComponentType;\n this.config = config;\n this.urlTree = urlTree;\n this.paramsInheritanceStrategy = paramsInheritanceStrategy;\n this.urlSerializer = urlSerializer;\n this.abortSignal = abortSignal;\n this.applyRedirects = new ApplyRedirects(this.urlSerializer, this.urlTree);\n }\n noMatchError(e) {\n return new _RuntimeError(4002, typeof ngDevMode === 'undefined' || ngDevMode ? `Cannot match any routes. URL Segment: '${e.segmentGroup}'` : `'${e.segmentGroup}'`);\n }\n async recognize() {\n const rootSegmentGroup = split(this.urlTree.root, [], [], this.config).segmentGroup;\n const {\n children,\n rootSnapshot\n } = await this.match(rootSegmentGroup);\n const rootNode = new TreeNode(rootSnapshot, children);\n const routeState = new RouterStateSnapshot('', rootNode);\n const tree = createUrlTreeFromSnapshot(rootSnapshot, [], this.urlTree.queryParams, this.urlTree.fragment);\n tree.queryParams = this.urlTree.queryParams;\n routeState.url = this.urlSerializer.serialize(tree);\n return {\n state: routeState,\n tree\n };\n }\n async match(rootSegmentGroup) {\n const rootSnapshot = new ActivatedRouteSnapshot([], Object.freeze({}), Object.freeze({\n ...this.urlTree.queryParams\n }), this.urlTree.fragment, Object.freeze({}), PRIMARY_OUTLET, this.rootComponentType, null, {}, this.injector);\n try {\n const children = await this.processSegmentGroup(this.injector, this.config, rootSegmentGroup, PRIMARY_OUTLET, rootSnapshot);\n return {\n children,\n rootSnapshot\n };\n } catch (e) {\n if (e instanceof AbsoluteRedirect) {\n this.urlTree = e.urlTree;\n return this.match(e.urlTree.root);\n }\n if (e instanceof NoMatch) {\n throw this.noMatchError(e);\n }\n throw e;\n }\n }\n async processSegmentGroup(injector, config, segmentGroup, outlet, parentRoute) {\n if (segmentGroup.segments.length === 0 && segmentGroup.hasChildren()) {\n return this.processChildren(injector, config, segmentGroup, parentRoute);\n }\n const child = await this.processSegment(injector, config, segmentGroup, segmentGroup.segments, outlet, true, parentRoute);\n return child instanceof TreeNode ? [child] : [];\n }\n async processChildren(injector, config, segmentGroup, parentRoute) {\n const childOutlets = [];\n for (const child of Object.keys(segmentGroup.children)) {\n if (child === 'primary') {\n childOutlets.unshift(child);\n } else {\n childOutlets.push(child);\n }\n }\n let children = [];\n for (const childOutlet of childOutlets) {\n const child = segmentGroup.children[childOutlet];\n const sortedConfig = sortByMatchingOutlets(config, childOutlet);\n const outletChildren = await this.processSegmentGroup(injector, sortedConfig, child, childOutlet, parentRoute);\n children.push(...outletChildren);\n }\n const mergedChildren = mergeEmptyPathMatches(children);\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n checkOutletNameUniqueness(mergedChildren);\n }\n sortActivatedRouteSnapshots(mergedChildren);\n return mergedChildren;\n }\n async processSegment(injector, routes, segmentGroup, segments, outlet, allowRedirects, parentRoute) {\n for (const r of routes) {\n try {\n return await this.processSegmentAgainstRoute(r._injector ?? injector, routes, r, segmentGroup, segments, outlet, allowRedirects, parentRoute);\n } catch (e) {\n if (e instanceof NoMatch || isEmptyError(e)) {\n continue;\n }\n throw e;\n }\n }\n if (noLeftoversInUrl(segmentGroup, segments, outlet)) {\n return new NoLeftoversInUrl();\n }\n throw new NoMatch(segmentGroup);\n }\n async processSegmentAgainstRoute(injector, routes, route, rawSegment, segments, outlet, allowRedirects, parentRoute) {\n if (getOutlet(route) !== outlet && (outlet === PRIMARY_OUTLET || !emptyPathMatch(rawSegment, segments, route))) {\n throw new NoMatch(rawSegment);\n }\n if (route.redirectTo === undefined) {\n return this.matchSegmentAgainstRoute(injector, rawSegment, route, segments, outlet, parentRoute);\n }\n if (this.allowRedirects && allowRedirects) {\n return this.expandSegmentAgainstRouteUsingRedirect(injector, rawSegment, routes, route, segments, outlet, parentRoute);\n }\n throw new NoMatch(rawSegment);\n }\n async expandSegmentAgainstRouteUsingRedirect(injector, segmentGroup, routes, route, segments, outlet, parentRoute) {\n const {\n matched,\n parameters,\n consumedSegments,\n positionalParamSegments,\n remainingSegments\n } = match(segmentGroup, route, segments);\n if (!matched) throw new NoMatch(segmentGroup);\n if (typeof route.redirectTo === 'string' && route.redirectTo[0] === '/') {\n this.absoluteRedirectCount++;\n if (this.absoluteRedirectCount > MAX_ALLOWED_REDIRECTS) {\n if (ngDevMode) {\n throw new _RuntimeError(4016, `Detected possible infinite redirect when redirecting from '${this.urlTree}' to '${route.redirectTo}'.\\n` + `This is currently a dev mode only error but will become a` + ` call stack size exceeded error in production in a future major version.`);\n }\n this.allowRedirects = false;\n }\n }\n const currentSnapshot = this.createSnapshot(injector, route, segments, parameters, parentRoute);\n if (this.abortSignal.aborted) {\n throw new Error(this.abortSignal.reason);\n }\n const newTree = await this.applyRedirects.applyRedirectCommands(consumedSegments, route.redirectTo, positionalParamSegments, createPreMatchRouteSnapshot(currentSnapshot), injector);\n const newSegments = await this.applyRedirects.lineralizeSegments(route, newTree);\n return this.processSegment(injector, routes, segmentGroup, newSegments.concat(remainingSegments), outlet, false, parentRoute);\n }\n createSnapshot(injector, route, segments, parameters, parentRoute) {\n const snapshot = new ActivatedRouteSnapshot(segments, parameters, Object.freeze({\n ...this.urlTree.queryParams\n }), this.urlTree.fragment, getData(route), getOutlet(route), route.component ?? route._loadedComponent ?? null, route, getResolve(route), injector);\n const inherited = getInherited(snapshot, parentRoute, this.paramsInheritanceStrategy);\n snapshot.params = Object.freeze(inherited.params);\n snapshot.data = Object.freeze(inherited.data);\n return snapshot;\n }\n async matchSegmentAgainstRoute(injector, rawSegment, route, segments, outlet, parentRoute) {\n if (this.abortSignal.aborted) {\n throw new Error(this.abortSignal.reason);\n }\n const createSnapshot = result => this.createSnapshot(injector, route, result.consumedSegments, result.parameters, parentRoute);\n const result = await firstValueFrom(matchWithChecks(rawSegment, route, segments, injector, this.urlSerializer, createSnapshot, this.abortSignal));\n if (route.path === '**') {\n rawSegment.children = {};\n }\n if (!result?.matched) {\n throw new NoMatch(rawSegment);\n }\n injector = route._injector ?? injector;\n const {\n routes: childConfig\n } = await this.getChildConfig(injector, route, segments);\n const childInjector = route._loadedInjector ?? injector;\n const {\n parameters,\n consumedSegments,\n remainingSegments\n } = result;\n const snapshot = this.createSnapshot(injector, route, consumedSegments, parameters, parentRoute);\n const {\n segmentGroup,\n slicedSegments\n } = split(rawSegment, consumedSegments, remainingSegments, childConfig);\n if (slicedSegments.length === 0 && segmentGroup.hasChildren()) {\n const children = await this.processChildren(childInjector, childConfig, segmentGroup, snapshot);\n return new TreeNode(snapshot, children);\n }\n if (childConfig.length === 0 && slicedSegments.length === 0) {\n return new TreeNode(snapshot, []);\n }\n const matchedOnOutlet = getOutlet(route) === outlet;\n const child = await this.processSegment(childInjector, childConfig, segmentGroup, slicedSegments, matchedOnOutlet ? PRIMARY_OUTLET : outlet, true, snapshot);\n return new TreeNode(snapshot, child instanceof TreeNode ? [child] : []);\n }\n async getChildConfig(injector, route, segments) {\n if (route.children) {\n return {\n routes: route.children,\n injector\n };\n }\n if (route.loadChildren) {\n if (route._loadedRoutes !== undefined) {\n const ngModuleFactory = route._loadedNgModuleFactory;\n if (ngModuleFactory && !route._loadedInjector) {\n route._loadedInjector = ngModuleFactory.create(injector).injector;\n }\n return {\n routes: route._loadedRoutes,\n injector: route._loadedInjector\n };\n }\n if (this.abortSignal.aborted) {\n throw new Error(this.abortSignal.reason);\n }\n const shouldLoadResult = await firstValueFrom(runCanLoadGuards(injector, route, segments, this.urlSerializer, this.abortSignal));\n if (shouldLoadResult) {\n const cfg = await this.configLoader.loadChildren(injector, route);\n route._loadedRoutes = cfg.routes;\n route._loadedInjector = cfg.injector;\n route._loadedNgModuleFactory = cfg.factory;\n return cfg;\n }\n throw canLoadFails(route);\n }\n return {\n routes: [],\n injector\n };\n }\n}\nfunction sortActivatedRouteSnapshots(nodes) {\n nodes.sort((a, b) => {\n if (a.value.outlet === PRIMARY_OUTLET) return -1;\n if (b.value.outlet === PRIMARY_OUTLET) return 1;\n return a.value.outlet.localeCompare(b.value.outlet);\n });\n}\nfunction hasEmptyPathConfig(node) {\n const config = node.value.routeConfig;\n return config && config.path === '';\n}\nfunction mergeEmptyPathMatches(nodes) {\n const result = [];\n const mergedNodes = new Set();\n for (const node of nodes) {\n if (!hasEmptyPathConfig(node)) {\n result.push(node);\n continue;\n }\n const duplicateEmptyPathNode = result.find(resultNode => node.value.routeConfig === resultNode.value.routeConfig);\n if (duplicateEmptyPathNode !== undefined) {\n duplicateEmptyPathNode.children.push(...node.children);\n mergedNodes.add(duplicateEmptyPathNode);\n } else {\n result.push(node);\n }\n }\n for (const mergedNode of mergedNodes) {\n const mergedChildren = mergeEmptyPathMatches(mergedNode.children);\n result.push(new TreeNode(mergedNode.value, mergedChildren));\n }\n return result.filter(n => !mergedNodes.has(n));\n}\nfunction checkOutletNameUniqueness(nodes) {\n const names = {};\n nodes.forEach(n => {\n const routeWithSameOutletName = names[n.value.outlet];\n if (routeWithSameOutletName) {\n const p = routeWithSameOutletName.url.map(s => s.toString()).join('/');\n const c = n.value.url.map(s => s.toString()).join('/');\n throw new _RuntimeError(4006, (typeof ngDevMode === 'undefined' || ngDevMode) && `Two segments cannot have the same outlet name: '${p}' and '${c}'.`);\n }\n names[n.value.outlet] = n.value;\n });\n}\nfunction getData(route) {\n return route.data || {};\n}\nfunction getResolve(route) {\n return route.resolve || {};\n}\nfunction recognize(injector, configLoader, rootComponentType, config, serializer, paramsInheritanceStrategy, abortSignal) {\n return mergeMap(async t => {\n const {\n state: targetSnapshot,\n tree: urlAfterRedirects\n } = await recognize$1(injector, configLoader, rootComponentType, config, t.extractedUrl, serializer, paramsInheritanceStrategy, abortSignal);\n return {\n ...t,\n targetSnapshot,\n urlAfterRedirects\n };\n });\n}\nfunction resolveData(paramsInheritanceStrategy) {\n return mergeMap(t => {\n const {\n targetSnapshot,\n guards: {\n canActivateChecks\n }\n } = t;\n if (!canActivateChecks.length) {\n return of(t);\n }\n const routesWithResolversToRun = new Set(canActivateChecks.map(check => check.route));\n const routesNeedingDataUpdates = new Set();\n for (const route of routesWithResolversToRun) {\n if (routesNeedingDataUpdates.has(route)) {\n continue;\n }\n for (const newRoute of flattenRouteTree(route)) {\n routesNeedingDataUpdates.add(newRoute);\n }\n }\n let routesProcessed = 0;\n return from(routesNeedingDataUpdates).pipe(concatMap(route => {\n if (routesWithResolversToRun.has(route)) {\n return runResolve(route, targetSnapshot, paramsInheritanceStrategy);\n } else {\n route.data = getInherited(route, route.parent, paramsInheritanceStrategy).resolve;\n return of(void 0);\n }\n }), tap(() => routesProcessed++), takeLast(1), mergeMap(_ => routesProcessed === routesNeedingDataUpdates.size ? of(t) : EMPTY));\n });\n}\nfunction flattenRouteTree(route) {\n const descendants = route.children.map(child => flattenRouteTree(child)).flat();\n return [route, ...descendants];\n}\nfunction runResolve(futureARS, futureRSS, paramsInheritanceStrategy) {\n const config = futureARS.routeConfig;\n const resolve = futureARS._resolve;\n if (config?.title !== undefined && !hasStaticTitle(config)) {\n resolve[RouteTitleKey] = config.title;\n }\n return defer(() => {\n futureARS.data = getInherited(futureARS, futureARS.parent, paramsInheritanceStrategy).resolve;\n return resolveNode(resolve, futureARS, futureRSS).pipe(map(resolvedData => {\n futureARS._resolvedData = resolvedData;\n futureARS.data = {\n ...futureARS.data,\n ...resolvedData\n };\n return null;\n }));\n });\n}\nfunction resolveNode(resolve, futureARS, futureRSS) {\n const keys = getDataKeys(resolve);\n if (keys.length === 0) {\n return of({});\n }\n const data = {};\n return from(keys).pipe(mergeMap(key => getResolver(resolve[key], futureARS, futureRSS).pipe(first(), tap(value => {\n if (value instanceof RedirectCommand) {\n throw redirectingNavigationError(new DefaultUrlSerializer(), value);\n }\n data[key] = value;\n }))), takeLast(1), map(() => data), catchError(e => isEmptyError(e) ? EMPTY : throwError(e)));\n}\nfunction getResolver(injectionToken, futureARS, futureRSS) {\n const closestInjector = futureARS._environmentInjector;\n const resolver = getTokenOrFunctionIdentity(injectionToken, closestInjector);\n const resolverValue = resolver.resolve ? resolver.resolve(futureARS, futureRSS) : runInInjectionContext(closestInjector, () => resolver(futureARS, futureRSS));\n return wrapIntoObservable(resolverValue);\n}\nfunction switchTap(next) {\n return switchMap(v => {\n const nextResult = next(v);\n if (nextResult) {\n return from(nextResult).pipe(map(() => v));\n }\n return of(v);\n });\n}\nlet TitleStrategy = /*#__PURE__*/(() => {\n class TitleStrategy {\n buildTitle(snapshot) {\n let pageTitle;\n let route = snapshot.root;\n while (route !== undefined) {\n pageTitle = this.getResolvedTitleForRoute(route) ?? pageTitle;\n route = route.children.find(child => child.outlet === PRIMARY_OUTLET);\n }\n return pageTitle;\n }\n getResolvedTitleForRoute(snapshot) {\n return snapshot.data[RouteTitleKey];\n }\n static ɵfac = function TitleStrategy_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || TitleStrategy)();\n };\n static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: TitleStrategy,\n factory: () => (() => inject(DefaultTitleStrategy))(),\n providedIn: 'root'\n });\n }\n return TitleStrategy;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet DefaultTitleStrategy = /*#__PURE__*/(() => {\n class DefaultTitleStrategy extends TitleStrategy {\n title;\n constructor(title) {\n super();\n this.title = title;\n }\n updateTitle(snapshot) {\n const title = this.buildTitle(snapshot);\n if (title !== undefined) {\n this.title.setTitle(title);\n }\n }\n static ɵfac = function DefaultTitleStrategy_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || DefaultTitleStrategy)(i0.ɵɵinject(i1.Title));\n };\n static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: DefaultTitleStrategy,\n factory: DefaultTitleStrategy.ɵfac,\n providedIn: 'root'\n });\n }\n return DefaultTitleStrategy;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst ROUTER_CONFIGURATION = /*#__PURE__*/new InjectionToken(typeof ngDevMode === 'undefined' || ngDevMode ? 'router config' : '', {\n factory: () => ({})\n});\nconst ROUTES = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'ROUTES' : '');\nlet RouterConfigLoader = /*#__PURE__*/(() => {\n class RouterConfigLoader {\n componentLoaders = new WeakMap();\n childrenLoaders = new WeakMap();\n onLoadStartListener;\n onLoadEndListener;\n compiler = inject(Compiler);\n async loadComponent(injector, route) {\n if (this.componentLoaders.get(route)) {\n return this.componentLoaders.get(route);\n } else if (route._loadedComponent) {\n return Promise.resolve(route._loadedComponent);\n }\n if (this.onLoadStartListener) {\n this.onLoadStartListener(route);\n }\n const loader = (async () => {\n try {\n const loaded = await wrapIntoPromise(runInInjectionContext(injector, () => route.loadComponent()));\n const component = await maybeResolveResources(maybeUnwrapDefaultExport(loaded));\n if (this.onLoadEndListener) {\n this.onLoadEndListener(route);\n }\n (typeof ngDevMode === 'undefined' || ngDevMode) && assertStandalone(route.path ?? '', component);\n route._loadedComponent = component;\n return component;\n } finally {\n this.componentLoaders.delete(route);\n }\n })();\n this.componentLoaders.set(route, loader);\n return loader;\n }\n loadChildren(parentInjector, route) {\n if (this.childrenLoaders.get(route)) {\n return this.childrenLoaders.get(route);\n } else if (route._loadedRoutes) {\n return Promise.resolve({\n routes: route._loadedRoutes,\n injector: route._loadedInjector\n });\n }\n if (this.onLoadStartListener) {\n this.onLoadStartListener(route);\n }\n const loader = (async () => {\n try {\n const result = await loadChildren(route, this.compiler, parentInjector, this.onLoadEndListener);\n route._loadedRoutes = result.routes;\n route._loadedInjector = result.injector;\n route._loadedNgModuleFactory = result.factory;\n return result;\n } finally {\n this.childrenLoaders.delete(route);\n }\n })();\n this.childrenLoaders.set(route, loader);\n return loader;\n }\n static ɵfac = function RouterConfigLoader_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || RouterConfigLoader)();\n };\n static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: RouterConfigLoader,\n factory: RouterConfigLoader.ɵfac,\n providedIn: 'root'\n });\n }\n return RouterConfigLoader;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nasync function loadChildren(route, compiler, parentInjector, onLoadEndListener) {\n const loaded = await wrapIntoPromise(runInInjectionContext(parentInjector, () => route.loadChildren()));\n const t = await maybeResolveResources(maybeUnwrapDefaultExport(loaded));\n let factoryOrRoutes;\n if (t instanceof NgModuleFactory || Array.isArray(t)) {\n factoryOrRoutes = t;\n } else {\n factoryOrRoutes = await compiler.compileModuleAsync(t);\n }\n if (onLoadEndListener) {\n onLoadEndListener(route);\n }\n let injector;\n let rawRoutes;\n let requireStandaloneComponents = false;\n let factory = undefined;\n if (Array.isArray(factoryOrRoutes)) {\n rawRoutes = factoryOrRoutes;\n requireStandaloneComponents = true;\n } else {\n injector = factoryOrRoutes.create(parentInjector).injector;\n factory = factoryOrRoutes;\n rawRoutes = injector.get(ROUTES, [], {\n optional: true,\n self: true\n }).flat();\n }\n const routes = rawRoutes.map(standardizeConfig);\n (typeof ngDevMode === 'undefined' || ngDevMode) && validateConfig(routes, route.path, requireStandaloneComponents);\n return {\n routes,\n injector,\n factory\n };\n}\nfunction isWrappedDefaultExport(value) {\n return value && typeof value === 'object' && 'default' in value;\n}\nfunction maybeUnwrapDefaultExport(input) {\n return isWrappedDefaultExport(input) ? input['default'] : input;\n}\nasync function maybeResolveResources(value) {\n if ((typeof ngJitMode === 'undefined' || ngJitMode) && typeof fetch === 'function') {\n try {\n await _resolveComponentResources(fetch);\n } catch (error) {\n console.error(error);\n }\n }\n return value;\n}\nlet UrlHandlingStrategy = /*#__PURE__*/(() => {\n class UrlHandlingStrategy {\n static ɵfac = function UrlHandlingStrategy_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || UrlHandlingStrategy)();\n };\n static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: UrlHandlingStrategy,\n factory: () => (() => inject(DefaultUrlHandlingStrategy))(),\n providedIn: 'root'\n });\n }\n return UrlHandlingStrategy;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet DefaultUrlHandlingStrategy = /*#__PURE__*/(() => {\n class DefaultUrlHandlingStrategy {\n shouldProcessUrl(url) {\n return true;\n }\n extract(url) {\n return url;\n }\n merge(newUrlPart, wholeUrl) {\n return newUrlPart;\n }\n static ɵfac = function DefaultUrlHandlingStrategy_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || DefaultUrlHandlingStrategy)();\n };\n static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: DefaultUrlHandlingStrategy,\n factory: DefaultUrlHandlingStrategy.ɵfac,\n providedIn: 'root'\n });\n }\n return DefaultUrlHandlingStrategy;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst CREATE_VIEW_TRANSITION = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'view transition helper' : '');\nconst VIEW_TRANSITION_OPTIONS = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'view transition options' : '');\nfunction createViewTransition(injector, from, to) {\n const transitionOptions = injector.get(VIEW_TRANSITION_OPTIONS);\n const document = injector.get(DOCUMENT);\n if (!document.startViewTransition || transitionOptions.skipNextTransition) {\n transitionOptions.skipNextTransition = false;\n return new Promise(resolve => setTimeout(resolve));\n }\n let resolveViewTransitionStarted;\n const viewTransitionStarted = new Promise(resolve => {\n resolveViewTransitionStarted = resolve;\n });\n const transition = document.startViewTransition(() => {\n resolveViewTransitionStarted();\n return createRenderPromise(injector);\n });\n transition.updateCallbackDone.catch(error => {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n console.error(error);\n }\n });\n transition.ready.catch(error => {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n console.error(error);\n }\n });\n transition.finished.catch(error => {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n console.error(error);\n }\n });\n const {\n onViewTransitionCreated\n } = transitionOptions;\n if (onViewTransitionCreated) {\n runInInjectionContext(injector, () => onViewTransitionCreated({\n transition,\n from,\n to\n }));\n }\n return viewTransitionStarted;\n}\nfunction createRenderPromise(injector) {\n return new Promise(resolve => {\n afterNextRender({\n read: () => setTimeout(resolve)\n }, {\n injector\n });\n });\n}\nconst noop = () => {};\nconst NAVIGATION_ERROR_HANDLER = /*#__PURE__*/new InjectionToken(typeof ngDevMode === 'undefined' || ngDevMode ? 'navigation error handler' : '');\nlet NavigationTransitions = /*#__PURE__*/(() => {\n class NavigationTransitions {\n currentNavigation = signal(null, {\n ...(ngDevMode ? {\n debugName: \"currentNavigation\"\n } : {}),\n equal: () => false\n });\n currentTransition = null;\n lastSuccessfulNavigation = signal(null, ...(ngDevMode ? [{\n debugName: \"lastSuccessfulNavigation\"\n }] : []));\n events = new Subject();\n transitionAbortWithErrorSubject = new Subject();\n configLoader = inject(RouterConfigLoader);\n environmentInjector = inject(EnvironmentInjector);\n destroyRef = inject(DestroyRef);\n urlSerializer = inject(UrlSerializer);\n rootContexts = inject(ChildrenOutletContexts);\n location = inject(Location);\n inputBindingEnabled = inject(INPUT_BINDER, {\n optional: true\n }) !== null;\n titleStrategy = inject(TitleStrategy);\n options = inject(ROUTER_CONFIGURATION, {\n optional: true\n }) || {};\n paramsInheritanceStrategy = this.options.paramsInheritanceStrategy || 'emptyOnly';\n urlHandlingStrategy = inject(UrlHandlingStrategy);\n createViewTransition = inject(CREATE_VIEW_TRANSITION, {\n optional: true\n });\n navigationErrorHandler = inject(NAVIGATION_ERROR_HANDLER, {\n optional: true\n });\n navigationId = 0;\n get hasRequestedNavigation() {\n return this.navigationId !== 0;\n }\n transitions;\n afterPreactivation = () => of(void 0);\n rootComponentType = null;\n destroyed = false;\n constructor() {\n const onLoadStart = r => this.events.next(new RouteConfigLoadStart(r));\n const onLoadEnd = r => this.events.next(new RouteConfigLoadEnd(r));\n this.configLoader.onLoadEndListener = onLoadEnd;\n this.configLoader.onLoadStartListener = onLoadStart;\n this.destroyRef.onDestroy(() => {\n this.destroyed = true;\n });\n }\n complete() {\n this.transitions?.complete();\n }\n handleNavigationRequest(request) {\n const id = ++this.navigationId;\n untracked(() => {\n this.transitions?.next({\n ...request,\n extractedUrl: this.urlHandlingStrategy.extract(request.rawUrl),\n targetSnapshot: null,\n targetRouterState: null,\n guards: {\n canActivateChecks: [],\n canDeactivateChecks: []\n },\n guardsResult: null,\n id,\n routesRecognizeHandler: {},\n beforeActivateHandler: {}\n });\n });\n }\n setupNavigations(router) {\n this.transitions = new BehaviorSubject(null);\n return this.transitions.pipe(filter(t => t !== null), switchMap(overallTransitionState => {\n let completedOrAborted = false;\n const abortController = new AbortController();\n const shouldContinueNavigation = () => {\n return !completedOrAborted && this.currentTransition?.id === overallTransitionState.id;\n };\n return of(overallTransitionState).pipe(switchMap(t => {\n if (this.navigationId > overallTransitionState.id) {\n const cancellationReason = typeof ngDevMode === 'undefined' || ngDevMode ? `Navigation ID ${overallTransitionState.id} is not equal to the current navigation id ${this.navigationId}` : '';\n this.cancelNavigationTransition(overallTransitionState, cancellationReason, NavigationCancellationCode.SupersededByNewNavigation);\n return EMPTY;\n }\n this.currentTransition = overallTransitionState;\n const lastSuccessfulNavigation = this.lastSuccessfulNavigation();\n this.currentNavigation.set({\n id: t.id,\n initialUrl: t.rawUrl,\n extractedUrl: t.extractedUrl,\n targetBrowserUrl: typeof t.extras.browserUrl === 'string' ? this.urlSerializer.parse(t.extras.browserUrl) : t.extras.browserUrl,\n trigger: t.source,\n extras: t.extras,\n previousNavigation: !lastSuccessfulNavigation ? null : {\n ...lastSuccessfulNavigation,\n previousNavigation: null\n },\n abort: () => abortController.abort(),\n routesRecognizeHandler: t.routesRecognizeHandler,\n beforeActivateHandler: t.beforeActivateHandler\n });\n const urlTransition = !router.navigated || this.isUpdatingInternalState() || this.isUpdatedBrowserUrl();\n const onSameUrlNavigation = t.extras.onSameUrlNavigation ?? router.onSameUrlNavigation;\n if (!urlTransition && onSameUrlNavigation !== 'reload') {\n const reason = typeof ngDevMode === 'undefined' || ngDevMode ? `Navigation to ${t.rawUrl} was ignored because it is the same as the current Router URL.` : '';\n this.events.next(new NavigationSkipped(t.id, this.urlSerializer.serialize(t.rawUrl), reason, NavigationSkippedCode.IgnoredSameUrlNavigation));\n t.resolve(false);\n return EMPTY;\n }\n if (this.urlHandlingStrategy.shouldProcessUrl(t.rawUrl)) {\n return of(t).pipe(switchMap(t => {\n this.events.next(new NavigationStart(t.id, this.urlSerializer.serialize(t.extractedUrl), t.source, t.restoredState));\n if (t.id !== this.navigationId) {\n return EMPTY;\n }\n return Promise.resolve(t);\n }), recognize(this.environmentInjector, this.configLoader, this.rootComponentType, router.config, this.urlSerializer, this.paramsInheritanceStrategy, abortController.signal), tap(t => {\n overallTransitionState.targetSnapshot = t.targetSnapshot;\n overallTransitionState.urlAfterRedirects = t.urlAfterRedirects;\n this.currentNavigation.update(nav => {\n nav.finalUrl = t.urlAfterRedirects;\n return nav;\n });\n this.events.next(new BeforeRoutesRecognized());\n }), switchMap(value => from(overallTransitionState.routesRecognizeHandler.deferredHandle ?? of(void 0)).pipe(map(() => value))), tap(() => {\n const routesRecognized = new RoutesRecognized(t.id, this.urlSerializer.serialize(t.extractedUrl), this.urlSerializer.serialize(t.urlAfterRedirects), t.targetSnapshot);\n this.events.next(routesRecognized);\n }));\n } else if (urlTransition && this.urlHandlingStrategy.shouldProcessUrl(t.currentRawUrl)) {\n const {\n id,\n extractedUrl,\n source,\n restoredState,\n extras\n } = t;\n const navStart = new NavigationStart(id, this.urlSerializer.serialize(extractedUrl), source, restoredState);\n this.events.next(navStart);\n const targetSnapshot = createEmptyState(this.rootComponentType, this.environmentInjector).snapshot;\n this.currentTransition = overallTransitionState = {\n ...t,\n targetSnapshot,\n urlAfterRedirects: extractedUrl,\n extras: {\n ...extras,\n skipLocationChange: false,\n replaceUrl: false\n }\n };\n this.currentNavigation.update(nav => {\n nav.finalUrl = extractedUrl;\n return nav;\n });\n return of(overallTransitionState);\n } else {\n const reason = typeof ngDevMode === 'undefined' || ngDevMode ? `Navigation was ignored because the UrlHandlingStrategy` + ` indicated neither the current URL ${t.currentRawUrl} nor target URL ${t.rawUrl} should be processed.` : '';\n this.events.next(new NavigationSkipped(t.id, this.urlSerializer.serialize(t.extractedUrl), reason, NavigationSkippedCode.IgnoredByUrlHandlingStrategy));\n t.resolve(false);\n return EMPTY;\n }\n }), map(t => {\n const guardsStart = new GuardsCheckStart(t.id, this.urlSerializer.serialize(t.extractedUrl), this.urlSerializer.serialize(t.urlAfterRedirects), t.targetSnapshot);\n this.events.next(guardsStart);\n this.currentTransition = overallTransitionState = {\n ...t,\n guards: getAllRouteGuards(t.targetSnapshot, t.currentSnapshot, this.rootContexts)\n };\n return overallTransitionState;\n }), checkGuards(evt => this.events.next(evt)), switchMap(t => {\n overallTransitionState.guardsResult = t.guardsResult;\n if (t.guardsResult && typeof t.guardsResult !== 'boolean') {\n throw redirectingNavigationError(this.urlSerializer, t.guardsResult);\n }\n const guardsEnd = new GuardsCheckEnd(t.id, this.urlSerializer.serialize(t.extractedUrl), this.urlSerializer.serialize(t.urlAfterRedirects), t.targetSnapshot, !!t.guardsResult);\n this.events.next(guardsEnd);\n if (!shouldContinueNavigation()) {\n return EMPTY;\n }\n if (!t.guardsResult) {\n this.cancelNavigationTransition(t, '', NavigationCancellationCode.GuardRejected);\n return EMPTY;\n }\n if (t.guards.canActivateChecks.length === 0) {\n return of(t);\n }\n const resolveStart = new ResolveStart(t.id, this.urlSerializer.serialize(t.extractedUrl), this.urlSerializer.serialize(t.urlAfterRedirects), t.targetSnapshot);\n this.events.next(resolveStart);\n if (!shouldContinueNavigation()) {\n return EMPTY;\n }\n let dataResolved = false;\n return of(t).pipe(resolveData(this.paramsInheritanceStrategy), tap({\n next: () => {\n dataResolved = true;\n const resolveEnd = new ResolveEnd(t.id, this.urlSerializer.serialize(t.extractedUrl), this.urlSerializer.serialize(t.urlAfterRedirects), t.targetSnapshot);\n this.events.next(resolveEnd);\n },\n complete: () => {\n if (!dataResolved) {\n this.cancelNavigationTransition(t, typeof ngDevMode === 'undefined' || ngDevMode ? `At least one route resolver didn't emit any value.` : '', NavigationCancellationCode.NoDataFromResolver);\n }\n }\n }));\n }), switchTap(t => {\n const loadComponents = route => {\n const loaders = [];\n if (route.routeConfig?._loadedComponent) {\n route.component = route.routeConfig?._loadedComponent;\n } else if (route.routeConfig?.loadComponent) {\n const injector = route._environmentInjector;\n loaders.push(this.configLoader.loadComponent(injector, route.routeConfig).then(loadedComponent => {\n route.component = loadedComponent;\n }));\n }\n for (const child of route.children) {\n loaders.push(...loadComponents(child));\n }\n return loaders;\n };\n const loaders = loadComponents(t.targetSnapshot.root);\n return loaders.length === 0 ? of(t) : from(Promise.all(loaders).then(() => t));\n }), switchTap(() => this.afterPreactivation()), switchMap(() => {\n const {\n currentSnapshot,\n targetSnapshot\n } = overallTransitionState;\n const viewTransitionStarted = this.createViewTransition?.(this.environmentInjector, currentSnapshot.root, targetSnapshot.root);\n return viewTransitionStarted ? from(viewTransitionStarted).pipe(map(() => overallTransitionState)) : of(overallTransitionState);\n }), take(1), switchMap(t => {\n const targetRouterState = createRouterState(router.routeReuseStrategy, t.targetSnapshot, t.currentRouterState);\n this.currentTransition = overallTransitionState = t = {\n ...t,\n targetRouterState\n };\n this.currentNavigation.update(nav => {\n nav.targetRouterState = targetRouterState;\n return nav;\n });\n this.events.next(new BeforeActivateRoutes());\n const deferred = overallTransitionState.beforeActivateHandler.deferredHandle;\n return deferred ? from(deferred.then(() => t)) : of(t);\n }), tap(t => {\n new ActivateRoutes(router.routeReuseStrategy, overallTransitionState.targetRouterState, overallTransitionState.currentRouterState, evt => this.events.next(evt), this.inputBindingEnabled).activate(this.rootContexts);\n if (!shouldContinueNavigation()) {\n return;\n }\n completedOrAborted = true;\n this.currentNavigation.update(nav => {\n nav.abort = noop;\n return nav;\n });\n this.lastSuccessfulNavigation.set(untracked(this.currentNavigation));\n this.events.next(new NavigationEnd(t.id, this.urlSerializer.serialize(t.extractedUrl), this.urlSerializer.serialize(t.urlAfterRedirects)));\n this.titleStrategy?.updateTitle(t.targetRouterState.snapshot);\n t.resolve(true);\n }), takeUntil(abortSignalToObservable(abortController.signal).pipe(filter(() => !completedOrAborted && !overallTransitionState.targetRouterState), tap(() => {\n this.cancelNavigationTransition(overallTransitionState, abortController.signal.reason + '', NavigationCancellationCode.Aborted);\n }))), tap({\n complete: () => {\n completedOrAborted = true;\n }\n }), takeUntil(this.transitionAbortWithErrorSubject.pipe(tap(err => {\n throw err;\n }))), finalize(() => {\n abortController.abort();\n if (!completedOrAborted) {\n const cancelationReason = typeof ngDevMode === 'undefined' || ngDevMode ? `Navigation ID ${overallTransitionState.id} is not equal to the current navigation id ${this.navigationId}` : '';\n this.cancelNavigationTransition(overallTransitionState, cancelationReason, NavigationCancellationCode.SupersededByNewNavigation);\n }\n if (this.currentTransition?.id === overallTransitionState.id) {\n this.currentNavigation.set(null);\n this.currentTransition = null;\n }\n }), catchError(e => {\n completedOrAborted = true;\n if (this.destroyed) {\n overallTransitionState.resolve(false);\n return EMPTY;\n }\n if (isNavigationCancelingError(e)) {\n this.events.next(new NavigationCancel(overallTransitionState.id, this.urlSerializer.serialize(overallTransitionState.extractedUrl), e.message, e.cancellationCode));\n if (!isRedirectingNavigationCancelingError(e)) {\n overallTransitionState.resolve(false);\n } else {\n this.events.next(new RedirectRequest(e.url, e.navigationBehaviorOptions));\n }\n } else {\n const navigationError = new NavigationError(overallTransitionState.id, this.urlSerializer.serialize(overallTransitionState.extractedUrl), e, overallTransitionState.targetSnapshot ?? undefined);\n try {\n const navigationErrorHandlerResult = runInInjectionContext(this.environmentInjector, () => this.navigationErrorHandler?.(navigationError));\n if (navigationErrorHandlerResult instanceof RedirectCommand) {\n const {\n message,\n cancellationCode\n } = redirectingNavigationError(this.urlSerializer, navigationErrorHandlerResult);\n this.events.next(new NavigationCancel(overallTransitionState.id, this.urlSerializer.serialize(overallTransitionState.extractedUrl), message, cancellationCode));\n this.events.next(new RedirectRequest(navigationErrorHandlerResult.redirectTo, navigationErrorHandlerResult.navigationBehaviorOptions));\n } else {\n this.events.next(navigationError);\n throw e;\n }\n } catch (ee) {\n if (this.options.resolveNavigationPromiseOnError) {\n overallTransitionState.resolve(false);\n } else {\n overallTransitionState.reject(ee);\n }\n }\n }\n return EMPTY;\n }));\n }));\n }\n cancelNavigationTransition(t, reason, code) {\n const navCancel = new NavigationCancel(t.id, this.urlSerializer.serialize(t.extractedUrl), reason, code);\n this.events.next(navCancel);\n t.resolve(false);\n }\n isUpdatingInternalState() {\n return this.currentTransition?.extractedUrl.toString() !== this.currentTransition?.currentUrlTree.toString();\n }\n isUpdatedBrowserUrl() {\n const currentBrowserUrl = this.urlHandlingStrategy.extract(this.urlSerializer.parse(this.location.path(true)));\n const currentNavigation = untracked(this.currentNavigation);\n const targetBrowserUrl = currentNavigation?.targetBrowserUrl ?? currentNavigation?.extractedUrl;\n return currentBrowserUrl.toString() !== targetBrowserUrl?.toString() && !currentNavigation?.extras.skipLocationChange;\n }\n static ɵfac = function NavigationTransitions_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || NavigationTransitions)();\n };\n static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: NavigationTransitions,\n factory: NavigationTransitions.ɵfac,\n providedIn: 'root'\n });\n }\n return NavigationTransitions;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nfunction isBrowserTriggeredNavigation(source) {\n return source !== IMPERATIVE_NAVIGATION;\n}\nconst ROUTE_INJECTOR_CLEANUP = /*#__PURE__*/new InjectionToken(typeof ngDevMode === 'undefined' || ngDevMode ? 'RouteInjectorCleanup' : '');\nfunction routeInjectorCleanup(routeReuseStrategy, routerState, config) {\n const activeRoutes = new Set();\n if (routerState.snapshot.root) {\n collectDescendants(routerState.snapshot.root, activeRoutes);\n }\n const storedHandles = routeReuseStrategy.retrieveStoredRouteHandles?.() || [];\n for (const handle of storedHandles) {\n const internalHandle = handle;\n if (internalHandle?.route?.value?.snapshot) {\n for (const snapshot of internalHandle.route.value.snapshot.pathFromRoot) {\n if (snapshot.routeConfig) {\n activeRoutes.add(snapshot.routeConfig);\n }\n }\n }\n }\n destroyUnusedInjectors(config, activeRoutes, routeReuseStrategy, false);\n}\nfunction collectDescendants(snapshot, activeRoutes) {\n if (snapshot.routeConfig) {\n activeRoutes.add(snapshot.routeConfig);\n }\n for (const child of snapshot.children) {\n collectDescendants(child, activeRoutes);\n }\n}\nfunction destroyUnusedInjectors(routes, activeRoutes, strategy, inheritedForceDestroy) {\n for (const route of routes) {\n const shouldDestroyCurrentRoute = inheritedForceDestroy || !!((route._injector || route._loadedInjector) && !activeRoutes.has(route) && (strategy.shouldDestroyInjector?.(route) ?? false));\n if (route.children) {\n destroyUnusedInjectors(route.children, activeRoutes, strategy, shouldDestroyCurrentRoute);\n }\n if (route.loadChildren && route._loadedRoutes) {\n destroyUnusedInjectors(route._loadedRoutes, activeRoutes, strategy, shouldDestroyCurrentRoute);\n }\n if (shouldDestroyCurrentRoute) {\n if (route._injector) {\n route._injector.destroy();\n route._injector = undefined;\n }\n if (route._loadedInjector) {\n route._loadedInjector.destroy();\n route._loadedInjector = undefined;\n }\n }\n }\n}\nfunction destroyDetachedRouteHandle(handle) {\n const internalHandle = handle;\n if (internalHandle && internalHandle.componentRef) {\n internalHandle.componentRef.destroy();\n }\n}\nlet RouteReuseStrategy = /*#__PURE__*/(() => {\n class RouteReuseStrategy {\n static ɵfac = function RouteReuseStrategy_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || RouteReuseStrategy)();\n };\n static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: RouteReuseStrategy,\n factory: () => (() => inject(DefaultRouteReuseStrategy))(),\n providedIn: 'root'\n });\n }\n return RouteReuseStrategy;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nclass BaseRouteReuseStrategy {\n shouldDetach(route) {\n return false;\n }\n store(route, detachedTree) {}\n shouldAttach(route) {\n return false;\n }\n retrieve(route) {\n return null;\n }\n shouldReuseRoute(future, curr) {\n return future.routeConfig === curr.routeConfig;\n }\n shouldDestroyInjector(route) {\n return true;\n }\n}\nlet DefaultRouteReuseStrategy = /*#__PURE__*/(() => {\n class DefaultRouteReuseStrategy extends BaseRouteReuseStrategy {\n static ɵfac = /* @__PURE__ */(() => {\n let ɵDefaultRouteReuseStrategy_BaseFactory;\n return function DefaultRouteReuseStrategy_Factory(__ngFactoryType__) {\n return (ɵDefaultRouteReuseStrategy_BaseFactory || (ɵDefaultRouteReuseStrategy_BaseFactory = i0.ɵɵgetInheritedFactory(DefaultRouteReuseStrategy)))(__ngFactoryType__ || DefaultRouteReuseStrategy);\n };\n })();\n static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: DefaultRouteReuseStrategy,\n factory: DefaultRouteReuseStrategy.ɵfac,\n providedIn: 'root'\n });\n }\n return DefaultRouteReuseStrategy;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet StateManager = /*#__PURE__*/(() => {\n class StateManager {\n urlSerializer = inject(UrlSerializer);\n options = inject(ROUTER_CONFIGURATION, {\n optional: true\n }) || {};\n canceledNavigationResolution = this.options.canceledNavigationResolution || 'replace';\n location = inject(Location);\n urlHandlingStrategy = inject(UrlHandlingStrategy);\n urlUpdateStrategy = this.options.urlUpdateStrategy || 'deferred';\n currentUrlTree = new UrlTree();\n getCurrentUrlTree() {\n return this.currentUrlTree;\n }\n rawUrlTree = this.currentUrlTree;\n getRawUrlTree() {\n return this.rawUrlTree;\n }\n createBrowserPath({\n finalUrl,\n initialUrl,\n targetBrowserUrl\n }) {\n const rawUrl = finalUrl !== undefined ? this.urlHandlingStrategy.merge(finalUrl, initialUrl) : initialUrl;\n const url = targetBrowserUrl ?? rawUrl;\n const path = url instanceof UrlTree ? this.urlSerializer.serialize(url) : url;\n return path;\n }\n commitTransition({\n targetRouterState,\n finalUrl,\n initialUrl\n }) {\n if (finalUrl && targetRouterState) {\n this.currentUrlTree = finalUrl;\n this.rawUrlTree = this.urlHandlingStrategy.merge(finalUrl, initialUrl);\n this.routerState = targetRouterState;\n } else {\n this.rawUrlTree = initialUrl;\n }\n }\n routerState = createEmptyState(null, inject(EnvironmentInjector));\n getRouterState() {\n return this.routerState;\n }\n _stateMemento = this.createStateMemento();\n get stateMemento() {\n return this._stateMemento;\n }\n updateStateMemento() {\n this._stateMemento = this.createStateMemento();\n }\n createStateMemento() {\n return {\n rawUrlTree: this.rawUrlTree,\n currentUrlTree: this.currentUrlTree,\n routerState: this.routerState\n };\n }\n restoredState() {\n return this.location.getState();\n }\n static ɵfac = function StateManager_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || StateManager)();\n };\n static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: StateManager,\n factory: () => (() => inject(HistoryStateManager))(),\n providedIn: 'root'\n });\n }\n return StateManager;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet HistoryStateManager = /*#__PURE__*/(() => {\n class HistoryStateManager extends StateManager {\n currentPageId = 0;\n lastSuccessfulId = -1;\n get browserPageId() {\n if (this.canceledNavigationResolution !== 'computed') {\n return this.currentPageId;\n }\n return this.restoredState()?.ɵrouterPageId ?? this.currentPageId;\n }\n registerNonRouterCurrentEntryChangeListener(listener) {\n return this.location.subscribe(event => {\n if (event['type'] === 'popstate') {\n setTimeout(() => {\n listener(event['url'], event.state, 'popstate', {\n replaceUrl: true\n });\n });\n }\n });\n }\n handleRouterEvent(e, currentTransition) {\n if (e instanceof NavigationStart) {\n this.updateStateMemento();\n } else if (e instanceof NavigationSkipped) {\n this.commitTransition(currentTransition);\n } else if (e instanceof RoutesRecognized) {\n if (this.urlUpdateStrategy === 'eager') {\n if (!currentTransition.extras.skipLocationChange) {\n this.setBrowserUrl(this.createBrowserPath(currentTransition), currentTransition);\n }\n }\n } else if (e instanceof BeforeActivateRoutes) {\n this.commitTransition(currentTransition);\n if (this.urlUpdateStrategy === 'deferred' && !currentTransition.extras.skipLocationChange) {\n this.setBrowserUrl(this.createBrowserPath(currentTransition), currentTransition);\n }\n } else if (e instanceof NavigationCancel && !isRedirectingEvent(e)) {\n this.restoreHistory(currentTransition);\n } else if (e instanceof NavigationError) {\n this.restoreHistory(currentTransition, true);\n } else if (e instanceof NavigationEnd) {\n this.lastSuccessfulId = e.id;\n this.currentPageId = this.browserPageId;\n }\n }\n setBrowserUrl(path, {\n extras,\n id\n }) {\n const {\n replaceUrl,\n state\n } = extras;\n if (this.location.isCurrentPathEqualTo(path) || !!replaceUrl) {\n const currentBrowserPageId = this.browserPageId;\n const newState = {\n ...state,\n ...this.generateNgRouterState(id, currentBrowserPageId)\n };\n this.location.replaceState(path, '', newState);\n } else {\n const newState = {\n ...state,\n ...this.generateNgRouterState(id, this.browserPageId + 1)\n };\n this.location.go(path, '', newState);\n }\n }\n restoreHistory(navigation, restoringFromCaughtError = false) {\n if (this.canceledNavigationResolution === 'computed') {\n const currentBrowserPageId = this.browserPageId;\n const targetPagePosition = this.currentPageId - currentBrowserPageId;\n if (targetPagePosition !== 0) {\n this.location.historyGo(targetPagePosition);\n } else if (this.getCurrentUrlTree() === navigation.finalUrl && targetPagePosition === 0) {\n this.resetInternalState(navigation);\n this.resetUrlToCurrentUrlTree();\n } else ;\n } else if (this.canceledNavigationResolution === 'replace') {\n if (restoringFromCaughtError) {\n this.resetInternalState(navigation);\n }\n this.resetUrlToCurrentUrlTree();\n }\n }\n resetInternalState({\n finalUrl\n }) {\n this.routerState = this.stateMemento.routerState;\n this.currentUrlTree = this.stateMemento.currentUrlTree;\n this.rawUrlTree = this.urlHandlingStrategy.merge(this.currentUrlTree, finalUrl ?? this.rawUrlTree);\n }\n resetUrlToCurrentUrlTree() {\n this.location.replaceState(this.urlSerializer.serialize(this.getRawUrlTree()), '', this.generateNgRouterState(this.lastSuccessfulId, this.currentPageId));\n }\n generateNgRouterState(navigationId, routerPageId) {\n if (this.canceledNavigationResolution === 'computed') {\n return {\n navigationId,\n ɵrouterPageId: routerPageId\n };\n }\n return {\n navigationId\n };\n }\n static ɵfac = /* @__PURE__ */(() => {\n let ɵHistoryStateManager_BaseFactory;\n return function HistoryStateManager_Factory(__ngFactoryType__) {\n return (ɵHistoryStateManager_BaseFactory || (ɵHistoryStateManager_BaseFactory = i0.ɵɵgetInheritedFactory(HistoryStateManager)))(__ngFactoryType__ || HistoryStateManager);\n };\n })();\n static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: HistoryStateManager,\n factory: HistoryStateManager.ɵfac,\n providedIn: 'root'\n });\n }\n return HistoryStateManager;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nfunction afterNextNavigation(router, action) {\n router.events.pipe(filter(e => e instanceof NavigationEnd || e instanceof NavigationCancel || e instanceof NavigationError || e instanceof NavigationSkipped), map(e => {\n if (e instanceof NavigationEnd || e instanceof NavigationSkipped) {\n return 0;\n }\n const redirecting = e instanceof NavigationCancel ? e.code === NavigationCancellationCode.Redirect || e.code === NavigationCancellationCode.SupersededByNewNavigation : false;\n return redirecting ? 2 : 1;\n }), filter(result => result !== 2), take(1)).subscribe(() => {\n action();\n });\n}\nlet Router = /*#__PURE__*/(() => {\n class Router {\n get currentUrlTree() {\n return this.stateManager.getCurrentUrlTree();\n }\n get rawUrlTree() {\n return this.stateManager.getRawUrlTree();\n }\n disposed = false;\n nonRouterCurrentEntryChangeSubscription;\n console = inject(_Console);\n stateManager = inject(StateManager);\n options = inject(ROUTER_CONFIGURATION, {\n optional: true\n }) || {};\n pendingTasks = inject(_PendingTasksInternal);\n urlUpdateStrategy = this.options.urlUpdateStrategy || 'deferred';\n navigationTransitions = inject(NavigationTransitions);\n urlSerializer = inject(UrlSerializer);\n location = inject(Location);\n urlHandlingStrategy = inject(UrlHandlingStrategy);\n injector = inject(EnvironmentInjector);\n _events = new Subject();\n get events() {\n return this._events;\n }\n get routerState() {\n return this.stateManager.getRouterState();\n }\n navigated = false;\n routeReuseStrategy = inject(RouteReuseStrategy);\n injectorCleanup = inject(ROUTE_INJECTOR_CLEANUP, {\n optional: true\n });\n onSameUrlNavigation = this.options.onSameUrlNavigation || 'ignore';\n config = inject(ROUTES, {\n optional: true\n })?.flat() ?? [];\n componentInputBindingEnabled = !!inject(INPUT_BINDER, {\n optional: true\n });\n currentNavigation = this.navigationTransitions.currentNavigation.asReadonly();\n constructor() {\n this.resetConfig(this.config);\n this.navigationTransitions.setupNavigations(this).subscribe({\n error: e => {}\n });\n this.subscribeToNavigationEvents();\n }\n eventsSubscription = new Subscription();\n subscribeToNavigationEvents() {\n const subscription = this.navigationTransitions.events.subscribe(e => {\n try {\n const currentTransition = this.navigationTransitions.currentTransition;\n const currentNavigation = untracked(this.navigationTransitions.currentNavigation);\n if (currentTransition !== null && currentNavigation !== null) {\n this.stateManager.handleRouterEvent(e, currentNavigation);\n if (e instanceof NavigationCancel && e.code !== NavigationCancellationCode.Redirect && e.code !== NavigationCancellationCode.SupersededByNewNavigation) {\n this.navigated = true;\n } else if (e instanceof NavigationEnd) {\n this.navigated = true;\n this.injectorCleanup?.(this.routeReuseStrategy, this.routerState, this.config);\n } else if (e instanceof RedirectRequest) {\n const opts = e.navigationBehaviorOptions;\n const mergedTree = this.urlHandlingStrategy.merge(e.url, currentTransition.currentRawUrl);\n const extras = {\n scroll: currentTransition.extras.scroll,\n browserUrl: currentTransition.extras.browserUrl,\n info: currentTransition.extras.info,\n skipLocationChange: currentTransition.extras.skipLocationChange,\n replaceUrl: currentTransition.extras.replaceUrl || this.urlUpdateStrategy === 'eager' || isBrowserTriggeredNavigation(currentTransition.source),\n ...opts\n };\n this.scheduleNavigation(mergedTree, IMPERATIVE_NAVIGATION, null, extras, {\n resolve: currentTransition.resolve,\n reject: currentTransition.reject,\n promise: currentTransition.promise\n });\n }\n }\n if (isPublicRouterEvent(e)) {\n this._events.next(e);\n }\n } catch (e) {\n this.navigationTransitions.transitionAbortWithErrorSubject.next(e);\n }\n });\n this.eventsSubscription.add(subscription);\n }\n resetRootComponentType(rootComponentType) {\n this.routerState.root.component = rootComponentType;\n this.navigationTransitions.rootComponentType = rootComponentType;\n }\n initialNavigation() {\n this.setUpLocationChangeListener();\n if (!this.navigationTransitions.hasRequestedNavigation) {\n this.navigateToSyncWithBrowser(this.location.path(true), IMPERATIVE_NAVIGATION, this.stateManager.restoredState(), {\n replaceUrl: true\n });\n }\n }\n setUpLocationChangeListener() {\n this.nonRouterCurrentEntryChangeSubscription ??= this.stateManager.registerNonRouterCurrentEntryChangeListener((url, state, source, extras) => {\n this.navigateToSyncWithBrowser(url, source, state, extras);\n });\n }\n navigateToSyncWithBrowser(url, source, state, extras) {\n const restoredState = state?.navigationId ? state : null;\n if (state) {\n const stateCopy = {\n ...state\n };\n delete stateCopy.navigationId;\n delete stateCopy.ɵrouterPageId;\n if (Object.keys(stateCopy).length !== 0) {\n extras.state = stateCopy;\n }\n }\n const urlTree = this.parseUrl(url);\n this.scheduleNavigation(urlTree, source, restoredState, extras).catch(e => {\n if (this.disposed) {\n return;\n }\n this.injector.get(_INTERNAL_APPLICATION_ERROR_HANDLER)(e);\n });\n }\n get url() {\n return this.serializeUrl(this.currentUrlTree);\n }\n getCurrentNavigation() {\n return untracked(this.navigationTransitions.currentNavigation);\n }\n get lastSuccessfulNavigation() {\n return this.navigationTransitions.lastSuccessfulNavigation;\n }\n resetConfig(config) {\n (typeof ngDevMode === 'undefined' || ngDevMode) && validateConfig(config);\n this.config = config.map(standardizeConfig);\n this.navigated = false;\n }\n ngOnDestroy() {\n this.dispose();\n }\n dispose() {\n this._events.unsubscribe();\n this.navigationTransitions.complete();\n this.nonRouterCurrentEntryChangeSubscription?.unsubscribe();\n this.nonRouterCurrentEntryChangeSubscription = undefined;\n this.disposed = true;\n this.eventsSubscription.unsubscribe();\n }\n createUrlTree(commands, navigationExtras = {}) {\n const {\n relativeTo,\n queryParams,\n fragment,\n queryParamsHandling,\n preserveFragment\n } = navigationExtras;\n const f = preserveFragment ? this.currentUrlTree.fragment : fragment;\n let q = null;\n switch (queryParamsHandling ?? this.options.defaultQueryParamsHandling) {\n case 'merge':\n q = {\n ...this.currentUrlTree.queryParams,\n ...queryParams\n };\n break;\n case 'preserve':\n q = this.currentUrlTree.queryParams;\n break;\n default:\n q = queryParams || null;\n }\n if (q !== null) {\n q = this.removeEmptyProps(q);\n }\n let relativeToUrlSegmentGroup;\n try {\n const relativeToSnapshot = relativeTo ? relativeTo.snapshot : this.routerState.snapshot.root;\n relativeToUrlSegmentGroup = createSegmentGroupFromRoute(relativeToSnapshot);\n } catch (e) {\n if (typeof commands[0] !== 'string' || commands[0][0] !== '/') {\n commands = [];\n }\n relativeToUrlSegmentGroup = this.currentUrlTree.root;\n }\n return createUrlTreeFromSegmentGroup(relativeToUrlSegmentGroup, commands, q, f ?? null, this.urlSerializer);\n }\n navigateByUrl(url, extras = {\n skipLocationChange: false\n }) {\n const urlTree = isUrlTree(url) ? url : this.parseUrl(url);\n const mergedTree = this.urlHandlingStrategy.merge(urlTree, this.rawUrlTree);\n return this.scheduleNavigation(mergedTree, IMPERATIVE_NAVIGATION, null, extras);\n }\n navigate(commands, extras = {\n skipLocationChange: false\n }) {\n validateCommands(commands);\n return this.navigateByUrl(this.createUrlTree(commands, extras), extras);\n }\n serializeUrl(url) {\n return this.urlSerializer.serialize(url);\n }\n parseUrl(url) {\n try {\n return this.urlSerializer.parse(url);\n } catch (e) {\n this.console.warn(_formatRuntimeError(4018, ngDevMode && `Error parsing URL ${url}. Falling back to '/' instead. \\n` + e));\n return this.urlSerializer.parse('/');\n }\n }\n isActive(url, matchOptions) {\n let options;\n if (matchOptions === true) {\n options = {\n ...exactMatchOptions\n };\n } else if (matchOptions === false) {\n options = {\n ...subsetMatchOptions\n };\n } else {\n options = {\n ...subsetMatchOptions,\n ...matchOptions\n };\n }\n if (isUrlTree(url)) {\n return containsTree(this.currentUrlTree, url, options);\n }\n const urlTree = this.parseUrl(url);\n return containsTree(this.currentUrlTree, urlTree, options);\n }\n removeEmptyProps(params) {\n return Object.entries(params).reduce((result, [key, value]) => {\n if (value !== null && value !== undefined) {\n result[key] = value;\n }\n return result;\n }, {});\n }\n scheduleNavigation(rawUrl, source, restoredState, extras, priorPromise) {\n if (this.disposed) {\n return Promise.resolve(false);\n }\n let resolve;\n let reject;\n let promise;\n if (priorPromise) {\n resolve = priorPromise.resolve;\n reject = priorPromise.reject;\n promise = priorPromise.promise;\n } else {\n promise = new Promise((res, rej) => {\n resolve = res;\n reject = rej;\n });\n }\n const taskId = this.pendingTasks.add();\n afterNextNavigation(this, () => {\n queueMicrotask(() => this.pendingTasks.remove(taskId));\n });\n this.navigationTransitions.handleNavigationRequest({\n source,\n restoredState,\n currentUrlTree: this.currentUrlTree,\n currentRawUrl: this.currentUrlTree,\n rawUrl,\n extras,\n resolve: resolve,\n reject: reject,\n promise,\n currentSnapshot: this.routerState.snapshot,\n currentRouterState: this.routerState\n });\n return promise.catch(Promise.reject.bind(Promise));\n }\n static ɵfac = function Router_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || Router)();\n };\n static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: Router,\n factory: Router.ɵfac,\n providedIn: 'root'\n });\n }\n return Router;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nfunction validateCommands(commands) {\n for (let i = 0; i < commands.length; i++) {\n const cmd = commands[i];\n if (cmd == null) {\n throw new _RuntimeError(4008, (typeof ngDevMode === 'undefined' || ngDevMode) && `The requested path contains ${cmd} segment at index ${i}`);\n }\n }\n}\nexport { ActivatedRoute, ActivatedRouteSnapshot, ActivationEnd, ActivationStart, BaseRouteReuseStrategy, BeforeActivateRoutes, BeforeRoutesRecognized, CREATE_VIEW_TRANSITION, ChildActivationEnd, ChildActivationStart, ChildrenOutletContexts, DefaultTitleStrategy, DefaultUrlSerializer, EventType, GuardsCheckEnd, GuardsCheckStart, IMPERATIVE_NAVIGATION, INPUT_BINDER, NAVIGATION_ERROR_HANDLER, NavigationCancel, NavigationCancellationCode, NavigationEnd, NavigationError, NavigationSkipped, NavigationSkippedCode, NavigationStart, NavigationTransitions, OutletContext, PRIMARY_OUTLET, ROUTER_CONFIGURATION, ROUTER_OUTLET_DATA, ROUTES, ROUTE_INJECTOR_CLEANUP, RedirectCommand, ResolveEnd, ResolveStart, RouteConfigLoadEnd, RouteConfigLoadStart, RouteReuseStrategy, RoutedComponentInputBinder, Router, RouterConfigLoader, RouterEvent, RouterOutlet, RouterState, RouterStateSnapshot, RoutesRecognized, Scroll, StateManager, TitleStrategy, UrlHandlingStrategy, UrlSegment, UrlSegmentGroup, UrlSerializer, UrlTree, VIEW_TRANSITION_OPTIONS, afterNextNavigation, convertToParamMap, createUrlTreeFromSnapshot, createViewTransition, defaultUrlMatcher, destroyDetachedRouteHandle, exactMatchOptions, isActive, isRedirectingEvent, isUrlTree, loadChildren, routeInjectorCleanup, stringifyEvent, subsetMatchOptions, ɵEmptyOutletComponent };\n","/**\n * @license Angular v21.2.4\n * (c) 2010-2026 Google LLC. https://angular.dev/\n * License: MIT\n */\n\nimport * as i3 from '@angular/common';\nimport { ViewportScroller, PlatformNavigation, PlatformLocation, ɵPRECOMMIT_HANDLER_SUPPORTED as _PRECOMMIT_HANDLER_SUPPORTED, Location, ɵNavigationAdapterForLocation as _NavigationAdapterForLocation, LOCATION_INITIALIZED, LocationStrategy, HashLocationStrategy, PathLocationStrategy } from '@angular/common';\nimport * as i0 from '@angular/core';\nimport { inject, signal, Injectable, HostAttributeToken, linkedSignal, untracked, ɵINTERNAL_APPLICATION_ERROR_HANDLER as _INTERNAL_APPLICATION_ERROR_HANDLER, effect, ɵRuntimeError as _RuntimeError, computed, booleanAttribute, Directive, Attribute, Input, HostListener, EventEmitter, ContentChildren, Output, createEnvironmentInjector, InjectionToken, NgZone, EnvironmentInjector, DestroyRef, afterNextRender, ɵpromiseWithResolvers as _promiseWithResolvers, ɵpublishExternalGlobalUtil as _publishExternalGlobalUtil, makeEnvironmentProviders, APP_BOOTSTRAP_LISTENER, provideEnvironmentInitializer, Injector, ApplicationRef, ɵIS_ENABLED_BLOCKING_INITIAL_NAVIGATION as _IS_ENABLED_BLOCKING_INITIAL_NAVIGATION, provideAppInitializer, ɵperformanceMarkFeature as _performanceMarkFeature, ENVIRONMENT_INITIALIZER, NgModule } from '@angular/core';\nimport { Router, StateManager, UrlSerializer, NavigationEnd, UrlTree, ROUTER_CONFIGURATION, isUrlTree, ActivatedRoute, isActive, exactMatchOptions, subsetMatchOptions, RouterConfigLoader, IMPERATIVE_NAVIGATION, NavigationTransitions, NavigationStart, NavigationSkipped, NavigationSkippedCode, Scroll, BeforeRoutesRecognized, BeforeActivateRoutes, NavigationCancel, NavigationError, isRedirectingEvent, NavigationCancellationCode, ROUTES, afterNextNavigation, ROUTE_INJECTOR_CLEANUP, routeInjectorCleanup, stringifyEvent, NAVIGATION_ERROR_HANDLER, RoutedComponentInputBinder, INPUT_BINDER, CREATE_VIEW_TRANSITION, createViewTransition, VIEW_TRANSITION_OPTIONS, DefaultUrlSerializer, ChildrenOutletContexts, RouterOutlet, ɵEmptyOutletComponent as _EmptyOutletComponent } from './_router-chunk.mjs';\nimport { Subject, of, from } from 'rxjs';\nimport { mergeAll, catchError, filter, concatMap, mergeMap } from 'rxjs/operators';\nlet ReactiveRouterState = /*#__PURE__*/(() => {\n class ReactiveRouterState {\n router = inject(Router);\n stateManager = inject(StateManager);\n fragment = signal('', ...(ngDevMode ? [{\n debugName: \"fragment\"\n }] : []));\n queryParams = signal({}, ...(ngDevMode ? [{\n debugName: \"queryParams\"\n }] : []));\n path = signal('', ...(ngDevMode ? [{\n debugName: \"path\"\n }] : []));\n serializer = inject(UrlSerializer);\n constructor() {\n this.updateState();\n this.router.events?.subscribe(e => {\n if (e instanceof NavigationEnd) {\n this.updateState();\n }\n });\n }\n updateState() {\n const {\n fragment,\n root,\n queryParams\n } = this.stateManager.getCurrentUrlTree();\n this.fragment.set(fragment);\n this.queryParams.set(queryParams);\n this.path.set(this.serializer.serialize(new UrlTree(root)));\n }\n static ɵfac = function ReactiveRouterState_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || ReactiveRouterState)();\n };\n static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: ReactiveRouterState,\n factory: ReactiveRouterState.ɵfac,\n providedIn: 'root'\n });\n }\n return ReactiveRouterState;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet RouterLink = /*#__PURE__*/(() => {\n class RouterLink {\n router;\n route;\n tabIndexAttribute;\n renderer;\n el;\n locationStrategy;\n hrefAttributeValue = inject(new HostAttributeToken('href'), {\n optional: true\n });\n reactiveHref = linkedSignal(() => {\n if (!this.isAnchorElement) {\n return this.hrefAttributeValue;\n }\n return this.computeHref(this._urlTree());\n }, ...(ngDevMode ? [{\n debugName: \"reactiveHref\"\n }] : []));\n get href() {\n return untracked(this.reactiveHref);\n }\n set href(value) {\n this.reactiveHref.set(value);\n }\n set target(value) {\n this._target.set(value);\n }\n get target() {\n return untracked(this._target);\n }\n _target = signal(undefined, ...(ngDevMode ? [{\n debugName: \"_target\"\n }] : []));\n set queryParams(value) {\n this._queryParams.set(value);\n }\n get queryParams() {\n return untracked(this._queryParams);\n }\n _queryParams = signal(undefined, {\n ...(ngDevMode ? {\n debugName: \"_queryParams\"\n } : {}),\n equal: () => false\n });\n set fragment(value) {\n this._fragment.set(value);\n }\n get fragment() {\n return untracked(this._fragment);\n }\n _fragment = signal(undefined, ...(ngDevMode ? [{\n debugName: \"_fragment\"\n }] : []));\n set queryParamsHandling(value) {\n this._queryParamsHandling.set(value);\n }\n get queryParamsHandling() {\n return untracked(this._queryParamsHandling);\n }\n _queryParamsHandling = signal(undefined, ...(ngDevMode ? [{\n debugName: \"_queryParamsHandling\"\n }] : []));\n set state(value) {\n this._state.set(value);\n }\n get state() {\n return untracked(this._state);\n }\n _state = signal(undefined, {\n ...(ngDevMode ? {\n debugName: \"_state\"\n } : {}),\n equal: () => false\n });\n set info(value) {\n this._info.set(value);\n }\n get info() {\n return untracked(this._info);\n }\n _info = signal(undefined, {\n ...(ngDevMode ? {\n debugName: \"_info\"\n } : {}),\n equal: () => false\n });\n set relativeTo(value) {\n this._relativeTo.set(value);\n }\n get relativeTo() {\n return untracked(this._relativeTo);\n }\n _relativeTo = signal(undefined, ...(ngDevMode ? [{\n debugName: \"_relativeTo\"\n }] : []));\n set preserveFragment(value) {\n this._preserveFragment.set(value);\n }\n get preserveFragment() {\n return untracked(this._preserveFragment);\n }\n _preserveFragment = signal(false, ...(ngDevMode ? [{\n debugName: \"_preserveFragment\"\n }] : []));\n set skipLocationChange(value) {\n this._skipLocationChange.set(value);\n }\n get skipLocationChange() {\n return untracked(this._skipLocationChange);\n }\n _skipLocationChange = signal(false, ...(ngDevMode ? [{\n debugName: \"_skipLocationChange\"\n }] : []));\n set replaceUrl(value) {\n this._replaceUrl.set(value);\n }\n get replaceUrl() {\n return untracked(this._replaceUrl);\n }\n _replaceUrl = signal(false, ...(ngDevMode ? [{\n debugName: \"_replaceUrl\"\n }] : []));\n isAnchorElement;\n onChanges = new Subject();\n applicationErrorHandler = inject(_INTERNAL_APPLICATION_ERROR_HANDLER);\n options = inject(ROUTER_CONFIGURATION, {\n optional: true\n });\n reactiveRouterState = inject(ReactiveRouterState);\n constructor(router, route, tabIndexAttribute, renderer, el, locationStrategy) {\n this.router = router;\n this.route = route;\n this.tabIndexAttribute = tabIndexAttribute;\n this.renderer = renderer;\n this.el = el;\n this.locationStrategy = locationStrategy;\n const tagName = el.nativeElement.tagName?.toLowerCase();\n this.isAnchorElement = tagName === 'a' || tagName === 'area' || !!(typeof customElements === 'object' && customElements.get(tagName)?.observedAttributes?.includes?.('href'));\n if (typeof ngDevMode !== 'undefined' && ngDevMode) {\n effect(() => {\n if (isUrlTree(this.routerLinkInput()) && (this._fragment() !== undefined || this._queryParams() || this._queryParamsHandling() || this._preserveFragment() || this._relativeTo())) {\n throw new _RuntimeError(4017, 'Cannot configure queryParams or fragment when using a UrlTree as the routerLink input value.');\n }\n });\n }\n }\n setTabIndexIfNotOnNativeEl(newTabIndex) {\n if (this.tabIndexAttribute != null || this.isAnchorElement) {\n return;\n }\n this.applyAttributeValue('tabindex', newTabIndex);\n }\n ngOnChanges(changes) {\n this.onChanges.next(this);\n }\n routerLinkInput = signal(null, ...(ngDevMode ? [{\n debugName: \"routerLinkInput\"\n }] : []));\n set routerLink(commandsOrUrlTree) {\n if (commandsOrUrlTree == null) {\n this.routerLinkInput.set(null);\n this.setTabIndexIfNotOnNativeEl(null);\n } else {\n if (isUrlTree(commandsOrUrlTree)) {\n this.routerLinkInput.set(commandsOrUrlTree);\n } else {\n this.routerLinkInput.set(Array.isArray(commandsOrUrlTree) ? commandsOrUrlTree : [commandsOrUrlTree]);\n }\n this.setTabIndexIfNotOnNativeEl('0');\n }\n }\n onClick(button, ctrlKey, shiftKey, altKey, metaKey) {\n const urlTree = this._urlTree();\n if (urlTree === null) {\n return true;\n }\n if (this.isAnchorElement) {\n if (button !== 0 || ctrlKey || shiftKey || altKey || metaKey) {\n return true;\n }\n if (typeof this.target === 'string' && this.target != '_self') {\n return true;\n }\n }\n const extras = {\n skipLocationChange: this.skipLocationChange,\n replaceUrl: this.replaceUrl,\n state: this.state,\n info: this.info\n };\n this.router.navigateByUrl(urlTree, extras)?.catch(e => {\n this.applicationErrorHandler(e);\n });\n return !this.isAnchorElement;\n }\n ngOnDestroy() {}\n applyAttributeValue(attrName, attrValue) {\n const renderer = this.renderer;\n const nativeElement = this.el.nativeElement;\n if (attrValue !== null) {\n renderer.setAttribute(nativeElement, attrName, attrValue);\n } else {\n renderer.removeAttribute(nativeElement, attrName);\n }\n }\n _urlTree = computed(() => {\n this.reactiveRouterState.path();\n if (this._preserveFragment()) {\n this.reactiveRouterState.fragment();\n }\n const shouldTrackParams = handling => handling === 'preserve' || handling === 'merge';\n if (shouldTrackParams(this._queryParamsHandling()) || shouldTrackParams(this.options?.defaultQueryParamsHandling)) {\n this.reactiveRouterState.queryParams();\n }\n const routerLinkInput = this.routerLinkInput();\n if (routerLinkInput === null || !this.router.createUrlTree) {\n return null;\n } else if (isUrlTree(routerLinkInput)) {\n return routerLinkInput;\n }\n return this.router.createUrlTree(routerLinkInput, {\n relativeTo: this._relativeTo() !== undefined ? this._relativeTo() : this.route,\n queryParams: this._queryParams(),\n fragment: this._fragment(),\n queryParamsHandling: this._queryParamsHandling(),\n preserveFragment: this._preserveFragment()\n });\n }, {\n ...(ngDevMode ? {\n debugName: \"_urlTree\"\n } : {}),\n equal: (a, b) => this.computeHref(a) === this.computeHref(b)\n });\n get urlTree() {\n return untracked(this._urlTree);\n }\n computeHref(urlTree) {\n return urlTree !== null && this.locationStrategy ? this.locationStrategy?.prepareExternalUrl(this.router.serializeUrl(urlTree)) ?? '' : null;\n }\n static ɵfac = function RouterLink_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || RouterLink)(i0.ɵɵdirectiveInject(Router), i0.ɵɵdirectiveInject(ActivatedRoute), i0.ɵɵinjectAttribute('tabindex'), i0.ɵɵdirectiveInject(i0.Renderer2), i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i3.LocationStrategy));\n };\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: RouterLink,\n selectors: [[\"\", \"routerLink\", \"\"]],\n hostVars: 2,\n hostBindings: function RouterLink_HostBindings(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵlistener(\"click\", function RouterLink_click_HostBindingHandler($event) {\n return ctx.onClick($event.button, $event.ctrlKey, $event.shiftKey, $event.altKey, $event.metaKey);\n });\n }\n if (rf & 2) {\n i0.ɵɵattribute(\"href\", ctx.reactiveHref(), i0.ɵɵsanitizeUrlOrResourceUrl)(\"target\", ctx._target());\n }\n },\n inputs: {\n target: \"target\",\n queryParams: \"queryParams\",\n fragment: \"fragment\",\n queryParamsHandling: \"queryParamsHandling\",\n state: \"state\",\n info: \"info\",\n relativeTo: \"relativeTo\",\n preserveFragment: [2, \"preserveFragment\", \"preserveFragment\", booleanAttribute],\n skipLocationChange: [2, \"skipLocationChange\", \"skipLocationChange\", booleanAttribute],\n replaceUrl: [2, \"replaceUrl\", \"replaceUrl\", booleanAttribute],\n routerLink: \"routerLink\"\n },\n features: [i0.ɵɵNgOnChangesFeature]\n });\n }\n return RouterLink;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet RouterLinkActive = /*#__PURE__*/(() => {\n class RouterLinkActive {\n router;\n element;\n renderer;\n cdr;\n links;\n classes = [];\n routerEventsSubscription;\n linkInputChangesSubscription;\n _isActive = false;\n get isActive() {\n return this._isActive;\n }\n routerLinkActiveOptions = {\n exact: false\n };\n ariaCurrentWhenActive;\n isActiveChange = new EventEmitter();\n link = inject(RouterLink, {\n optional: true\n });\n constructor(router, element, renderer, cdr) {\n this.router = router;\n this.element = element;\n this.renderer = renderer;\n this.cdr = cdr;\n this.routerEventsSubscription = router.events.subscribe(s => {\n if (s instanceof NavigationEnd) {\n this.update();\n }\n });\n }\n ngAfterContentInit() {\n of(this.links.changes, of(null)).pipe(mergeAll()).subscribe(_ => {\n this.update();\n this.subscribeToEachLinkOnChanges();\n });\n }\n subscribeToEachLinkOnChanges() {\n this.linkInputChangesSubscription?.unsubscribe();\n const allLinkChanges = [...this.links.toArray(), this.link].filter(link => !!link).map(link => link.onChanges);\n this.linkInputChangesSubscription = from(allLinkChanges).pipe(mergeAll()).subscribe(link => {\n if (this._isActive !== this.isLinkActive(this.router)(link)) {\n this.update();\n }\n });\n }\n set routerLinkActive(data) {\n const classes = Array.isArray(data) ? data : data.split(' ');\n this.classes = classes.filter(c => !!c);\n }\n ngOnChanges(changes) {\n this.update();\n }\n ngOnDestroy() {\n this.routerEventsSubscription.unsubscribe();\n this.linkInputChangesSubscription?.unsubscribe();\n }\n update() {\n if (!this.links || !this.router.navigated) return;\n queueMicrotask(() => {\n const hasActiveLinks = this.hasActiveLinks();\n this.classes.forEach(c => {\n if (hasActiveLinks) {\n this.renderer.addClass(this.element.nativeElement, c);\n } else {\n this.renderer.removeClass(this.element.nativeElement, c);\n }\n });\n if (hasActiveLinks && this.ariaCurrentWhenActive !== undefined) {\n this.renderer.setAttribute(this.element.nativeElement, 'aria-current', this.ariaCurrentWhenActive.toString());\n } else {\n this.renderer.removeAttribute(this.element.nativeElement, 'aria-current');\n }\n if (this._isActive !== hasActiveLinks) {\n this._isActive = hasActiveLinks;\n this.cdr.markForCheck();\n this.isActiveChange.emit(hasActiveLinks);\n }\n });\n }\n isLinkActive(router) {\n const options = isActiveMatchOptions(this.routerLinkActiveOptions) ? this.routerLinkActiveOptions : this.routerLinkActiveOptions.exact ?? false ? {\n ...exactMatchOptions\n } : {\n ...subsetMatchOptions\n };\n return link => {\n const urlTree = link.urlTree;\n return urlTree ? untracked(isActive(urlTree, router, options)) : false;\n };\n }\n hasActiveLinks() {\n const isActiveCheckFn = this.isLinkActive(this.router);\n return this.link && isActiveCheckFn(this.link) || this.links.some(isActiveCheckFn);\n }\n static ɵfac = function RouterLinkActive_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || RouterLinkActive)(i0.ɵɵdirectiveInject(Router), i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i0.Renderer2), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef));\n };\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: RouterLinkActive,\n selectors: [[\"\", \"routerLinkActive\", \"\"]],\n contentQueries: function RouterLinkActive_ContentQueries(rf, ctx, dirIndex) {\n if (rf & 1) {\n i0.ɵɵcontentQuery(dirIndex, RouterLink, 5);\n }\n if (rf & 2) {\n let _t;\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.links = _t);\n }\n },\n inputs: {\n routerLinkActiveOptions: \"routerLinkActiveOptions\",\n ariaCurrentWhenActive: \"ariaCurrentWhenActive\",\n routerLinkActive: \"routerLinkActive\"\n },\n outputs: {\n isActiveChange: \"isActiveChange\"\n },\n exportAs: [\"routerLinkActive\"],\n features: [i0.ɵɵNgOnChangesFeature]\n });\n }\n return RouterLinkActive;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nfunction isActiveMatchOptions(options) {\n const o = options;\n return !!(o.paths || o.matrixParams || o.queryParams || o.fragment);\n}\nclass PreloadingStrategy {}\nlet PreloadAllModules = /*#__PURE__*/(() => {\n class PreloadAllModules {\n preload(route, fn) {\n return fn().pipe(catchError(() => of(null)));\n }\n static ɵfac = function PreloadAllModules_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || PreloadAllModules)();\n };\n static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: PreloadAllModules,\n factory: PreloadAllModules.ɵfac,\n providedIn: 'root'\n });\n }\n return PreloadAllModules;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet NoPreloading = /*#__PURE__*/(() => {\n class NoPreloading {\n preload(route, fn) {\n return of(null);\n }\n static ɵfac = function NoPreloading_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || NoPreloading)();\n };\n static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: NoPreloading,\n factory: NoPreloading.ɵfac,\n providedIn: 'root'\n });\n }\n return NoPreloading;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet RouterPreloader = /*#__PURE__*/(() => {\n class RouterPreloader {\n router;\n injector;\n preloadingStrategy;\n loader;\n subscription;\n constructor(router, injector, preloadingStrategy, loader) {\n this.router = router;\n this.injector = injector;\n this.preloadingStrategy = preloadingStrategy;\n this.loader = loader;\n }\n setUpPreloading() {\n this.subscription = this.router.events.pipe(filter(e => e instanceof NavigationEnd), concatMap(() => this.preload())).subscribe(() => {});\n }\n preload() {\n return this.processRoutes(this.injector, this.router.config);\n }\n ngOnDestroy() {\n this.subscription?.unsubscribe();\n }\n processRoutes(injector, routes) {\n const res = [];\n for (const route of routes) {\n if (route.providers && !route._injector) {\n route._injector = createEnvironmentInjector(route.providers, injector, typeof ngDevMode === 'undefined' || ngDevMode ? `Route: ${route.path}` : '');\n }\n const injectorForCurrentRoute = route._injector ?? injector;\n if (route._loadedNgModuleFactory && !route._loadedInjector) {\n route._loadedInjector = route._loadedNgModuleFactory.create(injectorForCurrentRoute).injector;\n }\n const injectorForChildren = route._loadedInjector ?? injectorForCurrentRoute;\n if (route.loadChildren && !route._loadedRoutes && route.canLoad === undefined || route.loadComponent && !route._loadedComponent) {\n res.push(this.preloadConfig(injectorForCurrentRoute, route));\n }\n if (route.children || route._loadedRoutes) {\n res.push(this.processRoutes(injectorForChildren, route.children ?? route._loadedRoutes));\n }\n }\n return from(res).pipe(mergeAll());\n }\n preloadConfig(injector, route) {\n return this.preloadingStrategy.preload(route, () => {\n if (injector.destroyed) {\n return of(null);\n }\n let loadedChildren$;\n if (route.loadChildren && route.canLoad === undefined) {\n loadedChildren$ = from(this.loader.loadChildren(injector, route));\n } else {\n loadedChildren$ = of(null);\n }\n const recursiveLoadChildren$ = loadedChildren$.pipe(mergeMap(config => {\n if (config === null) {\n return of(void 0);\n }\n route._loadedRoutes = config.routes;\n route._loadedInjector = config.injector;\n route._loadedNgModuleFactory = config.factory;\n return this.processRoutes(config.injector ?? injector, config.routes);\n }));\n if (route.loadComponent && !route._loadedComponent) {\n const loadComponent$ = this.loader.loadComponent(injector, route);\n return from([recursiveLoadChildren$, loadComponent$]).pipe(mergeAll());\n } else {\n return recursiveLoadChildren$;\n }\n });\n }\n static ɵfac = function RouterPreloader_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || RouterPreloader)(i0.ɵɵinject(Router), i0.ɵɵinject(i0.EnvironmentInjector), i0.ɵɵinject(PreloadingStrategy), i0.ɵɵinject(RouterConfigLoader));\n };\n static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: RouterPreloader,\n factory: RouterPreloader.ɵfac,\n providedIn: 'root'\n });\n }\n return RouterPreloader;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst ROUTER_SCROLLER = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'Router Scroller' : '');\nlet RouterScroller = /*#__PURE__*/(() => {\n class RouterScroller {\n options;\n routerEventsSubscription;\n scrollEventsSubscription;\n lastId = 0;\n lastSource = IMPERATIVE_NAVIGATION;\n restoredId = 0;\n store = {};\n urlSerializer = inject(UrlSerializer);\n zone = inject(NgZone);\n viewportScroller = inject(ViewportScroller);\n transitions = inject(NavigationTransitions);\n constructor(options) {\n this.options = options;\n this.options.scrollPositionRestoration ||= 'disabled';\n this.options.anchorScrolling ||= 'disabled';\n }\n init() {\n if (this.options.scrollPositionRestoration !== 'disabled') {\n this.viewportScroller.setHistoryScrollRestoration('manual');\n }\n this.routerEventsSubscription = this.createScrollEvents();\n this.scrollEventsSubscription = this.consumeScrollEvents();\n }\n createScrollEvents() {\n return this.transitions.events.subscribe(e => {\n if (e instanceof NavigationStart) {\n this.store[this.lastId] = this.viewportScroller.getScrollPosition();\n this.lastSource = e.navigationTrigger;\n this.restoredId = e.restoredState ? e.restoredState.navigationId : 0;\n } else if (e instanceof NavigationEnd) {\n this.lastId = e.id;\n this.scheduleScrollEvent(e, this.urlSerializer.parse(e.urlAfterRedirects).fragment);\n } else if (e instanceof NavigationSkipped && e.code === NavigationSkippedCode.IgnoredSameUrlNavigation) {\n this.lastSource = undefined;\n this.restoredId = 0;\n this.scheduleScrollEvent(e, this.urlSerializer.parse(e.url).fragment);\n }\n });\n }\n consumeScrollEvents() {\n return this.transitions.events.subscribe(e => {\n if (!(e instanceof Scroll) || e.scrollBehavior === 'manual') return;\n const instantScroll = {\n behavior: 'instant'\n };\n if (e.position) {\n if (this.options.scrollPositionRestoration === 'top') {\n this.viewportScroller.scrollToPosition([0, 0], instantScroll);\n } else if (this.options.scrollPositionRestoration === 'enabled') {\n this.viewportScroller.scrollToPosition(e.position, instantScroll);\n }\n } else {\n if (e.anchor && this.options.anchorScrolling === 'enabled') {\n this.viewportScroller.scrollToAnchor(e.anchor);\n } else if (this.options.scrollPositionRestoration !== 'disabled') {\n this.viewportScroller.scrollToPosition([0, 0]);\n }\n }\n });\n }\n scheduleScrollEvent(routerEvent, anchor) {\n const scroll = untracked(this.transitions.currentNavigation)?.extras.scroll;\n this.zone.runOutsideAngular(async () => {\n await new Promise(resolve => {\n setTimeout(resolve);\n if (typeof requestAnimationFrame !== 'undefined') {\n requestAnimationFrame(resolve);\n }\n });\n this.zone.run(() => {\n this.transitions.events.next(new Scroll(routerEvent, this.lastSource === 'popstate' ? this.store[this.restoredId] : null, anchor, scroll));\n });\n });\n }\n ngOnDestroy() {\n this.routerEventsSubscription?.unsubscribe();\n this.scrollEventsSubscription?.unsubscribe();\n }\n static ɵfac = function RouterScroller_Factory(__ngFactoryType__) {\n i0.ɵɵinvalidFactory();\n };\n static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: RouterScroller,\n factory: RouterScroller.ɵfac\n });\n }\n return RouterScroller;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nfunction getLoadedRoutes(route) {\n return route._loadedRoutes;\n}\nfunction getRouterInstance(injector) {\n return injector.get(Router, null, {\n optional: true\n });\n}\nfunction navigateByUrl(router, url) {\n if (!(router instanceof Router)) {\n throw new Error('The provided router is not an Angular Router.');\n }\n return router.navigateByUrl(url);\n}\nlet NavigationStateManager = /*#__PURE__*/(() => {\n class NavigationStateManager extends StateManager {\n injector = inject(EnvironmentInjector);\n navigation = inject(PlatformNavigation);\n inMemoryScrollingEnabled = inject(ROUTER_SCROLLER, {\n optional: true\n }) !== null;\n base = new URL(inject(PlatformLocation).href).origin;\n appRootURL = new URL(this.location.prepareExternalUrl?.('/') ?? '/', this.base).href;\n precommitHandlerSupported = inject(_PRECOMMIT_HANDLER_SUPPORTED);\n activeHistoryEntry = this.navigation.currentEntry;\n currentNavigation = {};\n nonRouterCurrentEntryChangeSubject = new Subject();\n nonRouterEntryChangeListener;\n get registered() {\n return this.nonRouterEntryChangeListener !== undefined && !this.nonRouterEntryChangeListener.closed;\n }\n constructor() {\n super();\n const navigateListener = event => {\n this.handleNavigate(event);\n };\n this.navigation.addEventListener('navigate', navigateListener);\n inject(DestroyRef).onDestroy(() => this.navigation.removeEventListener('navigate', navigateListener));\n }\n registerNonRouterCurrentEntryChangeListener(listener) {\n this.activeHistoryEntry = this.navigation.currentEntry;\n this.nonRouterEntryChangeListener = this.nonRouterCurrentEntryChangeSubject.subscribe(({\n path,\n state\n }) => {\n listener(path, state, 'popstate', !this.precommitHandlerSupported ? {\n replaceUrl: true\n } : {});\n });\n return this.nonRouterEntryChangeListener;\n }\n async handleRouterEvent(e, transition) {\n this.currentNavigation = {\n ...this.currentNavigation,\n routerTransition: transition\n };\n if (e instanceof NavigationStart) {\n this.updateStateMemento();\n if (this.precommitHandlerSupported) {\n this.maybeCreateNavigationForTransition(transition);\n }\n } else if (e instanceof NavigationSkipped) {\n this.finishNavigation();\n this.commitTransition(transition);\n } else if (e instanceof BeforeRoutesRecognized) {\n transition.routesRecognizeHandler.deferredHandle = new Promise(async resolve => {\n if (this.urlUpdateStrategy === 'eager') {\n try {\n this.maybeCreateNavigationForTransition(transition);\n await this.currentNavigation.commitUrl?.();\n } catch {\n return;\n }\n }\n resolve();\n });\n } else if (e instanceof BeforeActivateRoutes) {\n transition.beforeActivateHandler.deferredHandle = new Promise(async resolve => {\n if (this.urlUpdateStrategy === 'deferred') {\n try {\n this.maybeCreateNavigationForTransition(transition);\n await this.currentNavigation.commitUrl?.();\n } catch {\n return;\n }\n }\n this.commitTransition(transition);\n resolve();\n });\n } else if (e instanceof NavigationCancel || e instanceof NavigationError) {\n const redirectingBeforeUrlCommit = e instanceof NavigationCancel && e.code === NavigationCancellationCode.Redirect && !!this.currentNavigation.commitUrl;\n if (redirectingBeforeUrlCommit) {\n return;\n }\n void this.cancel(transition, e);\n } else if (e instanceof NavigationEnd) {\n const {\n resolveHandler,\n removeAbortListener\n } = this.currentNavigation;\n this.currentNavigation = {};\n removeAbortListener?.();\n this.activeHistoryEntry = this.navigation.currentEntry;\n afterNextRender({\n read: () => resolveHandler?.()\n }, {\n injector: this.injector\n });\n }\n }\n maybeCreateNavigationForTransition(transition) {\n const {\n navigationEvent,\n commitUrl\n } = this.currentNavigation;\n if (commitUrl || navigationEvent && navigationEvent.navigationType === 'traverse' && this.eventAndRouterDestinationsMatch(navigationEvent, transition)) {\n return;\n }\n this.currentNavigation.removeAbortListener?.();\n const path = this.createBrowserPath(transition);\n this.navigate(path, transition);\n }\n navigate(internalPath, transition) {\n const path = transition.extras.skipLocationChange ? this.navigation.currentEntry.url : this.location.prepareExternalUrl(internalPath);\n const state = {\n ...transition.extras.state,\n navigationId: transition.id\n };\n const info = {\n ɵrouterInfo: {\n intercept: true\n }\n };\n if (!this.navigation.transition && this.currentNavigation.navigationEvent) {\n transition.extras.replaceUrl = false;\n }\n const history = this.location.isCurrentPathEqualTo(path) || transition.extras.replaceUrl || transition.extras.skipLocationChange ? 'replace' : 'push';\n handleResultRejections(this.navigation.navigate(path, {\n state,\n history,\n info\n }));\n }\n finishNavigation() {\n this.currentNavigation.commitUrl?.();\n this.currentNavigation?.resolveHandler?.();\n this.currentNavigation = {};\n }\n async cancel(transition, cause) {\n this.currentNavigation.rejectNavigateEvent?.();\n const clearedState = {};\n this.currentNavigation = clearedState;\n if (isRedirectingEvent(cause)) {\n return;\n }\n const isTraversalReset = this.canceledNavigationResolution === 'computed' && this.navigation.currentEntry.key !== this.activeHistoryEntry.key;\n this.resetInternalState(transition.finalUrl, isTraversalReset);\n if (this.navigation.currentEntry.id === this.activeHistoryEntry.id) {\n return;\n }\n if (cause instanceof NavigationCancel && cause.code === NavigationCancellationCode.Aborted) {\n await Promise.resolve();\n if (this.currentNavigation !== clearedState) {\n return;\n }\n }\n if (isTraversalReset) {\n handleResultRejections(this.navigation.traverseTo(this.activeHistoryEntry.key, {\n info: {\n ɵrouterInfo: {\n intercept: false\n }\n }\n }));\n } else {\n const internalPath = this.urlSerializer.serialize(this.getCurrentUrlTree());\n const pathOrUrl = this.location.prepareExternalUrl(internalPath);\n handleResultRejections(this.navigation.navigate(pathOrUrl, {\n state: this.activeHistoryEntry.getState(),\n history: 'replace',\n info: {\n ɵrouterInfo: {\n intercept: false\n }\n }\n }));\n }\n }\n resetInternalState(finalUrl, traversalReset) {\n this.routerState = this.stateMemento.routerState;\n this.currentUrlTree = this.stateMemento.currentUrlTree;\n this.rawUrlTree = traversalReset ? this.stateMemento.rawUrlTree : this.urlHandlingStrategy.merge(this.currentUrlTree, finalUrl ?? this.rawUrlTree);\n }\n handleNavigate(event) {\n if (!event.canIntercept || event.navigationType === 'reload') {\n return;\n }\n const routerInfo = event?.info?.ɵrouterInfo;\n if (routerInfo && !routerInfo.intercept) {\n return;\n }\n const isTriggeredByRouterTransition = !!routerInfo;\n if (!isTriggeredByRouterTransition) {\n this.currentNavigation.routerTransition?.abort();\n if (!this.registered) {\n this.finishNavigation();\n return;\n }\n }\n this.currentNavigation = {\n ...this.currentNavigation\n };\n this.currentNavigation.navigationEvent = event;\n const abortHandler = () => {\n this.currentNavigation.routerTransition?.abort();\n };\n event.signal.addEventListener('abort', abortHandler);\n this.currentNavigation.removeAbortListener = () => event.signal.removeEventListener('abort', abortHandler);\n let scroll = this.inMemoryScrollingEnabled ? 'manual' : this.currentNavigation.routerTransition?.extras.scroll ?? 'after-transition';\n const interceptOptions = {\n scroll\n };\n const {\n promise: handlerPromise,\n resolve: resolveHandler,\n reject: rejectHandler\n } = _promiseWithResolvers();\n const {\n promise: precommitHandlerPromise,\n resolve: resolvePrecommitHandler,\n reject: rejectPrecommitHandler\n } = _promiseWithResolvers();\n this.currentNavigation.rejectNavigateEvent = () => {\n event.signal.removeEventListener('abort', abortHandler);\n rejectPrecommitHandler();\n rejectHandler();\n };\n this.currentNavigation.resolveHandler = () => {\n this.currentNavigation.removeAbortListener?.();\n resolveHandler();\n };\n handlerPromise.catch(() => {});\n precommitHandlerPromise.catch(() => {});\n interceptOptions.handler = () => handlerPromise;\n if (this.deferredCommitSupported(event)) {\n const redirect = new Promise(resolve => {\n interceptOptions.precommitHandler = controller => {\n if (this.navigation.transition?.navigationType === 'traverse') {\n resolve(() => {});\n } else {\n resolve(controller.redirect.bind(controller));\n }\n return precommitHandlerPromise;\n };\n });\n this.currentNavigation.commitUrl = async () => {\n this.currentNavigation.commitUrl = undefined;\n const transition = this.currentNavigation.routerTransition;\n if (transition && !transition.extras.skipLocationChange) {\n const internalPath = this.createBrowserPath(transition);\n const history = this.location.isCurrentPathEqualTo(internalPath) || !!transition.extras.replaceUrl ? 'replace' : 'push';\n const state = {\n ...transition.extras.state,\n navigationId: transition.id\n };\n const pathOrUrl = this.location.prepareExternalUrl(internalPath);\n (await redirect)(pathOrUrl, {\n state,\n history\n });\n }\n resolvePrecommitHandler();\n return await this.navigation.transition?.committed;\n };\n }\n event.intercept(interceptOptions);\n if (!isTriggeredByRouterTransition) {\n this.handleNavigateEventTriggeredOutsideRouterAPIs(event);\n }\n }\n handleNavigateEventTriggeredOutsideRouterAPIs(event) {\n const path = event.destination.url.substring(this.appRootURL.length - 1);\n const state = event.destination.getState();\n this.nonRouterCurrentEntryChangeSubject.next({\n path,\n state\n });\n }\n eventAndRouterDestinationsMatch(navigateEvent, transition) {\n const internalPath = this.createBrowserPath(transition);\n const eventDestination = new URL(navigateEvent.destination.url);\n const routerDestination = this.location.prepareExternalUrl(internalPath);\n return new URL(routerDestination, eventDestination.origin).href === eventDestination.href;\n }\n deferredCommitSupported(event) {\n return this.precommitHandlerSupported && event.cancelable;\n }\n static ɵfac = function NavigationStateManager_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || NavigationStateManager)();\n };\n static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: NavigationStateManager,\n factory: NavigationStateManager.ɵfac,\n providedIn: 'root'\n });\n }\n return NavigationStateManager;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nfunction handleResultRejections(result) {\n result.finished?.catch(() => {});\n result.committed?.catch(() => {});\n return result;\n}\nfunction provideRouter(routes, ...features) {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n _publishExternalGlobalUtil('ɵgetLoadedRoutes', getLoadedRoutes);\n _publishExternalGlobalUtil('ɵgetRouterInstance', getRouterInstance);\n _publishExternalGlobalUtil('ɵnavigateByUrl', navigateByUrl);\n }\n return makeEnvironmentProviders([{\n provide: ROUTES,\n multi: true,\n useValue: routes\n }, typeof ngDevMode === 'undefined' || ngDevMode ? {\n provide: ROUTER_IS_PROVIDED,\n useValue: true\n } : [], {\n provide: ActivatedRoute,\n useFactory: rootRoute\n }, {\n provide: APP_BOOTSTRAP_LISTENER,\n multi: true,\n useFactory: getBootstrapListener\n }, features.map(feature => feature.ɵproviders)]);\n}\nfunction rootRoute() {\n return inject(Router).routerState.root;\n}\nfunction routerFeature(kind, providers) {\n return {\n ɵkind: kind,\n ɵproviders: providers\n };\n}\nconst ROUTER_IS_PROVIDED = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'Router is provided' : '', {\n factory: () => false\n});\nconst routerIsProvidedDevModeCheck = {\n provide: ENVIRONMENT_INITIALIZER,\n multi: true,\n useFactory() {\n return () => {\n if (!inject(ROUTER_IS_PROVIDED)) {\n console.warn('`provideRoutes` was called without `provideRouter` or `RouterModule.forRoot`. ' + 'This is likely a mistake.');\n }\n };\n }\n};\nfunction provideRoutes(routes) {\n return [{\n provide: ROUTES,\n multi: true,\n useValue: routes\n }, typeof ngDevMode === 'undefined' || ngDevMode ? routerIsProvidedDevModeCheck : []];\n}\nfunction withInMemoryScrolling(options = {}) {\n const providers = [{\n provide: ROUTER_SCROLLER,\n useFactory: () => new RouterScroller(options)\n }];\n return routerFeature(4, providers);\n}\nfunction withExperimentalPlatformNavigation() {\n const devModeLocationCheck = typeof ngDevMode === 'undefined' || ngDevMode ? [provideEnvironmentInitializer(() => {\n const locationInstance = inject(Location);\n if (!(locationInstance instanceof _NavigationAdapterForLocation)) {\n const locationConstructorName = locationInstance.constructor.name;\n let message = `'withExperimentalPlatformNavigation' provides a 'Location' implementation that ensures navigation APIs are consistently used.` + ` An instance of ${locationConstructorName} was found instead.`;\n if (locationConstructorName === 'SpyLocation') {\n message += ` One of 'RouterTestingModule' or 'provideLocationMocks' was likely used. 'withExperimentalPlatformNavigation' does not work with these because they override the Location implementation.`;\n }\n throw new Error(message);\n }\n })] : [];\n const providers = [{\n provide: StateManager,\n useExisting: NavigationStateManager\n }, {\n provide: Location,\n useClass: _NavigationAdapterForLocation\n }, devModeLocationCheck];\n return routerFeature(11, providers);\n}\nfunction getBootstrapListener() {\n const injector = inject(Injector);\n return bootstrappedComponentRef => {\n const ref = injector.get(ApplicationRef);\n if (bootstrappedComponentRef !== ref.components[0]) {\n return;\n }\n const router = injector.get(Router);\n const bootstrapDone = injector.get(BOOTSTRAP_DONE);\n if (injector.get(INITIAL_NAVIGATION) === 1) {\n router.initialNavigation();\n }\n injector.get(ROUTER_PRELOADER, null, {\n optional: true\n })?.setUpPreloading();\n injector.get(ROUTER_SCROLLER, null, {\n optional: true\n })?.init();\n router.resetRootComponentType(ref.componentTypes[0]);\n if (!bootstrapDone.closed) {\n bootstrapDone.next();\n bootstrapDone.complete();\n bootstrapDone.unsubscribe();\n }\n };\n}\nconst BOOTSTRAP_DONE = /*#__PURE__*/new InjectionToken(typeof ngDevMode === 'undefined' || ngDevMode ? 'bootstrap done indicator' : '', {\n factory: () => {\n return new Subject();\n }\n});\nconst INITIAL_NAVIGATION = /*#__PURE__*/new InjectionToken(typeof ngDevMode === 'undefined' || ngDevMode ? 'initial navigation' : '', {\n factory: () => 1\n});\nfunction withEnabledBlockingInitialNavigation() {\n const providers = [{\n provide: _IS_ENABLED_BLOCKING_INITIAL_NAVIGATION,\n useValue: true\n }, {\n provide: INITIAL_NAVIGATION,\n useValue: 0\n }, provideAppInitializer(() => {\n const injector = inject(Injector);\n const locationInitialized = injector.get(LOCATION_INITIALIZED, Promise.resolve());\n return locationInitialized.then(() => {\n return new Promise(resolve => {\n const router = injector.get(Router);\n const bootstrapDone = injector.get(BOOTSTRAP_DONE);\n afterNextNavigation(router, () => {\n resolve(true);\n });\n injector.get(NavigationTransitions).afterPreactivation = () => {\n resolve(true);\n return bootstrapDone.closed ? of(void 0) : bootstrapDone;\n };\n router.initialNavigation();\n });\n });\n })];\n return routerFeature(2, providers);\n}\nfunction withDisabledInitialNavigation() {\n const providers = [provideAppInitializer(() => {\n inject(Router).setUpLocationChangeListener();\n }), {\n provide: INITIAL_NAVIGATION,\n useValue: 2\n }];\n return routerFeature(3, providers);\n}\nfunction withDebugTracing() {\n let providers = [];\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n providers = [{\n provide: ENVIRONMENT_INITIALIZER,\n multi: true,\n useFactory: () => {\n const router = inject(Router);\n return () => router.events.subscribe(e => {\n console.group?.(`Router Event: ${e.constructor.name}`);\n console.log(stringifyEvent(e));\n console.log(e);\n console.groupEnd?.();\n });\n }\n }];\n } else {\n providers = [];\n }\n return routerFeature(1, providers);\n}\nconst ROUTER_PRELOADER = /*#__PURE__*/new InjectionToken(typeof ngDevMode === 'undefined' || ngDevMode ? 'router preloader' : '');\nfunction withPreloading(preloadingStrategy) {\n const providers = [{\n provide: ROUTER_PRELOADER,\n useExisting: RouterPreloader\n }, {\n provide: PreloadingStrategy,\n useExisting: preloadingStrategy\n }];\n return routerFeature(0, providers);\n}\nfunction withRouterConfig(options) {\n const providers = [{\n provide: ROUTER_CONFIGURATION,\n useValue: options\n }];\n return routerFeature(5, providers);\n}\nfunction withHashLocation() {\n const providers = [{\n provide: LocationStrategy,\n useClass: HashLocationStrategy\n }];\n return routerFeature(6, providers);\n}\nfunction withNavigationErrorHandler(handler) {\n const providers = [{\n provide: NAVIGATION_ERROR_HANDLER,\n useValue: handler\n }];\n return routerFeature(7, providers);\n}\nfunction withExperimentalAutoCleanupInjectors() {\n return routerFeature(10, [{\n provide: ROUTE_INJECTOR_CLEANUP,\n useValue: routeInjectorCleanup\n }]);\n}\nfunction withComponentInputBinding() {\n const providers = [RoutedComponentInputBinder, {\n provide: INPUT_BINDER,\n useExisting: RoutedComponentInputBinder\n }];\n return routerFeature(8, providers);\n}\nfunction withViewTransitions(options) {\n _performanceMarkFeature('NgRouterViewTransitions');\n const providers = [{\n provide: CREATE_VIEW_TRANSITION,\n useValue: createViewTransition\n }, {\n provide: VIEW_TRANSITION_OPTIONS,\n useValue: {\n skipNextTransition: !!options?.skipInitialTransition,\n ...options\n }\n }];\n return routerFeature(9, providers);\n}\nconst ROUTER_DIRECTIVES = [RouterOutlet, RouterLink, RouterLinkActive, _EmptyOutletComponent];\nconst ROUTER_FORROOT_GUARD = /*#__PURE__*/new InjectionToken(typeof ngDevMode === 'undefined' || ngDevMode ? 'router duplicate forRoot guard' : '');\nconst ROUTER_PROVIDERS = [Location, {\n provide: UrlSerializer,\n useClass: DefaultUrlSerializer\n}, Router, ChildrenOutletContexts, {\n provide: ActivatedRoute,\n useFactory: rootRoute\n}, RouterConfigLoader, typeof ngDevMode === 'undefined' || ngDevMode ? {\n provide: ROUTER_IS_PROVIDED,\n useValue: true\n} : []];\nlet RouterModule = /*#__PURE__*/(() => {\n class RouterModule {\n constructor() {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n inject(ROUTER_FORROOT_GUARD, {\n optional: true\n });\n }\n }\n static forRoot(routes, config) {\n return {\n ngModule: RouterModule,\n providers: [ROUTER_PROVIDERS, typeof ngDevMode === 'undefined' || ngDevMode ? config?.enableTracing ? withDebugTracing().ɵproviders : [] : [], {\n provide: ROUTES,\n multi: true,\n useValue: routes\n }, typeof ngDevMode === 'undefined' || ngDevMode ? {\n provide: ROUTER_FORROOT_GUARD,\n useFactory: provideForRootGuard\n } : [], config?.errorHandler ? {\n provide: NAVIGATION_ERROR_HANDLER,\n useValue: config.errorHandler\n } : [], {\n provide: ROUTER_CONFIGURATION,\n useValue: config ? config : {}\n }, config?.useHash ? provideHashLocationStrategy() : providePathLocationStrategy(), provideRouterScroller(), config?.preloadingStrategy ? withPreloading(config.preloadingStrategy).ɵproviders : [], config?.initialNavigation ? provideInitialNavigation(config) : [], config?.bindToComponentInputs ? withComponentInputBinding().ɵproviders : [], config?.enableViewTransitions ? withViewTransitions().ɵproviders : [], provideRouterInitializer()]\n };\n }\n static forChild(routes) {\n return {\n ngModule: RouterModule,\n providers: [{\n provide: ROUTES,\n multi: true,\n useValue: routes\n }]\n };\n }\n static ɵfac = function RouterModule_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || RouterModule)();\n };\n static ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: RouterModule\n });\n static ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({});\n }\n return RouterModule;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nfunction provideRouterScroller() {\n return {\n provide: ROUTER_SCROLLER,\n useFactory: () => {\n const viewportScroller = inject(ViewportScroller);\n const config = inject(ROUTER_CONFIGURATION);\n if (config.scrollOffset) {\n viewportScroller.setOffset(config.scrollOffset);\n }\n return new RouterScroller(config);\n }\n };\n}\nfunction provideHashLocationStrategy() {\n return {\n provide: LocationStrategy,\n useClass: HashLocationStrategy\n };\n}\nfunction providePathLocationStrategy() {\n return {\n provide: LocationStrategy,\n useClass: PathLocationStrategy\n };\n}\nfunction provideForRootGuard() {\n const router = inject(Router, {\n optional: true,\n skipSelf: true\n });\n if (router) {\n throw new _RuntimeError(4007, `The Router was provided more than once. This can happen if 'forRoot' is used outside of the root injector.` + ` Lazy loaded modules should use RouterModule.forChild() instead.`);\n }\n return 'guarded';\n}\nfunction provideInitialNavigation(config) {\n return [config.initialNavigation === 'disabled' ? withDisabledInitialNavigation().ɵproviders : [], config.initialNavigation === 'enabledBlocking' ? withEnabledBlockingInitialNavigation().ɵproviders : []];\n}\nconst ROUTER_INITIALIZER = /*#__PURE__*/new InjectionToken(typeof ngDevMode === 'undefined' || ngDevMode ? 'Router Initializer' : '');\nfunction provideRouterInitializer() {\n return [{\n provide: ROUTER_INITIALIZER,\n useFactory: getBootstrapListener\n }, {\n provide: APP_BOOTSTRAP_LISTENER,\n multi: true,\n useExisting: ROUTER_INITIALIZER\n }];\n}\nexport { NoPreloading, PreloadAllModules, PreloadingStrategy, ROUTER_INITIALIZER, ROUTER_PROVIDERS, RouterLink, RouterLinkActive, RouterModule, RouterPreloader, provideRouter, provideRoutes, withComponentInputBinding, withDebugTracing, withDisabledInitialNavigation, withEnabledBlockingInitialNavigation, withExperimentalAutoCleanupInjectors, withExperimentalPlatformNavigation, withHashLocation, withInMemoryScrolling, withNavigationErrorHandler, withPreloading, withRouterConfig, withViewTransitions };\n"],"mappings":"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","names":["EventManagerPlugin","_doc","DomEventsPlugin","doc","eventName","element","handler","options","target","callback","__ngFactoryType__","ɵɵinject","DOCUMENT","ɵɵdefineInjectable","EVENT_MANAGER_PLUGINS","InjectionToken","EventManager","plugins","_zone","plugin","otherPlugins","p","domEventPlugin","RuntimeError","NgZone","APP_ID_ATTRIBUTE_NAME","removeElements","elements","createStyleElement","style","styleElement","addServerStyles","appId","inline","external","createLinkElement","url","linkElement","SharedStylesHost","nonce","platformId","styles","urls","value","usages","creator","record","host","hostNode","APP_ID","CSP_NONCE","PLATFORM_ID","NAMESPACE_URIS","COMPONENT_REGEX","COMPONENT_VARIABLE","HOST_ATTR","CONTENT_ATTR","REMOVE_STYLES_ON_COMPONENT_DESTROY_DEFAULT","REMOVE_STYLES_ON_COMPONENT_DESTROY","InjectionToken","shimContentAttribute","componentShortId","COMPONENT_REGEX","shimHostAttribute","shimStylesContent","compId","styles","s","DomRendererFactory2","eventManager","sharedStylesHost","appId","removeStylesOnCompDestroy","doc","ngZone","nonce","tracingService","DefaultDomRenderer2","element","type","renderer","EmulatedEncapsulationDomRenderer2","NoneEncapsulationDomRenderer","rendererByCompId","ViewEncapsulation","ShadowDomRenderer","componentId","__ngFactoryType__","ɵɵinject","EventManager","SharedStylesHost","APP_ID","REMOVE_STYLES_ON_COMPONENT_DESTROY","DOCUMENT","NgZone","CSP_NONCE","TracingService","ɵɵdefineInjectable","name","namespace","NAMESPACE_URIS","value","parent","newChild","isTemplateNode","refChild","_parent","oldChild","selectorOrNode","preserveContent","el","RuntimeError","node","namespaceUri","style","flags","RendererStyleFlags2","target","event","callback","options","getDOM","wrappedCallback","eventHandler","isTemplateNode","node","ShadowDomRenderer","DefaultDomRenderer2","eventManager","hostEl","component","doc","ngZone","nonce","tracingService","sharedStylesHost","styles","shimStylesContent","style","styleEl","styleUrls","styleUrl","linkEl","createLinkElement","parent","newChild","refChild","_parent","oldChild","NoneEncapsulationDomRenderer","removeStylesOnCompDestroy","compId","allLeavingAnimations","EmulatedEncapsulationDomRenderer2","appId","shimContentAttribute","shimHostAttribute","element","name","el","BrowserDomAdapter","_BrowserDomAdapter","DomAdapter","setRootDomAdapter","el","evt","listener","options","node","tagName","doc","target","href","getBaseElementHref","relativePath","baseElement","name","parseCookieValue","url","BrowserXhr","__ngFactoryType__","ɵɵdefineInjectable","MODIFIER_KEYS","_keyMap","MODIFIER_KEY_GETTERS","event","KeyEventsPlugin","EventManagerPlugin","doc","eventName","element","handler","options","parsedEvent","outsideHandler","getDOM","parts","domEventName","key","fullKey","codeIX","modifierName","index","result","fullKeyCode","keycode","modifierGetter","zone","keyName","ɵɵinject","DOCUMENT","bootstrapApplication","rootComponent","context","config","__spreadValues","createProvidersConfig","internalCreateApplication","createProvidersConfig","options","context","BROWSER_MODULE_PROVIDERS","INTERNAL_BROWSER_PLATFORM_PROVIDERS","initDomAdapter","BrowserDomAdapter","errorHandler","ErrorHandler","_document","setDocument","INTERNAL_BROWSER_PLATFORM_PROVIDERS","PLATFORM_ID","PLATFORM_BROWSER_ID","PLATFORM_INITIALIZER","DOCUMENT","BROWSER_MODULE_PROVIDERS","INJECTOR_SCOPE","ErrorHandler","errorHandler","EVENT_MANAGER_PLUGINS","DomEventsPlugin","KeyEventsPlugin","DomRendererFactory2","SharedStylesHost","EventManager","RendererFactory2","XhrFactory","BrowserXhr","Title","_doc","newTitle","__ngFactoryType__","ɵɵinject","DOCUMENT","ɵɵdefineInjectable","PRIMARY_OUTLET","RouteTitleKey","ParamsAsMap","params","name","v","convertToParamMap","matchParts","routeParts","urlSegments","posParams","i","part","segment","defaultUrlMatcher","segments","segmentGroup","route","parts","wildcardIndex","consumed","pre","post","firstValueFrom","source","resolve","reject","first","value","err","shallowEqualArrays","a","b","shallowEqual","k1","getDataKeys","k2","key","equalArraysOrString","obj","aSorted","bSorted","val","index","last","wrapIntoObservable","isObservable","isPromise","from","of","wrapIntoPromise","pathCompareMap","equalSegmentGroups","containsSegmentGroup","paramCompareMap","equalParams","containsParams","exactMatchOptions","subsetMatchOptions","isActive","url","router","matchOptions","urlTree","UrlTree","computed","containsTree","__spreadValues","container","containee","options","matrixParams","equalPath","matrixParamsMatch","c","containsSegmentGroupHelper","containeePaths","current","next","containerPaths","containeeSegment","root","UrlSegmentGroup","queryParams","fragment","DEFAULT_SERIALIZER","children","serializePaths","UrlSegment","path","parameters","serializePath","equalSegments","as","bs","mapChildrenIntoArray","fn","res","childOutlet","child","UrlSerializer","__ngFactoryType__","ɵɵdefineInjectable","DefaultUrlSerializer","p","UrlParser","tree","serializeSegment","query","serializeQueryParams","encodeUriFragment","primary","k","encodeUriString","s","encodeUriQuery","encodeUriSegment","decode","decodeQuery","serializeMatrixParams","strParams","SEGMENT_RE","matchSegments","str","match","MATRIX_PARAM_SEGMENT_RE","matchMatrixKeySegments","QUERY_PARAM_RE","matchQueryParams","QUERY_PARAM_VALUE_RE","matchUrlQueryParamValue","depth","RuntimeError","valueMatch","decodedKey","decodedVal","currentVal","allowPrimary","outletName","createRoot","rootCandidate","squashSegmentGroup","newChildren","childCandidate","grandChildOutlet","grandChild","mergeTrivialChildren","isUrlTree","createUrlTreeFromSnapshot","relativeTo","commands","urlSerializer","relativeToUrlSegmentGroup","createSegmentGroupFromRoute","createUrlTreeFromSegmentGroup","targetGroup","createSegmentGroupFromRouteRecursive","currentRoute","childOutlets","childSnapshot","rootSegmentGroup","nav","computeNavigation","position","findStartingPositionForTargetGroup","newSegmentGroup","updateSegmentGroupChildren","updateSegmentGroup","isMatrixParams","command","isCommandWithOutlets","normalizeQueryParams","oldRoot","oldSegmentGroup","qp","replaceSegment","newRoot","oldSegment","newSegment","Navigation","isAbsolute","numberOfDoubleDots","cmdWithOutlet","cmd","cmdIdx","outlets","urlPart","partIndex","Position","processChildren","target","modifier","createPositionApplyingDoubleDots","group","g","ci","dd","getOutlets","startIndex","m","prefixedWith","slicedCommands","createNewSegmentGroup","childrenOfEmptyChild","outlet","currentCommandIndex","currentPathIndex","noMatch","curr","compare","paths","createNewSegmentChildren","stringify","IMPERATIVE_NAVIGATION","EventType","RouterEvent","id","NavigationStart","navigationTrigger","restoredState","NavigationEnd","urlAfterRedirects","NavigationCancellationCode","NavigationSkippedCode","NavigationCancel","reason","code","isRedirectingEvent","event","NavigationSkipped","NavigationError","error","RoutesRecognized","state","GuardsCheckStart","GuardsCheckEnd","shouldActivate","ResolveStart","ResolveEnd","RouteConfigLoadStart","RouteConfigLoadEnd","ChildActivationStart","snapshot","ChildActivationEnd","ActivationStart","ActivationEnd","Scroll","routerEvent","anchor","scrollBehavior","pos","BeforeActivateRoutes","BeforeRoutesRecognized","RedirectRequest","navigationBehaviorOptions","isPublicRouterEvent","e","OutletContext","rootInjector","ChildrenOutletContexts","childName","outlet","context","contexts","__ngFactoryType__","ɵɵinject","EnvironmentInjector","ɵɵdefineInjectable","Tree","root","t","p","n","findNode","findPath","c","cc","s","value","node","child","path","TreeNode","children","nodeChildrenAsMap","map","RouterState","snapshot","setRouterState","createEmptyState","rootComponent","injector","createEmptyStateSnapshot","emptyUrl","BehaviorSubject","UrlSegment","emptyParams","emptyData","emptyQueryParams","fragment","activated","ActivatedRoute","PRIMARY_OUTLET","ActivatedRouteSnapshot","RouterStateSnapshot","urlSubject","paramsSubject","queryParamsSubject","fragmentSubject","dataSubject","component","futureSnapshot","d","RouteTitleKey","of","convertToParamMap","getInherited","route","parent","paramsInheritanceStrategy","inherited","routeConfig","__spreadValues","hasStaticTitle","url","params","queryParams","data","resolve","environmentInjector","segment","matched","serializeNode","state","advanceActivatedRoute","currentSnapshot","nextSnapshot","shallowEqual","shallowEqualArrays","equalParamsAndUrlSegments","a","b","equalUrlParams","equalSegments","parentsMismatch","config","ROUTER_OUTLET_DATA","InjectionToken","RouterOutlet","EventEmitter","input","inject","ViewContainerRef","ChangeDetectorRef","INPUT_BINDER","changes","firstChange","previousValue","outletName","RuntimeError","cmp","ref","activatedRoute","location","childContexts","OutletInjector","ɵɵdefineDirective","ɵɵNgOnChangesFeature","outletData","token","notFoundValue","RoutedComponentInputBinder","dataSubscription","combineLatest","switchMap","index","mirror","reflectComponentType","templateName","ɵEmptyOutletComponent","ɵɵdefineComponent","rf","ctx","ɵɵelement","standardizeConfig","r","__spreadProps","createRouterState","routeReuseStrategy","curr","prevState","createNode","createOrReuseChildren","detachedRouteHandle","tree","createActivatedRoute","RedirectCommand","redirectTo","navigationBehaviorOptions","NAVIGATION_CANCELING_ERROR","redirectingNavigationError","urlSerializer","redirect","isUrlTree","error","navigationCancelingError","NavigationCancellationCode","message","code","isRedirectingNavigationCancelingError","isNavigationCancelingError","ActivateRoutes","routeReuseStrategy","futureState","currState","forwardEvent","inputBindingEnabled","parentContexts","futureRoot","currRoot","advanceActivatedRoute","futureNode","currNode","contexts","children","nodeChildrenAsMap","futureChild","childOutletName","v","parentContext","future","curr","context","route","treeNode","componentRef","c","ActivationEnd","ChildActivationEnd","stored","CanActivate","path","CanDeactivate","component","getAllRouteGuards","getChildRouteGuards","getCanActivateChild","p","canActivateChild","getTokenOrFunctionIdentity","tokenOrFunction","injector","NOT_FOUND","result","isInjectable","futurePath","checks","prevChildren","getRouteGuards","k","deactivateRouteAndItsChildren","shouldRun","shouldRunGuardsAndResolvers","mode","runInInjectionContext","equalPath","shallowEqual","equalParamsAndUrlSegments","r","childName","node","isFunction","isBoolean","isCanLoad","guard","isCanActivate","isCanActivateChild","isCanDeactivate","isCanMatch","isEmptyError","e","EmptyError","INITIAL_VALUE","prioritizedGuardValue","switchMap","obs","combineLatest","o","take","startWith","map","results","isRedirect","filter","item","val","isUrlTree","RedirectCommand","abortSignalToObservable","signal","of","Observable","subscriber","handler","takeUntilAbort","takeUntil","checkGuards","mergeMap","t","targetSnapshot","currentSnapshot","canActivateChecks","canDeactivateChecks","__spreadProps","__spreadValues","runCanDeactivateChecks","canDeactivate","runCanActivateChecks","guardsResult","futureRSS","currRSS","from","check","runCanDeactivate","first","futureSnapshot","concatMap","concat","fireChildActivationStart","fireActivationStart","runCanActivateChild","runCanActivate","snapshot","ActivationStart","ChildActivationStart","futureARS","canActivate","canActivateObservables","defer","closestInjector","guardVal","wrapIntoObservable","canActivateChildGuardsMapped","_","d","guardsMapped","currARS","canDeactivateObservables","runCanLoadGuards","segments","urlSerializer","abortSignal","canLoad","canLoadObservables","injectionToken","obs$","redirectIfUrlTree","pipe","tap","redirectingNavigationError","runCanMatchGuards","canMatch","canMatchObservables","NoMatch","_NoMatch","segmentGroup","AbsoluteRedirect","_AbsoluteRedirect","urlTree","namedOutletsRedirect","redirectTo","RuntimeError","canLoadFails","navigationCancelingError","NavigationCancellationCode","ApplyRedirects","res","PRIMARY_OUTLET","posParams","redirect","getRedirectResult","UrlTree","newTree","newRoot","redirectToParams","actualParams","sourceName","group","updatedSegments","name","child","UrlSegmentGroup","redirectToSegments","actualSegments","s","redirectToUrlSegment","pos","idx","redirectToFn","firstValueFrom","getOrCreateRouteInjectorIfNeeded","currentInjector","createEnvironmentInjector","getOutlet","route","PRIMARY_OUTLET","sortByMatchingOutlets","routes","outletName","sortedConfig","r","noMatch","createPreMatchRouteSnapshot","snapshot","matchWithChecks","segmentGroup","segments","injector","urlSerializer","createSnapshot","abortSignal","result","match","of","currentSnapshot","getOrCreateRouteInjectorIfNeeded","runCanMatchGuards","map","v","__spreadValues","res","defaultUrlMatcher","posParams","k","parameters","split","consumedSegments","slicedSegments","config","containsEmptyPathMatchesWithNamedOutlets","UrlSegmentGroup","createChildrenForEmptyPaths","containsEmptyPathMatches","addEmptyPathsToChildrenIfNeeded","children","emptyPathMatch","primarySegment","s","noLeftoversInUrl","outlet","NoLeftoversInUrl","recognize$1","configLoader","rootComponentType","urlTree","paramsInheritanceStrategy","Recognizer","MAX_ALLOWED_REDIRECTS","ApplyRedirects","e","RuntimeError","rootSegmentGroup","rootSnapshot","rootNode","TreeNode","routeState","RouterStateSnapshot","tree","createUrlTreeFromSnapshot","ActivatedRouteSnapshot","AbsoluteRedirect","NoMatch","parentRoute","child","childOutlets","childOutlet","outletChildren","mergedChildren","mergeEmptyPathMatches","sortActivatedRouteSnapshots","allowRedirects","isEmptyError","rawSegment","matched","positionalParamSegments","remainingSegments","newTree","newSegments","getData","getResolve","inherited","getInherited","firstValueFrom","childConfig","childInjector","matchedOnOutlet","ngModuleFactory","runCanLoadGuards","cfg","canLoadFails","nodes","a","b","hasEmptyPathConfig","node","mergedNodes","duplicateEmptyPathNode","resultNode","mergedNode","getData","route","getResolve","recognize","injector","configLoader","rootComponentType","config","serializer","paramsInheritanceStrategy","abortSignal","mergeMap","t","targetSnapshot","urlAfterRedirects","recognize$1","__spreadProps","__spreadValues","resolveData","canActivateChecks","of","routesWithResolversToRun","check","routesNeedingDataUpdates","newRoute","flattenRouteTree","routesProcessed","from","concatMap","runResolve","getInherited","tap","takeLast","_","EMPTY","descendants","child","futureARS","futureRSS","resolve","hasStaticTitle","RouteTitleKey","defer","resolveNode","map","resolvedData","keys","getDataKeys","data","key","getResolver","first","value","RedirectCommand","redirectingNavigationError","DefaultUrlSerializer","catchError","e","isEmptyError","throwError","injectionToken","closestInjector","resolver","getTokenOrFunctionIdentity","resolverValue","runInInjectionContext","wrapIntoObservable","switchTap","next","switchMap","v","nextResult","TitleStrategy","snapshot","pageTitle","PRIMARY_OUTLET","__ngFactoryType__","ɵɵdefineInjectable","inject","DefaultTitleStrategy","title","ɵɵinject","Title","ROUTER_CONFIGURATION","InjectionToken","ROUTES","RouterConfigLoader","Compiler","loader","loaded","wrapIntoPromise","component","maybeResolveResources","maybeUnwrapDefaultExport","parentInjector","result","loadChildren","compiler","onLoadEndListener","factoryOrRoutes","NgModuleFactory$1","rawRoutes","requireStandaloneComponents","factory","standardizeConfig","isWrappedDefaultExport","input","UrlHandlingStrategy","DefaultUrlHandlingStrategy","url","newUrlPart","wholeUrl","CREATE_VIEW_TRANSITION","VIEW_TRANSITION_OPTIONS","createViewTransition","to","transitionOptions","document","DOCUMENT","resolveViewTransitionStarted","viewTransitionStarted","transition","createRenderPromise","error","onViewTransitionCreated","afterNextRender","noop","NAVIGATION_ERROR_HANDLER","NavigationTransitions","signal","Subject","EnvironmentInjector","DestroyRef","UrlSerializer","ChildrenOutletContexts","Location","INPUT_BINDER","onLoadStart","r","RouteConfigLoadStart","onLoadEnd","RouteConfigLoadEnd","request","id","untracked","router","BehaviorSubject","filter","overallTransitionState","completedOrAborted","abortController","shouldContinueNavigation","NavigationCancellationCode","lastSuccessfulNavigation","urlTransition","onSameUrlNavigation","NavigationSkipped","NavigationSkippedCode","NavigationStart","nav","BeforeRoutesRecognized","routesRecognized","RoutesRecognized","extractedUrl","source","restoredState","extras","navStart","createEmptyState","guardsStart","GuardsCheckStart","getAllRouteGuards","checkGuards","evt","guardsEnd","GuardsCheckEnd","resolveStart","ResolveStart","dataResolved","resolveEnd","ResolveEnd","loadComponents","loaders","loadedComponent","currentSnapshot","take","targetRouterState","createRouterState","BeforeActivateRoutes","deferred","ActivateRoutes","NavigationEnd","takeUntil","abortSignalToObservable","err","finalize","isNavigationCancelingError","NavigationCancel","isRedirectingNavigationCancelingError","RedirectRequest","navigationError","NavigationError","navigationErrorHandlerResult","message","cancellationCode","ee","reason","code","navCancel","currentBrowserUrl","currentNavigation","targetBrowserUrl","isBrowserTriggeredNavigation","IMPERATIVE_NAVIGATION","ROUTE_INJECTOR_CLEANUP","RouteReuseStrategy","__ngFactoryType__","ɵɵdefineInjectable","inject","DefaultRouteReuseStrategy","BaseRouteReuseStrategy","route","detachedTree","future","curr","ɵDefaultRouteReuseStrategy_BaseFactory","ɵɵgetInheritedFactory","StateManager","UrlSerializer","ROUTER_CONFIGURATION","Location","UrlHandlingStrategy","UrlTree","finalUrl","initialUrl","targetBrowserUrl","rawUrl","url","targetRouterState","createEmptyState","EnvironmentInjector","HistoryStateManager","listener","event","currentTransition","NavigationStart","NavigationSkipped","RoutesRecognized","BeforeActivateRoutes","NavigationCancel","isRedirectingEvent","NavigationError","NavigationEnd","path","extras","id","replaceUrl","state","currentBrowserPageId","newState","__spreadValues","navigation","restoringFromCaughtError","targetPagePosition","navigationId","routerPageId","ɵHistoryStateManager_BaseFactory","afterNextNavigation","router","action","filter","map","NavigationCancellationCode","result","take","Router","Console","PendingTasksInternal","NavigationTransitions","Subject","ROUTE_INJECTOR_CLEANUP","ROUTES","INPUT_BINDER","Subscription","subscription","e","currentNavigation","untracked","RedirectRequest","opts","mergedTree","isBrowserTriggeredNavigation","IMPERATIVE_NAVIGATION","isPublicRouterEvent","rootComponentType","source","restoredState","stateCopy","urlTree","INTERNAL_APPLICATION_ERROR_HANDLER","config","standardizeConfig","commands","navigationExtras","relativeTo","queryParams","fragment","queryParamsHandling","preserveFragment","f","q","relativeToUrlSegmentGroup","relativeToSnapshot","createSegmentGroupFromRoute","createUrlTreeFromSegmentGroup","isUrlTree","validateCommands","formatRuntimeError","matchOptions","options","exactMatchOptions","subsetMatchOptions","containsTree","params","key","value","priorPromise","resolve","reject","promise","res","rej","taskId","i","RuntimeError","ReactiveRouterState","inject","Router","StateManager","signal","UrlSerializer","NavigationEnd","fragment","root","queryParams","UrlTree","__ngFactoryType__","ɵɵdefineInjectable","RouterLink","HostAttributeToken","linkedSignal","untracked","value","Subject","INTERNAL_APPLICATION_ERROR_HANDLER","ROUTER_CONFIGURATION","router","route","tabIndexAttribute","renderer","el","locationStrategy","tagName","newTabIndex","changes","commandsOrUrlTree","isUrlTree","button","ctrlKey","shiftKey","altKey","metaKey","urlTree","extras","e","attrName","attrValue","nativeElement","computed","shouldTrackParams","handling","routerLinkInput","a","b","ɵɵdirectiveInject","ActivatedRoute","ɵɵinjectAttribute","Renderer2","ElementRef","LocationStrategy","ɵɵdefineDirective","rf","ctx","ɵɵlistener","$event","ɵɵattribute","ɵɵsanitizeUrlOrResourceUrl","booleanAttribute","ɵɵNgOnChangesFeature","RouterLinkActive","EventEmitter","element","cdr","of","mergeAll","_","allLinkChanges","link","from","data","classes","c","hasActiveLinks","options","isActiveMatchOptions","__spreadValues","exactMatchOptions","subsetMatchOptions","isActive","isActiveCheckFn","ChangeDetectorRef","dirIndex","ɵɵcontentQuery","_t","ɵɵqueryRefresh","ɵɵloadQuery","o","PreloadingStrategy","RouterPreloader","router","injector","preloadingStrategy","loader","filter","NavigationEnd","concatMap","routes","res","route","createEnvironmentInjector","injectorForCurrentRoute","injectorForChildren","from","mergeAll","of","loadedChildren$","recursiveLoadChildren$","mergeMap","config","loadComponent$","__ngFactoryType__","ɵɵinject","Router","EnvironmentInjector","PreloadingStrategy","RouterConfigLoader","ɵɵdefineInjectable","ROUTER_SCROLLER","InjectionToken","RouterScroller","IMPERATIVE_NAVIGATION","inject","UrlSerializer","NgZone","ViewportScroller","NavigationTransitions","options","NavigationStart","NavigationSkipped","NavigationSkippedCode","Scroll","instantScroll","routerEvent","anchor","scroll","untracked","resolve","ɵɵinvalidFactory","provideRouter","routes","features","makeEnvironmentProviders","ROUTES","ActivatedRoute","rootRoute","APP_BOOTSTRAP_LISTENER","getBootstrapListener","feature","inject","Router","routerFeature","kind","providers","getBootstrapListener","injector","inject","Injector","bootstrappedComponentRef","ref","ApplicationRef","router","Router","bootstrapDone","BOOTSTRAP_DONE","INITIAL_NAVIGATION","ROUTER_PRELOADER","ROUTER_SCROLLER","InjectionToken","Subject","withEnabledBlockingInitialNavigation","providers","IS_ENABLED_BLOCKING_INITIAL_NAVIGATION","provideAppInitializer","LOCATION_INITIALIZED","resolve","afterNextNavigation","NavigationTransitions","of","routerFeature","withDisabledInitialNavigation","ROUTER_PRELOADER","InjectionToken","withPreloading","preloadingStrategy","routerFeature","RouterPreloader","PreloadingStrategy","withComponentInputBinding","routerFeature","RoutedComponentInputBinder","INPUT_BINDER","withViewTransitions","options","performanceMarkFeature","providers","CREATE_VIEW_TRANSITION","createViewTransition","VIEW_TRANSITION_OPTIONS","__spreadValues","ROUTER_PROVIDERS","Location","UrlSerializer","DefaultUrlSerializer","Router","ChildrenOutletContexts","ActivatedRoute","rootRoute","RouterConfigLoader","RouterModule","routes","config","ROUTES","NAVIGATION_ERROR_HANDLER","ROUTER_CONFIGURATION","provideHashLocationStrategy","providePathLocationStrategy","provideRouterScroller","withPreloading","provideInitialNavigation","withComponentInputBinding","withViewTransitions","provideRouterInitializer","__ngFactoryType__","ɵɵdefineNgModule","ɵɵdefineInjector","ROUTER_SCROLLER","viewportScroller","inject","ViewportScroller","RouterScroller","LocationStrategy","HashLocationStrategy","PathLocationStrategy","provideInitialNavigation","config","withDisabledInitialNavigation","withEnabledBlockingInitialNavigation","ROUTER_INITIALIZER","InjectionToken","provideRouterInitializer","getBootstrapListener","APP_BOOTSTRAP_LISTENER"],"x_google_ignoreList":[0,1,2,3,4]} \ No newline at end of file diff --git a/frontend/dist-instrumented/chunk-GNETQW7L.js b/frontend/dist-instrumented/chunk-GNETQW7L.js new file mode 100644 index 00000000..e19b9ff0 --- /dev/null +++ b/frontend/dist-instrumented/chunk-GNETQW7L.js @@ -0,0 +1,4 @@ +function cov_2iox8yvikd(){var path="/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-GNETQW7L.js";var hash="1d5efa1cf76c781ea6d07288a02d0b48ca83364d";var global=new Function("return this")();var gcv="__coverage__";var coverageData={path:"/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-GNETQW7L.js",statementMap:{"0":{start:{line:1,column:143},end:{line:2,column:53}},"1":{start:{line:1,column:163},end:{line:1,column:175}},"2":{start:{line:1,column:186},end:{line:1,column:193}},"3":{start:{line:1,column:199},end:{line:1,column:211}},"4":{start:{line:1,column:221},end:{line:1,column:226}},"5":{start:{line:1,column:235},end:{line:1,column:238}},"6":{start:{line:1,column:251},end:{line:1,column:584}},"7":{start:{line:1,column:264},end:{line:1,column:360}},"8":{start:{line:1,column:361},end:{line:1,column:582}},"9":{start:{line:1,column:597},end:{line:1,column:633}},"10":{start:{line:1,column:651},end:{line:1,column:680}},"11":{start:{line:1,column:663},end:{line:1,column:679}},"12":{start:{line:1,column:698},end:{line:2,column:40}},"13":{start:{line:1,column:955},end:{line:2,column:3}},"14":{start:{line:1,column:998},end:{line:1,column:1018}},"15":{start:{line:2,column:41},end:{line:2,column:49}}},fnMap:{"0":{name:"(anonymous_0)",decl:{start:{line:1,column:144},end:{line:1,column:145}},loc:{start:{line:1,column:148},end:{line:2,column:50}},line:1},"1":{name:"(anonymous_1)",decl:{start:{line:1,column:253},end:{line:1,column:254}},loc:{start:{line:1,column:257},end:{line:1,column:583}},line:1},"2":{name:"(anonymous_2)",decl:{start:{line:1,column:585},end:{line:1,column:586}},loc:{start:{line:1,column:596},end:{line:1,column:634}},line:1},"3":{name:"(anonymous_3)",decl:{start:{line:1,column:651},end:{line:1,column:652}},loc:{start:{line:1,column:662},end:{line:1,column:680}},line:1},"4":{name:"(anonymous_4)",decl:{start:{line:1,column:941},end:{line:1,column:942}},loc:{start:{line:1,column:954},end:{line:2,column:4}},line:1},"5":{name:"(anonymous_5)",decl:{start:{line:1,column:987},end:{line:1,column:988}},loc:{start:{line:1,column:997},end:{line:1,column:1019}},line:1}},branchMap:{"0":{loc:{start:{line:1,column:368},end:{line:1,column:582}},type:"cond-expr",locations:[{start:{line:1,column:392},end:{line:1,column:448}},{start:{line:1,column:449},end:{line:1,column:582}}],line:1},"1":{loc:{start:{line:1,column:449},end:{line:1,column:582}},type:"cond-expr",locations:[{start:{line:1,column:472},end:{line:1,column:525}},{start:{line:1,column:526},end:{line:1,column:582}}],line:1},"2":{loc:{start:{line:1,column:597},end:{line:1,column:633}},type:"binary-expr",locations:[{start:{line:1,column:597},end:{line:1,column:612}},{start:{line:1,column:614},end:{line:1,column:633}}],line:1},"3":{loc:{start:{line:1,column:674},end:{line:1,column:678}},type:"binary-expr",locations:[{start:{line:1,column:674},end:{line:1,column:675}},{start:{line:1,column:677},end:{line:1,column:678}}],line:1},"4":{loc:{start:{line:1,column:955},end:{line:1,column:1030}},type:"binary-expr",locations:[{start:{line:1,column:955},end:{line:1,column:958}},{start:{line:1,column:961},end:{line:1,column:1029}}],line:1},"5":{loc:{start:{line:1,column:1031},end:{line:2,column:3}},type:"binary-expr",locations:[{start:{line:1,column:1031},end:{line:1,column:1034}},{start:{line:1,column:1037},end:{line:2,column:2}}],line:1},"6":{loc:{start:{line:1,column:1098},end:{line:1,column:1122}},type:"binary-expr",locations:[{start:{line:1,column:1098},end:{line:1,column:1111}},{start:{line:1,column:1113},end:{line:1,column:1122}}],line:1}},s:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0},f:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0},b:{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0]},inputSourceMap:{version:3,sources:["src/app/shared/components/alarm-table/alarm-action-button.component.ts","src/app/shared/components/alarm-table/alarm-action-button.component.html"],sourcesContent:["import { ChangeDetectionStrategy, Component, computed, input, output } from '@angular/core';\n\nexport type AlarmActionButtonTone = 'neutral' | 'danger' | 'primary';\n\n@Component({\n selector: 'app-alarm-action-button',\n templateUrl: './alarm-action-button.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AlarmActionButtonComponent {\n public readonly label = input.required();\n public readonly ariaLabel = input(null);\n public readonly tone = input('neutral');\n public readonly disabled = input(false);\n\n public readonly pressed = output();\n\n public readonly buttonClass = computed(() => {\n const baseClass = 'care-btn care-btn--compact min-w-[96px] focus-visible:outline-2 focus-visible:outline-offset-2';\n\n if (this.tone() === 'primary') {\n return `${baseClass} care-btn--primary focus-visible:outline-amber-400`;\n }\n\n if (this.tone() === 'danger') {\n return `${baseClass} care-btn--danger focus-visible:outline-red-500`;\n }\n\n return `${baseClass} care-btn--neutral focus-visible:outline-slate-400`;\n });\n\n public onPressed(): void {\n if (this.disabled()) {\n return;\n }\n\n this.pressed.emit();\n }\n}\n",""],mappings:"yIASA,IAAaA,GAA0B,IAAA,CAAjC,MAAOA,CAA0B,CACnBC,MAAQC,EAAMC,SAAQ,EACtBC,UAAYF,EAAqB,IAAI,EACrCG,KAAOH,EAA6B,SAAS,EAC7CI,SAAWJ,EAAe,EAAK,EAE/BK,QAAUC,EAAM,EAEhBC,YAAcC,EAAS,IAAK,CACxC,IAAMC,EAAY,iGAElB,OAAI,KAAKN,KAAI,IAAO,UACT,GAAGM,CAAS,qDAGnB,KAAKN,KAAI,IAAO,SACT,GAAGM,CAAS,kDAGhB,GAAGA,CAAS,oDACvB,CAAC,EAEMC,WAAS,CACR,KAAKN,SAAQ,GAIjB,KAAKC,QAAQM,KAAI,CACrB,4CA5BSb,EAA0B,2BAA1BA,EAA0Bc,UAAA,CAAA,CAAA,yBAAA,CAAA,EAAAC,OAAA,CAAAd,MAAA,CAAA,EAAA,OAAA,EAAAG,UAAA,CAAA,EAAA,WAAA,EAAAC,KAAA,CAAA,EAAA,MAAA,EAAAC,SAAA,CAAA,EAAA,UAAA,CAAA,EAAAU,QAAA,CAAAT,QAAA,SAAA,EAAAU,MAAA,EAAAC,KAAA,EAAAC,OAAA,CAAA,CAAA,OAAA,SAAA,EAAA,QAAA,UAAA,CAAA,EAAAC,SAAA,SAAAC,EAAAC,EAAA,CAAAD,EAAA,ICTvCE,EAAA,EAAA,SAAA,CAAA,EAAsBC,EAAA,QAAA,UAAA,CAAA,OAASF,EAAAV,UAAA,CAAW,CAAA,EAEtCa,EAAA,CAAA,EACJC,EAAA,SAFIC,EAAAL,EAAAb,YAAA,CAAA,EADwCmB,EAAA,WAAAN,EAAAhB,SAAA,CAAA,2CAExCuB,EAAA,EAAAC,EAAA,IAAAR,EAAArB,MAAA,EAAA;CAAA,+CDOSD,CAA0B,GAAA",names:["AlarmActionButtonComponent","label","input","required","ariaLabel","tone","disabled","pressed","output","buttonClass","computed","baseClass","onPressed","emit","selectors","inputs","outputs","decls","vars","consts","template","rf","ctx","\u0275\u0275domElementStart","\u0275\u0275domListener","\u0275\u0275text","\u0275\u0275domElementEnd","\u0275\u0275classMap","\u0275\u0275domProperty","\u0275\u0275advance","\u0275\u0275textInterpolate1"]},_coverageSchema:"1a1c01bbd47fc00a2c39e90264f33305004495a9",hash:"1d5efa1cf76c781ea6d07288a02d0b48ca83364d"};var coverage=global[gcv]||(global[gcv]={});if(!coverage[path]||coverage[path].hash!==hash){coverage[path]=coverageData;}var actualCoverage=coverage[path];{// @ts-ignore +cov_2iox8yvikd=function(){return actualCoverage;};}return actualCoverage;}cov_2iox8yvikd();import{Ab as m,Cb as p,Ka as l,Pb as f,Sb as g,Tb as n,Wa as s,gb as r,hb as d,kb as u,ob as b,wa as o,zb as c}from"./chunk-RYTNMYZW.js";var h=(cov_2iox8yvikd().s[0]++,(()=>{cov_2iox8yvikd().f[0]++;class a{label=(cov_2iox8yvikd().s[1]++,n.required());ariaLabel=(cov_2iox8yvikd().s[2]++,n(null));tone=(cov_2iox8yvikd().s[3]++,n("neutral"));disabled=(cov_2iox8yvikd().s[4]++,n(!1));pressed=(cov_2iox8yvikd().s[5]++,g());buttonClass=(cov_2iox8yvikd().s[6]++,f(()=>{cov_2iox8yvikd().f[1]++;let t=(cov_2iox8yvikd().s[7]++,"care-btn care-btn--compact min-w-[96px] focus-visible:outline-2 focus-visible:outline-offset-2");cov_2iox8yvikd().s[8]++;return this.tone()==="primary"?(cov_2iox8yvikd().b[0][0]++,`${t} care-btn--primary focus-visible:outline-amber-400`):(cov_2iox8yvikd().b[0][1]++,this.tone()==="danger"?(cov_2iox8yvikd().b[1][0]++,`${t} care-btn--danger focus-visible:outline-red-500`):(cov_2iox8yvikd().b[1][1]++,`${t} care-btn--neutral focus-visible:outline-slate-400`));}));onPressed(){cov_2iox8yvikd().f[2]++;cov_2iox8yvikd().s[9]++;(cov_2iox8yvikd().b[2][0]++,this.disabled())||(cov_2iox8yvikd().b[2][1]++,this.pressed.emit());}static ɵfac=(cov_2iox8yvikd().s[10]++,function(i){cov_2iox8yvikd().f[3]++;cov_2iox8yvikd().s[11]++;return new((cov_2iox8yvikd().b[3][0]++,i)||(cov_2iox8yvikd().b[3][1]++,a))();});static ɵcmp=(cov_2iox8yvikd().s[12]++,l({type:a,selectors:[["app-alarm-action-button"]],inputs:{label:[1,"label"],ariaLabel:[1,"ariaLabel"],tone:[1,"tone"],disabled:[1,"disabled"]},outputs:{pressed:"pressed"},decls:2,vars:5,consts:[["type","button",3,"click","disabled"]],template:function(i,e){cov_2iox8yvikd().f[4]++;cov_2iox8yvikd().s[13]++;(cov_2iox8yvikd().b[4][0]++,i&1)&&(cov_2iox8yvikd().b[4][1]++,r(0,"button",0),b("click",function(){cov_2iox8yvikd().f[5]++;cov_2iox8yvikd().s[14]++;return e.onPressed();}),m(1),d()),(cov_2iox8yvikd().b[5][0]++,i&2)&&(cov_2iox8yvikd().b[5][1]++,c(e.buttonClass()),u("disabled",e.disabled()),s("aria-label",(cov_2iox8yvikd().b[6][0]++,e.ariaLabel())??(cov_2iox8yvikd().b[6][1]++,e.label())),o(),p(" ",e.label(),` +`));},encapsulation:2,changeDetection:0}));}cov_2iox8yvikd().s[15]++;return a;})());export{h as a};//# sourceMappingURL=chunk-GNETQW7L.js.map +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJoIiwiY292XzJpb3g4eXZpa2QiLCJzIiwiZiIsImEiLCJsYWJlbCIsIm4iLCJyZXF1aXJlZCIsImFyaWFMYWJlbCIsInRvbmUiLCJkaXNhYmxlZCIsInByZXNzZWQiLCJnIiwiYnV0dG9uQ2xhc3MiLCJ0IiwiYiIsIm9uUHJlc3NlZCIsImVtaXQiLCLJtWZhYyIsImkiLCLJtWNtcCIsImwiLCJ0eXBlIiwic2VsZWN0b3JzIiwiaW5wdXRzIiwib3V0cHV0cyIsImRlY2xzIiwidmFycyIsImNvbnN0cyIsInRlbXBsYXRlIiwiZSIsInIiLCJtIiwiZCIsImMiLCJ1IiwibyIsInAiLCJlbmNhcHN1bGF0aW9uIiwiY2hhbmdlRGV0ZWN0aW9uIl0sInNvdXJjZXMiOlsic3JjL2FwcC9zaGFyZWQvY29tcG9uZW50cy9hbGFybS10YWJsZS9hbGFybS1hY3Rpb24tYnV0dG9uLmNvbXBvbmVudC50cyIsInNyYy9hcHAvc2hhcmVkL2NvbXBvbmVudHMvYWxhcm0tdGFibGUvYWxhcm0tYWN0aW9uLWJ1dHRvbi5jb21wb25lbnQuaHRtbCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBjb21wdXRlZCwgaW5wdXQsIG91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5leHBvcnQgdHlwZSBBbGFybUFjdGlvbkJ1dHRvblRvbmUgPSAnbmV1dHJhbCcgfCAnZGFuZ2VyJyB8ICdwcmltYXJ5JztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdhcHAtYWxhcm0tYWN0aW9uLWJ1dHRvbicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2FsYXJtLWFjdGlvbi1idXR0b24uY29tcG9uZW50Lmh0bWwnLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBBbGFybUFjdGlvbkJ1dHRvbkNvbXBvbmVudCB7XG4gICAgcHVibGljIHJlYWRvbmx5IGxhYmVsID0gaW5wdXQucmVxdWlyZWQ8c3RyaW5nPigpO1xuICAgIHB1YmxpYyByZWFkb25seSBhcmlhTGFiZWwgPSBpbnB1dDxzdHJpbmcgfCBudWxsPihudWxsKTtcbiAgICBwdWJsaWMgcmVhZG9ubHkgdG9uZSA9IGlucHV0PEFsYXJtQWN0aW9uQnV0dG9uVG9uZT4oJ25ldXRyYWwnKTtcbiAgICBwdWJsaWMgcmVhZG9ubHkgZGlzYWJsZWQgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG5cbiAgICBwdWJsaWMgcmVhZG9ubHkgcHJlc3NlZCA9IG91dHB1dDx2b2lkPigpO1xuXG4gICAgcHVibGljIHJlYWRvbmx5IGJ1dHRvbkNsYXNzID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICBjb25zdCBiYXNlQ2xhc3MgPSAnY2FyZS1idG4gY2FyZS1idG4tLWNvbXBhY3QgbWluLXctWzk2cHhdIGZvY3VzLXZpc2libGU6b3V0bGluZS0yIGZvY3VzLXZpc2libGU6b3V0bGluZS1vZmZzZXQtMic7XG5cbiAgICAgICAgaWYgKHRoaXMudG9uZSgpID09PSAncHJpbWFyeScpIHtcbiAgICAgICAgICAgIHJldHVybiBgJHtiYXNlQ2xhc3N9IGNhcmUtYnRuLS1wcmltYXJ5IGZvY3VzLXZpc2libGU6b3V0bGluZS1hbWJlci00MDBgO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMudG9uZSgpID09PSAnZGFuZ2VyJykge1xuICAgICAgICAgICAgcmV0dXJuIGAke2Jhc2VDbGFzc30gY2FyZS1idG4tLWRhbmdlciBmb2N1cy12aXNpYmxlOm91dGxpbmUtcmVkLTUwMGA7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYCR7YmFzZUNsYXNzfSBjYXJlLWJ0bi0tbmV1dHJhbCBmb2N1cy12aXNpYmxlOm91dGxpbmUtc2xhdGUtNDAwYDtcbiAgICB9KTtcblxuICAgIHB1YmxpYyBvblByZXNzZWQoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkKCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucHJlc3NlZC5lbWl0KCk7XG4gICAgfVxufVxuIiwiPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cIm9uUHJlc3NlZCgpXCIgW2Rpc2FibGVkXT1cImRpc2FibGVkKClcIiBbYXR0ci5hcmlhLWxhYmVsXT1cImFyaWFMYWJlbCgpID8/IGxhYmVsKClcIlxuICAgIFtjbGFzc109XCJidXR0b25DbGFzcygpXCI+XG4gICAge3sgbGFiZWwoKSB9fVxuPC9idXR0b24+Il0sIm1hcHBpbmdzIjoiO29PQVNBLEdBQWEsQ0FBQUEsQ0FBQSxFQUFBQyxjQUFBLEdBQUFDLENBQUEsT0FBMEIsS0FBQUQsY0FBQSxHQUFBRSxDQUFBLE1BQWpDLEtBQU8sQ0FBQUMsQ0FBMEIsQ0FDbkJDLEtBQUEsRUFBQUosY0FBQSxHQUFBQyxDQUFBLE1BQVFJLENBQUEsQ0FBTUMsUUFBQSxDQUFRLEdBQ3RCQyxTQUFBLEVBQUFQLGNBQUEsR0FBQUMsQ0FBQSxNQUFZSSxDQUFBLENBQXFCLElBQUksR0FDckNHLElBQUEsRUFBQVIsY0FBQSxHQUFBQyxDQUFBLE1BQU9JLENBQUEsQ0FBNkIsU0FBUyxHQUM3Q0ksUUFBQSxFQUFBVCxjQUFBLEdBQUFDLENBQUEsTUFBV0ksQ0FBQSxDQUFlLEVBQUssR0FFL0JLLE9BQUEsRUFBQVYsY0FBQSxHQUFBQyxDQUFBLE1BQVVVLENBQUEsQ0FBTSxHQUVoQkMsV0FBQSxFQUFBWixjQUFBLEdBQUFDLENBQUEsTUFBY0MsQ0FBQSxDQUFTLElBQUssQ0FBQUYsY0FBQSxHQUFBRSxDQUFBLE1BQ3hDLEdBQU0sQ0FBQVcsQ0FBQSxFQUFBYixjQUFBLEdBQUFDLENBQUEsTUFBWSxrR0FFbEJELGNBQUEsR0FBQUMsQ0FBQSxZQUFJLE1BQUtPLElBQUEsQ0FBSSxJQUFPLFdBQUFSLGNBQUEsR0FBQWMsQ0FBQSxTQUNULEdBQUdELENBQVMsdURBQUFiLGNBQUEsR0FBQWMsQ0FBQSxTQUduQixLQUFLTixJQUFBLENBQUksSUFBTyxVQUFBUixjQUFBLEdBQUFjLENBQUEsU0FDVCxHQUFHRCxDQUFTLG9EQUFBYixjQUFBLEdBQUFjLENBQUEsU0FHaEIsR0FBR0QsQ0FBUyxvREFDdkIsSUFBQyxHQUVNRSxVQUFBLENBQVMsQ0FBQWYsY0FBQSxHQUFBRSxDQUFBLEtBQUFGLENBQUEsaUJBQUFDLENBQUEsTUFDUixDQUFBRCxjQUFBLEdBQUFjLENBQUEsY0FBS0wsUUFBQSxDQUFRLEtBQUFULGNBQUEsR0FBQWMsQ0FBQSxTQUlqQixLQUFLSixPQUFBLENBQVFNLElBQUEsQ0FBSSxDQUNyQixVQUFBQyxJQUFBLEVBQUFqQixjQUFBLEdBQUFDLENBQUEsZ0JBQUFpQixDQUFBLEVBQUFsQixjQUFBLEdBQUFFLENBQUEsS0FBQUYsQ0FBQSxpQkFBQUMsQ0FBQSxtQkFBQUQsY0FBQSxHQUFBYyxDQUFBLFNBQUFJLENBQUEsSUFBQWxCLGNBQUEsR0FBQWMsQ0FBQSxTQTVCU1gsQ0FBQSxJQUEwQixXQUFBZ0IsSUFBQSxFQUFBbkIsY0FBQSxHQUFBQyxDQUFBLE9BQUFtQixDQUFBLEVBQUFDLElBQUEsQ0FBMUJsQixDQUFBLENBQTBCbUIsU0FBQSwrQkFBQUMsTUFBQSxFQUFBbkIsS0FBQSxhQUFBRyxTQUFBLGlCQUFBQyxJQUFBLFlBQUFDLFFBQUEsaUJBQUFlLE9BQUEsRUFBQWQsT0FBQSxZQUFBZSxLQUFBLEdBQUFDLElBQUEsR0FBQUMsTUFBQSwwQ0FBQUMsUUFBQSxTQUFBQSxDQUFBVixDQUFBLENBQUFXLENBQUEsRUFBQTdCLGNBQUEsR0FBQUUsQ0FBQSxLQUFBRixDQUFBLGlCQUFBQyxDQUFBLFFBQUFELGNBQUEsR0FBQWMsQ0FBQSxTQUFBSSxDQUFBLE1BQUFsQixjQUFBLEdBQUFjLENBQUEsU0NUdkNnQixDQUFBLGVBQXNCaEIsQ0FBQSxvQkFBQWQsY0FBQSxHQUFBRSxDQUFBLEtBQUFGLENBQUEsaUJBQUFDLENBQUEsYUFBUyxDQUFBNEIsQ0FBQSxDQUFBZCxTQUFBLEVBQVcsSUFFdENnQixDQUFBLElBQ0pDLENBQUEsS0FBQWhDLGNBQUEsR0FBQWMsQ0FBQSxTQUFBSSxDQUFBLE1BQUFsQixjQUFBLEdBQUFjLENBQUEsU0FGSW1CLENBQUEsQ0FBQUosQ0FBQSxDQUFBakIsV0FBQSxJQUR3Q3NCLENBQUEsWUFBQUwsQ0FBQSxDQUFBcEIsUUFBQSxJQUFBUixDQUFBLGVBQUFELGNBQUEsR0FBQWMsQ0FBQSxTQUFBZSxDQUFBLENBQUF0QixTQUFBLE1BQUFQLGNBQUEsR0FBQWMsQ0FBQSxTQUFBZSxDQUFBLENBQUF6QixLQUFBLEtBRXhDK0IsQ0FBQSxHQUFBQyxDQUFBLEtBQUFQLENBQUEsQ0FBQXpCLEtBQUE7Q0FBQSxLQUFBaUMsYUFBQSxHQUFBQyxlQUFBLE9BQUF0QyxjQUFBLEdBQUFDLENBQUEsYURPUyxDQUFBRSxDQUEwQixjQUFBSixDQUFBLElBQUFJLENBQUEsRSIsImlnbm9yZUxpc3QiOltdfQ== \ No newline at end of file diff --git a/frontend/dist-instrumented/chunk-GNETQW7L.js.map b/frontend/dist-instrumented/chunk-GNETQW7L.js.map new file mode 100644 index 00000000..b848ab25 --- /dev/null +++ b/frontend/dist-instrumented/chunk-GNETQW7L.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["src/app/shared/components/alarm-table/alarm-action-button.component.ts", "src/app/shared/components/alarm-table/alarm-action-button.component.html"], + "sourcesContent": ["import { ChangeDetectionStrategy, Component, computed, input, output } from '@angular/core';\n\nexport type AlarmActionButtonTone = 'neutral' | 'danger' | 'primary';\n\n@Component({\n selector: 'app-alarm-action-button',\n templateUrl: './alarm-action-button.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AlarmActionButtonComponent {\n public readonly label = input.required();\n public readonly ariaLabel = input(null);\n public readonly tone = input('neutral');\n public readonly disabled = input(false);\n\n public readonly pressed = output();\n\n public readonly buttonClass = computed(() => {\n const baseClass = 'care-btn care-btn--compact min-w-[96px] focus-visible:outline-2 focus-visible:outline-offset-2';\n\n if (this.tone() === 'primary') {\n return `${baseClass} care-btn--primary focus-visible:outline-amber-400`;\n }\n\n if (this.tone() === 'danger') {\n return `${baseClass} care-btn--danger focus-visible:outline-red-500`;\n }\n\n return `${baseClass} care-btn--neutral focus-visible:outline-slate-400`;\n });\n\n public onPressed(): void {\n if (this.disabled()) {\n return;\n }\n\n this.pressed.emit();\n }\n}\n", ""], + "mappings": "yIASA,IAAaA,GAA0B,IAAA,CAAjC,MAAOA,CAA0B,CACnBC,MAAQC,EAAMC,SAAQ,EACtBC,UAAYF,EAAqB,IAAI,EACrCG,KAAOH,EAA6B,SAAS,EAC7CI,SAAWJ,EAAe,EAAK,EAE/BK,QAAUC,EAAM,EAEhBC,YAAcC,EAAS,IAAK,CACxC,IAAMC,EAAY,iGAElB,OAAI,KAAKN,KAAI,IAAO,UACT,GAAGM,CAAS,qDAGnB,KAAKN,KAAI,IAAO,SACT,GAAGM,CAAS,kDAGhB,GAAGA,CAAS,oDACvB,CAAC,EAEMC,WAAS,CACR,KAAKN,SAAQ,GAIjB,KAAKC,QAAQM,KAAI,CACrB,4CA5BSb,EAA0B,2BAA1BA,EAA0Bc,UAAA,CAAA,CAAA,yBAAA,CAAA,EAAAC,OAAA,CAAAd,MAAA,CAAA,EAAA,OAAA,EAAAG,UAAA,CAAA,EAAA,WAAA,EAAAC,KAAA,CAAA,EAAA,MAAA,EAAAC,SAAA,CAAA,EAAA,UAAA,CAAA,EAAAU,QAAA,CAAAT,QAAA,SAAA,EAAAU,MAAA,EAAAC,KAAA,EAAAC,OAAA,CAAA,CAAA,OAAA,SAAA,EAAA,QAAA,UAAA,CAAA,EAAAC,SAAA,SAAAC,EAAAC,EAAA,CAAAD,EAAA,ICTvCE,EAAA,EAAA,SAAA,CAAA,EAAsBC,EAAA,QAAA,UAAA,CAAA,OAASF,EAAAV,UAAA,CAAW,CAAA,EAEtCa,EAAA,CAAA,EACJC,EAAA,SAFIC,EAAAL,EAAAb,YAAA,CAAA,EADwCmB,EAAA,WAAAN,EAAAhB,SAAA,CAAA,2CAExCuB,EAAA,EAAAC,EAAA,IAAAR,EAAArB,MAAA,EAAA;CAAA,+CDOSD,CAA0B,GAAA", + "names": ["AlarmActionButtonComponent", "label", "input", "required", "ariaLabel", "tone", "disabled", "pressed", "output", "buttonClass", "computed", "baseClass", "onPressed", "emit", "selectors", "inputs", "outputs", "decls", "vars", "consts", "template", "rf", "ctx", "\u0275\u0275domElementStart", "\u0275\u0275domListener", "\u0275\u0275text", "\u0275\u0275domElementEnd", "\u0275\u0275classMap", "\u0275\u0275domProperty", "\u0275\u0275advance", "\u0275\u0275textInterpolate1"] +} diff --git a/frontend/dist-instrumented/chunk-HTKPMSJ5.js b/frontend/dist-instrumented/chunk-HTKPMSJ5.js new file mode 100644 index 00000000..8547b14c --- /dev/null +++ b/frontend/dist-instrumented/chunk-HTKPMSJ5.js @@ -0,0 +1,3 @@ +function cov_tf1x7lmso(){var path="/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-HTKPMSJ5.js";var hash="aeec6cdbbcdcd189d48739072086839b5c8f77e9";var global=new Function("return this")();var gcv="__coverage__";var coverageData={path:"/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-HTKPMSJ5.js",statementMap:{"0":{start:{line:1,column:6},end:{line:1,column:240}},"1":{start:{line:1,column:19},end:{line:1,column:231}},"2":{start:{line:1,column:247},end:{line:1,column:640}},"3":{start:{line:1,column:643},end:{line:1,column:689}},"4":{start:{line:1,column:692},end:{line:1,column:1042}},"5":{start:{line:1,column:1045},end:{line:1,column:1286}},"6":{start:{line:1,column:1289},end:{line:1,column:2051}},"7":{start:{line:1,column:2054},end:{line:1,column:2061}},"8":{start:{line:1,column:2082},end:{line:1,column:2151}},"9":{start:{line:1,column:2124},end:{line:1,column:2128}},"10":{start:{line:1,column:2140},end:{line:1,column:2150}},"11":{start:{line:1,column:2154},end:{line:1,column:2160}},"12":{start:{line:1,column:2161},end:{line:1,column:2175}},"13":{start:{line:1,column:2166},end:{line:1,column:2175}},"14":{start:{line:1,column:2181},end:{line:1,column:2232}},"15":{start:{line:1,column:2205},end:{line:1,column:2209}},"16":{start:{line:1,column:2221},end:{line:1,column:2231}},"17":{start:{line:1,column:2235},end:{line:1,column:2241}},"18":{start:{line:1,column:2242},end:{line:1,column:2256}},"19":{start:{line:1,column:2247},end:{line:1,column:2256}},"20":{start:{line:1,column:2262},end:{line:1,column:2268}},"21":{start:{line:1,column:2269},end:{line:1,column:2288}},"22":{start:{line:1,column:2303},end:{line:1,column:2329}},"23":{start:{line:1,column:2350},end:{line:1,column:2364}},"24":{start:{line:1,column:2365},end:{line:1,column:2392}},"25":{start:{line:1,column:2371},end:{line:1,column:2392}},"26":{start:{line:1,column:2398},end:{line:1,column:2402}},"27":{start:{line:1,column:2405},end:{line:1,column:2409}},"28":{start:{line:1,column:2410},end:{line:1,column:2437}},"29":{start:{line:1,column:2454},end:{line:1,column:2517}},"30":{start:{line:1,column:2469},end:{line:1,column:2517}},"31":{start:{line:1,column:2482},end:{line:1,column:2495}},"32":{start:{line:1,column:2497},end:{line:1,column:2517}},"33":{start:{line:1,column:2517},end:{line:1,column:2528}},"34":{start:{line:1,column:2545},end:{line:1,column:2576}},"35":{start:{line:1,column:2562},end:{line:1,column:2575}},"36":{start:{line:1,column:2591},end:{line:1,column:2625}},"37":{start:{line:1,column:2642},end:{line:1,column:2676}},"38":{start:{line:1,column:2667},end:{line:1,column:2676}},"39":{start:{line:1,column:2682},end:{line:1,column:2714}},"40":{start:{line:1,column:2715},end:{line:1,column:2752}},"41":{start:{line:1,column:2725},end:{line:1,column:2752}},"42":{start:{line:1,column:2758},end:{line:1,column:2794}},"43":{start:{line:1,column:2795},end:{line:1,column:2915}},"44":{start:{line:1,column:2930},end:{line:1,column:3040}}},fnMap:{"0":{name:"(anonymous_0)",decl:{start:{line:1,column:7},end:{line:1,column:8}},loc:{start:{line:1,column:18},end:{line:1,column:232}},line:1},"1":{name:"L",decl:{start:{line:1,column:2071},end:{line:1,column:2072}},loc:{start:{line:1,column:2075},end:{line:1,column:2289}},line:1},"2":{name:"(anonymous_2)",decl:{start:{line:1,column:2121},end:{line:1,column:2122}},loc:{start:{line:1,column:2124},end:{line:1,column:2128}},line:1},"3":{name:"(anonymous_3)",decl:{start:{line:1,column:2137},end:{line:1,column:2138}},loc:{start:{line:1,column:2140},end:{line:1,column:2150}},line:1},"4":{name:"(anonymous_4)",decl:{start:{line:1,column:2202},end:{line:1,column:2203}},loc:{start:{line:1,column:2205},end:{line:1,column:2209}},line:1},"5":{name:"(anonymous_5)",decl:{start:{line:1,column:2218},end:{line:1,column:2219}},loc:{start:{line:1,column:2221},end:{line:1,column:2231}},line:1},"6":{name:"M",decl:{start:{line:1,column:2298},end:{line:1,column:2299}},loc:{start:{line:1,column:2302},end:{line:1,column:2330}},line:1},"7":{name:"p",decl:{start:{line:1,column:2339},end:{line:1,column:2340}},loc:{start:{line:1,column:2343},end:{line:1,column:2438}},line:1},"8":{name:"T",decl:{start:{line:1,column:2447},end:{line:1,column:2448}},loc:{start:{line:1,column:2453},end:{line:1,column:2529}},line:1},"9":{name:"(anonymous_9)",decl:{start:{line:1,column:2479},end:{line:1,column:2480}},loc:{start:{line:1,column:2482},end:{line:1,column:2495}},line:1},"10":{name:"R",decl:{start:{line:1,column:2538},end:{line:1,column:2539}},loc:{start:{line:1,column:2544},end:{line:1,column:2577}},line:1},"11":{name:"(anonymous_11)",decl:{start:{line:1,column:2559},end:{line:1,column:2560}},loc:{start:{line:1,column:2562},end:{line:1,column:2575}},line:1},"12":{name:"_",decl:{start:{line:1,column:2586},end:{line:1,column:2587}},loc:{start:{line:1,column:2590},end:{line:1,column:2626}},line:1},"13":{name:"m",decl:{start:{line:1,column:2635},end:{line:1,column:2636}},loc:{start:{line:1,column:2641},end:{line:1,column:2916}},line:1},"14":{name:"N",decl:{start:{line:1,column:2925},end:{line:1,column:2926}},loc:{start:{line:1,column:2929},end:{line:1,column:3041}},line:1}},branchMap:{"0":{loc:{start:{line:1,column:234},end:{line:1,column:239}},type:"binary-expr",locations:[{start:{line:1,column:234},end:{line:1,column:235}},{start:{line:1,column:237},end:{line:1,column:239}}],line:1},"1":{loc:{start:{line:1,column:2161},end:{line:1,column:2175}},type:"if",locations:[{start:{line:1,column:2161},end:{line:1,column:2175}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"2":{loc:{start:{line:1,column:2182},end:{line:1,column:2196}},type:"binary-expr",locations:[{start:{line:1,column:2182},end:{line:1,column:2192}},{start:{line:1,column:2194},end:{line:1,column:2196}}],line:1},"3":{loc:{start:{line:1,column:2242},end:{line:1,column:2256}},type:"if",locations:[{start:{line:1,column:2242},end:{line:1,column:2256}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"4":{loc:{start:{line:1,column:2276},end:{line:1,column:2288}},type:"binary-expr",locations:[{start:{line:1,column:2276},end:{line:1,column:2277}},{start:{line:1,column:2279},end:{line:1,column:2288}}],line:1},"5":{loc:{start:{line:1,column:2310},end:{line:1,column:2329}},type:"binary-expr",locations:[{start:{line:1,column:2310},end:{line:1,column:2314}},{start:{line:1,column:2316},end:{line:1,column:2329}}],line:1},"6":{loc:{start:{line:1,column:2351},end:{line:1,column:2356}},type:"binary-expr",locations:[{start:{line:1,column:2351},end:{line:1,column:2352}},{start:{line:1,column:2354},end:{line:1,column:2356}}],line:1},"7":{loc:{start:{line:1,column:2365},end:{line:1,column:2392}},type:"if",locations:[{start:{line:1,column:2365},end:{line:1,column:2392}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"8":{loc:{start:{line:1,column:2417},end:{line:1,column:2437}},type:"binary-expr",locations:[{start:{line:1,column:2417},end:{line:1,column:2418}},{start:{line:1,column:2421},end:{line:1,column:2436}}],line:1},"9":{loc:{start:{line:1,column:2469},end:{line:1,column:2517}},type:"if",locations:[{start:{line:1,column:2469},end:{line:1,column:2517}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"10":{loc:{start:{line:1,column:2598},end:{line:1,column:2603}},type:"binary-expr",locations:[{start:{line:1,column:2598},end:{line:1,column:2599}},{start:{line:1,column:2601},end:{line:1,column:2603}}],line:1},"11":{loc:{start:{line:1,column:2642},end:{line:1,column:2676}},type:"if",locations:[{start:{line:1,column:2642},end:{line:1,column:2676}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"12":{loc:{start:{line:1,column:2715},end:{line:1,column:2752}},type:"if",locations:[{start:{line:1,column:2715},end:{line:1,column:2752}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"13":{loc:{start:{line:1,column:2802},end:{line:1,column:2915}},type:"cond-expr",locations:[{start:{line:1,column:2809},end:{line:1,column:2827}},{start:{line:1,column:2828},end:{line:1,column:2915}}],line:1},"14":{loc:{start:{line:1,column:2828},end:{line:1,column:2915}},type:"cond-expr",locations:[{start:{line:1,column:2862},end:{line:1,column:2871}},{start:{line:1,column:2872},end:{line:1,column:2915}}],line:1},"15":{loc:{start:{line:1,column:2872},end:{line:1,column:2915}},type:"cond-expr",locations:[{start:{line:1,column:2906},end:{line:1,column:2913}},{start:{line:1,column:2914},end:{line:1,column:2915}}],line:1}},s:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0},f:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0},b:{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0],"9":[0,0],"10":[0,0],"11":[0,0],"12":[0,0],"13":[0,0],"14":[0,0],"15":[0,0]},inputSourceMap:{version:3,sources:["src/app/features/device-interaction/models/device-type.enum.ts","src/app/shared/models/device-taxonomy.ts"],sourcesContent:["export enum DeviceType {\n UNKNOWN = 'UNKNOWN',\n THERMOSTAT = 'THERMOSTAT',\n FALL_SENSOR = 'FALL_SENSOR',\n PRESENCE_SENSOR = 'PRESENCE_SENSOR',\n LIGHT = 'LIGHT',\n ALARM_BUTTON = 'ALARM_BUTTON',\n ENTRANCE_DOOR = 'ENTRANCE_DOOR',\n BLIND = 'BLIND',\n}\n","import { DeviceType } from '../../features/device-interaction/models/device-type.enum';\n\ninterface DeviceTypeRule {\n\treadonly deviceType: DeviceType;\n\treadonly tokens: ReadonlyArray;\n}\n\nexport interface DeviceTypeResolutionInput {\n\treadonly rawType?: string;\n\treadonly rawSubType?: string;\n\treadonly rawName?: string;\n\treadonly sfeTypes?: ReadonlyArray;\n}\n\nconst PRIMARY_DEVICE_TYPE_RULES: ReadonlyArray = [\n\t{ deviceType: DeviceType.THERMOSTAT, tokens: ['THERMOSTAT', 'HVAC', 'CLIMATE'] },\n\t{ deviceType: DeviceType.FALL_SENSOR, tokens: ['FALL', 'MANDOWN'] },\n\t{ deviceType: DeviceType.PRESENCE_SENSOR, tokens: ['PRESENCE', 'MOTION'] },\n\t{ deviceType: DeviceType.ALARM_BUTTON, tokens: ['ALARM_BUTTON', 'PANIC_BUTTON', 'SOS_BUTTON', 'SCENARIO', 'SCENE'] },\n\t{ deviceType: DeviceType.ENTRANCE_DOOR, tokens: ['DOOR', 'LOCK', 'GATE', 'PORTA'] },\n\t{ deviceType: DeviceType.BLIND, tokens: ['BLIND', 'SHUTTER'] },\n];\n\nconst LIGHT_DEVICE_TYPE_RULES: ReadonlyArray = [\n\t{ deviceType: DeviceType.LIGHT, tokens: ['LIGHT', 'LAMP'] },\n];\n\nconst SFE_DEVICE_TYPE_RULES: ReadonlyArray = [\n\t{\n\t\tdeviceType: DeviceType.THERMOSTAT,\n\t\ttokens: [\n\t\t\t'SFE_CMD_CHANGEOVERMODE',\n\t\t\t'SFE_CMD_HVACMODE',\n\t\t\t'SFE_CMD_OFFBEHAVIOUR',\n\t\t\t'SFE_CMD_ONBEHAVIOUR',\n\t\t\t'SFE_STATE_HVACMODE',\n\t\t\t'SFE_STATE_TEMPERATURE',\n\t\t],\n\t},\n\t{ deviceType: DeviceType.BLIND, tokens: ['SFE_CMD_BLIND'] },\n\t{ deviceType: DeviceType.PRESENCE_SENSOR, tokens: ['SFE_STATE_PRESENCE'] },\n\t{ deviceType: DeviceType.FALL_SENSOR, tokens: ['SFE_STATE_MANDOWN', 'SFE_STATE_FALL'] },\n];\n\nconst DEVICE_TYPE_LABELS: Readonly> = {\n\t[DeviceType.UNKNOWN]: 'Sconosciuto',\n\t[DeviceType.THERMOSTAT]: 'Termostato',\n\t[DeviceType.FALL_SENSOR]: 'Sensore caduta',\n\t[DeviceType.PRESENCE_SENSOR]: 'Sensore presenza',\n\t[DeviceType.LIGHT]: 'Luce',\n\t[DeviceType.ALARM_BUTTON]: 'Pulsante allarme',\n\t[DeviceType.ENTRANCE_DOOR]: 'Controllo accesso',\n\t[DeviceType.BLIND]: 'Tapparella',\n};\n\nconst ENDPOINT_LABELS: Readonly> = {\n\tSFE_CMD_ONOFF: 'Comando accensione/spegnimento',\n\tSFE_CMD_BLIND: 'Comando movimento tapparella',\n\tSFE_CMD_CHANGEOVERMODE: 'Comando cambio modalita HVAC',\n\tSFE_CMD_HVACMODE: 'Comando modalita HVAC',\n\tSFE_CMD_OFFBEHAVIOUR: 'Comando comportamento in assenza',\n\tSFE_CMD_ONBEHAVIOUR: 'Comando comportamento in presenza',\n\tSFE_CMD_TIMEDDYNAMICMODE: 'Comando modalita dinamica temporizzata',\n\tSFE_CMD_DOWNKEY_ACTIVESCENE: 'Comando attivazione scenario',\n\tSFE_STATE_ONOFF: 'Stato acceso/spento',\n\tSFE_STATE_TEMPERATURE: 'Temperatura',\n\tSFE_STATE_PRESENCE: 'Presenza rilevata',\n\tSFE_STATE_MANDOWN: 'Stato uomo a terra',\n\tSFE_STATE_FALL: 'Stato caduta rilevata',\n\tSFE_STATE_HVACMODE: 'Stato modalita HVAC',\n\tSFE_SENSOR: 'Sensore generico',\n\tSFE_STATUS: 'Stato generico dispositivo',\n\tSFE_UNKNOWN: 'Endpoint sconosciuto',\n};\n\nconst discoveredUnmappedSfeCodes = new Set();\n\nexport function resolveDeviceType(input: DeviceTypeResolutionInput): DeviceType {\n\tconst normalizedRawValues = [input.rawType, input.rawSubType, input.rawName]\n\t\t.map((value) => normalize(value))\n\t\t.filter((value) => value.length > 0);\n\n\tconst primaryMatch = resolveFromRules(normalizedRawValues, PRIMARY_DEVICE_TYPE_RULES);\n\tif (primaryMatch) {\n\t\treturn primaryMatch;\n\t}\n\n\tconst normalizedSfeTypes = (input.sfeTypes ?? [])\n\t\t.map((value) => normalize(value))\n\t\t.filter((value) => value.length > 0);\n\n\tconst sfeMatch = resolveFromRules(normalizedSfeTypes, SFE_DEVICE_TYPE_RULES);\n\tif (sfeMatch) {\n\t\treturn sfeMatch;\n\t}\n\n\tconst lightMatch = resolveFromRules(normalizedRawValues, LIGHT_DEVICE_TYPE_RULES);\n\tif (lightMatch) {\n\t\treturn lightMatch;\n\t}\n\n\treturn DeviceType.UNKNOWN;\n}\n\nexport function getDeviceTypeLabel(type: DeviceType): string {\n\treturn DEVICE_TYPE_LABELS[type] ?? 'Dispositivo';\n}\n\nexport function getEndpointLabel(sfeType: string | null | undefined): string {\n\tconst rawValue = (sfeType ?? '').trim();\n\tif (!rawValue) {\n\t\treturn ENDPOINT_LABELS['SFE_UNKNOWN'];\n\t}\n\n\tconst normalizedSfeType = normalize(rawValue);\n\tconst knownLabel = ENDPOINT_LABELS[normalizedSfeType];\n\tif (knownLabel) {\n\t\treturn knownLabel;\n\t}\n\n\tdiscoveredUnmappedSfeCodes.add(rawValue);\n\treturn humanizeUnknownSfeCode(rawValue, normalizedSfeType);\n}\n\nexport function getDiscoveredUnmappedSfeCodes(): string[] {\n\treturn Array.from(discoveredUnmappedSfeCodes.values()).sort((left, right) => left.localeCompare(right));\n}\n\nfunction resolveFromRules(\n\tnormalizedValues: ReadonlyArray,\n\trules: ReadonlyArray,\n): DeviceType | null {\n\tfor (const rule of rules) {\n\t\tif (normalizedValues.some((value) => includesAny(value, rule.tokens))) {\n\t\t\treturn rule.deviceType;\n\t\t}\n\t}\n\n\treturn null;\n}\n\nfunction includesAny(value: string, tokens: ReadonlyArray): boolean {\n\treturn tokens.some((token) => value.includes(token));\n}\n\nfunction normalize(value: string | null | undefined): string {\n\treturn (value ?? '').trim().toUpperCase();\n}\n\nfunction humanizeUnknownSfeCode(rawValue: string, normalizedValue: string): string {\n\tif (!normalizedValue.startsWith('SFE_')) {\n\t\treturn rawValue;\n\t}\n\n\tconst cmdPattern = /^SFE_(?:Cmd|CMD)_(.+)$/;\n\tconst cmdMatch = cmdPattern.exec(rawValue);\n\tif (cmdMatch?.[1]) {\n\t\treturn `Comando ${humanizeSfeSuffix(cmdMatch[1])}`;\n\t}\n\n\tconst statePattern = /^SFE_(?:State|STATE)_(.+)$/;\n\tconst stateMatch = statePattern.exec(rawValue);\n\tif (stateMatch?.[1]) {\n\t\treturn `Stato ${humanizeSfeSuffix(stateMatch[1])}`;\n\t}\n\n\tif (/^SFE_(?:Sensor|SENSOR)$/.test(rawValue)) {\n\t\treturn 'Sensore';\n\t}\n\n\tif (/^SFE_(?:Status|STATUS)$/.test(rawValue)) {\n\t\treturn 'Stato';\n\t}\n\n\treturn rawValue;\n}\n\nfunction humanizeSfeSuffix(value: string): string {\n\treturn value\n\t\t.replaceAll('_', ' ')\n\t\t.replaceAll(/([a-z])([A-Z])/g, '$1 $2')\n\t\t.replaceAll(/\\s+/g, ' ')\n\t\t.trim()\n\t\t.toLowerCase();\n}"],mappings:"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",names:["DeviceType","PRIMARY_DEVICE_TYPE_RULES","deviceType","DeviceType","THERMOSTAT","tokens","FALL_SENSOR","PRESENCE_SENSOR","ALARM_BUTTON","ENTRANCE_DOOR","BLIND","LIGHT_DEVICE_TYPE_RULES","LIGHT","SFE_DEVICE_TYPE_RULES","DEVICE_TYPE_LABELS","UNKNOWN","ENDPOINT_LABELS","SFE_CMD_ONOFF","SFE_CMD_BLIND","SFE_CMD_CHANGEOVERMODE","SFE_CMD_HVACMODE","SFE_CMD_OFFBEHAVIOUR","SFE_CMD_ONBEHAVIOUR","SFE_CMD_TIMEDDYNAMICMODE","SFE_CMD_DOWNKEY_ACTIVESCENE","SFE_STATE_ONOFF","SFE_STATE_TEMPERATURE","SFE_STATE_PRESENCE","SFE_STATE_MANDOWN","SFE_STATE_FALL","SFE_STATE_HVACMODE","SFE_SENSOR","SFE_STATUS","SFE_UNKNOWN","discoveredUnmappedSfeCodes","Set","resolveDeviceType","input","normalizedRawValues","rawType","rawSubType","rawName","map","value","normalize","filter","length","primaryMatch","resolveFromRules","normalizedSfeTypes","sfeTypes","sfeMatch","lightMatch","getDeviceTypeLabel","type","getEndpointLabel","sfeType","rawValue","trim","normalizedSfeType","knownLabel","add","humanizeUnknownSfeCode","resolveFromRules","normalizedValues","rules","rule","some","value","includesAny","tokens","deviceType","token","includes","normalize","trim","toUpperCase","humanizeUnknownSfeCode","rawValue","normalizedValue","startsWith","cmdMatch","exec","humanizeSfeSuffix","stateMatch","test","replaceAll","toLowerCase"]},_coverageSchema:"1a1c01bbd47fc00a2c39e90264f33305004495a9",hash:"aeec6cdbbcdcd189d48739072086839b5c8f77e9"};var coverage=global[gcv]||(global[gcv]={});if(!coverage[path]||coverage[path].hash!==hash){coverage[path]=coverageData;}var actualCoverage=coverage[path];{// @ts-ignore +cov_tf1x7lmso=function(){return actualCoverage;};}return actualCoverage;}cov_tf1x7lmso();var t=(cov_tf1x7lmso().s[0]++,function(e){cov_tf1x7lmso().f[0]++;cov_tf1x7lmso().s[1]++;return e.UNKNOWN="UNKNOWN",e.THERMOSTAT="THERMOSTAT",e.FALL_SENSOR="FALL_SENSOR",e.PRESENCE_SENSOR="PRESENCE_SENSOR",e.LIGHT="LIGHT",e.ALARM_BUTTON="ALARM_BUTTON",e.ENTRANCE_DOOR="ENTRANCE_DOOR",e.BLIND="BLIND",e;}((cov_tf1x7lmso().b[0][0]++,t)||(cov_tf1x7lmso().b[0][1]++,{})));var A=(cov_tf1x7lmso().s[2]++,[{deviceType:t.THERMOSTAT,tokens:["THERMOSTAT","HVAC","CLIMATE"]},{deviceType:t.FALL_SENSOR,tokens:["FALL","MANDOWN"]},{deviceType:t.PRESENCE_SENSOR,tokens:["PRESENCE","MOTION"]},{deviceType:t.ALARM_BUTTON,tokens:["ALARM_BUTTON","PANIC_BUTTON","SOS_BUTTON","SCENARIO","SCENE"]},{deviceType:t.ENTRANCE_DOOR,tokens:["DOOR","LOCK","GATE","PORTA"]},{deviceType:t.BLIND,tokens:["BLIND","SHUTTER"]}]),i=(cov_tf1x7lmso().s[3]++,[{deviceType:t.LIGHT,tokens:["LIGHT","LAMP"]}]),c=(cov_tf1x7lmso().s[4]++,[{deviceType:t.THERMOSTAT,tokens:["SFE_CMD_CHANGEOVERMODE","SFE_CMD_HVACMODE","SFE_CMD_OFFBEHAVIOUR","SFE_CMD_ONBEHAVIOUR","SFE_STATE_HVACMODE","SFE_STATE_TEMPERATURE"]},{deviceType:t.BLIND,tokens:["SFE_CMD_BLIND"]},{deviceType:t.PRESENCE_SENSOR,tokens:["SFE_STATE_PRESENCE"]},{deviceType:t.FALL_SENSOR,tokens:["SFE_STATE_MANDOWN","SFE_STATE_FALL"]}]),O=(cov_tf1x7lmso().s[5]++,{[t.UNKNOWN]:"Sconosciuto",[t.THERMOSTAT]:"Termostato",[t.FALL_SENSOR]:"Sensore caduta",[t.PRESENCE_SENSOR]:"Sensore presenza",[t.LIGHT]:"Luce",[t.ALARM_BUTTON]:"Pulsante allarme",[t.ENTRANCE_DOOR]:"Controllo accesso",[t.BLIND]:"Tapparella"}),s=(cov_tf1x7lmso().s[6]++,{SFE_CMD_ONOFF:"Comando accensione/spegnimento",SFE_CMD_BLIND:"Comando movimento tapparella",SFE_CMD_CHANGEOVERMODE:"Comando cambio modalita HVAC",SFE_CMD_HVACMODE:"Comando modalita HVAC",SFE_CMD_OFFBEHAVIOUR:"Comando comportamento in assenza",SFE_CMD_ONBEHAVIOUR:"Comando comportamento in presenza",SFE_CMD_TIMEDDYNAMICMODE:"Comando modalita dinamica temporizzata",SFE_CMD_DOWNKEY_ACTIVESCENE:"Comando attivazione scenario",SFE_STATE_ONOFF:"Stato acceso/spento",SFE_STATE_TEMPERATURE:"Temperatura",SFE_STATE_PRESENCE:"Presenza rilevata",SFE_STATE_MANDOWN:"Stato uomo a terra",SFE_STATE_FALL:"Stato caduta rilevata",SFE_STATE_HVACMODE:"Stato modalita HVAC",SFE_SENSOR:"Sensore generico",SFE_STATUS:"Stato generico dispositivo",SFE_UNKNOWN:"Endpoint sconosciuto"}),C=(cov_tf1x7lmso().s[7]++,new Set());function L(e){cov_tf1x7lmso().f[1]++;let E=(cov_tf1x7lmso().s[8]++,[e.rawType,e.rawSubType,e.rawName].map(S=>{cov_tf1x7lmso().f[2]++;cov_tf1x7lmso().s[9]++;return _(S);}).filter(S=>{cov_tf1x7lmso().f[3]++;cov_tf1x7lmso().s[10]++;return S.length>0;})),o=(cov_tf1x7lmso().s[11]++,T(E,A));cov_tf1x7lmso().s[12]++;if(o){cov_tf1x7lmso().b[1][0]++;cov_tf1x7lmso().s[13]++;return o;}else{cov_tf1x7lmso().b[1][1]++;}let n=(cov_tf1x7lmso().s[14]++,((cov_tf1x7lmso().b[2][0]++,e.sfeTypes)??(cov_tf1x7lmso().b[2][1]++,[])).map(S=>{cov_tf1x7lmso().f[4]++;cov_tf1x7lmso().s[15]++;return _(S);}).filter(S=>{cov_tf1x7lmso().f[5]++;cov_tf1x7lmso().s[16]++;return S.length>0;})),a=(cov_tf1x7lmso().s[17]++,T(n,c));cov_tf1x7lmso().s[18]++;if(a){cov_tf1x7lmso().b[3][0]++;cov_tf1x7lmso().s[19]++;return a;}else{cov_tf1x7lmso().b[3][1]++;}let r=(cov_tf1x7lmso().s[20]++,T(E,i));cov_tf1x7lmso().s[21]++;return(cov_tf1x7lmso().b[4][0]++,r)||(cov_tf1x7lmso().b[4][1]++,t.UNKNOWN);}function M(e){cov_tf1x7lmso().f[6]++;cov_tf1x7lmso().s[22]++;return(cov_tf1x7lmso().b[5][0]++,O[e])??(cov_tf1x7lmso().b[5][1]++,"Dispositivo");}function p(e){cov_tf1x7lmso().f[7]++;let E=(cov_tf1x7lmso().s[23]++,((cov_tf1x7lmso().b[6][0]++,e)??(cov_tf1x7lmso().b[6][1]++,"")).trim());cov_tf1x7lmso().s[24]++;if(!E){cov_tf1x7lmso().b[7][0]++;cov_tf1x7lmso().s[25]++;return s.SFE_UNKNOWN;}else{cov_tf1x7lmso().b[7][1]++;}let o=(cov_tf1x7lmso().s[26]++,_(E)),n=(cov_tf1x7lmso().s[27]++,s[o]);cov_tf1x7lmso().s[28]++;return(cov_tf1x7lmso().b[8][0]++,n)||(cov_tf1x7lmso().b[8][1]++,C.add(E),m(E,o));}function T(e,E){cov_tf1x7lmso().f[8]++;cov_tf1x7lmso().s[29]++;for(let o of E){cov_tf1x7lmso().s[30]++;if(e.some(n=>{cov_tf1x7lmso().f[9]++;cov_tf1x7lmso().s[31]++;return R(n,o.tokens);})){cov_tf1x7lmso().b[9][0]++;cov_tf1x7lmso().s[32]++;return o.deviceType;}else{cov_tf1x7lmso().b[9][1]++;}}cov_tf1x7lmso().s[33]++;return null;}function R(e,E){cov_tf1x7lmso().f[10]++;cov_tf1x7lmso().s[34]++;return E.some(o=>{cov_tf1x7lmso().f[11]++;cov_tf1x7lmso().s[35]++;return e.includes(o);});}function _(e){cov_tf1x7lmso().f[12]++;cov_tf1x7lmso().s[36]++;return((cov_tf1x7lmso().b[10][0]++,e)??(cov_tf1x7lmso().b[10][1]++,"")).trim().toUpperCase();}function m(e,E){cov_tf1x7lmso().f[13]++;cov_tf1x7lmso().s[37]++;if(!E.startsWith("SFE_")){cov_tf1x7lmso().b[11][0]++;cov_tf1x7lmso().s[38]++;return e;}else{cov_tf1x7lmso().b[11][1]++;}let n=(cov_tf1x7lmso().s[39]++,/^SFE_(?:Cmd|CMD)_(.+)$/.exec(e));cov_tf1x7lmso().s[40]++;if(n?.[1]){cov_tf1x7lmso().b[12][0]++;cov_tf1x7lmso().s[41]++;return`Comando ${N(n[1])}`;}else{cov_tf1x7lmso().b[12][1]++;}let r=(cov_tf1x7lmso().s[42]++,/^SFE_(?:State|STATE)_(.+)$/.exec(e));cov_tf1x7lmso().s[43]++;return r?.[1]?(cov_tf1x7lmso().b[13][0]++,`Stato ${N(r[1])}`):(cov_tf1x7lmso().b[13][1]++,/^SFE_(?:Sensor|SENSOR)$/.test(e)?(cov_tf1x7lmso().b[14][0]++,"Sensore"):(cov_tf1x7lmso().b[14][1]++,/^SFE_(?:Status|STATUS)$/.test(e)?(cov_tf1x7lmso().b[15][0]++,"Stato"):(cov_tf1x7lmso().b[15][1]++,e)));}function N(e){cov_tf1x7lmso().f[14]++;cov_tf1x7lmso().s[44]++;return e.replaceAll("_"," ").replaceAll(/([a-z])([A-Z])/g,"$1 $2").replaceAll(/\s+/g," ").trim().toLowerCase();}export{L as a,M as b,p as c};//# sourceMappingURL=chunk-HTKPMSJ5.js.map +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ0IiwiY292X3RmMXg3bG1zbyIsInMiLCJlIiwiZiIsIlVOS05PV04iLCJUSEVSTU9TVEFUIiwiRkFMTF9TRU5TT1IiLCJQUkVTRU5DRV9TRU5TT1IiLCJMSUdIVCIsIkFMQVJNX0JVVFRPTiIsIkVOVFJBTkNFX0RPT1IiLCJCTElORCIsImIiLCJBIiwiZGV2aWNlVHlwZSIsInRva2VucyIsImkiLCJjIiwiTyIsIlNGRV9DTURfT05PRkYiLCJTRkVfQ01EX0JMSU5EIiwiU0ZFX0NNRF9DSEFOR0VPVkVSTU9ERSIsIlNGRV9DTURfSFZBQ01PREUiLCJTRkVfQ01EX09GRkJFSEFWSU9VUiIsIlNGRV9DTURfT05CRUhBVklPVVIiLCJTRkVfQ01EX1RJTUVERFlOQU1JQ01PREUiLCJTRkVfQ01EX0RPV05LRVlfQUNUSVZFU0NFTkUiLCJTRkVfU1RBVEVfT05PRkYiLCJTRkVfU1RBVEVfVEVNUEVSQVRVUkUiLCJTRkVfU1RBVEVfUFJFU0VOQ0UiLCJTRkVfU1RBVEVfTUFORE9XTiIsIlNGRV9TVEFURV9GQUxMIiwiU0ZFX1NUQVRFX0hWQUNNT0RFIiwiU0ZFX1NFTlNPUiIsIlNGRV9TVEFUVVMiLCJTRkVfVU5LTk9XTiIsIkMiLCJTZXQiLCJMIiwiRSIsInJhd1R5cGUiLCJyYXdTdWJUeXBlIiwicmF3TmFtZSIsIm1hcCIsIlMiLCJfIiwiZmlsdGVyIiwibGVuZ3RoIiwibyIsIlQiLCJuIiwic2ZlVHlwZXMiLCJhIiwiciIsIk0iLCJwIiwidHJpbSIsImFkZCIsIm0iLCJzb21lIiwiUiIsImluY2x1ZGVzIiwidG9VcHBlckNhc2UiLCJzdGFydHNXaXRoIiwiZXhlYyIsIk4iLCJ0ZXN0IiwicmVwbGFjZUFsbCIsInRvTG93ZXJDYXNlIl0sInNvdXJjZXMiOlsic3JjL2FwcC9mZWF0dXJlcy9kZXZpY2UtaW50ZXJhY3Rpb24vbW9kZWxzL2RldmljZS10eXBlLmVudW0udHMiLCJzcmMvYXBwL3NoYXJlZC9tb2RlbHMvZGV2aWNlLXRheG9ub215LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBlbnVtIERldmljZVR5cGUge1xuICBVTktOT1dOID0gJ1VOS05PV04nLFxuICBUSEVSTU9TVEFUID0gJ1RIRVJNT1NUQVQnLFxuICBGQUxMX1NFTlNPUiA9ICdGQUxMX1NFTlNPUicsXG4gIFBSRVNFTkNFX1NFTlNPUiA9ICdQUkVTRU5DRV9TRU5TT1InLFxuICBMSUdIVCA9ICdMSUdIVCcsXG4gIEFMQVJNX0JVVFRPTiA9ICdBTEFSTV9CVVRUT04nLFxuICBFTlRSQU5DRV9ET09SID0gJ0VOVFJBTkNFX0RPT1InLFxuICBCTElORCA9ICdCTElORCcsXG59XG4iLCJpbXBvcnQgeyBEZXZpY2VUeXBlIH0gZnJvbSAnLi4vLi4vZmVhdHVyZXMvZGV2aWNlLWludGVyYWN0aW9uL21vZGVscy9kZXZpY2UtdHlwZS5lbnVtJztcblxuaW50ZXJmYWNlIERldmljZVR5cGVSdWxlIHtcblx0cmVhZG9ubHkgZGV2aWNlVHlwZTogRGV2aWNlVHlwZTtcblx0cmVhZG9ubHkgdG9rZW5zOiBSZWFkb25seUFycmF5PHN0cmluZz47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGV2aWNlVHlwZVJlc29sdXRpb25JbnB1dCB7XG5cdHJlYWRvbmx5IHJhd1R5cGU/OiBzdHJpbmc7XG5cdHJlYWRvbmx5IHJhd1N1YlR5cGU/OiBzdHJpbmc7XG5cdHJlYWRvbmx5IHJhd05hbWU/OiBzdHJpbmc7XG5cdHJlYWRvbmx5IHNmZVR5cGVzPzogUmVhZG9ubHlBcnJheTxzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkPjtcbn1cblxuY29uc3QgUFJJTUFSWV9ERVZJQ0VfVFlQRV9SVUxFUzogUmVhZG9ubHlBcnJheTxEZXZpY2VUeXBlUnVsZT4gPSBbXG5cdHsgZGV2aWNlVHlwZTogRGV2aWNlVHlwZS5USEVSTU9TVEFULCB0b2tlbnM6IFsnVEhFUk1PU1RBVCcsICdIVkFDJywgJ0NMSU1BVEUnXSB9LFxuXHR7IGRldmljZVR5cGU6IERldmljZVR5cGUuRkFMTF9TRU5TT1IsIHRva2VuczogWydGQUxMJywgJ01BTkRPV04nXSB9LFxuXHR7IGRldmljZVR5cGU6IERldmljZVR5cGUuUFJFU0VOQ0VfU0VOU09SLCB0b2tlbnM6IFsnUFJFU0VOQ0UnLCAnTU9USU9OJ10gfSxcblx0eyBkZXZpY2VUeXBlOiBEZXZpY2VUeXBlLkFMQVJNX0JVVFRPTiwgdG9rZW5zOiBbJ0FMQVJNX0JVVFRPTicsICdQQU5JQ19CVVRUT04nLCAnU09TX0JVVFRPTicsICdTQ0VOQVJJTycsICdTQ0VORSddIH0sXG5cdHsgZGV2aWNlVHlwZTogRGV2aWNlVHlwZS5FTlRSQU5DRV9ET09SLCB0b2tlbnM6IFsnRE9PUicsICdMT0NLJywgJ0dBVEUnLCAnUE9SVEEnXSB9LFxuXHR7IGRldmljZVR5cGU6IERldmljZVR5cGUuQkxJTkQsIHRva2VuczogWydCTElORCcsICdTSFVUVEVSJ10gfSxcbl07XG5cbmNvbnN0IExJR0hUX0RFVklDRV9UWVBFX1JVTEVTOiBSZWFkb25seUFycmF5PERldmljZVR5cGVSdWxlPiA9IFtcblx0eyBkZXZpY2VUeXBlOiBEZXZpY2VUeXBlLkxJR0hULCB0b2tlbnM6IFsnTElHSFQnLCAnTEFNUCddIH0sXG5dO1xuXG5jb25zdCBTRkVfREVWSUNFX1RZUEVfUlVMRVM6IFJlYWRvbmx5QXJyYXk8RGV2aWNlVHlwZVJ1bGU+ID0gW1xuXHR7XG5cdFx0ZGV2aWNlVHlwZTogRGV2aWNlVHlwZS5USEVSTU9TVEFULFxuXHRcdHRva2VuczogW1xuXHRcdFx0J1NGRV9DTURfQ0hBTkdFT1ZFUk1PREUnLFxuXHRcdFx0J1NGRV9DTURfSFZBQ01PREUnLFxuXHRcdFx0J1NGRV9DTURfT0ZGQkVIQVZJT1VSJyxcblx0XHRcdCdTRkVfQ01EX09OQkVIQVZJT1VSJyxcblx0XHRcdCdTRkVfU1RBVEVfSFZBQ01PREUnLFxuXHRcdFx0J1NGRV9TVEFURV9URU1QRVJBVFVSRScsXG5cdFx0XSxcblx0fSxcblx0eyBkZXZpY2VUeXBlOiBEZXZpY2VUeXBlLkJMSU5ELCB0b2tlbnM6IFsnU0ZFX0NNRF9CTElORCddIH0sXG5cdHsgZGV2aWNlVHlwZTogRGV2aWNlVHlwZS5QUkVTRU5DRV9TRU5TT1IsIHRva2VuczogWydTRkVfU1RBVEVfUFJFU0VOQ0UnXSB9LFxuXHR7IGRldmljZVR5cGU6IERldmljZVR5cGUuRkFMTF9TRU5TT1IsIHRva2VuczogWydTRkVfU1RBVEVfTUFORE9XTicsICdTRkVfU1RBVEVfRkFMTCddIH0sXG5dO1xuXG5jb25zdCBERVZJQ0VfVFlQRV9MQUJFTFM6IFJlYWRvbmx5PFJlY29yZDxEZXZpY2VUeXBlLCBzdHJpbmc+PiA9IHtcblx0W0RldmljZVR5cGUuVU5LTk9XTl06ICdTY29ub3NjaXV0bycsXG5cdFtEZXZpY2VUeXBlLlRIRVJNT1NUQVRdOiAnVGVybW9zdGF0bycsXG5cdFtEZXZpY2VUeXBlLkZBTExfU0VOU09SXTogJ1NlbnNvcmUgY2FkdXRhJyxcblx0W0RldmljZVR5cGUuUFJFU0VOQ0VfU0VOU09SXTogJ1NlbnNvcmUgcHJlc2VuemEnLFxuXHRbRGV2aWNlVHlwZS5MSUdIVF06ICdMdWNlJyxcblx0W0RldmljZVR5cGUuQUxBUk1fQlVUVE9OXTogJ1B1bHNhbnRlIGFsbGFybWUnLFxuXHRbRGV2aWNlVHlwZS5FTlRSQU5DRV9ET09SXTogJ0NvbnRyb2xsbyBhY2Nlc3NvJyxcblx0W0RldmljZVR5cGUuQkxJTkRdOiAnVGFwcGFyZWxsYScsXG59O1xuXG5jb25zdCBFTkRQT0lOVF9MQUJFTFM6IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIHN0cmluZz4+ID0ge1xuXHRTRkVfQ01EX09OT0ZGOiAnQ29tYW5kbyBhY2NlbnNpb25lL3NwZWduaW1lbnRvJyxcblx0U0ZFX0NNRF9CTElORDogJ0NvbWFuZG8gbW92aW1lbnRvIHRhcHBhcmVsbGEnLFxuXHRTRkVfQ01EX0NIQU5HRU9WRVJNT0RFOiAnQ29tYW5kbyBjYW1iaW8gbW9kYWxpdGEgSFZBQycsXG5cdFNGRV9DTURfSFZBQ01PREU6ICdDb21hbmRvIG1vZGFsaXRhIEhWQUMnLFxuXHRTRkVfQ01EX09GRkJFSEFWSU9VUjogJ0NvbWFuZG8gY29tcG9ydGFtZW50byBpbiBhc3NlbnphJyxcblx0U0ZFX0NNRF9PTkJFSEFWSU9VUjogJ0NvbWFuZG8gY29tcG9ydGFtZW50byBpbiBwcmVzZW56YScsXG5cdFNGRV9DTURfVElNRUREWU5BTUlDTU9ERTogJ0NvbWFuZG8gbW9kYWxpdGEgZGluYW1pY2EgdGVtcG9yaXp6YXRhJyxcblx0U0ZFX0NNRF9ET1dOS0VZX0FDVElWRVNDRU5FOiAnQ29tYW5kbyBhdHRpdmF6aW9uZSBzY2VuYXJpbycsXG5cdFNGRV9TVEFURV9PTk9GRjogJ1N0YXRvIGFjY2Vzby9zcGVudG8nLFxuXHRTRkVfU1RBVEVfVEVNUEVSQVRVUkU6ICdUZW1wZXJhdHVyYScsXG5cdFNGRV9TVEFURV9QUkVTRU5DRTogJ1ByZXNlbnphIHJpbGV2YXRhJyxcblx0U0ZFX1NUQVRFX01BTkRPV046ICdTdGF0byB1b21vIGEgdGVycmEnLFxuXHRTRkVfU1RBVEVfRkFMTDogJ1N0YXRvIGNhZHV0YSByaWxldmF0YScsXG5cdFNGRV9TVEFURV9IVkFDTU9ERTogJ1N0YXRvIG1vZGFsaXRhIEhWQUMnLFxuXHRTRkVfU0VOU09SOiAnU2Vuc29yZSBnZW5lcmljbycsXG5cdFNGRV9TVEFUVVM6ICdTdGF0byBnZW5lcmljbyBkaXNwb3NpdGl2bycsXG5cdFNGRV9VTktOT1dOOiAnRW5kcG9pbnQgc2Nvbm9zY2l1dG8nLFxufTtcblxuY29uc3QgZGlzY292ZXJlZFVubWFwcGVkU2ZlQ29kZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVEZXZpY2VUeXBlKGlucHV0OiBEZXZpY2VUeXBlUmVzb2x1dGlvbklucHV0KTogRGV2aWNlVHlwZSB7XG5cdGNvbnN0IG5vcm1hbGl6ZWRSYXdWYWx1ZXMgPSBbaW5wdXQucmF3VHlwZSwgaW5wdXQucmF3U3ViVHlwZSwgaW5wdXQucmF3TmFtZV1cblx0XHQubWFwKCh2YWx1ZSkgPT4gbm9ybWFsaXplKHZhbHVlKSlcblx0XHQuZmlsdGVyKCh2YWx1ZSkgPT4gdmFsdWUubGVuZ3RoID4gMCk7XG5cblx0Y29uc3QgcHJpbWFyeU1hdGNoID0gcmVzb2x2ZUZyb21SdWxlcyhub3JtYWxpemVkUmF3VmFsdWVzLCBQUklNQVJZX0RFVklDRV9UWVBFX1JVTEVTKTtcblx0aWYgKHByaW1hcnlNYXRjaCkge1xuXHRcdHJldHVybiBwcmltYXJ5TWF0Y2g7XG5cdH1cblxuXHRjb25zdCBub3JtYWxpemVkU2ZlVHlwZXMgPSAoaW5wdXQuc2ZlVHlwZXMgPz8gW10pXG5cdFx0Lm1hcCgodmFsdWUpID0+IG5vcm1hbGl6ZSh2YWx1ZSkpXG5cdFx0LmZpbHRlcigodmFsdWUpID0+IHZhbHVlLmxlbmd0aCA+IDApO1xuXG5cdGNvbnN0IHNmZU1hdGNoID0gcmVzb2x2ZUZyb21SdWxlcyhub3JtYWxpemVkU2ZlVHlwZXMsIFNGRV9ERVZJQ0VfVFlQRV9SVUxFUyk7XG5cdGlmIChzZmVNYXRjaCkge1xuXHRcdHJldHVybiBzZmVNYXRjaDtcblx0fVxuXG5cdGNvbnN0IGxpZ2h0TWF0Y2ggPSByZXNvbHZlRnJvbVJ1bGVzKG5vcm1hbGl6ZWRSYXdWYWx1ZXMsIExJR0hUX0RFVklDRV9UWVBFX1JVTEVTKTtcblx0aWYgKGxpZ2h0TWF0Y2gpIHtcblx0XHRyZXR1cm4gbGlnaHRNYXRjaDtcblx0fVxuXG5cdHJldHVybiBEZXZpY2VUeXBlLlVOS05PV047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREZXZpY2VUeXBlTGFiZWwodHlwZTogRGV2aWNlVHlwZSk6IHN0cmluZyB7XG5cdHJldHVybiBERVZJQ0VfVFlQRV9MQUJFTFNbdHlwZV0gPz8gJ0Rpc3Bvc2l0aXZvJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEVuZHBvaW50TGFiZWwoc2ZlVHlwZTogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XG5cdGNvbnN0IHJhd1ZhbHVlID0gKHNmZVR5cGUgPz8gJycpLnRyaW0oKTtcblx0aWYgKCFyYXdWYWx1ZSkge1xuXHRcdHJldHVybiBFTkRQT0lOVF9MQUJFTFNbJ1NGRV9VTktOT1dOJ107XG5cdH1cblxuXHRjb25zdCBub3JtYWxpemVkU2ZlVHlwZSA9IG5vcm1hbGl6ZShyYXdWYWx1ZSk7XG5cdGNvbnN0IGtub3duTGFiZWwgPSBFTkRQT0lOVF9MQUJFTFNbbm9ybWFsaXplZFNmZVR5cGVdO1xuXHRpZiAoa25vd25MYWJlbCkge1xuXHRcdHJldHVybiBrbm93bkxhYmVsO1xuXHR9XG5cblx0ZGlzY292ZXJlZFVubWFwcGVkU2ZlQ29kZXMuYWRkKHJhd1ZhbHVlKTtcblx0cmV0dXJuIGh1bWFuaXplVW5rbm93blNmZUNvZGUocmF3VmFsdWUsIG5vcm1hbGl6ZWRTZmVUeXBlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldERpc2NvdmVyZWRVbm1hcHBlZFNmZUNvZGVzKCk6IHN0cmluZ1tdIHtcblx0cmV0dXJuIEFycmF5LmZyb20oZGlzY292ZXJlZFVubWFwcGVkU2ZlQ29kZXMudmFsdWVzKCkpLnNvcnQoKGxlZnQsIHJpZ2h0KSA9PiBsZWZ0LmxvY2FsZUNvbXBhcmUocmlnaHQpKTtcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZUZyb21SdWxlcyhcblx0bm9ybWFsaXplZFZhbHVlczogUmVhZG9ubHlBcnJheTxzdHJpbmc+LFxuXHRydWxlczogUmVhZG9ubHlBcnJheTxEZXZpY2VUeXBlUnVsZT4sXG4pOiBEZXZpY2VUeXBlIHwgbnVsbCB7XG5cdGZvciAoY29uc3QgcnVsZSBvZiBydWxlcykge1xuXHRcdGlmIChub3JtYWxpemVkVmFsdWVzLnNvbWUoKHZhbHVlKSA9PiBpbmNsdWRlc0FueSh2YWx1ZSwgcnVsZS50b2tlbnMpKSkge1xuXHRcdFx0cmV0dXJuIHJ1bGUuZGV2aWNlVHlwZTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gaW5jbHVkZXNBbnkodmFsdWU6IHN0cmluZywgdG9rZW5zOiBSZWFkb25seUFycmF5PHN0cmluZz4pOiBib29sZWFuIHtcblx0cmV0dXJuIHRva2Vucy5zb21lKCh0b2tlbikgPT4gdmFsdWUuaW5jbHVkZXModG9rZW4pKTtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplKHZhbHVlOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcblx0cmV0dXJuICh2YWx1ZSA/PyAnJykudHJpbSgpLnRvVXBwZXJDYXNlKCk7XG59XG5cbmZ1bmN0aW9uIGh1bWFuaXplVW5rbm93blNmZUNvZGUocmF3VmFsdWU6IHN0cmluZywgbm9ybWFsaXplZFZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRpZiAoIW5vcm1hbGl6ZWRWYWx1ZS5zdGFydHNXaXRoKCdTRkVfJykpIHtcblx0XHRyZXR1cm4gcmF3VmFsdWU7XG5cdH1cblxuXHRjb25zdCBjbWRQYXR0ZXJuID0gL15TRkVfKD86Q21kfENNRClfKC4rKSQvO1xuXHRjb25zdCBjbWRNYXRjaCA9IGNtZFBhdHRlcm4uZXhlYyhyYXdWYWx1ZSk7XG5cdGlmIChjbWRNYXRjaD8uWzFdKSB7XG5cdFx0cmV0dXJuIGBDb21hbmRvICR7aHVtYW5pemVTZmVTdWZmaXgoY21kTWF0Y2hbMV0pfWA7XG5cdH1cblxuXHRjb25zdCBzdGF0ZVBhdHRlcm4gPSAvXlNGRV8oPzpTdGF0ZXxTVEFURSlfKC4rKSQvO1xuXHRjb25zdCBzdGF0ZU1hdGNoID0gc3RhdGVQYXR0ZXJuLmV4ZWMocmF3VmFsdWUpO1xuXHRpZiAoc3RhdGVNYXRjaD8uWzFdKSB7XG5cdFx0cmV0dXJuIGBTdGF0byAke2h1bWFuaXplU2ZlU3VmZml4KHN0YXRlTWF0Y2hbMV0pfWA7XG5cdH1cblxuXHRpZiAoL15TRkVfKD86U2Vuc29yfFNFTlNPUikkLy50ZXN0KHJhd1ZhbHVlKSkge1xuXHRcdHJldHVybiAnU2Vuc29yZSc7XG5cdH1cblxuXHRpZiAoL15TRkVfKD86U3RhdHVzfFNUQVRVUykkLy50ZXN0KHJhd1ZhbHVlKSkge1xuXHRcdHJldHVybiAnU3RhdG8nO1xuXHR9XG5cblx0cmV0dXJuIHJhd1ZhbHVlO1xufVxuXG5mdW5jdGlvbiBodW1hbml6ZVNmZVN1ZmZpeCh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcblx0cmV0dXJuIHZhbHVlXG5cdFx0LnJlcGxhY2VBbGwoJ18nLCAnICcpXG5cdFx0LnJlcGxhY2VBbGwoLyhbYS16XSkoW0EtWl0pL2csICckMSAkMicpXG5cdFx0LnJlcGxhY2VBbGwoL1xccysvZywgJyAnKVxuXHRcdC50cmltKClcblx0XHQudG9Mb3dlckNhc2UoKTtcbn0iXSwibWFwcGluZ3MiOiI7eUZBQUEsR0FBWSxDQUFBQSxDQUFBLEVBQUFDLGFBQUEsR0FBQUMsQ0FBQSxNQUFaLFNBQVlDLENBQUEsQ0FBVSxDQUFBRixhQUFBLEdBQUFHLENBQUEsS0FBQUgsQ0FBQSxnQkFBQUMsQ0FBQSxNQUNwQixPQUFBQyxDQUFBLENBQUFFLE9BQUEsV0FDQUYsQ0FBQSxDQUFBRyxVQUFBLGNBQ0FILENBQUEsQ0FBQUksV0FBQSxlQUNBSixDQUFBLENBQUFLLGVBQUEsbUJBQ0FMLENBQUEsQ0FBQU0sS0FBQSxTQUNBTixDQUFBLENBQUFPLFlBQUEsZ0JBQ0FQLENBQUEsQ0FBQVEsYUFBQSxpQkFDQVIsQ0FBQSxDQUFBUyxLQUFBLFNBUlVULENBU1osR0FUWSxDQUFBRixhQUFBLEdBQUFZLENBQUEsU0FBQWIsQ0FBQSxJQUFBQyxhQUFBLEdBQUFZLENBQUEsU0FBVSxNQ2N0QixHQUFNLENBQUFDLENBQUEsRUFBQWIsYUFBQSxHQUFBQyxDQUFBLE1BQTJELENBQ2hFLENBQUVhLFVBQUEsQ0FBWWYsQ0FBQSxDQUFXTSxVQUFBLENBQVlVLE1BQUEsQ0FBUSxDQUFDLGFBQWMsT0FBUSxTQUFTLENBQUMsRUFDOUUsQ0FBRUQsVUFBQSxDQUFZZixDQUFBLENBQVdPLFdBQUEsQ0FBYVMsTUFBQSxDQUFRLENBQUMsT0FBUSxTQUFTLENBQUMsRUFDakUsQ0FBRUQsVUFBQSxDQUFZZixDQUFBLENBQVdRLGVBQUEsQ0FBaUJRLE1BQUEsQ0FBUSxDQUFDLFdBQVksUUFBUSxDQUFDLEVBQ3hFLENBQUVELFVBQUEsQ0FBWWYsQ0FBQSxDQUFXVSxZQUFBLENBQWNNLE1BQUEsQ0FBUSxDQUFDLGVBQWdCLGVB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 \ No newline at end of file diff --git a/frontend/dist-instrumented/chunk-HTKPMSJ5.js.map b/frontend/dist-instrumented/chunk-HTKPMSJ5.js.map new file mode 100644 index 00000000..4cecc4ad --- /dev/null +++ b/frontend/dist-instrumented/chunk-HTKPMSJ5.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["src/app/features/device-interaction/models/device-type.enum.ts", "src/app/shared/models/device-taxonomy.ts"], + "sourcesContent": ["export enum DeviceType {\n UNKNOWN = 'UNKNOWN',\n THERMOSTAT = 'THERMOSTAT',\n FALL_SENSOR = 'FALL_SENSOR',\n PRESENCE_SENSOR = 'PRESENCE_SENSOR',\n LIGHT = 'LIGHT',\n ALARM_BUTTON = 'ALARM_BUTTON',\n ENTRANCE_DOOR = 'ENTRANCE_DOOR',\n BLIND = 'BLIND',\n}\n", "import { DeviceType } from '../../features/device-interaction/models/device-type.enum';\n\ninterface DeviceTypeRule {\n\treadonly deviceType: DeviceType;\n\treadonly tokens: ReadonlyArray;\n}\n\nexport interface DeviceTypeResolutionInput {\n\treadonly rawType?: string;\n\treadonly rawSubType?: string;\n\treadonly rawName?: string;\n\treadonly sfeTypes?: ReadonlyArray;\n}\n\nconst PRIMARY_DEVICE_TYPE_RULES: ReadonlyArray = [\n\t{ deviceType: DeviceType.THERMOSTAT, tokens: ['THERMOSTAT', 'HVAC', 'CLIMATE'] },\n\t{ deviceType: DeviceType.FALL_SENSOR, tokens: ['FALL', 'MANDOWN'] },\n\t{ deviceType: DeviceType.PRESENCE_SENSOR, tokens: ['PRESENCE', 'MOTION'] },\n\t{ deviceType: DeviceType.ALARM_BUTTON, tokens: ['ALARM_BUTTON', 'PANIC_BUTTON', 'SOS_BUTTON', 'SCENARIO', 'SCENE'] },\n\t{ deviceType: DeviceType.ENTRANCE_DOOR, tokens: ['DOOR', 'LOCK', 'GATE', 'PORTA'] },\n\t{ deviceType: DeviceType.BLIND, tokens: ['BLIND', 'SHUTTER'] },\n];\n\nconst LIGHT_DEVICE_TYPE_RULES: ReadonlyArray = [\n\t{ deviceType: DeviceType.LIGHT, tokens: ['LIGHT', 'LAMP'] },\n];\n\nconst SFE_DEVICE_TYPE_RULES: ReadonlyArray = [\n\t{\n\t\tdeviceType: DeviceType.THERMOSTAT,\n\t\ttokens: [\n\t\t\t'SFE_CMD_CHANGEOVERMODE',\n\t\t\t'SFE_CMD_HVACMODE',\n\t\t\t'SFE_CMD_OFFBEHAVIOUR',\n\t\t\t'SFE_CMD_ONBEHAVIOUR',\n\t\t\t'SFE_STATE_HVACMODE',\n\t\t\t'SFE_STATE_TEMPERATURE',\n\t\t],\n\t},\n\t{ deviceType: DeviceType.BLIND, tokens: ['SFE_CMD_BLIND'] },\n\t{ deviceType: DeviceType.PRESENCE_SENSOR, tokens: ['SFE_STATE_PRESENCE'] },\n\t{ deviceType: DeviceType.FALL_SENSOR, tokens: ['SFE_STATE_MANDOWN', 'SFE_STATE_FALL'] },\n];\n\nconst DEVICE_TYPE_LABELS: Readonly> = {\n\t[DeviceType.UNKNOWN]: 'Sconosciuto',\n\t[DeviceType.THERMOSTAT]: 'Termostato',\n\t[DeviceType.FALL_SENSOR]: 'Sensore caduta',\n\t[DeviceType.PRESENCE_SENSOR]: 'Sensore presenza',\n\t[DeviceType.LIGHT]: 'Luce',\n\t[DeviceType.ALARM_BUTTON]: 'Pulsante allarme',\n\t[DeviceType.ENTRANCE_DOOR]: 'Controllo accesso',\n\t[DeviceType.BLIND]: 'Tapparella',\n};\n\nconst ENDPOINT_LABELS: Readonly> = {\n\tSFE_CMD_ONOFF: 'Comando accensione/spegnimento',\n\tSFE_CMD_BLIND: 'Comando movimento tapparella',\n\tSFE_CMD_CHANGEOVERMODE: 'Comando cambio modalita HVAC',\n\tSFE_CMD_HVACMODE: 'Comando modalita HVAC',\n\tSFE_CMD_OFFBEHAVIOUR: 'Comando comportamento in assenza',\n\tSFE_CMD_ONBEHAVIOUR: 'Comando comportamento in presenza',\n\tSFE_CMD_TIMEDDYNAMICMODE: 'Comando modalita dinamica temporizzata',\n\tSFE_CMD_DOWNKEY_ACTIVESCENE: 'Comando attivazione scenario',\n\tSFE_STATE_ONOFF: 'Stato acceso/spento',\n\tSFE_STATE_TEMPERATURE: 'Temperatura',\n\tSFE_STATE_PRESENCE: 'Presenza rilevata',\n\tSFE_STATE_MANDOWN: 'Stato uomo a terra',\n\tSFE_STATE_FALL: 'Stato caduta rilevata',\n\tSFE_STATE_HVACMODE: 'Stato modalita HVAC',\n\tSFE_SENSOR: 'Sensore generico',\n\tSFE_STATUS: 'Stato generico dispositivo',\n\tSFE_UNKNOWN: 'Endpoint sconosciuto',\n};\n\nconst discoveredUnmappedSfeCodes = new Set();\n\nexport function resolveDeviceType(input: DeviceTypeResolutionInput): DeviceType {\n\tconst normalizedRawValues = [input.rawType, input.rawSubType, input.rawName]\n\t\t.map((value) => normalize(value))\n\t\t.filter((value) => value.length > 0);\n\n\tconst primaryMatch = resolveFromRules(normalizedRawValues, PRIMARY_DEVICE_TYPE_RULES);\n\tif (primaryMatch) {\n\t\treturn primaryMatch;\n\t}\n\n\tconst normalizedSfeTypes = (input.sfeTypes ?? [])\n\t\t.map((value) => normalize(value))\n\t\t.filter((value) => value.length > 0);\n\n\tconst sfeMatch = resolveFromRules(normalizedSfeTypes, SFE_DEVICE_TYPE_RULES);\n\tif (sfeMatch) {\n\t\treturn sfeMatch;\n\t}\n\n\tconst lightMatch = resolveFromRules(normalizedRawValues, LIGHT_DEVICE_TYPE_RULES);\n\tif (lightMatch) {\n\t\treturn lightMatch;\n\t}\n\n\treturn DeviceType.UNKNOWN;\n}\n\nexport function getDeviceTypeLabel(type: DeviceType): string {\n\treturn DEVICE_TYPE_LABELS[type] ?? 'Dispositivo';\n}\n\nexport function getEndpointLabel(sfeType: string | null | undefined): string {\n\tconst rawValue = (sfeType ?? '').trim();\n\tif (!rawValue) {\n\t\treturn ENDPOINT_LABELS['SFE_UNKNOWN'];\n\t}\n\n\tconst normalizedSfeType = normalize(rawValue);\n\tconst knownLabel = ENDPOINT_LABELS[normalizedSfeType];\n\tif (knownLabel) {\n\t\treturn knownLabel;\n\t}\n\n\tdiscoveredUnmappedSfeCodes.add(rawValue);\n\treturn humanizeUnknownSfeCode(rawValue, normalizedSfeType);\n}\n\nexport function getDiscoveredUnmappedSfeCodes(): string[] {\n\treturn Array.from(discoveredUnmappedSfeCodes.values()).sort((left, right) => left.localeCompare(right));\n}\n\nfunction resolveFromRules(\n\tnormalizedValues: ReadonlyArray,\n\trules: ReadonlyArray,\n): DeviceType | null {\n\tfor (const rule of rules) {\n\t\tif (normalizedValues.some((value) => includesAny(value, rule.tokens))) {\n\t\t\treturn rule.deviceType;\n\t\t}\n\t}\n\n\treturn null;\n}\n\nfunction includesAny(value: string, tokens: ReadonlyArray): boolean {\n\treturn tokens.some((token) => value.includes(token));\n}\n\nfunction normalize(value: string | null | undefined): string {\n\treturn (value ?? '').trim().toUpperCase();\n}\n\nfunction humanizeUnknownSfeCode(rawValue: string, normalizedValue: string): string {\n\tif (!normalizedValue.startsWith('SFE_')) {\n\t\treturn rawValue;\n\t}\n\n\tconst cmdPattern = /^SFE_(?:Cmd|CMD)_(.+)$/;\n\tconst cmdMatch = cmdPattern.exec(rawValue);\n\tif (cmdMatch?.[1]) {\n\t\treturn `Comando ${humanizeSfeSuffix(cmdMatch[1])}`;\n\t}\n\n\tconst statePattern = /^SFE_(?:State|STATE)_(.+)$/;\n\tconst stateMatch = statePattern.exec(rawValue);\n\tif (stateMatch?.[1]) {\n\t\treturn `Stato ${humanizeSfeSuffix(stateMatch[1])}`;\n\t}\n\n\tif (/^SFE_(?:Sensor|SENSOR)$/.test(rawValue)) {\n\t\treturn 'Sensore';\n\t}\n\n\tif (/^SFE_(?:Status|STATUS)$/.test(rawValue)) {\n\t\treturn 'Stato';\n\t}\n\n\treturn rawValue;\n}\n\nfunction humanizeSfeSuffix(value: string): string {\n\treturn value\n\t\t.replaceAll('_', ' ')\n\t\t.replaceAll(/([a-z])([A-Z])/g, '$1 $2')\n\t\t.replaceAll(/\\s+/g, ' ')\n\t\t.trim()\n\t\t.toLowerCase();\n}"], + "mappings": "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", + "names": ["DeviceType", "PRIMARY_DEVICE_TYPE_RULES", "deviceType", "DeviceType", "THERMOSTAT", "tokens", "FALL_SENSOR", "PRESENCE_SENSOR", "ALARM_BUTTON", "ENTRANCE_DOOR", "BLIND", "LIGHT_DEVICE_TYPE_RULES", "LIGHT", "SFE_DEVICE_TYPE_RULES", "DEVICE_TYPE_LABELS", "UNKNOWN", "ENDPOINT_LABELS", "SFE_CMD_ONOFF", "SFE_CMD_BLIND", "SFE_CMD_CHANGEOVERMODE", "SFE_CMD_HVACMODE", "SFE_CMD_OFFBEHAVIOUR", "SFE_CMD_ONBEHAVIOUR", "SFE_CMD_TIMEDDYNAMICMODE", "SFE_CMD_DOWNKEY_ACTIVESCENE", "SFE_STATE_ONOFF", "SFE_STATE_TEMPERATURE", "SFE_STATE_PRESENCE", "SFE_STATE_MANDOWN", "SFE_STATE_FALL", "SFE_STATE_HVACMODE", "SFE_SENSOR", "SFE_STATUS", "SFE_UNKNOWN", "discoveredUnmappedSfeCodes", "Set", "resolveDeviceType", "input", "normalizedRawValues", "rawType", "rawSubType", "rawName", "map", "value", "normalize", "filter", "length", "primaryMatch", "resolveFromRules", "normalizedSfeTypes", "sfeTypes", "sfeMatch", "lightMatch", "getDeviceTypeLabel", "type", "getEndpointLabel", "sfeType", "rawValue", "trim", "normalizedSfeType", "knownLabel", "add", "humanizeUnknownSfeCode", "resolveFromRules", "normalizedValues", "rules", "rule", "some", "value", "includesAny", "tokens", "deviceType", "token", "includes", "normalize", "trim", "toUpperCase", "humanizeUnknownSfeCode", "rawValue", "normalizedValue", "startsWith", "cmdMatch", "exec", "humanizeSfeSuffix", "stateMatch", "test", "replaceAll", "toLowerCase"] +} diff --git a/frontend/dist-instrumented/chunk-HZRH6ESN.js b/frontend/dist-instrumented/chunk-HZRH6ESN.js new file mode 100644 index 00000000..0aa3c583 --- /dev/null +++ b/frontend/dist-instrumented/chunk-HZRH6ESN.js @@ -0,0 +1,3 @@ +function cov_251xhj61eh(){var path="/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-HZRH6ESN.js";var hash="b7c4a3731bb9b39590148e1f2cec75fcf3e5c936";var global=new Function("return this")();var gcv="__coverage__";var coverageData={path:"/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-HZRH6ESN.js",statementMap:{"0":{start:{line:1,column:46},end:{line:1,column:69}},"1":{start:{line:1,column:84},end:{line:1,column:118}},"2":{start:{line:1,column:106},end:{line:1,column:118}},"3":{start:{line:1,column:124},end:{line:1,column:132}},"4":{start:{line:1,column:133},end:{line:1,column:261}},"5":{start:{line:1,column:276},end:{line:1,column:357}}},fnMap:{"0":{name:"e",decl:{start:{line:1,column:79},end:{line:1,column:80}},loc:{start:{line:1,column:83},end:{line:1,column:262}},line:1},"1":{name:"u",decl:{start:{line:1,column:271},end:{line:1,column:272}},loc:{start:{line:1,column:275},end:{line:1,column:358}},line:1}},branchMap:{"0":{loc:{start:{line:1,column:84},end:{line:1,column:118}},type:"if",locations:[{start:{line:1,column:84},end:{line:1,column:118}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1":{loc:{start:{line:1,column:140},end:{line:1,column:261}},type:"cond-expr",locations:[{start:{line:1,column:159},end:{line:1,column:166}},{start:{line:1,column:167},end:{line:1,column:261}}],line:1},"2":{loc:{start:{line:1,column:167},end:{line:1,column:261}},type:"cond-expr",locations:[{start:{line:1,column:191},end:{line:1,column:198}},{start:{line:1,column:199},end:{line:1,column:261}}],line:1},"3":{loc:{start:{line:1,column:199},end:{line:1,column:261}},type:"cond-expr",locations:[{start:{line:1,column:218},end:{line:1,column:226}},{start:{line:1,column:227},end:{line:1,column:261}}],line:1},"4":{loc:{start:{line:1,column:227},end:{line:1,column:261}},type:"cond-expr",locations:[{start:{line:1,column:251},end:{line:1,column:256}},{start:{line:1,column:257},end:{line:1,column:261}}],line:1},"5":{loc:{start:{line:1,column:283},end:{line:1,column:357}},type:"cond-expr",locations:[{start:{line:1,column:302},end:{line:1,column:304}},{start:{line:1,column:305},end:{line:1,column:357}}],line:1}},s:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0},f:{"0":0,"1":0},b:{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0]},inputSourceMap:{version:3,sources:["src/app/core/notification/utils/notification-priority-display.util.ts"],sourcesContent:["import { AlarmPriority } from '../../alarm/models/alarm-priority.enum';\n\nconst PRIORITY_TITLE_PREFIX = /^[i\\u2022!\\u25b2]\\s+/u;\n\nexport function extractPriorityFromNotificationTitle(title: unknown): AlarmPriority | null {\n\tif (typeof title !== 'string') {\n\t\treturn null;\n\t}\n\n\tconst compactTitle = title.trim();\n\tif (compactTitle.startsWith('i ')) {\n\t\treturn AlarmPriority.WHITE;\n\t}\n\tif (compactTitle.startsWith('\\u2022 ')) {\n\t\treturn AlarmPriority.GREEN;\n\t}\n\tif (compactTitle.startsWith('! ')) {\n\t\treturn AlarmPriority.ORANGE;\n\t}\n\tif (compactTitle.startsWith('\\u25b2 ')) {\n\t\treturn AlarmPriority.RED;\n\t}\n\n\treturn null;\n}\n\nexport function stripPriorityFromNotificationTitle(title: unknown): string {\n\tif (typeof title !== 'string') {\n\t\treturn '';\n\t}\n\n\tconst compactTitle = title.replaceAll(/\\s+/g, ' ').trim();\n\treturn compactTitle.replace(PRIORITY_TITLE_PREFIX, '').trim();\n}\n"],mappings:"wCAEA,IAAMA,EAAwB,wBAExB,SAAUC,EAAqCC,EAAc,CAClE,GAAI,OAAOA,GAAU,SACpB,OAAO,KAGR,IAAMC,EAAeD,EAAME,KAAI,EAC/B,OAAID,EAAaE,WAAW,IAAI,EACxBC,EAAcC,MAElBJ,EAAaE,WAAW,SAAS,EAC7BC,EAAcE,MAElBL,EAAaE,WAAW,IAAI,EACxBC,EAAcG,OAElBN,EAAaE,WAAW,SAAS,EAC7BC,EAAcI,IAGf,IACR,CAEM,SAAUC,EAAmCT,EAAc,CAChE,OAAI,OAAOA,GAAU,SACb,GAGaA,EAAMU,WAAW,OAAQ,GAAG,EAAER,KAAI,EACnCS,QAAQb,EAAuB,EAAE,EAAEI,KAAI,CAC5D",names:["PRIORITY_TITLE_PREFIX","extractPriorityFromNotificationTitle","title","compactTitle","trim","startsWith","AlarmPriority","WHITE","GREEN","ORANGE","RED","stripPriorityFromNotificationTitle","replaceAll","replace"]},_coverageSchema:"1a1c01bbd47fc00a2c39e90264f33305004495a9",hash:"b7c4a3731bb9b39590148e1f2cec75fcf3e5c936"};var coverage=global[gcv]||(global[gcv]={});if(!coverage[path]||coverage[path].hash!==hash){coverage[path]=coverageData;}var actualCoverage=coverage[path];{// @ts-ignore +cov_251xhj61eh=function(){return actualCoverage;};}return actualCoverage;}cov_251xhj61eh();import{a as i}from"./chunk-ZZLQRDHJ.js";var o=(cov_251xhj61eh().s[0]++,/^[i\u2022!\u25b2]\s+/u);function e(t){cov_251xhj61eh().f[0]++;cov_251xhj61eh().s[1]++;if(typeof t!="string"){cov_251xhj61eh().b[0][0]++;cov_251xhj61eh().s[2]++;return null;}else{cov_251xhj61eh().b[0][1]++;}let r=(cov_251xhj61eh().s[3]++,t.trim());cov_251xhj61eh().s[4]++;return r.startsWith("i ")?(cov_251xhj61eh().b[1][0]++,i.WHITE):(cov_251xhj61eh().b[1][1]++,r.startsWith("\u2022 ")?(cov_251xhj61eh().b[2][0]++,i.GREEN):(cov_251xhj61eh().b[2][1]++,r.startsWith("! ")?(cov_251xhj61eh().b[3][0]++,i.ORANGE):(cov_251xhj61eh().b[3][1]++,r.startsWith("\u25B2 ")?(cov_251xhj61eh().b[4][0]++,i.RED):(cov_251xhj61eh().b[4][1]++,null))));}function u(t){cov_251xhj61eh().f[1]++;cov_251xhj61eh().s[5]++;return typeof t!="string"?(cov_251xhj61eh().b[5][0]++,""):(cov_251xhj61eh().b[5][1]++,t.replaceAll(/\s+/g," ").trim().replace(o,"").trim());}export{e as a,u as b};//# sourceMappingURL=chunk-HZRH6ESN.js.map +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJvIiwiY292XzI1MXhoajYxZWgiLCJzIiwiZSIsInQiLCJmIiwiYiIsInIiLCJ0cmltIiwic3RhcnRzV2l0aCIsImkiLCJXSElURSIsIkdSRUVOIiwiT1JBTkdFIiwiUkVEIiwidSIsInJlcGxhY2VBbGwiLCJyZXBsYWNlIiwiYSJdLCJzb3VyY2VzIjpbInNyYy9hcHAvY29yZS9ub3RpZmljYXRpb24vdXRpbHMvbm90aWZpY2F0aW9uLXByaW9yaXR5LWRpc3BsYXkudXRpbC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBbGFybVByaW9yaXR5IH0gZnJvbSAnLi4vLi4vYWxhcm0vbW9kZWxzL2FsYXJtLXByaW9yaXR5LmVudW0nO1xuXG5jb25zdCBQUklPUklUWV9USVRMRV9QUkVGSVggPSAvXltpXFx1MjAyMiFcXHUyNWIyXVxccysvdTtcblxuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RQcmlvcml0eUZyb21Ob3RpZmljYXRpb25UaXRsZSh0aXRsZTogdW5rbm93bik6IEFsYXJtUHJpb3JpdHkgfCBudWxsIHtcblx0aWYgKHR5cGVvZiB0aXRsZSAhPT0gJ3N0cmluZycpIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdGNvbnN0IGNvbXBhY3RUaXRsZSA9IHRpdGxlLnRyaW0oKTtcblx0aWYgKGNvbXBhY3RUaXRsZS5zdGFydHNXaXRoKCdpICcpKSB7XG5cdFx0cmV0dXJuIEFsYXJtUHJpb3JpdHkuV0hJVEU7XG5cdH1cblx0aWYgKGNvbXBhY3RUaXRsZS5zdGFydHNXaXRoKCdcXHUyMDIyICcpKSB7XG5cdFx0cmV0dXJuIEFsYXJtUHJpb3JpdHkuR1JFRU47XG5cdH1cblx0aWYgKGNvbXBhY3RUaXRsZS5zdGFydHNXaXRoKCchICcpKSB7XG5cdFx0cmV0dXJuIEFsYXJtUHJpb3JpdHkuT1JBTkdFO1xuXHR9XG5cdGlmIChjb21wYWN0VGl0bGUuc3RhcnRzV2l0aCgnXFx1MjViMiAnKSkge1xuXHRcdHJldHVybiBBbGFybVByaW9yaXR5LlJFRDtcblx0fVxuXG5cdHJldHVybiBudWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RyaXBQcmlvcml0eUZyb21Ob3RpZmljYXRpb25UaXRsZSh0aXRsZTogdW5rbm93bik6IHN0cmluZyB7XG5cdGlmICh0eXBlb2YgdGl0bGUgIT09ICdzdHJpbmcnKSB7XG5cdFx0cmV0dXJuICcnO1xuXHR9XG5cblx0Y29uc3QgY29tcGFjdFRpdGxlID0gdGl0bGUucmVwbGFjZUFsbCgvXFxzKy9nLCAnICcpLnRyaW0oKTtcblx0cmV0dXJuIGNvbXBhY3RUaXRsZS5yZXBsYWNlKFBSSU9SSVRZX1RJVExFX1BSRUZJWCwgJycpLnRyaW0oKTtcbn1cbiJdLCJtYXBwaW5ncyI6IjttSUFFQSxHQUFNLENBQUFBLENBQUEsRUFBQUMsY0FBQSxHQUFBQyxDQUFBLE1BQXdCLHlCQUV4QixRQUFVLENBQUFDLEVBQXFDQyxDQUFBLENBQWMsQ0FBQUgsY0FBQSxHQUFBSSxDQUFBLEtBQUFKLENBQUEsaUJBQUFDLENBQUEsTUFDbEUsR0FBSSxNQUFPLENBQUFFLENBQUEsRUFBVSxTQUNwQixDQUFBSCxjQUFBLEdBQUFLLENBQUEsUUFBQUwsQ0FBQSxpQkFBQUMsQ0FBQSxZQUFPLE9BR1IsS0FBQUQsY0FBQSxHQUFBSyxDQUFBLGFBQU0sQ0FBQUMsQ0FBQSxFQUFBTixjQUFBLEdBQUFDLENBQUEsTUFBZUUsQ0FBQSxDQUFNSSxJQUFBLENBQUksR0FDL0JQLGNBQUEsR0FBQUMsQ0FBQSxZQUFJLENBQUFLLENBQUEsQ0FBYUUsVUFBQSxDQUFXLElBQUksR0FBQVIsY0FBQSxHQUFBSyxDQUFBLFNBQ3hCSSxDQUFBLENBQWNDLEtBQUEsR0FBQVYsY0FBQSxHQUFBSyxDQUFBLFNBRWxCQyxDQUFBLENBQWFFLFVBQUEsQ0FBVyxTQUFTLEdBQUFSLGNBQUEsR0FBQUssQ0FBQSxTQUM3QkksQ0FBQSxDQUFjRSxLQUFBLEdBQUFYLGNBQUEsR0FBQUssQ0FBQSxTQUVsQkMsQ0FBQSxDQUFhRSxVQUFBLENBQVcsSUFBSSxHQUFBUixjQUFBLEdBQUFLLENBQUEsU0FDeEJJLENBQUEsQ0FBY0csTUFBQSxHQUFBWixjQUFBLEdBQUFLLENBQUEsU0FFbEJDLENBQUEsQ0FBYUUsVUFBQSxDQUFXLFNBQVMsR0FBQVIsY0FBQSxHQUFBSyxDQUFBLFNBQzdCSSxDQUFBLENBQWNJLEdBQUEsR0FBQWIsY0FBQSxHQUFBSyxDQUFBLFNBR2YsSUFDUixNQUVNLFFBQVUsQ0FBQVMsRUFBbUNYLENBQUEsQ0FBYyxDQUFBSCxjQUFBLEdBQUFJLENBQUEsS0FBQUosQ0FBQSxpQkFBQUMsQ0FBQSxNQUNoRSxNQUFJLE9BQU8sQ0FBQUUsQ0FBQSxFQUFVLFVBQUFILGNBQUEsR0FBQUssQ0FBQSxTQUNiLEtBQUFMLGNBQUEsR0FBQUssQ0FBQSxTQUdhRixDQUFBLENBQU1ZLFVBQUEsQ0FBVyxPQUFRLEdBQUcsRUFBRVIsSUFBQSxDQUFJLEVBQ25DUyxPQUFBLENBQVFqQixDQUFBLENBQXVCLEVBQUUsRUFBRVEsSUFBQSxDQUFJLENBQzVELFVBQUFMLENBQUEsSUFBQWUsQ0FBQSxDQUFBSCxDQUFBLElBQUFULENBQUEsRSIsImlnbm9yZUxpc3QiOltdfQ== \ No newline at end of file diff --git a/frontend/dist-instrumented/chunk-HZRH6ESN.js.map b/frontend/dist-instrumented/chunk-HZRH6ESN.js.map new file mode 100644 index 00000000..e1e04f2f --- /dev/null +++ b/frontend/dist-instrumented/chunk-HZRH6ESN.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["src/app/core/notification/utils/notification-priority-display.util.ts"], + "sourcesContent": ["import { AlarmPriority } from '../../alarm/models/alarm-priority.enum';\n\nconst PRIORITY_TITLE_PREFIX = /^[i\\u2022!\\u25b2]\\s+/u;\n\nexport function extractPriorityFromNotificationTitle(title: unknown): AlarmPriority | null {\n\tif (typeof title !== 'string') {\n\t\treturn null;\n\t}\n\n\tconst compactTitle = title.trim();\n\tif (compactTitle.startsWith('i ')) {\n\t\treturn AlarmPriority.WHITE;\n\t}\n\tif (compactTitle.startsWith('\\u2022 ')) {\n\t\treturn AlarmPriority.GREEN;\n\t}\n\tif (compactTitle.startsWith('! ')) {\n\t\treturn AlarmPriority.ORANGE;\n\t}\n\tif (compactTitle.startsWith('\\u25b2 ')) {\n\t\treturn AlarmPriority.RED;\n\t}\n\n\treturn null;\n}\n\nexport function stripPriorityFromNotificationTitle(title: unknown): string {\n\tif (typeof title !== 'string') {\n\t\treturn '';\n\t}\n\n\tconst compactTitle = title.replaceAll(/\\s+/g, ' ').trim();\n\treturn compactTitle.replace(PRIORITY_TITLE_PREFIX, '').trim();\n}\n"], + "mappings": "wCAEA,IAAMA,EAAwB,wBAExB,SAAUC,EAAqCC,EAAc,CAClE,GAAI,OAAOA,GAAU,SACpB,OAAO,KAGR,IAAMC,EAAeD,EAAME,KAAI,EAC/B,OAAID,EAAaE,WAAW,IAAI,EACxBC,EAAcC,MAElBJ,EAAaE,WAAW,SAAS,EAC7BC,EAAcE,MAElBL,EAAaE,WAAW,IAAI,EACxBC,EAAcG,OAElBN,EAAaE,WAAW,SAAS,EAC7BC,EAAcI,IAGf,IACR,CAEM,SAAUC,EAAmCT,EAAc,CAChE,OAAI,OAAOA,GAAU,SACb,GAGaA,EAAMU,WAAW,OAAQ,GAAG,EAAER,KAAI,EACnCS,QAAQb,EAAuB,EAAE,EAAEI,KAAI,CAC5D", + "names": ["PRIORITY_TITLE_PREFIX", "extractPriorityFromNotificationTitle", "title", "compactTitle", "trim", "startsWith", "AlarmPriority", "WHITE", "GREEN", "ORANGE", "RED", "stripPriorityFromNotificationTitle", "replaceAll", "replace"] +} diff --git a/frontend/dist-instrumented/chunk-IGULPMRL.js b/frontend/dist-instrumented/chunk-IGULPMRL.js new file mode 100644 index 00000000..8980ff3f --- /dev/null +++ b/frontend/dist-instrumented/chunk-IGULPMRL.js @@ -0,0 +1,3 @@ +function cov_2kwxdoldet(){var path="/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-IGULPMRL.js";var hash="fa9e6848a9008c362b0a0fcf8ad6a5116ae2e577";var global=new Function("return this")();var gcv="__coverage__";var coverageData={path:"/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-IGULPMRL.js",statementMap:{"0":{start:{line:1,column:505},end:{line:1,column:541}},"1":{start:{line:1,column:513},end:{line:1,column:540}},"2":{start:{line:1,column:559},end:{line:1,column:669}},"3":{start:{line:1,column:647},end:{line:1,column:658}},"4":{start:{line:1,column:659},end:{line:1,column:668}},"5":{start:{line:1,column:687},end:{line:1,column:861}},"6":{start:{line:1,column:816},end:{line:1,column:819}},"7":{start:{line:1,column:820},end:{line:1,column:860}},"8":{start:{line:1,column:868},end:{line:1,column:2750}},"9":{start:{line:1,column:902},end:{line:1,column:907}},"10":{start:{line:1,column:920},end:{line:1,column:969}},"11":{start:{line:1,column:987},end:{line:1,column:1048}},"12":{start:{line:1,column:999},end:{line:1,column:1044}},"13":{start:{line:1,column:1018},end:{line:1,column:1043}},"14":{start:{line:1,column:1066},end:{line:1,column:2737}},"15":{start:{line:1,column:2224},end:{line:1,column:2695}},"16":{start:{line:1,column:2738},end:{line:1,column:2746}},"17":{start:{line:1,column:2758},end:{line:1,column:2794}},"18":{start:{line:1,column:2766},end:{line:1,column:2793}},"19":{start:{line:1,column:2812},end:{line:1,column:2922}},"20":{start:{line:1,column:2900},end:{line:1,column:2911}},"21":{start:{line:1,column:2912},end:{line:1,column:2921}},"22":{start:{line:1,column:2940},end:{line:1,column:3114}},"23":{start:{line:1,column:3069},end:{line:1,column:3072}},"24":{start:{line:1,column:3073},end:{line:1,column:3113}},"25":{start:{line:1,column:3121},end:{line:1,column:4993}},"26":{start:{line:1,column:3155},end:{line:1,column:3160}},"27":{start:{line:1,column:3173},end:{line:1,column:3213}},"28":{start:{line:1,column:3231},end:{line:1,column:3292}},"29":{start:{line:1,column:3243},end:{line:1,column:3288}},"30":{start:{line:1,column:3262},end:{line:1,column:3287}},"31":{start:{line:1,column:3310},end:{line:1,column:4980}},"32":{start:{line:1,column:4467},end:{line:1,column:4938}},"33":{start:{line:1,column:4981},end:{line:1,column:4989}},"34":{start:{line:1,column:5001},end:{line:1,column:5037}},"35":{start:{line:1,column:5009},end:{line:1,column:5036}},"36":{start:{line:1,column:5055},end:{line:1,column:5165}},"37":{start:{line:1,column:5143},end:{line:1,column:5154}},"38":{start:{line:1,column:5155},end:{line:1,column:5164}},"39":{start:{line:1,column:5183},end:{line:1,column:5357}},"40":{start:{line:1,column:5312},end:{line:1,column:5315}},"41":{start:{line:1,column:5316},end:{line:1,column:5356}},"42":{start:{line:1,column:5364},end:{line:1,column:7252}},"43":{start:{line:1,column:5398},end:{line:1,column:5403}},"44":{start:{line:1,column:5416},end:{line:1,column:5471}},"45":{start:{line:1,column:5489},end:{line:1,column:5550}},"46":{start:{line:1,column:5501},end:{line:1,column:5546}},"47":{start:{line:1,column:5520},end:{line:1,column:5545}},"48":{start:{line:1,column:5568},end:{line:1,column:7239}},"49":{start:{line:1,column:6726},end:{line:1,column:7197}},"50":{start:{line:1,column:7240},end:{line:1,column:7248}},"51":{start:{line:1,column:7260},end:{line:1,column:7296}},"52":{start:{line:1,column:7268},end:{line:1,column:7295}},"53":{start:{line:1,column:7314},end:{line:1,column:7424}},"54":{start:{line:1,column:7402},end:{line:1,column:7413}},"55":{start:{line:1,column:7414},end:{line:1,column:7423}},"56":{start:{line:1,column:7442},end:{line:1,column:7616}},"57":{start:{line:1,column:7571},end:{line:1,column:7574}},"58":{start:{line:1,column:7575},end:{line:1,column:7615}},"59":{start:{line:1,column:7623},end:{line:1,column:9516}},"60":{start:{line:1,column:7657},end:{line:1,column:7662}},"61":{start:{line:1,column:7675},end:{line:1,column:7732}},"62":{start:{line:1,column:7750},end:{line:1,column:7811}},"63":{start:{line:1,column:7762},end:{line:1,column:7807}},"64":{start:{line:1,column:7781},end:{line:1,column:7806}},"65":{start:{line:1,column:7829},end:{line:1,column:9503}},"66":{start:{line:1,column:8990},end:{line:1,column:9461}},"67":{start:{line:1,column:9504},end:{line:1,column:9512}},"68":{start:{line:1,column:9524},end:{line:1,column:9560}},"69":{start:{line:1,column:9532},end:{line:1,column:9559}},"70":{start:{line:1,column:9578},end:{line:1,column:9688}},"71":{start:{line:1,column:9666},end:{line:1,column:9677}},"72":{start:{line:1,column:9678},end:{line:1,column:9687}},"73":{start:{line:1,column:9706},end:{line:1,column:9880}},"74":{start:{line:1,column:9835},end:{line:1,column:9838}},"75":{start:{line:1,column:9839},end:{line:1,column:9879}},"76":{start:{line:1,column:9887},end:{line:1,column:11796}},"77":{start:{line:1,column:9921},end:{line:1,column:9926}},"78":{start:{line:1,column:9939},end:{line:1,column:10012}},"79":{start:{line:1,column:10030},end:{line:1,column:10091}},"80":{start:{line:1,column:10042},end:{line:1,column:10087}},"81":{start:{line:1,column:10061},end:{line:1,column:10086}},"82":{start:{line:1,column:10109},end:{line:1,column:11783}},"83":{start:{line:1,column:11270},end:{line:1,column:11741}},"84":{start:{line:1,column:11784},end:{line:1,column:11792}},"85":{start:{line:1,column:11804},end:{line:1,column:11840}},"86":{start:{line:1,column:11812},end:{line:1,column:11839}},"87":{start:{line:1,column:11858},end:{line:1,column:11968}},"88":{start:{line:1,column:11946},end:{line:1,column:11957}},"89":{start:{line:1,column:11958},end:{line:1,column:11967}},"90":{start:{line:1,column:11986},end:{line:1,column:12160}},"91":{start:{line:1,column:12115},end:{line:1,column:12118}},"92":{start:{line:1,column:12119},end:{line:1,column:12159}},"93":{start:{line:1,column:12168},end:{line:1,column:14152}},"94":{start:{line:1,column:12202},end:{line:1,column:12208}},"95":{start:{line:1,column:12221},end:{line:1,column:12294}},"96":{start:{line:1,column:12307},end:{line:1,column:12364}},"97":{start:{line:1,column:12382},end:{line:1,column:12443}},"98":{start:{line:1,column:12394},end:{line:1,column:12439}},"99":{start:{line:1,column:12413},end:{line:1,column:12438}},"100":{start:{line:1,column:12461},end:{line:1,column:14139}},"101":{start:{line:1,column:13626},end:{line:1,column:14097}},"102":{start:{line:1,column:14140},end:{line:1,column:14148}},"103":{start:{line:1,column:14170},end:{line:1,column:14278}},"104":{start:{line:1,column:14217},end:{line:1,column:14228}},"105":{start:{line:1,column:14229},end:{line:1,column:14277}},"106":{start:{line:1,column:14296},end:{line:1,column:14577}},"107":{start:{line:1,column:14310},end:{line:1,column:14313}},"108":{start:{line:1,column:14314},end:{line:1,column:14576}},"109":{start:{line:1,column:14429},end:{line:1,column:14434}},"110":{start:{line:1,column:14440},end:{line:1,column:14443}},"111":{start:{line:1,column:14444},end:{line:1,column:14476}},"112":{start:{line:1,column:14577},end:{line:1,column:14660}},"113":{start:{line:1,column:14591},end:{line:1,column:14597}},"114":{start:{line:1,column:14600},end:{line:1,column:14603}},"115":{start:{line:1,column:14604},end:{line:1,column:14659}},"116":{start:{line:1,column:14678},end:{line:1,column:14782}},"117":{start:{line:1,column:14736},end:{line:1,column:14742}},"118":{start:{line:1,column:14743},end:{line:1,column:14781}},"119":{start:{line:1,column:14800},end:{line:1,column:14908}},"120":{start:{line:1,column:14862},end:{line:1,column:14868}},"121":{start:{line:1,column:14869},end:{line:1,column:14907}},"122":{start:{line:1,column:14926},end:{line:1,column:15027}},"123":{start:{line:1,column:14981},end:{line:1,column:14987}},"124":{start:{line:1,column:14988},end:{line:1,column:15026}},"125":{start:{line:1,column:15045},end:{line:1,column:15151}},"126":{start:{line:1,column:15105},end:{line:1,column:15111}},"127":{start:{line:1,column:15112},end:{line:1,column:15150}},"128":{start:{line:1,column:15169},end:{line:1,column:15269}},"129":{start:{line:1,column:15223},end:{line:1,column:15229}},"130":{start:{line:1,column:15230},end:{line:1,column:15268}},"131":{start:{line:1,column:15287},end:{line:1,column:15388}},"132":{start:{line:1,column:15342},end:{line:1,column:15348}},"133":{start:{line:1,column:15349},end:{line:1,column:15387}},"134":{start:{line:1,column:15406},end:{line:1,column:15510}},"135":{start:{line:1,column:15464},end:{line:1,column:15470}},"136":{start:{line:1,column:15471},end:{line:1,column:15509}},"137":{start:{line:1,column:15528},end:{line:1,column:15632}},"138":{start:{line:1,column:15586},end:{line:1,column:15592}},"139":{start:{line:1,column:15593},end:{line:1,column:15631}},"140":{start:{line:1,column:15650},end:{line:1,column:16503}},"141":{start:{line:1,column:16039},end:{line:1,column:16045}},"142":{start:{line:1,column:16048},end:{line:1,column:16051}},"143":{start:{line:1,column:16052},end:{line:1,column:16502}},"144":{start:{line:1,column:16521},end:{line:1,column:16579}},"145":{start:{line:1,column:16587},end:{line:1,column:19864}},"146":{start:{line:1,column:16617},end:{line:1,column:16626}},"147":{start:{line:1,column:16647},end:{line:1,column:16651}},"148":{start:{line:1,column:16665},end:{line:1,column:16676}},"149":{start:{line:1,column:16698},end:{line:1,column:16709}},"150":{start:{line:1,column:16722},end:{line:1,column:16726}},"151":{start:{line:1,column:16737},end:{line:1,column:16741}},"152":{start:{line:1,column:16753},end:{line:1,column:17076}},"153":{start:{line:1,column:16845},end:{line:1,column:16946}},"154":{start:{line:1,column:16992},end:{line:1,column:17000}},"155":{start:{line:1,column:17007},end:{line:1,column:17074}},"156":{start:{line:1,column:17099},end:{line:1,column:17145}},"157":{start:{line:1,column:17132},end:{line:1,column:17144}},"158":{start:{line:1,column:17173},end:{line:1,column:17187}},"159":{start:{line:1,column:17188},end:{line:1,column:17263}},"160":{start:{line:1,column:17282},end:{line:1,column:17313}},"161":{start:{line:1,column:17314},end:{line:1,column:17358}},"162":{start:{line:1,column:17376},end:{line:1,column:17405}},"163":{start:{line:1,column:17388},end:{line:1,column:17404}},"164":{start:{line:1,column:17423},end:{line:1,column:19851}},"165":{start:{line:1,column:19226},end:{line:1,column:19792}},"166":{start:{line:1,column:19492},end:{line:1,column:19512}},"167":{start:{line:1,column:19690},end:{line:1,column:19695}},"168":{start:{line:1,column:19696},end:{line:1,column:19791}},"169":{start:{line:1,column:19852},end:{line:1,column:19860}}},fnMap:{"0":{name:"(anonymous_0)",decl:{start:{line:1,column:505},end:{line:1,column:506}},loc:{start:{line:1,column:513},end:{line:1,column:540}},line:1},"1":{name:"ne",decl:{start:{line:1,column:551},end:{line:1,column:553}},loc:{start:{line:1,column:558},end:{line:1,column:670}},line:1},"2":{name:"ie",decl:{start:{line:1,column:679},end:{line:1,column:681}},loc:{start:{line:1,column:686},end:{line:1,column:862}},line:1},"3":{name:"(anonymous_3)",decl:{start:{line:1,column:869},end:{line:1,column:870}},loc:{start:{line:1,column:873},end:{line:1,column:2747}},line:1},"4":{name:"(anonymous_4)",decl:{start:{line:1,column:988},end:{line:1,column:989}},loc:{start:{line:1,column:992},end:{line:1,column:1045}},line:1},"5":{name:"(anonymous_5)",decl:{start:{line:1,column:1006},end:{line:1,column:1007}},loc:{start:{line:1,column:1017},end:{line:1,column:1044}},line:1},"6":{name:"(anonymous_6)",decl:{start:{line:1,column:2210},end:{line:1,column:2211}},loc:{start:{line:1,column:2223},end:{line:1,column:2696}},line:1},"7":{name:"(anonymous_7)",decl:{start:{line:1,column:2758},end:{line:1,column:2759}},loc:{start:{line:1,column:2766},end:{line:1,column:2793}},line:1},"8":{name:"ae",decl:{start:{line:1,column:2804},end:{line:1,column:2806}},loc:{start:{line:1,column:2811},end:{line:1,column:2923}},line:1},"9":{name:"oe",decl:{start:{line:1,column:2932},end:{line:1,column:2934}},loc:{start:{line:1,column:2939},end:{line:1,column:3115}},line:1},"10":{name:"(anonymous_10)",decl:{start:{line:1,column:3122},end:{line:1,column:3123}},loc:{start:{line:1,column:3126},end:{line:1,column:4990}},line:1},"11":{name:"(anonymous_11)",decl:{start:{line:1,column:3232},end:{line:1,column:3233}},loc:{start:{line:1,column:3236},end:{line:1,column:3289}},line:1},"12":{name:"(anonymous_12)",decl:{start:{line:1,column:3250},end:{line:1,column:3251}},loc:{start:{line:1,column:3261},end:{line:1,column:3288}},line:1},"13":{name:"(anonymous_13)",decl:{start:{line:1,column:4453},end:{line:1,column:4454}},loc:{start:{line:1,column:4466},end:{line:1,column:4939}},line:1},"14":{name:"(anonymous_14)",decl:{start:{line:1,column:5001},end:{line:1,column:5002}},loc:{start:{line:1,column:5009},end:{line:1,column:5036}},line:1},"15":{name:"le",decl:{start:{line:1,column:5047},end:{line:1,column:5049}},loc:{start:{line:1,column:5054},end:{line:1,column:5166}},line:1},"16":{name:"pe",decl:{start:{line:1,column:5175},end:{line:1,column:5177}},loc:{start:{line:1,column:5182},end:{line:1,column:5358}},line:1},"17":{name:"(anonymous_17)",decl:{start:{line:1,column:5365},end:{line:1,column:5366}},loc:{start:{line:1,column:5369},end:{line:1,column:7249}},line:1},"18":{name:"(anonymous_18)",decl:{start:{line:1,column:5490},end:{line:1,column:5491}},loc:{start:{line:1,column:5494},end:{line:1,column:5547}},line:1},"19":{name:"(anonymous_19)",decl:{start:{line:1,column:5508},end:{line:1,column:5509}},loc:{start:{line:1,column:5519},end:{line:1,column:5546}},line:1},"20":{name:"(anonymous_20)",decl:{start:{line:1,column:6712},end:{line:1,column:6713}},loc:{start:{line:1,column:6725},end:{line:1,column:7198}},line:1},"21":{name:"(anonymous_21)",decl:{start:{line:1,column:7260},end:{line:1,column:7261}},loc:{start:{line:1,column:7268},end:{line:1,column:7295}},line:1},"22":{name:"ce",decl:{start:{line:1,column:7306},end:{line:1,column:7308}},loc:{start:{line:1,column:7313},end:{line:1,column:7425}},line:1},"23":{name:"me",decl:{start:{line:1,column:7434},end:{line:1,column:7436}},loc:{start:{line:1,column:7441},end:{line:1,column:7617}},line:1},"24":{name:"(anonymous_24)",decl:{start:{line:1,column:7624},end:{line:1,column:7625}},loc:{start:{line:1,column:7628},end:{line:1,column:9513}},line:1},"25":{name:"(anonymous_25)",decl:{start:{line:1,column:7751},end:{line:1,column:7752}},loc:{start:{line:1,column:7755},end:{line:1,column:7808}},line:1},"26":{name:"(anonymous_26)",decl:{start:{line:1,column:7769},end:{line:1,column:7770}},loc:{start:{line:1,column:7780},end:{line:1,column:7807}},line:1},"27":{name:"(anonymous_27)",decl:{start:{line:1,column:8976},end:{line:1,column:8977}},loc:{start:{line:1,column:8989},end:{line:1,column:9462}},line:1},"28":{name:"(anonymous_28)",decl:{start:{line:1,column:9524},end:{line:1,column:9525}},loc:{start:{line:1,column:9532},end:{line:1,column:9559}},line:1},"29":{name:"fe",decl:{start:{line:1,column:9570},end:{line:1,column:9572}},loc:{start:{line:1,column:9577},end:{line:1,column:9689}},line:1},"30":{name:"ue",decl:{start:{line:1,column:9698},end:{line:1,column:9700}},loc:{start:{line:1,column:9705},end:{line:1,column:9881}},line:1},"31":{name:"(anonymous_31)",decl:{start:{line:1,column:9888},end:{line:1,column:9889}},loc:{start:{line:1,column:9892},end:{line:1,column:11793}},line:1},"32":{name:"(anonymous_32)",decl:{start:{line:1,column:10031},end:{line:1,column:10032}},loc:{start:{line:1,column:10035},end:{line:1,column:10088}},line:1},"33":{name:"(anonymous_33)",decl:{start:{line:1,column:10049},end:{line:1,column:10050}},loc:{start:{line:1,column:10060},end:{line:1,column:10087}},line:1},"34":{name:"(anonymous_34)",decl:{start:{line:1,column:11256},end:{line:1,column:11257}},loc:{start:{line:1,column:11269},end:{line:1,column:11742}},line:1},"35":{name:"(anonymous_35)",decl:{start:{line:1,column:11804},end:{line:1,column:11805}},loc:{start:{line:1,column:11812},end:{line:1,column:11839}},line:1},"36":{name:"be",decl:{start:{line:1,column:11850},end:{line:1,column:11852}},loc:{start:{line:1,column:11857},end:{line:1,column:11969}},line:1},"37":{name:"ve",decl:{start:{line:1,column:11978},end:{line:1,column:11980}},loc:{start:{line:1,column:11985},end:{line:1,column:12161}},line:1},"38":{name:"(anonymous_38)",decl:{start:{line:1,column:12169},end:{line:1,column:12170}},loc:{start:{line:1,column:12173},end:{line:1,column:14149}},line:1},"39":{name:"(anonymous_39)",decl:{start:{line:1,column:12383},end:{line:1,column:12384}},loc:{start:{line:1,column:12387},end:{line:1,column:12440}},line:1},"40":{name:"(anonymous_40)",decl:{start:{line:1,column:12401},end:{line:1,column:12402}},loc:{start:{line:1,column:12412},end:{line:1,column:12439}},line:1},"41":{name:"(anonymous_41)",decl:{start:{line:1,column:13612},end:{line:1,column:13613}},loc:{start:{line:1,column:13625},end:{line:1,column:14098}},line:1},"42":{name:"ye",decl:{start:{line:1,column:14162},end:{line:1,column:14164}},loc:{start:{line:1,column:14169},end:{line:1,column:14279}},line:1},"43":{name:"Ce",decl:{start:{line:1,column:14288},end:{line:1,column:14290}},loc:{start:{line:1,column:14295},end:{line:1,column:14661}},line:1},"44":{name:"(anonymous_44)",decl:{start:{line:1,column:14417},end:{line:1,column:14418}},loc:{start:{line:1,column:14428},end:{line:1,column:14477}},line:1},"45":{name:"_e",decl:{start:{line:1,column:14670},end:{line:1,column:14672}},loc:{start:{line:1,column:14677},end:{line:1,column:14783}},line:1},"46":{name:"we",decl:{start:{line:1,column:14792},end:{line:1,column:14794}},loc:{start:{line:1,column:14799},end:{line:1,column:14909}},line:1},"47":{name:"xe",decl:{start:{line:1,column:14918},end:{line:1,column:14920}},loc:{start:{line:1,column:14925},end:{line:1,column:15028}},line:1},"48":{name:"Ie",decl:{start:{line:1,column:15037},end:{line:1,column:15039}},loc:{start:{line:1,column:15044},end:{line:1,column:15152}},line:1},"49":{name:"Se",decl:{start:{line:1,column:15161},end:{line:1,column:15163}},loc:{start:{line:1,column:15168},end:{line:1,column:15270}},line:1},"50":{name:"Ee",decl:{start:{line:1,column:15279},end:{line:1,column:15281}},loc:{start:{line:1,column:15286},end:{line:1,column:15389}},line:1},"51":{name:"Te",decl:{start:{line:1,column:15398},end:{line:1,column:15400}},loc:{start:{line:1,column:15405},end:{line:1,column:15511}},line:1},"52":{name:"Fe",decl:{start:{line:1,column:15520},end:{line:1,column:15522}},loc:{start:{line:1,column:15527},end:{line:1,column:15633}},line:1},"53":{name:"ke",decl:{start:{line:1,column:15642},end:{line:1,column:15644}},loc:{start:{line:1,column:15649},end:{line:1,column:16504}},line:1},"54":{name:"Ae",decl:{start:{line:1,column:16513},end:{line:1,column:16515}},loc:{start:{line:1,column:16520},end:{line:1,column:16580}},line:1},"55":{name:"(anonymous_55)",decl:{start:{line:1,column:16588},end:{line:1,column:16589}},loc:{start:{line:1,column:16592},end:{line:1,column:19861}},line:1},"56":{name:"(anonymous_56)",decl:{start:{line:1,column:16742},end:{line:1,column:16743}},loc:{start:{line:1,column:16752},end:{line:1,column:17077}},line:1},"57":{name:"(anonymous_57)",decl:{start:{line:1,column:16841},end:{line:1,column:16842}},loc:{start:{line:1,column:16844},end:{line:1,column:16947}},line:1},"58":{name:"(anonymous_58)",decl:{start:{line:1,column:16989},end:{line:1,column:16990}},loc:{start:{line:1,column:16992},end:{line:1,column:17000}},line:1},"59":{name:"(anonymous_59)",decl:{start:{line:1,column:17004},end:{line:1,column:17005}},loc:{start:{line:1,column:17007},end:{line:1,column:17074}},line:1},"60":{name:"(anonymous_60)",decl:{start:{line:1,column:17077},end:{line:1,column:17078}},loc:{start:{line:1,column:17098},end:{line:1,column:17146}},line:1},"61":{name:"(anonymous_61)",decl:{start:{line:1,column:17129},end:{line:1,column:17130}},loc:{start:{line:1,column:17132},end:{line:1,column:17144}},line:1},"62":{name:"(anonymous_62)",decl:{start:{line:1,column:17146},end:{line:1,column:17147}},loc:{start:{line:1,column:17166},end:{line:1,column:17264}},line:1},"63":{name:"(anonymous_63)",decl:{start:{line:1,column:17264},end:{line:1,column:17265}},loc:{start:{line:1,column:17275},end:{line:1,column:17359}},line:1},"64":{name:"(anonymous_64)",decl:{start:{line:1,column:17376},end:{line:1,column:17377}},loc:{start:{line:1,column:17387},end:{line:1,column:17405}},line:1},"65":{name:"(anonymous_65)",decl:{start:{line:1,column:19212},end:{line:1,column:19213}},loc:{start:{line:1,column:19225},end:{line:1,column:19793}},line:1},"66":{name:"(anonymous_66)",decl:{start:{line:1,column:19481},end:{line:1,column:19482}},loc:{start:{line:1,column:19491},end:{line:1,column:19513}},line:1}},branchMap:{"0":{loc:{start:{line:1,column:559},end:{line:1,column:669}},type:"if",locations:[{start:{line:1,column:559},end:{line:1,column:669}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1":{loc:{start:{line:1,column:562},end:{line:1,column:635}},type:"binary-expr",locations:[{start:{line:1,column:562},end:{line:1,column:565}},{start:{line:1,column:568},end:{line:1,column:634}}],line:1},"2":{loc:{start:{line:1,column:687},end:{line:1,column:861}},type:"if",locations:[{start:{line:1,column:687},end:{line:1,column:861}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"3":{loc:{start:{line:1,column:690},end:{line:1,column:804}},type:"binary-expr",locations:[{start:{line:1,column:690},end:{line:1,column:693}},{start:{line:1,column:696},end:{line:1,column:803}}],line:1},"4":{loc:{start:{line:1,column:1025},end:{line:1,column:1036}},type:"binary-expr",locations:[{start:{line:1,column:1025},end:{line:1,column:1026}},{start:{line:1,column:1029},end:{line:1,column:1035}}],line:1},"5":{loc:{start:{line:1,column:1038},end:{line:1,column:1042}},type:"binary-expr",locations:[{start:{line:1,column:1038},end:{line:1,column:1039}},{start:{line:1,column:1041},end:{line:1,column:1042}}],line:1},"6":{loc:{start:{line:1,column:2224},end:{line:1,column:2351}},type:"binary-expr",locations:[{start:{line:1,column:2224},end:{line:1,column:2227}},{start:{line:1,column:2230},end:{line:1,column:2350}}],line:1},"7":{loc:{start:{line:1,column:2352},end:{line:1,column:2695}},type:"binary-expr",locations:[{start:{line:1,column:2352},end:{line:1,column:2355}},{start:{line:1,column:2358},end:{line:1,column:2694}}],line:1},"8":{loc:{start:{line:1,column:2381},end:{line:1,column:2438}},type:"binary-expr",locations:[{start:{line:1,column:2381},end:{line:1,column:2418}},{start:{line:1,column:2420},end:{line:1,column:2438}}],line:1},"9":{loc:{start:{line:1,column:2439},end:{line:1,column:2494}},type:"binary-expr",locations:[{start:{line:1,column:2439},end:{line:1,column:2475}},{start:{line:1,column:2477},end:{line:1,column:2494}}],line:1},"10":{loc:{start:{line:1,column:2638},end:{line:1,column:2693}},type:"binary-expr",locations:[{start:{line:1,column:2638},end:{line:1,column:2674}},{start:{line:1,column:2676},end:{line:1,column:2693}}],line:1},"11":{loc:{start:{line:1,column:2812},end:{line:1,column:2922}},type:"if",locations:[{start:{line:1,column:2812},end:{line:1,column:2922}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"12":{loc:{start:{line:1,column:2815},end:{line:1,column:2888}},type:"binary-expr",locations:[{start:{line:1,column:2815},end:{line:1,column:2818}},{start:{line:1,column:2821},end:{line:1,column:2887}}],line:1},"13":{loc:{start:{line:1,column:2940},end:{line:1,column:3114}},type:"if",locations:[{start:{line:1,column:2940},end:{line:1,column:3114}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"14":{loc:{start:{line:1,column:2943},end:{line:1,column:3057}},type:"binary-expr",locations:[{start:{line:1,column:2943},end:{line:1,column:2946}},{start:{line:1,column:2949},end:{line:1,column:3056}}],line:1},"15":{loc:{start:{line:1,column:3269},end:{line:1,column:3280}},type:"binary-expr",locations:[{start:{line:1,column:3269},end:{line:1,column:3270}},{start:{line:1,column:3273},end:{line:1,column:3279}}],line:1},"16":{loc:{start:{line:1,column:3282},end:{line:1,column:3286}},type:"binary-expr",locations:[{start:{line:1,column:3282},end:{line:1,column:3283}},{start:{line:1,column:3285},end:{line:1,column:3286}}],line:1},"17":{loc:{start:{line:1,column:4467},end:{line:1,column:4594}},type:"binary-expr",locations:[{start:{line:1,column:4467},end:{line:1,column:4470}},{start:{line:1,column:4473},end:{line:1,column:4593}}],line:1},"18":{loc:{start:{line:1,column:4595},end:{line:1,column:4938}},type:"binary-expr",locations:[{start:{line:1,column:4595},end:{line:1,column:4598}},{start:{line:1,column:4601},end:{line:1,column:4937}}],line:1},"19":{loc:{start:{line:1,column:4624},end:{line:1,column:4681}},type:"binary-expr",locations:[{start:{line:1,column:4624},end:{line:1,column:4661}},{start:{line:1,column:4663},end:{line:1,column:4681}}],line:1},"20":{loc:{start:{line:1,column:4682},end:{line:1,column:4737}},type:"binary-expr",locations:[{start:{line:1,column:4682},end:{line:1,column:4718}},{start:{line:1,column:4720},end:{line:1,column:4737}}],line:1},"21":{loc:{start:{line:1,column:4881},end:{line:1,column:4936}},type:"binary-expr",locations:[{start:{line:1,column:4881},end:{line:1,column:4917}},{start:{line:1,column:4919},end:{line:1,column:4936}}],line:1},"22":{loc:{start:{line:1,column:5055},end:{line:1,column:5165}},type:"if",locations:[{start:{line:1,column:5055},end:{line:1,column:5165}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"23":{loc:{start:{line:1,column:5058},end:{line:1,column:5131}},type:"binary-expr",locations:[{start:{line:1,column:5058},end:{line:1,column:5061}},{start:{line:1,column:5064},end:{line:1,column:5130}}],line:1},"24":{loc:{start:{line:1,column:5183},end:{line:1,column:5357}},type:"if",locations:[{start:{line:1,column:5183},end:{line:1,column:5357}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"25":{loc:{start:{line:1,column:5186},end:{line:1,column:5300}},type:"binary-expr",locations:[{start:{line:1,column:5186},end:{line:1,column:5189}},{start:{line:1,column:5192},end:{line:1,column:5299}}],line:1},"26":{loc:{start:{line:1,column:5527},end:{line:1,column:5538}},type:"binary-expr",locations:[{start:{line:1,column:5527},end:{line:1,column:5528}},{start:{line:1,column:5531},end:{line:1,column:5537}}],line:1},"27":{loc:{start:{line:1,column:5540},end:{line:1,column:5544}},type:"binary-expr",locations:[{start:{line:1,column:5540},end:{line:1,column:5541}},{start:{line:1,column:5543},end:{line:1,column:5544}}],line:1},"28":{loc:{start:{line:1,column:6726},end:{line:1,column:6853}},type:"binary-expr",locations:[{start:{line:1,column:6726},end:{line:1,column:6729}},{start:{line:1,column:6732},end:{line:1,column:6852}}],line:1},"29":{loc:{start:{line:1,column:6854},end:{line:1,column:7197}},type:"binary-expr",locations:[{start:{line:1,column:6854},end:{line:1,column:6857}},{start:{line:1,column:6860},end:{line:1,column:7196}}],line:1},"30":{loc:{start:{line:1,column:6883},end:{line:1,column:6940}},type:"binary-expr",locations:[{start:{line:1,column:6883},end:{line:1,column:6920}},{start:{line:1,column:6922},end:{line:1,column:6940}}],line:1},"31":{loc:{start:{line:1,column:6941},end:{line:1,column:6996}},type:"binary-expr",locations:[{start:{line:1,column:6941},end:{line:1,column:6977}},{start:{line:1,column:6979},end:{line:1,column:6996}}],line:1},"32":{loc:{start:{line:1,column:7140},end:{line:1,column:7195}},type:"binary-expr",locations:[{start:{line:1,column:7140},end:{line:1,column:7176}},{start:{line:1,column:7178},end:{line:1,column:7195}}],line:1},"33":{loc:{start:{line:1,column:7314},end:{line:1,column:7424}},type:"if",locations:[{start:{line:1,column:7314},end:{line:1,column:7424}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"34":{loc:{start:{line:1,column:7317},end:{line:1,column:7390}},type:"binary-expr",locations:[{start:{line:1,column:7317},end:{line:1,column:7320}},{start:{line:1,column:7323},end:{line:1,column:7389}}],line:1},"35":{loc:{start:{line:1,column:7442},end:{line:1,column:7616}},type:"if",locations:[{start:{line:1,column:7442},end:{line:1,column:7616}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"36":{loc:{start:{line:1,column:7445},end:{line:1,column:7559}},type:"binary-expr",locations:[{start:{line:1,column:7445},end:{line:1,column:7448}},{start:{line:1,column:7451},end:{line:1,column:7558}}],line:1},"37":{loc:{start:{line:1,column:7788},end:{line:1,column:7799}},type:"binary-expr",locations:[{start:{line:1,column:7788},end:{line:1,column:7789}},{start:{line:1,column:7792},end:{line:1,column:7798}}],line:1},"38":{loc:{start:{line:1,column:7801},end:{line:1,column:7805}},type:"binary-expr",locations:[{start:{line:1,column:7801},end:{line:1,column:7802}},{start:{line:1,column:7804},end:{line:1,column:7805}}],line:1},"39":{loc:{start:{line:1,column:8990},end:{line:1,column:9117}},type:"binary-expr",locations:[{start:{line:1,column:8990},end:{line:1,column:8993}},{start:{line:1,column:8996},end:{line:1,column:9116}}],line:1},"40":{loc:{start:{line:1,column:9118},end:{line:1,column:9461}},type:"binary-expr",locations:[{start:{line:1,column:9118},end:{line:1,column:9121}},{start:{line:1,column:9124},end:{line:1,column:9460}}],line:1},"41":{loc:{start:{line:1,column:9147},end:{line:1,column:9204}},type:"binary-expr",locations:[{start:{line:1,column:9147},end:{line:1,column:9184}},{start:{line:1,column:9186},end:{line:1,column:9204}}],line:1},"42":{loc:{start:{line:1,column:9205},end:{line:1,column:9260}},type:"binary-expr",locations:[{start:{line:1,column:9205},end:{line:1,column:9241}},{start:{line:1,column:9243},end:{line:1,column:9260}}],line:1},"43":{loc:{start:{line:1,column:9404},end:{line:1,column:9459}},type:"binary-expr",locations:[{start:{line:1,column:9404},end:{line:1,column:9440}},{start:{line:1,column:9442},end:{line:1,column:9459}}],line:1},"44":{loc:{start:{line:1,column:9578},end:{line:1,column:9688}},type:"if",locations:[{start:{line:1,column:9578},end:{line:1,column:9688}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"45":{loc:{start:{line:1,column:9581},end:{line:1,column:9654}},type:"binary-expr",locations:[{start:{line:1,column:9581},end:{line:1,column:9584}},{start:{line:1,column:9587},end:{line:1,column:9653}}],line:1},"46":{loc:{start:{line:1,column:9706},end:{line:1,column:9880}},type:"if",locations:[{start:{line:1,column:9706},end:{line:1,column:9880}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"47":{loc:{start:{line:1,column:9709},end:{line:1,column:9823}},type:"binary-expr",locations:[{start:{line:1,column:9709},end:{line:1,column:9712}},{start:{line:1,column:9715},end:{line:1,column:9822}}],line:1},"48":{loc:{start:{line:1,column:10068},end:{line:1,column:10079}},type:"binary-expr",locations:[{start:{line:1,column:10068},end:{line:1,column:10069}},{start:{line:1,column:10072},end:{line:1,column:10078}}],line:1},"49":{loc:{start:{line:1,column:10081},end:{line:1,column:10085}},type:"binary-expr",locations:[{start:{line:1,column:10081},end:{line:1,column:10082}},{start:{line:1,column:10084},end:{line:1,column:10085}}],line:1},"50":{loc:{start:{line:1,column:11270},end:{line:1,column:11397}},type:"binary-expr",locations:[{start:{line:1,column:11270},end:{line:1,column:11273}},{start:{line:1,column:11276},end:{line:1,column:11396}}],line:1},"51":{loc:{start:{line:1,column:11398},end:{line:1,column:11741}},type:"binary-expr",locations:[{start:{line:1,column:11398},end:{line:1,column:11401}},{start:{line:1,column:11404},end:{line:1,column:11740}}],line:1},"52":{loc:{start:{line:1,column:11427},end:{line:1,column:11484}},type:"binary-expr",locations:[{start:{line:1,column:11427},end:{line:1,column:11464}},{start:{line:1,column:11466},end:{line:1,column:11484}}],line:1},"53":{loc:{start:{line:1,column:11485},end:{line:1,column:11540}},type:"binary-expr",locations:[{start:{line:1,column:11485},end:{line:1,column:11521}},{start:{line:1,column:11523},end:{line:1,column:11540}}],line:1},"54":{loc:{start:{line:1,column:11684},end:{line:1,column:11739}},type:"binary-expr",locations:[{start:{line:1,column:11684},end:{line:1,column:11720}},{start:{line:1,column:11722},end:{line:1,column:11739}}],line:1},"55":{loc:{start:{line:1,column:11858},end:{line:1,column:11968}},type:"if",locations:[{start:{line:1,column:11858},end:{line:1,column:11968}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"56":{loc:{start:{line:1,column:11861},end:{line:1,column:11934}},type:"binary-expr",locations:[{start:{line:1,column:11861},end:{line:1,column:11864}},{start:{line:1,column:11867},end:{line:1,column:11933}}],line:1},"57":{loc:{start:{line:1,column:11986},end:{line:1,column:12160}},type:"if",locations:[{start:{line:1,column:11986},end:{line:1,column:12160}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"58":{loc:{start:{line:1,column:11989},end:{line:1,column:12103}},type:"binary-expr",locations:[{start:{line:1,column:11989},end:{line:1,column:11992}},{start:{line:1,column:11995},end:{line:1,column:12102}}],line:1},"59":{loc:{start:{line:1,column:12420},end:{line:1,column:12431}},type:"binary-expr",locations:[{start:{line:1,column:12420},end:{line:1,column:12421}},{start:{line:1,column:12424},end:{line:1,column:12430}}],line:1},"60":{loc:{start:{line:1,column:12433},end:{line:1,column:12437}},type:"binary-expr",locations:[{start:{line:1,column:12433},end:{line:1,column:12434}},{start:{line:1,column:12436},end:{line:1,column:12437}}],line:1},"61":{loc:{start:{line:1,column:13626},end:{line:1,column:13753}},type:"binary-expr",locations:[{start:{line:1,column:13626},end:{line:1,column:13629}},{start:{line:1,column:13632},end:{line:1,column:13752}}],line:1},"62":{loc:{start:{line:1,column:13754},end:{line:1,column:14097}},type:"binary-expr",locations:[{start:{line:1,column:13754},end:{line:1,column:13757}},{start:{line:1,column:13760},end:{line:1,column:14096}}],line:1},"63":{loc:{start:{line:1,column:13783},end:{line:1,column:13840}},type:"binary-expr",locations:[{start:{line:1,column:13783},end:{line:1,column:13820}},{start:{line:1,column:13822},end:{line:1,column:13840}}],line:1},"64":{loc:{start:{line:1,column:13841},end:{line:1,column:13896}},type:"binary-expr",locations:[{start:{line:1,column:13841},end:{line:1,column:13877}},{start:{line:1,column:13879},end:{line:1,column:13896}}],line:1},"65":{loc:{start:{line:1,column:14040},end:{line:1,column:14095}},type:"binary-expr",locations:[{start:{line:1,column:14040},end:{line:1,column:14076}},{start:{line:1,column:14078},end:{line:1,column:14095}}],line:1},"66":{loc:{start:{line:1,column:14170},end:{line:1,column:14278}},type:"if",locations:[{start:{line:1,column:14170},end:{line:1,column:14278}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"67":{loc:{start:{line:1,column:14173},end:{line:1,column:14205}},type:"binary-expr",locations:[{start:{line:1,column:14173},end:{line:1,column:14176}},{start:{line:1,column:14179},end:{line:1,column:14204}}],line:1},"68":{loc:{start:{line:1,column:14296},end:{line:1,column:14577}},type:"if",locations:[{start:{line:1,column:14296},end:{line:1,column:14577}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"69":{loc:{start:{line:1,column:14577},end:{line:1,column:14660}},type:"if",locations:[{start:{line:1,column:14577},end:{line:1,column:14660}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"70":{loc:{start:{line:1,column:14678},end:{line:1,column:14782}},type:"if",locations:[{start:{line:1,column:14678},end:{line:1,column:14782}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"71":{loc:{start:{line:1,column:14681},end:{line:1,column:14724}},type:"binary-expr",locations:[{start:{line:1,column:14681},end:{line:1,column:14684}},{start:{line:1,column:14686},end:{line:1,column:14724}}],line:1},"72":{loc:{start:{line:1,column:14800},end:{line:1,column:14908}},type:"if",locations:[{start:{line:1,column:14800},end:{line:1,column:14908}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"73":{loc:{start:{line:1,column:14803},end:{line:1,column:14850}},type:"binary-expr",locations:[{start:{line:1,column:14803},end:{line:1,column:14806}},{start:{line:1,column:14808},end:{line:1,column:14850}}],line:1},"74":{loc:{start:{line:1,column:14926},end:{line:1,column:15027}},type:"if",locations:[{start:{line:1,column:14926},end:{line:1,column:15027}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"75":{loc:{start:{line:1,column:14929},end:{line:1,column:14969}},type:"binary-expr",locations:[{start:{line:1,column:14929},end:{line:1,column:14932}},{start:{line:1,column:14934},end:{line:1,column:14969}}],line:1},"76":{loc:{start:{line:1,column:15045},end:{line:1,column:15151}},type:"if",locations:[{start:{line:1,column:15045},end:{line:1,column:15151}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"77":{loc:{start:{line:1,column:15048},end:{line:1,column:15093}},type:"binary-expr",locations:[{start:{line:1,column:15048},end:{line:1,column:15051}},{start:{line:1,column:15053},end:{line:1,column:15093}}],line:1},"78":{loc:{start:{line:1,column:15169},end:{line:1,column:15269}},type:"if",locations:[{start:{line:1,column:15169},end:{line:1,column:15269}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"79":{loc:{start:{line:1,column:15172},end:{line:1,column:15211}},type:"binary-expr",locations:[{start:{line:1,column:15172},end:{line:1,column:15175}},{start:{line:1,column:15177},end:{line:1,column:15211}}],line:1},"80":{loc:{start:{line:1,column:15287},end:{line:1,column:15388}},type:"if",locations:[{start:{line:1,column:15287},end:{line:1,column:15388}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"81":{loc:{start:{line:1,column:15290},end:{line:1,column:15330}},type:"binary-expr",locations:[{start:{line:1,column:15290},end:{line:1,column:15293}},{start:{line:1,column:15295},end:{line:1,column:15330}}],line:1},"82":{loc:{start:{line:1,column:15406},end:{line:1,column:15510}},type:"if",locations:[{start:{line:1,column:15406},end:{line:1,column:15510}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"83":{loc:{start:{line:1,column:15409},end:{line:1,column:15452}},type:"binary-expr",locations:[{start:{line:1,column:15409},end:{line:1,column:15412}},{start:{line:1,column:15414},end:{line:1,column:15452}}],line:1},"84":{loc:{start:{line:1,column:15528},end:{line:1,column:15632}},type:"if",locations:[{start:{line:1,column:15528},end:{line:1,column:15632}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"85":{loc:{start:{line:1,column:15531},end:{line:1,column:15574}},type:"binary-expr",locations:[{start:{line:1,column:15531},end:{line:1,column:15534}},{start:{line:1,column:15536},end:{line:1,column:15574}}],line:1},"86":{loc:{start:{line:1,column:15650},end:{line:1,column:16503}},type:"if",locations:[{start:{line:1,column:15650},end:{line:1,column:16503}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"87":{loc:{start:{line:1,column:15653},end:{line:1,column:16027}},type:"binary-expr",locations:[{start:{line:1,column:15653},end:{line:1,column:15656}},{start:{line:1,column:15659},end:{line:1,column:16026}}],line:1},"88":{loc:{start:{line:1,column:16521},end:{line:1,column:16579}},type:"binary-expr",locations:[{start:{line:1,column:16521},end:{line:1,column:16524}},{start:{line:1,column:16527},end:{line:1,column:16578}}],line:1},"89":{loc:{start:{line:1,column:16845},end:{line:1,column:16946}},type:"binary-expr",locations:[{start:{line:1,column:16845},end:{line:1,column:16855}},{start:{line:1,column:16858},end:{line:1,column:16945}}],line:1},"90":{loc:{start:{line:1,column:17314},end:{line:1,column:17358}},type:"binary-expr",locations:[{start:{line:1,column:17314},end:{line:1,column:17315}},{start:{line:1,column:17317},end:{line:1,column:17358}}],line:1},"91":{loc:{start:{line:1,column:17399},end:{line:1,column:17403}},type:"binary-expr",locations:[{start:{line:1,column:17399},end:{line:1,column:17400}},{start:{line:1,column:17402},end:{line:1,column:17403}}],line:1},"92":{loc:{start:{line:1,column:19226},end:{line:1,column:19792}},type:"if",locations:[{start:{line:1,column:19226},end:{line:1,column:19792}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"93":{loc:{start:{line:1,column:19229},end:{line:1,column:19678}},type:"binary-expr",locations:[{start:{line:1,column:19229},end:{line:1,column:19232}},{start:{line:1,column:19235},end:{line:1,column:19677}}],line:1}},s:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"116":0,"117":0,"118":0,"119":0,"120":0,"121":0,"122":0,"123":0,"124":0,"125":0,"126":0,"127":0,"128":0,"129":0,"130":0,"131":0,"132":0,"133":0,"134":0,"135":0,"136":0,"137":0,"138":0,"139":0,"140":0,"141":0,"142":0,"143":0,"144":0,"145":0,"146":0,"147":0,"148":0,"149":0,"150":0,"151":0,"152":0,"153":0,"154":0,"155":0,"156":0,"157":0,"158":0,"159":0,"160":0,"161":0,"162":0,"163":0,"164":0,"165":0,"166":0,"167":0,"168":0,"169":0},f:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0},b:{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0],"9":[0,0],"10":[0,0],"11":[0,0],"12":[0,0],"13":[0,0],"14":[0,0],"15":[0,0],"16":[0,0],"17":[0,0],"18":[0,0],"19":[0,0],"20":[0,0],"21":[0,0],"22":[0,0],"23":[0,0],"24":[0,0],"25":[0,0],"26":[0,0],"27":[0,0],"28":[0,0],"29":[0,0],"30":[0,0],"31":[0,0],"32":[0,0],"33":[0,0],"34":[0,0],"35":[0,0],"36":[0,0],"37":[0,0],"38":[0,0],"39":[0,0],"40":[0,0],"41":[0,0],"42":[0,0],"43":[0,0],"44":[0,0],"45":[0,0],"46":[0,0],"47":[0,0],"48":[0,0],"49":[0,0],"50":[0,0],"51":[0,0],"52":[0,0],"53":[0,0],"54":[0,0],"55":[0,0],"56":[0,0],"57":[0,0],"58":[0,0],"59":[0,0],"60":[0,0],"61":[0,0],"62":[0,0],"63":[0,0],"64":[0,0],"65":[0,0],"66":[0,0],"67":[0,0],"68":[0,0],"69":[0,0],"70":[0,0],"71":[0,0],"72":[0,0],"73":[0,0],"74":[0,0],"75":[0,0],"76":[0,0],"77":[0,0],"78":[0,0],"79":[0,0],"80":[0,0],"81":[0,0],"82":[0,0],"83":[0,0],"84":[0,0],"85":[0,0],"86":[0,0],"87":[0,0],"88":[0,0],"89":[0,0],"90":[0,0],"91":[0,0],"92":[0,0],"93":[0,0]},inputSourceMap:{version:3,sources:["src/app/features/analytics/components/alarm-frequency-chart/alarm-frequency-chart.component.ts","src/app/features/analytics/components/shared/chart-analytics.html","src/app/features/analytics/components/fall-frequency-chart/fall-frequency-chart.component.ts","src/app/features/analytics/components/shared/chart-analytics.html","src/app/features/analytics/components/plant-anomalies-chart/plant-anomalies-chart.component.ts","src/app/features/analytics/components/shared/chart-analytics.html","src/app/features/analytics/components/presence-detection-chart/presence-detection-chart.component.ts","src/app/features/analytics/components/shared/chart-analytics.html","src/app/features/analytics/components/prolonged-presence-chart/prolonged-presence-chart.component.ts","src/app/features/analytics/components/shared/chart-analytics.html","src/app/features/analytics/components/temperature-variations-chart/temperature-variations-chart.component.ts","src/app/features/analytics/components/shared/chart-analytics.html","src/app/features/analytics/analytics.component.ts","src/app/features/analytics/analytics.component.html"],sourcesContent:["import { Component, Input, SimpleChanges } from '@angular/core';\nimport { ChartComponent } from '../../interfaces/chart-component';\nimport { ChartType } from 'chart.js';\nimport { BaseChartDirective } from 'ng2-charts';\nimport { CommonModule } from '@angular/common';\n\n@Component({ \n selector: 'app-alarm-frequency-chart', \n standalone: true, \n imports: [BaseChartDirective, CommonModule],\n templateUrl: '../shared/chart-analytics.html'})\nexport class AlarmFrequencyChartComponent extends ChartComponent {\n override chartType: ChartType = 'bar';\n\n override description: string = \"Dati relativi al numero di allarmi del reparto.\";\n}\n\n\n ","
\n\n
\n
\n

{{chartInfo.title}}

\n

{{description}}

\n
\n\n \n \n\n\n
\n\n
\n

Suggerimenti Risparmio Energetico

\n
    \n @for(sugg of chartInfo.suggestions.messages; track sugg){\n
  • \n

    SUGGERIMENTO

    \n

    {{sugg}}

    \n
  • \n }\n
\n
\n\n
\n\n","import { Component, Input } from '@angular/core';\nimport { ChartComponent } from '../../interfaces/chart-component';\nimport { ChartInfoDto } from '../../models/chart-info.model';\nimport { ChartType } from 'chart.js';\nimport { BaseChartDirective } from 'ng2-charts';\nimport { CommonModule } from '@angular/common';\n\n@Component({ \n selector: 'app-fall-frequency-chart',\n standalone: true, \n imports: [BaseChartDirective, CommonModule],\n templateUrl: '../shared/chart-analytics.html'})\nexport class FallFrequencyChartComponent extends ChartComponent {\n\n override chartType: ChartType = 'bar';\n\n override description: string = \"Dati relativi alle cadute del reparto.\";\n\n\n \n}\n","
\n\n
\n
\n

{{chartInfo.title}}

\n

{{description}}

\n
\n\n \n \n\n\n
\n\n
\n

Suggerimenti Risparmio Energetico

\n
    \n @for(sugg of chartInfo.suggestions.messages; track sugg){\n
  • \n

    SUGGERIMENTO

    \n

    {{sugg}}

    \n
  • \n }\n
\n
\n\n
\n\n","import { Component, Input } from '@angular/core';\nimport { ChartComponent } from '../../interfaces/chart-component';\nimport { ChartInfoDto } from '../../models/chart-info.model';\nimport { ChartType } from 'chart.js';\nimport { BaseChartDirective } from 'ng2-charts';\nimport { CommonModule } from '@angular/common';\n\n@Component({ \n selector: 'app-plant-anomalies-chart', \n standalone: true, \n imports: [BaseChartDirective, CommonModule],\n templateUrl: '../shared/chart-analytics.html'})\nexport class PlantAnomaliesChartComponent extends ChartComponent {\n\n override chartType: ChartType = 'bar';\n\n override description: string = \"Dati relativi alle anomalie totali dell'appartamento.\";\n\n}\n","
\n\n
\n
\n

{{chartInfo.title}}

\n

{{description}}

\n
\n\n \n \n\n\n
\n\n
\n

Suggerimenti Risparmio Energetico

\n
    \n @for(sugg of chartInfo.suggestions.messages; track sugg){\n
  • \n

    SUGGERIMENTO

    \n

    {{sugg}}

    \n
  • \n }\n
\n
\n\n
\n\n","import { Component, Input } from '@angular/core';\nimport { ChartComponent } from '../../interfaces/chart-component';\nimport { ChartInfoDto } from '../../models/chart-info.model';\nimport { ChartType } from 'chart.js';\nimport { BaseChartDirective } from 'ng2-charts';\nimport { CommonModule } from '@angular/common';\n\n@Component({ \n selector: 'app-presence-detection-chart', \n standalone: true, \n imports: [BaseChartDirective, CommonModule],\n templateUrl: '../shared/chart-analytics.html'})\nexport class PresenceDetectionChartComponent extends ChartComponent {\n\n override chartType: ChartType = 'bar';\n\n override description: string = \"Dati relativi ai sensori di presenza dell'appartamento.\";\n\n}\n","
\n\n
\n
\n

{{chartInfo.title}}

\n

{{description}}

\n
\n\n \n \n\n\n
\n\n
\n

Suggerimenti Risparmio Energetico

\n
    \n @for(sugg of chartInfo.suggestions.messages; track sugg){\n
  • \n

    SUGGERIMENTO

    \n

    {{sugg}}

    \n
  • \n }\n
\n
\n\n
\n\n","import { Component, Input } from '@angular/core';\nimport { ChartComponent } from '../../interfaces/chart-component';\nimport { ChartInfoDto } from '../../models/chart-info.model';\nimport { ChartType } from 'chart.js';\nimport { BaseChartDirective } from 'ng2-charts';\nimport { CommonModule } from '@angular/common';\n\n@Component({ \n selector: 'app-prolonged-presence-chart', \n standalone: true, \n imports: [BaseChartDirective, CommonModule],\n templateUrl: '../shared/chart-analytics.html'})\nexport class ProlongedPresenceChartComponent extends ChartComponent {\n\n override chartType: ChartType = 'bar';\n override description: string = \"Presenze prolungate rilevate dai sensori all'interno dell'appartamento.\";\n\n}\n","
\n\n
\n
\n

{{chartInfo.title}}

\n

{{description}}

\n
\n\n \n \n\n\n
\n\n
\n

Suggerimenti Risparmio Energetico

\n
    \n @for(sugg of chartInfo.suggestions.messages; track sugg){\n
  • \n

    SUGGERIMENTO

    \n

    {{sugg}}

    \n
  • \n }\n
\n
\n\n
\n\n","import { Component, Input } from '@angular/core';\nimport { ChartComponent } from '../../interfaces/chart-component';\nimport { ChartInfoDto } from '../../models/chart-info.model';\nimport { ChartType } from 'chart.js';\nimport { BaseChartDirective } from 'ng2-charts';\nimport { CommonModule } from '@angular/common';\n\n@Component({ \n selector: 'app-temperature-variations-chart', \n standalone: true, \n imports: [BaseChartDirective, CommonModule],\n templateUrl: '../shared/chart-analytics.html'})\nexport class TemperatureVariationsChartComponent extends ChartComponent {\n\n override chartType: ChartType = 'line';\n\n override description: string = \"Dati rilevati dai sensori di temperatura all'interno dell'appartamento.\";\n\n override chartColors = [\n { bg: 'rgba(239, 97, 68, 0.5)', border: 'rgb(239, 97, 68)'}\n ];\n}\n","
\n\n
\n
\n

{{chartInfo.title}}

\n

{{description}}

\n
\n\n \n \n\n\n
\n\n
\n

Suggerimenti Risparmio Energetico

\n
    \n @for(sugg of chartInfo.suggestions.messages; track sugg){\n
  • \n

    SUGGERIMENTO

    \n

    {{sugg}}

    \n
  • \n }\n
\n
\n\n
\n\n","import { Component, inject, OnInit } from '@angular/core';\nimport { AnalyticsApiService } from './services/analytics-api.service';\nimport { AnalyticsDto } from './models/analytics.model';\nimport { ChartInfoDto } from './models/chart-info.model';\nimport { AlarmFrequencyChartComponent } from './components/alarm-frequency-chart/alarm-frequency-chart.component';\nimport { AlarmsSentResolvedChartComponent } from './components/alarms-sent-resolved-chart/alarms-sent-resolved-chart.component';\nimport { EnergyConsumptionChartComponent } from './components/energy-consumption-chart/energy-consumption-chart.component';\nimport { FallFrequencyChartComponent } from './components/fall-frequency-chart/fall-frequency-chart.component';\nimport { PlantAnomaliesChartComponent } from './components/plant-anomalies-chart/plant-anomalies-chart.component';\nimport { PresenceDetectionChartComponent } from './components/presence-detection-chart/presence-detection-chart.component';\nimport { ProlongedPresenceChartComponent } from './components/prolonged-presence-chart/prolonged-presence-chart.component';\nimport { TemperatureVariationsChartComponent } from './components/temperature-variations-chart/temperature-variations-chart.component';\nimport { Observable, switchMap, filter, BehaviorSubject, startWith, combineLatest } from 'rxjs';\nimport { CommonModule } from '@angular/common';\nimport { PlantDto } from '../apartment-monitor/models/plant-response.model';\n\n@Component({\n selector: 'app-analytics',\n standalone: true,\n imports: [\n CommonModule,\n AlarmFrequencyChartComponent,\n AlarmsSentResolvedChartComponent,\n EnergyConsumptionChartComponent,\n FallFrequencyChartComponent,\n PlantAnomaliesChartComponent,\n PresenceDetectionChartComponent,\n ProlongedPresenceChartComponent,\n TemperatureVariationsChartComponent\n ],\n templateUrl: './analytics.component.html'\n})\nexport class AnalyticsComponent implements OnInit {\n private readonly refreshTrigger$ = new BehaviorSubject(false);\n\n private readonly analyticsApiService = inject(AnalyticsApiService);\n private readonly loadTrigger$ = new BehaviorSubject<{ id: string; refresh: boolean } | null>(null);\n\n public selectedApartmentId$ = new BehaviorSubject(null);\n \n public apartments$: Observable | null = null;\n public analytics: Observable | null = null;\n\n public ngOnInit(): void {\n this.apartments$ = this.analyticsApiService.getAllApartments();\n this.apartments$.subscribe(apartments => {\n if (apartments.length > 0) {\n this.selectedApartmentId$.next(apartments[0].id);\n this.loadTrigger$.next({ id: apartments[0].id, refresh: false });\n }\n });\n\n this.analytics = this.loadTrigger$.pipe(\n filter(trigger => trigger !== null),\n switchMap(trigger =>\n this.analyticsApiService\n .getAnalytics(trigger.id, trigger.refresh)\n .pipe(startWith(null))\n )\n );\n }\n\n public getChartByMetric(data: AnalyticsDto | null, metric: string): ChartInfoDto | undefined {\n return data?.analyticsInfo?.find(chart => chart.metric === metric);\n }\n\n public onApartmentChange(event: Event): void {\n const id = (event.target as HTMLSelectElement).value;\n this.selectedApartmentId$.next(id);\n this.loadTrigger$.next({ id, refresh: false });\n }\n\n public onRefresh(): void {\n const currentId = this.selectedApartmentId$.value;\n if (!currentId) return;\n this.loadTrigger$.next({ id: currentId, refresh: true });\n }\n\n}\n\n\n\n","
\n
\n
\n

Analytics

\n

Cruscotto analitico

\n

Andamento energetico, presenza e anomalie per appartamento monitorato.

\n
\n
\n \n
\n \n
\n \n
\n \n \n \n
\n
\n
\n
\n
\n\n
\n\n \n \n\n \n \n\n \n \n\n \n \n\n \n \n\n \n \n\n \n \n\n \n \n\n
\n\n\n\n

Caricamento dati in corso...

\n
\n
"],mappings:"wjBC+BIA,EAAA,EAAA,KAAA,EAAA,EAAyJ,EAAA,IAAA,EAAA,EAClHC,EAAA,EAAA,cAAA,EAAYC,EAAA,EACjDF,EAAA,EAAA,GAAA,EAAGC,EAAA,CAAA,EAAQC,EAAA,EAAI,0BAAZC,EAAA,CAAA,EAAAC,EAAAC,CAAA,6BANTL,EAAA,EAAA,MAAA,CAAA,EAAmI,EAAA,KAAA,CAAA,EAChFC,EAAA,EAAA,mCAAA,EAAiCC,EAAA,EAClFF,EAAA,EAAA,KAAA,CAAA,EACEM,EAAA,EAAAC,GAAA,EAAA,EAAA,KAAA,GAAAC,CAAA,EAMFN,EAAA,EAAK,kBANHC,EAAA,CAAA,EAAAM,EAAAC,EAAAC,UAAAC,YAAAC,QAAA,GDnBJ,IAAaC,GAA6B,IAAA,CAApC,MAAOA,UAAqCC,CAAc,CACnDC,UAAuB,MAEvBC,YAAsB,iHAHtBH,CAA4B,IAAAI,GAA5BJ,CAA4B,CAAA,CAAA,GAAA,2BAA5BA,EAA4BK,UAAA,CAAA,CAAA,2BAAA,CAAA,EAAAC,SAAA,CAAAC,CAAA,EAAAC,MAAA,EAAAC,KAAA,GAAAC,OAAA,CAAA,CAAA,EAAA,OAAA,WAAA,cAAA,SAAA,mBAAA,WAAA,YAAA,kBAAA,cAAA,SAAA,6BAAA,oCAAA,qDAAA,2CAAA,EAAA,CAAA,YAAA,kBAAA,EAAA,QAAA,SAAA,MAAA,WAAA,MAAA,iBAAA,iBAAA,SAAA,QAAA,WAAA,mBAAA,EAAA,SAAA,EAAA,CAAA,EAAA,WAAA,mBAAA,OAAA,MAAA,EAAA,CAAA,EAAA,YAAA,iBAAA,SAAA,EAAA,CAAA,EAAA,YAAA,gBAAA,EAAA,CAAA,YAAA,GAAA,EAAA,OAAA,UAAA,MAAA,EAAA,CAAA,YAAA,sBAAA,QAAA,yBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,sBAAA,EAAA,SAAA,aAAA,KAAA,EAAA,CAAA,EAAA,YAAA,MAAA,iBAAA,SAAA,EAAA,CAAA,EAAA,OAAA,WAAA,OAAA,EAAA,CAAA,YAAA,kBAAA,EAAA,MAAA,cAAA,SAAA,0BAAA,WAAA,YAAA,kBAAA,oBAAA,cAAA,EAAA,CAAA,EAAA,YAAA,gBAAA,CAAA,EAAAC,SAAA,SAAAC,EAAAC,EAAA,CAAAD,EAAA,ICXzC1B,EAAA,EAAA,MAAA,CAAA,EAKsD,EAAA,MAAA,CAAA,EAO6D,EAAA,MAAA,CAAA,EAChE,EAAA,KAAA,CAAA,EACFC,EAAA,CAAA,EAAmBC,EAAA,EAChEF,EAAA,EAAA,KAAA,CAAA,EAAqCC,EAAA,CAAA,EAAeC,EAAA,EAAK,EAG3D0B,EAAA,EAAA,SAAA,CAAA,EAOF1B,EAAA,EAEA2B,EAAA,EAAAC,GAAA,EAAA,EAAA,MAAA,CAAA,EAYA5B,EAAA,SAhCKC,EAAA,EAAA4B,EAAA,UAAAC,EAAA,EAAAC,GAAA,CAAAN,EAAAhB,UAAAC,YAAAsB,cAAA,CAAAP,EAAAQ,gBAAAR,EAAAhB,UAAAC,YAAAsB,cAAAP,EAAAQ,eAAA,CAAA,EAO4ChC,EAAA,CAAA,EAAAC,EAAAuB,EAAAhB,UAAAyB,KAAA,EACRjC,EAAA,CAAA,EAAAC,EAAAuB,EAAAV,WAAA,EAIrCd,EAAA,EAAA4B,EAAA,OAAAJ,EAAAU,iBAAA,EAA0B,UAAAV,EAAAW,YAAA,EACF,OAAAX,EAAAX,SAAA,EAOtBb,EAAA,EAAA4B,EAAA,OAAAJ,EAAAhB,UAAAC,YAAAsB,cAAAP,EAAAQ,eAAA,kBDlBQI,EAAoBC,EAAYC,EAAAC,CAAA,EAAAC,cAAA,CAAA,CAAA,SAEjC7B,CAA6B,GAAA,wEGoBtC8B,EAAA,EAAA,KAAA,EAAA,EAAyJ,EAAA,IAAA,EAAA,EAClHC,EAAA,EAAA,cAAA,EAAYC,EAAA,EACjDF,EAAA,EAAA,GAAA,EAAGC,EAAA,CAAA,EAAQC,EAAA,EAAI,0BAAZC,EAAA,CAAA,EAAAC,EAAAC,CAAA,6BANTL,EAAA,EAAA,MAAA,CAAA,EAAmI,EAAA,KAAA,CAAA,EAChFC,EAAA,EAAA,mCAAA,EAAiCC,EAAA,EAClFF,EAAA,EAAA,KAAA,CAAA,EACEM,EAAA,EAAAC,GAAA,EAAA,EAAA,KAAA,GAAAC,CAAA,EAMFN,EAAA,EAAK,kBANHC,EAAA,CAAA,EAAAM,EAAAC,EAAAC,UAAAC,YAAAC,QAAA,GDlBJ,IAAaC,GAA4B,IAAA,CAAnC,MAAOA,UAAoCC,CAAc,CAElDC,UAAuB,MAEvBC,YAAsB,wGAJtBH,CAA2B,IAAAI,GAA3BJ,CAA2B,CAAA,CAAA,GAAA,2BAA3BA,EAA2BK,UAAA,CAAA,CAAA,0BAAA,CAAA,EAAAC,SAAA,CAAAC,CAAA,EAAAC,MAAA,EAAAC,KAAA,GAAAC,OAAA,CAAA,CAAA,EAAA,OAAA,WAAA,cAAA,SAAA,mBAAA,WAAA,YAAA,kBAAA,cAAA,SAAA,6BAAA,oCAAA,qDAAA,2CAAA,EAAA,CAAA,YAAA,kBAAA,EAAA,QAAA,SAAA,MAAA,WAAA,MAAA,iBAAA,iBAAA,SAAA,QAAA,WAAA,mBAAA,EAAA,SAAA,EAAA,CAAA,EAAA,WAAA,mBAAA,OAAA,MAAA,EAAA,CAAA,EAAA,YAAA,iBAAA,SAAA,EAAA,CAAA,EAAA,YAAA,gBAAA,EAAA,CAAA,YAAA,GAAA,EAAA,OAAA,UAAA,MAAA,EAAA,CAAA,YAAA,sBAAA,QAAA,yBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,sBAAA,EAAA,SAAA,aAAA,KAAA,EAAA,CAAA,EAAA,YAAA,MAAA,iBAAA,SAAA,EAAA,CAAA,EAAA,OAAA,WAAA,OAAA,EAAA,CAAA,YAAA,kBAAA,EAAA,MAAA,cAAA,SAAA,0BAAA,WAAA,YAAA,kBAAA,oBAAA,cAAA,EAAA,CAAA,EAAA,YAAA,gBAAA,CAAA,EAAAC,SAAA,SAAAC,EAAAC,EAAA,CAAAD,EAAA,ICZxC1B,EAAA,EAAA,MAAA,CAAA,EAKsD,EAAA,MAAA,CAAA,EAO6D,EAAA,MAAA,CAAA,EAChE,EAAA,KAAA,CAAA,EACFC,EAAA,CAAA,EAAmBC,EAAA,EAChEF,EAAA,EAAA,KAAA,CAAA,EAAqCC,EAAA,CAAA,EAAeC,EAAA,EAAK,EAG3D0B,EAAA,EAAA,SAAA,CAAA,EAOF1B,EAAA,EAEA2B,EAAA,EAAAC,GAAA,EAAA,EAAA,MAAA,CAAA,EAYA5B,EAAA,SAhCKC,EAAA,EAAA4B,EAAA,UAAAC,EAAA,EAAAC,GAAA,CAAAN,EAAAhB,UAAAC,YAAAsB,cAAA,CAAAP,EAAAQ,gBAAAR,EAAAhB,UAAAC,YAAAsB,cAAAP,EAAAQ,eAAA,CAAA,EAO4ChC,EAAA,CAAA,EAAAC,EAAAuB,EAAAhB,UAAAyB,KAAA,EACRjC,EAAA,CAAA,EAAAC,EAAAuB,EAAAV,WAAA,EAIrCd,EAAA,EAAA4B,EAAA,OAAAJ,EAAAU,iBAAA,EAA0B,UAAAV,EAAAW,YAAA,EACF,OAAAX,EAAAX,SAAA,EAOtBb,EAAA,EAAA4B,EAAA,OAAAJ,EAAAhB,UAAAC,YAAAsB,cAAAP,EAAAQ,eAAA,kBDjBQI,EAAoBC,EAAYC,EAAAC,CAAA,EAAAC,cAAA,CAAA,CAAA,SAEjC7B,CAA4B,GAAA,wEGmBrC8B,EAAA,EAAA,KAAA,EAAA,EAAyJ,EAAA,IAAA,EAAA,EAClHC,EAAA,EAAA,cAAA,EAAYC,EAAA,EACjDF,EAAA,EAAA,GAAA,EAAGC,EAAA,CAAA,EAAQC,EAAA,EAAI,0BAAZC,EAAA,CAAA,EAAAC,EAAAC,CAAA,6BANTL,EAAA,EAAA,MAAA,CAAA,EAAmI,EAAA,KAAA,CAAA,EAChFC,EAAA,EAAA,mCAAA,EAAiCC,EAAA,EAClFF,EAAA,EAAA,KAAA,CAAA,EACEM,EAAA,EAAAC,GAAA,EAAA,EAAA,KAAA,GAAAC,CAAA,EAMFN,EAAA,EAAK,kBANHC,EAAA,CAAA,EAAAM,EAAAC,EAAAC,UAAAC,YAAAC,QAAA,GDlBJ,IAAaC,GAA6B,IAAA,CAApC,MAAOA,UAAqCC,CAAc,CAEnDC,UAAuB,MAEvBC,YAAsB,uHAJtBH,CAA4B,IAAAI,GAA5BJ,CAA4B,CAAA,CAAA,GAAA,2BAA5BA,EAA4BK,UAAA,CAAA,CAAA,2BAAA,CAAA,EAAAC,SAAA,CAAAC,CAAA,EAAAC,MAAA,EAAAC,KAAA,GAAAC,OAAA,CAAA,CAAA,EAAA,OAAA,WAAA,cAAA,SAAA,mBAAA,WAAA,YAAA,kBAAA,cAAA,SAAA,6BAAA,oCAAA,qDAAA,2CAAA,EAAA,CAAA,YAAA,kBAAA,EAAA,QAAA,SAAA,MAAA,WAAA,MAAA,iBAAA,iBAAA,SAAA,QAAA,WAAA,mBAAA,EAAA,SAAA,EAAA,CAAA,EAAA,WAAA,mBAAA,OAAA,MAAA,EAAA,CAAA,EAAA,YAAA,iBAAA,SAAA,EAAA,CAAA,EAAA,YAAA,gBAAA,EAAA,CAAA,YAAA,GAAA,EAAA,OAAA,UAAA,MAAA,EAAA,CAAA,YAAA,sBAAA,QAAA,yBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,sBAAA,EAAA,SAAA,aAAA,KAAA,EAAA,CAAA,EAAA,YAAA,MAAA,iBAAA,SAAA,EAAA,CAAA,EAAA,OAAA,WAAA,OAAA,EAAA,CAAA,YAAA,kBAAA,EAAA,MAAA,cAAA,SAAA,0BAAA,WAAA,YAAA,kBAAA,oBAAA,cAAA,EAAA,CAAA,EAAA,YAAA,gBAAA,CAAA,EAAAC,SAAA,SAAAC,EAAAC,EAAA,CAAAD,EAAA,ICZzC1B,EAAA,EAAA,MAAA,CAAA,EAKsD,EAAA,MAAA,CAAA,EAO6D,EAAA,MAAA,CAAA,EAChE,EAAA,KAAA,CAAA,EACFC,EAAA,CAAA,EAAmBC,EAAA,EAChEF,EAAA,EAAA,KAAA,CAAA,EAAqCC,EAAA,CAAA,EAAeC,EAAA,EAAK,EAG3D0B,EAAA,EAAA,SAAA,CAAA,EAOF1B,EAAA,EAEA2B,EAAA,EAAAC,GAAA,EAAA,EAAA,MAAA,CAAA,EAYA5B,EAAA,SAhCKC,EAAA,EAAA4B,EAAA,UAAAC,EAAA,EAAAC,GAAA,CAAAN,EAAAhB,UAAAC,YAAAsB,cAAA,CAAAP,EAAAQ,gBAAAR,EAAAhB,UAAAC,YAAAsB,cAAAP,EAAAQ,eAAA,CAAA,EAO4ChC,EAAA,CAAA,EAAAC,EAAAuB,EAAAhB,UAAAyB,KAAA,EACRjC,EAAA,CAAA,EAAAC,EAAAuB,EAAAV,WAAA,EAIrCd,EAAA,EAAA4B,EAAA,OAAAJ,EAAAU,iBAAA,EAA0B,UAAAV,EAAAW,YAAA,EACF,OAAAX,EAAAX,SAAA,EAOtBb,EAAA,EAAA4B,EAAA,OAAAJ,EAAAhB,UAAAC,YAAAsB,cAAAP,EAAAQ,eAAA,kBDjBQI,EAAoBC,EAAYC,EAAAC,CAAA,EAAAC,cAAA,CAAA,CAAA,SAEjC7B,CAA6B,GAAA,wEGmBtC8B,EAAA,EAAA,KAAA,EAAA,EAAyJ,EAAA,IAAA,EAAA,EAClHC,EAAA,EAAA,cAAA,EAAYC,EAAA,EACjDF,EAAA,EAAA,GAAA,EAAGC,EAAA,CAAA,EAAQC,EAAA,EAAI,0BAAZC,EAAA,CAAA,EAAAC,EAAAC,CAAA,6BANTL,EAAA,EAAA,MAAA,CAAA,EAAmI,EAAA,KAAA,CAAA,EAChFC,EAAA,EAAA,mCAAA,EAAiCC,EAAA,EAClFF,EAAA,EAAA,KAAA,CAAA,EACEM,EAAA,EAAAC,GAAA,EAAA,EAAA,KAAA,GAAAC,CAAA,EAMFN,EAAA,EAAK,kBANHC,EAAA,CAAA,EAAAM,EAAAC,EAAAC,UAAAC,YAAAC,QAAA,GDlBJ,IAAaC,GAAgC,IAAA,CAAvC,MAAOA,UAAwCC,CAAc,CAEtDC,UAAuB,MAEvBC,YAAsB,yHAJtBH,CAA+B,IAAAI,GAA/BJ,CAA+B,CAAA,CAAA,GAAA,2BAA/BA,EAA+BK,UAAA,CAAA,CAAA,8BAAA,CAAA,EAAAC,SAAA,CAAAC,CAAA,EAAAC,MAAA,EAAAC,KAAA,GAAAC,OAAA,CAAA,CAAA,EAAA,OAAA,WAAA,cAAA,SAAA,mBAAA,WAAA,YAAA,kBAAA,cAAA,SAAA,6BAAA,oCAAA,qDAAA,2CAAA,EAAA,CAAA,YAAA,kBAAA,EAAA,QAAA,SAAA,MAAA,WAAA,MAAA,iBAAA,iBAAA,SAAA,QAAA,WAAA,mBAAA,EAAA,SAAA,EAAA,CAAA,EAAA,WAAA,mBAAA,OAAA,MAAA,EAAA,CAAA,EAAA,YAAA,iBAAA,SAAA,EAAA,CAAA,EAAA,YAAA,gBAAA,EAAA,CAAA,YAAA,GAAA,EAAA,OAAA,UAAA,MAAA,EAAA,CAAA,YAAA,sBAAA,QAAA,yBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,sBAAA,EAAA,SAAA,aAAA,KAAA,EAAA,CAAA,EAAA,YAAA,MAAA,iBAAA,SAAA,EAAA,CAAA,EAAA,OAAA,WAAA,OAAA,EAAA,CAAA,YAAA,kBAAA,EAAA,MAAA,cAAA,SAAA,0BAAA,WAAA,YAAA,kBAAA,oBAAA,cAAA,EAAA,CAAA,EAAA,YAAA,gBAAA,CAAA,EAAAC,SAAA,SAAAC,EAAAC,EAAA,CAAAD,EAAA,ICZ5C1B,EAAA,EAAA,MAAA,CAAA,EAKsD,EAAA,MAAA,CAAA,EAO6D,EAAA,MAAA,CAAA,EAChE,EAAA,KAAA,CAAA,EACFC,EAAA,CAAA,EAAmBC,EAAA,EAChEF,EAAA,EAAA,KAAA,CAAA,EAAqCC,EAAA,CAAA,EAAeC,EAAA,EAAK,EAG3D0B,EAAA,EAAA,SAAA,CAAA,EAOF1B,EAAA,EAEA2B,EAAA,EAAAC,GAAA,EAAA,EAAA,MAAA,CAAA,EAYA5B,EAAA,SAhCKC,EAAA,EAAA4B,EAAA,UAAAC,EAAA,EAAAC,GAAA,CAAAN,EAAAhB,UAAAC,YAAAsB,cAAA,CAAAP,EAAAQ,gBAAAR,EAAAhB,UAAAC,YAAAsB,cAAAP,EAAAQ,eAAA,CAAA,EAO4ChC,EAAA,CAAA,EAAAC,EAAAuB,EAAAhB,UAAAyB,KAAA,EACRjC,EAAA,CAAA,EAAAC,EAAAuB,EAAAV,WAAA,EAIrCd,EAAA,EAAA4B,EAAA,OAAAJ,EAAAU,iBAAA,EAA0B,UAAAV,EAAAW,YAAA,EACF,OAAAX,EAAAX,SAAA,EAOtBb,EAAA,EAAA4B,EAAA,OAAAJ,EAAAhB,UAAAC,YAAAsB,cAAAP,EAAAQ,eAAA,kBDjBQI,EAAoBC,EAAYC,EAAAC,CAAA,EAAAC,cAAA,CAAA,CAAA,SAEjC7B,CAAgC,GAAA,wEGmBzC8B,EAAA,EAAA,KAAA,EAAA,EAAyJ,EAAA,IAAA,EAAA,EAClHC,EAAA,EAAA,cAAA,EAAYC,EAAA,EACjDF,EAAA,EAAA,GAAA,EAAGC,EAAA,CAAA,EAAQC,EAAA,EAAI,0BAAZC,EAAA,CAAA,EAAAC,EAAAC,CAAA,6BANTL,EAAA,EAAA,MAAA,CAAA,EAAmI,EAAA,KAAA,CAAA,EAChFC,EAAA,EAAA,mCAAA,EAAiCC,EAAA,EAClFF,EAAA,EAAA,KAAA,CAAA,EACEM,EAAA,EAAAC,GAAA,EAAA,EAAA,KAAA,GAAAC,CAAA,EAMFN,EAAA,EAAK,kBANHC,EAAA,CAAA,EAAAM,EAAAC,EAAAC,UAAAC,YAAAC,QAAA,GDlBJ,IAAaC,GAAgC,IAAA,CAAvC,MAAOA,UAAwCC,CAAc,CAEtDC,UAAuB,MACvBC,YAAsB,yIAHtBH,CAA+B,IAAAI,GAA/BJ,CAA+B,CAAA,CAAA,GAAA,2BAA/BA,EAA+BK,UAAA,CAAA,CAAA,8BAAA,CAAA,EAAAC,SAAA,CAAAC,CAAA,EAAAC,MAAA,EAAAC,KAAA,GAAAC,OAAA,CAAA,CAAA,EAAA,OAAA,WAAA,cAAA,SAAA,mBAAA,WAAA,YAAA,kBAAA,cAAA,SAAA,6BAAA,oCAAA,qDAAA,2CAAA,EAAA,CAAA,YAAA,kBAAA,EAAA,QAAA,SAAA,MAAA,WAAA,MAAA,iBAAA,iBAAA,SAAA,QAAA,WAAA,mBAAA,EAAA,SAAA,EAAA,CAAA,EAAA,WAAA,mBAAA,OAAA,MAAA,EAAA,CAAA,EAAA,YAAA,iBAAA,SAAA,EAAA,CAAA,EAAA,YAAA,gBAAA,EAAA,CAAA,YAAA,GAAA,EAAA,OAAA,UAAA,MAAA,EAAA,CAAA,YAAA,sBAAA,QAAA,yBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,sBAAA,EAAA,SAAA,aAAA,KAAA,EAAA,CAAA,EAAA,YAAA,MAAA,iBAAA,SAAA,EAAA,CAAA,EAAA,OAAA,WAAA,OAAA,EAAA,CAAA,YAAA,kBAAA,EAAA,MAAA,cAAA,SAAA,0BAAA,WAAA,YAAA,kBAAA,oBAAA,cAAA,EAAA,CAAA,EAAA,YAAA,gBAAA,CAAA,EAAAC,SAAA,SAAAC,EAAAC,EAAA,CAAAD,EAAA,ICZ5C1B,EAAA,EAAA,MAAA,CAAA,EAKsD,EAAA,MAAA,CAAA,EAO6D,EAAA,MAAA,CAAA,EAChE,EAAA,KAAA,CAAA,EACFC,EAAA,CAAA,EAAmBC,EAAA,EAChEF,EAAA,EAAA,KAAA,CAAA,EAAqCC,EAAA,CAAA,EAAeC,EAAA,EAAK,EAG3D0B,EAAA,EAAA,SAAA,CAAA,EAOF1B,EAAA,EAEA2B,EAAA,EAAAC,GAAA,EAAA,EAAA,MAAA,CAAA,EAYA5B,EAAA,SAhCKC,EAAA,EAAA4B,EAAA,UAAAC,EAAA,EAAAC,GAAA,CAAAN,EAAAhB,UAAAC,YAAAsB,cAAA,CAAAP,EAAAQ,gBAAAR,EAAAhB,UAAAC,YAAAsB,cAAAP,EAAAQ,eAAA,CAAA,EAO4ChC,EAAA,CAAA,EAAAC,EAAAuB,EAAAhB,UAAAyB,KAAA,EACRjC,EAAA,CAAA,EAAAC,EAAAuB,EAAAV,WAAA,EAIrCd,EAAA,EAAA4B,EAAA,OAAAJ,EAAAU,iBAAA,EAA0B,UAAAV,EAAAW,YAAA,EACF,OAAAX,EAAAX,SAAA,EAOtBb,EAAA,EAAA4B,EAAA,OAAAJ,EAAAhB,UAAAC,YAAAsB,cAAAP,EAAAQ,eAAA,kBDjBQI,EAAoBC,EAAYC,EAAAC,CAAA,EAAAC,cAAA,CAAA,CAAA,SAEjC7B,CAAgC,GAAA,wEGmBzC8B,EAAA,EAAA,KAAA,EAAA,EAAyJ,EAAA,IAAA,EAAA,EAClHC,EAAA,EAAA,cAAA,EAAYC,EAAA,EACjDF,EAAA,EAAA,GAAA,EAAGC,EAAA,CAAA,EAAQC,EAAA,EAAI,0BAAZC,EAAA,CAAA,EAAAC,EAAAC,CAAA,6BANTL,EAAA,EAAA,MAAA,CAAA,EAAmI,EAAA,KAAA,CAAA,EAChFC,EAAA,EAAA,mCAAA,EAAiCC,EAAA,EAClFF,EAAA,EAAA,KAAA,CAAA,EACEM,EAAA,EAAAC,GAAA,EAAA,EAAA,KAAA,GAAAC,CAAA,EAMFN,EAAA,EAAK,kBANHC,EAAA,CAAA,EAAAM,EAAAC,EAAAC,UAAAC,YAAAC,QAAA,GDlBJ,IAAaC,IAAoC,IAAA,CAA3C,MAAOA,UAA4CC,CAAc,CAE1DC,UAAuB,OAEvBC,YAAsB,0EAEtBC,YAAc,CACnB,CAAEC,GAAI,yBAA0BC,OAAQ,kBAAkB,CAAC,iEAPtDN,CAAmC,IAAAO,GAAnCP,CAAmC,CAAA,CAAA,GAAA,2BAAnCA,EAAmCQ,UAAA,CAAA,CAAA,kCAAA,CAAA,EAAAC,SAAA,CAAAC,CAAA,EAAAC,MAAA,EAAAC,KAAA,GAAAC,OAAA,CAAA,CAAA,EAAA,OAAA,WAAA,cAAA,SAAA,mBAAA,WAAA,YAAA,kBAAA,cAAA,SAAA,6BAAA,oCAAA,qDAAA,2CAAA,EAAA,CAAA,YAAA,kBAAA,EAAA,QAAA,SAAA,MAAA,WAAA,MAAA,iBAAA,iBAAA,SAAA,QAAA,WAAA,mBAAA,EAAA,SAAA,EAAA,CAAA,EAAA,WAAA,mBAAA,OAAA,MAAA,EAAA,CAAA,EAAA,YAAA,iBAAA,SAAA,EAAA,CAAA,EAAA,YAAA,gBAAA,EAAA,CAAA,YAAA,GAAA,EAAA,OAAA,UAAA,MAAA,EAAA,CAAA,YAAA,sBAAA,QAAA,yBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,sBAAA,EAAA,SAAA,aAAA,KAAA,EAAA,CAAA,EAAA,YAAA,MAAA,iBAAA,SAAA,EAAA,CAAA,EAAA,OAAA,WAAA,OAAA,EAAA,CAAA,YAAA,kBAAA,EAAA,MAAA,cAAA,SAAA,0BAAA,WAAA,YAAA,kBAAA,oBAAA,cAAA,EAAA,CAAA,EAAA,YAAA,gBAAA,CAAA,EAAAC,SAAA,SAAAC,EAAAC,EAAA,CAAAD,EAAA,ICZhD7B,EAAA,EAAA,MAAA,CAAA,EAKsD,EAAA,MAAA,CAAA,EAO6D,EAAA,MAAA,CAAA,EAChE,EAAA,KAAA,CAAA,EACFC,EAAA,CAAA,EAAmBC,EAAA,EAChEF,EAAA,EAAA,KAAA,CAAA,EAAqCC,EAAA,CAAA,EAAeC,EAAA,EAAK,EAG3D6B,EAAA,EAAA,SAAA,CAAA,EAOF7B,EAAA,EAEA8B,EAAA,EAAAC,GAAA,EAAA,EAAA,MAAA,CAAA,EAYA/B,EAAA,SAhCKC,EAAA,EAAA+B,EAAA,UAAAC,EAAA,EAAAC,GAAA,CAAAN,EAAAnB,UAAAC,YAAAyB,cAAA,CAAAP,EAAAQ,gBAAAR,EAAAnB,UAAAC,YAAAyB,cAAAP,EAAAQ,eAAA,CAAA,EAO4CnC,EAAA,CAAA,EAAAC,EAAA0B,EAAAnB,UAAA4B,KAAA,EACRpC,EAAA,CAAA,EAAAC,EAAA0B,EAAAb,WAAA,EAIrCd,EAAA,EAAA+B,EAAA,OAAAJ,EAAAU,iBAAA,EAA0B,UAAAV,EAAAW,YAAA,EACF,OAAAX,EAAAd,SAAA,EAOtBb,EAAA,EAAA+B,EAAA,OAAAJ,EAAAnB,UAAAC,YAAAyB,cAAAP,EAAAQ,eAAA,kBDjBQI,EAAoBC,EAAYC,EAAAC,CAAA,EAAAC,cAAA,CAAA,CAAA,SAEjChC,CAAoC,GAAA,4BGK7BiC,EAAA,EAAA,SAAA,EAAA,EACIC,EAAA,CAAA,EACJC,EAAA,0BAFgDC,EAAA,QAAAC,EAAAC,EAAA,EAC5CC,EAAA,EAAAC,EAAA,IAAAH,EAAAI,KAAA,MAAAJ,EAAAC,GAAA,GAAA,sCANhBL,EAAA,EAAA,MAAA,EAAA,EAA2E,EAAA,QAAA,EAAA,EACzCC,EAAA,EAAA,yBAAA,EAAuBC,EAAA,EACrDF,EAAA,EAAA,MAAA,EAAA,EAAgC,EAAA,SAAA,EAAA,EACuBS,EAAA,SAAA,SAAAC,EAAA,CAAAC,EAAAC,CAAA,EAAA,IAAAC,EAAAC,EAAA,EAAA,OAAAC,EAAUF,EAAAG,kBAAAN,CAAA,CAAyB,CAAA,CAAA,EAElFO,EAAA,EAAAC,GAAA,EAAA,EAAA,SAAA,EAAA,eAGJhB,EAAA,EACAF,EAAA,EAAA,MAAA,EAAA,MACIA,EAAA,EAAA,MAAA,EAAA,EACImB,EAAA,EAAA,OAAA,EAAA,EACJjB,EAAA,EAAM,EACJ,EACJ,6BAXMI,EAAA,CAAA,EAAAH,EAAA,QAAAiB,CAAA,EAEoBd,EAAA,EAAAH,EAAA,UAAAkB,EAAA,EAAA,EAAAR,EAAAS,WAAA,CAAA,4BAgBxCH,EAAA,EAAA,+BAAA,EAAA,oBAGIhB,EAAA,YAAAoB,CAAA,EAAkB,kBAAA,EAAA,4BAItBJ,EAAA,EAAA,mCAAA,EAAA,oBAGIhB,EAAA,YAAAqB,CAAA,EAAkB,kBAAA,EAAA,4BAItBL,EAAA,EAAA,4BAAA,EAAA,oBAGIhB,EAAA,YAAAsB,CAAA,EAAkB,kBAAA,EAAA,4BAItBN,EAAA,EAAA,iCAAA,EAAA,oBAGIhB,EAAA,YAAAuB,CAAA,EAAkB,kBAAA,EAAA,4BAItBP,EAAA,EAAA,2BAAA,EAAA,oBAGIhB,EAAA,YAAAwB,CAAA,EAAkB,kBAAA,EAAA,4BAItBR,EAAA,EAAA,4BAAA,EAAA,oBAGIhB,EAAA,YAAAyB,CAAA,EAAkB,kBAAA,EAAA,4BAItBT,EAAA,EAAA,+BAAA,EAAA,oBAGIhB,EAAA,YAAA0B,CAAA,EAAkB,kBAAA,EAAA,4BAItBV,EAAA,EAAA,+BAAA,EAAA,oBAGIhB,EAAA,YAAA2B,CAAA,EAAkB,kBAAA,EAAA,6BAtD1B9B,EAAA,EAAA,MAAA,EAAA,EAEIiB,EAAA,EAAAc,GAAA,EAAA,EAAA,+BAAA,EAAA,EAI6B,EAAAC,GAAA,EAAA,EAAA,mCAAA,EAAA,EAOA,EAAAC,GAAA,EAAA,EAAA,4BAAA,EAAA,EAOC,EAAAC,GAAA,EAAA,EAAA,iCAAA,EAAA,EAOA,EAAAC,GAAA,EAAA,EAAA,2BAAA,EAAA,EAOA,EAAAC,GAAA,EAAA,EAAA,4BAAA,EAAA,EAOA,EAAAC,GAAA,EAAA,EAAA,+BAAA,EAAA,EAOA,EAAAC,GAAA,EAAA,EAAA,+BAAA,EAAA,EAUlCpC,EAAA,2BAvDSI,EAAA,EAAAH,EAAA,OAAAU,EAAA0B,iBAAAC,EAAA,mBAAA,CAAA,EAOAlC,EAAA,EAAAH,EAAA,OAAAU,EAAA0B,iBAAAC,EAAA,wBAAA,CAAA,EAOAlC,EAAA,EAAAH,EAAA,OAAAU,EAAA0B,iBAAAC,EAAA,uBAAA,CAAA,EAOAlC,EAAA,EAAAH,EAAA,OAAAU,EAAA0B,iBAAAC,EAAA,qBAAA,CAAA,EAOAlC,EAAA,EAAAH,EAAA,OAAAU,EAAA0B,iBAAAC,EAAA,YAAA,CAAA,EAOAlC,EAAA,EAAAH,EAAA,OAAAU,EAAA0B,iBAAAC,EAAA,iBAAA,CAAA,EAOAlC,EAAA,EAAAH,EAAA,OAAAU,EAAA0B,iBAAAC,EAAA,iBAAA,CAAA,EAOAlC,EAAA,EAAAH,EAAA,OAAAU,EAAA0B,iBAAAC,EAAA,sBAAA,CAAA,0BAULxC,EAAA,EAAA,IAAA,EAAA,EAA2CC,EAAA,EAAA,8BAAA,EAA4BC,EAAA,GD7D3E,IAAauC,IAAkB,IAAA,CAAzB,MAAOA,CAAkB,CACVC,gBAAkB,IAAIC,EAAyB,EAAK,EAEpDC,oBAAsBC,EAAOC,CAAmB,EAChDC,aAAe,IAAIJ,EAAyD,IAAI,EAE1FK,qBAAuB,IAAIL,EAA+B,IAAI,EAE9DrB,YAA6C,KAC7C2B,UAAoD,KAEpDC,UAAQ,CACX,KAAK5B,YAAc,KAAKsB,oBAAoBO,iBAAgB,EAC5D,KAAK7B,YAAY8B,UAAUC,GAAa,CAChCA,EAAWC,OAAS,IACpB,KAAKN,qBAAqBO,KAAKF,EAAW,CAAC,EAAEhD,EAAE,EAC/C,KAAK0C,aAAaQ,KAAK,CAAElD,GAAIgD,EAAW,CAAC,EAAEhD,GAAImD,QAAS,EAAK,CAAE,EAEvE,CAAC,EAED,KAAKP,UAAY,KAAKF,aAAaU,KAC/BC,EAAOC,GAAWA,IAAY,IAAI,EAClCC,EAAUD,GACN,KAAKf,oBACAiB,aAAaF,EAAQtD,GAAIsD,EAAQH,OAAO,EACxCC,KAAKK,EAAU,IAAI,CAAC,CAAC,CAC7B,CAET,CAEOvB,iBAAiBwB,EAA2BC,EAAc,CAC7D,OAAOD,GAAME,eAAeC,KAAKC,GAASA,EAAMH,SAAWA,CAAM,CACrE,CAEOhD,kBAAkBoD,EAAY,CACjC,IAAM/D,EAAM+D,EAAMC,OAA6BC,MAC/C,KAAKtB,qBAAqBO,KAAKlD,CAAE,EACjC,KAAK0C,aAAaQ,KAAK,CAAElD,GAAAA,EAAImD,QAAS,EAAK,CAAE,CACjD,CAEOe,WAAS,CACZ,IAAMC,EAAY,KAAKxB,qBAAqBsB,MACvCE,GACL,KAAKzB,aAAaQ,KAAK,CAAElD,GAAImE,EAAWhB,QAAS,EAAI,CAAE,CAC3D,4CA5CSf,EAAkB,2BAAlBA,EAAkBgC,UAAA,CAAA,CAAA,eAAA,CAAA,EAAAC,MAAA,GAAAC,KAAA,EAAAC,OAAA,CAAA,CAAA,UAAA,EAAA,EAAA,CAAA,aAAA,oBAAA,EAAA,YAAA,gBAAA,cAAA,EAAA,CAAA,EAAA,iBAAA,EAAA,CAAA,EAAA,cAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,eAAA,EAAA,CAAA,EAAA,OAAA,SAAA,WAAA,QAAA,YAAA,kBAAA,EAAA,CAAA,EAAA,cAAA,cAAA,eAAA,iBAAA,QAAA,oBAAA,EAAA,OAAA,EAAA,CAAA,MAAA,aAAA,MAAA,GAAA,cAAA,OAAA,EAAA,MAAA,KAAA,EAAA,CAAA,QAAA,aAAA,EAAA,MAAA,EAAA,CAAA,QAAA,8CAAA,EAAA,OAAA,UAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,MAAA,kBAAA,EAAA,CAAA,EAAA,WAAA,QAAA,KAAA,EAAA,CAAA,KAAA,mBAAA,EAAA,cAAA,QAAA,SAAA,iBAAA,kBAAA,QAAA,iBAAA,+BAAA,EAAA,SAAA,OAAA,EAAA,CAAA,QAAA,0BAAA,EAAA,QAAA,EAAA,QAAA,SAAA,EAAA,CAAA,EAAA,sBAAA,WAAA,YAAA,UAAA,OAAA,eAAA,OAAA,gBAAA,EAAA,CAAA,OAAA,OAAA,UAAA,YAAA,SAAA,eAAA,EAAA,MAAA,KAAA,EAAA,CAAA,iBAAA,QAAA,kBAAA,QAAA,IAAA,6BAAA,EAAA,CAAA,EAAA,WAAA,iBAAA,EAAA,OAAA,EAAA,CAAA,EAAA,OAAA,cAAA,SAAA,QAAA,eAAA,EAAA,CAAA,QAAA,mCAAA,EAAA,YAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,4BAAA,EAAA,YAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,0CAAA,EAAA,YAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,EAAA,aAAA,iBAAA,SAAA,EAAA,YAAA,iBAAA,EAAA,CAAA,EAAA,aAAA,iBAAA,EAAA,YAAA,iBAAA,EAAA,CAAA,EAAA,aAAA,gBAAA,iBAAA,EAAA,YAAA,iBAAA,EAAA,CAAA,YAAA,SAAA,EAAA,cAAA,CAAA,EAAAC,SAAA,SAAAC,EAAAC,EAAA,IAAAD,EAAA,IChC/B9E,EAAA,EAAA,UAAA,CAAA,EAAqF,EAAA,SAAA,CAAA,EACrD,EAAA,KAAA,EACvB,EAAA,IAAA,CAAA,EACuBC,EAAA,EAAA,WAAA,EAASC,EAAA,EACjCF,EAAA,EAAA,KAAA,CAAA,EAAuBC,EAAA,EAAA,qBAAA,EAAmBC,EAAA,EAC1CF,EAAA,EAAA,IAAA,CAAA,EAAyBC,EAAA,EAAA,wEAAA,EAAsEC,EAAA,EAAI,EAEvGF,EAAA,EAAA,MAAA,CAAA,EAAmE,GAAA,SAAA,CAAA,EACvDS,EAAA,QAAA,UAAA,CAAA,OAASsE,EAAAR,UAAA,CAAW,CAAA,EACxBpD,EAAA,GAAA,MAAA,CAAA,EACAlB,EAAA,GAAA,oBAAA,EACJC,EAAA,EACAe,EAAA,GAAA+D,GAAA,GAAA,EAAA,MAAA,CAAA,gBAgBJ9E,EAAA,EAAM,EAGVe,EAAA,GAAAgE,GAAA,EAAA,EAAA,MAAA,EAAA,gBA6DAhE,EAAA,GAAAiE,GAAA,EAAA,EAAA,cAAA,KAAA,EAAAC,CAAA,EAGAjF,EAAA,oBAnFiCI,EAAA,EAAA,EAAAH,EAAA,OAAAkB,EAAA,GAAA,EAAA0D,EAAA/B,oBAAA,CAAA,EAmB3B1C,EAAA,CAAA,EAAAH,EAAA,OAAAkB,EAAA,GAAA,EAAA0D,EAAA9B,SAAA,CAAA,EAAwB,WAAAmC,CAAA,kBDXtBC,EAAYC,EAAAC,EACZC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,GAAmCC,CAAA,EAAAC,cAAA,CAAA,CAAA,SAI9BxD,CAAkB,GAAA",names:["\u0275\u0275elementStart","\u0275\u0275text","\u0275\u0275elementEnd","\u0275\u0275advance","\u0275\u0275textInterpolate","sugg_r1","\u0275\u0275repeaterCreate","AlarmFrequencyChartComponent_div_8_For_5_Template","\u0275\u0275repeaterTrackByIdentity","\u0275\u0275repeater","ctx_r1","chartInfo","suggestions","messages","AlarmFrequencyChartComponent","ChartComponent","chartType","description","__ngFactoryType__","selectors","features","\u0275\u0275InheritDefinitionFeature","decls","vars","consts","template","rf","ctx","\u0275\u0275element","\u0275\u0275template","AlarmFrequencyChartComponent_div_8_Template","\u0275\u0275property","\u0275\u0275pureFunction2","_c0","isSuggestion","showSuggestions","title","renderedChartData","chartOptions","BaseChartDirective","CommonModule","NgClass","NgIf","encapsulation","\u0275\u0275elementStart","\u0275\u0275text","\u0275\u0275elementEnd","\u0275\u0275advance","\u0275\u0275textInterpolate","sugg_r1","\u0275\u0275repeaterCreate","FallFrequencyChartComponent_div_8_For_5_Template","\u0275\u0275repeaterTrackByIdentity","\u0275\u0275repeater","ctx_r1","chartInfo","suggestions","messages","FallFrequencyChartComponent","ChartComponent","chartType","description","__ngFactoryType__","selectors","features","\u0275\u0275InheritDefinitionFeature","decls","vars","consts","template","rf","ctx","\u0275\u0275element","\u0275\u0275template","FallFrequencyChartComponent_div_8_Template","\u0275\u0275property","\u0275\u0275pureFunction2","_c0","isSuggestion","showSuggestions","title","renderedChartData","chartOptions","BaseChartDirective","CommonModule","NgClass","NgIf","encapsulation","\u0275\u0275elementStart","\u0275\u0275text","\u0275\u0275elementEnd","\u0275\u0275advance","\u0275\u0275textInterpolate","sugg_r1","\u0275\u0275repeaterCreate","PlantAnomaliesChartComponent_div_8_For_5_Template","\u0275\u0275repeaterTrackByIdentity","\u0275\u0275repeater","ctx_r1","chartInfo","suggestions","messages","PlantAnomaliesChartComponent","ChartComponent","chartType","description","__ngFactoryType__","selectors","features","\u0275\u0275InheritDefinitionFeature","decls","vars","consts","template","rf","ctx","\u0275\u0275element","\u0275\u0275template","PlantAnomaliesChartComponent_div_8_Template","\u0275\u0275property","\u0275\u0275pureFunction2","_c0","isSuggestion","showSuggestions","title","renderedChartData","chartOptions","BaseChartDirective","CommonModule","NgClass","NgIf","encapsulation","\u0275\u0275elementStart","\u0275\u0275text","\u0275\u0275elementEnd","\u0275\u0275advance","\u0275\u0275textInterpolate","sugg_r1","\u0275\u0275repeaterCreate","PresenceDetectionChartComponent_div_8_For_5_Template","\u0275\u0275repeaterTrackByIdentity","\u0275\u0275repeater","ctx_r1","chartInfo","suggestions","messages","PresenceDetectionChartComponent","ChartComponent","chartType","description","__ngFactoryType__","selectors","features","\u0275\u0275InheritDefinitionFeature","decls","vars","consts","template","rf","ctx","\u0275\u0275element","\u0275\u0275template","PresenceDetectionChartComponent_div_8_Template","\u0275\u0275property","\u0275\u0275pureFunction2","_c0","isSuggestion","showSuggestions","title","renderedChartData","chartOptions","BaseChartDirective","CommonModule","NgClass","NgIf","encapsulation","\u0275\u0275elementStart","\u0275\u0275text","\u0275\u0275elementEnd","\u0275\u0275advance","\u0275\u0275textInterpolate","sugg_r1","\u0275\u0275repeaterCreate","ProlongedPresenceChartComponent_div_8_For_5_Template","\u0275\u0275repeaterTrackByIdentity","\u0275\u0275repeater","ctx_r1","chartInfo","suggestions","messages","ProlongedPresenceChartComponent","ChartComponent","chartType","description","__ngFactoryType__","selectors","features","\u0275\u0275InheritDefinitionFeature","decls","vars","consts","template","rf","ctx","\u0275\u0275element","\u0275\u0275template","ProlongedPresenceChartComponent_div_8_Template","\u0275\u0275property","\u0275\u0275pureFunction2","_c0","isSuggestion","showSuggestions","title","renderedChartData","chartOptions","BaseChartDirective","CommonModule","NgClass","NgIf","encapsulation","\u0275\u0275elementStart","\u0275\u0275text","\u0275\u0275elementEnd","\u0275\u0275advance","\u0275\u0275textInterpolate","sugg_r1","\u0275\u0275repeaterCreate","TemperatureVariationsChartComponent_div_8_For_5_Template","\u0275\u0275repeaterTrackByIdentity","\u0275\u0275repeater","ctx_r1","chartInfo","suggestions","messages","TemperatureVariationsChartComponent","ChartComponent","chartType","description","chartColors","bg","border","__ngFactoryType__","selectors","features","\u0275\u0275InheritDefinitionFeature","decls","vars","consts","template","rf","ctx","\u0275\u0275element","\u0275\u0275template","TemperatureVariationsChartComponent_div_8_Template","\u0275\u0275property","\u0275\u0275pureFunction2","_c0","isSuggestion","showSuggestions","title","renderedChartData","chartOptions","BaseChartDirective","CommonModule","NgClass","NgIf","encapsulation","\u0275\u0275elementStart","\u0275\u0275text","\u0275\u0275elementEnd","\u0275\u0275property","apt_r3","id","\u0275\u0275advance","\u0275\u0275textInterpolate2","name","\u0275\u0275listener","$event","\u0275\u0275restoreView","_r1","ctx_r1","\u0275\u0275nextContext","\u0275\u0275resetView","onApartmentChange","\u0275\u0275template","AnalyticsComponent_div_13_option_5_Template","\u0275\u0275element","selectedId_r4","\u0275\u0275pipeBind1","apartments$","info_r5","info_r6","info_r7","info_r8","info_r9","info_r10","info_r11","info_r12","AnalyticsComponent_div_15_app_energy_consumption_chart_1_Template","AnalyticsComponent_div_15_app_temperature_variations_chart_2_Template","AnalyticsComponent_div_15_app_alarm_frequency_chart_3_Template","AnalyticsComponent_div_15_app_alarms_sent_resolved_chart_4_Template","AnalyticsComponent_div_15_app_fall_frequency_chart_5_Template","AnalyticsComponent_div_15_app_plant_anomalies_chart_6_Template","AnalyticsComponent_div_15_app_presence_detection_chart_7_Template","AnalyticsComponent_div_15_app_prolonged_presence_chart_8_Template","getChartByMetric","data_r13","AnalyticsComponent","refreshTrigger$","BehaviorSubject","analyticsApiService","inject","AnalyticsApiService","loadTrigger$","selectedApartmentId$","analytics","ngOnInit","getAllApartments","subscribe","apartments","length","next","refresh","pipe","filter","trigger","switchMap","getAnalytics","startWith","data","metric","analyticsInfo","find","chart","event","target","value","onRefresh","currentId","selectors","decls","vars","consts","template","rf","ctx","AnalyticsComponent_div_13_Template","AnalyticsComponent_div_15_Template","AnalyticsComponent_ng_template_17_Template","\u0275\u0275templateRefExtractor","loading_r14","CommonModule","NgForOf","NgIf","AlarmFrequencyChartComponent","AlarmsSentResolvedChartComponent","EnergyConsumptionChartComponent","FallFrequencyChartComponent","PlantAnomaliesChartComponent","PresenceDetectionChartComponent","ProlongedPresenceChartComponent","TemperatureVariationsChartComponent","AsyncPipe","encapsulation"]},_coverageSchema:"1a1c01bbd47fc00a2c39e90264f33305004495a9",hash:"fa9e6848a9008c362b0a0fcf8ad6a5116ae2e577"};var coverage=global[gcv]||(global[gcv]={});if(!coverage[path]||coverage[path].hash!==hash){coverage[path]=coverageData;}var actualCoverage=coverage[path];{// @ts-ignore +cov_2kwxdoldet=function(){return actualCoverage;};}return actualCoverage;}cov_2kwxdoldet();import{a as H,b as I,c as J,d as K}from"./chunk-BZP772JM.js";import{c as S}from"./chunk-UE5BCHDC.js";import"./chunk-2S5V5XEE.js";import{e as x,f as z,g as u,h as W,j as h}from"./chunk-F6OGAIBI.js";import{$a as y,Ab as p,Bb as d,Db as U,E as P,F as $,Hb as w,Ib as A,Jb as D,Ka as f,Lb as j,Oa as v,Pa as m,Q as N,V as q,W as O,X as R,ab as C,bb as _,cb as s,db as a,e as k,eb as i,fb as c,jb as G,ka as b,nb as M,pb as g,v as B,wa as r,wb as V}from"./chunk-RYTNMYZW.js";import"./chunk-VCZGUBMY.js";cov_2kwxdoldet().s[0]++;var te=(e,o)=>{cov_2kwxdoldet().f[0]++;cov_2kwxdoldet().s[1]++;return{"w-full":e,"lg:w-[70%]":o};};function ne(e,o){cov_2kwxdoldet().f[1]++;cov_2kwxdoldet().s[2]++;if((cov_2kwxdoldet().b[1][0]++,e&1)&&(cov_2kwxdoldet().b[1][1]++,a(0,"li",10)(1,"p",11),p(2,"SUGGERIMENTO"),i(),a(3,"p"),p(4),i()()),e&2){cov_2kwxdoldet().b[0][0]++;let t=(cov_2kwxdoldet().s[3]++,o.$implicit);cov_2kwxdoldet().s[4]++;r(4),d(t);}else{cov_2kwxdoldet().b[0][1]++;}}function ie(e,o){cov_2kwxdoldet().f[2]++;cov_2kwxdoldet().s[5]++;if((cov_2kwxdoldet().b[3][0]++,e&1)&&(cov_2kwxdoldet().b[3][1]++,a(0,"div",7)(1,"h1",8),p(2,"Suggerimenti Risparmio Energetico"),i(),a(3,"ul",9),C(4,ne,5,1,"li",10,y),i()()),e&2){cov_2kwxdoldet().b[2][0]++;let t=(cov_2kwxdoldet().s[6]++,g());cov_2kwxdoldet().s[7]++;r(4),_(t.chartInfo.suggestions.messages);}else{cov_2kwxdoldet().b[2][1]++;}}var L=(cov_2kwxdoldet().s[8]++,(()=>{cov_2kwxdoldet().f[3]++;class e extends I{chartType=(cov_2kwxdoldet().s[9]++,"bar");description=(cov_2kwxdoldet().s[10]++,"Dati relativi al numero di allarmi del reparto.");static ɵfac=(cov_2kwxdoldet().s[11]++,(()=>{cov_2kwxdoldet().f[4]++;let t;cov_2kwxdoldet().s[12]++;return function(n){cov_2kwxdoldet().f[5]++;cov_2kwxdoldet().s[13]++;return((cov_2kwxdoldet().b[4][0]++,t)||(cov_2kwxdoldet().b[4][1]++,t=b(e)))((cov_2kwxdoldet().b[5][0]++,n)||(cov_2kwxdoldet().b[5][1]++,e));};})());static ɵcmp=(cov_2kwxdoldet().s[14]++,f({type:e,selectors:[["app-alarm-frequency-chart"]],features:[v],decls:9,vars:10,consts:[[1,"flex","flex-col","lg:flex-row","border","border-slate-200","bg-white","shadow-sm","overflow-y-auto","rounded-3xl","h-full","[&::-webkit-scrollbar]:w-2","[&::-webkit-scrollbar-track]:my-5","[&::-webkit-scrollbar-thumb]:bg-[rgb(210,210,210)]","[&::-webkit-scrollbar-thumb]:rounded-full"],["data-test","chart-container",1,"block","h-full","p-4","bg-white","p-4","rounded-tl-3xl","rounded-bl-3xl","sticky","top-0","border-r","border-slate-200",3,"ngClass"],[1,"border-b","border-slate-200","pb-1","mb-5"],[1,"font-bold","text-slate-700","text-xl"],[1,"font-bold","text-slate-500"],["baseChart","",3,"data","options","type"],["data-test","suggestions-sidebar","class","lg:h-0 lg:w-[30%] p-3 ",4,"ngIf"],["data-test","suggestions-sidebar",1,"lg:h-0","lg:w-[30%]","p-3"],[1,"font-bold","p-2","text-slate-700","text-xl"],[1,"flex","flex-col","gap-3"],["data-test","suggestion-item",1,"p-4","rounded-2xl","border","border-[rgb(255,212,0)]","bg-white","shadow-sm","hover:shadow-md","transition-shadow","duration-200"],[1,"font-bold","text-amber-500"]],template:function(l,n){cov_2kwxdoldet().f[6]++;cov_2kwxdoldet().s[15]++;(cov_2kwxdoldet().b[6][0]++,l&1)&&(cov_2kwxdoldet().b[6][1]++,a(0,"div",0)(1,"div",1)(2,"div",2)(3,"h1",3),p(4),i(),a(5,"h2",4),p(6),i()(),c(7,"canvas",5),i(),m(8,ie,6,0,"div",6),i()),(cov_2kwxdoldet().b[7][0]++,l&2)&&(cov_2kwxdoldet().b[7][1]++,r(),s("ngClass",w(7,te,(cov_2kwxdoldet().b[8][0]++,!n.chartInfo.suggestions.isSuggestion)||(cov_2kwxdoldet().b[8][1]++,!n.showSuggestions),(cov_2kwxdoldet().b[9][0]++,n.chartInfo.suggestions.isSuggestion)&&(cov_2kwxdoldet().b[9][1]++,n.showSuggestions))),r(3),d(n.chartInfo.title),r(2),d(n.description),r(),s("data",n.renderedChartData)("options",n.chartOptions)("type",n.chartType),r(),s("ngIf",(cov_2kwxdoldet().b[10][0]++,n.chartInfo.suggestions.isSuggestion)&&(cov_2kwxdoldet().b[10][1]++,n.showSuggestions)));},dependencies:[S,h,x,u],encapsulation:2}));}cov_2kwxdoldet().s[16]++;return e;})());cov_2kwxdoldet().s[17]++;var re=(e,o)=>{cov_2kwxdoldet().f[7]++;cov_2kwxdoldet().s[18]++;return{"w-full":e,"lg:w-[70%]":o};};function ae(e,o){cov_2kwxdoldet().f[8]++;cov_2kwxdoldet().s[19]++;if((cov_2kwxdoldet().b[12][0]++,e&1)&&(cov_2kwxdoldet().b[12][1]++,a(0,"li",10)(1,"p",11),p(2,"SUGGERIMENTO"),i(),a(3,"p"),p(4),i()()),e&2){cov_2kwxdoldet().b[11][0]++;let t=(cov_2kwxdoldet().s[20]++,o.$implicit);cov_2kwxdoldet().s[21]++;r(4),d(t);}else{cov_2kwxdoldet().b[11][1]++;}}function oe(e,o){cov_2kwxdoldet().f[9]++;cov_2kwxdoldet().s[22]++;if((cov_2kwxdoldet().b[14][0]++,e&1)&&(cov_2kwxdoldet().b[14][1]++,a(0,"div",7)(1,"h1",8),p(2,"Suggerimenti Risparmio Energetico"),i(),a(3,"ul",9),C(4,ae,5,1,"li",10,y),i()()),e&2){cov_2kwxdoldet().b[13][0]++;let t=(cov_2kwxdoldet().s[23]++,g());cov_2kwxdoldet().s[24]++;r(4),_(t.chartInfo.suggestions.messages);}else{cov_2kwxdoldet().b[13][1]++;}}var Q=(cov_2kwxdoldet().s[25]++,(()=>{cov_2kwxdoldet().f[10]++;class e extends I{chartType=(cov_2kwxdoldet().s[26]++,"bar");description=(cov_2kwxdoldet().s[27]++,"Dati relativi alle cadute del reparto.");static ɵfac=(cov_2kwxdoldet().s[28]++,(()=>{cov_2kwxdoldet().f[11]++;let t;cov_2kwxdoldet().s[29]++;return function(n){cov_2kwxdoldet().f[12]++;cov_2kwxdoldet().s[30]++;return((cov_2kwxdoldet().b[15][0]++,t)||(cov_2kwxdoldet().b[15][1]++,t=b(e)))((cov_2kwxdoldet().b[16][0]++,n)||(cov_2kwxdoldet().b[16][1]++,e));};})());static ɵcmp=(cov_2kwxdoldet().s[31]++,f({type:e,selectors:[["app-fall-frequency-chart"]],features:[v],decls:9,vars:10,consts:[[1,"flex","flex-col","lg:flex-row","border","border-slate-200","bg-white","shadow-sm","overflow-y-auto","rounded-3xl","h-full","[&::-webkit-scrollbar]:w-2","[&::-webkit-scrollbar-track]:my-5","[&::-webkit-scrollbar-thumb]:bg-[rgb(210,210,210)]","[&::-webkit-scrollbar-thumb]:rounded-full"],["data-test","chart-container",1,"block","h-full","p-4","bg-white","p-4","rounded-tl-3xl","rounded-bl-3xl","sticky","top-0","border-r","border-slate-200",3,"ngClass"],[1,"border-b","border-slate-200","pb-1","mb-5"],[1,"font-bold","text-slate-700","text-xl"],[1,"font-bold","text-slate-500"],["baseChart","",3,"data","options","type"],["data-test","suggestions-sidebar","class","lg:h-0 lg:w-[30%] p-3 ",4,"ngIf"],["data-test","suggestions-sidebar",1,"lg:h-0","lg:w-[30%]","p-3"],[1,"font-bold","p-2","text-slate-700","text-xl"],[1,"flex","flex-col","gap-3"],["data-test","suggestion-item",1,"p-4","rounded-2xl","border","border-[rgb(255,212,0)]","bg-white","shadow-sm","hover:shadow-md","transition-shadow","duration-200"],[1,"font-bold","text-amber-500"]],template:function(l,n){cov_2kwxdoldet().f[13]++;cov_2kwxdoldet().s[32]++;(cov_2kwxdoldet().b[17][0]++,l&1)&&(cov_2kwxdoldet().b[17][1]++,a(0,"div",0)(1,"div",1)(2,"div",2)(3,"h1",3),p(4),i(),a(5,"h2",4),p(6),i()(),c(7,"canvas",5),i(),m(8,oe,6,0,"div",6),i()),(cov_2kwxdoldet().b[18][0]++,l&2)&&(cov_2kwxdoldet().b[18][1]++,r(),s("ngClass",w(7,re,(cov_2kwxdoldet().b[19][0]++,!n.chartInfo.suggestions.isSuggestion)||(cov_2kwxdoldet().b[19][1]++,!n.showSuggestions),(cov_2kwxdoldet().b[20][0]++,n.chartInfo.suggestions.isSuggestion)&&(cov_2kwxdoldet().b[20][1]++,n.showSuggestions))),r(3),d(n.chartInfo.title),r(2),d(n.description),r(),s("data",n.renderedChartData)("options",n.chartOptions)("type",n.chartType),r(),s("ngIf",(cov_2kwxdoldet().b[21][0]++,n.chartInfo.suggestions.isSuggestion)&&(cov_2kwxdoldet().b[21][1]++,n.showSuggestions)));},dependencies:[S,h,x,u],encapsulation:2}));}cov_2kwxdoldet().s[33]++;return e;})());cov_2kwxdoldet().s[34]++;var se=(e,o)=>{cov_2kwxdoldet().f[14]++;cov_2kwxdoldet().s[35]++;return{"w-full":e,"lg:w-[70%]":o};};function le(e,o){cov_2kwxdoldet().f[15]++;cov_2kwxdoldet().s[36]++;if((cov_2kwxdoldet().b[23][0]++,e&1)&&(cov_2kwxdoldet().b[23][1]++,a(0,"li",10)(1,"p",11),p(2,"SUGGERIMENTO"),i(),a(3,"p"),p(4),i()()),e&2){cov_2kwxdoldet().b[22][0]++;let t=(cov_2kwxdoldet().s[37]++,o.$implicit);cov_2kwxdoldet().s[38]++;r(4),d(t);}else{cov_2kwxdoldet().b[22][1]++;}}function pe(e,o){cov_2kwxdoldet().f[16]++;cov_2kwxdoldet().s[39]++;if((cov_2kwxdoldet().b[25][0]++,e&1)&&(cov_2kwxdoldet().b[25][1]++,a(0,"div",7)(1,"h1",8),p(2,"Suggerimenti Risparmio Energetico"),i(),a(3,"ul",9),C(4,le,5,1,"li",10,y),i()()),e&2){cov_2kwxdoldet().b[24][0]++;let t=(cov_2kwxdoldet().s[40]++,g());cov_2kwxdoldet().s[41]++;r(4),_(t.chartInfo.suggestions.messages);}else{cov_2kwxdoldet().b[24][1]++;}}var X=(cov_2kwxdoldet().s[42]++,(()=>{cov_2kwxdoldet().f[17]++;class e extends I{chartType=(cov_2kwxdoldet().s[43]++,"bar");description=(cov_2kwxdoldet().s[44]++,"Dati relativi alle anomalie totali dell'appartamento.");static ɵfac=(cov_2kwxdoldet().s[45]++,(()=>{cov_2kwxdoldet().f[18]++;let t;cov_2kwxdoldet().s[46]++;return function(n){cov_2kwxdoldet().f[19]++;cov_2kwxdoldet().s[47]++;return((cov_2kwxdoldet().b[26][0]++,t)||(cov_2kwxdoldet().b[26][1]++,t=b(e)))((cov_2kwxdoldet().b[27][0]++,n)||(cov_2kwxdoldet().b[27][1]++,e));};})());static ɵcmp=(cov_2kwxdoldet().s[48]++,f({type:e,selectors:[["app-plant-anomalies-chart"]],features:[v],decls:9,vars:10,consts:[[1,"flex","flex-col","lg:flex-row","border","border-slate-200","bg-white","shadow-sm","overflow-y-auto","rounded-3xl","h-full","[&::-webkit-scrollbar]:w-2","[&::-webkit-scrollbar-track]:my-5","[&::-webkit-scrollbar-thumb]:bg-[rgb(210,210,210)]","[&::-webkit-scrollbar-thumb]:rounded-full"],["data-test","chart-container",1,"block","h-full","p-4","bg-white","p-4","rounded-tl-3xl","rounded-bl-3xl","sticky","top-0","border-r","border-slate-200",3,"ngClass"],[1,"border-b","border-slate-200","pb-1","mb-5"],[1,"font-bold","text-slate-700","text-xl"],[1,"font-bold","text-slate-500"],["baseChart","",3,"data","options","type"],["data-test","suggestions-sidebar","class","lg:h-0 lg:w-[30%] p-3 ",4,"ngIf"],["data-test","suggestions-sidebar",1,"lg:h-0","lg:w-[30%]","p-3"],[1,"font-bold","p-2","text-slate-700","text-xl"],[1,"flex","flex-col","gap-3"],["data-test","suggestion-item",1,"p-4","rounded-2xl","border","border-[rgb(255,212,0)]","bg-white","shadow-sm","hover:shadow-md","transition-shadow","duration-200"],[1,"font-bold","text-amber-500"]],template:function(l,n){cov_2kwxdoldet().f[20]++;cov_2kwxdoldet().s[49]++;(cov_2kwxdoldet().b[28][0]++,l&1)&&(cov_2kwxdoldet().b[28][1]++,a(0,"div",0)(1,"div",1)(2,"div",2)(3,"h1",3),p(4),i(),a(5,"h2",4),p(6),i()(),c(7,"canvas",5),i(),m(8,pe,6,0,"div",6),i()),(cov_2kwxdoldet().b[29][0]++,l&2)&&(cov_2kwxdoldet().b[29][1]++,r(),s("ngClass",w(7,se,(cov_2kwxdoldet().b[30][0]++,!n.chartInfo.suggestions.isSuggestion)||(cov_2kwxdoldet().b[30][1]++,!n.showSuggestions),(cov_2kwxdoldet().b[31][0]++,n.chartInfo.suggestions.isSuggestion)&&(cov_2kwxdoldet().b[31][1]++,n.showSuggestions))),r(3),d(n.chartInfo.title),r(2),d(n.description),r(),s("data",n.renderedChartData)("options",n.chartOptions)("type",n.chartType),r(),s("ngIf",(cov_2kwxdoldet().b[32][0]++,n.chartInfo.suggestions.isSuggestion)&&(cov_2kwxdoldet().b[32][1]++,n.showSuggestions)));},dependencies:[S,h,x,u],encapsulation:2}));}cov_2kwxdoldet().s[50]++;return e;})());cov_2kwxdoldet().s[51]++;var de=(e,o)=>{cov_2kwxdoldet().f[21]++;cov_2kwxdoldet().s[52]++;return{"w-full":e,"lg:w-[70%]":o};};function ce(e,o){cov_2kwxdoldet().f[22]++;cov_2kwxdoldet().s[53]++;if((cov_2kwxdoldet().b[34][0]++,e&1)&&(cov_2kwxdoldet().b[34][1]++,a(0,"li",10)(1,"p",11),p(2,"SUGGERIMENTO"),i(),a(3,"p"),p(4),i()()),e&2){cov_2kwxdoldet().b[33][0]++;let t=(cov_2kwxdoldet().s[54]++,o.$implicit);cov_2kwxdoldet().s[55]++;r(4),d(t);}else{cov_2kwxdoldet().b[33][1]++;}}function me(e,o){cov_2kwxdoldet().f[23]++;cov_2kwxdoldet().s[56]++;if((cov_2kwxdoldet().b[36][0]++,e&1)&&(cov_2kwxdoldet().b[36][1]++,a(0,"div",7)(1,"h1",8),p(2,"Suggerimenti Risparmio Energetico"),i(),a(3,"ul",9),C(4,ce,5,1,"li",10,y),i()()),e&2){cov_2kwxdoldet().b[35][0]++;let t=(cov_2kwxdoldet().s[57]++,g());cov_2kwxdoldet().s[58]++;r(4),_(t.chartInfo.suggestions.messages);}else{cov_2kwxdoldet().b[35][1]++;}}var Y=(cov_2kwxdoldet().s[59]++,(()=>{cov_2kwxdoldet().f[24]++;class e extends I{chartType=(cov_2kwxdoldet().s[60]++,"bar");description=(cov_2kwxdoldet().s[61]++,"Dati relativi ai sensori di presenza dell'appartamento.");static ɵfac=(cov_2kwxdoldet().s[62]++,(()=>{cov_2kwxdoldet().f[25]++;let t;cov_2kwxdoldet().s[63]++;return function(n){cov_2kwxdoldet().f[26]++;cov_2kwxdoldet().s[64]++;return((cov_2kwxdoldet().b[37][0]++,t)||(cov_2kwxdoldet().b[37][1]++,t=b(e)))((cov_2kwxdoldet().b[38][0]++,n)||(cov_2kwxdoldet().b[38][1]++,e));};})());static ɵcmp=(cov_2kwxdoldet().s[65]++,f({type:e,selectors:[["app-presence-detection-chart"]],features:[v],decls:9,vars:10,consts:[[1,"flex","flex-col","lg:flex-row","border","border-slate-200","bg-white","shadow-sm","overflow-y-auto","rounded-3xl","h-full","[&::-webkit-scrollbar]:w-2","[&::-webkit-scrollbar-track]:my-5","[&::-webkit-scrollbar-thumb]:bg-[rgb(210,210,210)]","[&::-webkit-scrollbar-thumb]:rounded-full"],["data-test","chart-container",1,"block","h-full","p-4","bg-white","p-4","rounded-tl-3xl","rounded-bl-3xl","sticky","top-0","border-r","border-slate-200",3,"ngClass"],[1,"border-b","border-slate-200","pb-1","mb-5"],[1,"font-bold","text-slate-700","text-xl"],[1,"font-bold","text-slate-500"],["baseChart","",3,"data","options","type"],["data-test","suggestions-sidebar","class","lg:h-0 lg:w-[30%] p-3 ",4,"ngIf"],["data-test","suggestions-sidebar",1,"lg:h-0","lg:w-[30%]","p-3"],[1,"font-bold","p-2","text-slate-700","text-xl"],[1,"flex","flex-col","gap-3"],["data-test","suggestion-item",1,"p-4","rounded-2xl","border","border-[rgb(255,212,0)]","bg-white","shadow-sm","hover:shadow-md","transition-shadow","duration-200"],[1,"font-bold","text-amber-500"]],template:function(l,n){cov_2kwxdoldet().f[27]++;cov_2kwxdoldet().s[66]++;(cov_2kwxdoldet().b[39][0]++,l&1)&&(cov_2kwxdoldet().b[39][1]++,a(0,"div",0)(1,"div",1)(2,"div",2)(3,"h1",3),p(4),i(),a(5,"h2",4),p(6),i()(),c(7,"canvas",5),i(),m(8,me,6,0,"div",6),i()),(cov_2kwxdoldet().b[40][0]++,l&2)&&(cov_2kwxdoldet().b[40][1]++,r(),s("ngClass",w(7,de,(cov_2kwxdoldet().b[41][0]++,!n.chartInfo.suggestions.isSuggestion)||(cov_2kwxdoldet().b[41][1]++,!n.showSuggestions),(cov_2kwxdoldet().b[42][0]++,n.chartInfo.suggestions.isSuggestion)&&(cov_2kwxdoldet().b[42][1]++,n.showSuggestions))),r(3),d(n.chartInfo.title),r(2),d(n.description),r(),s("data",n.renderedChartData)("options",n.chartOptions)("type",n.chartType),r(),s("ngIf",(cov_2kwxdoldet().b[43][0]++,n.chartInfo.suggestions.isSuggestion)&&(cov_2kwxdoldet().b[43][1]++,n.showSuggestions)));},dependencies:[S,h,x,u],encapsulation:2}));}cov_2kwxdoldet().s[67]++;return e;})());cov_2kwxdoldet().s[68]++;var ge=(e,o)=>{cov_2kwxdoldet().f[28]++;cov_2kwxdoldet().s[69]++;return{"w-full":e,"lg:w-[70%]":o};};function fe(e,o){cov_2kwxdoldet().f[29]++;cov_2kwxdoldet().s[70]++;if((cov_2kwxdoldet().b[45][0]++,e&1)&&(cov_2kwxdoldet().b[45][1]++,a(0,"li",10)(1,"p",11),p(2,"SUGGERIMENTO"),i(),a(3,"p"),p(4),i()()),e&2){cov_2kwxdoldet().b[44][0]++;let t=(cov_2kwxdoldet().s[71]++,o.$implicit);cov_2kwxdoldet().s[72]++;r(4),d(t);}else{cov_2kwxdoldet().b[44][1]++;}}function ue(e,o){cov_2kwxdoldet().f[30]++;cov_2kwxdoldet().s[73]++;if((cov_2kwxdoldet().b[47][0]++,e&1)&&(cov_2kwxdoldet().b[47][1]++,a(0,"div",7)(1,"h1",8),p(2,"Suggerimenti Risparmio Energetico"),i(),a(3,"ul",9),C(4,fe,5,1,"li",10,y),i()()),e&2){cov_2kwxdoldet().b[46][0]++;let t=(cov_2kwxdoldet().s[74]++,g());cov_2kwxdoldet().s[75]++;r(4),_(t.chartInfo.suggestions.messages);}else{cov_2kwxdoldet().b[46][1]++;}}var Z=(cov_2kwxdoldet().s[76]++,(()=>{cov_2kwxdoldet().f[31]++;class e extends I{chartType=(cov_2kwxdoldet().s[77]++,"bar");description=(cov_2kwxdoldet().s[78]++,"Presenze prolungate rilevate dai sensori all'interno dell'appartamento.");static ɵfac=(cov_2kwxdoldet().s[79]++,(()=>{cov_2kwxdoldet().f[32]++;let t;cov_2kwxdoldet().s[80]++;return function(n){cov_2kwxdoldet().f[33]++;cov_2kwxdoldet().s[81]++;return((cov_2kwxdoldet().b[48][0]++,t)||(cov_2kwxdoldet().b[48][1]++,t=b(e)))((cov_2kwxdoldet().b[49][0]++,n)||(cov_2kwxdoldet().b[49][1]++,e));};})());static ɵcmp=(cov_2kwxdoldet().s[82]++,f({type:e,selectors:[["app-prolonged-presence-chart"]],features:[v],decls:9,vars:10,consts:[[1,"flex","flex-col","lg:flex-row","border","border-slate-200","bg-white","shadow-sm","overflow-y-auto","rounded-3xl","h-full","[&::-webkit-scrollbar]:w-2","[&::-webkit-scrollbar-track]:my-5","[&::-webkit-scrollbar-thumb]:bg-[rgb(210,210,210)]","[&::-webkit-scrollbar-thumb]:rounded-full"],["data-test","chart-container",1,"block","h-full","p-4","bg-white","p-4","rounded-tl-3xl","rounded-bl-3xl","sticky","top-0","border-r","border-slate-200",3,"ngClass"],[1,"border-b","border-slate-200","pb-1","mb-5"],[1,"font-bold","text-slate-700","text-xl"],[1,"font-bold","text-slate-500"],["baseChart","",3,"data","options","type"],["data-test","suggestions-sidebar","class","lg:h-0 lg:w-[30%] p-3 ",4,"ngIf"],["data-test","suggestions-sidebar",1,"lg:h-0","lg:w-[30%]","p-3"],[1,"font-bold","p-2","text-slate-700","text-xl"],[1,"flex","flex-col","gap-3"],["data-test","suggestion-item",1,"p-4","rounded-2xl","border","border-[rgb(255,212,0)]","bg-white","shadow-sm","hover:shadow-md","transition-shadow","duration-200"],[1,"font-bold","text-amber-500"]],template:function(l,n){cov_2kwxdoldet().f[34]++;cov_2kwxdoldet().s[83]++;(cov_2kwxdoldet().b[50][0]++,l&1)&&(cov_2kwxdoldet().b[50][1]++,a(0,"div",0)(1,"div",1)(2,"div",2)(3,"h1",3),p(4),i(),a(5,"h2",4),p(6),i()(),c(7,"canvas",5),i(),m(8,ue,6,0,"div",6),i()),(cov_2kwxdoldet().b[51][0]++,l&2)&&(cov_2kwxdoldet().b[51][1]++,r(),s("ngClass",w(7,ge,(cov_2kwxdoldet().b[52][0]++,!n.chartInfo.suggestions.isSuggestion)||(cov_2kwxdoldet().b[52][1]++,!n.showSuggestions),(cov_2kwxdoldet().b[53][0]++,n.chartInfo.suggestions.isSuggestion)&&(cov_2kwxdoldet().b[53][1]++,n.showSuggestions))),r(3),d(n.chartInfo.title),r(2),d(n.description),r(),s("data",n.renderedChartData)("options",n.chartOptions)("type",n.chartType),r(),s("ngIf",(cov_2kwxdoldet().b[54][0]++,n.chartInfo.suggestions.isSuggestion)&&(cov_2kwxdoldet().b[54][1]++,n.showSuggestions)));},dependencies:[S,h,x,u],encapsulation:2}));}cov_2kwxdoldet().s[84]++;return e;})());cov_2kwxdoldet().s[85]++;var he=(e,o)=>{cov_2kwxdoldet().f[35]++;cov_2kwxdoldet().s[86]++;return{"w-full":e,"lg:w-[70%]":o};};function be(e,o){cov_2kwxdoldet().f[36]++;cov_2kwxdoldet().s[87]++;if((cov_2kwxdoldet().b[56][0]++,e&1)&&(cov_2kwxdoldet().b[56][1]++,a(0,"li",10)(1,"p",11),p(2,"SUGGERIMENTO"),i(),a(3,"p"),p(4),i()()),e&2){cov_2kwxdoldet().b[55][0]++;let t=(cov_2kwxdoldet().s[88]++,o.$implicit);cov_2kwxdoldet().s[89]++;r(4),d(t);}else{cov_2kwxdoldet().b[55][1]++;}}function ve(e,o){cov_2kwxdoldet().f[37]++;cov_2kwxdoldet().s[90]++;if((cov_2kwxdoldet().b[58][0]++,e&1)&&(cov_2kwxdoldet().b[58][1]++,a(0,"div",7)(1,"h1",8),p(2,"Suggerimenti Risparmio Energetico"),i(),a(3,"ul",9),C(4,be,5,1,"li",10,y),i()()),e&2){cov_2kwxdoldet().b[57][0]++;let t=(cov_2kwxdoldet().s[91]++,g());cov_2kwxdoldet().s[92]++;r(4),_(t.chartInfo.suggestions.messages);}else{cov_2kwxdoldet().b[57][1]++;}}var ee=(cov_2kwxdoldet().s[93]++,(()=>{cov_2kwxdoldet().f[38]++;class e extends I{chartType=(cov_2kwxdoldet().s[94]++,"line");description=(cov_2kwxdoldet().s[95]++,"Dati rilevati dai sensori di temperatura all'interno dell'appartamento.");chartColors=(cov_2kwxdoldet().s[96]++,[{bg:"rgba(239, 97, 68, 0.5)",border:"rgb(239, 97, 68)"}]);static ɵfac=(cov_2kwxdoldet().s[97]++,(()=>{cov_2kwxdoldet().f[39]++;let t;cov_2kwxdoldet().s[98]++;return function(n){cov_2kwxdoldet().f[40]++;cov_2kwxdoldet().s[99]++;return((cov_2kwxdoldet().b[59][0]++,t)||(cov_2kwxdoldet().b[59][1]++,t=b(e)))((cov_2kwxdoldet().b[60][0]++,n)||(cov_2kwxdoldet().b[60][1]++,e));};})());static ɵcmp=(cov_2kwxdoldet().s[100]++,f({type:e,selectors:[["app-temperature-variations-chart"]],features:[v],decls:9,vars:10,consts:[[1,"flex","flex-col","lg:flex-row","border","border-slate-200","bg-white","shadow-sm","overflow-y-auto","rounded-3xl","h-full","[&::-webkit-scrollbar]:w-2","[&::-webkit-scrollbar-track]:my-5","[&::-webkit-scrollbar-thumb]:bg-[rgb(210,210,210)]","[&::-webkit-scrollbar-thumb]:rounded-full"],["data-test","chart-container",1,"block","h-full","p-4","bg-white","p-4","rounded-tl-3xl","rounded-bl-3xl","sticky","top-0","border-r","border-slate-200",3,"ngClass"],[1,"border-b","border-slate-200","pb-1","mb-5"],[1,"font-bold","text-slate-700","text-xl"],[1,"font-bold","text-slate-500"],["baseChart","",3,"data","options","type"],["data-test","suggestions-sidebar","class","lg:h-0 lg:w-[30%] p-3 ",4,"ngIf"],["data-test","suggestions-sidebar",1,"lg:h-0","lg:w-[30%]","p-3"],[1,"font-bold","p-2","text-slate-700","text-xl"],[1,"flex","flex-col","gap-3"],["data-test","suggestion-item",1,"p-4","rounded-2xl","border","border-[rgb(255,212,0)]","bg-white","shadow-sm","hover:shadow-md","transition-shadow","duration-200"],[1,"font-bold","text-amber-500"]],template:function(l,n){cov_2kwxdoldet().f[41]++;cov_2kwxdoldet().s[101]++;(cov_2kwxdoldet().b[61][0]++,l&1)&&(cov_2kwxdoldet().b[61][1]++,a(0,"div",0)(1,"div",1)(2,"div",2)(3,"h1",3),p(4),i(),a(5,"h2",4),p(6),i()(),c(7,"canvas",5),i(),m(8,ve,6,0,"div",6),i()),(cov_2kwxdoldet().b[62][0]++,l&2)&&(cov_2kwxdoldet().b[62][1]++,r(),s("ngClass",w(7,he,(cov_2kwxdoldet().b[63][0]++,!n.chartInfo.suggestions.isSuggestion)||(cov_2kwxdoldet().b[63][1]++,!n.showSuggestions),(cov_2kwxdoldet().b[64][0]++,n.chartInfo.suggestions.isSuggestion)&&(cov_2kwxdoldet().b[64][1]++,n.showSuggestions))),r(3),d(n.chartInfo.title),r(2),d(n.description),r(),s("data",n.renderedChartData)("options",n.chartOptions)("type",n.chartType),r(),s("ngIf",(cov_2kwxdoldet().b[65][0]++,n.chartInfo.suggestions.isSuggestion)&&(cov_2kwxdoldet().b[65][1]++,n.showSuggestions)));},dependencies:[S,h,x,u],encapsulation:2}));}cov_2kwxdoldet().s[102]++;return e;})());function ye(e,o){cov_2kwxdoldet().f[42]++;cov_2kwxdoldet().s[103]++;if((cov_2kwxdoldet().b[67][0]++,e&1)&&(cov_2kwxdoldet().b[67][1]++,a(0,"option",19),p(1),i()),e&2){cov_2kwxdoldet().b[66][0]++;let t=(cov_2kwxdoldet().s[104]++,o.$implicit);cov_2kwxdoldet().s[105]++;s("value",t.id),r(),U(" ",t.name," - ",t.id," ");}else{cov_2kwxdoldet().b[66][1]++;}}function Ce(e,o){cov_2kwxdoldet().f[43]++;cov_2kwxdoldet().s[106]++;if(e&1){cov_2kwxdoldet().b[68][0]++;let t=(cov_2kwxdoldet().s[107]++,G());cov_2kwxdoldet().s[108]++;a(0,"div",11)(1,"label",12),p(2,"Appartamento monitorato"),i(),a(3,"div",13)(4,"select",14),M("change",function(n){cov_2kwxdoldet().f[44]++;cov_2kwxdoldet().s[109]++;q(t);let F=(cov_2kwxdoldet().s[110]++,g());cov_2kwxdoldet().s[111]++;return O(F.onApartmentChange(n));}),m(5,ye,2,3,"option",15),A(6,"async"),i(),a(7,"div",16),R(),a(8,"svg",17),c(9,"path",18),i()()()();}else{cov_2kwxdoldet().b[68][1]++;}cov_2kwxdoldet().s[112]++;if(e&2){cov_2kwxdoldet().b[69][0]++;let t=(cov_2kwxdoldet().s[113]++,o.ngIf),l=(cov_2kwxdoldet().s[114]++,g());cov_2kwxdoldet().s[115]++;r(4),s("value",t),r(),s("ngForOf",D(6,2,l.apartments$));}else{cov_2kwxdoldet().b[69][1]++;}}function _e(e,o){cov_2kwxdoldet().f[45]++;cov_2kwxdoldet().s[116]++;if((cov_2kwxdoldet().b[71][0]++,e&1)&&(cov_2kwxdoldet().b[71][1]++,c(0,"app-energy-consumption-chart",24)),e&2){cov_2kwxdoldet().b[70][0]++;let t=(cov_2kwxdoldet().s[117]++,o.ngIf);cov_2kwxdoldet().s[118]++;s("chartInfo",t)("showSuggestions",!0);}else{cov_2kwxdoldet().b[70][1]++;}}function we(e,o){cov_2kwxdoldet().f[46]++;cov_2kwxdoldet().s[119]++;if((cov_2kwxdoldet().b[73][0]++,e&1)&&(cov_2kwxdoldet().b[73][1]++,c(0,"app-temperature-variations-chart",25)),e&2){cov_2kwxdoldet().b[72][0]++;let t=(cov_2kwxdoldet().s[120]++,o.ngIf);cov_2kwxdoldet().s[121]++;s("chartInfo",t)("showSuggestions",!0);}else{cov_2kwxdoldet().b[72][1]++;}}function xe(e,o){cov_2kwxdoldet().f[47]++;cov_2kwxdoldet().s[122]++;if((cov_2kwxdoldet().b[75][0]++,e&1)&&(cov_2kwxdoldet().b[75][1]++,c(0,"app-alarm-frequency-chart",26)),e&2){cov_2kwxdoldet().b[74][0]++;let t=(cov_2kwxdoldet().s[123]++,o.ngIf);cov_2kwxdoldet().s[124]++;s("chartInfo",t)("showSuggestions",!1);}else{cov_2kwxdoldet().b[74][1]++;}}function Ie(e,o){cov_2kwxdoldet().f[48]++;cov_2kwxdoldet().s[125]++;if((cov_2kwxdoldet().b[77][0]++,e&1)&&(cov_2kwxdoldet().b[77][1]++,c(0,"app-alarms-sent-resolved-chart",26)),e&2){cov_2kwxdoldet().b[76][0]++;let t=(cov_2kwxdoldet().s[126]++,o.ngIf);cov_2kwxdoldet().s[127]++;s("chartInfo",t)("showSuggestions",!1);}else{cov_2kwxdoldet().b[76][1]++;}}function Se(e,o){cov_2kwxdoldet().f[49]++;cov_2kwxdoldet().s[128]++;if((cov_2kwxdoldet().b[79][0]++,e&1)&&(cov_2kwxdoldet().b[79][1]++,c(0,"app-fall-frequency-chart",26)),e&2){cov_2kwxdoldet().b[78][0]++;let t=(cov_2kwxdoldet().s[129]++,o.ngIf);cov_2kwxdoldet().s[130]++;s("chartInfo",t)("showSuggestions",!1);}else{cov_2kwxdoldet().b[78][1]++;}}function Ee(e,o){cov_2kwxdoldet().f[50]++;cov_2kwxdoldet().s[131]++;if((cov_2kwxdoldet().b[81][0]++,e&1)&&(cov_2kwxdoldet().b[81][1]++,c(0,"app-plant-anomalies-chart",26)),e&2){cov_2kwxdoldet().b[80][0]++;let t=(cov_2kwxdoldet().s[132]++,o.ngIf);cov_2kwxdoldet().s[133]++;s("chartInfo",t)("showSuggestions",!1);}else{cov_2kwxdoldet().b[80][1]++;}}function Te(e,o){cov_2kwxdoldet().f[51]++;cov_2kwxdoldet().s[134]++;if((cov_2kwxdoldet().b[83][0]++,e&1)&&(cov_2kwxdoldet().b[83][1]++,c(0,"app-presence-detection-chart",26)),e&2){cov_2kwxdoldet().b[82][0]++;let t=(cov_2kwxdoldet().s[135]++,o.ngIf);cov_2kwxdoldet().s[136]++;s("chartInfo",t)("showSuggestions",!1);}else{cov_2kwxdoldet().b[82][1]++;}}function Fe(e,o){cov_2kwxdoldet().f[52]++;cov_2kwxdoldet().s[137]++;if((cov_2kwxdoldet().b[85][0]++,e&1)&&(cov_2kwxdoldet().b[85][1]++,c(0,"app-prolonged-presence-chart",26)),e&2){cov_2kwxdoldet().b[84][0]++;let t=(cov_2kwxdoldet().s[138]++,o.ngIf);cov_2kwxdoldet().s[139]++;s("chartInfo",t)("showSuggestions",!1);}else{cov_2kwxdoldet().b[84][1]++;}}function ke(e,o){cov_2kwxdoldet().f[53]++;cov_2kwxdoldet().s[140]++;if((cov_2kwxdoldet().b[87][0]++,e&1)&&(cov_2kwxdoldet().b[87][1]++,a(0,"div",20),m(1,_e,1,2,"app-energy-consumption-chart",21)(2,we,1,2,"app-temperature-variations-chart",22)(3,xe,1,2,"app-alarm-frequency-chart",23)(4,Ie,1,2,"app-alarms-sent-resolved-chart",23)(5,Se,1,2,"app-fall-frequency-chart",23)(6,Ee,1,2,"app-plant-anomalies-chart",23)(7,Te,1,2,"app-presence-detection-chart",23)(8,Fe,1,2,"app-prolonged-presence-chart",23),i()),e&2){cov_2kwxdoldet().b[86][0]++;let t=(cov_2kwxdoldet().s[141]++,o.ngIf),l=(cov_2kwxdoldet().s[142]++,g());cov_2kwxdoldet().s[143]++;r(),s("ngIf",l.getChartByMetric(t,"plant-consumption")),r(),s("ngIf",l.getChartByMetric(t,"thermostat-temperature")),r(),s("ngIf",l.getChartByMetric(t,"ward-alarms-frequency")),r(),s("ngIf",l.getChartByMetric(t,"ward-resolved-alarm")),r(),s("ngIf",l.getChartByMetric(t,"ward-falls")),r(),s("ngIf",l.getChartByMetric(t,"plant-anomalies")),r(),s("ngIf",l.getChartByMetric(t,"sensor-presence")),r(),s("ngIf",l.getChartByMetric(t,"sensor-long-presence"));}else{cov_2kwxdoldet().b[86][1]++;}}function Ae(e,o){cov_2kwxdoldet().f[54]++;cov_2kwxdoldet().s[144]++;(cov_2kwxdoldet().b[88][0]++,e&1)&&(cov_2kwxdoldet().b[88][1]++,a(0,"p",27),p(1,"Caricamento dati in corso..."),i());}var ft=(cov_2kwxdoldet().s[145]++,(()=>{cov_2kwxdoldet().f[55]++;class e{refreshTrigger$=(cov_2kwxdoldet().s[146]++,new k(!1));analyticsApiService=(cov_2kwxdoldet().s[147]++,N(H));loadTrigger$=(cov_2kwxdoldet().s[148]++,new k(null));selectedApartmentId$=(cov_2kwxdoldet().s[149]++,new k(null));apartments$=(cov_2kwxdoldet().s[150]++,null);analytics=(cov_2kwxdoldet().s[151]++,null);ngOnInit(){cov_2kwxdoldet().f[56]++;cov_2kwxdoldet().s[152]++;this.apartments$=this.analyticsApiService.getAllApartments(),this.apartments$.subscribe(t=>{cov_2kwxdoldet().f[57]++;cov_2kwxdoldet().s[153]++;(cov_2kwxdoldet().b[89][0]++,t.length>0)&&(cov_2kwxdoldet().b[89][1]++,this.selectedApartmentId$.next(t[0].id),this.loadTrigger$.next({id:t[0].id,refresh:!1}));}),this.analytics=this.loadTrigger$.pipe(B(t=>{cov_2kwxdoldet().f[58]++;cov_2kwxdoldet().s[154]++;return t!==null;}),$(t=>{cov_2kwxdoldet().f[59]++;cov_2kwxdoldet().s[155]++;return this.analyticsApiService.getAnalytics(t.id,t.refresh).pipe(P(null));}));}getChartByMetric(t,l){cov_2kwxdoldet().f[60]++;cov_2kwxdoldet().s[156]++;return t?.analyticsInfo?.find(n=>{cov_2kwxdoldet().f[61]++;cov_2kwxdoldet().s[157]++;return n.metric===l;});}onApartmentChange(t){cov_2kwxdoldet().f[62]++;let l=(cov_2kwxdoldet().s[158]++,t.target.value);cov_2kwxdoldet().s[159]++;this.selectedApartmentId$.next(l),this.loadTrigger$.next({id:l,refresh:!1});}onRefresh(){cov_2kwxdoldet().f[63]++;let t=(cov_2kwxdoldet().s[160]++,this.selectedApartmentId$.value);cov_2kwxdoldet().s[161]++;(cov_2kwxdoldet().b[90][0]++,t)&&(cov_2kwxdoldet().b[90][1]++,this.loadTrigger$.next({id:t,refresh:!0}));}static ɵfac=(cov_2kwxdoldet().s[162]++,function(l){cov_2kwxdoldet().f[64]++;cov_2kwxdoldet().s[163]++;return new((cov_2kwxdoldet().b[91][0]++,l)||(cov_2kwxdoldet().b[91][1]++,e))();});static ɵcmp=(cov_2kwxdoldet().s[164]++,f({type:e,selectors:[["app-analytics"]],decls:19,vars:7,consts:[["loading",""],["aria-label","Analytics reparto",1,"care-page","care-dot-grid","sidebar-page"],[1,"care-page__hero"],[1,"care-eyebrow"],[1,"care-title"],[1,"care-subtitle"],[1,"flex","w-full","flex-col","gap-3","sm:w-auto","sm:min-w-[20rem]"],[1,"care-button","inline-flex","items-center","justify-center","gap-2","whitespace-nowrap",3,"click"],["src","reload.png","alt","","aria-hidden","true",1,"h-5","w-5"],["class","care-field",4,"ngIf"],["class","grid grid-cols-6 w-full gap-8 content-start",4,"ngIf","ngIfElse"],[1,"care-field"],["for","apartment-select"],[1,"relative","group","z-0"],["id","apartment-select",1,"care-select","block","w-full","cursor-pointer","appearance-none","pr-10","transition-all","group-hover:border-amber-300",3,"change","value"],["class","bg-white text-slate-700",3,"value",4,"ngFor","ngForOf"],[1,"pointer-events-none","absolute","inset-y-0","right-0","flex","items-center","px-3","text-amber-600"],["fill","none","viewBox","0 0 24 24","stroke","currentColor",1,"h-4","w-4"],["stroke-linecap","round","stroke-linejoin","round","d","M19.5 8.25l-7.5 7.5-7.5-7.5"],[1,"bg-white","text-slate-700",3,"value"],[1,"grid","grid-cols-6","w-full","gap-8","content-start"],["class","col-span-6 2xl:col-span-3 w-full",3,"chartInfo","showSuggestions",4,"ngIf"],["class","col-span-6 2xl:col-span-3",3,"chartInfo","showSuggestions",4,"ngIf"],["class","col-span-6 lg:col-span-3 2xl:col-span-2",3,"chartInfo","showSuggestions",4,"ngIf"],[1,"col-span-6","2xl:col-span-3","w-full",3,"chartInfo","showSuggestions"],[1,"col-span-6","2xl:col-span-3",3,"chartInfo","showSuggestions"],[1,"col-span-6","lg:col-span-3","2xl:col-span-2",3,"chartInfo","showSuggestions"],["aria-live","polite",1,"care-loading"]],template:function(l,n){cov_2kwxdoldet().f[65]++;cov_2kwxdoldet().s[165]++;if((cov_2kwxdoldet().b[93][0]++,l&1)&&(cov_2kwxdoldet().b[93][1]++,a(0,"section",1)(1,"header",2)(2,"div")(3,"p",3),p(4,"Analytics"),i(),a(5,"h1",4),p(6,"Cruscotto analitico"),i(),a(7,"p",5),p(8,"Andamento energetico, presenza e anomalie per appartamento monitorato."),i()(),a(9,"div",6)(10,"button",7),M("click",function(){cov_2kwxdoldet().f[66]++;cov_2kwxdoldet().s[166]++;return n.onRefresh();}),c(11,"img",8),p(12," Aggiorna grafici "),i(),m(13,Ce,10,4,"div",9),A(14,"async"),i()(),m(15,ke,9,8,"div",10),A(16,"async"),m(17,Ae,2,0,"ng-template",null,0,j),i()),l&2){cov_2kwxdoldet().b[92][0]++;let F=(cov_2kwxdoldet().s[167]++,V(18));cov_2kwxdoldet().s[168]++;r(13),s("ngIf",D(14,3,n.selectedApartmentId$)),r(2),s("ngIf",D(16,5,n.analytics))("ngIfElse",F);}else{cov_2kwxdoldet().b[92][1]++;}},dependencies:[h,z,u,L,J,K,Q,X,Y,Z,ee,W],encapsulation:2}));}cov_2kwxdoldet().s[169]++;return e;})());export{ft as AnalyticsComponent};//# sourceMappingURL=chunk-IGULPMRL.js.map +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJhIiwicCIsImkiLCJlIiwiY292XzJrd3hkb2xkZXQiLCJiIiwidCIsInMiLCJvIiwiJGltcGxpY2l0IiwiciIsImQiLCJpZSIsImYiLCJDIiwibmUiLCJ5IiwiZyIsIl8iLCJjaGFydEluZm8iLCJzdWdnZXN0aW9ucyIsIm1lc3NhZ2VzIiwiTCIsIkkiLCJjaGFydFR5cGUiLCJkZXNjcmlwdGlvbiIsIsm1ZmFjIiwibiIsIsm1Y21wIiwidHlwZSIsInNlbGVjdG9ycyIsImZlYXR1cmVzIiwidiIsImRlY2xzIiwidmFycyIsImNvbnN0cyIsInRlbXBsYXRlIiwibCIsImMiLCJtIiwidyIsInRlIiwiaXNTdWdnZXN0aW9uIiwic2hvd1N1Z2dlc3Rpb25zIiwidGl0bGUiLCJyZW5kZXJlZENoYXJ0RGF0YSIsImNoYXJ0T3B0aW9ucyIsImRlcGVuZGVuY2llcyIsIlMiLCJoIiwieCIsInUiLCJlbmNhcHN1bGF0aW9uIiwicmUiLCJhZSIsIm9lIiwiUSIsInNlIiwibGUiLCJwZSIsIlgiLCJkZSIsImNlIiwibWUiLCJZIiwiZ2UiLCJmZSIsInVlIiwiWiIsImhlIiwiYmUiLCJ2ZSIsImVlIiwiY2hhcnRDb2xvcnMiLCJiZyIsImJvcmRlciIsInllIiwiaWQiLCJVIiwibmFtZSIsIkNlIiwiRyIsIk0iLCJxIiwiRiIsIk8iLCJvbkFwYXJ0bWVudENoYW5nZSIsIkEiLCJSIiwibmdJZiIsIkQiLCJhcGFydG1lbnRzJCIsIl9lIiwid2UiLCJ4ZSIsIkllIiwiU2UiLCJFZSIsIlRlIiwiRmUiLCJrZSIsImdldENoYXJ0QnlNZXRyaWMiLCJBZSIsImZ0IiwicmVmcmVzaFRyaWdnZXIkIiwiayIsImFuYWx5dGljc0FwaVNlcnZpY2UiLCJOIiwiSCIsImxvYWRUcmlnZ2VyJCIsInNlbGVjdGVkQXBhcnRtZW50SWQkIiwiYW5hbHl0aWNzIiwibmdPbkluaXQiLCJnZXRBbGxBcGFydG1lbnRzIiwic3Vic2NyaWJlIiwibGVuZ3RoIiwibmV4dCIsInJlZnJlc2giLCJwaXBlIiwiQiIsIiQiLCJnZXRBbmFseXRpY3MiLCJQIiwiYW5hbHl0aWNzSW5mbyIsImZpbmQiLCJtZXRyaWMiLCJ0YXJnZXQiLCJ2YWx1ZSIsIm9uUmVmcmVzaCIsImoiLCJWIiwieiIsIkoiLCJLIiwiVyIsIkFuYWx5dGljc0NvbXBvbmVudCJdLCJzb3VyY2VzIjpbInNyYy9hcHAvZmVhdHVyZXMvYW5hbHl0aWNzL2NvbXBvbmVudHMvYWxhcm0tZnJlcXVlbmN5LWNoYXJ0L2FsYXJtLWZyZXF1ZW5jeS1jaGFydC5jb21wb25lbnQudHMiLCJzcmMvYXBwL2ZlYXR1cmVzL2FuYWx5dGljcy9jb21wb25lbnRzL3NoYXJlZC9jaGFydC1hbmFseXRpY3MuaHRtbCIsInNyYy9hcHAvZmVhdHVyZXMvYW5hbHl0aWNzL2NvbXBvbmVudHMvZmFsbC1mcmVxdWVuY3ktY2hhcnQvZmFsbC1mcmVxdWVuY3ktY2hhcnQuY29tcG9uZW50LnRzIiwic3JjL2FwcC9mZWF0dXJlcy9hbmFseXRpY3MvY29tcG9uZW50cy9wbGFudC1hbm9tYWxpZXMtY2hhcnQvcGxhbnQtYW5vbWFsaWVzLWNoYXJ0LmNvbXBvbmVudC50cyIsInNyYy9hcHAvZmVhdHVyZXMvYW5hbHl0aWNzL2NvbXBvbmVudHMvcHJlc2VuY2UtZGV0ZWN0aW9uLWNoYXJ0L3ByZXNlbmNlLWRldGVjdGlvbi1jaGFydC5jb21wb25lbnQudHMiLCJzcmMvYXBwL2ZlYXR1cmVzL2FuYWx5dGljcy9jb21wb25lbnRzL3Byb2xvbmdlZC1wcmVzZW5jZS1jaGFydC9wcm9sb25nZWQtcHJlc2VuY2UtY2hhcnQuY29tcG9uZW50LnRzIiwic3JjL2FwcC9mZWF0dXJlcy9hbmFseXRpY3MvY29tcG9uZW50cy90ZW1wZXJhdHVyZS12YXJpYXRpb25zLWNoYXJ0L3RlbXBlcmF0dXJlLXZhcmlhdGlvbnMtY2hhcnQuY29tcG9uZW50LnRzIiwic3JjL2FwcC9mZWF0dXJlcy9hbmFseXRpY3MvYW5hbHl0aWNzLmNvbXBvbmVudC50cyIsInNyYy9hcHAvZmVhdHVyZXMvYW5hbHl0aWNzL2FuYWx5dGljcy5jb21wb25lbnQuaHRtbCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDaGFydENvbXBvbmVudCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvY2hhcnQtY29tcG9uZW50JztcbmltcG9ydCB7IENoYXJ0VHlwZSB9IGZyb20gJ2NoYXJ0LmpzJztcbmltcG9ydCB7IEJhc2VDaGFydERpcmVjdGl2ZSB9IGZyb20gJ25nMi1jaGFydHMnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuQENvbXBvbmVudCh7IFxuICAgIHNlbGVjdG9yOiAnYXBwLWFsYXJtLWZyZXF1ZW5jeS1jaGFydCcsIFxuICAgIHN0YW5kYWxvbmU6IHRydWUsIFxuICAgIGltcG9ydHM6IFtCYXNlQ2hhcnREaXJlY3RpdmUsIENvbW1vbk1vZHVsZV0sXG4gICAgdGVtcGxhdGVVcmw6ICcuLi9zaGFyZWQvY2hhcnQtYW5hbHl0aWNzLmh0bWwnfSlcbmV4cG9ydCBjbGFzcyBBbGFybUZyZXF1ZW5jeUNoYXJ0Q29tcG9uZW50IGV4dGVuZHMgQ2hhcnRDb21wb25lbnQge1xuICAgIG92ZXJyaWRlIGNoYXJ0VHlwZTogQ2hhcnRUeXBlID0gJ2Jhcic7XG5cbiAgICBvdmVycmlkZSBkZXNjcmlwdGlvbjogc3RyaW5nID0gXCJEYXRpIHJlbGF0aXZpIGFsIG51bWVybyBkaSBhbGxhcm1pIGRlbCByZXBhcnRvLlwiO1xufVxuXG5cbiAgIiwiPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgbGc6ZmxleC1yb3cgYm9yZGVyIGJvcmRlci1zbGF0ZS0yMDAgYmctd2hpdGUgc2hhZG93LXNtIG92ZXJmbG93LXktYXV0byByb3VuZGVkLTN4bCBoLWZ1bGxcblxuICAgICAgICAgICBbJjo6LXdlYmtpdC1zY3JvbGxiYXJdOnctMlxuICAgICAgICAgICBbJjo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2tdOm15LTVcbiAgICAgICAgICAgWyY6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iXTpiZy1bcmdiKDIxMCwyMTAsMjEwKV1cbiAgICAgICAgICAgWyY6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iXTpyb3VuZGVkLWZ1bGxcIj5cblxuPGRpdiBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgJ3ctZnVsbCc6ICFjaGFydEluZm8uc3VnZ2VzdGlvbnMuaXNTdWdnZXN0aW9uIHx8ICFzaG93U3VnZ2VzdGlvbnMsXG4gICAgICAgICAgJ2xnOnctWzcwJV0nOiBjaGFydEluZm8uc3VnZ2VzdGlvbnMuaXNTdWdnZXN0aW9uICYmIHNob3dTdWdnZXN0aW9uc1xuICAgICAgIH1cIlxuICAgICAgIGRhdGEtdGVzdD1cImNoYXJ0LWNvbnRhaW5lclwiXG4gICAgICAgY2xhc3M9XCJibG9jayBoLWZ1bGwgcC00IGJnLXdoaXRlIHAtNCAgcm91bmRlZC10bC0zeGwgcm91bmRlZC1ibC0zeGwgc3RpY2t5IHRvcC0wIGJvcmRlci1yIGJvcmRlci1zbGF0ZS0yMDBcIj5cbiAgPGRpdiBjbGFzcz1cImJvcmRlci1iIGJvcmRlci1zbGF0ZS0yMDAgcGItMSBtYi01XCI+XG4gICAgPGgxIGNsYXNzPVwiZm9udC1ib2xkIHRleHQtc2xhdGUtNzAwIHRleHQteGxcIj57e2NoYXJ0SW5mby50aXRsZX19PC9oMT5cbiAgICA8aDIgY2xhc3M9XCJmb250LWJvbGQgdGV4dC1zbGF0ZS01MDBcIj57e2Rlc2NyaXB0aW9ufX08L2gyPlxuICA8L2Rpdj5cblxuICA8Y2FudmFzIGJhc2VDaGFydFxuICAgIFtkYXRhXT1cInJlbmRlcmVkQ2hhcnREYXRhXCJcbiAgICBbb3B0aW9uc109XCJjaGFydE9wdGlvbnNcIlxuICAgIFt0eXBlXT1cImNoYXJ0VHlwZVwiPlxuICA8L2NhbnZhcz5cblxuXG48L2Rpdj5cblxuPGRpdiAqbmdJZj1cImNoYXJ0SW5mby5zdWdnZXN0aW9ucy5pc1N1Z2dlc3Rpb24gICYmIHNob3dTdWdnZXN0aW9uc1wiIGRhdGEtdGVzdD1cInN1Z2dlc3Rpb25zLXNpZGViYXJcIiBjbGFzcz1cImxnOmgtMCBsZzp3LVszMCVdIHAtMyBcIj5cbiAgPGgxIGNsYXNzPVwiZm9udC1ib2xkIHAtMiB0ZXh0LXNsYXRlLTcwMCB0ZXh0LXhsXCI+U3VnZ2VyaW1lbnRpIFJpc3Bhcm1pbyBFbmVyZ2V0aWNvPC9oMT5cbiAgPHVsIGNsYXNzPVwiZmxleCBmbGV4LWNvbCBnYXAtM1wiPlxuICAgIEBmb3Ioc3VnZyBvZiBjaGFydEluZm8uc3VnZ2VzdGlvbnMubWVzc2FnZXM7IHRyYWNrIHN1Z2cpe1xuICAgIDxsaSBkYXRhLXRlc3Q9XCJzdWdnZXN0aW9uLWl0ZW1cIiBjbGFzcz1cInAtNCByb3VuZGVkLTJ4bCBib3JkZXIgYm9yZGVyLVtyZ2IoMjU1LDIxMiwwKV0gYmctd2hpdGUgc2hhZG93LXNtIGhvdmVyOnNoYWRvdy1tZCB0cmFuc2l0aW9uLXNoYWRvdyBkdXJhdGlvbi0yMDBcIj5cbiAgICAgIDxwIGNsYXNzPVwiZm9udC1ib2xkIHRleHQtYW1iZXItNTAwIFwiPlNVR0dFUklNRU5UTzwvcD5cbiAgICAgIDxwPnt7c3VnZ319PC9wPlxuICAgIDwvbGk+XG4gIH1cbiAgPC91bD5cbjwvZGl2PlxuXG48L2Rpdj5cblxuIiwiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ2hhcnRDb21wb25lbnQgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2NoYXJ0LWNvbXBvbmVudCc7XG5pbXBvcnQgeyBDaGFydEluZm9EdG8gfSBmcm9tICcuLi8uLi9tb2RlbHMvY2hhcnQtaW5mby5tb2RlbCc7XG5pbXBvcnQgeyBDaGFydFR5cGUgfSBmcm9tICdjaGFydC5qcyc7XG5pbXBvcnQgeyBCYXNlQ2hhcnREaXJlY3RpdmUgfSBmcm9tICduZzItY2hhcnRzJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbkBDb21wb25lbnQoeyBcbiAgICBzZWxlY3RvcjogJ2FwcC1mYWxsLWZyZXF1ZW5jeS1jaGFydCcsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSwgXG4gICAgaW1wb3J0czogW0Jhc2VDaGFydERpcmVjdGl2ZSwgQ29tbW9uTW9kdWxlXSxcbiAgICB0ZW1wbGF0ZVVybDogJy4uL3NoYXJlZC9jaGFydC1hbmFseXRpY3MuaHRtbCd9KVxuZXhwb3J0IGNsYXNzIEZhbGxGcmVxdWVuY3lDaGFydENvbXBvbmVudCBleHRlbmRzIENoYXJ0Q29tcG9uZW50IHtcblxuICAgIG92ZXJyaWRlIGNoYXJ0VHlwZTogQ2hhcnRUeXBlID0gJ2Jhcic7XG5cbiAgICBvdmVycmlkZSBkZXNjcmlwdGlvbjogc3RyaW5nID0gXCJEYXRpIHJlbGF0aXZpIGFsbGUgY2FkdXRlIGRlbCByZXBhcnRvLlwiO1xuXG5cbiAgICBcbn1cbiIsImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENoYXJ0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9jaGFydC1jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2hhcnRJbmZvRHRvIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2NoYXJ0LWluZm8ubW9kZWwnO1xuaW1wb3J0IHsgQ2hhcnRUeXBlIH0gZnJvbSAnY2hhcnQuanMnO1xuaW1wb3J0IHsgQmFzZUNoYXJ0RGlyZWN0aXZlIH0gZnJvbSAnbmcyLWNoYXJ0cyc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5AQ29tcG9uZW50KHsgXG4gICAgc2VsZWN0b3I6ICdhcHAtcGxhbnQtYW5vbWFsaWVzLWNoYXJ0JywgXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSwgXG4gICAgaW1wb3J0czogW0Jhc2VDaGFydERpcmVjdGl2ZSwgQ29tbW9uTW9kdWxlXSxcbiAgICB0ZW1wbGF0ZVVybDogJy4uL3NoYXJlZC9jaGFydC1hbmFseXRpY3MuaHRtbCd9KVxuZXhwb3J0IGNsYXNzIFBsYW50QW5vbWFsaWVzQ2hhcnRDb21wb25lbnQgZXh0ZW5kcyBDaGFydENvbXBvbmVudCB7XG5cbiAgICBvdmVycmlkZSBjaGFydFR5cGU6IENoYXJ0VHlwZSA9ICdiYXInO1xuXG4gICAgb3ZlcnJpZGUgZGVzY3JpcHRpb246IHN0cmluZyA9IFwiRGF0aSByZWxhdGl2aSBhbGxlIGFub21hbGllIHRvdGFsaSBkZWxsJ2FwcGFydGFtZW50by5cIjtcblxufVxuIiwiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ2hhcnRDb21wb25lbnQgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2NoYXJ0LWNvbXBvbmVudCc7XG5pbXBvcnQgeyBDaGFydEluZm9EdG8gfSBmcm9tICcuLi8uLi9tb2RlbHMvY2hhcnQtaW5mby5tb2RlbCc7XG5pbXBvcnQgeyBDaGFydFR5cGUgfSBmcm9tICdjaGFydC5qcyc7XG5pbXBvcnQgeyBCYXNlQ2hhcnREaXJlY3RpdmUgfSBmcm9tICduZzItY2hhcnRzJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbkBDb21wb25lbnQoeyBcbiAgICBzZWxlY3RvcjogJ2FwcC1wcmVzZW5jZS1kZXRlY3Rpb24tY2hhcnQnLCBcbiAgICBzdGFuZGFsb25lOiB0cnVlLCBcbiAgICBpbXBvcnRzOiBbQmFzZUNoYXJ0RGlyZWN0aXZlLCBDb21tb25Nb2R1bGVdLFxuICAgIHRlbXBsYXRlVXJsOiAnLi4vc2hhcmVkL2NoYXJ0LWFuYWx5dGljcy5odG1sJ30pXG5leHBvcnQgY2xhc3MgUHJlc2VuY2VEZXRlY3Rpb25DaGFydENvbXBvbmVudCBleHRlbmRzIENoYXJ0Q29tcG9uZW50IHtcblxuICAgIG92ZXJyaWRlIGNoYXJ0VHlwZTogQ2hhcnRUeXBlID0gJ2Jhcic7XG5cbiAgICBvdmVycmlkZSBkZXNjcmlwdGlvbjogc3RyaW5nID0gXCJEYXRpIHJlbGF0aXZpIGFpIHNlbnNvcmkgZGkgcHJlc2VuemEgZGVsbCdhcHBhcnRhbWVudG8uXCI7XG5cbn1cbiIsImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENoYXJ0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9jaGFydC1jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2hhcnRJbmZvRHRvIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2NoYXJ0LWluZm8ubW9kZWwnO1xuaW1wb3J0IHsgQ2hhcnRUeXBlIH0gZnJvbSAnY2hhcnQuanMnO1xuaW1wb3J0IHsgQmFzZUNoYXJ0RGlyZWN0aXZlIH0gZnJvbSAnbmcyLWNoYXJ0cyc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5AQ29tcG9uZW50KHsgXG4gICAgc2VsZWN0b3I6ICdhcHAtcHJvbG9uZ2VkLXByZXNlbmNlLWNoYXJ0JywgXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSwgXG4gICAgaW1wb3J0czogW0Jhc2VDaGFydERpcmVjdGl2ZSwgQ29tbW9uTW9kdWxlXSxcbiAgICB0ZW1wbGF0ZVVybDogJy4uL3NoYXJlZC9jaGFydC1hbmFseXRpY3MuaHRtbCd9KVxuZXhwb3J0IGNsYXNzIFByb2xvbmdlZFByZXNlbmNlQ2hhcnRDb21wb25lbnQgZXh0ZW5kcyBDaGFydENvbXBvbmVudCB7XG5cbiAgICBvdmVycmlkZSBjaGFydFR5cGU6IENoYXJ0VHlwZSA9ICdiYXInO1xuICAgIG92ZXJyaWRlIGRlc2NyaXB0aW9uOiBzdHJpbmcgPSBcIlByZXNlbnplIHByb2x1bmdhdGUgcmlsZXZhdGUgZGFpIHNlbnNvcmkgYWxsJ2ludGVybm8gZGVsbCdhcHBhcnRhbWVudG8uXCI7XG5cbn1cbiIsImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENoYXJ0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9jaGFydC1jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2hhcnRJbmZvRHRvIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2NoYXJ0LWluZm8ubW9kZWwnO1xuaW1wb3J0IHsgQ2hhcnRUeXBlIH0gZnJvbSAnY2hhcnQuanMnO1xuaW1wb3J0IHsgQmFzZUNoYXJ0RGlyZWN0aXZlIH0gZnJvbSAnbmcyLWNoYXJ0cyc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5AQ29tcG9uZW50KHsgXG4gICAgc2VsZWN0b3I6ICdhcHAtdGVtcGVyYXR1cmUtdmFyaWF0aW9ucy1jaGFydCcsIFxuICAgIHN0YW5kYWxvbmU6IHRydWUsIFxuICAgIGltcG9ydHM6IFtCYXNlQ2hhcnREaXJlY3RpdmUsIENvbW1vbk1vZHVsZV0sXG4gICAgdGVtcGxhdGVVcmw6ICcuLi9zaGFyZWQvY2hhcnQtYW5hbHl0aWNzLmh0bWwnfSlcbmV4cG9ydCBjbGFzcyBUZW1wZXJhdHVyZVZhcmlhdGlvbnNDaGFydENvbXBvbmVudCBleHRlbmRzIENoYXJ0Q29tcG9uZW50IHtcblxuICAgIG92ZXJyaWRlIGNoYXJ0VHlwZTogQ2hhcnRUeXBlID0gJ2xpbmUnO1xuXG4gICAgb3ZlcnJpZGUgZGVzY3JpcHRpb246IHN0cmluZyA9IFwiRGF0aSByaWxldmF0aSBkYWkgc2Vuc29yaSBkaSB0ZW1wZXJhdHVyYSBhbGwnaW50ZXJubyBkZWxsJ2FwcGFydGFtZW50by5cIjtcblxuICAgIG92ZXJyaWRlIGNoYXJ0Q29sb3JzID0gW1xuICAgICAgICB7IGJnOiAncmdiYSgyMzksIDk3LCA2OCwgMC41KScsIGJvcmRlcjogJ3JnYigyMzksIDk3LCA2OCknfVxuICAgIF07XG59XG4iLCJpbXBvcnQgeyBDb21wb25lbnQsIGluamVjdCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBbmFseXRpY3NBcGlTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9hbmFseXRpY3MtYXBpLnNlcnZpY2UnO1xuaW1wb3J0IHsgQW5hbHl0aWNzRHRvIH0gZnJvbSAnLi9tb2RlbHMvYW5hbHl0aWNzLm1vZGVsJztcbmltcG9ydCB7IENoYXJ0SW5mb0R0byB9IGZyb20gJy4vbW9kZWxzL2NoYXJ0LWluZm8ubW9kZWwnO1xuaW1wb3J0IHsgQWxhcm1GcmVxdWVuY3lDaGFydENvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9hbGFybS1mcmVxdWVuY3ktY2hhcnQvYWxhcm0tZnJlcXVlbmN5LWNoYXJ0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBbGFybXNTZW50UmVzb2x2ZWRDaGFydENvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9hbGFybXMtc2VudC1yZXNvbHZlZC1jaGFydC9hbGFybXMtc2VudC1yZXNvbHZlZC1jaGFydC5jb21wb25lbnQnO1xuaW1wb3J0IHsgRW5lcmd5Q29uc3VtcHRpb25DaGFydENvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9lbmVyZ3ktY29uc3VtcHRpb24tY2hhcnQvZW5lcmd5LWNvbnN1bXB0aW9uLWNoYXJ0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBGYWxsRnJlcXVlbmN5Q2hhcnRDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvZmFsbC1mcmVxdWVuY3ktY2hhcnQvZmFsbC1mcmVxdWVuY3ktY2hhcnQuY29tcG9uZW50JztcbmltcG9ydCB7IFBsYW50QW5vbWFsaWVzQ2hhcnRDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvcGxhbnQtYW5vbWFsaWVzLWNoYXJ0L3BsYW50LWFub21hbGllcy1jaGFydC5jb21wb25lbnQnO1xuaW1wb3J0IHsgUHJlc2VuY2VEZXRlY3Rpb25DaGFydENvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9wcmVzZW5jZS1kZXRlY3Rpb24tY2hhcnQvcHJlc2VuY2UtZGV0ZWN0aW9uLWNoYXJ0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQcm9sb25nZWRQcmVzZW5jZUNoYXJ0Q29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3Byb2xvbmdlZC1wcmVzZW5jZS1jaGFydC9wcm9sb25nZWQtcHJlc2VuY2UtY2hhcnQuY29tcG9uZW50JztcbmltcG9ydCB7IFRlbXBlcmF0dXJlVmFyaWF0aW9uc0NoYXJ0Q29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3RlbXBlcmF0dXJlLXZhcmlhdGlvbnMtY2hhcnQvdGVtcGVyYXR1cmUtdmFyaWF0aW9ucy1jaGFydC5jb21wb25lbnQnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgc3dpdGNoTWFwLCBmaWx0ZXIsIEJlaGF2aW9yU3ViamVjdCwgc3RhcnRXaXRoLCBjb21iaW5lTGF0ZXN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgUGxhbnREdG8gfSBmcm9tICcuLi9hcGFydG1lbnQtbW9uaXRvci9tb2RlbHMvcGxhbnQtcmVzcG9uc2UubW9kZWwnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2FwcC1hbmFseXRpY3MnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBDb21tb25Nb2R1bGUsXG4gICAgICAgIEFsYXJtRnJlcXVlbmN5Q2hhcnRDb21wb25lbnQsXG4gICAgICAgIEFsYXJtc1NlbnRSZXNvbHZlZENoYXJ0Q29tcG9uZW50LFxuICAgICAgICBFbmVyZ3lDb25zdW1wdGlvbkNoYXJ0Q29tcG9uZW50LFxuICAgICAgICBGYWxsRnJlcXVlbmN5Q2hhcnRDb21wb25lbnQsXG4gICAgICAgIFBsYW50QW5vbWFsaWVzQ2hhcnRDb21wb25lbnQsXG4gICAgICAgIFByZXNlbmNlRGV0ZWN0aW9uQ2hhcnRDb21wb25lbnQsXG4gICAgICAgIFByb2xvbmdlZFByZXNlbmNlQ2hhcnRDb21wb25lbnQsXG4gICAgICAgIFRlbXBlcmF0dXJlVmFyaWF0aW9uc0NoYXJ0Q29tcG9uZW50XG4gICAgXSxcbiAgICB0ZW1wbGF0ZVVybDogJy4vYW5hbHl0aWNzLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBBbmFseXRpY3NDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcmVmcmVzaFRyaWdnZXIkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IGFuYWx5dGljc0FwaVNlcnZpY2UgPSBpbmplY3QoQW5hbHl0aWNzQXBpU2VydmljZSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBsb2FkVHJpZ2dlciQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHsgaWQ6IHN0cmluZzsgcmVmcmVzaDogYm9vbGVhbiB9IHwgbnVsbD4obnVsbCk7XG5cbiAgICBwdWJsaWMgc2VsZWN0ZWRBcGFydG1lbnRJZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZyB8IG51bGw+KG51bGwpO1xuICAgIFxuICAgIHB1YmxpYyBhcGFydG1lbnRzJDogT2JzZXJ2YWJsZTxQbGFudER0b1tdPiB8IG51bGwgPSBudWxsO1xuICAgIHB1YmxpYyBhbmFseXRpY3M6IE9ic2VydmFibGU8QW5hbHl0aWNzRHRvIHwgbnVsbD4gfCBudWxsID0gbnVsbDtcblxuICAgIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5hcGFydG1lbnRzJCA9IHRoaXMuYW5hbHl0aWNzQXBpU2VydmljZS5nZXRBbGxBcGFydG1lbnRzKCk7XG4gICAgICAgIHRoaXMuYXBhcnRtZW50cyQuc3Vic2NyaWJlKGFwYXJ0bWVudHMgPT4ge1xuICAgICAgICAgICAgaWYgKGFwYXJ0bWVudHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRBcGFydG1lbnRJZCQubmV4dChhcGFydG1lbnRzWzBdLmlkKTtcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRUcmlnZ2VyJC5uZXh0KHsgaWQ6IGFwYXJ0bWVudHNbMF0uaWQsIHJlZnJlc2g6IGZhbHNlIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmFuYWx5dGljcyA9IHRoaXMubG9hZFRyaWdnZXIkLnBpcGUoXG4gICAgICAgICAgICBmaWx0ZXIodHJpZ2dlciA9PiB0cmlnZ2VyICE9PSBudWxsKSxcbiAgICAgICAgICAgIHN3aXRjaE1hcCh0cmlnZ2VyID0+XG4gICAgICAgICAgICAgICAgdGhpcy5hbmFseXRpY3NBcGlTZXJ2aWNlXG4gICAgICAgICAgICAgICAgICAgIC5nZXRBbmFseXRpY3ModHJpZ2dlci5pZCwgdHJpZ2dlci5yZWZyZXNoKVxuICAgICAgICAgICAgICAgICAgICAucGlwZShzdGFydFdpdGgobnVsbCkpXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldENoYXJ0QnlNZXRyaWMoZGF0YTogQW5hbHl0aWNzRHRvIHwgbnVsbCwgbWV0cmljOiBzdHJpbmcpOiBDaGFydEluZm9EdG8gfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gZGF0YT8uYW5hbHl0aWNzSW5mbz8uZmluZChjaGFydCA9PiBjaGFydC5tZXRyaWMgPT09IG1ldHJpYyk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uQXBhcnRtZW50Q2hhbmdlKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCBpZCA9IChldmVudC50YXJnZXQgYXMgSFRNTFNlbGVjdEVsZW1lbnQpLnZhbHVlO1xuICAgICAgICB0aGlzLnNlbGVjdGVkQXBhcnRtZW50SWQkLm5leHQoaWQpO1xuICAgICAgICB0aGlzLmxvYWRUcmlnZ2VyJC5uZXh0KHsgaWQsIHJlZnJlc2g6IGZhbHNlIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblJlZnJlc2goKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRJZCA9IHRoaXMuc2VsZWN0ZWRBcGFydG1lbnRJZCQudmFsdWU7XG4gICAgICAgIGlmICghY3VycmVudElkKSByZXR1cm47XG4gICAgICAgIHRoaXMubG9hZFRyaWdnZXIkLm5leHQoeyBpZDogY3VycmVudElkLCByZWZyZXNoOiB0cnVlIH0pO1xuICAgIH1cblxufVxuXG5cblxuIiwiPHNlY3Rpb24gY2xhc3M9XCJjYXJlLXBhZ2UgY2FyZS1kb3QtZ3JpZCBzaWRlYmFyLXBhZ2VcIiBhcmlhLWxhYmVsPVwiQW5hbHl0aWNzIHJlcGFydG9cIj5cbjxoZWFkZXIgY2xhc3M9XCJjYXJlLXBhZ2VfX2hlcm9cIj5cbiAgICA8ZGl2PlxuICAgICAgICA8cCBjbGFzcz1cImNhcmUtZXllYnJvd1wiPkFuYWx5dGljczwvcD5cbiAgICAgICAgPGgxIGNsYXNzPVwiY2FyZS10aXRsZVwiPkNydXNjb3R0byBhbmFsaXRpY288L2gxPlxuICAgICAgICA8cCBjbGFzcz1cImNhcmUtc3VidGl0bGVcIj5BbmRhbWVudG8gZW5lcmdldGljbywgcHJlc2VuemEgZSBhbm9tYWxpZSBwZXIgYXBwYXJ0YW1lbnRvIG1vbml0b3JhdG8uPC9wPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IHctZnVsbCBmbGV4LWNvbCBnYXAtMyBzbTp3LWF1dG8gc206bWluLXctWzIwcmVtXVwiPlxuICAgICAgICA8YnV0dG9uIChjbGljayk9XCJvblJlZnJlc2goKVwiIGNsYXNzPVwiY2FyZS1idXR0b24gaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0yIHdoaXRlc3BhY2Utbm93cmFwXCI+XG4gICAgICAgICAgICA8aW1nIGNsYXNzPVwiaC01IHctNVwiIHNyYz1cInJlbG9hZC5wbmdcIiBhbHQ9XCJcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICAgICAgICAgIEFnZ2lvcm5hIGdyYWZpY2lcbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJlLWZpZWxkXCIgKm5nSWY9XCJzZWxlY3RlZEFwYXJ0bWVudElkJCB8IGFzeW5jIGFzIHNlbGVjdGVkSWRcIj5cbiAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJhcGFydG1lbnQtc2VsZWN0XCI+QXBwYXJ0YW1lbnRvIG1vbml0b3JhdG88L2xhYmVsPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlbGF0aXZlIGdyb3VwIHotMFwiPlxuICAgICAgICAgICAgICAgIDxzZWxlY3QgW3ZhbHVlXT1cInNlbGVjdGVkSWRcIiBpZD1cImFwYXJ0bWVudC1zZWxlY3RcIiAoY2hhbmdlKT1cIm9uQXBhcnRtZW50Q2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNhcmUtc2VsZWN0IGJsb2NrIHctZnVsbCBjdXJzb3ItcG9pbnRlciBhcHBlYXJhbmNlLW5vbmUgcHItMTAgdHJhbnNpdGlvbi1hbGwgZ3JvdXAtaG92ZXI6Ym9yZGVyLWFtYmVyLTMwMFwiPlxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBhcHQgb2YgYXBhcnRtZW50cyQgfCBhc3luY1wiIFt2YWx1ZV09XCJhcHQuaWRcIiBjbGFzcz1cImJnLXdoaXRlIHRleHQtc2xhdGUtNzAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBhcHQubmFtZSB9fSAtIHt7IGFwdC5pZCB9fVxuICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicG9pbnRlci1ldmVudHMtbm9uZSBhYnNvbHV0ZSBpbnNldC15LTAgcmlnaHQtMCBmbGV4IGl0ZW1zLWNlbnRlciBweC0zIHRleHQtYW1iZXItNjAwXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9XCJoLTQgdy00XCIgZmlsbD1cIm5vbmVcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBkPVwiTTE5LjUgOC4yNWwtNy41IDcuNS03LjUtNy41XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L2hlYWRlcj5cblxuPGRpdiAqbmdJZj1cImFuYWx5dGljcyB8IGFzeW5jIGFzIGRhdGE7IGVsc2UgbG9hZGluZ1wiIGNsYXNzPVwiZ3JpZCBncmlkLWNvbHMtNiB3LWZ1bGwgZ2FwLTggY29udGVudC1zdGFydFwiPlxuXG4gICAgPGFwcC1lbmVyZ3ktY29uc3VtcHRpb24tY2hhcnQgXG4gICAgICAgICpuZ0lmPVwiZ2V0Q2hhcnRCeU1ldHJpYyhkYXRhLCAncGxhbnQtY29uc3VtcHRpb24nKSBhcyBpbmZvXCJcbiAgICAgICAgY2xhc3M9XCJjb2wtc3Bhbi02IDJ4bDpjb2wtc3Bhbi0zIHctZnVsbFwiXG4gICAgICAgIFtjaGFydEluZm9dPVwiaW5mb1wiXG4gICAgICAgIFtzaG93U3VnZ2VzdGlvbnNdPVwidHJ1ZVwiPlxuICAgIDwvYXBwLWVuZXJneS1jb25zdW1wdGlvbi1jaGFydD5cblxuICAgIDxhcHAtdGVtcGVyYXR1cmUtdmFyaWF0aW9ucy1jaGFydCBcbiAgICAgICAgKm5nSWY9XCJnZXRDaGFydEJ5TWV0cmljKGRhdGEsICd0aGVybW9zdGF0LXRlbXBlcmF0dXJlJykgYXMgaW5mb1wiXG4gICAgICAgIGNsYXNzPVwiY29sLXNwYW4tNiAyeGw6Y29sLXNwYW4tM1wiXG4gICAgICAgIFtjaGFydEluZm9dPVwiaW5mb1wiXG4gICAgICAgIFtzaG93U3VnZ2VzdGlvbnNdPVwidHJ1ZVwiPlxuICAgIDwvYXBwLXRlbXBlcmF0dXJlLXZhcmlhdGlvbnMtY2hhcnQ+XG5cbiAgICA8YXBwLWFsYXJtLWZyZXF1ZW5jeS1jaGFydCBcbiAgICAgICAgKm5nSWY9XCJnZXRDaGFydEJ5TWV0cmljKGRhdGEsICd3YXJkLWFsYXJtcy1mcmVxdWVuY3knKSBhcyBpbmZvXCJcbiAgICAgICAgY2xhc3M9XCJjb2wtc3Bhbi02IGxnOmNvbC1zcGFuLTMgMnhsOmNvbC1zcGFuLTJcIlxuICAgICAgICBbY2hhcnRJbmZvXT1cImluZm9cIlxuICAgICAgICBbc2hvd1N1Z2dlc3Rpb25zXT1cImZhbHNlXCI+XG4gICAgPC9hcHAtYWxhcm0tZnJlcXVlbmN5LWNoYXJ0PlxuXG4gICAgPGFwcC1hbGFybXMtc2VudC1yZXNvbHZlZC1jaGFydCBcbiAgICAgICAgKm5nSWY9XCJnZXRDaGFydEJ5TWV0cmljKGRhdGEsICd3YXJkLXJlc29sdmVkLWFsYXJtJykgYXMgaW5mb1wiXG4gICAgICAgIGNsYXNzPVwiY29sLXNwYW4tNiBsZzpjb2wtc3Bhbi0zIDJ4bDpjb2wtc3Bhbi0yXCJcbiAgICAgICAgW2NoYXJ0SW5mb109XCJpbmZvXCJcbiAgICAgICAgW3Nob3dTdWdnZXN0aW9uc109XCJmYWxzZVwiPlxuICAgIDwvYXBwLWFsYXJtcy1zZW50LXJlc29sdmVkLWNoYXJ0PlxuXG4gICAgPGFwcC1mYWxsLWZyZXF1ZW5jeS1jaGFydCBcbiAgICAgICAgKm5nSWY9XCJnZXRDaGFydEJ5TWV0cmljKGRhdGEsICd3YXJkLWZhbGxzJykgYXMgaW5mb1wiXG4gICAgICAgIGNsYXNzPVwiY29sLXNwYW4tNiBsZzpjb2wtc3Bhbi0zIDJ4bDpjb2wtc3Bhbi0yXCJcbiAgICAgICAgW2NoYXJ0SW5mb109XCJpbmZvXCJcbiAgICAgICAgW3Nob3dTdWdnZXN0aW9uc109XCJmYWxzZVwiPlxuICAgIDwvYXBwLWZhbGwtZnJlcXVlbmN5LWNoYXJ0PlxuXG4gICAgPGFwcC1wbGFudC1hbm9tYWxpZXMtY2hhcnQgXG4gICAgICAgICpuZ0lmPVwiZ2V0Q2hhcnRCeU1ldHJpYyhkYXRhLCAncGxhbnQtYW5vbWFsaWVzJykgYXMgaW5mb1wiXG4gICAgICAgIGNsYXNzPVwiY29sLXNwYW4tNiBsZzpjb2wtc3Bhbi0zIDJ4bDpjb2wtc3Bhbi0yXCJcbiAgICAgICAgW2NoYXJ0SW5mb109XCJpbmZvXCJcbiAgICAgICAgW3Nob3dTdWdnZXN0aW9uc109XCJmYWxzZVwiPlxuICAgIDwvYXBwLXBsYW50LWFub21hbGllcy1jaGFydD5cblxuICAgIDxhcHAtcHJlc2VuY2UtZGV0ZWN0aW9uLWNoYXJ0IFxuICAgICAgICAqbmdJZj1cImdldENoYXJ0QnlNZXRyaWMoZGF0YSwgJ3NlbnNvci1wcmVzZW5jZScpIGFzIGluZm9cIlxuICAgICAgICBjbGFzcz1cImNvbC1zcGFuLTYgbGc6Y29sLXNwYW4tMyAyeGw6Y29sLXNwYW4tMlwiXG4gICAgICAgIFtjaGFydEluZm9dPVwiaW5mb1wiXG4gICAgICAgIFtzaG93U3VnZ2VzdGlvbnNdPVwiZmFsc2VcIj5cbiAgICA8L2FwcC1wcmVzZW5jZS1kZXRlY3Rpb24tY2hhcnQ+XG5cbiAgICA8YXBwLXByb2xvbmdlZC1wcmVzZW5jZS1jaGFydCBcbiAgICAgICAgKm5nSWY9XCJnZXRDaGFydEJ5TWV0cmljKGRhdGEsICdzZW5zb3ItbG9uZy1wcmVzZW5jZScpIGFzIGluZm9cIlxuICAgICAgICBjbGFzcz1cImNvbC1zcGFuLTYgbGc6Y29sLXNwYW4tMyAyeGw6Y29sLXNwYW4tMlwiXG4gICAgICAgIFtjaGFydEluZm9dPVwiaW5mb1wiXG4gICAgICAgIFtzaG93U3VnZ2VzdGlvbnNdPVwiZmFsc2VcIj5cbiAgICA8L2FwcC1wcm9sb25nZWQtcHJlc2VuY2UtY2hhcnQ+XG5cbjwvZGl2PlxuXG5cbjxuZy10ZW1wbGF0ZSAjbG9hZGluZz5cbiAgICA8cCBjbGFzcz1cImNhcmUtbG9hZGluZ1wiIGFyaWEtbGl2ZT1cInBvbGl0ZVwiPkNhcmljYW1lbnRvIGRhdGkgaW4gY29yc28uLi48L3A+XG48L25nLXRlbXBsYXRlPlxuPC9zZWN0aW9uPiJdLCJtYXBwaW5ncyI6IjswMEJDK0JJQSxDQUFBLFlBQXlKLFVBQ2xIQyxDQUFBLG1CQUFZQyxDQUFBLEdBQ2pERixDQUFBLFFBQUdDLENBQUEsSUFBUUMsQ0FBQSxHQUFJLEdBQUFDLENBQUEsSUFBQUMsY0FBQSxHQUFBQyxDQUFBLGFB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RUFBQUosY0FBQSxHQUFBUyxDQUFBLE1BQUFULENBQUEsaUJBQUFHLENBQUEsWUFBQUgsY0FBQSxHQUFBQyxDQUFBLFVBQUFGLENBQUEsTUFBQUMsY0FBQSxHQUFBQyxDQUFBLFVBSXRCaUMsQ0FBQSx5Q0FBQW5DLENBQUEsSUFBQUMsY0FBQSxHQUFBQyxDQUFBLGNBQUFDLENBQUEsRUFBQUYsY0FBQSxHQUFBRyxDQUFBLFFBQUFDLENBQUEsQ0FBQWlGLElBQUEsRUFHSXJGLGNBQUEsR0FBQUcsQ0FBQSxRQUFBQSxDQUFBLGFBQUFELENBQUEsRUFBa0IsNEJBQUFGLGNBQUEsR0FBQUMsQ0FBQSxxQkFBQTJGLEdBQUE3RixDQUFBLENBQUFLLENBQUEsRUFBQUosY0FBQSxHQUFBUyxDQUFBLE1BQUFULENBQUEsaUJBQUFHLENBQUEsWUFBQUgsY0FBQSxHQUFBQyxDQUFBLFVBQUFGLENBQUEsTUFBQUMsY0FBQSxHQUFBQyxDQUFBLFVBSXRCaUMsQ0FBQSxtQ0FBQW5DLENBQUEsSUFBQUMsY0FBQSxHQUFBQyxDQUFBLGNBQUFDLENBQUEsRUFBQUYsY0FBQSxHQUFBRyxDQUFBLFFBQUFDLENBQUEsQ0FBQWlGLElBQUEsRUFHSXJGLGNBQUEsR0FBQUcsQ0FBQSxRQUFBQSxDQUFBLGFBQUFELENBQUEsRUFBa0IsNEJBQUFGLGNBQUEsR0FBQUMsQ0FBQSxxQkFBQTRGLEdBQUE5RixDQUFBLENBQUFLLENBQUEsRUFBQUosY0FBQSxHQUFBUyxDQUFBLE1BQUFULENBQUEsaUJBQUFHLENBQUEsWUFBQUgsY0FBQSxHQUFBQyxDQUFBLFVBQUFGLENBQUEsTUFBQUMsY0FBQSxHQUFBQyxDQUFBLFVBSXRCaUMsQ0FBQSxvQ0FBQW5DLENBQUEsSUFBQUMsY0FBQSxHQUFBQyxDQUFBLGNBQUFDLENBQUEsRUFBQUYsY0FBQSxHQUFBRyxDQUFBLFFBQUFDLENBQUEsQ0FBQWlGLElBQUEsRUFHSXJGLGNBQUEsR0FBQUcsQ0FBQSxRQUFBQSxDQUFBLGFBQUFELENBQUEsRUFBa0IsNEJBQUFGLGNBQUEsR0FBQUMsQ0FBQSxxQkFB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 \ No newline at end of file diff --git a/frontend/dist-instrumented/chunk-IGULPMRL.js.map b/frontend/dist-instrumented/chunk-IGULPMRL.js.map new file mode 100644 index 00000000..b1f49fd3 --- /dev/null +++ b/frontend/dist-instrumented/chunk-IGULPMRL.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["src/app/features/analytics/components/alarm-frequency-chart/alarm-frequency-chart.component.ts", "src/app/features/analytics/components/shared/chart-analytics.html", "src/app/features/analytics/components/fall-frequency-chart/fall-frequency-chart.component.ts", "src/app/features/analytics/components/shared/chart-analytics.html", "src/app/features/analytics/components/plant-anomalies-chart/plant-anomalies-chart.component.ts", "src/app/features/analytics/components/shared/chart-analytics.html", "src/app/features/analytics/components/presence-detection-chart/presence-detection-chart.component.ts", "src/app/features/analytics/components/shared/chart-analytics.html", "src/app/features/analytics/components/prolonged-presence-chart/prolonged-presence-chart.component.ts", "src/app/features/analytics/components/shared/chart-analytics.html", "src/app/features/analytics/components/temperature-variations-chart/temperature-variations-chart.component.ts", "src/app/features/analytics/components/shared/chart-analytics.html", "src/app/features/analytics/analytics.component.ts", "src/app/features/analytics/analytics.component.html"], + "sourcesContent": ["import { Component, Input, SimpleChanges } from '@angular/core';\nimport { ChartComponent } from '../../interfaces/chart-component';\nimport { ChartType } from 'chart.js';\nimport { BaseChartDirective } from 'ng2-charts';\nimport { CommonModule } from '@angular/common';\n\n@Component({ \n selector: 'app-alarm-frequency-chart', \n standalone: true, \n imports: [BaseChartDirective, CommonModule],\n templateUrl: '../shared/chart-analytics.html'})\nexport class AlarmFrequencyChartComponent extends ChartComponent {\n override chartType: ChartType = 'bar';\n\n override description: string = \"Dati relativi al numero di allarmi del reparto.\";\n}\n\n\n ", "
\n\n
\n
\n

{{chartInfo.title}}

\n

{{description}}

\n
\n\n \n \n\n\n
\n\n
\n

Suggerimenti Risparmio Energetico

\n
    \n @for(sugg of chartInfo.suggestions.messages; track sugg){\n
  • \n

    SUGGERIMENTO

    \n

    {{sugg}}

    \n
  • \n }\n
\n
\n\n
\n\n", "import { Component, Input } from '@angular/core';\nimport { ChartComponent } from '../../interfaces/chart-component';\nimport { ChartInfoDto } from '../../models/chart-info.model';\nimport { ChartType } from 'chart.js';\nimport { BaseChartDirective } from 'ng2-charts';\nimport { CommonModule } from '@angular/common';\n\n@Component({ \n selector: 'app-fall-frequency-chart',\n standalone: true, \n imports: [BaseChartDirective, CommonModule],\n templateUrl: '../shared/chart-analytics.html'})\nexport class FallFrequencyChartComponent extends ChartComponent {\n\n override chartType: ChartType = 'bar';\n\n override description: string = \"Dati relativi alle cadute del reparto.\";\n\n\n \n}\n", "
\n\n
\n
\n

{{chartInfo.title}}

\n

{{description}}

\n
\n\n \n \n\n\n
\n\n
\n

Suggerimenti Risparmio Energetico

\n
    \n @for(sugg of chartInfo.suggestions.messages; track sugg){\n
  • \n

    SUGGERIMENTO

    \n

    {{sugg}}

    \n
  • \n }\n
\n
\n\n
\n\n", "import { Component, Input } from '@angular/core';\nimport { ChartComponent } from '../../interfaces/chart-component';\nimport { ChartInfoDto } from '../../models/chart-info.model';\nimport { ChartType } from 'chart.js';\nimport { BaseChartDirective } from 'ng2-charts';\nimport { CommonModule } from '@angular/common';\n\n@Component({ \n selector: 'app-plant-anomalies-chart', \n standalone: true, \n imports: [BaseChartDirective, CommonModule],\n templateUrl: '../shared/chart-analytics.html'})\nexport class PlantAnomaliesChartComponent extends ChartComponent {\n\n override chartType: ChartType = 'bar';\n\n override description: string = \"Dati relativi alle anomalie totali dell'appartamento.\";\n\n}\n", "
\n\n
\n
\n

{{chartInfo.title}}

\n

{{description}}

\n
\n\n \n \n\n\n
\n\n
\n

Suggerimenti Risparmio Energetico

\n
    \n @for(sugg of chartInfo.suggestions.messages; track sugg){\n
  • \n

    SUGGERIMENTO

    \n

    {{sugg}}

    \n
  • \n }\n
\n
\n\n
\n\n", "import { Component, Input } from '@angular/core';\nimport { ChartComponent } from '../../interfaces/chart-component';\nimport { ChartInfoDto } from '../../models/chart-info.model';\nimport { ChartType } from 'chart.js';\nimport { BaseChartDirective } from 'ng2-charts';\nimport { CommonModule } from '@angular/common';\n\n@Component({ \n selector: 'app-presence-detection-chart', \n standalone: true, \n imports: [BaseChartDirective, CommonModule],\n templateUrl: '../shared/chart-analytics.html'})\nexport class PresenceDetectionChartComponent extends ChartComponent {\n\n override chartType: ChartType = 'bar';\n\n override description: string = \"Dati relativi ai sensori di presenza dell'appartamento.\";\n\n}\n", "
\n\n
\n
\n

{{chartInfo.title}}

\n

{{description}}

\n
\n\n \n \n\n\n
\n\n
\n

Suggerimenti Risparmio Energetico

\n
    \n @for(sugg of chartInfo.suggestions.messages; track sugg){\n
  • \n

    SUGGERIMENTO

    \n

    {{sugg}}

    \n
  • \n }\n
\n
\n\n
\n\n", "import { Component, Input } from '@angular/core';\nimport { ChartComponent } from '../../interfaces/chart-component';\nimport { ChartInfoDto } from '../../models/chart-info.model';\nimport { ChartType } from 'chart.js';\nimport { BaseChartDirective } from 'ng2-charts';\nimport { CommonModule } from '@angular/common';\n\n@Component({ \n selector: 'app-prolonged-presence-chart', \n standalone: true, \n imports: [BaseChartDirective, CommonModule],\n templateUrl: '../shared/chart-analytics.html'})\nexport class ProlongedPresenceChartComponent extends ChartComponent {\n\n override chartType: ChartType = 'bar';\n override description: string = \"Presenze prolungate rilevate dai sensori all'interno dell'appartamento.\";\n\n}\n", "
\n\n
\n
\n

{{chartInfo.title}}

\n

{{description}}

\n
\n\n \n \n\n\n
\n\n
\n

Suggerimenti Risparmio Energetico

\n
    \n @for(sugg of chartInfo.suggestions.messages; track sugg){\n
  • \n

    SUGGERIMENTO

    \n

    {{sugg}}

    \n
  • \n }\n
\n
\n\n
\n\n", "import { Component, Input } from '@angular/core';\nimport { ChartComponent } from '../../interfaces/chart-component';\nimport { ChartInfoDto } from '../../models/chart-info.model';\nimport { ChartType } from 'chart.js';\nimport { BaseChartDirective } from 'ng2-charts';\nimport { CommonModule } from '@angular/common';\n\n@Component({ \n selector: 'app-temperature-variations-chart', \n standalone: true, \n imports: [BaseChartDirective, CommonModule],\n templateUrl: '../shared/chart-analytics.html'})\nexport class TemperatureVariationsChartComponent extends ChartComponent {\n\n override chartType: ChartType = 'line';\n\n override description: string = \"Dati rilevati dai sensori di temperatura all'interno dell'appartamento.\";\n\n override chartColors = [\n { bg: 'rgba(239, 97, 68, 0.5)', border: 'rgb(239, 97, 68)'}\n ];\n}\n", "
\n\n
\n
\n

{{chartInfo.title}}

\n

{{description}}

\n
\n\n \n \n\n\n
\n\n
\n

Suggerimenti Risparmio Energetico

\n
    \n @for(sugg of chartInfo.suggestions.messages; track sugg){\n
  • \n

    SUGGERIMENTO

    \n

    {{sugg}}

    \n
  • \n }\n
\n
\n\n
\n\n", "import { Component, inject, OnInit } from '@angular/core';\nimport { AnalyticsApiService } from './services/analytics-api.service';\nimport { AnalyticsDto } from './models/analytics.model';\nimport { ChartInfoDto } from './models/chart-info.model';\nimport { AlarmFrequencyChartComponent } from './components/alarm-frequency-chart/alarm-frequency-chart.component';\nimport { AlarmsSentResolvedChartComponent } from './components/alarms-sent-resolved-chart/alarms-sent-resolved-chart.component';\nimport { EnergyConsumptionChartComponent } from './components/energy-consumption-chart/energy-consumption-chart.component';\nimport { FallFrequencyChartComponent } from './components/fall-frequency-chart/fall-frequency-chart.component';\nimport { PlantAnomaliesChartComponent } from './components/plant-anomalies-chart/plant-anomalies-chart.component';\nimport { PresenceDetectionChartComponent } from './components/presence-detection-chart/presence-detection-chart.component';\nimport { ProlongedPresenceChartComponent } from './components/prolonged-presence-chart/prolonged-presence-chart.component';\nimport { TemperatureVariationsChartComponent } from './components/temperature-variations-chart/temperature-variations-chart.component';\nimport { Observable, switchMap, filter, BehaviorSubject, startWith, combineLatest } from 'rxjs';\nimport { CommonModule } from '@angular/common';\nimport { PlantDto } from '../apartment-monitor/models/plant-response.model';\n\n@Component({\n selector: 'app-analytics',\n standalone: true,\n imports: [\n CommonModule,\n AlarmFrequencyChartComponent,\n AlarmsSentResolvedChartComponent,\n EnergyConsumptionChartComponent,\n FallFrequencyChartComponent,\n PlantAnomaliesChartComponent,\n PresenceDetectionChartComponent,\n ProlongedPresenceChartComponent,\n TemperatureVariationsChartComponent\n ],\n templateUrl: './analytics.component.html'\n})\nexport class AnalyticsComponent implements OnInit {\n private readonly refreshTrigger$ = new BehaviorSubject(false);\n\n private readonly analyticsApiService = inject(AnalyticsApiService);\n private readonly loadTrigger$ = new BehaviorSubject<{ id: string; refresh: boolean } | null>(null);\n\n public selectedApartmentId$ = new BehaviorSubject(null);\n \n public apartments$: Observable | null = null;\n public analytics: Observable | null = null;\n\n public ngOnInit(): void {\n this.apartments$ = this.analyticsApiService.getAllApartments();\n this.apartments$.subscribe(apartments => {\n if (apartments.length > 0) {\n this.selectedApartmentId$.next(apartments[0].id);\n this.loadTrigger$.next({ id: apartments[0].id, refresh: false });\n }\n });\n\n this.analytics = this.loadTrigger$.pipe(\n filter(trigger => trigger !== null),\n switchMap(trigger =>\n this.analyticsApiService\n .getAnalytics(trigger.id, trigger.refresh)\n .pipe(startWith(null))\n )\n );\n }\n\n public getChartByMetric(data: AnalyticsDto | null, metric: string): ChartInfoDto | undefined {\n return data?.analyticsInfo?.find(chart => chart.metric === metric);\n }\n\n public onApartmentChange(event: Event): void {\n const id = (event.target as HTMLSelectElement).value;\n this.selectedApartmentId$.next(id);\n this.loadTrigger$.next({ id, refresh: false });\n }\n\n public onRefresh(): void {\n const currentId = this.selectedApartmentId$.value;\n if (!currentId) return;\n this.loadTrigger$.next({ id: currentId, refresh: true });\n }\n\n}\n\n\n\n", "
\n
\n
\n

Analytics

\n

Cruscotto analitico

\n

Andamento energetico, presenza e anomalie per appartamento monitorato.

\n
\n
\n \n
\n \n
\n \n
\n \n \n \n
\n
\n
\n
\n
\n\n
\n\n \n \n\n \n \n\n \n \n\n \n \n\n \n \n\n \n \n\n \n \n\n \n \n\n
\n\n\n\n

Caricamento dati in corso...

\n
\n
"], + "mappings": "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", + "names": ["\u0275\u0275elementStart", "\u0275\u0275text", "\u0275\u0275elementEnd", "\u0275\u0275advance", "\u0275\u0275textInterpolate", "sugg_r1", "\u0275\u0275repeaterCreate", "AlarmFrequencyChartComponent_div_8_For_5_Template", "\u0275\u0275repeaterTrackByIdentity", "\u0275\u0275repeater", "ctx_r1", "chartInfo", "suggestions", "messages", "AlarmFrequencyChartComponent", "ChartComponent", "chartType", "description", "__ngFactoryType__", "selectors", "features", "\u0275\u0275InheritDefinitionFeature", "decls", "vars", "consts", "template", "rf", "ctx", "\u0275\u0275element", "\u0275\u0275template", "AlarmFrequencyChartComponent_div_8_Template", "\u0275\u0275property", "\u0275\u0275pureFunction2", "_c0", "isSuggestion", "showSuggestions", "title", "renderedChartData", "chartOptions", "BaseChartDirective", "CommonModule", "NgClass", "NgIf", "encapsulation", "\u0275\u0275elementStart", "\u0275\u0275text", "\u0275\u0275elementEnd", "\u0275\u0275advance", "\u0275\u0275textInterpolate", "sugg_r1", "\u0275\u0275repeaterCreate", "FallFrequencyChartComponent_div_8_For_5_Template", "\u0275\u0275repeaterTrackByIdentity", "\u0275\u0275repeater", "ctx_r1", "chartInfo", "suggestions", "messages", "FallFrequencyChartComponent", "ChartComponent", "chartType", "description", "__ngFactoryType__", "selectors", "features", "\u0275\u0275InheritDefinitionFeature", "decls", "vars", "consts", "template", "rf", "ctx", "\u0275\u0275element", "\u0275\u0275template", "FallFrequencyChartComponent_div_8_Template", "\u0275\u0275property", "\u0275\u0275pureFunction2", "_c0", "isSuggestion", "showSuggestions", "title", "renderedChartData", "chartOptions", "BaseChartDirective", "CommonModule", "NgClass", "NgIf", "encapsulation", "\u0275\u0275elementStart", "\u0275\u0275text", "\u0275\u0275elementEnd", "\u0275\u0275advance", "\u0275\u0275textInterpolate", "sugg_r1", "\u0275\u0275repeaterCreate", "PlantAnomaliesChartComponent_div_8_For_5_Template", "\u0275\u0275repeaterTrackByIdentity", "\u0275\u0275repeater", "ctx_r1", "chartInfo", "suggestions", "messages", "PlantAnomaliesChartComponent", "ChartComponent", "chartType", "description", "__ngFactoryType__", "selectors", "features", "\u0275\u0275InheritDefinitionFeature", "decls", "vars", "consts", "template", "rf", "ctx", "\u0275\u0275element", "\u0275\u0275template", "PlantAnomaliesChartComponent_div_8_Template", "\u0275\u0275property", "\u0275\u0275pureFunction2", "_c0", "isSuggestion", "showSuggestions", "title", "renderedChartData", "chartOptions", "BaseChartDirective", "CommonModule", "NgClass", "NgIf", "encapsulation", "\u0275\u0275elementStart", "\u0275\u0275text", "\u0275\u0275elementEnd", "\u0275\u0275advance", "\u0275\u0275textInterpolate", "sugg_r1", "\u0275\u0275repeaterCreate", "PresenceDetectionChartComponent_div_8_For_5_Template", "\u0275\u0275repeaterTrackByIdentity", "\u0275\u0275repeater", "ctx_r1", "chartInfo", "suggestions", "messages", "PresenceDetectionChartComponent", "ChartComponent", "chartType", "description", "__ngFactoryType__", "selectors", "features", "\u0275\u0275InheritDefinitionFeature", "decls", "vars", "consts", "template", "rf", "ctx", "\u0275\u0275element", "\u0275\u0275template", "PresenceDetectionChartComponent_div_8_Template", "\u0275\u0275property", "\u0275\u0275pureFunction2", "_c0", "isSuggestion", "showSuggestions", "title", "renderedChartData", "chartOptions", "BaseChartDirective", "CommonModule", "NgClass", "NgIf", "encapsulation", "\u0275\u0275elementStart", "\u0275\u0275text", "\u0275\u0275elementEnd", "\u0275\u0275advance", "\u0275\u0275textInterpolate", "sugg_r1", "\u0275\u0275repeaterCreate", "ProlongedPresenceChartComponent_div_8_For_5_Template", "\u0275\u0275repeaterTrackByIdentity", "\u0275\u0275repeater", "ctx_r1", "chartInfo", "suggestions", "messages", "ProlongedPresenceChartComponent", "ChartComponent", "chartType", "description", "__ngFactoryType__", "selectors", "features", "\u0275\u0275InheritDefinitionFeature", "decls", "vars", "consts", "template", "rf", "ctx", "\u0275\u0275element", "\u0275\u0275template", "ProlongedPresenceChartComponent_div_8_Template", "\u0275\u0275property", "\u0275\u0275pureFunction2", "_c0", "isSuggestion", "showSuggestions", "title", "renderedChartData", "chartOptions", "BaseChartDirective", "CommonModule", "NgClass", "NgIf", "encapsulation", "\u0275\u0275elementStart", "\u0275\u0275text", "\u0275\u0275elementEnd", "\u0275\u0275advance", "\u0275\u0275textInterpolate", "sugg_r1", "\u0275\u0275repeaterCreate", "TemperatureVariationsChartComponent_div_8_For_5_Template", "\u0275\u0275repeaterTrackByIdentity", "\u0275\u0275repeater", "ctx_r1", "chartInfo", "suggestions", "messages", "TemperatureVariationsChartComponent", "ChartComponent", "chartType", "description", "chartColors", "bg", "border", "__ngFactoryType__", "selectors", "features", "\u0275\u0275InheritDefinitionFeature", "decls", "vars", "consts", "template", "rf", "ctx", "\u0275\u0275element", "\u0275\u0275template", "TemperatureVariationsChartComponent_div_8_Template", "\u0275\u0275property", "\u0275\u0275pureFunction2", "_c0", "isSuggestion", "showSuggestions", "title", "renderedChartData", "chartOptions", "BaseChartDirective", "CommonModule", "NgClass", "NgIf", "encapsulation", "\u0275\u0275elementStart", "\u0275\u0275text", "\u0275\u0275elementEnd", "\u0275\u0275property", "apt_r3", "id", "\u0275\u0275advance", "\u0275\u0275textInterpolate2", "name", "\u0275\u0275listener", "$event", "\u0275\u0275restoreView", "_r1", "ctx_r1", "\u0275\u0275nextContext", "\u0275\u0275resetView", "onApartmentChange", "\u0275\u0275template", "AnalyticsComponent_div_13_option_5_Template", "\u0275\u0275element", "selectedId_r4", "\u0275\u0275pipeBind1", "apartments$", "info_r5", "info_r6", "info_r7", "info_r8", "info_r9", "info_r10", "info_r11", "info_r12", "AnalyticsComponent_div_15_app_energy_consumption_chart_1_Template", "AnalyticsComponent_div_15_app_temperature_variations_chart_2_Template", "AnalyticsComponent_div_15_app_alarm_frequency_chart_3_Template", "AnalyticsComponent_div_15_app_alarms_sent_resolved_chart_4_Template", "AnalyticsComponent_div_15_app_fall_frequency_chart_5_Template", "AnalyticsComponent_div_15_app_plant_anomalies_chart_6_Template", "AnalyticsComponent_div_15_app_presence_detection_chart_7_Template", "AnalyticsComponent_div_15_app_prolonged_presence_chart_8_Template", "getChartByMetric", "data_r13", "AnalyticsComponent", "refreshTrigger$", "BehaviorSubject", "analyticsApiService", "inject", "AnalyticsApiService", "loadTrigger$", "selectedApartmentId$", "analytics", "ngOnInit", "getAllApartments", "subscribe", "apartments", "length", "next", "refresh", "pipe", "filter", "trigger", "switchMap", "getAnalytics", "startWith", "data", "metric", "analyticsInfo", "find", "chart", "event", "target", "value", "onRefresh", "currentId", "selectors", "decls", "vars", "consts", "template", "rf", "ctx", "AnalyticsComponent_div_13_Template", "AnalyticsComponent_div_15_Template", "AnalyticsComponent_ng_template_17_Template", "\u0275\u0275templateRefExtractor", "loading_r14", "CommonModule", "NgForOf", "NgIf", "AlarmFrequencyChartComponent", "AlarmsSentResolvedChartComponent", "EnergyConsumptionChartComponent", "FallFrequencyChartComponent", "PlantAnomaliesChartComponent", "PresenceDetectionChartComponent", "ProlongedPresenceChartComponent", "TemperatureVariationsChartComponent", "AsyncPipe", "encapsulation"] +} diff --git a/frontend/dist-instrumented/chunk-J6KRJBIG.js b/frontend/dist-instrumented/chunk-J6KRJBIG.js new file mode 100644 index 00000000..3de22fbc --- /dev/null +++ b/frontend/dist-instrumented/chunk-J6KRJBIG.js @@ -0,0 +1,7 @@ +function cov_t79jungpj(){var path="/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-J6KRJBIG.js";var hash="7f9a9b6f1d5a6da682fe02bae1b9cad5697797b5";var global=new Function("return this")();var gcv="__coverage__";var coverageData={path:"/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-J6KRJBIG.js",statementMap:{"0":{start:{line:1,column:910},end:{line:1,column:1909}},"1":{start:{line:1,column:945},end:{line:1,column:1707}},"2":{start:{line:1,column:1710},end:{line:1,column:1711}},"3":{start:{line:1,column:1712},end:{line:1,column:1780}},"4":{start:{line:1,column:1761},end:{line:1,column:1776}},"5":{start:{line:1,column:1798},end:{line:1,column:1827}},"6":{start:{line:1,column:1810},end:{line:1,column:1826}},"7":{start:{line:1,column:1846},end:{line:1,column:1896}},"8":{start:{line:1,column:1897},end:{line:1,column:1905}},"9":{start:{line:1,column:1917},end:{line:1,column:2505}},"10":{start:{line:1,column:1983},end:{line:1,column:2146}},"11":{start:{line:1,column:2066},end:{line:1,column:2081}},"12":{start:{line:1,column:2097},end:{line:1,column:2144}},"13":{start:{line:1,column:2177},end:{line:1,column:2356}},"14":{start:{line:1,column:2208},end:{line:1,column:2249}},"15":{start:{line:1,column:2231},end:{line:1,column:2238}},"16":{start:{line:1,column:2252},end:{line:1,column:2267}},"17":{start:{line:1,column:2270},end:{line:1,column:2296}},"18":{start:{line:1,column:2297},end:{line:1,column:2355}},"19":{start:{line:1,column:2356},end:{line:1,column:2364}},"20":{start:{line:1,column:2382},end:{line:1,column:2423}},"21":{start:{line:1,column:2394},end:{line:1,column:2422}},"22":{start:{line:1,column:2442},end:{line:1,column:2492}},"23":{start:{line:1,column:2493},end:{line:1,column:2501}},"24":{start:{line:1,column:2513},end:{line:1,column:2525}},"25":{start:{line:1,column:2520},end:{line:1,column:2525}},"26":{start:{line:1,column:2543},end:{line:1,column:2664}},"27":{start:{line:1,column:2613},end:{line:1,column:2626}},"28":{start:{line:1,column:2627},end:{line:1,column:2663}},"29":{start:{line:1,column:2682},end:{line:1,column:2756}},"30":{start:{line:1,column:2727},end:{line:1,column:2740}},"31":{start:{line:1,column:2741},end:{line:1,column:2755}},"32":{start:{line:1,column:2774},end:{line:1,column:2882}},"33":{start:{line:1,column:2843},end:{line:1,column:2851}},"34":{start:{line:1,column:2854},end:{line:1,column:2862}},"35":{start:{line:1,column:2863},end:{line:1,column:2881}},"36":{start:{line:1,column:2900},end:{line:1,column:3027}},"37":{start:{line:1,column:2945},end:{line:1,column:2948}},"38":{start:{line:1,column:2949},end:{line:1,column:3026}},"39":{start:{line:1,column:3045},end:{line:1,column:3126}},"40":{start:{line:1,column:3134},end:{line:2,column:74}},"41":{start:{line:1,column:3187},end:{line:1,column:3189}},"42":{start:{line:1,column:3211},end:{line:1,column:3213}},"43":{start:{line:1,column:3239},end:{line:1,column:3240}},"44":{start:{line:1,column:3258},end:{line:1,column:3260}},"45":{start:{line:1,column:3276},end:{line:1,column:3281}},"46":{start:{line:1,column:3296},end:{line:1,column:3301}},"47":{start:{line:1,column:3319},end:{line:1,column:3324}},"48":{start:{line:1,column:3345},end:{line:1,column:3350}},"49":{start:{line:1,column:3379},end:{line:1,column:3457}},"50":{start:{line:1,column:3480},end:{line:1,column:3511}},"51":{start:{line:1,column:3529},end:{line:1,column:3555}},"52":{start:{line:1,column:3573},end:{line:1,column:3610}},"53":{start:{line:1,column:3585},end:{line:1,column:3609}},"54":{start:{line:1,column:3628},end:{line:2,column:61}},"55":{start:{line:1,column:5004},end:{line:1,column:5762}},"56":{start:{line:1,column:5084},end:{line:1,column:5116}},"57":{start:{line:1,column:5314},end:{line:1,column:5344}},"58":{start:{line:1,column:5428},end:{line:1,column:5453}},"59":{start:{line:2,column:62},end:{line:2,column:70}},"60":{start:{line:2,column:82},end:{line:2,column:96}},"61":{start:{line:2,column:89},end:{line:2,column:96}},"62":{start:{line:2,column:114},end:{line:2,column:180}},"63":{start:{line:2,column:147},end:{line:2,column:160}},"64":{start:{line:2,column:161},end:{line:2,column:179}},"65":{start:{line:2,column:198},end:{line:2,column:216}},"66":{start:{line:2,column:234},end:{line:2,column:468}},"67":{start:{line:2,column:248},end:{line:2,column:251}},"68":{start:{line:2,column:252},end:{line:2,column:467}},"69":{start:{line:2,column:301},end:{line:2,column:315}},"70":{start:{line:2,column:318},end:{line:2,column:321}},"71":{start:{line:2,column:322},end:{line:2,column:363}},"72":{start:{line:2,column:468},end:{line:2,column:638}},"73":{start:{line:2,column:482},end:{line:2,column:493}},"74":{start:{line:2,column:496},end:{line:2,column:500}},"75":{start:{line:2,column:503},end:{line:2,column:507}},"76":{start:{line:2,column:510},end:{line:2,column:513}},"77":{start:{line:2,column:514},end:{line:2,column:637}},"78":{start:{line:2,column:656},end:{line:2,column:712}},"79":{start:{line:2,column:720},end:{line:3,column:75}},"80":{start:{line:2,column:769},end:{line:2,column:771}},"81":{start:{line:2,column:787},end:{line:2,column:789}},"82":{start:{line:2,column:805},end:{line:2,column:810}},"83":{start:{line:2,column:821},end:{line:2,column:826}},"84":{start:{line:2,column:843},end:{line:2,column:848}},"85":{start:{line:2,column:866},end:{line:2,column:895}},"86":{start:{line:2,column:878},end:{line:2,column:894}},"87":{start:{line:2,column:913},end:{line:3,column:62}},"88":{start:{line:2,column:1631},end:{line:2,column:2050}},"89":{start:{line:2,column:1684},end:{line:2,column:1709}},"90":{start:{line:2,column:1823},end:{line:2,column:1878}},"91":{start:{line:3,column:63},end:{line:3,column:71}},"92":{start:{line:3,column:83},end:{line:3,column:106}},"93":{start:{line:3,column:90},end:{line:3,column:106}},"94":{start:{line:3,column:124},end:{line:3,column:249}},"95":{start:{line:3,column:138},end:{line:3,column:141}},"96":{start:{line:3,column:142},end:{line:3,column:248}},"97":{start:{line:3,column:179},end:{line:3,column:184}},"98":{start:{line:3,column:190},end:{line:3,column:193}},"99":{start:{line:3,column:194},end:{line:3,column:218}},"100":{start:{line:3,column:267},end:{line:3,column:325}},"101":{start:{line:3,column:343},end:{line:3,column:561}},"102":{start:{line:3,column:427},end:{line:3,column:428}},"103":{start:{line:3,column:431},end:{line:3,column:435}},"104":{start:{line:3,column:436},end:{line:3,column:560}},"105":{start:{line:3,column:579},end:{line:3,column:993}},"106":{start:{line:3,column:593},end:{line:3,column:596}},"107":{start:{line:3,column:597},end:{line:3,column:992}},"108":{start:{line:3,column:662},end:{line:3,column:676}},"109":{start:{line:3,column:679},end:{line:3,column:683}},"110":{start:{line:3,column:684},end:{line:3,column:736}},"111":{start:{line:3,column:882},end:{line:3,column:896}},"112":{start:{line:3,column:899},end:{line:3,column:903}},"113":{start:{line:3,column:904},end:{line:3,column:944}},"114":{start:{line:3,column:993},end:{line:3,column:1234}},"115":{start:{line:3,column:1009},end:{line:3,column:1020}},"116":{start:{line:3,column:1023},end:{line:3,column:1027}},"117":{start:{line:3,column:1028},end:{line:3,column:1233}},"118":{start:{line:3,column:1252},end:{line:3,column:1346}},"119":{start:{line:3,column:1312},end:{line:3,column:1315}},"120":{start:{line:3,column:1316},end:{line:3,column:1345}},"121":{start:{line:3,column:1354},end:{line:4,column:111}},"122":{start:{line:3,column:1382},end:{line:3,column:1384}},"123":{start:{line:3,column:1400},end:{line:3,column:1405}},"124":{start:{line:3,column:1427},end:{line:3,column:1432}},"125":{start:{line:3,column:1447},end:{line:3,column:1452}},"126":{start:{line:3,column:1469},end:{line:3,column:1474}},"127":{start:{line:3,column:1499},end:{line:3,column:1500}},"128":{start:{line:3,column:1528},end:{line:3,column:1591}},"129":{start:{line:3,column:1618},end:{line:3,column:1651}},"130":{start:{line:3,column:1666},end:{line:3,column:1713}},"131":{start:{line:3,column:1727},end:{line:3,column:1754}},"132":{start:{line:3,column:1770},end:{line:3,column:1788}},"133":{start:{line:3,column:1808},end:{line:3,column:1835}},"134":{start:{line:3,column:1857},end:{line:3,column:1985}},"135":{start:{line:3,column:1880},end:{line:3,column:1890}},"136":{start:{line:3,column:1903},end:{line:3,column:1918}},"137":{start:{line:3,column:1932},end:{line:3,column:1942}},"138":{start:{line:3,column:1953},end:{line:3,column:1968}},"139":{start:{line:3,column:1976},end:{line:3,column:1984}},"140":{start:{line:3,column:2012},end:{line:3,column:2283}},"141":{start:{line:3,column:2035},end:{line:3,column:2075}},"142":{start:{line:3,column:2088},end:{line:3,column:2132}},"143":{start:{line:3,column:2146},end:{line:3,column:2186}},"144":{start:{line:3,column:2197},end:{line:3,column:2235}},"145":{start:{line:3,column:2243},end:{line:3,column:2282}},"146":{start:{line:3,column:2310},end:{line:3,column:2495}},"147":{start:{line:3,column:2333},end:{line:3,column:2356}},"148":{start:{line:3,column:2369},end:{line:3,column:2394}},"149":{start:{line:3,column:2408},end:{line:3,column:2431}},"150":{start:{line:3,column:2442},end:{line:3,column:2464}},"151":{start:{line:3,column:2472},end:{line:3,column:2494}},"152":{start:{line:3,column:2513},end:{line:3,column:2542}},"153":{start:{line:3,column:2525},end:{line:3,column:2541}},"154":{start:{line:3,column:2560},end:{line:4,column:98}},"155":{start:{line:3,column:4239},end:{line:3,column:4576}},"156":{start:{line:3,column:4378},end:{line:3,column:4408}},"157":{start:{line:4,column:99},end:{line:4,column:107}},"158":{start:{line:4,column:119},end:{line:4,column:132}},"159":{start:{line:4,column:136},end:{line:4,column:142}},"160":{start:{line:4,column:140},end:{line:4,column:142}},"161":{start:{line:4,column:160},end:{line:4,column:603}},"162":{start:{line:4,column:174},end:{line:4,column:177}},"163":{start:{line:4,column:178},end:{line:4,column:602}},"164":{start:{line:4,column:270},end:{line:4,column:275}},"165":{start:{line:4,column:281},end:{line:4,column:284}},"166":{start:{line:4,column:285},end:{line:4,column:323}},"167":{start:{line:4,column:361},end:{line:4,column:366}},"168":{start:{line:4,column:372},end:{line:4,column:375}},"169":{start:{line:4,column:376},end:{line:4,column:426}},"170":{start:{line:4,column:457},end:{line:4,column:462}},"171":{start:{line:4,column:468},end:{line:4,column:471}},"172":{start:{line:4,column:472},end:{line:4,column:511}},"173":{start:{line:4,column:543},end:{line:4,column:548}},"174":{start:{line:4,column:554},end:{line:4,column:557}},"175":{start:{line:4,column:558},end:{line:4,column:596}},"176":{start:{line:4,column:603},end:{line:4,column:674}},"177":{start:{line:4,column:617},end:{line:4,column:620}},"178":{start:{line:4,column:621},end:{line:4,column:673}},"179":{start:{line:4,column:692},end:{line:4,column:853}},"180":{start:{line:4,column:744},end:{line:4,column:747}},"181":{start:{line:4,column:748},end:{line:4,column:852}},"182":{start:{line:4,column:871},end:{line:4,column:1000}},"183":{start:{line:4,column:885},end:{line:4,column:888}},"184":{start:{line:4,column:889},end:{line:4,column:999}},"185":{start:{line:4,column:927},end:{line:4,column:932}},"186":{start:{line:4,column:938},end:{line:4,column:942}},"187":{start:{line:4,column:943},end:{line:4,column:970}},"188":{start:{line:4,column:1018},end:{line:4,column:1076}},"189":{start:{line:4,column:1094},end:{line:4,column:1167}},"190":{start:{line:4,column:1136},end:{line:4,column:1140}},"191":{start:{line:4,column:1141},end:{line:4,column:1166}},"192":{start:{line:4,column:1185},end:{line:4,column:1365}},"193":{start:{line:4,column:1229},end:{line:4,column:1233}},"194":{start:{line:4,column:1234},end:{line:4,column:1364}},"195":{start:{line:4,column:1383},end:{line:4,column:1446}},"196":{start:{line:4,column:1464},end:{line:4,column:1938}},"197":{start:{line:4,column:1628},end:{line:4,column:1632}},"198":{start:{line:4,column:1633},end:{line:4,column:1937}},"199":{start:{line:4,column:1956},end:{line:4,column:2433}},"200":{start:{line:4,column:1970},end:{line:4,column:1973}},"201":{start:{line:4,column:1974},end:{line:4,column:2432}},"202":{start:{line:4,column:2353},end:{line:4,column:2358}},"203":{start:{line:4,column:2364},end:{line:4,column:2367}},"204":{start:{line:4,column:2368},end:{line:4,column:2388}},"205":{start:{line:4,column:2433},end:{line:4,column:2605}},"206":{start:{line:4,column:2447},end:{line:4,column:2450}},"207":{start:{line:4,column:2451},end:{line:4,column:2604}},"208":{start:{line:4,column:2623},end:{line:4,column:2648}},"209":{start:{line:4,column:2656},end:{line:5,column:97}},"210":{start:{line:4,column:2692},end:{line:4,column:2694}},"211":{start:{line:4,column:2723},end:{line:4,column:2725}},"212":{start:{line:4,column:2734},end:{line:4,column:2736}},"213":{start:{line:4,column:2758},end:{line:4,column:2760}},"214":{start:{line:4,column:2778},end:{line:4,column:2780}},"215":{start:{line:4,column:2794},end:{line:4,column:2798}},"216":{start:{line:4,column:2827},end:{line:4,column:2829}},"217":{start:{line:4,column:2854},end:{line:4,column:2856}},"218":{start:{line:4,column:2878},end:{line:4,column:2882}},"219":{start:{line:4,column:2901},end:{line:4,column:2908}},"220":{start:{line:4,column:2920},end:{line:4,column:2925}},"221":{start:{line:4,column:2946},end:{line:4,column:2951}},"222":{start:{line:4,column:2970},end:{line:4,column:2975}},"223":{start:{line:4,column:3006},end:{line:4,column:3011}},"224":{start:{line:4,column:3019},end:{line:4,column:3023}},"225":{start:{line:4,column:3039},end:{line:4,column:3058}},"226":{start:{line:4,column:3085},end:{line:4,column:3138}},"227":{start:{line:4,column:3154},end:{line:4,column:3196}},"228":{start:{line:4,column:3201},end:{line:4,column:3206}},"229":{start:{line:4,column:3216},end:{line:4,column:3221}},"230":{start:{line:4,column:3233},end:{line:4,column:3237}},"231":{start:{line:4,column:3267},end:{line:4,column:3271}},"232":{start:{line:4,column:3284},end:{line:4,column:3349}},"233":{start:{line:4,column:3368},end:{line:4,column:3414}},"234":{start:{line:4,column:3441},end:{line:4,column:3868}},"235":{start:{line:4,column:3564},end:{line:4,column:3633}},"236":{start:{line:4,column:3571},end:{line:4,column:3626}},"237":{start:{line:4,column:3626},end:{line:4,column:3632}},"238":{start:{line:4,column:3633},end:{line:4,column:3866}},"239":{start:{line:4,column:3887},end:{line:4,column:4165}},"240":{start:{line:4,column:3990},end:{line:4,column:4104}},"241":{start:{line:4,column:4012},end:{line:4,column:4032}},"242":{start:{line:4,column:4033},end:{line:4,column:4103}},"243":{start:{line:4,column:4180},end:{line:4,column:4282}},"244":{start:{line:4,column:4299},end:{line:4,column:4333}},"245":{start:{line:4,column:4355},end:{line:4,column:4495}},"246":{start:{line:4,column:4516},end:{line:4,column:4542}},"247":{start:{line:4,column:4564},end:{line:4,column:4755}},"248":{start:{line:4,column:4772},end:{line:4,column:4809}},"249":{start:{line:4,column:4836},end:{line:4,column:4919}},"250":{start:{line:4,column:4945},end:{line:4,column:4976}},"251":{start:{line:4,column:5004},end:{line:4,column:5074}},"252":{start:{line:4,column:5114},end:{line:4,column:5208}},"253":{start:{line:4,column:5237},end:{line:4,column:5281}},"254":{start:{line:4,column:5309},end:{line:4,column:5352}},"255":{start:{line:4,column:5362},end:{line:4,column:5491}},"256":{start:{line:4,column:5452},end:{line:4,column:5489}},"257":{start:{line:4,column:5514},end:{line:4,column:5522}},"258":{start:{line:4,column:5556},end:{line:4,column:5796}},"259":{start:{line:4,column:5642},end:{line:4,column:5646}},"260":{start:{line:4,column:5647},end:{line:4,column:5794}},"261":{start:{line:4,column:5829},end:{line:4,column:5972}},"262":{start:{line:4,column:5941},end:{line:4,column:5965}},"263":{start:{line:4,column:5965},end:{line:4,column:5971}},"264":{start:{line:4,column:5972},end:{line:4,column:6027}},"265":{start:{line:4,column:6051},end:{line:4,column:6264}},"266":{start:{line:4,column:6183},end:{line:4,column:6258}},"267":{start:{line:4,column:6283},end:{line:4,column:6352}},"268":{start:{line:4,column:6371},end:{line:4,column:6609}},"269":{start:{line:4,column:6396},end:{line:4,column:6602}},"270":{start:{line:4,column:6602},end:{line:4,column:6608}},"271":{start:{line:4,column:6609},end:{line:4,column:7118}},"272":{start:{line:4,column:6746},end:{line:4,column:6891}},"273":{start:{line:4,column:6904},end:{line:4,column:7115}},"274":{start:{line:4,column:7136},end:{line:4,column:7165}},"275":{start:{line:4,column:7148},end:{line:4,column:7164}},"276":{start:{line:4,column:7183},end:{line:5,column:84}},"277":{start:{line:4,column:7249},end:{line:4,column:7314}},"278":{start:{line:4,column:7280},end:{line:4,column:7313}},"279":{start:{line:4,column:9848},end:{line:4,column:10653}},"280":{start:{line:4,column:9862},end:{line:4,column:9865}},"281":{start:{line:4,column:9866},end:{line:4,column:10652}},"282":{start:{line:4,column:9933},end:{line:4,column:9957}},"283":{start:{line:4,column:9988},end:{line:4,column:10017}},"284":{start:{line:4,column:10053},end:{line:4,column:10087}},"285":{start:{line:4,column:10117},end:{line:4,column:10134}},"286":{start:{line:4,column:10274},end:{line:4,column:10298}},"287":{start:{line:4,column:10330},end:{line:4,column:10383}},"288":{start:{line:4,column:10414},end:{line:4,column:10443}},"289":{start:{line:4,column:10473},end:{line:4,column:10490}},"290":{start:{line:4,column:10522},end:{line:4,column:10575}},"291":{start:{line:4,column:10653},end:{line:4,column:11136}},"292":{start:{line:5,column:85},end:{line:5,column:93}}},fnMap:{"0":{name:"(anonymous_0)",decl:{start:{line:1,column:911},end:{line:1,column:912}},loc:{start:{line:1,column:915},end:{line:1,column:1906}},line:1},"1":{name:"(anonymous_1)",decl:{start:{line:1,column:924},end:{line:1,column:925}},loc:{start:{line:1,column:938},end:{line:1,column:1781}},line:1},"2":{name:"(anonymous_2)",decl:{start:{line:1,column:1758},end:{line:1,column:1759}},loc:{start:{line:1,column:1761},end:{line:1,column:1776}},line:1},"3":{name:"(anonymous_3)",decl:{start:{line:1,column:1798},end:{line:1,column:1799}},loc:{start:{line:1,column:1809},end:{line:1,column:1827}},line:1},"4":{name:"(anonymous_4)",decl:{start:{line:1,column:1918},end:{line:1,column:1919}},loc:{start:{line:1,column:1922},end:{line:1,column:2502}},line:1},"5":{name:"(anonymous_5)",decl:{start:{line:1,column:1966},end:{line:1,column:1967}},loc:{start:{line:1,column:1982},end:{line:1,column:2147}},line:1},"6":{name:"(anonymous_6)",decl:{start:{line:1,column:2063},end:{line:1,column:2064}},loc:{start:{line:1,column:2066},end:{line:1,column:2081}},line:1},"7":{name:"(anonymous_7)",decl:{start:{line:1,column:2093},end:{line:1,column:2094}},loc:{start:{line:1,column:2097},end:{line:1,column:2144}},line:1},"8":{name:"(anonymous_8)",decl:{start:{line:1,column:2147},end:{line:1,column:2148}},loc:{start:{line:1,column:2176},end:{line:1,column:2365}},line:1},"9":{name:"(anonymous_9)",decl:{start:{line:1,column:2227},end:{line:1,column:2228}},loc:{start:{line:1,column:2231},end:{line:1,column:2238}},line:1},"10":{name:"(anonymous_10)",decl:{start:{line:1,column:2382},end:{line:1,column:2383}},loc:{start:{line:1,column:2393},end:{line:1,column:2423}},line:1},"11":{name:"(anonymous_11)",decl:{start:{line:1,column:2513},end:{line:1,column:2514}},loc:{start:{line:1,column:2520},end:{line:1,column:2525}},line:1},"12":{name:"Ve",decl:{start:{line:1,column:2535},end:{line:1,column:2537}},loc:{start:{line:1,column:2542},end:{line:1,column:2665}},line:1},"13":{name:"Le",decl:{start:{line:1,column:2674},end:{line:1,column:2676}},loc:{start:{line:1,column:2681},end:{line:1,column:2757}},line:1},"14":{name:"$e",decl:{start:{line:1,column:2766},end:{line:1,column:2768}},loc:{start:{line:1,column:2773},end:{line:1,column:2883}},line:1},"15":{name:"ze",decl:{start:{line:1,column:2892},end:{line:1,column:2894}},loc:{start:{line:1,column:2899},end:{line:1,column:3028}},line:1},"16":{name:"Fe",decl:{start:{line:1,column:3037},end:{line:1,column:3039}},loc:{start:{line:1,column:3044},end:{line:1,column:3127}},line:1},"17":{name:"(anonymous_17)",decl:{start:{line:1,column:3135},end:{line:1,column:3136}},loc:{start:{line:1,column:3139},end:{line:2,column:71}},line:1},"18":{name:"(anonymous_18)",decl:{start:{line:1,column:3364},end:{line:1,column:3365}},loc:{start:{line:1,column:3378},end:{line:1,column:3458}},line:1},"19":{name:"(anonymous_19)",decl:{start:{line:1,column:3458},end:{line:1,column:3459}},loc:{start:{line:1,column:3479},end:{line:1,column:3512}},line:1},"20":{name:"(anonymous_20)",decl:{start:{line:1,column:3512},end:{line:1,column:3513}},loc:{start:{line:1,column:3528},end:{line:1,column:3556}},line:1},"21":{name:"(anonymous_21)",decl:{start:{line:1,column:3573},end:{line:1,column:3574}},loc:{start:{line:1,column:3584},end:{line:1,column:3610}},line:1},"22":{name:"(anonymous_22)",decl:{start:{line:1,column:4990},end:{line:1,column:4991}},loc:{start:{line:1,column:5003},end:{line:1,column:5763}},line:1},"23":{name:"(anonymous_23)",decl:{start:{line:1,column:5073},end:{line:1,column:5074}},loc:{start:{line:1,column:5083},end:{line:1,column:5117}},line:1},"24":{name:"(anonymous_24)",decl:{start:{line:1,column:5303},end:{line:1,column:5304}},loc:{start:{line:1,column:5313},end:{line:1,column:5345}},line:1},"25":{name:"(anonymous_25)",decl:{start:{line:1,column:5417},end:{line:1,column:5418}},loc:{start:{line:1,column:5427},end:{line:1,column:5454}},line:1},"26":{name:"(anonymous_26)",decl:{start:{line:2,column:82},end:{line:2,column:83}},loc:{start:{line:2,column:89},end:{line:2,column:96}},line:2},"27":{name:"Ue",decl:{start:{line:2,column:106},end:{line:2,column:108}},loc:{start:{line:2,column:113},end:{line:2,column:181}},line:2},"28":{name:"We",decl:{start:{line:2,column:190},end:{line:2,column:192}},loc:{start:{line:2,column:197},end:{line:2,column:217}},line:2},"29":{name:"Ge",decl:{start:{line:2,column:226},end:{line:2,column:228}},loc:{start:{line:2,column:233},end:{line:2,column:639}},line:2},"30":{name:"(anonymous_30)",decl:{start:{line:2,column:284},end:{line:2,column:285}},loc:{start:{line:2,column:294},end:{line:2,column:364}},line:2},"31":{name:"Be",decl:{start:{line:2,column:648},end:{line:2,column:650}},loc:{start:{line:2,column:655},end:{line:2,column:713}},line:2},"32":{name:"(anonymous_32)",decl:{start:{line:2,column:721},end:{line:2,column:722}},loc:{start:{line:2,column:725},end:{line:3,column:72}},line:2},"33":{name:"(anonymous_33)",decl:{start:{line:2,column:866},end:{line:2,column:867}},loc:{start:{line:2,column:877},end:{line:2,column:895}},line:2},"34":{name:"(anonymous_34)",decl:{start:{line:2,column:1617},end:{line:2,column:1618}},loc:{start:{line:2,column:1630},end:{line:2,column:2051}},line:2},"35":{name:"(anonymous_35)",decl:{start:{line:2,column:1673},end:{line:2,column:1674}},loc:{start:{line:2,column:1683},end:{line:2,column:1710}},line:2},"36":{name:"(anonymous_36)",decl:{start:{line:2,column:1812},end:{line:2,column:1813}},loc:{start:{line:2,column:1822},end:{line:2,column:1879}},line:2},"37":{name:"(anonymous_37)",decl:{start:{line:3,column:83},end:{line:3,column:84}},loc:{start:{line:3,column:90},end:{line:3,column:106}},line:3},"38":{name:"qe",decl:{start:{line:3,column:116},end:{line:3,column:118}},loc:{start:{line:3,column:123},end:{line:3,column:250}},line:3},"39":{name:"(anonymous_39)",decl:{start:{line:3,column:168},end:{line:3,column:169}},loc:{start:{line:3,column:178},end:{line:3,column:219}},line:3},"40":{name:"He",decl:{start:{line:3,column:259},end:{line:3,column:261}},loc:{start:{line:3,column:266},end:{line:3,column:326}},line:3},"41":{name:"Qe",decl:{start:{line:3,column:335},end:{line:3,column:337}},loc:{start:{line:3,column:342},end:{line:3,column:562}},line:3},"42":{name:"Ke",decl:{start:{line:3,column:571},end:{line:3,column:573}},loc:{start:{line:3,column:578},end:{line:3,column:1235}},line:3},"43":{name:"(anonymous_43)",decl:{start:{line:3,column:645},end:{line:3,column:646}},loc:{start:{line:3,column:655},end:{line:3,column:737}},line:3},"44":{name:"(anonymous_44)",decl:{start:{line:3,column:864},end:{line:3,column:865}},loc:{start:{line:3,column:875},end:{line:3,column:945}},line:3},"45":{name:"Xe",decl:{start:{line:3,column:1244},end:{line:3,column:1246}},loc:{start:{line:3,column:1251},end:{line:3,column:1347}},line:3},"46":{name:"(anonymous_46)",decl:{start:{line:3,column:1355},end:{line:3,column:1356}},loc:{start:{line:3,column:1359},end:{line:4,column:108}},line:3},"47":{name:"(anonymous_47)",decl:{start:{line:3,column:1501},end:{line:3,column:1502}},loc:{start:{line:3,column:1527},end:{line:3,column:1592}},line:3},"48":{name:"(anonymous_48)",decl:{start:{line:3,column:1592},end:{line:3,column:1593}},loc:{start:{line:3,column:1617},end:{line:3,column:1652}},line:3},"49":{name:"(anonymous_49)",decl:{start:{line:3,column:1652},end:{line:3,column:1653}},loc:{start:{line:3,column:1665},end:{line:3,column:1714}},line:3},"50":{name:"(anonymous_50)",decl:{start:{line:3,column:1714},end:{line:3,column:1715}},loc:{start:{line:3,column:1726},end:{line:3,column:1755}},line:3},"51":{name:"(anonymous_51)",decl:{start:{line:3,column:1755},end:{line:3,column:1756}},loc:{start:{line:3,column:1769},end:{line:3,column:1789}},line:3},"52":{name:"(anonymous_52)",decl:{start:{line:3,column:1789},end:{line:3,column:1790}},loc:{start:{line:3,column:1807},end:{line:3,column:1836}},line:3},"53":{name:"(anonymous_53)",decl:{start:{line:3,column:1836},end:{line:3,column:1837}},loc:{start:{line:3,column:1856},end:{line:3,column:1986}},line:3},"54":{name:"(anonymous_54)",decl:{start:{line:3,column:1986},end:{line:3,column:1987}},loc:{start:{line:3,column:2011},end:{line:3,column:2284}},line:3},"55":{name:"(anonymous_55)",decl:{start:{line:3,column:2284},end:{line:3,column:2285}},loc:{start:{line:3,column:2309},end:{line:3,column:2496}},line:3},"56":{name:"(anonymous_56)",decl:{start:{line:3,column:2513},end:{line:3,column:2514}},loc:{start:{line:3,column:2524},end:{line:3,column:2542}},line:3},"57":{name:"(anonymous_57)",decl:{start:{line:3,column:4225},end:{line:3,column:4226}},loc:{start:{line:3,column:4238},end:{line:3,column:4577}},line:3},"58":{name:"(anonymous_58)",decl:{start:{line:3,column:4367},end:{line:3,column:4368}},loc:{start:{line:3,column:4377},end:{line:3,column:4409}},line:3},"59":{name:"(anonymous_59)",decl:{start:{line:4,column:136},end:{line:4,column:137}},loc:{start:{line:4,column:140},end:{line:4,column:142}},line:4},"60":{name:"et",decl:{start:{line:4,column:152},end:{line:4,column:154}},loc:{start:{line:4,column:159},end:{line:4,column:675}},line:4},"61":{name:"(anonymous_61)",decl:{start:{line:4,column:259},end:{line:4,column:260}},loc:{start:{line:4,column:269},end:{line:4,column:324}},line:4},"62":{name:"(anonymous_62)",decl:{start:{line:4,column:349},end:{line:4,column:350}},loc:{start:{line:4,column:360},end:{line:4,column:427}},line:4},"63":{name:"(anonymous_63)",decl:{start:{line:4,column:445},end:{line:4,column:446}},loc:{start:{line:4,column:456},end:{line:4,column:512}},line:4},"64":{name:"(anonymous_64)",decl:{start:{line:4,column:532},end:{line:4,column:533}},loc:{start:{line:4,column:542},end:{line:4,column:597}},line:4},"65":{name:"tt",decl:{start:{line:4,column:684},end:{line:4,column:686}},loc:{start:{line:4,column:691},end:{line:4,column:854}},line:4},"66":{name:"it",decl:{start:{line:4,column:863},end:{line:4,column:865}},loc:{start:{line:4,column:870},end:{line:4,column:1001}},line:4},"67":{name:"(anonymous_67)",decl:{start:{line:4,column:916},end:{line:4,column:917}},loc:{start:{line:4,column:926},end:{line:4,column:971}},line:4},"68":{name:"nt",decl:{start:{line:4,column:1010},end:{line:4,column:1012}},loc:{start:{line:4,column:1017},end:{line:4,column:1077}},line:4},"69":{name:"ot",decl:{start:{line:4,column:1086},end:{line:4,column:1088}},loc:{start:{line:4,column:1093},end:{line:4,column:1168}},line:4},"70":{name:"at",decl:{start:{line:4,column:1177},end:{line:4,column:1179}},loc:{start:{line:4,column:1184},end:{line:4,column:1366}},line:4},"71":{name:"rt",decl:{start:{line:4,column:1375},end:{line:4,column:1377}},loc:{start:{line:4,column:1382},end:{line:4,column:1447}},line:4},"72":{name:"lt",decl:{start:{line:4,column:1456},end:{line:4,column:1458}},loc:{start:{line:4,column:1463},end:{line:4,column:1939}},line:4},"73":{name:"ct",decl:{start:{line:4,column:1948},end:{line:4,column:1950}},loc:{start:{line:4,column:1955},end:{line:4,column:2606}},line:4},"74":{name:"(anonymous_74)",decl:{start:{line:4,column:2342},end:{line:4,column:2343}},loc:{start:{line:4,column:2352},end:{line:4,column:2389}},line:4},"75":{name:"st",decl:{start:{line:4,column:2615},end:{line:4,column:2617}},loc:{start:{line:4,column:2622},end:{line:4,column:2649}},line:4},"76":{name:"(anonymous_76)",decl:{start:{line:4,column:2657},end:{line:4,column:2658}},loc:{start:{line:4,column:2661},end:{line:5,column:94}},line:4},"77":{name:"(anonymous_77)",decl:{start:{line:4,column:3430},end:{line:4,column:3431}},loc:{start:{line:4,column:3440},end:{line:4,column:3869}},line:4},"78":{name:"(anonymous_78)",decl:{start:{line:4,column:3560},end:{line:4,column:3561}},loc:{start:{line:4,column:3563},end:{line:4,column:3867}},line:4},"79":{name:"(anonymous_79)",decl:{start:{line:4,column:3869},end:{line:4,column:3870}},loc:{start:{line:4,column:3886},end:{line:4,column:4166}},line:4},"80":{name:"(anonymous_80)",decl:{start:{line:4,column:3986},end:{line:4,column:3987}},loc:{start:{line:4,column:3989},end:{line:4,column:4105}},line:4},"81":{name:"(anonymous_81)",decl:{start:{line:4,column:4166},end:{line:4,column:4167}},loc:{start:{line:4,column:4179},end:{line:4,column:4283}},line:4},"82":{name:"(anonymous_82)",decl:{start:{line:4,column:4283},end:{line:4,column:4284}},loc:{start:{line:4,column:4298},end:{line:4,column:4334}},line:4},"83":{name:"(anonymous_83)",decl:{start:{line:4,column:4334},end:{line:4,column:4335}},loc:{start:{line:4,column:4354},end:{line:4,column:4496}},line:4},"84":{name:"(anonymous_84)",decl:{start:{line:4,column:4496},end:{line:4,column:4497}},loc:{start:{line:4,column:4515},end:{line:4,column:4543}},line:4},"85":{name:"(anonymous_85)",decl:{start:{line:4,column:4543},end:{line:4,column:4544}},loc:{start:{line:4,column:4563},end:{line:4,column:4756}},line:4},"86":{name:"(anonymous_86)",decl:{start:{line:4,column:4756},end:{line:4,column:4757}},loc:{start:{line:4,column:4771},end:{line:4,column:4810}},line:4},"87":{name:"(anonymous_87)",decl:{start:{line:4,column:4810},end:{line:4,column:4811}},loc:{start:{line:4,column:4835},end:{line:4,column:4920}},line:4},"88":{name:"(anonymous_88)",decl:{start:{line:4,column:4920},end:{line:4,column:4921}},loc:{start:{line:4,column:4944},end:{line:4,column:4977}},line:4},"89":{name:"(anonymous_89)",decl:{start:{line:4,column:4977},end:{line:4,column:4978}},loc:{start:{line:4,column:5003},end:{line:4,column:5075}},line:4},"90":{name:"(anonymous_90)",decl:{start:{line:4,column:5075},end:{line:4,column:5076}},loc:{start:{line:4,column:5113},end:{line:4,column:5209}},line:4},"91":{name:"(anonymous_91)",decl:{start:{line:4,column:5209},end:{line:4,column:5210}},loc:{start:{line:4,column:5236},end:{line:4,column:5282}},line:4},"92":{name:"(anonymous_92)",decl:{start:{line:4,column:5282},end:{line:4,column:5283}},loc:{start:{line:4,column:5308},end:{line:4,column:5353}},line:4},"93":{name:"(anonymous_93)",decl:{start:{line:4,column:5353},end:{line:4,column:5354}},loc:{start:{line:4,column:5361},end:{line:4,column:5492}},line:4},"94":{name:"(anonymous_94)",decl:{start:{line:4,column:5447},end:{line:4,column:5448}},loc:{start:{line:4,column:5451},end:{line:4,column:5490}},line:4},"95":{name:"(anonymous_95)",decl:{start:{line:4,column:5492},end:{line:4,column:5493}},loc:{start:{line:4,column:5513},end:{line:4,column:5523}},line:4},"96":{name:"(anonymous_96)",decl:{start:{line:4,column:5523},end:{line:4,column:5524}},loc:{start:{line:4,column:5555},end:{line:4,column:5797}},line:4},"97":{name:"(anonymous_97)",decl:{start:{line:4,column:5632},end:{line:4,column:5633}},loc:{start:{line:4,column:5635},end:{line:4,column:5795}},line:4},"98":{name:"(anonymous_98)",decl:{start:{line:4,column:5797},end:{line:4,column:5798}},loc:{start:{line:4,column:5828},end:{line:4,column:6028}},line:4},"99":{name:"(anonymous_99)",decl:{start:{line:4,column:6028},end:{line:4,column:6029}},loc:{start:{line:4,column:6050},end:{line:4,column:6265}},line:4},"100":{name:"(anonymous_100)",decl:{start:{line:4,column:6178},end:{line:4,column:6179}},loc:{start:{line:4,column:6182},end:{line:4,column:6259}},line:4},"101":{name:"(anonymous_101)",decl:{start:{line:4,column:6265},end:{line:4,column:6266}},loc:{start:{line:4,column:6282},end:{line:4,column:6353}},line:4},"102":{name:"(anonymous_102)",decl:{start:{line:4,column:6353},end:{line:4,column:6354}},loc:{start:{line:4,column:6370},end:{line:4,column:7119}},line:4},"103":{name:"(anonymous_103)",decl:{start:{line:4,column:6742},end:{line:4,column:6743}},loc:{start:{line:4,column:6745},end:{line:4,column:6892}},line:4},"104":{name:"(anonymous_104)",decl:{start:{line:4,column:6899},end:{line:4,column:6900}},loc:{start:{line:4,column:6903},end:{line:4,column:7116}},line:4},"105":{name:"(anonymous_105)",decl:{start:{line:4,column:7136},end:{line:4,column:7137}},loc:{start:{line:4,column:7147},end:{line:4,column:7165}},line:4},"106":{name:"(anonymous_106)",decl:{start:{line:4,column:7235},end:{line:4,column:7236}},loc:{start:{line:4,column:7248},end:{line:4,column:7315}},line:4},"107":{name:"(anonymous_107)",decl:{start:{line:4,column:9834},end:{line:4,column:9835}},loc:{start:{line:4,column:9847},end:{line:4,column:11137}},line:4},"108":{name:"(anonymous_108)",decl:{start:{line:4,column:9922},end:{line:4,column:9923}},loc:{start:{line:4,column:9932},end:{line:4,column:9958}},line:4},"109":{name:"(anonymous_109)",decl:{start:{line:4,column:9977},end:{line:4,column:9978}},loc:{start:{line:4,column:9987},end:{line:4,column:10018}},line:4},"110":{name:"(anonymous_110)",decl:{start:{line:4,column:10042},end:{line:4,column:10043}},loc:{start:{line:4,column:10052},end:{line:4,column:10088}},line:4},"111":{name:"(anonymous_111)",decl:{start:{line:4,column:10106},end:{line:4,column:10107}},loc:{start:{line:4,column:10116},end:{line:4,column:10135}},line:4},"112":{name:"(anonymous_112)",decl:{start:{line:4,column:10263},end:{line:4,column:10264}},loc:{start:{line:4,column:10273},end:{line:4,column:10299}},line:4},"113":{name:"(anonymous_113)",decl:{start:{line:4,column:10319},end:{line:4,column:10320}},loc:{start:{line:4,column:10329},end:{line:4,column:10384}},line:4},"114":{name:"(anonymous_114)",decl:{start:{line:4,column:10403},end:{line:4,column:10404}},loc:{start:{line:4,column:10413},end:{line:4,column:10444}},line:4},"115":{name:"(anonymous_115)",decl:{start:{line:4,column:10462},end:{line:4,column:10463}},loc:{start:{line:4,column:10472},end:{line:4,column:10491}},line:4},"116":{name:"(anonymous_116)",decl:{start:{line:4,column:10511},end:{line:4,column:10512}},loc:{start:{line:4,column:10521},end:{line:4,column:10576}},line:4}},branchMap:{"0":{loc:{start:{line:1,column:1719},end:{line:1,column:1778}},type:"binary-expr",locations:[{start:{line:1,column:1719},end:{line:1,column:1744}},{start:{line:1,column:1747},end:{line:1,column:1777}}],line:1},"1":{loc:{start:{line:1,column:1821},end:{line:1,column:1825}},type:"binary-expr",locations:[{start:{line:1,column:1821},end:{line:1,column:1822}},{start:{line:1,column:1824},end:{line:1,column:1825}}],line:1},"2":{loc:{start:{line:1,column:2166},end:{line:1,column:2170}},type:"default-arg",locations:[{start:{line:1,column:2168},end:{line:1,column:2170}}],line:1},"3":{loc:{start:{line:1,column:2171},end:{line:1,column:2175}},type:"default-arg",locations:[{start:{line:1,column:2173},end:{line:1,column:2175}}],line:1},"4":{loc:{start:{line:1,column:2252},end:{line:1,column:2267}},type:"cond-expr",locations:[{start:{line:1,column:2254},end:{line:1,column:2265}},{start:{line:1,column:2266},end:{line:1,column:2267}}],line:1},"5":{loc:{start:{line:1,column:2297},end:{line:1,column:2326}},type:"binary-expr",locations:[{start:{line:1,column:2297},end:{line:1,column:2298}},{start:{line:1,column:2300},end:{line:1,column:2301}},{start:{line:1,column:2303},end:{line:1,column:2326}}],line:1},"6":{loc:{start:{line:1,column:2405},end:{line:1,column:2409}},type:"binary-expr",locations:[{start:{line:1,column:2405},end:{line:1,column:2406}},{start:{line:1,column:2408},end:{line:1,column:2409}}],line:1},"7":{loc:{start:{line:1,column:2543},end:{line:1,column:2664}},type:"if",locations:[{start:{line:1,column:2543},end:{line:1,column:2664}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"8":{loc:{start:{line:1,column:2546},end:{line:1,column:2601}},type:"binary-expr",locations:[{start:{line:1,column:2546},end:{line:1,column:2549}},{start:{line:1,column:2552},end:{line:1,column:2600}}],line:1},"9":{loc:{start:{line:1,column:2682},end:{line:1,column:2756}},type:"if",locations:[{start:{line:1,column:2682},end:{line:1,column:2756}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"10":{loc:{start:{line:1,column:2685},end:{line:1,column:2715}},type:"binary-expr",locations:[{start:{line:1,column:2685},end:{line:1,column:2688}},{start:{line:1,column:2691},end:{line:1,column:2714}}],line:1},"11":{loc:{start:{line:1,column:2774},end:{line:1,column:2882}},type:"if",locations:[{start:{line:1,column:2774},end:{line:1,column:2882}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"12":{loc:{start:{line:1,column:2777},end:{line:1,column:2831}},type:"binary-expr",locations:[{start:{line:1,column:2777},end:{line:1,column:2780}},{start:{line:1,column:2783},end:{line:1,column:2830}}],line:1},"13":{loc:{start:{line:1,column:2869},end:{line:1,column:2880}},type:"cond-expr",locations:[{start:{line:1,column:2877},end:{line:1,column:2878}},{start:{line:1,column:2879},end:{line:1,column:2880}}],line:1},"14":{loc:{start:{line:1,column:2900},end:{line:1,column:3027}},type:"if",locations:[{start:{line:1,column:2900},end:{line:1,column:3027}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"15":{loc:{start:{line:1,column:2903},end:{line:1,column:2933}},type:"binary-expr",locations:[{start:{line:1,column:2903},end:{line:1,column:2906}},{start:{line:1,column:2909},end:{line:1,column:2932}}],line:1},"16":{loc:{start:{line:1,column:2959},end:{line:1,column:3021}},type:"cond-expr",locations:[{start:{line:1,column:2989},end:{line:1,column:2994}},{start:{line:1,column:2995},end:{line:1,column:3021}}],line:1},"17":{loc:{start:{line:1,column:3045},end:{line:1,column:3126}},type:"binary-expr",locations:[{start:{line:1,column:3045},end:{line:1,column:3048}},{start:{line:1,column:3051},end:{line:1,column:3125}}],line:1},"18":{loc:{start:{line:1,column:3596},end:{line:1,column:3600}},type:"binary-expr",locations:[{start:{line:1,column:3596},end:{line:1,column:3597}},{start:{line:1,column:3599},end:{line:1,column:3600}}],line:1},"19":{loc:{start:{line:1,column:5004},end:{line:1,column:5518}},type:"binary-expr",locations:[{start:{line:1,column:5004},end:{line:1,column:5007}},{start:{line:1,column:5010},end:{line:1,column:5517}}],line:1},"20":{loc:{start:{line:1,column:5519},end:{line:1,column:5762}},type:"binary-expr",locations:[{start:{line:1,column:5519},end:{line:1,column:5522}},{start:{line:1,column:5525},end:{line:1,column:5761}}],line:1},"21":{loc:{start:{line:1,column:5617},end:{line:1,column:5651}},type:"cond-expr",locations:[{start:{line:1,column:5646},end:{line:1,column:5648}},{start:{line:1,column:5649},end:{line:1,column:5651}}],line:1},"22":{loc:{start:{line:1,column:5736},end:{line:1,column:5760}},type:"cond-expr",locations:[{start:{line:1,column:5755},end:{line:1,column:5757}},{start:{line:1,column:5758},end:{line:1,column:5760}}],line:1},"23":{loc:{start:{line:2,column:114},end:{line:2,column:180}},type:"if",locations:[{start:{line:2,column:114},end:{line:2,column:180}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:2},"24":{loc:{start:{line:2,column:117},end:{line:2,column:135}},type:"binary-expr",locations:[{start:{line:2,column:117},end:{line:2,column:120}},{start:{line:2,column:122},end:{line:2,column:135}}],line:2},"25":{loc:{start:{line:2,column:198},end:{line:2,column:216}},type:"binary-expr",locations:[{start:{line:2,column:198},end:{line:2,column:201}},{start:{line:2,column:203},end:{line:2,column:216}}],line:2},"26":{loc:{start:{line:2,column:234},end:{line:2,column:468}},type:"if",locations:[{start:{line:2,column:234},end:{line:2,column:468}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:2},"27":{loc:{start:{line:2,column:468},end:{line:2,column:638}},type:"if",locations:[{start:{line:2,column:468},end:{line:2,column:638}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:2},"28":{loc:{start:{line:2,column:532},end:{line:2,column:560}},type:"binary-expr",locations:[{start:{line:2,column:532},end:{line:2,column:548}},{start:{line:2,column:550},end:{line:2,column:560}}],line:2},"29":{loc:{start:{line:2,column:656},end:{line:2,column:712}},type:"binary-expr",locations:[{start:{line:2,column:656},end:{line:2,column:659}},{start:{line:2,column:662},end:{line:2,column:711}}],line:2},"30":{loc:{start:{line:2,column:889},end:{line:2,column:893}},type:"binary-expr",locations:[{start:{line:2,column:889},end:{line:2,column:890}},{start:{line:2,column:892},end:{line:2,column:893}}],line:2},"31":{loc:{start:{line:2,column:1631},end:{line:2,column:1960}},type:"binary-expr",locations:[{start:{line:2,column:1631},end:{line:2,column:1634}},{start:{line:2,column:1637},end:{line:2,column:1959}}],line:2},"32":{loc:{start:{line:2,column:1961},end:{line:2,column:2050}},type:"binary-expr",locations:[{start:{line:2,column:1961},end:{line:2,column:1964}},{start:{line:2,column:1967},end:{line:2,column:2049}}],line:2},"33":{loc:{start:{line:3,column:124},end:{line:3,column:249}},type:"if",locations:[{start:{line:3,column:124},end:{line:3,column:249}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"34":{loc:{start:{line:3,column:267},end:{line:3,column:325}},type:"binary-expr",locations:[{start:{line:3,column:267},end:{line:3,column:270}},{start:{line:3,column:273},end:{line:3,column:324}}],line:3},"35":{loc:{start:{line:3,column:343},end:{line:3,column:561}},type:"if",locations:[{start:{line:3,column:343},end:{line:3,column:561}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"36":{loc:{start:{line:3,column:346},end:{line:3,column:415}},type:"binary-expr",locations:[{start:{line:3,column:346},end:{line:3,column:349}},{start:{line:3,column:352},end:{line:3,column:414}}],line:3},"37":{loc:{start:{line:3,column:579},end:{line:3,column:993}},type:"if",locations:[{start:{line:3,column:579},end:{line:3,column:993}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"38":{loc:{start:{line:3,column:993},end:{line:3,column:1234}},type:"if",locations:[{start:{line:3,column:993},end:{line:3,column:1234}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"39":{loc:{start:{line:3,column:1095},end:{line:3,column:1120}},type:"cond-expr",locations:[{start:{line:3,column:1116},end:{line:3,column:1117}},{start:{line:3,column:1118},end:{line:3,column:1120}}],line:3},"40":{loc:{start:{line:3,column:1252},end:{line:3,column:1346}},type:"if",locations:[{start:{line:3,column:1252},end:{line:3,column:1346}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"41":{loc:{start:{line:3,column:1255},end:{line:3,column:1300}},type:"binary-expr",locations:[{start:{line:3,column:1255},end:{line:3,column:1258}},{start:{line:3,column:1261},end:{line:3,column:1299}}],line:3},"42":{loc:{start:{line:3,column:1815},end:{line:3,column:1835}},type:"binary-expr",locations:[{start:{line:3,column:1815},end:{line:3,column:1826}},{start:{line:3,column:1828},end:{line:3,column:1835}}],line:3},"43":{loc:{start:{line:3,column:1857},end:{line:3,column:1985}},type:"switch",locations:[{start:{line:3,column:1867},end:{line:3,column:1890}},{start:{line:3,column:1890},end:{line:3,column:1918}},{start:{line:3,column:1918},end:{line:3,column:1942}},{start:{line:3,column:1942},end:{line:3,column:1968}},{start:{line:3,column:1968},end:{line:3,column:1984}}],line:3},"44":{loc:{start:{line:3,column:2012},end:{line:3,column:2283}},type:"switch",locations:[{start:{line:3,column:2022},end:{line:3,column:2075}},{start:{line:3,column:2075},end:{line:3,column:2132}},{start:{line:3,column:2132},end:{line:3,column:2186}},{start:{line:3,column:2186},end:{line:3,column:2235}},{start:{line:3,column:2235},end:{line:3,column:2282}}],line:3},"45":{loc:{start:{line:3,column:2310},end:{line:3,column:2495}},type:"switch",locations:[{start:{line:3,column:2320},end:{line:3,column:2356}},{start:{line:3,column:2356},end:{line:3,column:2394}},{start:{line:3,column:2394},end:{line:3,column:2431}},{start:{line:3,column:2431},end:{line:3,column:2464}},{start:{line:3,column:2464},end:{line:3,column:2494}}],line:3},"46":{loc:{start:{line:3,column:2536},end:{line:3,column:2540}},type:"binary-expr",locations:[{start:{line:3,column:2536},end:{line:3,column:2537}},{start:{line:3,column:2539},end:{line:3,column:2540}}],line:3},"47":{loc:{start:{line:3,column:4239},end:{line:3,column:4478}},type:"binary-expr",locations:[{start:{line:3,column:4239},end:{line:3,column:4242}},{start:{line:3,column:4245},end:{line:3,column:4477}}],line:3},"48":{loc:{start:{line:3,column:4479},end:{line:3,column:4576}},type:"binary-expr",locations:[{start:{line:3,column:4479},end:{line:3,column:4482}},{start:{line:3,column:4485},end:{line:3,column:4575}}],line:3},"49":{loc:{start:{line:3,column:4492},end:{line:3,column:4528}},type:"cond-expr",locations:[{start:{line:3,column:4524},end:{line:3,column:4525}},{start:{line:3,column:4526},end:{line:3,column:4528}}],line:3},"50":{loc:{start:{line:3,column:4537},end:{line:3,column:4574}},type:"cond-expr",locations:[{start:{line:3,column:4571},end:{line:3,column:4572}},{start:{line:3,column:4573},end:{line:3,column:4574}}],line:3},"51":{loc:{start:{line:4,column:160},end:{line:4,column:603}},type:"if",locations:[{start:{line:4,column:160},end:{line:4,column:603}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"52":{loc:{start:{line:4,column:603},end:{line:4,column:674}},type:"if",locations:[{start:{line:4,column:603},end:{line:4,column:674}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"53":{loc:{start:{line:4,column:639},end:{line:4,column:672}},type:"binary-expr",locations:[{start:{line:4,column:639},end:{line:4,column:662}},{start:{line:4,column:664},end:{line:4,column:672}}],line:4},"54":{loc:{start:{line:4,column:692},end:{line:4,column:853}},type:"if",locations:[{start:{line:4,column:692},end:{line:4,column:853}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"55":{loc:{start:{line:4,column:695},end:{line:4,column:732}},type:"binary-expr",locations:[{start:{line:4,column:695},end:{line:4,column:698}},{start:{line:4,column:701},end:{line:4,column:731}}],line:4},"56":{loc:{start:{line:4,column:871},end:{line:4,column:1000}},type:"if",locations:[{start:{line:4,column:871},end:{line:4,column:1000}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"57":{loc:{start:{line:4,column:1018},end:{line:4,column:1076}},type:"binary-expr",locations:[{start:{line:4,column:1018},end:{line:4,column:1021}},{start:{line:4,column:1024},end:{line:4,column:1075}}],line:4},"58":{loc:{start:{line:4,column:1094},end:{line:4,column:1167}},type:"if",locations:[{start:{line:4,column:1094},end:{line:4,column:1167}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"59":{loc:{start:{line:4,column:1097},end:{line:4,column:1124}},type:"binary-expr",locations:[{start:{line:4,column:1097},end:{line:4,column:1100}},{start:{line:4,column:1103},end:{line:4,column:1123}}],line:4},"60":{loc:{start:{line:4,column:1185},end:{line:4,column:1365}},type:"if",locations:[{start:{line:4,column:1185},end:{line:4,column:1365}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"61":{loc:{start:{line:4,column:1188},end:{line:4,column:1217}},type:"binary-expr",locations:[{start:{line:4,column:1188},end:{line:4,column:1191}},{start:{line:4,column:1194},end:{line:4,column:1216}}],line:4},"62":{loc:{start:{line:4,column:1260},end:{line:4,column:1359}},type:"cond-expr",locations:[{start:{line:4,column:1303},end:{line:4,column:1356}},{start:{line:4,column:1357},end:{line:4,column:1359}}],line:4},"63":{loc:{start:{line:4,column:1260},end:{line:4,column:1302}},type:"binary-expr",locations:[{start:{line:4,column:1260},end:{line:4,column:1280}},{start:{line:4,column:1282},end:{line:4,column:1302}}],line:4},"64":{loc:{start:{line:4,column:1309},end:{line:4,column:1355}},type:"cond-expr",locations:[{start:{line:4,column:1330},end:{line:4,column:1334}},{start:{line:4,column:1335},end:{line:4,column:1355}}],line:4},"65":{loc:{start:{line:4,column:1383},end:{line:4,column:1446}},type:"binary-expr",locations:[{start:{line:4,column:1383},end:{line:4,column:1386}},{start:{line:4,column:1389},end:{line:4,column:1445}}],line:4},"66":{loc:{start:{line:4,column:1464},end:{line:4,column:1938}},type:"if",locations:[{start:{line:4,column:1464},end:{line:4,column:1938}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"67":{loc:{start:{line:4,column:1467},end:{line:4,column:1616}},type:"binary-expr",locations:[{start:{line:4,column:1467},end:{line:4,column:1470}},{start:{line:4,column:1473},end:{line:4,column:1615}}],line:4},"68":{loc:{start:{line:4,column:1640},end:{line:4,column:1667}},type:"cond-expr",locations:[{start:{line:4,column:1663},end:{line:4,column:1664}},{start:{line:4,column:1665},end:{line:4,column:1667}}],line:4},"69":{loc:{start:{line:4,column:1675},end:{line:4,column:1723}},type:"cond-expr",locations:[{start:{line:4,column:1719},end:{line:4,column:1720}},{start:{line:4,column:1721},end:{line:4,column:1723}}],line:4},"70":{loc:{start:{line:4,column:1675},end:{line:4,column:1718}},type:"binary-expr",locations:[{start:{line:4,column:1675},end:{line:4,column:1698}},{start:{line:4,column:1700},end:{line:4,column:1718}}],line:4},"71":{loc:{start:{line:4,column:1731},end:{line:4,column:1829}},type:"cond-expr",locations:[{start:{line:4,column:1825},end:{line:4,column:1826}},{start:{line:4,column:1827},end:{line:4,column:1829}}],line:4},"72":{loc:{start:{line:4,column:1731},end:{line:4,column:1824}},type:"binary-expr",locations:[{start:{line:4,column:1731},end:{line:4,column:1754}},{start:{line:4,column:1756},end:{line:4,column:1775}},{start:{line:4,column:1778},end:{line:4,column:1798}},{start:{line:4,column:1800},end:{line:4,column:1823}}],line:4},"73":{loc:{start:{line:4,column:1837},end:{line:4,column:1936}},type:"cond-expr",locations:[{start:{line:4,column:1932},end:{line:4,column:1933}},{start:{line:4,column:1934},end:{line:4,column:1936}}],line:4},"74":{loc:{start:{line:4,column:1837},end:{line:4,column:1931}},type:"binary-expr",locations:[{start:{line:4,column:1837},end:{line:4,column:1860}},{start:{line:4,column:1862},end:{line:4,column:1881}},{start:{line:4,column:1883},end:{line:4,column:1931}}],line:4},"75":{loc:{start:{line:4,column:1885},end:{line:4,column:1930}},type:"binary-expr",locations:[{start:{line:4,column:1885},end:{line:4,column:1905}},{start:{line:4,column:1907},end:{line:4,column:1930}}],line:4},"76":{loc:{start:{line:4,column:1956},end:{line:4,column:2433}},type:"if",locations:[{start:{line:4,column:1956},end:{line:4,column:2433}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"77":{loc:{start:{line:4,column:2433},end:{line:4,column:2605}},type:"if",locations:[{start:{line:4,column:2433},end:{line:4,column:2605}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"78":{loc:{start:{line:4,column:2564},end:{line:4,column:2579}},type:"cond-expr",locations:[{start:{line:4,column:2574},end:{line:4,column:2576}},{start:{line:4,column:2577},end:{line:4,column:2579}}],line:4},"79":{loc:{start:{line:4,column:2588},end:{line:4,column:2603}},type:"cond-expr",locations:[{start:{line:4,column:2598},end:{line:4,column:2600}},{start:{line:4,column:2601},end:{line:4,column:2603}}],line:4},"80":{loc:{start:{line:4,column:2623},end:{line:4,column:2648}},type:"binary-expr",locations:[{start:{line:4,column:2623},end:{line:4,column:2626}},{start:{line:4,column:2628},end:{line:4,column:2648}}],line:4},"81":{loc:{start:{line:4,column:3564},end:{line:4,column:3633}},type:"if",locations:[{start:{line:4,column:3564},end:{line:4,column:3633}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"82":{loc:{start:{line:4,column:3806},end:{line:4,column:3842}},type:"binary-expr",locations:[{start:{line:4,column:3806},end:{line:4,column:3818}},{start:{line:4,column:3820},end:{line:4,column:3842}}],line:4},"83":{loc:{start:{line:4,column:3887},end:{line:4,column:4165}},type:"binary-expr",locations:[{start:{line:4,column:3887},end:{line:4,column:3912}},{start:{line:4,column:3914},end:{line:4,column:3944}},{start:{line:4,column:3947},end:{line:4,column:4164}}],line:4},"84":{loc:{start:{line:4,column:4434},end:{line:4,column:4495}},type:"binary-expr",locations:[{start:{line:4,column:4434},end:{line:4,column:4457}},{start:{line:4,column:4459},end:{line:4,column:4471}},{start:{line:4,column:4473},end:{line:4,column:4495}}],line:4},"85":{loc:{start:{line:4,column:4619},end:{line:4,column:4755}},type:"binary-expr",locations:[{start:{line:4,column:4619},end:{line:4,column:4648}},{start:{line:4,column:4650},end:{line:4,column:4702}},{start:{line:4,column:4704},end:{line:4,column:4755}}],line:4},"86":{loc:{start:{line:4,column:5647},end:{line:4,column:5794}},type:"binary-expr",locations:[{start:{line:4,column:5647},end:{line:4,column:5649}},{start:{line:4,column:5651},end:{line:4,column:5703}},{start:{line:4,column:5706},end:{line:4,column:5793}}],line:4},"87":{loc:{start:{line:4,column:5829},end:{line:4,column:5972}},type:"if",locations:[{start:{line:4,column:5829},end:{line:4,column:5972}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"88":{loc:{start:{line:4,column:6283},end:{line:4,column:6352}},type:"binary-expr",locations:[{start:{line:4,column:6283},end:{line:4,column:6298}},{start:{line:4,column:6301},end:{line:4,column:6351}}],line:4},"89":{loc:{start:{line:4,column:6371},end:{line:4,column:6609}},type:"if",locations:[{start:{line:4,column:6371},end:{line:4,column:6609}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"90":{loc:{start:{line:4,column:6828},end:{line:4,column:6867}},type:"binary-expr",locations:[{start:{line:4,column:6828},end:{line:4,column:6854}},{start:{line:4,column:6856},end:{line:4,column:6867}}],line:4},"91":{loc:{start:{line:4,column:7159},end:{line:4,column:7163}},type:"binary-expr",locations:[{start:{line:4,column:7159},end:{line:4,column:7160}},{start:{line:4,column:7162},end:{line:4,column:7163}}],line:4},"92":{loc:{start:{line:4,column:7249},end:{line:4,column:7314}},type:"if",locations:[{start:{line:4,column:7249},end:{line:4,column:7314}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"93":{loc:{start:{line:4,column:7252},end:{line:4,column:7268}},type:"binary-expr",locations:[{start:{line:4,column:7252},end:{line:4,column:7255}},{start:{line:4,column:7257},end:{line:4,column:7268}}],line:4},"94":{loc:{start:{line:4,column:7280},end:{line:4,column:7313}},type:"binary-expr",locations:[{start:{line:4,column:7280},end:{line:4,column:7290}},{start:{line:4,column:7293},end:{line:4,column:7312}}],line:4},"95":{loc:{start:{line:4,column:9848},end:{line:4,column:10653}},type:"if",locations:[{start:{line:4,column:9848},end:{line:4,column:10653}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"96":{loc:{start:{line:4,column:10653},end:{line:4,column:11136}},type:"binary-expr",locations:[{start:{line:4,column:10653},end:{line:4,column:10656}},{start:{line:4,column:10659},end:{line:4,column:11135}}],line:4},"97":{loc:{start:{line:4,column:10800},end:{line:4,column:10838}},type:"binary-expr",locations:[{start:{line:4,column:10800},end:{line:4,column:10835}},{start:{line:4,column:10837},end:{line:4,column:10838}}],line:4},"98":{loc:{start:{line:4,column:10897},end:{line:4,column:10927}},type:"cond-expr",locations:[{start:{line:4,column:10923},end:{line:4,column:10924}},{start:{line:4,column:10925},end:{line:4,column:10927}}],line:4},"99":{loc:{start:{line:4,column:10935},end:{line:4,column:10962}},type:"cond-expr",locations:[{start:{line:4,column:10958},end:{line:4,column:10959}},{start:{line:4,column:10960},end:{line:4,column:10962}}],line:4},"100":{loc:{start:{line:4,column:11110},end:{line:4,column:11134}},type:"cond-expr",locations:[{start:{line:4,column:11131},end:{line:4,column:11132}},{start:{line:4,column:11133},end:{line:4,column:11134}}],line:4}},s:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"116":0,"117":0,"118":0,"119":0,"120":0,"121":0,"122":0,"123":0,"124":0,"125":0,"126":0,"127":0,"128":0,"129":0,"130":0,"131":0,"132":0,"133":0,"134":0,"135":0,"136":0,"137":0,"138":0,"139":0,"140":0,"141":0,"142":0,"143":0,"144":0,"145":0,"146":0,"147":0,"148":0,"149":0,"150":0,"151":0,"152":0,"153":0,"154":0,"155":0,"156":0,"157":0,"158":0,"159":0,"160":0,"161":0,"162":0,"163":0,"164":0,"165":0,"166":0,"167":0,"168":0,"169":0,"170":0,"171":0,"172":0,"173":0,"174":0,"175":0,"176":0,"177":0,"178":0,"179":0,"180":0,"181":0,"182":0,"183":0,"184":0,"185":0,"186":0,"187":0,"188":0,"189":0,"190":0,"191":0,"192":0,"193":0,"194":0,"195":0,"196":0,"197":0,"198":0,"199":0,"200":0,"201":0,"202":0,"203":0,"204":0,"205":0,"206":0,"207":0,"208":0,"209":0,"210":0,"211":0,"212":0,"213":0,"214":0,"215":0,"216":0,"217":0,"218":0,"219":0,"220":0,"221":0,"222":0,"223":0,"224":0,"225":0,"226":0,"227":0,"228":0,"229":0,"230":0,"231":0,"232":0,"233":0,"234":0,"235":0,"236":0,"237":0,"238":0,"239":0,"240":0,"241":0,"242":0,"243":0,"244":0,"245":0,"246":0,"247":0,"248":0,"249":0,"250":0,"251":0,"252":0,"253":0,"254":0,"255":0,"256":0,"257":0,"258":0,"259":0,"260":0,"261":0,"262":0,"263":0,"264":0,"265":0,"266":0,"267":0,"268":0,"269":0,"270":0,"271":0,"272":0,"273":0,"274":0,"275":0,"276":0,"277":0,"278":0,"279":0,"280":0,"281":0,"282":0,"283":0,"284":0,"285":0,"286":0,"287":0,"288":0,"289":0,"290":0,"291":0,"292":0},f:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"116":0},b:{"0":[0,0],"1":[0,0],"2":[0],"3":[0],"4":[0,0],"5":[0,0,0],"6":[0,0],"7":[0,0],"8":[0,0],"9":[0,0],"10":[0,0],"11":[0,0],"12":[0,0],"13":[0,0],"14":[0,0],"15":[0,0],"16":[0,0],"17":[0,0],"18":[0,0],"19":[0,0],"20":[0,0],"21":[0,0],"22":[0,0],"23":[0,0],"24":[0,0],"25":[0,0],"26":[0,0],"27":[0,0],"28":[0,0],"29":[0,0],"30":[0,0],"31":[0,0],"32":[0,0],"33":[0,0],"34":[0,0],"35":[0,0],"36":[0,0],"37":[0,0],"38":[0,0],"39":[0,0],"40":[0,0],"41":[0,0],"42":[0,0],"43":[0,0,0,0,0],"44":[0,0,0,0,0],"45":[0,0,0,0,0],"46":[0,0],"47":[0,0],"48":[0,0],"49":[0,0],"50":[0,0],"51":[0,0],"52":[0,0],"53":[0,0],"54":[0,0],"55":[0,0],"56":[0,0],"57":[0,0],"58":[0,0],"59":[0,0],"60":[0,0],"61":[0,0],"62":[0,0],"63":[0,0],"64":[0,0],"65":[0,0],"66":[0,0],"67":[0,0],"68":[0,0],"69":[0,0],"70":[0,0],"71":[0,0],"72":[0,0,0,0],"73":[0,0],"74":[0,0,0],"75":[0,0],"76":[0,0],"77":[0,0],"78":[0,0],"79":[0,0],"80":[0,0],"81":[0,0],"82":[0,0],"83":[0,0,0],"84":[0,0,0],"85":[0,0,0],"86":[0,0,0],"87":[0,0],"88":[0,0],"89":[0,0],"90":[0,0],"91":[0,0],"92":[0,0],"93":[0,0],"94":[0,0],"95":[0,0],"96":[0,0],"97":[0,0],"98":[0,0],"99":[0,0],"100":[0,0]},inputSourceMap:{version:3,sources:["src/app/features/main-layout/services/nav.service.ts","src/app/core/services/breadcrumb.service.ts","src/app/features/main-layout/components/topbar/topbar.component.ts","src/app/features/main-layout/components/topbar/topbar.component.html","src/app/features/main-layout/components/sidebar/sidebar.component.ts","src/app/features/main-layout/components/sidebar/sidebar.component.html","src/app/features/notification/components/notification-topbar-panel-component/notification-topbar-panel-component.ts","src/app/features/notification/components/notification-topbar-panel-component/notification-topbar-panel-component.html","src/app/features/main-layout/main-layout.component.ts","src/app/features/main-layout/main-layout.component.html"],sourcesContent:["import { Injectable } from '@angular/core';\nimport { UserRole } from '../../../core/models/user-role.enum';\nimport { NavItem } from '../../../core/models/nav-item.model';\n\n@Injectable({ providedIn: 'root' })\nexport class NavService {\n public getNavItems(role: UserRole): NavItem[]{\n //routes provvisorie, da definire e confrontare con app.routes.ts\n const NavItemList : NavItem[] = [\n {\n label: \"Dashboard\",\n icon: \"dashboard.png\",\n route: \"dashboard\"\n },\n {\n label: \"Notifiche\",\n icon: \"notification.png\",\n route: \"notifications\"\n },\n {\n label: \"Dispositivi\",\n icon: \"device.png\",\n route: \"apartment-monitor\"\n },\n {\n label: \"Gestione Allarmi\",\n icon: \"alarm-management.png\",\n route: \"alarms/alarm-management\"\n },\n {\n label: \"Storico Allarmi\",\n icon: \"alarm-history.png\",\n route: \"alarms/alarm-history\"\n },\n {\n label: \"Configurazione Allarmi\",\n icon: \"alarm-configuration.png\",\n route: \"alarms/alarm-configuration\",\n requiredRole: UserRole.AMMINISTRATORE\n },\n {\n label: \"Analytics\",\n icon: \"analytics.png\",\n route: \"analytics\"\n },\n {\n label: \"Gestione Reparti\",\n icon: \"ward-management.png\",\n route: \"ward-management\",\n requiredRole: UserRole.AMMINISTRATORE\n },\n {\n label: \"Gestione Utenti\",\n icon: \"user-management.png\",\n route: \"user-management\",\n requiredRole: UserRole.AMMINISTRATORE\n },\n ];\n\n let filteredList = NavItemList;\n if(role === UserRole.OPERATORE_SANITARIO)\n filteredList = NavItemList.filter(n => !n.requiredRole); // !undefined = true\n\n return filteredList;\n }\n}\n","import { Injectable } from '@angular/core';\r\nimport { Router, NavigationEnd, ActivatedRoute } from '@angular/router';\r\nimport { filter, map, startWith } from 'rxjs/operators';\r\nimport { Observable } from 'rxjs';\r\n\r\nexport interface Breadcrumb {\r\n label: string;\r\n url: string;\r\n}\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class BreadcrumbService {\r\n breadcrumbs$: Observable;\r\n\r\n constructor(private readonly router: Router, private readonly activatedRoute: ActivatedRoute) {\r\n this.breadcrumbs$ = this.router.events.pipe(\r\n filter(e => e instanceof NavigationEnd),\r\n startWith(null),\r\n map(() => this.buildBreadcrumbs(this.activatedRoute.root))\r\n );\r\n }\r\n\r\n private buildBreadcrumbs(\r\n route: ActivatedRoute,\r\n url = '',\r\n crumbs: Breadcrumb[] = []\r\n ): Breadcrumb[] {\r\n for (const child of route.children) {\r\n const segment = child.snapshot.url.map(s => s.path).join('/');\r\n const fullUrl = segment ? `${url}/${segment}` : url;\r\n const label = child.snapshot.data['breadcrumb'];\r\n\r\n if (label && segment) {\r\n crumbs.push({ label, url: fullUrl });\r\n }\r\n\r\n this.buildBreadcrumbs(child, fullUrl, crumbs);\r\n }\r\n\r\n return crumbs;\r\n }\r\n}","import { Component,EventEmitter, Input, Output } from '@angular/core';\nimport { UserInfo } from '../../../../core/models/user-info.model';\nimport { AsyncPipe } from '@angular/common';\nimport { Breadcrumb, BreadcrumbService } from '../../../../core/services/breadcrumb.service';\nimport { Observable } from 'rxjs';\nimport { RouterModule } from '@angular/router';\n\n@Component({ \n selector: 'app-topbar', \n standalone: true,\n imports:[AsyncPipe, RouterModule],\n templateUrl: './topbar.component.html',\n styleUrl: './topbar.component.css'})\nexport class TopbarComponent {\n @Input() user!: UserInfo;\n @Input() isProfileActive = false;\n @Input() isNotificationActive = false;\n @Input() unreadNotificationsCount = 0;\n @Input() showVimarWarning = false;\n @Output() profileClicked = new EventEmitter();\n @Output() logoutClicked = new EventEmitter();\n @Output() hamburgerClicked = new EventEmitter();\n @Output() notificationClicked = new EventEmitter();\n breadcrumbs$: Observable;\n\n constructor(private readonly breadcrumbService: BreadcrumbService) {\n this.breadcrumbs$ = this.breadcrumbService.breadcrumbs$;\n }\n\n public onNotificationClick(): void {\n this.notificationClicked.emit();\n }\n\n public onProfileClick(): void {\n this.profileClicked.emit();\n }\n}","
\n
\n
\n \n \"\"\n
\n

View4Life

\n \n
\n
\n\n
\n \n\n \n
\n
\n\n @if (showVimarWarning) {\n
\n \n Account da associare a MyVimar\n \n
\n }\n\n
","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { NavItem } from '../../../../core/models/nav-item.model';\nimport { RouterLink, RouterLinkActive } from '@angular/router';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'app-sidebar',\n standalone: true,\n imports: [\n RouterLink,\n RouterLinkActive,\n CommonModule,\n ],\n templateUrl: './sidebar.component.html',\n styleUrl: './sidebar.component.css'\n})\nexport class SidebarComponent {\n @Input() navItems!: NavItem[];\n @Input() isCollapsed!: boolean;\n @Input() isProfileMode = false;\n @Input() canOpenProfile = false;\n @Output() profileClicked = new EventEmitter();\n @Output() collapsed = new EventEmitter();\n @Output() navItemSelected = new EventEmitter();\n}\n","","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\nimport { DatePipe } from '@angular/common';\nimport { NotificationEvent } from '../../models/notification-event.model';\nimport { AlarmPriority } from '../../../../core/alarm/models/alarm-priority.enum';\nimport {\n extractPriorityFromNotificationTitle,\n stripPriorityFromNotificationTitle,\n} from '../../../../core/notification/utils/notification-priority-display.util';\n\n@Component({\n selector: 'app-notification-topbar-panel-component',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [DatePipe],\n templateUrl: './notification-topbar-panel-component.html',\n styleUrl: './notification-topbar-panel-component.css',\n})\nexport class NotificationTopbarPanelComponent {\n @Input() notifications: ReadonlyArray = [];\n @Output() viewAllClicked = new EventEmitter();\n @Output() notificationSelected = new EventEmitter();\n @Output() removeClicked = new EventEmitter();\n @Output() clearAllClicked = new EventEmitter();\n\n private readonly maxVisibleNotifications = 6;\n\n public get visibleNotifications(): ReadonlyArray {\n return this.notifications.slice(0, this.maxVisibleNotifications);\n }\n\n public onNotificationSelected(notificationId: string): void {\n this.notificationSelected.emit(notificationId);\n }\n\n public onRemove(notificationId: string, event?: Event): void {\n event?.stopPropagation();\n this.removeClicked.emit(notificationId);\n }\n\n public onClearAll(): void {\n this.clearAllClicked.emit();\n }\n\n public getPriority(notification: NotificationEvent): AlarmPriority | null {\n return extractPriorityFromNotificationTitle(notification.title);\n }\n\n public getDisplayTitle(notification: NotificationEvent): string {\n return stripPriorityFromNotificationTitle(notification.title) || notification.title;\n }\n\n public getPrioritySymbol(priority: AlarmPriority): string {\n switch (priority) {\n case AlarmPriority.WHITE:\n return 'i';\n case AlarmPriority.GREEN:\n return '\\u2022';\n case AlarmPriority.ORANGE:\n return '!';\n case AlarmPriority.RED:\n return '\\u25b2';\n default:\n return '';\n }\n }\n\n public getPriorityBubbleClass(priority: AlarmPriority): string {\n switch (priority) {\n case AlarmPriority.WHITE:\n return 'border-slate-400 text-slate-700';\n case AlarmPriority.GREEN:\n return 'border-emerald-500 text-emerald-700';\n case AlarmPriority.ORANGE:\n return 'border-amber-500 text-amber-700';\n case AlarmPriority.RED:\n return 'border-rose-500 text-rose-700';\n default:\n return 'border-slate-400 text-slate-700';\n }\n }\n\n public getPrioritySymbolClass(priority: AlarmPriority): string {\n switch (priority) {\n case AlarmPriority.WHITE:\n return 'text-slate-600';\n case AlarmPriority.GREEN:\n return 'text-emerald-600';\n case AlarmPriority.ORANGE:\n return 'text-amber-600';\n case AlarmPriority.RED:\n return 'text-rose-600';\n default:\n return 'text-slate-600';\n }\n }\n}\n","
\n
\n

Notifiche

\n
\n @if (visibleNotifications.length > 0) {\n \n }\n \n
\n
\n\n @if (visibleNotifications.length === 0) {\n

Nessuna notifica disponibile.

\n } @else {\n
    \n @for (notification of visibleNotifications; track notification.notificationId) {\n
  • \n
    \n \n
    \n @if (getPriority(notification); as notificationPriority) {\n \n \n {{ notificationPriority }}\n \n \n {{ getPrioritySymbol(notificationPriority) }}\n \n \n }\n

    {{ getDisplayTitle(notification) }}

    \n
    \n \n \n \n \n \n \n \n
    \n
  • \n }\n
\n }\n
\n","import { Component, inject, ChangeDetectionStrategy, OnDestroy, OnInit, ChangeDetectorRef, ElementRef, ViewChild, AfterViewInit } from '@angular/core';\nimport { NavItem } from '../../core/models/nav-item.model';\nimport { Observable, Subject, take, takeUntil } from 'rxjs';\nimport { NavService } from './services/nav.service';\nimport { InternalAuthService } from '../../core/services/internal-auth.service';\nimport { AlarmStateService } from '../../core/alarm/services/alarm-state.service';\nimport { TopbarComponent } from './components/topbar/topbar.component';\nimport { SidebarComponent } from './components/sidebar/sidebar.component';\nimport { CommonModule } from '@angular/common';\nimport { UserRole } from '../../core/models/user-role.enum';\nimport { Router, RouterOutlet } from '@angular/router';\nimport { UserInfo } from '../../core/models/user-info.model';\nimport { NotificationEvent } from '../notification/models/notification-event.model';\nimport { NotificationTopbarPanelComponent } from '../notification/components/notification-topbar-panel-component/notification-topbar-panel-component';\nimport { MyVimarAccount } from '../my-vimar-integration/models/my-vimar-account.model';\nimport { IVimarCloudApiService, VIMAR_CLOUD_API_SERVICE } from '../../core/services/vimar-cloud-api.service.interface';\nimport { AlarmManagementRefreshService } from '../../core/alarm/services/alarm-management-refresh.service';\n@Component({\n selector: 'app-main-layout',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n RouterOutlet,\n TopbarComponent,\n NotificationTopbarPanelComponent,\n SidebarComponent\n ],\n templateUrl: './main-layout.component.html',\n styleUrl: './main-layout.component.css'\n})\nexport class MainLayoutComponent implements OnInit, OnDestroy, AfterViewInit {\n @ViewChild('topbarRef', { read: ElementRef }) topbarRef!: ElementRef;\n public isCollapsed: boolean = true;\n public navItems!: NavItem[];\n public isProfilePanelOpen = false;\n public isAdmin = false;\n public isVimarStatusLoading = false;\n public vimarStatusError = '';\n public vimarAccount: MyVimarAccount | null = null;\n public showVimarAssociationWarning = false;\n public isNotificationPanelOpen = false;\n public realtimeToastMessage: string | null = null;\n public realtimeToastKind: 'alert' | 'success' = 'alert';\n\n private readonly navService = inject(NavService);\n private readonly internalAuthService = inject(InternalAuthService);\n private readonly alarmStateService = inject(AlarmStateService);\n private readonly alarmManagementRefreshService = inject(AlarmManagementRefreshService);\n private readonly router = inject(Router);\n private readonly myVimarService = inject(VIMAR_CLOUD_API_SERVICE, { optional: true }) as IVimarCloudApiService | null;\n public readonly unreadNotificationsCount$ = this.alarmStateService.getUnreadNotificationsCount$();\n public readonly notifications$: Observable = this.alarmStateService.getNotifications$();\n private readonly cdr = inject(ChangeDetectorRef);\n private readonly destroy$ = new Subject();\n private toastTimer: ReturnType | null = null;\n private latestRealtimeNotificationId: string | null = null;\n\n public currentUser: UserInfo = {\n username: '',\n firstName: '',\n lastName: '',\n role: UserRole.OPERATORE_SANITARIO\n };\n\n public activeAlarmCount$: Observable = this.alarmStateService.getActiveAlarmsCount$();\n private resizeObserver!: ResizeObserver;\n\n\n public ngOnInit(): void {\n this.bindRealtimeAlarmNotifications();\n\n this.internalAuthService\n .getCurrentUser$()\n .pipe(take(1), takeUntil(this.destroy$))\n .subscribe((session) => {\n if (!session) {\n this.navItems = [];\n void this.router.navigate(['/auth/login']);\n return;\n }\n\n this.currentUser = {\n username: session.username,\n firstName: session.username,\n lastName: '',\n role: session.role,\n };\n this.isAdmin = session.role === UserRole.AMMINISTRATORE;\n this.navItems = this.navService.getNavItems(session.role);\n\n if (this.isAdmin) {\n this.loadVimarStatus();\n }\n\n this.cdr.markForCheck();\n });\n }\n\n public ngAfterViewInit(): void {\n if (typeof ResizeObserver === 'undefined' || !this.topbarRef?.nativeElement) {\n return;\n }\n\n this.resizeObserver = new ResizeObserver(entries => {\n for (const entry of entries) {\n const h = entry.contentRect.height;\n document.documentElement.style.setProperty('--topbar-height', `${h}px`);\n }\n });\n this.resizeObserver.observe(this.topbarRef.nativeElement);\n }\n\n public ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n this.clearToastTimer();\n this.resizeObserver?.disconnect();\n }\n\n public toggleSidebar(): void {\n this.isCollapsed = !this.isCollapsed;\n }\n\n public toggleProfilePanel(): void {\n this.closeNotificationPanel();\n this.isProfilePanelOpen = !this.isProfilePanelOpen;\n\n if (this.isProfilePanelOpen && this.isAdmin) {\n this.loadVimarStatus();\n }\n }\n\n public closeProfilePanel(): void {\n this.isProfilePanelOpen = false;\n }\n\n public onNavItemSelected(route: string): void {\n this.closeProfilePanel();\n this.closeNotificationPanel();\n\n if (route !== 'alarms/alarm-management') {\n return;\n }\n\n if (!this.router.url.includes('/alarms/alarm-management')) {\n return;\n }\n\n this.alarmManagementRefreshService.requestRefresh();\n }\n\n public goToVimarLink(): void {\n void this.router.navigate(['/vimar-link']);\n }\n\n public toggleNotificationPanel(): void {\n this.closeProfilePanel();\n this.isNotificationPanelOpen = !this.isNotificationPanelOpen;\n }\n\n public closeNotificationPanel(): void {\n this.isNotificationPanelOpen = false;\n }\n\n public openNotificationsArchive(): void {\n this.closeNotificationPanel();\n void this.router.navigate(['/notifications']);\n }\n\n public openNotificationsArchiveFromPreview(notificationId: string): void {\n this.closeNotificationPanel();\n\n void this.router.navigate(['/notifications'], {\n queryParams: { focus: notificationId },\n });\n }\n\n public removeTopbarNotification(notificationId: string): void {\n this.alarmStateService.removeNotification(notificationId);\n }\n\n public clearTopbarNotifications(): void {\n this.alarmStateService.clearNotifications();\n }\n\n public logout(): void {\n this.closeNotificationPanel();\n this.internalAuthService.logoutFromBackend().subscribe(() => {\n void this.router.navigate(['/auth/login']);\n });\n }\n\n public canOpenProfilePanel(): boolean {\n return true;\n }\n\n private bindRealtimeAlarmNotifications(): void {\n this.alarmStateService\n .getNotifications$()\n .pipe(takeUntil(this.destroy$))\n .subscribe((notifications) => {\n const latest = notifications[0];\n if (!latest || latest.notificationId === this.latestRealtimeNotificationId) {\n return;\n }\n\n this.latestRealtimeNotificationId = latest.notificationId;\n this.openRealtimeNotificationPanel();\n });\n }\n\n private openRealtimeNotificationPanel(): void {\n this.clearToastTimer();\n this.realtimeToastMessage = null;\n this.closeProfilePanel();\n\n if (this.isNotificationPanelOpen) {\n this.cdr.markForCheck();\n return;\n }\n\n this.isNotificationPanelOpen = true;\n this.cdr.markForCheck();\n }\n\n private showRealtimeToast(message: string, kind: 'alert' | 'success'): void {\n this.clearToastTimer();\n this.realtimeToastMessage = message;\n this.realtimeToastKind = kind;\n this.cdr.markForCheck();\n\n this.toastTimer = setTimeout(() => {\n this.realtimeToastMessage = null;\n this.cdr.markForCheck();\n this.toastTimer = null;\n }, 5000);\n }\n\n private clearToastTimer(): void {\n if (!this.toastTimer) {\n return;\n }\n\n clearTimeout(this.toastTimer);\n this.toastTimer = null;\n }\n\n private loadVimarStatus(): void {\n if (!this.myVimarService) {\n this.vimarAccount = { email: '', isLinked: false };\n this.vimarStatusError = 'Servizio MyVimar non disponibile in questa sezione.';\n this.isVimarStatusLoading = false;\n this.showVimarAssociationWarning = false;\n this.cdr.markForCheck();\n return;\n }\n\n this.isVimarStatusLoading = true;\n this.vimarStatusError = '';\n this.cdr.markForCheck();\n\n this.myVimarService.getLinkedAccount().subscribe({\n next: (account) => {\n this.vimarAccount = account;\n this.isVimarStatusLoading = false;\n this.showVimarAssociationWarning = this.canOpenProfilePanel() && !account.isLinked;\n this.cdr.markForCheck();\n },\n error: () => {\n this.vimarAccount = { email: '', isLinked: false };\n this.vimarStatusError = 'Impossibile recuperare lo stato del collegamento MyVimar.';\n this.isVimarStatusLoading = false;\n this.showVimarAssociationWarning = false;\n this.cdr.markForCheck();\n }\n });\n }\n}","\n\n\n\n@if (isNotificationPanelOpen) {\n\n}\n\n@if (realtimeToastMessage) {\n
\n

{{ realtimeToastMessage }}

\n
\n}\n\n
\n\n \n \n\n
\n @if (isProfilePanelOpen) {\n
\n \n
\n
\n

Area Utente

\n

{{ currentUser.firstName }} {{\n currentUser.lastName }}

\n

Username: {{ currentUser.username }}

\n
\n\n @if (isAdmin) {\n \n }\n
\n\n
\n @if (isAdmin) {\n
\n

Stato Collegamento\n

\n\n @if (isVimarStatusLoading) {\n

Caricamento stato account...

\n }\n\n @if (!isVimarStatusLoading && vimarStatusError) {\n

{{\n vimarStatusError }}

\n }\n\n @if (!isVimarStatusLoading && !vimarStatusError && vimarAccount?.isLinked) {\n \n Utente collegato{{ vimarAccount?.email ? ': ' + vimarAccount?.email : '' }}\n
\n }\n\n @if (!isVimarStatusLoading && !vimarStatusError && !vimarAccount?.isLinked) {\n \n Account non ancora collegato.\n
\n }\n \n }\n\n
\n

Sessione

\n

Gestisci rapidamente la sessione utente dall'area\n profilo.

\n\n \n
\n \n \n \n } @else {\n \n }\n \n\n"],mappings:"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",names:["NavService","getNavItems","role","NavItemList","label","icon","route","requiredRole","UserRole","AMMINISTRATORE","filteredList","OPERATORE_SANITARIO","filter","n","factory","\u0275fac","providedIn","BreadcrumbService","router","activatedRoute","breadcrumbs$","constructor","events","pipe","filter","e","NavigationEnd","startWith","map","buildBreadcrumbs","root","route","url","crumbs","child","children","segment","snapshot","s","path","join","fullUrl","label","data","push","\u0275\u0275inject","Router","ActivatedRoute","factory","\u0275fac","providedIn","\u0275\u0275elementStart","\u0275\u0275text","\u0275\u0275elementEnd","\u0275\u0275property","crumb_r1","url","\u0275\u0275advance","\u0275\u0275textInterpolate","label","\u0275\u0275conditionalCreate","TopbarComponent_For_12_Conditional_1_Template","TopbarComponent_For_12_Conditional_2_Template","\u0275\u0275conditional","\u0275$index_21_r2","\u0275$count_21_r3","\u0275\u0275textInterpolate1","ctx_r3","unreadNotificationsCount","TopbarComponent","breadcrumbService","user","isProfileActive","isNotificationActive","showVimarWarning","profileClicked","EventEmitter","logoutClicked","hamburgerClicked","notificationClicked","breadcrumbs$","constructor","onNotificationClick","emit","onProfileClick","\u0275\u0275directiveInject","BreadcrumbService","selectors","inputs","outputs","decls","vars","consts","template","rf","ctx","\u0275\u0275listener","\u0275\u0275element","\u0275\u0275repeaterCreate","TopbarComponent_For_12_Template","_forTrack0","TopbarComponent_Conditional_17_Template","TopbarComponent_Conditional_21_Template","\u0275\u0275repeater","\u0275\u0275pipeBind1","\u0275\u0275classProp","RouterModule","RouterLink","AsyncPipe","styles","\u0275\u0275element","\u0275\u0275property","item_r2","icon","\u0275\u0275sanitizeUrl","\u0275\u0275text","\u0275\u0275elementStart","\u0275\u0275listener","\u0275\u0275restoreView","_r1","$implicit","ctx_r2","\u0275\u0275nextContext","\u0275\u0275resetView","navItemSelected","emit","route","\u0275\u0275template","SidebarComponent_For_5_img_4_Template","SidebarComponent_For_5_ng_template_5_Template","\u0275\u0275templateRefExtractor","\u0275\u0275elementEnd","\u0275\u0275advance","\u0275\u0275classProp","isProfileMode","rla_r4","isActive","fallback_r5","\u0275\u0275textInterpolate","label","SidebarComponent","navItems","isCollapsed","canOpenProfile","profileClicked","EventEmitter","collapsed","selectors","inputs","outputs","decls","vars","consts","template","rf","ctx","\u0275\u0275repeaterCreate","SidebarComponent_For_5_Template","_forTrack0","SidebarComponent_ForEmpty_6_Template","\u0275\u0275repeater","RouterLink","RouterLinkActive","CommonModule","NgIf","styles","\u0275\u0275domElementStart","\u0275\u0275domListener","\u0275\u0275restoreView","_r1","ctx_r1","\u0275\u0275nextContext","\u0275\u0275resetView","onClearAll","\u0275\u0275text","\u0275\u0275domElementEnd","\u0275\u0275advance","\u0275\u0275classMap","getPriorityBubbleClass","notificationPriority_r5","\u0275\u0275textInterpolate1","getPrioritySymbolClass","getPrioritySymbol","notification_r4","_r3","$implicit","onNotificationSelected","notificationId","\u0275\u0275conditionalCreate","NotificationTopbarPanelComponent_Conditional_9_For_2_Conditional_4_Template","$event","onRemove","\u0275\u0275domElement","\u0275\u0275conditional","tmp_12_0","getPriority","\u0275\u0275textInterpolate","getDisplayTitle","\u0275\u0275pipeBind2","sentAt","\u0275\u0275repeaterCreate","NotificationTopbarPanelComponent_Conditional_9_For_2_Template","_forTrack0","\u0275\u0275repeater","visibleNotifications","NotificationTopbarPanelComponent","notifications","viewAllClicked","EventEmitter","notificationSelected","removeClicked","clearAllClicked","maxVisibleNotifications","slice","emit","event","stopPropagation","notification","extractPriorityFromNotificationTitle","title","stripPriorityFromNotificationTitle","priority","AlarmPriority","WHITE","GREEN","ORANGE","RED","selectors","inputs","outputs","decls","vars","consts","template","rf","ctx","NotificationTopbarPanelComponent_Conditional_5_Template","NotificationTopbarPanelComponent_Conditional_8_Template","NotificationTopbarPanelComponent_Conditional_9_Template","length","DatePipe","styles","changeDetection","\u0275\u0275elementStart","\u0275\u0275listener","\u0275\u0275restoreView","_r2","ctx_r2","\u0275\u0275nextContext","\u0275\u0275resetView","openNotificationsArchive","$event","openNotificationsArchiveFromPreview","removeTopbarNotification","clearTopbarNotifications","\u0275\u0275elementEnd","\u0275\u0275property","\u0275\u0275pipeBind1","notifications$","\u0275\u0275pureFunction0","_c1","\u0275\u0275text","\u0275\u0275classProp","realtimeToastKind","\u0275\u0275advance","\u0275\u0275textInterpolate","realtimeToastMessage","_r5","goToVimarLink","vimarStatusError","\u0275\u0275textInterpolate1","vimarAccount","email","\u0275\u0275conditionalCreate","MainLayoutComponent_Conditional_8_Conditional_12_Conditional_3_Template","MainLayoutComponent_Conditional_8_Conditional_12_Conditional_4_Template","MainLayoutComponent_Conditional_8_Conditional_12_Conditional_5_Template","MainLayoutComponent_Conditional_8_Conditional_12_Conditional_6_Template","\u0275\u0275conditional","isVimarStatusLoading","isLinked","MainLayoutComponent_Conditional_8_Conditional_10_Template","MainLayoutComponent_Conditional_8_Conditional_12_Template","_r4","logout","\u0275\u0275element","\u0275\u0275textInterpolate2","currentUser","firstName","lastName","username","isAdmin","MainLayoutComponent","topbarRef","isCollapsed","navItems","isProfilePanelOpen","showVimarAssociationWarning","isNotificationPanelOpen","navService","inject","NavService","internalAuthService","InternalAuthService","alarmStateService","AlarmStateService","alarmManagementRefreshService","AlarmManagementRefreshService","router","Router","myVimarService","VIMAR_CLOUD_API_SERVICE","optional","unreadNotificationsCount$","getUnreadNotificationsCount$","getNotifications$","cdr","ChangeDetectorRef","destroy$","Subject","toastTimer","latestRealtimeNotificationId","role","UserRole","OPERATORE_SANITARIO","activeAlarmCount$","getActiveAlarmsCount$","resizeObserver","ngOnInit","bindRealtimeAlarmNotifications","getCurrentUser$","pipe","take","takeUntil","subscribe","session","navigate","AMMINISTRATORE","getNavItems","loadVimarStatus","markForCheck","ngAfterViewInit","ResizeObserver","nativeElement","entries","entry","h","contentRect","height","document","documentElement","style","setProperty","observe","ngOnDestroy","next","complete","clearToastTimer","disconnect","toggleSidebar","toggleProfilePanel","closeNotificationPanel","closeProfilePanel","onNavItemSelected","route","url","includes","requestRefresh","toggleNotificationPanel","notificationId","queryParams","focus","removeNotification","clearNotifications","logoutFromBackend","canOpenProfilePanel","notifications","latest","openRealtimeNotificationPanel","showRealtimeToast","message","kind","setTimeout","clearTimeout","getLinkedAccount","account","error","selectors","viewQuery","rf","ctx","ElementRef","MainLayoutComponent_Conditional_3_Template","MainLayoutComponent_Conditional_4_Template","i0","_r1","MainLayoutComponent_Conditional_8_Template","MainLayoutComponent_Conditional_9_Template","CommonModule","RouterOutlet","TopbarComponent","NotificationTopbarPanelComponent","SidebarComponent","AsyncPipe","styles","changeDetection"]},_coverageSchema:"1a1c01bbd47fc00a2c39e90264f33305004495a9",hash:"7f9a9b6f1d5a6da682fe02bae1b9cad5697797b5"};var coverage=global[gcv]||(global[gcv]={});if(!coverage[path]||coverage[path].hash!==hash){coverage[path]=coverageData;}var actualCoverage=coverage[path];{// @ts-ignore +cov_t79jungpj=function(){return actualCoverage;};}return actualCoverage;}cov_t79jungpj();import{a as ye,b as ke}from"./chunk-HZRH6ESN.js";import{b as be,c as _e,d as ge,e as F,f as j,g as Ce,i as he}from"./chunk-FYGTVJAL.js";import{a as Pe}from"./chunk-6V7HPFWL.js";import{a as Me}from"./chunk-JOEDXNZS.js";import{a as ve}from"./chunk-CX4DL26R.js";import{a as h}from"./chunk-ZZLQRDHJ.js";import{a as T,b as xe}from"./chunk-65RKWSY3.js";import"./chunk-2S5V5XEE.js";import{g as fe,h as $,i as ue,j as z}from"./chunk-F6OGAIBI.js";import{Ab as l,Bb as k,Cb as w,Db as ce,E as J,Fa as ie,G as D,Gb as se,Ib as E,Jb as R,Ka as S,Kb as me,L,Lb as de,P as U,Pa as ne,Q as O,Ub as pe,V as f,W as u,Wa as W,X as Z,Ya as d,_a as p,ab as A,ba as g,bb as N,cb as x,d as H,db as a,eb as r,fb as P,gb as b,hb as v,ib as oe,jb as y,m as Q,ma as ee,nb as C,ob as I,pb as m,tb as ae,ua as te,ub as re,v as K,vb as le,wa as o,wb as G,y as X,yb as M,zb as B}from"./chunk-RYTNMYZW.js";import"./chunk-VCZGUBMY.js";var we=(cov_t79jungpj().s[0]++,(()=>{cov_t79jungpj().f[0]++;class t{getNavItems(e){cov_t79jungpj().f[1]++;let n=(cov_t79jungpj().s[1]++,[{label:"Dashboard",icon:"dashboard.png",route:"dashboard"},{label:"Notifiche",icon:"notification.png",route:"notifications"},{label:"Dispositivi",icon:"device.png",route:"apartment-monitor"},{label:"Gestione Allarmi",icon:"alarm-management.png",route:"alarms/alarm-management"},{label:"Storico Allarmi",icon:"alarm-history.png",route:"alarms/alarm-history"},{label:"Configurazione Allarmi",icon:"alarm-configuration.png",route:"alarms/alarm-configuration",requiredRole:T.AMMINISTRATORE},{label:"Analytics",icon:"analytics.png",route:"analytics"},{label:"Gestione Reparti",icon:"ward-management.png",route:"ward-management",requiredRole:T.AMMINISTRATORE},{label:"Gestione Utenti",icon:"user-management.png",route:"user-management",requiredRole:T.AMMINISTRATORE}]),i=(cov_t79jungpj().s[2]++,n);cov_t79jungpj().s[3]++;return(cov_t79jungpj().b[0][0]++,e===T.OPERATORE_SANITARIO)&&(cov_t79jungpj().b[0][1]++,i=n.filter(s=>{cov_t79jungpj().f[2]++;cov_t79jungpj().s[4]++;return!s.requiredRole;})),i;}static ɵfac=(cov_t79jungpj().s[5]++,function(n){cov_t79jungpj().f[3]++;cov_t79jungpj().s[6]++;return new((cov_t79jungpj().b[1][0]++,n)||(cov_t79jungpj().b[1][1]++,t))();});static ɵprov=(cov_t79jungpj().s[7]++,L({token:t,factory:t.ɵfac,providedIn:"root"}));}cov_t79jungpj().s[8]++;return t;})());var Oe=(cov_t79jungpj().s[9]++,(()=>{cov_t79jungpj().f[4]++;class t{router;activatedRoute;breadcrumbs$;constructor(e,n){cov_t79jungpj().f[5]++;cov_t79jungpj().s[10]++;this.router=e,this.activatedRoute=n,this.breadcrumbs$=this.router.events.pipe(K(i=>{cov_t79jungpj().f[6]++;cov_t79jungpj().s[11]++;return i instanceof be;}),J(null),Q(()=>{cov_t79jungpj().f[7]++;cov_t79jungpj().s[12]++;return this.buildBreadcrumbs(this.activatedRoute.root);}));}buildBreadcrumbs(e,n=(cov_t79jungpj().b[2][0]++,""),i=(cov_t79jungpj().b[3][0]++,[])){cov_t79jungpj().f[8]++;cov_t79jungpj().s[13]++;for(let s of e.children){let _=(cov_t79jungpj().s[14]++,s.snapshot.url.map(Ae=>{cov_t79jungpj().f[9]++;cov_t79jungpj().s[15]++;return Ae.path;}).join("/")),Y=(cov_t79jungpj().s[16]++,_?(cov_t79jungpj().b[4][0]++,`${n}/${_}`):(cov_t79jungpj().b[4][1]++,n)),q=(cov_t79jungpj().s[17]++,s.snapshot.data.breadcrumb);cov_t79jungpj().s[18]++;(cov_t79jungpj().b[5][0]++,q)&&(cov_t79jungpj().b[5][1]++,_)&&(cov_t79jungpj().b[5][2]++,i.push({label:q,url:Y})),this.buildBreadcrumbs(s,Y,i);}cov_t79jungpj().s[19]++;return i;}static ɵfac=(cov_t79jungpj().s[20]++,function(n){cov_t79jungpj().f[10]++;cov_t79jungpj().s[21]++;return new((cov_t79jungpj().b[6][0]++,n)||(cov_t79jungpj().b[6][1]++,t))(U(F),U(_e));});static ɵprov=(cov_t79jungpj().s[22]++,L({token:t,factory:t.ɵfac,providedIn:"root"}));}cov_t79jungpj().s[23]++;return t;})());cov_t79jungpj().s[24]++;var Re=(t,c)=>{cov_t79jungpj().f[11]++;cov_t79jungpj().s[25]++;return c.url;};function Ve(t,c){cov_t79jungpj().f[12]++;cov_t79jungpj().s[26]++;if((cov_t79jungpj().b[8][0]++,t&1)&&(cov_t79jungpj().b[8][1]++,a(0,"a",18),l(1),r(),a(2,"span",19),l(3,"/"),r()),t&2){cov_t79jungpj().b[7][0]++;let e=(cov_t79jungpj().s[27]++,m().$implicit);cov_t79jungpj().s[28]++;x("routerLink",e.url),o(),k(e.label);}else{cov_t79jungpj().b[7][1]++;}}function Le(t,c){cov_t79jungpj().f[13]++;cov_t79jungpj().s[29]++;if((cov_t79jungpj().b[10][0]++,t&1)&&(cov_t79jungpj().b[10][1]++,a(0,"span",17),l(1),r()),t&2){cov_t79jungpj().b[9][0]++;let e=(cov_t79jungpj().s[30]++,m().$implicit);cov_t79jungpj().s[31]++;o(),k(e.label);}else{cov_t79jungpj().b[9][1]++;}}function $e(t,c){cov_t79jungpj().f[14]++;cov_t79jungpj().s[32]++;if((cov_t79jungpj().b[12][0]++,t&1)&&(cov_t79jungpj().b[12][1]++,a(0,"li",8),d(1,Ve,4,2)(2,Le,2,1,"span",17),r()),t&2){cov_t79jungpj().b[11][0]++;let e=(cov_t79jungpj().s[33]++,c.$index),n=(cov_t79jungpj().s[34]++,c.$count);cov_t79jungpj().s[35]++;o(),p(e!==n-1?(cov_t79jungpj().b[13][0]++,1):(cov_t79jungpj().b[13][1]++,2));}else{cov_t79jungpj().b[11][1]++;}}function ze(t,c){cov_t79jungpj().f[15]++;cov_t79jungpj().s[36]++;if((cov_t79jungpj().b[15][0]++,t&1)&&(cov_t79jungpj().b[15][1]++,a(0,"span",12),l(1),r()),t&2){cov_t79jungpj().b[14][0]++;let e=(cov_t79jungpj().s[37]++,m());cov_t79jungpj().s[38]++;o(),w(" ",e.unreadNotificationsCount>99?(cov_t79jungpj().b[16][0]++,"99+"):(cov_t79jungpj().b[16][1]++,e.unreadNotificationsCount)," ");}else{cov_t79jungpj().b[14][1]++;}}function Fe(t,c){cov_t79jungpj().f[16]++;cov_t79jungpj().s[39]++;(cov_t79jungpj().b[17][0]++,t&1)&&(cov_t79jungpj().b[17][1]++,a(0,"div",16)(1,"output",20),l(2," Account da associare a MyVimar "),r()());}var Se=(cov_t79jungpj().s[40]++,(()=>{cov_t79jungpj().f[17]++;class t{breadcrumbService;user;isProfileActive=(cov_t79jungpj().s[41]++,!1);isNotificationActive=(cov_t79jungpj().s[42]++,!1);unreadNotificationsCount=(cov_t79jungpj().s[43]++,0);showVimarWarning=(cov_t79jungpj().s[44]++,!1);profileClicked=(cov_t79jungpj().s[45]++,new g());logoutClicked=(cov_t79jungpj().s[46]++,new g());hamburgerClicked=(cov_t79jungpj().s[47]++,new g());notificationClicked=(cov_t79jungpj().s[48]++,new g());breadcrumbs$;constructor(e){cov_t79jungpj().f[18]++;cov_t79jungpj().s[49]++;this.breadcrumbService=e,this.breadcrumbs$=this.breadcrumbService.breadcrumbs$;}onNotificationClick(){cov_t79jungpj().f[19]++;cov_t79jungpj().s[50]++;this.notificationClicked.emit();}onProfileClick(){cov_t79jungpj().f[20]++;cov_t79jungpj().s[51]++;this.profileClicked.emit();}static ɵfac=(cov_t79jungpj().s[52]++,function(n){cov_t79jungpj().f[21]++;cov_t79jungpj().s[53]++;return new((cov_t79jungpj().b[18][0]++,n)||(cov_t79jungpj().b[18][1]++,t))(ie(Oe));});static ɵcmp=(cov_t79jungpj().s[54]++,S({type:t,selectors:[["app-topbar"]],inputs:{user:"user",isProfileActive:"isProfileActive",isNotificationActive:"isNotificationActive",unreadNotificationsCount:"unreadNotificationsCount",showVimarWarning:"showVimarWarning"},outputs:{profileClicked:"profileClicked",logoutClicked:"logoutClicked",hamburgerClicked:"hamburgerClicked",notificationClicked:"notificationClicked"},decls:22,vars:10,consts:[[1,"topbar-shell"],[1,"topbar-shell__main-row"],[1,"topbar-brand"],["type","button","aria-label","Apri menu",1,"hamburger-btn",3,"click"],["src","logo.png","alt","",1,"topbar-logo"],[1,"topbar-title"],["aria-label","Breadcrumb",1,"topbar-breadcrumb"],[1,"flex","items-center","gap-1","text-sm"],[1,"flex","items-center","gap-1"],[1,"topbar-actions"],["type","button","aria-label","Visualizza notifiche",1,"topbar-button","topbar-button-neutral","notification-btn",3,"click"],["src","notification.png","alt","",1,"topbar-avatar"],["aria-live","polite","aria-atomic","true",1,"topbar-notification-count"],["type","button","aria-label","Apri profilo",1,"topbar-profile","topbar-profile--desktop",3,"click"],["src","user-avatar.png","alt","",1,"topbar-avatar"],[1,"topbar-user-meta"],[1,"topbar-warning-row"],[1,"font-semibold"],[1,"hover:text-amber-600",3,"routerLink"],[1,"opacity-40"],["aria-live","polite","aria-atomic","true",1,"topbar-vimar-warning"]],template:function(n,i){cov_t79jungpj().f[22]++;cov_t79jungpj().s[55]++;(cov_t79jungpj().b[19][0]++,n&1)&&(cov_t79jungpj().b[19][1]++,a(0,"section",0)(1,"div",1)(2,"div",2)(3,"button",3),C("click",function(){cov_t79jungpj().f[23]++;cov_t79jungpj().s[56]++;return i.hamburgerClicked.emit();}),l(4,"\u2630"),r(),P(5,"img",4),a(6,"div")(7,"h1",5),l(8,"View4Life"),r(),a(9,"nav",6)(10,"ol",7),A(11,$e,3,1,"li",8,Re),E(13,"async"),r()()()(),a(14,"div",9)(15,"button",10),C("click",function(){cov_t79jungpj().f[24]++;cov_t79jungpj().s[57]++;return i.onNotificationClick();}),P(16,"img",11),d(17,ze,2,1,"span",12),r(),a(18,"button",13),C("click",function(){cov_t79jungpj().f[25]++;cov_t79jungpj().s[58]++;return i.onProfileClick();}),P(19,"img",14)(20,"div",15),r()()(),d(21,Fe,3,0,"div",16),r()),(cov_t79jungpj().b[20][0]++,n&2)&&(cov_t79jungpj().b[20][1]++,o(11),N(R(13,8,i.breadcrumbs$)),o(4),M("notification-active",i.isNotificationActive),o(2),p(i.unreadNotificationsCount>0?(cov_t79jungpj().b[21][0]++,17):(cov_t79jungpj().b[21][1]++,-1)),o(),M("profile-active",i.isProfileActive)("bg-amber-300",i.isProfileActive),o(3),p(i.showVimarWarning?(cov_t79jungpj().b[22][0]++,21):(cov_t79jungpj().b[22][1]++,-1)));},dependencies:[he,j,$],styles:[`[_nghost-%COMP%]{display:block;position:relative;z-index:50}.topbar-shell[_ngcontent-%COMP%]{display:flex;flex-direction:column;justify-content:center;padding:.6rem 1.55rem;background:linear-gradient(180deg,#14110f,#221a14 45%,#31271e);border-bottom:1px solid rgba(251,191,36,.55);box-shadow:0 1px #fbbf244d,inset 0 -1px #ffffff0d}.topbar-shell__main-row[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;gap:1rem;width:100%}.topbar-warning-row[_ngcontent-%COMP%]{display:flex;justify-content:center;padding-bottom:.3rem;width:100%;padding-top:.5em}.topbar-brand[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.95rem;min-width:0}.topbar-logo[_ngcontent-%COMP%]{width:2.9rem;height:2.9rem;border-radius:.75rem;border:1px solid rgba(251,191,36,.65);background:linear-gradient(160deg,#fbbf2459,#fcd34d24)}.topbar-title[_ngcontent-%COMP%]{margin:0;line-height:1.1;font-size:1.58rem;font-weight:700;color:#fff}.topbar-breadcrumb[_ngcontent-%COMP%]{font-size:.86rem;color:#ffffffb8;margin-top:.1rem}.topbar-actions[_ngcontent-%COMP%]{display:flex;align-items:center;gap:2em}.topbar-vimar-warning[_ngcontent-%COMP%]{margin:0;display:inline-flex;align-items:center;justify-content:center;padding:.44rem .85rem;border-radius:9999px;border:1px solid rgba(251,191,36,.85);background:#78350fe6;color:#fff;font-size:.78rem;font-weight:700;letter-spacing:.04em;text-transform:uppercase;white-space:nowrap}.topbar-button[_ngcontent-%COMP%]{display:inline-flex;align-items:center;justify-content:center;position:relative;border-radius:.84rem;border:2px solid transparent;min-height:3.15rem;padding:.5em;font-size:1.01rem;font-weight:600;cursor:pointer;background:transparent;transition:background .12s ease,border-color .12s ease,filter .12s ease}.topbar-button-neutral[_ngcontent-%COMP%]{color:#fff;background:transparent;border-color:transparent;box-shadow:none}.topbar-button-neutral[_ngcontent-%COMP%] img[_ngcontent-%COMP%]{filter:brightness(0) invert(1);transition:filter .12s ease;border:0;border-radius:0;height:1.8rem;width:1.8rem}.topbar-button-neutral[_ngcontent-%COMP%]:hover{background:transparent;border:2px solid rgba(251,191,36,.85)}.topbar-button-neutral[_ngcontent-%COMP%]:active{background:linear-gradient(120deg,#fcd34d,#fbbf24);border-color:#d97706a6;animation:_ngcontent-%COMP%_btn-bounce .4s ease forwards}.topbar-button-neutral[_ngcontent-%COMP%]:active img[_ngcontent-%COMP%]{filter:brightness(0)}.topbar-button-neutral.notification-active[_ngcontent-%COMP%]{background:linear-gradient(120deg,#fcd34d,#fbbf24);border-color:#d97706a6;animation:_ngcontent-%COMP%_btn-bounce .4s ease forwards}.topbar-button-neutral.notification-active[_ngcontent-%COMP%] img[_ngcontent-%COMP%]{filter:brightness(0)}.topbar-notification-count[_ngcontent-%COMP%]{position:absolute;top:.15rem;right:.1rem;min-width:1.2rem;height:1.2rem;padding:0 .3rem;display:inline-flex;align-items:center;justify-content:center;border-radius:9999px;background:#dc2626;border:1px solid rgba(255,255,255,.9);color:#fff;font-size:.66rem;font-weight:700;line-height:1}.topbar-profile[_ngcontent-%COMP%]{display:flex;align-items:center;border:2px solid transparent;border-radius:.92rem;background:transparent;min-height:3.15rem;padding:.44rem .62rem;cursor:pointer;position:relative;transition:background .12s ease,border-color .12s ease}.topbar-profile[_ngcontent-%COMP%] .topbar-avatar[_ngcontent-%COMP%]{filter:brightness(0) invert(1);transition:filter .12s ease}.topbar-profile[_ngcontent-%COMP%]:hover{background:transparent;border:2px solid rgba(251,191,36,.85)}.topbar-profile.profile-active[_ngcontent-%COMP%]{background:linear-gradient(120deg,#fcd34d,#fbbf24);border-color:#d97706a6;animation:_ngcontent-%COMP%_btn-bounce .4s ease forwards}.topbar-profile.profile-active[_ngcontent-%COMP%] .topbar-avatar[_ngcontent-%COMP%]{filter:brightness(0)}.topbar-profile.profile-disabled[_ngcontent-%COMP%]{opacity:.68;cursor:not-allowed;filter:saturate(.75)}.topbar-avatar[_ngcontent-%COMP%]{width:2.25rem;height:2.25rem;border-radius:9999px;object-fit:cover}.topbar-user-meta[_ngcontent-%COMP%]{text-align:left;line-height:1.08;color:#1f2937;font-size:.93rem}.topbar-user-meta[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:0}@keyframes _ngcontent-%COMP%_btn-bounce{0%,to{transform:translateY(0)}40%{transform:translateY(-4px)}70%{transform:translateY(-2px)}}@keyframes _ngcontent-%COMP%_btn-bounce-out{0%{transform:translateY(0)}40%{transform:translateY(4px)}70%{transform:translateY(2px)}to{transform:translateY(0)}}.topbar-profile[_ngcontent-%COMP%]:not(.profile-active){animation:_ngcontent-%COMP%_btn-bounce-out .4s ease forwards}.topbar-button-neutral[_ngcontent-%COMP%]:not(.notification-active){animation:_ngcontent-%COMP%_btn-bounce-out .4s ease forwards}.hamburger-btn[_ngcontent-%COMP%]{display:none}@media(max-width:767px){.logout-button[_ngcontent-%COMP%]{display:none}.hamburger-btn[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:center;background:transparent;border:2px solid rgba(251,191,36,.5);border-radius:.6rem;color:#fcd34d;font-size:1.3rem;padding:.4rem .6rem;cursor:pointer}.topbar-shell[_ngcontent-%COMP%]{padding-inline:.9rem}.topbar-user-meta[_ngcontent-%COMP%], .topbar-profile--desktop[_ngcontent-%COMP%]{display:none}.topbar-vimar-warning[_ngcontent-%COMP%]{font-size:.68rem;overflow:hidden;text-overflow:ellipsis}} +/*# sourceMappingURL=topbar.component-XCL3YGW6.css.map */`]}));}cov_t79jungpj().s[59]++;return t;})());cov_t79jungpj().s[60]++;var De=(t,c)=>{cov_t79jungpj().f[26]++;cov_t79jungpj().s[61]++;return c.label;};function Ue(t,c){cov_t79jungpj().f[27]++;cov_t79jungpj().s[62]++;if((cov_t79jungpj().b[24][0]++,t&1)&&(cov_t79jungpj().b[24][1]++,P(0,"img",14)),t&2){cov_t79jungpj().b[23][0]++;let e=(cov_t79jungpj().s[63]++,m().$implicit);cov_t79jungpj().s[64]++;x("src",e.icon,te);}else{cov_t79jungpj().b[23][1]++;}}function We(t,c){cov_t79jungpj().f[28]++;cov_t79jungpj().s[65]++;(cov_t79jungpj().b[25][0]++,t&1)&&(cov_t79jungpj().b[25][1]++,l(0,"\u2022"));}function Ge(t,c){cov_t79jungpj().f[29]++;cov_t79jungpj().s[66]++;if(t&1){cov_t79jungpj().b[26][0]++;let e=(cov_t79jungpj().s[67]++,y());cov_t79jungpj().s[68]++;a(0,"li")(1,"a",12,0),C("click",function(){cov_t79jungpj().f[30]++;let i=(cov_t79jungpj().s[69]++,f(e).$implicit),s=(cov_t79jungpj().s[70]++,m());cov_t79jungpj().s[71]++;return u(s.navItemSelected.emit(i.route));}),a(3,"span",9),ne(4,Ue,1,1,"img",13)(5,We,1,0,"ng-template",null,1,de),r(),a(7,"span",11),l(8),r()()();}else{cov_t79jungpj().b[26][1]++;}cov_t79jungpj().s[72]++;if(t&2){cov_t79jungpj().b[27][0]++;let e=(cov_t79jungpj().s[73]++,c.$implicit),n=(cov_t79jungpj().s[74]++,G(2)),i=(cov_t79jungpj().s[75]++,G(6)),s=(cov_t79jungpj().s[76]++,m());cov_t79jungpj().s[77]++;o(),M("is-active",(cov_t79jungpj().b[28][0]++,!s.isProfileMode)&&(cov_t79jungpj().b[28][1]++,n.isActive)),x("routerLink",e.route),o(3),x("ngIf",e.icon)("ngIfElse",i),o(4),k(e.label);}else{cov_t79jungpj().b[27][1]++;}}function Be(t,c){cov_t79jungpj().f[31]++;cov_t79jungpj().s[78]++;(cov_t79jungpj().b[29][0]++,t&1)&&(cov_t79jungpj().b[29][1]++,a(0,"li",6),l(1,"Menu di navigazione vuoto!"),r());}var Te=(cov_t79jungpj().s[79]++,(()=>{cov_t79jungpj().f[32]++;class t{navItems;isCollapsed;isProfileMode=(cov_t79jungpj().s[80]++,!1);canOpenProfile=(cov_t79jungpj().s[81]++,!1);profileClicked=(cov_t79jungpj().s[82]++,new g());collapsed=(cov_t79jungpj().s[83]++,new g());navItemSelected=(cov_t79jungpj().s[84]++,new g());static ɵfac=(cov_t79jungpj().s[85]++,function(n){cov_t79jungpj().f[33]++;cov_t79jungpj().s[86]++;return new((cov_t79jungpj().b[30][0]++,n)||(cov_t79jungpj().b[30][1]++,t))();});static ɵcmp=(cov_t79jungpj().s[87]++,S({type:t,selectors:[["app-sidebar"]],inputs:{navItems:"navItems",isCollapsed:"isCollapsed",isProfileMode:"isProfileMode",canOpenProfile:"canOpenProfile"},outputs:{profileClicked:"profileClicked",collapsed:"collapsed",navItemSelected:"navItemSelected"},decls:13,vars:5,consts:[["rla","routerLinkActive"],["fallback",""],[1,"sidebar-shell"],[1,"sidebar-overlay",3,"click"],[1,"sidebar-inner"],[1,"sidebar-nav"],[1,"sidebar-empty"],[1,"sidebar-profile-mobile"],[1,"sidebar-link",3,"click"],[1,"sidebar-link-icon"],["src","user-avatar.png","alt",""],[1,"sidebar-link-label"],["routerLinkActive","",1,"sidebar-link",3,"click","routerLink"],["alt","",3,"src",4,"ngIf","ngIfElse"],["alt","",3,"src"]],template:function(n,i){cov_t79jungpj().f[34]++;cov_t79jungpj().s[88]++;(cov_t79jungpj().b[31][0]++,n&1)&&(cov_t79jungpj().b[31][1]++,a(0,"aside",2)(1,"div",3),C("click",function(){cov_t79jungpj().f[35]++;cov_t79jungpj().s[89]++;return i.collapsed.emit();}),r(),a(2,"div",4)(3,"ul",5),A(4,Ge,9,6,"li",null,De,!1,Be,2,0,"li",6),a(7,"li",7)(8,"a",8),C("click",function(){cov_t79jungpj().f[36]++;cov_t79jungpj().s[90]++;return i.navItemSelected.emit(),i.profileClicked.emit();}),a(9,"span",9),P(10,"img",10),r(),a(11,"span",11),l(12,"Profilo"),r()()()()()()),(cov_t79jungpj().b[32][0]++,n&2)&&(cov_t79jungpj().b[32][1]++,M("is-open",!i.isCollapsed),o(4),N(i.navItems),o(4),M("is-active",i.isProfileMode));},dependencies:[j,Ce,z,fe],styles:[`[_nghost-%COMP%]{display:block;height:100%;z-index:40}.sidebar-shell[_ngcontent-%COMP%]{--sidebar-accent: #fcd34d;--sidebar-accent-strong: #f59e0b;--sidebar-ink: #1f2937;display:flex;flex-direction:column;gap:.75rem;width:16rem;height:100%;flex-shrink:0;padding:.85rem;background:#fff;border-right:1px solid rgba(226,232,240,.95);box-shadow:inset -1px 0 #ffffff73}.sidebar-overlay[_ngcontent-%COMP%]{display:none}.sidebar-nav[_ngcontent-%COMP%]{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:.45rem;overflow:auto}.sidebar-link[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.7rem;width:100%;padding:.68rem .72rem;border-radius:.8rem;text-decoration:none;color:#334155;font-size:1.01rem;font-weight:600;border:1px solid transparent;transition:background-color .14s ease,border-color .14s ease,transform .12s ease;overflow-x:hidden}.sidebar-link[_ngcontent-%COMP%]:hover{background:#fef3c78c;border-color:#f59e0b47;overflow-x:hidden}li[_ngcontent-%COMP%], li[_ngcontent-%COMP%]:hover{overflow-x:hidden}.sidebar-link.is-active[_ngcontent-%COMP%]{background:linear-gradient(120deg,var(--sidebar-accent) 0%,#fbbf24 100%);border-color:#d977065c;color:#1f2937;box-shadow:0 8px 14px #f59e0b3d;overflow-x:hidden}.sidebar-link-icon[_ngcontent-%COMP%]{display:inline-flex;align-items:center;justify-content:center;width:1.3rem;min-width:1.3rem;height:1.3rem;border-radius:9999px;background:#fef3c7bf;color:#7c2d12;font-size:.76rem}.sidebar-empty[_ngcontent-%COMP%]{border:1px dashed rgba(100,116,139,.45);border-radius:.8rem;padding:.8rem;text-align:center;color:#64748b;font-style:italic;background:#fff}.sidebar-alert[_ngcontent-%COMP%]{margin:auto 0 0;border-radius:.7rem;border:1px solid rgba(217,119,6,.32);background:#fbbf2457;color:#7c2d12;font-size:.82rem;font-weight:700;padding:.52rem .68rem}.sidebar-profile-mobile[_ngcontent-%COMP%]{display:none}@media(max-width:767px){.sidebar-shell[_ngcontent-%COMP%]{inset:0;pointer-events:none;width:100%;padding:0}.sidebar-overlay[_ngcontent-%COMP%]{display:block;position:absolute;inset:0;background:#00000073;opacity:0;transition:opacity .25s ease}.sidebar-inner[_ngcontent-%COMP%]{position:fixed;top:var(--topbar-height, 13vh);height:calc(100vh - var(--topbar-height, 13vh));left:0;width:240px;background:#fff;transform:translate(-100%);transition:transform .25s ease;padding:1em 1em 0;overflow-y:auto;box-sizing:border-box}.sidebar-shell.is-open[_ngcontent-%COMP%]{pointer-events:auto}.sidebar-shell.is-open[_ngcontent-%COMP%] .sidebar-overlay[_ngcontent-%COMP%]{opacity:1}.sidebar-shell.is-open[_ngcontent-%COMP%] .sidebar-inner[_ngcontent-%COMP%]{transform:translate(0)}.sidebar-profile-mobile[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.7rem;margin-top:auto;padding:0;border-radius:.8rem;color:#334155;font-size:1.01rem;font-weight:600;cursor:pointer}} +/*# sourceMappingURL=sidebar.component-WQQ4SEIG.css.map */`]}));}cov_t79jungpj().s[91]++;return t;})());cov_t79jungpj().s[92]++;var Ye=(t,c)=>{cov_t79jungpj().f[37]++;cov_t79jungpj().s[93]++;return c.notificationId;};function qe(t,c){cov_t79jungpj().f[38]++;cov_t79jungpj().s[94]++;if(t&1){cov_t79jungpj().b[33][0]++;let e=(cov_t79jungpj().s[95]++,y());cov_t79jungpj().s[96]++;b(0,"button",7),I("click",function(){cov_t79jungpj().f[39]++;cov_t79jungpj().s[97]++;f(e);let i=(cov_t79jungpj().s[98]++,m());cov_t79jungpj().s[99]++;return u(i.onClearAll());}),l(1," Cancella tutte "),v();}else{cov_t79jungpj().b[33][1]++;}}function He(t,c){cov_t79jungpj().f[40]++;cov_t79jungpj().s[100]++;(cov_t79jungpj().b[34][0]++,t&1)&&(cov_t79jungpj().b[34][1]++,b(0,"p",5),l(1,"Nessuna notifica disponibile."),v());}function Qe(t,c){cov_t79jungpj().f[41]++;cov_t79jungpj().s[101]++;if((cov_t79jungpj().b[36][0]++,t&1)&&(cov_t79jungpj().b[36][1]++,b(0,"span",12)(1,"span",18),l(2),v(),b(3,"span",19),l(4),v()()),t&2){cov_t79jungpj().b[35][0]++;let e=(cov_t79jungpj().s[102]++,c),n=(cov_t79jungpj().s[103]++,m(3));cov_t79jungpj().s[104]++;o(),B(n.getPriorityBubbleClass(e)),o(),w(" ",e," "),o(),B(n.getPrioritySymbolClass(e)),o(),w(" ",n.getPrioritySymbol(e)," ");}else{cov_t79jungpj().b[35][1]++;}}function Ke(t,c){cov_t79jungpj().f[42]++;cov_t79jungpj().s[105]++;if(t&1){cov_t79jungpj().b[37][0]++;let e=(cov_t79jungpj().s[106]++,y());cov_t79jungpj().s[107]++;b(0,"li",8)(1,"div",9)(2,"button",10),I("click",function(){cov_t79jungpj().f[43]++;let i=(cov_t79jungpj().s[108]++,f(e).$implicit),s=(cov_t79jungpj().s[109]++,m(2));cov_t79jungpj().s[110]++;return u(s.onNotificationSelected(i.notificationId));}),b(3,"div",11),d(4,Qe,5,6,"span",12),b(5,"p",13),l(6),v()(),b(7,"time",14),l(8),E(9,"date"),v()(),b(10,"button",15),I("click",function(i){cov_t79jungpj().f[44]++;let s=(cov_t79jungpj().s[111]++,f(e).$implicit),_=(cov_t79jungpj().s[112]++,m(2));cov_t79jungpj().s[113]++;return u(_.onRemove(s.notificationId,i));}),Z(),b(11,"svg",16),oe(12,"path",17),v()()()();}else{cov_t79jungpj().b[37][1]++;}cov_t79jungpj().s[114]++;if(t&2){cov_t79jungpj().b[38][0]++;let e,n=(cov_t79jungpj().s[115]++,c.$implicit),i=(cov_t79jungpj().s[116]++,m(2));cov_t79jungpj().s[117]++;o(2),W("aria-label","Apri notifica: "+i.getDisplayTitle(n)),o(2),p((e=i.getPriority(n))?(cov_t79jungpj().b[39][0]++,4):(cov_t79jungpj().b[39][1]++,-1),e),o(2),k(i.getDisplayTitle(n)),o(),W("datetime",n.sentAt),o(),w(" ",me(9,5,n.sentAt,"dd/MM/yyyy HH:mm:ss")," ");}else{cov_t79jungpj().b[38][1]++;}}function Xe(t,c){cov_t79jungpj().f[45]++;cov_t79jungpj().s[118]++;if((cov_t79jungpj().b[41][0]++,t&1)&&(cov_t79jungpj().b[41][1]++,b(0,"ul",6),A(1,Ke,13,8,"li",8,Ye),v()),t&2){cov_t79jungpj().b[40][0]++;let e=(cov_t79jungpj().s[119]++,m());cov_t79jungpj().s[120]++;o(),N(e.visibleNotifications);}else{cov_t79jungpj().b[40][1]++;}}var Ee=(cov_t79jungpj().s[121]++,(()=>{cov_t79jungpj().f[46]++;class t{notifications=(cov_t79jungpj().s[122]++,[]);viewAllClicked=(cov_t79jungpj().s[123]++,new g());notificationSelected=(cov_t79jungpj().s[124]++,new g());removeClicked=(cov_t79jungpj().s[125]++,new g());clearAllClicked=(cov_t79jungpj().s[126]++,new g());maxVisibleNotifications=(cov_t79jungpj().s[127]++,6);get visibleNotifications(){cov_t79jungpj().f[47]++;cov_t79jungpj().s[128]++;return this.notifications.slice(0,this.maxVisibleNotifications);}onNotificationSelected(e){cov_t79jungpj().f[48]++;cov_t79jungpj().s[129]++;this.notificationSelected.emit(e);}onRemove(e,n){cov_t79jungpj().f[49]++;cov_t79jungpj().s[130]++;n?.stopPropagation(),this.removeClicked.emit(e);}onClearAll(){cov_t79jungpj().f[50]++;cov_t79jungpj().s[131]++;this.clearAllClicked.emit();}getPriority(e){cov_t79jungpj().f[51]++;cov_t79jungpj().s[132]++;return ye(e.title);}getDisplayTitle(e){cov_t79jungpj().f[52]++;cov_t79jungpj().s[133]++;return(cov_t79jungpj().b[42][0]++,ke(e.title))||(cov_t79jungpj().b[42][1]++,e.title);}getPrioritySymbol(e){cov_t79jungpj().f[53]++;cov_t79jungpj().s[134]++;switch(e){case h.WHITE:cov_t79jungpj().b[43][0]++;cov_t79jungpj().s[135]++;return"i";case h.GREEN:cov_t79jungpj().b[43][1]++;cov_t79jungpj().s[136]++;return"\u2022";case h.ORANGE:cov_t79jungpj().b[43][2]++;cov_t79jungpj().s[137]++;return"!";case h.RED:cov_t79jungpj().b[43][3]++;cov_t79jungpj().s[138]++;return"\u25B2";default:cov_t79jungpj().b[43][4]++;cov_t79jungpj().s[139]++;return"";}}getPriorityBubbleClass(e){cov_t79jungpj().f[54]++;cov_t79jungpj().s[140]++;switch(e){case h.WHITE:cov_t79jungpj().b[44][0]++;cov_t79jungpj().s[141]++;return"border-slate-400 text-slate-700";case h.GREEN:cov_t79jungpj().b[44][1]++;cov_t79jungpj().s[142]++;return"border-emerald-500 text-emerald-700";case h.ORANGE:cov_t79jungpj().b[44][2]++;cov_t79jungpj().s[143]++;return"border-amber-500 text-amber-700";case h.RED:cov_t79jungpj().b[44][3]++;cov_t79jungpj().s[144]++;return"border-rose-500 text-rose-700";default:cov_t79jungpj().b[44][4]++;cov_t79jungpj().s[145]++;return"border-slate-400 text-slate-700";}}getPrioritySymbolClass(e){cov_t79jungpj().f[55]++;cov_t79jungpj().s[146]++;switch(e){case h.WHITE:cov_t79jungpj().b[45][0]++;cov_t79jungpj().s[147]++;return"text-slate-600";case h.GREEN:cov_t79jungpj().b[45][1]++;cov_t79jungpj().s[148]++;return"text-emerald-600";case h.ORANGE:cov_t79jungpj().b[45][2]++;cov_t79jungpj().s[149]++;return"text-amber-600";case h.RED:cov_t79jungpj().b[45][3]++;cov_t79jungpj().s[150]++;return"text-rose-600";default:cov_t79jungpj().b[45][4]++;cov_t79jungpj().s[151]++;return"text-slate-600";}}static ɵfac=(cov_t79jungpj().s[152]++,function(n){cov_t79jungpj().f[56]++;cov_t79jungpj().s[153]++;return new((cov_t79jungpj().b[46][0]++,n)||(cov_t79jungpj().b[46][1]++,t))();});static ɵcmp=(cov_t79jungpj().s[154]++,S({type:t,selectors:[["app-notification-topbar-panel-component"]],inputs:{notifications:"notifications"},outputs:{viewAllClicked:"viewAllClicked",notificationSelected:"notificationSelected",removeClicked:"removeClicked",clearAllClicked:"clearAllClicked"},decls:10,vars:2,consts:[["aria-label","Notifiche recenti",1,"notification-topbar-panel"],[1,"notification-topbar-panel__header"],[1,"notification-topbar-panel__actions"],["type","button",1,"notification-topbar-panel__clear-all"],["type","button",1,"notification-topbar-panel__view-all",3,"click"],[1,"notification-topbar-panel__empty"],[1,"notification-topbar-panel__list"],["type","button",1,"notification-topbar-panel__clear-all",3,"click"],[1,"notification-topbar-panel__item"],[1,"notification-topbar-panel__item-header"],["type","button",1,"notification-topbar-panel__open",3,"click"],[1,"notification-topbar-panel__title-wrap"],["aria-hidden","true",1,"notification-topbar-panel__priority","inline-flex","items-center","gap-1.5"],[1,"notification-topbar-panel__title"],[1,"notification-topbar-panel__time"],["type","button","aria-label","Rimuovi notifica",1,"notification-topbar-panel__remove",3,"click"],["fill","none","viewBox","0 0 24 24","stroke-width","2","stroke","currentColor","aria-hidden","true",1,"notification-topbar-panel__remove-icon"],["stroke-linecap","round","stroke-linejoin","round","d","M6 18L18 6M6 6l12 12"],[1,"notification-topbar-panel__priority-badge","inline-flex","h-5","min-w-5","items-center","justify-center","rounded-full","border","bg-white","px-1","text-[11px]","font-bold"],[1,"notification-topbar-panel__priority-symbol","text-sm","font-bold","leading-none"]],template:function(n,i){cov_t79jungpj().f[57]++;cov_t79jungpj().s[155]++;(cov_t79jungpj().b[47][0]++,n&1)&&(cov_t79jungpj().b[47][1]++,b(0,"section",0)(1,"header",1)(2,"h2"),l(3,"Notifiche"),v(),b(4,"div",2),d(5,qe,2,0,"button",3),b(6,"button",4),I("click",function(){cov_t79jungpj().f[58]++;cov_t79jungpj().s[156]++;return i.viewAllClicked.emit();}),l(7," Vedi tutte "),v()()(),d(8,He,2,0,"p",5)(9,Xe,3,0,"ul",6),v()),(cov_t79jungpj().b[48][0]++,n&2)&&(cov_t79jungpj().b[48][1]++,o(5),p(i.visibleNotifications.length>0?(cov_t79jungpj().b[49][0]++,5):(cov_t79jungpj().b[49][1]++,-1)),o(3),p(i.visibleNotifications.length===0?(cov_t79jungpj().b[50][0]++,8):(cov_t79jungpj().b[50][1]++,9)));},dependencies:[ue],styles:[`@keyframes _ngcontent-%COMP%_notification-preview-panel-enter{0%{opacity:0;transform:translateY(-10px) scale(.985)}to{opacity:1;transform:translateY(0) scale(1)}}@keyframes _ngcontent-%COMP%_notification-preview-item-enter{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.notification-topbar-panel[_ngcontent-%COMP%]{position:fixed;top:4.9rem;right:1rem;z-index:75;width:min(26rem,calc(100vw - 2rem));max-height:24rem;overflow:auto;border:1px solid #f59e0b;border-radius:.95rem;background:#fff;box-shadow:0 24px 46px -30px #0f172a9e;padding:.9rem;animation:_ngcontent-%COMP%_notification-preview-panel-enter .18s ease-out both}.notification-topbar-panel__header[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;gap:.7rem;margin-bottom:.75rem}.notification-topbar-panel__actions[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:.4rem}.notification-topbar-panel__header[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{margin:0;font-size:1rem;font-weight:700;color:#0f172a}.notification-topbar-panel__view-all[_ngcontent-%COMP%], .notification-topbar-panel__clear-all[_ngcontent-%COMP%]{border:1px solid #f59e0b;background:#fef3c7;color:#92400e;font-size:.78rem;font-weight:700;border-radius:.65rem;padding:.35rem .6rem;cursor:pointer}.notification-topbar-panel__view-all[_ngcontent-%COMP%]:hover, .notification-topbar-panel__clear-all[_ngcontent-%COMP%]:hover{background:#fde68a;border-color:#d97706}.notification-topbar-panel__empty[_ngcontent-%COMP%]{margin:0;padding:.4rem .2rem;color:#475569;font-size:.88rem}.notification-topbar-panel__list[_ngcontent-%COMP%]{margin:0;padding:0;list-style:none;display:flex;flex-direction:column;gap:.5rem}.notification-topbar-panel__item[_ngcontent-%COMP%]{border:1px solid #e2e8f0;border-radius:.75rem;padding:.55rem .65rem;background:#fff;animation:_ngcontent-%COMP%_notification-preview-item-enter .22s ease-out both}.notification-topbar-panel__item[_ngcontent-%COMP%]:hover{border-color:#f59e0b;background:#fffbeb}.notification-topbar-panel__open[_ngcontent-%COMP%]{min-width:0;flex:1;text-align:left;border:0;background:transparent;padding:0;cursor:pointer}.notification-topbar-panel__open[_ngcontent-%COMP%]:focus-visible{outline:2px solid #f59e0b;outline-offset:2px;border-radius:.45rem}.notification-topbar-panel__item[_ngcontent-%COMP%]:nth-child(1){animation-delay:24ms}.notification-topbar-panel__item[_ngcontent-%COMP%]:nth-child(2){animation-delay:48ms}.notification-topbar-panel__item[_ngcontent-%COMP%]:nth-child(3){animation-delay:72ms}.notification-topbar-panel__item[_ngcontent-%COMP%]:nth-child(4){animation-delay:96ms}.notification-topbar-panel__item[_ngcontent-%COMP%]:nth-child(5){animation-delay:.12s}.notification-topbar-panel__item[_ngcontent-%COMP%]:nth-child(6){animation-delay:144ms}.notification-topbar-panel__item-header[_ngcontent-%COMP%]{display:flex;align-items:flex-start;justify-content:space-between;gap:.45rem}.notification-topbar-panel__title[_ngcontent-%COMP%]{margin:0;font-size:.88rem;font-weight:600;color:#0f172a;line-height:1.25}.notification-topbar-panel__title-wrap[_ngcontent-%COMP%]{min-width:0;display:inline-flex;align-items:center;gap:.45rem}.notification-topbar-panel__time[_ngcontent-%COMP%]{display:inline-block;margin-top:.22rem;margin-left:.7rem;font-size:.75rem;color:#64748b}.notification-topbar-panel__remove[_ngcontent-%COMP%]{flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;width:1.45rem;height:1.45rem;border-radius:.45rem;border:1px solid #fcd34d;background:#fff;color:#b45309;cursor:pointer}.notification-topbar-panel__remove[_ngcontent-%COMP%]:hover{background:#fef3c7;border-color:#f59e0b}.notification-topbar-panel__remove-icon[_ngcontent-%COMP%]{width:.85rem;height:.85rem}@media(prefers-reduced-motion:reduce){.notification-topbar-panel[_ngcontent-%COMP%], .notification-topbar-panel__item[_ngcontent-%COMP%]{animation:none}} +/*# sourceMappingURL=notification-topbar-panel-component-HOAVN6CF.css.map */`],changeDetection:0}));}cov_t79jungpj().s[157]++;return t;})());cov_t79jungpj().s[159]++;var Je=(cov_t79jungpj().s[158]++,["topbarRef"]),Ze=()=>{cov_t79jungpj().f[59]++;cov_t79jungpj().s[160]++;return[];};function et(t,c){cov_t79jungpj().f[60]++;cov_t79jungpj().s[161]++;if(t&1){cov_t79jungpj().b[51][0]++;let e=(cov_t79jungpj().s[162]++,y());cov_t79jungpj().s[163]++;a(0,"app-notification-topbar-panel-component",8),E(1,"async"),C("viewAllClicked",function(){cov_t79jungpj().f[61]++;cov_t79jungpj().s[164]++;f(e);let i=(cov_t79jungpj().s[165]++,m());cov_t79jungpj().s[166]++;return u(i.openNotificationsArchive());})("notificationSelected",function(i){cov_t79jungpj().f[62]++;cov_t79jungpj().s[167]++;f(e);let s=(cov_t79jungpj().s[168]++,m());cov_t79jungpj().s[169]++;return u(s.openNotificationsArchiveFromPreview(i));})("removeClicked",function(i){cov_t79jungpj().f[63]++;cov_t79jungpj().s[170]++;f(e);let s=(cov_t79jungpj().s[171]++,m());cov_t79jungpj().s[172]++;return u(s.removeTopbarNotification(i));})("clearAllClicked",function(){cov_t79jungpj().f[64]++;cov_t79jungpj().s[173]++;f(e);let i=(cov_t79jungpj().s[174]++,m());cov_t79jungpj().s[175]++;return u(i.clearTopbarNotifications());}),r();}else{cov_t79jungpj().b[51][1]++;}cov_t79jungpj().s[176]++;if(t&2){cov_t79jungpj().b[52][0]++;let e=(cov_t79jungpj().s[177]++,m());cov_t79jungpj().s[178]++;x("notifications",(cov_t79jungpj().b[53][0]++,R(1,1,e.notifications$))??(cov_t79jungpj().b[53][1]++,se(3,Ze)));}else{cov_t79jungpj().b[52][1]++;}}function tt(t,c){cov_t79jungpj().f[65]++;cov_t79jungpj().s[179]++;if((cov_t79jungpj().b[55][0]++,t&1)&&(cov_t79jungpj().b[55][1]++,a(0,"div",9)(1,"p"),l(2),r()()),t&2){cov_t79jungpj().b[54][0]++;let e=(cov_t79jungpj().s[180]++,m());cov_t79jungpj().s[181]++;M("main-layout__realtime-toast--success",e.realtimeToastKind==="success"),o(2),k(e.realtimeToastMessage);}else{cov_t79jungpj().b[54][1]++;}}function it(t,c){cov_t79jungpj().f[66]++;cov_t79jungpj().s[182]++;if(t&1){cov_t79jungpj().b[56][0]++;let e=(cov_t79jungpj().s[183]++,y());cov_t79jungpj().s[184]++;a(0,"button",22),C("click",function(){cov_t79jungpj().f[67]++;cov_t79jungpj().s[185]++;f(e);let i=(cov_t79jungpj().s[186]++,m(2));cov_t79jungpj().s[187]++;return u(i.goToVimarLink());}),l(1," Vai a MyVimar "),r();}else{cov_t79jungpj().b[56][1]++;}}function nt(t,c){cov_t79jungpj().f[68]++;cov_t79jungpj().s[188]++;(cov_t79jungpj().b[57][0]++,t&1)&&(cov_t79jungpj().b[57][1]++,a(0,"p",23),l(1,"Caricamento stato account..."),r());}function ot(t,c){cov_t79jungpj().f[69]++;cov_t79jungpj().s[189]++;if((cov_t79jungpj().b[59][0]++,t&1)&&(cov_t79jungpj().b[59][1]++,a(0,"p",24),l(1),r()),t&2){cov_t79jungpj().b[58][0]++;let e=(cov_t79jungpj().s[190]++,m(3));cov_t79jungpj().s[191]++;o(),k(e.vimarStatusError);}else{cov_t79jungpj().b[58][1]++;}}function at(t,c){cov_t79jungpj().f[70]++;cov_t79jungpj().s[192]++;if((cov_t79jungpj().b[61][0]++,t&1)&&(cov_t79jungpj().b[61][1]++,a(0,"div",25),l(1),r()),t&2){cov_t79jungpj().b[60][0]++;let e=(cov_t79jungpj().s[193]++,m(3));cov_t79jungpj().s[194]++;o(),w(" Utente collegato",(cov_t79jungpj().b[63][0]++,e.vimarAccount!=null)&&(cov_t79jungpj().b[63][1]++,e.vimarAccount.email)?(cov_t79jungpj().b[62][0]++,": "+(e.vimarAccount==null?(cov_t79jungpj().b[64][0]++,null):(cov_t79jungpj().b[64][1]++,e.vimarAccount.email))):(cov_t79jungpj().b[62][1]++,"")," ");}else{cov_t79jungpj().b[60][1]++;}}function rt(t,c){cov_t79jungpj().f[71]++;cov_t79jungpj().s[195]++;(cov_t79jungpj().b[65][0]++,t&1)&&(cov_t79jungpj().b[65][1]++,a(0,"div",26),l(1," Account non ancora collegato. "),r());}function lt(t,c){cov_t79jungpj().f[72]++;cov_t79jungpj().s[196]++;if((cov_t79jungpj().b[67][0]++,t&1)&&(cov_t79jungpj().b[67][1]++,a(0,"section",17)(1,"p",18),l(2,"Stato Collegamento "),r(),d(3,nt,2,0,"p",23),d(4,ot,2,1,"p",24),d(5,at,2,1,"div",25),d(6,rt,2,0,"div",26),r()),t&2){cov_t79jungpj().b[66][0]++;let e=(cov_t79jungpj().s[197]++,m(2));cov_t79jungpj().s[198]++;o(3),p(e.isVimarStatusLoading?(cov_t79jungpj().b[68][0]++,3):(cov_t79jungpj().b[68][1]++,-1)),o(),p((cov_t79jungpj().b[70][0]++,!e.isVimarStatusLoading)&&(cov_t79jungpj().b[70][1]++,e.vimarStatusError)?(cov_t79jungpj().b[69][0]++,4):(cov_t79jungpj().b[69][1]++,-1)),o(),p((cov_t79jungpj().b[72][0]++,!e.isVimarStatusLoading)&&(cov_t79jungpj().b[72][1]++,!e.vimarStatusError)&&(cov_t79jungpj().b[72][2]++,e.vimarAccount!=null)&&(cov_t79jungpj().b[72][3]++,e.vimarAccount.isLinked)?(cov_t79jungpj().b[71][0]++,5):(cov_t79jungpj().b[71][1]++,-1)),o(),p((cov_t79jungpj().b[74][0]++,!e.isVimarStatusLoading)&&(cov_t79jungpj().b[74][1]++,!e.vimarStatusError)&&(cov_t79jungpj().b[74][2]++,!((cov_t79jungpj().b[75][0]++,e.vimarAccount!=null)&&(cov_t79jungpj().b[75][1]++,e.vimarAccount.isLinked)))?(cov_t79jungpj().b[73][0]++,6):(cov_t79jungpj().b[73][1]++,-1));}else{cov_t79jungpj().b[66][1]++;}}function ct(t,c){cov_t79jungpj().f[73]++;cov_t79jungpj().s[199]++;if(t&1){cov_t79jungpj().b[76][0]++;let e=(cov_t79jungpj().s[200]++,y());cov_t79jungpj().s[201]++;a(0,"section",7)(1,"article",10)(2,"header",11)(3,"div")(4,"p",12),l(5,"Area Utente"),r(),a(6,"h2",13),l(7),r(),a(8,"p",14),l(9),r()(),d(10,it,2,0,"button",15),r(),a(11,"div",16),d(12,lt,7,4,"section",17),a(13,"section",17)(14,"p",18),l(15,"Sessione"),r(),a(16,"p",19),l(17,"Gestisci rapidamente la sessione utente dall'area profilo."),r(),a(18,"button",20),C("click",function(){cov_t79jungpj().f[74]++;cov_t79jungpj().s[202]++;f(e);let i=(cov_t79jungpj().s[203]++,m());cov_t79jungpj().s[204]++;return u(i.logout());}),P(19,"img",21),l(20," Esci "),r()()()()();}else{cov_t79jungpj().b[76][1]++;}cov_t79jungpj().s[205]++;if(t&2){cov_t79jungpj().b[77][0]++;let e=(cov_t79jungpj().s[206]++,m());cov_t79jungpj().s[207]++;o(7),ce("",e.currentUser.firstName," ",e.currentUser.lastName),o(2),w("Username: ",e.currentUser.username),o(),p(e.isAdmin?(cov_t79jungpj().b[78][0]++,10):(cov_t79jungpj().b[78][1]++,-1)),o(2),p(e.isAdmin?(cov_t79jungpj().b[79][0]++,12):(cov_t79jungpj().b[79][1]++,-1));}else{cov_t79jungpj().b[77][1]++;}}function st(t,c){cov_t79jungpj().f[75]++;cov_t79jungpj().s[208]++;(cov_t79jungpj().b[80][0]++,t&1)&&(cov_t79jungpj().b[80][1]++,P(0,"router-outlet"));}var Zt=(cov_t79jungpj().s[209]++,(()=>{cov_t79jungpj().f[76]++;class t{topbarRef;isCollapsed=(cov_t79jungpj().s[210]++,!0);navItems;isProfilePanelOpen=(cov_t79jungpj().s[211]++,!1);isAdmin=(cov_t79jungpj().s[212]++,!1);isVimarStatusLoading=(cov_t79jungpj().s[213]++,!1);vimarStatusError=(cov_t79jungpj().s[214]++,"");vimarAccount=(cov_t79jungpj().s[215]++,null);showVimarAssociationWarning=(cov_t79jungpj().s[216]++,!1);isNotificationPanelOpen=(cov_t79jungpj().s[217]++,!1);realtimeToastMessage=(cov_t79jungpj().s[218]++,null);realtimeToastKind=(cov_t79jungpj().s[219]++,"alert");navService=(cov_t79jungpj().s[220]++,O(we));internalAuthService=(cov_t79jungpj().s[221]++,O(xe));alarmStateService=(cov_t79jungpj().s[222]++,O(ve));alarmManagementRefreshService=(cov_t79jungpj().s[223]++,O(Me));router=(cov_t79jungpj().s[224]++,O(F));myVimarService=(cov_t79jungpj().s[225]++,O(Pe,{optional:!0}));unreadNotificationsCount$=(cov_t79jungpj().s[226]++,this.alarmStateService.getUnreadNotificationsCount$());notifications$=(cov_t79jungpj().s[227]++,this.alarmStateService.getNotifications$());cdr=(cov_t79jungpj().s[228]++,O(pe));destroy$=(cov_t79jungpj().s[229]++,new H());toastTimer=(cov_t79jungpj().s[230]++,null);latestRealtimeNotificationId=(cov_t79jungpj().s[231]++,null);currentUser=(cov_t79jungpj().s[232]++,{username:"",firstName:"",lastName:"",role:T.OPERATORE_SANITARIO});activeAlarmCount$=(cov_t79jungpj().s[233]++,this.alarmStateService.getActiveAlarmsCount$());resizeObserver;ngOnInit(){cov_t79jungpj().f[77]++;cov_t79jungpj().s[234]++;this.bindRealtimeAlarmNotifications(),this.internalAuthService.getCurrentUser$().pipe(X(1),D(this.destroy$)).subscribe(e=>{cov_t79jungpj().f[78]++;cov_t79jungpj().s[235]++;if(!e){cov_t79jungpj().b[81][0]++;cov_t79jungpj().s[236]++;this.navItems=[],this.router.navigate(["/auth/login"]);cov_t79jungpj().s[237]++;return;}else{cov_t79jungpj().b[81][1]++;}cov_t79jungpj().s[238]++;this.currentUser={username:e.username,firstName:e.username,lastName:"",role:e.role},this.isAdmin=e.role===T.AMMINISTRATORE,this.navItems=this.navService.getNavItems(e.role),(cov_t79jungpj().b[82][0]++,this.isAdmin)&&(cov_t79jungpj().b[82][1]++,this.loadVimarStatus()),this.cdr.markForCheck();});}ngAfterViewInit(){cov_t79jungpj().f[79]++;cov_t79jungpj().s[239]++;(cov_t79jungpj().b[83][0]++,typeof ResizeObserver>"u")||(cov_t79jungpj().b[83][1]++,!this.topbarRef?.nativeElement)||(cov_t79jungpj().b[83][2]++,this.resizeObserver=new ResizeObserver(e=>{cov_t79jungpj().f[80]++;cov_t79jungpj().s[240]++;for(let n of e){let i=(cov_t79jungpj().s[241]++,n.contentRect.height);cov_t79jungpj().s[242]++;document.documentElement.style.setProperty("--topbar-height",`${i}px`);}}),this.resizeObserver.observe(this.topbarRef.nativeElement));}ngOnDestroy(){cov_t79jungpj().f[81]++;cov_t79jungpj().s[243]++;this.destroy$.next(),this.destroy$.complete(),this.clearToastTimer(),this.resizeObserver?.disconnect();}toggleSidebar(){cov_t79jungpj().f[82]++;cov_t79jungpj().s[244]++;this.isCollapsed=!this.isCollapsed;}toggleProfilePanel(){cov_t79jungpj().f[83]++;cov_t79jungpj().s[245]++;this.closeNotificationPanel(),this.isProfilePanelOpen=!this.isProfilePanelOpen,(cov_t79jungpj().b[84][0]++,this.isProfilePanelOpen)&&(cov_t79jungpj().b[84][1]++,this.isAdmin)&&(cov_t79jungpj().b[84][2]++,this.loadVimarStatus());}closeProfilePanel(){cov_t79jungpj().f[84]++;cov_t79jungpj().s[246]++;this.isProfilePanelOpen=!1;}onNavItemSelected(e){cov_t79jungpj().f[85]++;cov_t79jungpj().s[247]++;this.closeProfilePanel(),this.closeNotificationPanel(),(cov_t79jungpj().b[85][0]++,e==="alarms/alarm-management")&&(cov_t79jungpj().b[85][1]++,this.router.url.includes("/alarms/alarm-management"))&&(cov_t79jungpj().b[85][2]++,this.alarmManagementRefreshService.requestRefresh());}goToVimarLink(){cov_t79jungpj().f[86]++;cov_t79jungpj().s[248]++;this.router.navigate(["/vimar-link"]);}toggleNotificationPanel(){cov_t79jungpj().f[87]++;cov_t79jungpj().s[249]++;this.closeProfilePanel(),this.isNotificationPanelOpen=!this.isNotificationPanelOpen;}closeNotificationPanel(){cov_t79jungpj().f[88]++;cov_t79jungpj().s[250]++;this.isNotificationPanelOpen=!1;}openNotificationsArchive(){cov_t79jungpj().f[89]++;cov_t79jungpj().s[251]++;this.closeNotificationPanel(),this.router.navigate(["/notifications"]);}openNotificationsArchiveFromPreview(e){cov_t79jungpj().f[90]++;cov_t79jungpj().s[252]++;this.closeNotificationPanel(),this.router.navigate(["/notifications"],{queryParams:{focus:e}});}removeTopbarNotification(e){cov_t79jungpj().f[91]++;cov_t79jungpj().s[253]++;this.alarmStateService.removeNotification(e);}clearTopbarNotifications(){cov_t79jungpj().f[92]++;cov_t79jungpj().s[254]++;this.alarmStateService.clearNotifications();}logout(){cov_t79jungpj().f[93]++;cov_t79jungpj().s[255]++;this.closeNotificationPanel(),this.internalAuthService.logoutFromBackend().subscribe(()=>{cov_t79jungpj().f[94]++;cov_t79jungpj().s[256]++;this.router.navigate(["/auth/login"]);});}canOpenProfilePanel(){cov_t79jungpj().f[95]++;cov_t79jungpj().s[257]++;return!0;}bindRealtimeAlarmNotifications(){cov_t79jungpj().f[96]++;cov_t79jungpj().s[258]++;this.alarmStateService.getNotifications$().pipe(D(this.destroy$)).subscribe(e=>{cov_t79jungpj().f[97]++;let n=(cov_t79jungpj().s[259]++,e[0]);cov_t79jungpj().s[260]++;(cov_t79jungpj().b[86][0]++,!n)||(cov_t79jungpj().b[86][1]++,n.notificationId===this.latestRealtimeNotificationId)||(cov_t79jungpj().b[86][2]++,this.latestRealtimeNotificationId=n.notificationId,this.openRealtimeNotificationPanel());});}openRealtimeNotificationPanel(){cov_t79jungpj().f[98]++;cov_t79jungpj().s[261]++;if(this.clearToastTimer(),this.realtimeToastMessage=null,this.closeProfilePanel(),this.isNotificationPanelOpen){cov_t79jungpj().b[87][0]++;cov_t79jungpj().s[262]++;this.cdr.markForCheck();cov_t79jungpj().s[263]++;return;}else{cov_t79jungpj().b[87][1]++;}cov_t79jungpj().s[264]++;this.isNotificationPanelOpen=!0,this.cdr.markForCheck();}showRealtimeToast(e,n){cov_t79jungpj().f[99]++;cov_t79jungpj().s[265]++;this.clearToastTimer(),this.realtimeToastMessage=e,this.realtimeToastKind=n,this.cdr.markForCheck(),this.toastTimer=setTimeout(()=>{cov_t79jungpj().f[100]++;cov_t79jungpj().s[266]++;this.realtimeToastMessage=null,this.cdr.markForCheck(),this.toastTimer=null;},5e3);}clearToastTimer(){cov_t79jungpj().f[101]++;cov_t79jungpj().s[267]++;(cov_t79jungpj().b[88][0]++,this.toastTimer)&&(cov_t79jungpj().b[88][1]++,clearTimeout(this.toastTimer),this.toastTimer=null);}loadVimarStatus(){cov_t79jungpj().f[102]++;cov_t79jungpj().s[268]++;if(!this.myVimarService){cov_t79jungpj().b[89][0]++;cov_t79jungpj().s[269]++;this.vimarAccount={email:"",isLinked:!1},this.vimarStatusError="Servizio MyVimar non disponibile in questa sezione.",this.isVimarStatusLoading=!1,this.showVimarAssociationWarning=!1,this.cdr.markForCheck();cov_t79jungpj().s[270]++;return;}else{cov_t79jungpj().b[89][1]++;}cov_t79jungpj().s[271]++;this.isVimarStatusLoading=!0,this.vimarStatusError="",this.cdr.markForCheck(),this.myVimarService.getLinkedAccount().subscribe({next:e=>{cov_t79jungpj().f[103]++;cov_t79jungpj().s[272]++;this.vimarAccount=e,this.isVimarStatusLoading=!1,this.showVimarAssociationWarning=(cov_t79jungpj().b[90][0]++,this.canOpenProfilePanel())&&(cov_t79jungpj().b[90][1]++,!e.isLinked),this.cdr.markForCheck();},error:()=>{cov_t79jungpj().f[104]++;cov_t79jungpj().s[273]++;this.vimarAccount={email:"",isLinked:!1},this.vimarStatusError="Impossibile recuperare lo stato del collegamento MyVimar.",this.isVimarStatusLoading=!1,this.showVimarAssociationWarning=!1,this.cdr.markForCheck();}});}static ɵfac=(cov_t79jungpj().s[274]++,function(n){cov_t79jungpj().f[105]++;cov_t79jungpj().s[275]++;return new((cov_t79jungpj().b[91][0]++,n)||(cov_t79jungpj().b[91][1]++,t))();});static ɵcmp=(cov_t79jungpj().s[276]++,S({type:t,selectors:[["app-main-layout"]],viewQuery:function(n,i){cov_t79jungpj().f[106]++;cov_t79jungpj().s[277]++;if((cov_t79jungpj().b[93][0]++,n&1)&&(cov_t79jungpj().b[93][1]++,ae(Je,5,ee)),n&2){cov_t79jungpj().b[92][0]++;let s;cov_t79jungpj().s[278]++;(cov_t79jungpj().b[94][0]++,re(s=le()))&&(cov_t79jungpj().b[94][1]++,i.topbarRef=s.first);}else{cov_t79jungpj().b[92][1]++;}},decls:10,vars:14,consts:[["topbarRef",""],[1,"block","relative","z-60",3,"hamburgerClicked","profileClicked","notificationClicked","logoutClicked","user","isProfileActive","isNotificationActive","unreadNotificationsCount","showVimarWarning"],[3,"notifications"],[1,"main-layout__realtime-toast",3,"main-layout__realtime-toast--success"],[1,"flex","h-[87vh]","overflow-hidden"],[1,"block","h-full",3,"collapsed","navItemSelected","profileClicked","logoutClicked","navItems","isCollapsed","isProfileMode","canOpenProfile"],[1,"relative","flex-1","min-w-0","max-w-full","overflow-y-auto","p-6","bg-slate-50"],[1,"h-full","w-full"],[3,"viewAllClicked","notificationSelected","removeClicked","clearAllClicked","notifications"],[1,"main-layout__realtime-toast"],[1,"mx-auto","flex","h-full","w-full","max-w-5xl","flex-col","gap-8","rounded-3xl","border","border-slate-200","bg-white","p-6","shadow-[0_22px_50px_rgba(15,23,42,0.12)]","sm:p-8"],[1,"flex","flex-wrap","items-start","justify-between","gap-4","border-b","border-slate-200","pb-5"],[1,"text-xs","font-bold","uppercase","tracking-[0.12em]","text-amber-600"],[1,"mt-2","text-2xl","font-semibold","text-slate-900"],[1,"mt-2","text-sm","text-slate-600"],["type","button",1,"cursor-pointer","rounded-xl","border","border-amber-300","bg-amber-300","px-4","py-2.5","text-sm","font-semibold","text-slate-900","transition","hover:bg-amber-200"],[1,"grid","gap-5","lg:grid-cols-2"],[1,"rounded-2xl","border","border-slate-200","bg-slate-50","p-5"],[1,"text-xs","font-semibold","uppercase","tracking-[0.1em]","text-slate-500"],[1,"mt-3","text-sm","text-slate-700"],["type","button","aria-label","Esci dal profilo",1,"cursor-pointer","mt-5","inline-flex","items-center","gap-3","rounded-xl","border","border-red-200","bg-red-50","px-4","py-2.5","text-sm","font-semibold","text-red-600","transition","hover:border-red-300","hover:bg-red-100",3,"click"],["src","logout.png","alt","",1,"h-5","w-5"],["type","button",1,"cursor-pointer","rounded-xl","border","border-amber-300","bg-amber-300","px-4","py-2.5","text-sm","font-semibold","text-slate-900","transition","hover:bg-amber-200",3,"click"],[1,"mt-3","text-sm","font-medium","text-slate-600"],[1,"mt-3","rounded-lg","border","border-red-200","bg-red-50","px-3","py-2","text-sm","text-red-700"],[1,"mt-3","rounded-lg","border","border-emerald-200","bg-emerald-50","px-3","py-2","text-sm","text-emerald-700"],[1,"mt-3","rounded-lg","border","border-amber-200","bg-amber-50","px-3","py-2","text-sm","text-amber-700"]],template:function(n,i){cov_t79jungpj().f[107]++;cov_t79jungpj().s[279]++;if(n&1){cov_t79jungpj().b[95][0]++;let s=(cov_t79jungpj().s[280]++,y());cov_t79jungpj().s[281]++;a(0,"app-topbar",1,0),E(2,"async"),C("hamburgerClicked",function(){cov_t79jungpj().f[108]++;cov_t79jungpj().s[282]++;return i.toggleSidebar();})("profileClicked",function(){cov_t79jungpj().f[109]++;cov_t79jungpj().s[283]++;return i.toggleProfilePanel();})("notificationClicked",function(){cov_t79jungpj().f[110]++;cov_t79jungpj().s[284]++;return i.toggleNotificationPanel();})("logoutClicked",function(){cov_t79jungpj().f[111]++;cov_t79jungpj().s[285]++;return i.logout();}),r(),d(3,et,2,4,"app-notification-topbar-panel-component",2),d(4,tt,3,3,"div",3),a(5,"div",4)(6,"app-sidebar",5),C("collapsed",function(){cov_t79jungpj().f[112]++;cov_t79jungpj().s[286]++;return i.toggleSidebar();})("navItemSelected",function(){cov_t79jungpj().f[113]++;cov_t79jungpj().s[287]++;return f(s),i.closeProfilePanel(),u(i.isCollapsed=!0);})("profileClicked",function(){cov_t79jungpj().f[114]++;cov_t79jungpj().s[288]++;return i.toggleProfilePanel();})("logoutClicked",function(){cov_t79jungpj().f[115]++;cov_t79jungpj().s[289]++;return i.logout();})("navItemSelected",function(){cov_t79jungpj().f[116]++;cov_t79jungpj().s[290]++;return f(s),i.closeProfilePanel(),u(i.isCollapsed=!0);}),r(),a(7,"main",6),d(8,ct,21,5,"section",7)(9,st,1,0,"router-outlet"),r()();}else{cov_t79jungpj().b[95][1]++;}cov_t79jungpj().s[291]++;(cov_t79jungpj().b[96][0]++,n&2)&&(cov_t79jungpj().b[96][1]++,x("user",i.currentUser)("isProfileActive",i.isProfilePanelOpen)("isNotificationActive",i.isNotificationPanelOpen)("unreadNotificationsCount",(cov_t79jungpj().b[97][0]++,R(2,12,i.unreadNotificationsCount$))??(cov_t79jungpj().b[97][1]++,0))("showVimarWarning",i.showVimarAssociationWarning),o(3),p(i.isNotificationPanelOpen?(cov_t79jungpj().b[98][0]++,3):(cov_t79jungpj().b[98][1]++,-1)),o(),p(i.realtimeToastMessage?(cov_t79jungpj().b[99][0]++,4):(cov_t79jungpj().b[99][1]++,-1)),o(2),x("navItems",i.navItems)("isCollapsed",i.isCollapsed)("isProfileMode",i.isProfilePanelOpen)("canOpenProfile",i.canOpenProfilePanel()),o(2),p(i.isProfilePanelOpen?(cov_t79jungpj().b[100][0]++,8):(cov_t79jungpj().b[100][1]++,9)));},dependencies:[z,ge,Se,Ee,Te,$],styles:[`.main-layout__realtime-toast[_ngcontent-%COMP%]{position:fixed;top:5.2rem;right:1.1rem;z-index:80;max-width:min(26rem,calc(100vw - 2rem));border:1px solid #fbbf24;border-radius:.8rem;background:#fef3c7;color:#78350f;box-shadow:0 18px 36px -24px #0f172a8c;padding:.7rem .9rem}.main-layout__realtime-toast[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:0;font-size:.92rem;font-weight:700;line-height:1.3}.main-layout__realtime-toast--success[_ngcontent-%COMP%]{border-color:#86efac;background:#dcfce7;color:#14532d}@media(max-width:960px){.main-layout__realtime-toast[_ngcontent-%COMP%]{right:.7rem;left:.7rem;max-width:none}} +/*# sourceMappingURL=main-layout.component-CDUPEIGX.css.map */`],changeDetection:0}));}cov_t79jungpj().s[292]++;return t;})());export{Zt as MainLayoutComponent};//# sourceMappingURL=chunk-J6KRJBIG.js.map +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ3ZSIsImNvdl90NzlqdW5ncGoiLCJzIiwiZiIsInQiLCJnZXROYXZJdGVtcyIsImUiLCJuIiwibGFiZWwiLCJpY29uIiwicm91dGUiLCJyZXF1aXJlZFJvbGUiLCJUIiwiQU1NSU5JU1RSQVRPUkUiLCJpIiwiYiIsIk9QRVJBVE9SRV9TQU5JVEFSSU8iLCJmaWx0ZXIiLCLJtWZhYyIsIsm1cHJvdiIsIkwiLCJ0b2tlbiIsImZhY3RvcnkiLCJwcm92aWRlZEluIiwiT2UiLCJyb3V0ZXIiLCJhY3RpdmF0ZWRSb3V0ZSIsImJyZWFkY3J1bWJzJCIsImNvbnN0cnVjdG9yIiwiZXZlbnRzIiwicGlwZSIsIksiLCJiZSIsIkoiLCJRIiwiYnVpbGRCcmVhZGNydW1icyIsInJvb3QiLCJjaGlsZHJlbiIsIl8iLCJzbmFwc2hvdCIsInVybCIsIm1hcCIsIkFlIiwicGF0aCIsImpvaW4iLCJZIiwicSIsImRhdGEiLCJicmVhZGNydW1iIiwicHVzaCIsIlUiLCJGIiwiX2UiLCJSZSIsImMiLCJWZSIsImEiLCJsIiwiciIsIm0iLCIkaW1wbGljaXQiLCJ4IiwibyIsImsiLCJMZSIsIiRlIiwiZCIsIiRpbmRleCIsIiRjb3VudCIsInAiLCJ6ZSIsInciLCJ1bnJlYWROb3RpZmljYXRpb25zQ291bnQiLCJGZSIsIlNlIiwiYnJlYWRjcnVtYlNlcnZpY2UiLCJ1c2VyIiwiaXNQcm9maWxlQWN0aXZlIiwiaXNOb3RpZmljYXRpb25BY3RpdmUiLCJzaG93VmltYXJXYXJuaW5nIiwicHJvZmlsZUNsaWNrZWQiLCJnIiwibG9nb3V0Q2xpY2tlZCIsImhhbWJ1cmdlckNsaWNrZWQiLCJub3RpZmljYXRpb25DbGlja2VkIiwib25Ob3RpZmljYXRpb25DbGljayIsImVtaXQiLCJvblByb2ZpbGVDbGljayIsImllIiwiybVjbXAiLCJTIiwidHlwZSIsInNlbGVjdG9ycyIsImlucHV0cyIsIm91dHB1dHMiLCJkZWNscyIsInZhcnMiLCJjb25zdHMiLCJ0ZW1wbGF0ZSIsIkMiLCJQIiwiQSIsIkUiLCJOIiwiUiIsIk0iLCJkZXBlbmRlbmNpZXMiLCJoZSIsImoiLCIkIiwic3R5bGVzIiwiRGUiLCJVZSIsInRlIiwiV2UiLCJHZSIsInkiLCJ1IiwibmF2SXRlbVNlbGVjdGVkIiwibmUiLCJkZSIsIkciLCJpc1Byb2ZpbGVNb2RlIiwiaXNBY3RpdmUiLCJCZSIsIlRlIiwibmF2SXRlbXMiLCJpc0NvbGxhcHNlZCIsImNhbk9wZW5Qcm9maWxlIiwiY29sbGFwc2VkIiwiQ2UiLCJ6IiwiZmUiLCJZZSIsIm5vdGlmaWNhdGlvbklkIiwicWUiLCJJIiwib25DbGVhckFsbCIsInYiLCJIZSIsIlFlIiwiQiIsImdldFByaW9yaXR5QnViYmxlQ2xhc3MiLCJnZXRQcmlvcml0eVN5bWJvbENsYXNzIiwiZ2V0UHJpb3JpdHlTeW1ib2wiLCJLZSIsIm9uTm90aWZpY2F0aW9uU2VsZWN0ZWQiLCJvblJlbW92ZSIsIloiLCJvZSIsIlciLCJnZXREaXNwbGF5VGl0bGUiLCJnZXRQcmlvcml0eSIsInNlbnRBdCIsIm1lIiwiWGUiLCJ2aXNpYmxlTm90aWZpY2F0aW9ucyIsIkVlIiwibm90aWZpY2F0aW9ucyIsInZpZXdBbGxDbGlja2VkIiwibm90aWZpY2F0aW9uU2VsZWN0ZWQiLCJyZW1vdmVDbGlja2VkIiwiY2xlYXJBbGxDbGlja2VkIiwibWF4VmlzaWJsZU5vdGlmaWNhdGlvbnMiLCJzbGljZSIsInN0b3BQcm9wYWdhdGlvbiIsInllIiwidGl0bGUiLCJrZSIsImgiLCJXSElURSIsIkdSRUVOIiwiT1JBTkdFIiwiUkVEIiwibGVuZ3RoIiwidWUiLCJjaGFuZ2VEZXRlY3Rpb24iLCJKZSIsIlplIiwiZXQiLCJvcGVuTm90aWZpY2F0aW9uc0FyY2hpdmUiLCJvcGVuTm90aWZpY2F0aW9uc0FyY2hpdmVGcm9tUHJldmlldyIsInJlbW92ZVRvcGJhck5vdGlmaWNhdGlvbiIsImNsZWFyVG9wYmFyTm90aWZpY2F0aW9ucyIsIm5vdGlmaWNhdGlvbnMkIiwic2UiLCJ0dCIsInJlYWx0aW1lVG9hc3RLaW5kIiwicmVhbHRpbWVUb2FzdE1lc3NhZ2UiLCJpdCIsImdvVG9WaW1hckxpbmsiLCJudCIsIm90IiwidmltYXJTdGF0dXNFcnJvciIsImF0IiwidmltYXJBY2NvdW50IiwiZW1haWwiLCJydCIsImx0IiwiaXNWaW1hclN0YXR1c0xvYWRpbmciLCJpc0xpbmtlZCIsImN0IiwibG9nb3V0IiwiY2UiLCJjdXJyZW50VXNlciIsImZpcnN0TmFtZSIsImxhc3ROYW1lIiwidXNlcm5hbWUiLCJpc0FkbWluIiwic3QiLCJadCIsInRvcGJhclJlZiIsImlzUHJvZmlsZVBhbmVsT3BlbiIsInNob3dWaW1hckFzc29jaWF0aW9uV2FybmluZyIsImlzTm90aWZpY2F0aW9uUGFuZWxPcGVuIiwibmF2U2VydmljZSIsIk8iLCJpbnRlcm5hbEF1dGhTZXJ2aWNlIiwieGUiLCJhbGFybVN0YXRlU2VydmljZSIsInZlIiwiYWxhcm1NYW5hZ2VtZW50UmVmcmVzaFNlcnZpY2UiLCJNZSIsIm15VmltYXJTZXJ2aWNlIiwiUGUiLCJvcHRpb25hbCIsInVucmVhZE5vdGlmaWNhdGlvbnNDb3VudCQiLCJnZXRVbnJlYWROb3RpZmljYXRpb25zQ291bnQkIiwiZ2V0Tm90aWZpY2F0aW9ucyQiLCJjZHIiLCJwZSIsImRlc3Ryb3kkIiwiSCIsInRvYXN0VGltZXIiLCJsYXRlc3RSZWFsdGltZU5vdGlmaWNhdGlvbklkIiwicm9sZSIsImFjdGl2ZUFsYXJtQ291bnQkIiwiZ2V0QWN0aXZlQWxhcm1zQ291bnQkIiwicmVzaXplT2JzZXJ2ZXIiLCJuZ09uSW5pdCIsImJpbmRSZWFsdGltZUFsYXJtTm90aWZpY2F0aW9ucyIsImdldEN1cnJlbnRVc2VyJCIsIlgiLCJEIiwic3Vic2NyaWJlIiwibmF2aWdhdGUiLCJsb2FkVmltYXJTdGF0dXMiLCJtYXJrRm9yQ2hlY2siLCJuZ0FmdGVyVmlld0luaXQiLCJSZXNpemVPYnNlcnZlciIsIm5hdGl2ZUVsZW1lbnQiLCJjb250ZW50UmVjdCIsImhlaWdodCIsImRvY3VtZW50IiwiZG9jdW1lbnRFbGVtZW50Iiwic3R5bGUiLCJzZXRQcm9wZXJ0eSIsIm9ic2VydmUiLCJuZ09uRGVzdHJveSIsIm5leHQiLCJjb21wbGV0ZSIsImNsZWFyVG9hc3RUaW1lciIsImRpc2Nvbm5lY3QiLCJ0b2dnbGVTaWRlYmFyIiwidG9nZ2xlUHJvZmlsZVBhbmVsIiwiY2xvc2VOb3RpZmljYXRpb25QYW5lbCIsImNsb3NlUHJvZmlsZVBhbmVsIiwib25OYXZJdGVtU2VsZWN0ZWQiLCJpbmNsdWRlcyIsInJlcXVlc3RSZWZyZXNoIiwidG9nZ2xlTm90aWZpY2F0aW9uUGFuZWwiLCJxdWVyeVBhcmFtcyIsImZvY3VzIiwicmVtb3ZlTm90aWZpY2F0aW9uIiwiY2xlYXJOb3RpZmljYXRpb25zIiwibG9nb3V0RnJvbUJhY2tlbmQiLCJjYW5PcGVuUHJvZmlsZVBhbmVsIiwib3BlblJlYWx0aW1lTm90aWZpY2F0aW9uUGFuZWwiLCJzaG93UmVhbHRpbWVUb2FzdCIsInNldFRpbWVvdXQiLCJjbGVhclRpbWVvdXQiLCJnZXRMaW5rZWRBY2NvdW50IiwiZXJyb3IiLCJ2aWV3UXVlcnkiLCJhZSIsImVlIiwicmUiLCJsZSIsImZpcnN0IiwiZ2UiLCJNYWluTGF5b3V0Q29tcG9uZW50Il0sInNvdXJjZXMiOlsic3JjL2FwcC9mZWF0dXJlcy9tYWluLWxheW91dC9zZXJ2aWNlcy9uYXYuc2VydmljZS50cyIsInNyYy9hcHAvY29yZS9zZXJ2aWNlcy9icmVhZGNydW1iLnNlcnZpY2UudHMiLCJzcmMvYXBwL2ZlYXR1cmVzL21haW4tbGF5b3V0L2NvbXBvbmVudHMvdG9wYmFyL3RvcGJhci5jb21wb25lbnQudHMiLCJzcmMvYXBwL2ZlYXR1cmVzL21haW4tbGF5b3V0L2NvbXBvbmVudHMvdG9wYmFyL3RvcGJhci5jb21wb25lbnQuaHRtbCIsInNyYy9hcHAvZmVhdHVyZXMvbWFpbi1sYXlvdXQvY29tcG9uZW50cy9zaWRlYmFyL3NpZGViYXIuY29tcG9uZW50LnRzIiwic3JjL2FwcC9mZWF0dXJlcy9tYWluLWxheW91dC9jb21wb25lbnRzL3NpZGViYXIvc2lkZWJhci5jb21wb25lbnQuaHRtbCIsInNyYy9hcHAvZmVhdHVyZXMvbm90aWZpY2F0aW9uL2NvbXBvbmVudHMvbm90aWZpY2F0aW9uLXRvcGJhci1wYW5lbC1jb21wb25lbnQvbm90aWZpY2F0aW9uLXRvcGJhci1wYW5lbC1jb21wb25lbnQudHMiLCJzcmMvYXBwL2ZlYXR1cmVzL25vdGlmaWNhdGlvbi9jb21wb25lbnRzL25vdGlmaWNhdGlvbi10b3BiYXItcGFuZWwtY29tcG9uZW50L25vdGlmaWNhdGlvbi10b3BiYXItcGFuZWwtY29tcG9uZW50Lmh0bWwiLCJzcmMvYXBwL2ZlYXR1cmVzL21haW4tbGF5b3V0L21haW4tbGF5b3V0LmNvbXBvbmVudC50cyIsInNyYy9hcHAvZmVhdHVyZXMvbWFpbi1sYXlvdXQvbWFpbi1sYXlvdXQuY29tcG9uZW50Lmh0bWwiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVXNlclJvbGUgfSBmcm9tICcuLi8uLi8uLi9jb3JlL21vZGVscy91c2VyLXJvbGUuZW51bSc7XG5pbXBvcnQgeyBOYXZJdGVtIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9tb2RlbHMvbmF2LWl0ZW0ubW9kZWwnO1xuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIE5hdlNlcnZpY2Uge1xuICAgIHB1YmxpYyBnZXROYXZJdGVtcyhyb2xlOiBVc2VyUm9sZSk6IE5hdkl0ZW1bXXtcbiAgICAgICAgLy9yb3V0ZXMgcHJvdnZpc29yaWUsIGRhIGRlZmluaXJlIGUgY29uZnJvbnRhcmUgY29uIGFwcC5yb3V0ZXMudHNcbiAgICAgICAgY29uc3QgTmF2SXRlbUxpc3QgOiBOYXZJdGVtW10gPSBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGFiZWw6IFwiRGFzaGJvYXJkXCIsXG4gICAgICAgICAgICAgICAgaWNvbjogXCJkYXNoYm9hcmQucG5nXCIsXG4gICAgICAgICAgICAgICAgcm91dGU6IFwiZGFzaGJvYXJkXCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGFiZWw6IFwiTm90aWZpY2hlXCIsXG4gICAgICAgICAgICAgICAgaWNvbjogXCJub3RpZmljYXRpb24ucG5nXCIsXG4gICAgICAgICAgICAgICAgcm91dGU6IFwibm90aWZpY2F0aW9uc1wiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxhYmVsOiBcIkRpc3Bvc2l0aXZpXCIsXG4gICAgICAgICAgICAgICAgaWNvbjogXCJkZXZpY2UucG5nXCIsXG4gICAgICAgICAgICAgICAgcm91dGU6IFwiYXBhcnRtZW50LW1vbml0b3JcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBsYWJlbDogXCJHZXN0aW9uZSBBbGxhcm1pXCIsXG4gICAgICAgICAgICAgICAgaWNvbjogXCJhbGFybS1tYW5hZ2VtZW50LnBuZ1wiLFxuICAgICAgICAgICAgICAgIHJvdXRlOiBcImFsYXJtcy9hbGFybS1tYW5hZ2VtZW50XCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGFiZWw6IFwiU3RvcmljbyBBbGxhcm1pXCIsXG4gICAgICAgICAgICAgICAgaWNvbjogXCJhbGFybS1oaXN0b3J5LnBuZ1wiLFxuICAgICAgICAgICAgICAgIHJvdXRlOiBcImFsYXJtcy9hbGFybS1oaXN0b3J5XCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGFiZWw6IFwiQ29uZmlndXJhemlvbmUgQWxsYXJtaVwiLFxuICAgICAgICAgICAgICAgIGljb246IFwiYWxhcm0tY29uZmlndXJhdGlvbi5wbmdcIixcbiAgICAgICAgICAgICAgICByb3V0ZTogXCJhbGFybXMvYWxhcm0tY29uZmlndXJhdGlvblwiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkUm9sZTogVXNlclJvbGUuQU1NSU5JU1RSQVRPUkVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGFiZWw6IFwiQW5hbHl0aWNzXCIsXG4gICAgICAgICAgICAgICAgaWNvbjogXCJhbmFseXRpY3MucG5nXCIsXG4gICAgICAgICAgICAgICAgcm91dGU6IFwiYW5hbHl0aWNzXCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGFiZWw6IFwiR2VzdGlvbmUgUmVwYXJ0aVwiLFxuICAgICAgICAgICAgICAgIGljb246IFwid2FyZC1tYW5hZ2VtZW50LnBuZ1wiLFxuICAgICAgICAgICAgICAgIHJvdXRlOiBcIndhcmQtbWFuYWdlbWVudFwiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkUm9sZTogVXNlclJvbGUuQU1NSU5JU1RSQVRPUkVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGFiZWw6IFwiR2VzdGlvbmUgVXRlbnRpXCIsXG4gICAgICAgICAgICAgICAgaWNvbjogXCJ1c2VyLW1hbmFnZW1lbnQucG5nXCIsXG4gICAgICAgICAgICAgICAgcm91dGU6IFwidXNlci1tYW5hZ2VtZW50XCIsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWRSb2xlOiBVc2VyUm9sZS5BTU1JTklTVFJBVE9SRVxuICAgICAgICAgICAgfSxcbiAgICAgICAgXTtcblxuICAgICAgICBsZXQgZmlsdGVyZWRMaXN0ID0gTmF2SXRlbUxpc3Q7XG4gICAgICAgIGlmKHJvbGUgPT09IFVzZXJSb2xlLk9QRVJBVE9SRV9TQU5JVEFSSU8pXG4gICAgICAgICAgICBmaWx0ZXJlZExpc3QgPSBOYXZJdGVtTGlzdC5maWx0ZXIobiA9PiAhbi5yZXF1aXJlZFJvbGUpOyAvLyAhdW5kZWZpbmVkID0gdHJ1ZVxuXG4gICAgICAgIHJldHVybiBmaWx0ZXJlZExpc3Q7XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBSb3V0ZXIsIE5hdmlnYXRpb25FbmQsIEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgZmlsdGVyLCBtYXAsIHN0YXJ0V2l0aCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBCcmVhZGNydW1iIHtcclxuICAgIGxhYmVsOiBzdHJpbmc7XHJcbiAgICB1cmw6IHN0cmluZztcclxufVxyXG5cclxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcclxuZXhwb3J0IGNsYXNzIEJyZWFkY3J1bWJTZXJ2aWNlIHtcclxuICAgIGJyZWFkY3J1bWJzJDogT2JzZXJ2YWJsZTxCcmVhZGNydW1iW10+O1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgcm91dGVyOiBSb3V0ZXIsIHByaXZhdGUgcmVhZG9ubHkgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlKSB7XHJcbiAgICAgICAgdGhpcy5icmVhZGNydW1icyQgPSB0aGlzLnJvdXRlci5ldmVudHMucGlwZShcclxuICAgICAgICAgICAgZmlsdGVyKGUgPT4gZSBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQpLFxyXG4gICAgICAgICAgICBzdGFydFdpdGgobnVsbCksXHJcbiAgICAgICAgICAgIG1hcCgoKSA9PiB0aGlzLmJ1aWxkQnJlYWRjcnVtYnModGhpcy5hY3RpdmF0ZWRSb3V0ZS5yb290KSlcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYnVpbGRCcmVhZGNydW1icyhcclxuICAgICAgICByb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcbiAgICAgICAgdXJsID0gJycsXHJcbiAgICAgICAgY3J1bWJzOiBCcmVhZGNydW1iW10gPSBbXVxyXG4gICAgKTogQnJlYWRjcnVtYltdIHtcclxuICAgICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIHJvdXRlLmNoaWxkcmVuKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNlZ21lbnQgPSBjaGlsZC5zbmFwc2hvdC51cmwubWFwKHMgPT4gcy5wYXRoKS5qb2luKCcvJyk7XHJcbiAgICAgICAgICAgIGNvbnN0IGZ1bGxVcmwgPSBzZWdtZW50ID8gYCR7dXJsfS8ke3NlZ21lbnR9YCA6IHVybDtcclxuICAgICAgICAgICAgY29uc3QgbGFiZWwgPSBjaGlsZC5zbmFwc2hvdC5kYXRhWydicmVhZGNydW1iJ107XHJcblxyXG4gICAgICAgICAgICBpZiAobGFiZWwgJiYgc2VnbWVudCkge1xyXG4gICAgICAgICAgICAgICAgY3J1bWJzLnB1c2goeyBsYWJlbCwgdXJsOiBmdWxsVXJsIH0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmJ1aWxkQnJlYWRjcnVtYnMoY2hpbGQsIGZ1bGxVcmwsIGNydW1icyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY3J1bWJzO1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IHsgQ29tcG9uZW50LEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVXNlckluZm8gfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL21vZGVscy91c2VyLWluZm8ubW9kZWwnO1xuaW1wb3J0IHsgQXN5bmNQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEJyZWFkY3J1bWIsIEJyZWFkY3J1bWJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS9zZXJ2aWNlcy9icmVhZGNydW1iLnNlcnZpY2UnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgUm91dGVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuQENvbXBvbmVudCh7IFxuICAgIHNlbGVjdG9yOiAnYXBwLXRvcGJhcicsIFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czpbQXN5bmNQaXBlLCBSb3V0ZXJNb2R1bGVdLFxuICAgIHRlbXBsYXRlVXJsOiAnLi90b3BiYXIuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsOiAnLi90b3BiYXIuY29tcG9uZW50LmNzcyd9KVxuZXhwb3J0IGNsYXNzIFRvcGJhckNvbXBvbmVudCB7XG4gICAgQElucHV0KCkgdXNlciE6IFVzZXJJbmZvO1xuICAgIEBJbnB1dCgpIGlzUHJvZmlsZUFjdGl2ZSA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIGlzTm90aWZpY2F0aW9uQWN0aXZlID0gZmFsc2U7XG4gICAgQElucHV0KCkgdW5yZWFkTm90aWZpY2F0aW9uc0NvdW50ID0gMDtcbiAgICBASW5wdXQoKSBzaG93VmltYXJXYXJuaW5nID0gZmFsc2U7XG4gICAgQE91dHB1dCgpIHByb2ZpbGVDbGlja2VkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICAgIEBPdXRwdXQoKSBsb2dvdXRDbGlja2VkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICAgIEBPdXRwdXQoKSBoYW1idXJnZXJDbGlja2VkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICAgIEBPdXRwdXQoKSBub3RpZmljYXRpb25DbGlja2VkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICAgIGJyZWFkY3J1bWJzJDogT2JzZXJ2YWJsZTxCcmVhZGNydW1iW10+O1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBicmVhZGNydW1iU2VydmljZTogQnJlYWRjcnVtYlNlcnZpY2UpIHtcbiAgICAgICAgdGhpcy5icmVhZGNydW1icyQgPSB0aGlzLmJyZWFkY3J1bWJTZXJ2aWNlLmJyZWFkY3J1bWJzJDtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25Ob3RpZmljYXRpb25DbGljaygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5ub3RpZmljYXRpb25DbGlja2VkLmVtaXQoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25Qcm9maWxlQ2xpY2soKTogdm9pZCB7XG4gICAgICAgIHRoaXMucHJvZmlsZUNsaWNrZWQuZW1pdCgpO1xuICAgIH1cbn0iLCI8c2VjdGlvbiBjbGFzcz1cInRvcGJhci1zaGVsbFwiPlxuICAgIDxkaXYgY2xhc3M9XCJ0b3BiYXItc2hlbGxfX21haW4tcm93XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0b3BiYXItYnJhbmRcIj5cbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiaGFtYnVyZ2VyLWJ0blwiIGFyaWEtbGFiZWw9XCJBcHJpIG1lbnVcIiAoY2xpY2spPVwiaGFtYnVyZ2VyQ2xpY2tlZC5lbWl0KClcIj7imLA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxpbWcgc3JjPVwibG9nby5wbmdcIiBhbHQ9XCJcIiBjbGFzcz1cInRvcGJhci1sb2dvXCI+XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxoMSBjbGFzcz1cInRvcGJhci10aXRsZVwiPlZpZXc0TGlmZTwvaDE+XG4gICAgICAgICAgICAgICAgPG5hdiBjbGFzcz1cInRvcGJhci1icmVhZGNydW1iXCIgYXJpYS1sYWJlbD1cIkJyZWFkY3J1bWJcIj5cbiAgICAgICAgICAgICAgICAgICAgPG9sIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEgdGV4dC1zbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAoY3J1bWIgb2YgYnJlYWRjcnVtYnMkIHwgYXN5bmM7IHRyYWNrIGNydW1iLnVybDsgbGV0IGxhc3QgPSAkbGFzdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKCFsYXN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgW3JvdXRlckxpbmtdPVwiY3J1bWIudXJsXCIgY2xhc3M9XCJob3Zlcjp0ZXh0LWFtYmVyLTYwMFwiPnt7IGNydW1iLmxhYmVsIH19PC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwib3BhY2l0eS00MFwiPi88L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb250LXNlbWlib2xkXCI+e3sgY3J1bWIubGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC9vbD5cbiAgICAgICAgICAgICAgICA8L25hdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwidG9wYmFyLWFjdGlvbnNcIj5cbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwidG9wYmFyLWJ1dHRvbiB0b3BiYXItYnV0dG9uLW5ldXRyYWwgbm90aWZpY2F0aW9uLWJ0blwiIGFyaWEtbGFiZWw9XCJWaXN1YWxpenphIG5vdGlmaWNoZVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uTm90aWZpY2F0aW9uQ2xpY2soKVwiIFtjbGFzcy5ub3RpZmljYXRpb24tYWN0aXZlXT1cImlzTm90aWZpY2F0aW9uQWN0aXZlXCI+XG4gICAgICAgICAgICAgICAgPGltZyBzcmM9XCJub3RpZmljYXRpb24ucG5nXCIgY2xhc3M9XCJ0b3BiYXItYXZhdGFyXCIgYWx0PVwiXCI+XG4gICAgICAgICAgICAgICAgQGlmICh1bnJlYWROb3RpZmljYXRpb25zQ291bnQgPiAwKSB7XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0b3BiYXItbm90aWZpY2F0aW9uLWNvdW50XCIgYXJpYS1saXZlPVwicG9saXRlXCIgYXJpYS1hdG9taWM9XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IHVucmVhZE5vdGlmaWNhdGlvbnNDb3VudCA+IDk5ID8gJzk5KycgOiB1bnJlYWROb3RpZmljYXRpb25zQ291bnQgfX1cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGFyaWEtbGFiZWw9XCJBcHJpIHByb2ZpbG9cIiAoY2xpY2spPVwib25Qcm9maWxlQ2xpY2soKVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ0b3BiYXItcHJvZmlsZSB0b3BiYXItcHJvZmlsZS0tZGVza3RvcFwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLnByb2ZpbGUtYWN0aXZlXT1cImlzUHJvZmlsZUFjdGl2ZVwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmJnLWFtYmVyLTMwMF09XCJpc1Byb2ZpbGVBY3RpdmVcIj5cbiAgICAgICAgICAgICAgICA8aW1nIHNyYz1cInVzZXItYXZhdGFyLnBuZ1wiIGNsYXNzPVwidG9wYmFyLWF2YXRhclwiIGFsdD1cIlwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0b3BiYXItdXNlci1tZXRhXCI+PC9kaXY+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICBAaWYgKHNob3dWaW1hcldhcm5pbmcpIHtcbiAgICA8ZGl2IGNsYXNzPVwidG9wYmFyLXdhcm5pbmctcm93XCI+XG4gICAgICAgIDxvdXRwdXQgY2xhc3M9XCJ0b3BiYXItdmltYXItd2FybmluZ1wiIGFyaWEtbGl2ZT1cInBvbGl0ZVwiIGFyaWEtYXRvbWljPVwidHJ1ZVwiPlxuICAgICAgICAgICAgQWNjb3VudCBkYSBhc3NvY2lhcmUgYSBNeVZpbWFyXG4gICAgICAgIDwvb3V0cHV0PlxuICAgIDwvZGl2PlxuICAgIH1cblxuPC9zZWN0aW9uPiIsImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOYXZJdGVtIH0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS9tb2RlbHMvbmF2LWl0ZW0ubW9kZWwnO1xuaW1wb3J0IHsgUm91dGVyTGluaywgUm91dGVyTGlua0FjdGl2ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2FwcC1zaWRlYmFyJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgUm91dGVyTGluayxcbiAgICAgICAgUm91dGVyTGlua0FjdGl2ZSxcbiAgICAgICAgQ29tbW9uTW9kdWxlLFxuICAgIF0sXG4gICAgdGVtcGxhdGVVcmw6ICcuL3NpZGViYXIuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsOiAnLi9zaWRlYmFyLmNvbXBvbmVudC5jc3MnXG59KVxuZXhwb3J0IGNsYXNzIFNpZGViYXJDb21wb25lbnQge1xuICAgIEBJbnB1dCgpIG5hdkl0ZW1zITogTmF2SXRlbVtdO1xuICAgIEBJbnB1dCgpIGlzQ29sbGFwc2VkITogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBpc1Byb2ZpbGVNb2RlID0gZmFsc2U7XG4gICAgQElucHV0KCkgY2FuT3BlblByb2ZpbGUgPSBmYWxzZTtcbiAgICBAT3V0cHV0KCkgcHJvZmlsZUNsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gICAgQE91dHB1dCgpIGNvbGxhcHNlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgICBAT3V0cHV0KCkgbmF2SXRlbVNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG59XG4iLCI8YXNpZGUgY2xhc3M9XCJzaWRlYmFyLXNoZWxsXCIgW2NsYXNzLmlzLW9wZW5dPVwiIWlzQ29sbGFwc2VkXCI+XG5cbiAgPGRpdiBjbGFzcz1cInNpZGViYXItb3ZlcmxheVwiIChjbGljayk9XCJjb2xsYXBzZWQuZW1pdCgpXCI+PC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJzaWRlYmFyLWlubmVyXCI+XG4gICAgPHVsIGNsYXNzPVwic2lkZWJhci1uYXZcIj5cbiAgICAgIEBmb3IgKGl0ZW0gb2YgbmF2SXRlbXM7IHRyYWNrIGl0ZW0ubGFiZWwpIHtcbiAgICAgIDxsaT5cbiAgICAgICAgPGEgW3JvdXRlckxpbmtdPVwiaXRlbS5yb3V0ZVwiIHJvdXRlckxpbmtBY3RpdmUgI3JsYT1cInJvdXRlckxpbmtBY3RpdmVcIlxuICAgICAgICAgIFtjbGFzcy5pcy1hY3RpdmVdPVwiIWlzUHJvZmlsZU1vZGUgJiYgcmxhLmlzQWN0aXZlXCIgY2xhc3M9XCJzaWRlYmFyLWxpbmtcIlxuICAgICAgICAgIChjbGljayk9XCJuYXZJdGVtU2VsZWN0ZWQuZW1pdChpdGVtLnJvdXRlKVwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2lkZWJhci1saW5rLWljb25cIj5cbiAgICAgICAgICAgIDxpbWcgKm5nSWY9XCJpdGVtLmljb247IGVsc2UgZmFsbGJhY2tcIiBbc3JjXT1cIml0ZW0uaWNvblwiIGFsdD1cIlwiPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNmYWxsYmFjaz7igKI8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInNpZGViYXItbGluay1sYWJlbFwiPnt7IGl0ZW0ubGFiZWwgfX08L3NwYW4+XG4gICAgICAgIDwvYT5cbiAgICAgIDwvbGk+XG4gICAgICB9IEBlbXB0eSB7XG4gICAgICA8bGkgY2xhc3M9XCJzaWRlYmFyLWVtcHR5XCI+TWVudSBkaSBuYXZpZ2F6aW9uZSB2dW90byE8L2xpPlxuICAgICAgfVxuICAgICAgPGxpIGNsYXNzPVwic2lkZWJhci1wcm9maWxlLW1vYmlsZVwiPlxuICAgICAgICA8YSBjbGFzcz1cInNpZGViYXItbGlua1wiIFtjbGFzcy5pcy1hY3RpdmVdPVwiaXNQcm9maWxlTW9kZVwiXG4gICAgICAgICAgKGNsaWNrKT1cIm5hdkl0ZW1TZWxlY3RlZC5lbWl0KCk7IHByb2ZpbGVDbGlja2VkLmVtaXQoKVwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2lkZWJhci1saW5rLWljb25cIj5cbiAgICAgICAgICAgIDxpbWcgc3JjPVwidXNlci1hdmF0YXIucG5nXCIgYWx0PVwiXCI+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2lkZWJhci1saW5rLWxhYmVsXCI+UHJvZmlsbzwvc3Bhbj5cbiAgICAgICAgPC9hPlxuICAgICAgPC9saT5cbiAgICA8L3VsPlxuXG4gIDwvZGl2PlxuPC9hc2lkZT4iLCJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERhdGVQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IE5vdGlmaWNhdGlvbkV2ZW50IH0gZnJvbSAnLi4vLi4vbW9kZWxzL25vdGlmaWNhdGlvbi1ldmVudC5tb2RlbCc7XG5pbXBvcnQgeyBBbGFybVByaW9yaXR5IH0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS9hbGFybS9tb2RlbHMvYWxhcm0tcHJpb3JpdHkuZW51bSc7XG5pbXBvcnQge1xuICBleHRyYWN0UHJpb3JpdHlGcm9tTm90aWZpY2F0aW9uVGl0bGUsXG4gIHN0cmlwUHJpb3JpdHlGcm9tTm90aWZpY2F0aW9uVGl0bGUsXG59IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUvbm90aWZpY2F0aW9uL3V0aWxzL25vdGlmaWNhdGlvbi1wcmlvcml0eS1kaXNwbGF5LnV0aWwnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtbm90aWZpY2F0aW9uLXRvcGJhci1wYW5lbC1jb21wb25lbnQnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaW1wb3J0czogW0RhdGVQaXBlXSxcbiAgdGVtcGxhdGVVcmw6ICcuL25vdGlmaWNhdGlvbi10b3BiYXItcGFuZWwtY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vbm90aWZpY2F0aW9uLXRvcGJhci1wYW5lbC1jb21wb25lbnQuY3NzJyxcbn0pXG5leHBvcnQgY2xhc3MgTm90aWZpY2F0aW9uVG9wYmFyUGFuZWxDb21wb25lbnQge1xuICBASW5wdXQoKSBub3RpZmljYXRpb25zOiBSZWFkb25seUFycmF5PE5vdGlmaWNhdGlvbkV2ZW50PiA9IFtdO1xuICBAT3V0cHV0KCkgdmlld0FsbENsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSBub3RpZmljYXRpb25TZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICBAT3V0cHV0KCkgcmVtb3ZlQ2xpY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICBAT3V0cHV0KCkgY2xlYXJBbGxDbGlja2VkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgbWF4VmlzaWJsZU5vdGlmaWNhdGlvbnMgPSA2O1xuXG4gIHB1YmxpYyBnZXQgdmlzaWJsZU5vdGlmaWNhdGlvbnMoKTogUmVhZG9ubHlBcnJheTxOb3RpZmljYXRpb25FdmVudD4ge1xuICAgIHJldHVybiB0aGlzLm5vdGlmaWNhdGlvbnMuc2xpY2UoMCwgdGhpcy5tYXhWaXNpYmxlTm90aWZpY2F0aW9ucyk7XG4gIH1cblxuICBwdWJsaWMgb25Ob3RpZmljYXRpb25TZWxlY3RlZChub3RpZmljYXRpb25JZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5ub3RpZmljYXRpb25TZWxlY3RlZC5lbWl0KG5vdGlmaWNhdGlvbklkKTtcbiAgfVxuXG4gIHB1YmxpYyBvblJlbW92ZShub3RpZmljYXRpb25JZDogc3RyaW5nLCBldmVudD86IEV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQ/LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMucmVtb3ZlQ2xpY2tlZC5lbWl0KG5vdGlmaWNhdGlvbklkKTtcbiAgfVxuXG4gIHB1YmxpYyBvbkNsZWFyQWxsKCk6IHZvaWQge1xuICAgIHRoaXMuY2xlYXJBbGxDbGlja2VkLmVtaXQoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRQcmlvcml0eShub3RpZmljYXRpb246IE5vdGlmaWNhdGlvbkV2ZW50KTogQWxhcm1Qcmlvcml0eSB8IG51bGwge1xuICAgIHJldHVybiBleHRyYWN0UHJpb3JpdHlGcm9tTm90aWZpY2F0aW9uVGl0bGUobm90aWZpY2F0aW9uLnRpdGxlKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXREaXNwbGF5VGl0bGUobm90aWZpY2F0aW9uOiBOb3RpZmljYXRpb25FdmVudCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHN0cmlwUHJpb3JpdHlGcm9tTm90aWZpY2F0aW9uVGl0bGUobm90aWZpY2F0aW9uLnRpdGxlKSB8fCBub3RpZmljYXRpb24udGl0bGU7XG4gIH1cblxuICBwdWJsaWMgZ2V0UHJpb3JpdHlTeW1ib2wocHJpb3JpdHk6IEFsYXJtUHJpb3JpdHkpOiBzdHJpbmcge1xuICAgIHN3aXRjaCAocHJpb3JpdHkpIHtcbiAgICAgIGNhc2UgQWxhcm1Qcmlvcml0eS5XSElURTpcbiAgICAgICAgcmV0dXJuICdpJztcbiAgICAgIGNhc2UgQWxhcm1Qcmlvcml0eS5HUkVFTjpcbiAgICAgICAgcmV0dXJuICdcXHUyMDIyJztcbiAgICAgIGNhc2UgQWxhcm1Qcmlvcml0eS5PUkFOR0U6XG4gICAgICAgIHJldHVybiAnISc7XG4gICAgICBjYXNlIEFsYXJtUHJpb3JpdHkuUkVEOlxuICAgICAgICByZXR1cm4gJ1xcdTI1YjInO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRQcmlvcml0eUJ1YmJsZUNsYXNzKHByaW9yaXR5OiBBbGFybVByaW9yaXR5KTogc3RyaW5nIHtcbiAgICBzd2l0Y2ggKHByaW9yaXR5KSB7XG4gICAgICBjYXNlIEFsYXJtUHJpb3JpdHkuV0hJVEU6XG4gICAgICAgIHJldHVybiAnYm9yZGVyLXNsYXRlLTQwMCB0ZXh0LXNsYXRlLTcwMCc7XG4gICAgICBjYXNlIEFsYXJtUHJpb3JpdHkuR1JFRU46XG4gICAgICAgIHJldHVybiAnYm9yZGVyLWVtZXJhbGQtNTAwIHRleHQtZW1lcmFsZC03MDAnO1xuICAgICAgY2FzZSBBbGFybVByaW9yaXR5Lk9SQU5HRTpcbiAgICAgICAgcmV0dXJuICdib3JkZXItYW1iZXItNTAwIHRleHQtYW1iZXItNzAwJztcbiAgICAgIGNhc2UgQWxhcm1Qcmlvcml0eS5SRUQ6XG4gICAgICAgIHJldHVybiAnYm9yZGVyLXJvc2UtNTAwIHRleHQtcm9zZS03MDAnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdib3JkZXItc2xhdGUtNDAwIHRleHQtc2xhdGUtNzAwJztcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0UHJpb3JpdHlTeW1ib2xDbGFzcyhwcmlvcml0eTogQWxhcm1Qcmlvcml0eSk6IHN0cmluZyB7XG4gICAgc3dpdGNoIChwcmlvcml0eSkge1xuICAgICAgY2FzZSBBbGFybVByaW9yaXR5LldISVRFOlxuICAgICAgICByZXR1cm4gJ3RleHQtc2xhdGUtNjAwJztcbiAgICAgIGNhc2UgQWxhcm1Qcmlvcml0eS5HUkVFTjpcbiAgICAgICAgcmV0dXJuICd0ZXh0LWVtZXJhbGQtNjAwJztcbiAgICAgIGNhc2UgQWxhcm1Qcmlvcml0eS5PUkFOR0U6XG4gICAgICAgIHJldHVybiAndGV4dC1hbWJlci02MDAnO1xuICAgICAgY2FzZSBBbGFybVByaW9yaXR5LlJFRDpcbiAgICAgICAgcmV0dXJuICd0ZXh0LXJvc2UtNjAwJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAndGV4dC1zbGF0ZS02MDAnO1xuICAgIH1cbiAgfVxufVxuIiwiPHNlY3Rpb24gY2xhc3M9XCJub3RpZmljYXRpb24tdG9wYmFyLXBhbmVsXCIgYXJpYS1sYWJlbD1cIk5vdGlmaWNoZSByZWNlbnRpXCI+XG4gIDxoZWFkZXIgY2xhc3M9XCJub3RpZmljYXRpb24tdG9wYmFyLXBhbmVsX19oZWFkZXJcIj5cbiAgICA8aDI+Tm90aWZpY2hlPC9oMj5cbiAgICA8ZGl2IGNsYXNzPVwibm90aWZpY2F0aW9uLXRvcGJhci1wYW5lbF9fYWN0aW9uc1wiPlxuICAgICAgQGlmICh2aXNpYmxlTm90aWZpY2F0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cIm5vdGlmaWNhdGlvbi10b3BiYXItcGFuZWxfX2NsZWFyLWFsbFwiIChjbGljayk9XCJvbkNsZWFyQWxsKClcIj5cbiAgICAgICAgQ2FuY2VsbGEgdHV0dGVcbiAgICAgIDwvYnV0dG9uPlxuICAgICAgfVxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJub3RpZmljYXRpb24tdG9wYmFyLXBhbmVsX192aWV3LWFsbFwiIChjbGljayk9XCJ2aWV3QWxsQ2xpY2tlZC5lbWl0KClcIj5cbiAgICAgICAgVmVkaSB0dXR0ZVxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvaGVhZGVyPlxuXG4gIEBpZiAodmlzaWJsZU5vdGlmaWNhdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gIDxwIGNsYXNzPVwibm90aWZpY2F0aW9uLXRvcGJhci1wYW5lbF9fZW1wdHlcIj5OZXNzdW5hIG5vdGlmaWNhIGRpc3BvbmliaWxlLjwvcD5cbiAgfSBAZWxzZSB7XG4gIDx1bCBjbGFzcz1cIm5vdGlmaWNhdGlvbi10b3BiYXItcGFuZWxfX2xpc3RcIj5cbiAgICBAZm9yIChub3RpZmljYXRpb24gb2YgdmlzaWJsZU5vdGlmaWNhdGlvbnM7IHRyYWNrIG5vdGlmaWNhdGlvbi5ub3RpZmljYXRpb25JZCkge1xuICAgIDxsaSBjbGFzcz1cIm5vdGlmaWNhdGlvbi10b3BiYXItcGFuZWxfX2l0ZW1cIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJub3RpZmljYXRpb24tdG9wYmFyLXBhbmVsX19pdGVtLWhlYWRlclwiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgY2xhc3M9XCJub3RpZmljYXRpb24tdG9wYmFyLXBhbmVsX19vcGVuXCJcbiAgICAgICAgICAoY2xpY2spPVwib25Ob3RpZmljYXRpb25TZWxlY3RlZChub3RpZmljYXRpb24ubm90aWZpY2F0aW9uSWQpXCJcbiAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidBcHJpIG5vdGlmaWNhOiAnICsgZ2V0RGlzcGxheVRpdGxlKG5vdGlmaWNhdGlvbilcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibm90aWZpY2F0aW9uLXRvcGJhci1wYW5lbF9fdGl0bGUtd3JhcFwiPlxuICAgICAgICAgICAgQGlmIChnZXRQcmlvcml0eShub3RpZmljYXRpb24pOyBhcyBub3RpZmljYXRpb25Qcmlvcml0eSkge1xuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJub3RpZmljYXRpb24tdG9wYmFyLXBhbmVsX19wcmlvcml0eSBpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEuNVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgIGNsYXNzPVwibm90aWZpY2F0aW9uLXRvcGJhci1wYW5lbF9fcHJpb3JpdHktYmFkZ2UgaW5saW5lLWZsZXggaC01IG1pbi13LTUgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHJvdW5kZWQtZnVsbCBib3JkZXIgYmctd2hpdGUgcHgtMSB0ZXh0LVsxMXB4XSBmb250LWJvbGRcIlxuICAgICAgICAgICAgICAgIFtjbGFzc109XCJnZXRQcmlvcml0eUJ1YmJsZUNsYXNzKG5vdGlmaWNhdGlvblByaW9yaXR5KVwiPlxuICAgICAgICAgICAgICAgIHt7IG5vdGlmaWNhdGlvblByaW9yaXR5IH19XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICBjbGFzcz1cIm5vdGlmaWNhdGlvbi10b3BiYXItcGFuZWxfX3ByaW9yaXR5LXN5bWJvbCB0ZXh0LXNtIGZvbnQtYm9sZCBsZWFkaW5nLW5vbmVcIlxuICAgICAgICAgICAgICAgIFtjbGFzc109XCJnZXRQcmlvcml0eVN5bWJvbENsYXNzKG5vdGlmaWNhdGlvblByaW9yaXR5KVwiPlxuICAgICAgICAgICAgICAgIHt7IGdldFByaW9yaXR5U3ltYm9sKG5vdGlmaWNhdGlvblByaW9yaXR5KSB9fVxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA8cCBjbGFzcz1cIm5vdGlmaWNhdGlvbi10b3BiYXItcGFuZWxfX3RpdGxlXCI+e3sgZ2V0RGlzcGxheVRpdGxlKG5vdGlmaWNhdGlvbikgfX08L3A+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPHRpbWUgY2xhc3M9XCJub3RpZmljYXRpb24tdG9wYmFyLXBhbmVsX190aW1lXCIgW2F0dHIuZGF0ZXRpbWVdPVwibm90aWZpY2F0aW9uLnNlbnRBdFwiPlxuICAgICAgICAgICAge3sgbm90aWZpY2F0aW9uLnNlbnRBdCB8IGRhdGU6ICdkZC9NTS95eXl5IEhIOm1tOnNzJyB9fVxuICAgICAgICAgIDwvdGltZT5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBjbGFzcz1cIm5vdGlmaWNhdGlvbi10b3BiYXItcGFuZWxfX3JlbW92ZVwiXG4gICAgICAgICAgKGNsaWNrKT1cIm9uUmVtb3ZlKG5vdGlmaWNhdGlvbi5ub3RpZmljYXRpb25JZCwgJGV2ZW50KVwiXG4gICAgICAgICAgYXJpYS1sYWJlbD1cIlJpbXVvdmkgbm90aWZpY2FcIlxuICAgICAgICA+XG4gICAgICAgICAgPHN2ZyBjbGFzcz1cIm5vdGlmaWNhdGlvbi10b3BiYXItcGFuZWxfX3JlbW92ZS1pY29uXCIgZmlsbD1cIm5vbmVcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgICAgICAgICAgPHBhdGggc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgZD1cIk02IDE4TDE4IDZNNiA2bDEyIDEyXCIgLz5cbiAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2xpPlxuICAgIH1cbiAgPC91bD5cbiAgfVxuPC9zZWN0aW9uPlxuIiwiaW1wb3J0IHsgQ29tcG9uZW50LCBpbmplY3QsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBPbkRlc3Ryb3ksIE9uSW5pdCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIEVsZW1lbnRSZWYsIFZpZXdDaGlsZCwgQWZ0ZXJWaWV3SW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmF2SXRlbSB9IGZyb20gJy4uLy4uL2NvcmUvbW9kZWxzL25hdi1pdGVtLm1vZGVsJztcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QsIHRha2UsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgTmF2U2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvbmF2LnNlcnZpY2UnO1xuaW1wb3J0IHsgSW50ZXJuYWxBdXRoU2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvc2VydmljZXMvaW50ZXJuYWwtYXV0aC5zZXJ2aWNlJztcbmltcG9ydCB7IEFsYXJtU3RhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS9hbGFybS9zZXJ2aWNlcy9hbGFybS1zdGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IFRvcGJhckNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy90b3BiYXIvdG9wYmFyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTaWRlYmFyQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3NpZGViYXIvc2lkZWJhci5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFVzZXJSb2xlIH0gZnJvbSAnLi4vLi4vY29yZS9tb2RlbHMvdXNlci1yb2xlLmVudW0nO1xuaW1wb3J0IHsgUm91dGVyLCBSb3V0ZXJPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgVXNlckluZm8gfSBmcm9tICcuLi8uLi9jb3JlL21vZGVscy91c2VyLWluZm8ubW9kZWwnO1xuaW1wb3J0IHsgTm90aWZpY2F0aW9uRXZlbnQgfSBmcm9tICcuLi9ub3RpZmljYXRpb24vbW9kZWxzL25vdGlmaWNhdGlvbi1ldmVudC5tb2RlbCc7XG5pbXBvcnQgeyBOb3RpZmljYXRpb25Ub3BiYXJQYW5lbENvbXBvbmVudCB9IGZyb20gJy4uL25vdGlmaWNhdGlvbi9jb21wb25lbnRzL25vdGlmaWNhdGlvbi10b3BiYXItcGFuZWwtY29tcG9uZW50L25vdGlmaWNhdGlvbi10b3BiYXItcGFuZWwtY29tcG9uZW50JztcbmltcG9ydCB7IE15VmltYXJBY2NvdW50IH0gZnJvbSAnLi4vbXktdmltYXItaW50ZWdyYXRpb24vbW9kZWxzL215LXZpbWFyLWFjY291bnQubW9kZWwnO1xuaW1wb3J0IHsgSVZpbWFyQ2xvdWRBcGlTZXJ2aWNlLCBWSU1BUl9DTE9VRF9BUElfU0VSVklDRSB9IGZyb20gJy4uLy4uL2NvcmUvc2VydmljZXMvdmltYXItY2xvdWQtYXBpLnNlcnZpY2UuaW50ZXJmYWNlJztcbmltcG9ydCB7IEFsYXJtTWFuYWdlbWVudFJlZnJlc2hTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS9hbGFybS9zZXJ2aWNlcy9hbGFybS1tYW5hZ2VtZW50LXJlZnJlc2guc2VydmljZSc7XG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2FwcC1tYWluLWxheW91dCcsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIENvbW1vbk1vZHVsZSxcbiAgICAgICAgUm91dGVyT3V0bGV0LFxuICAgICAgICBUb3BiYXJDb21wb25lbnQsXG4gICAgICAgIE5vdGlmaWNhdGlvblRvcGJhclBhbmVsQ29tcG9uZW50LFxuICAgICAgICBTaWRlYmFyQ29tcG9uZW50XG4gICAgXSxcbiAgICB0ZW1wbGF0ZVVybDogJy4vbWFpbi1sYXlvdXQuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsOiAnLi9tYWluLWxheW91dC5jb21wb25lbnQuY3NzJ1xufSlcbmV4cG9ydCBjbGFzcyBNYWluTGF5b3V0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXQge1xuICAgIEBWaWV3Q2hpbGQoJ3RvcGJhclJlZicsIHsgcmVhZDogRWxlbWVudFJlZiB9KSB0b3BiYXJSZWYhOiBFbGVtZW50UmVmO1xuICAgIHB1YmxpYyBpc0NvbGxhcHNlZDogYm9vbGVhbiA9IHRydWU7XG4gICAgcHVibGljIG5hdkl0ZW1zITogTmF2SXRlbVtdO1xuICAgIHB1YmxpYyBpc1Byb2ZpbGVQYW5lbE9wZW4gPSBmYWxzZTtcbiAgICBwdWJsaWMgaXNBZG1pbiA9IGZhbHNlO1xuICAgIHB1YmxpYyBpc1ZpbWFyU3RhdHVzTG9hZGluZyA9IGZhbHNlO1xuICAgIHB1YmxpYyB2aW1hclN0YXR1c0Vycm9yID0gJyc7XG4gICAgcHVibGljIHZpbWFyQWNjb3VudDogTXlWaW1hckFjY291bnQgfCBudWxsID0gbnVsbDtcbiAgICBwdWJsaWMgc2hvd1ZpbWFyQXNzb2NpYXRpb25XYXJuaW5nID0gZmFsc2U7XG4gICAgcHVibGljIGlzTm90aWZpY2F0aW9uUGFuZWxPcGVuID0gZmFsc2U7XG4gICAgcHVibGljIHJlYWx0aW1lVG9hc3RNZXNzYWdlOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgICBwdWJsaWMgcmVhbHRpbWVUb2FzdEtpbmQ6ICdhbGVydCcgfCAnc3VjY2VzcycgPSAnYWxlcnQnO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBuYXZTZXJ2aWNlID0gaW5qZWN0KE5hdlNlcnZpY2UpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgaW50ZXJuYWxBdXRoU2VydmljZSA9IGluamVjdChJbnRlcm5hbEF1dGhTZXJ2aWNlKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGFsYXJtU3RhdGVTZXJ2aWNlID0gaW5qZWN0KEFsYXJtU3RhdGVTZXJ2aWNlKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGFsYXJtTWFuYWdlbWVudFJlZnJlc2hTZXJ2aWNlID0gaW5qZWN0KEFsYXJtTWFuYWdlbWVudFJlZnJlc2hTZXJ2aWNlKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgbXlWaW1hclNlcnZpY2UgPSBpbmplY3QoVklNQVJfQ0xPVURfQVBJX1NFUlZJQ0UsIHsgb3B0aW9uYWw6IHRydWUgfSkgYXMgSVZpbWFyQ2xvdWRBcGlTZXJ2aWNlIHwgbnVsbDtcbiAgICBwdWJsaWMgcmVhZG9ubHkgdW5yZWFkTm90aWZpY2F0aW9uc0NvdW50JCA9IHRoaXMuYWxhcm1TdGF0ZVNlcnZpY2UuZ2V0VW5yZWFkTm90aWZpY2F0aW9uc0NvdW50JCgpO1xuICAgIHB1YmxpYyByZWFkb25seSBub3RpZmljYXRpb25zJDogT2JzZXJ2YWJsZTxOb3RpZmljYXRpb25FdmVudFtdPiA9IHRoaXMuYWxhcm1TdGF0ZVNlcnZpY2UuZ2V0Tm90aWZpY2F0aW9ucyQoKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNkciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG4gICAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gICAgcHJpdmF0ZSB0b2FzdFRpbWVyOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiB8IG51bGwgPSBudWxsO1xuICAgIHByaXZhdGUgbGF0ZXN0UmVhbHRpbWVOb3RpZmljYXRpb25JZDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgICBwdWJsaWMgY3VycmVudFVzZXI6IFVzZXJJbmZvID0ge1xuICAgICAgICB1c2VybmFtZTogJycsXG4gICAgICAgIGZpcnN0TmFtZTogJycsXG4gICAgICAgIGxhc3ROYW1lOiAnJyxcbiAgICAgICAgcm9sZTogVXNlclJvbGUuT1BFUkFUT1JFX1NBTklUQVJJT1xuICAgIH07XG5cbiAgICBwdWJsaWMgYWN0aXZlQWxhcm1Db3VudCQ6IE9ic2VydmFibGU8bnVtYmVyPiA9IHRoaXMuYWxhcm1TdGF0ZVNlcnZpY2UuZ2V0QWN0aXZlQWxhcm1zQ291bnQkKCk7XG4gICAgcHJpdmF0ZSByZXNpemVPYnNlcnZlciE6IFJlc2l6ZU9ic2VydmVyO1xuXG5cbiAgICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuYmluZFJlYWx0aW1lQWxhcm1Ob3RpZmljYXRpb25zKCk7XG5cbiAgICAgICAgdGhpcy5pbnRlcm5hbEF1dGhTZXJ2aWNlXG4gICAgICAgICAgICAuZ2V0Q3VycmVudFVzZXIkKClcbiAgICAgICAgICAgIC5waXBlKHRha2UoMSksIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHNlc3Npb24pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXNlc3Npb24pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5uYXZJdGVtcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICB2b2lkIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL2F1dGgvbG9naW4nXSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRVc2VyID0ge1xuICAgICAgICAgICAgICAgICAgICB1c2VybmFtZTogc2Vzc2lvbi51c2VybmFtZSxcbiAgICAgICAgICAgICAgICAgICAgZmlyc3ROYW1lOiBzZXNzaW9uLnVzZXJuYW1lLFxuICAgICAgICAgICAgICAgICAgICBsYXN0TmFtZTogJycsXG4gICAgICAgICAgICAgICAgICAgIHJvbGU6IHNlc3Npb24ucm9sZSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHRoaXMuaXNBZG1pbiA9IHNlc3Npb24ucm9sZSA9PT0gVXNlclJvbGUuQU1NSU5JU1RSQVRPUkU7XG4gICAgICAgICAgICAgICAgdGhpcy5uYXZJdGVtcyA9IHRoaXMubmF2U2VydmljZS5nZXROYXZJdGVtcyhzZXNzaW9uLnJvbGUpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNBZG1pbikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRWaW1hclN0YXR1cygpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHR5cGVvZiBSZXNpemVPYnNlcnZlciA9PT0gJ3VuZGVmaW5lZCcgfHwgIXRoaXMudG9wYmFyUmVmPy5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKGVudHJpZXMgPT4ge1xuICAgICAgICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaCA9IGVudHJ5LmNvbnRlbnRSZWN0LmhlaWdodDtcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tdG9wYmFyLWhlaWdodCcsIGAke2h9cHhgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLnRvcGJhclJlZi5uYXRpdmVFbGVtZW50KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xuICAgICAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gICAgICAgIHRoaXMuY2xlYXJUb2FzdFRpbWVyKCk7XG4gICAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXI/LmRpc2Nvbm5lY3QoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdG9nZ2xlU2lkZWJhcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pc0NvbGxhcHNlZCA9ICF0aGlzLmlzQ29sbGFwc2VkO1xuICAgIH1cblxuICAgIHB1YmxpYyB0b2dnbGVQcm9maWxlUGFuZWwoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2xvc2VOb3RpZmljYXRpb25QYW5lbCgpO1xuICAgICAgICB0aGlzLmlzUHJvZmlsZVBhbmVsT3BlbiA9ICF0aGlzLmlzUHJvZmlsZVBhbmVsT3BlbjtcblxuICAgICAgICBpZiAodGhpcy5pc1Byb2ZpbGVQYW5lbE9wZW4gJiYgdGhpcy5pc0FkbWluKSB7XG4gICAgICAgICAgICB0aGlzLmxvYWRWaW1hclN0YXR1cygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGNsb3NlUHJvZmlsZVBhbmVsKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmlzUHJvZmlsZVBhbmVsT3BlbiA9IGZhbHNlO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbk5hdkl0ZW1TZWxlY3RlZChyb3V0ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2xvc2VQcm9maWxlUGFuZWwoKTtcbiAgICAgICAgdGhpcy5jbG9zZU5vdGlmaWNhdGlvblBhbmVsKCk7XG5cbiAgICAgICAgaWYgKHJvdXRlICE9PSAnYWxhcm1zL2FsYXJtLW1hbmFnZW1lbnQnKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMucm91dGVyLnVybC5pbmNsdWRlcygnL2FsYXJtcy9hbGFybS1tYW5hZ2VtZW50JykpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYWxhcm1NYW5hZ2VtZW50UmVmcmVzaFNlcnZpY2UucmVxdWVzdFJlZnJlc2goKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ29Ub1ZpbWFyTGluaygpOiB2b2lkIHtcbiAgICAgICAgdm9pZCB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy92aW1hci1saW5rJ10pO1xuICAgIH1cblxuICAgIHB1YmxpYyB0b2dnbGVOb3RpZmljYXRpb25QYW5lbCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jbG9zZVByb2ZpbGVQYW5lbCgpO1xuICAgICAgICB0aGlzLmlzTm90aWZpY2F0aW9uUGFuZWxPcGVuID0gIXRoaXMuaXNOb3RpZmljYXRpb25QYW5lbE9wZW47XG4gICAgfVxuXG4gICAgcHVibGljIGNsb3NlTm90aWZpY2F0aW9uUGFuZWwoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXNOb3RpZmljYXRpb25QYW5lbE9wZW4gPSBmYWxzZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb3Blbk5vdGlmaWNhdGlvbnNBcmNoaXZlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNsb3NlTm90aWZpY2F0aW9uUGFuZWwoKTtcbiAgICAgICAgdm9pZCB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9ub3RpZmljYXRpb25zJ10pO1xuICAgIH1cblxuICAgIHB1YmxpYyBvcGVuTm90aWZpY2F0aW9uc0FyY2hpdmVGcm9tUHJldmlldyhub3RpZmljYXRpb25JZDogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2xvc2VOb3RpZmljYXRpb25QYW5lbCgpO1xuXG4gICAgICAgIHZvaWQgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvbm90aWZpY2F0aW9ucyddLCB7XG4gICAgICAgICAgICBxdWVyeVBhcmFtczogeyBmb2N1czogbm90aWZpY2F0aW9uSWQgfSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbW92ZVRvcGJhck5vdGlmaWNhdGlvbihub3RpZmljYXRpb25JZDogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHRoaXMuYWxhcm1TdGF0ZVNlcnZpY2UucmVtb3ZlTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbklkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2xlYXJUb3BiYXJOb3RpZmljYXRpb25zKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmFsYXJtU3RhdGVTZXJ2aWNlLmNsZWFyTm90aWZpY2F0aW9ucygpO1xuICAgIH1cblxuICAgIHB1YmxpYyBsb2dvdXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2xvc2VOb3RpZmljYXRpb25QYW5lbCgpO1xuICAgICAgICB0aGlzLmludGVybmFsQXV0aFNlcnZpY2UubG9nb3V0RnJvbUJhY2tlbmQoKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdm9pZCB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9hdXRoL2xvZ2luJ10pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2FuT3BlblByb2ZpbGVQYW5lbCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBiaW5kUmVhbHRpbWVBbGFybU5vdGlmaWNhdGlvbnMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuYWxhcm1TdGF0ZVNlcnZpY2VcbiAgICAgICAgICAgIC5nZXROb3RpZmljYXRpb25zJCgpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChub3RpZmljYXRpb25zKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGF0ZXN0ID0gbm90aWZpY2F0aW9uc1swXTtcbiAgICAgICAgICAgICAgICBpZiAoIWxhdGVzdCB8fCBsYXRlc3Qubm90aWZpY2F0aW9uSWQgPT09IHRoaXMubGF0ZXN0UmVhbHRpbWVOb3RpZmljYXRpb25JZCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5sYXRlc3RSZWFsdGltZU5vdGlmaWNhdGlvbklkID0gbGF0ZXN0Lm5vdGlmaWNhdGlvbklkO1xuICAgICAgICAgICAgICAgIHRoaXMub3BlblJlYWx0aW1lTm90aWZpY2F0aW9uUGFuZWwoKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgb3BlblJlYWx0aW1lTm90aWZpY2F0aW9uUGFuZWwoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2xlYXJUb2FzdFRpbWVyKCk7XG4gICAgICAgIHRoaXMucmVhbHRpbWVUb2FzdE1lc3NhZ2UgPSBudWxsO1xuICAgICAgICB0aGlzLmNsb3NlUHJvZmlsZVBhbmVsKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuaXNOb3RpZmljYXRpb25QYW5lbE9wZW4pIHtcbiAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5pc05vdGlmaWNhdGlvblBhbmVsT3BlbiA9IHRydWU7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2hvd1JlYWx0aW1lVG9hc3QobWVzc2FnZTogc3RyaW5nLCBraW5kOiAnYWxlcnQnIHwgJ3N1Y2Nlc3MnKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2xlYXJUb2FzdFRpbWVyKCk7XG4gICAgICAgIHRoaXMucmVhbHRpbWVUb2FzdE1lc3NhZ2UgPSBtZXNzYWdlO1xuICAgICAgICB0aGlzLnJlYWx0aW1lVG9hc3RLaW5kID0ga2luZDtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG5cbiAgICAgICAgdGhpcy50b2FzdFRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJlYWx0aW1lVG9hc3RNZXNzYWdlID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgdGhpcy50b2FzdFRpbWVyID0gbnVsbDtcbiAgICAgICAgfSwgNTAwMCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjbGVhclRvYXN0VGltZXIoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy50b2FzdFRpbWVyKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy50b2FzdFRpbWVyKTtcbiAgICAgICAgdGhpcy50b2FzdFRpbWVyID0gbnVsbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGxvYWRWaW1hclN0YXR1cygpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLm15VmltYXJTZXJ2aWNlKSB7XG4gICAgICAgICAgICB0aGlzLnZpbWFyQWNjb3VudCA9IHsgZW1haWw6ICcnLCBpc0xpbmtlZDogZmFsc2UgfTtcbiAgICAgICAgICAgIHRoaXMudmltYXJTdGF0dXNFcnJvciA9ICdTZXJ2aXppbyBNeVZpbWFyIG5vbiBkaXNwb25pYmlsZSBpbiBxdWVzdGEgc2V6aW9uZS4nO1xuICAgICAgICAgICAgdGhpcy5pc1ZpbWFyU3RhdHVzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5zaG93VmltYXJBc3NvY2lhdGlvbldhcm5pbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5pc1ZpbWFyU3RhdHVzTG9hZGluZyA9IHRydWU7XG4gICAgICAgIHRoaXMudmltYXJTdGF0dXNFcnJvciA9ICcnO1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcblxuICAgICAgICB0aGlzLm15VmltYXJTZXJ2aWNlLmdldExpbmtlZEFjY291bnQoKS5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgbmV4dDogKGFjY291bnQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnZpbWFyQWNjb3VudCA9IGFjY291bnQ7XG4gICAgICAgICAgICAgICAgdGhpcy5pc1ZpbWFyU3RhdHVzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuc2hvd1ZpbWFyQXNzb2NpYXRpb25XYXJuaW5nID0gdGhpcy5jYW5PcGVuUHJvZmlsZVBhbmVsKCkgJiYgIWFjY291bnQuaXNMaW5rZWQ7XG4gICAgICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnZpbWFyQWNjb3VudCA9IHsgZW1haWw6ICcnLCBpc0xpbmtlZDogZmFsc2UgfTtcbiAgICAgICAgICAgICAgICB0aGlzLnZpbWFyU3RhdHVzRXJyb3IgPSAnSW1wb3NzaWJpbGUgcmVjdXBlcmFyZSBsbyBzdGF0byBkZWwgY29sbGVnYW1lbnRvIE15VmltYXIuJztcbiAgICAgICAgICAgICAgICB0aGlzLmlzVmltYXJTdGF0dXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5zaG93VmltYXJBc3NvY2lhdGlvbldhcm5pbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxufSIsIjwhLS0gdGVtcG9yYW5lbyBwZXIgZmFyIHZpc3VhbGl6emFyZSBsYSB0b3BiYXIgYW5jaGUgc2VuemEgdXRlbnRlIHZlcm8gXG4gVE8gREVMRVRFLS0+XG48YXBwLXRvcGJhciAjdG9wYmFyUmVmIGNsYXNzPVwiYmxvY2sgcmVsYXRpdmUgei02MFwiIFt1c2VyXT1cImN1cnJlbnRVc2VyXCIgW2lzUHJvZmlsZUFjdGl2ZV09XCJpc1Byb2ZpbGVQYW5lbE9wZW5cIlxuICAgIFtpc05vdGlmaWNhdGlvbkFjdGl2ZV09XCJpc05vdGlmaWNhdGlvblBhbmVsT3BlblwiXG4gICAgW3VucmVhZE5vdGlmaWNhdGlvbnNDb3VudF09XCIodW5yZWFkTm90aWZpY2F0aW9uc0NvdW50JCB8IGFzeW5jKSA/PyAwXCJcbiAgICBbc2hvd1ZpbWFyV2FybmluZ109XCJzaG93VmltYXJBc3NvY2lhdGlvbldhcm5pbmdcIiAoaGFtYnVyZ2VyQ2xpY2tlZCk9XCJ0b2dnbGVTaWRlYmFyKClcIlxuICAgIChwcm9maWxlQ2xpY2tlZCk9XCJ0b2dnbGVQcm9maWxlUGFuZWwoKVwiIChub3RpZmljYXRpb25DbGlja2VkKT1cInRvZ2dsZU5vdGlmaWNhdGlvblBhbmVsKClcIiAobG9nb3V0Q2xpY2tlZCk9XCJsb2dvdXQoKVwiPlxuPC9hcHAtdG9wYmFyPlxuXG5AaWYgKGlzTm90aWZpY2F0aW9uUGFuZWxPcGVuKSB7XG48YXBwLW5vdGlmaWNhdGlvbi10b3BiYXItcGFuZWwtY29tcG9uZW50IFtub3RpZmljYXRpb25zXT1cIihub3RpZmljYXRpb25zJCB8IGFzeW5jKSA/PyBbXVwiXG4gICAgKHZpZXdBbGxDbGlja2VkKT1cIm9wZW5Ob3RpZmljYXRpb25zQXJjaGl2ZSgpXCJcbiAgICAobm90aWZpY2F0aW9uU2VsZWN0ZWQpPVwib3Blbk5vdGlmaWNhdGlvbnNBcmNoaXZlRnJvbVByZXZpZXcoJGV2ZW50KVwiXG4gICAgKHJlbW92ZUNsaWNrZWQpPVwicmVtb3ZlVG9wYmFyTm90aWZpY2F0aW9uKCRldmVudClcIlxuICAgIChjbGVhckFsbENsaWNrZWQpPVwiY2xlYXJUb3BiYXJOb3RpZmljYXRpb25zKClcIj48L2FwcC1ub3RpZmljYXRpb24tdG9wYmFyLXBhbmVsLWNvbXBvbmVudD5cbn1cblxuQGlmIChyZWFsdGltZVRvYXN0TWVzc2FnZSkge1xuPGRpdiBjbGFzcz1cIm1haW4tbGF5b3V0X19yZWFsdGltZS10b2FzdFwiIFtjbGFzcy5tYWluLWxheW91dF9fcmVhbHRpbWUtdG9hc3QtLXN1Y2Nlc3NdPVwicmVhbHRpbWVUb2FzdEtpbmQgPT09ICdzdWNjZXNzJ1wiPlxuICAgIDxwPnt7IHJlYWx0aW1lVG9hc3RNZXNzYWdlIH19PC9wPlxuPC9kaXY+XG59XG5cbjxkaXYgY2xhc3M9XCJmbGV4IGgtWzg3dmhdIG92ZXJmbG93LWhpZGRlblwiPlxuXG4gICAgPGFwcC1zaWRlYmFyIGNsYXNzPVwiYmxvY2sgaC1mdWxsXCIgW25hdkl0ZW1zXT1cIm5hdkl0ZW1zXCIgW2lzQ29sbGFwc2VkXT1cImlzQ29sbGFwc2VkXCJcbiAgICAgICAgW2lzUHJvZmlsZU1vZGVdPVwiaXNQcm9maWxlUGFuZWxPcGVuXCIgKGNvbGxhcHNlZCk9XCJ0b2dnbGVTaWRlYmFyKClcIlxuICAgICAgICAobmF2SXRlbVNlbGVjdGVkKT1cImNsb3NlUHJvZmlsZVBhbmVsKCk7IGlzQ29sbGFwc2VkID0gdHJ1ZVwiIFtjYW5PcGVuUHJvZmlsZV09XCJjYW5PcGVuUHJvZmlsZVBhbmVsKClcIlxuICAgICAgICAocHJvZmlsZUNsaWNrZWQpPVwidG9nZ2xlUHJvZmlsZVBhbmVsKClcIiAobG9nb3V0Q2xpY2tlZCk9XCJsb2dvdXQoKVwiXG4gICAgICAgIChuYXZJdGVtU2VsZWN0ZWQpPVwiY2xvc2VQcm9maWxlUGFuZWwoKTsgaXNDb2xsYXBzZWQgPSB0cnVlXCI+XG4gICAgPC9hcHAtc2lkZWJhcj5cblxuICAgIDxtYWluIGNsYXNzPVwicmVsYXRpdmUgZmxleC0xIG1pbi13LTAgbWF4LXctZnVsbCBvdmVyZmxvdy15LWF1dG8gcC02IGJnLXNsYXRlLTUwXCI+XG4gICAgICAgIEBpZiAoaXNQcm9maWxlUGFuZWxPcGVuKSB7XG4gICAgICAgIDxzZWN0aW9uIGNsYXNzPVwiaC1mdWxsIHctZnVsbFwiPlxuICAgICAgICAgICAgPGFydGljbGVcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm14LWF1dG8gZmxleCBoLWZ1bGwgdy1mdWxsIG1heC13LTV4bCBmbGV4LWNvbCBnYXAtOCByb3VuZGVkLTN4bCBib3JkZXIgYm9yZGVyLXNsYXRlLTIwMCBiZy13aGl0ZSBwLTYgc2hhZG93LVswXzIycHhfNTBweF9yZ2JhKDE1LDIzLDQyLDAuMTIpXSBzbTpwLThcIj5cbiAgICAgICAgICAgICAgICA8aGVhZGVyIGNsYXNzPVwiZmxleCBmbGV4LXdyYXAgaXRlbXMtc3RhcnQganVzdGlmeS1iZXR3ZWVuIGdhcC00IGJvcmRlci1iIGJvcmRlci1zbGF0ZS0yMDAgcGItNVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LXhzIGZvbnQtYm9sZCB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMTJlbV0gdGV4dC1hbWJlci02MDBcIj5BcmVhIFV0ZW50ZTwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxoMiBjbGFzcz1cIm10LTIgdGV4dC0yeGwgZm9udC1zZW1pYm9sZCB0ZXh0LXNsYXRlLTkwMFwiPnt7IGN1cnJlbnRVc2VyLmZpcnN0TmFtZSB9fSB7e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRVc2VyLmxhc3ROYW1lIH19PC9oMj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibXQtMiB0ZXh0LXNtIHRleHQtc2xhdGUtNjAwXCI+VXNlcm5hbWU6IHt7IGN1cnJlbnRVc2VyLnVzZXJuYW1lIH19PC9wPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICBAaWYgKGlzQWRtaW4pIHtcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgcm91bmRlZC14bCBib3JkZXIgYm9yZGVyLWFtYmVyLTMwMCBiZy1hbWJlci0zMDAgcHgtNCBweS0yLjUgdGV4dC1zbSBmb250LXNlbWlib2xkIHRleHQtc2xhdGUtOTAwIHRyYW5zaXRpb24gaG92ZXI6YmctYW1iZXItMjAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJnb1RvVmltYXJMaW5rKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIFZhaSBhIE15VmltYXJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L2hlYWRlcj5cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkIGdhcC01IGxnOmdyaWQtY29scy0yXCI+XG4gICAgICAgICAgICAgICAgICAgIEBpZiAoaXNBZG1pbikge1xuICAgICAgICAgICAgICAgICAgICA8c2VjdGlvbiBjbGFzcz1cInJvdW5kZWQtMnhsIGJvcmRlciBib3JkZXItc2xhdGUtMjAwIGJnLXNsYXRlLTUwIHAtNVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LXhzIGZvbnQtc2VtaWJvbGQgdXBwZXJjYXNlIHRyYWNraW5nLVswLjFlbV0gdGV4dC1zbGF0ZS01MDBcIj5TdGF0byBDb2xsZWdhbWVudG9cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cblxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChpc1ZpbWFyU3RhdHVzTG9hZGluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtdC0zIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1zbGF0ZS02MDBcIj5DYXJpY2FtZW50byBzdGF0byBhY2NvdW50Li4uPC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYgKCFpc1ZpbWFyU3RhdHVzTG9hZGluZyAmJiB2aW1hclN0YXR1c0Vycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm10LTMgcm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLXJlZC0yMDAgYmctcmVkLTUwIHB4LTMgcHktMiB0ZXh0LXNtIHRleHQtcmVkLTcwMFwiPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmltYXJTdGF0dXNFcnJvciB9fTwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmICghaXNWaW1hclN0YXR1c0xvYWRpbmcgJiYgIXZpbWFyU3RhdHVzRXJyb3IgJiYgdmltYXJBY2NvdW50Py5pc0xpbmtlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibXQtMyByb3VuZGVkLWxnIGJvcmRlciBib3JkZXItZW1lcmFsZC0yMDAgYmctZW1lcmFsZC01MCBweC0zIHB5LTIgdGV4dC1zbSB0ZXh0LWVtZXJhbGQtNzAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgVXRlbnRlIGNvbGxlZ2F0b3t7IHZpbWFyQWNjb3VudD8uZW1haWwgPyAnOiAnICsgdmltYXJBY2NvdW50Py5lbWFpbCA6ICcnIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmICghaXNWaW1hclN0YXR1c0xvYWRpbmcgJiYgIXZpbWFyU3RhdHVzRXJyb3IgJiYgIXZpbWFyQWNjb3VudD8uaXNMaW5rZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm10LTMgcm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLWFtYmVyLTIwMCBiZy1hbWJlci01MCBweC0zIHB5LTIgdGV4dC1zbSB0ZXh0LWFtYmVyLTcwMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjY291bnQgbm9uIGFuY29yYSBjb2xsZWdhdG8uXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJyb3VuZGVkLTJ4bCBib3JkZXIgYm9yZGVyLXNsYXRlLTIwMCBiZy1zbGF0ZS01MCBwLTVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidGV4dC14cyBmb250LXNlbWlib2xkIHVwcGVyY2FzZSB0cmFja2luZy1bMC4xZW1dIHRleHQtc2xhdGUtNTAwXCI+U2Vzc2lvbmU8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm10LTMgdGV4dC1zbSB0ZXh0LXNsYXRlLTcwMFwiPkdlc3Rpc2NpIHJhcGlkYW1lbnRlIGxhIHNlc3Npb25lIHV0ZW50ZSBkYWxsJ2FyZWFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9maWxvLjwvcD5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgYXJpYS1sYWJlbD1cIkVzY2kgZGFsIHByb2ZpbG9cIiAoY2xpY2spPVwibG9nb3V0KClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgbXQtNSBpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTMgcm91bmRlZC14bCBib3JkZXIgYm9yZGVyLXJlZC0yMDAgYmctcmVkLTUwIHB4LTQgcHktMi41IHRleHQtc20gZm9udC1zZW1pYm9sZCB0ZXh0LXJlZC02MDAgdHJhbnNpdGlvbiBob3Zlcjpib3JkZXItcmVkLTMwMCBob3ZlcjpiZy1yZWQtMTAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9XCJsb2dvdXQucG5nXCIgYWx0PVwiXCIgY2xhc3M9XCJoLTUgdy01XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgRXNjaVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvYXJ0aWNsZT5cbiAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgPHJvdXRlci1vdXRsZXQ+PC9yb3V0ZXItb3V0bGV0PlxuICAgICAgICB9XG4gICAgPC9tYWluPlxuXG48L2Rpdj4iXSwibWFwcGluZ3MiOiI7ZytCQUtBLEdBQWEsQ0FBQUEsRUFBQSxFQUFBQyxhQUFBLEdBQUFDLENBQUEsT0FBVSxLQUFBRCxhQUFBLEdBQUFFLENBQUEsTUFBakIsS0FBTyxDQUFBQyxDQUFVLENBQ1pDLFlBQVlDLENBQUEsQ0FBYyxDQUFBTCxhQUFBLEdBQUFFLENBQUEsTUFFN0IsR0FBTSxDQUFBSSxDQUFBLEVBQUFOLGFBQUEsR0FBQUMsQ0FBQSxNQUEwQixDQUM1QixDQUNJTSxLQUFBLENBQU8sWUFDUEMsSUFBQSxDQUFNLGdCQUNOQyxLQUFBLENBQU8sYUFFWCxDQUNJRixLQUFBLENBQU8sWUFDUEMsSUFBQSxDQUFNLG1CQUNOQyxLQUFBLENBQU8saUJBRVgsQ0FDSUYsS0FBQSxDQUFPLGNBQ1BDLElBQUEsQ0FBTSxhQUNOQyxLQUFBLENBQU8scUJBRVgsQ0FDSUYsS0FBQSxDQUFPLG1CQUNQQyxJQUFBLENBQU0sdUJBQ05DLEtBQUEsQ0FBTywyQkFFWCxDQUNJRixLQUFBLENBQU8sa0JBQ1BDLElBQUEsQ0FBTSxvQkFDTkMsS0FBQSxDQUFPLHdCQUVYLENBQ0lGLEtBQUEsQ0FBTyx5QkFDUEMsSUFBQSxDQUFNLDBCQUNOQyxLQUFBLENBQU8sNkJBQ1BDLFlBQUEsQ0FBY0MsQ0FBQSxDQUFTQyxjQUFBLEVBRTNCLENBQ0lMLEtBQUEsQ0FBTyxZQUNQQyxJQUFBLENBQU0sZ0JBQ05DLEtBQUEsQ0FBTyxhQUVYLENBQ0lGLEtBQUEsQ0FBTyxtQkFDUEMsSUFBQSxDQUFNLHNCQUNOQyxLQUFBLENBQU8sa0JBQ1BDLFlBQUEsQ0FBY0MsQ0FBQSxDQUFTQyxjQUFBLEVBRTNCLENBQ0lMLEtBQUEsQ0FBTyxrQkFDUEMsSUFBQSxDQUFNLHNCQUNOQyxLQUFBLENBQU8sa0JBQ1BDLFlBQUEsQ0FBY0MsQ0FBQSxDQUFTQyxjQUFBLENBQzFCLEdBR0RDLENBQUEsRUFBQWIsYUFBQSxHQUFBQyxDQUFBLE1BQWVLLENBQUEsRUFDbkJOLGFBQUEsR0FBQUMsQ0FBQSxZQUFHLENBQUFELGFBQUEsR0FBQWMsQ0FBQSxTQUFBVCxDQUFBLEdBQVNNLENBQUEsQ0FBU0ksbUJBQUEsSUFBQWYsYUFBQSxHQUFBYyxDQUFBLFNBQ2pCRCxDQUFBLENBQWVQLENBQUEsQ0FBWVUsTUFBQSxDQUFPZixDQUFBLEVBQUssQ0FBQUQsYUFBQSxHQUFBRSxDQUFBLEtBQUFGLENBQUEsZ0JBQUFDLENBQUEsYUFBQ0EsQ0FBQSxDQUFFUyxZQUFZLENBQVosQ0FBWSxHQUVuREcsQ0FDWCxTQUFBSSxJQUFBLEVBQUFqQixhQUFBLEdBQUFDLENBQUEsZUFBQUssQ0FBQSxFQUFBTixhQUFBLEdBQUFFLENBQUEsS0FBQUYsQ0FBQSxnQkFBQUMsQ0FBQSxrQkFBQUQsYUFBQSxHQUFBYyxDQUFBLFNBQUFSLENBQUEsSUFBQU4sYUFBQSxHQUFBYyxDQUFBLFNBM0RTWCxDQUFBLElBQVUsV0FBQWUsS0FBQSxFQUFBbEIsYUFBQSxHQUFBQyxDQUFBLE1BQUFrQixDQUFBLEVBQUFDLEtBQUEsQ0FBVmpCLENBQUEsQ0FBVWtCLE9BQUEsQ0FBVmxCLENBQUEsQ0FBVWMsSUFBQSxDQUFBSyxVQUFBLENBREcsTUFBTSxLQUFBdEIsYUFBQSxHQUFBQyxDQUFBLFlBQ25CLENBQUFFLENBQVUsT0NNdkIsR0FBYSxDQUFBb0IsRUFBQSxFQUFBdkIsYUFBQSxHQUFBQyxDQUFBLE9BQWlCLEtBQUFELGFBQUEsR0FBQUUsQ0FBQSxNQUF4QixLQUFPLENBQUFDLENBQWlCLENBR0dxQixNQUFBLENBQWlDQyxjQUFBLENBRjlEQyxZQUFBLENBRUFDLFlBQTZCdEIsQ0FBQSxDQUFpQ0MsQ0FBQSxDQUE4QixDQUFBTixhQUFBLEdBQUFFLENBQUEsS0FBQUYsQ0FBQSxnQkFBQUMsQ0FBQSxPQUEvRCxLQUFBdUIsTUFBQSxDQUFBbkIsQ0FBQSxDQUFpQyxLQUFBb0IsY0FBQSxDQUFBbkIsQ0FBQSxDQUMxRCxLQUFLb0IsWUFBQSxDQUFlLEtBQUtGLE1BQUEsQ0FBT0ksTUFBQSxDQUFPQyxJQUFBLENBQ25DQyxDQUFBLENBQU9qQixDQUFBLEVBQUssQ0FBQWIsYUFBQSxHQUFBRSxDQUFBLEtBQUFGLENBQUEsZ0JBQUFDLENBQUEsY0FBQVksQ0FBQSxXQUFhLENBQUFrQixFQUFhLENBQWIsQ0FBYSxFQUN0Q0MsQ0FBQSxDQUFVLElBQUksRUFDZEMsQ0FBQSxDQUFJLElBQU0sQ0FBQWpDLGFBQUEsR0FBQUUsQ0FBQSxLQUFBRixDQUFBLGdCQUFBQyxDQUFBLG1CQUFLaUMsZ0JBQUEsQ0FBaUIsS0FBS1QsY0FBQSxDQUFlVSxJQUFJLENBQUMsQ0FBRCxDQUFDLENBQUMsQ0FFbEUsRUFFUUQsaUJBQ0o3QixDQUFBLENBQ0FDLENBQUEsRUFBQU4sYUFBQSxHQUFBYyxDQUFBLFNBQU0sSUFDTkQsQ0FBQSxFQUFBYixhQUFBLEdBQUFjLENBQUEsU0FBdUIsSUFBRSxDQUFBZCxhQUFBLEdBQUFFLENBQUEsS0FBQUYsQ0FBQSxnQkFBQUMsQ0FBQSxPQUV6QixPQUFXLENBQUFBLENBQUEsR0FBUyxDQUFBSSxDQUFBLENBQU0rQixRQUFBLENBQVUsQ0FDaEMsR0FBTSxDQUFBQyxDQUFBLEVBQUFyQyxhQUFBLEdBQUFDLENBQUEsT0FBVUEsQ0FBQSxDQUFNcUMsUUFBQSxDQUFTQyxHQUFBLENBQUlDLEdBQUEsQ0FBSUMsRUFBQSxFQUFLLENBQUF6QyxhQUFBLEdBQUFFLENBQUEsS0FBQUYsQ0FBQSxnQkFBQUMsQ0FBQSxjQUFBd0MsRUFBQSxDQUFFQyxJQUFJLENBQUosQ0FBSSxFQUFFQyxJQUFBLENBQUssR0FBRyxHQUN0REMsQ0FBQSxFQUFBNUMsYUFBQSxHQUFBQyxDQUFBLE9BQVVvQyxDQUFBLEVBQUFyQyxhQUFBLEdBQUFjLENBQUEsU0FBVSxHQUFHUixDQUFHLElBQUkrQixDQUFPLEtBQUFyQyxhQUFBLEdBQUFjLENBQUEsU0FBS1IsQ0FBQSxHQUMxQ3VDLENBQUEsRUFBQTdDLGFBQUEsR0FBQUMsQ0FBQSxPQUFRQSxDQUFBLENBQU1xQyxRQUFBLENBQVNRLElBQUEsQ0FBS0MsVUFBQSxFQUU5Qi9DLGFBQUEsR0FBQUMsQ0FBQSxRQUFBRCxhQUFBLEdBQUFjLENBQUEsU0FBQStCLENBQUEsSUFBQTdDLGFBQUEsR0FBQWMsQ0FBQSxTQUFTdUIsQ0FBQSxJQUFBckMsYUFBQSxHQUFBYyxDQUFBLFNBQ1RELENBQUEsQ0FBT21DLElBQUEsQ0FBSyxDQUFFekMsS0FBQSxDQUFBc0MsQ0FBQSxDQUFPTixHQUFBLENBQUtLLENBQU8sQ0FBRSxHQUd2QyxLQUFLVixnQkFBQSxDQUFpQmpDLENBQUEsQ0FBTzJDLENBQUEsQ0FBUy9CLENBQU0sQ0FDaEQsRUFFQWIsYUFBQSxHQUFBQyxDQUFBLGFBQU8sQ0FBQVksQ0FDWCxTQUFBSSxJQUFBLEVBQUFqQixhQUFBLEdBQUFDLENBQUEsZ0JBQUFLLENBQUEsRUFBQU4sYUFBQSxHQUFBRSxDQUFBLE1BQUFGLENBQUEsZ0JBQUFDLENBQUEsbUJBQUFELGFBQUEsR0FBQWMsQ0FBQSxTQUFBUixDQUFBLElBQUFOLGFBQUEsR0FBQWMsQ0FBQSxTQTdCU1gsQ0FBQSxHQUFpQjhDLENBQUEsQ0FBQUMsQ0FBQSxFQUFBRCxDQUFBLENBQUFFLEVBQUEsYUFBQWpDLEtBQUEsRUFBQWxCLGFBQUEsR0FBQUMsQ0FBQSxPQUFBa0IsQ0FBQSxFQUFBQyxLQUFBLENBQWpCakIsQ0FBQSxDQUFpQmtCLE9BQUEsQ0FBakJsQixDQUFBLENBQWlCYyxJQUFBLENBQUFLLFVBQUEsQ0FESixNQUFNLEtBQUF0QixhQUFBLEdBQUFDLENBQUEsYUFDbkIsQ0FBQUUsQ0FBaUIsT0FBQUgsYUFBQSxHQUFBQyxDQUFBLFdBQUFtRCxFQUFBLENBQUFBLENBQUFqRCxDQUFBLENBQUFrRCxDQUFBLElBQUFyRCxhQUFBLEdBQUFFLENBQUEsTUFBQUYsQ0FBQSxnQkFBQUMsQ0FBQSxjQUFBb0QsQ0FBQSxDQUFBZCxHQUFBLFlBQUFlLEdBQUFuRCxDQUFBLENBQUFrRCxDQUFBLEVBQUFyRCxhQUFBLEdBQUFFLENBQUEsTUFBQUYsQ0FBQSxnQkFBQUMsQ0FBQSxXQUFBRCxhQUFBLEdBQUFjLENBQUEsU0FBQVgsQ0FBQSxNQUFBSCxhQUFBLEdBQUFjLENBQUEsU0VDRnlDLENBQUEsV0FBeURDLENBQUEsSUFBaUJDLENBQUEsR0FDMUVGLENBQUEsY0FBeUJDLENBQUEsUUFBQ0MsQ0FBQSxJQUFBdEQsQ0FBQSxJQUFBSCxhQUFBLEdBQUFjLENBQUEsYUFBQVQsQ0FBQSxFQUFBTCxhQUFBLEdBQUFDLENBQUEsT0FBQXlELENBQUEsR0FBQUMsU0FBQSxFQUR2QjNELGFBQUEsR0FBQUMsQ0FBQSxPQUFBMkQsQ0FBQSxjQUFBdkQsQ0FBQSxDQUFBa0MsR0FBQSxFQUFzRHNCLENBQUEsR0FBQUMsQ0FBQSxDQUFBekQsQ0FBQSxDQUFBRSxLQUFBLFFBQUFQLGFBQUEsR0FBQWMsQ0FBQSxvQkFBQWlELEdBQUE1RCxDQUFBLENBQUFrRCxDQUFBLEVBQUFyRCxhQUFBLEdBQUFFLENBQUEsTUFBQUYsQ0FBQSxnQkFBQUMsQ0FBQSxXQUFBRCxhQUFBLEdBQUFjLENBQUEsVUFBQVgsQ0FBQSxNQUFBSCxhQUFBLEdBQUFjLENBQUEsVUFHekR5QyxDQUFBLGNBQTRCQyxDQUFBLElBQWlCQyxDQUFBLElBQUF0RCxDQUFBLElBQUFILGFBQUEsR0FBQWMsQ0FBQSxhQUFBVCxDQUFBLEVBQUFMLGFBQUEsR0FBQUMsQ0FBQSxPQUFBeUQsQ0FBQSxHQUFBQyxTQUFBLEVBQWpCM0QsYUFBQSxHQUFBQyxDQUFBLE9BQUE0RCxDQUFBLEdBQUFDLENBQUEsQ0FBQXpELENBQUEsQ0FBQUUsS0FBQSxRQUFBUCxhQUFBLEdBQUFjLENBQUEsb0JBQUFrRCxHQUFBN0QsQ0FBQSxDQUFBa0QsQ0FBQSxFQUFBckQsYUFBQSxHQUFBRSxDQUFBLE1BQUFGLENBQUEsZ0JBQUFDLENBQUEsV0FBQUQsYUFBQSxHQUFBYyxDQUFBLFVBQUFYLENBQUEsTUFBQUgsYUFBQSxHQUFBYyxDQUFBLFVBTGhDeUMsQ0FBQSxXQUNJVSxDQUFBLEdBQUFYLEVBQUEsTUFBYSxFQUFBUyxFQUFBLGdCQU1qQk4sQ0FBQSxJQUFBdEQsQ0FBQSxJQUFBSCxhQUFBLEdBQUFjLENBQUEsY0FBQVQsQ0FBQSxFQUFBTCxhQUFBLEdBQUFDLENBQUEsT0FBQW9ELENBQUEsQ0FBQWEsTUFBQSxFQUFBNUQsQ0FBQSxFQUFBTixhQUFBLEdBQUFDLENBQUEsT0FBQW9ELENBQUEsQ0FBQWMsTUFBQSxFQU5JbkUsYUFBQSxHQUFBQyxDQUFBLE9BQUE0RCxDQUFBLEdBQUFPLENBQUEsQ0FBQS9ELENBQUEsR0FBQUMsQ0FBQSxJQUFBTixhQUFBLEdBQUFjLENBQUEsY0FBQWQsYUFBQSxHQUFBYyxDQUFBLG9CQUFBZCxhQUFBLEdBQUFjLENBQUEscUJBQUF1RCxHQUFBbEUsQ0FBQSxDQUFBa0QsQ0FBQSxFQUFBckQsYUFBQSxHQUFBRSxDQUFBLE1BQUFGLENBQUEsZ0JBQUFDLENBQUEsV0FBQUQsYUFBQSxHQUFBYyxDQUFBLFVBQUFYLENBQUEsTUFBQUgsYUFBQSxHQUFBYyxDQUFBLFVBa0JaeUMsQ0FBQSxjQUNJQyxDQUFBLElBQ0pDLENBQUEsSUFBQXRELENBQUEsSUFBQUgsYUFBQSxHQUFBYyxDQUFBLGNBQUFULENBQUEsRUFBQUwsYUFBQSxHQUFBQyxDQUFBLE9BQUF5RCxDQUFBLElBREkxRCxhQUFBLEdBQUFDLENBQUEsT0FBQTRELENBQUEsR0FBQVMsQ0FBQSxLQUFBakUsQ0FBQSxDQUFBa0Usd0JBQUEsS0FBQXZFLGFBQUEsR0FBQWMsQ0FBQSxrQkFBQWQsYUFBQSxHQUFBYyxDQUFBLFVBQUFULENBQUEsQ0FBQWtFLHdCQUFBLGFBQUF2RSxhQUFBLEdBQUFjLENBQUEscUJBQUEwRCxHQUFBckUsQ0FBQSxDQUFBa0QsQ0FBQSxFQUFBckQsYUFBQSxHQUFBRSxDQUFBLE1BQUFGLENBQUEsZ0JBQUFDLENBQUEsUUFBQUQsYUFBQSxHQUFBYyxDQUFBLFVBQUFYLENBQUEsTUFBQUgsYUFBQSxHQUFBYyxDQUFBLFVBZ0JoQnlDLENBQUEsYUFBZ0MsZUFFeEJDLENBQUEsdUNBQ0pDLENBQUEsR0FBUyxJRHBDakIsR0FBYSxDQUFBZ0IsRUFBQSxFQUFBekUsYUFBQSxHQUFBQyxDQUFBLFFBQWUsS0FBQUQsYUFBQSxHQUFBRSxDQUFBLE9BQXRCLEtBQU8sQ0FBQUMsQ0FBZSxDQVlLdUUsaUJBQUEsQ0FYcEJDLElBQUEsQ0FDQUMsZUFBQSxFQUFBNUUsYUFBQSxHQUFBQyxDQUFBLE9BQWtCLElBQ2xCNEUsb0JBQUEsRUFBQTdFLGFBQUEsR0FBQUMsQ0FBQSxPQUF1QixJQUN2QnNFLHdCQUFBLEVBQUF2RSxhQUFBLEdBQUFDLENBQUEsT0FBMkIsR0FDM0I2RSxnQkFBQSxFQUFBOUUsYUFBQSxHQUFBQyxDQUFBLE9BQW1CLElBQ2xCOEUsY0FBQSxFQUFBL0UsYUFBQSxHQUFBQyxDQUFBLE9BQWlCLEdBQUksQ0FBQStFLENBQUEsSUFDckJDLGFBQUEsRUFBQWpGLGFBQUEsR0FBQUMsQ0FBQSxPQUFnQixHQUFJLENBQUErRSxDQUFBLElBQ3BCRSxnQkFBQSxFQUFBbEYsYUFBQSxHQUFBQyxDQUFBLE9BQW1CLEdBQUksQ0FBQStFLENBQUEsSUFDdkJHLG1CQUFBLEVBQUFuRixhQUFBLEdBQUFDLENBQUEsT0FBc0IsR0FBSSxDQUFBK0UsQ0FBQSxJQUNwQ3RELFlBQUEsQ0FFQUMsWUFBNkJ0QixDQUFBLENBQW9DLENBQUFMLGFBQUEsR0FBQUUsQ0FBQSxNQUFBRixDQUFBLGdCQUFBQyxDQUFBLE9BQXBDLEtBQUF5RSxpQkFBQSxDQUFBckUsQ0FBQSxDQUN6QixLQUFLcUIsWUFBQSxDQUFlLEtBQUtnRCxpQkFBQSxDQUFrQmhELFlBQy9DLEVBRU8wRCxvQkFBQSxDQUFtQixDQUFBcEYsYUFBQSxHQUFBRSxDQUFBLE1BQUFGLENBQUEsZ0JBQUFDLENBQUEsT0FDdEIsS0FBS2tGLG1CQUFBLENBQW9CRSxJQUFBLENBQUksQ0FDakMsRUFFT0MsZUFBQSxDQUFjLENBQUF0RixhQUFBLEdBQUFFLENBQUEsTUFBQUYsQ0FBQSxnQkFBQUMsQ0FBQSxPQUNqQixLQUFLOEUsY0FBQSxDQUFlTSxJQUFBLENBQUksQ0FDNUIsU0FBQXBFLElBQUEsRUFBQWpCLGFBQUEsR0FBQUMsQ0FBQSxnQkFBQUssQ0FBQSxFQUFBTixhQUFBLEdBQUFFLENBQUEsTUFBQUYsQ0FBQSxnQkFBQUMsQ0FBQSxtQkFBQUQsYUFBQSxHQUFBYyxDQUFBLFVBQUFSLENBQUEsSUFBQU4sYUFBQSxHQUFBYyxDQUFBLFVBdEJTWCxDQUFBLEdBQWVvRixFQUFBLENBQUFoRSxFQUFBLGFBQUFpRSxJQUFBLEVBQUF4RixhQUFBLEdBQUFDLENBQUEsT0FBQXdGLENBQUEsRUFBQUMsSUFBQSxDQUFmdkYsQ0FBQSxDQUFld0YsU0FBQSxrQkFBQUMsTUFBQSxFQUFBakIsSUFBQSxRQUFBQyxlQUFBLG1CQUFBQyxvQkFBQSx3QkFBQU4sd0JBQUEsNEJBQUFPLGdCQUFBLHFCQUFBZSxPQUFBLEVBQUFkLGNBQUEsa0JBQUFFLGFBQUEsaUJBQUFDLGdCQUFBLG9CQUFBQyxtQkFBQSx3QkFBQVcsS0FBQSxJQUFBQyxJQUFBLElBQUFDLE1BQUEsNDdCQUFBQyxRQUFBLFNBQUFBLENBQUEzRixDQUFBLENBQUFPLENBQUEsRUFBQWIsYUFBQSxHQUFBRSxDQUFBLE1BQUFGLENBQUEsZ0JBQUFDLENBQUEsUUFBQUQsYUFBQSxHQUFBYyxDQUFBLFVBQUFSLENBQUEsTUFBQU4sYUFBQSxHQUFBYyxDQUFBLFVDYjVCeUMsQ0FBQSxnQkFBOEIsV0FDVSxXQUNOLGNBQzZDMkMsQ0FBQSxvQkFBQWxHLGFBQUEsR0FBQUUsQ0FBQSxNQUFBRixDQUFBLGdCQUFBQyxDQUFBLGFBQVMsQ0FBQVksQ0FBQSxDQUFBcUUsZ0JBQUEsQ0FBQUcsSUFBQSxFQUF1QixJQUFFN0IsQ0FBQSxhQUFDQyxDQUFBLEdBQ3RHMEMsQ0FBQSxZQUNBNUMsQ0FBQSxVQUFLLFVBQ3dCQyxDQUFBLGdCQUFTQyxDQUFBLEdBQ2xDRixDQUFBLFlBQXVELFdBRS9DNkMsQ0FBQSxJQUFBcEMsRUFBQSxZQUFBWixFQUFBLEVBQUFpRCxDQUFBLGFBVUo1QyxDQUFBLEdBQUssRUFDSCxFQUNKLEVBR1ZGLENBQUEsYUFBNEIsZ0JBRXBCMkMsQ0FBQSxvQkFBQWxHLGFBQUEsR0FBQUUsQ0FBQSxNQUFBRixDQUFBLGdCQUFBQyxDQUFBLGFBQVMsQ0FBQVksQ0FBQSxDQUFBdUUsbUJBQUEsRUFBcUIsSUFDOUJlLENBQUEsY0FDQWxDLENBQUEsSUFBQUksRUFBQSxnQkFLSlosQ0FBQSxHQUVBRixDQUFBLGlCQUFnRDJDLENBQUEsb0JBQUFsRyxhQUFBLEdBQUFFLENBQUEsTUFBQUYsQ0FBQSxnQkFBQUMsQ0FBQSxhQUFTLENBQUFZLENBQUEsQ0FBQXlFLGNBQUEsRUFBZ0IsSUFJckVhLENBQUEsY0FBd0QsYUFFNUQxQyxDQUFBLEdBQVMsRUFDUCxFQUdWUSxDQUFBLElBQUFPLEVBQUEsZUFRSmYsQ0FBQSxLQUFBekQsYUFBQSxHQUFBYyxDQUFBLFVBQUFSLENBQUEsTUFBQU4sYUFBQSxHQUFBYyxDQUFBLFVBNUN3QitDLENBQUEsS0FBQXlDLENBQUEsQ0FBQUMsQ0FBQSxNQUFBMUYsQ0FBQSxDQUFBYSxZQUFBLEdBaUJ3Qm1DLENBQUEsSUFBQTJDLENBQUEsdUJBQUEzRixDQUFBLENBQUFnRSxvQkFBQSxFQUVoQ2hCLENBQUEsSUFBQU8sQ0FBQSxDQUFBdkQsQ0FBQSxDQUFBMEQsd0JBQUEsSUFBQXZFLGFBQUEsR0FBQWMsQ0FBQSxlQUFBZCxhQUFBLEdBQUFjLENBQUEsZUFTQStDLENBQUEsR0FBQTJDLENBQUEsa0JBQUEzRixDQUFBLENBQUErRCxlQUFBLEVBQXdDLGVBQUEvRCxDQUFBLENBQUErRCxlQUFBLEVBUXBEZixDQUFBLElBQUFPLENBQUEsQ0FBQXZELENBQUEsQ0FBQWlFLGdCQUFBLEVBQUE5RSxhQUFBLEdBQUFjLENBQUEsZUFBQWQsYUFBQSxHQUFBYyxDQUFBLGtCQUFBMkYsWUFBQSxFRG5Db0JDLEVBQUEsQ0FBWUMsQ0FBQSxDQUF2QkMsQ0FBUyxFQUFBQyxNQUFBOzBEQUFBLE1BQUE3RyxhQUFBLEdBQUFDLENBQUEsYUFHVCxDQUFBRSxDQUFlLE9BQUFILGFBQUEsR0FBQUMsQ0FBQSxXQUFBNkcsRUFBQSxDQUFBQSxDQUFBM0csQ0FBQSxDQUFBa0QsQ0FBQSxJQUFBckQsYUFBQSxHQUFBRSxDQUFBLE1BQUFGLENBQUEsZ0JBQUFDLENBQUEsY0FBQW9ELENBQUEsQ0FBQTlDLEtBQUEsWUFBQXdHLEdBQUE1RyxDQUFBLENBQUFrRCxDQUFBLEVBQUFyRCxhQUFBLEdBQUFFLENBQUEsTUFBQUYsQ0FBQSxnQkFBQUMsQ0FBQSxXQUFBRCxhQUFBLEdBQUFjLENBQUEsVUFBQVgsQ0FBQSxNQUFBSCxhQUFBLEdBQUFjLENBQUEsVUdGaEJxRixDQUFBLGNBQUFoRyxDQUFBLElBQUFILGFBQUEsR0FBQWMsQ0FBQSxjQUFBVCxDQUFBLEVBQUFMLGFBQUEsR0FBQUMsQ0FBQSxPQUFBeUQsQ0FBQSxHQUFBQyxTQUFBLEVBQXNDM0QsYUFBQSxHQUFBQyxDQUFBLE9BQUEyRCxDQUFBLE9BQUF2RCxDQUFBLENBQUFHLElBQUEsQ0FBQXdHLEVBQUEsUUFBQWhILGFBQUEsR0FBQWMsQ0FBQSxxQkFBQW1HLEdBQUE5RyxDQUFBLENBQUFrRCxDQUFBLEVBQUFyRCxhQUFBLEdBQUFFLENBQUEsTUFBQUYsQ0FBQSxnQkFBQUMsQ0FBQSxRQUFBRCxhQUFBLEdBQUFjLENBQUEsVUFBQVgsQ0FBQSxNQUFBSCxhQUFBLEdBQUFjLENBQUEsVUFDZjBDLENBQUEsd0JBQUEwRCxHQUFBL0csQ0FBQSxDQUFBa0QsQ0FBQSxFQUFBckQsYUFBQSxHQUFBRSxDQUFBLE1BQUFGLENBQUEsZ0JBQUFDLENBQUEsVUFBQUUsQ0FBQSxJQUFBSCxhQUFBLEdBQUFjLENBQUEsY0FBQVQsQ0FBQSxFQUFBTCxhQUFBLEdBQUFDLENBQUEsT0FBQWtILENBQUEsSUFON0JuSCxhQUFBLEdBQUFDLENBQUEsT0FBQXNELENBQUEsU0FBSSxZQUdBMkMsQ0FBQSxvQkFBQWxHLGFBQUEsR0FBQUUsQ0FBQSxXQUFBVyxDQUFBLEVBQUFiLGFBQUEsR0FBQUMsQ0FBQSxPQUFBQyxDQUFBLENBQUFHLENBQUEsRUFBQXNELFNBQUEsRUFBQTFELENBQUEsRUFBQUQsYUFBQSxHQUFBQyxDQUFBLE9BQUF5RCxDQUFBLElBQUExRCxhQUFBLEdBQUFDLENBQUEsY0FBQW1ILENBQUEsQ0FBU25ILENBQUEsQ0FBQW9ILGVBQUEsQ0FBQWhDLElBQUEsQ0FBQXhFLENBQUEsQ0FBQUosS0FBQSxDQUFnQyxLQUN6QzhDLENBQUEsYUFDRStELEVBQUEsR0FBQVAsRUFBQSxlQUErRCxFQUFBRSxFQUFBLDBCQUFBTSxFQUFBLEVBRWpFOUQsQ0FBQSxHQUNBRixDQUFBLGNBQWlDQyxDQUFBLElBQWdCQyxDQUFBLEdBQU8sRUFDdEQsUUFBQXpELGFBQUEsR0FBQWMsQ0FBQSxXQUFBZCxhQUFBLEdBQUFDLENBQUEsVUFBQUUsQ0FBQSxJQUFBSCxhQUFBLEdBQUFjLENBQUEsY0FBQVQsQ0FBQSxFQUFBTCxhQUFBLEdBQUFDLENBQUEsT0FBQW9ELENBQUEsQ0FBQU0sU0FBQSxFQUFBckQsQ0FBQSxFQUFBTixhQUFBLEdBQUFDLENBQUEsT0FBQXVILENBQUEsS0FBQTNHLENBQUEsRUFBQWIsYUFBQSxHQUFBQyxDQUFBLE9BQUF1SCxDQUFBLEtBQUF2SCxDQUFBLEVBQUFELGFBQUEsR0FBQUMsQ0FBQSxPQUFBeUQsQ0FBQSxJQVBGMUQsYUFBQSxHQUFBQyxDQUFBLE9BQUE0RCxDQUFBLEdBQUEyQyxDQUFBLGNBQUF4RyxhQUFBLEdBQUFjLENBQUEsV0FBQWIsQ0FBQSxDQUFBd0gsYUFBQSxJQUFBekgsYUFBQSxHQUFBYyxDQUFBLFVBQUFSLENBQUEsQ0FBQW9ILFFBQUEsR0FEQzlELENBQUEsY0FBQXZELENBQUEsQ0FBQUksS0FBQSxFQUlPb0QsQ0FBQSxJQUFBRCxDQUFBLFFBQUF2RCxDQUFBLENBQUFHLElBQUEsRUFBaUIsV0FBQUssQ0FBQSxFQUdRZ0QsQ0FBQSxJQUFBQyxDQUFBLENBQUF6RCxDQUFBLENBQUFFLEtBQUEsUUFBQVAsYUFBQSxHQUFBYyxDQUFBLHFCQUFBNkcsR0FBQXhILENBQUEsQ0FBQWtELENBQUEsRUFBQXJELGFBQUEsR0FBQUUsQ0FBQSxNQUFBRixDQUFBLGdCQUFBQyxDQUFBLFFBQUFELGFBQUEsR0FBQWMsQ0FBQSxVQUFBWCxDQUFBLE1BQUFILGFBQUEsR0FBQWMsQ0FBQSxVQUlyQ3lDLENBQUEsV0FBMEJDLENBQUEsaUNBQTBCQyxDQUFBLEtERjFELEdBQWEsQ0FBQW1FLEVBQUEsRUFBQTVILGFBQUEsR0FBQUMsQ0FBQSxRQUFnQixLQUFBRCxhQUFBLEdBQUFFLENBQUEsT0FBdkIsS0FBTyxDQUFBQyxDQUFnQixDQUNoQjBILFFBQUEsQ0FDQUMsV0FBQSxDQUNBTCxhQUFBLEVBQUF6SCxhQUFBLEdBQUFDLENBQUEsT0FBZ0IsSUFDaEI4SCxjQUFBLEVBQUEvSCxhQUFBLEdBQUFDLENBQUEsT0FBaUIsSUFDaEI4RSxjQUFBLEVBQUEvRSxhQUFBLEdBQUFDLENBQUEsT0FBaUIsR0FBSSxDQUFBK0UsQ0FBQSxJQUNyQmdELFNBQUEsRUFBQWhJLGFBQUEsR0FBQUMsQ0FBQSxPQUFZLEdBQUksQ0FBQStFLENBQUEsSUFDaEJxQyxlQUFBLEVBQUFySCxhQUFBLEdBQUFDLENBQUEsT0FBa0IsR0FBSSxDQUFBK0UsQ0FBQSxXQUFBL0QsSUFBQSxFQUFBakIsYUFBQSxHQUFBQyxDQUFBLGdCQUFBSyxDQUFBLEVBQUFOLGFBQUEsR0FBQUUsQ0FBQSxNQUFBRixDQUFBLGdCQUFBQyxDQUFBLG1CQUFBRCxhQUFBLEdBQUFjLENBQUEsVUFBQVIsQ0FBQSxJQUFBTixhQUFBLEdBQUFjLENBQUEsVUFQdkJYLENBQUEsSUFBZ0IsV0FBQXFGLElBQUEsRUFBQXhGLGFBQUEsR0FBQUMsQ0FBQSxPQUFBd0YsQ0FBQSxFQUFBQyxJQUFBLENBQWhCdkYsQ0FBQSxDQUFnQndGLFNBQUEsbUJBQUFDLE1BQUEsRUFBQWlDLFFBQUEsWUFBQUMsV0FBQSxlQUFBTCxhQUFBLGlCQUFBTSxjQUFBLG1CQUFBbEMsT0FBQSxFQUFBZCxjQUFBLGtCQUFBaUQsU0FBQSxhQUFBWCxlQUFBLG9CQUFBdkIsS0FBQSxJQUFBQyxJQUFBLEdBQUFDLE1BQUEsb2FBQUFDLFFBQUEsU0FBQUEsQ0FBQTNGLENBQUEsQ0FBQU8sQ0FBQSxFQUFBYixhQUFBLEdBQUFFLENBQUEsTUFBQUYsQ0FBQSxnQkFBQUMsQ0FBQSxRQUFBRCxhQUFBLEdBQUFjLENBQUEsVUFBQVIsQ0FBQSxNQUFBTixhQUFBLEdBQUFjLENBQUEsVUNoQjdCeUMsQ0FBQSxjQUE0RCxXQUU3QjJDLENBQUEsb0JBQUFsRyxhQUFBLEdBQUFFLENBQUEsTUFBQUYsQ0FBQSxnQkFBQUMsQ0FBQSxhQUFTLENBQUFZLENBQUEsQ0FBQW1ILFNBQUEsQ0FBQTNDLElBQUEsRUFBZ0IsSUFBRTVCLENBQUEsR0FDeERGLENBQUEsWUFBMkIsVUFFdkI2QyxDQUFBLEdBQUFjLEVBQUEsZUFBQUosRUFBQSxJQUFBYSxFQUFBLGFBZUFwRSxDQUFBLFdBQW1DLFNBRS9CMkMsQ0FBQSxvQkFBQWxHLGFBQUEsR0FBQUUsQ0FBQSxNQUFBRixDQUFBLGdCQUFBQyxDQUFBLE9BQVMsT0FBQVksQ0FBQSxDQUFBd0csZUFBQSxDQUFBaEMsSUFBQSxHQUF3QnhFLENBQUEsQ0FBQWtFLGNBQUEsQ0FBQU0sSUFBQSxFQUFxQixJQUN0RDlCLENBQUEsYUFDRTRDLENBQUEsY0FDRjFDLENBQUEsR0FDQUYsQ0FBQSxlQUFpQ0MsQ0FBQSxlQUFPQyxDQUFBLEdBQU8sRUFDN0MsRUFDRCxFQUNGLEVBRUQsSUFBQXpELGFBQUEsR0FBQWMsQ0FBQSxVQUFBUixDQUFBLE1BQUFOLGFBQUEsR0FBQWMsQ0FBQSxVQS9CcUIwRixDQUFBLFlBQUEzRixDQUFBLENBQUFpSCxXQUFBLEVBS3ZCakUsQ0FBQSxJQUFBeUMsQ0FBQSxDQUFBekYsQ0FBQSxDQUFBZ0gsUUFBQSxFQWdCMEJoRSxDQUFBLElBQUEyQyxDQUFBLGFBQUEzRixDQUFBLENBQUE0RyxhQUFBLEtBQUFoQixZQUFBLEVEWnhCRSxDQUFBLENBQ0FzQixFQUFBLENBQ0FDLENBQUEsQ0FBWUMsRUFBQSxFQUFBdEIsTUFBQTsyREFBQSxNQUFBN0csYUFBQSxHQUFBQyxDQUFBLGFBS1AsQ0FBQUUsQ0FBZ0IsT0FBQUgsYUFBQSxHQUFBQyxDQUFBLFdBQUFtSSxFQUFBLENBQUFBLENBQUFqSSxDQUFBLENBQUFrRCxDQUFBLElBQUFyRCxhQUFBLEdBQUFFLENBQUEsTUFBQUYsQ0FBQSxnQkFBQUMsQ0FBQSxjQUFBb0QsQ0FBQSxDQUFBZ0YsY0FBQSxZQUFBQyxHQUFBbkksQ0FBQSxDQUFBa0QsQ0FBQSxFQUFBckQsYUFBQSxHQUFBRSxDQUFBLE1BQUFGLENBQUEsZ0JBQUFDLENBQUEsVUFBQUUsQ0FBQSxJQUFBSCxhQUFBLEdBQUFjLENBQUEsY0FBQVQsQ0FBQSxFQUFBTCxhQUFBLEdBQUFDLENBQUEsT0FBQWtILENBQUEsSUdYdkJuSCxhQUFBLEdBQUFDLENBQUEsT0FBQWEsQ0FBQSxlQUFtRXlILENBQUEsb0JBQUF2SSxhQUFBLEdBQUFFLENBQUEsTUFBQUYsQ0FBQSxnQkFBQUMsQ0FBQSxPQUFBQyxDQUFBLENBQUFHLENBQUEsTUFBQVEsQ0FBQSxFQUFBYixhQUFBLEdBQUFDLENBQUEsT0FBQXlELENBQUEsSUFBQTFELGFBQUEsR0FBQUMsQ0FBQSxjQUFBbUgsQ0FBQSxDQUFTdkcsQ0FBQSxDQUFBMkgsVUFBQSxFQUFZLEtBQ3RGaEYsQ0FBQSx1QkFDRmlGLENBQUEsU0FBQXpJLGFBQUEsR0FBQWMsQ0FBQSxxQkFBQTRILEdBQUF2SSxDQUFBLENBQUFrRCxDQUFBLEVBQUFyRCxhQUFBLEdBQUFFLENBQUEsTUFBQUYsQ0FBQSxnQkFBQUMsQ0FBQSxTQUFBRCxhQUFBLEdBQUFjLENBQUEsVUFBQVgsQ0FBQSxNQUFBSCxhQUFBLEdBQUFjLENBQUEsVUFTSkEsQ0FBQSxVQUE0QzBDLENBQUEsb0NBQTZCaUYsQ0FBQSxjQUFBRSxHQUFBeEksQ0FBQSxDQUFBa0QsQ0FBQSxFQUFBckQsYUFBQSxHQUFBRSxDQUFBLE1BQUFGLENBQUEsZ0JBQUFDLENBQUEsWUFBQUQsYUFBQSxHQUFBYyxDQUFBLFVBQUFYLENBQUEsTUFBQUgsYUFBQSxHQUFBYyxDQUFBLFVBYS9EQSxDQUFBLGNBQXNHLGFBSWxHMEMsQ0FBQSxJQUNGaUYsQ0FBQSxHQUNBM0gsQ0FBQSxjQUdFMEMsQ0FBQSxJQUNGaUYsQ0FBQSxHQUFPLEdBQUF0SSxDQUFBLElBQUFILGFBQUEsR0FBQWMsQ0FBQSxjQUFBVCxDQUFBLEVBQUFMLGFBQUEsR0FBQUMsQ0FBQSxRQUFBb0QsQ0FBQSxFQUFBL0MsQ0FBQSxFQUFBTixhQUFBLEdBQUFDLENBQUEsUUFBQXlELENBQUEsS0FQTDFELGFBQUEsR0FBQUMsQ0FBQSxRQUFBNEQsQ0FBQSxHQUFBK0UsQ0FBQSxDQUFBdEksQ0FBQSxDQUFBdUksc0JBQUEsQ0FBQXhJLENBQUEsR0FDQXdELENBQUEsR0FBQVMsQ0FBQSxLQUFBakUsQ0FBQSxNQUlBd0QsQ0FBQSxHQUFBK0UsQ0FBQSxDQUFBdEksQ0FBQSxDQUFBd0ksc0JBQUEsQ0FBQXpJLENBQUEsR0FDQXdELENBQUEsR0FBQVMsQ0FBQSxLQUFBaEUsQ0FBQSxDQUFBeUksaUJBQUEsQ0FBQTFJLENBQUEsYUFBQUwsYUFBQSxHQUFBYyxDQUFBLHFCQUFBa0ksR0FBQTdJLENBQUEsQ0FBQWtELENBQUEsRUFBQXJELGFBQUEsR0FBQUUsQ0FBQSxNQUFBRixDQUFBLGdCQUFBQyxDQUFBLFdBQUFFLENBQUEsSUFBQUgsYUFBQSxHQUFBYyxDQUFBLGNBQUFULENBQUEsRUFBQUwsYUFBQSxHQUFBQyxDQUFBLFFBQUFrSCxDQUFBLElBbEJabkgsYUFBQSxHQUFBQyxDQUFBLFFBQUFhLENBQUEsV0FBNEMsV0FDVSxlQUloRHlILENBQUEsb0JBQUF2SSxhQUFBLEdBQUFFLENBQUEsV0FBQVcsQ0FBQSxFQUFBYixhQUFBLEdBQUFDLENBQUEsUUFBQUMsQ0FBQSxDQUFBRyxDQUFBLEVBQUFzRCxTQUFBLEVBQUExRCxDQUFBLEVBQUFELGFBQUEsR0FBQUMsQ0FBQSxRQUFBeUQsQ0FBQSxLQUFBMUQsYUFBQSxHQUFBQyxDQUFBLGVBQUFtSCxDQUFBLENBQVNuSCxDQUFBLENBQUFnSixzQkFBQSxDQUFBcEksQ0FBQSxDQUFBd0gsY0FBQSxDQUFtRCxLQUU1RHZILENBQUEsYUFDRW1ELENBQUEsR0FBQTBFLEVBQUEsZ0JBY0E3SCxDQUFBLFdBQTRDMEMsQ0FBQSxJQUFtQ2lGLENBQUEsR0FBSSxFQUVyRjNILENBQUEsY0FDRTBDLENBQUEsSUFBQTZDLENBQUEsV0FDRm9DLENBQUEsR0FBTyxFQUVUM0gsQ0FBQSxpQkFHRXlILENBQUEsa0JBQUExSCxDQUFBLEVBQUFiLGFBQUEsR0FBQUUsQ0FBQSxXQUFBRCxDQUFBLEVBQUFELGFBQUEsR0FBQUMsQ0FBQSxRQUFBQyxDQUFBLENBQUFHLENBQUEsRUFBQXNELFNBQUEsRUFBQXRCLENBQUEsRUFBQXJDLGFBQUEsR0FBQUMsQ0FBQSxRQUFBeUQsQ0FBQSxLQUFBMUQsYUFBQSxHQUFBQyxDQUFBLGVBQUFtSCxDQUFBLENBQVMvRSxDQUFBLENBQUE2RyxRQUFBLENBQUFqSixDQUFBLENBQUFvSSxjQUFBLENBQUF4SCxDQUFBLENBQTZDLEtBQUFzSSxDQUFBLEdBR3REckksQ0FBQSxjQUNFc0ksRUFBQSxlQUNGWCxDQUFBLEdBQU0sRUFDQyxFQUNMLFFBQUF6SSxhQUFBLEdBQUFjLENBQUEsV0FBQWQsYUFBQSxHQUFBQyxDQUFBLFdBQUFFLENBQUEsSUFBQUgsYUFBQSxHQUFBYyxDQUFBLGNBQUFULENBQUEsQ0FBQUMsQ0FBQSxFQUFBTixhQUFBLEdBQUFDLENBQUEsUUFBQW9ELENBQUEsQ0FBQU0sU0FBQSxFQUFBOUMsQ0FBQSxFQUFBYixhQUFBLEdBQUFDLENBQUEsUUFBQXlELENBQUEsS0FoQ0YxRCxhQUFBLEdBQUFDLENBQUEsUUFBQTRELENBQUEsSUFBQXdGLENBQUEsZ0NBQUF4SSxDQUFBLENBQUF5SSxlQUFBLENBQUFoSixDQUFBLEdBRUV1RCxDQUFBLElBQUFPLENBQUEsRUFBQS9ELENBQUEsQ0FBQVEsQ0FBQSxDQUFBMEksV0FBQSxDQUFBakosQ0FBQSxJQUFBTixhQUFBLEdBQUFjLENBQUEsY0FBQWQsYUFBQSxHQUFBYyxDQUFBLGNBQUFULENBQUEsRUFjNEN3RCxDQUFBLElBQUFDLENBQUEsQ0FBQWpELENBQUEsQ0FBQXlJLGVBQUEsQ0FBQWhKLENBQUEsR0FFQXVELENBQUEsR0FBQXdGLENBQUEsWUFBQS9JLENBQUEsQ0FBQWtKLE1BQUEsRUFDNUMzRixDQUFBLEdBQUFTLENBQUEsS0FBQW1GLEVBQUEsS0FBQW5KLENBQUEsQ0FBQWtKLE1BQUEsbUNBQUF4SixhQUFBLEdBQUFjLENBQUEscUJBQUE0SSxHQUFBdkosQ0FBQSxDQUFBa0QsQ0FBQSxFQUFBckQsYUFBQSxHQUFBRSxDQUFBLE1BQUFGLENBQUEsZ0JBQUFDLENBQUEsWUFBQUQsYUFBQSxHQUFBYyxDQUFBLFVBQUFYLENBQUEsTUFBQUgsYUFBQSxHQUFBYyxDQUFBLFVBM0JWQSxDQUFBLFdBQ0VzRixDQUFBLEdBQUE0QyxFQUFBLGFBQUFaLEVBQUEsRUEwQ0ZLLENBQUEsSUFBQXRJLENBQUEsSUFBQUgsYUFBQSxHQUFBYyxDQUFBLGNBQUFULENBQUEsRUFBQUwsYUFBQSxHQUFBQyxDQUFBLFFBQUF5RCxDQUFBLElBMUNFMUQsYUFBQSxHQUFBQyxDQUFBLFFBQUE0RCxDQUFBLEdBQUF5QyxDQUFBLENBQUFqRyxDQUFBLENBQUFzSixvQkFBQSxRQUFBM0osYUFBQSxHQUFBYyxDQUFBLFlERkosR0FBYSxDQUFBOEksRUFBQSxFQUFBNUosYUFBQSxHQUFBQyxDQUFBLFNBQWdDLEtBQUFELGFBQUEsR0FBQUUsQ0FBQSxPQUF2QyxLQUFPLENBQUFDLENBQWdDLENBQ2xDMEosYUFBQSxFQUFBN0osYUFBQSxHQUFBQyxDQUFBLFFBQWtELElBQ2pENkosY0FBQSxFQUFBOUosYUFBQSxHQUFBQyxDQUFBLFFBQWlCLEdBQUksQ0FBQStFLENBQUEsSUFDckIrRSxvQkFBQSxFQUFBL0osYUFBQSxHQUFBQyxDQUFBLFFBQXVCLEdBQUksQ0FBQStFLENBQUEsSUFDM0JnRixhQUFBLEVBQUFoSyxhQUFBLEdBQUFDLENBQUEsUUFBZ0IsR0FBSSxDQUFBK0UsQ0FBQSxJQUNwQmlGLGVBQUEsRUFBQWpLLGFBQUEsR0FBQUMsQ0FBQSxRQUFrQixHQUFJLENBQUErRSxDQUFBLElBRWZrRix1QkFBQSxFQUFBbEssYUFBQSxHQUFBQyxDQUFBLFFBQTBCLEdBRTNDLEdBQVcsQ0FBQTBKLHFCQUFBLENBQW9CLENBQUEzSixhQUFBLEdBQUFFLENBQUEsTUFBQUYsQ0FBQSxnQkFBQUMsQ0FBQSxRQUM3QixNQUFPLE1BQUs0SixhQUFBLENBQWNNLEtBQUEsQ0FBTSxFQUFHLEtBQUtELHVCQUF1QixDQUNqRSxFQUVPakIsdUJBQXVCNUksQ0FBQSxDQUFzQixDQUFBTCxhQUFBLEdBQUFFLENBQUEsTUFBQUYsQ0FBQSxnQkFBQUMsQ0FBQSxRQUNsRCxLQUFLOEosb0JBQUEsQ0FBcUIxRSxJQUFBLENBQUtoRixDQUFjLENBQy9DLEVBRU82SSxTQUFTN0ksQ0FBQSxDQUF3QkMsQ0FBQSxDQUFhLENBQUFOLGFBQUEsR0FBQUUsQ0FBQSxNQUFBRixDQUFBLGdCQUFBQyxDQUFBLFFBQ25ESyxDQUFBLEVBQU84SixlQUFBLENBQWUsRUFDdEIsS0FBS0osYUFBQSxDQUFjM0UsSUFBQSxDQUFLaEYsQ0FBYyxDQUN4QyxFQUVPbUksV0FBQSxDQUFVLENBQUF4SSxhQUFBLEdBQUFFLENBQUEsTUFBQUYsQ0FBQSxnQkFBQUMsQ0FBQSxRQUNmLEtBQUtnSyxlQUFBLENBQWdCNUUsSUFBQSxDQUFJLENBQzNCLEVBRU9rRSxZQUFZbEosQ0FBQSxDQUErQixDQUFBTCxhQUFBLEdBQUFFLENBQUEsTUFBQUYsQ0FBQSxnQkFBQUMsQ0FBQSxRQUNoRCxNQUFPLENBQUFvSyxFQUFBLENBQXFDaEssQ0FBQSxDQUFhaUssS0FBSyxDQUNoRSxFQUVPaEIsZ0JBQWdCakosQ0FBQSxDQUErQixDQUFBTCxhQUFBLEdBQUFFLENBQUEsTUFBQUYsQ0FBQSxnQkFBQUMsQ0FBQSxRQUNwRCxNQUFPLENBQUFELGFBQUEsR0FBQWMsQ0FBQSxVQUFBeUosRUFBQSxDQUFtQ2xLLENBQUEsQ0FBYWlLLEtBQUssS0FBQXRLLGFBQUEsR0FBQWMsQ0FBQSxVQUFLVCxDQUFBLENBQWFpSyxLQUNoRixHQUVPdkIsa0JBQWtCMUksQ0FBQSxDQUF1QixDQUFBTCxhQUFBLEdBQUFFLENBQUEsTUFBQUYsQ0FBQSxnQkFBQUMsQ0FBQSxRQUM5QyxPQUFRSSxDQUFBLEVBQ04sSUFBSyxDQUFBbUssQ0FBQSxDQUFjQyxLQUFBLENBQUF6SyxhQUFBLEdBQUFjLENBQUEsU0FBQWQsQ0FBQSxnQkFBQUMsQ0FBQSxRQUNqQixNQUFPLElBQ1QsSUFBSyxDQUFBdUssQ0FBQSxDQUFjRSxLQUFBLENBQUExSyxhQUFBLEdBQUFjLENBQUEsU0FBQWQsQ0FBQSxnQkFBQUMsQ0FBQSxRQUNqQixNQUFPLFNBQ1QsSUFBSyxDQUFBdUssQ0FBQSxDQUFjRyxNQUFBLENBQUEzSyxhQUFBLEdBQUFjLENBQUEsU0FBQWQsQ0FBQSxnQkFBQUMsQ0FBQSxRQUNqQixNQUFPLElBQ1QsSUFBSyxDQUFBdUssQ0FBQSxDQUFjSSxHQUFBLENBQUE1SyxhQUFBLEdBQUFjLENBQUEsU0FBQWQsQ0FBQSxnQkFBQUMsQ0FBQSxRQUNqQixNQUFPLFNBQ1QsUUFBQUQsYUFBQSxHQUFBYyxDQUFBLFNBQUFkLENBQUEsZ0JBQUFDLENBQUEsUUFDRSxNQUFPLEVBQ1gsRUFDRixDQUVPNEksdUJBQXVCeEksQ0FBQSxDQUF1QixDQUFBTCxhQUFBLEdBQUFFLENBQUEsTUFBQUYsQ0FBQSxnQkFBQUMsQ0FBQSxRQUNuRCxPQUFRSSxDQUFBLEVBQ04sSUFBSyxDQUFBbUssQ0FBQSxDQUFjQyxLQUFBLENBQUF6SyxhQUFBLEdBQUFjLENBQUEsU0FBQWQsQ0FBQSxnQkFBQUMsQ0FBQSxRQUNqQixNQUFPLGtDQUNULElBQUssQ0FBQXVLLENBQUEsQ0FBY0UsS0FBQSxDQUFBMUssYUFBQSxHQUFBYyxDQUFBLFNBQUFkLENBQUEsZ0JBQUFDLENBQUEsUUFDakIsTUFBTyxzQ0FDVCxJQUFLLENBQUF1SyxDQUFBLENBQWNHLE1BQUEsQ0FBQTNLLGFBQUEsR0FBQWMsQ0FBQSxTQUFBZCxDQUFBLGdCQUFBQyxDQUFBLFFBQ2pCLE1BQU8sa0NBQ1QsSUFBSyxDQUFBdUssQ0FBQSxDQUFjSSxHQUFBLENBQUE1SyxhQUFBLEdBQUFjLENBQUEsU0FBQWQsQ0FBQSxnQkFBQUMsQ0FBQSxRQUNqQixNQUFPLGdDQUNULFFBQUFELGFBQUEsR0FBQWMsQ0FBQSxTQUFBZCxDQUFBLGdCQUFBQyxDQUFBLFFBQ0UsTUFBTyxpQ0FDWCxFQUNGLENBRU82SSx1QkFBdUJ6SSxDQUFBLENBQXVCLENBQUFMLGFBQUEsR0FBQUUsQ0FBQSxNQUFBRixDQUFBLGdCQUFBQyxDQUFBLFFBQ25ELE9BQVFJLENBQUEsRUFDTixJQUFLLENBQUFtSyxDQUFBLENBQWNDLEtBQUEsQ0FBQXpLLGFBQUEsR0FBQWMsQ0FBQSxTQUFBZCxDQUFBLGdCQUFBQyxDQUFBLFFBQ2pCLE1BQU8saUJBQ1QsSUFBSyxDQUFBdUssQ0FBQSxDQUFjRSxLQUFBLENBQUExSyxhQUFBLEdBQUFjLENBQUEsU0FBQWQsQ0FBQSxnQkFBQUMsQ0FBQSxRQUNqQixNQUFPLG1CQUNULElBQUssQ0FBQXVLLENBQUEsQ0FBY0csTUFBQSxDQUFBM0ssYUFBQSxHQUFBYyxDQUFBLFNBQUFkLENBQUEsZ0JBQUFDLENBQUEsUUFDakIsTUFBTyxpQkFDVCxJQUFLLENBQUF1SyxDQUFBLENBQWNJLEdBQUEsQ0FBQTVLLGFBQUEsR0FBQWMsQ0FBQSxTQUFBZCxDQUFBLGdCQUFBQyxDQUFBLFFBQ2pCLE1BQU8sZ0JBQ1QsUUFBQUQsYUFBQSxHQUFBYyxDQUFBLFNBQUFkLENBQUEsZ0JBQUFDLENBQUEsUUFDRSxNQUFPLGdCQUNYLEVBQ0YsUUFBQWdCLElBQUEsRUFBQWpCLGFBQUEsR0FBQUMsQ0FBQSxpQkFBQUssQ0FBQSxFQUFBTixhQUFBLEdBQUFFLENBQUEsTUFBQUYsQ0FBQSxnQkFBQUMsQ0FBQSxvQkFBQUQsYUFBQSxHQUFBYyxDQUFBLFVBQUFSLENBQUEsSUFBQU4sYUFBQSxHQUFBYyxDQUFBLFVBN0VXWCxDQUFBLElBQWdDLFdBQUFxRixJQUFBLEVBQUF4RixhQUFBLEdBQUFDLENBQUEsUUFBQXdGLENBQUEsRUFBQUMsSUFBQSxDQUFoQ3ZGLENBQUEsQ0FBZ0N3RixTQUFBLCtDQUFBQyxNQUFBLEVBQUFpRSxhQUFBLGtCQUFBaEUsT0FBQSxFQUFBaUUsY0FBQSxrQkFBQUMsb0JBQUEsd0JBQUFDLGFBQUEsaUJBQUFDLGVBQUEsb0JBQUFuRSxLQUFBLElBQUFDLElBQUEsR0FBQUMsTUFBQSxtMkNBQUFDLFFBQUEsU0FBQUEsQ0FBQTNGLENBQUEsQ0FBQU8sQ0FBQSxFQUFBYixhQUFBLEdBQUFFLENBQUEsTUFBQUYsQ0FBQSxnQkFBQUMsQ0FBQSxTQUFBRCxhQUFBLEdBQUFjLENBQUEsVUFBQVIsQ0FBQSxNQUFBTixhQUFBLEdBQUFjLENBQUEsVUNqQjdDQSxDQUFBLGdCQUEwRSxjQUN0QixRQUM1QzBDLENBQUEsZ0JBQVNpRixDQUFBLEdBQ2IzSCxDQUFBLFlBQ0VtRCxDQUFBLEdBQUFxRSxFQUFBLGlCQUtBeEgsQ0FBQSxlQUFrRXlILENBQUEsb0JBQUF2SSxhQUFBLEdBQUFFLENBQUEsTUFBQUYsQ0FBQSxnQkFBQUMsQ0FBQSxjQUFTLENBQUFZLENBQUEsQ0FBQWlKLGNBQUEsQ0FBQXpFLElBQUEsRUFBcUIsSUFDOUY3QixDQUFBLG1CQUNGaUYsQ0FBQSxHQUFTLEVBQ0wsRUFHUnhFLENBQUEsR0FBQXlFLEVBQUEsWUFBeUMsRUFBQWdCLEVBQUEsYUFnRDNDakIsQ0FBQSxLQUFBekksYUFBQSxHQUFBYyxDQUFBLFVBQUFSLENBQUEsTUFBQU4sYUFBQSxHQUFBYyxDQUFBLFVBM0RNK0MsQ0FBQSxJQUFBTyxDQUFBLENBQUF2RCxDQUFBLENBQUE4SSxvQkFBQSxDQUFBa0IsTUFBQSxJQUFBN0ssYUFBQSxHQUFBYyxDQUFBLGNBQUFkLGFBQUEsR0FBQWMsQ0FBQSxlQVdKK0MsQ0FBQSxJQUFBTyxDQUFBLENBQUF2RCxDQUFBLENBQUE4SSxvQkFBQSxDQUFBa0IsTUFBQSxNQUFBN0ssYUFBQSxHQUFBYyxDQUFBLGNBQUFkLGFBQUEsR0FBQWMsQ0FBQSxpQkFBQTJGLFlBQUEsRURGVXFFLEVBQVEsRUFBQWpFLE1BQUE7NkVBQUEsRUFBQWtFLGVBQUEsT0FBQS9LLGFBQUEsR0FBQUMsQ0FBQSxjQUlQLENBQUFFLENBQWdDLE9BQUFILGFBQUEsR0FBQUMsQ0FBQSxZQUFBK0ssRUFBQSxFQUFBaEwsYUFBQSxHQUFBQyxDQUFBLHVCQUFBZ0wsRUFBQSxDQUFBQSxDQUFBLElBQUFqTCxhQUFBLEdBQUFFLENBQUEsTUFBQUYsQ0FBQSxnQkFBQUMsQ0FBQSw0QkFBQWlMLEdBQUEvSyxDQUFBLENBQUFrRCxDQUFBLEVBQUFyRCxhQUFBLEdBQUFFLENBQUEsTUFBQUYsQ0FBQSxnQkFBQUMsQ0FBQSxXQUFBRSxDQUFBLElBQUFILGFBQUEsR0FBQWMsQ0FBQSxjQUFBVCxDQUFBLEVBQUFMLGFBQUEsR0FBQUMsQ0FBQSxRQUFBa0gsQ0FBQSxJR1A3Q25ILGFBQUEsR0FBQUMsQ0FBQSxRQUFBc0QsQ0FBQSxnREFBQThDLENBQUEsWUFDSUgsQ0FBQSw2QkFBQWxHLGFBQUEsR0FBQUUsQ0FBQSxNQUFBRixDQUFBLGdCQUFBQyxDQUFBLFFBQUFDLENBQUEsQ0FBQUcsQ0FBQSxNQUFBUSxDQUFBLEVBQUFiLGFBQUEsR0FBQUMsQ0FBQSxRQUFBeUQsQ0FBQSxJQUFBMUQsYUFBQSxHQUFBQyxDQUFBLGVBQUFtSCxDQUFBLENBQWtCdkcsQ0FBQSxDQUFBc0ssd0JBQUEsRUFBMEIsS0FBQyxnQ0FBQXRLLENBQUEsRUFBQWIsYUFBQSxHQUFBRSxDQUFBLE1BQUFGLENBQUEsZ0JBQUFDLENBQUEsUUFBQUMsQ0FBQSxDQUFBRyxDQUFBLE1BQUFKLENBQUEsRUFBQUQsYUFBQSxHQUFBQyxDQUFBLFFBQUF5RCxDQUFBLElBQUExRCxhQUFBLEdBQUFDLENBQUEsZUFBQW1ILENBQUEsQ0FDckJuSCxDQUFBLENBQUFtTCxtQ0FBQSxDQUFBdkssQ0FBQSxDQUEyQyxLQUFDLHlCQUFBQSxDQUFBLEVBQUFiLGFBQUEsR0FBQUUsQ0FBQSxNQUFBRixDQUFBLGdCQUFBQyxDQUFBLFFBQUFDLENBQUEsQ0FBQUcsQ0FBQSxNQUFBSixDQUFBLEVBQUFELGFBQUEsR0FBQUMsQ0FBQSxRQUFBeUQsQ0FBQSxJQUFBMUQsYUFBQSxHQUFBQyxDQUFBLGVBQUFtSCxDQUFBLENBQ25EbkgsQ0FBQSxDQUFBb0wsd0JBQUEsQ0FBQXhLLENBQUEsQ0FBZ0MsS0FBQyw2QkFBQWIsYUFBQSxHQUFBRSxDQUFBLE1BQUFGLENBQUEsZ0JBQUFDLENBQUEsUUFBQUMsQ0FBQSxDQUFBRyxDQUFBLE1BQUFRLENBQUEsRUFBQWIsYUFBQSxHQUFBQyxDQUFBLFFBQUF5RCxDQUFBLElBQUExRCxhQUFBLEdBQUFDLENBQUEsZUFBQW1ILENBQUEsQ0FDL0J2RyxDQUFBLENBQUF5Syx3QkFBQSxFQUEwQixLQUFFN0gsQ0FBQSxTQUFBekQsYUFBQSxHQUFBYyxDQUFBLFdBQUFkLGFBQUEsR0FBQUMsQ0FBQSxXQUFBRSxDQUFBLElBQUFILGFBQUEsR0FBQWMsQ0FBQSxjQUFBVCxDQUFBLEVBQUFMLGFBQUEsR0FBQUMsQ0FBQSxRQUFBeUQsQ0FBQSxJQUpWMUQsYUFBQSxHQUFBQyxDQUFBLFFBQUEyRCxDQUFBLGtCQUFBNUQsYUFBQSxHQUFBYyxDQUFBLFVBQUF5RixDQUFBLEtBQUFsRyxDQUFBLENBQUFrTCxjQUFBLEtBQUF2TCxhQUFBLEdBQUFjLENBQUEsVUFBQTBLLEVBQUEsR0FBQVAsRUFBQSxVQUFBakwsYUFBQSxHQUFBYyxDQUFBLHFCQUFBMkssR0FBQXRMLENBQUEsQ0FBQWtELENBQUEsRUFBQXJELGFBQUEsR0FBQUUsQ0FBQSxNQUFBRixDQUFBLGdCQUFBQyxDQUFBLFlBQUFELGFBQUEsR0FBQWMsQ0FBQSxVQUFBWCxDQUFBLE1BQUFILGFBQUEsR0FBQWMsQ0FBQSxVQVF6Q3lDLENBQUEsWUFBd0gsT0FDakhDLENBQUEsSUFBMEJDLENBQUEsR0FBSSxHQUFBdEQsQ0FBQSxJQUFBSCxhQUFBLEdBQUFjLENBQUEsY0FBQVQsQ0FBQSxFQUFBTCxhQUFBLEdBQUFDLENBQUEsUUFBQXlELENBQUEsSUFESTFELGFBQUEsR0FBQUMsQ0FBQSxRQUFBdUcsQ0FBQSx3Q0FBQW5HLENBQUEsQ0FBQXFMLGlCQUFBLGNBQ2xDN0gsQ0FBQSxJQUFBQyxDQUFBLENBQUF6RCxDQUFBLENBQUFzTCxvQkFBQSxRQUFBM0wsYUFBQSxHQUFBYyxDQUFBLHFCQUFBOEssR0FBQXpMLENBQUEsQ0FBQWtELENBQUEsRUFBQXJELGFBQUEsR0FBQUUsQ0FBQSxNQUFBRixDQUFBLGdCQUFBQyxDQUFBLFdBQUFFLENBQUEsSUFBQUgsYUFBQSxHQUFBYyxDQUFBLGNBQUFULENBQUEsRUFBQUwsYUFBQSxHQUFBQyxDQUFBLFFBQUFrSCxDQUFBLElBMkJhbkgsYUFBQSxHQUFBQyxDQUFBLFFBQUFzRCxDQUFBLGdCQUVJMkMsQ0FBQSxvQkFBQWxHLGFBQUEsR0FBQUUsQ0FBQSxNQUFBRixDQUFBLGdCQUFBQyxDQUFBLFFBQUFDLENBQUEsQ0FBQUcsQ0FBQSxNQUFBUSxDQUFBLEVBQUFiLGFBQUEsR0FBQUMsQ0FBQSxRQUFBeUQsQ0FBQSxLQUFBMUQsYUFBQSxHQUFBQyxDQUFBLGVBQUFtSCxDQUFBLENBQVN2RyxDQUFBLENBQUFnTCxhQUFBLEVBQWUsS0FDeEJySSxDQUFBLHNCQUNKQyxDQUFBLFNBQUF6RCxhQUFBLEdBQUFjLENBQUEscUJBQUFnTCxHQUFBM0wsQ0FBQSxDQUFBa0QsQ0FBQSxFQUFBckQsYUFBQSxHQUFBRSxDQUFBLE1BQUFGLENBQUEsZ0JBQUFDLENBQUEsU0FBQUQsYUFBQSxHQUFBYyxDQUFBLFVBQUFYLENBQUEsTUFBQUgsYUFBQSxHQUFBYyxDQUFBLFVBV0l5QyxDQUFBLFdBQW1EQyxDQUFBLG1DQUE0QkMsQ0FBQSxjQUFBc0ksR0FBQTVMLENBQUEsQ0FBQWtELENBQUEsRUFBQXJELGFBQUEsR0FBQUUsQ0FBQSxNQUFBRixDQUFBLGdCQUFBQyxDQUFBLFlBQUFELGFBQUEsR0FBQWMsQ0FBQSxVQUFBWCxDQUFBLE1BQUFILGFBQUEsR0FBQWMsQ0FBQSxVQUkvRXlDLENBQUEsV0FBMEZDLENBQUEsSUFDbkVDLENBQUEsSUFBQXRELENBQUEsSUFBQUgsYUFBQSxHQUFBYyxDQUFBLGNBQUFULENBQUEsRUFBQUwsYUFBQSxHQUFBQyxDQUFBLFFBQUF5RCxDQUFBLEtBRG1FMUQsYUFBQSxHQUFBQyxDQUFBLFFBQUE0RCxDQUFBLEdBQUFDLENBQUEsQ0FBQXpELENBQUEsQ0FBQTJMLGdCQUFBLFFBQUFoTSxhQUFBLEdBQUFjLENBQUEscUJBQUFtTCxHQUFBOUwsQ0FBQSxDQUFBa0QsQ0FBQSxFQUFBckQsYUFBQSxHQUFBRSxDQUFBLE1BQUFGLENBQUEsZ0JBQUFDLENBQUEsWUFBQUQsYUFBQSxHQUFBYyxDQUFBLFVBQUFYLENBQUEsTUFBQUgsYUFBQSxHQUFBYyxDQUFBLFVBSzFGeUMsQ0FBQSxhQUVJQyxDQUFBLElBQ0pDLENBQUEsSUFBQXRELENBQUEsSUFBQUgsYUFBQSxHQUFBYyxDQUFBLGNBQUFULENBQUEsRUFBQUwsYUFBQSxHQUFBQyxDQUFBLFFBQUF5RCxDQUFBLEtBREkxRCxhQUFBLEdBQUFDLENBQUEsUUFBQTRELENBQUEsR0FBQVMsQ0FBQSxzQkFBQXRFLGFBQUEsR0FBQWMsQ0FBQSxVQUFBVCxDQUFBLENBQUE2TCxZQUFBLFVBQUFsTSxhQUFBLEdBQUFjLENBQUEsVUFBQVQsQ0FBQSxDQUFBNkwsWUFBQSxDQUFBQyxLQUFBLEdBQUFuTSxhQUFBLEdBQUFjLENBQUEsZ0JBQUFULENBQUEsQ0FBQTZMLFlBQUEsUUFBQWxNLGFBQUEsR0FBQWMsQ0FBQSxpQkFBQWQsYUFBQSxHQUFBYyxDQUFBLFVBQUFULENBQUEsQ0FBQTZMLFlBQUEsQ0FBQUMsS0FBQSxLQUFBbk0sYUFBQSxHQUFBYyxDQUFBLHlCQUFBZCxhQUFBLEdBQUFjLENBQUEscUJBQUFzTCxHQUFBak0sQ0FBQSxDQUFBa0QsQ0FBQSxFQUFBckQsYUFBQSxHQUFBRSxDQUFBLE1BQUFGLENBQUEsZ0JBQUFDLENBQUEsU0FBQUQsYUFBQSxHQUFBYyxDQUFBLFVBQUFYLENBQUEsTUFBQUgsYUFBQSxHQUFBYyxDQUFBLFVBS0p5QyxDQUFBLGFBRUlDLENBQUEsc0NBQ0pDLENBQUEsY0FBQTRJLEdBQUFsTSxDQUFBLENBQUFrRCxDQUFBLEVBQUFyRCxhQUFBLEdBQUFFLENBQUEsTUFBQUYsQ0FBQSxnQkFBQUMsQ0FBQSxZQUFBRCxhQUFBLEdBQUFjLENBQUEsVUFBQVgsQ0FBQSxNQUFBSCxhQUFBLEdBQUFjLENBQUEsVUF4Qkp5QyxDQUFBLGlCQUFxRSxVQUNVQyxDQUFBLDBCQUMzRUMsQ0FBQSxHQUVBUSxDQUFBLEdBQUE2SCxFQUFBLGFBSUE3SCxDQUFBLEdBQUE4SCxFQUFBLGFBS0E5SCxDQUFBLEdBQUFnSSxFQUFBLGVBT0FoSSxDQUFBLEdBQUFtSSxFQUFBLGVBTUozSSxDQUFBLElBQUF0RCxDQUFBLElBQUFILGFBQUEsR0FBQWMsQ0FBQSxjQUFBVCxDQUFBLEVBQUFMLGFBQUEsR0FBQUMsQ0FBQSxRQUFBeUQsQ0FBQSxLQXRCSTFELGFBQUEsR0FBQUMsQ0FBQSxRQUFBNEQsQ0FBQSxJQUFBTyxDQUFBLENBQUEvRCxDQUFBLENBQUFpTSxvQkFBQSxFQUFBdE0sYUFBQSxHQUFBYyxDQUFBLGNBQUFkLGFBQUEsR0FBQWMsQ0FBQSxlQUlBK0MsQ0FBQSxHQUFBTyxDQUFBLEVBQUFwRSxhQUFBLEdBQUFjLENBQUEsV0FBQVQsQ0FBQSxDQUFBaU0sb0JBQUEsSUFBQXRNLGFBQUEsR0FBQWMsQ0FBQSxVQUFBVCxDQUFBLENBQUEyTCxnQkFBQSxHQUFBaE0sYUFBQSxHQUFBYyxDQUFBLGNBQUFkLGFBQUEsR0FBQWMsQ0FBQSxlQUtBK0MsQ0FBQSxHQUFBTyxDQUFBLEVBQUFwRSxhQUFBLEdBQUFjLENBQUEsV0FBQVQsQ0FBQSxDQUFBaU0sb0JBQUEsSUFBQXRNLGFBQUEsR0FBQWMsQ0FBQSxXQUFBVCxDQUFBLENBQUEyTCxnQkFBQSxJQUFBaE0sYUFBQSxHQUFBYyxDQUFBLFVBQUFULENBQUEsQ0FBQTZMLFlBQUEsVUFBQWxNLGFBQUEsR0FBQWMsQ0FBQSxVQUFBVCxDQUFBLENBQUE2TCxZQUFBLENBQUFLLFFBQUEsR0FBQXZNLGFBQUEsR0FBQWMsQ0FBQSxjQUFBZCxhQUFBLEdBQUFjLENBQUEsZUFPQStDLENBQUEsR0FBQU8sQ0FBQSxFQUFBcEUsYUFBQSxHQUFBYyxDQUFBLFdBQUFULENBQUEsQ0FBQWlNLG9CQUFBLElBQUF0TSxhQUFBLEdBQUFjLENBQUEsV0FBQVQsQ0FBQSxDQUFBMkwsZ0JBQUEsSUFBQWhNLGFBQUEsR0FBQWMsQ0FBQSxhQUFBZCxhQUFBLEdBQUFjLENBQUEsVUFBQVQsQ0FBQSxDQUFBNkwsWUFBQSxVQUFBbE0sYUFBQSxHQUFBYyxDQUFBLFVBQUFULENBQUEsQ0FBQTZMLFlBQUEsQ0FBQUssUUFBQSxLQUFBdk0sYUFBQSxHQUFBYyxDQUFBLGNBQUFkLGFBQUEsR0FBQWMsQ0FBQSxxQkFBQWQsYUFBQSxHQUFBYyxDQUFBLHFCQUFBMEwsR0FBQXJNLENBQUEsQ0FBQWtELENBQUEsRUFBQXJELGFBQUEsR0FBQUUsQ0FBQSxNQUFBRixDQUFBLGdCQUFBQyxDQUFBLFdBQUFFLENBQUEsSUFBQUgsYUFBQSxHQUFBYyxDQUFBLGNBQUFULENBQUEsRUFBQUwsYUFBQSxHQUFBQyxDQUFBLFFBQUFrSCxDQUFBLElBMUNoQm5ILGFBQUEsR0FBQUMsQ0FBQSxRQUFBc0QsQ0FBQSxnQkFBK0IsZ0JBRXNJLGVBQzdELFNBQ3ZGLFVBQ3VFQyxDQUFBLGtCQUFXQyxDQUFBLEdBQ25GRixDQUFBLFlBQXVEQyxDQUFBLElBQzVCQyxDQUFBLEdBQzNCRixDQUFBLFdBQXVDQyxDQUFBLElBQW9DQyxDQUFBLEdBQUksRUFHbkZRLENBQUEsSUFBQTJILEVBQUEsa0JBT0puSSxDQUFBLEdBRUFGLENBQUEsY0FDSVUsQ0FBQSxJQUFBb0ksRUFBQSxtQkE4QkE5SSxDQUFBLGtCQUFxRSxXQUNVQyxDQUFBLGdCQUFRQyxDQUFBLEdBQ25GRixDQUFBLFlBQXVDQyxDQUFBLGtFQUMzQkMsQ0FBQSxHQUVaRixDQUFBLGlCQUFvRDJDLENBQUEsb0JBQUFsRyxhQUFBLEdBQUFFLENBQUEsTUFBQUYsQ0FBQSxnQkFBQUMsQ0FBQSxRQUFBQyxDQUFBLENBQUFHLENBQUEsTUFBQVEsQ0FBQSxFQUFBYixhQUFBLEdBQUFDLENBQUEsUUFBQXlELENBQUEsSUFBQTFELGFBQUEsR0FBQUMsQ0FBQSxlQUFBbUgsQ0FBQSxDQUFTdkcsQ0FBQSxDQUFBNEwsTUFBQSxFQUFRLEtBRWpFdEcsQ0FBQSxjQUNBM0MsQ0FBQSxjQUNKQyxDQUFBLEdBQVMsRUFDSCxFQUNSLEVBQ0EsUUFBQXpELGFBQUEsR0FBQWMsQ0FBQSxXQUFBZCxhQUFBLEdBQUFDLENBQUEsV0FBQUUsQ0FBQSxJQUFBSCxhQUFBLEdBQUFjLENBQUEsY0FBQVQsQ0FBQSxFQUFBTCxhQUFBLEdBQUFDLENBQUEsUUFBQXlELENBQUEsSUF6RHlEMUQsYUFBQSxHQUFBQyxDQUFBLFFBQUE0RCxDQUFBLElBQUE2SSxFQUFBLElBQUFyTSxDQUFBLENBQUFzTSxXQUFBLENBQUFDLFNBQUEsS0FBQXZNLENBQUEsQ0FBQXNNLFdBQUEsQ0FBQUUsUUFBQSxFQUVoQmhKLENBQUEsSUFBQVMsQ0FBQSxjQUFBakUsQ0FBQSxDQUFBc00sV0FBQSxDQUFBRyxRQUFBLEVBRzNDakosQ0FBQSxHQUFBTyxDQUFBLENBQUEvRCxDQUFBLENBQUEwTSxPQUFBLEVBQUEvTSxhQUFBLEdBQUFjLENBQUEsZUFBQWQsYUFBQSxHQUFBYyxDQUFBLGVBVUErQyxDQUFBLElBQUFPLENBQUEsQ0FBQS9ELENBQUEsQ0FBQTBNLE9BQUEsRUFBQS9NLGFBQUEsR0FBQWMsQ0FBQSxlQUFBZCxhQUFBLEdBQUFjLENBQUEscUJBQUFkLGFBQUEsR0FBQWMsQ0FBQSxxQkFBQWtNLEdBQUE3TSxDQUFBLENBQUFrRCxDQUFBLEVBQUFyRCxhQUFBLEdBQUFFLENBQUEsTUFBQUYsQ0FBQSxnQkFBQUMsQ0FBQSxTQUFBRCxhQUFBLEdBQUFjLENBQUEsVUFBQVgsQ0FBQSxNQUFBSCxhQUFBLEdBQUFjLENBQUEsVUE2Q1pxRixDQUFBLHNCRHJFUixHQUFhLENBQUE4RyxFQUFBLEVBQUFqTixhQUFBLEdBQUFDLENBQUEsU0FBbUIsS0FBQUQsYUFBQSxHQUFBRSxDQUFBLE9BQTFCLEtBQU8sQ0FBQUMsQ0FBbUIsQ0FDa0IrTSxTQUFBLENBQ3ZDcEYsV0FBQSxFQUFBOUgsYUFBQSxHQUFBQyxDQUFBLFFBQXVCLElBQ3ZCNEgsUUFBQSxDQUNBc0Ysa0JBQUEsRUFBQW5OLGFBQUEsR0FBQUMsQ0FBQSxRQUFxQixJQUNyQjhNLE9BQUEsRUFBQS9NLGFBQUEsR0FBQUMsQ0FBQSxRQUFVLElBQ1ZxTSxvQkFBQSxFQUFBdE0sYUFBQSxHQUFBQyxDQUFBLFFBQXVCLElBQ3ZCK0wsZ0JBQUEsRUFBQWhNLGFBQUEsR0FBQUMsQ0FBQSxRQUFtQixJQUNuQmlNLFlBQUEsRUFBQWxNLGFBQUEsR0FBQUMsQ0FBQSxRQUFzQyxNQUN0Q21OLDJCQUFBLEVBQUFwTixhQUFBLEdBQUFDLENBQUEsUUFBOEIsSUFDOUJvTix1QkFBQSxFQUFBck4sYUFBQSxHQUFBQyxDQUFBLFFBQTBCLElBQzFCMEwsb0JBQUEsRUFBQTNMLGFBQUEsR0FBQUMsQ0FBQSxRQUFzQyxNQUN0Q3lMLGlCQUFBLEVBQUExTCxhQUFBLEdBQUFDLENBQUEsUUFBeUMsU0FFL0JxTixVQUFBLEVBQUF0TixhQUFBLEdBQUFDLENBQUEsUUFBYXNOLENBQUEsQ0FBT3hOLEVBQVUsR0FDOUJ5TixtQkFBQSxFQUFBeE4sYUFBQSxHQUFBQyxDQUFBLFFBQXNCc04sQ0FBQSxDQUFPRSxFQUFtQixHQUNoREMsaUJBQUEsRUFBQTFOLGFBQUEsR0FBQUMsQ0FBQSxRQUFvQnNOLENBQUEsQ0FBT0ksRUFBaUIsR0FDNUNDLDZCQUFBLEVBQUE1TixhQUFBLEdBQUFDLENBQUEsUUFBZ0NzTixDQUFBLENBQU9NLEVBQTZCLEdBQ3BFck0sTUFBQSxFQUFBeEIsYUFBQSxHQUFBQyxDQUFBLFFBQVNzTixDQUFBLENBQU9ySyxDQUFNLEdBQ3RCNEssY0FBQSxFQUFBOU4sYUFBQSxHQUFBQyxDQUFBLFFBQWlCc04sQ0FBQSxDQUFPUSxFQUFBLENBQXlCLENBQUVDLFFBQUEsQ0FBVSxFQUFJLENBQUUsR0FDcEVDLHlCQUFBLEVBQUFqTyxhQUFBLEdBQUFDLENBQUEsUUFBNEIsS0FBS3lOLGlCQUFBLENBQWtCUSw0QkFBQSxDQUE0QixHQUMvRTNDLGNBQUEsRUFBQXZMLGFBQUEsR0FBQUMsQ0FBQSxRQUFrRCxLQUFLeU4saUJBQUEsQ0FBa0JTLGlCQUFBLENBQWlCLEdBQ3pGQyxHQUFBLEVBQUFwTyxhQUFBLEdBQUFDLENBQUEsUUFBTXNOLENBQUEsQ0FBT2MsRUFBaUIsR0FDOUJDLFFBQUEsRUFBQXRPLGFBQUEsR0FBQUMsQ0FBQSxRQUFXLEdBQUksQ0FBQXNPLENBQUEsSUFDeEJDLFVBQUEsRUFBQXhPLGFBQUEsR0FBQUMsQ0FBQSxRQUFtRCxNQUNuRHdPLDRCQUFBLEVBQUF6TyxhQUFBLEdBQUFDLENBQUEsUUFBOEMsTUFFL0MwTSxXQUFBLEVBQUEzTSxhQUFBLEdBQUFDLENBQUEsUUFBd0IsQ0FDM0I2TSxRQUFBLENBQVUsR0FDVkYsU0FBQSxDQUFXLEdBQ1hDLFFBQUEsQ0FBVSxHQUNWNkIsSUFBQSxDQUFNL04sQ0FBQSxDQUFTSSxtQkFBQSxHQUdaNE4saUJBQUEsRUFBQTNPLGFBQUEsR0FBQUMsQ0FBQSxRQUF3QyxLQUFLeU4saUJBQUEsQ0FBa0JrQixxQkFBQSxDQUFxQixHQUNuRkMsY0FBQSxDQUdEQyxTQUFBLENBQVEsQ0FBQTlPLGFBQUEsR0FBQUUsQ0FBQSxNQUFBRixDQUFBLGdCQUFBQyxDQUFBLFFBQ1gsS0FBSzhPLDhCQUFBLENBQThCLEVBRW5DLEtBQUt2QixtQkFBQSxDQUNBd0IsZUFBQSxDQUFlLEVBQ2ZuTixJQUFBLENBQUtvTixDQUFBLENBQUssQ0FBQyxFQUFHQyxDQUFBLENBQVUsS0FBS1osUUFBUSxDQUFDLEVBQ3RDYSxTQUFBLENBQVc5TyxDQUFBLEVBQVcsQ0FBQUwsYUFBQSxHQUFBRSxDQUFBLE1BQUFGLENBQUEsZ0JBQUFDLENBQUEsUUFDbkIsR0FBSSxDQUFDSSxDQUFBLENBQVMsQ0FBQUwsYUFBQSxHQUFBYyxDQUFBLFNBQUFkLENBQUEsZ0JBQUFDLENBQUEsUUFDVixLQUFLNEgsUUFBQSxDQUFXLEdBQ1gsS0FBS3JHLE1BQUEsQ0FBTzROLFFBQUEsQ0FBUyxDQUFDLGFBQWEsQ0FBQyxFQUN6Q3BQLGFBQUEsR0FBQUMsQ0FBQSxlQUNKLENBRUEsS0FBQUQsYUFBQSxHQUFBYyxDQUFBLFdBQUFkLGFBQUEsR0FBQUMsQ0FBQSxhQUFLME0sV0FBQSxDQUFjLENBQ2ZHLFFBQUEsQ0FBVXpNLENBQUEsQ0FBUXlNLFFBQUEsQ0FDbEJGLFNBQUEsQ0FBV3ZNLENBQUEsQ0FBUXlNLFFBQUEsQ0FDbkJELFFBQUEsQ0FBVSxHQUNWNkIsSUFBQSxDQUFNck8sQ0FBQSxDQUFRcU8sSUFBQSxFQUVsQixLQUFLM0IsT0FBQSxDQUFVMU0sQ0FBQSxDQUFRcU8sSUFBQSxHQUFTL04sQ0FBQSxDQUFTQyxjQUFBLENBQ3pDLEtBQUtpSCxRQUFBLENBQVcsS0FBS3lGLFVBQUEsQ0FBV2xOLFdBQUEsQ0FBWUMsQ0FBQSxDQUFRcU8sSUFBSSxFQUVwRCxDQUFBMU8sYUFBQSxHQUFBYyxDQUFBLGVBQUtpTSxPQUFBLElBQUEvTSxhQUFBLEdBQUFjLENBQUEsVUFDTCxLQUFLdU8sZUFBQSxDQUFlLEdBR3hCLEtBQUtqQixHQUFBLENBQUlrQixZQUFBLENBQVksQ0FDekIsRUFBQyxDQUNULEVBRU9DLGdCQUFBLENBQWUsQ0FBQXZQLGFBQUEsR0FBQUUsQ0FBQSxNQUFBRixDQUFBLGdCQUFBQyxDQUFBLFFBQ2QsQ0FBQUQsYUFBQSxHQUFBYyxDQUFBLGdCQUFPLENBQUEwTyxjQUFBLENBQW1CLE9BQUF4UCxhQUFBLEdBQUFjLENBQUEsVUFBZSxDQUFDLEtBQUtvTSxTQUFBLEVBQVd1QyxhQUFBLElBQUF6UCxhQUFBLEdBQUFjLENBQUEsVUFJOUQsS0FBSytOLGNBQUEsQ0FBaUIsR0FBSSxDQUFBVyxjQUFBLENBQWVuUCxDQUFBLEVBQVUsQ0FBQUwsYUFBQSxHQUFBRSxDQUFBLE1BQUFGLENBQUEsZ0JBQUFDLENBQUEsUUFDL0MsT0FBVyxDQUFBSyxDQUFBLEdBQVMsQ0FBQUQsQ0FBQSxDQUFTLENBQ3pCLEdBQU0sQ0FBQVEsQ0FBQSxFQUFBYixhQUFBLEdBQUFDLENBQUEsUUFBSUssQ0FBQSxDQUFNb1AsV0FBQSxDQUFZQyxNQUFBLEVBQzVCM1AsYUFBQSxHQUFBQyxDQUFBLFFBQUEyUCxRQUFBLENBQVNDLGVBQUEsQ0FBZ0JDLEtBQUEsQ0FBTUMsV0FBQSxDQUFZLGtCQUFtQixHQUFHbFAsQ0FBQyxJQUFJLENBQzFFLEVBQ0osQ0FBQyxFQUNELEtBQUtnTyxjQUFBLENBQWVtQixPQUFBLENBQVEsS0FBSzlDLFNBQUEsQ0FBVXVDLGFBQWEsRUFDNUQsRUFFT1EsWUFBQSxDQUFXLENBQUFqUSxhQUFBLEdBQUFFLENBQUEsTUFBQUYsQ0FBQSxnQkFBQUMsQ0FBQSxRQUNkLEtBQUtxTyxRQUFBLENBQVM0QixJQUFBLENBQUksRUFDbEIsS0FBSzVCLFFBQUEsQ0FBUzZCLFFBQUEsQ0FBUSxFQUN0QixLQUFLQyxlQUFBLENBQWUsRUFDcEIsS0FBS3ZCLGNBQUEsRUFBZ0J3QixVQUFBLENBQVUsQ0FDbkMsRUFFT0MsY0FBQSxDQUFhLENBQUF0USxhQUFBLEdBQUFFLENBQUEsTUFBQUYsQ0FBQSxnQkFBQUMsQ0FBQSxRQUNoQixLQUFLNkgsV0FBQSxDQUFjLENBQUMsS0FBS0EsV0FDN0IsRUFFT3lJLG1CQUFBLENBQWtCLENBQUF2USxhQUFBLEdBQUFFLENBQUEsTUFBQUYsQ0FBQSxnQkFBQUMsQ0FBQSxRQUNyQixLQUFLdVEsc0JBQUEsQ0FBc0IsRUFDM0IsS0FBS3JELGtCQUFBLENBQXFCLENBQUMsS0FBS0Esa0JBQUEsQ0FFNUIsQ0FBQW5OLGFBQUEsR0FBQWMsQ0FBQSxlQUFLcU0sa0JBQUEsSUFBQW5OLGFBQUEsR0FBQWMsQ0FBQSxVQUFzQixLQUFLaU0sT0FBQSxJQUFBL00sYUFBQSxHQUFBYyxDQUFBLFVBQ2hDLEtBQUt1TyxlQUFBLENBQWUsQ0FFNUIsR0FFT29CLGtCQUFBLENBQWlCLENBQUF6USxhQUFBLEdBQUFFLENBQUEsTUFBQUYsQ0FBQSxnQkFBQUMsQ0FBQSxRQUNwQixLQUFLa04sa0JBQUEsQ0FBcUIsRUFDOUIsRUFFT3VELGtCQUFrQnJRLENBQUEsQ0FBYSxDQUFBTCxhQUFBLEdBQUFFLENBQUEsTUFBQUYsQ0FBQSxnQkFBQUMsQ0FBQSxRQUNsQyxLQUFLd1EsaUJBQUEsQ0FBaUIsRUFDdEIsS0FBS0Qsc0JBQUEsQ0FBc0IsRUFFdkIsQ0FBQXhRLGFBQUEsR0FBQWMsQ0FBQSxVQUFBVCxDQUFBLEdBQVUsNkJBQUFMLGFBQUEsR0FBQWMsQ0FBQSxVQUlULEtBQUtVLE1BQUEsQ0FBT2UsR0FBQSxDQUFJb08sUUFBQSxDQUFTLDBCQUEwQixLQUFBM1EsYUFBQSxHQUFBYyxDQUFBLFVBSXhELEtBQUs4TSw2QkFBQSxDQUE4QmdELGNBQUEsQ0FBYyxDQUNyRCxHQUVPL0UsY0FBQSxDQUFhLENBQUE3TCxhQUFBLEdBQUFFLENBQUEsTUFBQUYsQ0FBQSxnQkFBQUMsQ0FBQSxRQUNYLEtBQUt1QixNQUFBLENBQU80TixRQUFBLENBQVMsQ0FBQyxhQUFhLENBQUMsQ0FDN0MsRUFFT3lCLHdCQUFBLENBQXVCLENBQUE3USxhQUFBLEdBQUFFLENBQUEsTUFBQUYsQ0FBQSxnQkFBQUMsQ0FBQSxRQUMxQixLQUFLd1EsaUJBQUEsQ0FBaUIsRUFDdEIsS0FBS3BELHVCQUFBLENBQTBCLENBQUMsS0FBS0EsdUJBQ3pDLEVBRU9tRCx1QkFBQSxDQUFzQixDQUFBeFEsYUFBQSxHQUFBRSxDQUFBLE1BQUFGLENBQUEsZ0JBQUFDLENBQUEsUUFDekIsS0FBS29OLHVCQUFBLENBQTBCLEVBQ25DLEVBRU9sQyx5QkFBQSxDQUF3QixDQUFBbkwsYUFBQSxHQUFBRSxDQUFBLE1BQUFGLENBQUEsZ0JBQUFDLENBQUEsUUFDM0IsS0FBS3VRLHNCQUFBLENBQXNCLEVBQ3RCLEtBQUtoUCxNQUFBLENBQU80TixRQUFBLENBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUNoRCxFQUVPaEUsb0NBQW9DL0ssQ0FBQSxDQUFzQixDQUFBTCxhQUFBLEdBQUFFLENBQUEsTUFBQUYsQ0FBQSxnQkFBQUMsQ0FBQSxRQUM3RCxLQUFLdVEsc0JBQUEsQ0FBc0IsRUFFdEIsS0FBS2hQLE1BQUEsQ0FBTzROLFFBQUEsQ0FBUyxDQUFDLGdCQUFnQixFQUFHLENBQzFDMEIsV0FBQSxDQUFhLENBQUVDLEtBQUEsQ0FBTzFRLENBQWMsRUFDdkMsQ0FDTCxFQUVPZ0wseUJBQXlCaEwsQ0FBQSxDQUFzQixDQUFBTCxhQUFBLEdBQUFFLENBQUEsTUFBQUYsQ0FBQSxnQkFBQUMsQ0FBQSxRQUNsRCxLQUFLeU4saUJBQUEsQ0FBa0JzRCxrQkFBQSxDQUFtQjNRLENBQWMsQ0FDNUQsRUFFT2lMLHlCQUFBLENBQXdCLENBQUF0TCxhQUFBLEdBQUFFLENBQUEsTUFBQUYsQ0FBQSxnQkFBQUMsQ0FBQSxRQUMzQixLQUFLeU4saUJBQUEsQ0FBa0J1RCxrQkFBQSxDQUFrQixDQUM3QyxFQUVPeEUsT0FBQSxDQUFNLENBQUF6TSxhQUFBLEdBQUFFLENBQUEsTUFBQUYsQ0FBQSxnQkFBQUMsQ0FBQSxRQUNULEtBQUt1USxzQkFBQSxDQUFzQixFQUMzQixLQUFLaEQsbUJBQUEsQ0FBb0IwRCxpQkFBQSxDQUFpQixFQUFHL0IsU0FBQSxDQUFVLElBQUssQ0FBQW5QLGFBQUEsR0FBQUUsQ0FBQSxNQUFBRixDQUFBLGdCQUFBQyxDQUFBLFFBQ25ELEtBQUt1QixNQUFBLENBQU80TixRQUFBLENBQVMsQ0FBQyxhQUFhLENBQUMsQ0FDN0MsRUFBQyxDQUNMLEVBRU8rQixvQkFBQSxDQUFtQixDQUFBblIsYUFBQSxHQUFBRSxDQUFBLE1BQUFGLENBQUEsZ0JBQUFDLENBQUEsUUFDdEIsTUFBTyxFQUNYLEVBRVE4TywrQkFBQSxDQUE4QixDQUFBL08sYUFBQSxHQUFBRSxDQUFBLE1BQUFGLENBQUEsZ0JBQUFDLENBQUEsUUFDbEMsS0FBS3lOLGlCQUFBLENBQ0FTLGlCQUFBLENBQWlCLEVBQ2pCdE0sSUFBQSxDQUFLcU4sQ0FBQSxDQUFVLEtBQUtaLFFBQVEsQ0FBQyxFQUM3QmEsU0FBQSxDQUFXOU8sQ0FBQSxFQUFpQixDQUFBTCxhQUFBLEdBQUFFLENBQUEsT0FDekIsR0FBTSxDQUFBSSxDQUFBLEVBQUFOLGFBQUEsR0FBQUMsQ0FBQSxRQUFTSSxDQUFBLENBQWMsQ0FBQyxHQUMxQkwsYUFBQSxHQUFBQyxDQUFBLFNBQUFELGFBQUEsR0FBQWMsQ0FBQSxXQUFDUixDQUFBLElBQUFOLGFBQUEsR0FBQWMsQ0FBQSxVQUFVUixDQUFBLENBQU8rSCxjQUFBLEdBQW1CLEtBQUtvRyw0QkFBQSxJQUFBek8sYUFBQSxHQUFBYyxDQUFBLFVBSTlDLEtBQUsyTiw0QkFBQSxDQUErQm5PLENBQUEsQ0FBTytILGNBQUEsQ0FDM0MsS0FBSytJLDZCQUFBLENBQTZCLEVBQ3RDLEVBQUMsQ0FDVCxFQUVRQSw4QkFBQSxDQUE2QixDQUFBcFIsYUFBQSxHQUFBRSxDQUFBLE1BQUFGLENBQUEsZ0JBQUFDLENBQUEsUUFLakMsR0FKQSxLQUFLbVEsZUFBQSxDQUFlLEVBQ3BCLEtBQUt6RSxvQkFBQSxDQUF1QixLQUM1QixLQUFLOEUsaUJBQUEsQ0FBaUIsRUFFbEIsS0FBS3BELHVCQUFBLENBQXlCLENBQUFyTixhQUFBLEdBQUFjLENBQUEsU0FBQWQsQ0FBQSxnQkFBQUMsQ0FBQSxRQUM5QixLQUFLbU8sR0FBQSxDQUFJa0IsWUFBQSxDQUFZLEVBQ3JCdFAsYUFBQSxHQUFBQyxDQUFBLGVBQ0osQ0FFQSxLQUFBRCxhQUFBLEdBQUFjLENBQUEsV0FBQWQsYUFBQSxHQUFBQyxDQUFBLGFBQUtvTix1QkFBQSxDQUEwQixHQUMvQixLQUFLZSxHQUFBLENBQUlrQixZQUFBLENBQVksQ0FDekIsRUFFUStCLGtCQUFrQmhSLENBQUEsQ0FBaUJDLENBQUEsQ0FBeUIsQ0FBQU4sYUFBQSxHQUFBRSxDQUFBLE1BQUFGLENBQUEsZ0JBQUFDLENBQUEsUUFDaEUsS0FBS21RLGVBQUEsQ0FBZSxFQUNwQixLQUFLekUsb0JBQUEsQ0FBdUJ0TCxDQUFBLENBQzVCLEtBQUtxTCxpQkFBQSxDQUFvQnBMLENBQUEsQ0FDekIsS0FBSzhOLEdBQUEsQ0FBSWtCLFlBQUEsQ0FBWSxFQUVyQixLQUFLZCxVQUFBLENBQWE4QyxVQUFBLENBQVcsSUFBSyxDQUFBdFIsYUFBQSxHQUFBRSxDQUFBLE9BQUFGLENBQUEsZ0JBQUFDLENBQUEsUUFDOUIsS0FBSzBMLG9CQUFBLENBQXVCLEtBQzVCLEtBQUt5QyxHQUFBLENBQUlrQixZQUFBLENBQVksRUFDckIsS0FBS2QsVUFBQSxDQUFhLElBQ3RCLEdBQUcsR0FBSSxDQUNYLEVBRVE0QixnQkFBQSxDQUFlLENBQUFwUSxhQUFBLEdBQUFFLENBQUEsT0FBQUYsQ0FBQSxnQkFBQUMsQ0FBQSxRQUNkLENBQUFELGFBQUEsR0FBQWMsQ0FBQSxlQUFLME4sVUFBQSxJQUFBeE8sYUFBQSxHQUFBYyxDQUFBLFVBSVZ5USxZQUFBLENBQWEsS0FBSy9DLFVBQVUsRUFDNUIsS0FBS0EsVUFBQSxDQUFhLEtBQ3RCLEVBRVFhLGdCQUFBLENBQWUsQ0FBQXJQLGFBQUEsR0FBQUUsQ0FBQSxPQUFBRixDQUFBLGdCQUFBQyxDQUFBLFFBQ25CLEdBQUksQ0FBQyxLQUFLNk4sY0FBQSxDQUFnQixDQUFBOU4sYUFBQSxHQUFBYyxDQUFBLFNBQUFkLENBQUEsZ0JBQUFDLENBQUEsUUFDdEIsS0FBS2lNLFlBQUEsQ0FBZSxDQUFFQyxLQUFBLENBQU8sR0FBSUksUUFBQSxDQUFVLEVBQUssRUFDaEQsS0FBS1AsZ0JBQUEsQ0FBbUIsc0RBQ3hCLEtBQUtNLG9CQUFBLENBQXVCLEdBQzVCLEtBQUtjLDJCQUFBLENBQThCLEdBQ25DLEtBQUtnQixHQUFBLENBQUlrQixZQUFBLENBQVksRUFDckJ0UCxhQUFBLEdBQUFDLENBQUEsZUFDSixDQUVBLEtBQUFELGFBQUEsR0FBQWMsQ0FBQSxXQUFBZCxhQUFBLEdBQUFDLENBQUEsYUFBS3FNLG9CQUFBLENBQXVCLEdBQzVCLEtBQUtOLGdCQUFBLENBQW1CLEdBQ3hCLEtBQUtvQyxHQUFBLENBQUlrQixZQUFBLENBQVksRUFFckIsS0FBS3hCLGNBQUEsQ0FBZTBELGdCQUFBLENBQWdCLEVBQUdyQyxTQUFBLENBQVUsQ0FDN0NlLElBQUEsQ0FBTzdQLENBQUEsRUFBVyxDQUFBTCxhQUFBLEdBQUFFLENBQUEsT0FBQUYsQ0FBQSxnQkFBQUMsQ0FBQSxRQUNkLEtBQUtpTSxZQUFBLENBQWU3TCxDQUFBLENBQ3BCLEtBQUtpTSxvQkFBQSxDQUF1QixHQUM1QixLQUFLYywyQkFBQSxDQUE4QixDQUFBcE4sYUFBQSxHQUFBYyxDQUFBLGVBQUtxUSxtQkFBQSxDQUFtQixLQUFBblIsYUFBQSxHQUFBYyxDQUFBLFVBQU0sQ0FBQ1QsQ0FBQSxDQUFRa00sUUFBQSxFQUMxRSxLQUFLNkIsR0FBQSxDQUFJa0IsWUFBQSxDQUFZLENBQ3pCLEdBQ0FtQyxLQUFBLENBQU9BLENBQUEsR0FBSyxDQUFBelIsYUFBQSxHQUFBRSxDQUFBLE9BQUFGLENBQUEsZ0JBQUFDLENBQUEsUUFDUixLQUFLaU0sWUFBQSxDQUFlLENBQUVDLEtBQUEsQ0FBTyxHQUFJSSxRQUFBLENBQVUsRUFBSyxFQUNoRCxLQUFLUCxnQkFBQSxDQUFtQiw0REFDeEIsS0FBS00sb0JBQUEsQ0FBdUIsR0FDNUIsS0FBS2MsMkJBQUEsQ0FBOEIsR0FDbkMsS0FBS2dCLEdBQUEsQ0FBSWtCLFlBQUEsQ0FBWSxDQUN6QixHQUNILENBQ0wsU0FBQXJPLElBQUEsRUFBQWpCLGFBQUEsR0FBQUMsQ0FBQSxpQkFBQUssQ0FBQSxFQUFBTixhQUFBLEdBQUFFLENBQUEsT0FBQUYsQ0FBQSxnQkFBQUMsQ0FBQSxvQkFBQUQsYUFBQSxHQUFBYyxDQUFBLFVBQUFSLENBQUEsSUFBQU4sYUFBQSxHQUFBYyxDQUFBLFVBdFBTWCxDQUFBLElBQW1CLFdBQUFxRixJQUFBLEVBQUF4RixhQUFBLEdBQUFDLENBQUEsUUFBQXdGLENBQUEsRUFBQUMsSUFBQSxDQUFuQnZGLENBQUEsQ0FBbUJ3RixTQUFBLHVCQUFBK0wsU0FBQSxTQUFBQSxDQUFBcFIsQ0FBQSxDQUFBTyxDQUFBLEVBQUFiLGFBQUEsR0FBQUUsQ0FBQSxPQUFBRixDQUFBLGdCQUFBQyxDQUFBLFlBQUFELGFBQUEsR0FBQWMsQ0FBQSxVQUFBUixDQUFBLE1BQUFOLGFBQUEsR0FBQWMsQ0FBQSxVQUFBNlEsRUFBQSxDQUFBM0csRUFBQSxHQUNJNEcsRUFBVSxHQUFBdFIsQ0FBQSxJQUFBTixhQUFBLEdBQUFjLENBQUEsY0FBQWIsQ0FBQSxDQUFBRCxhQUFBLEdBQUFDLENBQUEsU0FBQUQsYUFBQSxHQUFBYyxDQUFBLFVBQUErUSxFQUFBLENBQUE1UixDQUFBLENBQUE2UixFQUFBLE9BQUE5UixhQUFBLEdBQUFjLENBQUEsVUFBQUQsQ0FBQSxDQUFBcU0sU0FBQSxDQUFBak4sQ0FBQSxDQUFBOFIsS0FBQSxRQUFBL1IsYUFBQSxHQUFBYyxDQUFBLGFBQUFnRixLQUFBLElBQUFDLElBQUEsSUFBQUMsTUFBQSxzN0VBQUFDLFFBQUEsU0FBQUEsQ0FBQTNGLENBQUEsQ0FBQU8sQ0FBQSxFQUFBYixhQUFBLEdBQUFFLENBQUEsT0FBQUYsQ0FBQSxnQkFBQUMsQ0FBQSxXQUFBSyxDQUFBLElBQUFOLGFBQUEsR0FBQWMsQ0FBQSxjQUFBYixDQUFBLEVBQUFELGFBQUEsR0FBQUMsQ0FBQSxRQUFBa0gsQ0FBQSxJQzlCOUNuSCxhQUFBLEdBQUFDLENBQUEsUUFBQXNELENBQUEscUJBQUE4QyxDQUFBLFlBR3FESCxDQUFBLCtCQUFBbEcsYUFBQSxHQUFBRSxDQUFBLE9BQUFGLENBQUEsZ0JBQUFDLENBQUEsY0FBb0IsQ0FBQVksQ0FBQSxDQUFBeVAsYUFBQSxFQUFlLElBQUMsNEJBQUF0USxhQUFBLEdBQUFFLENBQUEsT0FBQUYsQ0FBQSxnQkFBQUMsQ0FBQSxjQUNuRSxDQUFBWSxDQUFBLENBQUEwUCxrQkFBQSxFQUFvQixJQUFDLGlDQUFBdlEsYUFBQSxHQUFBRSxDQUFBLE9BQUFGLENBQUEsZ0JBQUFDLENBQUEsY0FBd0IsQ0FBQVksQ0FBQSxDQUFBZ1EsdUJBQUEsRUFBeUIsSUFBQywyQkFBQTdRLGFBQUEsR0FBQUUsQ0FBQSxPQUFBRixDQUFBLGdCQUFBQyxDQUFBLGNBQWtCLENBQUFZLENBQUEsQ0FBQTRMLE1BQUEsRUFBUSxJQUN2SGhKLENBQUEsR0FFQVEsQ0FBQSxHQUFBaUgsRUFBQSxrREFRQWpILENBQUEsR0FBQXdILEVBQUEsY0FNQWxJLENBQUEsWUFBMkMsbUJBR0UyQyxDQUFBLHdCQUFBbEcsYUFBQSxHQUFBRSxDQUFBLE9BQUFGLENBQUEsZ0JBQUFDLENBQUEsY0FBYSxDQUFBWSxDQUFBLENBQUF5UCxhQUFBLEVBQWUsSUFBQyw2QkFBQXRRLGFBQUEsR0FBQUUsQ0FBQSxPQUFBRixDQUFBLGdCQUFBQyxDQUFBLGVBQUFDLENBQUEsQ0FBQUQsQ0FBQSxFQUMvQ1ksQ0FBQSxDQUFBNFAsaUJBQUEsR0FBbUJySixDQUFBLENBQUF2RyxDQUFBLENBQUFpSCxXQUFBLENBQWdCLEVBQUksS0FBQyw0QkFBQTlILGFBQUEsR0FBQUUsQ0FBQSxPQUFBRixDQUFBLGdCQUFBQyxDQUFBLGNBQ3pDLENBQUFZLENBQUEsQ0FBQTBQLGtCQUFBLEVBQW9CLElBQUMsMkJBQUF2USxhQUFBLEdBQUFFLENBQUEsT0FBQUYsQ0FBQSxnQkFBQUMsQ0FBQSxjQUFrQixDQUFBWSxDQUFBLENBQUE0TCxNQUFBLEVBQVEsSUFBQyw2QkFBQXpNLGFBQUEsR0FBQUUsQ0FBQSxPQUFBRixDQUFBLGdCQUFBQyxDQUFBLGVBQUFDLENBQUEsQ0FBQUQsQ0FBQSxFQUMvQ1ksQ0FBQSxDQUFBNFAsaUJBQUEsR0FBbUJySixDQUFBLENBQUF2RyxDQUFBLENBQUFpSCxXQUFBLENBQWdCLEVBQUksS0FDOURyRSxDQUFBLEdBRUFGLENBQUEsYUFDSVUsQ0FBQSxHQUFBdUksRUFBQSxtQkFBMEIsRUFBQVEsRUFBQSxzQkFxRTlCdkosQ0FBQSxHQUFPLFFBQUF6RCxhQUFBLEdBQUFjLENBQUEsV0FBQWQsYUFBQSxHQUFBQyxDQUFBLFNBQUFELGFBQUEsR0FBQWMsQ0FBQSxVQUFBUixDQUFBLE1BQUFOLGFBQUEsR0FBQWMsQ0FBQSxVQXBHd0M4QyxDQUFBLFFBQUEvQyxDQUFBLENBQUE4TCxXQUFBLEVBQW9CLGtCQUFBOUwsQ0FBQSxDQUFBc00sa0JBQUEsRUFBdUMsdUJBQUF0TSxDQUFBLENBQUF3TSx1QkFBQSxFQUMxRCw0QkFBQXJOLGFBQUEsR0FBQWMsQ0FBQSxVQUFBeUYsQ0FBQSxNQUFBMUYsQ0FBQSxDQUFBb04seUJBQUEsS0FBQWpPLGFBQUEsR0FBQWMsQ0FBQSxjQUNxQixtQkFBQUQsQ0FBQSxDQUFBdU0sMkJBQUEsRUFLekV2SixDQUFBLElBQUFPLENBQUEsQ0FBQXZELENBQUEsQ0FBQXdNLHVCQUFBLEVBQUFyTixhQUFBLEdBQUFjLENBQUEsY0FBQWQsYUFBQSxHQUFBYyxDQUFBLGVBUUErQyxDQUFBLEdBQUFPLENBQUEsQ0FBQXZELENBQUEsQ0FBQThLLG9CQUFBLEVBQUEzTCxhQUFBLEdBQUFjLENBQUEsY0FBQWQsYUFBQSxHQUFBYyxDQUFBLGVBUXNDK0MsQ0FBQSxJQUFBRCxDQUFBLFlBQUEvQyxDQUFBLENBQUFnSCxRQUFBLEVBQXFCLGNBQUFoSCxDQUFBLENBQUFpSCxXQUFBLEVBQTRCLGdCQUFBakgsQ0FBQSxDQUFBc00sa0JBQUEsRUFDM0MsaUJBQUF0TSxDQUFBLENBQUFzUSxtQkFBQSxJQU9wQ3ROLENBQUEsSUFBQU8sQ0FBQSxDQUFBdkQsQ0FBQSxDQUFBc00sa0JBQUEsRUFBQW5OLGFBQUEsR0FBQWMsQ0FBQSxlQUFBZCxhQUFBLEdBQUFjLENBQUEsa0JBQUEyRixZQUFBLEVEWEF5QixDQUFBLENBQ0E4SixFQUFBLENBQ0F2TixFQUFBLENBQ0FtRixFQUFBLENBQ0FoQyxFQUFBLENBQWdCaEIsQ0FBQSxFQUFBQyxNQUFBOytEQUFBLEVBQUFrRSxlQUFBLE9BQUEvSyxhQUFBLEdBQUFDLENBQUEsY0FLWCxDQUFBRSxDQUFtQixjQUFBOE0sRUFBQSxJQUFBZ0YsbUJBQUEsRSIsImlnbm9yZUxpc3QiOltdfQ== \ No newline at end of file diff --git a/frontend/dist-instrumented/chunk-J6KRJBIG.js.map b/frontend/dist-instrumented/chunk-J6KRJBIG.js.map new file mode 100644 index 00000000..34c5f445 --- /dev/null +++ b/frontend/dist-instrumented/chunk-J6KRJBIG.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["src/app/features/main-layout/services/nav.service.ts", "src/app/core/services/breadcrumb.service.ts", "src/app/features/main-layout/components/topbar/topbar.component.ts", "src/app/features/main-layout/components/topbar/topbar.component.html", "src/app/features/main-layout/components/sidebar/sidebar.component.ts", "src/app/features/main-layout/components/sidebar/sidebar.component.html", "src/app/features/notification/components/notification-topbar-panel-component/notification-topbar-panel-component.ts", "src/app/features/notification/components/notification-topbar-panel-component/notification-topbar-panel-component.html", "src/app/features/main-layout/main-layout.component.ts", "src/app/features/main-layout/main-layout.component.html"], + "sourcesContent": ["import { Injectable } from '@angular/core';\nimport { UserRole } from '../../../core/models/user-role.enum';\nimport { NavItem } from '../../../core/models/nav-item.model';\n\n@Injectable({ providedIn: 'root' })\nexport class NavService {\n public getNavItems(role: UserRole): NavItem[]{\n //routes provvisorie, da definire e confrontare con app.routes.ts\n const NavItemList : NavItem[] = [\n {\n label: \"Dashboard\",\n icon: \"dashboard.png\",\n route: \"dashboard\"\n },\n {\n label: \"Notifiche\",\n icon: \"notification.png\",\n route: \"notifications\"\n },\n {\n label: \"Dispositivi\",\n icon: \"device.png\",\n route: \"apartment-monitor\"\n },\n {\n label: \"Gestione Allarmi\",\n icon: \"alarm-management.png\",\n route: \"alarms/alarm-management\"\n },\n {\n label: \"Storico Allarmi\",\n icon: \"alarm-history.png\",\n route: \"alarms/alarm-history\"\n },\n {\n label: \"Configurazione Allarmi\",\n icon: \"alarm-configuration.png\",\n route: \"alarms/alarm-configuration\",\n requiredRole: UserRole.AMMINISTRATORE\n },\n {\n label: \"Analytics\",\n icon: \"analytics.png\",\n route: \"analytics\"\n },\n {\n label: \"Gestione Reparti\",\n icon: \"ward-management.png\",\n route: \"ward-management\",\n requiredRole: UserRole.AMMINISTRATORE\n },\n {\n label: \"Gestione Utenti\",\n icon: \"user-management.png\",\n route: \"user-management\",\n requiredRole: UserRole.AMMINISTRATORE\n },\n ];\n\n let filteredList = NavItemList;\n if(role === UserRole.OPERATORE_SANITARIO)\n filteredList = NavItemList.filter(n => !n.requiredRole); // !undefined = true\n\n return filteredList;\n }\n}\n", "import { Injectable } from '@angular/core';\r\nimport { Router, NavigationEnd, ActivatedRoute } from '@angular/router';\r\nimport { filter, map, startWith } from 'rxjs/operators';\r\nimport { Observable } from 'rxjs';\r\n\r\nexport interface Breadcrumb {\r\n label: string;\r\n url: string;\r\n}\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class BreadcrumbService {\r\n breadcrumbs$: Observable;\r\n\r\n constructor(private readonly router: Router, private readonly activatedRoute: ActivatedRoute) {\r\n this.breadcrumbs$ = this.router.events.pipe(\r\n filter(e => e instanceof NavigationEnd),\r\n startWith(null),\r\n map(() => this.buildBreadcrumbs(this.activatedRoute.root))\r\n );\r\n }\r\n\r\n private buildBreadcrumbs(\r\n route: ActivatedRoute,\r\n url = '',\r\n crumbs: Breadcrumb[] = []\r\n ): Breadcrumb[] {\r\n for (const child of route.children) {\r\n const segment = child.snapshot.url.map(s => s.path).join('/');\r\n const fullUrl = segment ? `${url}/${segment}` : url;\r\n const label = child.snapshot.data['breadcrumb'];\r\n\r\n if (label && segment) {\r\n crumbs.push({ label, url: fullUrl });\r\n }\r\n\r\n this.buildBreadcrumbs(child, fullUrl, crumbs);\r\n }\r\n\r\n return crumbs;\r\n }\r\n}", "import { Component,EventEmitter, Input, Output } from '@angular/core';\nimport { UserInfo } from '../../../../core/models/user-info.model';\nimport { AsyncPipe } from '@angular/common';\nimport { Breadcrumb, BreadcrumbService } from '../../../../core/services/breadcrumb.service';\nimport { Observable } from 'rxjs';\nimport { RouterModule } from '@angular/router';\n\n@Component({ \n selector: 'app-topbar', \n standalone: true,\n imports:[AsyncPipe, RouterModule],\n templateUrl: './topbar.component.html',\n styleUrl: './topbar.component.css'})\nexport class TopbarComponent {\n @Input() user!: UserInfo;\n @Input() isProfileActive = false;\n @Input() isNotificationActive = false;\n @Input() unreadNotificationsCount = 0;\n @Input() showVimarWarning = false;\n @Output() profileClicked = new EventEmitter();\n @Output() logoutClicked = new EventEmitter();\n @Output() hamburgerClicked = new EventEmitter();\n @Output() notificationClicked = new EventEmitter();\n breadcrumbs$: Observable;\n\n constructor(private readonly breadcrumbService: BreadcrumbService) {\n this.breadcrumbs$ = this.breadcrumbService.breadcrumbs$;\n }\n\n public onNotificationClick(): void {\n this.notificationClicked.emit();\n }\n\n public onProfileClick(): void {\n this.profileClicked.emit();\n }\n}", "
\n
\n
\n \n \"\"\n
\n

View4Life

\n \n
\n
\n\n
\n \n\n \n
\n
\n\n @if (showVimarWarning) {\n
\n \n Account da associare a MyVimar\n \n
\n }\n\n
", "import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { NavItem } from '../../../../core/models/nav-item.model';\nimport { RouterLink, RouterLinkActive } from '@angular/router';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'app-sidebar',\n standalone: true,\n imports: [\n RouterLink,\n RouterLinkActive,\n CommonModule,\n ],\n templateUrl: './sidebar.component.html',\n styleUrl: './sidebar.component.css'\n})\nexport class SidebarComponent {\n @Input() navItems!: NavItem[];\n @Input() isCollapsed!: boolean;\n @Input() isProfileMode = false;\n @Input() canOpenProfile = false;\n @Output() profileClicked = new EventEmitter();\n @Output() collapsed = new EventEmitter();\n @Output() navItemSelected = new EventEmitter();\n}\n", "", "import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\nimport { DatePipe } from '@angular/common';\nimport { NotificationEvent } from '../../models/notification-event.model';\nimport { AlarmPriority } from '../../../../core/alarm/models/alarm-priority.enum';\nimport {\n extractPriorityFromNotificationTitle,\n stripPriorityFromNotificationTitle,\n} from '../../../../core/notification/utils/notification-priority-display.util';\n\n@Component({\n selector: 'app-notification-topbar-panel-component',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [DatePipe],\n templateUrl: './notification-topbar-panel-component.html',\n styleUrl: './notification-topbar-panel-component.css',\n})\nexport class NotificationTopbarPanelComponent {\n @Input() notifications: ReadonlyArray = [];\n @Output() viewAllClicked = new EventEmitter();\n @Output() notificationSelected = new EventEmitter();\n @Output() removeClicked = new EventEmitter();\n @Output() clearAllClicked = new EventEmitter();\n\n private readonly maxVisibleNotifications = 6;\n\n public get visibleNotifications(): ReadonlyArray {\n return this.notifications.slice(0, this.maxVisibleNotifications);\n }\n\n public onNotificationSelected(notificationId: string): void {\n this.notificationSelected.emit(notificationId);\n }\n\n public onRemove(notificationId: string, event?: Event): void {\n event?.stopPropagation();\n this.removeClicked.emit(notificationId);\n }\n\n public onClearAll(): void {\n this.clearAllClicked.emit();\n }\n\n public getPriority(notification: NotificationEvent): AlarmPriority | null {\n return extractPriorityFromNotificationTitle(notification.title);\n }\n\n public getDisplayTitle(notification: NotificationEvent): string {\n return stripPriorityFromNotificationTitle(notification.title) || notification.title;\n }\n\n public getPrioritySymbol(priority: AlarmPriority): string {\n switch (priority) {\n case AlarmPriority.WHITE:\n return 'i';\n case AlarmPriority.GREEN:\n return '\\u2022';\n case AlarmPriority.ORANGE:\n return '!';\n case AlarmPriority.RED:\n return '\\u25b2';\n default:\n return '';\n }\n }\n\n public getPriorityBubbleClass(priority: AlarmPriority): string {\n switch (priority) {\n case AlarmPriority.WHITE:\n return 'border-slate-400 text-slate-700';\n case AlarmPriority.GREEN:\n return 'border-emerald-500 text-emerald-700';\n case AlarmPriority.ORANGE:\n return 'border-amber-500 text-amber-700';\n case AlarmPriority.RED:\n return 'border-rose-500 text-rose-700';\n default:\n return 'border-slate-400 text-slate-700';\n }\n }\n\n public getPrioritySymbolClass(priority: AlarmPriority): string {\n switch (priority) {\n case AlarmPriority.WHITE:\n return 'text-slate-600';\n case AlarmPriority.GREEN:\n return 'text-emerald-600';\n case AlarmPriority.ORANGE:\n return 'text-amber-600';\n case AlarmPriority.RED:\n return 'text-rose-600';\n default:\n return 'text-slate-600';\n }\n }\n}\n", "
\n
\n

Notifiche

\n
\n @if (visibleNotifications.length > 0) {\n \n }\n \n
\n
\n\n @if (visibleNotifications.length === 0) {\n

Nessuna notifica disponibile.

\n } @else {\n
    \n @for (notification of visibleNotifications; track notification.notificationId) {\n
  • \n
    \n \n
    \n @if (getPriority(notification); as notificationPriority) {\n \n \n {{ notificationPriority }}\n \n \n {{ getPrioritySymbol(notificationPriority) }}\n \n \n }\n

    {{ getDisplayTitle(notification) }}

    \n
    \n \n \n \n \n \n \n \n
    \n
  • \n }\n
\n }\n
\n", "import { Component, inject, ChangeDetectionStrategy, OnDestroy, OnInit, ChangeDetectorRef, ElementRef, ViewChild, AfterViewInit } from '@angular/core';\nimport { NavItem } from '../../core/models/nav-item.model';\nimport { Observable, Subject, take, takeUntil } from 'rxjs';\nimport { NavService } from './services/nav.service';\nimport { InternalAuthService } from '../../core/services/internal-auth.service';\nimport { AlarmStateService } from '../../core/alarm/services/alarm-state.service';\nimport { TopbarComponent } from './components/topbar/topbar.component';\nimport { SidebarComponent } from './components/sidebar/sidebar.component';\nimport { CommonModule } from '@angular/common';\nimport { UserRole } from '../../core/models/user-role.enum';\nimport { Router, RouterOutlet } from '@angular/router';\nimport { UserInfo } from '../../core/models/user-info.model';\nimport { NotificationEvent } from '../notification/models/notification-event.model';\nimport { NotificationTopbarPanelComponent } from '../notification/components/notification-topbar-panel-component/notification-topbar-panel-component';\nimport { MyVimarAccount } from '../my-vimar-integration/models/my-vimar-account.model';\nimport { IVimarCloudApiService, VIMAR_CLOUD_API_SERVICE } from '../../core/services/vimar-cloud-api.service.interface';\nimport { AlarmManagementRefreshService } from '../../core/alarm/services/alarm-management-refresh.service';\n@Component({\n selector: 'app-main-layout',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n RouterOutlet,\n TopbarComponent,\n NotificationTopbarPanelComponent,\n SidebarComponent\n ],\n templateUrl: './main-layout.component.html',\n styleUrl: './main-layout.component.css'\n})\nexport class MainLayoutComponent implements OnInit, OnDestroy, AfterViewInit {\n @ViewChild('topbarRef', { read: ElementRef }) topbarRef!: ElementRef;\n public isCollapsed: boolean = true;\n public navItems!: NavItem[];\n public isProfilePanelOpen = false;\n public isAdmin = false;\n public isVimarStatusLoading = false;\n public vimarStatusError = '';\n public vimarAccount: MyVimarAccount | null = null;\n public showVimarAssociationWarning = false;\n public isNotificationPanelOpen = false;\n public realtimeToastMessage: string | null = null;\n public realtimeToastKind: 'alert' | 'success' = 'alert';\n\n private readonly navService = inject(NavService);\n private readonly internalAuthService = inject(InternalAuthService);\n private readonly alarmStateService = inject(AlarmStateService);\n private readonly alarmManagementRefreshService = inject(AlarmManagementRefreshService);\n private readonly router = inject(Router);\n private readonly myVimarService = inject(VIMAR_CLOUD_API_SERVICE, { optional: true }) as IVimarCloudApiService | null;\n public readonly unreadNotificationsCount$ = this.alarmStateService.getUnreadNotificationsCount$();\n public readonly notifications$: Observable = this.alarmStateService.getNotifications$();\n private readonly cdr = inject(ChangeDetectorRef);\n private readonly destroy$ = new Subject();\n private toastTimer: ReturnType | null = null;\n private latestRealtimeNotificationId: string | null = null;\n\n public currentUser: UserInfo = {\n username: '',\n firstName: '',\n lastName: '',\n role: UserRole.OPERATORE_SANITARIO\n };\n\n public activeAlarmCount$: Observable = this.alarmStateService.getActiveAlarmsCount$();\n private resizeObserver!: ResizeObserver;\n\n\n public ngOnInit(): void {\n this.bindRealtimeAlarmNotifications();\n\n this.internalAuthService\n .getCurrentUser$()\n .pipe(take(1), takeUntil(this.destroy$))\n .subscribe((session) => {\n if (!session) {\n this.navItems = [];\n void this.router.navigate(['/auth/login']);\n return;\n }\n\n this.currentUser = {\n username: session.username,\n firstName: session.username,\n lastName: '',\n role: session.role,\n };\n this.isAdmin = session.role === UserRole.AMMINISTRATORE;\n this.navItems = this.navService.getNavItems(session.role);\n\n if (this.isAdmin) {\n this.loadVimarStatus();\n }\n\n this.cdr.markForCheck();\n });\n }\n\n public ngAfterViewInit(): void {\n if (typeof ResizeObserver === 'undefined' || !this.topbarRef?.nativeElement) {\n return;\n }\n\n this.resizeObserver = new ResizeObserver(entries => {\n for (const entry of entries) {\n const h = entry.contentRect.height;\n document.documentElement.style.setProperty('--topbar-height', `${h}px`);\n }\n });\n this.resizeObserver.observe(this.topbarRef.nativeElement);\n }\n\n public ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n this.clearToastTimer();\n this.resizeObserver?.disconnect();\n }\n\n public toggleSidebar(): void {\n this.isCollapsed = !this.isCollapsed;\n }\n\n public toggleProfilePanel(): void {\n this.closeNotificationPanel();\n this.isProfilePanelOpen = !this.isProfilePanelOpen;\n\n if (this.isProfilePanelOpen && this.isAdmin) {\n this.loadVimarStatus();\n }\n }\n\n public closeProfilePanel(): void {\n this.isProfilePanelOpen = false;\n }\n\n public onNavItemSelected(route: string): void {\n this.closeProfilePanel();\n this.closeNotificationPanel();\n\n if (route !== 'alarms/alarm-management') {\n return;\n }\n\n if (!this.router.url.includes('/alarms/alarm-management')) {\n return;\n }\n\n this.alarmManagementRefreshService.requestRefresh();\n }\n\n public goToVimarLink(): void {\n void this.router.navigate(['/vimar-link']);\n }\n\n public toggleNotificationPanel(): void {\n this.closeProfilePanel();\n this.isNotificationPanelOpen = !this.isNotificationPanelOpen;\n }\n\n public closeNotificationPanel(): void {\n this.isNotificationPanelOpen = false;\n }\n\n public openNotificationsArchive(): void {\n this.closeNotificationPanel();\n void this.router.navigate(['/notifications']);\n }\n\n public openNotificationsArchiveFromPreview(notificationId: string): void {\n this.closeNotificationPanel();\n\n void this.router.navigate(['/notifications'], {\n queryParams: { focus: notificationId },\n });\n }\n\n public removeTopbarNotification(notificationId: string): void {\n this.alarmStateService.removeNotification(notificationId);\n }\n\n public clearTopbarNotifications(): void {\n this.alarmStateService.clearNotifications();\n }\n\n public logout(): void {\n this.closeNotificationPanel();\n this.internalAuthService.logoutFromBackend().subscribe(() => {\n void this.router.navigate(['/auth/login']);\n });\n }\n\n public canOpenProfilePanel(): boolean {\n return true;\n }\n\n private bindRealtimeAlarmNotifications(): void {\n this.alarmStateService\n .getNotifications$()\n .pipe(takeUntil(this.destroy$))\n .subscribe((notifications) => {\n const latest = notifications[0];\n if (!latest || latest.notificationId === this.latestRealtimeNotificationId) {\n return;\n }\n\n this.latestRealtimeNotificationId = latest.notificationId;\n this.openRealtimeNotificationPanel();\n });\n }\n\n private openRealtimeNotificationPanel(): void {\n this.clearToastTimer();\n this.realtimeToastMessage = null;\n this.closeProfilePanel();\n\n if (this.isNotificationPanelOpen) {\n this.cdr.markForCheck();\n return;\n }\n\n this.isNotificationPanelOpen = true;\n this.cdr.markForCheck();\n }\n\n private showRealtimeToast(message: string, kind: 'alert' | 'success'): void {\n this.clearToastTimer();\n this.realtimeToastMessage = message;\n this.realtimeToastKind = kind;\n this.cdr.markForCheck();\n\n this.toastTimer = setTimeout(() => {\n this.realtimeToastMessage = null;\n this.cdr.markForCheck();\n this.toastTimer = null;\n }, 5000);\n }\n\n private clearToastTimer(): void {\n if (!this.toastTimer) {\n return;\n }\n\n clearTimeout(this.toastTimer);\n this.toastTimer = null;\n }\n\n private loadVimarStatus(): void {\n if (!this.myVimarService) {\n this.vimarAccount = { email: '', isLinked: false };\n this.vimarStatusError = 'Servizio MyVimar non disponibile in questa sezione.';\n this.isVimarStatusLoading = false;\n this.showVimarAssociationWarning = false;\n this.cdr.markForCheck();\n return;\n }\n\n this.isVimarStatusLoading = true;\n this.vimarStatusError = '';\n this.cdr.markForCheck();\n\n this.myVimarService.getLinkedAccount().subscribe({\n next: (account) => {\n this.vimarAccount = account;\n this.isVimarStatusLoading = false;\n this.showVimarAssociationWarning = this.canOpenProfilePanel() && !account.isLinked;\n this.cdr.markForCheck();\n },\n error: () => {\n this.vimarAccount = { email: '', isLinked: false };\n this.vimarStatusError = 'Impossibile recuperare lo stato del collegamento MyVimar.';\n this.isVimarStatusLoading = false;\n this.showVimarAssociationWarning = false;\n this.cdr.markForCheck();\n }\n });\n }\n}", "\n\n\n\n@if (isNotificationPanelOpen) {\n\n}\n\n@if (realtimeToastMessage) {\n
\n

{{ realtimeToastMessage }}

\n
\n}\n\n
\n\n \n \n\n
\n @if (isProfilePanelOpen) {\n
\n \n
\n
\n

Area Utente

\n

{{ currentUser.firstName }} {{\n currentUser.lastName }}

\n

Username: {{ currentUser.username }}

\n
\n\n @if (isAdmin) {\n \n }\n
\n\n
\n @if (isAdmin) {\n
\n

Stato Collegamento\n

\n\n @if (isVimarStatusLoading) {\n

Caricamento stato account...

\n }\n\n @if (!isVimarStatusLoading && vimarStatusError) {\n

{{\n vimarStatusError }}

\n }\n\n @if (!isVimarStatusLoading && !vimarStatusError && vimarAccount?.isLinked) {\n \n Utente collegato{{ vimarAccount?.email ? ': ' + vimarAccount?.email : '' }}\n
\n }\n\n @if (!isVimarStatusLoading && !vimarStatusError && !vimarAccount?.isLinked) {\n \n Account non ancora collegato.\n
\n }\n \n }\n\n
\n

Sessione

\n

Gestisci rapidamente la sessione utente dall'area\n profilo.

\n\n \n
\n \n \n \n } @else {\n \n }\n \n\n"], + "mappings": "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", + "names": ["NavService", "getNavItems", "role", "NavItemList", "label", "icon", "route", "requiredRole", "UserRole", "AMMINISTRATORE", "filteredList", "OPERATORE_SANITARIO", "filter", "n", "factory", "\u0275fac", "providedIn", "BreadcrumbService", "router", "activatedRoute", "breadcrumbs$", "constructor", "events", "pipe", "filter", "e", "NavigationEnd", "startWith", "map", "buildBreadcrumbs", "root", "route", "url", "crumbs", "child", "children", "segment", "snapshot", "s", "path", "join", "fullUrl", "label", "data", "push", "\u0275\u0275inject", "Router", "ActivatedRoute", "factory", "\u0275fac", "providedIn", "\u0275\u0275elementStart", "\u0275\u0275text", "\u0275\u0275elementEnd", "\u0275\u0275property", "crumb_r1", "url", "\u0275\u0275advance", "\u0275\u0275textInterpolate", "label", "\u0275\u0275conditionalCreate", "TopbarComponent_For_12_Conditional_1_Template", "TopbarComponent_For_12_Conditional_2_Template", "\u0275\u0275conditional", "\u0275$index_21_r2", "\u0275$count_21_r3", "\u0275\u0275textInterpolate1", "ctx_r3", "unreadNotificationsCount", "TopbarComponent", "breadcrumbService", "user", "isProfileActive", "isNotificationActive", "showVimarWarning", "profileClicked", "EventEmitter", "logoutClicked", "hamburgerClicked", "notificationClicked", "breadcrumbs$", "constructor", "onNotificationClick", "emit", "onProfileClick", "\u0275\u0275directiveInject", "BreadcrumbService", "selectors", "inputs", "outputs", "decls", "vars", "consts", "template", "rf", "ctx", "\u0275\u0275listener", "\u0275\u0275element", "\u0275\u0275repeaterCreate", "TopbarComponent_For_12_Template", "_forTrack0", "TopbarComponent_Conditional_17_Template", "TopbarComponent_Conditional_21_Template", "\u0275\u0275repeater", "\u0275\u0275pipeBind1", "\u0275\u0275classProp", "RouterModule", "RouterLink", "AsyncPipe", "styles", "\u0275\u0275element", "\u0275\u0275property", "item_r2", "icon", "\u0275\u0275sanitizeUrl", "\u0275\u0275text", "\u0275\u0275elementStart", "\u0275\u0275listener", "\u0275\u0275restoreView", "_r1", "$implicit", "ctx_r2", "\u0275\u0275nextContext", "\u0275\u0275resetView", "navItemSelected", "emit", "route", "\u0275\u0275template", "SidebarComponent_For_5_img_4_Template", "SidebarComponent_For_5_ng_template_5_Template", "\u0275\u0275templateRefExtractor", "\u0275\u0275elementEnd", "\u0275\u0275advance", "\u0275\u0275classProp", "isProfileMode", "rla_r4", "isActive", "fallback_r5", "\u0275\u0275textInterpolate", "label", "SidebarComponent", "navItems", "isCollapsed", "canOpenProfile", "profileClicked", "EventEmitter", "collapsed", "selectors", "inputs", "outputs", "decls", "vars", "consts", "template", "rf", "ctx", "\u0275\u0275repeaterCreate", "SidebarComponent_For_5_Template", "_forTrack0", "SidebarComponent_ForEmpty_6_Template", "\u0275\u0275repeater", "RouterLink", "RouterLinkActive", "CommonModule", "NgIf", "styles", "\u0275\u0275domElementStart", "\u0275\u0275domListener", "\u0275\u0275restoreView", "_r1", "ctx_r1", "\u0275\u0275nextContext", "\u0275\u0275resetView", "onClearAll", "\u0275\u0275text", "\u0275\u0275domElementEnd", "\u0275\u0275advance", "\u0275\u0275classMap", "getPriorityBubbleClass", "notificationPriority_r5", "\u0275\u0275textInterpolate1", "getPrioritySymbolClass", "getPrioritySymbol", "notification_r4", "_r3", "$implicit", "onNotificationSelected", "notificationId", "\u0275\u0275conditionalCreate", "NotificationTopbarPanelComponent_Conditional_9_For_2_Conditional_4_Template", "$event", "onRemove", "\u0275\u0275domElement", "\u0275\u0275conditional", "tmp_12_0", "getPriority", "\u0275\u0275textInterpolate", "getDisplayTitle", "\u0275\u0275pipeBind2", "sentAt", "\u0275\u0275repeaterCreate", "NotificationTopbarPanelComponent_Conditional_9_For_2_Template", "_forTrack0", "\u0275\u0275repeater", "visibleNotifications", "NotificationTopbarPanelComponent", "notifications", "viewAllClicked", "EventEmitter", "notificationSelected", "removeClicked", "clearAllClicked", "maxVisibleNotifications", "slice", "emit", "event", "stopPropagation", "notification", "extractPriorityFromNotificationTitle", "title", "stripPriorityFromNotificationTitle", "priority", "AlarmPriority", "WHITE", "GREEN", "ORANGE", "RED", "selectors", "inputs", "outputs", "decls", "vars", "consts", "template", "rf", "ctx", "NotificationTopbarPanelComponent_Conditional_5_Template", "NotificationTopbarPanelComponent_Conditional_8_Template", "NotificationTopbarPanelComponent_Conditional_9_Template", "length", "DatePipe", "styles", "changeDetection", "\u0275\u0275elementStart", "\u0275\u0275listener", "\u0275\u0275restoreView", "_r2", "ctx_r2", "\u0275\u0275nextContext", "\u0275\u0275resetView", "openNotificationsArchive", "$event", "openNotificationsArchiveFromPreview", "removeTopbarNotification", "clearTopbarNotifications", "\u0275\u0275elementEnd", "\u0275\u0275property", "\u0275\u0275pipeBind1", "notifications$", "\u0275\u0275pureFunction0", "_c1", "\u0275\u0275text", "\u0275\u0275classProp", "realtimeToastKind", "\u0275\u0275advance", "\u0275\u0275textInterpolate", "realtimeToastMessage", "_r5", "goToVimarLink", "vimarStatusError", "\u0275\u0275textInterpolate1", "vimarAccount", "email", "\u0275\u0275conditionalCreate", "MainLayoutComponent_Conditional_8_Conditional_12_Conditional_3_Template", "MainLayoutComponent_Conditional_8_Conditional_12_Conditional_4_Template", "MainLayoutComponent_Conditional_8_Conditional_12_Conditional_5_Template", "MainLayoutComponent_Conditional_8_Conditional_12_Conditional_6_Template", "\u0275\u0275conditional", "isVimarStatusLoading", "isLinked", "MainLayoutComponent_Conditional_8_Conditional_10_Template", "MainLayoutComponent_Conditional_8_Conditional_12_Template", "_r4", "logout", "\u0275\u0275element", "\u0275\u0275textInterpolate2", "currentUser", "firstName", "lastName", "username", "isAdmin", "MainLayoutComponent", "topbarRef", "isCollapsed", "navItems", "isProfilePanelOpen", "showVimarAssociationWarning", "isNotificationPanelOpen", "navService", "inject", "NavService", "internalAuthService", "InternalAuthService", "alarmStateService", "AlarmStateService", "alarmManagementRefreshService", "AlarmManagementRefreshService", "router", "Router", "myVimarService", "VIMAR_CLOUD_API_SERVICE", "optional", "unreadNotificationsCount$", "getUnreadNotificationsCount$", "getNotifications$", "cdr", "ChangeDetectorRef", "destroy$", "Subject", "toastTimer", "latestRealtimeNotificationId", "role", "UserRole", "OPERATORE_SANITARIO", "activeAlarmCount$", "getActiveAlarmsCount$", "resizeObserver", "ngOnInit", "bindRealtimeAlarmNotifications", "getCurrentUser$", "pipe", "take", "takeUntil", "subscribe", "session", "navigate", "AMMINISTRATORE", "getNavItems", "loadVimarStatus", "markForCheck", "ngAfterViewInit", "ResizeObserver", "nativeElement", "entries", "entry", "h", "contentRect", "height", "document", "documentElement", "style", "setProperty", "observe", "ngOnDestroy", "next", "complete", "clearToastTimer", "disconnect", "toggleSidebar", "toggleProfilePanel", "closeNotificationPanel", "closeProfilePanel", "onNavItemSelected", "route", "url", "includes", "requestRefresh", "toggleNotificationPanel", "notificationId", "queryParams", "focus", "removeNotification", "clearNotifications", "logoutFromBackend", "canOpenProfilePanel", "notifications", "latest", "openRealtimeNotificationPanel", "showRealtimeToast", "message", "kind", "setTimeout", "clearTimeout", "getLinkedAccount", "account", "error", "selectors", "viewQuery", "rf", "ctx", "ElementRef", "MainLayoutComponent_Conditional_3_Template", "MainLayoutComponent_Conditional_4_Template", "i0", "_r1", "MainLayoutComponent_Conditional_8_Template", "MainLayoutComponent_Conditional_9_Template", "CommonModule", "RouterOutlet", "TopbarComponent", "NotificationTopbarPanelComponent", "SidebarComponent", "AsyncPipe", "styles", "changeDetection"] +} diff --git a/frontend/dist-instrumented/chunk-J6WV5SBY.js b/frontend/dist-instrumented/chunk-J6WV5SBY.js new file mode 100644 index 00000000..27ceb29d --- /dev/null +++ b/frontend/dist-instrumented/chunk-J6WV5SBY.js @@ -0,0 +1,3 @@ +function cov_qw1hxak5s(){var path="/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-J6WV5SBY.js";var hash="a09c7647ec9610505bc8e106941e01e177ec5d02";var global=new Function("return this")();var gcv="__coverage__";var coverageData={path:"/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-J6WV5SBY.js",statementMap:{"0":{start:{line:1,column:338},end:{line:1,column:484}},"1":{start:{line:1,column:415},end:{line:1,column:480}},"2":{start:{line:1,column:453},end:{line:1,column:479}}},fnMap:{"0":{name:"(anonymous_0)",decl:{start:{line:1,column:411},end:{line:1,column:412}},loc:{start:{line:1,column:415},end:{line:1,column:480}},line:1},"1":{name:"(anonymous_1)",decl:{start:{line:1,column:450},end:{line:1,column:451}},loc:{start:{line:1,column:453},end:{line:1,column:479}},line:1}},branchMap:{},s:{"0":0,"1":0,"2":0},f:{"0":0,"1":0},b:{},inputSourceMap:{version:3,sources:["src/app/features/alarm-configuration/alarm-configuration.routes.ts"],sourcesContent:["import { Routes } from '@angular/router';\nimport { authGuard } from '../../core/guards/auth.guard';\nimport { AlarmConfigStateService } from './services/alarm-config-state.service';\n\nexport const ALARM_CONFIGURATION_ROUTES: Routes = [\n {\n path: '',\n canActivate: [authGuard],\n providers: [AlarmConfigStateService],\n children: [\n {\n path: '',\n loadComponent: () =>\n import('./components/alarm-config-page/alarm-config-page.component').then((m) => m.AlarmConfigPageComponent),\n },\n ],\n }\n];\n"],mappings:"4UAIO,IAAMA,EAAqC,CAChD,CACEC,KAAM,GACNC,YAAa,CAACC,CAAS,EACvBC,UAAW,CAACC,CAAuB,EACnCC,SAAU,CACR,CACEL,KAAM,GACNM,cAAeA,IACb,OAAO,qBAA4D,EAAEC,KAAMC,GAAMA,EAAEC,wBAAwB,EAC9G,EAEJ",names:["ALARM_CONFIGURATION_ROUTES","path","canActivate","authGuard","providers","AlarmConfigStateService","children","loadComponent","then","m","AlarmConfigPageComponent"]},_coverageSchema:"1a1c01bbd47fc00a2c39e90264f33305004495a9",hash:"a09c7647ec9610505bc8e106941e01e177ec5d02"};var coverage=global[gcv]||(global[gcv]={});if(!coverage[path]||coverage[path].hash!==hash){coverage[path]=coverageData;}var actualCoverage=coverage[path];{// @ts-ignore +cov_qw1hxak5s=function(){return actualCoverage;};}return actualCoverage;}cov_qw1hxak5s();import{c as t}from"./chunk-MSNAYSOW.js";import{a as o}from"./chunk-K2WBT5ZC.js";import"./chunk-FYGTVJAL.js";import"./chunk-CFHT7CZE.js";import"./chunk-VIBKONAW.js";import"./chunk-JOEDXNZS.js";import"./chunk-65RKWSY3.js";import"./chunk-2S5V5XEE.js";import"./chunk-F6OGAIBI.js";import"./chunk-RYTNMYZW.js";import"./chunk-VCZGUBMY.js";var n=(cov_qw1hxak5s().s[0]++,[{path:"",canActivate:[o],providers:[t],children:[{path:"",loadComponent:()=>{cov_qw1hxak5s().f[0]++;cov_qw1hxak5s().s[1]++;return import("./chunk-L7QG5RI3.js").then(r=>{cov_qw1hxak5s().f[1]++;cov_qw1hxak5s().s[2]++;return r.AlarmConfigPageComponent;});}}]}]);export{n as ALARM_CONFIGURATION_ROUTES};//# sourceMappingURL=chunk-J6WV5SBY.js.map +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJuIiwiY292X3F3MWh4YWs1cyIsInMiLCJwYXRoIiwiY2FuQWN0aXZhdGUiLCJvIiwicHJvdmlkZXJzIiwidCIsImNoaWxkcmVuIiwibG9hZENvbXBvbmVudCIsImYiLCJ0aGVuIiwiciIsIkFsYXJtQ29uZmlnUGFnZUNvbXBvbmVudCIsIkFMQVJNX0NPTkZJR1VSQVRJT05fUk9VVEVTIl0sInNvdXJjZXMiOlsic3JjL2FwcC9mZWF0dXJlcy9hbGFybS1jb25maWd1cmF0aW9uL2FsYXJtLWNvbmZpZ3VyYXRpb24ucm91dGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJvdXRlcyB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBhdXRoR3VhcmQgfSBmcm9tICcuLi8uLi9jb3JlL2d1YXJkcy9hdXRoLmd1YXJkJztcbmltcG9ydCB7IEFsYXJtQ29uZmlnU3RhdGVTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9hbGFybS1jb25maWctc3RhdGUuc2VydmljZSc7XG5cbmV4cG9ydCBjb25zdCBBTEFSTV9DT05GSUdVUkFUSU9OX1JPVVRFUzogUm91dGVzID0gW1xuICB7XG4gICAgcGF0aDogJycsXG4gICAgY2FuQWN0aXZhdGU6IFthdXRoR3VhcmRdLFxuICAgIHByb3ZpZGVyczogW0FsYXJtQ29uZmlnU3RhdGVTZXJ2aWNlXSxcbiAgICBjaGlsZHJlbjogW1xuICAgICAge1xuICAgICAgICBwYXRoOiAnJyxcbiAgICAgICAgbG9hZENvbXBvbmVudDogKCkgPT5cbiAgICAgICAgICBpbXBvcnQoJy4vY29tcG9uZW50cy9hbGFybS1jb25maWctcGFnZS9hbGFybS1jb25maWctcGFnZS5jb21wb25lbnQnKS50aGVuKChtKSA9PiBtLkFsYXJtQ29uZmlnUGFnZUNvbXBvbmVudCksXG4gICAgICB9LFxuICAgIF0sXG4gIH1cbl07XG4iXSwibWFwcGluZ3MiOiI7cWFBSU8sR0FBTSxDQUFBQSxDQUFBLEVBQUFDLGFBQUEsR0FBQUMsQ0FBQSxNQUFxQyxDQUNoRCxDQUNFQyxJQUFBLENBQU0sR0FDTkMsV0FBQSxDQUFhLENBQUNDLENBQVMsRUFDdkJDLFNBQUEsQ0FBVyxDQUFDQyxDQUF1QixFQUNuQ0MsUUFBQSxDQUFVLENBQ1IsQ0FDRUwsSUFBQSxDQUFNLEdBQ05NLGFBQUEsQ0FBZUEsQ0FBQSxHQUNiLENBQUFSLGFBQUEsR0FBQVMsQ0FBQSxLQUFBVCxDQUFBLGdCQUFBQyxDQUFBLG9CQUFPLHFCQUE0RCxFQUFFUyxJQUFBLENBQU1DLENBQUEsRUFBTSxDQUFBWCxhQUFBLEdBQUFTLENBQUEsS0FBQVQsQ0FBQSxnQkFBQUMsQ0FBQSxhQUFBVSxDQUFBLENBQUVDLHdCQUF3QixDQUF4QixDQUF3QixJQUM5RyxFQUVKLFVBQUFiLENBQUEsSUFBQWMsMEJBQUEsRSIsImlnbm9yZUxpc3QiOltdfQ== \ No newline at end of file diff --git a/frontend/dist-instrumented/chunk-J6WV5SBY.js.map b/frontend/dist-instrumented/chunk-J6WV5SBY.js.map new file mode 100644 index 00000000..bf5c6f0e --- /dev/null +++ b/frontend/dist-instrumented/chunk-J6WV5SBY.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["src/app/features/alarm-configuration/alarm-configuration.routes.ts"], + "sourcesContent": ["import { Routes } from '@angular/router';\nimport { authGuard } from '../../core/guards/auth.guard';\nimport { AlarmConfigStateService } from './services/alarm-config-state.service';\n\nexport const ALARM_CONFIGURATION_ROUTES: Routes = [\n {\n path: '',\n canActivate: [authGuard],\n providers: [AlarmConfigStateService],\n children: [\n {\n path: '',\n loadComponent: () =>\n import('./components/alarm-config-page/alarm-config-page.component').then((m) => m.AlarmConfigPageComponent),\n },\n ],\n }\n];\n"], + "mappings": "4UAIO,IAAMA,EAAqC,CAChD,CACEC,KAAM,GACNC,YAAa,CAACC,CAAS,EACvBC,UAAW,CAACC,CAAuB,EACnCC,SAAU,CACR,CACEL,KAAM,GACNM,cAAeA,IACb,OAAO,qBAA4D,EAAEC,KAAMC,GAAMA,EAAEC,wBAAwB,EAC9G,EAEJ", + "names": ["ALARM_CONFIGURATION_ROUTES", "path", "canActivate", "authGuard", "providers", "AlarmConfigStateService", "children", "loadComponent", "then", "m", "AlarmConfigPageComponent"] +} diff --git a/frontend/dist-instrumented/chunk-JOEDXNZS.js b/frontend/dist-instrumented/chunk-JOEDXNZS.js new file mode 100644 index 00000000..89316228 --- /dev/null +++ b/frontend/dist-instrumented/chunk-JOEDXNZS.js @@ -0,0 +1,3 @@ +function cov_17nurg34p(){var path="/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-JOEDXNZS.js";var hash="d20398ab15892b94df55ddabbfb27bec99d294c4";var global=new Function("return this")();var gcv="__coverage__";var coverageData={path:"/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-JOEDXNZS.js",statementMap:{"0":{start:{line:1,column:53},end:{line:1,column:334}},"1":{start:{line:1,column:85},end:{line:1,column:90}},"2":{start:{line:1,column:108},end:{line:1,column:137}},"3":{start:{line:1,column:161},end:{line:1,column:205}},"4":{start:{line:1,column:223},end:{line:1,column:252}},"5":{start:{line:1,column:235},end:{line:1,column:251}},"6":{start:{line:1,column:271},end:{line:1,column:321}},"7":{start:{line:1,column:322},end:{line:1,column:330}}},fnMap:{"0":{name:"(anonymous_0)",decl:{start:{line:1,column:54},end:{line:1,column:55}},loc:{start:{line:1,column:58},end:{line:1,column:331}},line:1},"1":{name:"(anonymous_1)",decl:{start:{line:1,column:91},end:{line:1,column:92}},loc:{start:{line:1,column:107},end:{line:1,column:138}},line:1},"2":{name:"(anonymous_2)",decl:{start:{line:1,column:138},end:{line:1,column:139}},loc:{start:{line:1,column:160},end:{line:1,column:206}},line:1},"3":{name:"(anonymous_3)",decl:{start:{line:1,column:223},end:{line:1,column:224}},loc:{start:{line:1,column:234},end:{line:1,column:252}},line:1}},branchMap:{"0":{loc:{start:{line:1,column:246},end:{line:1,column:250}},type:"binary-expr",locations:[{start:{line:1,column:246},end:{line:1,column:247}},{start:{line:1,column:249},end:{line:1,column:250}}],line:1}},s:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0},f:{"0":0,"1":0,"2":0,"3":0},b:{"0":[0,0]},inputSourceMap:{version:3,sources:["src/app/core/alarm/services/alarm-management-refresh.service.ts"],sourcesContent:["import { Injectable } from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\n\n@Injectable({ providedIn: 'root' })\nexport class AlarmManagementRefreshService {\n private readonly refreshRequested$ = new Subject();\n\n public requestRefresh(): void {\n this.refreshRequested$.next();\n }\n\n public getRefreshRequested$(): Observable {\n return this.refreshRequested$.asObservable();\n }\n}\n"],mappings:"+CAIA,IAAaA,GAA6B,IAAA,CAApC,MAAOA,CAA6B,CACrBC,kBAAoB,IAAIC,EAElCC,gBAAc,CACjB,KAAKF,kBAAkBG,KAAI,CAC/B,CAEOC,sBAAoB,CACvB,OAAO,KAAKJ,kBAAkBK,aAAY,CAC9C,4CATSN,EAA6B,6BAA7BA,EAA6BO,QAA7BP,EAA6BQ,UAAAC,WADhB,MAAM,CAAA,SACnBT,CAA6B,GAAA",names:["AlarmManagementRefreshService","refreshRequested$","Subject","requestRefresh","next","getRefreshRequested$","asObservable","factory","\u0275fac","providedIn"]},_coverageSchema:"1a1c01bbd47fc00a2c39e90264f33305004495a9",hash:"d20398ab15892b94df55ddabbfb27bec99d294c4"};var coverage=global[gcv]||(global[gcv]={});if(!coverage[path]||coverage[path].hash!==hash){coverage[path]=coverageData;}var actualCoverage=coverage[path];{// @ts-ignore +cov_17nurg34p=function(){return actualCoverage;};}return actualCoverage;}cov_17nurg34p();import{L as r,d as t}from"./chunk-RYTNMYZW.js";var a=(cov_17nurg34p().s[0]++,(()=>{cov_17nurg34p().f[0]++;class e{refreshRequested$=(cov_17nurg34p().s[1]++,new t());requestRefresh(){cov_17nurg34p().f[1]++;cov_17nurg34p().s[2]++;this.refreshRequested$.next();}getRefreshRequested$(){cov_17nurg34p().f[2]++;cov_17nurg34p().s[3]++;return this.refreshRequested$.asObservable();}static ɵfac=(cov_17nurg34p().s[4]++,function(s){cov_17nurg34p().f[3]++;cov_17nurg34p().s[5]++;return new((cov_17nurg34p().b[0][0]++,s)||(cov_17nurg34p().b[0][1]++,e))();});static ɵprov=(cov_17nurg34p().s[6]++,r({token:e,factory:e.ɵfac,providedIn:"root"}));}cov_17nurg34p().s[7]++;return e;})());export{a};//# sourceMappingURL=chunk-JOEDXNZS.js.map +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJhIiwiY292XzE3bnVyZzM0cCIsInMiLCJmIiwiZSIsInJlZnJlc2hSZXF1ZXN0ZWQkIiwidCIsInJlcXVlc3RSZWZyZXNoIiwibmV4dCIsImdldFJlZnJlc2hSZXF1ZXN0ZWQkIiwiYXNPYnNlcnZhYmxlIiwiybVmYWMiLCJiIiwiybVwcm92IiwiciIsInRva2VuIiwiZmFjdG9yeSIsInByb3ZpZGVkSW4iXSwic291cmNlcyI6WyJzcmMvYXBwL2NvcmUvYWxhcm0vc2VydmljZXMvYWxhcm0tbWFuYWdlbWVudC1yZWZyZXNoLnNlcnZpY2UudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIEFsYXJtTWFuYWdlbWVudFJlZnJlc2hTZXJ2aWNlIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJlZnJlc2hSZXF1ZXN0ZWQkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIHB1YmxpYyByZXF1ZXN0UmVmcmVzaCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yZWZyZXNoUmVxdWVzdGVkJC5uZXh0KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFJlZnJlc2hSZXF1ZXN0ZWQkKCk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5yZWZyZXNoUmVxdWVzdGVkJC5hc09ic2VydmFibGUoKTtcbiAgICB9XG59XG4iXSwibWFwcGluZ3MiOiI7d0lBSUEsR0FBYSxDQUFBQSxDQUFBLEVBQUFDLGFBQUEsR0FBQUMsQ0FBQSxPQUE2QixLQUFBRCxhQUFBLEdBQUFFLENBQUEsTUFBcEMsS0FBTyxDQUFBQyxDQUE2QixDQUNyQkMsaUJBQUEsRUFBQUosYUFBQSxHQUFBQyxDQUFBLE1BQW9CLEdBQUksQ0FBQUksQ0FBQSxJQUVsQ0MsZUFBQSxDQUFjLENBQUFOLGFBQUEsR0FBQUUsQ0FBQSxLQUFBRixDQUFBLGdCQUFBQyxDQUFBLE1BQ2pCLEtBQUtHLGlCQUFBLENBQWtCRyxJQUFBLENBQUksQ0FDL0IsRUFFT0MscUJBQUEsQ0FBb0IsQ0FBQVIsYUFBQSxHQUFBRSxDQUFBLEtBQUFGLENBQUEsZ0JBQUFDLENBQUEsTUFDdkIsTUFBTyxNQUFLRyxpQkFBQSxDQUFrQkssWUFBQSxDQUFZLENBQzlDLFNBQUFDLElBQUEsRUFBQVYsYUFBQSxHQUFBQyxDQUFBLGVBQUFBLENBQUEsRUFBQUQsYUFBQSxHQUFBRSxDQUFBLEtBQUFGLENBQUEsZ0JBQUFDLENBQUEsa0JBQUFELGFBQUEsR0FBQVcsQ0FBQSxTQUFBVixDQUFBLElBQUFELGFBQUEsR0FBQVcsQ0FBQSxTQVRTUixDQUFBLElBQTZCLFdBQUFTLEtBQUEsRUFBQVosYUFBQSxHQUFBQyxDQUFBLE1BQUFZLENBQUEsRUFBQUMsS0FBQSxDQUE3QlgsQ0FBQSxDQUE2QlksT0FBQSxDQUE3QlosQ0FBQSxDQUE2Qk8sSUFBQSxDQUFBTSxVQUFBLENBRGhCLE1BQU0sS0FBQWhCLGFBQUEsR0FBQUMsQ0FBQSxZQUNuQixDQUFBRSxDQUE2QixjQUFBSixDQUFBLEUiLCJpZ25vcmVMaXN0IjpbXX0= \ No newline at end of file diff --git a/frontend/dist-instrumented/chunk-JOEDXNZS.js.map b/frontend/dist-instrumented/chunk-JOEDXNZS.js.map new file mode 100644 index 00000000..ca9eae94 --- /dev/null +++ b/frontend/dist-instrumented/chunk-JOEDXNZS.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["src/app/core/alarm/services/alarm-management-refresh.service.ts"], + "sourcesContent": ["import { Injectable } from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\n\n@Injectable({ providedIn: 'root' })\nexport class AlarmManagementRefreshService {\n private readonly refreshRequested$ = new Subject();\n\n public requestRefresh(): void {\n this.refreshRequested$.next();\n }\n\n public getRefreshRequested$(): Observable {\n return this.refreshRequested$.asObservable();\n }\n}\n"], + "mappings": "+CAIA,IAAaA,GAA6B,IAAA,CAApC,MAAOA,CAA6B,CACrBC,kBAAoB,IAAIC,EAElCC,gBAAc,CACjB,KAAKF,kBAAkBG,KAAI,CAC/B,CAEOC,sBAAoB,CACvB,OAAO,KAAKJ,kBAAkBK,aAAY,CAC9C,4CATSN,EAA6B,6BAA7BA,EAA6BO,QAA7BP,EAA6BQ,UAAAC,WADhB,MAAM,CAAA,SACnBT,CAA6B,GAAA", + "names": ["AlarmManagementRefreshService", "refreshRequested$", "Subject", "requestRefresh", "next", "getRefreshRequested$", "asObservable", "factory", "\u0275fac", "providedIn"] +} diff --git a/frontend/dist-instrumented/chunk-K2WBT5ZC.js b/frontend/dist-instrumented/chunk-K2WBT5ZC.js new file mode 100644 index 00000000..c6d1264a --- /dev/null +++ b/frontend/dist-instrumented/chunk-K2WBT5ZC.js @@ -0,0 +1,3 @@ +function cov_12iczr7gvh(){var path="/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-K2WBT5ZC.js";var hash="f665e1b2a540fcda0e7dc89e69f58bd96f8c018e";var global=new Function("return this")();var gcv="__coverage__";var coverageData={path:"/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-K2WBT5ZC.js",statementMap:{"0":{start:{line:1,column:133},end:{line:1,column:301}},"1":{start:{line:1,column:147},end:{line:1,column:151}},"2":{start:{line:1,column:154},end:{line:1,column:158}},"3":{start:{line:1,column:159},end:{line:1,column:300}},"4":{start:{line:1,column:229},end:{line:1,column:298}}},fnMap:{"0":{name:"(anonymous_0)",decl:{start:{line:1,column:133},end:{line:1,column:134}},loc:{start:{line:1,column:140},end:{line:1,column:301}},line:1},"1":{name:"(anonymous_1)",decl:{start:{line:1,column:226},end:{line:1,column:227}},loc:{start:{line:1,column:229},end:{line:1,column:298}},line:1}},branchMap:{"0":{loc:{start:{line:1,column:166},end:{line:1,column:300}},type:"cond-expr",locations:[{start:{line:1,column:186},end:{line:1,column:188}},{start:{line:1,column:189},end:{line:1,column:300}}],line:1},"1":{loc:{start:{line:1,column:229},end:{line:1,column:298}},type:"cond-expr",locations:[{start:{line:1,column:231},end:{line:1,column:233}},{start:{line:1,column:234},end:{line:1,column:298}}],line:1}},s:{"0":0,"1":0,"2":0,"3":0,"4":0},f:{"0":0,"1":0},b:{"0":[0,0],"1":[0,0]},inputSourceMap:{version:3,sources:["src/app/core/guards/auth.guard.ts"],sourcesContent:["import { inject } from '@angular/core';\nimport { CanActivateFn, Router } from '@angular/router';\nimport { map } from 'rxjs';\nimport { InternalAuthService } from '../services/internal-auth.service';\n\nexport const authGuard: CanActivateFn = (_, state) => {\n\tconst authService = inject(InternalAuthService);\n\tconst router = inject(Router);\n\n\tif (authService.isAuthenticated()) {\n\t\treturn true;\n\t}\n\n\treturn authService.restoreSessionFromRefresh().pipe(\n\t\tmap((restored) =>\n\t\t\trestored\n\t\t\t\t? true\n\t\t\t\t: router.createUrlTree(['/auth/login'], {\n\t\t\t\t\t\tqueryParams: { returnUrl: state.url },\n\t\t\t\t\t})\n\t\t)\n\t);\n};\n"],mappings:"+HAKO,IAAMA,EAA2BA,CAACC,EAAGC,IAAS,CACpD,IAAMC,EAAcC,EAAOC,CAAmB,EACxCC,EAASF,EAAOG,CAAM,EAE5B,OAAIJ,EAAYK,gBAAe,EACvB,GAGDL,EAAYM,0BAAyB,EAAGC,KAC9CC,EAAKC,GACJA,EACG,GACAN,EAAOO,cAAc,CAAC,aAAa,EAAG,CACtCC,YAAa,CAAEC,UAAWb,EAAMc,GAAG,EACnC,CAAC,CACJ,CAEH",names:["authGuard","_","state","authService","inject","InternalAuthService","router","Router","isAuthenticated","restoreSessionFromRefresh","pipe","map","restored","createUrlTree","queryParams","returnUrl","url"]},_coverageSchema:"1a1c01bbd47fc00a2c39e90264f33305004495a9",hash:"f665e1b2a540fcda0e7dc89e69f58bd96f8c018e"};var coverage=global[gcv]||(global[gcv]={});if(!coverage[path]||coverage[path].hash!==hash){coverage[path]=coverageData;}var actualCoverage=coverage[path];{// @ts-ignore +cov_12iczr7gvh=function(){return actualCoverage;};}return actualCoverage;}cov_12iczr7gvh();import{e as o}from"./chunk-FYGTVJAL.js";import{b as u}from"./chunk-65RKWSY3.js";import{Q as r,m as t}from"./chunk-RYTNMYZW.js";cov_12iczr7gvh().s[0]++;var h=(a,i)=>{cov_12iczr7gvh().f[0]++;let e=(cov_12iczr7gvh().s[1]++,r(u)),n=(cov_12iczr7gvh().s[2]++,r(o));cov_12iczr7gvh().s[3]++;return e.isAuthenticated()?(cov_12iczr7gvh().b[0][0]++,!0):(cov_12iczr7gvh().b[0][1]++,e.restoreSessionFromRefresh().pipe(t(m=>{cov_12iczr7gvh().f[1]++;cov_12iczr7gvh().s[4]++;return m?(cov_12iczr7gvh().b[1][0]++,!0):(cov_12iczr7gvh().b[1][1]++,n.createUrlTree(["/auth/login"],{queryParams:{returnUrl:i.url}}));})));};export{h as a};//# sourceMappingURL=chunk-K2WBT5ZC.js.map +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb3ZfMTJpY3pyN2d2aCIsInMiLCJoIiwiYSIsImkiLCJmIiwiZSIsInIiLCJ1IiwibiIsIm8iLCJpc0F1dGhlbnRpY2F0ZWQiLCJiIiwicmVzdG9yZVNlc3Npb25Gcm9tUmVmcmVzaCIsInBpcGUiLCJ0IiwibSIsImNyZWF0ZVVybFRyZWUiLCJxdWVyeVBhcmFtcyIsInJldHVyblVybCIsInVybCJdLCJzb3VyY2VzIjpbInNyYy9hcHAvY29yZS9ndWFyZHMvYXV0aC5ndWFyZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENhbkFjdGl2YXRlRm4sIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEludGVybmFsQXV0aFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9pbnRlcm5hbC1hdXRoLnNlcnZpY2UnO1xuXG5leHBvcnQgY29uc3QgYXV0aEd1YXJkOiBDYW5BY3RpdmF0ZUZuID0gKF8sIHN0YXRlKSA9PiB7XG5cdGNvbnN0IGF1dGhTZXJ2aWNlID0gaW5qZWN0KEludGVybmFsQXV0aFNlcnZpY2UpO1xuXHRjb25zdCByb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcblxuXHRpZiAoYXV0aFNlcnZpY2UuaXNBdXRoZW50aWNhdGVkKCkpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdHJldHVybiBhdXRoU2VydmljZS5yZXN0b3JlU2Vzc2lvbkZyb21SZWZyZXNoKCkucGlwZShcblx0XHRtYXAoKHJlc3RvcmVkKSA9PlxuXHRcdFx0cmVzdG9yZWRcblx0XHRcdFx0PyB0cnVlXG5cdFx0XHRcdDogcm91dGVyLmNyZWF0ZVVybFRyZWUoWycvYXV0aC9sb2dpbiddLCB7XG5cdFx0XHRcdFx0XHRxdWVyeVBhcmFtczogeyByZXR1cm5Vcmw6IHN0YXRlLnVybCB9LFxuXHRcdFx0XHRcdH0pXG5cdFx0KVxuXHQpO1xufTtcbiJdLCJtYXBwaW5ncyI6IjswTkFLT0EsY0FBQSxHQUFBQyxDQUFBLFNBQU0sQ0FBQUMsQ0FBQSxDQUEyQkEsQ0FBQ0MsQ0FBQSxDQUFHQyxDQUFBLEdBQVMsQ0FBQUosY0FBQSxHQUFBSyxDQUFBLE1BQ3BELEdBQU0sQ0FBQUMsQ0FBQSxFQUFBTixjQUFBLEdBQUFDLENBQUEsTUFBY00sQ0FBQSxDQUFPQyxDQUFtQixHQUN4Q0MsQ0FBQSxFQUFBVCxjQUFBLEdBQUFDLENBQUEsTUFBU00sQ0FBQSxDQUFPRyxDQUFNLEdBRTVCVixjQUFBLEdBQUFDLENBQUEsWUFBSSxDQUFBSyxDQUFBLENBQVlLLGVBQUEsQ0FBZSxHQUFBWCxjQUFBLEdBQUFZLENBQUEsU0FDdkIsS0FBQVosY0FBQSxHQUFBWSxDQUFBLFNBR0ROLENBQUEsQ0FBWU8seUJBQUEsQ0FBeUIsRUFBR0MsSUFBQSxDQUM5Q0MsQ0FBQSxDQUFLQyxDQUFBLEVBQ0osQ0FBQWhCLGNBQUEsR0FBQUssQ0FBQSxLQUFBTCxDQUFBLGlCQUFBQyxDQUFBLGFBQUFlLENBQUEsRUFBQWhCLGNBQUEsR0FBQVksQ0FBQSxTQUNHLEtBQUFaLGNBQUEsR0FBQVksQ0FBQSxTQUNBSCxDQUFBLENBQU9RLGFBQUEsQ0FBYyxDQUFDLGFBQWEsRUFBRyxDQUN0Q0MsV0FBQSxDQUFhLENBQUVDLFNBQUEsQ0FBV2YsQ0FBQSxDQUFNZ0IsR0FBRyxFQUNuQyxDQUFDLEVBQUQsQ0FBQyxDQUNKLENBRUgsV0FBQWxCLENBQUEsSUFBQUMsQ0FBQSxFIiwiaWdub3JlTGlzdCI6W119 \ No newline at end of file diff --git a/frontend/dist-instrumented/chunk-K2WBT5ZC.js.map b/frontend/dist-instrumented/chunk-K2WBT5ZC.js.map new file mode 100644 index 00000000..b1de907d --- /dev/null +++ b/frontend/dist-instrumented/chunk-K2WBT5ZC.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["src/app/core/guards/auth.guard.ts"], + "sourcesContent": ["import { inject } from '@angular/core';\nimport { CanActivateFn, Router } from '@angular/router';\nimport { map } from 'rxjs';\nimport { InternalAuthService } from '../services/internal-auth.service';\n\nexport const authGuard: CanActivateFn = (_, state) => {\n\tconst authService = inject(InternalAuthService);\n\tconst router = inject(Router);\n\n\tif (authService.isAuthenticated()) {\n\t\treturn true;\n\t}\n\n\treturn authService.restoreSessionFromRefresh().pipe(\n\t\tmap((restored) =>\n\t\t\trestored\n\t\t\t\t? true\n\t\t\t\t: router.createUrlTree(['/auth/login'], {\n\t\t\t\t\t\tqueryParams: { returnUrl: state.url },\n\t\t\t\t\t})\n\t\t)\n\t);\n};\n"], + "mappings": "+HAKO,IAAMA,EAA2BA,CAACC,EAAGC,IAAS,CACpD,IAAMC,EAAcC,EAAOC,CAAmB,EACxCC,EAASF,EAAOG,CAAM,EAE5B,OAAIJ,EAAYK,gBAAe,EACvB,GAGDL,EAAYM,0BAAyB,EAAGC,KAC9CC,EAAKC,GACJA,EACG,GACAN,EAAOO,cAAc,CAAC,aAAa,EAAG,CACtCC,YAAa,CAAEC,UAAWb,EAAMc,GAAG,EACnC,CAAC,CACJ,CAEH", + "names": ["authGuard", "_", "state", "authService", "inject", "InternalAuthService", "router", "Router", "isAuthenticated", "restoreSessionFromRefresh", "pipe", "map", "restored", "createUrlTree", "queryParams", "returnUrl", "url"] +} diff --git a/frontend/dist-instrumented/chunk-KVSAOLHG.js b/frontend/dist-instrumented/chunk-KVSAOLHG.js new file mode 100644 index 00000000..3dfd00eb --- /dev/null +++ b/frontend/dist-instrumented/chunk-KVSAOLHG.js @@ -0,0 +1,3 @@ +function cov_1pllidvnlq(){var path="/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-KVSAOLHG.js";var hash="df846eca2bfd1d493dc0c3b93c8ed6b590a443e4";var global=new Function("return this")();var gcv="__coverage__";var coverageData={path:"/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-KVSAOLHG.js",statementMap:{"0":{start:{line:1,column:126},end:{line:1,column:239}},"1":{start:{line:1,column:136},end:{line:1,column:140}},"2":{start:{line:1,column:143},end:{line:1,column:147}},"3":{start:{line:1,column:150},end:{line:1,column:170}},"4":{start:{line:1,column:171},end:{line:1,column:238}}},fnMap:{"0":{name:"(anonymous_0)",decl:{start:{line:1,column:126},end:{line:1,column:127}},loc:{start:{line:1,column:129},end:{line:1,column:239}},line:1}},branchMap:{"0":{loc:{start:{line:1,column:178},end:{line:1,column:238}},type:"cond-expr",locations:[{start:{line:1,column:180},end:{line:1,column:235}},{start:{line:1,column:236},end:{line:1,column:238}}],line:1},"1":{loc:{start:{line:1,column:180},end:{line:1,column:235}},type:"cond-expr",locations:[{start:{line:1,column:193},end:{line:1,column:195}},{start:{line:1,column:196},end:{line:1,column:235}}],line:1}},s:{"0":0,"1":0,"2":0,"3":0,"4":0},f:{"0":0},b:{"0":[0,0],"1":[0,0]},inputSourceMap:{version:3,sources:["src/app/core/guards/role.guard.ts"],sourcesContent:["import { inject } from '@angular/core';\nimport { CanActivateFn, Router } from '@angular/router';\nimport { UserRole } from '../models/user-role.enum';\nimport { InternalAuthService } from '../services/internal-auth.service';\n\nexport const roleGuard: CanActivateFn = (route) => {\n\tconst authService = inject(InternalAuthService);\n\tconst router = inject(Router);\n\n\tconst requiredRole = route.data?.['requiredRole'] as UserRole | undefined;\n\tif (!requiredRole) {\n\t\treturn true;\n\t}\n\n\treturn authService.hasRole(requiredRole) ? true : router.createUrlTree(['/apartment-monitor']);\n};\n"],mappings:"wHAKO,IAAMA,EAA4BC,GAAS,CACjD,IAAMC,EAAcC,EAAOC,CAAmB,EACxCC,EAASF,EAAOG,CAAM,EAEtBC,EAAeN,EAAMO,MAAO,aAClC,OAAKD,EAIEL,EAAYO,QAAQF,CAAY,EAAI,GAAOF,EAAOK,cAAc,CAAC,oBAAoB,CAAC,EAHrF,EAIT",names:["roleGuard","route","authService","inject","InternalAuthService","router","Router","requiredRole","data","hasRole","createUrlTree"]},_coverageSchema:"1a1c01bbd47fc00a2c39e90264f33305004495a9",hash:"df846eca2bfd1d493dc0c3b93c8ed6b590a443e4"};var coverage=global[gcv]||(global[gcv]={});if(!coverage[path]||coverage[path].hash!==hash){coverage[path]=coverageData;}var actualCoverage=coverage[path];{// @ts-ignore +cov_1pllidvnlq=function(){return actualCoverage;};}return actualCoverage;}cov_1pllidvnlq();import{e as t}from"./chunk-FYGTVJAL.js";import{b as o}from"./chunk-65RKWSY3.js";import{Q as r}from"./chunk-RYTNMYZW.js";cov_1pllidvnlq().s[0]++;var l=n=>{cov_1pllidvnlq().f[0]++;let u=(cov_1pllidvnlq().s[1]++,r(o)),i=(cov_1pllidvnlq().s[2]++,r(t)),e=(cov_1pllidvnlq().s[3]++,n.data?.requiredRole);cov_1pllidvnlq().s[4]++;return e?(cov_1pllidvnlq().b[0][0]++,u.hasRole(e)?(cov_1pllidvnlq().b[1][0]++,!0):(cov_1pllidvnlq().b[1][1]++,i.createUrlTree(["/apartment-monitor"]))):(cov_1pllidvnlq().b[0][1]++,!0);};export{l as a};//# sourceMappingURL=chunk-KVSAOLHG.js.map +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb3ZfMXBsbGlkdm5scSIsInMiLCJsIiwibiIsImYiLCJ1IiwiciIsIm8iLCJpIiwidCIsImUiLCJkYXRhIiwicmVxdWlyZWRSb2xlIiwiYiIsImhhc1JvbGUiLCJjcmVhdGVVcmxUcmVlIiwiYSJdLCJzb3VyY2VzIjpbInNyYy9hcHAvY29yZS9ndWFyZHMvcm9sZS5ndWFyZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENhbkFjdGl2YXRlRm4sIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBVc2VyUm9sZSB9IGZyb20gJy4uL21vZGVscy91c2VyLXJvbGUuZW51bSc7XG5pbXBvcnQgeyBJbnRlcm5hbEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvaW50ZXJuYWwtYXV0aC5zZXJ2aWNlJztcblxuZXhwb3J0IGNvbnN0IHJvbGVHdWFyZDogQ2FuQWN0aXZhdGVGbiA9IChyb3V0ZSkgPT4ge1xuXHRjb25zdCBhdXRoU2VydmljZSA9IGluamVjdChJbnRlcm5hbEF1dGhTZXJ2aWNlKTtcblx0Y29uc3Qgcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XG5cblx0Y29uc3QgcmVxdWlyZWRSb2xlID0gcm91dGUuZGF0YT8uWydyZXF1aXJlZFJvbGUnXSBhcyBVc2VyUm9sZSB8IHVuZGVmaW5lZDtcblx0aWYgKCFyZXF1aXJlZFJvbGUpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdHJldHVybiBhdXRoU2VydmljZS5oYXNSb2xlKHJlcXVpcmVkUm9sZSkgPyB0cnVlIDogcm91dGVyLmNyZWF0ZVVybFRyZWUoWycvYXBhcnRtZW50LW1vbml0b3InXSk7XG59O1xuIl0sIm1hcHBpbmdzIjoiO21OQUtPQSxjQUFBLEdBQUFDLENBQUEsU0FBTSxDQUFBQyxDQUFBLENBQTRCQyxDQUFBLEVBQVMsQ0FBQUgsY0FBQSxHQUFBSSxDQUFBLE1BQ2pELEdBQU0sQ0FBQUMsQ0FBQSxFQUFBTCxjQUFBLEdBQUFDLENBQUEsTUFBY0ssQ0FBQSxDQUFPQyxDQUFtQixHQUN4Q0MsQ0FBQSxFQUFBUixjQUFBLEdBQUFDLENBQUEsTUFBU0ssQ0FBQSxDQUFPRyxDQUFNLEdBRXRCQyxDQUFBLEVBQUFWLGNBQUEsR0FBQUMsQ0FBQSxNQUFlRSxDQUFBLENBQU1RLElBQUEsRUFBT0MsWUFBQSxFQUNsQ1osY0FBQSxHQUFBQyxDQUFBLFlBQUssQ0FBQVMsQ0FBQSxFQUFBVixjQUFBLEdBQUFhLENBQUEsU0FJRVIsQ0FBQSxDQUFZUyxPQUFBLENBQVFKLENBQVksR0FBQVYsY0FBQSxHQUFBYSxDQUFBLFNBQUksS0FBQWIsY0FBQSxHQUFBYSxDQUFBLFNBQU9MLENBQUEsQ0FBT08sYUFBQSxDQUFjLENBQUMsb0JBQW9CLENBQUMsS0FBQWYsY0FBQSxHQUFBYSxDQUFBLFNBSHJGLEVBSVQsV0FBQVgsQ0FBQSxJQUFBYyxDQUFBLEUiLCJpZ25vcmVMaXN0IjpbXX0= \ No newline at end of file diff --git a/frontend/dist-instrumented/chunk-KVSAOLHG.js.map b/frontend/dist-instrumented/chunk-KVSAOLHG.js.map new file mode 100644 index 00000000..69a6477b --- /dev/null +++ b/frontend/dist-instrumented/chunk-KVSAOLHG.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["src/app/core/guards/role.guard.ts"], + "sourcesContent": ["import { inject } from '@angular/core';\nimport { CanActivateFn, Router } from '@angular/router';\nimport { UserRole } from '../models/user-role.enum';\nimport { InternalAuthService } from '../services/internal-auth.service';\n\nexport const roleGuard: CanActivateFn = (route) => {\n\tconst authService = inject(InternalAuthService);\n\tconst router = inject(Router);\n\n\tconst requiredRole = route.data?.['requiredRole'] as UserRole | undefined;\n\tif (!requiredRole) {\n\t\treturn true;\n\t}\n\n\treturn authService.hasRole(requiredRole) ? true : router.createUrlTree(['/apartment-monitor']);\n};\n"], + "mappings": "wHAKO,IAAMA,EAA4BC,GAAS,CACjD,IAAMC,EAAcC,EAAOC,CAAmB,EACxCC,EAASF,EAAOG,CAAM,EAEtBC,EAAeN,EAAMO,MAAO,aAClC,OAAKD,EAIEL,EAAYO,QAAQF,CAAY,EAAI,GAAOF,EAAOK,cAAc,CAAC,oBAAoB,CAAC,EAHrF,EAIT", + "names": ["roleGuard", "route", "authService", "inject", "InternalAuthService", "router", "Router", "requiredRole", "data", "hasRole", "createUrlTree"] +} diff --git a/frontend/dist-instrumented/chunk-L7QG5RI3.js b/frontend/dist-instrumented/chunk-L7QG5RI3.js new file mode 100644 index 00000000..fe3f5170 --- /dev/null +++ b/frontend/dist-instrumented/chunk-L7QG5RI3.js @@ -0,0 +1,4 @@ +function cov_1ahhyrt4se(){var path="/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-L7QG5RI3.js";var hash="8825c99f4d90e0c3b8659407a4156c296f4d5aff";var global=new Function("return this")();var gcv="__coverage__";var coverageData={path:"/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-L7QG5RI3.js",statementMap:{"0":{start:{line:1,column:1186},end:{line:1,column:2509}},"1":{start:{line:1,column:1208},end:{line:1,column:1213}},"2":{start:{line:1,column:1223},end:{line:1,column:1228}},"3":{start:{line:1,column:1239},end:{line:1,column:1264}},"4":{start:{line:1,column:1273},end:{line:1,column:1276}},"5":{start:{line:1,column:1288},end:{line:1,column:1687}},"6":{start:{line:1,column:1301},end:{line:1,column:1430}},"7":{start:{line:1,column:1431},end:{line:1,column:1685}},"8":{start:{line:1,column:1699},end:{line:1,column:1869}},"9":{start:{line:1,column:1712},end:{line:1,column:1801}},"10":{start:{line:1,column:1802},end:{line:1,column:1867}},"11":{start:{line:1,column:1881},end:{line:1,column:1932}},"12":{start:{line:1,column:1950},end:{line:1,column:1979}},"13":{start:{line:1,column:1962},end:{line:1,column:1978}},"14":{start:{line:1,column:1997},end:{line:1,column:2496}},"15":{start:{line:1,column:2242},end:{line:1,column:2459}},"16":{start:{line:1,column:2285},end:{line:1,column:2304}},"17":{start:{line:1,column:2497},end:{line:1,column:2505}},"18":{start:{line:1,column:2517},end:{line:1,column:2522}},"19":{start:{line:1,column:2540},end:{line:1,column:2609}},"20":{start:{line:1,column:2581},end:{line:1,column:2585}},"21":{start:{line:1,column:2586},end:{line:1,column:2608}},"22":{start:{line:1,column:2627},end:{line:1,column:2820}},"23":{start:{line:1,column:2641},end:{line:1,column:2644}},"24":{start:{line:1,column:2645},end:{line:1,column:2819}},"25":{start:{line:1,column:2731},end:{line:1,column:2736}},"26":{start:{line:1,column:2742},end:{line:1,column:2745}},"27":{start:{line:1,column:2746},end:{line:1,column:2767}},"28":{start:{line:1,column:2820},end:{line:1,column:2993}},"29":{start:{line:1,column:2834},end:{line:1,column:2837}},"30":{start:{line:1,column:2838},end:{line:1,column:2992}},"31":{start:{line:1,column:3001},end:{line:1,column:4354}},"32":{start:{line:1,column:3020},end:{line:1,column:3025}},"33":{start:{line:1,column:3032},end:{line:1,column:3044}},"34":{start:{line:1,column:3057},end:{line:1,column:3064}},"35":{start:{line:1,column:3076},end:{line:1,column:3096}},"36":{start:{line:1,column:3104},end:{line:1,column:3107}},"37":{start:{line:1,column:3118},end:{line:1,column:3136}},"38":{start:{line:1,column:3154},end:{line:1,column:3183}},"39":{start:{line:1,column:3166},end:{line:1,column:3182}},"40":{start:{line:1,column:3201},end:{line:1,column:4341}},"41":{start:{line:1,column:4248},end:{line:1,column:4304}},"42":{start:{line:1,column:4342},end:{line:1,column:4350}},"43":{start:{line:1,column:4362},end:{line:1,column:5151}},"44":{start:{line:1,column:4392},end:{line:1,column:4396}},"45":{start:{line:1,column:4412},end:{line:1,column:4748}},"46":{start:{line:1,column:4782},end:{line:1,column:4790}},"47":{start:{line:1,column:4791},end:{line:1,column:4824}},"48":{start:{line:1,column:4802},end:{line:1,column:4824}},"49":{start:{line:1,column:4824},end:{line:1,column:4867}},"50":{start:{line:1,column:4836},end:{line:1,column:4867}},"51":{start:{line:1,column:4867},end:{line:1,column:4897}},"52":{start:{line:1,column:4878},end:{line:1,column:4897}},"53":{start:{line:1,column:4897},end:{line:1,column:4937}},"54":{start:{line:1,column:4909},end:{line:1,column:4937}},"55":{start:{line:1,column:4937},end:{line:1,column:4966}},"56":{start:{line:1,column:4948},end:{line:1,column:4966}},"57":{start:{line:1,column:4966},end:{line:1,column:5022}},"58":{start:{line:1,column:5040},end:{line:1,column:5069}},"59":{start:{line:1,column:5052},end:{line:1,column:5068}},"60":{start:{line:1,column:5088},end:{line:1,column:5138}},"61":{start:{line:1,column:5139},end:{line:1,column:5147}},"62":{start:{line:1,column:5158},end:{line:1,column:6828}},"63":{start:{line:1,column:5196},end:{line:1,column:5217}},"64":{start:{line:1,column:5242},end:{line:1,column:5378}},"65":{start:{line:1,column:5268},end:{line:1,column:5377}},"66":{start:{line:1,column:5286},end:{line:1,column:5375}},"67":{start:{line:1,column:5413},end:{line:1,column:5432}},"68":{start:{line:1,column:5423},end:{line:1,column:5431}},"69":{start:{line:1,column:5433},end:{line:1,column:5479}},"70":{start:{line:1,column:5465},end:{line:1,column:5475}},"71":{start:{line:1,column:5503},end:{line:1,column:5535}},"72":{start:{line:1,column:5520},end:{line:1,column:5528}},"73":{start:{line:1,column:5585},end:{line:1,column:5593}},"74":{start:{line:1,column:5596},end:{line:1,column:5604}},"75":{start:{line:1,column:5605},end:{line:1,column:5647}},"76":{start:{line:1,column:5635},end:{line:1,column:5647}},"77":{start:{line:1,column:5647},end:{line:1,column:5934}},"78":{start:{line:1,column:5662},end:{line:1,column:5934}},"79":{start:{line:1,column:5695},end:{line:1,column:5722}},"80":{start:{line:1,column:5713},end:{line:1,column:5721}},"81":{start:{line:1,column:5723},end:{line:1,column:5739}},"82":{start:{line:1,column:5730},end:{line:1,column:5739}},"83":{start:{line:1,column:5745},end:{line:1,column:5782}},"84":{start:{line:1,column:5773},end:{line:1,column:5781}},"85":{start:{line:1,column:5783},end:{line:1,column:5933}},"86":{start:{line:1,column:5788},end:{line:1,column:5933}},"87":{start:{line:1,column:5934},end:{line:1,column:5945}},"88":{start:{line:1,column:5969},end:{line:1,column:6037}},"89":{start:{line:1,column:6055},end:{line:1,column:6099}},"90":{start:{line:1,column:6127},end:{line:1,column:6164}},"91":{start:{line:1,column:6200},end:{line:1,column:6208}},"92":{start:{line:1,column:6211},end:{line:1,column:6232}},"93":{start:{line:1,column:6233},end:{line:1,column:6302}},"94":{start:{line:1,column:6265},end:{line:1,column:6298}},"95":{start:{line:1,column:6336},end:{line:1,column:6344}},"96":{start:{line:1,column:6345},end:{line:1,column:6370}},"97":{start:{line:1,column:6361},end:{line:1,column:6370}},"98":{start:{line:1,column:6376},end:{line:1,column:6397}},"99":{start:{line:1,column:6398},end:{line:1,column:6497}},"100":{start:{line:1,column:6426},end:{line:1,column:6459}},"101":{start:{line:1,column:6521},end:{line:1,column:6593}},"102":{start:{line:1,column:6542},end:{line:1,column:6592}},"103":{start:{line:1,column:6623},end:{line:1,column:6669}},"104":{start:{line:1,column:6638},end:{line:1,column:6646}},"105":{start:{line:1,column:6658},end:{line:1,column:6668}},"106":{start:{line:1,column:6670},end:{line:1,column:6699}},"107":{start:{line:1,column:6717},end:{line:1,column:6746}},"108":{start:{line:1,column:6729},end:{line:1,column:6745}},"109":{start:{line:1,column:6765},end:{line:1,column:6815}},"110":{start:{line:1,column:6816},end:{line:1,column:6824}},"111":{start:{line:1,column:6836},end:{line:1,column:8247}},"112":{start:{line:1,column:6885},end:{line:1,column:6911}},"113":{start:{line:1,column:7017},end:{line:1,column:7058}},"114":{start:{line:1,column:7059},end:{line:1,column:7522}},"115":{start:{line:1,column:7134},end:{line:1,column:7164}},"116":{start:{line:1,column:7169},end:{line:1,column:7522}},"117":{start:{line:1,column:7231},end:{line:1,column:7272}},"118":{start:{line:1,column:7273},end:{line:1,column:7334}},"119":{start:{line:1,column:7340},end:{line:1,column:7411}},"120":{start:{line:1,column:7412},end:{line:1,column:7453}},"121":{start:{line:1,column:7459},end:{line:1,column:7522}},"122":{start:{line:1,column:7522},end:{line:1,column:7673}},"123":{start:{line:1,column:7705},end:{line:1,column:7810}},"124":{start:{line:1,column:7839},end:{line:1,column:7925}},"125":{start:{line:1,column:7856},end:{line:1,column:7863}},"126":{start:{line:1,column:7864},end:{line:1,column:7924}},"127":{start:{line:1,column:7958},end:{line:1,column:7992}},"128":{start:{line:1,column:7975},end:{line:1,column:7990}},"129":{start:{line:1,column:7993},end:{line:1,column:8112}},"130":{start:{line:1,column:8010},end:{line:1,column:8036}},"131":{start:{line:1,column:8037},end:{line:1,column:8111}},"132":{start:{line:1,column:8130},end:{line:1,column:8165}},"133":{start:{line:1,column:8142},end:{line:1,column:8164}},"134":{start:{line:1,column:8184},end:{line:1,column:8234}},"135":{start:{line:1,column:8235},end:{line:1,column:8243}},"136":{start:{line:1,column:8255},end:{line:1,column:10226}},"137":{start:{line:1,column:8329},end:{line:1,column:8331}},"138":{start:{line:1,column:8351},end:{line:1,column:8412}},"139":{start:{line:1,column:8420},end:{line:1,column:8425}},"140":{start:{line:1,column:8442},end:{line:1,column:8449}},"141":{start:{line:1,column:8467},end:{line:1,column:8474}},"142":{start:{line:1,column:8492},end:{line:1,column:8497}},"143":{start:{line:1,column:8520},end:{line:1,column:8846}},"144":{start:{line:1,column:8658},end:{line:1,column:8707}},"145":{start:{line:1,column:8727},end:{line:1,column:8842}},"146":{start:{line:1,column:8871},end:{line:1,column:8932}},"147":{start:{line:1,column:8967},end:{line:1,column:8975}},"148":{start:{line:1,column:8976},end:{line:1,column:9368}},"149":{start:{line:1,column:9156},end:{line:1,column:9204}},"150":{start:{line:1,column:9214},end:{line:1,column:9243}},"151":{start:{line:1,column:9253},end:{line:1,column:9364}},"152":{start:{line:1,column:9404},end:{line:1,column:9412}},"153":{start:{line:1,column:9415},end:{line:1,column:9423}},"154":{start:{line:1,column:9424},end:{line:1,column:9593}},"155":{start:{line:1,column:9509},end:{line:1,column:9576}},"156":{start:{line:1,column:9584},end:{line:1,column:9591}},"157":{start:{line:1,column:9610},end:{line:1,column:9956}},"158":{start:{line:1,column:9681},end:{line:1,column:9686}},"159":{start:{line:1,column:9730},end:{line:1,column:9735}},"160":{start:{line:1,column:9780},end:{line:1,column:9829}},"161":{start:{line:1,column:9796},end:{line:1,column:9829}},"162":{start:{line:1,column:9835},end:{line:1,column:9900}},"163":{start:{line:1,column:9844},end:{line:1,column:9899}},"164":{start:{line:1,column:9892},end:{line:1,column:9897}},"165":{start:{line:1,column:9901},end:{line:1,column:9953}},"166":{start:{line:1,column:9923},end:{line:1,column:9951}},"167":{start:{line:1,column:9980},end:{line:1,column:9987}},"168":{start:{line:1,column:9988},end:{line:1,column:10026}},"169":{start:{line:1,column:10012},end:{line:1,column:10026}},"170":{start:{line:1,column:10026},end:{line:1,column:10097}},"171":{start:{line:1,column:10068},end:{line:1,column:10096}},"172":{start:{line:1,column:10115},end:{line:1,column:10162}},"173":{start:{line:1,column:10127},end:{line:1,column:10161}},"174":{start:{line:1,column:10181},end:{line:1,column:10213}},"175":{start:{line:1,column:10214},end:{line:1,column:10222}},"176":{start:{line:1,column:10234},end:{line:1,column:12338}},"177":{start:{line:1,column:10283},end:{line:1,column:10309}},"178":{start:{line:1,column:10330},end:{line:1,column:10845}},"179":{start:{line:1,column:10345},end:{line:1,column:10838}},"180":{start:{line:1,column:10838},end:{line:1,column:10844}},"181":{start:{line:1,column:10845},end:{line:1,column:11421}},"182":{start:{line:1,column:11323},end:{line:1,column:11414}},"183":{start:{line:1,column:11414},end:{line:1,column:11420}},"184":{start:{line:1,column:11421},end:{line:1,column:11578}},"185":{start:{line:1,column:11524},end:{line:1,column:11571}},"186":{start:{line:1,column:11571},end:{line:1,column:11577}},"187":{start:{line:1,column:11578},end:{line:1,column:11623}},"188":{start:{line:1,column:11649},end:{line:1,column:11761}},"189":{start:{line:1,column:11796},end:{line:1,column:11804}},"190":{start:{line:1,column:11805},end:{line:1,column:11901}},"191":{start:{line:1,column:11821},end:{line:1,column:11901}},"192":{start:{line:1,column:11907},end:{line:1,column:11959}},"193":{start:{line:1,column:11960},end:{line:1,column:12059}},"194":{start:{line:1,column:12097},end:{line:1,column:12105}},"195":{start:{line:1,column:12106},end:{line:1,column:12203}},"196":{start:{line:1,column:12221},end:{line:1,column:12256}},"197":{start:{line:1,column:12233},end:{line:1,column:12255}},"198":{start:{line:1,column:12275},end:{line:1,column:12325}},"199":{start:{line:1,column:12326},end:{line:1,column:12334}},"200":{start:{line:1,column:12346},end:{line:1,column:12357}},"201":{start:{line:1,column:12353},end:{line:1,column:12357}},"202":{start:{line:1,column:12375},end:{line:1,column:12493}},"203":{start:{line:1,column:12511},end:{line:1,column:12651}},"204":{start:{line:1,column:12614},end:{line:1,column:12617}},"205":{start:{line:1,column:12618},end:{line:1,column:12650}},"206":{start:{line:1,column:12669},end:{line:1,column:12758}},"207":{start:{line:1,column:12716},end:{line:1,column:12727}},"208":{start:{line:1,column:12728},end:{line:1,column:12757}},"209":{start:{line:1,column:12776},end:{line:1,column:12831}},"210":{start:{line:1,column:12818},end:{line:1,column:12821}},"211":{start:{line:1,column:12822},end:{line:1,column:12830}},"212":{start:{line:1,column:12849},end:{line:1,column:12887}},"213":{start:{line:1,column:12905},end:{line:1,column:12964}},"214":{start:{line:1,column:12982},end:{line:1,column:13421}},"215":{start:{line:1,column:13193},end:{line:1,column:13196}},"216":{start:{line:1,column:13197},end:{line:1,column:13420}},"217":{start:{line:1,column:13439},end:{line:1,column:13495}},"218":{start:{line:1,column:13513},end:{line:1,column:13603}},"219":{start:{line:1,column:13560},end:{line:1,column:13571}},"220":{start:{line:1,column:13572},end:{line:1,column:13602}},"221":{start:{line:1,column:13621},end:{line:1,column:13720}},"222":{start:{line:1,column:13738},end:{line:1,column:13793}},"223":{start:{line:1,column:13811},end:{line:1,column:13866}},"224":{start:{line:1,column:13853},end:{line:1,column:13856}},"225":{start:{line:1,column:13857},end:{line:1,column:13865}},"226":{start:{line:1,column:13884},end:{line:1,column:13922}},"227":{start:{line:1,column:13940},end:{line:1,column:14003}},"228":{start:{line:1,column:14021},end:{line:1,column:14110}},"229":{start:{line:1,column:14068},end:{line:1,column:14079}},"230":{start:{line:1,column:14080},end:{line:1,column:14109}},"231":{start:{line:1,column:14128},end:{line:1,column:14227}},"232":{start:{line:1,column:14245},end:{line:1,column:14337}},"233":{start:{line:1,column:14355},end:{line:1,column:14416}},"234":{start:{line:1,column:14434},end:{line:1,column:15612}},"235":{start:{line:1,column:14889},end:{line:1,column:14892}},"236":{start:{line:1,column:14893},end:{line:1,column:15611}},"237":{start:{line:1,column:15630},end:{line:1,column:15712}},"238":{start:{line:1,column:15676},end:{line:1,column:15687}},"239":{start:{line:1,column:15688},end:{line:1,column:15711}},"240":{start:{line:1,column:15730},end:{line:1,column:15793}},"241":{start:{line:1,column:15811},end:{line:1,column:15874}},"242":{start:{line:1,column:15892},end:{line:1,column:16082}},"243":{start:{line:1,column:16022},end:{line:1,column:16025}},"244":{start:{line:1,column:16026},end:{line:1,column:16081}},"245":{start:{line:1,column:16100},end:{line:1,column:16182}},"246":{start:{line:1,column:16146},end:{line:1,column:16157}},"247":{start:{line:1,column:16158},end:{line:1,column:16181}},"248":{start:{line:1,column:16200},end:{line:1,column:16468}},"249":{start:{line:1,column:16302},end:{line:1,column:16305}},"250":{start:{line:1,column:16306},end:{line:1,column:16467}},"251":{start:{line:1,column:16486},end:{line:1,column:16556}},"252":{start:{line:1,column:16574},end:{line:1,column:16654}},"253":{start:{line:1,column:16672},end:{line:1,column:16733}},"254":{start:{line:1,column:16708},end:{line:1,column:16719}},"255":{start:{line:1,column:16720},end:{line:1,column:16732}},"256":{start:{line:1,column:16751},end:{line:1,column:16830}},"257":{start:{line:1,column:16792},end:{line:1,column:16795}},"258":{start:{line:1,column:16796},end:{line:1,column:16829}},"259":{start:{line:1,column:16848},end:{line:1,column:16906}},"260":{start:{line:1,column:16924},end:{line:1,column:17010}},"261":{start:{line:1,column:17028},end:{line:1,column:17094}},"262":{start:{line:1,column:17112},end:{line:1,column:17185}},"263":{start:{line:1,column:17203},end:{line:1,column:17279}},"264":{start:{line:1,column:17287},end:{line:1,column:32001}},"265":{start:{line:1,column:17306},end:{line:1,column:17317}},"266":{start:{line:1,column:17330},end:{line:1,column:17337}},"267":{start:{line:1,column:17352},end:{line:1,column:17355}},"268":{start:{line:1,column:17366},end:{line:1,column:17369}},"269":{start:{line:1,column:17373},end:{line:1,column:17378}},"270":{start:{line:1,column:17390},end:{line:1,column:17395}},"271":{start:{line:1,column:17406},end:{line:1,column:17411}},"272":{start:{line:1,column:17432},end:{line:1,column:17436}},"273":{start:{line:1,column:17454},end:{line:1,column:17459}},"274":{start:{line:1,column:17478},end:{line:1,column:17483}},"275":{start:{line:1,column:17495},end:{line:1,column:17500}},"276":{start:{line:1,column:17528},end:{line:1,column:17529}},"277":{start:{line:1,column:17535},end:{line:1,column:17551}},"278":{start:{line:1,column:17563},end:{line:1,column:17590}},"279":{start:{line:1,column:17569},end:{line:1,column:17589}},"280":{start:{line:1,column:17598},end:{line:1,column:17619}},"281":{start:{line:1,column:17634},end:{line:1,column:17639}},"282":{start:{line:1,column:17657},end:{line:1,column:17662}},"283":{start:{line:1,column:17679},end:{line:1,column:17709}},"284":{start:{line:1,column:17727},end:{line:1,column:17758}},"285":{start:{line:1,column:17776},end:{line:1,column:17807}},"286":{start:{line:1,column:17825},end:{line:1,column:17830}},"287":{start:{line:1,column:17851},end:{line:1,column:17856}},"288":{start:{line:1,column:17875},end:{line:1,column:17882}},"289":{start:{line:1,column:17907},end:{line:1,column:17932}},"290":{start:{line:1,column:17913},end:{line:1,column:17931}},"291":{start:{line:1,column:17946},end:{line:1,column:18056}},"292":{start:{line:1,column:17953},end:{line:1,column:17985}},"293":{start:{line:1,column:17975},end:{line:1,column:17985}},"294":{start:{line:1,column:17991},end:{line:1,column:18023}},"295":{start:{line:1,column:18024},end:{line:1,column:18054}},"296":{start:{line:1,column:18073},end:{line:1,column:18120}},"297":{start:{line:1,column:18101},end:{line:1,column:18119}},"298":{start:{line:1,column:18146},end:{line:1,column:18438}},"299":{start:{line:1,column:18153},end:{line:1,column:18253}},"300":{start:{line:1,column:18175},end:{line:1,column:18253}},"301":{start:{line:1,column:18259},end:{line:1,column:18283}},"302":{start:{line:1,column:18284},end:{line:1,column:18351}},"303":{start:{line:1,column:18296},end:{line:1,column:18351}},"304":{start:{line:1,column:18357},end:{line:1,column:18399}},"305":{start:{line:1,column:18400},end:{line:1,column:18436}},"306":{start:{line:1,column:18463},end:{line:1,column:18534}},"307":{start:{line:1,column:18469},end:{line:1,column:18533}},"308":{start:{line:1,column:18558},end:{line:1,column:19067}},"309":{start:{line:1,column:18564},end:{line:1,column:19066}},"310":{start:{line:1,column:19082},end:{line:1,column:20267}},"311":{start:{line:1,column:19096},end:{line:1,column:19114}},"312":{start:{line:1,column:19115},end:{line:1,column:19560}},"313":{start:{line:1,column:19127},end:{line:1,column:19160}},"314":{start:{line:1,column:19161},end:{line:1,column:19553}},"315":{start:{line:1,column:19553},end:{line:1,column:19559}},"316":{start:{line:1,column:19560},end:{line:1,column:19877}},"317":{start:{line:1,column:19959},end:{line:1,column:20003}},"318":{start:{line:1,column:20086},end:{line:1,column:20131}},"319":{start:{line:1,column:20217},end:{line:1,column:20265}},"320":{start:{line:1,column:20280},end:{line:1,column:20637}},"321":{start:{line:1,column:20661},end:{line:1,column:20810}},"322":{start:{line:1,column:20822},end:{line:1,column:21137}},"323":{start:{line:1,column:20888},end:{line:1,column:21002}},"324":{start:{line:1,column:21003},end:{line:1,column:21136}},"325":{start:{line:1,column:21137},end:{line:1,column:21195}},"326":{start:{line:1,column:21159},end:{line:1,column:21188}},"327":{start:{line:1,column:21188},end:{line:1,column:21194}},"328":{start:{line:1,column:21201},end:{line:1,column:21224}},"329":{start:{line:1,column:21227},end:{line:1,column:21245}},"330":{start:{line:1,column:21246},end:{line:1,column:21331}},"331":{start:{line:1,column:21274},end:{line:1,column:21324}},"332":{start:{line:1,column:21324},end:{line:1,column:21330}},"333":{start:{line:1,column:21331},end:{line:1,column:21357}},"334":{start:{line:1,column:21375},end:{line:1,column:21435}},"335":{start:{line:1,column:21457},end:{line:1,column:21540}},"336":{start:{line:1,column:21559},end:{line:1,column:21789}},"337":{start:{line:1,column:21730},end:{line:1,column:21782}},"338":{start:{line:1,column:21782},end:{line:1,column:21788}},"339":{start:{line:1,column:21789},end:{line:1,column:22066}},"340":{start:{line:1,column:21923},end:{line:1,column:22064}},"341":{start:{line:1,column:22092},end:{line:1,column:22161}},"342":{start:{line:1,column:22162},end:{line:1,column:22497}},"343":{start:{line:1,column:22435},end:{line:1,column:22490}},"344":{start:{line:1,column:22490},end:{line:1,column:22496}},"345":{start:{line:1,column:22497},end:{line:1,column:22767}},"346":{start:{line:1,column:22796},end:{line:1,column:22871}},"347":{start:{line:1,column:22872},end:{line:1,column:23025}},"348":{start:{line:1,column:23055},end:{line:1,column:23252}},"349":{start:{line:1,column:23286},end:{line:1,column:23317}},"350":{start:{line:1,column:23310},end:{line:1,column:23317}},"351":{start:{line:1,column:23323},end:{line:1,column:23331}},"352":{start:{line:1,column:23332},end:{line:1,column:23494}},"353":{start:{line:1,column:23349},end:{line:1,column:23417}},"354":{start:{line:1,column:23410},end:{line:1,column:23417}},"355":{start:{line:1,column:23417},end:{line:1,column:23487}},"356":{start:{line:1,column:23487},end:{line:1,column:23493}},"357":{start:{line:1,column:23494},end:{line:1,column:23703}},"358":{start:{line:1,column:23577},end:{line:1,column:23701}},"359":{start:{line:1,column:23729},end:{line:1,column:23766}},"360":{start:{line:1,column:23767},end:{line:1,column:23792}},"361":{start:{line:1,column:23804},end:{line:1,column:23825}},"362":{start:{line:1,column:23843},end:{line:1,column:23872}},"363":{start:{line:1,column:23855},end:{line:1,column:23871}},"364":{start:{line:1,column:23890},end:{line:1,column:31988}},"365":{start:{line:1,column:28802},end:{line:1,column:31902}},"366":{start:{line:1,column:28849},end:{line:1,column:28868}},"367":{start:{line:1,column:30071},end:{line:1,column:30090}},"368":{start:{line:1,column:30155},end:{line:1,column:30174}},"369":{start:{line:1,column:30197},end:{line:1,column:31901}},"370":{start:{line:1,column:31989},end:{line:1,column:31997}},"371":{start:{line:1,column:32009},end:{line:1,column:32567}},"372":{start:{line:1,column:32039},end:{line:1,column:32043}},"373":{start:{line:1,column:32054},end:{line:1,column:32349}},"374":{start:{line:1,column:32071},end:{line:1,column:32347}},"375":{start:{line:1,column:32375},end:{line:1,column:32412}},"376":{start:{line:1,column:32413},end:{line:1,column:32438}},"377":{start:{line:1,column:32456},end:{line:1,column:32485}},"378":{start:{line:1,column:32468},end:{line:1,column:32484}},"379":{start:{line:1,column:32504},end:{line:1,column:32554}},"380":{start:{line:1,column:32555},end:{line:1,column:32563}},"381":{start:{line:1,column:32575},end:{line:1,column:32586}},"382":{start:{line:1,column:32582},end:{line:1,column:32586}},"383":{start:{line:1,column:32604},end:{line:1,column:32667}},"384":{start:{line:1,column:32645},end:{line:1,column:32648}},"385":{start:{line:1,column:32649},end:{line:1,column:32666}},"386":{start:{line:1,column:32685},end:{line:1,column:32722}},"387":{start:{line:1,column:32740},end:{line:1,column:32837}},"388":{start:{line:1,column:32855},end:{line:1,column:32896}},"389":{start:{line:1,column:32914},end:{line:1,column:33043}},"390":{start:{line:1,column:32984},end:{line:1,column:32987}},"391":{start:{line:1,column:32988},end:{line:1,column:33042}},"392":{start:{line:1,column:33061},end:{line:1,column:33662}},"393":{start:{line:1,column:33075},end:{line:1,column:33078}},"394":{start:{line:1,column:33079},end:{line:1,column:33661}},"395":{start:{line:1,column:33348},end:{line:1,column:33362}},"396":{start:{line:1,column:33365},end:{line:1,column:33369}},"397":{start:{line:1,column:33370},end:{line:1,column:33394}},"398":{start:{line:1,column:33465},end:{line:1,column:33479}},"399":{start:{line:1,column:33482},end:{line:1,column:33486}},"400":{start:{line:1,column:33487},end:{line:1,column:33520}},"401":{start:{line:1,column:33592},end:{line:1,column:33606}},"402":{start:{line:1,column:33609},end:{line:1,column:33613}},"403":{start:{line:1,column:33614},end:{line:1,column:33649}},"404":{start:{line:1,column:33662},end:{line:1,column:34032}},"405":{start:{line:1,column:33676},end:{line:1,column:33687}},"406":{start:{line:1,column:33690},end:{line:1,column:33694}},"407":{start:{line:1,column:33695},end:{line:1,column:34031}},"408":{start:{line:1,column:34050},end:{line:1,column:34110}},"409":{start:{line:1,column:34094},end:{line:1,column:34097}},"410":{start:{line:1,column:34098},end:{line:1,column:34109}},"411":{start:{line:1,column:34128},end:{line:1,column:34328}},"412":{start:{line:1,column:34142},end:{line:1,column:34145}},"413":{start:{line:1,column:34146},end:{line:1,column:34327}},"414":{start:{line:1,column:34208},end:{line:1,column:34213}},"415":{start:{line:1,column:34219},end:{line:1,column:34222}},"416":{start:{line:1,column:34223},end:{line:1,column:34253}},"417":{start:{line:1,column:34279},end:{line:1,column:34284}},"418":{start:{line:1,column:34290},end:{line:1,column:34293}},"419":{start:{line:1,column:34294},end:{line:1,column:34321}},"420":{start:{line:1,column:34328},end:{line:1,column:34419}},"421":{start:{line:1,column:34342},end:{line:1,column:34345}},"422":{start:{line:1,column:34346},end:{line:1,column:34418}},"423":{start:{line:1,column:34437},end:{line:1,column:34634}},"424":{start:{line:1,column:34451},end:{line:1,column:34454}},"425":{start:{line:1,column:34455},end:{line:1,column:34633}},"426":{start:{line:1,column:34509},end:{line:1,column:34514}},"427":{start:{line:1,column:34520},end:{line:1,column:34523}},"428":{start:{line:1,column:34524},end:{line:1,column:34555}},"429":{start:{line:1,column:34581},end:{line:1,column:34586}},"430":{start:{line:1,column:34592},end:{line:1,column:34595}},"431":{start:{line:1,column:34596},end:{line:1,column:34627}},"432":{start:{line:1,column:34634},end:{line:1,column:34693}},"433":{start:{line:1,column:34648},end:{line:1,column:34651}},"434":{start:{line:1,column:34652},end:{line:1,column:34692}},"435":{start:{line:1,column:34701},end:{line:2,column:103}},"436":{start:{line:1,column:34728},end:{line:1,column:34733}},"437":{start:{line:1,column:34749},end:{line:1,column:34754}},"438":{start:{line:1,column:34763},end:{line:1,column:35013}},"439":{start:{line:1,column:35021},end:{line:1,column:35068}},"440":{start:{line:1,column:35075},end:{line:1,column:35123}},"441":{start:{line:1,column:35136},end:{line:1,column:35141}},"442":{start:{line:1,column:35154},end:{line:1,column:35161}},"443":{start:{line:1,column:35176},end:{line:1,column:35183}},"444":{start:{line:1,column:35204},end:{line:1,column:35211}},"445":{start:{line:1,column:35217},end:{line:1,column:35265}},"446":{start:{line:1,column:35223},end:{line:1,column:35264}},"447":{start:{line:1,column:35277},end:{line:1,column:35341}},"448":{start:{line:1,column:35283},end:{line:1,column:35340}},"449":{start:{line:1,column:35353},end:{line:1,column:35387}},"450":{start:{line:1,column:35402},end:{line:1,column:35453}},"451":{start:{line:1,column:35470},end:{line:1,column:35507}},"452":{start:{line:1,column:35492},end:{line:1,column:35500}},"453":{start:{line:1,column:35508},end:{line:1,column:35561}},"454":{start:{line:1,column:35583},end:{line:1,column:35783}},"455":{start:{line:1,column:35701},end:{line:1,column:35767}},"456":{start:{line:1,column:35798},end:{line:1,column:35835}},"457":{start:{line:1,column:35862},end:{line:1,column:35882}},"458":{start:{line:1,column:35883},end:{line:1,column:35968}},"459":{start:{line:1,column:35989},end:{line:1,column:36017}},"460":{start:{line:1,column:36050},end:{line:1,column:36070}},"461":{start:{line:1,column:36071},end:{line:1,column:36161}},"462":{start:{line:1,column:36187},end:{line:1,column:36205}},"463":{start:{line:1,column:36206},end:{line:1,column:36299}},"464":{start:{line:1,column:36212},end:{line:1,column:36292}},"465":{start:{line:1,column:36269},end:{line:1,column:36289}},"466":{start:{line:1,column:36292},end:{line:1,column:36298}},"467":{start:{line:1,column:36299},end:{line:1,column:36373}},"468":{start:{line:1,column:36351},end:{line:1,column:36371}},"469":{start:{line:1,column:36390},end:{line:1,column:36441}},"470":{start:{line:1,column:36459},end:{line:1,column:36488}},"471":{start:{line:1,column:36471},end:{line:1,column:36487}},"472":{start:{line:1,column:36506},end:{line:2,column:90}},"473":{start:{line:1,column:37868},end:{line:1,column:38727}},"474":{start:{line:1,column:38156},end:{line:1,column:38178}},"475":{start:{line:1,column:38262},end:{line:1,column:38286}},"476":{start:{line:1,column:38384},end:{line:1,column:38726}},"477":{start:{line:2,column:91},end:{line:2,column:99}}},fnMap:{"0":{name:"(anonymous_0)",decl:{start:{line:1,column:1187},end:{line:1,column:1188}},loc:{start:{line:1,column:1191},end:{line:1,column:2506}},line:1},"1":{name:"(anonymous_1)",decl:{start:{line:1,column:1290},end:{line:1,column:1291}},loc:{start:{line:1,column:1294},end:{line:1,column:1686}},line:1},"2":{name:"(anonymous_2)",decl:{start:{line:1,column:1701},end:{line:1,column:1702}},loc:{start:{line:1,column:1705},end:{line:1,column:1868}},line:1},"3":{name:"(anonymous_3)",decl:{start:{line:1,column:1870},end:{line:1,column:1871}},loc:{start:{line:1,column:1880},end:{line:1,column:1933}},line:1},"4":{name:"(anonymous_4)",decl:{start:{line:1,column:1950},end:{line:1,column:1951}},loc:{start:{line:1,column:1961},end:{line:1,column:1979}},line:1},"5":{name:"(anonymous_5)",decl:{start:{line:1,column:2228},end:{line:1,column:2229}},loc:{start:{line:1,column:2241},end:{line:1,column:2460}},line:1},"6":{name:"(anonymous_6)",decl:{start:{line:1,column:2274},end:{line:1,column:2275}},loc:{start:{line:1,column:2284},end:{line:1,column:2305}},line:1},"7":{name:"qe",decl:{start:{line:1,column:2532},end:{line:1,column:2534}},loc:{start:{line:1,column:2539},end:{line:1,column:2610}},line:1},"8":{name:"He",decl:{start:{line:1,column:2619},end:{line:1,column:2621}},loc:{start:{line:1,column:2626},end:{line:1,column:2994}},line:1},"9":{name:"(anonymous_9)",decl:{start:{line:1,column:2720},end:{line:1,column:2721}},loc:{start:{line:1,column:2730},end:{line:1,column:2768}},line:1},"10":{name:"(anonymous_10)",decl:{start:{line:1,column:3002},end:{line:1,column:3003}},loc:{start:{line:1,column:3006},end:{line:1,column:4351}},line:1},"11":{name:"(anonymous_11)",decl:{start:{line:1,column:3108},end:{line:1,column:3109}},loc:{start:{line:1,column:3117},end:{line:1,column:3137}},line:1},"12":{name:"(anonymous_12)",decl:{start:{line:1,column:3154},end:{line:1,column:3155}},loc:{start:{line:1,column:3165},end:{line:1,column:3183}},line:1},"13":{name:"(anonymous_13)",decl:{start:{line:1,column:4234},end:{line:1,column:4235}},loc:{start:{line:1,column:4247},end:{line:1,column:4305}},line:1},"14":{name:"(anonymous_14)",decl:{start:{line:1,column:4363},end:{line:1,column:4364}},loc:{start:{line:1,column:4367},end:{line:1,column:5148}},line:1},"15":{name:"(anonymous_15)",decl:{start:{line:1,column:4397},end:{line:1,column:4398}},loc:{start:{line:1,column:4411},end:{line:1,column:4749}},line:1},"16":{name:"(anonymous_16)",decl:{start:{line:1,column:4749},end:{line:1,column:4750}},loc:{start:{line:1,column:4775},end:{line:1,column:5023}},line:1},"17":{name:"(anonymous_17)",decl:{start:{line:1,column:5040},end:{line:1,column:5041}},loc:{start:{line:1,column:5051},end:{line:1,column:5069}},line:1},"18":{name:"(anonymous_18)",decl:{start:{line:1,column:5159},end:{line:1,column:5160}},loc:{start:{line:1,column:5163},end:{line:1,column:6825}},line:1},"19":{name:"(anonymous_19)",decl:{start:{line:1,column:5218},end:{line:1,column:5219}},loc:{start:{line:1,column:5241},end:{line:1,column:5379}},line:1},"20":{name:"(anonymous_20)",decl:{start:{line:1,column:5265},end:{line:1,column:5266}},loc:{start:{line:1,column:5268},end:{line:1,column:5377}},line:1},"21":{name:"(anonymous_21)",decl:{start:{line:1,column:5282},end:{line:1,column:5283}},loc:{start:{line:1,column:5286},end:{line:1,column:5375}},line:1},"22":{name:"(anonymous_22)",decl:{start:{line:1,column:5379},end:{line:1,column:5380}},loc:{start:{line:1,column:5406},end:{line:1,column:5480}},line:1},"23":{name:"(anonymous_23)",decl:{start:{line:1,column:5420},end:{line:1,column:5421}},loc:{start:{line:1,column:5423},end:{line:1,column:5431}},line:1},"24":{name:"(anonymous_24)",decl:{start:{line:1,column:5462},end:{line:1,column:5463}},loc:{start:{line:1,column:5465},end:{line:1,column:5475}},line:1},"25":{name:"(anonymous_25)",decl:{start:{line:1,column:5480},end:{line:1,column:5481}},loc:{start:{line:1,column:5502},end:{line:1,column:5536}},line:1},"26":{name:"(anonymous_26)",decl:{start:{line:1,column:5517},end:{line:1,column:5518}},loc:{start:{line:1,column:5520},end:{line:1,column:5528}},line:1},"27":{name:"(anonymous_27)",decl:{start:{line:1,column:5536},end:{line:1,column:5537}},loc:{start:{line:1,column:5578},end:{line:1,column:5946}},line:1},"28":{name:"(anonymous_28)",decl:{start:{line:1,column:5710},end:{line:1,column:5711}},loc:{start:{line:1,column:5713},end:{line:1,column:5721}},line:1},"29":{name:"(anonymous_29)",decl:{start:{line:1,column:5770},end:{line:1,column:5771}},loc:{start:{line:1,column:5773},end:{line:1,column:5781}},line:1},"30":{name:"(anonymous_30)",decl:{start:{line:1,column:5946},end:{line:1,column:5947}},loc:{start:{line:1,column:5968},end:{line:1,column:6038}},line:1},"31":{name:"(anonymous_31)",decl:{start:{line:1,column:6038},end:{line:1,column:6039}},loc:{start:{line:1,column:6054},end:{line:1,column:6100}},line:1},"32":{name:"(anonymous_32)",decl:{start:{line:1,column:6100},end:{line:1,column:6101}},loc:{start:{line:1,column:6126},end:{line:1,column:6165}},line:1},"33":{name:"(anonymous_33)",decl:{start:{line:1,column:6165},end:{line:1,column:6166}},loc:{start:{line:1,column:6193},end:{line:1,column:6303}},line:1},"34":{name:"(anonymous_34)",decl:{start:{line:1,column:6262},end:{line:1,column:6263}},loc:{start:{line:1,column:6265},end:{line:1,column:6298}},line:1},"35":{name:"(anonymous_35)",decl:{start:{line:1,column:6303},end:{line:1,column:6304}},loc:{start:{line:1,column:6329},end:{line:1,column:6498}},line:1},"36":{name:"(anonymous_36)",decl:{start:{line:1,column:6423},end:{line:1,column:6424}},loc:{start:{line:1,column:6426},end:{line:1,column:6459}},line:1},"37":{name:"(anonymous_37)",decl:{start:{line:1,column:6498},end:{line:1,column:6499}},loc:{start:{line:1,column:6520},end:{line:1,column:6594}},line:1},"38":{name:"(anonymous_38)",decl:{start:{line:1,column:6539},end:{line:1,column:6540}},loc:{start:{line:1,column:6542},end:{line:1,column:6592}},line:1},"39":{name:"(anonymous_39)",decl:{start:{line:1,column:6594},end:{line:1,column:6595}},loc:{start:{line:1,column:6616},end:{line:1,column:6700}},line:1},"40":{name:"(anonymous_40)",decl:{start:{line:1,column:6635},end:{line:1,column:6636}},loc:{start:{line:1,column:6638},end:{line:1,column:6646}},line:1},"41":{name:"(anonymous_41)",decl:{start:{line:1,column:6655},end:{line:1,column:6656}},loc:{start:{line:1,column:6658},end:{line:1,column:6668}},line:1},"42":{name:"(anonymous_42)",decl:{start:{line:1,column:6717},end:{line:1,column:6718}},loc:{start:{line:1,column:6728},end:{line:1,column:6746}},line:1},"43":{name:"(anonymous_43)",decl:{start:{line:1,column:6837},end:{line:1,column:6838}},loc:{start:{line:1,column:6841},end:{line:1,column:8244}},line:1},"44":{name:"(anonymous_44)",decl:{start:{line:1,column:6870},end:{line:1,column:6871}},loc:{start:{line:1,column:6884},end:{line:1,column:6912}},line:1},"45":{name:"(anonymous_45)",decl:{start:{line:1,column:6912},end:{line:1,column:6913}},loc:{start:{line:1,column:7010},end:{line:1,column:7674}},line:1},"46":{name:"(anonymous_46)",decl:{start:{line:1,column:7674},end:{line:1,column:7675}},loc:{start:{line:1,column:7704},end:{line:1,column:7811}},line:1},"47":{name:"(anonymous_47)",decl:{start:{line:1,column:7811},end:{line:1,column:7812}},loc:{start:{line:1,column:7838},end:{line:1,column:7926}},line:1},"48":{name:"(anonymous_48)",decl:{start:{line:1,column:7846},end:{line:1,column:7847}},loc:{start:{line:1,column:7849},end:{line:1,column:7925}},line:1},"49":{name:"(anonymous_49)",decl:{start:{line:1,column:7926},end:{line:1,column:7927}},loc:{start:{line:1,column:7951},end:{line:1,column:8113}},line:1},"50":{name:"(anonymous_50)",decl:{start:{line:1,column:7972},end:{line:1,column:7973}},loc:{start:{line:1,column:7975},end:{line:1,column:7990}},line:1},"51":{name:"(anonymous_51)",decl:{start:{line:1,column:8000},end:{line:1,column:8001}},loc:{start:{line:1,column:8003},end:{line:1,column:8112}},line:1},"52":{name:"(anonymous_52)",decl:{start:{line:1,column:8130},end:{line:1,column:8131}},loc:{start:{line:1,column:8141},end:{line:1,column:8165}},line:1},"53":{name:"(anonymous_53)",decl:{start:{line:1,column:8256},end:{line:1,column:8257}},loc:{start:{line:1,column:8260},end:{line:1,column:10223}},line:1},"54":{name:"(anonymous_54)",decl:{start:{line:1,column:8332},end:{line:1,column:8333}},loc:{start:{line:1,column:8350},end:{line:1,column:8413}},line:1},"55":{name:"(anonymous_55)",decl:{start:{line:1,column:8498},end:{line:1,column:8499}},loc:{start:{line:1,column:8519},end:{line:1,column:8847}},line:1},"56":{name:"(anonymous_56)",decl:{start:{line:1,column:8654},end:{line:1,column:8655}},loc:{start:{line:1,column:8657},end:{line:1,column:8708}},line:1},"57":{name:"(anonymous_57)",decl:{start:{line:1,column:8712},end:{line:1,column:8713}},loc:{start:{line:1,column:8716},end:{line:1,column:8718}},line:1},"58":{name:"(anonymous_58)",decl:{start:{line:1,column:8722},end:{line:1,column:8723}},loc:{start:{line:1,column:8727},end:{line:1,column:8842}},line:1},"59":{name:"(anonymous_59)",decl:{start:{line:1,column:8847},end:{line:1,column:8848}},loc:{start:{line:1,column:8870},end:{line:1,column:8933}},line:1},"60":{name:"(anonymous_60)",decl:{start:{line:1,column:8933},end:{line:1,column:8934}},loc:{start:{line:1,column:8960},end:{line:1,column:9369}},line:1},"61":{name:"(anonymous_61)",decl:{start:{line:1,column:9153},end:{line:1,column:9154}},loc:{start:{line:1,column:9156},end:{line:1,column:9204}},line:1},"62":{name:"(anonymous_62)",decl:{start:{line:1,column:9209},end:{line:1,column:9210}},loc:{start:{line:1,column:9213},end:{line:1,column:9244}},line:1},"63":{name:"(anonymous_63)",decl:{start:{line:1,column:9248},end:{line:1,column:9249}},loc:{start:{line:1,column:9253},end:{line:1,column:9364}},line:1},"64":{name:"(anonymous_64)",decl:{start:{line:1,column:9369},end:{line:1,column:9370}},loc:{start:{line:1,column:9397},end:{line:1,column:9594}},line:1},"65":{name:"(anonymous_65)",decl:{start:{line:1,column:9506},end:{line:1,column:9507}},loc:{start:{line:1,column:9509},end:{line:1,column:9576}},line:1},"66":{name:"(anonymous_66)",decl:{start:{line:1,column:9580},end:{line:1,column:9581}},loc:{start:{line:1,column:9584},end:{line:1,column:9591}},line:1},"67":{name:"(anonymous_67)",decl:{start:{line:1,column:9594},end:{line:1,column:9595}},loc:{start:{line:1,column:9609},end:{line:1,column:9957}},line:1},"68":{name:"(anonymous_68)",decl:{start:{line:1,column:9677},end:{line:1,column:9678}},loc:{start:{line:1,column:9681},end:{line:1,column:9686}},line:1},"69":{name:"(anonymous_69)",decl:{start:{line:1,column:9726},end:{line:1,column:9727}},loc:{start:{line:1,column:9730},end:{line:1,column:9735}},line:1},"70":{name:"(anonymous_70)",decl:{start:{line:1,column:9748},end:{line:1,column:9749}},loc:{start:{line:1,column:9779},end:{line:1,column:9954}},line:1},"71":{name:"(anonymous_71)",decl:{start:{line:1,column:9841},end:{line:1,column:9842}},loc:{start:{line:1,column:9844},end:{line:1,column:9899}},line:1},"72":{name:"(anonymous_72)",decl:{start:{line:1,column:9888},end:{line:1,column:9889}},loc:{start:{line:1,column:9892},end:{line:1,column:9897}},line:1},"73":{name:"(anonymous_73)",decl:{start:{line:1,column:9920},end:{line:1,column:9921}},loc:{start:{line:1,column:9923},end:{line:1,column:9951}},line:1},"74":{name:"(anonymous_74)",decl:{start:{line:1,column:9957},end:{line:1,column:9958}},loc:{start:{line:1,column:9973},end:{line:1,column:10098}},line:1},"75":{name:"(anonymous_75)",decl:{start:{line:1,column:10061},end:{line:1,column:10062}},loc:{start:{line:1,column:10068},end:{line:1,column:10096}},line:1},"76":{name:"(anonymous_76)",decl:{start:{line:1,column:10115},end:{line:1,column:10116}},loc:{start:{line:1,column:10126},end:{line:1,column:10162}},line:1},"77":{name:"(anonymous_77)",decl:{start:{line:1,column:10235},end:{line:1,column:10236}},loc:{start:{line:1,column:10239},end:{line:1,column:12335}},line:1},"78":{name:"(anonymous_78)",decl:{start:{line:1,column:10268},end:{line:1,column:10269}},loc:{start:{line:1,column:10282},end:{line:1,column:10310}},line:1},"79":{name:"(anonymous_79)",decl:{start:{line:1,column:10310},end:{line:1,column:10311}},loc:{start:{line:1,column:10329},end:{line:1,column:11624}},line:1},"80":{name:"(anonymous_80)",decl:{start:{line:1,column:11624},end:{line:1,column:11625}},loc:{start:{line:1,column:11648},end:{line:1,column:11762}},line:1},"81":{name:"(anonymous_81)",decl:{start:{line:1,column:11762},end:{line:1,column:11763}},loc:{start:{line:1,column:11789},end:{line:1,column:12060}},line:1},"82":{name:"(anonymous_82)",decl:{start:{line:1,column:12060},end:{line:1,column:12061}},loc:{start:{line:1,column:12090},end:{line:1,column:12204}},line:1},"83":{name:"(anonymous_83)",decl:{start:{line:1,column:12221},end:{line:1,column:12222}},loc:{start:{line:1,column:12232},end:{line:1,column:12256}},line:1},"84":{name:"(anonymous_84)",decl:{start:{line:1,column:12346},end:{line:1,column:12347}},loc:{start:{line:1,column:12353},end:{line:1,column:12357}},line:1},"85":{name:"Be",decl:{start:{line:1,column:12367},end:{line:1,column:12369}},loc:{start:{line:1,column:12374},end:{line:1,column:12494}},line:1},"86":{name:"Ge",decl:{start:{line:1,column:12503},end:{line:1,column:12505}},loc:{start:{line:1,column:12510},end:{line:1,column:12652}},line:1},"87":{name:"Ue",decl:{start:{line:1,column:12661},end:{line:1,column:12663}},loc:{start:{line:1,column:12668},end:{line:1,column:12759}},line:1},"88":{name:"Qe",decl:{start:{line:1,column:12768},end:{line:1,column:12770}},loc:{start:{line:1,column:12775},end:{line:1,column:12832}},line:1},"89":{name:"We",decl:{start:{line:1,column:12841},end:{line:1,column:12843}},loc:{start:{line:1,column:12848},end:{line:1,column:12888}},line:1},"90":{name:"Je",decl:{start:{line:1,column:12897},end:{line:1,column:12899}},loc:{start:{line:1,column:12904},end:{line:1,column:12965}},line:1},"91":{name:"Xe",decl:{start:{line:1,column:12974},end:{line:1,column:12976}},loc:{start:{line:1,column:12981},end:{line:1,column:13422}},line:1},"92":{name:"Ye",decl:{start:{line:1,column:13431},end:{line:1,column:13433}},loc:{start:{line:1,column:13438},end:{line:1,column:13496}},line:1},"93":{name:"Ke",decl:{start:{line:1,column:13505},end:{line:1,column:13507}},loc:{start:{line:1,column:13512},end:{line:1,column:13604}},line:1},"94":{name:"Ze",decl:{start:{line:1,column:13613},end:{line:1,column:13615}},loc:{start:{line:1,column:13620},end:{line:1,column:13721}},line:1},"95":{name:"et",decl:{start:{line:1,column:13730},end:{line:1,column:13732}},loc:{start:{line:1,column:13737},end:{line:1,column:13794}},line:1},"96":{name:"tt",decl:{start:{line:1,column:13803},end:{line:1,column:13805}},loc:{start:{line:1,column:13810},end:{line:1,column:13867}},line:1},"97":{name:"it",decl:{start:{line:1,column:13876},end:{line:1,column:13878}},loc:{start:{line:1,column:13883},end:{line:1,column:13923}},line:1},"98":{name:"ot",decl:{start:{line:1,column:13932},end:{line:1,column:13934}},loc:{start:{line:1,column:13939},end:{line:1,column:14004}},line:1},"99":{name:"nt",decl:{start:{line:1,column:14013},end:{line:1,column:14015}},loc:{start:{line:1,column:14020},end:{line:1,column:14111}},line:1},"100":{name:"at",decl:{start:{line:1,column:14120},end:{line:1,column:14122}},loc:{start:{line:1,column:14127},end:{line:1,column:14228}},line:1},"101":{name:"rt",decl:{start:{line:1,column:14237},end:{line:1,column:14239}},loc:{start:{line:1,column:14244},end:{line:1,column:14338}},line:1},"102":{name:"lt",decl:{start:{line:1,column:14347},end:{line:1,column:14349}},loc:{start:{line:1,column:14354},end:{line:1,column:14417}},line:1},"103":{name:"dt",decl:{start:{line:1,column:14426},end:{line:1,column:14428}},loc:{start:{line:1,column:14433},end:{line:1,column:15613}},line:1},"104":{name:"st",decl:{start:{line:1,column:15622},end:{line:1,column:15624}},loc:{start:{line:1,column:15629},end:{line:1,column:15713}},line:1},"105":{name:"mt",decl:{start:{line:1,column:15722},end:{line:1,column:15724}},loc:{start:{line:1,column:15729},end:{line:1,column:15794}},line:1},"106":{name:"pt",decl:{start:{line:1,column:15803},end:{line:1,column:15805}},loc:{start:{line:1,column:15810},end:{line:1,column:15875}},line:1},"107":{name:"ct",decl:{start:{line:1,column:15884},end:{line:1,column:15886}},loc:{start:{line:1,column:15891},end:{line:1,column:16083}},line:1},"108":{name:"ut",decl:{start:{line:1,column:16092},end:{line:1,column:16094}},loc:{start:{line:1,column:16099},end:{line:1,column:16183}},line:1},"109":{name:"ft",decl:{start:{line:1,column:16192},end:{line:1,column:16194}},loc:{start:{line:1,column:16199},end:{line:1,column:16469}},line:1},"110":{name:"ht",decl:{start:{line:1,column:16478},end:{line:1,column:16480}},loc:{start:{line:1,column:16485},end:{line:1,column:16557}},line:1},"111":{name:"gt",decl:{start:{line:1,column:16566},end:{line:1,column:16568}},loc:{start:{line:1,column:16573},end:{line:1,column:16655}},line:1},"112":{name:"vt",decl:{start:{line:1,column:16664},end:{line:1,column:16666}},loc:{start:{line:1,column:16671},end:{line:1,column:16734}},line:1},"113":{name:"bt",decl:{start:{line:1,column:16743},end:{line:1,column:16745}},loc:{start:{line:1,column:16750},end:{line:1,column:16831}},line:1},"114":{name:"Ct",decl:{start:{line:1,column:16840},end:{line:1,column:16842}},loc:{start:{line:1,column:16847},end:{line:1,column:16907}},line:1},"115":{name:"_t",decl:{start:{line:1,column:16916},end:{line:1,column:16918}},loc:{start:{line:1,column:16923},end:{line:1,column:17011}},line:1},"116":{name:"xt",decl:{start:{line:1,column:17020},end:{line:1,column:17022}},loc:{start:{line:1,column:17027},end:{line:1,column:17095}},line:1},"117":{name:"Et",decl:{start:{line:1,column:17104},end:{line:1,column:17106}},loc:{start:{line:1,column:17111},end:{line:1,column:17186}},line:1},"118":{name:"Dt",decl:{start:{line:1,column:17195},end:{line:1,column:17197}},loc:{start:{line:1,column:17202},end:{line:1,column:17280}},line:1},"119":{name:"(anonymous_119)",decl:{start:{line:1,column:17288},end:{line:1,column:17289}},loc:{start:{line:1,column:17292},end:{line:1,column:31998}},line:1},"120":{name:"(anonymous_120)",decl:{start:{line:1,column:17565},end:{line:1,column:17566}},loc:{start:{line:1,column:17569},end:{line:1,column:17589}},line:1},"121":{name:"(anonymous_121)",decl:{start:{line:1,column:17909},end:{line:1,column:17910}},loc:{start:{line:1,column:17913},end:{line:1,column:17931}},line:1},"122":{name:"(anonymous_122)",decl:{start:{line:1,column:17948},end:{line:1,column:17949}},loc:{start:{line:1,column:17952},end:{line:1,column:18055}},line:1},"123":{name:"(anonymous_123)",decl:{start:{line:1,column:18098},end:{line:1,column:18099}},loc:{start:{line:1,column:18101},end:{line:1,column:18119}},line:1},"124":{name:"(anonymous_124)",decl:{start:{line:1,column:18148},end:{line:1,column:18149}},loc:{start:{line:1,column:18152},end:{line:1,column:18437}},line:1},"125":{name:"(anonymous_125)",decl:{start:{line:1,column:18465},end:{line:1,column:18466}},loc:{start:{line:1,column:18469},end:{line:1,column:18533}},line:1},"126":{name:"(anonymous_126)",decl:{start:{line:1,column:18560},end:{line:1,column:18561}},loc:{start:{line:1,column:18564},end:{line:1,column:19066}},line:1},"127":{name:"(anonymous_127)",decl:{start:{line:1,column:19068},end:{line:1,column:19069}},loc:{start:{line:1,column:19081},end:{line:1,column:20268}},line:1},"128":{name:"(anonymous_128)",decl:{start:{line:1,column:19085},end:{line:1,column:19086}},loc:{start:{line:1,column:19089},end:{line:1,column:19878}},line:1},"129":{name:"(anonymous_129)",decl:{start:{line:1,column:19955},end:{line:1,column:19956}},loc:{start:{line:1,column:19958},end:{line:1,column:20004}},line:1},"130":{name:"(anonymous_130)",decl:{start:{line:1,column:20082},end:{line:1,column:20083}},loc:{start:{line:1,column:20085},end:{line:1,column:20132}},line:1},"131":{name:"(anonymous_131)",decl:{start:{line:1,column:20213},end:{line:1,column:20214}},loc:{start:{line:1,column:20216},end:{line:1,column:20266}},line:1},"132":{name:"(anonymous_132)",decl:{start:{line:1,column:20268},end:{line:1,column:20269}},loc:{start:{line:1,column:20279},end:{line:1,column:20638}},line:1},"133":{name:"(anonymous_133)",decl:{start:{line:1,column:20638},end:{line:1,column:20639}},loc:{start:{line:1,column:20660},end:{line:1,column:20811}},line:1},"134":{name:"(anonymous_134)",decl:{start:{line:1,column:20811},end:{line:1,column:20812}},loc:{start:{line:1,column:20821},end:{line:1,column:21358}},line:1},"135":{name:"(anonymous_135)",decl:{start:{line:1,column:21358},end:{line:1,column:21359}},loc:{start:{line:1,column:21374},end:{line:1,column:21436}},line:1},"136":{name:"(anonymous_136)",decl:{start:{line:1,column:21436},end:{line:1,column:21437}},loc:{start:{line:1,column:21456},end:{line:1,column:21541}},line:1},"137":{name:"(anonymous_137)",decl:{start:{line:1,column:21541},end:{line:1,column:21542}},loc:{start:{line:1,column:21558},end:{line:1,column:22067}},line:1},"138":{name:"(anonymous_138)",decl:{start:{line:1,column:21919},end:{line:1,column:21920}},loc:{start:{line:1,column:21922},end:{line:1,column:22065}},line:1},"139":{name:"(anonymous_139)",decl:{start:{line:1,column:22067},end:{line:1,column:22068}},loc:{start:{line:1,column:22085},end:{line:1,column:22768}},line:1},"140":{name:"(anonymous_140)",decl:{start:{line:1,column:22768},end:{line:1,column:22769}},loc:{start:{line:1,column:22789},end:{line:1,column:23026}},line:1},"141":{name:"(anonymous_141)",decl:{start:{line:1,column:23026},end:{line:1,column:23027}},loc:{start:{line:1,column:23054},end:{line:1,column:23253}},line:1},"142":{name:"(anonymous_142)",decl:{start:{line:1,column:23253},end:{line:1,column:23254}},loc:{start:{line:1,column:23285},end:{line:1,column:23704}},line:1},"143":{name:"(anonymous_143)",decl:{start:{line:1,column:23573},end:{line:1,column:23574}},loc:{start:{line:1,column:23576},end:{line:1,column:23702}},line:1},"144":{name:"(anonymous_144)",decl:{start:{line:1,column:23704},end:{line:1,column:23705}},loc:{start:{line:1,column:23722},end:{line:1,column:23793}},line:1},"145":{name:"(anonymous_145)",decl:{start:{line:1,column:23793},end:{line:1,column:23794}},loc:{start:{line:1,column:23803},end:{line:1,column:23826}},line:1},"146":{name:"(anonymous_146)",decl:{start:{line:1,column:23843},end:{line:1,column:23844}},loc:{start:{line:1,column:23854},end:{line:1,column:23872}},line:1},"147":{name:"(anonymous_147)",decl:{start:{line:1,column:28788},end:{line:1,column:28789}},loc:{start:{line:1,column:28801},end:{line:1,column:31903}},line:1},"148":{name:"(anonymous_148)",decl:{start:{line:1,column:28838},end:{line:1,column:28839}},loc:{start:{line:1,column:28848},end:{line:1,column:28869}},line:1},"149":{name:"(anonymous_149)",decl:{start:{line:1,column:30060},end:{line:1,column:30061}},loc:{start:{line:1,column:30070},end:{line:1,column:30091}},line:1},"150":{name:"(anonymous_150)",decl:{start:{line:1,column:30144},end:{line:1,column:30145}},loc:{start:{line:1,column:30154},end:{line:1,column:30175}},line:1},"151":{name:"(anonymous_151)",decl:{start:{line:1,column:32010},end:{line:1,column:32011}},loc:{start:{line:1,column:32014},end:{line:1,column:32564}},line:1},"152":{name:"(anonymous_152)",decl:{start:{line:1,column:32044},end:{line:1,column:32045}},loc:{start:{line:1,column:32053},end:{line:1,column:32350}},line:1},"153":{name:"(anonymous_153)",decl:{start:{line:1,column:32067},end:{line:1,column:32068}},loc:{start:{line:1,column:32071},end:{line:1,column:32347}},line:1},"154":{name:"(anonymous_154)",decl:{start:{line:1,column:32350},end:{line:1,column:32351}},loc:{start:{line:1,column:32368},end:{line:1,column:32439}},line:1},"155":{name:"(anonymous_155)",decl:{start:{line:1,column:32456},end:{line:1,column:32457}},loc:{start:{line:1,column:32467},end:{line:1,column:32485}},line:1},"156":{name:"(anonymous_156)",decl:{start:{line:1,column:32575},end:{line:1,column:32576}},loc:{start:{line:1,column:32582},end:{line:1,column:32586}},line:1},"157":{name:"St",decl:{start:{line:1,column:32596},end:{line:1,column:32598}},loc:{start:{line:1,column:32603},end:{line:1,column:32668}},line:1},"158":{name:"It",decl:{start:{line:1,column:32677},end:{line:1,column:32679}},loc:{start:{line:1,column:32684},end:{line:1,column:32723}},line:1},"159":{name:"yt",decl:{start:{line:1,column:32732},end:{line:1,column:32734}},loc:{start:{line:1,column:32739},end:{line:1,column:32838}},line:1},"160":{name:"At",decl:{start:{line:1,column:32847},end:{line:1,column:32849}},loc:{start:{line:1,column:32854},end:{line:1,column:32897}},line:1},"161":{name:"Vt",decl:{start:{line:1,column:32906},end:{line:1,column:32908}},loc:{start:{line:1,column:32913},end:{line:1,column:33044}},line:1},"162":{name:"wt",decl:{start:{line:1,column:33053},end:{line:1,column:33055}},loc:{start:{line:1,column:33060},end:{line:1,column:34033}},line:1},"163":{name:"(anonymous_163)",decl:{start:{line:1,column:33331},end:{line:1,column:33332}},loc:{start:{line:1,column:33341},end:{line:1,column:33395}},line:1},"164":{name:"(anonymous_164)",decl:{start:{line:1,column:33448},end:{line:1,column:33449}},loc:{start:{line:1,column:33458},end:{line:1,column:33521}},line:1},"165":{name:"(anonymous_165)",decl:{start:{line:1,column:33574},end:{line:1,column:33575}},loc:{start:{line:1,column:33585},end:{line:1,column:33650}},line:1},"166":{name:"Mt",decl:{start:{line:1,column:34042},end:{line:1,column:34044}},loc:{start:{line:1,column:34049},end:{line:1,column:34111}},line:1},"167":{name:"Ft",decl:{start:{line:1,column:34120},end:{line:1,column:34122}},loc:{start:{line:1,column:34127},end:{line:1,column:34420}},line:1},"168":{name:"(anonymous_168)",decl:{start:{line:1,column:34196},end:{line:1,column:34197}},loc:{start:{line:1,column:34207},end:{line:1,column:34254}},line:1},"169":{name:"(anonymous_169)",decl:{start:{line:1,column:34268},end:{line:1,column:34269}},loc:{start:{line:1,column:34278},end:{line:1,column:34322}},line:1},"170":{name:"Ot",decl:{start:{line:1,column:34429},end:{line:1,column:34431}},loc:{start:{line:1,column:34436},end:{line:1,column:34694}},line:1},"171":{name:"(anonymous_171)",decl:{start:{line:1,column:34498},end:{line:1,column:34499}},loc:{start:{line:1,column:34508},end:{line:1,column:34556}},line:1},"172":{name:"(anonymous_172)",decl:{start:{line:1,column:34570},end:{line:1,column:34571}},loc:{start:{line:1,column:34580},end:{line:1,column:34628}},line:1},"173":{name:"(anonymous_173)",decl:{start:{line:1,column:34702},end:{line:1,column:34703}},loc:{start:{line:1,column:34706},end:{line:2,column:100}},line:1},"174":{name:"(anonymous_174)",decl:{start:{line:1,column:35219},end:{line:1,column:35220}},loc:{start:{line:1,column:35223},end:{line:1,column:35264}},line:1},"175":{name:"(anonymous_175)",decl:{start:{line:1,column:35279},end:{line:1,column:35280}},loc:{start:{line:1,column:35283},end:{line:1,column:35340}},line:1},"176":{name:"(anonymous_176)",decl:{start:{line:1,column:35342},end:{line:1,column:35343}},loc:{start:{line:1,column:35352},end:{line:1,column:35388}},line:1},"177":{name:"(anonymous_177)",decl:{start:{line:1,column:35388},end:{line:1,column:35389}},loc:{start:{line:1,column:35401},end:{line:1,column:35454}},line:1},"178":{name:"(anonymous_178)",decl:{start:{line:1,column:35454},end:{line:1,column:35455}},loc:{start:{line:1,column:35463},end:{line:1,column:35562}},line:1},"179":{name:"(anonymous_179)",decl:{start:{line:1,column:35489},end:{line:1,column:35490}},loc:{start:{line:1,column:35492},end:{line:1,column:35500}},line:1},"180":{name:"(anonymous_180)",decl:{start:{line:1,column:35562},end:{line:1,column:35563}},loc:{start:{line:1,column:35582},end:{line:1,column:35784}},line:1},"181":{name:"(anonymous_181)",decl:{start:{line:1,column:35696},end:{line:1,column:35697}},loc:{start:{line:1,column:35700},end:{line:1,column:35768}},line:1},"182":{name:"(anonymous_182)",decl:{start:{line:1,column:35784},end:{line:1,column:35785}},loc:{start:{line:1,column:35797},end:{line:1,column:35836}},line:1},"183":{name:"(anonymous_183)",decl:{start:{line:1,column:35836},end:{line:1,column:35837}},loc:{start:{line:1,column:35855},end:{line:1,column:35969}},line:1},"184":{name:"(anonymous_184)",decl:{start:{line:1,column:35969},end:{line:1,column:35970}},loc:{start:{line:1,column:35988},end:{line:1,column:36018}},line:1},"185":{name:"(anonymous_185)",decl:{start:{line:1,column:36018},end:{line:1,column:36019}},loc:{start:{line:1,column:36043},end:{line:1,column:36162}},line:1},"186":{name:"(anonymous_186)",decl:{start:{line:1,column:36162},end:{line:1,column:36163}},loc:{start:{line:1,column:36180},end:{line:1,column:36374}},line:1},"187":{name:"(anonymous_187)",decl:{start:{line:1,column:36264},end:{line:1,column:36265}},loc:{start:{line:1,column:36268},end:{line:1,column:36290}},line:1},"188":{name:"(anonymous_188)",decl:{start:{line:1,column:36346},end:{line:1,column:36347}},loc:{start:{line:1,column:36350},end:{line:1,column:36372}},line:1},"189":{name:"(anonymous_189)",decl:{start:{line:1,column:36374},end:{line:1,column:36375}},loc:{start:{line:1,column:36389},end:{line:1,column:36442}},line:1},"190":{name:"(anonymous_190)",decl:{start:{line:1,column:36459},end:{line:1,column:36460}},loc:{start:{line:1,column:36470},end:{line:1,column:36488}},line:1},"191":{name:"(anonymous_191)",decl:{start:{line:1,column:37854},end:{line:1,column:37855}},loc:{start:{line:1,column:37867},end:{line:1,column:38728}},line:1},"192":{name:"(anonymous_192)",decl:{start:{line:1,column:38145},end:{line:1,column:38146}},loc:{start:{line:1,column:38155},end:{line:1,column:38179}},line:1},"193":{name:"(anonymous_193)",decl:{start:{line:1,column:38251},end:{line:1,column:38252}},loc:{start:{line:1,column:38261},end:{line:1,column:38287}},line:1}},branchMap:{"0":{loc:{start:{line:1,column:1438},end:{line:1,column:1685}},type:"cond-expr",locations:[{start:{line:1,column:1453},end:{line:1,column:1572}},{start:{line:1,column:1573},end:{line:1,column:1685}}],line:1},"1":{loc:{start:{line:1,column:1809},end:{line:1,column:1867}},type:"cond-expr",locations:[{start:{line:1,column:1824},end:{line:1,column:1844}},{start:{line:1,column:1845},end:{line:1,column:1867}}],line:1},"2":{loc:{start:{line:1,column:1881},end:{line:1,column:1932}},type:"binary-expr",locations:[{start:{line:1,column:1881},end:{line:1,column:1896}},{start:{line:1,column:1898},end:{line:1,column:1932}}],line:1},"3":{loc:{start:{line:1,column:1973},end:{line:1,column:1977}},type:"binary-expr",locations:[{start:{line:1,column:1973},end:{line:1,column:1974}},{start:{line:1,column:1976},end:{line:1,column:1977}}],line:1},"4":{loc:{start:{line:1,column:2242},end:{line:1,column:2324}},type:"binary-expr",locations:[{start:{line:1,column:2242},end:{line:1,column:2245}},{start:{line:1,column:2248},end:{line:1,column:2323}}],line:1},"5":{loc:{start:{line:1,column:2325},end:{line:1,column:2459}},type:"binary-expr",locations:[{start:{line:1,column:2325},end:{line:1,column:2328}},{start:{line:1,column:2331},end:{line:1,column:2458}}],line:1},"6":{loc:{start:{line:1,column:2540},end:{line:1,column:2609}},type:"if",locations:[{start:{line:1,column:2540},end:{line:1,column:2609}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"7":{loc:{start:{line:1,column:2543},end:{line:1,column:2569}},type:"binary-expr",locations:[{start:{line:1,column:2543},end:{line:1,column:2546}},{start:{line:1,column:2549},end:{line:1,column:2568}}],line:1},"8":{loc:{start:{line:1,column:2627},end:{line:1,column:2820}},type:"if",locations:[{start:{line:1,column:2627},end:{line:1,column:2820}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"9":{loc:{start:{line:1,column:2820},end:{line:1,column:2993}},type:"if",locations:[{start:{line:1,column:2820},end:{line:1,column:2993}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"10":{loc:{start:{line:1,column:2859},end:{line:1,column:2909}},type:"cond-expr",locations:[{start:{line:1,column:2875},end:{line:1,column:2904}},{start:{line:1,column:2905},end:{line:1,column:2909}}],line:1},"11":{loc:{start:{line:1,column:2971},end:{line:1,column:2991}},type:"cond-expr",locations:[{start:{line:1,column:2987},end:{line:1,column:2988}},{start:{line:1,column:2989},end:{line:1,column:2991}}],line:1},"12":{loc:{start:{line:1,column:3177},end:{line:1,column:3181}},type:"binary-expr",locations:[{start:{line:1,column:3177},end:{line:1,column:3178}},{start:{line:1,column:3180},end:{line:1,column:3181}}],line:1},"13":{loc:{start:{line:1,column:4248},end:{line:1,column:4282}},type:"binary-expr",locations:[{start:{line:1,column:4248},end:{line:1,column:4251}},{start:{line:1,column:4254},end:{line:1,column:4281}}],line:1},"14":{loc:{start:{line:1,column:4283},end:{line:1,column:4304}},type:"binary-expr",locations:[{start:{line:1,column:4283},end:{line:1,column:4286}},{start:{line:1,column:4288},end:{line:1,column:4304}}],line:1},"15":{loc:{start:{line:1,column:4290},end:{line:1,column:4303}},type:"cond-expr",locations:[{start:{line:1,column:4299},end:{line:1,column:4300}},{start:{line:1,column:4301},end:{line:1,column:4303}}],line:1},"16":{loc:{start:{line:1,column:4474},end:{line:1,column:4491}},type:"binary-expr",locations:[{start:{line:1,column:4474},end:{line:1,column:4487}},{start:{line:1,column:4489},end:{line:1,column:4491}}],line:1},"17":{loc:{start:{line:1,column:4791},end:{line:1,column:4824}},type:"if",locations:[{start:{line:1,column:4791},end:{line:1,column:4824}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"18":{loc:{start:{line:1,column:4824},end:{line:1,column:4867}},type:"if",locations:[{start:{line:1,column:4824},end:{line:1,column:4867}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"19":{loc:{start:{line:1,column:4867},end:{line:1,column:4897}},type:"if",locations:[{start:{line:1,column:4867},end:{line:1,column:4897}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"20":{loc:{start:{line:1,column:4897},end:{line:1,column:4937}},type:"if",locations:[{start:{line:1,column:4897},end:{line:1,column:4937}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"21":{loc:{start:{line:1,column:4937},end:{line:1,column:4966}},type:"if",locations:[{start:{line:1,column:4937},end:{line:1,column:4966}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"22":{loc:{start:{line:1,column:5063},end:{line:1,column:5067}},type:"binary-expr",locations:[{start:{line:1,column:5063},end:{line:1,column:5064}},{start:{line:1,column:5066},end:{line:1,column:5067}}],line:1},"23":{loc:{start:{line:1,column:5440},end:{line:1,column:5479}},type:"cond-expr",locations:[{start:{line:1,column:5442},end:{line:1,column:5476}},{start:{line:1,column:5477},end:{line:1,column:5479}}],line:1},"24":{loc:{start:{line:1,column:5510},end:{line:1,column:5535}},type:"binary-expr",locations:[{start:{line:1,column:5510},end:{line:1,column:5529}},{start:{line:1,column:5531},end:{line:1,column:5535}}],line:1},"25":{loc:{start:{line:1,column:5605},end:{line:1,column:5647}},type:"if",locations:[{start:{line:1,column:5605},end:{line:1,column:5647}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"26":{loc:{start:{line:1,column:5608},end:{line:1,column:5634}},type:"binary-expr",locations:[{start:{line:1,column:5608},end:{line:1,column:5620}},{start:{line:1,column:5622},end:{line:1,column:5634}}],line:1},"27":{loc:{start:{line:1,column:5675},end:{line:1,column:5686}},type:"binary-expr",locations:[{start:{line:1,column:5675},end:{line:1,column:5682}},{start:{line:1,column:5684},end:{line:1,column:5686}}],line:1},"28":{loc:{start:{line:1,column:5723},end:{line:1,column:5739}},type:"if",locations:[{start:{line:1,column:5723},end:{line:1,column:5739}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"29":{loc:{start:{line:1,column:5746},end:{line:1,column:5763}},type:"binary-expr",locations:[{start:{line:1,column:5746},end:{line:1,column:5759}},{start:{line:1,column:5761},end:{line:1,column:5763}}],line:1},"30":{loc:{start:{line:1,column:5783},end:{line:1,column:5933}},type:"if",locations:[{start:{line:1,column:5783},end:{line:1,column:5933}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"31":{loc:{start:{line:1,column:5976},end:{line:1,column:6037}},type:"cond-expr",locations:[{start:{line:1,column:6008},end:{line:1,column:6020}},{start:{line:1,column:6021},end:{line:1,column:6037}}],line:1},"32":{loc:{start:{line:1,column:6062},end:{line:1,column:6099}},type:"cond-expr",locations:[{start:{line:1,column:6064},end:{line:1,column:6096}},{start:{line:1,column:6097},end:{line:1,column:6099}}],line:1},"33":{loc:{start:{line:1,column:6240},end:{line:1,column:6302}},type:"cond-expr",locations:[{start:{line:1,column:6253},end:{line:1,column:6254}},{start:{line:1,column:6255},end:{line:1,column:6302}}],line:1},"34":{loc:{start:{line:1,column:6255},end:{line:1,column:6302}},type:"binary-expr",locations:[{start:{line:1,column:6255},end:{line:1,column:6299}},{start:{line:1,column:6301},end:{line:1,column:6302}}],line:1},"35":{loc:{start:{line:1,column:6345},end:{line:1,column:6370}},type:"if",locations:[{start:{line:1,column:6345},end:{line:1,column:6370}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"36":{loc:{start:{line:1,column:6405},end:{line:1,column:6497}},type:"cond-expr",locations:[{start:{line:1,column:6416},end:{line:1,column:6460}},{start:{line:1,column:6461},end:{line:1,column:6497}}],line:1},"37":{loc:{start:{line:1,column:6528},end:{line:1,column:6533}},type:"binary-expr",locations:[{start:{line:1,column:6528},end:{line:1,column:6529}},{start:{line:1,column:6531},end:{line:1,column:6533}}],line:1},"38":{loc:{start:{line:1,column:6624},end:{line:1,column:6629}},type:"binary-expr",locations:[{start:{line:1,column:6624},end:{line:1,column:6625}},{start:{line:1,column:6627},end:{line:1,column:6629}}],line:1},"39":{loc:{start:{line:1,column:6740},end:{line:1,column:6744}},type:"binary-expr",locations:[{start:{line:1,column:6740},end:{line:1,column:6741}},{start:{line:1,column:6743},end:{line:1,column:6744}}],line:1},"40":{loc:{start:{line:1,column:7059},end:{line:1,column:7522}},type:"if",locations:[{start:{line:1,column:7059},end:{line:1,column:7522}},{start:{line:1,column:7169},end:{line:1,column:7522}}],line:1},"41":{loc:{start:{line:1,column:7169},end:{line:1,column:7522}},type:"if",locations:[{start:{line:1,column:7169},end:{line:1,column:7522}},{start:{line:1,column:7459},end:{line:1,column:7522}}],line:1},"42":{loc:{start:{line:1,column:7398},end:{line:1,column:7409}},type:"binary-expr",locations:[{start:{line:1,column:7398},end:{line:1,column:7405}},{start:{line:1,column:7407},end:{line:1,column:7409}}],line:1},"43":{loc:{start:{line:1,column:7412},end:{line:1,column:7453}},type:"binary-expr",locations:[{start:{line:1,column:7412},end:{line:1,column:7423}},{start:{line:1,column:7425},end:{line:1,column:7453}}],line:1},"44":{loc:{start:{line:1,column:7522},end:{line:1,column:7591}},type:"binary-expr",locations:[{start:{line:1,column:7522},end:{line:1,column:7536}},{start:{line:1,column:7538},end:{line:1,column:7558}},{start:{line:1,column:7560},end:{line:1,column:7591}}],line:1},"45":{loc:{start:{line:1,column:7712},end:{line:1,column:7810}},type:"cond-expr",locations:[{start:{line:1,column:7721},end:{line:1,column:7768}},{start:{line:1,column:7769},end:{line:1,column:7810}}],line:1},"46":{loc:{start:{line:1,column:7769},end:{line:1,column:7810}},type:"cond-expr",locations:[{start:{line:1,column:7790},end:{line:1,column:7793}},{start:{line:1,column:7794},end:{line:1,column:7810}}],line:1},"47":{loc:{start:{line:1,column:7769},end:{line:1,column:7789}},type:"binary-expr",locations:[{start:{line:1,column:7769},end:{line:1,column:7779}},{start:{line:1,column:7781},end:{line:1,column:7789}}],line:1},"48":{loc:{start:{line:1,column:7871},end:{line:1,column:7924}},type:"cond-expr",locations:[{start:{line:1,column:7895},end:{line:1,column:7899}},{start:{line:1,column:7900},end:{line:1,column:7924}}],line:1},"49":{loc:{start:{line:1,column:7871},end:{line:1,column:7894}},type:"binary-expr",locations:[{start:{line:1,column:7871},end:{line:1,column:7879}},{start:{line:1,column:7881},end:{line:1,column:7894}}],line:1},"50":{loc:{start:{line:1,column:8017},end:{line:1,column:8028}},type:"binary-expr",locations:[{start:{line:1,column:8017},end:{line:1,column:8024}},{start:{line:1,column:8026},end:{line:1,column:8028}}],line:1},"51":{loc:{start:{line:1,column:8044},end:{line:1,column:8111}},type:"cond-expr",locations:[{start:{line:1,column:8081},end:{line:1,column:8085}},{start:{line:1,column:8086},end:{line:1,column:8111}}],line:1},"52":{loc:{start:{line:1,column:8044},end:{line:1,column:8080}},type:"binary-expr",locations:[{start:{line:1,column:8044},end:{line:1,column:8056}},{start:{line:1,column:8058},end:{line:1,column:8080}}],line:1},"53":{loc:{start:{line:1,column:8153},end:{line:1,column:8157}},type:"binary-expr",locations:[{start:{line:1,column:8153},end:{line:1,column:8154}},{start:{line:1,column:8156},end:{line:1,column:8157}}],line:1},"54":{loc:{start:{line:1,column:8527},end:{line:1,column:8846}},type:"cond-expr",locations:[{start:{line:1,column:8587},end:{line:1,column:8596}},{start:{line:1,column:8598},end:{line:1,column:8845}}],line:1},"55":{loc:{start:{line:1,column:8527},end:{line:1,column:8586}},type:"binary-expr",locations:[{start:{line:1,column:8527},end:{line:1,column:8537}},{start:{line:1,column:8539},end:{line:1,column:8561}},{start:{line:1,column:8563},end:{line:1,column:8586}}],line:1},"56":{loc:{start:{line:1,column:9015},end:{line:1,column:9368}},type:"cond-expr",locations:[{start:{line:1,column:9029},end:{line:1,column:9064}},{start:{line:1,column:9067},end:{line:1,column:9367}}],line:1},"57":{loc:{start:{line:1,column:9431},end:{line:1,column:9593}},type:"cond-expr",locations:[{start:{line:1,column:9458},end:{line:1,column:9465}},{start:{line:1,column:9466},end:{line:1,column:9593}}],line:1},"58":{loc:{start:{line:1,column:9431},end:{line:1,column:9457}},type:"binary-expr",locations:[{start:{line:1,column:9431},end:{line:1,column:9443}},{start:{line:1,column:9445},end:{line:1,column:9457}}],line:1},"59":{loc:{start:{line:1,column:9780},end:{line:1,column:9829}},type:"if",locations:[{start:{line:1,column:9780},end:{line:1,column:9829}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"60":{loc:{start:{line:1,column:10138},end:{line:1,column:10142}},type:"binary-expr",locations:[{start:{line:1,column:10138},end:{line:1,column:10139}},{start:{line:1,column:10141},end:{line:1,column:10142}}],line:1},"61":{loc:{start:{line:1,column:10330},end:{line:1,column:10845}},type:"if",locations:[{start:{line:1,column:10330},end:{line:1,column:10845}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"62":{loc:{start:{line:1,column:10845},end:{line:1,column:11421}},type:"if",locations:[{start:{line:1,column:10845},end:{line:1,column:11421}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"63":{loc:{start:{line:1,column:11274},end:{line:1,column:11302}},type:"binary-expr",locations:[{start:{line:1,column:11274},end:{line:1,column:11298}},{start:{line:1,column:11300},end:{line:1,column:11302}}],line:1},"64":{loc:{start:{line:1,column:11421},end:{line:1,column:11578}},type:"if",locations:[{start:{line:1,column:11421},end:{line:1,column:11578}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"65":{loc:{start:{line:1,column:11474},end:{line:1,column:11503}},type:"binary-expr",locations:[{start:{line:1,column:11474},end:{line:1,column:11499}},{start:{line:1,column:11501},end:{line:1,column:11503}}],line:1},"66":{loc:{start:{line:1,column:11805},end:{line:1,column:11901}},type:"if",locations:[{start:{line:1,column:11805},end:{line:1,column:11901}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"67":{loc:{start:{line:1,column:12033},end:{line:1,column:12058}},type:"cond-expr",locations:[{start:{line:1,column:12046},end:{line:1,column:12053}},{start:{line:1,column:12054},end:{line:1,column:12058}}],line:1},"68":{loc:{start:{line:1,column:12244},end:{line:1,column:12248}},type:"binary-expr",locations:[{start:{line:1,column:12244},end:{line:1,column:12245}},{start:{line:1,column:12247},end:{line:1,column:12248}}],line:1},"69":{loc:{start:{line:1,column:12375},end:{line:1,column:12493}},type:"binary-expr",locations:[{start:{line:1,column:12375},end:{line:1,column:12378}},{start:{line:1,column:12381},end:{line:1,column:12492}}],line:1},"70":{loc:{start:{line:1,column:12511},end:{line:1,column:12651}},type:"if",locations:[{start:{line:1,column:12511},end:{line:1,column:12651}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"71":{loc:{start:{line:1,column:12514},end:{line:1,column:12602}},type:"binary-expr",locations:[{start:{line:1,column:12514},end:{line:1,column:12517}},{start:{line:1,column:12520},end:{line:1,column:12601}}],line:1},"72":{loc:{start:{line:1,column:12669},end:{line:1,column:12758}},type:"if",locations:[{start:{line:1,column:12669},end:{line:1,column:12758}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"73":{loc:{start:{line:1,column:12672},end:{line:1,column:12704}},type:"binary-expr",locations:[{start:{line:1,column:12672},end:{line:1,column:12675}},{start:{line:1,column:12678},end:{line:1,column:12703}}],line:1},"74":{loc:{start:{line:1,column:12776},end:{line:1,column:12831}},type:"if",locations:[{start:{line:1,column:12776},end:{line:1,column:12831}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"75":{loc:{start:{line:1,column:12779},end:{line:1,column:12806}},type:"binary-expr",locations:[{start:{line:1,column:12779},end:{line:1,column:12782}},{start:{line:1,column:12785},end:{line:1,column:12805}}],line:1},"76":{loc:{start:{line:1,column:12849},end:{line:1,column:12872}},type:"binary-expr",locations:[{start:{line:1,column:12849},end:{line:1,column:12852}},{start:{line:1,column:12854},end:{line:1,column:12872}}],line:1},"77":{loc:{start:{line:1,column:12873},end:{line:1,column:12887}},type:"binary-expr",locations:[{start:{line:1,column:12873},end:{line:1,column:12876}},{start:{line:1,column:12878},end:{line:1,column:12887}}],line:1},"78":{loc:{start:{line:1,column:12880},end:{line:1,column:12886}},type:"cond-expr",locations:[{start:{line:1,column:12882},end:{line:1,column:12883}},{start:{line:1,column:12884},end:{line:1,column:12886}}],line:1},"79":{loc:{start:{line:1,column:12905},end:{line:1,column:12964}},type:"binary-expr",locations:[{start:{line:1,column:12905},end:{line:1,column:12908}},{start:{line:1,column:12911},end:{line:1,column:12963}}],line:1},"80":{loc:{start:{line:1,column:12982},end:{line:1,column:13421}},type:"if",locations:[{start:{line:1,column:12982},end:{line:1,column:13421}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"81":{loc:{start:{line:1,column:12985},end:{line:1,column:13179}},type:"binary-expr",locations:[{start:{line:1,column:12985},end:{line:1,column:12988}},{start:{line:1,column:12991},end:{line:1,column:13178}}],line:1},"82":{loc:{start:{line:1,column:13219},end:{line:1,column:13283}},type:"binary-expr",locations:[{start:{line:1,column:13219},end:{line:1,column:13250}},{start:{line:1,column:13252},end:{line:1,column:13283}}],line:1},"83":{loc:{start:{line:1,column:13311},end:{line:1,column:13339}},type:"cond-expr",locations:[{start:{line:1,column:13335},end:{line:1,column:13336}},{start:{line:1,column:13337},end:{line:1,column:13339}}],line:1},"84":{loc:{start:{line:1,column:13349},end:{line:1,column:13419}},type:"cond-expr",locations:[{start:{line:1,column:13414},end:{line:1,column:13416}},{start:{line:1,column:13417},end:{line:1,column:13419}}],line:1},"85":{loc:{start:{line:1,column:13349},end:{line:1,column:13413}},type:"binary-expr",locations:[{start:{line:1,column:13349},end:{line:1,column:13380}},{start:{line:1,column:13382},end:{line:1,column:13413}}],line:1},"86":{loc:{start:{line:1,column:13439},end:{line:1,column:13495}},type:"binary-expr",locations:[{start:{line:1,column:13439},end:{line:1,column:13442}},{start:{line:1,column:13445},end:{line:1,column:13494}}],line:1},"87":{loc:{start:{line:1,column:13513},end:{line:1,column:13603}},type:"if",locations:[{start:{line:1,column:13513},end:{line:1,column:13603}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"88":{loc:{start:{line:1,column:13516},end:{line:1,column:13548}},type:"binary-expr",locations:[{start:{line:1,column:13516},end:{line:1,column:13519}},{start:{line:1,column:13522},end:{line:1,column:13547}}],line:1},"89":{loc:{start:{line:1,column:13621},end:{line:1,column:13720}},type:"binary-expr",locations:[{start:{line:1,column:13621},end:{line:1,column:13624}},{start:{line:1,column:13627},end:{line:1,column:13719}}],line:1},"90":{loc:{start:{line:1,column:13738},end:{line:1,column:13793}},type:"binary-expr",locations:[{start:{line:1,column:13738},end:{line:1,column:13741}},{start:{line:1,column:13744},end:{line:1,column:13792}}],line:1},"91":{loc:{start:{line:1,column:13811},end:{line:1,column:13866}},type:"if",locations:[{start:{line:1,column:13811},end:{line:1,column:13866}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"92":{loc:{start:{line:1,column:13814},end:{line:1,column:13841}},type:"binary-expr",locations:[{start:{line:1,column:13814},end:{line:1,column:13817}},{start:{line:1,column:13820},end:{line:1,column:13840}}],line:1},"93":{loc:{start:{line:1,column:13884},end:{line:1,column:13907}},type:"binary-expr",locations:[{start:{line:1,column:13884},end:{line:1,column:13887}},{start:{line:1,column:13889},end:{line:1,column:13907}}],line:1},"94":{loc:{start:{line:1,column:13908},end:{line:1,column:13922}},type:"binary-expr",locations:[{start:{line:1,column:13908},end:{line:1,column:13911}},{start:{line:1,column:13913},end:{line:1,column:13922}}],line:1},"95":{loc:{start:{line:1,column:13915},end:{line:1,column:13921}},type:"cond-expr",locations:[{start:{line:1,column:13917},end:{line:1,column:13918}},{start:{line:1,column:13919},end:{line:1,column:13921}}],line:1},"96":{loc:{start:{line:1,column:13940},end:{line:1,column:14003}},type:"binary-expr",locations:[{start:{line:1,column:13940},end:{line:1,column:13943}},{start:{line:1,column:13946},end:{line:1,column:14002}}],line:1},"97":{loc:{start:{line:1,column:14021},end:{line:1,column:14110}},type:"if",locations:[{start:{line:1,column:14021},end:{line:1,column:14110}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"98":{loc:{start:{line:1,column:14024},end:{line:1,column:14056}},type:"binary-expr",locations:[{start:{line:1,column:14024},end:{line:1,column:14027}},{start:{line:1,column:14030},end:{line:1,column:14055}}],line:1},"99":{loc:{start:{line:1,column:14128},end:{line:1,column:14227}},type:"binary-expr",locations:[{start:{line:1,column:14128},end:{line:1,column:14131}},{start:{line:1,column:14134},end:{line:1,column:14226}}],line:1},"100":{loc:{start:{line:1,column:14245},end:{line:1,column:14337}},type:"binary-expr",locations:[{start:{line:1,column:14245},end:{line:1,column:14248}},{start:{line:1,column:14251},end:{line:1,column:14336}}],line:1},"101":{loc:{start:{line:1,column:14355},end:{line:1,column:14416}},type:"binary-expr",locations:[{start:{line:1,column:14355},end:{line:1,column:14358}},{start:{line:1,column:14361},end:{line:1,column:14415}}],line:1},"102":{loc:{start:{line:1,column:14434},end:{line:1,column:15612}},type:"if",locations:[{start:{line:1,column:14434},end:{line:1,column:15612}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"103":{loc:{start:{line:1,column:14437},end:{line:1,column:14875}},type:"binary-expr",locations:[{start:{line:1,column:14437},end:{line:1,column:14440}},{start:{line:1,column:14443},end:{line:1,column:14874}}],line:1},"104":{loc:{start:{line:1,column:14915},end:{line:1,column:14981}},type:"binary-expr",locations:[{start:{line:1,column:14915},end:{line:1,column:14947}},{start:{line:1,column:14949},end:{line:1,column:14981}}],line:1},"105":{loc:{start:{line:1,column:14989},end:{line:1,column:15008}},type:"cond-expr",locations:[{start:{line:1,column:15004},end:{line:1,column:15006}},{start:{line:1,column:15007},end:{line:1,column:15008}}],line:1},"106":{loc:{start:{line:1,column:15042},end:{line:1,column:15104}},type:"cond-expr",locations:[{start:{line:1,column:15100},end:{line:1,column:15101}},{start:{line:1,column:15102},end:{line:1,column:15104}}],line:1},"107":{loc:{start:{line:1,column:15042},end:{line:1,column:15099}},type:"binary-expr",locations:[{start:{line:1,column:15042},end:{line:1,column:15057}},{start:{line:1,column:15059},end:{line:1,column:15099}}],line:1},"108":{loc:{start:{line:1,column:15112},end:{line:1,column:15137}},type:"cond-expr",locations:[{start:{line:1,column:15133},end:{line:1,column:15134}},{start:{line:1,column:15135},end:{line:1,column:15137}}],line:1},"109":{loc:{start:{line:1,column:15145},end:{line:1,column:15175}},type:"cond-expr",locations:[{start:{line:1,column:15170},end:{line:1,column:15172}},{start:{line:1,column:15173},end:{line:1,column:15175}}],line:1},"110":{loc:{start:{line:1,column:15185},end:{line:1,column:15257}},type:"cond-expr",locations:[{start:{line:1,column:15252},end:{line:1,column:15254}},{start:{line:1,column:15255},end:{line:1,column:15257}}],line:1},"111":{loc:{start:{line:1,column:15185},end:{line:1,column:15251}},type:"binary-expr",locations:[{start:{line:1,column:15185},end:{line:1,column:15217}},{start:{line:1,column:15219},end:{line:1,column:15251}}],line:1},"112":{loc:{start:{line:1,column:15281},end:{line:1,column:15353}},type:"binary-expr",locations:[{start:{line:1,column:15281},end:{line:1,column:15316}},{start:{line:1,column:15318},end:{line:1,column:15353}}],line:1},"113":{loc:{start:{line:1,column:15391},end:{line:1,column:15438}},type:"cond-expr",locations:[{start:{line:1,column:15433},end:{line:1,column:15435}},{start:{line:1,column:15436},end:{line:1,column:15438}}],line:1},"114":{loc:{start:{line:1,column:15446},end:{line:1,column:15524}},type:"cond-expr",locations:[{start:{line:1,column:15519},end:{line:1,column:15521}},{start:{line:1,column:15522},end:{line:1,column:15524}}],line:1},"115":{loc:{start:{line:1,column:15446},end:{line:1,column:15518}},type:"binary-expr",locations:[{start:{line:1,column:15446},end:{line:1,column:15485}},{start:{line:1,column:15487},end:{line:1,column:15518}}],line:1},"116":{loc:{start:{line:1,column:15532},end:{line:1,column:15610}},type:"cond-expr",locations:[{start:{line:1,column:15605},end:{line:1,column:15607}},{start:{line:1,column:15608},end:{line:1,column:15610}}],line:1},"117":{loc:{start:{line:1,column:15532},end:{line:1,column:15604}},type:"binary-expr",locations:[{start:{line:1,column:15532},end:{line:1,column:15567}},{start:{line:1,column:15569},end:{line:1,column:15604}}],line:1},"118":{loc:{start:{line:1,column:15630},end:{line:1,column:15712}},type:"if",locations:[{start:{line:1,column:15630},end:{line:1,column:15712}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"119":{loc:{start:{line:1,column:15633},end:{line:1,column:15664}},type:"binary-expr",locations:[{start:{line:1,column:15633},end:{line:1,column:15636}},{start:{line:1,column:15639},end:{line:1,column:15663}}],line:1},"120":{loc:{start:{line:1,column:15730},end:{line:1,column:15772}},type:"binary-expr",locations:[{start:{line:1,column:15730},end:{line:1,column:15733}},{start:{line:1,column:15735},end:{line:1,column:15772}}],line:1},"121":{loc:{start:{line:1,column:15773},end:{line:1,column:15793}},type:"binary-expr",locations:[{start:{line:1,column:15773},end:{line:1,column:15776}},{start:{line:1,column:15778},end:{line:1,column:15793}}],line:1},"122":{loc:{start:{line:1,column:15811},end:{line:1,column:15874}},type:"binary-expr",locations:[{start:{line:1,column:15811},end:{line:1,column:15814}},{start:{line:1,column:15817},end:{line:1,column:15873}}],line:1},"123":{loc:{start:{line:1,column:15892},end:{line:1,column:16082}},type:"if",locations:[{start:{line:1,column:15892},end:{line:1,column:16082}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"124":{loc:{start:{line:1,column:15895},end:{line:1,column:16010}},type:"binary-expr",locations:[{start:{line:1,column:15895},end:{line:1,column:15898}},{start:{line:1,column:15901},end:{line:1,column:16009}}],line:1},"125":{loc:{start:{line:1,column:16036},end:{line:1,column:16080}},type:"binary-expr",locations:[{start:{line:1,column:16036},end:{line:1,column:16075}},{start:{line:1,column:16077},end:{line:1,column:16080}}],line:1},"126":{loc:{start:{line:1,column:16100},end:{line:1,column:16182}},type:"if",locations:[{start:{line:1,column:16100},end:{line:1,column:16182}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"127":{loc:{start:{line:1,column:16103},end:{line:1,column:16134}},type:"binary-expr",locations:[{start:{line:1,column:16103},end:{line:1,column:16106}},{start:{line:1,column:16109},end:{line:1,column:16133}}],line:1},"128":{loc:{start:{line:1,column:16200},end:{line:1,column:16468}},type:"if",locations:[{start:{line:1,column:16200},end:{line:1,column:16468}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"129":{loc:{start:{line:1,column:16203},end:{line:1,column:16290}},type:"binary-expr",locations:[{start:{line:1,column:16203},end:{line:1,column:16206}},{start:{line:1,column:16209},end:{line:1,column:16289}}],line:1},"130":{loc:{start:{line:1,column:16323},end:{line:1,column:16407}},type:"binary-expr",locations:[{start:{line:1,column:16323},end:{line:1,column:16364}},{start:{line:1,column:16366},end:{line:1,column:16407}}],line:1},"131":{loc:{start:{line:1,column:16486},end:{line:1,column:16556}},type:"binary-expr",locations:[{start:{line:1,column:16486},end:{line:1,column:16489}},{start:{line:1,column:16492},end:{line:1,column:16555}}],line:1},"132":{loc:{start:{line:1,column:16574},end:{line:1,column:16654}},type:"binary-expr",locations:[{start:{line:1,column:16574},end:{line:1,column:16577}},{start:{line:1,column:16580},end:{line:1,column:16653}}],line:1},"133":{loc:{start:{line:1,column:16672},end:{line:1,column:16733}},type:"if",locations:[{start:{line:1,column:16672},end:{line:1,column:16733}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"134":{loc:{start:{line:1,column:16675},end:{line:1,column:16696}},type:"binary-expr",locations:[{start:{line:1,column:16675},end:{line:1,column:16678}},{start:{line:1,column:16680},end:{line:1,column:16696}}],line:1},"135":{loc:{start:{line:1,column:16751},end:{line:1,column:16830}},type:"if",locations:[{start:{line:1,column:16751},end:{line:1,column:16830}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"136":{loc:{start:{line:1,column:16754},end:{line:1,column:16780}},type:"binary-expr",locations:[{start:{line:1,column:16754},end:{line:1,column:16757}},{start:{line:1,column:16760},end:{line:1,column:16779}}],line:1},"137":{loc:{start:{line:1,column:16848},end:{line:1,column:16906}},type:"binary-expr",locations:[{start:{line:1,column:16848},end:{line:1,column:16851}},{start:{line:1,column:16854},end:{line:1,column:16905}}],line:1},"138":{loc:{start:{line:1,column:16924},end:{line:1,column:17010}},type:"binary-expr",locations:[{start:{line:1,column:16924},end:{line:1,column:16927}},{start:{line:1,column:16930},end:{line:1,column:17009}}],line:1},"139":{loc:{start:{line:1,column:17028},end:{line:1,column:17094}},type:"binary-expr",locations:[{start:{line:1,column:17028},end:{line:1,column:17031}},{start:{line:1,column:17034},end:{line:1,column:17093}}],line:1},"140":{loc:{start:{line:1,column:17112},end:{line:1,column:17185}},type:"binary-expr",locations:[{start:{line:1,column:17112},end:{line:1,column:17115}},{start:{line:1,column:17118},end:{line:1,column:17184}}],line:1},"141":{loc:{start:{line:1,column:17203},end:{line:1,column:17279}},type:"binary-expr",locations:[{start:{line:1,column:17203},end:{line:1,column:17206}},{start:{line:1,column:17209},end:{line:1,column:17278}}],line:1},"142":{loc:{start:{line:1,column:17953},end:{line:1,column:17985}},type:"if",locations:[{start:{line:1,column:17953},end:{line:1,column:17985}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"143":{loc:{start:{line:1,column:17991},end:{line:1,column:18023}},type:"binary-expr",locations:[{start:{line:1,column:17991},end:{line:1,column:18019}},{start:{line:1,column:18021},end:{line:1,column:18023}}],line:1},"144":{loc:{start:{line:1,column:18153},end:{line:1,column:18253}},type:"if",locations:[{start:{line:1,column:18153},end:{line:1,column:18253}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"145":{loc:{start:{line:1,column:18284},end:{line:1,column:18351}},type:"if",locations:[{start:{line:1,column:18284},end:{line:1,column:18351}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"146":{loc:{start:{line:1,column:18407},end:{line:1,column:18436}},type:"cond-expr",locations:[{start:{line:1,column:18416},end:{line:1,column:18432}},{start:{line:1,column:18433},end:{line:1,column:18436}}],line:1},"147":{loc:{start:{line:1,column:18564},end:{line:1,column:19066}},type:"cond-expr",locations:[{start:{line:1,column:18582},end:{line:1,column:18745}},{start:{line:1,column:18746},end:{line:1,column:19066}}],line:1},"148":{loc:{start:{line:1,column:18582},end:{line:1,column:18745}},type:"cond-expr",locations:[{start:{line:1,column:18622},end:{line:1,column:18694}},{start:{line:1,column:18695},end:{line:1,column:18745}}],line:1},"149":{loc:{start:{line:1,column:18746},end:{line:1,column:19066}},type:"cond-expr",locations:[{start:{line:1,column:18781},end:{line:1,column:18814}},{start:{line:1,column:18815},end:{line:1,column:19066}}],line:1},"150":{loc:{start:{line:1,column:18815},end:{line:1,column:19066}},type:"cond-expr",locations:[{start:{line:1,column:18853},end:{line:1,column:18912}},{start:{line:1,column:18913},end:{line:1,column:19066}}],line:1},"151":{loc:{start:{line:1,column:18913},end:{line:1,column:19066}},type:"cond-expr",locations:[{start:{line:1,column:18953},end:{line:1,column:19015}},{start:{line:1,column:19016},end:{line:1,column:19066}}],line:1},"152":{loc:{start:{line:1,column:19115},end:{line:1,column:19560}},type:"if",locations:[{start:{line:1,column:19115},end:{line:1,column:19560}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"153":{loc:{start:{line:1,column:19379},end:{line:1,column:19396}},type:"binary-expr",locations:[{start:{line:1,column:19379},end:{line:1,column:19392}},{start:{line:1,column:19394},end:{line:1,column:19396}}],line:1},"154":{loc:{start:{line:1,column:19532},end:{line:1,column:19549}},type:"binary-expr",locations:[{start:{line:1,column:19532},end:{line:1,column:19545}},{start:{line:1,column:19547},end:{line:1,column:19549}}],line:1},"155":{loc:{start:{line:1,column:19959},end:{line:1,column:20003}},type:"binary-expr",locations:[{start:{line:1,column:19959},end:{line:1,column:19979}},{start:{line:1,column:19981},end:{line:1,column:20003}}],line:1},"156":{loc:{start:{line:1,column:20086},end:{line:1,column:20131}},type:"binary-expr",locations:[{start:{line:1,column:20086},end:{line:1,column:20106}},{start:{line:1,column:20108},end:{line:1,column:20131}}],line:1},"157":{loc:{start:{line:1,column:20217},end:{line:1,column:20265}},type:"binary-expr",locations:[{start:{line:1,column:20217},end:{line:1,column:20237}},{start:{line:1,column:20239},end:{line:1,column:20265}}],line:1},"158":{loc:{start:{line:1,column:20822},end:{line:1,column:21137}},type:"if",locations:[{start:{line:1,column:20822},end:{line:1,column:21137}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"159":{loc:{start:{line:1,column:20825},end:{line:1,column:20880}},type:"binary-expr",locations:[{start:{line:1,column:20825},end:{line:1,column:20847}},{start:{line:1,column:20849},end:{line:1,column:20880}}],line:1},"160":{loc:{start:{line:1,column:21137},end:{line:1,column:21195}},type:"if",locations:[{start:{line:1,column:21137},end:{line:1,column:21195}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"161":{loc:{start:{line:1,column:21246},end:{line:1,column:21331}},type:"if",locations:[{start:{line:1,column:21246},end:{line:1,column:21331}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"162":{loc:{start:{line:1,column:21249},end:{line:1,column:21272}},type:"binary-expr",locations:[{start:{line:1,column:21249},end:{line:1,column:21269}},{start:{line:1,column:21271},end:{line:1,column:21272}}],line:1},"163":{loc:{start:{line:1,column:21559},end:{line:1,column:21789}},type:"if",locations:[{start:{line:1,column:21559},end:{line:1,column:21789}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"164":{loc:{start:{line:1,column:21949},end:{line:1,column:22064}},type:"cond-expr",locations:[{start:{line:1,column:21962},end:{line:1,column:22013}},{start:{line:1,column:22014},end:{line:1,column:22064}}],line:1},"165":{loc:{start:{line:1,column:22162},end:{line:1,column:22497}},type:"if",locations:[{start:{line:1,column:22162},end:{line:1,column:22497}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"166":{loc:{start:{line:1,column:22599},end:{line:1,column:22767}},type:"binary-expr",locations:[{start:{line:1,column:22599},end:{line:1,column:22631}},{start:{line:1,column:22634},end:{line:1,column:22766}}],line:1},"167":{loc:{start:{line:1,column:23286},end:{line:1,column:23317}},type:"if",locations:[{start:{line:1,column:23286},end:{line:1,column:23317}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"168":{loc:{start:{line:1,column:23332},end:{line:1,column:23494}},type:"if",locations:[{start:{line:1,column:23332},end:{line:1,column:23494}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"169":{loc:{start:{line:1,column:23349},end:{line:1,column:23417}},type:"if",locations:[{start:{line:1,column:23349},end:{line:1,column:23417}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"170":{loc:{start:{line:1,column:23352},end:{line:1,column:23409}},type:"binary-expr",locations:[{start:{line:1,column:23352},end:{line:1,column:23387}},{start:{line:1,column:23389},end:{line:1,column:23409}}],line:1},"171":{loc:{start:{line:1,column:23577},end:{line:1,column:23701}},type:"binary-expr",locations:[{start:{line:1,column:23577},end:{line:1,column:23612}},{start:{line:1,column:23614},end:{line:1,column:23634}},{start:{line:1,column:23637},end:{line:1,column:23700}}],line:1},"172":{loc:{start:{line:1,column:23774},end:{line:1,column:23792}},type:"cond-expr",locations:[{start:{line:1,column:23787},end:{line:1,column:23790}},{start:{line:1,column:23791},end:{line:1,column:23792}}],line:1},"173":{loc:{start:{line:1,column:23866},end:{line:1,column:23870}},type:"binary-expr",locations:[{start:{line:1,column:23866},end:{line:1,column:23867}},{start:{line:1,column:23869},end:{line:1,column:23870}}],line:1},"174":{loc:{start:{line:1,column:28802},end:{line:1,column:31902}},type:"if",locations:[{start:{line:1,column:28802},end:{line:1,column:31902}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"175":{loc:{start:{line:1,column:28805},end:{line:1,column:30185}},type:"binary-expr",locations:[{start:{line:1,column:28805},end:{line:1,column:28808}},{start:{line:1,column:28811},end:{line:1,column:30184}}],line:1},"176":{loc:{start:{line:1,column:30226},end:{line:1,column:30245}},type:"cond-expr",locations:[{start:{line:1,column:30241},end:{line:1,column:30242}},{start:{line:1,column:30243},end:{line:1,column:30245}}],line:1},"177":{loc:{start:{line:1,column:30253},end:{line:1,column:30272}},type:"cond-expr",locations:[{start:{line:1,column:30268},end:{line:1,column:30269}},{start:{line:1,column:30270},end:{line:1,column:30272}}],line:1},"178":{loc:{start:{line:1,column:30280},end:{line:1,column:30312}},type:"cond-expr",locations:[{start:{line:1,column:30308},end:{line:1,column:30309}},{start:{line:1,column:30310},end:{line:1,column:30312}}],line:1},"179":{loc:{start:{line:1,column:30320},end:{line:1,column:30339}},type:"cond-expr",locations:[{start:{line:1,column:30335},end:{line:1,column:30337}},{start:{line:1,column:30338},end:{line:1,column:30339}}],line:1},"180":{loc:{start:{line:1,column:30363},end:{line:1,column:30429}},type:"binary-expr",locations:[{start:{line:1,column:30363},end:{line:1,column:30395}},{start:{line:1,column:30397},end:{line:1,column:30429}}],line:1},"181":{loc:{start:{line:1,column:30486},end:{line:1,column:30526}},type:"cond-expr",locations:[{start:{line:1,column:30521},end:{line:1,column:30523}},{start:{line:1,column:30524},end:{line:1,column:30526}}],line:1},"182":{loc:{start:{line:1,column:30536},end:{line:1,column:30608}},type:"cond-expr",locations:[{start:{line:1,column:30603},end:{line:1,column:30605}},{start:{line:1,column:30606},end:{line:1,column:30608}}],line:1},"183":{loc:{start:{line:1,column:30536},end:{line:1,column:30602}},type:"binary-expr",locations:[{start:{line:1,column:30536},end:{line:1,column:30568}},{start:{line:1,column:30570},end:{line:1,column:30602}}],line:1},"184":{loc:{start:{line:1,column:30617},end:{line:1,column:30637}},type:"cond-expr",locations:[{start:{line:1,column:30632},end:{line:1,column:30634}},{start:{line:1,column:30635},end:{line:1,column:30637}}],line:1},"185":{loc:{start:{line:1,column:30646},end:{line:1,column:30766}},type:"cond-expr",locations:[{start:{line:1,column:30761},end:{line:1,column:30763}},{start:{line:1,column:30764},end:{line:1,column:30766}}],line:1},"186":{loc:{start:{line:1,column:30646},end:{line:1,column:30760}},type:"binary-expr",locations:[{start:{line:1,column:30646},end:{line:1,column:30661}},{start:{line:1,column:30663},end:{line:1,column:30717}},{start:{line:1,column:30719},end:{line:1,column:30760}}],line:1},"187":{loc:{start:{line:1,column:30774},end:{line:1,column:30905}},type:"cond-expr",locations:[{start:{line:1,column:30900},end:{line:1,column:30902}},{start:{line:1,column:30903},end:{line:1,column:30905}}],line:1},"188":{loc:{start:{line:1,column:30774},end:{line:1,column:30899}},type:"binary-expr",locations:[{start:{line:1,column:30774},end:{line:1,column:30789}},{start:{line:1,column:30791},end:{line:1,column:30856}},{start:{line:1,column:30858},end:{line:1,column:30899}}],line:1},"189":{loc:{start:{line:1,column:30921},end:{line:1,column:30983}},type:"cond-expr",locations:[{start:{line:1,column:30958},end:{line:1,column:30978}},{start:{line:1,column:30979},end:{line:1,column:30983}}],line:1},"190":{loc:{start:{line:1,column:31000},end:{line:1,column:31078}},type:"binary-expr",locations:[{start:{line:1,column:31000},end:{line:1,column:31038}},{start:{line:1,column:31040},end:{line:1,column:31078}}],line:1},"191":{loc:{start:{line:1,column:31123},end:{line:1,column:31143}},type:"cond-expr",locations:[{start:{line:1,column:31138},end:{line:1,column:31140}},{start:{line:1,column:31141},end:{line:1,column:31143}}],line:1},"192":{loc:{start:{line:1,column:31151},end:{line:1,column:31248}},type:"cond-expr",locations:[{start:{line:1,column:31243},end:{line:1,column:31245}},{start:{line:1,column:31246},end:{line:1,column:31248}}],line:1},"193":{loc:{start:{line:1,column:31151},end:{line:1,column:31242}},type:"binary-expr",locations:[{start:{line:1,column:31151},end:{line:1,column:31202}},{start:{line:1,column:31204},end:{line:1,column:31242}}],line:1},"194":{loc:{start:{line:1,column:31256},end:{line:1,column:31365}},type:"cond-expr",locations:[{start:{line:1,column:31360},end:{line:1,column:31362}},{start:{line:1,column:31363},end:{line:1,column:31365}}],line:1},"195":{loc:{start:{line:1,column:31256},end:{line:1,column:31359}},type:"binary-expr",locations:[{start:{line:1,column:31256},end:{line:1,column:31319}},{start:{line:1,column:31321},end:{line:1,column:31359}}],line:1},"196":{loc:{start:{line:1,column:31373},end:{line:1,column:31469}},type:"cond-expr",locations:[{start:{line:1,column:31464},end:{line:1,column:31466}},{start:{line:1,column:31467},end:{line:1,column:31469}}],line:1},"197":{loc:{start:{line:1,column:31373},end:{line:1,column:31463}},type:"binary-expr",locations:[{start:{line:1,column:31373},end:{line:1,column:31423}},{start:{line:1,column:31425},end:{line:1,column:31463}}],line:1},"198":{loc:{start:{line:1,column:31494},end:{line:1,column:31564}},type:"binary-expr",locations:[{start:{line:1,column:31494},end:{line:1,column:31528}},{start:{line:1,column:31530},end:{line:1,column:31564}}],line:1},"199":{loc:{start:{line:1,column:31572},end:{line:1,column:31648}},type:"cond-expr",locations:[{start:{line:1,column:31643},end:{line:1,column:31645}},{start:{line:1,column:31646},end:{line:1,column:31648}}],line:1},"200":{loc:{start:{line:1,column:31572},end:{line:1,column:31642}},type:"binary-expr",locations:[{start:{line:1,column:31572},end:{line:1,column:31606}},{start:{line:1,column:31608},end:{line:1,column:31642}}],line:1},"201":{loc:{start:{line:1,column:31672},end:{line:1,column:31746}},type:"binary-expr",locations:[{start:{line:1,column:31672},end:{line:1,column:31708}},{start:{line:1,column:31710},end:{line:1,column:31746}}],line:1},"202":{loc:{start:{line:1,column:31754},end:{line:1,column:31834}},type:"cond-expr",locations:[{start:{line:1,column:31829},end:{line:1,column:31831}},{start:{line:1,column:31832},end:{line:1,column:31834}}],line:1},"203":{loc:{start:{line:1,column:31754},end:{line:1,column:31828}},type:"binary-expr",locations:[{start:{line:1,column:31754},end:{line:1,column:31790}},{start:{line:1,column:31792},end:{line:1,column:31828}}],line:1},"204":{loc:{start:{line:1,column:31851},end:{line:1,column:31900}},type:"cond-expr",locations:[{start:{line:1,column:31866},end:{line:1,column:31885}},{start:{line:1,column:31886},end:{line:1,column:31900}}],line:1},"205":{loc:{start:{line:1,column:32420},end:{line:1,column:32438}},type:"cond-expr",locations:[{start:{line:1,column:32433},end:{line:1,column:32436}},{start:{line:1,column:32437},end:{line:1,column:32438}}],line:1},"206":{loc:{start:{line:1,column:32479},end:{line:1,column:32483}},type:"binary-expr",locations:[{start:{line:1,column:32479},end:{line:1,column:32480}},{start:{line:1,column:32482},end:{line:1,column:32483}}],line:1},"207":{loc:{start:{line:1,column:32604},end:{line:1,column:32667}},type:"if",locations:[{start:{line:1,column:32604},end:{line:1,column:32667}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"208":{loc:{start:{line:1,column:32607},end:{line:1,column:32633}},type:"binary-expr",locations:[{start:{line:1,column:32607},end:{line:1,column:32610}},{start:{line:1,column:32613},end:{line:1,column:32632}}],line:1},"209":{loc:{start:{line:1,column:32685},end:{line:1,column:32707}},type:"binary-expr",locations:[{start:{line:1,column:32685},end:{line:1,column:32688}},{start:{line:1,column:32690},end:{line:1,column:32707}}],line:1},"210":{loc:{start:{line:1,column:32708},end:{line:1,column:32722}},type:"binary-expr",locations:[{start:{line:1,column:32708},end:{line:1,column:32711}},{start:{line:1,column:32713},end:{line:1,column:32722}}],line:1},"211":{loc:{start:{line:1,column:32715},end:{line:1,column:32721}},type:"cond-expr",locations:[{start:{line:1,column:32717},end:{line:1,column:32718}},{start:{line:1,column:32719},end:{line:1,column:32721}}],line:1},"212":{loc:{start:{line:1,column:32740},end:{line:1,column:32837}},type:"binary-expr",locations:[{start:{line:1,column:32740},end:{line:1,column:32743}},{start:{line:1,column:32745},end:{line:1,column:32837}}],line:1},"213":{loc:{start:{line:1,column:32855},end:{line:1,column:32896}},type:"binary-expr",locations:[{start:{line:1,column:32855},end:{line:1,column:32858}},{start:{line:1,column:32860},end:{line:1,column:32896}}],line:1},"214":{loc:{start:{line:1,column:32914},end:{line:1,column:33043}},type:"if",locations:[{start:{line:1,column:32914},end:{line:1,column:33043}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"215":{loc:{start:{line:1,column:32917},end:{line:1,column:32972}},type:"binary-expr",locations:[{start:{line:1,column:32917},end:{line:1,column:32920}},{start:{line:1,column:32923},end:{line:1,column:32971}}],line:1},"216":{loc:{start:{line:1,column:33028},end:{line:1,column:33041}},type:"cond-expr",locations:[{start:{line:1,column:33038},end:{line:1,column:33039}},{start:{line:1,column:33040},end:{line:1,column:33041}}],line:1},"217":{loc:{start:{line:1,column:33061},end:{line:1,column:33662}},type:"if",locations:[{start:{line:1,column:33061},end:{line:1,column:33662}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"218":{loc:{start:{line:1,column:33662},end:{line:1,column:34032}},type:"if",locations:[{start:{line:1,column:33662},end:{line:1,column:34032}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"219":{loc:{start:{line:1,column:34050},end:{line:1,column:34110}},type:"if",locations:[{start:{line:1,column:34050},end:{line:1,column:34110}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"220":{loc:{start:{line:1,column:34053},end:{line:1,column:34082}},type:"binary-expr",locations:[{start:{line:1,column:34053},end:{line:1,column:34056}},{start:{line:1,column:34058},end:{line:1,column:34082}}],line:1},"221":{loc:{start:{line:1,column:34128},end:{line:1,column:34328}},type:"if",locations:[{start:{line:1,column:34128},end:{line:1,column:34328}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"222":{loc:{start:{line:1,column:34328},end:{line:1,column:34419}},type:"if",locations:[{start:{line:1,column:34328},end:{line:1,column:34419}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"223":{loc:{start:{line:1,column:34355},end:{line:1,column:34386}},type:"cond-expr",locations:[{start:{line:1,column:34371},end:{line:1,column:34377}},{start:{line:1,column:34378},end:{line:1,column:34386}}],line:1},"224":{loc:{start:{line:1,column:34437},end:{line:1,column:34634}},type:"if",locations:[{start:{line:1,column:34437},end:{line:1,column:34634}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"225":{loc:{start:{line:1,column:34634},end:{line:1,column:34693}},type:"if",locations:[{start:{line:1,column:34634},end:{line:1,column:34693}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"226":{loc:{start:{line:1,column:35283},end:{line:1,column:35340}},type:"cond-expr",locations:[{start:{line:1,column:35302},end:{line:1,column:35320}},{start:{line:1,column:35321},end:{line:1,column:35340}}],line:1},"227":{loc:{start:{line:1,column:35470},end:{line:1,column:35507}},type:"binary-expr",locations:[{start:{line:1,column:35470},end:{line:1,column:35501}},{start:{line:1,column:35503},end:{line:1,column:35507}}],line:1},"228":{loc:{start:{line:1,column:35508},end:{line:1,column:35561}},type:"binary-expr",locations:[{start:{line:1,column:35508},end:{line:1,column:35509}},{start:{line:1,column:35512},end:{line:1,column:35560}}],line:1},"229":{loc:{start:{line:1,column:35583},end:{line:1,column:35783}},type:"binary-expr",locations:[{start:{line:1,column:35583},end:{line:1,column:35616}},{start:{line:1,column:35619},end:{line:1,column:35782}}],line:1},"230":{loc:{start:{line:1,column:35701},end:{line:1,column:35767}},type:"binary-expr",locations:[{start:{line:1,column:35701},end:{line:1,column:35731}},{start:{line:1,column:35733},end:{line:1,column:35767}}],line:1},"231":{loc:{start:{line:1,column:35883},end:{line:1,column:35968}},type:"binary-expr",locations:[{start:{line:1,column:35883},end:{line:1,column:35884}},{start:{line:1,column:35887},end:{line:1,column:35967}}],line:1},"232":{loc:{start:{line:1,column:36078},end:{line:1,column:36161}},type:"cond-expr",locations:[{start:{line:1,column:36080},end:{line:1,column:36131}},{start:{line:1,column:36132},end:{line:1,column:36161}}],line:1},"233":{loc:{start:{line:1,column:36206},end:{line:1,column:36299}},type:"if",locations:[{start:{line:1,column:36206},end:{line:1,column:36299}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"234":{loc:{start:{line:1,column:36482},end:{line:1,column:36486}},type:"binary-expr",locations:[{start:{line:1,column:36482},end:{line:1,column:36483}},{start:{line:1,column:36485},end:{line:1,column:36486}}],line:1},"235":{loc:{start:{line:1,column:37868},end:{line:1,column:38727}},type:"if",locations:[{start:{line:1,column:37868},end:{line:1,column:38727}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"236":{loc:{start:{line:1,column:37871},end:{line:1,column:38372}},type:"binary-expr",locations:[{start:{line:1,column:37871},end:{line:1,column:37874}},{start:{line:1,column:37877},end:{line:1,column:38371}}],line:1},"237":{loc:{start:{line:1,column:38391},end:{line:1,column:38409}},type:"cond-expr",locations:[{start:{line:1,column:38405},end:{line:1,column:38406}},{start:{line:1,column:38407},end:{line:1,column:38409}}],line:1},"238":{loc:{start:{line:1,column:38585},end:{line:1,column:38610}},type:"cond-expr",locations:[{start:{line:1,column:38605},end:{line:1,column:38607}},{start:{line:1,column:38608},end:{line:1,column:38610}}],line:1},"239":{loc:{start:{line:1,column:38673},end:{line:1,column:38694}},type:"cond-expr",locations:[{start:{line:1,column:38689},end:{line:1,column:38691}},{start:{line:1,column:38692},end:{line:1,column:38694}}],line:1},"240":{loc:{start:{line:1,column:38702},end:{line:1,column:38725}},type:"cond-expr",locations:[{start:{line:1,column:38720},end:{line:1,column:38722}},{start:{line:1,column:38723},end:{line:1,column:38725}}],line:1}},s:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"116":0,"117":0,"118":0,"119":0,"120":0,"121":0,"122":0,"123":0,"124":0,"125":0,"126":0,"127":0,"128":0,"129":0,"130":0,"131":0,"132":0,"133":0,"134":0,"135":0,"136":0,"137":0,"138":0,"139":0,"140":0,"141":0,"142":0,"143":0,"144":0,"145":0,"146":0,"147":0,"148":0,"149":0,"150":0,"151":0,"152":0,"153":0,"154":0,"155":0,"156":0,"157":0,"158":0,"159":0,"160":0,"161":0,"162":0,"163":0,"164":0,"165":0,"166":0,"167":0,"168":0,"169":0,"170":0,"171":0,"172":0,"173":0,"174":0,"175":0,"176":0,"177":0,"178":0,"179":0,"180":0,"181":0,"182":0,"183":0,"184":0,"185":0,"186":0,"187":0,"188":0,"189":0,"190":0,"191":0,"192":0,"193":0,"194":0,"195":0,"196":0,"197":0,"198":0,"199":0,"200":0,"201":0,"202":0,"203":0,"204":0,"205":0,"206":0,"207":0,"208":0,"209":0,"210":0,"211":0,"212":0,"213":0,"214":0,"215":0,"216":0,"217":0,"218":0,"219":0,"220":0,"221":0,"222":0,"223":0,"224":0,"225":0,"226":0,"227":0,"228":0,"229":0,"230":0,"231":0,"232":0,"233":0,"234":0,"235":0,"236":0,"237":0,"238":0,"239":0,"240":0,"241":0,"242":0,"243":0,"244":0,"245":0,"246":0,"247":0,"248":0,"249":0,"250":0,"251":0,"252":0,"253":0,"254":0,"255":0,"256":0,"257":0,"258":0,"259":0,"260":0,"261":0,"262":0,"263":0,"264":0,"265":0,"266":0,"267":0,"268":0,"269":0,"270":0,"271":0,"272":0,"273":0,"274":0,"275":0,"276":0,"277":0,"278":0,"279":0,"280":0,"281":0,"282":0,"283":0,"284":0,"285":0,"286":0,"287":0,"288":0,"289":0,"290":0,"291":0,"292":0,"293":0,"294":0,"295":0,"296":0,"297":0,"298":0,"299":0,"300":0,"301":0,"302":0,"303":0,"304":0,"305":0,"306":0,"307":0,"308":0,"309":0,"310":0,"311":0,"312":0,"313":0,"314":0,"315":0,"316":0,"317":0,"318":0,"319":0,"320":0,"321":0,"322":0,"323":0,"324":0,"325":0,"326":0,"327":0,"328":0,"329":0,"330":0,"331":0,"332":0,"333":0,"334":0,"335":0,"336":0,"337":0,"338":0,"339":0,"340":0,"341":0,"342":0,"343":0,"344":0,"345":0,"346":0,"347":0,"348":0,"349":0,"350":0,"351":0,"352":0,"353":0,"354":0,"355":0,"356":0,"357":0,"358":0,"359":0,"360":0,"361":0,"362":0,"363":0,"364":0,"365":0,"366":0,"367":0,"368":0,"369":0,"370":0,"371":0,"372":0,"373":0,"374":0,"375":0,"376":0,"377":0,"378":0,"379":0,"380":0,"381":0,"382":0,"383":0,"384":0,"385":0,"386":0,"387":0,"388":0,"389":0,"390":0,"391":0,"392":0,"393":0,"394":0,"395":0,"396":0,"397":0,"398":0,"399":0,"400":0,"401":0,"402":0,"403":0,"404":0,"405":0,"406":0,"407":0,"408":0,"409":0,"410":0,"411":0,"412":0,"413":0,"414":0,"415":0,"416":0,"417":0,"418":0,"419":0,"420":0,"421":0,"422":0,"423":0,"424":0,"425":0,"426":0,"427":0,"428":0,"429":0,"430":0,"431":0,"432":0,"433":0,"434":0,"435":0,"436":0,"437":0,"438":0,"439":0,"440":0,"441":0,"442":0,"443":0,"444":0,"445":0,"446":0,"447":0,"448":0,"449":0,"450":0,"451":0,"452":0,"453":0,"454":0,"455":0,"456":0,"457":0,"458":0,"459":0,"460":0,"461":0,"462":0,"463":0,"464":0,"465":0,"466":0,"467":0,"468":0,"469":0,"470":0,"471":0,"472":0,"473":0,"474":0,"475":0,"476":0,"477":0},f:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"116":0,"117":0,"118":0,"119":0,"120":0,"121":0,"122":0,"123":0,"124":0,"125":0,"126":0,"127":0,"128":0,"129":0,"130":0,"131":0,"132":0,"133":0,"134":0,"135":0,"136":0,"137":0,"138":0,"139":0,"140":0,"141":0,"142":0,"143":0,"144":0,"145":0,"146":0,"147":0,"148":0,"149":0,"150":0,"151":0,"152":0,"153":0,"154":0,"155":0,"156":0,"157":0,"158":0,"159":0,"160":0,"161":0,"162":0,"163":0,"164":0,"165":0,"166":0,"167":0,"168":0,"169":0,"170":0,"171":0,"172":0,"173":0,"174":0,"175":0,"176":0,"177":0,"178":0,"179":0,"180":0,"181":0,"182":0,"183":0,"184":0,"185":0,"186":0,"187":0,"188":0,"189":0,"190":0,"191":0,"192":0,"193":0},b:{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0],"9":[0,0],"10":[0,0],"11":[0,0],"12":[0,0],"13":[0,0],"14":[0,0],"15":[0,0],"16":[0,0],"17":[0,0],"18":[0,0],"19":[0,0],"20":[0,0],"21":[0,0],"22":[0,0],"23":[0,0],"24":[0,0],"25":[0,0],"26":[0,0],"27":[0,0],"28":[0,0],"29":[0,0],"30":[0,0],"31":[0,0],"32":[0,0],"33":[0,0],"34":[0,0],"35":[0,0],"36":[0,0],"37":[0,0],"38":[0,0],"39":[0,0],"40":[0,0],"41":[0,0],"42":[0,0],"43":[0,0],"44":[0,0,0],"45":[0,0],"46":[0,0],"47":[0,0],"48":[0,0],"49":[0,0],"50":[0,0],"51":[0,0],"52":[0,0],"53":[0,0],"54":[0,0],"55":[0,0,0],"56":[0,0],"57":[0,0],"58":[0,0],"59":[0,0],"60":[0,0],"61":[0,0],"62":[0,0],"63":[0,0],"64":[0,0],"65":[0,0],"66":[0,0],"67":[0,0],"68":[0,0],"69":[0,0],"70":[0,0],"71":[0,0],"72":[0,0],"73":[0,0],"74":[0,0],"75":[0,0],"76":[0,0],"77":[0,0],"78":[0,0],"79":[0,0],"80":[0,0],"81":[0,0],"82":[0,0],"83":[0,0],"84":[0,0],"85":[0,0],"86":[0,0],"87":[0,0],"88":[0,0],"89":[0,0],"90":[0,0],"91":[0,0],"92":[0,0],"93":[0,0],"94":[0,0],"95":[0,0],"96":[0,0],"97":[0,0],"98":[0,0],"99":[0,0],"100":[0,0],"101":[0,0],"102":[0,0],"103":[0,0],"104":[0,0],"105":[0,0],"106":[0,0],"107":[0,0],"108":[0,0],"109":[0,0],"110":[0,0],"111":[0,0],"112":[0,0],"113":[0,0],"114":[0,0],"115":[0,0],"116":[0,0],"117":[0,0],"118":[0,0],"119":[0,0],"120":[0,0],"121":[0,0],"122":[0,0],"123":[0,0],"124":[0,0],"125":[0,0],"126":[0,0],"127":[0,0],"128":[0,0],"129":[0,0],"130":[0,0],"131":[0,0],"132":[0,0],"133":[0,0],"134":[0,0],"135":[0,0],"136":[0,0],"137":[0,0],"138":[0,0],"139":[0,0],"140":[0,0],"141":[0,0],"142":[0,0],"143":[0,0],"144":[0,0],"145":[0,0],"146":[0,0],"147":[0,0],"148":[0,0],"149":[0,0],"150":[0,0],"151":[0,0],"152":[0,0],"153":[0,0],"154":[0,0],"155":[0,0],"156":[0,0],"157":[0,0],"158":[0,0],"159":[0,0],"160":[0,0],"161":[0,0],"162":[0,0],"163":[0,0],"164":[0,0],"165":[0,0],"166":[0,0],"167":[0,0],"168":[0,0],"169":[0,0],"170":[0,0],"171":[0,0,0],"172":[0,0],"173":[0,0],"174":[0,0],"175":[0,0],"176":[0,0],"177":[0,0],"178":[0,0],"179":[0,0],"180":[0,0],"181":[0,0],"182":[0,0],"183":[0,0],"184":[0,0],"185":[0,0],"186":[0,0,0],"187":[0,0],"188":[0,0,0],"189":[0,0],"190":[0,0],"191":[0,0],"192":[0,0],"193":[0,0],"194":[0,0],"195":[0,0],"196":[0,0],"197":[0,0],"198":[0,0],"199":[0,0],"200":[0,0],"201":[0,0],"202":[0,0],"203":[0,0],"204":[0,0],"205":[0,0],"206":[0,0],"207":[0,0],"208":[0,0],"209":[0,0],"210":[0,0],"211":[0,0],"212":[0,0],"213":[0,0],"214":[0,0],"215":[0,0],"216":[0,0],"217":[0,0],"218":[0,0],"219":[0,0],"220":[0,0],"221":[0,0],"222":[0,0],"223":[0,0],"224":[0,0],"225":[0,0],"226":[0,0],"227":[0,0],"228":[0,0],"229":[0,0],"230":[0,0],"231":[0,0],"232":[0,0],"233":[0,0],"234":[0,0],"235":[0,0],"236":[0,0],"237":[0,0],"238":[0,0],"239":[0,0],"240":[0,0]},inputSourceMap:{version:3,sources:["src/app/shared/components/alarm-table/alarm-toggle-switch.component.ts","src/app/shared/components/alarm-table/alarm-toggle-switch.component.html","src/app/shared/components/modal-shell/modal-shell.component.ts","src/app/shared/components/modal-shell/modal-shell.component.html","src/app/features/alarm-configuration/mappers/alarm-rule-form.mapper.ts","src/app/features/alarm-configuration/services/device-datapoint-extraction.service.ts","src/app/features/alarm-configuration/helpers/alarm-config-form-validation.helper.ts","src/app/features/alarm-configuration/services/alarm-config-form-state.service.ts","src/app/features/alarm-configuration/helpers/alarm-config-form-field-orchestrator.helper.ts","src/app/features/alarm-configuration/components/alarm-config-form/alarm-config-form.component.ts","src/app/features/alarm-configuration/components/alarm-config-form/alarm-config-form.component.html","src/app/features/alarm-configuration/services/alarm-config-table-presenter.service.ts","src/app/features/alarm-configuration/components/alarm-config-page/alarm-config-page.component.ts","src/app/features/alarm-configuration/components/alarm-config-page/alarm-config-page.component.html"],sourcesContent:["import { ChangeDetectionStrategy, Component, computed, input, output } from '@angular/core';\n\n@Component({\n selector: 'app-alarm-toggle-switch',\n templateUrl: './alarm-toggle-switch.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AlarmToggleSwitchComponent {\n public readonly checked = input(false);\n public readonly disabled = input(false);\n public readonly ariaLabel = input('Abilita o disabilita');\n\n public readonly toggled = output();\n\n public readonly trackClass = computed(() => {\n const baseClass =\n 'relative inline-flex h-5 w-9 items-center rounded-full border transition focus-visible:outline-2 focus-visible:outline-offset-2';\n\n if (this.checked()) {\n return `${baseClass} border-yellow-700 bg-yellow-400 focus-visible:outline-yellow-500 disabled:border-slate-400 disabled:bg-slate-300`;\n }\n\n return `${baseClass} border-slate-500 bg-white focus-visible:outline-slate-500 disabled:border-slate-400 disabled:bg-slate-200`;\n });\n\n public readonly thumbClass = computed(() => {\n const baseClass =\n 'inline-block h-4 w-4 transform rounded-full border border-slate-500 bg-white transition';\n\n if (this.checked()) {\n return `${baseClass} translate-x-4`;\n }\n\n return `${baseClass} translate-x-0.5`;\n });\n\n public onToggle(): void {\n if (this.disabled()) {\n return;\n }\n\n this.toggled.emit(!this.checked());\n }\n}\n","","import { ChangeDetectionStrategy, Component, input, output } from '@angular/core';\n\n@Component({\n selector: 'app-modal-shell',\n templateUrl: './modal-shell.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ModalShellComponent {\n public readonly open = input(false);\n public readonly title = input.required();\n public readonly description = input(null);\n public readonly closeLabel = input('Chiudi finestra');\n\n public readonly closed = output();\n\n public onClose(): void {\n this.closed.emit();\n }\n}\n","@if (open()) {\n\n
\n

{{ title() }}

\n \n
\n\n @if (description()) {\n

{{ description() }}

\n }\n\n \n
\n}","import { Injectable, inject } from '@angular/core';\nimport { AlarmRule } from '../../../core/alarm/models/alarm-rule.model';\nimport { ThresholdOperator } from '../../../core/alarm/models/threshold-operator.enum';\nimport { AlarmConfigFormValue } from '../models/alarm-config-form-value.model';\nimport { AlarmTimeMapper } from './alarm-time.mapper';\n\n@Injectable({ providedIn: 'root' })\nexport class AlarmRuleFormMapper {\n private readonly alarmTimeMapper = inject(AlarmTimeMapper);\n\n public toFormValue(rule: AlarmRule): AlarmConfigFormValue {\n return {\n name: rule.name,\n plantId: '',\n deviceId: rule.deviceId,\n datapointId: rule.datapointId ?? '',\n priority: rule.priority,\n thresholdOperator: this.toFormThresholdOperator(rule.thresholdOperator),\n thresholdValue: rule.thresholdValue,\n armingTime: this.alarmTimeMapper.toFormTime(rule.armingTime),\n dearmingTime: this.alarmTimeMapper.toFormTime(rule.dearmingTime),\n enabled: rule.isArmed,\n };\n }\n\n private toFormThresholdOperator(operator: string): ThresholdOperator {\n const normalizedOperator = operator.trim();\n\n if (normalizedOperator === '>') {\n return ThresholdOperator.GREATER_THAN;\n }\n if (normalizedOperator === '>=') {\n return ThresholdOperator.GREATER_THAN_OR_EQUAL;\n }\n if (normalizedOperator === '<') {\n return ThresholdOperator.LESS_THAN;\n }\n if (normalizedOperator === '<=') {\n return ThresholdOperator.LESS_THAN_OR_EQUAL;\n }\n if (normalizedOperator === '=') {\n return ThresholdOperator.EQUAL_TO;\n }\n\n throw new Error(`Operatore soglia non supportato: ${operator}`);\n }\n}","import { Injectable } from '@angular/core';\nimport { ThresholdOperator } from '../../../core/alarm/models/threshold-operator.enum';\nimport { Apartment } from '../../apartment-monitor/models/apartment.model';\nimport { Datapoint } from '../../apartment-monitor/models/datapoint.model';\nimport { PlantDto } from '../../apartment-monitor/models/plant-response.model';\n\nexport type DeviceDatapointOption = {\n id: string;\n label: string;\n datapoints: Datapoint[];\n};\n\n@Injectable({ providedIn: 'root' })\nexport class DeviceDatapointExtractionService {\n private readonly numericThresholdPattern = /^[+-]?\\d+([.]\\d+)?$/;\n\n public extractDeviceOptions(apartment: Apartment): DeviceDatapointOption[] {\n return apartment.rooms.flatMap((room) =>\n room.devices.map((device) => ({\n id: device.id,\n label: `${room.name} - ${device.name}`,\n datapoints: this.normalizeDatapoints(device.datapoints),\n }))\n );\n }\n\n public findReadableDatapoints(\n deviceId: string,\n deviceOptions: readonly DeviceDatapointOption[],\n ): Datapoint[] {\n const selectedDevice = deviceOptions.find((option) => option.id === deviceId);\n if (!selectedDevice) {\n return [];\n }\n\n return selectedDevice.datapoints.filter((datapoint) => datapoint.readable);\n }\n\n public findDatapointById(datapointId: string, datapoints: readonly Datapoint[]): Datapoint | null {\n return datapoints.find((datapoint) => datapoint.id === datapointId) ?? null;\n }\n\n //lookup per edit\n public findDatapointByDeviceAndDatapointId(\n plants: readonly PlantDto[],\n deviceId: string,\n datapointId: string,\n ): Datapoint | null {\n const normalizedDeviceId = deviceId.trim();\n const normalizedDatapointId = datapointId.trim();\n\n if (normalizedDeviceId.length === 0 || normalizedDatapointId.length === 0) {\n return null;\n }\n\n for (const plant of plants) {\n for (const room of plant.rooms ?? []) {\n const selectedDevice = room.devices.find((device) => device.id === normalizedDeviceId);\n if (!selectedDevice) {\n continue;\n }\n\n const selectedDatapoint = (selectedDevice.datapoints ?? []).find(\n (datapoint) => datapoint.id === normalizedDatapointId,\n );\n\n if (!selectedDatapoint) {\n continue;\n }\n\n return {\n id: selectedDatapoint.id,\n name: selectedDatapoint.name,\n readable: selectedDatapoint.readable,\n writable: selectedDatapoint.writable,\n valueType: selectedDatapoint.valueType,\n enum: this.normalizeEnumValues(selectedDatapoint.enum),\n sfeType: selectedDatapoint.sfeType,\n };\n }\n }\n\n return null;\n }\n\n public getAllowedOperators(datapoint: Datapoint | null): ThresholdOperator[] {\n if (!this.usesEnumeratedThreshold(datapoint)) {\n return Object.values(ThresholdOperator);\n }\n\n return [ThresholdOperator.EQUAL_TO];\n }\n\n public getEnumValues(datapoint: Datapoint | null): string[] {\n if (!datapoint) {\n return [];\n }\n\n return this.normalizeEnumValues(datapoint.enum);\n }\n\n //dice se il datapoint richiede una threshold enumerata come on/off o numerica \n public usesEnumeratedThreshold(datapoint: Datapoint | null): boolean {\n return this.getEnumValues(datapoint).length > 0;\n }\n\n public normalizeThresholdValue(datapoint: Datapoint | null, value: string): string {\n const trimmedValue = value.trim();\n const enumValues = this.getEnumValues(datapoint);\n\n if (enumValues.length === 0) {\n return trimmedValue;\n }\n\n const matchingEnumValue = enumValues.find(\n (enumValue) => enumValue.toLowerCase() === trimmedValue.toLowerCase(),\n );\n\n return matchingEnumValue ?? trimmedValue;\n }\n\n public isThresholdValueValid(datapoint: Datapoint | null, value: string): boolean {\n const trimmedValue = value.trim();\n if (trimmedValue.length === 0) {\n return false;\n }\n\n const enumValues = this.getEnumValues(datapoint);\n if (enumValues.length > 0) {\n return enumValues.some(\n (enumValue) => enumValue.toLowerCase() === trimmedValue.toLowerCase(),\n );\n }\n\n return this.numericThresholdPattern.test(trimmedValue);\n }\n\n private normalizeDatapoints(datapoints: readonly Datapoint[] | undefined): Datapoint[] {\n return (datapoints ?? []).map((datapoint) => ({\n ...datapoint,\n enum: this.normalizeEnumValues(datapoint.enum),\n }));\n }\n\n private normalizeEnumValues(values: readonly string[] | undefined): string[] {\n const normalizedValues = (values ?? [])\n .map((value) => value.trim())\n .filter((value) => value.length > 0);\n\n return Array.from(new Set(normalizedValues));\n }\n}\n\n","import { Injectable } from '@angular/core';\nimport { AbstractControl, ValidationErrors, ValidatorFn, Validators } from '@angular/forms';\nimport { ThresholdOperator } from '../../../core/alarm/models/threshold-operator.enum';\nimport { Datapoint } from '../../apartment-monitor/models/datapoint.model';\nimport { DeviceDatapointExtractionService } from '../services/device-datapoint-extraction.service';\n\nexport type ApplyThresholdConstraintsParams = {\n mode: 'create' | 'edit';\n datapoint: Datapoint | null;\n thresholdOperatorControl: AbstractControl;\n thresholdValueControl: AbstractControl;\n};\n\n@Injectable({ providedIn: 'root' })\nexport class AlarmConfigFormValidationHelper {\n constructor(private readonly datapointExtraction: DeviceDatapointExtractionService) { }\n\n public applyThresholdConstraints({\n mode,\n datapoint,\n thresholdOperatorControl,\n thresholdValueControl,\n }: ApplyThresholdConstraintsParams): void {\n const allowedOperators = this.resolveAllowedOperators(\n mode,\n datapoint,\n thresholdOperatorControl.value as ThresholdOperator | null,\n );\n\n thresholdOperatorControl.setValidators([\n Validators.required,\n this.operatorAllowedValidator(allowedOperators),\n ]);\n\n if (datapoint === null) {\n thresholdValueControl.setValidators([Validators.required]);\n } else if (this.datapointExtraction.usesEnumeratedThreshold(datapoint)) {\n const enumValues = this.datapointExtraction.getEnumValues(datapoint);\n thresholdValueControl.setValidators([\n Validators.required,\n this.enumThresholdValidator(enumValues),\n ]);\n\n const normalizedValue = this.datapointExtraction.normalizeThresholdValue(\n datapoint,\n String(thresholdValueControl.value ?? ''),\n );\n if (normalizedValue !== thresholdValueControl.value) {\n thresholdValueControl.setValue(normalizedValue, { emitEvent: false });\n }\n } else {\n thresholdValueControl.setValidators([\n Validators.required,\n Validators.pattern(/^[+-]?\\d+([.]\\d+)?$/),\n ]);\n }\n\n if (\n thresholdOperatorControl.value !== null &&\n !allowedOperators.includes(thresholdOperatorControl.value as ThresholdOperator)\n ) {\n thresholdOperatorControl.setValue(null, { emitEvent: false });\n }\n\n thresholdOperatorControl.updateValueAndValidity({ emitEvent: false });\n thresholdValueControl.updateValueAndValidity({ emitEvent: false });\n }\n\n private resolveAllowedOperators(\n mode: 'create' | 'edit',\n datapoint: Datapoint | null,\n currentOperator: ThresholdOperator | null,\n ): ThresholdOperator[] {\n if (datapoint !== null) {\n return this.datapointExtraction.getAllowedOperators(datapoint);\n }\n\n if (mode === 'edit' && currentOperator !== null) {\n return [currentOperator];\n }\n\n return Object.values(ThresholdOperator);\n }\n\n private operatorAllowedValidator(allowedOperators: readonly ThresholdOperator[]): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n const value = control.value as ThresholdOperator | null;\n if (value === null) {\n return null;\n }\n\n return allowedOperators.includes(value) ? null : { unsupportedOperator: true };\n };\n }\n\n private enumThresholdValidator(enumValues: readonly string[]): ValidatorFn {\n const normalizedEnumValues = new Set(enumValues.map((enumValue) => enumValue.toLowerCase()));\n\n return (control: AbstractControl): ValidationErrors | null => {\n const value = String(control.value ?? '').trim();\n if (value.length === 0) {\n return null;\n }\n\n return normalizedEnumValues.has(value.toLowerCase())\n ? null\n : { invalidEnumThreshold: true };\n };\n }\n}\n","import { Injectable, signal } from '@angular/core';\nimport { Observable, catchError, forkJoin, map, of, switchMap, tap } from 'rxjs';\nimport { Datapoint } from '../../apartment-monitor/models/datapoint.model';\nimport { WardPlantDto } from '../../ward-management/models/ward-api.dto';\nimport { WardApiService } from '../../ward-management/services/ward-api.service';\nimport { ApartmentApiService } from '../../apartment-monitor/services/apartment-api.service';\nimport { DeviceDatapointExtractionService, DeviceDatapointOption } from './device-datapoint-extraction.service';\n\n@Injectable()\nexport class AlarmConfigFormStateService {\n private hasRequestedPlants = false;\n\n constructor(\n private readonly wardApi: WardApiService,\n private readonly apartmentApi: ApartmentApiService,\n private readonly datapointExtraction: DeviceDatapointExtractionService,\n ) { }\n\n public readonly plants = signal([]);\n public readonly plantsLoadError = signal(null);\n public readonly devicesLoadError = signal(null);\n public readonly isDevicesLoading = signal(false);\n\n public ensurePlantsLoaded(mode: 'create' | 'edit'): Observable {\n if (mode === 'edit' || this.plants().length > 0 || this.hasRequestedPlants) {\n return of(void 0);\n }\n\n this.hasRequestedPlants = true;\n\n return this.loadAllPlants().pipe(\n tap((plants) => {\n this.plantsLoadError.set(null);\n this.plants.set(plants);\n }),\n map(() => void 0),\n catchError(() => {\n this.plants.set([]);\n this.plantsLoadError.set('Errore durante il caricamento degli impianti disponibili.');\n return of(void 0);\n }),\n );\n }\n\n public resetDevicesLoadState(): void {\n this.devicesLoadError.set(null);\n this.isDevicesLoading.set(false);\n }\n\n public loadDeviceOptionsByPlant(plantId: string): Observable {\n const normalizedPlantId = plantId.trim();\n this.devicesLoadError.set(null);\n\n if (normalizedPlantId.length === 0) {\n this.isDevicesLoading.set(false);\n return of([]);\n }\n\n this.isDevicesLoading.set(true);\n\n return this.apartmentApi.loadApartmentViewForPlantId(normalizedPlantId).pipe(\n map((apartment) => this.datapointExtraction.extractDeviceOptions(apartment)),\n tap(() => {\n this.isDevicesLoading.set(false);\n }),\n catchError(() => {\n this.devicesLoadError.set('Errore durante il caricamento dei dispositivi.');\n this.isDevicesLoading.set(false);\n return of([] as DeviceDatapointOption[]);\n }),\n );\n }\n\n\n public resolveDatapointForEdit(deviceId: string, datapointId: string): Observable {\n const normalizedDeviceId = deviceId.trim();\n const normalizedDatapointId = datapointId.trim();\n\n if (normalizedDeviceId.length === 0 || normalizedDatapointId.length === 0) {\n return of(null);\n }\n\n return this.apartmentApi.getAllPlants().pipe(\n map((plants) =>\n this.datapointExtraction.findDatapointByDeviceAndDatapointId(\n plants,\n normalizedDeviceId,\n normalizedDatapointId,\n ),\n ),\n catchError(() => of(null)),\n );\n }\n\n private loadAllPlants(): Observable {\n return forkJoin({\n availablePlants: this.wardApi.getAvailablePlants().pipe(catchError(() => of([] as WardPlantDto[]))),\n wards: this.wardApi.getWards().pipe(catchError(() => of([]))),\n }).pipe(\n switchMap(({ availablePlants, wards }) => {\n if (wards.length === 0) {\n return of(this.mergePlants(availablePlants, []));\n }\n\n const wardPlantsRequests = wards.map((ward) =>\n this.wardApi\n .getPlantsByWardId(ward.id)\n .pipe(catchError(() => of([] as WardPlantDto[]))),\n );\n\n return forkJoin(wardPlantsRequests).pipe(\n map((assignedPlantsByWard) => this.mergePlants(availablePlants, assignedPlantsByWard.flat())),\n );\n }),\n );\n }\n\n private mergePlants(availablePlants: WardPlantDto[], assignedPlants: WardPlantDto[]): WardPlantDto[] {\n const mergedMap = new Map();\n\n for (const plant of [...availablePlants, ...assignedPlants]) {\n mergedMap.set(plant.id, plant);\n }\n\n return Array.from(mergedMap.values()).sort((first, second) => first.name.localeCompare(second.name));\n }\n}\n","import { Injectable } from '@angular/core';\nimport { AbstractControl, Validators } from '@angular/forms';\nimport { Datapoint } from '../../apartment-monitor/models/datapoint.model';\nimport { DeviceDatapointExtractionService, DeviceDatapointOption } from '../services/device-datapoint-extraction.service';\n\ntype AlarmConfigFormLike = {\n controls: {\n name: AbstractControl;\n plantId: AbstractControl;\n deviceId: AbstractControl;\n datapointId: AbstractControl;\n thresholdOperator: AbstractControl;\n };\n};\n\nexport type DeviceSelectionResult = {\n normalizedDeviceId: string;\n readableDatapoints: Datapoint[];\n autoSelectedDatapointId: string | null;\n};\n\nexport type DatapointSelectionResult = {\n normalizedDatapointId: string;\n selectedDatapoint: Datapoint | null;\n};\n\n@Injectable({ providedIn: 'root' })\nexport class AlarmConfigFormFieldOrchestratorHelper {\n constructor(private readonly datapointExtraction: DeviceDatapointExtractionService) { }\n\n public applyModeState(form: AlarmConfigFormLike, mode: 'create' | 'edit'): void {\n const isEditMode = mode === 'edit';\n\n if (isEditMode) {\n form.controls.name.disable({ emitEvent: false });\n form.controls.plantId.clearValidators();\n form.controls.plantId.disable({ emitEvent: false });\n form.controls.deviceId.disable({ emitEvent: false });\n form.controls.datapointId.clearValidators();\n form.controls.datapointId.disable({ emitEvent: false });\n form.controls.thresholdOperator.disable({ emitEvent: false });\n form.controls.plantId.updateValueAndValidity({ emitEvent: false });\n form.controls.datapointId.updateValueAndValidity({ emitEvent: false });\n form.controls.thresholdOperator.updateValueAndValidity({ emitEvent: false });\n return;\n }\n\n form.controls.name.enable({ emitEvent: false });\n form.controls.plantId.setValidators([Validators.required]);\n form.controls.datapointId.setValidators([Validators.required]);\n form.controls.plantId.enable({ emitEvent: false });\n form.controls.thresholdOperator.enable({ emitEvent: false });\n form.controls.plantId.updateValueAndValidity({ emitEvent: false });\n form.controls.datapointId.updateValueAndValidity({ emitEvent: false });\n form.controls.thresholdOperator.updateValueAndValidity({ emitEvent: false });\n\n if (String(form.controls.plantId.value ?? '').trim().length === 0) {\n form.controls.deviceId.disable({ emitEvent: false });\n form.controls.datapointId.disable({ emitEvent: false });\n return;\n }\n\n form.controls.deviceId.enable({ emitEvent: false });\n\n if (String(form.controls.deviceId.value ?? '').trim().length === 0) {\n form.controls.datapointId.disable({ emitEvent: false });\n return;\n }\n\n form.controls.datapointId.enable({ emitEvent: false });\n }\n\n public resetDatapointControl(form: AlarmConfigFormLike): void {\n form.controls.datapointId.setValue('', { emitEvent: false });\n form.controls.datapointId.updateValueAndValidity({ emitEvent: false });\n }\n\n public resolveDeviceSelection(\n deviceId: string,\n deviceOptions: readonly DeviceDatapointOption[],\n ): DeviceSelectionResult {\n const normalizedDeviceId = deviceId.trim();\n if (normalizedDeviceId.length === 0) {\n return {\n normalizedDeviceId,\n readableDatapoints: [],\n autoSelectedDatapointId: null,\n };\n }\n\n const readableDatapoints = this.datapointExtraction.findReadableDatapoints(\n normalizedDeviceId,\n deviceOptions,\n );\n\n return {\n normalizedDeviceId,\n readableDatapoints,\n autoSelectedDatapointId: readableDatapoints.length === 1 ? readableDatapoints[0].id : null,\n };\n }\n\n public resolveDatapointSelection(\n datapointId: string,\n datapointOptions: readonly Datapoint[],\n ): DatapointSelectionResult {\n const normalizedDatapointId = datapointId.trim();\n\n return {\n normalizedDatapointId,\n selectedDatapoint: this.datapointExtraction.findDatapointById(normalizedDatapointId, datapointOptions),\n };\n }\n}\n","import { ChangeDetectionStrategy, Component, DestroyRef, computed, effect, inject, input, output, signal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormBuilder, ReactiveFormsModule, Validators } from '@angular/forms';\nimport { Datapoint } from '../../../apartment-monitor/models/datapoint.model';\nimport { AlarmPriority } from '../../../../core/alarm/models/alarm-priority.enum';\nimport { AlarmRule } from '../../../../core/alarm/models/alarm-rule.model';\nimport { ThresholdOperator } from '../../../../core/alarm/models/threshold-operator.enum';\nimport { AlarmRuleFormMapper } from '../../mappers/alarm-rule-form.mapper';\nimport { AlarmConfigFormValue } from '../../models/alarm-config-form-value.model';\nimport { AlarmPriorityIndicatorComponent } from '../../../../shared/components/alarm-table/alarm-priority-indicator.component';\nimport { AlarmActionButtonComponent } from '../../../../shared/components/alarm-table/alarm-action-button.component';\nimport { DeviceDatapointExtractionService, DeviceDatapointOption } from '../../services/device-datapoint-extraction.service';\nimport { AlarmConfigFormValidationHelper } from '../../helpers/alarm-config-form-validation.helper';\nimport { AlarmConfigFormStateService } from '../../services/alarm-config-form-state.service';\nimport { AlarmConfigFormFieldOrchestratorHelper } from '../../helpers/alarm-config-form-field-orchestrator.helper';\n\n@Component({\n\tselector: 'app-alarm-config-form',\n\ttemplateUrl: './alarm-config-form.component.html',\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\tproviders: [AlarmConfigFormStateService],\n\timports: [ReactiveFormsModule, AlarmPriorityIndicatorComponent, AlarmActionButtonComponent],\n})\nexport class AlarmConfigFormComponent {\n\tpublic readonly mode = input<'create' | 'edit'>('create');\n\tpublic readonly initialRule = input(null);\n\n\tpublic readonly submittedForm = output();\n\tpublic readonly cancelled = output();\n\n\tprivate readonly fb = inject(FormBuilder);\n\tprivate readonly formMapper = inject(AlarmRuleFormMapper);\n\tprivate readonly formState = inject(AlarmConfigFormStateService);\n\tprivate readonly datapointExtraction = inject(DeviceDatapointExtractionService);\n\tprivate readonly validationHelper = inject(AlarmConfigFormValidationHelper);\n\tprivate readonly fieldOrchestrator = inject(AlarmConfigFormFieldOrchestratorHelper);\n\tprivate readonly destroyRef = inject(DestroyRef);\n\tprivate editDatapointLookupVersion = 0;\n\n\tpublic readonly form = this.buildForm();\n\tpublic readonly isEditMode = computed(() => this.mode() === 'edit');\n\tpublic readonly plants = this.formState.plants;\n\tpublic readonly deviceOptions = signal([]);\n\tpublic readonly datapointOptions = signal([]);\n\tpublic readonly plantsLoadError = this.formState.plantsLoadError;\n\tpublic readonly devicesLoadError = this.formState.devicesLoadError;\n\tpublic readonly isDevicesLoading = this.formState.isDevicesLoading;\n\tpublic readonly selectedDeviceId = signal('');\n\tpublic readonly selectedDatapointId = signal('');\n\tpublic readonly selectedDatapoint = signal(null);\n\tpublic readonly isPlantSelectionVisible = computed(() => !this.isEditMode());\n\tpublic readonly editPosition = computed(() => {\n\t\tif (!this.isEditMode()) {\n\t\t\treturn '-';\n\t\t}\n\n\t\tconst position = this.initialRule()?.position ?? '';\n\t\treturn this.toPositionLabel(position);\n\t});\n\n\tpublic readonly priorityOptions = Object.values(AlarmPriority).filter(\n\t\t(value): value is AlarmPriority => typeof value === 'number'\n\t);\n\tpublic readonly thresholdOperatorOptions = computed(() => {\n\t\tif (!this.isEditMode()) {\n\t\t\treturn this.datapointExtraction.getAllowedOperators(this.selectedDatapoint());\n\t\t}\n\n\t\tconst datapoint = this.selectedDatapoint();\n\t\tif (datapoint !== null) {\n\t\t\treturn this.datapointExtraction.getAllowedOperators(datapoint);\n\t\t}\n\n\t\tconst currentOperator = this.form.controls.thresholdOperator.value;\n\t\treturn currentOperator === null ? Object.values(ThresholdOperator) : [currentOperator];\n\t});\n\tpublic readonly thresholdValueEnumHints = computed(() =>\n\t\tthis.datapointExtraction.getEnumValues(this.selectedDatapoint())\n\t);\n\tpublic readonly thresholdValueHelpText = computed(() => {\n\t\tif (this.isEditMode()) {\n\t\t\tif (this.thresholdValueEnumHints().length > 0) {\n\t\t\t\treturn 'Inserisci uno dei valori previsti dal datapoint associato alla regola.';\n\t\t\t}\n\n\t\t\treturn 'Inserisci un valore numerico (es. 10, 10.5, -3).';\n\t\t}\n\n\t\tif (this.selectedDeviceId().length === 0) {\n\t\t\treturn 'Seleziona prima il dispositivo.';\n\t\t}\n\n\t\tif (this.selectedDatapointId().length === 0) {\n\t\t\treturn 'Seleziona un datapoint leggibile per impostare la soglia.';\n\t\t}\n\n\t\tif (this.thresholdValueEnumHints().length > 0) {\n\t\t\treturn 'Inserisci uno dei valori previsti dal datapoint selezionato.';\n\t\t}\n\n\t\treturn 'Inserisci un valore numerico (es. 10, 10.5, -3).';\n\t});\n\n\tconstructor() {\n\t\teffect(() => {\n\t\t\tconst rule = this.initialRule();\n\t\t\tif (rule) {\n\t\t\t\tconst lookupVersion = ++this.editDatapointLookupVersion;\n\t\t\t\tthis.form.reset(this.formMapper.toFormValue(rule));\n\t\t\t\tthis.deviceOptions.set([{ id: rule.deviceId, label: rule.deviceId, datapoints: [] }]);\n\t\t\t\tthis.datapointOptions.set([]);\n\t\t\t\tthis.selectedDeviceId.set(rule.deviceId);\n\t\t\t\tthis.selectedDatapointId.set(rule.datapointId ?? '');\n\t\t\t\tthis.selectedDatapoint.set(null);\n\t\t\t\tthis.applyModeState();\n\t\t\t\tthis.applyThresholdConstraints(null);\n\t\t\t\tthis.loadEditDatapointMetadata(rule.deviceId, rule.datapointId ?? '', lookupVersion);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.editDatapointLookupVersion += 1;\n\t\t\tthis.form.reset(this.createEmptyFormValue());\n\t\t\tthis.deviceOptions.set([]);\n\t\t\tthis.datapointOptions.set([]);\n\t\t\tthis.selectedDeviceId.set('');\n\t\t\tthis.selectedDatapointId.set('');\n\t\t\tthis.selectedDatapoint.set(null);\n\t\t\tthis.applyModeState();\n\t\t\tthis.applyThresholdConstraints(null);\n\t\t\tthis.ensurePlantsLoaded();\n\t\t});\n\n\t\tthis.form.controls.plantId.valueChanges\n\t\t\t.pipe(takeUntilDestroyed(this.destroyRef))\n\t\t\t.subscribe((plantId) => {\n\t\t\t\tif (this.mode() === 'edit') {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.onPlantChanged(plantId);\n\t\t\t});\n\n\t\tthis.form.controls.deviceId.valueChanges\n\t\t\t.pipe(takeUntilDestroyed(this.destroyRef))\n\t\t\t.subscribe((deviceId) => {\n\t\t\t\tif (this.mode() === 'edit') {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.onDeviceChanged(deviceId);\n\t\t\t});\n\n\t\tthis.form.controls.datapointId.valueChanges\n\t\t\t.pipe(takeUntilDestroyed(this.destroyRef))\n\t\t\t.subscribe((datapointId) => {\n\t\t\t\tif (this.mode() === 'edit') {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.onDatapointChanged(datapointId);\n\t\t\t});\n\t}\n\n\tprivate buildForm() {\n\t\treturn this.fb.nonNullable.group({\n\t\t\tname: [''],\n\t\t\tplantId: [''],\n\t\t\tdeviceId: ['', [Validators.required]],\n\t\t\tdatapointId: [''],\n\t\t\tpriority: [null as AlarmPriority | null, [Validators.required]],\n\t\t\tthresholdOperator: [null as ThresholdOperator | null, [Validators.required]],\n\t\t\tthresholdValue: ['', [Validators.required]],\n\t\t\tarmingTime: ['', [Validators.required, Validators.pattern(/^([01]\\d|2[0-3]):([0-5]\\d)$/)]],\n\t\t\tdearmingTime: ['', [Validators.required, Validators.pattern(/^([01]\\d|2[0-3]):([0-5]\\d)$/)]],\n\t\t\tenabled: [true],\n\t\t});\n\t}\n\n\t//valore iniziale del form in create mode\n\tprivate createEmptyFormValue(): AlarmConfigFormValue {\n\t\treturn {\n\t\t\tname: '',\n\t\t\tplantId: '',\n\t\t\tdeviceId: '',\n\t\t\tdatapointId: '',\n\t\t\tpriority: null,\n\t\t\tthresholdOperator: null,\n\t\t\tthresholdValue: '',\n\t\t\tarmingTime: '',\n\t\t\tdearmingTime: '',\n\t\t\tenabled: true,\n\t\t};\n\t}\n\n\tpublic onSubmit(): void {\n\t\tif (this.mode() === 'create' && this.selectedDatapoint() !== null) {\n\t\t\tconst normalizedThreshold = this.datapointExtraction.normalizeThresholdValue(\n\t\t\t\tthis.selectedDatapoint(),\n\t\t\t\tthis.form.controls.thresholdValue.value,\n\t\t\t);\n\t\t\tthis.form.controls.thresholdValue.setValue(normalizedThreshold, { emitEvent: false });\n\t\t\tthis.form.controls.thresholdValue.updateValueAndValidity({ emitEvent: false });\n\t\t}\n\n\t\tif (this.form.invalid) {\n\t\t\tthis.form.markAllAsTouched();\n\t\t\treturn;\n\t\t}\n\n\t\tconst formValue = this.form.getRawValue();\n\t\tconst lockedRule = this.initialRule();\n\t\tif (this.mode() === 'edit' && lockedRule) {\n\t\t\tthis.submittedForm.emit({ ...formValue, name: lockedRule.name });\n\t\t\treturn;\n\t\t}\n\n\t\tthis.submittedForm.emit(formValue);\n\t}\n\n\tprivate applyModeState(): void {\n\t\tthis.fieldOrchestrator.applyModeState(this.form, this.mode());\n\t}\n\n\tprivate ensurePlantsLoaded(): void {\n\t\tthis.formState.ensurePlantsLoaded(this.mode())\n\t\t\t.pipe(takeUntilDestroyed(this.destroyRef))\n\t\t\t.subscribe();\n\t}\n\n\t//opzioni dispositovo per gl'impianto scelto\n\tprivate onPlantChanged(plantId: string): void {\n\t\tthis.formState.resetDevicesLoadState();\n\t\tthis.deviceOptions.set([]);\n\t\tthis.form.controls.deviceId.setValue('', { emitEvent: false });\n\t\tthis.onDeviceChanged('');\n\n\t\tif (plantId.trim().length === 0) {\n\t\t\tthis.form.controls.deviceId.disable({ emitEvent: false });\n\t\t\treturn;\n\t\t}\n\n\t\tthis.form.controls.deviceId.disable({ emitEvent: false });\n\n\t\tthis.formState\n\t\t\t.loadDeviceOptionsByPlant(plantId)\n\t\t\t.pipe(takeUntilDestroyed(this.destroyRef))\n\t\t\t.subscribe((options) => {\n\t\t\t\tthis.deviceOptions.set(options);\n\t\t\t\tif (options.length === 0) {\n\t\t\t\t\tthis.form.controls.deviceId.disable({ emitEvent: false });\n\t\t\t\t} else {\n\t\t\t\t\tthis.form.controls.deviceId.enable({ emitEvent: false });\n\t\t\t\t}\n\t\t\t});\n\t}\n\n\t//trasforma device -> tutti datapoint leggibili\n\tprivate onDeviceChanged(deviceId: string): void {\n\t\tconst deviceSelection = this.fieldOrchestrator.resolveDeviceSelection(deviceId, this.deviceOptions());\n\t\tthis.selectedDeviceId.set(deviceSelection.normalizedDeviceId);\n\t\tthis.datapointOptions.set([]);\n\t\tthis.selectedDatapoint.set(null);\n\t\tthis.selectedDatapointId.set('');\n\t\tthis.fieldOrchestrator.resetDatapointControl(this.form);\n\t\tthis.applyThresholdConstraints(null);\n\n\t\tif (deviceSelection.normalizedDeviceId.length === 0) {\n\t\t\tthis.form.controls.datapointId.disable({ emitEvent: false });\n\t\t\treturn;\n\t\t}\n\n\t\tthis.datapointOptions.set(deviceSelection.readableDatapoints);\n\t\tthis.form.controls.datapointId.enable({ emitEvent: false });\n\n\t\tif (deviceSelection.autoSelectedDatapointId !== null) {\n\t\t\tthis.form.controls.datapointId.setValue(deviceSelection.autoSelectedDatapointId, { emitEvent: false });\n\t\t\tthis.onDatapointChanged(deviceSelection.autoSelectedDatapointId);\n\t\t}\n\t}\n\n\tprivate onDatapointChanged(datapointId: string): void {\n\t\tconst datapointSelection = this.fieldOrchestrator.resolveDatapointSelection(datapointId, this.datapointOptions());\n\t\tthis.selectedDatapointId.set(datapointSelection.normalizedDatapointId);\n\t\tthis.selectedDatapoint.set(datapointSelection.selectedDatapoint);\n\t\tthis.applyThresholdConstraints(datapointSelection.selectedDatapoint);\n\t}\n\n\tprivate applyThresholdConstraints(datapoint: Datapoint | null): void {\n\t\tthis.validationHelper.applyThresholdConstraints({\n\t\t\tmode: this.mode(),\n\t\t\tdatapoint,\n\t\t\tthresholdOperatorControl: this.form.controls.thresholdOperator,\n\t\t\tthresholdValueControl: this.form.controls.thresholdValue,\n\t\t});\n\t}\n\n\tprivate loadEditDatapointMetadata(deviceId: string, datapointId: string, lookupVersion: number): void {\n\t\tif (this.mode() !== 'edit') {\n\t\t\treturn;\n\t\t}\n\n\t\tconst normalizedDatapointId = datapointId.trim();\n\t\tif (normalizedDatapointId.length === 0) {\n\t\t\tif (lookupVersion !== this.editDatapointLookupVersion || this.mode() !== 'edit') {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.selectedDatapoint.set(null);\n\t\t\tthis.applyThresholdConstraints(null);\n\t\t\treturn;\n\t\t}\n\n\t\tthis.formState\n\t\t\t.resolveDatapointForEdit(deviceId, normalizedDatapointId)\n\t\t\t.pipe(takeUntilDestroyed(this.destroyRef))\n\t\t\t.subscribe((resolvedDatapoint) => {\n\t\t\t\tif (lookupVersion !== this.editDatapointLookupVersion || this.mode() !== 'edit') {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.selectedDatapoint.set(resolvedDatapoint);\n\t\t\t\tthis.applyThresholdConstraints(resolvedDatapoint);\n\t\t\t});\n\t}\n\n\tprivate toPositionLabel(position: string): string {\n\t\tconst normalized = position.replaceAll(/\\s*-\\s*/g, ' - ').trim();\n\t\tif (normalized.length === 0) {\n\t\t\treturn '-';\n\t\t}\n\n\t\treturn normalized;\n\t}\n\n\tpublic onCancel(): void {\n\t\tthis.cancelled.emit();\n\t}\n}\n\n\n\n","
\n
\n \n
\n \n\n @if (isEditMode()) {\n

Il nome della regola d'allarme \xE8 definito in creazione e non pu\xF2\n essere\n modificato.

\n }\n
\n
\n\n @if (isEditMode()) {\n
\n \n
\n \n
\n
\n }\n\n @if (isPlantSelectionVisible()) {\n
\n \n
\n \n\n @if (plantsLoadError(); as plantsError) {\n @if (plantsError) {\n

{{ plantsError }}

\n }\n }\n\n @if (form.controls.plantId.invalid && form.controls.plantId.touched) {\n

L'impianto \xE8 obbligatorio.

\n }\n
\n
\n }\n\n @if (!isEditMode()) {\n
\n \n
\n \n\n @if (!isEditMode() && form.controls.plantId.value.length === 0) {\n

Seleziona prima l'impianto per visualizzare i dispositivi\n disponibili.

\n }\n\n @if (isDevicesLoading()) {\n

Caricamento dispositivi...

\n }\n\n @if (devicesLoadError(); as devicesError) {\n @if (devicesError) {\n

{{ devicesError }}

\n }\n }\n\n @if (form.controls.deviceId.invalid && form.controls.deviceId.touched) {\n

Il dispositivo \xE8 obbligatorio.

\n }\n
\n
\n\n
\n \n
\n \n\n @if (form.controls.deviceId.value.length === 0) {\n

Seleziona prima un dispositivo per visualizzare i datapoint\n leggibili.

\n }\n\n @if (form.controls.deviceId.value.length > 0 && datapointOptions().length === 0) {\n

Nessun datapoint leggibile disponibile per questo\n dispositivo.

\n }\n\n @if (form.controls.datapointId.invalid && form.controls.datapointId.touched) {\n

Il datapoint \xE8 obbligatorio.

\n }\n
\n
\n }\n\n
\n \n
\n \n\n @if (form.controls.priority.value; as selectedPriority) {\n \n }\n
\n
\n\n @if (form.controls.priority.invalid && form.controls.priority.touched) {\n

La priorit\xE0 \xE8 obbligatoria.

\n }\n\n
\n \n
\n @if (isEditMode()) {\n \n

L'operatore \xE8 definito in creazione e non pu\xF2 essere modificato.

\n } @else {\n \n }\n
\n
\n\n @if (!isEditMode() && form.controls.thresholdOperator.hasError('required') &&\n form.controls.thresholdOperator.touched) {\n

L'operatore di soglia \xE8 obbligatorio.

\n }\n\n @if (!isEditMode() && form.controls.thresholdOperator.hasError('unsupportedOperator') &&\n form.controls.thresholdOperator.touched) {\n

Operatore non valido per il datapoint selezionato.

\n }\n\n
\n \n
\n 0 ? 'thresholdEnumHints' : null\"\n class=\"h-8 w-full rounded-md border border-slate-400 bg-white px-2 text-sm focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-slate-600\"\n [attr.aria-invalid]=\"form.controls.thresholdValue.invalid && form.controls.thresholdValue.touched\" />\n \n @for (hint of thresholdValueEnumHints(); track hint) {\n \n }\n \n\n @if (!isEditMode()) {\n

{{ thresholdValueHelpText() }}

\n }\n\n @if (form.controls.thresholdValue.hasError('required') && form.controls.thresholdValue.touched) {\n

La soglia \xE8 obbligatoria.

\n }\n\n @if (form.controls.thresholdValue.hasError('invalidEnumThreshold') && form.controls.thresholdValue.touched)\n {\n

Valore non previsto dall'enum del datapoint\n selezionato.

\n }\n\n @if (form.controls.thresholdValue.hasError('pattern') && form.controls.thresholdValue.touched) {\n

Inserisci un valore numerico valido.

\n }\n
\n
\n\n
\n
\n

Orari:

\n

Inserisci l'intervallo giornaliero in formato 24 ore.

\n
\n\n \n
\n
\n \n \n\n @if (form.controls.armingTime.invalid && form.controls.armingTime.touched) {\n

L'orario di attivazione \xE8 obbligatorio.\n

\n }\n
\n\n
\n \n \n\n @if (form.controls.dearmingTime.invalid && form.controls.dearmingTime.touched) {\n

L'orario di disattivazione \xE8 obbligatorio.\n

\n }\n
\n
\n
\n \n\n
\n \n \n
\n
","import { Injectable, inject } from '@angular/core';\nimport { AlarmRule } from '../../../core/alarm/models/alarm-rule.model';\nimport { AlarmTimeMapper } from '../mappers/alarm-time.mapper';\nimport { AlarmConfigTableRow } from '../models/alarm-config-table-row.model';\n\n@Injectable({ providedIn: 'root' })\nexport class AlarmConfigTablePresenterService {\n private readonly alarmTimeMapper = inject(AlarmTimeMapper);\n\n public toRows(rules: AlarmRule[]): AlarmConfigTableRow[] {\n return rules.map((rule) => ({\n id: rule.id,\n name: rule.name,\n position: this.toPositionLabel(rule.position),\n priority: rule.priority,\n threshold: `${rule.thresholdOperator} ${rule.thresholdValue}`,\n armingTime: this.alarmTimeMapper.toFormTime(rule.armingTime),\n dearmingTime: this.alarmTimeMapper.toFormTime(rule.dearmingTime),\n isEnabled: rule.isArmed,\n }));\n }\n\n private toPositionLabel(position: string): string {\n const normalized = position\n .replaceAll(/\\s*-\\s*/g, ' - ')\n .trim();\n\n if (normalized.length === 0) {\n return '-';\n }\n\n return normalized;\n }\n}","import { ChangeDetectionStrategy, Component, OnInit, computed, inject, signal } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { finalize } from 'rxjs';\nimport { AlarmRule } from '../../../../core/alarm/models/alarm-rule.model';\nimport { AlarmTableShellComponent } from '../../../../shared/components/alarm-table/alarm-table-shell.component';\nimport { AlarmPriorityIndicatorComponent } from '../../../../shared/components/alarm-table/alarm-priority-indicator.component';\nimport { AlarmActionButtonComponent } from '../../../../shared/components/alarm-table/alarm-action-button.component';\nimport { AlarmToggleSwitchComponent } from '../../../../shared/components/alarm-table/alarm-toggle-switch.component';\nimport { ConfirmDialogComponent } from '../../../../shared/components/confirm-dialog/confirm-dialog.component';\nimport { ModalShellComponent } from '../../../../shared/components/modal-shell/modal-shell.component';\nimport { AlarmTableColumn } from '../../../../shared/models/alarm-table.model';\nimport { AlarmConfigFormComponent } from '../alarm-config-form/alarm-config-form.component';\nimport { AlarmConfigFormValue } from '../../models/alarm-config-form-value.model';\nimport { AlarmConfigStateService } from '../../services/alarm-config-state.service';\nimport { AlarmConfigTablePresenterService } from '../../services/alarm-config-table-presenter.service';\n\n@Component({\n\tselector: 'app-alarm-config-page',\n\ttemplateUrl: './alarm-config-page.component.html',\n\tstyleUrl: './alarm-config-page.component.css',\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\timports: [\n\t\tAlarmTableShellComponent,\n\t\tAlarmPriorityIndicatorComponent,\n\t\tAlarmActionButtonComponent,\n\t\tAlarmToggleSwitchComponent,\n\t\tConfirmDialogComponent,\n\t\tModalShellComponent,\n\t\tAlarmConfigFormComponent,\n\t],\n})\nexport class AlarmConfigPageComponent implements OnInit {\n\tprivate readonly stateService = inject(AlarmConfigStateService);\n\tprivate readonly tablePresenter = inject(AlarmConfigTablePresenterService);\n\n\tpublic readonly columns: readonly AlarmTableColumn[] = [\n\t\t{ id: 'name', label: 'Nome' },\n\t\t{ id: 'position', label: 'Posizione' },\n\t\t{ id: 'priority', label: 'Priorita' },\n\t\t{ id: 'threshold', label: 'Soglia' },\n\t\t{ id: 'armingTime', label: 'Orario attivazione' },\n\t\t{ id: 'dearmingTime', label: 'Orario disattivazione' },\n\t\t{ id: 'actions', label: 'Azioni' },\n\t];\n\n\tpublic readonly alarms = toSignal(this.stateService.alarms$, { initialValue: [] as AlarmRule[] });\n\tpublic readonly error = toSignal(this.stateService.error$, { initialValue: null as string | null });\n\tpublic readonly isModalOpen = signal(false);\n\tpublic readonly editingRule = signal(null);\n\tpublic readonly pendingDelete = signal<{ id: string; name: string } | null>(null);\n\tpublic readonly pendingToggleRuleId = signal(null);\n\n\tpublic readonly rows = computed(() => this.tablePresenter.toRows(this.alarms()));\n\tpublic readonly modalTitle = computed(() =>\n\t\tthis.editingRule() ? 'Modifica allarme' : 'Creazione allarme'\n\t);\n\n\tpublic ngOnInit(): void {\n\t\tthis.stateService.loadAlarmRules();\n\t}\n\n\tpublic onCreateNew(): void {\n\t\tthis.editingRule.set(null);\n\t\tthis.isModalOpen.set(true);\n\t}\n\n\tpublic onEdit(alarmRuleId: string): void {\n\t\tconst ruleToEdit = this.alarms().find((rule) => rule.id === alarmRuleId) ?? null;\n\t\tif (!ruleToEdit) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.editingRule.set(ruleToEdit);\n\t\tthis.isModalOpen.set(true);\n\t}\n\n\tpublic onToggleEnabled(alarmRuleId: string, enabled: boolean): void {\n\t\tif (this.pendingToggleRuleId() !== null) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.pendingToggleRuleId.set(alarmRuleId);\n\n\t\tthis.stateService\n\t\t\t.toggleEnabled(alarmRuleId, enabled)\n\t\t\t.pipe(\n\t\t\t\tfinalize(() => {\n\t\t\t\t\tif (this.pendingToggleRuleId() === alarmRuleId) {\n\t\t\t\t\t\tthis.pendingToggleRuleId.set(null);\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t)\n\t\t\t.subscribe();\n\t}\n\n\tpublic onDelete(id: string, name: string): void {\n\t\tthis.pendingDelete.set({ id, name });\n\t}\n\n\tpublic onDeleteConfirmed(): void {\n\t\tconst deleteCandidate = this.pendingDelete();\n\t\tif (!deleteCandidate) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.stateService.deleteAlarmRule(deleteCandidate.id).subscribe();\n\t\tthis.pendingDelete.set(null);\n\t}\n\n\tpublic onDeleteCancelled(): void {\n\t\tthis.pendingDelete.set(null);\n\t}\n\n\tpublic getDeleteConfirmMessage(): string {\n\t\tconst deleteCandidate = this.pendingDelete();\n\t\tif (!deleteCandidate) {\n\t\t\treturn 'Confermi questa operazione?';\n\t\t}\n\n\t\treturn `Confermi l'eliminazione della soglia \"${deleteCandidate.name}\"?`;\n\t}\n\n\tpublic onFormSubmitted(formValue: AlarmConfigFormValue): void {\n\t\tconst editingRule = this.editingRule();\n\n\t\tif (editingRule) {\n\t\t\tthis.stateService.updateAlarmRule(editingRule.id, formValue).subscribe(() => {\n\t\t\t\tthis.onModalClosed();\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\tthis.stateService.createAlarmRule(formValue).subscribe(() => {\n\t\t\tthis.onModalClosed();\n\t\t});\n\t}\n\n\tpublic onModalClosed(): void {\n\t\tthis.isModalOpen.set(false);\n\t\tthis.editingRule.set(null);\n\t}\n}\n","
\n
\n
\n

Allarmi

\n

Configurazione allarmi

\n

Gestisci soglie e pianificazioni con una vista tabellare unica.

\n
\n
\n\n @if (error(); as errorMessage) {\n @if (errorMessage) {\n

\n {{ errorMessage }}\n

\n }\n }\n\n \n @if (rows().length === 0) {\n \n \n @if (error()) {\n Impossibile caricare le regole di allarme. Verifica la sessione o riprova tra poco.\n } @else {\n Nessuna regola configurata.\n }\n \n \n } @else {\n @for (row of rows(); track row.id) {\n \n \n {{ row.name }}\n \n {{ row.position }}\n \n \n \n {{ row.threshold }}\n {{ row.armingTime }}\n {{ row.dearmingTime }}\n \n
\n \n \n \n
\n \n \n }\n }\n
\n\n \n @if (isModalOpen()) {\n \n }\n \n\n @if (pendingDelete()) {\n \n }\n
"],mappings:"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",names:["AlarmToggleSwitchComponent","checked","input","disabled","ariaLabel","toggled","output","trackClass","computed","baseClass","thumbClass","onToggle","emit","selectors","inputs","outputs","decls","vars","consts","template","rf","ctx","\u0275\u0275domElementStart","\u0275\u0275domListener","\u0275\u0275domElement","\u0275\u0275domElementEnd","\u0275\u0275classMap","\u0275\u0275domProperty","\u0275\u0275advance","\u0275\u0275domElementStart","\u0275\u0275text","\u0275\u0275domElementEnd","\u0275\u0275advance","\u0275\u0275textInterpolate","ctx_r1","description","\u0275\u0275domListener","\u0275\u0275restoreView","_r1","\u0275\u0275nextContext","\u0275\u0275resetView","onClose","\u0275\u0275conditionalCreate","ModalShellComponent_Conditional_0_Conditional_6_Template","\u0275\u0275projection","title","\u0275\u0275conditional","ModalShellComponent","open","input","required","closeLabel","closed","output","emit","selectors","inputs","outputs","ngContentSelectors","_c0","decls","vars","consts","template","rf","ctx","ModalShellComponent_Conditional_0_Template","AlarmRuleFormMapper","alarmTimeMapper","inject","AlarmTimeMapper","toFormValue","rule","name","plantId","deviceId","datapointId","priority","thresholdOperator","toFormThresholdOperator","thresholdValue","armingTime","toFormTime","dearmingTime","enabled","isArmed","operator","normalizedOperator","trim","ThresholdOperator","GREATER_THAN","GREATER_THAN_OR_EQUAL","LESS_THAN","LESS_THAN_OR_EQUAL","EQUAL_TO","Error","factory","\u0275fac","providedIn","DeviceDatapointExtractionService","numericThresholdPattern","extractDeviceOptions","apartment","rooms","flatMap","room","devices","map","device","id","label","name","datapoints","normalizeDatapoints","findReadableDatapoints","deviceId","deviceOptions","selectedDevice","find","option","filter","datapoint","readable","findDatapointById","datapointId","findDatapointByDeviceAndDatapointId","plants","normalizedDeviceId","trim","normalizedDatapointId","length","plant","selectedDatapoint","writable","valueType","enum","normalizeEnumValues","sfeType","getAllowedOperators","usesEnumeratedThreshold","ThresholdOperator","EQUAL_TO","Object","values","getEnumValues","normalizeThresholdValue","value","trimmedValue","enumValues","enumValue","toLowerCase","isThresholdValueValid","some","test","__spreadProps","__spreadValues","normalizedValues","Array","from","Set","factory","\u0275fac","providedIn","AlarmConfigFormValidationHelper","datapointExtraction","constructor","applyThresholdConstraints","mode","datapoint","thresholdOperatorControl","thresholdValueControl","allowedOperators","resolveAllowedOperators","value","setValidators","Validators","required","operatorAllowedValidator","usesEnumeratedThreshold","enumValues","getEnumValues","enumThresholdValidator","normalizedValue","normalizeThresholdValue","String","setValue","emitEvent","pattern","includes","updateValueAndValidity","currentOperator","getAllowedOperators","Object","values","ThresholdOperator","control","unsupportedOperator","normalizedEnumValues","Set","map","enumValue","toLowerCase","trim","length","has","invalidEnumThreshold","\u0275\u0275inject","DeviceDatapointExtractionService","factory","\u0275fac","providedIn","AlarmConfigFormStateService","wardApi","apartmentApi","datapointExtraction","hasRequestedPlants","constructor","plants","signal","plantsLoadError","devicesLoadError","isDevicesLoading","ensurePlantsLoaded","mode","length","of","loadAllPlants","pipe","tap","set","map","catchError","resetDevicesLoadState","loadDeviceOptionsByPlant","plantId","normalizedPlantId","trim","loadApartmentViewForPlantId","apartment","extractDeviceOptions","resolveDatapointForEdit","deviceId","datapointId","normalizedDeviceId","normalizedDatapointId","getAllPlants","findDatapointByDeviceAndDatapointId","forkJoin","availablePlants","getAvailablePlants","wards","getWards","switchMap","mergePlants","wardPlantsRequests","ward","getPlantsByWardId","id","assignedPlantsByWard","flat","assignedPlants","mergedMap","Map","plant","Array","from","values","sort","first","second","name","localeCompare","\u0275\u0275inject","WardApiService","ApartmentApiService","DeviceDatapointExtractionService","factory","\u0275fac","AlarmConfigFormFieldOrchestratorHelper","datapointExtraction","constructor","applyModeState","form","mode","controls","name","disable","emitEvent","plantId","clearValidators","deviceId","datapointId","thresholdOperator","updateValueAndValidity","enable","setValidators","Validators","required","String","value","trim","length","resetDatapointControl","setValue","resolveDeviceSelection","deviceOptions","normalizedDeviceId","readableDatapoints","autoSelectedDatapointId","findReadableDatapoints","id","resolveDatapointSelection","datapointOptions","normalizedDatapointId","selectedDatapoint","findDatapointById","\u0275\u0275inject","DeviceDatapointExtractionService","factory","\u0275fac","providedIn","\u0275\u0275elementStart","\u0275\u0275text","\u0275\u0275elementEnd","\u0275\u0275element","\u0275\u0275advance","\u0275\u0275property","ctx_r0","editPosition","plant_r2","id","\u0275\u0275textInterpolate","name","plantsError_r3","\u0275\u0275conditionalCreate","AlarmConfigFormComponent_Conditional_8_Conditional_9_Conditional_0_Template","\u0275\u0275conditional","ctx","\u0275\u0275repeaterCreate","AlarmConfigFormComponent_Conditional_8_For_8_Template","_forTrack0","AlarmConfigFormComponent_Conditional_8_Conditional_9_Template","AlarmConfigFormComponent_Conditional_8_Conditional_10_Template","\u0275\u0275repeater","plants","tmp_3_0","plantsLoadError","form","controls","plantId","invalid","touched","device_r4","label","devicesError_r5","AlarmConfigFormComponent_Conditional_9_Conditional_10_Conditional_0_Template","datapoint_r6","AlarmConfigFormComponent_Conditional_9_Conditional_5_Template","AlarmConfigFormComponent_Conditional_9_For_7_Template","AlarmConfigFormComponent_Conditional_9_Conditional_8_Template","AlarmConfigFormComponent_Conditional_9_Conditional_9_Template","AlarmConfigFormComponent_Conditional_9_Conditional_10_Template","AlarmConfigFormComponent_Conditional_9_Conditional_11_Template","AlarmConfigFormComponent_Conditional_9_For_20_Template","AlarmConfigFormComponent_Conditional_9_Conditional_21_Template","AlarmConfigFormComponent_Conditional_9_Conditional_22_Template","AlarmConfigFormComponent_Conditional_9_Conditional_23_Template","isEditMode","deviceOptions","value","length","isDevicesLoading","tmp_6_0","devicesLoadError","deviceId","datapointOptions","datapointId","priority_r7","thresholdOperator","operator_r8","AlarmConfigFormComponent_Conditional_26_For_4_Template","\u0275\u0275repeaterTrackByIdentity","thresholdOperatorOptions","hint_r9","thresholdValueHelpText","AlarmConfigFormComponent","mode","input","initialRule","submittedForm","output","cancelled","fb","inject","FormBuilder","formMapper","AlarmRuleFormMapper","formState","AlarmConfigFormStateService","datapointExtraction","DeviceDatapointExtractionService","validationHelper","AlarmConfigFormValidationHelper","fieldOrchestrator","AlarmConfigFormFieldOrchestratorHelper","destroyRef","DestroyRef","editDatapointLookupVersion","buildForm","computed","signal","selectedDeviceId","selectedDatapointId","selectedDatapoint","isPlantSelectionVisible","position","toPositionLabel","priorityOptions","Object","values","AlarmPriority","filter","getAllowedOperators","datapoint","currentOperator","ThresholdOperator","thresholdValueEnumHints","getEnumValues","constructor","effect","rule","lookupVersion","reset","toFormValue","set","datapoints","applyModeState","applyThresholdConstraints","loadEditDatapointMetadata","createEmptyFormValue","ensurePlantsLoaded","valueChanges","pipe","takeUntilDestroyed","subscribe","onPlantChanged","onDeviceChanged","onDatapointChanged","nonNullable","group","Validators","required","priority","thresholdValue","armingTime","pattern","dearmingTime","enabled","onSubmit","normalizedThreshold","normalizeThresholdValue","setValue","emitEvent","updateValueAndValidity","markAllAsTouched","formValue","getRawValue","lockedRule","emit","__spreadProps","__spreadValues","resetDevicesLoadState","trim","disable","loadDeviceOptionsByPlant","options","enable","deviceSelection","resolveDeviceSelection","normalizedDeviceId","resetDatapointControl","readableDatapoints","autoSelectedDatapointId","datapointSelection","resolveDatapointSelection","normalizedDatapointId","thresholdOperatorControl","thresholdValueControl","resolveDatapointForEdit","resolvedDatapoint","normalized","replaceAll","onCancel","selectors","inputs","outputs","features","\u0275\u0275ProvidersFeature","decls","vars","consts","template","rf","\u0275\u0275listener","AlarmConfigFormComponent_Conditional_6_Template","AlarmConfigFormComponent_Conditional_7_Template","AlarmConfigFormComponent_Conditional_8_Template","AlarmConfigFormComponent_Conditional_9_Template","AlarmConfigFormComponent_For_18_Template","AlarmConfigFormComponent_Conditional_19_Template","AlarmConfigFormComponent_Conditional_20_Template","AlarmConfigFormComponent_Conditional_25_Template","AlarmConfigFormComponent_Conditional_26_Template","AlarmConfigFormComponent_Conditional_27_Template","AlarmConfigFormComponent_Conditional_28_Template","AlarmConfigFormComponent_For_36_Template","AlarmConfigFormComponent_Conditional_37_Template","AlarmConfigFormComponent_Conditional_38_Template","AlarmConfigFormComponent_Conditional_39_Template","AlarmConfigFormComponent_Conditional_40_Template","AlarmConfigFormComponent_Conditional_53_Template","AlarmConfigFormComponent_Conditional_58_Template","tmp_8_0","hasError","ReactiveFormsModule","\u0275NgNoValidate","NgSelectOption","\u0275NgSelectMultipleOption","DefaultValueAccessor","SelectControlValueAccessor","NgControlStatus","NgControlStatusGroup","FormGroupDirective","FormControlName","AlarmPriorityIndicatorComponent","AlarmActionButtonComponent","encapsulation","changeDetection","AlarmConfigTablePresenterService","alarmTimeMapper","inject","AlarmTimeMapper","toRows","rules","map","rule","id","name","position","toPositionLabel","priority","threshold","thresholdOperator","thresholdValue","armingTime","toFormTime","dearmingTime","isEnabled","isArmed","normalized","replaceAll","trim","length","factory","\u0275fac","providedIn","\u0275\u0275elementStart","\u0275\u0275text","\u0275\u0275elementEnd","\u0275\u0275advance","\u0275\u0275textInterpolate1","errorMessage_r1","\u0275\u0275conditionalCreate","AlarmConfigPageComponent_Conditional_9_Conditional_0_Template","\u0275\u0275conditional","ctx","AlarmConfigPageComponent_Conditional_11_Conditional_2_Template","AlarmConfigPageComponent_Conditional_11_Conditional_3_Template","ctx_r1","error","\u0275\u0275element","\u0275\u0275listener","row_r4","\u0275\u0275restoreView","_r3","$implicit","\u0275\u0275nextContext","\u0275\u0275resetView","onEdit","id","onDelete","name","$event","onToggleEnabled","\u0275\u0275textInterpolate","position","\u0275\u0275property","priority","threshold","armingTime","dearmingTime","isEnabled","pendingToggleRuleId","\u0275\u0275repeaterCreate","AlarmConfigPageComponent_Conditional_12_For_1_Template","_forTrack0","\u0275\u0275repeater","rows","_r5","onFormSubmitted","onModalClosed","editingRule","_r6","onDeleteConfirmed","onDeleteCancelled","getDeleteConfirmMessage","AlarmConfigPageComponent","stateService","inject","AlarmConfigStateService","tablePresenter","AlarmConfigTablePresenterService","columns","label","alarms","toSignal","alarms$","initialValue","error$","isModalOpen","signal","pendingDelete","computed","toRows","modalTitle","ngOnInit","loadAlarmRules","onCreateNew","set","alarmRuleId","ruleToEdit","find","rule","enabled","toggleEnabled","pipe","finalize","subscribe","deleteCandidate","deleteAlarmRule","formValue","updateAlarmRule","createAlarmRule","selectors","decls","vars","consts","template","rf","AlarmConfigPageComponent_Conditional_9_Template","AlarmConfigPageComponent_Conditional_11_Template","AlarmConfigPageComponent_Conditional_12_Template","AlarmConfigPageComponent_Conditional_14_Template","AlarmConfigPageComponent_Conditional_15_Template","tmp_0_0","length","AlarmTableShellComponent","AlarmPriorityIndicatorComponent","AlarmActionButtonComponent","AlarmToggleSwitchComponent","ConfirmDialogComponent","ModalShellComponent","AlarmConfigFormComponent","styles","changeDetection"]},_coverageSchema:"1a1c01bbd47fc00a2c39e90264f33305004495a9",hash:"8825c99f4d90e0c3b8659407a4156c296f4d5aff"};var coverage=global[gcv]||(global[gcv]={});if(!coverage[path]||coverage[path].hash!==hash){coverage[path]=coverageData;}var actualCoverage=coverage[path];{// @ts-ignore +cov_1ahhyrt4se=function(){return actualCoverage;};}return actualCoverage;}cov_1ahhyrt4se();import{a as Oe}from"./chunk-QFTDGRKT.js";import"./chunk-HTKPMSJ5.js";import{a as Me}from"./chunk-BESIDB4Y.js";import{a as Fe}from"./chunk-54EPVJ7F.js";import{a as x,b as Y,c as we}from"./chunk-MSNAYSOW.js";import"./chunk-EZ7WFT6U.js";import{a as be,b as f,c as Ce,d as _e,e as xe,f as Ee,g as De,h as Te,i as Se,j as Ie,l as ye,m as Ae}from"./chunk-X3YLKFKT.js";import{a as X}from"./chunk-GNETQW7L.js";import{a as Ve}from"./chunk-SNRTUDXT.js";import{a as J}from"./chunk-V5PG7NSI.js";import"./chunk-CFHT7CZE.js";import{a as k,b as oe}from"./chunk-NAQGW5AE.js";import"./chunk-VIBKONAW.js";import"./chunk-JOEDXNZS.js";import{a as ve}from"./chunk-ZZLQRDHJ.js";import"./chunk-65RKWSY3.js";import"./chunk-2S5V5XEE.js";import"./chunk-F6OGAIBI.js";import{$ as me,$a as Q,A as de,Ab as s,Bb as g,Cb as ie,F as se,Fb as ge,H as ee,Ka as L,L as E,P as O,Pb as _,Q as C,Sb as R,Tb as T,V as y,W as A,Wa as b,Ya as m,_a as p,ab as V,bb as w,cb as u,db as r,eb as n,fb as I,ga as v,gb as j,h as S,hb as z,ia as pe,ib as ce,jb as $,kb as ue,m as H,nb as D,ob as W,pb as c,qb as fe,rb as he,s as Z,w as N,wa as a,zb as te}from"./chunk-RYTNMYZW.js";import{a as G,b as U}from"./chunk-VCZGUBMY.js";var Le=(cov_1ahhyrt4se().s[0]++,(()=>{cov_1ahhyrt4se().f[0]++;class i{checked=(cov_1ahhyrt4se().s[1]++,T(!1));disabled=(cov_1ahhyrt4se().s[2]++,T(!1));ariaLabel=(cov_1ahhyrt4se().s[3]++,T("Abilita o disabilita"));toggled=(cov_1ahhyrt4se().s[4]++,R());trackClass=(cov_1ahhyrt4se().s[5]++,_(()=>{cov_1ahhyrt4se().f[1]++;let e=(cov_1ahhyrt4se().s[6]++,"relative inline-flex h-5 w-9 items-center rounded-full border transition focus-visible:outline-2 focus-visible:outline-offset-2");cov_1ahhyrt4se().s[7]++;return this.checked()?(cov_1ahhyrt4se().b[0][0]++,`${e} border-yellow-700 bg-yellow-400 focus-visible:outline-yellow-500 disabled:border-slate-400 disabled:bg-slate-300`):(cov_1ahhyrt4se().b[0][1]++,`${e} border-slate-500 bg-white focus-visible:outline-slate-500 disabled:border-slate-400 disabled:bg-slate-200`);}));thumbClass=(cov_1ahhyrt4se().s[8]++,_(()=>{cov_1ahhyrt4se().f[2]++;let e=(cov_1ahhyrt4se().s[9]++,"inline-block h-4 w-4 transform rounded-full border border-slate-500 bg-white transition");cov_1ahhyrt4se().s[10]++;return this.checked()?(cov_1ahhyrt4se().b[1][0]++,`${e} translate-x-4`):(cov_1ahhyrt4se().b[1][1]++,`${e} translate-x-0.5`);}));onToggle(){cov_1ahhyrt4se().f[3]++;cov_1ahhyrt4se().s[11]++;(cov_1ahhyrt4se().b[2][0]++,this.disabled())||(cov_1ahhyrt4se().b[2][1]++,this.toggled.emit(!this.checked()));}static ɵfac=(cov_1ahhyrt4se().s[12]++,function(t){cov_1ahhyrt4se().f[4]++;cov_1ahhyrt4se().s[13]++;return new((cov_1ahhyrt4se().b[3][0]++,t)||(cov_1ahhyrt4se().b[3][1]++,i))();});static ɵcmp=(cov_1ahhyrt4se().s[14]++,L({type:i,selectors:[["app-alarm-toggle-switch"]],inputs:{checked:[1,"checked"],disabled:[1,"disabled"],ariaLabel:[1,"ariaLabel"]},outputs:{toggled:"toggled"},decls:2,vars:7,consts:[["type","button",3,"click","disabled"]],template:function(t,o){cov_1ahhyrt4se().f[5]++;cov_1ahhyrt4se().s[15]++;(cov_1ahhyrt4se().b[4][0]++,t&1)&&(cov_1ahhyrt4se().b[4][1]++,j(0,"button",0),W("click",function(){cov_1ahhyrt4se().f[6]++;cov_1ahhyrt4se().s[16]++;return o.onToggle();}),ce(1,"span"),z()),(cov_1ahhyrt4se().b[5][0]++,t&2)&&(cov_1ahhyrt4se().b[5][1]++,te(o.trackClass()),ue("disabled",o.disabled()),b("aria-label",o.ariaLabel())("aria-pressed",o.checked()),a(),te(o.thumbClass()));},encapsulation:2,changeDetection:0}));}cov_1ahhyrt4se().s[17]++;return i;})());var $e=(cov_1ahhyrt4se().s[18]++,["*"]);function qe(i,d){cov_1ahhyrt4se().f[7]++;cov_1ahhyrt4se().s[19]++;if((cov_1ahhyrt4se().b[7][0]++,i&1)&&(cov_1ahhyrt4se().b[7][1]++,j(0,"p",4),s(1),z()),i&2){cov_1ahhyrt4se().b[6][0]++;let e=(cov_1ahhyrt4se().s[20]++,c(2));cov_1ahhyrt4se().s[21]++;a(),g(e.description());}else{cov_1ahhyrt4se().b[6][1]++;}}function He(i,d){cov_1ahhyrt4se().f[8]++;cov_1ahhyrt4se().s[22]++;if(i&1){cov_1ahhyrt4se().b[8][0]++;let e=(cov_1ahhyrt4se().s[23]++,$());cov_1ahhyrt4se().s[24]++;j(0,"dialog",0)(1,"header",1)(2,"h2",2),s(3),z(),j(4,"button",3),W("click",function(){cov_1ahhyrt4se().f[9]++;cov_1ahhyrt4se().s[25]++;y(e);let o=(cov_1ahhyrt4se().s[26]++,c());cov_1ahhyrt4se().s[27]++;return A(o.onClose());}),s(5," \u2715 "),z()(),m(6,qe,2,1,"p",4),he(7),z();}else{cov_1ahhyrt4se().b[8][1]++;}cov_1ahhyrt4se().s[28]++;if(i&2){cov_1ahhyrt4se().b[9][0]++;let e=(cov_1ahhyrt4se().s[29]++,c());cov_1ahhyrt4se().s[30]++;b("aria-describedby",e.description()?(cov_1ahhyrt4se().b[10][0]++,"app-modal-shell-description"):(cov_1ahhyrt4se().b[10][1]++,null)),a(3),g(e.title()),a(),b("aria-label",e.closeLabel()),a(2),p(e.description()?(cov_1ahhyrt4se().b[11][0]++,6):(cov_1ahhyrt4se().b[11][1]++,-1));}else{cov_1ahhyrt4se().b[9][1]++;}}var Pe=(cov_1ahhyrt4se().s[31]++,(()=>{cov_1ahhyrt4se().f[10]++;class i{open=(cov_1ahhyrt4se().s[32]++,T(!1));title=(cov_1ahhyrt4se().s[33]++,T.required());description=(cov_1ahhyrt4se().s[34]++,T(null));closeLabel=(cov_1ahhyrt4se().s[35]++,T("Chiudi finestra"));closed=(cov_1ahhyrt4se().s[36]++,R());onClose(){cov_1ahhyrt4se().f[11]++;cov_1ahhyrt4se().s[37]++;this.closed.emit();}static ɵfac=(cov_1ahhyrt4se().s[38]++,function(t){cov_1ahhyrt4se().f[12]++;cov_1ahhyrt4se().s[39]++;return new((cov_1ahhyrt4se().b[12][0]++,t)||(cov_1ahhyrt4se().b[12][1]++,i))();});static ɵcmp=(cov_1ahhyrt4se().s[40]++,L({type:i,selectors:[["app-modal-shell"]],inputs:{open:[1,"open"],title:[1,"title"],description:[1,"description"],closeLabel:[1,"closeLabel"]},outputs:{closed:"closed"},ngContentSelectors:$e,decls:1,vars:1,consts:[["open","","aria-labelledby","app-modal-shell-title",1,"fixed","inset-0","z-50","m-auto","w-[95vw]","max-w-3xl","max-h-[90vh]","overflow-y-auto","rounded-2xl","border","border-slate-400","bg-slate-100","p-4","shadow-2xl","backdrop:bg-black/45","focus:outline-none"],[1,"mb-3","flex","items-center","justify-between","border-b","border-slate-400","pb-2"],["id","app-modal-shell-title",1,"text-base","font-bold","text-slate-900"],["type","button",1,"inline-flex","h-7","w-7","items-center","justify-center","rounded-full","border","border-slate-500","bg-white","text-sm","font-bold","text-slate-800","transition","hover:bg-slate-200","focus-visible:outline-2","focus-visible:outline-offset-2","focus-visible:outline-slate-600",3,"click"],["id","app-modal-shell-description",1,"mb-3","text-sm","text-slate-700"]],template:function(t,o){cov_1ahhyrt4se().f[13]++;cov_1ahhyrt4se().s[41]++;(cov_1ahhyrt4se().b[13][0]++,t&1)&&(cov_1ahhyrt4se().b[13][1]++,fe(),m(0,He,8,4,"dialog",0)),(cov_1ahhyrt4se().b[14][0]++,t&2)&&(cov_1ahhyrt4se().b[14][1]++,p(o.open()?(cov_1ahhyrt4se().b[15][0]++,0):(cov_1ahhyrt4se().b[15][1]++,-1)));},encapsulation:2,changeDetection:0}));}cov_1ahhyrt4se().s[42]++;return i;})());var Ne=(cov_1ahhyrt4se().s[43]++,(()=>{cov_1ahhyrt4se().f[14]++;class i{alarmTimeMapper=(cov_1ahhyrt4se().s[44]++,C(Y));toFormValue(e){cov_1ahhyrt4se().f[15]++;cov_1ahhyrt4se().s[45]++;return{name:e.name,plantId:"",deviceId:e.deviceId,datapointId:(cov_1ahhyrt4se().b[16][0]++,e.datapointId)??(cov_1ahhyrt4se().b[16][1]++,""),priority:e.priority,thresholdOperator:this.toFormThresholdOperator(e.thresholdOperator),thresholdValue:e.thresholdValue,armingTime:this.alarmTimeMapper.toFormTime(e.armingTime),dearmingTime:this.alarmTimeMapper.toFormTime(e.dearmingTime),enabled:e.isArmed};}toFormThresholdOperator(e){cov_1ahhyrt4se().f[16]++;let t=(cov_1ahhyrt4se().s[46]++,e.trim());cov_1ahhyrt4se().s[47]++;if(t===">"){cov_1ahhyrt4se().b[17][0]++;cov_1ahhyrt4se().s[48]++;return x.GREATER_THAN;}else{cov_1ahhyrt4se().b[17][1]++;}cov_1ahhyrt4se().s[49]++;if(t===">="){cov_1ahhyrt4se().b[18][0]++;cov_1ahhyrt4se().s[50]++;return x.GREATER_THAN_OR_EQUAL;}else{cov_1ahhyrt4se().b[18][1]++;}cov_1ahhyrt4se().s[51]++;if(t==="<"){cov_1ahhyrt4se().b[19][0]++;cov_1ahhyrt4se().s[52]++;return x.LESS_THAN;}else{cov_1ahhyrt4se().b[19][1]++;}cov_1ahhyrt4se().s[53]++;if(t==="<="){cov_1ahhyrt4se().b[20][0]++;cov_1ahhyrt4se().s[54]++;return x.LESS_THAN_OR_EQUAL;}else{cov_1ahhyrt4se().b[20][1]++;}cov_1ahhyrt4se().s[55]++;if(t==="="){cov_1ahhyrt4se().b[21][0]++;cov_1ahhyrt4se().s[56]++;return x.EQUAL_TO;}else{cov_1ahhyrt4se().b[21][1]++;}cov_1ahhyrt4se().s[57]++;throw new Error(`Operatore soglia non supportato: ${e}`);}static ɵfac=(cov_1ahhyrt4se().s[58]++,function(t){cov_1ahhyrt4se().f[17]++;cov_1ahhyrt4se().s[59]++;return new((cov_1ahhyrt4se().b[22][0]++,t)||(cov_1ahhyrt4se().b[22][1]++,i))();});static ɵprov=(cov_1ahhyrt4se().s[60]++,E({token:i,factory:i.ɵfac,providedIn:"root"}));}cov_1ahhyrt4se().s[61]++;return i;})());var P=(cov_1ahhyrt4se().s[62]++,(()=>{cov_1ahhyrt4se().f[18]++;class i{numericThresholdPattern=(cov_1ahhyrt4se().s[63]++,/^[+-]?\d+([.]\d+)?$/);extractDeviceOptions(e){cov_1ahhyrt4se().f[19]++;cov_1ahhyrt4se().s[64]++;return e.rooms.flatMap(t=>{cov_1ahhyrt4se().f[20]++;cov_1ahhyrt4se().s[65]++;return t.devices.map(o=>{cov_1ahhyrt4se().f[21]++;cov_1ahhyrt4se().s[66]++;return{id:o.id,label:`${t.name} - ${o.name}`,datapoints:this.normalizeDatapoints(o.datapoints)};});});}findReadableDatapoints(e,t){cov_1ahhyrt4se().f[22]++;let o=(cov_1ahhyrt4se().s[67]++,t.find(l=>{cov_1ahhyrt4se().f[23]++;cov_1ahhyrt4se().s[68]++;return l.id===e;}));cov_1ahhyrt4se().s[69]++;return o?(cov_1ahhyrt4se().b[23][0]++,o.datapoints.filter(l=>{cov_1ahhyrt4se().f[24]++;cov_1ahhyrt4se().s[70]++;return l.readable;})):(cov_1ahhyrt4se().b[23][1]++,[]);}findDatapointById(e,t){cov_1ahhyrt4se().f[25]++;cov_1ahhyrt4se().s[71]++;return(cov_1ahhyrt4se().b[24][0]++,t.find(o=>{cov_1ahhyrt4se().f[26]++;cov_1ahhyrt4se().s[72]++;return o.id===e;}))??(cov_1ahhyrt4se().b[24][1]++,null);}findDatapointByDeviceAndDatapointId(e,t,o){cov_1ahhyrt4se().f[27]++;let l=(cov_1ahhyrt4se().s[73]++,t.trim()),h=(cov_1ahhyrt4se().s[74]++,o.trim());cov_1ahhyrt4se().s[75]++;if((cov_1ahhyrt4se().b[26][0]++,l.length===0)||(cov_1ahhyrt4se().b[26][1]++,h.length===0)){cov_1ahhyrt4se().b[25][0]++;cov_1ahhyrt4se().s[76]++;return null;}else{cov_1ahhyrt4se().b[25][1]++;}cov_1ahhyrt4se().s[77]++;for(let q of e){cov_1ahhyrt4se().s[78]++;for(let B of(cov_1ahhyrt4se().b[27][0]++,q.rooms)??(cov_1ahhyrt4se().b[27][1]++,[])){let le=(cov_1ahhyrt4se().s[79]++,B.devices.find(K=>{cov_1ahhyrt4se().f[28]++;cov_1ahhyrt4se().s[80]++;return K.id===l;}));cov_1ahhyrt4se().s[81]++;if(!le){cov_1ahhyrt4se().b[28][0]++;cov_1ahhyrt4se().s[82]++;continue;}else{cov_1ahhyrt4se().b[28][1]++;}let F=(cov_1ahhyrt4se().s[83]++,((cov_1ahhyrt4se().b[29][0]++,le.datapoints)??(cov_1ahhyrt4se().b[29][1]++,[])).find(K=>{cov_1ahhyrt4se().f[29]++;cov_1ahhyrt4se().s[84]++;return K.id===h;}));cov_1ahhyrt4se().s[85]++;if(F){cov_1ahhyrt4se().b[30][0]++;cov_1ahhyrt4se().s[86]++;return{id:F.id,name:F.name,readable:F.readable,writable:F.writable,valueType:F.valueType,enum:this.normalizeEnumValues(F.enum),sfeType:F.sfeType};}else{cov_1ahhyrt4se().b[30][1]++;}}}cov_1ahhyrt4se().s[87]++;return null;}getAllowedOperators(e){cov_1ahhyrt4se().f[30]++;cov_1ahhyrt4se().s[88]++;return this.usesEnumeratedThreshold(e)?(cov_1ahhyrt4se().b[31][0]++,[x.EQUAL_TO]):(cov_1ahhyrt4se().b[31][1]++,Object.values(x));}getEnumValues(e){cov_1ahhyrt4se().f[31]++;cov_1ahhyrt4se().s[89]++;return e?(cov_1ahhyrt4se().b[32][0]++,this.normalizeEnumValues(e.enum)):(cov_1ahhyrt4se().b[32][1]++,[]);}usesEnumeratedThreshold(e){cov_1ahhyrt4se().f[32]++;cov_1ahhyrt4se().s[90]++;return this.getEnumValues(e).length>0;}normalizeThresholdValue(e,t){cov_1ahhyrt4se().f[33]++;let o=(cov_1ahhyrt4se().s[91]++,t.trim()),l=(cov_1ahhyrt4se().s[92]++,this.getEnumValues(e));cov_1ahhyrt4se().s[93]++;return l.length===0?(cov_1ahhyrt4se().b[33][0]++,o):(cov_1ahhyrt4se().b[33][1]++,(cov_1ahhyrt4se().b[34][0]++,l.find(q=>{cov_1ahhyrt4se().f[34]++;cov_1ahhyrt4se().s[94]++;return q.toLowerCase()===o.toLowerCase();}))??(cov_1ahhyrt4se().b[34][1]++,o));}isThresholdValueValid(e,t){cov_1ahhyrt4se().f[35]++;let o=(cov_1ahhyrt4se().s[95]++,t.trim());cov_1ahhyrt4se().s[96]++;if(o.length===0){cov_1ahhyrt4se().b[35][0]++;cov_1ahhyrt4se().s[97]++;return!1;}else{cov_1ahhyrt4se().b[35][1]++;}let l=(cov_1ahhyrt4se().s[98]++,this.getEnumValues(e));cov_1ahhyrt4se().s[99]++;return l.length>0?(cov_1ahhyrt4se().b[36][0]++,l.some(h=>{cov_1ahhyrt4se().f[36]++;cov_1ahhyrt4se().s[100]++;return h.toLowerCase()===o.toLowerCase();})):(cov_1ahhyrt4se().b[36][1]++,this.numericThresholdPattern.test(o));}normalizeDatapoints(e){cov_1ahhyrt4se().f[37]++;cov_1ahhyrt4se().s[101]++;return((cov_1ahhyrt4se().b[37][0]++,e)??(cov_1ahhyrt4se().b[37][1]++,[])).map(t=>{cov_1ahhyrt4se().f[38]++;cov_1ahhyrt4se().s[102]++;return U(G({},t),{enum:this.normalizeEnumValues(t.enum)});});}normalizeEnumValues(e){cov_1ahhyrt4se().f[39]++;let t=(cov_1ahhyrt4se().s[103]++,((cov_1ahhyrt4se().b[38][0]++,e)??(cov_1ahhyrt4se().b[38][1]++,[])).map(o=>{cov_1ahhyrt4se().f[40]++;cov_1ahhyrt4se().s[104]++;return o.trim();}).filter(o=>{cov_1ahhyrt4se().f[41]++;cov_1ahhyrt4se().s[105]++;return o.length>0;}));cov_1ahhyrt4se().s[106]++;return Array.from(new Set(t));}static ɵfac=(cov_1ahhyrt4se().s[107]++,function(t){cov_1ahhyrt4se().f[42]++;cov_1ahhyrt4se().s[108]++;return new((cov_1ahhyrt4se().b[39][0]++,t)||(cov_1ahhyrt4se().b[39][1]++,i))();});static ɵprov=(cov_1ahhyrt4se().s[109]++,E({token:i,factory:i.ɵfac,providedIn:"root"}));}cov_1ahhyrt4se().s[110]++;return i;})());var ze=(cov_1ahhyrt4se().s[111]++,(()=>{cov_1ahhyrt4se().f[43]++;class i{datapointExtraction;constructor(e){cov_1ahhyrt4se().f[44]++;cov_1ahhyrt4se().s[112]++;this.datapointExtraction=e;}applyThresholdConstraints({mode:e,datapoint:t,thresholdOperatorControl:o,thresholdValueControl:l}){cov_1ahhyrt4se().f[45]++;let h=(cov_1ahhyrt4se().s[113]++,this.resolveAllowedOperators(e,t,o.value));cov_1ahhyrt4se().s[114]++;if(o.setValidators([f.required,this.operatorAllowedValidator(h)]),t===null){cov_1ahhyrt4se().b[40][0]++;cov_1ahhyrt4se().s[115]++;l.setValidators([f.required]);}else{cov_1ahhyrt4se().b[40][1]++;cov_1ahhyrt4se().s[116]++;if(this.datapointExtraction.usesEnumeratedThreshold(t)){cov_1ahhyrt4se().b[41][0]++;let q=(cov_1ahhyrt4se().s[117]++,this.datapointExtraction.getEnumValues(t));cov_1ahhyrt4se().s[118]++;l.setValidators([f.required,this.enumThresholdValidator(q)]);let B=(cov_1ahhyrt4se().s[119]++,this.datapointExtraction.normalizeThresholdValue(t,String((cov_1ahhyrt4se().b[42][0]++,l.value)??(cov_1ahhyrt4se().b[42][1]++,""))));cov_1ahhyrt4se().s[120]++;(cov_1ahhyrt4se().b[43][0]++,B!==l.value)&&(cov_1ahhyrt4se().b[43][1]++,l.setValue(B,{emitEvent:!1}));}else{cov_1ahhyrt4se().b[41][1]++;cov_1ahhyrt4se().s[121]++;l.setValidators([f.required,f.pattern(/^[+-]?\d+([.]\d+)?$/)]);}}cov_1ahhyrt4se().s[122]++;(cov_1ahhyrt4se().b[44][0]++,o.value!==null)&&(cov_1ahhyrt4se().b[44][1]++,!h.includes(o.value))&&(cov_1ahhyrt4se().b[44][2]++,o.setValue(null,{emitEvent:!1})),o.updateValueAndValidity({emitEvent:!1}),l.updateValueAndValidity({emitEvent:!1});}resolveAllowedOperators(e,t,o){cov_1ahhyrt4se().f[46]++;cov_1ahhyrt4se().s[123]++;return t!==null?(cov_1ahhyrt4se().b[45][0]++,this.datapointExtraction.getAllowedOperators(t)):(cov_1ahhyrt4se().b[45][1]++,(cov_1ahhyrt4se().b[47][0]++,e==="edit")&&(cov_1ahhyrt4se().b[47][1]++,o!==null)?(cov_1ahhyrt4se().b[46][0]++,[o]):(cov_1ahhyrt4se().b[46][1]++,Object.values(x)));}operatorAllowedValidator(e){cov_1ahhyrt4se().f[47]++;cov_1ahhyrt4se().s[124]++;return t=>{cov_1ahhyrt4se().f[48]++;let o=(cov_1ahhyrt4se().s[125]++,t.value);cov_1ahhyrt4se().s[126]++;return(cov_1ahhyrt4se().b[49][0]++,o===null)||(cov_1ahhyrt4se().b[49][1]++,e.includes(o))?(cov_1ahhyrt4se().b[48][0]++,null):(cov_1ahhyrt4se().b[48][1]++,{unsupportedOperator:!0});};}enumThresholdValidator(e){cov_1ahhyrt4se().f[49]++;let t=(cov_1ahhyrt4se().s[127]++,new Set(e.map(o=>{cov_1ahhyrt4se().f[50]++;cov_1ahhyrt4se().s[128]++;return o.toLowerCase();})));cov_1ahhyrt4se().s[129]++;return o=>{cov_1ahhyrt4se().f[51]++;let l=(cov_1ahhyrt4se().s[130]++,String((cov_1ahhyrt4se().b[50][0]++,o.value)??(cov_1ahhyrt4se().b[50][1]++,"")).trim());cov_1ahhyrt4se().s[131]++;return(cov_1ahhyrt4se().b[52][0]++,l.length===0)||(cov_1ahhyrt4se().b[52][1]++,t.has(l.toLowerCase()))?(cov_1ahhyrt4se().b[51][0]++,null):(cov_1ahhyrt4se().b[51][1]++,{invalidEnumThreshold:!0});};}static ɵfac=(cov_1ahhyrt4se().s[132]++,function(t){cov_1ahhyrt4se().f[52]++;cov_1ahhyrt4se().s[133]++;return new((cov_1ahhyrt4se().b[53][0]++,t)||(cov_1ahhyrt4se().b[53][1]++,i))(O(P));});static ɵprov=(cov_1ahhyrt4se().s[134]++,E({token:i,factory:i.ɵfac,providedIn:"root"}));}cov_1ahhyrt4se().s[135]++;return i;})());var ae=(cov_1ahhyrt4se().s[136]++,(()=>{cov_1ahhyrt4se().f[53]++;class i{wardApi;apartmentApi;datapointExtraction;hasRequestedPlants=(cov_1ahhyrt4se().s[137]++,!1);constructor(e,t,o){cov_1ahhyrt4se().f[54]++;cov_1ahhyrt4se().s[138]++;this.wardApi=e,this.apartmentApi=t,this.datapointExtraction=o;}plants=(cov_1ahhyrt4se().s[139]++,v([]));plantsLoadError=(cov_1ahhyrt4se().s[140]++,v(null));devicesLoadError=(cov_1ahhyrt4se().s[141]++,v(null));isDevicesLoading=(cov_1ahhyrt4se().s[142]++,v(!1));ensurePlantsLoaded(e){cov_1ahhyrt4se().f[55]++;cov_1ahhyrt4se().s[143]++;return(cov_1ahhyrt4se().b[55][0]++,e==="edit")||(cov_1ahhyrt4se().b[55][1]++,this.plants().length>0)||(cov_1ahhyrt4se().b[55][2]++,this.hasRequestedPlants)?(cov_1ahhyrt4se().b[54][0]++,S(void 0)):(cov_1ahhyrt4se().b[54][1]++,this.hasRequestedPlants=!0,this.loadAllPlants().pipe(ee(t=>{cov_1ahhyrt4se().f[56]++;cov_1ahhyrt4se().s[144]++;this.plantsLoadError.set(null),this.plants.set(t);}),H(()=>{cov_1ahhyrt4se().f[57]++;}),N(()=>{cov_1ahhyrt4se().f[58]++;cov_1ahhyrt4se().s[145]++;return this.plants.set([]),this.plantsLoadError.set("Errore durante il caricamento degli impianti disponibili."),S(void 0);})));}resetDevicesLoadState(){cov_1ahhyrt4se().f[59]++;cov_1ahhyrt4se().s[146]++;this.devicesLoadError.set(null),this.isDevicesLoading.set(!1);}loadDeviceOptionsByPlant(e){cov_1ahhyrt4se().f[60]++;let t=(cov_1ahhyrt4se().s[147]++,e.trim());cov_1ahhyrt4se().s[148]++;return this.devicesLoadError.set(null),t.length===0?(cov_1ahhyrt4se().b[56][0]++,this.isDevicesLoading.set(!1),S([])):(cov_1ahhyrt4se().b[56][1]++,this.isDevicesLoading.set(!0),this.apartmentApi.loadApartmentViewForPlantId(t).pipe(H(o=>{cov_1ahhyrt4se().f[61]++;cov_1ahhyrt4se().s[149]++;return this.datapointExtraction.extractDeviceOptions(o);}),ee(()=>{cov_1ahhyrt4se().f[62]++;cov_1ahhyrt4se().s[150]++;this.isDevicesLoading.set(!1);}),N(()=>{cov_1ahhyrt4se().f[63]++;cov_1ahhyrt4se().s[151]++;return this.devicesLoadError.set("Errore durante il caricamento dei dispositivi."),this.isDevicesLoading.set(!1),S([]);})));}resolveDatapointForEdit(e,t){cov_1ahhyrt4se().f[64]++;let o=(cov_1ahhyrt4se().s[152]++,e.trim()),l=(cov_1ahhyrt4se().s[153]++,t.trim());cov_1ahhyrt4se().s[154]++;return(cov_1ahhyrt4se().b[58][0]++,o.length===0)||(cov_1ahhyrt4se().b[58][1]++,l.length===0)?(cov_1ahhyrt4se().b[57][0]++,S(null)):(cov_1ahhyrt4se().b[57][1]++,this.apartmentApi.getAllPlants().pipe(H(h=>{cov_1ahhyrt4se().f[65]++;cov_1ahhyrt4se().s[155]++;return this.datapointExtraction.findDatapointByDeviceAndDatapointId(h,o,l);}),N(()=>{cov_1ahhyrt4se().f[66]++;cov_1ahhyrt4se().s[156]++;return S(null);})));}loadAllPlants(){cov_1ahhyrt4se().f[67]++;cov_1ahhyrt4se().s[157]++;return Z({availablePlants:this.wardApi.getAvailablePlants().pipe(N(()=>{cov_1ahhyrt4se().f[68]++;cov_1ahhyrt4se().s[158]++;return S([]);})),wards:this.wardApi.getWards().pipe(N(()=>{cov_1ahhyrt4se().f[69]++;cov_1ahhyrt4se().s[159]++;return S([]);}))}).pipe(se(({availablePlants:e,wards:t})=>{cov_1ahhyrt4se().f[70]++;cov_1ahhyrt4se().s[160]++;if(t.length===0){cov_1ahhyrt4se().b[59][0]++;cov_1ahhyrt4se().s[161]++;return S(this.mergePlants(e,[]));}else{cov_1ahhyrt4se().b[59][1]++;}let o=(cov_1ahhyrt4se().s[162]++,t.map(l=>{cov_1ahhyrt4se().f[71]++;cov_1ahhyrt4se().s[163]++;return this.wardApi.getPlantsByWardId(l.id).pipe(N(()=>{cov_1ahhyrt4se().f[72]++;cov_1ahhyrt4se().s[164]++;return S([]);}));}));cov_1ahhyrt4se().s[165]++;return Z(o).pipe(H(l=>{cov_1ahhyrt4se().f[73]++;cov_1ahhyrt4se().s[166]++;return this.mergePlants(e,l.flat());}));}));}mergePlants(e,t){cov_1ahhyrt4se().f[74]++;let o=(cov_1ahhyrt4se().s[167]++,new Map());cov_1ahhyrt4se().s[168]++;for(let l of[...e,...t]){cov_1ahhyrt4se().s[169]++;o.set(l.id,l);}cov_1ahhyrt4se().s[170]++;return Array.from(o.values()).sort((l,h)=>{cov_1ahhyrt4se().f[75]++;cov_1ahhyrt4se().s[171]++;return l.name.localeCompare(h.name);});}static ɵfac=(cov_1ahhyrt4se().s[172]++,function(t){cov_1ahhyrt4se().f[76]++;cov_1ahhyrt4se().s[173]++;return new((cov_1ahhyrt4se().b[60][0]++,t)||(cov_1ahhyrt4se().b[60][1]++,i))(O(Fe),O(Oe),O(P));});static ɵprov=(cov_1ahhyrt4se().s[174]++,E({token:i,factory:i.ɵfac}));}cov_1ahhyrt4se().s[175]++;return i;})());var Re=(cov_1ahhyrt4se().s[176]++,(()=>{cov_1ahhyrt4se().f[77]++;class i{datapointExtraction;constructor(e){cov_1ahhyrt4se().f[78]++;cov_1ahhyrt4se().s[177]++;this.datapointExtraction=e;}applyModeState(e,t){cov_1ahhyrt4se().f[79]++;cov_1ahhyrt4se().s[178]++;if(t==="edit"){cov_1ahhyrt4se().b[61][0]++;cov_1ahhyrt4se().s[179]++;e.controls.name.disable({emitEvent:!1}),e.controls.plantId.clearValidators(),e.controls.plantId.disable({emitEvent:!1}),e.controls.deviceId.disable({emitEvent:!1}),e.controls.datapointId.clearValidators(),e.controls.datapointId.disable({emitEvent:!1}),e.controls.thresholdOperator.disable({emitEvent:!1}),e.controls.plantId.updateValueAndValidity({emitEvent:!1}),e.controls.datapointId.updateValueAndValidity({emitEvent:!1}),e.controls.thresholdOperator.updateValueAndValidity({emitEvent:!1});cov_1ahhyrt4se().s[180]++;return;}else{cov_1ahhyrt4se().b[61][1]++;}cov_1ahhyrt4se().s[181]++;if(e.controls.name.enable({emitEvent:!1}),e.controls.plantId.setValidators([f.required]),e.controls.datapointId.setValidators([f.required]),e.controls.plantId.enable({emitEvent:!1}),e.controls.thresholdOperator.enable({emitEvent:!1}),e.controls.plantId.updateValueAndValidity({emitEvent:!1}),e.controls.datapointId.updateValueAndValidity({emitEvent:!1}),e.controls.thresholdOperator.updateValueAndValidity({emitEvent:!1}),String((cov_1ahhyrt4se().b[63][0]++,e.controls.plantId.value)??(cov_1ahhyrt4se().b[63][1]++,"")).trim().length===0){cov_1ahhyrt4se().b[62][0]++;cov_1ahhyrt4se().s[182]++;e.controls.deviceId.disable({emitEvent:!1}),e.controls.datapointId.disable({emitEvent:!1});cov_1ahhyrt4se().s[183]++;return;}else{cov_1ahhyrt4se().b[62][1]++;}cov_1ahhyrt4se().s[184]++;if(e.controls.deviceId.enable({emitEvent:!1}),String((cov_1ahhyrt4se().b[65][0]++,e.controls.deviceId.value)??(cov_1ahhyrt4se().b[65][1]++,"")).trim().length===0){cov_1ahhyrt4se().b[64][0]++;cov_1ahhyrt4se().s[185]++;e.controls.datapointId.disable({emitEvent:!1});cov_1ahhyrt4se().s[186]++;return;}else{cov_1ahhyrt4se().b[64][1]++;}cov_1ahhyrt4se().s[187]++;e.controls.datapointId.enable({emitEvent:!1});}resetDatapointControl(e){cov_1ahhyrt4se().f[80]++;cov_1ahhyrt4se().s[188]++;e.controls.datapointId.setValue("",{emitEvent:!1}),e.controls.datapointId.updateValueAndValidity({emitEvent:!1});}resolveDeviceSelection(e,t){cov_1ahhyrt4se().f[81]++;let o=(cov_1ahhyrt4se().s[189]++,e.trim());cov_1ahhyrt4se().s[190]++;if(o.length===0){cov_1ahhyrt4se().b[66][0]++;cov_1ahhyrt4se().s[191]++;return{normalizedDeviceId:o,readableDatapoints:[],autoSelectedDatapointId:null};}else{cov_1ahhyrt4se().b[66][1]++;}let l=(cov_1ahhyrt4se().s[192]++,this.datapointExtraction.findReadableDatapoints(o,t));cov_1ahhyrt4se().s[193]++;return{normalizedDeviceId:o,readableDatapoints:l,autoSelectedDatapointId:l.length===1?(cov_1ahhyrt4se().b[67][0]++,l[0].id):(cov_1ahhyrt4se().b[67][1]++,null)};}resolveDatapointSelection(e,t){cov_1ahhyrt4se().f[82]++;let o=(cov_1ahhyrt4se().s[194]++,e.trim());cov_1ahhyrt4se().s[195]++;return{normalizedDatapointId:o,selectedDatapoint:this.datapointExtraction.findDatapointById(o,t)};}static ɵfac=(cov_1ahhyrt4se().s[196]++,function(t){cov_1ahhyrt4se().f[83]++;cov_1ahhyrt4se().s[197]++;return new((cov_1ahhyrt4se().b[68][0]++,t)||(cov_1ahhyrt4se().b[68][1]++,i))(O(P));});static ɵprov=(cov_1ahhyrt4se().s[198]++,E({token:i,factory:i.ɵfac,providedIn:"root"}));}cov_1ahhyrt4se().s[199]++;return i;})());cov_1ahhyrt4se().s[200]++;var re=(i,d)=>{cov_1ahhyrt4se().f[84]++;cov_1ahhyrt4se().s[201]++;return d.id;};function Be(i,d){cov_1ahhyrt4se().f[85]++;cov_1ahhyrt4se().s[202]++;(cov_1ahhyrt4se().b[69][0]++,i&1)&&(cov_1ahhyrt4se().b[69][1]++,r(0,"p",4),s(1,"Il nome della regola d'allarme \xE8 definito in creazione e non pu\xF2 essere modificato."),n());}function Ge(i,d){cov_1ahhyrt4se().f[86]++;cov_1ahhyrt4se().s[203]++;if((cov_1ahhyrt4se().b[71][0]++,i&1)&&(cov_1ahhyrt4se().b[71][1]++,r(0,"div",1)(1,"label",32),s(2,"Posizione:"),n(),r(3,"div"),I(4,"input",33),n()()),i&2){cov_1ahhyrt4se().b[70][0]++;let e=(cov_1ahhyrt4se().s[204]++,c());cov_1ahhyrt4se().s[205]++;a(4),u("value",e.editPosition());}else{cov_1ahhyrt4se().b[70][1]++;}}function Ue(i,d){cov_1ahhyrt4se().f[87]++;cov_1ahhyrt4se().s[206]++;if((cov_1ahhyrt4se().b[73][0]++,i&1)&&(cov_1ahhyrt4se().b[73][1]++,r(0,"option",16),s(1),n()),i&2){cov_1ahhyrt4se().b[72][0]++;let e=(cov_1ahhyrt4se().s[207]++,d.$implicit);cov_1ahhyrt4se().s[208]++;u("value",e.id),a(),g(e.name);}else{cov_1ahhyrt4se().b[72][1]++;}}function Qe(i,d){cov_1ahhyrt4se().f[88]++;cov_1ahhyrt4se().s[209]++;if((cov_1ahhyrt4se().b[75][0]++,i&1)&&(cov_1ahhyrt4se().b[75][1]++,r(0,"p",17),s(1),n()),i&2){cov_1ahhyrt4se().b[74][0]++;let e=(cov_1ahhyrt4se().s[210]++,c());cov_1ahhyrt4se().s[211]++;a(),g(e);}else{cov_1ahhyrt4se().b[74][1]++;}}function We(i,d){cov_1ahhyrt4se().f[89]++;cov_1ahhyrt4se().s[212]++;(cov_1ahhyrt4se().b[76][0]++,i&1)&&(cov_1ahhyrt4se().b[76][1]++,m(0,Qe,2,1,"p",17)),(cov_1ahhyrt4se().b[77][0]++,i&2)&&(cov_1ahhyrt4se().b[77][1]++,p(d?(cov_1ahhyrt4se().b[78][0]++,0):(cov_1ahhyrt4se().b[78][1]++,-1)));}function Je(i,d){cov_1ahhyrt4se().f[90]++;cov_1ahhyrt4se().s[213]++;(cov_1ahhyrt4se().b[79][0]++,i&1)&&(cov_1ahhyrt4se().b[79][1]++,r(0,"p",17),s(1,"L'impianto \xE8 obbligatorio."),n());}function Xe(i,d){cov_1ahhyrt4se().f[91]++;cov_1ahhyrt4se().s[214]++;if((cov_1ahhyrt4se().b[81][0]++,i&1)&&(cov_1ahhyrt4se().b[81][1]++,r(0,"div",1)(1,"label",34),s(2,"Impianto:"),n(),r(3,"div")(4,"select",35)(5,"option",36),s(6,"Seleziona impianto"),n(),V(7,Ue,2,2,"option",16,re),n(),m(9,We,1,1),m(10,Je,2,0,"p",17),n()()),i&2){cov_1ahhyrt4se().b[80][0]++;let e,t=(cov_1ahhyrt4se().s[215]++,c());cov_1ahhyrt4se().s[216]++;a(4),b("aria-invalid",(cov_1ahhyrt4se().b[82][0]++,t.form.controls.plantId.invalid)&&(cov_1ahhyrt4se().b[82][1]++,t.form.controls.plantId.touched)),a(3),w(t.plants()),a(2),p((e=t.plantsLoadError())?(cov_1ahhyrt4se().b[83][0]++,9):(cov_1ahhyrt4se().b[83][1]++,-1),e),a(),p((cov_1ahhyrt4se().b[85][0]++,t.form.controls.plantId.invalid)&&(cov_1ahhyrt4se().b[85][1]++,t.form.controls.plantId.touched)?(cov_1ahhyrt4se().b[84][0]++,10):(cov_1ahhyrt4se().b[84][1]++,-1));}else{cov_1ahhyrt4se().b[80][1]++;}}function Ye(i,d){cov_1ahhyrt4se().f[92]++;cov_1ahhyrt4se().s[217]++;(cov_1ahhyrt4se().b[86][0]++,i&1)&&(cov_1ahhyrt4se().b[86][1]++,r(0,"option",36),s(1,"Seleziona dispositivo"),n());}function Ke(i,d){cov_1ahhyrt4se().f[93]++;cov_1ahhyrt4se().s[218]++;if((cov_1ahhyrt4se().b[88][0]++,i&1)&&(cov_1ahhyrt4se().b[88][1]++,r(0,"option",16),s(1),n()),i&2){cov_1ahhyrt4se().b[87][0]++;let e=(cov_1ahhyrt4se().s[219]++,d.$implicit);cov_1ahhyrt4se().s[220]++;u("value",e.id),a(),g(e.label);}else{cov_1ahhyrt4se().b[87][1]++;}}function Ze(i,d){cov_1ahhyrt4se().f[94]++;cov_1ahhyrt4se().s[221]++;(cov_1ahhyrt4se().b[89][0]++,i&1)&&(cov_1ahhyrt4se().b[89][1]++,r(0,"p",4),s(1,"Seleziona prima l'impianto per visualizzare i dispositivi disponibili."),n());}function et(i,d){cov_1ahhyrt4se().f[95]++;cov_1ahhyrt4se().s[222]++;(cov_1ahhyrt4se().b[90][0]++,i&1)&&(cov_1ahhyrt4se().b[90][1]++,r(0,"p",4),s(1,"Caricamento dispositivi..."),n());}function tt(i,d){cov_1ahhyrt4se().f[96]++;cov_1ahhyrt4se().s[223]++;if((cov_1ahhyrt4se().b[92][0]++,i&1)&&(cov_1ahhyrt4se().b[92][1]++,r(0,"p",17),s(1),n()),i&2){cov_1ahhyrt4se().b[91][0]++;let e=(cov_1ahhyrt4se().s[224]++,c());cov_1ahhyrt4se().s[225]++;a(),g(e);}else{cov_1ahhyrt4se().b[91][1]++;}}function it(i,d){cov_1ahhyrt4se().f[97]++;cov_1ahhyrt4se().s[226]++;(cov_1ahhyrt4se().b[93][0]++,i&1)&&(cov_1ahhyrt4se().b[93][1]++,m(0,tt,2,1,"p",17)),(cov_1ahhyrt4se().b[94][0]++,i&2)&&(cov_1ahhyrt4se().b[94][1]++,p(d?(cov_1ahhyrt4se().b[95][0]++,0):(cov_1ahhyrt4se().b[95][1]++,-1)));}function ot(i,d){cov_1ahhyrt4se().f[98]++;cov_1ahhyrt4se().s[227]++;(cov_1ahhyrt4se().b[96][0]++,i&1)&&(cov_1ahhyrt4se().b[96][1]++,r(0,"p",17),s(1,"Il dispositivo \xE8 obbligatorio."),n());}function nt(i,d){cov_1ahhyrt4se().f[99]++;cov_1ahhyrt4se().s[228]++;if((cov_1ahhyrt4se().b[98][0]++,i&1)&&(cov_1ahhyrt4se().b[98][1]++,r(0,"option",16),s(1),n()),i&2){cov_1ahhyrt4se().b[97][0]++;let e=(cov_1ahhyrt4se().s[229]++,d.$implicit);cov_1ahhyrt4se().s[230]++;u("value",e.id),a(),g(e.name);}else{cov_1ahhyrt4se().b[97][1]++;}}function at(i,d){cov_1ahhyrt4se().f[100]++;cov_1ahhyrt4se().s[231]++;(cov_1ahhyrt4se().b[99][0]++,i&1)&&(cov_1ahhyrt4se().b[99][1]++,r(0,"p",4),s(1,"Seleziona prima un dispositivo per visualizzare i datapoint leggibili."),n());}function rt(i,d){cov_1ahhyrt4se().f[101]++;cov_1ahhyrt4se().s[232]++;(cov_1ahhyrt4se().b[100][0]++,i&1)&&(cov_1ahhyrt4se().b[100][1]++,r(0,"p",41),s(1,"Nessun datapoint leggibile disponibile per questo dispositivo."),n());}function lt(i,d){cov_1ahhyrt4se().f[102]++;cov_1ahhyrt4se().s[233]++;(cov_1ahhyrt4se().b[101][0]++,i&1)&&(cov_1ahhyrt4se().b[101][1]++,r(0,"p",17),s(1,"Il datapoint \xE8 obbligatorio."),n());}function dt(i,d){cov_1ahhyrt4se().f[103]++;cov_1ahhyrt4se().s[234]++;if((cov_1ahhyrt4se().b[103][0]++,i&1)&&(cov_1ahhyrt4se().b[103][1]++,r(0,"div",1)(1,"label",37),s(2,"Dispositivo:"),n(),r(3,"div")(4,"select",38),m(5,Ye,2,0,"option",36),V(6,Ke,2,2,"option",16,re),n(),m(8,Ze,2,0,"p",4),m(9,et,2,0,"p",4),m(10,it,1,1),m(11,ot,2,0,"p",17),n()(),r(12,"div",1)(13,"label",39),s(14,"Datapoint:"),n(),r(15,"div")(16,"select",40)(17,"option",36),s(18,"Seleziona datapoint"),n(),V(19,nt,2,2,"option",16,re),n(),m(21,at,2,0,"p",4),m(22,rt,2,0,"p",41),m(23,lt,2,0,"p",17),n()()),i&2){cov_1ahhyrt4se().b[102][0]++;let e,t=(cov_1ahhyrt4se().s[235]++,c());cov_1ahhyrt4se().s[236]++;a(4),b("aria-invalid",(cov_1ahhyrt4se().b[104][0]++,t.form.controls.deviceId.invalid)&&(cov_1ahhyrt4se().b[104][1]++,t.form.controls.deviceId.touched)),a(),p(t.isEditMode()?(cov_1ahhyrt4se().b[105][0]++,-1):(cov_1ahhyrt4se().b[105][1]++,5)),a(),w(t.deviceOptions()),a(2),p((cov_1ahhyrt4se().b[107][0]++,!t.isEditMode())&&(cov_1ahhyrt4se().b[107][1]++,t.form.controls.plantId.value.length===0)?(cov_1ahhyrt4se().b[106][0]++,8):(cov_1ahhyrt4se().b[106][1]++,-1)),a(),p(t.isDevicesLoading()?(cov_1ahhyrt4se().b[108][0]++,9):(cov_1ahhyrt4se().b[108][1]++,-1)),a(),p((e=t.devicesLoadError())?(cov_1ahhyrt4se().b[109][0]++,10):(cov_1ahhyrt4se().b[109][1]++,-1),e),a(),p((cov_1ahhyrt4se().b[111][0]++,t.form.controls.deviceId.invalid)&&(cov_1ahhyrt4se().b[111][1]++,t.form.controls.deviceId.touched)?(cov_1ahhyrt4se().b[110][0]++,11):(cov_1ahhyrt4se().b[110][1]++,-1)),a(5),b("aria-invalid",(cov_1ahhyrt4se().b[112][0]++,t.form.controls.datapointId.invalid)&&(cov_1ahhyrt4se().b[112][1]++,t.form.controls.datapointId.touched)),a(3),w(t.datapointOptions()),a(2),p(t.form.controls.deviceId.value.length===0?(cov_1ahhyrt4se().b[113][0]++,21):(cov_1ahhyrt4se().b[113][1]++,-1)),a(),p((cov_1ahhyrt4se().b[115][0]++,t.form.controls.deviceId.value.length>0)&&(cov_1ahhyrt4se().b[115][1]++,t.datapointOptions().length===0)?(cov_1ahhyrt4se().b[114][0]++,22):(cov_1ahhyrt4se().b[114][1]++,-1)),a(),p((cov_1ahhyrt4se().b[117][0]++,t.form.controls.datapointId.invalid)&&(cov_1ahhyrt4se().b[117][1]++,t.form.controls.datapointId.touched)?(cov_1ahhyrt4se().b[116][0]++,23):(cov_1ahhyrt4se().b[116][1]++,-1));}else{cov_1ahhyrt4se().b[102][1]++;}}function st(i,d){cov_1ahhyrt4se().f[104]++;cov_1ahhyrt4se().s[237]++;if((cov_1ahhyrt4se().b[119][0]++,i&1)&&(cov_1ahhyrt4se().b[119][1]++,r(0,"option",8),s(1),n()),i&2){cov_1ahhyrt4se().b[118][0]++;let e=(cov_1ahhyrt4se().s[238]++,d.$implicit);cov_1ahhyrt4se().s[239]++;u("ngValue",e),a(),g(e);}else{cov_1ahhyrt4se().b[118][1]++;}}function mt(i,d){cov_1ahhyrt4se().f[105]++;cov_1ahhyrt4se().s[240]++;(cov_1ahhyrt4se().b[120][0]++,i&1)&&(cov_1ahhyrt4se().b[120][1]++,I(0,"app-alarm-priority-indicator",9)),(cov_1ahhyrt4se().b[121][0]++,i&2)&&(cov_1ahhyrt4se().b[121][1]++,u("priority",d));}function pt(i,d){cov_1ahhyrt4se().f[106]++;cov_1ahhyrt4se().s[241]++;(cov_1ahhyrt4se().b[122][0]++,i&1)&&(cov_1ahhyrt4se().b[122][1]++,r(0,"p",10),s(1,"La priorit\xE0 \xE8 obbligatoria."),n());}function ct(i,d){cov_1ahhyrt4se().f[107]++;cov_1ahhyrt4se().s[242]++;if((cov_1ahhyrt4se().b[124][0]++,i&1)&&(cov_1ahhyrt4se().b[124][1]++,I(0,"input",42),r(1,"p",4),s(2,"L'operatore \xE8 definito in creazione e non pu\xF2 essere modificato."),n()),i&2){cov_1ahhyrt4se().b[123][0]++;let e=(cov_1ahhyrt4se().s[243]++,c());cov_1ahhyrt4se().s[244]++;u("value",(cov_1ahhyrt4se().b[125][0]++,e.form.controls.thresholdOperator.value)??(cov_1ahhyrt4se().b[125][1]++,"-"));}else{cov_1ahhyrt4se().b[123][1]++;}}function ut(i,d){cov_1ahhyrt4se().f[108]++;cov_1ahhyrt4se().s[245]++;if((cov_1ahhyrt4se().b[127][0]++,i&1)&&(cov_1ahhyrt4se().b[127][1]++,r(0,"option",8),s(1),n()),i&2){cov_1ahhyrt4se().b[126][0]++;let e=(cov_1ahhyrt4se().s[246]++,d.$implicit);cov_1ahhyrt4se().s[247]++;u("ngValue",e),a(),g(e);}else{cov_1ahhyrt4se().b[126][1]++;}}function ft(i,d){cov_1ahhyrt4se().f[109]++;cov_1ahhyrt4se().s[248]++;if((cov_1ahhyrt4se().b[129][0]++,i&1)&&(cov_1ahhyrt4se().b[129][1]++,r(0,"select",12)(1,"option",8),s(2,"Operatore"),n(),V(3,ut,2,2,"option",8,Q),n()),i&2){cov_1ahhyrt4se().b[128][0]++;let e=(cov_1ahhyrt4se().s[249]++,c());cov_1ahhyrt4se().s[250]++;b("aria-invalid",(cov_1ahhyrt4se().b[130][0]++,e.form.controls.thresholdOperator.invalid)&&(cov_1ahhyrt4se().b[130][1]++,e.form.controls.thresholdOperator.touched)),a(),u("ngValue",null),a(2),w(e.thresholdOperatorOptions());}else{cov_1ahhyrt4se().b[128][1]++;}}function ht(i,d){cov_1ahhyrt4se().f[110]++;cov_1ahhyrt4se().s[251]++;(cov_1ahhyrt4se().b[131][0]++,i&1)&&(cov_1ahhyrt4se().b[131][1]++,r(0,"p",10),s(1,"L'operatore di soglia \xE8 obbligatorio."),n());}function gt(i,d){cov_1ahhyrt4se().f[111]++;cov_1ahhyrt4se().s[252]++;(cov_1ahhyrt4se().b[132][0]++,i&1)&&(cov_1ahhyrt4se().b[132][1]++,r(0,"p",10),s(1,"Operatore non valido per il datapoint selezionato."),n());}function vt(i,d){cov_1ahhyrt4se().f[112]++;cov_1ahhyrt4se().s[253]++;if((cov_1ahhyrt4se().b[134][0]++,i&1)&&(cov_1ahhyrt4se().b[134][1]++,I(0,"option",16)),i&2){cov_1ahhyrt4se().b[133][0]++;let e=(cov_1ahhyrt4se().s[254]++,d.$implicit);cov_1ahhyrt4se().s[255]++;u("value",e);}else{cov_1ahhyrt4se().b[133][1]++;}}function bt(i,d){cov_1ahhyrt4se().f[113]++;cov_1ahhyrt4se().s[256]++;if((cov_1ahhyrt4se().b[136][0]++,i&1)&&(cov_1ahhyrt4se().b[136][1]++,r(0,"p",4),s(1),n()),i&2){cov_1ahhyrt4se().b[135][0]++;let e=(cov_1ahhyrt4se().s[257]++,c());cov_1ahhyrt4se().s[258]++;a(),g(e.thresholdValueHelpText());}else{cov_1ahhyrt4se().b[135][1]++;}}function Ct(i,d){cov_1ahhyrt4se().f[114]++;cov_1ahhyrt4se().s[259]++;(cov_1ahhyrt4se().b[137][0]++,i&1)&&(cov_1ahhyrt4se().b[137][1]++,r(0,"p",17),s(1,"La soglia \xE8 obbligatoria."),n());}function _t(i,d){cov_1ahhyrt4se().f[115]++;cov_1ahhyrt4se().s[260]++;(cov_1ahhyrt4se().b[138][0]++,i&1)&&(cov_1ahhyrt4se().b[138][1]++,r(0,"p",17),s(1,"Valore non previsto dall'enum del datapoint selezionato."),n());}function xt(i,d){cov_1ahhyrt4se().f[116]++;cov_1ahhyrt4se().s[261]++;(cov_1ahhyrt4se().b[139][0]++,i&1)&&(cov_1ahhyrt4se().b[139][1]++,r(0,"p",17),s(1,"Inserisci un valore numerico valido."),n());}function Et(i,d){cov_1ahhyrt4se().f[117]++;cov_1ahhyrt4se().s[262]++;(cov_1ahhyrt4se().b[140][0]++,i&1)&&(cov_1ahhyrt4se().b[140][1]++,r(0,"p",10),s(1,"L'orario di attivazione \xE8 obbligatorio. "),n());}function Dt(i,d){cov_1ahhyrt4se().f[118]++;cov_1ahhyrt4se().s[263]++;(cov_1ahhyrt4se().b[141][0]++,i&1)&&(cov_1ahhyrt4se().b[141][1]++,r(0,"p",10),s(1,"L'orario di disattivazione \xE8 obbligatorio. "),n());}var ke=(cov_1ahhyrt4se().s[264]++,(()=>{cov_1ahhyrt4se().f[119]++;class i{mode=(cov_1ahhyrt4se().s[265]++,T("create"));initialRule=(cov_1ahhyrt4se().s[266]++,T(null));submittedForm=(cov_1ahhyrt4se().s[267]++,R());cancelled=(cov_1ahhyrt4se().s[268]++,R());fb=(cov_1ahhyrt4se().s[269]++,C(ye));formMapper=(cov_1ahhyrt4se().s[270]++,C(Ne));formState=(cov_1ahhyrt4se().s[271]++,C(ae));datapointExtraction=(cov_1ahhyrt4se().s[272]++,C(P));validationHelper=(cov_1ahhyrt4se().s[273]++,C(ze));fieldOrchestrator=(cov_1ahhyrt4se().s[274]++,C(Re));destroyRef=(cov_1ahhyrt4se().s[275]++,C(me));editDatapointLookupVersion=(cov_1ahhyrt4se().s[276]++,0);form=(cov_1ahhyrt4se().s[277]++,this.buildForm());isEditMode=(cov_1ahhyrt4se().s[278]++,_(()=>{cov_1ahhyrt4se().f[120]++;cov_1ahhyrt4se().s[279]++;return this.mode()==="edit";}));plants=(cov_1ahhyrt4se().s[280]++,this.formState.plants);deviceOptions=(cov_1ahhyrt4se().s[281]++,v([]));datapointOptions=(cov_1ahhyrt4se().s[282]++,v([]));plantsLoadError=(cov_1ahhyrt4se().s[283]++,this.formState.plantsLoadError);devicesLoadError=(cov_1ahhyrt4se().s[284]++,this.formState.devicesLoadError);isDevicesLoading=(cov_1ahhyrt4se().s[285]++,this.formState.isDevicesLoading);selectedDeviceId=(cov_1ahhyrt4se().s[286]++,v(""));selectedDatapointId=(cov_1ahhyrt4se().s[287]++,v(""));selectedDatapoint=(cov_1ahhyrt4se().s[288]++,v(null));isPlantSelectionVisible=(cov_1ahhyrt4se().s[289]++,_(()=>{cov_1ahhyrt4se().f[121]++;cov_1ahhyrt4se().s[290]++;return!this.isEditMode();}));editPosition=(cov_1ahhyrt4se().s[291]++,_(()=>{cov_1ahhyrt4se().f[122]++;cov_1ahhyrt4se().s[292]++;if(!this.isEditMode()){cov_1ahhyrt4se().b[142][0]++;cov_1ahhyrt4se().s[293]++;return"-";}else{cov_1ahhyrt4se().b[142][1]++;}let e=(cov_1ahhyrt4se().s[294]++,(cov_1ahhyrt4se().b[143][0]++,this.initialRule()?.position)??(cov_1ahhyrt4se().b[143][1]++,""));cov_1ahhyrt4se().s[295]++;return this.toPositionLabel(e);}));priorityOptions=(cov_1ahhyrt4se().s[296]++,Object.values(ve).filter(e=>{cov_1ahhyrt4se().f[123]++;cov_1ahhyrt4se().s[297]++;return typeof e=="number";}));thresholdOperatorOptions=(cov_1ahhyrt4se().s[298]++,_(()=>{cov_1ahhyrt4se().f[124]++;cov_1ahhyrt4se().s[299]++;if(!this.isEditMode()){cov_1ahhyrt4se().b[144][0]++;cov_1ahhyrt4se().s[300]++;return this.datapointExtraction.getAllowedOperators(this.selectedDatapoint());}else{cov_1ahhyrt4se().b[144][1]++;}let e=(cov_1ahhyrt4se().s[301]++,this.selectedDatapoint());cov_1ahhyrt4se().s[302]++;if(e!==null){cov_1ahhyrt4se().b[145][0]++;cov_1ahhyrt4se().s[303]++;return this.datapointExtraction.getAllowedOperators(e);}else{cov_1ahhyrt4se().b[145][1]++;}let t=(cov_1ahhyrt4se().s[304]++,this.form.controls.thresholdOperator.value);cov_1ahhyrt4se().s[305]++;return t===null?(cov_1ahhyrt4se().b[146][0]++,Object.values(x)):(cov_1ahhyrt4se().b[146][1]++,[t]);}));thresholdValueEnumHints=(cov_1ahhyrt4se().s[306]++,_(()=>{cov_1ahhyrt4se().f[125]++;cov_1ahhyrt4se().s[307]++;return this.datapointExtraction.getEnumValues(this.selectedDatapoint());}));thresholdValueHelpText=(cov_1ahhyrt4se().s[308]++,_(()=>{cov_1ahhyrt4se().f[126]++;cov_1ahhyrt4se().s[309]++;return this.isEditMode()?(cov_1ahhyrt4se().b[147][0]++,this.thresholdValueEnumHints().length>0?(cov_1ahhyrt4se().b[148][0]++,"Inserisci uno dei valori previsti dal datapoint associato alla regola."):(cov_1ahhyrt4se().b[148][1]++,"Inserisci un valore numerico (es. 10, 10.5, -3).")):(cov_1ahhyrt4se().b[147][1]++,this.selectedDeviceId().length===0?(cov_1ahhyrt4se().b[149][0]++,"Seleziona prima il dispositivo."):(cov_1ahhyrt4se().b[149][1]++,this.selectedDatapointId().length===0?(cov_1ahhyrt4se().b[150][0]++,"Seleziona un datapoint leggibile per impostare la soglia."):(cov_1ahhyrt4se().b[150][1]++,this.thresholdValueEnumHints().length>0?(cov_1ahhyrt4se().b[151][0]++,"Inserisci uno dei valori previsti dal datapoint selezionato."):(cov_1ahhyrt4se().b[151][1]++,"Inserisci un valore numerico (es. 10, 10.5, -3)."))));}));constructor(){cov_1ahhyrt4se().f[127]++;cov_1ahhyrt4se().s[310]++;pe(()=>{cov_1ahhyrt4se().f[128]++;let e=(cov_1ahhyrt4se().s[311]++,this.initialRule());cov_1ahhyrt4se().s[312]++;if(e){cov_1ahhyrt4se().b[152][0]++;let t=(cov_1ahhyrt4se().s[313]++,++this.editDatapointLookupVersion);cov_1ahhyrt4se().s[314]++;this.form.reset(this.formMapper.toFormValue(e)),this.deviceOptions.set([{id:e.deviceId,label:e.deviceId,datapoints:[]}]),this.datapointOptions.set([]),this.selectedDeviceId.set(e.deviceId),this.selectedDatapointId.set((cov_1ahhyrt4se().b[153][0]++,e.datapointId)??(cov_1ahhyrt4se().b[153][1]++,"")),this.selectedDatapoint.set(null),this.applyModeState(),this.applyThresholdConstraints(null),this.loadEditDatapointMetadata(e.deviceId,(cov_1ahhyrt4se().b[154][0]++,e.datapointId)??(cov_1ahhyrt4se().b[154][1]++,""),t);cov_1ahhyrt4se().s[315]++;return;}else{cov_1ahhyrt4se().b[152][1]++;}cov_1ahhyrt4se().s[316]++;this.editDatapointLookupVersion+=1,this.form.reset(this.createEmptyFormValue()),this.deviceOptions.set([]),this.datapointOptions.set([]),this.selectedDeviceId.set(""),this.selectedDatapointId.set(""),this.selectedDatapoint.set(null),this.applyModeState(),this.applyThresholdConstraints(null),this.ensurePlantsLoaded();}),this.form.controls.plantId.valueChanges.pipe(k(this.destroyRef)).subscribe(e=>{cov_1ahhyrt4se().f[129]++;cov_1ahhyrt4se().s[317]++;(cov_1ahhyrt4se().b[155][0]++,this.mode()!=="edit")&&(cov_1ahhyrt4se().b[155][1]++,this.onPlantChanged(e));}),this.form.controls.deviceId.valueChanges.pipe(k(this.destroyRef)).subscribe(e=>{cov_1ahhyrt4se().f[130]++;cov_1ahhyrt4se().s[318]++;(cov_1ahhyrt4se().b[156][0]++,this.mode()!=="edit")&&(cov_1ahhyrt4se().b[156][1]++,this.onDeviceChanged(e));}),this.form.controls.datapointId.valueChanges.pipe(k(this.destroyRef)).subscribe(e=>{cov_1ahhyrt4se().f[131]++;cov_1ahhyrt4se().s[319]++;(cov_1ahhyrt4se().b[157][0]++,this.mode()!=="edit")&&(cov_1ahhyrt4se().b[157][1]++,this.onDatapointChanged(e));});}buildForm(){cov_1ahhyrt4se().f[132]++;cov_1ahhyrt4se().s[320]++;return this.fb.nonNullable.group({name:[""],plantId:[""],deviceId:["",[f.required]],datapointId:[""],priority:[null,[f.required]],thresholdOperator:[null,[f.required]],thresholdValue:["",[f.required]],armingTime:["",[f.required,f.pattern(/^([01]\d|2[0-3]):([0-5]\d)$/)]],dearmingTime:["",[f.required,f.pattern(/^([01]\d|2[0-3]):([0-5]\d)$/)]],enabled:[!0]});}createEmptyFormValue(){cov_1ahhyrt4se().f[133]++;cov_1ahhyrt4se().s[321]++;return{name:"",plantId:"",deviceId:"",datapointId:"",priority:null,thresholdOperator:null,thresholdValue:"",armingTime:"",dearmingTime:"",enabled:!0};}onSubmit(){cov_1ahhyrt4se().f[134]++;cov_1ahhyrt4se().s[322]++;if((cov_1ahhyrt4se().b[159][0]++,this.mode()==="create")&&(cov_1ahhyrt4se().b[159][1]++,this.selectedDatapoint()!==null)){cov_1ahhyrt4se().b[158][0]++;let o=(cov_1ahhyrt4se().s[323]++,this.datapointExtraction.normalizeThresholdValue(this.selectedDatapoint(),this.form.controls.thresholdValue.value));cov_1ahhyrt4se().s[324]++;this.form.controls.thresholdValue.setValue(o,{emitEvent:!1}),this.form.controls.thresholdValue.updateValueAndValidity({emitEvent:!1});}else{cov_1ahhyrt4se().b[158][1]++;}cov_1ahhyrt4se().s[325]++;if(this.form.invalid){cov_1ahhyrt4se().b[160][0]++;cov_1ahhyrt4se().s[326]++;this.form.markAllAsTouched();cov_1ahhyrt4se().s[327]++;return;}else{cov_1ahhyrt4se().b[160][1]++;}let e=(cov_1ahhyrt4se().s[328]++,this.form.getRawValue()),t=(cov_1ahhyrt4se().s[329]++,this.initialRule());cov_1ahhyrt4se().s[330]++;if((cov_1ahhyrt4se().b[162][0]++,this.mode()==="edit")&&(cov_1ahhyrt4se().b[162][1]++,t)){cov_1ahhyrt4se().b[161][0]++;cov_1ahhyrt4se().s[331]++;this.submittedForm.emit(U(G({},e),{name:t.name}));cov_1ahhyrt4se().s[332]++;return;}else{cov_1ahhyrt4se().b[161][1]++;}cov_1ahhyrt4se().s[333]++;this.submittedForm.emit(e);}applyModeState(){cov_1ahhyrt4se().f[135]++;cov_1ahhyrt4se().s[334]++;this.fieldOrchestrator.applyModeState(this.form,this.mode());}ensurePlantsLoaded(){cov_1ahhyrt4se().f[136]++;cov_1ahhyrt4se().s[335]++;this.formState.ensurePlantsLoaded(this.mode()).pipe(k(this.destroyRef)).subscribe();}onPlantChanged(e){cov_1ahhyrt4se().f[137]++;cov_1ahhyrt4se().s[336]++;if(this.formState.resetDevicesLoadState(),this.deviceOptions.set([]),this.form.controls.deviceId.setValue("",{emitEvent:!1}),this.onDeviceChanged(""),e.trim().length===0){cov_1ahhyrt4se().b[163][0]++;cov_1ahhyrt4se().s[337]++;this.form.controls.deviceId.disable({emitEvent:!1});cov_1ahhyrt4se().s[338]++;return;}else{cov_1ahhyrt4se().b[163][1]++;}cov_1ahhyrt4se().s[339]++;this.form.controls.deviceId.disable({emitEvent:!1}),this.formState.loadDeviceOptionsByPlant(e).pipe(k(this.destroyRef)).subscribe(t=>{cov_1ahhyrt4se().f[138]++;cov_1ahhyrt4se().s[340]++;this.deviceOptions.set(t),t.length===0?(cov_1ahhyrt4se().b[164][0]++,this.form.controls.deviceId.disable({emitEvent:!1})):(cov_1ahhyrt4se().b[164][1]++,this.form.controls.deviceId.enable({emitEvent:!1}));});}onDeviceChanged(e){cov_1ahhyrt4se().f[139]++;let t=(cov_1ahhyrt4se().s[341]++,this.fieldOrchestrator.resolveDeviceSelection(e,this.deviceOptions()));cov_1ahhyrt4se().s[342]++;if(this.selectedDeviceId.set(t.normalizedDeviceId),this.datapointOptions.set([]),this.selectedDatapoint.set(null),this.selectedDatapointId.set(""),this.fieldOrchestrator.resetDatapointControl(this.form),this.applyThresholdConstraints(null),t.normalizedDeviceId.length===0){cov_1ahhyrt4se().b[165][0]++;cov_1ahhyrt4se().s[343]++;this.form.controls.datapointId.disable({emitEvent:!1});cov_1ahhyrt4se().s[344]++;return;}else{cov_1ahhyrt4se().b[165][1]++;}cov_1ahhyrt4se().s[345]++;this.datapointOptions.set(t.readableDatapoints),this.form.controls.datapointId.enable({emitEvent:!1}),(cov_1ahhyrt4se().b[166][0]++,t.autoSelectedDatapointId!==null)&&(cov_1ahhyrt4se().b[166][1]++,this.form.controls.datapointId.setValue(t.autoSelectedDatapointId,{emitEvent:!1}),this.onDatapointChanged(t.autoSelectedDatapointId));}onDatapointChanged(e){cov_1ahhyrt4se().f[140]++;let t=(cov_1ahhyrt4se().s[346]++,this.fieldOrchestrator.resolveDatapointSelection(e,this.datapointOptions()));cov_1ahhyrt4se().s[347]++;this.selectedDatapointId.set(t.normalizedDatapointId),this.selectedDatapoint.set(t.selectedDatapoint),this.applyThresholdConstraints(t.selectedDatapoint);}applyThresholdConstraints(e){cov_1ahhyrt4se().f[141]++;cov_1ahhyrt4se().s[348]++;this.validationHelper.applyThresholdConstraints({mode:this.mode(),datapoint:e,thresholdOperatorControl:this.form.controls.thresholdOperator,thresholdValueControl:this.form.controls.thresholdValue});}loadEditDatapointMetadata(e,t,o){cov_1ahhyrt4se().f[142]++;cov_1ahhyrt4se().s[349]++;if(this.mode()!=="edit"){cov_1ahhyrt4se().b[167][0]++;cov_1ahhyrt4se().s[350]++;return;}else{cov_1ahhyrt4se().b[167][1]++;}let l=(cov_1ahhyrt4se().s[351]++,t.trim());cov_1ahhyrt4se().s[352]++;if(l.length===0){cov_1ahhyrt4se().b[168][0]++;cov_1ahhyrt4se().s[353]++;if((cov_1ahhyrt4se().b[170][0]++,o!==this.editDatapointLookupVersion)||(cov_1ahhyrt4se().b[170][1]++,this.mode()!=="edit")){cov_1ahhyrt4se().b[169][0]++;cov_1ahhyrt4se().s[354]++;return;}else{cov_1ahhyrt4se().b[169][1]++;}cov_1ahhyrt4se().s[355]++;this.selectedDatapoint.set(null),this.applyThresholdConstraints(null);cov_1ahhyrt4se().s[356]++;return;}else{cov_1ahhyrt4se().b[168][1]++;}cov_1ahhyrt4se().s[357]++;this.formState.resolveDatapointForEdit(e,l).pipe(k(this.destroyRef)).subscribe(h=>{cov_1ahhyrt4se().f[143]++;cov_1ahhyrt4se().s[358]++;(cov_1ahhyrt4se().b[171][0]++,o!==this.editDatapointLookupVersion)||(cov_1ahhyrt4se().b[171][1]++,this.mode()!=="edit")||(cov_1ahhyrt4se().b[171][2]++,this.selectedDatapoint.set(h),this.applyThresholdConstraints(h));});}toPositionLabel(e){cov_1ahhyrt4se().f[144]++;let t=(cov_1ahhyrt4se().s[359]++,e.replaceAll(/\s*-\s*/g," - ").trim());cov_1ahhyrt4se().s[360]++;return t.length===0?(cov_1ahhyrt4se().b[172][0]++,"-"):(cov_1ahhyrt4se().b[172][1]++,t);}onCancel(){cov_1ahhyrt4se().f[145]++;cov_1ahhyrt4se().s[361]++;this.cancelled.emit();}static ɵfac=(cov_1ahhyrt4se().s[362]++,function(t){cov_1ahhyrt4se().f[146]++;cov_1ahhyrt4se().s[363]++;return new((cov_1ahhyrt4se().b[173][0]++,t)||(cov_1ahhyrt4se().b[173][1]++,i))();});static ɵcmp=(cov_1ahhyrt4se().s[364]++,L({type:i,selectors:[["app-alarm-config-form"]],inputs:{mode:[1,"mode"],initialRule:[1,"initialRule"]},outputs:{submittedForm:"submittedForm",cancelled:"cancelled"},features:[ge([ae])],decls:62,vars:23,consts:[["novalidate","",1,"space-y-3","text-sm","text-slate-900",3,"ngSubmit","formGroup"],[1,"grid","grid-cols-1","items-center","gap-2","md:grid-cols-[180px_1fr]"],["for","name",1,"font-semibold","text-slate-700"],["id","name","type","text","formControlName","name",1,"h-8","w-full","rounded-md","border","border-slate-400","bg-white","px-2","text-sm","focus-visible:outline-2","focus-visible:outline-offset-1","focus-visible:outline-slate-600","disabled:cursor-not-allowed","disabled:bg-slate-100","disabled:text-slate-500"],[1,"mt-1","text-xs","text-slate-600"],["for","priority",1,"font-semibold","text-slate-700"],[1,"flex","items-center","gap-2"],["id","priority","formControlName","priority",1,"h-8","rounded-md","border","border-slate-400","bg-white","px-2","text-sm","focus-visible:outline-2","focus-visible:outline-offset-1","focus-visible:outline-slate-600"],[3,"ngValue"],[3,"priority"],["role","alert",1,"text-xs","font-medium","text-rose-700"],["for","thresholdOperator",1,"font-semibold","text-slate-700"],["id","thresholdOperator","formControlName","thresholdOperator",1,"h-8","rounded-md","border","border-slate-400","bg-white","px-2","text-sm","focus-visible:outline-2","focus-visible:outline-offset-1","focus-visible:outline-slate-600"],["for","thresholdValue",1,"font-semibold","text-slate-700"],["id","thresholdValue","type","text","inputmode","decimal","formControlName","thresholdValue",1,"h-8","w-full","rounded-md","border","border-slate-400","bg-white","px-2","text-sm","focus-visible:outline-2","focus-visible:outline-offset-1","focus-visible:outline-slate-600"],["id","thresholdEnumHints"],[3,"value"],["role","alert",1,"mt-1","text-xs","font-medium","text-rose-700"],[1,"grid","grid-cols-1","gap-2","md:grid-cols-[180px_1fr]"],[1,"pt-1"],[1,"font-semibold","text-slate-700"],[1,"mt-0.5","text-xs","text-slate-500"],[1,"rounded-2xl","border","border-slate-200","bg-slate-50/80","p-4","shadow-sm","shadow-slate-200/60","backdrop-blur-sm"],[1,"grid","grid-cols-1","gap-4","md:grid-cols-2"],[1,"flex","min-w-0","flex-col","gap-1.5"],["for","armingTime",1,"font-semibold","text-slate-700"],["id","armingTime","type","time","formControlName","armingTime",1,"h-11","w-full","rounded-xl","border","border-slate-300","bg-white","px-3","py-2","font-mono","text-base","tracking-wide","text-slate-900","shadow-sm","transition","focus-visible:border-slate-500","focus-visible:outline-none","focus-visible:ring-4","focus-visible:ring-slate-500/10","disabled:cursor-not-allowed","disabled:bg-slate-100","disabled:text-slate-500"],["for","dearmingTime",1,"font-semibold","text-slate-700"],["id","dearmingTime","type","time","formControlName","dearmingTime",1,"h-11","w-full","rounded-xl","border","border-slate-300","bg-white","px-3","py-2","font-mono","text-base","tracking-wide","text-slate-900","shadow-sm","transition","focus-visible:border-slate-500","focus-visible:outline-none","focus-visible:ring-4","focus-visible:ring-slate-500/10","disabled:cursor-not-allowed","disabled:bg-slate-100","disabled:text-slate-500"],[1,"mt-4","flex","items-center","justify-end","gap-2","border-t","border-slate-300","pt-3"],["label","ANNULLA","tone","neutral",3,"pressed"],["tone","primary",3,"pressed","label"],["for","position",1,"font-semibold","text-slate-700"],["id","position","type","text","readonly","",1,"h-8","w-full","rounded-md","border","border-slate-300","bg-slate-100","px-2","text-sm","text-slate-700",3,"value"],["for","plantId",1,"font-semibold","text-slate-700"],["id","plantId","formControlName","plantId",1,"h-8","w-full","rounded-md","border","border-slate-400","bg-white","px-2","text-sm","focus-visible:outline-2","focus-visible:outline-offset-1","focus-visible:outline-slate-600"],["value",""],["for","deviceId",1,"font-semibold","text-slate-700"],["id","deviceId","formControlName","deviceId",1,"h-8","w-full","rounded-md","border","border-slate-400","bg-white","px-2","text-sm","focus-visible:outline-2","focus-visible:outline-offset-1","focus-visible:outline-slate-600","disabled:cursor-not-allowed","disabled:bg-slate-100","disabled:text-slate-500"],["for","datapointId",1,"font-semibold","text-slate-700"],["id","datapointId","formControlName","datapointId",1,"h-8","w-full","rounded-md","border","border-slate-400","bg-white","px-2","text-sm","focus-visible:outline-2","focus-visible:outline-offset-1","focus-visible:outline-slate-600","disabled:cursor-not-allowed","disabled:bg-slate-100","disabled:text-slate-500"],[1,"mt-1","text-xs","font-medium","text-amber-700"],["id","thresholdOperatorReadonly","type","text","readonly","",1,"h-8","w-full","rounded-md","border","border-slate-300","bg-slate-100","px-2","text-sm","text-slate-700",3,"value"]],template:function(t,o){cov_1ahhyrt4se().f[147]++;cov_1ahhyrt4se().s[365]++;if((cov_1ahhyrt4se().b[175][0]++,t&1)&&(cov_1ahhyrt4se().b[175][1]++,r(0,"form",0),D("ngSubmit",function(){cov_1ahhyrt4se().f[148]++;cov_1ahhyrt4se().s[366]++;return o.onSubmit();}),r(1,"div",1)(2,"label",2),s(3,"Nome:"),n(),r(4,"div"),I(5,"input",3),m(6,Be,2,0,"p",4),n()(),m(7,Ge,5,1,"div",1),m(8,Xe,11,3,"div",1),m(9,dt,24,10),r(10,"div",1)(11,"label",5),s(12,"Priorit\xE0:"),n(),r(13,"div",6)(14,"select",7)(15,"option",8),s(16,"Seleziona"),n(),V(17,st,2,2,"option",8,Q),n(),m(19,mt,1,1,"app-alarm-priority-indicator",9),n()(),m(20,pt,2,0,"p",10),r(21,"div",1)(22,"label",11),s(23,"Attiva se il valore \xE8:"),n(),r(24,"div"),m(25,ct,3,1)(26,ft,5,2,"select",12),n()(),m(27,ht,2,0,"p",10),m(28,gt,2,0,"p",10),r(29,"div",1)(30,"label",13),s(31,"Valore soglia:"),n(),r(32,"div"),I(33,"input",14),r(34,"datalist",15),V(35,vt,1,1,"option",16,Q),n(),m(37,bt,2,1,"p",4),m(38,Ct,2,0,"p",17),m(39,_t,2,0,"p",17),m(40,xt,2,0,"p",17),n()(),r(41,"div",18)(42,"div",19)(43,"p",20),s(44,"Orari:"),n(),r(45,"p",21),s(46,"Inserisci l'intervallo giornaliero in formato 24 ore."),n()(),r(47,"div",22)(48,"div",23)(49,"div",24)(50,"label",25),s(51,"Orario attivazione"),n(),I(52,"input",26),m(53,Et,2,0,"p",10),n(),r(54,"div",24)(55,"label",27),s(56,"Orario disattivazione"),n(),I(57,"input",28),m(58,Dt,2,0,"p",10),n()()()(),r(59,"div",29)(60,"app-alarm-action-button",30),D("pressed",function(){cov_1ahhyrt4se().f[149]++;cov_1ahhyrt4se().s[367]++;return o.onCancel();}),n(),r(61,"app-alarm-action-button",31),D("pressed",function(){cov_1ahhyrt4se().f[150]++;cov_1ahhyrt4se().s[368]++;return o.onSubmit();}),n()()()),t&2){cov_1ahhyrt4se().b[174][0]++;let l;cov_1ahhyrt4se().s[369]++;u("formGroup",o.form),a(6),p(o.isEditMode()?(cov_1ahhyrt4se().b[176][0]++,6):(cov_1ahhyrt4se().b[176][1]++,-1)),a(),p(o.isEditMode()?(cov_1ahhyrt4se().b[177][0]++,7):(cov_1ahhyrt4se().b[177][1]++,-1)),a(),p(o.isPlantSelectionVisible()?(cov_1ahhyrt4se().b[178][0]++,8):(cov_1ahhyrt4se().b[178][1]++,-1)),a(),p(o.isEditMode()?(cov_1ahhyrt4se().b[179][0]++,-1):(cov_1ahhyrt4se().b[179][1]++,9)),a(5),b("aria-invalid",(cov_1ahhyrt4se().b[180][0]++,o.form.controls.priority.invalid)&&(cov_1ahhyrt4se().b[180][1]++,o.form.controls.priority.touched)),a(),u("ngValue",null),a(2),w(o.priorityOptions),a(2),p((l=o.form.controls.priority.value)?(cov_1ahhyrt4se().b[181][0]++,19):(cov_1ahhyrt4se().b[181][1]++,-1),l),a(),p((cov_1ahhyrt4se().b[183][0]++,o.form.controls.priority.invalid)&&(cov_1ahhyrt4se().b[183][1]++,o.form.controls.priority.touched)?(cov_1ahhyrt4se().b[182][0]++,20):(cov_1ahhyrt4se().b[182][1]++,-1)),a(5),p(o.isEditMode()?(cov_1ahhyrt4se().b[184][0]++,25):(cov_1ahhyrt4se().b[184][1]++,26)),a(2),p((cov_1ahhyrt4se().b[186][0]++,!o.isEditMode())&&(cov_1ahhyrt4se().b[186][1]++,o.form.controls.thresholdOperator.hasError("required"))&&(cov_1ahhyrt4se().b[186][2]++,o.form.controls.thresholdOperator.touched)?(cov_1ahhyrt4se().b[185][0]++,27):(cov_1ahhyrt4se().b[185][1]++,-1)),a(),p((cov_1ahhyrt4se().b[188][0]++,!o.isEditMode())&&(cov_1ahhyrt4se().b[188][1]++,o.form.controls.thresholdOperator.hasError("unsupportedOperator"))&&(cov_1ahhyrt4se().b[188][2]++,o.form.controls.thresholdOperator.touched)?(cov_1ahhyrt4se().b[187][0]++,28):(cov_1ahhyrt4se().b[187][1]++,-1)),a(5),b("list",o.thresholdValueEnumHints().length>0?(cov_1ahhyrt4se().b[189][0]++,"thresholdEnumHints"):(cov_1ahhyrt4se().b[189][1]++,null))("aria-invalid",(cov_1ahhyrt4se().b[190][0]++,o.form.controls.thresholdValue.invalid)&&(cov_1ahhyrt4se().b[190][1]++,o.form.controls.thresholdValue.touched)),a(2),w(o.thresholdValueEnumHints()),a(2),p(o.isEditMode()?(cov_1ahhyrt4se().b[191][0]++,-1):(cov_1ahhyrt4se().b[191][1]++,37)),a(),p((cov_1ahhyrt4se().b[193][0]++,o.form.controls.thresholdValue.hasError("required"))&&(cov_1ahhyrt4se().b[193][1]++,o.form.controls.thresholdValue.touched)?(cov_1ahhyrt4se().b[192][0]++,38):(cov_1ahhyrt4se().b[192][1]++,-1)),a(),p((cov_1ahhyrt4se().b[195][0]++,o.form.controls.thresholdValue.hasError("invalidEnumThreshold"))&&(cov_1ahhyrt4se().b[195][1]++,o.form.controls.thresholdValue.touched)?(cov_1ahhyrt4se().b[194][0]++,39):(cov_1ahhyrt4se().b[194][1]++,-1)),a(),p((cov_1ahhyrt4se().b[197][0]++,o.form.controls.thresholdValue.hasError("pattern"))&&(cov_1ahhyrt4se().b[197][1]++,o.form.controls.thresholdValue.touched)?(cov_1ahhyrt4se().b[196][0]++,40):(cov_1ahhyrt4se().b[196][1]++,-1)),a(12),b("aria-invalid",(cov_1ahhyrt4se().b[198][0]++,o.form.controls.armingTime.invalid)&&(cov_1ahhyrt4se().b[198][1]++,o.form.controls.armingTime.touched)),a(),p((cov_1ahhyrt4se().b[200][0]++,o.form.controls.armingTime.invalid)&&(cov_1ahhyrt4se().b[200][1]++,o.form.controls.armingTime.touched)?(cov_1ahhyrt4se().b[199][0]++,53):(cov_1ahhyrt4se().b[199][1]++,-1)),a(4),b("aria-invalid",(cov_1ahhyrt4se().b[201][0]++,o.form.controls.dearmingTime.invalid)&&(cov_1ahhyrt4se().b[201][1]++,o.form.controls.dearmingTime.touched)),a(),p((cov_1ahhyrt4se().b[203][0]++,o.form.controls.dearmingTime.invalid)&&(cov_1ahhyrt4se().b[203][1]++,o.form.controls.dearmingTime.touched)?(cov_1ahhyrt4se().b[202][0]++,58):(cov_1ahhyrt4se().b[202][1]++,-1)),a(3),u("label",o.isEditMode()?(cov_1ahhyrt4se().b[204][0]++,"APPLICA MODIFICHE"):(cov_1ahhyrt4se().b[204][1]++,"CREA ALLARME"));}else{cov_1ahhyrt4se().b[174][1]++;}},dependencies:[Ae,xe,Se,Ie,be,Te,Ce,_e,De,Ee,J,X],encapsulation:2,changeDetection:0}));}cov_1ahhyrt4se().s[370]++;return i;})());var je=(cov_1ahhyrt4se().s[371]++,(()=>{cov_1ahhyrt4se().f[151]++;class i{alarmTimeMapper=(cov_1ahhyrt4se().s[372]++,C(Y));toRows(e){cov_1ahhyrt4se().f[152]++;cov_1ahhyrt4se().s[373]++;return e.map(t=>{cov_1ahhyrt4se().f[153]++;cov_1ahhyrt4se().s[374]++;return{id:t.id,name:t.name,position:this.toPositionLabel(t.position),priority:t.priority,threshold:`${t.thresholdOperator} ${t.thresholdValue}`,armingTime:this.alarmTimeMapper.toFormTime(t.armingTime),dearmingTime:this.alarmTimeMapper.toFormTime(t.dearmingTime),isEnabled:t.isArmed};});}toPositionLabel(e){cov_1ahhyrt4se().f[154]++;let t=(cov_1ahhyrt4se().s[375]++,e.replaceAll(/\s*-\s*/g," - ").trim());cov_1ahhyrt4se().s[376]++;return t.length===0?(cov_1ahhyrt4se().b[205][0]++,"-"):(cov_1ahhyrt4se().b[205][1]++,t);}static ɵfac=(cov_1ahhyrt4se().s[377]++,function(t){cov_1ahhyrt4se().f[155]++;cov_1ahhyrt4se().s[378]++;return new((cov_1ahhyrt4se().b[206][0]++,t)||(cov_1ahhyrt4se().b[206][1]++,i))();});static ɵprov=(cov_1ahhyrt4se().s[379]++,E({token:i,factory:i.ɵfac,providedIn:"root"}));}cov_1ahhyrt4se().s[380]++;return i;})());cov_1ahhyrt4se().s[381]++;var Tt=(i,d)=>{cov_1ahhyrt4se().f[156]++;cov_1ahhyrt4se().s[382]++;return d.id;};function St(i,d){cov_1ahhyrt4se().f[157]++;cov_1ahhyrt4se().s[383]++;if((cov_1ahhyrt4se().b[208][0]++,i&1)&&(cov_1ahhyrt4se().b[208][1]++,r(0,"p",9),s(1),n()),i&2){cov_1ahhyrt4se().b[207][0]++;let e=(cov_1ahhyrt4se().s[384]++,c());cov_1ahhyrt4se().s[385]++;a(),ie(" ",e," ");}else{cov_1ahhyrt4se().b[207][1]++;}}function It(i,d){cov_1ahhyrt4se().f[158]++;cov_1ahhyrt4se().s[386]++;(cov_1ahhyrt4se().b[209][0]++,i&1)&&(cov_1ahhyrt4se().b[209][1]++,m(0,St,2,1,"p",9)),(cov_1ahhyrt4se().b[210][0]++,i&2)&&(cov_1ahhyrt4se().b[210][1]++,p(d?(cov_1ahhyrt4se().b[211][0]++,0):(cov_1ahhyrt4se().b[211][1]++,-1)));}function yt(i,d){cov_1ahhyrt4se().f[159]++;cov_1ahhyrt4se().s[387]++;(cov_1ahhyrt4se().b[212][0]++,i&1)&&(cov_1ahhyrt4se().b[212][1]++,s(0," Impossibile caricare le regole di allarme. Verifica la sessione o riprova tra poco. "));}function At(i,d){cov_1ahhyrt4se().f[160]++;cov_1ahhyrt4se().s[388]++;(cov_1ahhyrt4se().b[213][0]++,i&1)&&(cov_1ahhyrt4se().b[213][1]++,s(0," Nessuna regola configurata. "));}function Vt(i,d){cov_1ahhyrt4se().f[161]++;cov_1ahhyrt4se().s[389]++;if((cov_1ahhyrt4se().b[215][0]++,i&1)&&(cov_1ahhyrt4se().b[215][1]++,r(0,"tr")(1,"td",10),m(2,yt,1,0)(3,At,1,0),n()()),i&2){cov_1ahhyrt4se().b[214][0]++;let e=(cov_1ahhyrt4se().s[390]++,c());cov_1ahhyrt4se().s[391]++;a(),b("colspan",e.columns.length),a(),p(e.error()?(cov_1ahhyrt4se().b[216][0]++,2):(cov_1ahhyrt4se().b[216][1]++,3));}else{cov_1ahhyrt4se().b[214][1]++;}}function wt(i,d){cov_1ahhyrt4se().f[162]++;cov_1ahhyrt4se().s[392]++;if(i&1){cov_1ahhyrt4se().b[217][0]++;let e=(cov_1ahhyrt4se().s[393]++,$());cov_1ahhyrt4se().s[394]++;r(0,"tr",11)(1,"td",12),s(2),n(),r(3,"td",13),s(4),n(),r(5,"td",14),I(6,"app-alarm-priority-indicator",15),n(),r(7,"td",13),s(8),n(),r(9,"td",13),s(10),n(),r(11,"td",13),s(12),n(),r(13,"td",14)(14,"div",16)(15,"app-alarm-action-button",17),D("pressed",function(){cov_1ahhyrt4se().f[163]++;let o=(cov_1ahhyrt4se().s[395]++,y(e).$implicit),l=(cov_1ahhyrt4se().s[396]++,c(2));cov_1ahhyrt4se().s[397]++;return A(l.onEdit(o.id));}),n(),r(16,"app-alarm-action-button",18),D("pressed",function(){cov_1ahhyrt4se().f[164]++;let o=(cov_1ahhyrt4se().s[398]++,y(e).$implicit),l=(cov_1ahhyrt4se().s[399]++,c(2));cov_1ahhyrt4se().s[400]++;return A(l.onDelete(o.id,o.name));}),n(),r(17,"app-alarm-toggle-switch",19),D("toggled",function(o){cov_1ahhyrt4se().f[165]++;let l=(cov_1ahhyrt4se().s[401]++,y(e).$implicit),h=(cov_1ahhyrt4se().s[402]++,c(2));cov_1ahhyrt4se().s[403]++;return A(h.onToggleEnabled(l.id,o));}),n()()()();}else{cov_1ahhyrt4se().b[217][1]++;}cov_1ahhyrt4se().s[404]++;if(i&2){cov_1ahhyrt4se().b[218][0]++;let e=(cov_1ahhyrt4se().s[405]++,d.$implicit),t=(cov_1ahhyrt4se().s[406]++,c(2));cov_1ahhyrt4se().s[407]++;a(2),ie(" ",e.name," "),a(2),g(e.position),a(2),u("priority",e.priority),a(2),g(e.threshold),a(2),g(e.armingTime),a(2),g(e.dearmingTime),a(3),u("ariaLabel","Modifica regola "+e.name),a(),u("ariaLabel","Elimina regola "+e.name),a(),u("checked",e.isEnabled)("disabled",t.pendingToggleRuleId()===e.id)("ariaLabel","Abilita regola "+e.name);}else{cov_1ahhyrt4se().b[218][1]++;}}function Mt(i,d){cov_1ahhyrt4se().f[166]++;cov_1ahhyrt4se().s[408]++;if((cov_1ahhyrt4se().b[220][0]++,i&1)&&(cov_1ahhyrt4se().b[220][1]++,V(0,wt,18,11,"tr",11,Tt)),i&2){cov_1ahhyrt4se().b[219][0]++;let e=(cov_1ahhyrt4se().s[409]++,c());cov_1ahhyrt4se().s[410]++;w(e.rows());}else{cov_1ahhyrt4se().b[219][1]++;}}function Ft(i,d){cov_1ahhyrt4se().f[167]++;cov_1ahhyrt4se().s[411]++;if(i&1){cov_1ahhyrt4se().b[221][0]++;let e=(cov_1ahhyrt4se().s[412]++,$());cov_1ahhyrt4se().s[413]++;r(0,"app-alarm-config-form",20),D("submittedForm",function(o){cov_1ahhyrt4se().f[168]++;cov_1ahhyrt4se().s[414]++;y(e);let l=(cov_1ahhyrt4se().s[415]++,c());cov_1ahhyrt4se().s[416]++;return A(l.onFormSubmitted(o));})("cancelled",function(){cov_1ahhyrt4se().f[169]++;cov_1ahhyrt4se().s[417]++;y(e);let o=(cov_1ahhyrt4se().s[418]++,c());cov_1ahhyrt4se().s[419]++;return A(o.onModalClosed());}),n();}else{cov_1ahhyrt4se().b[221][1]++;}cov_1ahhyrt4se().s[420]++;if(i&2){cov_1ahhyrt4se().b[222][0]++;let e=(cov_1ahhyrt4se().s[421]++,c());cov_1ahhyrt4se().s[422]++;u("mode",e.editingRule()?(cov_1ahhyrt4se().b[223][0]++,"edit"):(cov_1ahhyrt4se().b[223][1]++,"create"))("initialRule",e.editingRule());}else{cov_1ahhyrt4se().b[222][1]++;}}function Ot(i,d){cov_1ahhyrt4se().f[170]++;cov_1ahhyrt4se().s[423]++;if(i&1){cov_1ahhyrt4se().b[224][0]++;let e=(cov_1ahhyrt4se().s[424]++,$());cov_1ahhyrt4se().s[425]++;r(0,"app-confirm-dialog",21),D("confirmed",function(){cov_1ahhyrt4se().f[171]++;cov_1ahhyrt4se().s[426]++;y(e);let o=(cov_1ahhyrt4se().s[427]++,c());cov_1ahhyrt4se().s[428]++;return A(o.onDeleteConfirmed());})("cancelled",function(){cov_1ahhyrt4se().f[172]++;cov_1ahhyrt4se().s[429]++;y(e);let o=(cov_1ahhyrt4se().s[430]++,c());cov_1ahhyrt4se().s[431]++;return A(o.onDeleteCancelled());}),n();}else{cov_1ahhyrt4se().b[224][1]++;}cov_1ahhyrt4se().s[432]++;if(i&2){cov_1ahhyrt4se().b[225][0]++;let e=(cov_1ahhyrt4se().s[433]++,c());cov_1ahhyrt4se().s[434]++;u("message",e.getDeleteConfirmMessage());}else{cov_1ahhyrt4se().b[225][1]++;}}var $i=(cov_1ahhyrt4se().s[435]++,(()=>{cov_1ahhyrt4se().f[173]++;class i{stateService=(cov_1ahhyrt4se().s[436]++,C(we));tablePresenter=(cov_1ahhyrt4se().s[437]++,C(je));columns=(cov_1ahhyrt4se().s[438]++,[{id:"name",label:"Nome"},{id:"position",label:"Posizione"},{id:"priority",label:"Priorita"},{id:"threshold",label:"Soglia"},{id:"armingTime",label:"Orario attivazione"},{id:"dearmingTime",label:"Orario disattivazione"},{id:"actions",label:"Azioni"}]);alarms=(cov_1ahhyrt4se().s[439]++,oe(this.stateService.alarms$,{initialValue:[]}));error=(cov_1ahhyrt4se().s[440]++,oe(this.stateService.error$,{initialValue:null}));isModalOpen=(cov_1ahhyrt4se().s[441]++,v(!1));editingRule=(cov_1ahhyrt4se().s[442]++,v(null));pendingDelete=(cov_1ahhyrt4se().s[443]++,v(null));pendingToggleRuleId=(cov_1ahhyrt4se().s[444]++,v(null));rows=(cov_1ahhyrt4se().s[445]++,_(()=>{cov_1ahhyrt4se().f[174]++;cov_1ahhyrt4se().s[446]++;return this.tablePresenter.toRows(this.alarms());}));modalTitle=(cov_1ahhyrt4se().s[447]++,_(()=>{cov_1ahhyrt4se().f[175]++;cov_1ahhyrt4se().s[448]++;return this.editingRule()?(cov_1ahhyrt4se().b[226][0]++,"Modifica allarme"):(cov_1ahhyrt4se().b[226][1]++,"Creazione allarme");}));ngOnInit(){cov_1ahhyrt4se().f[176]++;cov_1ahhyrt4se().s[449]++;this.stateService.loadAlarmRules();}onCreateNew(){cov_1ahhyrt4se().f[177]++;cov_1ahhyrt4se().s[450]++;this.editingRule.set(null),this.isModalOpen.set(!0);}onEdit(e){cov_1ahhyrt4se().f[178]++;let t=(cov_1ahhyrt4se().s[451]++,(cov_1ahhyrt4se().b[227][0]++,this.alarms().find(o=>{cov_1ahhyrt4se().f[179]++;cov_1ahhyrt4se().s[452]++;return o.id===e;}))??(cov_1ahhyrt4se().b[227][1]++,null));cov_1ahhyrt4se().s[453]++;(cov_1ahhyrt4se().b[228][0]++,t)&&(cov_1ahhyrt4se().b[228][1]++,this.editingRule.set(t),this.isModalOpen.set(!0));}onToggleEnabled(e,t){cov_1ahhyrt4se().f[180]++;cov_1ahhyrt4se().s[454]++;(cov_1ahhyrt4se().b[229][0]++,this.pendingToggleRuleId()===null)&&(cov_1ahhyrt4se().b[229][1]++,this.pendingToggleRuleId.set(e),this.stateService.toggleEnabled(e,t).pipe(de(()=>{cov_1ahhyrt4se().f[181]++;cov_1ahhyrt4se().s[455]++;(cov_1ahhyrt4se().b[230][0]++,this.pendingToggleRuleId()===e)&&(cov_1ahhyrt4se().b[230][1]++,this.pendingToggleRuleId.set(null));})).subscribe());}onDelete(e,t){cov_1ahhyrt4se().f[182]++;cov_1ahhyrt4se().s[456]++;this.pendingDelete.set({id:e,name:t});}onDeleteConfirmed(){cov_1ahhyrt4se().f[183]++;let e=(cov_1ahhyrt4se().s[457]++,this.pendingDelete());cov_1ahhyrt4se().s[458]++;(cov_1ahhyrt4se().b[231][0]++,e)&&(cov_1ahhyrt4se().b[231][1]++,this.stateService.deleteAlarmRule(e.id).subscribe(),this.pendingDelete.set(null));}onDeleteCancelled(){cov_1ahhyrt4se().f[184]++;cov_1ahhyrt4se().s[459]++;this.pendingDelete.set(null);}getDeleteConfirmMessage(){cov_1ahhyrt4se().f[185]++;let e=(cov_1ahhyrt4se().s[460]++,this.pendingDelete());cov_1ahhyrt4se().s[461]++;return e?(cov_1ahhyrt4se().b[232][0]++,`Confermi l'eliminazione della soglia "${e.name}"?`):(cov_1ahhyrt4se().b[232][1]++,"Confermi questa operazione?");}onFormSubmitted(e){cov_1ahhyrt4se().f[186]++;let t=(cov_1ahhyrt4se().s[462]++,this.editingRule());cov_1ahhyrt4se().s[463]++;if(t){cov_1ahhyrt4se().b[233][0]++;cov_1ahhyrt4se().s[464]++;this.stateService.updateAlarmRule(t.id,e).subscribe(()=>{cov_1ahhyrt4se().f[187]++;cov_1ahhyrt4se().s[465]++;this.onModalClosed();});cov_1ahhyrt4se().s[466]++;return;}else{cov_1ahhyrt4se().b[233][1]++;}cov_1ahhyrt4se().s[467]++;this.stateService.createAlarmRule(e).subscribe(()=>{cov_1ahhyrt4se().f[188]++;cov_1ahhyrt4se().s[468]++;this.onModalClosed();});}onModalClosed(){cov_1ahhyrt4se().f[189]++;cov_1ahhyrt4se().s[469]++;this.isModalOpen.set(!1),this.editingRule.set(null);}static ɵfac=(cov_1ahhyrt4se().s[470]++,function(t){cov_1ahhyrt4se().f[190]++;cov_1ahhyrt4se().s[471]++;return new((cov_1ahhyrt4se().b[234][0]++,t)||(cov_1ahhyrt4se().b[234][1]++,i))();});static ɵcmp=(cov_1ahhyrt4se().s[472]++,L({type:i,selectors:[["app-alarm-config-page"]],decls:16,vars:11,consts:[["aria-label","Configurazione allarmi",1,"alarm-config-page","care-page","care-dot-grid","sidebar-page"],[1,"care-page__hero"],[1,"care-eyebrow"],[1,"care-title"],[1,"care-subtitle"],[3,"createRequested","title","caption","columns","showCreateButton","createButtonAriaLabel"],["description","Compila i campi richiesti e conferma per salvare la regola.",3,"closed","open","title"],[3,"mode","initialRule"],["confirmLabel","Elimina","cancelLabel","Annulla",3,"message"],["role","alert","aria-live","polite",1,"mb-3","rounded-xl","border","border-rose-200","bg-rose-50","px-4","py-3","text-sm","font-medium","text-rose-700","shadow-sm"],[1,"px-5","py-14","text-center","text-sm","text-slate-600"],[1,"group","transition-colors","hover:bg-slate-50/80"],[1,"px-5","py-3.5","align-middle","text-sm","font-semibold","text-slate-900"],[1,"px-5","py-3.5","align-middle","text-sm","text-slate-700"],[1,"px-5","py-3.5","align-middle"],[3,"priority"],[1,"flex","items-center","gap-2"],["label","MODIFICA",3,"pressed","ariaLabel"],["label","ELIMINA","tone","danger",3,"pressed","ariaLabel"],[3,"toggled","checked","disabled","ariaLabel"],[3,"submittedForm","cancelled","mode","initialRule"],["confirmLabel","Elimina","cancelLabel","Annulla",3,"confirmed","cancelled","message"]],template:function(t,o){cov_1ahhyrt4se().f[191]++;cov_1ahhyrt4se().s[473]++;if((cov_1ahhyrt4se().b[236][0]++,t&1)&&(cov_1ahhyrt4se().b[236][1]++,r(0,"section",0)(1,"header",1)(2,"div")(3,"p",2),s(4,"Allarmi"),n(),r(5,"h1",3),s(6,"Configurazione allarmi"),n(),r(7,"p",4),s(8,"Gestisci soglie e pianificazioni con una vista tabellare unica."),n()()(),m(9,It,1,1),r(10,"app-alarm-table-shell",5),D("createRequested",function(){cov_1ahhyrt4se().f[192]++;cov_1ahhyrt4se().s[474]++;return o.onCreateNew();}),m(11,Vt,4,2,"tr")(12,Mt,2,0),n(),r(13,"app-modal-shell",6),D("closed",function(){cov_1ahhyrt4se().f[193]++;cov_1ahhyrt4se().s[475]++;return o.onModalClosed();}),m(14,Ft,1,2,"app-alarm-config-form",7),n(),m(15,Ot,1,1,"app-confirm-dialog",8),n()),t&2){cov_1ahhyrt4se().b[235][0]++;let l;cov_1ahhyrt4se().s[476]++;a(9),p((l=o.error())?(cov_1ahhyrt4se().b[237][0]++,9):(cov_1ahhyrt4se().b[237][1]++,-1),l),a(),u("title","Allarmi")("caption","Tabella configurazione allarmi")("columns",o.columns)("showCreateButton",!0)("createButtonAriaLabel","Crea nuova regola allarme"),a(),p(o.rows().length===0?(cov_1ahhyrt4se().b[238][0]++,11):(cov_1ahhyrt4se().b[238][1]++,12)),a(2),u("open",o.isModalOpen())("title",o.modalTitle()),a(),p(o.isModalOpen()?(cov_1ahhyrt4se().b[239][0]++,14):(cov_1ahhyrt4se().b[239][1]++,-1)),a(),p(o.pendingDelete()?(cov_1ahhyrt4se().b[240][0]++,15):(cov_1ahhyrt4se().b[240][1]++,-1));}else{cov_1ahhyrt4se().b[235][1]++;}},dependencies:[Ve,J,X,Le,Me,Pe,ke],styles:[`.alarm-config-page[_ngcontent-%COMP%]{gap:1.15rem} +/*# sourceMappingURL=alarm-config-page.component-TBPHWXNY.css.map */`],changeDetection:0}));}cov_1ahhyrt4se().s[477]++;return i;})());export{$i as AlarmConfigPageComponent};//# sourceMappingURL=chunk-L7QG5RI3.js.map +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJMZSIsImNvdl8xYWhoeXJ0NHNlIiwicyIsImYiLCJpIiwiY2hlY2tlZCIsIlQiLCJkaXNhYmxlZCIsImFyaWFMYWJlbCIsInRvZ2dsZWQiLCJSIiwidHJhY2tDbGFzcyIsIl8iLCJlIiwiYiIsInRodW1iQ2xhc3MiLCJvblRvZ2dsZSIsImVtaXQiLCLJtWZhYyIsInQiLCLJtWNtcCIsIkwiLCJ0eXBlIiwic2VsZWN0b3JzIiwiaW5wdXRzIiwib3V0cHV0cyIsImRlY2xzIiwidmFycyIsImNvbnN0cyIsInRlbXBsYXRlIiwibyIsImoiLCJXIiwiY2UiLCJ6IiwidGUiLCJ1ZSIsImEiLCJlbmNhcHN1bGF0aW9uIiwiY2hhbmdlRGV0ZWN0aW9uIiwiJGUiLCJxZSIsImQiLCJjIiwiZyIsImRlc2NyaXB0aW9uIiwiSGUiLCIkIiwieSIsIkEiLCJvbkNsb3NlIiwibSIsImhlIiwidGl0bGUiLCJjbG9zZUxhYmVsIiwicCIsIlBlIiwib3BlbiIsInJlcXVpcmVkIiwiY2xvc2VkIiwibmdDb250ZW50U2VsZWN0b3JzIiwiZmUiLCJOZSIsImFsYXJtVGltZU1hcHBlciIsIkMiLCJZIiwidG9Gb3JtVmFsdWUiLCJuYW1lIiwicGxhbnRJZCIsImRldmljZUlkIiwiZGF0YXBvaW50SWQiLCJwcmlvcml0eSIsInRocmVzaG9sZE9wZXJhdG9yIiwidG9Gb3JtVGhyZXNob2xkT3BlcmF0b3IiLCJ0aHJlc2hvbGRWYWx1ZSIsImFybWluZ1RpbWUiLCJ0b0Zvcm1UaW1lIiwiZGVhcm1pbmdUaW1lIiwiZW5hYmxlZCIsImlzQXJtZWQiLCJ0cmltIiwieCIsIkdSRUFURVJfVEhBTiIsIkdSRUFURVJfVEhBTl9PUl9FUVVBTCIsIkxFU1NfVEhBTiIsIkxFU1NfVEhBTl9PUl9FUVVBTCIsIkVRVUFMX1RPIiwiRXJyb3IiLCLJtXByb3YiLCJFIiwidG9rZW4iLCJmYWN0b3J5IiwicHJvdmlkZWRJbiIsIlAiLCJudW1lcmljVGhyZXNob2xkUGF0dGVybiIsImV4dHJhY3REZXZpY2VPcHRpb25zIiwicm9vbXMiLCJmbGF0TWFwIiwiZGV2aWNlcyIsIm1hcCIsImlkIiwibGFiZWwiLCJkYXRhcG9pbnRzIiwibm9ybWFsaXplRGF0YXBvaW50cyIsImZpbmRSZWFkYWJsZURhdGFwb2ludHMiLCJmaW5kIiwibCIsImZpbHRlciIsInJlYWRhYmxlIiwiZmluZERhdGFwb2ludEJ5SWQiLCJmaW5kRGF0YXBvaW50QnlEZXZpY2VBbmREYXRhcG9pbnRJZCIsImgiLCJsZW5ndGgiLCJxIiwiQiIsImxlIiwiSyIsIkYiLCJ3cml0YWJsZSIsInZhbHVlVHlwZSIsImVudW0iLCJub3JtYWxpemVFbnVtVmFsdWVzIiwic2ZlVHlwZSIsImdldEFsbG93ZWRPcGVyYXRvcnMiLCJ1c2VzRW51bWVyYXRlZFRocmVzaG9sZCIsIk9iamVjdCIsInZhbHVlcyIsImdldEVudW1WYWx1ZXMiLCJub3JtYWxpemVUaHJlc2hvbGRWYWx1ZSIsInRvTG93ZXJDYXNlIiwiaXNUaHJlc2hvbGRWYWx1ZVZhbGlkIiwic29tZSIsInRlc3QiLCJVIiwiRyIsIkFycmF5IiwiZnJvbSIsIlNldCIsInplIiwiZGF0YXBvaW50RXh0cmFjdGlvbiIsImNvbnN0cnVjdG9yIiwiYXBwbHlUaHJlc2hvbGRDb25zdHJhaW50cyIsIm1vZGUiLCJkYXRhcG9pbnQiLCJ0aHJlc2hvbGRPcGVyYXRvckNvbnRyb2wiLCJ0aHJlc2hvbGRWYWx1ZUNvbnRyb2wiLCJyZXNvbHZlQWxsb3dlZE9wZXJhdG9ycyIsInZhbHVlIiwic2V0VmFsaWRhdG9ycyIsIm9wZXJhdG9yQWxsb3dlZFZhbGlkYXRvciIsImVudW1UaHJlc2hvbGRWYWxpZGF0b3IiLCJTdHJpbmciLCJzZXRWYWx1ZSIsImVtaXRFdmVudCIsInBhdHRlcm4iLCJpbmNsdWRlcyIsInVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkiLCJ1bnN1cHBvcnRlZE9wZXJhdG9yIiwiaGFzIiwiaW52YWxpZEVudW1UaHJlc2hvbGQiLCJPIiwiYWUiLCJ3YXJkQXBpIiwiYXBhcnRtZW50QXBpIiwiaGFzUmVxdWVzdGVkUGxhbnRzIiwicGxhbnRzIiwidiIsInBsYW50c0xvYWRFcnJvciIsImRldmljZXNMb2FkRXJyb3IiLCJpc0RldmljZXNMb2FkaW5nIiwiZW5zdXJlUGxhbnRzTG9hZGVkIiwiUyIsImxvYWRBbGxQbGFudHMiLCJwaXBlIiwiZWUiLCJzZXQiLCJIIiwiTiIsInJlc2V0RGV2aWNlc0xvYWRTdGF0ZSIsImxvYWREZXZpY2VPcHRpb25zQnlQbGFudCIsImxvYWRBcGFydG1lbnRWaWV3Rm9yUGxhbnRJZCIsInJlc29sdmVEYXRhcG9pbnRGb3JFZGl0IiwiZ2V0QWxsUGxhbnRzIiwiWiIsImF2YWlsYWJsZVBsYW50cyIsImdldEF2YWlsYWJsZVBsYW50cyIsIndhcmRzIiwiZ2V0V2FyZHMiLCJzZSIsIm1lcmdlUGxhbnRzIiwiZ2V0UGxhbnRzQnlXYXJkSWQiLCJmbGF0IiwiTWFwIiwic29ydCIsImxvY2FsZUNvbXBhcmUiLCJGZSIsIk9lIiwiUmUiLCJhcHBseU1vZGVTdGF0ZSIsImNvbnRyb2xzIiwiZGlzYWJsZSIsImNsZWFyVmFsaWRhdG9ycyIsImVuYWJsZSIsInJlc2V0RGF0YXBvaW50Q29udHJvbCIsInJlc29sdmVEZXZpY2VTZWxlY3Rpb24iLCJub3JtYWxpemVkRGV2aWNlSWQiLCJyZWFkYWJsZURhdGFwb2ludHMiLCJhdXRvU2VsZWN0ZWREYXRhcG9pbnRJZCIsInJlc29sdmVEYXRhcG9pbnRTZWxlY3Rpb24iLCJub3JtYWxpemVkRGF0YXBvaW50SWQiLCJzZWxlY3RlZERhdGFwb2ludCIsInJlIiwiQmUiLCJyIiwibiIsIkdlIiwiSSIsInUiLCJlZGl0UG9zaXRpb24iLCJVZSIsIiRpbXBsaWNpdCIsIlFlIiwiV2UiLCJKZSIsIlhlIiwiViIsImZvcm0iLCJpbnZhbGlkIiwidG91Y2hlZCIsInciLCJZZSIsIktlIiwiWmUiLCJldCIsInR0IiwiaXQiLCJvdCIsIm50IiwiYXQiLCJydCIsImx0IiwiZHQiLCJpc0VkaXRNb2RlIiwiZGV2aWNlT3B0aW9ucyIsImRhdGFwb2ludE9wdGlvbnMiLCJzdCIsIm10IiwicHQiLCJjdCIsInV0IiwiZnQiLCJRIiwidGhyZXNob2xkT3BlcmF0b3JPcHRpb25zIiwiaHQiLCJndCIsInZ0IiwiYnQiLCJ0aHJlc2hvbGRWYWx1ZUhlbHBUZXh0IiwiQ3QiLCJfdCIsInh0IiwiRXQiLCJEdCIsImtlIiwiaW5pdGlhbFJ1bGUiLCJzdWJtaXR0ZWRGb3JtIiwiY2FuY2VsbGVkIiwiZmIiLCJ5ZSIsImZvcm1NYXBwZXIiLCJmb3JtU3RhdGUiLCJ2YWxpZGF0aW9uSGVscGVyIiwiZmllbGRPcmNoZXN0cmF0b3IiLCJkZXN0cm95UmVmIiwibWUiLCJlZGl0RGF0YXBvaW50TG9va3VwVmVyc2lvbiIsImJ1aWxkRm9ybSIsInNlbGVjdGVkRGV2aWNlSWQiLCJzZWxlY3RlZERhdGFwb2ludElkIiwiaXNQbGFudFNlbGVjdGlvblZpc2libGUiLCJwb3NpdGlvbiIsInRvUG9zaXRpb25MYWJlbCIsInByaW9yaXR5T3B0aW9ucyIsInZlIiwidGhyZXNob2xkVmFsdWVFbnVtSGludHMiLCJwZSIsInJlc2V0IiwibG9hZEVkaXREYXRhcG9pbnRNZXRhZGF0YSIsImNyZWF0ZUVtcHR5Rm9ybVZhbHVlIiwidmFsdWVDaGFuZ2VzIiwiayIsInN1YnNjcmliZSIsIm9uUGxhbnRDaGFuZ2VkIiwib25EZXZpY2VDaGFuZ2VkIiwib25EYXRhcG9pbnRDaGFuZ2VkIiwibm9uTnVsbGFibGUiLCJncm91cCIsIm9uU3VibWl0IiwibWFya0FsbEFzVG91Y2hlZCIsImdldFJhd1ZhbHVlIiwicmVwbGFjZUFsbCIsIm9uQ2FuY2VsIiwiZmVhdHVyZXMiLCJnZSIsIkQiLCJoYXNFcnJvciIsImRlcGVuZGVuY2llcyIsIkFlIiwieGUiLCJTZSIsIkllIiwiYmUiLCJUZSIsIkNlIiwiX2UiLCJEZSIsIkVlIiwiSiIsIlgiLCJqZSIsInRvUm93cyIsInRocmVzaG9sZCIsImlzRW5hYmxlZCIsIlR0IiwiU3QiLCJpZSIsIkl0IiwieXQiLCJBdCIsIlZ0IiwiY29sdW1ucyIsImVycm9yIiwid3QiLCJvbkVkaXQiLCJvbkRlbGV0ZSIsIm9uVG9nZ2xlRW5hYmxlZCIsInBlbmRpbmdUb2dnbGVSdWxlSWQiLCJNdCIsInJvd3MiLCJGdCIsIm9uRm9ybVN1Ym1pdHRlZCIsIm9uTW9kYWxDbG9zZWQiLCJlZGl0aW5nUnVsZSIsIk90Iiwib25EZWxldGVDb25maXJtZWQiLCJvbkRlbGV0ZUNhbmNlbGxlZCIsImdldERlbGV0ZUNvbmZpcm1NZXNzYWdlIiwiJGkiLCJzdGF0ZVNlcnZpY2UiLCJ3ZSIsInRhYmxlUHJlc2VudGVyIiwiYWxhcm1zIiwib2UiLCJhbGFybXMkIiwiaW5pdGlhbFZhbHVlIiwiZXJyb3IkIiwiaXNNb2RhbE9wZW4iLCJwZW5kaW5nRGVsZXRlIiwibW9kYWxUaXRsZSIsIm5nT25Jbml0IiwibG9hZEFsYXJtUnVsZXMiLCJvbkNyZWF0ZU5ldyIsInRvZ2dsZUVuYWJsZWQiLCJkZSIsImRlbGV0ZUFsYXJtUnVsZSIsInVwZGF0ZUFsYXJtUnVsZSIsImNyZWF0ZUFsYXJtUnVsZSIsIlZlIiwiTWUiLCJzdHlsZXMiLCJBbGFybUNvbmZpZ1BhZ2VDb21wb25lbnQiXSwic291cmNlcyI6WyJzcmMvYXBwL3NoYXJlZC9jb21wb25lbnRzL2FsYXJtLXRhYmxlL2FsYXJtLXRvZ2dsZS1zd2l0Y2guY29tcG9uZW50LnRzIiwic3JjL2FwcC9zaGFyZWQvY29tcG9uZW50cy9hbGFybS10YWJsZS9hbGFybS10b2dnbGUtc3dpdGNoLmNvbXBvbmVudC5odG1sIiwic3JjL2FwcC9zaGFyZWQvY29tcG9uZW50cy9tb2RhbC1zaGVsbC9tb2RhbC1zaGVsbC5jb21wb25lbnQudHMiLCJzcmMvYXBwL3NoYXJlZC9jb21wb25lbnRzL21vZGFsLXNoZWxsL21vZGFsLXNoZWxsLmNvbXBvbmVudC5odG1sIiwic3JjL2FwcC9mZWF0dXJlcy9hbGFybS1jb25maWd1cmF0aW9uL21hcHBlcnMvYWxhcm0tcnVsZS1mb3JtLm1hcHBlci50cyIsInNyYy9hcHAvZmVhdHVyZXMvYWxhcm0tY29uZmlndXJhdGlvbi9zZXJ2aWNlcy9kZXZpY2UtZGF0YXBvaW50LWV4dHJhY3Rpb24uc2VydmljZS50cyIsInNyYy9hcHAvZmVhdHVyZXMvYWxhcm0tY29uZmlndXJhdGlvbi9oZWxwZXJzL2FsYXJtLWNvbmZpZy1mb3JtLXZhbGlkYXRpb24uaGVscGVyLnRzIiwic3JjL2FwcC9mZWF0dXJlcy9hbGFybS1jb25maWd1cmF0aW9uL3NlcnZpY2VzL2FsYXJtLWNvbmZpZy1mb3JtLXN0YXRlLnNlcnZpY2UudHMiLCJzcmMvYXBwL2ZlYXR1cmVzL2FsYXJtLWNvbmZpZ3VyYXRpb24vaGVscGVycy9hbGFybS1jb25maWctZm9ybS1maWVsZC1vcmNoZXN0cmF0b3IuaGVscGVyLnRzIiwic3JjL2FwcC9mZWF0dXJlcy9hbGFybS1jb25maWd1cmF0aW9uL2NvbXBvbmVudHMvYWxhcm0tY29uZmlnLWZvcm0vYWxhcm0tY29uZmlnLWZvcm0uY29tcG9uZW50LnRzIiwic3JjL2FwcC9mZWF0dXJlcy9hbGFybS1jb25maWd1cmF0aW9uL2NvbXBvbmVudHMvYWxhcm0tY29uZmlnLWZvcm0vYWxhcm0tY29uZmlnLWZvcm0uY29tcG9uZW50Lmh0bWwiLCJzcmMvYXBwL2ZlYXR1cmVzL2FsYXJtLWNvbmZpZ3VyYXRpb24vc2VydmljZXMvYWxhcm0tY29uZmlnLXRhYmxlLXByZXNlbnRlci5zZXJ2aWNlLnRzIiwic3JjL2FwcC9mZWF0dXJlcy9hbGFybS1jb25maWd1cmF0aW9uL2NvbXBvbmVudHMvYWxhcm0tY29uZmlnLXBhZ2UvYWxhcm0tY29uZmlnLXBhZ2UuY29tcG9uZW50LnRzIiwic3JjL2FwcC9mZWF0dXJlcy9hbGFybS1jb25maWd1cmF0aW9uL2NvbXBvbmVudHMvYWxhcm0tY29uZmlnLXBhZ2UvYWxhcm0tY29uZmlnLXBhZ2UuY29tcG9uZW50Lmh0bWwiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgY29tcHV0ZWQsIGlucHV0LCBvdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdhcHAtYWxhcm0tdG9nZ2xlLXN3aXRjaCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2FsYXJtLXRvZ2dsZS1zd2l0Y2guY29tcG9uZW50Lmh0bWwnLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBBbGFybVRvZ2dsZVN3aXRjaENvbXBvbmVudCB7XG4gICAgcHVibGljIHJlYWRvbmx5IGNoZWNrZWQgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG4gICAgcHVibGljIHJlYWRvbmx5IGRpc2FibGVkID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHB1YmxpYyByZWFkb25seSBhcmlhTGFiZWwgPSBpbnB1dDxzdHJpbmc+KCdBYmlsaXRhIG8gZGlzYWJpbGl0YScpO1xuXG4gICAgcHVibGljIHJlYWRvbmx5IHRvZ2dsZWQgPSBvdXRwdXQ8Ym9vbGVhbj4oKTtcblxuICAgIHB1YmxpYyByZWFkb25seSB0cmFja0NsYXNzID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICBjb25zdCBiYXNlQ2xhc3MgPVxuICAgICAgICAgICAgJ3JlbGF0aXZlIGlubGluZS1mbGV4IGgtNSB3LTkgaXRlbXMtY2VudGVyIHJvdW5kZWQtZnVsbCBib3JkZXIgdHJhbnNpdGlvbiBmb2N1cy12aXNpYmxlOm91dGxpbmUtMiBmb2N1cy12aXNpYmxlOm91dGxpbmUtb2Zmc2V0LTInO1xuXG4gICAgICAgIGlmICh0aGlzLmNoZWNrZWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGAke2Jhc2VDbGFzc30gYm9yZGVyLXllbGxvdy03MDAgYmcteWVsbG93LTQwMCBmb2N1cy12aXNpYmxlOm91dGxpbmUteWVsbG93LTUwMCBkaXNhYmxlZDpib3JkZXItc2xhdGUtNDAwIGRpc2FibGVkOmJnLXNsYXRlLTMwMGA7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYCR7YmFzZUNsYXNzfSBib3JkZXItc2xhdGUtNTAwIGJnLXdoaXRlIGZvY3VzLXZpc2libGU6b3V0bGluZS1zbGF0ZS01MDAgZGlzYWJsZWQ6Ym9yZGVyLXNsYXRlLTQwMCBkaXNhYmxlZDpiZy1zbGF0ZS0yMDBgO1xuICAgIH0pO1xuXG4gICAgcHVibGljIHJlYWRvbmx5IHRodW1iQ2xhc3MgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGJhc2VDbGFzcyA9XG4gICAgICAgICAgICAnaW5saW5lLWJsb2NrIGgtNCB3LTQgdHJhbnNmb3JtIHJvdW5kZWQtZnVsbCBib3JkZXIgYm9yZGVyLXNsYXRlLTUwMCBiZy13aGl0ZSB0cmFuc2l0aW9uJztcblxuICAgICAgICBpZiAodGhpcy5jaGVja2VkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBgJHtiYXNlQ2xhc3N9IHRyYW5zbGF0ZS14LTRgO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGAke2Jhc2VDbGFzc30gdHJhbnNsYXRlLXgtMC41YDtcbiAgICB9KTtcblxuICAgIHB1YmxpYyBvblRvZ2dsZSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy50b2dnbGVkLmVtaXQoIXRoaXMuY2hlY2tlZCgpKTtcbiAgICB9XG59XG4iLCI8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwib25Ub2dnbGUoKVwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZCgpXCIgW2F0dHIuYXJpYS1sYWJlbF09XCJhcmlhTGFiZWwoKVwiXG4gICAgW2F0dHIuYXJpYS1wcmVzc2VkXT1cImNoZWNrZWQoKVwiIFtjbGFzc109XCJ0cmFja0NsYXNzKClcIj5cbiAgICA8c3BhbiBbY2xhc3NdPVwidGh1bWJDbGFzcygpXCI+PC9zcGFuPlxuPC9idXR0b24+IiwiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgaW5wdXQsIG91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2FwcC1tb2RhbC1zaGVsbCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL21vZGFsLXNoZWxsLmNvbXBvbmVudC5odG1sJyxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgTW9kYWxTaGVsbENvbXBvbmVudCB7XG4gICAgcHVibGljIHJlYWRvbmx5IG9wZW4gPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG4gICAgcHVibGljIHJlYWRvbmx5IHRpdGxlID0gaW5wdXQucmVxdWlyZWQ8c3RyaW5nPigpO1xuICAgIHB1YmxpYyByZWFkb25seSBkZXNjcmlwdGlvbiA9IGlucHV0PHN0cmluZyB8IG51bGw+KG51bGwpO1xuICAgIHB1YmxpYyByZWFkb25seSBjbG9zZUxhYmVsID0gaW5wdXQ8c3RyaW5nPignQ2hpdWRpIGZpbmVzdHJhJyk7XG5cbiAgICBwdWJsaWMgcmVhZG9ubHkgY2xvc2VkID0gb3V0cHV0PHZvaWQ+KCk7XG5cbiAgICBwdWJsaWMgb25DbG9zZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jbG9zZWQuZW1pdCgpO1xuICAgIH1cbn1cbiIsIkBpZiAob3BlbigpKSB7XG48ZGlhbG9nIG9wZW4gYXJpYS1sYWJlbGxlZGJ5PVwiYXBwLW1vZGFsLXNoZWxsLXRpdGxlXCJcbiAgICBbYXR0ci5hcmlhLWRlc2NyaWJlZGJ5XT1cImRlc2NyaXB0aW9uKCkgPyAnYXBwLW1vZGFsLXNoZWxsLWRlc2NyaXB0aW9uJyA6IG51bGxcIlxuICAgIGNsYXNzPVwiZml4ZWQgaW5zZXQtMCB6LTUwIG0tYXV0byB3LVs5NXZ3XSBtYXgtdy0zeGwgbWF4LWgtWzkwdmhdIG92ZXJmbG93LXktYXV0byByb3VuZGVkLTJ4bCBib3JkZXIgYm9yZGVyLXNsYXRlLTQwMCBiZy1zbGF0ZS0xMDAgcC00IHNoYWRvdy0yeGwgYmFja2Ryb3A6YmctYmxhY2svNDUgZm9jdXM6b3V0bGluZS1ub25lXCI+XG4gICAgPGhlYWRlciBjbGFzcz1cIm1iLTMgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIGJvcmRlci1iIGJvcmRlci1zbGF0ZS00MDAgcGItMlwiPlxuICAgICAgICA8aDIgaWQ9XCJhcHAtbW9kYWwtc2hlbGwtdGl0bGVcIiBjbGFzcz1cInRleHQtYmFzZSBmb250LWJvbGQgdGV4dC1zbGF0ZS05MDBcIj57eyB0aXRsZSgpIH19PC9oMj5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cIm9uQ2xvc2UoKVwiIFthdHRyLmFyaWEtbGFiZWxdPVwiY2xvc2VMYWJlbCgpXCJcbiAgICAgICAgICAgIGNsYXNzPVwiaW5saW5lLWZsZXggaC03IHctNyBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZC1mdWxsIGJvcmRlciBib3JkZXItc2xhdGUtNTAwIGJnLXdoaXRlIHRleHQtc20gZm9udC1ib2xkIHRleHQtc2xhdGUtODAwIHRyYW5zaXRpb24gaG92ZXI6Ymctc2xhdGUtMjAwIGZvY3VzLXZpc2libGU6b3V0bGluZS0yIGZvY3VzLXZpc2libGU6b3V0bGluZS1vZmZzZXQtMiBmb2N1cy12aXNpYmxlOm91dGxpbmUtc2xhdGUtNjAwXCI+XG4gICAgICAgICAgICDinJVcbiAgICAgICAgPC9idXR0b24+XG4gICAgPC9oZWFkZXI+XG5cbiAgICBAaWYgKGRlc2NyaXB0aW9uKCkpIHtcbiAgICA8cCBpZD1cImFwcC1tb2RhbC1zaGVsbC1kZXNjcmlwdGlvblwiIGNsYXNzPVwibWItMyB0ZXh0LXNtIHRleHQtc2xhdGUtNzAwXCI+e3sgZGVzY3JpcHRpb24oKSB9fTwvcD5cbiAgICB9XG5cbiAgICA8bmctY29udGVudCAvPlxuPC9kaWFsb2c+XG59IiwiaW1wb3J0IHsgSW5qZWN0YWJsZSwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBbGFybVJ1bGUgfSBmcm9tICcuLi8uLi8uLi9jb3JlL2FsYXJtL21vZGVscy9hbGFybS1ydWxlLm1vZGVsJztcbmltcG9ydCB7IFRocmVzaG9sZE9wZXJhdG9yIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9hbGFybS9tb2RlbHMvdGhyZXNob2xkLW9wZXJhdG9yLmVudW0nO1xuaW1wb3J0IHsgQWxhcm1Db25maWdGb3JtVmFsdWUgfSBmcm9tICcuLi9tb2RlbHMvYWxhcm0tY29uZmlnLWZvcm0tdmFsdWUubW9kZWwnO1xuaW1wb3J0IHsgQWxhcm1UaW1lTWFwcGVyIH0gZnJvbSAnLi9hbGFybS10aW1lLm1hcHBlcic7XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgQWxhcm1SdWxlRm9ybU1hcHBlciB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBhbGFybVRpbWVNYXBwZXIgPSBpbmplY3QoQWxhcm1UaW1lTWFwcGVyKTtcblxuICAgIHB1YmxpYyB0b0Zvcm1WYWx1ZShydWxlOiBBbGFybVJ1bGUpOiBBbGFybUNvbmZpZ0Zvcm1WYWx1ZSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBuYW1lOiBydWxlLm5hbWUsXG4gICAgICAgICAgICBwbGFudElkOiAnJyxcbiAgICAgICAgICAgIGRldmljZUlkOiBydWxlLmRldmljZUlkLFxuICAgICAgICAgICAgZGF0YXBvaW50SWQ6IHJ1bGUuZGF0YXBvaW50SWQgPz8gJycsXG4gICAgICAgICAgICBwcmlvcml0eTogcnVsZS5wcmlvcml0eSxcbiAgICAgICAgICAgIHRocmVzaG9sZE9wZXJhdG9yOiB0aGlzLnRvRm9ybVRocmVzaG9sZE9wZXJhdG9yKHJ1bGUudGhyZXNob2xkT3BlcmF0b3IpLFxuICAgICAgICAgICAgdGhyZXNob2xkVmFsdWU6IHJ1bGUudGhyZXNob2xkVmFsdWUsXG4gICAgICAgICAgICBhcm1pbmdUaW1lOiB0aGlzLmFsYXJtVGltZU1hcHBlci50b0Zvcm1UaW1lKHJ1bGUuYXJtaW5nVGltZSksXG4gICAgICAgICAgICBkZWFybWluZ1RpbWU6IHRoaXMuYWxhcm1UaW1lTWFwcGVyLnRvRm9ybVRpbWUocnVsZS5kZWFybWluZ1RpbWUpLFxuICAgICAgICAgICAgZW5hYmxlZDogcnVsZS5pc0FybWVkLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgdG9Gb3JtVGhyZXNob2xkT3BlcmF0b3Iob3BlcmF0b3I6IHN0cmluZyk6IFRocmVzaG9sZE9wZXJhdG9yIHtcbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZE9wZXJhdG9yID0gb3BlcmF0b3IudHJpbSgpO1xuXG4gICAgICAgIGlmIChub3JtYWxpemVkT3BlcmF0b3IgPT09ICc+Jykge1xuICAgICAgICAgICAgcmV0dXJuIFRocmVzaG9sZE9wZXJhdG9yLkdSRUFURVJfVEhBTjtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9ybWFsaXplZE9wZXJhdG9yID09PSAnPj0nKSB7XG4gICAgICAgICAgICByZXR1cm4gVGhyZXNob2xkT3BlcmF0b3IuR1JFQVRFUl9USEFOX09SX0VRVUFMO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub3JtYWxpemVkT3BlcmF0b3IgPT09ICc8Jykge1xuICAgICAgICAgICAgcmV0dXJuIFRocmVzaG9sZE9wZXJhdG9yLkxFU1NfVEhBTjtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9ybWFsaXplZE9wZXJhdG9yID09PSAnPD0nKSB7XG4gICAgICAgICAgICByZXR1cm4gVGhyZXNob2xkT3BlcmF0b3IuTEVTU19USEFOX09SX0VRVUFMO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub3JtYWxpemVkT3BlcmF0b3IgPT09ICc9Jykge1xuICAgICAgICAgICAgcmV0dXJuIFRocmVzaG9sZE9wZXJhdG9yLkVRVUFMX1RPO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBPcGVyYXRvcmUgc29nbGlhIG5vbiBzdXBwb3J0YXRvOiAke29wZXJhdG9yfWApO1xuICAgIH1cbn0iLCJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUaHJlc2hvbGRPcGVyYXRvciB9IGZyb20gJy4uLy4uLy4uL2NvcmUvYWxhcm0vbW9kZWxzL3RocmVzaG9sZC1vcGVyYXRvci5lbnVtJztcbmltcG9ydCB7IEFwYXJ0bWVudCB9IGZyb20gJy4uLy4uL2FwYXJ0bWVudC1tb25pdG9yL21vZGVscy9hcGFydG1lbnQubW9kZWwnO1xuaW1wb3J0IHsgRGF0YXBvaW50IH0gZnJvbSAnLi4vLi4vYXBhcnRtZW50LW1vbml0b3IvbW9kZWxzL2RhdGFwb2ludC5tb2RlbCc7XG5pbXBvcnQgeyBQbGFudER0byB9IGZyb20gJy4uLy4uL2FwYXJ0bWVudC1tb25pdG9yL21vZGVscy9wbGFudC1yZXNwb25zZS5tb2RlbCc7XG5cbmV4cG9ydCB0eXBlIERldmljZURhdGFwb2ludE9wdGlvbiA9IHtcbiAgICBpZDogc3RyaW5nO1xuICAgIGxhYmVsOiBzdHJpbmc7XG4gICAgZGF0YXBvaW50czogRGF0YXBvaW50W107XG59O1xuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIERldmljZURhdGFwb2ludEV4dHJhY3Rpb25TZXJ2aWNlIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IG51bWVyaWNUaHJlc2hvbGRQYXR0ZXJuID0gL15bKy1dP1xcZCsoWy5dXFxkKyk/JC87XG5cbiAgICBwdWJsaWMgZXh0cmFjdERldmljZU9wdGlvbnMoYXBhcnRtZW50OiBBcGFydG1lbnQpOiBEZXZpY2VEYXRhcG9pbnRPcHRpb25bXSB7XG4gICAgICAgIHJldHVybiBhcGFydG1lbnQucm9vbXMuZmxhdE1hcCgocm9vbSkgPT5cbiAgICAgICAgICAgIHJvb20uZGV2aWNlcy5tYXAoKGRldmljZSkgPT4gKHtcbiAgICAgICAgICAgICAgICBpZDogZGV2aWNlLmlkLFxuICAgICAgICAgICAgICAgIGxhYmVsOiBgJHtyb29tLm5hbWV9IC0gJHtkZXZpY2UubmFtZX1gLFxuICAgICAgICAgICAgICAgIGRhdGFwb2ludHM6IHRoaXMubm9ybWFsaXplRGF0YXBvaW50cyhkZXZpY2UuZGF0YXBvaW50cyksXG4gICAgICAgICAgICB9KSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZmluZFJlYWRhYmxlRGF0YXBvaW50cyhcbiAgICAgICAgZGV2aWNlSWQ6IHN0cmluZyxcbiAgICAgICAgZGV2aWNlT3B0aW9uczogcmVhZG9ubHkgRGV2aWNlRGF0YXBvaW50T3B0aW9uW10sXG4gICAgKTogRGF0YXBvaW50W10ge1xuICAgICAgICBjb25zdCBzZWxlY3RlZERldmljZSA9IGRldmljZU9wdGlvbnMuZmluZCgob3B0aW9uKSA9PiBvcHRpb24uaWQgPT09IGRldmljZUlkKTtcbiAgICAgICAgaWYgKCFzZWxlY3RlZERldmljZSkge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHNlbGVjdGVkRGV2aWNlLmRhdGFwb2ludHMuZmlsdGVyKChkYXRhcG9pbnQpID0+IGRhdGFwb2ludC5yZWFkYWJsZSk7XG4gICAgfVxuXG4gICAgcHVibGljIGZpbmREYXRhcG9pbnRCeUlkKGRhdGFwb2ludElkOiBzdHJpbmcsIGRhdGFwb2ludHM6IHJlYWRvbmx5IERhdGFwb2ludFtdKTogRGF0YXBvaW50IHwgbnVsbCB7XG4gICAgICAgIHJldHVybiBkYXRhcG9pbnRzLmZpbmQoKGRhdGFwb2ludCkgPT4gZGF0YXBvaW50LmlkID09PSBkYXRhcG9pbnRJZCkgPz8gbnVsbDtcbiAgICB9XG5cbiAgICAvL2xvb2t1cCBwZXIgZWRpdFxuICAgIHB1YmxpYyBmaW5kRGF0YXBvaW50QnlEZXZpY2VBbmREYXRhcG9pbnRJZChcbiAgICAgICAgcGxhbnRzOiByZWFkb25seSBQbGFudER0b1tdLFxuICAgICAgICBkZXZpY2VJZDogc3RyaW5nLFxuICAgICAgICBkYXRhcG9pbnRJZDogc3RyaW5nLFxuICAgICk6IERhdGFwb2ludCB8IG51bGwge1xuICAgICAgICBjb25zdCBub3JtYWxpemVkRGV2aWNlSWQgPSBkZXZpY2VJZC50cmltKCk7XG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWREYXRhcG9pbnRJZCA9IGRhdGFwb2ludElkLnRyaW0oKTtcblxuICAgICAgICBpZiAobm9ybWFsaXplZERldmljZUlkLmxlbmd0aCA9PT0gMCB8fCBub3JtYWxpemVkRGF0YXBvaW50SWQubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgcGxhbnQgb2YgcGxhbnRzKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJvb20gb2YgcGxhbnQucm9vbXMgPz8gW10pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3RlZERldmljZSA9IHJvb20uZGV2aWNlcy5maW5kKChkZXZpY2UpID0+IGRldmljZS5pZCA9PT0gbm9ybWFsaXplZERldmljZUlkKTtcbiAgICAgICAgICAgICAgICBpZiAoIXNlbGVjdGVkRGV2aWNlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkRGF0YXBvaW50ID0gKHNlbGVjdGVkRGV2aWNlLmRhdGFwb2ludHMgPz8gW10pLmZpbmQoXG4gICAgICAgICAgICAgICAgICAgIChkYXRhcG9pbnQpID0+IGRhdGFwb2ludC5pZCA9PT0gbm9ybWFsaXplZERhdGFwb2ludElkLFxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICBpZiAoIXNlbGVjdGVkRGF0YXBvaW50KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIGlkOiBzZWxlY3RlZERhdGFwb2ludC5pZCxcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogc2VsZWN0ZWREYXRhcG9pbnQubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgcmVhZGFibGU6IHNlbGVjdGVkRGF0YXBvaW50LnJlYWRhYmxlLFxuICAgICAgICAgICAgICAgICAgICB3cml0YWJsZTogc2VsZWN0ZWREYXRhcG9pbnQud3JpdGFibGUsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlVHlwZTogc2VsZWN0ZWREYXRhcG9pbnQudmFsdWVUeXBlLFxuICAgICAgICAgICAgICAgICAgICBlbnVtOiB0aGlzLm5vcm1hbGl6ZUVudW1WYWx1ZXMoc2VsZWN0ZWREYXRhcG9pbnQuZW51bSksXG4gICAgICAgICAgICAgICAgICAgIHNmZVR5cGU6IHNlbGVjdGVkRGF0YXBvaW50LnNmZVR5cGUsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRBbGxvd2VkT3BlcmF0b3JzKGRhdGFwb2ludDogRGF0YXBvaW50IHwgbnVsbCk6IFRocmVzaG9sZE9wZXJhdG9yW10ge1xuICAgICAgICBpZiAoIXRoaXMudXNlc0VudW1lcmF0ZWRUaHJlc2hvbGQoZGF0YXBvaW50KSkge1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXMoVGhyZXNob2xkT3BlcmF0b3IpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFtUaHJlc2hvbGRPcGVyYXRvci5FUVVBTF9UT107XG4gICAgfVxuXG4gICAgcHVibGljIGdldEVudW1WYWx1ZXMoZGF0YXBvaW50OiBEYXRhcG9pbnQgfCBudWxsKTogc3RyaW5nW10ge1xuICAgICAgICBpZiAoIWRhdGFwb2ludCkge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMubm9ybWFsaXplRW51bVZhbHVlcyhkYXRhcG9pbnQuZW51bSk7XG4gICAgfVxuXG4gICAgLy9kaWNlIHNlIGlsIGRhdGFwb2ludCByaWNoaWVkZSB1bmEgdGhyZXNob2xkIGVudW1lcmF0YSBjb21lIG9uL29mZiBvIG51bWVyaWNhIFxuICAgIHB1YmxpYyB1c2VzRW51bWVyYXRlZFRocmVzaG9sZChkYXRhcG9pbnQ6IERhdGFwb2ludCB8IG51bGwpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RW51bVZhbHVlcyhkYXRhcG9pbnQpLmxlbmd0aCA+IDA7XG4gICAgfVxuXG4gICAgcHVibGljIG5vcm1hbGl6ZVRocmVzaG9sZFZhbHVlKGRhdGFwb2ludDogRGF0YXBvaW50IHwgbnVsbCwgdmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IHRyaW1tZWRWYWx1ZSA9IHZhbHVlLnRyaW0oKTtcbiAgICAgICAgY29uc3QgZW51bVZhbHVlcyA9IHRoaXMuZ2V0RW51bVZhbHVlcyhkYXRhcG9pbnQpO1xuXG4gICAgICAgIGlmIChlbnVtVmFsdWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHRyaW1tZWRWYWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG1hdGNoaW5nRW51bVZhbHVlID0gZW51bVZhbHVlcy5maW5kKFxuICAgICAgICAgICAgKGVudW1WYWx1ZSkgPT4gZW51bVZhbHVlLnRvTG93ZXJDYXNlKCkgPT09IHRyaW1tZWRWYWx1ZS50b0xvd2VyQ2FzZSgpLFxuICAgICAgICApO1xuXG4gICAgICAgIHJldHVybiBtYXRjaGluZ0VudW1WYWx1ZSA/PyB0cmltbWVkVmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIGlzVGhyZXNob2xkVmFsdWVWYWxpZChkYXRhcG9pbnQ6IERhdGFwb2ludCB8IG51bGwsIHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgdHJpbW1lZFZhbHVlID0gdmFsdWUudHJpbSgpO1xuICAgICAgICBpZiAodHJpbW1lZFZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZW51bVZhbHVlcyA9IHRoaXMuZ2V0RW51bVZhbHVlcyhkYXRhcG9pbnQpO1xuICAgICAgICBpZiAoZW51bVZhbHVlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICByZXR1cm4gZW51bVZhbHVlcy5zb21lKFxuICAgICAgICAgICAgICAgIChlbnVtVmFsdWUpID0+IGVudW1WYWx1ZS50b0xvd2VyQ2FzZSgpID09PSB0cmltbWVkVmFsdWUudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5udW1lcmljVGhyZXNob2xkUGF0dGVybi50ZXN0KHRyaW1tZWRWYWx1ZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBub3JtYWxpemVEYXRhcG9pbnRzKGRhdGFwb2ludHM6IHJlYWRvbmx5IERhdGFwb2ludFtdIHwgdW5kZWZpbmVkKTogRGF0YXBvaW50W10ge1xuICAgICAgICByZXR1cm4gKGRhdGFwb2ludHMgPz8gW10pLm1hcCgoZGF0YXBvaW50KSA9PiAoe1xuICAgICAgICAgICAgLi4uZGF0YXBvaW50LFxuICAgICAgICAgICAgZW51bTogdGhpcy5ub3JtYWxpemVFbnVtVmFsdWVzKGRhdGFwb2ludC5lbnVtKSxcbiAgICAgICAgfSkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgbm9ybWFsaXplRW51bVZhbHVlcyh2YWx1ZXM6IHJlYWRvbmx5IHN0cmluZ1tdIHwgdW5kZWZpbmVkKTogc3RyaW5nW10ge1xuICAgICAgICBjb25zdCBub3JtYWxpemVkVmFsdWVzID0gKHZhbHVlcyA/PyBbXSlcbiAgICAgICAgICAgIC5tYXAoKHZhbHVlKSA9PiB2YWx1ZS50cmltKCkpXG4gICAgICAgICAgICAuZmlsdGVyKCh2YWx1ZSkgPT4gdmFsdWUubGVuZ3RoID4gMCk7XG5cbiAgICAgICAgcmV0dXJuIEFycmF5LmZyb20obmV3IFNldChub3JtYWxpemVkVmFsdWVzKSk7XG4gICAgfVxufVxuXG4iLCJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIFZhbGlkYXRpb25FcnJvcnMsIFZhbGlkYXRvckZuLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgVGhyZXNob2xkT3BlcmF0b3IgfSBmcm9tICcuLi8uLi8uLi9jb3JlL2FsYXJtL21vZGVscy90aHJlc2hvbGQtb3BlcmF0b3IuZW51bSc7XG5pbXBvcnQgeyBEYXRhcG9pbnQgfSBmcm9tICcuLi8uLi9hcGFydG1lbnQtbW9uaXRvci9tb2RlbHMvZGF0YXBvaW50Lm1vZGVsJztcbmltcG9ydCB7IERldmljZURhdGFwb2ludEV4dHJhY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvZGV2aWNlLWRhdGFwb2ludC1leHRyYWN0aW9uLnNlcnZpY2UnO1xuXG5leHBvcnQgdHlwZSBBcHBseVRocmVzaG9sZENvbnN0cmFpbnRzUGFyYW1zID0ge1xuICAgIG1vZGU6ICdjcmVhdGUnIHwgJ2VkaXQnO1xuICAgIGRhdGFwb2ludDogRGF0YXBvaW50IHwgbnVsbDtcbiAgICB0aHJlc2hvbGRPcGVyYXRvckNvbnRyb2w6IEFic3RyYWN0Q29udHJvbDtcbiAgICB0aHJlc2hvbGRWYWx1ZUNvbnRyb2w6IEFic3RyYWN0Q29udHJvbDtcbn07XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgQWxhcm1Db25maWdGb3JtVmFsaWRhdGlvbkhlbHBlciB7XG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBkYXRhcG9pbnRFeHRyYWN0aW9uOiBEZXZpY2VEYXRhcG9pbnRFeHRyYWN0aW9uU2VydmljZSkgeyB9XG5cbiAgICBwdWJsaWMgYXBwbHlUaHJlc2hvbGRDb25zdHJhaW50cyh7XG4gICAgICAgIG1vZGUsXG4gICAgICAgIGRhdGFwb2ludCxcbiAgICAgICAgdGhyZXNob2xkT3BlcmF0b3JDb250cm9sLFxuICAgICAgICB0aHJlc2hvbGRWYWx1ZUNvbnRyb2wsXG4gICAgfTogQXBwbHlUaHJlc2hvbGRDb25zdHJhaW50c1BhcmFtcyk6IHZvaWQge1xuICAgICAgICBjb25zdCBhbGxvd2VkT3BlcmF0b3JzID0gdGhpcy5yZXNvbHZlQWxsb3dlZE9wZXJhdG9ycyhcbiAgICAgICAgICAgIG1vZGUsXG4gICAgICAgICAgICBkYXRhcG9pbnQsXG4gICAgICAgICAgICB0aHJlc2hvbGRPcGVyYXRvckNvbnRyb2wudmFsdWUgYXMgVGhyZXNob2xkT3BlcmF0b3IgfCBudWxsLFxuICAgICAgICApO1xuXG4gICAgICAgIHRocmVzaG9sZE9wZXJhdG9yQ29udHJvbC5zZXRWYWxpZGF0b3JzKFtcbiAgICAgICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWQsXG4gICAgICAgICAgICB0aGlzLm9wZXJhdG9yQWxsb3dlZFZhbGlkYXRvcihhbGxvd2VkT3BlcmF0b3JzKSxcbiAgICAgICAgXSk7XG5cbiAgICAgICAgaWYgKGRhdGFwb2ludCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgdGhyZXNob2xkVmFsdWVDb250cm9sLnNldFZhbGlkYXRvcnMoW1ZhbGlkYXRvcnMucmVxdWlyZWRdKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmRhdGFwb2ludEV4dHJhY3Rpb24udXNlc0VudW1lcmF0ZWRUaHJlc2hvbGQoZGF0YXBvaW50KSkge1xuICAgICAgICAgICAgY29uc3QgZW51bVZhbHVlcyA9IHRoaXMuZGF0YXBvaW50RXh0cmFjdGlvbi5nZXRFbnVtVmFsdWVzKGRhdGFwb2ludCk7XG4gICAgICAgICAgICB0aHJlc2hvbGRWYWx1ZUNvbnRyb2wuc2V0VmFsaWRhdG9ycyhbXG4gICAgICAgICAgICAgICAgVmFsaWRhdG9ycy5yZXF1aXJlZCxcbiAgICAgICAgICAgICAgICB0aGlzLmVudW1UaHJlc2hvbGRWYWxpZGF0b3IoZW51bVZhbHVlcyksXG4gICAgICAgICAgICBdKTtcblxuICAgICAgICAgICAgY29uc3Qgbm9ybWFsaXplZFZhbHVlID0gdGhpcy5kYXRhcG9pbnRFeHRyYWN0aW9uLm5vcm1hbGl6ZVRocmVzaG9sZFZhbHVlKFxuICAgICAgICAgICAgICAgIGRhdGFwb2ludCxcbiAgICAgICAgICAgICAgICBTdHJpbmcodGhyZXNob2xkVmFsdWVDb250cm9sLnZhbHVlID8/ICcnKSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAobm9ybWFsaXplZFZhbHVlICE9PSB0aHJlc2hvbGRWYWx1ZUNvbnRyb2wudmFsdWUpIHtcbiAgICAgICAgICAgICAgICB0aHJlc2hvbGRWYWx1ZUNvbnRyb2wuc2V0VmFsdWUobm9ybWFsaXplZFZhbHVlLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJlc2hvbGRWYWx1ZUNvbnRyb2wuc2V0VmFsaWRhdG9ycyhbXG4gICAgICAgICAgICAgICAgVmFsaWRhdG9ycy5yZXF1aXJlZCxcbiAgICAgICAgICAgICAgICBWYWxpZGF0b3JzLnBhdHRlcm4oL15bKy1dP1xcZCsoWy5dXFxkKyk/JC8pLFxuICAgICAgICAgICAgXSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aHJlc2hvbGRPcGVyYXRvckNvbnRyb2wudmFsdWUgIT09IG51bGwgJiZcbiAgICAgICAgICAgICFhbGxvd2VkT3BlcmF0b3JzLmluY2x1ZGVzKHRocmVzaG9sZE9wZXJhdG9yQ29udHJvbC52YWx1ZSBhcyBUaHJlc2hvbGRPcGVyYXRvcilcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0aHJlc2hvbGRPcGVyYXRvckNvbnRyb2wuc2V0VmFsdWUobnVsbCwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhyZXNob2xkT3BlcmF0b3JDb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICB0aHJlc2hvbGRWYWx1ZUNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZXNvbHZlQWxsb3dlZE9wZXJhdG9ycyhcbiAgICAgICAgbW9kZTogJ2NyZWF0ZScgfCAnZWRpdCcsXG4gICAgICAgIGRhdGFwb2ludDogRGF0YXBvaW50IHwgbnVsbCxcbiAgICAgICAgY3VycmVudE9wZXJhdG9yOiBUaHJlc2hvbGRPcGVyYXRvciB8IG51bGwsXG4gICAgKTogVGhyZXNob2xkT3BlcmF0b3JbXSB7XG4gICAgICAgIGlmIChkYXRhcG9pbnQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRhdGFwb2ludEV4dHJhY3Rpb24uZ2V0QWxsb3dlZE9wZXJhdG9ycyhkYXRhcG9pbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1vZGUgPT09ICdlZGl0JyAmJiBjdXJyZW50T3BlcmF0b3IgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBbY3VycmVudE9wZXJhdG9yXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBPYmplY3QudmFsdWVzKFRocmVzaG9sZE9wZXJhdG9yKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9wZXJhdG9yQWxsb3dlZFZhbGlkYXRvcihhbGxvd2VkT3BlcmF0b3JzOiByZWFkb25seSBUaHJlc2hvbGRPcGVyYXRvcltdKTogVmFsaWRhdG9yRm4ge1xuICAgICAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gY29udHJvbC52YWx1ZSBhcyBUaHJlc2hvbGRPcGVyYXRvciB8IG51bGw7XG4gICAgICAgICAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGFsbG93ZWRPcGVyYXRvcnMuaW5jbHVkZXModmFsdWUpID8gbnVsbCA6IHsgdW5zdXBwb3J0ZWRPcGVyYXRvcjogdHJ1ZSB9O1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgZW51bVRocmVzaG9sZFZhbGlkYXRvcihlbnVtVmFsdWVzOiByZWFkb25seSBzdHJpbmdbXSk6IFZhbGlkYXRvckZuIHtcbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZEVudW1WYWx1ZXMgPSBuZXcgU2V0KGVudW1WYWx1ZXMubWFwKChlbnVtVmFsdWUpID0+IGVudW1WYWx1ZS50b0xvd2VyQ2FzZSgpKSk7XG5cbiAgICAgICAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IFN0cmluZyhjb250cm9sLnZhbHVlID8/ICcnKS50cmltKCk7XG4gICAgICAgICAgICBpZiAodmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBub3JtYWxpemVkRW51bVZhbHVlcy5oYXModmFsdWUudG9Mb3dlckNhc2UoKSlcbiAgICAgICAgICAgICAgICA/IG51bGxcbiAgICAgICAgICAgICAgICA6IHsgaW52YWxpZEVudW1UaHJlc2hvbGQ6IHRydWUgfTtcbiAgICAgICAgfTtcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBJbmplY3RhYmxlLCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIGNhdGNoRXJyb3IsIGZvcmtKb2luLCBtYXAsIG9mLCBzd2l0Y2hNYXAsIHRhcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRGF0YXBvaW50IH0gZnJvbSAnLi4vLi4vYXBhcnRtZW50LW1vbml0b3IvbW9kZWxzL2RhdGFwb2ludC5tb2RlbCc7XG5pbXBvcnQgeyBXYXJkUGxhbnREdG8gfSBmcm9tICcuLi8uLi93YXJkLW1hbmFnZW1lbnQvbW9kZWxzL3dhcmQtYXBpLmR0byc7XG5pbXBvcnQgeyBXYXJkQXBpU2VydmljZSB9IGZyb20gJy4uLy4uL3dhcmQtbWFuYWdlbWVudC9zZXJ2aWNlcy93YXJkLWFwaS5zZXJ2aWNlJztcbmltcG9ydCB7IEFwYXJ0bWVudEFwaVNlcnZpY2UgfSBmcm9tICcuLi8uLi9hcGFydG1lbnQtbW9uaXRvci9zZXJ2aWNlcy9hcGFydG1lbnQtYXBpLnNlcnZpY2UnO1xuaW1wb3J0IHsgRGV2aWNlRGF0YXBvaW50RXh0cmFjdGlvblNlcnZpY2UsIERldmljZURhdGFwb2ludE9wdGlvbiB9IGZyb20gJy4vZGV2aWNlLWRhdGFwb2ludC1leHRyYWN0aW9uLnNlcnZpY2UnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQWxhcm1Db25maWdGb3JtU3RhdGVTZXJ2aWNlIHtcbiAgICBwcml2YXRlIGhhc1JlcXVlc3RlZFBsYW50cyA9IGZhbHNlO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgd2FyZEFwaTogV2FyZEFwaVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgYXBhcnRtZW50QXBpOiBBcGFydG1lbnRBcGlTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGRhdGFwb2ludEV4dHJhY3Rpb246IERldmljZURhdGFwb2ludEV4dHJhY3Rpb25TZXJ2aWNlLFxuICAgICkgeyB9XG5cbiAgICBwdWJsaWMgcmVhZG9ubHkgcGxhbnRzID0gc2lnbmFsPFdhcmRQbGFudER0b1tdPihbXSk7XG4gICAgcHVibGljIHJlYWRvbmx5IHBsYW50c0xvYWRFcnJvciA9IHNpZ25hbDxzdHJpbmcgfCBudWxsPihudWxsKTtcbiAgICBwdWJsaWMgcmVhZG9ubHkgZGV2aWNlc0xvYWRFcnJvciA9IHNpZ25hbDxzdHJpbmcgfCBudWxsPihudWxsKTtcbiAgICBwdWJsaWMgcmVhZG9ubHkgaXNEZXZpY2VzTG9hZGluZyA9IHNpZ25hbChmYWxzZSk7XG5cbiAgICBwdWJsaWMgZW5zdXJlUGxhbnRzTG9hZGVkKG1vZGU6ICdjcmVhdGUnIHwgJ2VkaXQnKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgICAgIGlmIChtb2RlID09PSAnZWRpdCcgfHwgdGhpcy5wbGFudHMoKS5sZW5ndGggPiAwIHx8IHRoaXMuaGFzUmVxdWVzdGVkUGxhbnRzKSB7XG4gICAgICAgICAgICByZXR1cm4gb2Yodm9pZCAwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaGFzUmVxdWVzdGVkUGxhbnRzID0gdHJ1ZTtcblxuICAgICAgICByZXR1cm4gdGhpcy5sb2FkQWxsUGxhbnRzKCkucGlwZShcbiAgICAgICAgICAgIHRhcCgocGxhbnRzKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5wbGFudHNMb2FkRXJyb3Iuc2V0KG51bGwpO1xuICAgICAgICAgICAgICAgIHRoaXMucGxhbnRzLnNldChwbGFudHMpO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBtYXAoKCkgPT4gdm9pZCAwKSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucGxhbnRzLnNldChbXSk7XG4gICAgICAgICAgICAgICAgdGhpcy5wbGFudHNMb2FkRXJyb3Iuc2V0KCdFcnJvcmUgZHVyYW50ZSBpbCBjYXJpY2FtZW50byBkZWdsaSBpbXBpYW50aSBkaXNwb25pYmlsaS4nKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gb2Yodm9pZCAwKTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyByZXNldERldmljZXNMb2FkU3RhdGUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGV2aWNlc0xvYWRFcnJvci5zZXQobnVsbCk7XG4gICAgICAgIHRoaXMuaXNEZXZpY2VzTG9hZGluZy5zZXQoZmFsc2UpO1xuICAgIH1cblxuICAgIHB1YmxpYyBsb2FkRGV2aWNlT3B0aW9uc0J5UGxhbnQocGxhbnRJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxEZXZpY2VEYXRhcG9pbnRPcHRpb25bXT4ge1xuICAgICAgICBjb25zdCBub3JtYWxpemVkUGxhbnRJZCA9IHBsYW50SWQudHJpbSgpO1xuICAgICAgICB0aGlzLmRldmljZXNMb2FkRXJyb3Iuc2V0KG51bGwpO1xuXG4gICAgICAgIGlmIChub3JtYWxpemVkUGxhbnRJZC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuaXNEZXZpY2VzTG9hZGluZy5zZXQoZmFsc2UpO1xuICAgICAgICAgICAgcmV0dXJuIG9mKFtdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaXNEZXZpY2VzTG9hZGluZy5zZXQodHJ1ZSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuYXBhcnRtZW50QXBpLmxvYWRBcGFydG1lbnRWaWV3Rm9yUGxhbnRJZChub3JtYWxpemVkUGxhbnRJZCkucGlwZShcbiAgICAgICAgICAgIG1hcCgoYXBhcnRtZW50KSA9PiB0aGlzLmRhdGFwb2ludEV4dHJhY3Rpb24uZXh0cmFjdERldmljZU9wdGlvbnMoYXBhcnRtZW50KSksXG4gICAgICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNEZXZpY2VzTG9hZGluZy5zZXQoZmFsc2UpO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBjYXRjaEVycm9yKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZXNMb2FkRXJyb3Iuc2V0KCdFcnJvcmUgZHVyYW50ZSBpbCBjYXJpY2FtZW50byBkZWkgZGlzcG9zaXRpdmkuJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0RldmljZXNMb2FkaW5nLnNldChmYWxzZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9mKFtdIGFzIERldmljZURhdGFwb2ludE9wdGlvbltdKTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgIH1cblxuXG4gICAgcHVibGljIHJlc29sdmVEYXRhcG9pbnRGb3JFZGl0KGRldmljZUlkOiBzdHJpbmcsIGRhdGFwb2ludElkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPERhdGFwb2ludCB8IG51bGw+IHtcbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZERldmljZUlkID0gZGV2aWNlSWQudHJpbSgpO1xuICAgICAgICBjb25zdCBub3JtYWxpemVkRGF0YXBvaW50SWQgPSBkYXRhcG9pbnRJZC50cmltKCk7XG5cbiAgICAgICAgaWYgKG5vcm1hbGl6ZWREZXZpY2VJZC5sZW5ndGggPT09IDAgfHwgbm9ybWFsaXplZERhdGFwb2ludElkLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuYXBhcnRtZW50QXBpLmdldEFsbFBsYW50cygpLnBpcGUoXG4gICAgICAgICAgICBtYXAoKHBsYW50cykgPT5cbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFwb2ludEV4dHJhY3Rpb24uZmluZERhdGFwb2ludEJ5RGV2aWNlQW5kRGF0YXBvaW50SWQoXG4gICAgICAgICAgICAgICAgICAgIHBsYW50cyxcbiAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZERldmljZUlkLFxuICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkRGF0YXBvaW50SWQsXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBjYXRjaEVycm9yKCgpID0+IG9mKG51bGwpKSxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGxvYWRBbGxQbGFudHMoKTogT2JzZXJ2YWJsZTxXYXJkUGxhbnREdG9bXT4ge1xuICAgICAgICByZXR1cm4gZm9ya0pvaW4oe1xuICAgICAgICAgICAgYXZhaWxhYmxlUGxhbnRzOiB0aGlzLndhcmRBcGkuZ2V0QXZhaWxhYmxlUGxhbnRzKCkucGlwZShjYXRjaEVycm9yKCgpID0+IG9mKFtdIGFzIFdhcmRQbGFudER0b1tdKSkpLFxuICAgICAgICAgICAgd2FyZHM6IHRoaXMud2FyZEFwaS5nZXRXYXJkcygpLnBpcGUoY2F0Y2hFcnJvcigoKSA9PiBvZihbXSkpKSxcbiAgICAgICAgfSkucGlwZShcbiAgICAgICAgICAgIHN3aXRjaE1hcCgoeyBhdmFpbGFibGVQbGFudHMsIHdhcmRzIH0pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAod2FyZHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvZih0aGlzLm1lcmdlUGxhbnRzKGF2YWlsYWJsZVBsYW50cywgW10pKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCB3YXJkUGxhbnRzUmVxdWVzdHMgPSB3YXJkcy5tYXAoKHdhcmQpID0+XG4gICAgICAgICAgICAgICAgICAgIHRoaXMud2FyZEFwaVxuICAgICAgICAgICAgICAgICAgICAgICAgLmdldFBsYW50c0J5V2FyZElkKHdhcmQuaWQpXG4gICAgICAgICAgICAgICAgICAgICAgICAucGlwZShjYXRjaEVycm9yKCgpID0+IG9mKFtdIGFzIFdhcmRQbGFudER0b1tdKSkpLFxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gZm9ya0pvaW4od2FyZFBsYW50c1JlcXVlc3RzKS5waXBlKFxuICAgICAgICAgICAgICAgICAgICBtYXAoKGFzc2lnbmVkUGxhbnRzQnlXYXJkKSA9PiB0aGlzLm1lcmdlUGxhbnRzKGF2YWlsYWJsZVBsYW50cywgYXNzaWduZWRQbGFudHNCeVdhcmQuZmxhdCgpKSksXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgbWVyZ2VQbGFudHMoYXZhaWxhYmxlUGxhbnRzOiBXYXJkUGxhbnREdG9bXSwgYXNzaWduZWRQbGFudHM6IFdhcmRQbGFudER0b1tdKTogV2FyZFBsYW50RHRvW10ge1xuICAgICAgICBjb25zdCBtZXJnZWRNYXAgPSBuZXcgTWFwPHN0cmluZywgV2FyZFBsYW50RHRvPigpO1xuXG4gICAgICAgIGZvciAoY29uc3QgcGxhbnQgb2YgWy4uLmF2YWlsYWJsZVBsYW50cywgLi4uYXNzaWduZWRQbGFudHNdKSB7XG4gICAgICAgICAgICBtZXJnZWRNYXAuc2V0KHBsYW50LmlkLCBwbGFudCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gQXJyYXkuZnJvbShtZXJnZWRNYXAudmFsdWVzKCkpLnNvcnQoKGZpcnN0LCBzZWNvbmQpID0+IGZpcnN0Lm5hbWUubG9jYWxlQ29tcGFyZShzZWNvbmQubmFtZSkpO1xuICAgIH1cbn1cbiIsImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IERhdGFwb2ludCB9IGZyb20gJy4uLy4uL2FwYXJ0bWVudC1tb25pdG9yL21vZGVscy9kYXRhcG9pbnQubW9kZWwnO1xuaW1wb3J0IHsgRGV2aWNlRGF0YXBvaW50RXh0cmFjdGlvblNlcnZpY2UsIERldmljZURhdGFwb2ludE9wdGlvbiB9IGZyb20gJy4uL3NlcnZpY2VzL2RldmljZS1kYXRhcG9pbnQtZXh0cmFjdGlvbi5zZXJ2aWNlJztcblxudHlwZSBBbGFybUNvbmZpZ0Zvcm1MaWtlID0ge1xuICAgIGNvbnRyb2xzOiB7XG4gICAgICAgIG5hbWU6IEFic3RyYWN0Q29udHJvbDtcbiAgICAgICAgcGxhbnRJZDogQWJzdHJhY3RDb250cm9sO1xuICAgICAgICBkZXZpY2VJZDogQWJzdHJhY3RDb250cm9sO1xuICAgICAgICBkYXRhcG9pbnRJZDogQWJzdHJhY3RDb250cm9sO1xuICAgICAgICB0aHJlc2hvbGRPcGVyYXRvcjogQWJzdHJhY3RDb250cm9sO1xuICAgIH07XG59O1xuXG5leHBvcnQgdHlwZSBEZXZpY2VTZWxlY3Rpb25SZXN1bHQgPSB7XG4gICAgbm9ybWFsaXplZERldmljZUlkOiBzdHJpbmc7XG4gICAgcmVhZGFibGVEYXRhcG9pbnRzOiBEYXRhcG9pbnRbXTtcbiAgICBhdXRvU2VsZWN0ZWREYXRhcG9pbnRJZDogc3RyaW5nIHwgbnVsbDtcbn07XG5cbmV4cG9ydCB0eXBlIERhdGFwb2ludFNlbGVjdGlvblJlc3VsdCA9IHtcbiAgICBub3JtYWxpemVkRGF0YXBvaW50SWQ6IHN0cmluZztcbiAgICBzZWxlY3RlZERhdGFwb2ludDogRGF0YXBvaW50IHwgbnVsbDtcbn07XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgQWxhcm1Db25maWdGb3JtRmllbGRPcmNoZXN0cmF0b3JIZWxwZXIge1xuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgZGF0YXBvaW50RXh0cmFjdGlvbjogRGV2aWNlRGF0YXBvaW50RXh0cmFjdGlvblNlcnZpY2UpIHsgfVxuXG4gICAgcHVibGljIGFwcGx5TW9kZVN0YXRlKGZvcm06IEFsYXJtQ29uZmlnRm9ybUxpa2UsIG1vZGU6ICdjcmVhdGUnIHwgJ2VkaXQnKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGlzRWRpdE1vZGUgPSBtb2RlID09PSAnZWRpdCc7XG5cbiAgICAgICAgaWYgKGlzRWRpdE1vZGUpIHtcbiAgICAgICAgICAgIGZvcm0uY29udHJvbHMubmFtZS5kaXNhYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgICAgICAgIGZvcm0uY29udHJvbHMucGxhbnRJZC5jbGVhclZhbGlkYXRvcnMoKTtcbiAgICAgICAgICAgIGZvcm0uY29udHJvbHMucGxhbnRJZC5kaXNhYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgICAgICAgIGZvcm0uY29udHJvbHMuZGV2aWNlSWQuZGlzYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgICAgICBmb3JtLmNvbnRyb2xzLmRhdGFwb2ludElkLmNsZWFyVmFsaWRhdG9ycygpO1xuICAgICAgICAgICAgZm9ybS5jb250cm9scy5kYXRhcG9pbnRJZC5kaXNhYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgICAgICAgIGZvcm0uY29udHJvbHMudGhyZXNob2xkT3BlcmF0b3IuZGlzYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgICAgICBmb3JtLmNvbnRyb2xzLnBsYW50SWQudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgICAgICBmb3JtLmNvbnRyb2xzLmRhdGFwb2ludElkLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICAgICAgZm9ybS5jb250cm9scy50aHJlc2hvbGRPcGVyYXRvci51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvcm0uY29udHJvbHMubmFtZS5lbmFibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICBmb3JtLmNvbnRyb2xzLnBsYW50SWQuc2V0VmFsaWRhdG9ycyhbVmFsaWRhdG9ycy5yZXF1aXJlZF0pO1xuICAgICAgICBmb3JtLmNvbnRyb2xzLmRhdGFwb2ludElkLnNldFZhbGlkYXRvcnMoW1ZhbGlkYXRvcnMucmVxdWlyZWRdKTtcbiAgICAgICAgZm9ybS5jb250cm9scy5wbGFudElkLmVuYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgIGZvcm0uY29udHJvbHMudGhyZXNob2xkT3BlcmF0b3IuZW5hYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgICAgZm9ybS5jb250cm9scy5wbGFudElkLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICBmb3JtLmNvbnRyb2xzLmRhdGFwb2ludElkLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICBmb3JtLmNvbnRyb2xzLnRocmVzaG9sZE9wZXJhdG9yLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuXG4gICAgICAgIGlmIChTdHJpbmcoZm9ybS5jb250cm9scy5wbGFudElkLnZhbHVlID8/ICcnKS50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBmb3JtLmNvbnRyb2xzLmRldmljZUlkLmRpc2FibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICAgICAgZm9ybS5jb250cm9scy5kYXRhcG9pbnRJZC5kaXNhYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvcm0uY29udHJvbHMuZGV2aWNlSWQuZW5hYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcblxuICAgICAgICBpZiAoU3RyaW5nKGZvcm0uY29udHJvbHMuZGV2aWNlSWQudmFsdWUgPz8gJycpLnRyaW0oKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIGZvcm0uY29udHJvbHMuZGF0YXBvaW50SWQuZGlzYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBmb3JtLmNvbnRyb2xzLmRhdGFwb2ludElkLmVuYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlc2V0RGF0YXBvaW50Q29udHJvbChmb3JtOiBBbGFybUNvbmZpZ0Zvcm1MaWtlKTogdm9pZCB7XG4gICAgICAgIGZvcm0uY29udHJvbHMuZGF0YXBvaW50SWQuc2V0VmFsdWUoJycsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgICAgZm9ybS5jb250cm9scy5kYXRhcG9pbnRJZC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVzb2x2ZURldmljZVNlbGVjdGlvbihcbiAgICAgICAgZGV2aWNlSWQ6IHN0cmluZyxcbiAgICAgICAgZGV2aWNlT3B0aW9uczogcmVhZG9ubHkgRGV2aWNlRGF0YXBvaW50T3B0aW9uW10sXG4gICAgKTogRGV2aWNlU2VsZWN0aW9uUmVzdWx0IHtcbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZERldmljZUlkID0gZGV2aWNlSWQudHJpbSgpO1xuICAgICAgICBpZiAobm9ybWFsaXplZERldmljZUlkLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBub3JtYWxpemVkRGV2aWNlSWQsXG4gICAgICAgICAgICAgICAgcmVhZGFibGVEYXRhcG9pbnRzOiBbXSxcbiAgICAgICAgICAgICAgICBhdXRvU2VsZWN0ZWREYXRhcG9pbnRJZDogbnVsbCxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZWFkYWJsZURhdGFwb2ludHMgPSB0aGlzLmRhdGFwb2ludEV4dHJhY3Rpb24uZmluZFJlYWRhYmxlRGF0YXBvaW50cyhcbiAgICAgICAgICAgIG5vcm1hbGl6ZWREZXZpY2VJZCxcbiAgICAgICAgICAgIGRldmljZU9wdGlvbnMsXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5vcm1hbGl6ZWREZXZpY2VJZCxcbiAgICAgICAgICAgIHJlYWRhYmxlRGF0YXBvaW50cyxcbiAgICAgICAgICAgIGF1dG9TZWxlY3RlZERhdGFwb2ludElkOiByZWFkYWJsZURhdGFwb2ludHMubGVuZ3RoID09PSAxID8gcmVhZGFibGVEYXRhcG9pbnRzWzBdLmlkIDogbnVsbCxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVzb2x2ZURhdGFwb2ludFNlbGVjdGlvbihcbiAgICAgICAgZGF0YXBvaW50SWQ6IHN0cmluZyxcbiAgICAgICAgZGF0YXBvaW50T3B0aW9uczogcmVhZG9ubHkgRGF0YXBvaW50W10sXG4gICAgKTogRGF0YXBvaW50U2VsZWN0aW9uUmVzdWx0IHtcbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZERhdGFwb2ludElkID0gZGF0YXBvaW50SWQudHJpbSgpO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBub3JtYWxpemVkRGF0YXBvaW50SWQsXG4gICAgICAgICAgICBzZWxlY3RlZERhdGFwb2ludDogdGhpcy5kYXRhcG9pbnRFeHRyYWN0aW9uLmZpbmREYXRhcG9pbnRCeUlkKG5vcm1hbGl6ZWREYXRhcG9pbnRJZCwgZGF0YXBvaW50T3B0aW9ucyksXG4gICAgICAgIH07XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgRGVzdHJveVJlZiwgY29tcHV0ZWQsIGVmZmVjdCwgaW5qZWN0LCBpbnB1dCwgb3V0cHV0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRGF0YXBvaW50IH0gZnJvbSAnLi4vLi4vLi4vYXBhcnRtZW50LW1vbml0b3IvbW9kZWxzL2RhdGFwb2ludC5tb2RlbCc7XG5pbXBvcnQgeyBBbGFybVByaW9yaXR5IH0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS9hbGFybS9tb2RlbHMvYWxhcm0tcHJpb3JpdHkuZW51bSc7XG5pbXBvcnQgeyBBbGFybVJ1bGUgfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL2FsYXJtL21vZGVscy9hbGFybS1ydWxlLm1vZGVsJztcbmltcG9ydCB7IFRocmVzaG9sZE9wZXJhdG9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS9hbGFybS9tb2RlbHMvdGhyZXNob2xkLW9wZXJhdG9yLmVudW0nO1xuaW1wb3J0IHsgQWxhcm1SdWxlRm9ybU1hcHBlciB9IGZyb20gJy4uLy4uL21hcHBlcnMvYWxhcm0tcnVsZS1mb3JtLm1hcHBlcic7XG5pbXBvcnQgeyBBbGFybUNvbmZpZ0Zvcm1WYWx1ZSB9IGZyb20gJy4uLy4uL21vZGVscy9hbGFybS1jb25maWctZm9ybS12YWx1ZS5tb2RlbCc7XG5pbXBvcnQgeyBBbGFybVByaW9yaXR5SW5kaWNhdG9yQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vLi4vc2hhcmVkL2NvbXBvbmVudHMvYWxhcm0tdGFibGUvYWxhcm0tcHJpb3JpdHktaW5kaWNhdG9yLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBbGFybUFjdGlvbkJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uLy4uL3NoYXJlZC9jb21wb25lbnRzL2FsYXJtLXRhYmxlL2FsYXJtLWFjdGlvbi1idXR0b24uY29tcG9uZW50JztcbmltcG9ydCB7IERldmljZURhdGFwb2ludEV4dHJhY3Rpb25TZXJ2aWNlLCBEZXZpY2VEYXRhcG9pbnRPcHRpb24gfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9kZXZpY2UtZGF0YXBvaW50LWV4dHJhY3Rpb24uc2VydmljZSc7XG5pbXBvcnQgeyBBbGFybUNvbmZpZ0Zvcm1WYWxpZGF0aW9uSGVscGVyIH0gZnJvbSAnLi4vLi4vaGVscGVycy9hbGFybS1jb25maWctZm9ybS12YWxpZGF0aW9uLmhlbHBlcic7XG5pbXBvcnQgeyBBbGFybUNvbmZpZ0Zvcm1TdGF0ZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hbGFybS1jb25maWctZm9ybS1zdGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IEFsYXJtQ29uZmlnRm9ybUZpZWxkT3JjaGVzdHJhdG9ySGVscGVyIH0gZnJvbSAnLi4vLi4vaGVscGVycy9hbGFybS1jb25maWctZm9ybS1maWVsZC1vcmNoZXN0cmF0b3IuaGVscGVyJztcblxuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiAnYXBwLWFsYXJtLWNvbmZpZy1mb3JtJyxcblx0dGVtcGxhdGVVcmw6ICcuL2FsYXJtLWNvbmZpZy1mb3JtLmNvbXBvbmVudC5odG1sJyxcblx0Y2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG5cdHByb3ZpZGVyczogW0FsYXJtQ29uZmlnRm9ybVN0YXRlU2VydmljZV0sXG5cdGltcG9ydHM6IFtSZWFjdGl2ZUZvcm1zTW9kdWxlLCBBbGFybVByaW9yaXR5SW5kaWNhdG9yQ29tcG9uZW50LCBBbGFybUFjdGlvbkJ1dHRvbkNvbXBvbmVudF0sXG59KVxuZXhwb3J0IGNsYXNzIEFsYXJtQ29uZmlnRm9ybUNvbXBvbmVudCB7XG5cdHB1YmxpYyByZWFkb25seSBtb2RlID0gaW5wdXQ8J2NyZWF0ZScgfCAnZWRpdCc+KCdjcmVhdGUnKTtcblx0cHVibGljIHJlYWRvbmx5IGluaXRpYWxSdWxlID0gaW5wdXQ8QWxhcm1SdWxlIHwgbnVsbD4obnVsbCk7XG5cblx0cHVibGljIHJlYWRvbmx5IHN1Ym1pdHRlZEZvcm0gPSBvdXRwdXQ8QWxhcm1Db25maWdGb3JtVmFsdWU+KCk7XG5cdHB1YmxpYyByZWFkb25seSBjYW5jZWxsZWQgPSBvdXRwdXQ8dm9pZD4oKTtcblxuXHRwcml2YXRlIHJlYWRvbmx5IGZiID0gaW5qZWN0KEZvcm1CdWlsZGVyKTtcblx0cHJpdmF0ZSByZWFkb25seSBmb3JtTWFwcGVyID0gaW5qZWN0KEFsYXJtUnVsZUZvcm1NYXBwZXIpO1xuXHRwcml2YXRlIHJlYWRvbmx5IGZvcm1TdGF0ZSA9IGluamVjdChBbGFybUNvbmZpZ0Zvcm1TdGF0ZVNlcnZpY2UpO1xuXHRwcml2YXRlIHJlYWRvbmx5IGRhdGFwb2ludEV4dHJhY3Rpb24gPSBpbmplY3QoRGV2aWNlRGF0YXBvaW50RXh0cmFjdGlvblNlcnZpY2UpO1xuXHRwcml2YXRlIHJlYWRvbmx5IHZhbGlkYXRpb25IZWxwZXIgPSBpbmplY3QoQWxhcm1Db25maWdGb3JtVmFsaWRhdGlvbkhlbHBlcik7XG5cdHByaXZhdGUgcmVhZG9ubHkgZmllbGRPcmNoZXN0cmF0b3IgPSBpbmplY3QoQWxhcm1Db25maWdGb3JtRmllbGRPcmNoZXN0cmF0b3JIZWxwZXIpO1xuXHRwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG5cdHByaXZhdGUgZWRpdERhdGFwb2ludExvb2t1cFZlcnNpb24gPSAwO1xuXG5cdHB1YmxpYyByZWFkb25seSBmb3JtID0gdGhpcy5idWlsZEZvcm0oKTtcblx0cHVibGljIHJlYWRvbmx5IGlzRWRpdE1vZGUgPSBjb21wdXRlZCgoKSA9PiB0aGlzLm1vZGUoKSA9PT0gJ2VkaXQnKTtcblx0cHVibGljIHJlYWRvbmx5IHBsYW50cyA9IHRoaXMuZm9ybVN0YXRlLnBsYW50cztcblx0cHVibGljIHJlYWRvbmx5IGRldmljZU9wdGlvbnMgPSBzaWduYWw8RGV2aWNlRGF0YXBvaW50T3B0aW9uW10+KFtdKTtcblx0cHVibGljIHJlYWRvbmx5IGRhdGFwb2ludE9wdGlvbnMgPSBzaWduYWw8RGF0YXBvaW50W10+KFtdKTtcblx0cHVibGljIHJlYWRvbmx5IHBsYW50c0xvYWRFcnJvciA9IHRoaXMuZm9ybVN0YXRlLnBsYW50c0xvYWRFcnJvcjtcblx0cHVibGljIHJlYWRvbmx5IGRldmljZXNMb2FkRXJyb3IgPSB0aGlzLmZvcm1TdGF0ZS5kZXZpY2VzTG9hZEVycm9yO1xuXHRwdWJsaWMgcmVhZG9ubHkgaXNEZXZpY2VzTG9hZGluZyA9IHRoaXMuZm9ybVN0YXRlLmlzRGV2aWNlc0xvYWRpbmc7XG5cdHB1YmxpYyByZWFkb25seSBzZWxlY3RlZERldmljZUlkID0gc2lnbmFsKCcnKTtcblx0cHVibGljIHJlYWRvbmx5IHNlbGVjdGVkRGF0YXBvaW50SWQgPSBzaWduYWwoJycpO1xuXHRwdWJsaWMgcmVhZG9ubHkgc2VsZWN0ZWREYXRhcG9pbnQgPSBzaWduYWw8RGF0YXBvaW50IHwgbnVsbD4obnVsbCk7XG5cdHB1YmxpYyByZWFkb25seSBpc1BsYW50U2VsZWN0aW9uVmlzaWJsZSA9IGNvbXB1dGVkKCgpID0+ICF0aGlzLmlzRWRpdE1vZGUoKSk7XG5cdHB1YmxpYyByZWFkb25seSBlZGl0UG9zaXRpb24gPSBjb21wdXRlZCgoKSA9PiB7XG5cdFx0aWYgKCF0aGlzLmlzRWRpdE1vZGUoKSkge1xuXHRcdFx0cmV0dXJuICctJztcblx0XHR9XG5cblx0XHRjb25zdCBwb3NpdGlvbiA9IHRoaXMuaW5pdGlhbFJ1bGUoKT8ucG9zaXRpb24gPz8gJyc7XG5cdFx0cmV0dXJuIHRoaXMudG9Qb3NpdGlvbkxhYmVsKHBvc2l0aW9uKTtcblx0fSk7XG5cblx0cHVibGljIHJlYWRvbmx5IHByaW9yaXR5T3B0aW9ucyA9IE9iamVjdC52YWx1ZXMoQWxhcm1Qcmlvcml0eSkuZmlsdGVyKFxuXHRcdCh2YWx1ZSk6IHZhbHVlIGlzIEFsYXJtUHJpb3JpdHkgPT4gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJ1xuXHQpO1xuXHRwdWJsaWMgcmVhZG9ubHkgdGhyZXNob2xkT3BlcmF0b3JPcHRpb25zID0gY29tcHV0ZWQoKCkgPT4ge1xuXHRcdGlmICghdGhpcy5pc0VkaXRNb2RlKCkpIHtcblx0XHRcdHJldHVybiB0aGlzLmRhdGFwb2ludEV4dHJhY3Rpb24uZ2V0QWxsb3dlZE9wZXJhdG9ycyh0aGlzLnNlbGVjdGVkRGF0YXBvaW50KCkpO1xuXHRcdH1cblxuXHRcdGNvbnN0IGRhdGFwb2ludCA9IHRoaXMuc2VsZWN0ZWREYXRhcG9pbnQoKTtcblx0XHRpZiAoZGF0YXBvaW50ICE9PSBudWxsKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5kYXRhcG9pbnRFeHRyYWN0aW9uLmdldEFsbG93ZWRPcGVyYXRvcnMoZGF0YXBvaW50KTtcblx0XHR9XG5cblx0XHRjb25zdCBjdXJyZW50T3BlcmF0b3IgPSB0aGlzLmZvcm0uY29udHJvbHMudGhyZXNob2xkT3BlcmF0b3IudmFsdWU7XG5cdFx0cmV0dXJuIGN1cnJlbnRPcGVyYXRvciA9PT0gbnVsbCA/IE9iamVjdC52YWx1ZXMoVGhyZXNob2xkT3BlcmF0b3IpIDogW2N1cnJlbnRPcGVyYXRvcl07XG5cdH0pO1xuXHRwdWJsaWMgcmVhZG9ubHkgdGhyZXNob2xkVmFsdWVFbnVtSGludHMgPSBjb21wdXRlZCgoKSA9PlxuXHRcdHRoaXMuZGF0YXBvaW50RXh0cmFjdGlvbi5nZXRFbnVtVmFsdWVzKHRoaXMuc2VsZWN0ZWREYXRhcG9pbnQoKSlcblx0KTtcblx0cHVibGljIHJlYWRvbmx5IHRocmVzaG9sZFZhbHVlSGVscFRleHQgPSBjb21wdXRlZCgoKSA9PiB7XG5cdFx0aWYgKHRoaXMuaXNFZGl0TW9kZSgpKSB7XG5cdFx0XHRpZiAodGhpcy50aHJlc2hvbGRWYWx1ZUVudW1IaW50cygpLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0cmV0dXJuICdJbnNlcmlzY2kgdW5vIGRlaSB2YWxvcmkgcHJldmlzdGkgZGFsIGRhdGFwb2ludCBhc3NvY2lhdG8gYWxsYSByZWdvbGEuJztcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuICdJbnNlcmlzY2kgdW4gdmFsb3JlIG51bWVyaWNvIChlcy4gMTAsIDEwLjUsIC0zKS4nO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLnNlbGVjdGVkRGV2aWNlSWQoKS5sZW5ndGggPT09IDApIHtcblx0XHRcdHJldHVybiAnU2VsZXppb25hIHByaW1hIGlsIGRpc3Bvc2l0aXZvLic7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuc2VsZWN0ZWREYXRhcG9pbnRJZCgpLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0cmV0dXJuICdTZWxlemlvbmEgdW4gZGF0YXBvaW50IGxlZ2dpYmlsZSBwZXIgaW1wb3N0YXJlIGxhIHNvZ2xpYS4nO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLnRocmVzaG9sZFZhbHVlRW51bUhpbnRzKCkubGVuZ3RoID4gMCkge1xuXHRcdFx0cmV0dXJuICdJbnNlcmlzY2kgdW5vIGRlaSB2YWxvcmkgcHJldmlzdGkgZGFsIGRhdGFwb2ludCBzZWxlemlvbmF0by4nO1xuXHRcdH1cblxuXHRcdHJldHVybiAnSW5zZXJpc2NpIHVuIHZhbG9yZSBudW1lcmljbyAoZXMuIDEwLCAxMC41LCAtMykuJztcblx0fSk7XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0ZWZmZWN0KCgpID0+IHtcblx0XHRcdGNvbnN0IHJ1bGUgPSB0aGlzLmluaXRpYWxSdWxlKCk7XG5cdFx0XHRpZiAocnVsZSkge1xuXHRcdFx0XHRjb25zdCBsb29rdXBWZXJzaW9uID0gKyt0aGlzLmVkaXREYXRhcG9pbnRMb29rdXBWZXJzaW9uO1xuXHRcdFx0XHR0aGlzLmZvcm0ucmVzZXQodGhpcy5mb3JtTWFwcGVyLnRvRm9ybVZhbHVlKHJ1bGUpKTtcblx0XHRcdFx0dGhpcy5kZXZpY2VPcHRpb25zLnNldChbeyBpZDogcnVsZS5kZXZpY2VJZCwgbGFiZWw6IHJ1bGUuZGV2aWNlSWQsIGRhdGFwb2ludHM6IFtdIH1dKTtcblx0XHRcdFx0dGhpcy5kYXRhcG9pbnRPcHRpb25zLnNldChbXSk7XG5cdFx0XHRcdHRoaXMuc2VsZWN0ZWREZXZpY2VJZC5zZXQocnVsZS5kZXZpY2VJZCk7XG5cdFx0XHRcdHRoaXMuc2VsZWN0ZWREYXRhcG9pbnRJZC5zZXQocnVsZS5kYXRhcG9pbnRJZCA/PyAnJyk7XG5cdFx0XHRcdHRoaXMuc2VsZWN0ZWREYXRhcG9pbnQuc2V0KG51bGwpO1xuXHRcdFx0XHR0aGlzLmFwcGx5TW9kZVN0YXRlKCk7XG5cdFx0XHRcdHRoaXMuYXBwbHlUaHJlc2hvbGRDb25zdHJhaW50cyhudWxsKTtcblx0XHRcdFx0dGhpcy5sb2FkRWRpdERhdGFwb2ludE1ldGFkYXRhKHJ1bGUuZGV2aWNlSWQsIHJ1bGUuZGF0YXBvaW50SWQgPz8gJycsIGxvb2t1cFZlcnNpb24pO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMuZWRpdERhdGFwb2ludExvb2t1cFZlcnNpb24gKz0gMTtcblx0XHRcdHRoaXMuZm9ybS5yZXNldCh0aGlzLmNyZWF0ZUVtcHR5Rm9ybVZhbHVlKCkpO1xuXHRcdFx0dGhpcy5kZXZpY2VPcHRpb25zLnNldChbXSk7XG5cdFx0XHR0aGlzLmRhdGFwb2ludE9wdGlvbnMuc2V0KFtdKTtcblx0XHRcdHRoaXMuc2VsZWN0ZWREZXZpY2VJZC5zZXQoJycpO1xuXHRcdFx0dGhpcy5zZWxlY3RlZERhdGFwb2ludElkLnNldCgnJyk7XG5cdFx0XHR0aGlzLnNlbGVjdGVkRGF0YXBvaW50LnNldChudWxsKTtcblx0XHRcdHRoaXMuYXBwbHlNb2RlU3RhdGUoKTtcblx0XHRcdHRoaXMuYXBwbHlUaHJlc2hvbGRDb25zdHJhaW50cyhudWxsKTtcblx0XHRcdHRoaXMuZW5zdXJlUGxhbnRzTG9hZGVkKCk7XG5cdFx0fSk7XG5cblx0XHR0aGlzLmZvcm0uY29udHJvbHMucGxhbnRJZC52YWx1ZUNoYW5nZXNcblx0XHRcdC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxuXHRcdFx0LnN1YnNjcmliZSgocGxhbnRJZCkgPT4ge1xuXHRcdFx0XHRpZiAodGhpcy5tb2RlKCkgPT09ICdlZGl0Jykge1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRoaXMub25QbGFudENoYW5nZWQocGxhbnRJZCk7XG5cdFx0XHR9KTtcblxuXHRcdHRoaXMuZm9ybS5jb250cm9scy5kZXZpY2VJZC52YWx1ZUNoYW5nZXNcblx0XHRcdC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxuXHRcdFx0LnN1YnNjcmliZSgoZGV2aWNlSWQpID0+IHtcblx0XHRcdFx0aWYgKHRoaXMubW9kZSgpID09PSAnZWRpdCcpIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0aGlzLm9uRGV2aWNlQ2hhbmdlZChkZXZpY2VJZCk7XG5cdFx0XHR9KTtcblxuXHRcdHRoaXMuZm9ybS5jb250cm9scy5kYXRhcG9pbnRJZC52YWx1ZUNoYW5nZXNcblx0XHRcdC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxuXHRcdFx0LnN1YnNjcmliZSgoZGF0YXBvaW50SWQpID0+IHtcblx0XHRcdFx0aWYgKHRoaXMubW9kZSgpID09PSAnZWRpdCcpIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0aGlzLm9uRGF0YXBvaW50Q2hhbmdlZChkYXRhcG9pbnRJZCk7XG5cdFx0XHR9KTtcblx0fVxuXG5cdHByaXZhdGUgYnVpbGRGb3JtKCkge1xuXHRcdHJldHVybiB0aGlzLmZiLm5vbk51bGxhYmxlLmdyb3VwKHtcblx0XHRcdG5hbWU6IFsnJ10sXG5cdFx0XHRwbGFudElkOiBbJyddLFxuXHRcdFx0ZGV2aWNlSWQ6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcblx0XHRcdGRhdGFwb2ludElkOiBbJyddLFxuXHRcdFx0cHJpb3JpdHk6IFtudWxsIGFzIEFsYXJtUHJpb3JpdHkgfCBudWxsLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxuXHRcdFx0dGhyZXNob2xkT3BlcmF0b3I6IFtudWxsIGFzIFRocmVzaG9sZE9wZXJhdG9yIHwgbnVsbCwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcblx0XHRcdHRocmVzaG9sZFZhbHVlOiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXG5cdFx0XHRhcm1pbmdUaW1lOiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLnBhdHRlcm4oL14oWzAxXVxcZHwyWzAtM10pOihbMC01XVxcZCkkLyldXSxcblx0XHRcdGRlYXJtaW5nVGltZTogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5wYXR0ZXJuKC9eKFswMV1cXGR8MlswLTNdKTooWzAtNV1cXGQpJC8pXV0sXG5cdFx0XHRlbmFibGVkOiBbdHJ1ZV0sXG5cdFx0fSk7XG5cdH1cblxuXHQvL3ZhbG9yZSBpbml6aWFsZSBkZWwgZm9ybSBpbiBjcmVhdGUgbW9kZVxuXHRwcml2YXRlIGNyZWF0ZUVtcHR5Rm9ybVZhbHVlKCk6IEFsYXJtQ29uZmlnRm9ybVZhbHVlIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0bmFtZTogJycsXG5cdFx0XHRwbGFudElkOiAnJyxcblx0XHRcdGRldmljZUlkOiAnJyxcblx0XHRcdGRhdGFwb2ludElkOiAnJyxcblx0XHRcdHByaW9yaXR5OiBudWxsLFxuXHRcdFx0dGhyZXNob2xkT3BlcmF0b3I6IG51bGwsXG5cdFx0XHR0aHJlc2hvbGRWYWx1ZTogJycsXG5cdFx0XHRhcm1pbmdUaW1lOiAnJyxcblx0XHRcdGRlYXJtaW5nVGltZTogJycsXG5cdFx0XHRlbmFibGVkOiB0cnVlLFxuXHRcdH07XG5cdH1cblxuXHRwdWJsaWMgb25TdWJtaXQoKTogdm9pZCB7XG5cdFx0aWYgKHRoaXMubW9kZSgpID09PSAnY3JlYXRlJyAmJiB0aGlzLnNlbGVjdGVkRGF0YXBvaW50KCkgIT09IG51bGwpIHtcblx0XHRcdGNvbnN0IG5vcm1hbGl6ZWRUaHJlc2hvbGQgPSB0aGlzLmRhdGFwb2ludEV4dHJhY3Rpb24ubm9ybWFsaXplVGhyZXNob2xkVmFsdWUoXG5cdFx0XHRcdHRoaXMuc2VsZWN0ZWREYXRhcG9pbnQoKSxcblx0XHRcdFx0dGhpcy5mb3JtLmNvbnRyb2xzLnRocmVzaG9sZFZhbHVlLnZhbHVlLFxuXHRcdFx0KTtcblx0XHRcdHRoaXMuZm9ybS5jb250cm9scy50aHJlc2hvbGRWYWx1ZS5zZXRWYWx1ZShub3JtYWxpemVkVGhyZXNob2xkLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG5cdFx0XHR0aGlzLmZvcm0uY29udHJvbHMudGhyZXNob2xkVmFsdWUudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuZm9ybS5pbnZhbGlkKSB7XG5cdFx0XHR0aGlzLmZvcm0ubWFya0FsbEFzVG91Y2hlZCgpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IGZvcm1WYWx1ZSA9IHRoaXMuZm9ybS5nZXRSYXdWYWx1ZSgpO1xuXHRcdGNvbnN0IGxvY2tlZFJ1bGUgPSB0aGlzLmluaXRpYWxSdWxlKCk7XG5cdFx0aWYgKHRoaXMubW9kZSgpID09PSAnZWRpdCcgJiYgbG9ja2VkUnVsZSkge1xuXHRcdFx0dGhpcy5zdWJtaXR0ZWRGb3JtLmVtaXQoeyAuLi5mb3JtVmFsdWUsIG5hbWU6IGxvY2tlZFJ1bGUubmFtZSB9KTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR0aGlzLnN1Ym1pdHRlZEZvcm0uZW1pdChmb3JtVmFsdWUpO1xuXHR9XG5cblx0cHJpdmF0ZSBhcHBseU1vZGVTdGF0ZSgpOiB2b2lkIHtcblx0XHR0aGlzLmZpZWxkT3JjaGVzdHJhdG9yLmFwcGx5TW9kZVN0YXRlKHRoaXMuZm9ybSwgdGhpcy5tb2RlKCkpO1xuXHR9XG5cblx0cHJpdmF0ZSBlbnN1cmVQbGFudHNMb2FkZWQoKTogdm9pZCB7XG5cdFx0dGhpcy5mb3JtU3RhdGUuZW5zdXJlUGxhbnRzTG9hZGVkKHRoaXMubW9kZSgpKVxuXHRcdFx0LnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpXG5cdFx0XHQuc3Vic2NyaWJlKCk7XG5cdH1cblxuXHQvL29wemlvbmkgZGlzcG9zaXRvdm8gcGVyIGdsJ2ltcGlhbnRvIHNjZWx0b1xuXHRwcml2YXRlIG9uUGxhbnRDaGFuZ2VkKHBsYW50SWQ6IHN0cmluZyk6IHZvaWQge1xuXHRcdHRoaXMuZm9ybVN0YXRlLnJlc2V0RGV2aWNlc0xvYWRTdGF0ZSgpO1xuXHRcdHRoaXMuZGV2aWNlT3B0aW9ucy5zZXQoW10pO1xuXHRcdHRoaXMuZm9ybS5jb250cm9scy5kZXZpY2VJZC5zZXRWYWx1ZSgnJywgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuXHRcdHRoaXMub25EZXZpY2VDaGFuZ2VkKCcnKTtcblxuXHRcdGlmIChwbGFudElkLnRyaW0oKS5sZW5ndGggPT09IDApIHtcblx0XHRcdHRoaXMuZm9ybS5jb250cm9scy5kZXZpY2VJZC5kaXNhYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR0aGlzLmZvcm0uY29udHJvbHMuZGV2aWNlSWQuZGlzYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG5cblx0XHR0aGlzLmZvcm1TdGF0ZVxuXHRcdFx0LmxvYWREZXZpY2VPcHRpb25zQnlQbGFudChwbGFudElkKVxuXHRcdFx0LnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpXG5cdFx0XHQuc3Vic2NyaWJlKChvcHRpb25zKSA9PiB7XG5cdFx0XHRcdHRoaXMuZGV2aWNlT3B0aW9ucy5zZXQob3B0aW9ucyk7XG5cdFx0XHRcdGlmIChvcHRpb25zLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0XHRcdHRoaXMuZm9ybS5jb250cm9scy5kZXZpY2VJZC5kaXNhYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0aGlzLmZvcm0uY29udHJvbHMuZGV2aWNlSWQuZW5hYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdH1cblxuXHQvL3RyYXNmb3JtYSBkZXZpY2UgLT4gdHV0dGkgZGF0YXBvaW50IGxlZ2dpYmlsaVxuXHRwcml2YXRlIG9uRGV2aWNlQ2hhbmdlZChkZXZpY2VJZDogc3RyaW5nKTogdm9pZCB7XG5cdFx0Y29uc3QgZGV2aWNlU2VsZWN0aW9uID0gdGhpcy5maWVsZE9yY2hlc3RyYXRvci5yZXNvbHZlRGV2aWNlU2VsZWN0aW9uKGRldmljZUlkLCB0aGlzLmRldmljZU9wdGlvbnMoKSk7XG5cdFx0dGhpcy5zZWxlY3RlZERldmljZUlkLnNldChkZXZpY2VTZWxlY3Rpb24ubm9ybWFsaXplZERldmljZUlkKTtcblx0XHR0aGlzLmRhdGFwb2ludE9wdGlvbnMuc2V0KFtdKTtcblx0XHR0aGlzLnNlbGVjdGVkRGF0YXBvaW50LnNldChudWxsKTtcblx0XHR0aGlzLnNlbGVjdGVkRGF0YXBvaW50SWQuc2V0KCcnKTtcblx0XHR0aGlzLmZpZWxkT3JjaGVzdHJhdG9yLnJlc2V0RGF0YXBvaW50Q29udHJvbCh0aGlzLmZvcm0pO1xuXHRcdHRoaXMuYXBwbHlUaHJlc2hvbGRDb25zdHJhaW50cyhudWxsKTtcblxuXHRcdGlmIChkZXZpY2VTZWxlY3Rpb24ubm9ybWFsaXplZERldmljZUlkLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0dGhpcy5mb3JtLmNvbnRyb2xzLmRhdGFwb2ludElkLmRpc2FibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHRoaXMuZGF0YXBvaW50T3B0aW9ucy5zZXQoZGV2aWNlU2VsZWN0aW9uLnJlYWRhYmxlRGF0YXBvaW50cyk7XG5cdFx0dGhpcy5mb3JtLmNvbnRyb2xzLmRhdGFwb2ludElkLmVuYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG5cblx0XHRpZiAoZGV2aWNlU2VsZWN0aW9uLmF1dG9TZWxlY3RlZERhdGFwb2ludElkICE9PSBudWxsKSB7XG5cdFx0XHR0aGlzLmZvcm0uY29udHJvbHMuZGF0YXBvaW50SWQuc2V0VmFsdWUoZGV2aWNlU2VsZWN0aW9uLmF1dG9TZWxlY3RlZERhdGFwb2ludElkLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG5cdFx0XHR0aGlzLm9uRGF0YXBvaW50Q2hhbmdlZChkZXZpY2VTZWxlY3Rpb24uYXV0b1NlbGVjdGVkRGF0YXBvaW50SWQpO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgb25EYXRhcG9pbnRDaGFuZ2VkKGRhdGFwb2ludElkOiBzdHJpbmcpOiB2b2lkIHtcblx0XHRjb25zdCBkYXRhcG9pbnRTZWxlY3Rpb24gPSB0aGlzLmZpZWxkT3JjaGVzdHJhdG9yLnJlc29sdmVEYXRhcG9pbnRTZWxlY3Rpb24oZGF0YXBvaW50SWQsIHRoaXMuZGF0YXBvaW50T3B0aW9ucygpKTtcblx0XHR0aGlzLnNlbGVjdGVkRGF0YXBvaW50SWQuc2V0KGRhdGFwb2ludFNlbGVjdGlvbi5ub3JtYWxpemVkRGF0YXBvaW50SWQpO1xuXHRcdHRoaXMuc2VsZWN0ZWREYXRhcG9pbnQuc2V0KGRhdGFwb2ludFNlbGVjdGlvbi5zZWxlY3RlZERhdGFwb2ludCk7XG5cdFx0dGhpcy5hcHBseVRocmVzaG9sZENvbnN0cmFpbnRzKGRhdGFwb2ludFNlbGVjdGlvbi5zZWxlY3RlZERhdGFwb2ludCk7XG5cdH1cblxuXHRwcml2YXRlIGFwcGx5VGhyZXNob2xkQ29uc3RyYWludHMoZGF0YXBvaW50OiBEYXRhcG9pbnQgfCBudWxsKTogdm9pZCB7XG5cdFx0dGhpcy52YWxpZGF0aW9uSGVscGVyLmFwcGx5VGhyZXNob2xkQ29uc3RyYWludHMoe1xuXHRcdFx0bW9kZTogdGhpcy5tb2RlKCksXG5cdFx0XHRkYXRhcG9pbnQsXG5cdFx0XHR0aHJlc2hvbGRPcGVyYXRvckNvbnRyb2w6IHRoaXMuZm9ybS5jb250cm9scy50aHJlc2hvbGRPcGVyYXRvcixcblx0XHRcdHRocmVzaG9sZFZhbHVlQ29udHJvbDogdGhpcy5mb3JtLmNvbnRyb2xzLnRocmVzaG9sZFZhbHVlLFxuXHRcdH0pO1xuXHR9XG5cblx0cHJpdmF0ZSBsb2FkRWRpdERhdGFwb2ludE1ldGFkYXRhKGRldmljZUlkOiBzdHJpbmcsIGRhdGFwb2ludElkOiBzdHJpbmcsIGxvb2t1cFZlcnNpb246IG51bWJlcik6IHZvaWQge1xuXHRcdGlmICh0aGlzLm1vZGUoKSAhPT0gJ2VkaXQnKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3Qgbm9ybWFsaXplZERhdGFwb2ludElkID0gZGF0YXBvaW50SWQudHJpbSgpO1xuXHRcdGlmIChub3JtYWxpemVkRGF0YXBvaW50SWQubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRpZiAobG9va3VwVmVyc2lvbiAhPT0gdGhpcy5lZGl0RGF0YXBvaW50TG9va3VwVmVyc2lvbiB8fCB0aGlzLm1vZGUoKSAhPT0gJ2VkaXQnKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy5zZWxlY3RlZERhdGFwb2ludC5zZXQobnVsbCk7XG5cdFx0XHR0aGlzLmFwcGx5VGhyZXNob2xkQ29uc3RyYWludHMobnVsbCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dGhpcy5mb3JtU3RhdGVcblx0XHRcdC5yZXNvbHZlRGF0YXBvaW50Rm9yRWRpdChkZXZpY2VJZCwgbm9ybWFsaXplZERhdGFwb2ludElkKVxuXHRcdFx0LnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpXG5cdFx0XHQuc3Vic2NyaWJlKChyZXNvbHZlZERhdGFwb2ludCkgPT4ge1xuXHRcdFx0XHRpZiAobG9va3VwVmVyc2lvbiAhPT0gdGhpcy5lZGl0RGF0YXBvaW50TG9va3VwVmVyc2lvbiB8fCB0aGlzLm1vZGUoKSAhPT0gJ2VkaXQnKSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGhpcy5zZWxlY3RlZERhdGFwb2ludC5zZXQocmVzb2x2ZWREYXRhcG9pbnQpO1xuXHRcdFx0XHR0aGlzLmFwcGx5VGhyZXNob2xkQ29uc3RyYWludHMocmVzb2x2ZWREYXRhcG9pbnQpO1xuXHRcdFx0fSk7XG5cdH1cblxuXHRwcml2YXRlIHRvUG9zaXRpb25MYWJlbChwb3NpdGlvbjogc3RyaW5nKTogc3RyaW5nIHtcblx0XHRjb25zdCBub3JtYWxpemVkID0gcG9zaXRpb24ucmVwbGFjZUFsbCgvXFxzKi1cXHMqL2csICcgLSAnKS50cmltKCk7XG5cdFx0aWYgKG5vcm1hbGl6ZWQubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRyZXR1cm4gJy0nO1xuXHRcdH1cblxuXHRcdHJldHVybiBub3JtYWxpemVkO1xuXHR9XG5cblx0cHVibGljIG9uQ2FuY2VsKCk6IHZvaWQge1xuXHRcdHRoaXMuY2FuY2VsbGVkLmVtaXQoKTtcblx0fVxufVxuXG5cblxuIiwiPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtXCIgKG5nU3VibWl0KT1cIm9uU3VibWl0KClcIiBub3ZhbGlkYXRlIGNsYXNzPVwic3BhY2UteS0zIHRleHQtc20gdGV4dC1zbGF0ZS05MDBcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZ3JpZCBncmlkLWNvbHMtMSBpdGVtcy1jZW50ZXIgZ2FwLTIgbWQ6Z3JpZC1jb2xzLVsxODBweF8xZnJdXCI+XG4gICAgICAgIDxsYWJlbCBmb3I9XCJuYW1lXCIgY2xhc3M9XCJmb250LXNlbWlib2xkIHRleHQtc2xhdGUtNzAwXCI+Tm9tZTo8L2xhYmVsPlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPGlucHV0IGlkPVwibmFtZVwiIHR5cGU9XCJ0ZXh0XCIgZm9ybUNvbnRyb2xOYW1lPVwibmFtZVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJoLTggdy1mdWxsIHJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci1zbGF0ZS00MDAgYmctd2hpdGUgcHgtMiB0ZXh0LXNtIGZvY3VzLXZpc2libGU6b3V0bGluZS0yIGZvY3VzLXZpc2libGU6b3V0bGluZS1vZmZzZXQtMSBmb2N1cy12aXNpYmxlOm91dGxpbmUtc2xhdGUtNjAwIGRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZCBkaXNhYmxlZDpiZy1zbGF0ZS0xMDAgZGlzYWJsZWQ6dGV4dC1zbGF0ZS01MDBcIiAvPlxuXG4gICAgICAgICAgICBAaWYgKGlzRWRpdE1vZGUoKSkge1xuICAgICAgICAgICAgPHAgY2xhc3M9XCJtdC0xIHRleHQteHMgdGV4dC1zbGF0ZS02MDBcIj5JbCBub21lIGRlbGxhIHJlZ29sYSBkJ2FsbGFybWUgw6ggZGVmaW5pdG8gaW4gY3JlYXppb25lIGUgbm9uIHB1w7JcbiAgICAgICAgICAgICAgICBlc3NlcmVcbiAgICAgICAgICAgICAgICBtb2RpZmljYXRvLjwvcD5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICBAaWYgKGlzRWRpdE1vZGUoKSkge1xuICAgIDxkaXYgY2xhc3M9XCJncmlkIGdyaWQtY29scy0xIGl0ZW1zLWNlbnRlciBnYXAtMiBtZDpncmlkLWNvbHMtWzE4MHB4XzFmcl1cIj5cbiAgICAgICAgPGxhYmVsIGZvcj1cInBvc2l0aW9uXCIgY2xhc3M9XCJmb250LXNlbWlib2xkIHRleHQtc2xhdGUtNzAwXCI+UG9zaXppb25lOjwvbGFiZWw+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8aW5wdXQgaWQ9XCJwb3NpdGlvblwiIHR5cGU9XCJ0ZXh0XCIgW3ZhbHVlXT1cImVkaXRQb3NpdGlvbigpXCIgcmVhZG9ubHlcbiAgICAgICAgICAgICAgICBjbGFzcz1cImgtOCB3LWZ1bGwgcm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLXNsYXRlLTMwMCBiZy1zbGF0ZS0xMDAgcHgtMiB0ZXh0LXNtIHRleHQtc2xhdGUtNzAwXCIgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgfVxuXG4gICAgQGlmIChpc1BsYW50U2VsZWN0aW9uVmlzaWJsZSgpKSB7XG4gICAgPGRpdiBjbGFzcz1cImdyaWQgZ3JpZC1jb2xzLTEgaXRlbXMtY2VudGVyIGdhcC0yIG1kOmdyaWQtY29scy1bMTgwcHhfMWZyXVwiPlxuICAgICAgICA8bGFiZWwgZm9yPVwicGxhbnRJZFwiIGNsYXNzPVwiZm9udC1zZW1pYm9sZCB0ZXh0LXNsYXRlLTcwMFwiPkltcGlhbnRvOjwvbGFiZWw+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8c2VsZWN0IGlkPVwicGxhbnRJZFwiIGZvcm1Db250cm9sTmFtZT1cInBsYW50SWRcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiaC04IHctZnVsbCByb3VuZGVkLW1kIGJvcmRlciBib3JkZXItc2xhdGUtNDAwIGJnLXdoaXRlIHB4LTIgdGV4dC1zbSBmb2N1cy12aXNpYmxlOm91dGxpbmUtMiBmb2N1cy12aXNpYmxlOm91dGxpbmUtb2Zmc2V0LTEgZm9jdXMtdmlzaWJsZTpvdXRsaW5lLXNsYXRlLTYwMFwiXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1pbnZhbGlkXT1cImZvcm0uY29udHJvbHMucGxhbnRJZC5pbnZhbGlkICYmIGZvcm0uY29udHJvbHMucGxhbnRJZC50b3VjaGVkXCI+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlwiPlNlbGV6aW9uYSBpbXBpYW50bzwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIEBmb3IgKHBsYW50IG9mIHBsYW50cygpOyB0cmFjayBwbGFudC5pZCkge1xuICAgICAgICAgICAgICAgIDxvcHRpb24gW3ZhbHVlXT1cInBsYW50LmlkXCI+e3sgcGxhbnQubmFtZSB9fTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvc2VsZWN0PlxuXG4gICAgICAgICAgICBAaWYgKHBsYW50c0xvYWRFcnJvcigpOyBhcyBwbGFudHNFcnJvcikge1xuICAgICAgICAgICAgQGlmIChwbGFudHNFcnJvcikge1xuICAgICAgICAgICAgPHAgcm9sZT1cImFsZXJ0XCIgY2xhc3M9XCJtdC0xIHRleHQteHMgZm9udC1tZWRpdW0gdGV4dC1yb3NlLTcwMFwiPnt7IHBsYW50c0Vycm9yIH19PC9wPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBAaWYgKGZvcm0uY29udHJvbHMucGxhbnRJZC5pbnZhbGlkICYmIGZvcm0uY29udHJvbHMucGxhbnRJZC50b3VjaGVkKSB7XG4gICAgICAgICAgICA8cCByb2xlPVwiYWxlcnRcIiBjbGFzcz1cIm10LTEgdGV4dC14cyBmb250LW1lZGl1bSB0ZXh0LXJvc2UtNzAwXCI+TCdpbXBpYW50byDDqCBvYmJsaWdhdG9yaW8uPC9wPlxuICAgICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICB9XG5cbiAgICBAaWYgKCFpc0VkaXRNb2RlKCkpIHtcbiAgICA8ZGl2IGNsYXNzPVwiZ3JpZCBncmlkLWNvbHMtMSBpdGVtcy1jZW50ZXIgZ2FwLTIgbWQ6Z3JpZC1jb2xzLVsxODBweF8xZnJdXCI+XG4gICAgICAgIDxsYWJlbCBmb3I9XCJkZXZpY2VJZFwiIGNsYXNzPVwiZm9udC1zZW1pYm9sZCB0ZXh0LXNsYXRlLTcwMFwiPkRpc3Bvc2l0aXZvOjwvbGFiZWw+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8c2VsZWN0IGlkPVwiZGV2aWNlSWRcIiBmb3JtQ29udHJvbE5hbWU9XCJkZXZpY2VJZFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJoLTggdy1mdWxsIHJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci1zbGF0ZS00MDAgYmctd2hpdGUgcHgtMiB0ZXh0LXNtIGZvY3VzLXZpc2libGU6b3V0bGluZS0yIGZvY3VzLXZpc2libGU6b3V0bGluZS1vZmZzZXQtMSBmb2N1cy12aXNpYmxlOm91dGxpbmUtc2xhdGUtNjAwIGRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZCBkaXNhYmxlZDpiZy1zbGF0ZS0xMDAgZGlzYWJsZWQ6dGV4dC1zbGF0ZS01MDBcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtaW52YWxpZF09XCJmb3JtLmNvbnRyb2xzLmRldmljZUlkLmludmFsaWQgJiYgZm9ybS5jb250cm9scy5kZXZpY2VJZC50b3VjaGVkXCI+XG4gICAgICAgICAgICAgICAgQGlmICghaXNFZGl0TW9kZSgpKSB7XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlwiPlNlbGV6aW9uYSBkaXNwb3NpdGl2bzwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBAZm9yIChkZXZpY2Ugb2YgZGV2aWNlT3B0aW9ucygpOyB0cmFjayBkZXZpY2UuaWQpIHtcbiAgICAgICAgICAgICAgICA8b3B0aW9uIFt2YWx1ZV09XCJkZXZpY2UuaWRcIj57eyBkZXZpY2UubGFiZWwgfX08L29wdGlvbj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L3NlbGVjdD5cblxuICAgICAgICAgICAgQGlmICghaXNFZGl0TW9kZSgpICYmIGZvcm0uY29udHJvbHMucGxhbnRJZC52YWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIDxwIGNsYXNzPVwibXQtMSB0ZXh0LXhzIHRleHQtc2xhdGUtNjAwXCI+U2VsZXppb25hIHByaW1hIGwnaW1waWFudG8gcGVyIHZpc3VhbGl6emFyZSBpIGRpc3Bvc2l0aXZpXG4gICAgICAgICAgICAgICAgZGlzcG9uaWJpbGkuPC9wPlxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBAaWYgKGlzRGV2aWNlc0xvYWRpbmcoKSkge1xuICAgICAgICAgICAgPHAgY2xhc3M9XCJtdC0xIHRleHQteHMgdGV4dC1zbGF0ZS02MDBcIj5DYXJpY2FtZW50byBkaXNwb3NpdGl2aS4uLjwvcD5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgQGlmIChkZXZpY2VzTG9hZEVycm9yKCk7IGFzIGRldmljZXNFcnJvcikge1xuICAgICAgICAgICAgQGlmIChkZXZpY2VzRXJyb3IpIHtcbiAgICAgICAgICAgIDxwIHJvbGU9XCJhbGVydFwiIGNsYXNzPVwibXQtMSB0ZXh0LXhzIGZvbnQtbWVkaXVtIHRleHQtcm9zZS03MDBcIj57eyBkZXZpY2VzRXJyb3IgfX08L3A+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEBpZiAoZm9ybS5jb250cm9scy5kZXZpY2VJZC5pbnZhbGlkICYmIGZvcm0uY29udHJvbHMuZGV2aWNlSWQudG91Y2hlZCkge1xuICAgICAgICAgICAgPHAgcm9sZT1cImFsZXJ0XCIgY2xhc3M9XCJtdC0xIHRleHQteHMgZm9udC1tZWRpdW0gdGV4dC1yb3NlLTcwMFwiPklsIGRpc3Bvc2l0aXZvIMOoIG9iYmxpZ2F0b3Jpby48L3A+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImdyaWQgZ3JpZC1jb2xzLTEgaXRlbXMtY2VudGVyIGdhcC0yIG1kOmdyaWQtY29scy1bMTgwcHhfMWZyXVwiPlxuICAgICAgICA8bGFiZWwgZm9yPVwiZGF0YXBvaW50SWRcIiBjbGFzcz1cImZvbnQtc2VtaWJvbGQgdGV4dC1zbGF0ZS03MDBcIj5EYXRhcG9pbnQ6PC9sYWJlbD5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIDxzZWxlY3QgaWQ9XCJkYXRhcG9pbnRJZFwiIGZvcm1Db250cm9sTmFtZT1cImRhdGFwb2ludElkXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImgtOCB3LWZ1bGwgcm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLXNsYXRlLTQwMCBiZy13aGl0ZSBweC0yIHRleHQtc20gZm9jdXMtdmlzaWJsZTpvdXRsaW5lLTIgZm9jdXMtdmlzaWJsZTpvdXRsaW5lLW9mZnNldC0xIGZvY3VzLXZpc2libGU6b3V0bGluZS1zbGF0ZS02MDAgZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkIGRpc2FibGVkOmJnLXNsYXRlLTEwMCBkaXNhYmxlZDp0ZXh0LXNsYXRlLTUwMFwiXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1pbnZhbGlkXT1cImZvcm0uY29udHJvbHMuZGF0YXBvaW50SWQuaW52YWxpZCAmJiBmb3JtLmNvbnRyb2xzLmRhdGFwb2ludElkLnRvdWNoZWRcIj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiXCI+U2VsZXppb25hIGRhdGFwb2ludDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIEBmb3IgKGRhdGFwb2ludCBvZiBkYXRhcG9pbnRPcHRpb25zKCk7IHRyYWNrIGRhdGFwb2ludC5pZCkge1xuICAgICAgICAgICAgICAgIDxvcHRpb24gW3ZhbHVlXT1cImRhdGFwb2ludC5pZFwiPnt7IGRhdGFwb2ludC5uYW1lIH19PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9zZWxlY3Q+XG5cbiAgICAgICAgICAgIEBpZiAoZm9ybS5jb250cm9scy5kZXZpY2VJZC52YWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIDxwIGNsYXNzPVwibXQtMSB0ZXh0LXhzIHRleHQtc2xhdGUtNjAwXCI+U2VsZXppb25hIHByaW1hIHVuIGRpc3Bvc2l0aXZvIHBlciB2aXN1YWxpenphcmUgaSBkYXRhcG9pbnRcbiAgICAgICAgICAgICAgICBsZWdnaWJpbGkuPC9wPlxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBAaWYgKGZvcm0uY29udHJvbHMuZGV2aWNlSWQudmFsdWUubGVuZ3RoID4gMCAmJiBkYXRhcG9pbnRPcHRpb25zKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICA8cCBjbGFzcz1cIm10LTEgdGV4dC14cyBmb250LW1lZGl1bSB0ZXh0LWFtYmVyLTcwMFwiPk5lc3N1biBkYXRhcG9pbnQgbGVnZ2liaWxlIGRpc3BvbmliaWxlIHBlciBxdWVzdG9cbiAgICAgICAgICAgICAgICBkaXNwb3NpdGl2by48L3A+XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEBpZiAoZm9ybS5jb250cm9scy5kYXRhcG9pbnRJZC5pbnZhbGlkICYmIGZvcm0uY29udHJvbHMuZGF0YXBvaW50SWQudG91Y2hlZCkge1xuICAgICAgICAgICAgPHAgcm9sZT1cImFsZXJ0XCIgY2xhc3M9XCJtdC0xIHRleHQteHMgZm9udC1tZWRpdW0gdGV4dC1yb3NlLTcwMFwiPklsIGRhdGFwb2ludCDDqCBvYmJsaWdhdG9yaW8uPC9wPlxuICAgICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICB9XG5cbiAgICA8ZGl2IGNsYXNzPVwiZ3JpZCBncmlkLWNvbHMtMSBpdGVtcy1jZW50ZXIgZ2FwLTIgbWQ6Z3JpZC1jb2xzLVsxODBweF8xZnJdXCI+XG4gICAgICAgIDxsYWJlbCBmb3I9XCJwcmlvcml0eVwiIGNsYXNzPVwiZm9udC1zZW1pYm9sZCB0ZXh0LXNsYXRlLTcwMFwiPlByaW9yaXTDoDo8L2xhYmVsPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgICAgICAgIDxzZWxlY3QgaWQ9XCJwcmlvcml0eVwiIGZvcm1Db250cm9sTmFtZT1cInByaW9yaXR5XCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImgtOCByb3VuZGVkLW1kIGJvcmRlciBib3JkZXItc2xhdGUtNDAwIGJnLXdoaXRlIHB4LTIgdGV4dC1zbSBmb2N1cy12aXNpYmxlOm91dGxpbmUtMiBmb2N1cy12aXNpYmxlOm91dGxpbmUtb2Zmc2V0LTEgZm9jdXMtdmlzaWJsZTpvdXRsaW5lLXNsYXRlLTYwMFwiXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1pbnZhbGlkXT1cImZvcm0uY29udHJvbHMucHJpb3JpdHkuaW52YWxpZCAmJiBmb3JtLmNvbnRyb2xzLnByaW9yaXR5LnRvdWNoZWRcIj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uIFtuZ1ZhbHVlXT1cIm51bGxcIj5TZWxlemlvbmE8L29wdGlvbj5cbiAgICAgICAgICAgICAgICBAZm9yIChwcmlvcml0eSBvZiBwcmlvcml0eU9wdGlvbnM7IHRyYWNrIHByaW9yaXR5KSB7XG4gICAgICAgICAgICAgICAgPG9wdGlvbiBbbmdWYWx1ZV09XCJwcmlvcml0eVwiPnt7IHByaW9yaXR5IH19PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9zZWxlY3Q+XG5cbiAgICAgICAgICAgIEBpZiAoZm9ybS5jb250cm9scy5wcmlvcml0eS52YWx1ZTsgYXMgc2VsZWN0ZWRQcmlvcml0eSkge1xuICAgICAgICAgICAgPGFwcC1hbGFybS1wcmlvcml0eS1pbmRpY2F0b3IgW3ByaW9yaXR5XT1cInNlbGVjdGVkUHJpb3JpdHlcIiAvPlxuICAgICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIEBpZiAoZm9ybS5jb250cm9scy5wcmlvcml0eS5pbnZhbGlkICYmIGZvcm0uY29udHJvbHMucHJpb3JpdHkudG91Y2hlZCkge1xuICAgIDxwIHJvbGU9XCJhbGVydFwiIGNsYXNzPVwidGV4dC14cyBmb250LW1lZGl1bSB0ZXh0LXJvc2UtNzAwXCI+TGEgcHJpb3JpdMOgIMOoIG9iYmxpZ2F0b3JpYS48L3A+XG4gICAgfVxuXG4gICAgPGRpdiBjbGFzcz1cImdyaWQgZ3JpZC1jb2xzLTEgaXRlbXMtY2VudGVyIGdhcC0yIG1kOmdyaWQtY29scy1bMTgwcHhfMWZyXVwiPlxuICAgICAgICA8bGFiZWwgZm9yPVwidGhyZXNob2xkT3BlcmF0b3JcIiBjbGFzcz1cImZvbnQtc2VtaWJvbGQgdGV4dC1zbGF0ZS03MDBcIj5BdHRpdmEgc2UgaWwgdmFsb3JlIMOoOjwvbGFiZWw+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgICBAaWYgKGlzRWRpdE1vZGUoKSkge1xuICAgICAgICAgICAgPGlucHV0IGlkPVwidGhyZXNob2xkT3BlcmF0b3JSZWFkb25seVwiIHR5cGU9XCJ0ZXh0XCIgW3ZhbHVlXT1cImZvcm0uY29udHJvbHMudGhyZXNob2xkT3BlcmF0b3IudmFsdWUgPz8gJy0nXCJcbiAgICAgICAgICAgICAgICByZWFkb25seVxuICAgICAgICAgICAgICAgIGNsYXNzPVwiaC04IHctZnVsbCByb3VuZGVkLW1kIGJvcmRlciBib3JkZXItc2xhdGUtMzAwIGJnLXNsYXRlLTEwMCBweC0yIHRleHQtc20gdGV4dC1zbGF0ZS03MDBcIiAvPlxuICAgICAgICAgICAgPHAgY2xhc3M9XCJtdC0xIHRleHQteHMgdGV4dC1zbGF0ZS02MDBcIj5MJ29wZXJhdG9yZSDDqCBkZWZpbml0byBpbiBjcmVhemlvbmUgZSBub24gcHXDsiBlc3NlcmUgbW9kaWZpY2F0by48L3A+XG4gICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgIDxzZWxlY3QgaWQ9XCJ0aHJlc2hvbGRPcGVyYXRvclwiIGZvcm1Db250cm9sTmFtZT1cInRocmVzaG9sZE9wZXJhdG9yXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImgtOCByb3VuZGVkLW1kIGJvcmRlciBib3JkZXItc2xhdGUtNDAwIGJnLXdoaXRlIHB4LTIgdGV4dC1zbSBmb2N1cy12aXNpYmxlOm91dGxpbmUtMiBmb2N1cy12aXNpYmxlOm91dGxpbmUtb2Zmc2V0LTEgZm9jdXMtdmlzaWJsZTpvdXRsaW5lLXNsYXRlLTYwMFwiXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1pbnZhbGlkXT1cImZvcm0uY29udHJvbHMudGhyZXNob2xkT3BlcmF0b3IuaW52YWxpZCAmJiBmb3JtLmNvbnRyb2xzLnRocmVzaG9sZE9wZXJhdG9yLnRvdWNoZWRcIj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uIFtuZ1ZhbHVlXT1cIm51bGxcIj5PcGVyYXRvcmU8L29wdGlvbj5cbiAgICAgICAgICAgICAgICBAZm9yIChvcGVyYXRvciBvZiB0aHJlc2hvbGRPcGVyYXRvck9wdGlvbnMoKTsgdHJhY2sgb3BlcmF0b3IpIHtcbiAgICAgICAgICAgICAgICA8b3B0aW9uIFtuZ1ZhbHVlXT1cIm9wZXJhdG9yXCI+e3sgb3BlcmF0b3IgfX08L29wdGlvbj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICBAaWYgKCFpc0VkaXRNb2RlKCkgJiYgZm9ybS5jb250cm9scy50aHJlc2hvbGRPcGVyYXRvci5oYXNFcnJvcigncmVxdWlyZWQnKSAmJlxuICAgIGZvcm0uY29udHJvbHMudGhyZXNob2xkT3BlcmF0b3IudG91Y2hlZCkge1xuICAgIDxwIHJvbGU9XCJhbGVydFwiIGNsYXNzPVwidGV4dC14cyBmb250LW1lZGl1bSB0ZXh0LXJvc2UtNzAwXCI+TCdvcGVyYXRvcmUgZGkgc29nbGlhIMOoIG9iYmxpZ2F0b3Jpby48L3A+XG4gICAgfVxuXG4gICAgQGlmICghaXNFZGl0TW9kZSgpICYmIGZvcm0uY29udHJvbHMudGhyZXNob2xkT3BlcmF0b3IuaGFzRXJyb3IoJ3Vuc3VwcG9ydGVkT3BlcmF0b3InKSAmJlxuICAgIGZvcm0uY29udHJvbHMudGhyZXNob2xkT3BlcmF0b3IudG91Y2hlZCkge1xuICAgIDxwIHJvbGU9XCJhbGVydFwiIGNsYXNzPVwidGV4dC14cyBmb250LW1lZGl1bSB0ZXh0LXJvc2UtNzAwXCI+T3BlcmF0b3JlIG5vbiB2YWxpZG8gcGVyIGlsIGRhdGFwb2ludCBzZWxlemlvbmF0by48L3A+XG4gICAgfVxuXG4gICAgPGRpdiBjbGFzcz1cImdyaWQgZ3JpZC1jb2xzLTEgaXRlbXMtY2VudGVyIGdhcC0yIG1kOmdyaWQtY29scy1bMTgwcHhfMWZyXVwiPlxuICAgICAgICA8bGFiZWwgZm9yPVwidGhyZXNob2xkVmFsdWVcIiBjbGFzcz1cImZvbnQtc2VtaWJvbGQgdGV4dC1zbGF0ZS03MDBcIj5WYWxvcmUgc29nbGlhOjwvbGFiZWw+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8aW5wdXQgaWQ9XCJ0aHJlc2hvbGRWYWx1ZVwiIHR5cGU9XCJ0ZXh0XCIgaW5wdXRtb2RlPVwiZGVjaW1hbFwiIGZvcm1Db250cm9sTmFtZT1cInRocmVzaG9sZFZhbHVlXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5saXN0XT1cInRocmVzaG9sZFZhbHVlRW51bUhpbnRzKCkubGVuZ3RoID4gMCA/ICd0aHJlc2hvbGRFbnVtSGludHMnIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJoLTggdy1mdWxsIHJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci1zbGF0ZS00MDAgYmctd2hpdGUgcHgtMiB0ZXh0LXNtIGZvY3VzLXZpc2libGU6b3V0bGluZS0yIGZvY3VzLXZpc2libGU6b3V0bGluZS1vZmZzZXQtMSBmb2N1cy12aXNpYmxlOm91dGxpbmUtc2xhdGUtNjAwXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWludmFsaWRdPVwiZm9ybS5jb250cm9scy50aHJlc2hvbGRWYWx1ZS5pbnZhbGlkICYmIGZvcm0uY29udHJvbHMudGhyZXNob2xkVmFsdWUudG91Y2hlZFwiIC8+XG4gICAgICAgICAgICA8ZGF0YWxpc3QgaWQ9XCJ0aHJlc2hvbGRFbnVtSGludHNcIj5cbiAgICAgICAgICAgICAgICBAZm9yIChoaW50IG9mIHRocmVzaG9sZFZhbHVlRW51bUhpbnRzKCk7IHRyYWNrIGhpbnQpIHtcbiAgICAgICAgICAgICAgICA8b3B0aW9uIFt2YWx1ZV09XCJoaW50XCI+PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kYXRhbGlzdD5cblxuICAgICAgICAgICAgQGlmICghaXNFZGl0TW9kZSgpKSB7XG4gICAgICAgICAgICA8cCBjbGFzcz1cIm10LTEgdGV4dC14cyB0ZXh0LXNsYXRlLTYwMFwiPnt7IHRocmVzaG9sZFZhbHVlSGVscFRleHQoKSB9fTwvcD5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgQGlmIChmb3JtLmNvbnRyb2xzLnRocmVzaG9sZFZhbHVlLmhhc0Vycm9yKCdyZXF1aXJlZCcpICYmIGZvcm0uY29udHJvbHMudGhyZXNob2xkVmFsdWUudG91Y2hlZCkge1xuICAgICAgICAgICAgPHAgcm9sZT1cImFsZXJ0XCIgY2xhc3M9XCJtdC0xIHRleHQteHMgZm9udC1tZWRpdW0gdGV4dC1yb3NlLTcwMFwiPkxhIHNvZ2xpYSDDqCBvYmJsaWdhdG9yaWEuPC9wPlxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBAaWYgKGZvcm0uY29udHJvbHMudGhyZXNob2xkVmFsdWUuaGFzRXJyb3IoJ2ludmFsaWRFbnVtVGhyZXNob2xkJykgJiYgZm9ybS5jb250cm9scy50aHJlc2hvbGRWYWx1ZS50b3VjaGVkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgPHAgcm9sZT1cImFsZXJ0XCIgY2xhc3M9XCJtdC0xIHRleHQteHMgZm9udC1tZWRpdW0gdGV4dC1yb3NlLTcwMFwiPlZhbG9yZSBub24gcHJldmlzdG8gZGFsbCdlbnVtIGRlbCBkYXRhcG9pbnRcbiAgICAgICAgICAgICAgICBzZWxlemlvbmF0by48L3A+XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEBpZiAoZm9ybS5jb250cm9scy50aHJlc2hvbGRWYWx1ZS5oYXNFcnJvcigncGF0dGVybicpICYmIGZvcm0uY29udHJvbHMudGhyZXNob2xkVmFsdWUudG91Y2hlZCkge1xuICAgICAgICAgICAgPHAgcm9sZT1cImFsZXJ0XCIgY2xhc3M9XCJtdC0xIHRleHQteHMgZm9udC1tZWRpdW0gdGV4dC1yb3NlLTcwMFwiPkluc2VyaXNjaSB1biB2YWxvcmUgbnVtZXJpY28gdmFsaWRvLjwvcD5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiZ3JpZCBncmlkLWNvbHMtMSBnYXAtMiBtZDpncmlkLWNvbHMtWzE4MHB4XzFmcl1cIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInB0LTFcIj5cbiAgICAgICAgICAgIDxwIGNsYXNzPVwiZm9udC1zZW1pYm9sZCB0ZXh0LXNsYXRlLTcwMFwiPk9yYXJpOjwvcD5cbiAgICAgICAgICAgIDxwIGNsYXNzPVwibXQtMC41IHRleHQteHMgdGV4dC1zbGF0ZS01MDBcIj5JbnNlcmlzY2kgbCdpbnRlcnZhbGxvIGdpb3JuYWxpZXJvIGluIGZvcm1hdG8gMjQgb3JlLjwvcD5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJyb3VuZGVkLTJ4bCBib3JkZXIgYm9yZGVyLXNsYXRlLTIwMCBiZy1zbGF0ZS01MC84MCBwLTQgc2hhZG93LXNtIHNoYWRvdy1zbGF0ZS0yMDAvNjAgYmFja2Ryb3AtYmx1ci1zbVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyaWQgZ3JpZC1jb2xzLTEgZ2FwLTQgbWQ6Z3JpZC1jb2xzLTJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBtaW4tdy0wIGZsZXgtY29sIGdhcC0xLjVcIj5cbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImFybWluZ1RpbWVcIiBjbGFzcz1cImZvbnQtc2VtaWJvbGQgdGV4dC1zbGF0ZS03MDBcIj5PcmFyaW8gYXR0aXZhemlvbmU8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgaWQ9XCJhcm1pbmdUaW1lXCIgdHlwZT1cInRpbWVcIiBmb3JtQ29udHJvbE5hbWU9XCJhcm1pbmdUaW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaC0xMSB3LWZ1bGwgcm91bmRlZC14bCBib3JkZXIgYm9yZGVyLXNsYXRlLTMwMCBiZy13aGl0ZSBweC0zIHB5LTIgZm9udC1tb25vIHRleHQtYmFzZSB0cmFja2luZy13aWRlIHRleHQtc2xhdGUtOTAwIHNoYWRvdy1zbSB0cmFuc2l0aW9uIGZvY3VzLXZpc2libGU6Ym9yZGVyLXNsYXRlLTUwMCBmb2N1cy12aXNpYmxlOm91dGxpbmUtbm9uZSBmb2N1cy12aXNpYmxlOnJpbmctNCBmb2N1cy12aXNpYmxlOnJpbmctc2xhdGUtNTAwLzEwIGRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZCBkaXNhYmxlZDpiZy1zbGF0ZS0xMDAgZGlzYWJsZWQ6dGV4dC1zbGF0ZS01MDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1pbnZhbGlkXT1cImZvcm0uY29udHJvbHMuYXJtaW5nVGltZS5pbnZhbGlkICYmIGZvcm0uY29udHJvbHMuYXJtaW5nVGltZS50b3VjaGVkXCIgLz5cblxuICAgICAgICAgICAgICAgICAgICBAaWYgKGZvcm0uY29udHJvbHMuYXJtaW5nVGltZS5pbnZhbGlkICYmIGZvcm0uY29udHJvbHMuYXJtaW5nVGltZS50b3VjaGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIDxwIHJvbGU9XCJhbGVydFwiIGNsYXNzPVwidGV4dC14cyBmb250LW1lZGl1bSB0ZXh0LXJvc2UtNzAwXCI+TCdvcmFyaW8gZGkgYXR0aXZhemlvbmUgw6ggb2JibGlnYXRvcmlvLlxuICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IG1pbi13LTAgZmxleC1jb2wgZ2FwLTEuNVwiPlxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiZGVhcm1pbmdUaW1lXCIgY2xhc3M9XCJmb250LXNlbWlib2xkIHRleHQtc2xhdGUtNzAwXCI+T3JhcmlvIGRpc2F0dGl2YXppb25lPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IGlkPVwiZGVhcm1pbmdUaW1lXCIgdHlwZT1cInRpbWVcIiBmb3JtQ29udHJvbE5hbWU9XCJkZWFybWluZ1RpbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJoLTExIHctZnVsbCByb3VuZGVkLXhsIGJvcmRlciBib3JkZXItc2xhdGUtMzAwIGJnLXdoaXRlIHB4LTMgcHktMiBmb250LW1vbm8gdGV4dC1iYXNlIHRyYWNraW5nLXdpZGUgdGV4dC1zbGF0ZS05MDAgc2hhZG93LXNtIHRyYW5zaXRpb24gZm9jdXMtdmlzaWJsZTpib3JkZXItc2xhdGUtNTAwIGZvY3VzLXZpc2libGU6b3V0bGluZS1ub25lIGZvY3VzLXZpc2libGU6cmluZy00IGZvY3VzLXZpc2libGU6cmluZy1zbGF0ZS01MDAvMTAgZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkIGRpc2FibGVkOmJnLXNsYXRlLTEwMCBkaXNhYmxlZDp0ZXh0LXNsYXRlLTUwMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWludmFsaWRdPVwiZm9ybS5jb250cm9scy5kZWFybWluZ1RpbWUuaW52YWxpZCAmJiBmb3JtLmNvbnRyb2xzLmRlYXJtaW5nVGltZS50b3VjaGVkXCIgLz5cblxuICAgICAgICAgICAgICAgICAgICBAaWYgKGZvcm0uY29udHJvbHMuZGVhcm1pbmdUaW1lLmludmFsaWQgJiYgZm9ybS5jb250cm9scy5kZWFybWluZ1RpbWUudG91Y2hlZCkge1xuICAgICAgICAgICAgICAgICAgICA8cCByb2xlPVwiYWxlcnRcIiBjbGFzcz1cInRleHQteHMgZm9udC1tZWRpdW0gdGV4dC1yb3NlLTcwMFwiPkwnb3JhcmlvIGRpIGRpc2F0dGl2YXppb25lIMOoIG9iYmxpZ2F0b3Jpby5cbiAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwibXQtNCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWVuZCBnYXAtMiBib3JkZXItdCBib3JkZXItc2xhdGUtMzAwIHB0LTNcIj5cbiAgICAgICAgPGFwcC1hbGFybS1hY3Rpb24tYnV0dG9uIGxhYmVsPVwiQU5OVUxMQVwiIHRvbmU9XCJuZXV0cmFsXCIgKHByZXNzZWQpPVwib25DYW5jZWwoKVwiIC8+XG4gICAgICAgIDxhcHAtYWxhcm0tYWN0aW9uLWJ1dHRvbiBbbGFiZWxdPVwiaXNFZGl0TW9kZSgpID8gJ0FQUExJQ0EgTU9ESUZJQ0hFJyA6ICdDUkVBIEFMTEFSTUUnXCIgdG9uZT1cInByaW1hcnlcIlxuICAgICAgICAgICAgKHByZXNzZWQpPVwib25TdWJtaXQoKVwiIC8+XG4gICAgPC9kaXY+XG48L2Zvcm0+IiwiaW1wb3J0IHsgSW5qZWN0YWJsZSwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBbGFybVJ1bGUgfSBmcm9tICcuLi8uLi8uLi9jb3JlL2FsYXJtL21vZGVscy9hbGFybS1ydWxlLm1vZGVsJztcbmltcG9ydCB7IEFsYXJtVGltZU1hcHBlciB9IGZyb20gJy4uL21hcHBlcnMvYWxhcm0tdGltZS5tYXBwZXInO1xuaW1wb3J0IHsgQWxhcm1Db25maWdUYWJsZVJvdyB9IGZyb20gJy4uL21vZGVscy9hbGFybS1jb25maWctdGFibGUtcm93Lm1vZGVsJztcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBBbGFybUNvbmZpZ1RhYmxlUHJlc2VudGVyU2VydmljZSB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBhbGFybVRpbWVNYXBwZXIgPSBpbmplY3QoQWxhcm1UaW1lTWFwcGVyKTtcblxuICAgIHB1YmxpYyB0b1Jvd3MocnVsZXM6IEFsYXJtUnVsZVtdKTogQWxhcm1Db25maWdUYWJsZVJvd1tdIHtcbiAgICAgICAgcmV0dXJuIHJ1bGVzLm1hcCgocnVsZSkgPT4gKHtcbiAgICAgICAgICAgIGlkOiBydWxlLmlkLFxuICAgICAgICAgICAgbmFtZTogcnVsZS5uYW1lLFxuICAgICAgICAgICAgcG9zaXRpb246IHRoaXMudG9Qb3NpdGlvbkxhYmVsKHJ1bGUucG9zaXRpb24pLFxuICAgICAgICAgICAgcHJpb3JpdHk6IHJ1bGUucHJpb3JpdHksXG4gICAgICAgICAgICB0aHJlc2hvbGQ6IGAke3J1bGUudGhyZXNob2xkT3BlcmF0b3J9ICR7cnVsZS50aHJlc2hvbGRWYWx1ZX1gLFxuICAgICAgICAgICAgYXJtaW5nVGltZTogdGhpcy5hbGFybVRpbWVNYXBwZXIudG9Gb3JtVGltZShydWxlLmFybWluZ1RpbWUpLFxuICAgICAgICAgICAgZGVhcm1pbmdUaW1lOiB0aGlzLmFsYXJtVGltZU1hcHBlci50b0Zvcm1UaW1lKHJ1bGUuZGVhcm1pbmdUaW1lKSxcbiAgICAgICAgICAgIGlzRW5hYmxlZDogcnVsZS5pc0FybWVkLFxuICAgICAgICB9KSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB0b1Bvc2l0aW9uTGFiZWwocG9zaXRpb246IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBwb3NpdGlvblxuICAgICAgICAgICAgLnJlcGxhY2VBbGwoL1xccyotXFxzKi9nLCAnIC0gJylcbiAgICAgICAgICAgIC50cmltKCk7XG5cbiAgICAgICAgaWYgKG5vcm1hbGl6ZWQubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gJy0nO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZWQ7XG4gICAgfVxufSIsImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIE9uSW5pdCwgY29tcHV0ZWQsIGluamVjdCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0b1NpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IGZpbmFsaXplIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBbGFybVJ1bGUgfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL2FsYXJtL21vZGVscy9hbGFybS1ydWxlLm1vZGVsJztcbmltcG9ydCB7IEFsYXJtVGFibGVTaGVsbENvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uLy4uL3NoYXJlZC9jb21wb25lbnRzL2FsYXJtLXRhYmxlL2FsYXJtLXRhYmxlLXNoZWxsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBbGFybVByaW9yaXR5SW5kaWNhdG9yQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vLi4vc2hhcmVkL2NvbXBvbmVudHMvYWxhcm0tdGFibGUvYWxhcm0tcHJpb3JpdHktaW5kaWNhdG9yLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBbGFybUFjdGlvbkJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uLy4uL3NoYXJlZC9jb21wb25lbnRzL2FsYXJtLXRhYmxlL2FsYXJtLWFjdGlvbi1idXR0b24uY29tcG9uZW50JztcbmltcG9ydCB7IEFsYXJtVG9nZ2xlU3dpdGNoQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vLi4vc2hhcmVkL2NvbXBvbmVudHMvYWxhcm0tdGFibGUvYWxhcm0tdG9nZ2xlLXN3aXRjaC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ29uZmlybURpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uLy4uL3NoYXJlZC9jb21wb25lbnRzL2NvbmZpcm0tZGlhbG9nL2NvbmZpcm0tZGlhbG9nLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBNb2RhbFNoZWxsQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vLi4vc2hhcmVkL2NvbXBvbmVudHMvbW9kYWwtc2hlbGwvbW9kYWwtc2hlbGwuY29tcG9uZW50JztcbmltcG9ydCB7IEFsYXJtVGFibGVDb2x1bW4gfSBmcm9tICcuLi8uLi8uLi8uLi9zaGFyZWQvbW9kZWxzL2FsYXJtLXRhYmxlLm1vZGVsJztcbmltcG9ydCB7IEFsYXJtQ29uZmlnRm9ybUNvbXBvbmVudCB9IGZyb20gJy4uL2FsYXJtLWNvbmZpZy1mb3JtL2FsYXJtLWNvbmZpZy1mb3JtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBbGFybUNvbmZpZ0Zvcm1WYWx1ZSB9IGZyb20gJy4uLy4uL21vZGVscy9hbGFybS1jb25maWctZm9ybS12YWx1ZS5tb2RlbCc7XG5pbXBvcnQgeyBBbGFybUNvbmZpZ1N0YXRlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2FsYXJtLWNvbmZpZy1zdGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IEFsYXJtQ29uZmlnVGFibGVQcmVzZW50ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYWxhcm0tY29uZmlnLXRhYmxlLXByZXNlbnRlci5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiAnYXBwLWFsYXJtLWNvbmZpZy1wYWdlJyxcblx0dGVtcGxhdGVVcmw6ICcuL2FsYXJtLWNvbmZpZy1wYWdlLmNvbXBvbmVudC5odG1sJyxcblx0c3R5bGVVcmw6ICcuL2FsYXJtLWNvbmZpZy1wYWdlLmNvbXBvbmVudC5jc3MnLFxuXHRjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcblx0aW1wb3J0czogW1xuXHRcdEFsYXJtVGFibGVTaGVsbENvbXBvbmVudCxcblx0XHRBbGFybVByaW9yaXR5SW5kaWNhdG9yQ29tcG9uZW50LFxuXHRcdEFsYXJtQWN0aW9uQnV0dG9uQ29tcG9uZW50LFxuXHRcdEFsYXJtVG9nZ2xlU3dpdGNoQ29tcG9uZW50LFxuXHRcdENvbmZpcm1EaWFsb2dDb21wb25lbnQsXG5cdFx0TW9kYWxTaGVsbENvbXBvbmVudCxcblx0XHRBbGFybUNvbmZpZ0Zvcm1Db21wb25lbnQsXG5cdF0sXG59KVxuZXhwb3J0IGNsYXNzIEFsYXJtQ29uZmlnUGFnZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cdHByaXZhdGUgcmVhZG9ubHkgc3RhdGVTZXJ2aWNlID0gaW5qZWN0KEFsYXJtQ29uZmlnU3RhdGVTZXJ2aWNlKTtcblx0cHJpdmF0ZSByZWFkb25seSB0YWJsZVByZXNlbnRlciA9IGluamVjdChBbGFybUNvbmZpZ1RhYmxlUHJlc2VudGVyU2VydmljZSk7XG5cblx0cHVibGljIHJlYWRvbmx5IGNvbHVtbnM6IHJlYWRvbmx5IEFsYXJtVGFibGVDb2x1bW5bXSA9IFtcblx0XHR7IGlkOiAnbmFtZScsIGxhYmVsOiAnTm9tZScgfSxcblx0XHR7IGlkOiAncG9zaXRpb24nLCBsYWJlbDogJ1Bvc2l6aW9uZScgfSxcblx0XHR7IGlkOiAncHJpb3JpdHknLCBsYWJlbDogJ1ByaW9yaXRhJyB9LFxuXHRcdHsgaWQ6ICd0aHJlc2hvbGQnLCBsYWJlbDogJ1NvZ2xpYScgfSxcblx0XHR7IGlkOiAnYXJtaW5nVGltZScsIGxhYmVsOiAnT3JhcmlvIGF0dGl2YXppb25lJyB9LFxuXHRcdHsgaWQ6ICdkZWFybWluZ1RpbWUnLCBsYWJlbDogJ09yYXJpbyBkaXNhdHRpdmF6aW9uZScgfSxcblx0XHR7IGlkOiAnYWN0aW9ucycsIGxhYmVsOiAnQXppb25pJyB9LFxuXHRdO1xuXG5cdHB1YmxpYyByZWFkb25seSBhbGFybXMgPSB0b1NpZ25hbCh0aGlzLnN0YXRlU2VydmljZS5hbGFybXMkLCB7IGluaXRpYWxWYWx1ZTogW10gYXMgQWxhcm1SdWxlW10gfSk7XG5cdHB1YmxpYyByZWFkb25seSBlcnJvciA9IHRvU2lnbmFsKHRoaXMuc3RhdGVTZXJ2aWNlLmVycm9yJCwgeyBpbml0aWFsVmFsdWU6IG51bGwgYXMgc3RyaW5nIHwgbnVsbCB9KTtcblx0cHVibGljIHJlYWRvbmx5IGlzTW9kYWxPcGVuID0gc2lnbmFsKGZhbHNlKTtcblx0cHVibGljIHJlYWRvbmx5IGVkaXRpbmdSdWxlID0gc2lnbmFsPEFsYXJtUnVsZSB8IG51bGw+KG51bGwpO1xuXHRwdWJsaWMgcmVhZG9ubHkgcGVuZGluZ0RlbGV0ZSA9IHNpZ25hbDx7IGlkOiBzdHJpbmc7IG5hbWU6IHN0cmluZyB9IHwgbnVsbD4obnVsbCk7XG5cdHB1YmxpYyByZWFkb25seSBwZW5kaW5nVG9nZ2xlUnVsZUlkID0gc2lnbmFsPHN0cmluZyB8IG51bGw+KG51bGwpO1xuXG5cdHB1YmxpYyByZWFkb25seSByb3dzID0gY29tcHV0ZWQoKCkgPT4gdGhpcy50YWJsZVByZXNlbnRlci50b1Jvd3ModGhpcy5hbGFybXMoKSkpO1xuXHRwdWJsaWMgcmVhZG9ubHkgbW9kYWxUaXRsZSA9IGNvbXB1dGVkKCgpID0+XG5cdFx0dGhpcy5lZGl0aW5nUnVsZSgpID8gJ01vZGlmaWNhIGFsbGFybWUnIDogJ0NyZWF6aW9uZSBhbGxhcm1lJ1xuXHQpO1xuXG5cdHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcblx0XHR0aGlzLnN0YXRlU2VydmljZS5sb2FkQWxhcm1SdWxlcygpO1xuXHR9XG5cblx0cHVibGljIG9uQ3JlYXRlTmV3KCk6IHZvaWQge1xuXHRcdHRoaXMuZWRpdGluZ1J1bGUuc2V0KG51bGwpO1xuXHRcdHRoaXMuaXNNb2RhbE9wZW4uc2V0KHRydWUpO1xuXHR9XG5cblx0cHVibGljIG9uRWRpdChhbGFybVJ1bGVJZDogc3RyaW5nKTogdm9pZCB7XG5cdFx0Y29uc3QgcnVsZVRvRWRpdCA9IHRoaXMuYWxhcm1zKCkuZmluZCgocnVsZSkgPT4gcnVsZS5pZCA9PT0gYWxhcm1SdWxlSWQpID8/IG51bGw7XG5cdFx0aWYgKCFydWxlVG9FZGl0KSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dGhpcy5lZGl0aW5nUnVsZS5zZXQocnVsZVRvRWRpdCk7XG5cdFx0dGhpcy5pc01vZGFsT3Blbi5zZXQodHJ1ZSk7XG5cdH1cblxuXHRwdWJsaWMgb25Ub2dnbGVFbmFibGVkKGFsYXJtUnVsZUlkOiBzdHJpbmcsIGVuYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcblx0XHRpZiAodGhpcy5wZW5kaW5nVG9nZ2xlUnVsZUlkKCkgIT09IG51bGwpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR0aGlzLnBlbmRpbmdUb2dnbGVSdWxlSWQuc2V0KGFsYXJtUnVsZUlkKTtcblxuXHRcdHRoaXMuc3RhdGVTZXJ2aWNlXG5cdFx0XHQudG9nZ2xlRW5hYmxlZChhbGFybVJ1bGVJZCwgZW5hYmxlZClcblx0XHRcdC5waXBlKFxuXHRcdFx0XHRmaW5hbGl6ZSgoKSA9PiB7XG5cdFx0XHRcdFx0aWYgKHRoaXMucGVuZGluZ1RvZ2dsZVJ1bGVJZCgpID09PSBhbGFybVJ1bGVJZCkge1xuXHRcdFx0XHRcdFx0dGhpcy5wZW5kaW5nVG9nZ2xlUnVsZUlkLnNldChudWxsKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pLFxuXHRcdFx0KVxuXHRcdFx0LnN1YnNjcmliZSgpO1xuXHR9XG5cblx0cHVibGljIG9uRGVsZXRlKGlkOiBzdHJpbmcsIG5hbWU6IHN0cmluZyk6IHZvaWQge1xuXHRcdHRoaXMucGVuZGluZ0RlbGV0ZS5zZXQoeyBpZCwgbmFtZSB9KTtcblx0fVxuXG5cdHB1YmxpYyBvbkRlbGV0ZUNvbmZpcm1lZCgpOiB2b2lkIHtcblx0XHRjb25zdCBkZWxldGVDYW5kaWRhdGUgPSB0aGlzLnBlbmRpbmdEZWxldGUoKTtcblx0XHRpZiAoIWRlbGV0ZUNhbmRpZGF0ZSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHRoaXMuc3RhdGVTZXJ2aWNlLmRlbGV0ZUFsYXJtUnVsZShkZWxldGVDYW5kaWRhdGUuaWQpLnN1YnNjcmliZSgpO1xuXHRcdHRoaXMucGVuZGluZ0RlbGV0ZS5zZXQobnVsbCk7XG5cdH1cblxuXHRwdWJsaWMgb25EZWxldGVDYW5jZWxsZWQoKTogdm9pZCB7XG5cdFx0dGhpcy5wZW5kaW5nRGVsZXRlLnNldChudWxsKTtcblx0fVxuXG5cdHB1YmxpYyBnZXREZWxldGVDb25maXJtTWVzc2FnZSgpOiBzdHJpbmcge1xuXHRcdGNvbnN0IGRlbGV0ZUNhbmRpZGF0ZSA9IHRoaXMucGVuZGluZ0RlbGV0ZSgpO1xuXHRcdGlmICghZGVsZXRlQ2FuZGlkYXRlKSB7XG5cdFx0XHRyZXR1cm4gJ0NvbmZlcm1pIHF1ZXN0YSBvcGVyYXppb25lPyc7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGBDb25mZXJtaSBsJ2VsaW1pbmF6aW9uZSBkZWxsYSBzb2dsaWEgXCIke2RlbGV0ZUNhbmRpZGF0ZS5uYW1lfVwiP2A7XG5cdH1cblxuXHRwdWJsaWMgb25Gb3JtU3VibWl0dGVkKGZvcm1WYWx1ZTogQWxhcm1Db25maWdGb3JtVmFsdWUpOiB2b2lkIHtcblx0XHRjb25zdCBlZGl0aW5nUnVsZSA9IHRoaXMuZWRpdGluZ1J1bGUoKTtcblxuXHRcdGlmIChlZGl0aW5nUnVsZSkge1xuXHRcdFx0dGhpcy5zdGF0ZVNlcnZpY2UudXBkYXRlQWxhcm1SdWxlKGVkaXRpbmdSdWxlLmlkLCBmb3JtVmFsdWUpLnN1YnNjcmliZSgoKSA9PiB7XG5cdFx0XHRcdHRoaXMub25Nb2RhbENsb3NlZCgpO1xuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dGhpcy5zdGF0ZVNlcnZpY2UuY3JlYXRlQWxhcm1SdWxlKGZvcm1WYWx1ZSkuc3Vic2NyaWJlKCgpID0+IHtcblx0XHRcdHRoaXMub25Nb2RhbENsb3NlZCgpO1xuXHRcdH0pO1xuXHR9XG5cblx0cHVibGljIG9uTW9kYWxDbG9zZWQoKTogdm9pZCB7XG5cdFx0dGhpcy5pc01vZGFsT3Blbi5zZXQoZmFsc2UpO1xuXHRcdHRoaXMuZWRpdGluZ1J1bGUuc2V0KG51bGwpO1xuXHR9XG59XG4iLCI8c2VjdGlvbiBhcmlhLWxhYmVsPVwiQ29uZmlndXJhemlvbmUgYWxsYXJtaVwiIGNsYXNzPVwiYWxhcm0tY29uZmlnLXBhZ2UgY2FyZS1wYWdlIGNhcmUtZG90LWdyaWQgc2lkZWJhci1wYWdlXCI+XG4gICAgPGhlYWRlciBjbGFzcz1cImNhcmUtcGFnZV9faGVyb1wiPlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPHAgY2xhc3M9XCJjYXJlLWV5ZWJyb3dcIj5BbGxhcm1pPC9wPlxuICAgICAgICAgICAgPGgxIGNsYXNzPVwiY2FyZS10aXRsZVwiPkNvbmZpZ3VyYXppb25lIGFsbGFybWk8L2gxPlxuICAgICAgICAgICAgPHAgY2xhc3M9XCJjYXJlLXN1YnRpdGxlXCI+R2VzdGlzY2kgc29nbGllIGUgcGlhbmlmaWNhemlvbmkgY29uIHVuYSB2aXN0YSB0YWJlbGxhcmUgdW5pY2EuPC9wPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2hlYWRlcj5cblxuICAgIEBpZiAoZXJyb3IoKTsgYXMgZXJyb3JNZXNzYWdlKSB7XG4gICAgQGlmIChlcnJvck1lc3NhZ2UpIHtcbiAgICA8cCByb2xlPVwiYWxlcnRcIiBhcmlhLWxpdmU9XCJwb2xpdGVcIlxuICAgICAgICBjbGFzcz1cIm1iLTMgcm91bmRlZC14bCBib3JkZXIgYm9yZGVyLXJvc2UtMjAwIGJnLXJvc2UtNTAgcHgtNCBweS0zIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1yb3NlLTcwMCBzaGFkb3ctc21cIj5cbiAgICAgICAge3sgZXJyb3JNZXNzYWdlIH19XG4gICAgPC9wPlxuICAgIH1cbiAgICB9XG5cbiAgICA8YXBwLWFsYXJtLXRhYmxlLXNoZWxsIFt0aXRsZV09XCInQWxsYXJtaSdcIiBbY2FwdGlvbl09XCInVGFiZWxsYSBjb25maWd1cmF6aW9uZSBhbGxhcm1pJ1wiIFtjb2x1bW5zXT1cImNvbHVtbnNcIlxuICAgICAgICBbc2hvd0NyZWF0ZUJ1dHRvbl09XCJ0cnVlXCIgW2NyZWF0ZUJ1dHRvbkFyaWFMYWJlbF09XCInQ3JlYSBudW92YSByZWdvbGEgYWxsYXJtZSdcIlxuICAgICAgICAoY3JlYXRlUmVxdWVzdGVkKT1cIm9uQ3JlYXRlTmV3KClcIj5cbiAgICAgICAgQGlmIChyb3dzKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIDx0cj5cbiAgICAgICAgICAgIDx0ZCBbYXR0ci5jb2xzcGFuXT1cImNvbHVtbnMubGVuZ3RoXCIgY2xhc3M9XCJweC01IHB5LTE0IHRleHQtY2VudGVyIHRleHQtc20gdGV4dC1zbGF0ZS02MDBcIj5cbiAgICAgICAgICAgICAgICBAaWYgKGVycm9yKCkpIHtcbiAgICAgICAgICAgICAgICBJbXBvc3NpYmlsZSBjYXJpY2FyZSBsZSByZWdvbGUgZGkgYWxsYXJtZS4gVmVyaWZpY2EgbGEgc2Vzc2lvbmUgbyByaXByb3ZhIHRyYSBwb2NvLlxuICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgIE5lc3N1bmEgcmVnb2xhIGNvbmZpZ3VyYXRhLlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgIDwvdHI+XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICBAZm9yIChyb3cgb2Ygcm93cygpOyB0cmFjayByb3cuaWQpIHtcbiAgICAgICAgPHRyIGNsYXNzPVwiZ3JvdXAgdHJhbnNpdGlvbi1jb2xvcnMgaG92ZXI6Ymctc2xhdGUtNTAvODBcIj5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cInB4LTUgcHktMy41IGFsaWduLW1pZGRsZSB0ZXh0LXNtIGZvbnQtc2VtaWJvbGQgdGV4dC1zbGF0ZS05MDBcIj5cbiAgICAgICAgICAgICAgICB7eyByb3cubmFtZSB9fVxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cInB4LTUgcHktMy41IGFsaWduLW1pZGRsZSB0ZXh0LXNtIHRleHQtc2xhdGUtNzAwXCI+e3sgcm93LnBvc2l0aW9uIH19PC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cInB4LTUgcHktMy41IGFsaWduLW1pZGRsZVwiPlxuICAgICAgICAgICAgICAgIDxhcHAtYWxhcm0tcHJpb3JpdHktaW5kaWNhdG9yIFtwcmlvcml0eV09XCJyb3cucHJpb3JpdHlcIiAvPlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cInB4LTUgcHktMy41IGFsaWduLW1pZGRsZSB0ZXh0LXNtIHRleHQtc2xhdGUtNzAwXCI+e3sgcm93LnRocmVzaG9sZCB9fTwvdGQ+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJweC01IHB5LTMuNSBhbGlnbi1taWRkbGUgdGV4dC1zbSB0ZXh0LXNsYXRlLTcwMFwiPnt7IHJvdy5hcm1pbmdUaW1lIH19PC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cInB4LTUgcHktMy41IGFsaWduLW1pZGRsZSB0ZXh0LXNtIHRleHQtc2xhdGUtNzAwXCI+e3sgcm93LmRlYXJtaW5nVGltZSB9fTwvdGQ+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJweC01IHB5LTMuNSBhbGlnbi1taWRkbGVcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGFwcC1hbGFybS1hY3Rpb24tYnV0dG9uIGxhYmVsPVwiTU9ESUZJQ0FcIiBbYXJpYUxhYmVsXT1cIidNb2RpZmljYSByZWdvbGEgJyArIHJvdy5uYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChwcmVzc2VkKT1cIm9uRWRpdChyb3cuaWQpXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPGFwcC1hbGFybS1hY3Rpb24tYnV0dG9uIGxhYmVsPVwiRUxJTUlOQVwiIHRvbmU9XCJkYW5nZXJcIiBbYXJpYUxhYmVsXT1cIidFbGltaW5hIHJlZ29sYSAnICsgcm93Lm5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKHByZXNzZWQpPVwib25EZWxldGUocm93LmlkLCByb3cubmFtZSlcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8YXBwLWFsYXJtLXRvZ2dsZS1zd2l0Y2ggW2NoZWNrZWRdPVwicm93LmlzRW5hYmxlZFwiIFtkaXNhYmxlZF09XCJwZW5kaW5nVG9nZ2xlUnVsZUlkKCkgPT09IHJvdy5pZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXJpYUxhYmVsXT1cIidBYmlsaXRhIHJlZ29sYSAnICsgcm93Lm5hbWVcIiAodG9nZ2xlZCk9XCJvblRvZ2dsZUVuYWJsZWQocm93LmlkLCAkZXZlbnQpXCIgLz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgIDwvdHI+XG4gICAgICAgIH1cbiAgICAgICAgfVxuICAgIDwvYXBwLWFsYXJtLXRhYmxlLXNoZWxsPlxuXG4gICAgPGFwcC1tb2RhbC1zaGVsbCBbb3Blbl09XCJpc01vZGFsT3BlbigpXCIgW3RpdGxlXT1cIm1vZGFsVGl0bGUoKVwiXG4gICAgICAgIGRlc2NyaXB0aW9uPVwiQ29tcGlsYSBpIGNhbXBpIHJpY2hpZXN0aSBlIGNvbmZlcm1hIHBlciBzYWx2YXJlIGxhIHJlZ29sYS5cIiAoY2xvc2VkKT1cIm9uTW9kYWxDbG9zZWQoKVwiPlxuICAgICAgICBAaWYgKGlzTW9kYWxPcGVuKCkpIHtcbiAgICAgICAgPGFwcC1hbGFybS1jb25maWctZm9ybSBbbW9kZV09XCJlZGl0aW5nUnVsZSgpID8gJ2VkaXQnIDogJ2NyZWF0ZSdcIiBbaW5pdGlhbFJ1bGVdPVwiZWRpdGluZ1J1bGUoKVwiXG4gICAgICAgICAgICAoc3VibWl0dGVkRm9ybSk9XCJvbkZvcm1TdWJtaXR0ZWQoJGV2ZW50KVwiIChjYW5jZWxsZWQpPVwib25Nb2RhbENsb3NlZCgpXCIgLz5cbiAgICAgICAgfVxuICAgIDwvYXBwLW1vZGFsLXNoZWxsPlxuXG4gICAgQGlmIChwZW5kaW5nRGVsZXRlKCkpIHtcbiAgICA8YXBwLWNvbmZpcm0tZGlhbG9nIFttZXNzYWdlXT1cImdldERlbGV0ZUNvbmZpcm1NZXNzYWdlKClcIiBjb25maXJtTGFiZWw9XCJFbGltaW5hXCIgY2FuY2VsTGFiZWw9XCJBbm51bGxhXCJcbiAgICAgICAgKGNvbmZpcm1lZCk9XCJvbkRlbGV0ZUNvbmZpcm1lZCgpXCIgKGNhbmNlbGxlZCk9XCJvbkRlbGV0ZUNhbmNlbGxlZCgpXCIgLz5cbiAgICB9XG48L3Nl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 \ No newline at end of file diff --git a/frontend/dist-instrumented/chunk-L7QG5RI3.js.map b/frontend/dist-instrumented/chunk-L7QG5RI3.js.map new file mode 100644 index 00000000..72257974 --- /dev/null +++ b/frontend/dist-instrumented/chunk-L7QG5RI3.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["src/app/shared/components/alarm-table/alarm-toggle-switch.component.ts", "src/app/shared/components/alarm-table/alarm-toggle-switch.component.html", "src/app/shared/components/modal-shell/modal-shell.component.ts", "src/app/shared/components/modal-shell/modal-shell.component.html", "src/app/features/alarm-configuration/mappers/alarm-rule-form.mapper.ts", "src/app/features/alarm-configuration/services/device-datapoint-extraction.service.ts", "src/app/features/alarm-configuration/helpers/alarm-config-form-validation.helper.ts", "src/app/features/alarm-configuration/services/alarm-config-form-state.service.ts", "src/app/features/alarm-configuration/helpers/alarm-config-form-field-orchestrator.helper.ts", "src/app/features/alarm-configuration/components/alarm-config-form/alarm-config-form.component.ts", "src/app/features/alarm-configuration/components/alarm-config-form/alarm-config-form.component.html", "src/app/features/alarm-configuration/services/alarm-config-table-presenter.service.ts", "src/app/features/alarm-configuration/components/alarm-config-page/alarm-config-page.component.ts", "src/app/features/alarm-configuration/components/alarm-config-page/alarm-config-page.component.html"], + "sourcesContent": ["import { ChangeDetectionStrategy, Component, computed, input, output } from '@angular/core';\n\n@Component({\n selector: 'app-alarm-toggle-switch',\n templateUrl: './alarm-toggle-switch.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AlarmToggleSwitchComponent {\n public readonly checked = input(false);\n public readonly disabled = input(false);\n public readonly ariaLabel = input('Abilita o disabilita');\n\n public readonly toggled = output();\n\n public readonly trackClass = computed(() => {\n const baseClass =\n 'relative inline-flex h-5 w-9 items-center rounded-full border transition focus-visible:outline-2 focus-visible:outline-offset-2';\n\n if (this.checked()) {\n return `${baseClass} border-yellow-700 bg-yellow-400 focus-visible:outline-yellow-500 disabled:border-slate-400 disabled:bg-slate-300`;\n }\n\n return `${baseClass} border-slate-500 bg-white focus-visible:outline-slate-500 disabled:border-slate-400 disabled:bg-slate-200`;\n });\n\n public readonly thumbClass = computed(() => {\n const baseClass =\n 'inline-block h-4 w-4 transform rounded-full border border-slate-500 bg-white transition';\n\n if (this.checked()) {\n return `${baseClass} translate-x-4`;\n }\n\n return `${baseClass} translate-x-0.5`;\n });\n\n public onToggle(): void {\n if (this.disabled()) {\n return;\n }\n\n this.toggled.emit(!this.checked());\n }\n}\n", "", "import { ChangeDetectionStrategy, Component, input, output } from '@angular/core';\n\n@Component({\n selector: 'app-modal-shell',\n templateUrl: './modal-shell.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ModalShellComponent {\n public readonly open = input(false);\n public readonly title = input.required();\n public readonly description = input(null);\n public readonly closeLabel = input('Chiudi finestra');\n\n public readonly closed = output();\n\n public onClose(): void {\n this.closed.emit();\n }\n}\n", "@if (open()) {\n\n
\n

{{ title() }}

\n \n
\n\n @if (description()) {\n

{{ description() }}

\n }\n\n \n
\n}", "import { Injectable, inject } from '@angular/core';\nimport { AlarmRule } from '../../../core/alarm/models/alarm-rule.model';\nimport { ThresholdOperator } from '../../../core/alarm/models/threshold-operator.enum';\nimport { AlarmConfigFormValue } from '../models/alarm-config-form-value.model';\nimport { AlarmTimeMapper } from './alarm-time.mapper';\n\n@Injectable({ providedIn: 'root' })\nexport class AlarmRuleFormMapper {\n private readonly alarmTimeMapper = inject(AlarmTimeMapper);\n\n public toFormValue(rule: AlarmRule): AlarmConfigFormValue {\n return {\n name: rule.name,\n plantId: '',\n deviceId: rule.deviceId,\n datapointId: rule.datapointId ?? '',\n priority: rule.priority,\n thresholdOperator: this.toFormThresholdOperator(rule.thresholdOperator),\n thresholdValue: rule.thresholdValue,\n armingTime: this.alarmTimeMapper.toFormTime(rule.armingTime),\n dearmingTime: this.alarmTimeMapper.toFormTime(rule.dearmingTime),\n enabled: rule.isArmed,\n };\n }\n\n private toFormThresholdOperator(operator: string): ThresholdOperator {\n const normalizedOperator = operator.trim();\n\n if (normalizedOperator === '>') {\n return ThresholdOperator.GREATER_THAN;\n }\n if (normalizedOperator === '>=') {\n return ThresholdOperator.GREATER_THAN_OR_EQUAL;\n }\n if (normalizedOperator === '<') {\n return ThresholdOperator.LESS_THAN;\n }\n if (normalizedOperator === '<=') {\n return ThresholdOperator.LESS_THAN_OR_EQUAL;\n }\n if (normalizedOperator === '=') {\n return ThresholdOperator.EQUAL_TO;\n }\n\n throw new Error(`Operatore soglia non supportato: ${operator}`);\n }\n}", "import { Injectable } from '@angular/core';\nimport { ThresholdOperator } from '../../../core/alarm/models/threshold-operator.enum';\nimport { Apartment } from '../../apartment-monitor/models/apartment.model';\nimport { Datapoint } from '../../apartment-monitor/models/datapoint.model';\nimport { PlantDto } from '../../apartment-monitor/models/plant-response.model';\n\nexport type DeviceDatapointOption = {\n id: string;\n label: string;\n datapoints: Datapoint[];\n};\n\n@Injectable({ providedIn: 'root' })\nexport class DeviceDatapointExtractionService {\n private readonly numericThresholdPattern = /^[+-]?\\d+([.]\\d+)?$/;\n\n public extractDeviceOptions(apartment: Apartment): DeviceDatapointOption[] {\n return apartment.rooms.flatMap((room) =>\n room.devices.map((device) => ({\n id: device.id,\n label: `${room.name} - ${device.name}`,\n datapoints: this.normalizeDatapoints(device.datapoints),\n }))\n );\n }\n\n public findReadableDatapoints(\n deviceId: string,\n deviceOptions: readonly DeviceDatapointOption[],\n ): Datapoint[] {\n const selectedDevice = deviceOptions.find((option) => option.id === deviceId);\n if (!selectedDevice) {\n return [];\n }\n\n return selectedDevice.datapoints.filter((datapoint) => datapoint.readable);\n }\n\n public findDatapointById(datapointId: string, datapoints: readonly Datapoint[]): Datapoint | null {\n return datapoints.find((datapoint) => datapoint.id === datapointId) ?? null;\n }\n\n //lookup per edit\n public findDatapointByDeviceAndDatapointId(\n plants: readonly PlantDto[],\n deviceId: string,\n datapointId: string,\n ): Datapoint | null {\n const normalizedDeviceId = deviceId.trim();\n const normalizedDatapointId = datapointId.trim();\n\n if (normalizedDeviceId.length === 0 || normalizedDatapointId.length === 0) {\n return null;\n }\n\n for (const plant of plants) {\n for (const room of plant.rooms ?? []) {\n const selectedDevice = room.devices.find((device) => device.id === normalizedDeviceId);\n if (!selectedDevice) {\n continue;\n }\n\n const selectedDatapoint = (selectedDevice.datapoints ?? []).find(\n (datapoint) => datapoint.id === normalizedDatapointId,\n );\n\n if (!selectedDatapoint) {\n continue;\n }\n\n return {\n id: selectedDatapoint.id,\n name: selectedDatapoint.name,\n readable: selectedDatapoint.readable,\n writable: selectedDatapoint.writable,\n valueType: selectedDatapoint.valueType,\n enum: this.normalizeEnumValues(selectedDatapoint.enum),\n sfeType: selectedDatapoint.sfeType,\n };\n }\n }\n\n return null;\n }\n\n public getAllowedOperators(datapoint: Datapoint | null): ThresholdOperator[] {\n if (!this.usesEnumeratedThreshold(datapoint)) {\n return Object.values(ThresholdOperator);\n }\n\n return [ThresholdOperator.EQUAL_TO];\n }\n\n public getEnumValues(datapoint: Datapoint | null): string[] {\n if (!datapoint) {\n return [];\n }\n\n return this.normalizeEnumValues(datapoint.enum);\n }\n\n //dice se il datapoint richiede una threshold enumerata come on/off o numerica \n public usesEnumeratedThreshold(datapoint: Datapoint | null): boolean {\n return this.getEnumValues(datapoint).length > 0;\n }\n\n public normalizeThresholdValue(datapoint: Datapoint | null, value: string): string {\n const trimmedValue = value.trim();\n const enumValues = this.getEnumValues(datapoint);\n\n if (enumValues.length === 0) {\n return trimmedValue;\n }\n\n const matchingEnumValue = enumValues.find(\n (enumValue) => enumValue.toLowerCase() === trimmedValue.toLowerCase(),\n );\n\n return matchingEnumValue ?? trimmedValue;\n }\n\n public isThresholdValueValid(datapoint: Datapoint | null, value: string): boolean {\n const trimmedValue = value.trim();\n if (trimmedValue.length === 0) {\n return false;\n }\n\n const enumValues = this.getEnumValues(datapoint);\n if (enumValues.length > 0) {\n return enumValues.some(\n (enumValue) => enumValue.toLowerCase() === trimmedValue.toLowerCase(),\n );\n }\n\n return this.numericThresholdPattern.test(trimmedValue);\n }\n\n private normalizeDatapoints(datapoints: readonly Datapoint[] | undefined): Datapoint[] {\n return (datapoints ?? []).map((datapoint) => ({\n ...datapoint,\n enum: this.normalizeEnumValues(datapoint.enum),\n }));\n }\n\n private normalizeEnumValues(values: readonly string[] | undefined): string[] {\n const normalizedValues = (values ?? [])\n .map((value) => value.trim())\n .filter((value) => value.length > 0);\n\n return Array.from(new Set(normalizedValues));\n }\n}\n\n", "import { Injectable } from '@angular/core';\nimport { AbstractControl, ValidationErrors, ValidatorFn, Validators } from '@angular/forms';\nimport { ThresholdOperator } from '../../../core/alarm/models/threshold-operator.enum';\nimport { Datapoint } from '../../apartment-monitor/models/datapoint.model';\nimport { DeviceDatapointExtractionService } from '../services/device-datapoint-extraction.service';\n\nexport type ApplyThresholdConstraintsParams = {\n mode: 'create' | 'edit';\n datapoint: Datapoint | null;\n thresholdOperatorControl: AbstractControl;\n thresholdValueControl: AbstractControl;\n};\n\n@Injectable({ providedIn: 'root' })\nexport class AlarmConfigFormValidationHelper {\n constructor(private readonly datapointExtraction: DeviceDatapointExtractionService) { }\n\n public applyThresholdConstraints({\n mode,\n datapoint,\n thresholdOperatorControl,\n thresholdValueControl,\n }: ApplyThresholdConstraintsParams): void {\n const allowedOperators = this.resolveAllowedOperators(\n mode,\n datapoint,\n thresholdOperatorControl.value as ThresholdOperator | null,\n );\n\n thresholdOperatorControl.setValidators([\n Validators.required,\n this.operatorAllowedValidator(allowedOperators),\n ]);\n\n if (datapoint === null) {\n thresholdValueControl.setValidators([Validators.required]);\n } else if (this.datapointExtraction.usesEnumeratedThreshold(datapoint)) {\n const enumValues = this.datapointExtraction.getEnumValues(datapoint);\n thresholdValueControl.setValidators([\n Validators.required,\n this.enumThresholdValidator(enumValues),\n ]);\n\n const normalizedValue = this.datapointExtraction.normalizeThresholdValue(\n datapoint,\n String(thresholdValueControl.value ?? ''),\n );\n if (normalizedValue !== thresholdValueControl.value) {\n thresholdValueControl.setValue(normalizedValue, { emitEvent: false });\n }\n } else {\n thresholdValueControl.setValidators([\n Validators.required,\n Validators.pattern(/^[+-]?\\d+([.]\\d+)?$/),\n ]);\n }\n\n if (\n thresholdOperatorControl.value !== null &&\n !allowedOperators.includes(thresholdOperatorControl.value as ThresholdOperator)\n ) {\n thresholdOperatorControl.setValue(null, { emitEvent: false });\n }\n\n thresholdOperatorControl.updateValueAndValidity({ emitEvent: false });\n thresholdValueControl.updateValueAndValidity({ emitEvent: false });\n }\n\n private resolveAllowedOperators(\n mode: 'create' | 'edit',\n datapoint: Datapoint | null,\n currentOperator: ThresholdOperator | null,\n ): ThresholdOperator[] {\n if (datapoint !== null) {\n return this.datapointExtraction.getAllowedOperators(datapoint);\n }\n\n if (mode === 'edit' && currentOperator !== null) {\n return [currentOperator];\n }\n\n return Object.values(ThresholdOperator);\n }\n\n private operatorAllowedValidator(allowedOperators: readonly ThresholdOperator[]): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n const value = control.value as ThresholdOperator | null;\n if (value === null) {\n return null;\n }\n\n return allowedOperators.includes(value) ? null : { unsupportedOperator: true };\n };\n }\n\n private enumThresholdValidator(enumValues: readonly string[]): ValidatorFn {\n const normalizedEnumValues = new Set(enumValues.map((enumValue) => enumValue.toLowerCase()));\n\n return (control: AbstractControl): ValidationErrors | null => {\n const value = String(control.value ?? '').trim();\n if (value.length === 0) {\n return null;\n }\n\n return normalizedEnumValues.has(value.toLowerCase())\n ? null\n : { invalidEnumThreshold: true };\n };\n }\n}\n", "import { Injectable, signal } from '@angular/core';\nimport { Observable, catchError, forkJoin, map, of, switchMap, tap } from 'rxjs';\nimport { Datapoint } from '../../apartment-monitor/models/datapoint.model';\nimport { WardPlantDto } from '../../ward-management/models/ward-api.dto';\nimport { WardApiService } from '../../ward-management/services/ward-api.service';\nimport { ApartmentApiService } from '../../apartment-monitor/services/apartment-api.service';\nimport { DeviceDatapointExtractionService, DeviceDatapointOption } from './device-datapoint-extraction.service';\n\n@Injectable()\nexport class AlarmConfigFormStateService {\n private hasRequestedPlants = false;\n\n constructor(\n private readonly wardApi: WardApiService,\n private readonly apartmentApi: ApartmentApiService,\n private readonly datapointExtraction: DeviceDatapointExtractionService,\n ) { }\n\n public readonly plants = signal([]);\n public readonly plantsLoadError = signal(null);\n public readonly devicesLoadError = signal(null);\n public readonly isDevicesLoading = signal(false);\n\n public ensurePlantsLoaded(mode: 'create' | 'edit'): Observable {\n if (mode === 'edit' || this.plants().length > 0 || this.hasRequestedPlants) {\n return of(void 0);\n }\n\n this.hasRequestedPlants = true;\n\n return this.loadAllPlants().pipe(\n tap((plants) => {\n this.plantsLoadError.set(null);\n this.plants.set(plants);\n }),\n map(() => void 0),\n catchError(() => {\n this.plants.set([]);\n this.plantsLoadError.set('Errore durante il caricamento degli impianti disponibili.');\n return of(void 0);\n }),\n );\n }\n\n public resetDevicesLoadState(): void {\n this.devicesLoadError.set(null);\n this.isDevicesLoading.set(false);\n }\n\n public loadDeviceOptionsByPlant(plantId: string): Observable {\n const normalizedPlantId = plantId.trim();\n this.devicesLoadError.set(null);\n\n if (normalizedPlantId.length === 0) {\n this.isDevicesLoading.set(false);\n return of([]);\n }\n\n this.isDevicesLoading.set(true);\n\n return this.apartmentApi.loadApartmentViewForPlantId(normalizedPlantId).pipe(\n map((apartment) => this.datapointExtraction.extractDeviceOptions(apartment)),\n tap(() => {\n this.isDevicesLoading.set(false);\n }),\n catchError(() => {\n this.devicesLoadError.set('Errore durante il caricamento dei dispositivi.');\n this.isDevicesLoading.set(false);\n return of([] as DeviceDatapointOption[]);\n }),\n );\n }\n\n\n public resolveDatapointForEdit(deviceId: string, datapointId: string): Observable {\n const normalizedDeviceId = deviceId.trim();\n const normalizedDatapointId = datapointId.trim();\n\n if (normalizedDeviceId.length === 0 || normalizedDatapointId.length === 0) {\n return of(null);\n }\n\n return this.apartmentApi.getAllPlants().pipe(\n map((plants) =>\n this.datapointExtraction.findDatapointByDeviceAndDatapointId(\n plants,\n normalizedDeviceId,\n normalizedDatapointId,\n ),\n ),\n catchError(() => of(null)),\n );\n }\n\n private loadAllPlants(): Observable {\n return forkJoin({\n availablePlants: this.wardApi.getAvailablePlants().pipe(catchError(() => of([] as WardPlantDto[]))),\n wards: this.wardApi.getWards().pipe(catchError(() => of([]))),\n }).pipe(\n switchMap(({ availablePlants, wards }) => {\n if (wards.length === 0) {\n return of(this.mergePlants(availablePlants, []));\n }\n\n const wardPlantsRequests = wards.map((ward) =>\n this.wardApi\n .getPlantsByWardId(ward.id)\n .pipe(catchError(() => of([] as WardPlantDto[]))),\n );\n\n return forkJoin(wardPlantsRequests).pipe(\n map((assignedPlantsByWard) => this.mergePlants(availablePlants, assignedPlantsByWard.flat())),\n );\n }),\n );\n }\n\n private mergePlants(availablePlants: WardPlantDto[], assignedPlants: WardPlantDto[]): WardPlantDto[] {\n const mergedMap = new Map();\n\n for (const plant of [...availablePlants, ...assignedPlants]) {\n mergedMap.set(plant.id, plant);\n }\n\n return Array.from(mergedMap.values()).sort((first, second) => first.name.localeCompare(second.name));\n }\n}\n", "import { Injectable } from '@angular/core';\nimport { AbstractControl, Validators } from '@angular/forms';\nimport { Datapoint } from '../../apartment-monitor/models/datapoint.model';\nimport { DeviceDatapointExtractionService, DeviceDatapointOption } from '../services/device-datapoint-extraction.service';\n\ntype AlarmConfigFormLike = {\n controls: {\n name: AbstractControl;\n plantId: AbstractControl;\n deviceId: AbstractControl;\n datapointId: AbstractControl;\n thresholdOperator: AbstractControl;\n };\n};\n\nexport type DeviceSelectionResult = {\n normalizedDeviceId: string;\n readableDatapoints: Datapoint[];\n autoSelectedDatapointId: string | null;\n};\n\nexport type DatapointSelectionResult = {\n normalizedDatapointId: string;\n selectedDatapoint: Datapoint | null;\n};\n\n@Injectable({ providedIn: 'root' })\nexport class AlarmConfigFormFieldOrchestratorHelper {\n constructor(private readonly datapointExtraction: DeviceDatapointExtractionService) { }\n\n public applyModeState(form: AlarmConfigFormLike, mode: 'create' | 'edit'): void {\n const isEditMode = mode === 'edit';\n\n if (isEditMode) {\n form.controls.name.disable({ emitEvent: false });\n form.controls.plantId.clearValidators();\n form.controls.plantId.disable({ emitEvent: false });\n form.controls.deviceId.disable({ emitEvent: false });\n form.controls.datapointId.clearValidators();\n form.controls.datapointId.disable({ emitEvent: false });\n form.controls.thresholdOperator.disable({ emitEvent: false });\n form.controls.plantId.updateValueAndValidity({ emitEvent: false });\n form.controls.datapointId.updateValueAndValidity({ emitEvent: false });\n form.controls.thresholdOperator.updateValueAndValidity({ emitEvent: false });\n return;\n }\n\n form.controls.name.enable({ emitEvent: false });\n form.controls.plantId.setValidators([Validators.required]);\n form.controls.datapointId.setValidators([Validators.required]);\n form.controls.plantId.enable({ emitEvent: false });\n form.controls.thresholdOperator.enable({ emitEvent: false });\n form.controls.plantId.updateValueAndValidity({ emitEvent: false });\n form.controls.datapointId.updateValueAndValidity({ emitEvent: false });\n form.controls.thresholdOperator.updateValueAndValidity({ emitEvent: false });\n\n if (String(form.controls.plantId.value ?? '').trim().length === 0) {\n form.controls.deviceId.disable({ emitEvent: false });\n form.controls.datapointId.disable({ emitEvent: false });\n return;\n }\n\n form.controls.deviceId.enable({ emitEvent: false });\n\n if (String(form.controls.deviceId.value ?? '').trim().length === 0) {\n form.controls.datapointId.disable({ emitEvent: false });\n return;\n }\n\n form.controls.datapointId.enable({ emitEvent: false });\n }\n\n public resetDatapointControl(form: AlarmConfigFormLike): void {\n form.controls.datapointId.setValue('', { emitEvent: false });\n form.controls.datapointId.updateValueAndValidity({ emitEvent: false });\n }\n\n public resolveDeviceSelection(\n deviceId: string,\n deviceOptions: readonly DeviceDatapointOption[],\n ): DeviceSelectionResult {\n const normalizedDeviceId = deviceId.trim();\n if (normalizedDeviceId.length === 0) {\n return {\n normalizedDeviceId,\n readableDatapoints: [],\n autoSelectedDatapointId: null,\n };\n }\n\n const readableDatapoints = this.datapointExtraction.findReadableDatapoints(\n normalizedDeviceId,\n deviceOptions,\n );\n\n return {\n normalizedDeviceId,\n readableDatapoints,\n autoSelectedDatapointId: readableDatapoints.length === 1 ? readableDatapoints[0].id : null,\n };\n }\n\n public resolveDatapointSelection(\n datapointId: string,\n datapointOptions: readonly Datapoint[],\n ): DatapointSelectionResult {\n const normalizedDatapointId = datapointId.trim();\n\n return {\n normalizedDatapointId,\n selectedDatapoint: this.datapointExtraction.findDatapointById(normalizedDatapointId, datapointOptions),\n };\n }\n}\n", "import { ChangeDetectionStrategy, Component, DestroyRef, computed, effect, inject, input, output, signal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormBuilder, ReactiveFormsModule, Validators } from '@angular/forms';\nimport { Datapoint } from '../../../apartment-monitor/models/datapoint.model';\nimport { AlarmPriority } from '../../../../core/alarm/models/alarm-priority.enum';\nimport { AlarmRule } from '../../../../core/alarm/models/alarm-rule.model';\nimport { ThresholdOperator } from '../../../../core/alarm/models/threshold-operator.enum';\nimport { AlarmRuleFormMapper } from '../../mappers/alarm-rule-form.mapper';\nimport { AlarmConfigFormValue } from '../../models/alarm-config-form-value.model';\nimport { AlarmPriorityIndicatorComponent } from '../../../../shared/components/alarm-table/alarm-priority-indicator.component';\nimport { AlarmActionButtonComponent } from '../../../../shared/components/alarm-table/alarm-action-button.component';\nimport { DeviceDatapointExtractionService, DeviceDatapointOption } from '../../services/device-datapoint-extraction.service';\nimport { AlarmConfigFormValidationHelper } from '../../helpers/alarm-config-form-validation.helper';\nimport { AlarmConfigFormStateService } from '../../services/alarm-config-form-state.service';\nimport { AlarmConfigFormFieldOrchestratorHelper } from '../../helpers/alarm-config-form-field-orchestrator.helper';\n\n@Component({\n\tselector: 'app-alarm-config-form',\n\ttemplateUrl: './alarm-config-form.component.html',\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\tproviders: [AlarmConfigFormStateService],\n\timports: [ReactiveFormsModule, AlarmPriorityIndicatorComponent, AlarmActionButtonComponent],\n})\nexport class AlarmConfigFormComponent {\n\tpublic readonly mode = input<'create' | 'edit'>('create');\n\tpublic readonly initialRule = input(null);\n\n\tpublic readonly submittedForm = output();\n\tpublic readonly cancelled = output();\n\n\tprivate readonly fb = inject(FormBuilder);\n\tprivate readonly formMapper = inject(AlarmRuleFormMapper);\n\tprivate readonly formState = inject(AlarmConfigFormStateService);\n\tprivate readonly datapointExtraction = inject(DeviceDatapointExtractionService);\n\tprivate readonly validationHelper = inject(AlarmConfigFormValidationHelper);\n\tprivate readonly fieldOrchestrator = inject(AlarmConfigFormFieldOrchestratorHelper);\n\tprivate readonly destroyRef = inject(DestroyRef);\n\tprivate editDatapointLookupVersion = 0;\n\n\tpublic readonly form = this.buildForm();\n\tpublic readonly isEditMode = computed(() => this.mode() === 'edit');\n\tpublic readonly plants = this.formState.plants;\n\tpublic readonly deviceOptions = signal([]);\n\tpublic readonly datapointOptions = signal([]);\n\tpublic readonly plantsLoadError = this.formState.plantsLoadError;\n\tpublic readonly devicesLoadError = this.formState.devicesLoadError;\n\tpublic readonly isDevicesLoading = this.formState.isDevicesLoading;\n\tpublic readonly selectedDeviceId = signal('');\n\tpublic readonly selectedDatapointId = signal('');\n\tpublic readonly selectedDatapoint = signal(null);\n\tpublic readonly isPlantSelectionVisible = computed(() => !this.isEditMode());\n\tpublic readonly editPosition = computed(() => {\n\t\tif (!this.isEditMode()) {\n\t\t\treturn '-';\n\t\t}\n\n\t\tconst position = this.initialRule()?.position ?? '';\n\t\treturn this.toPositionLabel(position);\n\t});\n\n\tpublic readonly priorityOptions = Object.values(AlarmPriority).filter(\n\t\t(value): value is AlarmPriority => typeof value === 'number'\n\t);\n\tpublic readonly thresholdOperatorOptions = computed(() => {\n\t\tif (!this.isEditMode()) {\n\t\t\treturn this.datapointExtraction.getAllowedOperators(this.selectedDatapoint());\n\t\t}\n\n\t\tconst datapoint = this.selectedDatapoint();\n\t\tif (datapoint !== null) {\n\t\t\treturn this.datapointExtraction.getAllowedOperators(datapoint);\n\t\t}\n\n\t\tconst currentOperator = this.form.controls.thresholdOperator.value;\n\t\treturn currentOperator === null ? Object.values(ThresholdOperator) : [currentOperator];\n\t});\n\tpublic readonly thresholdValueEnumHints = computed(() =>\n\t\tthis.datapointExtraction.getEnumValues(this.selectedDatapoint())\n\t);\n\tpublic readonly thresholdValueHelpText = computed(() => {\n\t\tif (this.isEditMode()) {\n\t\t\tif (this.thresholdValueEnumHints().length > 0) {\n\t\t\t\treturn 'Inserisci uno dei valori previsti dal datapoint associato alla regola.';\n\t\t\t}\n\n\t\t\treturn 'Inserisci un valore numerico (es. 10, 10.5, -3).';\n\t\t}\n\n\t\tif (this.selectedDeviceId().length === 0) {\n\t\t\treturn 'Seleziona prima il dispositivo.';\n\t\t}\n\n\t\tif (this.selectedDatapointId().length === 0) {\n\t\t\treturn 'Seleziona un datapoint leggibile per impostare la soglia.';\n\t\t}\n\n\t\tif (this.thresholdValueEnumHints().length > 0) {\n\t\t\treturn 'Inserisci uno dei valori previsti dal datapoint selezionato.';\n\t\t}\n\n\t\treturn 'Inserisci un valore numerico (es. 10, 10.5, -3).';\n\t});\n\n\tconstructor() {\n\t\teffect(() => {\n\t\t\tconst rule = this.initialRule();\n\t\t\tif (rule) {\n\t\t\t\tconst lookupVersion = ++this.editDatapointLookupVersion;\n\t\t\t\tthis.form.reset(this.formMapper.toFormValue(rule));\n\t\t\t\tthis.deviceOptions.set([{ id: rule.deviceId, label: rule.deviceId, datapoints: [] }]);\n\t\t\t\tthis.datapointOptions.set([]);\n\t\t\t\tthis.selectedDeviceId.set(rule.deviceId);\n\t\t\t\tthis.selectedDatapointId.set(rule.datapointId ?? '');\n\t\t\t\tthis.selectedDatapoint.set(null);\n\t\t\t\tthis.applyModeState();\n\t\t\t\tthis.applyThresholdConstraints(null);\n\t\t\t\tthis.loadEditDatapointMetadata(rule.deviceId, rule.datapointId ?? '', lookupVersion);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.editDatapointLookupVersion += 1;\n\t\t\tthis.form.reset(this.createEmptyFormValue());\n\t\t\tthis.deviceOptions.set([]);\n\t\t\tthis.datapointOptions.set([]);\n\t\t\tthis.selectedDeviceId.set('');\n\t\t\tthis.selectedDatapointId.set('');\n\t\t\tthis.selectedDatapoint.set(null);\n\t\t\tthis.applyModeState();\n\t\t\tthis.applyThresholdConstraints(null);\n\t\t\tthis.ensurePlantsLoaded();\n\t\t});\n\n\t\tthis.form.controls.plantId.valueChanges\n\t\t\t.pipe(takeUntilDestroyed(this.destroyRef))\n\t\t\t.subscribe((plantId) => {\n\t\t\t\tif (this.mode() === 'edit') {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.onPlantChanged(plantId);\n\t\t\t});\n\n\t\tthis.form.controls.deviceId.valueChanges\n\t\t\t.pipe(takeUntilDestroyed(this.destroyRef))\n\t\t\t.subscribe((deviceId) => {\n\t\t\t\tif (this.mode() === 'edit') {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.onDeviceChanged(deviceId);\n\t\t\t});\n\n\t\tthis.form.controls.datapointId.valueChanges\n\t\t\t.pipe(takeUntilDestroyed(this.destroyRef))\n\t\t\t.subscribe((datapointId) => {\n\t\t\t\tif (this.mode() === 'edit') {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.onDatapointChanged(datapointId);\n\t\t\t});\n\t}\n\n\tprivate buildForm() {\n\t\treturn this.fb.nonNullable.group({\n\t\t\tname: [''],\n\t\t\tplantId: [''],\n\t\t\tdeviceId: ['', [Validators.required]],\n\t\t\tdatapointId: [''],\n\t\t\tpriority: [null as AlarmPriority | null, [Validators.required]],\n\t\t\tthresholdOperator: [null as ThresholdOperator | null, [Validators.required]],\n\t\t\tthresholdValue: ['', [Validators.required]],\n\t\t\tarmingTime: ['', [Validators.required, Validators.pattern(/^([01]\\d|2[0-3]):([0-5]\\d)$/)]],\n\t\t\tdearmingTime: ['', [Validators.required, Validators.pattern(/^([01]\\d|2[0-3]):([0-5]\\d)$/)]],\n\t\t\tenabled: [true],\n\t\t});\n\t}\n\n\t//valore iniziale del form in create mode\n\tprivate createEmptyFormValue(): AlarmConfigFormValue {\n\t\treturn {\n\t\t\tname: '',\n\t\t\tplantId: '',\n\t\t\tdeviceId: '',\n\t\t\tdatapointId: '',\n\t\t\tpriority: null,\n\t\t\tthresholdOperator: null,\n\t\t\tthresholdValue: '',\n\t\t\tarmingTime: '',\n\t\t\tdearmingTime: '',\n\t\t\tenabled: true,\n\t\t};\n\t}\n\n\tpublic onSubmit(): void {\n\t\tif (this.mode() === 'create' && this.selectedDatapoint() !== null) {\n\t\t\tconst normalizedThreshold = this.datapointExtraction.normalizeThresholdValue(\n\t\t\t\tthis.selectedDatapoint(),\n\t\t\t\tthis.form.controls.thresholdValue.value,\n\t\t\t);\n\t\t\tthis.form.controls.thresholdValue.setValue(normalizedThreshold, { emitEvent: false });\n\t\t\tthis.form.controls.thresholdValue.updateValueAndValidity({ emitEvent: false });\n\t\t}\n\n\t\tif (this.form.invalid) {\n\t\t\tthis.form.markAllAsTouched();\n\t\t\treturn;\n\t\t}\n\n\t\tconst formValue = this.form.getRawValue();\n\t\tconst lockedRule = this.initialRule();\n\t\tif (this.mode() === 'edit' && lockedRule) {\n\t\t\tthis.submittedForm.emit({ ...formValue, name: lockedRule.name });\n\t\t\treturn;\n\t\t}\n\n\t\tthis.submittedForm.emit(formValue);\n\t}\n\n\tprivate applyModeState(): void {\n\t\tthis.fieldOrchestrator.applyModeState(this.form, this.mode());\n\t}\n\n\tprivate ensurePlantsLoaded(): void {\n\t\tthis.formState.ensurePlantsLoaded(this.mode())\n\t\t\t.pipe(takeUntilDestroyed(this.destroyRef))\n\t\t\t.subscribe();\n\t}\n\n\t//opzioni dispositovo per gl'impianto scelto\n\tprivate onPlantChanged(plantId: string): void {\n\t\tthis.formState.resetDevicesLoadState();\n\t\tthis.deviceOptions.set([]);\n\t\tthis.form.controls.deviceId.setValue('', { emitEvent: false });\n\t\tthis.onDeviceChanged('');\n\n\t\tif (plantId.trim().length === 0) {\n\t\t\tthis.form.controls.deviceId.disable({ emitEvent: false });\n\t\t\treturn;\n\t\t}\n\n\t\tthis.form.controls.deviceId.disable({ emitEvent: false });\n\n\t\tthis.formState\n\t\t\t.loadDeviceOptionsByPlant(plantId)\n\t\t\t.pipe(takeUntilDestroyed(this.destroyRef))\n\t\t\t.subscribe((options) => {\n\t\t\t\tthis.deviceOptions.set(options);\n\t\t\t\tif (options.length === 0) {\n\t\t\t\t\tthis.form.controls.deviceId.disable({ emitEvent: false });\n\t\t\t\t} else {\n\t\t\t\t\tthis.form.controls.deviceId.enable({ emitEvent: false });\n\t\t\t\t}\n\t\t\t});\n\t}\n\n\t//trasforma device -> tutti datapoint leggibili\n\tprivate onDeviceChanged(deviceId: string): void {\n\t\tconst deviceSelection = this.fieldOrchestrator.resolveDeviceSelection(deviceId, this.deviceOptions());\n\t\tthis.selectedDeviceId.set(deviceSelection.normalizedDeviceId);\n\t\tthis.datapointOptions.set([]);\n\t\tthis.selectedDatapoint.set(null);\n\t\tthis.selectedDatapointId.set('');\n\t\tthis.fieldOrchestrator.resetDatapointControl(this.form);\n\t\tthis.applyThresholdConstraints(null);\n\n\t\tif (deviceSelection.normalizedDeviceId.length === 0) {\n\t\t\tthis.form.controls.datapointId.disable({ emitEvent: false });\n\t\t\treturn;\n\t\t}\n\n\t\tthis.datapointOptions.set(deviceSelection.readableDatapoints);\n\t\tthis.form.controls.datapointId.enable({ emitEvent: false });\n\n\t\tif (deviceSelection.autoSelectedDatapointId !== null) {\n\t\t\tthis.form.controls.datapointId.setValue(deviceSelection.autoSelectedDatapointId, { emitEvent: false });\n\t\t\tthis.onDatapointChanged(deviceSelection.autoSelectedDatapointId);\n\t\t}\n\t}\n\n\tprivate onDatapointChanged(datapointId: string): void {\n\t\tconst datapointSelection = this.fieldOrchestrator.resolveDatapointSelection(datapointId, this.datapointOptions());\n\t\tthis.selectedDatapointId.set(datapointSelection.normalizedDatapointId);\n\t\tthis.selectedDatapoint.set(datapointSelection.selectedDatapoint);\n\t\tthis.applyThresholdConstraints(datapointSelection.selectedDatapoint);\n\t}\n\n\tprivate applyThresholdConstraints(datapoint: Datapoint | null): void {\n\t\tthis.validationHelper.applyThresholdConstraints({\n\t\t\tmode: this.mode(),\n\t\t\tdatapoint,\n\t\t\tthresholdOperatorControl: this.form.controls.thresholdOperator,\n\t\t\tthresholdValueControl: this.form.controls.thresholdValue,\n\t\t});\n\t}\n\n\tprivate loadEditDatapointMetadata(deviceId: string, datapointId: string, lookupVersion: number): void {\n\t\tif (this.mode() !== 'edit') {\n\t\t\treturn;\n\t\t}\n\n\t\tconst normalizedDatapointId = datapointId.trim();\n\t\tif (normalizedDatapointId.length === 0) {\n\t\t\tif (lookupVersion !== this.editDatapointLookupVersion || this.mode() !== 'edit') {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.selectedDatapoint.set(null);\n\t\t\tthis.applyThresholdConstraints(null);\n\t\t\treturn;\n\t\t}\n\n\t\tthis.formState\n\t\t\t.resolveDatapointForEdit(deviceId, normalizedDatapointId)\n\t\t\t.pipe(takeUntilDestroyed(this.destroyRef))\n\t\t\t.subscribe((resolvedDatapoint) => {\n\t\t\t\tif (lookupVersion !== this.editDatapointLookupVersion || this.mode() !== 'edit') {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.selectedDatapoint.set(resolvedDatapoint);\n\t\t\t\tthis.applyThresholdConstraints(resolvedDatapoint);\n\t\t\t});\n\t}\n\n\tprivate toPositionLabel(position: string): string {\n\t\tconst normalized = position.replaceAll(/\\s*-\\s*/g, ' - ').trim();\n\t\tif (normalized.length === 0) {\n\t\t\treturn '-';\n\t\t}\n\n\t\treturn normalized;\n\t}\n\n\tpublic onCancel(): void {\n\t\tthis.cancelled.emit();\n\t}\n}\n\n\n\n", "
\n
\n \n
\n \n\n @if (isEditMode()) {\n

Il nome della regola d'allarme è definito in creazione e non può\n essere\n modificato.

\n }\n
\n
\n\n @if (isEditMode()) {\n
\n \n
\n \n
\n
\n }\n\n @if (isPlantSelectionVisible()) {\n
\n \n
\n \n\n @if (plantsLoadError(); as plantsError) {\n @if (plantsError) {\n

{{ plantsError }}

\n }\n }\n\n @if (form.controls.plantId.invalid && form.controls.plantId.touched) {\n

L'impianto è obbligatorio.

\n }\n
\n
\n }\n\n @if (!isEditMode()) {\n
\n \n
\n \n\n @if (!isEditMode() && form.controls.plantId.value.length === 0) {\n

Seleziona prima l'impianto per visualizzare i dispositivi\n disponibili.

\n }\n\n @if (isDevicesLoading()) {\n

Caricamento dispositivi...

\n }\n\n @if (devicesLoadError(); as devicesError) {\n @if (devicesError) {\n

{{ devicesError }}

\n }\n }\n\n @if (form.controls.deviceId.invalid && form.controls.deviceId.touched) {\n

Il dispositivo è obbligatorio.

\n }\n
\n
\n\n
\n \n
\n \n\n @if (form.controls.deviceId.value.length === 0) {\n

Seleziona prima un dispositivo per visualizzare i datapoint\n leggibili.

\n }\n\n @if (form.controls.deviceId.value.length > 0 && datapointOptions().length === 0) {\n

Nessun datapoint leggibile disponibile per questo\n dispositivo.

\n }\n\n @if (form.controls.datapointId.invalid && form.controls.datapointId.touched) {\n

Il datapoint è obbligatorio.

\n }\n
\n
\n }\n\n
\n \n
\n \n\n @if (form.controls.priority.value; as selectedPriority) {\n \n }\n
\n
\n\n @if (form.controls.priority.invalid && form.controls.priority.touched) {\n

La priorità è obbligatoria.

\n }\n\n
\n \n
\n @if (isEditMode()) {\n \n

L'operatore è definito in creazione e non può essere modificato.

\n } @else {\n \n }\n
\n
\n\n @if (!isEditMode() && form.controls.thresholdOperator.hasError('required') &&\n form.controls.thresholdOperator.touched) {\n

L'operatore di soglia è obbligatorio.

\n }\n\n @if (!isEditMode() && form.controls.thresholdOperator.hasError('unsupportedOperator') &&\n form.controls.thresholdOperator.touched) {\n

Operatore non valido per il datapoint selezionato.

\n }\n\n
\n \n
\n 0 ? 'thresholdEnumHints' : null\"\n class=\"h-8 w-full rounded-md border border-slate-400 bg-white px-2 text-sm focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-slate-600\"\n [attr.aria-invalid]=\"form.controls.thresholdValue.invalid && form.controls.thresholdValue.touched\" />\n \n @for (hint of thresholdValueEnumHints(); track hint) {\n \n }\n \n\n @if (!isEditMode()) {\n

{{ thresholdValueHelpText() }}

\n }\n\n @if (form.controls.thresholdValue.hasError('required') && form.controls.thresholdValue.touched) {\n

La soglia è obbligatoria.

\n }\n\n @if (form.controls.thresholdValue.hasError('invalidEnumThreshold') && form.controls.thresholdValue.touched)\n {\n

Valore non previsto dall'enum del datapoint\n selezionato.

\n }\n\n @if (form.controls.thresholdValue.hasError('pattern') && form.controls.thresholdValue.touched) {\n

Inserisci un valore numerico valido.

\n }\n
\n
\n\n
\n
\n

Orari:

\n

Inserisci l'intervallo giornaliero in formato 24 ore.

\n
\n\n \n
\n
\n \n \n\n @if (form.controls.armingTime.invalid && form.controls.armingTime.touched) {\n

L'orario di attivazione è obbligatorio.\n

\n }\n
\n\n
\n \n \n\n @if (form.controls.dearmingTime.invalid && form.controls.dearmingTime.touched) {\n

L'orario di disattivazione è obbligatorio.\n

\n }\n
\n
\n
\n \n\n
\n \n \n
\n
", "import { Injectable, inject } from '@angular/core';\nimport { AlarmRule } from '../../../core/alarm/models/alarm-rule.model';\nimport { AlarmTimeMapper } from '../mappers/alarm-time.mapper';\nimport { AlarmConfigTableRow } from '../models/alarm-config-table-row.model';\n\n@Injectable({ providedIn: 'root' })\nexport class AlarmConfigTablePresenterService {\n private readonly alarmTimeMapper = inject(AlarmTimeMapper);\n\n public toRows(rules: AlarmRule[]): AlarmConfigTableRow[] {\n return rules.map((rule) => ({\n id: rule.id,\n name: rule.name,\n position: this.toPositionLabel(rule.position),\n priority: rule.priority,\n threshold: `${rule.thresholdOperator} ${rule.thresholdValue}`,\n armingTime: this.alarmTimeMapper.toFormTime(rule.armingTime),\n dearmingTime: this.alarmTimeMapper.toFormTime(rule.dearmingTime),\n isEnabled: rule.isArmed,\n }));\n }\n\n private toPositionLabel(position: string): string {\n const normalized = position\n .replaceAll(/\\s*-\\s*/g, ' - ')\n .trim();\n\n if (normalized.length === 0) {\n return '-';\n }\n\n return normalized;\n }\n}", "import { ChangeDetectionStrategy, Component, OnInit, computed, inject, signal } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { finalize } from 'rxjs';\nimport { AlarmRule } from '../../../../core/alarm/models/alarm-rule.model';\nimport { AlarmTableShellComponent } from '../../../../shared/components/alarm-table/alarm-table-shell.component';\nimport { AlarmPriorityIndicatorComponent } from '../../../../shared/components/alarm-table/alarm-priority-indicator.component';\nimport { AlarmActionButtonComponent } from '../../../../shared/components/alarm-table/alarm-action-button.component';\nimport { AlarmToggleSwitchComponent } from '../../../../shared/components/alarm-table/alarm-toggle-switch.component';\nimport { ConfirmDialogComponent } from '../../../../shared/components/confirm-dialog/confirm-dialog.component';\nimport { ModalShellComponent } from '../../../../shared/components/modal-shell/modal-shell.component';\nimport { AlarmTableColumn } from '../../../../shared/models/alarm-table.model';\nimport { AlarmConfigFormComponent } from '../alarm-config-form/alarm-config-form.component';\nimport { AlarmConfigFormValue } from '../../models/alarm-config-form-value.model';\nimport { AlarmConfigStateService } from '../../services/alarm-config-state.service';\nimport { AlarmConfigTablePresenterService } from '../../services/alarm-config-table-presenter.service';\n\n@Component({\n\tselector: 'app-alarm-config-page',\n\ttemplateUrl: './alarm-config-page.component.html',\n\tstyleUrl: './alarm-config-page.component.css',\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\timports: [\n\t\tAlarmTableShellComponent,\n\t\tAlarmPriorityIndicatorComponent,\n\t\tAlarmActionButtonComponent,\n\t\tAlarmToggleSwitchComponent,\n\t\tConfirmDialogComponent,\n\t\tModalShellComponent,\n\t\tAlarmConfigFormComponent,\n\t],\n})\nexport class AlarmConfigPageComponent implements OnInit {\n\tprivate readonly stateService = inject(AlarmConfigStateService);\n\tprivate readonly tablePresenter = inject(AlarmConfigTablePresenterService);\n\n\tpublic readonly columns: readonly AlarmTableColumn[] = [\n\t\t{ id: 'name', label: 'Nome' },\n\t\t{ id: 'position', label: 'Posizione' },\n\t\t{ id: 'priority', label: 'Priorita' },\n\t\t{ id: 'threshold', label: 'Soglia' },\n\t\t{ id: 'armingTime', label: 'Orario attivazione' },\n\t\t{ id: 'dearmingTime', label: 'Orario disattivazione' },\n\t\t{ id: 'actions', label: 'Azioni' },\n\t];\n\n\tpublic readonly alarms = toSignal(this.stateService.alarms$, { initialValue: [] as AlarmRule[] });\n\tpublic readonly error = toSignal(this.stateService.error$, { initialValue: null as string | null });\n\tpublic readonly isModalOpen = signal(false);\n\tpublic readonly editingRule = signal(null);\n\tpublic readonly pendingDelete = signal<{ id: string; name: string } | null>(null);\n\tpublic readonly pendingToggleRuleId = signal(null);\n\n\tpublic readonly rows = computed(() => this.tablePresenter.toRows(this.alarms()));\n\tpublic readonly modalTitle = computed(() =>\n\t\tthis.editingRule() ? 'Modifica allarme' : 'Creazione allarme'\n\t);\n\n\tpublic ngOnInit(): void {\n\t\tthis.stateService.loadAlarmRules();\n\t}\n\n\tpublic onCreateNew(): void {\n\t\tthis.editingRule.set(null);\n\t\tthis.isModalOpen.set(true);\n\t}\n\n\tpublic onEdit(alarmRuleId: string): void {\n\t\tconst ruleToEdit = this.alarms().find((rule) => rule.id === alarmRuleId) ?? null;\n\t\tif (!ruleToEdit) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.editingRule.set(ruleToEdit);\n\t\tthis.isModalOpen.set(true);\n\t}\n\n\tpublic onToggleEnabled(alarmRuleId: string, enabled: boolean): void {\n\t\tif (this.pendingToggleRuleId() !== null) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.pendingToggleRuleId.set(alarmRuleId);\n\n\t\tthis.stateService\n\t\t\t.toggleEnabled(alarmRuleId, enabled)\n\t\t\t.pipe(\n\t\t\t\tfinalize(() => {\n\t\t\t\t\tif (this.pendingToggleRuleId() === alarmRuleId) {\n\t\t\t\t\t\tthis.pendingToggleRuleId.set(null);\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t)\n\t\t\t.subscribe();\n\t}\n\n\tpublic onDelete(id: string, name: string): void {\n\t\tthis.pendingDelete.set({ id, name });\n\t}\n\n\tpublic onDeleteConfirmed(): void {\n\t\tconst deleteCandidate = this.pendingDelete();\n\t\tif (!deleteCandidate) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.stateService.deleteAlarmRule(deleteCandidate.id).subscribe();\n\t\tthis.pendingDelete.set(null);\n\t}\n\n\tpublic onDeleteCancelled(): void {\n\t\tthis.pendingDelete.set(null);\n\t}\n\n\tpublic getDeleteConfirmMessage(): string {\n\t\tconst deleteCandidate = this.pendingDelete();\n\t\tif (!deleteCandidate) {\n\t\t\treturn 'Confermi questa operazione?';\n\t\t}\n\n\t\treturn `Confermi l'eliminazione della soglia \"${deleteCandidate.name}\"?`;\n\t}\n\n\tpublic onFormSubmitted(formValue: AlarmConfigFormValue): void {\n\t\tconst editingRule = this.editingRule();\n\n\t\tif (editingRule) {\n\t\t\tthis.stateService.updateAlarmRule(editingRule.id, formValue).subscribe(() => {\n\t\t\t\tthis.onModalClosed();\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\tthis.stateService.createAlarmRule(formValue).subscribe(() => {\n\t\t\tthis.onModalClosed();\n\t\t});\n\t}\n\n\tpublic onModalClosed(): void {\n\t\tthis.isModalOpen.set(false);\n\t\tthis.editingRule.set(null);\n\t}\n}\n", "
\n
\n
\n

Allarmi

\n

Configurazione allarmi

\n

Gestisci soglie e pianificazioni con una vista tabellare unica.

\n
\n
\n\n @if (error(); as errorMessage) {\n @if (errorMessage) {\n

\n {{ errorMessage }}\n

\n }\n }\n\n \n @if (rows().length === 0) {\n \n \n @if (error()) {\n Impossibile caricare le regole di allarme. Verifica la sessione o riprova tra poco.\n } @else {\n Nessuna regola configurata.\n }\n \n \n } @else {\n @for (row of rows(); track row.id) {\n \n \n {{ row.name }}\n \n {{ row.position }}\n \n \n \n {{ row.threshold }}\n {{ row.armingTime }}\n {{ row.dearmingTime }}\n \n
\n \n \n \n
\n \n \n }\n }\n
\n\n \n @if (isModalOpen()) {\n \n }\n \n\n @if (pendingDelete()) {\n \n }\n
"], + "mappings": "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", + "names": ["AlarmToggleSwitchComponent", "checked", "input", "disabled", "ariaLabel", "toggled", "output", "trackClass", "computed", "baseClass", "thumbClass", "onToggle", "emit", "selectors", "inputs", "outputs", "decls", "vars", "consts", "template", "rf", "ctx", "\u0275\u0275domElementStart", "\u0275\u0275domListener", "\u0275\u0275domElement", "\u0275\u0275domElementEnd", "\u0275\u0275classMap", "\u0275\u0275domProperty", "\u0275\u0275advance", "\u0275\u0275domElementStart", "\u0275\u0275text", "\u0275\u0275domElementEnd", "\u0275\u0275advance", "\u0275\u0275textInterpolate", "ctx_r1", "description", "\u0275\u0275domListener", "\u0275\u0275restoreView", "_r1", "\u0275\u0275nextContext", "\u0275\u0275resetView", "onClose", "\u0275\u0275conditionalCreate", "ModalShellComponent_Conditional_0_Conditional_6_Template", "\u0275\u0275projection", "title", "\u0275\u0275conditional", "ModalShellComponent", "open", "input", "required", "closeLabel", "closed", "output", "emit", "selectors", "inputs", "outputs", "ngContentSelectors", "_c0", "decls", "vars", "consts", "template", "rf", "ctx", "ModalShellComponent_Conditional_0_Template", "AlarmRuleFormMapper", "alarmTimeMapper", "inject", "AlarmTimeMapper", "toFormValue", "rule", "name", "plantId", "deviceId", "datapointId", "priority", "thresholdOperator", "toFormThresholdOperator", "thresholdValue", "armingTime", "toFormTime", "dearmingTime", "enabled", "isArmed", "operator", "normalizedOperator", "trim", "ThresholdOperator", "GREATER_THAN", "GREATER_THAN_OR_EQUAL", "LESS_THAN", "LESS_THAN_OR_EQUAL", "EQUAL_TO", "Error", "factory", "\u0275fac", "providedIn", "DeviceDatapointExtractionService", "numericThresholdPattern", "extractDeviceOptions", "apartment", "rooms", "flatMap", "room", "devices", "map", "device", "id", "label", "name", "datapoints", "normalizeDatapoints", "findReadableDatapoints", "deviceId", "deviceOptions", "selectedDevice", "find", "option", "filter", "datapoint", "readable", "findDatapointById", "datapointId", "findDatapointByDeviceAndDatapointId", "plants", "normalizedDeviceId", "trim", "normalizedDatapointId", "length", "plant", "selectedDatapoint", "writable", "valueType", "enum", "normalizeEnumValues", "sfeType", "getAllowedOperators", "usesEnumeratedThreshold", "ThresholdOperator", "EQUAL_TO", "Object", "values", "getEnumValues", "normalizeThresholdValue", "value", "trimmedValue", "enumValues", "enumValue", "toLowerCase", "isThresholdValueValid", "some", "test", "__spreadProps", "__spreadValues", "normalizedValues", "Array", "from", "Set", "factory", "\u0275fac", "providedIn", "AlarmConfigFormValidationHelper", "datapointExtraction", "constructor", "applyThresholdConstraints", "mode", "datapoint", "thresholdOperatorControl", "thresholdValueControl", "allowedOperators", "resolveAllowedOperators", "value", "setValidators", "Validators", "required", "operatorAllowedValidator", "usesEnumeratedThreshold", "enumValues", "getEnumValues", "enumThresholdValidator", "normalizedValue", "normalizeThresholdValue", "String", "setValue", "emitEvent", "pattern", "includes", "updateValueAndValidity", "currentOperator", "getAllowedOperators", "Object", "values", "ThresholdOperator", "control", "unsupportedOperator", "normalizedEnumValues", "Set", "map", "enumValue", "toLowerCase", "trim", "length", "has", "invalidEnumThreshold", "\u0275\u0275inject", "DeviceDatapointExtractionService", "factory", "\u0275fac", "providedIn", "AlarmConfigFormStateService", "wardApi", "apartmentApi", "datapointExtraction", "hasRequestedPlants", "constructor", "plants", "signal", "plantsLoadError", "devicesLoadError", "isDevicesLoading", "ensurePlantsLoaded", "mode", "length", "of", "loadAllPlants", "pipe", "tap", "set", "map", "catchError", "resetDevicesLoadState", "loadDeviceOptionsByPlant", "plantId", "normalizedPlantId", "trim", "loadApartmentViewForPlantId", "apartment", "extractDeviceOptions", "resolveDatapointForEdit", "deviceId", "datapointId", "normalizedDeviceId", "normalizedDatapointId", "getAllPlants", "findDatapointByDeviceAndDatapointId", "forkJoin", "availablePlants", "getAvailablePlants", "wards", "getWards", "switchMap", "mergePlants", "wardPlantsRequests", "ward", "getPlantsByWardId", "id", "assignedPlantsByWard", "flat", "assignedPlants", "mergedMap", "Map", "plant", "Array", "from", "values", "sort", "first", "second", "name", "localeCompare", "\u0275\u0275inject", "WardApiService", "ApartmentApiService", "DeviceDatapointExtractionService", "factory", "\u0275fac", "AlarmConfigFormFieldOrchestratorHelper", "datapointExtraction", "constructor", "applyModeState", "form", "mode", "controls", "name", "disable", "emitEvent", "plantId", "clearValidators", "deviceId", "datapointId", "thresholdOperator", "updateValueAndValidity", "enable", "setValidators", "Validators", "required", "String", "value", "trim", "length", "resetDatapointControl", "setValue", "resolveDeviceSelection", "deviceOptions", "normalizedDeviceId", "readableDatapoints", "autoSelectedDatapointId", "findReadableDatapoints", "id", "resolveDatapointSelection", "datapointOptions", "normalizedDatapointId", "selectedDatapoint", "findDatapointById", "\u0275\u0275inject", "DeviceDatapointExtractionService", "factory", "\u0275fac", "providedIn", "\u0275\u0275elementStart", "\u0275\u0275text", "\u0275\u0275elementEnd", "\u0275\u0275element", "\u0275\u0275advance", "\u0275\u0275property", "ctx_r0", "editPosition", "plant_r2", "id", "\u0275\u0275textInterpolate", "name", "plantsError_r3", "\u0275\u0275conditionalCreate", "AlarmConfigFormComponent_Conditional_8_Conditional_9_Conditional_0_Template", "\u0275\u0275conditional", "ctx", "\u0275\u0275repeaterCreate", "AlarmConfigFormComponent_Conditional_8_For_8_Template", "_forTrack0", "AlarmConfigFormComponent_Conditional_8_Conditional_9_Template", "AlarmConfigFormComponent_Conditional_8_Conditional_10_Template", "\u0275\u0275repeater", "plants", "tmp_3_0", "plantsLoadError", "form", "controls", "plantId", "invalid", "touched", "device_r4", "label", "devicesError_r5", "AlarmConfigFormComponent_Conditional_9_Conditional_10_Conditional_0_Template", "datapoint_r6", "AlarmConfigFormComponent_Conditional_9_Conditional_5_Template", "AlarmConfigFormComponent_Conditional_9_For_7_Template", "AlarmConfigFormComponent_Conditional_9_Conditional_8_Template", "AlarmConfigFormComponent_Conditional_9_Conditional_9_Template", "AlarmConfigFormComponent_Conditional_9_Conditional_10_Template", "AlarmConfigFormComponent_Conditional_9_Conditional_11_Template", "AlarmConfigFormComponent_Conditional_9_For_20_Template", "AlarmConfigFormComponent_Conditional_9_Conditional_21_Template", "AlarmConfigFormComponent_Conditional_9_Conditional_22_Template", "AlarmConfigFormComponent_Conditional_9_Conditional_23_Template", "isEditMode", "deviceOptions", "value", "length", "isDevicesLoading", "tmp_6_0", "devicesLoadError", "deviceId", "datapointOptions", "datapointId", "priority_r7", "thresholdOperator", "operator_r8", "AlarmConfigFormComponent_Conditional_26_For_4_Template", "\u0275\u0275repeaterTrackByIdentity", "thresholdOperatorOptions", "hint_r9", "thresholdValueHelpText", "AlarmConfigFormComponent", "mode", "input", "initialRule", "submittedForm", "output", "cancelled", "fb", "inject", "FormBuilder", "formMapper", "AlarmRuleFormMapper", "formState", "AlarmConfigFormStateService", "datapointExtraction", "DeviceDatapointExtractionService", "validationHelper", "AlarmConfigFormValidationHelper", "fieldOrchestrator", "AlarmConfigFormFieldOrchestratorHelper", "destroyRef", "DestroyRef", "editDatapointLookupVersion", "buildForm", "computed", "signal", "selectedDeviceId", "selectedDatapointId", "selectedDatapoint", "isPlantSelectionVisible", "position", "toPositionLabel", "priorityOptions", "Object", "values", "AlarmPriority", "filter", "getAllowedOperators", "datapoint", "currentOperator", "ThresholdOperator", "thresholdValueEnumHints", "getEnumValues", "constructor", "effect", "rule", "lookupVersion", "reset", "toFormValue", "set", "datapoints", "applyModeState", "applyThresholdConstraints", "loadEditDatapointMetadata", "createEmptyFormValue", "ensurePlantsLoaded", "valueChanges", "pipe", "takeUntilDestroyed", "subscribe", "onPlantChanged", "onDeviceChanged", "onDatapointChanged", "nonNullable", "group", "Validators", "required", "priority", "thresholdValue", "armingTime", "pattern", "dearmingTime", "enabled", "onSubmit", "normalizedThreshold", "normalizeThresholdValue", "setValue", "emitEvent", "updateValueAndValidity", "markAllAsTouched", "formValue", "getRawValue", "lockedRule", "emit", "__spreadProps", "__spreadValues", "resetDevicesLoadState", "trim", "disable", "loadDeviceOptionsByPlant", "options", "enable", "deviceSelection", "resolveDeviceSelection", "normalizedDeviceId", "resetDatapointControl", "readableDatapoints", "autoSelectedDatapointId", "datapointSelection", "resolveDatapointSelection", "normalizedDatapointId", "thresholdOperatorControl", "thresholdValueControl", "resolveDatapointForEdit", "resolvedDatapoint", "normalized", "replaceAll", "onCancel", "selectors", "inputs", "outputs", "features", "\u0275\u0275ProvidersFeature", "decls", "vars", "consts", "template", "rf", "\u0275\u0275listener", "AlarmConfigFormComponent_Conditional_6_Template", "AlarmConfigFormComponent_Conditional_7_Template", "AlarmConfigFormComponent_Conditional_8_Template", "AlarmConfigFormComponent_Conditional_9_Template", "AlarmConfigFormComponent_For_18_Template", "AlarmConfigFormComponent_Conditional_19_Template", "AlarmConfigFormComponent_Conditional_20_Template", "AlarmConfigFormComponent_Conditional_25_Template", "AlarmConfigFormComponent_Conditional_26_Template", "AlarmConfigFormComponent_Conditional_27_Template", "AlarmConfigFormComponent_Conditional_28_Template", "AlarmConfigFormComponent_For_36_Template", "AlarmConfigFormComponent_Conditional_37_Template", "AlarmConfigFormComponent_Conditional_38_Template", "AlarmConfigFormComponent_Conditional_39_Template", "AlarmConfigFormComponent_Conditional_40_Template", "AlarmConfigFormComponent_Conditional_53_Template", "AlarmConfigFormComponent_Conditional_58_Template", "tmp_8_0", "hasError", "ReactiveFormsModule", "\u0275NgNoValidate", "NgSelectOption", "\u0275NgSelectMultipleOption", "DefaultValueAccessor", "SelectControlValueAccessor", "NgControlStatus", "NgControlStatusGroup", "FormGroupDirective", "FormControlName", "AlarmPriorityIndicatorComponent", "AlarmActionButtonComponent", "encapsulation", "changeDetection", "AlarmConfigTablePresenterService", "alarmTimeMapper", "inject", "AlarmTimeMapper", "toRows", "rules", "map", "rule", "id", "name", "position", "toPositionLabel", "priority", "threshold", "thresholdOperator", "thresholdValue", "armingTime", "toFormTime", "dearmingTime", "isEnabled", "isArmed", "normalized", "replaceAll", "trim", "length", "factory", "\u0275fac", "providedIn", "\u0275\u0275elementStart", "\u0275\u0275text", "\u0275\u0275elementEnd", "\u0275\u0275advance", "\u0275\u0275textInterpolate1", "errorMessage_r1", "\u0275\u0275conditionalCreate", "AlarmConfigPageComponent_Conditional_9_Conditional_0_Template", "\u0275\u0275conditional", "ctx", "AlarmConfigPageComponent_Conditional_11_Conditional_2_Template", "AlarmConfigPageComponent_Conditional_11_Conditional_3_Template", "ctx_r1", "error", "\u0275\u0275element", "\u0275\u0275listener", "row_r4", "\u0275\u0275restoreView", "_r3", "$implicit", "\u0275\u0275nextContext", "\u0275\u0275resetView", "onEdit", "id", "onDelete", "name", "$event", "onToggleEnabled", "\u0275\u0275textInterpolate", "position", "\u0275\u0275property", "priority", "threshold", "armingTime", "dearmingTime", "isEnabled", "pendingToggleRuleId", "\u0275\u0275repeaterCreate", "AlarmConfigPageComponent_Conditional_12_For_1_Template", "_forTrack0", "\u0275\u0275repeater", "rows", "_r5", "onFormSubmitted", "onModalClosed", "editingRule", "_r6", "onDeleteConfirmed", "onDeleteCancelled", "getDeleteConfirmMessage", "AlarmConfigPageComponent", "stateService", "inject", "AlarmConfigStateService", "tablePresenter", "AlarmConfigTablePresenterService", "columns", "label", "alarms", "toSignal", "alarms$", "initialValue", "error$", "isModalOpen", "signal", "pendingDelete", "computed", "toRows", "modalTitle", "ngOnInit", "loadAlarmRules", "onCreateNew", "set", "alarmRuleId", "ruleToEdit", "find", "rule", "enabled", "toggleEnabled", "pipe", "finalize", "subscribe", "deleteCandidate", "deleteAlarmRule", "formValue", "updateAlarmRule", "createAlarmRule", "selectors", "decls", "vars", "consts", "template", "rf", "AlarmConfigPageComponent_Conditional_9_Template", "AlarmConfigPageComponent_Conditional_11_Template", "AlarmConfigPageComponent_Conditional_12_Template", "AlarmConfigPageComponent_Conditional_14_Template", "AlarmConfigPageComponent_Conditional_15_Template", "tmp_0_0", "length", "AlarmTableShellComponent", "AlarmPriorityIndicatorComponent", "AlarmActionButtonComponent", "AlarmToggleSwitchComponent", "ConfirmDialogComponent", "ModalShellComponent", "AlarmConfigFormComponent", "styles", "changeDetection"] +} diff --git a/frontend/dist-instrumented/chunk-MSNAYSOW.js b/frontend/dist-instrumented/chunk-MSNAYSOW.js new file mode 100644 index 00000000..079ccfce --- /dev/null +++ b/frontend/dist-instrumented/chunk-MSNAYSOW.js @@ -0,0 +1,3 @@ +function cov_1mcmlbpjfg(){var path="/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-MSNAYSOW.js";var hash="2f6edac41d4d1a68fdd35693b003cfbcbace13d9";var global=new Function("return this")();var gcv="__coverage__";var coverageData={path:"/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-MSNAYSOW.js",statementMap:{"0":{start:{line:1,column:248},end:{line:1,column:440}},"1":{start:{line:1,column:261},end:{line:1,column:431}},"2":{start:{line:1,column:447},end:{line:1,column:968}},"3":{start:{line:1,column:475},end:{line:1,column:566}},"4":{start:{line:1,column:524},end:{line:1,column:566}},"5":{start:{line:1,column:572},end:{line:1,column:588}},"6":{start:{line:1,column:589},end:{line:1,column:639}},"7":{start:{line:1,column:630},end:{line:1,column:639}},"8":{start:{line:1,column:645},end:{line:1,column:692}},"9":{start:{line:1,column:693},end:{line:1,column:740}},"10":{start:{line:1,column:763},end:{line:1,column:799}},"11":{start:{line:1,column:800},end:{line:1,column:839}},"12":{start:{line:1,column:857},end:{line:1,column:886}},"13":{start:{line:1,column:869},end:{line:1,column:885}},"14":{start:{line:1,column:905},end:{line:1,column:955}},"15":{start:{line:1,column:956},end:{line:1,column:964}},"16":{start:{line:1,column:975},end:{line:1,column:3820}},"17":{start:{line:1,column:1005},end:{line:1,column:1009}},"18":{start:{line:1,column:1028},end:{line:1,column:1057}},"19":{start:{line:1,column:1077},end:{line:1,column:1632}},"20":{start:{line:1,column:1652},end:{line:1,column:2054}},"21":{start:{line:1,column:2076},end:{line:1,column:2514}},"22":{start:{line:1,column:2535},end:{line:1,column:2573}},"23":{start:{line:1,column:2607},end:{line:1,column:2647}},"24":{start:{line:1,column:2648},end:{line:1,column:2680}},"25":{start:{line:1,column:2670},end:{line:1,column:2680}},"26":{start:{line:1,column:2680},end:{line:1,column:2722}},"27":{start:{line:1,column:2711},end:{line:1,column:2722}},"28":{start:{line:1,column:2722},end:{line:1,column:2751}},"29":{start:{line:1,column:2741},end:{line:1,column:2751}},"30":{start:{line:1,column:2751},end:{line:1,column:2790}},"31":{start:{line:1,column:2779},end:{line:1,column:2790}},"32":{start:{line:1,column:2790},end:{line:1,column:2818}},"33":{start:{line:1,column:2808},end:{line:1,column:2818}},"34":{start:{line:1,column:2818},end:{line:1,column:2883}},"35":{start:{line:1,column:2902},end:{line:1,column:2967}},"36":{start:{line:1,column:2914},end:{line:1,column:2967}},"37":{start:{line:1,column:2967},end:{line:1,column:2975}},"38":{start:{line:1,column:3009},end:{line:1,column:3017}},"39":{start:{line:1,column:3018},end:{line:1,column:3087}},"40":{start:{line:1,column:3034},end:{line:1,column:3087}},"41":{start:{line:1,column:3087},end:{line:1,column:3095}},"42":{start:{line:1,column:3129},end:{line:1,column:3149}},"43":{start:{line:1,column:3150},end:{line:1,column:3176}},"44":{start:{line:1,column:3212},end:{line:1,column:3243}},"45":{start:{line:1,column:3244},end:{line:1,column:3326}},"46":{start:{line:1,column:3279},end:{line:1,column:3326}},"47":{start:{line:1,column:3326},end:{line:1,column:3334}},"48":{start:{line:1,column:3369},end:{line:1,column:3418}},"49":{start:{line:1,column:3419},end:{line:1,column:3477}},"50":{start:{line:1,column:3468},end:{line:1,column:3477}},"51":{start:{line:1,column:3477},end:{line:1,column:3542}},"52":{start:{line:1,column:3578},end:{line:1,column:3609}},"53":{start:{line:1,column:3612},end:{line:1,column:3627}},"54":{start:{line:1,column:3628},end:{line:1,column:3691}},"55":{start:{line:1,column:3709},end:{line:1,column:3738}},"56":{start:{line:1,column:3721},end:{line:1,column:3737}},"57":{start:{line:1,column:3757},end:{line:1,column:3807}},"58":{start:{line:1,column:3808},end:{line:1,column:3816}},"59":{start:{line:1,column:3827},end:{line:1,column:6677}},"60":{start:{line:1,column:3845},end:{line:1,column:3849}},"61":{start:{line:1,column:3880},end:{line:1,column:3884}},"62":{start:{line:1,column:3908},end:{line:1,column:3912}},"63":{start:{line:1,column:3927},end:{line:1,column:3931}},"64":{start:{line:1,column:3946},end:{line:1,column:3955}},"65":{start:{line:1,column:3969},end:{line:1,column:3980}},"66":{start:{line:1,column:3989},end:{line:1,column:4022}},"67":{start:{line:1,column:4030},end:{line:1,column:4062}},"68":{start:{line:1,column:4076},end:{line:1,column:4141}},"69":{start:{line:1,column:4157},end:{line:1,column:4191}},"70":{start:{line:1,column:4209},end:{line:1,column:4459}},"71":{start:{line:1,column:4262},end:{line:1,column:4288}},"72":{start:{line:1,column:4295},end:{line:1,column:4445}},"73":{start:{line:1,column:4480},end:{line:1,column:4688}},"74":{start:{line:1,column:4540},end:{line:1,column:4686}},"75":{start:{line:1,column:4708},end:{line:1,column:4726}},"76":{start:{line:1,column:4732},end:{line:1,column:4865}},"77":{start:{line:1,column:4736},end:{line:1,column:4775}},"78":{start:{line:1,column:4782},end:{line:1,column:4864}},"79":{start:{line:1,column:4865},end:{line:1,column:5142}},"80":{start:{line:1,column:4912},end:{line:1,column:4985}},"81":{start:{line:1,column:4993},end:{line:1,column:5140}},"82":{start:{line:1,column:5164},end:{line:1,column:5182}},"83":{start:{line:1,column:5190},end:{line:1,column:5237}},"84":{start:{line:1,column:5228},end:{line:1,column:5236}},"85":{start:{line:1,column:5240},end:{line:1,column:5268}},"86":{start:{line:1,column:5269},end:{line:1,column:5405}},"87":{start:{line:1,column:5273},end:{line:1,column:5312}},"88":{start:{line:1,column:5319},end:{line:1,column:5404}},"89":{start:{line:1,column:5405},end:{line:1,column:5687}},"90":{start:{line:1,column:5454},end:{line:1,column:5527}},"91":{start:{line:1,column:5535},end:{line:1,column:5685}},"92":{start:{line:1,column:5707},end:{line:1,column:5725}},"93":{start:{line:1,column:5731},end:{line:1,column:5778}},"94":{start:{line:1,column:5769},end:{line:1,column:5777}},"95":{start:{line:1,column:5779},end:{line:1,column:5852}},"96":{start:{line:1,column:5785},end:{line:1,column:5852}},"97":{start:{line:1,column:5858},end:{line:1,column:5897}},"98":{start:{line:1,column:5898},end:{line:1,column:6188}},"99":{start:{line:1,column:5947},end:{line:1,column:6020}},"100":{start:{line:1,column:6028},end:{line:1,column:6186}},"101":{start:{line:1,column:6208},end:{line:1,column:6566}},"102":{start:{line:1,column:6279},end:{line:1,column:6308}},"103":{start:{line:1,column:6309},end:{line:1,column:6407}},"104":{start:{line:1,column:6345},end:{line:1,column:6353}},"105":{start:{line:1,column:6415},end:{line:1,column:6564}},"106":{start:{line:1,column:6584},end:{line:1,column:6613}},"107":{start:{line:1,column:6596},end:{line:1,column:6612}},"108":{start:{line:1,column:6632},end:{line:1,column:6664}},"109":{start:{line:1,column:6665},end:{line:1,column:6673}}},fnMap:{"0":{name:"(anonymous_0)",decl:{start:{line:1,column:249},end:{line:1,column:250}},loc:{start:{line:1,column:260},end:{line:1,column:432}},line:1},"1":{name:"(anonymous_1)",decl:{start:{line:1,column:448},end:{line:1,column:449}},loc:{start:{line:1,column:452},end:{line:1,column:965}},line:1},"2":{name:"(anonymous_2)",decl:{start:{line:1,column:461},end:{line:1,column:462}},loc:{start:{line:1,column:474},end:{line:1,column:741}},line:1},"3":{name:"(anonymous_3)",decl:{start:{line:1,column:741},end:{line:1,column:742}},loc:{start:{line:1,column:756},end:{line:1,column:840}},line:1},"4":{name:"(anonymous_4)",decl:{start:{line:1,column:857},end:{line:1,column:858}},loc:{start:{line:1,column:868},end:{line:1,column:886}},line:1},"5":{name:"(anonymous_5)",decl:{start:{line:1,column:976},end:{line:1,column:977}},loc:{start:{line:1,column:980},end:{line:1,column:3817}},line:1},"6":{name:"(anonymous_6)",decl:{start:{line:1,column:1058},end:{line:1,column:1059}},loc:{start:{line:1,column:1076},end:{line:1,column:1633}},line:1},"7":{name:"(anonymous_7)",decl:{start:{line:1,column:1633},end:{line:1,column:1634}},loc:{start:{line:1,column:1651},end:{line:1,column:2055}},line:1},"8":{name:"(anonymous_8)",decl:{start:{line:1,column:2055},end:{line:1,column:2056}},loc:{start:{line:1,column:2075},end:{line:1,column:2515}},line:1},"9":{name:"(anonymous_9)",decl:{start:{line:1,column:2515},end:{line:1,column:2516}},loc:{start:{line:1,column:2534},end:{line:1,column:2574}},line:1},"10":{name:"(anonymous_10)",decl:{start:{line:1,column:2574},end:{line:1,column:2575}},loc:{start:{line:1,column:2600},end:{line:1,column:2884}},line:1},"11":{name:"(anonymous_11)",decl:{start:{line:1,column:2884},end:{line:1,column:2885}},loc:{start:{line:1,column:2901},end:{line:1,column:2976}},line:1},"12":{name:"(anonymous_12)",decl:{start:{line:1,column:2976},end:{line:1,column:2977}},loc:{start:{line:1,column:3002},end:{line:1,column:3096}},line:1},"13":{name:"(anonymous_13)",decl:{start:{line:1,column:3096},end:{line:1,column:3097}},loc:{start:{line:1,column:3122},end:{line:1,column:3177}},line:1},"14":{name:"(anonymous_14)",decl:{start:{line:1,column:3177},end:{line:1,column:3178}},loc:{start:{line:1,column:3205},end:{line:1,column:3335}},line:1},"15":{name:"(anonymous_15)",decl:{start:{line:1,column:3335},end:{line:1,column:3336}},loc:{start:{line:1,column:3362},end:{line:1,column:3543}},line:1},"16":{name:"(anonymous_16)",decl:{start:{line:1,column:3543},end:{line:1,column:3544}},loc:{start:{line:1,column:3571},end:{line:1,column:3692}},line:1},"17":{name:"(anonymous_17)",decl:{start:{line:1,column:3709},end:{line:1,column:3710}},loc:{start:{line:1,column:3720},end:{line:1,column:3738}},line:1},"18":{name:"(anonymous_18)",decl:{start:{line:1,column:3828},end:{line:1,column:3829}},loc:{start:{line:1,column:3832},end:{line:1,column:6674}},line:1},"19":{name:"(anonymous_19)",decl:{start:{line:1,column:4063},end:{line:1,column:4064}},loc:{start:{line:1,column:4075},end:{line:1,column:4142}},line:1},"20":{name:"(anonymous_20)",decl:{start:{line:1,column:4142},end:{line:1,column:4143}},loc:{start:{line:1,column:4156},end:{line:1,column:4192}},line:1},"21":{name:"(anonymous_21)",decl:{start:{line:1,column:4192},end:{line:1,column:4193}},loc:{start:{line:1,column:4208},end:{line:1,column:4460}},line:1},"22":{name:"(anonymous_22)",decl:{start:{line:1,column:4259},end:{line:1,column:4260}},loc:{start:{line:1,column:4262},end:{line:1,column:4288}},line:1},"23":{name:"(anonymous_23)",decl:{start:{line:1,column:4292},end:{line:1,column:4293}},loc:{start:{line:1,column:4295},end:{line:1,column:4445}},line:1},"24":{name:"(anonymous_24)",decl:{start:{line:1,column:4460},end:{line:1,column:4461}},loc:{start:{line:1,column:4479},end:{line:1,column:4689}},line:1},"25":{name:"(anonymous_25)",decl:{start:{line:1,column:4537},end:{line:1,column:4538}},loc:{start:{line:1,column:4540},end:{line:1,column:4686}},line:1},"26":{name:"(anonymous_26)",decl:{start:{line:1,column:4689},end:{line:1,column:4690}},loc:{start:{line:1,column:4707},end:{line:1,column:5143}},line:1},"27":{name:"(anonymous_27)",decl:{start:{line:1,column:4907},end:{line:1,column:4908}},loc:{start:{line:1,column:4911},end:{line:1,column:4986}},line:1},"28":{name:"(anonymous_28)",decl:{start:{line:1,column:4990},end:{line:1,column:4991}},loc:{start:{line:1,column:4993},end:{line:1,column:5140}},line:1},"29":{name:"(anonymous_29)",decl:{start:{line:1,column:5143},end:{line:1,column:5144}},loc:{start:{line:1,column:5163},end:{line:1,column:5688}},line:1},"30":{name:"(anonymous_30)",decl:{start:{line:1,column:5225},end:{line:1,column:5226}},loc:{start:{line:1,column:5228},end:{line:1,column:5236}},line:1},"31":{name:"(anonymous_31)",decl:{start:{line:1,column:5449},end:{line:1,column:5450}},loc:{start:{line:1,column:5453},end:{line:1,column:5528}},line:1},"32":{name:"(anonymous_32)",decl:{start:{line:1,column:5532},end:{line:1,column:5533}},loc:{start:{line:1,column:5535},end:{line:1,column:5685}},line:1},"33":{name:"(anonymous_33)",decl:{start:{line:1,column:5688},end:{line:1,column:5689}},loc:{start:{line:1,column:5706},end:{line:1,column:6189}},line:1},"34":{name:"(anonymous_34)",decl:{start:{line:1,column:5766},end:{line:1,column:5767}},loc:{start:{line:1,column:5769},end:{line:1,column:5777}},line:1},"35":{name:"(anonymous_35)",decl:{start:{line:1,column:5942},end:{line:1,column:5943}},loc:{start:{line:1,column:5946},end:{line:1,column:6021}},line:1},"36":{name:"(anonymous_36)",decl:{start:{line:1,column:6025},end:{line:1,column:6026}},loc:{start:{line:1,column:6028},end:{line:1,column:6186}},line:1},"37":{name:"(anonymous_37)",decl:{start:{line:1,column:6189},end:{line:1,column:6190}},loc:{start:{line:1,column:6207},end:{line:1,column:6567}},line:1},"38":{name:"(anonymous_38)",decl:{start:{line:1,column:6268},end:{line:1,column:6269}},loc:{start:{line:1,column:6272},end:{line:1,column:6408}},line:1},"39":{name:"(anonymous_39)",decl:{start:{line:1,column:6342},end:{line:1,column:6343}},loc:{start:{line:1,column:6345},end:{line:1,column:6353}},line:1},"40":{name:"(anonymous_40)",decl:{start:{line:1,column:6412},end:{line:1,column:6413}},loc:{start:{line:1,column:6415},end:{line:1,column:6564}},line:1},"41":{name:"(anonymous_41)",decl:{start:{line:1,column:6584},end:{line:1,column:6585}},loc:{start:{line:1,column:6595},end:{line:1,column:6613}},line:1}},branchMap:{"0":{loc:{start:{line:1,column:434},end:{line:1,column:439}},type:"binary-expr",locations:[{start:{line:1,column:434},end:{line:1,column:435}},{start:{line:1,column:437},end:{line:1,column:439}}],line:1},"1":{loc:{start:{line:1,column:475},end:{line:1,column:566}},type:"if",locations:[{start:{line:1,column:475},end:{line:1,column:566}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"2":{loc:{start:{line:1,column:478},end:{line:1,column:523}},type:"binary-expr",locations:[{start:{line:1,column:478},end:{line:1,column:495}},{start:{line:1,column:497},end:{line:1,column:523}}],line:1},"3":{loc:{start:{line:1,column:589},end:{line:1,column:639}},type:"if",locations:[{start:{line:1,column:589},end:{line:1,column:639}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"4":{loc:{start:{line:1,column:700},end:{line:1,column:740}},type:"cond-expr",locations:[{start:{line:1,column:702},end:{line:1,column:719}},{start:{line:1,column:720},end:{line:1,column:740}}],line:1},"5":{loc:{start:{line:1,column:807},end:{line:1,column:839}},type:"cond-expr",locations:[{start:{line:1,column:809},end:{line:1,column:826}},{start:{line:1,column:827},end:{line:1,column:839}}],line:1},"6":{loc:{start:{line:1,column:880},end:{line:1,column:884}},type:"binary-expr",locations:[{start:{line:1,column:880},end:{line:1,column:881}},{start:{line:1,column:883},end:{line:1,column:884}}],line:1},"7":{loc:{start:{line:1,column:2648},end:{line:1,column:2680}},type:"if",locations:[{start:{line:1,column:2648},end:{line:1,column:2680}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"8":{loc:{start:{line:1,column:2680},end:{line:1,column:2722}},type:"if",locations:[{start:{line:1,column:2680},end:{line:1,column:2722}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"9":{loc:{start:{line:1,column:2722},end:{line:1,column:2751}},type:"if",locations:[{start:{line:1,column:2722},end:{line:1,column:2751}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"10":{loc:{start:{line:1,column:2751},end:{line:1,column:2790}},type:"if",locations:[{start:{line:1,column:2751},end:{line:1,column:2790}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"11":{loc:{start:{line:1,column:2790},end:{line:1,column:2818}},type:"if",locations:[{start:{line:1,column:2790},end:{line:1,column:2818}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"12":{loc:{start:{line:1,column:2902},end:{line:1,column:2967}},type:"if",locations:[{start:{line:1,column:2902},end:{line:1,column:2967}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"13":{loc:{start:{line:1,column:3018},end:{line:1,column:3087}},type:"if",locations:[{start:{line:1,column:3018},end:{line:1,column:3087}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"14":{loc:{start:{line:1,column:3136},end:{line:1,column:3141}},type:"binary-expr",locations:[{start:{line:1,column:3136},end:{line:1,column:3137}},{start:{line:1,column:3139},end:{line:1,column:3141}}],line:1},"15":{loc:{start:{line:1,column:3157},end:{line:1,column:3176}},type:"cond-expr",locations:[{start:{line:1,column:3168},end:{line:1,column:3169}},{start:{line:1,column:3170},end:{line:1,column:3176}}],line:1},"16":{loc:{start:{line:1,column:3244},end:{line:1,column:3326}},type:"if",locations:[{start:{line:1,column:3244},end:{line:1,column:3326}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"17":{loc:{start:{line:1,column:3419},end:{line:1,column:3477}},type:"if",locations:[{start:{line:1,column:3419},end:{line:1,column:3477}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"18":{loc:{start:{line:1,column:3422},end:{line:1,column:3467}},type:"binary-expr",locations:[{start:{line:1,column:3422},end:{line:1,column:3429}},{start:{line:1,column:3431},end:{line:1,column:3438}},{start:{line:1,column:3440},end:{line:1,column:3448}},{start:{line:1,column:3450},end:{line:1,column:3458}},{start:{line:1,column:3460},end:{line:1,column:3467}}],line:1},"19":{loc:{start:{line:1,column:3635},end:{line:1,column:3691}},type:"cond-expr",locations:[{start:{line:1,column:3656},end:{line:1,column:3660}},{start:{line:1,column:3661},end:{line:1,column:3691}}],line:1},"20":{loc:{start:{line:1,column:3635},end:{line:1,column:3655}},type:"binary-expr",locations:[{start:{line:1,column:3635},end:{line:1,column:3643}},{start:{line:1,column:3645},end:{line:1,column:3655}}],line:1},"21":{loc:{start:{line:1,column:3661},end:{line:1,column:3691}},type:"cond-expr",locations:[{start:{line:1,column:3684},end:{line:1,column:3689}},{start:{line:1,column:3690},end:{line:1,column:3691}}],line:1},"22":{loc:{start:{line:1,column:3661},end:{line:1,column:3683}},type:"binary-expr",locations:[{start:{line:1,column:3661},end:{line:1,column:3670}},{start:{line:1,column:3672},end:{line:1,column:3683}}],line:1},"23":{loc:{start:{line:1,column:3732},end:{line:1,column:3736}},type:"binary-expr",locations:[{start:{line:1,column:3732},end:{line:1,column:3733}},{start:{line:1,column:3735},end:{line:1,column:3736}}],line:1},"24":{loc:{start:{line:1,column:4076},end:{line:1,column:4141}},type:"binary-expr",locations:[{start:{line:1,column:4076},end:{line:1,column:4111}},{start:{line:1,column:4113},end:{line:1,column:4141}}],line:1},"25":{loc:{start:{line:1,column:5240},end:{line:1,column:5268}},type:"cond-expr",locations:[{start:{line:1,column:5242},end:{line:1,column:5266}},{start:{line:1,column:5267},end:{line:1,column:5268}}],line:1},"26":{loc:{start:{line:1,column:5779},end:{line:1,column:5852}},type:"if",locations:[{start:{line:1,column:5779},end:{line:1,column:5852}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"27":{loc:{start:{line:1,column:6607},end:{line:1,column:6611}},type:"binary-expr",locations:[{start:{line:1,column:6607},end:{line:1,column:6608}},{start:{line:1,column:6610},end:{line:1,column:6611}}],line:1}},s:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0},f:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0},b:{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0],"9":[0,0],"10":[0,0],"11":[0,0],"12":[0,0],"13":[0,0],"14":[0,0],"15":[0,0],"16":[0,0],"17":[0,0],"18":[0,0,0,0,0],"19":[0,0],"20":[0,0],"21":[0,0],"22":[0,0],"23":[0,0],"24":[0,0],"25":[0,0],"26":[0,0],"27":[0,0]},inputSourceMap:{version:3,sources:["src/app/core/alarm/models/threshold-operator.enum.ts","src/app/features/alarm-configuration/mappers/alarm-time.mapper.ts","src/app/features/alarm-configuration/mappers/alarm-rule-request.mapper.ts","src/app/features/alarm-configuration/services/alarm-config-state.service.ts"],sourcesContent:["export enum ThresholdOperator {\n GREATER_THAN = 'maggiore di',\n GREATER_THAN_OR_EQUAL = 'maggiore o uguale a',\n LESS_THAN = 'minore di',\n LESS_THAN_OR_EQUAL = 'minore o uguale a',\n EQUAL_TO = 'uguale a',\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable({ providedIn: 'root' })\nexport class AlarmTimeMapper {\n public toFormTime(value: Date | string): string {\n if (value instanceof Date && !Number.isNaN(value.getTime())) {\n return this.toHourMinute(value.toISOString());\n }\n\n const stringValue = String(value).trim();\n if (/^([01]\\d|2[0-3]):([0-5]\\d)$/.test(stringValue)) {\n return stringValue;\n }\n\n const hhmmss = /^([01]\\d|2[0-3]):([0-5]\\d):([0-5]\\d)$/.exec(stringValue);\n if (hhmmss) {\n return `${hhmmss[1]}:${hhmmss[2]}`;\n }\n\n return this.toHourMinute(stringValue);\n }\n\n private toHourMinute(value: string): string {\n const match = /T([01]\\d|2[0-3]):([0-5]\\d)/.exec(value);\n if (!match) {\n return value.slice(0, 5);\n }\n\n return `${match[1]}:${match[2]}`;\n }\n}","import { Injectable, inject } from '@angular/core';\nimport { AlarmPriority } from '../../../core/alarm/models/alarm-priority.enum';\nimport { AlarmRule } from '../../../core/alarm/models/alarm-rule.model';\nimport { ThresholdOperator } from '../../../core/alarm/models/threshold-operator.enum';\nimport { CreateAlarmRuleRequestDto } from '../../../core/alarm/models/dto/create-alarm-rule-request.model.dto';\nimport { UpdateAlarmRuleRequestDto } from '../../../core/alarm/models/dto/update-alarm-rule-request.model.dto';\nimport { AlarmConfigFormValue } from '../models/alarm-config-form-value.model';\nimport { AlarmTimeMapper } from './alarm-time.mapper';\n\n@Injectable({ providedIn: 'root' })\nexport class AlarmRuleRequestMapper {\n private readonly alarmTimeMapper = inject(AlarmTimeMapper);\n private readonly hourMinutePattern = /^([01]\\d|2[0-3]):([0-5]\\d)$/;\n\n public toCreateRequest(formValue: AlarmConfigFormValue): CreateAlarmRuleRequestDto {\n return {\n name: this.requireNonEmptyString(formValue.name, 'name'),\n deviceId: this.requireNonEmptyString(formValue.deviceId, 'deviceId'),\n datapointId: this.normalizeOptionalString(formValue.datapointId),\n plantId: this.requireNonEmptyString(formValue.plantId, 'plantId'),\n priority: this.toPriorityNumber(formValue.priority),\n thresholdOperator: this.toThresholdOperatorCode(formValue.thresholdOperator),\n thresholdValue: this.toRequestThresholdValue(formValue.thresholdValue, 'thresholdValue'),\n armingTime: this.requireHourMinuteString(formValue.armingTime, 'armingTime'),\n dearmingTime: this.requireHourMinuteString(formValue.dearmingTime, 'dearmingTime'),\n };\n }\n\n public toUpdateRequest(formValue: AlarmConfigFormValue): UpdateAlarmRuleRequestDto {\n return {\n name: this.requireNonEmptyString(formValue.name, 'name'),\n priority: this.toPriorityNumber(formValue.priority),\n thresholdOperator: this.toThresholdOperatorCode(formValue.thresholdOperator),\n thresholdValue: this.toRequestThresholdValue(formValue.thresholdValue, 'thresholdValue'),\n armingTime: this.requireHourMinuteString(formValue.armingTime, 'armingTime'),\n dearmingTime: this.requireHourMinuteString(formValue.dearmingTime, 'dearmingTime'),\n isArmed: formValue.enabled,\n };\n }\n\n public toToggleRequest(rule: AlarmRule, isArmed: boolean): UpdateAlarmRuleRequestDto {\n return {\n name: this.requireNonEmptyString(rule.name, 'name'),\n priority: rule.priority,\n thresholdOperator: this.requireThresholdOperator(rule.thresholdOperator),\n thresholdValue: this.toRequestThresholdValue(rule.thresholdValue, 'thresholdValue'),\n armingTime: this.requireHourMinuteString(this.alarmTimeMapper.toFormTime(rule.armingTime), 'armingTime'),\n dearmingTime: this.requireHourMinuteString(this.alarmTimeMapper.toFormTime(rule.dearmingTime), 'dearmingTime'),\n isArmed,\n };\n }\n\n private toPriorityNumber(priority: AlarmPriority | null): number {\n return this.requireField(priority, 'priority');\n }\n\n private toThresholdOperatorCode(operator: ThresholdOperator | null): string {\n const requiredOperator = this.requireField(operator, 'thresholdOperator');\n if (requiredOperator === ThresholdOperator.GREATER_THAN) {\n return '>';\n }\n if (requiredOperator === ThresholdOperator.GREATER_THAN_OR_EQUAL) {\n return '>=';\n }\n if (requiredOperator === ThresholdOperator.LESS_THAN) {\n return '<';\n }\n if (requiredOperator === ThresholdOperator.LESS_THAN_OR_EQUAL) {\n return '<=';\n }\n if (requiredOperator === ThresholdOperator.EQUAL_TO) {\n return '=';\n }\n\n throw new Error(`Campo obbligatorio mancante: thresholdOperator`);\n }\n\n private requireField(value: T | null, fieldName: string): T {\n if (value === null) {\n throw new Error(`Campo obbligatorio mancante: ${fieldName}`);\n }\n\n return value;\n }\n\n private requireNonEmptyString(value: string, fieldName: string): string {\n const trimmed = value.trim();\n if (trimmed.length === 0) {\n throw new Error(`Campo obbligatorio mancante: ${fieldName}`);\n }\n\n return trimmed;\n }\n\n private normalizeOptionalString(value?: string): string | undefined {\n const trimmed = String(value ?? '').trim();\n return trimmed.length > 0 ? trimmed : undefined;\n }\n\n private requireHourMinuteString(value: string, fieldName: string): string {\n const required = this.requireNonEmptyString(value, fieldName);\n if (!this.hourMinutePattern.test(required)) {\n throw new Error(`Formato non valido per ${fieldName}`);\n }\n\n return required;\n }\n\n private requireThresholdOperator(operator: string): string {\n const required = this.requireNonEmptyString(operator, 'thresholdOperator');\n if (required === '>' || required === '<' || required === '>=' || required === '<=' || required === '=') {\n return required;\n }\n\n throw new Error('Campo obbligatorio mancante: thresholdOperator');\n }\n\n private toRequestThresholdValue(value: string, fieldName: string): string {\n const required = this.requireNonEmptyString(value, fieldName);\n const normalized = required.toLowerCase();\n if (normalized === 'on' || normalized === 'true') {\n return 'on';\n }\n if (normalized === 'off' || normalized === 'false') {\n return 'off';\n }\n\n return required;\n }\n}","import { Injectable, inject } from '@angular/core';\nimport { BehaviorSubject, EMPTY, Observable } from 'rxjs';\nimport { catchError, tap } from 'rxjs/operators';\nimport { AlarmRule } from '../../../core/alarm/models/alarm-rule.model';\nimport { CreateAlarmRuleRequestDto } from '../../../core/alarm/models/dto/create-alarm-rule-request.model.dto';\nimport { UpdateAlarmRuleRequestDto } from '../../../core/alarm/models/dto/update-alarm-rule-request.model.dto';\nimport { AlarmApiService } from '../../../core/alarm/services/alarm-api.service';\nimport { AlarmManagementRefreshService } from '../../../core/alarm/services/alarm-management-refresh.service';\nimport { ApiErrorDisplayService } from '../../../core/services/api-error-display.service';\nimport { AlarmRuleRequestMapper } from '../mappers/alarm-rule-request.mapper';\nimport { AlarmConfigFormValue } from '../models/alarm-config-form-value.model';\n\n@Injectable()\nexport class AlarmConfigStateService {\n private readonly api = inject(AlarmApiService);\n private readonly alarmManagementRefreshService = inject(AlarmManagementRefreshService);\n private readonly apiErrorDisplayService = inject(ApiErrorDisplayService);\n private readonly requestMapper = inject(AlarmRuleRequestMapper);\n\n private readonly alarmsSubject = new BehaviorSubject([]);\n private readonly errorSubject = new BehaviorSubject(null);\n\n public readonly alarms$ = this.alarmsSubject.asObservable();\n public readonly error$ = this.errorSubject.asObservable();\n\n\n private clearError(): void {\n if (this.errorSubject.getValue() !== null) {\n this.errorSubject.next(null);\n }\n }\n\n private handleError(message: string): Observable {\n this.errorSubject.next(message);\n return EMPTY;\n }\n\n\n //carica soglie di allarme\n public loadAlarmRules(): void {\n this.clearError();\n this.api\n .getAlarmRules()\n .pipe(\n tap((alarms) => this.alarmsSubject.next(alarms)),\n catchError((error: unknown) =>\n this.handleError(\n this.apiErrorDisplayService.toMessage(error, {\n fallbackMessage: 'Errore durante il caricamento degli allarmi.',\n nonHttpStrategy: 'fallback',\n }),\n ),\n )\n )\n .subscribe();\n }\n\n public getAlarmRuleById(id: string): Observable {\n this.clearError();\n return this.api.getAlarmRule(id).pipe(\n catchError((error: unknown) =>\n this.handleError(\n this.apiErrorDisplayService.toMessage(error, {\n fallbackMessage: 'Errore durante il recupero dell\\'allarme.',\n nonHttpStrategy: 'fallback',\n }),\n ),\n ),\n );\n }\n\n //a partire dal form -> mapping a DTO -> service API -> aggiornamento stato locale\n public createAlarmRule(formValue: AlarmConfigFormValue): Observable {\n this.clearError();\n let payload: CreateAlarmRuleRequestDto;\n try {\n payload = this.requestMapper.toCreateRequest(formValue);\n } catch {\n return this.handleError('Dati del form non validi per la creazione dell\\'allarme.');\n }\n\n return this.api.createAlarmRule(payload).pipe(\n tap(() => {\n this.loadAlarmRules();\n this.alarmManagementRefreshService.requestRefresh();\n }),\n catchError((error: unknown) =>\n this.handleError(\n this.apiErrorDisplayService.toMessage(error, {\n fallbackMessage: 'Errore durante la creazione dell\\'allarme.',\n nonHttpStrategy: 'fallback',\n }),\n ),\n )\n );\n }\n\n public updateAlarmRule(alarmId: string, formValue: AlarmConfigFormValue): Observable {\n this.clearError();\n let payload: UpdateAlarmRuleRequestDto;\n const currentAlarm = this.alarmsSubject.getValue().find((alarm) => alarm.id === alarmId);\n const normalizedFormValue = currentAlarm\n ? { ...formValue, name: currentAlarm.name }\n : formValue;\n\n try {\n payload = this.requestMapper.toUpdateRequest(normalizedFormValue);\n } catch {\n return this.handleError('Dati del form non validi per l\\'aggiornamento dell\\'allarme.');\n }\n\n return this.api.updateAlarmRule(alarmId, payload).pipe(\n tap(() => {\n this.loadAlarmRules();\n this.alarmManagementRefreshService.requestRefresh();\n }),\n catchError((error: unknown) =>\n this.handleError(\n this.apiErrorDisplayService.toMessage(error, {\n fallbackMessage: 'Errore durante l\\'aggiornamento dell\\'allarme.',\n nonHttpStrategy: 'fallback',\n }),\n ),\n )\n );\n }\n\n public toggleEnabled(alarmId: string, enabled: boolean): Observable {\n this.clearError();\n const currentAlarm = this.alarmsSubject.getValue().find((alarm) => alarm.id === alarmId);\n if (!currentAlarm) {\n return this.handleError('Allarme non trovato nello stato locale.');\n }\n\n const payload = this.requestMapper.toToggleRequest(currentAlarm, enabled);\n\n return this.api.updateAlarmRule(alarmId, payload).pipe(\n tap(() => {\n this.loadAlarmRules();\n this.alarmManagementRefreshService.requestRefresh();\n }),\n catchError((error: unknown) =>\n this.handleError(\n this.apiErrorDisplayService.toMessage(error, {\n fallbackMessage: 'Errore durante la modifica dello stato dell\\'allarme.',\n nonHttpStrategy: 'fallback',\n }),\n ),\n )\n );\n }\n\n public deleteAlarmRule(alarmId: string): Observable {\n this.clearError();\n\n return this.api.deleteAlarmRule(alarmId).pipe(\n tap(() => {\n const currentAlarms = this.alarmsSubject.getValue();\n this.alarmsSubject.next(currentAlarms.filter((alarm) => alarm.id !== alarmId));\n this.alarmManagementRefreshService.requestRefresh();\n }),\n catchError((error: unknown) =>\n this.handleError(\n this.apiErrorDisplayService.toMessage(error, {\n fallbackMessage: 'Errore durante l\\'eliminazione dell\\'allarme.',\n nonHttpStrategy: 'fallback',\n }),\n ),\n )\n );\n }\n\n}\n"],mappings:"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",names:["ThresholdOperator","AlarmTimeMapper","toFormTime","value","Date","Number","isNaN","getTime","toHourMinute","toISOString","stringValue","String","trim","test","hhmmss","exec","match","slice","factory","\u0275fac","providedIn","AlarmRuleRequestMapper","alarmTimeMapper","inject","AlarmTimeMapper","hourMinutePattern","toCreateRequest","formValue","name","requireNonEmptyString","deviceId","datapointId","normalizeOptionalString","plantId","priority","toPriorityNumber","thresholdOperator","toThresholdOperatorCode","thresholdValue","toRequestThresholdValue","armingTime","requireHourMinuteString","dearmingTime","toUpdateRequest","isArmed","enabled","toToggleRequest","rule","requireThresholdOperator","toFormTime","requireField","operator","requiredOperator","ThresholdOperator","GREATER_THAN","GREATER_THAN_OR_EQUAL","LESS_THAN","LESS_THAN_OR_EQUAL","EQUAL_TO","Error","value","fieldName","trimmed","trim","length","String","undefined","required","test","normalized","toLowerCase","factory","\u0275fac","providedIn","AlarmConfigStateService","api","inject","AlarmApiService","alarmManagementRefreshService","AlarmManagementRefreshService","apiErrorDisplayService","ApiErrorDisplayService","requestMapper","AlarmRuleRequestMapper","alarmsSubject","BehaviorSubject","errorSubject","alarms$","asObservable","error$","clearError","getValue","next","handleError","message","EMPTY","loadAlarmRules","getAlarmRules","pipe","tap","alarms","catchError","error","toMessage","fallbackMessage","nonHttpStrategy","subscribe","getAlarmRuleById","id","getAlarmRule","createAlarmRule","formValue","payload","toCreateRequest","requestRefresh","updateAlarmRule","alarmId","currentAlarm","find","alarm","normalizedFormValue","__spreadProps","__spreadValues","name","toUpdateRequest","toggleEnabled","enabled","toToggleRequest","deleteAlarmRule","currentAlarms","filter","factory","\u0275fac"]},_coverageSchema:"1a1c01bbd47fc00a2c39e90264f33305004495a9",hash:"2f6edac41d4d1a68fdd35693b003cfbcbace13d9"};var coverage=global[gcv]||(global[gcv]={});if(!coverage[path]||coverage[path].hash!==hash){coverage[path]=coverageData;}var actualCoverage=coverage[path];{// @ts-ignore +cov_1mcmlbpjfg=function(){return actualCoverage;};}return actualCoverage;}cov_1mcmlbpjfg();import{a as f}from"./chunk-CFHT7CZE.js";import{a as E}from"./chunk-VIBKONAW.js";import{a as S}from"./chunk-JOEDXNZS.js";import{H as s,L as m,Q as n,e as p,f as g,w as o}from"./chunk-RYTNMYZW.js";import{a as d,b as c}from"./chunk-VCZGUBMY.js";var l=(cov_1mcmlbpjfg().s[0]++,function(t){cov_1mcmlbpjfg().f[0]++;cov_1mcmlbpjfg().s[1]++;return t.GREATER_THAN="maggiore di",t.GREATER_THAN_OR_EQUAL="maggiore o uguale a",t.LESS_THAN="minore di",t.LESS_THAN_OR_EQUAL="minore o uguale a",t.EQUAL_TO="uguale a",t;}((cov_1mcmlbpjfg().b[0][0]++,l)||(cov_1mcmlbpjfg().b[0][1]++,{})));var T=(cov_1mcmlbpjfg().s[2]++,(()=>{cov_1mcmlbpjfg().f[1]++;class t{toFormTime(r){cov_1mcmlbpjfg().f[2]++;cov_1mcmlbpjfg().s[3]++;if((cov_1mcmlbpjfg().b[2][0]++,r instanceof Date)&&(cov_1mcmlbpjfg().b[2][1]++,!Number.isNaN(r.getTime()))){cov_1mcmlbpjfg().b[1][0]++;cov_1mcmlbpjfg().s[4]++;return this.toHourMinute(r.toISOString());}else{cov_1mcmlbpjfg().b[1][1]++;}let e=(cov_1mcmlbpjfg().s[5]++,String(r).trim());cov_1mcmlbpjfg().s[6]++;if(/^([01]\d|2[0-3]):([0-5]\d)$/.test(e)){cov_1mcmlbpjfg().b[3][0]++;cov_1mcmlbpjfg().s[7]++;return e;}else{cov_1mcmlbpjfg().b[3][1]++;}let i=(cov_1mcmlbpjfg().s[8]++,/^([01]\d|2[0-3]):([0-5]\d):([0-5]\d)$/.exec(e));cov_1mcmlbpjfg().s[9]++;return i?(cov_1mcmlbpjfg().b[4][0]++,`${i[1]}:${i[2]}`):(cov_1mcmlbpjfg().b[4][1]++,this.toHourMinute(e));}toHourMinute(r){cov_1mcmlbpjfg().f[3]++;let e=(cov_1mcmlbpjfg().s[10]++,/T([01]\d|2[0-3]):([0-5]\d)/.exec(r));cov_1mcmlbpjfg().s[11]++;return e?(cov_1mcmlbpjfg().b[5][0]++,`${e[1]}:${e[2]}`):(cov_1mcmlbpjfg().b[5][1]++,r.slice(0,5));}static ɵfac=(cov_1mcmlbpjfg().s[12]++,function(e){cov_1mcmlbpjfg().f[4]++;cov_1mcmlbpjfg().s[13]++;return new((cov_1mcmlbpjfg().b[6][0]++,e)||(cov_1mcmlbpjfg().b[6][1]++,t))();});static ɵprov=(cov_1mcmlbpjfg().s[14]++,m({token:t,factory:t.ɵfac,providedIn:"root"}));}cov_1mcmlbpjfg().s[15]++;return t;})());var R=(cov_1mcmlbpjfg().s[16]++,(()=>{cov_1mcmlbpjfg().f[5]++;class t{alarmTimeMapper=(cov_1mcmlbpjfg().s[17]++,n(T));hourMinutePattern=(cov_1mcmlbpjfg().s[18]++,/^([01]\d|2[0-3]):([0-5]\d)$/);toCreateRequest(r){cov_1mcmlbpjfg().f[6]++;cov_1mcmlbpjfg().s[19]++;return{name:this.requireNonEmptyString(r.name,"name"),deviceId:this.requireNonEmptyString(r.deviceId,"deviceId"),datapointId:this.normalizeOptionalString(r.datapointId),plantId:this.requireNonEmptyString(r.plantId,"plantId"),priority:this.toPriorityNumber(r.priority),thresholdOperator:this.toThresholdOperatorCode(r.thresholdOperator),thresholdValue:this.toRequestThresholdValue(r.thresholdValue,"thresholdValue"),armingTime:this.requireHourMinuteString(r.armingTime,"armingTime"),dearmingTime:this.requireHourMinuteString(r.dearmingTime,"dearmingTime")};}toUpdateRequest(r){cov_1mcmlbpjfg().f[7]++;cov_1mcmlbpjfg().s[20]++;return{name:this.requireNonEmptyString(r.name,"name"),priority:this.toPriorityNumber(r.priority),thresholdOperator:this.toThresholdOperatorCode(r.thresholdOperator),thresholdValue:this.toRequestThresholdValue(r.thresholdValue,"thresholdValue"),armingTime:this.requireHourMinuteString(r.armingTime,"armingTime"),dearmingTime:this.requireHourMinuteString(r.dearmingTime,"dearmingTime"),isArmed:r.enabled};}toToggleRequest(r,e){cov_1mcmlbpjfg().f[8]++;cov_1mcmlbpjfg().s[21]++;return{name:this.requireNonEmptyString(r.name,"name"),priority:r.priority,thresholdOperator:this.requireThresholdOperator(r.thresholdOperator),thresholdValue:this.toRequestThresholdValue(r.thresholdValue,"thresholdValue"),armingTime:this.requireHourMinuteString(this.alarmTimeMapper.toFormTime(r.armingTime),"armingTime"),dearmingTime:this.requireHourMinuteString(this.alarmTimeMapper.toFormTime(r.dearmingTime),"dearmingTime"),isArmed:e};}toPriorityNumber(r){cov_1mcmlbpjfg().f[9]++;cov_1mcmlbpjfg().s[22]++;return this.requireField(r,"priority");}toThresholdOperatorCode(r){cov_1mcmlbpjfg().f[10]++;let e=(cov_1mcmlbpjfg().s[23]++,this.requireField(r,"thresholdOperator"));cov_1mcmlbpjfg().s[24]++;if(e===l.GREATER_THAN){cov_1mcmlbpjfg().b[7][0]++;cov_1mcmlbpjfg().s[25]++;return">";}else{cov_1mcmlbpjfg().b[7][1]++;}cov_1mcmlbpjfg().s[26]++;if(e===l.GREATER_THAN_OR_EQUAL){cov_1mcmlbpjfg().b[8][0]++;cov_1mcmlbpjfg().s[27]++;return">=";}else{cov_1mcmlbpjfg().b[8][1]++;}cov_1mcmlbpjfg().s[28]++;if(e===l.LESS_THAN){cov_1mcmlbpjfg().b[9][0]++;cov_1mcmlbpjfg().s[29]++;return"<";}else{cov_1mcmlbpjfg().b[9][1]++;}cov_1mcmlbpjfg().s[30]++;if(e===l.LESS_THAN_OR_EQUAL){cov_1mcmlbpjfg().b[10][0]++;cov_1mcmlbpjfg().s[31]++;return"<=";}else{cov_1mcmlbpjfg().b[10][1]++;}cov_1mcmlbpjfg().s[32]++;if(e===l.EQUAL_TO){cov_1mcmlbpjfg().b[11][0]++;cov_1mcmlbpjfg().s[33]++;return"=";}else{cov_1mcmlbpjfg().b[11][1]++;}cov_1mcmlbpjfg().s[34]++;throw new Error("Campo obbligatorio mancante: thresholdOperator");}requireField(r,e){cov_1mcmlbpjfg().f[11]++;cov_1mcmlbpjfg().s[35]++;if(r===null){cov_1mcmlbpjfg().b[12][0]++;cov_1mcmlbpjfg().s[36]++;throw new Error(`Campo obbligatorio mancante: ${e}`);}else{cov_1mcmlbpjfg().b[12][1]++;}cov_1mcmlbpjfg().s[37]++;return r;}requireNonEmptyString(r,e){cov_1mcmlbpjfg().f[12]++;let i=(cov_1mcmlbpjfg().s[38]++,r.trim());cov_1mcmlbpjfg().s[39]++;if(i.length===0){cov_1mcmlbpjfg().b[13][0]++;cov_1mcmlbpjfg().s[40]++;throw new Error(`Campo obbligatorio mancante: ${e}`);}else{cov_1mcmlbpjfg().b[13][1]++;}cov_1mcmlbpjfg().s[41]++;return i;}normalizeOptionalString(r){cov_1mcmlbpjfg().f[13]++;let e=(cov_1mcmlbpjfg().s[42]++,String((cov_1mcmlbpjfg().b[14][0]++,r)??(cov_1mcmlbpjfg().b[14][1]++,"")).trim());cov_1mcmlbpjfg().s[43]++;return e.length>0?(cov_1mcmlbpjfg().b[15][0]++,e):(cov_1mcmlbpjfg().b[15][1]++,void 0);}requireHourMinuteString(r,e){cov_1mcmlbpjfg().f[14]++;let i=(cov_1mcmlbpjfg().s[44]++,this.requireNonEmptyString(r,e));cov_1mcmlbpjfg().s[45]++;if(!this.hourMinutePattern.test(i)){cov_1mcmlbpjfg().b[16][0]++;cov_1mcmlbpjfg().s[46]++;throw new Error(`Formato non valido per ${e}`);}else{cov_1mcmlbpjfg().b[16][1]++;}cov_1mcmlbpjfg().s[47]++;return i;}requireThresholdOperator(r){cov_1mcmlbpjfg().f[15]++;let e=(cov_1mcmlbpjfg().s[48]++,this.requireNonEmptyString(r,"thresholdOperator"));cov_1mcmlbpjfg().s[49]++;if((cov_1mcmlbpjfg().b[18][0]++,e===">")||(cov_1mcmlbpjfg().b[18][1]++,e==="<")||(cov_1mcmlbpjfg().b[18][2]++,e===">=")||(cov_1mcmlbpjfg().b[18][3]++,e==="<=")||(cov_1mcmlbpjfg().b[18][4]++,e==="=")){cov_1mcmlbpjfg().b[17][0]++;cov_1mcmlbpjfg().s[50]++;return e;}else{cov_1mcmlbpjfg().b[17][1]++;}cov_1mcmlbpjfg().s[51]++;throw new Error("Campo obbligatorio mancante: thresholdOperator");}toRequestThresholdValue(r,e){cov_1mcmlbpjfg().f[16]++;let i=(cov_1mcmlbpjfg().s[52]++,this.requireNonEmptyString(r,e)),a=(cov_1mcmlbpjfg().s[53]++,i.toLowerCase());cov_1mcmlbpjfg().s[54]++;return(cov_1mcmlbpjfg().b[20][0]++,a==="on")||(cov_1mcmlbpjfg().b[20][1]++,a==="true")?(cov_1mcmlbpjfg().b[19][0]++,"on"):(cov_1mcmlbpjfg().b[19][1]++,(cov_1mcmlbpjfg().b[22][0]++,a==="off")||(cov_1mcmlbpjfg().b[22][1]++,a==="false")?(cov_1mcmlbpjfg().b[21][0]++,"off"):(cov_1mcmlbpjfg().b[21][1]++,i));}static ɵfac=(cov_1mcmlbpjfg().s[55]++,function(e){cov_1mcmlbpjfg().f[17]++;cov_1mcmlbpjfg().s[56]++;return new((cov_1mcmlbpjfg().b[23][0]++,e)||(cov_1mcmlbpjfg().b[23][1]++,t))();});static ɵprov=(cov_1mcmlbpjfg().s[57]++,m({token:t,factory:t.ɵfac,providedIn:"root"}));}cov_1mcmlbpjfg().s[58]++;return t;})());var F=(cov_1mcmlbpjfg().s[59]++,(()=>{cov_1mcmlbpjfg().f[18]++;class t{api=(cov_1mcmlbpjfg().s[60]++,n(f));alarmManagementRefreshService=(cov_1mcmlbpjfg().s[61]++,n(S));apiErrorDisplayService=(cov_1mcmlbpjfg().s[62]++,n(E));requestMapper=(cov_1mcmlbpjfg().s[63]++,n(R));alarmsSubject=(cov_1mcmlbpjfg().s[64]++,new p([]));errorSubject=(cov_1mcmlbpjfg().s[65]++,new p(null));alarms$=(cov_1mcmlbpjfg().s[66]++,this.alarmsSubject.asObservable());error$=(cov_1mcmlbpjfg().s[67]++,this.errorSubject.asObservable());clearError(){cov_1mcmlbpjfg().f[19]++;cov_1mcmlbpjfg().s[68]++;(cov_1mcmlbpjfg().b[24][0]++,this.errorSubject.getValue()!==null)&&(cov_1mcmlbpjfg().b[24][1]++,this.errorSubject.next(null));}handleError(r){cov_1mcmlbpjfg().f[20]++;cov_1mcmlbpjfg().s[69]++;return this.errorSubject.next(r),g;}loadAlarmRules(){cov_1mcmlbpjfg().f[21]++;cov_1mcmlbpjfg().s[70]++;this.clearError(),this.api.getAlarmRules().pipe(s(r=>{cov_1mcmlbpjfg().f[22]++;cov_1mcmlbpjfg().s[71]++;return this.alarmsSubject.next(r);}),o(r=>{cov_1mcmlbpjfg().f[23]++;cov_1mcmlbpjfg().s[72]++;return this.handleError(this.apiErrorDisplayService.toMessage(r,{fallbackMessage:"Errore durante il caricamento degli allarmi.",nonHttpStrategy:"fallback"}));})).subscribe();}getAlarmRuleById(r){cov_1mcmlbpjfg().f[24]++;cov_1mcmlbpjfg().s[73]++;return this.clearError(),this.api.getAlarmRule(r).pipe(o(e=>{cov_1mcmlbpjfg().f[25]++;cov_1mcmlbpjfg().s[74]++;return this.handleError(this.apiErrorDisplayService.toMessage(e,{fallbackMessage:"Errore durante il recupero dell'allarme.",nonHttpStrategy:"fallback"}));}));}createAlarmRule(r){cov_1mcmlbpjfg().f[26]++;cov_1mcmlbpjfg().s[75]++;this.clearError();let e;cov_1mcmlbpjfg().s[76]++;try{cov_1mcmlbpjfg().s[77]++;e=this.requestMapper.toCreateRequest(r);}catch{cov_1mcmlbpjfg().s[78]++;return this.handleError("Dati del form non validi per la creazione dell'allarme.");}cov_1mcmlbpjfg().s[79]++;return this.api.createAlarmRule(e).pipe(s(()=>{cov_1mcmlbpjfg().f[27]++;cov_1mcmlbpjfg().s[80]++;this.loadAlarmRules(),this.alarmManagementRefreshService.requestRefresh();}),o(i=>{cov_1mcmlbpjfg().f[28]++;cov_1mcmlbpjfg().s[81]++;return this.handleError(this.apiErrorDisplayService.toMessage(i,{fallbackMessage:"Errore durante la creazione dell'allarme.",nonHttpStrategy:"fallback"}));}));}updateAlarmRule(r,e){cov_1mcmlbpjfg().f[29]++;cov_1mcmlbpjfg().s[82]++;this.clearError();let i,a=(cov_1mcmlbpjfg().s[83]++,this.alarmsSubject.getValue().find(u=>{cov_1mcmlbpjfg().f[30]++;cov_1mcmlbpjfg().s[84]++;return u.id===r;})),h=(cov_1mcmlbpjfg().s[85]++,a?(cov_1mcmlbpjfg().b[25][0]++,c(d({},e),{name:a.name})):(cov_1mcmlbpjfg().b[25][1]++,e));cov_1mcmlbpjfg().s[86]++;try{cov_1mcmlbpjfg().s[87]++;i=this.requestMapper.toUpdateRequest(h);}catch{cov_1mcmlbpjfg().s[88]++;return this.handleError("Dati del form non validi per l'aggiornamento dell'allarme.");}cov_1mcmlbpjfg().s[89]++;return this.api.updateAlarmRule(r,i).pipe(s(()=>{cov_1mcmlbpjfg().f[31]++;cov_1mcmlbpjfg().s[90]++;this.loadAlarmRules(),this.alarmManagementRefreshService.requestRefresh();}),o(u=>{cov_1mcmlbpjfg().f[32]++;cov_1mcmlbpjfg().s[91]++;return this.handleError(this.apiErrorDisplayService.toMessage(u,{fallbackMessage:"Errore durante l'aggiornamento dell'allarme.",nonHttpStrategy:"fallback"}));}));}toggleEnabled(r,e){cov_1mcmlbpjfg().f[33]++;cov_1mcmlbpjfg().s[92]++;this.clearError();let i=(cov_1mcmlbpjfg().s[93]++,this.alarmsSubject.getValue().find(h=>{cov_1mcmlbpjfg().f[34]++;cov_1mcmlbpjfg().s[94]++;return h.id===r;}));cov_1mcmlbpjfg().s[95]++;if(!i){cov_1mcmlbpjfg().b[26][0]++;cov_1mcmlbpjfg().s[96]++;return this.handleError("Allarme non trovato nello stato locale.");}else{cov_1mcmlbpjfg().b[26][1]++;}let a=(cov_1mcmlbpjfg().s[97]++,this.requestMapper.toToggleRequest(i,e));cov_1mcmlbpjfg().s[98]++;return this.api.updateAlarmRule(r,a).pipe(s(()=>{cov_1mcmlbpjfg().f[35]++;cov_1mcmlbpjfg().s[99]++;this.loadAlarmRules(),this.alarmManagementRefreshService.requestRefresh();}),o(h=>{cov_1mcmlbpjfg().f[36]++;cov_1mcmlbpjfg().s[100]++;return this.handleError(this.apiErrorDisplayService.toMessage(h,{fallbackMessage:"Errore durante la modifica dello stato dell'allarme.",nonHttpStrategy:"fallback"}));}));}deleteAlarmRule(r){cov_1mcmlbpjfg().f[37]++;cov_1mcmlbpjfg().s[101]++;return this.clearError(),this.api.deleteAlarmRule(r).pipe(s(()=>{cov_1mcmlbpjfg().f[38]++;let e=(cov_1mcmlbpjfg().s[102]++,this.alarmsSubject.getValue());cov_1mcmlbpjfg().s[103]++;this.alarmsSubject.next(e.filter(i=>{cov_1mcmlbpjfg().f[39]++;cov_1mcmlbpjfg().s[104]++;return i.id!==r;})),this.alarmManagementRefreshService.requestRefresh();}),o(e=>{cov_1mcmlbpjfg().f[40]++;cov_1mcmlbpjfg().s[105]++;return this.handleError(this.apiErrorDisplayService.toMessage(e,{fallbackMessage:"Errore durante l'eliminazione dell'allarme.",nonHttpStrategy:"fallback"}));}));}static ɵfac=(cov_1mcmlbpjfg().s[106]++,function(e){cov_1mcmlbpjfg().f[41]++;cov_1mcmlbpjfg().s[107]++;return new((cov_1mcmlbpjfg().b[27][0]++,e)||(cov_1mcmlbpjfg().b[27][1]++,t))();});static ɵprov=(cov_1mcmlbpjfg().s[108]++,m({token:t,factory:t.ɵfac}));}cov_1mcmlbpjfg().s[109]++;return t;})());export{l as a,T as b,F as c};//# sourceMappingURL=chunk-MSNAYSOW.js.map +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJsIiwiY292XzFtY21sYnBqZmciLCJzIiwidCIsImYiLCJHUkVBVEVSX1RIQU4iLCJHUkVBVEVSX1RIQU5fT1JfRVFVQUwiLCJMRVNTX1RIQU4iLCJMRVNTX1RIQU5fT1JfRVFVQUwiLCJFUVVBTF9UTyIsImIiLCJUIiwidG9Gb3JtVGltZSIsInIiLCJEYXRlIiwiTnVtYmVyIiwiaXNOYU4iLCJnZXRUaW1lIiwidG9Ib3VyTWludXRlIiwidG9JU09TdHJpbmciLCJlIiwiU3RyaW5nIiwidHJpbSIsInRlc3QiLCJpIiwiZXhlYyIsInNsaWNlIiwiybVmYWMiLCLJtXByb3YiLCJtIiwidG9rZW4iLCJmYWN0b3J5IiwicHJvdmlkZWRJbiIsIlIiLCJhbGFybVRpbWVNYXBwZXIiLCJuIiwiaG91ck1pbnV0ZVBhdHRlcm4iLCJ0b0NyZWF0ZVJlcXVlc3QiLCJuYW1lIiwicmVxdWlyZU5vbkVtcHR5U3RyaW5nIiwiZGV2aWNlSWQiLCJkYXRhcG9pbnRJZCIsIm5vcm1hbGl6ZU9wdGlvbmFsU3RyaW5nIiwicGxhbnRJZCIsInByaW9yaXR5IiwidG9Qcmlvcml0eU51bWJlciIsInRocmVzaG9sZE9wZXJhdG9yIiwidG9UaHJlc2hvbGRPcGVyYXRvckNvZGUiLCJ0aHJlc2hvbGRWYWx1ZSIsInRvUmVxdWVzdFRocmVzaG9sZFZhbHVlIiwiYXJtaW5nVGltZSIsInJlcXVpcmVIb3VyTWludXRlU3RyaW5nIiwiZGVhcm1pbmdUaW1lIiwidG9VcGRhdGVSZXF1ZXN0IiwiaXNBcm1lZCIsImVuYWJsZWQiLCJ0b1RvZ2dsZVJlcXVlc3QiLCJyZXF1aXJlVGhyZXNob2xkT3BlcmF0b3IiLCJyZXF1aXJlRmllbGQiLCJFcnJvciIsImxlbmd0aCIsImEiLCJ0b0xvd2VyQ2FzZSIsIkYiLCJhcGkiLCJhbGFybU1hbmFnZW1lbnRSZWZyZXNoU2VydmljZSIsIlMiLCJhcGlFcnJvckRpc3BsYXlTZXJ2aWNlIiwiRSIsInJlcXVlc3RNYXBwZXIiLCJhbGFybXNTdWJqZWN0IiwicCIsImVycm9yU3ViamVjdCIsImFsYXJtcyQiLCJhc09ic2VydmFibGUiLCJlcnJvciQiLCJjbGVhckVycm9yIiwiZ2V0VmFsdWUiLCJuZXh0IiwiaGFuZGxlRXJyb3IiLCJnIiwibG9hZEFsYXJtUnVsZXMiLCJnZXRBbGFybVJ1bGVzIiwicGlwZSIsIm8iLCJ0b01lc3NhZ2UiLCJmYWxsYmFja01lc3NhZ2UiLCJub25IdHRwU3RyYXRlZ3kiLCJzdWJzY3JpYmUiLCJnZXRBbGFybVJ1bGVCeUlkIiwiZ2V0QWxhcm1SdWxlIiwiY3JlYXRlQWxhcm1SdWxlIiwicmVxdWVzdFJlZnJlc2giLCJ1cGRhdGVBbGFybVJ1bGUiLCJmaW5kIiwidSIsImlkIiwiaCIsImMiLCJkIiwidG9nZ2xlRW5hYmxlZCIsImRlbGV0ZUFsYXJtUnVsZSIsImZpbHRlciJdLCJzb3VyY2VzIjpbInNyYy9hcHAvY29yZS9hbGFybS9tb2RlbHMvdGhyZXNob2xkLW9wZXJhdG9yLmVudW0udHMiLCJzcmMvYXBwL2ZlYXR1cmVzL2FsYXJtLWNvbmZpZ3VyYXRpb24vbWFwcGVycy9hbGFybS10aW1lLm1hcHBlci50cyIsInNyYy9hcHAvZmVhdHVyZXMvYWxhcm0tY29uZmlndXJhdGlvbi9tYXBwZXJzL2FsYXJtLXJ1bGUtcmVxdWVzdC5tYXBwZXIudHMiLCJzcmMvYXBwL2ZlYXR1cmVzL2FsYXJtLWNvbmZpZ3VyYXRpb24vc2VydmljZXMvYWxhcm0tY29uZmlnLXN0YXRlLnNlcnZpY2UudHMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGVudW0gVGhyZXNob2xkT3BlcmF0b3Ige1xuICAgIEdSRUFURVJfVEhBTiA9ICdtYWdnaW9yZSBkaScsXG4gICAgR1JFQVRFUl9USEFOX09SX0VRVUFMID0gJ21hZ2dpb3JlIG8gdWd1YWxlIGEnLFxuICAgIExFU1NfVEhBTiA9ICdtaW5vcmUgZGknLFxuICAgIExFU1NfVEhBTl9PUl9FUVVBTCA9ICdtaW5vcmUgbyB1Z3VhbGUgYScsXG4gICAgRVFVQUxfVE8gPSAndWd1YWxlIGEnLFxufVxuIiwiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIEFsYXJtVGltZU1hcHBlciB7XG4gICAgcHVibGljIHRvRm9ybVRpbWUodmFsdWU6IERhdGUgfCBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlICYmICFOdW1iZXIuaXNOYU4odmFsdWUuZ2V0VGltZSgpKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudG9Ib3VyTWludXRlKHZhbHVlLnRvSVNPU3RyaW5nKCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc3RyaW5nVmFsdWUgPSBTdHJpbmcodmFsdWUpLnRyaW0oKTtcbiAgICAgICAgaWYgKC9eKFswMV1cXGR8MlswLTNdKTooWzAtNV1cXGQpJC8udGVzdChzdHJpbmdWYWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmdWYWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGhobW1zcyA9IC9eKFswMV1cXGR8MlswLTNdKTooWzAtNV1cXGQpOihbMC01XVxcZCkkLy5leGVjKHN0cmluZ1ZhbHVlKTtcbiAgICAgICAgaWYgKGhobW1zcykge1xuICAgICAgICAgICAgcmV0dXJuIGAke2hobW1zc1sxXX06JHtoaG1tc3NbMl19YDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLnRvSG91ck1pbnV0ZShzdHJpbmdWYWx1ZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB0b0hvdXJNaW51dGUodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IG1hdGNoID0gL1QoWzAxXVxcZHwyWzAtM10pOihbMC01XVxcZCkvLmV4ZWModmFsdWUpO1xuICAgICAgICBpZiAoIW1hdGNoKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUuc2xpY2UoMCwgNSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYCR7bWF0Y2hbMV19OiR7bWF0Y2hbMl19YDtcbiAgICB9XG59IiwiaW1wb3J0IHsgSW5qZWN0YWJsZSwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBbGFybVByaW9yaXR5IH0gZnJvbSAnLi4vLi4vLi4vY29yZS9hbGFybS9tb2RlbHMvYWxhcm0tcHJpb3JpdHkuZW51bSc7XG5pbXBvcnQgeyBBbGFybVJ1bGUgfSBmcm9tICcuLi8uLi8uLi9jb3JlL2FsYXJtL21vZGVscy9hbGFybS1ydWxlLm1vZGVsJztcbmltcG9ydCB7IFRocmVzaG9sZE9wZXJhdG9yIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9hbGFybS9tb2RlbHMvdGhyZXNob2xkLW9wZXJhdG9yLmVudW0nO1xuaW1wb3J0IHsgQ3JlYXRlQWxhcm1SdWxlUmVxdWVzdER0byB9IGZyb20gJy4uLy4uLy4uL2NvcmUvYWxhcm0vbW9kZWxzL2R0by9jcmVhdGUtYWxhcm0tcnVsZS1yZXF1ZXN0Lm1vZGVsLmR0byc7XG5pbXBvcnQgeyBVcGRhdGVBbGFybVJ1bGVSZXF1ZXN0RHRvIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9hbGFybS9tb2RlbHMvZHRvL3VwZGF0ZS1hbGFybS1ydWxlLXJlcXVlc3QubW9kZWwuZHRvJztcbmltcG9ydCB7IEFsYXJtQ29uZmlnRm9ybVZhbHVlIH0gZnJvbSAnLi4vbW9kZWxzL2FsYXJtLWNvbmZpZy1mb3JtLXZhbHVlLm1vZGVsJztcbmltcG9ydCB7IEFsYXJtVGltZU1hcHBlciB9IGZyb20gJy4vYWxhcm0tdGltZS5tYXBwZXInO1xuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIEFsYXJtUnVsZVJlcXVlc3RNYXBwZXIge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgYWxhcm1UaW1lTWFwcGVyID0gaW5qZWN0KEFsYXJtVGltZU1hcHBlcik7XG4gICAgcHJpdmF0ZSByZWFkb25seSBob3VyTWludXRlUGF0dGVybiA9IC9eKFswMV1cXGR8MlswLTNdKTooWzAtNV1cXGQpJC87XG5cbiAgICBwdWJsaWMgdG9DcmVhdGVSZXF1ZXN0KGZvcm1WYWx1ZTogQWxhcm1Db25maWdGb3JtVmFsdWUpOiBDcmVhdGVBbGFybVJ1bGVSZXF1ZXN0RHRvIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5hbWU6IHRoaXMucmVxdWlyZU5vbkVtcHR5U3RyaW5nKGZvcm1WYWx1ZS5uYW1lLCAnbmFtZScpLFxuICAgICAgICAgICAgZGV2aWNlSWQ6IHRoaXMucmVxdWlyZU5vbkVtcHR5U3RyaW5nKGZvcm1WYWx1ZS5kZXZpY2VJZCwgJ2RldmljZUlkJyksXG4gICAgICAgICAgICBkYXRhcG9pbnRJZDogdGhpcy5ub3JtYWxpemVPcHRpb25hbFN0cmluZyhmb3JtVmFsdWUuZGF0YXBvaW50SWQpLFxuICAgICAgICAgICAgcGxhbnRJZDogdGhpcy5yZXF1aXJlTm9uRW1wdHlTdHJpbmcoZm9ybVZhbHVlLnBsYW50SWQsICdwbGFudElkJyksXG4gICAgICAgICAgICBwcmlvcml0eTogdGhpcy50b1ByaW9yaXR5TnVtYmVyKGZvcm1WYWx1ZS5wcmlvcml0eSksXG4gICAgICAgICAgICB0aHJlc2hvbGRPcGVyYXRvcjogdGhpcy50b1RocmVzaG9sZE9wZXJhdG9yQ29kZShmb3JtVmFsdWUudGhyZXNob2xkT3BlcmF0b3IpLFxuICAgICAgICAgICAgdGhyZXNob2xkVmFsdWU6IHRoaXMudG9SZXF1ZXN0VGhyZXNob2xkVmFsdWUoZm9ybVZhbHVlLnRocmVzaG9sZFZhbHVlLCAndGhyZXNob2xkVmFsdWUnKSxcbiAgICAgICAgICAgIGFybWluZ1RpbWU6IHRoaXMucmVxdWlyZUhvdXJNaW51dGVTdHJpbmcoZm9ybVZhbHVlLmFybWluZ1RpbWUsICdhcm1pbmdUaW1lJyksXG4gICAgICAgICAgICBkZWFybWluZ1RpbWU6IHRoaXMucmVxdWlyZUhvdXJNaW51dGVTdHJpbmcoZm9ybVZhbHVlLmRlYXJtaW5nVGltZSwgJ2RlYXJtaW5nVGltZScpLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHB1YmxpYyB0b1VwZGF0ZVJlcXVlc3QoZm9ybVZhbHVlOiBBbGFybUNvbmZpZ0Zvcm1WYWx1ZSk6IFVwZGF0ZUFsYXJtUnVsZVJlcXVlc3REdG8ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbmFtZTogdGhpcy5yZXF1aXJlTm9uRW1wdHlTdHJpbmcoZm9ybVZhbHVlLm5hbWUsICduYW1lJyksXG4gICAgICAgICAgICBwcmlvcml0eTogdGhpcy50b1ByaW9yaXR5TnVtYmVyKGZvcm1WYWx1ZS5wcmlvcml0eSksXG4gICAgICAgICAgICB0aHJlc2hvbGRPcGVyYXRvcjogdGhpcy50b1RocmVzaG9sZE9wZXJhdG9yQ29kZShmb3JtVmFsdWUudGhyZXNob2xkT3BlcmF0b3IpLFxuICAgICAgICAgICAgdGhyZXNob2xkVmFsdWU6IHRoaXMudG9SZXF1ZXN0VGhyZXNob2xkVmFsdWUoZm9ybVZhbHVlLnRocmVzaG9sZFZhbHVlLCAndGhyZXNob2xkVmFsdWUnKSxcbiAgICAgICAgICAgIGFybWluZ1RpbWU6IHRoaXMucmVxdWlyZUhvdXJNaW51dGVTdHJpbmcoZm9ybVZhbHVlLmFybWluZ1RpbWUsICdhcm1pbmdUaW1lJyksXG4gICAgICAgICAgICBkZWFybWluZ1RpbWU6IHRoaXMucmVxdWlyZUhvdXJNaW51dGVTdHJpbmcoZm9ybVZhbHVlLmRlYXJtaW5nVGltZSwgJ2RlYXJtaW5nVGltZScpLFxuICAgICAgICAgICAgaXNBcm1lZDogZm9ybVZhbHVlLmVuYWJsZWQsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHVibGljIHRvVG9nZ2xlUmVxdWVzdChydWxlOiBBbGFybVJ1bGUsIGlzQXJtZWQ6IGJvb2xlYW4pOiBVcGRhdGVBbGFybVJ1bGVSZXF1ZXN0RHRvIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5hbWU6IHRoaXMucmVxdWlyZU5vbkVtcHR5U3RyaW5nKHJ1bGUubmFtZSwgJ25hbWUnKSxcbiAgICAgICAgICAgIHByaW9yaXR5OiBydWxlLnByaW9yaXR5LFxuICAgICAgICAgICAgdGhyZXNob2xkT3BlcmF0b3I6IHRoaXMucmVxdWlyZVRocmVzaG9sZE9wZXJhdG9yKHJ1bGUudGhyZXNob2xkT3BlcmF0b3IpLFxuICAgICAgICAgICAgdGhyZXNob2xkVmFsdWU6IHRoaXMudG9SZXF1ZXN0VGhyZXNob2xkVmFsdWUocnVsZS50aHJlc2hvbGRWYWx1ZSwgJ3RocmVzaG9sZFZhbHVlJyksXG4gICAgICAgICAgICBhcm1pbmdUaW1lOiB0aGlzLnJlcXVpcmVIb3VyTWludXRlU3RyaW5nKHRoaXMuYWxhcm1UaW1lTWFwcGVyLnRvRm9ybVRpbWUocnVsZS5hcm1pbmdUaW1lKSwgJ2FybWluZ1RpbWUnKSxcbiAgICAgICAgICAgIGRlYXJtaW5nVGltZTogdGhpcy5yZXF1aXJlSG91ck1pbnV0ZVN0cmluZyh0aGlzLmFsYXJtVGltZU1hcHBlci50b0Zvcm1UaW1lKHJ1bGUuZGVhcm1pbmdUaW1lKSwgJ2RlYXJtaW5nVGltZScpLFxuICAgICAgICAgICAgaXNBcm1lZCxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHRvUHJpb3JpdHlOdW1iZXIocHJpb3JpdHk6IEFsYXJtUHJpb3JpdHkgfCBudWxsKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVxdWlyZUZpZWxkKHByaW9yaXR5LCAncHJpb3JpdHknKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHRvVGhyZXNob2xkT3BlcmF0b3JDb2RlKG9wZXJhdG9yOiBUaHJlc2hvbGRPcGVyYXRvciB8IG51bGwpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCByZXF1aXJlZE9wZXJhdG9yID0gdGhpcy5yZXF1aXJlRmllbGQob3BlcmF0b3IsICd0aHJlc2hvbGRPcGVyYXRvcicpO1xuICAgICAgICBpZiAocmVxdWlyZWRPcGVyYXRvciA9PT0gVGhyZXNob2xkT3BlcmF0b3IuR1JFQVRFUl9USEFOKSB7XG4gICAgICAgICAgICByZXR1cm4gJz4nO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZXF1aXJlZE9wZXJhdG9yID09PSBUaHJlc2hvbGRPcGVyYXRvci5HUkVBVEVSX1RIQU5fT1JfRVFVQUwpIHtcbiAgICAgICAgICAgIHJldHVybiAnPj0nO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZXF1aXJlZE9wZXJhdG9yID09PSBUaHJlc2hvbGRPcGVyYXRvci5MRVNTX1RIQU4pIHtcbiAgICAgICAgICAgIHJldHVybiAnPCc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlcXVpcmVkT3BlcmF0b3IgPT09IFRocmVzaG9sZE9wZXJhdG9yLkxFU1NfVEhBTl9PUl9FUVVBTCkge1xuICAgICAgICAgICAgcmV0dXJuICc8PSc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlcXVpcmVkT3BlcmF0b3IgPT09IFRocmVzaG9sZE9wZXJhdG9yLkVRVUFMX1RPKSB7XG4gICAgICAgICAgICByZXR1cm4gJz0nO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW1wbyBvYmJsaWdhdG9yaW8gbWFuY2FudGU6IHRocmVzaG9sZE9wZXJhdG9yYCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZXF1aXJlRmllbGQ8VD4odmFsdWU6IFQgfCBudWxsLCBmaWVsZE5hbWU6IHN0cmluZyk6IFQge1xuICAgICAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2FtcG8gb2JibGlnYXRvcmlvIG1hbmNhbnRlOiAke2ZpZWxkTmFtZX1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlcXVpcmVOb25FbXB0eVN0cmluZyh2YWx1ZTogc3RyaW5nLCBmaWVsZE5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IHRyaW1tZWQgPSB2YWx1ZS50cmltKCk7XG4gICAgICAgIGlmICh0cmltbWVkLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW1wbyBvYmJsaWdhdG9yaW8gbWFuY2FudGU6ICR7ZmllbGROYW1lfWApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRyaW1tZWQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBub3JtYWxpemVPcHRpb25hbFN0cmluZyh2YWx1ZT86IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGNvbnN0IHRyaW1tZWQgPSBTdHJpbmcodmFsdWUgPz8gJycpLnRyaW0oKTtcbiAgICAgICAgcmV0dXJuIHRyaW1tZWQubGVuZ3RoID4gMCA/IHRyaW1tZWQgOiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZXF1aXJlSG91ck1pbnV0ZVN0cmluZyh2YWx1ZTogc3RyaW5nLCBmaWVsZE5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IHJlcXVpcmVkID0gdGhpcy5yZXF1aXJlTm9uRW1wdHlTdHJpbmcodmFsdWUsIGZpZWxkTmFtZSk7XG4gICAgICAgIGlmICghdGhpcy5ob3VyTWludXRlUGF0dGVybi50ZXN0KHJlcXVpcmVkKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGb3JtYXRvIG5vbiB2YWxpZG8gcGVyICR7ZmllbGROYW1lfWApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlcXVpcmVkO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVxdWlyZVRocmVzaG9sZE9wZXJhdG9yKG9wZXJhdG9yOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCByZXF1aXJlZCA9IHRoaXMucmVxdWlyZU5vbkVtcHR5U3RyaW5nKG9wZXJhdG9yLCAndGhyZXNob2xkT3BlcmF0b3InKTtcbiAgICAgICAgaWYgKHJlcXVpcmVkID09PSAnPicgfHwgcmVxdWlyZWQgPT09ICc8JyB8fCByZXF1aXJlZCA9PT0gJz49JyB8fCByZXF1aXJlZCA9PT0gJzw9JyB8fCByZXF1aXJlZCA9PT0gJz0nKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVxdWlyZWQ7XG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhbXBvIG9iYmxpZ2F0b3JpbyBtYW5jYW50ZTogdGhyZXNob2xkT3BlcmF0b3InKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHRvUmVxdWVzdFRocmVzaG9sZFZhbHVlKHZhbHVlOiBzdHJpbmcsIGZpZWxkTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgcmVxdWlyZWQgPSB0aGlzLnJlcXVpcmVOb25FbXB0eVN0cmluZyh2YWx1ZSwgZmllbGROYW1lKTtcbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZCA9IHJlcXVpcmVkLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmIChub3JtYWxpemVkID09PSAnb24nIHx8IG5vcm1hbGl6ZWQgPT09ICd0cnVlJykge1xuICAgICAgICAgICAgcmV0dXJuICdvbic7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vcm1hbGl6ZWQgPT09ICdvZmYnIHx8IG5vcm1hbGl6ZWQgPT09ICdmYWxzZScpIHtcbiAgICAgICAgICAgIHJldHVybiAnb2ZmJztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXF1aXJlZDtcbiAgICB9XG59IiwiaW1wb3J0IHsgSW5qZWN0YWJsZSwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIEVNUFRZLCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBBbGFybVJ1bGUgfSBmcm9tICcuLi8uLi8uLi9jb3JlL2FsYXJtL21vZGVscy9hbGFybS1ydWxlLm1vZGVsJztcbmltcG9ydCB7IENyZWF0ZUFsYXJtUnVsZVJlcXVlc3REdG8gfSBmcm9tICcuLi8uLi8uLi9jb3JlL2FsYXJtL21vZGVscy9kdG8vY3JlYXRlLWFsYXJtLXJ1bGUtcmVxdWVzdC5tb2RlbC5kdG8nO1xuaW1wb3J0IHsgVXBkYXRlQWxhcm1SdWxlUmVxdWVzdER0byB9IGZyb20gJy4uLy4uLy4uL2NvcmUvYWxhcm0vbW9kZWxzL2R0by91cGRhdGUtYWxhcm0tcnVsZS1yZXF1ZXN0Lm1vZGVsLmR0byc7XG5pbXBvcnQgeyBBbGFybUFwaVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9jb3JlL2FsYXJtL3NlcnZpY2VzL2FsYXJtLWFwaS5zZXJ2aWNlJztcbmltcG9ydCB7IEFsYXJtTWFuYWdlbWVudFJlZnJlc2hTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9hbGFybS9zZXJ2aWNlcy9hbGFybS1tYW5hZ2VtZW50LXJlZnJlc2guc2VydmljZSc7XG5pbXBvcnQgeyBBcGlFcnJvckRpc3BsYXlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlcy9hcGktZXJyb3ItZGlzcGxheS5zZXJ2aWNlJztcbmltcG9ydCB7IEFsYXJtUnVsZVJlcXVlc3RNYXBwZXIgfSBmcm9tICcuLi9tYXBwZXJzL2FsYXJtLXJ1bGUtcmVxdWVzdC5tYXBwZXInO1xuaW1wb3J0IHsgQWxhcm1Db25maWdGb3JtVmFsdWUgfSBmcm9tICcuLi9tb2RlbHMvYWxhcm0tY29uZmlnLWZvcm0tdmFsdWUubW9kZWwnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQWxhcm1Db25maWdTdGF0ZVNlcnZpY2Uge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgYXBpID0gaW5qZWN0KEFsYXJtQXBpU2VydmljZSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBhbGFybU1hbmFnZW1lbnRSZWZyZXNoU2VydmljZSA9IGluamVjdChBbGFybU1hbmFnZW1lbnRSZWZyZXNoU2VydmljZSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBhcGlFcnJvckRpc3BsYXlTZXJ2aWNlID0gaW5qZWN0KEFwaUVycm9yRGlzcGxheVNlcnZpY2UpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcmVxdWVzdE1hcHBlciA9IGluamVjdChBbGFybVJ1bGVSZXF1ZXN0TWFwcGVyKTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgYWxhcm1zU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QWxhcm1SdWxlW10+KFtdKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGVycm9yU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG5cbiAgICBwdWJsaWMgcmVhZG9ubHkgYWxhcm1zJCA9IHRoaXMuYWxhcm1zU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgICBwdWJsaWMgcmVhZG9ubHkgZXJyb3IkID0gdGhpcy5lcnJvclN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cblxuICAgIHByaXZhdGUgY2xlYXJFcnJvcigpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZXJyb3JTdWJqZWN0LmdldFZhbHVlKCkgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuZXJyb3JTdWJqZWN0Lm5leHQobnVsbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZUVycm9yPFQ+KG1lc3NhZ2U6IHN0cmluZyk6IE9ic2VydmFibGU8VD4ge1xuICAgICAgICB0aGlzLmVycm9yU3ViamVjdC5uZXh0KG1lc3NhZ2UpO1xuICAgICAgICByZXR1cm4gRU1QVFk7XG4gICAgfVxuXG5cbiAgICAvL2NhcmljYSBzb2dsaWUgZGkgYWxsYXJtZVxuICAgIHB1YmxpYyBsb2FkQWxhcm1SdWxlcygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jbGVhckVycm9yKCk7XG4gICAgICAgIHRoaXMuYXBpXG4gICAgICAgICAgICAuZ2V0QWxhcm1SdWxlcygpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICB0YXAoKGFsYXJtcykgPT4gdGhpcy5hbGFybXNTdWJqZWN0Lm5leHQoYWxhcm1zKSksXG4gICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IHVua25vd24pID0+XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlRXJyb3I8QWxhcm1SdWxlW10+KFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hcGlFcnJvckRpc3BsYXlTZXJ2aWNlLnRvTWVzc2FnZShlcnJvciwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbGxiYWNrTWVzc2FnZTogJ0Vycm9yZSBkdXJhbnRlIGlsIGNhcmljYW1lbnRvIGRlZ2xpIGFsbGFybWkuJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub25IdHRwU3RyYXRlZ3k6ICdmYWxsYmFjaycsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEFsYXJtUnVsZUJ5SWQoaWQ6IHN0cmluZyk6IE9ic2VydmFibGU8QWxhcm1SdWxlPiB7XG4gICAgICAgIHRoaXMuY2xlYXJFcnJvcigpO1xuICAgICAgICByZXR1cm4gdGhpcy5hcGkuZ2V0QWxhcm1SdWxlKGlkKS5waXBlKFxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IHVua25vd24pID0+XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVFcnJvcjxBbGFybVJ1bGU+KFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFwaUVycm9yRGlzcGxheVNlcnZpY2UudG9NZXNzYWdlKGVycm9yLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmYWxsYmFja01lc3NhZ2U6ICdFcnJvcmUgZHVyYW50ZSBpbCByZWN1cGVybyBkZWxsXFwnYWxsYXJtZS4nLFxuICAgICAgICAgICAgICAgICAgICAgICAgbm9uSHR0cFN0cmF0ZWd5OiAnZmFsbGJhY2snLFxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvL2EgcGFydGlyZSBkYWwgZm9ybSAtPiBtYXBwaW5nIGEgRFRPIC0+IHNlcnZpY2UgQVBJIC0+IGFnZ2lvcm5hbWVudG8gc3RhdG8gbG9jYWxlXG4gICAgcHVibGljIGNyZWF0ZUFsYXJtUnVsZShmb3JtVmFsdWU6IEFsYXJtQ29uZmlnRm9ybVZhbHVlKTogT2JzZXJ2YWJsZTxBbGFybVJ1bGU+IHtcbiAgICAgICAgdGhpcy5jbGVhckVycm9yKCk7XG4gICAgICAgIGxldCBwYXlsb2FkOiBDcmVhdGVBbGFybVJ1bGVSZXF1ZXN0RHRvO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcGF5bG9hZCA9IHRoaXMucmVxdWVzdE1hcHBlci50b0NyZWF0ZVJlcXVlc3QoZm9ybVZhbHVlKTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5oYW5kbGVFcnJvcjxBbGFybVJ1bGU+KCdEYXRpIGRlbCBmb3JtIG5vbiB2YWxpZGkgcGVyIGxhIGNyZWF6aW9uZSBkZWxsXFwnYWxsYXJtZS4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmFwaS5jcmVhdGVBbGFybVJ1bGUocGF5bG9hZCkucGlwZShcbiAgICAgICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkQWxhcm1SdWxlcygpO1xuICAgICAgICAgICAgICAgIHRoaXMuYWxhcm1NYW5hZ2VtZW50UmVmcmVzaFNlcnZpY2UucmVxdWVzdFJlZnJlc2goKTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IHVua25vd24pID0+XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVFcnJvcjxBbGFybVJ1bGU+KFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFwaUVycm9yRGlzcGxheVNlcnZpY2UudG9NZXNzYWdlKGVycm9yLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmYWxsYmFja01lc3NhZ2U6ICdFcnJvcmUgZHVyYW50ZSBsYSBjcmVhemlvbmUgZGVsbFxcJ2FsbGFybWUuJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vbkh0dHBTdHJhdGVneTogJ2ZhbGxiYWNrJyxcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdXBkYXRlQWxhcm1SdWxlKGFsYXJtSWQ6IHN0cmluZywgZm9ybVZhbHVlOiBBbGFybUNvbmZpZ0Zvcm1WYWx1ZSk6IE9ic2VydmFibGU8QWxhcm1SdWxlPiB7XG4gICAgICAgIHRoaXMuY2xlYXJFcnJvcigpO1xuICAgICAgICBsZXQgcGF5bG9hZDogVXBkYXRlQWxhcm1SdWxlUmVxdWVzdER0bztcbiAgICAgICAgY29uc3QgY3VycmVudEFsYXJtID0gdGhpcy5hbGFybXNTdWJqZWN0LmdldFZhbHVlKCkuZmluZCgoYWxhcm0pID0+IGFsYXJtLmlkID09PSBhbGFybUlkKTtcbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZEZvcm1WYWx1ZSA9IGN1cnJlbnRBbGFybVxuICAgICAgICAgICAgPyB7IC4uLmZvcm1WYWx1ZSwgbmFtZTogY3VycmVudEFsYXJtLm5hbWUgfVxuICAgICAgICAgICAgOiBmb3JtVmFsdWU7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHBheWxvYWQgPSB0aGlzLnJlcXVlc3RNYXBwZXIudG9VcGRhdGVSZXF1ZXN0KG5vcm1hbGl6ZWRGb3JtVmFsdWUpO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmhhbmRsZUVycm9yPEFsYXJtUnVsZT4oJ0RhdGkgZGVsIGZvcm0gbm9uIHZhbGlkaSBwZXIgbFxcJ2FnZ2lvcm5hbWVudG8gZGVsbFxcJ2FsbGFybWUuJyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5hcGkudXBkYXRlQWxhcm1SdWxlKGFsYXJtSWQsIHBheWxvYWQpLnBpcGUoXG4gICAgICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZEFsYXJtUnVsZXMoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmFsYXJtTWFuYWdlbWVudFJlZnJlc2hTZXJ2aWNlLnJlcXVlc3RSZWZyZXNoKCk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiB1bmtub3duKSA9PlxuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlRXJyb3I8QWxhcm1SdWxlPihcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hcGlFcnJvckRpc3BsYXlTZXJ2aWNlLnRvTWVzc2FnZShlcnJvciwge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmFsbGJhY2tNZXNzYWdlOiAnRXJyb3JlIGR1cmFudGUgbFxcJ2FnZ2lvcm5hbWVudG8gZGVsbFxcJ2FsbGFybWUuJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vbkh0dHBTdHJhdGVneTogJ2ZhbGxiYWNrJyxcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdG9nZ2xlRW5hYmxlZChhbGFybUlkOiBzdHJpbmcsIGVuYWJsZWQ6IGJvb2xlYW4pOiBPYnNlcnZhYmxlPEFsYXJtUnVsZT4ge1xuICAgICAgICB0aGlzLmNsZWFyRXJyb3IoKTtcbiAgICAgICAgY29uc3QgY3VycmVudEFsYXJtID0gdGhpcy5hbGFybXNTdWJqZWN0LmdldFZhbHVlKCkuZmluZCgoYWxhcm0pID0+IGFsYXJtLmlkID09PSBhbGFybUlkKTtcbiAgICAgICAgaWYgKCFjdXJyZW50QWxhcm0pIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmhhbmRsZUVycm9yPEFsYXJtUnVsZT4oJ0FsbGFybWUgbm9uIHRyb3ZhdG8gbmVsbG8gc3RhdG8gbG9jYWxlLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcGF5bG9hZCA9IHRoaXMucmVxdWVzdE1hcHBlci50b1RvZ2dsZVJlcXVlc3QoY3VycmVudEFsYXJtLCBlbmFibGVkKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5hcGkudXBkYXRlQWxhcm1SdWxlKGFsYXJtSWQsIHBheWxvYWQpLnBpcGUoXG4gICAgICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZEFsYXJtUnVsZXMoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmFsYXJtTWFuYWdlbWVudFJlZnJlc2hTZXJ2aWNlLnJlcXVlc3RSZWZyZXNoKCk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiB1bmtub3duKSA9PlxuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlRXJyb3I8QWxhcm1SdWxlPihcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hcGlFcnJvckRpc3BsYXlTZXJ2aWNlLnRvTWVzc2FnZShlcnJvciwge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmFsbGJhY2tNZXNzYWdlOiAnRXJyb3JlIGR1cmFudGUgbGEgbW9kaWZpY2EgZGVsbG8gc3RhdG8gZGVsbFxcJ2FsbGFybWUuJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vbkh0dHBTdHJhdGVneTogJ2ZhbGxiYWNrJyxcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZGVsZXRlQWxhcm1SdWxlKGFsYXJtSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgICAgICB0aGlzLmNsZWFyRXJyb3IoKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5hcGkuZGVsZXRlQWxhcm1SdWxlKGFsYXJtSWQpLnBpcGUoXG4gICAgICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRBbGFybXMgPSB0aGlzLmFsYXJtc1N1YmplY3QuZ2V0VmFsdWUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmFsYXJtc1N1YmplY3QubmV4dChjdXJyZW50QWxhcm1zLmZpbHRlcigoYWxhcm0pID0+IGFsYXJtLmlkICE9PSBhbGFybUlkKSk7XG4gICAgICAgICAgICAgICAgdGhpcy5hbGFybU1hbmFnZW1lbnRSZWZyZXNoU2VydmljZS5yZXF1ZXN0UmVmcmVzaCgpO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogdW5rbm93bikgPT5cbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUVycm9yPHZvaWQ+KFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFwaUVycm9yRGlzcGxheVNlcnZpY2UudG9NZXNzYWdlKGVycm9yLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmYWxsYmFja01lc3NhZ2U6ICdFcnJvcmUgZHVyYW50ZSBsXFwnZWxpbWluYXppb25lIGRlbGxcXCdhbGxhcm1lLicsXG4gICAgICAgICAgICAgICAgICAgICAgICBub25IdHRwU3RyYXRlZ3k6ICdmYWxsYmFjaycsXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgfVxuXG59XG4iXSwibWFwcGluZ3MiOiI7NlVBQUEsR0FBWSxDQUFBQSxDQUFBLEVBQUFDLGNBQUEsR0FBQUMsQ0FBQSxNQUFaLFNBQVlDLENBQUEsQ0FBaUIsQ0FBQUYsY0FBQSxHQUFBRyxDQUFBLEtBQUFILENBQUEsaUJBQUFDLENBQUEsTUFDekIsT0FBQUMsQ0FBQSxDQUFBRSxZQUFBLGVBQ0FGLENBQUEsQ0FBQUcscUJBQUEsdUJBQ0FILENBQUEsQ0FBQUksU0FBQSxhQUNBSixDQUFBLENBQUFLLGtCQUFBLHFCQUNBTCxDQUFBLENBQUFNLFFBQUEsWUFMUU4sQ0FNWixHQU5ZLENBQUFGLGNBQUEsR0FBQVMsQ0FBQSxTQUFBVixD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 \ No newline at end of file diff --git a/frontend/dist-instrumented/chunk-MSNAYSOW.js.map b/frontend/dist-instrumented/chunk-MSNAYSOW.js.map new file mode 100644 index 00000000..5d11591c --- /dev/null +++ b/frontend/dist-instrumented/chunk-MSNAYSOW.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["src/app/core/alarm/models/threshold-operator.enum.ts", "src/app/features/alarm-configuration/mappers/alarm-time.mapper.ts", "src/app/features/alarm-configuration/mappers/alarm-rule-request.mapper.ts", "src/app/features/alarm-configuration/services/alarm-config-state.service.ts"], + "sourcesContent": ["export enum ThresholdOperator {\n GREATER_THAN = 'maggiore di',\n GREATER_THAN_OR_EQUAL = 'maggiore o uguale a',\n LESS_THAN = 'minore di',\n LESS_THAN_OR_EQUAL = 'minore o uguale a',\n EQUAL_TO = 'uguale a',\n}\n", "import { Injectable } from '@angular/core';\n\n@Injectable({ providedIn: 'root' })\nexport class AlarmTimeMapper {\n public toFormTime(value: Date | string): string {\n if (value instanceof Date && !Number.isNaN(value.getTime())) {\n return this.toHourMinute(value.toISOString());\n }\n\n const stringValue = String(value).trim();\n if (/^([01]\\d|2[0-3]):([0-5]\\d)$/.test(stringValue)) {\n return stringValue;\n }\n\n const hhmmss = /^([01]\\d|2[0-3]):([0-5]\\d):([0-5]\\d)$/.exec(stringValue);\n if (hhmmss) {\n return `${hhmmss[1]}:${hhmmss[2]}`;\n }\n\n return this.toHourMinute(stringValue);\n }\n\n private toHourMinute(value: string): string {\n const match = /T([01]\\d|2[0-3]):([0-5]\\d)/.exec(value);\n if (!match) {\n return value.slice(0, 5);\n }\n\n return `${match[1]}:${match[2]}`;\n }\n}", "import { Injectable, inject } from '@angular/core';\nimport { AlarmPriority } from '../../../core/alarm/models/alarm-priority.enum';\nimport { AlarmRule } from '../../../core/alarm/models/alarm-rule.model';\nimport { ThresholdOperator } from '../../../core/alarm/models/threshold-operator.enum';\nimport { CreateAlarmRuleRequestDto } from '../../../core/alarm/models/dto/create-alarm-rule-request.model.dto';\nimport { UpdateAlarmRuleRequestDto } from '../../../core/alarm/models/dto/update-alarm-rule-request.model.dto';\nimport { AlarmConfigFormValue } from '../models/alarm-config-form-value.model';\nimport { AlarmTimeMapper } from './alarm-time.mapper';\n\n@Injectable({ providedIn: 'root' })\nexport class AlarmRuleRequestMapper {\n private readonly alarmTimeMapper = inject(AlarmTimeMapper);\n private readonly hourMinutePattern = /^([01]\\d|2[0-3]):([0-5]\\d)$/;\n\n public toCreateRequest(formValue: AlarmConfigFormValue): CreateAlarmRuleRequestDto {\n return {\n name: this.requireNonEmptyString(formValue.name, 'name'),\n deviceId: this.requireNonEmptyString(formValue.deviceId, 'deviceId'),\n datapointId: this.normalizeOptionalString(formValue.datapointId),\n plantId: this.requireNonEmptyString(formValue.plantId, 'plantId'),\n priority: this.toPriorityNumber(formValue.priority),\n thresholdOperator: this.toThresholdOperatorCode(formValue.thresholdOperator),\n thresholdValue: this.toRequestThresholdValue(formValue.thresholdValue, 'thresholdValue'),\n armingTime: this.requireHourMinuteString(formValue.armingTime, 'armingTime'),\n dearmingTime: this.requireHourMinuteString(formValue.dearmingTime, 'dearmingTime'),\n };\n }\n\n public toUpdateRequest(formValue: AlarmConfigFormValue): UpdateAlarmRuleRequestDto {\n return {\n name: this.requireNonEmptyString(formValue.name, 'name'),\n priority: this.toPriorityNumber(formValue.priority),\n thresholdOperator: this.toThresholdOperatorCode(formValue.thresholdOperator),\n thresholdValue: this.toRequestThresholdValue(formValue.thresholdValue, 'thresholdValue'),\n armingTime: this.requireHourMinuteString(formValue.armingTime, 'armingTime'),\n dearmingTime: this.requireHourMinuteString(formValue.dearmingTime, 'dearmingTime'),\n isArmed: formValue.enabled,\n };\n }\n\n public toToggleRequest(rule: AlarmRule, isArmed: boolean): UpdateAlarmRuleRequestDto {\n return {\n name: this.requireNonEmptyString(rule.name, 'name'),\n priority: rule.priority,\n thresholdOperator: this.requireThresholdOperator(rule.thresholdOperator),\n thresholdValue: this.toRequestThresholdValue(rule.thresholdValue, 'thresholdValue'),\n armingTime: this.requireHourMinuteString(this.alarmTimeMapper.toFormTime(rule.armingTime), 'armingTime'),\n dearmingTime: this.requireHourMinuteString(this.alarmTimeMapper.toFormTime(rule.dearmingTime), 'dearmingTime'),\n isArmed,\n };\n }\n\n private toPriorityNumber(priority: AlarmPriority | null): number {\n return this.requireField(priority, 'priority');\n }\n\n private toThresholdOperatorCode(operator: ThresholdOperator | null): string {\n const requiredOperator = this.requireField(operator, 'thresholdOperator');\n if (requiredOperator === ThresholdOperator.GREATER_THAN) {\n return '>';\n }\n if (requiredOperator === ThresholdOperator.GREATER_THAN_OR_EQUAL) {\n return '>=';\n }\n if (requiredOperator === ThresholdOperator.LESS_THAN) {\n return '<';\n }\n if (requiredOperator === ThresholdOperator.LESS_THAN_OR_EQUAL) {\n return '<=';\n }\n if (requiredOperator === ThresholdOperator.EQUAL_TO) {\n return '=';\n }\n\n throw new Error(`Campo obbligatorio mancante: thresholdOperator`);\n }\n\n private requireField(value: T | null, fieldName: string): T {\n if (value === null) {\n throw new Error(`Campo obbligatorio mancante: ${fieldName}`);\n }\n\n return value;\n }\n\n private requireNonEmptyString(value: string, fieldName: string): string {\n const trimmed = value.trim();\n if (trimmed.length === 0) {\n throw new Error(`Campo obbligatorio mancante: ${fieldName}`);\n }\n\n return trimmed;\n }\n\n private normalizeOptionalString(value?: string): string | undefined {\n const trimmed = String(value ?? '').trim();\n return trimmed.length > 0 ? trimmed : undefined;\n }\n\n private requireHourMinuteString(value: string, fieldName: string): string {\n const required = this.requireNonEmptyString(value, fieldName);\n if (!this.hourMinutePattern.test(required)) {\n throw new Error(`Formato non valido per ${fieldName}`);\n }\n\n return required;\n }\n\n private requireThresholdOperator(operator: string): string {\n const required = this.requireNonEmptyString(operator, 'thresholdOperator');\n if (required === '>' || required === '<' || required === '>=' || required === '<=' || required === '=') {\n return required;\n }\n\n throw new Error('Campo obbligatorio mancante: thresholdOperator');\n }\n\n private toRequestThresholdValue(value: string, fieldName: string): string {\n const required = this.requireNonEmptyString(value, fieldName);\n const normalized = required.toLowerCase();\n if (normalized === 'on' || normalized === 'true') {\n return 'on';\n }\n if (normalized === 'off' || normalized === 'false') {\n return 'off';\n }\n\n return required;\n }\n}", "import { Injectable, inject } from '@angular/core';\nimport { BehaviorSubject, EMPTY, Observable } from 'rxjs';\nimport { catchError, tap } from 'rxjs/operators';\nimport { AlarmRule } from '../../../core/alarm/models/alarm-rule.model';\nimport { CreateAlarmRuleRequestDto } from '../../../core/alarm/models/dto/create-alarm-rule-request.model.dto';\nimport { UpdateAlarmRuleRequestDto } from '../../../core/alarm/models/dto/update-alarm-rule-request.model.dto';\nimport { AlarmApiService } from '../../../core/alarm/services/alarm-api.service';\nimport { AlarmManagementRefreshService } from '../../../core/alarm/services/alarm-management-refresh.service';\nimport { ApiErrorDisplayService } from '../../../core/services/api-error-display.service';\nimport { AlarmRuleRequestMapper } from '../mappers/alarm-rule-request.mapper';\nimport { AlarmConfigFormValue } from '../models/alarm-config-form-value.model';\n\n@Injectable()\nexport class AlarmConfigStateService {\n private readonly api = inject(AlarmApiService);\n private readonly alarmManagementRefreshService = inject(AlarmManagementRefreshService);\n private readonly apiErrorDisplayService = inject(ApiErrorDisplayService);\n private readonly requestMapper = inject(AlarmRuleRequestMapper);\n\n private readonly alarmsSubject = new BehaviorSubject([]);\n private readonly errorSubject = new BehaviorSubject(null);\n\n public readonly alarms$ = this.alarmsSubject.asObservable();\n public readonly error$ = this.errorSubject.asObservable();\n\n\n private clearError(): void {\n if (this.errorSubject.getValue() !== null) {\n this.errorSubject.next(null);\n }\n }\n\n private handleError(message: string): Observable {\n this.errorSubject.next(message);\n return EMPTY;\n }\n\n\n //carica soglie di allarme\n public loadAlarmRules(): void {\n this.clearError();\n this.api\n .getAlarmRules()\n .pipe(\n tap((alarms) => this.alarmsSubject.next(alarms)),\n catchError((error: unknown) =>\n this.handleError(\n this.apiErrorDisplayService.toMessage(error, {\n fallbackMessage: 'Errore durante il caricamento degli allarmi.',\n nonHttpStrategy: 'fallback',\n }),\n ),\n )\n )\n .subscribe();\n }\n\n public getAlarmRuleById(id: string): Observable {\n this.clearError();\n return this.api.getAlarmRule(id).pipe(\n catchError((error: unknown) =>\n this.handleError(\n this.apiErrorDisplayService.toMessage(error, {\n fallbackMessage: 'Errore durante il recupero dell\\'allarme.',\n nonHttpStrategy: 'fallback',\n }),\n ),\n ),\n );\n }\n\n //a partire dal form -> mapping a DTO -> service API -> aggiornamento stato locale\n public createAlarmRule(formValue: AlarmConfigFormValue): Observable {\n this.clearError();\n let payload: CreateAlarmRuleRequestDto;\n try {\n payload = this.requestMapper.toCreateRequest(formValue);\n } catch {\n return this.handleError('Dati del form non validi per la creazione dell\\'allarme.');\n }\n\n return this.api.createAlarmRule(payload).pipe(\n tap(() => {\n this.loadAlarmRules();\n this.alarmManagementRefreshService.requestRefresh();\n }),\n catchError((error: unknown) =>\n this.handleError(\n this.apiErrorDisplayService.toMessage(error, {\n fallbackMessage: 'Errore durante la creazione dell\\'allarme.',\n nonHttpStrategy: 'fallback',\n }),\n ),\n )\n );\n }\n\n public updateAlarmRule(alarmId: string, formValue: AlarmConfigFormValue): Observable {\n this.clearError();\n let payload: UpdateAlarmRuleRequestDto;\n const currentAlarm = this.alarmsSubject.getValue().find((alarm) => alarm.id === alarmId);\n const normalizedFormValue = currentAlarm\n ? { ...formValue, name: currentAlarm.name }\n : formValue;\n\n try {\n payload = this.requestMapper.toUpdateRequest(normalizedFormValue);\n } catch {\n return this.handleError('Dati del form non validi per l\\'aggiornamento dell\\'allarme.');\n }\n\n return this.api.updateAlarmRule(alarmId, payload).pipe(\n tap(() => {\n this.loadAlarmRules();\n this.alarmManagementRefreshService.requestRefresh();\n }),\n catchError((error: unknown) =>\n this.handleError(\n this.apiErrorDisplayService.toMessage(error, {\n fallbackMessage: 'Errore durante l\\'aggiornamento dell\\'allarme.',\n nonHttpStrategy: 'fallback',\n }),\n ),\n )\n );\n }\n\n public toggleEnabled(alarmId: string, enabled: boolean): Observable {\n this.clearError();\n const currentAlarm = this.alarmsSubject.getValue().find((alarm) => alarm.id === alarmId);\n if (!currentAlarm) {\n return this.handleError('Allarme non trovato nello stato locale.');\n }\n\n const payload = this.requestMapper.toToggleRequest(currentAlarm, enabled);\n\n return this.api.updateAlarmRule(alarmId, payload).pipe(\n tap(() => {\n this.loadAlarmRules();\n this.alarmManagementRefreshService.requestRefresh();\n }),\n catchError((error: unknown) =>\n this.handleError(\n this.apiErrorDisplayService.toMessage(error, {\n fallbackMessage: 'Errore durante la modifica dello stato dell\\'allarme.',\n nonHttpStrategy: 'fallback',\n }),\n ),\n )\n );\n }\n\n public deleteAlarmRule(alarmId: string): Observable {\n this.clearError();\n\n return this.api.deleteAlarmRule(alarmId).pipe(\n tap(() => {\n const currentAlarms = this.alarmsSubject.getValue();\n this.alarmsSubject.next(currentAlarms.filter((alarm) => alarm.id !== alarmId));\n this.alarmManagementRefreshService.requestRefresh();\n }),\n catchError((error: unknown) =>\n this.handleError(\n this.apiErrorDisplayService.toMessage(error, {\n fallbackMessage: 'Errore durante l\\'eliminazione dell\\'allarme.',\n nonHttpStrategy: 'fallback',\n }),\n ),\n )\n );\n }\n\n}\n"], + "mappings": "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", + "names": ["ThresholdOperator", "AlarmTimeMapper", "toFormTime", "value", "Date", "Number", "isNaN", "getTime", "toHourMinute", "toISOString", "stringValue", "String", "trim", "test", "hhmmss", "exec", "match", "slice", "factory", "\u0275fac", "providedIn", "AlarmRuleRequestMapper", "alarmTimeMapper", "inject", "AlarmTimeMapper", "hourMinutePattern", "toCreateRequest", "formValue", "name", "requireNonEmptyString", "deviceId", "datapointId", "normalizeOptionalString", "plantId", "priority", "toPriorityNumber", "thresholdOperator", "toThresholdOperatorCode", "thresholdValue", "toRequestThresholdValue", "armingTime", "requireHourMinuteString", "dearmingTime", "toUpdateRequest", "isArmed", "enabled", "toToggleRequest", "rule", "requireThresholdOperator", "toFormTime", "requireField", "operator", "requiredOperator", "ThresholdOperator", "GREATER_THAN", "GREATER_THAN_OR_EQUAL", "LESS_THAN", "LESS_THAN_OR_EQUAL", "EQUAL_TO", "Error", "value", "fieldName", "trimmed", "trim", "length", "String", "undefined", "required", "test", "normalized", "toLowerCase", "factory", "\u0275fac", "providedIn", "AlarmConfigStateService", "api", "inject", "AlarmApiService", "alarmManagementRefreshService", "AlarmManagementRefreshService", "apiErrorDisplayService", "ApiErrorDisplayService", "requestMapper", "AlarmRuleRequestMapper", "alarmsSubject", "BehaviorSubject", "errorSubject", "alarms$", "asObservable", "error$", "clearError", "getValue", "next", "handleError", "message", "EMPTY", "loadAlarmRules", "getAlarmRules", "pipe", "tap", "alarms", "catchError", "error", "toMessage", "fallbackMessage", "nonHttpStrategy", "subscribe", "getAlarmRuleById", "id", "getAlarmRule", "createAlarmRule", "formValue", "payload", "toCreateRequest", "requestRefresh", "updateAlarmRule", "alarmId", "currentAlarm", "find", "alarm", "normalizedFormValue", "__spreadProps", "__spreadValues", "name", "toUpdateRequest", "toggleEnabled", "enabled", "toToggleRequest", "deleteAlarmRule", "currentAlarms", "filter", "factory", "\u0275fac"] +} diff --git a/frontend/dist-instrumented/chunk-MXFQVIBA.js b/frontend/dist-instrumented/chunk-MXFQVIBA.js new file mode 100644 index 00000000..a3dbbf27 --- /dev/null +++ b/frontend/dist-instrumented/chunk-MXFQVIBA.js @@ -0,0 +1,3 @@ +function cov_q6io8syts(){var path="/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-MXFQVIBA.js";var hash="4cea8ed6c448795afd9236c19c1bdd02a42ad552";var global=new Function("return this")();var gcv="__coverage__";var coverageData={path:"/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-MXFQVIBA.js",statementMap:{"0":{start:{line:1,column:214},end:{line:1,column:329}},"1":{start:{line:1,column:258},end:{line:1,column:327}},"2":{start:{line:1,column:296},end:{line:1,column:326}}},fnMap:{"0":{name:"(anonymous_0)",decl:{start:{line:1,column:254},end:{line:1,column:255}},loc:{start:{line:1,column:258},end:{line:1,column:327}},line:1},"1":{name:"(anonymous_1)",decl:{start:{line:1,column:293},end:{line:1,column:294}},loc:{start:{line:1,column:296},end:{line:1,column:326}},line:1}},branchMap:{},s:{"0":0,"1":0,"2":0},f:{"0":0,"1":0},b:{},inputSourceMap:{version:3,sources:["src/app/features/alarm-management/alarm-management.routes.ts"],sourcesContent:["import { Routes } from '@angular/router';\nimport { authGuard } from '../../core/guards/auth.guard';\n\nexport const ALARM_MANAGEMENT_ROUTES: Routes = [\n {\n path: '',\n canActivate: [authGuard],\n loadComponent: () =>\n import('./components/alarm-page-management-component/alarm-page-management-component').then(\n (m) => m.AlarmPageManagementComponent\n )\n }\n];\n"],mappings:"gNAGO,IAAMA,EAAkC,CAC7C,CACEC,KAAM,GACNC,YAAa,CAACC,CAAS,EACvBC,cAAeA,IACb,OAAO,qBAA8E,EAAEC,KACpFC,GAAMA,EAAEC,4BAA4B,EAE1C",names:["ALARM_MANAGEMENT_ROUTES","path","canActivate","authGuard","loadComponent","then","m","AlarmPageManagementComponent"]},_coverageSchema:"1a1c01bbd47fc00a2c39e90264f33305004495a9",hash:"4cea8ed6c448795afd9236c19c1bdd02a42ad552"};var coverage=global[gcv]||(global[gcv]={});if(!coverage[path]||coverage[path].hash!==hash){coverage[path]=coverageData;}var actualCoverage=coverage[path];{// @ts-ignore +cov_q6io8syts=function(){return actualCoverage;};}return actualCoverage;}cov_q6io8syts();import{a as t}from"./chunk-K2WBT5ZC.js";import"./chunk-FYGTVJAL.js";import"./chunk-65RKWSY3.js";import"./chunk-2S5V5XEE.js";import"./chunk-F6OGAIBI.js";import"./chunk-RYTNMYZW.js";import"./chunk-VCZGUBMY.js";var n=(cov_q6io8syts().s[0]++,[{path:"",canActivate:[t],loadComponent:()=>{cov_q6io8syts().f[0]++;cov_q6io8syts().s[1]++;return import("./chunk-X4Y2U43G.js").then(a=>{cov_q6io8syts().f[1]++;cov_q6io8syts().s[2]++;return a.AlarmPageManagementComponent;});}}]);export{n as ALARM_MANAGEMENT_ROUTES};//# sourceMappingURL=chunk-MXFQVIBA.js.map +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJuIiwiY292X3E2aW84c3l0cyIsInMiLCJwYXRoIiwiY2FuQWN0aXZhdGUiLCJ0IiwibG9hZENvbXBvbmVudCIsImYiLCJ0aGVuIiwiYSIsIkFsYXJtUGFnZU1hbmFnZW1lbnRDb21wb25lbnQiLCJBTEFSTV9NQU5BR0VNRU5UX1JPVVRFUyJdLCJzb3VyY2VzIjpbInNyYy9hcHAvZmVhdHVyZXMvYWxhcm0tbWFuYWdlbWVudC9hbGFybS1tYW5hZ2VtZW50LnJvdXRlcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSb3V0ZXMgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgYXV0aEd1YXJkIH0gZnJvbSAnLi4vLi4vY29yZS9ndWFyZHMvYXV0aC5ndWFyZCc7XG5cbmV4cG9ydCBjb25zdCBBTEFSTV9NQU5BR0VNRU5UX1JPVVRFUzogUm91dGVzID0gW1xuICB7XG4gICAgcGF0aDogJycsXG4gICAgY2FuQWN0aXZhdGU6IFthdXRoR3VhcmRdLFxuICAgIGxvYWRDb21wb25lbnQ6ICgpID0+XG4gICAgICBpbXBvcnQoJy4vY29tcG9uZW50cy9hbGFybS1wYWdlLW1hbmFnZW1lbnQtY29tcG9uZW50L2FsYXJtLXBhZ2UtbWFuYWdlbWVudC1jb21wb25lbnQnKS50aGVuKFxuICAgICAgICAobSkgPT4gbS5BbGFybVBhZ2VNYW5hZ2VtZW50Q29tcG9uZW50XG4gICAgICApXG4gIH1cbl07XG4iXSwibWFwcGluZ3MiOiI7eVNBR08sR0FBTSxDQUFBQSxDQUFBLEVBQUFDLGFBQUEsR0FBQUMsQ0FBQSxNQUFrQyxDQUM3QyxDQUNFQyxJQUFBLENBQU0sR0FDTkMsV0FBQSxDQUFhLENBQUNDLENBQVMsRUFDdkJDLGFBQUEsQ0FBZUEsQ0FBQSxHQUNiLENBQUFMLGFBQUEsR0FBQU0sQ0FBQSxLQUFBTixDQUFBLGdCQUFBQyxDQUFBLG9CQUFPLHFCQUE4RSxFQUFFTSxJQUFBLENBQ3BGQyxDQUFBLEVBQU0sQ0FBQVIsYUFBQSxHQUFBTSxDQUFBLEtBQUFOLENBQUEsZ0JBQUFDLENBQUEsYUFBQU8sQ0FBQSxDQUFFQyw0QkFBNEIsQ0FBNUIsQ0FBNEIsSUFFMUMsVUFBQVYsQ0FBQSxJQUFBVyx1QkFBQSxFIiwiaWdub3JlTGlzdCI6W119 \ No newline at end of file diff --git a/frontend/dist-instrumented/chunk-MXFQVIBA.js.map b/frontend/dist-instrumented/chunk-MXFQVIBA.js.map new file mode 100644 index 00000000..08ab711f --- /dev/null +++ b/frontend/dist-instrumented/chunk-MXFQVIBA.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["src/app/features/alarm-management/alarm-management.routes.ts"], + "sourcesContent": ["import { Routes } from '@angular/router';\nimport { authGuard } from '../../core/guards/auth.guard';\n\nexport const ALARM_MANAGEMENT_ROUTES: Routes = [\n {\n path: '',\n canActivate: [authGuard],\n loadComponent: () =>\n import('./components/alarm-page-management-component/alarm-page-management-component').then(\n (m) => m.AlarmPageManagementComponent\n )\n }\n];\n"], + "mappings": "gNAGO,IAAMA,EAAkC,CAC7C,CACEC,KAAM,GACNC,YAAa,CAACC,CAAS,EACvBC,cAAeA,IACb,OAAO,qBAA8E,EAAEC,KACpFC,GAAMA,EAAEC,4BAA4B,EAE1C", + "names": ["ALARM_MANAGEMENT_ROUTES", "path", "canActivate", "authGuard", "loadComponent", "then", "m", "AlarmPageManagementComponent"] +} diff --git a/frontend/dist-instrumented/chunk-NAQGW5AE.js b/frontend/dist-instrumented/chunk-NAQGW5AE.js new file mode 100644 index 00000000..d552637a --- /dev/null +++ b/frontend/dist-instrumented/chunk-NAQGW5AE.js @@ -0,0 +1,3 @@ +function cov_vf77y5990(){var path="/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-NAQGW5AE.js";var hash="55c2f9470829d1ff1492562821f8eed6a744b583";var global=new Function("return this")();var gcv="__coverage__";var coverageData={path:"/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-NAQGW5AE.js",statementMap:{"0":{start:{line:1,column:98},end:{line:1,column:110}},"1":{start:{line:1,column:116},end:{line:1,column:194}},"2":{start:{line:1,column:126},end:{line:1,column:158}},"3":{start:{line:1,column:142},end:{line:1,column:151}},"4":{start:{line:1,column:151},end:{line:1,column:157}},"5":{start:{line:1,column:158},end:{line:1,column:192}},"6":{start:{line:1,column:195},end:{line:1,column:217}},"7":{start:{line:1,column:205},end:{line:1,column:217}},"8":{start:{line:1,column:240},end:{line:1,column:288}},"9":{start:{line:1,column:291},end:{line:1,column:302}},"10":{start:{line:1,column:305},end:{line:1,column:390}},"11":{start:{line:1,column:398},end:{line:1,column:506}},"12":{start:{line:1,column:419},end:{line:1,column:442}},"13":{start:{line:1,column:453},end:{line:1,column:482}},"14":{start:{line:1,column:498},end:{line:1,column:503}},"15":{start:{line:1,column:507},end:{line:1,column:559}},"16":{start:{line:1,column:539},end:{line:1,column:559}},"17":{start:{line:1,column:559},end:{line:1,column:725}},"18":{start:{line:1,column:617},end:{line:1,column:620}},"19":{start:{line:1,column:621},end:{line:1,column:706}},"20":{start:{line:1,column:643},end:{line:1,column:658}},"21":{start:{line:1,column:665},end:{line:1,column:679}},"22":{start:{line:1,column:686},end:{line:1,column:705}},"23":{start:{line:1,column:750},end:{line:1,column:805}},"24":{start:{line:1,column:763},end:{line:1,column:805}}},fnMap:{"0":{name:"E",decl:{start:{line:1,column:93},end:{line:1,column:94}},loc:{start:{line:1,column:97},end:{line:1,column:218}},line:1},"1":{name:"(anonymous_1)",decl:{start:{line:1,column:122},end:{line:1,column:123}},loc:{start:{line:1,column:125},end:{line:1,column:193}},line:1},"2":{name:"(anonymous_2)",decl:{start:{line:1,column:202},end:{line:1,column:203}},loc:{start:{line:1,column:205},end:{line:1,column:217}},line:1},"3":{name:"U",decl:{start:{line:1,column:227},end:{line:1,column:228}},loc:{start:{line:1,column:233},end:{line:1,column:726}},line:1},"4":{name:"(anonymous_4)",decl:{start:{line:1,column:416},end:{line:1,column:417}},loc:{start:{line:1,column:419},end:{line:1,column:442}},line:1},"5":{name:"(anonymous_5)",decl:{start:{line:1,column:449},end:{line:1,column:450}},loc:{start:{line:1,column:452},end:{line:1,column:483}},line:1},"6":{name:"(anonymous_6)",decl:{start:{line:1,column:493},end:{line:1,column:494}},loc:{start:{line:1,column:497},end:{line:1,column:504}},line:1},"7":{name:"(anonymous_7)",decl:{start:{line:1,column:606},end:{line:1,column:607}},loc:{start:{line:1,column:610},end:{line:1,column:707}},line:1},"8":{name:"p",decl:{start:{line:1,column:735},end:{line:1,column:736}},loc:{start:{line:1,column:749},end:{line:1,column:806}},line:1},"9":{name:"(anonymous_9)",decl:{start:{line:1,column:756},end:{line:1,column:757}},loc:{start:{line:1,column:763},end:{line:1,column:805}},line:1}},branchMap:{"0":{loc:{start:{line:1,column:98},end:{line:1,column:109}},type:"binary-expr",locations:[{start:{line:1,column:98},end:{line:1,column:99}},{start:{line:1,column:102},end:{line:1,column:108}}],line:1},"1":{loc:{start:{line:1,column:126},end:{line:1,column:158}},type:"if",locations:[{start:{line:1,column:126},end:{line:1,column:158}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"2":{loc:{start:{line:1,column:240},end:{line:1,column:288}},type:"cond-expr",locations:[{start:{line:1,column:258},end:{line:1,column:283}},{start:{line:1,column:284},end:{line:1,column:288}}],line:1},"3":{loc:{start:{line:1,column:258},end:{line:1,column:283}},type:"binary-expr",locations:[{start:{line:1,column:258},end:{line:1,column:277}},{start:{line:1,column:279},end:{line:1,column:283}}],line:1},"4":{loc:{start:{line:1,column:305},end:{line:1,column:389}},type:"cond-expr",locations:[{start:{line:1,column:320},end:{line:1,column:343}},{start:{line:1,column:344},end:{line:1,column:389}}],line:1},"5":{loc:{start:{line:1,column:507},end:{line:1,column:559}},type:"if",locations:[{start:{line:1,column:507},end:{line:1,column:559}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"6":{loc:{start:{line:1,column:510},end:{line:1,column:538}},type:"binary-expr",locations:[{start:{line:1,column:510},end:{line:1,column:524}},{start:{line:1,column:526},end:{line:1,column:538}}],line:1},"7":{loc:{start:{line:1,column:621},end:{line:1,column:706}},type:"switch",locations:[{start:{line:1,column:636},end:{line:1,column:658}},{start:{line:1,column:658},end:{line:1,column:679}},{start:{line:1,column:679},end:{line:1,column:705}}],line:1},"8":{loc:{start:{line:1,column:737},end:{line:1,column:748}},type:"default-arg",locations:[{start:{line:1,column:739},end:{line:1,column:748}}],line:1},"9":{loc:{start:{line:1,column:763},end:{line:1,column:805}},type:"binary-expr",locations:[{start:{line:1,column:763},end:{line:1,column:773}},{start:{line:1,column:775},end:{line:1,column:785}},{start:{line:1,column:787},end:{line:1,column:805}}],line:1}},s:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0},f:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0},b:{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0,0],"8":[0],"9":[0,0,0]},inputSourceMap:{version:3,sources:["node_modules/@angular/core/fesm2022/rxjs-interop.mjs"],sourcesContent:["/**\n * @license Angular v21.2.4\n * (c) 2010-2026 Google LLC. https://angular.dev/\n * License: MIT\n */\n\nimport { Observable, ReplaySubject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { assertInInjectionContext, inject, DestroyRef, RuntimeError, Injector, effect, assertNotInReactiveContext, signal, PendingTasks } from './_effect-chunk2.mjs';\nimport { getOutputDestroyRef, untracked, computed, resource, encapsulateResourceError } from './_resource-chunk.mjs';\nimport './_effect-chunk.mjs';\nimport './_not_found-chunk.mjs';\nimport '@angular/core/primitives/signals';\nimport '@angular/core/primitives/di';\nimport './_untracked-chunk.mjs';\nfunction takeUntilDestroyed(destroyRef) {\n if (!destroyRef) {\n ngDevMode && assertInInjectionContext(takeUntilDestroyed);\n destroyRef = inject(DestroyRef);\n }\n const destroyed$ = new Observable(subscriber => {\n if (destroyRef.destroyed) {\n subscriber.next();\n return;\n }\n const unregisterFn = destroyRef.onDestroy(subscriber.next.bind(subscriber));\n return unregisterFn;\n });\n return source => {\n return source.pipe(takeUntil(destroyed$));\n };\n}\nclass OutputFromObservableRef {\n source;\n destroyed = false;\n destroyRef = /*#__PURE__*/inject(DestroyRef);\n constructor(source) {\n this.source = source;\n this.destroyRef.onDestroy(() => {\n this.destroyed = true;\n });\n }\n subscribe(callbackFn) {\n if (this.destroyed) {\n throw new RuntimeError(953, ngDevMode && 'Unexpected subscription to destroyed `OutputRef`. ' + 'The owning directive/component is destroyed.');\n }\n const subscription = this.source.pipe(takeUntilDestroyed(this.destroyRef)).subscribe({\n next: value => callbackFn(value)\n });\n return {\n unsubscribe: () => subscription.unsubscribe()\n };\n }\n}\nfunction outputFromObservable(observable, opts) {\n ngDevMode && assertInInjectionContext(outputFromObservable);\n return new OutputFromObservableRef(observable);\n}\nfunction outputToObservable(ref) {\n const destroyRef = getOutputDestroyRef(ref);\n return new Observable(observer => {\n const unregisterOnDestroy = destroyRef?.onDestroy(() => observer.complete());\n const subscription = ref.subscribe(v => observer.next(v));\n return () => {\n subscription.unsubscribe();\n unregisterOnDestroy?.();\n };\n });\n}\nfunction toObservable(source, options) {\n if (ngDevMode && !options?.injector) {\n assertInInjectionContext(toObservable);\n }\n const injector = options?.injector ?? inject(Injector);\n const subject = new ReplaySubject(1);\n const watcher = effect(() => {\n let value;\n try {\n value = source();\n } catch (err) {\n untracked(() => subject.error(err));\n return;\n }\n untracked(() => subject.next(value));\n }, {\n injector,\n manualCleanup: true\n });\n injector.get(DestroyRef).onDestroy(() => {\n watcher.destroy();\n subject.complete();\n });\n return subject.asObservable();\n}\nfunction toSignal(source, options) {\n typeof ngDevMode !== 'undefined' && ngDevMode && assertNotInReactiveContext(toSignal, 'Invoking `toSignal` causes new subscriptions every time. ' + 'Consider moving `toSignal` outside of the reactive context and read the signal value where needed.');\n const requiresCleanup = !options?.manualCleanup;\n if (ngDevMode && requiresCleanup && !options?.injector) {\n assertInInjectionContext(toSignal);\n }\n const cleanupRef = requiresCleanup ? options?.injector?.get(DestroyRef) ?? inject(DestroyRef) : null;\n const equal = makeToSignalEqual(options?.equal);\n let state;\n if (options?.requireSync) {\n state = signal({\n kind: 0\n }, {\n equal,\n ...(ngDevMode ? createDebugNameObject(options?.debugName, 'state') : undefined)\n });\n } else {\n state = signal({\n kind: 1,\n value: options?.initialValue\n }, {\n equal,\n ...(ngDevMode ? createDebugNameObject(options?.debugName, 'state') : undefined)\n });\n }\n let destroyUnregisterFn;\n const sub = source.subscribe({\n next: value => state.set({\n kind: 1,\n value\n }),\n error: error => {\n state.set({\n kind: 2,\n error\n });\n destroyUnregisterFn?.();\n },\n complete: () => {\n destroyUnregisterFn?.();\n }\n });\n if (options?.requireSync && state().kind === 0) {\n throw new RuntimeError(601, (typeof ngDevMode === 'undefined' || ngDevMode) && '`toSignal()` called with `requireSync` but `Observable` did not emit synchronously.');\n }\n destroyUnregisterFn = cleanupRef?.onDestroy(sub.unsubscribe.bind(sub));\n return computed(() => {\n const current = state();\n switch (current.kind) {\n case 1:\n return current.value;\n case 2:\n throw current.error;\n case 0:\n throw new RuntimeError(601, (typeof ngDevMode === 'undefined' || ngDevMode) && '`toSignal()` called with `requireSync` but `Observable` did not emit synchronously.');\n }\n }, {\n equal: options?.equal,\n ...(ngDevMode ? createDebugNameObject(options?.debugName, 'source') : undefined)\n });\n}\nfunction makeToSignalEqual(userEquality = Object.is) {\n return (a, b) => a.kind === 1 && b.kind === 1 && userEquality(a.value, b.value);\n}\nfunction createDebugNameObject(toSignalDebugName, internalSignalDebugName) {\n return {\n debugName: `toSignal${toSignalDebugName ? '#' + toSignalDebugName : ''}.${internalSignalDebugName}`\n };\n}\nfunction pendingUntilEvent(injector) {\n if (injector === undefined) {\n ngDevMode && assertInInjectionContext(pendingUntilEvent);\n injector = inject(Injector);\n }\n const taskService = injector.get(PendingTasks);\n return sourceObservable => {\n return new Observable(originalSubscriber => {\n const removeTask = taskService.add();\n let cleanedUp = false;\n function cleanupTask() {\n if (cleanedUp) {\n return;\n }\n removeTask();\n cleanedUp = true;\n }\n const innerSubscription = sourceObservable.subscribe({\n next: v => {\n originalSubscriber.next(v);\n cleanupTask();\n },\n complete: () => {\n originalSubscriber.complete();\n cleanupTask();\n },\n error: e => {\n originalSubscriber.error(e);\n cleanupTask();\n }\n });\n innerSubscription.add(() => {\n originalSubscriber.unsubscribe();\n cleanupTask();\n });\n return innerSubscription;\n });\n };\n}\nfunction rxResource(opts) {\n if (ngDevMode && !opts?.injector) {\n assertInInjectionContext(rxResource);\n }\n return resource({\n ...opts,\n loader: undefined,\n stream: params => {\n let sub;\n const onAbort = () => sub?.unsubscribe();\n params.abortSignal.addEventListener('abort', onAbort);\n const stream = signal({\n value: undefined\n });\n let resolve;\n const promise = new Promise(r => resolve = r);\n function send(value) {\n stream.set(value);\n resolve?.(stream);\n resolve = undefined;\n }\n const streamFn = opts.stream;\n if (streamFn === undefined) {\n throw new RuntimeError(990, ngDevMode && `Must provide \\`stream\\` option.`);\n }\n sub = streamFn(params).subscribe({\n next: value => send({\n value\n }),\n error: error => {\n send({\n error: encapsulateResourceError(error)\n });\n params.abortSignal.removeEventListener('abort', onAbort);\n },\n complete: () => {\n if (resolve) {\n send({\n error: new RuntimeError(991, ngDevMode && 'Resource completed before producing a value')\n });\n }\n params.abortSignal.removeEventListener('abort', onAbort);\n }\n });\n return promise;\n }\n });\n}\nexport { outputFromObservable, outputToObservable, pendingUntilEvent, rxResource, takeUntilDestroyed, toObservable, toSignal };\n"],mappings:"oFAeA,SAASA,EAAmBC,EAAY,CACjCA,IAEHA,EAAaC,EAAOC,CAAU,GAEhC,IAAMC,EAAa,IAAIC,EAAWC,GAAc,CAC9C,GAAIL,EAAW,UAAW,CACxBK,EAAW,KAAK,EAChB,MACF,CAEA,OADqBL,EAAW,UAAUK,EAAW,KAAK,KAAKA,CAAU,CAAC,CAE5E,CAAC,EACD,OAAOC,GACEA,EAAO,KAAKC,EAAUJ,CAAU,CAAC,CAE5C,CA+DA,SAASK,EAASC,EAAQC,EAAS,CAMjC,IAAMC,EAJkB,CAACD,GAAS,cAIGA,GAAS,UAAU,IAAIE,CAAU,GAAKC,EAAOD,CAAU,EAAI,KAC1FE,EAAQC,EAAkBL,GAAS,KAAK,EAC1CM,EACAN,GAAS,YACXM,EAAQC,EAAO,CACb,KAAM,CACR,EAAG,CACD,MAAAH,CAEF,CAAC,EAEDE,EAAQC,EAAO,CACb,KAAM,EACN,MAAOP,GAAS,YAClB,EAAG,CACD,MAAAI,CAEF,CAAC,EAEH,IAAII,EACEC,EAAMV,EAAO,UAAU,CAC3B,KAAMW,GAASJ,EAAM,IAAI,CACvB,KAAM,EACN,MAAAI,CACF,CAAC,EACD,MAAOC,GAAS,CACdL,EAAM,IAAI,CACR,KAAM,EACN,MAAAK,CACF,CAAC,EACDH,IAAsB,CACxB,EACA,SAAU,IAAM,CACdA,IAAsB,CACxB,CACF,CAAC,EACD,GAAIR,GAAS,aAAeM,EAAM,EAAE,OAAS,EAC3C,MAAM,IAAIM,EAAa,IAA0C,EAAmG,EAEtK,OAAAJ,EAAsBP,GAAY,UAAUQ,EAAI,YAAY,KAAKA,CAAG,CAAC,EAC9DI,EAAS,IAAM,CACpB,IAAMC,EAAUR,EAAM,EACtB,OAAQQ,EAAQ,KAAM,CACpB,IAAK,GACH,OAAOA,EAAQ,MACjB,IAAK,GACH,MAAMA,EAAQ,MAChB,IAAK,GACH,MAAM,IAAIF,EAAa,IAA0C,EAAmG,CACxK,CACF,EAAG,CACD,MAAOZ,GAAS,KAElB,CAAC,CACH,CACA,SAASK,EAAkBU,EAAe,OAAO,GAAI,CACnD,MAAO,CAACC,EAAGC,IAAMD,EAAE,OAAS,GAAKC,EAAE,OAAS,GAAKF,EAAaC,EAAE,MAAOC,EAAE,KAAK,CAChF",names:["takeUntilDestroyed","destroyRef","inject","DestroyRef","destroyed$","Observable","subscriber","source","takeUntil","toSignal","source","options","cleanupRef","DestroyRef","inject","equal","makeToSignalEqual","state","signal","destroyUnregisterFn","sub","value","error","RuntimeError","computed","current","userEquality","a","b"],x_google_ignoreList:[0]},_coverageSchema:"1a1c01bbd47fc00a2c39e90264f33305004495a9",hash:"55c2f9470829d1ff1492562821f8eed6a744b583"};var coverage=global[gcv]||(global[gcv]={});if(!coverage[path]||coverage[path].hash!==hash){coverage[path]=coverageData;}var actualCoverage=coverage[path];{// @ts-ignore +cov_vf77y5990=function(){return actualCoverage;};}return actualCoverage;}cov_vf77y5990();import{$ as s,G as f,I as u,Pb as g,Q as c,c as v,ga as a}from"./chunk-RYTNMYZW.js";function E(n){cov_vf77y5990().f[0]++;cov_vf77y5990().s[0]++;(cov_vf77y5990().b[0][0]++,n)||(cov_vf77y5990().b[0][1]++,n=c(s));let e=(cov_vf77y5990().s[1]++,new v(t=>{cov_vf77y5990().f[1]++;cov_vf77y5990().s[2]++;if(n.destroyed){cov_vf77y5990().b[1][0]++;cov_vf77y5990().s[3]++;t.next();cov_vf77y5990().s[4]++;return;}else{cov_vf77y5990().b[1][1]++;}cov_vf77y5990().s[5]++;return n.onDestroy(t.next.bind(t));}));cov_vf77y5990().s[6]++;return t=>{cov_vf77y5990().f[2]++;cov_vf77y5990().s[7]++;return t.pipe(f(e));};}function U(n,e){cov_vf77y5990().f[3]++;let d=(cov_vf77y5990().s[8]++,!e?.manualCleanup?(cov_vf77y5990().b[2][0]++,(cov_vf77y5990().b[3][0]++,e?.injector?.get(s))??(cov_vf77y5990().b[3][1]++,c(s))):(cov_vf77y5990().b[2][1]++,null)),l=(cov_vf77y5990().s[9]++,p(e?.equal)),o;cov_vf77y5990().s[10]++;e?.requireSync?(cov_vf77y5990().b[4][0]++,o=a({kind:0},{equal:l})):(cov_vf77y5990().b[4][1]++,o=a({kind:1,value:e?.initialValue},{equal:l}));let i,b=(cov_vf77y5990().s[11]++,n.subscribe({next:r=>{cov_vf77y5990().f[4]++;cov_vf77y5990().s[12]++;return o.set({kind:1,value:r});},error:r=>{cov_vf77y5990().f[5]++;cov_vf77y5990().s[13]++;o.set({kind:2,error:r}),i?.();},complete:()=>{cov_vf77y5990().f[6]++;cov_vf77y5990().s[14]++;i?.();}}));cov_vf77y5990().s[15]++;if((cov_vf77y5990().b[6][0]++,e?.requireSync)&&(cov_vf77y5990().b[6][1]++,o().kind===0)){cov_vf77y5990().b[5][0]++;cov_vf77y5990().s[16]++;throw new u(601,!1);}else{cov_vf77y5990().b[5][1]++;}cov_vf77y5990().s[17]++;return i=d?.onDestroy(b.unsubscribe.bind(b)),g(()=>{cov_vf77y5990().f[7]++;let r=(cov_vf77y5990().s[18]++,o());cov_vf77y5990().s[19]++;switch(r.kind){case 1:cov_vf77y5990().b[7][0]++;cov_vf77y5990().s[20]++;return r.value;case 2:cov_vf77y5990().b[7][1]++;cov_vf77y5990().s[21]++;throw r.error;case 0:cov_vf77y5990().b[7][2]++;cov_vf77y5990().s[22]++;throw new u(601,!1);}},{equal:e?.equal});}function p(n=(cov_vf77y5990().b[8][0]++,Object.is)){cov_vf77y5990().f[8]++;cov_vf77y5990().s[23]++;return(e,t)=>{cov_vf77y5990().f[9]++;cov_vf77y5990().s[24]++;return(cov_vf77y5990().b[9][0]++,e.kind===1)&&(cov_vf77y5990().b[9][1]++,t.kind===1)&&(cov_vf77y5990().b[9][2]++,n(e.value,t.value));};}export{E as a,U as b};//# sourceMappingURL=chunk-NAQGW5AE.js.map +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJFIiwibiIsImNvdl92Zjc3eTU5OTAiLCJmIiwicyIsImIiLCJjIiwiZSIsInYiLCJ0IiwiZGVzdHJveWVkIiwibmV4dCIsIm9uRGVzdHJveSIsImJpbmQiLCJwaXBlIiwiVSIsImQiLCJtYW51YWxDbGVhbnVwIiwiaW5qZWN0b3IiLCJnZXQiLCJsIiwicCIsImVxdWFsIiwibyIsInJlcXVpcmVTeW5jIiwiYSIsImtpbmQiLCJ2YWx1ZSIsImluaXRpYWxWYWx1ZSIsImkiLCJzdWJzY3JpYmUiLCJyIiwic2V0IiwiZXJyb3IiLCJjb21wbGV0ZSIsInUiLCJ1bnN1YnNjcmliZSIsImciLCJPYmplY3QiLCJpcyJdLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9AYW5ndWxhci9jb3JlL2Zlc20yMDIyL3J4anMtaW50ZXJvcC5tanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZSBBbmd1bGFyIHYyMS4yLjRcbiAqIChjKSAyMDEwLTIwMjYgR29vZ2xlIExMQy4gaHR0cHM6Ly9hbmd1bGFyLmRldi9cbiAqIExpY2Vuc2U6IE1JVFxuICovXG5cbmltcG9ydCB7IE9ic2VydmFibGUsIFJlcGxheVN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IGFzc2VydEluSW5qZWN0aW9uQ29udGV4dCwgaW5qZWN0LCBEZXN0cm95UmVmLCBSdW50aW1lRXJyb3IsIEluamVjdG9yLCBlZmZlY3QsIGFzc2VydE5vdEluUmVhY3RpdmVDb250ZXh0LCBzaWduYWwsIFBlbmRpbmdUYXNrcyB9IGZyb20gJy4vX2VmZmVjdC1jaHVuazIubWpzJztcbmltcG9ydCB7IGdldE91dHB1dERlc3Ryb3lSZWYsIHVudHJhY2tlZCwgY29tcHV0ZWQsIHJlc291cmNlLCBlbmNhcHN1bGF0ZVJlc291cmNlRXJyb3IgfSBmcm9tICcuL19yZXNvdXJjZS1jaHVuay5tanMnO1xuaW1wb3J0ICcuL19lZmZlY3QtY2h1bmsubWpzJztcbmltcG9ydCAnLi9fbm90X2ZvdW5kLWNodW5rLm1qcyc7XG5pbXBvcnQgJ0Bhbmd1bGFyL2NvcmUvcHJpbWl0aXZlcy9zaWduYWxzJztcbmltcG9ydCAnQGFuZ3VsYXIvY29yZS9wcmltaXRpdmVzL2RpJztcbmltcG9ydCAnLi9fdW50cmFja2VkLWNodW5rLm1qcyc7XG5mdW5jdGlvbiB0YWtlVW50aWxEZXN0cm95ZWQoZGVzdHJveVJlZikge1xuICBpZiAoIWRlc3Ryb3lSZWYpIHtcbiAgICBuZ0Rldk1vZGUgJiYgYXNzZXJ0SW5JbmplY3Rpb25Db250ZXh0KHRha2VVbnRpbERlc3Ryb3llZCk7XG4gICAgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcbiAgfVxuICBjb25zdCBkZXN0cm95ZWQkID0gbmV3IE9ic2VydmFibGUoc3Vic2NyaWJlciA9PiB7XG4gICAgaWYgKGRlc3Ryb3lSZWYuZGVzdHJveWVkKSB7XG4gICAgICBzdWJzY3JpYmVyLm5leHQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgdW5yZWdpc3RlckZuID0gZGVzdHJveVJlZi5vbkRlc3Ryb3koc3Vic2NyaWJlci5uZXh0LmJpbmQoc3Vic2NyaWJlcikpO1xuICAgIHJldHVybiB1bnJlZ2lzdGVyRm47XG4gIH0pO1xuICByZXR1cm4gc291cmNlID0+IHtcbiAgICByZXR1cm4gc291cmNlLnBpcGUodGFrZVVudGlsKGRlc3Ryb3llZCQpKTtcbiAgfTtcbn1cbmNsYXNzIE91dHB1dEZyb21PYnNlcnZhYmxlUmVmIHtcbiAgc291cmNlO1xuICBkZXN0cm95ZWQgPSBmYWxzZTtcbiAgZGVzdHJveVJlZiA9IC8qI19fUFVSRV9fKi9pbmplY3QoRGVzdHJveVJlZik7XG4gIGNvbnN0cnVjdG9yKHNvdXJjZSkge1xuICAgIHRoaXMuc291cmNlID0gc291cmNlO1xuICAgIHRoaXMuZGVzdHJveVJlZi5vbkRlc3Ryb3koKCkgPT4ge1xuICAgICAgdGhpcy5kZXN0cm95ZWQgPSB0cnVlO1xuICAgIH0pO1xuICB9XG4gIHN1YnNjcmliZShjYWxsYmFja0ZuKSB7XG4gICAgaWYgKHRoaXMuZGVzdHJveWVkKSB7XG4gICAgICB0aHJvdyBuZXcgUnVudGltZUVycm9yKDk1MywgbmdEZXZNb2RlICYmICdVbmV4cGVjdGVkIHN1YnNjcmlwdGlvbiB0byBkZXN0cm95ZWQgYE91dHB1dFJlZmAuICcgKyAnVGhlIG93bmluZyBkaXJlY3RpdmUvY29tcG9uZW50IGlzIGRlc3Ryb3llZC4nKTtcbiAgICB9XG4gICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gdGhpcy5zb3VyY2UucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IHZhbHVlID0+IGNhbGxiYWNrRm4odmFsdWUpXG4gICAgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHVuc3Vic2NyaWJlOiAoKSA9PiBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKVxuICAgIH07XG4gIH1cbn1cbmZ1bmN0aW9uIG91dHB1dEZyb21PYnNlcnZhYmxlKG9ic2VydmFibGUsIG9wdHMpIHtcbiAgbmdEZXZNb2RlICYmIGFzc2VydEluSW5qZWN0aW9uQ29udGV4dChvdXRwdXRGcm9tT2JzZXJ2YWJsZSk7XG4gIHJldHVybiBuZXcgT3V0cHV0RnJvbU9ic2VydmFibGVSZWYob2JzZXJ2YWJsZSk7XG59XG5mdW5jdGlvbiBvdXRwdXRUb09ic2VydmFibGUocmVmKSB7XG4gIGNvbnN0IGRlc3Ryb3lSZWYgPSBnZXRPdXRwdXREZXN0cm95UmVmKHJlZik7XG4gIHJldHVybiBuZXcgT2JzZXJ2YWJsZShvYnNlcnZlciA9PiB7XG4gICAgY29uc3QgdW5yZWdpc3Rlck9uRGVzdHJveSA9IGRlc3Ryb3lSZWY/Lm9uRGVzdHJveSgoKSA9PiBvYnNlcnZlci5jb21wbGV0ZSgpKTtcbiAgICBjb25zdCBzdWJzY3JpcHRpb24gPSByZWYuc3Vic2NyaWJlKHYgPT4gb2JzZXJ2ZXIubmV4dCh2KSk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgdW5yZWdpc3Rlck9uRGVzdHJveT8uKCk7XG4gICAgfTtcbiAgfSk7XG59XG5mdW5jdGlvbiB0b09ic2VydmFibGUoc291cmNlLCBvcHRpb25zKSB7XG4gIGlmIChuZ0Rldk1vZGUgJiYgIW9wdGlvbnM/LmluamVjdG9yKSB7XG4gICAgYXNzZXJ0SW5JbmplY3Rpb25Db250ZXh0KHRvT2JzZXJ2YWJsZSk7XG4gIH1cbiAgY29uc3QgaW5qZWN0b3IgPSBvcHRpb25zPy5pbmplY3RvciA/PyBpbmplY3QoSW5qZWN0b3IpO1xuICBjb25zdCBzdWJqZWN0ID0gbmV3IFJlcGxheVN1YmplY3QoMSk7XG4gIGNvbnN0IHdhdGNoZXIgPSBlZmZlY3QoKCkgPT4ge1xuICAgIGxldCB2YWx1ZTtcbiAgICB0cnkge1xuICAgICAgdmFsdWUgPSBzb3VyY2UoKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHVudHJhY2tlZCgoKSA9PiBzdWJqZWN0LmVycm9yKGVycikpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB1bnRyYWNrZWQoKCkgPT4gc3ViamVjdC5uZXh0KHZhbHVlKSk7XG4gIH0sIHtcbiAgICBpbmplY3RvcixcbiAgICBtYW51YWxDbGVhbnVwOiB0cnVlXG4gIH0pO1xuICBpbmplY3Rvci5nZXQoRGVzdHJveVJlZikub25EZXN0cm95KCgpID0+IHtcbiAgICB3YXRjaGVyLmRlc3Ryb3koKTtcbiAgICBzdWJqZWN0LmNvbXBsZXRlKCk7XG4gIH0pO1xuICByZXR1cm4gc3ViamVjdC5hc09ic2VydmFibGUoKTtcbn1cbmZ1bmN0aW9uIHRvU2lnbmFsKHNvdXJjZSwgb3B0aW9ucykge1xuICB0eXBlb2YgbmdEZXZNb2RlICE9PSAndW5kZWZpbmVkJyAmJiBuZ0Rldk1vZGUgJiYgYXNzZXJ0Tm90SW5SZWFjdGl2ZUNvbnRleHQodG9TaWduYWwsICdJbnZva2luZyBgdG9TaWduYWxgIGNhdXNlcyBuZXcgc3Vic2NyaXB0aW9ucyBldmVyeSB0aW1lLiAnICsgJ0NvbnNpZGVyIG1vdmluZyBgdG9TaWduYWxgIG91dHNpZGUgb2YgdGhlIHJlYWN0aXZlIGNvbnRleHQgYW5kIHJlYWQgdGhlIHNpZ25hbCB2YWx1ZSB3aGVyZSBuZWVkZWQuJyk7XG4gIGNvbnN0IHJlcXVpcmVzQ2xlYW51cCA9ICFvcHRpb25zPy5tYW51YWxDbGVhbnVwO1xuICBpZiAobmdEZXZNb2RlICYmIHJlcXVpcmVzQ2xlYW51cCAmJiAhb3B0aW9ucz8uaW5qZWN0b3IpIHtcbiAgICBhc3NlcnRJbkluamVjdGlvbkNvbnRleHQodG9TaWduYWwpO1xuICB9XG4gIGNvbnN0IGNsZWFudXBSZWYgPSByZXF1aXJlc0NsZWFudXAgPyBvcHRpb25zPy5pbmplY3Rvcj8uZ2V0KERlc3Ryb3lSZWYpID8/IGluamVjdChEZXN0cm95UmVmKSA6IG51bGw7XG4gIGNvbnN0IGVxdWFsID0gbWFrZVRvU2lnbmFsRXF1YWwob3B0aW9ucz8uZXF1YWwpO1xuICBsZXQgc3RhdGU7XG4gIGlmIChvcHRpb25zPy5yZXF1aXJlU3luYykge1xuICAgIHN0YXRlID0gc2lnbmFsKHtcbiAgICAgIGtpbmQ6IDBcbiAgICB9LCB7XG4gICAgICBlcXVhbCxcbiAgICAgIC4uLihuZ0Rldk1vZGUgPyBjcmVhdGVEZWJ1Z05hbWVPYmplY3Qob3B0aW9ucz8uZGVidWdOYW1lLCAnc3RhdGUnKSA6IHVuZGVmaW5lZClcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBzdGF0ZSA9IHNpZ25hbCh7XG4gICAgICBraW5kOiAxLFxuICAgICAgdmFsdWU6IG9wdGlvbnM/LmluaXRpYWxWYWx1ZVxuICAgIH0sIHtcbiAgICAgIGVxdWFsLFxuICAgICAgLi4uKG5nRGV2TW9kZSA/IGNyZWF0ZURlYnVnTmFtZU9iamVjdChvcHRpb25zPy5kZWJ1Z05hbWUsICdzdGF0ZScpIDogdW5kZWZpbmVkKVxuICAgIH0pO1xuICB9XG4gIGxldCBkZXN0cm95VW5yZWdpc3RlckZuO1xuICBjb25zdCBzdWIgPSBzb3VyY2Uuc3Vic2NyaWJlKHtcbiAgICBuZXh0OiB2YWx1ZSA9PiBzdGF0ZS5zZXQoe1xuICAgICAga2luZDogMSxcbiAgICAgIHZhbHVlXG4gICAgfSksXG4gICAgZXJyb3I6IGVycm9yID0+IHtcbiAgICAgIHN0YXRlLnNldCh7XG4gICAgICAgIGtpbmQ6IDIsXG4gICAgICAgIGVycm9yXG4gICAgICB9KTtcbiAgICAgIGRlc3Ryb3lVbnJlZ2lzdGVyRm4/LigpO1xuICAgIH0sXG4gICAgY29tcGxldGU6ICgpID0+IHtcbiAgICAgIGRlc3Ryb3lVbnJlZ2lzdGVyRm4/LigpO1xuICAgIH1cbiAgfSk7XG4gIGlmIChvcHRpb25zPy5yZXF1aXJlU3luYyAmJiBzdGF0ZSgpLmtpbmQgPT09IDApIHtcbiAgICB0aHJvdyBuZXcgUnVudGltZUVycm9yKDYwMSwgKHR5cGVvZiBuZ0Rldk1vZGUgPT09ICd1bmRlZmluZWQnIHx8IG5nRGV2TW9kZSkgJiYgJ2B0b1NpZ25hbCgpYCBjYWxsZWQgd2l0aCBgcmVxdWlyZVN5bmNgIGJ1dCBgT2JzZXJ2YWJsZWAgZGlkIG5vdCBlbWl0IHN5bmNocm9ub3VzbHkuJyk7XG4gIH1cbiAgZGVzdHJveVVucmVnaXN0ZXJGbiA9IGNsZWFudXBSZWY/Lm9uRGVzdHJveShzdWIudW5zdWJzY3JpYmUuYmluZChzdWIpKTtcbiAgcmV0dXJuIGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBjdXJyZW50ID0gc3RhdGUoKTtcbiAgICBzd2l0Y2ggKGN1cnJlbnQua2luZCkge1xuICAgICAgY2FzZSAxOlxuICAgICAgICByZXR1cm4gY3VycmVudC52YWx1ZTtcbiAgICAgIGNhc2UgMjpcbiAgICAgICAgdGhyb3cgY3VycmVudC5lcnJvcjtcbiAgICAgIGNhc2UgMDpcbiAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFcnJvcig2MDEsICh0eXBlb2YgbmdEZXZNb2RlID09PSAndW5kZWZpbmVkJyB8fCBuZ0Rldk1vZGUpICYmICdgdG9TaWduYWwoKWAgY2FsbGVkIHdpdGggYHJlcXVpcmVTeW5jYCBidXQgYE9ic2VydmFibGVgIGRpZCBub3QgZW1pdCBzeW5jaHJvbm91c2x5LicpO1xuICAgIH1cbiAgfSwge1xuICAgIGVxdWFsOiBvcHRpb25zPy5lcXVhbCxcbiAgICAuLi4obmdEZXZNb2RlID8gY3JlYXRlRGVidWdOYW1lT2JqZWN0KG9wdGlvbnM/LmRlYnVnTmFtZSwgJ3NvdXJjZScpIDogdW5kZWZpbmVkKVxuICB9KTtcbn1cbmZ1bmN0aW9uIG1ha2VUb1NpZ25hbEVxdWFsKHVzZXJFcXVhbGl0eSA9IE9iamVjdC5pcykge1xuICByZXR1cm4gKGEsIGIpID0+IGEua2luZCA9PT0gMSAmJiBiLmtpbmQgPT09IDEgJiYgdXNlckVxdWFsaXR5KGEudmFsdWUsIGIudmFsdWUpO1xufVxuZnVuY3Rpb24gY3JlYXRlRGVidWdOYW1lT2JqZWN0KHRvU2lnbmFsRGVidWdOYW1lLCBpbnRlcm5hbFNpZ25hbERlYnVnTmFtZSkge1xuICByZXR1cm4ge1xuICAgIGRlYnVnTmFtZTogYHRvU2lnbmFsJHt0b1NpZ25hbERlYnVnTmFtZSA/ICcjJyArIHRvU2lnbmFsRGVidWdOYW1lIDogJyd9LiR7aW50ZXJuYWxTaWduYWxEZWJ1Z05hbWV9YFxuICB9O1xufVxuZnVuY3Rpb24gcGVuZGluZ1VudGlsRXZlbnQoaW5qZWN0b3IpIHtcbiAgaWYgKGluamVjdG9yID09PSB1bmRlZmluZWQpIHtcbiAgICBuZ0Rldk1vZGUgJiYgYXNzZXJ0SW5JbmplY3Rpb25Db250ZXh0KHBlbmRpbmdVbnRpbEV2ZW50KTtcbiAgICBpbmplY3RvciA9IGluamVjdChJbmplY3Rvcik7XG4gIH1cbiAgY29uc3QgdGFza1NlcnZpY2UgPSBpbmplY3Rvci5nZXQoUGVuZGluZ1Rhc2tzKTtcbiAgcmV0dXJuIHNvdXJjZU9ic2VydmFibGUgPT4ge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShvcmlnaW5hbFN1YnNjcmliZXIgPT4ge1xuICAgICAgY29uc3QgcmVtb3ZlVGFzayA9IHRhc2tTZXJ2aWNlLmFkZCgpO1xuICAgICAgbGV0IGNsZWFuZWRVcCA9IGZhbHNlO1xuICAgICAgZnVuY3Rpb24gY2xlYW51cFRhc2soKSB7XG4gICAgICAgIGlmIChjbGVhbmVkVXApIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmVtb3ZlVGFzaygpO1xuICAgICAgICBjbGVhbmVkVXAgPSB0cnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgaW5uZXJTdWJzY3JpcHRpb24gPSBzb3VyY2VPYnNlcnZhYmxlLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6IHYgPT4ge1xuICAgICAgICAgIG9yaWdpbmFsU3Vic2NyaWJlci5uZXh0KHYpO1xuICAgICAgICAgIGNsZWFudXBUYXNrKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XG4gICAgICAgICAgb3JpZ2luYWxTdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgY2xlYW51cFRhc2soKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IGUgPT4ge1xuICAgICAgICAgIG9yaWdpbmFsU3Vic2NyaWJlci5lcnJvcihlKTtcbiAgICAgICAgICBjbGVhbnVwVGFzaygpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGlubmVyU3Vic2NyaXB0aW9uLmFkZCgoKSA9PiB7XG4gICAgICAgIG9yaWdpbmFsU3Vic2NyaWJlci51bnN1YnNjcmliZSgpO1xuICAgICAgICBjbGVhbnVwVGFzaygpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gaW5uZXJTdWJzY3JpcHRpb247XG4gICAgfSk7XG4gIH07XG59XG5mdW5jdGlvbiByeFJlc291cmNlKG9wdHMpIHtcbiAgaWYgKG5nRGV2TW9kZSAmJiAhb3B0cz8uaW5qZWN0b3IpIHtcbiAgICBhc3NlcnRJbkluamVjdGlvbkNvbnRleHQocnhSZXNvdXJjZSk7XG4gIH1cbiAgcmV0dXJuIHJlc291cmNlKHtcbiAgICAuLi5vcHRzLFxuICAgIGxvYWRlcjogdW5kZWZpbmVkLFxuICAgIHN0cmVhbTogcGFyYW1zID0+IHtcbiAgICAgIGxldCBzdWI7XG4gICAgICBjb25zdCBvbkFib3J0ID0gKCkgPT4gc3ViPy51bnN1YnNjcmliZSgpO1xuICAgICAgcGFyYW1zLmFib3J0U2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgb25BYm9ydCk7XG4gICAgICBjb25zdCBzdHJlYW0gPSBzaWduYWwoe1xuICAgICAgICB2YWx1ZTogdW5kZWZpbmVkXG4gICAgICB9KTtcbiAgICAgIGxldCByZXNvbHZlO1xuICAgICAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlKHIgPT4gcmVzb2x2ZSA9IHIpO1xuICAgICAgZnVuY3Rpb24gc2VuZCh2YWx1ZSkge1xuICAgICAgICBzdHJlYW0uc2V0KHZhbHVlKTtcbiAgICAgICAgcmVzb2x2ZT8uKHN0cmVhbSk7XG4gICAgICAgIHJlc29sdmUgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICBjb25zdCBzdHJlYW1GbiA9IG9wdHMuc3RyZWFtO1xuICAgICAgaWYgKHN0cmVhbUZuID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFcnJvcig5OTAsIG5nRGV2TW9kZSAmJiBgTXVzdCBwcm92aWRlIFxcYHN0cmVhbVxcYCBvcHRpb24uYCk7XG4gICAgICB9XG4gICAgICBzdWIgPSBzdHJlYW1GbihwYXJhbXMpLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6IHZhbHVlID0+IHNlbmQoe1xuICAgICAgICAgIHZhbHVlXG4gICAgICAgIH0pLFxuICAgICAgICBlcnJvcjogZXJyb3IgPT4ge1xuICAgICAgICAgIHNlbmQoe1xuICAgICAgICAgICAgZXJyb3I6IGVuY2Fwc3VsYXRlUmVzb3VyY2VFcnJvcihlcnJvcilcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBwYXJhbXMuYWJvcnRTaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBvbkFib3J0KTtcbiAgICAgICAgfSxcbiAgICAgICAgY29tcGxldGU6ICgpID0+IHtcbiAgICAgICAgICBpZiAocmVzb2x2ZSkge1xuICAgICAgICAgICAgc2VuZCh7XG4gICAgICAgICAgICAgIGVycm9yOiBuZXcgUnVudGltZUVycm9yKDk5MSwgbmdEZXZNb2RlICYmICdSZXNvdXJjZSBjb21wbGV0ZWQgYmVmb3JlIHByb2R1Y2luZyBhIHZhbHVlJylcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBwYXJhbXMuYWJvcnRTaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBvbkFib3J0KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICB9XG4gIH0pO1xufVxuZXhwb3J0IHsgb3V0cHV0RnJvbU9ic2VydmFibGUsIG91dHB1dFRvT2JzZXJ2YWJsZSwgcGVuZGluZ1VudGlsRXZlbnQsIHJ4UmVzb3VyY2UsIHRha2VVbnRpbERlc3Ryb3llZCwgdG9PYnNlcnZhYmxlLCB0b1NpZ25hbCB9O1xuIl0sIm1hcHBpbmdzIjoiOzZLQWVBLFFBQVMsQ0FBQUEsRUFBbUJDLENBQUEsQ0FBWSxDQUFBQyxhQUFBLEdBQUFDLENBQUEsS0FBQUQsQ0FBQSxnQkFBQUUsQ0FBQSxNQUNqQyxDQUFBRixhQUFBLEdBQUFHLENBQUEsU0FBQUosQ0FBQSxJQUFBQyxhQUFBLEdBQUFHLENBQUEsU0FFSEosQ0FBQSxDQUFhSyxDQUFBLENBQU9GLENBQVUsR0FFaEMsR0FBTSxDQUFBRyxDQUFBLEVBQUFMLGFBQUEsR0FBQUUsQ0FBQSxNQUFhLEdBQUksQ0FBQUksQ0FBQSxDQUFXQyxDQUFBLEVBQWMsQ0FBQVAsYUFBQSxHQUFBQyxDQUFBLEtBQUFELENBQUEsZ0JBQUFFLENBQUEsTUFDOUMsR0FBSUgsQ0FBQSxDQUFXUyxTQUFBLENBQVcsQ0FBQVIsYUFBQSxHQUFBRyxDQUFBLFFBQUFILENBQUEsZ0JBQUFFLENBQUEsTUFDeEJLLENBQUEsQ0FBV0UsSUFBQSxDQUFLLEVBQ2hCVCxhQUFBLEdBQUFFLENBQUEs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 \ No newline at end of file diff --git a/frontend/dist-instrumented/chunk-NAQGW5AE.js.map b/frontend/dist-instrumented/chunk-NAQGW5AE.js.map new file mode 100644 index 00000000..6363ae8a --- /dev/null +++ b/frontend/dist-instrumented/chunk-NAQGW5AE.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["node_modules/@angular/core/fesm2022/rxjs-interop.mjs"],"sourcesContent":["/**\n * @license Angular v21.2.4\n * (c) 2010-2026 Google LLC. https://angular.dev/\n * License: MIT\n */\n\nimport { Observable, ReplaySubject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { assertInInjectionContext, inject, DestroyRef, RuntimeError, Injector, effect, assertNotInReactiveContext, signal, PendingTasks } from './_effect-chunk2.mjs';\nimport { getOutputDestroyRef, untracked, computed, resource, encapsulateResourceError } from './_resource-chunk.mjs';\nimport './_effect-chunk.mjs';\nimport './_not_found-chunk.mjs';\nimport '@angular/core/primitives/signals';\nimport '@angular/core/primitives/di';\nimport './_untracked-chunk.mjs';\nfunction takeUntilDestroyed(destroyRef) {\n if (!destroyRef) {\n ngDevMode && assertInInjectionContext(takeUntilDestroyed);\n destroyRef = inject(DestroyRef);\n }\n const destroyed$ = new Observable(subscriber => {\n if (destroyRef.destroyed) {\n subscriber.next();\n return;\n }\n const unregisterFn = destroyRef.onDestroy(subscriber.next.bind(subscriber));\n return unregisterFn;\n });\n return source => {\n return source.pipe(takeUntil(destroyed$));\n };\n}\nclass OutputFromObservableRef {\n source;\n destroyed = false;\n destroyRef = /*#__PURE__*/inject(DestroyRef);\n constructor(source) {\n this.source = source;\n this.destroyRef.onDestroy(() => {\n this.destroyed = true;\n });\n }\n subscribe(callbackFn) {\n if (this.destroyed) {\n throw new RuntimeError(953, ngDevMode && 'Unexpected subscription to destroyed `OutputRef`. ' + 'The owning directive/component is destroyed.');\n }\n const subscription = this.source.pipe(takeUntilDestroyed(this.destroyRef)).subscribe({\n next: value => callbackFn(value)\n });\n return {\n unsubscribe: () => subscription.unsubscribe()\n };\n }\n}\nfunction outputFromObservable(observable, opts) {\n ngDevMode && assertInInjectionContext(outputFromObservable);\n return new OutputFromObservableRef(observable);\n}\nfunction outputToObservable(ref) {\n const destroyRef = getOutputDestroyRef(ref);\n return new Observable(observer => {\n const unregisterOnDestroy = destroyRef?.onDestroy(() => observer.complete());\n const subscription = ref.subscribe(v => observer.next(v));\n return () => {\n subscription.unsubscribe();\n unregisterOnDestroy?.();\n };\n });\n}\nfunction toObservable(source, options) {\n if (ngDevMode && !options?.injector) {\n assertInInjectionContext(toObservable);\n }\n const injector = options?.injector ?? inject(Injector);\n const subject = new ReplaySubject(1);\n const watcher = effect(() => {\n let value;\n try {\n value = source();\n } catch (err) {\n untracked(() => subject.error(err));\n return;\n }\n untracked(() => subject.next(value));\n }, {\n injector,\n manualCleanup: true\n });\n injector.get(DestroyRef).onDestroy(() => {\n watcher.destroy();\n subject.complete();\n });\n return subject.asObservable();\n}\nfunction toSignal(source, options) {\n typeof ngDevMode !== 'undefined' && ngDevMode && assertNotInReactiveContext(toSignal, 'Invoking `toSignal` causes new subscriptions every time. ' + 'Consider moving `toSignal` outside of the reactive context and read the signal value where needed.');\n const requiresCleanup = !options?.manualCleanup;\n if (ngDevMode && requiresCleanup && !options?.injector) {\n assertInInjectionContext(toSignal);\n }\n const cleanupRef = requiresCleanup ? options?.injector?.get(DestroyRef) ?? inject(DestroyRef) : null;\n const equal = makeToSignalEqual(options?.equal);\n let state;\n if (options?.requireSync) {\n state = signal({\n kind: 0\n }, {\n equal,\n ...(ngDevMode ? createDebugNameObject(options?.debugName, 'state') : undefined)\n });\n } else {\n state = signal({\n kind: 1,\n value: options?.initialValue\n }, {\n equal,\n ...(ngDevMode ? createDebugNameObject(options?.debugName, 'state') : undefined)\n });\n }\n let destroyUnregisterFn;\n const sub = source.subscribe({\n next: value => state.set({\n kind: 1,\n value\n }),\n error: error => {\n state.set({\n kind: 2,\n error\n });\n destroyUnregisterFn?.();\n },\n complete: () => {\n destroyUnregisterFn?.();\n }\n });\n if (options?.requireSync && state().kind === 0) {\n throw new RuntimeError(601, (typeof ngDevMode === 'undefined' || ngDevMode) && '`toSignal()` called with `requireSync` but `Observable` did not emit synchronously.');\n }\n destroyUnregisterFn = cleanupRef?.onDestroy(sub.unsubscribe.bind(sub));\n return computed(() => {\n const current = state();\n switch (current.kind) {\n case 1:\n return current.value;\n case 2:\n throw current.error;\n case 0:\n throw new RuntimeError(601, (typeof ngDevMode === 'undefined' || ngDevMode) && '`toSignal()` called with `requireSync` but `Observable` did not emit synchronously.');\n }\n }, {\n equal: options?.equal,\n ...(ngDevMode ? createDebugNameObject(options?.debugName, 'source') : undefined)\n });\n}\nfunction makeToSignalEqual(userEquality = Object.is) {\n return (a, b) => a.kind === 1 && b.kind === 1 && userEquality(a.value, b.value);\n}\nfunction createDebugNameObject(toSignalDebugName, internalSignalDebugName) {\n return {\n debugName: `toSignal${toSignalDebugName ? '#' + toSignalDebugName : ''}.${internalSignalDebugName}`\n };\n}\nfunction pendingUntilEvent(injector) {\n if (injector === undefined) {\n ngDevMode && assertInInjectionContext(pendingUntilEvent);\n injector = inject(Injector);\n }\n const taskService = injector.get(PendingTasks);\n return sourceObservable => {\n return new Observable(originalSubscriber => {\n const removeTask = taskService.add();\n let cleanedUp = false;\n function cleanupTask() {\n if (cleanedUp) {\n return;\n }\n removeTask();\n cleanedUp = true;\n }\n const innerSubscription = sourceObservable.subscribe({\n next: v => {\n originalSubscriber.next(v);\n cleanupTask();\n },\n complete: () => {\n originalSubscriber.complete();\n cleanupTask();\n },\n error: e => {\n originalSubscriber.error(e);\n cleanupTask();\n }\n });\n innerSubscription.add(() => {\n originalSubscriber.unsubscribe();\n cleanupTask();\n });\n return innerSubscription;\n });\n };\n}\nfunction rxResource(opts) {\n if (ngDevMode && !opts?.injector) {\n assertInInjectionContext(rxResource);\n }\n return resource({\n ...opts,\n loader: undefined,\n stream: params => {\n let sub;\n const onAbort = () => sub?.unsubscribe();\n params.abortSignal.addEventListener('abort', onAbort);\n const stream = signal({\n value: undefined\n });\n let resolve;\n const promise = new Promise(r => resolve = r);\n function send(value) {\n stream.set(value);\n resolve?.(stream);\n resolve = undefined;\n }\n const streamFn = opts.stream;\n if (streamFn === undefined) {\n throw new RuntimeError(990, ngDevMode && `Must provide \\`stream\\` option.`);\n }\n sub = streamFn(params).subscribe({\n next: value => send({\n value\n }),\n error: error => {\n send({\n error: encapsulateResourceError(error)\n });\n params.abortSignal.removeEventListener('abort', onAbort);\n },\n complete: () => {\n if (resolve) {\n send({\n error: new RuntimeError(991, ngDevMode && 'Resource completed before producing a value')\n });\n }\n params.abortSignal.removeEventListener('abort', onAbort);\n }\n });\n return promise;\n }\n });\n}\nexport { outputFromObservable, outputToObservable, pendingUntilEvent, rxResource, takeUntilDestroyed, toObservable, toSignal };\n"],"mappings":"oFAeA,SAASA,EAAmBC,EAAY,CACjCA,IAEHA,EAAaC,EAAOC,CAAU,GAEhC,IAAMC,EAAa,IAAIC,EAAWC,GAAc,CAC9C,GAAIL,EAAW,UAAW,CACxBK,EAAW,KAAK,EAChB,MACF,CAEA,OADqBL,EAAW,UAAUK,EAAW,KAAK,KAAKA,CAAU,CAAC,CAE5E,CAAC,EACD,OAAOC,GACEA,EAAO,KAAKC,EAAUJ,CAAU,CAAC,CAE5C,CA+DA,SAASK,EAASC,EAAQC,EAAS,CAMjC,IAAMC,EAJkB,CAACD,GAAS,cAIGA,GAAS,UAAU,IAAIE,CAAU,GAAKC,EAAOD,CAAU,EAAI,KAC1FE,EAAQC,EAAkBL,GAAS,KAAK,EAC1CM,EACAN,GAAS,YACXM,EAAQC,EAAO,CACb,KAAM,CACR,EAAG,CACD,MAAAH,CAEF,CAAC,EAEDE,EAAQC,EAAO,CACb,KAAM,EACN,MAAOP,GAAS,YAClB,EAAG,CACD,MAAAI,CAEF,CAAC,EAEH,IAAII,EACEC,EAAMV,EAAO,UAAU,CAC3B,KAAMW,GAASJ,EAAM,IAAI,CACvB,KAAM,EACN,MAAAI,CACF,CAAC,EACD,MAAOC,GAAS,CACdL,EAAM,IAAI,CACR,KAAM,EACN,MAAAK,CACF,CAAC,EACDH,IAAsB,CACxB,EACA,SAAU,IAAM,CACdA,IAAsB,CACxB,CACF,CAAC,EACD,GAAIR,GAAS,aAAeM,EAAM,EAAE,OAAS,EAC3C,MAAM,IAAIM,EAAa,IAA0C,EAAmG,EAEtK,OAAAJ,EAAsBP,GAAY,UAAUQ,EAAI,YAAY,KAAKA,CAAG,CAAC,EAC9DI,EAAS,IAAM,CACpB,IAAMC,EAAUR,EAAM,EACtB,OAAQQ,EAAQ,KAAM,CACpB,IAAK,GACH,OAAOA,EAAQ,MACjB,IAAK,GACH,MAAMA,EAAQ,MAChB,IAAK,GACH,MAAM,IAAIF,EAAa,IAA0C,EAAmG,CACxK,CACF,EAAG,CACD,MAAOZ,GAAS,KAElB,CAAC,CACH,CACA,SAASK,EAAkBU,EAAe,OAAO,GAAI,CACnD,MAAO,CAACC,EAAGC,IAAMD,EAAE,OAAS,GAAKC,EAAE,OAAS,GAAKF,EAAaC,EAAE,MAAOC,EAAE,KAAK,CAChF","names":["takeUntilDestroyed","destroyRef","inject","DestroyRef","destroyed$","Observable","subscriber","source","takeUntil","toSignal","source","options","cleanupRef","DestroyRef","inject","equal","makeToSignalEqual","state","signal","destroyUnregisterFn","sub","value","error","RuntimeError","computed","current","userEquality","a","b"],"x_google_ignoreList":[0]} \ No newline at end of file diff --git a/frontend/dist-instrumented/chunk-O5PEFBSV.js b/frontend/dist-instrumented/chunk-O5PEFBSV.js new file mode 100644 index 00000000..06789246 --- /dev/null +++ b/frontend/dist-instrumented/chunk-O5PEFBSV.js @@ -0,0 +1,3 @@ +function cov_25qcluqvji(){var path="/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-O5PEFBSV.js";var hash="698e2a0b0d7bfa278fb491ce7ba3a6b99e58f09e";var global=new Function("return this")();var gcv="__coverage__";var coverageData={path:"/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-O5PEFBSV.js",statementMap:{"0":{start:{line:1,column:47},end:{line:1,column:49}},"1":{start:{line:1,column:52},end:{line:1,column:54}},"2":{start:{line:1,column:57},end:{line:1,column:59}},"3":{start:{line:1,column:62},end:{line:1,column:65}},"4":{start:{line:1,column:68},end:{line:1,column:71}},"5":{start:{line:1,column:74},end:{line:1,column:512}},"6":{start:{line:1,column:107},end:{line:1,column:120}},"7":{start:{line:1,column:121},end:{line:1,column:149}},"8":{start:{line:1,column:140},end:{line:1,column:149}},"9":{start:{line:1,column:155},end:{line:1,column:167}},"10":{start:{line:1,column:168},end:{line:1,column:192}},"11":{start:{line:1,column:175},end:{line:1,column:192}},"12":{start:{line:1,column:198},end:{line:1,column:215}},"13":{start:{line:1,column:216},end:{line:1,column:240}},"14":{start:{line:1,column:223},end:{line:1,column:240}},"15":{start:{line:1,column:246},end:{line:1,column:261}},"16":{start:{line:1,column:262},end:{line:1,column:286}},"17":{start:{line:1,column:269},end:{line:1,column:286}},"18":{start:{line:1,column:292},end:{line:1,column:307}},"19":{start:{line:1,column:308},end:{line:1,column:365}},"20":{start:{line:1,column:322},end:{line:1,column:325}},"21":{start:{line:1,column:326},end:{line:1,column:364}},"22":{start:{line:1,column:365},end:{line:1,column:395}},"23":{start:{line:1,column:413},end:{line:1,column:442}},"24":{start:{line:1,column:425},end:{line:1,column:441}},"25":{start:{line:1,column:461},end:{line:1,column:499}},"26":{start:{line:1,column:500},end:{line:1,column:508}}},fnMap:{"0":{name:"(anonymous_0)",decl:{start:{line:1,column:75},end:{line:1,column:76}},loc:{start:{line:1,column:79},end:{line:1,column:509}},line:1},"1":{name:"(anonymous_1)",decl:{start:{line:1,column:88},end:{line:1,column:89}},loc:{start:{line:1,column:100},end:{line:1,column:396}},line:1},"2":{name:"(anonymous_2)",decl:{start:{line:1,column:413},end:{line:1,column:414}},loc:{start:{line:1,column:424},end:{line:1,column:442}},line:1}},branchMap:{"0":{loc:{start:{line:1,column:121},end:{line:1,column:149}},type:"if",locations:[{start:{line:1,column:121},end:{line:1,column:149}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1":{loc:{start:{line:1,column:168},end:{line:1,column:192}},type:"if",locations:[{start:{line:1,column:168},end:{line:1,column:192}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"2":{loc:{start:{line:1,column:216},end:{line:1,column:240}},type:"if",locations:[{start:{line:1,column:216},end:{line:1,column:240}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"3":{loc:{start:{line:1,column:262},end:{line:1,column:286}},type:"if",locations:[{start:{line:1,column:262},end:{line:1,column:286}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"4":{loc:{start:{line:1,column:308},end:{line:1,column:365}},type:"if",locations:[{start:{line:1,column:308},end:{line:1,column:365}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"5":{loc:{start:{line:1,column:333},end:{line:1,column:364}},type:"cond-expr",locations:[{start:{line:1,column:337},end:{line:1,column:353}},{start:{line:1,column:354},end:{line:1,column:364}}],line:1},"6":{loc:{start:{line:1,column:436},end:{line:1,column:440}},type:"binary-expr",locations:[{start:{line:1,column:436},end:{line:1,column:437}},{start:{line:1,column:439},end:{line:1,column:440}}],line:1}},s:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0},f:{"0":0,"1":0,"2":0},b:{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0]},inputSourceMap:{version:3,sources:["src/app/shared/pipes/elapsed-time.pipe.ts"],sourcesContent:["import { Pipe, PipeTransform } from '@angular/core';\n\nconst SECONDS_PER_MINUTE = 60;\nconst MINUTES_PER_HOUR = 60;\nconst HOURS_PER_DAY = 24;\nconst SECONDS_PER_HOUR = SECONDS_PER_MINUTE * MINUTES_PER_HOUR;\nconst SECONDS_PER_DAY = SECONDS_PER_HOUR * HOURS_PER_DAY;\n\n@Pipe({ name: 'elapsedTime', standalone: true, pure: true })\nexport class ElapsedTimePipe implements PipeTransform {\n transform(sentAt: string): string {\n const parsedTimestamp = Date.parse(sentAt);\n if (Number.isNaN(parsedTimestamp)) {\n return sentAt;\n }\n\n const deltaMs = Date.now() - parsedTimestamp;\n if (deltaMs < 0) {\n return 'tra poco';\n }\n\n const deltaSeconds = Math.floor(deltaMs / 1000);\n if (deltaSeconds < SECONDS_PER_MINUTE) {\n return `${deltaSeconds}s fa`;\n }\n\n const deltaMinutes = Math.floor(deltaSeconds / SECONDS_PER_MINUTE);\n if (deltaSeconds < SECONDS_PER_HOUR) {\n return `${deltaMinutes}m fa`;\n }\n\n const deltaHours = Math.floor(deltaSeconds / SECONDS_PER_HOUR);\n if (deltaSeconds < SECONDS_PER_DAY) {\n const remainingMinutes = deltaMinutes % MINUTES_PER_HOUR;\n if (remainingMinutes > 0) {\n return `${deltaHours}h ${remainingMinutes}m fa`;\n }\n\n return `${deltaHours}h fa`;\n }\n\n const deltaDays = Math.floor(deltaSeconds / SECONDS_PER_DAY);\n return `${deltaDays}g fa`;\n }\n}\n"],mappings:"yCAEA,IAAMA,EAAqB,GACrBC,EAAmB,GACnBC,EAAgB,GAChBC,EAAmBH,EAAqBC,EACxCG,EAAkBD,EAAmBD,EAG9BG,GAAe,IAAA,CAAtB,MAAOA,CAAe,CAC1BC,UAAUC,EAAc,CACtB,IAAMC,EAAkBC,KAAKC,MAAMH,CAAM,EACzC,GAAII,OAAOC,MAAMJ,CAAe,EAC9B,OAAOD,EAGT,IAAMM,EAAUJ,KAAKK,IAAG,EAAKN,EAC7B,GAAIK,EAAU,EACZ,MAAO,WAGT,IAAME,EAAeC,KAAKC,MAAMJ,EAAU,GAAI,EAC9C,GAAIE,EAAef,EACjB,MAAO,GAAGe,CAAY,OAGxB,IAAMG,EAAeF,KAAKC,MAAMF,EAAef,CAAkB,EACjE,GAAIe,EAAeZ,EACjB,MAAO,GAAGe,CAAY,OAGxB,IAAMC,EAAaH,KAAKC,MAAMF,EAAeZ,CAAgB,EAC7D,GAAIY,EAAeX,EAAiB,CAClC,IAAMgB,EAAmBF,EAAejB,EACxC,OAAImB,EAAmB,EACd,GAAGD,CAAU,KAAKC,CAAgB,OAGpC,GAAGD,CAAU,MACtB,CAGA,MAAO,GADWH,KAAKC,MAAMF,EAAeX,CAAe,CACxC,MACrB,4CAlCWC,EAAe,+CAAfA,EAAegB,KAAA,EAAA,CAAA,SAAfhB,CAAe,GAAA",names:["SECONDS_PER_MINUTE","MINUTES_PER_HOUR","HOURS_PER_DAY","SECONDS_PER_HOUR","SECONDS_PER_DAY","ElapsedTimePipe","transform","sentAt","parsedTimestamp","Date","parse","Number","isNaN","deltaMs","now","deltaSeconds","Math","floor","deltaMinutes","deltaHours","remainingMinutes","pure"]},_coverageSchema:"1a1c01bbd47fc00a2c39e90264f33305004495a9",hash:"698e2a0b0d7bfa278fb491ce7ba3a6b99e58f09e"};var coverage=global[gcv]||(global[gcv]={});if(!coverage[path]||coverage[path].hash!==hash){coverage[path]=coverageData;}var actualCoverage=coverage[path];{// @ts-ignore +cov_25qcluqvji=function(){return actualCoverage;};}return actualCoverage;}cov_25qcluqvji();import{Na as p}from"./chunk-RYTNMYZW.js";var o=(cov_25qcluqvji().s[0]++,60),l=(cov_25qcluqvji().s[1]++,60),m=(cov_25qcluqvji().s[2]++,24),n=(cov_25qcluqvji().s[3]++,o*l),u=(cov_25qcluqvji().s[4]++,n*m),D=(cov_25qcluqvji().s[5]++,(()=>{cov_25qcluqvji().f[0]++;class e{transform(a){cov_25qcluqvji().f[1]++;let r=(cov_25qcluqvji().s[6]++,Date.parse(a));cov_25qcluqvji().s[7]++;if(Number.isNaN(r)){cov_25qcluqvji().b[0][0]++;cov_25qcluqvji().s[8]++;return a;}else{cov_25qcluqvji().b[0][1]++;}let s=(cov_25qcluqvji().s[9]++,Date.now()-r);cov_25qcluqvji().s[10]++;if(s<0){cov_25qcluqvji().b[1][0]++;cov_25qcluqvji().s[11]++;return"tra poco";}else{cov_25qcluqvji().b[1][1]++;}let t=(cov_25qcluqvji().s[12]++,Math.floor(s/1e3));cov_25qcluqvji().s[13]++;if(t0?(cov_25qcluqvji().b[5][0]++,`${f}h ${c}m fa`):(cov_25qcluqvji().b[5][1]++,`${f}h fa`);}else{cov_25qcluqvji().b[4][1]++;}cov_25qcluqvji().s[22]++;return`${Math.floor(t/u)}g fa`;}static ɵfac=(cov_25qcluqvji().s[23]++,function(r){cov_25qcluqvji().f[2]++;cov_25qcluqvji().s[24]++;return new((cov_25qcluqvji().b[6][0]++,r)||(cov_25qcluqvji().b[6][1]++,e))();});static ɵpipe=(cov_25qcluqvji().s[25]++,p({name:"elapsedTime",type:e,pure:!0}));}cov_25qcluqvji().s[26]++;return e;})());export{D as a};//# sourceMappingURL=chunk-O5PEFBSV.js.map +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJvIiwiY292XzI1cWNsdXF2amkiLCJzIiwibCIsIm0iLCJuIiwidSIsIkQiLCJmIiwiZSIsInRyYW5zZm9ybSIsImEiLCJyIiwiRGF0ZSIsInBhcnNlIiwiTnVtYmVyIiwiaXNOYU4iLCJiIiwibm93IiwidCIsIk1hdGgiLCJmbG9vciIsImkiLCJjIiwiybVmYWMiLCLJtXBpcGUiLCJwIiwibmFtZSIsInR5cGUiLCJwdXJlIl0sInNvdXJjZXMiOlsic3JjL2FwcC9zaGFyZWQvcGlwZXMvZWxhcHNlZC10aW1lLnBpcGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGlwZSwgUGlwZVRyYW5zZm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5jb25zdCBTRUNPTkRTX1BFUl9NSU5VVEUgPSA2MDtcbmNvbnN0IE1JTlVURVNfUEVSX0hPVVIgPSA2MDtcbmNvbnN0IEhPVVJTX1BFUl9EQVkgPSAyNDtcbmNvbnN0IFNFQ09ORFNfUEVSX0hPVVIgPSBTRUNPTkRTX1BFUl9NSU5VVEUgKiBNSU5VVEVTX1BFUl9IT1VSO1xuY29uc3QgU0VDT05EU19QRVJfREFZID0gU0VDT05EU19QRVJfSE9VUiAqIEhPVVJTX1BFUl9EQVk7XG5cbkBQaXBlKHsgbmFtZTogJ2VsYXBzZWRUaW1lJywgc3RhbmRhbG9uZTogdHJ1ZSwgcHVyZTogdHJ1ZSB9KVxuZXhwb3J0IGNsYXNzIEVsYXBzZWRUaW1lUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICB0cmFuc2Zvcm0oc2VudEF0OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IHBhcnNlZFRpbWVzdGFtcCA9IERhdGUucGFyc2Uoc2VudEF0KTtcbiAgICBpZiAoTnVtYmVyLmlzTmFOKHBhcnNlZFRpbWVzdGFtcCkpIHtcbiAgICAgIHJldHVybiBzZW50QXQ7XG4gICAgfVxuXG4gICAgY29uc3QgZGVsdGFNcyA9IERhdGUubm93KCkgLSBwYXJzZWRUaW1lc3RhbXA7XG4gICAgaWYgKGRlbHRhTXMgPCAwKSB7XG4gICAgICByZXR1cm4gJ3RyYSBwb2NvJztcbiAgICB9XG5cbiAgICBjb25zdCBkZWx0YVNlY29uZHMgPSBNYXRoLmZsb29yKGRlbHRhTXMgLyAxMDAwKTtcbiAgICBpZiAoZGVsdGFTZWNvbmRzIDwgU0VDT05EU19QRVJfTUlOVVRFKSB7XG4gICAgICByZXR1cm4gYCR7ZGVsdGFTZWNvbmRzfXMgZmFgO1xuICAgIH1cblxuICAgIGNvbnN0IGRlbHRhTWludXRlcyA9IE1hdGguZmxvb3IoZGVsdGFTZWNvbmRzIC8gU0VDT05EU19QRVJfTUlOVVRFKTtcbiAgICBpZiAoZGVsdGFTZWNvbmRzIDwgU0VDT05EU19QRVJfSE9VUikge1xuICAgICAgcmV0dXJuIGAke2RlbHRhTWludXRlc31tIGZhYDtcbiAgICB9XG5cbiAgICBjb25zdCBkZWx0YUhvdXJzID0gTWF0aC5mbG9vcihkZWx0YVNlY29uZHMgLyBTRUNPTkRTX1BFUl9IT1VSKTtcbiAgICBpZiAoZGVsdGFTZWNvbmRzIDwgU0VDT05EU19QRVJfREFZKSB7XG4gICAgICBjb25zdCByZW1haW5pbmdNaW51dGVzID0gZGVsdGFNaW51dGVzICUgTUlOVVRFU19QRVJfSE9VUjtcbiAgICAgIGlmIChyZW1haW5pbmdNaW51dGVzID4gMCkge1xuICAgICAgICByZXR1cm4gYCR7ZGVsdGFIb3Vyc31oICR7cmVtYWluaW5nTWludXRlc31tIGZhYDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGAke2RlbHRhSG91cnN9aCBmYWA7XG4gICAgfVxuXG4gICAgY29uc3QgZGVsdGFEYXlzID0gTWF0aC5mbG9vcihkZWx0YVNlY29uZHMgLyBTRUNPTkRTX1BFUl9EQVkpO1xuICAgIHJldHVybiBgJHtkZWx0YURheXN9ZyBmYWA7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6IjtvSUFFQSxHQUFNLENBQUFBLENBQUEsRUFBQUMsY0FBQSxHQUFBQyxDQUFBLE1BQXFCLElBQ3JCQyxDQUFBLEVBQUFGLGNBQUEsR0FBQUMsQ0FBQSxNQUFtQixJQUNuQkUsQ0FBQSxFQUFBSCxjQUFBLEdBQUFDLENBQUEsTUFBZ0IsSUFDaEJHLENBQUEsRUFBQUosY0FBQSxHQUFBQyxDQUFBLE1BQW1CRixDQUFBLENBQXFCRyxDQUFBLEVBQ3hDRyxDQUFBLEVBQUFMLGNBQUEsR0FBQUMsQ0FBQSxNQUFrQkcsQ0FBQSxDQUFtQkQsQ0FBQSxFQUc5QkcsQ0FBQSxFQUFBTixjQUFBLEdBQUFDLENBQUEsT0FBZSxLQUFBRCxjQUFBLEdBQUFPLENBQUEsTUFBdEIsS0FBTyxDQUFBQyxDQUFlLENBQzFCQyxVQUFVQyxDQUFBLENBQWMsQ0FBQVYsY0FBQSxHQUFBTyxDQUFBLE1BQ3RCLEdBQU0sQ0FBQUksQ0FBQSxFQUFBWCxjQUFBLEdBQUFDLENBQUEsTUFBa0JXLElBQUEsQ0FBS0MsS0FBQSxDQUFNSCxDQUFNLEdBQ3pDVixjQUFBLEdBQUFDLENBQUEsU0FBSWEsTUFBQSxDQUFPQyxLQUFBLENBQU1KLENBQWUsRUFDOUIsQ0FBQVgsY0FBQSxHQUFBZ0IsQ0FBQSxRQUFBaEIsQ0FBQSxpQkFBQUMsQ0FBQSxZQUFPLENBQUFTLENBQUEsRUFHVCxLQUFBVixjQUFBLEdBQUFnQixDQUFBLGFBQU0sQ0FBQWYsQ0FBQSxFQUFBRCxjQUFBLEdBQUFDLENBQUEsTUFBVVcsSUFBQSxDQUFLSyxHQUFBLENBQUcsRUFBS04sQ0FBQSxFQUM3QlgsY0FBQSxHQUFBQyxDQUFBLFVBQUlBLENBQUEsQ0FBVSxFQUNaLENBQUFELGNBQUEsR0FBQWdCLENBQUEsUUFBQWhCLENBQUEsaUJBQUFDLENBQUEsYUFBTyxZQUdULEtBQUFELGNBQUEsR0FBQWdCLENBQUEsYUFBTSxDQUFBRSxDQUFBLEVBQUFsQixjQUFBLEdBQUFDLENBQUEsT0FBZWtCLElBQUEsQ0FBS0MsS0FBQSxDQUFNbkIsQ0FBQSxDQUFVLEdBQUksR0FDOUNELGNBQUEsR0FBQUMsQ0FBQSxVQUFJaUIsQ0FBQSxDQUFlbkIsQ0FBQSxDQUNqQixDQUFBQyxjQUFBLEdBQUFnQixDQUFBLFFBQUFoQixDQUFBLGlCQUFBQyxDQUFBLGFBQU8sR0FBR2lCLENBQVksUUFHeEIsS0FBQWxCLGNBQUEsR0FBQWdCLENBQUEsYUFBTSxDQUFBSyxDQUFBLEVBQUFyQixjQUFBLEdBQUFDLENBQUEsT0FBZWtCLElBQUEsQ0FBS0MsS0FBQSxDQUFNRixDQUFBLENBQWVuQixDQUFrQixHQUNqRUMsY0FBQSxHQUFBQyxDQUFBLFVBQUlpQixDQUFBLENBQWVkLENBQUEsQ0FDakIsQ0FBQUosY0FBQSxHQUFBZ0IsQ0FBQSxRQUFBaEIsQ0FBQSxpQkFBQUMsQ0FBQSxhQUFPLEdBQUdvQixDQUFZLFFBR3hCLEtBQUFyQixjQUFBLEdBQUFnQixDQUFBLGFBQU0sQ0FBQVQsQ0FBQSxFQUFBUCxjQUFBLEdBQUFDLENBQUEsT0FBYWtCLElBQUEsQ0FBS0MsS0FBQSxDQUFNRixDQUFBLENBQWVkLENBQWdCLEdBQzdESixjQUFBLEdBQUFDLENBQUEsVUFBSWlCLENBQUEsQ0FBZWIsQ0FBQSxDQUFpQixDQUFBTCxjQUFBLEdBQUFnQixDQUFBLFNBQ2xDLEdBQU0sQ0FBQU0sQ0FBQSxFQUFBdEIsY0FBQSxHQUFBQyxDQUFBLE9BQW1Cb0IsQ0FBQSxDQUFlbkIsQ0FBQSxFQUN4Q0YsY0FBQSxHQUFBQyxDQUFBLGFBQUksQ0FBQXFCLENBQUEsQ0FBbUIsR0FBQXRCLGNBQUEsR0FBQWdCLENBQUEsU0FDZCxHQUFHVCxDQUFVLEtBQUtlLENBQWdCLFNBQUF0QixjQUFBLEdBQUFnQixDQUFBLFNBR3BDLEdBQUdULENBQVUsTUFDdEIsR0FHQSxLQUFBUCxjQUFBLEdBQUFnQixDQUFBLFVBQUFoQixjQUFBLEdBQUFDLENBQUEsYUFBTyxHQURXa0IsSUFBQSxDQUFLQyxLQUFBLENBQU1GLENBQUEsQ0FBZWIsQ0FBZSxDQUN4QyxNQUNyQixTQUFBa0IsSUFBQSxFQUFBdkIsY0FBQSxHQUFBQyxDQUFBLGdCQUFBVSxDQUFBLEVBQUFYLGNBQUEsR0FBQU8sQ0FBQSxLQUFBUCxDQUFBLGlCQUFBQyxDQUFBLG1CQUFBRCxjQUFBLEdBQUFnQixDQUFBLFNBQUFMLENBQUEsSUFBQVgsY0FBQSxHQUFBZ0IsQ0FBQSxTQWxDV1IsQ0FBQSxJQUFlLFdBQUFnQixLQUFBLEVBQUF4QixjQUFBLEdBQUFDLENBQUEsT0FBQXdCLENBQUEsRUFBQUMsSUFBQSxlQUFBQyxJQUFBLENBQWZuQixDQUFBLENBQWVvQixJQUFBLFFBQUE1QixjQUFBLEdBQUFDLENBQUEsYUFBZixDQUFBTyxDQUFlLGNBQUFGLENBQUEsSUFBQUksQ0FBQSxFIiwiaWdub3JlTGlzdCI6W119 \ No newline at end of file diff --git a/frontend/dist-instrumented/chunk-O5PEFBSV.js.map b/frontend/dist-instrumented/chunk-O5PEFBSV.js.map new file mode 100644 index 00000000..73d14bfb --- /dev/null +++ b/frontend/dist-instrumented/chunk-O5PEFBSV.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["src/app/shared/pipes/elapsed-time.pipe.ts"], + "sourcesContent": ["import { Pipe, PipeTransform } from '@angular/core';\n\nconst SECONDS_PER_MINUTE = 60;\nconst MINUTES_PER_HOUR = 60;\nconst HOURS_PER_DAY = 24;\nconst SECONDS_PER_HOUR = SECONDS_PER_MINUTE * MINUTES_PER_HOUR;\nconst SECONDS_PER_DAY = SECONDS_PER_HOUR * HOURS_PER_DAY;\n\n@Pipe({ name: 'elapsedTime', standalone: true, pure: true })\nexport class ElapsedTimePipe implements PipeTransform {\n transform(sentAt: string): string {\n const parsedTimestamp = Date.parse(sentAt);\n if (Number.isNaN(parsedTimestamp)) {\n return sentAt;\n }\n\n const deltaMs = Date.now() - parsedTimestamp;\n if (deltaMs < 0) {\n return 'tra poco';\n }\n\n const deltaSeconds = Math.floor(deltaMs / 1000);\n if (deltaSeconds < SECONDS_PER_MINUTE) {\n return `${deltaSeconds}s fa`;\n }\n\n const deltaMinutes = Math.floor(deltaSeconds / SECONDS_PER_MINUTE);\n if (deltaSeconds < SECONDS_PER_HOUR) {\n return `${deltaMinutes}m fa`;\n }\n\n const deltaHours = Math.floor(deltaSeconds / SECONDS_PER_HOUR);\n if (deltaSeconds < SECONDS_PER_DAY) {\n const remainingMinutes = deltaMinutes % MINUTES_PER_HOUR;\n if (remainingMinutes > 0) {\n return `${deltaHours}h ${remainingMinutes}m fa`;\n }\n\n return `${deltaHours}h fa`;\n }\n\n const deltaDays = Math.floor(deltaSeconds / SECONDS_PER_DAY);\n return `${deltaDays}g fa`;\n }\n}\n"], + "mappings": "yCAEA,IAAMA,EAAqB,GACrBC,EAAmB,GACnBC,EAAgB,GAChBC,EAAmBH,EAAqBC,EACxCG,EAAkBD,EAAmBD,EAG9BG,GAAe,IAAA,CAAtB,MAAOA,CAAe,CAC1BC,UAAUC,EAAc,CACtB,IAAMC,EAAkBC,KAAKC,MAAMH,CAAM,EACzC,GAAII,OAAOC,MAAMJ,CAAe,EAC9B,OAAOD,EAGT,IAAMM,EAAUJ,KAAKK,IAAG,EAAKN,EAC7B,GAAIK,EAAU,EACZ,MAAO,WAGT,IAAME,EAAeC,KAAKC,MAAMJ,EAAU,GAAI,EAC9C,GAAIE,EAAef,EACjB,MAAO,GAAGe,CAAY,OAGxB,IAAMG,EAAeF,KAAKC,MAAMF,EAAef,CAAkB,EACjE,GAAIe,EAAeZ,EACjB,MAAO,GAAGe,CAAY,OAGxB,IAAMC,EAAaH,KAAKC,MAAMF,EAAeZ,CAAgB,EAC7D,GAAIY,EAAeX,EAAiB,CAClC,IAAMgB,EAAmBF,EAAejB,EACxC,OAAImB,EAAmB,EACd,GAAGD,CAAU,KAAKC,CAAgB,OAGpC,GAAGD,CAAU,MACtB,CAGA,MAAO,GADWH,KAAKC,MAAMF,EAAeX,CAAe,CACxC,MACrB,4CAlCWC,EAAe,+CAAfA,EAAegB,KAAA,EAAA,CAAA,SAAfhB,CAAe,GAAA", + "names": ["SECONDS_PER_MINUTE", "MINUTES_PER_HOUR", "HOURS_PER_DAY", "SECONDS_PER_HOUR", "SECONDS_PER_DAY", "ElapsedTimePipe", "transform", "sentAt", "parsedTimestamp", "Date", "parse", "Number", "isNaN", "deltaMs", "now", "deltaSeconds", "Math", "floor", "deltaMinutes", "deltaHours", "remainingMinutes", "pure"] +} diff --git a/frontend/dist-instrumented/chunk-OBGIBPUX.js b/frontend/dist-instrumented/chunk-OBGIBPUX.js new file mode 100644 index 00000000..2c0e8296 --- /dev/null +++ b/frontend/dist-instrumented/chunk-OBGIBPUX.js @@ -0,0 +1,4 @@ +function cov_5m3i3xb7l(){var path="/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-OBGIBPUX.js";var hash="6e9305c59132b20088d76c0a3f33a35cf9367291";var global=new Function("return this")();var gcv="__coverage__";var coverageData={path:"/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-OBGIBPUX.js",statementMap:{"0":{start:{line:1,column:285},end:{line:2,column:79}},"1":{start:{line:1,column:316},end:{line:1,column:345}},"2":{start:{line:1,column:328},end:{line:1,column:344}},"3":{start:{line:1,column:363},end:{line:2,column:66}},"4":{start:{line:1,column:897},end:{line:1,column:1282}},"5":{start:{line:2,column:67},end:{line:2,column:75}}},fnMap:{"0":{name:"(anonymous_0)",decl:{start:{line:1,column:286},end:{line:1,column:287}},loc:{start:{line:1,column:290},end:{line:2,column:76}},line:1},"1":{name:"(anonymous_1)",decl:{start:{line:1,column:316},end:{line:1,column:317}},loc:{start:{line:1,column:327},end:{line:1,column:345}},line:1},"2":{name:"(anonymous_2)",decl:{start:{line:1,column:883},end:{line:1,column:884}},loc:{start:{line:1,column:896},end:{line:1,column:1283}},line:1}},branchMap:{"0":{loc:{start:{line:1,column:339},end:{line:1,column:343}},type:"binary-expr",locations:[{start:{line:1,column:339},end:{line:1,column:340}},{start:{line:1,column:342},end:{line:1,column:343}}],line:1},"1":{loc:{start:{line:1,column:897},end:{line:1,column:1282}},type:"binary-expr",locations:[{start:{line:1,column:897},end:{line:1,column:900}},{start:{line:1,column:903},end:{line:1,column:1281}}],line:1}},s:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0},f:{"0":0,"1":0,"2":0},b:{"0":[0,0],"1":[0,0]},inputSourceMap:{version:3,sources:["src/app/features/device-interaction/components/room-detail/room-detail.component.ts","src/app/features/device-interaction/components/room-detail/room-detail.component.html"],sourcesContent:["import { Component } from '@angular/core';\nimport { RouterLink } from '@angular/router';\nimport { EndpointTableComponent } from '../endpoint-table/endpoint-table.component';\n\n@Component({\n\tselector: 'app-room-detail',\n\tstandalone: true,\n\timports: [RouterLink, EndpointTableComponent],\n\ttemplateUrl: './room-detail.component.html',\n\tstyleUrl: './room-detail.component.css'\n})\nexport class RoomDetailComponent {\n\n}\n","
\n
\n
\n \n \n \n \n Torna al monitor appartamento\n \n

Panoramica allarmi e dispositivi

\n

Tutti i dispositivi con endpoint scrivibili, organizzati per stanza.

\n
\n\n

\n \n Controllo centralizzato\n

\n
\n\n \n
\n"],mappings:"uRAWA,IAAaA,GAAmB,IAAA,CAA1B,MAAOA,CAAmB,4CAAnBA,EAAmB,2BAAnBA,EAAmBC,UAAA,CAAA,CAAA,iBAAA,CAAA,EAAAC,MAAA,GAAAC,KAAA,EAAAC,OAAA,CAAA,CAAA,aAAA,2BAAA,EAAA,cAAA,YAAA,eAAA,EAAA,CAAA,EAAA,iBAAA,EAAA,CAAA,aAAA,qBAAA,EAAA,0BAAA,EAAA,CAAA,UAAA,YAAA,OAAA,OAAA,cAAA,MAAA,EAAA,CAAA,IAAA,iBAAA,SAAA,eAAA,eAAA,IAAA,iBAAA,QAAA,kBAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,eAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,cAAA,OAAA,EAAA,gBAAA,CAAA,EAAAC,SAAA,SAAAC,EAAAC,EAAA,CAAAD,EAAA,ICXhCE,EAAA,EAAA,UAAA,CAAA,EAA2F,EAAA,SAAA,CAAA,EACzD,EAAA,KAAA,EACzB,EAAA,IAAA,CAAA,MAEDA,EAAA,EAAA,MAAA,CAAA,EACEC,EAAA,EAAA,OAAA,CAAA,EACFC,EAAA,EACAC,EAAA,EAAA,iCAAA,EACFD,EAAA,MACAF,EAAA,EAAA,KAAA,CAAA,EAAuBG,EAAA,EAAA,kCAAA,EAAgCD,EAAA,EACvDF,EAAA,EAAA,IAAA,CAAA,EAAyBG,EAAA,GAAA,sEAAA,EAAoED,EAAA,EAAI,EAGnGF,EAAA,GAAA,IAAA,CAAA,EACEC,EAAA,GAAA,OAAA,CAAA,EACAE,EAAA,GAAA,2BAAA,EACFD,EAAA,EAAI,EAGND,EAAA,GAAA,oBAAA,EACFC,EAAA,kBDbWE,EAAYC,CAAsB,EAAAC,OAAA,CAAA;+DAAA,CAAA,CAAA,SAIhCd,CAAmB,GAAA",names:["RoomDetailComponent","selectors","decls","vars","consts","template","rf","ctx","\u0275\u0275elementStart","\u0275\u0275element","\u0275\u0275elementEnd","\u0275\u0275text","RouterLink","EndpointTableComponent","styles"]},_coverageSchema:"1a1c01bbd47fc00a2c39e90264f33305004495a9",hash:"6e9305c59132b20088d76c0a3f33a35cf9367291"};var coverage=global[gcv]||(global[gcv]={});if(!coverage[path]||coverage[path].hash!==hash){coverage[path]=coverageData;}var actualCoverage=coverage[path];{// @ts-ignore +cov_5m3i3xb7l=function(){return actualCoverage;};}return actualCoverage;}cov_5m3i3xb7l();import{a as c}from"./chunk-4QFEXKFV.js";import"./chunk-HTKPMSJ5.js";import{f as l}from"./chunk-FYGTVJAL.js";import"./chunk-2S5V5XEE.js";import"./chunk-F6OGAIBI.js";import{Ab as o,Ka as d,X as a,Y as m,db as t,eb as e,fb as i}from"./chunk-RYTNMYZW.js";import"./chunk-VCZGUBMY.js";var u=(cov_5m3i3xb7l().s[0]++,(()=>{cov_5m3i3xb7l().f[0]++;class n{static ɵfac=(cov_5m3i3xb7l().s[1]++,function(r){cov_5m3i3xb7l().f[1]++;cov_5m3i3xb7l().s[2]++;return new((cov_5m3i3xb7l().b[0][0]++,r)||(cov_5m3i3xb7l().b[0][1]++,n))();});static ɵcmp=(cov_5m3i3xb7l().s[3]++,d({type:n,selectors:[["app-room-detail"]],decls:15,vars:0,consts:[["aria-label","Dispositivi con endpoint",1,"room-detail","care-page","care-dot-grid"],[1,"care-page__hero"],["routerLink","/apartment-monitor",1,"room-detail__back-button"],["viewBox","0 0 24 24","fill","none","aria-hidden","true"],["d","M15 6l-6 6 6 6","stroke","currentColor","stroke-width","2","stroke-linecap","round","stroke-linejoin","round"],[1,"care-title"],[1,"care-subtitle"],[1,"care-chip"],["aria-hidden","true",1,"care-chip__dot"]],template:function(r,s){cov_5m3i3xb7l().f[2]++;cov_5m3i3xb7l().s[4]++;(cov_5m3i3xb7l().b[1][0]++,r&1)&&(cov_5m3i3xb7l().b[1][1]++,t(0,"section",0)(1,"header",1)(2,"div")(3,"a",2),a(),t(4,"svg",3),i(5,"path",4),e(),o(6," Torna al monitor appartamento "),e(),m(),t(7,"h1",5),o(8,"Panoramica allarmi e dispositivi"),e(),t(9,"p",6),o(10,"Tutti i dispositivi con endpoint scrivibili, organizzati per stanza."),e()(),t(11,"p",7),i(12,"span",8),o(13," Controllo centralizzato "),e()(),i(14,"app-endpoint-table"),e());},dependencies:[l,c],styles:[`.room-detail[_ngcontent-%COMP%]{gap:1.1rem}.room-detail__back-button[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:.45rem;margin-bottom:.7rem;border:1px solid rgba(217,119,6,.36);border-radius:.8rem;background:linear-gradient(120deg,#fcd34d,#fbbf24);color:#1f2937;font-size:.92rem;font-weight:700;text-decoration:none;padding:.48rem .72rem;box-shadow:0 8px 14px #f59e0b3d;transition:background-color .14s ease,border-color .14s ease,transform .12s ease}.room-detail__back-button[_ngcontent-%COMP%]:hover{background:#fef3c7bf;border-color:#f59e0b47;transform:translate(-1px)}.room-detail__back-button[_ngcontent-%COMP%] svg[_ngcontent-%COMP%]{width:.95rem;height:.95rem} +/*# sourceMappingURL=room-detail.component-XICSUYN3.css.map */`]}));}cov_5m3i3xb7l().s[5]++;return n;})());export{u as RoomDetailComponent};//# sourceMappingURL=chunk-OBGIBPUX.js.map +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1IiwiY292XzVtM2kzeGI3bCIsInMiLCJmIiwibiIsIsm1ZmFjIiwiciIsImIiLCLJtWNtcCIsImQiLCJ0eXBlIiwic2VsZWN0b3JzIiwiZGVjbHMiLCJ2YXJzIiwiY29uc3RzIiwidGVtcGxhdGUiLCJ0IiwiYSIsImkiLCJlIiwibyIsIm0iLCJkZXBlbmRlbmNpZXMiLCJsIiwiYyIsInN0eWxlcyIsIlJvb21EZXRhaWxDb21wb25lbnQiXSwic291cmNlcyI6WyJzcmMvYXBwL2ZlYXR1cmVzL2RldmljZS1pbnRlcmFjdGlvbi9jb21wb25lbnRzL3Jvb20tZGV0YWlsL3Jvb20tZGV0YWlsLmNvbXBvbmVudC50cyIsInNyYy9hcHAvZmVhdHVyZXMvZGV2aWNlLWludGVyYWN0aW9uL2NvbXBvbmVudHMvcm9vbS1kZXRhaWwvcm9vbS1kZXRhaWwuY29tcG9uZW50Lmh0bWwiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSb3V0ZXJMaW5rIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IEVuZHBvaW50VGFibGVDb21wb25lbnQgfSBmcm9tICcuLi9lbmRwb2ludC10YWJsZS9lbmRwb2ludC10YWJsZS5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6ICdhcHAtcm9vbS1kZXRhaWwnLFxuXHRzdGFuZGFsb25lOiB0cnVlLFxuXHRpbXBvcnRzOiBbUm91dGVyTGluaywgRW5kcG9pbnRUYWJsZUNvbXBvbmVudF0sXG5cdHRlbXBsYXRlVXJsOiAnLi9yb29tLWRldGFpbC5jb21wb25lbnQuaHRtbCcsXG5cdHN0eWxlVXJsOiAnLi9yb29tLWRldGFpbC5jb21wb25lbnQuY3NzJ1xufSlcbmV4cG9ydCBjbGFzcyBSb29tRGV0YWlsQ29tcG9uZW50IHtcblxufVxuIiwiPHNlY3Rpb24gY2xhc3M9XCJyb29tLWRldGFpbCBjYXJlLXBhZ2UgY2FyZS1kb3QtZ3JpZFwiIGFyaWEtbGFiZWw9XCJEaXNwb3NpdGl2aSBjb24gZW5kcG9pbnRcIj5cbiAgPGhlYWRlciBjbGFzcz1cImNhcmUtcGFnZV9faGVyb1wiPlxuICAgIDxkaXY+XG4gICAgICA8YSBjbGFzcz1cInJvb20tZGV0YWlsX19iYWNrLWJ1dHRvblwiIHJvdXRlckxpbms9XCIvYXBhcnRtZW50LW1vbml0b3JcIj5cbiAgICAgICAgPHN2ZyB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICAgICAgICA8cGF0aCBkPVwiTTE1IDZsLTYgNiA2IDZcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgPC9zdmc+XG4gICAgICAgIFRvcm5hIGFsIG1vbml0b3IgYXBwYXJ0YW1lbnRvXG4gICAgICA8L2E+XG4gICAgICA8aDEgY2xhc3M9XCJjYXJlLXRpdGxlXCI+UGFub3JhbWljYSBhbGxhcm1pIGUgZGlzcG9zaXRpdmk8L2gxPlxuICAgICAgPHAgY2xhc3M9XCJjYXJlLXN1YnRpdGxlXCI+VHV0dGkgaSBkaXNwb3NpdGl2aSBjb24gZW5kcG9pbnQgc2NyaXZpYmlsaSwgb3JnYW5penphdGkgcGVyIHN0YW56YS48L3A+XG4gICAgPC9kaXY+XG5cbiAgICA8cCBjbGFzcz1cImNhcmUtY2hpcFwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJjYXJlLWNoaXBfX2RvdFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvc3Bhbj5cbiAgICAgIENvbnRyb2xsbyBjZW50cmFsaXp6YXRvXG4gICAgPC9wPlxuICA8L2hlYWRlcj5cblxuICA8YXBwLWVuZHBvaW50LXRhYmxlIC8+XG48L3NlY3Rpb24+XG4iXSwibWFwcGluZ3MiOiI7Z1hBV0EsR0FBYSxDQUFBQSxDQUFBLEVBQUFDLGFBQUEsR0FBQUMsQ0FBQSxPQUFtQixLQUFBRCxhQUFBLEdBQUFFLENBQUEsTUFBMUIsS0FBTyxDQUFBQyxDQUFtQixRQUFBQyxJQUFBLEVBQUFKLGFBQUEsR0FBQUMsQ0FBQSxlQUFBSSxDQUFBLEVBQUFMLGFBQUEsR0FBQUUsQ0FBQSxLQUFBRixDQUFBLGdCQUFBQyxDQUFBLGtCQUFBRCxhQUFBLEdBQUFNLENBQUEsU0FBQUQsQ0FBQSxJQUFBTCxhQUFBLEdBQUFNLENBQUEsU0FBbkJILENBQUEsSUFBbUIsV0FBQUksSUFBQSxFQUFBUCxhQUFBLEdBQUFDLENBQUEsTUFBQU8sQ0FBQSxFQUFBQyxJQUFBLENBQW5CTixDQUFBLENBQW1CTyxTQUFBLHVCQUFBQyxLQUFBLElBQUFDLElBQUEsR0FBQUMsTUFBQSwrYkFBQUMsUUFBQSxTQUFBQSxDQUFBVCxDQUFBLENBQUFKLENBQUEsRUFBQUQsYUFBQSxHQUFBRSxDQUFBLEtBQUFGLENBQUEsZ0JBQUFDLENBQUEsT0FBQUQsYUFBQSxHQUFBTSxDQUFBLFNBQUFELENBQUEsTUFBQUwsYUFBQSxHQUFBTSxDQUFBLFNDWGhDUyxDQUFBLGdCQUEyRixjQUN6RCxTQUN6QixTQUFBQyxDQUFBLEdBRURELENBQUEsWUFDRUUsQ0FBQSxhQUNGQyxDQUFBLEdBQ0FDLENBQUEsc0NBQ0ZELENBQUEsR0FBQUUsQ0FBQSxHQUNBTCxDQUFBLFdBQXVCSSxDQUFBLHVDQUFnQ0QsQ0FBQSxHQUN2REgsQ0FBQSxVQUF5QkksQ0FBQSw0RUFBb0VELENBQUEsR0FBSSxFQUduR0gsQ0FBQSxXQUNFRSxDQUFBLGNBQ0FFLENBQUEsaUNBQ0ZELENBQUEsR0FBSSxFQUdORCxDQUFBLDBCQUNGQyxDQUFBLE1BQUFHLFlBQUEsRURiV0MsQ0FBQSxDQUFZQyxDQUFzQixFQUFBQyxNQUFBOytEQUFBLE1BQUF4QixhQUFBLEdBQUFDLENBQUEsWUFJaEMsQ0FBQUUsQ0FBbUIsY0FBQUosQ0FBQSxJQUFBMEIsbUJBQUEsRSIsImlnbm9yZUxpc3QiOltdfQ== \ No newline at end of file diff --git a/frontend/dist-instrumented/chunk-OBGIBPUX.js.map b/frontend/dist-instrumented/chunk-OBGIBPUX.js.map new file mode 100644 index 00000000..e7e2648d --- /dev/null +++ b/frontend/dist-instrumented/chunk-OBGIBPUX.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["src/app/features/device-interaction/components/room-detail/room-detail.component.ts", "src/app/features/device-interaction/components/room-detail/room-detail.component.html"], + "sourcesContent": ["import { Component } from '@angular/core';\nimport { RouterLink } from '@angular/router';\nimport { EndpointTableComponent } from '../endpoint-table/endpoint-table.component';\n\n@Component({\n\tselector: 'app-room-detail',\n\tstandalone: true,\n\timports: [RouterLink, EndpointTableComponent],\n\ttemplateUrl: './room-detail.component.html',\n\tstyleUrl: './room-detail.component.css'\n})\nexport class RoomDetailComponent {\n\n}\n", "
\n
\n
\n \n \n \n \n Torna al monitor appartamento\n \n

Panoramica allarmi e dispositivi

\n

Tutti i dispositivi con endpoint scrivibili, organizzati per stanza.

\n
\n\n

\n \n Controllo centralizzato\n

\n
\n\n \n
\n"], + "mappings": "uRAWA,IAAaA,GAAmB,IAAA,CAA1B,MAAOA,CAAmB,4CAAnBA,EAAmB,2BAAnBA,EAAmBC,UAAA,CAAA,CAAA,iBAAA,CAAA,EAAAC,MAAA,GAAAC,KAAA,EAAAC,OAAA,CAAA,CAAA,aAAA,2BAAA,EAAA,cAAA,YAAA,eAAA,EAAA,CAAA,EAAA,iBAAA,EAAA,CAAA,aAAA,qBAAA,EAAA,0BAAA,EAAA,CAAA,UAAA,YAAA,OAAA,OAAA,cAAA,MAAA,EAAA,CAAA,IAAA,iBAAA,SAAA,eAAA,eAAA,IAAA,iBAAA,QAAA,kBAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,eAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,cAAA,OAAA,EAAA,gBAAA,CAAA,EAAAC,SAAA,SAAAC,EAAAC,EAAA,CAAAD,EAAA,ICXhCE,EAAA,EAAA,UAAA,CAAA,EAA2F,EAAA,SAAA,CAAA,EACzD,EAAA,KAAA,EACzB,EAAA,IAAA,CAAA,MAEDA,EAAA,EAAA,MAAA,CAAA,EACEC,EAAA,EAAA,OAAA,CAAA,EACFC,EAAA,EACAC,EAAA,EAAA,iCAAA,EACFD,EAAA,MACAF,EAAA,EAAA,KAAA,CAAA,EAAuBG,EAAA,EAAA,kCAAA,EAAgCD,EAAA,EACvDF,EAAA,EAAA,IAAA,CAAA,EAAyBG,EAAA,GAAA,sEAAA,EAAoED,EAAA,EAAI,EAGnGF,EAAA,GAAA,IAAA,CAAA,EACEC,EAAA,GAAA,OAAA,CAAA,EACAE,EAAA,GAAA,2BAAA,EACFD,EAAA,EAAI,EAGND,EAAA,GAAA,oBAAA,EACFC,EAAA,kBDbWE,EAAYC,CAAsB,EAAAC,OAAA,CAAA;+DAAA,CAAA,CAAA,SAIhCd,CAAmB,GAAA", + "names": ["RoomDetailComponent", "selectors", "decls", "vars", "consts", "template", "rf", "ctx", "\u0275\u0275elementStart", "\u0275\u0275element", "\u0275\u0275elementEnd", "\u0275\u0275text", "RouterLink", "EndpointTableComponent", "styles"] +} diff --git a/frontend/dist-instrumented/chunk-QDUTXPLA.js b/frontend/dist-instrumented/chunk-QDUTXPLA.js new file mode 100644 index 00000000..6703c7f0 --- /dev/null +++ b/frontend/dist-instrumented/chunk-QDUTXPLA.js @@ -0,0 +1,3 @@ +function cov_eyids9igk(){var path="/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-QDUTXPLA.js";var hash="b1fb962b1593885e57b9cb3eeee5018d471e1f35";var global=new Function("return this")();var gcv="__coverage__";var coverageData={path:"/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-QDUTXPLA.js",statementMap:{"0":{start:{line:1,column:214},end:{line:1,column:326}},"1":{start:{line:1,column:258},end:{line:1,column:324}},"2":{start:{line:1,column:296},end:{line:1,column:323}}},fnMap:{"0":{name:"(anonymous_0)",decl:{start:{line:1,column:254},end:{line:1,column:255}},loc:{start:{line:1,column:258},end:{line:1,column:324}},line:1},"1":{name:"(anonymous_1)",decl:{start:{line:1,column:293},end:{line:1,column:294}},loc:{start:{line:1,column:296},end:{line:1,column:323}},line:1}},branchMap:{},s:{"0":0,"1":0,"2":0},f:{"0":0,"1":0},b:{},inputSourceMap:{version:3,sources:["src/app/features/alarm-history/alarm-history.routes.ts"],sourcesContent:["import { Routes } from '@angular/router';\nimport { authGuard } from '../../core/guards/auth.guard';\n\nexport const ALARM_HISTORY_ROUTES: Routes = [\n {\n path: '',\n canActivate: [authGuard],\n loadComponent: () =>\n import('./components/alarm-history-page.component').then(\n (m) => m.AlarmHistoryPageComponent\n )\n }\n];"],mappings:"gNAGO,IAAMA,EAA+B,CAC1C,CACEC,KAAM,GACNC,YAAa,CAACC,CAAS,EACvBC,cAAeA,IACb,OAAO,qBAA2C,EAAEC,KACjDC,GAAMA,EAAEC,yBAAyB,EAEvC",names:["ALARM_HISTORY_ROUTES","path","canActivate","authGuard","loadComponent","then","m","AlarmHistoryPageComponent"]},_coverageSchema:"1a1c01bbd47fc00a2c39e90264f33305004495a9",hash:"b1fb962b1593885e57b9cb3eeee5018d471e1f35"};var coverage=global[gcv]||(global[gcv]={});if(!coverage[path]||coverage[path].hash!==hash){coverage[path]=coverageData;}var actualCoverage=coverage[path];{// @ts-ignore +cov_eyids9igk=function(){return actualCoverage;};}return actualCoverage;}cov_eyids9igk();import{a as t}from"./chunk-K2WBT5ZC.js";import"./chunk-FYGTVJAL.js";import"./chunk-65RKWSY3.js";import"./chunk-2S5V5XEE.js";import"./chunk-F6OGAIBI.js";import"./chunk-RYTNMYZW.js";import"./chunk-VCZGUBMY.js";var n=(cov_eyids9igk().s[0]++,[{path:"",canActivate:[t],loadComponent:()=>{cov_eyids9igk().f[0]++;cov_eyids9igk().s[1]++;return import("./chunk-RSPUKT2Q.js").then(o=>{cov_eyids9igk().f[1]++;cov_eyids9igk().s[2]++;return o.AlarmHistoryPageComponent;});}}]);export{n as ALARM_HISTORY_ROUTES};//# sourceMappingURL=chunk-QDUTXPLA.js.map +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJuIiwiY292X2V5aWRzOWlnayIsInMiLCJwYXRoIiwiY2FuQWN0aXZhdGUiLCJ0IiwibG9hZENvbXBvbmVudCIsImYiLCJ0aGVuIiwibyIsIkFsYXJtSGlzdG9yeVBhZ2VDb21wb25lbnQiLCJBTEFSTV9ISVNUT1JZX1JPVVRFUyJdLCJzb3VyY2VzIjpbInNyYy9hcHAvZmVhdHVyZXMvYWxhcm0taGlzdG9yeS9hbGFybS1oaXN0b3J5LnJvdXRlcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSb3V0ZXMgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgYXV0aEd1YXJkIH0gZnJvbSAnLi4vLi4vY29yZS9ndWFyZHMvYXV0aC5ndWFyZCc7XG5cbmV4cG9ydCBjb25zdCBBTEFSTV9ISVNUT1JZX1JPVVRFUzogUm91dGVzID0gW1xuICB7XG4gICAgcGF0aDogJycsXG4gICAgY2FuQWN0aXZhdGU6IFthdXRoR3VhcmRdLFxuICAgIGxvYWRDb21wb25lbnQ6ICgpID0+XG4gICAgICBpbXBvcnQoJy4vY29tcG9uZW50cy9hbGFybS1oaXN0b3J5LXBhZ2UuY29tcG9uZW50JykudGhlbihcbiAgICAgICAgKG0pID0+IG0uQWxhcm1IaXN0b3J5UGFnZUNvbXBvbmVudFxuICAgICAgKVxuICB9XG5dOyJdLCJtYXBwaW5ncyI6Ijt5U0FHTyxHQUFNLENBQUFBLENBQUEsRUFBQUMsYUFBQSxHQUFBQyxDQUFBLE1BQStCLENBQzFDLENBQ0VDLElBQUEsQ0FBTSxHQUNOQyxXQUFBLENBQWEsQ0FBQ0MsQ0FBUyxFQUN2QkMsYUFBQSxDQUFlQSxDQUFBLEdBQ2IsQ0FBQUwsYUFBQSxHQUFBTSxDQUFBLEtBQUFOLENBQUEsZ0JBQUFDLENBQUEsb0JBQU8scUJBQTJDLEVBQUVNLElBQUEsQ0FDakRDLENBQUEsRUFBTSxDQUFBUixhQUFBLEdBQUFNLENBQUEsS0FBQU4sQ0FBQSxnQkFBQUMsQ0FBQSxhQUFBTyxDQUFBLENBQUVDLHlCQUF5QixDQUF6QixDQUF5QixJQUV2QyxVQUFBVixDQUFBLElBQUFXLG9CQUFBLEUiLCJpZ25vcmVMaXN0IjpbXX0= \ No newline at end of file diff --git a/frontend/dist-instrumented/chunk-QDUTXPLA.js.map b/frontend/dist-instrumented/chunk-QDUTXPLA.js.map new file mode 100644 index 00000000..990140f1 --- /dev/null +++ b/frontend/dist-instrumented/chunk-QDUTXPLA.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["src/app/features/alarm-history/alarm-history.routes.ts"], + "sourcesContent": ["import { Routes } from '@angular/router';\nimport { authGuard } from '../../core/guards/auth.guard';\n\nexport const ALARM_HISTORY_ROUTES: Routes = [\n {\n path: '',\n canActivate: [authGuard],\n loadComponent: () =>\n import('./components/alarm-history-page.component').then(\n (m) => m.AlarmHistoryPageComponent\n )\n }\n];"], + "mappings": "gNAGO,IAAMA,EAA+B,CAC1C,CACEC,KAAM,GACNC,YAAa,CAACC,CAAS,EACvBC,cAAeA,IACb,OAAO,qBAA2C,EAAEC,KACjDC,GAAMA,EAAEC,yBAAyB,EAEvC", + "names": ["ALARM_HISTORY_ROUTES", "path", "canActivate", "authGuard", "loadComponent", "then", "m", "AlarmHistoryPageComponent"] +} diff --git a/frontend/dist-instrumented/chunk-QFTDGRKT.js b/frontend/dist-instrumented/chunk-QFTDGRKT.js new file mode 100644 index 00000000..0988e620 --- /dev/null +++ b/frontend/dist-instrumented/chunk-QFTDGRKT.js @@ -0,0 +1,3 @@ +function cov_1u6c7f19ma(){var path="/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-QFTDGRKT.js";var hash="8f63a2cefc726655d17e6b67050d90bfebc43f0e";var global=new Function("return this")();var gcv="__coverage__";var coverageData={path:"/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-QFTDGRKT.js",statementMap:{"0":{start:{line:1,column:295},end:{line:1,column:4134}},"1":{start:{line:1,column:314},end:{line:1,column:318}},"2":{start:{line:1,column:327},end:{line:1,column:331}},"3":{start:{line:1,column:344},end:{line:1,column:348}},"4":{start:{line:1,column:367},end:{line:1,column:371}},"5":{start:{line:1,column:386},end:{line:1,column:409}},"6":{start:{line:1,column:429},end:{line:1,column:457}},"7":{start:{line:1,column:480},end:{line:1,column:711}},"8":{start:{line:1,column:524},end:{line:1,column:547}},"9":{start:{line:1,column:550},end:{line:1,column:575}},"10":{start:{line:1,column:560},end:{line:1,column:568}},"11":{start:{line:1,column:576},end:{line:1,column:627}},"12":{start:{line:1,column:582},end:{line:1,column:627}},"13":{start:{line:1,column:627},end:{line:1,column:666}},"14":{start:{line:1,column:674},end:{line:1,column:709}},"15":{start:{line:1,column:737},end:{line:1,column:851}},"16":{start:{line:1,column:774},end:{line:1,column:849}},"17":{start:{line:1,column:784},end:{line:1,column:805}},"18":{start:{line:1,column:820},end:{line:1,column:848}},"19":{start:{line:1,column:889},end:{line:1,column:924}},"20":{start:{line:1,column:925},end:{line:1,column:1014}},"21":{start:{line:1,column:985},end:{line:1,column:1012}},"22":{start:{line:1,column:1030},end:{line:1,column:1156}},"23":{start:{line:1,column:1090},end:{line:1,column:1111}},"24":{start:{line:1,column:1119},end:{line:1,column:1153}},"25":{start:{line:1,column:1182},end:{line:1,column:1203}},"26":{start:{line:1,column:1204},end:{line:1,column:1271}},"27":{start:{line:1,column:1298},end:{line:1,column:1319}},"28":{start:{line:1,column:1320},end:{line:1,column:1388}},"29":{start:{line:1,column:1415},end:{line:1,column:1438}},"30":{start:{line:1,column:1441},end:{line:1,column:1504}},"31":{start:{line:1,column:1505},end:{line:1,column:1814}},"32":{start:{line:1,column:1625},end:{line:1,column:1754}},"33":{start:{line:1,column:1660},end:{line:1,column:1747}},"34":{start:{line:1,column:1747},end:{line:1,column:1753}},"35":{start:{line:1,column:1754},end:{line:1,column:1813}},"36":{start:{line:1,column:1840},end:{line:1,column:1863}},"37":{start:{line:1,column:1864},end:{line:1,column:1934}},"38":{start:{line:1,column:1958},end:{line:1,column:1978}},"39":{start:{line:1,column:1979},end:{line:1,column:2002}},"40":{start:{line:1,column:1993},end:{line:1,column:2002}},"41":{start:{line:1,column:2002},end:{line:1,column:2043}},"42":{start:{line:1,column:2034},end:{line:1,column:2043}},"43":{start:{line:1,column:2049},end:{line:1,column:2050}},"44":{start:{line:1,column:2051},end:{line:1,column:2093}},"45":{start:{line:1,column:2110},end:{line:1,column:2140}},"46":{start:{line:1,column:2131},end:{line:1,column:2140}},"47":{start:{line:1,column:2146},end:{line:1,column:2153}},"48":{start:{line:1,column:2154},end:{line:1,column:2396}},"49":{start:{line:1,column:2170},end:{line:1,column:2211}},"50":{start:{line:1,column:2202},end:{line:1,column:2211}},"51":{start:{line:1,column:2217},end:{line:1,column:2218}},"52":{start:{line:1,column:2219},end:{line:1,column:2267}},"53":{start:{line:1,column:2258},end:{line:1,column:2267}},"54":{start:{line:1,column:2273},end:{line:1,column:2323}},"55":{start:{line:1,column:2324},end:{line:1,column:2395}},"56":{start:{line:1,column:2396},end:{line:1,column:2425}},"57":{start:{line:1,column:2462},end:{line:1,column:2544}},"58":{start:{line:1,column:2490},end:{line:1,column:2498}},"59":{start:{line:1,column:2510},end:{line:1,column:2529}},"60":{start:{line:1,column:2545},end:{line:1,column:2671}},"61":{start:{line:1,column:2619},end:{line:1,column:2669}},"62":{start:{line:1,column:2701},end:{line:1,column:2734}},"63":{start:{line:1,column:2735},end:{line:1,column:3327}},"64":{start:{line:1,column:2797},end:{line:1,column:2834}},"65":{start:{line:1,column:2837},end:{line:1,column:2924}},"66":{start:{line:1,column:2877},end:{line:1,column:2922}},"67":{start:{line:1,column:2925},end:{line:1,column:3324}},"68":{start:{line:1,column:2988},end:{line:1,column:3321}},"69":{start:{line:1,column:3083},end:{line:1,column:3092}},"70":{start:{line:1,column:3201},end:{line:1,column:3318}},"71":{start:{line:1,column:3360},end:{line:1,column:3367}},"72":{start:{line:1,column:3368},end:{line:1,column:3514}},"73":{start:{line:1,column:3390},end:{line:1,column:3422}},"74":{start:{line:1,column:3425},end:{line:1,column:3433}},"75":{start:{line:1,column:3434},end:{line:1,column:3513}},"76":{start:{line:1,column:3514},end:{line:1,column:3543}},"77":{start:{line:1,column:3567},end:{line:1,column:3596}},"78":{start:{line:1,column:3629},end:{line:1,column:3654}},"79":{start:{line:1,column:3657},end:{line:1,column:3685}},"80":{start:{line:1,column:3688},end:{line:1,column:3689}},"81":{start:{line:1,column:3690},end:{line:1,column:3823}},"82":{start:{line:1,column:3857},end:{line:1,column:3877}},"83":{start:{line:1,column:3880},end:{line:1,column:3900}},"84":{start:{line:1,column:3901},end:{line:1,column:3958}},"85":{start:{line:1,column:3978},end:{line:1,column:4005}},"86":{start:{line:1,column:4023},end:{line:1,column:4052}},"87":{start:{line:1,column:4035},end:{line:1,column:4051}},"88":{start:{line:1,column:4071},end:{line:1,column:4121}},"89":{start:{line:1,column:4122},end:{line:1,column:4130}}},fnMap:{"0":{name:"(anonymous_0)",decl:{start:{line:1,column:296},end:{line:1,column:297}},loc:{start:{line:1,column:300},end:{line:1,column:4131}},line:1},"1":{name:"(anonymous_1)",decl:{start:{line:1,column:458},end:{line:1,column:459}},loc:{start:{line:1,column:479},end:{line:1,column:712}},line:1},"2":{name:"(anonymous_2)",decl:{start:{line:1,column:514},end:{line:1,column:515}},loc:{start:{line:1,column:517},end:{line:1,column:667}},line:1},"3":{name:"(anonymous_3)",decl:{start:{line:1,column:557},end:{line:1,column:558}},loc:{start:{line:1,column:560},end:{line:1,column:568}},line:1},"4":{name:"(anonymous_4)",decl:{start:{line:1,column:671},end:{line:1,column:672}},loc:{start:{line:1,column:674},end:{line:1,column:709}},line:1},"5":{name:"(anonymous_5)",decl:{start:{line:1,column:712},end:{line:1,column:713}},loc:{start:{line:1,column:736},end:{line:1,column:852}},line:1},"6":{name:"(anonymous_6)",decl:{start:{line:1,column:771},end:{line:1,column:772}},loc:{start:{line:1,column:774},end:{line:1,column:849}},line:1},"7":{name:"(anonymous_7)",decl:{start:{line:1,column:780},end:{line:1,column:781}},loc:{start:{line:1,column:784},end:{line:1,column:805}},line:1},"8":{name:"(anonymous_8)",decl:{start:{line:1,column:813},end:{line:1,column:814}},loc:{start:{line:1,column:820},end:{line:1,column:848}},line:1},"9":{name:"(anonymous_9)",decl:{start:{line:1,column:852},end:{line:1,column:853}},loc:{start:{line:1,column:882},end:{line:1,column:1015}},line:1},"10":{name:"(anonymous_10)",decl:{start:{line:1,column:982},end:{line:1,column:983}},loc:{start:{line:1,column:985},end:{line:1,column:1012}},line:1},"11":{name:"(anonymous_11)",decl:{start:{line:1,column:1015},end:{line:1,column:1016}},loc:{start:{line:1,column:1029},end:{line:1,column:1157}},line:1},"12":{name:"(anonymous_12)",decl:{start:{line:1,column:1087},end:{line:1,column:1088}},loc:{start:{line:1,column:1090},end:{line:1,column:1111}},line:1},"13":{name:"(anonymous_13)",decl:{start:{line:1,column:1115},end:{line:1,column:1116}},loc:{start:{line:1,column:1118},end:{line:1,column:1154}},line:1},"14":{name:"(anonymous_14)",decl:{start:{line:1,column:1157},end:{line:1,column:1158}},loc:{start:{line:1,column:1175},end:{line:1,column:1272}},line:1},"15":{name:"(anonymous_15)",decl:{start:{line:1,column:1272},end:{line:1,column:1273}},loc:{start:{line:1,column:1291},end:{line:1,column:1389}},line:1},"16":{name:"(anonymous_16)",decl:{start:{line:1,column:1389},end:{line:1,column:1390}},loc:{start:{line:1,column:1408},end:{line:1,column:1815}},line:1},"17":{name:"(anonymous_17)",decl:{start:{line:1,column:1815},end:{line:1,column:1816}},loc:{start:{line:1,column:1833},end:{line:1,column:1935}},line:1},"18":{name:"(anonymous_18)",decl:{start:{line:1,column:1935},end:{line:1,column:1936}},loc:{start:{line:1,column:1951},end:{line:1,column:2094}},line:1},"19":{name:"(anonymous_19)",decl:{start:{line:1,column:2094},end:{line:1,column:2095}},loc:{start:{line:1,column:2109},end:{line:1,column:2426}},line:1},"20":{name:"(anonymous_20)",decl:{start:{line:1,column:2426},end:{line:1,column:2427}},loc:{start:{line:1,column:2455},end:{line:1,column:2672}},line:1},"21":{name:"(anonymous_21)",decl:{start:{line:1,column:2487},end:{line:1,column:2488}},loc:{start:{line:1,column:2490},end:{line:1,column:2498}},line:1},"22":{name:"(anonymous_22)",decl:{start:{line:1,column:2507},end:{line:1,column:2508}},loc:{start:{line:1,column:2510},end:{line:1,column:2529}},line:1},"23":{name:"(anonymous_23)",decl:{start:{line:1,column:2615},end:{line:1,column:2616}},loc:{start:{line:1,column:2618},end:{line:1,column:2670}},line:1},"24":{name:"(anonymous_24)",decl:{start:{line:1,column:2672},end:{line:1,column:2673}},loc:{start:{line:1,column:2694},end:{line:1,column:3328}},line:1},"25":{name:"(anonymous_25)",decl:{start:{line:1,column:2787},end:{line:1,column:2788}},loc:{start:{line:1,column:2790},end:{line:1,column:3325}},line:1},"26":{name:"(anonymous_26)",decl:{start:{line:1,column:2874},end:{line:1,column:2875}},loc:{start:{line:1,column:2877},end:{line:1,column:2922}},line:1},"27":{name:"(anonymous_27)",decl:{start:{line:1,column:2984},end:{line:1,column:2985}},loc:{start:{line:1,column:2988},end:{line:1,column:3321}},line:1},"28":{name:"(anonymous_28)",decl:{start:{line:1,column:3080},end:{line:1,column:3081}},loc:{start:{line:1,column:3083},end:{line:1,column:3092}},line:1},"29":{name:"(anonymous_29)",decl:{start:{line:1,column:3197},end:{line:1,column:3198}},loc:{start:{line:1,column:3201},end:{line:1,column:3318}},line:1},"30":{name:"(anonymous_30)",decl:{start:{line:1,column:3328},end:{line:1,column:3329}},loc:{start:{line:1,column:3353},end:{line:1,column:3544}},line:1},"31":{name:"(anonymous_31)",decl:{start:{line:1,column:3544},end:{line:1,column:3545}},loc:{start:{line:1,column:3566},end:{line:1,column:3597}},line:1},"32":{name:"(anonymous_32)",decl:{start:{line:1,column:3597},end:{line:1,column:3598}},loc:{start:{line:1,column:3622},end:{line:1,column:3824}},line:1},"33":{name:"(anonymous_33)",decl:{start:{line:1,column:3824},end:{line:1,column:3825}},loc:{start:{line:1,column:3850},end:{line:1,column:3959}},line:1},"34":{name:"(anonymous_34)",decl:{start:{line:1,column:3959},end:{line:1,column:3960}},loc:{start:{line:1,column:3977},end:{line:1,column:4006}},line:1},"35":{name:"(anonymous_35)",decl:{start:{line:1,column:4023},end:{line:1,column:4024}},loc:{start:{line:1,column:4034},end:{line:1,column:4052}},line:1}},branchMap:{"0":{loc:{start:{line:1,column:550},end:{line:1,column:575}},type:"binary-expr",locations:[{start:{line:1,column:550},end:{line:1,column:569}},{start:{line:1,column:571},end:{line:1,column:575}}],line:1},"1":{loc:{start:{line:1,column:576},end:{line:1,column:627}},type:"if",locations:[{start:{line:1,column:576},end:{line:1,column:627}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"2":{loc:{start:{line:1,column:1441},end:{line:1,column:1504}},type:"cond-expr",locations:[{start:{line:1,column:1473},end:{line:1,column:1499}},{start:{line:1,column:1500},end:{line:1,column:1504}}],line:1},"3":{loc:{start:{line:1,column:1441},end:{line:1,column:1472}},type:"binary-expr",locations:[{start:{line:1,column:1441},end:{line:1,column:1442}},{start:{line:1,column:1444},end:{line:1,column:1472}}],line:1},"4":{loc:{start:{line:1,column:1505},end:{line:1,column:1814}},type:"if",locations:[{start:{line:1,column:1505},end:{line:1,column:1814}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"5":{loc:{start:{line:1,column:1508},end:{line:1,column:1569}},type:"binary-expr",locations:[{start:{line:1,column:1508},end:{line:1,column:1509}},{start:{line:1,column:1511},end:{line:1,column:1539}},{start:{line:1,column:1541},end:{line:1,column:1569}}],line:1},"6":{loc:{start:{line:1,column:1572},end:{line:1,column:1622}},type:"binary-expr",locations:[{start:{line:1,column:1572},end:{line:1,column:1577}},{start:{line:1,column:1579},end:{line:1,column:1622}}],line:1},"7":{loc:{start:{line:1,column:1625},end:{line:1,column:1754}},type:"if",locations:[{start:{line:1,column:1625},end:{line:1,column:1754}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"8":{loc:{start:{line:1,column:1871},end:{line:1,column:1934}},type:"cond-expr",locations:[{start:{line:1,column:1903},end:{line:1,column:1929}},{start:{line:1,column:1930},end:{line:1,column:1934}}],line:1},"9":{loc:{start:{line:1,column:1871},end:{line:1,column:1902}},type:"binary-expr",locations:[{start:{line:1,column:1871},end:{line:1,column:1872}},{start:{line:1,column:1874},end:{line:1,column:1902}}],line:1},"10":{loc:{start:{line:1,column:1979},end:{line:1,column:2002}},type:"if",locations:[{start:{line:1,column:1979},end:{line:1,column:2002}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"11":{loc:{start:{line:1,column:2002},end:{line:1,column:2043}},type:"if",locations:[{start:{line:1,column:2002},end:{line:1,column:2043}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"12":{loc:{start:{line:1,column:2005},end:{line:1,column:2033}},type:"binary-expr",locations:[{start:{line:1,column:2005},end:{line:1,column:2023}},{start:{line:1,column:2025},end:{line:1,column:2033}}],line:1},"13":{loc:{start:{line:1,column:2076},end:{line:1,column:2092}},type:"binary-expr",locations:[{start:{line:1,column:2076},end:{line:1,column:2082}},{start:{line:1,column:2084},end:{line:1,column:2092}}],line:1},"14":{loc:{start:{line:1,column:2110},end:{line:1,column:2140}},type:"if",locations:[{start:{line:1,column:2110},end:{line:1,column:2140}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"15":{loc:{start:{line:1,column:2170},end:{line:1,column:2211}},type:"if",locations:[{start:{line:1,column:2170},end:{line:1,column:2211}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"16":{loc:{start:{line:1,column:2173},end:{line:1,column:2201}},type:"binary-expr",locations:[{start:{line:1,column:2173},end:{line:1,column:2191}},{start:{line:1,column:2193},end:{line:1,column:2201}}],line:1},"17":{loc:{start:{line:1,column:2219},end:{line:1,column:2267}},type:"if",locations:[{start:{line:1,column:2219},end:{line:1,column:2267}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"18":{loc:{start:{line:1,column:2222},end:{line:1,column:2257}},type:"binary-expr",locations:[{start:{line:1,column:2222},end:{line:1,column:2243}},{start:{line:1,column:2245},end:{line:1,column:2257}}],line:1},"19":{loc:{start:{line:1,column:2273},end:{line:1,column:2323}},type:"cond-expr",locations:[{start:{line:1,column:2312},end:{line:1,column:2318}},{start:{line:1,column:2319},end:{line:1,column:2323}}],line:1},"20":{loc:{start:{line:1,column:2273},end:{line:1,column:2311}},type:"binary-expr",locations:[{start:{line:1,column:2273},end:{line:1,column:2296}},{start:{line:1,column:2298},end:{line:1,column:2311}}],line:1},"21":{loc:{start:{line:1,column:2359},end:{line:1,column:2392}},type:"cond-expr",locations:[{start:{line:1,column:2382},end:{line:1,column:2389}},{start:{line:1,column:2390},end:{line:1,column:2392}}],line:1},"22":{loc:{start:{line:1,column:2545},end:{line:1,column:2671}},type:"binary-expr",locations:[{start:{line:1,column:2545},end:{line:1,column:2557}},{start:{line:1,column:2559},end:{line:1,column:2671}}],line:1},"23":{loc:{start:{line:1,column:2619},end:{line:1,column:2669}},type:"binary-expr",locations:[{start:{line:1,column:2619},end:{line:1,column:2620}},{start:{line:1,column:2622},end:{line:1,column:2669}}],line:1},"24":{loc:{start:{line:1,column:2701},end:{line:1,column:2734}},type:"cond-expr",locations:[{start:{line:1,column:2724},end:{line:1,column:2731}},{start:{line:1,column:2732},end:{line:1,column:2734}}],line:1},"25":{loc:{start:{line:1,column:2797},end:{line:1,column:2834}},type:"cond-expr",locations:[{start:{line:1,column:2822},end:{line:1,column:2831}},{start:{line:1,column:2832},end:{line:1,column:2834}}],line:1},"26":{loc:{start:{line:1,column:3058},end:{line:1,column:3074}},type:"binary-expr",locations:[{start:{line:1,column:3058},end:{line:1,column:3070}},{start:{line:1,column:3072},end:{line:1,column:3074}}],line:1},"27":{loc:{start:{line:1,column:3175},end:{line:1,column:3191}},type:"binary-expr",locations:[{start:{line:1,column:3175},end:{line:1,column:3187}},{start:{line:1,column:3189},end:{line:1,column:3191}}],line:1},"28":{loc:{start:{line:1,column:3289},end:{line:1,column:3299}},type:"binary-expr",locations:[{start:{line:1,column:3289},end:{line:1,column:3295}},{start:{line:1,column:3297},end:{line:1,column:3299}}],line:1},"29":{loc:{start:{line:1,column:3434},end:{line:1,column:3513}},type:"binary-expr",locations:[{start:{line:1,column:3435},end:{line:1,column:3437}},{start:{line:1,column:3439},end:{line:1,column:3500}},{start:{line:1,column:3503},end:{line:1,column:3513}}],line:1},"30":{loc:{start:{line:1,column:3629},end:{line:1,column:3654}},type:"binary-expr",locations:[{start:{line:1,column:3629},end:{line:1,column:3650}},{start:{line:1,column:3652},end:{line:1,column:3654}}],line:1},"31":{loc:{start:{line:1,column:3657},end:{line:1,column:3685}},type:"binary-expr",locations:[{start:{line:1,column:3657},end:{line:1,column:3681}},{start:{line:1,column:3683},end:{line:1,column:3685}}],line:1},"32":{loc:{start:{line:1,column:3697},end:{line:1,column:3734}},type:"binary-expr",locations:[{start:{line:1,column:3697},end:{line:1,column:3724}},{start:{line:1,column:3727},end:{line:1,column:3733}}],line:1},"33":{loc:{start:{line:1,column:3735},end:{line:1,column:3759}},type:"binary-expr",locations:[{start:{line:1,column:3735},end:{line:1,column:3750}},{start:{line:1,column:3753},end:{line:1,column:3758}}],line:1},"34":{loc:{start:{line:1,column:3760},end:{line:1,column:3794}},type:"binary-expr",locations:[{start:{line:1,column:3760},end:{line:1,column:3785}},{start:{line:1,column:3788},end:{line:1,column:3793}}],line:1},"35":{loc:{start:{line:1,column:3798},end:{line:1,column:3821}},type:"binary-expr",locations:[{start:{line:1,column:3798},end:{line:1,column:3818}},{start:{line:1,column:3820},end:{line:1,column:3821}}],line:1},"36":{loc:{start:{line:1,column:3857},end:{line:1,column:3877}},type:"binary-expr",locations:[{start:{line:1,column:3857},end:{line:1,column:3873}},{start:{line:1,column:3875},end:{line:1,column:3877}}],line:1},"37":{loc:{start:{line:1,column:3880},end:{line:1,column:3900}},type:"binary-expr",locations:[{start:{line:1,column:3880},end:{line:1,column:3896}},{start:{line:1,column:3898},end:{line:1,column:3900}}],line:1},"38":{loc:{start:{line:1,column:3908},end:{line:1,column:3958}},type:"binary-expr",locations:[{start:{line:1,column:3908},end:{line:1,column:3941}},{start:{line:1,column:3943},end:{line:1,column:3958}}],line:1},"39":{loc:{start:{line:1,column:3985},end:{line:1,column:4005}},type:"cond-expr",locations:[{start:{line:1,column:3987},end:{line:1,column:3995}},{start:{line:1,column:3996},end:{line:1,column:4005}}],line:1},"40":{loc:{start:{line:1,column:4046},end:{line:1,column:4050}},type:"binary-expr",locations:[{start:{line:1,column:4046},end:{line:1,column:4047}},{start:{line:1,column:4049},end:{line:1,column:4050}}],line:1}},s:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0},f:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0},b:{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0,0],"6":[0,0],"7":[0,0],"8":[0,0],"9":[0,0],"10":[0,0],"11":[0,0],"12":[0,0],"13":[0,0],"14":[0,0],"15":[0,0],"16":[0,0],"17":[0,0],"18":[0,0],"19":[0,0],"20":[0,0],"21":[0,0],"22":[0,0],"23":[0,0],"24":[0,0],"25":[0,0],"26":[0,0],"27":[0,0],"28":[0,0],"29":[0,0,0],"30":[0,0],"31":[0,0],"32":[0,0],"33":[0,0],"34":[0,0],"35":[0,0],"36":[0,0],"37":[0,0],"38":[0,0],"39":[0,0],"40":[0,0]},inputSourceMap:{version:3,sources:["src/app/features/apartment-monitor/services/apartment-api.service.ts"],sourcesContent:["import { HttpClient } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\nimport { Observable, map, switchMap, take, tap } from 'rxjs';\nimport { API_BASE_URL } from '../../../core/tokens/api-base-url.token';\nimport { Apartment } from '../models/apartment.model';\nimport { DeviceStatus } from '../models/device.model';\nimport { PlantDeviceDto, PlantDto } from '../models/plant-response.model';\nimport { resolveDeviceType } from '../../../shared/models/device-taxonomy';\nimport { InternalAuthService } from '../../../core/services/internal-auth.service';\nimport { WardRealtimeCacheService } from '../../../core/alarm/services/ward-realtime-cache.service';\n\nexport interface ApartmentOption {\n\tid: string;\n\tname: string;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class ApartmentApiService {\n\tprivate readonly http = inject(HttpClient);\n\tprivate readonly baseUrl: string = inject(API_BASE_URL);\n\tprivate readonly authService = inject(InternalAuthService);\n\tprivate readonly wardRealtimeCache = inject(WardRealtimeCacheService);\n\tprivate readonly plantEndpoint = `${this.baseUrl}/plant`;\n\tprivate readonly apartmentsEndpoint = `${this.baseUrl}/apartments`;\n\n\tpublic getCurrentApartment(): Observable {\n\t\treturn this.getAllPlants().pipe(\n\t\t\tmap((plants) => {\n\t\t\t\tconst storedPlantId = this.getActivePlantId();\n\t\t\t\tconst selectedPlant = plants.find((plant) => plant.id === storedPlantId) ?? plants[0];\n\n\t\t\t\tif (!selectedPlant) {\n\t\t\t\t\tthrow new Error('No available plants found');\n\t\t\t\t}\n\n\t\t\t\tthis.setActivePlantId(selectedPlant.id);\n\t\t\t\treturn selectedPlant.id;\n\t\t\t}),\n\t\t\tswitchMap((plantId) => this.loadApartmentViewForPlantId(plantId)),\n\t\t);\n\t}\n\n\tpublic getAvailableApartments(): Observable {\n\t\treturn this.getAllPlants().pipe(\n\t\t\tmap((plants) =>\n\t\t\t\tplants\n\t\t\t\t\t.map((plant) => ({ id: plant.id, name: plant.name }))\n\t\t\t\t\t.sort((left, right) => left.name.localeCompare(right.name))\n\t\t\t),\n\t\t);\n\t}\n\n\tpublic loadApartmentViewForPlantId(plantId: string): Observable {\n\t\tconst query = `?plantid=${encodeURIComponent(plantId)}`;\n\n\t\treturn this.http.get(`${this.plantEndpoint}${query}`).pipe(\n\t\t\tmap((plant) => this.mapPlantToApartment(plant)),\n\t\t);\n\t}\n\n\tpublic getAllPlants(): Observable {\n\t\treturn this.http.get(`${this.plantEndpoint}/all`).pipe(\n\t\t\tmap((response) => this.extractPlants(response)),\n\t\t\ttap((plants) => {\n\t\t\t\tthis.cacheWardIdsForCurrentUser(plants);\n\t\t\t}),\n\t\t);\n\t}\n\n\tpublic enableApartment(apartmentId: string): Observable {\n\t\tconst encodedApartmentId = encodeURIComponent(apartmentId);\n\n\t\treturn this.http.patch(`${this.apartmentsEndpoint}/${encodedApartmentId}/enable`, {});\n\t}\n\n\tpublic disableApartment(apartmentId: string): Observable {\n\t\tconst encodedApartmentId = encodeURIComponent(apartmentId);\n\n\t\treturn this.http.patch(`${this.apartmentsEndpoint}/${encodedApartmentId}/disable`, {});\n\t}\n\n\tpublic setActivePlantId(plantId: string): void {\n\t\tconst storage = globalThis.localStorage as {\n\t\t\tgetItem?: (key: string) => string | null;\n\t\t\tsetItem?: (key: string, value: string) => void;\n\t\t} | undefined;\n\t\tconst previousPlantId =\n\t\t\tstorage && typeof storage.getItem === 'function'\n\t\t\t\t? storage.getItem('activePlantId')\n\t\t\t\t: null;\n\n\t\tif (storage && typeof storage.setItem === 'function') {\n\t\t\tstorage.setItem('activePlantId', plantId);\n\t\t}\n\n\t\tif (previousPlantId === plantId || typeof globalThis.dispatchEvent !== 'function') {\n\t\t\treturn;\n\t\t}\n\n\t\tif (typeof CustomEvent === 'function') {\n\t\t\tglobalThis.dispatchEvent(\n\t\t\t\tnew CustomEvent('active-plant-changed', {\n\t\t\t\t\tdetail: { plantId },\n\t\t\t\t}),\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\tglobalThis.dispatchEvent(new Event('active-plant-changed'));\n\t}\n\n\tprivate getActivePlantId(): string | null {\n\t\tconst storage = globalThis.localStorage as { getItem?: (key: string) => string | null } | undefined;\n\n\t\tif (storage && typeof storage.getItem === 'function') {\n\t\t\treturn storage.getItem('activePlantId');\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tprivate extractPlants(response: unknown): PlantDto[] {\n\t\tconst directArray = this.asPlantArray(response);\n\t\tif (directArray.length > 0) {\n\t\t\treturn directArray;\n\t\t}\n\n\t\tif (typeof response !== 'object' || response === null) {\n\t\t\treturn [];\n\t\t}\n\n\t\tconst wrappedResponse = response as { data?: unknown; plants?: unknown };\n\t\tconst wrappedArray = this.asPlantArray(wrappedResponse.data ?? wrappedResponse.plants);\n\t\treturn wrappedArray;\n\t}\n\n\tprivate asPlantArray(value: unknown): PlantDto[] {\n\t\tif (!Array.isArray(value)) {\n\t\t\treturn [];\n\t\t}\n\n\t\tconst uniqueById = new Map();\n\t\tfor (const candidate of value) {\n\t\t\tif (typeof candidate !== 'object' || candidate === null) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst plant = candidate as PlantDto;\n\t\t\tif (typeof plant.id !== 'string' || !plant.id.trim()) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst normalizedName = typeof plant.name === 'string' && plant.name.trim() ? plant.name : plant.id;\n\t\t\tuniqueById.set(plant.id, {\n\t\t\t\t...plant,\n\t\t\t\tname: normalizedName,\n\t\t\t\trooms: Array.isArray(plant.rooms) ? plant.rooms : [],\n\t\t\t});\n\t\t}\n\n\t\treturn Array.from(uniqueById.values());\n\t}\n\n\tprivate cacheWardIdsForCurrentUser(plants: ReadonlyArray): void {\n\t\tconst wardIds = Array.from(\n\t\t\tnew Set(\n\t\t\t\tplants\n\t\t\t\t\t.map((plant) => plant.wardId)\n\t\t\t\t\t.filter((wardId): wardId is number => Number.isInteger(wardId))\n\t\t\t\t\t.map(String)\n\t\t\t)\n\t\t);\n\n\t\tif (wardIds.length === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.authService\n\t\t\t.getCurrentUser$()\n\t\t\t.pipe(take(1))\n\t\t\t.subscribe((session) => {\n\t\t\t\tif (!session) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.wardRealtimeCache.mergeWardIds(session.userId, wardIds);\n\t\t\t});\n\t}\n\n\tprivate mapPlantToApartment(plant: PlantDto): Apartment {\n\t\tconst rooms = Array.isArray(plant.rooms) ? plant.rooms : [];\n\n\t\treturn {\n\t\t\tid: plant.id,\n\t\t\tname: plant.name,\n\t\t\tisEnabled: true,\n\t\t\trooms: rooms.map((room) => {\n\t\t\t\tconst roomDevices = Array.isArray(room.devices) ? room.devices : [];\n\t\t\t\tconst visibleDevices = this.deduplicateRoomDevices(\n\t\t\t\t\troomDevices.filter((device) => !this.isEnergyMeasureDevice(device.type, device.subType)),\n\t\t\t\t);\n\n\t\t\t\treturn {\n\t\t\t\t\tid: room.id,\n\t\t\t\t\tname: room.name,\n\t\t\t\t\thasActiveAlarm: false,\n\t\t\t\t\tdevices: visibleDevices.map((device) => ({\n\t\t\t\t\t\ttype: resolveDeviceType({\n\t\t\t\t\t\t\trawType: device.type,\n\t\t\t\t\t\t\trawSubType: device.subType,\n\t\t\t\t\t\t\trawName: device.name,\n\t\t\t\t\t\t\tsfeTypes: (device.datapoints ?? []).map((datapoint) => datapoint.sfeType),\n\t\t\t\t\t\t}),\n\t\t\t\t\t\tid: device.id,\n\t\t\t\t\t\tname: device.name,\n\t\t\t\t\t\tstatus: this.mapDeviceStatus(device.type),\n\t\t\t\t\t\tactions: [],\n\t\t\t\t\t\tdatapoints: (device.datapoints ?? []).map((datapoint) => ({\n\t\t\t\t\t\t\tid: datapoint.id,\n\t\t\t\t\t\t\tname: datapoint.name,\n\t\t\t\t\t\t\treadable: datapoint.readable,\n\t\t\t\t\t\t\twritable: datapoint.writable,\n\t\t\t\t\t\t\tvalueType: datapoint.valueType,\n\t\t\t\t\t\t\tenum: datapoint.enum ?? [],\n\t\t\t\t\t\t\tsfeType: datapoint.sfeType,\n\t\t\t\t\t\t})),\n\t\t\t\t\t})),\n\t\t\t\t};\n\t\t\t}),\n\t\t};\n\t}\n\n\tprivate deduplicateRoomDevices(devices: ReadonlyArray): PlantDeviceDto[] {\n\t\tconst byName = new Map();\n\n\t\tfor (const device of devices) {\n\t\t\tconst key = this.normalizeDeviceName(device.name);\n\t\t\tconst current = byName.get(key);\n\n\t\t\tif (!current || this.getDevicePriorityScore(device) > this.getDevicePriorityScore(current)) {\n\t\t\t\tbyName.set(key, device);\n\t\t\t}\n\t\t}\n\n\t\treturn Array.from(byName.values());\n\t}\n\n\tprivate normalizeDeviceName(name: string): string {\n\t\treturn name.trim().toLowerCase();\n\t}\n\n\tprivate getDevicePriorityScore(device: PlantDeviceDto): number {\n\t\tconst normalizedType = device.type?.toUpperCase() ?? '';\n\t\tconst normalizedSubType = device.subType?.toUpperCase() ?? '';\n\n\t\tlet score = 0;\n\n\t\tif (normalizedType.includes('RADARDETECTOR')) {\n\t\t\tscore += 100;\n\t\t}\n\n\t\tif (normalizedSubType === 'SF_ACCESS') {\n\t\t\tscore += 60;\n\t\t}\n\n\t\tif (normalizedType === 'SS_AUTOMATION_ONOFF') {\n\t\t\tscore -= 20;\n\t\t}\n\n\t\tscore += device.datapoints?.length ?? 0;\n\t\treturn score;\n\t}\n\n\tprivate isEnergyMeasureDevice(\n\t\trawType: string | undefined,\n\t\trawSubType: string | undefined,\n\t): boolean {\n\t\tconst normalizedType = rawType?.toUpperCase() ?? '';\n\t\tconst normalizedSubType = rawSubType?.toUpperCase() ?? '';\n\n\t\treturn (\n\t\t\tnormalizedType.startsWith('SS_ENERGY_MEASURE') ||\n\t\t\tnormalizedSubType === 'SF_ENERGY'\n\t\t);\n\t}\n\n\tprivate mapDeviceStatus(rawType: string | undefined): DeviceStatus {\n\t\treturn rawType ? 'ONLINE' : 'UNKNOWN';\n\t}\n}"],mappings:"iSAiBA,IAAaA,GAAmB,IAAA,CAA1B,MAAOA,CAAmB,CACdC,KAAOC,EAAOC,CAAU,EACxBC,QAAkBF,EAAOG,CAAY,EACrCC,YAAcJ,EAAOK,CAAmB,EACxCC,kBAAoBN,EAAOO,CAAwB,EACnDC,cAAgB,GAAG,KAAKN,OAAO,SAC/BO,mBAAqB,GAAG,KAAKP,OAAO,cAE9CQ,qBAAmB,CACzB,OAAO,KAAKC,aAAY,EAAGC,KAC1BC,EAAKC,GAAU,CACd,IAAMC,EAAgB,KAAKC,iBAAgB,EACrCC,EAAgBH,EAAOI,KAAMC,GAAUA,EAAMC,KAAOL,CAAa,GAAKD,EAAO,CAAC,EAEpF,GAAI,CAACG,EACJ,MAAM,IAAII,MAAM,2BAA2B,EAG5C,YAAKC,iBAAiBL,EAAcG,EAAE,EAC/BH,EAAcG,EACtB,CAAC,EACDG,EAAWC,GAAY,KAAKC,4BAA4BD,CAAO,CAAC,CAAC,CAEnE,CAEOE,wBAAsB,CAC5B,OAAO,KAAKf,aAAY,EAAGC,KAC1BC,EAAKC,GACJA,EACED,IAAKM,IAAW,CAAEC,GAAID,EAAMC,GAAIO,KAAMR,EAAMQ,IAAI,EAAG,EACnDC,KAAK,CAACC,EAAMC,IAAUD,EAAKF,KAAKI,cAAcD,EAAMH,IAAI,CAAC,CAAC,CAC5D,CAEH,CAEOF,4BAA4BD,EAAe,CACjD,IAAMQ,EAAQ,YAAYC,mBAAmBT,CAAO,CAAC,GAErD,OAAO,KAAKzB,KAAKmC,IAAc,GAAG,KAAK1B,aAAa,GAAGwB,CAAK,EAAE,EAAEpB,KAC/DC,EAAKM,GAAU,KAAKgB,oBAAoBhB,CAAK,CAAC,CAAC,CAEjD,CAEOR,cAAY,CAClB,OAAO,KAAKZ,KAAKmC,IAAa,GAAG,KAAK1B,aAAa,MAAM,EAAEI,KAC1DC,EAAKuB,GAAa,KAAKC,cAAcD,CAAQ,CAAC,EAC9CE,EAAKxB,GAAU,CACd,KAAKyB,2BAA2BzB,CAAM,CACvC,CAAC,CAAC,CAEJ,CAEO0B,gBAAgBC,EAAmB,CACzC,IAAMC,EAAqBT,mBAAmBQ,CAAW,EAEzD,OAAO,KAAK1C,KAAK4C,MAAY,GAAG,KAAKlC,kBAAkB,IAAIiC,CAAkB,UAAW,CAAA,CAAE,CAC3F,CAEOE,iBAAiBH,EAAmB,CAC1C,IAAMC,EAAqBT,mBAAmBQ,CAAW,EAEzD,OAAO,KAAK1C,KAAK4C,MAAY,GAAG,KAAKlC,kBAAkB,IAAIiC,CAAkB,WAAY,CAAA,CAAE,CAC5F,CAEOpB,iBAAiBE,EAAe,CACtC,IAAMqB,EAAUC,WAAWC,aAIrBC,EACLH,GAAW,OAAOA,EAAQI,SAAY,WACnCJ,EAAQI,QAAQ,eAAe,EAC/B,KAMJ,GAJIJ,GAAW,OAAOA,EAAQK,SAAY,YACzCL,EAAQK,QAAQ,gBAAiB1B,CAAO,EAGrCwB,EAAAA,IAAoBxB,GAAW,OAAOsB,WAAWK,eAAkB,YAIvE,IAAI,OAAOC,aAAgB,WAAY,CACtCN,WAAWK,cACV,IAAIC,YAAY,uBAAwB,CACvCC,OAAQ,CAAE7B,QAAAA,CAAO,EACjB,CAAC,EAEH,MACD,CAEAsB,WAAWK,cAAc,IAAIG,MAAM,sBAAsB,CAAC,EAC3D,CAEQtC,kBAAgB,CACvB,IAAM6B,EAAUC,WAAWC,aAE3B,OAAIF,GAAW,OAAOA,EAAQI,SAAY,WAClCJ,EAAQI,QAAQ,eAAe,EAGhC,IACR,CAEQZ,cAAcD,EAAiB,CACtC,IAAMmB,EAAc,KAAKC,aAAapB,CAAQ,EAC9C,GAAImB,EAAYE,OAAS,EACxB,OAAOF,EAGR,GAAI,OAAOnB,GAAa,UAAYA,IAAa,KAChD,MAAO,CAAA,EAGR,IAAMsB,EAAkBtB,EAExB,OADqB,KAAKoB,aAAaE,EAAgBC,MAAQD,EAAgB5C,MAAM,CAEtF,CAEQ0C,aAAaI,EAAc,CAClC,GAAI,CAACC,MAAMC,QAAQF,CAAK,EACvB,MAAO,CAAA,EAGR,IAAMG,EAAa,IAAIC,IACvB,QAAWC,KAAaL,EAAO,CAC9B,GAAI,OAAOK,GAAc,UAAYA,IAAc,KAClD,SAGD,IAAM9C,EAAQ8C,EACd,GAAI,OAAO9C,EAAMC,IAAO,UAAY,CAACD,EAAMC,GAAG8C,KAAI,EACjD,SAGD,IAAMC,EAAiB,OAAOhD,EAAMQ,MAAS,UAAYR,EAAMQ,KAAKuC,KAAI,EAAK/C,EAAMQ,KAAOR,EAAMC,GAChG2C,EAAWK,IAAIjD,EAAMC,GAAIiD,EAAAC,EAAA,GACrBnD,GADqB,CAExBQ,KAAMwC,EACNI,MAAOV,MAAMC,QAAQ3C,EAAMoD,KAAK,EAAIpD,EAAMoD,MAAQ,CAAA,GAClD,CACF,CAEA,OAAOV,MAAMW,KAAKT,EAAWU,OAAM,CAAE,CACtC,CAEQlC,2BAA2BzB,EAA+B,CACjE,IAAM4D,EAAUb,MAAMW,KACrB,IAAIG,IACH7D,EACED,IAAKM,GAAUA,EAAMyD,MAAM,EAC3BC,OAAQD,GAA6BE,OAAOC,UAAUH,CAAM,CAAC,EAC7D/D,IAAImE,MAAM,CAAC,CACb,EAGEN,EAAQjB,SAAW,GAIvB,KAAKrD,YACH6E,gBAAe,EACfrE,KAAKsE,EAAK,CAAC,CAAC,EACZC,UAAWC,GAAW,CACjBA,GAIL,KAAK9E,kBAAkB+E,aAAaD,EAAQE,OAAQZ,CAAO,CAC5D,CAAC,CACH,CAEQvC,oBAAoBhB,EAAe,CAC1C,IAAMoD,EAAQV,MAAMC,QAAQ3C,EAAMoD,KAAK,EAAIpD,EAAMoD,MAAQ,CAAA,EAEzD,MAAO,CACNnD,GAAID,EAAMC,GACVO,KAAMR,EAAMQ,KACZ4D,UAAW,GACXhB,MAAOA,EAAM1D,IAAK2E,GAAQ,CACzB,IAAMC,EAAc5B,MAAMC,QAAQ0B,EAAKE,OAAO,EAAIF,EAAKE,QAAU,CAAA,EAC3DC,EAAiB,KAAKC,uBAC3BH,EAAYZ,OAAQgB,GAAW,CAAC,KAAKC,sBAAsBD,EAAOE,KAAMF,EAAOG,OAAO,CAAC,CAAC,EAGzF,MAAO,CACN5E,GAAIoE,EAAKpE,GACTO,KAAM6D,EAAK7D,KACXsE,eAAgB,GAChBP,QAASC,EAAe9E,IAAKgF,IAAY,CACxCE,KAAMG,EAAkB,CACvBC,QAASN,EAAOE,KAChBK,WAAYP,EAAOG,QACnBK,QAASR,EAAOlE,KAChB2E,UAAWT,EAAOU,YAAc,CAAA,GAAI1F,IAAK2F,GAAcA,EAAUC,OAAO,EACxE,EACDrF,GAAIyE,EAAOzE,GACXO,KAAMkE,EAAOlE,KACb+E,OAAQ,KAAKC,gBAAgBd,EAAOE,IAAI,EACxCa,QAAS,CAAA,EACTL,YAAaV,EAAOU,YAAc,CAAA,GAAI1F,IAAK2F,IAAe,CACzDpF,GAAIoF,EAAUpF,GACdO,KAAM6E,EAAU7E,KAChBkF,SAAUL,EAAUK,SACpBC,SAAUN,EAAUM,SACpBC,UAAWP,EAAUO,UACrBC,KAAMR,EAAUQ,MAAQ,CAAA,EACxBP,QAASD,EAAUC,SAClB,GACD,EAEJ,CAAC,EAEH,CAEQb,uBAAuBF,EAAsC,CACpE,IAAMuB,EAAS,IAAIjD,IAEnB,QAAW6B,KAAUH,EAAS,CAC7B,IAAMwB,EAAM,KAAKC,oBAAoBtB,EAAOlE,IAAI,EAC1CyF,EAAUH,EAAO/E,IAAIgF,CAAG,GAE1B,CAACE,GAAW,KAAKC,uBAAuBxB,CAAM,EAAI,KAAKwB,uBAAuBD,CAAO,IACxFH,EAAO7C,IAAI8C,EAAKrB,CAAM,CAExB,CAEA,OAAOhC,MAAMW,KAAKyC,EAAOxC,OAAM,CAAE,CAClC,CAEQ0C,oBAAoBxF,EAAY,CACvC,OAAOA,EAAKuC,KAAI,EAAGoD,YAAW,CAC/B,CAEQD,uBAAuBxB,EAAsB,CACpD,IAAM0B,EAAiB1B,EAAOE,MAAMyB,YAAW,GAAM,GAC/CC,EAAoB5B,EAAOG,SAASwB,YAAW,GAAM,GAEvDE,EAAQ,EAEZ,OAAIH,EAAeI,SAAS,eAAe,IAC1CD,GAAS,KAGND,IAAsB,cACzBC,GAAS,IAGNH,IAAmB,wBACtBG,GAAS,IAGVA,GAAS7B,EAAOU,YAAY9C,QAAU,EAC/BiE,CACR,CAEQ5B,sBACPK,EACAC,EAA8B,CAE9B,IAAMmB,EAAiBpB,GAASqB,YAAW,GAAM,GAC3CC,EAAoBrB,GAAYoB,YAAW,GAAM,GAEvD,OACCD,EAAeK,WAAW,mBAAmB,GAC7CH,IAAsB,WAExB,CAEQd,gBAAgBR,EAA2B,CAClD,OAAOA,EAAU,SAAW,SAC7B,4CA/QYrG,EAAmB,6BAAnBA,EAAmB+H,QAAnB/H,EAAmBgI,UAAAC,WADN,MAAM,CAAA,SACnBjI,CAAmB,GAAA",names:["ApartmentApiService","http","inject","HttpClient","baseUrl","API_BASE_URL","authService","InternalAuthService","wardRealtimeCache","WardRealtimeCacheService","plantEndpoint","apartmentsEndpoint","getCurrentApartment","getAllPlants","pipe","map","plants","storedPlantId","getActivePlantId","selectedPlant","find","plant","id","Error","setActivePlantId","switchMap","plantId","loadApartmentViewForPlantId","getAvailableApartments","name","sort","left","right","localeCompare","query","encodeURIComponent","get","mapPlantToApartment","response","extractPlants","tap","cacheWardIdsForCurrentUser","enableApartment","apartmentId","encodedApartmentId","patch","disableApartment","storage","globalThis","localStorage","previousPlantId","getItem","setItem","dispatchEvent","CustomEvent","detail","Event","directArray","asPlantArray","length","wrappedResponse","data","value","Array","isArray","uniqueById","Map","candidate","trim","normalizedName","set","__spreadProps","__spreadValues","rooms","from","values","wardIds","Set","wardId","filter","Number","isInteger","String","getCurrentUser$","take","subscribe","session","mergeWardIds","userId","isEnabled","room","roomDevices","devices","visibleDevices","deduplicateRoomDevices","device","isEnergyMeasureDevice","type","subType","hasActiveAlarm","resolveDeviceType","rawType","rawSubType","rawName","sfeTypes","datapoints","datapoint","sfeType","status","mapDeviceStatus","actions","readable","writable","valueType","enum","byName","key","normalizeDeviceName","current","getDevicePriorityScore","toLowerCase","normalizedType","toUpperCase","normalizedSubType","score","includes","startsWith","factory","\u0275fac","providedIn"]},_coverageSchema:"1a1c01bbd47fc00a2c39e90264f33305004495a9",hash:"8f63a2cefc726655d17e6b67050d90bfebc43f0e"};var coverage=global[gcv]||(global[gcv]={});if(!coverage[path]||coverage[path].hash!==hash){coverage[path]=coverageData;}var actualCoverage=coverage[path];{// @ts-ignore +cov_1u6c7f19ma=function(){return actualCoverage;};}return actualCoverage;}cov_1u6c7f19ma();import{a as I}from"./chunk-HTKPMSJ5.js";import{a as v}from"./chunk-EZ7WFT6U.js";import{b as g}from"./chunk-65RKWSY3.js";import{b as y,e as A}from"./chunk-2S5V5XEE.js";import{F as u,H as h,L as f,Q as l,m as p,y as d}from"./chunk-RYTNMYZW.js";import{a as c,b as m}from"./chunk-VCZGUBMY.js";var N=(cov_1u6c7f19ma().s[0]++,(()=>{cov_1u6c7f19ma().f[0]++;class o{http=(cov_1u6c7f19ma().s[1]++,l(y));baseUrl=(cov_1u6c7f19ma().s[2]++,l(A));authService=(cov_1u6c7f19ma().s[3]++,l(g));wardRealtimeCache=(cov_1u6c7f19ma().s[4]++,l(v));plantEndpoint=(cov_1u6c7f19ma().s[5]++,`${this.baseUrl}/plant`);apartmentsEndpoint=(cov_1u6c7f19ma().s[6]++,`${this.baseUrl}/apartments`);getCurrentApartment(){cov_1u6c7f19ma().f[1]++;cov_1u6c7f19ma().s[7]++;return this.getAllPlants().pipe(p(e=>{cov_1u6c7f19ma().f[2]++;let t=(cov_1u6c7f19ma().s[8]++,this.getActivePlantId()),r=(cov_1u6c7f19ma().s[9]++,(cov_1u6c7f19ma().b[0][0]++,e.find(a=>{cov_1u6c7f19ma().f[3]++;cov_1u6c7f19ma().s[10]++;return a.id===t;}))??(cov_1u6c7f19ma().b[0][1]++,e[0]));cov_1u6c7f19ma().s[11]++;if(!r){cov_1u6c7f19ma().b[1][0]++;cov_1u6c7f19ma().s[12]++;throw new Error("No available plants found");}else{cov_1u6c7f19ma().b[1][1]++;}cov_1u6c7f19ma().s[13]++;return this.setActivePlantId(r.id),r.id;}),u(e=>{cov_1u6c7f19ma().f[4]++;cov_1u6c7f19ma().s[14]++;return this.loadApartmentViewForPlantId(e);}));}getAvailableApartments(){cov_1u6c7f19ma().f[5]++;cov_1u6c7f19ma().s[15]++;return this.getAllPlants().pipe(p(e=>{cov_1u6c7f19ma().f[6]++;cov_1u6c7f19ma().s[16]++;return e.map(t=>{cov_1u6c7f19ma().f[7]++;cov_1u6c7f19ma().s[17]++;return{id:t.id,name:t.name};}).sort((t,r)=>{cov_1u6c7f19ma().f[8]++;cov_1u6c7f19ma().s[18]++;return t.name.localeCompare(r.name);});}));}loadApartmentViewForPlantId(e){cov_1u6c7f19ma().f[9]++;let t=(cov_1u6c7f19ma().s[19]++,`?plantid=${encodeURIComponent(e)}`);cov_1u6c7f19ma().s[20]++;return this.http.get(`${this.plantEndpoint}${t}`).pipe(p(r=>{cov_1u6c7f19ma().f[10]++;cov_1u6c7f19ma().s[21]++;return this.mapPlantToApartment(r);}));}getAllPlants(){cov_1u6c7f19ma().f[11]++;cov_1u6c7f19ma().s[22]++;return this.http.get(`${this.plantEndpoint}/all`).pipe(p(e=>{cov_1u6c7f19ma().f[12]++;cov_1u6c7f19ma().s[23]++;return this.extractPlants(e);}),h(e=>{cov_1u6c7f19ma().f[13]++;cov_1u6c7f19ma().s[24]++;this.cacheWardIdsForCurrentUser(e);}));}enableApartment(e){cov_1u6c7f19ma().f[14]++;let t=(cov_1u6c7f19ma().s[25]++,encodeURIComponent(e));cov_1u6c7f19ma().s[26]++;return this.http.patch(`${this.apartmentsEndpoint}/${t}/enable`,{});}disableApartment(e){cov_1u6c7f19ma().f[15]++;let t=(cov_1u6c7f19ma().s[27]++,encodeURIComponent(e));cov_1u6c7f19ma().s[28]++;return this.http.patch(`${this.apartmentsEndpoint}/${t}/disable`,{});}setActivePlantId(e){cov_1u6c7f19ma().f[16]++;let t=(cov_1u6c7f19ma().s[29]++,globalThis.localStorage),r=(cov_1u6c7f19ma().s[30]++,(cov_1u6c7f19ma().b[3][0]++,t)&&(cov_1u6c7f19ma().b[3][1]++,typeof t.getItem=="function")?(cov_1u6c7f19ma().b[2][0]++,t.getItem("activePlantId")):(cov_1u6c7f19ma().b[2][1]++,null));cov_1u6c7f19ma().s[31]++;if((cov_1u6c7f19ma().b[5][0]++,t)&&(cov_1u6c7f19ma().b[5][1]++,typeof t.setItem=="function")&&(cov_1u6c7f19ma().b[5][2]++,t.setItem("activePlantId",e)),!((cov_1u6c7f19ma().b[6][0]++,r===e)||(cov_1u6c7f19ma().b[6][1]++,typeof globalThis.dispatchEvent!="function"))){cov_1u6c7f19ma().b[4][0]++;cov_1u6c7f19ma().s[32]++;if(typeof CustomEvent=="function"){cov_1u6c7f19ma().b[7][0]++;cov_1u6c7f19ma().s[33]++;globalThis.dispatchEvent(new CustomEvent("active-plant-changed",{detail:{plantId:e}}));cov_1u6c7f19ma().s[34]++;return;}else{cov_1u6c7f19ma().b[7][1]++;}cov_1u6c7f19ma().s[35]++;globalThis.dispatchEvent(new Event("active-plant-changed"));}else{cov_1u6c7f19ma().b[4][1]++;}}getActivePlantId(){cov_1u6c7f19ma().f[17]++;let e=(cov_1u6c7f19ma().s[36]++,globalThis.localStorage);cov_1u6c7f19ma().s[37]++;return(cov_1u6c7f19ma().b[9][0]++,e)&&(cov_1u6c7f19ma().b[9][1]++,typeof e.getItem=="function")?(cov_1u6c7f19ma().b[8][0]++,e.getItem("activePlantId")):(cov_1u6c7f19ma().b[8][1]++,null);}extractPlants(e){cov_1u6c7f19ma().f[18]++;let t=(cov_1u6c7f19ma().s[38]++,this.asPlantArray(e));cov_1u6c7f19ma().s[39]++;if(t.length>0){cov_1u6c7f19ma().b[10][0]++;cov_1u6c7f19ma().s[40]++;return t;}else{cov_1u6c7f19ma().b[10][1]++;}cov_1u6c7f19ma().s[41]++;if((cov_1u6c7f19ma().b[12][0]++,typeof e!="object")||(cov_1u6c7f19ma().b[12][1]++,e===null)){cov_1u6c7f19ma().b[11][0]++;cov_1u6c7f19ma().s[42]++;return[];}else{cov_1u6c7f19ma().b[11][1]++;}let r=(cov_1u6c7f19ma().s[43]++,e);cov_1u6c7f19ma().s[44]++;return this.asPlantArray((cov_1u6c7f19ma().b[13][0]++,r.data)??(cov_1u6c7f19ma().b[13][1]++,r.plants));}asPlantArray(e){cov_1u6c7f19ma().f[19]++;cov_1u6c7f19ma().s[45]++;if(!Array.isArray(e)){cov_1u6c7f19ma().b[14][0]++;cov_1u6c7f19ma().s[46]++;return[];}else{cov_1u6c7f19ma().b[14][1]++;}let t=(cov_1u6c7f19ma().s[47]++,new Map());cov_1u6c7f19ma().s[48]++;for(let r of e){cov_1u6c7f19ma().s[49]++;if((cov_1u6c7f19ma().b[16][0]++,typeof r!="object")||(cov_1u6c7f19ma().b[16][1]++,r===null)){cov_1u6c7f19ma().b[15][0]++;cov_1u6c7f19ma().s[50]++;continue;}else{cov_1u6c7f19ma().b[15][1]++;}let a=(cov_1u6c7f19ma().s[51]++,r);cov_1u6c7f19ma().s[52]++;if((cov_1u6c7f19ma().b[18][0]++,typeof a.id!="string")||(cov_1u6c7f19ma().b[18][1]++,!a.id.trim())){cov_1u6c7f19ma().b[17][0]++;cov_1u6c7f19ma().s[53]++;continue;}else{cov_1u6c7f19ma().b[17][1]++;}let s=(cov_1u6c7f19ma().s[54]++,(cov_1u6c7f19ma().b[20][0]++,typeof a.name=="string")&&(cov_1u6c7f19ma().b[20][1]++,a.name.trim())?(cov_1u6c7f19ma().b[19][0]++,a.name):(cov_1u6c7f19ma().b[19][1]++,a.id));cov_1u6c7f19ma().s[55]++;t.set(a.id,m(c({},a),{name:s,rooms:Array.isArray(a.rooms)?(cov_1u6c7f19ma().b[21][0]++,a.rooms):(cov_1u6c7f19ma().b[21][1]++,[])}));}cov_1u6c7f19ma().s[56]++;return Array.from(t.values());}cacheWardIdsForCurrentUser(e){cov_1u6c7f19ma().f[20]++;let t=(cov_1u6c7f19ma().s[57]++,Array.from(new Set(e.map(r=>{cov_1u6c7f19ma().f[21]++;cov_1u6c7f19ma().s[58]++;return r.wardId;}).filter(r=>{cov_1u6c7f19ma().f[22]++;cov_1u6c7f19ma().s[59]++;return Number.isInteger(r);}).map(String))));cov_1u6c7f19ma().s[60]++;(cov_1u6c7f19ma().b[22][0]++,t.length!==0)&&(cov_1u6c7f19ma().b[22][1]++,this.authService.getCurrentUser$().pipe(d(1)).subscribe(r=>{cov_1u6c7f19ma().f[23]++;cov_1u6c7f19ma().s[61]++;(cov_1u6c7f19ma().b[23][0]++,r)&&(cov_1u6c7f19ma().b[23][1]++,this.wardRealtimeCache.mergeWardIds(r.userId,t));}));}mapPlantToApartment(e){cov_1u6c7f19ma().f[24]++;let t=(cov_1u6c7f19ma().s[62]++,Array.isArray(e.rooms)?(cov_1u6c7f19ma().b[24][0]++,e.rooms):(cov_1u6c7f19ma().b[24][1]++,[]));cov_1u6c7f19ma().s[63]++;return{id:e.id,name:e.name,isEnabled:!0,rooms:t.map(r=>{cov_1u6c7f19ma().f[25]++;let a=(cov_1u6c7f19ma().s[64]++,Array.isArray(r.devices)?(cov_1u6c7f19ma().b[25][0]++,r.devices):(cov_1u6c7f19ma().b[25][1]++,[])),s=(cov_1u6c7f19ma().s[65]++,this.deduplicateRoomDevices(a.filter(n=>{cov_1u6c7f19ma().f[26]++;cov_1u6c7f19ma().s[66]++;return!this.isEnergyMeasureDevice(n.type,n.subType);})));cov_1u6c7f19ma().s[67]++;return{id:r.id,name:r.name,hasActiveAlarm:!1,devices:s.map(n=>{cov_1u6c7f19ma().f[27]++;cov_1u6c7f19ma().s[68]++;return{type:I({rawType:n.type,rawSubType:n.subType,rawName:n.name,sfeTypes:((cov_1u6c7f19ma().b[26][0]++,n.datapoints)??(cov_1u6c7f19ma().b[26][1]++,[])).map(i=>{cov_1u6c7f19ma().f[28]++;cov_1u6c7f19ma().s[69]++;return i.sfeType;})}),id:n.id,name:n.name,status:this.mapDeviceStatus(n.type),actions:[],datapoints:((cov_1u6c7f19ma().b[27][0]++,n.datapoints)??(cov_1u6c7f19ma().b[27][1]++,[])).map(i=>{cov_1u6c7f19ma().f[29]++;cov_1u6c7f19ma().s[70]++;return{id:i.id,name:i.name,readable:i.readable,writable:i.writable,valueType:i.valueType,enum:(cov_1u6c7f19ma().b[28][0]++,i.enum)??(cov_1u6c7f19ma().b[28][1]++,[]),sfeType:i.sfeType};})};})};})};}deduplicateRoomDevices(e){cov_1u6c7f19ma().f[30]++;let t=(cov_1u6c7f19ma().s[71]++,new Map());cov_1u6c7f19ma().s[72]++;for(let r of e){let a=(cov_1u6c7f19ma().s[73]++,this.normalizeDeviceName(r.name)),s=(cov_1u6c7f19ma().s[74]++,t.get(a));cov_1u6c7f19ma().s[75]++;((cov_1u6c7f19ma().b[29][0]++,!s)||(cov_1u6c7f19ma().b[29][1]++,this.getDevicePriorityScore(r)>this.getDevicePriorityScore(s)))&&(cov_1u6c7f19ma().b[29][2]++,t.set(a,r));}cov_1u6c7f19ma().s[76]++;return Array.from(t.values());}normalizeDeviceName(e){cov_1u6c7f19ma().f[31]++;cov_1u6c7f19ma().s[77]++;return e.trim().toLowerCase();}getDevicePriorityScore(e){cov_1u6c7f19ma().f[32]++;let t=(cov_1u6c7f19ma().s[78]++,(cov_1u6c7f19ma().b[30][0]++,e.type?.toUpperCase())??(cov_1u6c7f19ma().b[30][1]++,"")),r=(cov_1u6c7f19ma().s[79]++,(cov_1u6c7f19ma().b[31][0]++,e.subType?.toUpperCase())??(cov_1u6c7f19ma().b[31][1]++,"")),a=(cov_1u6c7f19ma().s[80]++,0);cov_1u6c7f19ma().s[81]++;return(cov_1u6c7f19ma().b[32][0]++,t.includes("RADARDETECTOR"))&&(cov_1u6c7f19ma().b[32][1]++,a+=100),(cov_1u6c7f19ma().b[33][0]++,r==="SF_ACCESS")&&(cov_1u6c7f19ma().b[33][1]++,a+=60),(cov_1u6c7f19ma().b[34][0]++,t==="SS_AUTOMATION_ONOFF")&&(cov_1u6c7f19ma().b[34][1]++,a-=20),a+=(cov_1u6c7f19ma().b[35][0]++,e.datapoints?.length)??(cov_1u6c7f19ma().b[35][1]++,0),a;}isEnergyMeasureDevice(e,t){cov_1u6c7f19ma().f[33]++;let r=(cov_1u6c7f19ma().s[82]++,(cov_1u6c7f19ma().b[36][0]++,e?.toUpperCase())??(cov_1u6c7f19ma().b[36][1]++,"")),a=(cov_1u6c7f19ma().s[83]++,(cov_1u6c7f19ma().b[37][0]++,t?.toUpperCase())??(cov_1u6c7f19ma().b[37][1]++,""));cov_1u6c7f19ma().s[84]++;return(cov_1u6c7f19ma().b[38][0]++,r.startsWith("SS_ENERGY_MEASURE"))||(cov_1u6c7f19ma().b[38][1]++,a==="SF_ENERGY");}mapDeviceStatus(e){cov_1u6c7f19ma().f[34]++;cov_1u6c7f19ma().s[85]++;return e?(cov_1u6c7f19ma().b[39][0]++,"ONLINE"):(cov_1u6c7f19ma().b[39][1]++,"UNKNOWN");}static ɵfac=(cov_1u6c7f19ma().s[86]++,function(t){cov_1u6c7f19ma().f[35]++;cov_1u6c7f19ma().s[87]++;return new((cov_1u6c7f19ma().b[40][0]++,t)||(cov_1u6c7f19ma().b[40][1]++,o))();});static ɵprov=(cov_1u6c7f19ma().s[88]++,f({token:o,factory:o.ɵfac,providedIn:"root"}));}cov_1u6c7f19ma().s[89]++;return o;})());export{N as a};//# sourceMappingURL=chunk-QFTDGRKT.js.map +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJOIiwiY292XzF1NmM3ZjE5bWEiLCJzIiwiZiIsIm8iLCJodHRwIiwibCIsInkiLCJiYXNlVXJsIiwiQSIsImF1dGhTZXJ2aWNlIiwiZyIsIndhcmRSZWFsdGltZUNhY2hlIiwidiIsInBsYW50RW5kcG9pbnQiLCJhcGFydG1lbnRzRW5kcG9pbnQiLCJnZXRDdXJyZW50QXBhcnRtZW50IiwiZ2V0QWxsUGxhbnRzIiwicGlwZSIsInAiLCJlIiwidCIsImdldEFjdGl2ZVBsYW50SWQiLCJyIiwiYiIsImZpbmQiLCJhIiwiaWQiLCJFcnJvciIsInNldEFjdGl2ZVBsYW50SWQiLCJ1IiwibG9hZEFwYXJ0bWVudFZpZXdGb3JQbGFudElkIiwiZ2V0QXZhaWxhYmxlQXBhcnRtZW50cyIsIm1hcCIsIm5hbWUiLCJzb3J0IiwibG9jYWxlQ29tcGFyZSIsImVuY29kZVVSSUNvbXBvbmVudCIsImdldCIsIm1hcFBsYW50VG9BcGFydG1lbnQiLCJleHRyYWN0UGxhbnRzIiwiaCIsImNhY2hlV2FyZElkc0ZvckN1cnJlbnRVc2VyIiwiZW5hYmxlQXBhcnRtZW50IiwicGF0Y2giLCJkaXNhYmxlQXBhcnRtZW50IiwiZ2xvYmFsVGhpcyIsImxvY2FsU3RvcmFnZSIsImdldEl0ZW0iLCJzZXRJdGVtIiwiZGlzcGF0Y2hFdmVudCIsIkN1c3RvbUV2ZW50IiwiZGV0YWlsIiwicGxhbnRJZCIsIkV2ZW50IiwiYXNQbGFudEFycmF5IiwibGVuZ3RoIiwiZGF0YSIsInBsYW50cyIsIkFycmF5IiwiaXNBcnJheSIsIk1hcCIsInRyaW0iLCJzZXQiLCJtIiwiYyIsInJvb21zIiwiZnJvbSIsInZhbHVlcyIsIlNldCIsIndhcmRJZCIsImZpbHRlciIsIk51bWJlciIsImlzSW50ZWdlciIsIlN0cmluZyIsImdldEN1cnJlbnRVc2VyJCIsImQiLCJzdWJzY3JpYmUiLCJtZXJnZVdhcmRJZHMiLCJ1c2VySWQiLCJpc0VuYWJsZWQiLCJkZXZpY2VzIiwiZGVkdXBsaWNhdGVSb29tRGV2aWNlcyIsIm4iLCJpc0VuZXJneU1lYXN1cmVEZXZpY2UiLCJ0eXBlIiwic3ViVHlwZSIsImhhc0FjdGl2ZUFsYXJtIiwiSSIsInJhd1R5cGUiLCJyYXdTdWJUeXBlIiwicmF3TmFtZSIsInNmZVR5cGVzIiwiZGF0YXBvaW50cyIsImkiLCJzZmVUeXBlIiwic3RhdHVzIiwibWFwRGV2aWNlU3RhdHVzIiwiYWN0aW9ucyIsInJlYWRhYmxlIiwid3JpdGFibGUiLCJ2YWx1ZVR5cGUiLCJlbnVtIiwibm9ybWFsaXplRGV2aWNlTmFtZSIsImdldERldmljZVByaW9yaXR5U2NvcmUiLCJ0b0xvd2VyQ2FzZSIsInRvVXBwZXJDYXNlIiwiaW5jbHVkZXMiLCJzdGFydHNXaXRoIiwiybVmYWMiLCLJtXByb3YiLCJ0b2tlbiIsImZhY3RvcnkiLCJwcm92aWRlZEluIl0sInNvdXJjZXMiOlsic3JjL2FwcC9mZWF0dXJlcy9hcGFydG1lbnQtbW9uaXRvci9zZXJ2aWNlcy9hcGFydG1lbnQtYXBpLnNlcnZpY2UudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IEluamVjdGFibGUsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgbWFwLCBzd2l0Y2hNYXAsIHRha2UsIHRhcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQVBJX0JBU0VfVVJMIH0gZnJvbSAnLi4vLi4vLi4vY29yZS90b2tlbnMvYXBpLWJhc2UtdXJsLnRva2VuJztcbmltcG9ydCB7IEFwYXJ0bWVudCB9IGZyb20gJy4uL21vZGVscy9hcGFydG1lbnQubW9kZWwnO1xuaW1wb3J0IHsgRGV2aWNlU3RhdHVzIH0gZnJvbSAnLi4vbW9kZWxzL2RldmljZS5tb2RlbCc7XG5pbXBvcnQgeyBQbGFudERldmljZUR0bywgUGxhbnREdG8gfSBmcm9tICcuLi9tb2RlbHMvcGxhbnQtcmVzcG9uc2UubW9kZWwnO1xuaW1wb3J0IHsgcmVzb2x2ZURldmljZVR5cGUgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvbW9kZWxzL2RldmljZS10YXhvbm9teSc7XG5pbXBvcnQgeyBJbnRlcm5hbEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlcy9pbnRlcm5hbC1hdXRoLnNlcnZpY2UnO1xuaW1wb3J0IHsgV2FyZFJlYWx0aW1lQ2FjaGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9hbGFybS9zZXJ2aWNlcy93YXJkLXJlYWx0aW1lLWNhY2hlLnNlcnZpY2UnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFwYXJ0bWVudE9wdGlvbiB7XG5cdGlkOiBzdHJpbmc7XG5cdG5hbWU6IHN0cmluZztcbn1cblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBBcGFydG1lbnRBcGlTZXJ2aWNlIHtcblx0cHJpdmF0ZSByZWFkb25seSBodHRwID0gaW5qZWN0KEh0dHBDbGllbnQpO1xuXHRwcml2YXRlIHJlYWRvbmx5IGJhc2VVcmw6IHN0cmluZyA9IGluamVjdChBUElfQkFTRV9VUkwpO1xuXHRwcml2YXRlIHJlYWRvbmx5IGF1dGhTZXJ2aWNlID0gaW5qZWN0KEludGVybmFsQXV0aFNlcnZpY2UpO1xuXHRwcml2YXRlIHJlYWRvbmx5IHdhcmRSZWFsdGltZUNhY2hlID0gaW5qZWN0KFdhcmRSZWFsdGltZUNhY2hlU2VydmljZSk7XG5cdHByaXZhdGUgcmVhZG9ubHkgcGxhbnRFbmRwb2ludCA9IGAke3RoaXMuYmFzZVVybH0vcGxhbnRgO1xuXHRwcml2YXRlIHJlYWRvbmx5IGFwYXJ0bWVudHNFbmRwb2ludCA9IGAke3RoaXMuYmFzZVVybH0vYXBhcnRtZW50c2A7XG5cblx0cHVibGljIGdldEN1cnJlbnRBcGFydG1lbnQoKTogT2JzZXJ2YWJsZTxBcGFydG1lbnQ+IHtcblx0XHRyZXR1cm4gdGhpcy5nZXRBbGxQbGFudHMoKS5waXBlKFxuXHRcdFx0bWFwKChwbGFudHMpID0+IHtcblx0XHRcdFx0Y29uc3Qgc3RvcmVkUGxhbnRJZCA9IHRoaXMuZ2V0QWN0aXZlUGxhbnRJZCgpO1xuXHRcdFx0XHRjb25zdCBzZWxlY3RlZFBsYW50ID0gcGxhbnRzLmZpbmQoKHBsYW50KSA9PiBwbGFudC5pZCA9PT0gc3RvcmVkUGxhbnRJZCkgPz8gcGxhbnRzWzBdO1xuXG5cdFx0XHRcdGlmICghc2VsZWN0ZWRQbGFudCkge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcignTm8gYXZhaWxhYmxlIHBsYW50cyBmb3VuZCcpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGhpcy5zZXRBY3RpdmVQbGFudElkKHNlbGVjdGVkUGxhbnQuaWQpO1xuXHRcdFx0XHRyZXR1cm4gc2VsZWN0ZWRQbGFudC5pZDtcblx0XHRcdH0pLFxuXHRcdFx0c3dpdGNoTWFwKChwbGFudElkKSA9PiB0aGlzLmxvYWRBcGFydG1lbnRWaWV3Rm9yUGxhbnRJZChwbGFudElkKSksXG5cdFx0KTtcblx0fVxuXG5cdHB1YmxpYyBnZXRBdmFpbGFibGVBcGFydG1lbnRzKCk6IE9ic2VydmFibGU8QXBhcnRtZW50T3B0aW9uW10+IHtcblx0XHRyZXR1cm4gdGhpcy5nZXRBbGxQbGFudHMoKS5waXBlKFxuXHRcdFx0bWFwKChwbGFudHMpID0+XG5cdFx0XHRcdHBsYW50c1xuXHRcdFx0XHRcdC5tYXAoKHBsYW50KSA9PiAoeyBpZDogcGxhbnQuaWQsIG5hbWU6IHBsYW50Lm5hbWUgfSkpXG5cdFx0XHRcdFx0LnNvcnQoKGxlZnQsIHJpZ2h0KSA9PiBsZWZ0Lm5hbWUubG9jYWxlQ29tcGFyZShyaWdodC5uYW1lKSlcblx0XHRcdCksXG5cdFx0KTtcblx0fVxuXG5cdHB1YmxpYyBsb2FkQXBhcnRtZW50Vmlld0ZvclBsYW50SWQocGxhbnRJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxBcGFydG1lbnQ+IHtcblx0XHRjb25zdCBxdWVyeSA9IGA/cGxhbnRpZD0ke2VuY29kZVVSSUNvbXBvbmVudChwbGFudElkKX1gO1xuXG5cdFx0cmV0dXJuIHRoaXMuaHR0cC5nZXQ8UGxhbnREdG8+KGAke3RoaXMucGxhbnRFbmRwb2ludH0ke3F1ZXJ5fWApLnBpcGUoXG5cdFx0XHRtYXAoKHBsYW50KSA9PiB0aGlzLm1hcFBsYW50VG9BcGFydG1lbnQocGxhbnQpKSxcblx0XHQpO1xuXHR9XG5cblx0cHVibGljIGdldEFsbFBsYW50cygpOiBPYnNlcnZhYmxlPFBsYW50RHRvW10+IHtcblx0XHRyZXR1cm4gdGhpcy5odHRwLmdldDx1bmtub3duPihgJHt0aGlzLnBsYW50RW5kcG9pbnR9L2FsbGApLnBpcGUoXG5cdFx0XHRtYXAoKHJlc3BvbnNlKSA9PiB0aGlzLmV4dHJhY3RQbGFudHMocmVzcG9uc2UpKSxcblx0XHRcdHRhcCgocGxhbnRzKSA9PiB7XG5cdFx0XHRcdHRoaXMuY2FjaGVXYXJkSWRzRm9yQ3VycmVudFVzZXIocGxhbnRzKTtcblx0XHRcdH0pLFxuXHRcdCk7XG5cdH1cblxuXHRwdWJsaWMgZW5hYmxlQXBhcnRtZW50KGFwYXJ0bWVudElkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcblx0XHRjb25zdCBlbmNvZGVkQXBhcnRtZW50SWQgPSBlbmNvZGVVUklDb21wb25lbnQoYXBhcnRtZW50SWQpO1xuXG5cdFx0cmV0dXJuIHRoaXMuaHR0cC5wYXRjaDx2b2lkPihgJHt0aGlzLmFwYXJ0bWVudHNFbmRwb2ludH0vJHtlbmNvZGVkQXBhcnRtZW50SWR9L2VuYWJsZWAsIHt9KTtcblx0fVxuXG5cdHB1YmxpYyBkaXNhYmxlQXBhcnRtZW50KGFwYXJ0bWVudElkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcblx0XHRjb25zdCBlbmNvZGVkQXBhcnRtZW50SWQgPSBlbmNvZGVVUklDb21wb25lbnQoYXBhcnRtZW50SWQpO1xuXG5cdFx0cmV0dXJuIHRoaXMuaHR0cC5wYXRjaDx2b2lkPihgJHt0aGlzLmFwYXJ0bWVudHNFbmRwb2ludH0vJHtlbmNvZGVkQXBhcnRtZW50SWR9L2Rpc2FibGVgLCB7fSk7XG5cdH1cblxuXHRwdWJsaWMgc2V0QWN0aXZlUGxhbnRJZChwbGFudElkOiBzdHJpbmcpOiB2b2lkIHtcblx0XHRjb25zdCBzdG9yYWdlID0gZ2xvYmFsVGhpcy5sb2NhbFN0b3JhZ2UgYXMge1xuXHRcdFx0Z2V0SXRlbT86IChrZXk6IHN0cmluZykgPT4gc3RyaW5nIHwgbnVsbDtcblx0XHRcdHNldEl0ZW0/OiAoa2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpID0+IHZvaWQ7XG5cdFx0fSB8IHVuZGVmaW5lZDtcblx0XHRjb25zdCBwcmV2aW91c1BsYW50SWQgPVxuXHRcdFx0c3RvcmFnZSAmJiB0eXBlb2Ygc3RvcmFnZS5nZXRJdGVtID09PSAnZnVuY3Rpb24nXG5cdFx0XHRcdD8gc3RvcmFnZS5nZXRJdGVtKCdhY3RpdmVQbGFudElkJylcblx0XHRcdFx0OiBudWxsO1xuXG5cdFx0aWYgKHN0b3JhZ2UgJiYgdHlwZW9mIHN0b3JhZ2Uuc2V0SXRlbSA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0c3RvcmFnZS5zZXRJdGVtKCdhY3RpdmVQbGFudElkJywgcGxhbnRJZCk7XG5cdFx0fVxuXG5cdFx0aWYgKHByZXZpb3VzUGxhbnRJZCA9PT0gcGxhbnRJZCB8fCB0eXBlb2YgZ2xvYmFsVGhpcy5kaXNwYXRjaEV2ZW50ICE9PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKHR5cGVvZiBDdXN0b21FdmVudCA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0Z2xvYmFsVGhpcy5kaXNwYXRjaEV2ZW50KFxuXHRcdFx0XHRuZXcgQ3VzdG9tRXZlbnQoJ2FjdGl2ZS1wbGFudC1jaGFuZ2VkJywge1xuXHRcdFx0XHRcdGRldGFpbDogeyBwbGFudElkIH0sXG5cdFx0XHRcdH0pLFxuXHRcdFx0KTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRnbG9iYWxUaGlzLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdhY3RpdmUtcGxhbnQtY2hhbmdlZCcpKTtcblx0fVxuXG5cdHByaXZhdGUgZ2V0QWN0aXZlUGxhbnRJZCgpOiBzdHJpbmcgfCBudWxsIHtcblx0XHRjb25zdCBzdG9yYWdlID0gZ2xvYmFsVGhpcy5sb2NhbFN0b3JhZ2UgYXMgeyBnZXRJdGVtPzogKGtleTogc3RyaW5nKSA9PiBzdHJpbmcgfCBudWxsIH0gfCB1bmRlZmluZWQ7XG5cblx0XHRpZiAoc3RvcmFnZSAmJiB0eXBlb2Ygc3RvcmFnZS5nZXRJdGVtID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRyZXR1cm4gc3RvcmFnZS5nZXRJdGVtKCdhY3RpdmVQbGFudElkJyk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHRwcml2YXRlIGV4dHJhY3RQbGFudHMocmVzcG9uc2U6IHVua25vd24pOiBQbGFudER0b1tdIHtcblx0XHRjb25zdCBkaXJlY3RBcnJheSA9IHRoaXMuYXNQbGFudEFycmF5KHJlc3BvbnNlKTtcblx0XHRpZiAoZGlyZWN0QXJyYXkubGVuZ3RoID4gMCkge1xuXHRcdFx0cmV0dXJuIGRpcmVjdEFycmF5O1xuXHRcdH1cblxuXHRcdGlmICh0eXBlb2YgcmVzcG9uc2UgIT09ICdvYmplY3QnIHx8IHJlc3BvbnNlID09PSBudWxsKSB7XG5cdFx0XHRyZXR1cm4gW107XG5cdFx0fVxuXG5cdFx0Y29uc3Qgd3JhcHBlZFJlc3BvbnNlID0gcmVzcG9uc2UgYXMgeyBkYXRhPzogdW5rbm93bjsgcGxhbnRzPzogdW5rbm93biB9O1xuXHRcdGNvbnN0IHdyYXBwZWRBcnJheSA9IHRoaXMuYXNQbGFudEFycmF5KHdyYXBwZWRSZXNwb25zZS5kYXRhID8/IHdyYXBwZWRSZXNwb25zZS5wbGFudHMpO1xuXHRcdHJldHVybiB3cmFwcGVkQXJyYXk7XG5cdH1cblxuXHRwcml2YXRlIGFzUGxhbnRBcnJheSh2YWx1ZTogdW5rbm93bik6IFBsYW50RHRvW10ge1xuXHRcdGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcblx0XHRcdHJldHVybiBbXTtcblx0XHR9XG5cblx0XHRjb25zdCB1bmlxdWVCeUlkID0gbmV3IE1hcDxzdHJpbmcsIFBsYW50RHRvPigpO1xuXHRcdGZvciAoY29uc3QgY2FuZGlkYXRlIG9mIHZhbHVlKSB7XG5cdFx0XHRpZiAodHlwZW9mIGNhbmRpZGF0ZSAhPT0gJ29iamVjdCcgfHwgY2FuZGlkYXRlID09PSBudWxsKSB7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBwbGFudCA9IGNhbmRpZGF0ZSBhcyBQbGFudER0bztcblx0XHRcdGlmICh0eXBlb2YgcGxhbnQuaWQgIT09ICdzdHJpbmcnIHx8ICFwbGFudC5pZC50cmltKCkpIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IG5vcm1hbGl6ZWROYW1lID0gdHlwZW9mIHBsYW50Lm5hbWUgPT09ICdzdHJpbmcnICYmIHBsYW50Lm5hbWUudHJpbSgpID8gcGxhbnQubmFtZSA6IHBsYW50LmlkO1xuXHRcdFx0dW5pcXVlQnlJZC5zZXQocGxhbnQuaWQsIHtcblx0XHRcdFx0Li4ucGxhbnQsXG5cdFx0XHRcdG5hbWU6IG5vcm1hbGl6ZWROYW1lLFxuXHRcdFx0XHRyb29tczogQXJyYXkuaXNBcnJheShwbGFudC5yb29tcykgPyBwbGFudC5yb29tcyA6IFtdLFxuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIEFycmF5LmZyb20odW5pcXVlQnlJZC52YWx1ZXMoKSk7XG5cdH1cblxuXHRwcml2YXRlIGNhY2hlV2FyZElkc0ZvckN1cnJlbnRVc2VyKHBsYW50czogUmVhZG9ubHlBcnJheTxQbGFudER0bz4pOiB2b2lkIHtcblx0XHRjb25zdCB3YXJkSWRzID0gQXJyYXkuZnJvbShcblx0XHRcdG5ldyBTZXQoXG5cdFx0XHRcdHBsYW50c1xuXHRcdFx0XHRcdC5tYXAoKHBsYW50KSA9PiBwbGFudC53YXJkSWQpXG5cdFx0XHRcdFx0LmZpbHRlcigod2FyZElkKTogd2FyZElkIGlzIG51bWJlciA9PiBOdW1iZXIuaXNJbnRlZ2VyKHdhcmRJZCkpXG5cdFx0XHRcdFx0Lm1hcChTdHJpbmcpXG5cdFx0XHQpXG5cdFx0KTtcblxuXHRcdGlmICh3YXJkSWRzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHRoaXMuYXV0aFNlcnZpY2Vcblx0XHRcdC5nZXRDdXJyZW50VXNlciQoKVxuXHRcdFx0LnBpcGUodGFrZSgxKSlcblx0XHRcdC5zdWJzY3JpYmUoKHNlc3Npb24pID0+IHtcblx0XHRcdFx0aWYgKCFzZXNzaW9uKSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGhpcy53YXJkUmVhbHRpbWVDYWNoZS5tZXJnZVdhcmRJZHMoc2Vzc2lvbi51c2VySWQsIHdhcmRJZHMpO1xuXHRcdFx0fSk7XG5cdH1cblxuXHRwcml2YXRlIG1hcFBsYW50VG9BcGFydG1lbnQocGxhbnQ6IFBsYW50RHRvKTogQXBhcnRtZW50IHtcblx0XHRjb25zdCByb29tcyA9IEFycmF5LmlzQXJyYXkocGxhbnQucm9vbXMpID8gcGxhbnQucm9vbXMgOiBbXTtcblxuXHRcdHJldHVybiB7XG5cdFx0XHRpZDogcGxhbnQuaWQsXG5cdFx0XHRuYW1lOiBwbGFudC5uYW1lLFxuXHRcdFx0aXNFbmFibGVkOiB0cnVlLFxuXHRcdFx0cm9vbXM6IHJvb21zLm1hcCgocm9vbSkgPT4ge1xuXHRcdFx0XHRjb25zdCByb29tRGV2aWNlcyA9IEFycmF5LmlzQXJyYXkocm9vbS5kZXZpY2VzKSA/IHJvb20uZGV2aWNlcyA6IFtdO1xuXHRcdFx0XHRjb25zdCB2aXNpYmxlRGV2aWNlcyA9IHRoaXMuZGVkdXBsaWNhdGVSb29tRGV2aWNlcyhcblx0XHRcdFx0XHRyb29tRGV2aWNlcy5maWx0ZXIoKGRldmljZSkgPT4gIXRoaXMuaXNFbmVyZ3lNZWFzdXJlRGV2aWNlKGRldmljZS50eXBlLCBkZXZpY2Uuc3ViVHlwZSkpLFxuXHRcdFx0XHQpO1xuXG5cdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0aWQ6IHJvb20uaWQsXG5cdFx0XHRcdFx0bmFtZTogcm9vbS5uYW1lLFxuXHRcdFx0XHRcdGhhc0FjdGl2ZUFsYXJtOiBmYWxzZSxcblx0XHRcdFx0XHRkZXZpY2VzOiB2aXNpYmxlRGV2aWNlcy5tYXAoKGRldmljZSkgPT4gKHtcblx0XHRcdFx0XHRcdHR5cGU6IHJlc29sdmVEZXZpY2VUeXBlKHtcblx0XHRcdFx0XHRcdFx0cmF3VHlwZTogZGV2aWNlLnR5cGUsXG5cdFx0XHRcdFx0XHRcdHJhd1N1YlR5cGU6IGRldmljZS5zdWJUeXBlLFxuXHRcdFx0XHRcdFx0XHRyYXdOYW1lOiBkZXZpY2UubmFtZSxcblx0XHRcdFx0XHRcdFx0c2ZlVHlwZXM6IChkZXZpY2UuZGF0YXBvaW50cyA/PyBbXSkubWFwKChkYXRhcG9pbnQpID0+IGRhdGFwb2ludC5zZmVUeXBlKSxcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0aWQ6IGRldmljZS5pZCxcblx0XHRcdFx0XHRcdG5hbWU6IGRldmljZS5uYW1lLFxuXHRcdFx0XHRcdFx0c3RhdHVzOiB0aGlzLm1hcERldmljZVN0YXR1cyhkZXZpY2UudHlwZSksXG5cdFx0XHRcdFx0XHRhY3Rpb25zOiBbXSxcblx0XHRcdFx0XHRcdGRhdGFwb2ludHM6IChkZXZpY2UuZGF0YXBvaW50cyA/PyBbXSkubWFwKChkYXRhcG9pbnQpID0+ICh7XG5cdFx0XHRcdFx0XHRcdGlkOiBkYXRhcG9pbnQuaWQsXG5cdFx0XHRcdFx0XHRcdG5hbWU6IGRhdGFwb2ludC5uYW1lLFxuXHRcdFx0XHRcdFx0XHRyZWFkYWJsZTogZGF0YXBvaW50LnJlYWRhYmxlLFxuXHRcdFx0XHRcdFx0XHR3cml0YWJsZTogZGF0YXBvaW50LndyaXRhYmxlLFxuXHRcdFx0XHRcdFx0XHR2YWx1ZVR5cGU6IGRhdGFwb2ludC52YWx1ZVR5cGUsXG5cdFx0XHRcdFx0XHRcdGVudW06IGRhdGFwb2ludC5lbnVtID8/IFtdLFxuXHRcdFx0XHRcdFx0XHRzZmVUeXBlOiBkYXRhcG9pbnQuc2ZlVHlwZSxcblx0XHRcdFx0XHRcdH0pKSxcblx0XHRcdFx0XHR9KSksXG5cdFx0XHRcdH07XG5cdFx0XHR9KSxcblx0XHR9O1xuXHR9XG5cblx0cHJpdmF0ZSBkZWR1cGxpY2F0ZVJvb21EZXZpY2VzKGRldmljZXM6IFJlYWRvbmx5QXJyYXk8UGxhbnREZXZpY2VEdG8+KTogUGxhbnREZXZpY2VEdG9bXSB7XG5cdFx0Y29uc3QgYnlOYW1lID0gbmV3IE1hcDxzdHJpbmcsIFBsYW50RGV2aWNlRHRvPigpO1xuXG5cdFx0Zm9yIChjb25zdCBkZXZpY2Ugb2YgZGV2aWNlcykge1xuXHRcdFx0Y29uc3Qga2V5ID0gdGhpcy5ub3JtYWxpemVEZXZpY2VOYW1lKGRldmljZS5uYW1lKTtcblx0XHRcdGNvbnN0IGN1cnJlbnQgPSBieU5hbWUuZ2V0KGtleSk7XG5cblx0XHRcdGlmICghY3VycmVudCB8fCB0aGlzLmdldERldmljZVByaW9yaXR5U2NvcmUoZGV2aWNlKSA+IHRoaXMuZ2V0RGV2aWNlUHJpb3JpdHlTY29yZShjdXJyZW50KSkge1xuXHRcdFx0XHRieU5hbWUuc2V0KGtleSwgZGV2aWNlKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gQXJyYXkuZnJvbShieU5hbWUudmFsdWVzKCkpO1xuXHR9XG5cblx0cHJpdmF0ZSBub3JtYWxpemVEZXZpY2VOYW1lKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIG5hbWUudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG5cdH1cblxuXHRwcml2YXRlIGdldERldmljZVByaW9yaXR5U2NvcmUoZGV2aWNlOiBQbGFudERldmljZUR0byk6IG51bWJlciB7XG5cdFx0Y29uc3Qgbm9ybWFsaXplZFR5cGUgPSBkZXZpY2UudHlwZT8udG9VcHBlckNhc2UoKSA/PyAnJztcblx0XHRjb25zdCBub3JtYWxpemVkU3ViVHlwZSA9IGRldmljZS5zdWJUeXBlPy50b1VwcGVyQ2FzZSgpID8/ICcnO1xuXG5cdFx0bGV0IHNjb3JlID0gMDtcblxuXHRcdGlmIChub3JtYWxpemVkVHlwZS5pbmNsdWRlcygnUkFEQVJERVRFQ1RPUicpKSB7XG5cdFx0XHRzY29yZSArPSAxMDA7XG5cdFx0fVxuXG5cdFx0aWYgKG5vcm1hbGl6ZWRTdWJUeXBlID09PSAnU0ZfQUNDRVNTJykge1xuXHRcdFx0c2NvcmUgKz0gNjA7XG5cdFx0fVxuXG5cdFx0aWYgKG5vcm1hbGl6ZWRUeXBlID09PSAnU1NfQVVUT01BVElPTl9PTk9GRicpIHtcblx0XHRcdHNjb3JlIC09IDIwO1xuXHRcdH1cblxuXHRcdHNjb3JlICs9IGRldmljZS5kYXRhcG9pbnRzPy5sZW5ndGggPz8gMDtcblx0XHRyZXR1cm4gc2NvcmU7XG5cdH1cblxuXHRwcml2YXRlIGlzRW5lcmd5TWVhc3VyZURldmljZShcblx0XHRyYXdUeXBlOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdFx0cmF3U3ViVHlwZTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHQpOiBib29sZWFuIHtcblx0XHRjb25zdCBub3JtYWxpemVkVHlwZSA9IHJhd1R5cGU/LnRvVXBwZXJDYXNlKCkgPz8gJyc7XG5cdFx0Y29uc3Qgbm9ybWFsaXplZFN1YlR5cGUgPSByYXdTdWJUeXBlPy50b1VwcGVyQ2FzZSgpID8/ICcnO1xuXG5cdFx0cmV0dXJuIChcblx0XHRcdG5vcm1hbGl6ZWRUeXBlLnN0YXJ0c1dpdGgoJ1NTX0VORVJHWV9NRUFTVVJFJykgfHxcblx0XHRcdG5vcm1hbGl6ZWRTdWJUeXBlID09PSAnU0ZfRU5FUkdZJ1xuXHRcdCk7XG5cdH1cblxuXHRwcml2YXRlIG1hcERldmljZVN0YXR1cyhyYXdUeXBlOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBEZXZpY2VTdGF0dXMge1xuXHRcdHJldHVybiByYXdUeXBlID8gJ09OTElORScgOiAnVU5LTk9XTic7XG5cdH1cbn0iXSwibWFwcGluZ3MiOiI7NFhBaUJBLEdBQWEsQ0FBQUEsQ0FBQSxFQUFBQyxjQUFBLEdBQUFDLENBQUEsT0FBbUIsS0FBQUQsY0FBQSxHQUFBRSxDQUFBLE1BQTFCLEtBQU8sQ0FBQUMsQ0FBbUIsQ0FDZEMsSUFBQSxFQUFBSixjQUFBLEdBQUFDLENB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 \ No newline at end of file diff --git a/frontend/dist-instrumented/chunk-QFTDGRKT.js.map b/frontend/dist-instrumented/chunk-QFTDGRKT.js.map new file mode 100644 index 00000000..27c571f9 --- /dev/null +++ b/frontend/dist-instrumented/chunk-QFTDGRKT.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["src/app/features/apartment-monitor/services/apartment-api.service.ts"], + "sourcesContent": ["import { HttpClient } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\nimport { Observable, map, switchMap, take, tap } from 'rxjs';\nimport { API_BASE_URL } from '../../../core/tokens/api-base-url.token';\nimport { Apartment } from '../models/apartment.model';\nimport { DeviceStatus } from '../models/device.model';\nimport { PlantDeviceDto, PlantDto } from '../models/plant-response.model';\nimport { resolveDeviceType } from '../../../shared/models/device-taxonomy';\nimport { InternalAuthService } from '../../../core/services/internal-auth.service';\nimport { WardRealtimeCacheService } from '../../../core/alarm/services/ward-realtime-cache.service';\n\nexport interface ApartmentOption {\n\tid: string;\n\tname: string;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class ApartmentApiService {\n\tprivate readonly http = inject(HttpClient);\n\tprivate readonly baseUrl: string = inject(API_BASE_URL);\n\tprivate readonly authService = inject(InternalAuthService);\n\tprivate readonly wardRealtimeCache = inject(WardRealtimeCacheService);\n\tprivate readonly plantEndpoint = `${this.baseUrl}/plant`;\n\tprivate readonly apartmentsEndpoint = `${this.baseUrl}/apartments`;\n\n\tpublic getCurrentApartment(): Observable {\n\t\treturn this.getAllPlants().pipe(\n\t\t\tmap((plants) => {\n\t\t\t\tconst storedPlantId = this.getActivePlantId();\n\t\t\t\tconst selectedPlant = plants.find((plant) => plant.id === storedPlantId) ?? plants[0];\n\n\t\t\t\tif (!selectedPlant) {\n\t\t\t\t\tthrow new Error('No available plants found');\n\t\t\t\t}\n\n\t\t\t\tthis.setActivePlantId(selectedPlant.id);\n\t\t\t\treturn selectedPlant.id;\n\t\t\t}),\n\t\t\tswitchMap((plantId) => this.loadApartmentViewForPlantId(plantId)),\n\t\t);\n\t}\n\n\tpublic getAvailableApartments(): Observable {\n\t\treturn this.getAllPlants().pipe(\n\t\t\tmap((plants) =>\n\t\t\t\tplants\n\t\t\t\t\t.map((plant) => ({ id: plant.id, name: plant.name }))\n\t\t\t\t\t.sort((left, right) => left.name.localeCompare(right.name))\n\t\t\t),\n\t\t);\n\t}\n\n\tpublic loadApartmentViewForPlantId(plantId: string): Observable {\n\t\tconst query = `?plantid=${encodeURIComponent(plantId)}`;\n\n\t\treturn this.http.get(`${this.plantEndpoint}${query}`).pipe(\n\t\t\tmap((plant) => this.mapPlantToApartment(plant)),\n\t\t);\n\t}\n\n\tpublic getAllPlants(): Observable {\n\t\treturn this.http.get(`${this.plantEndpoint}/all`).pipe(\n\t\t\tmap((response) => this.extractPlants(response)),\n\t\t\ttap((plants) => {\n\t\t\t\tthis.cacheWardIdsForCurrentUser(plants);\n\t\t\t}),\n\t\t);\n\t}\n\n\tpublic enableApartment(apartmentId: string): Observable {\n\t\tconst encodedApartmentId = encodeURIComponent(apartmentId);\n\n\t\treturn this.http.patch(`${this.apartmentsEndpoint}/${encodedApartmentId}/enable`, {});\n\t}\n\n\tpublic disableApartment(apartmentId: string): Observable {\n\t\tconst encodedApartmentId = encodeURIComponent(apartmentId);\n\n\t\treturn this.http.patch(`${this.apartmentsEndpoint}/${encodedApartmentId}/disable`, {});\n\t}\n\n\tpublic setActivePlantId(plantId: string): void {\n\t\tconst storage = globalThis.localStorage as {\n\t\t\tgetItem?: (key: string) => string | null;\n\t\t\tsetItem?: (key: string, value: string) => void;\n\t\t} | undefined;\n\t\tconst previousPlantId =\n\t\t\tstorage && typeof storage.getItem === 'function'\n\t\t\t\t? storage.getItem('activePlantId')\n\t\t\t\t: null;\n\n\t\tif (storage && typeof storage.setItem === 'function') {\n\t\t\tstorage.setItem('activePlantId', plantId);\n\t\t}\n\n\t\tif (previousPlantId === plantId || typeof globalThis.dispatchEvent !== 'function') {\n\t\t\treturn;\n\t\t}\n\n\t\tif (typeof CustomEvent === 'function') {\n\t\t\tglobalThis.dispatchEvent(\n\t\t\t\tnew CustomEvent('active-plant-changed', {\n\t\t\t\t\tdetail: { plantId },\n\t\t\t\t}),\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\tglobalThis.dispatchEvent(new Event('active-plant-changed'));\n\t}\n\n\tprivate getActivePlantId(): string | null {\n\t\tconst storage = globalThis.localStorage as { getItem?: (key: string) => string | null } | undefined;\n\n\t\tif (storage && typeof storage.getItem === 'function') {\n\t\t\treturn storage.getItem('activePlantId');\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tprivate extractPlants(response: unknown): PlantDto[] {\n\t\tconst directArray = this.asPlantArray(response);\n\t\tif (directArray.length > 0) {\n\t\t\treturn directArray;\n\t\t}\n\n\t\tif (typeof response !== 'object' || response === null) {\n\t\t\treturn [];\n\t\t}\n\n\t\tconst wrappedResponse = response as { data?: unknown; plants?: unknown };\n\t\tconst wrappedArray = this.asPlantArray(wrappedResponse.data ?? wrappedResponse.plants);\n\t\treturn wrappedArray;\n\t}\n\n\tprivate asPlantArray(value: unknown): PlantDto[] {\n\t\tif (!Array.isArray(value)) {\n\t\t\treturn [];\n\t\t}\n\n\t\tconst uniqueById = new Map();\n\t\tfor (const candidate of value) {\n\t\t\tif (typeof candidate !== 'object' || candidate === null) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst plant = candidate as PlantDto;\n\t\t\tif (typeof plant.id !== 'string' || !plant.id.trim()) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst normalizedName = typeof plant.name === 'string' && plant.name.trim() ? plant.name : plant.id;\n\t\t\tuniqueById.set(plant.id, {\n\t\t\t\t...plant,\n\t\t\t\tname: normalizedName,\n\t\t\t\trooms: Array.isArray(plant.rooms) ? plant.rooms : [],\n\t\t\t});\n\t\t}\n\n\t\treturn Array.from(uniqueById.values());\n\t}\n\n\tprivate cacheWardIdsForCurrentUser(plants: ReadonlyArray): void {\n\t\tconst wardIds = Array.from(\n\t\t\tnew Set(\n\t\t\t\tplants\n\t\t\t\t\t.map((plant) => plant.wardId)\n\t\t\t\t\t.filter((wardId): wardId is number => Number.isInteger(wardId))\n\t\t\t\t\t.map(String)\n\t\t\t)\n\t\t);\n\n\t\tif (wardIds.length === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.authService\n\t\t\t.getCurrentUser$()\n\t\t\t.pipe(take(1))\n\t\t\t.subscribe((session) => {\n\t\t\t\tif (!session) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.wardRealtimeCache.mergeWardIds(session.userId, wardIds);\n\t\t\t});\n\t}\n\n\tprivate mapPlantToApartment(plant: PlantDto): Apartment {\n\t\tconst rooms = Array.isArray(plant.rooms) ? plant.rooms : [];\n\n\t\treturn {\n\t\t\tid: plant.id,\n\t\t\tname: plant.name,\n\t\t\tisEnabled: true,\n\t\t\trooms: rooms.map((room) => {\n\t\t\t\tconst roomDevices = Array.isArray(room.devices) ? room.devices : [];\n\t\t\t\tconst visibleDevices = this.deduplicateRoomDevices(\n\t\t\t\t\troomDevices.filter((device) => !this.isEnergyMeasureDevice(device.type, device.subType)),\n\t\t\t\t);\n\n\t\t\t\treturn {\n\t\t\t\t\tid: room.id,\n\t\t\t\t\tname: room.name,\n\t\t\t\t\thasActiveAlarm: false,\n\t\t\t\t\tdevices: visibleDevices.map((device) => ({\n\t\t\t\t\t\ttype: resolveDeviceType({\n\t\t\t\t\t\t\trawType: device.type,\n\t\t\t\t\t\t\trawSubType: device.subType,\n\t\t\t\t\t\t\trawName: device.name,\n\t\t\t\t\t\t\tsfeTypes: (device.datapoints ?? []).map((datapoint) => datapoint.sfeType),\n\t\t\t\t\t\t}),\n\t\t\t\t\t\tid: device.id,\n\t\t\t\t\t\tname: device.name,\n\t\t\t\t\t\tstatus: this.mapDeviceStatus(device.type),\n\t\t\t\t\t\tactions: [],\n\t\t\t\t\t\tdatapoints: (device.datapoints ?? []).map((datapoint) => ({\n\t\t\t\t\t\t\tid: datapoint.id,\n\t\t\t\t\t\t\tname: datapoint.name,\n\t\t\t\t\t\t\treadable: datapoint.readable,\n\t\t\t\t\t\t\twritable: datapoint.writable,\n\t\t\t\t\t\t\tvalueType: datapoint.valueType,\n\t\t\t\t\t\t\tenum: datapoint.enum ?? [],\n\t\t\t\t\t\t\tsfeType: datapoint.sfeType,\n\t\t\t\t\t\t})),\n\t\t\t\t\t})),\n\t\t\t\t};\n\t\t\t}),\n\t\t};\n\t}\n\n\tprivate deduplicateRoomDevices(devices: ReadonlyArray): PlantDeviceDto[] {\n\t\tconst byName = new Map();\n\n\t\tfor (const device of devices) {\n\t\t\tconst key = this.normalizeDeviceName(device.name);\n\t\t\tconst current = byName.get(key);\n\n\t\t\tif (!current || this.getDevicePriorityScore(device) > this.getDevicePriorityScore(current)) {\n\t\t\t\tbyName.set(key, device);\n\t\t\t}\n\t\t}\n\n\t\treturn Array.from(byName.values());\n\t}\n\n\tprivate normalizeDeviceName(name: string): string {\n\t\treturn name.trim().toLowerCase();\n\t}\n\n\tprivate getDevicePriorityScore(device: PlantDeviceDto): number {\n\t\tconst normalizedType = device.type?.toUpperCase() ?? '';\n\t\tconst normalizedSubType = device.subType?.toUpperCase() ?? '';\n\n\t\tlet score = 0;\n\n\t\tif (normalizedType.includes('RADARDETECTOR')) {\n\t\t\tscore += 100;\n\t\t}\n\n\t\tif (normalizedSubType === 'SF_ACCESS') {\n\t\t\tscore += 60;\n\t\t}\n\n\t\tif (normalizedType === 'SS_AUTOMATION_ONOFF') {\n\t\t\tscore -= 20;\n\t\t}\n\n\t\tscore += device.datapoints?.length ?? 0;\n\t\treturn score;\n\t}\n\n\tprivate isEnergyMeasureDevice(\n\t\trawType: string | undefined,\n\t\trawSubType: string | undefined,\n\t): boolean {\n\t\tconst normalizedType = rawType?.toUpperCase() ?? '';\n\t\tconst normalizedSubType = rawSubType?.toUpperCase() ?? '';\n\n\t\treturn (\n\t\t\tnormalizedType.startsWith('SS_ENERGY_MEASURE') ||\n\t\t\tnormalizedSubType === 'SF_ENERGY'\n\t\t);\n\t}\n\n\tprivate mapDeviceStatus(rawType: string | undefined): DeviceStatus {\n\t\treturn rawType ? 'ONLINE' : 'UNKNOWN';\n\t}\n}"], + "mappings": "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", + "names": ["ApartmentApiService", "http", "inject", "HttpClient", "baseUrl", "API_BASE_URL", "authService", "InternalAuthService", "wardRealtimeCache", "WardRealtimeCacheService", "plantEndpoint", "apartmentsEndpoint", "getCurrentApartment", "getAllPlants", "pipe", "map", "plants", "storedPlantId", "getActivePlantId", "selectedPlant", "find", "plant", "id", "Error", "setActivePlantId", "switchMap", "plantId", "loadApartmentViewForPlantId", "getAvailableApartments", "name", "sort", "left", "right", "localeCompare", "query", "encodeURIComponent", "get", "mapPlantToApartment", "response", "extractPlants", "tap", "cacheWardIdsForCurrentUser", "enableApartment", "apartmentId", "encodedApartmentId", "patch", "disableApartment", "storage", "globalThis", "localStorage", "previousPlantId", "getItem", "setItem", "dispatchEvent", "CustomEvent", "detail", "Event", "directArray", "asPlantArray", "length", "wrappedResponse", "data", "value", "Array", "isArray", "uniqueById", "Map", "candidate", "trim", "normalizedName", "set", "__spreadProps", "__spreadValues", "rooms", "from", "values", "wardIds", "Set", "wardId", "filter", "Number", "isInteger", "String", "getCurrentUser$", "take", "subscribe", "session", "mergeWardIds", "userId", "isEnabled", "room", "roomDevices", "devices", "visibleDevices", "deduplicateRoomDevices", "device", "isEnergyMeasureDevice", "type", "subType", "hasActiveAlarm", "resolveDeviceType", "rawType", "rawSubType", "rawName", "sfeTypes", "datapoints", "datapoint", "sfeType", "status", "mapDeviceStatus", "actions", "readable", "writable", "valueType", "enum", "byName", "key", "normalizeDeviceName", "current", "getDevicePriorityScore", "toLowerCase", "normalizedType", "toUpperCase", "normalizedSubType", "score", "includes", "startsWith", "factory", "\u0275fac", "providedIn"] +} diff --git a/frontend/dist-instrumented/chunk-RKG5ANIH.js b/frontend/dist-instrumented/chunk-RKG5ANIH.js new file mode 100644 index 00000000..8f857763 --- /dev/null +++ b/frontend/dist-instrumented/chunk-RKG5ANIH.js @@ -0,0 +1,3 @@ +function cov_1o5jy13zo4(){var path="/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-RKG5ANIH.js";var hash="ae725664904b42fa1b28b7088664944b9a618fc7";var global=new Function("return this")();var gcv="__coverage__";var coverageData={path:"/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-RKG5ANIH.js",statementMap:{"0":{start:{line:1,column:214},end:{line:1,column:220}},"1":{start:{line:1,column:218},end:{line:1,column:220}},"2":{start:{line:1,column:227},end:{line:1,column:343}},"3":{start:{line:1,column:273},end:{line:1,column:341}},"4":{start:{line:1,column:311},end:{line:1,column:340}}},fnMap:{"0":{name:"(anonymous_0)",decl:{start:{line:1,column:214},end:{line:1,column:215}},loc:{start:{line:1,column:218},end:{line:1,column:220}},line:1},"1":{name:"(anonymous_1)",decl:{start:{line:1,column:269},end:{line:1,column:270}},loc:{start:{line:1,column:273},end:{line:1,column:341}},line:1},"2":{name:"(anonymous_2)",decl:{start:{line:1,column:308},end:{line:1,column:309}},loc:{start:{line:1,column:311},end:{line:1,column:340}},line:1}},branchMap:{},s:{"0":0,"1":0,"2":0,"3":0,"4":0},f:{"0":0,"1":0,"2":0},b:{},inputSourceMap:{version:3,sources:["src/app/core/guards/admin.guard.ts","src/app/features/user-management/user-management.routes.ts"],sourcesContent:["import { CanActivateFn } from '@angular/router';\n\nexport const adminGuard: CanActivateFn = () => true;\n","import { Routes } from '@angular/router';\nimport { adminGuard } from '../../core/guards/admin.guard';\nimport { authGuard } from '../../core/guards/auth.guard';\n\nexport const USER_MANAGEMENT_ROUTES: Routes = [\n {\n path: '',\n canActivate: [authGuard, adminGuard],\n loadComponent: () =>\n import('./components/user-management-page/user-management-page.component').then(\n (m) => m.UserManagementPageComponent\n )\n }\n];\n"],mappings:"gNAEO,IAAMA,EAA4BA,IAAM,GCExC,IAAMC,EAAiC,CAC5C,CACEC,KAAM,GACNC,YAAa,CAACC,EAAWC,CAAU,EACnCC,cAAeA,IACb,OAAO,qBAAkE,EAAEC,KACxEC,GAAMA,EAAEC,2BAA2B,EAEzC",names:["adminGuard","USER_MANAGEMENT_ROUTES","path","canActivate","authGuard","adminGuard","loadComponent","then","m","UserManagementPageComponent"]},_coverageSchema:"1a1c01bbd47fc00a2c39e90264f33305004495a9",hash:"ae725664904b42fa1b28b7088664944b9a618fc7"};var coverage=global[gcv]||(global[gcv]={});if(!coverage[path]||coverage[path].hash!==hash){coverage[path]=coverageData;}var actualCoverage=coverage[path];{// @ts-ignore +cov_1o5jy13zo4=function(){return actualCoverage;};}return actualCoverage;}cov_1o5jy13zo4();import{a as t}from"./chunk-K2WBT5ZC.js";import"./chunk-FYGTVJAL.js";import"./chunk-65RKWSY3.js";import"./chunk-2S5V5XEE.js";import"./chunk-F6OGAIBI.js";import"./chunk-RYTNMYZW.js";import"./chunk-VCZGUBMY.js";cov_1o5jy13zo4().s[0]++;var o=()=>{cov_1o5jy13zo4().f[0]++;cov_1o5jy13zo4().s[1]++;return!0;};var m=(cov_1o5jy13zo4().s[2]++,[{path:"",canActivate:[t,o],loadComponent:()=>{cov_1o5jy13zo4().f[1]++;cov_1o5jy13zo4().s[3]++;return import("./chunk-4WA7JXUW.js").then(a=>{cov_1o5jy13zo4().f[2]++;cov_1o5jy13zo4().s[4]++;return a.UserManagementPageComponent;});}}]);export{m as USER_MANAGEMENT_ROUTES};//# sourceMappingURL=chunk-RKG5ANIH.js.map +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb3ZfMW81ankxM3pvNCIsInMiLCJvIiwiZiIsIm0iLCJwYXRoIiwiY2FuQWN0aXZhdGUiLCJ0IiwibG9hZENvbXBvbmVudCIsInRoZW4iLCJhIiwiVXNlck1hbmFnZW1lbnRQYWdlQ29tcG9uZW50IiwiVVNFUl9NQU5BR0VNRU5UX1JPVVRFUyJdLCJzb3VyY2VzIjpbInNyYy9hcHAvY29yZS9ndWFyZHMvYWRtaW4uZ3VhcmQudHMiLCJzcmMvYXBwL2ZlYXR1cmVzL3VzZXItbWFuYWdlbWVudC91c2VyLW1hbmFnZW1lbnQucm91dGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENhbkFjdGl2YXRlRm4gfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5leHBvcnQgY29uc3QgYWRtaW5HdWFyZDogQ2FuQWN0aXZhdGVGbiA9ICgpID0+IHRydWU7XG4iLCJpbXBvcnQgeyBSb3V0ZXMgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgYWRtaW5HdWFyZCB9IGZyb20gJy4uLy4uL2NvcmUvZ3VhcmRzL2FkbWluLmd1YXJkJztcbmltcG9ydCB7IGF1dGhHdWFyZCB9IGZyb20gJy4uLy4uL2NvcmUvZ3VhcmRzL2F1dGguZ3VhcmQnO1xuXG5leHBvcnQgY29uc3QgVVNFUl9NQU5BR0VNRU5UX1JPVVRFUzogUm91dGVzID0gW1xuICB7XG4gICAgcGF0aDogJycsXG4gICAgY2FuQWN0aXZhdGU6IFthdXRoR3VhcmQsIGFkbWluR3VhcmRdLFxuICAgIGxvYWRDb21wb25lbnQ6ICgpID0+XG4gICAgICBpbXBvcnQoJy4vY29tcG9uZW50cy91c2VyLW1hbmFnZW1lbnQtcGFnZS91c2VyLW1hbmFnZW1lbnQtcGFnZS5jb21wb25lbnQnKS50aGVuKFxuICAgICAgICAobSkgPT4gbS5Vc2VyTWFuYWdlbWVudFBhZ2VDb21wb25lbnRcbiAgICAgIClcbiAgfVxuXTtcbiJdLCJtYXBwaW5ncyI6IjsyU0FFT0EsY0FBQSxHQUFBQyxDQUFBLFNBQU0sQ0FBQUMsQ0FBQSxDQUE0QkEsQ0FBQSxHQUFNLENBQUFGLGNBQUEsR0FBQUcsQ0FBQSxLQUFBSCxDQUFBLGlCQUFBQyxDQUFBLGlCQ0V4QyxHQUFNLENBQUFHLENBQUEsRUFBQUosY0FBQSxHQUFBQyxDQUFBLE1BQWlDLENBQzVDLENBQ0VJLElBQUEsQ0FBTSxHQUNOQyxXQUFBLENBQWEsQ0FBQ0MsQ0FBQSxDQUFXTCxDQUFVLEVBQ25DTSxhQUFBLENBQWVBLENBQUEsR0FDYixDQUFBUixjQUFBLEdBQUFHLENBQUEsS0FBQUgsQ0FBQSxpQkFBQUMsQ0FBQSxvQkFBTyxxQkFBa0UsRUFBRVEsSUFBQSxDQUN4RUMsQ0FBQSxFQUFNLENBQUFWLGNBQUEsR0FBQUcsQ0FBQSxLQUFBSCxDQUFBLGlCQUFBQyxDQUFBLGFBQUFTLENBQUEsQ0FBRUMsMkJBQTJCLENBQTNCLENBQTJCLElBRXpDLFVBQUFQLENBQUEsSUFBQVEsc0JBQUEsRSIsImlnbm9yZUxpc3QiOltdfQ== \ No newline at end of file diff --git a/frontend/dist-instrumented/chunk-RKG5ANIH.js.map b/frontend/dist-instrumented/chunk-RKG5ANIH.js.map new file mode 100644 index 00000000..a2a8d41d --- /dev/null +++ b/frontend/dist-instrumented/chunk-RKG5ANIH.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["src/app/core/guards/admin.guard.ts", "src/app/features/user-management/user-management.routes.ts"], + "sourcesContent": ["import { CanActivateFn } from '@angular/router';\n\nexport const adminGuard: CanActivateFn = () => true;\n", "import { Routes } from '@angular/router';\nimport { adminGuard } from '../../core/guards/admin.guard';\nimport { authGuard } from '../../core/guards/auth.guard';\n\nexport const USER_MANAGEMENT_ROUTES: Routes = [\n {\n path: '',\n canActivate: [authGuard, adminGuard],\n loadComponent: () =>\n import('./components/user-management-page/user-management-page.component').then(\n (m) => m.UserManagementPageComponent\n )\n }\n];\n"], + "mappings": "gNAEO,IAAMA,EAA4BA,IAAM,GCExC,IAAMC,EAAiC,CAC5C,CACEC,KAAM,GACNC,YAAa,CAACC,EAAWC,CAAU,EACnCC,cAAeA,IACb,OAAO,qBAAkE,EAAEC,KACxEC,GAAMA,EAAEC,2BAA2B,EAEzC", + "names": ["adminGuard", "USER_MANAGEMENT_ROUTES", "path", "canActivate", "authGuard", "adminGuard", "loadComponent", "then", "m", "UserManagementPageComponent"] +} diff --git a/frontend/dist-instrumented/chunk-RSIG5MZX.js b/frontend/dist-instrumented/chunk-RSIG5MZX.js new file mode 100644 index 00000000..1679b800 --- /dev/null +++ b/frontend/dist-instrumented/chunk-RSIG5MZX.js @@ -0,0 +1,5 @@ +function cov_254z98dd6i(){var path="/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-RSIG5MZX.js";var hash="b48af9fb54dbb2c5c74664e50175c42b9b6a943a";var global=new Function("return this")();var gcv="__coverage__";var coverageData={path:"/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-RSIG5MZX.js",statementMap:{"0":{start:{line:1,column:655},end:{line:1,column:666}},"1":{start:{line:1,column:662},end:{line:1,column:666}},"2":{start:{line:1,column:683},end:{line:1,column:737}},"3":{start:{line:1,column:754},end:{line:1,column:992}},"4":{start:{line:1,column:848},end:{line:1,column:859}},"5":{start:{line:1,column:860},end:{line:1,column:991}},"6":{start:{line:1,column:999},end:{line:2,column:77}},"7":{start:{line:1,column:1019},end:{line:1,column:1024}},"8":{start:{line:1,column:1038},end:{line:1,column:1043}},"9":{start:{line:1,column:1062},end:{line:1,column:1116}},"10":{start:{line:1,column:1068},end:{line:1,column:1115}},"11":{start:{line:1,column:1091},end:{line:1,column:1107}},"12":{start:{line:1,column:1134},end:{line:1,column:1163}},"13":{start:{line:1,column:1146},end:{line:1,column:1162}},"14":{start:{line:1,column:1181},end:{line:2,column:64}},"15":{start:{line:1,column:1514},end:{line:1,column:1822}},"16":{start:{line:2,column:65},end:{line:2,column:73}},"17":{start:{line:2,column:85},end:{line:2,column:96}},"18":{start:{line:2,column:92},end:{line:2,column:96}},"19":{start:{line:2,column:114},end:{line:2,column:162}},"20":{start:{line:2,column:180},end:{line:2,column:234}},"21":{start:{line:2,column:252},end:{line:2,column:341}},"22":{start:{line:2,column:299},end:{line:2,column:310}},"23":{start:{line:2,column:311},end:{line:2,column:340}},"24":{start:{line:2,column:359},end:{line:2,column:574}},"25":{start:{line:2,column:373},end:{line:2,column:376}},"26":{start:{line:2,column:377},end:{line:2,column:573}},"27":{start:{line:2,column:475},end:{line:2,column:480}},"28":{start:{line:2,column:486},end:{line:2,column:490}},"29":{start:{line:2,column:491},end:{line:2,column:538}},"30":{start:{line:2,column:574},end:{line:2,column:643}},"31":{start:{line:2,column:588},end:{line:2,column:591}},"32":{start:{line:2,column:594},end:{line:2,column:597}},"33":{start:{line:2,column:598},end:{line:2,column:642}},"34":{start:{line:2,column:661},end:{line:2,column:709}},"35":{start:{line:2,column:727},end:{line:2,column:787}},"36":{start:{line:2,column:768},end:{line:2,column:771}},"37":{start:{line:2,column:772},end:{line:2,column:786}},"38":{start:{line:2,column:805},end:{line:2,column:980}},"39":{start:{line:2,column:934},end:{line:2,column:937}},"40":{start:{line:2,column:938},end:{line:2,column:979}},"41":{start:{line:2,column:998},end:{line:2,column:1087}},"42":{start:{line:2,column:1046},end:{line:2,column:1049}},"43":{start:{line:2,column:1050},end:{line:2,column:1086}},"44":{start:{line:2,column:1105},end:{line:2,column:1162}},"45":{start:{line:2,column:1180},end:{line:2,column:1238}},"46":{start:{line:2,column:1218},end:{line:2,column:1221}},"47":{start:{line:2,column:1222},end:{line:2,column:1237}},"48":{start:{line:2,column:1246},end:{line:3,column:85}},"49":{start:{line:2,column:1273},end:{line:2,column:1277}},"50":{start:{line:2,column:1289},end:{line:2,column:1293}},"51":{start:{line:2,column:1303},end:{line:2,column:1308}},"52":{start:{line:2,column:1318},end:{line:2,column:1323}},"53":{start:{line:2,column:1338},end:{line:2,column:1390}},"54":{start:{line:2,column:1383},end:{line:2,column:1388}},"55":{start:{line:2,column:1412},end:{line:2,column:1473}},"56":{start:{line:2,column:1466},end:{line:2,column:1471}},"57":{start:{line:2,column:1485},end:{line:2,column:1679}},"58":{start:{line:2,column:1520},end:{line:2,column:1559}},"59":{start:{line:2,column:1567},end:{line:2,column:1599}},"60":{start:{line:2,column:1609},end:{line:2,column:1676}},"61":{start:{line:2,column:1686},end:{line:2,column:1688}},"62":{start:{line:2,column:1707},end:{line:2,column:1709}},"63":{start:{line:2,column:1721},end:{line:2,column:1859}},"64":{start:{line:2,column:1823},end:{line:2,column:1857}},"65":{start:{line:2,column:1874},end:{line:2,column:1919}},"66":{start:{line:2,column:1943},end:{line:2,column:2049}},"67":{start:{line:2,column:2067},end:{line:2,column:2096}},"68":{start:{line:2,column:2079},end:{line:2,column:2095}},"69":{start:{line:2,column:2114},end:{line:3,column:72}},"70":{start:{line:2,column:2810},end:{line:2,column:3366}},"71":{start:{line:2,column:3215},end:{line:2,column:3365}},"72":{start:{line:3,column:73},end:{line:3,column:81}}},fnMap:{"0":{name:"(anonymous_0)",decl:{start:{line:1,column:655},end:{line:1,column:656}},loc:{start:{line:1,column:662},end:{line:1,column:666}},line:1},"1":{name:"Q",decl:{start:{line:1,column:676},end:{line:1,column:677}},loc:{start:{line:1,column:682},end:{line:1,column:738}},line:1},"2":{name:"X",decl:{start:{line:1,column:747},end:{line:1,column:748}},loc:{start:{line:1,column:753},end:{line:1,column:993}},line:1},"3":{name:"(anonymous_3)",decl:{start:{line:1,column:1000},end:{line:1,column:1001}},loc:{start:{line:1,column:1004},end:{line:2,column:74}},line:1},"4":{name:"(anonymous_4)",decl:{start:{line:1,column:1064},end:{line:1,column:1065}},loc:{start:{line:1,column:1068},end:{line:1,column:1115}},line:1},"5":{name:"(anonymous_5)",decl:{start:{line:1,column:1088},end:{line:1,column:1089}},loc:{start:{line:1,column:1091},end:{line:1,column:1107}},line:1},"6":{name:"(anonymous_6)",decl:{start:{line:1,column:1134},end:{line:1,column:1135}},loc:{start:{line:1,column:1145},end:{line:1,column:1163}},line:1},"7":{name:"(anonymous_7)",decl:{start:{line:1,column:1500},end:{line:1,column:1501}},loc:{start:{line:1,column:1513},end:{line:1,column:1823}},line:1},"8":{name:"(anonymous_8)",decl:{start:{line:2,column:85},end:{line:2,column:86}},loc:{start:{line:2,column:92},end:{line:2,column:96}},line:2},"9":{name:"et",decl:{start:{line:2,column:106},end:{line:2,column:108}},loc:{start:{line:2,column:113},end:{line:2,column:163}},line:2},"10":{name:"nt",decl:{start:{line:2,column:172},end:{line:2,column:174}},loc:{start:{line:2,column:179},end:{line:2,column:235}},line:2},"11":{name:"at",decl:{start:{line:2,column:244},end:{line:2,column:246}},loc:{start:{line:2,column:251},end:{line:2,column:342}},line:2},"12":{name:"it",decl:{start:{line:2,column:351},end:{line:2,column:353}},loc:{start:{line:2,column:358},end:{line:2,column:644}},line:2},"13":{name:"(anonymous_13)",decl:{start:{line:2,column:463},end:{line:2,column:464}},loc:{start:{line:2,column:474},end:{line:2,column:539}},line:2},"14":{name:"ot",decl:{start:{line:2,column:653},end:{line:2,column:655}},loc:{start:{line:2,column:660},end:{line:2,column:710}},line:2},"15":{name:"rt",decl:{start:{line:2,column:719},end:{line:2,column:721}},loc:{start:{line:2,column:726},end:{line:2,column:788}},line:2},"16":{name:"mt",decl:{start:{line:2,column:797},end:{line:2,column:799}},loc:{start:{line:2,column:804},end:{line:2,column:981}},line:2},"17":{name:"pt",decl:{start:{line:2,column:990},end:{line:2,column:992}},loc:{start:{line:2,column:997},end:{line:2,column:1088}},line:2},"18":{name:"lt",decl:{start:{line:2,column:1097},end:{line:2,column:1099}},loc:{start:{line:2,column:1104},end:{line:2,column:1163}},line:2},"19":{name:"ct",decl:{start:{line:2,column:1172},end:{line:2,column:1174}},loc:{start:{line:2,column:1179},end:{line:2,column:1239}},line:2},"20":{name:"(anonymous_20)",decl:{start:{line:2,column:1247},end:{line:2,column:1248}},loc:{start:{line:2,column:1251},end:{line:3,column:82}},line:2},"21":{name:"(anonymous_21)",decl:{start:{line:2,column:1380},end:{line:2,column:1381}},loc:{start:{line:2,column:1383},end:{line:2,column:1388}},line:2},"22":{name:"(anonymous_22)",decl:{start:{line:2,column:1462},end:{line:2,column:1463}},loc:{start:{line:2,column:1466},end:{line:2,column:1471}},line:2},"23":{name:"(anonymous_23)",decl:{start:{line:2,column:1516},end:{line:2,column:1517}},loc:{start:{line:2,column:1520},end:{line:2,column:1559}},line:2},"24":{name:"(anonymous_24)",decl:{start:{line:2,column:1563},end:{line:2,column:1564}},loc:{start:{line:2,column:1566},end:{line:2,column:1600}},line:2},"25":{name:"(anonymous_25)",decl:{start:{line:2,column:1604},end:{line:2,column:1605}},loc:{start:{line:2,column:1609},end:{line:2,column:1676}},line:2},"26":{name:"(anonymous_26)",decl:{start:{line:2,column:1710},end:{line:2,column:1711}},loc:{start:{line:2,column:1720},end:{line:2,column:1860}},line:2},"27":{name:"(anonymous_27)",decl:{start:{line:2,column:1818},end:{line:2,column:1819}},loc:{start:{line:2,column:1822},end:{line:2,column:1858}},line:2},"28":{name:"(anonymous_28)",decl:{start:{line:2,column:1860},end:{line:2,column:1861}},loc:{start:{line:2,column:1873},end:{line:2,column:1920}},line:2},"29":{name:"(anonymous_29)",decl:{start:{line:2,column:1920},end:{line:2,column:1921}},loc:{start:{line:2,column:1942},end:{line:2,column:2050}},line:2},"30":{name:"(anonymous_30)",decl:{start:{line:2,column:2067},end:{line:2,column:2068}},loc:{start:{line:2,column:2078},end:{line:2,column:2096}},line:2},"31":{name:"(anonymous_31)",decl:{start:{line:2,column:2796},end:{line:2,column:2797}},loc:{start:{line:2,column:2809},end:{line:2,column:3367}},line:2}},branchMap:{"0":{loc:{start:{line:1,column:683},end:{line:1,column:737}},type:"binary-expr",locations:[{start:{line:1,column:683},end:{line:1,column:686}},{start:{line:1,column:689},end:{line:1,column:736}}],line:1},"1":{loc:{start:{line:1,column:754},end:{line:1,column:992}},type:"if",locations:[{start:{line:1,column:754},end:{line:1,column:992}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"2":{loc:{start:{line:1,column:757},end:{line:1,column:836}},type:"binary-expr",locations:[{start:{line:1,column:757},end:{line:1,column:760}},{start:{line:1,column:763},end:{line:1,column:835}}],line:1},"3":{loc:{start:{line:1,column:969},end:{line:1,column:990}},type:"cond-expr",locations:[{start:{line:1,column:986},end:{line:1,column:987}},{start:{line:1,column:988},end:{line:1,column:990}}],line:1},"4":{loc:{start:{line:1,column:1157},end:{line:1,column:1161}},type:"binary-expr",locations:[{start:{line:1,column:1157},end:{line:1,column:1158}},{start:{line:1,column:1160},end:{line:1,column:1161}}],line:1},"5":{loc:{start:{line:1,column:1514},end:{line:1,column:1713}},type:"binary-expr",locations:[{start:{line:1,column:1514},end:{line:1,column:1517}},{start:{line:1,column:1520},end:{line:1,column:1712}}],line:1},"6":{loc:{start:{line:1,column:1714},end:{line:1,column:1822}},type:"binary-expr",locations:[{start:{line:1,column:1714},end:{line:1,column:1717}},{start:{line:1,column:1720},end:{line:1,column:1821}}],line:1},"7":{loc:{start:{line:2,column:114},end:{line:2,column:141}},type:"binary-expr",locations:[{start:{line:2,column:114},end:{line:2,column:117}},{start:{line:2,column:120},end:{line:2,column:140}}],line:2},"8":{loc:{start:{line:2,column:142},end:{line:2,column:162}},type:"binary-expr",locations:[{start:{line:2,column:142},end:{line:2,column:145}},{start:{line:2,column:148},end:{line:2,column:161}}],line:2},"9":{loc:{start:{line:2,column:180},end:{line:2,column:234}},type:"binary-expr",locations:[{start:{line:2,column:180},end:{line:2,column:183}},{start:{line:2,column:186},end:{line:2,column:233}}],line:2},"10":{loc:{start:{line:2,column:252},end:{line:2,column:341}},type:"if",locations:[{start:{line:2,column:252},end:{line:2,column:341}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:2},"11":{loc:{start:{line:2,column:255},end:{line:2,column:287}},type:"binary-expr",locations:[{start:{line:2,column:255},end:{line:2,column:258}},{start:{line:2,column:261},end:{line:2,column:286}}],line:2},"12":{loc:{start:{line:2,column:359},end:{line:2,column:574}},type:"if",locations:[{start:{line:2,column:359},end:{line:2,column:574}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:2},"13":{loc:{start:{line:2,column:574},end:{line:2,column:643}},type:"if",locations:[{start:{line:2,column:574},end:{line:2,column:643}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:2},"14":{loc:{start:{line:2,column:661},end:{line:2,column:685}},type:"binary-expr",locations:[{start:{line:2,column:661},end:{line:2,column:664}},{start:{line:2,column:666},end:{line:2,column:685}}],line:2},"15":{loc:{start:{line:2,column:686},end:{line:2,column:709}},type:"binary-expr",locations:[{start:{line:2,column:686},end:{line:2,column:689}},{start:{line:2,column:691},end:{line:2,column:709}}],line:2},"16":{loc:{start:{line:2,column:693},end:{line:2,column:708}},type:"cond-expr",locations:[{start:{line:2,column:704},end:{line:2,column:705}},{start:{line:2,column:706},end:{line:2,column:708}}],line:2},"17":{loc:{start:{line:2,column:727},end:{line:2,column:787}},type:"if",locations:[{start:{line:2,column:727},end:{line:2,column:787}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:2},"18":{loc:{start:{line:2,column:730},end:{line:2,column:756}},type:"binary-expr",locations:[{start:{line:2,column:730},end:{line:2,column:733}},{start:{line:2,column:736},end:{line:2,column:755}}],line:2},"19":{loc:{start:{line:2,column:805},end:{line:2,column:980}},type:"if",locations:[{start:{line:2,column:805},end:{line:2,column:980}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:2},"20":{loc:{start:{line:2,column:808},end:{line:2,column:922}},type:"binary-expr",locations:[{start:{line:2,column:808},end:{line:2,column:811}},{start:{line:2,column:814},end:{line:2,column:921}}],line:2},"21":{loc:{start:{line:2,column:998},end:{line:2,column:1087}},type:"if",locations:[{start:{line:2,column:998},end:{line:2,column:1087}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:2},"22":{loc:{start:{line:2,column:1001},end:{line:2,column:1032}},type:"binary-expr",locations:[{start:{line:2,column:1001},end:{line:2,column:1004}},{start:{line:2,column:1007},end:{line:2,column:1031}}],line:2},"23":{loc:{start:{line:2,column:1052},end:{line:2,column:1083}},type:"cond-expr",locations:[{start:{line:2,column:1079},end:{line:2,column:1080}},{start:{line:2,column:1081},end:{line:2,column:1083}}],line:2},"24":{loc:{start:{line:2,column:1105},end:{line:2,column:1162}},type:"binary-expr",locations:[{start:{line:2,column:1105},end:{line:2,column:1108}},{start:{line:2,column:1111},end:{line:2,column:1161}}],line:2},"25":{loc:{start:{line:2,column:1180},end:{line:2,column:1238}},type:"if",locations:[{start:{line:2,column:1180},end:{line:2,column:1238}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:2},"26":{loc:{start:{line:2,column:1183},end:{line:2,column:1206}},type:"binary-expr",locations:[{start:{line:2,column:1183},end:{line:2,column:1186}},{start:{line:2,column:1188},end:{line:2,column:1206}}],line:2},"27":{loc:{start:{line:2,column:1224},end:{line:2,column:1236}},type:"cond-expr",locations:[{start:{line:2,column:1232},end:{line:2,column:1234}},{start:{line:2,column:1235},end:{line:2,column:1236}}],line:2},"28":{loc:{start:{line:2,column:1383},end:{line:2,column:1388}},type:"binary-expr",locations:[{start:{line:2,column:1383},end:{line:2,column:1384}},{start:{line:2,column:1386},end:{line:2,column:1388}}],line:2},"29":{loc:{start:{line:2,column:1567},end:{line:2,column:1599}},type:"binary-expr",locations:[{start:{line:2,column:1567},end:{line:2,column:1568}},{start:{line:2,column:1571},end:{line:2,column:1598}}],line:2},"30":{loc:{start:{line:2,column:1721},end:{line:2,column:1859}},type:"binary-expr",locations:[{start:{line:2,column:1721},end:{line:2,column:1767}},{start:{line:2,column:1769},end:{line:2,column:1859}}],line:2},"31":{loc:{start:{line:2,column:1943},end:{line:2,column:2049}},type:"binary-expr",locations:[{start:{line:2,column:1943},end:{line:2,column:1945}},{start:{line:2,column:1947},end:{line:2,column:1973}},{start:{line:2,column:1976},end:{line:2,column:2048}}],line:2},"32":{loc:{start:{line:2,column:2090},end:{line:2,column:2094}},type:"binary-expr",locations:[{start:{line:2,column:2090},end:{line:2,column:2091}},{start:{line:2,column:2093},end:{line:2,column:2094}}],line:2},"33":{loc:{start:{line:2,column:2810},end:{line:2,column:3366}},type:"if",locations:[{start:{line:2,column:2810},end:{line:2,column:3366}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:2},"34":{loc:{start:{line:2,column:2813},end:{line:2,column:3199}},type:"binary-expr",locations:[{start:{line:2,column:2813},end:{line:2,column:2816}},{start:{line:2,column:2819},end:{line:2,column:3198}}],line:2},"35":{loc:{start:{line:2,column:3222},end:{line:2,column:3249}},type:"cond-expr",locations:[{start:{line:2,column:3246},end:{line:2,column:3247}},{start:{line:2,column:3248},end:{line:2,column:3249}}],line:2},"36":{loc:{start:{line:2,column:3260},end:{line:2,column:3300}},type:"cond-expr",locations:[{start:{line:2,column:3295},end:{line:2,column:3297}},{start:{line:2,column:3298},end:{line:2,column:3300}}],line:2},"37":{loc:{start:{line:2,column:3311},end:{line:2,column:3324}},type:"cond-expr",locations:[{start:{line:2,column:3319},end:{line:2,column:3321}},{start:{line:2,column:3322},end:{line:2,column:3324}}],line:2},"38":{loc:{start:{line:2,column:3332},end:{line:2,column:3362}},type:"cond-expr",locations:[{start:{line:2,column:3357},end:{line:2,column:3359}},{start:{line:2,column:3360},end:{line:2,column:3362}}],line:2}},s:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0},f:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0},b:{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0],"9":[0,0],"10":[0,0],"11":[0,0],"12":[0,0],"13":[0,0],"14":[0,0],"15":[0,0],"16":[0,0],"17":[0,0],"18":[0,0],"19":[0,0],"20":[0,0],"21":[0,0],"22":[0,0],"23":[0,0],"24":[0,0],"25":[0,0],"26":[0,0],"27":[0,0],"28":[0,0],"29":[0,0],"30":[0,0],"31":[0,0,0],"32":[0,0],"33":[0,0],"34":[0,0],"35":[0,0],"36":[0,0],"37":[0,0],"38":[0,0]},inputSourceMap:{version:3,sources:["src/app/features/apartment-monitor/components/alarm-map/alarm-map.component.ts","src/app/features/apartment-monitor/components/alarm-map/alarm-map.component.html","src/app/features/apartment-monitor/components/apartment-monitor/apartment-monitor.component.ts","src/app/features/apartment-monitor/components/apartment-monitor/apartment-monitor.component.html"],sourcesContent:["import { Component, computed, input } from '@angular/core';\nimport { ActiveAlarm } from '../../../../core/alarm/models/active-alarm.model';\nimport { Room } from '../../models/room.model';\n\n@Component({\n\tselector: 'app-alarm-map',\n\tstandalone: true,\n\ttemplateUrl: './alarm-map.component.html',\n\tstyleUrl: './alarm-map.component.css'\n})\nexport class AlarmMapComponent {\n\tpublic readonly rooms = input([]);\n\tpublic readonly activeAlarms = input([]);\n\n\tpublic readonly alarmedRoomsCount = computed(() => this.rooms().filter((room) => room.hasActiveAlarm).length);\n}\n","
\n
\n

Panoramica allarmi

\n

Allarmi attivi: {{ activeAlarms().length }}

\n
\n\n
\n @for (room of rooms(); track room.id) {\n
\n

{{ room.name }}

\n

{{ room.devices.length }} dispositivi

\n @if (room.hasActiveAlarm) {\n

Stanza con allarme attivo

\n }\n
\n }\n
\n\n

Stanze in allarme: {{ alarmedRoomsCount() }}

\n
\n","import { AsyncPipe } from '@angular/common';\nimport { Component, OnDestroy, OnInit, inject } from '@angular/core';\nimport { Observable, Subject, catchError, fromEvent, map, of, startWith, switchMap, takeUntil, tap } from 'rxjs';\nimport { AlarmStateService } from '../../../../core/alarm/services/alarm-state.service';\nimport { AlarmMapComponent } from '../alarm-map/alarm-map.component';\nimport { EndpointTableComponent } from '../../../device-interaction/components/endpoint-table/endpoint-table.component';\nimport { Apartment } from '../../models/apartment.model';\nimport { ApartmentApiService, ApartmentOption } from '../../services/apartment-api.service';\nimport {\n\tALARM_LIFECYCLE_UPDATED_EVENT,\n\tAlarmLifecycleUpdateDetail,\n} from '../../../../core/alarm/models/realtime-alarm-event.model';\n\n@Component({\n\tselector: 'app-apartment-monitor',\n\tstandalone: true,\n\timports: [AsyncPipe, AlarmMapComponent, EndpointTableComponent],\n\ttemplateUrl: './apartment-monitor.component.html',\n\tstyleUrl: './apartment-monitor.component.css'\n})\nexport class ApartmentMonitorComponent implements OnInit, OnDestroy {\n\tprivate readonly apartmentApi = inject(ApartmentApiService);\n\tprivate readonly alarmState = inject(AlarmStateService);\n\tprivate readonly refresh$ = new Subject();\n\tprivate readonly destroy$ = new Subject();\n\n\tpublic readonly activeAlarms$ = this.alarmState.getActiveAlarms$().pipe(map((alarms) => alarms ?? []));\n\tpublic readonly availableApartments$: Observable = this.apartmentApi.getAvailableApartments().pipe(\n\t\tcatchError(() => of([])),\n\t);\n\tpublic readonly apartment$: Observable = this.refresh$.pipe(\n\t\tstartWith(void 0),\n\t\tswitchMap(() => this.apartmentApi.getCurrentApartment()),\n\t\ttap((apartment) => {\n\t\t\tif (apartment) {\n\t\t\t\tthis.activeApartmentId = apartment.id;\n\t\t\t}\n\t\t}),\n\t\tcatchError(() => {\n\t\t\tthis.error = 'Impossibile caricare i dati dell\\'appartamento.';\n\t\t\treturn of(null);\n\t\t})\n\t);\n\n\tpublic error = '';\n\tpublic activeApartmentId = '';\n\n\tpublic ngOnInit(): void {\n\t\tif (typeof globalThis.addEventListener !== 'function') {\n\t\t\treturn;\n\t\t}\n\n\t\tfromEvent>(\n\t\t\tglobalThis,\n\t\t\tALARM_LIFECYCLE_UPDATED_EVENT,\n\t\t)\n\t\t\t.pipe(takeUntil(this.destroy$))\n\t\t\t.subscribe(() => {\n\t\t\t\tthis.error = '';\n\t\t\t\tthis.refresh$.next();\n\t\t\t});\n\t}\n\n\tpublic ngOnDestroy(): void {\n\t\tthis.destroy$.next();\n\t\tthis.destroy$.complete();\n\t}\n\n\tpublic onApartmentSelected(apartmentId: string): void {\n\t\tif (!apartmentId || apartmentId === this.activeApartmentId) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.apartmentApi.setActivePlantId(apartmentId);\n\t\tthis.error = '';\n\t\tthis.refresh$.next();\n\t}\n}\n","
\n
\n
\n

Monitor appartamento

\n @if (apartment$ | async; as apartment) {\n

{{ apartment.name }}

\n } @else {\n

Panoramica casa connessa

\n }\n

Monitoraggio stato appartamento e accesso rapido alle stanze.

\n
\n\n
\n

\n \n Monitor live\n

\n\n @if (availableApartments$ | async; as apartments) {\n @if (apartments.length > 0) {\n
\n \n \n @for (apartmentOption of apartments; track apartmentOption.id) {\n \n }\n \n
\n }\n }\n
\n
\n\n @if (error) {\n

{{ error }}

\n }\n\n @if (apartment$ | async; as apartment) {\n @if (activeAlarms$ | async; as activeAlarms) {\n
\n
\n \n
\n
\n\n
\n \n
\n }\n } @else {\n @if (!error) {\n

Caricamento appartamento...

\n }\n }\n
\n"],mappings:"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",names:["\u0275\u0275domElementStart","\u0275\u0275text","\u0275\u0275domElementEnd","\u0275\u0275conditionalCreate","AlarmMapComponent_For_10_Conditional_5_Template","\u0275\u0275classProp","room_r1","hasActiveAlarm","\u0275\u0275advance","\u0275\u0275textInterpolate","name","\u0275\u0275textInterpolate1","devices","length","\u0275\u0275conditional","AlarmMapComponent","rooms","input","activeAlarms","alarmedRoomsCount","computed","filter","room","selectors","inputs","decls","vars","consts","template","rf","ctx","\u0275\u0275repeaterCreate","AlarmMapComponent_For_10_Template","_forTrack0","\u0275\u0275repeater","\u0275\u0275elementStart","\u0275\u0275text","\u0275\u0275elementEnd","\u0275\u0275advance","\u0275\u0275textInterpolate","ctx","name","\u0275\u0275property","apartmentOption_r3","id","\u0275\u0275listener","$event","\u0275\u0275restoreView","_r1","ctx_r1","\u0275\u0275nextContext","\u0275\u0275resetView","onApartmentSelected","target","value","\u0275\u0275repeaterCreate","ApartmentMonitorComponent_Conditional_14_Conditional_0_For_5_Template","_forTrack0","activeApartmentId","\u0275\u0275repeater","apartments_r4","\u0275\u0275conditionalCreate","ApartmentMonitorComponent_Conditional_14_Conditional_0_Template","\u0275\u0275conditional","length","error","\u0275\u0275element","apartment_r5","rooms","ApartmentMonitorComponent_Conditional_17_Conditional_0_Template","tmp_2_0","\u0275\u0275pipeBind1","activeAlarms$","ApartmentMonitorComponent_Conditional_19_Conditional_0_Template","ApartmentMonitorComponent","apartmentApi","inject","ApartmentApiService","alarmState","AlarmStateService","refresh$","Subject","destroy$","getActiveAlarms$","pipe","map","alarms","availableApartments$","getAvailableApartments","catchError","of","apartment$","startWith","switchMap","getCurrentApartment","tap","apartment","ngOnInit","globalThis","addEventListener","fromEvent","ALARM_LIFECYCLE_UPDATED_EVENT","takeUntil","subscribe","next","ngOnDestroy","complete","apartmentId","setActivePlantId","selectors","decls","vars","consts","template","rf","ApartmentMonitorComponent_Conditional_5_Template","\u0275\u0275conditionalBranchCreate","ApartmentMonitorComponent_Conditional_7_Template","ApartmentMonitorComponent_Conditional_14_Template","ApartmentMonitorComponent_Conditional_16_Template","ApartmentMonitorComponent_Conditional_17_Template","ApartmentMonitorComponent_Conditional_19_Template","tmp_0_0","tmp_1_0","tmp_3_0","AlarmMapComponent","EndpointTableComponent","AsyncPipe","styles"]},_coverageSchema:"1a1c01bbd47fc00a2c39e90264f33305004495a9",hash:"b48af9fb54dbb2c5c74664e50175c42b9b6a943a"};var coverage=global[gcv]||(global[gcv]={});if(!coverage[path]||coverage[path].hash!==hash){coverage[path]=coverageData;}var actualCoverage=coverage[path];{// @ts-ignore +cov_254z98dd6i=function(){return actualCoverage;};}return actualCoverage;}cov_254z98dd6i();import{a as W}from"./chunk-4QFEXKFV.js";import{a as K}from"./chunk-QFTDGRKT.js";import"./chunk-HTKPMSJ5.js";import{a as J}from"./chunk-666MVPNS.js";import"./chunk-EZ7WFT6U.js";import{a as G}from"./chunk-CX4DL26R.js";import"./chunk-65RKWSY3.js";import"./chunk-2S5V5XEE.js";import{h as Y}from"./chunk-F6OGAIBI.js";import{Ab as i,Bb as C,Cb as S,E as z,F as L,G as F,H as B,Ib as g,Jb as f,Ka as v,Pb as V,Q as y,Tb as T,V as R,W as k,Ya as l,Za as b,_a as c,ab as M,bb as u,cb as x,d as E,db as m,eb as o,fb as A,gb as d,h as P,hb as _,jb as N,m as I,nb as j,pb as s,t as D,w as O,wa as a,yb as U}from"./chunk-RYTNMYZW.js";import"./chunk-VCZGUBMY.js";cov_254z98dd6i().s[0]++;var H=(t,n)=>{cov_254z98dd6i().f[0]++;cov_254z98dd6i().s[1]++;return n.id;};function Q(t,n){cov_254z98dd6i().f[1]++;cov_254z98dd6i().s[2]++;(cov_254z98dd6i().b[0][0]++,t&1)&&(cov_254z98dd6i().b[0][1]++,d(0,"p",5),i(1,"Stanza con allarme attivo"),_());}function X(t,n){cov_254z98dd6i().f[2]++;cov_254z98dd6i().s[3]++;if((cov_254z98dd6i().b[2][0]++,t&1)&&(cov_254z98dd6i().b[2][1]++,d(0,"article",4)(1,"h3"),i(2),_(),d(3,"p"),i(4),_(),l(5,Q,2,0,"p",5),_()),t&2){cov_254z98dd6i().b[1][0]++;let e=(cov_254z98dd6i().s[4]++,n.$implicit);cov_254z98dd6i().s[5]++;U("alarm-map__room--alert",e.hasActiveAlarm),a(2),C(e.name),a(2),S("",e.devices.length," dispositivi"),a(),c(e.hasActiveAlarm?(cov_254z98dd6i().b[3][0]++,5):(cov_254z98dd6i().b[3][1]++,-1));}else{cov_254z98dd6i().b[1][1]++;}}var Z=(cov_254z98dd6i().s[6]++,(()=>{cov_254z98dd6i().f[3]++;class t{rooms=(cov_254z98dd6i().s[7]++,T([]));activeAlarms=(cov_254z98dd6i().s[8]++,T([]));alarmedRoomsCount=(cov_254z98dd6i().s[9]++,V(()=>{cov_254z98dd6i().f[4]++;cov_254z98dd6i().s[10]++;return this.rooms().filter(e=>{cov_254z98dd6i().f[5]++;cov_254z98dd6i().s[11]++;return e.hasActiveAlarm;}).length;}));static ɵfac=(cov_254z98dd6i().s[12]++,function(r){cov_254z98dd6i().f[6]++;cov_254z98dd6i().s[13]++;return new((cov_254z98dd6i().b[4][0]++,r)||(cov_254z98dd6i().b[4][1]++,t))();});static ɵcmp=(cov_254z98dd6i().s[14]++,v({type:t,selectors:[["app-alarm-map"]],inputs:{rooms:[1,"rooms"],activeAlarms:[1,"activeAlarms"]},decls:13,vars:2,consts:[["aria-label","Mappa allarmi",1,"alarm-map"],[1,"alarm-map__grid"],[1,"alarm-map__room",3,"alarm-map__room--alert"],[1,"alarm-map__summary"],[1,"alarm-map__room"],[1,"alarm-map__alert"]],template:function(r,p){cov_254z98dd6i().f[7]++;cov_254z98dd6i().s[15]++;(cov_254z98dd6i().b[5][0]++,r&1)&&(cov_254z98dd6i().b[5][1]++,d(0,"section",0)(1,"header")(2,"h2"),i(3,"Panoramica allarmi"),_(),d(4,"p"),i(5,"Allarmi attivi: "),d(6,"strong"),i(7),_()()(),d(8,"div",1),M(9,X,6,5,"article",2,H),_(),d(11,"p",3),i(12),_()()),(cov_254z98dd6i().b[6][0]++,r&2)&&(cov_254z98dd6i().b[6][1]++,a(7),C(p.activeAlarms().length),a(2),u(p.rooms()),a(3),S("Stanze in allarme: ",p.alarmedRoomsCount()));},styles:[`.alarm-map[_ngcontent-%COMP%]{display:grid;gap:.85rem}.alarm-map[_ngcontent-%COMP%] header[_ngcontent-%COMP%] h2[_ngcontent-%COMP%], .alarm-map[_ngcontent-%COMP%] header[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:0}.alarm-map[_ngcontent-%COMP%] header[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{font-size:1rem;font-family:var(--care-font-display);color:#0f172a}.alarm-map[_ngcontent-%COMP%] header[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin-top:.25rem;font-size:.84rem;color:#64748b}.alarm-map__grid[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(auto-fit,minmax(9rem,1fr));gap:.7rem}.alarm-map__room[_ngcontent-%COMP%]{border:1px solid #dbe3ec;border-radius:.75rem;padding:.8rem;background:#f8fafccc}.alarm-map__room--alert[_ngcontent-%COMP%]{border-color:#fecdd3;background:#fff1f2}.alarm-map__room[_ngcontent-%COMP%] h3[_ngcontent-%COMP%], .alarm-map__room[_ngcontent-%COMP%] p[_ngcontent-%COMP%], .alarm-map__summary[_ngcontent-%COMP%]{margin:0}.alarm-map__room[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{font-size:.92rem;color:#0f172a}.alarm-map__room[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin-top:.25rem;font-size:.8rem;color:#64748b}.alarm-map__alert[_ngcontent-%COMP%]{color:#be123c;font-size:.78rem;margin-top:.25rem}.alarm-map__summary[_ngcontent-%COMP%]{font-size:.82rem;color:#334155} +/*# sourceMappingURL=alarm-map.component-KGOYFFNJ.css.map */`]}));}cov_254z98dd6i().s[16]++;return t;})());cov_254z98dd6i().s[17]++;var tt=(t,n)=>{cov_254z98dd6i().f[8]++;cov_254z98dd6i().s[18]++;return n.id;};function et(t,n){cov_254z98dd6i().f[9]++;cov_254z98dd6i().s[19]++;(cov_254z98dd6i().b[7][0]++,t&1)&&(cov_254z98dd6i().b[7][1]++,m(0,"h1",3),i(1),o()),(cov_254z98dd6i().b[8][0]++,t&2)&&(cov_254z98dd6i().b[8][1]++,a(),C(n.name));}function nt(t,n){cov_254z98dd6i().f[10]++;cov_254z98dd6i().s[20]++;(cov_254z98dd6i().b[9][0]++,t&1)&&(cov_254z98dd6i().b[9][1]++,m(0,"h1",3),i(1,"Panoramica casa connessa"),o());}function at(t,n){cov_254z98dd6i().f[11]++;cov_254z98dd6i().s[21]++;if((cov_254z98dd6i().b[11][0]++,t&1)&&(cov_254z98dd6i().b[11][1]++,m(0,"option",12),i(1),o()),t&2){cov_254z98dd6i().b[10][0]++;let e=(cov_254z98dd6i().s[22]++,n.$implicit);cov_254z98dd6i().s[23]++;x("value",e.id),a(),C(e.name);}else{cov_254z98dd6i().b[10][1]++;}}function it(t,n){cov_254z98dd6i().f[12]++;cov_254z98dd6i().s[24]++;if(t&1){cov_254z98dd6i().b[12][0]++;let e=(cov_254z98dd6i().s[25]++,N());cov_254z98dd6i().s[26]++;m(0,"div",9)(1,"label",10),i(2,"Appartamento attivo"),o(),m(3,"select",11),j("change",function(p){cov_254z98dd6i().f[13]++;cov_254z98dd6i().s[27]++;R(e);let h=(cov_254z98dd6i().s[28]++,s(2));cov_254z98dd6i().s[29]++;return k(h.onApartmentSelected(p.target.value));}),M(4,at,2,2,"option",12,tt),o()();}else{cov_254z98dd6i().b[12][1]++;}cov_254z98dd6i().s[30]++;if(t&2){cov_254z98dd6i().b[13][0]++;let e=(cov_254z98dd6i().s[31]++,s()),r=(cov_254z98dd6i().s[32]++,s());cov_254z98dd6i().s[33]++;a(3),x("value",r.activeApartmentId),a(),u(e);}else{cov_254z98dd6i().b[13][1]++;}}function ot(t,n){cov_254z98dd6i().f[14]++;cov_254z98dd6i().s[34]++;(cov_254z98dd6i().b[14][0]++,t&1)&&(cov_254z98dd6i().b[14][1]++,l(0,it,6,1,"div",9)),(cov_254z98dd6i().b[15][0]++,t&2)&&(cov_254z98dd6i().b[15][1]++,c(n.length>0?(cov_254z98dd6i().b[16][0]++,0):(cov_254z98dd6i().b[16][1]++,-1)));}function rt(t,n){cov_254z98dd6i().f[15]++;cov_254z98dd6i().s[35]++;if((cov_254z98dd6i().b[18][0]++,t&1)&&(cov_254z98dd6i().b[18][1]++,m(0,"p",8),i(1),o()),t&2){cov_254z98dd6i().b[17][0]++;let e=(cov_254z98dd6i().s[36]++,s());cov_254z98dd6i().s[37]++;a(),C(e.error);}else{cov_254z98dd6i().b[17][1]++;}}function mt(t,n){cov_254z98dd6i().f[16]++;cov_254z98dd6i().s[38]++;if((cov_254z98dd6i().b[20][0]++,t&1)&&(cov_254z98dd6i().b[20][1]++,m(0,"div",13)(1,"section",14),A(2,"app-alarm-map",15),o()(),m(3,"section",14),A(4,"app-endpoint-table"),o()),t&2){cov_254z98dd6i().b[19][0]++;let e=(cov_254z98dd6i().s[39]++,s());cov_254z98dd6i().s[40]++;a(2),x("rooms",e.rooms)("activeAlarms",n);}else{cov_254z98dd6i().b[19][1]++;}}function pt(t,n){cov_254z98dd6i().f[17]++;cov_254z98dd6i().s[41]++;if((cov_254z98dd6i().b[22][0]++,t&1)&&(cov_254z98dd6i().b[22][1]++,l(0,mt,5,2),g(1,"async")),t&2){cov_254z98dd6i().b[21][0]++;let e,r=(cov_254z98dd6i().s[42]++,s());cov_254z98dd6i().s[43]++;c((e=f(1,1,r.activeAlarms$))?(cov_254z98dd6i().b[23][0]++,0):(cov_254z98dd6i().b[23][1]++,-1),e);}else{cov_254z98dd6i().b[21][1]++;}}function lt(t,n){cov_254z98dd6i().f[18]++;cov_254z98dd6i().s[44]++;(cov_254z98dd6i().b[24][0]++,t&1)&&(cov_254z98dd6i().b[24][1]++,m(0,"p",16),i(1,"Caricamento appartamento..."),o());}function ct(t,n){cov_254z98dd6i().f[19]++;cov_254z98dd6i().s[45]++;if((cov_254z98dd6i().b[26][0]++,t&1)&&(cov_254z98dd6i().b[26][1]++,l(0,lt,2,0,"p",16)),t&2){cov_254z98dd6i().b[25][0]++;let e=(cov_254z98dd6i().s[46]++,s());cov_254z98dd6i().s[47]++;c(e.error?(cov_254z98dd6i().b[27][0]++,-1):(cov_254z98dd6i().b[27][1]++,0));}else{cov_254z98dd6i().b[25][1]++;}}var Et=(cov_254z98dd6i().s[48]++,(()=>{cov_254z98dd6i().f[20]++;class t{apartmentApi=(cov_254z98dd6i().s[49]++,y(K));alarmState=(cov_254z98dd6i().s[50]++,y(G));refresh$=(cov_254z98dd6i().s[51]++,new E());destroy$=(cov_254z98dd6i().s[52]++,new E());activeAlarms$=(cov_254z98dd6i().s[53]++,this.alarmState.getActiveAlarms$().pipe(I(e=>{cov_254z98dd6i().f[21]++;cov_254z98dd6i().s[54]++;return(cov_254z98dd6i().b[28][0]++,e)??(cov_254z98dd6i().b[28][1]++,[]);})));availableApartments$=(cov_254z98dd6i().s[55]++,this.apartmentApi.getAvailableApartments().pipe(O(()=>{cov_254z98dd6i().f[22]++;cov_254z98dd6i().s[56]++;return P([]);})));apartment$=(cov_254z98dd6i().s[57]++,this.refresh$.pipe(z(void 0),L(()=>{cov_254z98dd6i().f[23]++;cov_254z98dd6i().s[58]++;return this.apartmentApi.getCurrentApartment();}),B(e=>{cov_254z98dd6i().f[24]++;cov_254z98dd6i().s[59]++;(cov_254z98dd6i().b[29][0]++,e)&&(cov_254z98dd6i().b[29][1]++,this.activeApartmentId=e.id);}),O(()=>{cov_254z98dd6i().f[25]++;cov_254z98dd6i().s[60]++;return this.error="Impossibile caricare i dati dell'appartamento.",P(null);})));error=(cov_254z98dd6i().s[61]++,"");activeApartmentId=(cov_254z98dd6i().s[62]++,"");ngOnInit(){cov_254z98dd6i().f[26]++;cov_254z98dd6i().s[63]++;(cov_254z98dd6i().b[30][0]++,typeof globalThis.addEventListener=="function")&&(cov_254z98dd6i().b[30][1]++,D(globalThis,J).pipe(F(this.destroy$)).subscribe(()=>{cov_254z98dd6i().f[27]++;cov_254z98dd6i().s[64]++;this.error="",this.refresh$.next();}));}ngOnDestroy(){cov_254z98dd6i().f[28]++;cov_254z98dd6i().s[65]++;this.destroy$.next(),this.destroy$.complete();}onApartmentSelected(e){cov_254z98dd6i().f[29]++;cov_254z98dd6i().s[66]++;(cov_254z98dd6i().b[31][0]++,!e)||(cov_254z98dd6i().b[31][1]++,e===this.activeApartmentId)||(cov_254z98dd6i().b[31][2]++,this.apartmentApi.setActivePlantId(e),this.error="",this.refresh$.next());}static ɵfac=(cov_254z98dd6i().s[67]++,function(r){cov_254z98dd6i().f[30]++;cov_254z98dd6i().s[68]++;return new((cov_254z98dd6i().b[32][0]++,r)||(cov_254z98dd6i().b[32][1]++,t))();});static ɵcmp=(cov_254z98dd6i().s[69]++,v({type:t,selectors:[["app-apartment-monitor"]],decls:20,vars:10,consts:[["aria-label","Monitor appartamento",1,"apartment-monitor","care-page","care-dot-grid"],[1,"care-page__hero"],[1,"care-eyebrow"],[1,"care-title"],[1,"care-subtitle"],[1,"apartment-monitor__hero-side"],[1,"care-chip"],["aria-hidden","true",1,"care-chip__dot"],["role","alert",1,"care-alert"],[1,"care-field","apartment-monitor__selector"],["for","active-apartment"],["id","active-apartment",1,"care-select",3,"change","value"],[3,"value"],[1,"apartment-monitor__content"],[1,"care-panel","apartment-monitor__panel","apartment-monitor__panel--highlight"],[3,"rooms","activeAlarms"],[1,"care-loading"]],template:function(r,p){cov_254z98dd6i().f[31]++;cov_254z98dd6i().s[70]++;if((cov_254z98dd6i().b[34][0]++,r&1)&&(cov_254z98dd6i().b[34][1]++,m(0,"section",0)(1,"header",1)(2,"div")(3,"p",2),i(4,"Monitor appartamento"),o(),l(5,et,2,1,"h1",3),g(6,"async"),b(7,nt,2,0,"h1",3),m(8,"p",4),i(9,"Monitoraggio stato appartamento e accesso rapido alle stanze."),o()(),m(10,"div",5)(11,"p",6),A(12,"span",7),i(13," Monitor live "),o(),l(14,ot,1,1),g(15,"async"),o()(),l(16,rt,2,1,"p",8),l(17,pt,2,3),g(18,"async"),b(19,ct,1,1),o()),r&2){cov_254z98dd6i().b[33][0]++;let h,$,w;cov_254z98dd6i().s[71]++;a(5),c((h=f(6,4,p.apartment$))?(cov_254z98dd6i().b[35][0]++,5):(cov_254z98dd6i().b[35][1]++,7),h),a(9),c(($=f(15,6,p.availableApartments$))?(cov_254z98dd6i().b[36][0]++,14):(cov_254z98dd6i().b[36][1]++,-1),$),a(2),c(p.error?(cov_254z98dd6i().b[37][0]++,16):(cov_254z98dd6i().b[37][1]++,-1)),a(),c((w=f(18,8,p.apartment$))?(cov_254z98dd6i().b[38][0]++,17):(cov_254z98dd6i().b[38][1]++,19),w);}else{cov_254z98dd6i().b[33][1]++;}},dependencies:[Z,W,Y],styles:[`.apartment-monitor[_ngcontent-%COMP%]{gap:1.25rem}.apartment-monitor__hero-side[_ngcontent-%COMP%]{display:grid;gap:.65rem;justify-items:end;min-width:0}.apartment-monitor__selector[_ngcontent-%COMP%]{min-width:100%;max-width:19rem}.apartment-monitor__content[_ngcontent-%COMP%]{display:grid;grid-template-columns:1fr;gap:1rem}.apartment-monitor__panel[_ngcontent-%COMP%]{min-height:100%}.apartment-monitor__panel--highlight[_ngcontent-%COMP%]{border-color:#f59e0b4d;box-shadow:0 12px 24px -22px #f59e0b8c}@media(max-width:960px){.apartment-monitor__content[_ngcontent-%COMP%]{grid-template-columns:1fr}.apartment-monitor__hero-side[_ngcontent-%COMP%]{justify-items:stretch;min-width:0}.apartment-monitor__selector[_ngcontent-%COMP%]{max-width:none}} +/*# sourceMappingURL=apartment-monitor.component-L7ILMCZL.css.map */`]}));}cov_254z98dd6i().s[72]++;return t;})());export{Et as ApartmentMonitorComponent};//# sourceMappingURL=chunk-RSIG5MZX.js.map +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJkIiwiaSIsIl8iLCJYIiwidCIsIm4iLCJjb3ZfMjU0ejk4ZGQ2aSIsImYiLCJzIiwiYiIsImwiLCJRIiwiZSIsIiRpbXBsaWNpdCIsIlUiLCJoYXNBY3RpdmVBbGFybSIsImEiLCJDIiwibmFtZSIsIlMiLCJkZXZpY2VzIiwibGVuZ3RoIiwiYyIsIloiLCJyb29tcyIsIlQiLCJhY3RpdmVBbGFybXMiLCJhbGFybWVkUm9vbXNDb3VudCIsIlYiLCJmaWx0ZXIiLCLJtWZhYyIsInIiLCLJtWNtcCIsInYiLCJ0eXBlIiwic2VsZWN0b3JzIiwiaW5wdXRzIiwiZGVjbHMiLCJ2YXJzIiwiY29uc3RzIiwidGVtcGxhdGUiLCJwIiwiTSIsIkgiLCJ1Iiwic3R5bGVzIiwidHQiLCJpZCIsImV0IiwibSIsIm8iLCJudCIsImF0IiwieCIsIml0IiwiTiIsImoiLCJSIiwiaCIsImsiLCJvbkFwYXJ0bWVudFNlbGVjdGVkIiwidGFyZ2V0IiwidmFsdWUiLCJhY3RpdmVBcGFydG1lbnRJZCIsIm90IiwicnQiLCJlcnJvciIsIm10IiwiQSIsInB0IiwiZyIsImFjdGl2ZUFsYXJtcyQiLCJsdCIsImN0IiwiRXQiLCJhcGFydG1lbnRBcGkiLCJ5IiwiSyIsImFsYXJtU3RhdGUiLCJHIiwicmVmcmVzaCQiLCJFIiwiZGVzdHJveSQiLCJnZXRBY3RpdmVBbGFybXMkIiwicGlwZSIsIkkiLCJhdmFpbGFibGVBcGFydG1lbnRzJCIsImdldEF2YWlsYWJsZUFwYXJ0bWVudHMiLCJPIiwiUCIsImFwYXJ0bWVudCQiLCJ6IiwiTCIsImdldEN1cnJlbnRBcGFydG1lbnQiLCJCIiwibmdPbkluaXQiLCJnbG9iYWxUaGlzIiwiYWRkRXZlbnRMaXN0ZW5lciIsIkQiLCJKIiwiRiIsInN1YnNjcmliZSIsIm5leHQiLCJuZ09uRGVzdHJveSIsImNvbXBsZXRlIiwic2V0QWN0aXZlUGxhbnRJZCIsIiQiLCJ3IiwiZGVwZW5kZW5jaWVzIiwiVyIsIlkiLCJBcGFydG1lbnRNb25pdG9yQ29tcG9uZW50Il0sInNvdXJjZXMiOlsic3JjL2FwcC9mZWF0dXJlcy9hcGFydG1lbnQtbW9uaXRvci9jb21wb25lbnRzL2FsYXJtLW1hcC9hbGFybS1tYXAuY29tcG9uZW50LnRzIiwic3JjL2FwcC9mZWF0dXJlcy9hcGFydG1lbnQtbW9uaXRvci9jb21wb25lbnRzL2FsYXJtLW1hcC9hbGFybS1tYXAuY29tcG9uZW50Lmh0bWwiLCJzcmMvYXBwL2ZlYXR1cmVzL2FwYXJ0bWVudC1tb25pdG9yL2NvbXBvbmVudHMvYXBhcnRtZW50LW1vbml0b3IvYXBhcnRtZW50LW1vbml0b3IuY29tcG9uZW50LnRzIiwic3JjL2FwcC9mZWF0dXJlcy9hcGFydG1lbnQtbW9uaXRvci9jb21wb25lbnRzL2FwYXJ0bWVudC1tb25pdG9yL2FwYXJ0bWVudC1tb25pdG9yLmNvbXBvbmVudC5odG1sIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgY29tcHV0ZWQsIGlucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3RpdmVBbGFybSB9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUvYWxhcm0vbW9kZWxzL2FjdGl2ZS1hbGFybS5tb2RlbCc7XG5pbXBvcnQgeyBSb29tIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3Jvb20ubW9kZWwnO1xuXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6ICdhcHAtYWxhcm0tbWFwJyxcblx0c3RhbmRhbG9uZTogdHJ1ZSxcblx0dGVtcGxhdGVVcmw6ICcuL2FsYXJtLW1hcC5jb21wb25lbnQuaHRtbCcsXG5cdHN0eWxlVXJsOiAnLi9hbGFybS1tYXAuY29tcG9uZW50LmNzcydcbn0pXG5leHBvcnQgY2xhc3MgQWxhcm1NYXBDb21wb25lbnQge1xuXHRwdWJsaWMgcmVhZG9ubHkgcm9vbXMgPSBpbnB1dDxSb29tW10+KFtdKTtcblx0cHVibGljIHJlYWRvbmx5IGFjdGl2ZUFsYXJtcyA9IGlucHV0PEFjdGl2ZUFsYXJtW10+KFtdKTtcblxuXHRwdWJsaWMgcmVhZG9ubHkgYWxhcm1lZFJvb21zQ291bnQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnJvb21zKCkuZmlsdGVyKChyb29tKSA9PiByb29tLmhhc0FjdGl2ZUFsYXJtKS5sZW5ndGgpO1xufVxuIiwiPHNlY3Rpb24gY2xhc3M9XCJhbGFybS1tYXBcIiBhcmlhLWxhYmVsPVwiTWFwcGEgYWxsYXJtaVwiPlxuICA8aGVhZGVyPlxuICAgIDxoMj5QYW5vcmFtaWNhIGFsbGFybWk8L2gyPlxuICAgIDxwPkFsbGFybWkgYXR0aXZpOiA8c3Ryb25nPnt7IGFjdGl2ZUFsYXJtcygpLmxlbmd0aCB9fTwvc3Ryb25nPjwvcD5cbiAgPC9oZWFkZXI+XG5cbiAgPGRpdiBjbGFzcz1cImFsYXJtLW1hcF9fZ3JpZFwiPlxuICAgIEBmb3IgKHJvb20gb2Ygcm9vbXMoKTsgdHJhY2sgcm9vbS5pZCkge1xuICAgICAgPGFydGljbGUgY2xhc3M9XCJhbGFybS1tYXBfX3Jvb21cIiBbY2xhc3MuYWxhcm0tbWFwX19yb29tLS1hbGVydF09XCJyb29tLmhhc0FjdGl2ZUFsYXJtXCI+XG4gICAgICAgIDxoMz57eyByb29tLm5hbWUgfX08L2gzPlxuICAgICAgICA8cD57eyByb29tLmRldmljZXMubGVuZ3RoIH19IGRpc3Bvc2l0aXZpPC9wPlxuICAgICAgICBAaWYgKHJvb20uaGFzQWN0aXZlQWxhcm0pIHtcbiAgICAgICAgICA8cCBjbGFzcz1cImFsYXJtLW1hcF9fYWxlcnRcIj5TdGFuemEgY29uIGFsbGFybWUgYXR0aXZvPC9wPlxuICAgICAgICB9XG4gICAgICA8L2FydGljbGU+XG4gICAgfVxuICA8L2Rpdj5cblxuICA8cCBjbGFzcz1cImFsYXJtLW1hcF9fc3VtbWFyeVwiPlN0YW56ZSBpbiBhbGxhcm1lOiB7eyBhbGFybWVkUm9vbXNDb3VudCgpIH19PC9wPlxuPC9zZWN0aW9uPlxuIiwiaW1wb3J0IHsgQXN5bmNQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgT25EZXN0cm95LCBPbkluaXQsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCwgY2F0Y2hFcnJvciwgZnJvbUV2ZW50LCBtYXAsIG9mLCBzdGFydFdpdGgsIHN3aXRjaE1hcCwgdGFrZVVudGlsLCB0YXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFsYXJtU3RhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS9hbGFybS9zZXJ2aWNlcy9hbGFybS1zdGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IEFsYXJtTWFwQ29tcG9uZW50IH0gZnJvbSAnLi4vYWxhcm0tbWFwL2FsYXJtLW1hcC5jb21wb25lbnQnO1xuaW1wb3J0IHsgRW5kcG9pbnRUYWJsZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2RldmljZS1pbnRlcmFjdGlvbi9jb21wb25lbnRzL2VuZHBvaW50LXRhYmxlL2VuZHBvaW50LXRhYmxlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBcGFydG1lbnQgfSBmcm9tICcuLi8uLi9tb2RlbHMvYXBhcnRtZW50Lm1vZGVsJztcbmltcG9ydCB7IEFwYXJ0bWVudEFwaVNlcnZpY2UsIEFwYXJ0bWVudE9wdGlvbiB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2FwYXJ0bWVudC1hcGkuc2VydmljZSc7XG5pbXBvcnQge1xuXHRBTEFSTV9MSUZFQ1lDTEVfVVBEQVRFRF9FVkVOVCxcblx0QWxhcm1MaWZlY3ljbGVVcGRhdGVEZXRhaWwsXG59IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUvYWxhcm0vbW9kZWxzL3JlYWx0aW1lLWFsYXJtLWV2ZW50Lm1vZGVsJztcblxuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiAnYXBwLWFwYXJ0bWVudC1tb25pdG9yJyxcblx0c3RhbmRhbG9uZTogdHJ1ZSxcblx0aW1wb3J0czogW0FzeW5jUGlwZSwgQWxhcm1NYXBDb21wb25lbnQsIEVuZHBvaW50VGFibGVDb21wb25lbnRdLFxuXHR0ZW1wbGF0ZVVybDogJy4vYXBhcnRtZW50LW1vbml0b3IuY29tcG9uZW50Lmh0bWwnLFxuXHRzdHlsZVVybDogJy4vYXBhcnRtZW50LW1vbml0b3IuY29tcG9uZW50LmNzcydcbn0pXG5leHBvcnQgY2xhc3MgQXBhcnRtZW50TW9uaXRvckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblx0cHJpdmF0ZSByZWFkb25seSBhcGFydG1lbnRBcGkgPSBpbmplY3QoQXBhcnRtZW50QXBpU2VydmljZSk7XG5cdHByaXZhdGUgcmVhZG9ubHkgYWxhcm1TdGF0ZSA9IGluamVjdChBbGFybVN0YXRlU2VydmljZSk7XG5cdHByaXZhdGUgcmVhZG9ubHkgcmVmcmVzaCQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXHRwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuXHRwdWJsaWMgcmVhZG9ubHkgYWN0aXZlQWxhcm1zJCA9IHRoaXMuYWxhcm1TdGF0ZS5nZXRBY3RpdmVBbGFybXMkKCkucGlwZShtYXAoKGFsYXJtcykgPT4gYWxhcm1zID8/IFtdKSk7XG5cdHB1YmxpYyByZWFkb25seSBhdmFpbGFibGVBcGFydG1lbnRzJDogT2JzZXJ2YWJsZTxBcGFydG1lbnRPcHRpb25bXT4gPSB0aGlzLmFwYXJ0bWVudEFwaS5nZXRBdmFpbGFibGVBcGFydG1lbnRzKCkucGlwZShcblx0XHRjYXRjaEVycm9yKCgpID0+IG9mKFtdKSksXG5cdCk7XG5cdHB1YmxpYyByZWFkb25seSBhcGFydG1lbnQkOiBPYnNlcnZhYmxlPEFwYXJ0bWVudCB8IG51bGw+ID0gdGhpcy5yZWZyZXNoJC5waXBlKFxuXHRcdHN0YXJ0V2l0aCh2b2lkIDApLFxuXHRcdHN3aXRjaE1hcCgoKSA9PiB0aGlzLmFwYXJ0bWVudEFwaS5nZXRDdXJyZW50QXBhcnRtZW50KCkpLFxuXHRcdHRhcCgoYXBhcnRtZW50KSA9PiB7XG5cdFx0XHRpZiAoYXBhcnRtZW50KSB7XG5cdFx0XHRcdHRoaXMuYWN0aXZlQXBhcnRtZW50SWQgPSBhcGFydG1lbnQuaWQ7XG5cdFx0XHR9XG5cdFx0fSksXG5cdFx0Y2F0Y2hFcnJvcigoKSA9PiB7XG5cdFx0XHR0aGlzLmVycm9yID0gJ0ltcG9zc2liaWxlIGNhcmljYXJlIGkgZGF0aSBkZWxsXFwnYXBwYXJ0YW1lbnRvLic7XG5cdFx0XHRyZXR1cm4gb2YobnVsbCk7XG5cdFx0fSlcblx0KTtcblxuXHRwdWJsaWMgZXJyb3IgPSAnJztcblx0cHVibGljIGFjdGl2ZUFwYXJ0bWVudElkID0gJyc7XG5cblx0cHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuXHRcdGlmICh0eXBlb2YgZ2xvYmFsVGhpcy5hZGRFdmVudExpc3RlbmVyICE9PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0ZnJvbUV2ZW50PEN1c3RvbUV2ZW50PEFsYXJtTGlmZWN5Y2xlVXBkYXRlRGV0YWlsPj4oXG5cdFx0XHRnbG9iYWxUaGlzLFxuXHRcdFx0QUxBUk1fTElGRUNZQ0xFX1VQREFURURfRVZFTlQsXG5cdFx0KVxuXHRcdFx0LnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuXHRcdFx0LnN1YnNjcmliZSgoKSA9PiB7XG5cdFx0XHRcdHRoaXMuZXJyb3IgPSAnJztcblx0XHRcdFx0dGhpcy5yZWZyZXNoJC5uZXh0KCk7XG5cdFx0XHR9KTtcblx0fVxuXG5cdHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcblx0XHR0aGlzLmRlc3Ryb3kkLm5leHQoKTtcblx0XHR0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG5cdH1cblxuXHRwdWJsaWMgb25BcGFydG1lbnRTZWxlY3RlZChhcGFydG1lbnRJZDogc3RyaW5nKTogdm9pZCB7XG5cdFx0aWYgKCFhcGFydG1lbnRJZCB8fCBhcGFydG1lbnRJZCA9PT0gdGhpcy5hY3RpdmVBcGFydG1lbnRJZCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHRoaXMuYXBhcnRtZW50QXBpLnNldEFjdGl2ZVBsYW50SWQoYXBhcnRtZW50SWQpO1xuXHRcdHRoaXMuZXJyb3IgPSAnJztcblx0XHR0aGlzLnJlZnJlc2gkLm5leHQoKTtcblx0fVxufVxuIiwiPHNlY3Rpb24gY2xhc3M9XCJhcGFydG1lbnQtbW9uaXRvciBjYXJlLXBhZ2UgY2FyZS1kb3QtZ3JpZFwiIGFyaWEtbGFiZWw9XCJNb25pdG9yIGFwcGFydGFtZW50b1wiPlxuICA8aGVhZGVyIGNsYXNzPVwiY2FyZS1wYWdlX19oZXJvXCI+XG4gICAgPGRpdj5cbiAgICAgIDxwIGNsYXNzPVwiY2FyZS1leWVicm93XCI+TW9uaXRvciBhcHBhcnRhbWVudG88L3A+XG4gICAgICBAaWYgKGFwYXJ0bWVudCQgfCBhc3luYzsgYXMgYXBhcnRtZW50KSB7XG4gICAgICAgIDxoMSBjbGFzcz1cImNhcmUtdGl0bGVcIj57eyBhcGFydG1lbnQubmFtZSB9fTwvaDE+XG4gICAgICB9IEBlbHNlIHtcbiAgICAgICAgPGgxIGNsYXNzPVwiY2FyZS10aXRsZVwiPlBhbm9yYW1pY2EgY2FzYSBjb25uZXNzYTwvaDE+XG4gICAgICB9XG4gICAgICA8cCBjbGFzcz1cImNhcmUtc3VidGl0bGVcIj5Nb25pdG9yYWdnaW8gc3RhdG8gYXBwYXJ0YW1lbnRvIGUgYWNjZXNzbyByYXBpZG8gYWxsZSBzdGFuemUuPC9wPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImFwYXJ0bWVudC1tb25pdG9yX19oZXJvLXNpZGVcIj5cbiAgICAgIDxwIGNsYXNzPVwiY2FyZS1jaGlwXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiY2FyZS1jaGlwX19kb3RcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L3NwYW4+XG4gICAgICAgIE1vbml0b3IgbGl2ZVxuICAgICAgPC9wPlxuXG4gICAgICBAaWYgKGF2YWlsYWJsZUFwYXJ0bWVudHMkIHwgYXN5bmM7IGFzIGFwYXJ0bWVudHMpIHtcbiAgICAgICAgQGlmIChhcGFydG1lbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZS1maWVsZCBhcGFydG1lbnQtbW9uaXRvcl9fc2VsZWN0b3JcIj5cbiAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJhY3RpdmUtYXBhcnRtZW50XCI+QXBwYXJ0YW1lbnRvIGF0dGl2bzwvbGFiZWw+XG4gICAgICAgICAgICA8c2VsZWN0XG4gICAgICAgICAgICAgIGlkPVwiYWN0aXZlLWFwYXJ0bWVudFwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiY2FyZS1zZWxlY3RcIlxuICAgICAgICAgICAgICBbdmFsdWVdPVwiYWN0aXZlQXBhcnRtZW50SWRcIlxuICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uQXBhcnRtZW50U2VsZWN0ZWQoJGFueSgkZXZlbnQudGFyZ2V0KS52YWx1ZSlcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICBAZm9yIChhcGFydG1lbnRPcHRpb24gb2YgYXBhcnRtZW50czsgdHJhY2sgYXBhcnRtZW50T3B0aW9uLmlkKSB7XG4gICAgICAgICAgICAgICAgPG9wdGlvbiBbdmFsdWVdPVwiYXBhcnRtZW50T3B0aW9uLmlkXCI+e3sgYXBhcnRtZW50T3B0aW9uLm5hbWUgfX08L29wdGlvbj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgPC9oZWFkZXI+XG5cbiAgQGlmIChlcnJvcikge1xuICAgIDxwIGNsYXNzPVwiY2FyZS1hbGVydFwiIHJvbGU9XCJhbGVydFwiPnt7IGVycm9yIH19PC9wPlxuICB9XG5cbiAgQGlmIChhcGFydG1lbnQkIHwgYXN5bmM7IGFzIGFwYXJ0bWVudCkge1xuICAgIEBpZiAoYWN0aXZlQWxhcm1zJCB8IGFzeW5jOyBhcyBhY3RpdmVBbGFybXMpIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJhcGFydG1lbnQtbW9uaXRvcl9fY29udGVudFwiPlxuICAgICAgICA8c2VjdGlvbiBjbGFzcz1cImNhcmUtcGFuZWwgYXBhcnRtZW50LW1vbml0b3JfX3BhbmVsIGFwYXJ0bWVudC1tb25pdG9yX19wYW5lbC0taGlnaGxpZ2h0XCI+XG4gICAgICAgICAgPGFwcC1hbGFybS1tYXAgW3Jvb21zXT1cImFwYXJ0bWVudC5yb29tc1wiIFthY3RpdmVBbGFybXNdPVwiYWN0aXZlQWxhcm1zXCIgLz5cbiAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxzZWN0aW9uIGNsYXNzPVwiY2FyZS1wYW5lbCBhcGFydG1lbnQtbW9uaXRvcl9fcGFuZWwgYXBhcnRtZW50LW1vbml0b3JfX3BhbmVsLS1oaWdobGlnaHRcIj5cbiAgICAgICAgPGFwcC1lbmRwb2ludC10YWJsZSAvPlxuICAgICAgPC9zZWN0aW9uPlxuICAgIH1cbiAgfSBAZWxzZSB7XG4gICAgQGlmICghZXJyb3IpIHtcbiAgICAgIDxwIGNsYXNzPVwiY2FyZS1sb2FkaW5nXCI+Q2FyaWNhbWVudG8gYXBwYXJ0YW1lbnRvLi4uPC9wPlxuICAgIH1cbiAgfVxuPC9zZWN0aW9uPlxuIl0sIm1hcHBpbmdzIjoiO3M4QkNZVUEsQ0FBQSxVQUE0QkMsQ0FBQSxnQ0FBeUJDLENBQUEsY0FBQUMsRUFBQUMsQ0FBQSxDQUFBQyxDQUFBLEVBQUFDLGNBQUEsR0FBQUMsQ0FBQSxLQUFBRCxDQUFBLGlCQUFBRSxDQUFBLFVBQUFGLGNBQUEsR0FBQUcsQ0FBQSxTQUFBTCxDQUFBLE1BQUFFLGNBQUEsR0FBQUcsQ0FBQSxTQUp6RFQsQ0FBQSxnQkFBc0YsUUFDaEZDLENBQUEsSUFBZUMsQ0FBQSxHQUNuQkYsQ0FBQSxRQUFHQyxDQUFBLElBQXFDQyxDQUFBLEdBQ3hDUSxDQUFBLEdBQUFDLENBQUEsWUFHRlQsQ0FBQSxJQUFBRSxDQUFBLElBQUFFLGNBQUEsR0FBQUcsQ0FBQSxhQUFBRyxDQUFBLEVBQUFOLGNBQUEsR0FBQUUsQ0FBQSxNQUFBSCxDQUFBLENBQUFRLFNBQUEsRUFOaUNQLGNBQUEsR0FBQUUsQ0FBQSxNQUFBTSxDQUFBLDBCQUFBRixDQUFBLENBQUFHLGNBQUEsRUFDM0JDLENBQUEsSUFBQUMsQ0FBQSxDQUFBTCxDQUFBLENBQUFNLElBQUEsRUFDREYsQ0FBQSxJQUFBRyxDQUFBLElBQUFQLENBQUEsQ0FBQVEsT0FBQSxDQUFBQyxNQUFBLGlCQUNITCxDQUFBLEdBQUFNLENBQUEsQ0FBQVYsQ0FBQSxDQUFBRyxjQUFBLEVBQUFULGNBQUEsR0FBQUcsQ0FBQSxhQUFBSCxjQUFBLEdBQUFHLENBQUEsb0JBQUFILGNBQUEsR0FBQUcsQ0FBQSxXRERSLEdBQWEsQ0FBQWMsQ0FBQSxFQUFBakIsY0FBQSxHQUFBRSxDQUFBLE9BQWlCLEtBQUFGLGNBQUEsR0FBQUMsQ0FBQSxNQUF4QixLQUFPLENBQUFILENBQWlCLENBQ2JvQixLQUFBLEVBQUFsQixjQUFBLEdBQUFFLENBQUEsTUFBUWlCLENBQUEsQ0FBYyxFQUFFLEdBQ3hCQyxZQUFBLEVBQUFwQixjQUFBLEdBQUFFLENBQUEsTUFBZWlCLENBQUEsQ0FBcUIsRUFBRSxHQUV0Q0UsaUJBQUEsRUFBQXJCLGNBQUEsR0FBQUUsQ0FBQSxNQUFvQm9CLENBQUEsQ0FBUyxJQUFNLENBQUF0QixjQUFBLEdBQUFDLENBQUEsS0FBQUQsQ0FBQSxpQkFBQUUsQ0FBQSxtQkFBS2dCLEtBQUEsQ0FBSyxFQUFHSyxNQUFBLENBQVFqQixDQUFBLEVBQVMsQ0FBQU4sY0FBQSxHQUFBQyxDQUFBLEtBQUFELENBQUEsaUJBQUFFLENBQUEsY0FBQUksQ0FBQSxDQUFLRyxjQUFjLENBQWQsQ0FBYyxFQUFFTSxNQUFNLENBQU4sQ0FBTSxVQUFBUyxJQUFBLEVBQUF4QixjQUFBLEdBQUFFLENBQUEsZ0JBQUF1QixDQUFBLEVBQUF6QixjQUFBLEdBQUFDLENBQUEsS0FBQUQsQ0FBQSxpQkFBQUUsQ0FBQSxtQkFBQUYsY0FBQSxHQUFBRyxDQUFBLFNBQUFzQixDQUFBLElBQUF6QixjQUFBLEdBQUFHLENBQUEsU0FKaEdMLENBQUEsSUFBaUIsV0FBQTRCLElBQUEsRUFBQTFCLGNBQUEsR0FBQUUsQ0FBQSxPQUFBeUIsQ0FBQSxFQUFBQyxJQUFBLENBQWpCOUIsQ0FBQSxDQUFpQitCLFNBQUEscUJBQUFDLE1BQUEsRUFBQVosS0FBQSxhQUFBRSxZQUFBLHFCQUFBVyxLQUFBLElBQUFDLElBQUEsR0FBQUMsTUFBQSw2TEFBQUMsUUFBQSxTQUFBQSxDQUFBVCxDQUFBLENBQUFVLENBQUEsRUFBQW5DLGNBQUEsR0FBQUMsQ0FBQSxLQUFBRCxDQUFBLGlCQUFBRSxDQUFBLFFBQUFGLGNBQUEsR0FBQUcsQ0FBQSxTQUFBc0IsQ0FBQSxNQUFBekIsY0FBQSxHQUFBRyxDQUFBLFNDVjlCVCxDQUFBLGdCQUFzRCxZQUM1QyxRQUNGQyxDQUFBLHlCQUFrQkMsQ0FBQSxHQUN0QkYsQ0FBQSxRQUFHQyxDQUFBLHVCQUFnQkQsQ0FBQSxhQUFRQyxDQUFBLElBQTJCQyxDQUFBLEdBQVMsRUFBSSxFQUdyRUYsQ0FBQSxZQUNFMEMsQ0FBQSxHQUFBdkMsQ0FBQSxpQkFBQXdDLENBQUEsRUFTRnpDLENBQUEsR0FFQUYsQ0FBQSxXQUE4QkMsQ0FBQSxLQUE0Q0MsQ0FBQSxHQUFJLElBQUFJLGNBQUEsR0FBQUcsQ0FBQSxTQUFBc0IsQ0FBQSxNQUFBekIsY0FBQSxHQUFBRyxDQUFBLFNBZmpETyxDQUFBLElBQUFDLENBQUEsQ0FBQXdCLENBQUEsQ0FBQWYsWUFBQSxHQUFBTCxNQUFBLEVBSTNCTCxDQUFBLElBQUE0QixDQUFBLENBQUFILENBQUEsQ0FBQWpCLEtBQUEsRUFBTyxFQVdxQlIsQ0FBQSxJQUFBRyxDQUFBLHVCQUFBc0IsQ0FBQSxDQUFBZCxpQkFBQSxPQUFBa0IsTUFBQTtrR0RSbkIsQ0FBQXpDLENBQWlCLE9BQUFFLGNBQUEsR0FBQUUsQ0FBQSxXQUFBc0MsRUFBQSxDQUFBQSxDQUFBMUMsQ0FBQSxDQUFBQyxDQUFBLElBQUFDLGNBQUEsR0FBQUMsQ0FBQSxLQUFBRCxDQUFBLGlCQUFBRSxDQUFBLGNBQUFILENBQUEsQ0FBQTBDLEVBQUEsWUFBQUMsR0FBQTVDLENBQUEsQ0FBQUMsQ0FBQSxFQUFBQyxjQUFBLEdBQUFDLENBQUEsS0FBQUQsQ0FBQSxpQkFBQUUsQ0FBQSxRQUFBRixjQUFBLEdBQUFHLENBQUEsU0FBQUwsQ0FBQSxNQUFBRSxjQUFBLEdBQUFHLENBQUEsU0dMdEJ3QyxDQUFBLFdBQXVCaEQsQ0FBQSxJQUFvQmlELENBQUEsS0FBQTVDLGNBQUEsR0FBQUcsQ0FBQSxTQUFBTCxDQUFBLE1BQUFFLGNBQUEsR0FBQUcsQ0FBQSxTQUFwQk8sQ0FBQSxHQUFBQyxDQUFBLENBQUFaLENBQUEsQ0FBQWEsSUFBQSxhQUFBaUMsR0FBQS9DLENBQUEsQ0FBQUMsQ0FBQSxFQUFBQyxjQUFBLEdBQUFDLENBQUEsTUFBQUQsQ0FBQSxpQkFBQUUsQ0FBQSxRQUFBRixjQUFBLEdBQUFHLENBQUEsU0FBQUwsQ0FBQSxNQUFBRSxjQUFBLEdBQUFHLENBQUEsU0FFdkJ3QyxDQUFBLFdBQXVCaEQsQ0FBQSwrQkFBd0JpRCxDQUFBLGNBQUFFLEdBQUFoRCxDQUFBLENBQUFDLENBQUEsRUFBQUMsY0FBQSxHQUFBQyxDQUFBLE1BQUFELENBQUEsaUJBQUFFLENBQUEsV0FBQUYsY0FBQSxHQUFBRyxDQUFBLFVBQUFMLENBQUEsTUFBQUUsY0FBQSxHQUFBRyxDQUFBLFVBc0J2Q3dDLENBQUEsZ0JBQXFDaEQsQ0FBQSxJQUEwQmlELENBQUEsSUFBQTlDLENBQUEsSUFBQUUsY0FBQSxHQUFBRyxDQUFBLGNBQUFHLENBQUEsRUFBQU4sY0FBQSxHQUFBRSxDQUFBLE9BQUFILENBQUEsQ0FBQVEsU0FBQSxFQUF2RFAsY0FBQSxHQUFBRSxDQUFBLE9BQUE2QyxDQUFBLFNBQUF6QyxDQUFBLENBQUFtQyxFQUFBLEVBQTZCL0IsQ0FBQSxHQUFBQyxDQUFBLENBQUFMLENBQUEsQ0FBQU0sSUFBQSxRQUFBWixjQUFBLEdBQUFHLENBQUEscUJBQUE2QyxHQUFBbEQsQ0FBQSxDQUFBQyxDQUFBLEVBQUFDLGNBQUEsR0FBQUMsQ0FBQSxNQUFBRCxDQUFBLGlCQUFBRSxDQUFBLFVBQUFKLENBQUEsSUFBQUUsY0FBQSxHQUFBRyxDQUFBLGNBQUFHLENBQUEsRUFBQU4sY0FBQSxHQUFBRSxDQUFBLE9BQUErQyxDQUFBLElBVDNDakQsY0FBQSxHQUFBRSxDQUFBLE9BQUF5QyxDQUFBLFlBQW9ELGNBQ3BCaEQsQ0FBQSwwQkFBbUJpRCxDQUFBLEdBQ2pERCxDQUFBLGdCQUlFTyxDQUFBLG1CQUFBZixDQUFBLEVBQUFuQyxjQUFBLEdBQUFDLENBQUEsTUFBQUQsQ0FBQSxpQkFBQUUsQ0FBQSxPQUFBaUQsQ0FBQSxDQUFBN0MsQ0FBQSxNQUFBOEMsQ0FBQSxFQUFBcEQsY0FBQSxHQUFBRSxDQUFBLE9BQUFBLENBQUEsS0FBQUYsY0FBQSxHQUFBRSxDQUFBLGNBQUFtRCxDQUFBLENBQVVELENBQUEsQ0FBQUUsbUJBQUEsQ0FBQW5CLENBQUEsQ0FBQW9CLE1BQUEsQ0FBQUMsS0FBQSxDQUE4QyxLQUV4RHBCLENBQUEsR0FBQVUsRUFBQSxpQkFBQU4sRUFBQSxFQUdGSSxDQUFBLEdBQVMsUUFBQTVDLGNBQUEsR0FBQUcsQ0FBQSxXQUFBSCxjQUFBLEdBQUFFLENBQUEsVUFBQUosQ0FBQSxJQUFBRSxjQUFBLEdBQUFHLENBQUEsY0FBQUcsQ0FBQSxFQUFBTixjQUFBLEdBQUFFLENBQUEsT0FBQUEsQ0FBQSxJQUFBdUIsQ0FBQSxFQUFBekIsY0FBQSxHQUFBRSxDQUFBLE9BQUFBLENBQUEsSUFOUEYsY0FBQSxHQUFBRSxDQUFBLE9BQUFRLENBQUEsSUFBQXFDLENBQUEsU0FBQXRCLENBQUEsQ0FBQWdDLGlCQUFBLEVBR0EvQyxDQUFBLEdBQUE0QixDQUFBLENBQUFoQyxDQUFBLFFBQUFOLGNBQUEsR0FBQUcsQ0FBQSxxQkFBQXVELEdBQUE1RCxDQUFBLENBQUFDLENBQUEsRUFBQUMsY0FBQSxHQUFBQyxDQUFBLE1BQUFELENBQUEsaUJBQUFFLENBQUEsUUFBQUYsY0FBQSxHQUFBRyxDQUFBLFVBQUFMLENBQUEsTUFBQUUsY0FBQSxHQUFBRyxDQUFBLFVBVE5DLENBQUEsR0FBQTRDLEVBQUEsZ0JBQUFoRCxjQUFBLEdBQUFHLENBQUEsVUFBQUwsQ0FBQSxNQUFBRSxjQUFBLEdBQUFHLENBQUEsVUFBQWEsQ0FBQSxDQUFBakIsQ0FBQSxDQUFBZ0IsTUFBQSxJQUFBZixjQUFBLEdBQUFHLENBQUEsY0FBQUgsY0FBQSxHQUFBRyxDQUFBLDBCQUFBd0QsR0FBQTdELENBQUEsQ0FBQUMsQ0FBQSxFQUFBQyxjQUFBLEdBQUFDLENBQUEsTUFBQUQsQ0FBQSxpQkFBQUUsQ0FBQSxXQUFBRixjQUFBLEdBQUFHLENBQUEsVUFBQUwsQ0FBQSxNQUFBRSxjQUFBLEdBQUFHLENBQUEsVUFvQkp3QyxDQUFBLFVBQW1DaEQsQ0FBQSxJQUFXaUQsQ0FBQSxJQUFBOUMsQ0FBQSxJQUFBRSxjQUFBLEdBQUFHLENBQUEsY0FBQUcsQ0FBQSxFQUFBTixjQUFBLEdBQUFFLENBQUEsT0FBQUEsQ0FBQSxJQUFYRixjQUFBLEdBQUFFLENBQUEsT0FBQVEsQ0FBQSxHQUFBQyxDQUFBLENBQUFMLENBQUEsQ0FBQXNELEtBQUEsUUFBQTVELGNBQUEsR0FBQUcsQ0FBQSxxQkFBQTBELEdBQUEvRCxDQUFBLENBQUFDLENBQUEsRUFBQUMsY0FBQSxHQUFBQyxDQUFBLE1BQUFELENBQUEsaUJBQUFFLENBQUEsV0FBQUYsY0FBQSxHQUFBRyxDQUFBLFVBQUFMLENBQUEsTUFBQUUsY0FBQSxHQUFBRyxDQUFBLFVBS2pDd0MsQ0FBQSxhQUF3QyxnQkFFcENtQixDQUFBLHVCQUNGbEIsQ0FBQSxHQUFVLEVBR1pELENBQUEsaUJBQ0VtQixDQUFBLHlCQUNGbEIsQ0FBQSxJQUFBOUMsQ0FBQSxJQUFBRSxjQUFBLEdBQUFHLENBQUEsY0FBQUcsQ0FBQSxFQUFBTixjQUFBLEdBQUFFLENBQUEsT0FBQUEsQ0FBQSxJQU5tQkYsY0FBQSxHQUFBRSxDQUFBLE9BQUFRLENBQUEsSUFBQXFDLENBQUEsU0FBQXpDLENBQUEsQ0FBQVksS0FBQSxFQUF5QixlQUFBbkIsQ0FBQSxRQUFBQyxjQUFBLEdBQUFHLENBQUEscUJBQUE0RCxHQUFBakUsQ0FBQSxDQUFBQyxDQUFBLEVBQUFDLGNBQUEsR0FBQUMsQ0FBQSxNQUFBRCxDQUFBLGlCQUFBRSxDQUFBLFdBQUFGLGNBQUEsR0FBQUcsQ0FBQSxVQUFBTCxDQUFBLE1BQUFFLGNBQUEsR0FBQUcsQ0FBQSxVQUg5Q0MsQ0FBQSxHQUFBeUQsRUFBQSxNQUFBRyxDQUFBLGFBQUFsRSxDQUFBLElBQUFFLGNBQUEsR0FBQUcsQ0FBQSxjQUFBRyxDQUFBLENBQUFtQixDQUFBLEVBQUF6QixjQUFBLEdBQUFFLENBQUEsT0FBQUEsQ0FBQSxJQUFBRixjQUFBLEdBQUFFLENBQUEsT0FBQWMsQ0FBQSxFQUFBVixDQUFBLENBQUFMLENBQUEsS0FBQXdCLENBQUEsQ0FBQXdDLGFBQUEsSUFBQWpFLGNBQUEsR0FBQUcsQ0FBQSxjQUFBSCxjQUFBLEdBQUFHLENBQUEsY0FBQUcsQ0FBQSxRQUFBTixjQUFBLEdBQUFHLENBQUEscUJBQUErRCxHQUFBcEUsQ0FBQSxDQUFBQyxDQUFBLEVBQUFDLGNBQUEsR0FBQUMsQ0FBQSxNQUFBRCxDQUFBLGlCQUFBRSxDQUFBLFFBQUFGLGNBQUEsR0FBQUcsQ0FBQSxVQUFBTCxDQUFBLE1BQUFFLGNBQUEsR0FBQUcsQ0FBQSxVQWFFd0MsQ0FBQSxXQUF3QmhELENBQUEsa0NBQTJCaUQsQ0FBQSxjQUFBdUIsR0FBQXJFLENBQUEsQ0FBQUMsQ0FBQSxFQUFBQyxjQUFBLEdBQUFDLENBQUEsTUFBQUQsQ0FBQSxpQkFBQUUsQ0FBQSxXQUFBRixjQUFBLEdBQUFHLENBQUEsVUFBQUwsQ0FBQSxNQUFBRSxjQUFBLEdBQUFHLENBQUEsVUFEckRDLENBQUEsR0FBQThELEVBQUEsY0FBQXBFLENBQUEsSUFBQUUsY0FBQSxHQUFBRyxDQUFBLGNBQUFHLENBQUEsRUFBQU4sY0FBQSxHQUFBRSxDQUFBLE9BQUFBLENBQUEsSUFBQUYsY0FBQSxHQUFBRSxDQUFBLE9BQUFjLENBQUEsQ0FBQVYsQ0FBQSxDQUFBc0QsS0FBQSxFQUFBNUQsY0FBQSxHQUFBRyxDQUFBLGVBQUFILGNBQUEsR0FBQUcsQ0FBQSxvQkFBQUgsY0FBQSxHQUFBRyxDQUFBLFlEbkNKLEdBQWEsQ0FBQWlFLEVBQUEsRUFBQXBFLGNBQUEsR0FBQUUsQ0FBQSxRQUF5QixLQUFBRixjQUFBLEdBQUFDLENBQUEsT0FBaEMsS0FBTyxDQUFBSCxDQUF5QixDQUNwQnVFLFlBQUEsRUFBQXJFLGNBQUEsR0FBQUUsQ0FBQSxPQUFlb0UsQ0FBQSxDQUFPQyxDQUFtQixHQUN6Q0MsVUFBQSxFQUFBeEUsY0FBQSxHQUFBRSxDQUFBLE9BQWFvRSxDQUFBLENBQU9HLENBQWlCLEdBQ3JDQyxRQUFBLEVBQUExRSxjQUFBLEdBQUFFLENBQUEsT0FBVyxHQUFJLENBQUF5RSxDQUFBLElBQ2ZDLFFBQUEsRUFBQTVFLGNBQUEsR0FBQUUsQ0FBQSxPQUFXLEdBQUksQ0FBQXlFLENBQUEsSUFFaEJWLGFBQUEsRUFBQWpFLGNBQUEsR0FBQUUsQ0FBQSxPQUFnQixLQUFLc0UsVUFBQSxDQUFXSyxnQkFBQSxDQUFnQixFQUFHQyxJQUFBLENBQUtDLENBQUEsQ0FBS3pFLENBQUEsRUFBVyxDQUFBTixjQUFBLEdBQUFDLENBQUEsTUFBQUQsQ0FBQSxpQkFBQUUsQ0FBQSxjQUFBRixjQUFBLEdBQUFHLENBQUEsVUFBQUcsQ0FBQSxJQUFBTixjQUFBLEdBQUFHLENBQUEsVUFBVSxFQUFFLEVBQUYsQ0FBRSxDQUFDLEdBQ3JGNkUsb0JBQUEsRUFBQWhGLGNBQUEsR0FBQUUsQ0FBQSxPQUFzRCxLQUFLbUUsWUFBQSxDQUFhWSxzQkFBQSxDQUFzQixFQUFHSCxJQUFBLENBQ2hISSxDQUFBLENBQVcsSUFBTSxDQUFBbEYsY0FBQSxHQUFBQyxDQUFBLE1BQUFELENBQUEsaUJBQUFFLENBQUEsY0FBQWlGLENBQUEsQ0FBRyxFQUFFLENBQUMsQ0FBRCxDQUFDLENBQUMsR0FFVEMsVUFBQSxFQUFBcEYsY0FBQSxHQUFBRSxDQUFBLE9BQTJDLEtBQUt3RSxRQUFBLENBQVNJLElBQUEsQ0FDeEVPLENBQUEsQ0FBVSxNQUFNLEVBQ2hCQyxDQUFBLENBQVUsSUFBTSxDQUFBdEYsY0FBQSxHQUFBQyxDQUFBLE1BQUFELENBQUEsaUJBQUFFLENBQUEsbUJBQUttRSxZQUFBLENBQWFrQixtQkFBQSxDQUFtQixDQUFFLENBQUYsQ0FBRSxFQUN2REMsQ0FBQSxDQUFLbEYsQ0FBQSxFQUFhLENBQUFOLGNBQUEsR0FBQUMsQ0FBQSxNQUFBRCxDQUFBLGlCQUFBRSxDQUFBLE9BQ2IsQ0FBQUYsY0FBQSxHQUFBRyxDQUFBLFVBQUFHLENBQUEsSUFBQU4sY0FBQSxHQUFBRyxDQUFBLFVBQ0gsS0FBS3NELGlCQUFBLENBQW9CbkQsQ0FBQSxDQUFVbUMsRUFBQSxDQUVyQyxFQUFDLEVBQ0R5QyxDQUFBLENBQVcsSUFDVixDQUFBbEYsY0FBQSxHQUFBQyxDQUFBLE1BQUFELENBQUEsaUJBQUFFLENBQUEsbUJBQUswRCxLQUFBLENBQVEsaURBQ051QixDQUFBLENBQUcsSUFBSSxHQUNkLENBQUMsR0FHSXZCLEtBQUEsRUFBQTVELGNBQUEsR0FBQUUsQ0FBQSxPQUFRLElBQ1J1RCxpQkFBQSxFQUFBekQsY0FBQSxHQUFBRSxDQUFBLE9BQW9CLElBRXBCdUYsU0FBQSxDQUFRLENBQUF6RixjQUFBLEdBQUFDLENBQUEsTUFBQUQsQ0FBQSxpQkFBQUUsQ0FBQSxPQUNWLENBQUFGLGNBQUEsR0FBQUcsQ0FBQSxnQkFBTyxDQUFBdUYsVUFBQSxDQUFXQyxnQkFBQSxFQUFxQixjQUFBM0YsY0FBQSxHQUFBRyxDQUFBLFVBSTNDeUYsQ0FBQSxDQUNDRixVQUFBLENBQ0FHLENBQTZCLEVBRTVCZixJQUFBLENBQUtnQixDQUFBLENBQVUsS0FBS2xCLFFBQVEsQ0FBQyxFQUM3Qm1CLFNBQUEsQ0FBVSxJQUFLLENBQUEvRixjQUFBLEdBQUFDLENBQUEsTUFBQUQsQ0FBQSxpQkFBQUUsQ0FBQSxPQUNmLEtBQUswRCxLQUFBLENBQVEsR0FDYixLQUFLYyxRQUFBLENBQVNzQixJQUFBLENBQUksQ0FDbkIsRUFBQyxDQUNILEdBRU9DLFlBQUEsQ0FBVyxDQUFBakcsY0FBQSxHQUFBQyxDQUFBLE1BQUFELENBQUEsaUJBQUFFLENBQUEsT0FDakIsS0FBSzBFLFFBQUEsQ0FBU29CLElBQUEsQ0FBSSxFQUNsQixLQUFLcEIsUUFBQSxDQUFTc0IsUUFBQSxDQUFRLENBQ3ZCLEVBRU81QyxvQkFBb0JoRCxDQUFBLENBQW1CLENBQUFOLGNBQUEsR0FBQUMsQ0FBQSxNQUFBRCxDQUFBLGlCQUFBRSxDQUFBLE9BQ3pDLENBQUFGLGNBQUEsR0FBQUcsQ0FBQSxXQUFDRyxDQUFBLElBQUFOLGNBQUEsR0FBQUcsQ0FBQSxVQUFlRyxDQUFBLEdBQWdCLEtBQUttRCxpQkFBQSxJQUFBekQsY0FBQSxHQUFBRyxDQUFBLFVBSXpDLEtBQUtrRSxZQUFBLENBQWE4QixnQkFBQSxDQUFpQjdGLENBQVcsRUFDOUMsS0FBS3NELEtBQUEsQ0FBUSxHQUNiLEtBQUtjLFFBQUEsQ0FBU3NCLElBQUEsQ0FBSSxFQUNuQixTQUFBeEUsSUFBQSxFQUFBeEIsY0FBQSxHQUFBRSxDQUFBLGdCQUFBdUIsQ0FBQSxFQUFBekIsY0FBQSxHQUFBQyxDQUFBLE1BQUFELENBQUEsaUJBQUFFLENBQUEsbUJBQUFGLGNBQUEsR0FBQUcsQ0FBQSxVQUFBc0IsQ0FBQSxJQUFBekIsY0FBQSxHQUFBRyxDQUFBLFVBeERZTCxDQUFBLElBQXlCLFdBQUE0QixJQUFBLEVBQUExQixjQUFBLEdBQUFFLENBQUEsT0FBQXlCLENBQUEsRUFBQUMsSUFBQSxDQUF6QjlCLENBQUEsQ0FBeUIrQixTQUFBLDZCQUFBRSxLQUFBLElBQUFDLElBQUEsSUFBQUMsTUFBQSwwbEJBQUFDLFFBQUEsU0FBQUEsQ0FBQVQsQ0FBQSxDQUFBVSxDQUFBLEVBQUFuQyxjQUFBLEdBQUFDLENBQUEsTUFBQUQsQ0FBQSxpQkFBQUUsQ0FBQSxXQUFBRixjQUFBLEdBQUFHLENBQUEsVUFBQXNCLENBQUEsTUFBQXpCLGNBQUEsR0FBQUcsQ0FBQSxVQ3BCdEN3QyxDQUFBLGdCQUE2RixjQUMzRCxTQUN6QixTQUNxQmhELENBQUEsMkJBQW9CaUQsQ0FBQSxHQUM1Q3hDLENBQUEsR0FBQXNDLEVBQUEsYUFBQXNCLENBQUEsWUFFRTdELENBQUEsR0FBQTBDLEVBQUEsYUFHRkYsQ0FBQSxVQUF5QmhELENBQUEsb0VBQTZEaUQsQ0FBQSxHQUFJLEVBRzVGRCxDQUFBLGFBQTBDLFVBRXRDbUIsQ0FBQSxjQUNBbkUsQ0FBQSxzQkFDRmlELENBQUEsR0FFQXhDLENBQUEsSUFBQXNELEVBQUEsTUFBQU0sQ0FBQSxhQWlCRnBCLENBQUEsR0FBTSxFQUdSeEMsQ0FBQSxJQUFBdUQsRUFBQSxZQUlBdkQsQ0FBQSxJQUFBMkQsRUFBQSxNQUFBQyxDQUFBLGFBWUU3RCxDQUFBLElBQUFnRSxFQUFBLE1BS0p2QixDQUFBLElBQUFuQixDQUFBLElBQUF6QixjQUFBLEdBQUFHLENBQUEsY0FBQWlELENBQUEsQ0FBQWdELENBQUEsQ0FBQUMsQ0FBQSxDQXZETXJHLGNBQUEsR0FBQUUsQ0FBQSxPQUFBUSxDQUFBLElBQUFNLENBQUEsRUFBQW9DLENBQUEsQ0FBQW5ELENBQUEsS0FBQWtDLENBQUEsQ0FBQWlELFVBQUEsSUFBQXBGLGNBQUEsR0FBQUcsQ0FBQSxjQUFBSCxjQUFBLEdBQUFHLENBQUEsYUFBQWlELENBQUEsRUFjQTFDLENBQUEsSUFBQU0sQ0FBQSxFQUFBb0YsQ0FBQSxDQUFBbkcsQ0FBQSxNQUFBa0MsQ0FBQSxDQUFBNkMsb0JBQUEsSUFBQWhGLGNBQUEsR0FBQUcsQ0FBQSxlQUFBSCxjQUFBLEdBQUFHLENBQUEsY0FBQWlHLENBQUEsRUFvQkoxRixDQUFBLElBQUFNLENBQUEsQ0FBQW1CLENBQUEsQ0FBQXlCLEtBQUEsRUFBQTVELGNBQUEsR0FBQUcsQ0FBQSxlQUFBSCxjQUFBLEdBQUFHLENBQUEsZUFJQU8sQ0FBQSxHQUFBTSxDQUFBLEVBQUFxRixDQUFBLENBQUFwRyxDQUFBLE1BQUFrQyxDQUFBLENBQUFpRCxVQUFBLElBQUFwRixjQUFBLEdBQUFHLENBQUEsZUFBQUgsY0FBQSxHQUFBRyxDQUFBLGNBQUFrRyxDQUFBLFFBQUFyRyxjQUFBLEdBQUFHLENBQUEsYUFBQW1HLFlBQUEsRUQxQm9CckYsQ0FBQSxDQUFtQnNGLENBQUEsQ0FBOUJDLENBQVMsRUFBQWpFLE1BQUE7cUVBQUEsTUFBQXZDLGNBQUEsR0FBQUUsQ0FBQSxhQUlQLENBQUFKLENBQXlCLGNBQUFzRSxFQUFBLElBQUFxQyx5QkFBQSxFIiwiaWdub3JlTGlzdCI6W119 \ No newline at end of file diff --git a/frontend/dist-instrumented/chunk-RSIG5MZX.js.map b/frontend/dist-instrumented/chunk-RSIG5MZX.js.map new file mode 100644 index 00000000..56c532c8 --- /dev/null +++ b/frontend/dist-instrumented/chunk-RSIG5MZX.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["src/app/features/apartment-monitor/components/alarm-map/alarm-map.component.ts", "src/app/features/apartment-monitor/components/alarm-map/alarm-map.component.html", "src/app/features/apartment-monitor/components/apartment-monitor/apartment-monitor.component.ts", "src/app/features/apartment-monitor/components/apartment-monitor/apartment-monitor.component.html"], + "sourcesContent": ["import { Component, computed, input } from '@angular/core';\nimport { ActiveAlarm } from '../../../../core/alarm/models/active-alarm.model';\nimport { Room } from '../../models/room.model';\n\n@Component({\n\tselector: 'app-alarm-map',\n\tstandalone: true,\n\ttemplateUrl: './alarm-map.component.html',\n\tstyleUrl: './alarm-map.component.css'\n})\nexport class AlarmMapComponent {\n\tpublic readonly rooms = input([]);\n\tpublic readonly activeAlarms = input([]);\n\n\tpublic readonly alarmedRoomsCount = computed(() => this.rooms().filter((room) => room.hasActiveAlarm).length);\n}\n", "
\n
\n

Panoramica allarmi

\n

Allarmi attivi: {{ activeAlarms().length }}

\n
\n\n
\n @for (room of rooms(); track room.id) {\n
\n

{{ room.name }}

\n

{{ room.devices.length }} dispositivi

\n @if (room.hasActiveAlarm) {\n

Stanza con allarme attivo

\n }\n
\n }\n
\n\n

Stanze in allarme: {{ alarmedRoomsCount() }}

\n
\n", "import { AsyncPipe } from '@angular/common';\nimport { Component, OnDestroy, OnInit, inject } from '@angular/core';\nimport { Observable, Subject, catchError, fromEvent, map, of, startWith, switchMap, takeUntil, tap } from 'rxjs';\nimport { AlarmStateService } from '../../../../core/alarm/services/alarm-state.service';\nimport { AlarmMapComponent } from '../alarm-map/alarm-map.component';\nimport { EndpointTableComponent } from '../../../device-interaction/components/endpoint-table/endpoint-table.component';\nimport { Apartment } from '../../models/apartment.model';\nimport { ApartmentApiService, ApartmentOption } from '../../services/apartment-api.service';\nimport {\n\tALARM_LIFECYCLE_UPDATED_EVENT,\n\tAlarmLifecycleUpdateDetail,\n} from '../../../../core/alarm/models/realtime-alarm-event.model';\n\n@Component({\n\tselector: 'app-apartment-monitor',\n\tstandalone: true,\n\timports: [AsyncPipe, AlarmMapComponent, EndpointTableComponent],\n\ttemplateUrl: './apartment-monitor.component.html',\n\tstyleUrl: './apartment-monitor.component.css'\n})\nexport class ApartmentMonitorComponent implements OnInit, OnDestroy {\n\tprivate readonly apartmentApi = inject(ApartmentApiService);\n\tprivate readonly alarmState = inject(AlarmStateService);\n\tprivate readonly refresh$ = new Subject();\n\tprivate readonly destroy$ = new Subject();\n\n\tpublic readonly activeAlarms$ = this.alarmState.getActiveAlarms$().pipe(map((alarms) => alarms ?? []));\n\tpublic readonly availableApartments$: Observable = this.apartmentApi.getAvailableApartments().pipe(\n\t\tcatchError(() => of([])),\n\t);\n\tpublic readonly apartment$: Observable = this.refresh$.pipe(\n\t\tstartWith(void 0),\n\t\tswitchMap(() => this.apartmentApi.getCurrentApartment()),\n\t\ttap((apartment) => {\n\t\t\tif (apartment) {\n\t\t\t\tthis.activeApartmentId = apartment.id;\n\t\t\t}\n\t\t}),\n\t\tcatchError(() => {\n\t\t\tthis.error = 'Impossibile caricare i dati dell\\'appartamento.';\n\t\t\treturn of(null);\n\t\t})\n\t);\n\n\tpublic error = '';\n\tpublic activeApartmentId = '';\n\n\tpublic ngOnInit(): void {\n\t\tif (typeof globalThis.addEventListener !== 'function') {\n\t\t\treturn;\n\t\t}\n\n\t\tfromEvent>(\n\t\t\tglobalThis,\n\t\t\tALARM_LIFECYCLE_UPDATED_EVENT,\n\t\t)\n\t\t\t.pipe(takeUntil(this.destroy$))\n\t\t\t.subscribe(() => {\n\t\t\t\tthis.error = '';\n\t\t\t\tthis.refresh$.next();\n\t\t\t});\n\t}\n\n\tpublic ngOnDestroy(): void {\n\t\tthis.destroy$.next();\n\t\tthis.destroy$.complete();\n\t}\n\n\tpublic onApartmentSelected(apartmentId: string): void {\n\t\tif (!apartmentId || apartmentId === this.activeApartmentId) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.apartmentApi.setActivePlantId(apartmentId);\n\t\tthis.error = '';\n\t\tthis.refresh$.next();\n\t}\n}\n", "
\n
\n
\n

Monitor appartamento

\n @if (apartment$ | async; as apartment) {\n

{{ apartment.name }}

\n } @else {\n

Panoramica casa connessa

\n }\n

Monitoraggio stato appartamento e accesso rapido alle stanze.

\n
\n\n
\n

\n \n Monitor live\n

\n\n @if (availableApartments$ | async; as apartments) {\n @if (apartments.length > 0) {\n
\n \n \n @for (apartmentOption of apartments; track apartmentOption.id) {\n \n }\n \n
\n }\n }\n
\n
\n\n @if (error) {\n

{{ error }}

\n }\n\n @if (apartment$ | async; as apartment) {\n @if (activeAlarms$ | async; as activeAlarms) {\n
\n
\n \n
\n
\n\n
\n \n
\n }\n } @else {\n @if (!error) {\n

Caricamento appartamento...

\n }\n }\n
\n"], + "mappings": "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", + "names": ["\u0275\u0275domElementStart", "\u0275\u0275text", "\u0275\u0275domElementEnd", "\u0275\u0275conditionalCreate", "AlarmMapComponent_For_10_Conditional_5_Template", "\u0275\u0275classProp", "room_r1", "hasActiveAlarm", "\u0275\u0275advance", "\u0275\u0275textInterpolate", "name", "\u0275\u0275textInterpolate1", "devices", "length", "\u0275\u0275conditional", "AlarmMapComponent", "rooms", "input", "activeAlarms", "alarmedRoomsCount", "computed", "filter", "room", "selectors", "inputs", "decls", "vars", "consts", "template", "rf", "ctx", "\u0275\u0275repeaterCreate", "AlarmMapComponent_For_10_Template", "_forTrack0", "\u0275\u0275repeater", "\u0275\u0275elementStart", "\u0275\u0275text", "\u0275\u0275elementEnd", "\u0275\u0275advance", "\u0275\u0275textInterpolate", "ctx", "name", "\u0275\u0275property", "apartmentOption_r3", "id", "\u0275\u0275listener", "$event", "\u0275\u0275restoreView", "_r1", "ctx_r1", "\u0275\u0275nextContext", "\u0275\u0275resetView", "onApartmentSelected", "target", "value", "\u0275\u0275repeaterCreate", "ApartmentMonitorComponent_Conditional_14_Conditional_0_For_5_Template", "_forTrack0", "activeApartmentId", "\u0275\u0275repeater", "apartments_r4", "\u0275\u0275conditionalCreate", "ApartmentMonitorComponent_Conditional_14_Conditional_0_Template", "\u0275\u0275conditional", "length", "error", "\u0275\u0275element", "apartment_r5", "rooms", "ApartmentMonitorComponent_Conditional_17_Conditional_0_Template", "tmp_2_0", "\u0275\u0275pipeBind1", "activeAlarms$", "ApartmentMonitorComponent_Conditional_19_Conditional_0_Template", "ApartmentMonitorComponent", "apartmentApi", "inject", "ApartmentApiService", "alarmState", "AlarmStateService", "refresh$", "Subject", "destroy$", "getActiveAlarms$", "pipe", "map", "alarms", "availableApartments$", "getAvailableApartments", "catchError", "of", "apartment$", "startWith", "switchMap", "getCurrentApartment", "tap", "apartment", "ngOnInit", "globalThis", "addEventListener", "fromEvent", "ALARM_LIFECYCLE_UPDATED_EVENT", "takeUntil", "subscribe", "next", "ngOnDestroy", "complete", "apartmentId", "setActivePlantId", "selectors", "decls", "vars", "consts", "template", "rf", "ApartmentMonitorComponent_Conditional_5_Template", "\u0275\u0275conditionalBranchCreate", "ApartmentMonitorComponent_Conditional_7_Template", "ApartmentMonitorComponent_Conditional_14_Template", "ApartmentMonitorComponent_Conditional_16_Template", "ApartmentMonitorComponent_Conditional_17_Template", "ApartmentMonitorComponent_Conditional_19_Template", "tmp_0_0", "tmp_1_0", "tmp_3_0", "AlarmMapComponent", "EndpointTableComponent", "AsyncPipe", "styles"] +} diff --git a/frontend/dist-instrumented/chunk-RSPUKT2Q.js b/frontend/dist-instrumented/chunk-RSPUKT2Q.js new file mode 100644 index 00000000..1aa6f8c0 --- /dev/null +++ b/frontend/dist-instrumented/chunk-RSPUKT2Q.js @@ -0,0 +1,4 @@ +function cov_a8tvvuszl(){var path="/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-RSPUKT2Q.js";var hash="a9e99a6ed075469440fd2c9e36b26efe49a00585";var global=new Function("return this")();var gcv="__coverage__";var coverageData={path:"/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-RSPUKT2Q.js",statementMap:{"0":{start:{line:1,column:661},end:{line:1,column:1895}},"1":{start:{line:1,column:691},end:{line:1,column:695}},"2":{start:{line:1,column:708},end:{line:1,column:712}},"3":{start:{line:1,column:736},end:{line:1,column:740}},"4":{start:{line:1,column:751},end:{line:1,column:752}},"5":{start:{line:1,column:765},end:{line:1,column:773}},"6":{start:{line:1,column:785},end:{line:1,column:794}},"7":{start:{line:1,column:803},end:{line:1,column:812}},"8":{start:{line:1,column:817},end:{line:1,column:1086}},"9":{start:{line:1,column:932},end:{line:1,column:1053}},"10":{start:{line:1,column:1100},end:{line:1,column:1166}},"11":{start:{line:1,column:1178},end:{line:1,column:1263}},"12":{start:{line:1,column:1285},end:{line:1,column:1312}},"13":{start:{line:1,column:1313},end:{line:1,column:1363}},"14":{start:{line:1,column:1376},end:{line:1,column:1766}},"15":{start:{line:1,column:1433},end:{line:1,column:1450}},"16":{start:{line:1,column:1451},end:{line:1,column:1532}},"17":{start:{line:1,column:1481},end:{line:1,column:1532}},"18":{start:{line:1,column:1532},end:{line:1,column:1599}},"19":{start:{line:1,column:1608},end:{line:1,column:1613}},"20":{start:{line:1,column:1642},end:{line:1,column:1665}},"21":{start:{line:1,column:1666},end:{line:1,column:1763}},"22":{start:{line:1,column:1784},end:{line:1,column:1813}},"23":{start:{line:1,column:1796},end:{line:1,column:1812}},"24":{start:{line:1,column:1832},end:{line:1,column:1882}},"25":{start:{line:1,column:1883},end:{line:1,column:1891}},"26":{start:{line:1,column:1902},end:{line:1,column:1913}},"27":{start:{line:1,column:1909},end:{line:1,column:1913}},"28":{start:{line:1,column:1930},end:{line:1,column:2035}},"29":{start:{line:1,column:1988},end:{line:1,column:1991}},"30":{start:{line:1,column:1992},end:{line:1,column:2034}},"31":{start:{line:1,column:2052},end:{line:1,column:2280}},"32":{start:{line:1,column:2297},end:{line:1,column:2821}},"33":{start:{line:1,column:2566},end:{line:1,column:2577}},"34":{start:{line:1,column:2578},end:{line:1,column:2820}},"35":{start:{line:1,column:2838},end:{line:1,column:3167}},"36":{start:{line:1,column:2852},end:{line:1,column:2855}},"37":{start:{line:1,column:2856},end:{line:1,column:3166}},"38":{start:{line:1,column:2965},end:{line:1,column:2970}},"39":{start:{line:1,column:2976},end:{line:1,column:2980}},"40":{start:{line:1,column:2981},end:{line:1,column:3009}},"41":{start:{line:1,column:3098},end:{line:1,column:3103}},"42":{start:{line:1,column:3109},end:{line:1,column:3113}},"43":{start:{line:1,column:3114},end:{line:1,column:3138}},"44":{start:{line:1,column:3167},end:{line:1,column:3398}},"45":{start:{line:1,column:3181},end:{line:1,column:3185}},"46":{start:{line:1,column:3186},end:{line:1,column:3397}},"47":{start:{line:1,column:3416},end:{line:1,column:3495}},"48":{start:{line:1,column:3464},end:{line:1,column:3467}},"49":{start:{line:1,column:3468},end:{line:1,column:3494}},"50":{start:{line:1,column:3513},end:{line:1,column:3599}},"51":{start:{line:1,column:3607},end:{line:2,column:86}},"52":{start:{line:1,column:3641},end:{line:1,column:3645}},"53":{start:{line:1,column:3654},end:{line:1,column:3887}},"54":{start:{line:1,column:3899},end:{line:1,column:3936}},"55":{start:{line:1,column:3940},end:{line:1,column:3991}},"56":{start:{line:1,column:3997},end:{line:1,column:4139}},"57":{start:{line:1,column:4010},end:{line:1,column:4019}},"58":{start:{line:1,column:4020},end:{line:1,column:4137}},"59":{start:{line:1,column:4045},end:{line:1,column:4058}},"60":{start:{line:1,column:4072},end:{line:1,column:4133}},"61":{start:{line:1,column:4154},end:{line:1,column:4189}},"62":{start:{line:1,column:4160},end:{line:1,column:4188}},"63":{start:{line:1,column:4200},end:{line:1,column:4231}},"64":{start:{line:1,column:4206},end:{line:1,column:4230}},"65":{start:{line:1,column:4244},end:{line:1,column:4276}},"66":{start:{line:1,column:4250},end:{line:1,column:4275}},"67":{start:{line:1,column:4290},end:{line:1,column:4325}},"68":{start:{line:1,column:4343},end:{line:1,column:4382}},"69":{start:{line:1,column:4392},end:{line:1,column:4664}},"70":{start:{line:1,column:4682},end:{line:1,column:4711}},"71":{start:{line:1,column:4694},end:{line:1,column:4710}},"72":{start:{line:1,column:4729},end:{line:2,column:73}},"73":{start:{line:1,column:6974},end:{line:1,column:7293}},"74":{start:{line:1,column:7236},end:{line:1,column:7292}},"75":{start:{line:2,column:74},end:{line:2,column:82}}},fnMap:{"0":{name:"(anonymous_0)",decl:{start:{line:1,column:662},end:{line:1,column:663}},loc:{start:{line:1,column:666},end:{line:1,column:1892}},line:1},"1":{name:"(anonymous_1)",decl:{start:{line:1,column:920},end:{line:1,column:921}},loc:{start:{line:1,column:932},end:{line:1,column:1053}},line:1},"2":{name:"(anonymous_2)",decl:{start:{line:1,column:1087},end:{line:1,column:1088}},loc:{start:{line:1,column:1099},end:{line:1,column:1167}},line:1},"3":{name:"(anonymous_3)",decl:{start:{line:1,column:1167},end:{line:1,column:1168}},loc:{start:{line:1,column:1177},end:{line:1,column:1264}},line:1},"4":{name:"(anonymous_4)",decl:{start:{line:1,column:1264},end:{line:1,column:1265}},loc:{start:{line:1,column:1278},end:{line:1,column:1364}},line:1},"5":{name:"(anonymous_5)",decl:{start:{line:1,column:1364},end:{line:1,column:1365}},loc:{start:{line:1,column:1375},end:{line:1,column:1767}},line:1},"6":{name:"(anonymous_6)",decl:{start:{line:1,column:1423},end:{line:1,column:1424}},loc:{start:{line:1,column:1426},end:{line:1,column:1600}},line:1},"7":{name:"(anonymous_7)",decl:{start:{line:1,column:1604},end:{line:1,column:1605}},loc:{start:{line:1,column:1608},end:{line:1,column:1613}},line:1},"8":{name:"(anonymous_8)",decl:{start:{line:1,column:1632},end:{line:1,column:1633}},loc:{start:{line:1,column:1635},end:{line:1,column:1764}},line:1},"9":{name:"(anonymous_9)",decl:{start:{line:1,column:1784},end:{line:1,column:1785}},loc:{start:{line:1,column:1795},end:{line:1,column:1813}},line:1},"10":{name:"(anonymous_10)",decl:{start:{line:1,column:1902},end:{line:1,column:1903}},loc:{start:{line:1,column:1909},end:{line:1,column:1913}},line:1},"11":{name:"W",decl:{start:{line:1,column:1923},end:{line:1,column:1924}},loc:{start:{line:1,column:1929},end:{line:1,column:2036}},line:1},"12":{name:"X",decl:{start:{line:1,column:2045},end:{line:1,column:2046}},loc:{start:{line:1,column:2051},end:{line:1,column:2281}},line:1},"13":{name:"Y",decl:{start:{line:1,column:2290},end:{line:1,column:2291}},loc:{start:{line:1,column:2296},end:{line:1,column:2822}},line:1},"14":{name:"Z",decl:{start:{line:1,column:2831},end:{line:1,column:2832}},loc:{start:{line:1,column:2837},end:{line:1,column:3399}},line:1},"15":{name:"(anonymous_15)",decl:{start:{line:1,column:2954},end:{line:1,column:2955}},loc:{start:{line:1,column:2964},end:{line:1,column:3010}},line:1},"16":{name:"(anonymous_16)",decl:{start:{line:1,column:3087},end:{line:1,column:3088}},loc:{start:{line:1,column:3097},end:{line:1,column:3139}},line:1},"17":{name:"ee",decl:{start:{line:1,column:3408},end:{line:1,column:3410}},loc:{start:{line:1,column:3415},end:{line:1,column:3496}},line:1},"18":{name:"te",decl:{start:{line:1,column:3505},end:{line:1,column:3507}},loc:{start:{line:1,column:3512},end:{line:1,column:3600}},line:1},"19":{name:"(anonymous_19)",decl:{start:{line:1,column:3608},end:{line:1,column:3609}},loc:{start:{line:1,column:3612},end:{line:2,column:83}},line:1},"20":{name:"(anonymous_20)",decl:{start:{line:1,column:3888},end:{line:1,column:3889}},loc:{start:{line:1,column:3898},end:{line:1,column:3937}},line:1},"21":{name:"(anonymous_21)",decl:{start:{line:1,column:3999},end:{line:1,column:4000}},loc:{start:{line:1,column:4003},end:{line:1,column:4138}},line:1},"22":{name:"(anonymous_22)",decl:{start:{line:1,column:4042},end:{line:1,column:4043}},loc:{start:{line:1,column:4045},end:{line:1,column:4058}},line:1},"23":{name:"(anonymous_23)",decl:{start:{line:1,column:4065},end:{line:1,column:4066}},loc:{start:{line:1,column:4072},end:{line:1,column:4133}},line:1},"24":{name:"(anonymous_24)",decl:{start:{line:1,column:4156},end:{line:1,column:4157}},loc:{start:{line:1,column:4160},end:{line:1,column:4188}},line:1},"25":{name:"(anonymous_25)",decl:{start:{line:1,column:4202},end:{line:1,column:4203}},loc:{start:{line:1,column:4206},end:{line:1,column:4230}},line:1},"26":{name:"(anonymous_26)",decl:{start:{line:1,column:4246},end:{line:1,column:4247}},loc:{start:{line:1,column:4250},end:{line:1,column:4275}},line:1},"27":{name:"(anonymous_27)",decl:{start:{line:1,column:4277},end:{line:1,column:4278}},loc:{start:{line:1,column:4289},end:{line:1,column:4326}},line:1},"28":{name:"(anonymous_28)",decl:{start:{line:1,column:4326},end:{line:1,column:4327}},loc:{start:{line:1,column:4342},end:{line:1,column:4383}},line:1},"29":{name:"(anonymous_29)",decl:{start:{line:1,column:4383},end:{line:1,column:4384}},loc:{start:{line:1,column:4391},end:{line:1,column:4665}},line:1},"30":{name:"(anonymous_30)",decl:{start:{line:1,column:4682},end:{line:1,column:4683}},loc:{start:{line:1,column:4693},end:{line:1,column:4711}},line:1},"31":{name:"(anonymous_31)",decl:{start:{line:1,column:6960},end:{line:1,column:6961}},loc:{start:{line:1,column:6973},end:{line:1,column:7294}},line:1}},branchMap:{"0":{loc:{start:{line:1,column:1178},end:{line:1,column:1263}},type:"binary-expr",locations:[{start:{line:1,column:1178},end:{line:1,column:1204}},{start:{line:1,column:1206},end:{line:1,column:1263}}],line:1},"1":{loc:{start:{line:1,column:1313},end:{line:1,column:1363}},type:"binary-expr",locations:[{start:{line:1,column:1313},end:{line:1,column:1318}},{start:{line:1,column:1320},end:{line:1,column:1363}}],line:1},"2":{loc:{start:{line:1,column:1451},end:{line:1,column:1532}},type:"if",locations:[{start:{line:1,column:1451},end:{line:1,column:1532}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"3":{loc:{start:{line:1,column:1454},end:{line:1,column:1480}},type:"binary-expr",locations:[{start:{line:1,column:1454},end:{line:1,column:1474}},{start:{line:1,column:1476},end:{line:1,column:1480}}],line:1},"4":{loc:{start:{line:1,column:1684},end:{line:1,column:1713}},type:"cond-expr",locations:[{start:{line:1,column:1686},end:{line:1,column:1711}},{start:{line:1,column:1712},end:{line:1,column:1713}}],line:1},"5":{loc:{start:{line:1,column:1807},end:{line:1,column:1811}},type:"binary-expr",locations:[{start:{line:1,column:1807},end:{line:1,column:1808}},{start:{line:1,column:1810},end:{line:1,column:1811}}],line:1},"6":{loc:{start:{line:1,column:1930},end:{line:1,column:2035}},type:"if",locations:[{start:{line:1,column:1930},end:{line:1,column:2035}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"7":{loc:{start:{line:1,column:1933},end:{line:1,column:1976}},type:"binary-expr",locations:[{start:{line:1,column:1933},end:{line:1,column:1936}},{start:{line:1,column:1939},end:{line:1,column:1975}}],line:1},"8":{loc:{start:{line:1,column:2052},end:{line:1,column:2280}},type:"binary-expr",locations:[{start:{line:1,column:2052},end:{line:1,column:2055}},{start:{line:1,column:2058},end:{line:1,column:2279}}],line:1},"9":{loc:{start:{line:1,column:2297},end:{line:1,column:2821}},type:"if",locations:[{start:{line:1,column:2297},end:{line:1,column:2821}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"10":{loc:{start:{line:1,column:2300},end:{line:1,column:2554}},type:"binary-expr",locations:[{start:{line:1,column:2300},end:{line:1,column:2303}},{start:{line:1,column:2306},end:{line:1,column:2553}}],line:1},"11":{loc:{start:{line:1,column:2838},end:{line:1,column:3167}},type:"if",locations:[{start:{line:1,column:2838},end:{line:1,column:3167}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"12":{loc:{start:{line:1,column:3167},end:{line:1,column:3398}},type:"if",locations:[{start:{line:1,column:3167},end:{line:1,column:3398}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"13":{loc:{start:{line:1,column:3416},end:{line:1,column:3495}},type:"if",locations:[{start:{line:1,column:3416},end:{line:1,column:3495}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"14":{loc:{start:{line:1,column:3419},end:{line:1,column:3452}},type:"binary-expr",locations:[{start:{line:1,column:3419},end:{line:1,column:3422}},{start:{line:1,column:3424},end:{line:1,column:3452}}],line:1},"15":{loc:{start:{line:1,column:3470},end:{line:1,column:3493}},type:"cond-expr",locations:[{start:{line:1,column:3490},end:{line:1,column:3491}},{start:{line:1,column:3492},end:{line:1,column:3493}}],line:1},"16":{loc:{start:{line:1,column:3513},end:{line:1,column:3599}},type:"binary-expr",locations:[{start:{line:1,column:3513},end:{line:1,column:3516}},{start:{line:1,column:3519},end:{line:1,column:3598}}],line:1},"17":{loc:{start:{line:1,column:4027},end:{line:1,column:4137}},type:"cond-expr",locations:[{start:{line:1,column:4029},end:{line:1,column:4134}},{start:{line:1,column:4135},end:{line:1,column:4137}}],line:1},"18":{loc:{start:{line:1,column:4160},end:{line:1,column:4188}},type:"binary-expr",locations:[{start:{line:1,column:4160},end:{line:1,column:4184}},{start:{line:1,column:4186},end:{line:1,column:4188}}],line:1},"19":{loc:{start:{line:1,column:4206},end:{line:1,column:4230}},type:"binary-expr",locations:[{start:{line:1,column:4206},end:{line:1,column:4226}},{start:{line:1,column:4228},end:{line:1,column:4230}}],line:1},"20":{loc:{start:{line:1,column:4250},end:{line:1,column:4275}},type:"binary-expr",locations:[{start:{line:1,column:4250},end:{line:1,column:4272}},{start:{line:1,column:4274},end:{line:1,column:4275}}],line:1},"21":{loc:{start:{line:1,column:4451},end:{line:1,column:4476}},type:"binary-expr",locations:[{start:{line:1,column:4451},end:{line:1,column:4461}},{start:{line:1,column:4463},end:{line:1,column:4476}}],line:1},"22":{loc:{start:{line:1,column:4504},end:{line:1,column:4550}},type:"cond-expr",locations:[{start:{line:1,column:4528},end:{line:1,column:4540}},{start:{line:1,column:4541},end:{line:1,column:4550}}],line:1},"23":{loc:{start:{line:1,column:4586},end:{line:1,column:4617}},type:"binary-expr",locations:[{start:{line:1,column:4586},end:{line:1,column:4602}},{start:{line:1,column:4604},end:{line:1,column:4617}}],line:1},"24":{loc:{start:{line:1,column:4634},end:{line:1,column:4663}},type:"binary-expr",locations:[{start:{line:1,column:4634},end:{line:1,column:4648}},{start:{line:1,column:4650},end:{line:1,column:4663}}],line:1},"25":{loc:{start:{line:1,column:4705},end:{line:1,column:4709}},type:"binary-expr",locations:[{start:{line:1,column:4705},end:{line:1,column:4706}},{start:{line:1,column:4708},end:{line:1,column:4709}}],line:1},"26":{loc:{start:{line:1,column:6974},end:{line:1,column:7293}},type:"if",locations:[{start:{line:1,column:6974},end:{line:1,column:7293}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"27":{loc:{start:{line:1,column:6977},end:{line:1,column:7224}},type:"binary-expr",locations:[{start:{line:1,column:6977},end:{line:1,column:6980}},{start:{line:1,column:6983},end:{line:1,column:7223}}],line:1},"28":{loc:{start:{line:1,column:7243},end:{line:1,column:7265}},type:"cond-expr",locations:[{start:{line:1,column:7261},end:{line:1,column:7262}},{start:{line:1,column:7263},end:{line:1,column:7265}}],line:1},"29":{loc:{start:{line:1,column:7273},end:{line:1,column:7289}},type:"cond-expr",locations:[{start:{line:1,column:7284},end:{line:1,column:7286}},{start:{line:1,column:7287},end:{line:1,column:7289}}],line:1}},s:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0},f:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0},b:{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0],"9":[0,0],"10":[0,0],"11":[0,0],"12":[0,0],"13":[0,0],"14":[0,0],"15":[0,0],"16":[0,0],"17":[0,0],"18":[0,0],"19":[0,0],"20":[0,0],"21":[0,0],"22":[0,0],"23":[0,0],"24":[0,0],"25":[0,0],"26":[0,0],"27":[0,0],"28":[0,0],"29":[0,0]},inputSourceMap:{version:3,sources:["src/app/features/alarm-history/services/alarm-history.service.ts","src/app/features/alarm-history/components/alarm-history-page.component.ts","src/app/features/alarm-history/components/alarm-history-page.component.html"],sourcesContent:["import { Injectable, inject } from \"@angular/core\";\r\nimport { AlarmApiService } from \"../../../core/alarm/services/alarm-api.service\";\r\nimport { InternalAuthService } from \"../../../core/services/internal-auth.service\";\r\nimport { ApiErrorDisplayService } from \"../../../core/services/api-error-display.service\";\r\nimport {\r\n BehaviorSubject,\r\n catchError,\r\n combineLatest,\r\n map,\r\n of,\r\n shareReplay,\r\n switchMap,\r\n take,\r\n} from \"rxjs\";\r\nimport { AlarmListVm } from \"../models/alarm-list-vm.model\";\r\nimport { ActiveAlarm } from \"../../../core/alarm/models/active-alarm.model\";\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class AlarmHistoryService {\r\n private readonly alarmApiService = inject(AlarmApiService);\r\n private readonly authService = inject(InternalAuthService);\r\n private readonly apiErrorDisplayService = inject(ApiErrorDisplayService);\r\n private readonly pageLimit = 6;\r\n\r\n private readonly pageOffset$ = new BehaviorSubject(0);\r\n private readonly canGoNext$ = new BehaviorSubject(false);\r\n private readonly alarms$ = new BehaviorSubject([]);\r\n\r\n public readonly vm$ = combineLatest([\r\n this.alarms$.asObservable(),\r\n this.pageOffset$.asObservable(),\r\n this.canGoNext$.asObservable(),\r\n ]).pipe(\r\n map(([alarms, pageOffset, canGoNext]): AlarmListVm => ({\r\n alarms,\r\n currentPage: Math.floor(pageOffset / this.pageLimit) + 1,\r\n pageLimit: this.pageLimit,\r\n pageOffset,\r\n canGoPrevious: pageOffset > 0,\r\n canGoNext,\r\n })),\r\n shareReplay({ bufferSize: 1, refCount: true })\r\n );\r\n\r\n public initialize(): void {\r\n this.pageOffset$.next(0);\r\n this.canGoNext$.next(false);\r\n this.loadPage(0);\r\n }\r\n\r\n public nextPage(): void {\r\n if (!this.canGoNext$.getValue()) return;\r\n this.loadPage(this.pageOffset$.getValue() + this.pageLimit);\r\n }\r\n\r\n public previousPage(): void {\r\n const currentOffset = this.pageOffset$.getValue();\r\n if (currentOffset === 0) return;\r\n this.loadPage(Math.max(0, currentOffset - this.pageLimit));\r\n }\r\n\r\n private loadPage(offset: number): void {\r\n this.authService.getCurrentUser$().pipe(\r\n take(1),\r\n switchMap((session) => {\r\n const numericUserId = Number(session?.userId);\r\n if (!Number.isInteger(numericUserId) || numericUserId <= 0) {\r\n throw new TypeError('Utente corrente non valido.');\r\n }\r\n return this.alarmApiService.getResolvedAlarms(\r\n numericUserId,\r\n this.pageLimit + 1,\r\n offset\r\n );\r\n }),\r\n catchError(() => of([]))\r\n ).subscribe({\r\n next: (alarms: ActiveAlarm[]) => {\r\n const hasNext = alarms.length > this.pageLimit;\r\n this.alarms$.next(hasNext ? alarms.slice(0, this.pageLimit) : alarms);\r\n this.canGoNext$.next(hasNext);\r\n this.pageOffset$.next(offset);\r\n },\r\n });\r\n }\r\n}","import { Component, computed, OnInit, inject } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { AlarmListVm } from '../models/alarm-list-vm.model';\nimport { AlarmTableColumn } from '../../../shared/models/alarm-table.model';\nimport { AlarmHistoryService } from '../services/alarm-history.service';\nimport { AlarmTableRow } from '../models/alarm-table-row';\nimport { ActiveAlarm } from '../../../core/alarm/models/active-alarm.model';\nimport { AlarmPriorityIndicatorComponent } from '../../../shared/components/alarm-table/alarm-priority-indicator.component';\nimport { AlarmTableShellComponent } from '../../../shared/components/alarm-table/alarm-table-shell.component';\nimport { DatePipe } from '@angular/common';\n\n@Component({\n selector: 'alarm-history',\n standalone: true,\n imports: [\n AlarmPriorityIndicatorComponent,\n AlarmTableShellComponent,\n DatePipe,\n ],\n templateUrl: './alarm-history-page.component.html',\n styleUrl: './alarm-history-page.component.css'\n})\nexport class AlarmHistoryPageComponent implements OnInit {\n private readonly alarmHistoryService = inject(AlarmHistoryService);\n\n public readonly columns: readonly AlarmTableColumn[] = [\n { id: 'priority', label: 'Priorit\xE0' },\n { id: 'name', label: 'Nome' },\n { id: 'location', label: 'Luogo' },\n { id: 'status', label: 'Stato' },\n { id: 'openedAt', label: 'Scattato il' },\n { id: 'closedAt', label: 'Risolto il' },\n { id: 'handlerUsername', label: 'Gestito da' },\n ];\n\n ngOnInit(): void {\n this.alarmHistoryService.initialize();\n }\n\n public readonly vm = toSignal(this.alarmHistoryService.vm$, {\n initialValue: null,\n });\n\n public readonly rows = computed((): AlarmTableRow[] => {\n const vmState = this.vm();\n if (!vmState) return [];\n return vmState.alarms\n .map((alarm: ActiveAlarm) => this.toRow(alarm))\n .sort((a, b) => new Date(b.closedAt).getTime() - new Date(a.closedAt).getTime());\n });\n\n public readonly canGoPrevious = computed(() => this.vm()?.canGoPrevious ?? false);\n public readonly canGoNext = computed(() => this.vm()?.canGoNext ?? false);\n public readonly currentPage = computed(() => this.vm()?.currentPage ?? 1);\n\n public onNextPage(): void {\n this.alarmHistoryService.nextPage();\n }\n\n public onPreviousPage(): void {\n this.alarmHistoryService.previousPage();\n }\n\n private toRow(alarm: ActiveAlarm): AlarmTableRow {\n return {\n id: alarm.id,\n priority: alarm.priority,\n name: alarm.alarmName,\n device: alarm.deviceId ?? 'sconosciuto',\n location: alarm.position,\n status: alarm.resolutionTime === null ? 'Da gestire' : 'Gestito',\n openedAt: alarm.activationTime,\n closedAt: alarm.resolutionTime ?? 'sconosciuto',\n handlerUsername: alarm.userUsername ?? 'sconosciuto',\n };\n }\n}\n","
\r\n
\r\n
\r\n

Allarmi

\r\n

Storico allarmi

\r\n

Visualizza le informazioni degli allarmi gestiti.

\r\n
\r\n\r\n @if (rows().length > 0) {\r\n \r\n \r\n {{ rows().length }} in tabella\r\n \r\n }\r\n
\r\n\r\n @if (vm(); as vmState) {\r\n @if (rows().length === 0) {\r\n \r\n
\r\n \r\n \r\n \r\n
\r\n

Nessun storico allarme disponibile al momento.

\r\n

Quando verranno rilevati allarmi gestiti, compariranno qui.

\r\n \r\n } @else {\r\n \r\n @for (row of rows(); track row.id) {\r\n \r\n \r\n \r\n \r\n {{ row.name }}\r\n {{ row.location }}\r\n \r\n \r\n {{ row.status }}\r\n \r\n \r\n {{ row.openedAt | date:'dd/MM/yyyy HH:mm' }}\r\n {{ row.closedAt | date:'dd/MM/yyyy HH:mm' }}\r\n {{ row.handlerUsername }}\r\n \r\n }\r\n \r\n\r\n \r\n }\r\n } @else {\r\n
\r\n
\r\n Caricamento storico allarmi in corso...\r\n
\r\n }\r\n
"],mappings:"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",names:["AlarmHistoryService","alarmApiService","inject","AlarmApiService","authService","InternalAuthService","apiErrorDisplayService","ApiErrorDisplayService","pageLimit","pageOffset$","BehaviorSubject","canGoNext$","alarms$","vm$","combineLatest","asObservable","pipe","map","alarms","pageOffset","canGoNext","currentPage","Math","floor","canGoPrevious","shareReplay","bufferSize","refCount","initialize","next","loadPage","nextPage","getValue","previousPage","currentOffset","max","offset","getCurrentUser$","take","switchMap","session","numericUserId","Number","userId","isInteger","TypeError","getResolvedAlarms","catchError","of","subscribe","hasNext","length","slice","factory","\u0275fac","providedIn","\u0275\u0275elementStart","\u0275\u0275element","\u0275\u0275text","\u0275\u0275elementEnd","\u0275\u0275advance","\u0275\u0275textInterpolate1","ctx_r0","rows","length","\u0275\u0275property","row_r3","priority","\u0275\u0275textInterpolate","name","location","status","\u0275\u0275pipeBind2","openedAt","closedAt","handlerUsername","\u0275\u0275repeaterCreate","AlarmHistoryPageComponent_Conditional_10_Conditional_1_For_2_Template","_forTrack0","\u0275\u0275listener","\u0275\u0275restoreView","_r2","\u0275\u0275nextContext","\u0275\u0275resetView","onPreviousPage","onNextPage","columns","\u0275\u0275repeater","canGoPrevious","currentPage","canGoNext","\u0275\u0275conditionalCreate","AlarmHistoryPageComponent_Conditional_10_Conditional_0_Template","AlarmHistoryPageComponent_Conditional_10_Conditional_1_Template","\u0275\u0275conditional","AlarmHistoryPageComponent","alarmHistoryService","inject","AlarmHistoryService","id","label","ngOnInit","initialize","vm","toSignal","vm$","initialValue","computed","vmState","alarms","map","alarm","toRow","sort","a","b","Date","getTime","nextPage","previousPage","alarmName","device","deviceId","position","resolutionTime","activationTime","userUsername","selectors","decls","vars","consts","template","rf","ctx","AlarmHistoryPageComponent_Conditional_9_Template","AlarmHistoryPageComponent_Conditional_10_Template","AlarmHistoryPageComponent_Conditional_11_Template","tmp_1_0","AlarmPriorityIndicatorComponent","AlarmTableShellComponent","DatePipe","styles"]},_coverageSchema:"1a1c01bbd47fc00a2c39e90264f33305004495a9",hash:"a9e99a6ed075469440fd2c9e36b26efe49a00585"};var coverage=global[gcv]||(global[gcv]={});if(!coverage[path]||coverage[path].hash!==hash){coverage[path]=coverageData;}var actualCoverage=coverage[path];{// @ts-ignore +cov_a8tvvuszl=function(){return actualCoverage;};}return actualCoverage;}cov_a8tvvuszl();import{a as F}from"./chunk-SNRTUDXT.js";import{a as q}from"./chunk-V5PG7NSI.js";import{a as U}from"./chunk-CFHT7CZE.js";import{b as B}from"./chunk-NAQGW5AE.js";import{a as R}from"./chunk-VIBKONAW.js";import"./chunk-ZZLQRDHJ.js";import{b as j}from"./chunk-65RKWSY3.js";import"./chunk-2S5V5XEE.js";import{i as z}from"./chunk-F6OGAIBI.js";import{Ab as o,Bb as d,Cb as f,D as H,F as T,Ib as S,Ka as k,Kb as C,L as $,Pb as g,Q as m,V as b,W as h,Wa as D,X as G,Y as I,Ya as v,_a as _,ab as L,bb as O,cb as p,db as n,e as x,eb as a,fb as u,h as w,jb as V,m as A,n as E,nb as y,pb as c,w as M,wa as l,y as N}from"./chunk-RYTNMYZW.js";import"./chunk-VCZGUBMY.js";var K=(cov_a8tvvuszl().s[0]++,(()=>{cov_a8tvvuszl().f[0]++;class t{alarmApiService=(cov_a8tvvuszl().s[1]++,m(U));authService=(cov_a8tvvuszl().s[2]++,m(j));apiErrorDisplayService=(cov_a8tvvuszl().s[3]++,m(R));pageLimit=(cov_a8tvvuszl().s[4]++,6);pageOffset$=(cov_a8tvvuszl().s[5]++,new x(0));canGoNext$=(cov_a8tvvuszl().s[6]++,new x(!1));alarms$=(cov_a8tvvuszl().s[7]++,new x([]));vm$=(cov_a8tvvuszl().s[8]++,E([this.alarms$.asObservable(),this.pageOffset$.asObservable(),this.canGoNext$.asObservable()]).pipe(A(([e,i,r])=>{cov_a8tvvuszl().f[1]++;cov_a8tvvuszl().s[9]++;return{alarms:e,currentPage:Math.floor(i/this.pageLimit)+1,pageLimit:this.pageLimit,pageOffset:i,canGoPrevious:i>0,canGoNext:r};}),H({bufferSize:1,refCount:!0})));initialize(){cov_a8tvvuszl().f[2]++;cov_a8tvvuszl().s[10]++;this.pageOffset$.next(0),this.canGoNext$.next(!1),this.loadPage(0);}nextPage(){cov_a8tvvuszl().f[3]++;cov_a8tvvuszl().s[11]++;(cov_a8tvvuszl().b[0][0]++,this.canGoNext$.getValue())&&(cov_a8tvvuszl().b[0][1]++,this.loadPage(this.pageOffset$.getValue()+this.pageLimit));}previousPage(){cov_a8tvvuszl().f[4]++;let e=(cov_a8tvvuszl().s[12]++,this.pageOffset$.getValue());cov_a8tvvuszl().s[13]++;(cov_a8tvvuszl().b[1][0]++,e!==0)&&(cov_a8tvvuszl().b[1][1]++,this.loadPage(Math.max(0,e-this.pageLimit)));}loadPage(e){cov_a8tvvuszl().f[5]++;cov_a8tvvuszl().s[14]++;this.authService.getCurrentUser$().pipe(N(1),T(i=>{cov_a8tvvuszl().f[6]++;let r=(cov_a8tvvuszl().s[15]++,Number(i?.userId));cov_a8tvvuszl().s[16]++;if((cov_a8tvvuszl().b[3][0]++,!Number.isInteger(r))||(cov_a8tvvuszl().b[3][1]++,r<=0)){cov_a8tvvuszl().b[2][0]++;cov_a8tvvuszl().s[17]++;throw new TypeError("Utente corrente non valido.");}else{cov_a8tvvuszl().b[2][1]++;}cov_a8tvvuszl().s[18]++;return this.alarmApiService.getResolvedAlarms(r,this.pageLimit+1,e);}),M(()=>{cov_a8tvvuszl().f[7]++;cov_a8tvvuszl().s[19]++;return w([]);})).subscribe({next:i=>{cov_a8tvvuszl().f[8]++;let r=(cov_a8tvvuszl().s[20]++,i.length>this.pageLimit);cov_a8tvvuszl().s[21]++;this.alarms$.next(r?(cov_a8tvvuszl().b[4][0]++,i.slice(0,this.pageLimit)):(cov_a8tvvuszl().b[4][1]++,i)),this.canGoNext$.next(r),this.pageOffset$.next(e);}});}static ɵfac=(cov_a8tvvuszl().s[22]++,function(i){cov_a8tvvuszl().f[9]++;cov_a8tvvuszl().s[23]++;return new((cov_a8tvvuszl().b[5][0]++,i)||(cov_a8tvvuszl().b[5][1]++,t))();});static ɵprov=(cov_a8tvvuszl().s[24]++,$({token:t,factory:t.ɵfac,providedIn:"root"}));}cov_a8tvvuszl().s[25]++;return t;})());cov_a8tvvuszl().s[26]++;var J=(t,s)=>{cov_a8tvvuszl().f[10]++;cov_a8tvvuszl().s[27]++;return s.id;};function W(t,s){cov_a8tvvuszl().f[11]++;cov_a8tvvuszl().s[28]++;if((cov_a8tvvuszl().b[7][0]++,t&1)&&(cov_a8tvvuszl().b[7][1]++,n(0,"span",5),u(1,"span",7),o(2),a()),t&2){cov_a8tvvuszl().b[6][0]++;let e=(cov_a8tvvuszl().s[29]++,c());cov_a8tvvuszl().s[30]++;l(2),f(" ",e.rows().length," in tabella ");}else{cov_a8tvvuszl().b[6][1]++;}}function X(t,s){cov_a8tvvuszl().f[12]++;cov_a8tvvuszl().s[31]++;(cov_a8tvvuszl().b[8][0]++,t&1)&&(cov_a8tvvuszl().b[8][1]++,n(0,"div",8)(1,"div",9),G(),n(2,"svg",10),u(3,"path",11),a()(),I(),n(4,"p",12),o(5,"Nessun storico allarme disponibile al momento."),a(),n(6,"p",13),o(7,"Quando verranno rilevati allarmi gestiti, compariranno qui."),a()());}function Y(t,s){cov_a8tvvuszl().f[13]++;cov_a8tvvuszl().s[32]++;if((cov_a8tvvuszl().b[10][0]++,t&1)&&(cov_a8tvvuszl().b[10][1]++,n(0,"tr",15)(1,"td",20),u(2,"app-alarm-priority-indicator",21),a(),n(3,"td",22),o(4),a(),n(5,"td",23),o(6),a(),n(7,"td",20)(8,"span",24),o(9),a()(),n(10,"td",23),o(11),S(12,"date"),a(),n(13,"td",23),o(14),S(15,"date"),a(),n(16,"td",23),o(17),a()()),t&2){cov_a8tvvuszl().b[9][0]++;let e=(cov_a8tvvuszl().s[33]++,s.$implicit);cov_a8tvvuszl().s[34]++;D("data-testid","alarm-row-"+e.id),l(2),p("priority",e.priority),l(2),d(e.name),l(2),d(e.location),l(3),f(" ",e.status," "),l(2),d(C(12,8,e.openedAt,"dd/MM/yyyy HH:mm")),l(3),d(C(15,11,e.closedAt,"dd/MM/yyyy HH:mm")),l(3),d(e.handlerUsername);}else{cov_a8tvvuszl().b[9][1]++;}}function Z(t,s){cov_a8tvvuszl().f[14]++;cov_a8tvvuszl().s[35]++;if(t&1){cov_a8tvvuszl().b[11][0]++;let e=(cov_a8tvvuszl().s[36]++,V());cov_a8tvvuszl().s[37]++;n(0,"app-alarm-table-shell",14),L(1,Y,18,14,"tr",15,J),a(),n(3,"nav",16)(4,"button",17),y("click",function(){cov_a8tvvuszl().f[15]++;cov_a8tvvuszl().s[38]++;b(e);let r=(cov_a8tvvuszl().s[39]++,c(2));cov_a8tvvuszl().s[40]++;return h(r.onPreviousPage());}),o(5," Precedente "),a(),n(6,"span",18),o(7),a(),n(8,"button",19),y("click",function(){cov_a8tvvuszl().f[16]++;cov_a8tvvuszl().s[41]++;b(e);let r=(cov_a8tvvuszl().s[42]++,c(2));cov_a8tvvuszl().s[43]++;return h(r.onNextPage());}),o(9," Successiva "),a()();}else{cov_a8tvvuszl().b[11][1]++;}cov_a8tvvuszl().s[44]++;if(t&2){cov_a8tvvuszl().b[12][0]++;let e=(cov_a8tvvuszl().s[45]++,c(2));cov_a8tvvuszl().s[46]++;p("title","Storico allarmi")("caption","Tabella storico allarmi")("columns",e.columns),l(),O(e.rows()),l(3),p("disabled",!e.canGoPrevious()),l(3),f("Pagina ",e.currentPage()," "),l(),p("disabled",!e.canGoNext());}else{cov_a8tvvuszl().b[12][1]++;}}function ee(t,s){cov_a8tvvuszl().f[17]++;cov_a8tvvuszl().s[47]++;if((cov_a8tvvuszl().b[14][0]++,t&1)&&(cov_a8tvvuszl().b[14][1]++,v(0,X,8,0,"div",8)(1,Z,10,6)),t&2){cov_a8tvvuszl().b[13][0]++;let e=(cov_a8tvvuszl().s[48]++,c());cov_a8tvvuszl().s[49]++;_(e.rows().length===0?(cov_a8tvvuszl().b[15][0]++,0):(cov_a8tvvuszl().b[15][1]++,1));}else{cov_a8tvvuszl().b[13][1]++;}}function te(t,s){cov_a8tvvuszl().f[18]++;cov_a8tvvuszl().s[50]++;(cov_a8tvvuszl().b[16][0]++,t&1)&&(cov_a8tvvuszl().b[16][1]++,n(0,"div",6),u(1,"div",25),o(2," Caricamento storico allarmi in corso... "),a());}var ve=(cov_a8tvvuszl().s[51]++,(()=>{cov_a8tvvuszl().f[19]++;class t{alarmHistoryService=(cov_a8tvvuszl().s[52]++,m(K));columns=(cov_a8tvvuszl().s[53]++,[{id:"priority",label:"Priorit\xE0"},{id:"name",label:"Nome"},{id:"location",label:"Luogo"},{id:"status",label:"Stato"},{id:"openedAt",label:"Scattato il"},{id:"closedAt",label:"Risolto il"},{id:"handlerUsername",label:"Gestito da"}]);ngOnInit(){cov_a8tvvuszl().f[20]++;cov_a8tvvuszl().s[54]++;this.alarmHistoryService.initialize();}vm=(cov_a8tvvuszl().s[55]++,B(this.alarmHistoryService.vm$,{initialValue:null}));rows=(cov_a8tvvuszl().s[56]++,g(()=>{cov_a8tvvuszl().f[21]++;let e=(cov_a8tvvuszl().s[57]++,this.vm());cov_a8tvvuszl().s[58]++;return e?(cov_a8tvvuszl().b[17][0]++,e.alarms.map(i=>{cov_a8tvvuszl().f[22]++;cov_a8tvvuszl().s[59]++;return this.toRow(i);}).sort((i,r)=>{cov_a8tvvuszl().f[23]++;cov_a8tvvuszl().s[60]++;return new Date(r.closedAt).getTime()-new Date(i.closedAt).getTime();})):(cov_a8tvvuszl().b[17][1]++,[]);}));canGoPrevious=(cov_a8tvvuszl().s[61]++,g(()=>{cov_a8tvvuszl().f[24]++;cov_a8tvvuszl().s[62]++;return(cov_a8tvvuszl().b[18][0]++,this.vm()?.canGoPrevious)??(cov_a8tvvuszl().b[18][1]++,!1);}));canGoNext=(cov_a8tvvuszl().s[63]++,g(()=>{cov_a8tvvuszl().f[25]++;cov_a8tvvuszl().s[64]++;return(cov_a8tvvuszl().b[19][0]++,this.vm()?.canGoNext)??(cov_a8tvvuszl().b[19][1]++,!1);}));currentPage=(cov_a8tvvuszl().s[65]++,g(()=>{cov_a8tvvuszl().f[26]++;cov_a8tvvuszl().s[66]++;return(cov_a8tvvuszl().b[20][0]++,this.vm()?.currentPage)??(cov_a8tvvuszl().b[20][1]++,1);}));onNextPage(){cov_a8tvvuszl().f[27]++;cov_a8tvvuszl().s[67]++;this.alarmHistoryService.nextPage();}onPreviousPage(){cov_a8tvvuszl().f[28]++;cov_a8tvvuszl().s[68]++;this.alarmHistoryService.previousPage();}toRow(e){cov_a8tvvuszl().f[29]++;cov_a8tvvuszl().s[69]++;return{id:e.id,priority:e.priority,name:e.alarmName,device:(cov_a8tvvuszl().b[21][0]++,e.deviceId)??(cov_a8tvvuszl().b[21][1]++,"sconosciuto"),location:e.position,status:e.resolutionTime===null?(cov_a8tvvuszl().b[22][0]++,"Da gestire"):(cov_a8tvvuszl().b[22][1]++,"Gestito"),openedAt:e.activationTime,closedAt:(cov_a8tvvuszl().b[23][0]++,e.resolutionTime)??(cov_a8tvvuszl().b[23][1]++,"sconosciuto"),handlerUsername:(cov_a8tvvuszl().b[24][0]++,e.userUsername)??(cov_a8tvvuszl().b[24][1]++,"sconosciuto")};}static ɵfac=(cov_a8tvvuszl().s[70]++,function(i){cov_a8tvvuszl().f[30]++;cov_a8tvvuszl().s[71]++;return new((cov_a8tvvuszl().b[25][0]++,i)||(cov_a8tvvuszl().b[25][1]++,t))();});static ɵcmp=(cov_a8tvvuszl().s[72]++,k({type:t,selectors:[["alarm-history"]],decls:12,vars:2,consts:[[1,"alarm-management-page","care-page","care-dot-grid","sidebar-page"],[1,"care-page__hero"],[1,"care-eyebrow"],[1,"care-title"],[1,"care-subtitle"],[1,"care-page__header-badge"],["aria-live","polite",1,"rounded-xl","border","border-slate-200","bg-white","px-4","py-3","text-sm","text-slate-600","shadow-sm"],[1,"care-page__header-badge-dot"],[1,"alarm-management__empty","mt-3","flex","flex-col","items-center","justify-center","rounded-2xl","border","border-slate-200","bg-white/70","p-14","text-center","shadow-sm","backdrop-blur-sm"],[1,"flex","h-14","w-14","items-center","justify-center","rounded-2xl","bg-slate-100"],["fill","none","viewBox","0 0 24 24","stroke-width","1.5","stroke","currentColor","aria-hidden","true",1,"h-7","w-7","text-slate-400"],["stroke-linecap","round","stroke-linejoin","round","d","M15 19.128a9.38 9.38 0 002.625.372 9.337 9.337 0 004.121-.952 4.125 4.125 0 00-7.533-2.493M15 19.128v-.003c0-1.113-.285-2.16-.786-3.07M15 19.128v.106A12.318 12.318 0 018.624 21c-2.331 0-4.512-.645-6.374-1.766l-.001-.109a6.375 6.375 0 0111.964-3.07M12 6.375a3.375 3.375 0 11-6.75 0 3.375 3.375 0 016.75 0zm8.25 2.25a2.625 2.625 0 11-5.25 0 2.625 2.625 0 015.25 0z"],[1,"mt-4","text-sm","font-semibold","text-slate-700"],[1,"mt-1","text-xs","text-slate-500"],[3,"title","caption","columns"],[1,"group","transition-colors","hover:bg-slate-50/80"],["aria-label","Navigazione pagine storico allarmi",1,"care-pagination"],["type","button","aria-label","Pagina precedente storico allarmi",1,"care-pagination__button",3,"click","disabled"],["aria-live","polite",1,"care-pagination__status"],["type","button","aria-label","Pagina successiva storico allarmi",1,"care-pagination__button",3,"click","disabled"],[1,"px-5","py-3.5","align-middle"],[3,"priority"],[1,"px-5","py-3.5","align-middle","text-sm","font-semibold","text-slate-900"],[1,"px-5","py-3.5","align-middle","text-sm","text-slate-700"],[1,"inline-flex","items-center","rounded-full","border","border-emerald-200","bg-emerald-50","px-2.5","py-1","text-xs","font-semibold","text-emerald-700"],[1,"h-4","w-4","animate-spin","rounded-full","border-2","border-slate-200","border-t-slate-500"]],template:function(i,r){cov_a8tvvuszl().f[31]++;cov_a8tvvuszl().s[73]++;if((cov_a8tvvuszl().b[27][0]++,i&1)&&(cov_a8tvvuszl().b[27][1]++,n(0,"section",0)(1,"header",1)(2,"div")(3,"p",2),o(4,"Allarmi"),a(),n(5,"h1",3),o(6,"Storico allarmi"),a(),n(7,"p",4),o(8,"Visualizza le informazioni degli allarmi gestiti."),a()(),v(9,W,3,1,"span",5),a(),v(10,ee,2,1)(11,te,3,0,"div",6),a()),i&2){cov_a8tvvuszl().b[26][0]++;let P;cov_a8tvvuszl().s[74]++;l(9),_(r.rows().length>0?(cov_a8tvvuszl().b[28][0]++,9):(cov_a8tvvuszl().b[28][1]++,-1)),l(),_((P=r.vm())?(cov_a8tvvuszl().b[29][0]++,10):(cov_a8tvvuszl().b[29][1]++,11),P);}else{cov_a8tvvuszl().b[26][1]++;}},dependencies:[q,F,z],styles:[`.alarm-management__status[_ngcontent-%COMP%], .alarm-management__error[_ngcontent-%COMP%], .alarm-management__empty[_ngcontent-%COMP%]{margin-top:.75rem} +/*# sourceMappingURL=alarm-history-page.component-6E6DBGDK.css.map */`]}));}cov_a8tvvuszl().s[75]++;return t;})());export{ve as AlarmHistoryPageComponent};//# sourceMappingURL=chunk-RSPUKT2Q.js.map +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJLIiwiY292X2E4dHZ2dXN6bCIsInMiLCJmIiwidCIsImFsYXJtQXBpU2VydmljZSIsIm0iLCJVIiwiYXV0aFNlcnZpY2UiLCJqIiwiYXBpRXJyb3JEaXNwbGF5U2VydmljZSIsIlIiLCJwYWdlTGltaXQiLCJwYWdlT2Zmc2V0JCIsIngiLCJjYW5Hb05leHQkIiwiYWxhcm1zJCIsInZtJCIsIkUiLCJhc09ic2VydmFibGUiLCJwaXBlIiwiQSIsImUiLCJpIiwiciIsImFsYXJtcyIsImN1cnJlbnRQYWdlIiwiTWF0aCIsImZsb29yIiwicGFnZU9mZnNldCIsImNhbkdvUHJldmlvdXMiLCJjYW5Hb05leHQiLCJIIiwiYnVmZmVyU2l6ZSIsInJlZkNvdW50IiwiaW5pdGlhbGl6ZSIsIm5leHQiLCJsb2FkUGFnZSIsIm5leHRQYWdlIiwiYiIsImdldFZhbHVlIiwicHJldmlvdXNQYWdlIiwibWF4IiwiZ2V0Q3VycmVudFVzZXIkIiwiTiIsIlQiLCJOdW1iZXIiLCJ1c2VySWQiLCJpc0ludGVnZXIiLCJUeXBlRXJyb3IiLCJnZXRSZXNvbHZlZEFsYXJtcyIsIk0iLCJ3Iiwic3Vic2NyaWJlIiwibGVuZ3RoIiwic2xpY2UiLCLJtWZhYyIsIsm1cHJvdiIsIiQiLCJ0b2tlbiIsImZhY3RvcnkiLCJwcm92aWRlZEluIiwiSiIsImlkIiwiVyIsIm4iLCJ1IiwibyIsImEiLCJjIiwibCIsInJvd3MiLCJYIiwiRyIsIkkiLCJZIiwiUyIsIiRpbXBsaWNpdCIsIkQiLCJwIiwicHJpb3JpdHkiLCJkIiwibmFtZSIsImxvY2F0aW9uIiwic3RhdHVzIiwiQyIsIm9wZW5lZEF0IiwiY2xvc2VkQXQiLCJoYW5kbGVyVXNlcm5hbWUiLCJaIiwiViIsIkwiLCJ5IiwiaCIsIm9uUHJldmlvdXNQYWdlIiwib25OZXh0UGFnZSIsImNvbHVtbnMiLCJPIiwiZWUiLCJ2IiwiXyIsInRlIiwidmUiLCJhbGFybUhpc3RvcnlTZXJ2aWNlIiwibGFiZWwiLCJuZ09uSW5pdCIsInZtIiwiQiIsImluaXRpYWxWYWx1ZSIsImciLCJtYXAiLCJ0b1JvdyIsInNvcnQiLCJEYXRlIiwiZ2V0VGltZSIsImFsYXJtTmFtZSIsImRldmljZSIsImRldmljZUlkIiwicG9zaXRpb24iLCJyZXNvbHV0aW9uVGltZSIsImFjdGl2YXRpb25UaW1lIiwidXNlclVzZXJuYW1lIiwiybVjbXAiLCJrIiwidHlwZSIsInNlbGVjdG9ycyIsImRlY2xzIiwidmFycyIsImNvbnN0cyIsInRlbXBsYXRlIiwiUCIsImRlcGVuZGVuY2llcyIsInEiLCJGIiwieiIsInN0eWxlcyIsIkFsYXJtSGlzdG9yeVBhZ2VDb21wb25lbnQiXSwic291cmNlcyI6WyJzcmMvYXBwL2ZlYXR1cmVzL2FsYXJtLWhpc3Rvcnkvc2VydmljZXMvYWxhcm0taGlzdG9yeS5zZXJ2aWNlLnRzIiwic3JjL2FwcC9mZWF0dXJlcy9hbGFybS1oaXN0b3J5L2NvbXBvbmVudHMvYWxhcm0taGlzdG9yeS1wYWdlLmNvbXBvbmVudC50cyIsInNyYy9hcHAvZmVhdHVyZXMvYWxhcm0taGlzdG9yeS9jb21wb25lbnRzL2FsYXJtLWhpc3RvcnktcGFnZS5jb21wb25lbnQuaHRtbCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBpbmplY3QgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBBbGFybUFwaVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vY29yZS9hbGFybS9zZXJ2aWNlcy9hbGFybS1hcGkuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBJbnRlcm5hbEF1dGhTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uL2NvcmUvc2VydmljZXMvaW50ZXJuYWwtYXV0aC5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IEFwaUVycm9yRGlzcGxheVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vY29yZS9zZXJ2aWNlcy9hcGktZXJyb3ItZGlzcGxheS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7XHJcbiAgICBCZWhhdmlvclN1YmplY3QsXHJcbiAgICBjYXRjaEVycm9yLFxyXG4gICAgY29tYmluZUxhdGVzdCxcclxuICAgIG1hcCxcclxuICAgIG9mLFxyXG4gICAgc2hhcmVSZXBsYXksXHJcbiAgICBzd2l0Y2hNYXAsXHJcbiAgICB0YWtlLFxyXG59IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IEFsYXJtTGlzdFZtIH0gZnJvbSBcIi4uL21vZGVscy9hbGFybS1saXN0LXZtLm1vZGVsXCI7XHJcbmltcG9ydCB7IEFjdGl2ZUFsYXJtIH0gZnJvbSBcIi4uLy4uLy4uL2NvcmUvYWxhcm0vbW9kZWxzL2FjdGl2ZS1hbGFybS5tb2RlbFwiO1xyXG5cclxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcclxuZXhwb3J0IGNsYXNzIEFsYXJtSGlzdG9yeVNlcnZpY2Uge1xyXG4gICAgcHJpdmF0ZSByZWFkb25seSBhbGFybUFwaVNlcnZpY2UgPSBpbmplY3QoQWxhcm1BcGlTZXJ2aWNlKTtcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgYXV0aFNlcnZpY2UgPSBpbmplY3QoSW50ZXJuYWxBdXRoU2VydmljZSk7XHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGFwaUVycm9yRGlzcGxheVNlcnZpY2UgPSBpbmplY3QoQXBpRXJyb3JEaXNwbGF5U2VydmljZSk7XHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHBhZ2VMaW1pdCA9IDY7XHJcblxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBwYWdlT2Zmc2V0JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigwKTtcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgY2FuR29OZXh0JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gICAgcHJpdmF0ZSByZWFkb25seSBhbGFybXMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxBY3RpdmVBbGFybVtdPihbXSk7XHJcblxyXG4gICAgcHVibGljIHJlYWRvbmx5IHZtJCA9IGNvbWJpbmVMYXRlc3QoW1xyXG4gICAgICAgIHRoaXMuYWxhcm1zJC5hc09ic2VydmFibGUoKSxcclxuICAgICAgICB0aGlzLnBhZ2VPZmZzZXQkLmFzT2JzZXJ2YWJsZSgpLFxyXG4gICAgICAgIHRoaXMuY2FuR29OZXh0JC5hc09ic2VydmFibGUoKSxcclxuICAgIF0pLnBpcGUoXHJcbiAgICAgICAgbWFwKChbYWxhcm1zLCBwYWdlT2Zmc2V0LCBjYW5Hb05leHRdKTogQWxhcm1MaXN0Vm0gPT4gKHtcclxuICAgICAgICAgICAgYWxhcm1zLFxyXG4gICAgICAgICAgICBjdXJyZW50UGFnZTogTWF0aC5mbG9vcihwYWdlT2Zmc2V0IC8gdGhpcy5wYWdlTGltaXQpICsgMSxcclxuICAgICAgICAgICAgcGFnZUxpbWl0OiB0aGlzLnBhZ2VMaW1pdCxcclxuICAgICAgICAgICAgcGFnZU9mZnNldCxcclxuICAgICAgICAgICAgY2FuR29QcmV2aW91czogcGFnZU9mZnNldCA+IDAsXHJcbiAgICAgICAgICAgIGNhbkdvTmV4dCxcclxuICAgICAgICB9KSksXHJcbiAgICAgICAgc2hhcmVSZXBsYXkoeyBidWZmZXJTaXplOiAxLCByZWZDb3VudDogdHJ1ZSB9KVxyXG4gICAgKTtcclxuXHJcbiAgICBwdWJsaWMgaW5pdGlhbGl6ZSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnBhZ2VPZmZzZXQkLm5leHQoMCk7XHJcbiAgICAgICAgdGhpcy5jYW5Hb05leHQkLm5leHQoZmFsc2UpO1xyXG4gICAgICAgIHRoaXMubG9hZFBhZ2UoMCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG5leHRQYWdlKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICghdGhpcy5jYW5Hb05leHQkLmdldFZhbHVlKCkpIHJldHVybjtcclxuICAgICAgICB0aGlzLmxvYWRQYWdlKHRoaXMucGFnZU9mZnNldCQuZ2V0VmFsdWUoKSArIHRoaXMucGFnZUxpbWl0KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcHJldmlvdXNQYWdlKCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRPZmZzZXQgPSB0aGlzLnBhZ2VPZmZzZXQkLmdldFZhbHVlKCk7XHJcbiAgICAgICAgaWYgKGN1cnJlbnRPZmZzZXQgPT09IDApIHJldHVybjtcclxuICAgICAgICB0aGlzLmxvYWRQYWdlKE1hdGgubWF4KDAsIGN1cnJlbnRPZmZzZXQgLSB0aGlzLnBhZ2VMaW1pdCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbG9hZFBhZ2Uob2Zmc2V0OiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmF1dGhTZXJ2aWNlLmdldEN1cnJlbnRVc2VyJCgpLnBpcGUoXHJcbiAgICAgICAgICAgIHRha2UoMSksXHJcbiAgICAgICAgICAgIHN3aXRjaE1hcCgoc2Vzc2lvbikgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbnVtZXJpY1VzZXJJZCA9IE51bWJlcihzZXNzaW9uPy51c2VySWQpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKG51bWVyaWNVc2VySWQpIHx8IG51bWVyaWNVc2VySWQgPD0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1V0ZW50ZSBjb3JyZW50ZSBub24gdmFsaWRvLicpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWxhcm1BcGlTZXJ2aWNlLmdldFJlc29sdmVkQWxhcm1zKFxyXG4gICAgICAgICAgICAgICAgICAgIG51bWVyaWNVc2VySWQsXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wYWdlTGltaXQgKyAxLFxyXG4gICAgICAgICAgICAgICAgICAgIG9mZnNldFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKCkgPT4gb2YoW10pKVxyXG4gICAgICAgICkuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgbmV4dDogKGFsYXJtczogQWN0aXZlQWxhcm1bXSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaGFzTmV4dCA9IGFsYXJtcy5sZW5ndGggPiB0aGlzLnBhZ2VMaW1pdDtcclxuICAgICAgICAgICAgICAgIHRoaXMuYWxhcm1zJC5uZXh0KGhhc05leHQgPyBhbGFybXMuc2xpY2UoMCwgdGhpcy5wYWdlTGltaXQpIDogYWxhcm1zKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FuR29OZXh0JC5uZXh0KGhhc05leHQpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wYWdlT2Zmc2V0JC5uZXh0KG9mZnNldCk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgeyBDb21wb25lbnQsIGNvbXB1dGVkLCBPbkluaXQsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdG9TaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBBbGFybUxpc3RWbSB9IGZyb20gJy4uL21vZGVscy9hbGFybS1saXN0LXZtLm1vZGVsJztcbmltcG9ydCB7IEFsYXJtVGFibGVDb2x1bW4gfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvbW9kZWxzL2FsYXJtLXRhYmxlLm1vZGVsJztcbmltcG9ydCB7IEFsYXJtSGlzdG9yeVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9hbGFybS1oaXN0b3J5LnNlcnZpY2UnO1xuaW1wb3J0IHsgQWxhcm1UYWJsZVJvdyB9IGZyb20gJy4uL21vZGVscy9hbGFybS10YWJsZS1yb3cnO1xuaW1wb3J0IHsgQWN0aXZlQWxhcm0gfSBmcm9tICcuLi8uLi8uLi9jb3JlL2FsYXJtL21vZGVscy9hY3RpdmUtYWxhcm0ubW9kZWwnO1xuaW1wb3J0IHsgQWxhcm1Qcmlvcml0eUluZGljYXRvckNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9jb21wb25lbnRzL2FsYXJtLXRhYmxlL2FsYXJtLXByaW9yaXR5LWluZGljYXRvci5jb21wb25lbnQnO1xuaW1wb3J0IHsgQWxhcm1UYWJsZVNoZWxsQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2NvbXBvbmVudHMvYWxhcm0tdGFibGUvYWxhcm0tdGFibGUtc2hlbGwuY29tcG9uZW50JztcbmltcG9ydCB7IERhdGVQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdhbGFybS1oaXN0b3J5JyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgQWxhcm1Qcmlvcml0eUluZGljYXRvckNvbXBvbmVudCxcbiAgICAgICAgQWxhcm1UYWJsZVNoZWxsQ29tcG9uZW50LFxuICAgICAgICBEYXRlUGlwZSxcbiAgICBdLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9hbGFybS1oaXN0b3J5LXBhZ2UuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsOiAnLi9hbGFybS1oaXN0b3J5LXBhZ2UuY29tcG9uZW50LmNzcydcbn0pXG5leHBvcnQgY2xhc3MgQWxhcm1IaXN0b3J5UGFnZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBhbGFybUhpc3RvcnlTZXJ2aWNlID0gaW5qZWN0KEFsYXJtSGlzdG9yeVNlcnZpY2UpO1xuXG4gICAgcHVibGljIHJlYWRvbmx5IGNvbHVtbnM6IHJlYWRvbmx5IEFsYXJtVGFibGVDb2x1bW5bXSA9IFtcbiAgICAgICAgeyBpZDogJ3ByaW9yaXR5JywgbGFiZWw6ICdQcmlvcml0w6AnIH0sXG4gICAgICAgIHsgaWQ6ICduYW1lJywgbGFiZWw6ICdOb21lJyB9LFxuICAgICAgICB7IGlkOiAnbG9jYXRpb24nLCBsYWJlbDogJ0x1b2dvJyB9LFxuICAgICAgICB7IGlkOiAnc3RhdHVzJywgbGFiZWw6ICdTdGF0bycgfSxcbiAgICAgICAgeyBpZDogJ29wZW5lZEF0JywgbGFiZWw6ICdTY2F0dGF0byBpbCcgfSxcbiAgICAgICAgeyBpZDogJ2Nsb3NlZEF0JywgbGFiZWw6ICdSaXNvbHRvIGlsJyB9LFxuICAgICAgICB7IGlkOiAnaGFuZGxlclVzZXJuYW1lJywgbGFiZWw6ICdHZXN0aXRvIGRhJyB9LFxuICAgIF07XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5hbGFybUhpc3RvcnlTZXJ2aWNlLmluaXRpYWxpemUoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVhZG9ubHkgdm0gPSB0b1NpZ25hbDxBbGFybUxpc3RWbSB8IG51bGw+KHRoaXMuYWxhcm1IaXN0b3J5U2VydmljZS52bSQsIHtcbiAgICAgICAgaW5pdGlhbFZhbHVlOiBudWxsLFxuICAgIH0pO1xuXG4gICAgcHVibGljIHJlYWRvbmx5IHJvd3MgPSBjb21wdXRlZCgoKTogQWxhcm1UYWJsZVJvd1tdID0+IHtcbiAgICAgICAgY29uc3Qgdm1TdGF0ZSA9IHRoaXMudm0oKTtcbiAgICAgICAgaWYgKCF2bVN0YXRlKSByZXR1cm4gW107XG4gICAgICAgIHJldHVybiB2bVN0YXRlLmFsYXJtc1xuICAgICAgICAgICAgLm1hcCgoYWxhcm06IEFjdGl2ZUFsYXJtKSA9PiB0aGlzLnRvUm93KGFsYXJtKSlcbiAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBuZXcgRGF0ZShiLmNsb3NlZEF0KS5nZXRUaW1lKCkgLSBuZXcgRGF0ZShhLmNsb3NlZEF0KS5nZXRUaW1lKCkpO1xuICAgIH0pO1xuXG4gICAgcHVibGljIHJlYWRvbmx5IGNhbkdvUHJldmlvdXMgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnZtKCk/LmNhbkdvUHJldmlvdXMgPz8gZmFsc2UpO1xuICAgIHB1YmxpYyByZWFkb25seSBjYW5Hb05leHQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnZtKCk/LmNhbkdvTmV4dCA/PyBmYWxzZSk7XG4gICAgcHVibGljIHJlYWRvbmx5IGN1cnJlbnRQYWdlID0gY29tcHV0ZWQoKCkgPT4gdGhpcy52bSgpPy5jdXJyZW50UGFnZSA/PyAxKTtcblxuICAgIHB1YmxpYyBvbk5leHRQYWdlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmFsYXJtSGlzdG9yeVNlcnZpY2UubmV4dFBhZ2UoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25QcmV2aW91c1BhZ2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuYWxhcm1IaXN0b3J5U2VydmljZS5wcmV2aW91c1BhZ2UoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHRvUm93KGFsYXJtOiBBY3RpdmVBbGFybSk6IEFsYXJtVGFibGVSb3cge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaWQ6IGFsYXJtLmlkLFxuICAgICAgICAgICAgcHJpb3JpdHk6IGFsYXJtLnByaW9yaXR5LFxuICAgICAgICAgICAgbmFtZTogYWxhcm0uYWxhcm1OYW1lLFxuICAgICAgICAgICAgZGV2aWNlOiBhbGFybS5kZXZpY2VJZCA/PyAnc2Nvbm9zY2l1dG8nLFxuICAgICAgICAgICAgbG9jYXRpb246IGFsYXJtLnBvc2l0aW9uLFxuICAgICAgICAgICAgc3RhdHVzOiBhbGFybS5yZXNvbHV0aW9uVGltZSA9PT0gbnVsbCA/ICdEYSBnZXN0aXJlJyA6ICdHZXN0aXRvJyxcbiAgICAgICAgICAgIG9wZW5lZEF0OiBhbGFybS5hY3RpdmF0aW9uVGltZSxcbiAgICAgICAgICAgIGNsb3NlZEF0OiBhbGFybS5yZXNvbHV0aW9uVGltZSA/PyAnc2Nvbm9zY2l1dG8nLFxuICAgICAgICAgICAgaGFuZGxlclVzZXJuYW1lOiBhbGFybS51c2VyVXNlcm5hbWUgPz8gJ3Njb25vc2NpdXRvJyxcbiAgICAgICAgfTtcbiAgICB9XG59XG4iLCI8c2VjdGlvbiBjbGFzcz1cImFsYXJtLW1hbmFnZW1lbnQtcGFnZSBjYXJlLXBhZ2UgY2FyZS1kb3QtZ3JpZCBzaWRlYmFyLXBhZ2VcIj5cclxuICAgIDxoZWFkZXIgY2xhc3M9XCJjYXJlLXBhZ2VfX2hlcm9cIj5cclxuICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICA8cCBjbGFzcz1cImNhcmUtZXllYnJvd1wiPkFsbGFybWk8L3A+XHJcbiAgICAgICAgICAgIDxoMSBjbGFzcz1cImNhcmUtdGl0bGVcIj5TdG9yaWNvIGFsbGFybWk8L2gxPlxyXG4gICAgICAgICAgICA8cCBjbGFzcz1cImNhcmUtc3VidGl0bGVcIj5WaXN1YWxpenphIGxlIGluZm9ybWF6aW9uaSBkZWdsaSBhbGxhcm1pIGdlc3RpdGkuPC9wPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICBAaWYgKHJvd3MoKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJjYXJlLXBhZ2VfX2hlYWRlci1iYWRnZVwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNhcmUtcGFnZV9faGVhZGVyLWJhZGdlLWRvdFwiPjwvc3Bhbj5cclxuICAgICAgICAgICAge3sgcm93cygpLmxlbmd0aCB9fSBpbiB0YWJlbGxhXHJcbiAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIH1cclxuICAgIDwvaGVhZGVyPlxyXG5cclxuICAgIEBpZiAodm0oKTsgYXMgdm1TdGF0ZSkge1xyXG4gICAgQGlmIChyb3dzKCkubGVuZ3RoID09PSAwKSB7XHJcbiAgICA8ZGl2XHJcbiAgICAgICAgY2xhc3M9XCJhbGFybS1tYW5hZ2VtZW50X19lbXB0eSBtdC0zIGZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHJvdW5kZWQtMnhsIGJvcmRlciBib3JkZXItc2xhdGUtMjAwIGJnLXdoaXRlLzcwIHAtMTQgdGV4dC1jZW50ZXIgc2hhZG93LXNtIGJhY2tkcm9wLWJsdXItc21cIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBoLTE0IHctMTQgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHJvdW5kZWQtMnhsIGJnLXNsYXRlLTEwMFwiPlxyXG4gICAgICAgICAgICA8c3ZnIGNsYXNzPVwiaC03IHctNyB0ZXh0LXNsYXRlLTQwMFwiIGZpbGw9XCJub25lXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiXHJcbiAgICAgICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIj5cclxuICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgZD1cIk0xNSAxOS4xMjhhOS4zOCA5LjM4IDAgMDAyLjYyNS4zNzIgOS4zMzcgOS4zMzcgMCAwMDQuMTIxLS45NTIgNC4xMjUgNC4xMjUgMCAwMC03LjUzMy0yLjQ5M00xNSAxOS4xMjh2LS4wMDNjMC0xLjExMy0uMjg1LTIuMTYtLjc4Ni0zLjA3TTE1IDE5LjEyOHYuMTA2QTEyLjMxOCAxMi4zMTggMCAwMTguNjI0IDIxYy0yLjMzMSAwLTQuNTEyLS42NDUtNi4zNzQtMS43NjZsLS4wMDEtLjEwOWE2LjM3NSA2LjM3NSAwIDAxMTEuOTY0LTMuMDdNMTIgNi4zNzVhMy4zNzUgMy4zNzUgMCAxMS02Ljc1IDAgMy4zNzUgMy4zNzUgMCAwMTYuNzUgMHptOC4yNSAyLjI1YTIuNjI1IDIuNjI1IDAgMTEtNS4yNSAwIDIuNjI1IDIuNjI1IDAgMDE1LjI1IDB6XCIgLz5cclxuICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPHAgY2xhc3M9XCJtdC00IHRleHQtc20gZm9udC1zZW1pYm9sZCB0ZXh0LXNsYXRlLTcwMFwiPk5lc3N1biBzdG9yaWNvIGFsbGFybWUgZGlzcG9uaWJpbGUgYWwgbW9tZW50by48L3A+XHJcbiAgICAgICAgPHAgY2xhc3M9XCJtdC0xIHRleHQteHMgdGV4dC1zbGF0ZS01MDBcIj5RdWFuZG8gdmVycmFubm8gcmlsZXZhdGkgYWxsYXJtaSBnZXN0aXRpLCBjb21wYXJpcmFubm8gcXVpLjwvcD5cclxuICAgIDwvZGl2PlxyXG4gICAgfSBAZWxzZSB7XHJcbiAgICA8YXBwLWFsYXJtLXRhYmxlLXNoZWxsIFt0aXRsZV09XCInU3RvcmljbyBhbGxhcm1pJ1wiIFtjYXB0aW9uXT1cIidUYWJlbGxhIHN0b3JpY28gYWxsYXJtaSdcIiBbY29sdW1uc109XCJjb2x1bW5zXCI+XHJcbiAgICAgICAgQGZvciAocm93IG9mIHJvd3MoKTsgdHJhY2sgcm93LmlkKSB7XHJcbiAgICAgICAgPHRyIGNsYXNzPVwiZ3JvdXAgdHJhbnNpdGlvbi1jb2xvcnMgaG92ZXI6Ymctc2xhdGUtNTAvODBcIiBbYXR0ci5kYXRhLXRlc3RpZF09XCInYWxhcm0tcm93LScgKyByb3cuaWRcIj5cclxuICAgICAgICAgICAgPHRkIGNsYXNzPVwicHgtNSBweS0zLjUgYWxpZ24tbWlkZGxlXCI+XHJcbiAgICAgICAgICAgICAgICA8YXBwLWFsYXJtLXByaW9yaXR5LWluZGljYXRvciBbcHJpb3JpdHldPVwicm93LnByaW9yaXR5XCIgLz5cclxuICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgPHRkIGNsYXNzPVwicHgtNSBweS0zLjUgYWxpZ24tbWlkZGxlIHRleHQtc20gZm9udC1zZW1pYm9sZCB0ZXh0LXNsYXRlLTkwMFwiPnt7IHJvdy5uYW1lIH19PC90ZD5cclxuICAgICAgICAgICAgPHRkIGNsYXNzPVwicHgtNSBweS0zLjUgYWxpZ24tbWlkZGxlIHRleHQtc20gdGV4dC1zbGF0ZS03MDBcIj57eyByb3cubG9jYXRpb24gfX08L3RkPlxyXG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJweC01IHB5LTMuNSBhbGlnbi1taWRkbGVcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIgcm91bmRlZC1mdWxsIGJvcmRlciBib3JkZXItZW1lcmFsZC0yMDAgYmctZW1lcmFsZC01MCBweC0yLjUgcHktMSB0ZXh0LXhzIGZvbnQtc2VtaWJvbGQgdGV4dC1lbWVyYWxkLTcwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IHJvdy5zdGF0dXMgfX1cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgPHRkIGNsYXNzPVwicHgtNSBweS0zLjUgYWxpZ24tbWlkZGxlIHRleHQtc20gdGV4dC1zbGF0ZS03MDBcIj57eyByb3cub3BlbmVkQXQgfCBkYXRlOidkZC9NTS95eXl5IEhIOm1tJyB9fTwvdGQ+XHJcbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cInB4LTUgcHktMy41IGFsaWduLW1pZGRsZSB0ZXh0LXNtIHRleHQtc2xhdGUtNzAwXCI+e3sgcm93LmNsb3NlZEF0IHwgZGF0ZTonZGQvTU0veXl5eSBISDptbScgfX08L3RkPlxyXG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJweC01IHB5LTMuNSBhbGlnbi1taWRkbGUgdGV4dC1zbSB0ZXh0LXNsYXRlLTcwMFwiPnt7IHJvdy5oYW5kbGVyVXNlcm5hbWUgfX08L3RkPlxyXG4gICAgICAgIDwvdHI+XHJcbiAgICAgICAgfVxyXG4gICAgPC9hcHAtYWxhcm0tdGFibGUtc2hlbGw+XHJcblxyXG4gICAgPG5hdiBhcmlhLWxhYmVsPVwiTmF2aWdhemlvbmUgcGFnaW5lIHN0b3JpY28gYWxsYXJtaVwiIGNsYXNzPVwiY2FyZS1wYWdpbmF0aW9uXCI+XHJcbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjYXJlLXBhZ2luYXRpb25fX2J1dHRvblwiIFtkaXNhYmxlZF09XCIhY2FuR29QcmV2aW91cygpXCIgKGNsaWNrKT1cIm9uUHJldmlvdXNQYWdlKClcIlxyXG4gICAgICAgICAgICBhcmlhLWxhYmVsPVwiUGFnaW5hIHByZWNlZGVudGUgc3RvcmljbyBhbGxhcm1pXCI+XHJcbiAgICAgICAgICAgIFByZWNlZGVudGVcclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cImNhcmUtcGFnaW5hdGlvbl9fc3RhdHVzXCIgYXJpYS1saXZlPVwicG9saXRlXCI+UGFnaW5hIHt7IGN1cnJlbnRQYWdlKCkgfX0gPC9zcGFuPlxyXG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiY2FyZS1wYWdpbmF0aW9uX19idXR0b25cIiBbZGlzYWJsZWRdPVwiIWNhbkdvTmV4dCgpXCIgKGNsaWNrKT1cIm9uTmV4dFBhZ2UoKVwiXHJcbiAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJQYWdpbmEgc3VjY2Vzc2l2YSBzdG9yaWNvIGFsbGFybWlcIj5cclxuICAgICAgICAgICAgU3VjY2Vzc2l2YVxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9uYXY+XHJcbiAgICB9XHJcbiAgICB9IEBlbHNlIHtcclxuICAgIDxkaXYgY2xhc3M9XCJyb3VuZGVkLXhsIGJvcmRlciBib3JkZXItc2xhdGUtMjAwIGJnLXdoaXRlIHB4LTQgcHktMyB0ZXh0LXNtIHRleHQtc2xhdGUtNjAwIHNoYWRvdy1zbVwiXHJcbiAgICAgICAgYXJpYS1saXZlPVwicG9saXRlXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImgtNCB3LTQgYW5pbWF0ZS1zcGluIHJvdW5kZWQtZnVsbCBib3JkZXItMiBib3JkZXItc2xhdGUtMjAwIGJvcmRlci10LXNsYXRlLTUwMFwiPjwvZGl2PlxyXG4gICAgICAgIENhcmljYW1lbnRvIHN0b3JpY28gYWxsYXJtaSBpbiBjb3Jzby4uLlxyXG4gICAgPC9kaXY+XHJcbiAgICB9XHJcbjwvc2VjdGlvbj4iXSwibWFwcGluZ3MiOiI7d3VCQWtCQSxHQUFhLENBQUFBLENBQUEsRUFBQUMsYUFBQSxHQUFBQyxDQUFBLE9BQW1CLEtBQUFELGFBQUEsR0FBQUUsQ0FBQSxNQUExQixLQUFPLENBQUFDLENBQW1CLENBQ1hDLGVBQUEsRUFBQUosYUFBQSxHQUFBQyxDQUFBLE1BQWtCSSxDQUFBLENBQU9DLENBQWUsR0FDeENDLFdBQUEsRUFBQVAsYUFBQSxHQUFBQyxDQUFBLE1BQWNJLENBQUEsQ0FBT0csQ0FBbUIsR0FDeENDLHNCQUFBLEVBQUFULGFBQUEsR0FBQUMs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 \ No newline at end of file diff --git a/frontend/dist-instrumented/chunk-RSPUKT2Q.js.map b/frontend/dist-instrumented/chunk-RSPUKT2Q.js.map new file mode 100644 index 00000000..0ef83bc1 --- /dev/null +++ b/frontend/dist-instrumented/chunk-RSPUKT2Q.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["src/app/features/alarm-history/services/alarm-history.service.ts", "src/app/features/alarm-history/components/alarm-history-page.component.ts", "src/app/features/alarm-history/components/alarm-history-page.component.html"], + "sourcesContent": ["import { Injectable, inject } from \"@angular/core\";\r\nimport { AlarmApiService } from \"../../../core/alarm/services/alarm-api.service\";\r\nimport { InternalAuthService } from \"../../../core/services/internal-auth.service\";\r\nimport { ApiErrorDisplayService } from \"../../../core/services/api-error-display.service\";\r\nimport {\r\n BehaviorSubject,\r\n catchError,\r\n combineLatest,\r\n map,\r\n of,\r\n shareReplay,\r\n switchMap,\r\n take,\r\n} from \"rxjs\";\r\nimport { AlarmListVm } from \"../models/alarm-list-vm.model\";\r\nimport { ActiveAlarm } from \"../../../core/alarm/models/active-alarm.model\";\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class AlarmHistoryService {\r\n private readonly alarmApiService = inject(AlarmApiService);\r\n private readonly authService = inject(InternalAuthService);\r\n private readonly apiErrorDisplayService = inject(ApiErrorDisplayService);\r\n private readonly pageLimit = 6;\r\n\r\n private readonly pageOffset$ = new BehaviorSubject(0);\r\n private readonly canGoNext$ = new BehaviorSubject(false);\r\n private readonly alarms$ = new BehaviorSubject([]);\r\n\r\n public readonly vm$ = combineLatest([\r\n this.alarms$.asObservable(),\r\n this.pageOffset$.asObservable(),\r\n this.canGoNext$.asObservable(),\r\n ]).pipe(\r\n map(([alarms, pageOffset, canGoNext]): AlarmListVm => ({\r\n alarms,\r\n currentPage: Math.floor(pageOffset / this.pageLimit) + 1,\r\n pageLimit: this.pageLimit,\r\n pageOffset,\r\n canGoPrevious: pageOffset > 0,\r\n canGoNext,\r\n })),\r\n shareReplay({ bufferSize: 1, refCount: true })\r\n );\r\n\r\n public initialize(): void {\r\n this.pageOffset$.next(0);\r\n this.canGoNext$.next(false);\r\n this.loadPage(0);\r\n }\r\n\r\n public nextPage(): void {\r\n if (!this.canGoNext$.getValue()) return;\r\n this.loadPage(this.pageOffset$.getValue() + this.pageLimit);\r\n }\r\n\r\n public previousPage(): void {\r\n const currentOffset = this.pageOffset$.getValue();\r\n if (currentOffset === 0) return;\r\n this.loadPage(Math.max(0, currentOffset - this.pageLimit));\r\n }\r\n\r\n private loadPage(offset: number): void {\r\n this.authService.getCurrentUser$().pipe(\r\n take(1),\r\n switchMap((session) => {\r\n const numericUserId = Number(session?.userId);\r\n if (!Number.isInteger(numericUserId) || numericUserId <= 0) {\r\n throw new TypeError('Utente corrente non valido.');\r\n }\r\n return this.alarmApiService.getResolvedAlarms(\r\n numericUserId,\r\n this.pageLimit + 1,\r\n offset\r\n );\r\n }),\r\n catchError(() => of([]))\r\n ).subscribe({\r\n next: (alarms: ActiveAlarm[]) => {\r\n const hasNext = alarms.length > this.pageLimit;\r\n this.alarms$.next(hasNext ? alarms.slice(0, this.pageLimit) : alarms);\r\n this.canGoNext$.next(hasNext);\r\n this.pageOffset$.next(offset);\r\n },\r\n });\r\n }\r\n}", "import { Component, computed, OnInit, inject } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { AlarmListVm } from '../models/alarm-list-vm.model';\nimport { AlarmTableColumn } from '../../../shared/models/alarm-table.model';\nimport { AlarmHistoryService } from '../services/alarm-history.service';\nimport { AlarmTableRow } from '../models/alarm-table-row';\nimport { ActiveAlarm } from '../../../core/alarm/models/active-alarm.model';\nimport { AlarmPriorityIndicatorComponent } from '../../../shared/components/alarm-table/alarm-priority-indicator.component';\nimport { AlarmTableShellComponent } from '../../../shared/components/alarm-table/alarm-table-shell.component';\nimport { DatePipe } from '@angular/common';\n\n@Component({\n selector: 'alarm-history',\n standalone: true,\n imports: [\n AlarmPriorityIndicatorComponent,\n AlarmTableShellComponent,\n DatePipe,\n ],\n templateUrl: './alarm-history-page.component.html',\n styleUrl: './alarm-history-page.component.css'\n})\nexport class AlarmHistoryPageComponent implements OnInit {\n private readonly alarmHistoryService = inject(AlarmHistoryService);\n\n public readonly columns: readonly AlarmTableColumn[] = [\n { id: 'priority', label: 'Priorità' },\n { id: 'name', label: 'Nome' },\n { id: 'location', label: 'Luogo' },\n { id: 'status', label: 'Stato' },\n { id: 'openedAt', label: 'Scattato il' },\n { id: 'closedAt', label: 'Risolto il' },\n { id: 'handlerUsername', label: 'Gestito da' },\n ];\n\n ngOnInit(): void {\n this.alarmHistoryService.initialize();\n }\n\n public readonly vm = toSignal(this.alarmHistoryService.vm$, {\n initialValue: null,\n });\n\n public readonly rows = computed((): AlarmTableRow[] => {\n const vmState = this.vm();\n if (!vmState) return [];\n return vmState.alarms\n .map((alarm: ActiveAlarm) => this.toRow(alarm))\n .sort((a, b) => new Date(b.closedAt).getTime() - new Date(a.closedAt).getTime());\n });\n\n public readonly canGoPrevious = computed(() => this.vm()?.canGoPrevious ?? false);\n public readonly canGoNext = computed(() => this.vm()?.canGoNext ?? false);\n public readonly currentPage = computed(() => this.vm()?.currentPage ?? 1);\n\n public onNextPage(): void {\n this.alarmHistoryService.nextPage();\n }\n\n public onPreviousPage(): void {\n this.alarmHistoryService.previousPage();\n }\n\n private toRow(alarm: ActiveAlarm): AlarmTableRow {\n return {\n id: alarm.id,\n priority: alarm.priority,\n name: alarm.alarmName,\n device: alarm.deviceId ?? 'sconosciuto',\n location: alarm.position,\n status: alarm.resolutionTime === null ? 'Da gestire' : 'Gestito',\n openedAt: alarm.activationTime,\n closedAt: alarm.resolutionTime ?? 'sconosciuto',\n handlerUsername: alarm.userUsername ?? 'sconosciuto',\n };\n }\n}\n", "
\r\n
\r\n
\r\n

Allarmi

\r\n

Storico allarmi

\r\n

Visualizza le informazioni degli allarmi gestiti.

\r\n
\r\n\r\n @if (rows().length > 0) {\r\n \r\n \r\n {{ rows().length }} in tabella\r\n \r\n }\r\n
\r\n\r\n @if (vm(); as vmState) {\r\n @if (rows().length === 0) {\r\n \r\n
\r\n \r\n \r\n \r\n
\r\n

Nessun storico allarme disponibile al momento.

\r\n

Quando verranno rilevati allarmi gestiti, compariranno qui.

\r\n \r\n } @else {\r\n \r\n @for (row of rows(); track row.id) {\r\n \r\n \r\n \r\n \r\n {{ row.name }}\r\n {{ row.location }}\r\n \r\n \r\n {{ row.status }}\r\n \r\n \r\n {{ row.openedAt | date:'dd/MM/yyyy HH:mm' }}\r\n {{ row.closedAt | date:'dd/MM/yyyy HH:mm' }}\r\n {{ row.handlerUsername }}\r\n \r\n }\r\n \r\n\r\n \r\n }\r\n } @else {\r\n
\r\n
\r\n Caricamento storico allarmi in corso...\r\n
\r\n }\r\n
"], + "mappings": "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", + "names": ["AlarmHistoryService", "alarmApiService", "inject", "AlarmApiService", "authService", "InternalAuthService", "apiErrorDisplayService", "ApiErrorDisplayService", "pageLimit", "pageOffset$", "BehaviorSubject", "canGoNext$", "alarms$", "vm$", "combineLatest", "asObservable", "pipe", "map", "alarms", "pageOffset", "canGoNext", "currentPage", "Math", "floor", "canGoPrevious", "shareReplay", "bufferSize", "refCount", "initialize", "next", "loadPage", "nextPage", "getValue", "previousPage", "currentOffset", "max", "offset", "getCurrentUser$", "take", "switchMap", "session", "numericUserId", "Number", "userId", "isInteger", "TypeError", "getResolvedAlarms", "catchError", "of", "subscribe", "hasNext", "length", "slice", "factory", "\u0275fac", "providedIn", "\u0275\u0275elementStart", "\u0275\u0275element", "\u0275\u0275text", "\u0275\u0275elementEnd", "\u0275\u0275advance", "\u0275\u0275textInterpolate1", "ctx_r0", "rows", "length", "\u0275\u0275property", "row_r3", "priority", "\u0275\u0275textInterpolate", "name", "location", "status", "\u0275\u0275pipeBind2", "openedAt", "closedAt", "handlerUsername", "\u0275\u0275repeaterCreate", "AlarmHistoryPageComponent_Conditional_10_Conditional_1_For_2_Template", "_forTrack0", "\u0275\u0275listener", "\u0275\u0275restoreView", "_r2", "\u0275\u0275nextContext", "\u0275\u0275resetView", "onPreviousPage", "onNextPage", "columns", "\u0275\u0275repeater", "canGoPrevious", "currentPage", "canGoNext", "\u0275\u0275conditionalCreate", "AlarmHistoryPageComponent_Conditional_10_Conditional_0_Template", "AlarmHistoryPageComponent_Conditional_10_Conditional_1_Template", "\u0275\u0275conditional", "AlarmHistoryPageComponent", "alarmHistoryService", "inject", "AlarmHistoryService", "id", "label", "ngOnInit", "initialize", "vm", "toSignal", "vm$", "initialValue", "computed", "vmState", "alarms", "map", "alarm", "toRow", "sort", "a", "b", "Date", "getTime", "nextPage", "previousPage", "alarmName", "device", "deviceId", "position", "resolutionTime", "activationTime", "userUsername", "selectors", "decls", "vars", "consts", "template", "rf", "ctx", "AlarmHistoryPageComponent_Conditional_9_Template", "AlarmHistoryPageComponent_Conditional_10_Template", "AlarmHistoryPageComponent_Conditional_11_Template", "tmp_1_0", "AlarmPriorityIndicatorComponent", "AlarmTableShellComponent", "DatePipe", "styles"] +} diff --git a/frontend/dist-instrumented/chunk-RYTNMYZW.js b/frontend/dist-instrumented/chunk-RYTNMYZW.js new file mode 100644 index 00000000..56678ab8 --- /dev/null +++ b/frontend/dist-instrumented/chunk-RYTNMYZW.js @@ -0,0 +1,6 @@ +function cov_18tmdn9r60(){var path="/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-RYTNMYZW.js";var hash="5681395b1ea3c9bb6d1ac9e687f920368b0ed9d2";var global=new Function("return this")();var gcv="__coverage__";var coverageData={path:"/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-RYTNMYZW.js",statementMap:{"0":{start:{line:1,column:61},end:{line:1,column:88}},"1":{start:{line:1,column:110},end:{line:1,column:157}},"2":{start:{line:1,column:116},end:{line:1,column:155}},"3":{start:{line:1,column:158},end:{line:1,column:235}},"4":{start:{line:1,column:243},end:{line:3,column:57}},"5":{start:{line:1,column:249},end:{line:3,column:56}},"6":{start:{line:1,column:261},end:{line:3,column:55}},"7":{start:{line:2,column:15},end:{line:2,column:40}},"8":{start:{line:3,column:75},end:{line:3,column:120}},"9":{start:{line:3,column:87},end:{line:3,column:99}},"10":{start:{line:3,column:100},end:{line:3,column:119}},"11":{start:{line:3,column:127},end:{line:3,column:1208}},"12":{start:{line:3,column:150},end:{line:3,column:230}},"13":{start:{line:3,column:251},end:{line:3,column:649}},"14":{start:{line:3,column:268},end:{line:3,column:283}},"15":{start:{line:3,column:301},end:{line:3,column:305}},"16":{start:{line:3,column:306},end:{line:3,column:402}},"17":{start:{line:3,column:311},end:{line:3,column:402}},"18":{start:{line:3,column:352},end:{line:3,column:382}},"19":{start:{line:3,column:367},end:{line:3,column:382}},"20":{start:{line:3,column:387},end:{line:3,column:402}},"21":{start:{line:3,column:425},end:{line:3,column:429}},"22":{start:{line:3,column:430},end:{line:3,column:486}},"23":{start:{line:3,column:438},end:{line:3,column:486}},"24":{start:{line:3,column:442},end:{line:3,column:445}},"25":{start:{line:3,column:455},end:{line:3,column:485}},"26":{start:{line:3,column:505},end:{line:3,column:509}},"27":{start:{line:3,column:510},end:{line:3,column:628}},"28":{start:{line:3,column:516},end:{line:3,column:538}},"29":{start:{line:3,column:538},end:{line:3,column:627}},"30":{start:{line:3,column:553},end:{line:3,column:627}},"31":{start:{line:3,column:557},end:{line:3,column:562}},"32":{start:{line:3,column:572},end:{line:3,column:626}},"33":{start:{line:3,column:628},end:{line:3,column:648}},"34":{start:{line:3,column:633},end:{line:3,column:648}},"35":{start:{line:3,column:663},end:{line:3,column:853}},"36":{start:{line:3,column:678},end:{line:3,column:853}},"37":{start:{line:3,column:693},end:{line:3,column:699}},"38":{start:{line:3,column:704},end:{line:3,column:781}},"39":{start:{line:3,column:723},end:{line:3,column:762}},"40":{start:{line:3,column:755},end:{line:3,column:762}},"41":{start:{line:3,column:762},end:{line:3,column:780}},"42":{start:{line:3,column:781},end:{line:3,column:852}},"43":{start:{line:3,column:886},end:{line:3,column:890}},"44":{start:{line:3,column:891},end:{line:3,column:936}},"45":{start:{line:3,column:969},end:{line:3,column:973}},"46":{start:{line:3,column:974},end:{line:3,column:1030}},"47":{start:{line:3,column:1066},end:{line:3,column:1070}},"48":{start:{line:3,column:1071},end:{line:3,column:1123}},"49":{start:{line:3,column:1153},end:{line:3,column:1157}},"50":{start:{line:3,column:1158},end:{line:3,column:1206}},"51":{start:{line:3,column:1209},end:{line:3,column:1260}},"52":{start:{line:3,column:1229},end:{line:3,column:1234}},"53":{start:{line:3,column:1235},end:{line:3,column:1255}},"54":{start:{line:3,column:1267},end:{line:3,column:1274}},"55":{start:{line:3,column:1290},end:{line:3,column:1369}},"56":{start:{line:3,column:1385},end:{line:3,column:1409}},"57":{start:{line:3,column:1417},end:{line:3,column:1551}},"58":{start:{line:3,column:1559},end:{line:3,column:1759}},"59":{start:{line:3,column:1597},end:{line:3,column:1599}},"60":{start:{line:3,column:1600},end:{line:3,column:1664}},"61":{start:{line:3,column:1698},end:{line:3,column:1700}},"62":{start:{line:3,column:1701},end:{line:3,column:1741}},"63":{start:{line:3,column:1775},end:{line:3,column:1845}},"64":{start:{line:3,column:1818},end:{line:3,column:1820}},"65":{start:{line:3,column:1821},end:{line:3,column:1843}},"66":{start:{line:3,column:1826},end:{line:3,column:1831}},"67":{start:{line:3,column:1836},end:{line:3,column:1843}},"68":{start:{line:3,column:1868},end:{line:3,column:1889}},"69":{start:{line:3,column:1905},end:{line:3,column:1928}},"70":{start:{line:3,column:1944},end:{line:3,column:1967}},"71":{start:{line:3,column:1987},end:{line:3,column:2017}},"72":{start:{line:3,column:2025},end:{line:3,column:2029}},"73":{start:{line:3,column:2045},end:{line:3,column:2206}},"74":{start:{line:3,column:2096},end:{line:3,column:2099}},"75":{start:{line:3,column:2100},end:{line:3,column:2197}},"76":{start:{line:3,column:2173},end:{line:3,column:2175}},"77":{start:{line:3,column:2176},end:{line:3,column:2196}},"78":{start:{line:3,column:2189},end:{line:3,column:2196}},"79":{start:{line:3,column:2203},end:{line:3,column:2206}},"80":{start:{line:3,column:2222},end:{line:3,column:2298}},"81":{start:{line:3,column:2306},end:{line:3,column:2932}},"82":{start:{line:3,column:2337},end:{line:3,column:2424}},"83":{start:{line:3,column:2446},end:{line:3,column:2466}},"84":{start:{line:3,column:2475},end:{line:3,column:2518}},"85":{start:{line:3,column:2528},end:{line:3,column:2592}},"86":{start:{line:3,column:2604},end:{line:3,column:2667}},"87":{start:{line:3,column:2682},end:{line:3,column:2756}},"88":{start:{line:3,column:2766},end:{line:3,column:2790}},"89":{start:{line:3,column:2801},end:{line:3,column:2858}},"90":{start:{line:3,column:2805},end:{line:3,column:2830}},"91":{start:{line:3,column:2839},end:{line:3,column:2857}},"92":{start:{line:3,column:2871},end:{line:3,column:2930}},"93":{start:{line:3,column:2875},end:{line:3,column:2902}},"94":{start:{line:3,column:2911},end:{line:3,column:2929}},"95":{start:{line:3,column:2936},end:{line:3,column:2959}},"96":{start:{line:3,column:2977},end:{line:3,column:2996}},"97":{start:{line:3,column:3004},end:{line:3,column:3300}},"98":{start:{line:3,column:3025},end:{line:3,column:3047}},"99":{start:{line:3,column:3079},end:{line:3,column:3083}},"100":{start:{line:3,column:3084},end:{line:3,column:3123}},"101":{start:{line:3,column:3094},end:{line:3,column:3123}},"102":{start:{line:3,column:3098},end:{line:3,column:3107}},"103":{start:{line:3,column:3117},end:{line:3,column:3122}},"104":{start:{line:3,column:3156},end:{line:3,column:3160}},"105":{start:{line:3,column:3161},end:{line:3,column:3212}},"106":{start:{line:3,column:3172},end:{line:3,column:3202}},"107":{start:{line:3,column:3176},end:{line:3,column:3186}},"108":{start:{line:3,column:3196},end:{line:3,column:3201}},"109":{start:{line:3,column:3207},end:{line:3,column:3212}},"110":{start:{line:3,column:3247},end:{line:3,column:3251}},"111":{start:{line:3,column:3252},end:{line:3,column:3298}},"112":{start:{line:3,column:3266},end:{line:3,column:3298}},"113":{start:{line:3,column:3270},end:{line:3,column:3282}},"114":{start:{line:3,column:3292},end:{line:3,column:3297}},"115":{start:{line:3,column:3304},end:{line:3,column:3652}},"116":{start:{line:3,column:3340},end:{line:3,column:3348}},"117":{start:{line:3,column:3354},end:{line:3,column:3624}},"118":{start:{line:3,column:3366},end:{line:3,column:3420}},"119":{start:{line:3,column:3431},end:{line:3,column:3623}},"120":{start:{line:3,column:3503},end:{line:3,column:3521}},"121":{start:{line:3,column:3624},end:{line:3,column:3650}},"122":{start:{line:3,column:3668},end:{line:3,column:3720}},"123":{start:{line:3,column:3736},end:{line:3,column:3743}},"124":{start:{line:3,column:3790},end:{line:3,column:3792}},"125":{start:{line:3,column:3793},end:{line:3,column:3821}},"126":{start:{line:3,column:3814},end:{line:3,column:3820}},"127":{start:{line:3,column:3829},end:{line:3,column:3869}},"128":{start:{line:3,column:3877},end:{line:3,column:3937}},"129":{start:{line:3,column:3953},end:{line:3,column:3961}},"130":{start:{line:3,column:3980},end:{line:3,column:3992}},"131":{start:{line:3,column:4008},end:{line:3,column:4092}},"132":{start:{line:3,column:4061},end:{line:3,column:4091}},"133":{start:{line:3,column:4084},end:{line:3,column:4088}},"134":{start:{line:3,column:4099},end:{line:3,column:4836}},"135":{start:{line:3,column:4128},end:{line:3,column:4150}},"136":{start:{line:3,column:4165},end:{line:3,column:4170}},"137":{start:{line:3,column:4171},end:{line:3,column:4206}},"138":{start:{line:3,column:4230},end:{line:3,column:4251}},"139":{start:{line:3,column:4252},end:{line:3,column:4364}},"140":{start:{line:3,column:4292},end:{line:3,column:4296}},"141":{start:{line:3,column:4297},end:{line:3,column:4360}},"142":{start:{line:3,column:4382},end:{line:3,column:4432}},"143":{start:{line:3,column:4386},end:{line:3,column:4411}},"144":{start:{line:3,column:4421},end:{line:3,column:4431}},"145":{start:{line:3,column:4446},end:{line:3,column:4579}},"146":{start:{line:3,column:4481},end:{line:3,column:4559}},"147":{start:{line:3,column:4498},end:{line:3,column:4537}},"148":{start:{line:3,column:4502},end:{line:3,column:4506}},"149":{start:{line:3,column:4516},end:{line:3,column:4536}},"150":{start:{line:3,column:4560},end:{line:3,column:4577}},"151":{start:{line:3,column:4600},end:{line:3,column:4662}},"152":{start:{line:3,column:4670},end:{line:3,column:4681}},"153":{start:{line:3,column:4693},end:{line:3,column:4711}},"154":{start:{line:3,column:4725},end:{line:3,column:4801}},"155":{start:{line:3,column:4760},end:{line:3,column:4799}},"156":{start:{line:3,column:4778},end:{line:3,column:4781}},"157":{start:{line:3,column:4785},end:{line:3,column:4789}},"158":{start:{line:3,column:4794},end:{line:3,column:4798}},"159":{start:{line:3,column:4803},end:{line:3,column:4832}},"160":{start:{line:3,column:4822},end:{line:3,column:4830}},"161":{start:{line:3,column:4858},end:{line:3,column:4910}},"162":{start:{line:3,column:4926},end:{line:3,column:4972}},"163":{start:{line:3,column:4988},end:{line:3,column:5027}},"164":{start:{line:3,column:5035},end:{line:3,column:5132}},"165":{start:{line:3,column:5041},end:{line:3,column:5131}},"166":{start:{line:3,column:5052},end:{line:3,column:5130}},"167":{start:{line:3,column:5140},end:{line:3,column:6590}},"168":{start:{line:3,column:5178},end:{line:3,column:5302}},"169":{start:{line:3,column:5317},end:{line:3,column:5334}},"170":{start:{line:3,column:5335},end:{line:3,column:5356}},"171":{start:{line:3,column:5374},end:{line:3,column:5401}},"172":{start:{line:3,column:5389},end:{line:3,column:5401}},"173":{start:{line:3,column:5410},end:{line:3,column:5581}},"174":{start:{line:3,column:5418},end:{line:3,column:5579}},"175":{start:{line:3,column:5460},end:{line:3,column:5534}},"176":{start:{line:3,column:5534},end:{line:3,column:5578}},"177":{start:{line:3,column:5569},end:{line:3,column:5578}},"178":{start:{line:3,column:5591},end:{line:3,column:5750}},"179":{start:{line:3,column:5599},end:{line:3,column:5748}},"180":{start:{line:3,column:5641},end:{line:3,column:5692}},"181":{start:{line:3,column:5709},end:{line:3,column:5713}},"182":{start:{line:3,column:5714},end:{line:3,column:5747}},"183":{start:{line:3,column:5729},end:{line:3,column:5747}},"184":{start:{line:3,column:5762},end:{line:3,column:5890}},"185":{start:{line:3,column:5770},end:{line:3,column:5888}},"186":{start:{line:3,column:5812},end:{line:3,column:5830}},"187":{start:{line:3,column:5847},end:{line:3,column:5851}},"188":{start:{line:3,column:5852},end:{line:3,column:5887}},"189":{start:{line:3,column:5867},end:{line:3,column:5887}},"190":{start:{line:3,column:5905},end:{line:3,column:5976}},"191":{start:{line:3,column:5998},end:{line:3,column:6061}},"192":{start:{line:3,column:6079},end:{line:3,column:6130}},"193":{start:{line:3,column:6145},end:{line:3,column:6229}},"194":{start:{line:3,column:6289},end:{line:3,column:6293}},"195":{start:{line:3,column:6294},end:{line:3,column:6395}},"196":{start:{line:3,column:6358},end:{line:3,column:6392}},"197":{start:{line:3,column:6465},end:{line:3,column:6469}},"198":{start:{line:3,column:6470},end:{line:3,column:6498}},"199":{start:{line:3,column:6520},end:{line:3,column:6525}},"200":{start:{line:3,column:6526},end:{line:3,column:6548}},"201":{start:{line:3,column:6550},end:{line:3,column:6586}},"202":{start:{line:3,column:6573},end:{line:3,column:6584}},"203":{start:{line:3,column:6594},end:{line:3,column:7108}},"204":{start:{line:3,column:6628},end:{line:3,column:6668}},"205":{start:{line:3,column:6685},end:{line:3,column:6774}},"206":{start:{line:3,column:6792},end:{line:3,column:6882}},"207":{start:{line:3,column:6902},end:{line:3,column:6993}},"208":{start:{line:3,column:7016},end:{line:3,column:7106}},"209":{start:{line:3,column:7116},end:{line:3,column:7418}},"210":{start:{line:3,column:7148},end:{line:3,column:7169}},"211":{start:{line:3,column:7182},end:{line:3,column:7204}},"212":{start:{line:3,column:7225},end:{line:3,column:7244}},"213":{start:{line:3,column:7245},end:{line:3,column:7283}},"214":{start:{line:3,column:7334},end:{line:3,column:7338}},"215":{start:{line:3,column:7339},end:{line:3,column:7352}},"216":{start:{line:3,column:7344},end:{line:3,column:7352}},"217":{start:{line:3,column:7352},end:{line:3,column:7382}},"218":{start:{line:3,column:7391},end:{line:3,column:7416}},"219":{start:{line:3,column:7434},end:{line:3,column:7457}},"220":{start:{line:3,column:7473},end:{line:3,column:7493}},"221":{start:{line:3,column:7509},end:{line:3,column:7539}},"222":{start:{line:3,column:7555},end:{line:3,column:7586}},"223":{start:{line:3,column:7622},end:{line:3,column:7670}},"224":{start:{line:3,column:7664},end:{line:3,column:7668}},"225":{start:{line:3,column:7671},end:{line:3,column:7890}},"226":{start:{line:3,column:7726},end:{line:3,column:7757}},"227":{start:{line:3,column:7730},end:{line:3,column:7742}},"228":{start:{line:3,column:7752},end:{line:3,column:7756}},"229":{start:{line:3,column:7772},end:{line:3,column:7804}},"230":{start:{line:3,column:7776},end:{line:3,column:7789}},"231":{start:{line:3,column:7799},end:{line:3,column:7803}},"232":{start:{line:3,column:7819},end:{line:3,column:7857}},"233":{start:{line:3,column:7858},end:{line:3,column:7888}},"234":{start:{line:3,column:7912},end:{line:3,column:7954}},"235":{start:{line:3,column:7957},end:{line:3,column:7964}},"236":{start:{line:3,column:7967},end:{line:3,column:7968}},"237":{start:{line:3,column:7969},end:{line:3,column:7991}},"238":{start:{line:3,column:7974},end:{line:3,column:7991}},"239":{start:{line:3,column:7991},end:{line:3,column:8108}},"240":{start:{line:3,column:8023},end:{line:3,column:8108}},"241":{start:{line:3,column:8046},end:{line:3,column:8105}},"242":{start:{line:3,column:8108},end:{line:3,column:8190}},"243":{start:{line:3,column:8206},end:{line:3,column:8257}},"244":{start:{line:3,column:8277},end:{line:3,column:8362}},"245":{start:{line:3,column:8302},end:{line:3,column:8362}},"246":{start:{line:3,column:8368},end:{line:3,column:8384}},"247":{start:{line:3,column:8389},end:{line:3,column:8391}},"248":{start:{line:3,column:8392},end:{line:3,column:8567}},"249":{start:{line:3,column:8552},end:{line:3,column:8563}},"250":{start:{line:3,column:8581},end:{line:3,column:8636}},"251":{start:{line:3,column:8600},end:{line:3,column:8635}},"252":{start:{line:3,column:8653},end:{line:3,column:8759}},"253":{start:{line:3,column:8677},end:{line:3,column:8739}},"254":{start:{line:3,column:8710},end:{line:3,column:8737}},"255":{start:{line:3,column:8776},end:{line:3,column:8813}},"256":{start:{line:3,column:8780},end:{line:3,column:8790}},"257":{start:{line:3,column:8800},end:{line:3,column:8812}},"258":{start:{line:3,column:8828},end:{line:3,column:8899}},"259":{start:{line:3,column:8914},end:{line:3,column:8925}},"260":{start:{line:3,column:8940},end:{line:3,column:8952}},"261":{start:{line:3,column:8969},end:{line:3,column:9012}},"262":{start:{line:3,column:9029},end:{line:3,column:9114}},"263":{start:{line:3,column:9054},end:{line:3,column:9114}},"264":{start:{line:3,column:9120},end:{line:3,column:9143}},"265":{start:{line:3,column:9146},end:{line:3,column:9306}},"266":{start:{line:3,column:9290},end:{line:3,column:9301}},"267":{start:{line:3,column:9320},end:{line:3,column:9410}},"268":{start:{line:3,column:9343},end:{line:3,column:9409}},"269":{start:{line:3,column:9376},end:{line:3,column:9407}},"270":{start:{line:3,column:9431},end:{line:3,column:9490}},"271":{start:{line:3,column:9467},end:{line:3,column:9486}},"272":{start:{line:3,column:9499},end:{line:3,column:9552}},"273":{start:{line:3,column:9502},end:{line:3,column:9552}},"274":{start:{line:3,column:9568},end:{line:3,column:9585}},"275":{start:{line:3,column:9601},end:{line:3,column:9616}},"276":{start:{line:3,column:9632},end:{line:3,column:9689}},"277":{start:{line:3,column:9705},end:{line:3,column:9922}},"278":{start:{line:3,column:9937},end:{line:3,column:10016}},"279":{start:{line:3,column:10024},end:{line:3,column:10028}},"280":{start:{line:3,column:10044},end:{line:3,column:10061}},"281":{start:{line:3,column:10077},end:{line:3,column:10259}},"282":{start:{line:3,column:10120},end:{line:3,column:10133}},"283":{start:{line:3,column:10134},end:{line:3,column:10257}},"284":{start:{line:3,column:10138},end:{line:3,column:10232}},"285":{start:{line:3,column:10166},end:{line:3,column:10184}},"286":{start:{line:3,column:10185},end:{line:3,column:10214}},"287":{start:{line:3,column:10190},end:{line:3,column:10214}},"288":{start:{line:3,column:10214},end:{line:3,column:10231}},"289":{start:{line:3,column:10241},end:{line:3,column:10256}},"290":{start:{line:3,column:10275},end:{line:3,column:10297}},"291":{start:{line:3,column:10312},end:{line:3,column:10339}},"292":{start:{line:3,column:10330},end:{line:3,column:10339}},"293":{start:{line:3,column:10339},end:{line:3,column:10483}},"294":{start:{line:3,column:10351},end:{line:3,column:10373}},"295":{start:{line:3,column:10360},end:{line:3,column:10373}},"296":{start:{line:3,column:10373},end:{line:3,column:10395}},"297":{start:{line:3,column:10382},end:{line:3,column:10395}},"298":{start:{line:3,column:10395},end:{line:3,column:10417}},"299":{start:{line:3,column:10404},end:{line:3,column:10417}},"300":{start:{line:3,column:10417},end:{line:3,column:10439}},"301":{start:{line:3,column:10426},end:{line:3,column:10439}},"302":{start:{line:3,column:10439},end:{line:3,column:10461}},"303":{start:{line:3,column:10448},end:{line:3,column:10461}},"304":{start:{line:3,column:10461},end:{line:3,column:10482}},"305":{start:{line:3,column:10470},end:{line:3,column:10482}},"306":{start:{line:3,column:10483},end:{line:3,column:10494}},"307":{start:{line:3,column:10510},end:{line:3,column:10668}},"308":{start:{line:3,column:10533},end:{line:3,column:10540}},"309":{start:{line:3,column:10541},end:{line:3,column:10581}},"310":{start:{line:3,column:10559},end:{line:3,column:10581}},"311":{start:{line:3,column:10581},end:{line:3,column:10666}},"312":{start:{line:3,column:10684},end:{line:3,column:10766}},"313":{start:{line:3,column:10701},end:{line:3,column:10752}},"314":{start:{line:3,column:10711},end:{line:3,column:10712}},"315":{start:{line:3,column:10739},end:{line:3,column:10752}},"316":{start:{line:3,column:10752},end:{line:3,column:10764}},"317":{start:{line:3,column:10782},end:{line:3,column:10876}},"318":{start:{line:3,column:10799},end:{line:3,column:10874}},"319":{start:{line:3,column:10810},end:{line:3,column:10844}},"320":{start:{line:3,column:10849},end:{line:3,column:10859}},"321":{start:{line:3,column:10892},end:{line:3,column:10967}},"322":{start:{line:3,column:10909},end:{line:3,column:10953}},"323":{start:{line:3,column:10924},end:{line:3,column:10953}},"324":{start:{line:3,column:10946},end:{line:3,column:10953}},"325":{start:{line:3,column:10953},end:{line:3,column:10965}},"326":{start:{line:3,column:10983},end:{line:3,column:11030}},"327":{start:{line:3,column:11000},end:{line:3,column:11028}},"328":{start:{line:3,column:11017},end:{line:3,column:11027}},"329":{start:{line:3,column:11046},end:{line:3,column:11062}},"330":{start:{line:3,column:11092},end:{line:3,column:11339}},"331":{start:{line:3,column:11133},end:{line:3,column:11325}},"332":{start:{line:3,column:11137},end:{line:3,column:11219}},"333":{start:{line:3,column:11182},end:{line:3,column:11189}},"334":{start:{line:3,column:11190},end:{line:3,column:11218}},"335":{start:{line:3,column:11212},end:{line:3,column:11218}},"336":{start:{line:3,column:11229},end:{line:3,column:11240}},"337":{start:{line:3,column:11249},end:{line:3,column:11324}},"338":{start:{line:3,column:11253},end:{line:3,column:11296}},"339":{start:{line:3,column:11305},end:{line:3,column:11323}},"340":{start:{line:3,column:11310},end:{line:3,column:11323}},"341":{start:{line:3,column:11325},end:{line:3,column:11337}},"342":{start:{line:3,column:11373},end:{line:3,column:11452}},"343":{start:{line:3,column:11395},end:{line:3,column:11448}},"344":{start:{line:3,column:11453},end:{line:3,column:11476}},"345":{start:{line:3,column:11468},end:{line:3,column:11476}},"346":{start:{line:3,column:11492},end:{line:3,column:11509}},"347":{start:{line:3,column:11524},end:{line:3,column:11679}},"348":{start:{line:3,column:11535},end:{line:3,column:11617}},"349":{start:{line:3,column:11544},end:{line:3,column:11617}},"350":{start:{line:3,column:11570},end:{line:3,column:11614}},"351":{start:{line:3,column:11574},end:{line:3,column:11590}},"352":{start:{line:3,column:11600},end:{line:3,column:11613}},"353":{start:{line:3,column:11617},end:{line:3,column:11678}},"354":{start:{line:3,column:11702},end:{line:3,column:11726}},"355":{start:{line:3,column:11734},end:{line:3,column:12268}},"356":{start:{line:3,column:11776},end:{line:3,column:12093}},"357":{start:{line:3,column:11853},end:{line:3,column:11882}},"358":{start:{line:3,column:11857},end:{line:3,column:11861}},"359":{start:{line:3,column:11871},end:{line:3,column:11881}},"360":{start:{line:3,column:11922},end:{line:3,column:11978}},"361":{start:{line:3,column:11926},end:{line:3,column:11930}},"362":{start:{line:3,column:11940},end:{line:3,column:11950}},"363":{start:{line:3,column:11959},end:{line:3,column:11977}},"364":{start:{line:3,column:12021},end:{line:3,column:12076}},"365":{start:{line:3,column:12025},end:{line:3,column:12028}},"366":{start:{line:3,column:12038},end:{line:3,column:12048}},"367":{start:{line:3,column:12057},end:{line:3,column:12075}},"368":{start:{line:3,column:12114},end:{line:3,column:12266}},"369":{start:{line:3,column:12182},end:{line:3,column:12186}},"370":{start:{line:3,column:12187},end:{line:3,column:12265}},"371":{start:{line:3,column:12288},end:{line:3,column:12407}},"372":{start:{line:3,column:12305},end:{line:3,column:12405}},"373":{start:{line:3,column:12324},end:{line:3,column:12346}},"374":{start:{line:3,column:12334},end:{line:3,column:12343}},"375":{start:{line:3,column:12351},end:{line:3,column:12376}},"376":{start:{line:3,column:12361},end:{line:3,column:12373}},"377":{start:{line:3,column:12380},end:{line:3,column:12403}},"378":{start:{line:3,column:12390},end:{line:3,column:12400}},"379":{start:{line:3,column:12427},end:{line:3,column:12485}},"380":{start:{line:3,column:12444},end:{line:3,column:12483}},"381":{start:{line:3,column:12465},end:{line:3,column:12479}},"382":{start:{line:3,column:12503},end:{line:3,column:12532}},"383":{start:{line:3,column:12550},end:{line:3,column:12579}},"384":{start:{line:3,column:12597},end:{line:3,column:12723}},"385":{start:{line:3,column:12620},end:{line:3,column:12621}},"386":{start:{line:3,column:12622},end:{line:3,column:12721}},"387":{start:{line:3,column:12651},end:{line:3,column:12719}},"388":{start:{line:3,column:12741},end:{line:3,column:12934}},"389":{start:{line:3,column:12764},end:{line:3,column:12932}},"390":{start:{line:3,column:12782},end:{line:3,column:12901}},"391":{start:{line:3,column:12811},end:{line:3,column:12870}},"392":{start:{line:3,column:12815},end:{line:3,column:12842}},"393":{start:{line:3,column:12852},end:{line:3,column:12863}},"394":{start:{line:3,column:12863},end:{line:3,column:12869}},"395":{start:{line:3,column:12870},end:{line:3,column:12894}},"396":{start:{line:3,column:12908},end:{line:3,column:12932}},"397":{start:{line:3,column:12952},end:{line:3,column:13001}},"398":{start:{line:3,column:12958},end:{line:3,column:13001}},"399":{start:{line:3,column:13001},end:{line:3,column:13138}},"400":{start:{line:3,column:13018},end:{line:3,column:13136}},"401":{start:{line:3,column:13035},end:{line:3,column:13060}},"402":{start:{line:3,column:13061},end:{line:3,column:13134}},"403":{start:{line:3,column:13072},end:{line:3,column:13127}},"404":{start:{line:3,column:13090},end:{line:3,column:13125}},"405":{start:{line:3,column:13156},end:{line:3,column:13174}},"406":{start:{line:3,column:13192},end:{line:3,column:13348}},"407":{start:{line:3,column:13204},end:{line:3,column:13228}},"408":{start:{line:3,column:13213},end:{line:3,column:13228}},"409":{start:{line:3,column:13228},end:{line:3,column:13252}},"410":{start:{line:3,column:13237},end:{line:3,column:13252}},"411":{start:{line:3,column:13252},end:{line:3,column:13276}},"412":{start:{line:3,column:13261},end:{line:3,column:13276}},"413":{start:{line:3,column:13276},end:{line:3,column:13300}},"414":{start:{line:3,column:13285},end:{line:3,column:13300}},"415":{start:{line:3,column:13300},end:{line:3,column:13324}},"416":{start:{line:3,column:13309},end:{line:3,column:13324}},"417":{start:{line:3,column:13324},end:{line:3,column:13347}},"418":{start:{line:3,column:13333},end:{line:3,column:13347}},"419":{start:{line:3,column:13348},end:{line:3,column:13359}},"420":{start:{line:3,column:13377},end:{line:3,column:13398}},"421":{start:{line:3,column:13423},end:{line:3,column:13428}},"422":{start:{line:3,column:13429},end:{line:3,column:13443}},"423":{start:{line:3,column:13461},end:{line:3,column:13534}},"424":{start:{line:3,column:13484},end:{line:3,column:13485}},"425":{start:{line:3,column:13486},end:{line:3,column:13532}},"426":{start:{line:3,column:13506},end:{line:3,column:13529}},"427":{start:{line:3,column:13570},end:{line:3,column:13572}},"428":{start:{line:3,column:13575},end:{line:3,column:13576}},"429":{start:{line:3,column:13579},end:{line:3,column:13580}},"430":{start:{line:3,column:13583},end:{line:3,column:13585}},"431":{start:{line:3,column:13588},end:{line:3,column:13624}},"432":{start:{line:3,column:13593},end:{line:3,column:13623}},"433":{start:{line:3,column:13627},end:{line:3,column:13648}},"434":{start:{line:3,column:13630},end:{line:3,column:13648}},"435":{start:{line:3,column:13651},end:{line:3,column:13859}},"436":{start:{line:3,column:13655},end:{line:3,column:13672}},"437":{start:{line:3,column:13678},end:{line:3,column:13680}},"438":{start:{line:3,column:13681},end:{line:3,column:13858}},"439":{start:{line:3,column:13711},end:{line:3,column:13734}},"440":{start:{line:3,column:13741},end:{line:3,column:13745}},"441":{start:{line:3,column:13759},end:{line:3,column:13855}},"442":{start:{line:3,column:13764},end:{line:3,column:13855}},"443":{start:{line:3,column:13768},end:{line:3,column:13831}},"444":{start:{line:3,column:13798},end:{line:3,column:13807}},"445":{start:{line:3,column:13808},end:{line:3,column:13830}},"446":{start:{line:3,column:13820},end:{line:3,column:13824}},"447":{start:{line:3,column:13831},end:{line:3,column:13834}},"448":{start:{line:3,column:13844},end:{line:3,column:13854}},"449":{start:{line:3,column:13860},end:{line:3,column:13913}},"450":{start:{line:3,column:13890},end:{line:3,column:13898}},"451":{start:{line:3,column:13907},end:{line:3,column:13912}},"452":{start:{line:3,column:13937},end:{line:3,column:14044}},"453":{start:{line:3,column:13959},end:{line:3,column:13991}},"454":{start:{line:3,column:13969},end:{line:3,column:13979}},"455":{start:{line:3,column:14031},end:{line:3,column:14042}},"456":{start:{line:3,column:14061},end:{line:3,column:14066}},"457":{start:{line:3,column:14084},end:{line:3,column:14109}},"458":{start:{line:3,column:14125},end:{line:3,column:14146}},"459":{start:{line:3,column:14138},end:{line:3,column:14145}},"460":{start:{line:3,column:14154},end:{line:3,column:14186}},"461":{start:{line:3,column:14190},end:{line:3,column:14232}},"462":{start:{line:3,column:14236},end:{line:3,column:14248}},"463":{start:{line:3,column:14270},end:{line:3,column:14325}},"464":{start:{line:3,column:14296},end:{line:3,column:14325}},"465":{start:{line:3,column:14334},end:{line:3,column:14412}},"466":{start:{line:3,column:14350},end:{line:3,column:14364}},"467":{start:{line:3,column:14353},end:{line:3,column:14364}},"468":{start:{line:3,column:14413},end:{line:3,column:14456}},"469":{start:{line:3,column:14426},end:{line:3,column:14456}},"470":{start:{line:3,column:14439},end:{line:3,column:14448}},"471":{start:{line:3,column:14456},end:{line:3,column:14506}},"472":{start:{line:3,column:14462},end:{line:3,column:14506}},"473":{start:{line:3,column:14506},end:{line:3,column:14585}},"474":{start:{line:3,column:14529},end:{line:3,column:14562}},"475":{start:{line:3,column:14537},end:{line:3,column:14562}},"476":{start:{line:3,column:14563},end:{line:3,column:14583}},"477":{start:{line:3,column:14579},end:{line:3,column:14583}},"478":{start:{line:3,column:14603},end:{line:3,column:14625}},"479":{start:{line:3,column:14613},end:{line:3,column:14625}},"480":{start:{line:3,column:14616},end:{line:3,column:14625}},"481":{start:{line:3,column:14641},end:{line:3,column:14685}},"482":{start:{line:3,column:14701},end:{line:3,column:14725}},"483":{start:{line:3,column:14741},end:{line:3,column:14795}},"484":{start:{line:3,column:14813},end:{line:3,column:14887}},"485":{start:{line:3,column:14836},end:{line:3,column:14837}},"486":{start:{line:3,column:14838},end:{line:3,column:14885}},"487":{start:{line:3,column:14857},end:{line:3,column:14883}},"488":{start:{line:3,column:14903},end:{line:3,column:15087}},"489":{start:{line:3,column:14926},end:{line:3,column:14930}},"490":{start:{line:3,column:14933},end:{line:3,column:14935}},"491":{start:{line:3,column:14938},end:{line:3,column:15085}},"492":{start:{line:3,column:14974},end:{line:3,column:15039}},"493":{start:{line:3,column:15095},end:{line:3,column:15117}},"494":{start:{line:3,column:15104},end:{line:3,column:15116}},"495":{start:{line:3,column:15133},end:{line:3,column:15233}},"496":{start:{line:3,column:15149},end:{line:3,column:15151}},"497":{start:{line:3,column:15168},end:{line:3,column:15169}},"498":{start:{line:3,column:15170},end:{line:3,column:15231}},"499":{start:{line:3,column:15190},end:{line:3,column:15228}},"500":{start:{line:3,column:15249},end:{line:3,column:15304}},"501":{start:{line:3,column:15266},end:{line:3,column:15302}},"502":{start:{line:3,column:15270},end:{line:3,column:15284}},"503":{start:{line:3,column:15293},end:{line:3,column:15301}},"504":{start:{line:3,column:15324},end:{line:3,column:15339}},"505":{start:{line:3,column:15354},end:{line:3,column:15366}},"506":{start:{line:3,column:15385},end:{line:3,column:15409}},"507":{start:{line:3,column:15434},end:{line:3,column:15439}},"508":{start:{line:3,column:15440},end:{line:3,column:15493}},"509":{start:{line:3,column:15457},end:{line:3,column:15491}},"510":{start:{line:3,column:15511},end:{line:3,column:15717}},"511":{start:{line:3,column:15534},end:{line:3,column:15538}},"512":{start:{line:3,column:15541},end:{line:3,column:15542}},"513":{start:{line:3,column:15545},end:{line:3,column:15547}},"514":{start:{line:3,column:15550},end:{line:3,column:15573}},"515":{start:{line:3,column:15554},end:{line:3,column:15573}},"516":{start:{line:3,column:15574},end:{line:3,column:15715}},"517":{start:{line:3,column:15594},end:{line:3,column:15611}},"518":{start:{line:3,column:15617},end:{line:3,column:15618}},"519":{start:{line:3,column:15621},end:{line:3,column:15624}},"520":{start:{line:3,column:15625},end:{line:3,column:15697}},"521":{start:{line:3,column:15654},end:{line:3,column:15678}},"522":{start:{line:3,column:15684},end:{line:3,column:15694}},"523":{start:{line:3,column:15704},end:{line:3,column:15712}},"524":{start:{line:3,column:15733},end:{line:3,column:15818}},"525":{start:{line:3,column:15750},end:{line:3,column:15816}},"526":{start:{line:3,column:15773},end:{line:3,column:15785}},"527":{start:{line:3,column:15844},end:{line:3,column:15884}},"528":{start:{line:3,column:15885},end:{line:3,column:16309}},"529":{start:{line:3,column:15910},end:{line:3,column:15956}},"530":{start:{line:3,column:15962},end:{line:3,column:15964}},"531":{start:{line:3,column:15965},end:{line:3,column:16304}},"532":{start:{line:3,column:15991},end:{line:3,column:16043}},"533":{start:{line:3,column:16056},end:{line:3,column:16118}},"534":{start:{line:3,column:16130},end:{line:3,column:16189}},"535":{start:{line:3,column:16204},end:{line:3,column:16301}},"536":{start:{line:3,column:16317},end:{line:3,column:16373}},"537":{start:{line:3,column:16324},end:{line:3,column:16355}},"538":{start:{line:3,column:16381},end:{line:3,column:17271}},"539":{start:{line:3,column:16428},end:{line:3,column:16638}},"540":{start:{line:3,column:16731},end:{line:3,column:16735}},"541":{start:{line:3,column:16736},end:{line:3,column:16805}},"542":{start:{line:3,column:16820},end:{line:3,column:16861}},"543":{start:{line:3,column:16867},end:{line:3,column:16890}},"544":{start:{line:3,column:16925},end:{line:3,column:16929}},"545":{start:{line:3,column:16932},end:{line:3,column:16941}},"546":{start:{line:3,column:16942},end:{line:3,column:16998}},"547":{start:{line:3,column:16952},end:{line:3,column:16953}},"548":{start:{line:3,column:16985},end:{line:3,column:16998}},"549":{start:{line:3,column:16998},end:{line:3,column:17038}},"550":{start:{line:3,column:17125},end:{line:3,column:17129}},"551":{start:{line:3,column:17132},end:{line:3,column:17141}},"552":{start:{line:3,column:17142},end:{line:3,column:17269}},"553":{start:{line:3,column:17197},end:{line:3,column:17204}},"554":{start:{line:3,column:17207},end:{line:3,column:17208}},"555":{start:{line:3,column:17209},end:{line:3,column:17250}},"556":{start:{line:3,column:17219},end:{line:3,column:17220}},"557":{start:{line:3,column:17246},end:{line:3,column:17250}},"558":{start:{line:3,column:17250},end:{line:3,column:17268}},"559":{start:{line:3,column:17279},end:{line:3,column:17349}},"560":{start:{line:3,column:17312},end:{line:3,column:17319}},"561":{start:{line:3,column:17336},end:{line:3,column:17347}},"562":{start:{line:3,column:17357},end:{line:3,column:17564}},"563":{start:{line:3,column:17396},end:{line:3,column:17398}},"564":{start:{line:3,column:17399},end:{line:3,column:17466}},"565":{start:{line:3,column:17501},end:{line:3,column:17503}},"566":{start:{line:3,column:17504},end:{line:3,column:17546}},"567":{start:{line:3,column:17572},end:{line:3,column:18688}},"568":{start:{line:3,column:17606},end:{line:3,column:17661}},"569":{start:{line:3,column:17684},end:{line:3,column:17711}},"570":{start:{line:3,column:17699},end:{line:3,column:17711}},"571":{start:{line:3,column:17711},end:{line:3,column:17724}},"572":{start:{line:3,column:17730},end:{line:3,column:17737}},"573":{start:{line:3,column:17740},end:{line:3,column:17754}},"574":{start:{line:3,column:17755},end:{line:3,column:17915}},"575":{start:{line:3,column:17940},end:{line:3,column:17985}},"576":{start:{line:3,column:18010},end:{line:3,column:18065}},"577":{start:{line:3,column:18056},end:{line:3,column:18065}},"578":{start:{line:3,column:18065},end:{line:3,column:18093}},"579":{start:{line:3,column:18107},end:{line:3,column:18171}},"580":{start:{line:3,column:18122},end:{line:3,column:18171}},"581":{start:{line:3,column:18171},end:{line:3,column:18187}},"582":{start:{line:3,column:18193},end:{line:3,column:18211}},"583":{start:{line:3,column:18212},end:{line:3,column:18226}},"584":{start:{line:3,column:18217},end:{line:3,column:18226}},"585":{start:{line:3,column:18226},end:{line:3,column:18318}},"586":{start:{line:3,column:18339},end:{line:3,column:18341}},"587":{start:{line:3,column:18344},end:{line:3,column:18428}},"588":{start:{line:3,column:18348},end:{line:3,column:18360}},"589":{start:{line:3,column:18370},end:{line:3,column:18427}},"590":{start:{line:3,column:18428},end:{line:3,column:18460}},"591":{start:{line:3,column:18433},end:{line:3,column:18460}},"592":{start:{line:3,column:18475},end:{line:3,column:18686}},"593":{start:{line:3,column:18514},end:{line:3,column:18518}},"594":{start:{line:3,column:18531},end:{line:3,column:18532}},"595":{start:{line:3,column:18533},end:{line:3,column:18685}},"596":{start:{line:3,column:18696},end:{line:3,column:18842}},"597":{start:{line:3,column:18727},end:{line:3,column:18764}},"598":{start:{line:3,column:18783},end:{line:3,column:18840}},"599":{start:{line:3,column:18843},end:{line:3,column:18857}},"600":{start:{line:3,column:18864},end:{line:3,column:19159}},"601":{start:{line:3,column:18905},end:{line:3,column:18947}},"602":{start:{line:3,column:18972},end:{line:3,column:18976}},"603":{start:{line:3,column:18977},end:{line:3,column:19011}},"604":{start:{line:3,column:18994},end:{line:3,column:19004}},"605":{start:{line:3,column:19004},end:{line:3,column:19010}},"606":{start:{line:3,column:19017},end:{line:3,column:19033}},"607":{start:{line:3,column:19033},end:{line:3,column:19093}},"608":{start:{line:3,column:19036},end:{line:3,column:19074}},"609":{start:{line:3,column:19068},end:{line:3,column:19074}},"610":{start:{line:3,column:19093},end:{line:3,column:19157}},"611":{start:{line:3,column:19115},end:{line:3,column:19149}},"612":{start:{line:3,column:19133},end:{line:3,column:19149}},"613":{start:{line:3,column:19149},end:{line:3,column:19156}},"614":{start:{line:3,column:19167},end:{line:3,column:19177}},"615":{start:{line:3,column:19181},end:{line:3,column:19183}},"616":{start:{line:3,column:19207},end:{line:3,column:19219}},"617":{start:{line:3,column:19218},end:{line:3,column:19219}},"618":{start:{line:3,column:19222},end:{line:3,column:19237}},"619":{start:{line:3,column:19225},end:{line:3,column:19237}},"620":{start:{line:3,column:19238},end:{line:3,column:19276}},"621":{start:{line:3,column:19256},end:{line:3,column:19273}},"622":{start:{line:3,column:19292},end:{line:3,column:19346}},"623":{start:{line:3,column:19354},end:{line:3,column:19442}},"624":{start:{line:3,column:19360},end:{line:3,column:19441}},"625":{start:{line:3,column:19371},end:{line:3,column:19440}},"626":{start:{line:3,column:19458},end:{line:3,column:19493}},"627":{start:{line:3,column:19501},end:{line:3,column:19606}},"628":{start:{line:3,column:19507},end:{line:3,column:19605}},"629":{start:{line:3,column:19524},end:{line:3,column:19604}},"630":{start:{line:3,column:19684},end:{line:3,column:19729}},"631":{start:{line:3,column:19730},end:{line:3,column:19794}},"632":{start:{line:3,column:19750},end:{line:3,column:19794}},"633":{start:{line:3,column:19794},end:{line:3,column:20115}},"634":{start:{line:3,column:19821},end:{line:3,column:19825}},"635":{start:{line:3,column:19828},end:{line:3,column:19829}},"636":{start:{line:3,column:19832},end:{line:3,column:19941}},"637":{start:{line:3,column:19836},end:{line:3,column:19940}},"638":{start:{line:3,column:19849},end:{line:3,column:19936}},"639":{start:{line:3,column:19853},end:{line:3,column:19915}},"640":{start:{line:3,column:19925},end:{line:3,column:19935}},"641":{start:{line:3,column:19942},end:{line:3,column:20113}},"642":{start:{line:3,column:19964},end:{line:3,column:20006}},"643":{start:{line:3,column:20027},end:{line:3,column:20061}},"644":{start:{line:3,column:20131},end:{line:3,column:20146}},"645":{start:{line:3,column:20163},end:{line:3,column:20168}},"646":{start:{line:3,column:20210},end:{line:3,column:20216}},"647":{start:{line:3,column:20232},end:{line:3,column:20352}},"648":{start:{line:3,column:20255},end:{line:3,column:20259}},"649":{start:{line:3,column:20260},end:{line:3,column:20294}},"650":{start:{line:3,column:20269},end:{line:3,column:20294}},"651":{start:{line:3,column:20294},end:{line:3,column:20351}},"652":{start:{line:3,column:20310},end:{line:3,column:20315}},"653":{start:{line:3,column:20316},end:{line:3,column:20350}},"654":{start:{line:3,column:20337},end:{line:3,column:20341}},"655":{start:{line:3,column:20352},end:{line:3,column:20376}},"656":{start:{line:3,column:20392},end:{line:3,column:20432}},"657":{start:{line:3,column:20450},end:{line:3,column:20492}},"658":{start:{line:3,column:20476},end:{line:3,column:20487}},"659":{start:{line:3,column:20517},end:{line:3,column:20522}},"660":{start:{line:3,column:20525},end:{line:3,column:20530}},"661":{start:{line:3,column:20547},end:{line:3,column:20552}},"662":{start:{line:3,column:20553},end:{line:3,column:20585}},"663":{start:{line:3,column:20569},end:{line:3,column:20585}},"664":{start:{line:3,column:20591},end:{line:3,column:20621}},"665":{start:{line:3,column:20609},end:{line:3,column:20616}},"666":{start:{line:3,column:20622},end:{line:3,column:20646}},"667":{start:{line:3,column:20669},end:{line:3,column:20881}},"668":{start:{line:3,column:20680},end:{line:3,column:20880}},"669":{start:{line:3,column:20704},end:{line:3,column:20705}},"670":{start:{line:3,column:20708},end:{line:3,column:20720}},"671":{start:{line:3,column:20723},end:{line:3,column:20724}},"672":{start:{line:3,column:20727},end:{line:3,column:20728}},"673":{start:{line:3,column:20729},end:{line:3,column:20876}},"674":{start:{line:3,column:20739},end:{line:3,column:20740}},"675":{start:{line:3,column:20749},end:{line:3,column:20876}},"676":{start:{line:3,column:20765},end:{line:3,column:20775}},"677":{start:{line:3,column:20778},end:{line:3,column:20780}},"678":{start:{line:3,column:20781},end:{line:3,column:20872}},"679":{start:{line:3,column:20801},end:{line:3,column:20845}},"680":{start:{line:3,column:20852},end:{line:3,column:20869}},"681":{start:{line:3,column:20901},end:{line:3,column:20915}},"682":{start:{line:3,column:20931},end:{line:3,column:20969}},"683":{start:{line:3,column:20948},end:{line:3,column:20967}},"684":{start:{line:3,column:20994},end:{line:3,column:20999}},"685":{start:{line:3,column:21016},end:{line:3,column:21021}},"686":{start:{line:3,column:21024},end:{line:3,column:21255}},"687":{start:{line:3,column:21048},end:{line:3,column:21049}},"688":{start:{line:3,column:21050},end:{line:3,column:21077}},"689":{start:{line:3,column:21057},end:{line:3,column:21070}},"690":{start:{line:3,column:21070},end:{line:3,column:21076}},"691":{start:{line:3,column:21083},end:{line:3,column:21095}},"692":{start:{line:3,column:21098},end:{line:3,column:21099}},"693":{start:{line:3,column:21102},end:{line:3,column:21103}},"694":{start:{line:3,column:21104},end:{line:3,column:21253}},"695":{start:{line:3,column:21114},end:{line:3,column:21115}},"696":{start:{line:3,column:21131},end:{line:3,column:21133}},"697":{start:{line:3,column:21134},end:{line:3,column:21252}},"698":{start:{line:3,column:21160},end:{line:3,column:21180}},"699":{start:{line:3,column:21186},end:{line:3,column:21189}},"700":{start:{line:3,column:21202},end:{line:3,column:21249}},"701":{start:{line:3,column:21256},end:{line:3,column:21280}},"702":{start:{line:3,column:21311},end:{line:3,column:21313}},"703":{start:{line:3,column:21314},end:{line:3,column:21500}},"704":{start:{line:3,column:21362},end:{line:3,column:21380}},"705":{start:{line:3,column:21381},end:{line:3,column:21392}},"706":{start:{line:3,column:21398},end:{line:3,column:21399}},"707":{start:{line:3,column:21400},end:{line:3,column:21498}},"708":{start:{line:3,column:21429},end:{line:3,column:21494}},"709":{start:{line:3,column:21523},end:{line:3,column:21550}},"710":{start:{line:3,column:21568},end:{line:3,column:21597}},"711":{start:{line:3,column:21613},end:{line:3,column:21710}},"712":{start:{line:3,column:21636},end:{line:3,column:21638}},"713":{start:{line:3,column:21639},end:{line:3,column:21708}},"714":{start:{line:3,column:21659},end:{line:3,column:21673}},"715":{start:{line:3,column:21680},end:{line:3,column:21705}},"716":{start:{line:3,column:21731},end:{line:3,column:21837}},"717":{start:{line:3,column:21764},end:{line:3,column:21766}},"718":{start:{line:3,column:21767},end:{line:3,column:21835}},"719":{start:{line:3,column:21793},end:{line:3,column:21797}},"720":{start:{line:3,column:21798},end:{line:3,column:21832}},"721":{start:{line:3,column:21855},end:{line:3,column:21867}},"722":{start:{line:3,column:21886},end:{line:3,column:21983}},"723":{start:{line:3,column:21909},end:{line:3,column:21911}},"724":{start:{line:3,column:21912},end:{line:3,column:21981}},"725":{start:{line:3,column:21932},end:{line:3,column:21946}},"726":{start:{line:3,column:21952},end:{line:3,column:21979}},"727":{start:{line:3,column:21998},end:{line:3,column:22011}},"728":{start:{line:3,column:22035},end:{line:3,column:22054}},"729":{start:{line:3,column:22055},end:{line:3,column:22126}},"730":{start:{line:3,column:22065},end:{line:3,column:22126}},"731":{start:{line:3,column:22084},end:{line:3,column:22092}},"732":{start:{line:3,column:22118},end:{line:3,column:22124}},"733":{start:{line:3,column:22142},end:{line:3,column:22300}},"734":{start:{line:3,column:22158},end:{line:3,column:22160}},"735":{start:{line:3,column:22177},end:{line:3,column:22179}},"736":{start:{line:3,column:22180},end:{line:3,column:22298}},"737":{start:{line:3,column:22200},end:{line:3,column:22231}},"738":{start:{line:3,column:22238},end:{line:3,column:22263}},"739":{start:{line:3,column:22253},end:{line:3,column:22263}},"740":{start:{line:3,column:22263},end:{line:3,column:22275}},"741":{start:{line:3,column:22289},end:{line:3,column:22295}},"742":{start:{line:3,column:22411},end:{line:3,column:22412}},"743":{start:{line:3,column:22339},end:{line:3,column:22345}},"744":{start:{line:3,column:22413},end:{line:3,column:22815}},"745":{start:{line:3,column:22436},end:{line:3,column:22437}},"746":{start:{line:3,column:22440},end:{line:3,column:22442}},"747":{start:{line:3,column:22445},end:{line:3,column:22447}},"748":{start:{line:3,column:22450},end:{line:3,column:22481}},"749":{start:{line:3,column:22455},end:{line:3,column:22480}},"750":{start:{line:3,column:22484},end:{line:3,column:22511}},"751":{start:{line:3,column:22489},end:{line:3,column:22510}},"752":{start:{line:3,column:22514},end:{line:3,column:22548}},"753":{start:{line:3,column:22525},end:{line:3,column:22526}},"754":{start:{line:3,column:22527},end:{line:3,column:22547}},"755":{start:{line:3,column:22549},end:{line:3,column:22814}},"756":{start:{line:3,column:22566},end:{line:3,column:22582}},"757":{start:{line:3,column:22588},end:{line:3,column:22596}},"758":{start:{line:3,column:22597},end:{line:3,column:22809}},"759":{start:{line:3,column:22608},end:{line:3,column:22638}},"760":{start:{line:3,column:22685},end:{line:3,column:22695}},"761":{start:{line:3,column:22707},end:{line:3,column:22740}},"762":{start:{line:3,column:22756},end:{line:3,column:22787}},"763":{start:{line:3,column:22838},end:{line:3,column:22860}},"764":{start:{line:3,column:22849},end:{line:3,column:22853}},"765":{start:{line:3,column:22853},end:{line:3,column:22859}},"766":{start:{line:3,column:22860},end:{line:3,column:22877}},"767":{start:{line:3,column:22870},end:{line:3,column:22877}},"768":{start:{line:3,column:22883},end:{line:3,column:22923}},"769":{start:{line:3,column:22901},end:{line:3,column:22920}},"770":{start:{line:3,column:22924},end:{line:3,column:22954}},"771":{start:{line:3,column:22982},end:{line:3,column:22984}},"772":{start:{line:3,column:22985},end:{line:3,column:23177}},"773":{start:{line:3,column:23105},end:{line:3,column:23118}},"774":{start:{line:3,column:23184},end:{line:3,column:23188}},"775":{start:{line:3,column:23192},end:{line:3,column:23194}},"776":{start:{line:3,column:23198},end:{line:3,column:23199}},"777":{start:{line:3,column:23203},end:{line:3,column:23207}},"778":{start:{line:3,column:23210},end:{line:3,column:23226}},"779":{start:{line:3,column:23247},end:{line:3,column:23248}},"780":{start:{line:3,column:23249},end:{line:3,column:23261}},"781":{start:{line:3,column:23276},end:{line:3,column:23284}},"782":{start:{line:3,column:23292},end:{line:3,column:23602}},"783":{start:{line:3,column:23514},end:{line:3,column:23516}},"784":{start:{line:3,column:23618},end:{line:3,column:23644}},"785":{start:{line:3,column:23624},end:{line:3,column:23644}},"786":{start:{line:3,column:23644},end:{line:3,column:23663}},"787":{start:{line:3,column:23656},end:{line:3,column:23663}},"788":{start:{line:3,column:23663},end:{line:3,column:23689}},"789":{start:{line:3,column:23695},end:{line:3,column:23710}},"790":{start:{line:3,column:23711},end:{line:3,column:23748}},"791":{start:{line:3,column:23741},end:{line:3,column:23748}},"792":{start:{line:3,column:23756},end:{line:3,column:23769}},"793":{start:{line:3,column:23770},end:{line:3,column:23899}},"794":{start:{line:3,column:23846},end:{line:3,column:23892}},"795":{start:{line:3,column:23892},end:{line:3,column:23898}},"796":{start:{line:3,column:23905},end:{line:3,column:23920}},"797":{start:{line:3,column:23921},end:{line:3,column:23973}},"798":{start:{line:3,column:23966},end:{line:3,column:23973}},"799":{start:{line:3,column:23979},end:{line:3,column:23984}},"800":{start:{line:3,column:23987},end:{line:3,column:24086}},"801":{start:{line:3,column:24087},end:{line:3,column:24157}},"802":{start:{line:3,column:24172},end:{line:3,column:24176}},"803":{start:{line:3,column:24192},end:{line:3,column:24338}},"804":{start:{line:3,column:24251},end:{line:3,column:24304}},"805":{start:{line:3,column:24291},end:{line:3,column:24297}},"806":{start:{line:3,column:24297},end:{line:3,column:24303}},"807":{start:{line:3,column:24304},end:{line:3,column:24337}},"808":{start:{line:3,column:24354},end:{line:3,column:24385}},"809":{start:{line:3,column:24378},end:{line:3,column:24385}},"810":{start:{line:3,column:24391},end:{line:3,column:24393}},"811":{start:{line:3,column:24394},end:{line:3,column:24400}},"812":{start:{line:3,column:24400},end:{line:3,column:24501}},"813":{start:{line:3,column:24404},end:{line:3,column:24487}},"814":{start:{line:3,column:24414},end:{line:3,column:24425}},"815":{start:{line:3,column:24461},end:{line:3,column:24471}},"816":{start:{line:3,column:24472},end:{line:3,column:24486}},"817":{start:{line:3,column:24496},end:{line:3,column:24500}},"818":{start:{line:3,column:24516},end:{line:3,column:24556}},"819":{start:{line:3,column:24572},end:{line:3,column:24615}},"820":{start:{line:3,column:24631},end:{line:3,column:24661}},"821":{start:{line:3,column:24677},end:{line:3,column:24697}},"822":{start:{line:3,column:24713},end:{line:3,column:24752}},"823":{start:{line:3,column:24770},end:{line:3,column:24783}},"824":{start:{line:3,column:24799},end:{line:3,column:24816}},"825":{start:{line:3,column:24822},end:{line:3,column:24837}},"826":{start:{line:3,column:24840},end:{line:3,column:24877}},"827":{start:{line:3,column:24878},end:{line:3,column:24983}},"828":{start:{line:3,column:24893},end:{line:3,column:24931}},"829":{start:{line:3,column:24902},end:{line:3,column:24931}},"830":{start:{line:3,column:24905},end:{line:3,column:24913}},"831":{start:{line:3,column:24931},end:{line:3,column:24982}},"832":{start:{line:3,column:24999},end:{line:3,column:25136}},"833":{start:{line:3,column:25009},end:{line:3,column:25020}},"834":{start:{line:3,column:25056},end:{line:3,column:25066}},"835":{start:{line:3,column:25069},end:{line:3,column:25086}},"836":{start:{line:3,column:25087},end:{line:3,column:25135}},"837":{start:{line:3,column:25127},end:{line:3,column:25135}},"838":{start:{line:3,column:25136},end:{line:3,column:25144}},"839":{start:{line:3,column:25160},end:{line:3,column:25213}},"840":{start:{line:3,column:25176},end:{line:3,column:25187}},"841":{start:{line:3,column:25188},end:{line:3,column:25212}},"842":{start:{line:3,column:25205},end:{line:3,column:25212}},"843":{start:{line:3,column:25213},end:{line:3,column:25296}},"844":{start:{line:3,column:25320},end:{line:3,column:25335}},"845":{start:{line:3,column:25338},end:{line:3,column:25343}},"846":{start:{line:3,column:25344},end:{line:3,column:25549}},"847":{start:{line:3,column:25483},end:{line:3,column:25549}},"848":{start:{line:3,column:25493},end:{line:3,column:25504}},"849":{start:{line:3,column:25533},end:{line:3,column:25549}},"850":{start:{line:3,column:25571},end:{line:3,column:25581}},"851":{start:{line:3,column:25584},end:{line:3,column:25598}},"852":{start:{line:3,column:25601},end:{line:3,column:25615}},"853":{start:{line:3,column:25618},end:{line:3,column:25632}},"854":{start:{line:3,column:25633},end:{line:3,column:25827}},"855":{start:{line:3,column:25737},end:{line:3,column:25754}},"856":{start:{line:3,column:25759},end:{line:3,column:25827}},"857":{start:{line:3,column:25790},end:{line:3,column:25801}},"858":{start:{line:3,column:25802},end:{line:3,column:25826}},"859":{start:{line:3,column:25819},end:{line:3,column:25826}},"860":{start:{line:3,column:25827},end:{line:3,column:25835}},"861":{start:{line:3,column:25851},end:{line:3,column:25902}},"862":{start:{line:3,column:25918},end:{line:3,column:25925}},"863":{start:{line:3,column:25949},end:{line:3,column:25964}},"864":{start:{line:3,column:25965},end:{line:3,column:26069}},"865":{start:{line:3,column:25986},end:{line:3,column:25997}},"866":{start:{line:3,column:25998},end:{line:3,column:26068}},"867":{start:{line:3,column:26001},end:{line:3,column:26019}},"868":{start:{line:3,column:26010},end:{line:3,column:26019}},"869":{start:{line:3,column:26019},end:{line:3,column:26034}},"870":{start:{line:3,column:26028},end:{line:3,column:26034}},"871":{start:{line:3,column:26034},end:{line:3,column:26050}},"872":{start:{line:3,column:26069},end:{line:3,column:26077}},"873":{start:{line:3,column:26095},end:{line:3,column:26116}},"874":{start:{line:3,column:26140},end:{line:3,column:26157}},"875":{start:{line:3,column:26158},end:{line:3,column:26198}},"876":{start:{line:3,column:26204},end:{line:3,column:26266}},"877":{start:{line:3,column:26209},end:{line:3,column:26251}},"878":{start:{line:3,column:26237},end:{line:3,column:26251}},"879":{start:{line:3,column:26251},end:{line:3,column:26265}},"880":{start:{line:3,column:26267},end:{line:3,column:26288}},"881":{start:{line:3,column:26296},end:{line:3,column:26311}},"882":{start:{line:3,column:26315},end:{line:3,column:26334}},"883":{start:{line:3,column:26338},end:{line:3,column:26355}},"884":{start:{line:3,column:26359},end:{line:3,column:26747}},"885":{start:{line:3,column:26450},end:{line:3,column:26483}},"886":{start:{line:3,column:26511},end:{line:3,column:26547}},"887":{start:{line:3,column:26527},end:{line:3,column:26547}},"888":{start:{line:3,column:26553},end:{line:3,column:26560}},"889":{start:{line:3,column:26561},end:{line:3,column:26572}},"890":{start:{line:3,column:26578},end:{line:3,column:26583}},"891":{start:{line:3,column:26588},end:{line:3,column:26590}},"892":{start:{line:3,column:26591},end:{line:3,column:26700}},"893":{start:{line:3,column:26595},end:{line:3,column:26659}},"894":{start:{line:3,column:26669},end:{line:3,column:26683}},"895":{start:{line:3,column:26692},end:{line:3,column:26699}},"896":{start:{line:3,column:26700},end:{line:3,column:26723}},"897":{start:{line:3,column:26706},end:{line:3,column:26716}},"898":{start:{line:3,column:26716},end:{line:3,column:26722}},"899":{start:{line:3,column:26723},end:{line:3,column:26744}},"900":{start:{line:3,column:26762},end:{line:3,column:26777}},"901":{start:{line:3,column:26785},end:{line:3,column:26787}},"902":{start:{line:3,column:26803},end:{line:3,column:26808}},"903":{start:{line:3,column:26824},end:{line:3,column:26828}},"904":{start:{line:3,column:26836},end:{line:3,column:26840}},"905":{start:{line:3,column:26864},end:{line:3,column:26881}},"906":{start:{line:3,column:26882},end:{line:3,column:26916}},"907":{start:{line:3,column:26922},end:{line:3,column:26931}},"908":{start:{line:3,column:26926},end:{line:3,column:26931}},"909":{start:{line:3,column:26932},end:{line:3,column:26977}},"910":{start:{line:3,column:26958},end:{line:3,column:26965}},"911":{start:{line:3,column:26969},end:{line:3,column:26976}},"912":{start:{line:3,column:26993},end:{line:3,column:27013}},"913":{start:{line:3,column:27031},end:{line:3,column:27080}},"914":{start:{line:3,column:27098},end:{line:3,column:27126}},"915":{start:{line:3,column:27134},end:{line:3,column:27183}},"916":{start:{line:3,column:27199},end:{line:3,column:27229}},"917":{start:{line:3,column:27237},end:{line:3,column:27326}},"918":{start:{line:3,column:27342},end:{line:3,column:27383}},"919":{start:{line:3,column:27376},end:{line:3,column:27383}},"920":{start:{line:3,column:27383},end:{line:3,column:27395}},"921":{start:{line:3,column:27401},end:{line:3,column:27406}},"922":{start:{line:3,column:27407},end:{line:3,column:27446}},"923":{start:{line:3,column:27411},end:{line:3,column:27429}},"924":{start:{line:3,column:27438},end:{line:3,column:27445}},"925":{start:{line:3,column:27468},end:{line:3,column:27477}},"926":{start:{line:3,column:27499},end:{line:3,column:27501}},"927":{start:{line:3,column:27502},end:{line:3,column:27515}},"928":{start:{line:3,column:27523},end:{line:3,column:27541}},"929":{start:{line:3,column:27557},end:{line:3,column:27598}},"930":{start:{line:3,column:27624},end:{line:3,column:27641}},"931":{start:{line:3,column:27642},end:{line:3,column:27690}},"932":{start:{line:3,column:27696},end:{line:3,column:27758}},"933":{start:{line:3,column:27701},end:{line:3,column:27743}},"934":{start:{line:3,column:27729},end:{line:3,column:27743}},"935":{start:{line:3,column:27743},end:{line:3,column:27757}},"936":{start:{line:3,column:27759},end:{line:3,column:27780}},"937":{start:{line:3,column:27798},end:{line:3,column:27817}},"938":{start:{line:3,column:27835},end:{line:3,column:27871}},"939":{start:{line:3,column:27857},end:{line:3,column:27871}},"940":{start:{line:3,column:27871},end:{line:3,column:27884}},"941":{start:{line:3,column:27892},end:{line:3,column:28350}},"942":{start:{line:3,column:27987},end:{line:3,column:28020}},"943":{start:{line:3,column:28048},end:{line:3,column:28084}},"944":{start:{line:3,column:28064},end:{line:3,column:28084}},"945":{start:{line:3,column:28090},end:{line:3,column:28097}},"946":{start:{line:3,column:28098},end:{line:3,column:28109}},"947":{start:{line:3,column:28115},end:{line:3,column:28120}},"948":{start:{line:3,column:28123},end:{line:3,column:28276}},"949":{start:{line:3,column:28133},end:{line:3,column:28143}},"950":{start:{line:3,column:28146},end:{line:3,column:28198}},"951":{start:{line:3,column:28199},end:{line:3,column:28235}},"952":{start:{line:3,column:28245},end:{line:3,column:28259}},"953":{start:{line:3,column:28268},end:{line:3,column:28275}},"954":{start:{line:3,column:28276},end:{line:3,column:28326}},"955":{start:{line:3,column:28309},end:{line:3,column:28319}},"956":{start:{line:3,column:28319},end:{line:3,column:28325}},"957":{start:{line:3,column:28326},end:{line:3,column:28347}},"958":{start:{line:3,column:28372},end:{line:3,column:28379}},"959":{start:{line:3,column:28380},end:{line:3,column:28408}},"960":{start:{line:3,column:28384},end:{line:3,column:28394}},"961":{start:{line:3,column:28403},end:{line:3,column:28407}},"962":{start:{line:3,column:28416},end:{line:3,column:28497}},"963":{start:{line:3,column:28500},end:{line:3,column:28570}},"964":{start:{line:3,column:28542},end:{line:3,column:28568}},"965":{start:{line:3,column:28586},end:{line:3,column:28611}},"966":{start:{line:3,column:28629},end:{line:3,column:28659}},"967":{start:{line:3,column:28667},end:{line:3,column:28677}},"968":{start:{line:3,column:28692},end:{line:3,column:28728}},"969":{start:{line:3,column:28707},end:{line:3,column:28728}},"970":{start:{line:3,column:28719},end:{line:3,column:28728}},"971":{start:{line:3,column:28728},end:{line:3,column:28743}},"972":{start:{line:3,column:28761},end:{line:3,column:28830}},"973":{start:{line:3,column:28776},end:{line:3,column:28830}},"974":{start:{line:3,column:28846},end:{line:3,column:28877}},"975":{start:{line:3,column:28868},end:{line:3,column:28877}},"976":{start:{line:3,column:28877},end:{line:3,column:28931}},"977":{start:{line:3,column:28897},end:{line:3,column:28931}},"978":{start:{line:3,column:28931},end:{line:3,column:28953}},"979":{start:{line:3,column:28942},end:{line:3,column:28953}},"980":{start:{line:3,column:28959},end:{line:3,column:28983}},"981":{start:{line:3,column:28984},end:{line:3,column:29002}},"982":{start:{line:3,column:28989},end:{line:3,column:29002}},"983":{start:{line:3,column:29008},end:{line:3,column:29020}},"984":{start:{line:3,column:29021},end:{line:3,column:29043}},"985":{start:{line:3,column:29032},end:{line:3,column:29043}},"986":{start:{line:3,column:29049},end:{line:4,column:2}},"987":{start:{line:4,column:3},end:{line:4,column:29}},"988":{start:{line:4,column:47},end:{line:4,column:77}},"989":{start:{line:4,column:85},end:{line:4,column:107}},"990":{start:{line:4,column:123},end:{line:4,column:152}},"991":{start:{line:4,column:167},end:{line:4,column:185}},"992":{start:{line:4,column:201},end:{line:4,column:274}},"993":{start:{line:4,column:289},end:{line:4,column:371}},"994":{start:{line:4,column:387},end:{line:4,column:442}},"995":{start:{line:4,column:458},end:{line:4,column:473}},"996":{start:{line:4,column:489},end:{line:4,column:508}},"997":{start:{line:4,column:526},end:{line:4,column:564}},"998":{start:{line:4,column:586},end:{line:4,column:599}},"999":{start:{line:4,column:600},end:{line:4,column:614}},"1000":{start:{line:4,column:630},end:{line:4,column:671}},"1001":{start:{line:4,column:679},end:{line:4,column:696}},"1002":{start:{line:4,column:700},end:{line:4,column:716}},"1003":{start:{line:4,column:719},end:{line:4,column:1040}},"1004":{start:{line:4,column:746},end:{line:4,column:762}},"1005":{start:{line:4,column:791},end:{line:4,column:966}},"1006":{start:{line:4,column:979},end:{line:4,column:990}},"1007":{start:{line:4,column:1002},end:{line:4,column:1038}},"1008":{start:{line:4,column:1056},end:{line:4,column:1085}},"1009":{start:{line:4,column:1093},end:{line:4,column:1109}},"1010":{start:{line:4,column:1113},end:{line:4,column:1129}},"1011":{start:{line:4,column:1133},end:{line:4,column:1150}},"1012":{start:{line:4,column:1154},end:{line:4,column:1170}},"1013":{start:{line:4,column:1174},end:{line:4,column:1190}},"1014":{start:{line:4,column:1194},end:{line:4,column:1218}},"1015":{start:{line:4,column:1222},end:{line:4,column:1242}},"1016":{start:{line:4,column:1258},end:{line:4,column:1294}},"1017":{start:{line:4,column:1310},end:{line:4,column:1347}},"1018":{start:{line:4,column:1363},end:{line:4,column:1400}},"1019":{start:{line:4,column:1416},end:{line:4,column:1448}},"1020":{start:{line:4,column:1466},end:{line:4,column:1497}},"1021":{start:{line:4,column:1477},end:{line:4,column:1497}},"1022":{start:{line:4,column:1513},end:{line:4,column:1561}},"1023":{start:{line:4,column:1569},end:{line:4,column:1587}},"1024":{start:{line:4,column:1591},end:{line:4,column:1612}},"1025":{start:{line:4,column:1616},end:{line:4,column:1634}},"1026":{start:{line:4,column:1652},end:{line:4,column:1672}},"1027":{start:{line:4,column:1690},end:{line:4,column:1710}},"1028":{start:{line:4,column:1736},end:{line:4,column:1746}},"1029":{start:{line:4,column:1747},end:{line:4,column:1784}},"1030":{start:{line:4,column:1800},end:{line:4,column:1812}},"1031":{start:{line:4,column:1834},end:{line:4,column:1843}},"1032":{start:{line:4,column:1864},end:{line:4,column:1866}},"1033":{start:{line:4,column:1867},end:{line:4,column:1880}},"1034":{start:{line:4,column:1906},end:{line:4,column:1911}},"1035":{start:{line:4,column:1912},end:{line:4,column:1991}},"1036":{start:{line:4,column:1939},end:{line:4,column:1991}},"1037":{start:{line:4,column:1991},end:{line:4,column:2010}},"1038":{start:{line:4,column:1998},end:{line:4,column:2010}},"1039":{start:{line:4,column:2010},end:{line:4,column:2033}},"1040":{start:{line:4,column:2024},end:{line:4,column:2033}},"1041":{start:{line:4,column:2033},end:{line:4,column:2041}},"1042":{start:{line:4,column:2049},end:{line:4,column:2051}},"1043":{start:{line:4,column:2055},end:{line:4,column:2057}},"1044":{start:{line:4,column:2061},end:{line:4,column:2077}},"1045":{start:{line:4,column:2081},end:{line:4,column:2239}},"1046":{start:{line:4,column:2111},end:{line:4,column:2126}},"1047":{start:{line:4,column:2147},end:{line:4,column:2155}},"1048":{start:{line:4,column:2156},end:{line:4,column:2237}},"1049":{start:{line:4,column:2160},end:{line:4,column:2201}},"1050":{start:{line:4,column:2211},end:{line:4,column:2229}},"1051":{start:{line:4,column:2220},end:{line:4,column:2229}},"1052":{start:{line:4,column:2229},end:{line:4,column:2236}},"1053":{start:{line:4,column:2265},end:{line:4,column:2269}},"1054":{start:{line:4,column:2270},end:{line:4,column:2305}},"1055":{start:{line:4,column:2284},end:{line:4,column:2305}},"1056":{start:{line:4,column:2305},end:{line:4,column:2339}},"1057":{start:{line:4,column:2317},end:{line:4,column:2339}},"1058":{start:{line:4,column:2346},end:{line:4,column:2351}},"1059":{start:{line:4,column:2354},end:{line:4,column:2369}},"1060":{start:{line:4,column:2370},end:{line:4,column:2414}},"1061":{start:{line:4,column:2380},end:{line:4,column:2406}},"1062":{start:{line:4,column:2394},end:{line:4,column:2406}},"1063":{start:{line:4,column:2406},end:{line:4,column:2413}},"1064":{start:{line:4,column:2414},end:{line:4,column:2422}},"1065":{start:{line:4,column:2443},end:{line:4,column:2467}},"1066":{start:{line:4,column:2484},end:{line:4,column:2502}},"1067":{start:{line:4,column:2518},end:{line:4,column:2617}},"1068":{start:{line:4,column:2633},end:{line:4,column:2700}},"1069":{start:{line:4,column:2722},end:{line:4,column:2724}},"1070":{start:{line:4,column:2725},end:{line:4,column:2961}},"1071":{start:{line:4,column:2735},end:{line:4,column:2736}},"1072":{start:{line:4,column:2759},end:{line:4,column:2766}},"1073":{start:{line:4,column:2767},end:{line:4,column:2960}},"1074":{start:{line:4,column:2788},end:{line:4,column:2824}},"1075":{start:{line:4,column:2804},end:{line:4,column:2824}},"1076":{start:{line:4,column:2832},end:{line:4,column:2833}},"1077":{start:{line:4,column:2834},end:{line:4,column:2926}},"1078":{start:{line:4,column:2844},end:{line:4,column:2845}},"1079":{start:{line:4,column:2868},end:{line:4,column:2872}},"1080":{start:{line:4,column:2875},end:{line:4,column:2880}},"1081":{start:{line:4,column:2881},end:{line:4,column:2925}},"1082":{start:{line:4,column:2926},end:{line:4,column:2941}},"1083":{start:{line:4,column:2947},end:{line:4,column:2960}},"1084":{start:{line:4,column:2961},end:{line:4,column:2969}},"1085":{start:{line:4,column:2985},end:{line:4,column:2997}},"1086":{start:{line:4,column:3021},end:{line:4,column:3041}},"1087":{start:{line:4,column:3042},end:{line:4,column:3061}},"1088":{start:{line:4,column:3081},end:{line:4,column:3113}},"1089":{start:{line:4,column:3104},end:{line:4,column:3113}},"1090":{start:{line:4,column:3113},end:{line:4,column:3196}},"1091":{start:{line:4,column:3123},end:{line:4,column:3124}},"1092":{start:{line:4,column:3147},end:{line:4,column:3151}},"1093":{start:{line:4,column:3154},end:{line:4,column:3158}},"1094":{start:{line:4,column:3159},end:{line:4,column:3195}},"1095":{start:{line:4,column:3187},end:{line:4,column:3195}},"1096":{start:{line:4,column:3196},end:{line:4,column:3204}},"1097":{start:{line:4,column:3220},end:{line:4,column:3259}},"1098":{start:{line:4,column:3277},end:{line:4,column:3320}},"1099":{start:{line:4,column:3290},end:{line:4,column:3319}},"1100":{start:{line:4,column:3340},end:{line:4,column:3377}},"1101":{start:{line:4,column:3395},end:{line:4,column:3440}},"1102":{start:{line:4,column:3464},end:{line:4,column:3466}},"1103":{start:{line:4,column:3467},end:{line:4,column:3497}},"1104":{start:{line:4,column:3477},end:{line:4,column:3478}},"1105":{start:{line:4,column:3487},end:{line:4,column:3497}},"1106":{start:{line:4,column:3497},end:{line:4,column:3505}},"1107":{start:{line:4,column:3533},end:{line:4,column:3541}},"1108":{start:{line:4,column:3542},end:{line:4,column:3677}},"1109":{start:{line:4,column:3550},end:{line:4,column:3562}},"1110":{start:{line:4,column:3567},end:{line:4,column:3677}},"1111":{start:{line:4,column:3576},end:{line:4,column:3598}},"1112":{start:{line:4,column:3603},end:{line:4,column:3661}},"1113":{start:{line:4,column:3643},end:{line:4,column:3646}},"1114":{start:{line:4,column:3647},end:{line:4,column:3660}},"1115":{start:{line:4,column:3661},end:{line:4,column:3676}},"1116":{start:{line:4,column:3703},end:{line:4,column:3710}},"1117":{start:{line:4,column:3711},end:{line:4,column:3752}},"1118":{start:{line:4,column:3776},end:{line:4,column:3783}},"1119":{start:{line:4,column:3784},end:{line:4,column:3805}},"1120":{start:{line:4,column:3792},end:{line:4,column:3805}},"1121":{start:{line:4,column:3823},end:{line:4,column:3839}},"1122":{start:{line:4,column:3865},end:{line:4,column:3866}},"1123":{start:{line:4,column:3869},end:{line:4,column:3880}},"1124":{start:{line:4,column:3881},end:{line:4,column:3956}},"1125":{start:{line:4,column:3900},end:{line:4,column:3910}},"1126":{start:{line:4,column:3913},end:{line:4,column:3920}},"1127":{start:{line:4,column:3921},end:{line:4,column:3942}},"1128":{start:{line:4,column:3930},end:{line:4,column:3942}},"1129":{start:{line:4,column:3942},end:{line:4,column:3955}},"1130":{start:{line:4,column:3956},end:{line:4,column:3969}},"1131":{start:{line:4,column:3977},end:{line:4,column:3979}},"1132":{start:{line:4,column:3982},end:{line:4,column:3984}},"1133":{start:{line:4,column:3988},end:{line:4,column:3997}},"1134":{start:{line:4,column:4001},end:{line:4,column:4013}},"1135":{start:{line:4,column:4017},end:{line:4,column:4026}},"1136":{start:{line:4,column:4030},end:{line:4,column:4119}},"1137":{start:{line:4,column:4048},end:{line:4,column:4109}},"1138":{start:{line:4,column:4065},end:{line:4,column:4076}},"1139":{start:{line:4,column:4077},end:{line:4,column:4108}},"1140":{start:{line:4,column:4109},end:{line:4,column:4117}},"1141":{start:{line:4,column:4135},end:{line:4,column:4160}},"1142":{start:{line:4,column:4176},end:{line:4,column:4221}},"1143":{start:{line:4,column:4240},end:{line:4,column:4294}},"1144":{start:{line:4,column:4321},end:{line:4,column:4323}},"1145":{start:{line:4,column:4326},end:{line:4,column:4333}},"1146":{start:{line:4,column:4338},end:{line:4,column:4352}},"1147":{start:{line:4,column:4342},end:{line:4,column:4351}},"1148":{start:{line:4,column:4353},end:{line:4,column:4433}},"1149":{start:{line:4,column:4375},end:{line:4,column:4376}},"1150":{start:{line:4,column:4377},end:{line:4,column:4409}},"1151":{start:{line:4,column:4451},end:{line:4,column:4530}},"1152":{start:{line:4,column:4461},end:{line:4,column:4462}},"1153":{start:{line:4,column:4507},end:{line:4,column:4511}},"1154":{start:{line:4,column:4512},end:{line:4,column:4529}},"1155":{start:{line:4,column:4521},end:{line:4,column:4527}},"1156":{start:{line:4,column:4552},end:{line:4,column:4574}},"1157":{start:{line:4,column:4565},end:{line:4,column:4574}},"1158":{start:{line:4,column:4580},end:{line:4,column:4584}},"1159":{start:{line:4,column:4587},end:{line:4,column:4592}},"1160":{start:{line:4,column:4595},end:{line:4,column:4604}},"1161":{start:{line:4,column:4605},end:{line:4,column:4702}},"1162":{start:{line:4,column:4622},end:{line:4,column:4632}},"1163":{start:{line:4,column:4633},end:{line:4,column:4663}},"1164":{start:{line:4,column:4646},end:{line:4,column:4650}},"1165":{start:{line:4,column:4655},end:{line:4,column:4663}},"1166":{start:{line:4,column:4669},end:{line:4,column:4698}},"1167":{start:{line:4,column:4689},end:{line:4,column:4698}},"1168":{start:{line:4,column:4698},end:{line:4,column:4701}},"1169":{start:{line:4,column:4708},end:{line:4,column:4716}},"1170":{start:{line:4,column:4717},end:{line:4,column:5214}},"1171":{start:{line:4,column:4723},end:{line:4,column:4737}},"1172":{start:{line:4,column:4728},end:{line:4,column:4737}},"1173":{start:{line:4,column:4737},end:{line:4,column:4864}},"1174":{start:{line:4,column:4771},end:{line:4,column:4836}},"1175":{start:{line:4,column:4837},end:{line:4,column:4863}},"1176":{start:{line:4,column:4852},end:{line:4,column:4863}},"1177":{start:{line:4,column:4870},end:{line:4,column:5214}},"1178":{start:{line:4,column:4876},end:{line:4,column:4986}},"1179":{start:{line:4,column:4900},end:{line:4,column:4909}},"1180":{start:{line:4,column:4915},end:{line:4,column:4985}},"1181":{start:{line:4,column:4932},end:{line:4,column:4963}},"1182":{start:{line:4,column:4986},end:{line:4,column:5139}},"1183":{start:{line:4,column:4999},end:{line:4,column:5017}},"1184":{start:{line:4,column:5011},end:{line:4,column:5016}},"1185":{start:{line:4,column:5018},end:{line:4,column:5138}},"1186":{start:{line:4,column:5120},end:{line:4,column:5125}},"1187":{start:{line:4,column:5145},end:{line:4,column:5156}},"1188":{start:{line:4,column:5157},end:{line:4,column:5199}},"1189":{start:{line:4,column:5179},end:{line:4,column:5180}},"1190":{start:{line:4,column:5181},end:{line:4,column:5198}},"1191":{start:{line:4,column:5190},end:{line:4,column:5196}},"1192":{start:{line:4,column:5205},end:{line:4,column:5214}},"1193":{start:{line:4,column:5214},end:{line:4,column:5248}},"1194":{start:{line:4,column:5266},end:{line:4,column:5339}},"1195":{start:{line:4,column:5281},end:{line:4,column:5339}},"1196":{start:{line:4,column:5347},end:{line:4,column:5377}},"1197":{start:{line:4,column:5393},end:{line:4,column:5437}},"1198":{start:{line:4,column:5453},end:{line:4,column:5479}},"1199":{start:{line:4,column:5495},end:{line:4,column:5520}},"1200":{start:{line:4,column:5536},end:{line:4,column:5563}},"1201":{start:{line:4,column:5579},end:{line:4,column:5597}},"1202":{start:{line:4,column:5605},end:{line:4,column:5614}},"1203":{start:{line:4,column:5618},end:{line:4,column:5620}},"1204":{start:{line:4,column:5624},end:{line:4,column:5626}},"1205":{start:{line:4,column:5644},end:{line:4,column:5678}},"1206":{start:{line:4,column:5686},end:{line:4,column:5693}},"1207":{start:{line:4,column:5697},end:{line:4,column:8089}},"1208":{start:{line:4,column:5743},end:{line:4,column:5750}},"1209":{start:{line:4,column:5769},end:{line:4,column:5776}},"1210":{start:{line:4,column:5793},end:{line:4,column:5795}},"1211":{start:{line:4,column:5812},end:{line:4,column:5834}},"1212":{start:{line:4,column:5846},end:{line:4,column:5848}},"1213":{start:{line:4,column:5887},end:{line:4,column:6066}},"1214":{start:{line:4,column:5945},end:{line:4,column:5968}},"1215":{start:{line:4,column:6072},end:{line:4,column:6092}},"1216":{start:{line:4,column:6093},end:{line:4,column:6208}},"1217":{start:{line:4,column:6229},end:{line:4,column:6237}},"1218":{start:{line:4,column:6238},end:{line:4,column:6301}},"1219":{start:{line:4,column:6242},end:{line:4,column:6265}},"1220":{start:{line:4,column:6275},end:{line:4,column:6293}},"1221":{start:{line:4,column:6284},end:{line:4,column:6293}},"1222":{start:{line:4,column:6293},end:{line:4,column:6300}},"1223":{start:{line:4,column:6312},end:{line:4,column:6340}},"1224":{start:{line:4,column:6346},end:{line:4,column:6353}},"1225":{start:{line:4,column:6354},end:{line:4,column:6575}},"1226":{start:{line:4,column:6358},end:{line:4,column:6410}},"1227":{start:{line:4,column:6394},end:{line:4,column:6410}},"1228":{start:{line:4,column:6416},end:{line:4,column:6436}},"1229":{start:{line:4,column:6437},end:{line:4,column:6461}},"1230":{start:{line:4,column:6461},end:{line:4,column:6479}},"1231":{start:{line:4,column:6476},end:{line:4,column:6479}},"1232":{start:{line:4,column:6488},end:{line:4,column:6574}},"1233":{start:{line:4,column:6589},end:{line:4,column:6661}},"1234":{start:{line:4,column:6638},end:{line:4,column:6661}},"1235":{start:{line:4,column:6678},end:{line:4,column:6687}},"1236":{start:{line:4,column:6693},end:{line:4,column:6701}},"1237":{start:{line:4,column:6704},end:{line:4,column:6713}},"1238":{start:{line:4,column:6716},end:{line:4,column:6750}},"1239":{start:{line:4,column:6720},end:{line:4,column:6730}},"1240":{start:{line:4,column:6739},end:{line:4,column:6749}},"1241":{start:{line:4,column:6765},end:{line:4,column:6817}},"1242":{start:{line:4,column:6798},end:{line:4,column:6817}},"1243":{start:{line:4,column:6823},end:{line:4,column:6828}},"1244":{start:{line:4,column:6833},end:{line:4,column:6841}},"1245":{start:{line:4,column:6844},end:{line:4,column:6853}},"1246":{start:{line:4,column:6854},end:{line:4,column:7190}},"1247":{start:{line:4,column:6858},end:{line:4,column:7043}},"1248":{start:{line:4,column:6875},end:{line:4,column:6894}},"1249":{start:{line:4,column:6895},end:{line:4,column:7005}},"1250":{start:{line:4,column:6916},end:{line:4,column:6928}},"1251":{start:{line:4,column:6929},end:{line:4,column:7004}},"1252":{start:{line:4,column:7005},end:{line:4,column:7042}},"1253":{start:{line:4,column:7016},end:{line:4,column:7042}},"1254":{start:{line:4,column:7049},end:{line:4,column:7069}},"1255":{start:{line:4,column:7070},end:{line:4,column:7108}},"1256":{start:{line:4,column:7124},end:{line:4,column:7129}},"1257":{start:{line:4,column:7130},end:{line:4,column:7170}},"1258":{start:{line:4,column:7179},end:{line:4,column:7189}},"1259":{start:{line:4,column:7227},end:{line:4,column:7234}},"1260":{start:{line:4,column:7237},end:{line:4,column:7245}},"1261":{start:{line:4,column:7248},end:{line:4,column:7257}},"1262":{start:{line:4,column:7260},end:{line:4,column:7338}},"1263":{start:{line:4,column:7270},end:{line:4,column:7294}},"1264":{start:{line:4,column:7295},end:{line:4,column:7313}},"1265":{start:{line:4,column:7310},end:{line:4,column:7313}},"1266":{start:{line:4,column:7322},end:{line:4,column:7337}},"1267":{start:{line:4,column:7350},end:{line:4,column:7373}},"1268":{start:{line:4,column:7393},end:{line:4,column:7400}},"1269":{start:{line:4,column:7406},end:{line:4,column:7429}},"1270":{start:{line:4,column:7432},end:{line:4,column:7437}},"1271":{start:{line:4,column:7438},end:{line:4,column:7581}},"1272":{start:{line:4,column:7469},end:{line:4,column:7488}},"1273":{start:{line:4,column:7489},end:{line:4,column:7580}},"1274":{start:{line:4,column:7526},end:{line:4,column:7537}},"1275":{start:{line:4,column:7581},end:{line:4,column:7602}},"1276":{start:{line:4,column:7624},end:{line:4,column:7631}},"1277":{start:{line:4,column:7632},end:{line:4,column:7832}},"1278":{start:{line:4,column:7636},end:{line:4,column:7665}},"1279":{start:{line:4,column:7652},end:{line:4,column:7665}},"1280":{start:{line:4,column:7665},end:{line:4,column:7818}},"1281":{start:{line:4,column:7827},end:{line:4,column:7831}},"1282":{start:{line:4,column:7857},end:{line:4,column:7883}},"1283":{start:{line:4,column:7874},end:{line:4,column:7883}},"1284":{start:{line:4,column:7889},end:{line:4,column:7904}},"1285":{start:{line:4,column:7905},end:{line:4,column:7989}},"1286":{start:{line:4,column:8015},end:{line:4,column:8046}},"1287":{start:{line:4,column:8047},end:{line:4,column:8087}},"1288":{start:{line:4,column:8111},end:{line:4,column:8116}},"1289":{start:{line:4,column:8119},end:{line:4,column:8143}},"1290":{start:{line:4,column:8144},end:{line:4,column:8165}},"1291":{start:{line:4,column:8156},end:{line:4,column:8165}},"1292":{start:{line:4,column:8165},end:{line:4,column:8204}},"1293":{start:{line:4,column:8183},end:{line:4,column:8204}},"1294":{start:{line:4,column:8204},end:{line:4,column:8242}},"1295":{start:{line:4,column:8229},end:{line:4,column:8242}},"1296":{start:{line:4,column:8242},end:{line:4,column:8262}},"1297":{start:{line:4,column:8278},end:{line:4,column:8313}},"1298":{start:{line:4,column:8292},end:{line:4,column:8313}},"1299":{start:{line:4,column:8319},end:{line:4,column:8324}},"1300":{start:{line:4,column:8325},end:{line:4,column:8367}},"1301":{start:{line:4,column:8345},end:{line:4,column:8357}},"1302":{start:{line:4,column:8362},end:{line:4,column:8367}},"1303":{start:{line:4,column:8383},end:{line:4,column:8421}},"1304":{start:{line:4,column:8392},end:{line:4,column:8421}},"1305":{start:{line:4,column:8428},end:{line:4,column:8433}},"1306":{start:{line:4,column:8434},end:{line:4,column:8449}},"1307":{start:{line:4,column:8476},end:{line:4,column:8774}},"1308":{start:{line:4,column:8492},end:{line:4,column:8496}},"1309":{start:{line:4,column:8497},end:{line:4,column:8516}},"1310":{start:{line:4,column:8522},end:{line:4,column:8774}},"1311":{start:{line:4,column:8531},end:{line:4,column:8551}},"1312":{start:{line:4,column:8537},end:{line:4,column:8550}},"1313":{start:{line:4,column:8556},end:{line:4,column:8774}},"1314":{start:{line:4,column:8565},end:{line:4,column:8603}},"1315":{start:{line:4,column:8571},end:{line:4,column:8602}},"1316":{start:{line:4,column:8608},end:{line:4,column:8774}},"1317":{start:{line:4,column:8617},end:{line:4,column:8672}},"1318":{start:{line:4,column:8626},end:{line:4,column:8671}},"1319":{start:{line:4,column:8683},end:{line:4,column:8712}},"1320":{start:{line:4,column:8713},end:{line:4,column:8773}},"1321":{start:{line:4,column:8722},end:{line:4,column:8749}},"1322":{start:{line:4,column:8728},end:{line:4,column:8748}},"1323":{start:{line:4,column:8754},end:{line:4,column:8773}},"1324":{start:{line:4,column:8774},end:{line:4,column:8782}},"1325":{start:{line:4,column:8798},end:{line:4,column:8833}},"1326":{start:{line:4,column:8813},end:{line:4,column:8833}},"1327":{start:{line:4,column:8856},end:{line:4,column:8899}},"1328":{start:{line:4,column:8915},end:{line:4,column:8929}},"1329":{start:{line:4,column:8945},end:{line:4,column:9014}},"1330":{start:{line:4,column:9030},end:{line:4,column:9114}},"1331":{start:{line:4,column:9132},end:{line:4,column:9209}},"1332":{start:{line:4,column:9147},end:{line:4,column:9209}},"1333":{start:{line:4,column:9233},end:{line:4,column:9273}},"1334":{start:{line:4,column:9281},end:{line:4,column:9286}},"1335":{start:{line:4,column:9289},end:{line:4,column:9298}},"1336":{start:{line:4,column:9299},end:{line:4,column:9333}},"1337":{start:{line:4,column:9303},end:{line:4,column:9313}},"1338":{start:{line:4,column:9322},end:{line:4,column:9332}},"1339":{start:{line:4,column:9348},end:{line:4,column:9380}},"1340":{start:{line:4,column:9388},end:{line:4,column:9389}},"1341":{start:{line:4,column:9392},end:{line:4,column:9393}},"1342":{start:{line:4,column:9396},end:{line:4,column:9397}},"1343":{start:{line:4,column:9400},end:{line:4,column:9401}},"1344":{start:{line:4,column:9405},end:{line:4,column:9406}},"1345":{start:{line:4,column:9409},end:{line:4,column:9410}},"1346":{start:{line:4,column:9414},end:{line:4,column:9415}},"1347":{start:{line:4,column:9419},end:{line:4,column:9420}},"1348":{start:{line:4,column:9423},end:{line:4,column:9424}},"1349":{start:{line:4,column:9428},end:{line:4,column:9429}},"1350":{start:{line:4,column:9433},end:{line:4,column:9435}},"1351":{start:{line:4,column:9438},end:{line:4,column:9440}},"1352":{start:{line:4,column:9444},end:{line:4,column:9446}},"1353":{start:{line:4,column:9450},end:{line:4,column:9452}},"1354":{start:{line:4,column:9456},end:{line:4,column:9458}},"1355":{start:{line:4,column:9461},end:{line:4,column:9463}},"1356":{start:{line:4,column:9467},end:{line:4,column:9469}},"1357":{start:{line:4,column:9473},end:{line:4,column:9475}},"1358":{start:{line:4,column:9479},end:{line:4,column:9481}},"1359":{start:{line:4,column:9485},end:{line:4,column:9487}},"1360":{start:{line:4,column:9491},end:{line:4,column:9493}},"1361":{start:{line:4,column:9497},end:{line:4,column:9499}},"1362":{start:{line:4,column:9503},end:{line:4,column:9505}},"1363":{start:{line:4,column:9509},end:{line:4,column:9511}},"1364":{start:{line:4,column:9515},end:{line:4,column:9517}},"1365":{start:{line:4,column:9521},end:{line:4,column:9523}},"1366":{start:{line:4,column:9527},end:{line:4,column:9529}},"1367":{start:{line:4,column:9532},end:{line:4,column:9534}},"1368":{start:{line:4,column:9538},end:{line:4,column:9539}},"1369":{start:{line:4,column:9543},end:{line:4,column:9544}},"1370":{start:{line:4,column:9548},end:{line:4,column:9549}},"1371":{start:{line:4,column:9553},end:{line:4,column:9554}},"1372":{start:{line:4,column:9558},end:{line:4,column:9559}},"1373":{start:{line:4,column:9562},end:{line:4,column:9564}},"1374":{start:{line:4,column:9580},end:{line:4,column:9627}},"1375":{start:{line:4,column:9643},end:{line:4,column:9678}},"1376":{start:{line:4,column:9694},end:{line:4,column:9715}},"1377":{start:{line:4,column:9731},end:{line:4,column:9758}},"1378":{start:{line:4,column:9774},end:{line:4,column:9795}},"1379":{start:{line:4,column:9811},end:{line:4,column:9829}},"1380":{start:{line:4,column:9845},end:{line:4,column:9865}},"1381":{start:{line:4,column:9881},end:{line:4,column:9903}},"1382":{start:{line:4,column:9911},end:{line:4,column:9916}},"1383":{start:{line:4,column:9920},end:{line:4,column:9926}},"1384":{start:{line:4,column:9942},end:{line:4,column:9973}},"1385":{start:{line:4,column:9965},end:{line:4,column:9973}},"1386":{start:{line:4,column:9973},end:{line:4,column:9981}},"1387":{start:{line:4,column:9999},end:{line:4,column:10014}},"1388":{start:{line:4,column:10032},end:{line:4,column:10053}},"1389":{start:{line:4,column:10071},end:{line:4,column:10087}},"1390":{start:{line:4,column:10105},end:{line:4,column:10116}},"1391":{start:{line:4,column:10138},end:{line:4,column:10199}},"1392":{start:{line:4,column:10223},end:{line:4,column:10227}},"1393":{start:{line:4,column:10228},end:{line:4,column:10248}},"1394":{start:{line:4,column:10264},end:{line:4,column:10282}},"1395":{start:{line:4,column:10298},end:{line:4,column:10320}},"1396":{start:{line:4,column:10336},end:{line:4,column:10351}},"1397":{start:{line:4,column:10369},end:{line:4,column:10393}},"1398":{start:{line:4,column:10409},end:{line:4,column:10416}},"1399":{start:{line:4,column:10432},end:{line:4,column:10468}},"1400":{start:{line:4,column:10486},end:{line:4,column:10508}},"1401":{start:{line:4,column:10496},end:{line:4,column:10508}},"1402":{start:{line:4,column:10508},end:{line:4,column:10516}},"1403":{start:{line:4,column:10532},end:{line:4,column:10565}},"1404":{start:{line:4,column:10581},end:{line:4,column:10657}},"1405":{start:{line:4,column:10673},end:{line:4,column:10715}},"1406":{start:{line:4,column:10721},end:{line:4,column:10726}},"1407":{start:{line:4,column:10727},end:{line:4,column:10784}},"1408":{start:{line:4,column:10777},end:{line:4,column:10784}},"1409":{start:{line:4,column:10802},end:{line:4,column:10831}},"1410":{start:{line:4,column:10811},end:{line:4,column:10831}},"1411":{start:{line:4,column:10831},end:{line:4,column:10869}},"1412":{start:{line:4,column:10887},end:{line:4,column:10910}},"1413":{start:{line:4,column:10903},end:{line:4,column:10910}},"1414":{start:{line:4,column:10916},end:{line:4,column:10932}},"1415":{start:{line:4,column:10933},end:{line:4,column:10958}},"1416":{start:{line:4,column:10980},end:{line:4,column:10984}},"1417":{start:{line:4,column:10985},end:{line:4,column:11004}},"1418":{start:{line:4,column:11020},end:{line:4,column:11037}},"1419":{start:{line:4,column:11053},end:{line:4,column:11074}},"1420":{start:{line:4,column:11102},end:{line:4,column:11107}},"1421":{start:{line:4,column:11108},end:{line:4,column:11161}},"1422":{start:{line:4,column:11168},end:{line:4,column:11232}},"1423":{start:{line:4,column:11240},end:{line:4,column:11242}},"1424":{start:{line:4,column:11257},end:{line:4,column:11290}},"1425":{start:{line:4,column:11305},end:{line:4,column:11333}},"1426":{start:{line:4,column:11348},end:{line:4,column:11376}},"1427":{start:{line:4,column:11391},end:{line:4,column:11415}},"1428":{start:{line:4,column:11430},end:{line:4,column:11468}},"1429":{start:{line:4,column:11484},end:{line:4,column:11519}},"1430":{start:{line:4,column:11534},end:{line:4,column:11563}},"1431":{start:{line:4,column:11577},end:{line:4,column:11598}},"1432":{start:{line:4,column:11612},end:{line:4,column:11633}},"1433":{start:{line:4,column:11649},end:{line:4,column:11684}},"1434":{start:{line:4,column:11700},end:{line:4,column:11735}},"1435":{start:{line:4,column:11755},end:{line:4,column:11759}},"1436":{start:{line:4,column:11760},end:{line:4,column:11799}},"1437":{start:{line:4,column:11788},end:{line:4,column:11799}},"1438":{start:{line:4,column:11799},end:{line:4,column:11807}},"1439":{start:{line:4,column:11822},end:{line:4,column:11850}},"1440":{start:{line:4,column:11871},end:{line:4,column:11879}},"1441":{start:{line:4,column:11882},end:{line:4,column:11896}},"1442":{start:{line:4,column:11897},end:{line:4,column:11925}},"1443":{start:{line:4,column:11949},end:{line:4,column:11957}},"1444":{start:{line:4,column:11958},end:{line:4,column:11987}},"1445":{start:{line:4,column:12002},end:{line:4,column:12026}},"1446":{start:{line:4,column:12041},end:{line:4,column:12061}},"1447":{start:{line:4,column:12076},end:{line:4,column:12104}},"1448":{start:{line:4,column:12119},end:{line:4,column:12128}},"1449":{start:{line:4,column:12150},end:{line:4,column:12152}},"1450":{start:{line:4,column:12153},end:{line:4,column:12166}},"1451":{start:{line:4,column:12187},end:{line:4,column:12195}},"1452":{start:{line:4,column:12198},end:{line:4,column:12216}},"1453":{start:{line:4,column:12217},end:{line:4,column:12282}},"1454":{start:{line:4,column:12297},end:{line:4,column:12325}},"1455":{start:{line:4,column:12341},end:{line:4,column:12371}},"1456":{start:{line:4,column:12386},end:{line:4,column:12416}},"1457":{start:{line:4,column:12438},end:{line:4,column:12446}},"1458":{start:{line:4,column:12449},end:{line:4,column:12463}},"1459":{start:{line:4,column:12464},end:{line:4,column:12504}},"1460":{start:{line:4,column:12519},end:{line:4,column:12541}},"1461":{start:{line:4,column:12565},end:{line:4,column:12573}},"1462":{start:{line:4,column:12574},end:{line:4,column:12615}},"1463":{start:{line:4,column:12630},end:{line:4,column:12667}},"1464":{start:{line:4,column:12683},end:{line:4,column:12715}},"1465":{start:{line:4,column:12737},end:{line:4,column:12767}},"1466":{start:{line:4,column:12768},end:{line:4,column:12791}},"1467":{start:{line:4,column:12806},end:{line:4,column:12839}},"1468":{start:{line:4,column:12855},end:{line:4,column:12883}},"1469":{start:{line:4,column:12905},end:{line:4,column:12909}},"1470":{start:{line:4,column:12910},end:{line:4,column:12960}},"1471":{start:{line:4,column:12980},end:{line:4,column:13110}},"1472":{start:{line:4,column:12994},end:{line:4,column:12995}},"1473":{start:{line:4,column:12998},end:{line:4,column:12999}},"1474":{start:{line:4,column:13000},end:{line:4,column:13081}},"1475":{start:{line:4,column:13034},end:{line:4,column:13081}},"1476":{start:{line:4,column:13075},end:{line:4,column:13081}},"1477":{start:{line:4,column:13081},end:{line:4,column:13102}},"1478":{start:{line:4,column:13093},end:{line:4,column:13102}},"1479":{start:{line:4,column:13102},end:{line:4,column:13109}},"1480":{start:{line:4,column:13116},end:{line:4,column:13129}},"1481":{start:{line:4,column:13130},end:{line:4,column:13166}},"1482":{start:{line:4,column:13188},end:{line:4,column:13192}},"1483":{start:{line:4,column:13195},end:{line:4,column:13199}},"1484":{start:{line:4,column:13200},end:{line:4,column:13322}},"1485":{start:{line:4,column:13343},end:{line:4,column:13351}},"1486":{start:{line:4,column:13354},end:{line:4,column:13375}},"1487":{start:{line:4,column:13376},end:{line:4,column:13399}},"1488":{start:{line:4,column:13421},end:{line:4,column:13662}},"1489":{start:{line:4,column:13663},end:{line:4,column:13693}},"1490":{start:{line:4,column:13714},end:{line:4,column:13722}},"1491":{start:{line:4,column:13723},end:{line:4,column:13782}},"1492":{start:{line:4,column:13790},end:{line:4,column:13792}},"1493":{start:{line:4,column:13813},end:{line:4,column:13817}},"1494":{start:{line:4,column:13818},end:{line:4,column:14018}},"1495":{start:{line:4,column:14034},end:{line:4,column:14094}},"1496":{start:{line:4,column:14109},end:{line:4,column:14138}},"1497":{start:{line:4,column:14154},end:{line:4,column:14178}},"1498":{start:{line:4,column:14199},end:{line:4,column:14207}},"1499":{start:{line:4,column:14208},end:{line:4,column:14242}},"1500":{start:{line:4,column:14257},end:{line:4,column:14285}},"1501":{start:{line:4,column:14300},end:{line:4,column:14304}},"1502":{start:{line:4,column:14319},end:{line:4,column:14349}},"1503":{start:{line:4,column:14364},end:{line:4,column:14396}},"1504":{start:{line:4,column:14404},end:{line:4,column:14406}},"1505":{start:{line:4,column:14421},end:{line:4,column:14430}},"1506":{start:{line:4,column:14446},end:{line:4,column:14450}},"1507":{start:{line:4,column:14488},end:{line:4,column:14499}},"1508":{start:{line:4,column:14500},end:{line:4,column:14540}},"1509":{start:{line:4,column:14588},end:{line:4,column:14600}},"1510":{start:{line:4,column:14603},end:{line:4,column:14637}},"1511":{start:{line:4,column:14645},end:{line:4,column:14925}},"1512":{start:{line:4,column:14679},end:{line:4,column:14681}},"1513":{start:{line:4,column:14694},end:{line:4,column:14700}},"1514":{start:{line:4,column:14720},end:{line:4,column:14768}},"1515":{start:{line:4,column:14740},end:{line:4,column:14768}},"1516":{start:{line:4,column:14775},end:{line:4,column:14785}},"1517":{start:{line:4,column:14786},end:{line:4,column:14828}},"1518":{start:{line:4,column:14848},end:{line:4,column:14896}},"1519":{start:{line:4,column:14888},end:{line:4,column:14894}},"1520":{start:{line:4,column:14922},end:{line:4,column:14924}},"1521":{start:{line:4,column:14929},end:{line:4,column:14938}},"1522":{start:{line:4,column:14942},end:{line:4,column:15022}},"1523":{start:{line:4,column:14981},end:{line:4,column:14983}},"1524":{start:{line:4,column:15005},end:{line:4,column:15009}},"1525":{start:{line:4,column:15008},end:{line:4,column:15009}},"1526":{start:{line:4,column:15010},end:{line:4,column:15018}},"1527":{start:{line:4,column:15026},end:{line:4,column:15185}},"1528":{start:{line:4,column:15065},end:{line:4,column:15086}},"1529":{start:{line:4,column:15103},end:{line:4,column:15125}},"1530":{start:{line:4,column:15145},end:{line:4,column:15156}},"1531":{start:{line:4,column:15157},end:{line:4,column:15183}},"1532":{start:{line:4,column:15176},end:{line:4,column:15183}},"1533":{start:{line:4,column:15200},end:{line:4,column:15218}},"1534":{start:{line:4,column:15226},end:{line:4,column:15228}},"1535":{start:{line:4,column:15232},end:{line:4,column:15241}},"1536":{start:{line:4,column:15245},end:{line:4,column:16097}},"1537":{start:{line:4,column:15266},end:{line:4,column:15267}},"1538":{start:{line:4,column:15281},end:{line:4,column:15288}},"1539":{start:{line:4,column:15299},end:{line:4,column:15301}},"1540":{start:{line:4,column:15314},end:{line:4,column:15324}},"1541":{start:{line:4,column:15342},end:{line:4,column:15361}},"1542":{start:{line:4,column:15384},end:{line:4,column:15431}},"1543":{start:{line:4,column:15464},end:{line:4,column:15538}},"1544":{start:{line:4,column:15496},end:{line:4,column:15519}},"1545":{start:{line:4,column:15545},end:{line:4,column:15611}},"1546":{start:{line:4,column:15617},end:{line:4,column:15630}},"1547":{start:{line:4,column:15631},end:{line:4,column:15694}},"1548":{start:{line:4,column:15702},end:{line:4,column:15733}},"1549":{start:{line:4,column:15744},end:{line:4,column:15880}},"1550":{start:{line:4,column:15895},end:{line:4,column:16017}},"1551":{start:{line:4,column:16036},end:{line:4,column:16084}},"1552":{start:{line:4,column:16077},end:{line:4,column:16082}},"1553":{start:{line:4,column:16085},end:{line:4,column:16093}},"1554":{start:{line:4,column:16101},end:{line:4,column:16822}},"1555":{start:{line:4,column:16139},end:{line:4,column:16145}},"1556":{start:{line:4,column:16159},end:{line:4,column:16165}},"1557":{start:{line:4,column:16184},end:{line:4,column:16306}},"1558":{start:{line:4,column:16321},end:{line:4,column:16328}},"1559":{start:{line:4,column:16329},end:{line:4,column:16360}},"1560":{start:{line:4,column:16333},end:{line:4,column:16346}},"1561":{start:{line:4,column:16355},end:{line:4,column:16359}},"1562":{start:{line:4,column:16384},end:{line:4,column:16385}},"1563":{start:{line:4,column:16388},end:{line:4,column:16401}},"1564":{start:{line:4,column:16396},end:{line:4,column:16400}},"1565":{start:{line:4,column:16404},end:{line:4,column:16405}},"1566":{start:{line:4,column:16406},end:{line:4,column:16499}},"1567":{start:{line:4,column:16438},end:{line:4,column:16439}},"1568":{start:{line:4,column:16440},end:{line:4,column:16498}},"1569":{start:{line:4,column:16499},end:{line:4,column:16599}},"1570":{start:{line:4,column:16605},end:{line:4,column:16649}},"1571":{start:{line:4,column:16650},end:{line:4,column:16683}},"1572":{start:{line:4,column:16701},end:{line:4,column:16820}},"1573":{start:{line:4,column:16718},end:{line:4,column:16742}},"1574":{start:{line:4,column:16743},end:{line:4,column:16819}},"1575":{start:{line:4,column:16759},end:{line:4,column:16817}},"1576":{start:{line:4,column:16763},end:{line:4,column:16767}},"1577":{start:{line:4,column:16776},end:{line:4,column:16816}},"1578":{start:{line:4,column:16826},end:{line:4,column:16828}},"1579":{start:{line:4,column:16884},end:{line:4,column:16889}},"1580":{start:{line:4,column:16889},end:{line:4,column:17005}},"1581":{start:{line:4,column:16893},end:{line:4,column:16997}},"1582":{start:{line:4,column:17006},end:{line:4,column:17131}},"1583":{start:{line:4,column:17031},end:{line:4,column:17038}},"1584":{start:{line:4,column:17113},end:{line:4,column:17120}},"1585":{start:{line:4,column:17128},end:{line:4,column:17131}},"1586":{start:{line:4,column:17147},end:{line:4,column:17188}},"1587":{start:{line:4,column:17173},end:{line:4,column:17176}},"1588":{start:{line:4,column:17183},end:{line:4,column:17187}},"1589":{start:{line:4,column:17196},end:{line:4,column:17211}},"1590":{start:{line:4,column:17215},end:{line:4,column:17223}},"1591":{start:{line:4,column:17227},end:{line:4,column:17228}},"1592":{start:{line:4,column:17232},end:{line:4,column:18466}},"1593":{start:{line:4,column:17261},end:{line:4,column:17263}},"1594":{start:{line:4,column:17285},end:{line:4,column:17287}},"1595":{start:{line:4,column:17297},end:{line:4,column:17299}},"1596":{start:{line:4,column:17311},end:{line:4,column:17321}},"1597":{start:{line:4,column:17339},end:{line:4,column:17349}},"1598":{start:{line:4,column:17359},end:{line:4,column:17369}},"1599":{start:{line:4,column:17378},end:{line:4,column:17388}},"1600":{start:{line:4,column:17537},end:{line:4,column:17538}},"1601":{start:{line:4,column:17539},end:{line:4,column:17578}},"1602":{start:{line:4,column:17558},end:{line:4,column:17578}},"1603":{start:{line:4,column:17578},end:{line:4,column:17603}},"1604":{start:{line:4,column:17609},end:{line:4,column:17613}},"1605":{start:{line:4,column:17614},end:{line:4,column:17958}},"1606":{start:{line:4,column:17984},end:{line:4,column:18033}},"1607":{start:{line:4,column:18063},end:{line:4,column:18106}},"1608":{start:{line:4,column:18087},end:{line:4,column:18106}},"1609":{start:{line:4,column:18139},end:{line:4,column:18181}},"1610":{start:{line:4,column:18162},end:{line:4,column:18181}},"1611":{start:{line:4,column:18193},end:{line:4,column:18222}},"1612":{start:{line:4,column:18246},end:{line:4,column:18257}},"1613":{start:{line:4,column:18260},end:{line:4,column:18309}},"1614":{start:{line:4,column:18310},end:{line:4,column:18362}},"1615":{start:{line:4,column:18314},end:{line:4,column:18337}},"1616":{start:{line:4,column:18346},end:{line:4,column:18361}},"1617":{start:{line:4,column:18381},end:{line:4,column:18417}},"1618":{start:{line:4,column:18439},end:{line:4,column:18464}},"1619":{start:{line:4,column:18470},end:{line:4,column:18472}},"1620":{start:{line:4,column:18488},end:{line:4,column:18712}},"1621":{start:{line:4,column:18543},end:{line:4,column:18712}},"1622":{start:{line:4,column:18547},end:{line:4,column:18589}},"1623":{start:{line:4,column:18598},end:{line:4,column:18711}},"1624":{start:{line:4,column:18638},end:{line:4,column:18711}},"1625":{start:{line:4,column:18642},end:{line:4,column:18688}},"1626":{start:{line:4,column:18666},end:{line:4,column:18687}},"1627":{start:{line:4,column:18697},end:{line:4,column:18710}},"1628":{start:{line:4,column:18728},end:{line:4,column:18782}},"1629":{start:{line:4,column:18775},end:{line:4,column:18782}},"1630":{start:{line:4,column:18782},end:{line:4,column:18805}},"1631":{start:{line:4,column:18818},end:{line:4,column:18914}},"1632":{start:{line:4,column:18826},end:{line:4,column:18912}},"1633":{start:{line:4,column:18915},end:{line:4,column:18990}},"1634":{start:{line:4,column:18955},end:{line:4,column:18958}},"1635":{start:{line:4,column:18979},end:{line:4,column:18982}},"1636":{start:{line:4,column:19012},end:{line:4,column:19023}},"1637":{start:{line:4,column:19017},end:{line:4,column:19022}},"1638":{start:{line:4,column:19026},end:{line:4,column:19030}},"1639":{start:{line:4,column:19031},end:{line:4,column:19754}},"1640":{start:{line:4,column:19137},end:{line:4,column:19175}},"1641":{start:{line:4,column:19146},end:{line:4,column:19175}},"1642":{start:{line:4,column:19175},end:{line:4,column:19330}},"1643":{start:{line:4,column:19179},end:{line:4,column:19213}},"1644":{start:{line:4,column:19222},end:{line:4,column:19329}},"1645":{start:{line:4,column:19359},end:{line:4,column:19480}},"1646":{start:{line:4,column:19363},end:{line:4,column:19395}},"1647":{start:{line:4,column:19404},end:{line:4,column:19479}},"1648":{start:{line:4,column:19504},end:{line:4,column:19659}},"1649":{start:{line:4,column:19687},end:{line:4,column:19751}},"1650":{start:{line:4,column:19730},end:{line:4,column:19747}},"1651":{start:{line:4,column:19770},end:{line:4,column:19947}},"1652":{start:{line:4,column:19963},end:{line:4,column:20027}},"1653":{start:{line:4,column:20043},end:{line:4,column:20061}},"1654":{start:{line:4,column:20069},end:{line:4,column:20347}},"1655":{start:{line:4,column:20096},end:{line:4,column:20098}},"1656":{start:{line:4,column:20120},end:{line:4,column:20122}},"1657":{start:{line:4,column:20132},end:{line:4,column:20134}},"1658":{start:{line:4,column:20146},end:{line:4,column:20152}},"1659":{start:{line:4,column:20170},end:{line:4,column:20176}},"1660":{start:{line:4,column:20186},end:{line:4,column:20192}},"1661":{start:{line:4,column:20201},end:{line:4,column:20207}},"1662":{start:{line:4,column:20219},end:{line:4,column:20238}},"1663":{start:{line:4,column:20257},end:{line:4,column:20276}},"1664":{start:{line:4,column:20298},end:{line:4,column:20308}},"1665":{start:{line:4,column:20326},end:{line:4,column:20345}},"1666":{start:{line:4,column:20363},end:{line:4,column:20396}},"1667":{start:{line:4,column:20412},end:{line:4,column:20445}},"1668":{start:{line:4,column:20463},end:{line:4,column:20524}},"1669":{start:{line:4,column:20532},end:{line:4,column:20602}},"1670":{start:{line:4,column:20547},end:{line:4,column:20554}},"1671":{start:{line:4,column:20570},end:{line:4,column:20600}},"1672":{start:{line:4,column:20606},end:{line:4,column:20767}},"1673":{start:{line:4,column:20635},end:{line:4,column:20640}},"1674":{start:{line:4,column:20643},end:{line:4,column:20648}},"1675":{start:{line:4,column:20651},end:{line:4,column:20764}},"1676":{start:{line:4,column:20662},end:{line:4,column:20763}},"1677":{start:{line:4,column:20687},end:{line:4,column:20761}},"1678":{start:{line:4,column:20719},end:{line:4,column:20726}},"1679":{start:{line:4,column:20771},end:{line:4,column:20833}},"1680":{start:{line:4,column:20803},end:{line:4,column:20822}},"1681":{start:{line:4,column:20837},end:{line:4,column:21248}},"1682":{start:{line:4,column:20866},end:{line:4,column:20883}},"1683":{start:{line:4,column:20884},end:{line:4,column:20897}},"1684":{start:{line:4,column:20890},end:{line:4,column:20897}},"1685":{start:{line:4,column:20903},end:{line:4,column:20908}},"1686":{start:{line:4,column:20911},end:{line:4,column:20946}},"1687":{start:{line:4,column:20915},end:{line:4,column:20945}},"1688":{start:{line:4,column:20949},end:{line:4,column:21025}},"1689":{start:{line:4,column:20953},end:{line:4,column:21024}},"1690":{start:{line:4,column:21028},end:{line:4,column:21106}},"1691":{start:{line:4,column:21033},end:{line:4,column:21105}},"1692":{start:{line:4,column:21107},end:{line:4,column:21245}},"1693":{start:{line:4,column:21165},end:{line:4,column:21243}},"1694":{start:{line:4,column:21263},end:{line:4,column:21291}},"1695":{start:{line:4,column:21282},end:{line:4,column:21287}},"1696":{start:{line:4,column:21320},end:{line:4,column:21334}},"1697":{start:{line:4,column:21337},end:{line:4,column:21338}},"1698":{start:{line:4,column:21341},end:{line:4,column:21345}},"1699":{start:{line:4,column:21346},end:{line:4,column:21397}},"1700":{start:{line:4,column:21418},end:{line:4,column:21425}},"1701":{start:{line:4,column:21426},end:{line:4,column:21491}},"1702":{start:{line:4,column:21458},end:{line:4,column:21468}},"1703":{start:{line:4,column:21462},end:{line:4,column:21468}},"1704":{start:{line:4,column:21469},end:{line:4,column:21490}},"1705":{start:{line:4,column:21491},end:{line:4,column:21510}},"1706":{start:{line:4,column:21518},end:{line:4,column:21623}},"1707":{start:{line:4,column:21559},end:{line:4,column:21582}},"1708":{start:{line:4,column:21608},end:{line:4,column:21610}},"1709":{start:{line:4,column:21611},end:{line:4,column:21619}},"1710":{start:{line:4,column:21638},end:{line:4,column:21660}},"1711":{start:{line:4,column:21668},end:{line:4,column:21675}},"1712":{start:{line:4,column:21679},end:{line:4,column:21705}},"1713":{start:{line:4,column:21701},end:{line:4,column:21703}},"1714":{start:{line:4,column:21713},end:{line:4,column:21722}},"1715":{start:{line:4,column:21726},end:{line:4,column:22099}},"1716":{start:{line:4,column:21761},end:{line:4,column:21766}},"1717":{start:{line:4,column:21777},end:{line:4,column:21782}},"1718":{start:{line:4,column:21796},end:{line:4,column:21801}},"1719":{start:{line:4,column:21814},end:{line:4,column:21845}},"1720":{start:{line:4,column:21846},end:{line:4,column:21955}},"1721":{start:{line:4,column:21857},end:{line:4,column:21954}},"1722":{start:{line:4,column:21969},end:{line:4,column:21979}},"1723":{start:{line:4,column:21980},end:{line:4,column:22019}},"1724":{start:{line:4,column:22038},end:{line:4,column:22086}},"1725":{start:{line:4,column:22079},end:{line:4,column:22084}},"1726":{start:{line:4,column:22087},end:{line:4,column:22095}},"1727":{start:{line:4,column:22103},end:{line:4,column:22197}},"1728":{start:{line:4,column:22135},end:{line:4,column:22184}},"1729":{start:{line:4,column:22176},end:{line:4,column:22182}},"1730":{start:{line:4,column:22185},end:{line:4,column:22193}},"1731":{start:{line:4,column:22201},end:{line:4,column:22809}},"1732":{start:{line:4,column:22224},end:{line:4,column:22225}},"1733":{start:{line:4,column:22233},end:{line:4,column:22240}},"1734":{start:{line:4,column:22248},end:{line:4,column:22280}},"1735":{start:{line:4,column:22293},end:{line:4,column:22325}},"1736":{start:{line:4,column:22342},end:{line:4,column:22348}},"1737":{start:{line:4,column:22351},end:{line:4,column:22369}},"1738":{start:{line:4,column:22370},end:{line:4,column:22426}},"1739":{start:{line:4,column:22444},end:{line:4,column:22450}},"1740":{start:{line:4,column:22451},end:{line:4,column:22498}},"1741":{start:{line:4,column:22504},end:{line:4,column:22522}},"1742":{start:{line:4,column:22523},end:{line:4,column:22541}},"1743":{start:{line:4,column:22550},end:{line:4,column:22712}},"1744":{start:{line:4,column:22587},end:{line:4,column:22589}},"1745":{start:{line:4,column:22590},end:{line:4,column:22683}},"1746":{start:{line:4,column:22617},end:{line:4,column:22683}},"1747":{start:{line:4,column:22663},end:{line:4,column:22681}},"1748":{start:{line:4,column:22683},end:{line:4,column:22711}},"1749":{start:{line:4,column:22733},end:{line:4,column:22735}},"1750":{start:{line:4,column:22736},end:{line:4,column:22799}},"1751":{start:{line:4,column:22751},end:{line:4,column:22799}},"1752":{start:{line:4,column:22799},end:{line:4,column:22807}},"1753":{start:{line:4,column:22813},end:{line:4,column:22877}},"1754":{start:{line:4,column:22838},end:{line:4,column:22847}},"1755":{start:{line:4,column:22858},end:{line:4,column:22875}},"1756":{start:{line:4,column:22901},end:{line:4,column:22919}},"1757":{start:{line:4,column:22922},end:{line:4,column:22958}},"1758":{start:{line:4,column:22963},end:{line:4,column:22991}},"1759":{start:{line:4,column:22994},end:{line:4,column:23003}},"1760":{start:{line:4,column:23004},end:{line:4,column:23184}},"1761":{start:{line:4,column:23160},end:{line:4,column:23171}},"1762":{start:{line:4,column:23192},end:{line:4,column:23449}},"1763":{start:{line:4,column:23262},end:{line:4,column:23268}},"1764":{start:{line:4,column:23269},end:{line:4,column:23296}},"1765":{start:{line:4,column:23273},end:{line:4,column:23281}},"1766":{start:{line:4,column:23290},end:{line:4,column:23295}},"1767":{start:{line:4,column:23308},end:{line:4,column:23343}},"1768":{start:{line:4,column:23336},end:{line:4,column:23343}},"1769":{start:{line:4,column:23349},end:{line:4,column:23356}},"1770":{start:{line:4,column:23357},end:{line:4,column:23446}},"1771":{start:{line:4,column:23361},end:{line:4,column:23413}},"1772":{start:{line:4,column:23390},end:{line:4,column:23413}},"1773":{start:{line:4,column:23422},end:{line:4,column:23445}},"1774":{start:{line:4,column:23453},end:{line:4,column:23670}},"1775":{start:{line:4,column:23487},end:{line:4,column:23541}},"1776":{start:{line:4,column:23553},end:{line:4,column:23625}},"1777":{start:{line:4,column:23590},end:{line:4,column:23625}},"1778":{start:{line:4,column:23621},end:{line:4,column:23625}},"1779":{start:{line:4,column:23625},end:{line:4,column:23667}},"1780":{start:{line:4,column:23674},end:{line:4,column:23894}},"1781":{start:{line:4,column:23708},end:{line:4,column:23765}},"1782":{start:{line:4,column:23777},end:{line:4,column:23849}},"1783":{start:{line:4,column:23814},end:{line:4,column:23849}},"1784":{start:{line:4,column:23845},end:{line:4,column:23849}},"1785":{start:{line:4,column:23849},end:{line:4,column:23891}},"1786":{start:{line:4,column:23920},end:{line:4,column:23937}},"1787":{start:{line:4,column:23938},end:{line:4,column:24076}},"1788":{start:{line:4,column:24102},end:{line:4,column:24119}},"1789":{start:{line:4,column:24120},end:{line:4,column:24250}},"1790":{start:{line:4,column:24268},end:{line:4,column:24313}},"1791":{start:{line:4,column:24279},end:{line:4,column:24312}},"1792":{start:{line:4,column:24284},end:{line:4,column:24311}},"1793":{start:{line:4,column:24329},end:{line:4,column:24358}},"1794":{start:{line:4,column:24374},end:{line:4,column:24401}},"1795":{start:{line:4,column:24423},end:{line:4,column:24469}},"1796":{start:{line:4,column:24477},end:{line:4,column:24642}},"1797":{start:{line:4,column:24541},end:{line:4,column:24600}},"1798":{start:{line:4,column:24617},end:{line:4,column:24640}},"1799":{start:{line:4,column:24646},end:{line:4,column:24692}},"1800":{start:{line:4,column:24658},end:{line:4,column:24664}},"1801":{start:{line:4,column:24662},end:{line:4,column:24664}},"1802":{start:{line:4,column:24665},end:{line:4,column:24688}},"1803":{start:{line:4,column:24708},end:{line:4,column:24763}},"1804":{start:{line:4,column:24784},end:{line:4,column:24792}},"1805":{start:{line:4,column:24795},end:{line:4,column:24805}},"1806":{start:{line:4,column:24806},end:{line:4,column:24917}},"1807":{start:{line:4,column:24818},end:{line:4,column:24828}},"1808":{start:{line:4,column:24829},end:{line:4,column:24882}},"1809":{start:{line:4,column:24839},end:{line:4,column:24852}},"1810":{start:{line:4,column:24857},end:{line:4,column:24882}},"1811":{start:{line:4,column:24872},end:{line:4,column:24882}},"1812":{start:{line:4,column:24882},end:{line:4,column:24916}},"1813":{start:{line:4,column:24947},end:{line:4,column:24969}},"1814":{start:{line:4,column:24972},end:{line:4,column:25011}},"1815":{start:{line:4,column:25014},end:{line:4,column:25039}},"1816":{start:{line:4,column:25042},end:{line:4,column:25052}},"1817":{start:{line:4,column:25055},end:{line:4,column:25059}},"1818":{start:{line:4,column:25060},end:{line:4,column:25111}},"1819":{start:{line:4,column:25119},end:{line:4,column:25140}},"1820":{start:{line:4,column:25156},end:{line:4,column:25174}},"1821":{start:{line:4,column:25192},end:{line:4,column:25206}},"1822":{start:{line:4,column:25214},end:{line:4,column:25216}},"1823":{start:{line:4,column:25223},end:{line:4,column:25295}},"1824":{start:{line:4,column:25244},end:{line:4,column:25294}},"1825":{start:{line:4,column:25254},end:{line:4,column:25255}},"1826":{start:{line:4,column:25279},end:{line:4,column:25284}},"1827":{start:{line:4,column:25285},end:{line:4,column:25293}},"1828":{start:{line:4,column:25298},end:{line:4,column:26610}},"1829":{start:{line:4,column:25311},end:{line:4,column:26601}},"1830":{start:{line:4,column:26672},end:{line:4,column:26688}},"1831":{start:{line:4,column:26689},end:{line:4,column:26778}},"1832":{start:{line:4,column:26701},end:{line:4,column:26706}},"1833":{start:{line:4,column:26707},end:{line:4,column:26777}},"1834":{start:{line:4,column:26778},end:{line:4,column:26891}},"1835":{start:{line:4,column:26909},end:{line:4,column:27347}},"1836":{start:{line:4,column:26919},end:{line:4,column:26935}},"1837":{start:{line:4,column:26938},end:{line:4,column:26952}},"1838":{start:{line:4,column:26968},end:{line:4,column:26992}},"1839":{start:{line:4,column:27093},end:{line:4,column:27094}},"1840":{start:{line:4,column:27095},end:{line:4,column:27346}},"1841":{start:{line:4,column:27367},end:{line:4,column:27378}},"1842":{start:{line:4,column:27400},end:{line:4,column:27425}},"1843":{start:{line:4,column:27449},end:{line:4,column:27453}},"1844":{start:{line:4,column:27454},end:{line:4,column:27487}},"1845":{start:{line:4,column:27515},end:{line:4,column:27539}},"1846":{start:{line:4,column:27542},end:{line:4,column:27547}},"1847":{start:{line:4,column:27550},end:{line:4,column:27560}},"1848":{start:{line:4,column:27563},end:{line:4,column:27564}},"1849":{start:{line:4,column:27565},end:{line:4,column:27731}},"1850":{start:{line:4,column:27575},end:{line:4,column:27576}},"1851":{start:{line:4,column:27585},end:{line:4,column:27731}},"1852":{start:{line:4,column:27613},end:{line:4,column:27642}},"1853":{start:{line:4,column:27637},end:{line:4,column:27642}},"1854":{start:{line:4,column:27648},end:{line:4,column:27731}},"1855":{start:{line:4,column:27749},end:{line:4,column:27777}},"1856":{start:{line:4,column:27783},end:{line:4,column:27790}},"1857":{start:{line:4,column:27791},end:{line:4,column:27844}},"1858":{start:{line:4,column:27795},end:{line:4,column:27804}},"1859":{start:{line:4,column:27813},end:{line:4,column:27843}},"1860":{start:{line:4,column:27872},end:{line:4,column:27878}},"1861":{start:{line:4,column:27881},end:{line:4,column:27887}},"1862":{start:{line:4,column:27890},end:{line:4,column:27902}},"1863":{start:{line:4,column:27905},end:{line:4,column:27909}},"1864":{start:{line:4,column:27910},end:{line:4,column:27975}},"1865":{start:{line:4,column:27983},end:{line:4,column:27985}},"1866":{start:{line:4,column:27989},end:{line:4,column:28193}},"1867":{start:{line:4,column:28029},end:{line:4,column:28031}},"1868":{start:{line:4,column:28120},end:{line:4,column:28191}},"1869":{start:{line:4,column:28209},end:{line:4,column:28230}},"1870":{start:{line:4,column:28246},end:{line:4,column:28268}},"1871":{start:{line:4,column:28294},end:{line:4,column:28295}},"1872":{start:{line:4,column:28296},end:{line:4,column:28498}},"1873":{start:{line:4,column:28320},end:{line:4,column:28324}},"1874":{start:{line:4,column:28325},end:{line:4,column:28497}},"1875":{start:{line:4,column:28348},end:{line:4,column:28363}},"1876":{start:{line:4,column:28357},end:{line:4,column:28363}},"1877":{start:{line:4,column:28363},end:{line:4,column:28367}},"1878":{start:{line:4,column:28373},end:{line:4,column:28379}},"1879":{start:{line:4,column:28382},end:{line:4,column:28388}},"1880":{start:{line:4,column:28391},end:{line:4,column:28397}},"1881":{start:{line:4,column:28398},end:{line:4,column:28421}},"1882":{start:{line:4,column:28433},end:{line:4,column:28434}},"1883":{start:{line:4,column:28437},end:{line:4,column:28443}},"1884":{start:{line:4,column:28444},end:{line:4,column:28496}},"1885":{start:{line:4,column:28498},end:{line:4,column:28506}},"1886":{start:{line:4,column:28522},end:{line:4,column:28548}},"1887":{start:{line:4,column:28564},end:{line:4,column:28591}},"1888":{start:{line:4,column:28609},end:{line:4,column:28818}},"1889":{start:{line:4,column:28638},end:{line:4,column:28818}},"1890":{start:{line:4,column:28664},end:{line:4,column:28676}},"1891":{start:{line:4,column:28687},end:{line:4,column:28689}},"1892":{start:{line:4,column:28690},end:{line:4,column:28817}},"1893":{start:{line:4,column:28700},end:{line:4,column:28701}},"1894":{start:{line:4,column:28724},end:{line:4,column:28728}},"1895":{start:{line:4,column:28729},end:{line:4,column:28816}},"1896":{start:{line:4,column:28818},end:{line:4,column:28826}},"1897":{start:{line:4,column:28856},end:{line:4,column:28857}},"1898":{start:{line:4,column:28860},end:{line:4,column:28868}},"1899":{start:{line:4,column:28869},end:{line:4,column:28991}},"1900":{start:{line:4,column:28879},end:{line:4,column:28884}},"1901":{start:{line:4,column:28889},end:{line:4,column:28991}},"1902":{start:{line:4,column:28913},end:{line:4,column:28919}},"1903":{start:{line:4,column:28920},end:{line:4,column:28990}},"1904":{start:{line:4,column:28943},end:{line:4,column:28989}},"1905":{start:{line:4,column:28953},end:{line:4,column:28958}},"1906":{start:{line:4,column:28958},end:{line:4,column:28963}},"1907":{start:{line:4,column:28969},end:{line:4,column:28989}},"1908":{start:{line:4,column:28977},end:{line:4,column:28983}},"1909":{start:{line:4,column:28983},end:{line:4,column:28988}},"1910":{start:{line:4,column:28991},end:{line:4,column:29104}},"1911":{start:{line:4,column:29015},end:{line:4,column:29019}},"1912":{start:{line:4,column:29020},end:{line:4,column:29048}},"1913":{start:{line:4,column:29042},end:{line:4,column:29048}},"1914":{start:{line:4,column:29048},end:{line:4,column:29086}},"1915":{start:{line:4,column:29058},end:{line:4,column:29079}},"1916":{start:{line:4,column:29079},end:{line:4,column:29085}},"1917":{start:{line:4,column:29086},end:{line:4,column:29103}},"1918":{start:{line:4,column:29104},end:{line:4,column:29181}},"1919":{start:{line:4,column:29197},end:{line:4,column:29210}},"1920":{start:{line:4,column:29226},end:{line:4,column:29240}},"1921":{start:{line:4,column:29256},end:{line:4,column:29268}},"1922":{start:{line:4,column:29292},end:{line:4,column:29297}},"1923":{start:{line:4,column:29300},end:{line:4,column:29301}},"1924":{start:{line:4,column:29302},end:{line:4,column:29324}},"1925":{start:{line:4,column:29312},end:{line:4,column:29324}},"1926":{start:{line:4,column:29324},end:{line:4,column:29332}},"1927":{start:{line:4,column:29340},end:{line:4,column:29342}},"1928":{start:{line:4,column:29364},end:{line:4,column:29366}},"1929":{start:{line:4,column:29367},end:{line:4,column:29380}},"1930":{start:{line:4,column:29388},end:{line:4,column:29391}},"1931":{start:{line:4,column:29395},end:{line:4,column:29399}},"1932":{start:{line:4,column:29403},end:{line:4,column:29404}},"1933":{start:{line:4,column:29408},end:{line:4,column:29409}},"1934":{start:{line:4,column:29413},end:{line:4,column:29415}},"1935":{start:{line:4,column:29441},end:{line:4,column:29537}},"1936":{start:{line:4,column:29543},end:{line:4,column:29547}},"1937":{start:{line:4,column:29550},end:{line:4,column:29554}},"1938":{start:{line:4,column:29555},end:{line:4,column:29575}},"1939":{start:{line:4,column:29599},end:{line:4,column:29606}},"1940":{start:{line:4,column:29607},end:{line:4,column:29626}},"1941":{start:{line:4,column:29617},end:{line:4,column:29626}},"1942":{start:{line:4,column:29632},end:{line:4,column:29636}},"1943":{start:{line:4,column:29637},end:{line:4,column:29728}},"1944":{start:{line:4,column:29734},end:{line:4,column:29741}},"1945":{start:{line:4,column:29744},end:{line:4,column:29759}},"1946":{start:{line:4,column:29760},end:{line:4,column:29845}},"1947":{start:{line:4,column:29776},end:{line:4,column:29781}},"1948":{start:{line:4,column:29784},end:{line:4,column:29791}},"1949":{start:{line:4,column:29794},end:{line:4,column:29803}},"1950":{start:{line:4,column:29804},end:{line:4,column:29844}},"1951":{start:{line:4,column:29814},end:{line:4,column:29815}},"1952":{start:{line:4,column:29824},end:{line:4,column:29844}},"1953":{start:{line:4,column:29845},end:{line:4,column:29862}},"1954":{start:{line:4,column:29880},end:{line:4,column:29905}},"1955":{start:{line:4,column:29923},end:{line:4,column:30050}},"1956":{start:{line:4,column:30068},end:{line:4,column:30139}},"1957":{start:{line:4,column:30109},end:{line:4,column:30139}},"1958":{start:{line:4,column:30145},end:{line:4,column:30146}},"1959":{start:{line:4,column:30149},end:{line:4,column:30153}},"1960":{start:{line:4,column:30156},end:{line:4,column:30157}},"1961":{start:{line:4,column:30158},end:{line:4,column:30269}},"1962":{start:{line:4,column:30174},end:{line:4,column:30204}},"1963":{start:{line:4,column:30194},end:{line:4,column:30204}},"1964":{start:{line:4,column:30204},end:{line:4,column:30268}},"1965":{start:{line:4,column:30240},end:{line:4,column:30268}},"1966":{start:{line:4,column:30269},end:{line:4,column:30278}},"1967":{start:{line:4,column:30298},end:{line:4,column:30307}},"1968":{start:{line:4,column:30325},end:{line:4,column:30357}},"1969":{start:{line:4,column:30340},end:{line:4,column:30357}},"1970":{start:{line:4,column:30357},end:{line:4,column:30388}},"1971":{start:{line:4,column:30372},end:{line:4,column:30388}},"1972":{start:{line:4,column:30394},end:{line:4,column:30401}},"1973":{start:{line:4,column:30402},end:{line:4,column:30582}},"1974":{start:{line:4,column:30414},end:{line:4,column:30422}},"1975":{start:{line:4,column:30425},end:{line:4,column:30426}},"1976":{start:{line:4,column:30427},end:{line:4,column:30581}},"1977":{start:{line:4,column:30444},end:{line:4,column:30448}},"1978":{start:{line:4,column:30449},end:{line:4,column:30464}},"1979":{start:{line:4,column:30458},end:{line:4,column:30464}},"1980":{start:{line:4,column:30464},end:{line:4,column:30580}},"1981":{start:{line:4,column:30473},end:{line:4,column:30479}},"1982":{start:{line:4,column:30484},end:{line:4,column:30580}},"1983":{start:{line:4,column:30506},end:{line:4,column:30546}},"1984":{start:{line:4,column:30542},end:{line:4,column:30546}},"1985":{start:{line:4,column:30551},end:{line:4,column:30574}},"1986":{start:{line:4,column:30560},end:{line:4,column:30574}},"1987":{start:{line:4,column:30574},end:{line:4,column:30579}},"1988":{start:{line:4,column:30582},end:{line:4,column:30593}},"1989":{start:{line:4,column:30613},end:{line:4,column:30641}},"1990":{start:{line:4,column:30632},end:{line:4,column:30641}},"1991":{start:{line:4,column:30641},end:{line:4,column:30661}},"1992":{start:{line:4,column:30683},end:{line:4,column:30801}},"1993":{start:{line:4,column:30729},end:{line:4,column:30734}},"1994":{start:{line:4,column:30737},end:{line:4,column:30746}},"1995":{start:{line:4,column:30747},end:{line:4,column:30800}},"1996":{start:{line:4,column:30751},end:{line:4,column:30786}},"1997":{start:{line:4,column:30795},end:{line:4,column:30799}},"1998":{start:{line:4,column:30801},end:{line:4,column:30817}},"1999":{start:{line:4,column:30843},end:{line:4,column:30958}},"2000":{start:{line:4,column:30856},end:{line:4,column:30918}},"2001":{start:{line:4,column:30884},end:{line:4,column:30898}},"2002":{start:{line:4,column:30899},end:{line:4,column:30917}},"2003":{start:{line:4,column:30909},end:{line:4,column:30917}},"2004":{start:{line:4,column:30924},end:{line:4,column:30938}},"2005":{start:{line:4,column:30939},end:{line:4,column:30957}},"2006":{start:{line:4,column:30949},end:{line:4,column:30957}},"2007":{start:{line:4,column:30958},end:{line:4,column:30976}},"2008":{start:{line:4,column:31006},end:{line:4,column:31011}},"2009":{start:{line:4,column:31012},end:{line:4,column:31485}},"2010":{start:{line:4,column:31037},end:{line:4,column:31084}},"2011":{start:{line:4,column:31051},end:{line:4,column:31084}},"2012":{start:{line:4,column:31084},end:{line:4,column:31153}},"2013":{start:{line:4,column:31094},end:{line:4,column:31139}},"2014":{start:{line:4,column:31120},end:{line:4,column:31126}},"2015":{start:{line:4,column:31131},end:{line:4,column:31139}},"2016":{start:{line:4,column:31148},end:{line:4,column:31152}},"2017":{start:{line:4,column:31159},end:{line:4,column:31485}},"2018":{start:{line:4,column:31188},end:{line:4,column:31192}},"2019":{start:{line:4,column:31195},end:{line:4,column:31202}},"2020":{start:{line:4,column:31205},end:{line:4,column:31207}},"2021":{start:{line:4,column:31210},end:{line:4,column:31226}},"2022":{start:{line:4,column:31227},end:{line:4,column:31484}},"2023":{start:{line:4,column:31337},end:{line:4,column:31341}},"2024":{start:{line:4,column:31342},end:{line:4,column:31402}},"2025":{start:{line:4,column:31367},end:{line:4,column:31382}},"2026":{start:{line:4,column:31383},end:{line:4,column:31401}},"2027":{start:{line:4,column:31393},end:{line:4,column:31401}},"2028":{start:{line:4,column:31402},end:{line:4,column:31483}},"2029":{start:{line:4,column:31485},end:{line:4,column:31493}},"2030":{start:{line:4,column:31525},end:{line:4,column:31529}},"2031":{start:{line:4,column:31532},end:{line:4,column:31543}},"2032":{start:{line:4,column:31546},end:{line:4,column:31584}},"2033":{start:{line:4,column:31587},end:{line:4,column:31597}},"2034":{start:{line:4,column:31600},end:{line:4,column:31613}},"2035":{start:{line:4,column:31614},end:{line:4,column:31646}},"2036":{start:{line:4,column:31676},end:{line:4,column:31693}},"2037":{start:{line:4,column:31696},end:{line:4,column:31702}},"2038":{start:{line:4,column:31705},end:{line:4,column:31714}},"2039":{start:{line:4,column:31717},end:{line:4,column:31733}},"2040":{start:{line:4,column:31736},end:{line:4,column:31750}},"2041":{start:{line:4,column:31753},end:{line:4,column:31758}},"2042":{start:{line:4,column:31761},end:{line:4,column:31768}},"2043":{start:{line:4,column:31771},end:{line:4,column:31778}},"2044":{start:{line:4,column:31779},end:{line:4,column:31852}},"2045":{start:{line:4,column:31789},end:{line:4,column:31790}},"2046":{start:{line:4,column:31806},end:{line:4,column:31810}},"2047":{start:{line:4,column:31811},end:{line:4,column:31851}},"2048":{start:{line:4,column:31843},end:{line:4,column:31851}},"2049":{start:{line:4,column:31852},end:{line:4,column:31902}},"2050":{start:{line:4,column:31864},end:{line:4,column:31868}},"2051":{start:{line:4,column:31869},end:{line:4,column:31901}},"2052":{start:{line:4,column:31893},end:{line:4,column:31901}},"2053":{start:{line:4,column:31902},end:{line:4,column:31913}},"2054":{start:{line:4,column:31943},end:{line:4,column:31947}},"2055":{start:{line:4,column:31950},end:{line:4,column:31956}},"2056":{start:{line:4,column:31957},end:{line:4,column:32272}},"2057":{start:{line:4,column:31983},end:{line:4,column:31984}},"2058":{start:{line:4,column:31985},end:{line:4,column:32013}},"2059":{start:{line:4,column:32000},end:{line:4,column:32013}},"2060":{start:{line:4,column:32019},end:{line:4,column:32044}},"2061":{start:{line:4,column:32045},end:{line:4,column:32060}},"2062":{start:{line:4,column:32066},end:{line:4,column:32081}},"2063":{start:{line:4,column:32086},end:{line:4,column:32119}},"2064":{start:{line:4,column:32122},end:{line:4,column:32131}},"2065":{start:{line:4,column:32132},end:{line:4,column:32271}},"2066":{start:{line:4,column:32136},end:{line:4,column:32221}},"2067":{start:{line:4,column:32230},end:{line:4,column:32270}},"2068":{start:{line:4,column:32272},end:{line:4,column:32280}},"2069":{start:{line:4,column:32296},end:{line:4,column:32344}},"2070":{start:{line:4,column:32318},end:{line:4,column:32344}},"2071":{start:{line:4,column:32350},end:{line:4,column:32383}},"2072":{start:{line:4,column:32384},end:{line:4,column:32424}},"2073":{start:{line:4,column:32450},end:{line:4,column:32454}},"2074":{start:{line:4,column:32455},end:{line:4,column:32479}},"2075":{start:{line:4,column:32497},end:{line:4,column:32520}},"2076":{start:{line:4,column:32528},end:{line:4,column:32650}},"2077":{start:{line:4,column:32565},end:{line:4,column:32592}},"2078":{start:{line:4,column:32604},end:{line:4,column:32648}},"2079":{start:{line:4,column:32665},end:{line:4,column:32687}},"2080":{start:{line:4,column:32703},end:{line:4,column:32931}},"2081":{start:{line:4,column:32724},end:{line:4,column:32747}},"2082":{start:{line:4,column:32750},end:{line:4,column:32762}},"2083":{start:{line:4,column:32765},end:{line:4,column:32781}},"2084":{start:{line:4,column:32784},end:{line:4,column:32830}},"2085":{start:{line:4,column:32831},end:{line:4,column:32914}},"2086":{start:{line:4,column:32853},end:{line:4,column:32865}},"2087":{start:{line:4,column:32866},end:{line:4,column:32887}},"2088":{start:{line:4,column:32878},end:{line:4,column:32887}},"2089":{start:{line:4,column:32887},end:{line:4,column:32913}},"2090":{start:{line:4,column:32914},end:{line:4,column:32929}},"2091":{start:{line:4,column:32924},end:{line:4,column:32929}},"2092":{start:{line:4,column:32947},end:{line:4,column:33000}},"2093":{start:{line:4,column:32971},end:{line:4,column:32979}},"2094":{start:{line:4,column:32980},end:{line:4,column:32993}},"2095":{start:{line:4,column:33030},end:{line:4,column:33031}},"2096":{start:{line:4,column:33034},end:{line:4,column:33035}},"2097":{start:{line:4,column:33036},end:{line:4,column:33225}},"2098":{start:{line:4,column:33087},end:{line:4,column:33103}},"2099":{start:{line:4,column:33104},end:{line:4,column:33123}},"2100":{start:{line:4,column:33114},end:{line:4,column:33123}},"2101":{start:{line:4,column:33129},end:{line:4,column:33137}},"2102":{start:{line:4,column:33138},end:{line:4,column:33221}},"2103":{start:{line:4,column:33151},end:{line:4,column:33156}},"2104":{start:{line:4,column:33157},end:{line:4,column:33205}},"2105":{start:{line:4,column:33169},end:{line:4,column:33185}},"2106":{start:{line:4,column:33186},end:{line:4,column:33204}},"2107":{start:{line:4,column:33196},end:{line:4,column:33204}},"2108":{start:{line:4,column:33205},end:{line:4,column:33220}},"2109":{start:{line:4,column:33221},end:{line:4,column:33224}},"2110":{start:{line:4,column:33225},end:{line:4,column:33233}},"2111":{start:{line:4,column:33255},end:{line:4,column:33259}},"2112":{start:{line:4,column:33262},end:{line:4,column:33268}},"2113":{start:{line:4,column:33269},end:{line:4,column:33309}},"2114":{start:{line:4,column:33325},end:{line:4,column:33341}},"2115":{start:{line:4,column:33356},end:{line:4,column:33374}},"2116":{start:{line:4,column:33392},end:{line:4,column:33414}},"2117":{start:{line:4,column:33422},end:{line:4,column:33526}},"2118":{start:{line:4,column:33465},end:{line:4,column:33485}},"2119":{start:{line:4,column:33511},end:{line:4,column:33513}},"2120":{start:{line:4,column:33514},end:{line:4,column:33522}},"2121":{start:{line:4,column:33542},end:{line:4,column:33582}},"2122":{start:{line:4,column:33597},end:{line:4,column:33636}},"2123":{start:{line:4,column:33644},end:{line:4,column:34691}},"2124":{start:{line:4,column:33681},end:{line:4,column:33683}},"2125":{start:{line:4,column:33693},end:{line:4,column:33699}},"2126":{start:{line:4,column:33709},end:{line:4,column:33711}},"2127":{start:{line:4,column:33729},end:{line:4,column:33731}},"2128":{start:{line:4,column:33741},end:{line:4,column:33747}},"2129":{start:{line:4,column:33755},end:{line:4,column:33756}},"2130":{start:{line:4,column:33763},end:{line:4,column:33769}},"2131":{start:{line:4,column:33775},end:{line:4,column:33781}},"2132":{start:{line:4,column:33796},end:{line:4,column:33825}},"2133":{start:{line:4,column:33844},end:{line:4,column:33875}},"2134":{start:{line:4,column:33883},end:{line:4,column:33906}},"2135":{start:{line:4,column:33914},end:{line:4,column:33941}},"2136":{start:{line:4,column:33952},end:{line:4,column:33982}},"2137":{start:{line:4,column:33991},end:{line:4,column:34019}},"2138":{start:{line:4,column:34032},end:{line:4,column:34064}},"2139":{start:{line:4,column:34076},end:{line:4,column:34100}},"2140":{start:{line:4,column:34109},end:{line:4,column:34137}},"2141":{start:{line:4,column:34148},end:{line:4,column:34176}},"2142":{start:{line:4,column:34188},end:{line:4,column:34219}},"2143":{start:{line:4,column:34231},end:{line:4,column:34245}},"2144":{start:{line:4,column:34251},end:{line:4,column:34256}},"2145":{start:{line:4,column:34257},end:{line:4,column:34386}},"2146":{start:{line:4,column:34405},end:{line:4,column:34510}},"2147":{start:{line:4,column:34522},end:{line:4,column:34537}},"2148":{start:{line:4,column:34549},end:{line:4,column:34580}},"2149":{start:{line:4,column:34591},end:{line:4,column:34669}},"2150":{start:{line:4,column:34688},end:{line:4,column:34690}},"2151":{start:{line:4,column:34707},end:{line:4,column:34732}},"2152":{start:{line:4,column:34740},end:{line:4,column:34840}},"2153":{start:{line:4,column:34753},end:{line:4,column:34830}},"2154":{start:{line:4,column:34844},end:{line:4,column:34851}},"2155":{start:{line:4,column:34855},end:{line:4,column:34856}},"2156":{start:{line:4,column:34871},end:{line:4,column:34882}},"2157":{start:{line:4,column:34898},end:{line:4,column:34913}},"2158":{start:{line:4,column:34929},end:{line:4,column:34945}},"2159":{start:{line:4,column:34953},end:{line:4,column:34968}},"2160":{start:{line:4,column:34986},end:{line:4,column:35019}},"2161":{start:{line:4,column:35035},end:{line:4,column:35051}},"2162":{start:{line:4,column:35067},end:{line:4,column:35083}},"2163":{start:{line:4,column:35099},end:{line:4,column:35130}},"2164":{start:{line:4,column:35122},end:{line:4,column:35130}},"2165":{start:{line:4,column:35130},end:{line:4,column:35138}},"2166":{start:{line:4,column:35161},end:{line:4,column:35165}},"2167":{start:{line:4,column:35173},end:{line:4,column:35199}},"2168":{start:{line:4,column:35195},end:{line:4,column:35197}},"2169":{start:{line:4,column:35203},end:{line:4,column:35207}},"2170":{start:{line:4,column:35215},end:{line:4,column:35224}},"2171":{start:{line:4,column:35228},end:{line:4,column:35283}},"2172":{start:{line:4,column:35272},end:{line:4,column:35281}},"2173":{start:{line:4,column:35291},end:{line:4,column:35390}},"2174":{start:{line:4,column:35313},end:{line:4,column:35388}},"2175":{start:{line:4,column:35398},end:{line:4,column:35401}},"2176":{start:{line:4,column:35409},end:{line:4,column:35413}},"2177":{start:{line:4,column:35421},end:{line:4,column:35423}},"2178":{start:{line:4,column:35427},end:{line:4,column:35453}},"2179":{start:{line:4,column:35449},end:{line:4,column:35451}},"2180":{start:{line:4,column:35461},end:{line:4,column:35470}},"2181":{start:{line:4,column:35478},end:{line:4,column:35491}},"2182":{start:{line:4,column:35513},end:{line:4,column:35524}},"2183":{start:{line:4,column:35540},end:{line:4,column:35563}},"2184":{start:{line:4,column:35571},end:{line:4,column:35579}},"2185":{start:{line:4,column:35575},end:{line:4,column:35579}},"2186":{start:{line:4,column:35602},end:{line:4,column:35618}},"2187":{start:{line:4,column:35642},end:{line:4,column:35658}},"2188":{start:{line:4,column:35659},end:{line:4,column:35815}},"2189":{start:{line:4,column:35678},end:{line:4,column:35685}},"2190":{start:{line:4,column:35686},end:{line:4,column:35814}},"2191":{start:{line:4,column:35690},end:{line:4,column:35800}},"2192":{start:{line:4,column:35700},end:{line:4,column:35701}},"2193":{start:{line:4,column:35725},end:{line:4,column:35729}},"2194":{start:{line:4,column:35732},end:{line:4,column:35738}},"2195":{start:{line:4,column:35739},end:{line:4,column:35799}},"2196":{start:{line:4,column:35756},end:{line:4,column:35765}},"2197":{start:{line:4,column:35766},end:{line:4,column:35798}},"2198":{start:{line:4,column:35809},end:{line:4,column:35813}},"2199":{start:{line:4,column:35835},end:{line:4,column:35841}},"2200":{start:{line:4,column:35847},end:{line:4,column:35854}},"2201":{start:{line:4,column:35855},end:{line:4,column:35879}},"2202":{start:{line:4,column:35859},end:{line:4,column:35865}},"2203":{start:{line:4,column:35874},end:{line:4,column:35878}},"2204":{start:{line:4,column:35899},end:{line:4,column:36076}},"2205":{start:{line:4,column:35915},end:{line:4,column:35922}},"2206":{start:{line:4,column:35923},end:{line:4,column:36075}},"2207":{start:{line:4,column:35933},end:{line:4,column:35949}},"2208":{start:{line:4,column:35952},end:{line:4,column:35966}},"2209":{start:{line:4,column:35967},end:{line:4,column:36061}},"2210":{start:{line:4,column:35977},end:{line:4,column:35978}},"2211":{start:{line:4,column:35994},end:{line:4,column:36003}},"2212":{start:{line:4,column:36004},end:{line:4,column:36060}},"2213":{start:{line:4,column:36031},end:{line:4,column:36035}},"2214":{start:{line:4,column:36036},end:{line:4,column:36059}},"2215":{start:{line:4,column:36070},end:{line:4,column:36074}},"2216":{start:{line:4,column:36084},end:{line:4,column:36259}},"2217":{start:{line:4,column:36097},end:{line:4,column:36249}},"2218":{start:{line:4,column:36281},end:{line:4,column:36448}},"2219":{start:{line:4,column:36323},end:{line:4,column:36448}},"2220":{start:{line:4,column:36327},end:{line:4,column:36440}},"2221":{start:{line:4,column:36398},end:{line:4,column:36399}},"2222":{start:{line:4,column:36416},end:{line:4,column:36417}},"2223":{start:{line:4,column:36437},end:{line:4,column:36438}},"2224":{start:{line:4,column:36448},end:{line:4,column:36457}},"2225":{start:{line:4,column:36473},end:{line:4,column:36507}},"2226":{start:{line:4,column:36515},end:{line:4,column:36736}},"2227":{start:{line:4,column:36574},end:{line:4,column:36618}},"2228":{start:{line:4,column:36630},end:{line:4,column:36734}},"2229":{start:{line:4,column:36752},end:{line:4,column:36816}},"2230":{start:{line:4,column:36840},end:{line:4,column:36845}},"2231":{start:{line:4,column:36846},end:{line:4,column:36970}},"2232":{start:{line:4,column:36865},end:{line:4,column:36906}},"2233":{start:{line:4,column:36897},end:{line:4,column:36906}},"2234":{start:{line:4,column:36906},end:{line:4,column:36969}},"2235":{start:{line:4,column:36970},end:{line:4,column:36982}},"2236":{start:{line:4,column:36998},end:{line:4,column:37043}},"2237":{start:{line:4,column:37051},end:{line:4,column:37110}},"2238":{start:{line:4,column:37126},end:{line:4,column:37170}},"2239":{start:{line:4,column:37188},end:{line:4,column:37210}},"2240":{start:{line:4,column:37230},end:{line:4,column:37245}},"2241":{start:{line:4,column:37265},end:{line:4,column:37292}},"2242":{start:{line:4,column:37316},end:{line:4,column:37339}},"2243":{start:{line:4,column:37359},end:{line:4,column:37377}},"2244":{start:{line:4,column:37401},end:{line:4,column:37433}},"2245":{start:{line:4,column:37455},end:{line:4,column:37480}},"2246":{start:{line:4,column:37500},end:{line:4,column:37527}},"2247":{start:{line:4,column:37547},end:{line:4,column:37610}},"2248":{start:{line:4,column:37668},end:{line:4,column:37669}},"2249":{start:{line:4,column:37670},end:{line:4,column:37729}},"2250":{start:{line:4,column:37737},end:{line:4,column:37902}},"2251":{start:{line:4,column:37750},end:{line:4,column:37892}},"2252":{start:{line:4,column:37924},end:{line:4,column:37928}},"2253":{start:{line:4,column:37929},end:{line:4,column:37990}},"2254":{start:{line:4,column:38012},end:{line:4,column:38016}},"2255":{start:{line:4,column:38017},end:{line:4,column:38067}},"2256":{start:{line:4,column:38022},end:{line:4,column:38067}},"2257":{start:{line:4,column:38067},end:{line:4,column:38107}},"2258":{start:{line:4,column:38090},end:{line:4,column:38107}},"2259":{start:{line:4,column:38107},end:{line:4,column:38126}},"2260":{start:{line:4,column:38134},end:{line:4,column:38186}},"2261":{start:{line:4,column:38190},end:{line:4,column:38223}},"2262":{start:{line:4,column:38241},end:{line:4,column:38329}},"2263":{start:{line:4,column:38349},end:{line:4,column:38366}},"2264":{start:{line:4,column:38387},end:{line:4,column:38390}},"2265":{start:{line:4,column:38391},end:{line:4,column:38416}},"2266":{start:{line:4,column:38432},end:{line:4,column:38466}},"2267":{start:{line:4,column:38492},end:{line:4,column:38500}},"2268":{start:{line:4,column:38501},end:{line:4,column:38646}},"2269":{start:{line:4,column:38515},end:{line:4,column:38529}},"2270":{start:{line:4,column:38530},end:{line:4,column:38549}},"2271":{start:{line:4,column:38540},end:{line:4,column:38549}},"2272":{start:{line:4,column:38549},end:{line:4,column:38640}},"2273":{start:{line:4,column:38588},end:{line:4,column:38596}},"2274":{start:{line:4,column:38597},end:{line:4,column:38639}},"2275":{start:{line:4,column:38631},end:{line:4,column:38639}},"2276":{start:{line:4,column:38640},end:{line:4,column:38645}},"2277":{start:{line:4,column:38654},end:{line:4,column:38667}},"2278":{start:{line:4,column:38695},end:{line:4,column:38696}},"2279":{start:{line:4,column:38697},end:{line:4,column:38832}},"2280":{start:{line:4,column:38703},end:{line:4,column:38808}},"2281":{start:{line:4,column:38747},end:{line:4,column:38808}},"2282":{start:{line:4,column:38800},end:{line:4,column:38808}},"2283":{start:{line:4,column:38814},end:{line:4,column:38832}},"2284":{start:{line:4,column:38823},end:{line:4,column:38832}},"2285":{start:{line:4,column:38832},end:{line:4,column:38941}},"2286":{start:{line:4,column:38864},end:{line:4,column:38940}},"2287":{start:{line:4,column:38909},end:{line:4,column:38940}},"2288":{start:{line:4,column:38932},end:{line:4,column:38940}},"2289":{start:{line:4,column:38941},end:{line:4,column:38949}},"2290":{start:{line:4,column:38965},end:{line:4,column:38996}},"2291":{start:{line:4,column:39022},end:{line:4,column:39047}},"2292":{start:{line:4,column:39048},end:{line:4,column:39060}},"2293":{start:{line:4,column:39086},end:{line:4,column:39087}},"2294":{start:{line:4,column:39090},end:{line:4,column:39097}},"2295":{start:{line:4,column:39100},end:{line:4,column:39116}},"2296":{start:{line:4,column:39119},end:{line:4,column:39121}},"2297":{start:{line:4,column:39122},end:{line:4,column:39582}},"2298":{start:{line:4,column:39132},end:{line:4,column:39133}},"2299":{start:{line:4,column:39156},end:{line:4,column:39160}},"2300":{start:{line:4,column:39161},end:{line:4,column:39258}},"2301":{start:{line:4,column:39184},end:{line:4,column:39215}},"2302":{start:{line:4,column:39206},end:{line:4,column:39215}},"2303":{start:{line:4,column:39215},end:{line:4,column:39236}},"2304":{start:{line:4,column:39227},end:{line:4,column:39236}},"2305":{start:{line:4,column:39236},end:{line:4,column:39249}},"2306":{start:{line:4,column:39249},end:{line:4,column:39257}},"2307":{start:{line:4,column:39258},end:{line:4,column:39581}},"2308":{start:{line:4,column:39264},end:{line:4,column:39581}},"2309":{start:{line:4,column:39272},end:{line:4,column:39348}},"2310":{start:{line:4,column:39325},end:{line:4,column:39343}},"2311":{start:{line:4,column:39334},end:{line:4,column:39343}},"2312":{start:{line:4,column:39343},end:{line:4,column:39347}},"2313":{start:{line:4,column:39354},end:{line:4,column:39581}},"2314":{start:{line:4,column:39362},end:{line:4,column:39412}},"2315":{start:{line:4,column:39389},end:{line:4,column:39407}},"2316":{start:{line:4,column:39398},end:{line:4,column:39407}},"2317":{start:{line:4,column:39407},end:{line:4,column:39411}},"2318":{start:{line:4,column:39424},end:{line:4,column:39430}},"2319":{start:{line:4,column:39433},end:{line:4,column:39448}},"2320":{start:{line:4,column:39449},end:{line:4,column:39492}},"2321":{start:{line:4,column:39460},end:{line:4,column:39478}},"2322":{start:{line:4,column:39469},end:{line:4,column:39478}},"2323":{start:{line:4,column:39478},end:{line:4,column:39483}},"2324":{start:{line:4,column:39483},end:{line:4,column:39491}},"2325":{start:{line:4,column:39492},end:{line:4,column:39580}},"2326":{start:{line:4,column:39509},end:{line:4,column:39579}},"2327":{start:{line:4,column:39556},end:{line:4,column:39574}},"2328":{start:{line:4,column:39565},end:{line:4,column:39574}},"2329":{start:{line:4,column:39574},end:{line:4,column:39578}},"2330":{start:{line:4,column:39582},end:{line:4,column:39597}},"2331":{start:{line:4,column:39613},end:{line:4,column:39628}},"2332":{start:{line:4,column:39650},end:{line:4,column:39671}},"2333":{start:{line:4,column:39662},end:{line:4,column:39671}},"2334":{start:{line:4,column:39677},end:{line:4,column:39678}},"2335":{start:{line:4,column:39679},end:{line:4,column:39926}},"2336":{start:{line:4,column:39695},end:{line:4,column:39697}},"2337":{start:{line:4,column:39698},end:{line:4,column:39898}},"2338":{start:{line:4,column:39722},end:{line:4,column:39726}},"2339":{start:{line:4,column:39727},end:{line:4,column:39745}},"2340":{start:{line:4,column:39736},end:{line:4,column:39745}},"2341":{start:{line:4,column:39745},end:{line:4,column:39889}},"2342":{start:{line:4,column:39761},end:{line:4,column:39766}},"2343":{start:{line:4,column:39771},end:{line:4,column:39889}},"2344":{start:{line:4,column:39794},end:{line:4,column:39800}},"2345":{start:{line:4,column:39801},end:{line:4,column:39835}},"2346":{start:{line:4,column:39826},end:{line:4,column:39835}},"2347":{start:{line:4,column:39835},end:{line:4,column:39843}},"2348":{start:{line:4,column:39849},end:{line:4,column:39864}},"2349":{start:{line:4,column:39858},end:{line:4,column:39864}},"2350":{start:{line:4,column:39864},end:{line:4,column:39888}},"2351":{start:{line:4,column:39874},end:{line:4,column:39879}},"2352":{start:{line:4,column:39879},end:{line:4,column:39887}},"2353":{start:{line:4,column:39889},end:{line:4,column:39897}},"2354":{start:{line:4,column:39898},end:{line:4,column:39906}},"2355":{start:{line:4,column:39912},end:{line:4,column:39926}},"2356":{start:{line:4,column:39949},end:{line:4,column:40001}},"2357":{start:{line:4,column:39959},end:{line:4,column:39960}},"2358":{start:{line:4,column:39976},end:{line:4,column:40001}},"2359":{start:{line:4,column:39992},end:{line:4,column:40001}},"2360":{start:{line:4,column:40001},end:{line:4,column:40009}},"2361":{start:{line:4,column:40031},end:{line:4,column:40038}},"2362":{start:{line:4,column:40039},end:{line:4,column:40097}},"2363":{start:{line:4,column:40057},end:{line:4,column:40069}},"2364":{start:{line:4,column:40070},end:{line:4,column:40096}},"2365":{start:{line:4,column:40083},end:{line:4,column:40096}},"2366":{start:{line:4,column:40097},end:{line:4,column:40108}},"2367":{start:{line:4,column:40124},end:{line:4,column:40181}},"2368":{start:{line:4,column:40134},end:{line:4,column:40135}},"2369":{start:{line:4,column:40158},end:{line:4,column:40162}},"2370":{start:{line:4,column:40163},end:{line:4,column:40180}},"2371":{start:{line:4,column:40172},end:{line:4,column:40180}},"2372":{start:{line:4,column:40181},end:{line:4,column:40196}},"2373":{start:{line:4,column:40220},end:{line:4,column:40232}},"2374":{start:{line:4,column:40233},end:{line:4,column:40326}},"2375":{start:{line:4,column:40241},end:{line:4,column:40326}},"2376":{start:{line:4,column:40268},end:{line:4,column:40272}},"2377":{start:{line:4,column:40273},end:{line:4,column:40304}},"2378":{start:{line:4,column:40295},end:{line:4,column:40304}},"2379":{start:{line:4,column:40304},end:{line:4,column:40322}},"2380":{start:{line:4,column:40313},end:{line:4,column:40322}},"2381":{start:{line:4,column:40322},end:{line:4,column:40325}},"2382":{start:{line:4,column:40326},end:{line:4,column:40334}},"2383":{start:{line:4,column:40352},end:{line:4,column:40480}},"2384":{start:{line:4,column:40354},end:{line:4,column:40480}},"2385":{start:{line:4,column:40364},end:{line:4,column:40365}},"2386":{start:{line:4,column:40388},end:{line:4,column:40392}},"2387":{start:{line:4,column:40393},end:{line:4,column:40479}},"2388":{start:{line:4,column:40417},end:{line:4,column:40470}},"2389":{start:{line:4,column:40427},end:{line:4,column:40428}},"2390":{start:{line:4,column:40444},end:{line:4,column:40470}},"2391":{start:{line:4,column:40459},end:{line:4,column:40470}},"2392":{start:{line:4,column:40470},end:{line:4,column:40478}},"2393":{start:{line:4,column:40480},end:{line:4,column:40488}},"2394":{start:{line:4,column:40506},end:{line:4,column:40537}},"2395":{start:{line:4,column:40559},end:{line:4,column:40563}},"2396":{start:{line:4,column:40566},end:{line:4,column:40567}},"2397":{start:{line:4,column:40570},end:{line:4,column:40571}},"2398":{start:{line:4,column:40574},end:{line:4,column:40576}},"2399":{start:{line:4,column:40579},end:{line:4,column:40581}},"2400":{start:{line:4,column:40582},end:{line:4,column:40787}},"2401":{start:{line:4,column:40606},end:{line:4,column:40610}},"2402":{start:{line:4,column:40611},end:{line:4,column:40783}},"2403":{start:{line:4,column:40633},end:{line:4,column:40728}},"2404":{start:{line:4,column:40647},end:{line:4,column:40653}},"2405":{start:{line:4,column:40654},end:{line:4,column:40693}},"2406":{start:{line:4,column:40699},end:{line:4,column:40728}},"2407":{start:{line:4,column:40733},end:{line:4,column:40783}},"2408":{start:{line:4,column:40783},end:{line:4,column:40786}},"2409":{start:{line:4,column:40787},end:{line:4,column:40816}},"2410":{start:{line:4,column:40832},end:{line:4,column:40858}},"2411":{start:{line:4,column:40880},end:{line:4,column:40882}},"2412":{start:{line:4,column:40885},end:{line:4,column:40887}},"2413":{start:{line:4,column:40890},end:{line:4,column:40891}},"2414":{start:{line:4,column:40894},end:{line:4,column:40895}},"2415":{start:{line:4,column:40896},end:{line:4,column:41024}},"2416":{start:{line:4,column:40920},end:{line:4,column:40924}},"2417":{start:{line:4,column:40925},end:{line:4,column:41020}},"2418":{start:{line:4,column:40947},end:{line:4,column:40995}},"2419":{start:{line:4,column:41000},end:{line:4,column:41016}},"2420":{start:{line:4,column:41010},end:{line:4,column:41016}},"2421":{start:{line:4,column:41016},end:{line:4,column:41019}},"2422":{start:{line:4,column:41020},end:{line:4,column:41023}},"2423":{start:{line:4,column:41024},end:{line:4,column:41057}},"2424":{start:{line:4,column:41064},end:{line:4,column:41066}},"2425":{start:{line:4,column:41108},end:{line:4,column:41111}},"2426":{start:{line:4,column:41114},end:{line:4,column:41117}},"2427":{start:{line:4,column:41120},end:{line:4,column:41127}},"2428":{start:{line:4,column:41130},end:{line:4,column:41156}},"2429":{start:{line:4,column:41157},end:{line:4,column:41749}},"2430":{start:{line:4,column:41773},end:{line:4,column:41775}},"2431":{start:{line:4,column:41776},end:{line:4,column:41815}},"2432":{start:{line:4,column:41786},end:{line:4,column:41787}},"2433":{start:{line:4,column:41796},end:{line:4,column:41815}},"2434":{start:{line:4,column:41815},end:{line:4,column:41823}},"2435":{start:{line:4,column:41845},end:{line:4,column:41852}},"2436":{start:{line:4,column:41853},end:{line:4,column:42001}},"2437":{start:{line:4,column:42043},end:{line:4,column:42062}},"2438":{start:{line:4,column:42063},end:{line:4,column:42281}},"2439":{start:{line:4,column:42307},end:{line:4,column:42314}},"2440":{start:{line:4,column:42317},end:{line:4,column:42322}},"2441":{start:{line:4,column:42325},end:{line:4,column:42346}},"2442":{start:{line:4,column:42349},end:{line:4,column:42419}},"2443":{start:{line:4,column:42420},end:{line:4,column:42439}},"2444":{start:{line:4,column:42461},end:{line:4,column:42463}},"2445":{start:{line:4,column:42464},end:{line:4,column:42506}},"2446":{start:{line:4,column:42528},end:{line:4,column:42546}},"2447":{start:{line:4,column:42537},end:{line:4,column:42546}},"2448":{start:{line:4,column:42552},end:{line:4,column:42560}},"2449":{start:{line:4,column:42561},end:{line:4,column:42629}},"2450":{start:{line:4,column:42571},end:{line:4,column:42572}},"2451":{start:{line:4,column:42581},end:{line:4,column:42629}},"2452":{start:{line:4,column:42629},end:{line:4,column:42637}},"2453":{start:{line:4,column:42655},end:{line:4,column:42697}},"2454":{start:{line:4,column:42715},end:{line:4,column:42736}},"2455":{start:{line:4,column:42758},end:{line:4,column:42877}},"2456":{start:{line:4,column:42764},end:{line:4,column:42877}},"2457":{start:{line:4,column:42787},end:{line:4,column:42807}},"2458":{start:{line:4,column:42808},end:{line:4,column:42827}},"2459":{start:{line:4,column:42839},end:{line:4,column:42854}},"2460":{start:{line:4,column:42855},end:{line:4,column:42876}},"2461":{start:{line:4,column:42877},end:{line:4,column:42882}},"2462":{start:{line:4,column:42890},end:{line:4,column:43036}},"2463":{start:{line:4,column:42903},end:{line:4,column:43026}},"2464":{start:{line:4,column:43064},end:{line:4,column:43071}},"2465":{start:{line:4,column:43072},end:{line:4,column:43285}},"2466":{start:{line:4,column:43087},end:{line:4,column:43098}},"2467":{start:{line:4,column:43101},end:{line:4,column:43105}},"2468":{start:{line:4,column:43106},end:{line:4,column:43271}},"2469":{start:{line:4,column:43280},end:{line:4,column:43284}},"2470":{start:{line:4,column:43293},end:{line:4,column:43380}},"2471":{start:{line:4,column:43306},end:{line:4,column:43370}},"2472":{start:{line:4,column:43401},end:{line:4,column:43415}},"2473":{start:{line:4,column:43423},end:{line:4,column:43503}},"2474":{start:{line:4,column:43511},end:{line:4,column:43522}},"2475":{start:{line:4,column:43526},end:{line:4,column:43537}},"2476":{start:{line:4,column:43561},end:{line:4,column:43570}},"2477":{start:{line:4,column:43571},end:{line:4,column:43598}},"2478":{start:{line:4,column:43591},end:{line:4,column:43598}},"2479":{start:{line:4,column:43604},end:{line:4,column:43616}},"2480":{start:{line:4,column:43619},end:{line:4,column:43636}},"2481":{start:{line:4,column:43637},end:{line:4,column:43936}},"2482":{start:{line:4,column:43647},end:{line:4,column:43657}},"2483":{start:{line:4,column:43674},end:{line:4,column:43678}},"2484":{start:{line:4,column:43681},end:{line:4,column:43693}},"2485":{start:{line:4,column:43694},end:{line:4,column:43935}},"2486":{start:{line:4,column:43960},end:{line:4,column:43969}},"2487":{start:{line:4,column:43970},end:{line:4,column:44010}},"2488":{start:{line:4,column:44018},end:{line:4,column:44025}},"2489":{start:{line:4,column:44029},end:{line:4,column:44148}},"2490":{start:{line:4,column:44042},end:{line:4,column:44138}},"2491":{start:{line:4,column:44152},end:{line:4,column:44161}},"2492":{start:{line:4,column:44165},end:{line:4,column:44172}},"2493":{start:{line:4,column:44188},end:{line:4,column:44273}},"2494":{start:{line:4,column:44281},end:{line:4,column:44415}},"2495":{start:{line:4,column:44300},end:{line:4,column:44304}},"2496":{start:{line:4,column:44315},end:{line:4,column:44335}},"2497":{start:{line:4,column:44354},end:{line:4,column:44402}},"2498":{start:{line:4,column:44395},end:{line:4,column:44400}},"2499":{start:{line:4,column:44403},end:{line:4,column:44411}},"2500":{start:{line:4,column:44419},end:{line:4,column:44428}},"2501":{start:{line:4,column:44432},end:{line:4,column:45787}},"2502":{start:{line:4,column:44453},end:{line:4,column:44458}},"2503":{start:{line:4,column:44469},end:{line:4,column:44474}},"2504":{start:{line:4,column:44488},end:{line:4,column:44507}},"2505":{start:{line:4,column:44518},end:{line:4,column:44525}},"2506":{start:{line:4,column:44548},end:{line:4,column:44555}},"2507":{start:{line:4,column:44566},end:{line:4,column:44568}},"2508":{start:{line:4,column:44583},end:{line:4,column:44602}},"2509":{start:{line:4,column:44619},end:{line:4,column:44640}},"2510":{start:{line:4,column:44641},end:{line:4,column:44689}},"2511":{start:{line:4,column:44689},end:{line:4,column:44974}},"2512":{start:{line:4,column:44705},end:{line:4,column:44974}},"2513":{start:{line:4,column:44733},end:{line:4,column:44974}},"2514":{start:{line:4,column:44773},end:{line:4,column:44974}},"2515":{start:{line:4,column:44777},end:{line:4,column:44906}},"2516":{start:{line:4,column:44828},end:{line:4,column:44905}},"2517":{start:{line:4,column:44855},end:{line:4,column:44865}},"2518":{start:{line:4,column:44866},end:{line:4,column:44892}},"2519":{start:{line:4,column:44916},end:{line:4,column:44973}},"2520":{start:{line:4,column:44974},end:{line:4,column:44992}},"2521":{start:{line:4,column:44992},end:{line:4,column:45080}},"2522":{start:{line:4,column:45020},end:{line:4,column:45080}},"2523":{start:{line:4,column:45080},end:{line:4,column:45142}},"2524":{start:{line:4,column:45120},end:{line:4,column:45142}},"2525":{start:{line:4,column:45142},end:{line:4,column:45264}},"2526":{start:{line:4,column:45289},end:{line:4,column:45290}},"2527":{start:{line:4,column:45291},end:{line:4,column:45410}},"2528":{start:{line:4,column:45426},end:{line:4,column:45472}},"2529":{start:{line:4,column:45487},end:{line:4,column:45648}},"2530":{start:{line:4,column:45665},end:{line:4,column:45707}},"2531":{start:{line:4,column:45726},end:{line:4,column:45774}},"2532":{start:{line:4,column:45767},end:{line:4,column:45772}},"2533":{start:{line:4,column:45775},end:{line:4,column:45783}},"2534":{start:{line:4,column:45791},end:{line:4,column:46283}},"2535":{start:{line:4,column:45846},end:{line:4,column:45848}},"2536":{start:{line:4,column:45864},end:{line:4,column:45870}},"2537":{start:{line:4,column:45921},end:{line:4,column:46043}},"2538":{start:{line:4,column:46028},end:{line:4,column:46042}},"2539":{start:{line:4,column:46055},end:{line:4,column:46152}},"2540":{start:{line:4,column:46163},end:{line:4,column:46219}},"2541":{start:{line:4,column:46225},end:{line:4,column:46240}},"2542":{start:{line:4,column:46241},end:{line:4,column:46281}},"2543":{start:{line:4,column:46271},end:{line:4,column:46279}},"2544":{start:{line:4,column:46307},end:{line:4,column:46325}},"2545":{start:{line:4,column:46326},end:{line:4,column:46369}},"2546":{start:{line:4,column:46385},end:{line:4,column:46484}},"2547":{start:{line:4,column:46512},end:{line:4,column:46521}},"2548":{start:{line:4,column:46522},end:{line:4,column:46541}},"2549":{start:{line:4,column:46547},end:{line:4,column:46575}},"2550":{start:{line:4,column:46578},end:{line:4,column:46614}},"2551":{start:{line:4,column:46617},end:{line:4,column:46645}},"2552":{start:{line:4,column:46648},end:{line:4,column:46698}},"2553":{start:{line:4,column:46699},end:{line:4,column:46726}},"2554":{start:{line:4,column:46734},end:{line:4,column:46820}},"2555":{start:{line:4,column:46757},end:{line:4,column:46817}},"2556":{start:{line:4,column:46846},end:{line:4,column:46855}},"2557":{start:{line:4,column:46856},end:{line:4,column:47002}},"2558":{start:{line:4,column:46876},end:{line:4,column:46944}},"2559":{start:{line:4,column:46891},end:{line:4,column:46944}},"2560":{start:{line:4,column:46949},end:{line:4,column:47002}},"2561":{start:{line:4,column:47002},end:{line:4,column:47029}},"2562":{start:{line:4,column:47053},end:{line:4,column:47062}},"2563":{start:{line:4,column:47063},end:{line:4,column:47189}},"2564":{start:{line:4,column:47095},end:{line:4,column:47154}},"2565":{start:{line:4,column:47136},end:{line:4,column:47154}},"2566":{start:{line:4,column:47154},end:{line:4,column:47188}},"2567":{start:{line:4,column:47207},end:{line:4,column:47242}},"2568":{start:{line:4,column:47224},end:{line:4,column:47242}},"2569":{start:{line:4,column:47270},end:{line:4,column:47284}},"2570":{start:{line:4,column:47285},end:{line:4,column:47321}},"2571":{start:{line:4,column:47351},end:{line:4,column:47720}},"2572":{start:{line:4,column:47371},end:{line:4,column:47373}},"2573":{start:{line:4,column:47374},end:{line:4,column:47406}},"2574":{start:{line:4,column:47412},end:{line:4,column:47417}},"2575":{start:{line:4,column:47418},end:{line:4,column:47719}},"2576":{start:{line:4,column:47604},end:{line:4,column:47638}},"2577":{start:{line:4,column:47618},end:{line:4,column:47631}},"2578":{start:{line:4,column:47631},end:{line:4,column:47637}},"2579":{start:{line:4,column:47638},end:{line:4,column:47649}},"2580":{start:{line:4,column:47674},end:{line:4,column:47690}},"2581":{start:{line:4,column:47738},end:{line:4,column:47766}},"2582":{start:{line:4,column:47792},end:{line:4,column:47822}},"2583":{start:{line:4,column:47840},end:{line:4,column:47906}},"2584":{start:{line:4,column:47928},end:{line:4,column:47933}},"2585":{start:{line:4,column:47934},end:{line:4,column:47958}},"2586":{start:{line:4,column:47940},end:{line:4,column:47958}},"2587":{start:{line:4,column:47958},end:{line:4,column:48124}},"2588":{start:{line:4,column:47973},end:{line:4,column:47977}},"2589":{start:{line:4,column:47978},end:{line:4,column:48020}},"2590":{start:{line:4,column:47987},end:{line:4,column:47995}},"2591":{start:{line:4,column:48006},end:{line:4,column:48010}},"2592":{start:{line:4,column:48011},end:{line:4,column:48019}},"2593":{start:{line:4,column:48020},end:{line:4,column:48120}},"2594":{start:{line:4,column:48027},end:{line:4,column:48075}},"2595":{start:{line:4,column:48050},end:{line:4,column:48075}},"2596":{start:{line:4,column:48075},end:{line:4,column:48119}},"2597":{start:{line:4,column:48120},end:{line:4,column:48123}},"2598":{start:{line:4,column:48148},end:{line:4,column:48153}},"2599":{start:{line:4,column:48156},end:{line:4,column:48168}},"2600":{start:{line:4,column:48169},end:{line:4,column:48182}},"2601":{start:{line:4,column:48200},end:{line:4,column:48216}},"2602":{start:{line:4,column:48209},end:{line:4,column:48216}},"2603":{start:{line:4,column:48222},end:{line:4,column:48226}},"2604":{start:{line:4,column:48227},end:{line:4,column:48269}},"2605":{start:{line:4,column:48287},end:{line:4,column:48303}},"2606":{start:{line:4,column:48296},end:{line:4,column:48303}},"2607":{start:{line:4,column:48309},end:{line:4,column:48316}},"2608":{start:{line:4,column:48317},end:{line:4,column:48515}},"2609":{start:{line:4,column:48321},end:{line:4,column:48405}},"2610":{start:{line:4,column:48411},end:{line:4,column:48416}},"2611":{start:{line:4,column:48417},end:{line:4,column:48496}},"2612":{start:{line:4,column:48440},end:{line:4,column:48458}},"2613":{start:{line:4,column:48464},end:{line:4,column:48469}},"2614":{start:{line:4,column:48470},end:{line:4,column:48495}},"2615":{start:{line:4,column:48496},end:{line:4,column:48501}},"2616":{start:{line:4,column:48510},end:{line:4,column:48514}},"2617":{start:{line:4,column:48543},end:{line:4,column:48550}},"2618":{start:{line:4,column:48551},end:{line:4,column:48613}},"2619":{start:{line:4,column:48600},end:{line:4,column:48613}},"2620":{start:{line:4,column:48613},end:{line:4,column:48908}},"2621":{start:{line:4,column:48640},end:{line:4,column:48904}},"2622":{start:{line:4,column:48680},end:{line:4,column:48700}},"2623":{start:{line:4,column:48703},end:{line:4,column:48705}},"2624":{start:{line:4,column:48706},end:{line:4,column:48834}},"2625":{start:{line:4,column:48712},end:{line:4,column:48799}},"2626":{start:{line:4,column:48722},end:{line:4,column:48723}},"2627":{start:{line:4,column:48757},end:{line:4,column:48772}},"2628":{start:{line:4,column:48785},end:{line:4,column:48788}},"2629":{start:{line:4,column:48789},end:{line:4,column:48798}},"2630":{start:{line:4,column:48799},end:{line:4,column:48833}},"2631":{start:{line:4,column:48834},end:{line:4,column:48873}},"2632":{start:{line:4,column:48879},end:{line:4,column:48904}},"2633":{start:{line:4,column:48932},end:{line:4,column:48946}},"2634":{start:{line:4,column:48947},end:{line:4,column:49018}},"2635":{start:{line:4,column:48953},end:{line:4,column:49011}},"2636":{start:{line:4,column:48965},end:{line:4,column:49008}},"2637":{start:{line:4,column:49011},end:{line:4,column:49017}},"2638":{start:{line:4,column:49018},end:{line:4,column:49023}},"2639":{start:{line:4,column:49047},end:{line:4,column:49056}},"2640":{start:{line:4,column:49059},end:{line:4,column:49064}},"2641":{start:{line:4,column:49065},end:{line:4,column:49217}},"2642":{start:{line:4,column:49077},end:{line:4,column:49217}},"2643":{start:{line:4,column:49087},end:{line:4,column:49088}},"2644":{start:{line:4,column:49107},end:{line:4,column:49217}},"2645":{start:{line:4,column:49139},end:{line:4,column:49145}},"2646":{start:{line:4,column:49146},end:{line:4,column:49182}},"2647":{start:{line:4,column:49194},end:{line:4,column:49203}},"2648":{start:{line:4,column:49204},end:{line:4,column:49216}},"2649":{start:{line:4,column:49217},end:{line:4,column:49240}},"2650":{start:{line:4,column:49246},end:{line:4,column:49251}},"2651":{start:{line:4,column:49252},end:{line:4,column:49320}},"2652":{start:{line:4,column:49265},end:{line:4,column:49276}},"2653":{start:{line:4,column:49276},end:{line:4,column:49319}},"2654":{start:{line:4,column:49286},end:{line:4,column:49287}},"2655":{start:{line:4,column:49310},end:{line:4,column:49314}},"2656":{start:{line:4,column:49315},end:{line:4,column:49318}},"2657":{start:{line:4,column:49326},end:{line:4,column:49331}},"2658":{start:{line:4,column:49332},end:{line:4,column:49383}},"2659":{start:{line:4,column:49345},end:{line:4,column:49356}},"2660":{start:{line:4,column:49356},end:{line:4,column:49382}},"2661":{start:{line:4,column:49371},end:{line:4,column:49382}},"2662":{start:{line:4,column:49407},end:{line:4,column:49756}},"2663":{start:{line:4,column:49444},end:{line:4,column:49756}},"2664":{start:{line:4,column:49454},end:{line:4,column:49455}},"2665":{start:{line:4,column:49479},end:{line:4,column:49486}},"2666":{start:{line:4,column:49487},end:{line:4,column:49755}},"2667":{start:{line:4,column:49516},end:{line:4,column:49522}},"2668":{start:{line:4,column:49523},end:{line:4,column:49754}},"2669":{start:{line:4,column:49543},end:{line:4,column:49672}},"2670":{start:{line:4,column:49553},end:{line:4,column:49554}},"2671":{start:{line:4,column:49578},end:{line:4,column:49585}},"2672":{start:{line:4,column:49588},end:{line:4,column:49594}},"2673":{start:{line:4,column:49595},end:{line:4,column:49623}},"2674":{start:{line:4,column:49623},end:{line:4,column:49671}},"2675":{start:{line:4,column:49627},end:{line:4,column:49636}},"2676":{start:{line:4,column:49645},end:{line:4,column:49670}},"2677":{start:{line:4,column:49677},end:{line:4,column:49705}},"2678":{start:{line:4,column:49705},end:{line:4,column:49753}},"2679":{start:{line:4,column:49709},end:{line:4,column:49718}},"2680":{start:{line:4,column:49727},end:{line:4,column:49752}},"2681":{start:{line:4,column:49776},end:{line:4,column:49799}},"2682":{start:{line:4,column:49825},end:{line:4,column:49826}},"2683":{start:{line:4,column:49827},end:{line:4,column:49869}},"2684":{start:{line:4,column:49854},end:{line:4,column:49869}},"2685":{start:{line:4,column:49869},end:{line:4,column:49894}},"2686":{start:{line:4,column:49881},end:{line:4,column:49894}},"2687":{start:{line:4,column:49894},end:{line:4,column:50012}},"2688":{start:{line:4,column:49925},end:{line:4,column:49967}},"2689":{start:{line:4,column:49968},end:{line:4,column:50011}},"2690":{start:{line:4,column:50000},end:{line:4,column:50011}},"2691":{start:{line:4,column:50012},end:{line:4,column:50026}},"2692":{start:{line:4,column:50046},end:{line:4,column:50062}},"2693":{start:{line:4,column:50082},end:{line:4,column:50111}},"2694":{start:{line:4,column:50119},end:{line:4,column:50121}},"2695":{start:{line:4,column:50152},end:{line:4,column:50161}},"2696":{start:{line:4,column:50164},end:{line:4,column:50168}},"2697":{start:{line:4,column:50171},end:{line:4,column:50185}},"2698":{start:{line:4,column:50188},end:{line:4,column:50197}},"2699":{start:{line:4,column:50198},end:{line:4,column:50294}},"2700":{start:{line:4,column:50209},end:{line:4,column:50294}},"2701":{start:{line:4,column:50229},end:{line:4,column:50274}},"2702":{start:{line:4,column:50239},end:{line:4,column:50240}},"2703":{start:{line:4,column:50256},end:{line:4,column:50274}},"2704":{start:{line:4,column:50279},end:{line:4,column:50294}},"2705":{start:{line:4,column:50294},end:{line:4,column:50320}},"2706":{start:{line:4,column:50338},end:{line:4,column:50706}},"2707":{start:{line:4,column:50357},end:{line:4,column:50363}},"2708":{start:{line:4,column:50364},end:{line:4,column:50386}},"2709":{start:{line:4,column:50371},end:{line:4,column:50386}},"2710":{start:{line:4,column:50386},end:{line:4,column:50418}},"2711":{start:{line:4,column:50393},end:{line:4,column:50418}},"2712":{start:{line:4,column:50418},end:{line:4,column:50705}},"2713":{start:{line:4,column:50432},end:{line:4,column:50439}},"2714":{start:{line:4,column:50440},end:{line:4,column:50467}},"2715":{start:{line:4,column:50452},end:{line:4,column:50467}},"2716":{start:{line:4,column:50474},end:{line:4,column:50484}},"2717":{start:{line:4,column:50485},end:{line:4,column:50512}},"2718":{start:{line:4,column:50519},end:{line:4,column:50548}},"2719":{start:{line:4,column:50528},end:{line:4,column:50548}},"2720":{start:{line:4,column:50548},end:{line:4,column:50589}},"2721":{start:{line:4,column:50556},end:{line:4,column:50589}},"2722":{start:{line:4,column:50596},end:{line:4,column:50603}},"2723":{start:{line:4,column:50604},end:{line:4,column:50703}},"2724":{start:{line:4,column:50617},end:{line:4,column:50649}},"2725":{start:{line:4,column:50637},end:{line:4,column:50649}},"2726":{start:{line:4,column:50655},end:{line:4,column:50663}},"2727":{start:{line:4,column:50664},end:{line:4,column:50678}},"2728":{start:{line:4,column:50684},end:{line:4,column:50703}},"2729":{start:{line:4,column:50706},end:{line:4,column:50717}},"2730":{start:{line:4,column:50735},end:{line:4,column:50800}},"2731":{start:{line:4,column:50754},end:{line:4,column:50761}},"2732":{start:{line:4,column:50764},end:{line:4,column:50776}},"2733":{start:{line:4,column:50777},end:{line:4,column:50799}},"2734":{start:{line:4,column:50800},end:{line:4,column:50811}},"2735":{start:{line:4,column:50835},end:{line:4,column:50840}},"2736":{start:{line:4,column:50841},end:{line:4,column:50912}},"2737":{start:{line:4,column:50862},end:{line:4,column:50866}},"2738":{start:{line:4,column:50869},end:{line:4,column:50884}},"2739":{start:{line:4,column:50885},end:{line:4,column:50911}},"2740":{start:{line:4,column:50897},end:{line:4,column:50911}},"2741":{start:{line:4,column:50912},end:{line:4,column:50924}},"2742":{start:{line:4,column:50952},end:{line:4,column:51296}},"2743":{start:{line:4,column:50973},end:{line:4,column:50978}},"2744":{start:{line:4,column:50979},end:{line:4,column:51014}},"2745":{start:{line:4,column:50996},end:{line:4,column:51005}},"2746":{start:{line:4,column:51005},end:{line:4,column:51013}},"2747":{start:{line:4,column:51020},end:{line:4,column:51030}},"2748":{start:{line:4,column:51033},end:{line:4,column:51039}},"2749":{start:{line:4,column:51040},end:{line:4,column:51268}},"2750":{start:{line:4,column:51088},end:{line:4,column:51268}},"2751":{start:{line:4,column:51095},end:{line:4,column:51140}},"2752":{start:{line:4,column:51145},end:{line:4,column:51268}},"2753":{start:{line:4,column:51160},end:{line:4,column:51167}},"2754":{start:{line:4,column:51170},end:{line:4,column:51202}},"2755":{start:{line:4,column:51182},end:{line:4,column:51202}},"2756":{start:{line:4,column:51202},end:{line:4,column:51221}},"2757":{start:{line:4,column:51227},end:{line:4,column:51268}},"2758":{start:{line:4,column:51268},end:{line:4,column:51295}},"2759":{start:{line:4,column:51322},end:{line:4,column:51351}},"2760":{start:{line:4,column:51377},end:{line:4,column:51381}},"2761":{start:{line:4,column:51384},end:{line:4,column:51393}},"2762":{start:{line:4,column:51396},end:{line:4,column:51410}},"2763":{start:{line:4,column:51413},end:{line:4,column:51422}},"2764":{start:{line:4,column:51423},end:{line:4,column:51438}},"2765":{start:{line:4,column:51470},end:{line:4,column:51474}},"2766":{start:{line:4,column:51477},end:{line:4,column:51506}},"2767":{start:{line:4,column:51507},end:{line:4,column:51651}},"2768":{start:{line:4,column:51527},end:{line:4,column:51590}},"2769":{start:{line:4,column:51537},end:{line:4,column:51538}},"2770":{start:{line:4,column:51561},end:{line:4,column:51565}},"2771":{start:{line:4,column:51566},end:{line:4,column:51589}},"2772":{start:{line:4,column:51601},end:{line:4,column:51602}},"2773":{start:{line:4,column:51605},end:{line:4,column:51609}},"2774":{start:{line:4,column:51610},end:{line:4,column:51650}},"2775":{start:{line:4,column:51685},end:{line:4,column:51690}},"2776":{start:{line:4,column:51693},end:{line:4,column:51698}},"2777":{start:{line:4,column:51699},end:{line:4,column:51724}},"2778":{start:{line:4,column:51724},end:{line:4,column:51782}},"2779":{start:{line:4,column:51734},end:{line:4,column:51735}},"2780":{start:{line:4,column:51758},end:{line:4,column:51762}},"2781":{start:{line:4,column:51763},end:{line:4,column:51781}},"2782":{start:{line:4,column:51806},end:{line:4,column:52030}},"2783":{start:{line:4,column:51811},end:{line:4,column:51848}},"2784":{start:{line:4,column:51859},end:{line:4,column:51897}},"2785":{start:{line:4,column:51898},end:{line:4,column:52029}},"2786":{start:{line:4,column:52060},end:{line:4,column:52064}},"2787":{start:{line:4,column:52067},end:{line:4,column:52070}},"2788":{start:{line:4,column:52071},end:{line:4,column:52249}},"2789":{start:{line:4,column:52075},end:{line:4,column:52110}},"2790":{start:{line:4,column:52116},end:{line:4,column:52161}},"2791":{start:{line:4,column:52162},end:{line:4,column:52177}},"2792":{start:{line:4,column:52186},end:{line:4,column:52192}},"2793":{start:{line:4,column:52198},end:{line:4,column:52239}},"2794":{start:{line:4,column:52240},end:{line:4,column:52248}},"2795":{start:{line:4,column:52269},end:{line:4,column:52307}},"2796":{start:{line:4,column:52336},end:{line:4,column:52348}},"2797":{start:{line:4,column:52349},end:{line:4,column:52451}},"2798":{start:{line:4,column:52368},end:{line:4,column:52377}},"2799":{start:{line:4,column:52378},end:{line:4,column:52450}},"2800":{start:{line:4,column:52388},end:{line:4,column:52389}},"2801":{start:{line:4,column:52413},end:{line:4,column:52419}},"2802":{start:{line:4,column:52422},end:{line:4,column:52440}},"2803":{start:{line:4,column:52441},end:{line:4,column:52449}},"2804":{start:{line:4,column:52479},end:{line:4,column:52547}},"2805":{start:{line:4,column:52550},end:{line:4,column:52574}},"2806":{start:{line:4,column:52575},end:{line:4,column:52589}},"2807":{start:{line:4,column:52605},end:{line:4,column:52610}},"2808":{start:{line:4,column:52618},end:{line:4,column:52626}},"2809":{start:{line:4,column:52622},end:{line:4,column:52626}},"2810":{start:{line:4,column:52642},end:{line:4,column:52804}},"2811":{start:{line:4,column:52836},end:{line:4,column:52840}},"2812":{start:{line:4,column:52841},end:{line:4,column:52887}},"2813":{start:{line:4,column:52859},end:{line:4,column:52880}},"2814":{start:{line:4,column:52880},end:{line:4,column:52886}},"2815":{start:{line:4,column:52887},end:{line:4,column:52922}},"2816":{start:{line:4,column:52948},end:{line:4,column:53041}},"2817":{start:{line:4,column:52967},end:{line:4,column:52974}},"2818":{start:{line:4,column:52975},end:{line:4,column:53026}},"2819":{start:{line:4,column:53032},end:{line:4,column:53041}},"2820":{start:{line:4,column:53065},end:{line:4,column:53072}},"2821":{start:{line:4,column:53073},end:{line:4,column:53092}},"2822":{start:{line:4,column:53118},end:{line:4,column:53134}},"2823":{start:{line:4,column:53137},end:{line:4,column:53151}},"2824":{start:{line:4,column:53152},end:{line:4,column:53222}},"2825":{start:{line:4,column:53228},end:{line:4,column:53243}},"2826":{start:{line:4,column:53244},end:{line:4,column:53379}},"2827":{start:{line:4,column:53254},end:{line:4,column:53255}},"2828":{start:{line:4,column:53271},end:{line:4,column:53280}},"2829":{start:{line:4,column:53283},end:{line:4,column:53294}},"2830":{start:{line:4,column:53295},end:{line:4,column:53378}},"2831":{start:{line:4,column:53347},end:{line:4,column:53360}},"2832":{start:{line:4,column:53361},end:{line:4,column:53377}},"2833":{start:{line:4,column:53405},end:{line:4,column:53421}},"2834":{start:{line:4,column:53424},end:{line:4,column:53438}},"2835":{start:{line:4,column:53441},end:{line:4,column:53448}},"2836":{start:{line:4,column:53451},end:{line:4,column:53455}},"2837":{start:{line:4,column:53456},end:{line:4,column:53607}},"2838":{start:{line:4,column:53460},end:{line:4,column:53466}},"2839":{start:{line:4,column:53466},end:{line:4,column:53585}},"2840":{start:{line:4,column:53476},end:{line:4,column:53477}},"2841":{start:{line:4,column:53493},end:{line:4,column:53502}},"2842":{start:{line:4,column:53505},end:{line:4,column:53509}},"2843":{start:{line:4,column:53510},end:{line:4,column:53584}},"2844":{start:{line:4,column:53594},end:{line:4,column:53606}},"2845":{start:{line:4,column:53625},end:{line:4,column:53667}},"2846":{start:{line:4,column:53691},end:{line:4,column:53710}},"2847":{start:{line:4,column:53713},end:{line:4,column:53717}},"2848":{start:{line:4,column:53718},end:{line:4,column:53822}},"2849":{start:{line:4,column:53723},end:{line:4,column:53822}},"2850":{start:{line:4,column:53733},end:{line:4,column:53734}},"2851":{start:{line:4,column:53757},end:{line:4,column:53761}},"2852":{start:{line:4,column:53762},end:{line:4,column:53821}},"2853":{start:{line:4,column:53822},end:{line:4,column:53830}},"2854":{start:{line:4,column:53862},end:{line:4,column:53869}},"2855":{start:{line:4,column:53870},end:{line:4,column:53896}},"2856":{start:{line:4,column:53924},end:{line:4,column:54022}},"2857":{start:{line:4,column:53935},end:{line:4,column:53960}},"2858":{start:{line:4,column:53971},end:{line:4,column:53997}},"2859":{start:{line:4,column:53998},end:{line:4,column:54021}},"2860":{start:{line:4,column:54054},end:{line:4,column:54058}},"2861":{start:{line:4,column:54059},end:{line:4,column:54132}},"2862":{start:{line:4,column:54071},end:{line:4,column:54132}},"2863":{start:{line:4,column:54081},end:{line:4,column:54082}},"2864":{start:{line:4,column:54106},end:{line:4,column:54110}},"2865":{start:{line:4,column:54113},end:{line:4,column:54119}},"2866":{start:{line:4,column:54120},end:{line:4,column:54131}},"2867":{start:{line:4,column:54162},end:{line:4,column:54165}},"2868":{start:{line:4,column:54168},end:{line:4,column:54172}},"2869":{start:{line:4,column:54175},end:{line:4,column:54187}},"2870":{start:{line:4,column:54188},end:{line:4,column:54204}},"2871":{start:{line:4,column:54210},end:{line:4,column:54220}},"2872":{start:{line:4,column:54221},end:{line:4,column:54318}},"2873":{start:{line:4,column:54340},end:{line:4,column:54341}},"2874":{start:{line:4,column:54342},end:{line:4,column:54382}},"2875":{start:{line:4,column:54406},end:{line:4,column:54411}},"2876":{start:{line:4,column:54412},end:{line:4,column:54425}},"2877":{start:{line:4,column:54418},end:{line:4,column:54425}},"2878":{start:{line:4,column:54431},end:{line:4,column:54465}},"2879":{start:{line:4,column:54435},end:{line:4,column:54451}},"2880":{start:{line:4,column:54458},end:{line:4,column:54464}},"2881":{start:{line:4,column:54465},end:{line:4,column:54471}},"2882":{start:{line:4,column:54501},end:{line:4,column:54514}},"2883":{start:{line:4,column:54517},end:{line:4,column:54543}},"2884":{start:{line:4,column:54546},end:{line:4,column:54548}},"2885":{start:{line:4,column:54549},end:{line:4,column:54635}},"2886":{start:{line:4,column:54554},end:{line:4,column:54635}},"2887":{start:{line:4,column:54564},end:{line:4,column:54565}},"2888":{start:{line:4,column:54589},end:{line:4,column:54593}},"2889":{start:{line:4,column:54596},end:{line:4,column:54602}},"2890":{start:{line:4,column:54605},end:{line:4,column:54614}},"2891":{start:{line:4,column:54615},end:{line:4,column:54634}},"2892":{start:{line:4,column:54635},end:{line:4,column:54696}},"2893":{start:{line:4,column:54640},end:{line:4,column:54696}},"2894":{start:{line:4,column:54662},end:{line:4,column:54666}},"2895":{start:{line:4,column:54669},end:{line:4,column:54678}},"2896":{start:{line:4,column:54679},end:{line:4,column:54695}},"2897":{start:{line:4,column:54696},end:{line:4,column:54704}},"2898":{start:{line:4,column:54728},end:{line:4,column:54735}},"2899":{start:{line:4,column:54738},end:{line:4,column:54742}},"2900":{start:{line:4,column:54743},end:{line:4,column:54751}},"2901":{start:{line:4,column:54757},end:{line:4,column:54762}},"2902":{start:{line:4,column:54763},end:{line:4,column:54827}},"2903":{start:{line:4,column:54827},end:{line:4,column:54875}},"2904":{start:{line:4,column:54831},end:{line:4,column:54843}},"2905":{start:{line:4,column:54852},end:{line:4,column:54874}},"2906":{start:{line:4,column:54893},end:{line:4,column:54959}},"2907":{start:{line:4,column:54903},end:{line:4,column:54911}},"2908":{start:{line:4,column:54937},end:{line:4,column:54959}},"2909":{start:{line:4,column:54979},end:{line:4,column:54985}},"2910":{start:{line:4,column:54985},end:{line:4,column:55355}},"2911":{start:{line:4,column:54995},end:{line:4,column:55006}},"2912":{start:{line:4,column:55007},end:{line:4,column:55027}},"2913":{start:{line:4,column:55033},end:{line:4,column:55043}},"2914":{start:{line:4,column:55044},end:{line:4,column:55212}},"2915":{start:{line:4,column:55218},end:{line:4,column:55230}},"2916":{start:{line:4,column:55231},end:{line:4,column:55248}},"2917":{start:{line:4,column:55258},end:{line:4,column:55332}},"2918":{start:{line:4,column:55341},end:{line:4,column:55354}},"2919":{start:{line:4,column:55373},end:{line:4,column:55410}},"2920":{start:{line:4,column:55383},end:{line:4,column:55384}},"2921":{start:{line:4,column:55400},end:{line:4,column:55410}},"2922":{start:{line:4,column:55438},end:{line:4,column:55445}},"2923":{start:{line:4,column:55446},end:{line:4,column:55694}},"2924":{start:{line:4,column:55456},end:{line:4,column:55463}},"2925":{start:{line:4,column:55466},end:{line:4,column:55483}},"2926":{start:{line:4,column:55486},end:{line:4,column:55586}},"2927":{start:{line:4,column:55589},end:{line:4,column:55599}},"2928":{start:{line:4,column:55600},end:{line:4,column:55608}},"2929":{start:{line:4,column:55614},end:{line:4,column:55619}},"2930":{start:{line:4,column:55620},end:{line:4,column:55680}},"2931":{start:{line:4,column:55689},end:{line:4,column:55693}},"2932":{start:{line:4,column:55712},end:{line:4,column:55748}},"2933":{start:{line:4,column:55775},end:{line:4,column:56119}},"2934":{start:{line:4,column:55791},end:{line:4,column:55845}},"2935":{start:{line:4,column:55808},end:{line:4,column:55836}},"2936":{start:{line:4,column:55836},end:{line:4,column:55844}},"2937":{start:{line:4,column:55851},end:{line:4,column:55861}},"2938":{start:{line:4,column:55862},end:{line:4,column:55901}},"2939":{start:{line:4,column:55907},end:{line:4,column:55913}},"2940":{start:{line:4,column:55914},end:{line:4,column:56091}},"2941":{start:{line:4,column:55921},end:{line:4,column:55939}},"2942":{start:{line:4,column:55944},end:{line:4,column:56091}},"2943":{start:{line:4,column:55959},end:{line:4,column:55966}},"2944":{start:{line:4,column:55969},end:{line:4,column:55990}},"2945":{start:{line:4,column:55981},end:{line:4,column:55990}},"2946":{start:{line:4,column:55996},end:{line:4,column:56091}},"2947":{start:{line:4,column:56011},end:{line:4,column:56018}},"2948":{start:{line:4,column:56019},end:{line:4,column:56090}},"2949":{start:{line:4,column:56039},end:{line:4,column:56052}},"2950":{start:{line:4,column:56063},end:{line:4,column:56071}},"2951":{start:{line:4,column:56072},end:{line:4,column:56089}},"2952":{start:{line:4,column:56091},end:{line:4,column:56118}},"2953":{start:{line:4,column:56119},end:{line:4,column:56127}},"2954":{start:{line:4,column:56145},end:{line:4,column:56227}},"2955":{start:{line:4,column:56155},end:{line:4,column:56156}},"2956":{start:{line:4,column:56179},end:{line:4,column:56183}},"2957":{start:{line:4,column:56186},end:{line:4,column:56201}},"2958":{start:{line:4,column:56202},end:{line:4,column:56226}},"2959":{start:{line:4,column:56227},end:{line:4,column:56255}},"2960":{start:{line:4,column:56271},end:{line:4,column:56344}},"2961":{start:{line:4,column:56288},end:{line:4,column:56329}},"2962":{start:{line:4,column:56307},end:{line:4,column:56329}},"2963":{start:{line:4,column:56329},end:{line:4,column:56343}},"2964":{start:{line:4,column:56352},end:{line:4,column:56354}},"2965":{start:{line:4,column:56370},end:{line:4,column:56389}},"2966":{start:{line:4,column:56411},end:{line:4,column:56438}},"2967":{start:{line:4,column:56439},end:{line:4,column:56457}},"2968":{start:{line:4,column:56473},end:{line:4,column:56515}},"2969":{start:{line:4,column:56523},end:{line:4,column:56657}},"2970":{start:{line:4,column:56599},end:{line:4,column:56610}},"2971":{start:{line:4,column:56635},end:{line:4,column:56654}},"2972":{start:{line:4,column:56679},end:{line:4,column:56703}},"2973":{start:{line:4,column:56704},end:{line:4,column:56722}},"2974":{start:{line:4,column:56730},end:{line:4,column:56906}},"2975":{start:{line:4,column:56812},end:{line:4,column:56823}},"2976":{start:{line:4,column:56824},end:{line:4,column:56851}},"2977":{start:{line:4,column:56843},end:{line:4,column:56851}},"2978":{start:{line:4,column:56851},end:{line:4,column:56859}},"2979":{start:{line:4,column:56884},end:{line:4,column:56903}},"2980":{start:{line:4,column:56922},end:{line:4,column:56939}},"2981":{start:{line:4,column:56955},end:{line:4,column:56978}},"2982":{start:{line:4,column:56971},end:{line:4,column:56978}},"2983":{start:{line:4,column:56984},end:{line:4,column:56986}},"2984":{start:{line:4,column:56987},end:{line:4,column:57128}},"2985":{start:{line:4,column:57002},end:{line:4,column:57004}},"2986":{start:{line:4,column:57005},end:{line:4,column:57109}},"2987":{start:{line:4,column:57024},end:{line:4,column:57109}},"2988":{start:{line:4,column:57099},end:{line:4,column:57106}},"2989":{start:{line:4,column:57109},end:{line:4,column:57127}},"2990":{start:{line:4,column:57136},end:{line:4,column:57139}},"2991":{start:{line:4,column:57165},end:{line:4,column:57186}},"2992":{start:{line:4,column:57189},end:{line:4,column:57191}},"2993":{start:{line:4,column:57192},end:{line:4,column:57207}},"2994":{start:{line:4,column:57207},end:{line:4,column:57240}},"2995":{start:{line:4,column:57211},end:{line:4,column:57218}},"2996":{start:{line:4,column:57227},end:{line:4,column:57239}},"2997":{start:{line:4,column:57264},end:{line:4,column:57268}},"2998":{start:{line:4,column:57269},end:{line:4,column:57366}},"2999":{start:{line:4,column:57273},end:{line:4,column:57288}},"3000":{start:{line:4,column:57294},end:{line:4,column:57295}},"3001":{start:{line:4,column:57296},end:{line:4,column:57351}},"3002":{start:{line:4,column:57309},end:{line:4,column:57339}},"3003":{start:{line:4,column:57319},end:{line:4,column:57339}},"3004":{start:{line:4,column:57339},end:{line:4,column:57350}},"3005":{start:{line:4,column:57360},end:{line:4,column:57365}},"3006":{start:{line:4,column:57388},end:{line:4,column:57404}},"3007":{start:{line:4,column:57397},end:{line:4,column:57404}},"3008":{start:{line:4,column:57410},end:{line:4,column:57414}},"3009":{start:{line:4,column:57417},end:{line:4,column:57419}},"3010":{start:{line:4,column:57422},end:{line:4,column:57424}},"3011":{start:{line:4,column:57425},end:{line:4,column:57431}},"3012":{start:{line:4,column:57437},end:{line:4,column:57439}},"3013":{start:{line:4,column:57442},end:{line:4,column:57446}},"3014":{start:{line:4,column:57449},end:{line:4,column:57453}},"3015":{start:{line:4,column:57454},end:{line:4,column:57548}},"3016":{start:{line:4,column:57548},end:{line:4,column:58279}},"3017":{start:{line:4,column:57552},end:{line:4,column:57606}},"3018":{start:{line:4,column:57612},end:{line:4,column:57621}},"3019":{start:{line:4,column:57622},end:{line:4,column:57744}},"3020":{start:{line:4,column:57628},end:{line:4,column:57744}},"3021":{start:{line:4,column:57640},end:{line:4,column:57660}},"3022":{start:{line:4,column:57661},end:{line:4,column:57683}},"3023":{start:{line:4,column:57695},end:{line:4,column:57710}},"3024":{start:{line:4,column:57711},end:{line:4,column:57743}},"3025":{start:{line:4,column:57744},end:{line:4,column:57910}},"3026":{start:{line:4,column:57806},end:{line:4,column:57910}},"3027":{start:{line:4,column:57818},end:{line:4,column:57837}},"3028":{start:{line:4,column:57838},end:{line:4,column:57855}},"3029":{start:{line:4,column:57867},end:{line:4,column:57881}},"3030":{start:{line:4,column:57882},end:{line:4,column:57909}},"3031":{start:{line:4,column:57910},end:{line:4,column:57918}},"3032":{start:{line:4,column:57924},end:{line:4,column:57936}},"3033":{start:{line:4,column:57937},end:{line:4,column:57957}},"3034":{start:{line:4,column:57963},end:{line:4,column:57974}},"3035":{start:{line:4,column:57975},end:{line:4,column:58099}},"3036":{start:{line:4,column:58001},end:{line:4,column:58099}},"3037":{start:{line:4,column:58013},end:{line:4,column:58029}},"3038":{start:{line:4,column:58030},end:{line:4,column:58047}},"3039":{start:{line:4,column:58059},end:{line:4,column:58070}},"3040":{start:{line:4,column:58071},end:{line:4,column:58098}},"3041":{start:{line:4,column:58099},end:{line:4,column:58190}},"3042":{start:{line:4,column:58156},end:{line:4,column:58179}},"3043":{start:{line:4,column:58175},end:{line:4,column:58179}},"3044":{start:{line:4,column:58179},end:{line:4,column:58189}},"3045":{start:{line:4,column:58190},end:{line:4,column:58210}},"3046":{start:{line:4,column:58220},end:{line:4,column:58236}},"3047":{start:{line:4,column:58245},end:{line:4,column:58278}},"3048":{start:{line:4,column:58297},end:{line:4,column:58377}},"3049":{start:{line:4,column:58307},end:{line:4,column:58312}},"3050":{start:{line:4,column:58330},end:{line:4,column:58377}},"3051":{start:{line:4,column:58340},end:{line:4,column:58341}},"3052":{start:{line:4,column:58364},end:{line:4,column:58368}},"3053":{start:{line:4,column:58369},end:{line:4,column:58376}},"3054":{start:{line:4,column:58393},end:{line:4,column:58507}},"3055":{start:{line:4,column:58403},end:{line:4,column:58408}},"3056":{start:{line:4,column:58427},end:{line:4,column:58449}},"3057":{start:{line:4,column:58440},end:{line:4,column:58449}},"3058":{start:{line:4,column:58455},end:{line:4,column:58460}},"3059":{start:{line:4,column:58461},end:{line:4,column:58506}},"3060":{start:{line:4,column:58471},end:{line:4,column:58472}},"3061":{start:{line:4,column:58495},end:{line:4,column:58499}},"3062":{start:{line:4,column:58500},end:{line:4,column:58505}},"3063":{start:{line:4,column:58527},end:{line:4,column:58547}},"3064":{start:{line:4,column:58553},end:{line:4,column:58560}},"3065":{start:{line:4,column:58561},end:{line:4,column:58604}},"3066":{start:{line:4,column:58565},end:{line:4,column:58572}},"3067":{start:{line:4,column:58581},end:{line:4,column:58603}},"3068":{start:{line:4,column:58622},end:{line:4,column:58636}},"3069":{start:{line:4,column:58660},end:{line:4,column:58664}},"3070":{start:{line:4,column:58667},end:{line:4,column:58671}},"3071":{start:{line:4,column:58674},end:{line:4,column:58679}},"3072":{start:{line:4,column:58682},end:{line:4,column:58697}},"3073":{start:{line:4,column:58698},end:{line:4,column:58928}},"3074":{start:{line:4,column:58797},end:{line:4,column:58821}},"3075":{start:{line:4,column:58826},end:{line:4,column:58928}},"3076":{start:{line:4,column:58843},end:{line:4,column:58850}},"3077":{start:{line:4,column:58851},end:{line:4,column:58927}},"3078":{start:{line:4,column:58855},end:{line:4,column:58869}},"3079":{start:{line:4,column:58875},end:{line:4,column:58887}},"3080":{start:{line:4,column:58888},end:{line:4,column:58913}},"3081":{start:{line:4,column:58922},end:{line:4,column:58926}},"3082":{start:{line:4,column:58948},end:{line:4,column:58987}},"3083":{start:{line:4,column:58958},end:{line:4,column:58959}},"3084":{start:{line:4,column:58975},end:{line:4,column:58987}},"3085":{start:{line:4,column:59011},end:{line:4,column:59031}},"3086":{start:{line:4,column:59032},end:{line:4,column:59248}},"3087":{start:{line:4,column:59044},end:{line:4,column:59248}},"3088":{start:{line:4,column:59048},end:{line:4,column:59232}},"3089":{start:{line:4,column:59058},end:{line:4,column:59059}},"3090":{start:{line:4,column:59082},end:{line:4,column:59086}},"3091":{start:{line:4,column:59087},end:{line:4,column:59231}},"3092":{start:{line:4,column:59094},end:{line:4,column:59101}},"3093":{start:{line:4,column:59112},end:{line:4,column:59113}},"3094":{start:{line:4,column:59116},end:{line:4,column:59122}},"3095":{start:{line:4,column:59125},end:{line:4,column:59131}},"3096":{start:{line:4,column:59132},end:{line:4,column:59140}},"3097":{start:{line:4,column:59146},end:{line:4,column:59150}},"3098":{start:{line:4,column:59151},end:{line:4,column:59182}},"3099":{start:{line:4,column:59182},end:{line:4,column:59230}},"3100":{start:{line:4,column:59186},end:{line:4,column:59192}},"3101":{start:{line:4,column:59201},end:{line:4,column:59229}},"3102":{start:{line:4,column:59241},end:{line:4,column:59247}},"3103":{start:{line:4,column:59272},end:{line:4,column:59284}},"3104":{start:{line:4,column:59285},end:{line:4,column:59381}},"3105":{start:{line:4,column:59335},end:{line:4,column:59343}},"3106":{start:{line:4,column:59349},end:{line:4,column:59354}},"3107":{start:{line:4,column:59355},end:{line:4,column:59377}},"3108":{start:{line:4,column:59368},end:{line:4,column:59377}},"3109":{start:{line:4,column:59377},end:{line:4,column:59380}},"3110":{start:{line:4,column:59381},end:{line:4,column:59392}},"3111":{start:{line:4,column:59414},end:{line:4,column:59454}},"3112":{start:{line:4,column:59478},end:{line:4,column:59481}},"3113":{start:{line:4,column:59482},end:{line:4,column:59507}},"3114":{start:{line:4,column:59496},end:{line:4,column:59507}},"3115":{start:{line:4,column:59538},end:{line:4,column:59542}},"3116":{start:{line:4,column:59543},end:{line:4,column:59633}},"3117":{start:{line:4,column:59567},end:{line:4,column:59574}},"3118":{start:{line:4,column:59577},end:{line:4,column:59581}},"3119":{start:{line:4,column:59584},end:{line:4,column:59603}},"3120":{start:{line:4,column:59604},end:{line:4,column:59632}},"3121":{start:{line:4,column:59639},end:{line:4,column:59644}},"3122":{start:{line:4,column:59645},end:{line:4,column:59695}},"3123":{start:{line:4,column:59719},end:{line:4,column:59726}},"3124":{start:{line:4,column:59727},end:{line:4,column:59758}},"3125":{start:{line:4,column:59776},end:{line:4,column:59798}},"3126":{start:{line:4,column:59791},end:{line:4,column:59798}},"3127":{start:{line:4,column:59804},end:{line:4,column:59807}},"3128":{start:{line:4,column:59810},end:{line:4,column:59814}},"3129":{start:{line:4,column:59815},end:{line:4,column:59982}},"3130":{start:{line:4,column:59827},end:{line:4,column:59832}},"3131":{start:{line:4,column:59833},end:{line:4,column:59882}},"3132":{start:{line:4,column:59888},end:{line:4,column:59897}},"3133":{start:{line:4,column:59898},end:{line:4,column:59909}},"3134":{start:{line:4,column:59915},end:{line:4,column:59920}},"3135":{start:{line:4,column:59921},end:{line:4,column:59981}},"3136":{start:{line:4,column:59982},end:{line:4,column:59990}},"3137":{start:{line:4,column:60018},end:{line:4,column:60021}},"3138":{start:{line:4,column:60024},end:{line:4,column:60032}},"3139":{start:{line:4,column:60033},end:{line:4,column:60114}},"3140":{start:{line:4,column:60120},end:{line:4,column:60125}},"3141":{start:{line:4,column:60126},end:{line:4,column:60151}},"3142":{start:{line:4,column:60157},end:{line:4,column:60162}},"3143":{start:{line:4,column:60163},end:{line:4,column:60204}},"3144":{start:{line:4,column:60228},end:{line:4,column:60233}},"3145":{start:{line:4,column:60236},end:{line:4,column:60240}},"3146":{start:{line:4,column:60241},end:{line:4,column:60297}},"3147":{start:{line:4,column:60250},end:{line:4,column:60258}},"3148":{start:{line:4,column:60269},end:{line:4,column:60276}},"3149":{start:{line:4,column:60277},end:{line:4,column:60296}},"3150":{start:{line:4,column:60297},end:{line:4,column:60325}},"3151":{start:{line:4,column:60333},end:{line:4,column:61553}},"3152":{start:{line:4,column:60374},end:{line:4,column:60378}},"3153":{start:{line:4,column:60404},end:{line:4,column:60406}},"3154":{start:{line:4,column:60440},end:{line:4,column:60451}},"3155":{start:{line:4,column:60454},end:{line:4,column:60458}},"3156":{start:{line:4,column:60459},end:{line:4,column:60489}},"3157":{start:{line:4,column:60507},end:{line:4,column:60547}},"3158":{start:{line:4,column:60562},end:{line:4,column:60583}},"3159":{start:{line:4,column:60599},end:{line:4,column:60615}},"3160":{start:{line:4,column:60632},end:{line:4,column:60654}},"3161":{start:{line:4,column:60665},end:{line:4,column:60873}},"3162":{start:{line:4,column:60681},end:{line:4,column:60711}},"3163":{start:{line:4,column:60716},end:{line:4,column:60873}},"3164":{start:{line:4,column:60756},end:{line:4,column:60770}},"3165":{start:{line:4,column:60771},end:{line:4,column:60840}},"3166":{start:{line:4,column:60787},end:{line:4,column:60792}},"3167":{start:{line:4,column:60795},end:{line:4,column:60815}},"3168":{start:{line:4,column:60816},end:{line:4,column:60839}},"3169":{start:{line:4,column:60840},end:{line:4,column:60872}},"3170":{start:{line:4,column:60873},end:{line:4,column:60903}},"3171":{start:{line:4,column:60917},end:{line:4,column:60934}},"3172":{start:{line:4,column:60950},end:{line:4,column:60993}},"3173":{start:{line:4,column:61003},end:{line:4,column:61023}},"3174":{start:{line:4,column:61035},end:{line:4,column:61070}},"3175":{start:{line:4,column:61087},end:{line:4,column:61123}},"3176":{start:{line:4,column:61169},end:{line:4,column:61205}},"3177":{start:{line:4,column:61185},end:{line:4,column:61205}},"3178":{start:{line:4,column:61205},end:{line:4,column:61237}},"3179":{start:{line:4,column:61257},end:{line:4,column:61275}},"3180":{start:{line:4,column:61281},end:{line:4,column:61296}},"3181":{start:{line:4,column:61299},end:{line:4,column:61314}},"3182":{start:{line:4,column:61315},end:{line:4,column:61377}},"3183":{start:{line:4,column:61396},end:{line:4,column:61449}},"3184":{start:{line:4,column:61429},end:{line:4,column:61449}},"3185":{start:{line:4,column:61449},end:{line:4,column:61464}},"3186":{start:{line:4,column:61470},end:{line:4,column:61485}},"3187":{start:{line:4,column:61488},end:{line:4,column:61503}},"3188":{start:{line:4,column:61504},end:{line:4,column:61551}},"3189":{start:{line:4,column:61561},end:{line:4,column:62042}},"3190":{start:{line:4,column:61652},end:{line:4,column:61654}},"3191":{start:{line:4,column:61674},end:{line:4,column:61746}},"3192":{start:{line:4,column:61759},end:{line:4,column:61812}},"3193":{start:{line:4,column:61837},end:{line:4,column:61876}},"3194":{start:{line:4,column:61913},end:{line:4,column:62011}},"3195":{start:{line:4,column:62012},end:{line:4,column:62028}},"3196":{start:{line:4,column:62030},end:{line:4,column:62038}},"3197":{start:{line:4,column:62057},end:{line:4,column:62075}},"3198":{start:{line:4,column:62093},end:{line:4,column:62133}},"3199":{start:{line:4,column:62163},end:{line:4,column:62172}},"3200":{start:{line:4,column:62173},end:{line:4,column:62324}},"3201":{start:{line:4,column:62185},end:{line:4,column:62221}},"3202":{start:{line:4,column:62226},end:{line:4,column:62324}},"3203":{start:{line:4,column:62240},end:{line:4,column:62269}},"3204":{start:{line:4,column:62275},end:{line:4,column:62279}},"3205":{start:{line:4,column:62280},end:{line:4,column:62323}},"3206":{start:{line:4,column:62324},end:{line:4,column:62341}},"3207":{start:{line:4,column:62371},end:{line:4,column:62375}},"3208":{start:{line:4,column:62378},end:{line:4,column:62382}},"3209":{start:{line:4,column:62385},end:{line:4,column:62400}},"3210":{start:{line:4,column:62403},end:{line:4,column:62428}},"3211":{start:{line:4,column:62429},end:{line:4,column:62449}},"3212":{start:{line:4,column:62471},end:{line:4,column:62601}},"3213":{start:{line:4,column:62633},end:{line:4,column:62653}},"3214":{start:{line:4,column:62656},end:{line:4,column:62657}},"3215":{start:{line:4,column:62658},end:{line:4,column:63309}},"3216":{start:{line:4,column:63331},end:{line:4,column:63340}},"3217":{start:{line:4,column:63343},end:{line:4,column:63350}},"3218":{start:{line:4,column:63353},end:{line:4,column:63355}},"3219":{start:{line:4,column:63356},end:{line:4,column:63409}},"3220":{start:{line:4,column:63371},end:{line:4,column:63409}},"3221":{start:{line:4,column:63409},end:{line:4,column:63416}},"3222":{start:{line:4,column:63440},end:{line:4,column:63441}},"3223":{start:{line:4,column:63444},end:{line:4,column:63456}},"3224":{start:{line:4,column:63457},end:{line:4,column:63531}},"3225":{start:{line:4,column:63469},end:{line:4,column:63479}},"3226":{start:{line:4,column:63480},end:{line:4,column:63530}},"3227":{start:{line:4,column:63497},end:{line:4,column:63510}},"3228":{start:{line:4,column:63511},end:{line:4,column:63529}},"3229":{start:{line:4,column:63539},end:{line:4,column:63547}},"3230":{start:{line:4,column:63543},end:{line:4,column:63547}},"3231":{start:{line:4,column:63551},end:{line:4,column:63559}},"3232":{start:{line:4,column:63555},end:{line:4,column:63559}},"3233":{start:{line:4,column:63577},end:{line:4,column:63591}},"3234":{start:{line:4,column:63611},end:{line:4,column:63627}},"3235":{start:{line:4,column:63635},end:{line:4,column:63642}},"3236":{start:{line:4,column:63646},end:{line:4,column:63653}},"3237":{start:{line:4,column:63657},end:{line:4,column:63711}},"3238":{start:{line:4,column:63690},end:{line:4,column:63709}},"3239":{start:{line:4,column:63715},end:{line:4,column:63740}},"3240":{start:{line:4,column:63733},end:{line:4,column:63739}},"3241":{start:{line:4,column:63744},end:{line:4,column:63751}},"3242":{start:{line:4,column:63755},end:{line:4,column:63832}},"3243":{start:{line:4,column:63781},end:{line:4,column:63785}},"3244":{start:{line:4,column:63811},end:{line:4,column:63819}},"3245":{start:{line:4,column:63815},end:{line:4,column:63819}},"3246":{start:{line:4,column:63820},end:{line:4,column:63828}},"3247":{start:{line:4,column:63853},end:{line:4,column:63856}},"3248":{start:{line:4,column:63859},end:{line:4,column:63862}},"3249":{start:{line:4,column:63865},end:{line:4,column:63878}},"3250":{start:{line:4,column:63879},end:{line:4,column:63899}},"3251":{start:{line:4,column:63907},end:{line:4,column:63999}},"3252":{start:{line:4,column:63939},end:{line:4,column:63986}},"3253":{start:{line:4,column:63980},end:{line:4,column:63984}},"3254":{start:{line:4,column:63987},end:{line:4,column:63995}},"3255":{start:{line:4,column:64007},end:{line:4,column:64009}},"3256":{start:{line:4,column:64013},end:{line:4,column:64197}},"3257":{start:{line:4,column:64060},end:{line:4,column:64097}},"3258":{start:{line:4,column:64115},end:{line:4,column:64140}},"3259":{start:{line:4,column:64141},end:{line:4,column:64195}},"3260":{start:{line:4,column:64223},end:{line:4,column:64238}},"3261":{start:{line:4,column:64241},end:{line:4,column:64257}},"3262":{start:{line:4,column:64260},end:{line:4,column:64261}},"3263":{start:{line:4,column:64262},end:{line:4,column:64415}},"3264":{start:{line:4,column:64274},end:{line:4,column:64415}},"3265":{start:{line:4,column:64284},end:{line:4,column:64285}},"3266":{start:{line:4,column:64308},end:{line:4,column:64312}},"3267":{start:{line:4,column:64313},end:{line:4,column:64414}},"3268":{start:{line:4,column:64335},end:{line:4,column:64339}},"3269":{start:{line:4,column:64344},end:{line:4,column:64414}},"3270":{start:{line:4,column:64352},end:{line:4,column:64362}},"3271":{start:{line:4,column:64367},end:{line:4,column:64414}},"3272":{start:{line:4,column:64382},end:{line:4,column:64383}},"3273":{start:{line:4,column:64386},end:{line:4,column:64392}},"3274":{start:{line:4,column:64393},end:{line:4,column:64413}},"3275":{start:{line:4,column:64415},end:{line:4,column:64486}},"3276":{start:{line:4,column:64512},end:{line:4,column:64515}},"3277":{start:{line:4,column:64516},end:{line:4,column:64543}},"3278":{start:{line:4,column:64528},end:{line:4,column:64543}},"3279":{start:{line:4,column:64549},end:{line:4,column:64552}},"3280":{start:{line:4,column:64553},end:{line:4,column:64574}},"3281":{start:{line:4,column:64595},end:{line:4,column:64604}},"3282":{start:{line:4,column:64605},end:{line:4,column:64623}},"3283":{start:{line:4,column:64653},end:{line:4,column:64674}},"3284":{start:{line:4,column:64677},end:{line:4,column:64683}},"3285":{start:{line:4,column:64684},end:{line:4,column:64828}},"3286":{start:{line:4,column:64703},end:{line:4,column:64704}},"3287":{start:{line:4,column:64707},end:{line:4,column:64711}},"3288":{start:{line:4,column:64714},end:{line:4,column:64718}},"3289":{start:{line:4,column:64719},end:{line:4,column:64810}},"3290":{start:{line:4,column:64734},end:{line:4,column:64810}},"3291":{start:{line:4,column:64769},end:{line:4,column:64804}},"3292":{start:{line:4,column:64804},end:{line:4,column:64809}},"3293":{start:{line:4,column:64810},end:{line:4,column:64827}},"3294":{start:{line:4,column:64828},end:{line:4,column:64857}},"3295":{start:{line:4,column:64883},end:{line:4,column:64898}},"3296":{start:{line:4,column:64899},end:{line:4,column:64991}},"3297":{start:{line:4,column:64909},end:{line:4,column:64910}},"3298":{start:{line:4,column:64934},end:{line:4,column:64943}},"3299":{start:{line:4,column:64944},end:{line:4,column:64976}},"3300":{start:{line:4,column:64955},end:{line:4,column:64976}},"3301":{start:{line:4,column:64976},end:{line:4,column:64990}},"3302":{start:{line:4,column:65011},end:{line:4,column:65064}},"3303":{start:{line:4,column:65098},end:{line:4,column:65106}},"3304":{start:{line:4,column:65109},end:{line:4,column:65113}},"3305":{start:{line:4,column:65114},end:{line:4,column:65200}},"3306":{start:{line:4,column:65124},end:{line:4,column:65125}},"3307":{start:{line:4,column:65141},end:{line:4,column:65145}},"3308":{start:{line:4,column:65146},end:{line:4,column:65199}},"3309":{start:{line:4,column:65200},end:{line:4,column:65275}},"3310":{start:{line:4,column:65275},end:{line:4,column:65351}},"3311":{start:{line:4,column:65285},end:{line:4,column:65286}},"3312":{start:{line:4,column:65302},end:{line:4,column:65306}},"3313":{start:{line:4,column:65307},end:{line:4,column:65350}},"3314":{start:{line:4,column:65357},end:{line:4,column:65359}},"3315":{start:{line:4,column:65362},end:{line:4,column:65364}},"3316":{start:{line:4,column:65367},end:{line:4,column:65381}},"3317":{start:{line:4,column:65382},end:{line:4,column:65416}},"3318":{start:{line:4,column:65416},end:{line:4,column:66003}},"3319":{start:{line:4,column:65426},end:{line:4,column:65427}},"3320":{start:{line:4,column:65443},end:{line:4,column:65447}},"3321":{start:{line:4,column:65448},end:{line:4,column:65690}},"3322":{start:{line:4,column:65548},end:{line:4,column:65556}},"3323":{start:{line:4,column:65557},end:{line:4,column:65629}},"3324":{start:{line:4,column:65634},end:{line:4,column:65690}},"3325":{start:{line:4,column:65690},end:{line:4,column:65803}},"3326":{start:{line:4,column:65809},end:{line:4,column:65825}},"3327":{start:{line:4,column:65826},end:{line:4,column:66002}},"3328":{start:{line:4,column:66003},end:{line:4,column:66012}},"3329":{start:{line:4,column:66032},end:{line:4,column:66211}},"3330":{start:{line:4,column:66042},end:{line:4,column:66058}},"3331":{start:{line:4,column:66087},end:{line:4,column:66096}},"3332":{start:{line:4,column:66097},end:{line:4,column:66210}},"3333":{start:{line:4,column:66120},end:{line:4,column:66155}},"3334":{start:{line:4,column:66166},end:{line:4,column:66174}},"3335":{start:{line:4,column:66175},end:{line:4,column:66209}},"3336":{start:{line:4,column:66239},end:{line:4,column:66263}},"3337":{start:{line:4,column:66264},end:{line:4,column:66379}},"3338":{start:{line:4,column:66279},end:{line:4,column:66379}},"3339":{start:{line:4,column:66309},end:{line:4,column:66378}},"3340":{start:{line:4,column:66407},end:{line:4,column:66431}},"3341":{start:{line:4,column:66432},end:{line:4,column:66582}},"3342":{start:{line:4,column:66447},end:{line:4,column:66582}},"3343":{start:{line:4,column:66477},end:{line:4,column:66481}},"3344":{start:{line:4,column:66484},end:{line:4,column:66581}},"3345":{start:{line:4,column:66600},end:{line:4,column:66649}},"3346":{start:{line:4,column:66713},end:{line:4,column:66714}},"3347":{start:{line:4,column:66715},end:{line:4,column:66817}},"3348":{start:{line:4,column:66762},end:{line:4,column:66810}},"3349":{start:{line:4,column:66810},end:{line:4,column:66816}},"3350":{start:{line:4,column:66823},end:{line:4,column:66827}},"3351":{start:{line:4,column:66830},end:{line:4,column:66831}},"3352":{start:{line:4,column:66832},end:{line:4,column:67167}},"3353":{start:{line:4,column:66856},end:{line:4,column:66860}},"3354":{start:{line:4,column:66861},end:{line:4,column:66947}},"3355":{start:{line:4,column:66871},end:{line:4,column:66876}},"3356":{start:{line:4,column:66876},end:{line:4,column:66884}},"3357":{start:{line:4,column:66890},end:{line:4,column:66947}},"3358":{start:{line:4,column:66900},end:{line:4,column:66905}},"3359":{start:{line:4,column:66905},end:{line:4,column:66913}},"3360":{start:{line:4,column:66919},end:{line:4,column:66947}},"3361":{start:{line:4,column:66941},end:{line:4,column:66947}},"3362":{start:{line:4,column:66947},end:{line:4,column:67162}},"3363":{start:{line:4,column:66981},end:{line:4,column:66985}},"3364":{start:{line:4,column:66986},end:{line:4,column:67041}},"3365":{start:{line:4,column:67001},end:{line:4,column:67041}},"3366":{start:{line:4,column:67011},end:{line:4,column:67035}},"3367":{start:{line:4,column:67035},end:{line:4,column:67040}},"3368":{start:{line:4,column:67047},end:{line:4,column:67162}},"3369":{start:{line:4,column:67080},end:{line:4,column:67084}},"3370":{start:{line:4,column:67085},end:{line:4,column:67161}},"3371":{start:{line:4,column:67095},end:{line:4,column:67096}},"3372":{start:{line:4,column:67113},end:{line:4,column:67161}},"3373":{start:{line:4,column:67126},end:{line:4,column:67155}},"3374":{start:{line:4,column:67155},end:{line:4,column:67160}},"3375":{start:{line:4,column:67162},end:{line:4,column:67166}},"3376":{start:{line:4,column:67167},end:{line:4,column:67211}},"3377":{start:{line:4,column:67235},end:{line:4,column:67247}},"3378":{start:{line:4,column:67253},end:{line:4,column:67289}},"3379":{start:{line:4,column:67292},end:{line:4,column:67315}},"3380":{start:{line:4,column:67316},end:{line:4,column:67372}},"3381":{start:{line:4,column:67402},end:{line:4,column:67416}},"3382":{start:{line:4,column:67417},end:{line:4,column:67537}},"3383":{start:{line:4,column:67429},end:{line:4,column:67449}},"3384":{start:{line:4,column:67450},end:{line:4,column:67488}},"3385":{start:{line:4,column:67494},end:{line:4,column:67502}},"3386":{start:{line:4,column:67503},end:{line:4,column:67536}},"3387":{start:{line:4,column:67559},end:{line:4,column:67567}},"3388":{start:{line:4,column:67568},end:{line:4,column:67628}},"3389":{start:{line:4,column:67585},end:{line:4,column:67591}},"3390":{start:{line:4,column:67592},end:{line:4,column:67627}},"3391":{start:{line:4,column:67619},end:{line:4,column:67627}},"3392":{start:{line:4,column:67628},end:{line:4,column:67636}},"3393":{start:{line:4,column:67656},end:{line:4,column:67748}},"3394":{start:{line:4,column:67662},end:{line:4,column:67731}},"3395":{start:{line:4,column:67676},end:{line:4,column:67731}},"3396":{start:{line:4,column:67686},end:{line:4,column:67687}},"3397":{start:{line:4,column:67712},end:{line:4,column:67731}},"3398":{start:{line:4,column:67731},end:{line:4,column:67747}},"3399":{start:{line:4,column:67768},end:{line:4,column:67836}},"3400":{start:{line:4,column:67872},end:{line:4,column:67876}},"3401":{start:{line:4,column:67879},end:{line:4,column:67887}},"3402":{start:{line:4,column:67890},end:{line:4,column:67897}},"3403":{start:{line:4,column:67900},end:{line:4,column:67913}},"3404":{start:{line:4,column:67914},end:{line:4,column:68109}},"3405":{start:{line:4,column:68127},end:{line:4,column:68165}},"3406":{start:{line:4,column:68197},end:{line:4,column:68205}},"3407":{start:{line:4,column:68208},end:{line:4,column:68215}},"3408":{start:{line:4,column:68218},end:{line:4,column:68231}},"3409":{start:{line:4,column:68232},end:{line:4,column:68369}},"3410":{start:{line:4,column:68290},end:{line:4,column:68297}},"3411":{start:{line:4,column:68298},end:{line:4,column:68314}},"3412":{start:{line:4,column:68314},end:{line:4,column:68368}},"3413":{start:{line:4,column:68324},end:{line:4,column:68325}},"3414":{start:{line:4,column:68342},end:{line:4,column:68368}},"3415":{start:{line:4,column:68369},end:{line:4,column:68501}},"3416":{start:{line:4,column:68517},end:{line:4,column:68592}},"3417":{start:{line:4,column:68610},end:{line:4,column:68735}},"3418":{start:{line:4,column:68630},end:{line:4,column:68665}},"3419":{start:{line:4,column:68640},end:{line:4,column:68641}},"3420":{start:{line:4,column:68657},end:{line:4,column:68665}},"3421":{start:{line:4,column:68676},end:{line:4,column:68696}},"3422":{start:{line:4,column:68699},end:{line:4,column:68734}},"3423":{start:{line:4,column:68724},end:{line:4,column:68734}},"3424":{start:{line:4,column:68751},end:{line:4,column:68810}},"3425":{start:{line:4,column:68830},end:{line:4,column:68843}},"3426":{start:{line:4,column:68861},end:{line:4,column:68872}},"3427":{start:{line:4,column:68892},end:{line:4,column:68910}},"3428":{start:{line:4,column:68901},end:{line:4,column:68910}},"3429":{start:{line:4,column:68916},end:{line:4,column:68920}},"3430":{start:{line:4,column:68921},end:{line:4,column:68957}},"3431":{start:{line:4,column:68985},end:{line:4,column:68994}},"3432":{start:{line:4,column:68995},end:{line:4,column:69016}},"3433":{start:{line:4,column:69036},end:{line:4,column:69202}},"3434":{start:{line:4,column:69063},end:{line:4,column:69084}},"3435":{start:{line:4,column:69085},end:{line:4,column:69093}},"3436":{start:{line:4,column:69099},end:{line:4,column:69103}},"3437":{start:{line:4,column:69106},end:{line:4,column:69117}},"3438":{start:{line:4,column:69120},end:{line:4,column:69142}},"3439":{start:{line:4,column:69143},end:{line:4,column:69193}},"3440":{start:{line:4,column:69151},end:{line:4,column:69193}},"3441":{start:{line:4,column:69193},end:{line:4,column:69201}},"3442":{start:{line:4,column:69230},end:{line:4,column:69237}},"3443":{start:{line:4,column:69238},end:{line:4,column:69339}},"3444":{start:{line:4,column:69242},end:{line:4,column:69279}},"3445":{start:{line:4,column:69289},end:{line:4,column:69306}},"3446":{start:{line:4,column:69315},end:{line:4,column:69338}},"3447":{start:{line:4,column:69375},end:{line:4,column:69380}},"3448":{start:{line:4,column:69383},end:{line:4,column:69385}},"3449":{start:{line:4,column:69388},end:{line:4,column:69392}},"3450":{start:{line:4,column:69393},end:{line:4,column:69654}},"3451":{start:{line:4,column:69441},end:{line:4,column:69466}},"3452":{start:{line:4,column:69467},end:{line:4,column:69521}},"3453":{start:{line:4,column:69533},end:{line:4,column:69540}},"3454":{start:{line:4,column:69543},end:{line:4,column:69551}},"3455":{start:{line:4,column:69552},end:{line:4,column:69564}},"3456":{start:{line:4,column:69570},end:{line:4,column:69585}},"3457":{start:{line:4,column:69586},end:{line:4,column:69653}},"3458":{start:{line:4,column:69603},end:{line:4,column:69633}},"3459":{start:{line:4,column:69608},end:{line:4,column:69625}},"3460":{start:{line:4,column:69634},end:{line:4,column:69652}},"3461":{start:{line:4,column:69654},end:{line:4,column:69662}},"3462":{start:{line:4,column:69678},end:{line:4,column:69738}},"3463":{start:{line:4,column:69766},end:{line:4,column:69775}},"3464":{start:{line:4,column:69776},end:{line:4,column:69930}},"3465":{start:{line:4,column:69787},end:{line:4,column:69930}},"3466":{start:{line:4,column:69797},end:{line:4,column:69798}},"3467":{start:{line:4,column:69824},end:{line:4,column:69828}},"3468":{start:{line:4,column:69829},end:{line:4,column:69903}},"3469":{start:{line:4,column:69857},end:{line:4,column:69862}},"3470":{start:{line:4,column:69865},end:{line:4,column:69871}},"3471":{start:{line:4,column:69872},end:{line:4,column:69902}},"3472":{start:{line:4,column:69903},end:{line:4,column:69929}},"3473":{start:{line:4,column:69930},end:{line:4,column:69941}},"3474":{start:{line:4,column:69975},end:{line:4,column:70003}},"3475":{start:{line:4,column:70006},end:{line:4,column:70011}},"3476":{start:{line:4,column:70014},end:{line:4,column:70022}},"3477":{start:{line:4,column:70023},end:{line:4,column:70066}},"3478":{start:{line:4,column:70098},end:{line:4,column:70102}},"3479":{start:{line:4,column:70105},end:{line:4,column:70109}},"3480":{start:{line:4,column:70112},end:{line:4,column:70132}},"3481":{start:{line:4,column:70135},end:{line:4,column:70152}},"3482":{start:{line:4,column:70153},end:{line:4,column:70177}},"3483":{start:{line:4,column:70185},end:{line:4,column:70202}},"3484":{start:{line:4,column:70218},end:{line:4,column:70266}},"3485":{start:{line:4,column:70274},end:{line:4,column:70410}},"3486":{start:{line:4,column:70315},end:{line:4,column:70338}},"3487":{start:{line:4,column:70372},end:{line:4,column:70377}},"3488":{start:{line:4,column:70378},end:{line:4,column:70408}},"3489":{start:{line:4,column:70426},end:{line:4,column:70563}},"3490":{start:{line:4,column:70467},end:{line:4,column:70471}},"3491":{start:{line:4,column:70474},end:{line:4,column:70533}},"3492":{start:{line:4,column:70534},end:{line:4,column:70561}},"3493":{start:{line:4,column:70579},end:{line:4,column:70641}},"3494":{start:{line:4,column:70609},end:{line:4,column:70639}},"3495":{start:{line:4,column:70667},end:{line:4,column:70696}},"3496":{start:{line:4,column:70697},end:{line:4,column:70788}},"3497":{start:{line:4,column:70810},end:{line:4,column:70824}},"3498":{start:{line:4,column:70825},end:{line:4,column:70857}},"3499":{start:{line:4,column:70837},end:{line:4,column:70857}},"3500":{start:{line:4,column:70863},end:{line:4,column:70877}},"3501":{start:{line:4,column:70880},end:{line:4,column:70894}},"3502":{start:{line:4,column:70897},end:{line:4,column:70925}},"3503":{start:{line:4,column:70926},end:{line:4,column:71020}},"3504":{start:{line:4,column:71044},end:{line:4,column:71049}},"3505":{start:{line:4,column:71050},end:{line:4,column:71096}},"3506":{start:{line:4,column:71112},end:{line:4,column:71158}},"3507":{start:{line:4,column:71166},end:{line:4,column:72565}},"3508":{start:{line:4,column:71276},end:{line:4,column:71280}},"3509":{start:{line:4,column:71295},end:{line:4,column:71299}},"3510":{start:{line:4,column:71313},end:{line:4,column:71386}},"3511":{start:{line:4,column:71401},end:{line:4,column:71477}},"3512":{start:{line:4,column:71495},end:{line:4,column:71668}},"3513":{start:{line:4,column:71689},end:{line:4,column:71716}},"3514":{start:{line:4,column:71722},end:{line:4,column:71729}},"3515":{start:{line:4,column:71730},end:{line:4,column:71956}},"3516":{start:{line:4,column:71740},end:{line:4,column:71757}},"3517":{start:{line:4,column:71760},end:{line:4,column:71784}},"3518":{start:{line:4,column:71787},end:{line:4,column:71792}},"3519":{start:{line:4,column:71795},end:{line:4,column:71811}},"3520":{start:{line:4,column:71812},end:{line:4,column:71942}},"3521":{start:{line:4,column:71868},end:{line:4,column:71904}},"3522":{start:{line:4,column:71951},end:{line:4,column:71955}},"3523":{start:{line:4,column:71995},end:{line:4,column:72012}},"3524":{start:{line:4,column:72015},end:{line:4,column:72026}},"3525":{start:{line:4,column:72029},end:{line:4,column:72069}},"3526":{start:{line:4,column:72072},end:{line:4,column:72107}},"3527":{start:{line:4,column:72110},end:{line:4,column:72176}},"3528":{start:{line:4,column:72134},end:{line:4,column:72175}},"3529":{start:{line:4,column:72179},end:{line:4,column:72236}},"3530":{start:{line:4,column:72237},end:{line:4,column:72250}},"3531":{start:{line:4,column:72256},end:{line:4,column:72260}},"3532":{start:{line:4,column:72261},end:{line:4,column:72524}},"3533":{start:{line:4,column:72271},end:{line:4,column:72317}},"3534":{start:{line:4,column:72292},end:{line:4,column:72311}},"3535":{start:{line:4,column:72318},end:{line:4,column:72446}},"3536":{start:{line:4,column:72456},end:{line:4,column:72485}},"3537":{start:{line:4,column:72494},end:{line:4,column:72523}},"3538":{start:{line:4,column:72524},end:{line:4,column:72563}},"3539":{start:{line:4,column:72593},end:{line:4,column:72637}},"3540":{start:{line:4,column:72640},end:{line:4,column:72644}},"3541":{start:{line:4,column:72647},end:{line:4,column:72651}},"3542":{start:{line:4,column:72654},end:{line:4,column:72655}},"3543":{start:{line:4,column:72656},end:{line:4,column:72784}},"3544":{start:{line:4,column:72661},end:{line:4,column:72784}},"3545":{start:{line:4,column:72676},end:{line:4,column:72784}},"3546":{start:{line:4,column:72784},end:{line:4,column:72996}},"3547":{start:{line:4,column:72789},end:{line:4,column:72996}},"3548":{start:{line:4,column:72799},end:{line:4,column:72800}},"3549":{start:{line:4,column:72823},end:{line:4,column:72827}},"3550":{start:{line:4,column:72828},end:{line:4,column:72995}},"3551":{start:{line:4,column:72852},end:{line:4,column:72995}},"3552":{start:{line:4,column:72877},end:{line:4,column:72899}},"3553":{start:{line:4,column:72905},end:{line:4,column:72908}},"3554":{start:{line:4,column:72909},end:{line:4,column:72994}},"3555":{start:{line:4,column:73002},end:{line:4,column:73005}},"3556":{start:{line:4,column:73006},end:{line:4,column:73081}},"3557":{start:{line:4,column:73011},end:{line:4,column:73081}},"3558":{start:{line:4,column:73033},end:{line:4,column:73062}},"3559":{start:{line:4,column:73065},end:{line:4,column:73070}},"3560":{start:{line:4,column:73071},end:{line:4,column:73080}},"3561":{start:{line:4,column:73081},end:{line:4,column:73136}},"3562":{start:{line:4,column:73154},end:{line:4,column:73248}},"3563":{start:{line:4,column:73176},end:{line:4,column:73212}},"3564":{start:{line:4,column:73186},end:{line:4,column:73212}},"3565":{start:{line:4,column:73201},end:{line:4,column:73212}},"3566":{start:{line:4,column:73212},end:{line:4,column:73247}},"3567":{start:{line:4,column:73222},end:{line:4,column:73247}},"3568":{start:{line:4,column:73237},end:{line:4,column:73247}},"3569":{start:{line:4,column:73270},end:{line:4,column:73280}},"3570":{start:{line:4,column:73281},end:{line:4,column:73313}},"3571":{start:{line:4,column:73321},end:{line:4,column:74113}},"3572":{start:{line:4,column:73446},end:{line:4,column:73450}},"3573":{start:{line:4,column:73477},end:{line:4,column:73698}},"3574":{start:{line:4,column:73713},end:{line:4,column:73736}},"3575":{start:{line:4,column:73742},end:{line:4,column:73753}},"3576":{start:{line:4,column:73754},end:{line:4,column:73877}},"3577":{start:{line:4,column:73870},end:{line:4,column:73877}},"3578":{start:{line:4,column:73883},end:{line:4,column:73898}},"3579":{start:{line:4,column:73901},end:{line:4,column:73917}},"3580":{start:{line:4,column:73918},end:{line:4,column:73952}},"3581":{start:{line:4,column:73958},end:{line:4,column:73971}},"3582":{start:{line:4,column:73972},end:{line:4,column:73979}},"3583":{start:{line:4,column:73995},end:{line:4,column:74037}},"3584":{start:{line:4,column:74048},end:{line:4,column:74071}},"3585":{start:{line:4,column:74085},end:{line:4,column:74111}},"3586":{start:{line:4,column:74139},end:{line:4,column:74154}},"3587":{start:{line:4,column:74155},end:{line:4,column:74239}},"3588":{start:{line:4,column:74165},end:{line:4,column:74166}},"3589":{start:{line:4,column:74189},end:{line:4,column:74193}},"3590":{start:{line:4,column:74194},end:{line:4,column:74238}},"3591":{start:{line:4,column:74247},end:{line:4,column:74301}},"3592":{start:{line:4,column:74286},end:{line:4,column:74288}},"3593":{start:{line:4,column:74289},end:{line:4,column:74297}},"3594":{start:{line:4,column:74322},end:{line:4,column:74325}},"3595":{start:{line:4,column:74326},end:{line:4,column:74342}},"3596":{start:{line:4,column:74350},end:{line:4,column:76339}},"3597":{start:{line:4,column:74422},end:{line:4,column:74484}},"3598":{start:{line:4,column:74499},end:{line:4,column:74541}},"3599":{start:{line:4,column:74557},end:{line:4,column:74603}},"3600":{start:{line:4,column:74631},end:{line:4,column:74666}},"3601":{start:{line:4,column:74667},end:{line:4,column:74789}},"3602":{start:{line:4,column:74683},end:{line:4,column:74704}},"3603":{start:{line:4,column:74707},end:{line:4,column:74712}},"3604":{start:{line:4,column:74715},end:{line:4,column:74729}},"3605":{start:{line:4,column:74730},end:{line:4,column:74748}},"3606":{start:{line:4,column:74754},end:{line:4,column:74789}},"3607":{start:{line:4,column:74798},end:{line:4,column:74844}},"3608":{start:{line:4,column:74818},end:{line:4,column:74844}},"3609":{start:{line:4,column:74858},end:{line:4,column:74878}},"3610":{start:{line:4,column:74879},end:{line:4,column:74906}},"3611":{start:{line:4,column:74920},end:{line:4,column:74952}},"3612":{start:{line:4,column:74987},end:{line:4,column:75044}},"3613":{start:{line:4,column:75050},end:{line:4,column:75078}},"3614":{start:{line:4,column:75081},end:{line:4,column:75116}},"3615":{start:{line:4,column:75117},end:{line:4,column:75168}},"3616":{start:{line:4,column:75206},end:{line:4,column:75215}},"3617":{start:{line:4,column:75218},end:{line:4,column:75355}},"3618":{start:{line:4,column:75223},end:{line:4,column:75227}},"3619":{start:{line:4,column:75238},end:{line:4,column:75243}},"3620":{start:{line:4,column:75244},end:{line:4,column:75354}},"3621":{start:{line:4,column:75361},end:{line:4,column:75378}},"3622":{start:{line:4,column:75381},end:{line:4,column:75403}},"3623":{start:{line:4,column:75404},end:{line:4,column:75483}},"3624":{start:{line:4,column:75435},end:{line:4,column:75473}},"3625":{start:{line:4,column:75474},end:{line:4,column:75482}},"3626":{start:{line:4,column:75489},end:{line:4,column:75512}},"3627":{start:{line:4,column:75515},end:{line:4,column:75547}},"3628":{start:{line:4,column:75550},end:{line:4,column:75569}},"3629":{start:{line:4,column:75572},end:{line:4,column:75593}},"3630":{start:{line:4,column:75594},end:{line:4,column:75654}},"3631":{start:{line:4,column:75667},end:{line:4,column:75697}},"3632":{start:{line:4,column:75722},end:{line:4,column:75730}},"3633":{start:{line:4,column:75731},end:{line:4,column:75849}},"3634":{start:{line:4,column:75747},end:{line:4,column:75762}},"3635":{start:{line:4,column:75763},end:{line:4,column:75848}},"3636":{start:{line:4,column:75773},end:{line:4,column:75788}},"3637":{start:{line:4,column:75799},end:{line:4,column:75803}},"3638":{start:{line:4,column:75806},end:{line:4,column:75824}},"3639":{start:{line:4,column:75825},end:{line:4,column:75847}},"3640":{start:{line:4,column:75855},end:{line:4,column:75875}},"3641":{start:{line:4,column:75878},end:{line:4,column:75894}},"3642":{start:{line:4,column:75895},end:{line:4,column:75958}},"3643":{start:{line:4,column:75969},end:{line:4,column:75992}},"3644":{start:{line:4,column:76010},end:{line:4,column:76030}},"3645":{start:{line:4,column:76031},end:{line:4,column:76062}},"3646":{start:{line:4,column:76079},end:{line:4,column:76102}},"3647":{start:{line:4,column:76105},end:{line:4,column:76127}},"3648":{start:{line:4,column:76128},end:{line:4,column:76170}},"3649":{start:{line:4,column:76187},end:{line:4,column:76210}},"3650":{start:{line:4,column:76213},end:{line:4,column:76235}},"3651":{start:{line:4,column:76236},end:{line:4,column:76293}},"3652":{start:{line:4,column:76314},end:{line:4,column:76337}},"3653":{start:{line:4,column:76355},end:{line:4,column:76367}},"3654":{start:{line:4,column:76383},end:{line:4,column:76407}},"3655":{start:{line:4,column:76433},end:{line:4,column:76443}},"3656":{start:{line:4,column:76444},end:{line:4,column:76526}},"3657":{start:{line:4,column:76550},end:{line:4,column:76554}},"3658":{start:{line:4,column:76557},end:{line:4,column:76576}},"3659":{start:{line:4,column:76579},end:{line:4,column:76586}},"3660":{start:{line:4,column:76589},end:{line:4,column:76604}},"3661":{start:{line:4,column:76605},end:{line:4,column:76643}},"3662":{start:{line:4,column:76651},end:{line:4,column:76653}},"3663":{start:{line:4,column:76657},end:{line:4,column:76663}},"3664":{start:{line:4,column:76661},end:{line:4,column:76663}},"3665":{start:{line:4,column:76683},end:{line:4,column:76699}},"3666":{start:{line:4,column:76721},end:{line:4,column:76737}},"3667":{start:{line:4,column:76730},end:{line:4,column:76737}},"3668":{start:{line:4,column:76743},end:{line:4,column:76777}},"3669":{start:{line:4,column:76785},end:{line:4,column:76923}},"3670":{start:{line:4,column:76811},end:{line:4,column:76815}},"3671":{start:{line:4,column:76831},end:{line:4,column:76847}},"3672":{start:{line:4,column:76856},end:{line:4,column:76884}},"3673":{start:{line:4,column:76896},end:{line:4,column:76921}},"3674":{start:{line:4,column:76927},end:{line:4,column:77484}},"3675":{start:{line:4,column:76961},end:{line:4,column:76975}},"3676":{start:{line:4,column:77004},end:{line:4,column:77013}},"3677":{start:{line:4,column:77014},end:{line:4,column:77209}},"3678":{start:{line:4,column:77033},end:{line:4,column:77085}},"3679":{start:{line:4,column:77088},end:{line:4,column:77090}},"3680":{start:{line:4,column:77091},end:{line:4,column:77193}},"3681":{start:{line:4,column:77101},end:{line:4,column:77102}},"3682":{start:{line:4,column:77118},end:{line:4,column:77133}},"3683":{start:{line:4,column:77136},end:{line:4,column:77174}},"3684":{start:{line:4,column:77175},end:{line:4,column:77192}},"3685":{start:{line:4,column:77193},end:{line:4,column:77208}},"3686":{start:{line:4,column:77209},end:{line:4,column:77220}},"3687":{start:{line:4,column:77235},end:{line:4,column:77266}},"3688":{start:{line:4,column:77281},end:{line:4,column:77312}},"3689":{start:{line:4,column:77335},end:{line:4,column:77366}},"3690":{start:{line:4,column:77394},end:{line:4,column:77482}},"3691":{start:{line:4,column:77404},end:{line:4,column:77405}},"3692":{start:{line:4,column:77432},end:{line:4,column:77482}},"3693":{start:{line:4,column:77488},end:{line:4,column:77622}},"3694":{start:{line:4,column:77539},end:{line:4,column:77620}},"3695":{start:{line:4,column:77626},end:{line:4,column:78249}},"3696":{start:{line:4,column:77660},end:{line:4,column:77674}},"3697":{start:{line:4,column:77693},end:{line:4,column:77764}},"3698":{start:{line:4,column:77703},end:{line:4,column:77704}},"3699":{start:{line:4,column:77731},end:{line:4,column:77764}},"3700":{start:{line:4,column:77779},end:{line:4,column:77846}},"3701":{start:{line:4,column:77789},end:{line:4,column:77790}},"3702":{start:{line:4,column:77817},end:{line:4,column:77846}},"3703":{start:{line:4,column:77870},end:{line:4,column:77874}},"3704":{start:{line:4,column:77875},end:{line:4,column:78029}},"3705":{start:{line:4,column:77885},end:{line:4,column:77886}},"3706":{start:{line:4,column:77912},end:{line:4,column:77931}},"3707":{start:{line:4,column:77934},end:{line:4,column:77971}},"3708":{start:{line:4,column:77972},end:{line:4,column:78028}},"3709":{start:{line:4,column:78029},end:{line:4,column:78058}},"3710":{start:{line:4,column:78073},end:{line:4,column:78140}},"3711":{start:{line:4,column:78083},end:{line:4,column:78084}},"3712":{start:{line:4,column:78111},end:{line:4,column:78140}},"3713":{start:{line:4,column:78155},end:{line:4,column:78177}},"3714":{start:{line:4,column:78191},end:{line:4,column:78217}},"3715":{start:{line:4,column:78227},end:{line:4,column:78247}},"3716":{start:{line:4,column:78253},end:{line:4,column:79611}},"3717":{start:{line:4,column:78278},end:{line:4,column:78282}},"3718":{start:{line:4,column:78306},end:{line:4,column:78308}},"3719":{start:{line:4,column:78327},end:{line:4,column:78329}},"3720":{start:{line:4,column:78371},end:{line:4,column:78373}},"3721":{start:{line:4,column:78394},end:{line:4,column:78438}},"3722":{start:{line:4,column:78457},end:{line:4,column:78503}},"3723":{start:{line:4,column:78518},end:{line:4,column:78584}},"3724":{start:{line:4,column:78599},end:{line:4,column:78621}},"3725":{start:{line:4,column:78641},end:{line:4,column:78752}},"3726":{start:{line:4,column:78773},end:{line:4,column:78956}},"3727":{start:{line:4,column:78836},end:{line:4,column:78862}},"3728":{start:{line:4,column:78865},end:{line:4,column:78873}},"3729":{start:{line:4,column:78874},end:{line:4,column:78923}},"3730":{start:{line:4,column:78912},end:{line:4,column:78923}},"3731":{start:{line:4,column:78923},end:{line:4,column:78955}},"3732":{start:{line:4,column:78956},end:{line:4,column:78986}},"3733":{start:{line:4,column:79009},end:{line:4,column:79032}},"3734":{start:{line:4,column:79033},end:{line:4,column:79296}},"3735":{start:{line:4,column:79053},end:{line:4,column:79186}},"3736":{start:{line:4,column:79063},end:{line:4,column:79064}},"3737":{start:{line:4,column:79087},end:{line:4,column:79091}},"3738":{start:{line:4,column:79092},end:{line:4,column:79185}},"3739":{start:{line:4,column:79191},end:{line:4,column:79296}},"3740":{start:{line:4,column:79329},end:{line:4,column:79533}},"3741":{start:{line:4,column:79348},end:{line:4,column:79366}},"3742":{start:{line:4,column:79367},end:{line:4,column:79532}},"3743":{start:{line:4,column:79379},end:{line:4,column:79503}},"3744":{start:{line:4,column:79415},end:{line:4,column:79441}},"3745":{start:{line:4,column:79452},end:{line:4,column:79467}},"3746":{start:{line:4,column:79468},end:{line:4,column:79502}},"3747":{start:{line:4,column:79508},end:{line:4,column:79532}},"3748":{start:{line:4,column:79548},end:{line:4,column:79609}},"3749":{start:{line:4,column:79635},end:{line:4,column:79647}},"3750":{start:{line:4,column:79648},end:{line:4,column:79715}},"3751":{start:{line:4,column:79661},end:{line:4,column:79714}},"3752":{start:{line:4,column:79671},end:{line:4,column:79672}},"3753":{start:{line:4,column:79689},end:{line:4,column:79714}},"3754":{start:{line:4,column:79701},end:{line:4,column:79714}},"3755":{start:{line:4,column:79715},end:{line:4,column:79726}},"3756":{start:{line:4,column:79744},end:{line:4,column:79790}},"3757":{start:{line:4,column:79812},end:{line:4,column:79865}},"3758":{start:{line:4,column:79885},end:{line:4,column:79910}},"3759":{start:{line:4,column:79895},end:{line:4,column:79910}},"3760":{start:{line:4,column:79910},end:{line:4,column:79935}},"3761":{start:{line:4,column:79920},end:{line:4,column:79935}},"3762":{start:{line:4,column:79935},end:{line:4,column:79959}},"3763":{start:{line:4,column:79945},end:{line:4,column:79959}},"3764":{start:{line:4,column:79987},end:{line:4,column:80003}},"3765":{start:{line:4,column:80004},end:{line:4,column:80193}},"3766":{start:{line:4,column:80031},end:{line:4,column:80037}},"3767":{start:{line:4,column:80040},end:{line:4,column:80049}},"3768":{start:{line:4,column:80052},end:{line:4,column:80054}},"3769":{start:{line:4,column:80055},end:{line:4,column:80181}},"3770":{start:{line:4,column:80065},end:{line:4,column:80066}},"3771":{start:{line:4,column:80100},end:{line:4,column:80104}},"3772":{start:{line:4,column:80105},end:{line:4,column:80180}},"3773":{start:{line:4,column:80112},end:{line:4,column:80125}},"3774":{start:{line:4,column:80136},end:{line:4,column:80140}},"3775":{start:{line:4,column:80141},end:{line:4,column:80179}},"3776":{start:{line:4,column:80181},end:{line:4,column:80192}},"3777":{start:{line:4,column:80193},end:{line:4,column:80209}},"3778":{start:{line:4,column:80237},end:{line:4,column:80260}},"3779":{start:{line:4,column:80263},end:{line:4,column:80272}},"3780":{start:{line:4,column:80273},end:{line:4,column:80547}},"3781":{start:{line:4,column:80292},end:{line:4,column:80303}},"3782":{start:{line:4,column:80304},end:{line:4,column:80546}},"3783":{start:{line:4,column:80314},end:{line:4,column:80315}},"3784":{start:{line:4,column:80339},end:{line:4,column:80343}},"3785":{start:{line:4,column:80344},end:{line:4,column:80545}},"3786":{start:{line:4,column:80351},end:{line:4,column:80366}},"3787":{start:{line:4,column:80377},end:{line:4,column:80383}},"3788":{start:{line:4,column:80386},end:{line:4,column:80391}},"3789":{start:{line:4,column:80392},end:{line:4,column:80460}},"3790":{start:{line:4,column:80402},end:{line:4,column:80403}},"3791":{start:{line:4,column:80426},end:{line:4,column:80430}},"3792":{start:{line:4,column:80431},end:{line:4,column:80459}},"3793":{start:{line:4,column:80460},end:{line:4,column:80544}},"3794":{start:{line:4,column:80483},end:{line:4,column:80488}},"3795":{start:{line:4,column:80489},end:{line:4,column:80543}},"3796":{start:{line:4,column:80499},end:{line:4,column:80500}},"3797":{start:{line:4,column:80523},end:{line:4,column:80527}},"3798":{start:{line:4,column:80528},end:{line:4,column:80542}},"3799":{start:{line:4,column:80547},end:{line:4,column:80555}},"3800":{start:{line:4,column:80573},end:{line:4,column:80606}},"3801":{start:{line:4,column:80632},end:{line:4,column:80649}},"3802":{start:{line:4,column:80650},end:{line:4,column:80719}},"3803":{start:{line:4,column:80745},end:{line:4,column:80748}},"3804":{start:{line:4,column:80749},end:{line:4,column:80847}},"3805":{start:{line:4,column:80875},end:{line:4,column:80878}},"3806":{start:{line:4,column:80879},end:{line:4,column:80986}},"3807":{start:{line:4,column:80907},end:{line:4,column:80910}},"3808":{start:{line:4,column:80911},end:{line:4,column:80985}},"3809":{start:{line:4,column:80986},end:{line:4,column:81004}},"3810":{start:{line:4,column:81020},end:{line:4,column:81056}},"3811":{start:{line:4,column:81047},end:{line:4,column:81055}},"3812":{start:{line:4,column:81076},end:{line:4,column:81141}},"3813":{start:{line:4,column:81165},end:{line:4,column:81204}},"3814":{start:{line:4,column:81207},end:{line:4,column:81232}},"3815":{start:{line:4,column:81233},end:{line:4,column:81268}},"3816":{start:{line:4,column:81286},end:{line:4,column:81316}},"3817":{start:{line:4,column:81340},end:{line:4,column:81344}},"3818":{start:{line:4,column:81347},end:{line:4,column:81354}},"3819":{start:{line:4,column:81355},end:{line:4,column:81406}},"3820":{start:{line:4,column:81414},end:{line:4,column:81421}},"3821":{start:{line:4,column:81425},end:{line:4,column:81432}},"3822":{start:{line:4,column:81440},end:{line:4,column:82196}},"3823":{start:{line:4,column:81499},end:{line:4,column:81501}},"3824":{start:{line:4,column:81534},end:{line:4,column:81536}},"3825":{start:{line:4,column:81562},end:{line:4,column:81574}},"3826":{start:{line:4,column:81599},end:{line:4,column:81642}},"3827":{start:{line:4,column:81648},end:{line:4,column:81653}},"3828":{start:{line:4,column:81654},end:{line:4,column:81875}},"3829":{start:{line:4,column:81906},end:{line:4,column:82006}},"3830":{start:{line:4,column:82022},end:{line:4,column:82045}},"3831":{start:{line:4,column:82062},end:{line:4,column:82078}},"3832":{start:{line:4,column:82079},end:{line:4,column:82157}},"3833":{start:{line:4,column:82132},end:{line:4,column:82135}},"3834":{start:{line:4,column:82171},end:{line:4,column:82194}},"3835":{start:{line:4,column:82200},end:{line:4,column:82316}},"3836":{start:{line:4,column:82243},end:{line:4,column:82268}},"3837":{start:{line:4,column:82279},end:{line:4,column:82314}},"3838":{start:{line:4,column:82324},end:{line:4,column:82740}},"3839":{start:{line:4,column:82375},end:{line:4,column:82387}},"3840":{start:{line:4,column:82397},end:{line:4,column:82401}},"3841":{start:{line:4,column:82417},end:{line:4,column:82425}},"3842":{start:{line:4,column:82431},end:{line:4,column:82586}},"3843":{start:{line:4,column:82587},end:{line:4,column:82664}},"3844":{start:{line:4,column:82675},end:{line:4,column:82698}},"3845":{start:{line:4,column:82712},end:{line:4,column:82738}},"3846":{start:{line:4,column:82765},end:{line:4,column:82853}},"3847":{start:{line:4,column:82861},end:{line:4,column:83380}},"3848":{start:{line:4,column:82901},end:{line:4,column:82908}},"3849":{start:{line:4,column:82924},end:{line:4,column:82940}},"3850":{start:{line:4,column:82974},end:{line:4,column:83003}},"3851":{start:{line:4,column:82991},end:{line:4,column:83003}},"3852":{start:{line:4,column:83003},end:{line:4,column:83130}},"3853":{start:{line:4,column:83042},end:{line:4,column:83055}},"3854":{start:{line:4,column:83058},end:{line:4,column:83099}},"3855":{start:{line:4,column:83100},end:{line:4,column:83129}},"3856":{start:{line:4,column:83130},end:{line:4,column:83164}},"3857":{start:{line:4,column:83179},end:{line:4,column:83285}},"3858":{start:{line:4,column:83183},end:{line:4,column:83247}},"3859":{start:{line:4,column:83226},end:{line:4,column:83247}},"3860":{start:{line:4,column:83256},end:{line:4,column:83284}},"3861":{start:{line:4,column:83304},end:{line:4,column:83367}},"3862":{start:{line:4,column:83352},end:{line:4,column:83365}},"3863":{start:{line:4,column:83368},end:{line:4,column:83376}},"3864":{start:{line:4,column:83396},end:{line:4,column:84047}},"3865":{start:{line:4,column:83417},end:{line:4,column:83422}},"3866":{start:{line:4,column:83425},end:{line:4,column:83920}},"3867":{start:{line:4,column:83700},end:{line:4,column:83742}},"3868":{start:{line:4,column:83921},end:{line:4,column:83960}},"3869":{start:{line:4,column:83966},end:{line:4,column:83980}},"3870":{start:{line:4,column:83981},end:{line:4,column:84045}},"3871":{start:{line:4,column:84063},end:{line:4,column:84082}},"3872":{start:{line:4,column:84098},end:{line:4,column:84293}},"3873":{start:{line:4,column:84113},end:{line:4,column:84291}},"3874":{start:{line:4,column:84311},end:{line:4,column:84332}},"3875":{start:{line:4,column:84322},end:{line:4,column:84332}},"3876":{start:{line:4,column:84338},end:{line:4,column:84340}},"3877":{start:{line:4,column:84341},end:{line:4,column:84502}},"3878":{start:{line:4,column:84356},end:{line:4,column:84502}},"3879":{start:{line:4,column:84386},end:{line:4,column:84390}},"3880":{start:{line:4,column:84399},end:{line:4,column:84501}},"3881":{start:{line:4,column:84502},end:{line:4,column:84510}},"3882":{start:{line:4,column:84526},end:{line:4,column:84547}},"3883":{start:{line:4,column:84537},end:{line:4,column:84547}},"3884":{start:{line:4,column:84553},end:{line:4,column:84555}},"3885":{start:{line:4,column:84556},end:{line:4,column:84604}},"3886":{start:{line:4,column:84571},end:{line:4,column:84604}},"3887":{start:{line:4,column:84604},end:{line:4,column:84612}},"3888":{start:{line:4,column:84628},end:{line:4,column:84671}},"3889":{start:{line:4,column:84649},end:{line:4,column:84654}},"3890":{start:{line:4,column:84655},end:{line:4,column:84669}},"3891":{start:{line:4,column:84687},end:{line:4,column:84821}},"3892":{start:{line:4,column:84843},end:{line:4,column:84845}},"3893":{start:{line:4,column:84846},end:{line:4,column:85385}},"3894":{start:{line:4,column:85401},end:{line:4,column:85429}},"3895":{start:{line:4,column:85424},end:{line:4,column:85428}},"3896":{start:{line:4,column:85447},end:{line:4,column:85560}},"3897":{start:{line:4,column:85467},end:{line:4,column:85493}},"3898":{start:{line:4,column:85496},end:{line:4,column:85498}},"3899":{start:{line:4,column:85499},end:{line:4,column:85546}},"3900":{start:{line:4,column:85521},end:{line:4,column:85525}},"3901":{start:{line:4,column:85526},end:{line:4,column:85545}},"3902":{start:{line:4,column:85546},end:{line:4,column:85554}},"3903":{start:{line:4,column:85582},end:{line:4,column:85583}},"3904":{start:{line:4,column:85586},end:{line:4,column:85625}},"3905":{start:{line:4,column:85628},end:{line:4,column:85881}},"3906":{start:{line:4,column:85882},end:{line:4,column:85944}},"3907":{start:{line:4,column:85907},end:{line:4,column:85944}},"3908":{start:{line:4,column:85944},end:{line:4,column:85970}},"3909":{start:{line:4,column:85986},end:{line:4,column:86039}},"3910":{start:{line:4,column:86061},end:{line:4,column:86071}},"3911":{start:{line:4,column:86074},end:{line:4,column:86076}},"3912":{start:{line:4,column:86079},end:{line:4,column:86082}},"3913":{start:{line:4,column:86083},end:{line:4,column:86647}},"3914":{start:{line:4,column:86098},end:{line:4,column:86188}},"3915":{start:{line:4,column:86107},end:{line:4,column:86134}},"3916":{start:{line:4,column:86139},end:{line:4,column:86174}},"3917":{start:{line:4,column:86154},end:{line:4,column:86174}},"3918":{start:{line:4,column:86174},end:{line:4,column:86187}},"3919":{start:{line:4,column:86188},end:{line:4,column:86620}},"3920":{start:{line:4,column:86194},end:{line:4,column:86522}},"3921":{start:{line:4,column:86200},end:{line:4,column:86210}},"3922":{start:{line:4,column:86216},end:{line:4,column:86217}},"3923":{start:{line:4,column:86218},end:{line:4,column:86302}},"3924":{start:{line:4,column:86308},end:{line:4,column:86322}},"3925":{start:{line:4,column:86323},end:{line:4,column:86334}},"3926":{start:{line:4,column:86340},end:{line:4,column:86351}},"3927":{start:{line:4,column:86354},end:{line:4,column:86370}},"3928":{start:{line:4,column:86371},end:{line:4,column:86521}},"3929":{start:{line:4,column:86459},end:{line:4,column:86465}},"3930":{start:{line:4,column:86466},end:{line:4,column:86520}},"3931":{start:{line:4,column:86528},end:{line:4,column:86538}},"3932":{start:{line:4,column:86539},end:{line:4,column:86619}},"3933":{start:{line:4,column:86544},end:{line:4,column:86619}},"3934":{start:{line:4,column:86554},end:{line:4,column:86555}},"3935":{start:{line:4,column:86578},end:{line:4,column:86582}},"3936":{start:{line:4,column:86583},end:{line:4,column:86618}},"3937":{start:{line:4,column:86620},end:{line:4,column:86646}},"3938":{start:{line:4,column:86647},end:{line:4,column:86652}},"3939":{start:{line:4,column:86670},end:{line:4,column:86847}},"3940":{start:{line:4,column:86693},end:{line:4,column:86761}},"3941":{start:{line:4,column:86752},end:{line:4,column:86761}},"3942":{start:{line:4,column:86767},end:{line:4,column:86778}},"3943":{start:{line:4,column:86779},end:{line:4,column:86846}},"3944":{start:{line:4,column:86869},end:{line:4,column:86870}},"3945":{start:{line:4,column:86873},end:{line:4,column:86877}},"3946":{start:{line:4,column:86878},end:{line:4,column:86993}},"3947":{start:{line:4,column:86888},end:{line:4,column:86898}},"3948":{start:{line:4,column:86915},end:{line:4,column:86919}},"3949":{start:{line:4,column:86920},end:{line:4,column:86992}},"3950":{start:{line:4,column:87009},end:{line:4,column:87036}},"3951":{start:{line:4,column:87060},end:{line:4,column:87071}},"3952":{start:{line:4,column:87072},end:{line:4,column:87122}},"3953":{start:{line:4,column:87094},end:{line:4,column:87107}},"3954":{start:{line:4,column:87146},end:{line:4,column:87162}},"3955":{start:{line:4,column:87163},end:{line:4,column:87229}},"3956":{start:{line:4,column:87192},end:{line:4,column:87209}},"3957":{start:{line:4,column:87253},end:{line:4,column:87267}},"3958":{start:{line:4,column:87268},end:{line:4,column:87324}},"3959":{start:{line:4,column:87293},end:{line:4,column:87306}},"3960":{start:{line:4,column:87354},end:{line:4,column:87589}},"3961":{start:{line:4,column:87376},end:{line:4,column:87416}},"3962":{start:{line:4,column:87422},end:{line:4,column:87507}},"3963":{start:{line:4,column:87508},end:{line:4,column:87588}},"3964":{start:{line:4,column:87589},end:{line:4,column:87614}},"3965":{start:{line:4,column:87620},end:{line:4,column:87631}},"3966":{start:{line:4,column:87632},end:{line:4,column:87658}},"3967":{start:{line:4,column:87664},end:{line:4,column:87675}},"3968":{start:{line:4,column:87676},end:{line:4,column:87702}},"3969":{start:{line:4,column:87744},end:{line:4,column:87747}},"3970":{start:{line:4,column:87750},end:{line:4,column:87916}},"3971":{start:{line:4,column:87958},end:{line:4,column:87961}},"3972":{start:{line:4,column:87964},end:{line:4,column:88136}},"3973":{start:{line:4,column:87986},end:{line:4,column:88118}},"3974":{start:{line:4,column:88032},end:{line:4,column:88046}},"3975":{start:{line:4,column:88047},end:{line:4,column:88063}},"3976":{start:{line:4,column:88063},end:{line:4,column:88117}},"3977":{start:{line:4,column:88073},end:{line:4,column:88074}},"3978":{start:{line:4,column:88091},end:{line:4,column:88117}},"3979":{start:{line:4,column:88124},end:{line:4,column:88136}},"3980":{start:{line:4,column:88136},end:{line:4,column:88183}},"3981":{start:{line:4,column:88219},end:{line:4,column:88222}},"3982":{start:{line:4,column:88225},end:{line:4,column:88228}},"3983":{start:{line:4,column:88231},end:{line:4,column:88245}},"3984":{start:{line:4,column:88246},end:{line:4,column:88286}},"3985":{start:{line:4,column:88294},end:{line:4,column:88296}},"3986":{start:{line:4,column:88318},end:{line:4,column:88354}},"3987":{start:{line:4,column:88362},end:{line:4,column:88554}},"3988":{start:{line:4,column:88383},end:{line:4,column:88397}},"3989":{start:{line:4,column:88406},end:{line:4,column:88421}},"3990":{start:{line:4,column:88439},end:{line:4,column:88468}},"3991":{start:{line:4,column:88451},end:{line:4,column:88467}},"3992":{start:{line:4,column:88487},end:{line:4,column:88541}},"3993":{start:{line:4,column:88542},end:{line:4,column:88550}},"3994":{start:{line:4,column:88562},end:{line:4,column:88571}},"3995":{start:{line:4,column:88587},end:{line:4,column:88623}},"3996":{start:{line:4,column:88639},end:{line:4,column:88680}},"3997":{start:{line:4,column:88688},end:{line:4,column:88697}},"3998":{start:{line:4,column:88713},end:{line:4,column:88758}},"3999":{start:{line:4,column:88766},end:{line:4,column:89423}},"4000":{start:{line:4,column:88807},end:{line:4,column:88809}},"4001":{start:{line:4,column:88815},end:{line:4,column:88817}},"4002":{start:{line:4,column:88830},end:{line:4,column:88880}},"4003":{start:{line:4,column:88850},end:{line:4,column:88878}},"4004":{start:{line:4,column:88890},end:{line:4,column:88913}},"4005":{start:{line:4,column:88923},end:{line:4,column:88928}},"4006":{start:{line:4,column:88962},end:{line:4,column:88989}},"4007":{start:{line:4,column:88982},end:{line:4,column:88989}},"4008":{start:{line:4,column:88995},end:{line:4,column:88997}},"4009":{start:{line:4,column:88998},end:{line:4,column:89159}},"4010":{start:{line:4,column:89032},end:{line:4,column:89051}},"4011":{start:{line:4,column:89052},end:{line:4,column:89158}},"4012":{start:{line:4,column:89061},end:{line:4,column:89071}},"4013":{start:{line:4,column:89076},end:{line:4,column:89158}},"4014":{start:{line:4,column:89092},end:{line:4,column:89147}},"4015":{start:{line:4,column:89112},end:{line:4,column:89145}},"4016":{start:{line:4,column:89148},end:{line:4,column:89157}},"4017":{start:{line:4,column:89165},end:{line:4,column:89198}},"4018":{start:{line:4,column:89170},end:{line:4,column:89197}},"4019":{start:{line:4,column:89199},end:{line:4,column:89294}},"4020":{start:{line:4,column:89224},end:{line:4,column:89227}},"4021":{start:{line:4,column:89240},end:{line:4,column:89254}},"4022":{start:{line:4,column:89312},end:{line:4,column:89341}},"4023":{start:{line:4,column:89324},end:{line:4,column:89340}},"4024":{start:{line:4,column:89360},end:{line:4,column:89410}},"4025":{start:{line:4,column:89411},end:{line:4,column:89419}},"4026":{start:{line:4,column:89427},end:{line:4,column:89436}},"4027":{start:{line:4,column:89451},end:{line:4,column:89488}},"4028":{start:{line:4,column:89465},end:{line:4,column:89467}},"4029":{start:{line:4,column:89468},end:{line:4,column:89486}},"4030":{start:{line:4,column:89504},end:{line:4,column:89528}},"4031":{start:{line:4,column:89536},end:{line:4,column:89538}},"4032":{start:{line:4,column:89546},end:{line:4,column:93299}},"4033":{start:{line:4,column:89573},end:{line:4,column:89575}},"4034":{start:{line:4,column:89587},end:{line:4,column:89589}},"4035":{start:{line:4,column:89608},end:{line:4,column:89610}},"4036":{start:{line:4,column:89618},end:{line:4,column:89620}},"4037":{start:{line:4,column:89642},end:{line:4,column:89647}},"4038":{start:{line:4,column:89667},end:{line:4,column:89672}},"4039":{start:{line:4,column:89689},end:{line:4,column:89694}},"4040":{start:{line:4,column:89715},end:{line:4,column:89720}},"4041":{start:{line:4,column:89732},end:{line:4,column:89733}},"4042":{start:{line:4,column:89750},end:{line:4,column:89754}},"4043":{start:{line:4,column:89768},end:{line:4,column:89775}},"4044":{start:{line:4,column:89796},end:{line:4,column:89803}},"4045":{start:{line:4,column:89824},end:{line:4,column:89826}},"4046":{start:{line:4,column:89837},end:{line:4,column:89843}},"4047":{start:{line:4,column:89859},end:{line:4,column:89961}},"4048":{start:{line:4,column:89978},end:{line:4,column:90000}},"4049":{start:{line:4,column:90016},end:{line:4,column:90018}},"4050":{start:{line:4,column:90030},end:{line:4,column:90032}},"4051":{start:{line:4,column:90053},end:{line:4,column:90058}},"4052":{start:{line:4,column:90074},end:{line:4,column:90147}},"4053":{start:{line:4,column:90143},end:{line:4,column:90145}},"4054":{start:{line:4,column:90162},end:{line:4,column:90181}},"4055":{start:{line:4,column:90201},end:{line:4,column:90302}},"4056":{start:{line:4,column:90224},end:{line:4,column:90269}},"4057":{start:{line:4,column:90260},end:{line:4,column:90266}},"4058":{start:{line:4,column:90285},end:{line:4,column:90300}},"4059":{start:{line:4,column:90313},end:{line:4,column:90318}},"4060":{start:{line:4,column:90336},end:{line:4,column:90340}},"4061":{start:{line:4,column:90356},end:{line:4,column:90377}},"4062":{start:{line:4,column:90393},end:{line:4,column:90423}},"4063":{start:{line:4,column:90453},end:{line:4,column:91027}},"4064":{start:{line:4,column:90492},end:{line:4,column:90521}},"4065":{start:{line:4,column:90527},end:{line:4,column:90542}},"4066":{start:{line:4,column:90543},end:{line:4,column:90604}},"4067":{start:{line:4,column:90582},end:{line:4,column:90584}},"4068":{start:{line:4,column:90585},end:{line:4,column:90603}},"4069":{start:{line:4,column:90610},end:{line:4,column:90710}},"4070":{start:{line:4,column:90716},end:{line:4,column:90751}},"4071":{start:{line:4,column:90754},end:{line:4,column:90767}},"4072":{start:{line:4,column:90770},end:{line:4,column:90788}},"4073":{start:{line:4,column:90791},end:{line:4,column:90815}},"4074":{start:{line:4,column:90818},end:{line:4,column:90841}},"4075":{start:{line:4,column:90842},end:{line:4,column:91025}},"4076":{start:{line:4,column:90892},end:{line:4,column:90969}},"4077":{start:{line:4,column:91035},end:{line:4,column:91090}},"4078":{start:{line:4,column:91099},end:{line:4,column:91228}},"4079":{start:{line:4,column:91238},end:{line:4,column:91505}},"4080":{start:{line:4,column:91243},end:{line:4,column:91308}},"4081":{start:{line:4,column:91264},end:{line:4,column:91308}},"4082":{start:{line:4,column:91314},end:{line:4,column:91321}},"4083":{start:{line:4,column:91322},end:{line:4,column:91504}},"4084":{start:{line:4,column:91326},end:{line:4,column:91365}},"4085":{start:{line:4,column:91374},end:{line:4,column:91503}},"4086":{start:{line:4,column:91520},end:{line:4,column:91643}},"4087":{start:{line:4,column:91649},end:{line:4,column:91650}},"4088":{start:{line:4,column:91651},end:{line:4,column:91780}},"4089":{start:{line:4,column:91686},end:{line:4,column:91716}},"4090":{start:{line:4,column:91716},end:{line:4,column:91779}},"4091":{start:{line:4,column:91720},end:{line:4,column:91742}},"4092":{start:{line:4,column:91751},end:{line:4,column:91778}},"4093":{start:{line:4,column:91799},end:{line:4,column:91875}},"4094":{start:{line:4,column:91881},end:{line:4,column:91883}},"4095":{start:{line:4,column:91884},end:{line:4,column:92159}},"4096":{start:{line:4,column:91912},end:{line:4,column:91933}},"4097":{start:{line:4,column:91934},end:{line:4,column:91973}},"4098":{start:{line:4,column:91973},end:{line:4,column:92079}},"4099":{start:{line:4,column:92008},end:{line:4,column:92031}},"4100":{start:{line:4,column:92022},end:{line:4,column:92031}},"4101":{start:{line:4,column:92037},end:{line:4,column:92065}},"4102":{start:{line:4,column:92066},end:{line:4,column:92078}},"4103":{start:{line:4,column:92079},end:{line:4,column:92158}},"4104":{start:{line:4,column:92152},end:{line:4,column:92158}},"4105":{start:{line:4,column:92159},end:{line:4,column:92333}},"4106":{start:{line:4,column:92360},end:{line:4,column:92454}},"4107":{start:{line:4,column:92396},end:{line:4,column:92401}},"4108":{start:{line:4,column:92404},end:{line:4,column:92423}},"4109":{start:{line:4,column:92423},end:{line:4,column:92429}},"4110":{start:{line:4,column:92435},end:{line:4,column:92454}},"4111":{start:{line:4,column:92475},end:{line:4,column:92476}},"4112":{start:{line:4,column:92477},end:{line:4,column:92519}},"4113":{start:{line:4,column:92540},end:{line:4,column:92541}},"4114":{start:{line:4,column:92542},end:{line:4,column:92580}},"4115":{start:{line:4,column:92599},end:{line:4,column:92627}},"4116":{start:{line:4,column:92627},end:{line:4,column:92681}},"4117":{start:{line:4,column:92631},end:{line:4,column:92642}},"4118":{start:{line:4,column:92652},end:{line:4,column:92680}},"4119":{start:{line:4,column:92681},end:{line:4,column:92747}},"4120":{start:{line:4,column:92742},end:{line:4,column:92746}},"4121":{start:{line:4,column:92762},end:{line:4,column:92937}},"4122":{start:{line:4,column:92782},end:{line:4,column:92937}},"4123":{start:{line:4,column:92786},end:{line:4,column:92868}},"4124":{start:{line:4,column:92820},end:{line:4,column:92823}},"4125":{start:{line:4,column:92856},end:{line:4,column:92867}},"4126":{start:{line:4,column:92877},end:{line:4,column:92936}},"4127":{start:{line:4,column:92951},end:{line:4,column:93021}},"4128":{start:{line:4,column:92993},end:{line:4,column:93021}},"4129":{start:{line:4,column:93032},end:{line:4,column:93071}},"4130":{start:{line:4,column:93051},end:{line:4,column:93071}},"4131":{start:{line:4,column:93077},end:{line:4,column:93091}},"4132":{start:{line:4,column:93092},end:{line:4,column:93128}},"4133":{start:{line:4,column:93145},end:{line:4,column:93170}},"4134":{start:{line:4,column:93188},end:{line:4,column:93217}},"4135":{start:{line:4,column:93200},end:{line:4,column:93216}},"4136":{start:{line:4,column:93236},end:{line:4,column:93286}},"4137":{start:{line:4,column:93287},end:{line:4,column:93295}},"4138":{start:{line:4,column:93323},end:{line:4,column:93335}},"4139":{start:{line:4,column:93336},end:{line:4,column:93355}},"4140":{start:{line:4,column:93383},end:{line:4,column:93386}},"4141":{start:{line:4,column:93389},end:{line:4,column:93393}},"4142":{start:{line:4,column:93394},end:{line:4,column:93441}},"4143":{start:{line:4,column:93414},end:{line:4,column:93417}},"4144":{start:{line:4,column:93420},end:{line:4,column:93424}},"4145":{start:{line:4,column:93425},end:{line:4,column:93440}},"4146":{start:{line:4,column:93441},end:{line:4,column:93450}},"4147":{start:{line:4,column:93465},end:{line:4,column:93481}},"4148":{start:{line:4,column:93489},end:{line:4,column:93716}},"4149":{start:{line:4,column:93541},end:{line:4,column:93554}},"4150":{start:{line:4,column:93557},end:{line:4,column:93570}},"4151":{start:{line:4,column:93573},end:{line:4,column:93587}},"4152":{start:{line:4,column:93588},end:{line:4,column:93674}},"4153":{start:{line:4,column:93604},end:{line:4,column:93618}},"4154":{start:{line:4,column:93619},end:{line:4,column:93652}},"4155":{start:{line:4,column:93658},end:{line:4,column:93674}},"4156":{start:{line:4,column:93685},end:{line:4,column:93714}},"4157":{start:{line:4,column:93740},end:{line:4,column:93800}},"4158":{start:{line:4,column:93832},end:{line:4,column:93833}},"4159":{start:{line:4,column:93836},end:{line:4,column:93846}},"4160":{start:{line:4,column:93849},end:{line:4,column:93855}},"4161":{start:{line:4,column:93856},end:{line:4,column:94900}},"4162":{start:{line:4,column:93877},end:{line:4,column:93882}},"4163":{start:{line:4,column:93888},end:{line:4,column:93898}},"4164":{start:{line:4,column:93899},end:{line:4,column:94429}},"4165":{start:{line:4,column:93930},end:{line:4,column:93937}},"4166":{start:{line:4,column:93940},end:{line:4,column:93944}},"4167":{start:{line:4,column:93947},end:{line:4,column:93960}},"4168":{start:{line:4,column:93961},end:{line:4,column:94008}},"4169":{start:{line:4,column:93971},end:{line:4,column:93999}},"4170":{start:{line:4,column:93999},end:{line:4,column:94007}},"4171":{start:{line:4,column:94014},end:{line:4,column:94021}},"4172":{start:{line:4,column:94024},end:{line:4,column:94028}},"4173":{start:{line:4,column:94031},end:{line:4,column:94044}},"4174":{start:{line:4,column:94045},end:{line:4,column:94096}},"4175":{start:{line:4,column:94055},end:{line:4,column:94087}},"4176":{start:{line:4,column:94087},end:{line:4,column:94095}},"4177":{start:{line:4,column:94102},end:{line:4,column:94108}},"4178":{start:{line:4,column:94111},end:{line:4,column:94117}},"4179":{start:{line:4,column:94121},end:{line:4,column:94127}},"4180":{start:{line:4,column:94128},end:{line:4,column:94263}},"4181":{start:{line:4,column:94155},end:{line:4,column:94161}},"4182":{start:{line:4,column:94162},end:{line:4,column:94254}},"4183":{start:{line:4,column:94254},end:{line:4,column:94262}},"4184":{start:{line:4,column:94263},end:{line:4,column:94428}},"4185":{start:{line:4,column:94306},end:{line:4,column:94333}},"4186":{start:{line:4,column:94338},end:{line:4,column:94428}},"4187":{start:{line:4,column:94351},end:{line:4,column:94376}},"4188":{start:{line:4,column:94388},end:{line:4,column:94404}},"4189":{start:{line:4,column:94405},end:{line:4,column:94427}},"4190":{start:{line:4,column:94429},end:{line:4,column:94460}},"4191":{start:{line:4,column:94440},end:{line:4,column:94460}},"4192":{start:{line:4,column:94466},end:{line:4,column:94900}},"4193":{start:{line:4,column:94478},end:{line:4,column:94483}},"4194":{start:{line:4,column:94489},end:{line:4,column:94509}},"4195":{start:{line:4,column:94510},end:{line:4,column:94518}},"4196":{start:{line:4,column:94524},end:{line:4,column:94532}},"4197":{start:{line:4,column:94533},end:{line:4,column:94848}},"4198":{start:{line:4,column:94560},end:{line:4,column:94567}},"4199":{start:{line:4,column:94570},end:{line:4,column:94577}},"4200":{start:{line:4,column:94580},end:{line:4,column:94593}},"4201":{start:{line:4,column:94594},end:{line:4,column:94847}},"4202":{start:{line:4,column:94603},end:{line:4,column:94642}},"4203":{start:{line:4,column:94647},end:{line:4,column:94674}},"4204":{start:{line:4,column:94680},end:{line:4,column:94686}},"4205":{start:{line:4,column:94687},end:{line:4,column:94846}},"4206":{start:{line:4,column:94702},end:{line:4,column:94740}},"4207":{start:{line:4,column:94745},end:{line:4,column:94846}},"4208":{start:{line:4,column:94758},end:{line:4,column:94803}},"4209":{start:{line:4,column:94814},end:{line:4,column:94820}},"4210":{start:{line:4,column:94821},end:{line:4,column:94845}},"4211":{start:{line:4,column:94848},end:{line:4,column:94899}},"4212":{start:{line:4,column:94862},end:{line:4,column:94899}},"4213":{start:{line:4,column:94900},end:{line:4,column:94936}},"4214":{start:{line:4,column:94911},end:{line:4,column:94936}},"4215":{start:{line:4,column:94936},end:{line:4,column:94965}},"4216":{start:{line:4,column:94951},end:{line:4,column:94963}},"4217":{start:{line:4,column:94987},end:{line:4,column:95055}},"4218":{start:{line:4,column:95079},end:{line:4,column:95157}},"4219":{start:{line:4,column:95099},end:{line:4,column:95118}},"4220":{start:{line:4,column:95129},end:{line:4,column:95142}},"4221":{start:{line:4,column:95143},end:{line:4,column:95156}},"4222":{start:{line:4,column:95185},end:{line:4,column:95192}},"4223":{start:{line:4,column:95193},end:{line:4,column:95234}},"4224":{start:{line:4,column:95203},end:{line:4,column:95204}},"4225":{start:{line:4,column:95214},end:{line:4,column:95234}},"4226":{start:{line:4,column:95234},end:{line:4,column:95242}},"4227":{start:{line:4,column:95250},end:{line:4,column:95831}},"4228":{start:{line:4,column:95262},end:{line:4,column:95269}},"4229":{start:{line:4,column:95276},end:{line:4,column:95282}},"4230":{start:{line:4,column:95290},end:{line:4,column:95314}},"4231":{start:{line:4,column:95325},end:{line:4,column:95350}},"4232":{start:{line:4,column:95341},end:{line:4,column:95350}},"4233":{start:{line:4,column:95356},end:{line:4,column:95373}},"4234":{start:{line:4,column:95374},end:{line:4,column:95502}},"4235":{start:{line:4,column:95510},end:{line:4,column:95534}},"4236":{start:{line:4,column:95544},end:{line:4,column:95710}},"4237":{start:{line:4,column:95572},end:{line:4,column:95589}},"4238":{start:{line:4,column:95590},end:{line:4,column:95632}},"4239":{start:{line:4,column:95638},end:{line:4,column:95648}},"4240":{start:{line:4,column:95649},end:{line:4,column:95675}},"4241":{start:{line:4,column:95664},end:{line:4,column:95675}},"4242":{start:{line:4,column:95675},end:{line:4,column:95685}},"4243":{start:{line:4,column:95691},end:{line:4,column:95710}},"4244":{start:{line:4,column:95722},end:{line:4,column:95829}},"4245":{start:{line:4,column:95748},end:{line:4,column:95829}},"4246":{start:{line:4,column:95785},end:{line:4,column:95795}},"4247":{start:{line:4,column:95796},end:{line:4,column:95828}},"4248":{start:{line:4,column:95811},end:{line:4,column:95828}},"4249":{start:{line:4,column:95861},end:{line:4,column:95881}},"4250":{start:{line:4,column:95887},end:{line:4,column:95890}},"4251":{start:{line:4,column:95893},end:{line:4,column:95896}},"4252":{start:{line:4,column:95899},end:{line:4,column:95913}},"4253":{start:{line:4,column:95914},end:{line:4,column:95951}},"4254":{start:{line:4,column:95981},end:{line:4,column:96001}},"4255":{start:{line:4,column:96007},end:{line:4,column:96010}},"4256":{start:{line:4,column:96013},end:{line:4,column:96016}},"4257":{start:{line:4,column:96019},end:{line:4,column:96033}},"4258":{start:{line:4,column:96034},end:{line:4,column:96071}},"4259":{start:{line:4,column:96089},end:{line:4,column:96109}},"4260":{start:{line:4,column:96115},end:{line:4,column:96118}},"4261":{start:{line:4,column:96121},end:{line:4,column:96125}},"4262":{start:{line:4,column:96128},end:{line:4,column:96144}},"4263":{start:{line:4,column:96147},end:{line:4,column:96170}},"4264":{start:{line:4,column:96173},end:{line:4,column:96174}},"4265":{start:{line:4,column:96175},end:{line:4,column:96402}},"4266":{start:{line:4,column:96195},end:{line:4,column:96202}},"4267":{start:{line:4,column:96203},end:{line:4,column:96346}},"4268":{start:{line:4,column:96207},end:{line:4,column:96332}},"4269":{start:{line:4,column:96244},end:{line:4,column:96247}},"4270":{start:{line:4,column:96250},end:{line:4,column:96257}},"4271":{start:{line:4,column:96260},end:{line:4,column:96270}},"4272":{start:{line:4,column:96273},end:{line:4,column:96282}},"4273":{start:{line:4,column:96285},end:{line:4,column:96313}},"4274":{start:{line:4,column:96314},end:{line:4,column:96331}},"4275":{start:{line:4,column:96341},end:{line:4,column:96345}},"4276":{start:{line:4,column:96352},end:{line:4,column:96402}},"4277":{start:{line:4,column:96373},end:{line:4,column:96380}},"4278":{start:{line:4,column:96381},end:{line:4,column:96401}},"4279":{start:{line:4,column:96410},end:{line:4,column:96558}},"4280":{start:{line:4,column:96463},end:{line:4,column:96511}},"4281":{start:{line:4,column:96525},end:{line:4,column:96556}},"4282":{start:{line:4,column:96576},end:{line:4,column:96584}},"4283":{start:{line:4,column:96592},end:{line:4,column:96717}},"4284":{start:{line:4,column:96656},end:{line:4,column:96715}},"4285":{start:{line:4,column:96757},end:{line:4,column:96777}},"4286":{start:{line:4,column:96783},end:{line:4,column:96786}},"4287":{start:{line:4,column:96789},end:{line:4,column:96792}},"4288":{start:{line:4,column:96795},end:{line:4,column:96805}},"4289":{start:{line:4,column:96808},end:{line:4,column:96811}},"4290":{start:{line:4,column:96814},end:{line:4,column:96833}},"4291":{start:{line:4,column:96837},end:{line:4,column:96848}},"4292":{start:{line:4,column:96849},end:{line:4,column:96939}},"4293":{start:{line:4,column:96947},end:{line:4,column:97860}},"4294":{start:{line:4,column:97017},end:{line:4,column:97023}},"4295":{start:{line:4,column:97041},end:{line:4,column:97043}},"4296":{start:{line:4,column:97063},end:{line:4,column:97126}},"4297":{start:{line:4,column:97140},end:{line:4,column:97171}},"4298":{start:{line:4,column:97178},end:{line:4,column:97214}},"4299":{start:{line:4,column:97233},end:{line:4,column:97238}},"4300":{start:{line:4,column:97239},end:{line:4,column:97349}},"4301":{start:{line:4,column:97360},end:{line:4,column:97452}},"4302":{start:{line:4,column:97471},end:{line:4,column:97521}},"4303":{start:{line:4,column:97522},end:{line:4,column:97613}},"4304":{start:{line:4,column:97625},end:{line:4,column:97635}},"4305":{start:{line:4,column:97653},end:{line:4,column:97684}},"4306":{start:{line:4,column:97693},end:{line:4,column:97717}},"4307":{start:{line:4,column:97734},end:{line:4,column:97817}},"4308":{start:{line:4,column:97759},end:{line:4,column:97817}},"4309":{start:{line:4,column:97769},end:{line:4,column:97770}},"4310":{start:{line:4,column:97789},end:{line:4,column:97817}},"4311":{start:{line:4,column:97830},end:{line:4,column:97858}},"4312":{start:{line:4,column:97882},end:{line:4,column:97889}},"4313":{start:{line:4,column:97892},end:{line:4,column:97896}},"4314":{start:{line:4,column:97897},end:{line:4,column:98328}},"4315":{start:{line:4,column:97907},end:{line:4,column:97910}},"4316":{start:{line:4,column:97913},end:{line:4,column:97917}},"4317":{start:{line:4,column:97920},end:{line:4,column:97924}},"4318":{start:{line:4,column:97927},end:{line:4,column:97930}},"4319":{start:{line:4,column:97933},end:{line:4,column:97940}},"4320":{start:{line:4,column:97941},end:{line:4,column:98046}},"4321":{start:{line:4,column:97977},end:{line:4,column:97984}},"4322":{start:{line:4,column:97985},end:{line:4,column:98015}},"4323":{start:{line:4,column:98021},end:{line:4,column:98046}},"4324":{start:{line:4,column:98052},end:{line:4,column:98068}},"4325":{start:{line:4,column:98069},end:{line:4,column:98314}},"4326":{start:{line:4,column:98135},end:{line:4,column:98139}},"4327":{start:{line:4,column:98142},end:{line:4,column:98154}},"4328":{start:{line:4,column:98155},end:{line:4,column:98313}},"4329":{start:{line:4,column:98175},end:{line:4,column:98178}},"4330":{start:{line:4,column:98181},end:{line:4,column:98188}},"4331":{start:{line:4,column:98189},end:{line:4,column:98312}},"4332":{start:{line:4,column:98201},end:{line:4,column:98208}},"4333":{start:{line:4,column:98211},end:{line:4,column:98220}},"4334":{start:{line:4,column:98223},end:{line:4,column:98256}},"4335":{start:{line:4,column:98257},end:{line:4,column:98274}},"4336":{start:{line:4,column:98280},end:{line:4,column:98312}},"4337":{start:{line:4,column:98323},end:{line:4,column:98327}},"4338":{start:{line:4,column:98346},end:{line:4,column:98357}},"4339":{start:{line:4,column:98375},end:{line:4,column:98397}},"4340":{start:{line:4,column:98390},end:{line:4,column:98397}},"4341":{start:{line:4,column:98403},end:{line:4,column:98406}},"4342":{start:{line:4,column:98409},end:{line:4,column:98413}},"4343":{start:{line:4,column:98416},end:{line:4,column:98430}},"4344":{start:{line:4,column:98431},end:{line:4,column:98579}},"4345":{start:{line:4,column:98513},end:{line:4,column:98518}},"4346":{start:{line:4,column:98519},end:{line:4,column:98578}},"4347":{start:{line:4,column:98597},end:{line:4,column:98619}},"4348":{start:{line:4,column:98612},end:{line:4,column:98619}},"4349":{start:{line:4,column:98625},end:{line:4,column:98628}},"4350":{start:{line:4,column:98631},end:{line:4,column:98635}},"4351":{start:{line:4,column:98638},end:{line:4,column:98652}},"4352":{start:{line:4,column:98653},end:{line:4,column:98713}},"4353":{start:{line:4,column:98731},end:{line:4,column:98745}},"4354":{start:{line:4,column:98763},end:{line:4,column:98777}},"4355":{start:{line:4,column:98795},end:{line:4,column:98809}},"4356":{start:{line:4,column:98835},end:{line:4,column:98838}},"4357":{start:{line:4,column:98841},end:{line:4,column:98845}},"4358":{start:{line:4,column:98846},end:{line:4,column:98896}},"4359":{start:{line:4,column:98866},end:{line:4,column:98869}},"4360":{start:{line:4,column:98872},end:{line:4,column:98876}},"4361":{start:{line:4,column:98877},end:{line:4,column:98895}},"4362":{start:{line:4,column:98896},end:{line:4,column:98905}},"4363":{start:{line:4,column:98929},end:{line:4,column:98958}},"4364":{start:{line:4,column:98986},end:{line:4,column:98989}},"4365":{start:{line:4,column:98992},end:{line:4,column:98996}},"4366":{start:{line:4,column:98999},end:{line:4,column:99002}},"4367":{start:{line:4,column:99005},end:{line:4,column:99056}},"4368":{start:{line:4,column:99057},end:{line:4,column:99224}},"4369":{start:{line:4,column:99073},end:{line:4,column:99093}},"4370":{start:{line:4,column:99094},end:{line:4,column:99223}},"4371":{start:{line:4,column:99125},end:{line:4,column:99167}},"4372":{start:{line:4,column:99168},end:{line:4,column:99222}},"4373":{start:{line:4,column:99204},end:{line:4,column:99220}},"4374":{start:{line:4,column:99224},end:{line:4,column:99247}},"4375":{start:{line:4,column:99271},end:{line:4,column:99327}},"4376":{start:{line:4,column:99302},end:{line:4,column:99306}},"4377":{start:{line:4,column:99307},end:{line:4,column:99326}},"4378":{start:{line:4,column:99327},end:{line:4,column:99343}},"4379":{start:{line:4,column:99364},end:{line:4,column:99367}},"4380":{start:{line:4,column:99370},end:{line:4,column:99373}},"4381":{start:{line:4,column:99376},end:{line:4,column:99381}},"4382":{start:{line:4,column:99382},end:{line:4,column:99575}},"4383":{start:{line:4,column:99597},end:{line:4,column:99623}},"4384":{start:{line:4,column:99651},end:{line:4,column:99654}},"4385":{start:{line:4,column:99657},end:{line:4,column:99661}},"4386":{start:{line:4,column:99664},end:{line:4,column:99667}},"4387":{start:{line:4,column:99670},end:{line:4,column:99713}},"4388":{start:{line:4,column:99714},end:{line:4,column:99755}},"4389":{start:{line:4,column:99776},end:{line:4,column:99779}},"4390":{start:{line:4,column:99782},end:{line:4,column:99787}},"4391":{start:{line:4,column:99788},end:{line:4,column:99814}},"4392":{start:{line:4,column:99836},end:{line:4,column:99862}},"4393":{start:{line:4,column:99870},end:{line:4,column:99907}},"4394":{start:{line:4,column:99884},end:{line:4,column:99906}},"4395":{start:{line:4,column:99922},end:{line:4,column:99932}},"4396":{start:{line:4,column:99958},end:{line:4,column:99961}},"4397":{start:{line:4,column:99964},end:{line:4,column:99968}},"4398":{start:{line:4,column:99969},end:{line:4,column:100019}},"4399":{start:{line:4,column:99989},end:{line:4,column:99992}},"4400":{start:{line:4,column:99995},end:{line:4,column:99999}},"4401":{start:{line:4,column:100000},end:{line:4,column:100018}},"4402":{start:{line:4,column:100019},end:{line:4,column:100028}},"4403":{start:{line:4,column:100036},end:{line:4,column:100042}},"4404":{start:{line:4,column:100064},end:{line:4,column:100087}},"4405":{start:{line:4,column:100090},end:{line:4,column:100133}},"4406":{start:{line:4,column:100134},end:{line:4,column:100157}},"4407":{start:{line:4,column:100165},end:{line:4,column:100994}},"4408":{start:{line:4,column:100998},end:{line:4,column:101000}},"4409":{start:{line:4,column:101022},end:{line:4,column:101027}},"4410":{start:{line:4,column:101030},end:{line:4,column:101035}},"4411":{start:{line:4,column:101036},end:{line:4,column:101050}},"4412":{start:{line:4,column:101041},end:{line:4,column:101050}},"4413":{start:{line:4,column:101056},end:{line:4,column:101071}},"4414":{start:{line:4,column:101072},end:{line:4,column:101094}},"4415":{start:{line:4,column:101085},end:{line:4,column:101094}},"4416":{start:{line:4,column:101094},end:{line:4,column:101116}},"4417":{start:{line:4,column:101106},end:{line:4,column:101116}},"4418":{start:{line:4,column:101116},end:{line:4,column:101135}},"4419":{start:{line:4,column:101151},end:{line:4,column:101247}},"4420":{start:{line:4,column:101255},end:{line:4,column:102074}},"4421":{start:{line:4,column:101268},end:{line:4,column:102064}},"4422":{start:{line:4,column:102090},end:{line:4,column:102130}},"4423":{start:{line:4,column:102138},end:{line:4,column:102145}},"4424":{start:{line:4,column:102153},end:{line:4,column:102155}},"4425":{start:{line:4,column:102171},end:{line:4,column:102229}},"4426":{start:{line:4,column:102255},end:{line:4,column:102258}},"4427":{start:{line:4,column:102261},end:{line:4,column:102264}},"4428":{start:{line:4,column:102267},end:{line:4,column:102270}},"4429":{start:{line:4,column:102271},end:{line:4,column:102301}},"4430":{start:{line:4,column:102327},end:{line:4,column:102330}},"4431":{start:{line:4,column:102333},end:{line:4,column:102336}},"4432":{start:{line:4,column:102339},end:{line:4,column:102342}},"4433":{start:{line:4,column:102343},end:{line:4,column:102397}},"4434":{start:{line:4,column:102431},end:{line:4,column:102433}},"4435":{start:{line:4,column:102436},end:{line:4,column:102440}},"4436":{start:{line:4,column:102441},end:{line:4,column:102711}},"4437":{start:{line:4,column:102512},end:{line:4,column:102526}},"4438":{start:{line:4,column:102529},end:{line:4,column:102556}},"4439":{start:{line:4,column:102557},end:{line:4,column:102651}},"4440":{start:{line:4,column:102572},end:{line:4,column:102651}},"4441":{start:{line:4,column:102582},end:{line:4,column:102583}},"4442":{start:{line:4,column:102607},end:{line:4,column:102611}},"4443":{start:{line:4,column:102614},end:{line:4,column:102620}},"4444":{start:{line:4,column:102621},end:{line:4,column:102650}},"4445":{start:{line:4,column:102651},end:{line:4,column:102710}},"4446":{start:{line:4,column:102666},end:{line:4,column:102710}},"4447":{start:{line:4,column:102681},end:{line:4,column:102710}},"4448":{start:{line:4,column:102729},end:{line:4,column:102741}},"4449":{start:{line:4,column:102765},end:{line:4,column:102769}},"4450":{start:{line:4,column:102772},end:{line:4,column:102777}},"4451":{start:{line:4,column:102778},end:{line:4,column:102882}},"4452":{start:{line:4,column:102788},end:{line:4,column:102789}},"4453":{start:{line:4,column:102812},end:{line:4,column:102816}},"4454":{start:{line:4,column:102817},end:{line:4,column:102842}},"4455":{start:{line:4,column:102829},end:{line:4,column:102833}},"4456":{start:{line:4,column:102833},end:{line:4,column:102841}},"4457":{start:{line:4,column:102842},end:{line:4,column:102881}},"4458":{start:{line:4,column:102873},end:{line:4,column:102881}},"4459":{start:{line:4,column:102882},end:{line:4,column:102890}},"4460":{start:{line:4,column:102912},end:{line:4,column:102921}},"4461":{start:{line:4,column:102922},end:{line:4,column:103121}},"4462":{start:{line:4,column:102946},end:{line:4,column:102958}},"4463":{start:{line:4,column:102961},end:{line:4,column:102984}},"4464":{start:{line:4,column:102987},end:{line:4,column:102996}},"4465":{start:{line:4,column:102999},end:{line:4,column:103006}},"4466":{start:{line:4,column:103007},end:{line:4,column:103120}},"4467":{start:{line:4,column:103023},end:{line:4,column:103111}},"4468":{start:{line:4,column:103046},end:{line:4,column:103057}},"4469":{start:{line:4,column:103058},end:{line:4,column:103110}},"4470":{start:{line:4,column:103111},end:{line:4,column:103119}},"4471":{start:{line:4,column:103155},end:{line:4,column:103158}},"4472":{start:{line:4,column:103161},end:{line:4,column:103164}},"4473":{start:{line:4,column:103167},end:{line:4,column:103177}},"4474":{start:{line:4,column:103178},end:{line:4,column:103211}},"4475":{start:{line:4,column:103217},end:{line:4,column:103242}},"4476":{start:{line:4,column:103243},end:{line:4,column:103286}},"4477":{start:{line:4,column:103292},end:{line:4,column:103304}},"4478":{start:{line:4,column:103305},end:{line:4,column:103385}},"4479":{start:{line:4,column:103411},end:{line:4,column:103414}},"4480":{start:{line:4,column:103417},end:{line:4,column:103426}},"4481":{start:{line:4,column:103429},end:{line:4,column:103433}},"4482":{start:{line:4,column:103436},end:{line:4,column:103455}},"4483":{start:{line:4,column:103458},end:{line:4,column:103491}},"4484":{start:{line:4,column:103492},end:{line:4,column:103509}},"4485":{start:{line:4,column:103531},end:{line:4,column:103552}},"4486":{start:{line:4,column:103572},end:{line:4,column:103591}},"4487":{start:{line:4,column:103613},end:{line:4,column:103616}},"4488":{start:{line:4,column:103619},end:{line:4,column:103622}},"4489":{start:{line:4,column:103625},end:{line:4,column:103629}},"4490":{start:{line:4,column:103630},end:{line:4,column:103638}},"4491":{start:{line:4,column:103644},end:{line:4,column:103651}},"4492":{start:{line:4,column:103652},end:{line:4,column:103794}},"4493":{start:{line:4,column:103700},end:{line:4,column:103785}},"4494":{start:{line:4,column:103720},end:{line:4,column:103732}},"4495":{start:{line:4,column:103743},end:{line:4,column:103750}},"4496":{start:{line:4,column:103751},end:{line:4,column:103784}},"4497":{start:{line:4,column:103785},end:{line:4,column:103793}},"4498":{start:{line:4,column:103794},end:{line:4,column:103802}},"4499":{start:{line:4,column:103817},end:{line:4,column:103836}},"4500":{start:{line:4,column:103858},end:{line:4,column:103862}},"4501":{start:{line:4,column:103863},end:{line:4,column:103879}},"4502":{start:{line:4,column:103897},end:{line:4,column:103914}},"4503":{start:{line:4,column:103930},end:{line:4,column:103948}},"4504":{start:{line:4,column:103964},end:{line:4,column:103978}},"4505":{start:{line:4,column:103996},end:{line:4,column:104017}},"4506":{start:{line:4,column:104033},end:{line:4,column:104043}},"4507":{start:{line:4,column:104059},end:{line:4,column:104078}},"4508":{start:{line:4,column:104096},end:{line:4,column:104117}},"4509":{start:{line:4,column:104133},end:{line:4,column:104148}},"4510":{start:{line:4,column:104164},end:{line:4,column:104174}},"4511":{start:{line:4,column:104206},end:{line:4,column:104239}},"4512":{start:{line:4,column:104242},end:{line:4,column:104247}},"4513":{start:{line:4,column:104250},end:{line:4,column:104255}},"4514":{start:{line:4,column:104256},end:{line:4,column:104263}},"4515":{start:{line:4,column:104269},end:{line:4,column:104271}},"4516":{start:{line:4,column:104274},end:{line:4,column:104349}},"4517":{start:{line:4,column:104301},end:{line:4,column:104302}},"4518":{start:{line:4,column:104303},end:{line:4,column:104339}},"4519":{start:{line:4,column:104345},end:{line:4,column:104349}},"4520":{start:{line:4,column:104349},end:{line:4,column:104552}},"4521":{start:{line:4,column:104354},end:{line:4,column:104498}},"4522":{start:{line:4,column:104370},end:{line:4,column:104380}},"4523":{start:{line:4,column:104381},end:{line:4,column:104444}},"4524":{start:{line:4,column:104450},end:{line:4,column:104498}},"4525":{start:{line:4,column:104503},end:{line:4,column:104552}},"4526":{start:{line:4,column:104552},end:{line:4,column:104662}},"4527":{start:{line:4,column:104692},end:{line:4,column:104728}},"4528":{start:{line:4,column:104729},end:{line:4,column:104789}},"4529":{start:{line:4,column:104817},end:{line:4,column:104823}},"4530":{start:{line:4,column:104826},end:{line:4,column:104834}},"4531":{start:{line:4,column:104837},end:{line:4,column:104850}},"4532":{start:{line:4,column:104853},end:{line:4,column:104855}},"4533":{start:{line:4,column:104856},end:{line:4,column:104955}},"4534":{start:{line:4,column:104888},end:{line:4,column:104892}},"4535":{start:{line:4,column:104895},end:{line:4,column:104901}},"4536":{start:{line:4,column:104902},end:{line:4,column:104954}},"4537":{start:{line:4,column:104955},end:{line:4,column:104980}},"4538":{start:{line:4,column:104998},end:{line:4,column:105107}},"4539":{start:{line:4,column:105115},end:{line:4,column:105160}},"4540":{start:{line:4,column:105176},end:{line:4,column:105212}},"4541":{start:{line:4,column:105228},end:{line:4,column:105265}},"4542":{start:{line:4,column:105289},end:{line:4,column:105299}},"4543":{start:{line:4,column:105300},end:{line:4,column:105356}},"4544":{start:{line:4,column:105372},end:{line:4,column:105437}},"4545":{start:{line:4,column:105457},end:{line:4,column:105492}},"4546":{start:{line:4,column:105488},end:{line:4,column:105492}},"4547":{start:{line:4,column:105492},end:{line:4,column:105500}},"4548":{start:{line:4,column:105520},end:{line:4,column:105554}},"4549":{start:{line:4,column:105550},end:{line:4,column:105554}},"4550":{start:{line:4,column:105554},end:{line:4,column:105562}},"4551":{start:{line:4,column:105582},end:{line:4,column:105604}},"4552":{start:{line:4,column:105622},end:{line:4,column:105647}},"4553":{start:{line:4,column:105663},end:{line:4,column:105677}},"4554":{start:{line:4,column:105695},end:{line:4,column:105740}},"4555":{start:{line:4,column:105705},end:{line:4,column:105710}},"4556":{start:{line:4,column:105726},end:{line:4,column:105740}},"4557":{start:{line:4,column:105768},end:{line:4,column:105771}},"4558":{start:{line:4,column:105774},end:{line:4,column:105777}},"4559":{start:{line:4,column:105780},end:{line:4,column:105785}},"4560":{start:{line:4,column:105786},end:{line:4,column:105893}},"4561":{start:{line:4,column:105844},end:{line:4,column:105856}},"4562":{start:{line:4,column:105857},end:{line:4,column:105892}},"4563":{start:{line:4,column:105921},end:{line:4,column:105924}},"4564":{start:{line:4,column:105927},end:{line:4,column:105932}},"4565":{start:{line:4,column:105933},end:{line:4,column:105967}},"4566":{start:{line:4,column:105973},end:{line:4,column:105976}},"4567":{start:{line:4,column:105977},end:{line:4,column:106176}},"4568":{start:{line:4,column:106004},end:{line:4,column:106016}},"4569":{start:{line:4,column:106017},end:{line:4,column:106175}},"4570":{start:{line:4,column:106045},end:{line:4,column:106087}},"4571":{start:{line:4,column:106088},end:{line:4,column:106127}},"4572":{start:{line:4,column:106133},end:{line:4,column:106175}},"4573":{start:{line:4,column:106194},end:{line:4,column:106223}},"4574":{start:{line:4,column:106251},end:{line:4,column:106257}},"4575":{start:{line:4,column:106258},end:{line:4,column:106360}},"4576":{start:{line:4,column:106282},end:{line:4,column:106289}},"4577":{start:{line:4,column:106292},end:{line:4,column:106299}},"4578":{start:{line:4,column:106300},end:{line:4,column:106359}},"4579":{start:{line:4,column:106388},end:{line:4,column:106393}},"4580":{start:{line:4,column:106396},end:{line:4,column:106432}},"4581":{start:{line:4,column:106433},end:{line:4,column:106732}},"4582":{start:{line:4,column:106445},end:{line:4,column:106532}},"4583":{start:{line:4,column:106543},end:{line:4,column:106565}},"4584":{start:{line:4,column:106566},end:{line:4,column:106731}},"4585":{start:{line:4,column:106586},end:{line:4,column:106731}},"4586":{start:{line:4,column:106621},end:{line:4,column:106630}},"4587":{start:{line:4,column:106631},end:{line:4,column:106714}},"4588":{start:{line:4,column:106720},end:{line:4,column:106731}},"4589":{start:{line:4,column:106732},end:{line:4,column:106795}},"4590":{start:{line:4,column:106821},end:{line:4,column:106854}},"4591":{start:{line:4,column:106855},end:{line:4,column:106883}},"4592":{start:{line:4,column:106868},end:{line:4,column:106883}},"4593":{start:{line:4,column:106911},end:{line:4,column:106944}},"4594":{start:{line:4,column:106945},end:{line:4,column:106955}},"4595":{start:{line:4,column:106983},end:{line:4,column:106997}},"4596":{start:{line:4,column:106998},end:{line:4,column:107075}},"4597":{start:{line:4,column:107008},end:{line:4,column:107032}},"4598":{start:{line:4,column:107048},end:{line:4,column:107062}},"4599":{start:{line:4,column:107063},end:{line:4,column:107074}},"4600":{start:{line:4,column:107075},end:{line:4,column:107097}},"4601":{start:{line:4,column:107127},end:{line:4,column:107131}},"4602":{start:{line:4,column:107134},end:{line:4,column:107148}},"4603":{start:{line:4,column:107151},end:{line:4,column:107173}},"4604":{start:{line:4,column:107174},end:{line:4,column:107255}},"4605":{start:{line:4,column:107251},end:{line:4,column:107255}},"4606":{start:{line:4,column:107255},end:{line:4,column:107300}},"4607":{start:{line:4,column:107326},end:{line:4,column:107331}},"4608":{start:{line:4,column:107334},end:{line:4,column:107336}},"4609":{start:{line:4,column:107337},end:{line:4,column:107483}},"4610":{start:{line:4,column:107349},end:{line:4,column:107483}},"4611":{start:{line:4,column:107359},end:{line:4,column:107360}},"4612":{start:{line:4,column:107383},end:{line:4,column:107387}},"4613":{start:{line:4,column:107388},end:{line:4,column:107482}},"4614":{start:{line:4,column:107483},end:{line:4,column:107507}},"4615":{start:{line:4,column:107527},end:{line:4,column:107555}},"4616":{start:{line:4,column:107546},end:{line:4,column:107555}},"4617":{start:{line:4,column:107561},end:{line:4,column:107563}},"4618":{start:{line:4,column:107566},end:{line:4,column:107571}},"4619":{start:{line:4,column:107572},end:{line:4,column:107789}},"4620":{start:{line:4,column:107592},end:{line:4,column:107632}},"4621":{start:{line:4,column:107602},end:{line:4,column:107603}},"4622":{start:{line:4,column:107619},end:{line:4,column:107632}},"4623":{start:{line:4,column:107637},end:{line:4,column:107789}},"4624":{start:{line:4,column:107657},end:{line:4,column:107682}},"4625":{start:{line:4,column:107672},end:{line:4,column:107682}},"4626":{start:{line:4,column:107687},end:{line:4,column:107789}},"4627":{start:{line:4,column:107709},end:{line:4,column:107757}},"4628":{start:{line:4,column:107724},end:{line:4,column:107757}},"4629":{start:{line:4,column:107762},end:{line:4,column:107789}},"4630":{start:{line:4,column:107789},end:{line:4,column:107797}},"4631":{start:{line:4,column:107823},end:{line:4,column:107832}},"4632":{start:{line:4,column:107833},end:{line:4,column:107868}},"4633":{start:{line:4,column:107898},end:{line:4,column:107911}},"4634":{start:{line:4,column:107917},end:{line:4,column:107918}},"4635":{start:{line:4,column:107921},end:{line:4,column:107922}},"4636":{start:{line:4,column:107925},end:{line:4,column:107945}},"4637":{start:{line:4,column:107948},end:{line:4,column:107968}},"4638":{start:{line:4,column:107969},end:{line:4,column:108223}},"4639":{start:{line:4,column:108001},end:{line:4,column:108025}},"4640":{start:{line:4,column:108028},end:{line:4,column:108052}},"4641":{start:{line:4,column:108055},end:{line:4,column:108059}},"4642":{start:{line:4,column:108062},end:{line:4,column:108222}},"4643":{start:{line:4,column:108253},end:{line:4,column:108275}},"4644":{start:{line:4,column:108268},end:{line:4,column:108275}},"4645":{start:{line:4,column:108281},end:{line:4,column:108287}},"4646":{start:{line:4,column:108290},end:{line:4,column:108296}},"4647":{start:{line:4,column:108299},end:{line:4,column:108331}},"4648":{start:{line:4,column:108332},end:{line:4,column:108411}},"4649":{start:{line:4,column:108343},end:{line:4,column:108380}},"4650":{start:{line:4,column:108386},end:{line:4,column:108396}},"4651":{start:{line:4,column:108397},end:{line:4,column:108410}},"4652":{start:{line:4,column:108443},end:{line:4,column:108451}},"4653":{start:{line:4,column:108454},end:{line:4,column:108658}},"4654":{start:{line:4,column:108471},end:{line:4,column:108475}},"4655":{start:{line:4,column:108478},end:{line:4,column:108494}},"4656":{start:{line:4,column:108497},end:{line:4,column:108505}},"4657":{start:{line:4,column:108508},end:{line:4,column:108516}},"4658":{start:{line:4,column:108519},end:{line:4,column:108525}},"4659":{start:{line:4,column:108526},end:{line:4,column:108548}},"4660":{start:{line:4,column:108554},end:{line:4,column:108578}},"4661":{start:{line:4,column:108579},end:{line:4,column:108629}},"4662":{start:{line:4,column:108620},end:{line:4,column:108629}},"4663":{start:{line:4,column:108635},end:{line:4,column:108641}},"4664":{start:{line:4,column:108642},end:{line:4,column:108657}},"4665":{start:{line:4,column:108658},end:{line:4,column:108735}},"4666":{start:{line:4,column:108677},end:{line:4,column:108713}},"4667":{start:{line:4,column:108714},end:{line:4,column:108734}},"4668":{start:{line:4,column:108735},end:{line:4,column:108743}},"4669":{start:{line:4,column:108759},end:{line:4,column:108776}},"4670":{start:{line:4,column:108794},end:{line:4,column:108880}},"4671":{start:{line:4,column:108898},end:{line:4,column:108926}},"4672":{start:{line:4,column:108953},end:{line:4,column:108956}},"4673":{start:{line:4,column:108959},end:{line:4,column:108962}},"4674":{start:{line:4,column:108965},end:{line:4,column:108968}},"4675":{start:{line:4,column:108971},end:{line:4,column:109015}},"4676":{start:{line:4,column:109018},end:{line:4,column:109029}},"4677":{start:{line:4,column:109030},end:{line:4,column:109063}},"4678":{start:{line:4,column:109071},end:{line:4,column:109101}},"4679":{start:{line:4,column:109083},end:{line:4,column:109100}},"4680":{start:{line:4,column:109126},end:{line:4,column:109157}},"4681":{start:{line:4,column:109192},end:{line:4,column:109196}},"4682":{start:{line:4,column:109199},end:{line:4,column:109210}},"4683":{start:{line:4,column:109211},end:{line:4,column:109245}},"4684":{start:{line:4,column:109261},end:{line:4,column:109279}},"4685":{start:{line:4,column:109305},end:{line:4,column:109308}},"4686":{start:{line:4,column:109311},end:{line:4,column:109322}},"4687":{start:{line:4,column:109323},end:{line:4,column:109352}},"4688":{start:{line:4,column:109382},end:{line:4,column:109385}},"4689":{start:{line:4,column:109388},end:{line:4,column:109403}},"4690":{start:{line:4,column:109404},end:{line:4,column:109433}},"4691":{start:{line:4,column:109459},end:{line:4,column:109466}},"4692":{start:{line:4,column:109467},end:{line:4,column:109479}},"4693":{start:{line:4,column:109502},end:{line:4,column:109522}},"4694":{start:{line:4,column:109548},end:{line:4,column:109551}},"4695":{start:{line:4,column:109552},end:{line:4,column:109603}},"4696":{start:{line:4,column:109627},end:{line:4,column:110422}},"4697":{start:{line:4,column:109654},end:{line:4,column:109698}},"4698":{start:{line:4,column:109664},end:{line:4,column:109665}},"4699":{start:{line:4,column:109681},end:{line:4,column:109698}},"4700":{start:{line:4,column:109709},end:{line:4,column:109712}},"4701":{start:{line:4,column:109715},end:{line:4,column:109718}},"4702":{start:{line:4,column:109721},end:{line:4,column:109724}},"4703":{start:{line:4,column:109727},end:{line:4,column:109747}},"4704":{start:{line:4,column:109750},end:{line:4,column:109755}},"4705":{start:{line:4,column:109758},end:{line:4,column:109783}},"4706":{start:{line:4,column:109786},end:{line:4,column:109802}},"4707":{start:{line:4,column:109805},end:{line:4,column:109826}},"4708":{start:{line:4,column:109827},end:{line:4,column:110421}},"4709":{start:{line:4,column:109853},end:{line:4,column:109872}},"4710":{start:{line:4,column:109875},end:{line:4,column:109892}},"4711":{start:{line:4,column:109893},end:{line:4,column:110048}},"4712":{start:{line:4,column:110060},end:{line:4,column:110073}},"4713":{start:{line:4,column:110076},end:{line:4,column:110089}},"4714":{start:{line:4,column:110092},end:{line:4,column:110102}},"4715":{start:{line:4,column:110105},end:{line:4,column:110115}},"4716":{start:{line:4,column:110116},end:{line:4,column:110385}},"4717":{start:{line:4,column:110134},end:{line:4,column:110150}},"4718":{start:{line:4,column:110156},end:{line:4,column:110184}},"4719":{start:{line:4,column:110185},end:{line:4,column:110333}},"4720":{start:{line:4,column:110345},end:{line:4,column:110365}},"4721":{start:{line:4,column:110366},end:{line:4,column:110384}},"4722":{start:{line:4,column:110385},end:{line:4,column:110420}},"4723":{start:{line:4,column:110450},end:{line:4,column:110455}},"4724":{start:{line:4,column:110458},end:{line:4,column:110463}},"4725":{start:{line:4,column:110464},end:{line:4,column:110662}},"4726":{start:{line:4,column:110479},end:{line:4,column:110520}},"4727":{start:{line:4,column:110521},end:{line:4,column:110661}},"4728":{start:{line:4,column:110533},end:{line:4,column:110568}},"4729":{start:{line:4,column:110569},end:{line:4,column:110660}},"4730":{start:{line:4,column:110591},end:{line:4,column:110603}},"4731":{start:{line:4,column:110604},end:{line:4,column:110643}},"4732":{start:{line:4,column:110649},end:{line:4,column:110660}},"4733":{start:{line:4,column:110682},end:{line:4,column:110732}},"4734":{start:{line:4,column:110754},end:{line:4,column:110795}},"4735":{start:{line:4,column:110764},end:{line:4,column:110765}},"4736":{start:{line:4,column:110774},end:{line:4,column:110795}},"4737":{start:{line:4,column:110786},end:{line:4,column:110795}},"4738":{start:{line:4,column:110795},end:{line:4,column:110803}},"4739":{start:{line:4,column:110827},end:{line:4,column:110851}},"4740":{start:{line:4,column:110881},end:{line:4,column:110891}},"4741":{start:{line:4,column:110894},end:{line:4,column:111088}},"4742":{start:{line:4,column:110925},end:{line:4,column:110964}},"4743":{start:{line:4,column:110967},end:{line:4,column:111006}},"4744":{start:{line:4,column:111007},end:{line:4,column:111030}},"4745":{start:{line:4,column:111030},end:{line:4,column:111069}},"4746":{start:{line:4,column:111040},end:{line:4,column:111041}},"4747":{start:{line:4,column:111057},end:{line:4,column:111069}},"4748":{start:{line:4,column:111075},end:{line:4,column:111088}},"4749":{start:{line:4,column:111088},end:{line:4,column:111096}},"4750":{start:{line:4,column:111114},end:{line:4,column:111165}},"4751":{start:{line:4,column:111124},end:{line:4,column:111125}},"4752":{start:{line:4,column:111148},end:{line:4,column:111152}},"4753":{start:{line:4,column:111153},end:{line:4,column:111164}},"4754":{start:{line:4,column:111165},end:{line:4,column:111173}},"4755":{start:{line:4,column:111205},end:{line:4,column:111224}},"4756":{start:{line:4,column:111225},end:{line:4,column:111291}},"4757":{start:{line:4,column:111309},end:{line:4,column:111419}},"4758":{start:{line:4,column:111320},end:{line:4,column:111418}},"4759":{start:{line:4,column:111347},end:{line:4,column:111364}},"4760":{start:{line:4,column:111400},end:{line:4,column:111417}},"4761":{start:{line:4,column:111443},end:{line:4,column:111449}},"4762":{start:{line:4,column:111452},end:{line:4,column:111455}},"4763":{start:{line:4,column:111456},end:{line:4,column:111491}},"4764":{start:{line:4,column:111513},end:{line:4,column:111540}},"4765":{start:{line:4,column:111564},end:{line:4,column:111568}},"4766":{start:{line:4,column:111569},end:{line:4,column:111590}},"4767":{start:{line:4,column:111622},end:{line:4,column:111625}},"4768":{start:{line:4,column:111626},end:{line:4,column:111681}},"4769":{start:{line:4,column:111715},end:{line:4,column:111718}},"4770":{start:{line:4,column:111719},end:{line:4,column:111780}},"4771":{start:{line:4,column:111804},end:{line:4,column:111807}},"4772":{start:{line:4,column:111812},end:{line:4,column:111815}},"4773":{start:{line:4,column:111816},end:{line:4,column:111938}},"4774":{start:{line:4,column:111944},end:{line:4,column:111980}},"4775":{start:{line:4,column:111985},end:{line:4,column:111990}},"4776":{start:{line:4,column:111991},end:{line:4,column:112056}},"4777":{start:{line:4,column:112001},end:{line:4,column:112007}},"4778":{start:{line:4,column:112010},end:{line:4,column:112013}},"4779":{start:{line:4,column:112014},end:{line:4,column:112042}},"4780":{start:{line:4,column:112051},end:{line:4,column:112055}},"4781":{start:{line:4,column:112074},end:{line:4,column:112144}},"4782":{start:{line:4,column:112079},end:{line:4,column:112144}},"4783":{start:{line:4,column:112089},end:{line:4,column:112099}},"4784":{start:{line:4,column:112116},end:{line:4,column:112120}},"4785":{start:{line:4,column:112121},end:{line:4,column:112143}},"4786":{start:{line:4,column:112135},end:{line:4,column:112143}},"4787":{start:{line:4,column:112170},end:{line:4,column:112173}},"4788":{start:{line:4,column:112176},end:{line:4,column:112179}},"4789":{start:{line:4,column:112182},end:{line:4,column:112189}},"4790":{start:{line:4,column:112190},end:{line:4,column:112248}},"4791":{start:{line:4,column:112276},end:{line:4,column:112279}},"4792":{start:{line:4,column:112282},end:{line:4,column:112285}},"4793":{start:{line:4,column:112288},end:{line:4,column:112295}},"4794":{start:{line:4,column:112296},end:{line:4,column:112358}},"4795":{start:{line:4,column:112376},end:{line:4,column:112400}},"4796":{start:{line:4,column:112418},end:{line:4,column:112432}},"4797":{start:{line:4,column:112440},end:{line:4,column:112548}},"4798":{start:{line:4,column:112498},end:{line:4,column:112546}},"4799":{start:{line:4,column:112552},end:{line:4,column:113135}},"4800":{start:{line:4,column:112587},end:{line:4,column:112603}},"4801":{start:{line:4,column:112626},end:{line:4,column:112675}},"4802":{start:{line:4,column:112719},end:{line:4,column:112744}},"4803":{start:{line:4,column:112747},end:{line:4,column:112752}},"4804":{start:{line:4,column:112755},end:{line:4,column:112835}},"4805":{start:{line:4,column:112795},end:{line:4,column:112800}},"4806":{start:{line:4,column:112801},end:{line:4,column:112830}},"4807":{start:{line:4,column:112836},end:{line:4,column:112854}},"4808":{start:{line:4,column:112893},end:{line:4,column:112958}},"4809":{start:{line:4,column:113024},end:{line:4,column:113053}},"4810":{start:{line:4,column:113036},end:{line:4,column:113052}},"4811":{start:{line:4,column:113072},end:{line:4,column:113122}},"4812":{start:{line:4,column:113123},end:{line:4,column:113131}},"4813":{start:{line:4,column:113143},end:{line:4,column:116006}},"4814":{start:{line:4,column:113181},end:{line:4,column:113186}},"4815":{start:{line:4,column:113194},end:{line:4,column:113199}},"4816":{start:{line:4,column:113212},end:{line:4,column:113217}},"4817":{start:{line:4,column:113225},end:{line:4,column:113230}},"4818":{start:{line:4,column:113247},end:{line:4,column:113252}},"4819":{start:{line:4,column:113261},end:{line:4,column:113280}},"4820":{start:{line:4,column:113295},end:{line:4,column:113327}},"4821":{start:{line:4,column:113351},end:{line:4,column:113383}},"4822":{start:{line:4,column:113398},end:{line:4,column:113403}},"4823":{start:{line:4,column:113418},end:{line:4,column:113469}},"4824":{start:{line:4,column:113489},end:{line:4,column:113557}},"4825":{start:{line:4,column:113582},end:{line:4,column:113586}},"4826":{start:{line:4,column:113609},end:{line:4,column:113611}},"4827":{start:{line:4,column:113624},end:{line:4,column:113626}},"4828":{start:{line:4,column:113647},end:{line:4,column:113651}},"4829":{start:{line:4,column:113666},end:{line:4,column:114044}},"4830":{start:{line:4,column:113732},end:{line:4,column:113754}},"4831":{start:{line:4,column:113755},end:{line:4,column:113884}},"4832":{start:{line:4,column:113850},end:{line:4,column:113877}},"4833":{start:{line:4,column:113877},end:{line:4,column:113883}},"4834":{start:{line:4,column:113884},end:{line:4,column:113944}},"4835":{start:{line:4,column:114009},end:{line:4,column:114041}},"4836":{start:{line:4,column:114074},end:{line:4,column:114248}},"4837":{start:{line:4,column:114115},end:{line:4,column:114137}},"4838":{start:{line:4,column:114138},end:{line:4,column:114246}},"4839":{start:{line:4,column:114188},end:{line:4,column:114244}},"4840":{start:{line:4,column:114259},end:{line:4,column:114298}},"4841":{start:{line:4,column:114291},end:{line:4,column:114298}},"4842":{start:{line:4,column:114298},end:{line:4,column:114587}},"4843":{start:{line:4,column:114316},end:{line:4,column:114342}},"4844":{start:{line:4,column:114342},end:{line:4,column:114347}},"4845":{start:{line:4,column:114384},end:{line:4,column:114410}},"4846":{start:{line:4,column:114410},end:{line:4,column:114415}},"4847":{start:{line:4,column:114424},end:{line:4,column:114450}},"4848":{start:{line:4,column:114450},end:{line:4,column:114455}},"4849":{start:{line:4,column:114465},end:{line:4,column:114492}},"4850":{start:{line:4,column:114492},end:{line:4,column:114497}},"4851":{start:{line:4,column:114507},end:{line:4,column:114533}},"4852":{start:{line:4,column:114533},end:{line:4,column:114538}},"4853":{start:{line:4,column:114547},end:{line:4,column:114553}},"4854":{start:{line:4,column:114561},end:{line:4,column:114586}},"4855":{start:{line:4,column:114587},end:{line:4,column:114710}},"4856":{start:{line:4,column:114703},end:{line:4,column:114710}},"4857":{start:{line:4,column:114716},end:{line:4,column:114748}},"4858":{start:{line:4,column:114749},end:{line:4,column:114970}},"4859":{start:{line:4,column:114868},end:{line:4,column:114886}},"4860":{start:{line:4,column:114874},end:{line:4,column:114885}},"4861":{start:{line:4,column:114951},end:{line:4,column:114969}},"4862":{start:{line:4,column:114957},end:{line:4,column:114968}},"4863":{start:{line:4,column:114992},end:{line:4,column:115183}},"4864":{start:{line:4,column:115191},end:{line:4,column:115241}},"4865":{start:{line:4,column:115234},end:{line:4,column:115241}},"4866":{start:{line:4,column:115241},end:{line:4,column:115294}},"4867":{start:{line:4,column:115272},end:{line:4,column:115287}},"4868":{start:{line:4,column:115287},end:{line:4,column:115293}},"4869":{start:{line:4,column:115294},end:{line:4,column:115371}},"4870":{start:{line:4,column:115377},end:{line:4,column:115399}},"4871":{start:{line:4,column:115400},end:{line:4,column:115593}},"4872":{start:{line:4,column:115404},end:{line:4,column:115501}},"4873":{start:{line:4,column:115425},end:{line:4,column:115464}},"4874":{start:{line:4,column:115511},end:{line:4,column:115542}},"4875":{start:{line:4,column:115551},end:{line:4,column:115592}},"4876":{start:{line:4,column:115608},end:{line:4,column:115655}},"4877":{start:{line:4,column:115666},end:{line:4,column:115877}},"4878":{start:{line:4,column:115795},end:{line:4,column:115819}},"4879":{start:{line:4,column:115820},end:{line:4,column:115876}},"4880":{start:{line:4,column:115895},end:{line:4,column:115924}},"4881":{start:{line:4,column:115907},end:{line:4,column:115923}},"4882":{start:{line:4,column:115943},end:{line:4,column:115993}},"4883":{start:{line:4,column:115994},end:{line:4,column:116002}},"4884":{start:{line:4,column:116021},end:{line:4,column:116106}},"4885":{start:{line:4,column:116121},end:{line:4,column:116170}},"4886":{start:{line:4,column:116178},end:{line:4,column:116239}},"4887":{start:{line:4,column:116200},end:{line:4,column:116237}},"4888":{start:{line:4,column:116247},end:{line:4,column:116809}},"4889":{start:{line:4,column:116263},end:{line:4,column:116265}},"4890":{start:{line:4,column:116276},end:{line:4,column:116280}},"4891":{start:{line:4,column:116294},end:{line:4,column:116313}},"4892":{start:{line:4,column:116325},end:{line:4,column:116330}},"4893":{start:{line:4,column:116345},end:{line:4,column:116415}},"4894":{start:{line:4,column:116376},end:{line:4,column:116413}},"4895":{start:{line:4,column:116429},end:{line:4,column:116467}},"4896":{start:{line:4,column:116447},end:{line:4,column:116467}},"4897":{start:{line:4,column:116467},end:{line:4,column:116603}},"4898":{start:{line:4,column:116527},end:{line:4,column:116553}},"4899":{start:{line:4,column:116554},end:{line:4,column:116601}},"4900":{start:{line:4,column:116612},end:{line:4,column:116663}},"4901":{start:{line:4,column:116631},end:{line:4,column:116656}},"4902":{start:{line:4,column:116656},end:{line:4,column:116662}},"4903":{start:{line:4,column:116663},end:{line:4,column:116695}},"4904":{start:{line:4,column:116688},end:{line:4,column:116695}},"4905":{start:{line:4,column:116701},end:{line:4,column:116708}},"4906":{start:{line:4,column:116709},end:{line:4,column:116807}},"4907":{start:{line:4,column:116713},end:{line:4,column:116793}},"4908":{start:{line:4,column:116741},end:{line:4,column:116793}},"4909":{start:{line:4,column:116745},end:{line:4,column:116749}},"4910":{start:{line:4,column:116759},end:{line:4,column:116792}},"4911":{start:{line:4,column:116802},end:{line:4,column:116806}},"4912":{start:{line:4,column:116825},end:{line:4,column:116837}},"4913":{start:{line:4,column:116855},end:{line:4,column:116876}},"4914":{start:{line:4,column:116884},end:{line:4,column:116888}},"4915":{start:{line:4,column:116887},end:{line:4,column:116888}},"4916":{start:{line:4,column:116906},end:{line:4,column:117052}},"4917":{start:{line:4,column:116937},end:{line:4,column:116954}},"4918":{start:{line:4,column:116955},end:{line:4,column:116980}},"4919":{start:{line:4,column:116992},end:{line:4,column:117026}},"4920":{start:{line:4,column:117027},end:{line:4,column:117051}},"4921":{start:{line:4,column:117076},end:{line:4,column:117080}},"4922":{start:{line:4,column:117083},end:{line:4,column:117084}},"4923":{start:{line:4,column:117085},end:{line:4,column:117154}},"4924":{start:{line:4,column:117101},end:{line:4,column:117108}},"4925":{start:{line:4,column:117121},end:{line:4,column:117128}},"4926":{start:{line:4,column:117162},end:{line:4,column:117193}},"4927":{start:{line:4,column:117197},end:{line:4,column:117267}},"4928":{start:{line:4,column:117257},end:{line:4,column:117264}},"4929":{start:{line:4,column:117291},end:{line:4,column:117308}},"4930":{start:{line:4,column:117309},end:{line:4,column:117346}},"4931":{start:{line:4,column:117359},end:{line:4,column:117413}},"4932":{start:{line:4,column:117388},end:{line:4,column:117392}},"4933":{start:{line:4,column:117393},end:{line:4,column:117412}},"4934":{start:{line:4,column:117413},end:{line:4,column:117427}},"4935":{start:{line:4,column:117428},end:{line:4,column:117443}},"4936":{start:{line:4,column:117451},end:{line:4,column:117613}},"4937":{start:{line:4,column:117486},end:{line:4,column:117506}},"4938":{start:{line:4,column:117525},end:{line:4,column:117551}},"4939":{start:{line:4,column:117529},end:{line:4,column:117551}},"4940":{start:{line:4,column:117563},end:{line:4,column:117611}},"4941":{start:{line:4,column:117629},end:{line:4,column:117642}},"4942":{start:{line:4,column:117660},end:{line:4,column:117674}},"4943":{start:{line:4,column:117690},end:{line:4,column:117705}},"4944":{start:{line:4,column:117714},end:{line:4,column:117731}},"4945":{start:{line:4,column:117740},end:{line:4,column:117749}},"4946":{start:{line:4,column:117753},end:{line:4,column:117762}},"4947":{start:{line:4,column:117778},end:{line:4,column:117796}},"4948":{start:{line:4,column:117818},end:{line:4,column:117857}},"4949":{start:{line:4,column:117860},end:{line:4,column:117869}},"4950":{start:{line:4,column:117870},end:{line:4,column:118757}},"4951":{start:{line:4,column:117888},end:{line:4,column:117979}},"4952":{start:{line:4,column:117985},end:{line:4,column:117994}},"4953":{start:{line:4,column:117997},end:{line:4,column:118342}},"4954":{start:{line:4,column:118025},end:{line:4,column:118056}},"4955":{start:{line:4,column:118072},end:{line:4,column:118087}},"4956":{start:{line:4,column:118076},end:{line:4,column:118087}},"4957":{start:{line:4,column:118090},end:{line:4,column:118116}},"4958":{start:{line:4,column:118117},end:{line:4,column:118172}},"4959":{start:{line:4,column:118143},end:{line:4,column:118170}},"4960":{start:{line:4,column:118184},end:{line:4,column:118209}},"4961":{start:{line:4,column:118188},end:{line:4,column:118209}},"4962":{start:{line:4,column:118212},end:{line:4,column:118238}},"4963":{start:{line:4,column:118239},end:{line:4,column:118341}},"4964":{start:{line:4,column:118275},end:{line:4,column:118339}},"4965":{start:{line:4,column:118342},end:{line:4,column:118755}},"4966":{start:{line:4,column:118367},end:{line:4,column:118376}},"4967":{start:{line:4,column:118379},end:{line:4,column:118386}},"4968":{start:{line:4,column:118389},end:{line:4,column:118398}},"4969":{start:{line:4,column:118399},end:{line:4,column:118753}},"4970":{start:{line:4,column:118456},end:{line:4,column:118468}},"4971":{start:{line:4,column:118469},end:{line:4,column:118572}},"4972":{start:{line:4,column:118496},end:{line:4,column:118572}},"4973":{start:{line:4,column:118572},end:{line:4,column:118724}},"4974":{start:{line:4,column:118588},end:{line:4,column:118597}},"4975":{start:{line:4,column:118598},end:{line:4,column:118661}},"4976":{start:{line:4,column:118667},end:{line:4,column:118724}},"4977":{start:{line:4,column:118740},end:{line:4,column:118751}},"4978":{start:{line:4,column:118784},end:{line:4,column:118912}},"4979":{start:{line:4,column:118794},end:{line:4,column:118797}},"4980":{start:{line:4,column:118798},end:{line:4,column:118864}},"4981":{start:{line:4,column:118823},end:{line:4,column:118860}},"4982":{start:{line:4,column:118853},end:{line:4,column:118857}},"4983":{start:{line:4,column:118874},end:{line:4,column:118911}},"4984":{start:{line:4,column:118904},end:{line:4,column:118908}},"4985":{start:{line:4,column:118920},end:{line:4,column:118924}},"4986":{start:{line:4,column:118945},end:{line:4,column:119066}},"4987":{start:{line:4,column:119048},end:{line:4,column:119055}},"4988":{start:{line:4,column:119085},end:{line:4,column:119101}},"4989":{start:{line:4,column:119091},end:{line:4,column:119101}},"4990":{start:{line:4,column:119107},end:{line:4,column:119112}},"4991":{start:{line:4,column:119113},end:{line:4,column:119137}},"4992":{start:{line:4,column:119159},end:{line:4,column:119173}},"4993":{start:{line:4,column:119174},end:{line:4,column:119204}},"4994":{start:{line:4,column:119184},end:{line:4,column:119202}},"4995":{start:{line:4,column:119198},end:{line:4,column:119201}},"4996":{start:{line:4,column:119212},end:{line:4,column:119215}},"4997":{start:{line:4,column:119223},end:{line:4,column:119229}},"4998":{start:{line:4,column:119237},end:{line:4,column:119291}},"4999":{start:{line:4,column:119276},end:{line:4,column:119278}},"5000":{start:{line:4,column:119279},end:{line:4,column:119287}},"5001":{start:{line:4,column:119307},end:{line:4,column:119337}},"5002":{start:{line:4,column:119357},end:{line:4,column:119460}},"5003":{start:{line:4,column:119377},end:{line:4,column:119390}},"5004":{start:{line:4,column:119391},end:{line:4,column:119409}},"5005":{start:{line:4,column:119415},end:{line:4,column:119460}},"5006":{start:{line:4,column:119436},end:{line:4,column:119440}},"5007":{start:{line:4,column:119441},end:{line:4,column:119459}},"5008":{start:{line:4,column:119460},end:{line:4,column:119471}},"5009":{start:{line:4,column:119479},end:{line:4,column:119538}},"5010":{start:{line:4,column:119497},end:{line:4,column:119509}},"5011":{start:{line:4,column:119520},end:{line:4,column:119536}},"5012":{start:{line:4,column:119542},end:{line:4,column:119550}},"5013":{start:{line:4,column:119549},end:{line:4,column:119550}},"5014":{start:{line:4,column:119554},end:{line:4,column:124883}},"5015":{start:{line:4,column:119567},end:{line:4,column:119568}},"5016":{start:{line:4,column:119595},end:{line:4,column:119599}},"5017":{start:{line:4,column:119617},end:{line:4,column:119621}},"5018":{start:{line:4,column:119638},end:{line:4,column:119642}},"5019":{start:{line:4,column:119651},end:{line:4,column:119655}},"5020":{start:{line:4,column:119664},end:{line:4,column:119668}},"5021":{start:{line:4,column:119684},end:{line:4,column:119688}},"5022":{start:{line:4,column:119704},end:{line:4,column:119708}},"5023":{start:{line:4,column:119720},end:{line:4,column:119724}},"5024":{start:{line:4,column:119736},end:{line:4,column:119740}},"5025":{start:{line:4,column:119755},end:{line:4,column:119759}},"5026":{start:{line:4,column:119774},end:{line:4,column:119778}},"5027":{start:{line:4,column:119800},end:{line:4,column:119804}},"5028":{start:{line:4,column:119826},end:{line:4,column:119830}},"5029":{start:{line:4,column:119857},end:{line:4,column:119878}},"5030":{start:{line:4,column:119900},end:{line:4,column:119942}},"5031":{start:{line:4,column:119938},end:{line:4,column:119942}},"5032":{start:{line:4,column:119969},end:{line:4,column:119981}},"5033":{start:{line:4,column:119984},end:{line:4,column:120002}},"5034":{start:{line:4,column:120005},end:{line:4,column:120006}},"5035":{start:{line:4,column:120009},end:{line:4,column:120013}},"5036":{start:{line:4,column:120014},end:{line:4,column:120337}},"5037":{start:{line:4,column:120032},end:{line:4,column:120067}},"5038":{start:{line:4,column:120070},end:{line:4,column:120079}},"5039":{start:{line:4,column:120082},end:{line:4,column:120096}},"5040":{start:{line:4,column:120097},end:{line:4,column:120321}},"5041":{start:{line:4,column:120106},end:{line:4,column:120127}},"5042":{start:{line:4,column:120132},end:{line:4,column:120321}},"5043":{start:{line:4,column:120167},end:{line:4,column:120171}},"5044":{start:{line:4,column:120176},end:{line:4,column:120186}},"5045":{start:{line:4,column:120192},end:{line:4,column:120195}},"5046":{start:{line:4,column:120198},end:{line:4,column:120201}},"5047":{start:{line:4,column:120202},end:{line:4,column:120320}},"5048":{start:{line:4,column:120211},end:{line:4,column:120289}},"5049":{start:{line:4,column:120221},end:{line:4,column:120222}},"5050":{start:{line:4,column:120238},end:{line:4,column:120260}},"5051":{start:{line:4,column:120263},end:{line:4,column:120266}},"5052":{start:{line:4,column:120267},end:{line:4,column:120288}},"5053":{start:{line:4,column:120295},end:{line:4,column:120310}},"5054":{start:{line:4,column:120311},end:{line:4,column:120319}},"5055":{start:{line:4,column:120321},end:{line:4,column:120336}},"5056":{start:{line:4,column:120367},end:{line:4,column:120425}},"5057":{start:{line:4,column:120421},end:{line:4,column:120425}},"5058":{start:{line:4,column:120452},end:{line:4,column:120506}},"5059":{start:{line:4,column:120502},end:{line:4,column:120506}},"5060":{start:{line:4,column:120533},end:{line:4,column:120583}},"5061":{start:{line:4,column:120579},end:{line:4,column:120583}},"5062":{start:{line:4,column:120612},end:{line:4,column:120667}},"5063":{start:{line:4,column:120663},end:{line:4,column:120667}},"5064":{start:{line:4,column:120699},end:{line:4,column:120768}},"5065":{start:{line:4,column:120764},end:{line:4,column:120768}},"5066":{start:{line:4,column:120777},end:{line:4,column:120823}},"5067":{start:{line:4,column:120803},end:{line:4,column:120823}},"5068":{start:{line:4,column:120823},end:{line:4,column:120853}},"5069":{start:{line:4,column:120876},end:{line:4,column:120890}},"5070":{start:{line:4,column:120896},end:{line:4,column:120908}},"5071":{start:{line:4,column:120911},end:{line:4,column:120913}},"5072":{start:{line:4,column:120920},end:{line:4,column:121425}},"5073":{start:{line:4,column:120941},end:{line:4,column:120962}},"5074":{start:{line:4,column:120962},end:{line:4,column:121192}},"5075":{start:{line:4,column:120972},end:{line:4,column:120973}},"5076":{start:{line:4,column:120992},end:{line:4,column:121192}},"5077":{start:{line:4,column:121198},end:{line:4,column:121425}},"5078":{start:{line:4,column:121211},end:{line:4,column:121408}},"5079":{start:{line:4,column:121425},end:{line:4,column:121480}},"5080":{start:{line:4,column:121495},end:{line:4,column:121613}},"5081":{start:{line:4,column:121623},end:{line:4,column:122069}},"5082":{start:{line:4,column:121646},end:{line:4,column:121729}},"5083":{start:{line:4,column:121705},end:{line:4,column:121729}},"5084":{start:{line:4,column:121729},end:{line:4,column:121810}},"5085":{start:{line:4,column:121779},end:{line:4,column:121810}},"5086":{start:{line:4,column:121810},end:{line:4,column:121932}},"5087":{start:{line:4,column:121901},end:{line:4,column:121932}},"5088":{start:{line:4,column:121932},end:{line:4,column:122068}},"5089":{start:{line:4,column:122095},end:{line:4,column:122496}},"5090":{start:{line:4,column:122531},end:{line:4,column:122598}},"5091":{start:{line:4,column:122599},end:{line:4,column:122711}},"5092":{start:{line:4,column:122725},end:{line:4,column:122796}},"5093":{start:{line:4,column:122747},end:{line:4,column:122754}},"5094":{start:{line:4,column:122755},end:{line:4,column:122795}},"5095":{start:{line:4,column:122796},end:{line:4,column:123179}},"5096":{start:{line:4,column:123202},end:{line:4,column:123264}},"5097":{start:{line:4,column:123270},end:{line:4,column:123284}},"5098":{start:{line:4,column:123287},end:{line:4,column:123301}},"5099":{start:{line:4,column:123302},end:{line:4,column:123451}},"5100":{start:{line:4,column:123470},end:{line:4,column:123541}},"5101":{start:{line:4,column:123559},end:{line:4,column:123714}},"5102":{start:{line:4,column:123741},end:{line:4,column:123770}},"5103":{start:{line:4,column:123771},end:{line:4,column:123968}},"5104":{start:{line:4,column:123980},end:{line:4,column:124023}},"5105":{start:{line:4,column:124035},end:{line:4,column:124093}},"5106":{start:{line:4,column:124099},end:{line:4,column:124106}},"5107":{start:{line:4,column:124109},end:{line:4,column:124116}},"5108":{start:{line:4,column:124117},end:{line:4,column:124193}},"5109":{start:{line:4,column:124211},end:{line:4,column:124344}},"5110":{start:{line:4,column:124363},end:{line:4,column:124678}},"5111":{start:{line:4,column:124703},end:{line:4,column:124881}},"5112":{start:{line:4,column:124887},end:{line:4,column:125154}},"5113":{start:{line:4,column:124921},end:{line:4,column:124925}},"5114":{start:{line:4,column:124940},end:{line:4,column:124944}},"5115":{start:{line:4,column:124959},end:{line:4,column:124963}},"5116":{start:{line:4,column:124970},end:{line:4,column:124974}},"5117":{start:{line:4,column:124981},end:{line:4,column:124985}},"5118":{start:{line:4,column:124995},end:{line:4,column:124999}},"5119":{start:{line:4,column:125009},end:{line:4,column:125013}},"5120":{start:{line:4,column:125027},end:{line:4,column:125031}},"5121":{start:{line:4,column:125045},end:{line:4,column:125049}},"5122":{start:{line:4,column:125061},end:{line:4,column:125065}},"5123":{start:{line:4,column:125077},end:{line:4,column:125081}},"5124":{start:{line:4,column:125102},end:{line:4,column:125106}},"5125":{start:{line:4,column:125124},end:{line:4,column:125152}},"5126":{start:{line:4,column:125158},end:{line:4,column:125614}},"5127":{start:{line:4,column:125170},end:{line:4,column:125174}},"5128":{start:{line:4,column:125181},end:{line:4,column:125185}},"5129":{start:{line:4,column:125193},end:{line:4,column:125343}},"5130":{start:{line:4,column:125359},end:{line:4,column:125466}},"5131":{start:{line:4,column:125398},end:{line:4,column:125466}},"5132":{start:{line:4,column:125457},end:{line:4,column:125466}},"5133":{start:{line:4,column:125466},end:{line:4,column:125477}},"5134":{start:{line:4,column:125494},end:{line:4,column:125504}},"5135":{start:{line:4,column:125507},end:{line:4,column:125517}},"5136":{start:{line:4,column:125518},end:{line:4,column:125612}},"5137":{start:{line:4,column:125618},end:{line:4,column:125928}},"5138":{start:{line:4,column:125628},end:{line:4,column:125635}},"5139":{start:{line:4,column:125649},end:{line:4,column:125660}},"5140":{start:{line:4,column:125663},end:{line:4,column:125678}},"5141":{start:{line:4,column:125679},end:{line:4,column:125719}},"5142":{start:{line:4,column:125735},end:{line:4,column:125736}},"5143":{start:{line:4,column:125739},end:{line:4,column:125754}},"5144":{start:{line:4,column:125755},end:{line:4,column:125779}},"5145":{start:{line:4,column:125796},end:{line:4,column:125807}},"5146":{start:{line:4,column:125808},end:{line:4,column:125862}},"5147":{start:{line:4,column:125877},end:{line:4,column:125901}},"5148":{start:{line:4,column:125910},end:{line:4,column:125926}},"5149":{start:{line:4,column:125954},end:{line:4,column:125969}},"5150":{start:{line:4,column:125970},end:{line:4,column:125991}},"5151":{start:{line:4,column:125982},end:{line:4,column:125991}},"5152":{start:{line:4,column:125997},end:{line:4,column:125998}},"5153":{start:{line:4,column:125999},end:{line:4,column:126035}},"5154":{start:{line:4,column:126050},end:{line:4,column:126073}},"5155":{start:{line:4,column:126081},end:{line:4,column:126505}},"5156":{start:{line:4,column:126123},end:{line:4,column:126164}},"5157":{start:{line:4,column:126180},end:{line:4,column:126196}},"5158":{start:{line:4,column:126216},end:{line:4,column:126268}},"5159":{start:{line:4,column:126234},end:{line:4,column:126253}},"5160":{start:{line:4,column:126254},end:{line:4,column:126267}},"5161":{start:{line:4,column:126268},end:{line:4,column:126283}},"5162":{start:{line:4,column:126301},end:{line:4,column:126399}},"5163":{start:{line:4,column:126340},end:{line:4,column:126370}},"5164":{start:{line:4,column:126371},end:{line:4,column:126397}},"5165":{start:{line:4,column:126414},end:{line:4,column:126451}},"5166":{start:{line:4,column:126437},end:{line:4,column:126450}},"5167":{start:{line:4,column:126452},end:{line:4,column:126472}},"5168":{start:{line:4,column:126463},end:{line:4,column:126472}},"5169":{start:{line:4,column:126472},end:{line:4,column:126491}},"5170":{start:{line:4,column:126493},end:{line:4,column:126501}},"5171":{start:{line:4,column:126591},end:{line:4,column:126592}},"5172":{start:{line:4,column:126593},end:{line:4,column:126624}},"5173":{start:{line:4,column:126624},end:{line:4,column:126891}},"5174":{start:{line:4,column:126634},end:{line:4,column:126652}},"5175":{start:{line:4,column:126655},end:{line:4,column:126673}},"5176":{start:{line:4,column:126676},end:{line:4,column:126749}},"5177":{start:{line:4,column:126750},end:{line:4,column:126819}},"5178":{start:{line:4,column:126829},end:{line:4,column:126853}},"5179":{start:{line:4,column:126862},end:{line:4,column:126890}},"5180":{start:{line:4,column:126907},end:{line:4,column:126956}},"5181":{start:{line:4,column:126978},end:{line:4,column:126983}},"5182":{start:{line:4,column:126984},end:{line:4,column:127002}},"5183":{start:{line:4,column:126990},end:{line:4,column:127002}},"5184":{start:{line:4,column:127008},end:{line:4,column:127017}},"5185":{start:{line:4,column:127018},end:{line:4,column:127283}},"5186":{start:{line:4,column:127040},end:{line:4,column:127057}},"5187":{start:{line:4,column:127070},end:{line:4,column:127092}},"5188":{start:{line:4,column:127107},end:{line:4,column:127122}},"5189":{start:{line:4,column:127138},end:{line:4,column:127154}},"5190":{start:{line:4,column:127181},end:{line:4,column:127208}},"5191":{start:{line:4,column:127229},end:{line:4,column:127248}},"5192":{start:{line:4,column:127265},end:{line:4,column:127281}},"5193":{start:{line:4,column:127291},end:{line:4,column:127295}},"5194":{start:{line:4,column:127310},end:{line:4,column:127319}},"5195":{start:{line:4,column:127335},end:{line:4,column:127341}},"5196":{start:{line:4,column:127349},end:{line:4,column:127356}},"5197":{start:{line:4,column:127360},end:{line:4,column:127537}},"5198":{start:{line:4,column:127387},end:{line:4,column:127406}},"5199":{start:{line:4,column:127424},end:{line:4,column:127453}},"5200":{start:{line:4,column:127436},end:{line:4,column:127452}},"5201":{start:{line:4,column:127472},end:{line:4,column:127524}},"5202":{start:{line:4,column:127495},end:{line:4,column:127500}},"5203":{start:{line:4,column:127525},end:{line:4,column:127533}},"5204":{start:{line:4,column:127541},end:{line:4,column:127550}},"5205":{start:{line:4,column:127554},end:{line:4,column:128754}},"5206":{start:{line:4,column:127603},end:{line:4,column:127608}},"5207":{start:{line:4,column:127623},end:{line:4,column:127690}},"5208":{start:{line:4,column:127712},end:{line:4,column:127746}},"5209":{start:{line:4,column:127767},end:{line:4,column:127812}},"5210":{start:{line:4,column:127813},end:{line:4,column:127895}},"5211":{start:{line:4,column:127860},end:{line:4,column:127895}},"5212":{start:{line:4,column:127918},end:{line:4,column:127963}},"5213":{start:{line:4,column:127964},end:{line:4,column:128050}},"5214":{start:{line:4,column:128013},end:{line:4,column:128050}},"5215":{start:{line:4,column:128062},end:{line:4,column:128088}},"5216":{start:{line:4,column:128104},end:{line:4,column:128134}},"5217":{start:{line:4,column:128150},end:{line:4,column:128180}},"5218":{start:{line:4,column:128192},end:{line:4,column:128218}},"5219":{start:{line:4,column:128234},end:{line:4,column:128264}},"5220":{start:{line:4,column:128278},end:{line:4,column:128306}},"5221":{start:{line:4,column:128318},end:{line:4,column:128344}},"5222":{start:{line:4,column:128361},end:{line:4,column:128386}},"5223":{start:{line:4,column:128404},end:{line:4,column:128434}},"5224":{start:{line:4,column:128455},end:{line:4,column:128488}},"5225":{start:{line:4,column:128499},end:{line:4,column:128522}},"5226":{start:{line:4,column:128530},end:{line:4,column:128550}},"5227":{start:{line:4,column:128566},end:{line:4,column:128585}},"5228":{start:{line:4,column:128597},end:{line:4,column:128623}},"5229":{start:{line:4,column:128641},end:{line:4,column:128670}},"5230":{start:{line:4,column:128653},end:{line:4,column:128669}},"5231":{start:{line:4,column:128689},end:{line:4,column:128741}},"5232":{start:{line:4,column:128712},end:{line:4,column:128717}},"5233":{start:{line:4,column:128742},end:{line:4,column:128750}},"5234":{start:{line:4,column:128772},end:{line:4,column:128796}},"5235":{start:{line:4,column:128796},end:{line:4,column:128936}},"5236":{start:{line:4,column:128829},end:{line:4,column:128843}},"5237":{start:{line:4,column:128850},end:{line:4,column:128890}},"5238":{start:{line:4,column:128891},end:{line:4,column:128935}},"5239":{start:{line:4,column:128907},end:{line:4,column:128935}},"5240":{start:{line:4,column:128936},end:{line:4,column:128947}},"5241":{start:{line:4,column:128955},end:{line:4,column:128962}}},fnMap:{"0":{name:"m",decl:{start:{line:1,column:56},end:{line:1,column:57}},loc:{start:{line:1,column:60},end:{line:1,column:89}},line:1},"1":{name:"je",decl:{start:{line:1,column:98},end:{line:1,column:100}},loc:{start:{line:1,column:103},end:{line:1,column:236}},line:1},"2":{name:"(anonymous_2)",decl:{start:{line:1,column:112},end:{line:1,column:113}},loc:{start:{line:1,column:115},end:{line:1,column:156}},line:1},"3":{name:"(anonymous_3)",decl:{start:{line:1,column:246},end:{line:1,column:247}},loc:{start:{line:1,column:249},end:{line:3,column:56}},line:1},"4":{name:"(anonymous_4)",decl:{start:{line:1,column:249},end:{line:1,column:250}},loc:{start:{line:1,column:260},end:{line:3,column:56}},line:1},"5":{name:"(anonymous_5)",decl:{start:{line:2,column:8},end:{line:2,column:9}},loc:{start:{line:2,column:15},end:{line:2,column:40}},line:2},"6":{name:"nt",decl:{start:{line:3,column:67},end:{line:3,column:69}},loc:{start:{line:3,column:74},end:{line:3,column:121}},line:3},"7":{name:"(anonymous_7)",decl:{start:{line:3,column:135},end:{line:3,column:136}},loc:{start:{line:3,column:149},end:{line:3,column:231}},line:3},"8":{name:"(anonymous_8)",decl:{start:{line:3,column:231},end:{line:3,column:232}},loc:{start:{line:3,column:244},end:{line:3,column:650}},line:3},"9":{name:"(anonymous_9)",decl:{start:{line:3,column:650},end:{line:3,column:651}},loc:{start:{line:3,column:656},end:{line:3,column:854}},line:3},"10":{name:"(anonymous_10)",decl:{start:{line:3,column:854},end:{line:3,column:855}},loc:{start:{line:3,column:867},end:{line:3,column:937}},line:3},"11":{name:"(anonymous_11)",decl:{start:{line:3,column:937},end:{line:3,column:938}},loc:{start:{line:3,column:950},end:{line:3,column:1031}},line:3},"12":{name:"(anonymous_12)",decl:{start:{line:3,column:1031},end:{line:3,column:1032}},loc:{start:{line:3,column:1047},end:{line:3,column:1124}},line:3},"13":{name:"(anonymous_13)",decl:{start:{line:3,column:1124},end:{line:3,column:1125}},loc:{start:{line:3,column:1133},end:{line:3,column:1207}},line:3},"14":{name:"(anonymous_14)",decl:{start:{line:3,column:1218},end:{line:3,column:1219}},loc:{start:{line:3,column:1222},end:{line:3,column:1256}},line:3},"15":{name:"rr",decl:{start:{line:3,column:1284},end:{line:3,column:1286}},loc:{start:{line:3,column:1289},end:{line:3,column:1370}},line:3},"16":{name:"Ka",decl:{start:{line:3,column:1379},end:{line:3,column:1381}},loc:{start:{line:3,column:1384},end:{line:3,column:1410}},line:3},"17":{name:"(anonymous_17)",decl:{start:{line:3,column:1560},end:{line:3,column:1561}},loc:{start:{line:3,column:1580},end:{line:3,column:1665}},line:3},"18":{name:"(anonymous_18)",decl:{start:{line:3,column:1666},end:{line:3,column:1667}},loc:{start:{line:3,column:1681},end:{line:3,column:1742}},line:3},"19":{name:"or",decl:{start:{line:3,column:1769},end:{line:3,column:1771}},loc:{start:{line:3,column:1774},end:{line:3,column:1846}},line:3},"20":{name:"(anonymous_20)",decl:{start:{line:3,column:1789},end:{line:3,column:1790}},loc:{start:{line:3,column:1793},end:{line:3,column:1844}},line:3},"21":{name:"an",decl:{start:{line:3,column:1855},end:{line:3,column:1857}},loc:{start:{line:3,column:1859},end:{line:3,column:1861}},line:3},"22":{name:"Xa",decl:{start:{line:3,column:1899},end:{line:3,column:1901}},loc:{start:{line:3,column:1904},end:{line:3,column:1929}},line:3},"23":{name:"ec",decl:{start:{line:3,column:1938},end:{line:3,column:1940}},loc:{start:{line:3,column:1943},end:{line:3,column:1968}},line:3},"24":{name:"ii",decl:{start:{line:3,column:1977},end:{line:3,column:1979}},loc:{start:{line:3,column:1986},end:{line:3,column:2018}},line:3},"25":{name:"kt",decl:{start:{line:3,column:2039},end:{line:3,column:2041}},loc:{start:{line:3,column:2044},end:{line:3,column:2207}},line:3},"26":{name:"tc",decl:{start:{line:3,column:2216},end:{line:3,column:2218}},loc:{start:{line:3,column:2221},end:{line:3,column:2299}},line:3},"27":{name:"(anonymous_27)",decl:{start:{line:3,column:2322},end:{line:3,column:2323}},loc:{start:{line:3,column:2336},end:{line:3,column:2425}},line:3},"28":{name:"(anonymous_28)",decl:{start:{line:3,column:2425},end:{line:3,column:2426}},loc:{start:{line:3,column:2445},end:{line:3,column:2467}},line:3},"29":{name:"(anonymous_29)",decl:{start:{line:3,column:2467},end:{line:3,column:2468}},loc:{start:{line:3,column:2474},end:{line:3,column:2519}},line:3},"30":{name:"(anonymous_30)",decl:{start:{line:3,column:2519},end:{line:3,column:2520}},loc:{start:{line:3,column:2527},end:{line:3,column:2593}},line:3},"31":{name:"(anonymous_31)",decl:{start:{line:3,column:2593},end:{line:3,column:2594}},loc:{start:{line:3,column:2603},end:{line:3,column:2668}},line:3},"32":{name:"(anonymous_32)",decl:{start:{line:3,column:2668},end:{line:3,column:2669}},loc:{start:{line:3,column:2681},end:{line:3,column:2757}},line:3},"33":{name:"(anonymous_33)",decl:{start:{line:3,column:2757},end:{line:3,column:2758}},loc:{start:{line:3,column:2765},end:{line:3,column:2791}},line:3},"34":{name:"(anonymous_34)",decl:{start:{line:3,column:2791},end:{line:3,column:2792}},loc:{start:{line:3,column:2800},end:{line:3,column:2859}},line:3},"35":{name:"(anonymous_35)",decl:{start:{line:3,column:2859},end:{line:3,column:2860}},loc:{start:{line:3,column:2870},end:{line:3,column:2931}},line:3},"36":{name:"si",decl:{start:{line:3,column:2969},end:{line:3,column:2971}},loc:{start:{line:3,column:2976},end:{line:3,column:2997}},line:3},"37":{name:"(anonymous_37)",decl:{start:{line:3,column:3010},end:{line:3,column:3011}},loc:{start:{line:3,column:3024},end:{line:3,column:3048}},line:3},"38":{name:"(anonymous_38)",decl:{start:{line:3,column:3048},end:{line:3,column:3049}},loc:{start:{line:3,column:3055},end:{line:3,column:3124}},line:3},"39":{name:"(anonymous_39)",decl:{start:{line:3,column:3124},end:{line:3,column:3125}},loc:{start:{line:3,column:3132},end:{line:3,column:3213}},line:3},"40":{name:"(anonymous_40)",decl:{start:{line:3,column:3213},end:{line:3,column:3214}},loc:{start:{line:3,column:3223},end:{line:3,column:3299}},line:3},"41":{name:"(anonymous_41)",decl:{start:{line:3,column:3321},end:{line:3,column:3322}},loc:{start:{line:3,column:3339},end:{line:3,column:3651}},line:3},"42":{name:"(anonymous_42)",decl:{start:{line:3,column:3499},end:{line:3,column:3500}},loc:{start:{line:3,column:3503},end:{line:3,column:3521}},line:3},"43":{name:"ir",decl:{start:{line:3,column:3662},end:{line:3,column:3664}},loc:{start:{line:3,column:3667},end:{line:3,column:3721}},line:3},"44":{name:"ep",decl:{start:{line:3,column:3730},end:{line:3,column:3732}},loc:{start:{line:3,column:3735},end:{line:3,column:3744}},line:3},"45":{name:"ai",decl:{start:{line:3,column:3753},end:{line:3,column:3755}},loc:{start:{line:3,column:3760},end:{line:3,column:3822}},line:3},"46":{name:"(anonymous_46)",decl:{start:{line:3,column:3810},end:{line:3,column:3811}},loc:{start:{line:3,column:3814},end:{line:3,column:3820}},line:3},"47":{name:"ee",decl:{start:{line:3,column:3947},end:{line:3,column:3949}},loc:{start:{line:3,column:3952},end:{line:3,column:3962}},line:3},"48":{name:"np",decl:{start:{line:3,column:3971},end:{line:3,column:3973}},loc:{start:{line:3,column:3979},end:{line:3,column:3993}},line:3},"49":{name:"li",decl:{start:{line:3,column:4002},end:{line:3,column:4004}},loc:{start:{line:3,column:4007},end:{line:3,column:4093}},line:3},"50":{name:"(anonymous_50)",decl:{start:{line:3,column:4049},end:{line:3,column:4050}},loc:{start:{line:3,column:4060},end:{line:3,column:4092}},line:3},"51":{name:"(anonymous_51)",decl:{start:{line:3,column:4077},end:{line:3,column:4078}},loc:{start:{line:3,column:4084},end:{line:3,column:4088}},line:3},"52":{name:"(anonymous_52)",decl:{start:{line:3,column:4100},end:{line:3,column:4101}},loc:{start:{line:3,column:4104},end:{line:3,column:4833}},line:3},"53":{name:"(anonymous_53)",decl:{start:{line:3,column:4113},end:{line:3,column:4114}},loc:{start:{line:3,column:4127},end:{line:3,column:4151}},line:3},"54":{name:"(anonymous_54)",decl:{start:{line:3,column:4151},end:{line:3,column:4152}},loc:{start:{line:3,column:4158},end:{line:3,column:4207}},line:3},"55":{name:"(anonymous_55)",decl:{start:{line:3,column:4207},end:{line:3,column:4208}},loc:{start:{line:3,column:4223},end:{line:3,column:4365}},line:3},"56":{name:"(anonymous_56)",decl:{start:{line:3,column:4262},end:{line:3,column:4263}},loc:{start:{line:3,column:4266},end:{line:3,column:4361}},line:3},"57":{name:"(anonymous_57)",decl:{start:{line:3,column:4365},end:{line:3,column:4366}},loc:{start:{line:3,column:4381},end:{line:3,column:4433}},line:3},"58":{name:"(anonymous_58)",decl:{start:{line:3,column:4433},end:{line:3,column:4434}},loc:{start:{line:3,column:4445},end:{line:3,column:4580}},line:3},"59":{name:"(anonymous_59)",decl:{start:{line:3,column:4467},end:{line:3,column:4468}},loc:{start:{line:3,column:4474},end:{line:3,column:4578}},line:3},"60":{name:"(anonymous_60)",decl:{start:{line:3,column:4494},end:{line:3,column:4495}},loc:{start:{line:3,column:4497},end:{line:3,column:4538}},line:3},"61":{name:"(anonymous_61)",decl:{start:{line:3,column:4580},end:{line:3,column:4581}},loc:{start:{line:3,column:4593},end:{line:3,column:4663}},line:3},"62":{name:"(anonymous_62)",decl:{start:{line:3,column:4663},end:{line:3,column:4664}},loc:{start:{line:3,column:4669},end:{line:3,column:4682}},line:3},"63":{name:"(anonymous_63)",decl:{start:{line:3,column:4682},end:{line:3,column:4683}},loc:{start:{line:3,column:4692},end:{line:3,column:4712}},line:3},"64":{name:"(anonymous_64)",decl:{start:{line:3,column:4712},end:{line:3,column:4713}},loc:{start:{line:3,column:4724},end:{line:3,column:4802}},line:3},"65":{name:"(anonymous_65)",decl:{start:{line:3,column:4746},end:{line:3,column:4747}},loc:{start:{line:3,column:4753},end:{line:3,column:4800}},line:3},"66":{name:"(anonymous_66)",decl:{start:{line:3,column:4775},end:{line:3,column:4776}},loc:{start:{line:3,column:4778},end:{line:3,column:4781}},line:3},"67":{name:"(anonymous_67)",decl:{start:{line:3,column:4782},end:{line:3,column:4783}},loc:{start:{line:3,column:4785},end:{line:3,column:4789}},line:3},"68":{name:"(anonymous_68)",decl:{start:{line:3,column:4790},end:{line:3,column:4791}},loc:{start:{line:3,column:4794},end:{line:3,column:4798}},line:3},"69":{name:"(anonymous_69)",decl:{start:{line:3,column:4819},end:{line:3,column:4820}},loc:{start:{line:3,column:4822},end:{line:3,column:4830}},line:3},"70":{name:"nc",decl:{start:{line:3,column:4846},end:{line:3,column:4848}},loc:{start:{line:3,column:4851},end:{line:3,column:4911}},line:3},"71":{name:"rp",decl:{start:{line:3,column:4920},end:{line:3,column:4922}},loc:{start:{line:3,column:4925},end:{line:3,column:4973}},line:3},"72":{name:"op",decl:{start:{line:3,column:4982},end:{line:3,column:4984}},loc:{start:{line:3,column:4987},end:{line:3,column:5028}},line:3},"73":{name:"(anonymous_73)",decl:{start:{line:3,column:5038},end:{line:3,column:5039}},loc:{start:{line:3,column:5041},end:{line:3,column:5131}},line:3},"74":{name:"(anonymous_74)",decl:{start:{line:3,column:5041},end:{line:3,column:5042}},loc:{start:{line:3,column:5051},end:{line:3,column:5131}},line:3},"75":{name:"(anonymous_75)",decl:{start:{line:3,column:5141},end:{line:3,column:5142}},loc:{start:{line:3,column:5145},end:{line:3,column:6587}},line:3},"76":{name:"(anonymous_76)",decl:{start:{line:3,column:5164},end:{line:3,column:5165}},loc:{start:{line:3,column:5177},end:{line:3,column:5303}},line:3},"77":{name:"(anonymous_77)",decl:{start:{line:3,column:5303},end:{line:3,column:5304}},loc:{start:{line:3,column:5310},end:{line:3,column:5357}},line:3},"78":{name:"(anonymous_78)",decl:{start:{line:3,column:5357},end:{line:3,column:5358}},loc:{start:{line:3,column:5373},end:{line:3,column:5402}},line:3},"79":{name:"(anonymous_79)",decl:{start:{line:3,column:5402},end:{line:3,column:5403}},loc:{start:{line:3,column:5409},end:{line:3,column:5582}},line:3},"80":{name:"(anonymous_80)",decl:{start:{line:3,column:5413},end:{line:3,column:5414}},loc:{start:{line:3,column:5417},end:{line:3,column:5580}},line:3},"81":{name:"(anonymous_81)",decl:{start:{line:3,column:5582},end:{line:3,column:5583}},loc:{start:{line:3,column:5590},end:{line:3,column:5751}},line:3},"82":{name:"(anonymous_82)",decl:{start:{line:3,column:5594},end:{line:3,column:5595}},loc:{start:{line:3,column:5598},end:{line:3,column:5749}},line:3},"83":{name:"(anonymous_83)",decl:{start:{line:3,column:5751},end:{line:3,column:5752}},loc:{start:{line:3,column:5761},end:{line:3,column:5891}},line:3},"84":{name:"(anonymous_84)",decl:{start:{line:3,column:5765},end:{line:3,column:5766}},loc:{start:{line:3,column:5769},end:{line:3,column:5889}},line:3},"85":{name:"(anonymous_85)",decl:{start:{line:3,column:5891},end:{line:3,column:5892}},loc:{start:{line:3,column:5904},end:{line:3,column:5977}},line:3},"86":{name:"(anonymous_86)",decl:{start:{line:3,column:5977},end:{line:3,column:5978}},loc:{start:{line:3,column:5991},end:{line:3,column:6062}},line:3},"87":{name:"(anonymous_87)",decl:{start:{line:3,column:6062},end:{line:3,column:6063}},loc:{start:{line:3,column:6078},end:{line:3,column:6131}},line:3},"88":{name:"(anonymous_88)",decl:{start:{line:3,column:6131},end:{line:3,column:6132}},loc:{start:{line:3,column:6144},end:{line:3,column:6230}},line:3},"89":{name:"(anonymous_89)",decl:{start:{line:3,column:6230},end:{line:3,column:6231}},loc:{start:{line:3,column:6248},end:{line:3,column:6396}},line:3},"90":{name:"(anonymous_90)",decl:{start:{line:3,column:6353},end:{line:3,column:6354}},loc:{start:{line:3,column:6357},end:{line:3,column:6393}},line:3},"91":{name:"(anonymous_91)",decl:{start:{line:3,column:6396},end:{line:3,column:6397}},loc:{start:{line:3,column:6422},end:{line:3,column:6499}},line:3},"92":{name:"(anonymous_92)",decl:{start:{line:3,column:6499},end:{line:3,column:6500}},loc:{start:{line:3,column:6513},end:{line:3,column:6549}},line:3},"93":{name:"(anonymous_93)",decl:{start:{line:3,column:6566},end:{line:3,column:6567}},loc:{start:{line:3,column:6573},end:{line:3,column:6584}},line:3},"94":{name:"(anonymous_94)",decl:{start:{line:3,column:6611},end:{line:3,column:6612}},loc:{start:{line:3,column:6627},end:{line:3,column:6669}},line:3},"95":{name:"(anonymous_95)",decl:{start:{line:3,column:6669},end:{line:3,column:6670}},loc:{start:{line:3,column:6676},end:{line:3,column:6775}},line:3},"96":{name:"(anonymous_96)",decl:{start:{line:3,column:6775},end:{line:3,column:6776}},loc:{start:{line:3,column:6783},end:{line:3,column:6883}},line:3},"97":{name:"(anonymous_97)",decl:{start:{line:3,column:6883},end:{line:3,column:6884}},loc:{start:{line:3,column:6893},end:{line:3,column:6994}},line:3},"98":{name:"(anonymous_98)",decl:{start:{line:3,column:6994},end:{line:3,column:6995}},loc:{start:{line:3,column:7007},end:{line:3,column:7107}},line:3},"99":{name:"(anonymous_99)",decl:{start:{line:3,column:7133},end:{line:3,column:7134}},loc:{start:{line:3,column:7147},end:{line:3,column:7170}},line:3},"100":{name:"(anonymous_100)",decl:{start:{line:3,column:7170},end:{line:3,column:7171}},loc:{start:{line:3,column:7181},end:{line:3,column:7205}},line:3},"101":{name:"(anonymous_101)",decl:{start:{line:3,column:7205},end:{line:3,column:7206}},loc:{start:{line:3,column:7218},end:{line:3,column:7284}},line:3},"102":{name:"(anonymous_102)",decl:{start:{line:3,column:7284},end:{line:3,column:7285}},loc:{start:{line:3,column:7294},end:{line:3,column:7383}},line:3},"103":{name:"(anonymous_103)",decl:{start:{line:3,column:7383},end:{line:3,column:7384}},loc:{start:{line:3,column:7390},end:{line:3,column:7417}},line:3},"104":{name:"ar",decl:{start:{line:3,column:7428},end:{line:3,column:7430}},loc:{start:{line:3,column:7433},end:{line:3,column:7458}},line:3},"105":{name:"oc",decl:{start:{line:3,column:7467},end:{line:3,column:7469}},loc:{start:{line:3,column:7472},end:{line:3,column:7494}},line:3},"106":{name:"cr",decl:{start:{line:3,column:7503},end:{line:3,column:7505}},loc:{start:{line:3,column:7508},end:{line:3,column:7540}},line:3},"107":{name:"Ve",decl:{start:{line:3,column:7549},end:{line:3,column:7551}},loc:{start:{line:3,column:7554},end:{line:3,column:7587}},line:3},"108":{name:"sc",decl:{start:{line:3,column:7596},end:{line:3,column:7598}},loc:{start:{line:3,column:7607},end:{line:3,column:7891}},line:3},"109":{name:"o",decl:{start:{line:3,column:7617},end:{line:3,column:7618}},loc:{start:{line:3,column:7621},end:{line:3,column:7671}},line:3},"110":{name:"(anonymous_110)",decl:{start:{line:3,column:7652},end:{line:3,column:7653}},loc:{start:{line:3,column:7663},end:{line:3,column:7669}},line:3},"111":{name:"(anonymous_111)",decl:{start:{line:3,column:7698},end:{line:3,column:7699}},loc:{start:{line:3,column:7711},end:{line:3,column:7889}},line:3},"112":{name:"a",decl:{start:{line:3,column:7721},end:{line:3,column:7722}},loc:{start:{line:3,column:7725},end:{line:3,column:7758}},line:3},"113":{name:"c",decl:{start:{line:3,column:7767},end:{line:3,column:7768}},loc:{start:{line:3,column:7771},end:{line:3,column:7805}},line:3},"114":{name:"l",decl:{start:{line:3,column:7814},end:{line:3,column:7815}},loc:{start:{line:3,column:7818},end:{line:3,column:7858}},line:3},"115":{name:"ic",decl:{start:{line:3,column:7900},end:{line:3,column:7902}},loc:{start:{line:3,column:7905},end:{line:3,column:8191}},line:3},"116":{name:"(anonymous_116)",decl:{start:{line:3,column:8035},end:{line:3,column:8036}},loc:{start:{line:3,column:8045},end:{line:3,column:8106}},line:3},"117":{name:"it",decl:{start:{line:3,column:8200},end:{line:3,column:8202}},loc:{start:{line:3,column:8205},end:{line:3,column:8258}},line:3},"118":{name:"ac",decl:{start:{line:3,column:8267},end:{line:3,column:8269}},loc:{start:{line:3,column:8276},end:{line:3,column:9014}},line:3},"119":{name:"(anonymous_119)",decl:{start:{line:3,column:8541},end:{line:3,column:8542}},loc:{start:{line:3,column:8551},end:{line:3,column:8564}},line:3},"120":{name:"s",decl:{start:{line:3,column:8576},end:{line:3,column:8577}},loc:{start:{line:3,column:8580},end:{line:3,column:8637}},line:3},"121":{name:"(anonymous_121)",decl:{start:{line:3,column:8588},end:{line:3,column:8589}},loc:{start:{line:3,column:8599},end:{line:3,column:8636}},line:3},"122":{name:"a",decl:{start:{line:3,column:8646},end:{line:3,column:8647}},loc:{start:{line:3,column:8652},end:{line:3,column:8760}},line:3},"123":{name:"(anonymous_123)",decl:{start:{line:3,column:8665},end:{line:3,column:8666}},loc:{start:{line:3,column:8676},end:{line:3,column:8740}},line:3},"124":{name:"(anonymous_124)",decl:{start:{line:3,column:8696},end:{line:3,column:8697}},loc:{start:{line:3,column:8709},end:{line:3,column:8738}},line:3},"125":{name:"c",decl:{start:{line:3,column:8769},end:{line:3,column:8770}},loc:{start:{line:3,column:8775},end:{line:3,column:8814}},line:3},"126":{name:"l",decl:{start:{line:3,column:8823},end:{line:3,column:8824}},loc:{start:{line:3,column:8827},end:{line:3,column:8900}},line:3},"127":{name:"u",decl:{start:{line:3,column:8909},end:{line:3,column:8910}},loc:{start:{line:3,column:8913},end:{line:3,column:8926}},line:3},"128":{name:"d",decl:{start:{line:3,column:8935},end:{line:3,column:8936}},loc:{start:{line:3,column:8939},end:{line:3,column:8953}},line:3},"129":{name:"p",decl:{start:{line:3,column:8962},end:{line:3,column:8963}},loc:{start:{line:3,column:8968},end:{line:3,column:9013}},line:3},"130":{name:"cc",decl:{start:{line:3,column:9023},end:{line:3,column:9025}},loc:{start:{line:3,column:9028},end:{line:3,column:9492}},line:3},"131":{name:"(anonymous_131)",decl:{start:{line:3,column:9279},end:{line:3,column:9280}},loc:{start:{line:3,column:9289},end:{line:3,column:9302}},line:3},"132":{name:"r",decl:{start:{line:3,column:9315},end:{line:3,column:9316}},loc:{start:{line:3,column:9319},end:{line:3,column:9411}},line:3},"133":{name:"(anonymous_133)",decl:{start:{line:3,column:9331},end:{line:3,column:9332}},loc:{start:{line:3,column:9342},end:{line:3,column:9410}},line:3},"134":{name:"(anonymous_134)",decl:{start:{line:3,column:9362},end:{line:3,column:9363}},loc:{start:{line:3,column:9375},end:{line:3,column:9408}},line:3},"135":{name:"o",decl:{start:{line:3,column:9420},end:{line:3,column:9421}},loc:{start:{line:3,column:9430},end:{line:3,column:9491}},line:3},"136":{name:"(anonymous_136)",decl:{start:{line:3,column:9455},end:{line:3,column:9456}},loc:{start:{line:3,column:9466},end:{line:3,column:9487}},line:3},"137":{name:"(anonymous_137)",decl:{start:{line:3,column:9499},end:{line:3,column:9500}},loc:{start:{line:3,column:9502},end:{line:3,column:9552}},line:3},"138":{name:"lr",decl:{start:{line:3,column:9562},end:{line:3,column:9564}},loc:{start:{line:3,column:9567},end:{line:3,column:9586}},line:3},"139":{name:"ur",decl:{start:{line:3,column:9595},end:{line:3,column:9597}},loc:{start:{line:3,column:9600},end:{line:3,column:9617}},line:3},"140":{name:"dr",decl:{start:{line:3,column:9626},end:{line:3,column:9628}},loc:{start:{line:3,column:9631},end:{line:3,column:9690}},line:3},"141":{name:"fr",decl:{start:{line:3,column:9699},end:{line:3,column:9701}},loc:{start:{line:3,column:9704},end:{line:3,column:9923}},line:3},"142":{name:"ip",decl:{start:{line:3,column:9932},end:{line:3,column:9934}},loc:{start:{line:3,column:9936},end:{line:3,column:10017}},line:3},"143":{name:"hr",decl:{start:{line:3,column:10038},end:{line:3,column:10040}},loc:{start:{line:3,column:10043},end:{line:3,column:10062}},line:3},"144":{name:"gr",decl:{start:{line:3,column:10071},end:{line:3,column:10073}},loc:{start:{line:3,column:10076},end:{line:3,column:10260}},line:3},"145":{name:"(anonymous_145)",decl:{start:{line:3,column:10102},end:{line:3,column:10103}},loc:{start:{line:3,column:10113},end:{line:3,column:10258}},line:3},"146":{name:"mr",decl:{start:{line:3,column:10269},end:{line:3,column:10271}},loc:{start:{line:3,column:10274},end:{line:3,column:10298}},line:3},"147":{name:"k",decl:{start:{line:3,column:10307},end:{line:3,column:10308}},loc:{start:{line:3,column:10311},end:{line:3,column:10495}},line:3},"148":{name:"sp",decl:{start:{line:3,column:10504},end:{line:3,column:10506}},loc:{start:{line:3,column:10509},end:{line:3,column:10669}},line:3},"149":{name:"(anonymous_149)",decl:{start:{line:3,column:10523},end:{line:3,column:10524}},loc:{start:{line:3,column:10526},end:{line:3,column:10667}},line:3},"150":{name:"ap",decl:{start:{line:3,column:10678},end:{line:3,column:10680}},loc:{start:{line:3,column:10683},end:{line:3,column:10767}},line:3},"151":{name:"(anonymous_151)",decl:{start:{line:3,column:10697},end:{line:3,column:10698}},loc:{start:{line:3,column:10700},end:{line:3,column:10765}},line:3},"152":{name:"cp",decl:{start:{line:3,column:10776},end:{line:3,column:10778}},loc:{start:{line:3,column:10781},end:{line:3,column:10877}},line:3},"153":{name:"(anonymous_153)",decl:{start:{line:3,column:10795},end:{line:3,column:10796}},loc:{start:{line:3,column:10798},end:{line:3,column:10875}},line:3},"154":{name:"(anonymous_154)",decl:{start:{line:3,column:10806},end:{line:3,column:10807}},loc:{start:{line:3,column:10809},end:{line:3,column:10845}},line:3},"155":{name:"(anonymous_155)",decl:{start:{line:3,column:10846},end:{line:3,column:10847}},loc:{start:{line:3,column:10849},end:{line:3,column:10859}},line:3},"156":{name:"lp",decl:{start:{line:3,column:10886},end:{line:3,column:10888}},loc:{start:{line:3,column:10891},end:{line:3,column:10968}},line:3},"157":{name:"(anonymous_157)",decl:{start:{line:3,column:10905},end:{line:3,column:10906}},loc:{start:{line:3,column:10908},end:{line:3,column:10966}},line:3},"158":{name:"lc",decl:{start:{line:3,column:10977},end:{line:3,column:10979}},loc:{start:{line:3,column:10982},end:{line:3,column:11031}},line:3},"159":{name:"(anonymous_159)",decl:{start:{line:3,column:10996},end:{line:3,column:10997}},loc:{start:{line:3,column:10999},end:{line:3,column:11029}},line:3},"160":{name:"(anonymous_160)",decl:{start:{line:3,column:11014},end:{line:3,column:11015}},loc:{start:{line:3,column:11017},end:{line:3,column:11027}},line:3},"161":{name:"up",decl:{start:{line:3,column:11040},end:{line:3,column:11042}},loc:{start:{line:3,column:11045},end:{line:3,column:11063}},line:3},"162":{name:"dp",decl:{start:{line:3,column:11072},end:{line:3,column:11074}},loc:{start:{line:3,column:11079},end:{line:3,column:11340}},line:3},"163":{name:"(anonymous_163)",decl:{start:{line:3,column:11121},end:{line:3,column:11122}},loc:{start:{line:3,column:11132},end:{line:3,column:11338}},line:3},"164":{name:"z",decl:{start:{line:3,column:11349},end:{line:3,column:11350}},loc:{start:{line:3,column:11366},end:{line:3,column:11477}},line:3},"165":{name:"(anonymous_165)",decl:{start:{line:3,column:11384},end:{line:3,column:11385}},loc:{start:{line:3,column:11394},end:{line:3,column:11449}},line:3},"166":{name:"fp",decl:{start:{line:3,column:11486},end:{line:3,column:11488}},loc:{start:{line:3,column:11491},end:{line:3,column:11510}},line:3},"167":{name:"w",decl:{start:{line:3,column:11519},end:{line:3,column:11520}},loc:{start:{line:3,column:11523},end:{line:3,column:11680}},line:3},"168":{name:"(anonymous_168)",decl:{start:{line:3,column:11531},end:{line:3,column:11532}},loc:{start:{line:3,column:11534},end:{line:3,column:11679}},line:3},"169":{name:"(anonymous_169)",decl:{start:{line:3,column:11558},end:{line:3,column:11559}},loc:{start:{line:3,column:11569},end:{line:3,column:11615}},line:3},"170":{name:"_",decl:{start:{line:3,column:11689},end:{line:3,column:11690}},loc:{start:{line:3,column:11701},end:{line:3,column:11727}},line:3},"171":{name:"(anonymous_171)",decl:{start:{line:3,column:11751},end:{line:3,column:11752}},loc:{start:{line:3,column:11775},end:{line:3,column:12094}},line:3},"172":{name:"(anonymous_172)",decl:{start:{line:3,column:11841},end:{line:3,column:11842}},loc:{start:{line:3,column:11852},end:{line:3,column:11883}},line:3},"173":{name:"(anonymous_173)",decl:{start:{line:3,column:11910},end:{line:3,column:11911}},loc:{start:{line:3,column:11921},end:{line:3,column:11979}},line:3},"174":{name:"(anonymous_174)",decl:{start:{line:3,column:12010},end:{line:3,column:12011}},loc:{start:{line:3,column:12020},end:{line:3,column:12077}},line:3},"175":{name:"(anonymous_175)",decl:{start:{line:3,column:12094},end:{line:3,column:12095}},loc:{start:{line:3,column:12107},end:{line:3,column:12267}},line:3},"176":{name:"yr",decl:{start:{line:3,column:12278},end:{line:3,column:12280}},loc:{start:{line:3,column:12287},end:{line:3,column:12408}},line:3},"177":{name:"(anonymous_177)",decl:{start:{line:3,column:12297},end:{line:3,column:12298}},loc:{start:{line:3,column:12304},end:{line:3,column:12406}},line:3},"178":{name:"(anonymous_178)",decl:{start:{line:3,column:12321},end:{line:3,column:12322}},loc:{start:{line:3,column:12324},end:{line:3,column:12346}},line:3},"179":{name:"(anonymous_179)",decl:{start:{line:3,column:12330},end:{line:3,column:12331}},loc:{start:{line:3,column:12334},end:{line:3,column:12343}},line:3},"180":{name:"(anonymous_180)",decl:{start:{line:3,column:12347},end:{line:3,column:12348}},loc:{start:{line:3,column:12351},end:{line:3,column:12376}},line:3},"181":{name:"(anonymous_181)",decl:{start:{line:3,column:12357},end:{line:3,column:12358}},loc:{start:{line:3,column:12361},end:{line:3,column:12373}},line:3},"182":{name:"(anonymous_182)",decl:{start:{line:3,column:12377},end:{line:3,column:12378}},loc:{start:{line:3,column:12380},end:{line:3,column:12403}},line:3},"183":{name:"(anonymous_183)",decl:{start:{line:3,column:12386},end:{line:3,column:12387}},loc:{start:{line:3,column:12390},end:{line:3,column:12400}},line:3},"184":{name:"vr",decl:{start:{line:3,column:12417},end:{line:3,column:12419}},loc:{start:{line:3,column:12426},end:{line:3,column:12486}},line:3},"185":{name:"(anonymous_185)",decl:{start:{line:3,column:12436},end:{line:3,column:12437}},loc:{start:{line:3,column:12443},end:{line:3,column:12484}},line:3},"186":{name:"(anonymous_186)",decl:{start:{line:3,column:12461},end:{line:3,column:12462}},loc:{start:{line:3,column:12465},end:{line:3,column:12479}},line:3},"187":{name:"uc",decl:{start:{line:3,column:12495},end:{line:3,column:12497}},loc:{start:{line:3,column:12502},end:{line:3,column:12533}},line:3},"188":{name:"dc",decl:{start:{line:3,column:12542},end:{line:3,column:12544}},loc:{start:{line:3,column:12549},end:{line:3,column:12580}},line:3},"189":{name:"fc",decl:{start:{line:3,column:12589},end:{line:3,column:12591}},loc:{start:{line:3,column:12596},end:{line:3,column:12724}},line:3},"190":{name:"(anonymous_190)",decl:{start:{line:3,column:12610},end:{line:3,column:12611}},loc:{start:{line:3,column:12613},end:{line:3,column:12722}},line:3},"191":{name:"(anonymous_191)",decl:{start:{line:3,column:12640},end:{line:3,column:12641}},loc:{start:{line:3,column:12650},end:{line:3,column:12720}},line:3},"192":{name:"pc",decl:{start:{line:3,column:12733},end:{line:3,column:12735}},loc:{start:{line:3,column:12740},end:{line:3,column:12935}},line:3},"193":{name:"(anonymous_193)",decl:{start:{line:3,column:12754},end:{line:3,column:12755}},loc:{start:{line:3,column:12757},end:{line:3,column:12933}},line:3},"194":{name:"(anonymous_194)",decl:{start:{line:3,column:12777},end:{line:3,column:12778}},loc:{start:{line:3,column:12781},end:{line:3,column:12902}},line:3},"195":{name:"(anonymous_195)",decl:{start:{line:3,column:12798},end:{line:3,column:12799}},loc:{start:{line:3,column:12802},end:{line:3,column:12895}},line:3},"196":{name:"(anonymous_196)",decl:{start:{line:3,column:12904},end:{line:3,column:12905}},loc:{start:{line:3,column:12908},end:{line:3,column:12932}},line:3},"197":{name:"Er",decl:{start:{line:3,column:12944},end:{line:3,column:12946}},loc:{start:{line:3,column:12951},end:{line:3,column:13139}},line:3},"198":{name:"(anonymous_198)",decl:{start:{line:3,column:13014},end:{line:3,column:13015}},loc:{start:{line:3,column:13017},end:{line:3,column:13137}},line:3},"199":{name:"(anonymous_199)",decl:{start:{line:3,column:13024},end:{line:3,column:13025}},loc:{start:{line:3,column:13028},end:{line:3,column:13135}},line:3},"200":{name:"(anonymous_200)",decl:{start:{line:3,column:13067},end:{line:3,column:13068}},loc:{start:{line:3,column:13071},end:{line:3,column:13128}},line:3},"201":{name:"(anonymous_201)",decl:{start:{line:3,column:13086},end:{line:3,column:13087}},loc:{start:{line:3,column:13089},end:{line:3,column:13126}},line:3},"202":{name:"hc",decl:{start:{line:3,column:13148},end:{line:3,column:13150}},loc:{start:{line:3,column:13155},end:{line:3,column:13175}},line:3},"203":{name:"gc",decl:{start:{line:3,column:13184},end:{line:3,column:13186}},loc:{start:{line:3,column:13191},end:{line:3,column:13360}},line:3},"204":{name:"He",decl:{start:{line:3,column:13369},end:{line:3,column:13371}},loc:{start:{line:3,column:13376},end:{line:3,column:13399}},line:3},"205":{name:"pp",decl:{start:{line:3,column:13408},end:{line:3,column:13410}},loc:{start:{line:3,column:13416},end:{line:3,column:13444}},line:3},"206":{name:"Be",decl:{start:{line:3,column:13453},end:{line:3,column:13455}},loc:{start:{line:3,column:13460},end:{line:3,column:13535}},line:3},"207":{name:"(anonymous_207)",decl:{start:{line:3,column:13470},end:{line:3,column:13471}},loc:{start:{line:3,column:13477},end:{line:3,column:13533}},line:3},"208":{name:"(anonymous_208)",decl:{start:{line:3,column:13502},end:{line:3,column:13503}},loc:{start:{line:3,column:13505},end:{line:3,column:13530}},line:3},"209":{name:"mc",decl:{start:{line:3,column:13544},end:{line:3,column:13546}},loc:{start:{line:3,column:13563},end:{line:3,column:13914}},line:3},"210":{name:"(anonymous_210)",decl:{start:{line:3,column:13588},end:{line:3,column:13589}},loc:{start:{line:3,column:13592},end:{line:3,column:13624}},line:3},"211":{name:"(anonymous_211)",decl:{start:{line:3,column:13627},end:{line:3,column:13628}},loc:{start:{line:3,column:13630},end:{line:3,column:13648}},line:3},"212":{name:"(anonymous_212)",decl:{start:{line:3,column:13651},end:{line:3,column:13652}},loc:{start:{line:3,column:13654},end:{line:3,column:13859}},line:3},"213":{name:"(anonymous_213)",decl:{start:{line:3,column:13707},end:{line:3,column:13708}},loc:{start:{line:3,column:13710},end:{line:3,column:13735}},line:3},"214":{name:"(anonymous_214)",decl:{start:{line:3,column:13736},end:{line:3,column:13737}},loc:{start:{line:3,column:13740},end:{line:3,column:13746}},line:3},"215":{name:"(anonymous_215)",decl:{start:{line:3,column:13754},end:{line:3,column:13755}},loc:{start:{line:3,column:13758},end:{line:3,column:13856}},line:3},"216":{name:"(anonymous_216)",decl:{start:{line:3,column:13816},end:{line:3,column:13817}},loc:{start:{line:3,column:13820},end:{line:3,column:13824}},line:3},"217":{name:"(anonymous_217)",decl:{start:{line:3,column:13885},end:{line:3,column:13886}},loc:{start:{line:3,column:13889},end:{line:3,column:13899}},line:3},"218":{name:"(anonymous_218)",decl:{start:{line:3,column:13902},end:{line:3,column:13903}},loc:{start:{line:3,column:13906},end:{line:3,column:13913}},line:3},"219":{name:"Me",decl:{start:{line:3,column:13923},end:{line:3,column:13925}},loc:{start:{line:3,column:13936},end:{line:3,column:14045}},line:3},"220":{name:"(anonymous_220)",decl:{start:{line:3,column:13952},end:{line:3,column:13953}},loc:{start:{line:3,column:13959},end:{line:3,column:13991}},line:3},"221":{name:"(anonymous_221)",decl:{start:{line:3,column:13962},end:{line:3,column:13963}},loc:{start:{line:3,column:13969},end:{line:3,column:13979}},line:3},"222":{name:"(anonymous_222)",decl:{start:{line:3,column:14024},end:{line:3,column:14025}},loc:{start:{line:3,column:14031},end:{line:3,column:14042}},line:3},"223":{name:"gp",decl:{start:{line:3,column:14076},end:{line:3,column:14078}},loc:{start:{line:3,column:14083},end:{line:3,column:14110}},line:3},"224":{name:"Lt",decl:{start:{line:3,column:14119},end:{line:3,column:14121}},loc:{start:{line:3,column:14124},end:{line:3,column:14147}},line:3},"225":{name:"(anonymous_225)",decl:{start:{line:3,column:14135},end:{line:3,column:14136}},loc:{start:{line:3,column:14138},end:{line:3,column:14145}},line:3},"226":{name:"di",decl:{start:{line:3,column:14258},end:{line:3,column:14260}},loc:{start:{line:3,column:14269},end:{line:3,column:14586}},line:3},"227":{name:"(anonymous_227)",decl:{start:{line:3,column:14347},end:{line:3,column:14348}},loc:{start:{line:3,column:14350},end:{line:3,column:14364}},line:3},"228":{name:"(anonymous_228)",decl:{start:{line:3,column:14350},end:{line:3,column:14351}},loc:{start:{line:3,column:14353},end:{line:3,column:14364}},line:3},"229":{name:"(anonymous_229)",decl:{start:{line:3,column:14436},end:{line:3,column:14437}},loc:{start:{line:3,column:14439},end:{line:3,column:14448}},line:3},"230":{name:"(anonymous_230)",decl:{start:{line:3,column:14519},end:{line:3,column:14520}},loc:{start:{line:3,column:14522},end:{line:3,column:14584}},line:3},"231":{name:"(anonymous_231)",decl:{start:{line:3,column:14529},end:{line:3,column:14530}},loc:{start:{line:3,column:14537},end:{line:3,column:14562}},line:3},"232":{name:"(anonymous_232)",decl:{start:{line:3,column:14575},end:{line:3,column:14576}},loc:{start:{line:3,column:14579},end:{line:3,column:14583}},line:3},"233":{name:"yc",decl:{start:{line:3,column:14595},end:{line:3,column:14597}},loc:{start:{line:3,column:14602},end:{line:3,column:14626}},line:3},"234":{name:"(anonymous_234)",decl:{start:{line:3,column:14610},end:{line:3,column:14611}},loc:{start:{line:3,column:14613},end:{line:3,column:14625}},line:3},"235":{name:"(anonymous_235)",decl:{start:{line:3,column:14613},end:{line:3,column:14614}},loc:{start:{line:3,column:14616},end:{line:3,column:14625}},line:3},"236":{name:"Ep",decl:{start:{line:3,column:14635},end:{line:3,column:14637}},loc:{start:{line:3,column:14640},end:{line:3,column:14686}},line:3},"237":{name:"Ip",decl:{start:{line:3,column:14695},end:{line:3,column:14697}},loc:{start:{line:3,column:14700},end:{line:3,column:14726}},line:3},"238":{name:"Dp",decl:{start:{line:3,column:14735},end:{line:3,column:14737}},loc:{start:{line:3,column:14740},end:{line:3,column:14796}},line:3},"239":{name:"Ir",decl:{start:{line:3,column:14805},end:{line:3,column:14807}},loc:{start:{line:3,column:14812},end:{line:3,column:14888}},line:3},"240":{name:"(anonymous_240)",decl:{start:{line:3,column:14822},end:{line:3,column:14823}},loc:{start:{line:3,column:14829},end:{line:3,column:14886}},line:3},"241":{name:"(anonymous_241)",decl:{start:{line:3,column:14854},end:{line:3,column:14855}},loc:{start:{line:3,column:14857},end:{line:3,column:14883}},line:3},"242":{name:"fi",decl:{start:{line:3,column:14897},end:{line:3,column:14899}},loc:{start:{line:3,column:14902},end:{line:3,column:15088}},line:3},"243":{name:"(anonymous_243)",decl:{start:{line:3,column:14912},end:{line:3,column:14913}},loc:{start:{line:3,column:14919},end:{line:3,column:15086}},line:3},"244":{name:"(anonymous_244)",decl:{start:{line:3,column:14970},end:{line:3,column:14971}},loc:{start:{line:3,column:14973},end:{line:3,column:15040}},line:3},"245":{name:"(anonymous_245)",decl:{start:{line:3,column:15101},end:{line:3,column:15102}},loc:{start:{line:3,column:15104},end:{line:3,column:15116}},line:3},"246":{name:"Dr",decl:{start:{line:3,column:15127},end:{line:3,column:15129}},loc:{start:{line:3,column:15132},end:{line:3,column:15234}},line:3},"247":{name:"(anonymous_247)",decl:{start:{line:3,column:15145},end:{line:3,column:15146}},loc:{start:{line:3,column:15149},end:{line:3,column:15151}},line:3},"248":{name:"(anonymous_248)",decl:{start:{line:3,column:15154},end:{line:3,column:15155}},loc:{start:{line:3,column:15161},end:{line:3,column:15232}},line:3},"249":{name:"(anonymous_249)",decl:{start:{line:3,column:15186},end:{line:3,column:15187}},loc:{start:{line:3,column:15189},end:{line:3,column:15229}},line:3},"250":{name:"vc",decl:{start:{line:3,column:15243},end:{line:3,column:15245}},loc:{start:{line:3,column:15248},end:{line:3,column:15305}},line:3},"251":{name:"(anonymous_251)",decl:{start:{line:3,column:15258},end:{line:3,column:15259}},loc:{start:{line:3,column:15265},end:{line:3,column:15303}},line:3},"252":{name:"pi",decl:{start:{line:3,column:15314},end:{line:3,column:15316}},loc:{start:{line:3,column:15323},end:{line:3,column:15340}},line:3},"253":{name:"Ec",decl:{start:{line:3,column:15349},end:{line:3,column:15351}},loc:{start:{line:3,column:15353},end:{line:3,column:15367}},line:3},"254":{name:"Cr",decl:{start:{line:3,column:15376},end:{line:3,column:15378}},loc:{start:{line:3,column:15384},end:{line:3,column:15410}},line:3},"255":{name:"Ic",decl:{start:{line:3,column:15419},end:{line:3,column:15421}},loc:{start:{line:3,column:15427},end:{line:3,column:15494}},line:3},"256":{name:"(anonymous_256)",decl:{start:{line:3,column:15449},end:{line:3,column:15450}},loc:{start:{line:3,column:15456},end:{line:3,column:15492}},line:3},"257":{name:"Dc",decl:{start:{line:3,column:15503},end:{line:3,column:15505}},loc:{start:{line:3,column:15510},end:{line:3,column:15718}},line:3},"258":{name:"(anonymous_258)",decl:{start:{line:3,column:15520},end:{line:3,column:15521}},loc:{start:{line:3,column:15527},end:{line:3,column:15716}},line:3},"259":{name:"(anonymous_259)",decl:{start:{line:3,column:15550},end:{line:3,column:15551}},loc:{start:{line:3,column:15554},end:{line:3,column:15573}},line:3},"260":{name:"(anonymous_260)",decl:{start:{line:3,column:15590},end:{line:3,column:15591}},loc:{start:{line:3,column:15593},end:{line:3,column:15698}},line:3},"261":{name:"(anonymous_261)",decl:{start:{line:3,column:15651},end:{line:3,column:15652}},loc:{start:{line:3,column:15654},end:{line:3,column:15678}},line:3},"262":{name:"(anonymous_262)",decl:{start:{line:3,column:15679},end:{line:3,column:15680}},loc:{start:{line:3,column:15683},end:{line:3,column:15695}},line:3},"263":{name:"(anonymous_263)",decl:{start:{line:3,column:15699},end:{line:3,column:15700}},loc:{start:{line:3,column:15703},end:{line:3,column:15713}},line:3},"264":{name:"Cc",decl:{start:{line:3,column:15727},end:{line:3,column:15729}},loc:{start:{line:3,column:15732},end:{line:3,column:15819}},line:3},"265":{name:"(anonymous_265)",decl:{start:{line:3,column:15742},end:{line:3,column:15743}},loc:{start:{line:3,column:15749},end:{line:3,column:15817}},line:3},"266":{name:"(anonymous_266)",decl:{start:{line:3,column:15769},end:{line:3,column:15770}},loc:{start:{line:3,column:15773},end:{line:3,column:15785}},line:3},"267":{name:"wc",decl:{start:{line:3,column:15828},end:{line:3,column:15830}},loc:{start:{line:3,column:15837},end:{line:3,column:16310}},line:3},"268":{name:"(anonymous_268)",decl:{start:{line:3,column:15896},end:{line:3,column:15897}},loc:{start:{line:3,column:15903},end:{line:3,column:16305}},line:3},"269":{name:"(anonymous_269)",decl:{start:{line:3,column:15981},end:{line:3,column:15982}},loc:{start:{line:3,column:15984},end:{line:3,column:16044}},line:3},"270":{name:"(anonymous_270)",decl:{start:{line:3,column:16045},end:{line:3,column:16046}},loc:{start:{line:3,column:16049},end:{line:3,column:16119}},line:3},"271":{name:"(anonymous_271)",decl:{start:{line:3,column:16120},end:{line:3,column:16121}},loc:{start:{line:3,column:16123},end:{line:3,column:16190}},line:3},"272":{name:"(anonymous_272)",decl:{start:{line:3,column:16191},end:{line:3,column:16192}},loc:{start:{line:3,column:16195},end:{line:3,column:16302}},line:3},"273":{name:"(anonymous_273)",decl:{start:{line:3,column:16318},end:{line:3,column:16319}},loc:{start:{line:3,column:16323},end:{line:3,column:16356}},line:3},"274":{name:"(anonymous_274)",decl:{start:{line:3,column:16398},end:{line:3,column:16399}},loc:{start:{line:3,column:16427},end:{line:3,column:16639}},line:3},"275":{name:"(anonymous_275)",decl:{start:{line:3,column:16639},end:{line:3,column:16640}},loc:{start:{line:3,column:16646},end:{line:3,column:16806}},line:3},"276":{name:"(anonymous_276)",decl:{start:{line:3,column:16806},end:{line:3,column:16807}},loc:{start:{line:3,column:16819},end:{line:3,column:17039}},line:3},"277":{name:"(anonymous_277)",decl:{start:{line:3,column:17039},end:{line:3,column:17040}},loc:{start:{line:3,column:17052},end:{line:3,column:17270}},line:3},"278":{name:"(anonymous_278)",decl:{start:{line:3,column:17295},end:{line:3,column:17296}},loc:{start:{line:3,column:17311},end:{line:3,column:17320}},line:3},"279":{name:"(anonymous_279)",decl:{start:{line:3,column:17320},end:{line:3,column:17321}},loc:{start:{line:3,column:17335},end:{line:3,column:17348}},line:3},"280":{name:"(anonymous_280)",decl:{start:{line:3,column:17358},end:{line:3,column:17359}},loc:{start:{line:3,column:17379},end:{line:3,column:17467}},line:3},"281":{name:"(anonymous_281)",decl:{start:{line:3,column:17468},end:{line:3,column:17469}},loc:{start:{line:3,column:17484},end:{line:3,column:17547}},line:3},"282":{name:"(anonymous_282)",decl:{start:{line:3,column:17589},end:{line:3,column:17590}},loc:{start:{line:3,column:17605},end:{line:3,column:17662}},line:3},"283":{name:"(anonymous_283)",decl:{start:{line:3,column:17662},end:{line:3,column:17663}},loc:{start:{line:3,column:17677},end:{line:3,column:17916}},line:3},"284":{name:"(anonymous_284)",decl:{start:{line:3,column:17916},end:{line:3,column:17917}},loc:{start:{line:3,column:17939},end:{line:3,column:17986}},line:3},"285":{name:"(anonymous_285)",decl:{start:{line:3,column:17986},end:{line:3,column:17987}},loc:{start:{line:3,column:18009},end:{line:3,column:18094}},line:3},"286":{name:"(anonymous_286)",decl:{start:{line:3,column:18094},end:{line:3,column:18095}},loc:{start:{line:3,column:18106},end:{line:3,column:18319}},line:3},"287":{name:"(anonymous_287)",decl:{start:{line:3,column:18319},end:{line:3,column:18320}},loc:{start:{line:3,column:18332},end:{line:3,column:18461}},line:3},"288":{name:"(anonymous_288)",decl:{start:{line:3,column:18461},end:{line:3,column:18462}},loc:{start:{line:3,column:18474},end:{line:3,column:18687}},line:3},"289":{name:"(anonymous_289)",decl:{start:{line:3,column:18704},end:{line:3,column:18705}},loc:{start:{line:3,column:18726},end:{line:3,column:18765}},line:3},"290":{name:"(anonymous_290)",decl:{start:{line:3,column:18765},end:{line:3,column:18766}},loc:{start:{line:3,column:18782},end:{line:3,column:18841}},line:3},"291":{name:"(anonymous_291)",decl:{start:{line:3,column:18881},end:{line:3,column:18882}},loc:{start:{line:3,column:18904},end:{line:3,column:18948}},line:3},"292":{name:"(anonymous_292)",decl:{start:{line:3,column:18948},end:{line:3,column:18949}},loc:{start:{line:3,column:18956},end:{line:3,column:19158}},line:3},"293":{name:"Cp",decl:{start:{line:3,column:19193},end:{line:3,column:19195}},loc:{start:{line:3,column:19200},end:{line:3,column:19277}},line:3},"294":{name:"(anonymous_294)",decl:{start:{line:3,column:19214},end:{line:3,column:19215}},loc:{start:{line:3,column:19218},end:{line:3,column:19219}},line:3},"295":{name:"(anonymous_295)",decl:{start:{line:3,column:19222},end:{line:3,column:19223}},loc:{start:{line:3,column:19225},end:{line:3,column:19237}},line:3},"296":{name:"(anonymous_296)",decl:{start:{line:3,column:19253},end:{line:3,column:19254}},loc:{start:{line:3,column:19256},end:{line:3,column:19273}},line:3},"297":{name:"wp",decl:{start:{line:3,column:19286},end:{line:3,column:19288}},loc:{start:{line:3,column:19291},end:{line:3,column:19347}},line:3},"298":{name:"(anonymous_298)",decl:{start:{line:3,column:19357},end:{line:3,column:19358}},loc:{start:{line:3,column:19360},end:{line:3,column:19441}},line:3},"299":{name:"(anonymous_299)",decl:{start:{line:3,column:19360},end:{line:3,column:19361}},loc:{start:{line:3,column:19370},end:{line:3,column:19441}},line:3},"300":{name:"Mr",decl:{start:{line:3,column:19452},end:{line:3,column:19454}},loc:{start:{line:3,column:19457},end:{line:3,column:19494}},line:3},"301":{name:"(anonymous_301)",decl:{start:{line:3,column:19504},end:{line:3,column:19505}},loc:{start:{line:3,column:19507},end:{line:3,column:19605}},line:3},"302":{name:"(anonymous_302)",decl:{start:{line:3,column:19507},end:{line:3,column:19508}},loc:{start:{line:3,column:19523},end:{line:3,column:19605}},line:3},"303":{name:"bp",decl:{start:{line:3,column:19616},end:{line:3,column:19618}},loc:{start:{line:3,column:19623},end:{line:3,column:20116}},line:3},"304":{name:"(anonymous_304)",decl:{start:{line:3,column:19803},end:{line:3,column:19804}},loc:{start:{line:3,column:19810},end:{line:3,column:20114}},line:3},"305":{name:"(anonymous_305)",decl:{start:{line:3,column:19832},end:{line:3,column:19833}},loc:{start:{line:3,column:19835},end:{line:3,column:19941}},line:3},"306":{name:"(anonymous_306)",decl:{start:{line:3,column:19844},end:{line:3,column:19845}},loc:{start:{line:3,column:19848},end:{line:3,column:19937}},line:3},"307":{name:"(anonymous_307)",decl:{start:{line:3,column:19960},end:{line:3,column:19961}},loc:{start:{line:3,column:19963},end:{line:3,column:20007}},line:3},"308":{name:"(anonymous_308)",decl:{start:{line:3,column:20022},end:{line:3,column:20023}},loc:{start:{line:3,column:20026},end:{line:3,column:20062}},line:3},"309":{name:"_p",decl:{start:{line:3,column:20125},end:{line:3,column:20127}},loc:{start:{line:3,column:20130},end:{line:3,column:20147}},line:3},"310":{name:"Nr",decl:{start:{line:3,column:20226},end:{line:3,column:20228}},loc:{start:{line:3,column:20231},end:{line:3,column:20377}},line:3},"311":{name:"(anonymous_311)",decl:{start:{line:3,column:20334},end:{line:3,column:20335}},loc:{start:{line:3,column:20337},end:{line:3,column:20341}},line:3},"312":{name:"Ap",decl:{start:{line:3,column:20386},end:{line:3,column:20388}},loc:{start:{line:3,column:20391},end:{line:3,column:20433}},line:3},"313":{name:"Sr",decl:{start:{line:3,column:20442},end:{line:3,column:20444}},loc:{start:{line:3,column:20449},end:{line:3,column:20493}},line:3},"314":{name:"(anonymous_314)",decl:{start:{line:3,column:20466},end:{line:3,column:20467}},loc:{start:{line:3,column:20476},end:{line:3,column:20487}},line:3},"315":{name:"Rp",decl:{start:{line:3,column:20502},end:{line:3,column:20504}},loc:{start:{line:3,column:20510},end:{line:3,column:20647}},line:3},"316":{name:"(anonymous_316)",decl:{start:{line:3,column:20606},end:{line:3,column:20607}},loc:{start:{line:3,column:20609},end:{line:3,column:20616}},line:3},"317":{name:"kp",decl:{start:{line:3,column:20656},end:{line:3,column:20658}},loc:{start:{line:3,column:20668},end:{line:3,column:20882}},line:3},"318":{name:"(anonymous_318)",decl:{start:{line:3,column:20676},end:{line:3,column:20677}},loc:{start:{line:3,column:20679},end:{line:3,column:20881}},line:3},"319":{name:"(anonymous_319)",decl:{start:{line:3,column:20685},end:{line:3,column:20686}},loc:{start:{line:3,column:20689},end:{line:3,column:20877}},line:3},"320":{name:"(anonymous_320)",decl:{start:{line:3,column:20754},end:{line:3,column:20755}},loc:{start:{line:3,column:20758},end:{line:3,column:20873}},line:3},"321":{name:"(anonymous_321)",decl:{start:{line:3,column:20797},end:{line:3,column:20798}},loc:{start:{line:3,column:20800},end:{line:3,column:20846}},line:3},"322":{name:"(anonymous_322)",decl:{start:{line:3,column:20847},end:{line:3,column:20848}},loc:{start:{line:3,column:20851},end:{line:3,column:20870}},line:3},"323":{name:"bc",decl:{start:{line:3,column:20891},end:{line:3,column:20893}},loc:{start:{line:3,column:20900},end:{line:3,column:20916}},line:3},"324":{name:"Op",decl:{start:{line:3,column:20925},end:{line:3,column:20927}},loc:{start:{line:3,column:20930},end:{line:3,column:20970}},line:3},"325":{name:"(anonymous_325)",decl:{start:{line:3,column:20944},end:{line:3,column:20945}},loc:{start:{line:3,column:20947},end:{line:3,column:20968}},line:3},"326":{name:"Pp",decl:{start:{line:3,column:20979},end:{line:3,column:20981}},loc:{start:{line:3,column:20987},end:{line:3,column:21281}},line:3},"327":{name:"(anonymous_327)",decl:{start:{line:3,column:21030},end:{line:3,column:21031}},loc:{start:{line:3,column:21033},end:{line:3,column:21254}},line:3},"328":{name:"(anonymous_328)",decl:{start:{line:3,column:21156},end:{line:3,column:21157}},loc:{start:{line:3,column:21159},end:{line:3,column:21181}},line:3},"329":{name:"(anonymous_329)",decl:{start:{line:3,column:21182},end:{line:3,column:21183}},loc:{start:{line:3,column:21186},end:{line:3,column:21189}},line:3},"330":{name:"(anonymous_330)",decl:{start:{line:3,column:21197},end:{line:3,column:21198}},loc:{start:{line:3,column:21201},end:{line:3,column:21250}},line:3},"331":{name:"_c",decl:{start:{line:3,column:21290},end:{line:3,column:21292}},loc:{start:{line:3,column:21304},end:{line:3,column:21501}},line:3},"332":{name:"(anonymous_332)",decl:{start:{line:3,column:21352},end:{line:3,column:21353}},loc:{start:{line:3,column:21355},end:{line:3,column:21499}},line:3},"333":{name:"(anonymous_333)",decl:{start:{line:3,column:21418},end:{line:3,column:21419}},loc:{start:{line:3,column:21428},end:{line:3,column:21495}},line:3},"334":{name:"Lp",decl:{start:{line:3,column:21510},end:{line:3,column:21512}},loc:{start:{line:3,column:21522},end:{line:3,column:21551}},line:3},"335":{name:"Fp",decl:{start:{line:3,column:21560},end:{line:3,column:21562}},loc:{start:{line:3,column:21567},end:{line:3,column:21598}},line:3},"336":{name:"Mc",decl:{start:{line:3,column:21607},end:{line:3,column:21609}},loc:{start:{line:3,column:21612},end:{line:3,column:21711}},line:3},"337":{name:"(anonymous_337)",decl:{start:{line:3,column:21622},end:{line:3,column:21623}},loc:{start:{line:3,column:21629},end:{line:3,column:21709}},line:3},"338":{name:"(anonymous_338)",decl:{start:{line:3,column:21655},end:{line:3,column:21656}},loc:{start:{line:3,column:21658},end:{line:3,column:21674}},line:3},"339":{name:"(anonymous_339)",decl:{start:{line:3,column:21675},end:{line:3,column:21676}},loc:{start:{line:3,column:21679},end:{line:3,column:21706}},line:3},"340":{name:"jp",decl:{start:{line:3,column:21720},end:{line:3,column:21722}},loc:{start:{line:3,column:21730},end:{line:3,column:21838}},line:3},"341":{name:"(anonymous_341)",decl:{start:{line:3,column:21748},end:{line:3,column:21749}},loc:{start:{line:3,column:21755},end:{line:3,column:21836}},line:3},"342":{name:"(anonymous_342)",decl:{start:{line:3,column:21783},end:{line:3,column:21784}},loc:{start:{line:3,column:21786},end:{line:3,column:21833}},line:3},"343":{name:"Vp",decl:{start:{line:3,column:21847},end:{line:3,column:21849}},loc:{start:{line:3,column:21854},end:{line:3,column:21868}},line:3},"344":{name:"Nc",decl:{start:{line:3,column:21877},end:{line:3,column:21879}},loc:{start:{line:3,column:21885},end:{line:3,column:21984}},line:3},"345":{name:"(anonymous_345)",decl:{start:{line:3,column:21895},end:{line:3,column:21896}},loc:{start:{line:3,column:21902},end:{line:3,column:21982}},line:3},"346":{name:"(anonymous_346)",decl:{start:{line:3,column:21928},end:{line:3,column:21929}},loc:{start:{line:3,column:21931},end:{line:3,column:21947}},line:3},"347":{name:"(anonymous_347)",decl:{start:{line:3,column:21948},end:{line:3,column:21949}},loc:{start:{line:3,column:21952},end:{line:3,column:21979}},line:3},"348":{name:"Hp",decl:{start:{line:3,column:21993},end:{line:3,column:21995}},loc:{start:{line:3,column:21997},end:{line:3,column:22012}},line:3},"349":{name:"Bp",decl:{start:{line:3,column:22021},end:{line:3,column:22023}},loc:{start:{line:3,column:22028},end:{line:3,column:22127}},line:3},"350":{name:"(anonymous_350)",decl:{start:{line:3,column:22062},end:{line:3,column:22063}},loc:{start:{line:3,column:22065},end:{line:3,column:22126}},line:3},"351":{name:"(anonymous_351)",decl:{start:{line:3,column:22077},end:{line:3,column:22078}},loc:{start:{line:3,column:22084},end:{line:3,column:22092}},line:3},"352":{name:"(anonymous_352)",decl:{start:{line:3,column:22114},end:{line:3,column:22115}},loc:{start:{line:3,column:22118},end:{line:3,column:22124}},line:3},"353":{name:"$p",decl:{start:{line:3,column:22136},end:{line:3,column:22138}},loc:{start:{line:3,column:22141},end:{line:3,column:22301}},line:3},"354":{name:"(anonymous_354)",decl:{start:{line:3,column:22154},end:{line:3,column:22155}},loc:{start:{line:3,column:22158},end:{line:3,column:22160}},line:3},"355":{name:"(anonymous_355)",decl:{start:{line:3,column:22163},end:{line:3,column:22164}},loc:{start:{line:3,column:22170},end:{line:3,column:22299}},line:3},"356":{name:"(anonymous_356)",decl:{start:{line:3,column:22196},end:{line:3,column:22197}},loc:{start:{line:3,column:22199},end:{line:3,column:22232}},line:3},"357":{name:"(anonymous_357)",decl:{start:{line:3,column:22233},end:{line:3,column:22234}},loc:{start:{line:3,column:22237},end:{line:3,column:22276}},line:3},"358":{name:"(anonymous_358)",decl:{start:{line:3,column:22284},end:{line:3,column:22285}},loc:{start:{line:3,column:22288},end:{line:3,column:22296}},line:3},"359":{name:"Sc",decl:{start:{line:3,column:22310},end:{line:3,column:22312}},loc:{start:{line:3,column:22318},end:{line:3,column:22816}},line:3},"360":{name:"(anonymous_360)",decl:{start:{line:3,column:22335},end:{line:3,column:22336}},loc:{start:{line:3,column:22339},end:{line:3,column:22345}},line:3},"361":{name:"(anonymous_361)",decl:{start:{line:3,column:22420},end:{line:3,column:22421}},loc:{start:{line:3,column:22423},end:{line:3,column:22815}},line:3},"362":{name:"(anonymous_362)",decl:{start:{line:3,column:22450},end:{line:3,column:22451}},loc:{start:{line:3,column:22454},end:{line:3,column:22481}},line:3},"363":{name:"(anonymous_363)",decl:{start:{line:3,column:22484},end:{line:3,column:22485}},loc:{start:{line:3,column:22488},end:{line:3,column:22511}},line:3},"364":{name:"(anonymous_364)",decl:{start:{line:3,column:22514},end:{line:3,column:22515}},loc:{start:{line:3,column:22518},end:{line:3,column:22548}},line:3},"365":{name:"(anonymous_365)",decl:{start:{line:3,column:22558},end:{line:3,column:22559}},loc:{start:{line:3,column:22565},end:{line:3,column:22810}},line:3},"366":{name:"(anonymous_366)",decl:{start:{line:3,column:22603},end:{line:3,column:22604}},loc:{start:{line:3,column:22607},end:{line:3,column:22639}},line:3},"367":{name:"(anonymous_367)",decl:{start:{line:3,column:22681},end:{line:3,column:22682}},loc:{start:{line:3,column:22685},end:{line:3,column:22695}},line:3},"368":{name:"(anonymous_368)",decl:{start:{line:3,column:22702},end:{line:3,column:22703}},loc:{start:{line:3,column:22706},end:{line:3,column:22741}},line:3},"369":{name:"(anonymous_369)",decl:{start:{line:3,column:22751},end:{line:3,column:22752}},loc:{start:{line:3,column:22755},end:{line:3,column:22788}},line:3},"370":{name:"hi",decl:{start:{line:3,column:22825},end:{line:3,column:22827}},loc:{start:{line:3,column:22837},end:{line:3,column:22955}},line:3},"371":{name:"(anonymous_371)",decl:{start:{line:3,column:22896},end:{line:3,column:22897}},loc:{start:{line:3,column:22900},end:{line:3,column:22921}},line:3},"372":{name:"Up",decl:{start:{line:3,column:22964},end:{line:3,column:22966}},loc:{start:{line:3,column:22973},end:{line:3,column:23178}},line:3},"373":{name:"(anonymous_373)",decl:{start:{line:3,column:23101},end:{line:3,column:23102}},loc:{start:{line:3,column:23105},end:{line:3,column:23118}},line:3},"374":{name:"g",decl:{start:{line:3,column:23236},end:{line:3,column:23237}},loc:{start:{line:3,column:23240},end:{line:3,column:23262}},line:3},"375":{name:"Ar",decl:{start:{line:3,column:23271},end:{line:3,column:23273}},loc:{start:{line:3,column:23275},end:{line:3,column:23285}},line:3},"376":{name:"(anonymous_376)",decl:{start:{line:3,column:23510},end:{line:3,column:23511}},loc:{start:{line:3,column:23514},end:{line:3,column:23516}},line:3},"377":{name:"(anonymous_377)",decl:{start:{line:3,column:23540},end:{line:3,column:23541}},loc:{start:{line:3,column:23544},end:{line:3,column:23546}},line:3},"378":{name:"(anonymous_378)",decl:{start:{line:3,column:23567},end:{line:3,column:23568}},loc:{start:{line:3,column:23571},end:{line:3,column:23573}},line:3},"379":{name:"(anonymous_379)",decl:{start:{line:3,column:23595},end:{line:3,column:23596}},loc:{start:{line:3,column:23599},end:{line:3,column:23601}},line:3},"380":{name:"at",decl:{start:{line:3,column:23612},end:{line:3,column:23614}},loc:{start:{line:3,column:23617},end:{line:3,column:24158}},line:3},"381":{name:"xc",decl:{start:{line:3,column:24167},end:{line:3,column:24169}},loc:{start:{line:3,column:24171},end:{line:3,column:24177}},line:3},"382":{name:"ct",decl:{start:{line:3,column:24186},end:{line:3,column:24188}},loc:{start:{line:3,column:24191},end:{line:3,column:24339}},line:3},"383":{name:"mi",decl:{start:{line:3,column:24348},end:{line:3,column:24350}},loc:{start:{line:3,column:24353},end:{line:3,column:24502}},line:3},"384":{name:"yi",decl:{start:{line:3,column:24511},end:{line:3,column:24513}},loc:{start:{line:3,column:24515},end:{line:3,column:24557}},line:3},"385":{name:"qp",decl:{start:{line:3,column:24566},end:{line:3,column:24568}},loc:{start:{line:3,column:24571},end:{line:3,column:24616}},line:3},"386":{name:"jt",decl:{start:{line:3,column:24625},end:{line:3,column:24627}},loc:{start:{line:3,column:24630},end:{line:3,column:24662}},line:3},"387":{name:"We",decl:{start:{line:3,column:24671},end:{line:3,column:24673}},loc:{start:{line:3,column:24676},end:{line:3,column:24698}},line:3},"388":{name:"Ac",decl:{start:{line:3,column:24707},end:{line:3,column:24709}},loc:{start:{line:3,column:24712},end:{line:3,column:24753}},line:3},"389":{name:"lt",decl:{start:{line:3,column:24762},end:{line:3,column:24764}},loc:{start:{line:3,column:24769},end:{line:3,column:24784}},line:3},"390":{name:"Rc",decl:{start:{line:3,column:24793},end:{line:3,column:24795}},loc:{start:{line:3,column:24798},end:{line:3,column:24984}},line:3},"391":{name:"hn",decl:{start:{line:3,column:24993},end:{line:3,column:24995}},loc:{start:{line:3,column:24998},end:{line:3,column:25145}},line:3},"392":{name:"ut",decl:{start:{line:3,column:25154},end:{line:3,column:25156}},loc:{start:{line:3,column:25159},end:{line:3,column:25297}},line:3},"393":{name:"kc",decl:{start:{line:3,column:25306},end:{line:3,column:25308}},loc:{start:{line:3,column:25313},end:{line:3,column:25550}},line:3},"394":{name:"vi",decl:{start:{line:3,column:25559},end:{line:3,column:25561}},loc:{start:{line:3,column:25564},end:{line:3,column:25836}},line:3},"395":{name:"Vt",decl:{start:{line:3,column:25845},end:{line:3,column:25847}},loc:{start:{line:3,column:25850},end:{line:3,column:25903}},line:3},"396":{name:"gn",decl:{start:{line:3,column:25912},end:{line:3,column:25914}},loc:{start:{line:3,column:25917},end:{line:3,column:25926}},line:3},"397":{name:"Gp",decl:{start:{line:3,column:25935},end:{line:3,column:25937}},loc:{start:{line:3,column:25942},end:{line:3,column:26078}},line:3},"398":{name:"mn",decl:{start:{line:3,column:26087},end:{line:3,column:26089}},loc:{start:{line:3,column:26094},end:{line:3,column:26117}},line:3},"399":{name:"Rr",decl:{start:{line:3,column:26126},end:{line:3,column:26128}},loc:{start:{line:3,column:26133},end:{line:3,column:26289}},line:3},"400":{name:"(anonymous_400)",decl:{start:{line:3,column:26204},end:{line:3,column:26205}},loc:{start:{line:3,column:26208},end:{line:3,column:26266}},line:3},"401":{name:"(anonymous_401)",decl:{start:{line:3,column:26425},end:{line:3,column:26426}},loc:{start:{line:3,column:26449},end:{line:3,column:26484}},line:3},"402":{name:"(anonymous_402)",decl:{start:{line:3,column:26485},end:{line:3,column:26486}},loc:{start:{line:3,column:26510},end:{line:3,column:26745}},line:3},"403":{name:"Qp",decl:{start:{line:3,column:26757},end:{line:3,column:26759}},loc:{start:{line:3,column:26761},end:{line:3,column:26778}},line:3},"404":{name:"Pc",decl:{start:{line:3,column:26797},end:{line:3,column:26799}},loc:{start:{line:3,column:26802},end:{line:3,column:26809}},line:3},"405":{name:"Ei",decl:{start:{line:3,column:26818},end:{line:3,column:26820}},loc:{start:{line:3,column:26823},end:{line:3,column:26829}},line:3},"406":{name:"Ii",decl:{start:{line:3,column:26850},end:{line:3,column:26852}},loc:{start:{line:3,column:26857},end:{line:3,column:26978}},line:3},"407":{name:"(anonymous_407)",decl:{start:{line:3,column:26922},end:{line:3,column:26923}},loc:{start:{line:3,column:26926},end:{line:3,column:26931}},line:3},"408":{name:"(anonymous_408)",decl:{start:{line:3,column:26955},end:{line:3,column:26956}},loc:{start:{line:3,column:26958},end:{line:3,column:26965}},line:3},"409":{name:"(anonymous_409)",decl:{start:{line:3,column:26966},end:{line:3,column:26967}},loc:{start:{line:3,column:26969},end:{line:3,column:26976}},line:3},"410":{name:"Lc",decl:{start:{line:3,column:26987},end:{line:3,column:26989}},loc:{start:{line:3,column:26992},end:{line:3,column:27014}},line:3},"411":{name:"dt",decl:{start:{line:3,column:27023},end:{line:3,column:27025}},loc:{start:{line:3,column:27030},end:{line:3,column:27081}},line:3},"412":{name:"kr",decl:{start:{line:3,column:27090},end:{line:3,column:27092}},loc:{start:{line:3,column:27097},end:{line:3,column:27127}},line:3},"413":{name:"Yp",decl:{start:{line:3,column:27193},end:{line:3,column:27195}},loc:{start:{line:3,column:27198},end:{line:3,column:27230}},line:3},"414":{name:"Ci",decl:{start:{line:3,column:27336},end:{line:3,column:27338}},loc:{start:{line:3,column:27341},end:{line:3,column:27447}},line:3},"415":{name:"Pr",decl:{start:{line:3,column:27463},end:{line:3,column:27465}},loc:{start:{line:3,column:27467},end:{line:3,column:27478}},line:3},"416":{name:"ve",decl:{start:{line:3,column:27487},end:{line:3,column:27489}},loc:{start:{line:3,column:27492},end:{line:3,column:27516}},line:3},"417":{name:"Ht",decl:{start:{line:3,column:27551},end:{line:3,column:27553}},loc:{start:{line:3,column:27556},end:{line:3,column:27599}},line:3},"418":{name:"Ti",decl:{start:{line:3,column:27608},end:{line:3,column:27610}},loc:{start:{line:3,column:27617},end:{line:3,column:27781}},line:3},"419":{name:"(anonymous_419)",decl:{start:{line:3,column:27696},end:{line:3,column:27697}},loc:{start:{line:3,column:27700},end:{line:3,column:27758}},line:3},"420":{name:"jc",decl:{start:{line:3,column:27790},end:{line:3,column:27792}},loc:{start:{line:3,column:27797},end:{line:3,column:27818}},line:3},"421":{name:"Vc",decl:{start:{line:3,column:27827},end:{line:3,column:27829}},loc:{start:{line:3,column:27834},end:{line:3,column:27885}},line:3},"422":{name:"(anonymous_422)",decl:{start:{line:3,column:27962},end:{line:3,column:27963}},loc:{start:{line:3,column:27986},end:{line:3,column:28021}},line:3},"423":{name:"(anonymous_423)",decl:{start:{line:3,column:28022},end:{line:3,column:28023}},loc:{start:{line:3,column:28047},end:{line:3,column:28348}},line:3},"424":{name:"Hc",decl:{start:{line:3,column:28360},end:{line:3,column:28362}},loc:{start:{line:3,column:28365},end:{line:3,column:28409}},line:3},"425":{name:"(anonymous_425)",decl:{start:{line:3,column:28525},end:{line:3,column:28526}},loc:{start:{line:3,column:28541},end:{line:3,column:28569}},line:3},"426":{name:"Jp",decl:{start:{line:3,column:28580},end:{line:3,column:28582}},loc:{start:{line:3,column:28585},end:{line:3,column:28612}},line:3},"427":{name:"wn",decl:{start:{line:3,column:28621},end:{line:3,column:28623}},loc:{start:{line:3,column:28628},end:{line:3,column:28660}},line:3},"428":{name:"S",decl:{start:{line:3,column:28687},end:{line:3,column:28688}},loc:{start:{line:3,column:28691},end:{line:3,column:28744}},line:3},"429":{name:"qc",decl:{start:{line:3,column:28753},end:{line:3,column:28755}},loc:{start:{line:3,column:28760},end:{line:3,column:28831}},line:3},"430":{name:"Tn",decl:{start:{line:3,column:28840},end:{line:3,column:28842}},loc:{start:{line:3,column:28845},end:{line:4,column:30}},line:3},"431":{name:"Ur",decl:{start:{line:4,column:39},end:{line:4,column:41}},loc:{start:{line:4,column:46},end:{line:4,column:78}},line:4},"432":{name:"Wr",decl:{start:{line:4,column:117},end:{line:4,column:119}},loc:{start:{line:4,column:122},end:{line:4,column:153}},line:4},"433":{name:"q",decl:{start:{line:4,column:162},end:{line:4,column:163}},loc:{start:{line:4,column:166},end:{line:4,column:186}},line:4},"434":{name:"Fi",decl:{start:{line:4,column:195},end:{line:4,column:197}},loc:{start:{line:4,column:200},end:{line:4,column:275}},line:4},"435":{name:"V",decl:{start:{line:4,column:284},end:{line:4,column:285}},loc:{start:{line:4,column:288},end:{line:4,column:372}},line:4},"436":{name:"Gc",decl:{start:{line:4,column:381},end:{line:4,column:383}},loc:{start:{line:4,column:386},end:{line:4,column:443}},line:4},"437":{name:"bn",decl:{start:{line:4,column:452},end:{line:4,column:454}},loc:{start:{line:4,column:457},end:{line:4,column:474}},line:4},"438":{name:"eh",decl:{start:{line:4,column:483},end:{line:4,column:485}},loc:{start:{line:4,column:488},end:{line:4,column:509}},line:4},"439":{name:"th",decl:{start:{line:4,column:518},end:{line:4,column:520}},loc:{start:{line:4,column:525},end:{line:4,column:565}},line:4},"440":{name:"nh",decl:{start:{line:4,column:574},end:{line:4,column:576}},loc:{start:{line:4,column:579},end:{line:4,column:615}},line:4},"441":{name:"_i",decl:{start:{line:4,column:624},end:{line:4,column:626}},loc:{start:{line:4,column:629},end:{line:4,column:672}},line:4},"442":{name:"(anonymous_442)",decl:{start:{line:4,column:774},end:{line:4,column:775}},loc:{start:{line:4,column:790},end:{line:4,column:967}},line:4},"443":{name:"(anonymous_443)",decl:{start:{line:4,column:967},end:{line:4,column:968}},loc:{start:{line:4,column:978},end:{line:4,column:991}},line:4},"444":{name:"(anonymous_444)",decl:{start:{line:4,column:991},end:{line:4,column:992}},loc:{start:{line:4,column:1001},end:{line:4,column:1039}},line:4},"445":{name:"ji",decl:{start:{line:4,column:1050},end:{line:4,column:1052}},loc:{start:{line:4,column:1055},end:{line:4,column:1086}},line:4},"446":{name:"Ui",decl:{start:{line:4,column:1252},end:{line:4,column:1254}},loc:{start:{line:4,column:1257},end:{line:4,column:1295}},line:4},"447":{name:"Re",decl:{start:{line:4,column:1304},end:{line:4,column:1306}},loc:{start:{line:4,column:1309},end:{line:4,column:1348}},line:4},"448":{name:"Wi",decl:{start:{line:4,column:1357},end:{line:4,column:1359}},loc:{start:{line:4,column:1362},end:{line:4,column:1401}},line:4},"449":{name:"zc",decl:{start:{line:4,column:1410},end:{line:4,column:1412}},loc:{start:{line:4,column:1415},end:{line:4,column:1449}},line:4},"450":{name:"Gr",decl:{start:{line:4,column:1458},end:{line:4,column:1460}},loc:{start:{line:4,column:1465},end:{line:4,column:1498}},line:4},"451":{name:"$t",decl:{start:{line:4,column:1507},end:{line:4,column:1509}},loc:{start:{line:4,column:1512},end:{line:4,column:1562}},line:4},"452":{name:"qi",decl:{start:{line:4,column:1644},end:{line:4,column:1646}},loc:{start:{line:4,column:1651},end:{line:4,column:1673}},line:4},"453":{name:"zr",decl:{start:{line:4,column:1682},end:{line:4,column:1684}},loc:{start:{line:4,column:1689},end:{line:4,column:1711}},line:4},"454":{name:"Zc",decl:{start:{line:4,column:1720},end:{line:4,column:1722}},loc:{start:{line:4,column:1729},end:{line:4,column:1785}},line:4},"455":{name:"ih",decl:{start:{line:4,column:1794},end:{line:4,column:1796}},loc:{start:{line:4,column:1799},end:{line:4,column:1813}},line:4},"456":{name:"Yc",decl:{start:{line:4,column:1829},end:{line:4,column:1831}},loc:{start:{line:4,column:1833},end:{line:4,column:1844}},line:4},"457":{name:"Y",decl:{start:{line:4,column:1853},end:{line:4,column:1854}},loc:{start:{line:4,column:1857},end:{line:4,column:1881}},line:4},"458":{name:"Gi",decl:{start:{line:4,column:1890},end:{line:4,column:1892}},loc:{start:{line:4,column:1899},end:{line:4,column:2042}},line:4},"459":{name:"(anonymous_459)",decl:{start:{line:4,column:2096},end:{line:4,column:2097}},loc:{start:{line:4,column:2110},end:{line:4,column:2127}},line:4},"460":{name:"(anonymous_460)",decl:{start:{line:4,column:2127},end:{line:4,column:2128}},loc:{start:{line:4,column:2140},end:{line:4,column:2238}},line:4},"461":{name:"ch",decl:{start:{line:4,column:2249},end:{line:4,column:2251}},loc:{start:{line:4,column:2258},end:{line:4,column:2424}},line:4},"462":{name:"Ee",decl:{start:{line:4,column:2433},end:{line:4,column:2435}},loc:{start:{line:4,column:2442},end:{line:4,column:2468}},line:4},"463":{name:"E",decl:{start:{line:4,column:2477},end:{line:4,column:2478}},loc:{start:{line:4,column:2483},end:{line:4,column:2503}},line:4},"464":{name:"pt",decl:{start:{line:4,column:2512},end:{line:4,column:2514}},loc:{start:{line:4,column:2517},end:{line:4,column:2618}},line:4},"465":{name:"lh",decl:{start:{line:4,column:2627},end:{line:4,column:2629}},loc:{start:{line:4,column:2632},end:{line:4,column:2701}},line:4},"466":{name:"Si",decl:{start:{line:4,column:2710},end:{line:4,column:2712}},loc:{start:{line:4,column:2715},end:{line:4,column:2970}},line:4},"467":{name:"uh",decl:{start:{line:4,column:2979},end:{line:4,column:2981}},loc:{start:{line:4,column:2984},end:{line:4,column:2998}},line:4},"468":{name:"qe",decl:{start:{line:4,column:3007},end:{line:4,column:3009}},loc:{start:{line:4,column:3014},end:{line:4,column:3062}},line:4},"469":{name:"Kc",decl:{start:{line:4,column:3071},end:{line:4,column:3073}},loc:{start:{line:4,column:3080},end:{line:4,column:3205}},line:4},"470":{name:"Jc",decl:{start:{line:4,column:3214},end:{line:4,column:3216}},loc:{start:{line:4,column:3219},end:{line:4,column:3260}},line:4},"471":{name:"Qr",decl:{start:{line:4,column:3269},end:{line:4,column:3271}},loc:{start:{line:4,column:3276},end:{line:4,column:3321}},line:4},"472":{name:"(anonymous_472)",decl:{start:{line:4,column:3287},end:{line:4,column:3288}},loc:{start:{line:4,column:3290},end:{line:4,column:3319}},line:4},"473":{name:"zi",decl:{start:{line:4,column:3330},end:{line:4,column:3332}},loc:{start:{line:4,column:3339},end:{line:4,column:3378}},line:4},"474":{name:"_n",decl:{start:{line:4,column:3387},end:{line:4,column:3389}},loc:{start:{line:4,column:3394},end:{line:4,column:3441}},line:4},"475":{name:"Xc",decl:{start:{line:4,column:3450},end:{line:4,column:3452}},loc:{start:{line:4,column:3457},end:{line:4,column:3506}},line:4},"476":{name:"el",decl:{start:{line:4,column:3515},end:{line:4,column:3517}},loc:{start:{line:4,column:3526},end:{line:4,column:3678}},line:4},"477":{name:"Zr",decl:{start:{line:4,column:3687},end:{line:4,column:3689}},loc:{start:{line:4,column:3696},end:{line:4,column:3753}},line:4},"478":{name:"Yr",decl:{start:{line:4,column:3762},end:{line:4,column:3764}},loc:{start:{line:4,column:3769},end:{line:4,column:3806}},line:4},"479":{name:"Ut",decl:{start:{line:4,column:3815},end:{line:4,column:3817}},loc:{start:{line:4,column:3822},end:{line:4,column:3840}},line:4},"480":{name:"dh",decl:{start:{line:4,column:3849},end:{line:4,column:3851}},loc:{start:{line:4,column:3858},end:{line:4,column:3970}},line:4},"481":{name:"(anonymous_481)",decl:{start:{line:4,column:4036},end:{line:4,column:4037}},loc:{start:{line:4,column:4047},end:{line:4,column:4118}},line:4},"482":{name:"Mn",decl:{start:{line:4,column:4129},end:{line:4,column:4131}},loc:{start:{line:4,column:4134},end:{line:4,column:4161}},line:4},"483":{name:"tl",decl:{start:{line:4,column:4170},end:{line:4,column:4172}},loc:{start:{line:4,column:4175},end:{line:4,column:4222}},line:4},"484":{name:"nl",decl:{start:{line:4,column:4231},end:{line:4,column:4233}},loc:{start:{line:4,column:4239},end:{line:4,column:4295}},line:4},"485":{name:"Yi",decl:{start:{line:4,column:4304},end:{line:4,column:4306}},loc:{start:{line:4,column:4314},end:{line:4,column:4434}},line:4},"486":{name:"(anonymous_486)",decl:{start:{line:4,column:4338},end:{line:4,column:4339}},loc:{start:{line:4,column:4341},end:{line:4,column:4352}},line:4},"487":{name:"(anonymous_487)",decl:{start:{line:4,column:4365},end:{line:4,column:4366}},loc:{start:{line:4,column:4368},end:{line:4,column:4410}},line:4},"488":{name:"rl",decl:{start:{line:4,column:4443},end:{line:4,column:4445}},loc:{start:{line:4,column:4450},end:{line:4,column:4531}},line:4},"489":{name:"(anonymous_489)",decl:{start:{line:4,column:4517},end:{line:4,column:4518}},loc:{start:{line:4,column:4520},end:{line:4,column:4528}},line:4},"490":{name:"jr",decl:{start:{line:4,column:4540},end:{line:4,column:4542}},loc:{start:{line:4,column:4551},end:{line:4,column:5249}},line:4},"491":{name:"(anonymous_491)",decl:{start:{line:4,column:4928},end:{line:4,column:4929}},loc:{start:{line:4,column:4931},end:{line:4,column:4964}},line:4},"492":{name:"(anonymous_492)",decl:{start:{line:4,column:5007},end:{line:4,column:5008}},loc:{start:{line:4,column:5011},end:{line:4,column:5016}},line:4},"493":{name:"(anonymous_493)",decl:{start:{line:4,column:5116},end:{line:4,column:5117}},loc:{start:{line:4,column:5120},end:{line:4,column:5125}},line:4},"494":{name:"(anonymous_494)",decl:{start:{line:4,column:5186},end:{line:4,column:5187}},loc:{start:{line:4,column:5189},end:{line:4,column:5197}},line:4},"495":{name:"Ki",decl:{start:{line:4,column:5258},end:{line:4,column:5260}},loc:{start:{line:4,column:5265},end:{line:4,column:5340}},line:4},"496":{name:"ol",decl:{start:{line:4,column:5387},end:{line:4,column:5389}},loc:{start:{line:4,column:5392},end:{line:4,column:5438}},line:4},"497":{name:"ph",decl:{start:{line:4,column:5447},end:{line:4,column:5449}},loc:{start:{line:4,column:5452},end:{line:4,column:5480}},line:4},"498":{name:"hh",decl:{start:{line:4,column:5489},end:{line:4,column:5491}},loc:{start:{line:4,column:5494},end:{line:4,column:5521}},line:4},"499":{name:"ht",decl:{start:{line:4,column:5530},end:{line:4,column:5532}},loc:{start:{line:4,column:5535},end:{line:4,column:5564}},line:4},"500":{name:"il",decl:{start:{line:4,column:5573},end:{line:4,column:5575}},loc:{start:{line:4,column:5578},end:{line:4,column:5598}},line:4},"501":{name:"Nn",decl:{start:{line:4,column:5639},end:{line:4,column:5641}},loc:{start:{line:4,column:5643},end:{line:4,column:5679}},line:4},"502":{name:"(anonymous_502)",decl:{start:{line:4,column:5796},end:{line:4,column:5797}},loc:{start:{line:4,column:5811},end:{line:4,column:5835}},line:4},"503":{name:"(anonymous_503)",decl:{start:{line:4,column:5866},end:{line:4,column:5867}},loc:{start:{line:4,column:5886},end:{line:4,column:6209}},line:4},"504":{name:"(anonymous_504)",decl:{start:{line:4,column:5942},end:{line:4,column:5943}},loc:{start:{line:4,column:5945},end:{line:4,column:5968}},line:4},"505":{name:"(anonymous_505)",decl:{start:{line:4,column:6209},end:{line:4,column:6210}},loc:{start:{line:4,column:6222},end:{line:4,column:6302}},line:4},"506":{name:"(anonymous_506)",decl:{start:{line:4,column:6302},end:{line:4,column:6303}},loc:{start:{line:4,column:6311},end:{line:4,column:6576}},line:4},"507":{name:"(anonymous_507)",decl:{start:{line:4,column:6576},end:{line:4,column:6577}},loc:{start:{line:4,column:6588},end:{line:4,column:6662}},line:4},"508":{name:"(anonymous_508)",decl:{start:{line:4,column:6634},end:{line:4,column:6635}},loc:{start:{line:4,column:6638},end:{line:4,column:6661}},line:4},"509":{name:"(anonymous_509)",decl:{start:{line:4,column:6662},end:{line:4,column:6663}},loc:{start:{line:4,column:6677},end:{line:4,column:6751}},line:4},"510":{name:"(anonymous_510)",decl:{start:{line:4,column:6751},end:{line:4,column:6752}},loc:{start:{line:4,column:6764},end:{line:4,column:7191}},line:4},"511":{name:"(anonymous_511)",decl:{start:{line:4,column:7191},end:{line:4,column:7192}},loc:{start:{line:4,column:7220},end:{line:4,column:7339}},line:4},"512":{name:"(anonymous_512)",decl:{start:{line:4,column:7339},end:{line:4,column:7340}},loc:{start:{line:4,column:7349},end:{line:4,column:7374}},line:4},"513":{name:"(anonymous_513)",decl:{start:{line:4,column:7374},end:{line:4,column:7375}},loc:{start:{line:4,column:7392},end:{line:4,column:7603}},line:4},"514":{name:"(anonymous_514)",decl:{start:{line:4,column:7522},end:{line:4,column:7523}},loc:{start:{line:4,column:7526},end:{line:4,column:7537}},line:4},"515":{name:"(anonymous_515)",decl:{start:{line:4,column:7603},end:{line:4,column:7604}},loc:{start:{line:4,column:7617},end:{line:4,column:7833}},line:4},"516":{name:"(anonymous_516)",decl:{start:{line:4,column:7833},end:{line:4,column:7834}},loc:{start:{line:4,column:7856},end:{line:4,column:7990}},line:4},"517":{name:"(anonymous_517)",decl:{start:{line:4,column:7990},end:{line:4,column:7991}},loc:{start:{line:4,column:8008},end:{line:4,column:8088}},line:4},"518":{name:"xi",decl:{start:{line:4,column:8099},end:{line:4,column:8101}},loc:{start:{line:4,column:8104},end:{line:4,column:8263}},line:4},"519":{name:"gh",decl:{start:{line:4,column:8272},end:{line:4,column:8274}},loc:{start:{line:4,column:8277},end:{line:4,column:8368}},line:4},"520":{name:"(anonymous_520)",decl:{start:{line:4,column:8341},end:{line:4,column:8342}},loc:{start:{line:4,column:8345},end:{line:4,column:8357}},line:4},"521":{name:"(anonymous_521)",decl:{start:{line:4,column:8358},end:{line:4,column:8359}},loc:{start:{line:4,column:8362},end:{line:4,column:8367}},line:4},"522":{name:"mh",decl:{start:{line:4,column:8377},end:{line:4,column:8379}},loc:{start:{line:4,column:8382},end:{line:4,column:8451}},line:4},"523":{name:"Xi",decl:{start:{line:4,column:8460},end:{line:4,column:8462}},loc:{start:{line:4,column:8469},end:{line:4,column:8783}},line:4},"524":{name:"(anonymous_524)",decl:{start:{line:4,column:8533},end:{line:4,column:8534}},loc:{start:{line:4,column:8537},end:{line:4,column:8550}},line:4},"525":{name:"(anonymous_525)",decl:{start:{line:4,column:8567},end:{line:4,column:8568}},loc:{start:{line:4,column:8571},end:{line:4,column:8602}},line:4},"526":{name:"(anonymous_526)",decl:{start:{line:4,column:8619},end:{line:4,column:8620}},loc:{start:{line:4,column:8626},end:{line:4,column:8671}},line:4},"527":{name:"(anonymous_527)",decl:{start:{line:4,column:8724},end:{line:4,column:8725}},loc:{start:{line:4,column:8728},end:{line:4,column:8748}},line:4},"528":{name:"yn",decl:{start:{line:4,column:8792},end:{line:4,column:8794}},loc:{start:{line:4,column:8797},end:{line:4,column:8834}},line:4},"529":{name:"Bt",decl:{start:{line:4,column:8843},end:{line:4,column:8845}},loc:{start:{line:4,column:8855},end:{line:4,column:8900}},line:4},"530":{name:"yh",decl:{start:{line:4,column:8909},end:{line:4,column:8911}},loc:{start:{line:4,column:8914},end:{line:4,column:8930}},line:4},"531":{name:"vh",decl:{start:{line:4,column:8939},end:{line:4,column:8941}},loc:{start:{line:4,column:8944},end:{line:4,column:9015}},line:4},"532":{name:"Eh",decl:{start:{line:4,column:9024},end:{line:4,column:9026}},loc:{start:{line:4,column:9029},end:{line:4,column:9115}},line:4},"533":{name:"Ai",decl:{start:{line:4,column:9124},end:{line:4,column:9126}},loc:{start:{line:4,column:9131},end:{line:4,column:9210}},line:4},"534":{name:"Kr",decl:{start:{line:4,column:9219},end:{line:4,column:9221}},loc:{start:{line:4,column:9226},end:{line:4,column:9334}},line:4},"535":{name:"sl",decl:{start:{line:4,column:9343},end:{line:4,column:9345}},loc:{start:{line:4,column:9347},end:{line:4,column:9381}},line:4},"536":{name:"Pe",decl:{start:{line:4,column:9574},end:{line:4,column:9576}},loc:{start:{line:4,column:9579},end:{line:4,column:9628}},line:4},"537":{name:"de",decl:{start:{line:4,column:9637},end:{line:4,column:9639}},loc:{start:{line:4,column:9642},end:{line:4,column:9679}},line:4},"538":{name:"rs",decl:{start:{line:4,column:9688},end:{line:4,column:9690}},loc:{start:{line:4,column:9693},end:{line:4,column:9716}},line:4},"539":{name:"Le",decl:{start:{line:4,column:9725},end:{line:4,column:9727}},loc:{start:{line:4,column:9730},end:{line:4,column:9759}},line:4},"540":{name:"xn",decl:{start:{line:4,column:9768},end:{line:4,column:9770}},loc:{start:{line:4,column:9773},end:{line:4,column:9796}},line:4},"541":{name:"we",decl:{start:{line:4,column:9805},end:{line:4,column:9807}},loc:{start:{line:4,column:9810},end:{line:4,column:9830}},line:4},"542":{name:"zt",decl:{start:{line:4,column:9839},end:{line:4,column:9841}},loc:{start:{line:4,column:9844},end:{line:4,column:9866}},line:4},"543":{name:"Ct",decl:{start:{line:4,column:9875},end:{line:4,column:9877}},loc:{start:{line:4,column:9880},end:{line:4,column:9904}},line:4},"544":{name:"ie",decl:{start:{line:4,column:9936},end:{line:4,column:9938}},loc:{start:{line:4,column:9941},end:{line:4,column:9982}},line:4},"545":{name:"is",decl:{start:{line:4,column:9991},end:{line:4,column:9993}},loc:{start:{line:4,column:9998},end:{line:4,column:10015}},line:4},"546":{name:"fe",decl:{start:{line:4,column:10024},end:{line:4,column:10026}},loc:{start:{line:4,column:10031},end:{line:4,column:10054}},line:4},"547":{name:"Xr",decl:{start:{line:4,column:10063},end:{line:4,column:10065}},loc:{start:{line:4,column:10070},end:{line:4,column:10088}},line:4},"548":{name:"eo",decl:{start:{line:4,column:10097},end:{line:4,column:10099}},loc:{start:{line:4,column:10104},end:{line:4,column:10117}},line:4},"549":{name:"ss",decl:{start:{line:4,column:10126},end:{line:4,column:10128}},loc:{start:{line:4,column:10137},end:{line:4,column:10200}},line:4},"550":{name:"se",decl:{start:{line:4,column:10209},end:{line:4,column:10211}},loc:{start:{line:4,column:10216},end:{line:4,column:10249}},line:4},"551":{name:"ll",decl:{start:{line:4,column:10258},end:{line:4,column:10260}},loc:{start:{line:4,column:10263},end:{line:4,column:10283}},line:4},"552":{name:"to",decl:{start:{line:4,column:10292},end:{line:4,column:10294}},loc:{start:{line:4,column:10297},end:{line:4,column:10321}},line:4},"553":{name:"ul",decl:{start:{line:4,column:10330},end:{line:4,column:10332}},loc:{start:{line:4,column:10335},end:{line:4,column:10352}},line:4},"554":{name:"ae",decl:{start:{line:4,column:10361},end:{line:4,column:10363}},loc:{start:{line:4,column:10368},end:{line:4,column:10394}},line:4},"555":{name:"as",decl:{start:{line:4,column:10403},end:{line:4,column:10405}},loc:{start:{line:4,column:10408},end:{line:4,column:10417}},line:4},"556":{name:"cs",decl:{start:{line:4,column:10426},end:{line:4,column:10428}},loc:{start:{line:4,column:10431},end:{line:4,column:10469}},line:4},"557":{name:"dl",decl:{start:{line:4,column:10478},end:{line:4,column:10480}},loc:{start:{line:4,column:10485},end:{line:4,column:10517}},line:4},"558":{name:"An",decl:{start:{line:4,column:10526},end:{line:4,column:10528}},loc:{start:{line:4,column:10531},end:{line:4,column:10566}},line:4},"559":{name:"no",decl:{start:{line:4,column:10575},end:{line:4,column:10577}},loc:{start:{line:4,column:10580},end:{line:4,column:10658}},line:4},"560":{name:"wt",decl:{start:{line:4,column:10667},end:{line:4,column:10669}},loc:{start:{line:4,column:10672},end:{line:4,column:10785}},line:4},"561":{name:"ls",decl:{start:{line:4,column:10794},end:{line:4,column:10796}},loc:{start:{line:4,column:10801},end:{line:4,column:10870}},line:4},"562":{name:"fl",decl:{start:{line:4,column:10879},end:{line:4,column:10881}},loc:{start:{line:4,column:10886},end:{line:4,column:10959}},line:4},"563":{name:"ze",decl:{start:{line:4,column:10968},end:{line:4,column:10970}},loc:{start:{line:4,column:10973},end:{line:4,column:11005}},line:4},"564":{name:"us",decl:{start:{line:4,column:11014},end:{line:4,column:11016}},loc:{start:{line:4,column:11019},end:{line:4,column:11038}},line:4},"565":{name:"ds",decl:{start:{line:4,column:11047},end:{line:4,column:11049}},loc:{start:{line:4,column:11052},end:{line:4,column:11075}},line:4},"566":{name:"pl",decl:{start:{line:4,column:11084},end:{line:4,column:11086}},loc:{start:{line:4,column:11095},end:{line:4,column:11162}},line:4},"567":{name:"hl",decl:{start:{line:4,column:11252},end:{line:4,column:11254}},loc:{start:{line:4,column:11256},end:{line:4,column:11291}},line:4},"568":{name:"gl",decl:{start:{line:4,column:11300},end:{line:4,column:11302}},loc:{start:{line:4,column:11304},end:{line:4,column:11334}},line:4},"569":{name:"fs",decl:{start:{line:4,column:11343},end:{line:4,column:11345}},loc:{start:{line:4,column:11347},end:{line:4,column:11377}},line:4},"570":{name:"ps",decl:{start:{line:4,column:11386},end:{line:4,column:11388}},loc:{start:{line:4,column:11390},end:{line:4,column:11416}},line:4},"571":{name:"hs",decl:{start:{line:4,column:11425},end:{line:4,column:11427}},loc:{start:{line:4,column:11429},end:{line:4,column:11469}},line:4},"572":{name:"gs",decl:{start:{line:4,column:11478},end:{line:4,column:11480}},loc:{start:{line:4,column:11483},end:{line:4,column:11520}},line:4},"573":{name:"ms",decl:{start:{line:4,column:11529},end:{line:4,column:11531}},loc:{start:{line:4,column:11533},end:{line:4,column:11564}},line:4},"574":{name:"v",decl:{start:{line:4,column:11573},end:{line:4,column:11574}},loc:{start:{line:4,column:11576},end:{line:4,column:11599}},line:4},"575":{name:"j",decl:{start:{line:4,column:11608},end:{line:4,column:11609}},loc:{start:{line:4,column:11611},end:{line:4,column:11634}},line:4},"576":{name:"ml",decl:{start:{line:4,column:11643},end:{line:4,column:11645}},loc:{start:{line:4,column:11648},end:{line:4,column:11685}},line:4},"577":{name:"yl",decl:{start:{line:4,column:11694},end:{line:4,column:11696}},loc:{start:{line:4,column:11699},end:{line:4,column:11736}},line:4},"578":{name:"G",decl:{start:{line:4,column:11745},end:{line:4,column:11746}},loc:{start:{line:4,column:11748},end:{line:4,column:11808}},line:4},"579":{name:"ys",decl:{start:{line:4,column:11817},end:{line:4,column:11819}},loc:{start:{line:4,column:11821},end:{line:4,column:11851}},line:4},"580":{name:"vl",decl:{start:{line:4,column:11860},end:{line:4,column:11862}},loc:{start:{line:4,column:11864},end:{line:4,column:11926}},line:4},"581":{name:"Qt",decl:{start:{line:4,column:11935},end:{line:4,column:11937}},loc:{start:{line:4,column:11942},end:{line:4,column:11988}},line:4},"582":{name:"vs",decl:{start:{line:4,column:11997},end:{line:4,column:11999}},loc:{start:{line:4,column:12001},end:{line:4,column:12027}},line:4},"583":{name:"Es",decl:{start:{line:4,column:12036},end:{line:4,column:12038}},loc:{start:{line:4,column:12040},end:{line:4,column:12062}},line:4},"584":{name:"El",decl:{start:{line:4,column:12071},end:{line:4,column:12073}},loc:{start:{line:4,column:12075},end:{line:4,column:12105}},line:4},"585":{name:"Is",decl:{start:{line:4,column:12114},end:{line:4,column:12116}},loc:{start:{line:4,column:12118},end:{line:4,column:12129}},line:4},"586":{name:"In",decl:{start:{line:4,column:12138},end:{line:4,column:12140}},loc:{start:{line:4,column:12143},end:{line:4,column:12167}},line:4},"587":{name:"Rn",decl:{start:{line:4,column:12176},end:{line:4,column:12178}},loc:{start:{line:4,column:12180},end:{line:4,column:12283}},line:4},"588":{name:"Il",decl:{start:{line:4,column:12292},end:{line:4,column:12294}},loc:{start:{line:4,column:12296},end:{line:4,column:12326}},line:4},"589":{name:"Dl",decl:{start:{line:4,column:12335},end:{line:4,column:12337}},loc:{start:{line:4,column:12340},end:{line:4,column:12372}},line:4},"590":{name:"Tt",decl:{start:{line:4,column:12381},end:{line:4,column:12383}},loc:{start:{line:4,column:12385},end:{line:4,column:12417}},line:4},"591":{name:"ro",decl:{start:{line:4,column:12426},end:{line:4,column:12428}},loc:{start:{line:4,column:12431},end:{line:4,column:12505}},line:4},"592":{name:"Cl",decl:{start:{line:4,column:12514},end:{line:4,column:12516}},loc:{start:{line:4,column:12518},end:{line:4,column:12542}},line:4},"593":{name:"wl",decl:{start:{line:4,column:12551},end:{line:4,column:12553}},loc:{start:{line:4,column:12558},end:{line:4,column:12616}},line:4},"594":{name:"Tl",decl:{start:{line:4,column:12625},end:{line:4,column:12627}},loc:{start:{line:4,column:12629},end:{line:4,column:12668}},line:4},"595":{name:"oo",decl:{start:{line:4,column:12677},end:{line:4,column:12679}},loc:{start:{line:4,column:12682},end:{line:4,column:12716}},line:4},"596":{name:"bl",decl:{start:{line:4,column:12725},end:{line:4,column:12727}},loc:{start:{line:4,column:12730},end:{line:4,column:12792}},line:4},"597":{name:"Ds",decl:{start:{line:4,column:12801},end:{line:4,column:12803}},loc:{start:{line:4,column:12805},end:{line:4,column:12840}},line:4},"598":{name:"io",decl:{start:{line:4,column:12849},end:{line:4,column:12851}},loc:{start:{line:4,column:12854},end:{line:4,column:12884}},line:4},"599":{name:"Ih",decl:{start:{line:4,column:12893},end:{line:4,column:12895}},loc:{start:{line:4,column:12898},end:{line:4,column:12961}},line:4},"600":{name:"Cs",decl:{start:{line:4,column:12970},end:{line:4,column:12972}},loc:{start:{line:4,column:12979},end:{line:4,column:13167}},line:4},"601":{name:"so",decl:{start:{line:4,column:13176},end:{line:4,column:13178}},loc:{start:{line:4,column:13181},end:{line:4,column:13323}},line:4},"602":{name:"_l",decl:{start:{line:4,column:13332},end:{line:4,column:13334}},loc:{start:{line:4,column:13336},end:{line:4,column:13400}},line:4},"603":{name:"Ml",decl:{start:{line:4,column:13409},end:{line:4,column:13411}},loc:{start:{line:4,column:13414},end:{line:4,column:13694}},line:4},"604":{name:"Nl",decl:{start:{line:4,column:13703},end:{line:4,column:13705}},loc:{start:{line:4,column:13707},end:{line:4,column:13783}},line:4},"605":{name:"ao",decl:{start:{line:4,column:13802},end:{line:4,column:13804}},loc:{start:{line:4,column:13806},end:{line:4,column:14019}},line:4},"606":{name:"Sl",decl:{start:{line:4,column:14028},end:{line:4,column:14030}},loc:{start:{line:4,column:14033},end:{line:4,column:14095}},line:4},"607":{name:"Te",decl:{start:{line:4,column:14104},end:{line:4,column:14106}},loc:{start:{line:4,column:14108},end:{line:4,column:14139}},line:4},"608":{name:"Xe",decl:{start:{line:4,column:14148},end:{line:4,column:14150}},loc:{start:{line:4,column:14153},end:{line:4,column:14179}},line:4},"609":{name:"co",decl:{start:{line:4,column:14188},end:{line:4,column:14190}},loc:{start:{line:4,column:14192},end:{line:4,column:14243}},line:4},"610":{name:"xl",decl:{start:{line:4,column:14252},end:{line:4,column:14254}},loc:{start:{line:4,column:14256},end:{line:4,column:14286}},line:4},"611":{name:"Al",decl:{start:{line:4,column:14295},end:{line:4,column:14297}},loc:{start:{line:4,column:14299},end:{line:4,column:14305}},line:4},"612":{name:"Dh",decl:{start:{line:4,column:14314},end:{line:4,column:14316}},loc:{start:{line:4,column:14318},end:{line:4,column:14350}},line:4},"613":{name:"Rl",decl:{start:{line:4,column:14359},end:{line:4,column:14361}},loc:{start:{line:4,column:14363},end:{line:4,column:14397}},line:4},"614":{name:"lo",decl:{start:{line:4,column:14416},end:{line:4,column:14418}},loc:{start:{line:4,column:14420},end:{line:4,column:14431}},line:4},"615":{name:"uo",decl:{start:{line:4,column:14440},end:{line:4,column:14442}},loc:{start:{line:4,column:14445},end:{line:4,column:14451}},line:4},"616":{name:"ki",decl:{start:{line:4,column:14460},end:{line:4,column:14462}},loc:{start:{line:4,column:14481},end:{line:4,column:14541}},line:4},"617":{name:"Ts",decl:{start:{line:4,column:14550},end:{line:4,column:14552}},loc:{start:{line:4,column:14581},end:{line:4,column:14638}},line:4},"618":{name:"(anonymous_618)",decl:{start:{line:4,column:14701},end:{line:4,column:14702}},loc:{start:{line:4,column:14719},end:{line:4,column:14830}},line:4},"619":{name:"(anonymous_619)",decl:{start:{line:4,column:14884},end:{line:4,column:14885}},loc:{start:{line:4,column:14888},end:{line:4,column:14894}},line:4},"620":{name:"(anonymous_620)",decl:{start:{line:4,column:14943},end:{line:4,column:14944}},loc:{start:{line:4,column:14947},end:{line:4,column:15019}},line:4},"621":{name:"(anonymous_621)",decl:{start:{line:4,column:15005},end:{line:4,column:15006}},loc:{start:{line:4,column:15008},end:{line:4,column:15009}},line:4},"622":{name:"(anonymous_622)",decl:{start:{line:4,column:15050},end:{line:4,column:15051}},loc:{start:{line:4,column:15064},end:{line:4,column:15087}},line:4},"623":{name:"(anonymous_623)",decl:{start:{line:4,column:15087},end:{line:4,column:15088}},loc:{start:{line:4,column:15102},end:{line:4,column:15126}},line:4},"624":{name:"(anonymous_624)",decl:{start:{line:4,column:15126},end:{line:4,column:15127}},loc:{start:{line:4,column:15138},end:{line:4,column:15184}},line:4},"625":{name:"(anonymous_625)",decl:{start:{line:4,column:15172},end:{line:4,column:15173}},loc:{start:{line:4,column:15176},end:{line:4,column:15183}},line:4},"626":{name:"Ch",decl:{start:{line:4,column:15195},end:{line:4,column:15197}},loc:{start:{line:4,column:15199},end:{line:4,column:15219}},line:4},"627":{name:"(anonymous_627)",decl:{start:{line:4,column:15246},end:{line:4,column:15247}},loc:{start:{line:4,column:15250},end:{line:4,column:16094}},line:4},"628":{name:"(anonymous_628)",decl:{start:{line:4,column:15362},end:{line:4,column:15363}},loc:{start:{line:4,column:15383},end:{line:4,column:15432}},line:4},"629":{name:"(anonymous_629)",decl:{start:{line:4,column:15432},end:{line:4,column:15433}},loc:{start:{line:4,column:15463},end:{line:4,column:15539}},line:4},"630":{name:"(anonymous_630)",decl:{start:{line:4,column:15492},end:{line:4,column:15493}},loc:{start:{line:4,column:15495},end:{line:4,column:15520}},line:4},"631":{name:"(anonymous_631)",decl:{start:{line:4,column:15539},end:{line:4,column:15540}},loc:{start:{line:4,column:15544},end:{line:4,column:15695}},line:4},"632":{name:"(anonymous_632)",decl:{start:{line:4,column:15695},end:{line:4,column:15696}},loc:{start:{line:4,column:15701},end:{line:4,column:15734}},line:4},"633":{name:"(anonymous_633)",decl:{start:{line:4,column:15734},end:{line:4,column:15735}},loc:{start:{line:4,column:15743},end:{line:4,column:15881}},line:4},"634":{name:"(anonymous_634)",decl:{start:{line:4,column:15881},end:{line:4,column:15882}},loc:{start:{line:4,column:15894},end:{line:4,column:16018}},line:4},"635":{name:"(anonymous_635)",decl:{start:{line:4,column:16073},end:{line:4,column:16074}},loc:{start:{line:4,column:16077},end:{line:4,column:16082}},line:4},"636":{name:"(anonymous_636)",decl:{start:{line:4,column:16166},end:{line:4,column:16167}},loc:{start:{line:4,column:16183},end:{line:4,column:16307}},line:4},"637":{name:"(anonymous_637)",decl:{start:{line:4,column:16307},end:{line:4,column:16308}},loc:{start:{line:4,column:16314},end:{line:4,column:16361}},line:4},"638":{name:"(anonymous_638)",decl:{start:{line:4,column:16361},end:{line:4,column:16362}},loc:{start:{line:4,column:16377},end:{line:4,column:16684}},line:4},"639":{name:"(anonymous_639)",decl:{start:{line:4,column:16392},end:{line:4,column:16393}},loc:{start:{line:4,column:16396},end:{line:4,column:16400}},line:4},"640":{name:"(anonymous_640)",decl:{start:{line:4,column:16684},end:{line:4,column:16685}},loc:{start:{line:4,column:16700},end:{line:4,column:16821}},line:4},"641":{name:"(anonymous_641)",decl:{start:{line:4,column:16708},end:{line:4,column:16709}},loc:{start:{line:4,column:16711},end:{line:4,column:16820}},line:4},"642":{name:"(anonymous_642)",decl:{start:{line:4,column:16754},end:{line:4,column:16755}},loc:{start:{line:4,column:16758},end:{line:4,column:16818}},line:4},"643":{name:"Hr",decl:{start:{line:4,column:16838},end:{line:4,column:16840}},loc:{start:{line:4,column:16846},end:{line:4,column:16848}},line:4},"644":{name:"bs",decl:{start:{line:4,column:16857},end:{line:4,column:16859}},loc:{start:{line:4,column:16862},end:{line:4,column:17132}},line:4},"645":{name:"r",decl:{start:{line:4,column:16880},end:{line:4,column:16881}},loc:{start:{line:4,column:16883},end:{line:4,column:17006}},line:4},"646":{name:"(anonymous_646)",decl:{start:{line:4,column:17026},end:{line:4,column:17027}},loc:{start:{line:4,column:17030},end:{line:4,column:17039}},line:4},"647":{name:"(anonymous_647)",decl:{start:{line:4,column:17108},end:{line:4,column:17109}},loc:{start:{line:4,column:17112},end:{line:4,column:17121}},line:4},"648":{name:"(anonymous_648)",decl:{start:{line:4,column:17124},end:{line:4,column:17125}},loc:{start:{line:4,column:17128},end:{line:4,column:17131}},line:4},"649":{name:"Ll",decl:{start:{line:4,column:17141},end:{line:4,column:17143}},loc:{start:{line:4,column:17146},end:{line:4,column:17189}},line:4},"650":{name:"(anonymous_650)",decl:{start:{line:4,column:17169},end:{line:4,column:17170}},loc:{start:{line:4,column:17173},end:{line:4,column:17176}},line:4},"651":{name:"(anonymous_651)",decl:{start:{line:4,column:17178},end:{line:4,column:17179}},loc:{start:{line:4,column:17182},end:{line:4,column:17188}},line:4},"652":{name:"(anonymous_652)",decl:{start:{line:4,column:17389},end:{line:4,column:17390}},loc:{start:{line:4,column:17403},end:{line:4,column:17959}},line:4},"653":{name:"(anonymous_653)",decl:{start:{line:4,column:17959},end:{line:4,column:17960}},loc:{start:{line:4,column:17983},end:{line:4,column:18034}},line:4},"654":{name:"(anonymous_654)",decl:{start:{line:4,column:18034},end:{line:4,column:18035}},loc:{start:{line:4,column:18062},end:{line:4,column:18107}},line:4},"655":{name:"(anonymous_655)",decl:{start:{line:4,column:18107},end:{line:4,column:18108}},loc:{start:{line:4,column:18138},end:{line:4,column:18182}},line:4},"656":{name:"(anonymous_656)",decl:{start:{line:4,column:18182},end:{line:4,column:18183}},loc:{start:{line:4,column:18192},end:{line:4,column:18223}},line:4},"657":{name:"(anonymous_657)",decl:{start:{line:4,column:18223},end:{line:4,column:18224}},loc:{start:{line:4,column:18239},end:{line:4,column:18363}},line:4},"658":{name:"(anonymous_658)",decl:{start:{line:4,column:18363},end:{line:4,column:18364}},loc:{start:{line:4,column:18380},end:{line:4,column:18418}},line:4},"659":{name:"(anonymous_659)",decl:{start:{line:4,column:18418},end:{line:4,column:18419}},loc:{start:{line:4,column:18438},end:{line:4,column:18465}},line:4},"660":{name:"Ms",decl:{start:{line:4,column:18482},end:{line:4,column:18484}},loc:{start:{line:4,column:18487},end:{line:4,column:18713}},line:4},"661":{name:"(anonymous_661)",decl:{start:{line:4,column:18662},end:{line:4,column:18663}},loc:{start:{line:4,column:18666},end:{line:4,column:18687}},line:4},"662":{name:"bh",decl:{start:{line:4,column:18722},end:{line:4,column:18724}},loc:{start:{line:4,column:18727},end:{line:4,column:18991}},line:4},"663":{name:"t",decl:{start:{line:4,column:18814},end:{line:4,column:18815}},loc:{start:{line:4,column:18817},end:{line:4,column:18915}},line:4},"664":{name:"(anonymous_664)",decl:{start:{line:4,column:18821},end:{line:4,column:18822}},loc:{start:{line:4,column:18825},end:{line:4,column:18913}},line:4},"665":{name:"(anonymous_665)",decl:{start:{line:4,column:18950},end:{line:4,column:18951}},loc:{start:{line:4,column:18954},end:{line:4,column:18959}},line:4},"666":{name:"(anonymous_666)",decl:{start:{line:4,column:18974},end:{line:4,column:18975}},loc:{start:{line:4,column:18978},end:{line:4,column:18983}},line:4},"667":{name:"_h",decl:{start:{line:4,column:19000},end:{line:4,column:19002}},loc:{start:{line:4,column:19005},end:{line:4,column:19755}},line:4},"668":{name:"(anonymous_668)",decl:{start:{line:4,column:19012},end:{line:4,column:19013}},loc:{start:{line:4,column:19016},end:{line:4,column:19023}},line:4},"669":{name:"(anonymous_669)",decl:{start:{line:4,column:19121},end:{line:4,column:19122}},loc:{start:{line:4,column:19136},end:{line:4,column:19331}},line:4},"670":{name:"(anonymous_670)",decl:{start:{line:4,column:19341},end:{line:4,column:19342}},loc:{start:{line:4,column:19358},end:{line:4,column:19481}},line:4},"671":{name:"(anonymous_671)",decl:{start:{line:4,column:19492},end:{line:4,column:19493}},loc:{start:{line:4,column:19503},end:{line:4,column:19660}},line:4},"672":{name:"(anonymous_672)",decl:{start:{line:4,column:19675},end:{line:4,column:19676}},loc:{start:{line:4,column:19687},end:{line:4,column:19751}},line:4},"673":{name:"(anonymous_673)",decl:{start:{line:4,column:19726},end:{line:4,column:19727}},loc:{start:{line:4,column:19730},end:{line:4,column:19747}},line:4},"674":{name:"Pi",decl:{start:{line:4,column:19764},end:{line:4,column:19766}},loc:{start:{line:4,column:19769},end:{line:4,column:19948}},line:4},"675":{name:"Uc",decl:{start:{line:4,column:19957},end:{line:4,column:19959}},loc:{start:{line:4,column:19962},end:{line:4,column:20028}},line:4},"676":{name:"Wc",decl:{start:{line:4,column:20037},end:{line:4,column:20039}},loc:{start:{line:4,column:20042},end:{line:4,column:20062}},line:4},"677":{name:"(anonymous_677)",decl:{start:{line:4,column:20208},end:{line:4,column:20209}},loc:{start:{line:4,column:20218},end:{line:4,column:20239}},line:4},"678":{name:"(anonymous_678)",decl:{start:{line:4,column:20239},end:{line:4,column:20240}},loc:{start:{line:4,column:20256},end:{line:4,column:20277}},line:4},"679":{name:"(anonymous_679)",decl:{start:{line:4,column:20277},end:{line:4,column:20278}},loc:{start:{line:4,column:20297},end:{line:4,column:20309}},line:4},"680":{name:"(anonymous_680)",decl:{start:{line:4,column:20309},end:{line:4,column:20310}},loc:{start:{line:4,column:20325},end:{line:4,column:20346}},line:4},"681":{name:"Mh",decl:{start:{line:4,column:20357},end:{line:4,column:20359}},loc:{start:{line:4,column:20362},end:{line:4,column:20397}},line:4},"682":{name:"Nh",decl:{start:{line:4,column:20406},end:{line:4,column:20408}},loc:{start:{line:4,column:20411},end:{line:4,column:20446}},line:4},"683":{name:"Fl",decl:{start:{line:4,column:20455},end:{line:4,column:20457}},loc:{start:{line:4,column:20462},end:{line:4,column:20525}},line:4},"684":{name:"(anonymous_684)",decl:{start:{line:4,column:20555},end:{line:4,column:20556}},loc:{start:{line:4,column:20569},end:{line:4,column:20601}},line:4},"685":{name:"(anonymous_685)",decl:{start:{line:4,column:20624},end:{line:4,column:20625}},loc:{start:{line:4,column:20628},end:{line:4,column:20765}},line:4},"686":{name:"(anonymous_686)",decl:{start:{line:4,column:20658},end:{line:4,column:20659}},loc:{start:{line:4,column:20661},end:{line:4,column:20764}},line:4},"687":{name:"(anonymous_687)",decl:{start:{line:4,column:20682},end:{line:4,column:20683}},loc:{start:{line:4,column:20686},end:{line:4,column:20762}},line:4},"688":{name:"(anonymous_688)",decl:{start:{line:4,column:20714},end:{line:4,column:20715}},loc:{start:{line:4,column:20718},end:{line:4,column:20727}},line:4},"689":{name:"(anonymous_689)",decl:{start:{line:4,column:20792},end:{line:4,column:20793}},loc:{start:{line:4,column:20796},end:{line:4,column:20823}},line:4},"690":{name:"(anonymous_690)",decl:{start:{line:4,column:20855},end:{line:4,column:20856}},loc:{start:{line:4,column:20859},end:{line:4,column:21246}},line:4},"691":{name:"(anonymous_691)",decl:{start:{line:4,column:20911},end:{line:4,column:20912}},loc:{start:{line:4,column:20914},end:{line:4,column:20946}},line:4},"692":{name:"(anonymous_692)",decl:{start:{line:4,column:20949},end:{line:4,column:20950}},loc:{start:{line:4,column:20952},end:{line:4,column:21025}},line:4},"693":{name:"(anonymous_693)",decl:{start:{line:4,column:21028},end:{line:4,column:21029}},loc:{start:{line:4,column:21032},end:{line:4,column:21106}},line:4},"694":{name:"(anonymous_694)",decl:{start:{line:4,column:21160},end:{line:4,column:21161}},loc:{start:{line:4,column:21164},end:{line:4,column:21244}},line:4},"695":{name:"xh",decl:{start:{line:4,column:21258},end:{line:4,column:21260}},loc:{start:{line:4,column:21262},end:{line:4,column:21292}},line:4},"696":{name:"(anonymous_696)",decl:{start:{line:4,column:21277},end:{line:4,column:21278}},loc:{start:{line:4,column:21281},end:{line:4,column:21288}},line:4},"697":{name:"Ns",decl:{start:{line:4,column:21301},end:{line:4,column:21303}},loc:{start:{line:4,column:21308},end:{line:4,column:21398}},line:4},"698":{name:"fo",decl:{start:{line:4,column:21407},end:{line:4,column:21409}},loc:{start:{line:4,column:21411},end:{line:4,column:21511}},line:4},"699":{name:"(anonymous_699)",decl:{start:{line:4,column:21458},end:{line:4,column:21459}},loc:{start:{line:4,column:21462},end:{line:4,column:21468}},line:4},"700":{name:"(anonymous_700)",decl:{start:{line:4,column:21519},end:{line:4,column:21520}},loc:{start:{line:4,column:21523},end:{line:4,column:21620}},line:4},"701":{name:"(anonymous_701)",decl:{start:{line:4,column:21542},end:{line:4,column:21543}},loc:{start:{line:4,column:21558},end:{line:4,column:21583}},line:4},"702":{name:"Ah",decl:{start:{line:4,column:21633},end:{line:4,column:21635}},loc:{start:{line:4,column:21637},end:{line:4,column:21661}},line:4},"703":{name:"(anonymous_703)",decl:{start:{line:4,column:21697},end:{line:4,column:21698}},loc:{start:{line:4,column:21701},end:{line:4,column:21703}},line:4},"704":{name:"(anonymous_704)",decl:{start:{line:4,column:21727},end:{line:4,column:21728}},loc:{start:{line:4,column:21731},end:{line:4,column:22096}},line:4},"705":{name:"(anonymous_705)",decl:{start:{line:4,column:21802},end:{line:4,column:21803}},loc:{start:{line:4,column:21807},end:{line:4,column:21956}},line:4},"706":{name:"(anonymous_706)",decl:{start:{line:4,column:21852},end:{line:4,column:21853}},loc:{start:{line:4,column:21856},end:{line:4,column:21955}},line:4},"707":{name:"(anonymous_707)",decl:{start:{line:4,column:21956},end:{line:4,column:21957}},loc:{start:{line:4,column:21962},end:{line:4,column:22020}},line:4},"708":{name:"(anonymous_708)",decl:{start:{line:4,column:22075},end:{line:4,column:22076}},loc:{start:{line:4,column:22079},end:{line:4,column:22084}},line:4},"709":{name:"(anonymous_709)",decl:{start:{line:4,column:22104},end:{line:4,column:22105}},loc:{start:{line:4,column:22108},end:{line:4,column:22194}},line:4},"710":{name:"(anonymous_710)",decl:{start:{line:4,column:22172},end:{line:4,column:22173}},loc:{start:{line:4,column:22176},end:{line:4,column:22182}},line:4},"711":{name:"(anonymous_711)",decl:{start:{line:4,column:22241},end:{line:4,column:22242}},loc:{start:{line:4,column:22247},end:{line:4,column:22281}},line:4},"712":{name:"(anonymous_712)",decl:{start:{line:4,column:22281},end:{line:4,column:22282}},loc:{start:{line:4,column:22292},end:{line:4,column:22326}},line:4},"713":{name:"(anonymous_713)",decl:{start:{line:4,column:22326},end:{line:4,column:22327}},loc:{start:{line:4,column:22335},end:{line:4,column:22427}},line:4},"714":{name:"(anonymous_714)",decl:{start:{line:4,column:22427},end:{line:4,column:22428}},loc:{start:{line:4,column:22437},end:{line:4,column:22542}},line:4},"715":{name:"(anonymous_715)",decl:{start:{line:4,column:22542},end:{line:4,column:22543}},loc:{start:{line:4,column:22549},end:{line:4,column:22713}},line:4},"716":{name:"(anonymous_716)",decl:{start:{line:4,column:22659},end:{line:4,column:22660}},loc:{start:{line:4,column:22663},end:{line:4,column:22681}},line:4},"717":{name:"(anonymous_717)",decl:{start:{line:4,column:22713},end:{line:4,column:22714}},loc:{start:{line:4,column:22726},end:{line:4,column:22808}},line:4},"718":{name:"(anonymous_718)",decl:{start:{line:4,column:22823},end:{line:4,column:22824}},loc:{start:{line:4,column:22837},end:{line:4,column:22848}},line:4},"719":{name:"(anonymous_719)",decl:{start:{line:4,column:22848},end:{line:4,column:22849}},loc:{start:{line:4,column:22857},end:{line:4,column:22876}},line:4},"720":{name:"Vl",decl:{start:{line:4,column:22887},end:{line:4,column:22889}},loc:{start:{line:4,column:22894},end:{line:4,column:23185}},line:4},"721":{name:"(anonymous_721)",decl:{start:{line:4,column:23156},end:{line:4,column:23157}},loc:{start:{line:4,column:23160},end:{line:4,column:23171}},line:4},"722":{name:"(anonymous_722)",decl:{start:{line:4,column:23250},end:{line:4,column:23251}},loc:{start:{line:4,column:23255},end:{line:4,column:23297}},line:4},"723":{name:"(anonymous_723)",decl:{start:{line:4,column:23298},end:{line:4,column:23299}},loc:{start:{line:4,column:23307},end:{line:4,column:23447}},line:4},"724":{name:"(anonymous_724)",decl:{start:{line:4,column:23465},end:{line:4,column:23466}},loc:{start:{line:4,column:23486},end:{line:4,column:23542}},line:4},"725":{name:"(anonymous_725)",decl:{start:{line:4,column:23543},end:{line:4,column:23544}},loc:{start:{line:4,column:23552},end:{line:4,column:23668}},line:4},"726":{name:"(anonymous_726)",decl:{start:{line:4,column:23686},end:{line:4,column:23687}},loc:{start:{line:4,column:23707},end:{line:4,column:23766}},line:4},"727":{name:"(anonymous_727)",decl:{start:{line:4,column:23767},end:{line:4,column:23768}},loc:{start:{line:4,column:23776},end:{line:4,column:23892}},line:4},"728":{name:"Oh",decl:{start:{line:4,column:23904},end:{line:4,column:23906}},loc:{start:{line:4,column:23913},end:{line:4,column:24077}},line:4},"729":{name:"Ph",decl:{start:{line:4,column:24086},end:{line:4,column:24088}},loc:{start:{line:4,column:24095},end:{line:4,column:24251}},line:4},"730":{name:"Bl",decl:{start:{line:4,column:24260},end:{line:4,column:24262}},loc:{start:{line:4,column:24267},end:{line:4,column:24314}},line:4},"731":{name:"(anonymous_731)",decl:{start:{line:4,column:24274},end:{line:4,column:24275}},loc:{start:{line:4,column:24278},end:{line:4,column:24313}},line:4},"732":{name:"(anonymous_732)",decl:{start:{line:4,column:24281},end:{line:4,column:24282}},loc:{start:{line:4,column:24284},end:{line:4,column:24311}},line:4},"733":{name:"zn",decl:{start:{line:4,column:24323},end:{line:4,column:24325}},loc:{start:{line:4,column:24328},end:{line:4,column:24359}},line:4},"734":{name:"$h",decl:{start:{line:4,column:24368},end:{line:4,column:24370}},loc:{start:{line:4,column:24373},end:{line:4,column:24402}},line:4},"735":{name:"mu",decl:{start:{line:4,column:24411},end:{line:4,column:24413}},loc:{start:{line:4,column:24422},end:{line:4,column:24470}},line:4},"736":{name:"(anonymous_736)",decl:{start:{line:4,column:24522},end:{line:4,column:24523}},loc:{start:{line:4,column:24540},end:{line:4,column:24601}},line:4},"737":{name:"(anonymous_737)",decl:{start:{line:4,column:24601},end:{line:4,column:24602}},loc:{start:{line:4,column:24616},end:{line:4,column:24641}},line:4},"738":{name:"(anonymous_738)",decl:{start:{line:4,column:24647},end:{line:4,column:24648}},loc:{start:{line:4,column:24651},end:{line:4,column:24689}},line:4},"739":{name:"(anonymous_739)",decl:{start:{line:4,column:24658},end:{line:4,column:24659}},loc:{start:{line:4,column:24662},end:{line:4,column:24664}},line:4},"740":{name:"yu",decl:{start:{line:4,column:24702},end:{line:4,column:24704}},loc:{start:{line:4,column:24707},end:{line:4,column:24764}},line:4},"741":{name:"Wh",decl:{start:{line:4,column:24773},end:{line:4,column:24775}},loc:{start:{line:4,column:24777},end:{line:4,column:24918}},line:4},"742":{name:"qh",decl:{start:{line:4,column:24927},end:{line:4,column:24929}},loc:{start:{line:4,column:24940},end:{line:4,column:25112}},line:4},"743":{name:"Eu",decl:{start:{line:4,column:25150},end:{line:4,column:25152}},loc:{start:{line:4,column:25155},end:{line:4,column:25175}},line:4},"744":{name:"Gh",decl:{start:{line:4,column:25184},end:{line:4,column:25186}},loc:{start:{line:4,column:25191},end:{line:4,column:25207}},line:4},"745":{name:"(anonymous_745)",decl:{start:{line:4,column:25223},end:{line:4,column:25224}},loc:{start:{line:4,column:25243},end:{line:4,column:25295}},line:4},"746":{name:"(anonymous_746)",decl:{start:{line:4,column:25299},end:{line:4,column:25300}},loc:{start:{line:4,column:25310},end:{line:4,column:26602}},line:4},"747":{name:"zh",decl:{start:{line:4,column:26620},end:{line:4,column:26622}},loc:{start:{line:4,column:26629},end:{line:4,column:26892}},line:4},"748":{name:"Iu",decl:{start:{line:4,column:26901},end:{line:4,column:26903}},loc:{start:{line:4,column:26908},end:{line:4,column:27348}},line:4},"749":{name:"mo",decl:{start:{line:4,column:27357},end:{line:4,column:27359}},loc:{start:{line:4,column:27366},end:{line:4,column:27379}},line:4},"750":{name:"yo",decl:{start:{line:4,column:27388},end:{line:4,column:27390}},loc:{start:{line:4,column:27399},end:{line:4,column:27426}},line:4},"751":{name:"As",decl:{start:{line:4,column:27435},end:{line:4,column:27437}},loc:{start:{line:4,column:27442},end:{line:4,column:27488}},line:4},"752":{name:"Du",decl:{start:{line:4,column:27497},end:{line:4,column:27499}},loc:{start:{line:4,column:27508},end:{line:4,column:27732}},line:4},"753":{name:"Ul",decl:{start:{line:4,column:27741},end:{line:4,column:27743}},loc:{start:{line:4,column:27748},end:{line:4,column:27845}},line:4},"754":{name:"Qh",decl:{start:{line:4,column:27854},end:{line:4,column:27856}},loc:{start:{line:4,column:27865},end:{line:4,column:27976}},line:4},"755":{name:"(anonymous_755)",decl:{start:{line:4,column:28099},end:{line:4,column:28100}},loc:{start:{line:4,column:28119},end:{line:4,column:28192}},line:4},"756":{name:"Zh",decl:{start:{line:4,column:28203},end:{line:4,column:28205}},loc:{start:{line:4,column:28208},end:{line:4,column:28231}},line:4},"757":{name:"Yh",decl:{start:{line:4,column:28240},end:{line:4,column:28242}},loc:{start:{line:4,column:28245},end:{line:4,column:28269}},line:4},"758":{name:"Kh",decl:{start:{line:4,column:28278},end:{line:4,column:28280}},loc:{start:{line:4,column:28287},end:{line:4,column:28507}},line:4},"759":{name:"Cu",decl:{start:{line:4,column:28516},end:{line:4,column:28518}},loc:{start:{line:4,column:28521},end:{line:4,column:28549}},line:4},"760":{name:"Jh",decl:{start:{line:4,column:28558},end:{line:4,column:28560}},loc:{start:{line:4,column:28563},end:{line:4,column:28592}},line:4},"761":{name:"Jt",decl:{start:{line:4,column:28601},end:{line:4,column:28603}},loc:{start:{line:4,column:28608},end:{line:4,column:28827}},line:4},"762":{name:"Wl",decl:{start:{line:4,column:28836},end:{line:4,column:28838}},loc:{start:{line:4,column:28849},end:{line:4,column:29182}},line:4},"763":{name:"wu",decl:{start:{line:4,column:29191},end:{line:4,column:29193}},loc:{start:{line:4,column:29196},end:{line:4,column:29211}},line:4},"764":{name:"Co",decl:{start:{line:4,column:29220},end:{line:4,column:29222}},loc:{start:{line:4,column:29225},end:{line:4,column:29241}},line:4},"765":{name:"Xh",decl:{start:{line:4,column:29250},end:{line:4,column:29252}},loc:{start:{line:4,column:29255},end:{line:4,column:29269}},line:4},"766":{name:"wo",decl:{start:{line:4,column:29278},end:{line:4,column:29280}},loc:{start:{line:4,column:29285},end:{line:4,column:29333}},line:4},"767":{name:"To",decl:{start:{line:4,column:29352},end:{line:4,column:29354}},loc:{start:{line:4,column:29357},end:{line:4,column:29381}},line:4},"768":{name:"ng",decl:{start:{line:4,column:29425},end:{line:4,column:29427}},loc:{start:{line:4,column:29434},end:{line:4,column:29576}},line:4},"769":{name:"bo",decl:{start:{line:4,column:29585},end:{line:4,column:29587}},loc:{start:{line:4,column:29592},end:{line:4,column:29863}},line:4},"770":{name:"Rs",decl:{start:{line:4,column:29872},end:{line:4,column:29874}},loc:{start:{line:4,column:29879},end:{line:4,column:29906}},line:4},"771":{name:"_u",decl:{start:{line:4,column:29915},end:{line:4,column:29917}},loc:{start:{line:4,column:29922},end:{line:4,column:30051}},line:4},"772":{name:"ya",decl:{start:{line:4,column:30060},end:{line:4,column:30062}},loc:{start:{line:4,column:30067},end:{line:4,column:30279}},line:4},"773":{name:"Us",decl:{start:{line:4,column:30288},end:{line:4,column:30290}},loc:{start:{line:4,column:30297},end:{line:4,column:30308}},line:4},"774":{name:"rg",decl:{start:{line:4,column:30317},end:{line:4,column:30319}},loc:{start:{line:4,column:30324},end:{line:4,column:30594}},line:4},"775":{name:"Mu",decl:{start:{line:4,column:30603},end:{line:4,column:30605}},loc:{start:{line:4,column:30612},end:{line:4,column:30662}},line:4},"776":{name:"Nu",decl:{start:{line:4,column:30671},end:{line:4,column:30673}},loc:{start:{line:4,column:30682},end:{line:4,column:30818}},line:4},"777":{name:"Su",decl:{start:{line:4,column:30827},end:{line:4,column:30829}},loc:{start:{line:4,column:30842},end:{line:4,column:30977}},line:4},"778":{name:"xu",decl:{start:{line:4,column:30986},end:{line:4,column:30988}},loc:{start:{line:4,column:30999},end:{line:4,column:31494}},line:4},"779":{name:"og",decl:{start:{line:4,column:31503},end:{line:4,column:31505}},loc:{start:{line:4,column:31518},end:{line:4,column:31647}},line:4},"780":{name:"vo",decl:{start:{line:4,column:31656},end:{line:4,column:31658}},loc:{start:{line:4,column:31669},end:{line:4,column:31914}},line:4},"781":{name:"jn",decl:{start:{line:4,column:31923},end:{line:4,column:31925}},loc:{start:{line:4,column:31936},end:{line:4,column:32281}},line:4},"782":{name:"ig",decl:{start:{line:4,column:32290},end:{line:4,column:32292}},loc:{start:{line:4,column:32295},end:{line:4,column:32425}},line:4},"783":{name:"ql",decl:{start:{line:4,column:32434},end:{line:4,column:32436}},loc:{start:{line:4,column:32443},end:{line:4,column:32480}},line:4},"784":{name:"Gl",decl:{start:{line:4,column:32489},end:{line:4,column:32491}},loc:{start:{line:4,column:32496},end:{line:4,column:32521}},line:4},"785":{name:"(anonymous_785)",decl:{start:{line:4,column:32548},end:{line:4,column:32549}},loc:{start:{line:4,column:32564},end:{line:4,column:32593}},line:4},"786":{name:"(anonymous_786)",decl:{start:{line:4,column:32593},end:{line:4,column:32594}},loc:{start:{line:4,column:32603},end:{line:4,column:32649}},line:4},"787":{name:"sg",decl:{start:{line:4,column:32660},end:{line:4,column:32662}},loc:{start:{line:4,column:32664},end:{line:4,column:32688}},line:4},"788":{name:"ag",decl:{start:{line:4,column:32697},end:{line:4,column:32699}},loc:{start:{line:4,column:32702},end:{line:4,column:32932}},line:4},"789":{name:"(anonymous_789)",decl:{start:{line:4,column:32713},end:{line:4,column:32714}},loc:{start:{line:4,column:32717},end:{line:4,column:32930}},line:4},"790":{name:"(anonymous_790)",decl:{start:{line:4,column:32921},end:{line:4,column:32922}},loc:{start:{line:4,column:32924},end:{line:4,column:32929}},line:4},"791":{name:"Ws",decl:{start:{line:4,column:32941},end:{line:4,column:32943}},loc:{start:{line:4,column:32946},end:{line:4,column:33001}},line:4},"792":{name:"(anonymous_792)",decl:{start:{line:4,column:32960},end:{line:4,column:32961}},loc:{start:{line:4,column:32964},end:{line:4,column:32994}},line:4},"793":{name:"cg",decl:{start:{line:4,column:33010},end:{line:4,column:33012}},loc:{start:{line:4,column:33023},end:{line:4,column:33234}},line:4},"794":{name:"Au",decl:{start:{line:4,column:33243},end:{line:4,column:33245}},loc:{start:{line:4,column:33248},end:{line:4,column:33310}},line:4},"795":{name:"Ru",decl:{start:{line:4,column:33319},end:{line:4,column:33321}},loc:{start:{line:4,column:33324},end:{line:4,column:33342}},line:4},"796":{name:"lg",decl:{start:{line:4,column:33351},end:{line:4,column:33353}},loc:{start:{line:4,column:33355},end:{line:4,column:33375}},line:4},"797":{name:"rn",decl:{start:{line:4,column:33384},end:{line:4,column:33386}},loc:{start:{line:4,column:33391},end:{line:4,column:33415}},line:4},"798":{name:"(anonymous_798)",decl:{start:{line:4,column:33423},end:{line:4,column:33424}},loc:{start:{line:4,column:33427},end:{line:4,column:33523}},line:4},"799":{name:"(anonymous_799)",decl:{start:{line:4,column:33450},end:{line:4,column:33451}},loc:{start:{line:4,column:33464},end:{line:4,column:33486}},line:4},"800":{name:"ug",decl:{start:{line:4,column:33536},end:{line:4,column:33538}},loc:{start:{line:4,column:33541},end:{line:4,column:33583}},line:4},"801":{name:"dg",decl:{start:{line:4,column:33592},end:{line:4,column:33594}},loc:{start:{line:4,column:33596},end:{line:4,column:33637}},line:4},"802":{name:"(anonymous_802)",decl:{start:{line:4,column:33782},end:{line:4,column:33783}},loc:{start:{line:4,column:33795},end:{line:4,column:33826}},line:4},"803":{name:"(anonymous_803)",decl:{start:{line:4,column:33826},end:{line:4,column:33827}},loc:{start:{line:4,column:33843},end:{line:4,column:33876}},line:4},"804":{name:"(anonymous_804)",decl:{start:{line:4,column:33876},end:{line:4,column:33877}},loc:{start:{line:4,column:33882},end:{line:4,column:33907}},line:4},"805":{name:"(anonymous_805)",decl:{start:{line:4,column:33907},end:{line:4,column:33908}},loc:{start:{line:4,column:33913},end:{line:4,column:33942}},line:4},"806":{name:"(anonymous_806)",decl:{start:{line:4,column:33942},end:{line:4,column:33943}},loc:{start:{line:4,column:33951},end:{line:4,column:33983}},line:4},"807":{name:"(anonymous_807)",decl:{start:{line:4,column:33983},end:{line:4,column:33984}},loc:{start:{line:4,column:33990},end:{line:4,column:34020}},line:4},"808":{name:"(anonymous_808)",decl:{start:{line:4,column:34020},end:{line:4,column:34021}},loc:{start:{line:4,column:34031},end:{line:4,column:34065}},line:4},"809":{name:"(anonymous_809)",decl:{start:{line:4,column:34065},end:{line:4,column:34066}},loc:{start:{line:4,column:34075},end:{line:4,column:34101}},line:4},"810":{name:"(anonymous_810)",decl:{start:{line:4,column:34101},end:{line:4,column:34102}},loc:{start:{line:4,column:34108},end:{line:4,column:34138}},line:4},"811":{name:"(anonymous_811)",decl:{start:{line:4,column:34138},end:{line:4,column:34139}},loc:{start:{line:4,column:34147},end:{line:4,column:34177}},line:4},"812":{name:"(anonymous_812)",decl:{start:{line:4,column:34177},end:{line:4,column:34178}},loc:{start:{line:4,column:34187},end:{line:4,column:34220}},line:4},"813":{name:"(anonymous_813)",decl:{start:{line:4,column:34220},end:{line:4,column:34221}},loc:{start:{line:4,column:34230},end:{line:4,column:34387}},line:4},"814":{name:"(anonymous_814)",decl:{start:{line:4,column:34387},end:{line:4,column:34388}},loc:{start:{line:4,column:34404},end:{line:4,column:34511}},line:4},"815":{name:"(anonymous_815)",decl:{start:{line:4,column:34511},end:{line:4,column:34512}},loc:{start:{line:4,column:34521},end:{line:4,column:34538}},line:4},"816":{name:"(anonymous_816)",decl:{start:{line:4,column:34538},end:{line:4,column:34539}},loc:{start:{line:4,column:34548},end:{line:4,column:34581}},line:4},"817":{name:"(anonymous_817)",decl:{start:{line:4,column:34581},end:{line:4,column:34582}},loc:{start:{line:4,column:34590},end:{line:4,column:34670}},line:4},"818":{name:"ku",decl:{start:{line:4,column:34701},end:{line:4,column:34703}},loc:{start:{line:4,column:34706},end:{line:4,column:34733}},line:4},"819":{name:"(anonymous_819)",decl:{start:{line:4,column:34741},end:{line:4,column:34742}},loc:{start:{line:4,column:34752},end:{line:4,column:34831}},line:4},"820":{name:"pg",decl:{start:{line:4,column:34866},end:{line:4,column:34868}},loc:{start:{line:4,column:34870},end:{line:4,column:34883}},line:4},"821":{name:"hg",decl:{start:{line:4,column:34892},end:{line:4,column:34894}},loc:{start:{line:4,column:34897},end:{line:4,column:34914}},line:4},"822":{name:"qs",decl:{start:{line:4,column:34923},end:{line:4,column:34925}},loc:{start:{line:4,column:34928},end:{line:4,column:34946}},line:4},"823":{name:"Xt",decl:{start:{line:4,column:34978},end:{line:4,column:34980}},loc:{start:{line:4,column:34985},end:{line:4,column:35020}},line:4},"824":{name:"Pu",decl:{start:{line:4,column:35029},end:{line:4,column:35031}},loc:{start:{line:4,column:35034},end:{line:4,column:35052}},line:4},"825":{name:"Lu",decl:{start:{line:4,column:35061},end:{line:4,column:35063}},loc:{start:{line:4,column:35066},end:{line:4,column:35084}},line:4},"826":{name:"Fu",decl:{start:{line:4,column:35093},end:{line:4,column:35095}},loc:{start:{line:4,column:35098},end:{line:4,column:35139}},line:4},"827":{name:"mg",decl:{start:{line:4,column:35155},end:{line:4,column:35157}},loc:{start:{line:4,column:35160},end:{line:4,column:35166}},line:4},"828":{name:"(anonymous_828)",decl:{start:{line:4,column:35191},end:{line:4,column:35192}},loc:{start:{line:4,column:35195},end:{line:4,column:35197}},line:4},"829":{name:"(anonymous_829)",decl:{start:{line:4,column:35268},end:{line:4,column:35269}},loc:{start:{line:4,column:35272},end:{line:4,column:35281}},line:4},"830":{name:"(anonymous_830)",decl:{start:{line:4,column:35309},end:{line:4,column:35310}},loc:{start:{line:4,column:35313},end:{line:4,column:35388}},line:4},"831":{name:"(anonymous_831)",decl:{start:{line:4,column:35445},end:{line:4,column:35446}},loc:{start:{line:4,column:35449},end:{line:4,column:35451}},line:4},"832":{name:"(anonymous_832)",decl:{start:{line:4,column:35478},end:{line:4,column:35479}},loc:{start:{line:4,column:35489},end:{line:4,column:35491}},line:4},"833":{name:"wg",decl:{start:{line:4,column:35501},end:{line:4,column:35503}},loc:{start:{line:4,column:35512},end:{line:4,column:35525}},line:4},"834":{name:"Uo",decl:{start:{line:4,column:35534},end:{line:4,column:35536}},loc:{start:{line:4,column:35539},end:{line:4,column:35564}},line:4},"835":{name:"(anonymous_835)",decl:{start:{line:4,column:35571},end:{line:4,column:35572}},loc:{start:{line:4,column:35575},end:{line:4,column:35579}},line:4},"836":{name:"Uu",decl:{start:{line:4,column:35589},end:{line:4,column:35591}},loc:{start:{line:4,column:35601},end:{line:4,column:35619}},line:4},"837":{name:"Wu",decl:{start:{line:4,column:35628},end:{line:4,column:35630}},loc:{start:{line:4,column:35635},end:{line:4,column:35816}},line:4},"838":{name:"Gs",decl:{start:{line:4,column:35825},end:{line:4,column:35827}},loc:{start:{line:4,column:35834},end:{line:4,column:35880}},line:4},"839":{name:"qu",decl:{start:{line:4,column:35889},end:{line:4,column:35891}},loc:{start:{line:4,column:35898},end:{line:4,column:36077}},line:4},"840":{name:"(anonymous_840)",decl:{start:{line:4,column:36085},end:{line:4,column:36086}},loc:{start:{line:4,column:36096},end:{line:4,column:36250}},line:4},"841":{name:"bg",decl:{start:{line:4,column:36276},end:{line:4,column:36278}},loc:{start:{line:4,column:36280},end:{line:4,column:36458}},line:4},"842":{name:"(anonymous_842)",decl:{start:{line:4,column:36395},end:{line:4,column:36396}},loc:{start:{line:4,column:36398},end:{line:4,column:36399}},line:4},"843":{name:"(anonymous_843)",decl:{start:{line:4,column:36413},end:{line:4,column:36414}},loc:{start:{line:4,column:36416},end:{line:4,column:36417}},line:4},"844":{name:"(anonymous_844)",decl:{start:{line:4,column:36434},end:{line:4,column:36435}},loc:{start:{line:4,column:36437},end:{line:4,column:36438}},line:4},"845":{name:"Ql",decl:{start:{line:4,column:36467},end:{line:4,column:36469}},loc:{start:{line:4,column:36472},end:{line:4,column:36508}},line:4},"846":{name:"(anonymous_846)",decl:{start:{line:4,column:36559},end:{line:4,column:36560}},loc:{start:{line:4,column:36573},end:{line:4,column:36619}},line:4},"847":{name:"(anonymous_847)",decl:{start:{line:4,column:36619},end:{line:4,column:36620}},loc:{start:{line:4,column:36629},end:{line:4,column:36735}},line:4},"848":{name:"Zn",decl:{start:{line:4,column:36746},end:{line:4,column:36748}},loc:{start:{line:4,column:36751},end:{line:4,column:36817}},line:4},"849":{name:"Ea",decl:{start:{line:4,column:36826},end:{line:4,column:36828}},loc:{start:{line:4,column:36833},end:{line:4,column:36983}},line:4},"850":{name:"Gu",decl:{start:{line:4,column:36992},end:{line:4,column:36994}},loc:{start:{line:4,column:36997},end:{line:4,column:37044}},line:4},"851":{name:"zu",decl:{start:{line:4,column:37120},end:{line:4,column:37122}},loc:{start:{line:4,column:37125},end:{line:4,column:37171}},line:4},"852":{name:"Mg",decl:{start:{line:4,column:37180},end:{line:4,column:37182}},loc:{start:{line:4,column:37187},end:{line:4,column:37211}},line:4},"853":{name:"Ng",decl:{start:{line:4,column:37220},end:{line:4,column:37222}},loc:{start:{line:4,column:37229},end:{line:4,column:37246}},line:4},"854":{name:"Qu",decl:{start:{line:4,column:37255},end:{line:4,column:37257}},loc:{start:{line:4,column:37264},end:{line:4,column:37293}},line:4},"855":{name:"No",decl:{start:{line:4,column:37302},end:{line:4,column:37304}},loc:{start:{line:4,column:37315},end:{line:4,column:37340}},line:4},"856":{name:"Zu",decl:{start:{line:4,column:37349},end:{line:4,column:37351}},loc:{start:{line:4,column:37358},end:{line:4,column:37378}},line:4},"857":{name:"Zl",decl:{start:{line:4,column:37387},end:{line:4,column:37389}},loc:{start:{line:4,column:37400},end:{line:4,column:37434}},line:4},"858":{name:"Yu",decl:{start:{line:4,column:37443},end:{line:4,column:37445}},loc:{start:{line:4,column:37454},end:{line:4,column:37481}},line:4},"859":{name:"Sg",decl:{start:{line:4,column:37490},end:{line:4,column:37492}},loc:{start:{line:4,column:37499},end:{line:4,column:37528}},line:4},"860":{name:"xg",decl:{start:{line:4,column:37537},end:{line:4,column:37539}},loc:{start:{line:4,column:37546},end:{line:4,column:37611}},line:4},"861":{name:"Ku",decl:{start:{line:4,column:37620},end:{line:4,column:37622}},loc:{start:{line:4,column:37629},end:{line:4,column:37730}},line:4},"862":{name:"(anonymous_862)",decl:{start:{line:4,column:37738},end:{line:4,column:37739}},loc:{start:{line:4,column:37749},end:{line:4,column:37893}},line:4},"863":{name:"Ju",decl:{start:{line:4,column:37912},end:{line:4,column:37914}},loc:{start:{line:4,column:37917},end:{line:4,column:37991}},line:4},"864":{name:"Xu",decl:{start:{line:4,column:38000},end:{line:4,column:38002}},loc:{start:{line:4,column:38005},end:{line:4,column:38127}},line:4},"865":{name:"kg",decl:{start:{line:4,column:38233},end:{line:4,column:38235}},loc:{start:{line:4,column:38240},end:{line:4,column:38330}},line:4},"866":{name:"Og",decl:{start:{line:4,column:38339},end:{line:4,column:38341}},loc:{start:{line:4,column:38348},end:{line:4,column:38367}},line:4},"867":{name:"ed",decl:{start:{line:4,column:38376},end:{line:4,column:38378}},loc:{start:{line:4,column:38380},end:{line:4,column:38417}},line:4},"868":{name:"td",decl:{start:{line:4,column:38426},end:{line:4,column:38428}},loc:{start:{line:4,column:38431},end:{line:4,column:38467}},line:4},"869":{name:"Pg",decl:{start:{line:4,column:38476},end:{line:4,column:38478}},loc:{start:{line:4,column:38485},end:{line:4,column:38647}},line:4},"870":{name:"Lg",decl:{start:{line:4,column:38677},end:{line:4,column:38679}},loc:{start:{line:4,column:38688},end:{line:4,column:38950}},line:4},"871":{name:"Ia",decl:{start:{line:4,column:38959},end:{line:4,column:38961}},loc:{start:{line:4,column:38964},end:{line:4,column:38997}},line:4},"872":{name:"Fg",decl:{start:{line:4,column:39006},end:{line:4,column:39008}},loc:{start:{line:4,column:39015},end:{line:4,column:39061}},line:4},"873":{name:"jg",decl:{start:{line:4,column:39070},end:{line:4,column:39072}},loc:{start:{line:4,column:39079},end:{line:4,column:39598}},line:4},"874":{name:"pe",decl:{start:{line:4,column:39607},end:{line:4,column:39609}},loc:{start:{line:4,column:39612},end:{line:4,column:39629}},line:4},"875":{name:"Vg",decl:{start:{line:4,column:39638},end:{line:4,column:39640}},loc:{start:{line:4,column:39649},end:{line:4,column:39927}},line:4},"876":{name:"rd",decl:{start:{line:4,column:39936},end:{line:4,column:39938}},loc:{start:{line:4,column:39948},end:{line:4,column:40010}},line:4},"877":{name:"Hg",decl:{start:{line:4,column:40019},end:{line:4,column:40021}},loc:{start:{line:4,column:40024},end:{line:4,column:40109}},line:4},"878":{name:"Bg",decl:{start:{line:4,column:40118},end:{line:4,column:40120}},loc:{start:{line:4,column:40123},end:{line:4,column:40197}},line:4},"879":{name:"$g",decl:{start:{line:4,column:40206},end:{line:4,column:40208}},loc:{start:{line:4,column:40213},end:{line:4,column:40335}},line:4},"880":{name:"Ug",decl:{start:{line:4,column:40344},end:{line:4,column:40346}},loc:{start:{line:4,column:40351},end:{line:4,column:40489}},line:4},"881":{name:"Yl",decl:{start:{line:4,column:40498},end:{line:4,column:40500}},loc:{start:{line:4,column:40505},end:{line:4,column:40538}},line:4},"882":{name:"Wg",decl:{start:{line:4,column:40547},end:{line:4,column:40549}},loc:{start:{line:4,column:40552},end:{line:4,column:40817}},line:4},"883":{name:"qg",decl:{start:{line:4,column:40826},end:{line:4,column:40828}},loc:{start:{line:4,column:40831},end:{line:4,column:40859}},line:4},"884":{name:"Gg",decl:{start:{line:4,column:40868},end:{line:4,column:40870}},loc:{start:{line:4,column:40873},end:{line:4,column:41058}},line:4},"885":{name:"Da",decl:{start:{line:4,column:41076},end:{line:4,column:41078}},loc:{start:{line:4,column:41101},end:{line:4,column:41750}},line:4},"886":{name:"zg",decl:{start:{line:4,column:41759},end:{line:4,column:41761}},loc:{start:{line:4,column:41766},end:{line:4,column:41824}},line:4},"887":{name:"Qg",decl:{start:{line:4,column:41833},end:{line:4,column:41835}},loc:{start:{line:4,column:41838},end:{line:4,column:42002}},line:4},"888":{name:"Ca",decl:{start:{line:4,column:42011},end:{line:4,column:42013}},loc:{start:{line:4,column:42036},end:{line:4,column:42282}},line:4},"889":{name:"Zg",decl:{start:{line:4,column:42291},end:{line:4,column:42293}},loc:{start:{line:4,column:42300},end:{line:4,column:42440}},line:4},"890":{name:"od",decl:{start:{line:4,column:42449},end:{line:4,column:42451}},loc:{start:{line:4,column:42454},end:{line:4,column:42507}},line:4},"891":{name:"id",decl:{start:{line:4,column:42516},end:{line:4,column:42518}},loc:{start:{line:4,column:42527},end:{line:4,column:42638}},line:4},"892":{name:"wa",decl:{start:{line:4,column:42647},end:{line:4,column:42649}},loc:{start:{line:4,column:42654},end:{line:4,column:42698}},line:4},"893":{name:"Yg",decl:{start:{line:4,column:42707},end:{line:4,column:42709}},loc:{start:{line:4,column:42714},end:{line:4,column:42737}},line:4},"894":{name:"sd",decl:{start:{line:4,column:42746},end:{line:4,column:42748}},loc:{start:{line:4,column:42757},end:{line:4,column:42883}},line:4},"895":{name:"(anonymous_895)",decl:{start:{line:4,column:42891},end:{line:4,column:42892}},loc:{start:{line:4,column:42902},end:{line:4,column:43027}},line:4},"896":{name:"zs",decl:{start:{line:4,column:43046},end:{line:4,column:43048}},loc:{start:{line:4,column:43057},end:{line:4,column:43286}},line:4},"897":{name:"(anonymous_897)",decl:{start:{line:4,column:43294},end:{line:4,column:43295}},loc:{start:{line:4,column:43305},end:{line:4,column:43371}},line:4},"898":{name:"Ta",decl:{start:{line:4,column:43393},end:{line:4,column:43395}},loc:{start:{line:4,column:43400},end:{line:4,column:43416}},line:4},"899":{name:"Jg",decl:{start:{line:4,column:43547},end:{line:4,column:43549}},loc:{start:{line:4,column:43554},end:{line:4,column:43937}},line:4},"900":{name:"Xg",decl:{start:{line:4,column:43946},end:{line:4,column:43948}},loc:{start:{line:4,column:43953},end:{line:4,column:44011}},line:4},"901":{name:"(anonymous_901)",decl:{start:{line:4,column:44030},end:{line:4,column:44031}},loc:{start:{line:4,column:44041},end:{line:4,column:44139}},line:4},"902":{name:"At",decl:{start:{line:4,column:44182},end:{line:4,column:44184}},loc:{start:{line:4,column:44187},end:{line:4,column:44274}},line:4},"903":{name:"(anonymous_903)",decl:{start:{line:4,column:44282},end:{line:4,column:44283}},loc:{start:{line:4,column:44286},end:{line:4,column:44412}},line:4},"904":{name:"(anonymous_904)",decl:{start:{line:4,column:44305},end:{line:4,column:44306}},loc:{start:{line:4,column:44314},end:{line:4,column:44336}},line:4},"905":{name:"(anonymous_905)",decl:{start:{line:4,column:44391},end:{line:4,column:44392}},loc:{start:{line:4,column:44395},end:{line:4,column:44400}},line:4},"906":{name:"(anonymous_906)",decl:{start:{line:4,column:44433},end:{line:4,column:44434}},loc:{start:{line:4,column:44437},end:{line:4,column:45784}},line:4},"907":{name:"(anonymous_907)",decl:{start:{line:4,column:44569},end:{line:4,column:44570}},loc:{start:{line:4,column:44582},end:{line:4,column:44603}},line:4},"908":{name:"(anonymous_908)",decl:{start:{line:4,column:44603},end:{line:4,column:44604}},loc:{start:{line:4,column:44612},end:{line:4,column:45265}},line:4},"909":{name:"(anonymous_909)",decl:{start:{line:4,column:44824},end:{line:4,column:44825}},loc:{start:{line:4,column:44828},end:{line:4,column:44905}},line:4},"910":{name:"(anonymous_910)",decl:{start:{line:4,column:44844},end:{line:4,column:44845}},loc:{start:{line:4,column:44848},end:{line:4,column:44893}},line:4},"911":{name:"(anonymous_911)",decl:{start:{line:4,column:45265},end:{line:4,column:45266}},loc:{start:{line:4,column:45276},end:{line:4,column:45411}},line:4},"912":{name:"(anonymous_912)",decl:{start:{line:4,column:45411},end:{line:4,column:45412}},loc:{start:{line:4,column:45425},end:{line:4,column:45473}},line:4},"913":{name:"(anonymous_913)",decl:{start:{line:4,column:45473},end:{line:4,column:45474}},loc:{start:{line:4,column:45486},end:{line:4,column:45649}},line:4},"914":{name:"(anonymous_914)",decl:{start:{line:4,column:45649},end:{line:4,column:45650}},loc:{start:{line:4,column:45664},end:{line:4,column:45708}},line:4},"915":{name:"(anonymous_915)",decl:{start:{line:4,column:45763},end:{line:4,column:45764}},loc:{start:{line:4,column:45767},end:{line:4,column:45772}},line:4},"916":{name:"(anonymous_916)",decl:{start:{line:4,column:45891},end:{line:4,column:45892}},loc:{start:{line:4,column:45920},end:{line:4,column:46044}},line:4},"917":{name:"(anonymous_917)",decl:{start:{line:4,column:46024},end:{line:4,column:46025}},loc:{start:{line:4,column:46028},end:{line:4,column:46042}},line:4},"918":{name:"(anonymous_918)",decl:{start:{line:4,column:46044},end:{line:4,column:46045}},loc:{start:{line:4,column:46054},end:{line:4,column:46153}},line:4},"919":{name:"(anonymous_919)",decl:{start:{line:4,column:46153},end:{line:4,column:46154}},loc:{start:{line:4,column:46162},end:{line:4,column:46282}},line:4},"920":{name:"(anonymous_920)",decl:{start:{line:4,column:46268},end:{line:4,column:46269}},loc:{start:{line:4,column:46271},end:{line:4,column:46279}},line:4},"921":{name:"em",decl:{start:{line:4,column:46293},end:{line:4,column:46295}},loc:{start:{line:4,column:46300},end:{line:4,column:46370}},line:4},"922":{name:"tm",decl:{start:{line:4,column:46379},end:{line:4,column:46381}},loc:{start:{line:4,column:46384},end:{line:4,column:46485}},line:4},"923":{name:"nm",decl:{start:{line:4,column:46494},end:{line:4,column:46496}},loc:{start:{line:4,column:46505},end:{line:4,column:46727}},line:4},"924":{name:"(anonymous_924)",decl:{start:{line:4,column:46752},end:{line:4,column:46753}},loc:{start:{line:4,column:46757},end:{line:4,column:46817}},line:4},"925":{name:"ud",decl:{start:{line:4,column:46830},end:{line:4,column:46832}},loc:{start:{line:4,column:46839},end:{line:4,column:47030}},line:4},"926":{name:"rm",decl:{start:{line:4,column:47039},end:{line:4,column:47041}},loc:{start:{line:4,column:47046},end:{line:4,column:47190}},line:4},"927":{name:"om",decl:{start:{line:4,column:47199},end:{line:4,column:47201}},loc:{start:{line:4,column:47206},end:{line:4,column:47243}},line:4},"928":{name:"Jl",decl:{start:{line:4,column:47252},end:{line:4,column:47254}},loc:{start:{line:4,column:47263},end:{line:4,column:47322}},line:4},"929":{name:"Yt",decl:{start:{line:4,column:47331},end:{line:4,column:47333}},loc:{start:{line:4,column:47350},end:{line:4,column:47721}},line:4},"930":{name:"(anonymous_930)",decl:{start:{line:4,column:47600},end:{line:4,column:47601}},loc:{start:{line:4,column:47603},end:{line:4,column:47650}},line:4},"931":{name:"(anonymous_931)",decl:{start:{line:4,column:47669},end:{line:4,column:47670}},loc:{start:{line:4,column:47673},end:{line:4,column:47691}},line:4},"932":{name:"im",decl:{start:{line:4,column:47730},end:{line:4,column:47732}},loc:{start:{line:4,column:47737},end:{line:4,column:47767}},line:4},"933":{name:"sm",decl:{start:{line:4,column:47776},end:{line:4,column:47778}},loc:{start:{line:4,column:47791},end:{line:4,column:47823}},line:4},"934":{name:"dd",decl:{start:{line:4,column:47832},end:{line:4,column:47834}},loc:{start:{line:4,column:47839},end:{line:4,column:47907}},line:4},"935":{name:"am",decl:{start:{line:4,column:47916},end:{line:4,column:47918}},loc:{start:{line:4,column:47921},end:{line:4,column:48125}},line:4},"936":{name:"_a",decl:{start:{line:4,column:48134},end:{line:4,column:48136}},loc:{start:{line:4,column:48141},end:{line:4,column:48183}},line:4},"937":{name:"zo",decl:{start:{line:4,column:48192},end:{line:4,column:48194}},loc:{start:{line:4,column:48199},end:{line:4,column:48270}},line:4},"938":{name:"ks",decl:{start:{line:4,column:48279},end:{line:4,column:48281}},loc:{start:{line:4,column:48286},end:{line:4,column:48516}},line:4},"939":{name:"Xl",decl:{start:{line:4,column:48525},end:{line:4,column:48527}},loc:{start:{line:4,column:48536},end:{line:4,column:48909}},line:4},"940":{name:"(anonymous_940)",decl:{start:{line:4,column:48635},end:{line:4,column:48636}},loc:{start:{line:4,column:48639},end:{line:4,column:48905}},line:4},"941":{name:"cm",decl:{start:{line:4,column:48918},end:{line:4,column:48920}},loc:{start:{line:4,column:48925},end:{line:4,column:49024}},line:4},"942":{name:"(anonymous_942)",decl:{start:{line:4,column:48960},end:{line:4,column:48961}},loc:{start:{line:4,column:48964},end:{line:4,column:49009}},line:4},"943":{name:"lm",decl:{start:{line:4,column:49033},end:{line:4,column:49035}},loc:{start:{line:4,column:49040},end:{line:4,column:49384}},line:4},"944":{name:"um",decl:{start:{line:4,column:49393},end:{line:4,column:49395}},loc:{start:{line:4,column:49400},end:{line:4,column:49757}},line:4},"945":{name:"fd",decl:{start:{line:4,column:49766},end:{line:4,column:49768}},loc:{start:{line:4,column:49775},end:{line:4,column:49800}},line:4},"946":{name:"dm",decl:{start:{line:4,column:49809},end:{line:4,column:49811}},loc:{start:{line:4,column:49818},end:{line:4,column:50027}},line:4},"947":{name:"pd",decl:{start:{line:4,column:50036},end:{line:4,column:50038}},loc:{start:{line:4,column:50045},end:{line:4,column:50063}},line:4},"948":{name:"fm",decl:{start:{line:4,column:50072},end:{line:4,column:50074}},loc:{start:{line:4,column:50081},end:{line:4,column:50112}},line:4},"949":{name:"Ma",decl:{start:{line:4,column:50134},end:{line:4,column:50136}},loc:{start:{line:4,column:50145},end:{line:4,column:50321}},line:4},"950":{name:"Ln",decl:{start:{line:4,column:50330},end:{line:4,column:50332}},loc:{start:{line:4,column:50337},end:{line:4,column:50718}},line:4},"951":{name:"hd",decl:{start:{line:4,column:50727},end:{line:4,column:50729}},loc:{start:{line:4,column:50734},end:{line:4,column:50812}},line:4},"952":{name:"Ys",decl:{start:{line:4,column:50821},end:{line:4,column:50823}},loc:{start:{line:4,column:50828},end:{line:4,column:50925}},line:4},"953":{name:"Na",decl:{start:{line:4,column:50934},end:{line:4,column:50936}},loc:{start:{line:4,column:50951},end:{line:4,column:51297}},line:4},"954":{name:"Qo",decl:{start:{line:4,column:51306},end:{line:4,column:51308}},loc:{start:{line:4,column:51321},end:{line:4,column:51352}},line:4},"955":{name:"hm",decl:{start:{line:4,column:51361},end:{line:4,column:51363}},loc:{start:{line:4,column:51370},end:{line:4,column:51439}},line:4},"956":{name:"gd",decl:{start:{line:4,column:51448},end:{line:4,column:51450}},loc:{start:{line:4,column:51463},end:{line:4,column:51652}},line:4},"957":{name:"gm",decl:{start:{line:4,column:51661},end:{line:4,column:51663}},loc:{start:{line:4,column:51678},end:{line:4,column:51783}},line:4},"958":{name:"mm",decl:{start:{line:4,column:51792},end:{line:4,column:51794}},loc:{start:{line:4,column:51805},end:{line:4,column:52031}},line:4},"959":{name:"md",decl:{start:{line:4,column:52040},end:{line:4,column:52042}},loc:{start:{line:4,column:52053},end:{line:4,column:52250}},line:4},"960":{name:"Sa",decl:{start:{line:4,column:52259},end:{line:4,column:52261}},loc:{start:{line:4,column:52268},end:{line:4,column:52308}},line:4},"961":{name:"Zo",decl:{start:{line:4,column:52317},end:{line:4,column:52319}},loc:{start:{line:4,column:52329},end:{line:4,column:52452}},line:4},"962":{name:"ym",decl:{start:{line:4,column:52461},end:{line:4,column:52463}},loc:{start:{line:4,column:52472},end:{line:4,column:52590}},line:4},"963":{name:"vm",decl:{start:{line:4,column:52599},end:{line:4,column:52601}},loc:{start:{line:4,column:52604},end:{line:4,column:52611}},line:4},"964":{name:"(anonymous_964)",decl:{start:{line:4,column:52618},end:{line:4,column:52619}},loc:{start:{line:4,column:52622},end:{line:4,column:52626}},line:4},"965":{name:"Im",decl:{start:{line:4,column:52636},end:{line:4,column:52638}},loc:{start:{line:4,column:52641},end:{line:4,column:52805}},line:4},"966":{name:"Dm",decl:{start:{line:4,column:52814},end:{line:4,column:52816}},loc:{start:{line:4,column:52829},end:{line:4,column:52923}},line:4},"967":{name:"yd",decl:{start:{line:4,column:52932},end:{line:4,column:52934}},loc:{start:{line:4,column:52947},end:{line:4,column:53042}},line:4},"968":{name:"Cm",decl:{start:{line:4,column:53051},end:{line:4,column:53053}},loc:{start:{line:4,column:53058},end:{line:4,column:53093}},line:4},"969":{name:"wm",decl:{start:{line:4,column:53102},end:{line:4,column:53104}},loc:{start:{line:4,column:53111},end:{line:4,column:53380}},line:4},"970":{name:"Tm",decl:{start:{line:4,column:53389},end:{line:4,column:53391}},loc:{start:{line:4,column:53398},end:{line:4,column:53608}},line:4},"971":{name:"bm",decl:{start:{line:4,column:53617},end:{line:4,column:53619}},loc:{start:{line:4,column:53624},end:{line:4,column:53668}},line:4},"972":{name:"vd",decl:{start:{line:4,column:53677},end:{line:4,column:53679}},loc:{start:{line:4,column:53684},end:{line:4,column:53831}},line:4},"973":{name:"_m",decl:{start:{line:4,column:53840},end:{line:4,column:53842}},loc:{start:{line:4,column:53855},end:{line:4,column:53897}},line:4},"974":{name:"Mm",decl:{start:{line:4,column:53906},end:{line:4,column:53908}},loc:{start:{line:4,column:53923},end:{line:4,column:54023}},line:4},"975":{name:"Nm",decl:{start:{line:4,column:54032},end:{line:4,column:54034}},loc:{start:{line:4,column:54047},end:{line:4,column:54133}},line:4},"976":{name:"Ed",decl:{start:{line:4,column:54142},end:{line:4,column:54144}},loc:{start:{line:4,column:54155},end:{line:4,column:54319}},line:4},"977":{name:"Id",decl:{start:{line:4,column:54328},end:{line:4,column:54330}},loc:{start:{line:4,column:54333},end:{line:4,column:54383}},line:4},"978":{name:"Sm",decl:{start:{line:4,column:54392},end:{line:4,column:54394}},loc:{start:{line:4,column:54399},end:{line:4,column:54472}},line:4},"979":{name:"xa",decl:{start:{line:4,column:54481},end:{line:4,column:54483}},loc:{start:{line:4,column:54494},end:{line:4,column:54705}},line:4},"980":{name:"xm",decl:{start:{line:4,column:54714},end:{line:4,column:54716}},loc:{start:{line:4,column:54721},end:{line:4,column:54876}},line:4},"981":{name:"Am",decl:{start:{line:4,column:54885},end:{line:4,column:54887}},loc:{start:{line:4,column:54892},end:{line:4,column:54960}},line:4},"982":{name:"Aa",decl:{start:{line:4,column:54969},end:{line:4,column:54971}},loc:{start:{line:4,column:54978},end:{line:4,column:55356}},line:4},"983":{name:"Rm",decl:{start:{line:4,column:55365},end:{line:4,column:55367}},loc:{start:{line:4,column:55372},end:{line:4,column:55411}},line:4},"984":{name:"Yn",decl:{start:{line:4,column:55420},end:{line:4,column:55422}},loc:{start:{line:4,column:55431},end:{line:4,column:55695}},line:4},"985":{name:"en",decl:{start:{line:4,column:55704},end:{line:4,column:55706}},loc:{start:{line:4,column:55711},end:{line:4,column:55749}},line:4},"986":{name:"Hn",decl:{start:{line:4,column:55758},end:{line:4,column:55760}},loc:{start:{line:4,column:55774},end:{line:4,column:56128}},line:4},"987":{name:"Dd",decl:{start:{line:4,column:56137},end:{line:4,column:56139}},loc:{start:{line:4,column:56144},end:{line:4,column:56256}},line:4},"988":{name:"Cd",decl:{start:{line:4,column:56265},end:{line:4,column:56267}},loc:{start:{line:4,column:56270},end:{line:4,column:56345}},line:4},"989":{name:"km",decl:{start:{line:4,column:56364},end:{line:4,column:56366}},loc:{start:{line:4,column:56369},end:{line:4,column:56390}},line:4},"990":{name:"Om",decl:{start:{line:4,column:56399},end:{line:4,column:56401}},loc:{start:{line:4,column:56404},end:{line:4,column:56458}},line:4},"991":{name:"Pm",decl:{start:{line:4,column:56467},end:{line:4,column:56469}},loc:{start:{line:4,column:56472},end:{line:4,column:56516}},line:4},"992":{name:"(anonymous_992)",decl:{start:{line:4,column:56595},end:{line:4,column:56596}},loc:{start:{line:4,column:56598},end:{line:4,column:56611}},line:4},"993":{name:"(anonymous_993)",decl:{start:{line:4,column:56612},end:{line:4,column:56613}},loc:{start:{line:4,column:56634},end:{line:4,column:56655}},line:4},"994":{name:"Fm",decl:{start:{line:4,column:56667},end:{line:4,column:56669}},loc:{start:{line:4,column:56672},end:{line:4,column:56723}},line:4},"995":{name:"(anonymous_995)",decl:{start:{line:4,column:56802},end:{line:4,column:56803}},loc:{start:{line:4,column:56805},end:{line:4,column:56860}},line:4},"996":{name:"(anonymous_996)",decl:{start:{line:4,column:56861},end:{line:4,column:56862}},loc:{start:{line:4,column:56883},end:{line:4,column:56904}},line:4},"997":{name:"Td",decl:{start:{line:4,column:56916},end:{line:4,column:56918}},loc:{start:{line:4,column:56921},end:{line:4,column:56940}},line:4},"998":{name:"bd",decl:{start:{line:4,column:56949},end:{line:4,column:56951}},loc:{start:{line:4,column:56954},end:{line:4,column:57129}},line:4},"999":{name:"(anonymous_999)",decl:{start:{line:4,column:57095},end:{line:4,column:57096}},loc:{start:{line:4,column:57099},end:{line:4,column:57106}},line:4},"1000":{name:"_d",decl:{start:{line:4,column:57149},end:{line:4,column:57151}},loc:{start:{line:4,column:57158},end:{line:4,column:57241}},line:4},"1001":{name:"Hm",decl:{start:{line:4,column:57250},end:{line:4,column:57252}},loc:{start:{line:4,column:57257},end:{line:4,column:57367}},line:4},"1002":{name:"Bm",decl:{start:{line:4,column:57376},end:{line:4,column:57378}},loc:{start:{line:4,column:57387},end:{line:4,column:58280}},line:4},"1003":{name:"Md",decl:{start:{line:4,column:58289},end:{line:4,column:58291}},loc:{start:{line:4,column:58296},end:{line:4,column:58378}},line:4},"1004":{name:"$m",decl:{start:{line:4,column:58387},end:{line:4,column:58389}},loc:{start:{line:4,column:58392},end:{line:4,column:58508}},line:4},"1005":{name:"Um",decl:{start:{line:4,column:58517},end:{line:4,column:58519}},loc:{start:{line:4,column:58526},end:{line:4,column:58605}},line:4},"1006":{name:"Nd",decl:{start:{line:4,column:58614},end:{line:4,column:58616}},loc:{start:{line:4,column:58621},end:{line:4,column:58637}},line:4},"1007":{name:"Ks",decl:{start:{line:4,column:58646},end:{line:4,column:58648}},loc:{start:{line:4,column:58653},end:{line:4,column:58929}},line:4},"1008":{name:"Sd",decl:{start:{line:4,column:58938},end:{line:4,column:58940}},loc:{start:{line:4,column:58947},end:{line:4,column:58988}},line:4},"1009":{name:"Wm",decl:{start:{line:4,column:58997},end:{line:4,column:58999}},loc:{start:{line:4,column:59004},end:{line:4,column:59249}},line:4},"1010":{name:"Ra",decl:{start:{line:4,column:59258},end:{line:4,column:59260}},loc:{start:{line:4,column:59265},end:{line:4,column:59393}},line:4},"1011":{name:"xd",decl:{start:{line:4,column:59402},end:{line:4,column:59404}},loc:{start:{line:4,column:59413},end:{line:4,column:59455}},line:4},"1012":{name:"Ad",decl:{start:{line:4,column:59464},end:{line:4,column:59466}},loc:{start:{line:4,column:59471},end:{line:4,column:59508}},line:4},"1013":{name:"Kn",decl:{start:{line:4,column:59517},end:{line:4,column:59519}},loc:{start:{line:4,column:59531},end:{line:4,column:59696}},line:4},"1014":{name:"Rd",decl:{start:{line:4,column:59705},end:{line:4,column:59707}},loc:{start:{line:4,column:59712},end:{line:4,column:59759}},line:4},"1015":{name:"Bn",decl:{start:{line:4,column:59768},end:{line:4,column:59770}},loc:{start:{line:4,column:59775},end:{line:4,column:59991}},line:4},"1016":{name:"qm",decl:{start:{line:4,column:60000},end:{line:4,column:60002}},loc:{start:{line:4,column:60011},end:{line:4,column:60205}},line:4},"1017":{name:"kd",decl:{start:{line:4,column:60214},end:{line:4,column:60216}},loc:{start:{line:4,column:60221},end:{line:4,column:60326}},line:4},"1018":{name:"(anonymous_1018)",decl:{start:{line:4,column:60418},end:{line:4,column:60419}},loc:{start:{line:4,column:60433},end:{line:4,column:60490}},line:4},"1019":{name:"(anonymous_1019)",decl:{start:{line:4,column:60490},end:{line:4,column:60491}},loc:{start:{line:4,column:60506},end:{line:4,column:60548}},line:4},"1020":{name:"(anonymous_1020)",decl:{start:{line:4,column:60548},end:{line:4,column:60549}},loc:{start:{line:4,column:60561},end:{line:4,column:60584}},line:4},"1021":{name:"(anonymous_1021)",decl:{start:{line:4,column:60584},end:{line:4,column:60585}},loc:{start:{line:4,column:60598},end:{line:4,column:60616}},line:4},"1022":{name:"(anonymous_1022)",decl:{start:{line:4,column:60616},end:{line:4,column:60617}},loc:{start:{line:4,column:60631},end:{line:4,column:60655}},line:4},"1023":{name:"(anonymous_1023)",decl:{start:{line:4,column:60655},end:{line:4,column:60656}},loc:{start:{line:4,column:60664},end:{line:4,column:60904}},line:4},"1024":{name:"(anonymous_1024)",decl:{start:{line:4,column:60904},end:{line:4,column:60905}},loc:{start:{line:4,column:60916},end:{line:4,column:60935}},line:4},"1025":{name:"(anonymous_1025)",decl:{start:{line:4,column:60935},end:{line:4,column:60936}},loc:{start:{line:4,column:60949},end:{line:4,column:60994}},line:4},"1026":{name:"(anonymous_1026)",decl:{start:{line:4,column:60994},end:{line:4,column:60995}},loc:{start:{line:4,column:61002},end:{line:4,column:61024}},line:4},"1027":{name:"(anonymous_1027)",decl:{start:{line:4,column:61024},end:{line:4,column:61025}},loc:{start:{line:4,column:61034},end:{line:4,column:61071}},line:4},"1028":{name:"(anonymous_1028)",decl:{start:{line:4,column:61071},end:{line:4,column:61072}},loc:{start:{line:4,column:61086},end:{line:4,column:61124}},line:4},"1029":{name:"(anonymous_1029)",decl:{start:{line:4,column:61124},end:{line:4,column:61125}},loc:{start:{line:4,column:61140},end:{line:4,column:61142}},line:4},"1030":{name:"(anonymous_1030)",decl:{start:{line:4,column:61142},end:{line:4,column:61143}},loc:{start:{line:4,column:61168},end:{line:4,column:61238}},line:4},"1031":{name:"(anonymous_1031)",decl:{start:{line:4,column:61238},end:{line:4,column:61239}},loc:{start:{line:4,column:61256},end:{line:4,column:61378}},line:4},"1032":{name:"(anonymous_1032)",decl:{start:{line:4,column:61378},end:{line:4,column:61379}},loc:{start:{line:4,column:61395},end:{line:4,column:61552}},line:4},"1033":{name:"(anonymous_1033)",decl:{start:{line:4,column:61562},end:{line:4,column:61563}},loc:{start:{line:4,column:61566},end:{line:4,column:62039}},line:4},"1034":{name:"(anonymous_1034)",decl:{start:{line:4,column:61655},end:{line:4,column:61656}},loc:{start:{line:4,column:61673},end:{line:4,column:61747}},line:4},"1035":{name:"(anonymous_1035)",decl:{start:{line:4,column:61747},end:{line:4,column:61748}},loc:{start:{line:4,column:61758},end:{line:4,column:61813}},line:4},"1036":{name:"(anonymous_1036)",decl:{start:{line:4,column:61813},end:{line:4,column:61814}},loc:{start:{line:4,column:61836},end:{line:4,column:61877}},line:4},"1037":{name:"(anonymous_1037)",decl:{start:{line:4,column:61877},end:{line:4,column:61878}},loc:{start:{line:4,column:61906},end:{line:4,column:62029}},line:4},"1038":{name:"Gm",decl:{start:{line:4,column:62052},end:{line:4,column:62054}},loc:{start:{line:4,column:62056},end:{line:4,column:62076}},line:4},"1039":{name:"Yo",decl:{start:{line:4,column:62085},end:{line:4,column:62087}},loc:{start:{line:4,column:62092},end:{line:4,column:62134}},line:4},"1040":{name:"sn",decl:{start:{line:4,column:62143},end:{line:4,column:62145}},loc:{start:{line:4,column:62156},end:{line:4,column:62342}},line:4},"1041":{name:"zm",decl:{start:{line:4,column:62351},end:{line:4,column:62353}},loc:{start:{line:4,column:62364},end:{line:4,column:62450}},line:4},"1042":{name:"Qm",decl:{start:{line:4,column:62459},end:{line:4,column:62461}},loc:{start:{line:4,column:62470},end:{line:4,column:62602}},line:4},"1043":{name:"Zm",decl:{start:{line:4,column:62611},end:{line:4,column:62613}},loc:{start:{line:4,column:62626},end:{line:4,column:63310}},line:4},"1044":{name:"Ym",decl:{start:{line:4,column:63319},end:{line:4,column:63321}},loc:{start:{line:4,column:63324},end:{line:4,column:63417}},line:4},"1045":{name:"Km",decl:{start:{line:4,column:63426},end:{line:4,column:63428}},loc:{start:{line:4,column:63433},end:{line:4,column:63532}},line:4},"1046":{name:"(anonymous_1046)",decl:{start:{line:4,column:63539},end:{line:4,column:63540}},loc:{start:{line:4,column:63543},end:{line:4,column:63547}},line:4},"1047":{name:"(anonymous_1047)",decl:{start:{line:4,column:63551},end:{line:4,column:63552}},loc:{start:{line:4,column:63555},end:{line:4,column:63559}},line:4},"1048":{name:"Ao",decl:{start:{line:4,column:63569},end:{line:4,column:63571}},loc:{start:{line:4,column:63576},end:{line:4,column:63592}},line:4},"1049":{name:"Od",decl:{start:{line:4,column:63601},end:{line:4,column:63603}},loc:{start:{line:4,column:63610},end:{line:4,column:63628}},line:4},"1050":{name:"(anonymous_1050)",decl:{start:{line:4,column:63663},end:{line:4,column:63664}},loc:{start:{line:4,column:63689},end:{line:4,column:63710}},line:4},"1051":{name:"(anonymous_1051)",decl:{start:{line:4,column:63756},end:{line:4,column:63757}},loc:{start:{line:4,column:63760},end:{line:4,column:63829}},line:4},"1052":{name:"(anonymous_1052)",decl:{start:{line:4,column:63811},end:{line:4,column:63812}},loc:{start:{line:4,column:63815},end:{line:4,column:63819}},line:4},"1053":{name:"ty",decl:{start:{line:4,column:63842},end:{line:4,column:63844}},loc:{start:{line:4,column:63846},end:{line:4,column:63900}},line:4},"1054":{name:"(anonymous_1054)",decl:{start:{line:4,column:63908},end:{line:4,column:63909}},loc:{start:{line:4,column:63912},end:{line:4,column:63996}},line:4},"1055":{name:"(anonymous_1055)",decl:{start:{line:4,column:63976},end:{line:4,column:63977}},loc:{start:{line:4,column:63980},end:{line:4,column:63984}},line:4},"1056":{name:"(anonymous_1056)",decl:{start:{line:4,column:64043},end:{line:4,column:64044}},loc:{start:{line:4,column:64059},end:{line:4,column:64098}},line:4},"1057":{name:"(anonymous_1057)",decl:{start:{line:4,column:64098},end:{line:4,column:64099}},loc:{start:{line:4,column:64108},end:{line:4,column:64196}},line:4},"1058":{name:"Ro",decl:{start:{line:4,column:64207},end:{line:4,column:64209}},loc:{start:{line:4,column:64216},end:{line:4,column:64487}},line:4},"1059":{name:"Xn",decl:{start:{line:4,column:64496},end:{line:4,column:64498}},loc:{start:{line:4,column:64505},end:{line:4,column:64575}},line:4},"1060":{name:"ny",decl:{start:{line:4,column:64584},end:{line:4,column:64586}},loc:{start:{line:4,column:64588},end:{line:4,column:64624}},line:4},"1061":{name:"Fd",decl:{start:{line:4,column:64633},end:{line:4,column:64635}},loc:{start:{line:4,column:64646},end:{line:4,column:64858}},line:4},"1062":{name:"ry",decl:{start:{line:4,column:64867},end:{line:4,column:64869}},loc:{start:{line:4,column:64876},end:{line:4,column:64992}},line:4},"1063":{name:"oy",decl:{start:{line:4,column:65001},end:{line:4,column:65003}},loc:{start:{line:4,column:65010},end:{line:4,column:65065}},line:4},"1064":{name:"iy",decl:{start:{line:4,column:65074},end:{line:4,column:65076}},loc:{start:{line:4,column:65091},end:{line:4,column:66013}},line:4},"1065":{name:"sy",decl:{start:{line:4,column:66022},end:{line:4,column:66024}},loc:{start:{line:4,column:66031},end:{line:4,column:66212}},line:4},"1066":{name:"tu",decl:{start:{line:4,column:66221},end:{line:4,column:66223}},loc:{start:{line:4,column:66232},end:{line:4,column:66380}},line:4},"1067":{name:"nu",decl:{start:{line:4,column:66389},end:{line:4,column:66391}},loc:{start:{line:4,column:66400},end:{line:4,column:66583}},line:4},"1068":{name:"jd",decl:{start:{line:4,column:66592},end:{line:4,column:66594}},loc:{start:{line:4,column:66599},end:{line:4,column:66650}},line:4},"1069":{name:"ru",decl:{start:{line:4,column:66659},end:{line:4,column:66661}},loc:{start:{line:4,column:66668},end:{line:4,column:67212}},line:4},"1070":{name:"ay",decl:{start:{line:4,column:67221},end:{line:4,column:67223}},loc:{start:{line:4,column:67234},end:{line:4,column:67373}},line:4},"1071":{name:"cy",decl:{start:{line:4,column:67382},end:{line:4,column:67384}},loc:{start:{line:4,column:67395},end:{line:4,column:67538}},line:4},"1072":{name:"ly",decl:{start:{line:4,column:67547},end:{line:4,column:67549}},loc:{start:{line:4,column:67552},end:{line:4,column:67637}},line:4},"1073":{name:"uy",decl:{start:{line:4,column:67646},end:{line:4,column:67648}},loc:{start:{line:4,column:67655},end:{line:4,column:67749}},line:4},"1074":{name:"dy",decl:{start:{line:4,column:67758},end:{line:4,column:67760}},loc:{start:{line:4,column:67767},end:{line:4,column:67837}},line:4},"1075":{name:"Vd",decl:{start:{line:4,column:67846},end:{line:4,column:67848}},loc:{start:{line:4,column:67865},end:{line:4,column:68110}},line:4},"1076":{name:"Hd",decl:{start:{line:4,column:68119},end:{line:4,column:68121}},loc:{start:{line:4,column:68126},end:{line:4,column:68166}},line:4},"1077":{name:"fy",decl:{start:{line:4,column:68175},end:{line:4,column:68177}},loc:{start:{line:4,column:68190},end:{line:4,column:68502}},line:4},"1078":{name:"ka",decl:{start:{line:4,column:68511},end:{line:4,column:68513}},loc:{start:{line:4,column:68516},end:{line:4,column:68593}},line:4},"1079":{name:"Bd",decl:{start:{line:4,column:68602},end:{line:4,column:68604}},loc:{start:{line:4,column:68609},end:{line:4,column:68736}},line:4},"1080":{name:"$d",decl:{start:{line:4,column:68745},end:{line:4,column:68747}},loc:{start:{line:4,column:68750},end:{line:4,column:68811}},line:4},"1081":{name:"Oa",decl:{start:{line:4,column:68820},end:{line:4,column:68822}},loc:{start:{line:4,column:68829},end:{line:4,column:68844}},line:4},"1082":{name:"py",decl:{start:{line:4,column:68853},end:{line:4,column:68855}},loc:{start:{line:4,column:68860},end:{line:4,column:68873}},line:4},"1083":{name:"ge",decl:{start:{line:4,column:68882},end:{line:4,column:68884}},loc:{start:{line:4,column:68891},end:{line:4,column:68958}},line:4},"1084":{name:"Ud",decl:{start:{line:4,column:68967},end:{line:4,column:68969}},loc:{start:{line:4,column:68978},end:{line:4,column:69017}},line:4},"1085":{name:"Io",decl:{start:{line:4,column:69026},end:{line:4,column:69028}},loc:{start:{line:4,column:69035},end:{line:4,column:69203}},line:4},"1086":{name:"r",decl:{start:{line:4,column:69052},end:{line:4,column:69053}},loc:{start:{line:4,column:69056},end:{line:4,column:69202}},line:4},"1087":{name:"ou",decl:{start:{line:4,column:69212},end:{line:4,column:69214}},loc:{start:{line:4,column:69223},end:{line:4,column:69340}},line:4},"1088":{name:"Wd",decl:{start:{line:4,column:69349},end:{line:4,column:69351}},loc:{start:{line:4,column:69368},end:{line:4,column:69663}},line:4},"1089":{name:"(anonymous_1089)",decl:{start:{line:4,column:69605},end:{line:4,column:69606}},loc:{start:{line:4,column:69608},end:{line:4,column:69625}},line:4},"1090":{name:"hy",decl:{start:{line:4,column:69672},end:{line:4,column:69674}},loc:{start:{line:4,column:69677},end:{line:4,column:69739}},line:4},"1091":{name:"gy",decl:{start:{line:4,column:69748},end:{line:4,column:69750}},loc:{start:{line:4,column:69759},end:{line:4,column:69942}},line:4},"1092":{name:"qd",decl:{start:{line:4,column:69951},end:{line:4,column:69953}},loc:{start:{line:4,column:69968},end:{line:4,column:70067}},line:4},"1093":{name:"iu",decl:{start:{line:4,column:70076},end:{line:4,column:70078}},loc:{start:{line:4,column:70091},end:{line:4,column:70178}},line:4},"1094":{name:"Gd",decl:{start:{line:4,column:70212},end:{line:4,column:70214}},loc:{start:{line:4,column:70217},end:{line:4,column:70267}},line:4},"1095":{name:"(anonymous_1095)",decl:{start:{line:4,column:70300},end:{line:4,column:70301}},loc:{start:{line:4,column:70314},end:{line:4,column:70339}},line:4},"1096":{name:"(anonymous_1096)",decl:{start:{line:4,column:70339},end:{line:4,column:70340}},loc:{start:{line:4,column:70365},end:{line:4,column:70409}},line:4},"1097":{name:"my",decl:{start:{line:4,column:70420},end:{line:4,column:70422}},loc:{start:{line:4,column:70425},end:{line:4,column:70564}},line:4},"1098":{name:"(anonymous_1098)",decl:{start:{line:4,column:70452},end:{line:4,column:70453}},loc:{start:{line:4,column:70455},end:{line:4,column:70562}},line:4},"1099":{name:"yy",decl:{start:{line:4,column:70573},end:{line:4,column:70575}},loc:{start:{line:4,column:70578},end:{line:4,column:70642}},line:4},"1100":{name:"(anonymous_1100)",decl:{start:{line:4,column:70605},end:{line:4,column:70606}},loc:{start:{line:4,column:70609},end:{line:4,column:70639}},line:4},"1101":{name:"vy",decl:{start:{line:4,column:70651},end:{line:4,column:70653}},loc:{start:{line:4,column:70660},end:{line:4,column:70789}},line:4},"1102":{name:"Ey",decl:{start:{line:4,column:70798},end:{line:4,column:70800}},loc:{start:{line:4,column:70803},end:{line:4,column:71021}},line:4},"1103":{name:"Iy",decl:{start:{line:4,column:71030},end:{line:4,column:71032}},loc:{start:{line:4,column:71037},end:{line:4,column:71097}},line:4},"1104":{name:"zd",decl:{start:{line:4,column:71106},end:{line:4,column:71108}},loc:{start:{line:4,column:71111},end:{line:4,column:71159}},line:4},"1105":{name:"(anonymous_1105)",decl:{start:{line:4,column:71300},end:{line:4,column:71301}},loc:{start:{line:4,column:71312},end:{line:4,column:71387}},line:4},"1106":{name:"(anonymous_1106)",decl:{start:{line:4,column:71387},end:{line:4,column:71388}},loc:{start:{line:4,column:71400},end:{line:4,column:71478}},line:4},"1107":{name:"(anonymous_1107)",decl:{start:{line:4,column:71478},end:{line:4,column:71479}},loc:{start:{line:4,column:71494},end:{line:4,column:71669}},line:4},"1108":{name:"(anonymous_1108)",decl:{start:{line:4,column:71669},end:{line:4,column:71670}},loc:{start:{line:4,column:71688},end:{line:4,column:71957}},line:4},"1109":{name:"(anonymous_1109)",decl:{start:{line:4,column:71864},end:{line:4,column:71865}},loc:{start:{line:4,column:71868},end:{line:4,column:71904}},line:4},"1110":{name:"(anonymous_1110)",decl:{start:{line:4,column:71957},end:{line:4,column:71958}},loc:{start:{line:4,column:71988},end:{line:4,column:72564}},line:4},"1111":{name:"(anonymous_1111)",decl:{start:{line:4,column:72131},end:{line:4,column:72132}},loc:{start:{line:4,column:72134},end:{line:4,column:72175}},line:4},"1112":{name:"(anonymous_1112)",decl:{start:{line:4,column:72288},end:{line:4,column:72289}},loc:{start:{line:4,column:72292},end:{line:4,column:72311}},line:4},"1113":{name:"Dy",decl:{start:{line:4,column:72575},end:{line:4,column:72577}},loc:{start:{line:4,column:72586},end:{line:4,column:73137}},line:4},"1114":{name:"Cy",decl:{start:{line:4,column:73146},end:{line:4,column:73148}},loc:{start:{line:4,column:73153},end:{line:4,column:73249}},line:4},"1115":{name:"(anonymous_1115)",decl:{start:{line:4,column:73172},end:{line:4,column:73173}},loc:{start:{line:4,column:73175},end:{line:4,column:73248}},line:4},"1116":{name:"su",decl:{start:{line:4,column:73258},end:{line:4,column:73260}},loc:{start:{line:4,column:73263},end:{line:4,column:73314}},line:4},"1117":{name:"(anonymous_1117)",decl:{start:{line:4,column:73458},end:{line:4,column:73459}},loc:{start:{line:4,column:73476},end:{line:4,column:73699}},line:4},"1118":{name:"(anonymous_1118)",decl:{start:{line:4,column:73699},end:{line:4,column:73700}},loc:{start:{line:4,column:73712},end:{line:4,column:73980}},line:4},"1119":{name:"(anonymous_1119)",decl:{start:{line:4,column:73980},end:{line:4,column:73981}},loc:{start:{line:4,column:73994},end:{line:4,column:74038}},line:4},"1120":{name:"(anonymous_1120)",decl:{start:{line:4,column:74038},end:{line:4,column:74039}},loc:{start:{line:4,column:74047},end:{line:4,column:74072}},line:4},"1121":{name:"(anonymous_1121)",decl:{start:{line:4,column:74072},end:{line:4,column:74073}},loc:{start:{line:4,column:74084},end:{line:4,column:74112}},line:4},"1122":{name:"wy",decl:{start:{line:4,column:74123},end:{line:4,column:74125}},loc:{start:{line:4,column:74132},end:{line:4,column:74240}},line:4},"1123":{name:"(anonymous_1123)",decl:{start:{line:4,column:74248},end:{line:4,column:74249}},loc:{start:{line:4,column:74252},end:{line:4,column:74298}},line:4},"1124":{name:"Ty",decl:{start:{line:4,column:74311},end:{line:4,column:74313}},loc:{start:{line:4,column:74315},end:{line:4,column:74343}},line:4},"1125":{name:"(anonymous_1125)",decl:{start:{line:4,column:74403},end:{line:4,column:74404}},loc:{start:{line:4,column:74421},end:{line:4,column:74485}},line:4},"1126":{name:"(anonymous_1126)",decl:{start:{line:4,column:74485},end:{line:4,column:74486}},loc:{start:{line:4,column:74498},end:{line:4,column:74542}},line:4},"1127":{name:"(anonymous_1127)",decl:{start:{line:4,column:74542},end:{line:4,column:74543}},loc:{start:{line:4,column:74556},end:{line:4,column:74604}},line:4},"1128":{name:"(anonymous_1128)",decl:{start:{line:4,column:74604},end:{line:4,column:74605}},loc:{start:{line:4,column:74624},end:{line:4,column:74790}},line:4},"1129":{name:"(anonymous_1129)",decl:{start:{line:4,column:74790},end:{line:4,column:74791}},loc:{start:{line:4,column:74797},end:{line:4,column:74845}},line:4},"1130":{name:"(anonymous_1130)",decl:{start:{line:4,column:74845},end:{line:4,column:74846}},loc:{start:{line:4,column:74851},end:{line:4,column:74907}},line:4},"1131":{name:"(anonymous_1131)",decl:{start:{line:4,column:74907},end:{line:4,column:74908}},loc:{start:{line:4,column:74919},end:{line:4,column:74953}},line:4},"1132":{name:"(anonymous_1132)",decl:{start:{line:4,column:74953},end:{line:4,column:74954}},loc:{start:{line:4,column:74978},end:{line:4,column:75169}},line:4},"1133":{name:"(anonymous_1133)",decl:{start:{line:4,column:75169},end:{line:4,column:75170}},loc:{start:{line:4,column:75199},end:{line:4,column:75655}},line:4},"1134":{name:"(anonymous_1134)",decl:{start:{line:4,column:75655},end:{line:4,column:75656}},loc:{start:{line:4,column:75666},end:{line:4,column:75698}},line:4},"1135":{name:"(anonymous_1135)",decl:{start:{line:4,column:75698},end:{line:4,column:75699}},loc:{start:{line:4,column:75715},end:{line:4,column:75959}},line:4},"1136":{name:"(anonymous_1136)",decl:{start:{line:4,column:75959},end:{line:4,column:75960}},loc:{start:{line:4,column:75968},end:{line:4,column:75993}},line:4},"1137":{name:"(anonymous_1137)",decl:{start:{line:4,column:75993},end:{line:4,column:75994}},loc:{start:{line:4,column:76003},end:{line:4,column:76063}},line:4},"1138":{name:"(anonymous_1138)",decl:{start:{line:4,column:76063},end:{line:4,column:76064}},loc:{start:{line:4,column:76072},end:{line:4,column:76171}},line:4},"1139":{name:"(anonymous_1139)",decl:{start:{line:4,column:76171},end:{line:4,column:76172}},loc:{start:{line:4,column:76180},end:{line:4,column:76294}},line:4},"1140":{name:"(anonymous_1140)",decl:{start:{line:4,column:76294},end:{line:4,column:76295}},loc:{start:{line:4,column:76313},end:{line:4,column:76338}},line:4},"1141":{name:"au",decl:{start:{line:4,column:76349},end:{line:4,column:76351}},loc:{start:{line:4,column:76354},end:{line:4,column:76368}},line:4},"1142":{name:"Os",decl:{start:{line:4,column:76377},end:{line:4,column:76379}},loc:{start:{line:4,column:76382},end:{line:4,column:76408}},line:4},"1143":{name:"Qd",decl:{start:{line:4,column:76417},end:{line:4,column:76419}},loc:{start:{line:4,column:76424},end:{line:4,column:76527}},line:4},"1144":{name:"by",decl:{start:{line:4,column:76536},end:{line:4,column:76538}},loc:{start:{line:4,column:76543},end:{line:4,column:76644}},line:4},"1145":{name:"(anonymous_1145)",decl:{start:{line:4,column:76657},end:{line:4,column:76658}},loc:{start:{line:4,column:76661},end:{line:4,column:76663}},line:4},"1146":{name:"Ny",decl:{start:{line:4,column:76673},end:{line:4,column:76675}},loc:{start:{line:4,column:76682},end:{line:4,column:76700}},line:4},"1147":{name:"Sy",decl:{start:{line:4,column:76709},end:{line:4,column:76711}},loc:{start:{line:4,column:76720},end:{line:4,column:76778}},line:4},"1148":{name:"(anonymous_1148)",decl:{start:{line:4,column:76816},end:{line:4,column:76817}},loc:{start:{line:4,column:76830},end:{line:4,column:76848}},line:4},"1149":{name:"(anonymous_1149)",decl:{start:{line:4,column:76848},end:{line:4,column:76849}},loc:{start:{line:4,column:76855},end:{line:4,column:76885}},line:4},"1150":{name:"(anonymous_1150)",decl:{start:{line:4,column:76885},end:{line:4,column:76886}},loc:{start:{line:4,column:76895},end:{line:4,column:76922}},line:4},"1151":{name:"(anonymous_1151)",decl:{start:{line:4,column:76943},end:{line:4,column:76944}},loc:{start:{line:4,column:76960},end:{line:4,column:76976}},line:4},"1152":{name:"(anonymous_1152)",decl:{start:{line:4,column:76976},end:{line:4,column:76977}},loc:{start:{line:4,column:76997},end:{line:4,column:77221}},line:4},"1153":{name:"(anonymous_1153)",decl:{start:{line:4,column:77221},end:{line:4,column:77222}},loc:{start:{line:4,column:77234},end:{line:4,column:77267}},line:4},"1154":{name:"(anonymous_1154)",decl:{start:{line:4,column:77267},end:{line:4,column:77268}},loc:{start:{line:4,column:77280},end:{line:4,column:77313}},line:4},"1155":{name:"(anonymous_1155)",decl:{start:{line:4,column:77313},end:{line:4,column:77314}},loc:{start:{line:4,column:77334},end:{line:4,column:77367}},line:4},"1156":{name:"(anonymous_1156)",decl:{start:{line:4,column:77367},end:{line:4,column:77368}},loc:{start:{line:4,column:77393},end:{line:4,column:77483}},line:4},"1157":{name:"(anonymous_1157)",decl:{start:{line:4,column:77515},end:{line:4,column:77516}},loc:{start:{line:4,column:77538},end:{line:4,column:77621}},line:4},"1158":{name:"(anonymous_1158)",decl:{start:{line:4,column:77642},end:{line:4,column:77643}},loc:{start:{line:4,column:77659},end:{line:4,column:77675}},line:4},"1159":{name:"(anonymous_1159)",decl:{start:{line:4,column:77675},end:{line:4,column:77676}},loc:{start:{line:4,column:77692},end:{line:4,column:77765}},line:4},"1160":{name:"(anonymous_1160)",decl:{start:{line:4,column:77765},end:{line:4,column:77766}},loc:{start:{line:4,column:77778},end:{line:4,column:77847}},line:4},"1161":{name:"(anonymous_1161)",decl:{start:{line:4,column:77847},end:{line:4,column:77848}},loc:{start:{line:4,column:77863},end:{line:4,column:78059}},line:4},"1162":{name:"(anonymous_1162)",decl:{start:{line:4,column:78059},end:{line:4,column:78060}},loc:{start:{line:4,column:78072},end:{line:4,column:78141}},line:4},"1163":{name:"(anonymous_1163)",decl:{start:{line:4,column:78141},end:{line:4,column:78142}},loc:{start:{line:4,column:78154},end:{line:4,column:78178}},line:4},"1164":{name:"(anonymous_1164)",decl:{start:{line:4,column:78178},end:{line:4,column:78179}},loc:{start:{line:4,column:78190},end:{line:4,column:78218}},line:4},"1165":{name:"(anonymous_1165)",decl:{start:{line:4,column:78218},end:{line:4,column:78219}},loc:{start:{line:4,column:78226},end:{line:4,column:78248}},line:4},"1166":{name:"(anonymous_1166)",decl:{start:{line:4,column:78374},end:{line:4,column:78375}},loc:{start:{line:4,column:78393},end:{line:4,column:78439}},line:4},"1167":{name:"(anonymous_1167)",decl:{start:{line:4,column:78439},end:{line:4,column:78440}},loc:{start:{line:4,column:78456},end:{line:4,column:78504}},line:4},"1168":{name:"(anonymous_1168)",decl:{start:{line:4,column:78504},end:{line:4,column:78505}},loc:{start:{line:4,column:78517},end:{line:4,column:78585}},line:4},"1169":{name:"(anonymous_1169)",decl:{start:{line:4,column:78585},end:{line:4,column:78586}},loc:{start:{line:4,column:78598},end:{line:4,column:78622}},line:4},"1170":{name:"(anonymous_1170)",decl:{start:{line:4,column:78622},end:{line:4,column:78623}},loc:{start:{line:4,column:78640},end:{line:4,column:78753}},line:4},"1171":{name:"(anonymous_1171)",decl:{start:{line:4,column:78753},end:{line:4,column:78754}},loc:{start:{line:4,column:78772},end:{line:4,column:78987}},line:4},"1172":{name:"(anonymous_1172)",decl:{start:{line:4,column:78987},end:{line:4,column:78988}},loc:{start:{line:4,column:79002},end:{line:4,column:79297}},line:4},"1173":{name:"(anonymous_1173)",decl:{start:{line:4,column:79297},end:{line:4,column:79298}},loc:{start:{line:4,column:79328},end:{line:4,column:79534}},line:4},"1174":{name:"(anonymous_1174)",decl:{start:{line:4,column:79534},end:{line:4,column:79535}},loc:{start:{line:4,column:79547},end:{line:4,column:79610}},line:4},"1175":{name:"xy",decl:{start:{line:4,column:79621},end:{line:4,column:79623}},loc:{start:{line:4,column:79628},end:{line:4,column:79727}},line:4},"1176":{name:"Ay",decl:{start:{line:4,column:79736},end:{line:4,column:79738}},loc:{start:{line:4,column:79743},end:{line:4,column:79791}},line:4},"1177":{name:"Ry",decl:{start:{line:4,column:79800},end:{line:4,column:79802}},loc:{start:{line:4,column:79811},end:{line:4,column:79866}},line:4},"1178":{name:"ky",decl:{start:{line:4,column:79875},end:{line:4,column:79877}},loc:{start:{line:4,column:79884},end:{line:4,column:79960}},line:4},"1179":{name:"Zd",decl:{start:{line:4,column:79969},end:{line:4,column:79971}},loc:{start:{line:4,column:79980},end:{line:4,column:80210}},line:4},"1180":{name:"sa",decl:{start:{line:4,column:80219},end:{line:4,column:80221}},loc:{start:{line:4,column:80230},end:{line:4,column:80556}},line:4},"1181":{name:"Oy",decl:{start:{line:4,column:80565},end:{line:4,column:80567}},loc:{start:{line:4,column:80572},end:{line:4,column:80607}},line:4},"1182":{name:"Yd",decl:{start:{line:4,column:80616},end:{line:4,column:80618}},loc:{start:{line:4,column:80625},end:{line:4,column:80720}},line:4},"1183":{name:"Py",decl:{start:{line:4,column:80729},end:{line:4,column:80731}},loc:{start:{line:4,column:80738},end:{line:4,column:80848}},line:4},"1184":{name:"Ly",decl:{start:{line:4,column:80857},end:{line:4,column:80859}},loc:{start:{line:4,column:80868},end:{line:4,column:81005}},line:4},"1185":{name:"Fy",decl:{start:{line:4,column:81014},end:{line:4,column:81016}},loc:{start:{line:4,column:81019},end:{line:4,column:81057}},line:4},"1186":{name:"(anonymous_1186)",decl:{start:{line:4,column:81044},end:{line:4,column:81045}},loc:{start:{line:4,column:81047},end:{line:4,column:81055}},line:4},"1187":{name:"Kd",decl:{start:{line:4,column:81066},end:{line:4,column:81068}},loc:{start:{line:4,column:81075},end:{line:4,column:81142}},line:4},"1188":{name:"jy",decl:{start:{line:4,column:81151},end:{line:4,column:81153}},loc:{start:{line:4,column:81158},end:{line:4,column:81269}},line:4},"1189":{name:"Pa",decl:{start:{line:4,column:81278},end:{line:4,column:81280}},loc:{start:{line:4,column:81285},end:{line:4,column:81317}},line:4},"1190":{name:"Vy",decl:{start:{line:4,column:81326},end:{line:4,column:81328}},loc:{start:{line:4,column:81333},end:{line:4,column:81407}},line:4},"1191":{name:"(anonymous_1191)",decl:{start:{line:4,column:81575},end:{line:4,column:81576}},loc:{start:{line:4,column:81598},end:{line:4,column:81876}},line:4},"1192":{name:"(anonymous_1192)",decl:{start:{line:4,column:81876},end:{line:4,column:81877}},loc:{start:{line:4,column:81905},end:{line:4,column:82007}},line:4},"1193":{name:"(anonymous_1193)",decl:{start:{line:4,column:82007},end:{line:4,column:82008}},loc:{start:{line:4,column:82021},end:{line:4,column:82046}},line:4},"1194":{name:"(anonymous_1194)",decl:{start:{line:4,column:82046},end:{line:4,column:82047}},loc:{start:{line:4,column:82055},end:{line:4,column:82158}},line:4},"1195":{name:"(anonymous_1195)",decl:{start:{line:4,column:82129},end:{line:4,column:82130}},loc:{start:{line:4,column:82132},end:{line:4,column:82135}},line:4},"1196":{name:"(anonymous_1196)",decl:{start:{line:4,column:82158},end:{line:4,column:82159}},loc:{start:{line:4,column:82170},end:{line:4,column:82195}},line:4},"1197":{name:"(anonymous_1197)",decl:{start:{line:4,column:82228},end:{line:4,column:82229}},loc:{start:{line:4,column:82242},end:{line:4,column:82269}},line:4},"1198":{name:"(anonymous_1198)",decl:{start:{line:4,column:82269},end:{line:4,column:82270}},loc:{start:{line:4,column:82278},end:{line:4,column:82315}},line:4},"1199":{name:"(anonymous_1199)",decl:{start:{line:4,column:82402},end:{line:4,column:82403}},loc:{start:{line:4,column:82416},end:{line:4,column:82665}},line:4},"1200":{name:"(anonymous_1200)",decl:{start:{line:4,column:82665},end:{line:4,column:82666}},loc:{start:{line:4,column:82674},end:{line:4,column:82699}},line:4},"1201":{name:"(anonymous_1201)",decl:{start:{line:4,column:82699},end:{line:4,column:82700}},loc:{start:{line:4,column:82711},end:{line:4,column:82739}},line:4},"1202":{name:"Xd",decl:{start:{line:4,column:82750},end:{line:4,column:82752}},loc:{start:{line:4,column:82764},end:{line:4,column:82854}},line:4},"1203":{name:"(anonymous_1203)",decl:{start:{line:4,column:82862},end:{line:4,column:82863}},loc:{start:{line:4,column:82866},end:{line:4,column:83377}},line:4},"1204":{name:"(anonymous_1204)",decl:{start:{line:4,column:82909},end:{line:4,column:82910}},loc:{start:{line:4,column:82923},end:{line:4,column:82941}},line:4},"1205":{name:"(anonymous_1205)",decl:{start:{line:4,column:82941},end:{line:4,column:82942}},loc:{start:{line:4,column:82973},end:{line:4,column:83165}},line:4},"1206":{name:"(anonymous_1206)",decl:{start:{line:4,column:83165},end:{line:4,column:83166}},loc:{start:{line:4,column:83178},end:{line:4,column:83286}},line:4},"1207":{name:"(anonymous_1207)",decl:{start:{line:4,column:83348},end:{line:4,column:83349}},loc:{start:{line:4,column:83352},end:{line:4,column:83365}},line:4},"1208":{name:"By",decl:{start:{line:4,column:83390},end:{line:4,column:83392}},loc:{start:{line:4,column:83395},end:{line:4,column:84048}},line:4},"1209":{name:"(anonymous_1209)",decl:{start:{line:4,column:83406},end:{line:4,column:83407}},loc:{start:{line:4,column:83410},end:{line:4,column:84046}},line:4},"1210":{name:"(anonymous_1210)",decl:{start:{line:4,column:83697},end:{line:4,column:83698}},loc:{start:{line:4,column:83700},end:{line:4,column:83742}},line:4},"1211":{name:"$y",decl:{start:{line:4,column:84057},end:{line:4,column:84059}},loc:{start:{line:4,column:84062},end:{line:4,column:84083}},line:4},"1212":{name:"Uy",decl:{start:{line:4,column:84092},end:{line:4,column:84094}},loc:{start:{line:4,column:84097},end:{line:4,column:84294}},line:4},"1213":{name:"(anonymous_1213)",decl:{start:{line:4,column:84108},end:{line:4,column:84109}},loc:{start:{line:4,column:84113},end:{line:4,column:84291}},line:4},"1214":{name:"Wy",decl:{start:{line:4,column:84303},end:{line:4,column:84305}},loc:{start:{line:4,column:84310},end:{line:4,column:84511}},line:4},"1215":{name:"qy",decl:{start:{line:4,column:84520},end:{line:4,column:84522}},loc:{start:{line:4,column:84525},end:{line:4,column:84613}},line:4},"1216":{name:"Gy",decl:{start:{line:4,column:84622},end:{line:4,column:84624}},loc:{start:{line:4,column:84627},end:{line:4,column:84672}},line:4},"1217":{name:"(anonymous_1217)",decl:{start:{line:4,column:84638},end:{line:4,column:84639}},loc:{start:{line:4,column:84642},end:{line:4,column:84670}},line:4},"1218":{name:"zy",decl:{start:{line:4,column:84681},end:{line:4,column:84683}},loc:{start:{line:4,column:84686},end:{line:4,column:84822}},line:4},"1219":{name:"ef",decl:{start:{line:4,column:84831},end:{line:4,column:84833}},loc:{start:{line:4,column:84836},end:{line:4,column:85386}},line:4},"1220":{name:"tf",decl:{start:{line:4,column:85395},end:{line:4,column:85397}},loc:{start:{line:4,column:85400},end:{line:4,column:85430}},line:4},"1221":{name:"(anonymous_1221)",decl:{start:{line:4,column:85421},end:{line:4,column:85422}},loc:{start:{line:4,column:85424},end:{line:4,column:85428}},line:4},"1222":{name:"cu",decl:{start:{line:4,column:85439},end:{line:4,column:85441}},loc:{start:{line:4,column:85446},end:{line:4,column:85561}},line:4},"1223":{name:"(anonymous_1223)",decl:{start:{line:4,column:85456},end:{line:4,column:85457}},loc:{start:{line:4,column:85460},end:{line:4,column:85555}},line:4},"1224":{name:"Qy",decl:{start:{line:4,column:85570},end:{line:4,column:85572}},loc:{start:{line:4,column:85575},end:{line:4,column:85971}},line:4},"1225":{name:"Zy",decl:{start:{line:4,column:85980},end:{line:4,column:85982}},loc:{start:{line:4,column:85985},end:{line:4,column:86040}},line:4},"1226":{name:"nf",decl:{start:{line:4,column:86049},end:{line:4,column:86051}},loc:{start:{line:4,column:86054},end:{line:4,column:86653}},line:4},"1227":{name:"Yy",decl:{start:{line:4,column:86662},end:{line:4,column:86664}},loc:{start:{line:4,column:86669},end:{line:4,column:86848}},line:4},"1228":{name:"Ky",decl:{start:{line:4,column:86857},end:{line:4,column:86859}},loc:{start:{line:4,column:86862},end:{line:4,column:86994}},line:4},"1229":{name:"Ps",decl:{start:{line:4,column:87003},end:{line:4,column:87005}},loc:{start:{line:4,column:87008},end:{line:4,column:87037}},line:4},"1230":{name:"Jy",decl:{start:{line:4,column:87046},end:{line:4,column:87048}},loc:{start:{line:4,column:87053},end:{line:4,column:87123}},line:4},"1231":{name:"(anonymous_1231)",decl:{start:{line:4,column:87086},end:{line:4,column:87087}},loc:{start:{line:4,column:87093},end:{line:4,column:87108}},line:4},"1232":{name:"Xy",decl:{start:{line:4,column:87132},end:{line:4,column:87134}},loc:{start:{line:4,column:87139},end:{line:4,column:87230}},line:4},"1233":{name:"(anonymous_1233)",decl:{start:{line:4,column:87182},end:{line:4,column:87183}},loc:{start:{line:4,column:87191},end:{line:4,column:87210}},line:4},"1234":{name:"ev",decl:{start:{line:4,column:87239},end:{line:4,column:87241}},loc:{start:{line:4,column:87246},end:{line:4,column:87325}},line:4},"1235":{name:"(anonymous_1235)",decl:{start:{line:4,column:87285},end:{line:4,column:87286}},loc:{start:{line:4,column:87292},end:{line:4,column:87307}},line:4},"1236":{name:"rf",decl:{start:{line:4,column:87334},end:{line:4,column:87336}},loc:{start:{line:4,column:87353},end:{line:4,column:87703}},line:4},"1237":{name:"tv",decl:{start:{line:4,column:87712},end:{line:4,column:87714}},loc:{start:{line:4,column:87737},end:{line:4,column:87917}},line:4},"1238":{name:"qn",decl:{start:{line:4,column:87926},end:{line:4,column:87928}},loc:{start:{line:4,column:87951},end:{line:4,column:88184}},line:4},"1239":{name:"of",decl:{start:{line:4,column:88193},end:{line:4,column:88195}},loc:{start:{line:4,column:88212},end:{line:4,column:88287}},line:4},"1240":{name:"rv",decl:{start:{line:4,column:88306},end:{line:4,column:88308}},loc:{start:{line:4,column:88317},end:{line:4,column:88355}},line:4},"1241":{name:"(anonymous_1241)",decl:{start:{line:4,column:88363},end:{line:4,column:88364}},loc:{start:{line:4,column:88367},end:{line:4,column:88551}},line:4},"1242":{name:"(anonymous_1242)",decl:{start:{line:4,column:88376},end:{line:4,column:88377}},loc:{start:{line:4,column:88382},end:{line:4,column:88398}},line:4},"1243":{name:"(anonymous_1243)",decl:{start:{line:4,column:88398},end:{line:4,column:88399}},loc:{start:{line:4,column:88405},end:{line:4,column:88422}},line:4},"1244":{name:"(anonymous_1244)",decl:{start:{line:4,column:88439},end:{line:4,column:88440}},loc:{start:{line:4,column:88450},end:{line:4,column:88468}},line:4},"1245":{name:"La",decl:{start:{line:4,column:88581},end:{line:4,column:88583}},loc:{start:{line:4,column:88586},end:{line:4,column:88624}},line:4},"1246":{name:"af",decl:{start:{line:4,column:88633},end:{line:4,column:88635}},loc:{start:{line:4,column:88638},end:{line:4,column:88681}},line:4},"1247":{name:"iv",decl:{start:{line:4,column:88707},end:{line:4,column:88709}},loc:{start:{line:4,column:88712},end:{line:4,column:88759}},line:4},"1248":{name:"(anonymous_1248)",decl:{start:{line:4,column:88767},end:{line:4,column:88768}},loc:{start:{line:4,column:88771},end:{line:4,column:89420}},line:4},"1249":{name:"(anonymous_1249)",decl:{start:{line:4,column:88842},end:{line:4,column:88843}},loc:{start:{line:4,column:88849},end:{line:4,column:88879}},line:4},"1250":{name:"(anonymous_1250)",decl:{start:{line:4,column:88929},end:{line:4,column:88930}},loc:{start:{line:4,column:88942},end:{line:4,column:88944}},line:4},"1251":{name:"(anonymous_1251)",decl:{start:{line:4,column:88944},end:{line:4,column:88945}},loc:{start:{line:4,column:88961},end:{line:4,column:89295}},line:4},"1252":{name:"(anonymous_1252)",decl:{start:{line:4,column:89104},end:{line:4,column:89105}},loc:{start:{line:4,column:89111},end:{line:4,column:89146}},line:4},"1253":{name:"(anonymous_1253)",decl:{start:{line:4,column:89165},end:{line:4,column:89166}},loc:{start:{line:4,column:89169},end:{line:4,column:89198}},line:4},"1254":{name:"(anonymous_1254)",decl:{start:{line:4,column:89219},end:{line:4,column:89220}},loc:{start:{line:4,column:89223},end:{line:4,column:89228}},line:4},"1255":{name:"(anonymous_1255)",decl:{start:{line:4,column:89236},end:{line:4,column:89237}},loc:{start:{line:4,column:89239},end:{line:4,column:89255}},line:4},"1256":{name:"(anonymous_1256)",decl:{start:{line:4,column:89312},end:{line:4,column:89313}},loc:{start:{line:4,column:89323},end:{line:4,column:89341}},line:4},"1257":{name:"lf",decl:{start:{line:4,column:89446},end:{line:4,column:89448}},loc:{start:{line:4,column:89450},end:{line:4,column:89489}},line:4},"1258":{name:"(anonymous_1258)",decl:{start:{line:4,column:89454},end:{line:4,column:89455}},loc:{start:{line:4,column:89458},end:{line:4,column:89487}},line:4},"1259":{name:"uf",decl:{start:{line:4,column:89498},end:{line:4,column:89500}},loc:{start:{line:4,column:89503},end:{line:4,column:89529}},line:4},"1260":{name:"(anonymous_1260)",decl:{start:{line:4,column:89547},end:{line:4,column:89548}},loc:{start:{line:4,column:89551},end:{line:4,column:93296}},line:4},"1261":{name:"(anonymous_1261)",decl:{start:{line:4,column:89844},end:{line:4,column:89845}},loc:{start:{line:4,column:89858},end:{line:4,column:89962}},line:4},"1262":{name:"(anonymous_1262)",decl:{start:{line:4,column:89962},end:{line:4,column:89963}},loc:{start:{line:4,column:89977},end:{line:4,column:90001}},line:4},"1263":{name:"(anonymous_1263)",decl:{start:{line:4,column:90059},end:{line:4,column:90060}},loc:{start:{line:4,column:90073},end:{line:4,column:90148}},line:4},"1264":{name:"(anonymous_1264)",decl:{start:{line:4,column:90140},end:{line:4,column:90141}},loc:{start:{line:4,column:90143},end:{line:4,column:90145}},line:4},"1265":{name:"(anonymous_1265)",decl:{start:{line:4,column:90148},end:{line:4,column:90149}},loc:{start:{line:4,column:90161},end:{line:4,column:90182}},line:4},"1266":{name:"(anonymous_1266)",decl:{start:{line:4,column:90182},end:{line:4,column:90183}},loc:{start:{line:4,column:90194},end:{line:4,column:90303}},line:4},"1267":{name:"(anonymous_1267)",decl:{start:{line:4,column:90220},end:{line:4,column:90221}},loc:{start:{line:4,column:90223},end:{line:4,column:90270}},line:4},"1268":{name:"(anonymous_1268)",decl:{start:{line:4,column:90256},end:{line:4,column:90257}},loc:{start:{line:4,column:90259},end:{line:4,column:90267}},line:4},"1269":{name:"(anonymous_1269)",decl:{start:{line:4,column:90280},end:{line:4,column:90281}},loc:{start:{line:4,column:90284},end:{line:4,column:90301}},line:4},"1270":{name:"(anonymous_1270)",decl:{start:{line:4,column:90341},end:{line:4,column:90342}},loc:{start:{line:4,column:90355},end:{line:4,column:90378}},line:4},"1271":{name:"(anonymous_1271)",decl:{start:{line:4,column:90378},end:{line:4,column:90379}},loc:{start:{line:4,column:90392},end:{line:4,column:90424}},line:4},"1272":{name:"(anonymous_1272)",decl:{start:{line:4,column:90424},end:{line:4,column:90425}},loc:{start:{line:4,column:90452},end:{line:4,column:91028}},line:4},"1273":{name:"(anonymous_1273)",decl:{start:{line:4,column:90487},end:{line:4,column:90488}},loc:{start:{line:4,column:90491},end:{line:4,column:91026}},line:4},"1274":{name:"(anonymous_1274)",decl:{start:{line:4,column:90887},end:{line:4,column:90888}},loc:{start:{line:4,column:90891},end:{line:4,column:90970}},line:4},"1275":{name:"(anonymous_1275)",decl:{start:{line:4,column:91028},end:{line:4,column:91029}},loc:{start:{line:4,column:91034},end:{line:4,column:91091}},line:4},"1276":{name:"(anonymous_1276)",decl:{start:{line:4,column:91091},end:{line:4,column:91092}},loc:{start:{line:4,column:91098},end:{line:4,column:91229}},line:4},"1277":{name:"(anonymous_1277)",decl:{start:{line:4,column:91238},end:{line:4,column:91239}},loc:{start:{line:4,column:91242},end:{line:4,column:91505}},line:4},"1278":{name:"(anonymous_1278)",decl:{start:{line:4,column:91506},end:{line:4,column:91507}},loc:{start:{line:4,column:91519},end:{line:4,column:91781}},line:4},"1279":{name:"(anonymous_1279)",decl:{start:{line:4,column:91781},end:{line:4,column:91782}},loc:{start:{line:4,column:91798},end:{line:4,column:92334}},line:4},"1280":{name:"(anonymous_1280)",decl:{start:{line:4,column:92334},end:{line:4,column:92335}},loc:{start:{line:4,column:92359},end:{line:4,column:92455}},line:4},"1281":{name:"(anonymous_1281)",decl:{start:{line:4,column:92382},end:{line:4,column:92383}},loc:{start:{line:4,column:92396},end:{line:4,column:92401}},line:4},"1282":{name:"(anonymous_1282)",decl:{start:{line:4,column:92455},end:{line:4,column:92456}},loc:{start:{line:4,column:92468},end:{line:4,column:92520}},line:4},"1283":{name:"(anonymous_1283)",decl:{start:{line:4,column:92520},end:{line:4,column:92521}},loc:{start:{line:4,column:92533},end:{line:4,column:92581}},line:4},"1284":{name:"(anonymous_1284)",decl:{start:{line:4,column:92581},end:{line:4,column:92582}},loc:{start:{line:4,column:92598},end:{line:4,column:92748}},line:4},"1285":{name:"(anonymous_1285)",decl:{start:{line:4,column:92739},end:{line:4,column:92740}},loc:{start:{line:4,column:92742},end:{line:4,column:92746}},line:4},"1286":{name:"(anonymous_1286)",decl:{start:{line:4,column:92748},end:{line:4,column:92749}},loc:{start:{line:4,column:92761},end:{line:4,column:92938}},line:4},"1287":{name:"(anonymous_1287)",decl:{start:{line:4,column:92817},end:{line:4,column:92818}},loc:{start:{line:4,column:92820},end:{line:4,column:92823}},line:4},"1288":{name:"(anonymous_1288)",decl:{start:{line:4,column:92853},end:{line:4,column:92854}},loc:{start:{line:4,column:92856},end:{line:4,column:92867}},line:4},"1289":{name:"(anonymous_1289)",decl:{start:{line:4,column:92938},end:{line:4,column:92939}},loc:{start:{line:4,column:92950},end:{line:4,column:93022}},line:4},"1290":{name:"(anonymous_1290)",decl:{start:{line:4,column:92989},end:{line:4,column:92990}},loc:{start:{line:4,column:92993},end:{line:4,column:93021}},line:4},"1291":{name:"(anonymous_1291)",decl:{start:{line:4,column:93022},end:{line:4,column:93023}},loc:{start:{line:4,column:93031},end:{line:4,column:93129}},line:4},"1292":{name:"(anonymous_1292)",decl:{start:{line:4,column:93129},end:{line:4,column:93130}},loc:{start:{line:4,column:93144},end:{line:4,column:93171}},line:4},"1293":{name:"(anonymous_1293)",decl:{start:{line:4,column:93188},end:{line:4,column:93189}},loc:{start:{line:4,column:93199},end:{line:4,column:93217}},line:4},"1294":{name:"Fn",decl:{start:{line:4,column:93309},end:{line:4,column:93311}},loc:{start:{line:4,column:93316},end:{line:4,column:93356}},line:4},"1295":{name:"df",decl:{start:{line:4,column:93365},end:{line:4,column:93367}},loc:{start:{line:4,column:93376},end:{line:4,column:93451}},line:4},"1296":{name:"av",decl:{start:{line:4,column:93460},end:{line:4,column:93462}},loc:{start:{line:4,column:93464},end:{line:4,column:93482}},line:4},"1297":{name:"(anonymous_1297)",decl:{start:{line:4,column:93495},end:{line:4,column:93496}},loc:{start:{line:4,column:93505},end:{line:4,column:93507}},line:4},"1298":{name:"(anonymous_1298)",decl:{start:{line:4,column:93507},end:{line:4,column:93508}},loc:{start:{line:4,column:93523},end:{line:4,column:93525}},line:4},"1299":{name:"(anonymous_1299)",decl:{start:{line:4,column:93525},end:{line:4,column:93526}},loc:{start:{line:4,column:93534},end:{line:4,column:93675}},line:4},"1300":{name:"(anonymous_1300)",decl:{start:{line:4,column:93675},end:{line:4,column:93676}},loc:{start:{line:4,column:93684},end:{line:4,column:93715}},line:4},"1301":{name:"Ls",decl:{start:{line:4,column:93726},end:{line:4,column:93728}},loc:{start:{line:4,column:93739},end:{line:4,column:93801}},line:4},"1302":{name:"cv",decl:{start:{line:4,column:93810},end:{line:4,column:93812}},loc:{start:{line:4,column:93821},end:{line:4,column:94966}},line:4},"1303":{name:"(anonymous_1303)",decl:{start:{line:4,column:94947},end:{line:4,column:94948}},loc:{start:{line:4,column:94950},end:{line:4,column:94964}},line:4},"1304":{name:"ca",decl:{start:{line:4,column:94975},end:{line:4,column:94977}},loc:{start:{line:4,column:94986},end:{line:4,column:95056}},line:4},"1305":{name:"lu",decl:{start:{line:4,column:95065},end:{line:4,column:95067}},loc:{start:{line:4,column:95078},end:{line:4,column:95158}},line:4},"1306":{name:"uu",decl:{start:{line:4,column:95167},end:{line:4,column:95169}},loc:{start:{line:4,column:95178},end:{line:4,column:95243}},line:4},"1307":{name:"(anonymous_1307)",decl:{start:{line:4,column:95283},end:{line:4,column:95284}},loc:{start:{line:4,column:95289},end:{line:4,column:95315}},line:4},"1308":{name:"(anonymous_1308)",decl:{start:{line:4,column:95315},end:{line:4,column:95316}},loc:{start:{line:4,column:95324},end:{line:4,column:95503}},line:4},"1309":{name:"(anonymous_1309)",decl:{start:{line:4,column:95503},end:{line:4,column:95504}},loc:{start:{line:4,column:95509},end:{line:4,column:95535}},line:4},"1310":{name:"(anonymous_1310)",decl:{start:{line:4,column:95535},end:{line:4,column:95536}},loc:{start:{line:4,column:95543},end:{line:4,column:95711}},line:4},"1311":{name:"(anonymous_1311)",decl:{start:{line:4,column:95711},end:{line:4,column:95712}},loc:{start:{line:4,column:95721},end:{line:4,column:95830}},line:4},"1312":{name:"lv",decl:{start:{line:4,column:95841},end:{line:4,column:95843}},loc:{start:{line:4,column:95860},end:{line:4,column:95952}},line:4},"1313":{name:"Va",decl:{start:{line:4,column:95961},end:{line:4,column:95963}},loc:{start:{line:4,column:95980},end:{line:4,column:96072}},line:4},"1314":{name:"uv",decl:{start:{line:4,column:96081},end:{line:4,column:96083}},loc:{start:{line:4,column:96088},end:{line:4,column:96403}},line:4},"1315":{name:"(anonymous_1315)",decl:{start:{line:4,column:96444},end:{line:4,column:96445}},loc:{start:{line:4,column:96462},end:{line:4,column:96512}},line:4},"1316":{name:"(anonymous_1316)",decl:{start:{line:4,column:96512},end:{line:4,column:96513}},loc:{start:{line:4,column:96524},end:{line:4,column:96557}},line:4},"1317":{name:"dv",decl:{start:{line:4,column:96568},end:{line:4,column:96570}},loc:{start:{line:4,column:96575},end:{line:4,column:96585}},line:4},"1318":{name:"(anonymous_1318)",decl:{start:{line:4,column:96637},end:{line:4,column:96638}},loc:{start:{line:4,column:96655},end:{line:4,column:96716}},line:4},"1319":{name:"fv",decl:{start:{line:4,column:96727},end:{line:4,column:96729}},loc:{start:{line:4,column:96756},end:{line:4,column:96940}},line:4},"1320":{name:"(anonymous_1320)",decl:{start:{line:4,column:97044},end:{line:4,column:97045}},loc:{start:{line:4,column:97062},end:{line:4,column:97127}},line:4},"1321":{name:"(anonymous_1321)",decl:{start:{line:4,column:97127},end:{line:4,column:97128}},loc:{start:{line:4,column:97139},end:{line:4,column:97172}},line:4},"1322":{name:"(anonymous_1322)",decl:{start:{line:4,column:97172},end:{line:4,column:97173}},loc:{start:{line:4,column:97177},end:{line:4,column:97215}},line:4},"1323":{name:"(anonymous_1323)",decl:{start:{line:4,column:97215},end:{line:4,column:97216}},loc:{start:{line:4,column:97226},end:{line:4,column:97350}},line:4},"1324":{name:"(anonymous_1324)",decl:{start:{line:4,column:97350},end:{line:4,column:97351}},loc:{start:{line:4,column:97359},end:{line:4,column:97453}},line:4},"1325":{name:"(anonymous_1325)",decl:{start:{line:4,column:97453},end:{line:4,column:97454}},loc:{start:{line:4,column:97464},end:{line:4,column:97614}},line:4},"1326":{name:"(anonymous_1326)",decl:{start:{line:4,column:97614},end:{line:4,column:97615}},loc:{start:{line:4,column:97624},end:{line:4,column:97636}},line:4},"1327":{name:"(anonymous_1327)",decl:{start:{line:4,column:97636},end:{line:4,column:97637}},loc:{start:{line:4,column:97652},end:{line:4,column:97685}},line:4},"1328":{name:"(anonymous_1328)",decl:{start:{line:4,column:97685},end:{line:4,column:97686}},loc:{start:{line:4,column:97692},end:{line:4,column:97718}},line:4},"1329":{name:"(anonymous_1329)",decl:{start:{line:4,column:97718},end:{line:4,column:97719}},loc:{start:{line:4,column:97733},end:{line:4,column:97818}},line:4},"1330":{name:"(anonymous_1330)",decl:{start:{line:4,column:97818},end:{line:4,column:97819}},loc:{start:{line:4,column:97829},end:{line:4,column:97859}},line:4},"1331":{name:"pv",decl:{start:{line:4,column:97870},end:{line:4,column:97872}},loc:{start:{line:4,column:97875},end:{line:4,column:98329}},line:4},"1332":{name:"Vo",decl:{start:{line:4,column:98338},end:{line:4,column:98340}},loc:{start:{line:4,column:98345},end:{line:4,column:98358}},line:4},"1333":{name:"hv",decl:{start:{line:4,column:98367},end:{line:4,column:98369}},loc:{start:{line:4,column:98374},end:{line:4,column:98580}},line:4},"1334":{name:"gv",decl:{start:{line:4,column:98589},end:{line:4,column:98591}},loc:{start:{line:4,column:98596},end:{line:4,column:98714}},line:4},"1335":{name:"mv",decl:{start:{line:4,column:98723},end:{line:4,column:98725}},loc:{start:{line:4,column:98730},end:{line:4,column:98746}},line:4},"1336":{name:"yv",decl:{start:{line:4,column:98755},end:{line:4,column:98757}},loc:{start:{line:4,column:98762},end:{line:4,column:98778}},line:4},"1337":{name:"fa",decl:{start:{line:4,column:98787},end:{line:4,column:98789}},loc:{start:{line:4,column:98794},end:{line:4,column:98810}},line:4},"1338":{name:"ff",decl:{start:{line:4,column:98819},end:{line:4,column:98821}},loc:{start:{line:4,column:98828},end:{line:4,column:98906}},line:4},"1339":{name:"pa",decl:{start:{line:4,column:98915},end:{line:4,column:98917}},loc:{start:{line:4,column:98928},end:{line:4,column:98959}},line:4},"1340":{name:"Ho",decl:{start:{line:4,column:98968},end:{line:4,column:98970}},loc:{start:{line:4,column:98979},end:{line:4,column:99248}},line:4},"1341":{name:"(anonymous_1341)",decl:{start:{line:4,column:99199},end:{line:4,column:99200}},loc:{start:{line:4,column:99204},end:{line:4,column:99220}},line:4},"1342":{name:"du",decl:{start:{line:4,column:99257},end:{line:4,column:99259}},loc:{start:{line:4,column:99270},end:{line:4,column:99344}},line:4},"1343":{name:"Ha",decl:{start:{line:4,column:99353},end:{line:4,column:99355}},loc:{start:{line:4,column:99357},end:{line:4,column:99576}},line:4},"1344":{name:"pf",decl:{start:{line:4,column:99585},end:{line:4,column:99587}},loc:{start:{line:4,column:99596},end:{line:4,column:99624}},line:4},"1345":{name:"Ba",decl:{start:{line:4,column:99633},end:{line:4,column:99635}},loc:{start:{line:4,column:99644},end:{line:4,column:99756}},line:4},"1346":{name:"$a",decl:{start:{line:4,column:99765},end:{line:4,column:99767}},loc:{start:{line:4,column:99769},end:{line:4,column:99815}},line:4},"1347":{name:"hf",decl:{start:{line:4,column:99824},end:{line:4,column:99826}},loc:{start:{line:4,column:99835},end:{line:4,column:99863}},line:4},"1348":{name:"(anonymous_1348)",decl:{start:{line:4,column:99870},end:{line:4,column:99871}},loc:{start:{line:4,column:99884},end:{line:4,column:99906}},line:4},"1349":{name:"vv",decl:{start:{line:4,column:99917},end:{line:4,column:99919}},loc:{start:{line:4,column:99921},end:{line:4,column:99933}},line:4},"1350":{name:"mf",decl:{start:{line:4,column:99942},end:{line:4,column:99944}},loc:{start:{line:4,column:99951},end:{line:4,column:100029}},line:4},"1351":{name:"Ev",decl:{start:{line:4,column:100052},end:{line:4,column:100054}},loc:{start:{line:4,column:100057},end:{line:4,column:100158}},line:4},"1352":{name:"Dv",decl:{start:{line:4,column:101010},end:{line:4,column:101012}},loc:{start:{line:4,column:101015},end:{line:4,column:101136}},line:4},"1353":{name:"fu",decl:{start:{line:4,column:101145},end:{line:4,column:101147}},loc:{start:{line:4,column:101150},end:{line:4,column:101248}},line:4},"1354":{name:"(anonymous_1354)",decl:{start:{line:4,column:101256},end:{line:4,column:101257}},loc:{start:{line:4,column:101267},end:{line:4,column:102065}},line:4},"1355":{name:"Cv",decl:{start:{line:4,column:102084},end:{line:4,column:102086}},loc:{start:{line:4,column:102089},end:{line:4,column:102131}},line:4},"1356":{name:"vf",decl:{start:{line:4,column:102165},end:{line:4,column:102167}},loc:{start:{line:4,column:102170},end:{line:4,column:102230}},line:4},"1357":{name:"Ef",decl:{start:{line:4,column:102239},end:{line:4,column:102241}},loc:{start:{line:4,column:102248},end:{line:4,column:102302}},line:4},"1358":{name:"If",decl:{start:{line:4,column:102311},end:{line:4,column:102313}},loc:{start:{line:4,column:102320},end:{line:4,column:102398}},line:4},"1359":{name:"Tv",decl:{start:{line:4,column:102407},end:{line:4,column:102409}},loc:{start:{line:4,column:102424},end:{line:4,column:102712}},line:4},"1360":{name:"bv",decl:{start:{line:4,column:102721},end:{line:4,column:102723}},loc:{start:{line:4,column:102728},end:{line:4,column:102742}},line:4},"1361":{name:"_v",decl:{start:{line:4,column:102751},end:{line:4,column:102753}},loc:{start:{line:4,column:102758},end:{line:4,column:102891}},line:4},"1362":{name:"Mv",decl:{start:{line:4,column:102900},end:{line:4,column:102902}},loc:{start:{line:4,column:102905},end:{line:4,column:103122}},line:4},"1363":{name:"Nv",decl:{start:{line:4,column:103131},end:{line:4,column:103133}},loc:{start:{line:4,column:103148},end:{line:4,column:103386}},line:4},"1364":{name:"Sv",decl:{start:{line:4,column:103395},end:{line:4,column:103397}},loc:{start:{line:4,column:103404},end:{line:4,column:103510}},line:4},"1365":{name:"Df",decl:{start:{line:4,column:103519},end:{line:4,column:103521}},loc:{start:{line:4,column:103530},end:{line:4,column:103553}},line:4},"1366":{name:"Cf",decl:{start:{line:4,column:103562},end:{line:4,column:103564}},loc:{start:{line:4,column:103571},end:{line:4,column:103592}},line:4},"1367":{name:"xv",decl:{start:{line:4,column:103601},end:{line:4,column:103603}},loc:{start:{line:4,column:103606},end:{line:4,column:103803}},line:4},"1368":{name:"Av",decl:{start:{line:4,column:103812},end:{line:4,column:103814}},loc:{start:{line:4,column:103816},end:{line:4,column:103837}},line:4},"1369":{name:"Rv",decl:{start:{line:4,column:103846},end:{line:4,column:103848}},loc:{start:{line:4,column:103851},end:{line:4,column:103880}},line:4},"1370":{name:"go",decl:{start:{line:4,column:103889},end:{line:4,column:103891}},loc:{start:{line:4,column:103896},end:{line:4,column:103915}},line:4},"1371":{name:"xt",decl:{start:{line:4,column:103924},end:{line:4,column:103926}},loc:{start:{line:4,column:103929},end:{line:4,column:103949}},line:4},"1372":{name:"kv",decl:{start:{line:4,column:103958},end:{line:4,column:103960}},loc:{start:{line:4,column:103963},end:{line:4,column:103979}},line:4},"1373":{name:"Ov",decl:{start:{line:4,column:103988},end:{line:4,column:103990}},loc:{start:{line:4,column:103995},end:{line:4,column:104018}},line:4},"1374":{name:"ha",decl:{start:{line:4,column:104027},end:{line:4,column:104029}},loc:{start:{line:4,column:104032},end:{line:4,column:104044}},line:4},"1375":{name:"nn",decl:{start:{line:4,column:104053},end:{line:4,column:104055}},loc:{start:{line:4,column:104058},end:{line:4,column:104079}},line:4},"1376":{name:"js",decl:{start:{line:4,column:104088},end:{line:4,column:104090}},loc:{start:{line:4,column:104095},end:{line:4,column:104118}},line:4},"1377":{name:"Pv",decl:{start:{line:4,column:104127},end:{line:4,column:104129}},loc:{start:{line:4,column:104132},end:{line:4,column:104149}},line:4},"1378":{name:"ga",decl:{start:{line:4,column:104158},end:{line:4,column:104160}},loc:{start:{line:4,column:104163},end:{line:4,column:104175}},line:4},"1379":{name:"Lv",decl:{start:{line:4,column:104184},end:{line:4,column:104186}},loc:{start:{line:4,column:104199},end:{line:4,column:104663}},line:4},"1380":{name:"Fv",decl:{start:{line:4,column:104672},end:{line:4,column:104674}},loc:{start:{line:4,column:104685},end:{line:4,column:104790}},line:4},"1381":{name:"pu",decl:{start:{line:4,column:104799},end:{line:4,column:104801}},loc:{start:{line:4,column:104810},end:{line:4,column:104981}},line:4},"1382":{name:"jv",decl:{start:{line:4,column:104990},end:{line:4,column:104992}},loc:{start:{line:4,column:104997},end:{line:4,column:105108}},line:4},"1383":{name:"Vv",decl:{start:{line:4,column:105170},end:{line:4,column:105172}},loc:{start:{line:4,column:105175},end:{line:4,column:105213}},line:4},"1384":{name:"Hv",decl:{start:{line:4,column:105222},end:{line:4,column:105224}},loc:{start:{line:4,column:105227},end:{line:4,column:105266}},line:4},"1385":{name:"wf",decl:{start:{line:4,column:105275},end:{line:4,column:105277}},loc:{start:{line:4,column:105282},end:{line:4,column:105357}},line:4},"1386":{name:"Bv",decl:{start:{line:4,column:105366},end:{line:4,column:105368}},loc:{start:{line:4,column:105371},end:{line:4,column:105438}},line:4},"1387":{name:"Tf",decl:{start:{line:4,column:105447},end:{line:4,column:105449}},loc:{start:{line:4,column:105456},end:{line:4,column:105501}},line:4},"1388":{name:"$v",decl:{start:{line:4,column:105510},end:{line:4,column:105512}},loc:{start:{line:4,column:105519},end:{line:4,column:105563}},line:4},"1389":{name:"bf",decl:{start:{line:4,column:105572},end:{line:4,column:105574}},loc:{start:{line:4,column:105581},end:{line:4,column:105605}},line:4},"1390":{name:"_f",decl:{start:{line:4,column:105614},end:{line:4,column:105616}},loc:{start:{line:4,column:105621},end:{line:4,column:105648}},line:4},"1391":{name:"Uv",decl:{start:{line:4,column:105657},end:{line:4,column:105659}},loc:{start:{line:4,column:105662},end:{line:4,column:105678}},line:4},"1392":{name:"Wv",decl:{start:{line:4,column:105687},end:{line:4,column:105689}},loc:{start:{line:4,column:105694},end:{line:4,column:105741}},line:4},"1393":{name:"Mf",decl:{start:{line:4,column:105750},end:{line:4,column:105752}},loc:{start:{line:4,column:105761},end:{line:4,column:105894}},line:4},"1394":{name:"qv",decl:{start:{line:4,column:105903},end:{line:4,column:105905}},loc:{start:{line:4,column:105914},end:{line:4,column:106177}},line:4},"1395":{name:"Nf",decl:{start:{line:4,column:106186},end:{line:4,column:106188}},loc:{start:{line:4,column:106193},end:{line:4,column:106224}},line:4},"1396":{name:"Sf",decl:{start:{line:4,column:106233},end:{line:4,column:106235}},loc:{start:{line:4,column:106244},end:{line:4,column:106361}},line:4},"1397":{name:"Gv",decl:{start:{line:4,column:106370},end:{line:4,column:106372}},loc:{start:{line:4,column:106381},end:{line:4,column:106796}},line:4},"1398":{name:"zv",decl:{start:{line:4,column:106805},end:{line:4,column:106807}},loc:{start:{line:4,column:106814},end:{line:4,column:106884}},line:4},"1399":{name:"Qv",decl:{start:{line:4,column:106893},end:{line:4,column:106895}},loc:{start:{line:4,column:106904},end:{line:4,column:106956}},line:4},"1400":{name:"Zv",decl:{start:{line:4,column:106965},end:{line:4,column:106967}},loc:{start:{line:4,column:106974},end:{line:4,column:107098}},line:4},"1401":{name:"Vs",decl:{start:{line:4,column:107107},end:{line:4,column:107109}},loc:{start:{line:4,column:107120},end:{line:4,column:107301}},line:4},"1402":{name:"Gn",decl:{start:{line:4,column:107310},end:{line:4,column:107312}},loc:{start:{line:4,column:107319},end:{line:4,column:107508}},line:4},"1403":{name:"Yv",decl:{start:{line:4,column:107517},end:{line:4,column:107519}},loc:{start:{line:4,column:107526},end:{line:4,column:107798}},line:4},"1404":{name:"Kv",decl:{start:{line:4,column:107807},end:{line:4,column:107809}},loc:{start:{line:4,column:107816},end:{line:4,column:107869}},line:4},"1405":{name:"Jv",decl:{start:{line:4,column:107878},end:{line:4,column:107880}},loc:{start:{line:4,column:107897},end:{line:4,column:108224}},line:4},"1406":{name:"xf",decl:{start:{line:4,column:108233},end:{line:4,column:108235}},loc:{start:{line:4,column:108252},end:{line:4,column:108412}},line:4},"1407":{name:"hu",decl:{start:{line:4,column:108421},end:{line:4,column:108423}},loc:{start:{line:4,column:108436},end:{line:4,column:108744}},line:4},"1408":{name:"Bo",decl:{start:{line:4,column:108753},end:{line:4,column:108755}},loc:{start:{line:4,column:108758},end:{line:4,column:108777}},line:4},"1409":{name:"Xv",decl:{start:{line:4,column:108786},end:{line:4,column:108788}},loc:{start:{line:4,column:108793},end:{line:4,column:108881}},line:4},"1410":{name:"Af",decl:{start:{line:4,column:108890},end:{line:4,column:108892}},loc:{start:{line:4,column:108897},end:{line:4,column:108927}},line:4},"1411":{name:"eE",decl:{start:{line:4,column:108936},end:{line:4,column:108938}},loc:{start:{line:4,column:108946},end:{line:4,column:109064}},line:4},"1412":{name:"(anonymous_1412)",decl:{start:{line:4,column:109071},end:{line:4,column:109072}},loc:{start:{line:4,column:109083},end:{line:4,column:109100}},line:4},"1413":{name:"Rf",decl:{start:{line:4,column:109111},end:{line:4,column:109113}},loc:{start:{line:4,column:109125},end:{line:4,column:109158}},line:4},"1414":{name:"nE",decl:{start:{line:4,column:109167},end:{line:4,column:109169}},loc:{start:{line:4,column:109185},end:{line:4,column:109246}},line:4},"1415":{name:"kf",decl:{start:{line:4,column:109255},end:{line:4,column:109257}},loc:{start:{line:4,column:109260},end:{line:4,column:109280}},line:4},"1416":{name:"Ua",decl:{start:{line:4,column:109289},end:{line:4,column:109291}},loc:{start:{line:4,column:109298},end:{line:4,column:109353}},line:4},"1417":{name:"Of",decl:{start:{line:4,column:109362},end:{line:4,column:109364}},loc:{start:{line:4,column:109375},end:{line:4,column:109434}},line:4},"1418":{name:"Pf",decl:{start:{line:4,column:109443},end:{line:4,column:109445}},loc:{start:{line:4,column:109452},end:{line:4,column:109480}},line:4},"1419":{name:"rE",decl:{start:{line:4,column:109489},end:{line:4,column:109491}},loc:{start:{line:4,column:109501},end:{line:4,column:109523}},line:4},"1420":{name:"gu",decl:{start:{line:4,column:109532},end:{line:4,column:109534}},loc:{start:{line:4,column:109541},end:{line:4,column:109604}},line:4},"1421":{name:"Lf",decl:{start:{line:4,column:109613},end:{line:4,column:109615}},loc:{start:{line:4,column:109626},end:{line:4,column:110423}},line:4},"1422":{name:"Hs",decl:{start:{line:4,column:110432},end:{line:4,column:110434}},loc:{start:{line:4,column:110443},end:{line:4,column:110663}},line:4},"1423":{name:"Ff",decl:{start:{line:4,column:110672},end:{line:4,column:110674}},loc:{start:{line:4,column:110681},end:{line:4,column:110733}},line:4},"1424":{name:"Bs",decl:{start:{line:4,column:110742},end:{line:4,column:110744}},loc:{start:{line:4,column:110753},end:{line:4,column:110804}},line:4},"1425":{name:"oE",decl:{start:{line:4,column:110813},end:{line:4,column:110815}},loc:{start:{line:4,column:110826},end:{line:4,column:110852}},line:4},"1426":{name:"iE",decl:{start:{line:4,column:110861},end:{line:4,column:110863}},loc:{start:{line:4,column:110874},end:{line:4,column:111097}},line:4},"1427":{name:"ma",decl:{start:{line:4,column:111106},end:{line:4,column:111108}},loc:{start:{line:4,column:111113},end:{line:4,column:111174}},line:4},"1428":{name:"sE",decl:{start:{line:4,column:111183},end:{line:4,column:111185}},loc:{start:{line:4,column:111198},end:{line:4,column:111292}},line:4},"1429":{name:"aE",decl:{start:{line:4,column:111301},end:{line:4,column:111303}},loc:{start:{line:4,column:111308},end:{line:4,column:111420}},line:4},"1430":{name:"(anonymous_1430)",decl:{start:{line:4,column:111316},end:{line:4,column:111317}},loc:{start:{line:4,column:111319},end:{line:4,column:111419}},line:4},"1431":{name:"(anonymous_1431)",decl:{start:{line:4,column:111340},end:{line:4,column:111341}},loc:{start:{line:4,column:111347},end:{line:4,column:111364}},line:4},"1432":{name:"(anonymous_1432)",decl:{start:{line:4,column:111393},end:{line:4,column:111394}},loc:{start:{line:4,column:111400},end:{line:4,column:111417}},line:4},"1433":{name:"cE",decl:{start:{line:4,column:111429},end:{line:4,column:111431}},loc:{start:{line:4,column:111436},end:{line:4,column:111492}},line:4},"1434":{name:"lE",decl:{start:{line:4,column:111501},end:{line:4,column:111503}},loc:{start:{line:4,column:111512},end:{line:4,column:111541}},line:4},"1435":{name:"jf",decl:{start:{line:4,column:111550},end:{line:4,column:111552}},loc:{start:{line:4,column:111557},end:{line:4,column:111591}},line:4},"1436":{name:"uE",decl:{start:{line:4,column:111600},end:{line:4,column:111602}},loc:{start:{line:4,column:111615},end:{line:4,column:111682}},line:4},"1437":{name:"Vf",decl:{start:{line:4,column:111691},end:{line:4,column:111693}},loc:{start:{line:4,column:111708},end:{line:4,column:111781}},line:4},"1438":{name:"dE",decl:{start:{line:4,column:111790},end:{line:4,column:111792}},loc:{start:{line:4,column:111797},end:{line:4,column:112057}},line:4},"1439":{name:"fE",decl:{start:{line:4,column:112066},end:{line:4,column:112068}},loc:{start:{line:4,column:112073},end:{line:4,column:112145}},line:4},"1440":{name:"pE",decl:{start:{line:4,column:112154},end:{line:4,column:112156}},loc:{start:{line:4,column:112163},end:{line:4,column:112249}},line:4},"1441":{name:"hE",decl:{start:{line:4,column:112258},end:{line:4,column:112260}},loc:{start:{line:4,column:112269},end:{line:4,column:112359}},line:4},"1442":{name:"Hf",decl:{start:{line:4,column:112368},end:{line:4,column:112370}},loc:{start:{line:4,column:112375},end:{line:4,column:112401}},line:4},"1443":{name:"gE",decl:{start:{line:4,column:112410},end:{line:4,column:112412}},loc:{start:{line:4,column:112417},end:{line:4,column:112433}},line:4},"1444":{name:"(anonymous_1444)",decl:{start:{line:4,column:112481},end:{line:4,column:112482}},loc:{start:{line:4,column:112497},end:{line:4,column:112547}},line:4},"1445":{name:"(anonymous_1445)",decl:{start:{line:4,column:112553},end:{line:4,column:112554}},loc:{start:{line:4,column:112557},end:{line:4,column:113132}},line:4},"1446":{name:"(anonymous_1446)",decl:{start:{line:4,column:112566},end:{line:4,column:112567}},loc:{start:{line:4,column:112586},end:{line:4,column:112604}},line:4},"1447":{name:"(anonymous_1447)",decl:{start:{line:4,column:112604},end:{line:4,column:112605}},loc:{start:{line:4,column:112625},end:{line:4,column:112676}},line:4},"1448":{name:"(anonymous_1448)",decl:{start:{line:4,column:112676},end:{line:4,column:112677}},loc:{start:{line:4,column:112712},end:{line:4,column:112855}},line:4},"1449":{name:"(anonymous_1449)",decl:{start:{line:4,column:112781},end:{line:4,column:112782}},loc:{start:{line:4,column:112788},end:{line:4,column:112831}},line:4},"1450":{name:"(anonymous_1450)",decl:{start:{line:4,column:112855},end:{line:4,column:112856}},loc:{start:{line:4,column:112892},end:{line:4,column:112959}},line:4},"1451":{name:"(anonymous_1451)",decl:{start:{line:4,column:112959},end:{line:4,column:112960}},loc:{start:{line:4,column:112971},end:{line:4,column:112973}},line:4},"1452":{name:"(anonymous_1452)",decl:{start:{line:4,column:112973},end:{line:4,column:112974}},loc:{start:{line:4,column:112989},end:{line:4,column:112991}},line:4},"1453":{name:"(anonymous_1453)",decl:{start:{line:4,column:112991},end:{line:4,column:112992}},loc:{start:{line:4,column:113005},end:{line:4,column:113007}},line:4},"1454":{name:"(anonymous_1454)",decl:{start:{line:4,column:113024},end:{line:4,column:113025}},loc:{start:{line:4,column:113035},end:{line:4,column:113053}},line:4},"1455":{name:"(anonymous_1455)",decl:{start:{line:4,column:113144},end:{line:4,column:113145}},loc:{start:{line:4,column:113148},end:{line:4,column:116003}},line:4},"1456":{name:"(anonymous_1456)",decl:{start:{line:4,column:113652},end:{line:4,column:113653}},loc:{start:{line:4,column:113665},end:{line:4,column:114045}},line:4},"1457":{name:"(anonymous_1457)",decl:{start:{line:4,column:113721},end:{line:4,column:113722}},loc:{start:{line:4,column:113725},end:{line:4,column:113945}},line:4},"1458":{name:"(anonymous_1458)",decl:{start:{line:4,column:114004},end:{line:4,column:114005}},loc:{start:{line:4,column:114008},end:{line:4,column:114042}},line:4},"1459":{name:"(anonymous_1459)",decl:{start:{line:4,column:114045},end:{line:4,column:114046}},loc:{start:{line:4,column:114073},end:{line:4,column:114249}},line:4},"1460":{name:"(anonymous_1460)",decl:{start:{line:4,column:114104},end:{line:4,column:114105}},loc:{start:{line:4,column:114108},end:{line:4,column:114247}},line:4},"1461":{name:"(anonymous_1461)",decl:{start:{line:4,column:114183},end:{line:4,column:114184}},loc:{start:{line:4,column:114187},end:{line:4,column:114245}},line:4},"1462":{name:"(anonymous_1462)",decl:{start:{line:4,column:114249},end:{line:4,column:114250}},loc:{start:{line:4,column:114258},end:{line:4,column:114971}},line:4},"1463":{name:"(anonymous_1463)",decl:{start:{line:4,column:114864},end:{line:4,column:114865}},loc:{start:{line:4,column:114868},end:{line:4,column:114886}},line:4},"1464":{name:"(anonymous_1464)",decl:{start:{line:4,column:114870},end:{line:4,column:114871}},loc:{start:{line:4,column:114874},end:{line:4,column:114885}},line:4},"1465":{name:"(anonymous_1465)",decl:{start:{line:4,column:114947},end:{line:4,column:114948}},loc:{start:{line:4,column:114951},end:{line:4,column:114969}},line:4},"1466":{name:"(anonymous_1466)",decl:{start:{line:4,column:114953},end:{line:4,column:114954}},loc:{start:{line:4,column:114957},end:{line:4,column:114968}},line:4},"1467":{name:"(anonymous_1467)",decl:{start:{line:4,column:114971},end:{line:4,column:114972}},loc:{start:{line:4,column:114991},end:{line:4,column:115184}},line:4},"1468":{name:"(anonymous_1468)",decl:{start:{line:4,column:115184},end:{line:4,column:115185}},loc:{start:{line:4,column:115190},end:{line:4,column:115594}},line:4},"1469":{name:"(anonymous_1469)",decl:{start:{line:4,column:115420},end:{line:4,column:115421}},loc:{start:{line:4,column:115424},end:{line:4,column:115465}},line:4},"1470":{name:"(anonymous_1470)",decl:{start:{line:4,column:115594},end:{line:4,column:115595}},loc:{start:{line:4,column:115607},end:{line:4,column:115656}},line:4},"1471":{name:"(anonymous_1471)",decl:{start:{line:4,column:115656},end:{line:4,column:115657}},loc:{start:{line:4,column:115665},end:{line:4,column:115878}},line:4},"1472":{name:"(anonymous_1472)",decl:{start:{line:4,column:115895},end:{line:4,column:115896}},loc:{start:{line:4,column:115906},end:{line:4,column:115924}},line:4},"1473":{name:"$f",decl:{start:{line:4,column:116016},end:{line:4,column:116018}},loc:{start:{line:4,column:116020},end:{line:4,column:116107}},line:4},"1474":{name:"yE",decl:{start:{line:4,column:116116},end:{line:4,column:116118}},loc:{start:{line:4,column:116120},end:{line:4,column:116171}},line:4},"1475":{name:"(anonymous_1475)",decl:{start:{line:4,column:116196},end:{line:4,column:116197}},loc:{start:{line:4,column:116200},end:{line:4,column:116237}},line:4},"1476":{name:"(anonymous_1476)",decl:{start:{line:4,column:116331},end:{line:4,column:116332}},loc:{start:{line:4,column:116344},end:{line:4,column:116416}},line:4},"1477":{name:"(anonymous_1477)",decl:{start:{line:4,column:116371},end:{line:4,column:116372}},loc:{start:{line:4,column:116375},end:{line:4,column:116414}},line:4},"1478":{name:"(anonymous_1478)",decl:{start:{line:4,column:116416},end:{line:4,column:116417}},loc:{start:{line:4,column:116428},end:{line:4,column:116604}},line:4},"1479":{name:"(anonymous_1479)",decl:{start:{line:4,column:116516},end:{line:4,column:116517}},loc:{start:{line:4,column:116520},end:{line:4,column:116602}},line:4},"1480":{name:"(anonymous_1480)",decl:{start:{line:4,column:116604},end:{line:4,column:116605}},loc:{start:{line:4,column:116611},end:{line:4,column:116808}},line:4},"1481":{name:"vE",decl:{start:{line:4,column:116819},end:{line:4,column:116821}},loc:{start:{line:4,column:116824},end:{line:4,column:116838}},line:4},"1482":{name:"EE",decl:{start:{line:4,column:116847},end:{line:4,column:116849}},loc:{start:{line:4,column:116854},end:{line:4,column:116877}},line:4},"1483":{name:"(anonymous_1483)",decl:{start:{line:4,column:116884},end:{line:4,column:116885}},loc:{start:{line:4,column:116887},end:{line:4,column:116888}},line:4},"1484":{name:"DE",decl:{start:{line:4,column:116898},end:{line:4,column:116900}},loc:{start:{line:4,column:116905},end:{line:4,column:117053}},line:4},"1485":{name:"Uf",decl:{start:{line:4,column:117062},end:{line:4,column:117064}},loc:{start:{line:4,column:117069},end:{line:4,column:117155}},line:4},"1486":{name:"(anonymous_1486)",decl:{start:{line:4,column:117098},end:{line:4,column:117099}},loc:{start:{line:4,column:117101},end:{line:4,column:117108}},line:4},"1487":{name:"(anonymous_1487)",decl:{start:{line:4,column:117118},end:{line:4,column:117119}},loc:{start:{line:4,column:117121},end:{line:4,column:117128}},line:4},"1488":{name:"(anonymous_1488)",decl:{start:{line:4,column:117228},end:{line:4,column:117229}},loc:{start:{line:4,column:117256},end:{line:4,column:117265}},line:4},"1489":{name:"Zf",decl:{start:{line:4,column:117277},end:{line:4,column:117279}},loc:{start:{line:4,column:117284},end:{line:4,column:117444}},line:4},"1490":{name:"r",decl:{start:{line:4,column:117355},end:{line:4,column:117356}},loc:{start:{line:4,column:117358},end:{line:4,column:117428}},line:4},"1491":{name:"(anonymous_1491)",decl:{start:{line:4,column:117471},end:{line:4,column:117472}},loc:{start:{line:4,column:117485},end:{line:4,column:117507}},line:4},"1492":{name:"(anonymous_1492)",decl:{start:{line:4,column:117525},end:{line:4,column:117526}},loc:{start:{line:4,column:117529},end:{line:4,column:117551}},line:4},"1493":{name:"(anonymous_1493)",decl:{start:{line:4,column:117552},end:{line:4,column:117553}},loc:{start:{line:4,column:117562},end:{line:4,column:117612}},line:4},"1494":{name:"hO",decl:{start:{line:4,column:117623},end:{line:4,column:117625}},loc:{start:{line:4,column:117628},end:{line:4,column:117643}},line:4},"1495":{name:"qf",decl:{start:{line:4,column:117652},end:{line:4,column:117654}},loc:{start:{line:4,column:117659},end:{line:4,column:117675}},line:4},"1496":{name:"wE",decl:{start:{line:4,column:117684},end:{line:4,column:117686}},loc:{start:{line:4,column:117689},end:{line:4,column:117706}},line:4},"1497":{name:"tr",decl:{start:{line:4,column:117772},end:{line:4,column:117774}},loc:{start:{line:4,column:117777},end:{line:4,column:117797}},line:4},"1498":{name:"bE",decl:{start:{line:4,column:117806},end:{line:4,column:117808}},loc:{start:{line:4,column:117811},end:{line:4,column:118758}},line:4},"1499":{name:"(anonymous_1499)",decl:{start:{line:4,column:117883},end:{line:4,column:117884}},loc:{start:{line:4,column:117887},end:{line:4,column:118756}},line:4},"1500":{name:"(anonymous_1500)",decl:{start:{line:4,column:118020},end:{line:4,column:118021}},loc:{start:{line:4,column:118024},end:{line:4,column:118057}},line:4},"1501":{name:"(anonymous_1501)",decl:{start:{line:4,column:118072},end:{line:4,column:118073}},loc:{start:{line:4,column:118076},end:{line:4,column:118087}},line:4},"1502":{name:"(anonymous_1502)",decl:{start:{line:4,column:118138},end:{line:4,column:118139}},loc:{start:{line:4,column:118142},end:{line:4,column:118171}},line:4},"1503":{name:"(anonymous_1503)",decl:{start:{line:4,column:118184},end:{line:4,column:118185}},loc:{start:{line:4,column:118188},end:{line:4,column:118209}},line:4},"1504":{name:"(anonymous_1504)",decl:{start:{line:4,column:118270},end:{line:4,column:118271}},loc:{start:{line:4,column:118274},end:{line:4,column:118340}},line:4},"1505":{name:"(anonymous_1505)",decl:{start:{line:4,column:118356},end:{line:4,column:118357}},loc:{start:{line:4,column:118360},end:{line:4,column:118754}},line:4},"1506":{name:"(anonymous_1506)",decl:{start:{line:4,column:118445},end:{line:4,column:118446}},loc:{start:{line:4,column:118449},end:{line:4,column:118725}},line:4},"1507":{name:"(anonymous_1507)",decl:{start:{line:4,column:118735},end:{line:4,column:118736}},loc:{start:{line:4,column:118739},end:{line:4,column:118752}},line:4},"1508":{name:"ME",decl:{start:{line:4,column:118774},end:{line:4,column:118776}},loc:{start:{line:4,column:118783},end:{line:4,column:118913}},line:4},"1509":{name:"(anonymous_1509)",decl:{start:{line:4,column:118819},end:{line:4,column:118820}},loc:{start:{line:4,column:118822},end:{line:4,column:118861}},line:4},"1510":{name:"(anonymous_1510)",decl:{start:{line:4,column:118849},end:{line:4,column:118850}},loc:{start:{line:4,column:118853},end:{line:4,column:118857}},line:4},"1511":{name:"(anonymous_1511)",decl:{start:{line:4,column:118900},end:{line:4,column:118901}},loc:{start:{line:4,column:118904},end:{line:4,column:118908}},line:4},"1512":{name:"NE",decl:{start:{line:4,column:118934},end:{line:4,column:118936}},loc:{start:{line:4,column:118944},end:{line:4,column:119067}},line:4},"1513":{name:"(anonymous_1513)",decl:{start:{line:4,column:119044},end:{line:4,column:119045}},loc:{start:{line:4,column:119048},end:{line:4,column:119055}},line:4},"1514":{name:"SE",decl:{start:{line:4,column:119076},end:{line:4,column:119078}},loc:{start:{line:4,column:119084},end:{line:4,column:119138}},line:4},"1515":{name:"xE",decl:{start:{line:4,column:119147},end:{line:4,column:119149}},loc:{start:{line:4,column:119152},end:{line:4,column:119205}},line:4},"1516":{name:"(anonymous_1516)",decl:{start:{line:4,column:119179},end:{line:4,column:119180}},loc:{start:{line:4,column:119183},end:{line:4,column:119203}},line:4},"1517":{name:"(anonymous_1517)",decl:{start:{line:4,column:119195},end:{line:4,column:119196}},loc:{start:{line:4,column:119198},end:{line:4,column:119201}},line:4},"1518":{name:"(anonymous_1518)",decl:{start:{line:4,column:119238},end:{line:4,column:119239}},loc:{start:{line:4,column:119242},end:{line:4,column:119288}},line:4},"1519":{name:"RE",decl:{start:{line:4,column:119301},end:{line:4,column:119303}},loc:{start:{line:4,column:119306},end:{line:4,column:119338}},line:4},"1520":{name:"kE",decl:{start:{line:4,column:119347},end:{line:4,column:119349}},loc:{start:{line:4,column:119356},end:{line:4,column:119472}},line:4},"1521":{name:"(anonymous_1521)",decl:{start:{line:4,column:119485},end:{line:4,column:119486}},loc:{start:{line:4,column:119496},end:{line:4,column:119510}},line:4},"1522":{name:"(anonymous_1522)",decl:{start:{line:4,column:119510},end:{line:4,column:119511}},loc:{start:{line:4,column:119519},end:{line:4,column:119537}},line:4},"1523":{name:"(anonymous_1523)",decl:{start:{line:4,column:119542},end:{line:4,column:119543}},loc:{start:{line:4,column:119549},end:{line:4,column:119550}},line:4},"1524":{name:"(anonymous_1524)",decl:{start:{line:4,column:119842},end:{line:4,column:119843}},loc:{start:{line:4,column:119856},end:{line:4,column:119879}},line:4},"1525":{name:"(anonymous_1525)",decl:{start:{line:4,column:119879},end:{line:4,column:119880}},loc:{start:{line:4,column:119893},end:{line:4,column:119943}},line:4},"1526":{name:"(anonymous_1526)",decl:{start:{line:4,column:119943},end:{line:4,column:119944}},loc:{start:{line:4,column:119962},end:{line:4,column:120338}},line:4},"1527":{name:"(anonymous_1527)",decl:{start:{line:4,column:120338},end:{line:4,column:120339}},loc:{start:{line:4,column:120360},end:{line:4,column:120426}},line:4},"1528":{name:"(anonymous_1528)",decl:{start:{line:4,column:120426},end:{line:4,column:120427}},loc:{start:{line:4,column:120445},end:{line:4,column:120507}},line:4},"1529":{name:"(anonymous_1529)",decl:{start:{line:4,column:120507},end:{line:4,column:120508}},loc:{start:{line:4,column:120526},end:{line:4,column:120584}},line:4},"1530":{name:"(anonymous_1530)",decl:{start:{line:4,column:120584},end:{line:4,column:120585}},loc:{start:{line:4,column:120605},end:{line:4,column:120668}},line:4},"1531":{name:"(anonymous_1531)",decl:{start:{line:4,column:120668},end:{line:4,column:120669}},loc:{start:{line:4,column:120692},end:{line:4,column:120769}},line:4},"1532":{name:"(anonymous_1532)",decl:{start:{line:4,column:120769},end:{line:4,column:120770}},loc:{start:{line:4,column:120776},end:{line:4,column:120854}},line:4},"1533":{name:"(anonymous_1533)",decl:{start:{line:4,column:120854},end:{line:4,column:120855}},loc:{start:{line:4,column:120865},end:{line:4,column:120867}},line:4},"1534":{name:"(anonymous_1534)",decl:{start:{line:4,column:120867},end:{line:4,column:120868}},loc:{start:{line:4,column:120875},end:{line:4,column:121481}},line:4},"1535":{name:"(anonymous_1535)",decl:{start:{line:4,column:121207},end:{line:4,column:121208}},loc:{start:{line:4,column:121210},end:{line:4,column:121409}},line:4},"1536":{name:"(anonymous_1536)",decl:{start:{line:4,column:121481},end:{line:4,column:121482}},loc:{start:{line:4,column:121494},end:{line:4,column:121614}},line:4},"1537":{name:"(anonymous_1537)",decl:{start:{line:4,column:121614},end:{line:4,column:121615}},loc:{start:{line:4,column:121622},end:{line:4,column:122070}},line:4},"1538":{name:"(anonymous_1538)",decl:{start:{line:4,column:122070},end:{line:4,column:122071}},loc:{start:{line:4,column:122088},end:{line:4,column:122497}},line:4},"1539":{name:"(anonymous_1539)",decl:{start:{line:4,column:122497},end:{line:4,column:122498}},loc:{start:{line:4,column:122524},end:{line:4,column:122712}},line:4},"1540":{name:"(anonymous_1540)",decl:{start:{line:4,column:122712},end:{line:4,column:122713}},loc:{start:{line:4,column:122724},end:{line:4,column:123180}},line:4},"1541":{name:"(anonymous_1541)",decl:{start:{line:4,column:123180},end:{line:4,column:123181}},loc:{start:{line:4,column:123201},end:{line:4,column:123452}},line:4},"1542":{name:"(anonymous_1542)",decl:{start:{line:4,column:123452},end:{line:4,column:123453}},loc:{start:{line:4,column:123469},end:{line:4,column:123542}},line:4},"1543":{name:"(anonymous_1543)",decl:{start:{line:4,column:123542},end:{line:4,column:123543}},loc:{start:{line:4,column:123558},end:{line:4,column:123715}},line:4},"1544":{name:"(anonymous_1544)",decl:{start:{line:4,column:123715},end:{line:4,column:123716}},loc:{start:{line:4,column:123734},end:{line:4,column:123969}},line:4},"1545":{name:"(anonymous_1545)",decl:{start:{line:4,column:123969},end:{line:4,column:123970}},loc:{start:{line:4,column:123979},end:{line:4,column:124024}},line:4},"1546":{name:"(anonymous_1546)",decl:{start:{line:4,column:124024},end:{line:4,column:124025}},loc:{start:{line:4,column:124034},end:{line:4,column:124194}},line:4},"1547":{name:"(anonymous_1547)",decl:{start:{line:4,column:124194},end:{line:4,column:124195}},loc:{start:{line:4,column:124210},end:{line:4,column:124345}},line:4},"1548":{name:"(anonymous_1548)",decl:{start:{line:4,column:124345},end:{line:4,column:124346}},loc:{start:{line:4,column:124362},end:{line:4,column:124679}},line:4},"1549":{name:"(anonymous_1549)",decl:{start:{line:4,column:124679},end:{line:4,column:124680}},loc:{start:{line:4,column:124702},end:{line:4,column:124882}},line:4},"1550":{name:"(anonymous_1550)",decl:{start:{line:4,column:125107},end:{line:4,column:125108}},loc:{start:{line:4,column:125123},end:{line:4,column:125153}},line:4},"1551":{name:"(anonymous_1551)",decl:{start:{line:4,column:125186},end:{line:4,column:125187}},loc:{start:{line:4,column:125192},end:{line:4,column:125344}},line:4},"1552":{name:"(anonymous_1552)",decl:{start:{line:4,column:125344},end:{line:4,column:125345}},loc:{start:{line:4,column:125352},end:{line:4,column:125478}},line:4},"1553":{name:"(anonymous_1553)",decl:{start:{line:4,column:125478},end:{line:4,column:125479}},loc:{start:{line:4,column:125487},end:{line:4,column:125613}},line:4},"1554":{name:"(anonymous_1554)",decl:{start:{line:4,column:125636},end:{line:4,column:125637}},loc:{start:{line:4,column:125642},end:{line:4,column:125720}},line:4},"1555":{name:"(anonymous_1555)",decl:{start:{line:4,column:125720},end:{line:4,column:125721}},loc:{start:{line:4,column:125728},end:{line:4,column:125780}},line:4},"1556":{name:"(anonymous_1556)",decl:{start:{line:4,column:125780},end:{line:4,column:125781}},loc:{start:{line:4,column:125789},end:{line:4,column:125863}},line:4},"1557":{name:"(anonymous_1557)",decl:{start:{line:4,column:125863},end:{line:4,column:125864}},loc:{start:{line:4,column:125876},end:{line:4,column:125902}},line:4},"1558":{name:"(anonymous_1558)",decl:{start:{line:4,column:125902},end:{line:4,column:125903}},loc:{start:{line:4,column:125909},end:{line:4,column:125927}},line:4},"1559":{name:"Gf",decl:{start:{line:4,column:125938},end:{line:4,column:125940}},loc:{start:{line:4,column:125947},end:{line:4,column:126036}},line:4},"1560":{name:"zf",decl:{start:{line:4,column:126045},end:{line:4,column:126047}},loc:{start:{line:4,column:126049},end:{line:4,column:126074}},line:4},"1561":{name:"(anonymous_1561)",decl:{start:{line:4,column:126082},end:{line:4,column:126083}},loc:{start:{line:4,column:126086},end:{line:4,column:126502}},line:4},"1562":{name:"(anonymous_1562)",decl:{start:{line:4,column:126165},end:{line:4,column:126166}},loc:{start:{line:4,column:126179},end:{line:4,column:126197}},line:4},"1563":{name:"(anonymous_1563)",decl:{start:{line:4,column:126197},end:{line:4,column:126198}},loc:{start:{line:4,column:126215},end:{line:4,column:126284}},line:4},"1564":{name:"(anonymous_1564)",decl:{start:{line:4,column:126284},end:{line:4,column:126285}},loc:{start:{line:4,column:126300},end:{line:4,column:126400}},line:4},"1565":{name:"(anonymous_1565)",decl:{start:{line:4,column:126329},end:{line:4,column:126330}},loc:{start:{line:4,column:126333},end:{line:4,column:126398}},line:4},"1566":{name:"(anonymous_1566)",decl:{start:{line:4,column:126400},end:{line:4,column:126401}},loc:{start:{line:4,column:126407},end:{line:4,column:126492}},line:4},"1567":{name:"(anonymous_1567)",decl:{start:{line:4,column:126434},end:{line:4,column:126435}},loc:{start:{line:4,column:126437},end:{line:4,column:126450}},line:4},"1568":{name:"vO",decl:{start:{line:4,column:126515},end:{line:4,column:126517}},loc:{start:{line:4,column:126520},end:{line:4,column:126892}},line:4},"1569":{name:"EO",decl:{start:{line:4,column:126901},end:{line:4,column:126903}},loc:{start:{line:4,column:126906},end:{line:4,column:126957}},line:4},"1570":{name:"IO",decl:{start:{line:4,column:126966},end:{line:4,column:126968}},loc:{start:{line:4,column:126971},end:{line:4,column:127284}},line:4},"1571":{name:"(anonymous_1571)",decl:{start:{line:4,column:127025},end:{line:4,column:127026}},loc:{start:{line:4,column:127039},end:{line:4,column:127058}},line:4},"1572":{name:"(anonymous_1572)",decl:{start:{line:4,column:127059},end:{line:4,column:127060}},loc:{start:{line:4,column:127069},end:{line:4,column:127093}},line:4},"1573":{name:"(anonymous_1573)",decl:{start:{line:4,column:127094},end:{line:4,column:127095}},loc:{start:{line:4,column:127106},end:{line:4,column:127123}},line:4},"1574":{name:"(anonymous_1574)",decl:{start:{line:4,column:127124},end:{line:4,column:127125}},loc:{start:{line:4,column:127137},end:{line:4,column:127155}},line:4},"1575":{name:"(anonymous_1575)",decl:{start:{line:4,column:127156},end:{line:4,column:127157}},loc:{start:{line:4,column:127180},end:{line:4,column:127209}},line:4},"1576":{name:"(anonymous_1576)",decl:{start:{line:4,column:127210},end:{line:4,column:127211}},loc:{start:{line:4,column:127228},end:{line:4,column:127249}},line:4},"1577":{name:"(anonymous_1577)",decl:{start:{line:4,column:127250},end:{line:4,column:127251}},loc:{start:{line:4,column:127264},end:{line:4,column:127282}},line:4},"1578":{name:"Ya",decl:{start:{line:4,column:127305},end:{line:4,column:127307}},loc:{start:{line:4,column:127309},end:{line:4,column:127320}},line:4},"1579":{name:"MO",decl:{start:{line:4,column:127329},end:{line:4,column:127331}},loc:{start:{line:4,column:127334},end:{line:4,column:127342}},line:4},"1580":{name:"(anonymous_1580)",decl:{start:{line:4,column:127361},end:{line:4,column:127362}},loc:{start:{line:4,column:127365},end:{line:4,column:127534}},line:4},"1581":{name:"(anonymous_1581)",decl:{start:{line:4,column:127374},end:{line:4,column:127375}},loc:{start:{line:4,column:127386},end:{line:4,column:127407}},line:4},"1582":{name:"(anonymous_1582)",decl:{start:{line:4,column:127424},end:{line:4,column:127425}},loc:{start:{line:4,column:127435},end:{line:4,column:127453}},line:4},"1583":{name:"(anonymous_1583)",decl:{start:{line:4,column:127491},end:{line:4,column:127492}},loc:{start:{line:4,column:127495},end:{line:4,column:127500}},line:4},"1584":{name:"(anonymous_1584)",decl:{start:{line:4,column:127555},end:{line:4,column:127556}},loc:{start:{line:4,column:127559},end:{line:4,column:128751}},line:4},"1585":{name:"(anonymous_1585)",decl:{start:{line:4,column:127609},end:{line:4,column:127610}},loc:{start:{line:4,column:127622},end:{line:4,column:127691}},line:4},"1586":{name:"(anonymous_1586)",decl:{start:{line:4,column:127691},end:{line:4,column:127692}},loc:{start:{line:4,column:127711},end:{line:4,column:127747}},line:4},"1587":{name:"(anonymous_1587)",decl:{start:{line:4,column:127747},end:{line:4,column:127748}},loc:{start:{line:4,column:127760},end:{line:4,column:127896}},line:4},"1588":{name:"(anonymous_1588)",decl:{start:{line:4,column:127856},end:{line:4,column:127857}},loc:{start:{line:4,column:127860},end:{line:4,column:127895}},line:4},"1589":{name:"(anonymous_1589)",decl:{start:{line:4,column:127896},end:{line:4,column:127897}},loc:{start:{line:4,column:127911},end:{line:4,column:128051}},line:4},"1590":{name:"(anonymous_1590)",decl:{start:{line:4,column:128009},end:{line:4,column:128010}},loc:{start:{line:4,column:128013},end:{line:4,column:128050}},line:4},"1591":{name:"(anonymous_1591)",decl:{start:{line:4,column:128051},end:{line:4,column:128052}},loc:{start:{line:4,column:128061},end:{line:4,column:128089}},line:4},"1592":{name:"(anonymous_1592)",decl:{start:{line:4,column:128089},end:{line:4,column:128090}},loc:{start:{line:4,column:128103},end:{line:4,column:128135}},line:4},"1593":{name:"(anonymous_1593)",decl:{start:{line:4,column:128135},end:{line:4,column:128136}},loc:{start:{line:4,column:128149},end:{line:4,column:128181}},line:4},"1594":{name:"(anonymous_1594)",decl:{start:{line:4,column:128181},end:{line:4,column:128182}},loc:{start:{line:4,column:128191},end:{line:4,column:128219}},line:4},"1595":{name:"(anonymous_1595)",decl:{start:{line:4,column:128219},end:{line:4,column:128220}},loc:{start:{line:4,column:128233},end:{line:4,column:128265}},line:4},"1596":{name:"(anonymous_1596)",decl:{start:{line:4,column:128265},end:{line:4,column:128266}},loc:{start:{line:4,column:128277},end:{line:4,column:128307}},line:4},"1597":{name:"(anonymous_1597)",decl:{start:{line:4,column:128307},end:{line:4,column:128308}},loc:{start:{line:4,column:128317},end:{line:4,column:128345}},line:4},"1598":{name:"(anonymous_1598)",decl:{start:{line:4,column:128345},end:{line:4,column:128346}},loc:{start:{line:4,column:128360},end:{line:4,column:128387}},line:4},"1599":{name:"(anonymous_1599)",decl:{start:{line:4,column:128387},end:{line:4,column:128388}},loc:{start:{line:4,column:128403},end:{line:4,column:128435}},line:4},"1600":{name:"(anonymous_1600)",decl:{start:{line:4,column:128435},end:{line:4,column:128436}},loc:{start:{line:4,column:128454},end:{line:4,column:128489}},line:4},"1601":{name:"(anonymous_1601)",decl:{start:{line:4,column:128489},end:{line:4,column:128490}},loc:{start:{line:4,column:128498},end:{line:4,column:128523}},line:4},"1602":{name:"(anonymous_1602)",decl:{start:{line:4,column:128523},end:{line:4,column:128524}},loc:{start:{line:4,column:128529},end:{line:4,column:128551}},line:4},"1603":{name:"(anonymous_1603)",decl:{start:{line:4,column:128551},end:{line:4,column:128552}},loc:{start:{line:4,column:128565},end:{line:4,column:128586}},line:4},"1604":{name:"(anonymous_1604)",decl:{start:{line:4,column:128586},end:{line:4,column:128587}},loc:{start:{line:4,column:128596},end:{line:4,column:128624}},line:4},"1605":{name:"(anonymous_1605)",decl:{start:{line:4,column:128641},end:{line:4,column:128642}},loc:{start:{line:4,column:128652},end:{line:4,column:128670}},line:4},"1606":{name:"(anonymous_1606)",decl:{start:{line:4,column:128708},end:{line:4,column:128709}},loc:{start:{line:4,column:128712},end:{line:4,column:128717}},line:4},"1607":{name:"xO",decl:{start:{line:4,column:128764},end:{line:4,column:128766}},loc:{start:{line:4,column:128771},end:{line:4,column:128948}},line:4}},branchMap:{"0":{loc:{start:{line:1,column:282},end:{line:3,column:9}},type:"cond-expr",locations:[{start:{line:1,column:284},end:{line:3,column:6}},{start:{line:3,column:7},end:{line:3,column:9}}],line:1},"1":{loc:{start:{line:3,column:75},end:{line:3,column:120}},type:"if",locations:[{start:{line:3,column:75},end:{line:3,column:120}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"2":{loc:{start:{line:3,column:100},end:{line:3,column:119}},type:"binary-expr",locations:[{start:{line:3,column:100},end:{line:3,column:104}},{start:{line:3,column:106},end:{line:3,column:119}}],line:3},"3":{loc:{start:{line:3,column:251},end:{line:3,column:649}},type:"if",locations:[{start:{line:3,column:251},end:{line:3,column:649}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"4":{loc:{start:{line:3,column:306},end:{line:3,column:402}},type:"if",locations:[{start:{line:3,column:306},end:{line:3,column:402}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"5":{loc:{start:{line:3,column:311},end:{line:3,column:402}},type:"if",locations:[{start:{line:3,column:311},end:{line:3,column:402}},{start:{line:3,column:387},end:{line:3,column:402}}],line:3},"6":{loc:{start:{line:3,column:430},end:{line:3,column:486}},type:"if",locations:[{start:{line:3,column:430},end:{line:3,column:486}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"7":{loc:{start:{line:3,column:457},end:{line:3,column:485}},type:"cond-expr",locations:[{start:{line:3,column:473},end:{line:3,column:481}},{start:{line:3,column:482},end:{line:3,column:485}}],line:3},"8":{loc:{start:{line:3,column:510},end:{line:3,column:628}},type:"if",locations:[{start:{line:3,column:510},end:{line:3,column:628}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"9":{loc:{start:{line:3,column:574},end:{line:3,column:579}},type:"binary-expr",locations:[{start:{line:3,column:574},end:{line:3,column:575}},{start:{line:3,column:577},end:{line:3,column:579}}],line:3},"10":{loc:{start:{line:3,column:580},end:{line:3,column:626}},type:"cond-expr",locations:[{start:{line:3,column:596},end:{line:3,column:616}},{start:{line:3,column:617},end:{line:3,column:626}}],line:3},"11":{loc:{start:{line:3,column:628},end:{line:3,column:648}},type:"if",locations:[{start:{line:3,column:628},end:{line:3,column:648}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"12":{loc:{start:{line:3,column:663},end:{line:3,column:853}},type:"if",locations:[{start:{line:3,column:663},end:{line:3,column:853}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"13":{loc:{start:{line:3,column:666},end:{line:3,column:677}},type:"binary-expr",locations:[{start:{line:3,column:666},end:{line:3,column:667}},{start:{line:3,column:669},end:{line:3,column:677}}],line:3},"14":{loc:{start:{line:3,column:678},end:{line:3,column:853}},type:"if",locations:[{start:{line:3,column:678},end:{line:3,column:853}},{start:{line:3,column:703},end:{line:3,column:853}}],line:3},"15":{loc:{start:{line:3,column:704},end:{line:3,column:781}},type:"if",locations:[{start:{line:3,column:704},end:{line:3,column:781}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"16":{loc:{start:{line:3,column:723},end:{line:3,column:762}},type:"if",locations:[{start:{line:3,column:723},end:{line:3,column:762}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"17":{loc:{start:{line:3,column:726},end:{line:3,column:754}},type:"binary-expr",locations:[{start:{line:3,column:726},end:{line:3,column:734}},{start:{line:3,column:736},end:{line:3,column:754}}],line:3},"18":{loc:{start:{line:3,column:799},end:{line:3,column:843}},type:"cond-expr",locations:[{start:{line:3,column:839},end:{line:3,column:840}},{start:{line:3,column:841},end:{line:3,column:843}}],line:3},"19":{loc:{start:{line:3,column:799},end:{line:3,column:838}},type:"binary-expr",locations:[{start:{line:3,column:799},end:{line:3,column:826}},{start:{line:3,column:828},end:{line:3,column:838}}],line:3},"20":{loc:{start:{line:3,column:898},end:{line:3,column:936}},type:"binary-expr",locations:[{start:{line:3,column:898},end:{line:3,column:903}},{start:{line:3,column:905},end:{line:3,column:921}},{start:{line:3,column:923},end:{line:3,column:936}}],line:3},"21":{loc:{start:{line:3,column:990},end:{line:3,column:1030}},type:"cond-expr",locations:[{start:{line:3,column:1008},end:{line:3,column:1019}},{start:{line:3,column:1021},end:{line:3,column:1030}}],line:3},"22":{loc:{start:{line:3,column:1021},end:{line:3,column:1030}},type:"cond-expr",locations:[{start:{line:3,column:1023},end:{line:3,column:1028}},{start:{line:3,column:1029},end:{line:3,column:1030}}],line:3},"23":{loc:{start:{line:3,column:1071},end:{line:3,column:1123}},type:"cond-expr",locations:[{start:{line:3,column:1077},end:{line:3,column:1097}},{start:{line:3,column:1098},end:{line:3,column:1123}}],line:3},"24":{loc:{start:{line:3,column:1098},end:{line:3,column:1123}},type:"binary-expr",locations:[{start:{line:3,column:1098},end:{line:3,column:1114}},{start:{line:3,column:1116},end:{line:3,column:1123}}],line:3},"25":{loc:{start:{line:3,column:1158},end:{line:3,column:1168}},type:"binary-expr",locations:[{start:{line:3,column:1158},end:{line:3,column:1159}},{start:{line:3,column:1161},end:{line:3,column:1168}}],line:3},"26":{loc:{start:{line:3,column:1169},end:{line:3,column:1206}},type:"binary-expr",locations:[{start:{line:3,column:1169},end:{line:3,column:1183}},{start:{line:3,column:1185},end:{line:3,column:1206}}],line:3},"27":{loc:{start:{line:3,column:1297},end:{line:3,column:1369}},type:"binary-expr",locations:[{start:{line:3,column:1297},end:{line:3,column:1311}},{start:{line:3,column:1313},end:{line:3,column:1314}},{start:{line:3,column:1316},end:{line:3,column:1328}},{start:{line:3,column:1330},end:{line:3,column:1341}},{start:{line:3,column:1343},end:{line:3,column:1351}},{start:{line:3,column:1353},end:{line:3,column:1369}}],line:3},"28":{loc:{start:{line:3,column:1385},end:{line:3,column:1409}},type:"cond-expr",locations:[{start:{line:3,column:1390},end:{line:3,column:1393}},{start:{line:3,column:1394},end:{line:3,column:1409}}],line:3},"29":{loc:{start:{line:3,column:1607},end:{line:3,column:1664}},type:"cond-expr",locations:[{start:{line:3,column:1621},end:{line:3,column:1643}},{start:{line:3,column:1644},end:{line:3,column:1664}}],line:3},"30":{loc:{start:{line:3,column:1708},end:{line:3,column:1737}},type:"binary-expr",locations:[{start:{line:3,column:1708},end:{line:3,column:1723}},{start:{line:3,column:1725},end:{line:3,column:1737}}],line:3},"31":{loc:{start:{line:3,column:1821},end:{line:3,column:1843}},type:"if",locations:[{start:{line:3,column:1821},end:{line:3,column:1843}},{start:{line:3,column:1836},end:{line:3,column:1843}}],line:3},"32":{loc:{start:{line:3,column:2045},end:{line:3,column:2206}},type:"if",locations:[{start:{line:3,column:2045},end:{line:3,column:2206}},{start:{line:3,column:2203},end:{line:3,column:2206}}],line:3},"33":{loc:{start:{line:3,column:2100},end:{line:3,column:2197}},type:"if",locations:[{start:{line:3,column:2100},end:{line:3,column:2197}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"34":{loc:{start:{line:3,column:2103},end:{line:3,column:2138}},type:"binary-expr",locations:[{start:{line:3,column:2103},end:{line:3,column:2104}},{start:{line:3,column:2107},end:{line:3,column:2137}}],line:3},"35":{loc:{start:{line:3,column:2176},end:{line:3,column:2196}},type:"if",locations:[{start:{line:3,column:2176},end:{line:3,column:2196}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"36":{loc:{start:{line:3,column:2222},end:{line:3,column:2298}},type:"binary-expr",locations:[{start:{line:3,column:2222},end:{line:3,column:2262}},{start:{line:3,column:2264},end:{line:3,column:2266}},{start:{line:3,column:2269},end:{line:3,column:2297}}],line:3},"37":{loc:{start:{line:3,column:2363},end:{line:3,column:2424}},type:"cond-expr",locations:[{start:{line:3,column:2366},end:{line:3,column:2403}},{start:{line:3,column:2405},end:{line:3,column:2424}}],line:3},"38":{loc:{start:{line:3,column:2385},end:{line:3,column:2403}},type:"binary-expr",locations:[{start:{line:3,column:2385},end:{line:3,column:2390}},{start:{line:3,column:2392},end:{line:3,column:2403}}],line:3},"39":{loc:{start:{line:3,column:2475},end:{line:3,column:2518}},type:"cond-expr",locations:[{start:{line:3,column:2490},end:{line:3,column:2504}},{start:{line:3,column:2505},end:{line:3,column:2518}}],line:3},"40":{loc:{start:{line:3,column:2528},end:{line:3,column:2592}},type:"cond-expr",locations:[{start:{line:3,column:2543},end:{line:3,column:2557}},{start:{line:3,column:2559},end:{line:3,column:2591}}],line:3},"41":{loc:{start:{line:3,column:2604},end:{line:3,column:2667}},type:"cond-expr",locations:[{start:{line:3,column:2619},end:{line:3,column:2630}},{start:{line:3,column:2632},end:{line:3,column:2666}}],line:3},"42":{loc:{start:{line:3,column:2682},end:{line:3,column:2756}},type:"binary-expr",locations:[{start:{line:3,column:2682},end:{line:3,column:2693}},{start:{line:3,column:2696},end:{line:3,column:2755}}],line:3},"43":{loc:{start:{line:3,column:3084},end:{line:3,column:3123}},type:"if",locations:[{start:{line:3,column:3084},end:{line:3,column:3123}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"44":{loc:{start:{line:3,column:3161},end:{line:3,column:3212}},type:"if",locations:[{start:{line:3,column:3161},end:{line:3,column:3212}},{start:{line:3,column:3207},end:{line:3,column:3212}}],line:3},"45":{loc:{start:{line:3,column:3252},end:{line:3,column:3298}},type:"if",locations:[{start:{line:3,column:3252},end:{line:3,column:3298}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"46":{loc:{start:{line:3,column:3354},end:{line:3,column:3624}},type:"if",locations:[{start:{line:3,column:3354},end:{line:3,column:3624}},{start:{line:3,column:3424},end:{line:3,column:3624}}],line:3},"47":{loc:{start:{line:3,column:3357},end:{line:3,column:3365}},type:"binary-expr",locations:[{start:{line:3,column:3357},end:{line:3,column:3361}},{start:{line:3,column:3363},end:{line:3,column:3365}}],line:3},"48":{loc:{start:{line:3,column:3374},end:{line:3,column:3383}},type:"binary-expr",locations:[{start:{line:3,column:3374},end:{line:3,column:3375}},{start:{line:3,column:3377},end:{line:3,column:3383}}],line:3},"49":{loc:{start:{line:3,column:3390},end:{line:3,column:3399}},type:"binary-expr",locations:[{start:{line:3,column:3390},end:{line:3,column:3391}},{start:{line:3,column:3393},end:{line:3,column:3399}}],line:3},"50":{loc:{start:{line:3,column:3409},end:{line:3,column:3418}},type:"binary-expr",locations:[{start:{line:3,column:3409},end:{line:3,column:3410}},{start:{line:3,column:3412},end:{line:3,column:3418}}],line:3},"51":{loc:{start:{line:3,column:3431},end:{line:3,column:3623}},type:"cond-expr",locations:[{start:{line:3,column:3466},end:{line:3,column:3618}},{start:{line:3,column:3620},end:{line:3,column:3623}}],line:3},"52":{loc:{start:{line:3,column:3431},end:{line:3,column:3464}},type:"binary-expr",locations:[{start:{line:3,column:3431},end:{line:3,column:3435}},{start:{line:3,column:3437},end:{line:3,column:3464}}],line:3},"53":{loc:{start:{line:3,column:3530},end:{line:3,column:3550}},type:"binary-expr",locations:[{start:{line:3,column:3530},end:{line:3,column:3536}},{start:{line:3,column:3538},end:{line:3,column:3550}}],line:3},"54":{loc:{start:{line:3,column:3557},end:{line:3,column:3579}},type:"binary-expr",locations:[{start:{line:3,column:3557},end:{line:3,column:3564}},{start:{line:3,column:3566},end:{line:3,column:3579}}],line:3},"55":{loc:{start:{line:3,column:3589},end:{line:3,column:3617}},type:"binary-expr",locations:[{start:{line:3,column:3589},end:{line:3,column:3599}},{start:{line:3,column:3601},end:{line:3,column:3617}}],line:3},"56":{loc:{start:{line:3,column:3668},end:{line:3,column:3720}},type:"cond-expr",locations:[{start:{line:3,column:3709},end:{line:3,column:3714}},{start:{line:3,column:3715},end:{line:3,column:3720}}],line:3},"57":{loc:{start:{line:3,column:3793},end:{line:3,column:3821}},type:"binary-expr",locations:[{start:{line:3,column:3793},end:{line:3,column:3794}},{start:{line:3,column:3796},end:{line:3,column:3821}}],line:3},"58":{loc:{start:{line:3,column:3877},end:{line:3,column:3937}},type:"binary-expr",locations:[{start:{line:3,column:3877},end:{line:3,column:3902}},{start:{line:3,column:3904},end:{line:3,column:3921}},{start:{line:3,column:3923},end:{line:3,column:3937}}],line:3},"59":{loc:{start:{line:3,column:4015},end:{line:3,column:4092}},type:"cond-expr",locations:[{start:{line:3,column:4028},end:{line:3,column:4030}},{start:{line:3,column:4031},end:{line:3,column:4092}}],line:3},"60":{loc:{start:{line:3,column:4031},end:{line:3,column:4092}},type:"cond-expr",locations:[{start:{line:3,column:4044},end:{line:3,column:4048}},{start:{line:3,column:4049},end:{line:3,column:4092}}],line:3},"61":{loc:{start:{line:3,column:4128},end:{line:3,column:4150}},type:"binary-expr",locations:[{start:{line:3,column:4128},end:{line:3,column:4129}},{start:{line:3,column:4132},end:{line:3,column:4149}}],line:3},"62":{loc:{start:{line:3,column:4230},end:{line:3,column:4251}},type:"cond-expr",locations:[{start:{line:3,column:4236},end:{line:3,column:4237}},{start:{line:3,column:4238},end:{line:3,column:4251}}],line:3},"63":{loc:{start:{line:3,column:4303},end:{line:3,column:4359}},type:"cond-expr",locations:[{start:{line:3,column:4305},end:{line:3,column:4316}},{start:{line:3,column:4317},end:{line:3,column:4359}}],line:3},"64":{loc:{start:{line:3,column:4317},end:{line:3,column:4359}},type:"cond-expr",locations:[{start:{line:3,column:4319},end:{line:3,column:4337}},{start:{line:3,column:4338},end:{line:3,column:4359}}],line:3},"65":{loc:{start:{line:3,column:4606},end:{line:3,column:4662}},type:"cond-expr",locations:[{start:{line:3,column:4641},end:{line:3,column:4647}},{start:{line:3,column:4648},end:{line:3,column:4662}}],line:3},"66":{loc:{start:{line:3,column:4606},end:{line:3,column:4640}},type:"binary-expr",locations:[{start:{line:3,column:4606},end:{line:3,column:4628}},{start:{line:3,column:4630},end:{line:3,column:4640}}],line:3},"67":{loc:{start:{line:3,column:4864},end:{line:3,column:4910}},type:"cond-expr",locations:[{start:{line:3,column:4901},end:{line:3,column:4902}},{start:{line:3,column:4903},end:{line:3,column:4910}}],line:3},"68":{loc:{start:{line:3,column:4864},end:{line:3,column:4900}},type:"binary-expr",locations:[{start:{line:3,column:4864},end:{line:3,column:4888}},{start:{line:3,column:4890},end:{line:3,column:4900}}],line:3},"69":{loc:{start:{line:3,column:4867},end:{line:3,column:4880}},type:"binary-expr",locations:[{start:{line:3,column:4867},end:{line:3,column:4868}},{start:{line:3,column:4870},end:{line:3,column:4880}}],line:3},"70":{loc:{start:{line:3,column:4933},end:{line:3,column:4972}},type:"binary-expr",locations:[{start:{line:3,column:4933},end:{line:3,column:4934}},{start:{line:3,column:4936},end:{line:3,column:4945}},{start:{line:3,column:4947},end:{line:3,column:4957}},{start:{line:3,column:4959},end:{line:3,column:4972}}],line:3},"71":{loc:{start:{line:3,column:4995},end:{line:3,column:5027}},type:"binary-expr",locations:[{start:{line:3,column:4995},end:{line:3,column:4996}},{start:{line:3,column:4998},end:{line:3,column:5013}},{start:{line:3,column:5015},end:{line:3,column:5020}},{start:{line:3,column:5022},end:{line:3,column:5027}}],line:3},"72":{loc:{start:{line:3,column:5374},end:{line:3,column:5401}},type:"if",locations:[{start:{line:3,column:5374},end:{line:3,column:5401}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"73":{loc:{start:{line:3,column:5418},end:{line:3,column:5579}},type:"if",locations:[{start:{line:3,column:5418},end:{line:3,column:5579}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"74":{loc:{start:{line:3,column:5460},end:{line:3,column:5533}},type:"binary-expr",locations:[{start:{line:3,column:5460},end:{line:3,column:5481}},{start:{line:3,column:5484},end:{line:3,column:5532}}],line:3},"75":{loc:{start:{line:3,column:5599},end:{line:3,column:5748}},type:"if",locations:[{start:{line:3,column:5599},end:{line:3,column:5748}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"76":{loc:{start:{line:3,column:5770},end:{line:3,column:5888}},type:"if",locations:[{start:{line:3,column:5770},end:{line:3,column:5888}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"77":{loc:{start:{line:3,column:6005},end:{line:3,column:6058}},type:"cond-expr",locations:[{start:{line:3,column:6043},end:{line:3,column:6049}},{start:{line:3,column:6050},end:{line:3,column:6058}}],line:3},"78":{loc:{start:{line:3,column:6005},end:{line:3,column:6042}},type:"binary-expr",locations:[{start:{line:3,column:6005},end:{line:3,column:6030}},{start:{line:3,column:6032},end:{line:3,column:6042}}],line:3},"79":{loc:{start:{line:3,column:6301},end:{line:3,column:6395}},type:"cond-expr",locations:[{start:{line:3,column:6306},end:{line:3,column:6308}},{start:{line:3,column:6310},end:{line:3,column:6394}}],line:3},"80":{loc:{start:{line:3,column:6301},end:{line:3,column:6305}},type:"binary-expr",locations:[{start:{line:3,column:6301},end:{line:3,column:6302}},{start:{line:3,column:6304},end:{line:3,column:6305}}],line:3},"81":{loc:{start:{line:3,column:6470},end:{line:3,column:6498}},type:"cond-expr",locations:[{start:{line:3,column:6472},end:{line:3,column:6482}},{start:{line:3,column:6483},end:{line:3,column:6498}}],line:3},"82":{loc:{start:{line:3,column:6483},end:{line:3,column:6498}},type:"binary-expr",locations:[{start:{line:3,column:6483},end:{line:3,column:6484}},{start:{line:3,column:6486},end:{line:3,column:6498}}],line:3},"83":{loc:{start:{line:3,column:6685},end:{line:3,column:6774}},type:"binary-expr",locations:[{start:{line:3,column:6685},end:{line:3,column:6749}},{start:{line:3,column:6751},end:{line:3,column:6761}},{start:{line:3,column:6763},end:{line:3,column:6774}}],line:3},"84":{loc:{start:{line:3,column:6688},end:{line:3,column:6741}},type:"cond-expr",locations:[{start:{line:3,column:6728},end:{line:3,column:6734}},{start:{line:3,column:6735},end:{line:3,column:6741}}],line:3},"85":{loc:{start:{line:3,column:6688},end:{line:3,column:6727}},type:"binary-expr",locations:[{start:{line:3,column:6688},end:{line:3,column:6715}},{start:{line:3,column:6717},end:{line:3,column:6727}}],line:3},"86":{loc:{start:{line:3,column:6792},end:{line:3,column:6882}},type:"binary-expr",locations:[{start:{line:3,column:6792},end:{line:3,column:6857}},{start:{line:3,column:6859},end:{line:3,column:6869}},{start:{line:3,column:6871},end:{line:3,column:6882}}],line:3},"87":{loc:{start:{line:3,column:6795},end:{line:3,column:6849}},type:"cond-expr",locations:[{start:{line:3,column:6835},end:{line:3,column:6841}},{start:{line:3,column:6842},end:{line:3,column:6849}}],line:3},"88":{loc:{start:{line:3,column:6795},end:{line:3,column:6834}},type:"binary-expr",locations:[{start:{line:3,column:6795},end:{line:3,column:6822}},{start:{line:3,column:6824},end:{line:3,column:6834}}],line:3},"89":{loc:{start:{line:3,column:6902},end:{line:3,column:6993}},type:"binary-expr",locations:[{start:{line:3,column:6902},end:{line:3,column:6970}},{start:{line:3,column:6972},end:{line:3,column:6982}},{start:{line:3,column:6984},end:{line:3,column:6993}}],line:3},"90":{loc:{start:{line:3,column:6905},end:{line:3,column:6962}},type:"cond-expr",locations:[{start:{line:3,column:6945},end:{line:3,column:6951}},{start:{line:3,column:6952},end:{line:3,column:6962}}],line:3},"91":{loc:{start:{line:3,column:6905},end:{line:3,column:6944}},type:"binary-expr",locations:[{start:{line:3,column:6905},end:{line:3,column:6932}},{start:{line:3,column:6934},end:{line:3,column:6944}}],line:3},"92":{loc:{start:{line:3,column:7022},end:{line:3,column:7106}},type:"cond-expr",locations:[{start:{line:3,column:7102},end:{line:3,column:7103}},{start:{line:3,column:7104},end:{line:3,column:7106}}],line:3},"93":{loc:{start:{line:3,column:7022},end:{line:3,column:7101}},type:"binary-expr",locations:[{start:{line:3,column:7022},end:{line:3,column:7089}},{start:{line:3,column:7091},end:{line:3,column:7101}}],line:3},"94":{loc:{start:{line:3,column:7025},end:{line:3,column:7081}},type:"cond-expr",locations:[{start:{line:3,column:7060},end:{line:3,column:7066}},{start:{line:3,column:7067},end:{line:3,column:7081}}],line:3},"95":{loc:{start:{line:3,column:7025},end:{line:3,column:7059}},type:"binary-expr",locations:[{start:{line:3,column:7025},end:{line:3,column:7047}},{start:{line:3,column:7049},end:{line:3,column:7059}}],line:3},"96":{loc:{start:{line:3,column:7251},end:{line:3,column:7281}},type:"binary-expr",locations:[{start:{line:3,column:7251},end:{line:3,column:7260}},{start:{line:3,column:7262},end:{line:3,column:7281}}],line:3},"97":{loc:{start:{line:3,column:7339},end:{line:3,column:7352}},type:"if",locations:[{start:{line:3,column:7339},end:{line:3,column:7352}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"98":{loc:{start:{line:3,column:7441},end:{line:3,column:7457}},type:"binary-expr",locations:[{start:{line:3,column:7441},end:{line:3,column:7442}},{start:{line:3,column:7444},end:{line:3,column:7457}}],line:3},"99":{loc:{start:{line:3,column:7516},end:{line:3,column:7539}},type:"cond-expr",locations:[{start:{line:3,column:7525},end:{line:3,column:7532}},{start:{line:3,column:7533},end:{line:3,column:7539}}],line:3},"100":{loc:{start:{line:3,column:7562},end:{line:3,column:7586}},type:"cond-expr",locations:[{start:{line:3,column:7572},end:{line:3,column:7579}},{start:{line:3,column:7580},end:{line:3,column:7586}}],line:3},"101":{loc:{start:{line:3,column:7629},end:{line:3,column:7670}},type:"cond-expr",locations:[{start:{line:3,column:7644},end:{line:3,column:7645}},{start:{line:3,column:7646},end:{line:3,column:7670}}],line:3},"102":{loc:{start:{line:3,column:7682},end:{line:3,column:7696}},type:"binary-expr",locations:[{start:{line:3,column:7682},end:{line:3,column:7683}},{start:{line:3,column:7686},end:{line:3,column:7695}}],line:3},"103":{loc:{start:{line:3,column:7819},end:{line:3,column:7857}},type:"cond-expr",locations:[{start:{line:3,column:7826},end:{line:3,column:7836}},{start:{line:3,column:7837},end:{line:3,column:7857}}],line:3},"104":{loc:{start:{line:3,column:7873},end:{line:3,column:7878}},type:"binary-expr",locations:[{start:{line:3,column:7873},end:{line:3,column:7874}},{start:{line:3,column:7876},end:{line:3,column:7878}}],line:3},"105":{loc:{start:{line:3,column:7912},end:{line:3,column:7954}},type:"binary-expr",locations:[{start:{line:3,column:7912},end:{line:3,column:7937}},{start:{line:3,column:7939},end:{line:3,column:7954}}],line:3},"106":{loc:{start:{line:3,column:7957},end:{line:3,column:7964}},type:"binary-expr",locations:[{start:{line:3,column:7957},end:{line:3,column:7958}},{start:{line:3,column:7960},end:{line:3,column:7964}}],line:3},"107":{loc:{start:{line:3,column:7969},end:{line:3,column:7991}},type:"if",locations:[{start:{line:3,column:7969},end:{line:3,column:7991}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"108":{loc:{start:{line:3,column:7991},end:{line:3,column:8108}},type:"if",locations:[{start:{line:3,column:7991},end:{line:3,column:8108}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"109":{loc:{start:{line:3,column:7994},end:{line:3,column:8022}},type:"binary-expr",locations:[{start:{line:3,column:7994},end:{line:3,column:7995}},{start:{line:3,column:7997},end:{line:3,column:8022}}],line:3},"110":{loc:{start:{line:3,column:8053},end:{line:3,column:8079}},type:"binary-expr",locations:[{start:{line:3,column:8053},end:{line:3,column:8054}},{start:{line:3,column:8056},end:{line:3,column:8067}},{start:{line:3,column:8070},end:{line:3,column:8078}}],line:3},"111":{loc:{start:{line:3,column:8087},end:{line:3,column:8096}},type:"binary-expr",locations:[{start:{line:3,column:8087},end:{line:3,column:8088}},{start:{line:3,column:8090},end:{line:3,column:8096}}],line:3},"112":{loc:{start:{line:3,column:8128},end:{line:3,column:8189}},type:"cond-expr",locations:[{start:{line:3,column:8130},end:{line:3,column:8155}},{start:{line:3,column:8156},end:{line:3,column:8189}}],line:3},"113":{loc:{start:{line:3,column:8213},end:{line:3,column:8257}},type:"cond-expr",locations:[{start:{line:3,column:8233},end:{line:3,column:8246}},{start:{line:3,column:8248},end:{line:3,column:8257}}],line:3},"114":{loc:{start:{line:3,column:8277},end:{line:3,column:8362}},type:"if",locations:[{start:{line:3,column:8277},end:{line:3,column:8362}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"115":{loc:{start:{line:3,column:8378},end:{line:3,column:8383}},type:"binary-expr",locations:[{start:{line:3,column:8378},end:{line:3,column:8379}},{start:{line:3,column:8381},end:{line:3,column:8383}}],line:3},"116":{loc:{start:{line:3,column:8416},end:{line:3,column:8469}},type:"cond-expr",locations:[{start:{line:3,column:8449},end:{line:3,column:8462}},{start:{line:3,column:8463},end:{line:3,column:8469}}],line:3},"117":{loc:{start:{line:3,column:8653},end:{line:3,column:8759}},type:"binary-expr",locations:[{start:{line:3,column:8653},end:{line:3,column:8657}},{start:{line:3,column:8660},end:{line:3,column:8758}}],line:3},"118":{loc:{start:{line:3,column:8710},end:{line:3,column:8737}},type:"binary-expr",locations:[{start:{line:3,column:8710},end:{line:3,column:8729}},{start:{line:3,column:8731},end:{line:3,column:8737}}],line:3},"119":{loc:{start:{line:3,column:8741},end:{line:3,column:8758}},type:"binary-expr",locations:[{start:{line:3,column:8741},end:{line:3,column:8742}},{start:{line:3,column:8745},end:{line:3,column:8757}}],line:3},"120":{loc:{start:{line:3,column:8828},end:{line:3,column:8899}},type:"cond-expr",locations:[{start:{line:3,column:8850},end:{line:3,column:8886}},{start:{line:3,column:8887},end:{line:3,column:8899}}],line:3},"121":{loc:{start:{line:3,column:8984},end:{line:3,column:9012}},type:"binary-expr",locations:[{start:{line:3,column:8984},end:{line:3,column:8992}},{start:{line:3,column:8994},end:{line:3,column:9012}}],line:3},"122":{loc:{start:{line:3,column:9029},end:{line:3,column:9114}},type:"if",locations:[{start:{line:3,column:9029},end:{line:3,column:9114}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"123":{loc:{start:{line:3,column:9153},end:{line:3,column:9305}},type:"cond-expr",locations:[{start:{line:3,column:9155},end:{line:3,column:9164}},{start:{line:3,column:9166},end:{line:3,column:9304}}],line:3},"124":{loc:{start:{line:3,column:9168},end:{line:3,column:9216}},type:"cond-expr",locations:[{start:{line:3,column:9190},end:{line:3,column:9195}},{start:{line:3,column:9196},end:{line:3,column:9216}}],line:3},"125":{loc:{start:{line:3,column:9325},end:{line:3,column:9410}},type:"binary-expr",locations:[{start:{line:3,column:9325},end:{line:3,column:9329}},{start:{line:3,column:9331},end:{line:3,column:9410}}],line:3},"126":{loc:{start:{line:3,column:9502},end:{line:3,column:9552}},type:"binary-expr",locations:[{start:{line:3,column:9502},end:{line:3,column:9503}},{start:{line:3,column:9505},end:{line:3,column:9530}},{start:{line:3,column:9532},end:{line:3,column:9552}}],line:3},"127":{loc:{start:{line:3,column:9639},end:{line:3,column:9689}},type:"binary-expr",locations:[{start:{line:3,column:9639},end:{line:3,column:9659}},{start:{line:3,column:9661},end:{line:3,column:9689}}],line:3},"128":{loc:{start:{line:3,column:9742},end:{line:3,column:9799}},type:"cond-expr",locations:[{start:{line:3,column:9771},end:{line:3,column:9790}},{start:{line:3,column:9791},end:{line:3,column:9799}}],line:3},"129":{loc:{start:{line:3,column:9742},end:{line:3,column:9770}},type:"binary-expr",locations:[{start:{line:3,column:9742},end:{line:3,column:9750}},{start:{line:3,column:9752},end:{line:3,column:9770}}],line:3},"130":{loc:{start:{line:3,column:9944},end:{line:3,column:10016}},type:"cond-expr",locations:[{start:{line:3,column:9988},end:{line:3,column:10000}},{start:{line:3,column:10001},end:{line:3,column:10016}}],line:3},"131":{loc:{start:{line:3,column:9944},end:{line:3,column:9987}},type:"binary-expr",locations:[{start:{line:3,column:9944},end:{line:3,column:9969}},{start:{line:3,column:9971},end:{line:3,column:9987}}],line:3},"132":{loc:{start:{line:3,column:10185},end:{line:3,column:10214}},type:"if",locations:[{start:{line:3,column:10185},end:{line:3,column:10214}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"133":{loc:{start:{line:3,column:10312},end:{line:3,column:10339}},type:"if",locations:[{start:{line:3,column:10312},end:{line:3,column:10339}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"134":{loc:{start:{line:3,column:10339},end:{line:3,column:10483}},type:"if",locations:[{start:{line:3,column:10339},end:{line:3,column:10483}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"135":{loc:{start:{line:3,column:10351},end:{line:3,column:10373}},type:"if",locations:[{start:{line:3,column:10351},end:{line:3,column:10373}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"136":{loc:{start:{line:3,column:10373},end:{line:3,column:10395}},type:"if",locations:[{start:{line:3,column:10373},end:{line:3,column:10395}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"137":{loc:{start:{line:3,column:10395},end:{line:3,column:10417}},type:"if",locations:[{start:{line:3,column:10395},end:{line:3,column:10417}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"138":{loc:{start:{line:3,column:10417},end:{line:3,column:10439}},type:"if",locations:[{start:{line:3,column:10417},end:{line:3,column:10439}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"139":{loc:{start:{line:3,column:10439},end:{line:3,column:10461}},type:"if",locations:[{start:{line:3,column:10439},end:{line:3,column:10461}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"140":{loc:{start:{line:3,column:10461},end:{line:3,column:10482}},type:"if",locations:[{start:{line:3,column:10461},end:{line:3,column:10482}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"141":{loc:{start:{line:3,column:10541},end:{line:3,column:10581}},type:"if",locations:[{start:{line:3,column:10541},end:{line:3,column:10581}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"142":{loc:{start:{line:3,column:10713},end:{line:3,column:10734}},type:"binary-expr",locations:[{start:{line:3,column:10713},end:{line:3,column:10723}},{start:{line:3,column:10725},end:{line:3,column:10734}}],line:3},"143":{loc:{start:{line:3,column:10810},end:{line:3,column:10844}},type:"binary-expr",locations:[{start:{line:3,column:10810},end:{line:3,column:10818}},{start:{line:3,column:10821},end:{line:3,column:10843}}],line:3},"144":{loc:{start:{line:3,column:10924},end:{line:3,column:10953}},type:"if",locations:[{start:{line:3,column:10924},end:{line:3,column:10953}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"145":{loc:{start:{line:3,column:11190},end:{line:3,column:11218}},type:"if",locations:[{start:{line:3,column:11190},end:{line:3,column:11218}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"146":{loc:{start:{line:3,column:11253},end:{line:3,column:11296}},type:"binary-expr",locations:[{start:{line:3,column:11253},end:{line:3,column:11254}},{start:{line:3,column:11256},end:{line:3,column:11263}},{start:{line:3,column:11266},end:{line:3,column:11276}},{start:{line:3,column:11280},end:{line:3,column:11295}}],line:3},"147":{loc:{start:{line:3,column:11305},end:{line:3,column:11323}},type:"if",locations:[{start:{line:3,column:11305},end:{line:3,column:11323}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"148":{loc:{start:{line:3,column:11357},end:{line:3,column:11360}},type:"default-arg",locations:[{start:{line:3,column:11359},end:{line:3,column:11360}}],line:3},"149":{loc:{start:{line:3,column:11361},end:{line:3,column:11365}},type:"default-arg",locations:[{start:{line:3,column:11363},end:{line:3,column:11365}}],line:3},"150":{loc:{start:{line:3,column:11399},end:{line:3,column:11448}},type:"cond-expr",locations:[{start:{line:3,column:11401},end:{line:3,column:11429}},{start:{line:3,column:11430},end:{line:3,column:11448}}],line:3},"151":{loc:{start:{line:3,column:11453},end:{line:3,column:11476}},type:"if",locations:[{start:{line:3,column:11453},end:{line:3,column:11476}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"152":{loc:{start:{line:3,column:11535},end:{line:3,column:11617}},type:"if",locations:[{start:{line:3,column:11535},end:{line:3,column:11617}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"153":{loc:{start:{line:3,column:11839},end:{line:3,column:11895}},type:"cond-expr",locations:[{start:{line:3,column:11841},end:{line:3,column:11883}},{start:{line:3,column:11884},end:{line:3,column:11895}}],line:3},"154":{loc:{start:{line:3,column:11908},end:{line:3,column:11992}},type:"cond-expr",locations:[{start:{line:3,column:11910},end:{line:3,column:11979}},{start:{line:3,column:11980},end:{line:3,column:11992}}],line:3},"155":{loc:{start:{line:3,column:12008},end:{line:3,column:12093}},type:"cond-expr",locations:[{start:{line:3,column:12010},end:{line:3,column:12077}},{start:{line:3,column:12078},end:{line:3,column:12093}}],line:3},"156":{loc:{start:{line:3,column:12114},end:{line:3,column:12266}},type:"if",locations:[{start:{line:3,column:12114},end:{line:3,column:12266}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"157":{loc:{start:{line:3,column:12117},end:{line:3,column:12166}},type:"binary-expr",locations:[{start:{line:3,column:12117},end:{line:3,column:12140}},{start:{line:3,column:12142},end:{line:3,column:12166}}],line:3},"158":{loc:{start:{line:3,column:12207},end:{line:3,column:12265}},type:"binary-expr",locations:[{start:{line:3,column:12207},end:{line:3,column:12209}},{start:{line:3,column:12212},end:{line:3,column:12238}},{start:{line:3,column:12240},end:{line:3,column:12250}},{start:{line:3,column:12252},end:{line:3,column:12264}}],line:3},"159":{loc:{start:{line:3,column:12283},end:{line:3,column:12286}},type:"default-arg",locations:[{start:{line:3,column:12285},end:{line:3,column:12286}}],line:3},"160":{loc:{start:{line:3,column:12422},end:{line:3,column:12425}},type:"default-arg",locations:[{start:{line:3,column:12424},end:{line:3,column:12425}}],line:3},"161":{loc:{start:{line:3,column:12651},end:{line:3,column:12719}},type:"cond-expr",locations:[{start:{line:3,column:12664},end:{line:3,column:12676}},{start:{line:3,column:12678},end:{line:3,column:12718}}],line:3},"162":{loc:{start:{line:3,column:12693},end:{line:3,column:12718}},type:"binary-expr",locations:[{start:{line:3,column:12693},end:{line:3,column:12701}},{start:{line:3,column:12703},end:{line:3,column:12718}}],line:3},"163":{loc:{start:{line:3,column:12870},end:{line:3,column:12894}},type:"cond-expr",locations:[{start:{line:3,column:12872},end:{line:3,column:12884}},{start:{line:3,column:12885},end:{line:3,column:12894}}],line:3},"164":{loc:{start:{line:3,column:12908},end:{line:3,column:12932}},type:"binary-expr",locations:[{start:{line:3,column:12908},end:{line:3,column:12920}},{start:{line:3,column:12922},end:{line:3,column:12932}}],line:3},"165":{loc:{start:{line:3,column:12952},end:{line:3,column:13001}},type:"if",locations:[{start:{line:3,column:12952},end:{line:3,column:13001}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"166":{loc:{start:{line:3,column:13090},end:{line:3,column:13125}},type:"cond-expr",locations:[{start:{line:3,column:13097},end:{line:3,column:13109}},{start:{line:3,column:13110},end:{line:3,column:13125}}],line:3},"167":{loc:{start:{line:3,column:13192},end:{line:3,column:13348}},type:"if",locations:[{start:{line:3,column:13192},end:{line:3,column:13348}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"168":{loc:{start:{line:3,column:13204},end:{line:3,column:13228}},type:"if",locations:[{start:{line:3,column:13204},end:{line:3,column:13228}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"169":{loc:{start:{line:3,column:13228},end:{line:3,column:13252}},type:"if",locations:[{start:{line:3,column:13228},end:{line:3,column:13252}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"170":{loc:{start:{line:3,column:13252},end:{line:3,column:13276}},type:"if",locations:[{start:{line:3,column:13252},end:{line:3,column:13276}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"171":{loc:{start:{line:3,column:13276},end:{line:3,column:13300}},type:"if",locations:[{start:{line:3,column:13276},end:{line:3,column:13300}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"172":{loc:{start:{line:3,column:13300},end:{line:3,column:13324}},type:"if",locations:[{start:{line:3,column:13300},end:{line:3,column:13324}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"173":{loc:{start:{line:3,column:13324},end:{line:3,column:13347}},type:"if",locations:[{start:{line:3,column:13324},end:{line:3,column:13347}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"174":{loc:{start:{line:3,column:13384},end:{line:3,column:13398}},type:"cond-expr",locations:[{start:{line:3,column:13386},end:{line:3,column:13393}},{start:{line:3,column:13394},end:{line:3,column:13398}}],line:3},"175":{loc:{start:{line:3,column:13593},end:{line:3,column:13623}},type:"binary-expr",locations:[{start:{line:3,column:13593},end:{line:3,column:13594}},{start:{line:3,column:13596},end:{line:3,column:13605}},{start:{line:3,column:13607},end:{line:3,column:13609}},{start:{line:3,column:13611},end:{line:3,column:13623}}],line:3},"176":{loc:{start:{line:3,column:13630},end:{line:3,column:13648}},type:"cond-expr",locations:[{start:{line:3,column:13634},end:{line:3,column:13638}},{start:{line:3,column:13639},end:{line:3,column:13648}}],line:3},"177":{loc:{start:{line:3,column:13655},end:{line:3,column:13667}},type:"binary-expr",locations:[{start:{line:3,column:13655},end:{line:3,column:13656}},{start:{line:3,column:13658},end:{line:3,column:13667}}],line:3},"178":{loc:{start:{line:3,column:13718},end:{line:3,column:13734}},type:"cond-expr",locations:[{start:{line:3,column:13720},end:{line:3,column:13724}},{start:{line:3,column:13725},end:{line:3,column:13734}}],line:3},"179":{loc:{start:{line:3,column:13759},end:{line:3,column:13855}},type:"if",locations:[{start:{line:3,column:13759},end:{line:3,column:13855}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"180":{loc:{start:{line:3,column:13776},end:{line:3,column:13789}},type:"binary-expr",locations:[{start:{line:3,column:13776},end:{line:3,column:13784}},{start:{line:3,column:13786},end:{line:3,column:13789}}],line:3},"181":{loc:{start:{line:3,column:13808},end:{line:3,column:13830}},type:"cond-expr",locations:[{start:{line:3,column:13810},end:{line:3,column:13825}},{start:{line:3,column:13826},end:{line:3,column:13830}}],line:3},"182":{loc:{start:{line:3,column:13930},end:{line:3,column:13935}},type:"default-arg",locations:[{start:{line:3,column:13932},end:{line:3,column:13935}}],line:3},"183":{loc:{start:{line:3,column:13944},end:{line:3,column:14044}},type:"cond-expr",locations:[{start:{line:3,column:13949},end:{line:3,column:13994}},{start:{line:3,column:13996},end:{line:3,column:14043}}],line:3},"184":{loc:{start:{line:3,column:13996},end:{line:3,column:14021}},type:"binary-expr",locations:[{start:{line:3,column:13996},end:{line:3,column:14014}},{start:{line:3,column:14017},end:{line:3,column:14020}}],line:3},"185":{loc:{start:{line:3,column:14091},end:{line:3,column:14109}},type:"cond-expr",locations:[{start:{line:3,column:14097},end:{line:3,column:14104}},{start:{line:3,column:14105},end:{line:3,column:14109}}],line:3},"186":{loc:{start:{line:3,column:14270},end:{line:3,column:14325}},type:"if",locations:[{start:{line:3,column:14270},end:{line:3,column:14325}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"187":{loc:{start:{line:3,column:14273},end:{line:3,column:14293}},type:"binary-expr",locations:[{start:{line:3,column:14273},end:{line:3,column:14277}},{start:{line:3,column:14280},end:{line:3,column:14292}}],line:3},"188":{loc:{start:{line:3,column:14334},end:{line:3,column:14412}},type:"cond-expr",locations:[{start:{line:3,column:14340},end:{line:3,column:14365}},{start:{line:3,column:14366},end:{line:3,column:14412}}],line:3},"189":{loc:{start:{line:3,column:14366},end:{line:3,column:14412}},type:"cond-expr",locations:[{start:{line:3,column:14372},end:{line:3,column:14387}},{start:{line:3,column:14388},end:{line:3,column:14412}}],line:3},"190":{loc:{start:{line:3,column:14388},end:{line:3,column:14412}},type:"cond-expr",locations:[{start:{line:3,column:14394},end:{line:3,column:14409}},{start:{line:3,column:14410},end:{line:3,column:14412}}],line:3},"191":{loc:{start:{line:3,column:14413},end:{line:3,column:14456}},type:"if",locations:[{start:{line:3,column:14413},end:{line:3,column:14456}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"192":{loc:{start:{line:3,column:14416},end:{line:3,column:14425}},type:"binary-expr",locations:[{start:{line:3,column:14416},end:{line:3,column:14418}},{start:{line:3,column:14420},end:{line:3,column:14425}}],line:3},"193":{loc:{start:{line:3,column:14456},end:{line:3,column:14506}},type:"if",locations:[{start:{line:3,column:14456},end:{line:3,column:14506}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"194":{loc:{start:{line:3,column:14544},end:{line:3,column:14561}},type:"cond-expr",locations:[{start:{line:3,column:14555},end:{line:3,column:14556}},{start:{line:3,column:14557},end:{line:3,column:14561}}],line:3},"195":{loc:{start:{line:3,column:14648},end:{line:3,column:14685}},type:"binary-expr",locations:[{start:{line:3,column:14648},end:{line:3,column:14664}},{start:{line:3,column:14666},end:{line:3,column:14685}}],line:3},"196":{loc:{start:{line:3,column:14708},end:{line:3,column:14725}},type:"binary-expr",locations:[{start:{line:3,column:14708},end:{line:3,column:14715}},{start:{line:3,column:14717},end:{line:3,column:14725}}],line:3},"197":{loc:{start:{line:3,column:14748},end:{line:3,column:14795}},type:"binary-expr",locations:[{start:{line:3,column:14748},end:{line:3,column:14769}},{start:{line:3,column:14771},end:{line:3,column:14795}}],line:3},"198":{loc:{start:{line:3,column:14857},end:{line:3,column:14883}},type:"binary-expr",locations:[{start:{line:3,column:14857},end:{line:3,column:14872}},{start:{line:3,column:14874},end:{line:3,column:14883}}],line:3},"199":{loc:{start:{line:3,column:14993},end:{line:3,column:15039}},type:"cond-expr",locations:[{start:{line:3,column:14996},end:{line:3,column:15033}},{start:{line:3,column:15035},end:{line:3,column:15039}}],line:3},"200":{loc:{start:{line:3,column:15043},end:{line:3,column:15085}},type:"binary-expr",locations:[{start:{line:3,column:15043},end:{line:3,column:15044}},{start:{line:3,column:15047},end:{line:3,column:15084}}],line:3},"201":{loc:{start:{line:3,column:15140},end:{line:3,column:15233}},type:"cond-expr",locations:[{start:{line:3,column:15145},end:{line:3,column:15151}},{start:{line:3,column:15152},end:{line:3,column:15233}}],line:3},"202":{loc:{start:{line:3,column:15190},end:{line:3,column:15228}},type:"binary-expr",locations:[{start:{line:3,column:15190},end:{line:3,column:15196}},{start:{line:3,column:15199},end:{line:3,column:15227}}],line:3},"203":{loc:{start:{line:3,column:15209},end:{line:3,column:15227}},type:"binary-expr",locations:[{start:{line:3,column:15209},end:{line:3,column:15213}},{start:{line:3,column:15215},end:{line:3,column:15227}}],line:3},"204":{loc:{start:{line:3,column:15317},end:{line:3,column:15322}},type:"default-arg",locations:[{start:{line:3,column:15319},end:{line:3,column:15322}}],line:3},"205":{loc:{start:{line:3,column:15458},end:{line:3,column:15477}},type:"cond-expr",locations:[{start:{line:3,column:15460},end:{line:3,column:15469}},{start:{line:3,column:15470},end:{line:3,column:15477}}],line:3},"206":{loc:{start:{line:3,column:15554},end:{line:3,column:15573}},type:"binary-expr",locations:[{start:{line:3,column:15554},end:{line:3,column:15555}},{start:{line:3,column:15557},end:{line:3,column:15559}},{start:{line:3,column:15561},end:{line:3,column:15573}}],line:3},"207":{loc:{start:{line:3,column:15661},end:{line:3,column:15677}},type:"cond-expr",locations:[{start:{line:3,column:15663},end:{line:3,column:15675}},{start:{line:3,column:15676},end:{line:3,column:15677}}],line:3},"208":{loc:{start:{line:3,column:15791},end:{line:3,column:15816}},type:"binary-expr",locations:[{start:{line:3,column:15791},end:{line:3,column:15800}},{start:{line:3,column:15802},end:{line:3,column:15816}}],line:3},"209":{loc:{start:{line:3,column:15844},end:{line:3,column:15884}},type:"cond-expr",locations:[{start:{line:3,column:15855},end:{line:3,column:15882}},{start:{line:3,column:15883},end:{line:3,column:15884}}],line:3},"210":{loc:{start:{line:3,column:15844},end:{line:3,column:15854}},type:"binary-expr",locations:[{start:{line:3,column:15844},end:{line:3,column:15848}},{start:{line:3,column:15850},end:{line:3,column:15851}},{start:{line:3,column:15853},end:{line:3,column:15854}}],line:3},"211":{loc:{start:{line:3,column:15892},end:{line:3,column:16309}},type:"cond-expr",locations:[{start:{line:3,column:15894},end:{line:3,column:16306}},{start:{line:3,column:16307},end:{line:3,column:16309}}],line:3},"212":{loc:{start:{line:3,column:15910},end:{line:3,column:15955}},type:"binary-expr",locations:[{start:{line:3,column:15910},end:{line:3,column:15932}},{start:{line:3,column:15934},end:{line:3,column:15944}},{start:{line:3,column:15946},end:{line:3,column:15955}}],line:3},"213":{loc:{start:{line:3,column:15991},end:{line:3,column:16033}},type:"binary-expr",locations:[{start:{line:3,column:15991},end:{line:3,column:16008}},{start:{line:3,column:16010},end:{line:3,column:16020}},{start:{line:3,column:16022},end:{line:3,column:16033}}],line:3},"214":{loc:{start:{line:3,column:16061},end:{line:3,column:16105}},type:"binary-expr",locations:[{start:{line:3,column:16061},end:{line:3,column:16082}},{start:{line:3,column:16084},end:{line:3,column:16094}},{start:{line:3,column:16096},end:{line:3,column:16105}}],line:3},"215":{loc:{start:{line:3,column:16135},end:{line:3,column:16178}},type:"binary-expr",locations:[{start:{line:3,column:16135},end:{line:3,column:16153}},{start:{line:3,column:16155},end:{line:3,column:16165}},{start:{line:3,column:16167},end:{line:3,column:16178}}],line:3},"216":{loc:{start:{line:3,column:16204},end:{line:3,column:16256}},type:"binary-expr",locations:[{start:{line:3,column:16204},end:{line:3,column:16205}},{start:{line:3,column:16208},end:{line:3,column:16232}},{start:{line:3,column:16234},end:{line:3,column:16244}},{start:{line:3,column:16246},end:{line:3,column:16255}}],line:3},"217":{loc:{start:{line:3,column:16257},end:{line:3,column:16301}},type:"binary-expr",locations:[{start:{line:3,column:16257},end:{line:3,column:16278}},{start:{line:3,column:16280},end:{line:3,column:16290}},{start:{line:3,column:16292},end:{line:3,column:16301}}],line:3},"218":{loc:{start:{line:3,column:16331},end:{line:3,column:16348}},type:"binary-expr",locations:[{start:{line:3,column:16331},end:{line:3,column:16342}},{start:{line:3,column:16344},end:{line:3,column:16348}}],line:3},"219":{loc:{start:{line:3,column:16410},end:{line:3,column:16415}},type:"default-arg",locations:[{start:{line:3,column:16412},end:{line:3,column:16415}}],line:3},"220":{loc:{start:{line:3,column:16416},end:{line:3,column:16421}},type:"default-arg",locations:[{start:{line:3,column:16418},end:{line:3,column:16421}}],line:3},"221":{loc:{start:{line:3,column:16422},end:{line:3,column:16426}},type:"default-arg",locations:[{start:{line:3,column:16424},end:{line:3,column:16426}}],line:3},"222":{loc:{start:{line:3,column:16736},end:{line:3,column:16772}},type:"binary-expr",locations:[{start:{line:3,column:16736},end:{line:3,column:16737}},{start:{line:3,column:16740},end:{line:3,column:16771}}],line:3},"223":{loc:{start:{line:3,column:16750},end:{line:3,column:16771}},type:"binary-expr",locations:[{start:{line:3,column:16750},end:{line:3,column:16752}},{start:{line:3,column:16754},end:{line:3,column:16771}}],line:3},"224":{loc:{start:{line:3,column:16954},end:{line:3,column:16975}},type:"binary-expr",locations:[{start:{line:3,column:16954},end:{line:3,column:16964}},{start:{line:3,column:16966},end:{line:3,column:16975}}],line:3},"225":{loc:{start:{line:3,column:16979},end:{line:3,column:16984}},type:"cond-expr",locations:[{start:{line:3,column:16981},end:{line:3,column:16982}},{start:{line:3,column:16983},end:{line:3,column:16984}}],line:3},"226":{loc:{start:{line:3,column:17133},end:{line:3,column:17138}},type:"cond-expr",locations:[{start:{line:3,column:17135},end:{line:3,column:17136}},{start:{line:3,column:17137},end:{line:3,column:17138}}],line:3},"227":{loc:{start:{line:3,column:17142},end:{line:3,column:17269}},type:"if",locations:[{start:{line:3,column:17142},end:{line:3,column:17269}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"228":{loc:{start:{line:3,column:17145},end:{line:3,column:17186}},type:"binary-expr",locations:[{start:{line:3,column:17145},end:{line:3,column:17150}},{start:{line:3,column:17152},end:{line:3,column:17162}},{start:{line:3,column:17164},end:{line:3,column:17186}}],line:3},"229":{loc:{start:{line:3,column:17221},end:{line:3,column:17240}},type:"binary-expr",locations:[{start:{line:3,column:17221},end:{line:3,column:17231}},{start:{line:3,column:17233},end:{line:3,column:17240}}],line:3},"230":{loc:{start:{line:3,column:17250},end:{line:3,column:17268}},type:"binary-expr",locations:[{start:{line:3,column:17250},end:{line:3,column:17251}},{start:{line:3,column:17253},end:{line:3,column:17268}}],line:3},"231":{loc:{start:{line:3,column:17331},end:{line:3,column:17334}},type:"default-arg",locations:[{start:{line:3,column:17333},end:{line:3,column:17334}}],line:3},"232":{loc:{start:{line:3,column:17406},end:{line:3,column:17466}},type:"cond-expr",locations:[{start:{line:3,column:17421},end:{line:3,column:17444}},{start:{line:3,column:17445},end:{line:3,column:17466}}],line:3},"233":{loc:{start:{line:3,column:17511},end:{line:3,column:17542}},type:"binary-expr",locations:[{start:{line:3,column:17511},end:{line:3,column:17527}},{start:{line:3,column:17529},end:{line:3,column:17542}}],line:3},"234":{loc:{start:{line:3,column:17673},end:{line:3,column:17676}},type:"default-arg",locations:[{start:{line:3,column:17675},end:{line:3,column:17676}}],line:3},"235":{loc:{start:{line:3,column:17684},end:{line:3,column:17711}},type:"if",locations:[{start:{line:3,column:17684},end:{line:3,column:17711}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"236":{loc:{start:{line:3,column:17762},end:{line:3,column:17807}},type:"binary-expr",locations:[{start:{line:3,column:17762},end:{line:3,column:17769}},{start:{line:3,column:17772},end:{line:3,column:17806}}],line:3},"237":{loc:{start:{line:3,column:17845},end:{line:3,column:17910}},type:"cond-expr",locations:[{start:{line:3,column:17876},end:{line:3,column:17877}},{start:{line:3,column:17878},end:{line:3,column:17910}}],line:3},"238":{loc:{start:{line:3,column:17845},end:{line:3,column:17875}},type:"binary-expr",locations:[{start:{line:3,column:17845},end:{line:3,column:17863}},{start:{line:3,column:17865},end:{line:3,column:17875}}],line:3},"239":{loc:{start:{line:3,column:17935},end:{line:3,column:17938}},type:"default-arg",locations:[{start:{line:3,column:17937},end:{line:3,column:17938}}],line:3},"240":{loc:{start:{line:3,column:18005},end:{line:3,column:18008}},type:"default-arg",locations:[{start:{line:3,column:18007},end:{line:3,column:18008}}],line:3},"241":{loc:{start:{line:3,column:18010},end:{line:3,column:18065}},type:"if",locations:[{start:{line:3,column:18010},end:{line:3,column:18065}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"242":{loc:{start:{line:3,column:18013},end:{line:3,column:18055}},type:"binary-expr",locations:[{start:{line:3,column:18013},end:{line:3,column:18020}},{start:{line:3,column:18022},end:{line:3,column:18036}},{start:{line:3,column:18038},end:{line:3,column:18055}}],line:3},"243":{loc:{start:{line:3,column:18065},end:{line:3,column:18093}},type:"binary-expr",locations:[{start:{line:3,column:18065},end:{line:3,column:18072}},{start:{line:3,column:18074},end:{line:3,column:18093}}],line:3},"244":{loc:{start:{line:3,column:18107},end:{line:3,column:18171}},type:"if",locations:[{start:{line:3,column:18107},end:{line:3,column:18171}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"245":{loc:{start:{line:3,column:18212},end:{line:3,column:18226}},type:"if",locations:[{start:{line:3,column:18212},end:{line:3,column:18226}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"246":{loc:{start:{line:3,column:18226},end:{line:3,column:18318}},type:"binary-expr",locations:[{start:{line:3,column:18226},end:{line:3,column:18243}},{start:{line:3,column:18245},end:{line:3,column:18258}},{start:{line:3,column:18261},end:{line:3,column:18317}}],line:3},"247":{loc:{start:{line:3,column:18377},end:{line:3,column:18427}},type:"binary-expr",locations:[{start:{line:3,column:18377},end:{line:3,column:18378}},{start:{line:3,column:18380},end:{line:3,column:18427}}],line:3},"248":{loc:{start:{line:3,column:18428},end:{line:3,column:18460}},type:"if",locations:[{start:{line:3,column:18428},end:{line:3,column:18460}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"249":{loc:{start:{line:3,column:18475},end:{line:3,column:18686}},type:"if",locations:[{start:{line:3,column:18475},end:{line:3,column:18686}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"250":{loc:{start:{line:3,column:18601},end:{line:3,column:18649}},type:"binary-expr",locations:[{start:{line:3,column:18601},end:{line:3,column:18608}},{start:{line:3,column:18611},end:{line:3,column:18648}}],line:3},"251":{loc:{start:{line:3,column:18718},end:{line:3,column:18725}},type:"default-arg",locations:[{start:{line:3,column:18720},end:{line:3,column:18725}}],line:3},"252":{loc:{start:{line:3,column:18776},end:{line:3,column:18779}},type:"default-arg",locations:[{start:{line:3,column:18778},end:{line:3,column:18779}}],line:3},"253":{loc:{start:{line:3,column:18895},end:{line:3,column:18903}},type:"default-arg",locations:[{start:{line:3,column:18897},end:{line:3,column:18903}}],line:3},"254":{loc:{start:{line:3,column:18977},end:{line:3,column:19011}},type:"if",locations:[{start:{line:3,column:18977},end:{line:3,column:19011}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"255":{loc:{start:{line:3,column:19036},end:{line:3,column:19074}},type:"if",locations:[{start:{line:3,column:19036},end:{line:3,column:19074}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"256":{loc:{start:{line:3,column:19093},end:{line:3,column:19157}},type:"if",locations:[{start:{line:3,column:19093},end:{line:3,column:19157}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"257":{loc:{start:{line:3,column:19207},end:{line:3,column:19219}},type:"cond-expr",locations:[{start:{line:3,column:19212},end:{line:3,column:19213}},{start:{line:3,column:19214},end:{line:3,column:19219}}],line:3},"258":{loc:{start:{line:3,column:19251},end:{line:3,column:19275}},type:"cond-expr",locations:[{start:{line:3,column:19253},end:{line:3,column:19273}},{start:{line:3,column:19274},end:{line:3,column:19275}}],line:3},"259":{loc:{start:{line:3,column:19298},end:{line:3,column:19346}},type:"binary-expr",locations:[{start:{line:3,column:19298},end:{line:3,column:19301}},{start:{line:3,column:19304},end:{line:3,column:19318}},{start:{line:3,column:19320},end:{line:3,column:19329}},{start:{line:3,column:19331},end:{line:3,column:19345}}],line:3},"260":{loc:{start:{line:3,column:19465},end:{line:3,column:19493}},type:"binary-expr",locations:[{start:{line:3,column:19465},end:{line:3,column:19482}},{start:{line:3,column:19484},end:{line:3,column:19493}}],line:3},"261":{loc:{start:{line:3,column:19516},end:{line:3,column:19522}},type:"default-arg",locations:[{start:{line:3,column:19518},end:{line:3,column:19522}}],line:3},"262":{loc:{start:{line:3,column:19648},end:{line:3,column:19652}},type:"default-arg",locations:[{start:{line:3,column:19650},end:{line:3,column:19652}}],line:3},"263":{loc:{start:{line:3,column:19663},end:{line:3,column:19670}},type:"default-arg",locations:[{start:{line:3,column:19665},end:{line:3,column:19670}}],line:3},"264":{loc:{start:{line:3,column:19665},end:{line:3,column:19670}},type:"binary-expr",locations:[{start:{line:3,column:19665},end:{line:3,column:19666}},{start:{line:3,column:19668},end:{line:3,column:19670}}],line:3},"265":{loc:{start:{line:3,column:19676},end:{line:3,column:19682}},type:"default-arg",locations:[{start:{line:3,column:19678},end:{line:3,column:19682}}],line:3},"266":{loc:{start:{line:3,column:19684},end:{line:3,column:19729}},type:"cond-expr",locations:[{start:{line:3,column:19690},end:{line:3,column:19699}},{start:{line:3,column:19700},end:{line:3,column:19729}}],line:3},"267":{loc:{start:{line:3,column:19700},end:{line:3,column:19729}},type:"cond-expr",locations:[{start:{line:3,column:19719},end:{line:3,column:19727}},{start:{line:3,column:19728},end:{line:3,column:19729}}],line:3},"268":{loc:{start:{line:3,column:19730},end:{line:3,column:19794}},type:"if",locations:[{start:{line:3,column:19730},end:{line:3,column:19794}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"269":{loc:{start:{line:3,column:19733},end:{line:3,column:19749}},type:"binary-expr",locations:[{start:{line:3,column:19733},end:{line:3,column:19740}},{start:{line:3,column:19742},end:{line:3,column:19749}}],line:3},"270":{loc:{start:{line:3,column:19997},end:{line:3,column:20006}},type:"binary-expr",locations:[{start:{line:3,column:19997},end:{line:3,column:20000}},{start:{line:3,column:20002},end:{line:3,column:20006}}],line:3},"271":{loc:{start:{line:3,column:20027},end:{line:3,column:20054}},type:"binary-expr",locations:[{start:{line:3,column:20027},end:{line:3,column:20036}},{start:{line:3,column:20038},end:{line:3,column:20054}}],line:3},"272":{loc:{start:{line:3,column:20065},end:{line:3,column:20113}},type:"binary-expr",locations:[{start:{line:3,column:20065},end:{line:3,column:20067}},{start:{line:3,column:20069},end:{line:3,column:20113}}],line:3},"273":{loc:{start:{line:3,column:20071},end:{line:3,column:20112}},type:"cond-expr",locations:[{start:{line:3,column:20079},end:{line:3,column:20110}},{start:{line:3,column:20111},end:{line:3,column:20112}}],line:3},"274":{loc:{start:{line:3,column:20079},end:{line:3,column:20110}},type:"cond-expr",locations:[{start:{line:3,column:20098},end:{line:3,column:20099}},{start:{line:3,column:20100},end:{line:3,column:20110}}],line:3},"275":{loc:{start:{line:3,column:20232},end:{line:3,column:20352}},type:"if",locations:[{start:{line:3,column:20232},end:{line:3,column:20352}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"276":{loc:{start:{line:3,column:20260},end:{line:3,column:20294}},type:"if",locations:[{start:{line:3,column:20260},end:{line:3,column:20294}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"277":{loc:{start:{line:3,column:20294},end:{line:3,column:20351}},type:"if",locations:[{start:{line:3,column:20294},end:{line:3,column:20351}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"278":{loc:{start:{line:3,column:20399},end:{line:3,column:20432}},type:"binary-expr",locations:[{start:{line:3,column:20399},end:{line:3,column:20400}},{start:{line:3,column:20402},end:{line:3,column:20420}},{start:{line:3,column:20422},end:{line:3,column:20432}}],line:3},"279":{loc:{start:{line:3,column:20553},end:{line:3,column:20585}},type:"if",locations:[{start:{line:3,column:20553},end:{line:3,column:20585}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"280":{loc:{start:{line:3,column:20604},end:{line:3,column:20619}},type:"cond-expr",locations:[{start:{line:3,column:20606},end:{line:3,column:20616}},{start:{line:3,column:20617},end:{line:3,column:20619}}],line:3},"281":{loc:{start:{line:3,column:20629},end:{line:3,column:20646}},type:"cond-expr",locations:[{start:{line:3,column:20631},end:{line:3,column:20644}},{start:{line:3,column:20645},end:{line:3,column:20646}}],line:3},"282":{loc:{start:{line:3,column:20663},end:{line:3,column:20667}},type:"default-arg",locations:[{start:{line:3,column:20665},end:{line:3,column:20667}}],line:3},"283":{loc:{start:{line:3,column:20808},end:{line:3,column:20821}},type:"binary-expr",locations:[{start:{line:3,column:20808},end:{line:3,column:20809}},{start:{line:3,column:20812},end:{line:3,column:20820}}],line:3},"284":{loc:{start:{line:3,column:20822},end:{line:3,column:20845}},type:"binary-expr",locations:[{start:{line:3,column:20822},end:{line:3,column:20823}},{start:{line:3,column:20825},end:{line:3,column:20845}}],line:3},"285":{loc:{start:{line:3,column:20852},end:{line:3,column:20869}},type:"binary-expr",locations:[{start:{line:3,column:20852},end:{line:3,column:20855}},{start:{line:3,column:20857},end:{line:3,column:20869}}],line:3},"286":{loc:{start:{line:3,column:20901},end:{line:3,column:20915}},type:"cond-expr",locations:[{start:{line:3,column:20903},end:{line:3,column:20911}},{start:{line:3,column:20912},end:{line:3,column:20915}}],line:3},"287":{loc:{start:{line:3,column:21050},end:{line:3,column:21077}},type:"if",locations:[{start:{line:3,column:21050},end:{line:3,column:21077}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"288":{loc:{start:{line:3,column:21160},end:{line:3,column:21173}},type:"binary-expr",locations:[{start:{line:3,column:21160},end:{line:3,column:21161}},{start:{line:3,column:21164},end:{line:3,column:21172}}],line:3},"289":{loc:{start:{line:3,column:21202},end:{line:3,column:21249}},type:"binary-expr",locations:[{start:{line:3,column:21203},end:{line:3,column:21205}},{start:{line:3,column:21207},end:{line:3,column:21209}},{start:{line:3,column:21213},end:{line:3,column:21248}}],line:3},"290":{loc:{start:{line:3,column:21213},end:{line:3,column:21235}},type:"binary-expr",locations:[{start:{line:3,column:21213},end:{line:3,column:21214}},{start:{line:3,column:21216},end:{line:3,column:21235}}],line:3},"291":{loc:{start:{line:3,column:21223},end:{line:3,column:21234}},type:"cond-expr",locations:[{start:{line:3,column:21225},end:{line:3,column:21232}},{start:{line:3,column:21233},end:{line:3,column:21234}}],line:3},"292":{loc:{start:{line:3,column:21263},end:{line:3,column:21280}},type:"cond-expr",locations:[{start:{line:3,column:21265},end:{line:3,column:21278}},{start:{line:3,column:21279},end:{line:3,column:21280}}],line:3},"293":{loc:{start:{line:3,column:21293},end:{line:3,column:21296}},type:"default-arg",locations:[{start:{line:3,column:21295},end:{line:3,column:21296}}],line:3},"294":{loc:{start:{line:3,column:21299},end:{line:3,column:21303}},type:"default-arg",locations:[{start:{line:3,column:21301},end:{line:3,column:21303}}],line:3},"295":{loc:{start:{line:3,column:21321},end:{line:3,column:21345}},type:"binary-expr",locations:[{start:{line:3,column:21321},end:{line:3,column:21328}},{start:{line:3,column:21331},end:{line:3,column:21344}}],line:3},"296":{loc:{start:{line:3,column:21331},end:{line:3,column:21344}},type:"cond-expr",locations:[{start:{line:3,column:21337},end:{line:3,column:21340}},{start:{line:3,column:21341},end:{line:3,column:21344}}],line:3},"297":{loc:{start:{line:3,column:21362},end:{line:3,column:21380}},type:"cond-expr",locations:[{start:{line:3,column:21368},end:{line:3,column:21378}},{start:{line:3,column:21379},end:{line:3,column:21380}}],line:3},"298":{loc:{start:{line:3,column:21381},end:{line:3,column:21391}},type:"binary-expr",locations:[{start:{line:3,column:21381},end:{line:3,column:21384}},{start:{line:3,column:21387},end:{line:3,column:21390}}],line:3},"299":{loc:{start:{line:3,column:21429},end:{line:3,column:21494}},type:"binary-expr",locations:[{start:{line:3,column:21429},end:{line:3,column:21437}},{start:{line:3,column:21440},end:{line:3,column:21493}}],line:3},"300":{loc:{start:{line:3,column:21452},end:{line:3,column:21493}},type:"cond-expr",locations:[{start:{line:3,column:21457},end:{line:3,column:21480}},{start:{line:3,column:21481},end:{line:3,column:21493}}],line:3},"301":{loc:{start:{line:3,column:21513},end:{line:3,column:21516}},type:"default-arg",locations:[{start:{line:3,column:21515},end:{line:3,column:21516}}],line:3},"302":{loc:{start:{line:3,column:21517},end:{line:3,column:21521}},type:"default-arg",locations:[{start:{line:3,column:21519},end:{line:3,column:21521}}],line:3},"303":{loc:{start:{line:3,column:21530},end:{line:3,column:21540}},type:"binary-expr",locations:[{start:{line:3,column:21530},end:{line:3,column:21533}},{start:{line:3,column:21536},end:{line:3,column:21539}}],line:3},"304":{loc:{start:{line:3,column:21575},end:{line:3,column:21597}},type:"cond-expr",locations:[{start:{line:3,column:21580},end:{line:3,column:21589}},{start:{line:3,column:21590},end:{line:3,column:21597}}],line:3},"305":{loc:{start:{line:3,column:21680},end:{line:3,column:21692}},type:"binary-expr",locations:[{start:{line:3,column:21680},end:{line:3,column:21681}},{start:{line:3,column:21683},end:{line:3,column:21692}}],line:3},"306":{loc:{start:{line:3,column:21725},end:{line:3,column:21729}},type:"default-arg",locations:[{start:{line:3,column:21727},end:{line:3,column:21729}}],line:3},"307":{loc:{start:{line:3,column:21740},end:{line:3,column:21745}},type:"binary-expr",locations:[{start:{line:3,column:21740},end:{line:3,column:21741}},{start:{line:3,column:21743},end:{line:3,column:21745}}],line:3},"308":{loc:{start:{line:3,column:21798},end:{line:3,column:21832}},type:"binary-expr",locations:[{start:{line:3,column:21799},end:{line:3,column:21800}},{start:{line:3,column:21802},end:{line:3,column:21809}},{start:{line:3,column:21813},end:{line:3,column:21831}}],line:3},"309":{loc:{start:{line:3,column:21880},end:{line:3,column:21884}},type:"default-arg",locations:[{start:{line:3,column:21882},end:{line:3,column:21884}}],line:3},"310":{loc:{start:{line:3,column:21952},end:{line:3,column:21979}},type:"cond-expr",locations:[{start:{line:3,column:21954},end:{line:3,column:21966}},{start:{line:3,column:21967},end:{line:3,column:21979}}],line:3},"311":{loc:{start:{line:3,column:22072},end:{line:3,column:22096}},type:"cond-expr",locations:[{start:{line:3,column:22074},end:{line:3,column:22093}},{start:{line:3,column:22094},end:{line:3,column:22096}}],line:3},"312":{loc:{start:{line:3,column:22103},end:{line:3,column:22125}},type:"cond-expr",locations:[{start:{line:3,column:22105},end:{line:3,column:22110}},{start:{line:3,column:22111},end:{line:3,column:22125}}],line:3},"313":{loc:{start:{line:3,column:22149},end:{line:3,column:22300}},type:"cond-expr",locations:[{start:{line:3,column:22154},end:{line:3,column:22160}},{start:{line:3,column:22161},end:{line:3,column:22300}}],line:3},"314":{loc:{start:{line:3,column:22210},end:{line:3,column:22231}},type:"binary-expr",locations:[{start:{line:3,column:22210},end:{line:3,column:22220}},{start:{line:3,column:22222},end:{line:3,column:22231}}],line:3},"315":{loc:{start:{line:3,column:22313},end:{line:3,column:22317}},type:"default-arg",locations:[{start:{line:3,column:22315},end:{line:3,column:22317}}],line:3},"316":{loc:{start:{line:3,column:22333},end:{line:3,column:22345}},type:"default-arg",locations:[{start:{line:3,column:22335},end:{line:3,column:22345}}],line:3},"317":{loc:{start:{line:3,column:22359},end:{line:3,column:22363}},type:"default-arg",locations:[{start:{line:3,column:22361},end:{line:3,column:22363}}],line:3},"318":{loc:{start:{line:3,column:22380},end:{line:3,column:22384}},type:"default-arg",locations:[{start:{line:3,column:22382},end:{line:3,column:22384}}],line:3},"319":{loc:{start:{line:3,column:22405},end:{line:3,column:22409}},type:"default-arg",locations:[{start:{line:3,column:22407},end:{line:3,column:22409}}],line:3},"320":{loc:{start:{line:3,column:22570},end:{line:3,column:22581}},type:"binary-expr",locations:[{start:{line:3,column:22570},end:{line:3,column:22572}},{start:{line:3,column:22574},end:{line:3,column:22576}},{start:{line:3,column:22578},end:{line:3,column:22581}}],line:3},"321":{loc:{start:{line:3,column:22590},end:{line:3,column:22596}},type:"binary-expr",locations:[{start:{line:3,column:22590},end:{line:3,column:22591}},{start:{line:3,column:22593},end:{line:3,column:22596}}],line:3},"322":{loc:{start:{line:3,column:22612},end:{line:3,column:22638}},type:"binary-expr",locations:[{start:{line:3,column:22612},end:{line:3,column:22617}},{start:{line:3,column:22619},end:{line:3,column:22621}},{start:{line:3,column:22623},end:{line:3,column:22625}},{start:{line:3,column:22628},end:{line:3,column:22637}}],line:3},"323":{loc:{start:{line:3,column:22656},end:{line:3,column:22809}},type:"binary-expr",locations:[{start:{line:3,column:22656},end:{line:3,column:22658}},{start:{line:3,column:22660},end:{line:3,column:22663}},{start:{line:3,column:22666},end:{line:3,column:22808}}],line:3},"324":{loc:{start:{line:3,column:22838},end:{line:3,column:22860}},type:"if",locations:[{start:{line:3,column:22838},end:{line:3,column:22860}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"325":{loc:{start:{line:3,column:22860},end:{line:3,column:22877}},type:"if",locations:[{start:{line:3,column:22860},end:{line:3,column:22877}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"326":{loc:{start:{line:3,column:22992},end:{line:3,column:23086}},type:"cond-expr",locations:[{start:{line:3,column:23014},end:{line:3,column:23077}},{start:{line:3,column:23078},end:{line:3,column:23086}}],line:3},"327":{loc:{start:{line:3,column:22992},end:{line:3,column:23013}},type:"binary-expr",locations:[{start:{line:3,column:22992},end:{line:3,column:22993}},{start:{line:3,column:22995},end:{line:3,column:23013}}],line:3},"328":{loc:{start:{line:3,column:23026},end:{line:3,column:23031}},type:"default-arg",locations:[{start:{line:3,column:23028},end:{line:3,column:23031}}],line:3},"329":{loc:{start:{line:3,column:23043},end:{line:3,column:23048}},type:"default-arg",locations:[{start:{line:3,column:23045},end:{line:3,column:23048}}],line:3},"330":{loc:{start:{line:3,column:23058},end:{line:3,column:23062}},type:"default-arg",locations:[{start:{line:3,column:23060},end:{line:3,column:23062}}],line:3},"331":{loc:{start:{line:3,column:23080},end:{line:3,column:23086}},type:"binary-expr",locations:[{start:{line:3,column:23080},end:{line:3,column:23081}},{start:{line:3,column:23083},end:{line:3,column:23086}}],line:3},"332":{loc:{start:{line:3,column:23618},end:{line:3,column:23644}},type:"if",locations:[{start:{line:3,column:23618},end:{line:3,column:23644}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"333":{loc:{start:{line:3,column:23644},end:{line:3,column:23663}},type:"if",locations:[{start:{line:3,column:23644},end:{line:3,column:23663}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"334":{loc:{start:{line:3,column:23711},end:{line:3,column:23748}},type:"if",locations:[{start:{line:3,column:23711},end:{line:3,column:23748}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"335":{loc:{start:{line:3,column:23714},end:{line:3,column:23740}},type:"binary-expr",locations:[{start:{line:3,column:23714},end:{line:3,column:23724}},{start:{line:3,column:23726},end:{line:3,column:23740}}],line:3},"336":{loc:{start:{line:3,column:23770},end:{line:3,column:23899}},type:"if",locations:[{start:{line:3,column:23770},end:{line:3,column:23899}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"337":{loc:{start:{line:3,column:23773},end:{line:3,column:23844}},type:"binary-expr",locations:[{start:{line:3,column:23773},end:{line:3,column:23774}},{start:{line:3,column:23777},end:{line:3,column:23843}}],line:3},"338":{loc:{start:{line:3,column:23779},end:{line:3,column:23816}},type:"cond-expr",locations:[{start:{line:3,column:23790},end:{line:3,column:23804}},{start:{line:3,column:23805},end:{line:3,column:23816}}],line:3},"339":{loc:{start:{line:3,column:23817},end:{line:3,column:23843}},type:"binary-expr",locations:[{start:{line:3,column:23817},end:{line:3,column:23827}},{start:{line:3,column:23829},end:{line:3,column:23843}}],line:3},"340":{loc:{start:{line:3,column:23921},end:{line:3,column:23973}},type:"if",locations:[{start:{line:3,column:23921},end:{line:3,column:23973}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"341":{loc:{start:{line:3,column:23924},end:{line:3,column:23965}},type:"binary-expr",locations:[{start:{line:3,column:23924},end:{line:3,column:23934}},{start:{line:3,column:23936},end:{line:3,column:23950}},{start:{line:3,column:23953},end:{line:3,column:23955}},{start:{line:3,column:23957},end:{line:3,column:23964}}],line:3},"342":{loc:{start:{line:3,column:24105},end:{line:3,column:24146}},type:"cond-expr",locations:[{start:{line:3,column:24116},end:{line:3,column:24132}},{start:{line:3,column:24133},end:{line:3,column:24146}}],line:3},"343":{loc:{start:{line:3,column:24147},end:{line:3,column:24157}},type:"binary-expr",locations:[{start:{line:3,column:24147},end:{line:3,column:24148}},{start:{line:3,column:24150},end:{line:3,column:24157}}],line:3},"344":{loc:{start:{line:3,column:24192},end:{line:3,column:24338}},type:"if",locations:[{start:{line:3,column:24192},end:{line:3,column:24338}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"345":{loc:{start:{line:3,column:24195},end:{line:3,column:24249}},type:"binary-expr",locations:[{start:{line:3,column:24195},end:{line:3,column:24213}},{start:{line:3,column:24215},end:{line:3,column:24249}}],line:3},"346":{loc:{start:{line:3,column:24197},end:{line:3,column:24212}},type:"binary-expr",locations:[{start:{line:3,column:24197},end:{line:3,column:24202}},{start:{line:3,column:24204},end:{line:3,column:24212}}],line:3},"347":{loc:{start:{line:3,column:24217},end:{line:3,column:24248}},type:"binary-expr",locations:[{start:{line:3,column:24217},end:{line:3,column:24225}},{start:{line:3,column:24227},end:{line:3,column:24248}}],line:3},"348":{loc:{start:{line:3,column:24251},end:{line:3,column:24304}},type:"if",locations:[{start:{line:3,column:24251},end:{line:3,column:24304}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"349":{loc:{start:{line:3,column:24254},end:{line:3,column:24289}},type:"binary-expr",locations:[{start:{line:3,column:24254},end:{line:3,column:24281}},{start:{line:3,column:24283},end:{line:3,column:24289}}],line:3},"350":{loc:{start:{line:3,column:24354},end:{line:3,column:24385}},type:"if",locations:[{start:{line:3,column:24354},end:{line:3,column:24385}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"351":{loc:{start:{line:3,column:24472},end:{line:3,column:24486}},type:"binary-expr",locations:[{start:{line:3,column:24472},end:{line:3,column:24479}},{start:{line:3,column:24481},end:{line:3,column:24486}}],line:3},"352":{loc:{start:{line:3,column:24684},end:{line:3,column:24692}},type:"binary-expr",locations:[{start:{line:3,column:24684},end:{line:3,column:24685}},{start:{line:3,column:24687},end:{line:3,column:24692}}],line:3},"353":{loc:{start:{line:3,column:24775},end:{line:3,column:24783}},type:"binary-expr",locations:[{start:{line:3,column:24775},end:{line:3,column:24776}},{start:{line:3,column:24778},end:{line:3,column:24783}}],line:3},"354":{loc:{start:{line:3,column:24840},end:{line:3,column:24877}},type:"cond-expr",locations:[{start:{line:3,column:24851},end:{line:3,column:24865}},{start:{line:3,column:24866},end:{line:3,column:24877}}],line:3},"355":{loc:{start:{line:3,column:24878},end:{line:3,column:24983}},type:"if",locations:[{start:{line:3,column:24878},end:{line:3,column:24983}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"356":{loc:{start:{line:3,column:24893},end:{line:3,column:24931}},type:"if",locations:[{start:{line:3,column:24893},end:{line:3,column:24931}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"357":{loc:{start:{line:3,column:24931},end:{line:3,column:24982}},type:"cond-expr",locations:[{start:{line:3,column:24942},end:{line:3,column:24963}},{start:{line:3,column:24964},end:{line:3,column:24982}}],line:3},"358":{loc:{start:{line:3,column:25087},end:{line:3,column:25135}},type:"if",locations:[{start:{line:3,column:25087},end:{line:3,column:25135}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"359":{loc:{start:{line:3,column:25090},end:{line:3,column:25126}},type:"binary-expr",locations:[{start:{line:3,column:25090},end:{line:3,column:25103}},{start:{line:3,column:25106},end:{line:3,column:25125}}],line:3},"360":{loc:{start:{line:3,column:25160},end:{line:3,column:25213}},type:"if",locations:[{start:{line:3,column:25160},end:{line:3,column:25213}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"361":{loc:{start:{line:3,column:25344},end:{line:3,column:25549}},type:"if",locations:[{start:{line:3,column:25344},end:{line:3,column:25549}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"362":{loc:{start:{line:3,column:25347},end:{line:3,column:25444}},type:"cond-expr",locations:[{start:{line:3,column:25359},end:{line:3,column:25405}},{start:{line:3,column:25408},end:{line:3,column:25443}}],line:3},"363":{loc:{start:{line:3,column:25633},end:{line:3,column:25827}},type:"if",locations:[{start:{line:3,column:25633},end:{line:3,column:25827}},{start:{line:3,column:25759},end:{line:3,column:25827}}],line:3},"364":{loc:{start:{line:3,column:25680},end:{line:3,column:25725}},type:"cond-expr",locations:[{start:{line:3,column:25691},end:{line:3,column:25707}},{start:{line:3,column:25708},end:{line:3,column:25725}}],line:3},"365":{loc:{start:{line:3,column:25759},end:{line:3,column:25827}},type:"if",locations:[{start:{line:3,column:25759},end:{line:3,column:25827}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"366":{loc:{start:{line:3,column:25858},end:{line:3,column:25902}},type:"binary-expr",locations:[{start:{line:3,column:25858},end:{line:3,column:25880}},{start:{line:3,column:25882},end:{line:3,column:25902}}],line:3},"367":{loc:{start:{line:3,column:25965},end:{line:3,column:26069}},type:"if",locations:[{start:{line:3,column:25965},end:{line:3,column:26069}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"368":{loc:{start:{line:3,column:26001},end:{line:3,column:26019}},type:"if",locations:[{start:{line:3,column:26001},end:{line:3,column:26019}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"369":{loc:{start:{line:3,column:26019},end:{line:3,column:26034}},type:"if",locations:[{start:{line:3,column:26019},end:{line:3,column:26034}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"370":{loc:{start:{line:3,column:26174},end:{line:3,column:26197}},type:"binary-expr",locations:[{start:{line:3,column:26174},end:{line:3,column:26184}},{start:{line:3,column:26187},end:{line:3,column:26196}}],line:3},"371":{loc:{start:{line:3,column:26209},end:{line:3,column:26251}},type:"if",locations:[{start:{line:3,column:26209},end:{line:3,column:26251}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"372":{loc:{start:{line:3,column:26457},end:{line:3,column:26483}},type:"binary-expr",locations:[{start:{line:3,column:26457},end:{line:3,column:26469}},{start:{line:3,column:26471},end:{line:3,column:26483}}],line:3},"373":{loc:{start:{line:3,column:26511},end:{line:3,column:26547}},type:"if",locations:[{start:{line:3,column:26511},end:{line:3,column:26547}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"374":{loc:{start:{line:3,column:26623},end:{line:3,column:26659}},type:"binary-expr",locations:[{start:{line:3,column:26623},end:{line:3,column:26629}},{start:{line:3,column:26631},end:{line:3,column:26637}},{start:{line:3,column:26639},end:{line:3,column:26645}},{start:{line:3,column:26647},end:{line:3,column:26659}}],line:3},"375":{loc:{start:{line:3,column:26700},end:{line:3,column:26723}},type:"if",locations:[{start:{line:3,column:26700},end:{line:3,column:26723}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"376":{loc:{start:{line:3,column:26892},end:{line:3,column:26915}},type:"binary-expr",locations:[{start:{line:3,column:26892},end:{line:3,column:26902}},{start:{line:3,column:26905},end:{line:3,column:26914}}],line:3},"377":{loc:{start:{line:3,column:27031},end:{line:3,column:27042}},type:"binary-expr",locations:[{start:{line:3,column:27031},end:{line:3,column:27035}},{start:{line:3,column:27037},end:{line:3,column:27042}}],line:3},"378":{loc:{start:{line:3,column:27043},end:{line:3,column:27080}},type:"binary-expr",locations:[{start:{line:3,column:27043},end:{line:3,column:27061}},{start:{line:3,column:27064},end:{line:3,column:27079}}],line:3},"379":{loc:{start:{line:3,column:27098},end:{line:3,column:27109}},type:"binary-expr",locations:[{start:{line:3,column:27098},end:{line:3,column:27102}},{start:{line:3,column:27104},end:{line:3,column:27109}}],line:3},"380":{loc:{start:{line:3,column:27342},end:{line:3,column:27383}},type:"if",locations:[{start:{line:3,column:27342},end:{line:3,column:27383}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"381":{loc:{start:{line:3,column:27356},end:{line:3,column:27375}},type:"binary-expr",locations:[{start:{line:3,column:27356},end:{line:3,column:27367}},{start:{line:3,column:27369},end:{line:3,column:27375}}],line:3},"382":{loc:{start:{line:3,column:27564},end:{line:3,column:27598}},type:"binary-expr",locations:[{start:{line:3,column:27564},end:{line:3,column:27570}},{start:{line:3,column:27572},end:{line:3,column:27598}}],line:3},"383":{loc:{start:{line:3,column:27669},end:{line:3,column:27689}},type:"binary-expr",locations:[{start:{line:3,column:27669},end:{line:3,column:27676}},{start:{line:3,column:27679},end:{line:3,column:27688}}],line:3},"384":{loc:{start:{line:3,column:27701},end:{line:3,column:27743}},type:"if",locations:[{start:{line:3,column:27701},end:{line:3,column:27743}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"385":{loc:{start:{line:3,column:27835},end:{line:3,column:27871}},type:"if",locations:[{start:{line:3,column:27835},end:{line:3,column:27871}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"386":{loc:{start:{line:3,column:27994},end:{line:3,column:28020}},type:"binary-expr",locations:[{start:{line:3,column:27994},end:{line:3,column:28006}},{start:{line:3,column:28008},end:{line:3,column:28020}}],line:3},"387":{loc:{start:{line:3,column:28048},end:{line:3,column:28084}},type:"if",locations:[{start:{line:3,column:28048},end:{line:3,column:28084}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"388":{loc:{start:{line:3,column:28146},end:{line:3,column:28198}},type:"cond-expr",locations:[{start:{line:3,column:28161},end:{line:3,column:28167}},{start:{line:3,column:28168},end:{line:3,column:28198}}],line:3},"389":{loc:{start:{line:3,column:28146},end:{line:3,column:28160}},type:"binary-expr",locations:[{start:{line:3,column:28146},end:{line:3,column:28152}},{start:{line:3,column:28154},end:{line:3,column:28160}}],line:3},"390":{loc:{start:{line:3,column:28276},end:{line:3,column:28326}},type:"if",locations:[{start:{line:3,column:28276},end:{line:3,column:28326}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"391":{loc:{start:{line:3,column:28279},end:{line:3,column:28307}},type:"binary-expr",locations:[{start:{line:3,column:28279},end:{line:3,column:28285}},{start:{line:3,column:28287},end:{line:3,column:28293}},{start:{line:3,column:28295},end:{line:3,column:28307}}],line:3},"392":{loc:{start:{line:3,column:28646},end:{line:3,column:28657}},type:"cond-expr",locations:[{start:{line:3,column:28648},end:{line:3,column:28654}},{start:{line:3,column:28655},end:{line:3,column:28657}}],line:3},"393":{loc:{start:{line:3,column:28707},end:{line:3,column:28728}},type:"if",locations:[{start:{line:3,column:28707},end:{line:3,column:28728}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"394":{loc:{start:{line:3,column:28776},end:{line:3,column:28830}},type:"binary-expr",locations:[{start:{line:3,column:28776},end:{line:3,column:28795}},{start:{line:3,column:28797},end:{line:3,column:28817}},{start:{line:3,column:28820},end:{line:3,column:28829}}],line:3},"395":{loc:{start:{line:3,column:28846},end:{line:3,column:28877}},type:"if",locations:[{start:{line:3,column:28846},end:{line:3,column:28877}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"396":{loc:{start:{line:3,column:28877},end:{line:3,column:28931}},type:"if",locations:[{start:{line:3,column:28877},end:{line:3,column:28931}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"397":{loc:{start:{line:3,column:28931},end:{line:3,column:28953}},type:"if",locations:[{start:{line:3,column:28931},end:{line:3,column:28953}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"398":{loc:{start:{line:3,column:28959},end:{line:3,column:28983}},type:"binary-expr",locations:[{start:{line:3,column:28959},end:{line:3,column:28975}},{start:{line:3,column:28977},end:{line:3,column:28983}}],line:3},"399":{loc:{start:{line:3,column:28984},end:{line:3,column:29002}},type:"if",locations:[{start:{line:3,column:28984},end:{line:3,column:29002}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"400":{loc:{start:{line:3,column:29021},end:{line:3,column:29043}},type:"if",locations:[{start:{line:3,column:29021},end:{line:3,column:29043}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"401":{loc:{start:{line:4,column:10},end:{line:4,column:29}},type:"cond-expr",locations:[{start:{line:4,column:15},end:{line:4,column:27}},{start:{line:4,column:28},end:{line:4,column:29}}],line:4},"402":{loc:{start:{line:4,column:54},end:{line:4,column:77}},type:"cond-expr",locations:[{start:{line:4,column:56},end:{line:4,column:71}},{start:{line:4,column:72},end:{line:4,column:77}}],line:4},"403":{loc:{start:{line:4,column:56},end:{line:4,column:71}},type:"cond-expr",locations:[{start:{line:4,column:58},end:{line:4,column:69}},{start:{line:4,column:70},end:{line:4,column:71}}],line:4},"404":{loc:{start:{line:4,column:72},end:{line:4,column:77}},type:"binary-expr",locations:[{start:{line:4,column:72},end:{line:4,column:73}},{start:{line:4,column:75},end:{line:4,column:77}}],line:4},"405":{loc:{start:{line:4,column:174},end:{line:4,column:185}},type:"cond-expr",locations:[{start:{line:4,column:180},end:{line:4,column:183}},{start:{line:4,column:184},end:{line:4,column:185}}],line:4},"406":{loc:{start:{line:4,column:208},end:{line:4,column:274}},type:"binary-expr",locations:[{start:{line:4,column:208},end:{line:4,column:228}},{start:{line:4,column:230},end:{line:4,column:250}},{start:{line:4,column:252},end:{line:4,column:274}}],line:4},"407":{loc:{start:{line:4,column:321},end:{line:4,column:339}},type:"binary-expr",locations:[{start:{line:4,column:321},end:{line:4,column:333}},{start:{line:4,column:335},end:{line:4,column:339}}],line:4},"408":{loc:{start:{line:4,column:404},end:{line:4,column:419}},type:"binary-expr",locations:[{start:{line:4,column:404},end:{line:4,column:415}},{start:{line:4,column:417},end:{line:4,column:419}}],line:4},"409":{loc:{start:{line:4,column:428},end:{line:4,column:441}},type:"binary-expr",locations:[{start:{line:4,column:428},end:{line:4,column:437}},{start:{line:4,column:439},end:{line:4,column:441}}],line:4},"410":{loc:{start:{line:4,column:533},end:{line:4,column:564}},type:"binary-expr",locations:[{start:{line:4,column:533},end:{line:4,column:552}},{start:{line:4,column:554},end:{line:4,column:558}},{start:{line:4,column:560},end:{line:4,column:564}}],line:4},"411":{loc:{start:{line:4,column:586},end:{line:4,column:599}},type:"binary-expr",locations:[{start:{line:4,column:586},end:{line:4,column:593}},{start:{line:4,column:595},end:{line:4,column:599}}],line:4},"412":{loc:{start:{line:4,column:607},end:{line:4,column:614}},type:"binary-expr",locations:[{start:{line:4,column:607},end:{line:4,column:608}},{start:{line:4,column:610},end:{line:4,column:614}}],line:4},"413":{loc:{start:{line:4,column:637},end:{line:4,column:671}},type:"cond-expr",locations:[{start:{line:4,column:661},end:{line:4,column:666}},{start:{line:4,column:667},end:{line:4,column:671}}],line:4},"414":{loc:{start:{line:4,column:637},end:{line:4,column:660}},type:"binary-expr",locations:[{start:{line:4,column:637},end:{line:4,column:638}},{start:{line:4,column:640},end:{line:4,column:660}}],line:4},"415":{loc:{start:{line:4,column:827},end:{line:4,column:966}},type:"cond-expr",locations:[{start:{line:4,column:846},end:{line:4,column:870}},{start:{line:4,column:871},end:{line:4,column:966}}],line:4},"416":{loc:{start:{line:4,column:871},end:{line:4,column:966}},type:"binary-expr",locations:[{start:{line:4,column:871},end:{line:4,column:881}},{start:{line:4,column:884},end:{line:4,column:965}}],line:4},"417":{loc:{start:{line:4,column:925},end:{line:4,column:945}},type:"binary-expr",locations:[{start:{line:4,column:925},end:{line:4,column:937}},{start:{line:4,column:939},end:{line:4,column:945}}],line:4},"418":{loc:{start:{line:4,column:1063},end:{line:4,column:1085}},type:"binary-expr",locations:[{start:{line:4,column:1063},end:{line:4,column:1064}},{start:{line:4,column:1066},end:{line:4,column:1085}}],line:4},"419":{loc:{start:{line:4,column:1283},end:{line:4,column:1294}},type:"binary-expr",locations:[{start:{line:4,column:1283},end:{line:4,column:1288}},{start:{line:4,column:1290},end:{line:4,column:1294}}],line:4},"420":{loc:{start:{line:4,column:1336},end:{line:4,column:1347}},type:"binary-expr",locations:[{start:{line:4,column:1336},end:{line:4,column:1341}},{start:{line:4,column:1343},end:{line:4,column:1347}}],line:4},"421":{loc:{start:{line:4,column:1389},end:{line:4,column:1400}},type:"binary-expr",locations:[{start:{line:4,column:1389},end:{line:4,column:1394}},{start:{line:4,column:1396},end:{line:4,column:1400}}],line:4},"422":{loc:{start:{line:4,column:1437},end:{line:4,column:1448}},type:"binary-expr",locations:[{start:{line:4,column:1437},end:{line:4,column:1442}},{start:{line:4,column:1444},end:{line:4,column:1448}}],line:4},"423":{loc:{start:{line:4,column:1466},end:{line:4,column:1497}},type:"if",locations:[{start:{line:4,column:1466},end:{line:4,column:1497}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"424":{loc:{start:{line:4,column:1520},end:{line:4,column:1561}},type:"cond-expr",locations:[{start:{line:4,column:1539},end:{line:4,column:1540}},{start:{line:4,column:1541},end:{line:4,column:1561}}],line:4},"425":{loc:{start:{line:4,column:1541},end:{line:4,column:1561}},type:"cond-expr",locations:[{start:{line:4,column:1549},end:{line:4,column:1551}},{start:{line:4,column:1552},end:{line:4,column:1561}}],line:4},"426":{loc:{start:{line:4,column:1770},end:{line:4,column:1782}},type:"binary-expr",locations:[{start:{line:4,column:1770},end:{line:4,column:1771}},{start:{line:4,column:1774},end:{line:4,column:1781}}],line:4},"427":{loc:{start:{line:4,column:1912},end:{line:4,column:1991}},type:"if",locations:[{start:{line:4,column:1912},end:{line:4,column:1991}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"428":{loc:{start:{line:4,column:1915},end:{line:4,column:1938}},type:"binary-expr",locations:[{start:{line:4,column:1915},end:{line:4,column:1916}},{start:{line:4,column:1918},end:{line:4,column:1938}}],line:4},"429":{loc:{start:{line:4,column:1946},end:{line:4,column:1990}},type:"cond-expr",locations:[{start:{line:4,column:1963},end:{line:4,column:1982}},{start:{line:4,column:1983},end:{line:4,column:1990}}],line:4},"430":{loc:{start:{line:4,column:1991},end:{line:4,column:2010}},type:"if",locations:[{start:{line:4,column:1991},end:{line:4,column:2010}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"431":{loc:{start:{line:4,column:2010},end:{line:4,column:2033}},type:"if",locations:[{start:{line:4,column:2010},end:{line:4,column:2033}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"432":{loc:{start:{line:4,column:2147},end:{line:4,column:2155}},type:"binary-expr",locations:[{start:{line:4,column:2147},end:{line:4,column:2152}},{start:{line:4,column:2154},end:{line:4,column:2155}}],line:4},"433":{loc:{start:{line:4,column:2187},end:{line:4,column:2198}},type:"cond-expr",locations:[{start:{line:4,column:2191},end:{line:4,column:2195}},{start:{line:4,column:2196},end:{line:4,column:2198}}],line:4},"434":{loc:{start:{line:4,column:2211},end:{line:4,column:2229}},type:"if",locations:[{start:{line:4,column:2211},end:{line:4,column:2229}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"435":{loc:{start:{line:4,column:2254},end:{line:4,column:2257}},type:"default-arg",locations:[{start:{line:4,column:2256},end:{line:4,column:2257}}],line:4},"436":{loc:{start:{line:4,column:2270},end:{line:4,column:2305}},type:"if",locations:[{start:{line:4,column:2270},end:{line:4,column:2305}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"437":{loc:{start:{line:4,column:2305},end:{line:4,column:2339}},type:"if",locations:[{start:{line:4,column:2305},end:{line:4,column:2339}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"438":{loc:{start:{line:4,column:2370},end:{line:4,column:2414}},type:"if",locations:[{start:{line:4,column:2370},end:{line:4,column:2414}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"439":{loc:{start:{line:4,column:2380},end:{line:4,column:2406}},type:"if",locations:[{start:{line:4,column:2380},end:{line:4,column:2406}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"440":{loc:{start:{line:4,column:2438},end:{line:4,column:2441}},type:"default-arg",locations:[{start:{line:4,column:2440},end:{line:4,column:2441}}],line:4},"441":{loc:{start:{line:4,column:2450},end:{line:4,column:2458}},type:"binary-expr",locations:[{start:{line:4,column:2450},end:{line:4,column:2454}},{start:{line:4,column:2456},end:{line:4,column:2458}}],line:4},"442":{loc:{start:{line:4,column:2525},end:{line:4,column:2617}},type:"cond-expr",locations:[{start:{line:4,column:2558},end:{line:4,column:2559}},{start:{line:4,column:2560},end:{line:4,column:2617}}],line:4},"443":{loc:{start:{line:4,column:2525},end:{line:4,column:2557}},type:"binary-expr",locations:[{start:{line:4,column:2525},end:{line:4,column:2537}},{start:{line:4,column:2539},end:{line:4,column:2557}}],line:4},"444":{loc:{start:{line:4,column:2563},end:{line:4,column:2576}},type:"binary-expr",locations:[{start:{line:4,column:2563},end:{line:4,column:2573}},{start:{line:4,column:2575},end:{line:4,column:2576}}],line:4},"445":{loc:{start:{line:4,column:2579},end:{line:4,column:2588}},type:"binary-expr",locations:[{start:{line:4,column:2579},end:{line:4,column:2585}},{start:{line:4,column:2587},end:{line:4,column:2588}}],line:4},"446":{loc:{start:{line:4,column:2591},end:{line:4,column:2600}},type:"binary-expr",locations:[{start:{line:4,column:2591},end:{line:4,column:2597}},{start:{line:4,column:2599},end:{line:4,column:2600}}],line:4},"447":{loc:{start:{line:4,column:2603},end:{line:4,column:2616}},type:"binary-expr",locations:[{start:{line:4,column:2603},end:{line:4,column:2613}},{start:{line:4,column:2615},end:{line:4,column:2616}}],line:4},"448":{loc:{start:{line:4,column:2767},end:{line:4,column:2960}},type:"if",locations:[{start:{line:4,column:2767},end:{line:4,column:2960}},{start:{line:4,column:2947},end:{line:4,column:2960}}],line:4},"449":{loc:{start:{line:4,column:2788},end:{line:4,column:2824}},type:"if",locations:[{start:{line:4,column:2788},end:{line:4,column:2824}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"450":{loc:{start:{line:4,column:2881},end:{line:4,column:2925}},type:"cond-expr",locations:[{start:{line:4,column:2900},end:{line:4,column:2921}},{start:{line:4,column:2922},end:{line:4,column:2925}}],line:4},"451":{loc:{start:{line:4,column:2900},end:{line:4,column:2921}},type:"cond-expr",locations:[{start:{line:4,column:2907},end:{line:4,column:2916}},{start:{line:4,column:2917},end:{line:4,column:2921}}],line:4},"452":{loc:{start:{line:4,column:3049},end:{line:4,column:3061}},type:"cond-expr",locations:[{start:{line:4,column:3051},end:{line:4,column:3056}},{start:{line:4,column:3057},end:{line:4,column:3061}}],line:4},"453":{loc:{start:{line:4,column:3081},end:{line:4,column:3113}},type:"if",locations:[{start:{line:4,column:3081},end:{line:4,column:3113}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"454":{loc:{start:{line:4,column:3159},end:{line:4,column:3195}},type:"if",locations:[{start:{line:4,column:3159},end:{line:4,column:3195}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"455":{loc:{start:{line:4,column:3162},end:{line:4,column:3180}},type:"binary-expr",locations:[{start:{line:4,column:3162},end:{line:4,column:3163}},{start:{line:4,column:3166},end:{line:4,column:3179}}],line:4},"456":{loc:{start:{line:4,column:3290},end:{line:4,column:3319}},type:"cond-expr",locations:[{start:{line:4,column:3307},end:{line:4,column:3314}},{start:{line:4,column:3315},end:{line:4,column:3319}}],line:4},"457":{loc:{start:{line:4,column:3340},end:{line:4,column:3377}},type:"cond-expr",locations:[{start:{line:4,column:3352},end:{line:4,column:3361}},{start:{line:4,column:3362},end:{line:4,column:3377}}],line:4},"458":{loc:{start:{line:4,column:3402},end:{line:4,column:3440}},type:"cond-expr",locations:[{start:{line:4,column:3416},end:{line:4,column:3423}},{start:{line:4,column:3424},end:{line:4,column:3440}}],line:4},"459":{loc:{start:{line:4,column:3542},end:{line:4,column:3677}},type:"if",locations:[{start:{line:4,column:3542},end:{line:4,column:3677}},{start:{line:4,column:3567},end:{line:4,column:3677}}],line:4},"460":{loc:{start:{line:4,column:3567},end:{line:4,column:3677}},type:"if",locations:[{start:{line:4,column:3567},end:{line:4,column:3677}},{start:{line:4,column:3602},end:{line:4,column:3677}}],line:4},"461":{loc:{start:{line:4,column:3718},end:{line:4,column:3750}},type:"cond-expr",locations:[{start:{line:4,column:3723},end:{line:4,column:3731}},{start:{line:4,column:3733},end:{line:4,column:3749}}],line:4},"462":{loc:{start:{line:4,column:3784},end:{line:4,column:3805}},type:"if",locations:[{start:{line:4,column:3784},end:{line:4,column:3805}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"463":{loc:{start:{line:4,column:3921},end:{line:4,column:3942}},type:"if",locations:[{start:{line:4,column:3921},end:{line:4,column:3942}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"464":{loc:{start:{line:4,column:3942},end:{line:4,column:3955}},type:"cond-expr",locations:[{start:{line:4,column:3946},end:{line:4,column:3949}},{start:{line:4,column:3950},end:{line:4,column:3955}}],line:4},"465":{loc:{start:{line:4,column:4042},end:{line:4,column:4046}},type:"default-arg",locations:[{start:{line:4,column:4044},end:{line:4,column:4046}}],line:4},"466":{loc:{start:{line:4,column:4048},end:{line:4,column:4109}},type:"if",locations:[{start:{line:4,column:4048},end:{line:4,column:4109}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"467":{loc:{start:{line:4,column:4377},end:{line:4,column:4409}},type:"binary-expr",locations:[{start:{line:4,column:4377},end:{line:4,column:4389}},{start:{line:4,column:4392},end:{line:4,column:4408}}],line:4},"468":{loc:{start:{line:4,column:4412},end:{line:4,column:4431}},type:"binary-expr",locations:[{start:{line:4,column:4412},end:{line:4,column:4422}},{start:{line:4,column:4424},end:{line:4,column:4431}}],line:4},"469":{loc:{start:{line:4,column:4552},end:{line:4,column:4574}},type:"if",locations:[{start:{line:4,column:4552},end:{line:4,column:4574}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"470":{loc:{start:{line:4,column:4595},end:{line:4,column:4604}},type:"binary-expr",locations:[{start:{line:4,column:4595},end:{line:4,column:4597}},{start:{line:4,column:4599},end:{line:4,column:4604}}],line:4},"471":{loc:{start:{line:4,column:4605},end:{line:4,column:4702}},type:"if",locations:[{start:{line:4,column:4605},end:{line:4,column:4702}},{start:{line:4,column:4668},end:{line:4,column:4702}}],line:4},"472":{loc:{start:{line:4,column:4608},end:{line:4,column:4614}},type:"binary-expr",locations:[{start:{line:4,column:4608},end:{line:4,column:4610}},{start:{line:4,column:4612},end:{line:4,column:4614}}],line:4},"473":{loc:{start:{line:4,column:4633},end:{line:4,column:4663}},type:"if",locations:[{start:{line:4,column:4633},end:{line:4,column:4663}},{start:{line:4,column:4655},end:{line:4,column:4663}}],line:4},"474":{loc:{start:{line:4,column:4669},end:{line:4,column:4698}},type:"if",locations:[{start:{line:4,column:4669},end:{line:4,column:4698}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"475":{loc:{start:{line:4,column:4672},end:{line:4,column:4688}},type:"binary-expr",locations:[{start:{line:4,column:4672},end:{line:4,column:4673}},{start:{line:4,column:4675},end:{line:4,column:4688}}],line:4},"476":{loc:{start:{line:4,column:4717},end:{line:4,column:5214}},type:"if",locations:[{start:{line:4,column:4717},end:{line:4,column:5214}},{start:{line:4,column:4870},end:{line:4,column:5214}}],line:4},"477":{loc:{start:{line:4,column:4723},end:{line:4,column:4737}},type:"if",locations:[{start:{line:4,column:4723},end:{line:4,column:4737}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"478":{loc:{start:{line:4,column:4737},end:{line:4,column:4864}},type:"if",locations:[{start:{line:4,column:4737},end:{line:4,column:4864}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"479":{loc:{start:{line:4,column:4771},end:{line:4,column:4836}},type:"cond-expr",locations:[{start:{line:4,column:4805},end:{line:4,column:4821}},{start:{line:4,column:4822},end:{line:4,column:4836}}],line:4},"480":{loc:{start:{line:4,column:4870},end:{line:4,column:5214}},type:"if",locations:[{start:{line:4,column:4870},end:{line:4,column:5214}},{start:{line:4,column:5205},end:{line:4,column:5214}}],line:4},"481":{loc:{start:{line:4,column:4876},end:{line:4,column:4986}},type:"if",locations:[{start:{line:4,column:4876},end:{line:4,column:4986}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"482":{loc:{start:{line:4,column:4879},end:{line:4,column:4898}},type:"binary-expr",locations:[{start:{line:4,column:4879},end:{line:4,column:4894}},{start:{line:4,column:4896},end:{line:4,column:4898}}],line:4},"483":{loc:{start:{line:4,column:4932},end:{line:4,column:4963}},type:"binary-expr",locations:[{start:{line:4,column:4932},end:{line:4,column:4943}},{start:{line:4,column:4946},end:{line:4,column:4962}}],line:4},"484":{loc:{start:{line:4,column:4966},end:{line:4,column:4985}},type:"binary-expr",locations:[{start:{line:4,column:4966},end:{line:4,column:4976}},{start:{line:4,column:4978},end:{line:4,column:4985}}],line:4},"485":{loc:{start:{line:4,column:4986},end:{line:4,column:5139}},type:"if",locations:[{start:{line:4,column:4986},end:{line:4,column:5139}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"486":{loc:{start:{line:4,column:4999},end:{line:4,column:5017}},type:"binary-expr",locations:[{start:{line:4,column:4999},end:{line:4,column:5004}},{start:{line:4,column:5007},end:{line:4,column:5016}}],line:4},"487":{loc:{start:{line:4,column:5157},end:{line:4,column:5199}},type:"if",locations:[{start:{line:4,column:5157},end:{line:4,column:5199}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"488":{loc:{start:{line:4,column:5160},end:{line:4,column:5171}},type:"binary-expr",locations:[{start:{line:4,column:5160},end:{line:4,column:5167}},{start:{line:4,column:5169},end:{line:4,column:5171}}],line:4},"489":{loc:{start:{line:4,column:5221},end:{line:4,column:5248}},type:"binary-expr",locations:[{start:{line:4,column:5221},end:{line:4,column:5226}},{start:{line:4,column:5228},end:{line:4,column:5248}}],line:4},"490":{loc:{start:{line:4,column:5281},end:{line:4,column:5309}},type:"binary-expr",locations:[{start:{line:4,column:5281},end:{line:4,column:5286}},{start:{line:4,column:5289},end:{line:4,column:5308}}],line:4},"491":{loc:{start:{line:4,column:5310},end:{line:4,column:5339}},type:"cond-expr",locations:[{start:{line:4,column:5327},end:{line:4,column:5334}},{start:{line:4,column:5335},end:{line:4,column:5339}}],line:4},"492":{loc:{start:{line:4,column:5400},end:{line:4,column:5437}},type:"binary-expr",locations:[{start:{line:4,column:5400},end:{line:4,column:5408}},{start:{line:4,column:5410},end:{line:4,column:5428}},{start:{line:4,column:5430},end:{line:4,column:5437}}],line:4},"493":{loc:{start:{line:4,column:5462},end:{line:4,column:5478}},type:"binary-expr",locations:[{start:{line:4,column:5462},end:{line:4,column:5463}},{start:{line:4,column:5465},end:{line:4,column:5478}}],line:4},"494":{loc:{start:{line:4,column:5504},end:{line:4,column:5519}},type:"binary-expr",locations:[{start:{line:4,column:5504},end:{line:4,column:5505}},{start:{line:4,column:5507},end:{line:4,column:5519}}],line:4},"495":{loc:{start:{line:4,column:5651},end:{line:4,column:5675}},type:"binary-expr",locations:[{start:{line:4,column:5651},end:{line:4,column:5662}},{start:{line:4,column:5665},end:{line:4,column:5674}}],line:4},"496":{loc:{start:{line:4,column:6007},end:{line:4,column:6065}},type:"binary-expr",locations:[{start:{line:4,column:6007},end:{line:4,column:6027}},{start:{line:4,column:6029},end:{line:4,column:6065}}],line:4},"497":{loc:{start:{line:4,column:6093},end:{line:4,column:6152}},type:"binary-expr",locations:[{start:{line:4,column:6093},end:{line:4,column:6100}},{start:{line:4,column:6102},end:{line:4,column:6126}},{start:{line:4,column:6128},end:{line:4,column:6152}}],line:4},"498":{loc:{start:{line:4,column:6229},end:{line:4,column:6237}},type:"binary-expr",locations:[{start:{line:4,column:6229},end:{line:4,column:6234}},{start:{line:4,column:6236},end:{line:4,column:6237}}],line:4},"499":{loc:{start:{line:4,column:6275},end:{line:4,column:6293}},type:"if",locations:[{start:{line:4,column:6275},end:{line:4,column:6293}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"500":{loc:{start:{line:4,column:6757},end:{line:4,column:6761}},type:"default-arg",locations:[{start:{line:4,column:6759},end:{line:4,column:6761}}],line:4},"501":{loc:{start:{line:4,column:6765},end:{line:4,column:6817}},type:"if",locations:[{start:{line:4,column:6765},end:{line:4,column:6817}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"502":{loc:{start:{line:4,column:6858},end:{line:4,column:7043}},type:"if",locations:[{start:{line:4,column:6858},end:{line:4,column:7043}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"503":{loc:{start:{line:4,column:6895},end:{line:4,column:7005}},type:"if",locations:[{start:{line:4,column:6895},end:{line:4,column:7005}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"504":{loc:{start:{line:4,column:6916},end:{line:4,column:6928}},type:"binary-expr",locations:[{start:{line:4,column:6916},end:{line:4,column:6921}},{start:{line:4,column:6923},end:{line:4,column:6928}}],line:4},"505":{loc:{start:{line:4,column:6929},end:{line:4,column:6982}},type:"cond-expr",locations:[{start:{line:4,column:6961},end:{line:4,column:6975}},{start:{line:4,column:6976},end:{line:4,column:6982}}],line:4},"506":{loc:{start:{line:4,column:6929},end:{line:4,column:6960}},type:"binary-expr",locations:[{start:{line:4,column:6929},end:{line:4,column:6930}},{start:{line:4,column:6932},end:{line:4,column:6960}}],line:4},"507":{loc:{start:{line:4,column:7005},end:{line:4,column:7042}},type:"if",locations:[{start:{line:4,column:7005},end:{line:4,column:7042}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"508":{loc:{start:{line:4,column:7049},end:{line:4,column:7069}},type:"cond-expr",locations:[{start:{line:4,column:7053},end:{line:4,column:7057}},{start:{line:4,column:7058},end:{line:4,column:7069}}],line:4},"509":{loc:{start:{line:4,column:7079},end:{line:4,column:7097}},type:"cond-expr",locations:[{start:{line:4,column:7091},end:{line:4,column:7095}},{start:{line:4,column:7096},end:{line:4,column:7097}}],line:4},"510":{loc:{start:{line:4,column:7079},end:{line:4,column:7090}},type:"binary-expr",locations:[{start:{line:4,column:7079},end:{line:4,column:7082}},{start:{line:4,column:7084},end:{line:4,column:7090}}],line:4},"511":{loc:{start:{line:4,column:7136},end:{line:4,column:7170}},type:"cond-expr",locations:[{start:{line:4,column:7155},end:{line:4,column:7168}},{start:{line:4,column:7169},end:{line:4,column:7170}}],line:4},"512":{loc:{start:{line:4,column:7136},end:{line:4,column:7154}},type:"binary-expr",locations:[{start:{line:4,column:7136},end:{line:4,column:7144}},{start:{line:4,column:7146},end:{line:4,column:7154}}],line:4},"513":{loc:{start:{line:4,column:7406},end:{line:4,column:7429}},type:"cond-expr",locations:[{start:{line:4,column:7412},end:{line:4,column:7413}},{start:{line:4,column:7414},end:{line:4,column:7429}}],line:4},"514":{loc:{start:{line:4,column:7416},end:{line:4,column:7428}},type:"binary-expr",locations:[{start:{line:4,column:7416},end:{line:4,column:7417}},{start:{line:4,column:7419},end:{line:4,column:7428}}],line:4},"515":{loc:{start:{line:4,column:7438},end:{line:4,column:7581}},type:"if",locations:[{start:{line:4,column:7438},end:{line:4,column:7581}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"516":{loc:{start:{line:4,column:7441},end:{line:4,column:7461}},type:"binary-expr",locations:[{start:{line:4,column:7441},end:{line:4,column:7447}},{start:{line:4,column:7449},end:{line:4,column:7461}}],line:4},"517":{loc:{start:{line:4,column:7489},end:{line:4,column:7560}},type:"binary-expr",locations:[{start:{line:4,column:7489},end:{line:4,column:7490}},{start:{line:4,column:7493},end:{line:4,column:7559}}],line:4},"518":{loc:{start:{line:4,column:7636},end:{line:4,column:7665}},type:"if",locations:[{start:{line:4,column:7636},end:{line:4,column:7665}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"519":{loc:{start:{line:4,column:7672},end:{line:4,column:7726}},type:"binary-expr",locations:[{start:{line:4,column:7672},end:{line:4,column:7684}},{start:{line:4,column:7687},end:{line:4,column:7725}}],line:4},"520":{loc:{start:{line:4,column:7727},end:{line:4,column:7810}},type:"binary-expr",locations:[{start:{line:4,column:7727},end:{line:4,column:7751}},{start:{line:4,column:7753},end:{line:4,column:7760}},{start:{line:4,column:7762},end:{line:4,column:7773}},{start:{line:4,column:7775},end:{line:4,column:7810}}],line:4},"521":{loc:{start:{line:4,column:7857},end:{line:4,column:7883}},type:"if",locations:[{start:{line:4,column:7857},end:{line:4,column:7883}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"522":{loc:{start:{line:4,column:7912},end:{line:4,column:7989}},type:"cond-expr",locations:[{start:{line:4,column:7931},end:{line:4,column:7960}},{start:{line:4,column:7961},end:{line:4,column:7989}}],line:4},"523":{loc:{start:{line:4,column:7931},end:{line:4,column:7960}},type:"binary-expr",locations:[{start:{line:4,column:7931},end:{line:4,column:7940}},{start:{line:4,column:7942},end:{line:4,column:7960}}],line:4},"524":{loc:{start:{line:4,column:8047},end:{line:4,column:8087}},type:"binary-expr",locations:[{start:{line:4,column:8047},end:{line:4,column:8053}},{start:{line:4,column:8055},end:{line:4,column:8087}}],line:4},"525":{loc:{start:{line:4,column:8119},end:{line:4,column:8143}},type:"cond-expr",locations:[{start:{line:4,column:8128},end:{line:4,column:8137}},{start:{line:4,column:8138},end:{line:4,column:8143}}],line:4},"526":{loc:{start:{line:4,column:8144},end:{line:4,column:8165}},type:"if",locations:[{start:{line:4,column:8144},end:{line:4,column:8165}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"527":{loc:{start:{line:4,column:8165},end:{line:4,column:8204}},type:"if",locations:[{start:{line:4,column:8165},end:{line:4,column:8204}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"528":{loc:{start:{line:4,column:8204},end:{line:4,column:8242}},type:"if",locations:[{start:{line:4,column:8204},end:{line:4,column:8242}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"529":{loc:{start:{line:4,column:8278},end:{line:4,column:8313}},type:"if",locations:[{start:{line:4,column:8278},end:{line:4,column:8313}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"530":{loc:{start:{line:4,column:8332},end:{line:4,column:8367}},type:"cond-expr",locations:[{start:{line:4,column:8341},end:{line:4,column:8357}},{start:{line:4,column:8358},end:{line:4,column:8367}}],line:4},"531":{loc:{start:{line:4,column:8383},end:{line:4,column:8421}},type:"if",locations:[{start:{line:4,column:8383},end:{line:4,column:8421}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"532":{loc:{start:{line:4,column:8476},end:{line:4,column:8774}},type:"if",locations:[{start:{line:4,column:8476},end:{line:4,column:8774}},{start:{line:4,column:8522},end:{line:4,column:8774}}],line:4},"533":{loc:{start:{line:4,column:8504},end:{line:4,column:8516}},type:"binary-expr",locations:[{start:{line:4,column:8504},end:{line:4,column:8509}},{start:{line:4,column:8511},end:{line:4,column:8516}}],line:4},"534":{loc:{start:{line:4,column:8522},end:{line:4,column:8774}},type:"if",locations:[{start:{line:4,column:8522},end:{line:4,column:8774}},{start:{line:4,column:8556},end:{line:4,column:8774}}],line:4},"535":{loc:{start:{line:4,column:8556},end:{line:4,column:8774}},type:"if",locations:[{start:{line:4,column:8556},end:{line:4,column:8774}},{start:{line:4,column:8608},end:{line:4,column:8774}}],line:4},"536":{loc:{start:{line:4,column:8590},end:{line:4,column:8600}},type:"binary-expr",locations:[{start:{line:4,column:8590},end:{line:4,column:8596}},{start:{line:4,column:8598},end:{line:4,column:8600}}],line:4},"537":{loc:{start:{line:4,column:8608},end:{line:4,column:8774}},type:"if",locations:[{start:{line:4,column:8608},end:{line:4,column:8774}},{start:{line:4,column:8676},end:{line:4,column:8774}}],line:4},"538":{loc:{start:{line:4,column:8646},end:{line:4,column:8670}},type:"cond-expr",locations:[{start:{line:4,column:8662},end:{line:4,column:8663}},{start:{line:4,column:8664},end:{line:4,column:8670}}],line:4},"539":{loc:{start:{line:4,column:8646},end:{line:4,column:8661}},type:"binary-expr",locations:[{start:{line:4,column:8646},end:{line:4,column:8656}},{start:{line:4,column:8658},end:{line:4,column:8661}}],line:4},"540":{loc:{start:{line:4,column:8685},end:{line:4,column:8711}},type:"binary-expr",locations:[{start:{line:4,column:8685},end:{line:4,column:8686}},{start:{line:4,column:8689},end:{line:4,column:8699}},{start:{line:4,column:8701},end:{line:4,column:8710}}],line:4},"541":{loc:{start:{line:4,column:8713},end:{line:4,column:8773}},type:"if",locations:[{start:{line:4,column:8713},end:{line:4,column:8773}},{start:{line:4,column:8754},end:{line:4,column:8773}}],line:4},"542":{loc:{start:{line:4,column:8761},end:{line:4,column:8773}},type:"binary-expr",locations:[{start:{line:4,column:8761},end:{line:4,column:8766}},{start:{line:4,column:8768},end:{line:4,column:8773}}],line:4},"543":{loc:{start:{line:4,column:8798},end:{line:4,column:8833}},type:"if",locations:[{start:{line:4,column:8798},end:{line:4,column:8833}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"544":{loc:{start:{line:4,column:8850},end:{line:4,column:8854}},type:"default-arg",locations:[{start:{line:4,column:8852},end:{line:4,column:8854}}],line:4},"545":{loc:{start:{line:4,column:8887},end:{line:4,column:8898}},type:"cond-expr",locations:[{start:{line:4,column:8889},end:{line:4,column:8891}},{start:{line:4,column:8892},end:{line:4,column:8898}}],line:4},"546":{loc:{start:{line:4,column:8952},end:{line:4,column:9014}},type:"binary-expr",locations:[{start:{line:4,column:8952},end:{line:4,column:8960}},{start:{line:4,column:8962},end:{line:4,column:8980}},{start:{line:4,column:8982},end:{line:4,column:9014}}],line:4},"547":{loc:{start:{line:4,column:9037},end:{line:4,column:9114}},type:"binary-expr",locations:[{start:{line:4,column:9037},end:{line:4,column:9057}},{start:{line:4,column:9059},end:{line:4,column:9077}},{start:{line:4,column:9079},end:{line:4,column:9114}}],line:4},"548":{loc:{start:{line:4,column:9147},end:{line:4,column:9209}},type:"cond-expr",locations:[{start:{line:4,column:9164},end:{line:4,column:9171}},{start:{line:4,column:9172},end:{line:4,column:9209}}],line:4},"549":{loc:{start:{line:4,column:9172},end:{line:4,column:9209}},type:"cond-expr",locations:[{start:{line:4,column:9181},end:{line:4,column:9204}},{start:{line:4,column:9205},end:{line:4,column:9209}}],line:4},"550":{loc:{start:{line:4,column:9172},end:{line:4,column:9180}},type:"binary-expr",locations:[{start:{line:4,column:9172},end:{line:4,column:9173}},{start:{line:4,column:9175},end:{line:4,column:9180}}],line:4},"551":{loc:{start:{line:4,column:9233},end:{line:4,column:9272}},type:"cond-expr",locations:[{start:{line:4,column:9250},end:{line:4,column:9259}},{start:{line:4,column:9261},end:{line:4,column:9272}}],line:4},"552":{loc:{start:{line:4,column:9355},end:{line:4,column:9380}},type:"binary-expr",locations:[{start:{line:4,column:9355},end:{line:4,column:9368}},{start:{line:4,column:9370},end:{line:4,column:9380}}],line:4},"553":{loc:{start:{line:4,column:9587},end:{line:4,column:9627}},type:"binary-expr",locations:[{start:{line:4,column:9587},end:{line:4,column:9603}},{start:{line:4,column:9605},end:{line:4,column:9627}}],line:4},"554":{loc:{start:{line:4,column:9650},end:{line:4,column:9678}},type:"binary-expr",locations:[{start:{line:4,column:9650},end:{line:4,column:9666}},{start:{line:4,column:9668},end:{line:4,column:9678}}],line:4},"555":{loc:{start:{line:4,column:10138},end:{line:4,column:10192}},type:"binary-expr",locations:[{start:{line:4,column:10138},end:{line:4,column:10154}},{start:{line:4,column:10157},end:{line:4,column:10191}}],line:4},"556":{loc:{start:{line:4,column:10235},end:{line:4,column:10248}},type:"cond-expr",locations:[{start:{line:4,column:10241},end:{line:4,column:10242}},{start:{line:4,column:10243},end:{line:4,column:10248}}],line:4},"557":{loc:{start:{line:4,column:10376},end:{line:4,column:10393}},type:"cond-expr",locations:[{start:{line:4,column:10384},end:{line:4,column:10388}},{start:{line:4,column:10389},end:{line:4,column:10393}}],line:4},"558":{loc:{start:{line:4,column:10432},end:{line:4,column:10468}},type:"binary-expr",locations:[{start:{line:4,column:10432},end:{line:4,column:10441}},{start:{line:4,column:10444},end:{line:4,column:10467}}],line:4},"559":{loc:{start:{line:4,column:10455},end:{line:4,column:10467}},type:"binary-expr",locations:[{start:{line:4,column:10455},end:{line:4,column:10460}},{start:{line:4,column:10462},end:{line:4,column:10467}}],line:4},"560":{loc:{start:{line:4,column:10541},end:{line:4,column:10564}},type:"binary-expr",locations:[{start:{line:4,column:10541},end:{line:4,column:10550}},{start:{line:4,column:10552},end:{line:4,column:10564}}],line:4},"561":{loc:{start:{line:4,column:10623},end:{line:4,column:10644}},type:"binary-expr",locations:[{start:{line:4,column:10623},end:{line:4,column:10630}},{start:{line:4,column:10633},end:{line:4,column:10643}}],line:4},"562":{loc:{start:{line:4,column:10645},end:{line:4,column:10657}},type:"binary-expr",locations:[{start:{line:4,column:10645},end:{line:4,column:10650}},{start:{line:4,column:10652},end:{line:4,column:10657}}],line:4},"563":{loc:{start:{line:4,column:10732},end:{line:4,column:10775}},type:"binary-expr",locations:[{start:{line:4,column:10732},end:{line:4,column:10740}},{start:{line:4,column:10742},end:{line:4,column:10775}}],line:4},"564":{loc:{start:{line:4,column:10744},end:{line:4,column:10774}},type:"binary-expr",locations:[{start:{line:4,column:10744},end:{line:4,column:10753}},{start:{line:4,column:10756},end:{line:4,column:10773}}],line:4},"565":{loc:{start:{line:4,column:10802},end:{line:4,column:10831}},type:"if",locations:[{start:{line:4,column:10802},end:{line:4,column:10831}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"566":{loc:{start:{line:4,column:10831},end:{line:4,column:10855}},type:"binary-expr",locations:[{start:{line:4,column:10831},end:{line:4,column:10843}},{start:{line:4,column:10846},end:{line:4,column:10854}}],line:4},"567":{loc:{start:{line:4,column:10887},end:{line:4,column:10910}},type:"if",locations:[{start:{line:4,column:10887},end:{line:4,column:10910}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"568":{loc:{start:{line:4,column:10933},end:{line:4,column:10958}},type:"binary-expr",locations:[{start:{line:4,column:10933},end:{line:4,column:10939}},{start:{line:4,column:10941},end:{line:4,column:10958}}],line:4},"569":{loc:{start:{line:4,column:10992},end:{line:4,column:11004}},type:"cond-expr",locations:[{start:{line:4,column:10998},end:{line:4,column:11002}},{start:{line:4,column:11003},end:{line:4,column:11004}}],line:4},"570":{loc:{start:{line:4,column:11118},end:{line:4,column:11161}},type:"binary-expr",locations:[{start:{line:4,column:11118},end:{line:4,column:11135}},{start:{line:4,column:11137},end:{line:4,column:11161}}],line:4},"571":{loc:{start:{line:4,column:11765},end:{line:4,column:11786}},type:"binary-expr",locations:[{start:{line:4,column:11765},end:{line:4,column:11773}},{start:{line:4,column:11775},end:{line:4,column:11786}}],line:4},"572":{loc:{start:{line:4,column:11904},end:{line:4,column:11925}},type:"cond-expr",locations:[{start:{line:4,column:11915},end:{line:4,column:11916}},{start:{line:4,column:11917},end:{line:4,column:11925}}],line:4},"573":{loc:{start:{line:4,column:12224},end:{line:4,column:12280}},type:"binary-expr",locations:[{start:{line:4,column:12224},end:{line:4,column:12230}},{start:{line:4,column:12233},end:{line:4,column:12279}}],line:4},"574":{loc:{start:{line:4,column:12775},end:{line:4,column:12791}},type:"cond-expr",locations:[{start:{line:4,column:12782},end:{line:4,column:12786}},{start:{line:4,column:12787},end:{line:4,column:12791}}],line:4},"575":{loc:{start:{line:4,column:12917},end:{line:4,column:12960}},type:"cond-expr",locations:[{start:{line:4,column:12928},end:{line:4,column:12939}},{start:{line:4,column:12940},end:{line:4,column:12960}}],line:4},"576":{loc:{start:{line:4,column:12940},end:{line:4,column:12960}},type:"cond-expr",locations:[{start:{line:4,column:12951},end:{line:4,column:12955}},{start:{line:4,column:12956},end:{line:4,column:12960}}],line:4},"577":{loc:{start:{line:4,column:12980},end:{line:4,column:13110}},type:"if",locations:[{start:{line:4,column:12980},end:{line:4,column:13110}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"578":{loc:{start:{line:4,column:13016},end:{line:4,column:13032}},type:"binary-expr",locations:[{start:{line:4,column:13016},end:{line:4,column:13024}},{start:{line:4,column:13026},end:{line:4,column:13032}}],line:4},"579":{loc:{start:{line:4,column:13034},end:{line:4,column:13081}},type:"if",locations:[{start:{line:4,column:13034},end:{line:4,column:13081}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"580":{loc:{start:{line:4,column:13045},end:{line:4,column:13074}},type:"binary-expr",locations:[{start:{line:4,column:13045},end:{line:4,column:13053}},{start:{line:4,column:13056},end:{line:4,column:13073}}],line:4},"581":{loc:{start:{line:4,column:13081},end:{line:4,column:13102}},type:"if",locations:[{start:{line:4,column:13081},end:{line:4,column:13102}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"582":{loc:{start:{line:4,column:13354},end:{line:4,column:13375}},type:"cond-expr",locations:[{start:{line:4,column:13363},end:{line:4,column:13367}},{start:{line:4,column:13368},end:{line:4,column:13375}}],line:4},"583":{loc:{start:{line:4,column:13383},end:{line:4,column:13399}},type:"cond-expr",locations:[{start:{line:4,column:13392},end:{line:4,column:13397}},{start:{line:4,column:13398},end:{line:4,column:13399}}],line:4},"584":{loc:{start:{line:4,column:13670},end:{line:4,column:13691}},type:"binary-expr",locations:[{start:{line:4,column:13670},end:{line:4,column:13678}},{start:{line:4,column:13681},end:{line:4,column:13690}}],line:4},"585":{loc:{start:{line:4,column:14465},end:{line:4,column:14471}},type:"default-arg",locations:[{start:{line:4,column:14467},end:{line:4,column:14471}}],line:4},"586":{loc:{start:{line:4,column:14472},end:{line:4,column:14478}},type:"default-arg",locations:[{start:{line:4,column:14474},end:{line:4,column:14478}}],line:4},"587":{loc:{start:{line:4,column:14555},end:{line:4,column:14561}},type:"default-arg",locations:[{start:{line:4,column:14557},end:{line:4,column:14561}}],line:4},"588":{loc:{start:{line:4,column:14562},end:{line:4,column:14568}},type:"default-arg",locations:[{start:{line:4,column:14564},end:{line:4,column:14568}}],line:4},"589":{loc:{start:{line:4,column:14571},end:{line:4,column:14580}},type:"default-arg",locations:[{start:{line:4,column:14573},end:{line:4,column:14580}}],line:4},"590":{loc:{start:{line:4,column:14589},end:{line:4,column:14593}},type:"binary-expr",locations:[{start:{line:4,column:14589},end:{line:4,column:14590}},{start:{line:4,column:14592},end:{line:4,column:14593}}],line:4},"591":{loc:{start:{line:4,column:14619},end:{line:4,column:14626}},type:"binary-expr",locations:[{start:{line:4,column:14619},end:{line:4,column:14620}},{start:{line:4,column:14622},end:{line:4,column:14626}}],line:4},"592":{loc:{start:{line:4,column:14627},end:{line:4,column:14634}},type:"binary-expr",locations:[{start:{line:4,column:14627},end:{line:4,column:14628}},{start:{line:4,column:14630},end:{line:4,column:14634}}],line:4},"593":{loc:{start:{line:4,column:14720},end:{line:4,column:14768}},type:"if",locations:[{start:{line:4,column:14720},end:{line:4,column:14768}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"594":{loc:{start:{line:4,column:14775},end:{line:4,column:14785}},type:"binary-expr",locations:[{start:{line:4,column:14775},end:{line:4,column:14781}},{start:{line:4,column:14783},end:{line:4,column:14785}}],line:4},"595":{loc:{start:{line:4,column:15391},end:{line:4,column:15431}},type:"cond-expr",locations:[{start:{line:4,column:15406},end:{line:4,column:15408}},{start:{line:4,column:15409},end:{line:4,column:15431}}],line:4},"596":{loc:{start:{line:4,column:15471},end:{line:4,column:15538}},type:"cond-expr",locations:[{start:{line:4,column:15486},end:{line:4,column:15521}},{start:{line:4,column:15522},end:{line:4,column:15538}}],line:4},"597":{loc:{start:{line:4,column:15545},end:{line:4,column:15610}},type:"binary-expr",locations:[{start:{line:4,column:15545},end:{line:4,column:15566}},{start:{line:4,column:15568},end:{line:4,column:15583}},{start:{line:4,column:15585},end:{line:4,column:15610}}],line:4},"598":{loc:{start:{line:4,column:15805},end:{line:4,column:15880}},type:"binary-expr",locations:[{start:{line:4,column:15805},end:{line:4,column:15831}},{start:{line:4,column:15833},end:{line:4,column:15853}},{start:{line:4,column:15855},end:{line:4,column:15880}}],line:4},"599":{loc:{start:{line:4,column:15921},end:{line:4,column:15968}},type:"binary-expr",locations:[{start:{line:4,column:15921},end:{line:4,column:15941}},{start:{line:4,column:15943},end:{line:4,column:15968}}],line:4},"600":{loc:{start:{line:4,column:16178},end:{line:4,column:16182}},type:"default-arg",locations:[{start:{line:4,column:16180},end:{line:4,column:16182}}],line:4},"601":{loc:{start:{line:4,column:16209},end:{line:4,column:16306}},type:"binary-expr",locations:[{start:{line:4,column:16209},end:{line:4,column:16213}},{start:{line:4,column:16216},end:{line:4,column:16305}}],line:4},"602":{loc:{start:{line:4,column:16232},end:{line:4,column:16259}},type:"binary-expr",locations:[{start:{line:4,column:16232},end:{line:4,column:16251}},{start:{line:4,column:16253},end:{line:4,column:16259}}],line:4},"603":{loc:{start:{line:4,column:16278},end:{line:4,column:16305}},type:"binary-expr",locations:[{start:{line:4,column:16278},end:{line:4,column:16297}},{start:{line:4,column:16299},end:{line:4,column:16305}}],line:4},"604":{loc:{start:{line:4,column:16388},end:{line:4,column:16401}},type:"binary-expr",locations:[{start:{line:4,column:16388},end:{line:4,column:16389}},{start:{line:4,column:16392},end:{line:4,column:16400}}],line:4},"605":{loc:{start:{line:4,column:16406},end:{line:4,column:16499}},type:"if",locations:[{start:{line:4,column:16406},end:{line:4,column:16499}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"606":{loc:{start:{line:4,column:16409},end:{line:4,column:16430}},type:"binary-expr",locations:[{start:{line:4,column:16409},end:{line:4,column:16410}},{start:{line:4,column:16412},end:{line:4,column:16430}}],line:4},"607":{loc:{start:{line:4,column:16499},end:{line:4,column:16598}},type:"binary-expr",locations:[{start:{line:4,column:16499},end:{line:4,column:16513}},{start:{line:4,column:16516},end:{line:4,column:16597}}],line:4},"608":{loc:{start:{line:4,column:16540},end:{line:4,column:16568}},type:"binary-expr",locations:[{start:{line:4,column:16540},end:{line:4,column:16541}},{start:{line:4,column:16544},end:{line:4,column:16567}}],line:4},"609":{loc:{start:{line:4,column:16569},end:{line:4,column:16597}},type:"binary-expr",locations:[{start:{line:4,column:16569},end:{line:4,column:16570}},{start:{line:4,column:16573},end:{line:4,column:16596}}],line:4},"610":{loc:{start:{line:4,column:16657},end:{line:4,column:16681}},type:"binary-expr",locations:[{start:{line:4,column:16657},end:{line:4,column:16671}},{start:{line:4,column:16673},end:{line:4,column:16681}}],line:4},"611":{loc:{start:{line:4,column:16776},end:{line:4,column:16816}},type:"binary-expr",locations:[{start:{line:4,column:16776},end:{line:4,column:16786}},{start:{line:4,column:16788},end:{line:4,column:16816}}],line:4},"612":{loc:{start:{line:4,column:16893},end:{line:4,column:16969}},type:"binary-expr",locations:[{start:{line:4,column:16893},end:{line:4,column:16903}},{start:{line:4,column:16905},end:{line:4,column:16944}},{start:{line:4,column:16946},end:{line:4,column:16969}}],line:4},"613":{loc:{start:{line:4,column:16970},end:{line:4,column:16997}},type:"binary-expr",locations:[{start:{line:4,column:16970},end:{line:4,column:16980}},{start:{line:4,column:16982},end:{line:4,column:16997}}],line:4},"614":{loc:{start:{line:4,column:17041},end:{line:4,column:17123}},type:"binary-expr",locations:[{start:{line:4,column:17041},end:{line:4,column:17081}},{start:{line:4,column:17084},end:{line:4,column:17122}}],line:4},"615":{loc:{start:{line:4,column:17429},end:{line:4,column:17433}},type:"default-arg",locations:[{start:{line:4,column:17431},end:{line:4,column:17433}}],line:4},"616":{loc:{start:{line:4,column:17469},end:{line:4,column:17473}},type:"default-arg",locations:[{start:{line:4,column:17471},end:{line:4,column:17473}}],line:4},"617":{loc:{start:{line:4,column:17507},end:{line:4,column:17511}},type:"default-arg",locations:[{start:{line:4,column:17509},end:{line:4,column:17511}}],line:4},"618":{loc:{start:{line:4,column:17531},end:{line:4,column:17535}},type:"default-arg",locations:[{start:{line:4,column:17533},end:{line:4,column:17535}}],line:4},"619":{loc:{start:{line:4,column:17539},end:{line:4,column:17578}},type:"if",locations:[{start:{line:4,column:17539},end:{line:4,column:17578}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"620":{loc:{start:{line:4,column:17658},end:{line:4,column:17740}},type:"binary-expr",locations:[{start:{line:4,column:17658},end:{line:4,column:17683}},{start:{line:4,column:17686},end:{line:4,column:17739}}],line:4},"621":{loc:{start:{line:4,column:17741},end:{line:4,column:17826}},type:"binary-expr",locations:[{start:{line:4,column:17741},end:{line:4,column:17742}},{start:{line:4,column:17744},end:{line:4,column:17771}},{start:{line:4,column:17774},end:{line:4,column:17825}}],line:4},"622":{loc:{start:{line:4,column:17864},end:{line:4,column:17869}},type:"binary-expr",locations:[{start:{line:4,column:17864},end:{line:4,column:17866}},{start:{line:4,column:17868},end:{line:4,column:17869}}],line:4},"623":{loc:{start:{line:4,column:17991},end:{line:4,column:18033}},type:"binary-expr",locations:[{start:{line:4,column:17991},end:{line:4,column:18006}},{start:{line:4,column:18008},end:{line:4,column:18033}}],line:4},"624":{loc:{start:{line:4,column:18063},end:{line:4,column:18106}},type:"if",locations:[{start:{line:4,column:18063},end:{line:4,column:18106}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"625":{loc:{start:{line:4,column:18139},end:{line:4,column:18181}},type:"if",locations:[{start:{line:4,column:18139},end:{line:4,column:18181}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"626":{loc:{start:{line:4,column:18488},end:{line:4,column:18712}},type:"if",locations:[{start:{line:4,column:18488},end:{line:4,column:18712}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"627":{loc:{start:{line:4,column:18491},end:{line:4,column:18542}},type:"binary-expr",locations:[{start:{line:4,column:18491},end:{line:4,column:18504}},{start:{line:4,column:18506},end:{line:4,column:18529}},{start:{line:4,column:18531},end:{line:4,column:18542}}],line:4},"628":{loc:{start:{line:4,column:18598},end:{line:4,column:18711}},type:"if",locations:[{start:{line:4,column:18598},end:{line:4,column:18711}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"629":{loc:{start:{line:4,column:18728},end:{line:4,column:18782}},type:"if",locations:[{start:{line:4,column:18728},end:{line:4,column:18782}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"630":{loc:{start:{line:4,column:18731},end:{line:4,column:18774}},type:"binary-expr",locations:[{start:{line:4,column:18731},end:{line:4,column:18753}},{start:{line:4,column:18755},end:{line:4,column:18774}}],line:4},"631":{loc:{start:{line:4,column:18915},end:{line:4,column:18984}},type:"cond-expr",locations:[{start:{line:4,column:18936},end:{line:4,column:18960}},{start:{line:4,column:18961},end:{line:4,column:18984}}],line:4},"632":{loc:{start:{line:4,column:19137},end:{line:4,column:19175}},type:"if",locations:[{start:{line:4,column:19137},end:{line:4,column:19175}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"633":{loc:{start:{line:4,column:19222},end:{line:4,column:19323}},type:"binary-expr",locations:[{start:{line:4,column:19223},end:{line:4,column:19259}},{start:{line:4,column:19261},end:{line:4,column:19281}},{start:{line:4,column:19283},end:{line:4,column:19317}},{start:{line:4,column:19320},end:{line:4,column:19323}}],line:4},"634":{loc:{start:{line:4,column:19404},end:{line:4,column:19473}},type:"binary-expr",locations:[{start:{line:4,column:19404},end:{line:4,column:19438}},{start:{line:4,column:19440},end:{line:4,column:19460}},{start:{line:4,column:19462},end:{line:4,column:19468}},{start:{line:4,column:19470},end:{line:4,column:19473}}],line:4},"635":{loc:{start:{line:4,column:19519},end:{line:4,column:19659}},type:"binary-expr",locations:[{start:{line:4,column:19519},end:{line:4,column:19524}},{start:{line:4,column:19527},end:{line:4,column:19658}}],line:4},"636":{loc:{start:{line:4,column:19527},end:{line:4,column:19658}},type:"cond-expr",locations:[{start:{line:4,column:19550},end:{line:4,column:19597}},{start:{line:4,column:19599},end:{line:4,column:19658}}],line:4},"637":{loc:{start:{line:4,column:19599},end:{line:4,column:19658}},type:"binary-expr",locations:[{start:{line:4,column:19599},end:{line:4,column:19620}},{start:{line:4,column:19623},end:{line:4,column:19657}}],line:4},"638":{loc:{start:{line:4,column:19770},end:{line:4,column:19947}},type:"cond-expr",locations:[{start:{line:4,column:19896},end:{line:4,column:19921}},{start:{line:4,column:19922},end:{line:4,column:19947}}],line:4},"639":{loc:{start:{line:4,column:19770},end:{line:4,column:19895}},type:"binary-expr",locations:[{start:{line:4,column:19770},end:{line:4,column:19793}},{start:{line:4,column:19796},end:{line:4,column:19832}},{start:{line:4,column:19834},end:{line:4,column:19868}},{start:{line:4,column:19871},end:{line:4,column:19895}}],line:4},"640":{loc:{start:{line:4,column:19976},end:{line:4,column:20027}},type:"binary-expr",locations:[{start:{line:4,column:19976},end:{line:4,column:19986}},{start:{line:4,column:19989},end:{line:4,column:20026}}],line:4},"641":{loc:{start:{line:4,column:20469},end:{line:4,column:20524}},type:"cond-expr",locations:[{start:{line:4,column:20501},end:{line:4,column:20503}},{start:{line:4,column:20504},end:{line:4,column:20524}}],line:4},"642":{loc:{start:{line:4,column:20469},end:{line:4,column:20500}},type:"binary-expr",locations:[{start:{line:4,column:20469},end:{line:4,column:20486}},{start:{line:4,column:20488},end:{line:4,column:20500}}],line:4},"643":{loc:{start:{line:4,column:20687},end:{line:4,column:20761}},type:"cond-expr",locations:[{start:{line:4,column:20703},end:{line:4,column:20728}},{start:{line:4,column:20730},end:{line:4,column:20760}}],line:4},"644":{loc:{start:{line:4,column:20687},end:{line:4,column:20702}},type:"binary-expr",locations:[{start:{line:4,column:20687},end:{line:4,column:20698}},{start:{line:4,column:20700},end:{line:4,column:20702}}],line:4},"645":{loc:{start:{line:4,column:20884},end:{line:4,column:20897}},type:"if",locations:[{start:{line:4,column:20884},end:{line:4,column:20897}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"646":{loc:{start:{line:4,column:20953},end:{line:4,column:21005}},type:"cond-expr",locations:[{start:{line:4,column:20961},end:{line:4,column:20971}},{start:{line:4,column:20972},end:{line:4,column:21005}}],line:4},"647":{loc:{start:{line:4,column:21107},end:{line:4,column:21143}},type:"cond-expr",locations:[{start:{line:4,column:21123},end:{line:4,column:21139}},{start:{line:4,column:21140},end:{line:4,column:21143}}],line:4},"648":{loc:{start:{line:4,column:21426},end:{line:4,column:21491}},type:"if",locations:[{start:{line:4,column:21426},end:{line:4,column:21491}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"649":{loc:{start:{line:4,column:21857},end:{line:4,column:21954}},type:"binary-expr",locations:[{start:{line:4,column:21857},end:{line:4,column:21889}},{start:{line:4,column:21892},end:{line:4,column:21953}}],line:4},"650":{loc:{start:{line:4,column:22293},end:{line:4,column:22325}},type:"binary-expr",locations:[{start:{line:4,column:22293},end:{line:4,column:22300}},{start:{line:4,column:22302},end:{line:4,column:22325}}],line:4},"651":{loc:{start:{line:4,column:22370},end:{line:4,column:22426}},type:"binary-expr",locations:[{start:{line:4,column:22370},end:{line:4,column:22378}},{start:{line:4,column:22381},end:{line:4,column:22425}}],line:4},"652":{loc:{start:{line:4,column:22393},end:{line:4,column:22425}},type:"binary-expr",locations:[{start:{line:4,column:22393},end:{line:4,column:22400}},{start:{line:4,column:22402},end:{line:4,column:22425}}],line:4},"653":{loc:{start:{line:4,column:22451},end:{line:4,column:22497}},type:"binary-expr",locations:[{start:{line:4,column:22451},end:{line:4,column:22469}},{start:{line:4,column:22471},end:{line:4,column:22497}}],line:4},"654":{loc:{start:{line:4,column:22523},end:{line:4,column:22541}},type:"binary-expr",locations:[{start:{line:4,column:22523},end:{line:4,column:22531}},{start:{line:4,column:22533},end:{line:4,column:22541}}],line:4},"655":{loc:{start:{line:4,column:22617},end:{line:4,column:22682}},type:"cond-expr",locations:[{start:{line:4,column:22626},end:{line:4,column:22648}},{start:{line:4,column:22649},end:{line:4,column:22682}}],line:4},"656":{loc:{start:{line:4,column:22683},end:{line:4,column:22711}},type:"binary-expr",locations:[{start:{line:4,column:22683},end:{line:4,column:22684}},{start:{line:4,column:22687},end:{line:4,column:22710}}],line:4},"657":{loc:{start:{line:4,column:22751},end:{line:4,column:22798}},type:"binary-expr",locations:[{start:{line:4,column:22751},end:{line:4,column:22758}},{start:{line:4,column:22761},end:{line:4,column:22797}}],line:4},"658":{loc:{start:{line:4,column:22901},end:{line:4,column:22919}},type:"binary-expr",locations:[{start:{line:4,column:22901},end:{line:4,column:22912}},{start:{line:4,column:22914},end:{line:4,column:22919}}],line:4},"659":{loc:{start:{line:4,column:22922},end:{line:4,column:22958}},type:"cond-expr",locations:[{start:{line:4,column:22944},end:{line:4,column:22953}},{start:{line:4,column:22954},end:{line:4,column:22958}}],line:4},"660":{loc:{start:{line:4,column:23011},end:{line:4,column:23103}},type:"cond-expr",locations:[{start:{line:4,column:23021},end:{line:4,column:23082}},{start:{line:4,column:23084},end:{line:4,column:23103}}],line:4},"661":{loc:{start:{line:4,column:23038},end:{line:4,column:23082}},type:"binary-expr",locations:[{start:{line:4,column:23038},end:{line:4,column:23053}},{start:{line:4,column:23055},end:{line:4,column:23072}},{start:{line:4,column:23075},end:{line:4,column:23081}}],line:4},"662":{loc:{start:{line:4,column:23117},end:{line:4,column:23174}},type:"binary-expr",locations:[{start:{line:4,column:23117},end:{line:4,column:23125}},{start:{line:4,column:23128},end:{line:4,column:23173}}],line:4},"663":{loc:{start:{line:4,column:23308},end:{line:4,column:23343}},type:"if",locations:[{start:{line:4,column:23308},end:{line:4,column:23343}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"664":{loc:{start:{line:4,column:23553},end:{line:4,column:23625}},type:"if",locations:[{start:{line:4,column:23553},end:{line:4,column:23625}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"665":{loc:{start:{line:4,column:23777},end:{line:4,column:23849}},type:"if",locations:[{start:{line:4,column:23777},end:{line:4,column:23849}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"666":{loc:{start:{line:4,column:23961},end:{line:4,column:23994}},type:"cond-expr",locations:[{start:{line:4,column:23977},end:{line:4,column:23989}},{start:{line:4,column:23990},end:{line:4,column:23994}}],line:4},"667":{loc:{start:{line:4,column:24174},end:{line:4,column:24207}},type:"cond-expr",locations:[{start:{line:4,column:24190},end:{line:4,column:24202}},{start:{line:4,column:24203},end:{line:4,column:24207}}],line:4},"668":{loc:{start:{line:4,column:24423},end:{line:4,column:24469}},type:"cond-expr",locations:[{start:{line:4,column:24432},end:{line:4,column:24462}},{start:{line:4,column:24463},end:{line:4,column:24469}}],line:4},"669":{loc:{start:{line:4,column:24715},end:{line:4,column:24760}},type:"binary-expr",locations:[{start:{line:4,column:24715},end:{line:4,column:24743}},{start:{line:4,column:24746},end:{line:4,column:24759}}],line:4},"670":{loc:{start:{line:4,column:24806},end:{line:4,column:24917}},type:"if",locations:[{start:{line:4,column:24806},end:{line:4,column:24917}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"671":{loc:{start:{line:4,column:24829},end:{line:4,column:24882}},type:"if",locations:[{start:{line:4,column:24829},end:{line:4,column:24882}},{start:{line:4,column:24857},end:{line:4,column:24882}}],line:4},"672":{loc:{start:{line:4,column:24972},end:{line:4,column:25011}},type:"binary-expr",locations:[{start:{line:4,column:24972},end:{line:4,column:24977}},{start:{line:4,column:24979},end:{line:4,column:25011}}],line:4},"673":{loc:{start:{line:4,column:25014},end:{line:4,column:25039}},type:"binary-expr",locations:[{start:{line:4,column:25014},end:{line:4,column:25023}},{start:{line:4,column:25026},end:{line:4,column:25038}}],line:4},"674":{loc:{start:{line:4,column:25072},end:{line:4,column:25089}},type:"binary-expr",locations:[{start:{line:4,column:25072},end:{line:4,column:25073}},{start:{line:4,column:25075},end:{line:4,column:25089}}],line:4},"675":{loc:{start:{line:4,column:25163},end:{line:4,column:25174}},type:"binary-expr",locations:[{start:{line:4,column:25163},end:{line:4,column:25168}},{start:{line:4,column:25170},end:{line:4,column:25174}}],line:4},"676":{loc:{start:{line:4,column:25234},end:{line:4,column:25240}},type:"default-arg",locations:[{start:{line:4,column:25236},end:{line:4,column:25240}}],line:4},"677":{loc:{start:{line:4,column:26604},end:{line:4,column:26609}},type:"binary-expr",locations:[{start:{line:4,column:26604},end:{line:4,column:26605}},{start:{line:4,column:26607},end:{line:4,column:26609}}],line:4},"678":{loc:{start:{line:4,column:26689},end:{line:4,column:26778}},type:"if",locations:[{start:{line:4,column:26689},end:{line:4,column:26778}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"679":{loc:{start:{line:4,column:26778},end:{line:4,column:26815}},type:"binary-expr",locations:[{start:{line:4,column:26778},end:{line:4,column:26779}},{start:{line:4,column:26781},end:{line:4,column:26815}}],line:4},"680":{loc:{start:{line:4,column:26816},end:{line:4,column:26891}},type:"binary-expr",locations:[{start:{line:4,column:26816},end:{line:4,column:26817}},{start:{line:4,column:26820},end:{line:4,column:26890}}],line:4},"681":{loc:{start:{line:4,column:27095},end:{line:4,column:27130}},type:"binary-expr",locations:[{start:{line:4,column:27095},end:{line:4,column:27096}},{start:{line:4,column:27098},end:{line:4,column:27130}}],line:4},"682":{loc:{start:{line:4,column:27131},end:{line:4,column:27204}},type:"binary-expr",locations:[{start:{line:4,column:27131},end:{line:4,column:27132}},{start:{line:4,column:27135},end:{line:4,column:27203}}],line:4},"683":{loc:{start:{line:4,column:27205},end:{line:4,column:27237}},type:"binary-expr",locations:[{start:{line:4,column:27205},end:{line:4,column:27206}},{start:{line:4,column:27208},end:{line:4,column:27237}}],line:4},"684":{loc:{start:{line:4,column:27238},end:{line:4,column:27305}},type:"binary-expr",locations:[{start:{line:4,column:27238},end:{line:4,column:27239}},{start:{line:4,column:27242},end:{line:4,column:27304}}],line:4},"685":{loc:{start:{line:4,column:27306},end:{line:4,column:27346}},type:"binary-expr",locations:[{start:{line:4,column:27306},end:{line:4,column:27313}},{start:{line:4,column:27315},end:{line:4,column:27346}}],line:4},"686":{loc:{start:{line:4,column:27400},end:{line:4,column:27425}},type:"binary-expr",locations:[{start:{line:4,column:27400},end:{line:4,column:27412}},{start:{line:4,column:27414},end:{line:4,column:27425}}],line:4},"687":{loc:{start:{line:4,column:27454},end:{line:4,column:27487}},type:"binary-expr",locations:[{start:{line:4,column:27454},end:{line:4,column:27463}},{start:{line:4,column:27466},end:{line:4,column:27486}}],line:4},"688":{loc:{start:{line:4,column:27515},end:{line:4,column:27539}},type:"cond-expr",locations:[{start:{line:4,column:27526},end:{line:4,column:27537}},{start:{line:4,column:27538},end:{line:4,column:27539}}],line:4},"689":{loc:{start:{line:4,column:27542},end:{line:4,column:27547}},type:"binary-expr",locations:[{start:{line:4,column:27542},end:{line:4,column:27543}},{start:{line:4,column:27545},end:{line:4,column:27547}}],line:4},"690":{loc:{start:{line:4,column:27585},end:{line:4,column:27731}},type:"if",locations:[{start:{line:4,column:27585},end:{line:4,column:27731}},{start:{line:4,column:27648},end:{line:4,column:27731}}],line:4},"691":{loc:{start:{line:4,column:27613},end:{line:4,column:27642}},type:"if",locations:[{start:{line:4,column:27613},end:{line:4,column:27642}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"692":{loc:{start:{line:4,column:27623},end:{line:4,column:27636}},type:"binary-expr",locations:[{start:{line:4,column:27623},end:{line:4,column:27630}},{start:{line:4,column:27632},end:{line:4,column:27636}}],line:4},"693":{loc:{start:{line:4,column:27648},end:{line:4,column:27670}},type:"binary-expr",locations:[{start:{line:4,column:27648},end:{line:4,column:27654}},{start:{line:4,column:27657},end:{line:4,column:27669}}],line:4},"694":{loc:{start:{line:4,column:27671},end:{line:4,column:27727}},type:"binary-expr",locations:[{start:{line:4,column:27672},end:{line:4,column:27675}},{start:{line:4,column:27677},end:{line:4,column:27682}},{start:{line:4,column:27686},end:{line:4,column:27726}}],line:4},"695":{loc:{start:{line:4,column:27890},end:{line:4,column:27902}},type:"cond-expr",locations:[{start:{line:4,column:27892},end:{line:4,column:27897}},{start:{line:4,column:27898},end:{line:4,column:27902}}],line:4},"696":{loc:{start:{line:4,column:27910},end:{line:4,column:27975}},type:"cond-expr",locations:[{start:{line:4,column:27912},end:{line:4,column:27967}},{start:{line:4,column:27968},end:{line:4,column:27975}}],line:4},"697":{loc:{start:{line:4,column:27912},end:{line:4,column:27967}},type:"binary-expr",locations:[{start:{line:4,column:27912},end:{line:4,column:27930}},{start:{line:4,column:27932},end:{line:4,column:27944}},{start:{line:4,column:27947},end:{line:4,column:27966}}],line:4},"698":{loc:{start:{line:4,column:28325},end:{line:4,column:28497}},type:"if",locations:[{start:{line:4,column:28325},end:{line:4,column:28497}},{start:{line:4,column:28426},end:{line:4,column:28497}}],line:4},"699":{loc:{start:{line:4,column:28348},end:{line:4,column:28363}},type:"if",locations:[{start:{line:4,column:28348},end:{line:4,column:28363}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"700":{loc:{start:{line:4,column:28444},end:{line:4,column:28492}},type:"cond-expr",locations:[{start:{line:4,column:28450},end:{line:4,column:28470}},{start:{line:4,column:28471},end:{line:4,column:28492}}],line:4},"701":{loc:{start:{line:4,column:28529},end:{line:4,column:28548}},type:"binary-expr",locations:[{start:{line:4,column:28529},end:{line:4,column:28534}},{start:{line:4,column:28536},end:{line:4,column:28541}},{start:{line:4,column:28543},end:{line:4,column:28548}}],line:4},"702":{loc:{start:{line:4,column:28609},end:{line:4,column:28818}},type:"if",locations:[{start:{line:4,column:28609},end:{line:4,column:28818}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"703":{loc:{start:{line:4,column:28614},end:{line:4,column:28636}},type:"binary-expr",locations:[{start:{line:4,column:28614},end:{line:4,column:28622}},{start:{line:4,column:28624},end:{line:4,column:28636}}],line:4},"704":{loc:{start:{line:4,column:28638},end:{line:4,column:28818}},type:"if",locations:[{start:{line:4,column:28638},end:{line:4,column:28818}},{start:{line:4,column:28680},end:{line:4,column:28818}}],line:4},"705":{loc:{start:{line:4,column:28641},end:{line:4,column:28663}},type:"binary-expr",locations:[{start:{line:4,column:28641},end:{line:4,column:28649}},{start:{line:4,column:28651},end:{line:4,column:28663}}],line:4},"706":{loc:{start:{line:4,column:28729},end:{line:4,column:28816}},type:"cond-expr",locations:[{start:{line:4,column:28748},end:{line:4,column:28751}},{start:{line:4,column:28752},end:{line:4,column:28816}}],line:4},"707":{loc:{start:{line:4,column:28752},end:{line:4,column:28816}},type:"binary-expr",locations:[{start:{line:4,column:28752},end:{line:4,column:28757}},{start:{line:4,column:28760},end:{line:4,column:28815}}],line:4},"708":{loc:{start:{line:4,column:28760},end:{line:4,column:28815}},type:"cond-expr",locations:[{start:{line:4,column:28774},end:{line:4,column:28795}},{start:{line:4,column:28796},end:{line:4,column:28815}}],line:4},"709":{loc:{start:{line:4,column:28760},end:{line:4,column:28773}},type:"binary-expr",locations:[{start:{line:4,column:28760},end:{line:4,column:28766}},{start:{line:4,column:28768},end:{line:4,column:28773}}],line:4},"710":{loc:{start:{line:4,column:28869},end:{line:4,column:28991}},type:"if",locations:[{start:{line:4,column:28869},end:{line:4,column:28991}},{start:{line:4,column:28889},end:{line:4,column:28991}}],line:4},"711":{loc:{start:{line:4,column:28920},end:{line:4,column:28990}},type:"if",locations:[{start:{line:4,column:28920},end:{line:4,column:28990}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"712":{loc:{start:{line:4,column:28943},end:{line:4,column:28989}},type:"if",locations:[{start:{line:4,column:28943},end:{line:4,column:28989}},{start:{line:4,column:28969},end:{line:4,column:28989}}],line:4},"713":{loc:{start:{line:4,column:28969},end:{line:4,column:28989}},type:"if",locations:[{start:{line:4,column:28969},end:{line:4,column:28989}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"714":{loc:{start:{line:4,column:29020},end:{line:4,column:29048}},type:"if",locations:[{start:{line:4,column:29020},end:{line:4,column:29048}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"715":{loc:{start:{line:4,column:29048},end:{line:4,column:29086}},type:"if",locations:[{start:{line:4,column:29048},end:{line:4,column:29086}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"716":{loc:{start:{line:4,column:29058},end:{line:4,column:29078}},type:"binary-expr",locations:[{start:{line:4,column:29058},end:{line:4,column:29066}},{start:{line:4,column:29069},end:{line:4,column:29077}}],line:4},"717":{loc:{start:{line:4,column:29090},end:{line:4,column:29103}},type:"binary-expr",locations:[{start:{line:4,column:29090},end:{line:4,column:29098}},{start:{line:4,column:29100},end:{line:4,column:29103}}],line:4},"718":{loc:{start:{line:4,column:29104},end:{line:4,column:29135}},type:"binary-expr",locations:[{start:{line:4,column:29104},end:{line:4,column:29110}},{start:{line:4,column:29113},end:{line:4,column:29134}}],line:4},"719":{loc:{start:{line:4,column:29154},end:{line:4,column:29181}},type:"binary-expr",locations:[{start:{line:4,column:29154},end:{line:4,column:29162}},{start:{line:4,column:29164},end:{line:4,column:29181}}],line:4},"720":{loc:{start:{line:4,column:29441},end:{line:4,column:29512}},type:"cond-expr",locations:[{start:{line:4,column:29460},end:{line:4,column:29480}},{start:{line:4,column:29481},end:{line:4,column:29512}}],line:4},"721":{loc:{start:{line:4,column:29462},end:{line:4,column:29480}},type:"binary-expr",locations:[{start:{line:4,column:29462},end:{line:4,column:29477}},{start:{line:4,column:29479},end:{line:4,column:29480}}],line:4},"722":{loc:{start:{line:4,column:29481},end:{line:4,column:29512}},type:"binary-expr",locations:[{start:{line:4,column:29481},end:{line:4,column:29501}},{start:{line:4,column:29504},end:{line:4,column:29511}}],line:4},"723":{loc:{start:{line:4,column:29513},end:{line:4,column:29536}},type:"binary-expr",locations:[{start:{line:4,column:29513},end:{line:4,column:29520}},{start:{line:4,column:29523},end:{line:4,column:29535}}],line:4},"724":{loc:{start:{line:4,column:29607},end:{line:4,column:29626}},type:"if",locations:[{start:{line:4,column:29607},end:{line:4,column:29626}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"725":{loc:{start:{line:4,column:29637},end:{line:4,column:29727}},type:"binary-expr",locations:[{start:{line:4,column:29637},end:{line:4,column:29654}},{start:{line:4,column:29657},end:{line:4,column:29726}}],line:4},"726":{loc:{start:{line:4,column:29760},end:{line:4,column:29845}},type:"if",locations:[{start:{line:4,column:29760},end:{line:4,column:29845}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"727":{loc:{start:{line:4,column:29930},end:{line:4,column:30050}},type:"cond-expr",locations:[{start:{line:4,column:30032},end:{line:4,column:30034}},{start:{line:4,column:30035},end:{line:4,column:30050}}],line:4},"728":{loc:{start:{line:4,column:29930},end:{line:4,column:30031}},type:"binary-expr",locations:[{start:{line:4,column:29930},end:{line:4,column:29950}},{start:{line:4,column:29952},end:{line:4,column:29960}},{start:{line:4,column:29962},end:{line:4,column:30002}},{start:{line:4,column:30004},end:{line:4,column:30031}}],line:4},"729":{loc:{start:{line:4,column:30068},end:{line:4,column:30139}},type:"if",locations:[{start:{line:4,column:30068},end:{line:4,column:30139}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"730":{loc:{start:{line:4,column:30071},end:{line:4,column:30108}},type:"binary-expr",locations:[{start:{line:4,column:30071},end:{line:4,column:30079}},{start:{line:4,column:30081},end:{line:4,column:30108}}],line:4},"731":{loc:{start:{line:4,column:30174},end:{line:4,column:30204}},type:"if",locations:[{start:{line:4,column:30174},end:{line:4,column:30204}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"732":{loc:{start:{line:4,column:30204},end:{line:4,column:30268}},type:"if",locations:[{start:{line:4,column:30204},end:{line:4,column:30268}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"733":{loc:{start:{line:4,column:30325},end:{line:4,column:30357}},type:"if",locations:[{start:{line:4,column:30325},end:{line:4,column:30357}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"734":{loc:{start:{line:4,column:30357},end:{line:4,column:30388}},type:"if",locations:[{start:{line:4,column:30357},end:{line:4,column:30388}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"735":{loc:{start:{line:4,column:30402},end:{line:4,column:30582}},type:"if",locations:[{start:{line:4,column:30402},end:{line:4,column:30582}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"736":{loc:{start:{line:4,column:30449},end:{line:4,column:30464}},type:"if",locations:[{start:{line:4,column:30449},end:{line:4,column:30464}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"737":{loc:{start:{line:4,column:30464},end:{line:4,column:30580}},type:"if",locations:[{start:{line:4,column:30464},end:{line:4,column:30580}},{start:{line:4,column:30484},end:{line:4,column:30580}}],line:4},"738":{loc:{start:{line:4,column:30484},end:{line:4,column:30580}},type:"if",locations:[{start:{line:4,column:30484},end:{line:4,column:30580}},{start:{line:4,column:30550},end:{line:4,column:30580}}],line:4},"739":{loc:{start:{line:4,column:30514},end:{line:4,column:30540}},type:"binary-expr",locations:[{start:{line:4,column:30514},end:{line:4,column:30517}},{start:{line:4,column:30519},end:{line:4,column:30540}}],line:4},"740":{loc:{start:{line:4,column:30551},end:{line:4,column:30574}},type:"if",locations:[{start:{line:4,column:30551},end:{line:4,column:30574}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"741":{loc:{start:{line:4,column:30613},end:{line:4,column:30641}},type:"if",locations:[{start:{line:4,column:30613},end:{line:4,column:30641}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"742":{loc:{start:{line:4,column:30616},end:{line:4,column:30631}},type:"binary-expr",locations:[{start:{line:4,column:30616},end:{line:4,column:30619}},{start:{line:4,column:30621},end:{line:4,column:30631}}],line:4},"743":{loc:{start:{line:4,column:30683},end:{line:4,column:30801}},type:"if",locations:[{start:{line:4,column:30683},end:{line:4,column:30801}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"744":{loc:{start:{line:4,column:30686},end:{line:4,column:30711}},type:"binary-expr",locations:[{start:{line:4,column:30686},end:{line:4,column:30689}},{start:{line:4,column:30691},end:{line:4,column:30701}},{start:{line:4,column:30704},end:{line:4,column:30710}}],line:4},"745":{loc:{start:{line:4,column:30758},end:{line:4,column:30786}},type:"cond-expr",locations:[{start:{line:4,column:30760},end:{line:4,column:30774}},{start:{line:4,column:30775},end:{line:4,column:30786}}],line:4},"746":{loc:{start:{line:4,column:30836},end:{line:4,column:30839}},type:"default-arg",locations:[{start:{line:4,column:30838},end:{line:4,column:30839}}],line:4},"747":{loc:{start:{line:4,column:30843},end:{line:4,column:30958}},type:"if",locations:[{start:{line:4,column:30843},end:{line:4,column:30958}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"748":{loc:{start:{line:4,column:30856},end:{line:4,column:30918}},type:"if",locations:[{start:{line:4,column:30856},end:{line:4,column:30918}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"749":{loc:{start:{line:4,column:30859},end:{line:4,column:30876}},type:"binary-expr",locations:[{start:{line:4,column:30859},end:{line:4,column:30868}},{start:{line:4,column:30870},end:{line:4,column:30876}}],line:4},"750":{loc:{start:{line:4,column:30899},end:{line:4,column:30917}},type:"if",locations:[{start:{line:4,column:30899},end:{line:4,column:30917}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"751":{loc:{start:{line:4,column:30939},end:{line:4,column:30957}},type:"if",locations:[{start:{line:4,column:30939},end:{line:4,column:30957}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"752":{loc:{start:{line:4,column:31012},end:{line:4,column:31485}},type:"if",locations:[{start:{line:4,column:31012},end:{line:4,column:31485}},{start:{line:4,column:31159},end:{line:4,column:31485}}],line:4},"753":{loc:{start:{line:4,column:31037},end:{line:4,column:31084}},type:"if",locations:[{start:{line:4,column:31037},end:{line:4,column:31084}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"754":{loc:{start:{line:4,column:31058},end:{line:4,column:31083}},type:"cond-expr",locations:[{start:{line:4,column:31062},end:{line:4,column:31071}},{start:{line:4,column:31072},end:{line:4,column:31083}}],line:4},"755":{loc:{start:{line:4,column:31094},end:{line:4,column:31139}},type:"if",locations:[{start:{line:4,column:31094},end:{line:4,column:31139}},{start:{line:4,column:31131},end:{line:4,column:31139}}],line:4},"756":{loc:{start:{line:4,column:31104},end:{line:4,column:31119}},type:"binary-expr",locations:[{start:{line:4,column:31104},end:{line:4,column:31111}},{start:{line:4,column:31113},end:{line:4,column:31119}}],line:4},"757":{loc:{start:{line:4,column:31159},end:{line:4,column:31485}},type:"if",locations:[{start:{line:4,column:31159},end:{line:4,column:31485}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"758":{loc:{start:{line:4,column:31210},end:{line:4,column:31226}},type:"cond-expr",locations:[{start:{line:4,column:31214},end:{line:4,column:31221}},{start:{line:4,column:31222},end:{line:4,column:31226}}],line:4},"759":{loc:{start:{line:4,column:31231},end:{line:4,column:31321}},type:"binary-expr",locations:[{start:{line:4,column:31232},end:{line:4,column:31238}},{start:{line:4,column:31240},end:{line:4,column:31243}},{start:{line:4,column:31247},end:{line:4,column:31320}}],line:4},"760":{loc:{start:{line:4,column:31249},end:{line:4,column:31270}},type:"cond-expr",locations:[{start:{line:4,column:31256},end:{line:4,column:31263}},{start:{line:4,column:31264},end:{line:4,column:31270}}],line:4},"761":{loc:{start:{line:4,column:31271},end:{line:4,column:31320}},type:"cond-expr",locations:[{start:{line:4,column:31289},end:{line:4,column:31293}},{start:{line:4,column:31295},end:{line:4,column:31319}}],line:4},"762":{loc:{start:{line:4,column:31271},end:{line:4,column:31288}},type:"binary-expr",locations:[{start:{line:4,column:31271},end:{line:4,column:31277}},{start:{line:4,column:31279},end:{line:4,column:31288}}],line:4},"763":{loc:{start:{line:4,column:31342},end:{line:4,column:31402}},type:"if",locations:[{start:{line:4,column:31342},end:{line:4,column:31402}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"764":{loc:{start:{line:4,column:31383},end:{line:4,column:31401}},type:"if",locations:[{start:{line:4,column:31383},end:{line:4,column:31401}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"765":{loc:{start:{line:4,column:31411},end:{line:4,column:31483}},type:"cond-expr",locations:[{start:{line:4,column:31456},end:{line:4,column:31477}},{start:{line:4,column:31479},end:{line:4,column:31483}}],line:4},"766":{loc:{start:{line:4,column:31411},end:{line:4,column:31454}},type:"binary-expr",locations:[{start:{line:4,column:31411},end:{line:4,column:31417}},{start:{line:4,column:31419},end:{line:4,column:31443}},{start:{line:4,column:31445},end:{line:4,column:31454}}],line:4},"767":{loc:{start:{line:4,column:31546},end:{line:4,column:31584}},type:"cond-expr",locations:[{start:{line:4,column:31554},end:{line:4,column:31563}},{start:{line:4,column:31564},end:{line:4,column:31584}}],line:4},"768":{loc:{start:{line:4,column:31554},end:{line:4,column:31563}},type:"binary-expr",locations:[{start:{line:4,column:31554},end:{line:4,column:31559}},{start:{line:4,column:31561},end:{line:4,column:31563}}],line:4},"769":{loc:{start:{line:4,column:31564},end:{line:4,column:31584}},type:"binary-expr",locations:[{start:{line:4,column:31564},end:{line:4,column:31568}},{start:{line:4,column:31570},end:{line:4,column:31584}}],line:4},"770":{loc:{start:{line:4,column:31587},end:{line:4,column:31597}},type:"binary-expr",locations:[{start:{line:4,column:31587},end:{line:4,column:31590}},{start:{line:4,column:31592},end:{line:4,column:31597}}],line:4},"771":{loc:{start:{line:4,column:31621},end:{line:4,column:31646}},type:"cond-expr",locations:[{start:{line:4,column:31630},end:{line:4,column:31643}},{start:{line:4,column:31644},end:{line:4,column:31646}}],line:4},"772":{loc:{start:{line:4,column:31761},end:{line:4,column:31768}},type:"cond-expr",locations:[{start:{line:4,column:31763},end:{line:4,column:31764}},{start:{line:4,column:31765},end:{line:4,column:31768}}],line:4},"773":{loc:{start:{line:4,column:31771},end:{line:4,column:31778}},type:"cond-expr",locations:[{start:{line:4,column:31773},end:{line:4,column:31776}},{start:{line:4,column:31777},end:{line:4,column:31778}}],line:4},"774":{loc:{start:{line:4,column:31811},end:{line:4,column:31851}},type:"if",locations:[{start:{line:4,column:31811},end:{line:4,column:31851}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"775":{loc:{start:{line:4,column:31814},end:{line:4,column:31842}},type:"binary-expr",locations:[{start:{line:4,column:31814},end:{line:4,column:31817}},{start:{line:4,column:31819},end:{line:4,column:31824}},{start:{line:4,column:31826},end:{line:4,column:31830}},{start:{line:4,column:31832},end:{line:4,column:31842}}],line:4},"776":{loc:{start:{line:4,column:31852},end:{line:4,column:31902}},type:"if",locations:[{start:{line:4,column:31852},end:{line:4,column:31902}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"777":{loc:{start:{line:4,column:31869},end:{line:4,column:31901}},type:"if",locations:[{start:{line:4,column:31869},end:{line:4,column:31901}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"778":{loc:{start:{line:4,column:31872},end:{line:4,column:31892}},type:"binary-expr",locations:[{start:{line:4,column:31872},end:{line:4,column:31873}},{start:{line:4,column:31875},end:{line:4,column:31880}},{start:{line:4,column:31882},end:{line:4,column:31892}}],line:4},"779":{loc:{start:{line:4,column:31957},end:{line:4,column:32272}},type:"if",locations:[{start:{line:4,column:31957},end:{line:4,column:32272}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"780":{loc:{start:{line:4,column:31985},end:{line:4,column:32013}},type:"if",locations:[{start:{line:4,column:31985},end:{line:4,column:32013}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"781":{loc:{start:{line:4,column:32066},end:{line:4,column:32081}},type:"binary-expr",locations:[{start:{line:4,column:32066},end:{line:4,column:32075}},{start:{line:4,column:32077},end:{line:4,column:32081}}],line:4},"782":{loc:{start:{line:4,column:32086},end:{line:4,column:32119}},type:"cond-expr",locations:[{start:{line:4,column:32099},end:{line:4,column:32114}},{start:{line:4,column:32115},end:{line:4,column:32119}}],line:4},"783":{loc:{start:{line:4,column:32169},end:{line:4,column:32221}},type:"binary-expr",locations:[{start:{line:4,column:32169},end:{line:4,column:32186}},{start:{line:4,column:32188},end:{line:4,column:32207}},{start:{line:4,column:32209},end:{line:4,column:32221}}],line:4},"784":{loc:{start:{line:4,column:32230},end:{line:4,column:32244}},type:"binary-expr",locations:[{start:{line:4,column:32230},end:{line:4,column:32238}},{start:{line:4,column:32240},end:{line:4,column:32244}}],line:4},"785":{loc:{start:{line:4,column:32296},end:{line:4,column:32344}},type:"if",locations:[{start:{line:4,column:32296},end:{line:4,column:32344}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"786":{loc:{start:{line:4,column:32325},end:{line:4,column:32343}},type:"binary-expr",locations:[{start:{line:4,column:32325},end:{line:4,column:32340}},{start:{line:4,column:32342},end:{line:4,column:32343}}],line:4},"787":{loc:{start:{line:4,column:32350},end:{line:4,column:32383}},type:"cond-expr",locations:[{start:{line:4,column:32371},end:{line:4,column:32376}},{start:{line:4,column:32377},end:{line:4,column:32383}}],line:4},"788":{loc:{start:{line:4,column:32391},end:{line:4,column:32424}},type:"cond-expr",locations:[{start:{line:4,column:32410},end:{line:4,column:32422}},{start:{line:4,column:32423},end:{line:4,column:32424}}],line:4},"789":{loc:{start:{line:4,column:32410},end:{line:4,column:32422}},type:"cond-expr",locations:[{start:{line:4,column:32415},end:{line:4,column:32419}},{start:{line:4,column:32420},end:{line:4,column:32422}}],line:4},"790":{loc:{start:{line:4,column:32503},end:{line:4,column:32520}},type:"binary-expr",locations:[{start:{line:4,column:32503},end:{line:4,column:32509}},{start:{line:4,column:32511},end:{line:4,column:32520}}],line:4},"791":{loc:{start:{line:4,column:32513},end:{line:4,column:32519}},type:"binary-expr",locations:[{start:{line:4,column:32513},end:{line:4,column:32516}},{start:{line:4,column:32518},end:{line:4,column:32519}}],line:4},"792":{loc:{start:{line:4,column:32750},end:{line:4,column:32762}},type:"binary-expr",locations:[{start:{line:4,column:32750},end:{line:4,column:32755}},{start:{line:4,column:32757},end:{line:4,column:32762}}],line:4},"793":{loc:{start:{line:4,column:32836},end:{line:4,column:32844}},type:"binary-expr",locations:[{start:{line:4,column:32836},end:{line:4,column:32837}},{start:{line:4,column:32839},end:{line:4,column:32844}}],line:4},"794":{loc:{start:{line:4,column:32853},end:{line:4,column:32865}},type:"binary-expr",locations:[{start:{line:4,column:32853},end:{line:4,column:32858}},{start:{line:4,column:32860},end:{line:4,column:32865}}],line:4},"795":{loc:{start:{line:4,column:32866},end:{line:4,column:32887}},type:"if",locations:[{start:{line:4,column:32866},end:{line:4,column:32887}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"796":{loc:{start:{line:4,column:32869},end:{line:4,column:32877}},type:"binary-expr",locations:[{start:{line:4,column:32869},end:{line:4,column:32870}},{start:{line:4,column:32872},end:{line:4,column:32877}}],line:4},"797":{loc:{start:{line:4,column:32954},end:{line:4,column:33000}},type:"cond-expr",locations:[{start:{line:4,column:32960},end:{line:4,column:32994}},{start:{line:4,column:32995},end:{line:4,column:33000}}],line:4},"798":{loc:{start:{line:4,column:32987},end:{line:4,column:32993}},type:"binary-expr",locations:[{start:{line:4,column:32987},end:{line:4,column:32988}},{start:{line:4,column:32990},end:{line:4,column:32993}}],line:4},"799":{loc:{start:{line:4,column:33041},end:{line:4,column:33078}},type:"binary-expr",locations:[{start:{line:4,column:33041},end:{line:4,column:33049}},{start:{line:4,column:33051},end:{line:4,column:33059}},{start:{line:4,column:33061},end:{line:4,column:33070}},{start:{line:4,column:33072},end:{line:4,column:33078}}],line:4},"800":{loc:{start:{line:4,column:33104},end:{line:4,column:33123}},type:"if",locations:[{start:{line:4,column:33104},end:{line:4,column:33123}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"801":{loc:{start:{line:4,column:33138},end:{line:4,column:33221}},type:"if",locations:[{start:{line:4,column:33138},end:{line:4,column:33221}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"802":{loc:{start:{line:4,column:33157},end:{line:4,column:33205}},type:"if",locations:[{start:{line:4,column:33157},end:{line:4,column:33205}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"803":{loc:{start:{line:4,column:33186},end:{line:4,column:33204}},type:"if",locations:[{start:{line:4,column:33186},end:{line:4,column:33204}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"804":{loc:{start:{line:4,column:33276},end:{line:4,column:33309}},type:"cond-expr",locations:[{start:{line:4,column:33282},end:{line:4,column:33293}},{start:{line:4,column:33294},end:{line:4,column:33309}}],line:4},"805":{loc:{start:{line:4,column:33294},end:{line:4,column:33309}},type:"cond-expr",locations:[{start:{line:4,column:33300},end:{line:4,column:33304}},{start:{line:4,column:33305},end:{line:4,column:33309}}],line:4},"806":{loc:{start:{line:4,column:33549},end:{line:4,column:33582}},type:"cond-expr",locations:[{start:{line:4,column:33565},end:{line:4,column:33580}},{start:{line:4,column:33581},end:{line:4,column:33582}}],line:4},"807":{loc:{start:{line:4,column:33838},end:{line:4,column:33842}},type:"default-arg",locations:[{start:{line:4,column:33840},end:{line:4,column:33842}}],line:4},"808":{loc:{start:{line:4,column:34257},end:{line:4,column:34386}},type:"binary-expr",locations:[{start:{line:4,column:34258},end:{line:4,column:34302}},{start:{line:4,column:34306},end:{line:4,column:34385}}],line:4},"809":{loc:{start:{line:4,column:34405},end:{line:4,column:34510}},type:"binary-expr",locations:[{start:{line:4,column:34405},end:{line:4,column:34427}},{start:{line:4,column:34430},end:{line:4,column:34451}},{start:{line:4,column:34453},end:{line:4,column:34483}},{start:{line:4,column:34486},end:{line:4,column:34510}}],line:4},"810":{loc:{start:{line:4,column:34591},end:{line:4,column:34669}},type:"binary-expr",locations:[{start:{line:4,column:34591},end:{line:4,column:34613}},{start:{line:4,column:34616},end:{line:4,column:34668}}],line:4},"811":{loc:{start:{line:4,column:34833},end:{line:4,column:34839}},type:"binary-expr",locations:[{start:{line:4,column:34833},end:{line:4,column:34835}},{start:{line:4,column:34837},end:{line:4,column:34839}}],line:4},"812":{loc:{start:{line:4,column:34986},end:{line:4,column:35019}},type:"cond-expr",locations:[{start:{line:4,column:34993},end:{line:4,column:35010}},{start:{line:4,column:35012},end:{line:4,column:35019}}],line:4},"813":{loc:{start:{line:4,column:35104},end:{line:4,column:35120}},type:"binary-expr",locations:[{start:{line:4,column:35104},end:{line:4,column:35112}},{start:{line:4,column:35114},end:{line:4,column:35120}}],line:4},"814":{loc:{start:{line:4,column:35313},end:{line:4,column:35388}},type:"binary-expr",locations:[{start:{line:4,column:35313},end:{line:4,column:35382}},{start:{line:4,column:35384},end:{line:4,column:35388}}],line:4},"815":{loc:{start:{line:4,column:35596},end:{line:4,column:35600}},type:"default-arg",locations:[{start:{line:4,column:35598},end:{line:4,column:35600}}],line:4},"816":{loc:{start:{line:4,column:35659},end:{line:4,column:35815}},type:"if",locations:[{start:{line:4,column:35659},end:{line:4,column:35815}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"817":{loc:{start:{line:4,column:35739},end:{line:4,column:35799}},type:"if",locations:[{start:{line:4,column:35739},end:{line:4,column:35799}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"818":{loc:{start:{line:4,column:35899},end:{line:4,column:36076}},type:"if",locations:[{start:{line:4,column:35899},end:{line:4,column:36076}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"819":{loc:{start:{line:4,column:36004},end:{line:4,column:36060}},type:"if",locations:[{start:{line:4,column:36004},end:{line:4,column:36060}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"820":{loc:{start:{line:4,column:36252},end:{line:4,column:36258}},type:"binary-expr",locations:[{start:{line:4,column:36252},end:{line:4,column:36254}},{start:{line:4,column:36256},end:{line:4,column:36258}}],line:4},"821":{loc:{start:{line:4,column:36281},end:{line:4,column:36448}},type:"if",locations:[{start:{line:4,column:36281},end:{line:4,column:36448}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"822":{loc:{start:{line:4,column:36284},end:{line:4,column:36322}},type:"binary-expr",locations:[{start:{line:4,column:36284},end:{line:4,column:36295}},{start:{line:4,column:36298},end:{line:4,column:36321}}],line:4},"823":{loc:{start:{line:4,column:36480},end:{line:4,column:36507}},type:"binary-expr",locations:[{start:{line:4,column:36480},end:{line:4,column:36504}},{start:{line:4,column:36506},end:{line:4,column:36507}}],line:4},"824":{loc:{start:{line:4,column:36759},end:{line:4,column:36816}},type:"cond-expr",locations:[{start:{line:4,column:36775},end:{line:4,column:36814}},{start:{line:4,column:36815},end:{line:4,column:36816}}],line:4},"825":{loc:{start:{line:4,column:36846},end:{line:4,column:36970}},type:"if",locations:[{start:{line:4,column:36846},end:{line:4,column:36970}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"826":{loc:{start:{line:4,column:36849},end:{line:4,column:36863}},type:"binary-expr",locations:[{start:{line:4,column:36849},end:{line:4,column:36856}},{start:{line:4,column:36858},end:{line:4,column:36863}}],line:4},"827":{loc:{start:{line:4,column:36865},end:{line:4,column:36906}},type:"if",locations:[{start:{line:4,column:36865},end:{line:4,column:36906}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"828":{loc:{start:{line:4,column:36868},end:{line:4,column:36896}},type:"binary-expr",locations:[{start:{line:4,column:36868},end:{line:4,column:36885}},{start:{line:4,column:36887},end:{line:4,column:36896}}],line:4},"829":{loc:{start:{line:4,column:37005},end:{line:4,column:37043}},type:"binary-expr",locations:[{start:{line:4,column:37005},end:{line:4,column:37020}},{start:{line:4,column:37022},end:{line:4,column:37037}},{start:{line:4,column:37039},end:{line:4,column:37043}}],line:4},"830":{loc:{start:{line:4,column:37145},end:{line:4,column:37170}},type:"cond-expr",locations:[{start:{line:4,column:37157},end:{line:4,column:37158}},{start:{line:4,column:37159},end:{line:4,column:37170}}],line:4},"831":{loc:{start:{line:4,column:37401},end:{line:4,column:37433}},type:"cond-expr",locations:[{start:{line:4,column:37410},end:{line:4,column:37423}},{start:{line:4,column:37424},end:{line:4,column:37433}}],line:4},"832":{loc:{start:{line:4,column:37547},end:{line:4,column:37610}},type:"cond-expr",locations:[{start:{line:4,column:37554},end:{line:4,column:37582}},{start:{line:4,column:37583},end:{line:4,column:37610}}],line:4},"833":{loc:{start:{line:4,column:37670},end:{line:4,column:37689}},type:"binary-expr",locations:[{start:{line:4,column:37670},end:{line:4,column:37678}},{start:{line:4,column:37680},end:{line:4,column:37689}}],line:4},"834":{loc:{start:{line:4,column:37690},end:{line:4,column:37709}},type:"binary-expr",locations:[{start:{line:4,column:37690},end:{line:4,column:37698}},{start:{line:4,column:37700},end:{line:4,column:37709}}],line:4},"835":{loc:{start:{line:4,column:37710},end:{line:4,column:37729}},type:"binary-expr",locations:[{start:{line:4,column:37710},end:{line:4,column:37718}},{start:{line:4,column:37720},end:{line:4,column:37729}}],line:4},"836":{loc:{start:{line:4,column:37895},end:{line:4,column:37901}},type:"binary-expr",locations:[{start:{line:4,column:37895},end:{line:4,column:37897}},{start:{line:4,column:37899},end:{line:4,column:37901}}],line:4},"837":{loc:{start:{line:4,column:37936},end:{line:4,column:37990}},type:"cond-expr",locations:[{start:{line:4,column:37938},end:{line:4,column:37962}},{start:{line:4,column:37963},end:{line:4,column:37990}}],line:4},"838":{loc:{start:{line:4,column:37938},end:{line:4,column:37962}},type:"binary-expr",locations:[{start:{line:4,column:37938},end:{line:4,column:37958}},{start:{line:4,column:37960},end:{line:4,column:37962}}],line:4},"839":{loc:{start:{line:4,column:37963},end:{line:4,column:37990}},type:"cond-expr",locations:[{start:{line:4,column:37975},end:{line:4,column:37980}},{start:{line:4,column:37981},end:{line:4,column:37990}}],line:4},"840":{loc:{start:{line:4,column:38017},end:{line:4,column:38067}},type:"if",locations:[{start:{line:4,column:38017},end:{line:4,column:38067}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"841":{loc:{start:{line:4,column:38032},end:{line:4,column:38065}},type:"binary-expr",locations:[{start:{line:4,column:38032},end:{line:4,column:38061}},{start:{line:4,column:38063},end:{line:4,column:38065}}],line:4},"842":{loc:{start:{line:4,column:38067},end:{line:4,column:38107}},type:"if",locations:[{start:{line:4,column:38067},end:{line:4,column:38107}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"843":{loc:{start:{line:4,column:38248},end:{line:4,column:38329}},type:"cond-expr",locations:[{start:{line:4,column:38324},end:{line:4,column:38326}},{start:{line:4,column:38327},end:{line:4,column:38329}}],line:4},"844":{loc:{start:{line:4,column:38248},end:{line:4,column:38323}},type:"binary-expr",locations:[{start:{line:4,column:38248},end:{line:4,column:38257}},{start:{line:4,column:38259},end:{line:4,column:38268}},{start:{line:4,column:38270},end:{line:4,column:38280}},{start:{line:4,column:38282},end:{line:4,column:38291}},{start:{line:4,column:38293},end:{line:4,column:38309}},{start:{line:4,column:38311},end:{line:4,column:38323}}],line:4},"845":{loc:{start:{line:4,column:38398},end:{line:4,column:38416}},type:"binary-expr",locations:[{start:{line:4,column:38398},end:{line:4,column:38399}},{start:{line:4,column:38401},end:{line:4,column:38416}}],line:4},"846":{loc:{start:{line:4,column:38439},end:{line:4,column:38466}},type:"cond-expr",locations:[{start:{line:4,column:38461},end:{line:4,column:38464}},{start:{line:4,column:38465},end:{line:4,column:38466}}],line:4},"847":{loc:{start:{line:4,column:38530},end:{line:4,column:38549}},type:"if",locations:[{start:{line:4,column:38530},end:{line:4,column:38549}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"848":{loc:{start:{line:4,column:38549},end:{line:4,column:38640}},type:"if",locations:[{start:{line:4,column:38549},end:{line:4,column:38640}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"849":{loc:{start:{line:4,column:38552},end:{line:4,column:38580}},type:"binary-expr",locations:[{start:{line:4,column:38552},end:{line:4,column:38557}},{start:{line:4,column:38559},end:{line:4,column:38580}}],line:4},"850":{loc:{start:{line:4,column:38597},end:{line:4,column:38639}},type:"if",locations:[{start:{line:4,column:38597},end:{line:4,column:38639}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"851":{loc:{start:{line:4,column:38600},end:{line:4,column:38630}},type:"binary-expr",locations:[{start:{line:4,column:38600},end:{line:4,column:38607}},{start:{line:4,column:38609},end:{line:4,column:38630}}],line:4},"852":{loc:{start:{line:4,column:38697},end:{line:4,column:38832}},type:"if",locations:[{start:{line:4,column:38697},end:{line:4,column:38832}},{start:{line:4,column:38814},end:{line:4,column:38832}}],line:4},"853":{loc:{start:{line:4,column:38708},end:{line:4,column:38741}},type:"binary-expr",locations:[{start:{line:4,column:38708},end:{line:4,column:38718}},{start:{line:4,column:38720},end:{line:4,column:38741}}],line:4},"854":{loc:{start:{line:4,column:38747},end:{line:4,column:38808}},type:"if",locations:[{start:{line:4,column:38747},end:{line:4,column:38808}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"855":{loc:{start:{line:4,column:38750},end:{line:4,column:38799}},type:"binary-expr",locations:[{start:{line:4,column:38750},end:{line:4,column:38764}},{start:{line:4,column:38766},end:{line:4,column:38799}}],line:4},"856":{loc:{start:{line:4,column:38814},end:{line:4,column:38832}},type:"if",locations:[{start:{line:4,column:38814},end:{line:4,column:38832}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"857":{loc:{start:{line:4,column:38832},end:{line:4,column:38941}},type:"if",locations:[{start:{line:4,column:38832},end:{line:4,column:38941}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"858":{loc:{start:{line:4,column:38869},end:{line:4,column:38907}},type:"binary-expr",locations:[{start:{line:4,column:38869},end:{line:4,column:38881}},{start:{line:4,column:38883},end:{line:4,column:38907}}],line:4},"859":{loc:{start:{line:4,column:38909},end:{line:4,column:38940}},type:"if",locations:[{start:{line:4,column:38909},end:{line:4,column:38940}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"860":{loc:{start:{line:4,column:38972},end:{line:4,column:38996}},type:"binary-expr",locations:[{start:{line:4,column:38972},end:{line:4,column:38982}},{start:{line:4,column:38984},end:{line:4,column:38996}}],line:4},"861":{loc:{start:{line:4,column:39022},end:{line:4,column:39047}},type:"cond-expr",locations:[{start:{line:4,column:39037},end:{line:4,column:39039}},{start:{line:4,column:39040},end:{line:4,column:39047}}],line:4},"862":{loc:{start:{line:4,column:39022},end:{line:4,column:39036}},type:"binary-expr",locations:[{start:{line:4,column:39022},end:{line:4,column:39032}},{start:{line:4,column:39034},end:{line:4,column:39036}}],line:4},"863":{loc:{start:{line:4,column:39100},end:{line:4,column:39116}},type:"cond-expr",locations:[{start:{line:4,column:39109},end:{line:4,column:39114}},{start:{line:4,column:39115},end:{line:4,column:39116}}],line:4},"864":{loc:{start:{line:4,column:39161},end:{line:4,column:39258}},type:"if",locations:[{start:{line:4,column:39161},end:{line:4,column:39258}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"865":{loc:{start:{line:4,column:39184},end:{line:4,column:39215}},type:"if",locations:[{start:{line:4,column:39184},end:{line:4,column:39215}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"866":{loc:{start:{line:4,column:39187},end:{line:4,column:39205}},type:"binary-expr",locations:[{start:{line:4,column:39187},end:{line:4,column:39189}},{start:{line:4,column:39191},end:{line:4,column:39197}},{start:{line:4,column:39199},end:{line:4,column:39205}}],line:4},"867":{loc:{start:{line:4,column:39215},end:{line:4,column:39236}},type:"if",locations:[{start:{line:4,column:39215},end:{line:4,column:39236}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"868":{loc:{start:{line:4,column:39218},end:{line:4,column:39226}},type:"binary-expr",locations:[{start:{line:4,column:39218},end:{line:4,column:39219}},{start:{line:4,column:39221},end:{line:4,column:39226}}],line:4},"869":{loc:{start:{line:4,column:39258},end:{line:4,column:39581}},type:"if",locations:[{start:{line:4,column:39258},end:{line:4,column:39581}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"870":{loc:{start:{line:4,column:39264},end:{line:4,column:39581}},type:"if",locations:[{start:{line:4,column:39264},end:{line:4,column:39581}},{start:{line:4,column:39354},end:{line:4,column:39581}}],line:4},"871":{loc:{start:{line:4,column:39272},end:{line:4,column:39348}},type:"if",locations:[{start:{line:4,column:39272},end:{line:4,column:39348}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"872":{loc:{start:{line:4,column:39283},end:{line:4,column:39323}},type:"binary-expr",locations:[{start:{line:4,column:39283},end:{line:4,column:39289}},{start:{line:4,column:39291},end:{line:4,column:39301}},{start:{line:4,column:39303},end:{line:4,column:39309}},{start:{line:4,column:39311},end:{line:4,column:39323}}],line:4},"873":{loc:{start:{line:4,column:39325},end:{line:4,column:39343}},type:"if",locations:[{start:{line:4,column:39325},end:{line:4,column:39343}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"874":{loc:{start:{line:4,column:39354},end:{line:4,column:39581}},type:"if",locations:[{start:{line:4,column:39354},end:{line:4,column:39581}},{start:{line:4,column:39417},end:{line:4,column:39581}}],line:4},"875":{loc:{start:{line:4,column:39362},end:{line:4,column:39412}},type:"if",locations:[{start:{line:4,column:39362},end:{line:4,column:39412}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"876":{loc:{start:{line:4,column:39365},end:{line:4,column:39387}},type:"binary-expr",locations:[{start:{line:4,column:39365},end:{line:4,column:39373}},{start:{line:4,column:39375},end:{line:4,column:39387}}],line:4},"877":{loc:{start:{line:4,column:39389},end:{line:4,column:39407}},type:"if",locations:[{start:{line:4,column:39389},end:{line:4,column:39407}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"878":{loc:{start:{line:4,column:39449},end:{line:4,column:39492}},type:"if",locations:[{start:{line:4,column:39449},end:{line:4,column:39492}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"879":{loc:{start:{line:4,column:39460},end:{line:4,column:39478}},type:"if",locations:[{start:{line:4,column:39460},end:{line:4,column:39478}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"880":{loc:{start:{line:4,column:39492},end:{line:4,column:39580}},type:"if",locations:[{start:{line:4,column:39492},end:{line:4,column:39580}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"881":{loc:{start:{line:4,column:39509},end:{line:4,column:39579}},type:"if",locations:[{start:{line:4,column:39509},end:{line:4,column:39579}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"882":{loc:{start:{line:4,column:39512},end:{line:4,column:39543}},type:"cond-expr",locations:[{start:{line:4,column:39516},end:{line:4,column:39520}},{start:{line:4,column:39521},end:{line:4,column:39543}}],line:4},"883":{loc:{start:{line:4,column:39544},end:{line:4,column:39554}},type:"binary-expr",locations:[{start:{line:4,column:39544},end:{line:4,column:39547}},{start:{line:4,column:39549},end:{line:4,column:39554}}],line:4},"884":{loc:{start:{line:4,column:39556},end:{line:4,column:39574}},type:"if",locations:[{start:{line:4,column:39556},end:{line:4,column:39574}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"885":{loc:{start:{line:4,column:39589},end:{line:4,column:39597}},type:"binary-expr",locations:[{start:{line:4,column:39589},end:{line:4,column:39594}},{start:{line:4,column:39596},end:{line:4,column:39597}}],line:4},"886":{loc:{start:{line:4,column:39650},end:{line:4,column:39671}},type:"if",locations:[{start:{line:4,column:39650},end:{line:4,column:39671}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"887":{loc:{start:{line:4,column:39679},end:{line:4,column:39926}},type:"if",locations:[{start:{line:4,column:39679},end:{line:4,column:39926}},{start:{line:4,column:39912},end:{line:4,column:39926}}],line:4},"888":{loc:{start:{line:4,column:39682},end:{line:4,column:39687}},type:"binary-expr",locations:[{start:{line:4,column:39682},end:{line:4,column:39683}},{start:{line:4,column:39685},end:{line:4,column:39687}}],line:4},"889":{loc:{start:{line:4,column:39727},end:{line:4,column:39745}},type:"if",locations:[{start:{line:4,column:39727},end:{line:4,column:39745}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"890":{loc:{start:{line:4,column:39745},end:{line:4,column:39889}},type:"if",locations:[{start:{line:4,column:39745},end:{line:4,column:39889}},{start:{line:4,column:39771},end:{line:4,column:39889}}],line:4},"891":{loc:{start:{line:4,column:39748},end:{line:4,column:39760}},type:"binary-expr",locations:[{start:{line:4,column:39748},end:{line:4,column:39753}},{start:{line:4,column:39755},end:{line:4,column:39760}}],line:4},"892":{loc:{start:{line:4,column:39771},end:{line:4,column:39889}},type:"if",locations:[{start:{line:4,column:39771},end:{line:4,column:39889}},{start:{line:4,column:39848},end:{line:4,column:39889}}],line:4},"893":{loc:{start:{line:4,column:39774},end:{line:4,column:39786}},type:"binary-expr",locations:[{start:{line:4,column:39774},end:{line:4,column:39779}},{start:{line:4,column:39781},end:{line:4,column:39786}}],line:4},"894":{loc:{start:{line:4,column:39849},end:{line:4,column:39864}},type:"if",locations:[{start:{line:4,column:39849},end:{line:4,column:39864}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"895":{loc:{start:{line:4,column:39864},end:{line:4,column:39888}},type:"if",locations:[{start:{line:4,column:39864},end:{line:4,column:39888}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"896":{loc:{start:{line:4,column:39892},end:{line:4,column:39897}},type:"cond-expr",locations:[{start:{line:4,column:39894},end:{line:4,column:39895}},{start:{line:4,column:39896},end:{line:4,column:39897}}],line:4},"897":{loc:{start:{line:4,column:39943},end:{line:4,column:39947}},type:"default-arg",locations:[{start:{line:4,column:39945},end:{line:4,column:39947}}],line:4},"898":{loc:{start:{line:4,column:39976},end:{line:4,column:40001}},type:"if",locations:[{start:{line:4,column:39976},end:{line:4,column:40001}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"899":{loc:{start:{line:4,column:40039},end:{line:4,column:40097}},type:"if",locations:[{start:{line:4,column:40039},end:{line:4,column:40097}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"900":{loc:{start:{line:4,column:40070},end:{line:4,column:40096}},type:"if",locations:[{start:{line:4,column:40070},end:{line:4,column:40096}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"901":{loc:{start:{line:4,column:40163},end:{line:4,column:40180}},type:"if",locations:[{start:{line:4,column:40163},end:{line:4,column:40180}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"902":{loc:{start:{line:4,column:40233},end:{line:4,column:40326}},type:"if",locations:[{start:{line:4,column:40233},end:{line:4,column:40326}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"903":{loc:{start:{line:4,column:40273},end:{line:4,column:40304}},type:"if",locations:[{start:{line:4,column:40273},end:{line:4,column:40304}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"904":{loc:{start:{line:4,column:40304},end:{line:4,column:40322}},type:"if",locations:[{start:{line:4,column:40304},end:{line:4,column:40322}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"905":{loc:{start:{line:4,column:40393},end:{line:4,column:40479}},type:"if",locations:[{start:{line:4,column:40393},end:{line:4,column:40479}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"906":{loc:{start:{line:4,column:40444},end:{line:4,column:40470}},type:"if",locations:[{start:{line:4,column:40444},end:{line:4,column:40470}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"907":{loc:{start:{line:4,column:40513},end:{line:4,column:40537}},type:"cond-expr",locations:[{start:{line:4,column:40515},end:{line:4,column:40535}},{start:{line:4,column:40536},end:{line:4,column:40537}}],line:4},"908":{loc:{start:{line:4,column:40611},end:{line:4,column:40783}},type:"if",locations:[{start:{line:4,column:40611},end:{line:4,column:40783}},{start:{line:4,column:40733},end:{line:4,column:40783}}],line:4},"909":{loc:{start:{line:4,column:40633},end:{line:4,column:40728}},type:"if",locations:[{start:{line:4,column:40633},end:{line:4,column:40728}},{start:{line:4,column:40699},end:{line:4,column:40728}}],line:4},"910":{loc:{start:{line:4,column:40664},end:{line:4,column:40688}},type:"cond-expr",locations:[{start:{line:4,column:40675},end:{line:4,column:40685}},{start:{line:4,column:40686},end:{line:4,column:40688}}],line:4},"911":{loc:{start:{line:4,column:40699},end:{line:4,column:40727}},type:"cond-expr",locations:[{start:{line:4,column:40703},end:{line:4,column:40711}},{start:{line:4,column:40712},end:{line:4,column:40727}}],line:4},"912":{loc:{start:{line:4,column:40712},end:{line:4,column:40727}},type:"binary-expr",locations:[{start:{line:4,column:40712},end:{line:4,column:40715}},{start:{line:4,column:40718},end:{line:4,column:40726}}],line:4},"913":{loc:{start:{line:4,column:40733},end:{line:4,column:40766}},type:"binary-expr",locations:[{start:{line:4,column:40733},end:{line:4,column:40739}},{start:{line:4,column:40741},end:{line:4,column:40747}},{start:{line:4,column:40750},end:{line:4,column:40765}}],line:4},"914":{loc:{start:{line:4,column:40773},end:{line:4,column:40782}},type:"binary-expr",locations:[{start:{line:4,column:40773},end:{line:4,column:40774}},{start:{line:4,column:40776},end:{line:4,column:40782}}],line:4},"915":{loc:{start:{line:4,column:40794},end:{line:4,column:40814}},type:"binary-expr",locations:[{start:{line:4,column:40794},end:{line:4,column:40800}},{start:{line:4,column:40803},end:{line:4,column:40813}}],line:4},"916":{loc:{start:{line:4,column:40925},end:{line:4,column:41020}},type:"if",locations:[{start:{line:4,column:40925},end:{line:4,column:41020}},{start:{line:4,column:40999},end:{line:4,column:41020}}],line:4},"917":{loc:{start:{line:4,column:40947},end:{line:4,column:40994}},type:"cond-expr",locations:[{start:{line:4,column:40953},end:{line:4,column:40977}},{start:{line:4,column:40978},end:{line:4,column:40994}}],line:4},"918":{loc:{start:{line:4,column:40953},end:{line:4,column:40977}},type:"binary-expr",locations:[{start:{line:4,column:40953},end:{line:4,column:40959}},{start:{line:4,column:40961},end:{line:4,column:40977}}],line:4},"919":{loc:{start:{line:4,column:40978},end:{line:4,column:40994}},type:"binary-expr",locations:[{start:{line:4,column:40978},end:{line:4,column:40983}},{start:{line:4,column:40985},end:{line:4,column:40994}}],line:4},"920":{loc:{start:{line:4,column:41000},end:{line:4,column:41016}},type:"if",locations:[{start:{line:4,column:41000},end:{line:4,column:41016}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"921":{loc:{start:{line:4,column:41031},end:{line:4,column:41055}},type:"binary-expr",locations:[{start:{line:4,column:41031},end:{line:4,column:41039}},{start:{line:4,column:41041},end:{line:4,column:41055}}],line:4},"922":{loc:{start:{line:4,column:41130},end:{line:4,column:41156}},type:"cond-expr",locations:[{start:{line:4,column:41151},end:{line:4,column:41154}},{start:{line:4,column:41155},end:{line:4,column:41156}}],line:4},"923":{loc:{start:{line:4,column:41616},end:{line:4,column:41642}},type:"cond-expr",locations:[{start:{line:4,column:41637},end:{line:4,column:41640}},{start:{line:4,column:41641},end:{line:4,column:41642}}],line:4},"924":{loc:{start:{line:4,column:41656},end:{line:4,column:41682}},type:"cond-expr",locations:[{start:{line:4,column:41677},end:{line:4,column:41680}},{start:{line:4,column:41681},end:{line:4,column:41682}}],line:4},"925":{loc:{start:{line:4,column:41803},end:{line:4,column:41813}},type:"cond-expr",locations:[{start:{line:4,column:41807},end:{line:4,column:41811}},{start:{line:4,column:41812},end:{line:4,column:41813}}],line:4},"926":{loc:{start:{line:4,column:41860},end:{line:4,column:42001}},type:"cond-expr",locations:[{start:{line:4,column:41892},end:{line:4,column:41999}},{start:{line:4,column:42000},end:{line:4,column:42001}}],line:4},"927":{loc:{start:{line:4,column:41860},end:{line:4,column:41891}},type:"binary-expr",locations:[{start:{line:4,column:41860},end:{line:4,column:41868}},{start:{line:4,column:41870},end:{line:4,column:41891}}],line:4},"928":{loc:{start:{line:4,column:42101},end:{line:4,column:42139}},type:"binary-expr",locations:[{start:{line:4,column:42102},end:{line:4,column:42110}},{start:{line:4,column:42112},end:{line:4,column:42113}},{start:{line:4,column:42115},end:{line:4,column:42124}},{start:{line:4,column:42128},end:{line:4,column:42138}}],line:4},"929":{loc:{start:{line:4,column:42172},end:{line:4,column:42183}},type:"binary-expr",locations:[{start:{line:4,column:42172},end:{line:4,column:42173}},{start:{line:4,column:42175},end:{line:4,column:42176}},{start:{line:4,column:42178},end:{line:4,column:42183}}],line:4},"930":{loc:{start:{line:4,column:42189},end:{line:4,column:42199}},type:"binary-expr",locations:[{start:{line:4,column:42189},end:{line:4,column:42190}},{start:{line:4,column:42192},end:{line:4,column:42193}},{start:{line:4,column:42195},end:{line:4,column:42199}}],line:4},"931":{loc:{start:{line:4,column:42206},end:{line:4,column:42223}},type:"binary-expr",locations:[{start:{line:4,column:42206},end:{line:4,column:42207}},{start:{line:4,column:42209},end:{line:4,column:42210}},{start:{line:4,column:42212},end:{line:4,column:42217}},{start:{line:4,column:42219},end:{line:4,column:42223}}],line:4},"932":{loc:{start:{line:4,column:42263},end:{line:4,column:42279}},type:"cond-expr",locations:[{start:{line:4,column:42273},end:{line:4,column:42277}},{start:{line:4,column:42278},end:{line:4,column:42279}}],line:4},"933":{loc:{start:{line:4,column:42471},end:{line:4,column:42504}},type:"cond-expr",locations:[{start:{line:4,column:42481},end:{line:4,column:42487}},{start:{line:4,column:42488},end:{line:4,column:42504}}],line:4},"934":{loc:{start:{line:4,column:42488},end:{line:4,column:42504}},type:"binary-expr",locations:[{start:{line:4,column:42488},end:{line:4,column:42496}},{start:{line:4,column:42499},end:{line:4,column:42503}}],line:4},"935":{loc:{start:{line:4,column:42528},end:{line:4,column:42546}},type:"if",locations:[{start:{line:4,column:42528},end:{line:4,column:42546}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"936":{loc:{start:{line:4,column:42662},end:{line:4,column:42687}},type:"cond-expr",locations:[{start:{line:4,column:42668},end:{line:4,column:42679}},{start:{line:4,column:42680},end:{line:4,column:42687}}],line:4},"937":{loc:{start:{line:4,column:42710},end:{line:4,column:42713}},type:"default-arg",locations:[{start:{line:4,column:42712},end:{line:4,column:42713}}],line:4},"938":{loc:{start:{line:4,column:42758},end:{line:4,column:42877}},type:"if",locations:[{start:{line:4,column:42758},end:{line:4,column:42877}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"939":{loc:{start:{line:4,column:42764},end:{line:4,column:42877}},type:"if",locations:[{start:{line:4,column:42764},end:{line:4,column:42877}},{start:{line:4,column:42832},end:{line:4,column:42877}}],line:4},"940":{loc:{start:{line:4,column:42808},end:{line:4,column:42827}},type:"binary-expr",locations:[{start:{line:4,column:42808},end:{line:4,column:42816}},{start:{line:4,column:42818},end:{line:4,column:42827}}],line:4},"941":{loc:{start:{line:4,column:42855},end:{line:4,column:42876}},type:"binary-expr",locations:[{start:{line:4,column:42855},end:{line:4,column:42863}},{start:{line:4,column:42865},end:{line:4,column:42876}}],line:4},"942":{loc:{start:{line:4,column:43029},end:{line:4,column:43035}},type:"binary-expr",locations:[{start:{line:4,column:43029},end:{line:4,column:43031}},{start:{line:4,column:43033},end:{line:4,column:43035}}],line:4},"943":{loc:{start:{line:4,column:43106},end:{line:4,column:43141}},type:"binary-expr",locations:[{start:{line:4,column:43106},end:{line:4,column:43128}},{start:{line:4,column:43131},end:{line:4,column:43140}}],line:4},"944":{loc:{start:{line:4,column:43142},end:{line:4,column:43219}},type:"cond-expr",locations:[{start:{line:4,column:43175},end:{line:4,column:43193}},{start:{line:4,column:43194},end:{line:4,column:43219}}],line:4},"945":{loc:{start:{line:4,column:43142},end:{line:4,column:43174}},type:"binary-expr",locations:[{start:{line:4,column:43142},end:{line:4,column:43150}},{start:{line:4,column:43152},end:{line:4,column:43174}}],line:4},"946":{loc:{start:{line:4,column:43194},end:{line:4,column:43219}},type:"binary-expr",locations:[{start:{line:4,column:43194},end:{line:4,column:43202}},{start:{line:4,column:43205},end:{line:4,column:43218}}],line:4},"947":{loc:{start:{line:4,column:43220},end:{line:4,column:43271}},type:"cond-expr",locations:[{start:{line:4,column:43238},end:{line:4,column:43259}},{start:{line:4,column:43260},end:{line:4,column:43271}}],line:4},"948":{loc:{start:{line:4,column:43373},end:{line:4,column:43379}},type:"binary-expr",locations:[{start:{line:4,column:43373},end:{line:4,column:43375}},{start:{line:4,column:43377},end:{line:4,column:43379}}],line:4},"949":{loc:{start:{line:4,column:43423},end:{line:4,column:43503}},type:"binary-expr",locations:[{start:{line:4,column:43423},end:{line:4,column:43442}},{start:{line:4,column:43444},end:{line:4,column:43503}}],line:4},"950":{loc:{start:{line:4,column:43571},end:{line:4,column:43598}},type:"if",locations:[{start:{line:4,column:43571},end:{line:4,column:43598}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"951":{loc:{start:{line:4,column:43574},end:{line:4,column:43590}},type:"binary-expr",locations:[{start:{line:4,column:43574},end:{line:4,column:43576}},{start:{line:4,column:43578},end:{line:4,column:43590}}],line:4},"952":{loc:{start:{line:4,column:43694},end:{line:4,column:43935}},type:"cond-expr",locations:[{start:{line:4,column:43701},end:{line:4,column:43794}},{start:{line:4,column:43796},end:{line:4,column:43935}}],line:4},"953":{loc:{start:{line:4,column:43796},end:{line:4,column:43935}},type:"binary-expr",locations:[{start:{line:4,column:43797},end:{line:4,column:43798}},{start:{line:4,column:43800},end:{line:4,column:43805}},{start:{line:4,column:43807},end:{line:4,column:43808}},{start:{line:4,column:43810},end:{line:4,column:43811}},{start:{line:4,column:43813},end:{line:4,column:43818}},{start:{line:4,column:43822},end:{line:4,column:43934}}],line:4},"954":{loc:{start:{line:4,column:43970},end:{line:4,column:44010}},type:"cond-expr",locations:[{start:{line:4,column:43972},end:{line:4,column:43996}},{start:{line:4,column:43997},end:{line:4,column:44010}}],line:4},"955":{loc:{start:{line:4,column:43972},end:{line:4,column:43996}},type:"binary-expr",locations:[{start:{line:4,column:43972},end:{line:4,column:43985}},{start:{line:4,column:43987},end:{line:4,column:43996}}],line:4},"956":{loc:{start:{line:4,column:44141},end:{line:4,column:44147}},type:"binary-expr",locations:[{start:{line:4,column:44141},end:{line:4,column:44143}},{start:{line:4,column:44145},end:{line:4,column:44147}}],line:4},"957":{loc:{start:{line:4,column:44188},end:{line:4,column:44273}},type:"binary-expr",locations:[{start:{line:4,column:44188},end:{line:4,column:44197}},{start:{line:4,column:44200},end:{line:4,column:44272}}],line:4},"958":{loc:{start:{line:4,column:44641},end:{line:4,column:44670}},type:"binary-expr",locations:[{start:{line:4,column:44641},end:{line:4,column:44642}},{start:{line:4,column:44644},end:{line:4,column:44670}}],line:4},"959":{loc:{start:{line:4,column:44733},end:{line:4,column:44974}},type:"if",locations:[{start:{line:4,column:44733},end:{line:4,column:44974}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"960":{loc:{start:{line:4,column:44738},end:{line:4,column:44771}},type:"binary-expr",locations:[{start:{line:4,column:44738},end:{line:4,column:44758}},{start:{line:4,column:44760},end:{line:4,column:44771}}],line:4},"961":{loc:{start:{line:4,column:45033},end:{line:4,column:45079}},type:"binary-expr",locations:[{start:{line:4,column:45033},end:{line:4,column:45039}},{start:{line:4,column:45042},end:{line:4,column:45078}}],line:4},"962":{loc:{start:{line:4,column:45142},end:{line:4,column:45201}},type:"binary-expr",locations:[{start:{line:4,column:45142},end:{line:4,column:45175}},{start:{line:4,column:45177},end:{line:4,column:45201}}],line:4},"963":{loc:{start:{line:4,column:45237},end:{line:4,column:45264}},type:"binary-expr",locations:[{start:{line:4,column:45237},end:{line:4,column:45238}},{start:{line:4,column:45240},end:{line:4,column:45264}}],line:4},"964":{loc:{start:{line:4,column:45291},end:{line:4,column:45410}},type:"cond-expr",locations:[{start:{line:4,column:45303},end:{line:4,column:45340}},{start:{line:4,column:45342},end:{line:4,column:45410}}],line:4},"965":{loc:{start:{line:4,column:45342},end:{line:4,column:45410}},type:"cond-expr",locations:[{start:{line:4,column:45357},end:{line:4,column:45390}},{start:{line:4,column:45391},end:{line:4,column:45410}}],line:4},"966":{loc:{start:{line:4,column:45487},end:{line:4,column:45648}},type:"cond-expr",locations:[{start:{line:4,column:45526},end:{line:4,column:45583}},{start:{line:4,column:45586},end:{line:4,column:45647}}],line:4},"967":{loc:{start:{line:4,column:45487},end:{line:4,column:45524}},type:"binary-expr",locations:[{start:{line:4,column:45487},end:{line:4,column:45501}},{start:{line:4,column:45503},end:{line:4,column:45524}}],line:4},"968":{loc:{start:{line:4,column:45672},end:{line:4,column:45707}},type:"cond-expr",locations:[{start:{line:4,column:45674},end:{line:4,column:45703}},{start:{line:4,column:45704},end:{line:4,column:45707}}],line:4},"969":{loc:{start:{line:4,column:45913},end:{line:4,column:45919}},type:"default-arg",locations:[{start:{line:4,column:45915},end:{line:4,column:45919}}],line:4},"970":{loc:{start:{line:4,column:46241},end:{line:4,column:46281}},type:"binary-expr",locations:[{start:{line:4,column:46241},end:{line:4,column:46242}},{start:{line:4,column:46245},end:{line:4,column:46280}}],line:4},"971":{loc:{start:{line:4,column:46307},end:{line:4,column:46325}},type:"binary-expr",locations:[{start:{line:4,column:46307},end:{line:4,column:46318}},{start:{line:4,column:46320},end:{line:4,column:46325}}],line:4},"972":{loc:{start:{line:4,column:46392},end:{line:4,column:46484}},type:"cond-expr",locations:[{start:{line:4,column:46414},end:{line:4,column:46438}},{start:{line:4,column:46439},end:{line:4,column:46484}}],line:4},"973":{loc:{start:{line:4,column:46578},end:{line:4,column:46614}},type:"cond-expr",locations:[{start:{line:4,column:46600},end:{line:4,column:46609}},{start:{line:4,column:46610},end:{line:4,column:46614}}],line:4},"974":{loc:{start:{line:4,column:46856},end:{line:4,column:47002}},type:"if",locations:[{start:{line:4,column:46856},end:{line:4,column:47002}},{start:{line:4,column:46949},end:{line:4,column:47002}}],line:4},"975":{loc:{start:{line:4,column:47002},end:{line:4,column:47029}},type:"binary-expr",locations:[{start:{line:4,column:47002},end:{line:4,column:47013}},{start:{line:4,column:47015},end:{line:4,column:47029}}],line:4},"976":{loc:{start:{line:4,column:47063},end:{line:4,column:47189}},type:"if",locations:[{start:{line:4,column:47063},end:{line:4,column:47189}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"977":{loc:{start:{line:4,column:47285},end:{line:4,column:47321}},type:"binary-expr",locations:[{start:{line:4,column:47285},end:{line:4,column:47293}},{start:{line:4,column:47295},end:{line:4,column:47296}},{start:{line:4,column:47298},end:{line:4,column:47312}},{start:{line:4,column:47314},end:{line:4,column:47321}}],line:4},"978":{loc:{start:{line:4,column:47351},end:{line:4,column:47720}},type:"if",locations:[{start:{line:4,column:47351},end:{line:4,column:47720}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"979":{loc:{start:{line:4,column:47374},end:{line:4,column:47405}},type:"cond-expr",locations:[{start:{line:4,column:47380},end:{line:4,column:47383}},{start:{line:4,column:47384},end:{line:4,column:47405}}],line:4},"980":{loc:{start:{line:4,column:47384},end:{line:4,column:47405}},type:"binary-expr",locations:[{start:{line:4,column:47384},end:{line:4,column:47389}},{start:{line:4,column:47392},end:{line:4,column:47404}}],line:4},"981":{loc:{start:{line:4,column:47418},end:{line:4,column:47692}},type:"cond-expr",locations:[{start:{line:4,column:47435},end:{line:4,column:47485}},{start:{line:4,column:47487},end:{line:4,column:47692}}],line:4},"982":{loc:{start:{line:4,column:47418},end:{line:4,column:47433}},type:"binary-expr",locations:[{start:{line:4,column:47418},end:{line:4,column:47423}},{start:{line:4,column:47425},end:{line:4,column:47433}}],line:4},"983":{loc:{start:{line:4,column:47447},end:{line:4,column:47485}},type:"cond-expr",locations:[{start:{line:4,column:47455},end:{line:4,column:47464}},{start:{line:4,column:47465},end:{line:4,column:47485}}],line:4},"984":{loc:{start:{line:4,column:47474},end:{line:4,column:47481}},type:"binary-expr",locations:[{start:{line:4,column:47474},end:{line:4,column:47475}},{start:{line:4,column:47477},end:{line:4,column:47481}}],line:4},"985":{loc:{start:{line:4,column:47487},end:{line:4,column:47692}},type:"cond-expr",locations:[{start:{line:4,column:47504},end:{line:4,column:47544}},{start:{line:4,column:47546},end:{line:4,column:47692}}],line:4},"986":{loc:{start:{line:4,column:47487},end:{line:4,column:47502}},type:"binary-expr",locations:[{start:{line:4,column:47487},end:{line:4,column:47492}},{start:{line:4,column:47494},end:{line:4,column:47502}}],line:4},"987":{loc:{start:{line:4,column:47525},end:{line:4,column:47532}},type:"binary-expr",locations:[{start:{line:4,column:47525},end:{line:4,column:47526}},{start:{line:4,column:47528},end:{line:4,column:47532}}],line:4},"988":{loc:{start:{line:4,column:47546},end:{line:4,column:47692}},type:"cond-expr",locations:[{start:{line:4,column:47553},end:{line:4,column:47651}},{start:{line:4,column:47653},end:{line:4,column:47692}}],line:4},"989":{loc:{start:{line:4,column:47553},end:{line:4,column:47590}},type:"binary-expr",locations:[{start:{line:4,column:47553},end:{line:4,column:47581}},{start:{line:4,column:47583},end:{line:4,column:47590}}],line:4},"990":{loc:{start:{line:4,column:47604},end:{line:4,column:47638}},type:"if",locations:[{start:{line:4,column:47604},end:{line:4,column:47638}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"991":{loc:{start:{line:4,column:47653},end:{line:4,column:47692}},type:"binary-expr",locations:[{start:{line:4,column:47653},end:{line:4,column:47658}},{start:{line:4,column:47660},end:{line:4,column:47692}}],line:4},"992":{loc:{start:{line:4,column:47693},end:{line:4,column:47719}},type:"binary-expr",locations:[{start:{line:4,column:47693},end:{line:4,column:47700}},{start:{line:4,column:47702},end:{line:4,column:47719}}],line:4},"993":{loc:{start:{line:4,column:47934},end:{line:4,column:47958}},type:"if",locations:[{start:{line:4,column:47934},end:{line:4,column:47958}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"994":{loc:{start:{line:4,column:47978},end:{line:4,column:48020}},type:"if",locations:[{start:{line:4,column:47978},end:{line:4,column:48020}},{start:{line:4,column:47999},end:{line:4,column:48020}}],line:4},"995":{loc:{start:{line:4,column:48011},end:{line:4,column:48019}},type:"binary-expr",locations:[{start:{line:4,column:48011},end:{line:4,column:48012}},{start:{line:4,column:48015},end:{line:4,column:48018}}],line:4},"996":{loc:{start:{line:4,column:48020},end:{line:4,column:48120}},type:"if",locations:[{start:{line:4,column:48020},end:{line:4,column:48120}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"997":{loc:{start:{line:4,column:48032},end:{line:4,column:48048}},type:"binary-expr",locations:[{start:{line:4,column:48032},end:{line:4,column:48033}},{start:{line:4,column:48035},end:{line:4,column:48041}},{start:{line:4,column:48043},end:{line:4,column:48048}}],line:4},"998":{loc:{start:{line:4,column:48050},end:{line:4,column:48067}},type:"binary-expr",locations:[{start:{line:4,column:48050},end:{line:4,column:48055}},{start:{line:4,column:48057},end:{line:4,column:48067}}],line:4},"999":{loc:{start:{line:4,column:48075},end:{line:4,column:48090}},type:"binary-expr",locations:[{start:{line:4,column:48075},end:{line:4,column:48083}},{start:{line:4,column:48086},end:{line:4,column:48089}}],line:4},"1000":{loc:{start:{line:4,column:48091},end:{line:4,column:48108}},type:"binary-expr",locations:[{start:{line:4,column:48091},end:{line:4,column:48096}},{start:{line:4,column:48098},end:{line:4,column:48108}}],line:4},"1001":{loc:{start:{line:4,column:48111},end:{line:4,column:48119}},type:"binary-expr",locations:[{start:{line:4,column:48111},end:{line:4,column:48112}},{start:{line:4,column:48114},end:{line:4,column:48119}}],line:4},"1002":{loc:{start:{line:4,column:48200},end:{line:4,column:48216}},type:"if",locations:[{start:{line:4,column:48200},end:{line:4,column:48216}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1003":{loc:{start:{line:4,column:48227},end:{line:4,column:48263}},type:"binary-expr",locations:[{start:{line:4,column:48227},end:{line:4,column:48240}},{start:{line:4,column:48242},end:{line:4,column:48263}}],line:4},"1004":{loc:{start:{line:4,column:48287},end:{line:4,column:48303}},type:"if",locations:[{start:{line:4,column:48287},end:{line:4,column:48303}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1005":{loc:{start:{line:4,column:48342},end:{line:4,column:48358}},type:"binary-expr",locations:[{start:{line:4,column:48342},end:{line:4,column:48347}},{start:{line:4,column:48349},end:{line:4,column:48358}}],line:4},"1006":{loc:{start:{line:4,column:48375},end:{line:4,column:48404}},type:"binary-expr",locations:[{start:{line:4,column:48375},end:{line:4,column:48388}},{start:{line:4,column:48390},end:{line:4,column:48404}}],line:4},"1007":{loc:{start:{line:4,column:48417},end:{line:4,column:48496}},type:"if",locations:[{start:{line:4,column:48417},end:{line:4,column:48496}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1008":{loc:{start:{line:4,column:48420},end:{line:4,column:48438}},type:"binary-expr",locations:[{start:{line:4,column:48420},end:{line:4,column:48428}},{start:{line:4,column:48430},end:{line:4,column:48438}}],line:4},"1009":{loc:{start:{line:4,column:48440},end:{line:4,column:48457}},type:"binary-expr",locations:[{start:{line:4,column:48440},end:{line:4,column:48448}},{start:{line:4,column:48450},end:{line:4,column:48457}}],line:4},"1010":{loc:{start:{line:4,column:48470},end:{line:4,column:48495}},type:"binary-expr",locations:[{start:{line:4,column:48470},end:{line:4,column:48478}},{start:{line:4,column:48480},end:{line:4,column:48495}}],line:4},"1011":{loc:{start:{line:4,column:48551},end:{line:4,column:48613}},type:"if",locations:[{start:{line:4,column:48551},end:{line:4,column:48613}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1012":{loc:{start:{line:4,column:48554},end:{line:4,column:48599}},type:"binary-expr",locations:[{start:{line:4,column:48554},end:{line:4,column:48561}},{start:{line:4,column:48563},end:{line:4,column:48576}},{start:{line:4,column:48578},end:{line:4,column:48599}}],line:4},"1013":{loc:{start:{line:4,column:48613},end:{line:4,column:48629}},type:"binary-expr",locations:[{start:{line:4,column:48613},end:{line:4,column:48614}},{start:{line:4,column:48616},end:{line:4,column:48629}}],line:4},"1014":{loc:{start:{line:4,column:48640},end:{line:4,column:48904}},type:"if",locations:[{start:{line:4,column:48640},end:{line:4,column:48904}},{start:{line:4,column:48879},end:{line:4,column:48904}}],line:4},"1015":{loc:{start:{line:4,column:48643},end:{line:4,column:48672}},type:"binary-expr",locations:[{start:{line:4,column:48643},end:{line:4,column:48650}},{start:{line:4,column:48652},end:{line:4,column:48672}}],line:4},"1016":{loc:{start:{line:4,column:48706},end:{line:4,column:48834}},type:"if",locations:[{start:{line:4,column:48706},end:{line:4,column:48834}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1017":{loc:{start:{line:4,column:48879},end:{line:4,column:48898}},type:"binary-expr",locations:[{start:{line:4,column:48879},end:{line:4,column:48880}},{start:{line:4,column:48882},end:{line:4,column:48898}}],line:4},"1018":{loc:{start:{line:4,column:48947},end:{line:4,column:49018}},type:"if",locations:[{start:{line:4,column:48947},end:{line:4,column:49018}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1019":{loc:{start:{line:4,column:49065},end:{line:4,column:49217}},type:"if",locations:[{start:{line:4,column:49065},end:{line:4,column:49217}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1020":{loc:{start:{line:4,column:49107},end:{line:4,column:49217}},type:"if",locations:[{start:{line:4,column:49107},end:{line:4,column:49217}},{start:{line:4,column:49187},end:{line:4,column:49217}}],line:4},"1021":{loc:{start:{line:4,column:49146},end:{line:4,column:49177}},type:"cond-expr",locations:[{start:{line:4,column:49151},end:{line:4,column:49157}},{start:{line:4,column:49158},end:{line:4,column:49177}}],line:4},"1022":{loc:{start:{line:4,column:49217},end:{line:4,column:49239}},type:"binary-expr",locations:[{start:{line:4,column:49217},end:{line:4,column:49225}},{start:{line:4,column:49228},end:{line:4,column:49238}}],line:4},"1023":{loc:{start:{line:4,column:49252},end:{line:4,column:49320}},type:"if",locations:[{start:{line:4,column:49252},end:{line:4,column:49320}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1024":{loc:{start:{line:4,column:49332},end:{line:4,column:49383}},type:"if",locations:[{start:{line:4,column:49332},end:{line:4,column:49383}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1025":{loc:{start:{line:4,column:49407},end:{line:4,column:49756}},type:"if",locations:[{start:{line:4,column:49407},end:{line:4,column:49756}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1026":{loc:{start:{line:4,column:49410},end:{line:4,column:49443}},type:"binary-expr",locations:[{start:{line:4,column:49410},end:{line:4,column:49417}},{start:{line:4,column:49419},end:{line:4,column:49443}}],line:4},"1027":{loc:{start:{line:4,column:49487},end:{line:4,column:49755}},type:"if",locations:[{start:{line:4,column:49487},end:{line:4,column:49755}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1028":{loc:{start:{line:4,column:49523},end:{line:4,column:49754}},type:"if",locations:[{start:{line:4,column:49523},end:{line:4,column:49754}},{start:{line:4,column:49676},end:{line:4,column:49754}}],line:4},"1029":{loc:{start:{line:4,column:49832},end:{line:4,column:49852}},type:"binary-expr",locations:[{start:{line:4,column:49832},end:{line:4,column:49840}},{start:{line:4,column:49842},end:{line:4,column:49852}}],line:4},"1030":{loc:{start:{line:4,column:49869},end:{line:4,column:49894}},type:"if",locations:[{start:{line:4,column:49869},end:{line:4,column:49894}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1031":{loc:{start:{line:4,column:49894},end:{line:4,column:50012}},type:"if",locations:[{start:{line:4,column:49894},end:{line:4,column:50012}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1032":{loc:{start:{line:4,column:49968},end:{line:4,column:50011}},type:"if",locations:[{start:{line:4,column:49968},end:{line:4,column:50011}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1033":{loc:{start:{line:4,column:49971},end:{line:4,column:49999}},type:"binary-expr",locations:[{start:{line:4,column:49971},end:{line:4,column:49982}},{start:{line:4,column:49984},end:{line:4,column:49999}}],line:4},"1034":{loc:{start:{line:4,column:50089},end:{line:4,column:50111}},type:"cond-expr",locations:[{start:{line:4,column:50099},end:{line:4,column:50106}},{start:{line:4,column:50107},end:{line:4,column:50111}}],line:4},"1035":{loc:{start:{line:4,column:50171},end:{line:4,column:50185}},type:"binary-expr",locations:[{start:{line:4,column:50171},end:{line:4,column:50179}},{start:{line:4,column:50181},end:{line:4,column:50185}}],line:4},"1036":{loc:{start:{line:4,column:50198},end:{line:4,column:50294}},type:"if",locations:[{start:{line:4,column:50198},end:{line:4,column:50294}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1037":{loc:{start:{line:4,column:50209},end:{line:4,column:50294}},type:"if",locations:[{start:{line:4,column:50209},end:{line:4,column:50294}},{start:{line:4,column:50279},end:{line:4,column:50294}}],line:4},"1038":{loc:{start:{line:4,column:50294},end:{line:4,column:50320}},type:"binary-expr",locations:[{start:{line:4,column:50294},end:{line:4,column:50305}},{start:{line:4,column:50307},end:{line:4,column:50320}}],line:4},"1039":{loc:{start:{line:4,column:50338},end:{line:4,column:50706}},type:"if",locations:[{start:{line:4,column:50338},end:{line:4,column:50706}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1040":{loc:{start:{line:4,column:50364},end:{line:4,column:50386}},type:"if",locations:[{start:{line:4,column:50364},end:{line:4,column:50386}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1041":{loc:{start:{line:4,column:50386},end:{line:4,column:50418}},type:"if",locations:[{start:{line:4,column:50386},end:{line:4,column:50418}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1042":{loc:{start:{line:4,column:50418},end:{line:4,column:50705}},type:"if",locations:[{start:{line:4,column:50418},end:{line:4,column:50705}},{start:{line:4,column:50518},end:{line:4,column:50705}}],line:4},"1043":{loc:{start:{line:4,column:50440},end:{line:4,column:50467}},type:"if",locations:[{start:{line:4,column:50440},end:{line:4,column:50467}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1044":{loc:{start:{line:4,column:50492},end:{line:4,column:50512}},type:"cond-expr",locations:[{start:{line:4,column:50498},end:{line:4,column:50506}},{start:{line:4,column:50507},end:{line:4,column:50512}}],line:4},"1045":{loc:{start:{line:4,column:50519},end:{line:4,column:50548}},type:"if",locations:[{start:{line:4,column:50519},end:{line:4,column:50548}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1046":{loc:{start:{line:4,column:50548},end:{line:4,column:50589}},type:"if",locations:[{start:{line:4,column:50548},end:{line:4,column:50589}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1047":{loc:{start:{line:4,column:50563},end:{line:4,column:50588}},type:"binary-expr",locations:[{start:{line:4,column:50563},end:{line:4,column:50572}},{start:{line:4,column:50574},end:{line:4,column:50588}}],line:4},"1048":{loc:{start:{line:4,column:50604},end:{line:4,column:50703}},type:"if",locations:[{start:{line:4,column:50604},end:{line:4,column:50703}},{start:{line:4,column:50684},end:{line:4,column:50703}}],line:4},"1049":{loc:{start:{line:4,column:50617},end:{line:4,column:50649}},type:"if",locations:[{start:{line:4,column:50617},end:{line:4,column:50649}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1050":{loc:{start:{line:4,column:50735},end:{line:4,column:50800}},type:"if",locations:[{start:{line:4,column:50735},end:{line:4,column:50800}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1051":{loc:{start:{line:4,column:50841},end:{line:4,column:50912}},type:"if",locations:[{start:{line:4,column:50841},end:{line:4,column:50912}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1052":{loc:{start:{line:4,column:50885},end:{line:4,column:50911}},type:"if",locations:[{start:{line:4,column:50885},end:{line:4,column:50911}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1053":{loc:{start:{line:4,column:50979},end:{line:4,column:51014}},type:"if",locations:[{start:{line:4,column:50979},end:{line:4,column:51014}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1054":{loc:{start:{line:4,column:51040},end:{line:4,column:51268}},type:"if",locations:[{start:{line:4,column:51040},end:{line:4,column:51268}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1055":{loc:{start:{line:4,column:51043},end:{line:4,column:51080}},type:"binary-expr",locations:[{start:{line:4,column:51043},end:{line:4,column:51044}},{start:{line:4,column:51046},end:{line:4,column:51051}},{start:{line:4,column:51054},end:{line:4,column:51079}}],line:4},"1056":{loc:{start:{line:4,column:51054},end:{line:4,column:51068}},type:"binary-expr",locations:[{start:{line:4,column:51054},end:{line:4,column:51055}},{start:{line:4,column:51057},end:{line:4,column:51068}}],line:4},"1057":{loc:{start:{line:4,column:51088},end:{line:4,column:51268}},type:"if",locations:[{start:{line:4,column:51088},end:{line:4,column:51268}},{start:{line:4,column:51145},end:{line:4,column:51268}}],line:4},"1058":{loc:{start:{line:4,column:51145},end:{line:4,column:51268}},type:"if",locations:[{start:{line:4,column:51145},end:{line:4,column:51268}},{start:{line:4,column:51227},end:{line:4,column:51268}}],line:4},"1059":{loc:{start:{line:4,column:51227},end:{line:4,column:51267}},type:"cond-expr",locations:[{start:{line:4,column:51232},end:{line:4,column:51247}},{start:{line:4,column:51248},end:{line:4,column:51267}}],line:4},"1060":{loc:{start:{line:4,column:51270},end:{line:4,column:51295}},type:"cond-expr",locations:[{start:{line:4,column:51272},end:{line:4,column:51288}},{start:{line:4,column:51289},end:{line:4,column:51295}}],line:4},"1061":{loc:{start:{line:4,column:51396},end:{line:4,column:51410}},type:"binary-expr",locations:[{start:{line:4,column:51396},end:{line:4,column:51404}},{start:{line:4,column:51406},end:{line:4,column:51410}}],line:4},"1062":{loc:{start:{line:4,column:51507},end:{line:4,column:51651}},type:"if",locations:[{start:{line:4,column:51507},end:{line:4,column:51651}},{start:{line:4,column:51594},end:{line:4,column:51651}}],line:4},"1063":{loc:{start:{line:4,column:51610},end:{line:4,column:51631}},type:"binary-expr",locations:[{start:{line:4,column:51610},end:{line:4,column:51615}},{start:{line:4,column:51618},end:{line:4,column:51630}}],line:4},"1064":{loc:{start:{line:4,column:51699},end:{line:4,column:51723}},type:"binary-expr",locations:[{start:{line:4,column:51699},end:{line:4,column:51704}},{start:{line:4,column:51706},end:{line:4,column:51723}}],line:4},"1065":{loc:{start:{line:4,column:51806},end:{line:4,column:52030}},type:"if",locations:[{start:{line:4,column:51806},end:{line:4,column:52030}},{start:{line:4,column:51852},end:{line:4,column:52030}}],line:4},"1066":{loc:{start:{line:4,column:51811},end:{line:4,column:51847}},type:"cond-expr",locations:[{start:{line:4,column:51813},end:{line:4,column:51828}},{start:{line:4,column:51829},end:{line:4,column:51847}}],line:4},"1067":{loc:{start:{line:4,column:51859},end:{line:4,column:51897}},type:"cond-expr",locations:[{start:{line:4,column:51879},end:{line:4,column:51885}},{start:{line:4,column:51886},end:{line:4,column:51897}}],line:4},"1068":{loc:{start:{line:4,column:51898},end:{line:4,column:52029}},type:"cond-expr",locations:[{start:{line:4,column:51906},end:{line:4,column:51926}},{start:{line:4,column:51928},end:{line:4,column:52028}}],line:4},"1069":{loc:{start:{line:4,column:51928},end:{line:4,column:52008}},type:"binary-expr",locations:[{start:{line:4,column:51928},end:{line:4,column:51946}},{start:{line:4,column:51948},end:{line:4,column:51972}},{start:{line:4,column:51975},end:{line:4,column:52007}}],line:4},"1070":{loc:{start:{line:4,column:52082},end:{line:4,column:52109}},type:"binary-expr",locations:[{start:{line:4,column:52082},end:{line:4,column:52083}},{start:{line:4,column:52085},end:{line:4,column:52095}},{start:{line:4,column:52097},end:{line:4,column:52109}}],line:4},"1071":{loc:{start:{line:4,column:52116},end:{line:4,column:52161}},type:"cond-expr",locations:[{start:{line:4,column:52118},end:{line:4,column:52139}},{start:{line:4,column:52140},end:{line:4,column:52161}}],line:4},"1072":{loc:{start:{line:4,column:52198},end:{line:4,column:52239}},type:"cond-expr",locations:[{start:{line:4,column:52200},end:{line:4,column:52219}},{start:{line:4,column:52220},end:{line:4,column:52239}}],line:4},"1073":{loc:{start:{line:4,column:52279},end:{line:4,column:52307}},type:"binary-expr",locations:[{start:{line:4,column:52279},end:{line:4,column:52296}},{start:{line:4,column:52298},end:{line:4,column:52307}}],line:4},"1074":{loc:{start:{line:4,column:52324},end:{line:4,column:52328}},type:"default-arg",locations:[{start:{line:4,column:52326},end:{line:4,column:52328}}],line:4},"1075":{loc:{start:{line:4,column:52349},end:{line:4,column:52451}},type:"if",locations:[{start:{line:4,column:52349},end:{line:4,column:52451}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1076":{loc:{start:{line:4,column:52422},end:{line:4,column:52440}},type:"cond-expr",locations:[{start:{line:4,column:52429},end:{line:4,column:52435}},{start:{line:4,column:52436},end:{line:4,column:52440}}],line:4},"1077":{loc:{start:{line:4,column:52479},end:{line:4,column:52547}},type:"binary-expr",locations:[{start:{line:4,column:52479},end:{line:4,column:52491}},{start:{line:4,column:52493},end:{line:4,column:52509}},{start:{line:4,column:52511},end:{line:4,column:52547}}],line:4},"1078":{loc:{start:{line:4,column:52649},end:{line:4,column:52804}},type:"cond-expr",locations:[{start:{line:4,column:52661},end:{line:4,column:52672}},{start:{line:4,column:52673},end:{line:4,column:52804}}],line:4},"1079":{loc:{start:{line:4,column:52673},end:{line:4,column:52804}},type:"cond-expr",locations:[{start:{line:4,column:52683},end:{line:4,column:52692}},{start:{line:4,column:52693},end:{line:4,column:52804}}],line:4},"1080":{loc:{start:{line:4,column:52693},end:{line:4,column:52804}},type:"cond-expr",locations:[{start:{line:4,column:52710},end:{line:4,column:52722}},{start:{line:4,column:52723},end:{line:4,column:52804}}],line:4},"1081":{loc:{start:{line:4,column:52723},end:{line:4,column:52804}},type:"cond-expr",locations:[{start:{line:4,column:52739},end:{line:4,column:52750}},{start:{line:4,column:52751},end:{line:4,column:52804}}],line:4},"1082":{loc:{start:{line:4,column:52751},end:{line:4,column:52804}},type:"cond-expr",locations:[{start:{line:4,column:52766},end:{line:4,column:52776}},{start:{line:4,column:52777},end:{line:4,column:52804}}],line:4},"1083":{loc:{start:{line:4,column:52777},end:{line:4,column:52804}},type:"cond-expr",locations:[{start:{line:4,column:52792},end:{line:4,column:52802}},{start:{line:4,column:52803},end:{line:4,column:52804}}],line:4},"1084":{loc:{start:{line:4,column:52841},end:{line:4,column:52887}},type:"if",locations:[{start:{line:4,column:52841},end:{line:4,column:52887}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1085":{loc:{start:{line:4,column:52859},end:{line:4,column:52879}},type:"binary-expr",locations:[{start:{line:4,column:52859},end:{line:4,column:52864}},{start:{line:4,column:52866},end:{line:4,column:52879}}],line:4},"1086":{loc:{start:{line:4,column:52887},end:{line:4,column:52906}},type:"binary-expr",locations:[{start:{line:4,column:52887},end:{line:4,column:52895}},{start:{line:4,column:52898},end:{line:4,column:52905}}],line:4},"1087":{loc:{start:{line:4,column:52948},end:{line:4,column:53041}},type:"if",locations:[{start:{line:4,column:52948},end:{line:4,column:53041}},{start:{line:4,column:53032},end:{line:4,column:53041}}],line:4},"1088":{loc:{start:{line:4,column:52977},end:{line:4,column:53005}},type:"cond-expr",locations:[{start:{line:4,column:52985},end:{line:4,column:53003}},{start:{line:4,column:53004},end:{line:4,column:53005}}],line:4},"1089":{loc:{start:{line:4,column:52989},end:{line:4,column:53000}},type:"binary-expr",locations:[{start:{line:4,column:52989},end:{line:4,column:52996}},{start:{line:4,column:52998},end:{line:4,column:53000}}],line:4},"1090":{loc:{start:{line:4,column:53073},end:{line:4,column:53092}},type:"binary-expr",locations:[{start:{line:4,column:53073},end:{line:4,column:53080}},{start:{line:4,column:53083},end:{line:4,column:53091}}],line:4},"1091":{loc:{start:{line:4,column:53152},end:{line:4,column:53194}},type:"binary-expr",locations:[{start:{line:4,column:53152},end:{line:4,column:53157}},{start:{line:4,column:53159},end:{line:4,column:53194}}],line:4},"1092":{loc:{start:{line:4,column:53195},end:{line:4,column:53221}},type:"binary-expr",locations:[{start:{line:4,column:53195},end:{line:4,column:53212}},{start:{line:4,column:53214},end:{line:4,column:53221}}],line:4},"1093":{loc:{start:{line:4,column:53295},end:{line:4,column:53378}},type:"if",locations:[{start:{line:4,column:53295},end:{line:4,column:53378}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1094":{loc:{start:{line:4,column:53306},end:{line:4,column:53333}},type:"binary-expr",locations:[{start:{line:4,column:53306},end:{line:4,column:53314}},{start:{line:4,column:53316},end:{line:4,column:53333}}],line:4},"1095":{loc:{start:{line:4,column:53516},end:{line:4,column:53584}},type:"binary-expr",locations:[{start:{line:4,column:53517},end:{line:4,column:53538}},{start:{line:4,column:53540},end:{line:4,column:53554}},{start:{line:4,column:53556},end:{line:4,column:53574}},{start:{line:4,column:53577},end:{line:4,column:53584}}],line:4},"1096":{loc:{start:{line:4,column:53625},end:{line:4,column:53667}},type:"binary-expr",locations:[{start:{line:4,column:53625},end:{line:4,column:53646}},{start:{line:4,column:53648},end:{line:4,column:53667}}],line:4},"1097":{loc:{start:{line:4,column:53718},end:{line:4,column:53822}},type:"if",locations:[{start:{line:4,column:53718},end:{line:4,column:53822}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1098":{loc:{start:{line:4,column:53762},end:{line:4,column:53821}},type:"binary-expr",locations:[{start:{line:4,column:53762},end:{line:4,column:53782}},{start:{line:4,column:53785},end:{line:4,column:53820}}],line:4},"1099":{loc:{start:{line:4,column:53792},end:{line:4,column:53820}},type:"cond-expr",locations:[{start:{line:4,column:53798},end:{line:4,column:53810}},{start:{line:4,column:53811},end:{line:4,column:53820}}],line:4},"1100":{loc:{start:{line:4,column:53924},end:{line:4,column:54022}},type:"if",locations:[{start:{line:4,column:53924},end:{line:4,column:54022}},{start:{line:4,column:53964},end:{line:4,column:54022}}],line:4},"1101":{loc:{start:{line:4,column:53971},end:{line:4,column:53997}},type:"cond-expr",locations:[{start:{line:4,column:53979},end:{line:4,column:53984}},{start:{line:4,column:53985},end:{line:4,column:53997}}],line:4},"1102":{loc:{start:{line:4,column:53989},end:{line:4,column:53994}},type:"binary-expr",locations:[{start:{line:4,column:53989},end:{line:4,column:53990}},{start:{line:4,column:53992},end:{line:4,column:53994}}],line:4},"1103":{loc:{start:{line:4,column:54059},end:{line:4,column:54132}},type:"if",locations:[{start:{line:4,column:54059},end:{line:4,column:54132}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1104":{loc:{start:{line:4,column:54228},end:{line:4,column:54284}},type:"cond-expr",locations:[{start:{line:4,column:54231},end:{line:4,column:54275}},{start:{line:4,column:54277},end:{line:4,column:54284}}],line:4},"1105":{loc:{start:{line:4,column:54244},end:{line:4,column:54270}},type:"binary-expr",locations:[{start:{line:4,column:54245},end:{line:4,column:54253}},{start:{line:4,column:54255},end:{line:4,column:54260}},{start:{line:4,column:54263},end:{line:4,column:54270}}],line:4},"1106":{loc:{start:{line:4,column:54285},end:{line:4,column:54316}},type:"binary-expr",locations:[{start:{line:4,column:54285},end:{line:4,column:54289}},{start:{line:4,column:54292},end:{line:4,column:54294}},{start:{line:4,column:54296},end:{line:4,column:54302}},{start:{line:4,column:54305},end:{line:4,column:54316}}],line:4},"1107":{loc:{start:{line:4,column:54349},end:{line:4,column:54380}},type:"cond-expr",locations:[{start:{line:4,column:54354},end:{line:4,column:54358}},{start:{line:4,column:54360},end:{line:4,column:54379}}],line:4},"1108":{loc:{start:{line:4,column:54412},end:{line:4,column:54425}},type:"if",locations:[{start:{line:4,column:54412},end:{line:4,column:54425}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1109":{loc:{start:{line:4,column:54549},end:{line:4,column:54635}},type:"if",locations:[{start:{line:4,column:54549},end:{line:4,column:54635}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1110":{loc:{start:{line:4,column:54635},end:{line:4,column:54696}},type:"if",locations:[{start:{line:4,column:54635},end:{line:4,column:54696}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1111":{loc:{start:{line:4,column:54763},end:{line:4,column:54806}},type:"binary-expr",locations:[{start:{line:4,column:54763},end:{line:4,column:54771}},{start:{line:4,column:54773},end:{line:4,column:54785}},{start:{line:4,column:54788},end:{line:4,column:54805}}],line:4},"1112":{loc:{start:{line:4,column:55007},end:{line:4,column:55026}},type:"binary-expr",locations:[{start:{line:4,column:55007},end:{line:4,column:55015}},{start:{line:4,column:55017},end:{line:4,column:55026}}],line:4},"1113":{loc:{start:{line:4,column:55044},end:{line:4,column:55067}},type:"binary-expr",locations:[{start:{line:4,column:55044},end:{line:4,column:55052}},{start:{line:4,column:55054},end:{line:4,column:55067}}],line:4},"1114":{loc:{start:{line:4,column:55068},end:{line:4,column:55109}},type:"binary-expr",locations:[{start:{line:4,column:55068},end:{line:4,column:55085}},{start:{line:4,column:55088},end:{line:4,column:55108}}],line:4},"1115":{loc:{start:{line:4,column:55139},end:{line:4,column:55170}},type:"binary-expr",locations:[{start:{line:4,column:55139},end:{line:4,column:55161}},{start:{line:4,column:55163},end:{line:4,column:55170}}],line:4},"1116":{loc:{start:{line:4,column:55171},end:{line:4,column:55211}},type:"binary-expr",locations:[{start:{line:4,column:55171},end:{line:4,column:55190}},{start:{line:4,column:55192},end:{line:4,column:55211}}],line:4},"1117":{loc:{start:{line:4,column:55231},end:{line:4,column:55248}},type:"binary-expr",locations:[{start:{line:4,column:55231},end:{line:4,column:55239}},{start:{line:4,column:55241},end:{line:4,column:55248}}],line:4},"1118":{loc:{start:{line:4,column:55264},end:{line:4,column:55330}},type:"binary-expr",locations:[{start:{line:4,column:55264},end:{line:4,column:55281}},{start:{line:4,column:55284},end:{line:4,column:55329}}],line:4},"1119":{loc:{start:{line:4,column:55466},end:{line:4,column:55483}},type:"cond-expr",locations:[{start:{line:4,column:55476},end:{line:4,column:55480}},{start:{line:4,column:55481},end:{line:4,column:55483}}],line:4},"1120":{loc:{start:{line:4,column:55514},end:{line:4,column:55531}},type:"binary-expr",locations:[{start:{line:4,column:55514},end:{line:4,column:55525}},{start:{line:4,column:55527},end:{line:4,column:55531}}],line:4},"1121":{loc:{start:{line:4,column:55532},end:{line:4,column:55561}},type:"binary-expr",locations:[{start:{line:4,column:55532},end:{line:4,column:55555}},{start:{line:4,column:55557},end:{line:4,column:55561}}],line:4},"1122":{loc:{start:{line:4,column:55562},end:{line:4,column:55585}},type:"binary-expr",locations:[{start:{line:4,column:55562},end:{line:4,column:55579}},{start:{line:4,column:55581},end:{line:4,column:55585}}],line:4},"1123":{loc:{start:{line:4,column:55627},end:{line:4,column:55668}},type:"binary-expr",locations:[{start:{line:4,column:55627},end:{line:4,column:55635}},{start:{line:4,column:55638},end:{line:4,column:55667}}],line:4},"1124":{loc:{start:{line:4,column:55718},end:{line:4,column:55748}},type:"binary-expr",locations:[{start:{line:4,column:55718},end:{line:4,column:55720}},{start:{line:4,column:55722},end:{line:4,column:55741}},{start:{line:4,column:55743},end:{line:4,column:55748}}],line:4},"1125":{loc:{start:{line:4,column:55769},end:{line:4,column:55773}},type:"default-arg",locations:[{start:{line:4,column:55771},end:{line:4,column:55773}}],line:4},"1126":{loc:{start:{line:4,column:55791},end:{line:4,column:55845}},type:"if",locations:[{start:{line:4,column:55791},end:{line:4,column:55845}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1127":{loc:{start:{line:4,column:55810},end:{line:4,column:55835}},type:"cond-expr",locations:[{start:{line:4,column:55812},end:{line:4,column:55828}},{start:{line:4,column:55829},end:{line:4,column:55835}}],line:4},"1128":{loc:{start:{line:4,column:55862},end:{line:4,column:55885}},type:"binary-expr",locations:[{start:{line:4,column:55862},end:{line:4,column:55870}},{start:{line:4,column:55872},end:{line:4,column:55885}}],line:4},"1129":{loc:{start:{line:4,column:55886},end:{line:4,column:55900}},type:"binary-expr",locations:[{start:{line:4,column:55886},end:{line:4,column:55891}},{start:{line:4,column:55893},end:{line:4,column:55900}}],line:4},"1130":{loc:{start:{line:4,column:55914},end:{line:4,column:56091}},type:"if",locations:[{start:{line:4,column:55914},end:{line:4,column:56091}},{start:{line:4,column:55944},end:{line:4,column:56091}}],line:4},"1131":{loc:{start:{line:4,column:55944},end:{line:4,column:56091}},type:"if",locations:[{start:{line:4,column:55944},end:{line:4,column:56091}},{start:{line:4,column:55996},end:{line:4,column:56091}}],line:4},"1132":{loc:{start:{line:4,column:55996},end:{line:4,column:56091}},type:"if",locations:[{start:{line:4,column:55996},end:{line:4,column:56091}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1133":{loc:{start:{line:4,column:56019},end:{line:4,column:56090}},type:"if",locations:[{start:{line:4,column:56019},end:{line:4,column:56090}},{start:{line:4,column:56056},end:{line:4,column:56090}}],line:4},"1134":{loc:{start:{line:4,column:56093},end:{line:4,column:56118}},type:"cond-expr",locations:[{start:{line:4,column:56095},end:{line:4,column:56111}},{start:{line:4,column:56112},end:{line:4,column:56118}}],line:4},"1135":{loc:{start:{line:4,column:56202},end:{line:4,column:56226}},type:"binary-expr",locations:[{start:{line:4,column:56202},end:{line:4,column:56210}},{start:{line:4,column:56212},end:{line:4,column:56226}}],line:4},"1136":{loc:{start:{line:4,column:56227},end:{line:4,column:56255}},type:"binary-expr",locations:[{start:{line:4,column:56227},end:{line:4,column:56240}},{start:{line:4,column:56242},end:{line:4,column:56255}}],line:4},"1137":{loc:{start:{line:4,column:56271},end:{line:4,column:56344}},type:"if",locations:[{start:{line:4,column:56271},end:{line:4,column:56344}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1138":{loc:{start:{line:4,column:56377},end:{line:4,column:56389}},type:"binary-expr",locations:[{start:{line:4,column:56377},end:{line:4,column:56382}},{start:{line:4,column:56384},end:{line:4,column:56389}}],line:4},"1139":{loc:{start:{line:4,column:56411},end:{line:4,column:56438}},type:"binary-expr",locations:[{start:{line:4,column:56411},end:{line:4,column:56419}},{start:{line:4,column:56421},end:{line:4,column:56438}}],line:4},"1140":{loc:{start:{line:4,column:56473},end:{line:4,column:56515}},type:"binary-expr",locations:[{start:{line:4,column:56473},end:{line:4,column:56488}},{start:{line:4,column:56491},end:{line:4,column:56514}}],line:4},"1141":{loc:{start:{line:4,column:56679},end:{line:4,column:56703}},type:"binary-expr",locations:[{start:{line:4,column:56679},end:{line:4,column:56684}},{start:{line:4,column:56686},end:{line:4,column:56703}}],line:4},"1142":{loc:{start:{line:4,column:56829},end:{line:4,column:56841}},type:"binary-expr",locations:[{start:{line:4,column:56829},end:{line:4,column:56830}},{start:{line:4,column:56832},end:{line:4,column:56841}}],line:4},"1143":{loc:{start:{line:4,column:56851},end:{line:4,column:56859}},type:"binary-expr",locations:[{start:{line:4,column:56851},end:{line:4,column:56852}},{start:{line:4,column:56854},end:{line:4,column:56859}}],line:4},"1144":{loc:{start:{line:4,column:56955},end:{line:4,column:56978}},type:"if",locations:[{start:{line:4,column:56955},end:{line:4,column:56978}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1145":{loc:{start:{line:4,column:57024},end:{line:4,column:57108}},type:"binary-expr",locations:[{start:{line:4,column:57024},end:{line:4,column:57031}},{start:{line:4,column:57034},end:{line:4,column:57107}}],line:4},"1146":{loc:{start:{line:4,column:57039},end:{line:4,column:57107}},type:"cond-expr",locations:[{start:{line:4,column:57076},end:{line:4,column:57083}},{start:{line:4,column:57084},end:{line:4,column:57107}}],line:4},"1147":{loc:{start:{line:4,column:57039},end:{line:4,column:57075}},type:"binary-expr",locations:[{start:{line:4,column:57039},end:{line:4,column:57052}},{start:{line:4,column:57054},end:{line:4,column:57075}}],line:4},"1148":{loc:{start:{line:4,column:57111},end:{line:4,column:57127}},type:"binary-expr",locations:[{start:{line:4,column:57111},end:{line:4,column:57112}},{start:{line:4,column:57114},end:{line:4,column:57127}}],line:4},"1149":{loc:{start:{line:4,column:57154},end:{line:4,column:57157}},type:"default-arg",locations:[{start:{line:4,column:57156},end:{line:4,column:57157}}],line:4},"1150":{loc:{start:{line:4,column:57192},end:{line:4,column:57206}},type:"binary-expr",locations:[{start:{line:4,column:57192},end:{line:4,column:57193}},{start:{line:4,column:57195},end:{line:4,column:57206}}],line:4},"1151":{loc:{start:{line:4,column:57227},end:{line:4,column:57239}},type:"binary-expr",locations:[{start:{line:4,column:57227},end:{line:4,column:57228}},{start:{line:4,column:57230},end:{line:4,column:57239}}],line:4},"1152":{loc:{start:{line:4,column:57309},end:{line:4,column:57339}},type:"if",locations:[{start:{line:4,column:57309},end:{line:4,column:57339}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1153":{loc:{start:{line:4,column:57388},end:{line:4,column:57404}},type:"if",locations:[{start:{line:4,column:57388},end:{line:4,column:57404}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1154":{loc:{start:{line:4,column:57454},end:{line:4,column:57547}},type:"binary-expr",locations:[{start:{line:4,column:57454},end:{line:4,column:57455}},{start:{line:4,column:57458},end:{line:4,column:57546}}],line:4},"1155":{loc:{start:{line:4,column:57458},end:{line:4,column:57546}},type:"cond-expr",locations:[{start:{line:4,column:57465},end:{line:4,column:57480}},{start:{line:4,column:57482},end:{line:4,column:57546}}],line:4},"1156":{loc:{start:{line:4,column:57482},end:{line:4,column:57546}},type:"cond-expr",locations:[{start:{line:4,column:57495},end:{line:4,column:57515}},{start:{line:4,column:57517},end:{line:4,column:57546}}],line:4},"1157":{loc:{start:{line:4,column:57517},end:{line:4,column:57546}},type:"binary-expr",locations:[{start:{line:4,column:57517},end:{line:4,column:57522}},{start:{line:4,column:57525},end:{line:4,column:57545}}],line:4},"1158":{loc:{start:{line:4,column:57582},end:{line:4,column:57605}},type:"binary-expr",locations:[{start:{line:4,column:57582},end:{line:4,column:57590}},{start:{line:4,column:57592},end:{line:4,column:57605}}],line:4},"1159":{loc:{start:{line:4,column:57622},end:{line:4,column:57744}},type:"if",locations:[{start:{line:4,column:57622},end:{line:4,column:57744}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1160":{loc:{start:{line:4,column:57628},end:{line:4,column:57744}},type:"if",locations:[{start:{line:4,column:57628},end:{line:4,column:57744}},{start:{line:4,column:57688},end:{line:4,column:57744}}],line:4},"1161":{loc:{start:{line:4,column:57661},end:{line:4,column:57683}},type:"binary-expr",locations:[{start:{line:4,column:57661},end:{line:4,column:57669}},{start:{line:4,column:57671},end:{line:4,column:57683}}],line:4},"1162":{loc:{start:{line:4,column:57711},end:{line:4,column:57735}},type:"binary-expr",locations:[{start:{line:4,column:57711},end:{line:4,column:57719}},{start:{line:4,column:57721},end:{line:4,column:57735}}],line:4},"1163":{loc:{start:{line:4,column:57744},end:{line:4,column:57910}},type:"if",locations:[{start:{line:4,column:57744},end:{line:4,column:57910}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1164":{loc:{start:{line:4,column:57747},end:{line:4,column:57755}},type:"binary-expr",locations:[{start:{line:4,column:57747},end:{line:4,column:57748}},{start:{line:4,column:57750},end:{line:4,column:57755}}],line:4},"1165":{loc:{start:{line:4,column:57770},end:{line:4,column:57802}},type:"binary-expr",locations:[{start:{line:4,column:57770},end:{line:4,column:57793}},{start:{line:4,column:57795},end:{line:4,column:57802}}],line:4},"1166":{loc:{start:{line:4,column:57806},end:{line:4,column:57910}},type:"if",locations:[{start:{line:4,column:57806},end:{line:4,column:57910}},{start:{line:4,column:57860},end:{line:4,column:57910}}],line:4},"1167":{loc:{start:{line:4,column:57838},end:{line:4,column:57855}},type:"binary-expr",locations:[{start:{line:4,column:57838},end:{line:4,column:57846}},{start:{line:4,column:57848},end:{line:4,column:57855}}],line:4},"1168":{loc:{start:{line:4,column:57882},end:{line:4,column:57901}},type:"binary-expr",locations:[{start:{line:4,column:57882},end:{line:4,column:57890}},{start:{line:4,column:57892},end:{line:4,column:57901}}],line:4},"1169":{loc:{start:{line:4,column:57937},end:{line:4,column:57956}},type:"binary-expr",locations:[{start:{line:4,column:57937},end:{line:4,column:57945}},{start:{line:4,column:57947},end:{line:4,column:57956}}],line:4},"1170":{loc:{start:{line:4,column:57975},end:{line:4,column:58099}},type:"if",locations:[{start:{line:4,column:57975},end:{line:4,column:58099}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1171":{loc:{start:{line:4,column:57978},end:{line:4,column:57997}},type:"binary-expr",locations:[{start:{line:4,column:57978},end:{line:4,column:57986}},{start:{line:4,column:57988},end:{line:4,column:57997}}],line:4},"1172":{loc:{start:{line:4,column:58001},end:{line:4,column:58099}},type:"if",locations:[{start:{line:4,column:58001},end:{line:4,column:58099}},{start:{line:4,column:58052},end:{line:4,column:58099}}],line:4},"1173":{loc:{start:{line:4,column:58030},end:{line:4,column:58047}},type:"binary-expr",locations:[{start:{line:4,column:58030},end:{line:4,column:58038}},{start:{line:4,column:58040},end:{line:4,column:58047}}],line:4},"1174":{loc:{start:{line:4,column:58071},end:{line:4,column:58090}},type:"binary-expr",locations:[{start:{line:4,column:58071},end:{line:4,column:58079}},{start:{line:4,column:58081},end:{line:4,column:58090}}],line:4},"1175":{loc:{start:{line:4,column:58099},end:{line:4,column:58190}},type:"if",locations:[{start:{line:4,column:58099},end:{line:4,column:58190}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1176":{loc:{start:{line:4,column:58102},end:{line:4,column:58148}},type:"binary-expr",locations:[{start:{line:4,column:58102},end:{line:4,column:58124}},{start:{line:4,column:58127},end:{line:4,column:58147}}],line:4},"1177":{loc:{start:{line:4,column:58190},end:{line:4,column:58210}},type:"binary-expr",locations:[{start:{line:4,column:58190},end:{line:4,column:58191}},{start:{line:4,column:58194},end:{line:4,column:58209}}],line:4},"1178":{loc:{start:{line:4,column:58226},end:{line:4,column:58234}},type:"binary-expr",locations:[{start:{line:4,column:58226},end:{line:4,column:58227}},{start:{line:4,column:58229},end:{line:4,column:58234}}],line:4},"1179":{loc:{start:{line:4,column:58245},end:{line:4,column:58273}},type:"binary-expr",locations:[{start:{line:4,column:58245},end:{line:4,column:58253}},{start:{line:4,column:58256},end:{line:4,column:58272}}],line:4},"1180":{loc:{start:{line:4,column:58264},end:{line:4,column:58272}},type:"binary-expr",locations:[{start:{line:4,column:58264},end:{line:4,column:58265}},{start:{line:4,column:58267},end:{line:4,column:58272}}],line:4},"1181":{loc:{start:{line:4,column:58427},end:{line:4,column:58449}},type:"if",locations:[{start:{line:4,column:58427},end:{line:4,column:58449}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1182":{loc:{start:{line:4,column:58622},end:{line:4,column:58636}},type:"binary-expr",locations:[{start:{line:4,column:58622},end:{line:4,column:58627}},{start:{line:4,column:58629},end:{line:4,column:58636}}],line:4},"1183":{loc:{start:{line:4,column:58685},end:{line:4,column:58696}},type:"binary-expr",locations:[{start:{line:4,column:58685},end:{line:4,column:58690}},{start:{line:4,column:58692},end:{line:4,column:58696}}],line:4},"1184":{loc:{start:{line:4,column:58698},end:{line:4,column:58928}},type:"if",locations:[{start:{line:4,column:58698},end:{line:4,column:58928}},{start:{line:4,column:58826},end:{line:4,column:58928}}],line:4},"1185":{loc:{start:{line:4,column:58708},end:{line:4,column:58719}},type:"binary-expr",locations:[{start:{line:4,column:58708},end:{line:4,column:58712}},{start:{line:4,column:58714},end:{line:4,column:58719}}],line:4},"1186":{loc:{start:{line:4,column:58743},end:{line:4,column:58758}},type:"binary-expr",locations:[{start:{line:4,column:58743},end:{line:4,column:58751}},{start:{line:4,column:58753},end:{line:4,column:58758}}],line:4},"1187":{loc:{start:{line:4,column:58767},end:{line:4,column:58782}},type:"binary-expr",locations:[{start:{line:4,column:58767},end:{line:4,column:58768}},{start:{line:4,column:58771},end:{line:4,column:58781}}],line:4},"1188":{loc:{start:{line:4,column:58826},end:{line:4,column:58928}},type:"if",locations:[{start:{line:4,column:58826},end:{line:4,column:58928}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1189":{loc:{start:{line:4,column:58888},end:{line:4,column:58907}},type:"binary-expr",locations:[{start:{line:4,column:58888},end:{line:4,column:58896}},{start:{line:4,column:58898},end:{line:4,column:58907}}],line:4},"1190":{loc:{start:{line:4,column:59032},end:{line:4,column:59248}},type:"if",locations:[{start:{line:4,column:59032},end:{line:4,column:59248}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1191":{loc:{start:{line:4,column:59087},end:{line:4,column:59231}},type:"if",locations:[{start:{line:4,column:59087},end:{line:4,column:59231}},{start:{line:4,column:59105},end:{line:4,column:59231}}],line:4},"1192":{loc:{start:{line:4,column:59272},end:{line:4,column:59284}},type:"cond-expr",locations:[{start:{line:4,column:59277},end:{line:4,column:59279}},{start:{line:4,column:59280},end:{line:4,column:59284}}],line:4},"1193":{loc:{start:{line:4,column:59355},end:{line:4,column:59377}},type:"if",locations:[{start:{line:4,column:59355},end:{line:4,column:59377}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1194":{loc:{start:{line:4,column:59358},end:{line:4,column:59367}},type:"binary-expr",locations:[{start:{line:4,column:59358},end:{line:4,column:59363}},{start:{line:4,column:59365},end:{line:4,column:59367}}],line:4},"1195":{loc:{start:{line:4,column:59482},end:{line:4,column:59507}},type:"if",locations:[{start:{line:4,column:59482},end:{line:4,column:59507}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1196":{loc:{start:{line:4,column:59526},end:{line:4,column:59530}},type:"default-arg",locations:[{start:{line:4,column:59528},end:{line:4,column:59530}}],line:4},"1197":{loc:{start:{line:4,column:59543},end:{line:4,column:59633}},type:"if",locations:[{start:{line:4,column:59543},end:{line:4,column:59633}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1198":{loc:{start:{line:4,column:59604},end:{line:4,column:59632}},type:"binary-expr",locations:[{start:{line:4,column:59604},end:{line:4,column:59612}},{start:{line:4,column:59614},end:{line:4,column:59632}}],line:4},"1199":{loc:{start:{line:4,column:59645},end:{line:4,column:59695}},type:"binary-expr",locations:[{start:{line:4,column:59645},end:{line:4,column:59653}},{start:{line:4,column:59655},end:{line:4,column:59674}},{start:{line:4,column:59677},end:{line:4,column:59694}}],line:4},"1200":{loc:{start:{line:4,column:59734},end:{line:4,column:59756}},type:"binary-expr",locations:[{start:{line:4,column:59734},end:{line:4,column:59744}},{start:{line:4,column:59746},end:{line:4,column:59756}}],line:4},"1201":{loc:{start:{line:4,column:59776},end:{line:4,column:59798}},type:"if",locations:[{start:{line:4,column:59776},end:{line:4,column:59798}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1202":{loc:{start:{line:4,column:59815},end:{line:4,column:59982}},type:"if",locations:[{start:{line:4,column:59815},end:{line:4,column:59982}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1203":{loc:{start:{line:4,column:59833},end:{line:4,column:59857}},type:"binary-expr",locations:[{start:{line:4,column:59833},end:{line:4,column:59841}},{start:{line:4,column:59843},end:{line:4,column:59848}},{start:{line:4,column:59850},end:{line:4,column:59857}}],line:4},"1204":{loc:{start:{line:4,column:59858},end:{line:4,column:59881}},type:"binary-expr",locations:[{start:{line:4,column:59858},end:{line:4,column:59861}},{start:{line:4,column:59864},end:{line:4,column:59880}}],line:4},"1205":{loc:{start:{line:4,column:59921},end:{line:4,column:59949}},type:"binary-expr",locations:[{start:{line:4,column:59921},end:{line:4,column:59929}},{start:{line:4,column:59931},end:{line:4,column:59949}}],line:4},"1206":{loc:{start:{line:4,column:60033},end:{line:4,column:60052}},type:"binary-expr",locations:[{start:{line:4,column:60033},end:{line:4,column:60036}},{start:{line:4,column:60039},end:{line:4,column:60051}}],line:4},"1207":{loc:{start:{line:4,column:60053},end:{line:4,column:60106}},type:"cond-expr",locations:[{start:{line:4,column:60060},end:{line:4,column:60082}},{start:{line:4,column:60085},end:{line:4,column:60105}}],line:4},"1208":{loc:{start:{line:4,column:60126},end:{line:4,column:60150}},type:"binary-expr",locations:[{start:{line:4,column:60126},end:{line:4,column:60134}},{start:{line:4,column:60136},end:{line:4,column:60141}},{start:{line:4,column:60143},end:{line:4,column:60150}}],line:4},"1209":{loc:{start:{line:4,column:60163},end:{line:4,column:60188}},type:"binary-expr",locations:[{start:{line:4,column:60163},end:{line:4,column:60171}},{start:{line:4,column:60173},end:{line:4,column:60188}}],line:4},"1210":{loc:{start:{line:4,column:60241},end:{line:4,column:60297}},type:"if",locations:[{start:{line:4,column:60241},end:{line:4,column:60297}},{start:{line:4,column:60262},end:{line:4,column:60297}}],line:4},"1211":{loc:{start:{line:4,column:60277},end:{line:4,column:60296}},type:"binary-expr",locations:[{start:{line:4,column:60277},end:{line:4,column:60285}},{start:{line:4,column:60288},end:{line:4,column:60295}}],line:4},"1212":{loc:{start:{line:4,column:60297},end:{line:4,column:60325}},type:"cond-expr",locations:[{start:{line:4,column:60306},end:{line:4,column:60315}},{start:{line:4,column:60316},end:{line:4,column:60325}}],line:4},"1213":{loc:{start:{line:4,column:60665},end:{line:4,column:60873}},type:"if",locations:[{start:{line:4,column:60665},end:{line:4,column:60873}},{start:{line:4,column:60716},end:{line:4,column:60873}}],line:4},"1214":{loc:{start:{line:4,column:60716},end:{line:4,column:60873}},type:"if",locations:[{start:{line:4,column:60716},end:{line:4,column:60873}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1215":{loc:{start:{line:4,column:60771},end:{line:4,column:60840}},type:"if",locations:[{start:{line:4,column:60771},end:{line:4,column:60840}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1216":{loc:{start:{line:4,column:60795},end:{line:4,column:60815}},type:"cond-expr",locations:[{start:{line:4,column:60797},end:{line:4,column:60812}},{start:{line:4,column:60813},end:{line:4,column:60815}}],line:4},"1217":{loc:{start:{line:4,column:60816},end:{line:4,column:60839}},type:"binary-expr",locations:[{start:{line:4,column:60816},end:{line:4,column:60820}},{start:{line:4,column:60823},end:{line:4,column:60838}}],line:4},"1218":{loc:{start:{line:4,column:60953},end:{line:4,column:60990}},type:"binary-expr",locations:[{start:{line:4,column:60953},end:{line:4,column:60977}},{start:{line:4,column:60979},end:{line:4,column:60990}}],line:4},"1219":{loc:{start:{line:4,column:61169},end:{line:4,column:61205}},type:"if",locations:[{start:{line:4,column:61169},end:{line:4,column:61205}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1220":{loc:{start:{line:4,column:61315},end:{line:4,column:61346}},type:"binary-expr",locations:[{start:{line:4,column:61315},end:{line:4,column:61323}},{start:{line:4,column:61325},end:{line:4,column:61327}},{start:{line:4,column:61329},end:{line:4,column:61346}}],line:4},"1221":{loc:{start:{line:4,column:61396},end:{line:4,column:61449}},type:"if",locations:[{start:{line:4,column:61396},end:{line:4,column:61449}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1222":{loc:{start:{line:4,column:61504},end:{line:4,column:61535}},type:"binary-expr",locations:[{start:{line:4,column:61504},end:{line:4,column:61512}},{start:{line:4,column:61514},end:{line:4,column:61516}},{start:{line:4,column:61518},end:{line:4,column:61535}}],line:4},"1223":{loc:{start:{line:4,column:61766},end:{line:4,column:61812}},type:"binary-expr",locations:[{start:{line:4,column:61766},end:{line:4,column:61806}},{start:{line:4,column:61808},end:{line:4,column:61812}}],line:4},"1224":{loc:{start:{line:4,column:62100},end:{line:4,column:62133}},type:"cond-expr",locations:[{start:{line:4,column:62109},end:{line:4,column:62128}},{start:{line:4,column:62129},end:{line:4,column:62133}}],line:4},"1225":{loc:{start:{line:4,column:62173},end:{line:4,column:62324}},type:"if",locations:[{start:{line:4,column:62173},end:{line:4,column:62324}},{start:{line:4,column:62226},end:{line:4,column:62324}}],line:4},"1226":{loc:{start:{line:4,column:62201},end:{line:4,column:62220}},type:"binary-expr",locations:[{start:{line:4,column:62201},end:{line:4,column:62205}},{start:{line:4,column:62208},end:{line:4,column:62219}}],line:4},"1227":{loc:{start:{line:4,column:62226},end:{line:4,column:62324}},type:"if",locations:[{start:{line:4,column:62226},end:{line:4,column:62324}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1228":{loc:{start:{line:4,column:62296},end:{line:4,column:62323}},type:"cond-expr",locations:[{start:{line:4,column:62305},end:{line:4,column:62307}},{start:{line:4,column:62308},end:{line:4,column:62323}}],line:4},"1229":{loc:{start:{line:4,column:62385},end:{line:4,column:62400}},type:"cond-expr",locations:[{start:{line:4,column:62387},end:{line:4,column:62388}},{start:{line:4,column:62389},end:{line:4,column:62400}}],line:4},"1230":{loc:{start:{line:4,column:62389},end:{line:4,column:62400}},type:"binary-expr",locations:[{start:{line:4,column:62389},end:{line:4,column:62390}},{start:{line:4,column:62392},end:{line:4,column:62400}}],line:4},"1231":{loc:{start:{line:4,column:62471},end:{line:4,column:62508}},type:"binary-expr",locations:[{start:{line:4,column:62471},end:{line:4,column:62490}},{start:{line:4,column:62493},end:{line:4,column:62507}}],line:4},"1232":{loc:{start:{line:4,column:62509},end:{line:4,column:62601}},type:"binary-expr",locations:[{start:{line:4,column:62509},end:{line:4,column:62517}},{start:{line:4,column:62520},end:{line:4,column:62600}}],line:4},"1233":{loc:{start:{line:4,column:62520},end:{line:4,column:62600}},type:"cond-expr",locations:[{start:{line:4,column:62522},end:{line:4,column:62565}},{start:{line:4,column:62566},end:{line:4,column:62600}}],line:4},"1234":{loc:{start:{line:4,column:62522},end:{line:4,column:62565}},type:"binary-expr",locations:[{start:{line:4,column:62522},end:{line:4,column:62535}},{start:{line:4,column:62537},end:{line:4,column:62552}},{start:{line:4,column:62555},end:{line:4,column:62564}}],line:4},"1235":{loc:{start:{line:4,column:62566},end:{line:4,column:62600}},type:"binary-expr",locations:[{start:{line:4,column:62566},end:{line:4,column:62579}},{start:{line:4,column:62582},end:{line:4,column:62599}}],line:4},"1236":{loc:{start:{line:4,column:62633},end:{line:4,column:62653}},type:"cond-expr",locations:[{start:{line:4,column:62635},end:{line:4,column:62650}},{start:{line:4,column:62651},end:{line:4,column:62653}}],line:4},"1237":{loc:{start:{line:4,column:62665},end:{line:4,column:62679}},type:"binary-expr",locations:[{start:{line:4,column:62665},end:{line:4,column:62669}},{start:{line:4,column:62672},end:{line:4,column:62678}}],line:4},"1238":{loc:{start:{line:4,column:63331},end:{line:4,column:63340}},type:"binary-expr",locations:[{start:{line:4,column:63331},end:{line:4,column:63336}},{start:{line:4,column:63338},end:{line:4,column:63340}}],line:4},"1239":{loc:{start:{line:4,column:63371},end:{line:4,column:63408}},type:"cond-expr",locations:[{start:{line:4,column:63391},end:{line:4,column:63400}},{start:{line:4,column:63401},end:{line:4,column:63408}}],line:4},"1240":{loc:{start:{line:4,column:63457},end:{line:4,column:63531}},type:"if",locations:[{start:{line:4,column:63457},end:{line:4,column:63531}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1241":{loc:{start:{line:4,column:63886},end:{line:4,column:63895}},type:"cond-expr",locations:[{start:{line:4,column:63892},end:{line:4,column:63893}},{start:{line:4,column:63894},end:{line:4,column:63895}}],line:4},"1242":{loc:{start:{line:4,column:64148},end:{line:4,column:64195}},type:"cond-expr",locations:[{start:{line:4,column:64163},end:{line:4,column:64164}},{start:{line:4,column:64165},end:{line:4,column:64195}}],line:4},"1243":{loc:{start:{line:4,column:64148},end:{line:4,column:64162}},type:"binary-expr",locations:[{start:{line:4,column:64148},end:{line:4,column:64154}},{start:{line:4,column:64156},end:{line:4,column:64162}}],line:4},"1244":{loc:{start:{line:4,column:64223},end:{line:4,column:64238}},type:"cond-expr",locations:[{start:{line:4,column:64225},end:{line:4,column:64233}},{start:{line:4,column:64234},end:{line:4,column:64238}}],line:4},"1245":{loc:{start:{line:4,column:64241},end:{line:4,column:64257}},type:"cond-expr",locations:[{start:{line:4,column:64243},end:{line:4,column:64252}},{start:{line:4,column:64253},end:{line:4,column:64257}}],line:4},"1246":{loc:{start:{line:4,column:64262},end:{line:4,column:64415}},type:"if",locations:[{start:{line:4,column:64262},end:{line:4,column:64415}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1247":{loc:{start:{line:4,column:64313},end:{line:4,column:64414}},type:"if",locations:[{start:{line:4,column:64313},end:{line:4,column:64414}},{start:{line:4,column:64344},end:{line:4,column:64414}}],line:4},"1248":{loc:{start:{line:4,column:64344},end:{line:4,column:64414}},type:"if",locations:[{start:{line:4,column:64344},end:{line:4,column:64414}},{start:{line:4,column:64367},end:{line:4,column:64414}}],line:4},"1249":{loc:{start:{line:4,column:64367},end:{line:4,column:64414}},type:"if",locations:[{start:{line:4,column:64367},end:{line:4,column:64414}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1250":{loc:{start:{line:4,column:64415},end:{line:4,column:64449}},type:"cond-expr",locations:[{start:{line:4,column:64417},end:{line:4,column:64427}},{start:{line:4,column:64428},end:{line:4,column:64449}}],line:4},"1251":{loc:{start:{line:4,column:64450},end:{line:4,column:64486}},type:"cond-expr",locations:[{start:{line:4,column:64452},end:{line:4,column:64463}},{start:{line:4,column:64464},end:{line:4,column:64486}}],line:4},"1252":{loc:{start:{line:4,column:64501},end:{line:4,column:64504}},type:"default-arg",locations:[{start:{line:4,column:64503},end:{line:4,column:64504}}],line:4},"1253":{loc:{start:{line:4,column:64516},end:{line:4,column:64543}},type:"if",locations:[{start:{line:4,column:64516},end:{line:4,column:64543}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1254":{loc:{start:{line:4,column:64653},end:{line:4,column:64674}},type:"cond-expr",locations:[{start:{line:4,column:64662},end:{line:4,column:64666}},{start:{line:4,column:64667},end:{line:4,column:64674}}],line:4},"1255":{loc:{start:{line:4,column:64684},end:{line:4,column:64828}},type:"if",locations:[{start:{line:4,column:64684},end:{line:4,column:64828}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1256":{loc:{start:{line:4,column:64734},end:{line:4,column:64810}},type:"if",locations:[{start:{line:4,column:64734},end:{line:4,column:64810}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1257":{loc:{start:{line:4,column:64828},end:{line:4,column:64857}},type:"binary-expr",locations:[{start:{line:4,column:64828},end:{line:4,column:64836}},{start:{line:4,column:64838},end:{line:4,column:64846}},{start:{line:4,column:64848},end:{line:4,column:64857}}],line:4},"1258":{loc:{start:{line:4,column:64944},end:{line:4,column:64976}},type:"if",locations:[{start:{line:4,column:64944},end:{line:4,column:64976}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1259":{loc:{start:{line:4,column:65146},end:{line:4,column:65178}},type:"binary-expr",locations:[{start:{line:4,column:65146},end:{line:4,column:65154}},{start:{line:4,column:65156},end:{line:4,column:65161}},{start:{line:4,column:65164},end:{line:4,column:65177}}],line:4},"1260":{loc:{start:{line:4,column:65222},end:{line:4,column:65274}},type:"binary-expr",locations:[{start:{line:4,column:65222},end:{line:4,column:65246}},{start:{line:4,column:65248},end:{line:4,column:65274}}],line:4},"1261":{loc:{start:{line:4,column:65307},end:{line:4,column:65350}},type:"binary-expr",locations:[{start:{line:4,column:65307},end:{line:4,column:65326}},{start:{line:4,column:65328},end:{line:4,column:65350}}],line:4},"1262":{loc:{start:{line:4,column:65382},end:{line:4,column:65415}},type:"binary-expr",locations:[{start:{line:4,column:65382},end:{line:4,column:65385}},{start:{line:4,column:65388},end:{line:4,column:65414}}],line:4},"1263":{loc:{start:{line:4,column:65448},end:{line:4,column:65690}},type:"if",locations:[{start:{line:4,column:65448},end:{line:4,column:65690}},{start:{line:4,column:65634},end:{line:4,column:65690}}],line:4},"1264":{loc:{start:{line:4,column:65519},end:{line:4,column:65537}},type:"binary-expr",locations:[{start:{line:4,column:65519},end:{line:4,column:65527}},{start:{line:4,column:65529},end:{line:4,column:65537}}],line:4},"1265":{loc:{start:{line:4,column:65634},end:{line:4,column:65689}},type:"binary-expr",locations:[{start:{line:4,column:65635},end:{line:4,column:65643}},{start:{line:4,column:65645},end:{line:4,column:65654}},{start:{line:4,column:65657},end:{line:4,column:65689}}],line:4},"1266":{loc:{start:{line:4,column:65690},end:{line:4,column:65727}},type:"binary-expr",locations:[{start:{line:4,column:65690},end:{line:4,column:65713}},{start:{line:4,column:65716},end:{line:4,column:65726}}],line:4},"1267":{loc:{start:{line:4,column:65728},end:{line:4,column:65802}},type:"binary-expr",locations:[{start:{line:4,column:65729},end:{line:4,column:65750}},{start:{line:4,column:65752},end:{line:4,column:65770}},{start:{line:4,column:65772},end:{line:4,column:65786}},{start:{line:4,column:65790},end:{line:4,column:65801}}],line:4},"1268":{loc:{start:{line:4,column:65826},end:{line:4,column:65915}},type:"binary-expr",locations:[{start:{line:4,column:65826},end:{line:4,column:65828}},{start:{line:4,column:65831},end:{line:4,column:65844}},{start:{line:4,column:65846},end:{line:4,column:65856}},{start:{line:4,column:65858},end:{line:4,column:65869}},{start:{line:4,column:65873},end:{line:4,column:65914}}],line:4},"1269":{loc:{start:{line:4,column:65916},end:{line:4,column:65998}},type:"binary-expr",locations:[{start:{line:4,column:65916},end:{line:4,column:65918}},{start:{line:4,column:65921},end:{line:4,column:65934}},{start:{line:4,column:65936},end:{line:4,column:65947}},{start:{line:4,column:65951},end:{line:4,column:65997}}],line:4},"1270":{loc:{start:{line:4,column:66097},end:{line:4,column:66210}},type:"if",locations:[{start:{line:4,column:66097},end:{line:4,column:66210}},{start:{line:4,column:66159},end:{line:4,column:66210}}],line:4},"1271":{loc:{start:{line:4,column:66100},end:{line:4,column:66119}},type:"binary-expr",locations:[{start:{line:4,column:66100},end:{line:4,column:66108}},{start:{line:4,column:66110},end:{line:4,column:66119}}],line:4},"1272":{loc:{start:{line:4,column:66239},end:{line:4,column:66263}},type:"cond-expr",locations:[{start:{line:4,column:66245},end:{line:4,column:66253}},{start:{line:4,column:66254},end:{line:4,column:66263}}],line:4},"1273":{loc:{start:{line:4,column:66279},end:{line:4,column:66379}},type:"if",locations:[{start:{line:4,column:66279},end:{line:4,column:66379}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1274":{loc:{start:{line:4,column:66309},end:{line:4,column:66347}},type:"cond-expr",locations:[{start:{line:4,column:66315},end:{line:4,column:66330}},{start:{line:4,column:66331},end:{line:4,column:66347}}],line:4},"1275":{loc:{start:{line:4,column:66407},end:{line:4,column:66431}},type:"cond-expr",locations:[{start:{line:4,column:66413},end:{line:4,column:66421}},{start:{line:4,column:66422},end:{line:4,column:66431}}],line:4},"1276":{loc:{start:{line:4,column:66447},end:{line:4,column:66582}},type:"if",locations:[{start:{line:4,column:66447},end:{line:4,column:66582}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1277":{loc:{start:{line:4,column:66484},end:{line:4,column:66548}},type:"cond-expr",locations:[{start:{line:4,column:66490},end:{line:4,column:66518}},{start:{line:4,column:66519},end:{line:4,column:66548}}],line:4},"1278":{loc:{start:{line:4,column:66600},end:{line:4,column:66649}},type:"cond-expr",locations:[{start:{line:4,column:66612},end:{line:4,column:66622}},{start:{line:4,column:66623},end:{line:4,column:66649}}],line:4},"1279":{loc:{start:{line:4,column:66623},end:{line:4,column:66649}},type:"binary-expr",locations:[{start:{line:4,column:66623},end:{line:4,column:66634}},{start:{line:4,column:66637},end:{line:4,column:66648}}],line:4},"1280":{loc:{start:{line:4,column:66715},end:{line:4,column:66817}},type:"if",locations:[{start:{line:4,column:66715},end:{line:4,column:66817}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1281":{loc:{start:{line:4,column:66718},end:{line:4,column:66760}},type:"binary-expr",locations:[{start:{line:4,column:66718},end:{line:4,column:66726}},{start:{line:4,column:66728},end:{line:4,column:66730}},{start:{line:4,column:66732},end:{line:4,column:66740}},{start:{line:4,column:66742},end:{line:4,column:66743}},{start:{line:4,column:66745},end:{line:4,column:66753}},{start:{line:4,column:66755},end:{line:4,column:66760}}],line:4},"1282":{loc:{start:{line:4,column:66861},end:{line:4,column:66947}},type:"if",locations:[{start:{line:4,column:66861},end:{line:4,column:66947}},{start:{line:4,column:66890},end:{line:4,column:66947}}],line:4},"1283":{loc:{start:{line:4,column:66890},end:{line:4,column:66947}},type:"if",locations:[{start:{line:4,column:66890},end:{line:4,column:66947}},{start:{line:4,column:66919},end:{line:4,column:66947}}],line:4},"1284":{loc:{start:{line:4,column:66919},end:{line:4,column:66947}},type:"if",locations:[{start:{line:4,column:66919},end:{line:4,column:66947}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1285":{loc:{start:{line:4,column:66947},end:{line:4,column:67162}},type:"if",locations:[{start:{line:4,column:66947},end:{line:4,column:67162}},{start:{line:4,column:67047},end:{line:4,column:67162}}],line:4},"1286":{loc:{start:{line:4,column:66950},end:{line:4,column:66973}},type:"binary-expr",locations:[{start:{line:4,column:66950},end:{line:4,column:66952}},{start:{line:4,column:66954},end:{line:4,column:66973}}],line:4},"1287":{loc:{start:{line:4,column:67001},end:{line:4,column:67041}},type:"if",locations:[{start:{line:4,column:67001},end:{line:4,column:67041}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1288":{loc:{start:{line:4,column:67047},end:{line:4,column:67162}},type:"if",locations:[{start:{line:4,column:67047},end:{line:4,column:67162}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1289":{loc:{start:{line:4,column:67050},end:{line:4,column:67072}},type:"binary-expr",locations:[{start:{line:4,column:67050},end:{line:4,column:67051}},{start:{line:4,column:67053},end:{line:4,column:67072}}],line:4},"1290":{loc:{start:{line:4,column:67113},end:{line:4,column:67161}},type:"if",locations:[{start:{line:4,column:67113},end:{line:4,column:67161}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1291":{loc:{start:{line:4,column:67253},end:{line:4,column:67289}},type:"binary-expr",locations:[{start:{line:4,column:67253},end:{line:4,column:67262}},{start:{line:4,column:67265},end:{line:4,column:67288}}],line:4},"1292":{loc:{start:{line:4,column:67417},end:{line:4,column:67537}},type:"if",locations:[{start:{line:4,column:67417},end:{line:4,column:67537}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1293":{loc:{start:{line:4,column:67450},end:{line:4,column:67487}},type:"binary-expr",locations:[{start:{line:4,column:67450},end:{line:4,column:67458}},{start:{line:4,column:67461},end:{line:4,column:67486}}],line:4},"1294":{loc:{start:{line:4,column:67503},end:{line:4,column:67522}},type:"binary-expr",locations:[{start:{line:4,column:67503},end:{line:4,column:67511}},{start:{line:4,column:67513},end:{line:4,column:67522}}],line:4},"1295":{loc:{start:{line:4,column:67592},end:{line:4,column:67627}},type:"if",locations:[{start:{line:4,column:67592},end:{line:4,column:67627}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1296":{loc:{start:{line:4,column:67595},end:{line:4,column:67618}},type:"binary-expr",locations:[{start:{line:4,column:67595},end:{line:4,column:67613}},{start:{line:4,column:67615},end:{line:4,column:67618}}],line:4},"1297":{loc:{start:{line:4,column:67656},end:{line:4,column:67748}},type:"if",locations:[{start:{line:4,column:67656},end:{line:4,column:67748}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1298":{loc:{start:{line:4,column:67662},end:{line:4,column:67731}},type:"if",locations:[{start:{line:4,column:67662},end:{line:4,column:67731}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1299":{loc:{start:{line:4,column:67731},end:{line:4,column:67747}},type:"binary-expr",locations:[{start:{line:4,column:67731},end:{line:4,column:67736}},{start:{line:4,column:67739},end:{line:4,column:67746}}],line:4},"1300":{loc:{start:{line:4,column:67921},end:{line:4,column:67943}},type:"binary-expr",locations:[{start:{line:4,column:67921},end:{line:4,column:67922}},{start:{line:4,column:67924},end:{line:4,column:67943}}],line:4},"1301":{loc:{start:{line:4,column:67984},end:{line:4,column:68016}},type:"binary-expr",locations:[{start:{line:4,column:67984},end:{line:4,column:67998}},{start:{line:4,column:68000},end:{line:4,column:68016}}],line:4},"1302":{loc:{start:{line:4,column:68017},end:{line:4,column:68061}},type:"binary-expr",locations:[{start:{line:4,column:68017},end:{line:4,column:68037}},{start:{line:4,column:68039},end:{line:4,column:68061}}],line:4},"1303":{loc:{start:{line:4,column:68062},end:{line:4,column:68107}},type:"binary-expr",locations:[{start:{line:4,column:68062},end:{line:4,column:68078}},{start:{line:4,column:68080},end:{line:4,column:68107}}],line:4},"1304":{loc:{start:{line:4,column:68135},end:{line:4,column:68165}},type:"binary-expr",locations:[{start:{line:4,column:68135},end:{line:4,column:68140}},{start:{line:4,column:68142},end:{line:4,column:68165}}],line:4},"1305":{loc:{start:{line:4,column:68232},end:{line:4,column:68369}},type:"if",locations:[{start:{line:4,column:68232},end:{line:4,column:68369}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1306":{loc:{start:{line:4,column:68376},end:{line:4,column:68408}},type:"binary-expr",locations:[{start:{line:4,column:68376},end:{line:4,column:68390}},{start:{line:4,column:68392},end:{line:4,column:68408}}],line:4},"1307":{loc:{start:{line:4,column:68409},end:{line:4,column:68453}},type:"binary-expr",locations:[{start:{line:4,column:68409},end:{line:4,column:68429}},{start:{line:4,column:68431},end:{line:4,column:68453}}],line:4},"1308":{loc:{start:{line:4,column:68454},end:{line:4,column:68499}},type:"binary-expr",locations:[{start:{line:4,column:68454},end:{line:4,column:68470}},{start:{line:4,column:68472},end:{line:4,column:68499}}],line:4},"1309":{loc:{start:{line:4,column:68524},end:{line:4,column:68592}},type:"cond-expr",locations:[{start:{line:4,column:68530},end:{line:4,column:68589}},{start:{line:4,column:68590},end:{line:4,column:68592}}],line:4},"1310":{loc:{start:{line:4,column:68530},end:{line:4,column:68589}},type:"binary-expr",locations:[{start:{line:4,column:68530},end:{line:4,column:68546}},{start:{line:4,column:68548},end:{line:4,column:68567}},{start:{line:4,column:68569},end:{line:4,column:68589}}],line:4},"1311":{loc:{start:{line:4,column:68610},end:{line:4,column:68735}},type:"if",locations:[{start:{line:4,column:68610},end:{line:4,column:68735}},{start:{line:4,column:68669},end:{line:4,column:68735}}],line:4},"1312":{loc:{start:{line:4,column:68758},end:{line:4,column:68810}},type:"binary-expr",locations:[{start:{line:4,column:68758},end:{line:4,column:68766}},{start:{line:4,column:68769},end:{line:4,column:68789}},{start:{line:4,column:68791},end:{line:4,column:68809}}],line:4},"1313":{loc:{start:{line:4,column:68892},end:{line:4,column:68910}},type:"if",locations:[{start:{line:4,column:68892},end:{line:4,column:68910}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1314":{loc:{start:{line:4,column:68928},end:{line:4,column:68957}},type:"cond-expr",locations:[{start:{line:4,column:68943},end:{line:4,column:68945}},{start:{line:4,column:68947},end:{line:4,column:68956}}],line:4},"1315":{loc:{start:{line:4,column:69002},end:{line:4,column:69016}},type:"binary-expr",locations:[{start:{line:4,column:69002},end:{line:4,column:69013}},{start:{line:4,column:69015},end:{line:4,column:69016}}],line:4},"1316":{loc:{start:{line:4,column:69063},end:{line:4,column:69084}},type:"cond-expr",locations:[{start:{line:4,column:69069},end:{line:4,column:69082}},{start:{line:4,column:69083},end:{line:4,column:69084}}],line:4},"1317":{loc:{start:{line:4,column:69153},end:{line:4,column:69167}},type:"binary-expr",locations:[{start:{line:4,column:69153},end:{line:4,column:69164}},{start:{line:4,column:69166},end:{line:4,column:69167}}],line:4},"1318":{loc:{start:{line:4,column:69393},end:{line:4,column:69654}},type:"if",locations:[{start:{line:4,column:69393},end:{line:4,column:69654}},{start:{line:4,column:69526},end:{line:4,column:69654}}],line:4},"1319":{loc:{start:{line:4,column:69396},end:{line:4,column:69424}},type:"binary-expr",locations:[{start:{line:4,column:69396},end:{line:4,column:69398}},{start:{line:4,column:69400},end:{line:4,column:69401}},{start:{line:4,column:69404},end:{line:4,column:69423}}],line:4},"1320":{loc:{start:{line:4,column:69441},end:{line:4,column:69466}},type:"binary-expr",locations:[{start:{line:4,column:69441},end:{line:4,column:69463}},{start:{line:4,column:69465},end:{line:4,column:69466}}],line:4},"1321":{loc:{start:{line:4,column:69543},end:{line:4,column:69551}},type:"cond-expr",locations:[{start:{line:4,column:69545},end:{line:4,column:69549}},{start:{line:4,column:69550},end:{line:4,column:69551}}],line:4},"1322":{loc:{start:{line:4,column:69586},end:{line:4,column:69653}},type:"if",locations:[{start:{line:4,column:69586},end:{line:4,column:69653}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1323":{loc:{start:{line:4,column:69603},end:{line:4,column:69633}},type:"cond-expr",locations:[{start:{line:4,column:69605},end:{line:4,column:69625}},{start:{line:4,column:69626},end:{line:4,column:69633}}],line:4},"1324":{loc:{start:{line:4,column:69685},end:{line:4,column:69738}},type:"binary-expr",locations:[{start:{line:4,column:69685},end:{line:4,column:69710}},{start:{line:4,column:69712},end:{line:4,column:69738}}],line:4},"1325":{loc:{start:{line:4,column:69776},end:{line:4,column:69930}},type:"if",locations:[{start:{line:4,column:69776},end:{line:4,column:69930}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1326":{loc:{start:{line:4,column:69829},end:{line:4,column:69903}},type:"if",locations:[{start:{line:4,column:69829},end:{line:4,column:69903}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1327":{loc:{start:{line:4,column:69832},end:{line:4,column:69849}},type:"binary-expr",locations:[{start:{line:4,column:69832},end:{line:4,column:69837}},{start:{line:4,column:69839},end:{line:4,column:69849}}],line:4},"1328":{loc:{start:{line:4,column:69879},end:{line:4,column:69902}},type:"cond-expr",locations:[{start:{line:4,column:69893},end:{line:4,column:69897}},{start:{line:4,column:69898},end:{line:4,column:69902}}],line:4},"1329":{loc:{start:{line:4,column:69879},end:{line:4,column:69892}},type:"binary-expr",locations:[{start:{line:4,column:69879},end:{line:4,column:69880}},{start:{line:4,column:69882},end:{line:4,column:69892}}],line:4},"1330":{loc:{start:{line:4,column:69903},end:{line:4,column:69929}},type:"binary-expr",locations:[{start:{line:4,column:69903},end:{line:4,column:69921}},{start:{line:4,column:69924},end:{line:4,column:69928}}],line:4},"1331":{loc:{start:{line:4,column:69975},end:{line:4,column:70003}},type:"cond-expr",locations:[{start:{line:4,column:69993},end:{line:4,column:69998}},{start:{line:4,column:69999},end:{line:4,column:70003}}],line:4},"1332":{loc:{start:{line:4,column:70035},end:{line:4,column:70066}},type:"binary-expr",locations:[{start:{line:4,column:70035},end:{line:4,column:70036}},{start:{line:4,column:70038},end:{line:4,column:70066}}],line:4},"1333":{loc:{start:{line:4,column:70058},end:{line:4,column:70064}},type:"cond-expr",locations:[{start:{line:4,column:70060},end:{line:4,column:70062}},{start:{line:4,column:70063},end:{line:4,column:70064}}],line:4},"1334":{loc:{start:{line:4,column:70225},end:{line:4,column:70266}},type:"binary-expr",locations:[{start:{line:4,column:70225},end:{line:4,column:70247}},{start:{line:4,column:70249},end:{line:4,column:70260}},{start:{line:4,column:70262},end:{line:4,column:70266}}],line:4},"1335":{loc:{start:{line:4,column:70541},end:{line:4,column:70559}},type:"binary-expr",locations:[{start:{line:4,column:70541},end:{line:4,column:70542}},{start:{line:4,column:70545},end:{line:4,column:70558}}],line:4},"1336":{loc:{start:{line:4,column:70667},end:{line:4,column:70696}},type:"cond-expr",locations:[{start:{line:4,column:70683},end:{line:4,column:70684}},{start:{line:4,column:70685},end:{line:4,column:70696}}],line:4},"1337":{loc:{start:{line:4,column:70704},end:{line:4,column:70772}},type:"binary-expr",locations:[{start:{line:4,column:70704},end:{line:4,column:70705}},{start:{line:4,column:70707},end:{line:4,column:70737}},{start:{line:4,column:70740},end:{line:4,column:70771}}],line:4},"1338":{loc:{start:{line:4,column:70742},end:{line:4,column:70771}},type:"binary-expr",locations:[{start:{line:4,column:70742},end:{line:4,column:70768}},{start:{line:4,column:70770},end:{line:4,column:70771}}],line:4},"1339":{loc:{start:{line:4,column:70773},end:{line:4,column:70788}},type:"cond-expr",locations:[{start:{line:4,column:70775},end:{line:4,column:70786}},{start:{line:4,column:70787},end:{line:4,column:70788}}],line:4},"1340":{loc:{start:{line:4,column:70825},end:{line:4,column:70857}},type:"if",locations:[{start:{line:4,column:70825},end:{line:4,column:70857}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1341":{loc:{start:{line:4,column:71064},end:{line:4,column:71095}},type:"cond-expr",locations:[{start:{line:4,column:71074},end:{line:4,column:71076}},{start:{line:4,column:71077},end:{line:4,column:71095}}],line:4},"1342":{loc:{start:{line:4,column:71077},end:{line:4,column:71095}},type:"cond-expr",locations:[{start:{line:4,column:71088},end:{line:4,column:71090}},{start:{line:4,column:71091},end:{line:4,column:71095}}],line:4},"1343":{loc:{start:{line:4,column:71119},end:{line:4,column:71143}},type:"binary-expr",locations:[{start:{line:4,column:71119},end:{line:4,column:71136}},{start:{line:4,column:71138},end:{line:4,column:71143}}],line:4},"1344":{loc:{start:{line:4,column:71619},end:{line:4,column:71643}},type:"binary-expr",locations:[{start:{line:4,column:71619},end:{line:4,column:71639}},{start:{line:4,column:71641},end:{line:4,column:71643}}],line:4},"1345":{loc:{start:{line:4,column:71765},end:{line:4,column:71781}},type:"binary-expr",locations:[{start:{line:4,column:71765},end:{line:4,column:71766}},{start:{line:4,column:71768},end:{line:4,column:71781}}],line:4},"1346":{loc:{start:{line:4,column:71819},end:{line:4,column:71942}},type:"cond-expr",locations:[{start:{line:4,column:71840},end:{line:4,column:71905}},{start:{line:4,column:71906},end:{line:4,column:71942}}],line:4},"1347":{loc:{start:{line:4,column:71819},end:{line:4,column:71839}},type:"binary-expr",locations:[{start:{line:4,column:71819},end:{line:4,column:71820}},{start:{line:4,column:71822},end:{line:4,column:71839}}],line:4},"1348":{loc:{start:{line:4,column:72072},end:{line:4,column:72107}},type:"cond-expr",locations:[{start:{line:4,column:72074},end:{line:4,column:72099}},{start:{line:4,column:72100},end:{line:4,column:72107}}],line:4},"1349":{loc:{start:{line:4,column:72110},end:{line:4,column:72176}},type:"binary-expr",locations:[{start:{line:4,column:72110},end:{line:4,column:72121}},{start:{line:4,column:72123},end:{line:4,column:72176}}],line:4},"1350":{loc:{start:{line:4,column:72134},end:{line:4,column:72175}},type:"binary-expr",locations:[{start:{line:4,column:72134},end:{line:4,column:72154}},{start:{line:4,column:72156},end:{line:4,column:72175}}],line:4},"1351":{loc:{start:{line:4,column:72364},end:{line:4,column:72407}},type:"binary-expr",locations:[{start:{line:4,column:72364},end:{line:4,column:72374}},{start:{line:4,column:72376},end:{line:4,column:72407}}],line:4},"1352":{loc:{start:{line:4,column:72462},end:{line:4,column:72477}},type:"binary-expr",locations:[{start:{line:4,column:72462},end:{line:4,column:72470}},{start:{line:4,column:72472},end:{line:4,column:72477}}],line:4},"1353":{loc:{start:{line:4,column:72593},end:{line:4,column:72637}},type:"cond-expr",locations:[{start:{line:4,column:72595},end:{line:4,column:72618}},{start:{line:4,column:72619},end:{line:4,column:72637}}],line:4},"1354":{loc:{start:{line:4,column:72656},end:{line:4,column:72784}},type:"if",locations:[{start:{line:4,column:72656},end:{line:4,column:72784}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1355":{loc:{start:{line:4,column:72698},end:{line:4,column:72740}},type:"binary-expr",locations:[{start:{line:4,column:72698},end:{line:4,column:72706}},{start:{line:4,column:72709},end:{line:4,column:72739}}],line:4},"1356":{loc:{start:{line:4,column:72741},end:{line:4,column:72783}},type:"binary-expr",locations:[{start:{line:4,column:72741},end:{line:4,column:72749}},{start:{line:4,column:72752},end:{line:4,column:72782}}],line:4},"1357":{loc:{start:{line:4,column:72784},end:{line:4,column:72996}},type:"if",locations:[{start:{line:4,column:72784},end:{line:4,column:72996}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1358":{loc:{start:{line:4,column:72828},end:{line:4,column:72995}},type:"if",locations:[{start:{line:4,column:72828},end:{line:4,column:72995}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1359":{loc:{start:{line:4,column:72909},end:{line:4,column:72951}},type:"binary-expr",locations:[{start:{line:4,column:72909},end:{line:4,column:72917}},{start:{line:4,column:72920},end:{line:4,column:72950}}],line:4},"1360":{loc:{start:{line:4,column:72952},end:{line:4,column:72994}},type:"binary-expr",locations:[{start:{line:4,column:72952},end:{line:4,column:72960}},{start:{line:4,column:72963},end:{line:4,column:72993}}],line:4},"1361":{loc:{start:{line:4,column:73006},end:{line:4,column:73081}},type:"if",locations:[{start:{line:4,column:73006},end:{line:4,column:73081}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1362":{loc:{start:{line:4,column:73033},end:{line:4,column:73062}},type:"cond-expr",locations:[{start:{line:4,column:73054},end:{line:4,column:73055}},{start:{line:4,column:73056},end:{line:4,column:73062}}],line:4},"1363":{loc:{start:{line:4,column:73160},end:{line:4,column:73248}},type:"cond-expr",locations:[{start:{line:4,column:73167},end:{line:4,column:73171}},{start:{line:4,column:73172},end:{line:4,column:73248}}],line:4},"1364":{loc:{start:{line:4,column:73160},end:{line:4,column:73166}},type:"binary-expr",locations:[{start:{line:4,column:73160},end:{line:4,column:73162}},{start:{line:4,column:73164},end:{line:4,column:73166}}],line:4},"1365":{loc:{start:{line:4,column:73176},end:{line:4,column:73212}},type:"if",locations:[{start:{line:4,column:73176},end:{line:4,column:73212}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1366":{loc:{start:{line:4,column:73179},end:{line:4,column:73185}},type:"binary-expr",locations:[{start:{line:4,column:73179},end:{line:4,column:73182}},{start:{line:4,column:73184},end:{line:4,column:73185}}],line:4},"1367":{loc:{start:{line:4,column:73212},end:{line:4,column:73247}},type:"if",locations:[{start:{line:4,column:73212},end:{line:4,column:73247}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1368":{loc:{start:{line:4,column:73215},end:{line:4,column:73221}},type:"binary-expr",locations:[{start:{line:4,column:73215},end:{line:4,column:73218}},{start:{line:4,column:73220},end:{line:4,column:73221}}],line:4},"1369":{loc:{start:{line:4,column:73288},end:{line:4,column:73313}},type:"binary-expr",locations:[{start:{line:4,column:73288},end:{line:4,column:73299}},{start:{line:4,column:73301},end:{line:4,column:73313}}],line:4},"1370":{loc:{start:{line:4,column:73754},end:{line:4,column:73877}},type:"if",locations:[{start:{line:4,column:73754},end:{line:4,column:73877}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1371":{loc:{start:{line:4,column:73792},end:{line:4,column:73869}},type:"binary-expr",locations:[{start:{line:4,column:73792},end:{line:4,column:73823}},{start:{line:4,column:73825},end:{line:4,column:73869}}],line:4},"1372":{loc:{start:{line:4,column:74201},end:{line:4,column:74237}},type:"cond-expr",locations:[{start:{line:4,column:74219},end:{line:4,column:74232}},{start:{line:4,column:74233},end:{line:4,column:74237}}],line:4},"1373":{loc:{start:{line:4,column:74201},end:{line:4,column:74218}},type:"binary-expr",locations:[{start:{line:4,column:74201},end:{line:4,column:74208}},{start:{line:4,column:74210},end:{line:4,column:74218}}],line:4},"1374":{loc:{start:{line:4,column:74667},end:{line:4,column:74789}},type:"if",locations:[{start:{line:4,column:74667},end:{line:4,column:74789}},{start:{line:4,column:74754},end:{line:4,column:74789}}],line:4},"1375":{loc:{start:{line:4,column:74886},end:{line:4,column:74906}},type:"binary-expr",locations:[{start:{line:4,column:74886},end:{line:4,column:74894}},{start:{line:4,column:74896},end:{line:4,column:74900}},{start:{line:4,column:74902},end:{line:4,column:74906}}],line:4},"1376":{loc:{start:{line:4,column:74987},end:{line:4,column:75043}},type:"cond-expr",locations:[{start:{line:4,column:75006},end:{line:4,column:75009}},{start:{line:4,column:75010},end:{line:4,column:75043}}],line:4},"1377":{loc:{start:{line:4,column:75010},end:{line:4,column:75043}},type:"binary-expr",locations:[{start:{line:4,column:75010},end:{line:4,column:75017}},{start:{line:4,column:75020},end:{line:4,column:75042}}],line:4},"1378":{loc:{start:{line:4,column:75106},end:{line:4,column:75111}},type:"binary-expr",locations:[{start:{line:4,column:75106},end:{line:4,column:75107}},{start:{line:4,column:75109},end:{line:4,column:75111}}],line:4},"1379":{loc:{start:{line:4,column:75206},end:{line:4,column:75215}},type:"binary-expr",locations:[{start:{line:4,column:75206},end:{line:4,column:75207}},{start:{line:4,column:75209},end:{line:4,column:75215}}],line:4},"1380":{loc:{start:{line:4,column:75218},end:{line:4,column:75355}},type:"if",locations:[{start:{line:4,column:75218},end:{line:4,column:75355}},{start:{line:4,column:75231},end:{line:4,column:75355}}],line:4},"1381":{loc:{start:{line:4,column:75238},end:{line:4,column:75243}},type:"binary-expr",locations:[{start:{line:4,column:75238},end:{line:4,column:75239}},{start:{line:4,column:75241},end:{line:4,column:75243}}],line:4},"1382":{loc:{start:{line:4,column:75290},end:{line:4,column:75326}},type:"binary-expr",locations:[{start:{line:4,column:75290},end:{line:4,column:75311}},{start:{line:4,column:75313},end:{line:4,column:75326}}],line:4},"1383":{loc:{start:{line:4,column:75361},end:{line:4,column:75378}},type:"cond-expr",locations:[{start:{line:4,column:75363},end:{line:4,column:75364}},{start:{line:4,column:75365},end:{line:4,column:75378}}],line:4},"1384":{loc:{start:{line:4,column:75381},end:{line:4,column:75403}},type:"binary-expr",locations:[{start:{line:4,column:75381},end:{line:4,column:75382}},{start:{line:4,column:75384},end:{line:4,column:75403}}],line:4},"1385":{loc:{start:{line:4,column:75404},end:{line:4,column:75483}},type:"if",locations:[{start:{line:4,column:75404},end:{line:4,column:75483}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1386":{loc:{start:{line:4,column:75407},end:{line:4,column:75427}},type:"binary-expr",locations:[{start:{line:4,column:75407},end:{line:4,column:75409}},{start:{line:4,column:75411},end:{line:4,column:75427}}],line:4},"1387":{loc:{start:{line:4,column:75436},end:{line:4,column:75459}},type:"cond-expr",locations:[{start:{line:4,column:75438},end:{line:4,column:75439}},{start:{line:4,column:75440},end:{line:4,column:75459}}],line:4},"1388":{loc:{start:{line:4,column:75474},end:{line:4,column:75482}},type:"binary-expr",locations:[{start:{line:4,column:75474},end:{line:4,column:75475}},{start:{line:4,column:75478},end:{line:4,column:75481}}],line:4},"1389":{loc:{start:{line:4,column:75492},end:{line:4,column:75511}},type:"binary-expr",locations:[{start:{line:4,column:75492},end:{line:4,column:75507}},{start:{line:4,column:75509},end:{line:4,column:75511}}],line:4},"1390":{loc:{start:{line:4,column:75535},end:{line:4,column:75546}},type:"binary-expr",locations:[{start:{line:4,column:75535},end:{line:4,column:75540}},{start:{line:4,column:75542},end:{line:4,column:75546}}],line:4},"1391":{loc:{start:{line:4,column:75550},end:{line:4,column:75569}},type:"binary-expr",locations:[{start:{line:4,column:75550},end:{line:4,column:75563}},{start:{line:4,column:75565},end:{line:4,column:75569}}],line:4},"1392":{loc:{start:{line:4,column:75731},end:{line:4,column:75849}},type:"if",locations:[{start:{line:4,column:75731},end:{line:4,column:75849}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1393":{loc:{start:{line:4,column:75763},end:{line:4,column:75848}},type:"if",locations:[{start:{line:4,column:75763},end:{line:4,column:75848}},{start:{line:4,column:75792},end:{line:4,column:75848}}],line:4},"1394":{loc:{start:{line:4,column:76038},end:{line:4,column:76062}},type:"cond-expr",locations:[{start:{line:4,column:76047},end:{line:4,column:76059}},{start:{line:4,column:76060},end:{line:4,column:76062}}],line:4},"1395":{loc:{start:{line:4,column:76128},end:{line:4,column:76170}},type:"binary-expr",locations:[{start:{line:4,column:76128},end:{line:4,column:76129}},{start:{line:4,column:76132},end:{line:4,column:76169}}],line:4},"1396":{loc:{start:{line:4,column:76243},end:{line:4,column:76293}},type:"cond-expr",locations:[{start:{line:4,column:76279},end:{line:4,column:76288}},{start:{line:4,column:76289},end:{line:4,column:76293}}],line:4},"1397":{loc:{start:{line:4,column:76243},end:{line:4,column:76278}},type:"binary-expr",locations:[{start:{line:4,column:76243},end:{line:4,column:76244}},{start:{line:4,column:76246},end:{line:4,column:76278}}],line:4},"1398":{loc:{start:{line:4,column:76309},end:{line:4,column:76312}},type:"default-arg",locations:[{start:{line:4,column:76311},end:{line:4,column:76312}}],line:4},"1399":{loc:{start:{line:4,column:76321},end:{line:4,column:76337}},type:"binary-expr",locations:[{start:{line:4,column:76321},end:{line:4,column:76322}},{start:{line:4,column:76324},end:{line:4,column:76337}}],line:4},"1400":{loc:{start:{line:4,column:76390},end:{line:4,column:76407}},type:"binary-expr",locations:[{start:{line:4,column:76390},end:{line:4,column:76395}},{start:{line:4,column:76398},end:{line:4,column:76406}}],line:4},"1401":{loc:{start:{line:4,column:76451},end:{line:4,column:76500}},type:"cond-expr",locations:[{start:{line:4,column:76457},end:{line:4,column:76460}},{start:{line:4,column:76462},end:{line:4,column:76499}}],line:4},"1402":{loc:{start:{line:4,column:76721},end:{line:4,column:76737}},type:"if",locations:[{start:{line:4,column:76721},end:{line:4,column:76737}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1403":{loc:{start:{line:4,column:76743},end:{line:4,column:76769}},type:"cond-expr",locations:[{start:{line:4,column:76752},end:{line:4,column:76759}},{start:{line:4,column:76760},end:{line:4,column:76769}}],line:4},"1404":{loc:{start:{line:4,column:76955},end:{line:4,column:76959}},type:"default-arg",locations:[{start:{line:4,column:76957},end:{line:4,column:76959}}],line:4},"1405":{loc:{start:{line:4,column:77014},end:{line:4,column:77209}},type:"if",locations:[{start:{line:4,column:77014},end:{line:4,column:77209}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1406":{loc:{start:{line:4,column:77033},end:{line:4,column:77085}},type:"cond-expr",locations:[{start:{line:4,column:77057},end:{line:4,column:77076}},{start:{line:4,column:77077},end:{line:4,column:77085}}],line:4},"1407":{loc:{start:{line:4,column:77432},end:{line:4,column:77482}},type:"binary-expr",locations:[{start:{line:4,column:77432},end:{line:4,column:77454}},{start:{line:4,column:77456},end:{line:4,column:77482}}],line:4},"1408":{loc:{start:{line:4,column:77531},end:{line:4,column:77537}},type:"default-arg",locations:[{start:{line:4,column:77533},end:{line:4,column:77537}}],line:4},"1409":{loc:{start:{line:4,column:77564},end:{line:4,column:77620}},type:"cond-expr",locations:[{start:{line:4,column:77583},end:{line:4,column:77603}},{start:{line:4,column:77604},end:{line:4,column:77620}}],line:4},"1410":{loc:{start:{line:4,column:77654},end:{line:4,column:77658}},type:"default-arg",locations:[{start:{line:4,column:77656},end:{line:4,column:77658}}],line:4},"1411":{loc:{start:{line:4,column:77912},end:{line:4,column:77931}},type:"cond-expr",locations:[{start:{line:4,column:77921},end:{line:4,column:77929}},{start:{line:4,column:77930},end:{line:4,column:77931}}],line:4},"1412":{loc:{start:{line:4,column:77972},end:{line:4,column:78028}},type:"binary-expr",locations:[{start:{line:4,column:77972},end:{line:4,column:77973}},{start:{line:4,column:77976},end:{line:4,column:78027}}],line:4},"1413":{loc:{start:{line:4,column:78003},end:{line:4,column:78027}},type:"cond-expr",locations:[{start:{line:4,column:78012},end:{line:4,column:78021}},{start:{line:4,column:78022},end:{line:4,column:78027}}],line:4},"1414":{loc:{start:{line:4,column:78036},end:{line:4,column:78058}},type:"cond-expr",locations:[{start:{line:4,column:78045},end:{line:4,column:78053}},{start:{line:4,column:78054},end:{line:4,column:78058}}],line:4},"1415":{loc:{start:{line:4,column:78388},end:{line:4,column:78392}},type:"default-arg",locations:[{start:{line:4,column:78390},end:{line:4,column:78392}}],line:4},"1416":{loc:{start:{line:4,column:78457},end:{line:4,column:78503}},type:"binary-expr",locations:[{start:{line:4,column:78457},end:{line:4,column:78481}},{start:{line:4,column:78483},end:{line:4,column:78503}}],line:4},"1417":{loc:{start:{line:4,column:78518},end:{line:4,column:78584}},type:"binary-expr",locations:[{start:{line:4,column:78518},end:{line:4,column:78554}},{start:{line:4,column:78557},end:{line:4,column:78583}}],line:4},"1418":{loc:{start:{line:4,column:78648},end:{line:4,column:78752}},type:"cond-expr",locations:[{start:{line:4,column:78674},end:{line:4,column:78746}},{start:{line:4,column:78748},end:{line:4,column:78752}}],line:4},"1419":{loc:{start:{line:4,column:78773},end:{line:4,column:78956}},type:"if",locations:[{start:{line:4,column:78773},end:{line:4,column:78956}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1420":{loc:{start:{line:4,column:78776},end:{line:4,column:78828}},type:"binary-expr",locations:[{start:{line:4,column:78776},end:{line:4,column:78799}},{start:{line:4,column:78801},end:{line:4,column:78828}}],line:4},"1421":{loc:{start:{line:4,column:78879},end:{line:4,column:78910}},type:"binary-expr",locations:[{start:{line:4,column:78879},end:{line:4,column:78887}},{start:{line:4,column:78889},end:{line:4,column:78897}},{start:{line:4,column:78899},end:{line:4,column:78910}}],line:4},"1422":{loc:{start:{line:4,column:78935},end:{line:4,column:78954}},type:"cond-expr",locations:[{start:{line:4,column:78944},end:{line:4,column:78951}},{start:{line:4,column:78952},end:{line:4,column:78954}}],line:4},"1423":{loc:{start:{line:4,column:79033},end:{line:4,column:79296}},type:"if",locations:[{start:{line:4,column:79033},end:{line:4,column:79296}},{start:{line:4,column:79191},end:{line:4,column:79296}}],line:4},"1424":{loc:{start:{line:4,column:79191},end:{line:4,column:79296}},type:"cond-expr",locations:[{start:{line:4,column:79198},end:{line:4,column:79245}},{start:{line:4,column:79246},end:{line:4,column:79296}}],line:4},"1425":{loc:{start:{line:4,column:79198},end:{line:4,column:79245}},type:"binary-expr",locations:[{start:{line:4,column:79198},end:{line:4,column:79206}},{start:{line:4,column:79208},end:{line:4,column:79245}}],line:4},"1426":{loc:{start:{line:4,column:79329},end:{line:4,column:79533}},type:"if",locations:[{start:{line:4,column:79329},end:{line:4,column:79533}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1427":{loc:{start:{line:4,column:79367},end:{line:4,column:79532}},type:"if",locations:[{start:{line:4,column:79367},end:{line:4,column:79532}},{start:{line:4,column:79508},end:{line:4,column:79532}}],line:4},"1428":{loc:{start:{line:4,column:79379},end:{line:4,column:79503}},type:"if",locations:[{start:{line:4,column:79379},end:{line:4,column:79503}},{start:{line:4,column:79445},end:{line:4,column:79503}}],line:4},"1429":{loc:{start:{line:4,column:79382},end:{line:4,column:79414}},type:"binary-expr",locations:[{start:{line:4,column:79382},end:{line:4,column:79388}},{start:{line:4,column:79390},end:{line:4,column:79396}},{start:{line:4,column:79398},end:{line:4,column:79404}},{start:{line:4,column:79406},end:{line:4,column:79414}}],line:4},"1430":{loc:{start:{line:4,column:79468},end:{line:4,column:79502}},type:"binary-expr",locations:[{start:{line:4,column:79468},end:{line:4,column:79476}},{start:{line:4,column:79478},end:{line:4,column:79502}}],line:4},"1431":{loc:{start:{line:4,column:79548},end:{line:4,column:79609}},type:"cond-expr",locations:[{start:{line:4,column:79568},end:{line:4,column:79586}},{start:{line:4,column:79587},end:{line:4,column:79609}}],line:4},"1432":{loc:{start:{line:4,column:79648},end:{line:4,column:79715}},type:"if",locations:[{start:{line:4,column:79648},end:{line:4,column:79715}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1433":{loc:{start:{line:4,column:79689},end:{line:4,column:79714}},type:"if",locations:[{start:{line:4,column:79689},end:{line:4,column:79714}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1434":{loc:{start:{line:4,column:79751},end:{line:4,column:79790}},type:"cond-expr",locations:[{start:{line:4,column:79761},end:{line:4,column:79768}},{start:{line:4,column:79769},end:{line:4,column:79790}}],line:4},"1435":{loc:{start:{line:4,column:79769},end:{line:4,column:79790}},type:"cond-expr",locations:[{start:{line:4,column:79778},end:{line:4,column:79785}},{start:{line:4,column:79786},end:{line:4,column:79790}}],line:4},"1436":{loc:{start:{line:4,column:79819},end:{line:4,column:79865}},type:"cond-expr",locations:[{start:{line:4,column:79826},end:{line:4,column:79833}},{start:{line:4,column:79834},end:{line:4,column:79865}}],line:4},"1437":{loc:{start:{line:4,column:79834},end:{line:4,column:79865}},type:"cond-expr",locations:[{start:{line:4,column:79841},end:{line:4,column:79850}},{start:{line:4,column:79851},end:{line:4,column:79865}}],line:4},"1438":{loc:{start:{line:4,column:79885},end:{line:4,column:79910}},type:"if",locations:[{start:{line:4,column:79885},end:{line:4,column:79910}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1439":{loc:{start:{line:4,column:79910},end:{line:4,column:79935}},type:"if",locations:[{start:{line:4,column:79910},end:{line:4,column:79935}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1440":{loc:{start:{line:4,column:79935},end:{line:4,column:79959}},type:"if",locations:[{start:{line:4,column:79935},end:{line:4,column:79959}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1441":{loc:{start:{line:4,column:80004},end:{line:4,column:80193}},type:"if",locations:[{start:{line:4,column:80004},end:{line:4,column:80193}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1442":{loc:{start:{line:4,column:80067},end:{line:4,column:80087}},type:"binary-expr",locations:[{start:{line:4,column:80067},end:{line:4,column:80075}},{start:{line:4,column:80077},end:{line:4,column:80087}}],line:4},"1443":{loc:{start:{line:4,column:80105},end:{line:4,column:80180}},type:"if",locations:[{start:{line:4,column:80105},end:{line:4,column:80180}},{start:{line:4,column:80129},end:{line:4,column:80180}}],line:4},"1444":{loc:{start:{line:4,column:80273},end:{line:4,column:80547}},type:"if",locations:[{start:{line:4,column:80273},end:{line:4,column:80547}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1445":{loc:{start:{line:4,column:80344},end:{line:4,column:80545}},type:"if",locations:[{start:{line:4,column:80344},end:{line:4,column:80545}},{start:{line:4,column:80370},end:{line:4,column:80545}}],line:4},"1446":{loc:{start:{line:4,column:80431},end:{line:4,column:80459}},type:"binary-expr",locations:[{start:{line:4,column:80431},end:{line:4,column:80443}},{start:{line:4,column:80445},end:{line:4,column:80459}}],line:4},"1447":{loc:{start:{line:4,column:80460},end:{line:4,column:80544}},type:"if",locations:[{start:{line:4,column:80460},end:{line:4,column:80544}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1448":{loc:{start:{line:4,column:80756},end:{line:4,column:80835}},type:"binary-expr",locations:[{start:{line:4,column:80756},end:{line:4,column:80773}},{start:{line:4,column:80776},end:{line:4,column:80834}}],line:4},"1449":{loc:{start:{line:4,column:80799},end:{line:4,column:80834}},type:"binary-expr",locations:[{start:{line:4,column:80799},end:{line:4,column:80808}},{start:{line:4,column:80811},end:{line:4,column:80833}}],line:4},"1450":{loc:{start:{line:4,column:80879},end:{line:4,column:80986}},type:"if",locations:[{start:{line:4,column:80879},end:{line:4,column:80986}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1451":{loc:{start:{line:4,column:80947},end:{line:4,column:80985}},type:"binary-expr",locations:[{start:{line:4,column:80947},end:{line:4,column:80956}},{start:{line:4,column:80959},end:{line:4,column:80984}}],line:4},"1452":{loc:{start:{line:4,column:81076},end:{line:4,column:81112}},type:"binary-expr",locations:[{start:{line:4,column:81076},end:{line:4,column:81092}},{start:{line:4,column:81095},end:{line:4,column:81111}}],line:4},"1453":{loc:{start:{line:4,column:81165},end:{line:4,column:81204}},type:"binary-expr",locations:[{start:{line:4,column:81165},end:{line:4,column:81181}},{start:{line:4,column:81184},end:{line:4,column:81203}}],line:4},"1454":{loc:{start:{line:4,column:81207},end:{line:4,column:81232}},type:"cond-expr",locations:[{start:{line:4,column:81216},end:{line:4,column:81229}},{start:{line:4,column:81230},end:{line:4,column:81232}}],line:4},"1455":{loc:{start:{line:4,column:81233},end:{line:4,column:81268}},type:"binary-expr",locations:[{start:{line:4,column:81233},end:{line:4,column:81238}},{start:{line:4,column:81240},end:{line:4,column:81268}}],line:4},"1456":{loc:{start:{line:4,column:81362},end:{line:4,column:81406}},type:"cond-expr",locations:[{start:{line:4,column:81382},end:{line:4,column:81394}},{start:{line:4,column:81395},end:{line:4,column:81406}}],line:4},"1457":{loc:{start:{line:4,column:81593},end:{line:4,column:81597}},type:"default-arg",locations:[{start:{line:4,column:81595},end:{line:4,column:81597}}],line:4},"1458":{loc:{start:{line:4,column:81838},end:{line:4,column:81875}},type:"binary-expr",locations:[{start:{line:4,column:81838},end:{line:4,column:81839}},{start:{line:4,column:81841},end:{line:4,column:81875}}],line:4},"1459":{loc:{start:{line:4,column:82079},end:{line:4,column:82104}},type:"binary-expr",locations:[{start:{line:4,column:82079},end:{line:4,column:82091}},{start:{line:4,column:82093},end:{line:4,column:82104}}],line:4},"1460":{loc:{start:{line:4,column:82534},end:{line:4,column:82548}},type:"binary-expr",locations:[{start:{line:4,column:82534},end:{line:4,column:82542}},{start:{line:4,column:82544},end:{line:4,column:82548}}],line:4},"1461":{loc:{start:{line:4,column:82603},end:{line:4,column:82664}},type:"binary-expr",locations:[{start:{line:4,column:82603},end:{line:4,column:82631}},{start:{line:4,column:82633},end:{line:4,column:82664}}],line:4},"1462":{loc:{start:{line:4,column:82757},end:{line:4,column:82763}},type:"default-arg",locations:[{start:{line:4,column:82759},end:{line:4,column:82763}}],line:4},"1463":{loc:{start:{line:4,column:82974},end:{line:4,column:83003}},type:"if",locations:[{start:{line:4,column:82974},end:{line:4,column:83003}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1464":{loc:{start:{line:4,column:83003},end:{line:4,column:83130}},type:"if",locations:[{start:{line:4,column:83003},end:{line:4,column:83130}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1465":{loc:{start:{line:4,column:83058},end:{line:4,column:83099}},type:"cond-expr",locations:[{start:{line:4,column:83069},end:{line:4,column:83094}},{start:{line:4,column:83095},end:{line:4,column:83099}}],line:4},"1466":{loc:{start:{line:4,column:83226},end:{line:4,column:83247}},type:"binary-expr",locations:[{start:{line:4,column:83226},end:{line:4,column:83234}},{start:{line:4,column:83236},end:{line:4,column:83247}}],line:4},"1467":{loc:{start:{line:4,column:83489},end:{line:4,column:83503}},type:"binary-expr",locations:[{start:{line:4,column:83489},end:{line:4,column:83497}},{start:{line:4,column:83499},end:{line:4,column:83503}}],line:4},"1468":{loc:{start:{line:4,column:83627},end:{line:4,column:83661}},type:"binary-expr",locations:[{start:{line:4,column:83627},end:{line:4,column:83639}},{start:{line:4,column:83641},end:{line:4,column:83655}},{start:{line:4,column:83657},end:{line:4,column:83661}}],line:4},"1469":{loc:{start:{line:4,column:83684},end:{line:4,column:83747}},type:"cond-expr",locations:[{start:{line:4,column:83697},end:{line:4,column:83742}},{start:{line:4,column:83743},end:{line:4,column:83747}}],line:4},"1470":{loc:{start:{line:4,column:83779},end:{line:4,column:83792}},type:"binary-expr",locations:[{start:{line:4,column:83779},end:{line:4,column:83788}},{start:{line:4,column:83790},end:{line:4,column:83792}}],line:4},"1471":{loc:{start:{line:4,column:83798},end:{line:4,column:83808}},type:"binary-expr",locations:[{start:{line:4,column:83798},end:{line:4,column:83804}},{start:{line:4,column:83806},end:{line:4,column:83808}}],line:4},"1472":{loc:{start:{line:4,column:83823},end:{line:4,column:83851}},type:"binary-expr",locations:[{start:{line:4,column:83823},end:{line:4,column:83838}},{start:{line:4,column:83840},end:{line:4,column:83851}}],line:4},"1473":{loc:{start:{line:4,column:83859},end:{line:4,column:83870}},type:"binary-expr",locations:[{start:{line:4,column:83859},end:{line:4,column:83867}},{start:{line:4,column:83869},end:{line:4,column:83870}}],line:4},"1474":{loc:{start:{line:4,column:83886},end:{line:4,column:83901}},type:"binary-expr",locations:[{start:{line:4,column:83886},end:{line:4,column:83895}},{start:{line:4,column:83897},end:{line:4,column:83901}}],line:4},"1475":{loc:{start:{line:4,column:83921},end:{line:4,column:83953}},type:"binary-expr",locations:[{start:{line:4,column:83921},end:{line:4,column:83933}},{start:{line:4,column:83935},end:{line:4,column:83953}}],line:4},"1476":{loc:{start:{line:4,column:84070},end:{line:4,column:84082}},type:"binary-expr",locations:[{start:{line:4,column:84070},end:{line:4,column:84075}},{start:{line:4,column:84077},end:{line:4,column:84082}}],line:4},"1477":{loc:{start:{line:4,column:84136},end:{line:4,column:84150}},type:"binary-expr",locations:[{start:{line:4,column:84136},end:{line:4,column:84147}},{start:{line:4,column:84149},end:{line:4,column:84150}}],line:4},"1478":{loc:{start:{line:4,column:84164},end:{line:4,column:84181}},type:"binary-expr",locations:[{start:{line:4,column:84164},end:{line:4,column:84178}},{start:{line:4,column:84180},end:{line:4,column:84181}}],line:4},"1479":{loc:{start:{line:4,column:84190},end:{line:4,column:84202}},type:"binary-expr",locations:[{start:{line:4,column:84190},end:{line:4,column:84199}},{start:{line:4,column:84201},end:{line:4,column:84202}}],line:4},"1480":{loc:{start:{line:4,column:84211},end:{line:4,column:84223}},type:"binary-expr",locations:[{start:{line:4,column:84211},end:{line:4,column:84220}},{start:{line:4,column:84222},end:{line:4,column:84223}}],line:4},"1481":{loc:{start:{line:4,column:84261},end:{line:4,column:84276}},type:"binary-expr",locations:[{start:{line:4,column:84261},end:{line:4,column:84270}},{start:{line:4,column:84272},end:{line:4,column:84276}}],line:4},"1482":{loc:{start:{line:4,column:84280},end:{line:4,column:84290}},type:"binary-expr",locations:[{start:{line:4,column:84280},end:{line:4,column:84284}},{start:{line:4,column:84286},end:{line:4,column:84290}}],line:4},"1483":{loc:{start:{line:4,column:84311},end:{line:4,column:84332}},type:"if",locations:[{start:{line:4,column:84311},end:{line:4,column:84332}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1484":{loc:{start:{line:4,column:84356},end:{line:4,column:84502}},type:"if",locations:[{start:{line:4,column:84356},end:{line:4,column:84502}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1485":{loc:{start:{line:4,column:84399},end:{line:4,column:84481}},type:"cond-expr",locations:[{start:{line:4,column:84417},end:{line:4,column:84453}},{start:{line:4,column:84456},end:{line:4,column:84480}}],line:4},"1486":{loc:{start:{line:4,column:84433},end:{line:4,column:84440}},type:"binary-expr",locations:[{start:{line:4,column:84433},end:{line:4,column:84437}},{start:{line:4,column:84439},end:{line:4,column:84440}}],line:4},"1487":{loc:{start:{line:4,column:84443},end:{line:4,column:84453}},type:"binary-expr",locations:[{start:{line:4,column:84443},end:{line:4,column:84447}},{start:{line:4,column:84449},end:{line:4,column:84453}}],line:4},"1488":{loc:{start:{line:4,column:84526},end:{line:4,column:84547}},type:"if",locations:[{start:{line:4,column:84526},end:{line:4,column:84547}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1489":{loc:{start:{line:4,column:84571},end:{line:4,column:84603}},type:"binary-expr",locations:[{start:{line:4,column:84571},end:{line:4,column:84590}},{start:{line:4,column:84593},end:{line:4,column:84602}}],line:4},"1490":{loc:{start:{line:4,column:84759},end:{line:4,column:84775}},type:"binary-expr",locations:[{start:{line:4,column:84759},end:{line:4,column:84771}},{start:{line:4,column:84773},end:{line:4,column:84775}}],line:4},"1491":{loc:{start:{line:4,column:84786},end:{line:4,column:84820}},type:"binary-expr",locations:[{start:{line:4,column:84786},end:{line:4,column:84814}},{start:{line:4,column:84816},end:{line:4,column:84820}}],line:4},"1492":{loc:{start:{line:4,column:84941},end:{line:4,column:84961}},type:"binary-expr",locations:[{start:{line:4,column:84941},end:{line:4,column:84955}},{start:{line:4,column:84957},end:{line:4,column:84961}}],line:4},"1493":{loc:{start:{line:4,column:84971},end:{line:4,column:84984}},type:"binary-expr",locations:[{start:{line:4,column:84971},end:{line:4,column:84981}},{start:{line:4,column:84983},end:{line:4,column:84984}}],line:4},"1494":{loc:{start:{line:4,column:84995},end:{line:4,column:85012}},type:"binary-expr",locations:[{start:{line:4,column:84995},end:{line:4,column:85006}},{start:{line:4,column:85008},end:{line:4,column:85012}}],line:4},"1495":{loc:{start:{line:4,column:85028},end:{line:4,column:85050}},type:"binary-expr",locations:[{start:{line:4,column:85028},end:{line:4,column:85044}},{start:{line:4,column:85046},end:{line:4,column:85050}}],line:4},"1496":{loc:{start:{line:4,column:85080},end:{line:4,column:85092}},type:"binary-expr",locations:[{start:{line:4,column:85080},end:{line:4,column:85088}},{start:{line:4,column:85090},end:{line:4,column:85092}}],line:4},"1497":{loc:{start:{line:4,column:85102},end:{line:4,column:85118}},type:"binary-expr",locations:[{start:{line:4,column:85102},end:{line:4,column:85112}},{start:{line:4,column:85114},end:{line:4,column:85118}}],line:4},"1498":{loc:{start:{line:4,column:85130},end:{line:4,column:85146}},type:"binary-expr",locations:[{start:{line:4,column:85130},end:{line:4,column:85142}},{start:{line:4,column:85144},end:{line:4,column:85146}}],line:4},"1499":{loc:{start:{line:4,column:85180},end:{line:4,column:85194}},type:"binary-expr",locations:[{start:{line:4,column:85180},end:{line:4,column:85191}},{start:{line:4,column:85193},end:{line:4,column:85194}}],line:4},"1500":{loc:{start:{line:4,column:85205},end:{line:4,column:85222}},type:"binary-expr",locations:[{start:{line:4,column:85205},end:{line:4,column:85216}},{start:{line:4,column:85218},end:{line:4,column:85222}}],line:4},"1501":{loc:{start:{line:4,column:85232},end:{line:4,column:85248}},type:"binary-expr",locations:[{start:{line:4,column:85232},end:{line:4,column:85242}},{start:{line:4,column:85244},end:{line:4,column:85248}}],line:4},"1502":{loc:{start:{line:4,column:85454},end:{line:4,column:85560}},type:"cond-expr",locations:[{start:{line:4,column:85456},end:{line:4,column:85555}},{start:{line:4,column:85556},end:{line:4,column:85560}}],line:4},"1503":{loc:{start:{line:4,column:85467},end:{line:4,column:85493}},type:"cond-expr",locations:[{start:{line:4,column:85488},end:{line:4,column:85491}},{start:{line:4,column:85492},end:{line:4,column:85493}}],line:4},"1504":{loc:{start:{line:4,column:85526},end:{line:4,column:85545}},type:"binary-expr",locations:[{start:{line:4,column:85526},end:{line:4,column:85534}},{start:{line:4,column:85536},end:{line:4,column:85545}}],line:4},"1505":{loc:{start:{line:4,column:85586},end:{line:4,column:85625}},type:"cond-expr",locations:[{start:{line:4,column:85614},end:{line:4,column:85616}},{start:{line:4,column:85617},end:{line:4,column:85625}}],line:4},"1506":{loc:{start:{line:4,column:86098},end:{line:4,column:86188}},type:"if",locations:[{start:{line:4,column:86098},end:{line:4,column:86188}},{start:{line:4,column:86138},end:{line:4,column:86188}}],line:4},"1507":{loc:{start:{line:4,column:86109},end:{line:4,column:86133}},type:"binary-expr",locations:[{start:{line:4,column:86109},end:{line:4,column:86120}},{start:{line:4,column:86122},end:{line:4,column:86133}}],line:4},"1508":{loc:{start:{line:4,column:86139},end:{line:4,column:86174}},type:"if",locations:[{start:{line:4,column:86139},end:{line:4,column:86174}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1509":{loc:{start:{line:4,column:86188},end:{line:4,column:86620}},type:"if",locations:[{start:{line:4,column:86188},end:{line:4,column:86620}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1510":{loc:{start:{line:4,column:86194},end:{line:4,column:86522}},type:"if",locations:[{start:{line:4,column:86194},end:{line:4,column:86522}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1511":{loc:{start:{line:4,column:86323},end:{line:4,column:86333}},type:"binary-expr",locations:[{start:{line:4,column:86323},end:{line:4,column:86324}},{start:{line:4,column:86326},end:{line:4,column:86333}}],line:4},"1512":{loc:{start:{line:4,column:86371},end:{line:4,column:86521}},type:"if",locations:[{start:{line:4,column:86371},end:{line:4,column:86521}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1513":{loc:{start:{line:4,column:86374},end:{line:4,column:86384}},type:"binary-expr",locations:[{start:{line:4,column:86374},end:{line:4,column:86375}},{start:{line:4,column:86377},end:{line:4,column:86384}}],line:4},"1514":{loc:{start:{line:4,column:86385},end:{line:4,column:86395}},type:"binary-expr",locations:[{start:{line:4,column:86385},end:{line:4,column:86386}},{start:{line:4,column:86388},end:{line:4,column:86395}}],line:4},"1515":{loc:{start:{line:4,column:86428},end:{line:4,column:86451}},type:"binary-expr",locations:[{start:{line:4,column:86428},end:{line:4,column:86433}},{start:{line:4,column:86435},end:{line:4,column:86451}}],line:4},"1516":{loc:{start:{line:4,column:86479},end:{line:4,column:86494}},type:"binary-expr",locations:[{start:{line:4,column:86479},end:{line:4,column:86490}},{start:{line:4,column:86492},end:{line:4,column:86494}}],line:4},"1517":{loc:{start:{line:4,column:86539},end:{line:4,column:86619}},type:"if",locations:[{start:{line:4,column:86539},end:{line:4,column:86619}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1518":{loc:{start:{line:4,column:86583},end:{line:4,column:86603}},type:"binary-expr",locations:[{start:{line:4,column:86583},end:{line:4,column:86584}},{start:{line:4,column:86586},end:{line:4,column:86597}},{start:{line:4,column:86599},end:{line:4,column:86603}}],line:4},"1519":{loc:{start:{line:4,column:86604},end:{line:4,column:86618}},type:"binary-expr",locations:[{start:{line:4,column:86604},end:{line:4,column:86610}},{start:{line:4,column:86613},end:{line:4,column:86617}}],line:4},"1520":{loc:{start:{line:4,column:86693},end:{line:4,column:86761}},type:"if",locations:[{start:{line:4,column:86693},end:{line:4,column:86761}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1521":{loc:{start:{line:4,column:86696},end:{line:4,column:86751}},type:"binary-expr",locations:[{start:{line:4,column:86696},end:{line:4,column:86723}},{start:{line:4,column:86725},end:{line:4,column:86751}}],line:4},"1522":{loc:{start:{line:4,column:86779},end:{line:4,column:86846}},type:"binary-expr",locations:[{start:{line:4,column:86779},end:{line:4,column:86789}},{start:{line:4,column:86792},end:{line:4,column:86845}}],line:4},"1523":{loc:{start:{line:4,column:87016},end:{line:4,column:87036}},type:"cond-expr",locations:[{start:{line:4,column:87023},end:{line:4,column:87025}},{start:{line:4,column:87026},end:{line:4,column:87036}}],line:4},"1524":{loc:{start:{line:4,column:87026},end:{line:4,column:87036}},type:"cond-expr",locations:[{start:{line:4,column:87032},end:{line:4,column:87034}},{start:{line:4,column:87035},end:{line:4,column:87036}}],line:4},"1525":{loc:{start:{line:4,column:87072},end:{line:4,column:87122}},type:"cond-expr",locations:[{start:{line:4,column:87074},end:{line:4,column:87108}},{start:{line:4,column:87109},end:{line:4,column:87122}}],line:4},"1526":{loc:{start:{line:4,column:87163},end:{line:4,column:87229}},type:"cond-expr",locations:[{start:{line:4,column:87165},end:{line:4,column:87210}},{start:{line:4,column:87211},end:{line:4,column:87229}}],line:4},"1527":{loc:{start:{line:4,column:87268},end:{line:4,column:87324}},type:"cond-expr",locations:[{start:{line:4,column:87270},end:{line:4,column:87307}},{start:{line:4,column:87308},end:{line:4,column:87324}}],line:4},"1528":{loc:{start:{line:4,column:87354},end:{line:4,column:87589}},type:"if",locations:[{start:{line:4,column:87354},end:{line:4,column:87589}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1529":{loc:{start:{line:4,column:87508},end:{line:4,column:87588}},type:"binary-expr",locations:[{start:{line:4,column:87508},end:{line:4,column:87524}},{start:{line:4,column:87527},end:{line:4,column:87587}}],line:4},"1530":{loc:{start:{line:4,column:87589},end:{line:4,column:87604}},type:"binary-expr",locations:[{start:{line:4,column:87589},end:{line:4,column:87590}},{start:{line:4,column:87593},end:{line:4,column:87603}}],line:4},"1531":{loc:{start:{line:4,column:87632},end:{line:4,column:87649}},type:"binary-expr",locations:[{start:{line:4,column:87632},end:{line:4,column:87636}},{start:{line:4,column:87638},end:{line:4,column:87649}}],line:4},"1532":{loc:{start:{line:4,column:87757},end:{line:4,column:87858}},type:"cond-expr",locations:[{start:{line:4,column:87776},end:{line:4,column:87845}},{start:{line:4,column:87847},end:{line:4,column:87858}}],line:4},"1533":{loc:{start:{line:4,column:87787},end:{line:4,column:87794}},type:"binary-expr",locations:[{start:{line:4,column:87787},end:{line:4,column:87788}},{start:{line:4,column:87790},end:{line:4,column:87794}}],line:4},"1534":{loc:{start:{line:4,column:87795},end:{line:4,column:87802}},type:"binary-expr",locations:[{start:{line:4,column:87795},end:{line:4,column:87796}},{start:{line:4,column:87798},end:{line:4,column:87802}}],line:4},"1535":{loc:{start:{line:4,column:87804},end:{line:4,column:87837}},type:"binary-expr",locations:[{start:{line:4,column:87804},end:{line:4,column:87808}},{start:{line:4,column:87810},end:{line:4,column:87837}}],line:4},"1536":{loc:{start:{line:4,column:87879},end:{line:4,column:87895}},type:"binary-expr",locations:[{start:{line:4,column:87879},end:{line:4,column:87884}},{start:{line:4,column:87886},end:{line:4,column:87895}}],line:4},"1537":{loc:{start:{line:4,column:87896},end:{line:4,column:87914}},type:"binary-expr",locations:[{start:{line:4,column:87896},end:{line:4,column:87903}},{start:{line:4,column:87905},end:{line:4,column:87914}}],line:4},"1538":{loc:{start:{line:4,column:87964},end:{line:4,column:88136}},type:"if",locations:[{start:{line:4,column:87964},end:{line:4,column:88136}},{start:{line:4,column:88124},end:{line:4,column:88136}}],line:4},"1539":{loc:{start:{line:4,column:87986},end:{line:4,column:88118}},type:"if",locations:[{start:{line:4,column:87986},end:{line:4,column:88118}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1540":{loc:{start:{line:4,column:88000},end:{line:4,column:88007}},type:"binary-expr",locations:[{start:{line:4,column:88000},end:{line:4,column:88001}},{start:{line:4,column:88003},end:{line:4,column:88007}}],line:4},"1541":{loc:{start:{line:4,column:88008},end:{line:4,column:88015}},type:"binary-expr",locations:[{start:{line:4,column:88008},end:{line:4,column:88009}},{start:{line:4,column:88011},end:{line:4,column:88015}}],line:4},"1542":{loc:{start:{line:4,column:88163},end:{line:4,column:88181}},type:"binary-expr",locations:[{start:{line:4,column:88163},end:{line:4,column:88170}},{start:{line:4,column:88172},end:{line:4,column:88181}}],line:4},"1543":{loc:{start:{line:4,column:88462},end:{line:4,column:88466}},type:"binary-expr",locations:[{start:{line:4,column:88462},end:{line:4,column:88463}},{start:{line:4,column:88465},end:{line:4,column:88466}}],line:4},"1544":{loc:{start:{line:4,column:88593},end:{line:4,column:88623}},type:"binary-expr",locations:[{start:{line:4,column:88593},end:{line:4,column:88596}},{start:{line:4,column:88598},end:{line:4,column:88623}}],line:4},"1545":{loc:{start:{line:4,column:88645},end:{line:4,column:88680}},type:"binary-expr",locations:[{start:{line:4,column:88645},end:{line:4,column:88648}},{start:{line:4,column:88650},end:{line:4,column:88680}}],line:4},"1546":{loc:{start:{line:4,column:88890},end:{line:4,column:88913}},type:"binary-expr",locations:[{start:{line:4,column:88890},end:{line:4,column:88909}},{start:{line:4,column:88911},end:{line:4,column:88913}}],line:4},"1547":{loc:{start:{line:4,column:88962},end:{line:4,column:88989}},type:"if",locations:[{start:{line:4,column:88962},end:{line:4,column:88989}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1548":{loc:{start:{line:4,column:89052},end:{line:4,column:89158}},type:"if",locations:[{start:{line:4,column:89052},end:{line:4,column:89158}},{start:{line:4,column:89076},end:{line:4,column:89158}}],line:4},"1549":{loc:{start:{line:4,column:89076},end:{line:4,column:89158}},type:"if",locations:[{start:{line:4,column:89076},end:{line:4,column:89158}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1550":{loc:{start:{line:4,column:89257},end:{line:4,column:89274}},type:"binary-expr",locations:[{start:{line:4,column:89257},end:{line:4,column:89269}},{start:{line:4,column:89271},end:{line:4,column:89274}}],line:4},"1551":{loc:{start:{line:4,column:89335},end:{line:4,column:89339}},type:"binary-expr",locations:[{start:{line:4,column:89335},end:{line:4,column:89336}},{start:{line:4,column:89338},end:{line:4,column:89339}}],line:4},"1552":{loc:{start:{line:4,column:89870},end:{line:4,column:89937}},type:"cond-expr",locations:[{start:{line:4,column:89895},end:{line:4,column:89912}},{start:{line:4,column:89913},end:{line:4,column:89937}}],line:4},"1553":{loc:{start:{line:4,column:90260},end:{line:4,column:90266}},type:"binary-expr",locations:[{start:{line:4,column:90260},end:{line:4,column:90261}},{start:{line:4,column:90263},end:{line:4,column:90266}}],line:4},"1554":{loc:{start:{line:4,column:90442},end:{line:4,column:90451}},type:"default-arg",locations:[{start:{line:4,column:90444},end:{line:4,column:90451}}],line:4},"1555":{loc:{start:{line:4,column:90543},end:{line:4,column:90604}},type:"if",locations:[{start:{line:4,column:90543},end:{line:4,column:90604}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1556":{loc:{start:{line:4,column:90610},end:{line:4,column:90667}},type:"cond-expr",locations:[{start:{line:4,column:90612},end:{line:4,column:90615}},{start:{line:4,column:90616},end:{line:4,column:90667}}],line:4},"1557":{loc:{start:{line:4,column:90716},end:{line:4,column:90751}},type:"cond-expr",locations:[{start:{line:4,column:90722},end:{line:4,column:90728}},{start:{line:4,column:90729},end:{line:4,column:90751}}],line:4},"1558":{loc:{start:{line:4,column:90754},end:{line:4,column:90767}},type:"binary-expr",locations:[{start:{line:4,column:90754},end:{line:4,column:90755}},{start:{line:4,column:90757},end:{line:4,column:90767}}],line:4},"1559":{loc:{start:{line:4,column:91035},end:{line:4,column:91077}},type:"binary-expr",locations:[{start:{line:4,column:91035},end:{line:4,column:91055}},{start:{line:4,column:91058},end:{line:4,column:91076}}],line:4},"1560":{loc:{start:{line:4,column:91125},end:{line:4,column:91228}},type:"cond-expr",locations:[{start:{line:4,column:91153},end:{line:4,column:91212}},{start:{line:4,column:91213},end:{line:4,column:91228}}],line:4},"1561":{loc:{start:{line:4,column:91243},end:{line:4,column:91308}},type:"if",locations:[{start:{line:4,column:91243},end:{line:4,column:91308}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1562":{loc:{start:{line:4,column:91520},end:{line:4,column:91642}},type:"binary-expr",locations:[{start:{line:4,column:91520},end:{line:4,column:91548}},{start:{line:4,column:91550},end:{line:4,column:91575}},{start:{line:4,column:91578},end:{line:4,column:91641}}],line:4},"1563":{loc:{start:{line:4,column:91656},end:{line:4,column:91683}},type:"binary-expr",locations:[{start:{line:4,column:91656},end:{line:4,column:91675}},{start:{line:4,column:91677},end:{line:4,column:91683}}],line:4},"1564":{loc:{start:{line:4,column:91799},end:{line:4,column:91874}},type:"binary-expr",locations:[{start:{line:4,column:91799},end:{line:4,column:91817}},{start:{line:4,column:91820},end:{line:4,column:91873}}],line:4},"1565":{loc:{start:{line:4,column:91884},end:{line:4,column:92159}},type:"if",locations:[{start:{line:4,column:91884},end:{line:4,column:92159}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1566":{loc:{start:{line:4,column:92008},end:{line:4,column:92031}},type:"if",locations:[{start:{line:4,column:92008},end:{line:4,column:92031}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1567":{loc:{start:{line:4,column:92011},end:{line:4,column:92021}},type:"binary-expr",locations:[{start:{line:4,column:92011},end:{line:4,column:92013}},{start:{line:4,column:92015},end:{line:4,column:92021}}],line:4},"1568":{loc:{start:{line:4,column:92037},end:{line:4,column:92065}},type:"cond-expr",locations:[{start:{line:4,column:92062},end:{line:4,column:92063}},{start:{line:4,column:92064},end:{line:4,column:92065}}],line:4},"1569":{loc:{start:{line:4,column:92037},end:{line:4,column:92061}},type:"binary-expr",locations:[{start:{line:4,column:92037},end:{line:4,column:92038}},{start:{line:4,column:92040},end:{line:4,column:92061}}],line:4},"1570":{loc:{start:{line:4,column:92079},end:{line:4,column:92158}},type:"if",locations:[{start:{line:4,column:92079},end:{line:4,column:92158}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1571":{loc:{start:{line:4,column:92159},end:{line:4,column:92227}},type:"binary-expr",locations:[{start:{line:4,column:92159},end:{line:4,column:92160}},{start:{line:4,column:92163},end:{line:4,column:92226}}],line:4},"1572":{loc:{start:{line:4,column:92228},end:{line:4,column:92302}},type:"binary-expr",locations:[{start:{line:4,column:92228},end:{line:4,column:92245}},{start:{line:4,column:92248},end:{line:4,column:92301}}],line:4},"1573":{loc:{start:{line:4,column:92360},end:{line:4,column:92454}},type:"if",locations:[{start:{line:4,column:92360},end:{line:4,column:92454}},{start:{line:4,column:92435},end:{line:4,column:92454}}],line:4},"1574":{loc:{start:{line:4,column:92762},end:{line:4,column:92937}},type:"if",locations:[{start:{line:4,column:92762},end:{line:4,column:92937}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1575":{loc:{start:{line:4,column:93032},end:{line:4,column:93071}},type:"if",locations:[{start:{line:4,column:93032},end:{line:4,column:93071}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1576":{loc:{start:{line:4,column:93092},end:{line:4,column:93128}},type:"binary-expr",locations:[{start:{line:4,column:93092},end:{line:4,column:93101}},{start:{line:4,column:93103},end:{line:4,column:93115}},{start:{line:4,column:93117},end:{line:4,column:93128}}],line:4},"1577":{loc:{start:{line:4,column:93211},end:{line:4,column:93215}},type:"binary-expr",locations:[{start:{line:4,column:93211},end:{line:4,column:93212}},{start:{line:4,column:93214},end:{line:4,column:93215}}],line:4},"1578":{loc:{start:{line:4,column:93336},end:{line:4,column:93355}},type:"binary-expr",locations:[{start:{line:4,column:93336},end:{line:4,column:93340}},{start:{line:4,column:93342},end:{line:4,column:93355}}],line:4},"1579":{loc:{start:{line:4,column:93394},end:{line:4,column:93441}},type:"if",locations:[{start:{line:4,column:93394},end:{line:4,column:93441}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1580":{loc:{start:{line:4,column:93588},end:{line:4,column:93674}},type:"if",locations:[{start:{line:4,column:93588},end:{line:4,column:93674}},{start:{line:4,column:93658},end:{line:4,column:93674}}],line:4},"1581":{loc:{start:{line:4,column:93747},end:{line:4,column:93800}},type:"cond-expr",locations:[{start:{line:4,column:93769},end:{line:4,column:93770}},{start:{line:4,column:93771},end:{line:4,column:93800}}],line:4},"1582":{loc:{start:{line:4,column:93747},end:{line:4,column:93768}},type:"binary-expr",locations:[{start:{line:4,column:93747},end:{line:4,column:93752}},{start:{line:4,column:93754},end:{line:4,column:93768}}],line:4},"1583":{loc:{start:{line:4,column:93771},end:{line:4,column:93800}},type:"cond-expr",locations:[{start:{line:4,column:93796},end:{line:4,column:93798}},{start:{line:4,column:93799},end:{line:4,column:93800}}],line:4},"1584":{loc:{start:{line:4,column:93856},end:{line:4,column:94900}},type:"if",locations:[{start:{line:4,column:93856},end:{line:4,column:94900}},{start:{line:4,column:94466},end:{line:4,column:94900}}],line:4},"1585":{loc:{start:{line:4,column:93911},end:{line:4,column:93921}},type:"binary-expr",locations:[{start:{line:4,column:93911},end:{line:4,column:93915}},{start:{line:4,column:93917},end:{line:4,column:93921}}],line:4},"1586":{loc:{start:{line:4,column:93961},end:{line:4,column:94008}},type:"if",locations:[{start:{line:4,column:93961},end:{line:4,column:94008}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1587":{loc:{start:{line:4,column:93971},end:{line:4,column:93994}},type:"binary-expr",locations:[{start:{line:4,column:93971},end:{line:4,column:93974}},{start:{line:4,column:93976},end:{line:4,column:93994}}],line:4},"1588":{loc:{start:{line:4,column:94045},end:{line:4,column:94096}},type:"if",locations:[{start:{line:4,column:94045},end:{line:4,column:94096}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1589":{loc:{start:{line:4,column:94055},end:{line:4,column:94078}},type:"binary-expr",locations:[{start:{line:4,column:94055},end:{line:4,column:94058}},{start:{line:4,column:94060},end:{line:4,column:94078}}],line:4},"1590":{loc:{start:{line:4,column:94128},end:{line:4,column:94263}},type:"if",locations:[{start:{line:4,column:94128},end:{line:4,column:94263}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1591":{loc:{start:{line:4,column:94162},end:{line:4,column:94230}},type:"cond-expr",locations:[{start:{line:4,column:94179},end:{line:4,column:94217}},{start:{line:4,column:94219},end:{line:4,column:94230}}],line:4},"1592":{loc:{start:{line:4,column:94263},end:{line:4,column:94428}},type:"if",locations:[{start:{line:4,column:94263},end:{line:4,column:94428}},{start:{line:4,column:94338},end:{line:4,column:94428}}],line:4},"1593":{loc:{start:{line:4,column:94338},end:{line:4,column:94428}},type:"if",locations:[{start:{line:4,column:94338},end:{line:4,column:94428}},{start:{line:4,column:94380},end:{line:4,column:94428}}],line:4},"1594":{loc:{start:{line:4,column:94466},end:{line:4,column:94900}},type:"if",locations:[{start:{line:4,column:94466},end:{line:4,column:94900}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1595":{loc:{start:{line:4,column:94538},end:{line:4,column:94551}},type:"binary-expr",locations:[{start:{line:4,column:94538},end:{line:4,column:94545}},{start:{line:4,column:94547},end:{line:4,column:94551}}],line:4},"1596":{loc:{start:{line:4,column:94594},end:{line:4,column:94847}},type:"if",locations:[{start:{line:4,column:94594},end:{line:4,column:94847}},{start:{line:4,column:94646},end:{line:4,column:94847}}],line:4},"1597":{loc:{start:{line:4,column:94603},end:{line:4,column:94626}},type:"binary-expr",locations:[{start:{line:4,column:94603},end:{line:4,column:94606}},{start:{line:4,column:94608},end:{line:4,column:94626}}],line:4},"1598":{loc:{start:{line:4,column:94687},end:{line:4,column:94846}},type:"if",locations:[{start:{line:4,column:94687},end:{line:4,column:94846}},{start:{line:4,column:94745},end:{line:4,column:94846}}],line:4},"1599":{loc:{start:{line:4,column:94745},end:{line:4,column:94846}},type:"if",locations:[{start:{line:4,column:94745},end:{line:4,column:94846}},{start:{line:4,column:94807},end:{line:4,column:94846}}],line:4},"1600":{loc:{start:{line:4,column:94994},end:{line:4,column:95055}},type:"cond-expr",locations:[{start:{line:4,column:95016},end:{line:4,column:95051}},{start:{line:4,column:95053},end:{line:4,column:95055}}],line:4},"1601":{loc:{start:{line:4,column:94994},end:{line:4,column:95014}},type:"binary-expr",locations:[{start:{line:4,column:94994},end:{line:4,column:95004}},{start:{line:4,column:95006},end:{line:4,column:95014}}],line:4},"1602":{loc:{start:{line:4,column:95079},end:{line:4,column:95157}},type:"if",locations:[{start:{line:4,column:95079},end:{line:4,column:95157}},{start:{line:4,column:95122},end:{line:4,column:95157}}],line:4},"1603":{loc:{start:{line:4,column:95325},end:{line:4,column:95350}},type:"if",locations:[{start:{line:4,column:95325},end:{line:4,column:95350}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1604":{loc:{start:{line:4,column:95381},end:{line:4,column:95499}},type:"cond-expr",locations:[{start:{line:4,column:95421},end:{line:4,column:95477}},{start:{line:4,column:95479},end:{line:4,column:95499}}],line:4},"1605":{loc:{start:{line:4,column:95381},end:{line:4,column:95419}},type:"binary-expr",locations:[{start:{line:4,column:95381},end:{line:4,column:95400}},{start:{line:4,column:95402},end:{line:4,column:95419}}],line:4},"1606":{loc:{start:{line:4,column:95544},end:{line:4,column:95710}},type:"if",locations:[{start:{line:4,column:95544},end:{line:4,column:95710}},{start:{line:4,column:95691},end:{line:4,column:95710}}],line:4},"1607":{loc:{start:{line:4,column:95590},end:{line:4,column:95631}},type:"binary-expr",locations:[{start:{line:4,column:95590},end:{line:4,column:95609}},{start:{line:4,column:95612},end:{line:4,column:95630}}],line:4},"1608":{loc:{start:{line:4,column:95748},end:{line:4,column:95829}},type:"if",locations:[{start:{line:4,column:95748},end:{line:4,column:95829}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1609":{loc:{start:{line:4,column:96128},end:{line:4,column:96144}},type:"cond-expr",locations:[{start:{line:4,column:96137},end:{line:4,column:96141}},{start:{line:4,column:96142},end:{line:4,column:96144}}],line:4},"1610":{loc:{start:{line:4,column:96147},end:{line:4,column:96170}},type:"cond-expr",locations:[{start:{line:4,column:96154},end:{line:4,column:96163}},{start:{line:4,column:96164},end:{line:4,column:96170}}],line:4},"1611":{loc:{start:{line:4,column:96175},end:{line:4,column:96402}},type:"if",locations:[{start:{line:4,column:96175},end:{line:4,column:96402}},{start:{line:4,column:96352},end:{line:4,column:96402}}],line:4},"1612":{loc:{start:{line:4,column:96207},end:{line:4,column:96332}},type:"if",locations:[{start:{line:4,column:96207},end:{line:4,column:96332}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1613":{loc:{start:{line:4,column:96210},end:{line:4,column:96229}},type:"binary-expr",locations:[{start:{line:4,column:96210},end:{line:4,column:96220}},{start:{line:4,column:96222},end:{line:4,column:96229}}],line:4},"1614":{loc:{start:{line:4,column:96352},end:{line:4,column:96402}},type:"if",locations:[{start:{line:4,column:96352},end:{line:4,column:96402}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1615":{loc:{start:{line:4,column:96381},end:{line:4,column:96401}},type:"binary-expr",locations:[{start:{line:4,column:96381},end:{line:4,column:96391}},{start:{line:4,column:96394},end:{line:4,column:96400}}],line:4},"1616":{loc:{start:{line:4,column:96814},end:{line:4,column:96833}},type:"cond-expr",locations:[{start:{line:4,column:96816},end:{line:4,column:96831}},{start:{line:4,column:96832},end:{line:4,column:96833}}],line:4},"1617":{loc:{start:{line:4,column:96898},end:{line:4,column:96939}},type:"binary-expr",locations:[{start:{line:4,column:96898},end:{line:4,column:96899}},{start:{line:4,column:96901},end:{line:4,column:96939}}],line:4},"1618":{loc:{start:{line:4,column:97734},end:{line:4,column:97817}},type:"if",locations:[{start:{line:4,column:97734},end:{line:4,column:97817}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1619":{loc:{start:{line:4,column:97941},end:{line:4,column:98046}},type:"if",locations:[{start:{line:4,column:97941},end:{line:4,column:98046}},{start:{line:4,column:98021},end:{line:4,column:98046}}],line:4},"1620":{loc:{start:{line:4,column:98069},end:{line:4,column:98314}},type:"if",locations:[{start:{line:4,column:98069},end:{line:4,column:98314}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1621":{loc:{start:{line:4,column:98155},end:{line:4,column:98313}},type:"if",locations:[{start:{line:4,column:98155},end:{line:4,column:98313}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1622":{loc:{start:{line:4,column:98189},end:{line:4,column:98312}},type:"if",locations:[{start:{line:4,column:98189},end:{line:4,column:98312}},{start:{line:4,column:98280},end:{line:4,column:98312}}],line:4},"1623":{loc:{start:{line:4,column:98280},end:{line:4,column:98304}},type:"binary-expr",locations:[{start:{line:4,column:98280},end:{line:4,column:98297}},{start:{line:4,column:98299},end:{line:4,column:98304}}],line:4},"1624":{loc:{start:{line:4,column:98375},end:{line:4,column:98397}},type:"if",locations:[{start:{line:4,column:98375},end:{line:4,column:98397}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1625":{loc:{start:{line:4,column:98416},end:{line:4,column:98430}},type:"cond-expr",locations:[{start:{line:4,column:98418},end:{line:4,column:98423}},{start:{line:4,column:98424},end:{line:4,column:98430}}],line:4},"1626":{loc:{start:{line:4,column:98431},end:{line:4,column:98579}},type:"if",locations:[{start:{line:4,column:98431},end:{line:4,column:98579}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1627":{loc:{start:{line:4,column:98434},end:{line:4,column:98505}},type:"binary-expr",locations:[{start:{line:4,column:98434},end:{line:4,column:98435}},{start:{line:4,column:98437},end:{line:4,column:98438}},{start:{line:4,column:98440},end:{line:4,column:98467}},{start:{line:4,column:98469},end:{line:4,column:98505}}],line:4},"1628":{loc:{start:{line:4,column:98597},end:{line:4,column:98619}},type:"if",locations:[{start:{line:4,column:98597},end:{line:4,column:98619}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1629":{loc:{start:{line:4,column:98638},end:{line:4,column:98652}},type:"cond-expr",locations:[{start:{line:4,column:98640},end:{line:4,column:98645}},{start:{line:4,column:98646},end:{line:4,column:98652}}],line:4},"1630":{loc:{start:{line:4,column:98653},end:{line:4,column:98713}},type:"binary-expr",locations:[{start:{line:4,column:98653},end:{line:4,column:98654}},{start:{line:4,column:98656},end:{line:4,column:98663}},{start:{line:4,column:98665},end:{line:4,column:98679}},{start:{line:4,column:98682},end:{line:4,column:98712}}],line:4},"1631":{loc:{start:{line:4,column:98846},end:{line:4,column:98896}},type:"if",locations:[{start:{line:4,column:98846},end:{line:4,column:98896}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1632":{loc:{start:{line:4,column:98938},end:{line:4,column:98955}},type:"cond-expr",locations:[{start:{line:4,column:98940},end:{line:4,column:98947}},{start:{line:4,column:98948},end:{line:4,column:98955}}],line:4},"1633":{loc:{start:{line:4,column:99005},end:{line:4,column:99056}},type:"cond-expr",locations:[{start:{line:4,column:99023},end:{line:4,column:99046}},{start:{line:4,column:99047},end:{line:4,column:99056}}],line:4},"1634":{loc:{start:{line:4,column:99057},end:{line:4,column:99224}},type:"if",locations:[{start:{line:4,column:99057},end:{line:4,column:99224}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1635":{loc:{start:{line:4,column:99094},end:{line:4,column:99223}},type:"if",locations:[{start:{line:4,column:99094},end:{line:4,column:99223}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1636":{loc:{start:{line:4,column:99097},end:{line:4,column:99117}},type:"binary-expr",locations:[{start:{line:4,column:99097},end:{line:4,column:99098}},{start:{line:4,column:99100},end:{line:4,column:99117}}],line:4},"1637":{loc:{start:{line:4,column:99271},end:{line:4,column:99327}},type:"if",locations:[{start:{line:4,column:99271},end:{line:4,column:99327}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1638":{loc:{start:{line:4,column:99327},end:{line:4,column:99343}},type:"binary-expr",locations:[{start:{line:4,column:99327},end:{line:4,column:99334}},{start:{line:4,column:99336},end:{line:4,column:99343}}],line:4},"1639":{loc:{start:{line:4,column:99389},end:{line:4,column:99415}},type:"binary-expr",locations:[{start:{line:4,column:99389},end:{line:4,column:99406}},{start:{line:4,column:99408},end:{line:4,column:99415}}],line:4},"1640":{loc:{start:{line:4,column:99416},end:{line:4,column:99427}},type:"binary-expr",locations:[{start:{line:4,column:99416},end:{line:4,column:99421}},{start:{line:4,column:99423},end:{line:4,column:99427}}],line:4},"1641":{loc:{start:{line:4,column:99433},end:{line:4,column:99503}},type:"binary-expr",locations:[{start:{line:4,column:99433},end:{line:4,column:99459}},{start:{line:4,column:99461},end:{line:4,column:99466}},{start:{line:4,column:99468},end:{line:4,column:99503}}],line:4},"1642":{loc:{start:{line:4,column:99504},end:{line:4,column:99572}},type:"binary-expr",locations:[{start:{line:4,column:99504},end:{line:4,column:99529}},{start:{line:4,column:99531},end:{line:4,column:99536}},{start:{line:4,column:99538},end:{line:4,column:99572}}],line:4},"1643":{loc:{start:{line:4,column:99670},end:{line:4,column:99713}},type:"cond-expr",locations:[{start:{line:4,column:99688},end:{line:4,column:99703}},{start:{line:4,column:99704},end:{line:4,column:99713}}],line:4},"1644":{loc:{start:{line:4,column:99736},end:{line:4,column:99752}},type:"binary-expr",locations:[{start:{line:4,column:99736},end:{line:4,column:99743}},{start:{line:4,column:99745},end:{line:4,column:99752}}],line:4},"1645":{loc:{start:{line:4,column:99795},end:{line:4,column:99806}},type:"binary-expr",locations:[{start:{line:4,column:99795},end:{line:4,column:99800}},{start:{line:4,column:99802},end:{line:4,column:99806}}],line:4},"1646":{loc:{start:{line:4,column:99969},end:{line:4,column:100019}},type:"if",locations:[{start:{line:4,column:99969},end:{line:4,column:100019}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1647":{loc:{start:{line:4,column:100141},end:{line:4,column:100157}},type:"cond-expr",locations:[{start:{line:4,column:100154},end:{line:4,column:100155}},{start:{line:4,column:100156},end:{line:4,column:100157}}],line:4},"1648":{loc:{start:{line:4,column:100141},end:{line:4,column:100153}},type:"binary-expr",locations:[{start:{line:4,column:100141},end:{line:4,column:100146}},{start:{line:4,column:100148},end:{line:4,column:100153}}],line:4},"1649":{loc:{start:{line:4,column:101036},end:{line:4,column:101050}},type:"if",locations:[{start:{line:4,column:101036},end:{line:4,column:101050}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1650":{loc:{start:{line:4,column:101072},end:{line:4,column:101094}},type:"if",locations:[{start:{line:4,column:101072},end:{line:4,column:101094}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1651":{loc:{start:{line:4,column:101094},end:{line:4,column:101116}},type:"if",locations:[{start:{line:4,column:101094},end:{line:4,column:101116}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1652":{loc:{start:{line:4,column:101158},end:{line:4,column:101241}},type:"binary-expr",locations:[{start:{line:4,column:101158},end:{line:4,column:101165}},{start:{line:4,column:101168},end:{line:4,column:101240}}],line:4},"1653":{loc:{start:{line:4,column:101174},end:{line:4,column:101240}},type:"binary-expr",locations:[{start:{line:4,column:101174},end:{line:4,column:101179}},{start:{line:4,column:101181},end:{line:4,column:101193}},{start:{line:4,column:101195},end:{line:4,column:101215}},{start:{line:4,column:101217},end:{line:4,column:101240}}],line:4},"1654":{loc:{start:{line:4,column:102067},end:{line:4,column:102073}},type:"binary-expr",locations:[{start:{line:4,column:102067},end:{line:4,column:102069}},{start:{line:4,column:102071},end:{line:4,column:102073}}],line:4},"1655":{loc:{start:{line:4,column:102171},end:{line:4,column:102229}},type:"binary-expr",locations:[{start:{line:4,column:102171},end:{line:4,column:102189}},{start:{line:4,column:102192},end:{line:4,column:102228}}],line:4},"1656":{loc:{start:{line:4,column:102349},end:{line:4,column:102394}},type:"binary-expr",locations:[{start:{line:4,column:102350},end:{line:4,column:102358}},{start:{line:4,column:102360},end:{line:4,column:102361}},{start:{line:4,column:102364},end:{line:4,column:102394}}],line:4},"1657":{loc:{start:{line:4,column:102441},end:{line:4,column:102711}},type:"if",locations:[{start:{line:4,column:102441},end:{line:4,column:102711}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1658":{loc:{start:{line:4,column:102444},end:{line:4,column:102502}},type:"binary-expr",locations:[{start:{line:4,column:102445},end:{line:4,column:102453}},{start:{line:4,column:102455},end:{line:4,column:102456}},{start:{line:4,column:102460},end:{line:4,column:102501}}],line:4},"1659":{loc:{start:{line:4,column:102474},end:{line:4,column:102501}},type:"binary-expr",locations:[{start:{line:4,column:102474},end:{line:4,column:102493}},{start:{line:4,column:102496},end:{line:4,column:102500}}],line:4},"1660":{loc:{start:{line:4,column:102557},end:{line:4,column:102651}},type:"if",locations:[{start:{line:4,column:102557},end:{line:4,column:102651}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1661":{loc:{start:{line:4,column:102560},end:{line:4,column:102571}},type:"binary-expr",locations:[{start:{line:4,column:102560},end:{line:4,column:102561}},{start:{line:4,column:102563},end:{line:4,column:102571}}],line:4},"1662":{loc:{start:{line:4,column:102651},end:{line:4,column:102710}},type:"if",locations:[{start:{line:4,column:102651},end:{line:4,column:102710}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1663":{loc:{start:{line:4,column:102654},end:{line:4,column:102665}},type:"binary-expr",locations:[{start:{line:4,column:102654},end:{line:4,column:102655}},{start:{line:4,column:102657},end:{line:4,column:102665}}],line:4},"1664":{loc:{start:{line:4,column:102724},end:{line:4,column:102727}},type:"default-arg",locations:[{start:{line:4,column:102726},end:{line:4,column:102727}}],line:4},"1665":{loc:{start:{line:4,column:102817},end:{line:4,column:102842}},type:"if",locations:[{start:{line:4,column:102817},end:{line:4,column:102842}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1666":{loc:{start:{line:4,column:102842},end:{line:4,column:102881}},type:"if",locations:[{start:{line:4,column:102842},end:{line:4,column:102881}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1667":{loc:{start:{line:4,column:102845},end:{line:4,column:102872}},type:"cond-expr",locations:[{start:{line:4,column:102854},end:{line:4,column:102864}},{start:{line:4,column:102865},end:{line:4,column:102872}}],line:4},"1668":{loc:{start:{line:4,column:102922},end:{line:4,column:103121}},type:"if",locations:[{start:{line:4,column:102922},end:{line:4,column:103121}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1669":{loc:{start:{line:4,column:102946},end:{line:4,column:102958}},type:"cond-expr",locations:[{start:{line:4,column:102948},end:{line:4,column:102956}},{start:{line:4,column:102957},end:{line:4,column:102958}}],line:4},"1670":{loc:{start:{line:4,column:103023},end:{line:4,column:103111}},type:"if",locations:[{start:{line:4,column:103023},end:{line:4,column:103111}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1671":{loc:{start:{line:4,column:103046},end:{line:4,column:103057}},type:"cond-expr",locations:[{start:{line:4,column:103048},end:{line:4,column:103055}},{start:{line:4,column:103056},end:{line:4,column:103057}}],line:4},"1672":{loc:{start:{line:4,column:103058},end:{line:4,column:103110}},type:"binary-expr",locations:[{start:{line:4,column:103058},end:{line:4,column:103066}},{start:{line:4,column:103069},end:{line:4,column:103109}}],line:4},"1673":{loc:{start:{line:4,column:103069},end:{line:4,column:103102}},type:"cond-expr",locations:[{start:{line:4,column:103074},end:{line:4,column:103095}},{start:{line:4,column:103096},end:{line:4,column:103102}}],line:4},"1674":{loc:{start:{line:4,column:103136},end:{line:4,column:103139}},type:"default-arg",locations:[{start:{line:4,column:103138},end:{line:4,column:103139}}],line:4},"1675":{loc:{start:{line:4,column:103167},end:{line:4,column:103177}},type:"cond-expr",locations:[{start:{line:4,column:103169},end:{line:4,column:103172}},{start:{line:4,column:103173},end:{line:4,column:103177}}],line:4},"1676":{loc:{start:{line:4,column:103178},end:{line:4,column:103210}},type:"binary-expr",locations:[{start:{line:4,column:103178},end:{line:4,column:103186}},{start:{line:4,column:103188},end:{line:4,column:103210}}],line:4},"1677":{loc:{start:{line:4,column:103234},end:{line:4,column:103241}},type:"binary-expr",locations:[{start:{line:4,column:103234},end:{line:4,column:103235}},{start:{line:4,column:103237},end:{line:4,column:103241}}],line:4},"1678":{loc:{start:{line:4,column:103243},end:{line:4,column:103280}},type:"binary-expr",locations:[{start:{line:4,column:103243},end:{line:4,column:103262}},{start:{line:4,column:103265},end:{line:4,column:103279}}],line:4},"1679":{loc:{start:{line:4,column:103292},end:{line:4,column:103304}},type:"binary-expr",locations:[{start:{line:4,column:103292},end:{line:4,column:103298}},{start:{line:4,column:103300},end:{line:4,column:103304}}],line:4},"1680":{loc:{start:{line:4,column:103305},end:{line:4,column:103385}},type:"cond-expr",locations:[{start:{line:4,column:103355},end:{line:4,column:103364}},{start:{line:4,column:103365},end:{line:4,column:103385}}],line:4},"1681":{loc:{start:{line:4,column:103305},end:{line:4,column:103354}},type:"binary-expr",locations:[{start:{line:4,column:103305},end:{line:4,column:103344}},{start:{line:4,column:103346},end:{line:4,column:103354}}],line:4},"1682":{loc:{start:{line:4,column:103365},end:{line:4,column:103385}},type:"binary-expr",locations:[{start:{line:4,column:103365},end:{line:4,column:103366}},{start:{line:4,column:103368},end:{line:4,column:103374}},{start:{line:4,column:103376},end:{line:4,column:103385}}],line:4},"1683":{loc:{start:{line:4,column:103652},end:{line:4,column:103794}},type:"if",locations:[{start:{line:4,column:103652},end:{line:4,column:103794}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1684":{loc:{start:{line:4,column:103655},end:{line:4,column:103698}},type:"binary-expr",locations:[{start:{line:4,column:103655},end:{line:4,column:103662}},{start:{line:4,column:103664},end:{line:4,column:103698}}],line:4},"1685":{loc:{start:{line:4,column:103700},end:{line:4,column:103785}},type:"if",locations:[{start:{line:4,column:103700},end:{line:4,column:103785}},{start:{line:4,column:103736},end:{line:4,column:103785}}],line:4},"1686":{loc:{start:{line:4,column:104206},end:{line:4,column:104239}},type:"cond-expr",locations:[{start:{line:4,column:104208},end:{line:4,column:104223}},{start:{line:4,column:104224},end:{line:4,column:104239}}],line:4},"1687":{loc:{start:{line:4,column:104274},end:{line:4,column:104349}},type:"if",locations:[{start:{line:4,column:104274},end:{line:4,column:104349}},{start:{line:4,column:104345},end:{line:4,column:104349}}],line:4},"1688":{loc:{start:{line:4,column:104310},end:{line:4,column:104339}},type:"binary-expr",locations:[{start:{line:4,column:104311},end:{line:4,column:104319}},{start:{line:4,column:104321},end:{line:4,column:104330}},{start:{line:4,column:104334},end:{line:4,column:104338}}],line:4},"1689":{loc:{start:{line:4,column:104349},end:{line:4,column:104552}},type:"if",locations:[{start:{line:4,column:104349},end:{line:4,column:104552}},{start:{line:4,column:104503},end:{line:4,column:104552}}],line:4},"1690":{loc:{start:{line:4,column:104354},end:{line:4,column:104498}},type:"if",locations:[{start:{line:4,column:104354},end:{line:4,column:104498}},{start:{line:4,column:104450},end:{line:4,column:104498}}],line:4},"1691":{loc:{start:{line:4,column:104396},end:{line:4,column:104424}},type:"binary-expr",locations:[{start:{line:4,column:104396},end:{line:4,column:104401}},{start:{line:4,column:104404},end:{line:4,column:104423}}],line:4},"1692":{loc:{start:{line:4,column:104465},end:{line:4,column:104493}},type:"binary-expr",locations:[{start:{line:4,column:104465},end:{line:4,column:104470}},{start:{line:4,column:104473},end:{line:4,column:104492}}],line:4},"1693":{loc:{start:{line:4,column:104518},end:{line:4,column:104547}},type:"cond-expr",locations:[{start:{line:4,column:104524},end:{line:4,column:104527}},{start:{line:4,column:104528},end:{line:4,column:104547}}],line:4},"1694":{loc:{start:{line:4,column:104552},end:{line:4,column:104574}},type:"binary-expr",locations:[{start:{line:4,column:104552},end:{line:4,column:104553}},{start:{line:4,column:104556},end:{line:4,column:104573}}],line:4},"1695":{loc:{start:{line:4,column:104625},end:{line:4,column:104662}},type:"cond-expr",locations:[{start:{line:4,column:104627},end:{line:4,column:104644}},{start:{line:4,column:104645},end:{line:4,column:104662}}],line:4},"1696":{loc:{start:{line:4,column:104692},end:{line:4,column:104728}},type:"cond-expr",locations:[{start:{line:4,column:104694},end:{line:4,column:104711}},{start:{line:4,column:104712},end:{line:4,column:104728}}],line:4},"1697":{loc:{start:{line:4,column:104729},end:{line:4,column:104789}},type:"binary-expr",locations:[{start:{line:4,column:104729},end:{line:4,column:104736}},{start:{line:4,column:104738},end:{line:4,column:104756}},{start:{line:4,column:104758},end:{line:4,column:104768}},{start:{line:4,column:104771},end:{line:4,column:104788}}],line:4},"1698":{loc:{start:{line:4,column:104837},end:{line:4,column:104850}},type:"cond-expr",locations:[{start:{line:4,column:104839},end:{line:4,column:104844}},{start:{line:4,column:104845},end:{line:4,column:104850}}],line:4},"1699":{loc:{start:{line:4,column:104861},end:{line:4,column:104879}},type:"binary-expr",locations:[{start:{line:4,column:104861},end:{line:4,column:104866}},{start:{line:4,column:104869},end:{line:4,column:104875}},{start:{line:4,column:104877},end:{line:4,column:104878}}],line:4},"1700":{loc:{start:{line:4,column:104902},end:{line:4,column:104938}},type:"binary-expr",locations:[{start:{line:4,column:104902},end:{line:4,column:104909}},{start:{line:4,column:104912},end:{line:4,column:104937}}],line:4},"1701":{loc:{start:{line:4,column:104924},end:{line:4,column:104937}},type:"cond-expr",locations:[{start:{line:4,column:104926},end:{line:4,column:104931}},{start:{line:4,column:104932},end:{line:4,column:104937}}],line:4},"1702":{loc:{start:{line:4,column:104941},end:{line:4,column:104954}},type:"cond-expr",locations:[{start:{line:4,column:104943},end:{line:4,column:104948}},{start:{line:4,column:104949},end:{line:4,column:104954}}],line:4},"1703":{loc:{start:{line:4,column:104955},end:{line:4,column:104980}},type:"binary-expr",locations:[{start:{line:4,column:104955},end:{line:4,column:104956}},{start:{line:4,column:104959},end:{line:4,column:104979}}],line:4},"1704":{loc:{start:{line:4,column:104966},end:{line:4,column:104979}},type:"cond-expr",locations:[{start:{line:4,column:104968},end:{line:4,column:104973}},{start:{line:4,column:104974},end:{line:4,column:104979}}],line:4},"1705":{loc:{start:{line:4,column:105005},end:{line:4,column:105107}},type:"cond-expr",locations:[{start:{line:4,column:105054},end:{line:4,column:105056}},{start:{line:4,column:105057},end:{line:4,column:105107}}],line:4},"1706":{loc:{start:{line:4,column:105005},end:{line:4,column:105053}},type:"binary-expr",locations:[{start:{line:4,column:105005},end:{line:4,column:105013}},{start:{line:4,column:105015},end:{line:4,column:105022}},{start:{line:4,column:105024},end:{line:4,column:105053}}],line:4},"1707":{loc:{start:{line:4,column:105025},end:{line:4,column:105048}},type:"cond-expr",locations:[{start:{line:4,column:105042},end:{line:4,column:105046}},{start:{line:4,column:105047},end:{line:4,column:105048}}],line:4},"1708":{loc:{start:{line:4,column:105057},end:{line:4,column:105107}},type:"cond-expr",locations:[{start:{line:4,column:105094},end:{line:4,column:105104}},{start:{line:4,column:105105},end:{line:4,column:105107}}],line:4},"1709":{loc:{start:{line:4,column:105057},end:{line:4,column:105093}},type:"binary-expr",locations:[{start:{line:4,column:105057},end:{line:4,column:105073}},{start:{line:4,column:105075},end:{line:4,column:105093}}],line:4},"1710":{loc:{start:{line:4,column:105307},end:{line:4,column:105356}},type:"cond-expr",locations:[{start:{line:4,column:105313},end:{line:4,column:105315}},{start:{line:4,column:105317},end:{line:4,column:105355}}],line:4},"1711":{loc:{start:{line:4,column:105462},end:{line:4,column:105486}},type:"binary-expr",locations:[{start:{line:4,column:105462},end:{line:4,column:105465}},{start:{line:4,column:105467},end:{line:4,column:105486}}],line:4},"1712":{loc:{start:{line:4,column:105525},end:{line:4,column:105548}},type:"binary-expr",locations:[{start:{line:4,column:105525},end:{line:4,column:105528}},{start:{line:4,column:105530},end:{line:4,column:105548}}],line:4},"1713":{loc:{start:{line:4,column:105786},end:{line:4,column:105893}},type:"if",locations:[{start:{line:4,column:105786},end:{line:4,column:105893}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1714":{loc:{start:{line:4,column:105789},end:{line:4,column:105819}},type:"binary-expr",locations:[{start:{line:4,column:105789},end:{line:4,column:105806}},{start:{line:4,column:105808},end:{line:4,column:105819}}],line:4},"1715":{loc:{start:{line:4,column:105820},end:{line:4,column:105836}},type:"binary-expr",locations:[{start:{line:4,column:105820},end:{line:4,column:105825}},{start:{line:4,column:105827},end:{line:4,column:105836}}],line:4},"1716":{loc:{start:{line:4,column:105933},end:{line:4,column:105966}},type:"binary-expr",locations:[{start:{line:4,column:105933},end:{line:4,column:105950}},{start:{line:4,column:105952},end:{line:4,column:105966}}],line:4},"1717":{loc:{start:{line:4,column:105977},end:{line:4,column:106176}},type:"if",locations:[{start:{line:4,column:105977},end:{line:4,column:106176}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1718":{loc:{start:{line:4,column:105980},end:{line:4,column:105996}},type:"binary-expr",locations:[{start:{line:4,column:105980},end:{line:4,column:105985}},{start:{line:4,column:105987},end:{line:4,column:105996}}],line:4},"1719":{loc:{start:{line:4,column:106017},end:{line:4,column:106175}},type:"if",locations:[{start:{line:4,column:106017},end:{line:4,column:106175}},{start:{line:4,column:106133},end:{line:4,column:106175}}],line:4},"1720":{loc:{start:{line:4,column:106020},end:{line:4,column:106037}},type:"binary-expr",locations:[{start:{line:4,column:106020},end:{line:4,column:106027}},{start:{line:4,column:106029},end:{line:4,column:106037}}],line:4},"1721":{loc:{start:{line:4,column:106045},end:{line:4,column:106087}},type:"cond-expr",locations:[{start:{line:4,column:106047},end:{line:4,column:106067}},{start:{line:4,column:106068},end:{line:4,column:106087}}],line:4},"1722":{loc:{start:{line:4,column:106088},end:{line:4,column:106113}},type:"binary-expr",locations:[{start:{line:4,column:106088},end:{line:4,column:106096}},{start:{line:4,column:106099},end:{line:4,column:106112}}],line:4},"1723":{loc:{start:{line:4,column:106106},end:{line:4,column:106111}},type:"binary-expr",locations:[{start:{line:4,column:106106},end:{line:4,column:106107}},{start:{line:4,column:106109},end:{line:4,column:106111}}],line:4},"1724":{loc:{start:{line:4,column:106258},end:{line:4,column:106360}},type:"if",locations:[{start:{line:4,column:106258},end:{line:4,column:106360}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1725":{loc:{start:{line:4,column:106300},end:{line:4,column:106329}},type:"binary-expr",locations:[{start:{line:4,column:106300},end:{line:4,column:106307}},{start:{line:4,column:106309},end:{line:4,column:106317}},{start:{line:4,column:106319},end:{line:4,column:106321}},{start:{line:4,column:106324},end:{line:4,column:106328}}],line:4},"1726":{loc:{start:{line:4,column:106396},end:{line:4,column:106432}},type:"cond-expr",locations:[{start:{line:4,column:106398},end:{line:4,column:106415}},{start:{line:4,column:106416},end:{line:4,column:106432}}],line:4},"1727":{loc:{start:{line:4,column:106433},end:{line:4,column:106732}},type:"if",locations:[{start:{line:4,column:106433},end:{line:4,column:106732}},{start:{line:4,column:106536},end:{line:4,column:106732}}],line:4},"1728":{loc:{start:{line:4,column:106445},end:{line:4,column:106531}},type:"binary-expr",locations:[{start:{line:4,column:106445},end:{line:4,column:106484}},{start:{line:4,column:106487},end:{line:4,column:106530}}],line:4},"1729":{loc:{start:{line:4,column:106446},end:{line:4,column:106479}},type:"cond-expr",locations:[{start:{line:4,column:106448},end:{line:4,column:106463}},{start:{line:4,column:106464},end:{line:4,column:106479}}],line:4},"1730":{loc:{start:{line:4,column:106566},end:{line:4,column:106731}},type:"if",locations:[{start:{line:4,column:106566},end:{line:4,column:106731}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1731":{loc:{start:{line:4,column:106569},end:{line:4,column:106585}},type:"binary-expr",locations:[{start:{line:4,column:106569},end:{line:4,column:106575}},{start:{line:4,column:106577},end:{line:4,column:106585}}],line:4},"1732":{loc:{start:{line:4,column:106586},end:{line:4,column:106731}},type:"if",locations:[{start:{line:4,column:106586},end:{line:4,column:106731}},{start:{line:4,column:106720},end:{line:4,column:106731}}],line:4},"1733":{loc:{start:{line:4,column:106631},end:{line:4,column:106714}},type:"binary-expr",locations:[{start:{line:4,column:106631},end:{line:4,column:106641}},{start:{line:4,column:106643},end:{line:4,column:106659}},{start:{line:4,column:106662},end:{line:4,column:106713}}],line:4},"1734":{loc:{start:{line:4,column:106739},end:{line:4,column:106793}},type:"binary-expr",locations:[{start:{line:4,column:106739},end:{line:4,column:106749}},{start:{line:4,column:106752},end:{line:4,column:106792}}],line:4},"1735":{loc:{start:{line:4,column:106752},end:{line:4,column:106792}},type:"cond-expr",locations:[{start:{line:4,column:106754},end:{line:4,column:106773}},{start:{line:4,column:106774},end:{line:4,column:106792}}],line:4},"1736":{loc:{start:{line:4,column:106821},end:{line:4,column:106854}},type:"cond-expr",locations:[{start:{line:4,column:106823},end:{line:4,column:106838}},{start:{line:4,column:106839},end:{line:4,column:106854}}],line:4},"1737":{loc:{start:{line:4,column:106855},end:{line:4,column:106883}},type:"if",locations:[{start:{line:4,column:106855},end:{line:4,column:106883}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1738":{loc:{start:{line:4,column:106911},end:{line:4,column:106944}},type:"cond-expr",locations:[{start:{line:4,column:106913},end:{line:4,column:106928}},{start:{line:4,column:106929},end:{line:4,column:106944}}],line:4},"1739":{loc:{start:{line:4,column:107178},end:{line:4,column:107207}},type:"cond-expr",locations:[{start:{line:4,column:107185},end:{line:4,column:107203}},{start:{line:4,column:107204},end:{line:4,column:107207}}],line:4},"1740":{loc:{start:{line:4,column:107208},end:{line:4,column:107249}},type:"binary-expr",locations:[{start:{line:4,column:107208},end:{line:4,column:107211}},{start:{line:4,column:107214},end:{line:4,column:107248}}],line:4},"1741":{loc:{start:{line:4,column:107262},end:{line:4,column:107298}},type:"binary-expr",locations:[{start:{line:4,column:107262},end:{line:4,column:107270}},{start:{line:4,column:107273},end:{line:4,column:107297}}],line:4},"1742":{loc:{start:{line:4,column:107326},end:{line:4,column:107331}},type:"cond-expr",locations:[{start:{line:4,column:107328},end:{line:4,column:107329}},{start:{line:4,column:107330},end:{line:4,column:107331}}],line:4},"1743":{loc:{start:{line:4,column:107337},end:{line:4,column:107483}},type:"if",locations:[{start:{line:4,column:107337},end:{line:4,column:107483}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1744":{loc:{start:{line:4,column:107388},end:{line:4,column:107482}},type:"cond-expr",locations:[{start:{line:4,column:107407},end:{line:4,column:107410}},{start:{line:4,column:107411},end:{line:4,column:107482}}],line:4},"1745":{loc:{start:{line:4,column:107411},end:{line:4,column:107482}},type:"binary-expr",locations:[{start:{line:4,column:107411},end:{line:4,column:107416}},{start:{line:4,column:107419},end:{line:4,column:107481}}],line:4},"1746":{loc:{start:{line:4,column:107419},end:{line:4,column:107461}},type:"binary-expr",locations:[{start:{line:4,column:107419},end:{line:4,column:107435}},{start:{line:4,column:107438},end:{line:4,column:107460}}],line:4},"1747":{loc:{start:{line:4,column:107440},end:{line:4,column:107460}},type:"cond-expr",locations:[{start:{line:4,column:107451},end:{line:4,column:107453}},{start:{line:4,column:107454},end:{line:4,column:107460}}],line:4},"1748":{loc:{start:{line:4,column:107469},end:{line:4,column:107480}},type:"cond-expr",locations:[{start:{line:4,column:107471},end:{line:4,column:107473}},{start:{line:4,column:107474},end:{line:4,column:107480}}],line:4},"1749":{loc:{start:{line:4,column:107490},end:{line:4,column:107507}},type:"cond-expr",locations:[{start:{line:4,column:107501},end:{line:4,column:107505}},{start:{line:4,column:107506},end:{line:4,column:107507}}],line:4},"1750":{loc:{start:{line:4,column:107527},end:{line:4,column:107555}},type:"if",locations:[{start:{line:4,column:107527},end:{line:4,column:107555}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1751":{loc:{start:{line:4,column:107530},end:{line:4,column:107545}},type:"binary-expr",locations:[{start:{line:4,column:107530},end:{line:4,column:107537}},{start:{line:4,column:107539},end:{line:4,column:107545}}],line:4},"1752":{loc:{start:{line:4,column:107572},end:{line:4,column:107789}},type:"if",locations:[{start:{line:4,column:107572},end:{line:4,column:107789}},{start:{line:4,column:107637},end:{line:4,column:107789}}],line:4},"1753":{loc:{start:{line:4,column:107637},end:{line:4,column:107789}},type:"if",locations:[{start:{line:4,column:107637},end:{line:4,column:107789}},{start:{line:4,column:107687},end:{line:4,column:107789}}],line:4},"1754":{loc:{start:{line:4,column:107687},end:{line:4,column:107789}},type:"if",locations:[{start:{line:4,column:107687},end:{line:4,column:107789}},{start:{line:4,column:107762},end:{line:4,column:107789}}],line:4},"1755":{loc:{start:{line:4,column:107724},end:{line:4,column:107756}},type:"binary-expr",locations:[{start:{line:4,column:107724},end:{line:4,column:107743}},{start:{line:4,column:107745},end:{line:4,column:107756}}],line:4},"1756":{loc:{start:{line:4,column:107762},end:{line:4,column:107788}},type:"binary-expr",locations:[{start:{line:4,column:107762},end:{line:4,column:107780}},{start:{line:4,column:107782},end:{line:4,column:107788}}],line:4},"1757":{loc:{start:{line:4,column:107833},end:{line:4,column:107868}},type:"binary-expr",locations:[{start:{line:4,column:107833},end:{line:4,column:107839}},{start:{line:4,column:107841},end:{line:4,column:107857}},{start:{line:4,column:107859},end:{line:4,column:107868}}],line:4},"1758":{loc:{start:{line:4,column:107898},end:{line:4,column:107910}},type:"binary-expr",locations:[{start:{line:4,column:107898},end:{line:4,column:107903}},{start:{line:4,column:107906},end:{line:4,column:107909}}],line:4},"1759":{loc:{start:{line:4,column:107925},end:{line:4,column:107945}},type:"cond-expr",locations:[{start:{line:4,column:107936},end:{line:4,column:107940}},{start:{line:4,column:107941},end:{line:4,column:107945}}],line:4},"1760":{loc:{start:{line:4,column:107948},end:{line:4,column:107968}},type:"cond-expr",locations:[{start:{line:4,column:107959},end:{line:4,column:107963}},{start:{line:4,column:107964},end:{line:4,column:107968}}],line:4},"1761":{loc:{start:{line:4,column:107974},end:{line:4,column:107992}},type:"binary-expr",locations:[{start:{line:4,column:107974},end:{line:4,column:107982}},{start:{line:4,column:107984},end:{line:4,column:107992}}],line:4},"1762":{loc:{start:{line:4,column:108001},end:{line:4,column:108025}},type:"cond-expr",locations:[{start:{line:4,column:108012},end:{line:4,column:108018}},{start:{line:4,column:108019},end:{line:4,column:108025}}],line:4},"1763":{loc:{start:{line:4,column:108028},end:{line:4,column:108052}},type:"cond-expr",locations:[{start:{line:4,column:108039},end:{line:4,column:108045}},{start:{line:4,column:108046},end:{line:4,column:108052}}],line:4},"1764":{loc:{start:{line:4,column:108062},end:{line:4,column:108146}},type:"cond-expr",locations:[{start:{line:4,column:108069},end:{line:4,column:108095}},{start:{line:4,column:108097},end:{line:4,column:108146}}],line:4},"1765":{loc:{start:{line:4,column:108079},end:{line:4,column:108095}},type:"binary-expr",locations:[{start:{line:4,column:108079},end:{line:4,column:108084}},{start:{line:4,column:108087},end:{line:4,column:108094}}],line:4},"1766":{loc:{start:{line:4,column:108097},end:{line:4,column:108146}},type:"cond-expr",locations:[{start:{line:4,column:108122},end:{line:4,column:108130}},{start:{line:4,column:108133},end:{line:4,column:108145}}],line:4},"1767":{loc:{start:{line:4,column:108097},end:{line:4,column:108120}},type:"binary-expr",locations:[{start:{line:4,column:108097},end:{line:4,column:108105}},{start:{line:4,column:108107},end:{line:4,column:108115}},{start:{line:4,column:108117},end:{line:4,column:108120}}],line:4},"1768":{loc:{start:{line:4,column:108147},end:{line:4,column:108176}},type:"binary-expr",locations:[{start:{line:4,column:108147},end:{line:4,column:108155}},{start:{line:4,column:108157},end:{line:4,column:108176}}],line:4},"1769":{loc:{start:{line:4,column:108179},end:{line:4,column:108199}},type:"cond-expr",locations:[{start:{line:4,column:108190},end:{line:4,column:108194}},{start:{line:4,column:108195},end:{line:4,column:108199}}],line:4},"1770":{loc:{start:{line:4,column:108202},end:{line:4,column:108222}},type:"cond-expr",locations:[{start:{line:4,column:108213},end:{line:4,column:108217}},{start:{line:4,column:108218},end:{line:4,column:108222}}],line:4},"1771":{loc:{start:{line:4,column:108253},end:{line:4,column:108275}},type:"if",locations:[{start:{line:4,column:108253},end:{line:4,column:108275}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1772":{loc:{start:{line:4,column:108299},end:{line:4,column:108331}},type:"cond-expr",locations:[{start:{line:4,column:108305},end:{line:4,column:108324}},{start:{line:4,column:108325},end:{line:4,column:108331}}],line:4},"1773":{loc:{start:{line:4,column:108332},end:{line:4,column:108411}},type:"if",locations:[{start:{line:4,column:108332},end:{line:4,column:108411}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1774":{loc:{start:{line:4,column:108343},end:{line:4,column:108379}},type:"binary-expr",locations:[{start:{line:4,column:108343},end:{line:4,column:108348}},{start:{line:4,column:108350},end:{line:4,column:108355}},{start:{line:4,column:108358},end:{line:4,column:108378}}],line:4},"1775":{loc:{start:{line:4,column:108497},end:{line:4,column:108505}},type:"cond-expr",locations:[{start:{line:4,column:108499},end:{line:4,column:108503}},{start:{line:4,column:108504},end:{line:4,column:108505}}],line:4},"1776":{loc:{start:{line:4,column:108526},end:{line:4,column:108547}},type:"binary-expr",locations:[{start:{line:4,column:108526},end:{line:4,column:108531}},{start:{line:4,column:108534},end:{line:4,column:108546}}],line:4},"1777":{loc:{start:{line:4,column:108536},end:{line:4,column:108546}},type:"cond-expr",locations:[{start:{line:4,column:108538},end:{line:4,column:108539}},{start:{line:4,column:108540},end:{line:4,column:108546}}],line:4},"1778":{loc:{start:{line:4,column:108554},end:{line:4,column:108578}},type:"cond-expr",locations:[{start:{line:4,column:108556},end:{line:4,column:108563}},{start:{line:4,column:108564},end:{line:4,column:108578}}],line:4},"1779":{loc:{start:{line:4,column:108564},end:{line:4,column:108578}},type:"cond-expr",locations:[{start:{line:4,column:108570},end:{line:4,column:108571}},{start:{line:4,column:108572},end:{line:4,column:108578}}],line:4},"1780":{loc:{start:{line:4,column:108579},end:{line:4,column:108629}},type:"if",locations:[{start:{line:4,column:108579},end:{line:4,column:108629}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1781":{loc:{start:{line:4,column:108582},end:{line:4,column:108604}},type:"binary-expr",locations:[{start:{line:4,column:108582},end:{line:4,column:108583}},{start:{line:4,column:108585},end:{line:4,column:108591}},{start:{line:4,column:108594},end:{line:4,column:108603}}],line:4},"1782":{loc:{start:{line:4,column:108605},end:{line:4,column:108619}},type:"binary-expr",locations:[{start:{line:4,column:108605},end:{line:4,column:108610}},{start:{line:4,column:108613},end:{line:4,column:108618}}],line:4},"1783":{loc:{start:{line:4,column:108644},end:{line:4,column:108657}},type:"cond-expr",locations:[{start:{line:4,column:108646},end:{line:4,column:108651}},{start:{line:4,column:108652},end:{line:4,column:108657}}],line:4},"1784":{loc:{start:{line:4,column:108658},end:{line:4,column:108735}},type:"if",locations:[{start:{line:4,column:108658},end:{line:4,column:108735}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1785":{loc:{start:{line:4,column:108677},end:{line:4,column:108713}},type:"cond-expr",locations:[{start:{line:4,column:108679},end:{line:4,column:108696}},{start:{line:4,column:108697},end:{line:4,column:108713}}],line:4},"1786":{loc:{start:{line:4,column:108714},end:{line:4,column:108734}},type:"binary-expr",locations:[{start:{line:4,column:108714},end:{line:4,column:108721}},{start:{line:4,column:108724},end:{line:4,column:108733}}],line:4},"1787":{loc:{start:{line:4,column:108801},end:{line:4,column:108878}},type:"binary-expr",locations:[{start:{line:4,column:108801},end:{line:4,column:108808}},{start:{line:4,column:108810},end:{line:4,column:108816}},{start:{line:4,column:108819},end:{line:4,column:108877}}],line:4},"1788":{loc:{start:{line:4,column:108819},end:{line:4,column:108877}},type:"cond-expr",locations:[{start:{line:4,column:108838},end:{line:4,column:108843}},{start:{line:4,column:108844},end:{line:4,column:108877}}],line:4},"1789":{loc:{start:{line:4,column:108844},end:{line:4,column:108877}},type:"binary-expr",locations:[{start:{line:4,column:108844},end:{line:4,column:108862}},{start:{line:4,column:108865},end:{line:4,column:108876}}],line:4},"1790":{loc:{start:{line:4,column:108914},end:{line:4,column:108920}},type:"cond-expr",locations:[{start:{line:4,column:108916},end:{line:4,column:108917}},{start:{line:4,column:108918},end:{line:4,column:108920}}],line:4},"1791":{loc:{start:{line:4,column:108941},end:{line:4,column:108945}},type:"default-arg",locations:[{start:{line:4,column:108943},end:{line:4,column:108945}}],line:4},"1792":{loc:{start:{line:4,column:108971},end:{line:4,column:109015}},type:"cond-expr",locations:[{start:{line:4,column:108989},end:{line:4,column:109005}},{start:{line:4,column:109006},end:{line:4,column:109015}}],line:4},"1793":{loc:{start:{line:4,column:109037},end:{line:4,column:109054}},type:"binary-expr",locations:[{start:{line:4,column:109037},end:{line:4,column:109041}},{start:{line:4,column:109043},end:{line:4,column:109054}}],line:4},"1794":{loc:{start:{line:4,column:109120},end:{line:4,column:109124}},type:"default-arg",locations:[{start:{line:4,column:109122},end:{line:4,column:109124}}],line:4},"1795":{loc:{start:{line:4,column:109133},end:{line:4,column:109157}},type:"cond-expr",locations:[{start:{line:4,column:109146},end:{line:4,column:109155}},{start:{line:4,column:109156},end:{line:4,column:109157}}],line:4},"1796":{loc:{start:{line:4,column:109180},end:{line:4,column:109184}},type:"default-arg",locations:[{start:{line:4,column:109182},end:{line:4,column:109184}}],line:4},"1797":{loc:{start:{line:4,column:109224},end:{line:4,column:109245}},type:"cond-expr",locations:[{start:{line:4,column:109226},end:{line:4,column:109243}},{start:{line:4,column:109244},end:{line:4,column:109245}}],line:4},"1798":{loc:{start:{line:4,column:109330},end:{line:4,column:109349}},type:"binary-expr",locations:[{start:{line:4,column:109330},end:{line:4,column:109335}},{start:{line:4,column:109337},end:{line:4,column:109349}}],line:4},"1799":{loc:{start:{line:4,column:109411},end:{line:4,column:109430}},type:"binary-expr",locations:[{start:{line:4,column:109411},end:{line:4,column:109416}},{start:{line:4,column:109418},end:{line:4,column:109430}}],line:4},"1800":{loc:{start:{line:4,column:109496},end:{line:4,column:109500}},type:"default-arg",locations:[{start:{line:4,column:109498},end:{line:4,column:109500}}],line:4},"1801":{loc:{start:{line:4,column:109552},end:{line:4,column:109603}},type:"binary-expr",locations:[{start:{line:4,column:109552},end:{line:4,column:109569}},{start:{line:4,column:109571},end:{line:4,column:109603}}],line:4},"1802":{loc:{start:{line:4,column:109627},end:{line:4,column:110422}},type:"if",locations:[{start:{line:4,column:109627},end:{line:4,column:110422}},{start:{line:4,column:109702},end:{line:4,column:110422}}],line:4},"1803":{loc:{start:{line:4,column:109727},end:{line:4,column:109747}},type:"cond-expr",locations:[{start:{line:4,column:109733},end:{line:4,column:109734}},{start:{line:4,column:109735},end:{line:4,column:109747}}],line:4},"1804":{loc:{start:{line:4,column:109827},end:{line:4,column:110421}},type:"if",locations:[{start:{line:4,column:109827},end:{line:4,column:110421}},{start:{line:4,column:110053},end:{line:4,column:110421}}],line:4},"1805":{loc:{start:{line:4,column:109830},end:{line:4,column:109845}},type:"binary-expr",locations:[{start:{line:4,column:109830},end:{line:4,column:109835}},{start:{line:4,column:109837},end:{line:4,column:109845}}],line:4},"1806":{loc:{start:{line:4,column:109882},end:{line:4,column:109889}},type:"cond-expr",locations:[{start:{line:4,column:109884},end:{line:4,column:109885}},{start:{line:4,column:109886},end:{line:4,column:109889}}],line:4},"1807":{loc:{start:{line:4,column:109893},end:{line:4,column:110048}},type:"cond-expr",locations:[{start:{line:4,column:109901},end:{line:4,column:110031}},{start:{line:4,column:110034},end:{line:4,column:110047}}],line:4},"1808":{loc:{start:{line:4,column:109980},end:{line:4,column:110011}},type:"binary-expr",locations:[{start:{line:4,column:109980},end:{line:4,column:109981}},{start:{line:4,column:109984},end:{line:4,column:110010}}],line:4},"1809":{loc:{start:{line:4,column:110092},end:{line:4,column:110102}},type:"binary-expr",locations:[{start:{line:4,column:110092},end:{line:4,column:110096}},{start:{line:4,column:110098},end:{line:4,column:110102}}],line:4},"1810":{loc:{start:{line:4,column:110105},end:{line:4,column:110115}},type:"binary-expr",locations:[{start:{line:4,column:110105},end:{line:4,column:110109}},{start:{line:4,column:110111},end:{line:4,column:110115}}],line:4},"1811":{loc:{start:{line:4,column:110116},end:{line:4,column:110385}},type:"if",locations:[{start:{line:4,column:110116},end:{line:4,column:110385}},{start:{line:4,column:110338},end:{line:4,column:110385}}],line:4},"1812":{loc:{start:{line:4,column:110119},end:{line:4,column:110132}},type:"binary-expr",locations:[{start:{line:4,column:110119},end:{line:4,column:110120}},{start:{line:4,column:110122},end:{line:4,column:110124}},{start:{line:4,column:110126},end:{line:4,column:110128}},{start:{line:4,column:110130},end:{line:4,column:110132}}],line:4},"1813":{loc:{start:{line:4,column:110159},end:{line:4,column:110166}},type:"cond-expr",locations:[{start:{line:4,column:110161},end:{line:4,column:110163}},{start:{line:4,column:110164},end:{line:4,column:110166}}],line:4},"1814":{loc:{start:{line:4,column:110185},end:{line:4,column:110216}},type:"binary-expr",locations:[{start:{line:4,column:110185},end:{line:4,column:110187}},{start:{line:4,column:110189},end:{line:4,column:110190}},{start:{line:4,column:110193},end:{line:4,column:110215}}],line:4},"1815":{loc:{start:{line:4,column:110282},end:{line:4,column:110313}},type:"binary-expr",locations:[{start:{line:4,column:110282},end:{line:4,column:110283}},{start:{line:4,column:110286},end:{line:4,column:110312}}],line:4},"1816":{loc:{start:{line:4,column:110350},end:{line:4,column:110355}},type:"cond-expr",locations:[{start:{line:4,column:110352},end:{line:4,column:110353}},{start:{line:4,column:110354},end:{line:4,column:110355}}],line:4},"1817":{loc:{start:{line:4,column:110359},end:{line:4,column:110364}},type:"binary-expr",locations:[{start:{line:4,column:110359},end:{line:4,column:110361}},{start:{line:4,column:110363},end:{line:4,column:110364}}],line:4},"1818":{loc:{start:{line:4,column:110373},end:{line:4,column:110381}},type:"cond-expr",locations:[{start:{line:4,column:110378},end:{line:4,column:110379}},{start:{line:4,column:110380},end:{line:4,column:110381}}],line:4},"1819":{loc:{start:{line:4,column:110385},end:{line:4,column:110420}},type:"binary-expr",locations:[{start:{line:4,column:110385},end:{line:4,column:110387}},{start:{line:4,column:110389},end:{line:4,column:110390}},{start:{line:4,column:110392},end:{line:4,column:110393}},{start:{line:4,column:110395},end:{line:4,column:110420}}],line:4},"1820":{loc:{start:{line:4,column:110464},end:{line:4,column:110662}},type:"if",locations:[{start:{line:4,column:110464},end:{line:4,column:110662}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1821":{loc:{start:{line:4,column:110467},end:{line:4,column:110471}},type:"binary-expr",locations:[{start:{line:4,column:110467},end:{line:4,column:110468}},{start:{line:4,column:110470},end:{line:4,column:110471}}],line:4},"1822":{loc:{start:{line:4,column:110480},end:{line:4,column:110497}},type:"cond-expr",locations:[{start:{line:4,column:110482},end:{line:4,column:110495}},{start:{line:4,column:110496},end:{line:4,column:110497}}],line:4},"1823":{loc:{start:{line:4,column:110521},end:{line:4,column:110661}},type:"if",locations:[{start:{line:4,column:110521},end:{line:4,column:110661}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1824":{loc:{start:{line:4,column:110533},end:{line:4,column:110568}},type:"binary-expr",locations:[{start:{line:4,column:110533},end:{line:4,column:110547}},{start:{line:4,column:110550},end:{line:4,column:110567}}],line:4},"1825":{loc:{start:{line:4,column:110569},end:{line:4,column:110660}},type:"if",locations:[{start:{line:4,column:110569},end:{line:4,column:110660}},{start:{line:4,column:110649},end:{line:4,column:110660}}],line:4},"1826":{loc:{start:{line:4,column:110572},end:{line:4,column:110583}},type:"binary-expr",locations:[{start:{line:4,column:110572},end:{line:4,column:110574}},{start:{line:4,column:110576},end:{line:4,column:110583}}],line:4},"1827":{loc:{start:{line:4,column:110604},end:{line:4,column:110643}},type:"cond-expr",locations:[{start:{line:4,column:110611},end:{line:4,column:110626}},{start:{line:4,column:110627},end:{line:4,column:110643}}],line:4},"1828":{loc:{start:{line:4,column:110689},end:{line:4,column:110714}},type:"binary-expr",locations:[{start:{line:4,column:110689},end:{line:4,column:110690}},{start:{line:4,column:110692},end:{line:4,column:110714}}],line:4},"1829":{loc:{start:{line:4,column:110774},end:{line:4,column:110795}},type:"if",locations:[{start:{line:4,column:110774},end:{line:4,column:110795}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1830":{loc:{start:{line:4,column:110894},end:{line:4,column:111088}},type:"if",locations:[{start:{line:4,column:110894},end:{line:4,column:111088}},{start:{line:4,column:111075},end:{line:4,column:111088}}],line:4},"1831":{loc:{start:{line:4,column:111283},end:{line:4,column:111288}},type:"binary-expr",locations:[{start:{line:4,column:111283},end:{line:4,column:111284}},{start:{line:4,column:111286},end:{line:4,column:111288}}],line:4},"1832":{loc:{start:{line:4,column:111352},end:{line:4,column:111360}},type:"cond-expr",locations:[{start:{line:4,column:111354},end:{line:4,column:111358}},{start:{line:4,column:111359},end:{line:4,column:111360}}],line:4},"1833":{loc:{start:{line:4,column:111365},end:{line:4,column:111418}},type:"binary-expr",locations:[{start:{line:4,column:111365},end:{line:4,column:111366}},{start:{line:4,column:111369},end:{line:4,column:111417}}],line:4},"1834":{loc:{start:{line:4,column:111405},end:{line:4,column:111413}},type:"cond-expr",locations:[{start:{line:4,column:111407},end:{line:4,column:111411}},{start:{line:4,column:111412},end:{line:4,column:111413}}],line:4},"1835":{loc:{start:{line:4,column:111463},end:{line:4,column:111491}},type:"cond-expr",locations:[{start:{line:4,column:111472},end:{line:4,column:111483}},{start:{line:4,column:111484},end:{line:4,column:111491}}],line:4},"1836":{loc:{start:{line:4,column:111576},end:{line:4,column:111590}},type:"cond-expr",locations:[{start:{line:4,column:111582},end:{line:4,column:111588}},{start:{line:4,column:111589},end:{line:4,column:111590}}],line:4},"1837":{loc:{start:{line:4,column:111633},end:{line:4,column:111681}},type:"cond-expr",locations:[{start:{line:4,column:111643},end:{line:4,column:111671}},{start:{line:4,column:111672},end:{line:4,column:111681}}],line:4},"1838":{loc:{start:{line:4,column:111652},end:{line:4,column:111670}},type:"cond-expr",locations:[{start:{line:4,column:111654},end:{line:4,column:111665}},{start:{line:4,column:111666},end:{line:4,column:111670}}],line:4},"1839":{loc:{start:{line:4,column:111726},end:{line:4,column:111780}},type:"cond-expr",locations:[{start:{line:4,column:111738},end:{line:4,column:111770}},{start:{line:4,column:111771},end:{line:4,column:111780}}],line:4},"1840":{loc:{start:{line:4,column:111747},end:{line:4,column:111769}},type:"cond-expr",locations:[{start:{line:4,column:111749},end:{line:4,column:111762}},{start:{line:4,column:111763},end:{line:4,column:111769}}],line:4},"1841":{loc:{start:{line:4,column:111816},end:{line:4,column:111937}},type:"cond-expr",locations:[{start:{line:4,column:111835},end:{line:4,column:111924}},{start:{line:4,column:111926},end:{line:4,column:111937}}],line:4},"1842":{loc:{start:{line:4,column:111870},end:{line:4,column:111924}},type:"binary-expr",locations:[{start:{line:4,column:111870},end:{line:4,column:111881}},{start:{line:4,column:111883},end:{line:4,column:111924}}],line:4},"1843":{loc:{start:{line:4,column:111944},end:{line:4,column:111980}},type:"binary-expr",locations:[{start:{line:4,column:111944},end:{line:4,column:111953}},{start:{line:4,column:111956},end:{line:4,column:111979}}],line:4},"1844":{loc:{start:{line:4,column:112074},end:{line:4,column:112144}},type:"if",locations:[{start:{line:4,column:112074},end:{line:4,column:112144}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1845":{loc:{start:{line:4,column:112121},end:{line:4,column:112143}},type:"if",locations:[{start:{line:4,column:112121},end:{line:4,column:112143}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1846":{loc:{start:{line:4,column:112197},end:{line:4,column:112248}},type:"cond-expr",locations:[{start:{line:4,column:112205},end:{line:4,column:112233}},{start:{line:4,column:112234},end:{line:4,column:112248}}],line:4},"1847":{loc:{start:{line:4,column:112303},end:{line:4,column:112358}},type:"cond-expr",locations:[{start:{line:4,column:112311},end:{line:4,column:112341}},{start:{line:4,column:112342},end:{line:4,column:112358}}],line:4},"1848":{loc:{start:{line:4,column:112808},end:{line:4,column:112828}},type:"binary-expr",locations:[{start:{line:4,column:112808},end:{line:4,column:112809}},{start:{line:4,column:112811},end:{line:4,column:112828}}],line:4},"1849":{loc:{start:{line:4,column:113047},end:{line:4,column:113051}},type:"binary-expr",locations:[{start:{line:4,column:113047},end:{line:4,column:113048}},{start:{line:4,column:113050},end:{line:4,column:113051}}],line:4},"1850":{loc:{start:{line:4,column:113295},end:{line:4,column:113327}},type:"binary-expr",locations:[{start:{line:4,column:113295},end:{line:4,column:113310}},{start:{line:4,column:113312},end:{line:4,column:113327}}],line:4},"1851":{loc:{start:{line:4,column:113418},end:{line:4,column:113469}},type:"cond-expr",locations:[{start:{line:4,column:113437},end:{line:4,column:113464}},{start:{line:4,column:113465},end:{line:4,column:113469}}],line:4},"1852":{loc:{start:{line:4,column:113489},end:{line:4,column:113557}},type:"binary-expr",locations:[{start:{line:4,column:113489},end:{line:4,column:113510}},{start:{line:4,column:113512},end:{line:4,column:113530}},{start:{line:4,column:113533},end:{line:4,column:113552}},{start:{line:4,column:113554},end:{line:4,column:113556}}],line:4},"1853":{loc:{start:{line:4,column:113755},end:{line:4,column:113884}},type:"if",locations:[{start:{line:4,column:113755},end:{line:4,column:113884}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1854":{loc:{start:{line:4,column:113758},end:{line:4,column:113848}},type:"binary-expr",locations:[{start:{line:4,column:113758},end:{line:4,column:113775}},{start:{line:4,column:113778},end:{line:4,column:113847}}],line:4},"1855":{loc:{start:{line:4,column:113793},end:{line:4,column:113847}},type:"binary-expr",locations:[{start:{line:4,column:113793},end:{line:4,column:113814}},{start:{line:4,column:113816},end:{line:4,column:113847}}],line:4},"1856":{loc:{start:{line:4,column:114009},end:{line:4,column:114041}},type:"binary-expr",locations:[{start:{line:4,column:114009},end:{line:4,column:114025}},{start:{line:4,column:114027},end:{line:4,column:114041}}],line:4},"1857":{loc:{start:{line:4,column:114259},end:{line:4,column:114298}},type:"if",locations:[{start:{line:4,column:114259},end:{line:4,column:114298}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1858":{loc:{start:{line:4,column:114262},end:{line:4,column:114290}},type:"binary-expr",locations:[{start:{line:4,column:114262},end:{line:4,column:114283}},{start:{line:4,column:114285},end:{line:4,column:114290}}],line:4},"1859":{loc:{start:{line:4,column:114298},end:{line:4,column:114587}},type:"switch",locations:[{start:{line:4,column:114308},end:{line:4,column:114348}},{start:{line:4,column:114348},end:{line:4,column:114355}},{start:{line:4,column:114355},end:{line:4,column:114362}},{start:{line:4,column:114362},end:{line:4,column:114369}},{start:{line:4,column:114369},end:{line:4,column:114376}},{start:{line:4,column:114376},end:{line:4,column:114416}},{start:{line:4,column:114416},end:{line:4,column:114456}},{start:{line:4,column:114456},end:{line:4,column:114498}},{start:{line:4,column:114498},end:{line:4,column:114539}},{start:{line:4,column:114539},end:{line:4,column:114553}},{start:{line:4,column:114553},end:{line:4,column:114586}}],line:4},"1860":{loc:{start:{line:4,column:114587},end:{line:4,column:114710}},type:"if",locations:[{start:{line:4,column:114587},end:{line:4,column:114710}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1861":{loc:{start:{line:4,column:114618},end:{line:4,column:114675}},type:"binary-expr",locations:[{start:{line:4,column:114618},end:{line:4,column:114669}},{start:{line:4,column:114671},end:{line:4,column:114675}}],line:4},"1862":{loc:{start:{line:4,column:114716},end:{line:4,column:114748}},type:"cond-expr",locations:[{start:{line:4,column:114743},end:{line:4,column:114745}},{start:{line:4,column:114746},end:{line:4,column:114748}}],line:4},"1863":{loc:{start:{line:4,column:114797},end:{line:4,column:114970}},type:"cond-expr",locations:[{start:{line:4,column:114821},end:{line:4,column:114887}},{start:{line:4,column:114888},end:{line:4,column:114970}}],line:4},"1864":{loc:{start:{line:4,column:115000},end:{line:4,column:115182}},type:"binary-expr",locations:[{start:{line:4,column:115000},end:{line:4,column:115021}},{start:{line:4,column:115023},end:{line:4,column:115054}},{start:{line:4,column:115056},end:{line:4,column:115072}},{start:{line:4,column:115074},end:{line:4,column:115098}},{start:{line:4,column:115100},end:{line:4,column:115121}},{start:{line:4,column:115123},end:{line:4,column:115141}},{start:{line:4,column:115143},end:{line:4,column:115182}}],line:4},"1865":{loc:{start:{line:4,column:115191},end:{line:4,column:115241}},type:"if",locations:[{start:{line:4,column:115191},end:{line:4,column:115241}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1866":{loc:{start:{line:4,column:115194},end:{line:4,column:115233}},type:"binary-expr",locations:[{start:{line:4,column:115194},end:{line:4,column:115210}},{start:{line:4,column:115212},end:{line:4,column:115233}}],line:4},"1867":{loc:{start:{line:4,column:115241},end:{line:4,column:115294}},type:"if",locations:[{start:{line:4,column:115241},end:{line:4,column:115294}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1868":{loc:{start:{line:4,column:115294},end:{line:4,column:115370}},type:"binary-expr",locations:[{start:{line:4,column:115294},end:{line:4,column:115315}},{start:{line:4,column:115317},end:{line:4,column:115341}},{start:{line:4,column:115344},end:{line:4,column:115369}}],line:4},"1869":{loc:{start:{line:4,column:115666},end:{line:4,column:115877}},type:"if",locations:[{start:{line:4,column:115666},end:{line:4,column:115877}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1870":{loc:{start:{line:4,column:115918},end:{line:4,column:115922}},type:"binary-expr",locations:[{start:{line:4,column:115918},end:{line:4,column:115919}},{start:{line:4,column:115921},end:{line:4,column:115922}}],line:4},"1871":{loc:{start:{line:4,column:116128},end:{line:4,column:116170}},type:"binary-expr",locations:[{start:{line:4,column:116128},end:{line:4,column:116148}},{start:{line:4,column:116150},end:{line:4,column:116166}},{start:{line:4,column:116168},end:{line:4,column:116170}}],line:4},"1872":{loc:{start:{line:4,column:116200},end:{line:4,column:116237}},type:"binary-expr",locations:[{start:{line:4,column:116200},end:{line:4,column:116231}},{start:{line:4,column:116233},end:{line:4,column:116237}}],line:4},"1873":{loc:{start:{line:4,column:116429},end:{line:4,column:116467}},type:"if",locations:[{start:{line:4,column:116429},end:{line:4,column:116467}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1874":{loc:{start:{line:4,column:116554},end:{line:4,column:116601}},type:"binary-expr",locations:[{start:{line:4,column:116554},end:{line:4,column:116564}},{start:{line:4,column:116566},end:{line:4,column:116572}},{start:{line:4,column:116574},end:{line:4,column:116601}}],line:4},"1875":{loc:{start:{line:4,column:116612},end:{line:4,column:116663}},type:"if",locations:[{start:{line:4,column:116612},end:{line:4,column:116663}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1876":{loc:{start:{line:4,column:116663},end:{line:4,column:116695}},type:"if",locations:[{start:{line:4,column:116663},end:{line:4,column:116695}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1877":{loc:{start:{line:4,column:116906},end:{line:4,column:117052}},type:"if",locations:[{start:{line:4,column:116906},end:{line:4,column:117052}},{start:{line:4,column:116985},end:{line:4,column:117052}}],line:4},"1878":{loc:{start:{line:4,column:117359},end:{line:4,column:117413}},type:"if",locations:[{start:{line:4,column:117359},end:{line:4,column:117413}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1879":{loc:{start:{line:4,column:117818},end:{line:4,column:117857}},type:"cond-expr",locations:[{start:{line:4,column:117824},end:{line:4,column:117836}},{start:{line:4,column:117837},end:{line:4,column:117857}}],line:4},"1880":{loc:{start:{line:4,column:117888},end:{line:4,column:117978}},type:"cond-expr",locations:[{start:{line:4,column:117894},end:{line:4,column:117936}},{start:{line:4,column:117937},end:{line:4,column:117978}}],line:4},"1881":{loc:{start:{line:4,column:117997},end:{line:4,column:118342}},type:"if",locations:[{start:{line:4,column:117997},end:{line:4,column:118342}},{start:{line:4,column:118177},end:{line:4,column:118342}}],line:4},"1882":{loc:{start:{line:4,column:118469},end:{line:4,column:118572}},type:"if",locations:[{start:{line:4,column:118469},end:{line:4,column:118572}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1883":{loc:{start:{line:4,column:118475},end:{line:4,column:118480}},type:"binary-expr",locations:[{start:{line:4,column:118475},end:{line:4,column:118476}},{start:{line:4,column:118478},end:{line:4,column:118480}}],line:4},"1884":{loc:{start:{line:4,column:118503},end:{line:4,column:118571}},type:"cond-expr",locations:[{start:{line:4,column:118509},end:{line:4,column:118518}},{start:{line:4,column:118520},end:{line:4,column:118570}}],line:4},"1885":{loc:{start:{line:4,column:118572},end:{line:4,column:118724}},type:"if",locations:[{start:{line:4,column:118572},end:{line:4,column:118724}},{start:{line:4,column:118667},end:{line:4,column:118724}}],line:4},"1886":{loc:{start:{line:4,column:118605},end:{line:4,column:118659}},type:"binary-expr",locations:[{start:{line:4,column:118605},end:{line:4,column:118629}},{start:{line:4,column:118631},end:{line:4,column:118659}}],line:4},"1887":{loc:{start:{line:4,column:118805},end:{line:4,column:118864}},type:"cond-expr",locations:[{start:{line:4,column:118811},end:{line:4,column:118862}},{start:{line:4,column:118863},end:{line:4,column:118864}}],line:4},"1888":{loc:{start:{line:4,column:118937},end:{line:4,column:118941}},type:"default-arg",locations:[{start:{line:4,column:118939},end:{line:4,column:118941}}],line:4},"1889":{loc:{start:{line:4,column:119079},end:{line:4,column:119083}},type:"default-arg",locations:[{start:{line:4,column:119081},end:{line:4,column:119083}}],line:4},"1890":{loc:{start:{line:4,column:119085},end:{line:4,column:119101}},type:"if",locations:[{start:{line:4,column:119085},end:{line:4,column:119101}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1891":{loc:{start:{line:4,column:119357},end:{line:4,column:119460}},type:"if",locations:[{start:{line:4,column:119357},end:{line:4,column:119460}},{start:{line:4,column:119415},end:{line:4,column:119460}}],line:4},"1892":{loc:{start:{line:4,column:119360},end:{line:4,column:119369}},type:"binary-expr",locations:[{start:{line:4,column:119360},end:{line:4,column:119365}},{start:{line:4,column:119367},end:{line:4,column:119369}}],line:4},"1893":{loc:{start:{line:4,column:119415},end:{line:4,column:119460}},type:"if",locations:[{start:{line:4,column:119415},end:{line:4,column:119460}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1894":{loc:{start:{line:4,column:119873},end:{line:4,column:119878}},type:"binary-expr",locations:[{start:{line:4,column:119873},end:{line:4,column:119874}},{start:{line:4,column:119876},end:{line:4,column:119878}}],line:4},"1895":{loc:{start:{line:4,column:120019},end:{line:4,column:120023}},type:"binary-expr",locations:[{start:{line:4,column:120019},end:{line:4,column:120020}},{start:{line:4,column:120022},end:{line:4,column:120023}}],line:4},"1896":{loc:{start:{line:4,column:120032},end:{line:4,column:120067}},type:"cond-expr",locations:[{start:{line:4,column:120064},end:{line:4,column:120065}},{start:{line:4,column:120066},end:{line:4,column:120067}}],line:4},"1897":{loc:{start:{line:4,column:120032},end:{line:4,column:120063}},type:"binary-expr",locations:[{start:{line:4,column:120032},end:{line:4,column:120034}},{start:{line:4,column:120036},end:{line:4,column:120037}},{start:{line:4,column:120039},end:{line:4,column:120063}}],line:4},"1898":{loc:{start:{line:4,column:120097},end:{line:4,column:120321}},type:"if",locations:[{start:{line:4,column:120097},end:{line:4,column:120321}},{start:{line:4,column:120132},end:{line:4,column:120321}}],line:4},"1899":{loc:{start:{line:4,column:120132},end:{line:4,column:120321}},type:"if",locations:[{start:{line:4,column:120132},end:{line:4,column:120321}},{start:{line:4,column:120175},end:{line:4,column:120321}}],line:4},"1900":{loc:{start:{line:4,column:120176},end:{line:4,column:120185}},type:"binary-expr",locations:[{start:{line:4,column:120176},end:{line:4,column:120177}},{start:{line:4,column:120180},end:{line:4,column:120184}}],line:4},"1901":{loc:{start:{line:4,column:120202},end:{line:4,column:120320}},type:"if",locations:[{start:{line:4,column:120202},end:{line:4,column:120320}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1902":{loc:{start:{line:4,column:120238},end:{line:4,column:120260}},type:"cond-expr",locations:[{start:{line:4,column:120249},end:{line:4,column:120253}},{start:{line:4,column:120254},end:{line:4,column:120260}}],line:4},"1903":{loc:{start:{line:4,column:120267},end:{line:4,column:120288}},type:"binary-expr",locations:[{start:{line:4,column:120267},end:{line:4,column:120271}},{start:{line:4,column:120273},end:{line:4,column:120276}},{start:{line:4,column:120279},end:{line:4,column:120287}}],line:4},"1904":{loc:{start:{line:4,column:120321},end:{line:4,column:120336}},type:"binary-expr",locations:[{start:{line:4,column:120321},end:{line:4,column:120326}},{start:{line:4,column:120328},end:{line:4,column:120336}}],line:4},"1905":{loc:{start:{line:4,column:120777},end:{line:4,column:120823}},type:"if",locations:[{start:{line:4,column:120777},end:{line:4,column:120823}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1906":{loc:{start:{line:4,column:120780},end:{line:4,column:120795}},type:"binary-expr",locations:[{start:{line:4,column:120780},end:{line:4,column:120787}},{start:{line:4,column:120790},end:{line:4,column:120794}}],line:4},"1907":{loc:{start:{line:4,column:120830},end:{line:4,column:120853}},type:"cond-expr",locations:[{start:{line:4,column:120844},end:{line:4,column:120848}},{start:{line:4,column:120849},end:{line:4,column:120853}}],line:4},"1908":{loc:{start:{line:4,column:120920},end:{line:4,column:121425}},type:"if",locations:[{start:{line:4,column:120920},end:{line:4,column:121425}},{start:{line:4,column:121198},end:{line:4,column:121425}}],line:4},"1909":{loc:{start:{line:4,column:121022},end:{line:4,column:121182}},type:"cond-expr",locations:[{start:{line:4,column:121059},end:{line:4,column:121089}},{start:{line:4,column:121092},end:{line:4,column:121181}}],line:4},"1910":{loc:{start:{line:4,column:121022},end:{line:4,column:121057}},type:"binary-expr",locations:[{start:{line:4,column:121022},end:{line:4,column:121030}},{start:{line:4,column:121032},end:{line:4,column:121057}}],line:4},"1911":{loc:{start:{line:4,column:121092},end:{line:4,column:121131}},type:"binary-expr",locations:[{start:{line:4,column:121092},end:{line:4,column:121093}},{start:{line:4,column:121096},end:{line:4,column:121130}}],line:4},"1912":{loc:{start:{line:4,column:121132},end:{line:4,column:121181}},type:"binary-expr",locations:[{start:{line:4,column:121132},end:{line:4,column:121151}},{start:{line:4,column:121153},end:{line:4,column:121181}}],line:4},"1913":{loc:{start:{line:4,column:121234},end:{line:4,column:121394}},type:"cond-expr",locations:[{start:{line:4,column:121271},end:{line:4,column:121301}},{start:{line:4,column:121304},end:{line:4,column:121393}}],line:4},"1914":{loc:{start:{line:4,column:121234},end:{line:4,column:121269}},type:"binary-expr",locations:[{start:{line:4,column:121234},end:{line:4,column:121242}},{start:{line:4,column:121244},end:{line:4,column:121269}}],line:4},"1915":{loc:{start:{line:4,column:121304},end:{line:4,column:121343}},type:"binary-expr",locations:[{start:{line:4,column:121304},end:{line:4,column:121305}},{start:{line:4,column:121308},end:{line:4,column:121342}}],line:4},"1916":{loc:{start:{line:4,column:121344},end:{line:4,column:121393}},type:"binary-expr",locations:[{start:{line:4,column:121344},end:{line:4,column:121363}},{start:{line:4,column:121365},end:{line:4,column:121393}}],line:4},"1917":{loc:{start:{line:4,column:121502},end:{line:4,column:121613}},type:"binary-expr",locations:[{start:{line:4,column:121502},end:{line:4,column:121528}},{start:{line:4,column:121530},end:{line:4,column:121552}},{start:{line:4,column:121554},end:{line:4,column:121579}},{start:{line:4,column:121581},end:{line:4,column:121613}}],line:4},"1918":{loc:{start:{line:4,column:121623},end:{line:4,column:122069}},type:"if",locations:[{start:{line:4,column:121623},end:{line:4,column:122069}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1919":{loc:{start:{line:4,column:122102},end:{line:4,column:122153}},type:"cond-expr",locations:[{start:{line:4,column:122111},end:{line:4,column:122125}},{start:{line:4,column:122127},end:{line:4,column:122152}}],line:4},"1920":{loc:{start:{line:4,column:122156},end:{line:4,column:122223}},type:"cond-expr",locations:[{start:{line:4,column:122185},end:{line:4,column:122189}},{start:{line:4,column:122190},end:{line:4,column:122223}}],line:4},"1921":{loc:{start:{line:4,column:122224},end:{line:4,column:122494}},type:"cond-expr",locations:[{start:{line:4,column:122234},end:{line:4,column:122310}},{start:{line:4,column:122313},end:{line:4,column:122493}}],line:4},"1922":{loc:{start:{line:4,column:122234},end:{line:4,column:122283}},type:"binary-expr",locations:[{start:{line:4,column:122234},end:{line:4,column:122253}},{start:{line:4,column:122255},end:{line:4,column:122283}}],line:4},"1923":{loc:{start:{line:4,column:122315},end:{line:4,column:122375}},type:"cond-expr",locations:[{start:{line:4,column:122342},end:{line:4,column:122346}},{start:{line:4,column:122347},end:{line:4,column:122375}}],line:4},"1924":{loc:{start:{line:4,column:122376},end:{line:4,column:122493}},type:"cond-expr",locations:[{start:{line:4,column:122386},end:{line:4,column:122458}},{start:{line:4,column:122460},end:{line:4,column:122493}}],line:4},"1925":{loc:{start:{line:4,column:122386},end:{line:4,column:122435}},type:"binary-expr",locations:[{start:{line:4,column:122386},end:{line:4,column:122405}},{start:{line:4,column:122407},end:{line:4,column:122435}}],line:4},"1926":{loc:{start:{line:4,column:122531},end:{line:4,column:122598}},type:"cond-expr",locations:[{start:{line:4,column:122560},end:{line:4,column:122564}},{start:{line:4,column:122565},end:{line:4,column:122598}}],line:4},"1927":{loc:{start:{line:4,column:122606},end:{line:4,column:122709}},type:"cond-expr",locations:[{start:{line:4,column:122615},end:{line:4,column:122649}},{start:{line:4,column:122650},end:{line:4,column:122709}}],line:4},"1928":{loc:{start:{line:4,column:122650},end:{line:4,column:122709}},type:"binary-expr",locations:[{start:{line:4,column:122650},end:{line:4,column:122667}},{start:{line:4,column:122670},end:{line:4,column:122708}}],line:4},"1929":{loc:{start:{line:4,column:122796},end:{line:4,column:122855}},type:"binary-expr",locations:[{start:{line:4,column:122796},end:{line:4,column:122824}},{start:{line:4,column:122826},end:{line:4,column:122855}}],line:4},"1930":{loc:{start:{line:4,column:122856},end:{line:4,column:122921}},type:"binary-expr",locations:[{start:{line:4,column:122856},end:{line:4,column:122882}},{start:{line:4,column:122885},end:{line:4,column:122920}}],line:4},"1931":{loc:{start:{line:4,column:122922},end:{line:4,column:122979}},type:"binary-expr",locations:[{start:{line:4,column:122922},end:{line:4,column:122944}},{start:{line:4,column:122947},end:{line:4,column:122978}}],line:4},"1932":{loc:{start:{line:4,column:122980},end:{line:4,column:123026}},type:"binary-expr",locations:[{start:{line:4,column:122980},end:{line:4,column:122999}},{start:{line:4,column:123002},end:{line:4,column:123025}}],line:4},"1933":{loc:{start:{line:4,column:123027},end:{line:4,column:123092}},type:"binary-expr",locations:[{start:{line:4,column:123027},end:{line:4,column:123052}},{start:{line:4,column:123055},end:{line:4,column:123091}}],line:4},"1934":{loc:{start:{line:4,column:123093},end:{line:4,column:123179}},type:"binary-expr",locations:[{start:{line:4,column:123093},end:{line:4,column:123125}},{start:{line:4,column:123128},end:{line:4,column:123178}}],line:4},"1935":{loc:{start:{line:4,column:123202},end:{line:4,column:123263}},type:"binary-expr",locations:[{start:{line:4,column:123202},end:{line:4,column:123230}},{start:{line:4,column:123232},end:{line:4,column:123263}}],line:4},"1936":{loc:{start:{line:4,column:123309},end:{line:4,column:123355}},type:"cond-expr",locations:[{start:{line:4,column:123318},end:{line:4,column:123338}},{start:{line:4,column:123339},end:{line:4,column:123355}}],line:4},"1937":{loc:{start:{line:4,column:123356},end:{line:4,column:123402}},type:"cond-expr",locations:[{start:{line:4,column:123365},end:{line:4,column:123385}},{start:{line:4,column:123386},end:{line:4,column:123402}}],line:4},"1938":{loc:{start:{line:4,column:123591},end:{line:4,column:123712}},type:"cond-expr",locations:[{start:{line:4,column:123618},end:{line:4,column:123659}},{start:{line:4,column:123660},end:{line:4,column:123712}}],line:4},"1939":{loc:{start:{line:4,column:123741},end:{line:4,column:123770}},type:"cond-expr",locations:[{start:{line:4,column:123750},end:{line:4,column:123762}},{start:{line:4,column:123763},end:{line:4,column:123770}}],line:4},"1940":{loc:{start:{line:4,column:123798},end:{line:4,column:123831}},type:"cond-expr",locations:[{start:{line:4,column:123807},end:{line:4,column:123821}},{start:{line:4,column:123822},end:{line:4,column:123831}}],line:4},"1941":{loc:{start:{line:4,column:123832},end:{line:4,column:123865}},type:"cond-expr",locations:[{start:{line:4,column:123841},end:{line:4,column:123855}},{start:{line:4,column:123856},end:{line:4,column:123865}}],line:4},"1942":{loc:{start:{line:4,column:123866},end:{line:4,column:123922}},type:"binary-expr",locations:[{start:{line:4,column:123866},end:{line:4,column:123892}},{start:{line:4,column:123895},end:{line:4,column:123921}}],line:4},"1943":{loc:{start:{line:4,column:124035},end:{line:4,column:124092}},type:"binary-expr",locations:[{start:{line:4,column:124035},end:{line:4,column:124061}},{start:{line:4,column:124063},end:{line:4,column:124092}}],line:4},"1944":{loc:{start:{line:4,column:124124},end:{line:4,column:124157}},type:"cond-expr",locations:[{start:{line:4,column:124133},end:{line:4,column:124147}},{start:{line:4,column:124148},end:{line:4,column:124157}}],line:4},"1945":{loc:{start:{line:4,column:124158},end:{line:4,column:124191}},type:"cond-expr",locations:[{start:{line:4,column:124167},end:{line:4,column:124181}},{start:{line:4,column:124182},end:{line:4,column:124191}}],line:4},"1946":{loc:{start:{line:4,column:124218},end:{line:4,column:124342}},type:"binary-expr",locations:[{start:{line:4,column:124218},end:{line:4,column:124237}},{start:{line:4,column:124240},end:{line:4,column:124341}}],line:4},"1947":{loc:{start:{line:4,column:124240},end:{line:4,column:124341}},type:"cond-expr",locations:[{start:{line:4,column:124263},end:{line:4,column:124296}},{start:{line:4,column:124297},end:{line:4,column:124341}}],line:4},"1948":{loc:{start:{line:4,column:124370},end:{line:4,column:124430}},type:"binary-expr",locations:[{start:{line:4,column:124370},end:{line:4,column:124398}},{start:{line:4,column:124401},end:{line:4,column:124429}}],line:4},"1949":{loc:{start:{line:4,column:124500},end:{line:4,column:124676}},type:"cond-expr",locations:[{start:{line:4,column:124527},end:{line:4,column:124586}},{start:{line:4,column:124589},end:{line:4,column:124675}}],line:4},"1950":{loc:{start:{line:4,column:124719},end:{line:4,column:124879}},type:"cond-expr",locations:[{start:{line:4,column:124752},end:{line:4,column:124805}},{start:{line:4,column:124806},end:{line:4,column:124879}}],line:4},"1951":{loc:{start:{line:4,column:125193},end:{line:4,column:125343}},type:"cond-expr",locations:[{start:{line:4,column:125212},end:{line:4,column:125267}},{start:{line:4,column:125270},end:{line:4,column:125342}}],line:4},"1952":{loc:{start:{line:4,column:125398},end:{line:4,column:125466}},type:"if",locations:[{start:{line:4,column:125398},end:{line:4,column:125466}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1953":{loc:{start:{line:4,column:125401},end:{line:4,column:125456}},type:"binary-expr",locations:[{start:{line:4,column:125402},end:{line:4,column:125410}},{start:{line:4,column:125412},end:{line:4,column:125429}},{start:{line:4,column:125432},end:{line:4,column:125456}}],line:4},"1954":{loc:{start:{line:4,column:125525},end:{line:4,column:125559}},type:"cond-expr",locations:[{start:{line:4,column:125534},end:{line:4,column:125546}},{start:{line:4,column:125547},end:{line:4,column:125559}}],line:4},"1955":{loc:{start:{line:4,column:125560},end:{line:4,column:125594}},type:"cond-expr",locations:[{start:{line:4,column:125569},end:{line:4,column:125581}},{start:{line:4,column:125582},end:{line:4,column:125594}}],line:4},"1956":{loc:{start:{line:4,column:125679},end:{line:4,column:125710}},type:"binary-expr",locations:[{start:{line:4,column:125679},end:{line:4,column:125680}},{start:{line:4,column:125683},end:{line:4,column:125709}}],line:4},"1957":{loc:{start:{line:4,column:125762},end:{line:4,column:125779}},type:"cond-expr",locations:[{start:{line:4,column:125764},end:{line:4,column:125774}},{start:{line:4,column:125775},end:{line:4,column:125779}}],line:4},"1958":{loc:{start:{line:4,column:125815},end:{line:4,column:125860}},type:"binary-expr",locations:[{start:{line:4,column:125815},end:{line:4,column:125840}},{start:{line:4,column:125842},end:{line:4,column:125860}}],line:4},"1959":{loc:{start:{line:4,column:125970},end:{line:4,column:125991}},type:"if",locations:[{start:{line:4,column:125970},end:{line:4,column:125991}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1960":{loc:{start:{line:4,column:126006},end:{line:4,column:126029}},type:"binary-expr",locations:[{start:{line:4,column:126006},end:{line:4,column:126007}},{start:{line:4,column:126009},end:{line:4,column:126019}},{start:{line:4,column:126022},end:{line:4,column:126028}}],line:4},"1961":{loc:{start:{line:4,column:126216},end:{line:4,column:126268}},type:"if",locations:[{start:{line:4,column:126216},end:{line:4,column:126268}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1962":{loc:{start:{line:4,column:126389},end:{line:4,column:126396}},type:"binary-expr",locations:[{start:{line:4,column:126389},end:{line:4,column:126390}},{start:{line:4,column:126392},end:{line:4,column:126396}}],line:4},"1963":{loc:{start:{line:4,column:126452},end:{line:4,column:126472}},type:"if",locations:[{start:{line:4,column:126452},end:{line:4,column:126472}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1964":{loc:{start:{line:4,column:126634},end:{line:4,column:126652}},type:"binary-expr",locations:[{start:{line:4,column:126634},end:{line:4,column:126645}},{start:{line:4,column:126647},end:{line:4,column:126652}}],line:4},"1965":{loc:{start:{line:4,column:126667},end:{line:4,column:126672}},type:"binary-expr",locations:[{start:{line:4,column:126667},end:{line:4,column:126668}},{start:{line:4,column:126670},end:{line:4,column:126672}}],line:4},"1966":{loc:{start:{line:4,column:126914},end:{line:4,column:126956}},type:"cond-expr",locations:[{start:{line:4,column:126934},end:{line:4,column:126935}},{start:{line:4,column:126936},end:{line:4,column:126956}}],line:4},"1967":{loc:{start:{line:4,column:126936},end:{line:4,column:126956}},type:"binary-expr",locations:[{start:{line:4,column:126936},end:{line:4,column:126943}},{start:{line:4,column:126945},end:{line:4,column:126956}}],line:4},"1968":{loc:{start:{line:4,column:126984},end:{line:4,column:127002}},type:"if",locations:[{start:{line:4,column:126984},end:{line:4,column:127002}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4},"1969":{loc:{start:{line:4,column:127447},end:{line:4,column:127451}},type:"binary-expr",locations:[{start:{line:4,column:127447},end:{line:4,column:127448}},{start:{line:4,column:127450},end:{line:4,column:127451}}],line:4},"1970":{loc:{start:{line:4,column:128561},end:{line:4,column:128564}},type:"default-arg",locations:[{start:{line:4,column:128563},end:{line:4,column:128564}}],line:4},"1971":{loc:{start:{line:4,column:128664},end:{line:4,column:128668}},type:"binary-expr",locations:[{start:{line:4,column:128664},end:{line:4,column:128665}},{start:{line:4,column:128667},end:{line:4,column:128668}}],line:4},"1972":{loc:{start:{line:4,column:128850},end:{line:4,column:128890}},type:"cond-expr",locations:[{start:{line:4,column:128856},end:{line:4,column:128862}},{start:{line:4,column:128863},end:{line:4,column:128890}}],line:4},"1973":{loc:{start:{line:4,column:128891},end:{line:4,column:128935}},type:"if",locations:[{start:{line:4,column:128891},end:{line:4,column:128935}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:4}},s:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"116":0,"117":0,"118":0,"119":0,"120":0,"121":0,"122":0,"123":0,"124":0,"125":0,"126":0,"127":0,"128":0,"129":0,"130":0,"131":0,"132":0,"133":0,"134":0,"135":0,"136":0,"137":0,"138":0,"139":0,"140":0,"141":0,"142":0,"143":0,"144":0,"145":0,"146":0,"147":0,"148":0,"149":0,"150":0,"151":0,"152":0,"153":0,"154":0,"155":0,"156":0,"157":0,"158":0,"159":0,"160":0,"161":0,"162":0,"163":0,"164":0,"165":0,"166":0,"167":0,"168":0,"169":0,"170":0,"171":0,"172":0,"173":0,"174":0,"175":0,"176":0,"177":0,"178":0,"179":0,"180":0,"181":0,"182":0,"183":0,"184":0,"185":0,"186":0,"187":0,"188":0,"189":0,"190":0,"191":0,"192":0,"193":0,"194":0,"195":0,"196":0,"197":0,"198":0,"199":0,"200":0,"201":0,"202":0,"203":0,"204":0,"205":0,"206":0,"207":0,"208":0,"209":0,"210":0,"211":0,"212":0,"213":0,"214":0,"215":0,"216":0,"217":0,"218":0,"219":0,"220":0,"221":0,"222":0,"223":0,"224":0,"225":0,"226":0,"227":0,"228":0,"229":0,"230":0,"231":0,"232":0,"233":0,"234":0,"235":0,"236":0,"237":0,"238":0,"239":0,"240":0,"241":0,"242":0,"243":0,"244":0,"245":0,"246":0,"247":0,"248":0,"249":0,"250":0,"251":0,"252":0,"253":0,"254":0,"255":0,"256":0,"257":0,"258":0,"259":0,"260":0,"261":0,"262":0,"263":0,"264":0,"265":0,"266":0,"267":0,"268":0,"269":0,"270":0,"271":0,"272":0,"273":0,"274":0,"275":0,"276":0,"277":0,"278":0,"279":0,"280":0,"281":0,"282":0,"283":0,"284":0,"285":0,"286":0,"287":0,"288":0,"289":0,"290":0,"291":0,"292":0,"293":0,"294":0,"295":0,"296":0,"297":0,"298":0,"299":0,"300":0,"301":0,"302":0,"303":0,"304":0,"305":0,"306":0,"307":0,"308":0,"309":0,"310":0,"311":0,"312":0,"313":0,"314":0,"315":0,"316":0,"317":0,"318":0,"319":0,"320":0,"321":0,"322":0,"323":0,"324":0,"325":0,"326":0,"327":0,"328":0,"329":0,"330":0,"331":0,"332":0,"333":0,"334":0,"335":0,"336":0,"337":0,"338":0,"339":0,"340":0,"341":0,"342":0,"343":0,"344":0,"345":0,"346":0,"347":0,"348":0,"349":0,"350":0,"351":0,"352":0,"353":0,"354":0,"355":0,"356":0,"357":0,"358":0,"359":0,"360":0,"361":0,"362":0,"363":0,"364":0,"365":0,"366":0,"367":0,"368":0,"369":0,"370":0,"371":0,"372":0,"373":0,"374":0,"375":0,"376":0,"377":0,"378":0,"379":0,"380":0,"381":0,"382":0,"383":0,"384":0,"385":0,"386":0,"387":0,"388":0,"389":0,"390":0,"391":0,"392":0,"393":0,"394":0,"395":0,"396":0,"397":0,"398":0,"399":0,"400":0,"401":0,"402":0,"403":0,"404":0,"405":0,"406":0,"407":0,"408":0,"409":0,"410":0,"411":0,"412":0,"413":0,"414":0,"415":0,"416":0,"417":0,"418":0,"419":0,"420":0,"421":0,"422":0,"423":0,"424":0,"425":0,"426":0,"427":0,"428":0,"429":0,"430":0,"431":0,"432":0,"433":0,"434":0,"435":0,"436":0,"437":0,"438":0,"439":0,"440":0,"441":0,"442":0,"443":0,"444":0,"445":0,"446":0,"447":0,"448":0,"449":0,"450":0,"451":0,"452":0,"453":0,"454":0,"455":0,"456":0,"457":0,"458":0,"459":0,"460":0,"461":0,"462":0,"463":0,"464":0,"465":0,"466":0,"467":0,"468":0,"469":0,"470":0,"471":0,"472":0,"473":0,"474":0,"475":0,"476":0,"477":0,"478":0,"479":0,"480":0,"481":0,"482":0,"483":0,"484":0,"485":0,"486":0,"487":0,"488":0,"489":0,"490":0,"491":0,"492":0,"493":0,"494":0,"495":0,"496":0,"497":0,"498":0,"499":0,"500":0,"501":0,"502":0,"503":0,"504":0,"505":0,"506":0,"507":0,"508":0,"509":0,"510":0,"511":0,"512":0,"513":0,"514":0,"515":0,"516":0,"517":0,"518":0,"519":0,"520":0,"521":0,"522":0,"523":0,"524":0,"525":0,"526":0,"527":0,"528":0,"529":0,"530":0,"531":0,"532":0,"533":0,"534":0,"535":0,"536":0,"537":0,"538":0,"539":0,"540":0,"541":0,"542":0,"543":0,"544":0,"545":0,"546":0,"547":0,"548":0,"549":0,"550":0,"551":0,"552":0,"553":0,"554":0,"555":0,"556":0,"557":0,"558":0,"559":0,"560":0,"561":0,"562":0,"563":0,"564":0,"565":0,"566":0,"567":0,"568":0,"569":0,"570":0,"571":0,"572":0,"573":0,"574":0,"575":0,"576":0,"577":0,"578":0,"579":0,"580":0,"581":0,"582":0,"583":0,"584":0,"585":0,"586":0,"587":0,"588":0,"589":0,"590":0,"591":0,"592":0,"593":0,"594":0,"595":0,"596":0,"597":0,"598":0,"599":0,"600":0,"601":0,"602":0,"603":0,"604":0,"605":0,"606":0,"607":0,"608":0,"609":0,"610":0,"611":0,"612":0,"613":0,"614":0,"615":0,"616":0,"617":0,"618":0,"619":0,"620":0,"621":0,"622":0,"623":0,"624":0,"625":0,"626":0,"627":0,"628":0,"629":0,"630":0,"631":0,"632":0,"633":0,"634":0,"635":0,"636":0,"637":0,"638":0,"639":0,"640":0,"641":0,"642":0,"643":0,"644":0,"645":0,"646":0,"647":0,"648":0,"649":0,"650":0,"651":0,"652":0,"653":0,"654":0,"655":0,"656":0,"657":0,"658":0,"659":0,"660":0,"661":0,"662":0,"663":0,"664":0,"665":0,"666":0,"667":0,"668":0,"669":0,"670":0,"671":0,"672":0,"673":0,"674":0,"675":0,"676":0,"677":0,"678":0,"679":0,"680":0,"681":0,"682":0,"683":0,"684":0,"685":0,"686":0,"687":0,"688":0,"689":0,"690":0,"691":0,"692":0,"693":0,"694":0,"695":0,"696":0,"697":0,"698":0,"699":0,"700":0,"701":0,"702":0,"703":0,"704":0,"705":0,"706":0,"707":0,"708":0,"709":0,"710":0,"711":0,"712":0,"713":0,"714":0,"715":0,"716":0,"717":0,"718":0,"719":0,"720":0,"721":0,"722":0,"723":0,"724":0,"725":0,"726":0,"727":0,"728":0,"729":0,"730":0,"731":0,"732":0,"733":0,"734":0,"735":0,"736":0,"737":0,"738":0,"739":0,"740":0,"741":0,"742":0,"743":0,"744":0,"745":0,"746":0,"747":0,"748":0,"749":0,"750":0,"751":0,"752":0,"753":0,"754":0,"755":0,"756":0,"757":0,"758":0,"759":0,"760":0,"761":0,"762":0,"763":0,"764":0,"765":0,"766":0,"767":0,"768":0,"769":0,"770":0,"771":0,"772":0,"773":0,"774":0,"775":0,"776":0,"777":0,"778":0,"779":0,"780":0,"781":0,"782":0,"783":0,"784":0,"785":0,"786":0,"787":0,"788":0,"789":0,"790":0,"791":0,"792":0,"793":0,"794":0,"795":0,"796":0,"797":0,"798":0,"799":0,"800":0,"801":0,"802":0,"803":0,"804":0,"805":0,"806":0,"807":0,"808":0,"809":0,"810":0,"811":0,"812":0,"813":0,"814":0,"815":0,"816":0,"817":0,"818":0,"819":0,"820":0,"821":0,"822":0,"823":0,"824":0,"825":0,"826":0,"827":0,"828":0,"829":0,"830":0,"831":0,"832":0,"833":0,"834":0,"835":0,"836":0,"837":0,"838":0,"839":0,"840":0,"841":0,"842":0,"843":0,"844":0,"845":0,"846":0,"847":0,"848":0,"849":0,"850":0,"851":0,"852":0,"853":0,"854":0,"855":0,"856":0,"857":0,"858":0,"859":0,"860":0,"861":0,"862":0,"863":0,"864":0,"865":0,"866":0,"867":0,"868":0,"869":0,"870":0,"871":0,"872":0,"873":0,"874":0,"875":0,"876":0,"877":0,"878":0,"879":0,"880":0,"881":0,"882":0,"883":0,"884":0,"885":0,"886":0,"887":0,"888":0,"889":0,"890":0,"891":0,"892":0,"893":0,"894":0,"895":0,"896":0,"897":0,"898":0,"899":0,"900":0,"901":0,"902":0,"903":0,"904":0,"905":0,"906":0,"907":0,"908":0,"909":0,"910":0,"911":0,"912":0,"913":0,"914":0,"915":0,"916":0,"917":0,"918":0,"919":0,"920":0,"921":0,"922":0,"923":0,"924":0,"925":0,"926":0,"927":0,"928":0,"929":0,"930":0,"931":0,"932":0,"933":0,"934":0,"935":0,"936":0,"937":0,"938":0,"939":0,"940":0,"941":0,"942":0,"943":0,"944":0,"945":0,"946":0,"947":0,"948":0,"949":0,"950":0,"951":0,"952":0,"953":0,"954":0,"955":0,"956":0,"957":0,"958":0,"959":0,"960":0,"961":0,"962":0,"963":0,"964":0,"965":0,"966":0,"967":0,"968":0,"969":0,"970":0,"971":0,"972":0,"973":0,"974":0,"975":0,"976":0,"977":0,"978":0,"979":0,"980":0,"981":0,"982":0,"983":0,"984":0,"985":0,"986":0,"987":0,"988":0,"989":0,"990":0,"991":0,"992":0,"993":0,"994":0,"995":0,"996":0,"997":0,"998":0,"999":0,"1000":0,"1001":0,"1002":0,"1003":0,"1004":0,"1005":0,"1006":0,"1007":0,"1008":0,"1009":0,"1010":0,"1011":0,"1012":0,"1013":0,"1014":0,"1015":0,"1016":0,"1017":0,"1018":0,"1019":0,"1020":0,"1021":0,"1022":0,"1023":0,"1024":0,"1025":0,"1026":0,"1027":0,"1028":0,"1029":0,"1030":0,"1031":0,"1032":0,"1033":0,"1034":0,"1035":0,"1036":0,"1037":0,"1038":0,"1039":0,"1040":0,"1041":0,"1042":0,"1043":0,"1044":0,"1045":0,"1046":0,"1047":0,"1048":0,"1049":0,"1050":0,"1051":0,"1052":0,"1053":0,"1054":0,"1055":0,"1056":0,"1057":0,"1058":0,"1059":0,"1060":0,"1061":0,"1062":0,"1063":0,"1064":0,"1065":0,"1066":0,"1067":0,"1068":0,"1069":0,"1070":0,"1071":0,"1072":0,"1073":0,"1074":0,"1075":0,"1076":0,"1077":0,"1078":0,"1079":0,"1080":0,"1081":0,"1082":0,"1083":0,"1084":0,"1085":0,"1086":0,"1087":0,"1088":0,"1089":0,"1090":0,"1091":0,"1092":0,"1093":0,"1094":0,"1095":0,"1096":0,"1097":0,"1098":0,"1099":0,"1100":0,"1101":0,"1102":0,"1103":0,"1104":0,"1105":0,"1106":0,"1107":0,"1108":0,"1109":0,"1110":0,"1111":0,"1112":0,"1113":0,"1114":0,"1115":0,"1116":0,"1117":0,"1118":0,"1119":0,"1120":0,"1121":0,"1122":0,"1123":0,"1124":0,"1125":0,"1126":0,"1127":0,"1128":0,"1129":0,"1130":0,"1131":0,"1132":0,"1133":0,"1134":0,"1135":0,"1136":0,"1137":0,"1138":0,"1139":0,"1140":0,"1141":0,"1142":0,"1143":0,"1144":0,"1145":0,"1146":0,"1147":0,"1148":0,"1149":0,"1150":0,"1151":0,"1152":0,"1153":0,"1154":0,"1155":0,"1156":0,"1157":0,"1158":0,"1159":0,"1160":0,"1161":0,"1162":0,"1163":0,"1164":0,"1165":0,"1166":0,"1167":0,"1168":0,"1169":0,"1170":0,"1171":0,"1172":0,"1173":0,"1174":0,"1175":0,"1176":0,"1177":0,"1178":0,"1179":0,"1180":0,"1181":0,"1182":0,"1183":0,"1184":0,"1185":0,"1186":0,"1187":0,"1188":0,"1189":0,"1190":0,"1191":0,"1192":0,"1193":0,"1194":0,"1195":0,"1196":0,"1197":0,"1198":0,"1199":0,"1200":0,"1201":0,"1202":0,"1203":0,"1204":0,"1205":0,"1206":0,"1207":0,"1208":0,"1209":0,"1210":0,"1211":0,"1212":0,"1213":0,"1214":0,"1215":0,"1216":0,"1217":0,"1218":0,"1219":0,"1220":0,"1221":0,"1222":0,"1223":0,"1224":0,"1225":0,"1226":0,"1227":0,"1228":0,"1229":0,"1230":0,"1231":0,"1232":0,"1233":0,"1234":0,"1235":0,"1236":0,"1237":0,"1238":0,"1239":0,"1240":0,"1241":0,"1242":0,"1243":0,"1244":0,"1245":0,"1246":0,"1247":0,"1248":0,"1249":0,"1250":0,"1251":0,"1252":0,"1253":0,"1254":0,"1255":0,"1256":0,"1257":0,"1258":0,"1259":0,"1260":0,"1261":0,"1262":0,"1263":0,"1264":0,"1265":0,"1266":0,"1267":0,"1268":0,"1269":0,"1270":0,"1271":0,"1272":0,"1273":0,"1274":0,"1275":0,"1276":0,"1277":0,"1278":0,"1279":0,"1280":0,"1281":0,"1282":0,"1283":0,"1284":0,"1285":0,"1286":0,"1287":0,"1288":0,"1289":0,"1290":0,"1291":0,"1292":0,"1293":0,"1294":0,"1295":0,"1296":0,"1297":0,"1298":0,"1299":0,"1300":0,"1301":0,"1302":0,"1303":0,"1304":0,"1305":0,"1306":0,"1307":0,"1308":0,"1309":0,"1310":0,"1311":0,"1312":0,"1313":0,"1314":0,"1315":0,"1316":0,"1317":0,"1318":0,"1319":0,"1320":0,"1321":0,"1322":0,"1323":0,"1324":0,"1325":0,"1326":0,"1327":0,"1328":0,"1329":0,"1330":0,"1331":0,"1332":0,"1333":0,"1334":0,"1335":0,"1336":0,"1337":0,"1338":0,"1339":0,"1340":0,"1341":0,"1342":0,"1343":0,"1344":0,"1345":0,"1346":0,"1347":0,"1348":0,"1349":0,"1350":0,"1351":0,"1352":0,"1353":0,"1354":0,"1355":0,"1356":0,"1357":0,"1358":0,"1359":0,"1360":0,"1361":0,"1362":0,"1363":0,"1364":0,"1365":0,"1366":0,"1367":0,"1368":0,"1369":0,"1370":0,"1371":0,"1372":0,"1373":0,"1374":0,"1375":0,"1376":0,"1377":0,"1378":0,"1379":0,"1380":0,"1381":0,"1382":0,"1383":0,"1384":0,"1385":0,"1386":0,"1387":0,"1388":0,"1389":0,"1390":0,"1391":0,"1392":0,"1393":0,"1394":0,"1395":0,"1396":0,"1397":0,"1398":0,"1399":0,"1400":0,"1401":0,"1402":0,"1403":0,"1404":0,"1405":0,"1406":0,"1407":0,"1408":0,"1409":0,"1410":0,"1411":0,"1412":0,"1413":0,"1414":0,"1415":0,"1416":0,"1417":0,"1418":0,"1419":0,"1420":0,"1421":0,"1422":0,"1423":0,"1424":0,"1425":0,"1426":0,"1427":0,"1428":0,"1429":0,"1430":0,"1431":0,"1432":0,"1433":0,"1434":0,"1435":0,"1436":0,"1437":0,"1438":0,"1439":0,"1440":0,"1441":0,"1442":0,"1443":0,"1444":0,"1445":0,"1446":0,"1447":0,"1448":0,"1449":0,"1450":0,"1451":0,"1452":0,"1453":0,"1454":0,"1455":0,"1456":0,"1457":0,"1458":0,"1459":0,"1460":0,"1461":0,"1462":0,"1463":0,"1464":0,"1465":0,"1466":0,"1467":0,"1468":0,"1469":0,"1470":0,"1471":0,"1472":0,"1473":0,"1474":0,"1475":0,"1476":0,"1477":0,"1478":0,"1479":0,"1480":0,"1481":0,"1482":0,"1483":0,"1484":0,"1485":0,"1486":0,"1487":0,"1488":0,"1489":0,"1490":0,"1491":0,"1492":0,"1493":0,"1494":0,"1495":0,"1496":0,"1497":0,"1498":0,"1499":0,"1500":0,"1501":0,"1502":0,"1503":0,"1504":0,"1505":0,"1506":0,"1507":0,"1508":0,"1509":0,"1510":0,"1511":0,"1512":0,"1513":0,"1514":0,"1515":0,"1516":0,"1517":0,"1518":0,"1519":0,"1520":0,"1521":0,"1522":0,"1523":0,"1524":0,"1525":0,"1526":0,"1527":0,"1528":0,"1529":0,"1530":0,"1531":0,"1532":0,"1533":0,"1534":0,"1535":0,"1536":0,"1537":0,"1538":0,"1539":0,"1540":0,"1541":0,"1542":0,"1543":0,"1544":0,"1545":0,"1546":0,"1547":0,"1548":0,"1549":0,"1550":0,"1551":0,"1552":0,"1553":0,"1554":0,"1555":0,"1556":0,"1557":0,"1558":0,"1559":0,"1560":0,"1561":0,"1562":0,"1563":0,"1564":0,"1565":0,"1566":0,"1567":0,"1568":0,"1569":0,"1570":0,"1571":0,"1572":0,"1573":0,"1574":0,"1575":0,"1576":0,"1577":0,"1578":0,"1579":0,"1580":0,"1581":0,"1582":0,"1583":0,"1584":0,"1585":0,"1586":0,"1587":0,"1588":0,"1589":0,"1590":0,"1591":0,"1592":0,"1593":0,"1594":0,"1595":0,"1596":0,"1597":0,"1598":0,"1599":0,"1600":0,"1601":0,"1602":0,"1603":0,"1604":0,"1605":0,"1606":0,"1607":0,"1608":0,"1609":0,"1610":0,"1611":0,"1612":0,"1613":0,"1614":0,"1615":0,"1616":0,"1617":0,"1618":0,"1619":0,"1620":0,"1621":0,"1622":0,"1623":0,"1624":0,"1625":0,"1626":0,"1627":0,"1628":0,"1629":0,"1630":0,"1631":0,"1632":0,"1633":0,"1634":0,"1635":0,"1636":0,"1637":0,"1638":0,"1639":0,"1640":0,"1641":0,"1642":0,"1643":0,"1644":0,"1645":0,"1646":0,"1647":0,"1648":0,"1649":0,"1650":0,"1651":0,"1652":0,"1653":0,"1654":0,"1655":0,"1656":0,"1657":0,"1658":0,"1659":0,"1660":0,"1661":0,"1662":0,"1663":0,"1664":0,"1665":0,"1666":0,"1667":0,"1668":0,"1669":0,"1670":0,"1671":0,"1672":0,"1673":0,"1674":0,"1675":0,"1676":0,"1677":0,"1678":0,"1679":0,"1680":0,"1681":0,"1682":0,"1683":0,"1684":0,"1685":0,"1686":0,"1687":0,"1688":0,"1689":0,"1690":0,"1691":0,"1692":0,"1693":0,"1694":0,"1695":0,"1696":0,"1697":0,"1698":0,"1699":0,"1700":0,"1701":0,"1702":0,"1703":0,"1704":0,"1705":0,"1706":0,"1707":0,"1708":0,"1709":0,"1710":0,"1711":0,"1712":0,"1713":0,"1714":0,"1715":0,"1716":0,"1717":0,"1718":0,"1719":0,"1720":0,"1721":0,"1722":0,"1723":0,"1724":0,"1725":0,"1726":0,"1727":0,"1728":0,"1729":0,"1730":0,"1731":0,"1732":0,"1733":0,"1734":0,"1735":0,"1736":0,"1737":0,"1738":0,"1739":0,"1740":0,"1741":0,"1742":0,"1743":0,"1744":0,"1745":0,"1746":0,"1747":0,"1748":0,"1749":0,"1750":0,"1751":0,"1752":0,"1753":0,"1754":0,"1755":0,"1756":0,"1757":0,"1758":0,"1759":0,"1760":0,"1761":0,"1762":0,"1763":0,"1764":0,"1765":0,"1766":0,"1767":0,"1768":0,"1769":0,"1770":0,"1771":0,"1772":0,"1773":0,"1774":0,"1775":0,"1776":0,"1777":0,"1778":0,"1779":0,"1780":0,"1781":0,"1782":0,"1783":0,"1784":0,"1785":0,"1786":0,"1787":0,"1788":0,"1789":0,"1790":0,"1791":0,"1792":0,"1793":0,"1794":0,"1795":0,"1796":0,"1797":0,"1798":0,"1799":0,"1800":0,"1801":0,"1802":0,"1803":0,"1804":0,"1805":0,"1806":0,"1807":0,"1808":0,"1809":0,"1810":0,"1811":0,"1812":0,"1813":0,"1814":0,"1815":0,"1816":0,"1817":0,"1818":0,"1819":0,"1820":0,"1821":0,"1822":0,"1823":0,"1824":0,"1825":0,"1826":0,"1827":0,"1828":0,"1829":0,"1830":0,"1831":0,"1832":0,"1833":0,"1834":0,"1835":0,"1836":0,"1837":0,"1838":0,"1839":0,"1840":0,"1841":0,"1842":0,"1843":0,"1844":0,"1845":0,"1846":0,"1847":0,"1848":0,"1849":0,"1850":0,"1851":0,"1852":0,"1853":0,"1854":0,"1855":0,"1856":0,"1857":0,"1858":0,"1859":0,"1860":0,"1861":0,"1862":0,"1863":0,"1864":0,"1865":0,"1866":0,"1867":0,"1868":0,"1869":0,"1870":0,"1871":0,"1872":0,"1873":0,"1874":0,"1875":0,"1876":0,"1877":0,"1878":0,"1879":0,"1880":0,"1881":0,"1882":0,"1883":0,"1884":0,"1885":0,"1886":0,"1887":0,"1888":0,"1889":0,"1890":0,"1891":0,"1892":0,"1893":0,"1894":0,"1895":0,"1896":0,"1897":0,"1898":0,"1899":0,"1900":0,"1901":0,"1902":0,"1903":0,"1904":0,"1905":0,"1906":0,"1907":0,"1908":0,"1909":0,"1910":0,"1911":0,"1912":0,"1913":0,"1914":0,"1915":0,"1916":0,"1917":0,"1918":0,"1919":0,"1920":0,"1921":0,"1922":0,"1923":0,"1924":0,"1925":0,"1926":0,"1927":0,"1928":0,"1929":0,"1930":0,"1931":0,"1932":0,"1933":0,"1934":0,"1935":0,"1936":0,"1937":0,"1938":0,"1939":0,"1940":0,"1941":0,"1942":0,"1943":0,"1944":0,"1945":0,"1946":0,"1947":0,"1948":0,"1949":0,"1950":0,"1951":0,"1952":0,"1953":0,"1954":0,"1955":0,"1956":0,"1957":0,"1958":0,"1959":0,"1960":0,"1961":0,"1962":0,"1963":0,"1964":0,"1965":0,"1966":0,"1967":0,"1968":0,"1969":0,"1970":0,"1971":0,"1972":0,"1973":0,"1974":0,"1975":0,"1976":0,"1977":0,"1978":0,"1979":0,"1980":0,"1981":0,"1982":0,"1983":0,"1984":0,"1985":0,"1986":0,"1987":0,"1988":0,"1989":0,"1990":0,"1991":0,"1992":0,"1993":0,"1994":0,"1995":0,"1996":0,"1997":0,"1998":0,"1999":0,"2000":0,"2001":0,"2002":0,"2003":0,"2004":0,"2005":0,"2006":0,"2007":0,"2008":0,"2009":0,"2010":0,"2011":0,"2012":0,"2013":0,"2014":0,"2015":0,"2016":0,"2017":0,"2018":0,"2019":0,"2020":0,"2021":0,"2022":0,"2023":0,"2024":0,"2025":0,"2026":0,"2027":0,"2028":0,"2029":0,"2030":0,"2031":0,"2032":0,"2033":0,"2034":0,"2035":0,"2036":0,"2037":0,"2038":0,"2039":0,"2040":0,"2041":0,"2042":0,"2043":0,"2044":0,"2045":0,"2046":0,"2047":0,"2048":0,"2049":0,"2050":0,"2051":0,"2052":0,"2053":0,"2054":0,"2055":0,"2056":0,"2057":0,"2058":0,"2059":0,"2060":0,"2061":0,"2062":0,"2063":0,"2064":0,"2065":0,"2066":0,"2067":0,"2068":0,"2069":0,"2070":0,"2071":0,"2072":0,"2073":0,"2074":0,"2075":0,"2076":0,"2077":0,"2078":0,"2079":0,"2080":0,"2081":0,"2082":0,"2083":0,"2084":0,"2085":0,"2086":0,"2087":0,"2088":0,"2089":0,"2090":0,"2091":0,"2092":0,"2093":0,"2094":0,"2095":0,"2096":0,"2097":0,"2098":0,"2099":0,"2100":0,"2101":0,"2102":0,"2103":0,"2104":0,"2105":0,"2106":0,"2107":0,"2108":0,"2109":0,"2110":0,"2111":0,"2112":0,"2113":0,"2114":0,"2115":0,"2116":0,"2117":0,"2118":0,"2119":0,"2120":0,"2121":0,"2122":0,"2123":0,"2124":0,"2125":0,"2126":0,"2127":0,"2128":0,"2129":0,"2130":0,"2131":0,"2132":0,"2133":0,"2134":0,"2135":0,"2136":0,"2137":0,"2138":0,"2139":0,"2140":0,"2141":0,"2142":0,"2143":0,"2144":0,"2145":0,"2146":0,"2147":0,"2148":0,"2149":0,"2150":0,"2151":0,"2152":0,"2153":0,"2154":0,"2155":0,"2156":0,"2157":0,"2158":0,"2159":0,"2160":0,"2161":0,"2162":0,"2163":0,"2164":0,"2165":0,"2166":0,"2167":0,"2168":0,"2169":0,"2170":0,"2171":0,"2172":0,"2173":0,"2174":0,"2175":0,"2176":0,"2177":0,"2178":0,"2179":0,"2180":0,"2181":0,"2182":0,"2183":0,"2184":0,"2185":0,"2186":0,"2187":0,"2188":0,"2189":0,"2190":0,"2191":0,"2192":0,"2193":0,"2194":0,"2195":0,"2196":0,"2197":0,"2198":0,"2199":0,"2200":0,"2201":0,"2202":0,"2203":0,"2204":0,"2205":0,"2206":0,"2207":0,"2208":0,"2209":0,"2210":0,"2211":0,"2212":0,"2213":0,"2214":0,"2215":0,"2216":0,"2217":0,"2218":0,"2219":0,"2220":0,"2221":0,"2222":0,"2223":0,"2224":0,"2225":0,"2226":0,"2227":0,"2228":0,"2229":0,"2230":0,"2231":0,"2232":0,"2233":0,"2234":0,"2235":0,"2236":0,"2237":0,"2238":0,"2239":0,"2240":0,"2241":0,"2242":0,"2243":0,"2244":0,"2245":0,"2246":0,"2247":0,"2248":0,"2249":0,"2250":0,"2251":0,"2252":0,"2253":0,"2254":0,"2255":0,"2256":0,"2257":0,"2258":0,"2259":0,"2260":0,"2261":0,"2262":0,"2263":0,"2264":0,"2265":0,"2266":0,"2267":0,"2268":0,"2269":0,"2270":0,"2271":0,"2272":0,"2273":0,"2274":0,"2275":0,"2276":0,"2277":0,"2278":0,"2279":0,"2280":0,"2281":0,"2282":0,"2283":0,"2284":0,"2285":0,"2286":0,"2287":0,"2288":0,"2289":0,"2290":0,"2291":0,"2292":0,"2293":0,"2294":0,"2295":0,"2296":0,"2297":0,"2298":0,"2299":0,"2300":0,"2301":0,"2302":0,"2303":0,"2304":0,"2305":0,"2306":0,"2307":0,"2308":0,"2309":0,"2310":0,"2311":0,"2312":0,"2313":0,"2314":0,"2315":0,"2316":0,"2317":0,"2318":0,"2319":0,"2320":0,"2321":0,"2322":0,"2323":0,"2324":0,"2325":0,"2326":0,"2327":0,"2328":0,"2329":0,"2330":0,"2331":0,"2332":0,"2333":0,"2334":0,"2335":0,"2336":0,"2337":0,"2338":0,"2339":0,"2340":0,"2341":0,"2342":0,"2343":0,"2344":0,"2345":0,"2346":0,"2347":0,"2348":0,"2349":0,"2350":0,"2351":0,"2352":0,"2353":0,"2354":0,"2355":0,"2356":0,"2357":0,"2358":0,"2359":0,"2360":0,"2361":0,"2362":0,"2363":0,"2364":0,"2365":0,"2366":0,"2367":0,"2368":0,"2369":0,"2370":0,"2371":0,"2372":0,"2373":0,"2374":0,"2375":0,"2376":0,"2377":0,"2378":0,"2379":0,"2380":0,"2381":0,"2382":0,"2383":0,"2384":0,"2385":0,"2386":0,"2387":0,"2388":0,"2389":0,"2390":0,"2391":0,"2392":0,"2393":0,"2394":0,"2395":0,"2396":0,"2397":0,"2398":0,"2399":0,"2400":0,"2401":0,"2402":0,"2403":0,"2404":0,"2405":0,"2406":0,"2407":0,"2408":0,"2409":0,"2410":0,"2411":0,"2412":0,"2413":0,"2414":0,"2415":0,"2416":0,"2417":0,"2418":0,"2419":0,"2420":0,"2421":0,"2422":0,"2423":0,"2424":0,"2425":0,"2426":0,"2427":0,"2428":0,"2429":0,"2430":0,"2431":0,"2432":0,"2433":0,"2434":0,"2435":0,"2436":0,"2437":0,"2438":0,"2439":0,"2440":0,"2441":0,"2442":0,"2443":0,"2444":0,"2445":0,"2446":0,"2447":0,"2448":0,"2449":0,"2450":0,"2451":0,"2452":0,"2453":0,"2454":0,"2455":0,"2456":0,"2457":0,"2458":0,"2459":0,"2460":0,"2461":0,"2462":0,"2463":0,"2464":0,"2465":0,"2466":0,"2467":0,"2468":0,"2469":0,"2470":0,"2471":0,"2472":0,"2473":0,"2474":0,"2475":0,"2476":0,"2477":0,"2478":0,"2479":0,"2480":0,"2481":0,"2482":0,"2483":0,"2484":0,"2485":0,"2486":0,"2487":0,"2488":0,"2489":0,"2490":0,"2491":0,"2492":0,"2493":0,"2494":0,"2495":0,"2496":0,"2497":0,"2498":0,"2499":0,"2500":0,"2501":0,"2502":0,"2503":0,"2504":0,"2505":0,"2506":0,"2507":0,"2508":0,"2509":0,"2510":0,"2511":0,"2512":0,"2513":0,"2514":0,"2515":0,"2516":0,"2517":0,"2518":0,"2519":0,"2520":0,"2521":0,"2522":0,"2523":0,"2524":0,"2525":0,"2526":0,"2527":0,"2528":0,"2529":0,"2530":0,"2531":0,"2532":0,"2533":0,"2534":0,"2535":0,"2536":0,"2537":0,"2538":0,"2539":0,"2540":0,"2541":0,"2542":0,"2543":0,"2544":0,"2545":0,"2546":0,"2547":0,"2548":0,"2549":0,"2550":0,"2551":0,"2552":0,"2553":0,"2554":0,"2555":0,"2556":0,"2557":0,"2558":0,"2559":0,"2560":0,"2561":0,"2562":0,"2563":0,"2564":0,"2565":0,"2566":0,"2567":0,"2568":0,"2569":0,"2570":0,"2571":0,"2572":0,"2573":0,"2574":0,"2575":0,"2576":0,"2577":0,"2578":0,"2579":0,"2580":0,"2581":0,"2582":0,"2583":0,"2584":0,"2585":0,"2586":0,"2587":0,"2588":0,"2589":0,"2590":0,"2591":0,"2592":0,"2593":0,"2594":0,"2595":0,"2596":0,"2597":0,"2598":0,"2599":0,"2600":0,"2601":0,"2602":0,"2603":0,"2604":0,"2605":0,"2606":0,"2607":0,"2608":0,"2609":0,"2610":0,"2611":0,"2612":0,"2613":0,"2614":0,"2615":0,"2616":0,"2617":0,"2618":0,"2619":0,"2620":0,"2621":0,"2622":0,"2623":0,"2624":0,"2625":0,"2626":0,"2627":0,"2628":0,"2629":0,"2630":0,"2631":0,"2632":0,"2633":0,"2634":0,"2635":0,"2636":0,"2637":0,"2638":0,"2639":0,"2640":0,"2641":0,"2642":0,"2643":0,"2644":0,"2645":0,"2646":0,"2647":0,"2648":0,"2649":0,"2650":0,"2651":0,"2652":0,"2653":0,"2654":0,"2655":0,"2656":0,"2657":0,"2658":0,"2659":0,"2660":0,"2661":0,"2662":0,"2663":0,"2664":0,"2665":0,"2666":0,"2667":0,"2668":0,"2669":0,"2670":0,"2671":0,"2672":0,"2673":0,"2674":0,"2675":0,"2676":0,"2677":0,"2678":0,"2679":0,"2680":0,"2681":0,"2682":0,"2683":0,"2684":0,"2685":0,"2686":0,"2687":0,"2688":0,"2689":0,"2690":0,"2691":0,"2692":0,"2693":0,"2694":0,"2695":0,"2696":0,"2697":0,"2698":0,"2699":0,"2700":0,"2701":0,"2702":0,"2703":0,"2704":0,"2705":0,"2706":0,"2707":0,"2708":0,"2709":0,"2710":0,"2711":0,"2712":0,"2713":0,"2714":0,"2715":0,"2716":0,"2717":0,"2718":0,"2719":0,"2720":0,"2721":0,"2722":0,"2723":0,"2724":0,"2725":0,"2726":0,"2727":0,"2728":0,"2729":0,"2730":0,"2731":0,"2732":0,"2733":0,"2734":0,"2735":0,"2736":0,"2737":0,"2738":0,"2739":0,"2740":0,"2741":0,"2742":0,"2743":0,"2744":0,"2745":0,"2746":0,"2747":0,"2748":0,"2749":0,"2750":0,"2751":0,"2752":0,"2753":0,"2754":0,"2755":0,"2756":0,"2757":0,"2758":0,"2759":0,"2760":0,"2761":0,"2762":0,"2763":0,"2764":0,"2765":0,"2766":0,"2767":0,"2768":0,"2769":0,"2770":0,"2771":0,"2772":0,"2773":0,"2774":0,"2775":0,"2776":0,"2777":0,"2778":0,"2779":0,"2780":0,"2781":0,"2782":0,"2783":0,"2784":0,"2785":0,"2786":0,"2787":0,"2788":0,"2789":0,"2790":0,"2791":0,"2792":0,"2793":0,"2794":0,"2795":0,"2796":0,"2797":0,"2798":0,"2799":0,"2800":0,"2801":0,"2802":0,"2803":0,"2804":0,"2805":0,"2806":0,"2807":0,"2808":0,"2809":0,"2810":0,"2811":0,"2812":0,"2813":0,"2814":0,"2815":0,"2816":0,"2817":0,"2818":0,"2819":0,"2820":0,"2821":0,"2822":0,"2823":0,"2824":0,"2825":0,"2826":0,"2827":0,"2828":0,"2829":0,"2830":0,"2831":0,"2832":0,"2833":0,"2834":0,"2835":0,"2836":0,"2837":0,"2838":0,"2839":0,"2840":0,"2841":0,"2842":0,"2843":0,"2844":0,"2845":0,"2846":0,"2847":0,"2848":0,"2849":0,"2850":0,"2851":0,"2852":0,"2853":0,"2854":0,"2855":0,"2856":0,"2857":0,"2858":0,"2859":0,"2860":0,"2861":0,"2862":0,"2863":0,"2864":0,"2865":0,"2866":0,"2867":0,"2868":0,"2869":0,"2870":0,"2871":0,"2872":0,"2873":0,"2874":0,"2875":0,"2876":0,"2877":0,"2878":0,"2879":0,"2880":0,"2881":0,"2882":0,"2883":0,"2884":0,"2885":0,"2886":0,"2887":0,"2888":0,"2889":0,"2890":0,"2891":0,"2892":0,"2893":0,"2894":0,"2895":0,"2896":0,"2897":0,"2898":0,"2899":0,"2900":0,"2901":0,"2902":0,"2903":0,"2904":0,"2905":0,"2906":0,"2907":0,"2908":0,"2909":0,"2910":0,"2911":0,"2912":0,"2913":0,"2914":0,"2915":0,"2916":0,"2917":0,"2918":0,"2919":0,"2920":0,"2921":0,"2922":0,"2923":0,"2924":0,"2925":0,"2926":0,"2927":0,"2928":0,"2929":0,"2930":0,"2931":0,"2932":0,"2933":0,"2934":0,"2935":0,"2936":0,"2937":0,"2938":0,"2939":0,"2940":0,"2941":0,"2942":0,"2943":0,"2944":0,"2945":0,"2946":0,"2947":0,"2948":0,"2949":0,"2950":0,"2951":0,"2952":0,"2953":0,"2954":0,"2955":0,"2956":0,"2957":0,"2958":0,"2959":0,"2960":0,"2961":0,"2962":0,"2963":0,"2964":0,"2965":0,"2966":0,"2967":0,"2968":0,"2969":0,"2970":0,"2971":0,"2972":0,"2973":0,"2974":0,"2975":0,"2976":0,"2977":0,"2978":0,"2979":0,"2980":0,"2981":0,"2982":0,"2983":0,"2984":0,"2985":0,"2986":0,"2987":0,"2988":0,"2989":0,"2990":0,"2991":0,"2992":0,"2993":0,"2994":0,"2995":0,"2996":0,"2997":0,"2998":0,"2999":0,"3000":0,"3001":0,"3002":0,"3003":0,"3004":0,"3005":0,"3006":0,"3007":0,"3008":0,"3009":0,"3010":0,"3011":0,"3012":0,"3013":0,"3014":0,"3015":0,"3016":0,"3017":0,"3018":0,"3019":0,"3020":0,"3021":0,"3022":0,"3023":0,"3024":0,"3025":0,"3026":0,"3027":0,"3028":0,"3029":0,"3030":0,"3031":0,"3032":0,"3033":0,"3034":0,"3035":0,"3036":0,"3037":0,"3038":0,"3039":0,"3040":0,"3041":0,"3042":0,"3043":0,"3044":0,"3045":0,"3046":0,"3047":0,"3048":0,"3049":0,"3050":0,"3051":0,"3052":0,"3053":0,"3054":0,"3055":0,"3056":0,"3057":0,"3058":0,"3059":0,"3060":0,"3061":0,"3062":0,"3063":0,"3064":0,"3065":0,"3066":0,"3067":0,"3068":0,"3069":0,"3070":0,"3071":0,"3072":0,"3073":0,"3074":0,"3075":0,"3076":0,"3077":0,"3078":0,"3079":0,"3080":0,"3081":0,"3082":0,"3083":0,"3084":0,"3085":0,"3086":0,"3087":0,"3088":0,"3089":0,"3090":0,"3091":0,"3092":0,"3093":0,"3094":0,"3095":0,"3096":0,"3097":0,"3098":0,"3099":0,"3100":0,"3101":0,"3102":0,"3103":0,"3104":0,"3105":0,"3106":0,"3107":0,"3108":0,"3109":0,"3110":0,"3111":0,"3112":0,"3113":0,"3114":0,"3115":0,"3116":0,"3117":0,"3118":0,"3119":0,"3120":0,"3121":0,"3122":0,"3123":0,"3124":0,"3125":0,"3126":0,"3127":0,"3128":0,"3129":0,"3130":0,"3131":0,"3132":0,"3133":0,"3134":0,"3135":0,"3136":0,"3137":0,"3138":0,"3139":0,"3140":0,"3141":0,"3142":0,"3143":0,"3144":0,"3145":0,"3146":0,"3147":0,"3148":0,"3149":0,"3150":0,"3151":0,"3152":0,"3153":0,"3154":0,"3155":0,"3156":0,"3157":0,"3158":0,"3159":0,"3160":0,"3161":0,"3162":0,"3163":0,"3164":0,"3165":0,"3166":0,"3167":0,"3168":0,"3169":0,"3170":0,"3171":0,"3172":0,"3173":0,"3174":0,"3175":0,"3176":0,"3177":0,"3178":0,"3179":0,"3180":0,"3181":0,"3182":0,"3183":0,"3184":0,"3185":0,"3186":0,"3187":0,"3188":0,"3189":0,"3190":0,"3191":0,"3192":0,"3193":0,"3194":0,"3195":0,"3196":0,"3197":0,"3198":0,"3199":0,"3200":0,"3201":0,"3202":0,"3203":0,"3204":0,"3205":0,"3206":0,"3207":0,"3208":0,"3209":0,"3210":0,"3211":0,"3212":0,"3213":0,"3214":0,"3215":0,"3216":0,"3217":0,"3218":0,"3219":0,"3220":0,"3221":0,"3222":0,"3223":0,"3224":0,"3225":0,"3226":0,"3227":0,"3228":0,"3229":0,"3230":0,"3231":0,"3232":0,"3233":0,"3234":0,"3235":0,"3236":0,"3237":0,"3238":0,"3239":0,"3240":0,"3241":0,"3242":0,"3243":0,"3244":0,"3245":0,"3246":0,"3247":0,"3248":0,"3249":0,"3250":0,"3251":0,"3252":0,"3253":0,"3254":0,"3255":0,"3256":0,"3257":0,"3258":0,"3259":0,"3260":0,"3261":0,"3262":0,"3263":0,"3264":0,"3265":0,"3266":0,"3267":0,"3268":0,"3269":0,"3270":0,"3271":0,"3272":0,"3273":0,"3274":0,"3275":0,"3276":0,"3277":0,"3278":0,"3279":0,"3280":0,"3281":0,"3282":0,"3283":0,"3284":0,"3285":0,"3286":0,"3287":0,"3288":0,"3289":0,"3290":0,"3291":0,"3292":0,"3293":0,"3294":0,"3295":0,"3296":0,"3297":0,"3298":0,"3299":0,"3300":0,"3301":0,"3302":0,"3303":0,"3304":0,"3305":0,"3306":0,"3307":0,"3308":0,"3309":0,"3310":0,"3311":0,"3312":0,"3313":0,"3314":0,"3315":0,"3316":0,"3317":0,"3318":0,"3319":0,"3320":0,"3321":0,"3322":0,"3323":0,"3324":0,"3325":0,"3326":0,"3327":0,"3328":0,"3329":0,"3330":0,"3331":0,"3332":0,"3333":0,"3334":0,"3335":0,"3336":0,"3337":0,"3338":0,"3339":0,"3340":0,"3341":0,"3342":0,"3343":0,"3344":0,"3345":0,"3346":0,"3347":0,"3348":0,"3349":0,"3350":0,"3351":0,"3352":0,"3353":0,"3354":0,"3355":0,"3356":0,"3357":0,"3358":0,"3359":0,"3360":0,"3361":0,"3362":0,"3363":0,"3364":0,"3365":0,"3366":0,"3367":0,"3368":0,"3369":0,"3370":0,"3371":0,"3372":0,"3373":0,"3374":0,"3375":0,"3376":0,"3377":0,"3378":0,"3379":0,"3380":0,"3381":0,"3382":0,"3383":0,"3384":0,"3385":0,"3386":0,"3387":0,"3388":0,"3389":0,"3390":0,"3391":0,"3392":0,"3393":0,"3394":0,"3395":0,"3396":0,"3397":0,"3398":0,"3399":0,"3400":0,"3401":0,"3402":0,"3403":0,"3404":0,"3405":0,"3406":0,"3407":0,"3408":0,"3409":0,"3410":0,"3411":0,"3412":0,"3413":0,"3414":0,"3415":0,"3416":0,"3417":0,"3418":0,"3419":0,"3420":0,"3421":0,"3422":0,"3423":0,"3424":0,"3425":0,"3426":0,"3427":0,"3428":0,"3429":0,"3430":0,"3431":0,"3432":0,"3433":0,"3434":0,"3435":0,"3436":0,"3437":0,"3438":0,"3439":0,"3440":0,"3441":0,"3442":0,"3443":0,"3444":0,"3445":0,"3446":0,"3447":0,"3448":0,"3449":0,"3450":0,"3451":0,"3452":0,"3453":0,"3454":0,"3455":0,"3456":0,"3457":0,"3458":0,"3459":0,"3460":0,"3461":0,"3462":0,"3463":0,"3464":0,"3465":0,"3466":0,"3467":0,"3468":0,"3469":0,"3470":0,"3471":0,"3472":0,"3473":0,"3474":0,"3475":0,"3476":0,"3477":0,"3478":0,"3479":0,"3480":0,"3481":0,"3482":0,"3483":0,"3484":0,"3485":0,"3486":0,"3487":0,"3488":0,"3489":0,"3490":0,"3491":0,"3492":0,"3493":0,"3494":0,"3495":0,"3496":0,"3497":0,"3498":0,"3499":0,"3500":0,"3501":0,"3502":0,"3503":0,"3504":0,"3505":0,"3506":0,"3507":0,"3508":0,"3509":0,"3510":0,"3511":0,"3512":0,"3513":0,"3514":0,"3515":0,"3516":0,"3517":0,"3518":0,"3519":0,"3520":0,"3521":0,"3522":0,"3523":0,"3524":0,"3525":0,"3526":0,"3527":0,"3528":0,"3529":0,"3530":0,"3531":0,"3532":0,"3533":0,"3534":0,"3535":0,"3536":0,"3537":0,"3538":0,"3539":0,"3540":0,"3541":0,"3542":0,"3543":0,"3544":0,"3545":0,"3546":0,"3547":0,"3548":0,"3549":0,"3550":0,"3551":0,"3552":0,"3553":0,"3554":0,"3555":0,"3556":0,"3557":0,"3558":0,"3559":0,"3560":0,"3561":0,"3562":0,"3563":0,"3564":0,"3565":0,"3566":0,"3567":0,"3568":0,"3569":0,"3570":0,"3571":0,"3572":0,"3573":0,"3574":0,"3575":0,"3576":0,"3577":0,"3578":0,"3579":0,"3580":0,"3581":0,"3582":0,"3583":0,"3584":0,"3585":0,"3586":0,"3587":0,"3588":0,"3589":0,"3590":0,"3591":0,"3592":0,"3593":0,"3594":0,"3595":0,"3596":0,"3597":0,"3598":0,"3599":0,"3600":0,"3601":0,"3602":0,"3603":0,"3604":0,"3605":0,"3606":0,"3607":0,"3608":0,"3609":0,"3610":0,"3611":0,"3612":0,"3613":0,"3614":0,"3615":0,"3616":0,"3617":0,"3618":0,"3619":0,"3620":0,"3621":0,"3622":0,"3623":0,"3624":0,"3625":0,"3626":0,"3627":0,"3628":0,"3629":0,"3630":0,"3631":0,"3632":0,"3633":0,"3634":0,"3635":0,"3636":0,"3637":0,"3638":0,"3639":0,"3640":0,"3641":0,"3642":0,"3643":0,"3644":0,"3645":0,"3646":0,"3647":0,"3648":0,"3649":0,"3650":0,"3651":0,"3652":0,"3653":0,"3654":0,"3655":0,"3656":0,"3657":0,"3658":0,"3659":0,"3660":0,"3661":0,"3662":0,"3663":0,"3664":0,"3665":0,"3666":0,"3667":0,"3668":0,"3669":0,"3670":0,"3671":0,"3672":0,"3673":0,"3674":0,"3675":0,"3676":0,"3677":0,"3678":0,"3679":0,"3680":0,"3681":0,"3682":0,"3683":0,"3684":0,"3685":0,"3686":0,"3687":0,"3688":0,"3689":0,"3690":0,"3691":0,"3692":0,"3693":0,"3694":0,"3695":0,"3696":0,"3697":0,"3698":0,"3699":0,"3700":0,"3701":0,"3702":0,"3703":0,"3704":0,"3705":0,"3706":0,"3707":0,"3708":0,"3709":0,"3710":0,"3711":0,"3712":0,"3713":0,"3714":0,"3715":0,"3716":0,"3717":0,"3718":0,"3719":0,"3720":0,"3721":0,"3722":0,"3723":0,"3724":0,"3725":0,"3726":0,"3727":0,"3728":0,"3729":0,"3730":0,"3731":0,"3732":0,"3733":0,"3734":0,"3735":0,"3736":0,"3737":0,"3738":0,"3739":0,"3740":0,"3741":0,"3742":0,"3743":0,"3744":0,"3745":0,"3746":0,"3747":0,"3748":0,"3749":0,"3750":0,"3751":0,"3752":0,"3753":0,"3754":0,"3755":0,"3756":0,"3757":0,"3758":0,"3759":0,"3760":0,"3761":0,"3762":0,"3763":0,"3764":0,"3765":0,"3766":0,"3767":0,"3768":0,"3769":0,"3770":0,"3771":0,"3772":0,"3773":0,"3774":0,"3775":0,"3776":0,"3777":0,"3778":0,"3779":0,"3780":0,"3781":0,"3782":0,"3783":0,"3784":0,"3785":0,"3786":0,"3787":0,"3788":0,"3789":0,"3790":0,"3791":0,"3792":0,"3793":0,"3794":0,"3795":0,"3796":0,"3797":0,"3798":0,"3799":0,"3800":0,"3801":0,"3802":0,"3803":0,"3804":0,"3805":0,"3806":0,"3807":0,"3808":0,"3809":0,"3810":0,"3811":0,"3812":0,"3813":0,"3814":0,"3815":0,"3816":0,"3817":0,"3818":0,"3819":0,"3820":0,"3821":0,"3822":0,"3823":0,"3824":0,"3825":0,"3826":0,"3827":0,"3828":0,"3829":0,"3830":0,"3831":0,"3832":0,"3833":0,"3834":0,"3835":0,"3836":0,"3837":0,"3838":0,"3839":0,"3840":0,"3841":0,"3842":0,"3843":0,"3844":0,"3845":0,"3846":0,"3847":0,"3848":0,"3849":0,"3850":0,"3851":0,"3852":0,"3853":0,"3854":0,"3855":0,"3856":0,"3857":0,"3858":0,"3859":0,"3860":0,"3861":0,"3862":0,"3863":0,"3864":0,"3865":0,"3866":0,"3867":0,"3868":0,"3869":0,"3870":0,"3871":0,"3872":0,"3873":0,"3874":0,"3875":0,"3876":0,"3877":0,"3878":0,"3879":0,"3880":0,"3881":0,"3882":0,"3883":0,"3884":0,"3885":0,"3886":0,"3887":0,"3888":0,"3889":0,"3890":0,"3891":0,"3892":0,"3893":0,"3894":0,"3895":0,"3896":0,"3897":0,"3898":0,"3899":0,"3900":0,"3901":0,"3902":0,"3903":0,"3904":0,"3905":0,"3906":0,"3907":0,"3908":0,"3909":0,"3910":0,"3911":0,"3912":0,"3913":0,"3914":0,"3915":0,"3916":0,"3917":0,"3918":0,"3919":0,"3920":0,"3921":0,"3922":0,"3923":0,"3924":0,"3925":0,"3926":0,"3927":0,"3928":0,"3929":0,"3930":0,"3931":0,"3932":0,"3933":0,"3934":0,"3935":0,"3936":0,"3937":0,"3938":0,"3939":0,"3940":0,"3941":0,"3942":0,"3943":0,"3944":0,"3945":0,"3946":0,"3947":0,"3948":0,"3949":0,"3950":0,"3951":0,"3952":0,"3953":0,"3954":0,"3955":0,"3956":0,"3957":0,"3958":0,"3959":0,"3960":0,"3961":0,"3962":0,"3963":0,"3964":0,"3965":0,"3966":0,"3967":0,"3968":0,"3969":0,"3970":0,"3971":0,"3972":0,"3973":0,"3974":0,"3975":0,"3976":0,"3977":0,"3978":0,"3979":0,"3980":0,"3981":0,"3982":0,"3983":0,"3984":0,"3985":0,"3986":0,"3987":0,"3988":0,"3989":0,"3990":0,"3991":0,"3992":0,"3993":0,"3994":0,"3995":0,"3996":0,"3997":0,"3998":0,"3999":0,"4000":0,"4001":0,"4002":0,"4003":0,"4004":0,"4005":0,"4006":0,"4007":0,"4008":0,"4009":0,"4010":0,"4011":0,"4012":0,"4013":0,"4014":0,"4015":0,"4016":0,"4017":0,"4018":0,"4019":0,"4020":0,"4021":0,"4022":0,"4023":0,"4024":0,"4025":0,"4026":0,"4027":0,"4028":0,"4029":0,"4030":0,"4031":0,"4032":0,"4033":0,"4034":0,"4035":0,"4036":0,"4037":0,"4038":0,"4039":0,"4040":0,"4041":0,"4042":0,"4043":0,"4044":0,"4045":0,"4046":0,"4047":0,"4048":0,"4049":0,"4050":0,"4051":0,"4052":0,"4053":0,"4054":0,"4055":0,"4056":0,"4057":0,"4058":0,"4059":0,"4060":0,"4061":0,"4062":0,"4063":0,"4064":0,"4065":0,"4066":0,"4067":0,"4068":0,"4069":0,"4070":0,"4071":0,"4072":0,"4073":0,"4074":0,"4075":0,"4076":0,"4077":0,"4078":0,"4079":0,"4080":0,"4081":0,"4082":0,"4083":0,"4084":0,"4085":0,"4086":0,"4087":0,"4088":0,"4089":0,"4090":0,"4091":0,"4092":0,"4093":0,"4094":0,"4095":0,"4096":0,"4097":0,"4098":0,"4099":0,"4100":0,"4101":0,"4102":0,"4103":0,"4104":0,"4105":0,"4106":0,"4107":0,"4108":0,"4109":0,"4110":0,"4111":0,"4112":0,"4113":0,"4114":0,"4115":0,"4116":0,"4117":0,"4118":0,"4119":0,"4120":0,"4121":0,"4122":0,"4123":0,"4124":0,"4125":0,"4126":0,"4127":0,"4128":0,"4129":0,"4130":0,"4131":0,"4132":0,"4133":0,"4134":0,"4135":0,"4136":0,"4137":0,"4138":0,"4139":0,"4140":0,"4141":0,"4142":0,"4143":0,"4144":0,"4145":0,"4146":0,"4147":0,"4148":0,"4149":0,"4150":0,"4151":0,"4152":0,"4153":0,"4154":0,"4155":0,"4156":0,"4157":0,"4158":0,"4159":0,"4160":0,"4161":0,"4162":0,"4163":0,"4164":0,"4165":0,"4166":0,"4167":0,"4168":0,"4169":0,"4170":0,"4171":0,"4172":0,"4173":0,"4174":0,"4175":0,"4176":0,"4177":0,"4178":0,"4179":0,"4180":0,"4181":0,"4182":0,"4183":0,"4184":0,"4185":0,"4186":0,"4187":0,"4188":0,"4189":0,"4190":0,"4191":0,"4192":0,"4193":0,"4194":0,"4195":0,"4196":0,"4197":0,"4198":0,"4199":0,"4200":0,"4201":0,"4202":0,"4203":0,"4204":0,"4205":0,"4206":0,"4207":0,"4208":0,"4209":0,"4210":0,"4211":0,"4212":0,"4213":0,"4214":0,"4215":0,"4216":0,"4217":0,"4218":0,"4219":0,"4220":0,"4221":0,"4222":0,"4223":0,"4224":0,"4225":0,"4226":0,"4227":0,"4228":0,"4229":0,"4230":0,"4231":0,"4232":0,"4233":0,"4234":0,"4235":0,"4236":0,"4237":0,"4238":0,"4239":0,"4240":0,"4241":0,"4242":0,"4243":0,"4244":0,"4245":0,"4246":0,"4247":0,"4248":0,"4249":0,"4250":0,"4251":0,"4252":0,"4253":0,"4254":0,"4255":0,"4256":0,"4257":0,"4258":0,"4259":0,"4260":0,"4261":0,"4262":0,"4263":0,"4264":0,"4265":0,"4266":0,"4267":0,"4268":0,"4269":0,"4270":0,"4271":0,"4272":0,"4273":0,"4274":0,"4275":0,"4276":0,"4277":0,"4278":0,"4279":0,"4280":0,"4281":0,"4282":0,"4283":0,"4284":0,"4285":0,"4286":0,"4287":0,"4288":0,"4289":0,"4290":0,"4291":0,"4292":0,"4293":0,"4294":0,"4295":0,"4296":0,"4297":0,"4298":0,"4299":0,"4300":0,"4301":0,"4302":0,"4303":0,"4304":0,"4305":0,"4306":0,"4307":0,"4308":0,"4309":0,"4310":0,"4311":0,"4312":0,"4313":0,"4314":0,"4315":0,"4316":0,"4317":0,"4318":0,"4319":0,"4320":0,"4321":0,"4322":0,"4323":0,"4324":0,"4325":0,"4326":0,"4327":0,"4328":0,"4329":0,"4330":0,"4331":0,"4332":0,"4333":0,"4334":0,"4335":0,"4336":0,"4337":0,"4338":0,"4339":0,"4340":0,"4341":0,"4342":0,"4343":0,"4344":0,"4345":0,"4346":0,"4347":0,"4348":0,"4349":0,"4350":0,"4351":0,"4352":0,"4353":0,"4354":0,"4355":0,"4356":0,"4357":0,"4358":0,"4359":0,"4360":0,"4361":0,"4362":0,"4363":0,"4364":0,"4365":0,"4366":0,"4367":0,"4368":0,"4369":0,"4370":0,"4371":0,"4372":0,"4373":0,"4374":0,"4375":0,"4376":0,"4377":0,"4378":0,"4379":0,"4380":0,"4381":0,"4382":0,"4383":0,"4384":0,"4385":0,"4386":0,"4387":0,"4388":0,"4389":0,"4390":0,"4391":0,"4392":0,"4393":0,"4394":0,"4395":0,"4396":0,"4397":0,"4398":0,"4399":0,"4400":0,"4401":0,"4402":0,"4403":0,"4404":0,"4405":0,"4406":0,"4407":0,"4408":0,"4409":0,"4410":0,"4411":0,"4412":0,"4413":0,"4414":0,"4415":0,"4416":0,"4417":0,"4418":0,"4419":0,"4420":0,"4421":0,"4422":0,"4423":0,"4424":0,"4425":0,"4426":0,"4427":0,"4428":0,"4429":0,"4430":0,"4431":0,"4432":0,"4433":0,"4434":0,"4435":0,"4436":0,"4437":0,"4438":0,"4439":0,"4440":0,"4441":0,"4442":0,"4443":0,"4444":0,"4445":0,"4446":0,"4447":0,"4448":0,"4449":0,"4450":0,"4451":0,"4452":0,"4453":0,"4454":0,"4455":0,"4456":0,"4457":0,"4458":0,"4459":0,"4460":0,"4461":0,"4462":0,"4463":0,"4464":0,"4465":0,"4466":0,"4467":0,"4468":0,"4469":0,"4470":0,"4471":0,"4472":0,"4473":0,"4474":0,"4475":0,"4476":0,"4477":0,"4478":0,"4479":0,"4480":0,"4481":0,"4482":0,"4483":0,"4484":0,"4485":0,"4486":0,"4487":0,"4488":0,"4489":0,"4490":0,"4491":0,"4492":0,"4493":0,"4494":0,"4495":0,"4496":0,"4497":0,"4498":0,"4499":0,"4500":0,"4501":0,"4502":0,"4503":0,"4504":0,"4505":0,"4506":0,"4507":0,"4508":0,"4509":0,"4510":0,"4511":0,"4512":0,"4513":0,"4514":0,"4515":0,"4516":0,"4517":0,"4518":0,"4519":0,"4520":0,"4521":0,"4522":0,"4523":0,"4524":0,"4525":0,"4526":0,"4527":0,"4528":0,"4529":0,"4530":0,"4531":0,"4532":0,"4533":0,"4534":0,"4535":0,"4536":0,"4537":0,"4538":0,"4539":0,"4540":0,"4541":0,"4542":0,"4543":0,"4544":0,"4545":0,"4546":0,"4547":0,"4548":0,"4549":0,"4550":0,"4551":0,"4552":0,"4553":0,"4554":0,"4555":0,"4556":0,"4557":0,"4558":0,"4559":0,"4560":0,"4561":0,"4562":0,"4563":0,"4564":0,"4565":0,"4566":0,"4567":0,"4568":0,"4569":0,"4570":0,"4571":0,"4572":0,"4573":0,"4574":0,"4575":0,"4576":0,"4577":0,"4578":0,"4579":0,"4580":0,"4581":0,"4582":0,"4583":0,"4584":0,"4585":0,"4586":0,"4587":0,"4588":0,"4589":0,"4590":0,"4591":0,"4592":0,"4593":0,"4594":0,"4595":0,"4596":0,"4597":0,"4598":0,"4599":0,"4600":0,"4601":0,"4602":0,"4603":0,"4604":0,"4605":0,"4606":0,"4607":0,"4608":0,"4609":0,"4610":0,"4611":0,"4612":0,"4613":0,"4614":0,"4615":0,"4616":0,"4617":0,"4618":0,"4619":0,"4620":0,"4621":0,"4622":0,"4623":0,"4624":0,"4625":0,"4626":0,"4627":0,"4628":0,"4629":0,"4630":0,"4631":0,"4632":0,"4633":0,"4634":0,"4635":0,"4636":0,"4637":0,"4638":0,"4639":0,"4640":0,"4641":0,"4642":0,"4643":0,"4644":0,"4645":0,"4646":0,"4647":0,"4648":0,"4649":0,"4650":0,"4651":0,"4652":0,"4653":0,"4654":0,"4655":0,"4656":0,"4657":0,"4658":0,"4659":0,"4660":0,"4661":0,"4662":0,"4663":0,"4664":0,"4665":0,"4666":0,"4667":0,"4668":0,"4669":0,"4670":0,"4671":0,"4672":0,"4673":0,"4674":0,"4675":0,"4676":0,"4677":0,"4678":0,"4679":0,"4680":0,"4681":0,"4682":0,"4683":0,"4684":0,"4685":0,"4686":0,"4687":0,"4688":0,"4689":0,"4690":0,"4691":0,"4692":0,"4693":0,"4694":0,"4695":0,"4696":0,"4697":0,"4698":0,"4699":0,"4700":0,"4701":0,"4702":0,"4703":0,"4704":0,"4705":0,"4706":0,"4707":0,"4708":0,"4709":0,"4710":0,"4711":0,"4712":0,"4713":0,"4714":0,"4715":0,"4716":0,"4717":0,"4718":0,"4719":0,"4720":0,"4721":0,"4722":0,"4723":0,"4724":0,"4725":0,"4726":0,"4727":0,"4728":0,"4729":0,"4730":0,"4731":0,"4732":0,"4733":0,"4734":0,"4735":0,"4736":0,"4737":0,"4738":0,"4739":0,"4740":0,"4741":0,"4742":0,"4743":0,"4744":0,"4745":0,"4746":0,"4747":0,"4748":0,"4749":0,"4750":0,"4751":0,"4752":0,"4753":0,"4754":0,"4755":0,"4756":0,"4757":0,"4758":0,"4759":0,"4760":0,"4761":0,"4762":0,"4763":0,"4764":0,"4765":0,"4766":0,"4767":0,"4768":0,"4769":0,"4770":0,"4771":0,"4772":0,"4773":0,"4774":0,"4775":0,"4776":0,"4777":0,"4778":0,"4779":0,"4780":0,"4781":0,"4782":0,"4783":0,"4784":0,"4785":0,"4786":0,"4787":0,"4788":0,"4789":0,"4790":0,"4791":0,"4792":0,"4793":0,"4794":0,"4795":0,"4796":0,"4797":0,"4798":0,"4799":0,"4800":0,"4801":0,"4802":0,"4803":0,"4804":0,"4805":0,"4806":0,"4807":0,"4808":0,"4809":0,"4810":0,"4811":0,"4812":0,"4813":0,"4814":0,"4815":0,"4816":0,"4817":0,"4818":0,"4819":0,"4820":0,"4821":0,"4822":0,"4823":0,"4824":0,"4825":0,"4826":0,"4827":0,"4828":0,"4829":0,"4830":0,"4831":0,"4832":0,"4833":0,"4834":0,"4835":0,"4836":0,"4837":0,"4838":0,"4839":0,"4840":0,"4841":0,"4842":0,"4843":0,"4844":0,"4845":0,"4846":0,"4847":0,"4848":0,"4849":0,"4850":0,"4851":0,"4852":0,"4853":0,"4854":0,"4855":0,"4856":0,"4857":0,"4858":0,"4859":0,"4860":0,"4861":0,"4862":0,"4863":0,"4864":0,"4865":0,"4866":0,"4867":0,"4868":0,"4869":0,"4870":0,"4871":0,"4872":0,"4873":0,"4874":0,"4875":0,"4876":0,"4877":0,"4878":0,"4879":0,"4880":0,"4881":0,"4882":0,"4883":0,"4884":0,"4885":0,"4886":0,"4887":0,"4888":0,"4889":0,"4890":0,"4891":0,"4892":0,"4893":0,"4894":0,"4895":0,"4896":0,"4897":0,"4898":0,"4899":0,"4900":0,"4901":0,"4902":0,"4903":0,"4904":0,"4905":0,"4906":0,"4907":0,"4908":0,"4909":0,"4910":0,"4911":0,"4912":0,"4913":0,"4914":0,"4915":0,"4916":0,"4917":0,"4918":0,"4919":0,"4920":0,"4921":0,"4922":0,"4923":0,"4924":0,"4925":0,"4926":0,"4927":0,"4928":0,"4929":0,"4930":0,"4931":0,"4932":0,"4933":0,"4934":0,"4935":0,"4936":0,"4937":0,"4938":0,"4939":0,"4940":0,"4941":0,"4942":0,"4943":0,"4944":0,"4945":0,"4946":0,"4947":0,"4948":0,"4949":0,"4950":0,"4951":0,"4952":0,"4953":0,"4954":0,"4955":0,"4956":0,"4957":0,"4958":0,"4959":0,"4960":0,"4961":0,"4962":0,"4963":0,"4964":0,"4965":0,"4966":0,"4967":0,"4968":0,"4969":0,"4970":0,"4971":0,"4972":0,"4973":0,"4974":0,"4975":0,"4976":0,"4977":0,"4978":0,"4979":0,"4980":0,"4981":0,"4982":0,"4983":0,"4984":0,"4985":0,"4986":0,"4987":0,"4988":0,"4989":0,"4990":0,"4991":0,"4992":0,"4993":0,"4994":0,"4995":0,"4996":0,"4997":0,"4998":0,"4999":0,"5000":0,"5001":0,"5002":0,"5003":0,"5004":0,"5005":0,"5006":0,"5007":0,"5008":0,"5009":0,"5010":0,"5011":0,"5012":0,"5013":0,"5014":0,"5015":0,"5016":0,"5017":0,"5018":0,"5019":0,"5020":0,"5021":0,"5022":0,"5023":0,"5024":0,"5025":0,"5026":0,"5027":0,"5028":0,"5029":0,"5030":0,"5031":0,"5032":0,"5033":0,"5034":0,"5035":0,"5036":0,"5037":0,"5038":0,"5039":0,"5040":0,"5041":0,"5042":0,"5043":0,"5044":0,"5045":0,"5046":0,"5047":0,"5048":0,"5049":0,"5050":0,"5051":0,"5052":0,"5053":0,"5054":0,"5055":0,"5056":0,"5057":0,"5058":0,"5059":0,"5060":0,"5061":0,"5062":0,"5063":0,"5064":0,"5065":0,"5066":0,"5067":0,"5068":0,"5069":0,"5070":0,"5071":0,"5072":0,"5073":0,"5074":0,"5075":0,"5076":0,"5077":0,"5078":0,"5079":0,"5080":0,"5081":0,"5082":0,"5083":0,"5084":0,"5085":0,"5086":0,"5087":0,"5088":0,"5089":0,"5090":0,"5091":0,"5092":0,"5093":0,"5094":0,"5095":0,"5096":0,"5097":0,"5098":0,"5099":0,"5100":0,"5101":0,"5102":0,"5103":0,"5104":0,"5105":0,"5106":0,"5107":0,"5108":0,"5109":0,"5110":0,"5111":0,"5112":0,"5113":0,"5114":0,"5115":0,"5116":0,"5117":0,"5118":0,"5119":0,"5120":0,"5121":0,"5122":0,"5123":0,"5124":0,"5125":0,"5126":0,"5127":0,"5128":0,"5129":0,"5130":0,"5131":0,"5132":0,"5133":0,"5134":0,"5135":0,"5136":0,"5137":0,"5138":0,"5139":0,"5140":0,"5141":0,"5142":0,"5143":0,"5144":0,"5145":0,"5146":0,"5147":0,"5148":0,"5149":0,"5150":0,"5151":0,"5152":0,"5153":0,"5154":0,"5155":0,"5156":0,"5157":0,"5158":0,"5159":0,"5160":0,"5161":0,"5162":0,"5163":0,"5164":0,"5165":0,"5166":0,"5167":0,"5168":0,"5169":0,"5170":0,"5171":0,"5172":0,"5173":0,"5174":0,"5175":0,"5176":0,"5177":0,"5178":0,"5179":0,"5180":0,"5181":0,"5182":0,"5183":0,"5184":0,"5185":0,"5186":0,"5187":0,"5188":0,"5189":0,"5190":0,"5191":0,"5192":0,"5193":0,"5194":0,"5195":0,"5196":0,"5197":0,"5198":0,"5199":0,"5200":0,"5201":0,"5202":0,"5203":0,"5204":0,"5205":0,"5206":0,"5207":0,"5208":0,"5209":0,"5210":0,"5211":0,"5212":0,"5213":0,"5214":0,"5215":0,"5216":0,"5217":0,"5218":0,"5219":0,"5220":0,"5221":0,"5222":0,"5223":0,"5224":0,"5225":0,"5226":0,"5227":0,"5228":0,"5229":0,"5230":0,"5231":0,"5232":0,"5233":0,"5234":0,"5235":0,"5236":0,"5237":0,"5238":0,"5239":0,"5240":0,"5241":0},f:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"116":0,"117":0,"118":0,"119":0,"120":0,"121":0,"122":0,"123":0,"124":0,"125":0,"126":0,"127":0,"128":0,"129":0,"130":0,"131":0,"132":0,"133":0,"134":0,"135":0,"136":0,"137":0,"138":0,"139":0,"140":0,"141":0,"142":0,"143":0,"144":0,"145":0,"146":0,"147":0,"148":0,"149":0,"150":0,"151":0,"152":0,"153":0,"154":0,"155":0,"156":0,"157":0,"158":0,"159":0,"160":0,"161":0,"162":0,"163":0,"164":0,"165":0,"166":0,"167":0,"168":0,"169":0,"170":0,"171":0,"172":0,"173":0,"174":0,"175":0,"176":0,"177":0,"178":0,"179":0,"180":0,"181":0,"182":0,"183":0,"184":0,"185":0,"186":0,"187":0,"188":0,"189":0,"190":0,"191":0,"192":0,"193":0,"194":0,"195":0,"196":0,"197":0,"198":0,"199":0,"200":0,"201":0,"202":0,"203":0,"204":0,"205":0,"206":0,"207":0,"208":0,"209":0,"210":0,"211":0,"212":0,"213":0,"214":0,"215":0,"216":0,"217":0,"218":0,"219":0,"220":0,"221":0,"222":0,"223":0,"224":0,"225":0,"226":0,"227":0,"228":0,"229":0,"230":0,"231":0,"232":0,"233":0,"234":0,"235":0,"236":0,"237":0,"238":0,"239":0,"240":0,"241":0,"242":0,"243":0,"244":0,"245":0,"246":0,"247":0,"248":0,"249":0,"250":0,"251":0,"252":0,"253":0,"254":0,"255":0,"256":0,"257":0,"258":0,"259":0,"260":0,"261":0,"262":0,"263":0,"264":0,"265":0,"266":0,"267":0,"268":0,"269":0,"270":0,"271":0,"272":0,"273":0,"274":0,"275":0,"276":0,"277":0,"278":0,"279":0,"280":0,"281":0,"282":0,"283":0,"284":0,"285":0,"286":0,"287":0,"288":0,"289":0,"290":0,"291":0,"292":0,"293":0,"294":0,"295":0,"296":0,"297":0,"298":0,"299":0,"300":0,"301":0,"302":0,"303":0,"304":0,"305":0,"306":0,"307":0,"308":0,"309":0,"310":0,"311":0,"312":0,"313":0,"314":0,"315":0,"316":0,"317":0,"318":0,"319":0,"320":0,"321":0,"322":0,"323":0,"324":0,"325":0,"326":0,"327":0,"328":0,"329":0,"330":0,"331":0,"332":0,"333":0,"334":0,"335":0,"336":0,"337":0,"338":0,"339":0,"340":0,"341":0,"342":0,"343":0,"344":0,"345":0,"346":0,"347":0,"348":0,"349":0,"350":0,"351":0,"352":0,"353":0,"354":0,"355":0,"356":0,"357":0,"358":0,"359":0,"360":0,"361":0,"362":0,"363":0,"364":0,"365":0,"366":0,"367":0,"368":0,"369":0,"370":0,"371":0,"372":0,"373":0,"374":0,"375":0,"376":0,"377":0,"378":0,"379":0,"380":0,"381":0,"382":0,"383":0,"384":0,"385":0,"386":0,"387":0,"388":0,"389":0,"390":0,"391":0,"392":0,"393":0,"394":0,"395":0,"396":0,"397":0,"398":0,"399":0,"400":0,"401":0,"402":0,"403":0,"404":0,"405":0,"406":0,"407":0,"408":0,"409":0,"410":0,"411":0,"412":0,"413":0,"414":0,"415":0,"416":0,"417":0,"418":0,"419":0,"420":0,"421":0,"422":0,"423":0,"424":0,"425":0,"426":0,"427":0,"428":0,"429":0,"430":0,"431":0,"432":0,"433":0,"434":0,"435":0,"436":0,"437":0,"438":0,"439":0,"440":0,"441":0,"442":0,"443":0,"444":0,"445":0,"446":0,"447":0,"448":0,"449":0,"450":0,"451":0,"452":0,"453":0,"454":0,"455":0,"456":0,"457":0,"458":0,"459":0,"460":0,"461":0,"462":0,"463":0,"464":0,"465":0,"466":0,"467":0,"468":0,"469":0,"470":0,"471":0,"472":0,"473":0,"474":0,"475":0,"476":0,"477":0,"478":0,"479":0,"480":0,"481":0,"482":0,"483":0,"484":0,"485":0,"486":0,"487":0,"488":0,"489":0,"490":0,"491":0,"492":0,"493":0,"494":0,"495":0,"496":0,"497":0,"498":0,"499":0,"500":0,"501":0,"502":0,"503":0,"504":0,"505":0,"506":0,"507":0,"508":0,"509":0,"510":0,"511":0,"512":0,"513":0,"514":0,"515":0,"516":0,"517":0,"518":0,"519":0,"520":0,"521":0,"522":0,"523":0,"524":0,"525":0,"526":0,"527":0,"528":0,"529":0,"530":0,"531":0,"532":0,"533":0,"534":0,"535":0,"536":0,"537":0,"538":0,"539":0,"540":0,"541":0,"542":0,"543":0,"544":0,"545":0,"546":0,"547":0,"548":0,"549":0,"550":0,"551":0,"552":0,"553":0,"554":0,"555":0,"556":0,"557":0,"558":0,"559":0,"560":0,"561":0,"562":0,"563":0,"564":0,"565":0,"566":0,"567":0,"568":0,"569":0,"570":0,"571":0,"572":0,"573":0,"574":0,"575":0,"576":0,"577":0,"578":0,"579":0,"580":0,"581":0,"582":0,"583":0,"584":0,"585":0,"586":0,"587":0,"588":0,"589":0,"590":0,"591":0,"592":0,"593":0,"594":0,"595":0,"596":0,"597":0,"598":0,"599":0,"600":0,"601":0,"602":0,"603":0,"604":0,"605":0,"606":0,"607":0,"608":0,"609":0,"610":0,"611":0,"612":0,"613":0,"614":0,"615":0,"616":0,"617":0,"618":0,"619":0,"620":0,"621":0,"622":0,"623":0,"624":0,"625":0,"626":0,"627":0,"628":0,"629":0,"630":0,"631":0,"632":0,"633":0,"634":0,"635":0,"636":0,"637":0,"638":0,"639":0,"640":0,"641":0,"642":0,"643":0,"644":0,"645":0,"646":0,"647":0,"648":0,"649":0,"650":0,"651":0,"652":0,"653":0,"654":0,"655":0,"656":0,"657":0,"658":0,"659":0,"660":0,"661":0,"662":0,"663":0,"664":0,"665":0,"666":0,"667":0,"668":0,"669":0,"670":0,"671":0,"672":0,"673":0,"674":0,"675":0,"676":0,"677":0,"678":0,"679":0,"680":0,"681":0,"682":0,"683":0,"684":0,"685":0,"686":0,"687":0,"688":0,"689":0,"690":0,"691":0,"692":0,"693":0,"694":0,"695":0,"696":0,"697":0,"698":0,"699":0,"700":0,"701":0,"702":0,"703":0,"704":0,"705":0,"706":0,"707":0,"708":0,"709":0,"710":0,"711":0,"712":0,"713":0,"714":0,"715":0,"716":0,"717":0,"718":0,"719":0,"720":0,"721":0,"722":0,"723":0,"724":0,"725":0,"726":0,"727":0,"728":0,"729":0,"730":0,"731":0,"732":0,"733":0,"734":0,"735":0,"736":0,"737":0,"738":0,"739":0,"740":0,"741":0,"742":0,"743":0,"744":0,"745":0,"746":0,"747":0,"748":0,"749":0,"750":0,"751":0,"752":0,"753":0,"754":0,"755":0,"756":0,"757":0,"758":0,"759":0,"760":0,"761":0,"762":0,"763":0,"764":0,"765":0,"766":0,"767":0,"768":0,"769":0,"770":0,"771":0,"772":0,"773":0,"774":0,"775":0,"776":0,"777":0,"778":0,"779":0,"780":0,"781":0,"782":0,"783":0,"784":0,"785":0,"786":0,"787":0,"788":0,"789":0,"790":0,"791":0,"792":0,"793":0,"794":0,"795":0,"796":0,"797":0,"798":0,"799":0,"800":0,"801":0,"802":0,"803":0,"804":0,"805":0,"806":0,"807":0,"808":0,"809":0,"810":0,"811":0,"812":0,"813":0,"814":0,"815":0,"816":0,"817":0,"818":0,"819":0,"820":0,"821":0,"822":0,"823":0,"824":0,"825":0,"826":0,"827":0,"828":0,"829":0,"830":0,"831":0,"832":0,"833":0,"834":0,"835":0,"836":0,"837":0,"838":0,"839":0,"840":0,"841":0,"842":0,"843":0,"844":0,"845":0,"846":0,"847":0,"848":0,"849":0,"850":0,"851":0,"852":0,"853":0,"854":0,"855":0,"856":0,"857":0,"858":0,"859":0,"860":0,"861":0,"862":0,"863":0,"864":0,"865":0,"866":0,"867":0,"868":0,"869":0,"870":0,"871":0,"872":0,"873":0,"874":0,"875":0,"876":0,"877":0,"878":0,"879":0,"880":0,"881":0,"882":0,"883":0,"884":0,"885":0,"886":0,"887":0,"888":0,"889":0,"890":0,"891":0,"892":0,"893":0,"894":0,"895":0,"896":0,"897":0,"898":0,"899":0,"900":0,"901":0,"902":0,"903":0,"904":0,"905":0,"906":0,"907":0,"908":0,"909":0,"910":0,"911":0,"912":0,"913":0,"914":0,"915":0,"916":0,"917":0,"918":0,"919":0,"920":0,"921":0,"922":0,"923":0,"924":0,"925":0,"926":0,"927":0,"928":0,"929":0,"930":0,"931":0,"932":0,"933":0,"934":0,"935":0,"936":0,"937":0,"938":0,"939":0,"940":0,"941":0,"942":0,"943":0,"944":0,"945":0,"946":0,"947":0,"948":0,"949":0,"950":0,"951":0,"952":0,"953":0,"954":0,"955":0,"956":0,"957":0,"958":0,"959":0,"960":0,"961":0,"962":0,"963":0,"964":0,"965":0,"966":0,"967":0,"968":0,"969":0,"970":0,"971":0,"972":0,"973":0,"974":0,"975":0,"976":0,"977":0,"978":0,"979":0,"980":0,"981":0,"982":0,"983":0,"984":0,"985":0,"986":0,"987":0,"988":0,"989":0,"990":0,"991":0,"992":0,"993":0,"994":0,"995":0,"996":0,"997":0,"998":0,"999":0,"1000":0,"1001":0,"1002":0,"1003":0,"1004":0,"1005":0,"1006":0,"1007":0,"1008":0,"1009":0,"1010":0,"1011":0,"1012":0,"1013":0,"1014":0,"1015":0,"1016":0,"1017":0,"1018":0,"1019":0,"1020":0,"1021":0,"1022":0,"1023":0,"1024":0,"1025":0,"1026":0,"1027":0,"1028":0,"1029":0,"1030":0,"1031":0,"1032":0,"1033":0,"1034":0,"1035":0,"1036":0,"1037":0,"1038":0,"1039":0,"1040":0,"1041":0,"1042":0,"1043":0,"1044":0,"1045":0,"1046":0,"1047":0,"1048":0,"1049":0,"1050":0,"1051":0,"1052":0,"1053":0,"1054":0,"1055":0,"1056":0,"1057":0,"1058":0,"1059":0,"1060":0,"1061":0,"1062":0,"1063":0,"1064":0,"1065":0,"1066":0,"1067":0,"1068":0,"1069":0,"1070":0,"1071":0,"1072":0,"1073":0,"1074":0,"1075":0,"1076":0,"1077":0,"1078":0,"1079":0,"1080":0,"1081":0,"1082":0,"1083":0,"1084":0,"1085":0,"1086":0,"1087":0,"1088":0,"1089":0,"1090":0,"1091":0,"1092":0,"1093":0,"1094":0,"1095":0,"1096":0,"1097":0,"1098":0,"1099":0,"1100":0,"1101":0,"1102":0,"1103":0,"1104":0,"1105":0,"1106":0,"1107":0,"1108":0,"1109":0,"1110":0,"1111":0,"1112":0,"1113":0,"1114":0,"1115":0,"1116":0,"1117":0,"1118":0,"1119":0,"1120":0,"1121":0,"1122":0,"1123":0,"1124":0,"1125":0,"1126":0,"1127":0,"1128":0,"1129":0,"1130":0,"1131":0,"1132":0,"1133":0,"1134":0,"1135":0,"1136":0,"1137":0,"1138":0,"1139":0,"1140":0,"1141":0,"1142":0,"1143":0,"1144":0,"1145":0,"1146":0,"1147":0,"1148":0,"1149":0,"1150":0,"1151":0,"1152":0,"1153":0,"1154":0,"1155":0,"1156":0,"1157":0,"1158":0,"1159":0,"1160":0,"1161":0,"1162":0,"1163":0,"1164":0,"1165":0,"1166":0,"1167":0,"1168":0,"1169":0,"1170":0,"1171":0,"1172":0,"1173":0,"1174":0,"1175":0,"1176":0,"1177":0,"1178":0,"1179":0,"1180":0,"1181":0,"1182":0,"1183":0,"1184":0,"1185":0,"1186":0,"1187":0,"1188":0,"1189":0,"1190":0,"1191":0,"1192":0,"1193":0,"1194":0,"1195":0,"1196":0,"1197":0,"1198":0,"1199":0,"1200":0,"1201":0,"1202":0,"1203":0,"1204":0,"1205":0,"1206":0,"1207":0,"1208":0,"1209":0,"1210":0,"1211":0,"1212":0,"1213":0,"1214":0,"1215":0,"1216":0,"1217":0,"1218":0,"1219":0,"1220":0,"1221":0,"1222":0,"1223":0,"1224":0,"1225":0,"1226":0,"1227":0,"1228":0,"1229":0,"1230":0,"1231":0,"1232":0,"1233":0,"1234":0,"1235":0,"1236":0,"1237":0,"1238":0,"1239":0,"1240":0,"1241":0,"1242":0,"1243":0,"1244":0,"1245":0,"1246":0,"1247":0,"1248":0,"1249":0,"1250":0,"1251":0,"1252":0,"1253":0,"1254":0,"1255":0,"1256":0,"1257":0,"1258":0,"1259":0,"1260":0,"1261":0,"1262":0,"1263":0,"1264":0,"1265":0,"1266":0,"1267":0,"1268":0,"1269":0,"1270":0,"1271":0,"1272":0,"1273":0,"1274":0,"1275":0,"1276":0,"1277":0,"1278":0,"1279":0,"1280":0,"1281":0,"1282":0,"1283":0,"1284":0,"1285":0,"1286":0,"1287":0,"1288":0,"1289":0,"1290":0,"1291":0,"1292":0,"1293":0,"1294":0,"1295":0,"1296":0,"1297":0,"1298":0,"1299":0,"1300":0,"1301":0,"1302":0,"1303":0,"1304":0,"1305":0,"1306":0,"1307":0,"1308":0,"1309":0,"1310":0,"1311":0,"1312":0,"1313":0,"1314":0,"1315":0,"1316":0,"1317":0,"1318":0,"1319":0,"1320":0,"1321":0,"1322":0,"1323":0,"1324":0,"1325":0,"1326":0,"1327":0,"1328":0,"1329":0,"1330":0,"1331":0,"1332":0,"1333":0,"1334":0,"1335":0,"1336":0,"1337":0,"1338":0,"1339":0,"1340":0,"1341":0,"1342":0,"1343":0,"1344":0,"1345":0,"1346":0,"1347":0,"1348":0,"1349":0,"1350":0,"1351":0,"1352":0,"1353":0,"1354":0,"1355":0,"1356":0,"1357":0,"1358":0,"1359":0,"1360":0,"1361":0,"1362":0,"1363":0,"1364":0,"1365":0,"1366":0,"1367":0,"1368":0,"1369":0,"1370":0,"1371":0,"1372":0,"1373":0,"1374":0,"1375":0,"1376":0,"1377":0,"1378":0,"1379":0,"1380":0,"1381":0,"1382":0,"1383":0,"1384":0,"1385":0,"1386":0,"1387":0,"1388":0,"1389":0,"1390":0,"1391":0,"1392":0,"1393":0,"1394":0,"1395":0,"1396":0,"1397":0,"1398":0,"1399":0,"1400":0,"1401":0,"1402":0,"1403":0,"1404":0,"1405":0,"1406":0,"1407":0,"1408":0,"1409":0,"1410":0,"1411":0,"1412":0,"1413":0,"1414":0,"1415":0,"1416":0,"1417":0,"1418":0,"1419":0,"1420":0,"1421":0,"1422":0,"1423":0,"1424":0,"1425":0,"1426":0,"1427":0,"1428":0,"1429":0,"1430":0,"1431":0,"1432":0,"1433":0,"1434":0,"1435":0,"1436":0,"1437":0,"1438":0,"1439":0,"1440":0,"1441":0,"1442":0,"1443":0,"1444":0,"1445":0,"1446":0,"1447":0,"1448":0,"1449":0,"1450":0,"1451":0,"1452":0,"1453":0,"1454":0,"1455":0,"1456":0,"1457":0,"1458":0,"1459":0,"1460":0,"1461":0,"1462":0,"1463":0,"1464":0,"1465":0,"1466":0,"1467":0,"1468":0,"1469":0,"1470":0,"1471":0,"1472":0,"1473":0,"1474":0,"1475":0,"1476":0,"1477":0,"1478":0,"1479":0,"1480":0,"1481":0,"1482":0,"1483":0,"1484":0,"1485":0,"1486":0,"1487":0,"1488":0,"1489":0,"1490":0,"1491":0,"1492":0,"1493":0,"1494":0,"1495":0,"1496":0,"1497":0,"1498":0,"1499":0,"1500":0,"1501":0,"1502":0,"1503":0,"1504":0,"1505":0,"1506":0,"1507":0,"1508":0,"1509":0,"1510":0,"1511":0,"1512":0,"1513":0,"1514":0,"1515":0,"1516":0,"1517":0,"1518":0,"1519":0,"1520":0,"1521":0,"1522":0,"1523":0,"1524":0,"1525":0,"1526":0,"1527":0,"1528":0,"1529":0,"1530":0,"1531":0,"1532":0,"1533":0,"1534":0,"1535":0,"1536":0,"1537":0,"1538":0,"1539":0,"1540":0,"1541":0,"1542":0,"1543":0,"1544":0,"1545":0,"1546":0,"1547":0,"1548":0,"1549":0,"1550":0,"1551":0,"1552":0,"1553":0,"1554":0,"1555":0,"1556":0,"1557":0,"1558":0,"1559":0,"1560":0,"1561":0,"1562":0,"1563":0,"1564":0,"1565":0,"1566":0,"1567":0,"1568":0,"1569":0,"1570":0,"1571":0,"1572":0,"1573":0,"1574":0,"1575":0,"1576":0,"1577":0,"1578":0,"1579":0,"1580":0,"1581":0,"1582":0,"1583":0,"1584":0,"1585":0,"1586":0,"1587":0,"1588":0,"1589":0,"1590":0,"1591":0,"1592":0,"1593":0,"1594":0,"1595":0,"1596":0,"1597":0,"1598":0,"1599":0,"1600":0,"1601":0,"1602":0,"1603":0,"1604":0,"1605":0,"1606":0,"1607":0},b:{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0],"9":[0,0],"10":[0,0],"11":[0,0],"12":[0,0],"13":[0,0],"14":[0,0],"15":[0,0],"16":[0,0],"17":[0,0],"18":[0,0],"19":[0,0],"20":[0,0,0],"21":[0,0],"22":[0,0],"23":[0,0],"24":[0,0],"25":[0,0],"26":[0,0],"27":[0,0,0,0,0,0],"28":[0,0],"29":[0,0],"30":[0,0],"31":[0,0],"32":[0,0],"33":[0,0],"34":[0,0],"35":[0,0],"36":[0,0,0],"37":[0,0],"38":[0,0],"39":[0,0],"40":[0,0],"41":[0,0],"42":[0,0],"43":[0,0],"44":[0,0],"45":[0,0],"46":[0,0],"47":[0,0],"48":[0,0],"49":[0,0],"50":[0,0],"51":[0,0],"52":[0,0],"53":[0,0],"54":[0,0],"55":[0,0],"56":[0,0],"57":[0,0],"58":[0,0,0],"59":[0,0],"60":[0,0],"61":[0,0],"62":[0,0],"63":[0,0],"64":[0,0],"65":[0,0],"66":[0,0],"67":[0,0],"68":[0,0],"69":[0,0],"70":[0,0,0,0],"71":[0,0,0,0],"72":[0,0],"73":[0,0],"74":[0,0],"75":[0,0],"76":[0,0],"77":[0,0],"78":[0,0],"79":[0,0],"80":[0,0],"81":[0,0],"82":[0,0],"83":[0,0,0],"84":[0,0],"85":[0,0],"86":[0,0,0],"87":[0,0],"88":[0,0],"89":[0,0,0],"90":[0,0],"91":[0,0],"92":[0,0],"93":[0,0],"94":[0,0],"95":[0,0],"96":[0,0],"97":[0,0],"98":[0,0],"99":[0,0],"100":[0,0],"101":[0,0],"102":[0,0],"103":[0,0],"104":[0,0],"105":[0,0],"106":[0,0],"107":[0,0],"108":[0,0],"109":[0,0],"110":[0,0,0],"111":[0,0],"112":[0,0],"113":[0,0],"114":[0,0],"115":[0,0],"116":[0,0],"117":[0,0],"118":[0,0],"119":[0,0],"120":[0,0],"121":[0,0],"122":[0,0],"123":[0,0],"124":[0,0],"125":[0,0],"126":[0,0,0],"127":[0,0],"128":[0,0],"129":[0,0],"130":[0,0],"131":[0,0],"132":[0,0],"133":[0,0],"134":[0,0],"135":[0,0],"136":[0,0],"137":[0,0],"138":[0,0],"139":[0,0],"140":[0,0],"141":[0,0],"142":[0,0],"143":[0,0],"144":[0,0],"145":[0,0],"146":[0,0,0,0],"147":[0,0],"148":[0],"149":[0],"150":[0,0],"151":[0,0],"152":[0,0],"153":[0,0],"154":[0,0],"155":[0,0],"156":[0,0],"157":[0,0],"158":[0,0,0,0],"159":[0],"160":[0],"161":[0,0],"162":[0,0],"163":[0,0],"164":[0,0],"165":[0,0],"166":[0,0],"167":[0,0],"168":[0,0],"169":[0,0],"170":[0,0],"171":[0,0],"172":[0,0],"173":[0,0],"174":[0,0],"175":[0,0,0,0],"176":[0,0],"177":[0,0],"178":[0,0],"179":[0,0],"180":[0,0],"181":[0,0],"182":[0],"183":[0,0],"184":[0,0],"185":[0,0],"186":[0,0],"187":[0,0],"188":[0,0],"189":[0,0],"190":[0,0],"191":[0,0],"192":[0,0],"193":[0,0],"194":[0,0],"195":[0,0],"196":[0,0],"197":[0,0],"198":[0,0],"199":[0,0],"200":[0,0],"201":[0,0],"202":[0,0],"203":[0,0],"204":[0],"205":[0,0],"206":[0,0,0],"207":[0,0],"208":[0,0],"209":[0,0],"210":[0,0,0],"211":[0,0],"212":[0,0,0],"213":[0,0,0],"214":[0,0,0],"215":[0,0,0],"216":[0,0,0,0],"217":[0,0,0],"218":[0,0],"219":[0],"220":[0],"221":[0],"222":[0,0],"223":[0,0],"224":[0,0],"225":[0,0],"226":[0,0],"227":[0,0],"228":[0,0,0],"229":[0,0],"230":[0,0],"231":[0],"232":[0,0],"233":[0,0],"234":[0],"235":[0,0],"236":[0,0],"237":[0,0],"238":[0,0],"239":[0],"240":[0],"241":[0,0],"242":[0,0,0],"243":[0,0],"244":[0,0],"245":[0,0],"246":[0,0,0],"247":[0,0],"248":[0,0],"249":[0,0],"250":[0,0],"251":[0],"252":[0],"253":[0],"254":[0,0],"255":[0,0],"256":[0,0],"257":[0,0],"258":[0,0],"259":[0,0,0,0],"260":[0,0],"261":[0],"262":[0],"263":[0],"264":[0,0],"265":[0],"266":[0,0],"267":[0,0],"268":[0,0],"269":[0,0],"270":[0,0],"271":[0,0],"272":[0,0],"273":[0,0],"274":[0,0],"275":[0,0],"276":[0,0],"277":[0,0],"278":[0,0,0],"279":[0,0],"280":[0,0],"281":[0,0],"282":[0],"283":[0,0],"284":[0,0],"285":[0,0],"286":[0,0],"287":[0,0],"288":[0,0],"289":[0,0,0],"290":[0,0],"291":[0,0],"292":[0,0],"293":[0],"294":[0],"295":[0,0],"296":[0,0],"297":[0,0],"298":[0,0],"299":[0,0],"300":[0,0],"301":[0],"302":[0],"303":[0,0],"304":[0,0],"305":[0,0],"306":[0],"307":[0,0],"308":[0,0,0],"309":[0],"310":[0,0],"311":[0,0],"312":[0,0],"313":[0,0],"314":[0,0],"315":[0],"316":[0],"317":[0],"318":[0],"319":[0],"320":[0,0,0],"321":[0,0],"322":[0,0,0,0],"323":[0,0,0],"324":[0,0],"325":[0,0],"326":[0,0],"327":[0,0],"328":[0],"329":[0],"330":[0],"331":[0,0],"332":[0,0],"333":[0,0],"334":[0,0],"335":[0,0],"336":[0,0],"337":[0,0],"338":[0,0],"339":[0,0],"340":[0,0],"341":[0,0,0,0],"342":[0,0],"343":[0,0],"344":[0,0],"345":[0,0],"346":[0,0],"347":[0,0],"348":[0,0],"349":[0,0],"350":[0,0],"351":[0,0],"352":[0,0],"353":[0,0],"354":[0,0],"355":[0,0],"356":[0,0],"357":[0,0],"358":[0,0],"359":[0,0],"360":[0,0],"361":[0,0],"362":[0,0],"363":[0,0],"364":[0,0],"365":[0,0],"366":[0,0],"367":[0,0],"368":[0,0],"369":[0,0],"370":[0,0],"371":[0,0],"372":[0,0],"373":[0,0],"374":[0,0,0,0],"375":[0,0],"376":[0,0],"377":[0,0],"378":[0,0],"379":[0,0],"380":[0,0],"381":[0,0],"382":[0,0],"383":[0,0],"384":[0,0],"385":[0,0],"386":[0,0],"387":[0,0],"388":[0,0],"389":[0,0],"390":[0,0],"391":[0,0,0],"392":[0,0],"393":[0,0],"394":[0,0,0],"395":[0,0],"396":[0,0],"397":[0,0],"398":[0,0],"399":[0,0],"400":[0,0],"401":[0,0],"402":[0,0],"403":[0,0],"404":[0,0],"405":[0,0],"406":[0,0,0],"407":[0,0],"408":[0,0],"409":[0,0],"410":[0,0,0],"411":[0,0],"412":[0,0],"413":[0,0],"414":[0,0],"415":[0,0],"416":[0,0],"417":[0,0],"418":[0,0],"419":[0,0],"420":[0,0],"421":[0,0],"422":[0,0],"423":[0,0],"424":[0,0],"425":[0,0],"426":[0,0],"427":[0,0],"428":[0,0],"429":[0,0],"430":[0,0],"431":[0,0],"432":[0,0],"433":[0,0],"434":[0,0],"435":[0],"436":[0,0],"437":[0,0],"438":[0,0],"439":[0,0],"440":[0],"441":[0,0],"442":[0,0],"443":[0,0],"444":[0,0],"445":[0,0],"446":[0,0],"447":[0,0],"448":[0,0],"449":[0,0],"450":[0,0],"451":[0,0],"452":[0,0],"453":[0,0],"454":[0,0],"455":[0,0],"456":[0,0],"457":[0,0],"458":[0,0],"459":[0,0],"460":[0,0],"461":[0,0],"462":[0,0],"463":[0,0],"464":[0,0],"465":[0],"466":[0,0],"467":[0,0],"468":[0,0],"469":[0,0],"470":[0,0],"471":[0,0],"472":[0,0],"473":[0,0],"474":[0,0],"475":[0,0],"476":[0,0],"477":[0,0],"478":[0,0],"479":[0,0],"480":[0,0],"481":[0,0],"482":[0,0],"483":[0,0],"484":[0,0],"485":[0,0],"486":[0,0],"487":[0,0],"488":[0,0],"489":[0,0],"490":[0,0],"491":[0,0],"492":[0,0,0],"493":[0,0],"494":[0,0],"495":[0,0],"496":[0,0],"497":[0,0,0],"498":[0,0],"499":[0,0],"500":[0],"501":[0,0],"502":[0,0],"503":[0,0],"504":[0,0],"505":[0,0],"506":[0,0],"507":[0,0],"508":[0,0],"509":[0,0],"510":[0,0],"511":[0,0],"512":[0,0],"513":[0,0],"514":[0,0],"515":[0,0],"516":[0,0],"517":[0,0],"518":[0,0],"519":[0,0],"520":[0,0,0,0],"521":[0,0],"522":[0,0],"523":[0,0],"524":[0,0],"525":[0,0],"526":[0,0],"527":[0,0],"528":[0,0],"529":[0,0],"530":[0,0],"531":[0,0],"532":[0,0],"533":[0,0],"534":[0,0],"535":[0,0],"536":[0,0],"537":[0,0],"538":[0,0],"539":[0,0],"540":[0,0,0],"541":[0,0],"542":[0,0],"543":[0,0],"544":[0],"545":[0,0],"546":[0,0,0],"547":[0,0,0],"548":[0,0],"549":[0,0],"550":[0,0],"551":[0,0],"552":[0,0],"553":[0,0],"554":[0,0],"555":[0,0],"556":[0,0],"557":[0,0],"558":[0,0],"559":[0,0],"560":[0,0],"561":[0,0],"562":[0,0],"563":[0,0],"564":[0,0],"565":[0,0],"566":[0,0],"567":[0,0],"568":[0,0],"569":[0,0],"570":[0,0],"571":[0,0],"572":[0,0],"573":[0,0],"574":[0,0],"575":[0,0],"576":[0,0],"577":[0,0],"578":[0,0],"579":[0,0],"580":[0,0],"581":[0,0],"582":[0,0],"583":[0,0],"584":[0,0],"585":[0],"586":[0],"587":[0],"588":[0],"589":[0],"590":[0,0],"591":[0,0],"592":[0,0],"593":[0,0],"594":[0,0],"595":[0,0],"596":[0,0],"597":[0,0,0],"598":[0,0,0],"599":[0,0],"600":[0],"601":[0,0],"602":[0,0],"603":[0,0],"604":[0,0],"605":[0,0],"606":[0,0],"607":[0,0],"608":[0,0],"609":[0,0],"610":[0,0],"611":[0,0],"612":[0,0,0],"613":[0,0],"614":[0,0],"615":[0],"616":[0],"617":[0],"618":[0],"619":[0,0],"620":[0,0],"621":[0,0,0],"622":[0,0],"623":[0,0],"624":[0,0],"625":[0,0],"626":[0,0],"627":[0,0,0],"628":[0,0],"629":[0,0],"630":[0,0],"631":[0,0],"632":[0,0],"633":[0,0,0,0],"634":[0,0,0,0],"635":[0,0],"636":[0,0],"637":[0,0],"638":[0,0],"639":[0,0,0,0],"640":[0,0],"641":[0,0],"642":[0,0],"643":[0,0],"644":[0,0],"645":[0,0],"646":[0,0],"647":[0,0],"648":[0,0],"649":[0,0],"650":[0,0],"651":[0,0],"652":[0,0],"653":[0,0],"654":[0,0],"655":[0,0],"656":[0,0],"657":[0,0],"658":[0,0],"659":[0,0],"660":[0,0],"661":[0,0,0],"662":[0,0],"663":[0,0],"664":[0,0],"665":[0,0],"666":[0,0],"667":[0,0],"668":[0,0],"669":[0,0],"670":[0,0],"671":[0,0],"672":[0,0],"673":[0,0],"674":[0,0],"675":[0,0],"676":[0],"677":[0,0],"678":[0,0],"679":[0,0],"680":[0,0],"681":[0,0],"682":[0,0],"683":[0,0],"684":[0,0],"685":[0,0],"686":[0,0],"687":[0,0],"688":[0,0],"689":[0,0],"690":[0,0],"691":[0,0],"692":[0,0],"693":[0,0],"694":[0,0,0],"695":[0,0],"696":[0,0],"697":[0,0,0],"698":[0,0],"699":[0,0],"700":[0,0],"701":[0,0,0],"702":[0,0],"703":[0,0],"704":[0,0],"705":[0,0],"706":[0,0],"707":[0,0],"708":[0,0],"709":[0,0],"710":[0,0],"711":[0,0],"712":[0,0],"713":[0,0],"714":[0,0],"715":[0,0],"716":[0,0],"717":[0,0],"718":[0,0],"719":[0,0],"720":[0,0],"721":[0,0],"722":[0,0],"723":[0,0],"724":[0,0],"725":[0,0],"726":[0,0],"727":[0,0],"728":[0,0,0,0],"729":[0,0],"730":[0,0],"731":[0,0],"732":[0,0],"733":[0,0],"734":[0,0],"735":[0,0],"736":[0,0],"737":[0,0],"738":[0,0],"739":[0,0],"740":[0,0],"741":[0,0],"742":[0,0],"743":[0,0],"744":[0,0,0],"745":[0,0],"746":[0],"747":[0,0],"748":[0,0],"749":[0,0],"750":[0,0],"751":[0,0],"752":[0,0],"753":[0,0],"754":[0,0],"755":[0,0],"756":[0,0],"757":[0,0],"758":[0,0],"759":[0,0,0],"760":[0,0],"761":[0,0],"762":[0,0],"763":[0,0],"764":[0,0],"765":[0,0],"766":[0,0,0],"767":[0,0],"768":[0,0],"769":[0,0],"770":[0,0],"771":[0,0],"772":[0,0],"773":[0,0],"774":[0,0],"775":[0,0,0,0],"776":[0,0],"777":[0,0],"778":[0,0,0],"779":[0,0],"780":[0,0],"781":[0,0],"782":[0,0],"783":[0,0,0],"784":[0,0],"785":[0,0],"786":[0,0],"787":[0,0],"788":[0,0],"789":[0,0],"790":[0,0],"791":[0,0],"792":[0,0],"793":[0,0],"794":[0,0],"795":[0,0],"796":[0,0],"797":[0,0],"798":[0,0],"799":[0,0,0,0],"800":[0,0],"801":[0,0],"802":[0,0],"803":[0,0],"804":[0,0],"805":[0,0],"806":[0,0],"807":[0],"808":[0,0],"809":[0,0,0,0],"810":[0,0],"811":[0,0],"812":[0,0],"813":[0,0],"814":[0,0],"815":[0],"816":[0,0],"817":[0,0],"818":[0,0],"819":[0,0],"820":[0,0],"821":[0,0],"822":[0,0],"823":[0,0],"824":[0,0],"825":[0,0],"826":[0,0],"827":[0,0],"828":[0,0],"829":[0,0,0],"830":[0,0],"831":[0,0],"832":[0,0],"833":[0,0],"834":[0,0],"835":[0,0],"836":[0,0],"837":[0,0],"838":[0,0],"839":[0,0],"840":[0,0],"841":[0,0],"842":[0,0],"843":[0,0],"844":[0,0,0,0,0,0],"845":[0,0],"846":[0,0],"847":[0,0],"848":[0,0],"849":[0,0],"850":[0,0],"851":[0,0],"852":[0,0],"853":[0,0],"854":[0,0],"855":[0,0],"856":[0,0],"857":[0,0],"858":[0,0],"859":[0,0],"860":[0,0],"861":[0,0],"862":[0,0],"863":[0,0],"864":[0,0],"865":[0,0],"866":[0,0,0],"867":[0,0],"868":[0,0],"869":[0,0],"870":[0,0],"871":[0,0],"872":[0,0,0,0],"873":[0,0],"874":[0,0],"875":[0,0],"876":[0,0],"877":[0,0],"878":[0,0],"879":[0,0],"880":[0,0],"881":[0,0],"882":[0,0],"883":[0,0],"884":[0,0],"885":[0,0],"886":[0,0],"887":[0,0],"888":[0,0],"889":[0,0],"890":[0,0],"891":[0,0],"892":[0,0],"893":[0,0],"894":[0,0],"895":[0,0],"896":[0,0],"897":[0],"898":[0,0],"899":[0,0],"900":[0,0],"901":[0,0],"902":[0,0],"903":[0,0],"904":[0,0],"905":[0,0],"906":[0,0],"907":[0,0],"908":[0,0],"909":[0,0],"910":[0,0],"911":[0,0],"912":[0,0],"913":[0,0,0],"914":[0,0],"915":[0,0],"916":[0,0],"917":[0,0],"918":[0,0],"919":[0,0],"920":[0,0],"921":[0,0],"922":[0,0],"923":[0,0],"924":[0,0],"925":[0,0],"926":[0,0],"927":[0,0],"928":[0,0,0,0],"929":[0,0,0],"930":[0,0,0],"931":[0,0,0,0],"932":[0,0],"933":[0,0],"934":[0,0],"935":[0,0],"936":[0,0],"937":[0],"938":[0,0],"939":[0,0],"940":[0,0],"941":[0,0],"942":[0,0],"943":[0,0],"944":[0,0],"945":[0,0],"946":[0,0],"947":[0,0],"948":[0,0],"949":[0,0],"950":[0,0],"951":[0,0],"952":[0,0],"953":[0,0,0,0,0,0],"954":[0,0],"955":[0,0],"956":[0,0],"957":[0,0],"958":[0,0],"959":[0,0],"960":[0,0],"961":[0,0],"962":[0,0],"963":[0,0],"964":[0,0],"965":[0,0],"966":[0,0],"967":[0,0],"968":[0,0],"969":[0],"970":[0,0],"971":[0,0],"972":[0,0],"973":[0,0],"974":[0,0],"975":[0,0],"976":[0,0],"977":[0,0,0,0],"978":[0,0],"979":[0,0],"980":[0,0],"981":[0,0],"982":[0,0],"983":[0,0],"984":[0,0],"985":[0,0],"986":[0,0],"987":[0,0],"988":[0,0],"989":[0,0],"990":[0,0],"991":[0,0],"992":[0,0],"993":[0,0],"994":[0,0],"995":[0,0],"996":[0,0],"997":[0,0,0],"998":[0,0],"999":[0,0],"1000":[0,0],"1001":[0,0],"1002":[0,0],"1003":[0,0],"1004":[0,0],"1005":[0,0],"1006":[0,0],"1007":[0,0],"1008":[0,0],"1009":[0,0],"1010":[0,0],"1011":[0,0],"1012":[0,0,0],"1013":[0,0],"1014":[0,0],"1015":[0,0],"1016":[0,0],"1017":[0,0],"1018":[0,0],"1019":[0,0],"1020":[0,0],"1021":[0,0],"1022":[0,0],"1023":[0,0],"1024":[0,0],"1025":[0,0],"1026":[0,0],"1027":[0,0],"1028":[0,0],"1029":[0,0],"1030":[0,0],"1031":[0,0],"1032":[0,0],"1033":[0,0],"1034":[0,0],"1035":[0,0],"1036":[0,0],"1037":[0,0],"1038":[0,0],"1039":[0,0],"1040":[0,0],"1041":[0,0],"1042":[0,0],"1043":[0,0],"1044":[0,0],"1045":[0,0],"1046":[0,0],"1047":[0,0],"1048":[0,0],"1049":[0,0],"1050":[0,0],"1051":[0,0],"1052":[0,0],"1053":[0,0],"1054":[0,0],"1055":[0,0,0],"1056":[0,0],"1057":[0,0],"1058":[0,0],"1059":[0,0],"1060":[0,0],"1061":[0,0],"1062":[0,0],"1063":[0,0],"1064":[0,0],"1065":[0,0],"1066":[0,0],"1067":[0,0],"1068":[0,0],"1069":[0,0,0],"1070":[0,0,0],"1071":[0,0],"1072":[0,0],"1073":[0,0],"1074":[0],"1075":[0,0],"1076":[0,0],"1077":[0,0,0],"1078":[0,0],"1079":[0,0],"1080":[0,0],"1081":[0,0],"1082":[0,0],"1083":[0,0],"1084":[0,0],"1085":[0,0],"1086":[0,0],"1087":[0,0],"1088":[0,0],"1089":[0,0],"1090":[0,0],"1091":[0,0],"1092":[0,0],"1093":[0,0],"1094":[0,0],"1095":[0,0,0,0],"1096":[0,0],"1097":[0,0],"1098":[0,0],"1099":[0,0],"1100":[0,0],"1101":[0,0],"1102":[0,0],"1103":[0,0],"1104":[0,0],"1105":[0,0,0],"1106":[0,0,0,0],"1107":[0,0],"1108":[0,0],"1109":[0,0],"1110":[0,0],"1111":[0,0,0],"1112":[0,0],"1113":[0,0],"1114":[0,0],"1115":[0,0],"1116":[0,0],"1117":[0,0],"1118":[0,0],"1119":[0,0],"1120":[0,0],"1121":[0,0],"1122":[0,0],"1123":[0,0],"1124":[0,0,0],"1125":[0],"1126":[0,0],"1127":[0,0],"1128":[0,0],"1129":[0,0],"1130":[0,0],"1131":[0,0],"1132":[0,0],"1133":[0,0],"1134":[0,0],"1135":[0,0],"1136":[0,0],"1137":[0,0],"1138":[0,0],"1139":[0,0],"1140":[0,0],"1141":[0,0],"1142":[0,0],"1143":[0,0],"1144":[0,0],"1145":[0,0],"1146":[0,0],"1147":[0,0],"1148":[0,0],"1149":[0],"1150":[0,0],"1151":[0,0],"1152":[0,0],"1153":[0,0],"1154":[0,0],"1155":[0,0],"1156":[0,0],"1157":[0,0],"1158":[0,0],"1159":[0,0],"1160":[0,0],"1161":[0,0],"1162":[0,0],"1163":[0,0],"1164":[0,0],"1165":[0,0],"1166":[0,0],"1167":[0,0],"1168":[0,0],"1169":[0,0],"1170":[0,0],"1171":[0,0],"1172":[0,0],"1173":[0,0],"1174":[0,0],"1175":[0,0],"1176":[0,0],"1177":[0,0],"1178":[0,0],"1179":[0,0],"1180":[0,0],"1181":[0,0],"1182":[0,0],"1183":[0,0],"1184":[0,0],"1185":[0,0],"1186":[0,0],"1187":[0,0],"1188":[0,0],"1189":[0,0],"1190":[0,0],"1191":[0,0],"1192":[0,0],"1193":[0,0],"1194":[0,0],"1195":[0,0],"1196":[0],"1197":[0,0],"1198":[0,0],"1199":[0,0,0],"1200":[0,0],"1201":[0,0],"1202":[0,0],"1203":[0,0,0],"1204":[0,0],"1205":[0,0],"1206":[0,0],"1207":[0,0],"1208":[0,0,0],"1209":[0,0],"1210":[0,0],"1211":[0,0],"1212":[0,0],"1213":[0,0],"1214":[0,0],"1215":[0,0],"1216":[0,0],"1217":[0,0],"1218":[0,0],"1219":[0,0],"1220":[0,0,0],"1221":[0,0],"1222":[0,0,0],"1223":[0,0],"1224":[0,0],"1225":[0,0],"1226":[0,0],"1227":[0,0],"1228":[0,0],"1229":[0,0],"1230":[0,0],"1231":[0,0],"1232":[0,0],"1233":[0,0],"1234":[0,0,0],"1235":[0,0],"1236":[0,0],"1237":[0,0],"1238":[0,0],"1239":[0,0],"1240":[0,0],"1241":[0,0],"1242":[0,0],"1243":[0,0],"1244":[0,0],"1245":[0,0],"1246":[0,0],"1247":[0,0],"1248":[0,0],"1249":[0,0],"1250":[0,0],"1251":[0,0],"1252":[0],"1253":[0,0],"1254":[0,0],"1255":[0,0],"1256":[0,0],"1257":[0,0,0],"1258":[0,0],"1259":[0,0,0],"1260":[0,0],"1261":[0,0],"1262":[0,0],"1263":[0,0],"1264":[0,0],"1265":[0,0,0],"1266":[0,0],"1267":[0,0,0,0],"1268":[0,0,0,0,0],"1269":[0,0,0,0],"1270":[0,0],"1271":[0,0],"1272":[0,0],"1273":[0,0],"1274":[0,0],"1275":[0,0],"1276":[0,0],"1277":[0,0],"1278":[0,0],"1279":[0,0],"1280":[0,0],"1281":[0,0,0,0,0,0],"1282":[0,0],"1283":[0,0],"1284":[0,0],"1285":[0,0],"1286":[0,0],"1287":[0,0],"1288":[0,0],"1289":[0,0],"1290":[0,0],"1291":[0,0],"1292":[0,0],"1293":[0,0],"1294":[0,0],"1295":[0,0],"1296":[0,0],"1297":[0,0],"1298":[0,0],"1299":[0,0],"1300":[0,0],"1301":[0,0],"1302":[0,0],"1303":[0,0],"1304":[0,0],"1305":[0,0],"1306":[0,0],"1307":[0,0],"1308":[0,0],"1309":[0,0],"1310":[0,0,0],"1311":[0,0],"1312":[0,0,0],"1313":[0,0],"1314":[0,0],"1315":[0,0],"1316":[0,0],"1317":[0,0],"1318":[0,0],"1319":[0,0,0],"1320":[0,0],"1321":[0,0],"1322":[0,0],"1323":[0,0],"1324":[0,0],"1325":[0,0],"1326":[0,0],"1327":[0,0],"1328":[0,0],"1329":[0,0],"1330":[0,0],"1331":[0,0],"1332":[0,0],"1333":[0,0],"1334":[0,0,0],"1335":[0,0],"1336":[0,0],"1337":[0,0,0],"1338":[0,0],"1339":[0,0],"1340":[0,0],"1341":[0,0],"1342":[0,0],"1343":[0,0],"1344":[0,0],"1345":[0,0],"1346":[0,0],"1347":[0,0],"1348":[0,0],"1349":[0,0],"1350":[0,0],"1351":[0,0],"1352":[0,0],"1353":[0,0],"1354":[0,0],"1355":[0,0],"1356":[0,0],"1357":[0,0],"1358":[0,0],"1359":[0,0],"1360":[0,0],"1361":[0,0],"1362":[0,0],"1363":[0,0],"1364":[0,0],"1365":[0,0],"1366":[0,0],"1367":[0,0],"1368":[0,0],"1369":[0,0],"1370":[0,0],"1371":[0,0],"1372":[0,0],"1373":[0,0],"1374":[0,0],"1375":[0,0,0],"1376":[0,0],"1377":[0,0],"1378":[0,0],"1379":[0,0],"1380":[0,0],"1381":[0,0],"1382":[0,0],"1383":[0,0],"1384":[0,0],"1385":[0,0],"1386":[0,0],"1387":[0,0],"1388":[0,0],"1389":[0,0],"1390":[0,0],"1391":[0,0],"1392":[0,0],"1393":[0,0],"1394":[0,0],"1395":[0,0],"1396":[0,0],"1397":[0,0],"1398":[0],"1399":[0,0],"1400":[0,0],"1401":[0,0],"1402":[0,0],"1403":[0,0],"1404":[0],"1405":[0,0],"1406":[0,0],"1407":[0,0],"1408":[0],"1409":[0,0],"1410":[0],"1411":[0,0],"1412":[0,0],"1413":[0,0],"1414":[0,0],"1415":[0],"1416":[0,0],"1417":[0,0],"1418":[0,0],"1419":[0,0],"1420":[0,0],"1421":[0,0,0],"1422":[0,0],"1423":[0,0],"1424":[0,0],"1425":[0,0],"1426":[0,0],"1427":[0,0],"1428":[0,0],"1429":[0,0,0,0],"1430":[0,0],"1431":[0,0],"1432":[0,0],"1433":[0,0],"1434":[0,0],"1435":[0,0],"1436":[0,0],"1437":[0,0],"1438":[0,0],"1439":[0,0],"1440":[0,0],"1441":[0,0],"1442":[0,0],"1443":[0,0],"1444":[0,0],"1445":[0,0],"1446":[0,0],"1447":[0,0],"1448":[0,0],"1449":[0,0],"1450":[0,0],"1451":[0,0],"1452":[0,0],"1453":[0,0],"1454":[0,0],"1455":[0,0],"1456":[0,0],"1457":[0],"1458":[0,0],"1459":[0,0],"1460":[0,0],"1461":[0,0],"1462":[0],"1463":[0,0],"1464":[0,0],"1465":[0,0],"1466":[0,0],"1467":[0,0],"1468":[0,0,0],"1469":[0,0],"1470":[0,0],"1471":[0,0],"1472":[0,0],"1473":[0,0],"1474":[0,0],"1475":[0,0],"1476":[0,0],"1477":[0,0],"1478":[0,0],"1479":[0,0],"1480":[0,0],"1481":[0,0],"1482":[0,0],"1483":[0,0],"1484":[0,0],"1485":[0,0],"1486":[0,0],"1487":[0,0],"1488":[0,0],"1489":[0,0],"1490":[0,0],"1491":[0,0],"1492":[0,0],"1493":[0,0],"1494":[0,0],"1495":[0,0],"1496":[0,0],"1497":[0,0],"1498":[0,0],"1499":[0,0],"1500":[0,0],"1501":[0,0],"1502":[0,0],"1503":[0,0],"1504":[0,0],"1505":[0,0],"1506":[0,0],"1507":[0,0],"1508":[0,0],"1509":[0,0],"1510":[0,0],"1511":[0,0],"1512":[0,0],"1513":[0,0],"1514":[0,0],"1515":[0,0],"1516":[0,0],"1517":[0,0],"1518":[0,0,0],"1519":[0,0],"1520":[0,0],"1521":[0,0],"1522":[0,0],"1523":[0,0],"1524":[0,0],"1525":[0,0],"1526":[0,0],"1527":[0,0],"1528":[0,0],"1529":[0,0],"1530":[0,0],"1531":[0,0],"1532":[0,0],"1533":[0,0],"1534":[0,0],"1535":[0,0],"1536":[0,0],"1537":[0,0],"1538":[0,0],"1539":[0,0],"1540":[0,0],"1541":[0,0],"1542":[0,0],"1543":[0,0],"1544":[0,0],"1545":[0,0],"1546":[0,0],"1547":[0,0],"1548":[0,0],"1549":[0,0],"1550":[0,0],"1551":[0,0],"1552":[0,0],"1553":[0,0],"1554":[0],"1555":[0,0],"1556":[0,0],"1557":[0,0],"1558":[0,0],"1559":[0,0],"1560":[0,0],"1561":[0,0],"1562":[0,0,0],"1563":[0,0],"1564":[0,0],"1565":[0,0],"1566":[0,0],"1567":[0,0],"1568":[0,0],"1569":[0,0],"1570":[0,0],"1571":[0,0],"1572":[0,0],"1573":[0,0],"1574":[0,0],"1575":[0,0],"1576":[0,0,0],"1577":[0,0],"1578":[0,0],"1579":[0,0],"1580":[0,0],"1581":[0,0],"1582":[0,0],"1583":[0,0],"1584":[0,0],"1585":[0,0],"1586":[0,0],"1587":[0,0],"1588":[0,0],"1589":[0,0],"1590":[0,0],"1591":[0,0],"1592":[0,0],"1593":[0,0],"1594":[0,0],"1595":[0,0],"1596":[0,0],"1597":[0,0],"1598":[0,0],"1599":[0,0],"1600":[0,0],"1601":[0,0],"1602":[0,0],"1603":[0,0],"1604":[0,0],"1605":[0,0],"1606":[0,0],"1607":[0,0],"1608":[0,0],"1609":[0,0],"1610":[0,0],"1611":[0,0],"1612":[0,0],"1613":[0,0],"1614":[0,0],"1615":[0,0],"1616":[0,0],"1617":[0,0],"1618":[0,0],"1619":[0,0],"1620":[0,0],"1621":[0,0],"1622":[0,0],"1623":[0,0],"1624":[0,0],"1625":[0,0],"1626":[0,0],"1627":[0,0,0,0],"1628":[0,0],"1629":[0,0],"1630":[0,0,0,0],"1631":[0,0],"1632":[0,0],"1633":[0,0],"1634":[0,0],"1635":[0,0],"1636":[0,0],"1637":[0,0],"1638":[0,0],"1639":[0,0],"1640":[0,0],"1641":[0,0,0],"1642":[0,0,0],"1643":[0,0],"1644":[0,0],"1645":[0,0],"1646":[0,0],"1647":[0,0],"1648":[0,0],"1649":[0,0],"1650":[0,0],"1651":[0,0],"1652":[0,0],"1653":[0,0,0,0],"1654":[0,0],"1655":[0,0],"1656":[0,0,0],"1657":[0,0],"1658":[0,0,0],"1659":[0,0],"1660":[0,0],"1661":[0,0],"1662":[0,0],"1663":[0,0],"1664":[0],"1665":[0,0],"1666":[0,0],"1667":[0,0],"1668":[0,0],"1669":[0,0],"1670":[0,0],"1671":[0,0],"1672":[0,0],"1673":[0,0],"1674":[0],"1675":[0,0],"1676":[0,0],"1677":[0,0],"1678":[0,0],"1679":[0,0],"1680":[0,0],"1681":[0,0],"1682":[0,0,0],"1683":[0,0],"1684":[0,0],"1685":[0,0],"1686":[0,0],"1687":[0,0],"1688":[0,0,0],"1689":[0,0],"1690":[0,0],"1691":[0,0],"1692":[0,0],"1693":[0,0],"1694":[0,0],"1695":[0,0],"1696":[0,0],"1697":[0,0,0,0],"1698":[0,0],"1699":[0,0,0],"1700":[0,0],"1701":[0,0],"1702":[0,0],"1703":[0,0],"1704":[0,0],"1705":[0,0],"1706":[0,0,0],"1707":[0,0],"1708":[0,0],"1709":[0,0],"1710":[0,0],"1711":[0,0],"1712":[0,0],"1713":[0,0],"1714":[0,0],"1715":[0,0],"1716":[0,0],"1717":[0,0],"1718":[0,0],"1719":[0,0],"1720":[0,0],"1721":[0,0],"1722":[0,0],"1723":[0,0],"1724":[0,0],"1725":[0,0,0,0],"1726":[0,0],"1727":[0,0],"1728":[0,0],"1729":[0,0],"1730":[0,0],"1731":[0,0],"1732":[0,0],"1733":[0,0,0],"1734":[0,0],"1735":[0,0],"1736":[0,0],"1737":[0,0],"1738":[0,0],"1739":[0,0],"1740":[0,0],"1741":[0,0],"1742":[0,0],"1743":[0,0],"1744":[0,0],"1745":[0,0],"1746":[0,0],"1747":[0,0],"1748":[0,0],"1749":[0,0],"1750":[0,0],"1751":[0,0],"1752":[0,0],"1753":[0,0],"1754":[0,0],"1755":[0,0],"1756":[0,0],"1757":[0,0,0],"1758":[0,0],"1759":[0,0],"1760":[0,0],"1761":[0,0],"1762":[0,0],"1763":[0,0],"1764":[0,0],"1765":[0,0],"1766":[0,0],"1767":[0,0,0],"1768":[0,0],"1769":[0,0],"1770":[0,0],"1771":[0,0],"1772":[0,0],"1773":[0,0],"1774":[0,0,0],"1775":[0,0],"1776":[0,0],"1777":[0,0],"1778":[0,0],"1779":[0,0],"1780":[0,0],"1781":[0,0,0],"1782":[0,0],"1783":[0,0],"1784":[0,0],"1785":[0,0],"1786":[0,0],"1787":[0,0,0],"1788":[0,0],"1789":[0,0],"1790":[0,0],"1791":[0],"1792":[0,0],"1793":[0,0],"1794":[0],"1795":[0,0],"1796":[0],"1797":[0,0],"1798":[0,0],"1799":[0,0],"1800":[0],"1801":[0,0],"1802":[0,0],"1803":[0,0],"1804":[0,0],"1805":[0,0],"1806":[0,0],"1807":[0,0],"1808":[0,0],"1809":[0,0],"1810":[0,0],"1811":[0,0],"1812":[0,0,0,0],"1813":[0,0],"1814":[0,0,0],"1815":[0,0],"1816":[0,0],"1817":[0,0],"1818":[0,0],"1819":[0,0,0,0],"1820":[0,0],"1821":[0,0],"1822":[0,0],"1823":[0,0],"1824":[0,0],"1825":[0,0],"1826":[0,0],"1827":[0,0],"1828":[0,0],"1829":[0,0],"1830":[0,0],"1831":[0,0],"1832":[0,0],"1833":[0,0],"1834":[0,0],"1835":[0,0],"1836":[0,0],"1837":[0,0],"1838":[0,0],"1839":[0,0],"1840":[0,0],"1841":[0,0],"1842":[0,0],"1843":[0,0],"1844":[0,0],"1845":[0,0],"1846":[0,0],"1847":[0,0],"1848":[0,0],"1849":[0,0],"1850":[0,0],"1851":[0,0],"1852":[0,0,0,0],"1853":[0,0],"1854":[0,0],"1855":[0,0],"1856":[0,0],"1857":[0,0],"1858":[0,0],"1859":[0,0,0,0,0,0,0,0,0,0,0],"1860":[0,0],"1861":[0,0],"1862":[0,0],"1863":[0,0],"1864":[0,0,0,0,0,0,0],"1865":[0,0],"1866":[0,0],"1867":[0,0],"1868":[0,0,0],"1869":[0,0],"1870":[0,0],"1871":[0,0,0],"1872":[0,0],"1873":[0,0],"1874":[0,0,0],"1875":[0,0],"1876":[0,0],"1877":[0,0],"1878":[0,0],"1879":[0,0],"1880":[0,0],"1881":[0,0],"1882":[0,0],"1883":[0,0],"1884":[0,0],"1885":[0,0],"1886":[0,0],"1887":[0,0],"1888":[0],"1889":[0],"1890":[0,0],"1891":[0,0],"1892":[0,0],"1893":[0,0],"1894":[0,0],"1895":[0,0],"1896":[0,0],"1897":[0,0,0],"1898":[0,0],"1899":[0,0],"1900":[0,0],"1901":[0,0],"1902":[0,0],"1903":[0,0,0],"1904":[0,0],"1905":[0,0],"1906":[0,0],"1907":[0,0],"1908":[0,0],"1909":[0,0],"1910":[0,0],"1911":[0,0],"1912":[0,0],"1913":[0,0],"1914":[0,0],"1915":[0,0],"1916":[0,0],"1917":[0,0,0,0],"1918":[0,0],"1919":[0,0],"1920":[0,0],"1921":[0,0],"1922":[0,0],"1923":[0,0],"1924":[0,0],"1925":[0,0],"1926":[0,0],"1927":[0,0],"1928":[0,0],"1929":[0,0],"1930":[0,0],"1931":[0,0],"1932":[0,0],"1933":[0,0],"1934":[0,0],"1935":[0,0],"1936":[0,0],"1937":[0,0],"1938":[0,0],"1939":[0,0],"1940":[0,0],"1941":[0,0],"1942":[0,0],"1943":[0,0],"1944":[0,0],"1945":[0,0],"1946":[0,0],"1947":[0,0],"1948":[0,0],"1949":[0,0],"1950":[0,0],"1951":[0,0],"1952":[0,0],"1953":[0,0,0],"1954":[0,0],"1955":[0,0],"1956":[0,0],"1957":[0,0],"1958":[0,0],"1959":[0,0],"1960":[0,0,0],"1961":[0,0],"1962":[0,0],"1963":[0,0],"1964":[0,0],"1965":[0,0],"1966":[0,0],"1967":[0,0],"1968":[0,0],"1969":[0,0],"1970":[0],"1971":[0,0],"1972":[0,0],"1973":[0,0]},inputSourceMap:{version:3,sources:["node_modules/rxjs/dist/esm/internal/util/isFunction.js","node_modules/rxjs/dist/esm/internal/util/createErrorClass.js","node_modules/rxjs/dist/esm/internal/util/UnsubscriptionError.js","node_modules/rxjs/dist/esm/internal/util/arrRemove.js","node_modules/rxjs/dist/esm/internal/Subscription.js","node_modules/rxjs/dist/esm/internal/config.js","node_modules/rxjs/dist/esm/internal/scheduler/timeoutProvider.js","node_modules/rxjs/dist/esm/internal/util/reportUnhandledError.js","node_modules/rxjs/dist/esm/internal/util/noop.js","node_modules/rxjs/dist/esm/internal/NotificationFactories.js","node_modules/rxjs/dist/esm/internal/util/errorContext.js","node_modules/rxjs/dist/esm/internal/Subscriber.js","node_modules/rxjs/dist/esm/internal/symbol/observable.js","node_modules/rxjs/dist/esm/internal/util/identity.js","node_modules/rxjs/dist/esm/internal/util/pipe.js","node_modules/rxjs/dist/esm/internal/Observable.js","node_modules/rxjs/dist/esm/internal/util/ObjectUnsubscribedError.js","node_modules/rxjs/dist/esm/internal/Subject.js","node_modules/rxjs/dist/esm/internal/BehaviorSubject.js","node_modules/rxjs/dist/esm/internal/util/isScheduler.js","node_modules/rxjs/dist/esm/internal/util/args.js","node_modules/tslib/tslib.es6.mjs","node_modules/rxjs/dist/esm/internal/util/isArrayLike.js","node_modules/rxjs/dist/esm/internal/util/isPromise.js","node_modules/rxjs/dist/esm/internal/util/isInteropObservable.js","node_modules/rxjs/dist/esm/internal/util/isAsyncIterable.js","node_modules/rxjs/dist/esm/internal/util/throwUnobservableError.js","node_modules/rxjs/dist/esm/internal/symbol/iterator.js","node_modules/rxjs/dist/esm/internal/util/isIterable.js","node_modules/rxjs/dist/esm/internal/util/isReadableStreamLike.js","node_modules/rxjs/dist/esm/internal/observable/innerFrom.js","node_modules/rxjs/dist/esm/internal/util/executeSchedule.js","node_modules/rxjs/dist/esm/internal/util/lift.js","node_modules/rxjs/dist/esm/internal/operators/OperatorSubscriber.js","node_modules/rxjs/dist/esm/internal/operators/observeOn.js","node_modules/rxjs/dist/esm/internal/operators/subscribeOn.js","node_modules/rxjs/dist/esm/internal/scheduled/scheduleObservable.js","node_modules/rxjs/dist/esm/internal/scheduled/schedulePromise.js","node_modules/rxjs/dist/esm/internal/scheduled/scheduleArray.js","node_modules/rxjs/dist/esm/internal/scheduled/scheduleIterable.js","node_modules/rxjs/dist/esm/internal/scheduled/scheduleAsyncIterable.js","node_modules/rxjs/dist/esm/internal/scheduled/scheduleReadableStreamLike.js","node_modules/rxjs/dist/esm/internal/scheduled/scheduled.js","node_modules/rxjs/dist/esm/internal/observable/from.js","node_modules/rxjs/dist/esm/internal/observable/of.js","node_modules/rxjs/dist/esm/internal/operators/map.js","node_modules/rxjs/dist/esm/internal/operators/mergeInternals.js","node_modules/rxjs/dist/esm/internal/operators/mergeMap.js","node_modules/rxjs/dist/esm/internal/util/mapOneOrManyArgs.js","node_modules/rxjs/dist/esm/internal/observable/fromEvent.js","node_modules/rxjs/dist/esm/internal/operators/filter.js","node_modules/rxjs/dist/esm/internal/operators/catchError.js","node_modules/rxjs/dist/esm/internal/observable/empty.js","node_modules/rxjs/dist/esm/internal/operators/take.js","node_modules/rxjs/dist/esm/internal/operators/finalize.js","node_modules/rxjs/dist/esm/internal/operators/mergeAll.js","node_modules/rxjs/dist/esm/internal/operators/concatAll.js","node_modules/rxjs/dist/esm/internal/observable/concat.js","node_modules/rxjs/dist/esm/internal/operators/startWith.js","node_modules/rxjs/dist/esm/internal/operators/switchMap.js","node_modules/rxjs/dist/esm/internal/operators/takeUntil.js","node_modules/rxjs/dist/esm/internal/operators/tap.js","node_modules/rxjs/dist/esm/internal/scheduler/dateTimestampProvider.js","node_modules/rxjs/dist/esm/internal/ReplaySubject.js","node_modules/rxjs/dist/esm/internal/scheduler/Action.js","node_modules/rxjs/dist/esm/internal/scheduler/intervalProvider.js","node_modules/rxjs/dist/esm/internal/scheduler/AsyncAction.js","node_modules/rxjs/dist/esm/internal/Scheduler.js","node_modules/rxjs/dist/esm/internal/scheduler/AsyncScheduler.js","node_modules/rxjs/dist/esm/internal/scheduler/async.js","node_modules/rxjs/dist/esm/internal/observable/throwError.js","node_modules/rxjs/dist/esm/internal/util/isObservable.js","node_modules/rxjs/dist/esm/internal/util/EmptyError.js","node_modules/rxjs/dist/esm/internal/util/isDate.js","node_modules/rxjs/dist/esm/internal/operators/timeout.js","node_modules/rxjs/dist/esm/internal/util/argsArgArrayOrObject.js","node_modules/rxjs/dist/esm/internal/util/createObject.js","node_modules/rxjs/dist/esm/internal/observable/combineLatest.js","node_modules/rxjs/dist/esm/internal/observable/defer.js","node_modules/rxjs/dist/esm/internal/observable/forkJoin.js","node_modules/rxjs/dist/esm/internal/observable/timer.js","node_modules/rxjs/dist/esm/internal/observable/interval.js","node_modules/rxjs/dist/esm/internal/operators/concatMap.js","node_modules/rxjs/dist/esm/internal/operators/defaultIfEmpty.js","node_modules/rxjs/dist/esm/internal/operators/distinctUntilChanged.js","node_modules/rxjs/dist/esm/internal/operators/throwIfEmpty.js","node_modules/rxjs/dist/esm/internal/operators/first.js","node_modules/rxjs/dist/esm/internal/operators/takeLast.js","node_modules/rxjs/dist/esm/internal/operators/share.js","node_modules/rxjs/dist/esm/internal/operators/shareReplay.js","node_modules/@angular/core/fesm2022/_effect-chunk.mjs","node_modules/@angular/core/fesm2022/_not_found-chunk.mjs","node_modules/@angular/core/fesm2022/_untracked-chunk.mjs","node_modules/@angular/core/fesm2022/_effect-chunk2.mjs","node_modules/@angular/core/fesm2022/_debug_node-chunk.mjs","node_modules/@angular/core/fesm2022/_resource-chunk.mjs","node_modules/@angular/core/fesm2022/core.mjs","node_modules/@angular/common/fesm2022/_platform_location-chunk.mjs","node_modules/@angular/common/fesm2022/_xhr-chunk.mjs"],sourcesContent:["export function isFunction(value) {\n return typeof value === 'function';\n}\n","export function createErrorClass(createImpl) {\n const _super = instance => {\n Error.call(instance);\n instance.stack = new Error().stack;\n };\n const ctorFunc = createImpl(_super);\n ctorFunc.prototype = Object.create(Error.prototype);\n ctorFunc.prototype.constructor = ctorFunc;\n return ctorFunc;\n}\n","import { createErrorClass } from './createErrorClass';\nexport const UnsubscriptionError = createErrorClass(_super => function UnsubscriptionErrorImpl(errors) {\n _super(this);\n this.message = errors ? `${errors.length} errors occurred during unsubscription:\n${errors.map((err, i) => `${i + 1}) ${err.toString()}`).join('\\n ')}` : '';\n this.name = 'UnsubscriptionError';\n this.errors = errors;\n});\n","export function arrRemove(arr, item) {\n if (arr) {\n const index = arr.indexOf(item);\n 0 <= index && arr.splice(index, 1);\n }\n}\n","import { isFunction } from './util/isFunction';\nimport { UnsubscriptionError } from './util/UnsubscriptionError';\nimport { arrRemove } from './util/arrRemove';\nexport class Subscription {\n constructor(initialTeardown) {\n this.initialTeardown = initialTeardown;\n this.closed = false;\n this._parentage = null;\n this._finalizers = null;\n }\n unsubscribe() {\n let errors;\n if (!this.closed) {\n this.closed = true;\n const {\n _parentage\n } = this;\n if (_parentage) {\n this._parentage = null;\n if (Array.isArray(_parentage)) {\n for (const parent of _parentage) {\n parent.remove(this);\n }\n } else {\n _parentage.remove(this);\n }\n }\n const {\n initialTeardown: initialFinalizer\n } = this;\n if (isFunction(initialFinalizer)) {\n try {\n initialFinalizer();\n } catch (e) {\n errors = e instanceof UnsubscriptionError ? e.errors : [e];\n }\n }\n const {\n _finalizers\n } = this;\n if (_finalizers) {\n this._finalizers = null;\n for (const finalizer of _finalizers) {\n try {\n execFinalizer(finalizer);\n } catch (err) {\n errors = errors !== null && errors !== void 0 ? errors : [];\n if (err instanceof UnsubscriptionError) {\n errors = [...errors, ...err.errors];\n } else {\n errors.push(err);\n }\n }\n }\n }\n if (errors) {\n throw new UnsubscriptionError(errors);\n }\n }\n }\n add(teardown) {\n var _a;\n if (teardown && teardown !== this) {\n if (this.closed) {\n execFinalizer(teardown);\n } else {\n if (teardown instanceof Subscription) {\n if (teardown.closed || teardown._hasParent(this)) {\n return;\n }\n teardown._addParent(this);\n }\n (this._finalizers = (_a = this._finalizers) !== null && _a !== void 0 ? _a : []).push(teardown);\n }\n }\n }\n _hasParent(parent) {\n const {\n _parentage\n } = this;\n return _parentage === parent || Array.isArray(_parentage) && _parentage.includes(parent);\n }\n _addParent(parent) {\n const {\n _parentage\n } = this;\n this._parentage = Array.isArray(_parentage) ? (_parentage.push(parent), _parentage) : _parentage ? [_parentage, parent] : parent;\n }\n _removeParent(parent) {\n const {\n _parentage\n } = this;\n if (_parentage === parent) {\n this._parentage = null;\n } else if (Array.isArray(_parentage)) {\n arrRemove(_parentage, parent);\n }\n }\n remove(teardown) {\n const {\n _finalizers\n } = this;\n _finalizers && arrRemove(_finalizers, teardown);\n if (teardown instanceof Subscription) {\n teardown._removeParent(this);\n }\n }\n}\nSubscription.EMPTY = (() => {\n const empty = new Subscription();\n empty.closed = true;\n return empty;\n})();\nexport const EMPTY_SUBSCRIPTION = Subscription.EMPTY;\nexport function isSubscription(value) {\n return value instanceof Subscription || value && 'closed' in value && isFunction(value.remove) && isFunction(value.add) && isFunction(value.unsubscribe);\n}\nfunction execFinalizer(finalizer) {\n if (isFunction(finalizer)) {\n finalizer();\n } else {\n finalizer.unsubscribe();\n }\n}\n","export const config = {\n onUnhandledError: null,\n onStoppedNotification: null,\n Promise: undefined,\n useDeprecatedSynchronousErrorHandling: false,\n useDeprecatedNextContext: false\n};\n","export const timeoutProvider = {\n setTimeout(handler, timeout, ...args) {\n const {\n delegate\n } = timeoutProvider;\n if (delegate === null || delegate === void 0 ? void 0 : delegate.setTimeout) {\n return delegate.setTimeout(handler, timeout, ...args);\n }\n return setTimeout(handler, timeout, ...args);\n },\n clearTimeout(handle) {\n const {\n delegate\n } = timeoutProvider;\n return ((delegate === null || delegate === void 0 ? void 0 : delegate.clearTimeout) || clearTimeout)(handle);\n },\n delegate: undefined\n};\n","import { config } from '../config';\nimport { timeoutProvider } from '../scheduler/timeoutProvider';\nexport function reportUnhandledError(err) {\n timeoutProvider.setTimeout(() => {\n const {\n onUnhandledError\n } = config;\n if (onUnhandledError) {\n onUnhandledError(err);\n } else {\n throw err;\n }\n });\n}\n","export function noop() {}\n","export const COMPLETE_NOTIFICATION = (() => createNotification('C', undefined, undefined))();\nexport function errorNotification(error) {\n return createNotification('E', undefined, error);\n}\nexport function nextNotification(value) {\n return createNotification('N', value, undefined);\n}\nexport function createNotification(kind, value, error) {\n return {\n kind,\n value,\n error\n };\n}\n","import { config } from '../config';\nlet context = null;\nexport function errorContext(cb) {\n if (config.useDeprecatedSynchronousErrorHandling) {\n const isRoot = !context;\n if (isRoot) {\n context = {\n errorThrown: false,\n error: null\n };\n }\n cb();\n if (isRoot) {\n const {\n errorThrown,\n error\n } = context;\n context = null;\n if (errorThrown) {\n throw error;\n }\n }\n } else {\n cb();\n }\n}\nexport function captureError(err) {\n if (config.useDeprecatedSynchronousErrorHandling && context) {\n context.errorThrown = true;\n context.error = err;\n }\n}\n","import { isFunction } from './util/isFunction';\nimport { isSubscription, Subscription } from './Subscription';\nimport { config } from './config';\nimport { reportUnhandledError } from './util/reportUnhandledError';\nimport { noop } from './util/noop';\nimport { nextNotification, errorNotification, COMPLETE_NOTIFICATION } from './NotificationFactories';\nimport { timeoutProvider } from './scheduler/timeoutProvider';\nimport { captureError } from './util/errorContext';\nexport class Subscriber extends Subscription {\n constructor(destination) {\n super();\n this.isStopped = false;\n if (destination) {\n this.destination = destination;\n if (isSubscription(destination)) {\n destination.add(this);\n }\n } else {\n this.destination = EMPTY_OBSERVER;\n }\n }\n static create(next, error, complete) {\n return new SafeSubscriber(next, error, complete);\n }\n next(value) {\n if (this.isStopped) {\n handleStoppedNotification(nextNotification(value), this);\n } else {\n this._next(value);\n }\n }\n error(err) {\n if (this.isStopped) {\n handleStoppedNotification(errorNotification(err), this);\n } else {\n this.isStopped = true;\n this._error(err);\n }\n }\n complete() {\n if (this.isStopped) {\n handleStoppedNotification(COMPLETE_NOTIFICATION, this);\n } else {\n this.isStopped = true;\n this._complete();\n }\n }\n unsubscribe() {\n if (!this.closed) {\n this.isStopped = true;\n super.unsubscribe();\n this.destination = null;\n }\n }\n _next(value) {\n this.destination.next(value);\n }\n _error(err) {\n try {\n this.destination.error(err);\n } finally {\n this.unsubscribe();\n }\n }\n _complete() {\n try {\n this.destination.complete();\n } finally {\n this.unsubscribe();\n }\n }\n}\nconst _bind = Function.prototype.bind;\nfunction bind(fn, thisArg) {\n return _bind.call(fn, thisArg);\n}\nclass ConsumerObserver {\n constructor(partialObserver) {\n this.partialObserver = partialObserver;\n }\n next(value) {\n const {\n partialObserver\n } = this;\n if (partialObserver.next) {\n try {\n partialObserver.next(value);\n } catch (error) {\n handleUnhandledError(error);\n }\n }\n }\n error(err) {\n const {\n partialObserver\n } = this;\n if (partialObserver.error) {\n try {\n partialObserver.error(err);\n } catch (error) {\n handleUnhandledError(error);\n }\n } else {\n handleUnhandledError(err);\n }\n }\n complete() {\n const {\n partialObserver\n } = this;\n if (partialObserver.complete) {\n try {\n partialObserver.complete();\n } catch (error) {\n handleUnhandledError(error);\n }\n }\n }\n}\nexport class SafeSubscriber extends Subscriber {\n constructor(observerOrNext, error, complete) {\n super();\n let partialObserver;\n if (isFunction(observerOrNext) || !observerOrNext) {\n partialObserver = {\n next: observerOrNext !== null && observerOrNext !== void 0 ? observerOrNext : undefined,\n error: error !== null && error !== void 0 ? error : undefined,\n complete: complete !== null && complete !== void 0 ? complete : undefined\n };\n } else {\n let context;\n if (this && config.useDeprecatedNextContext) {\n context = Object.create(observerOrNext);\n context.unsubscribe = () => this.unsubscribe();\n partialObserver = {\n next: observerOrNext.next && bind(observerOrNext.next, context),\n error: observerOrNext.error && bind(observerOrNext.error, context),\n complete: observerOrNext.complete && bind(observerOrNext.complete, context)\n };\n } else {\n partialObserver = observerOrNext;\n }\n }\n this.destination = new ConsumerObserver(partialObserver);\n }\n}\nfunction handleUnhandledError(error) {\n if (config.useDeprecatedSynchronousErrorHandling) {\n captureError(error);\n } else {\n reportUnhandledError(error);\n }\n}\nfunction defaultErrorHandler(err) {\n throw err;\n}\nfunction handleStoppedNotification(notification, subscriber) {\n const {\n onStoppedNotification\n } = config;\n onStoppedNotification && timeoutProvider.setTimeout(() => onStoppedNotification(notification, subscriber));\n}\nexport const EMPTY_OBSERVER = {\n closed: true,\n next: noop,\n error: defaultErrorHandler,\n complete: noop\n};\n","export const observable = (() => typeof Symbol === 'function' && Symbol.observable || '@@observable')();\n","export function identity(x) {\n return x;\n}\n","import { identity } from './identity';\nexport function pipe(...fns) {\n return pipeFromArray(fns);\n}\nexport function pipeFromArray(fns) {\n if (fns.length === 0) {\n return identity;\n }\n if (fns.length === 1) {\n return fns[0];\n }\n return function piped(input) {\n return fns.reduce((prev, fn) => fn(prev), input);\n };\n}\n","import { SafeSubscriber, Subscriber } from './Subscriber';\nimport { isSubscription } from './Subscription';\nimport { observable as Symbol_observable } from './symbol/observable';\nimport { pipeFromArray } from './util/pipe';\nimport { config } from './config';\nimport { isFunction } from './util/isFunction';\nimport { errorContext } from './util/errorContext';\nexport let Observable = /*#__PURE__*/(() => {\n class Observable {\n constructor(subscribe) {\n if (subscribe) {\n this._subscribe = subscribe;\n }\n }\n lift(operator) {\n const observable = new Observable();\n observable.source = this;\n observable.operator = operator;\n return observable;\n }\n subscribe(observerOrNext, error, complete) {\n const subscriber = isSubscriber(observerOrNext) ? observerOrNext : new SafeSubscriber(observerOrNext, error, complete);\n errorContext(() => {\n const {\n operator,\n source\n } = this;\n subscriber.add(operator ? operator.call(subscriber, source) : source ? this._subscribe(subscriber) : this._trySubscribe(subscriber));\n });\n return subscriber;\n }\n _trySubscribe(sink) {\n try {\n return this._subscribe(sink);\n } catch (err) {\n sink.error(err);\n }\n }\n forEach(next, promiseCtor) {\n promiseCtor = getPromiseCtor(promiseCtor);\n return new promiseCtor((resolve, reject) => {\n const subscriber = new SafeSubscriber({\n next: value => {\n try {\n next(value);\n } catch (err) {\n reject(err);\n subscriber.unsubscribe();\n }\n },\n error: reject,\n complete: resolve\n });\n this.subscribe(subscriber);\n });\n }\n _subscribe(subscriber) {\n var _a;\n return (_a = this.source) === null || _a === void 0 ? void 0 : _a.subscribe(subscriber);\n }\n [Symbol_observable]() {\n return this;\n }\n pipe(...operations) {\n return pipeFromArray(operations)(this);\n }\n toPromise(promiseCtor) {\n promiseCtor = getPromiseCtor(promiseCtor);\n return new promiseCtor((resolve, reject) => {\n let value;\n this.subscribe(x => value = x, err => reject(err), () => resolve(value));\n });\n }\n }\n Observable.create = subscribe => {\n return new Observable(subscribe);\n };\n return Observable;\n})();\nfunction getPromiseCtor(promiseCtor) {\n var _a;\n return (_a = promiseCtor !== null && promiseCtor !== void 0 ? promiseCtor : config.Promise) !== null && _a !== void 0 ? _a : Promise;\n}\nfunction isObserver(value) {\n return value && isFunction(value.next) && isFunction(value.error) && isFunction(value.complete);\n}\nfunction isSubscriber(value) {\n return value && value instanceof Subscriber || isObserver(value) && isSubscription(value);\n}\n","import { createErrorClass } from './createErrorClass';\nexport const ObjectUnsubscribedError = createErrorClass(_super => function ObjectUnsubscribedErrorImpl() {\n _super(this);\n this.name = 'ObjectUnsubscribedError';\n this.message = 'object unsubscribed';\n});\n","import { Observable } from './Observable';\nimport { Subscription, EMPTY_SUBSCRIPTION } from './Subscription';\nimport { ObjectUnsubscribedError } from './util/ObjectUnsubscribedError';\nimport { arrRemove } from './util/arrRemove';\nimport { errorContext } from './util/errorContext';\nexport let Subject = /*#__PURE__*/(() => {\n class Subject extends Observable {\n constructor() {\n super();\n this.closed = false;\n this.currentObservers = null;\n this.observers = [];\n this.isStopped = false;\n this.hasError = false;\n this.thrownError = null;\n }\n lift(operator) {\n const subject = new AnonymousSubject(this, this);\n subject.operator = operator;\n return subject;\n }\n _throwIfClosed() {\n if (this.closed) {\n throw new ObjectUnsubscribedError();\n }\n }\n next(value) {\n errorContext(() => {\n this._throwIfClosed();\n if (!this.isStopped) {\n if (!this.currentObservers) {\n this.currentObservers = Array.from(this.observers);\n }\n for (const observer of this.currentObservers) {\n observer.next(value);\n }\n }\n });\n }\n error(err) {\n errorContext(() => {\n this._throwIfClosed();\n if (!this.isStopped) {\n this.hasError = this.isStopped = true;\n this.thrownError = err;\n const {\n observers\n } = this;\n while (observers.length) {\n observers.shift().error(err);\n }\n }\n });\n }\n complete() {\n errorContext(() => {\n this._throwIfClosed();\n if (!this.isStopped) {\n this.isStopped = true;\n const {\n observers\n } = this;\n while (observers.length) {\n observers.shift().complete();\n }\n }\n });\n }\n unsubscribe() {\n this.isStopped = this.closed = true;\n this.observers = this.currentObservers = null;\n }\n get observed() {\n var _a;\n return ((_a = this.observers) === null || _a === void 0 ? void 0 : _a.length) > 0;\n }\n _trySubscribe(subscriber) {\n this._throwIfClosed();\n return super._trySubscribe(subscriber);\n }\n _subscribe(subscriber) {\n this._throwIfClosed();\n this._checkFinalizedStatuses(subscriber);\n return this._innerSubscribe(subscriber);\n }\n _innerSubscribe(subscriber) {\n const {\n hasError,\n isStopped,\n observers\n } = this;\n if (hasError || isStopped) {\n return EMPTY_SUBSCRIPTION;\n }\n this.currentObservers = null;\n observers.push(subscriber);\n return new Subscription(() => {\n this.currentObservers = null;\n arrRemove(observers, subscriber);\n });\n }\n _checkFinalizedStatuses(subscriber) {\n const {\n hasError,\n thrownError,\n isStopped\n } = this;\n if (hasError) {\n subscriber.error(thrownError);\n } else if (isStopped) {\n subscriber.complete();\n }\n }\n asObservable() {\n const observable = new Observable();\n observable.source = this;\n return observable;\n }\n }\n Subject.create = (destination, source) => {\n return new AnonymousSubject(destination, source);\n };\n return Subject;\n})();\nexport class AnonymousSubject extends Subject {\n constructor(destination, source) {\n super();\n this.destination = destination;\n this.source = source;\n }\n next(value) {\n var _a, _b;\n (_b = (_a = this.destination) === null || _a === void 0 ? void 0 : _a.next) === null || _b === void 0 ? void 0 : _b.call(_a, value);\n }\n error(err) {\n var _a, _b;\n (_b = (_a = this.destination) === null || _a === void 0 ? void 0 : _a.error) === null || _b === void 0 ? void 0 : _b.call(_a, err);\n }\n complete() {\n var _a, _b;\n (_b = (_a = this.destination) === null || _a === void 0 ? void 0 : _a.complete) === null || _b === void 0 ? void 0 : _b.call(_a);\n }\n _subscribe(subscriber) {\n var _a, _b;\n return (_b = (_a = this.source) === null || _a === void 0 ? void 0 : _a.subscribe(subscriber)) !== null && _b !== void 0 ? _b : EMPTY_SUBSCRIPTION;\n }\n}\n","import { Subject } from './Subject';\nexport class BehaviorSubject extends Subject {\n constructor(_value) {\n super();\n this._value = _value;\n }\n get value() {\n return this.getValue();\n }\n _subscribe(subscriber) {\n const subscription = super._subscribe(subscriber);\n !subscription.closed && subscriber.next(this._value);\n return subscription;\n }\n getValue() {\n const {\n hasError,\n thrownError,\n _value\n } = this;\n if (hasError) {\n throw thrownError;\n }\n this._throwIfClosed();\n return _value;\n }\n next(value) {\n super.next(this._value = value);\n }\n}\n","import { isFunction } from './isFunction';\nexport function isScheduler(value) {\n return value && isFunction(value.schedule);\n}\n","import { isFunction } from './isFunction';\nimport { isScheduler } from './isScheduler';\nfunction last(arr) {\n return arr[arr.length - 1];\n}\nexport function popResultSelector(args) {\n return isFunction(last(args)) ? args.pop() : undefined;\n}\nexport function popScheduler(args) {\n return isScheduler(last(args)) ? args.pop() : undefined;\n}\nexport function popNumber(args, defaultValue) {\n return typeof last(args) === 'number' ? args.pop() : defaultValue;\n}\n","/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\n\nvar extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf || {\n __proto__: []\n } instanceof Array && function (d, b) {\n d.__proto__ = b;\n } || function (d, b) {\n for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p];\n };\n return extendStatics(d, b);\n};\nexport function __extends(d, b) {\n if (typeof b !== \"function\" && b !== null) throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() {\n this.constructor = d;\n }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\nexport var __assign = function () {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nexport function __rest(s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n}\nexport function __decorate(decorators, target, key, desc) {\n var c = arguments.length,\n r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,\n d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\nexport function __param(paramIndex, decorator) {\n return function (target, key) {\n decorator(target, key, paramIndex);\n };\n}\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n function accept(f) {\n if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\");\n return f;\n }\n var kind = contextIn.kind,\n key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n var _,\n done = false;\n for (var i = decorators.length - 1; i >= 0; i--) {\n var context = {};\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n context.addInitializer = function (f) {\n if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\");\n extraInitializers.push(accept(f || null));\n };\n var result = (0, decorators[i])(kind === \"accessor\" ? {\n get: descriptor.get,\n set: descriptor.set\n } : descriptor[key], context);\n if (kind === \"accessor\") {\n if (result === void 0) continue;\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n if (_ = accept(result.get)) descriptor.get = _;\n if (_ = accept(result.set)) descriptor.set = _;\n if (_ = accept(result.init)) initializers.unshift(_);\n } else if (_ = accept(result)) {\n if (kind === \"field\") initializers.unshift(_);else descriptor[key] = _;\n }\n }\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\n done = true;\n}\n;\nexport function __runInitializers(thisArg, initializers, value) {\n var useValue = arguments.length > 2;\n for (var i = 0; i < initializers.length; i++) {\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n }\n return useValue ? value : void 0;\n}\n;\nexport function __propKey(x) {\n return typeof x === \"symbol\" ? x : \"\".concat(x);\n}\n;\nexport function __setFunctionName(f, name, prefix) {\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n return Object.defineProperty(f, \"name\", {\n configurable: true,\n value: prefix ? \"\".concat(prefix, \" \", name) : name\n });\n}\n;\nexport function __metadata(metadataKey, metadataValue) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\nexport function __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) {\n return value instanceof P ? value : new P(function (resolve) {\n resolve(value);\n });\n }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) {\n try {\n step(generator.next(value));\n } catch (e) {\n reject(e);\n }\n }\n function rejected(value) {\n try {\n step(generator[\"throw\"](value));\n } catch (e) {\n reject(e);\n }\n }\n function step(result) {\n result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);\n }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\nexport function __generator(thisArg, body) {\n var _ = {\n label: 0,\n sent: function () {\n if (t[0] & 1) throw t[1];\n return t[1];\n },\n trys: [],\n ops: []\n },\n f,\n y,\n t,\n g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function () {\n return this;\n }), g;\n function verb(n) {\n return function (v) {\n return step([n, v]);\n };\n }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0:\n case 1:\n t = op;\n break;\n case 4:\n _.label++;\n return {\n value: op[1],\n done: false\n };\n case 5:\n _.label++;\n y = op[1];\n op = [0];\n continue;\n case 7:\n op = _.ops.pop();\n _.trys.pop();\n continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {\n _ = 0;\n continue;\n }\n if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {\n _.label = op[1];\n break;\n }\n if (op[0] === 6 && _.label < t[1]) {\n _.label = t[1];\n t = op;\n break;\n }\n if (t && _.label < t[2]) {\n _.label = t[2];\n _.ops.push(op);\n break;\n }\n if (t[2]) _.ops.pop();\n _.trys.pop();\n continue;\n }\n op = body.call(thisArg, _);\n } catch (e) {\n op = [6, e];\n y = 0;\n } finally {\n f = t = 0;\n }\n if (op[0] & 5) throw op[1];\n return {\n value: op[0] ? op[1] : void 0,\n done: true\n };\n }\n}\nexport var __createBinding = Object.create ? function (o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = {\n enumerable: true,\n get: function () {\n return m[k];\n }\n };\n }\n Object.defineProperty(o, k2, desc);\n} : function (o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n};\nexport function __exportStar(m, o) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\nexport function __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator,\n m = s && o[s],\n i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return {\n value: o && o[i++],\n done: !o\n };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\nexport function __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o),\n r,\n ar = [],\n e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n } catch (error) {\n e = {\n error: error\n };\n } finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n } finally {\n if (e) throw e.error;\n }\n }\n return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i]));\n return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++) for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) r[k] = a[j];\n return r;\n}\nexport function __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n}\nexport function __await(v) {\n return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []),\n i,\n q = [];\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () {\n return this;\n }, i;\n function awaitReturn(f) {\n return function (v) {\n return Promise.resolve(v).then(f, reject);\n };\n }\n function verb(n, f) {\n if (g[n]) {\n i[n] = function (v) {\n return new Promise(function (a, b) {\n q.push([n, v, a, b]) > 1 || resume(n, v);\n });\n };\n if (f) i[n] = f(i[n]);\n }\n }\n function resume(n, v) {\n try {\n step(g[n](v));\n } catch (e) {\n settle(q[0][3], e);\n }\n }\n function step(r) {\n r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r);\n }\n function fulfill(value) {\n resume(\"next\", value);\n }\n function reject(value) {\n resume(\"throw\", value);\n }\n function settle(f, v) {\n if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]);\n }\n}\nexport function __asyncDelegator(o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) {\n throw e;\n }), verb(\"return\"), i[Symbol.iterator] = function () {\n return this;\n }, i;\n function verb(n, f) {\n i[n] = o[n] ? function (v) {\n return (p = !p) ? {\n value: __await(o[n](v)),\n done: false\n } : f ? f(v) : v;\n } : f;\n }\n}\nexport function __asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator],\n i;\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () {\n return this;\n }, i);\n function verb(n) {\n i[n] = o[n] && function (v) {\n return new Promise(function (resolve, reject) {\n v = o[n](v), settle(resolve, reject, v.done, v.value);\n });\n };\n }\n function settle(resolve, reject, d, v) {\n Promise.resolve(v).then(function (v) {\n resolve({\n value: v,\n done: d\n });\n }, reject);\n }\n}\nexport function __makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) {\n Object.defineProperty(cooked, \"raw\", {\n value: raw\n });\n } else {\n cooked.raw = raw;\n }\n return cooked;\n}\n;\nvar __setModuleDefault = Object.create ? function (o, v) {\n Object.defineProperty(o, \"default\", {\n enumerable: true,\n value: v\n });\n} : function (o, v) {\n o[\"default\"] = v;\n};\nvar ownKeys = function (o) {\n ownKeys = Object.getOwnPropertyNames || function (o) {\n var ar = [];\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n return ar;\n };\n return ownKeys(o);\n};\nexport function __importStar(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n __setModuleDefault(result, mod);\n return result;\n}\nexport function __importDefault(mod) {\n return mod && mod.__esModule ? mod : {\n default: mod\n };\n}\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value), value;\n}\nexport function __classPrivateFieldIn(state, receiver) {\n if (receiver === null || typeof receiver !== \"object\" && typeof receiver !== \"function\") throw new TypeError(\"Cannot use 'in' operator on non-object\");\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\nexport function __addDisposableResource(env, value, async) {\n if (value !== null && value !== void 0) {\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n var dispose, inner;\n if (async) {\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n dispose = value[Symbol.asyncDispose];\n }\n if (dispose === void 0) {\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n dispose = value[Symbol.dispose];\n if (async) inner = dispose;\n }\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n if (inner) dispose = function () {\n try {\n inner.call(this);\n } catch (e) {\n return Promise.reject(e);\n }\n };\n env.stack.push({\n value: value,\n dispose: dispose,\n async: async\n });\n } else if (async) {\n env.stack.push({\n async: true\n });\n }\n return value;\n}\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n var e = new Error(message);\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\nexport function __disposeResources(env) {\n function fail(e) {\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n env.hasError = true;\n }\n var r,\n s = 0;\n function next() {\n while (r = env.stack.pop()) {\n try {\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\n if (r.dispose) {\n var result = r.dispose.call(r.value);\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function (e) {\n fail(e);\n return next();\n });\n } else s |= 1;\n } catch (e) {\n fail(e);\n }\n }\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\n if (env.hasError) throw env.error;\n }\n return next();\n}\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : d + ext + \".\" + cm.toLowerCase() + \"js\";\n });\n }\n return path;\n}\nexport default {\n __extends,\n __assign,\n __rest,\n __decorate,\n __param,\n __esDecorate,\n __runInitializers,\n __propKey,\n __setFunctionName,\n __metadata,\n __awaiter,\n __generator,\n __createBinding,\n __exportStar,\n __values,\n __read,\n __spread,\n __spreadArrays,\n __spreadArray,\n __await,\n __asyncGenerator,\n __asyncDelegator,\n __asyncValues,\n __makeTemplateObject,\n __importStar,\n __importDefault,\n __classPrivateFieldGet,\n __classPrivateFieldSet,\n __classPrivateFieldIn,\n __addDisposableResource,\n __disposeResources,\n __rewriteRelativeImportExtension\n};","export const isArrayLike = x => x && typeof x.length === 'number' && typeof x !== 'function';\n","import { isFunction } from \"./isFunction\";\nexport function isPromise(value) {\n return isFunction(value === null || value === void 0 ? void 0 : value.then);\n}\n","import { observable as Symbol_observable } from '../symbol/observable';\nimport { isFunction } from './isFunction';\nexport function isInteropObservable(input) {\n return isFunction(input[Symbol_observable]);\n}\n","import { isFunction } from './isFunction';\nexport function isAsyncIterable(obj) {\n return Symbol.asyncIterator && isFunction(obj === null || obj === void 0 ? void 0 : obj[Symbol.asyncIterator]);\n}\n","export function createInvalidObservableTypeError(input) {\n return new TypeError(`You provided ${input !== null && typeof input === 'object' ? 'an invalid object' : `'${input}'`} where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.`);\n}\n","export function getSymbolIterator() {\n if (typeof Symbol !== 'function' || !Symbol.iterator) {\n return '@@iterator';\n }\n return Symbol.iterator;\n}\nexport const iterator = getSymbolIterator();\n","import { iterator as Symbol_iterator } from '../symbol/iterator';\nimport { isFunction } from './isFunction';\nexport function isIterable(input) {\n return isFunction(input === null || input === void 0 ? void 0 : input[Symbol_iterator]);\n}\n","import { __asyncGenerator, __await } from \"tslib\";\nimport { isFunction } from './isFunction';\nexport function readableStreamLikeToAsyncGenerator(readableStream) {\n return __asyncGenerator(this, arguments, function* readableStreamLikeToAsyncGenerator_1() {\n const reader = readableStream.getReader();\n try {\n while (true) {\n const {\n value,\n done\n } = yield __await(reader.read());\n if (done) {\n return yield __await(void 0);\n }\n yield yield __await(value);\n }\n } finally {\n reader.releaseLock();\n }\n });\n}\nexport function isReadableStreamLike(obj) {\n return isFunction(obj === null || obj === void 0 ? void 0 : obj.getReader);\n}\n","import { __asyncValues, __awaiter } from \"tslib\";\nimport { isArrayLike } from '../util/isArrayLike';\nimport { isPromise } from '../util/isPromise';\nimport { Observable } from '../Observable';\nimport { isInteropObservable } from '../util/isInteropObservable';\nimport { isAsyncIterable } from '../util/isAsyncIterable';\nimport { createInvalidObservableTypeError } from '../util/throwUnobservableError';\nimport { isIterable } from '../util/isIterable';\nimport { isReadableStreamLike, readableStreamLikeToAsyncGenerator } from '../util/isReadableStreamLike';\nimport { isFunction } from '../util/isFunction';\nimport { reportUnhandledError } from '../util/reportUnhandledError';\nimport { observable as Symbol_observable } from '../symbol/observable';\nexport function innerFrom(input) {\n if (input instanceof Observable) {\n return input;\n }\n if (input != null) {\n if (isInteropObservable(input)) {\n return fromInteropObservable(input);\n }\n if (isArrayLike(input)) {\n return fromArrayLike(input);\n }\n if (isPromise(input)) {\n return fromPromise(input);\n }\n if (isAsyncIterable(input)) {\n return fromAsyncIterable(input);\n }\n if (isIterable(input)) {\n return fromIterable(input);\n }\n if (isReadableStreamLike(input)) {\n return fromReadableStreamLike(input);\n }\n }\n throw createInvalidObservableTypeError(input);\n}\nexport function fromInteropObservable(obj) {\n return new Observable(subscriber => {\n const obs = obj[Symbol_observable]();\n if (isFunction(obs.subscribe)) {\n return obs.subscribe(subscriber);\n }\n throw new TypeError('Provided object does not correctly implement Symbol.observable');\n });\n}\nexport function fromArrayLike(array) {\n return new Observable(subscriber => {\n for (let i = 0; i < array.length && !subscriber.closed; i++) {\n subscriber.next(array[i]);\n }\n subscriber.complete();\n });\n}\nexport function fromPromise(promise) {\n return new Observable(subscriber => {\n promise.then(value => {\n if (!subscriber.closed) {\n subscriber.next(value);\n subscriber.complete();\n }\n }, err => subscriber.error(err)).then(null, reportUnhandledError);\n });\n}\nexport function fromIterable(iterable) {\n return new Observable(subscriber => {\n for (const value of iterable) {\n subscriber.next(value);\n if (subscriber.closed) {\n return;\n }\n }\n subscriber.complete();\n });\n}\nexport function fromAsyncIterable(asyncIterable) {\n return new Observable(subscriber => {\n process(asyncIterable, subscriber).catch(err => subscriber.error(err));\n });\n}\nexport function fromReadableStreamLike(readableStream) {\n return fromAsyncIterable(readableStreamLikeToAsyncGenerator(readableStream));\n}\nfunction process(asyncIterable, subscriber) {\n var asyncIterable_1, asyncIterable_1_1;\n var e_1, _a;\n return __awaiter(this, void 0, void 0, function* () {\n try {\n for (asyncIterable_1 = __asyncValues(asyncIterable); asyncIterable_1_1 = yield asyncIterable_1.next(), !asyncIterable_1_1.done;) {\n const value = asyncIterable_1_1.value;\n subscriber.next(value);\n if (subscriber.closed) {\n return;\n }\n }\n } catch (e_1_1) {\n e_1 = {\n error: e_1_1\n };\n } finally {\n try {\n if (asyncIterable_1_1 && !asyncIterable_1_1.done && (_a = asyncIterable_1.return)) yield _a.call(asyncIterable_1);\n } finally {\n if (e_1) throw e_1.error;\n }\n }\n subscriber.complete();\n });\n}\n","export function executeSchedule(parentSubscription, scheduler, work, delay = 0, repeat = false) {\n const scheduleSubscription = scheduler.schedule(function () {\n work();\n if (repeat) {\n parentSubscription.add(this.schedule(null, delay));\n } else {\n this.unsubscribe();\n }\n }, delay);\n parentSubscription.add(scheduleSubscription);\n if (!repeat) {\n return scheduleSubscription;\n }\n}\n","import { isFunction } from './isFunction';\nexport function hasLift(source) {\n return isFunction(source === null || source === void 0 ? void 0 : source.lift);\n}\nexport function operate(init) {\n return source => {\n if (hasLift(source)) {\n return source.lift(function (liftedSource) {\n try {\n return init(liftedSource, this);\n } catch (err) {\n this.error(err);\n }\n });\n }\n throw new TypeError('Unable to lift unknown Observable type');\n };\n}\n","import { Subscriber } from '../Subscriber';\nexport function createOperatorSubscriber(destination, onNext, onComplete, onError, onFinalize) {\n return new OperatorSubscriber(destination, onNext, onComplete, onError, onFinalize);\n}\nexport class OperatorSubscriber extends Subscriber {\n constructor(destination, onNext, onComplete, onError, onFinalize, shouldUnsubscribe) {\n super(destination);\n this.onFinalize = onFinalize;\n this.shouldUnsubscribe = shouldUnsubscribe;\n this._next = onNext ? function (value) {\n try {\n onNext(value);\n } catch (err) {\n destination.error(err);\n }\n } : super._next;\n this._error = onError ? function (err) {\n try {\n onError(err);\n } catch (err) {\n destination.error(err);\n } finally {\n this.unsubscribe();\n }\n } : super._error;\n this._complete = onComplete ? function () {\n try {\n onComplete();\n } catch (err) {\n destination.error(err);\n } finally {\n this.unsubscribe();\n }\n } : super._complete;\n }\n unsubscribe() {\n var _a;\n if (!this.shouldUnsubscribe || this.shouldUnsubscribe()) {\n const {\n closed\n } = this;\n super.unsubscribe();\n !closed && ((_a = this.onFinalize) === null || _a === void 0 ? void 0 : _a.call(this));\n }\n }\n}\n","import { executeSchedule } from '../util/executeSchedule';\nimport { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function observeOn(scheduler, delay = 0) {\n return operate((source, subscriber) => {\n source.subscribe(createOperatorSubscriber(subscriber, value => executeSchedule(subscriber, scheduler, () => subscriber.next(value), delay), () => executeSchedule(subscriber, scheduler, () => subscriber.complete(), delay), err => executeSchedule(subscriber, scheduler, () => subscriber.error(err), delay)));\n });\n}\n","import { operate } from '../util/lift';\nexport function subscribeOn(scheduler, delay = 0) {\n return operate((source, subscriber) => {\n subscriber.add(scheduler.schedule(() => source.subscribe(subscriber), delay));\n });\n}\n","import { innerFrom } from '../observable/innerFrom';\nimport { observeOn } from '../operators/observeOn';\nimport { subscribeOn } from '../operators/subscribeOn';\nexport function scheduleObservable(input, scheduler) {\n return innerFrom(input).pipe(subscribeOn(scheduler), observeOn(scheduler));\n}\n","import { innerFrom } from '../observable/innerFrom';\nimport { observeOn } from '../operators/observeOn';\nimport { subscribeOn } from '../operators/subscribeOn';\nexport function schedulePromise(input, scheduler) {\n return innerFrom(input).pipe(subscribeOn(scheduler), observeOn(scheduler));\n}\n","import { Observable } from '../Observable';\nexport function scheduleArray(input, scheduler) {\n return new Observable(subscriber => {\n let i = 0;\n return scheduler.schedule(function () {\n if (i === input.length) {\n subscriber.complete();\n } else {\n subscriber.next(input[i++]);\n if (!subscriber.closed) {\n this.schedule();\n }\n }\n });\n });\n}\n","import { Observable } from '../Observable';\nimport { iterator as Symbol_iterator } from '../symbol/iterator';\nimport { isFunction } from '../util/isFunction';\nimport { executeSchedule } from '../util/executeSchedule';\nexport function scheduleIterable(input, scheduler) {\n return new Observable(subscriber => {\n let iterator;\n executeSchedule(subscriber, scheduler, () => {\n iterator = input[Symbol_iterator]();\n executeSchedule(subscriber, scheduler, () => {\n let value;\n let done;\n try {\n ({\n value,\n done\n } = iterator.next());\n } catch (err) {\n subscriber.error(err);\n return;\n }\n if (done) {\n subscriber.complete();\n } else {\n subscriber.next(value);\n }\n }, 0, true);\n });\n return () => isFunction(iterator === null || iterator === void 0 ? void 0 : iterator.return) && iterator.return();\n });\n}\n","import { Observable } from '../Observable';\nimport { executeSchedule } from '../util/executeSchedule';\nexport function scheduleAsyncIterable(input, scheduler) {\n if (!input) {\n throw new Error('Iterable cannot be null');\n }\n return new Observable(subscriber => {\n executeSchedule(subscriber, scheduler, () => {\n const iterator = input[Symbol.asyncIterator]();\n executeSchedule(subscriber, scheduler, () => {\n iterator.next().then(result => {\n if (result.done) {\n subscriber.complete();\n } else {\n subscriber.next(result.value);\n }\n });\n }, 0, true);\n });\n });\n}\n","import { scheduleAsyncIterable } from './scheduleAsyncIterable';\nimport { readableStreamLikeToAsyncGenerator } from '../util/isReadableStreamLike';\nexport function scheduleReadableStreamLike(input, scheduler) {\n return scheduleAsyncIterable(readableStreamLikeToAsyncGenerator(input), scheduler);\n}\n","import { scheduleObservable } from './scheduleObservable';\nimport { schedulePromise } from './schedulePromise';\nimport { scheduleArray } from './scheduleArray';\nimport { scheduleIterable } from './scheduleIterable';\nimport { scheduleAsyncIterable } from './scheduleAsyncIterable';\nimport { isInteropObservable } from '../util/isInteropObservable';\nimport { isPromise } from '../util/isPromise';\nimport { isArrayLike } from '../util/isArrayLike';\nimport { isIterable } from '../util/isIterable';\nimport { isAsyncIterable } from '../util/isAsyncIterable';\nimport { createInvalidObservableTypeError } from '../util/throwUnobservableError';\nimport { isReadableStreamLike } from '../util/isReadableStreamLike';\nimport { scheduleReadableStreamLike } from './scheduleReadableStreamLike';\nexport function scheduled(input, scheduler) {\n if (input != null) {\n if (isInteropObservable(input)) {\n return scheduleObservable(input, scheduler);\n }\n if (isArrayLike(input)) {\n return scheduleArray(input, scheduler);\n }\n if (isPromise(input)) {\n return schedulePromise(input, scheduler);\n }\n if (isAsyncIterable(input)) {\n return scheduleAsyncIterable(input, scheduler);\n }\n if (isIterable(input)) {\n return scheduleIterable(input, scheduler);\n }\n if (isReadableStreamLike(input)) {\n return scheduleReadableStreamLike(input, scheduler);\n }\n }\n throw createInvalidObservableTypeError(input);\n}\n","import { scheduled } from '../scheduled/scheduled';\nimport { innerFrom } from './innerFrom';\nexport function from(input, scheduler) {\n return scheduler ? scheduled(input, scheduler) : innerFrom(input);\n}\n","import { popScheduler } from '../util/args';\nimport { from } from './from';\nexport function of(...args) {\n const scheduler = popScheduler(args);\n return from(args, scheduler);\n}\n","import { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function map(project, thisArg) {\n return operate((source, subscriber) => {\n let index = 0;\n source.subscribe(createOperatorSubscriber(subscriber, value => {\n subscriber.next(project.call(thisArg, value, index++));\n }));\n });\n}\n","import { innerFrom } from '../observable/innerFrom';\nimport { executeSchedule } from '../util/executeSchedule';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function mergeInternals(source, subscriber, project, concurrent, onBeforeNext, expand, innerSubScheduler, additionalFinalizer) {\n const buffer = [];\n let active = 0;\n let index = 0;\n let isComplete = false;\n const checkComplete = () => {\n if (isComplete && !buffer.length && !active) {\n subscriber.complete();\n }\n };\n const outerNext = value => active < concurrent ? doInnerSub(value) : buffer.push(value);\n const doInnerSub = value => {\n expand && subscriber.next(value);\n active++;\n let innerComplete = false;\n innerFrom(project(value, index++)).subscribe(createOperatorSubscriber(subscriber, innerValue => {\n onBeforeNext === null || onBeforeNext === void 0 ? void 0 : onBeforeNext(innerValue);\n if (expand) {\n outerNext(innerValue);\n } else {\n subscriber.next(innerValue);\n }\n }, () => {\n innerComplete = true;\n }, undefined, () => {\n if (innerComplete) {\n try {\n active--;\n while (buffer.length && active < concurrent) {\n const bufferedValue = buffer.shift();\n if (innerSubScheduler) {\n executeSchedule(subscriber, innerSubScheduler, () => doInnerSub(bufferedValue));\n } else {\n doInnerSub(bufferedValue);\n }\n }\n checkComplete();\n } catch (err) {\n subscriber.error(err);\n }\n }\n }));\n };\n source.subscribe(createOperatorSubscriber(subscriber, outerNext, () => {\n isComplete = true;\n checkComplete();\n }));\n return () => {\n additionalFinalizer === null || additionalFinalizer === void 0 ? void 0 : additionalFinalizer();\n };\n}\n","import { map } from './map';\nimport { innerFrom } from '../observable/innerFrom';\nimport { operate } from '../util/lift';\nimport { mergeInternals } from './mergeInternals';\nimport { isFunction } from '../util/isFunction';\nexport function mergeMap(project, resultSelector, concurrent = Infinity) {\n if (isFunction(resultSelector)) {\n return mergeMap((a, i) => map((b, ii) => resultSelector(a, b, i, ii))(innerFrom(project(a, i))), concurrent);\n } else if (typeof resultSelector === 'number') {\n concurrent = resultSelector;\n }\n return operate((source, subscriber) => mergeInternals(source, subscriber, project, concurrent));\n}\n","import { map } from \"../operators/map\";\nconst {\n isArray\n} = Array;\nfunction callOrApply(fn, args) {\n return isArray(args) ? fn(...args) : fn(args);\n}\nexport function mapOneOrManyArgs(fn) {\n return map(args => callOrApply(fn, args));\n}\n","import { innerFrom } from '../observable/innerFrom';\nimport { Observable } from '../Observable';\nimport { mergeMap } from '../operators/mergeMap';\nimport { isArrayLike } from '../util/isArrayLike';\nimport { isFunction } from '../util/isFunction';\nimport { mapOneOrManyArgs } from '../util/mapOneOrManyArgs';\nconst nodeEventEmitterMethods = ['addListener', 'removeListener'];\nconst eventTargetMethods = ['addEventListener', 'removeEventListener'];\nconst jqueryMethods = ['on', 'off'];\nexport function fromEvent(target, eventName, options, resultSelector) {\n if (isFunction(options)) {\n resultSelector = options;\n options = undefined;\n }\n if (resultSelector) {\n return fromEvent(target, eventName, options).pipe(mapOneOrManyArgs(resultSelector));\n }\n const [add, remove] = isEventTarget(target) ? eventTargetMethods.map(methodName => handler => target[methodName](eventName, handler, options)) : isNodeStyleEventEmitter(target) ? nodeEventEmitterMethods.map(toCommonHandlerRegistry(target, eventName)) : isJQueryStyleEventEmitter(target) ? jqueryMethods.map(toCommonHandlerRegistry(target, eventName)) : [];\n if (!add) {\n if (isArrayLike(target)) {\n return mergeMap(subTarget => fromEvent(subTarget, eventName, options))(innerFrom(target));\n }\n }\n if (!add) {\n throw new TypeError('Invalid event target');\n }\n return new Observable(subscriber => {\n const handler = (...args) => subscriber.next(1 < args.length ? args : args[0]);\n add(handler);\n return () => remove(handler);\n });\n}\nfunction toCommonHandlerRegistry(target, eventName) {\n return methodName => handler => target[methodName](eventName, handler);\n}\nfunction isNodeStyleEventEmitter(target) {\n return isFunction(target.addListener) && isFunction(target.removeListener);\n}\nfunction isJQueryStyleEventEmitter(target) {\n return isFunction(target.on) && isFunction(target.off);\n}\nfunction isEventTarget(target) {\n return isFunction(target.addEventListener) && isFunction(target.removeEventListener);\n}\n","import { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function filter(predicate, thisArg) {\n return operate((source, subscriber) => {\n let index = 0;\n source.subscribe(createOperatorSubscriber(subscriber, value => predicate.call(thisArg, value, index++) && subscriber.next(value)));\n });\n}\n","import { innerFrom } from '../observable/innerFrom';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nimport { operate } from '../util/lift';\nexport function catchError(selector) {\n return operate((source, subscriber) => {\n let innerSub = null;\n let syncUnsub = false;\n let handledResult;\n innerSub = source.subscribe(createOperatorSubscriber(subscriber, undefined, undefined, err => {\n handledResult = innerFrom(selector(err, catchError(selector)(source)));\n if (innerSub) {\n innerSub.unsubscribe();\n innerSub = null;\n handledResult.subscribe(subscriber);\n } else {\n syncUnsub = true;\n }\n }));\n if (syncUnsub) {\n innerSub.unsubscribe();\n innerSub = null;\n handledResult.subscribe(subscriber);\n }\n });\n}\n","import { Observable } from '../Observable';\nexport const EMPTY = new Observable(subscriber => subscriber.complete());\nexport function empty(scheduler) {\n return scheduler ? emptyScheduled(scheduler) : EMPTY;\n}\nfunction emptyScheduled(scheduler) {\n return new Observable(subscriber => scheduler.schedule(() => subscriber.complete()));\n}\n","import { EMPTY } from '../observable/empty';\nimport { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function take(count) {\n return count <= 0 ? () => EMPTY : operate((source, subscriber) => {\n let seen = 0;\n source.subscribe(createOperatorSubscriber(subscriber, value => {\n if (++seen <= count) {\n subscriber.next(value);\n if (count <= seen) {\n subscriber.complete();\n }\n }\n }));\n });\n}\n","import { operate } from '../util/lift';\nexport function finalize(callback) {\n return operate((source, subscriber) => {\n try {\n source.subscribe(subscriber);\n } finally {\n subscriber.add(callback);\n }\n });\n}\n","import { mergeMap } from './mergeMap';\nimport { identity } from '../util/identity';\nexport function mergeAll(concurrent = Infinity) {\n return mergeMap(identity, concurrent);\n}\n","import { mergeAll } from './mergeAll';\nexport function concatAll() {\n return mergeAll(1);\n}\n","import { concatAll } from '../operators/concatAll';\nimport { popScheduler } from '../util/args';\nimport { from } from './from';\nexport function concat(...args) {\n return concatAll()(from(args, popScheduler(args)));\n}\n","import { concat } from '../observable/concat';\nimport { popScheduler } from '../util/args';\nimport { operate } from '../util/lift';\nexport function startWith(...values) {\n const scheduler = popScheduler(values);\n return operate((source, subscriber) => {\n (scheduler ? concat(values, source, scheduler) : concat(values, source)).subscribe(subscriber);\n });\n}\n","import { innerFrom } from '../observable/innerFrom';\nimport { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function switchMap(project, resultSelector) {\n return operate((source, subscriber) => {\n let innerSubscriber = null;\n let index = 0;\n let isComplete = false;\n const checkComplete = () => isComplete && !innerSubscriber && subscriber.complete();\n source.subscribe(createOperatorSubscriber(subscriber, value => {\n innerSubscriber === null || innerSubscriber === void 0 ? void 0 : innerSubscriber.unsubscribe();\n let innerIndex = 0;\n const outerIndex = index++;\n innerFrom(project(value, outerIndex)).subscribe(innerSubscriber = createOperatorSubscriber(subscriber, innerValue => subscriber.next(resultSelector ? resultSelector(value, innerValue, outerIndex, innerIndex++) : innerValue), () => {\n innerSubscriber = null;\n checkComplete();\n }));\n }, () => {\n isComplete = true;\n checkComplete();\n }));\n });\n}\n","import { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nimport { innerFrom } from '../observable/innerFrom';\nimport { noop } from '../util/noop';\nexport function takeUntil(notifier) {\n return operate((source, subscriber) => {\n innerFrom(notifier).subscribe(createOperatorSubscriber(subscriber, () => subscriber.complete(), noop));\n !subscriber.closed && source.subscribe(subscriber);\n });\n}\n","import { isFunction } from '../util/isFunction';\nimport { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nimport { identity } from '../util/identity';\nexport function tap(observerOrNext, error, complete) {\n const tapObserver = isFunction(observerOrNext) || error || complete ? {\n next: observerOrNext,\n error,\n complete\n } : observerOrNext;\n return tapObserver ? operate((source, subscriber) => {\n var _a;\n (_a = tapObserver.subscribe) === null || _a === void 0 ? void 0 : _a.call(tapObserver);\n let isUnsub = true;\n source.subscribe(createOperatorSubscriber(subscriber, value => {\n var _a;\n (_a = tapObserver.next) === null || _a === void 0 ? void 0 : _a.call(tapObserver, value);\n subscriber.next(value);\n }, () => {\n var _a;\n isUnsub = false;\n (_a = tapObserver.complete) === null || _a === void 0 ? void 0 : _a.call(tapObserver);\n subscriber.complete();\n }, err => {\n var _a;\n isUnsub = false;\n (_a = tapObserver.error) === null || _a === void 0 ? void 0 : _a.call(tapObserver, err);\n subscriber.error(err);\n }, () => {\n var _a, _b;\n if (isUnsub) {\n (_a = tapObserver.unsubscribe) === null || _a === void 0 ? void 0 : _a.call(tapObserver);\n }\n (_b = tapObserver.finalize) === null || _b === void 0 ? void 0 : _b.call(tapObserver);\n }));\n }) : identity;\n}\n","export const dateTimestampProvider = {\n now() {\n return (dateTimestampProvider.delegate || Date).now();\n },\n delegate: undefined\n};\n","import { Subject } from './Subject';\nimport { dateTimestampProvider } from './scheduler/dateTimestampProvider';\nexport class ReplaySubject extends Subject {\n constructor(_bufferSize = Infinity, _windowTime = Infinity, _timestampProvider = dateTimestampProvider) {\n super();\n this._bufferSize = _bufferSize;\n this._windowTime = _windowTime;\n this._timestampProvider = _timestampProvider;\n this._buffer = [];\n this._infiniteTimeWindow = true;\n this._infiniteTimeWindow = _windowTime === Infinity;\n this._bufferSize = Math.max(1, _bufferSize);\n this._windowTime = Math.max(1, _windowTime);\n }\n next(value) {\n const {\n isStopped,\n _buffer,\n _infiniteTimeWindow,\n _timestampProvider,\n _windowTime\n } = this;\n if (!isStopped) {\n _buffer.push(value);\n !_infiniteTimeWindow && _buffer.push(_timestampProvider.now() + _windowTime);\n }\n this._trimBuffer();\n super.next(value);\n }\n _subscribe(subscriber) {\n this._throwIfClosed();\n this._trimBuffer();\n const subscription = this._innerSubscribe(subscriber);\n const {\n _infiniteTimeWindow,\n _buffer\n } = this;\n const copy = _buffer.slice();\n for (let i = 0; i < copy.length && !subscriber.closed; i += _infiniteTimeWindow ? 1 : 2) {\n subscriber.next(copy[i]);\n }\n this._checkFinalizedStatuses(subscriber);\n return subscription;\n }\n _trimBuffer() {\n const {\n _bufferSize,\n _timestampProvider,\n _buffer,\n _infiniteTimeWindow\n } = this;\n const adjustedBufferSize = (_infiniteTimeWindow ? 1 : 2) * _bufferSize;\n _bufferSize < Infinity && adjustedBufferSize < _buffer.length && _buffer.splice(0, _buffer.length - adjustedBufferSize);\n if (!_infiniteTimeWindow) {\n const now = _timestampProvider.now();\n let last = 0;\n for (let i = 1; i < _buffer.length && _buffer[i] <= now; i += 2) {\n last = i;\n }\n last && _buffer.splice(0, last + 1);\n }\n }\n}\n","import { Subscription } from '../Subscription';\nexport class Action extends Subscription {\n constructor(scheduler, work) {\n super();\n }\n schedule(state, delay = 0) {\n return this;\n }\n}\n","export const intervalProvider = {\n setInterval(handler, timeout, ...args) {\n const {\n delegate\n } = intervalProvider;\n if (delegate === null || delegate === void 0 ? void 0 : delegate.setInterval) {\n return delegate.setInterval(handler, timeout, ...args);\n }\n return setInterval(handler, timeout, ...args);\n },\n clearInterval(handle) {\n const {\n delegate\n } = intervalProvider;\n return ((delegate === null || delegate === void 0 ? void 0 : delegate.clearInterval) || clearInterval)(handle);\n },\n delegate: undefined\n};\n","import { Action } from './Action';\nimport { intervalProvider } from './intervalProvider';\nimport { arrRemove } from '../util/arrRemove';\nexport class AsyncAction extends Action {\n constructor(scheduler, work) {\n super(scheduler, work);\n this.scheduler = scheduler;\n this.work = work;\n this.pending = false;\n }\n schedule(state, delay = 0) {\n var _a;\n if (this.closed) {\n return this;\n }\n this.state = state;\n const id = this.id;\n const scheduler = this.scheduler;\n if (id != null) {\n this.id = this.recycleAsyncId(scheduler, id, delay);\n }\n this.pending = true;\n this.delay = delay;\n this.id = (_a = this.id) !== null && _a !== void 0 ? _a : this.requestAsyncId(scheduler, this.id, delay);\n return this;\n }\n requestAsyncId(scheduler, _id, delay = 0) {\n return intervalProvider.setInterval(scheduler.flush.bind(scheduler, this), delay);\n }\n recycleAsyncId(_scheduler, id, delay = 0) {\n if (delay != null && this.delay === delay && this.pending === false) {\n return id;\n }\n if (id != null) {\n intervalProvider.clearInterval(id);\n }\n return undefined;\n }\n execute(state, delay) {\n if (this.closed) {\n return new Error('executing a cancelled action');\n }\n this.pending = false;\n const error = this._execute(state, delay);\n if (error) {\n return error;\n } else if (this.pending === false && this.id != null) {\n this.id = this.recycleAsyncId(this.scheduler, this.id, null);\n }\n }\n _execute(state, _delay) {\n let errored = false;\n let errorValue;\n try {\n this.work(state);\n } catch (e) {\n errored = true;\n errorValue = e ? e : new Error('Scheduled action threw falsy error');\n }\n if (errored) {\n this.unsubscribe();\n return errorValue;\n }\n }\n unsubscribe() {\n if (!this.closed) {\n const {\n id,\n scheduler\n } = this;\n const {\n actions\n } = scheduler;\n this.work = this.state = this.scheduler = null;\n this.pending = false;\n arrRemove(actions, this);\n if (id != null) {\n this.id = this.recycleAsyncId(scheduler, id, null);\n }\n this.delay = null;\n super.unsubscribe();\n }\n }\n}\n","import { dateTimestampProvider } from './scheduler/dateTimestampProvider';\nexport class Scheduler {\n constructor(schedulerActionCtor, now = Scheduler.now) {\n this.schedulerActionCtor = schedulerActionCtor;\n this.now = now;\n }\n schedule(work, delay = 0, state) {\n return new this.schedulerActionCtor(this, work).schedule(state, delay);\n }\n}\nScheduler.now = dateTimestampProvider.now;\n","import { Scheduler } from '../Scheduler';\nexport class AsyncScheduler extends Scheduler {\n constructor(SchedulerAction, now = Scheduler.now) {\n super(SchedulerAction, now);\n this.actions = [];\n this._active = false;\n }\n flush(action) {\n const {\n actions\n } = this;\n if (this._active) {\n actions.push(action);\n return;\n }\n let error;\n this._active = true;\n do {\n if (error = action.execute(action.state, action.delay)) {\n break;\n }\n } while (action = actions.shift());\n this._active = false;\n if (error) {\n while (action = actions.shift()) {\n action.unsubscribe();\n }\n throw error;\n }\n }\n}\n","import { AsyncAction } from './AsyncAction';\nimport { AsyncScheduler } from './AsyncScheduler';\nexport const asyncScheduler = new AsyncScheduler(AsyncAction);\nexport const async = asyncScheduler;\n","import { Observable } from '../Observable';\nimport { isFunction } from '../util/isFunction';\nexport function throwError(errorOrErrorFactory, scheduler) {\n const errorFactory = isFunction(errorOrErrorFactory) ? errorOrErrorFactory : () => errorOrErrorFactory;\n const init = subscriber => subscriber.error(errorFactory());\n return new Observable(scheduler ? subscriber => scheduler.schedule(init, 0, subscriber) : init);\n}\n","import { Observable } from '../Observable';\nimport { isFunction } from './isFunction';\nexport function isObservable(obj) {\n return !!obj && (obj instanceof Observable || isFunction(obj.lift) && isFunction(obj.subscribe));\n}\n","import { createErrorClass } from './createErrorClass';\nexport const EmptyError = createErrorClass(_super => function EmptyErrorImpl() {\n _super(this);\n this.name = 'EmptyError';\n this.message = 'no elements in sequence';\n});\n","export function isValidDate(value) {\n return value instanceof Date && !isNaN(value);\n}\n","import { asyncScheduler } from '../scheduler/async';\nimport { isValidDate } from '../util/isDate';\nimport { operate } from '../util/lift';\nimport { innerFrom } from '../observable/innerFrom';\nimport { createErrorClass } from '../util/createErrorClass';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nimport { executeSchedule } from '../util/executeSchedule';\nexport const TimeoutError = createErrorClass(_super => function TimeoutErrorImpl(info = null) {\n _super(this);\n this.message = 'Timeout has occurred';\n this.name = 'TimeoutError';\n this.info = info;\n});\nexport function timeout(config, schedulerArg) {\n const {\n first,\n each,\n with: _with = timeoutErrorFactory,\n scheduler = schedulerArg !== null && schedulerArg !== void 0 ? schedulerArg : asyncScheduler,\n meta = null\n } = isValidDate(config) ? {\n first: config\n } : typeof config === 'number' ? {\n each: config\n } : config;\n if (first == null && each == null) {\n throw new TypeError('No timeout provided.');\n }\n return operate((source, subscriber) => {\n let originalSourceSubscription;\n let timerSubscription;\n let lastValue = null;\n let seen = 0;\n const startTimer = delay => {\n timerSubscription = executeSchedule(subscriber, scheduler, () => {\n try {\n originalSourceSubscription.unsubscribe();\n innerFrom(_with({\n meta,\n lastValue,\n seen\n })).subscribe(subscriber);\n } catch (err) {\n subscriber.error(err);\n }\n }, delay);\n };\n originalSourceSubscription = source.subscribe(createOperatorSubscriber(subscriber, value => {\n timerSubscription === null || timerSubscription === void 0 ? void 0 : timerSubscription.unsubscribe();\n seen++;\n subscriber.next(lastValue = value);\n each > 0 && startTimer(each);\n }, undefined, undefined, () => {\n if (!(timerSubscription === null || timerSubscription === void 0 ? void 0 : timerSubscription.closed)) {\n timerSubscription === null || timerSubscription === void 0 ? void 0 : timerSubscription.unsubscribe();\n }\n lastValue = null;\n }));\n !seen && startTimer(first != null ? typeof first === 'number' ? first : +first - scheduler.now() : each);\n });\n}\nfunction timeoutErrorFactory(info) {\n throw new TimeoutError(info);\n}\n","const {\n isArray\n} = Array;\nconst {\n getPrototypeOf,\n prototype: objectProto,\n keys: getKeys\n} = Object;\nexport function argsArgArrayOrObject(args) {\n if (args.length === 1) {\n const first = args[0];\n if (isArray(first)) {\n return {\n args: first,\n keys: null\n };\n }\n if (isPOJO(first)) {\n const keys = getKeys(first);\n return {\n args: keys.map(key => first[key]),\n keys\n };\n }\n }\n return {\n args: args,\n keys: null\n };\n}\nfunction isPOJO(obj) {\n return obj && typeof obj === 'object' && getPrototypeOf(obj) === objectProto;\n}\n","export function createObject(keys, values) {\n return keys.reduce((result, key, i) => (result[key] = values[i], result), {});\n}\n","import { Observable } from '../Observable';\nimport { argsArgArrayOrObject } from '../util/argsArgArrayOrObject';\nimport { from } from './from';\nimport { identity } from '../util/identity';\nimport { mapOneOrManyArgs } from '../util/mapOneOrManyArgs';\nimport { popResultSelector, popScheduler } from '../util/args';\nimport { createObject } from '../util/createObject';\nimport { createOperatorSubscriber } from '../operators/OperatorSubscriber';\nimport { executeSchedule } from '../util/executeSchedule';\nexport function combineLatest(...args) {\n const scheduler = popScheduler(args);\n const resultSelector = popResultSelector(args);\n const {\n args: observables,\n keys\n } = argsArgArrayOrObject(args);\n if (observables.length === 0) {\n return from([], scheduler);\n }\n const result = new Observable(combineLatestInit(observables, scheduler, keys ? values => createObject(keys, values) : identity));\n return resultSelector ? result.pipe(mapOneOrManyArgs(resultSelector)) : result;\n}\nexport function combineLatestInit(observables, scheduler, valueTransform = identity) {\n return subscriber => {\n maybeSchedule(scheduler, () => {\n const {\n length\n } = observables;\n const values = new Array(length);\n let active = length;\n let remainingFirstValues = length;\n for (let i = 0; i < length; i++) {\n maybeSchedule(scheduler, () => {\n const source = from(observables[i], scheduler);\n let hasFirstValue = false;\n source.subscribe(createOperatorSubscriber(subscriber, value => {\n values[i] = value;\n if (!hasFirstValue) {\n hasFirstValue = true;\n remainingFirstValues--;\n }\n if (!remainingFirstValues) {\n subscriber.next(valueTransform(values.slice()));\n }\n }, () => {\n if (! --active) {\n subscriber.complete();\n }\n }));\n }, subscriber);\n }\n }, subscriber);\n };\n}\nfunction maybeSchedule(scheduler, execute, subscription) {\n if (scheduler) {\n executeSchedule(subscription, scheduler, execute);\n } else {\n execute();\n }\n}\n","import { Observable } from '../Observable';\nimport { innerFrom } from './innerFrom';\nexport function defer(observableFactory) {\n return new Observable(subscriber => {\n innerFrom(observableFactory()).subscribe(subscriber);\n });\n}\n","import { Observable } from '../Observable';\nimport { argsArgArrayOrObject } from '../util/argsArgArrayOrObject';\nimport { innerFrom } from './innerFrom';\nimport { popResultSelector } from '../util/args';\nimport { createOperatorSubscriber } from '../operators/OperatorSubscriber';\nimport { mapOneOrManyArgs } from '../util/mapOneOrManyArgs';\nimport { createObject } from '../util/createObject';\nexport function forkJoin(...args) {\n const resultSelector = popResultSelector(args);\n const {\n args: sources,\n keys\n } = argsArgArrayOrObject(args);\n const result = new Observable(subscriber => {\n const {\n length\n } = sources;\n if (!length) {\n subscriber.complete();\n return;\n }\n const values = new Array(length);\n let remainingCompletions = length;\n let remainingEmissions = length;\n for (let sourceIndex = 0; sourceIndex < length; sourceIndex++) {\n let hasValue = false;\n innerFrom(sources[sourceIndex]).subscribe(createOperatorSubscriber(subscriber, value => {\n if (!hasValue) {\n hasValue = true;\n remainingEmissions--;\n }\n values[sourceIndex] = value;\n }, () => remainingCompletions--, undefined, () => {\n if (!remainingCompletions || !hasValue) {\n if (!remainingEmissions) {\n subscriber.next(keys ? createObject(keys, values) : values);\n }\n subscriber.complete();\n }\n }));\n }\n });\n return resultSelector ? result.pipe(mapOneOrManyArgs(resultSelector)) : result;\n}\n","import { Observable } from '../Observable';\nimport { async as asyncScheduler } from '../scheduler/async';\nimport { isScheduler } from '../util/isScheduler';\nimport { isValidDate } from '../util/isDate';\nexport function timer(dueTime = 0, intervalOrScheduler, scheduler = asyncScheduler) {\n let intervalDuration = -1;\n if (intervalOrScheduler != null) {\n if (isScheduler(intervalOrScheduler)) {\n scheduler = intervalOrScheduler;\n } else {\n intervalDuration = intervalOrScheduler;\n }\n }\n return new Observable(subscriber => {\n let due = isValidDate(dueTime) ? +dueTime - scheduler.now() : dueTime;\n if (due < 0) {\n due = 0;\n }\n let n = 0;\n return scheduler.schedule(function () {\n if (!subscriber.closed) {\n subscriber.next(n++);\n if (0 <= intervalDuration) {\n this.schedule(undefined, intervalDuration);\n } else {\n subscriber.complete();\n }\n }\n }, due);\n });\n}\n","import { asyncScheduler } from '../scheduler/async';\nimport { timer } from './timer';\nexport function interval(period = 0, scheduler = asyncScheduler) {\n if (period < 0) {\n period = 0;\n }\n return timer(period, period, scheduler);\n}\n","import { mergeMap } from './mergeMap';\nimport { isFunction } from '../util/isFunction';\nexport function concatMap(project, resultSelector) {\n return isFunction(resultSelector) ? mergeMap(project, resultSelector, 1) : mergeMap(project, 1);\n}\n","import { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function defaultIfEmpty(defaultValue) {\n return operate((source, subscriber) => {\n let hasValue = false;\n source.subscribe(createOperatorSubscriber(subscriber, value => {\n hasValue = true;\n subscriber.next(value);\n }, () => {\n if (!hasValue) {\n subscriber.next(defaultValue);\n }\n subscriber.complete();\n }));\n });\n}\n","import { identity } from '../util/identity';\nimport { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function distinctUntilChanged(comparator, keySelector = identity) {\n comparator = comparator !== null && comparator !== void 0 ? comparator : defaultCompare;\n return operate((source, subscriber) => {\n let previousKey;\n let first = true;\n source.subscribe(createOperatorSubscriber(subscriber, value => {\n const currentKey = keySelector(value);\n if (first || !comparator(previousKey, currentKey)) {\n first = false;\n previousKey = currentKey;\n subscriber.next(value);\n }\n }));\n });\n}\nfunction defaultCompare(a, b) {\n return a === b;\n}\n","import { EmptyError } from '../util/EmptyError';\nimport { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function throwIfEmpty(errorFactory = defaultErrorFactory) {\n return operate((source, subscriber) => {\n let hasValue = false;\n source.subscribe(createOperatorSubscriber(subscriber, value => {\n hasValue = true;\n subscriber.next(value);\n }, () => hasValue ? subscriber.complete() : subscriber.error(errorFactory())));\n });\n}\nfunction defaultErrorFactory() {\n return new EmptyError();\n}\n","import { EmptyError } from '../util/EmptyError';\nimport { filter } from './filter';\nimport { take } from './take';\nimport { defaultIfEmpty } from './defaultIfEmpty';\nimport { throwIfEmpty } from './throwIfEmpty';\nimport { identity } from '../util/identity';\nexport function first(predicate, defaultValue) {\n const hasDefaultValue = arguments.length >= 2;\n return source => source.pipe(predicate ? filter((v, i) => predicate(v, i, source)) : identity, take(1), hasDefaultValue ? defaultIfEmpty(defaultValue) : throwIfEmpty(() => new EmptyError()));\n}\n","import { EMPTY } from '../observable/empty';\nimport { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function takeLast(count) {\n return count <= 0 ? () => EMPTY : operate((source, subscriber) => {\n let buffer = [];\n source.subscribe(createOperatorSubscriber(subscriber, value => {\n buffer.push(value);\n count < buffer.length && buffer.shift();\n }, () => {\n for (const value of buffer) {\n subscriber.next(value);\n }\n subscriber.complete();\n }, undefined, () => {\n buffer = null;\n }));\n });\n}\n","import { innerFrom } from '../observable/innerFrom';\nimport { Subject } from '../Subject';\nimport { SafeSubscriber } from '../Subscriber';\nimport { operate } from '../util/lift';\nexport function share(options = {}) {\n const {\n connector = () => new Subject(),\n resetOnError = true,\n resetOnComplete = true,\n resetOnRefCountZero = true\n } = options;\n return wrapperSource => {\n let connection;\n let resetConnection;\n let subject;\n let refCount = 0;\n let hasCompleted = false;\n let hasErrored = false;\n const cancelReset = () => {\n resetConnection === null || resetConnection === void 0 ? void 0 : resetConnection.unsubscribe();\n resetConnection = undefined;\n };\n const reset = () => {\n cancelReset();\n connection = subject = undefined;\n hasCompleted = hasErrored = false;\n };\n const resetAndUnsubscribe = () => {\n const conn = connection;\n reset();\n conn === null || conn === void 0 ? void 0 : conn.unsubscribe();\n };\n return operate((source, subscriber) => {\n refCount++;\n if (!hasErrored && !hasCompleted) {\n cancelReset();\n }\n const dest = subject = subject !== null && subject !== void 0 ? subject : connector();\n subscriber.add(() => {\n refCount--;\n if (refCount === 0 && !hasErrored && !hasCompleted) {\n resetConnection = handleReset(resetAndUnsubscribe, resetOnRefCountZero);\n }\n });\n dest.subscribe(subscriber);\n if (!connection && refCount > 0) {\n connection = new SafeSubscriber({\n next: value => dest.next(value),\n error: err => {\n hasErrored = true;\n cancelReset();\n resetConnection = handleReset(reset, resetOnError, err);\n dest.error(err);\n },\n complete: () => {\n hasCompleted = true;\n cancelReset();\n resetConnection = handleReset(reset, resetOnComplete);\n dest.complete();\n }\n });\n innerFrom(source).subscribe(connection);\n }\n })(wrapperSource);\n };\n}\nfunction handleReset(reset, on, ...args) {\n if (on === true) {\n reset();\n return;\n }\n if (on === false) {\n return;\n }\n const onSubscriber = new SafeSubscriber({\n next: () => {\n onSubscriber.unsubscribe();\n reset();\n }\n });\n return innerFrom(on(...args)).subscribe(onSubscriber);\n}\n","import { ReplaySubject } from '../ReplaySubject';\nimport { share } from './share';\nexport function shareReplay(configOrBufferSize, windowTime, scheduler) {\n let bufferSize;\n let refCount = false;\n if (configOrBufferSize && typeof configOrBufferSize === 'object') {\n ({\n bufferSize = Infinity,\n windowTime = Infinity,\n refCount = false,\n scheduler\n } = configOrBufferSize);\n } else {\n bufferSize = configOrBufferSize !== null && configOrBufferSize !== void 0 ? configOrBufferSize : Infinity;\n }\n return share({\n connector: () => new ReplaySubject(bufferSize, windowTime, scheduler),\n resetOnError: true,\n resetOnComplete: false,\n resetOnRefCountZero: refCount\n });\n}\n","/**\n * @license Angular v21.2.4\n * (c) 2010-2026 Google LLC. https://angular.dev/\n * License: MIT\n */\n\nlet activeConsumer = null;\nlet inNotificationPhase = false;\nlet epoch = 1;\nlet postProducerCreatedFn = null;\nconst SIGNAL = /* @__PURE__ */Symbol('SIGNAL');\nfunction setActiveConsumer(consumer) {\n const prev = activeConsumer;\n activeConsumer = consumer;\n return prev;\n}\nfunction getActiveConsumer() {\n return activeConsumer;\n}\nfunction isInNotificationPhase() {\n return inNotificationPhase;\n}\nfunction isReactive(value) {\n return value[SIGNAL] !== undefined;\n}\nconst REACTIVE_NODE = {\n version: 0,\n lastCleanEpoch: 0,\n dirty: false,\n producers: undefined,\n producersTail: undefined,\n consumers: undefined,\n consumersTail: undefined,\n recomputing: false,\n consumerAllowSignalWrites: false,\n consumerIsAlwaysLive: false,\n kind: 'unknown',\n producerMustRecompute: () => false,\n producerRecomputeValue: () => {},\n consumerMarkedDirty: () => {},\n consumerOnSignalRead: () => {}\n};\nfunction producerAccessed(node) {\n if (inNotificationPhase) {\n throw new Error(typeof ngDevMode !== 'undefined' && ngDevMode ? `Assertion error: signal read during notification phase` : '');\n }\n if (activeConsumer === null) {\n return;\n }\n activeConsumer.consumerOnSignalRead(node);\n const prevProducerLink = activeConsumer.producersTail;\n if (prevProducerLink !== undefined && prevProducerLink.producer === node) {\n return;\n }\n let nextProducerLink = undefined;\n const isRecomputing = activeConsumer.recomputing;\n if (isRecomputing) {\n nextProducerLink = prevProducerLink !== undefined ? prevProducerLink.nextProducer : activeConsumer.producers;\n if (nextProducerLink !== undefined && nextProducerLink.producer === node) {\n activeConsumer.producersTail = nextProducerLink;\n nextProducerLink.lastReadVersion = node.version;\n return;\n }\n }\n const prevConsumerLink = node.consumersTail;\n if (prevConsumerLink !== undefined && prevConsumerLink.consumer === activeConsumer && (!isRecomputing || isValidLink(prevConsumerLink, activeConsumer))) {\n return;\n }\n const isLive = consumerIsLive(activeConsumer);\n const newLink = {\n producer: node,\n consumer: activeConsumer,\n nextProducer: nextProducerLink,\n prevConsumer: prevConsumerLink,\n lastReadVersion: node.version,\n nextConsumer: undefined\n };\n activeConsumer.producersTail = newLink;\n if (prevProducerLink !== undefined) {\n prevProducerLink.nextProducer = newLink;\n } else {\n activeConsumer.producers = newLink;\n }\n if (isLive) {\n producerAddLiveConsumer(node, newLink);\n }\n}\nfunction producerIncrementEpoch() {\n epoch++;\n}\nfunction producerUpdateValueVersion(node) {\n if (consumerIsLive(node) && !node.dirty) {\n return;\n }\n if (!node.dirty && node.lastCleanEpoch === epoch) {\n return;\n }\n if (!node.producerMustRecompute(node) && !consumerPollProducersForChange(node)) {\n producerMarkClean(node);\n return;\n }\n node.producerRecomputeValue(node);\n producerMarkClean(node);\n}\nfunction producerNotifyConsumers(node) {\n if (node.consumers === undefined) {\n return;\n }\n const prev = inNotificationPhase;\n inNotificationPhase = true;\n try {\n for (let link = node.consumers; link !== undefined; link = link.nextConsumer) {\n const consumer = link.consumer;\n if (!consumer.dirty) {\n consumerMarkDirty(consumer);\n }\n }\n } finally {\n inNotificationPhase = prev;\n }\n}\nfunction producerUpdatesAllowed() {\n return activeConsumer?.consumerAllowSignalWrites !== false;\n}\nfunction consumerMarkDirty(node) {\n node.dirty = true;\n producerNotifyConsumers(node);\n node.consumerMarkedDirty?.(node);\n}\nfunction producerMarkClean(node) {\n node.dirty = false;\n node.lastCleanEpoch = epoch;\n}\nfunction consumerBeforeComputation(node) {\n if (node) resetConsumerBeforeComputation(node);\n return setActiveConsumer(node);\n}\nfunction resetConsumerBeforeComputation(node) {\n node.producersTail = undefined;\n node.recomputing = true;\n}\nfunction consumerAfterComputation(node, prevConsumer) {\n setActiveConsumer(prevConsumer);\n if (node) finalizeConsumerAfterComputation(node);\n}\nfunction finalizeConsumerAfterComputation(node) {\n node.recomputing = false;\n const producersTail = node.producersTail;\n let toRemove = producersTail !== undefined ? producersTail.nextProducer : node.producers;\n if (toRemove !== undefined) {\n if (consumerIsLive(node)) {\n do {\n toRemove = producerRemoveLiveConsumerLink(toRemove);\n } while (toRemove !== undefined);\n }\n if (producersTail !== undefined) {\n producersTail.nextProducer = undefined;\n } else {\n node.producers = undefined;\n }\n }\n}\nfunction consumerPollProducersForChange(node) {\n for (let link = node.producers; link !== undefined; link = link.nextProducer) {\n const producer = link.producer;\n const seenVersion = link.lastReadVersion;\n if (seenVersion !== producer.version) {\n return true;\n }\n producerUpdateValueVersion(producer);\n if (seenVersion !== producer.version) {\n return true;\n }\n }\n return false;\n}\nfunction consumerDestroy(node) {\n if (consumerIsLive(node)) {\n let link = node.producers;\n while (link !== undefined) {\n link = producerRemoveLiveConsumerLink(link);\n }\n }\n node.producers = undefined;\n node.producersTail = undefined;\n node.consumers = undefined;\n node.consumersTail = undefined;\n}\nfunction producerAddLiveConsumer(node, link) {\n const consumersTail = node.consumersTail;\n const wasLive = consumerIsLive(node);\n if (consumersTail !== undefined) {\n link.nextConsumer = consumersTail.nextConsumer;\n consumersTail.nextConsumer = link;\n } else {\n link.nextConsumer = undefined;\n node.consumers = link;\n }\n link.prevConsumer = consumersTail;\n node.consumersTail = link;\n if (!wasLive) {\n for (let link = node.producers; link !== undefined; link = link.nextProducer) {\n producerAddLiveConsumer(link.producer, link);\n }\n }\n}\nfunction producerRemoveLiveConsumerLink(link) {\n const producer = link.producer;\n const nextProducer = link.nextProducer;\n const nextConsumer = link.nextConsumer;\n const prevConsumer = link.prevConsumer;\n link.nextConsumer = undefined;\n link.prevConsumer = undefined;\n if (nextConsumer !== undefined) {\n nextConsumer.prevConsumer = prevConsumer;\n } else {\n producer.consumersTail = prevConsumer;\n }\n if (prevConsumer !== undefined) {\n prevConsumer.nextConsumer = nextConsumer;\n } else {\n producer.consumers = nextConsumer;\n if (!consumerIsLive(producer)) {\n let producerLink = producer.producers;\n while (producerLink !== undefined) {\n producerLink = producerRemoveLiveConsumerLink(producerLink);\n }\n }\n }\n return nextProducer;\n}\nfunction consumerIsLive(node) {\n return node.consumerIsAlwaysLive || node.consumers !== undefined;\n}\nfunction runPostProducerCreatedFn(node) {\n postProducerCreatedFn?.(node);\n}\nfunction setPostProducerCreatedFn(fn) {\n const prev = postProducerCreatedFn;\n postProducerCreatedFn = fn;\n return prev;\n}\nfunction isValidLink(checkLink, consumer) {\n const producersTail = consumer.producersTail;\n if (producersTail !== undefined) {\n let link = consumer.producers;\n do {\n if (link === checkLink) {\n return true;\n }\n if (link === producersTail) {\n break;\n }\n link = link.nextProducer;\n } while (link !== undefined);\n }\n return false;\n}\nfunction defaultEquals(a, b) {\n return Object.is(a, b);\n}\nfunction createComputed(computation, equal) {\n const node = Object.create(COMPUTED_NODE);\n node.computation = computation;\n if (equal !== undefined) {\n node.equal = equal;\n }\n const computed = () => {\n producerUpdateValueVersion(node);\n producerAccessed(node);\n if (node.value === ERRORED) {\n throw node.error;\n }\n return node.value;\n };\n computed[SIGNAL] = node;\n if (typeof ngDevMode !== 'undefined' && ngDevMode) {\n computed.toString = () => `[Computed${node.debugName ? ' (' + node.debugName + ')' : ''}: ${String(node.value)}]`;\n }\n runPostProducerCreatedFn(node);\n return computed;\n}\nconst UNSET = /* @__PURE__ */Symbol('UNSET');\nconst COMPUTING = /* @__PURE__ */Symbol('COMPUTING');\nconst ERRORED = /* @__PURE__ */Symbol('ERRORED');\nconst COMPUTED_NODE = /* @__PURE__ */(() => {\n return {\n ...REACTIVE_NODE,\n value: UNSET,\n dirty: true,\n error: null,\n equal: defaultEquals,\n kind: 'computed',\n producerMustRecompute(node) {\n return node.value === UNSET || node.value === COMPUTING;\n },\n producerRecomputeValue(node) {\n if (node.value === COMPUTING) {\n throw new Error(typeof ngDevMode !== 'undefined' && ngDevMode ? 'Detected cycle in computations.' : '');\n }\n const oldValue = node.value;\n node.value = COMPUTING;\n const prevConsumer = consumerBeforeComputation(node);\n let newValue;\n let wasEqual = false;\n try {\n newValue = node.computation();\n setActiveConsumer(null);\n wasEqual = oldValue !== UNSET && oldValue !== ERRORED && newValue !== ERRORED && node.equal(oldValue, newValue);\n } catch (err) {\n newValue = ERRORED;\n node.error = err;\n } finally {\n consumerAfterComputation(node, prevConsumer);\n }\n if (wasEqual) {\n node.value = oldValue;\n return;\n }\n node.value = newValue;\n node.version++;\n }\n };\n})();\nfunction defaultThrowError() {\n throw new Error();\n}\nlet throwInvalidWriteToSignalErrorFn = defaultThrowError;\nfunction throwInvalidWriteToSignalError(node) {\n throwInvalidWriteToSignalErrorFn(node);\n}\nfunction setThrowInvalidWriteToSignalError(fn) {\n throwInvalidWriteToSignalErrorFn = fn;\n}\nlet postSignalSetFn = null;\nfunction createSignal(initialValue, equal) {\n const node = Object.create(SIGNAL_NODE);\n node.value = initialValue;\n if (equal !== undefined) {\n node.equal = equal;\n }\n const getter = () => signalGetFn(node);\n getter[SIGNAL] = node;\n if (typeof ngDevMode !== 'undefined' && ngDevMode) {\n getter.toString = () => `[Signal${node.debugName ? ' (' + node.debugName + ')' : ''}: ${String(node.value)}]`;\n }\n runPostProducerCreatedFn(node);\n const set = newValue => signalSetFn(node, newValue);\n const update = updateFn => signalUpdateFn(node, updateFn);\n return [getter, set, update];\n}\nfunction setPostSignalSetFn(fn) {\n const prev = postSignalSetFn;\n postSignalSetFn = fn;\n return prev;\n}\nfunction signalGetFn(node) {\n producerAccessed(node);\n return node.value;\n}\nfunction signalSetFn(node, newValue) {\n if (!producerUpdatesAllowed()) {\n throwInvalidWriteToSignalError(node);\n }\n if (!node.equal(node.value, newValue)) {\n node.value = newValue;\n signalValueChanged(node);\n }\n}\nfunction signalUpdateFn(node, updater) {\n if (!producerUpdatesAllowed()) {\n throwInvalidWriteToSignalError(node);\n }\n signalSetFn(node, updater(node.value));\n}\nfunction runPostSignalSetFn(node) {\n postSignalSetFn?.(node);\n}\nconst SIGNAL_NODE = /* @__PURE__ */(() => {\n return {\n ...REACTIVE_NODE,\n equal: defaultEquals,\n value: undefined,\n kind: 'signal'\n };\n})();\nfunction signalValueChanged(node) {\n node.version++;\n producerIncrementEpoch();\n producerNotifyConsumers(node);\n postSignalSetFn?.(node);\n}\nconst BASE_EFFECT_NODE = /* @__PURE__ */(() => ({\n ...REACTIVE_NODE,\n consumerIsAlwaysLive: true,\n consumerAllowSignalWrites: true,\n dirty: true,\n kind: 'effect'\n}))();\nfunction runEffect(node) {\n node.dirty = false;\n if (node.version > 0 && !consumerPollProducersForChange(node)) {\n return;\n }\n node.version++;\n const prevNode = consumerBeforeComputation(node);\n try {\n node.cleanup();\n node.fn();\n } finally {\n consumerAfterComputation(node, prevNode);\n }\n}\nexport { BASE_EFFECT_NODE, COMPUTING, ERRORED, REACTIVE_NODE, SIGNAL, SIGNAL_NODE, UNSET, consumerAfterComputation, consumerBeforeComputation, consumerDestroy, consumerMarkDirty, consumerPollProducersForChange, createComputed, createSignal, defaultEquals, finalizeConsumerAfterComputation, getActiveConsumer, isInNotificationPhase, isReactive, producerAccessed, producerIncrementEpoch, producerMarkClean, producerNotifyConsumers, producerUpdateValueVersion, producerUpdatesAllowed, resetConsumerBeforeComputation, runEffect, runPostProducerCreatedFn, runPostSignalSetFn, setActiveConsumer, setPostProducerCreatedFn, setPostSignalSetFn, setThrowInvalidWriteToSignalError, signalGetFn, signalSetFn, signalUpdateFn };\n","/**\n * @license Angular v21.2.4\n * (c) 2010-2026 Google LLC. https://angular.dev/\n * License: MIT\n */\n\nlet _currentInjector = undefined;\nfunction getCurrentInjector() {\n return _currentInjector;\n}\nfunction setCurrentInjector(injector) {\n const former = _currentInjector;\n _currentInjector = injector;\n return former;\n}\nfunction inject(token, options) {\n const currentInjector = getCurrentInjector();\n if (!currentInjector) {\n throw new Error('Current injector is not set.');\n }\n if (!token.\u0275prov) {\n throw new Error('Token is not an injectable');\n }\n return currentInjector.retrieve(token, options);\n}\nconst NOT_FOUND = /*#__PURE__*/Symbol('NotFound');\nclass NotFoundError extends Error {\n name = '\u0275NotFound';\n constructor(message) {\n super(message);\n }\n}\nfunction isNotFound(e) {\n return e === NOT_FOUND || e?.name === '\u0275NotFound';\n}\nexport { NOT_FOUND, NotFoundError, getCurrentInjector, inject, isNotFound, setCurrentInjector };\n","/**\n * @license Angular v21.2.4\n * (c) 2010-2026 Google LLC. https://angular.dev/\n * License: MIT\n */\n\nimport { SIGNAL, runPostProducerCreatedFn, producerUpdateValueVersion, signalSetFn, producerMarkClean, ERRORED, signalUpdateFn, REACTIVE_NODE, UNSET, defaultEquals, COMPUTING, consumerBeforeComputation, consumerAfterComputation, producerAccessed, setActiveConsumer } from './_effect-chunk.mjs';\nfunction createLinkedSignal(sourceFn, computationFn, equalityFn) {\n const node = Object.create(LINKED_SIGNAL_NODE);\n node.source = sourceFn;\n node.computation = computationFn;\n if (equalityFn != undefined) {\n node.equal = equalityFn;\n }\n const linkedSignalGetter = () => {\n producerUpdateValueVersion(node);\n producerAccessed(node);\n if (node.value === ERRORED) {\n throw node.error;\n }\n return node.value;\n };\n const getter = linkedSignalGetter;\n getter[SIGNAL] = node;\n if (typeof ngDevMode !== 'undefined' && ngDevMode) {\n getter.toString = () => `[LinkedSignal${node.debugName ? ' (' + node.debugName + ')' : ''}: ${String(node.value)}]`;\n }\n runPostProducerCreatedFn(node);\n return getter;\n}\nfunction linkedSignalSetFn(node, newValue) {\n producerUpdateValueVersion(node);\n signalSetFn(node, newValue);\n producerMarkClean(node);\n}\nfunction linkedSignalUpdateFn(node, updater) {\n producerUpdateValueVersion(node);\n if (node.value === ERRORED) {\n throw node.error;\n }\n signalUpdateFn(node, updater);\n producerMarkClean(node);\n}\nconst LINKED_SIGNAL_NODE = /* @__PURE__ */(() => {\n return {\n ...REACTIVE_NODE,\n value: UNSET,\n dirty: true,\n error: null,\n equal: defaultEquals,\n kind: 'linkedSignal',\n producerMustRecompute(node) {\n return node.value === UNSET || node.value === COMPUTING;\n },\n producerRecomputeValue(node) {\n if (node.value === COMPUTING) {\n throw new Error(typeof ngDevMode !== 'undefined' && ngDevMode ? 'Detected cycle in computations.' : '');\n }\n const oldValue = node.value;\n node.value = COMPUTING;\n const prevConsumer = consumerBeforeComputation(node);\n let newValue;\n try {\n const newSourceValue = node.source();\n const prev = oldValue === UNSET || oldValue === ERRORED ? undefined : {\n source: node.sourceValue,\n value: oldValue\n };\n newValue = node.computation(newSourceValue, prev);\n node.sourceValue = newSourceValue;\n } catch (err) {\n newValue = ERRORED;\n node.error = err;\n } finally {\n consumerAfterComputation(node, prevConsumer);\n }\n if (oldValue !== UNSET && newValue !== ERRORED && node.equal(oldValue, newValue)) {\n node.value = oldValue;\n return;\n }\n node.value = newValue;\n node.version++;\n }\n };\n})();\nfunction untracked(nonReactiveReadsFn) {\n const prevConsumer = setActiveConsumer(null);\n try {\n return nonReactiveReadsFn();\n } finally {\n setActiveConsumer(prevConsumer);\n }\n}\nexport { createLinkedSignal, linkedSignalSetFn, linkedSignalUpdateFn, untracked };\n","/**\n * @license Angular v21.2.4\n * (c) 2010-2026 Google LLC. https://angular.dev/\n * License: MIT\n */\n\nimport { getActiveConsumer, setActiveConsumer as setActiveConsumer$1, createSignal, SIGNAL, consumerDestroy, BASE_EFFECT_NODE, isInNotificationPhase, runEffect } from './_effect-chunk.mjs';\nimport { BehaviorSubject, Observable, Subject, Subscription } from 'rxjs';\nimport { isNotFound, getCurrentInjector, setCurrentInjector } from './_not_found-chunk.mjs';\nimport { setActiveConsumer } from '@angular/core/primitives/signals';\nimport { isNotFound as isNotFound$1 } from '@angular/core/primitives/di';\nclass Version {\n full;\n major;\n minor;\n patch;\n constructor(full) {\n this.full = full;\n const parts = full.split('.');\n this.major = parts[0];\n this.minor = parts[1];\n this.patch = parts.slice(2).join('.');\n }\n}\nconst VERSION = /* @__PURE__ */new Version('21.2.4');\nconst DOC_PAGE_BASE_URL = /*#__PURE__*/(() => {\n const full = VERSION.full;\n const isPreRelease = full.includes('-next') || full.includes('-rc') || full === '0.0.0' + '-PLACEHOLDER';\n const prefix = isPreRelease ? 'next' : `v${VERSION.major}`;\n return `https://${prefix}.angular.dev`;\n})();\nconst ERROR_DETAILS_PAGE_BASE_URL = /*#__PURE__*/(() => {\n return `${DOC_PAGE_BASE_URL}/errors`;\n})();\nconst XSS_SECURITY_URL = 'https://angular.dev/best-practices/security#preventing-cross-site-scripting-xss';\nclass RuntimeError extends Error {\n code;\n constructor(code, message) {\n super(formatRuntimeError(code, message));\n this.code = code;\n }\n}\nfunction formatRuntimeErrorCode(code) {\n return `NG0${Math.abs(code)}`;\n}\nfunction formatRuntimeError(code, message) {\n const fullCode = formatRuntimeErrorCode(code);\n let errorMessage = `${fullCode}${message ? ': ' + message : ''}`;\n if (ngDevMode && code < 0) {\n const addPeriodSeparator = !errorMessage.match(/[.,;!?\\n]$/);\n const separator = addPeriodSeparator ? '.' : '';\n errorMessage = `${errorMessage}${separator} Find more at ${ERROR_DETAILS_PAGE_BASE_URL}/${fullCode}`;\n }\n return errorMessage;\n}\nconst _global = globalThis;\nfunction ngDevModeResetPerfCounters() {\n const locationString = typeof location !== 'undefined' ? location.toString() : '';\n const newCounters = {\n hydratedNodes: 0,\n hydratedComponents: 0,\n dehydratedViewsRemoved: 0,\n dehydratedViewsCleanupRuns: 0,\n componentsSkippedHydration: 0,\n deferBlocksWithIncrementalHydration: 0\n };\n const allowNgDevModeTrue = locationString.indexOf('ngDevMode=false') === -1;\n if (!allowNgDevModeTrue) {\n _global['ngDevMode'] = false;\n } else {\n if (typeof _global['ngDevMode'] !== 'object') {\n _global['ngDevMode'] = {};\n }\n Object.assign(_global['ngDevMode'], newCounters);\n }\n return newCounters;\n}\nfunction initNgDevMode() {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n if (typeof ngDevMode !== 'object' || Object.keys(ngDevMode).length === 0) {\n ngDevModeResetPerfCounters();\n }\n return typeof ngDevMode !== 'undefined' && !!ngDevMode;\n }\n return false;\n}\nfunction getClosureSafeProperty(objWithPropertyToExtract) {\n for (let key in objWithPropertyToExtract) {\n if (objWithPropertyToExtract[key] === getClosureSafeProperty) {\n return key;\n }\n }\n throw Error(typeof ngDevMode !== 'undefined' && ngDevMode ? 'Could not find renamed property on target object.' : '');\n}\nfunction fillProperties(target, source) {\n for (const key in source) {\n if (source.hasOwnProperty(key) && !target.hasOwnProperty(key)) {\n target[key] = source[key];\n }\n }\n}\nfunction stringify(token) {\n if (typeof token === 'string') {\n return token;\n }\n if (Array.isArray(token)) {\n return `[${token.map(stringify).join(', ')}]`;\n }\n if (token == null) {\n return '' + token;\n }\n const name = token.overriddenName || token.name;\n if (name) {\n return `${name}`;\n }\n const result = token.toString();\n if (result == null) {\n return '' + result;\n }\n const newLineIndex = result.indexOf('\\n');\n return newLineIndex >= 0 ? result.slice(0, newLineIndex) : result;\n}\nfunction concatStringsWithSpace(before, after) {\n if (!before) return after || '';\n if (!after) return before;\n return `${before} ${after}`;\n}\nfunction truncateMiddle(str, maxLength = 100) {\n if (!str || maxLength < 1 || str.length <= maxLength) return str;\n if (maxLength == 1) return str.substring(0, 1) + '...';\n const halfLimit = Math.round(maxLength / 2);\n return str.substring(0, halfLimit) + '...' + str.substring(str.length - halfLimit);\n}\nconst __forward_ref__ = /*#__PURE__*/getClosureSafeProperty({\n __forward_ref__: getClosureSafeProperty\n});\nfunction forwardRef(forwardRefFn) {\n forwardRefFn.__forward_ref__ = forwardRef;\n if (ngDevMode) {\n forwardRefFn.toString = function () {\n return stringify(this());\n };\n }\n return forwardRefFn;\n}\nfunction resolveForwardRef(type) {\n return isForwardRef(type) ? type() : type;\n}\nfunction isForwardRef(fn) {\n return typeof fn === 'function' && fn.hasOwnProperty(__forward_ref__) && fn.__forward_ref__ === forwardRef;\n}\nfunction assertNumber(actual, msg) {\n if (!(typeof actual === 'number')) {\n throwError(msg, typeof actual, 'number', '===');\n }\n}\nfunction assertNumberInRange(actual, minInclusive, maxInclusive) {\n assertNumber(actual, 'Expected a number');\n assertLessThanOrEqual(actual, maxInclusive, 'Expected number to be less than or equal to');\n assertGreaterThanOrEqual(actual, minInclusive, 'Expected number to be greater than or equal to');\n}\nfunction assertString(actual, msg) {\n if (!(typeof actual === 'string')) {\n throwError(msg, actual === null ? 'null' : typeof actual, 'string', '===');\n }\n}\nfunction assertFunction(actual, msg) {\n if (!(typeof actual === 'function')) {\n throwError(msg, actual === null ? 'null' : typeof actual, 'function', '===');\n }\n}\nfunction assertEqual(actual, expected, msg) {\n if (!(actual == expected)) {\n throwError(msg, actual, expected, '==');\n }\n}\nfunction assertNotEqual(actual, expected, msg) {\n if (!(actual != expected)) {\n throwError(msg, actual, expected, '!=');\n }\n}\nfunction assertSame(actual, expected, msg) {\n if (!(actual === expected)) {\n throwError(msg, actual, expected, '===');\n }\n}\nfunction assertNotSame(actual, expected, msg) {\n if (!(actual !== expected)) {\n throwError(msg, actual, expected, '!==');\n }\n}\nfunction assertLessThan(actual, expected, msg) {\n if (!(actual < expected)) {\n throwError(msg, actual, expected, '<');\n }\n}\nfunction assertLessThanOrEqual(actual, expected, msg) {\n if (!(actual <= expected)) {\n throwError(msg, actual, expected, '<=');\n }\n}\nfunction assertGreaterThan(actual, expected, msg) {\n if (!(actual > expected)) {\n throwError(msg, actual, expected, '>');\n }\n}\nfunction assertGreaterThanOrEqual(actual, expected, msg) {\n if (!(actual >= expected)) {\n throwError(msg, actual, expected, '>=');\n }\n}\nfunction assertNotDefined(actual, msg) {\n if (actual != null) {\n throwError(msg, actual, null, '==');\n }\n}\nfunction assertDefined(actual, msg) {\n if (actual == null) {\n throwError(msg, actual, null, '!=');\n }\n}\nfunction throwError(msg, actual, expected, comparison) {\n throw new Error(`ASSERTION ERROR: ${msg}` + (comparison == null ? '' : ` [Expected=> ${expected} ${comparison} ${actual} <=Actual]`));\n}\nfunction assertDomNode(node) {\n if (!(node instanceof Node)) {\n throwError(`The provided value must be an instance of a DOM Node but got ${stringify(node)}`);\n }\n}\nfunction assertElement(node) {\n if (!(node instanceof Element)) {\n throwError(`The provided value must be an element but got ${stringify(node)}`);\n }\n}\nfunction assertIndexInRange(arr, index) {\n assertDefined(arr, 'Array must be defined.');\n const maxLen = arr.length;\n if (index < 0 || index >= maxLen) {\n throwError(`Index expected to be less than ${maxLen} but got ${index}`);\n }\n}\nfunction assertOneOf(value, ...validValues) {\n if (validValues.indexOf(value) !== -1) return true;\n throwError(`Expected value to be one of ${JSON.stringify(validValues)} but was ${JSON.stringify(value)}.`);\n}\nfunction assertNotReactive(fn) {\n if (getActiveConsumer() !== null) {\n throwError(`${fn}() should never be called in a reactive context.`);\n }\n}\nfunction \u0275\u0275defineInjectable(opts) {\n return {\n token: opts.token,\n providedIn: opts.providedIn || null,\n factory: opts.factory,\n value: undefined\n };\n}\nfunction \u0275\u0275defineInjector(options) {\n return {\n providers: options.providers || [],\n imports: options.imports || []\n };\n}\nfunction getInjectableDef(type) {\n return getOwnDefinition(type, NG_PROV_DEF);\n}\nfunction isInjectable(type) {\n return getInjectableDef(type) !== null;\n}\nfunction getOwnDefinition(type, field) {\n return type.hasOwnProperty(field) && type[field] || null;\n}\nfunction getInheritedInjectableDef(type) {\n const def = type?.[NG_PROV_DEF] ?? null;\n if (def) {\n ngDevMode && console.warn(`DEPRECATED: DI is instantiating a token \"${type.name}\" that inherits its @Injectable decorator but does not provide one itself.\\n` + `This will become an error in a future version of Angular. Please add @Injectable() to the \"${type.name}\" class.`);\n return def;\n } else {\n return null;\n }\n}\nfunction getInjectorDef(type) {\n return type && type.hasOwnProperty(NG_INJ_DEF) ? type[NG_INJ_DEF] : null;\n}\nconst NG_PROV_DEF = /*#__PURE__*/getClosureSafeProperty({\n \u0275prov: getClosureSafeProperty\n});\nconst NG_INJ_DEF = /*#__PURE__*/getClosureSafeProperty({\n \u0275inj: getClosureSafeProperty\n});\nclass InjectionToken {\n _desc;\n ngMetadataName = 'InjectionToken';\n \u0275prov;\n constructor(_desc, options) {\n this._desc = _desc;\n this.\u0275prov = undefined;\n if (typeof options == 'number') {\n (typeof ngDevMode === 'undefined' || ngDevMode) && assertLessThan(options, 0, 'Only negative numbers are supported here');\n this.__NG_ELEMENT_ID__ = options;\n } else if (options !== undefined) {\n this.\u0275prov = \u0275\u0275defineInjectable({\n token: this,\n providedIn: options.providedIn || 'root',\n factory: options.factory\n });\n }\n }\n get multi() {\n return this;\n }\n toString() {\n return `InjectionToken ${this._desc}`;\n }\n}\nlet _injectorProfilerContext;\nfunction getInjectorProfilerContext() {\n !ngDevMode && throwError('getInjectorProfilerContext should never be called in production mode');\n return _injectorProfilerContext;\n}\nfunction setInjectorProfilerContext(context) {\n !ngDevMode && throwError('setInjectorProfilerContext should never be called in production mode');\n const previous = _injectorProfilerContext;\n _injectorProfilerContext = context;\n return previous;\n}\nconst injectorProfilerCallbacks = [];\nconst NOOP_PROFILER_REMOVAL = () => {};\nfunction removeProfiler(profiler) {\n const profilerIdx = injectorProfilerCallbacks.indexOf(profiler);\n if (profilerIdx !== -1) {\n injectorProfilerCallbacks.splice(profilerIdx, 1);\n }\n}\nfunction setInjectorProfiler(injectorProfiler) {\n !ngDevMode && throwError('setInjectorProfiler should never be called in production mode');\n if (injectorProfiler !== null) {\n if (!injectorProfilerCallbacks.includes(injectorProfiler)) {\n injectorProfilerCallbacks.push(injectorProfiler);\n }\n return () => removeProfiler(injectorProfiler);\n } else {\n injectorProfilerCallbacks.length = 0;\n return NOOP_PROFILER_REMOVAL;\n }\n}\nfunction injectorProfiler(event) {\n !ngDevMode && throwError('Injector profiler should never be called in production mode');\n for (let i = 0; i < injectorProfilerCallbacks.length; i++) {\n const injectorProfilerCallback = injectorProfilerCallbacks[i];\n injectorProfilerCallback(event);\n }\n}\nfunction emitProviderConfiguredEvent(eventProvider, isViewProvider = false) {\n !ngDevMode && throwError('Injector profiler should never be called in production mode');\n let token;\n if (typeof eventProvider === 'function') {\n token = eventProvider;\n } else if (eventProvider instanceof InjectionToken) {\n token = eventProvider;\n } else {\n token = resolveForwardRef(eventProvider.provide);\n }\n let provider = eventProvider;\n if (eventProvider instanceof InjectionToken) {\n provider = eventProvider.\u0275prov || eventProvider;\n }\n injectorProfiler({\n type: 2,\n context: getInjectorProfilerContext(),\n providerRecord: {\n token,\n provider,\n isViewProvider\n }\n });\n}\nfunction emitInjectorToCreateInstanceEvent(token) {\n !ngDevMode && throwError('Injector profiler should never be called in production mode');\n injectorProfiler({\n type: 5,\n context: getInjectorProfilerContext(),\n token: token\n });\n}\nfunction emitInstanceCreatedByInjectorEvent(instance) {\n !ngDevMode && throwError('Injector profiler should never be called in production mode');\n injectorProfiler({\n type: 1,\n context: getInjectorProfilerContext(),\n instance: {\n value: instance\n }\n });\n}\nfunction emitInjectEvent(token, value, flags) {\n !ngDevMode && throwError('Injector profiler should never be called in production mode');\n injectorProfiler({\n type: 0,\n context: getInjectorProfilerContext(),\n service: {\n token,\n value,\n flags\n }\n });\n}\nfunction emitEffectCreatedEvent(effect) {\n !ngDevMode && throwError('Injector profiler should never be called in production mode');\n injectorProfiler({\n type: 3,\n context: getInjectorProfilerContext(),\n effect\n });\n}\nfunction emitAfterRenderEffectPhaseCreatedEvent(effectPhase) {\n !ngDevMode && throwError('Injector profiler should never be called in production mode');\n injectorProfiler({\n type: 4,\n context: getInjectorProfilerContext(),\n effectPhase\n });\n}\nfunction runInInjectorProfilerContext(injector, token, callback) {\n !ngDevMode && throwError('runInInjectorProfilerContext should never be called in production mode');\n const prevInjectContext = setInjectorProfilerContext({\n injector,\n token\n });\n try {\n callback();\n } finally {\n setInjectorProfilerContext(prevInjectContext);\n }\n}\nfunction isEnvironmentProviders(value) {\n return value && !!value.\u0275providers;\n}\nconst NG_COMP_DEF = /*#__PURE__*/getClosureSafeProperty({\n \u0275cmp: getClosureSafeProperty\n});\nconst NG_DIR_DEF = /*#__PURE__*/getClosureSafeProperty({\n \u0275dir: getClosureSafeProperty\n});\nconst NG_PIPE_DEF = /*#__PURE__*/getClosureSafeProperty({\n \u0275pipe: getClosureSafeProperty\n});\nconst NG_MOD_DEF = /*#__PURE__*/getClosureSafeProperty({\n \u0275mod: getClosureSafeProperty\n});\nconst NG_FACTORY_DEF = /*#__PURE__*/getClosureSafeProperty({\n \u0275fac: getClosureSafeProperty\n});\nconst NG_ELEMENT_ID = /*#__PURE__*/getClosureSafeProperty({\n __NG_ELEMENT_ID__: getClosureSafeProperty\n});\nconst NG_ENV_ID = /*#__PURE__*/getClosureSafeProperty({\n __NG_ENV_ID__: getClosureSafeProperty\n});\nfunction getNgModuleDef(type) {\n assertTypeDefined(type, '@NgModule');\n return type[NG_MOD_DEF] || null;\n}\nfunction getNgModuleDefOrThrow(type) {\n const ngModuleDef = getNgModuleDef(type);\n if (!ngModuleDef) {\n throw new RuntimeError(915, (typeof ngDevMode === 'undefined' || ngDevMode) && `Type ${stringify(type)} does not have '\u0275mod' property.`);\n }\n return ngModuleDef;\n}\nfunction getComponentDef(type) {\n assertTypeDefined(type, '@Component');\n return type[NG_COMP_DEF] || null;\n}\nfunction getDirectiveDefOrThrow(type) {\n const def = getDirectiveDef(type);\n if (!def) {\n throw new RuntimeError(916, (typeof ngDevMode === 'undefined' || ngDevMode) && `Type ${stringify(type)} does not have '\u0275dir' property.`);\n }\n return def;\n}\nfunction getDirectiveDef(type) {\n assertTypeDefined(type, '@Directive');\n return type[NG_DIR_DEF] || null;\n}\nfunction getPipeDef(type) {\n assertTypeDefined(type, '@Pipe');\n return type[NG_PIPE_DEF] || null;\n}\nfunction assertTypeDefined(type, symbolType) {\n if (type == null) {\n throw new RuntimeError(-919, (typeof ngDevMode === 'undefined' || ngDevMode) && `Cannot read ${symbolType} metadata. This can indicate a runtime ` + `circular dependency in your app that needs to be resolved.`);\n }\n}\nfunction isStandalone(type) {\n const def = getComponentDef(type) || getDirectiveDef(type) || getPipeDef(type);\n return def !== null && def.standalone;\n}\nfunction renderStringify(value) {\n if (typeof value === 'string') return value;\n if (value == null) return '';\n return String(value);\n}\nfunction stringifyForError(value) {\n if (typeof value === 'function') return value.name || value.toString();\n if (typeof value === 'object' && value != null && typeof value.type === 'function') {\n return value.type.name || value.type.toString();\n }\n return renderStringify(value);\n}\nfunction debugStringifyTypeForError(type) {\n const componentDef = getComponentDef(type);\n if (componentDef !== null && componentDef.debugInfo) {\n return stringifyTypeFromDebugInfo(componentDef.debugInfo);\n }\n return stringifyForError(type);\n}\nfunction stringifyTypeFromDebugInfo(debugInfo) {\n if (!debugInfo.filePath || !debugInfo.lineNumber) {\n return debugInfo.className;\n } else {\n return `${debugInfo.className} (at ${debugInfo.filePath}:${debugInfo.lineNumber})`;\n }\n}\nconst NG_RUNTIME_ERROR_CODE = /*#__PURE__*/getClosureSafeProperty({\n 'ngErrorCode': getClosureSafeProperty\n});\nconst NG_RUNTIME_ERROR_MESSAGE = /*#__PURE__*/getClosureSafeProperty({\n 'ngErrorMessage': getClosureSafeProperty\n});\nconst NG_TOKEN_PATH = /*#__PURE__*/getClosureSafeProperty({\n 'ngTokenPath': getClosureSafeProperty\n});\nfunction cyclicDependencyError(token, path) {\n const message = ngDevMode ? `Circular dependency detected for \\`${token}\\`.` : '';\n return createRuntimeError(message, -200, path);\n}\nfunction cyclicDependencyErrorWithDetails(token, path) {\n return augmentRuntimeError(cyclicDependencyError(token, path), null);\n}\nfunction throwMixedMultiProviderError() {\n throw new Error(`Cannot mix multi providers and regular providers`);\n}\nfunction throwInvalidProviderError(ngModuleType, providers, provider) {\n if (ngModuleType && providers) {\n const providerDetail = providers.map(v => v == provider ? '?' + provider + '?' : '...');\n throw new Error(`Invalid provider for the NgModule '${stringify(ngModuleType)}' - only instances of Provider and Type are allowed, got: [${providerDetail.join(', ')}]`);\n } else if (isEnvironmentProviders(provider)) {\n if (provider.\u0275fromNgModule) {\n throw new RuntimeError(-207, `Invalid providers from 'importProvidersFrom' present in a non-environment injector. 'importProvidersFrom' can't be used for component providers.`);\n } else {\n throw new RuntimeError(-207, `Invalid providers present in a non-environment injector. 'EnvironmentProviders' can't be used for component providers.`);\n }\n } else {\n throw new Error('Invalid provider');\n }\n}\nfunction throwProviderNotFoundError(token, injectorName) {\n const errorMessage = ngDevMode && `No provider for ${stringifyForError(token)} found${injectorName ? ` in ${injectorName}` : ''}`;\n throw new RuntimeError(-201, errorMessage);\n}\nfunction prependTokenToDependencyPath(error, token) {\n error[NG_TOKEN_PATH] ??= [];\n const currentPath = error[NG_TOKEN_PATH];\n let pathStr;\n if (typeof token === 'object' && 'multi' in token && token?.multi === true) {\n assertDefined(token.provide, 'Token with multi: true should have a provide property');\n pathStr = stringifyForError(token.provide);\n } else {\n pathStr = stringifyForError(token);\n }\n if (currentPath[0] !== pathStr) {\n error[NG_TOKEN_PATH].unshift(pathStr);\n }\n}\nfunction augmentRuntimeError(error, source) {\n const tokenPath = error[NG_TOKEN_PATH];\n const errorCode = error[NG_RUNTIME_ERROR_CODE];\n const message = error[NG_RUNTIME_ERROR_MESSAGE] || error.message;\n error.message = formatErrorMessage(message, errorCode, tokenPath, source);\n return error;\n}\nfunction createRuntimeError(message, code, path) {\n const error = new RuntimeError(code, message);\n error[NG_RUNTIME_ERROR_CODE] = code;\n error[NG_RUNTIME_ERROR_MESSAGE] = message;\n if (path) {\n error[NG_TOKEN_PATH] = path;\n }\n return error;\n}\nfunction getRuntimeErrorCode(error) {\n return error[NG_RUNTIME_ERROR_CODE];\n}\nfunction formatErrorMessage(text, code, path = [], source = null) {\n let pathDetails = '';\n if (path && path.length > 1) {\n pathDetails = ` Path: ${path.join(' -> ')}.`;\n }\n const sourceDetails = source ? ` Source: ${source}.` : '';\n return formatRuntimeError(code, `${text}${sourceDetails}${pathDetails}`);\n}\nlet _injectImplementation;\nfunction getInjectImplementation() {\n return _injectImplementation;\n}\nfunction setInjectImplementation(impl) {\n const previous = _injectImplementation;\n _injectImplementation = impl;\n return previous;\n}\nfunction injectRootLimpMode(token, notFoundValue, flags) {\n const injectableDef = getInjectableDef(token);\n if (injectableDef && injectableDef.providedIn == 'root') {\n return injectableDef.value === undefined ? injectableDef.value = injectableDef.factory() : injectableDef.value;\n }\n if (flags & 8) return null;\n if (notFoundValue !== undefined) return notFoundValue;\n throwProviderNotFoundError(token, typeof ngDevMode !== 'undefined' && ngDevMode ? 'Injector' : '');\n}\nfunction assertInjectImplementationNotEqual(fn) {\n ngDevMode && assertNotEqual(_injectImplementation, fn, 'Calling \u0275\u0275inject would cause infinite recursion');\n}\nconst _THROW_IF_NOT_FOUND = {};\nconst THROW_IF_NOT_FOUND = _THROW_IF_NOT_FOUND;\nconst DI_DECORATOR_FLAG = '__NG_DI_FLAG__';\nclass RetrievingInjector {\n injector;\n constructor(injector) {\n this.injector = injector;\n }\n retrieve(token, options) {\n const flags = convertToBitFlags(options) || 0;\n try {\n return this.injector.get(token, flags & 8 ? null : THROW_IF_NOT_FOUND, flags);\n } catch (e) {\n if (isNotFound(e)) {\n return e;\n }\n throw e;\n }\n }\n}\nfunction injectInjectorOnly(token, flags = 0) {\n const currentInjector = getCurrentInjector();\n if (currentInjector === undefined) {\n throw new RuntimeError(-203, ngDevMode && `The \\`${stringify(token)}\\` token injection failed. \\`inject()\\` function must be called from an injection context such as a constructor, a factory function, a field initializer, or a function used with \\`runInInjectionContext\\`.`);\n } else if (currentInjector === null) {\n return injectRootLimpMode(token, undefined, flags);\n } else {\n const options = convertToInjectOptions(flags);\n const value = currentInjector.retrieve(token, options);\n ngDevMode && emitInjectEvent(token, value, flags);\n if (isNotFound(value)) {\n if (options.optional) {\n return null;\n }\n throw value;\n }\n return value;\n }\n}\nfunction \u0275\u0275inject(token, flags = 0) {\n return (getInjectImplementation() || injectInjectorOnly)(resolveForwardRef(token), flags);\n}\nfunction \u0275\u0275invalidFactoryDep(index) {\n throw new RuntimeError(202, ngDevMode && `This constructor is not compatible with Angular Dependency Injection because its dependency at index ${index} of the parameter list is invalid.\nThis can happen if the dependency type is a primitive like a string or if an ancestor of this class is missing an Angular decorator.\n\nPlease check that 1) the type for the parameter at index ${index} is correct and 2) the correct Angular decorators are defined for this class and its ancestors.`);\n}\nfunction inject(token, options) {\n return \u0275\u0275inject(token, convertToBitFlags(options));\n}\nfunction convertToBitFlags(flags) {\n if (typeof flags === 'undefined' || typeof flags === 'number') {\n return flags;\n }\n return 0 | (flags.optional && 8) | (flags.host && 1) | (flags.self && 2) | (flags.skipSelf && 4);\n}\nfunction convertToInjectOptions(flags) {\n return {\n optional: !!(flags & 8),\n host: !!(flags & 1),\n self: !!(flags & 2),\n skipSelf: !!(flags & 4)\n };\n}\nfunction injectArgs(types) {\n const args = [];\n for (let i = 0; i < types.length; i++) {\n const arg = resolveForwardRef(types[i]);\n if (Array.isArray(arg)) {\n if (arg.length === 0) {\n throw new RuntimeError(900, ngDevMode && 'Arguments array must have arguments.');\n }\n let type = undefined;\n let flags = 0;\n for (let j = 0; j < arg.length; j++) {\n const meta = arg[j];\n const flag = getInjectFlag(meta);\n if (typeof flag === 'number') {\n if (flag === -1) {\n type = meta.token;\n } else {\n flags |= flag;\n }\n } else {\n type = meta;\n }\n }\n args.push(\u0275\u0275inject(type, flags));\n } else {\n args.push(\u0275\u0275inject(arg));\n }\n }\n return args;\n}\nfunction attachInjectFlag(decorator, flag) {\n decorator[DI_DECORATOR_FLAG] = flag;\n decorator.prototype[DI_DECORATOR_FLAG] = flag;\n return decorator;\n}\nfunction getInjectFlag(token) {\n return token[DI_DECORATOR_FLAG];\n}\nfunction getFactoryDef(type, throwNotFound) {\n const hasFactoryDef = type.hasOwnProperty(NG_FACTORY_DEF);\n if (!hasFactoryDef && throwNotFound === true && ngDevMode) {\n throw new Error(`Type ${stringify(type)} does not have '\u0275fac' property.`);\n }\n return hasFactoryDef ? type[NG_FACTORY_DEF] : null;\n}\nfunction arrayEquals(a, b, identityAccessor) {\n if (a.length !== b.length) return false;\n for (let i = 0; i < a.length; i++) {\n let valueA = a[i];\n let valueB = b[i];\n if (identityAccessor) {\n valueA = identityAccessor(valueA);\n valueB = identityAccessor(valueB);\n }\n if (valueB !== valueA) {\n return false;\n }\n }\n return true;\n}\nfunction flatten(list) {\n return list.flat(Number.POSITIVE_INFINITY);\n}\nfunction deepForEach(input, fn) {\n input.forEach(value => Array.isArray(value) ? deepForEach(value, fn) : fn(value));\n}\nfunction addToArray(arr, index, value) {\n if (index >= arr.length) {\n arr.push(value);\n } else {\n arr.splice(index, 0, value);\n }\n}\nfunction removeFromArray(arr, index) {\n if (index >= arr.length - 1) {\n return arr.pop();\n } else {\n return arr.splice(index, 1)[0];\n }\n}\nfunction newArray(size, value) {\n const list = [];\n for (let i = 0; i < size; i++) {\n list.push(value);\n }\n return list;\n}\nfunction arraySplice(array, index, count) {\n const length = array.length - count;\n while (index < length) {\n array[index] = array[index + count];\n index++;\n }\n while (count--) {\n array.pop();\n }\n}\nfunction arrayInsert2(array, index, value1, value2) {\n ngDevMode && assertLessThanOrEqual(index, array.length, \"Can't insert past array end.\");\n let end = array.length;\n if (end == index) {\n array.push(value1, value2);\n } else if (end === 1) {\n array.push(value2, array[0]);\n array[0] = value1;\n } else {\n end--;\n array.push(array[end - 1], array[end]);\n while (end > index) {\n const previousEnd = end - 2;\n array[end] = array[previousEnd];\n end--;\n }\n array[index] = value1;\n array[index + 1] = value2;\n }\n}\nfunction keyValueArraySet(keyValueArray, key, value) {\n let index = keyValueArrayIndexOf(keyValueArray, key);\n if (index >= 0) {\n keyValueArray[index | 1] = value;\n } else {\n index = ~index;\n arrayInsert2(keyValueArray, index, key, value);\n }\n return index;\n}\nfunction keyValueArrayGet(keyValueArray, key) {\n const index = keyValueArrayIndexOf(keyValueArray, key);\n if (index >= 0) {\n return keyValueArray[index | 1];\n }\n return undefined;\n}\nfunction keyValueArrayIndexOf(keyValueArray, key) {\n return _arrayIndexOfSorted(keyValueArray, key, 1);\n}\nfunction _arrayIndexOfSorted(array, value, shift) {\n ngDevMode && assertEqual(Array.isArray(array), true, 'Expecting an array');\n let start = 0;\n let end = array.length >> shift;\n while (end !== start) {\n const middle = start + (end - start >> 1);\n const current = array[middle << shift];\n if (value === current) {\n return middle << shift;\n } else if (current > value) {\n end = middle;\n } else {\n start = middle + 1;\n }\n }\n return ~(end << shift);\n}\nconst EMPTY_OBJ = {};\nconst EMPTY_ARRAY = [];\nif ((typeof ngDevMode === 'undefined' || ngDevMode) && /*#__PURE__*/initNgDevMode()) {\n /*#__PURE__*/Object.freeze(EMPTY_OBJ);\n /*#__PURE__*/Object.freeze(EMPTY_ARRAY);\n}\nconst ENVIRONMENT_INITIALIZER = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'ENVIRONMENT_INITIALIZER' : '');\nconst INJECTOR$1 = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'INJECTOR' : '', -1);\nconst INJECTOR_DEF_TYPES = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'INJECTOR_DEF_TYPES' : '');\nclass NullInjector {\n get(token, notFoundValue = THROW_IF_NOT_FOUND) {\n if (notFoundValue === THROW_IF_NOT_FOUND) {\n const message = ngDevMode ? `No provider found for \\`${stringify(token)}\\`.` : '';\n const error = createRuntimeError(message, -201);\n error.name = '\u0275NotFound';\n throw error;\n }\n return notFoundValue;\n }\n}\nfunction makeEnvironmentProviders(providers) {\n return {\n \u0275providers: providers\n };\n}\nfunction provideEnvironmentInitializer(initializerFn) {\n return makeEnvironmentProviders([{\n provide: ENVIRONMENT_INITIALIZER,\n multi: true,\n useValue: initializerFn\n }]);\n}\nfunction importProvidersFrom(...sources) {\n return {\n \u0275providers: internalImportProvidersFrom(true, sources),\n \u0275fromNgModule: true\n };\n}\nfunction internalImportProvidersFrom(checkForStandaloneCmp, ...sources) {\n const providersOut = [];\n const dedup = new Set();\n let injectorTypesWithProviders;\n const collectProviders = provider => {\n providersOut.push(provider);\n };\n deepForEach(sources, source => {\n if ((typeof ngDevMode === 'undefined' || ngDevMode) && checkForStandaloneCmp) {\n const cmpDef = getComponentDef(source);\n if (cmpDef?.standalone) {\n throw new RuntimeError(800, `Importing providers supports NgModule or ModuleWithProviders but got a standalone component \"${stringifyForError(source)}\"`);\n }\n }\n const internalSource = source;\n if (walkProviderTree(internalSource, collectProviders, [], dedup)) {\n injectorTypesWithProviders ||= [];\n injectorTypesWithProviders.push(internalSource);\n }\n });\n if (injectorTypesWithProviders !== undefined) {\n processInjectorTypesWithProviders(injectorTypesWithProviders, collectProviders);\n }\n return providersOut;\n}\nfunction processInjectorTypesWithProviders(typesWithProviders, visitor) {\n for (let i = 0; i < typesWithProviders.length; i++) {\n const {\n ngModule,\n providers\n } = typesWithProviders[i];\n deepForEachProvider(providers, provider => {\n ngDevMode && validateProvider(provider, providers || EMPTY_ARRAY, ngModule);\n visitor(provider, ngModule);\n });\n }\n}\nfunction walkProviderTree(container, visitor, parents, dedup) {\n container = resolveForwardRef(container);\n if (!container) return false;\n let defType = null;\n let injDef = getInjectorDef(container);\n const cmpDef = !injDef && getComponentDef(container);\n if (!injDef && !cmpDef) {\n const ngModule = container.ngModule;\n injDef = getInjectorDef(ngModule);\n if (injDef) {\n defType = ngModule;\n } else {\n return false;\n }\n } else if (cmpDef && !cmpDef.standalone) {\n return false;\n } else {\n defType = container;\n }\n if (ngDevMode && parents.indexOf(defType) !== -1) {\n const defName = stringify(defType);\n const path = parents.map(stringify).concat(defName);\n throw cyclicDependencyErrorWithDetails(defName, path);\n }\n const isDuplicate = dedup.has(defType);\n if (cmpDef) {\n if (isDuplicate) {\n return false;\n }\n dedup.add(defType);\n if (cmpDef.dependencies) {\n const deps = typeof cmpDef.dependencies === 'function' ? cmpDef.dependencies() : cmpDef.dependencies;\n for (const dep of deps) {\n walkProviderTree(dep, visitor, parents, dedup);\n }\n }\n } else if (injDef) {\n if (injDef.imports != null && !isDuplicate) {\n ngDevMode && parents.push(defType);\n dedup.add(defType);\n let importTypesWithProviders;\n try {\n deepForEach(injDef.imports, imported => {\n if (walkProviderTree(imported, visitor, parents, dedup)) {\n importTypesWithProviders ||= [];\n importTypesWithProviders.push(imported);\n }\n });\n } finally {\n ngDevMode && parents.pop();\n }\n if (importTypesWithProviders !== undefined) {\n processInjectorTypesWithProviders(importTypesWithProviders, visitor);\n }\n }\n if (!isDuplicate) {\n const factory = getFactoryDef(defType) || (() => new defType());\n visitor({\n provide: defType,\n useFactory: factory,\n deps: EMPTY_ARRAY\n }, defType);\n visitor({\n provide: INJECTOR_DEF_TYPES,\n useValue: defType,\n multi: true\n }, defType);\n visitor({\n provide: ENVIRONMENT_INITIALIZER,\n useValue: () => \u0275\u0275inject(defType),\n multi: true\n }, defType);\n }\n const defProviders = injDef.providers;\n if (defProviders != null && !isDuplicate) {\n const injectorType = container;\n deepForEachProvider(defProviders, provider => {\n ngDevMode && validateProvider(provider, defProviders, injectorType);\n visitor(provider, injectorType);\n });\n }\n } else {\n return false;\n }\n return defType !== container && container.providers !== undefined;\n}\nfunction validateProvider(provider, providers, containerType) {\n if (isTypeProvider(provider) || isValueProvider(provider) || isFactoryProvider(provider) || isExistingProvider(provider)) {\n return;\n }\n const classRef = resolveForwardRef(provider && (provider.useClass || provider.provide));\n if (!classRef) {\n throwInvalidProviderError(containerType, providers, provider);\n }\n}\nfunction deepForEachProvider(providers, fn) {\n for (let provider of providers) {\n if (isEnvironmentProviders(provider)) {\n provider = provider.\u0275providers;\n }\n if (Array.isArray(provider)) {\n deepForEachProvider(provider, fn);\n } else {\n fn(provider);\n }\n }\n}\nconst USE_VALUE = /*#__PURE__*/getClosureSafeProperty({\n provide: String,\n useValue: getClosureSafeProperty\n});\nfunction isValueProvider(value) {\n return value !== null && typeof value == 'object' && USE_VALUE in value;\n}\nfunction isExistingProvider(value) {\n return !!(value && value.useExisting);\n}\nfunction isFactoryProvider(value) {\n return !!(value && value.useFactory);\n}\nfunction isTypeProvider(value) {\n return typeof value === 'function';\n}\nfunction isClassProvider(value) {\n return !!value.useClass;\n}\nconst INJECTOR_SCOPE = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'Set Injector scope.' : '');\nconst NOT_YET = {};\nconst CIRCULAR = {};\nlet NULL_INJECTOR = undefined;\nfunction getNullInjector() {\n if (NULL_INJECTOR === undefined) {\n NULL_INJECTOR = new NullInjector();\n }\n return NULL_INJECTOR;\n}\nclass EnvironmentInjector {}\nclass R3Injector extends EnvironmentInjector {\n parent;\n source;\n scopes;\n records = /*#__PURE__*/new Map();\n _ngOnDestroyHooks = /*#__PURE__*/new Set();\n _onDestroyHooks = [];\n get destroyed() {\n return this._destroyed;\n }\n _destroyed = false;\n injectorDefTypes;\n constructor(providers, parent, source, scopes) {\n super();\n this.parent = parent;\n this.source = source;\n this.scopes = scopes;\n forEachSingleProvider(providers, provider => this.processProvider(provider));\n this.records.set(INJECTOR$1, makeRecord(undefined, this));\n if (scopes.has('environment')) {\n this.records.set(EnvironmentInjector, makeRecord(undefined, this));\n }\n const record = this.records.get(INJECTOR_SCOPE);\n if (record != null && typeof record.value === 'string') {\n this.scopes.add(record.value);\n }\n this.injectorDefTypes = new Set(this.get(INJECTOR_DEF_TYPES, EMPTY_ARRAY, {\n self: true\n }));\n }\n retrieve(token, options) {\n const flags = convertToBitFlags(options) || 0;\n try {\n return this.get(token, THROW_IF_NOT_FOUND, flags);\n } catch (e) {\n if (isNotFound$1(e)) {\n return e;\n }\n throw e;\n }\n }\n destroy() {\n assertNotDestroyed(this);\n this._destroyed = true;\n const prevConsumer = setActiveConsumer(null);\n try {\n for (const service of this._ngOnDestroyHooks) {\n service.ngOnDestroy();\n }\n const onDestroyHooks = this._onDestroyHooks;\n this._onDestroyHooks = [];\n for (const hook of onDestroyHooks) {\n hook();\n }\n } finally {\n this.records.clear();\n this._ngOnDestroyHooks.clear();\n this.injectorDefTypes.clear();\n setActiveConsumer(prevConsumer);\n }\n }\n onDestroy(callback) {\n assertNotDestroyed(this);\n this._onDestroyHooks.push(callback);\n return () => this.removeOnDestroy(callback);\n }\n runInContext(fn) {\n assertNotDestroyed(this);\n const previousInjector = setCurrentInjector(this);\n const previousInjectImplementation = setInjectImplementation(undefined);\n let prevInjectContext;\n if (ngDevMode) {\n prevInjectContext = setInjectorProfilerContext({\n injector: this,\n token: null\n });\n }\n try {\n return fn();\n } finally {\n setCurrentInjector(previousInjector);\n setInjectImplementation(previousInjectImplementation);\n ngDevMode && setInjectorProfilerContext(prevInjectContext);\n }\n }\n get(token, notFoundValue = THROW_IF_NOT_FOUND, options) {\n assertNotDestroyed(this);\n if (token.hasOwnProperty(NG_ENV_ID)) {\n return token[NG_ENV_ID](this);\n }\n const flags = convertToBitFlags(options);\n let prevInjectContext;\n if (ngDevMode) {\n prevInjectContext = setInjectorProfilerContext({\n injector: this,\n token: token\n });\n }\n const previousInjector = setCurrentInjector(this);\n const previousInjectImplementation = setInjectImplementation(undefined);\n try {\n if (!(flags & 4)) {\n let record = this.records.get(token);\n if (record === undefined) {\n const def = couldBeInjectableType(token) && getInjectableDef(token);\n if (def && this.injectableDefInScope(def)) {\n if (ngDevMode) {\n runInInjectorProfilerContext(this, token, () => {\n emitProviderConfiguredEvent(token);\n });\n }\n record = makeRecord(injectableDefOrInjectorDefFactory(token), NOT_YET);\n } else {\n record = null;\n }\n this.records.set(token, record);\n }\n if (record != null) {\n return this.hydrate(token, record, flags);\n }\n }\n const nextInjector = !(flags & 2) ? this.parent : getNullInjector();\n notFoundValue = flags & 8 && notFoundValue === THROW_IF_NOT_FOUND ? null : notFoundValue;\n return nextInjector.get(token, notFoundValue);\n } catch (error) {\n const errorCode = getRuntimeErrorCode(error);\n if (errorCode === -200 || errorCode === -201) {\n if (ngDevMode) {\n prependTokenToDependencyPath(error, token);\n if (previousInjector) {\n throw error;\n } else {\n throw augmentRuntimeError(error, this.source);\n }\n } else {\n throw new RuntimeError(errorCode, null);\n }\n } else {\n throw error;\n }\n } finally {\n setInjectImplementation(previousInjectImplementation);\n setCurrentInjector(previousInjector);\n ngDevMode && setInjectorProfilerContext(prevInjectContext);\n }\n }\n resolveInjectorInitializers() {\n const prevConsumer = setActiveConsumer(null);\n const previousInjector = setCurrentInjector(this);\n const previousInjectImplementation = setInjectImplementation(undefined);\n let prevInjectContext;\n if (ngDevMode) {\n prevInjectContext = setInjectorProfilerContext({\n injector: this,\n token: null\n });\n }\n try {\n const initializers = this.get(ENVIRONMENT_INITIALIZER, EMPTY_ARRAY, {\n self: true\n });\n if (ngDevMode && !Array.isArray(initializers)) {\n throw new RuntimeError(-209, 'Unexpected type of the `ENVIRONMENT_INITIALIZER` token value ' + `(expected an array, but got ${typeof initializers}). ` + 'Please check that the `ENVIRONMENT_INITIALIZER` token is configured as a ' + '`multi: true` provider.');\n }\n for (const initializer of initializers) {\n initializer();\n }\n } finally {\n setCurrentInjector(previousInjector);\n setInjectImplementation(previousInjectImplementation);\n ngDevMode && setInjectorProfilerContext(prevInjectContext);\n setActiveConsumer(prevConsumer);\n }\n }\n toString() {\n if (ngDevMode) {\n const tokens = [];\n const records = this.records;\n for (const token of records.keys()) {\n tokens.push(stringify(token));\n }\n return `R3Injector[${tokens.join(', ')}]`;\n }\n return 'R3Injector[...]';\n }\n processProvider(provider) {\n provider = resolveForwardRef(provider);\n let token = isTypeProvider(provider) ? provider : resolveForwardRef(provider && provider.provide);\n const record = providerToRecord(provider);\n if (ngDevMode) {\n runInInjectorProfilerContext(this, token, () => {\n if (isValueProvider(provider)) {\n emitInjectorToCreateInstanceEvent(token);\n emitInstanceCreatedByInjectorEvent(provider.useValue);\n }\n emitProviderConfiguredEvent(provider);\n });\n }\n if (!isTypeProvider(provider) && provider.multi === true) {\n let multiRecord = this.records.get(token);\n if (multiRecord) {\n if (ngDevMode && multiRecord.multi === undefined) {\n throwMixedMultiProviderError();\n }\n } else {\n multiRecord = makeRecord(undefined, NOT_YET, true);\n multiRecord.factory = () => injectArgs(multiRecord.multi);\n this.records.set(token, multiRecord);\n }\n token = provider;\n multiRecord.multi.push(provider);\n } else {\n if (ngDevMode) {\n const existing = this.records.get(token);\n if (existing && existing.multi !== undefined) {\n throwMixedMultiProviderError();\n }\n }\n }\n this.records.set(token, record);\n }\n hydrate(token, record, flags) {\n const prevConsumer = setActiveConsumer(null);\n try {\n if (record.value === CIRCULAR) {\n throw cyclicDependencyError(ngDevMode ? stringify(token) : '');\n } else if (record.value === NOT_YET) {\n record.value = CIRCULAR;\n if (ngDevMode) {\n runInInjectorProfilerContext(this, token, () => {\n emitInjectorToCreateInstanceEvent(token);\n record.value = record.factory(undefined, flags);\n emitInstanceCreatedByInjectorEvent(record.value);\n });\n } else {\n record.value = record.factory(undefined, flags);\n }\n }\n if (typeof record.value === 'object' && record.value && hasOnDestroy(record.value)) {\n this._ngOnDestroyHooks.add(record.value);\n }\n return record.value;\n } finally {\n setActiveConsumer(prevConsumer);\n }\n }\n injectableDefInScope(def) {\n if (!def.providedIn) {\n return false;\n }\n const providedIn = resolveForwardRef(def.providedIn);\n if (typeof providedIn === 'string') {\n return providedIn === 'any' || this.scopes.has(providedIn);\n } else {\n return this.injectorDefTypes.has(providedIn);\n }\n }\n removeOnDestroy(callback) {\n const destroyCBIdx = this._onDestroyHooks.indexOf(callback);\n if (destroyCBIdx !== -1) {\n this._onDestroyHooks.splice(destroyCBIdx, 1);\n }\n }\n}\nfunction injectableDefOrInjectorDefFactory(token) {\n const injectableDef = getInjectableDef(token);\n const factory = injectableDef !== null ? injectableDef.factory : getFactoryDef(token);\n if (factory !== null) {\n return factory;\n }\n if (token instanceof InjectionToken) {\n throw new RuntimeError(-204, ngDevMode && `Token ${stringify(token)} is missing a \u0275prov definition.`);\n }\n if (token instanceof Function) {\n return getUndecoratedInjectableFactory(token);\n }\n throw new RuntimeError(-204, ngDevMode && 'unreachable');\n}\nfunction getUndecoratedInjectableFactory(token) {\n const paramLength = token.length;\n if (paramLength > 0) {\n throw new RuntimeError(-204, ngDevMode && `Can't resolve all parameters for ${stringify(token)}: (${newArray(paramLength, '?').join(', ')}).`);\n }\n const inheritedInjectableDef = getInheritedInjectableDef(token);\n if (inheritedInjectableDef !== null) {\n return () => inheritedInjectableDef.factory(token);\n } else {\n return () => new token();\n }\n}\nfunction providerToRecord(provider) {\n if (isValueProvider(provider)) {\n return makeRecord(undefined, provider.useValue);\n } else {\n const factory = providerToFactory(provider);\n return makeRecord(factory, NOT_YET);\n }\n}\nfunction providerToFactory(provider, ngModuleType, providers) {\n let factory = undefined;\n if (ngDevMode && isEnvironmentProviders(provider)) {\n throwInvalidProviderError(undefined, providers, provider);\n }\n if (isTypeProvider(provider)) {\n const unwrappedProvider = resolveForwardRef(provider);\n return getFactoryDef(unwrappedProvider) || injectableDefOrInjectorDefFactory(unwrappedProvider);\n } else {\n if (isValueProvider(provider)) {\n factory = () => resolveForwardRef(provider.useValue);\n } else if (isFactoryProvider(provider)) {\n factory = () => provider.useFactory(...injectArgs(provider.deps || []));\n } else if (isExistingProvider(provider)) {\n factory = (_, flags) => \u0275\u0275inject(resolveForwardRef(provider.useExisting), flags !== undefined && flags & 8 ? 8 : undefined);\n } else {\n const classRef = resolveForwardRef(provider && (provider.useClass || provider.provide));\n if (ngDevMode && !classRef) {\n throwInvalidProviderError(ngModuleType, providers, provider);\n }\n if (hasDeps(provider)) {\n factory = () => new classRef(...injectArgs(provider.deps));\n } else {\n return getFactoryDef(classRef) || injectableDefOrInjectorDefFactory(classRef);\n }\n }\n }\n return factory;\n}\nfunction assertNotDestroyed(injector) {\n if (injector.destroyed) {\n throw new RuntimeError(-205, ngDevMode && 'Injector has already been destroyed.');\n }\n}\nfunction makeRecord(factory, value, multi = false) {\n return {\n factory: factory,\n value: value,\n multi: multi ? [] : undefined\n };\n}\nfunction hasDeps(value) {\n return !!value.deps;\n}\nfunction hasOnDestroy(value) {\n return value !== null && typeof value === 'object' && typeof value.ngOnDestroy === 'function';\n}\nfunction couldBeInjectableType(value) {\n return typeof value === 'function' || typeof value === 'object' && value.ngMetadataName === 'InjectionToken';\n}\nfunction forEachSingleProvider(providers, fn) {\n for (const provider of providers) {\n if (Array.isArray(provider)) {\n forEachSingleProvider(provider, fn);\n } else if (provider && isEnvironmentProviders(provider)) {\n forEachSingleProvider(provider.\u0275providers, fn);\n } else {\n fn(provider);\n }\n }\n}\nfunction runInInjectionContext(injector, fn) {\n let internalInjector;\n if (injector instanceof R3Injector) {\n assertNotDestroyed(injector);\n internalInjector = injector;\n } else {\n internalInjector = new RetrievingInjector(injector);\n }\n let prevInjectorProfilerContext;\n if (ngDevMode) {\n prevInjectorProfilerContext = setInjectorProfilerContext({\n injector,\n token: null\n });\n }\n const prevInjector = setCurrentInjector(internalInjector);\n const previousInjectImplementation = setInjectImplementation(undefined);\n try {\n return fn();\n } finally {\n setCurrentInjector(prevInjector);\n ngDevMode && setInjectorProfilerContext(prevInjectorProfilerContext);\n setInjectImplementation(previousInjectImplementation);\n }\n}\nfunction isInInjectionContext() {\n return getInjectImplementation() !== undefined || getCurrentInjector() != null;\n}\nfunction assertInInjectionContext(debugFn) {\n if (!isInInjectionContext()) {\n throw new RuntimeError(-203, ngDevMode && debugFn.name + '() can only be used within an injection context such as a constructor, a factory function, a field initializer, or a function used with `runInInjectionContext`');\n }\n}\nconst HOST = 0;\nconst TVIEW = 1;\nconst FLAGS = 2;\nconst PARENT = 3;\nconst NEXT = 4;\nconst T_HOST = 5;\nconst HYDRATION = 6;\nconst CLEANUP = 7;\nconst CONTEXT = 8;\nconst INJECTOR = 9;\nconst ENVIRONMENT = 10;\nconst RENDERER = 11;\nconst CHILD_HEAD = 12;\nconst CHILD_TAIL = 13;\nconst DECLARATION_VIEW = 14;\nconst DECLARATION_COMPONENT_VIEW = 15;\nconst DECLARATION_LCONTAINER = 16;\nconst PREORDER_HOOK_FLAGS = 17;\nconst QUERIES = 18;\nconst ID = 19;\nconst EMBEDDED_VIEW_INJECTOR = 20;\nconst ON_DESTROY_HOOKS = 21;\nconst EFFECTS_TO_SCHEDULE = 22;\nconst EFFECTS = 23;\nconst REACTIVE_TEMPLATE_CONSUMER = 24;\nconst AFTER_RENDER_SEQUENCES_TO_ADD = 25;\nconst ANIMATIONS = 26;\nconst HEADER_OFFSET = 27;\nconst TYPE = 1;\nconst DEHYDRATED_VIEWS = 6;\nconst NATIVE = 7;\nconst VIEW_REFS = 8;\nconst MOVED_VIEWS = 9;\nconst CONTAINER_HEADER_OFFSET = 10;\nfunction isLView(value) {\n return Array.isArray(value) && typeof value[TYPE] === 'object';\n}\nfunction isLContainer(value) {\n return Array.isArray(value) && value[TYPE] === true;\n}\nfunction isContentQueryHost(tNode) {\n return (tNode.flags & 4) !== 0;\n}\nfunction isComponentHost(tNode) {\n return tNode.componentOffset > -1;\n}\nfunction isDirectiveHost(tNode) {\n return (tNode.flags & 1) === 1;\n}\nfunction isComponentDef(def) {\n return !!def.template;\n}\nfunction isRootView(target) {\n return (target[FLAGS] & 512) !== 0;\n}\nfunction isProjectionTNode(tNode) {\n return (tNode.type & 16) === 16;\n}\nfunction hasI18n(lView) {\n return (lView[FLAGS] & 32) === 32;\n}\nfunction isDestroyed(lView) {\n return (lView[FLAGS] & 256) === 256;\n}\nfunction assertTNodeForLView(tNode, lView) {\n assertTNodeForTView(tNode, lView[TVIEW]);\n}\nfunction assertTNodeCreationIndex(lView, index) {\n const adjustedIndex = index + HEADER_OFFSET;\n assertIndexInRange(lView, adjustedIndex);\n assertLessThan(adjustedIndex, lView[TVIEW].bindingStartIndex, 'TNodes should be created before any bindings');\n}\nfunction assertTNodeForTView(tNode, tView) {\n assertTNode(tNode);\n const tData = tView.data;\n for (let i = HEADER_OFFSET; i < tData.length; i++) {\n if (tData[i] === tNode) {\n return;\n }\n }\n throwError('This TNode does not belong to this TView.');\n}\nfunction assertTNode(tNode) {\n assertDefined(tNode, 'TNode must be defined');\n if (!(tNode && typeof tNode === 'object' && tNode.hasOwnProperty('directiveStylingLast'))) {\n throwError('Not of type TNode, got: ' + tNode);\n }\n}\nfunction assertTIcu(tIcu) {\n assertDefined(tIcu, 'Expected TIcu to be defined');\n if (!(typeof tIcu.currentCaseLViewIndex === 'number')) {\n throwError('Object is not of TIcu type.');\n }\n}\nfunction assertComponentType(actual, msg = \"Type passed in is not ComponentType, it does not have '\u0275cmp' property.\") {\n if (!getComponentDef(actual)) {\n throwError(msg);\n }\n}\nfunction assertNgModuleType(actual, msg = \"Type passed in is not NgModuleType, it does not have '\u0275mod' property.\") {\n if (!getNgModuleDef(actual)) {\n throwError(msg);\n }\n}\nfunction assertHasParent(tNode) {\n assertDefined(tNode, 'currentTNode should exist!');\n assertDefined(tNode.parent, 'currentTNode should have a parent');\n}\nfunction assertLContainer(value) {\n assertDefined(value, 'LContainer must be defined');\n assertEqual(isLContainer(value), true, 'Expecting LContainer');\n}\nfunction assertLViewOrUndefined(value) {\n value && assertEqual(isLView(value), true, 'Expecting LView or undefined or null');\n}\nfunction assertLView(value) {\n assertDefined(value, 'LView must be defined');\n assertEqual(isLView(value), true, 'Expecting LView');\n}\nfunction assertFirstCreatePass(tView, errMessage) {\n assertEqual(tView.firstCreatePass, true, errMessage || 'Should only be called in first create pass.');\n}\nfunction assertFirstUpdatePass(tView, errMessage) {\n assertEqual(tView.firstUpdatePass, true, 'Should only be called in first update pass.');\n}\nfunction assertDirectiveDef(obj) {\n if (obj.type === undefined || obj.selectors == undefined || obj.inputs === undefined) {\n throwError(`Expected a DirectiveDef/ComponentDef and this object does not seem to have the expected shape.`);\n }\n}\nfunction assertIndexInDeclRange(tView, index) {\n assertBetween(HEADER_OFFSET, tView.bindingStartIndex, index);\n}\nfunction assertIndexInExpandoRange(lView, index) {\n const tView = lView[1];\n assertBetween(tView.expandoStartIndex, lView.length, index);\n}\nfunction assertBetween(lower, upper, index) {\n if (!(lower <= index && index < upper)) {\n throwError(`Index out of range (expecting ${lower} <= ${index} < ${upper})`);\n }\n}\nfunction assertProjectionSlots(lView, errMessage) {\n assertDefined(lView[DECLARATION_COMPONENT_VIEW], 'Component views should exist.');\n assertDefined(lView[DECLARATION_COMPONENT_VIEW][T_HOST].projection, 'Components with projection nodes () must have projection slots defined.');\n}\nfunction assertParentView(lView, errMessage) {\n assertDefined(lView, \"Component views should always have a parent view (component's host view)\");\n}\nfunction assertNodeInjector(lView, injectorIndex) {\n assertIndexInExpandoRange(lView, injectorIndex);\n assertIndexInExpandoRange(lView, injectorIndex + 8);\n assertNumber(lView[injectorIndex + 0], 'injectorIndex should point to a bloom filter');\n assertNumber(lView[injectorIndex + 1], 'injectorIndex should point to a bloom filter');\n assertNumber(lView[injectorIndex + 2], 'injectorIndex should point to a bloom filter');\n assertNumber(lView[injectorIndex + 3], 'injectorIndex should point to a bloom filter');\n assertNumber(lView[injectorIndex + 4], 'injectorIndex should point to a bloom filter');\n assertNumber(lView[injectorIndex + 5], 'injectorIndex should point to a bloom filter');\n assertNumber(lView[injectorIndex + 6], 'injectorIndex should point to a bloom filter');\n assertNumber(lView[injectorIndex + 7], 'injectorIndex should point to a bloom filter');\n assertNumber(lView[injectorIndex + 8], 'injectorIndex should point to parent injector');\n}\nconst SVG_NAMESPACE = 'svg';\nconst MATH_ML_NAMESPACE = 'math';\nfunction unwrapRNode(value) {\n while (Array.isArray(value)) {\n value = value[HOST];\n }\n return value;\n}\nfunction unwrapLView(value) {\n while (Array.isArray(value)) {\n if (typeof value[TYPE] === 'object') return value;\n value = value[HOST];\n }\n return null;\n}\nfunction getNativeByIndex(index, lView) {\n ngDevMode && assertIndexInRange(lView, index);\n ngDevMode && assertGreaterThanOrEqual(index, HEADER_OFFSET, 'Expected to be past HEADER_OFFSET');\n return unwrapRNode(lView[index]);\n}\nfunction getNativeByTNode(tNode, lView) {\n ngDevMode && assertTNodeForLView(tNode, lView);\n ngDevMode && assertIndexInRange(lView, tNode.index);\n const node = unwrapRNode(lView[tNode.index]);\n return node;\n}\nfunction getNativeByTNodeOrNull(tNode, lView) {\n const index = tNode === null ? -1 : tNode.index;\n if (index !== -1) {\n ngDevMode && assertTNodeForLView(tNode, lView);\n const node = unwrapRNode(lView[index]);\n return node;\n }\n return null;\n}\nfunction getTNode(tView, index) {\n ngDevMode && assertGreaterThan(index, -1, 'wrong index for TNode');\n ngDevMode && assertLessThan(index, tView.data.length, 'wrong index for TNode');\n const tNode = tView.data[index];\n ngDevMode && tNode !== null && assertTNode(tNode);\n return tNode;\n}\nfunction load(view, index) {\n ngDevMode && assertIndexInRange(view, index);\n return view[index];\n}\nfunction store(tView, lView, index, value) {\n if (index >= tView.data.length) {\n tView.data[index] = null;\n tView.blueprint[index] = null;\n }\n lView[index] = value;\n}\nfunction getComponentLViewByIndex(nodeIndex, hostView) {\n ngDevMode && assertIndexInRange(hostView, nodeIndex);\n const slotValue = hostView[nodeIndex];\n const lView = isLView(slotValue) ? slotValue : slotValue[HOST];\n return lView;\n}\nfunction isCreationMode(view) {\n return (view[FLAGS] & 4) === 4;\n}\nfunction viewAttachedToChangeDetector(view) {\n return (view[FLAGS] & 128) === 128;\n}\nfunction viewAttachedToContainer(view) {\n return isLContainer(view[PARENT]);\n}\nfunction getConstant(consts, index) {\n if (index === null || index === undefined) return null;\n ngDevMode && assertIndexInRange(consts, index);\n return consts[index];\n}\nfunction resetPreOrderHookFlags(lView) {\n lView[PREORDER_HOOK_FLAGS] = 0;\n}\nfunction markViewForRefresh(lView) {\n if (lView[FLAGS] & 1024) {\n return;\n }\n lView[FLAGS] |= 1024;\n if (viewAttachedToChangeDetector(lView)) {\n markAncestorsForTraversal(lView);\n }\n}\nfunction walkUpViews(nestingLevel, currentView) {\n while (nestingLevel > 0) {\n ngDevMode && assertDefined(currentView[DECLARATION_VIEW], 'Declaration view should be defined if nesting level is greater than 0.');\n currentView = currentView[DECLARATION_VIEW];\n nestingLevel--;\n }\n return currentView;\n}\nfunction requiresRefreshOrTraversal(lView) {\n return !!(lView[FLAGS] & (1024 | 8192) || lView[REACTIVE_TEMPLATE_CONSUMER]?.dirty);\n}\nfunction updateAncestorTraversalFlagsOnAttach(lView) {\n lView[ENVIRONMENT].changeDetectionScheduler?.notify(8);\n if (lView[FLAGS] & 64) {\n lView[FLAGS] |= 1024;\n }\n if (requiresRefreshOrTraversal(lView)) {\n markAncestorsForTraversal(lView);\n }\n}\nfunction markAncestorsForTraversal(lView) {\n lView[ENVIRONMENT].changeDetectionScheduler?.notify(0);\n let parent = getLViewParent(lView);\n while (parent !== null) {\n if (parent[FLAGS] & 8192) {\n break;\n }\n parent[FLAGS] |= 8192;\n if (!viewAttachedToChangeDetector(parent)) {\n break;\n }\n parent = getLViewParent(parent);\n }\n}\nfunction storeLViewOnDestroy(lView, onDestroyCallback) {\n if (isDestroyed(lView)) {\n throw new RuntimeError(911, ngDevMode && 'View has already been destroyed.');\n }\n if (lView[ON_DESTROY_HOOKS] === null) {\n lView[ON_DESTROY_HOOKS] = [];\n }\n lView[ON_DESTROY_HOOKS].push(onDestroyCallback);\n}\nfunction removeLViewOnDestroy(lView, onDestroyCallback) {\n if (lView[ON_DESTROY_HOOKS] === null) return;\n const destroyCBIdx = lView[ON_DESTROY_HOOKS].indexOf(onDestroyCallback);\n if (destroyCBIdx !== -1) {\n lView[ON_DESTROY_HOOKS].splice(destroyCBIdx, 1);\n }\n}\nfunction getLViewParent(lView) {\n ngDevMode && assertLView(lView);\n const parent = lView[PARENT];\n return isLContainer(parent) ? parent[PARENT] : parent;\n}\nfunction getOrCreateLViewCleanup(view) {\n return view[CLEANUP] ??= [];\n}\nfunction getOrCreateTViewCleanup(tView) {\n return tView.cleanup ??= [];\n}\nfunction storeCleanupWithContext(tView, lView, context, cleanupFn) {\n const lCleanup = getOrCreateLViewCleanup(lView);\n ngDevMode && assertDefined(context, 'Cleanup context is mandatory when registering framework-level destroy hooks');\n lCleanup.push(context);\n if (tView.firstCreatePass) {\n getOrCreateTViewCleanup(tView).push(cleanupFn, lCleanup.length - 1);\n } else {\n if (ngDevMode) {\n Object.freeze(getOrCreateTViewCleanup(tView));\n }\n }\n}\nconst instructionState = {\n lFrame: /*#__PURE__*/createLFrame(null),\n bindingsEnabled: true,\n skipHydrationRootTNode: null\n};\nvar CheckNoChangesMode = /*#__PURE__*/function (CheckNoChangesMode) {\n CheckNoChangesMode[CheckNoChangesMode[\"Off\"] = 0] = \"Off\";\n CheckNoChangesMode[CheckNoChangesMode[\"Exhaustive\"] = 1] = \"Exhaustive\";\n CheckNoChangesMode[CheckNoChangesMode[\"OnlyDirtyViews\"] = 2] = \"OnlyDirtyViews\";\n return CheckNoChangesMode;\n}(CheckNoChangesMode || {});\nlet _checkNoChangesMode = 0;\nlet _isRefreshingViews = false;\nfunction getElementDepthCount() {\n return instructionState.lFrame.elementDepthCount;\n}\nfunction increaseElementDepthCount() {\n instructionState.lFrame.elementDepthCount++;\n}\nfunction decreaseElementDepthCount() {\n instructionState.lFrame.elementDepthCount--;\n}\nfunction getBindingsEnabled() {\n return instructionState.bindingsEnabled;\n}\nfunction isInSkipHydrationBlock() {\n return instructionState.skipHydrationRootTNode !== null;\n}\nfunction isSkipHydrationRootTNode(tNode) {\n return instructionState.skipHydrationRootTNode === tNode;\n}\nfunction \u0275\u0275enableBindings() {\n instructionState.bindingsEnabled = true;\n}\nfunction enterSkipHydrationBlock(tNode) {\n instructionState.skipHydrationRootTNode = tNode;\n}\nfunction \u0275\u0275disableBindings() {\n instructionState.bindingsEnabled = false;\n}\nfunction leaveSkipHydrationBlock() {\n instructionState.skipHydrationRootTNode = null;\n}\nfunction getLView() {\n return instructionState.lFrame.lView;\n}\nfunction getTView() {\n return instructionState.lFrame.tView;\n}\nfunction \u0275\u0275restoreView(viewToRestore) {\n instructionState.lFrame.contextLView = viewToRestore;\n return viewToRestore[CONTEXT];\n}\nfunction \u0275\u0275resetView(value) {\n instructionState.lFrame.contextLView = null;\n return value;\n}\nfunction getCurrentTNode() {\n let currentTNode = getCurrentTNodePlaceholderOk();\n while (currentTNode !== null && currentTNode.type === 64) {\n currentTNode = currentTNode.parent;\n }\n return currentTNode;\n}\nfunction getCurrentTNodePlaceholderOk() {\n return instructionState.lFrame.currentTNode;\n}\nfunction getCurrentParentTNode() {\n const lFrame = instructionState.lFrame;\n const currentTNode = lFrame.currentTNode;\n return lFrame.isParent ? currentTNode : currentTNode.parent;\n}\nfunction setCurrentTNode(tNode, isParent) {\n ngDevMode && tNode && assertTNodeForTView(tNode, instructionState.lFrame.tView);\n const lFrame = instructionState.lFrame;\n lFrame.currentTNode = tNode;\n lFrame.isParent = isParent;\n}\nfunction isCurrentTNodeParent() {\n return instructionState.lFrame.isParent;\n}\nfunction setCurrentTNodeAsNotParent() {\n instructionState.lFrame.isParent = false;\n}\nfunction getContextLView() {\n const contextLView = instructionState.lFrame.contextLView;\n ngDevMode && assertDefined(contextLView, 'contextLView must be defined.');\n return contextLView;\n}\nfunction isInCheckNoChangesMode() {\n !ngDevMode && throwError('Must never be called in production mode');\n return _checkNoChangesMode !== CheckNoChangesMode.Off;\n}\nfunction isExhaustiveCheckNoChanges() {\n !ngDevMode && throwError('Must never be called in production mode');\n return _checkNoChangesMode === CheckNoChangesMode.Exhaustive;\n}\nfunction setIsInCheckNoChangesMode(mode) {\n !ngDevMode && throwError('Must never be called in production mode');\n _checkNoChangesMode = mode;\n}\nfunction isRefreshingViews() {\n return _isRefreshingViews;\n}\nfunction setIsRefreshingViews(mode) {\n const prev = _isRefreshingViews;\n _isRefreshingViews = mode;\n return prev;\n}\nfunction getBindingRoot() {\n const lFrame = instructionState.lFrame;\n let index = lFrame.bindingRootIndex;\n if (index === -1) {\n index = lFrame.bindingRootIndex = lFrame.tView.bindingStartIndex;\n }\n return index;\n}\nfunction getBindingIndex() {\n return instructionState.lFrame.bindingIndex;\n}\nfunction setBindingIndex(value) {\n return instructionState.lFrame.bindingIndex = value;\n}\nfunction nextBindingIndex() {\n return instructionState.lFrame.bindingIndex++;\n}\nfunction incrementBindingIndex(count) {\n const lFrame = instructionState.lFrame;\n const index = lFrame.bindingIndex;\n lFrame.bindingIndex = lFrame.bindingIndex + count;\n return index;\n}\nfunction isInI18nBlock() {\n return instructionState.lFrame.inI18n;\n}\nfunction setInI18nBlock(isInI18nBlock) {\n instructionState.lFrame.inI18n = isInI18nBlock;\n}\nfunction setBindingRootForHostBindings(bindingRootIndex, currentDirectiveIndex) {\n const lFrame = instructionState.lFrame;\n lFrame.bindingIndex = lFrame.bindingRootIndex = bindingRootIndex;\n setCurrentDirectiveIndex(currentDirectiveIndex);\n}\nfunction getCurrentDirectiveIndex() {\n return instructionState.lFrame.currentDirectiveIndex;\n}\nfunction setCurrentDirectiveIndex(currentDirectiveIndex) {\n instructionState.lFrame.currentDirectiveIndex = currentDirectiveIndex;\n}\nfunction getCurrentDirectiveDef(tData) {\n const currentDirectiveIndex = instructionState.lFrame.currentDirectiveIndex;\n return currentDirectiveIndex === -1 ? null : tData[currentDirectiveIndex];\n}\nfunction getCurrentQueryIndex() {\n return instructionState.lFrame.currentQueryIndex;\n}\nfunction setCurrentQueryIndex(value) {\n instructionState.lFrame.currentQueryIndex = value;\n}\nfunction getDeclarationTNode(lView) {\n const tView = lView[TVIEW];\n if (tView.type === 2) {\n ngDevMode && assertDefined(tView.declTNode, 'Embedded TNodes should have declaration parents.');\n return tView.declTNode;\n }\n if (tView.type === 1) {\n return lView[T_HOST];\n }\n return null;\n}\nfunction enterDI(lView, tNode, flags) {\n ngDevMode && assertLViewOrUndefined(lView);\n if (flags & 4) {\n ngDevMode && assertTNodeForTView(tNode, lView[TVIEW]);\n let parentTNode = tNode;\n let parentLView = lView;\n while (true) {\n ngDevMode && assertDefined(parentTNode, 'Parent TNode should be defined');\n parentTNode = parentTNode.parent;\n if (parentTNode === null && !(flags & 1)) {\n parentTNode = getDeclarationTNode(parentLView);\n if (parentTNode === null) break;\n ngDevMode && assertDefined(parentLView, 'Parent LView should be defined');\n parentLView = parentLView[DECLARATION_VIEW];\n if (parentTNode.type & (2 | 8)) {\n break;\n }\n } else {\n break;\n }\n }\n if (parentTNode === null) {\n return false;\n } else {\n tNode = parentTNode;\n lView = parentLView;\n }\n }\n ngDevMode && assertTNodeForLView(tNode, lView);\n const lFrame = instructionState.lFrame = allocLFrame();\n lFrame.currentTNode = tNode;\n lFrame.lView = lView;\n return true;\n}\nfunction enterView(newView) {\n ngDevMode && assertNotEqual(newView[0], newView[1], '????');\n ngDevMode && assertLViewOrUndefined(newView);\n const newLFrame = allocLFrame();\n if (ngDevMode) {\n assertEqual(newLFrame.isParent, true, 'Expected clean LFrame');\n assertEqual(newLFrame.lView, null, 'Expected clean LFrame');\n assertEqual(newLFrame.tView, null, 'Expected clean LFrame');\n assertEqual(newLFrame.selectedIndex, -1, 'Expected clean LFrame');\n assertEqual(newLFrame.elementDepthCount, 0, 'Expected clean LFrame');\n assertEqual(newLFrame.currentDirectiveIndex, -1, 'Expected clean LFrame');\n assertEqual(newLFrame.currentNamespace, null, 'Expected clean LFrame');\n assertEqual(newLFrame.bindingRootIndex, -1, 'Expected clean LFrame');\n assertEqual(newLFrame.currentQueryIndex, 0, 'Expected clean LFrame');\n }\n const tView = newView[TVIEW];\n instructionState.lFrame = newLFrame;\n ngDevMode && tView.firstChild && assertTNodeForTView(tView.firstChild, tView);\n newLFrame.currentTNode = tView.firstChild;\n newLFrame.lView = newView;\n newLFrame.tView = tView;\n newLFrame.contextLView = newView;\n newLFrame.bindingIndex = tView.bindingStartIndex;\n newLFrame.inI18n = false;\n}\nfunction allocLFrame() {\n const currentLFrame = instructionState.lFrame;\n const childLFrame = currentLFrame === null ? null : currentLFrame.child;\n const newLFrame = childLFrame === null ? createLFrame(currentLFrame) : childLFrame;\n return newLFrame;\n}\nfunction createLFrame(parent) {\n const lFrame = {\n currentTNode: null,\n isParent: true,\n lView: null,\n tView: null,\n selectedIndex: -1,\n contextLView: null,\n elementDepthCount: 0,\n currentNamespace: null,\n currentDirectiveIndex: -1,\n bindingRootIndex: -1,\n bindingIndex: -1,\n currentQueryIndex: 0,\n parent: parent,\n child: null,\n inI18n: false\n };\n parent !== null && (parent.child = lFrame);\n return lFrame;\n}\nfunction leaveViewLight() {\n const oldLFrame = instructionState.lFrame;\n instructionState.lFrame = oldLFrame.parent;\n oldLFrame.currentTNode = null;\n oldLFrame.lView = null;\n return oldLFrame;\n}\nconst leaveDI = leaveViewLight;\nfunction leaveView() {\n const oldLFrame = leaveViewLight();\n oldLFrame.isParent = true;\n oldLFrame.tView = null;\n oldLFrame.selectedIndex = -1;\n oldLFrame.contextLView = null;\n oldLFrame.elementDepthCount = 0;\n oldLFrame.currentDirectiveIndex = -1;\n oldLFrame.currentNamespace = null;\n oldLFrame.bindingRootIndex = -1;\n oldLFrame.bindingIndex = -1;\n oldLFrame.currentQueryIndex = 0;\n}\nfunction nextContextImpl(level) {\n const contextLView = instructionState.lFrame.contextLView = walkUpViews(level, instructionState.lFrame.contextLView);\n return contextLView[CONTEXT];\n}\nfunction getSelectedIndex() {\n return instructionState.lFrame.selectedIndex;\n}\nfunction setSelectedIndex(index) {\n ngDevMode && index !== -1 && assertGreaterThanOrEqual(index, HEADER_OFFSET, 'Index must be past HEADER_OFFSET (or -1).');\n ngDevMode && assertLessThan(index, instructionState.lFrame.lView.length, \"Can't set index passed end of LView\");\n instructionState.lFrame.selectedIndex = index;\n}\nfunction getSelectedTNode() {\n const lFrame = instructionState.lFrame;\n return getTNode(lFrame.tView, lFrame.selectedIndex);\n}\nfunction \u0275\u0275namespaceSVG() {\n instructionState.lFrame.currentNamespace = SVG_NAMESPACE;\n}\nfunction \u0275\u0275namespaceMathML() {\n instructionState.lFrame.currentNamespace = MATH_ML_NAMESPACE;\n}\nfunction \u0275\u0275namespaceHTML() {\n namespaceHTMLInternal();\n}\nfunction namespaceHTMLInternal() {\n instructionState.lFrame.currentNamespace = null;\n}\nfunction getNamespace() {\n return instructionState.lFrame.currentNamespace;\n}\nlet _wasLastNodeCreated = true;\nfunction wasLastNodeCreated() {\n return _wasLastNodeCreated;\n}\nfunction lastNodeWasCreated(flag) {\n _wasLastNodeCreated = flag;\n}\nfunction createInjector(defType, parent = null, additionalProviders = null, name) {\n const injector = createInjectorWithoutInjectorInstances(defType, parent, additionalProviders, name);\n injector.resolveInjectorInitializers();\n return injector;\n}\nfunction createInjectorWithoutInjectorInstances(defType, parent = null, additionalProviders = null, name, scopes = new Set()) {\n const providers = [additionalProviders || EMPTY_ARRAY, importProvidersFrom(defType)];\n let source = undefined;\n if (ngDevMode) {\n source = name || (typeof defType === 'object' ? undefined : stringify(defType));\n }\n return new R3Injector(providers, parent || getNullInjector(), source || null, scopes);\n}\nclass Injector {\n static THROW_IF_NOT_FOUND = THROW_IF_NOT_FOUND;\n static NULL = /*#__PURE__*/new NullInjector();\n static create(options, parent) {\n if (Array.isArray(options)) {\n return createInjector({\n name: ''\n }, parent, options, '');\n } else {\n const name = options.name ?? '';\n return createInjector({\n name\n }, options.parent, options.providers, name);\n }\n }\n static \u0275prov = /* @__PURE__ */\n \u0275\u0275defineInjectable({\n token: Injector,\n providedIn: 'any',\n factory: () => \u0275\u0275inject(INJECTOR$1)\n });\n static __NG_ELEMENT_ID__ = -1;\n}\nconst DOCUMENT = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'DocumentToken' : '');\nlet DestroyRef = /*#__PURE__*/(() => {\n class DestroyRef {\n static __NG_ELEMENT_ID__ = injectDestroyRef;\n static __NG_ENV_ID__ = injector => injector;\n }\n return DestroyRef;\n})();\nclass NodeInjectorDestroyRef extends DestroyRef {\n _lView;\n constructor(_lView) {\n super();\n this._lView = _lView;\n }\n get destroyed() {\n return isDestroyed(this._lView);\n }\n onDestroy(callback) {\n const lView = this._lView;\n storeLViewOnDestroy(lView, callback);\n return () => removeLViewOnDestroy(lView, callback);\n }\n}\nfunction injectDestroyRef() {\n return new NodeInjectorDestroyRef(getLView());\n}\nconst SCHEDULE_IN_ROOT_ZONE_DEFAULT = false;\nconst DEBUG_TASK_TRACKER = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'DEBUG_TASK_TRACKER' : '');\nlet PendingTasksInternal = /*#__PURE__*/(() => {\n class PendingTasksInternal {\n taskId = 0;\n pendingTasks = new Set();\n destroyed = false;\n pendingTask = new BehaviorSubject(false);\n debugTaskTracker = inject(DEBUG_TASK_TRACKER, {\n optional: true\n });\n get hasPendingTasks() {\n return this.destroyed ? false : this.pendingTask.value;\n }\n get hasPendingTasksObservable() {\n if (this.destroyed) {\n return new Observable(subscriber => {\n subscriber.next(false);\n subscriber.complete();\n });\n }\n return this.pendingTask;\n }\n add() {\n if (!this.hasPendingTasks && !this.destroyed) {\n this.pendingTask.next(true);\n }\n const taskId = this.taskId++;\n this.pendingTasks.add(taskId);\n this.debugTaskTracker?.add(taskId);\n return taskId;\n }\n has(taskId) {\n return this.pendingTasks.has(taskId);\n }\n remove(taskId) {\n this.pendingTasks.delete(taskId);\n this.debugTaskTracker?.remove(taskId);\n if (this.pendingTasks.size === 0 && this.hasPendingTasks) {\n this.pendingTask.next(false);\n }\n }\n ngOnDestroy() {\n this.pendingTasks.clear();\n if (this.hasPendingTasks) {\n this.pendingTask.next(false);\n }\n this.destroyed = true;\n this.pendingTask.unsubscribe();\n }\n static \u0275prov = /* @__PURE__ */\n \u0275\u0275defineInjectable({\n token: PendingTasksInternal,\n providedIn: 'root',\n factory: () => new PendingTasksInternal()\n });\n }\n return PendingTasksInternal;\n})();\nclass EventEmitter_ extends Subject {\n __isAsync;\n destroyRef = undefined;\n pendingTasks = undefined;\n constructor(isAsync = false) {\n super();\n this.__isAsync = isAsync;\n if (isInInjectionContext()) {\n this.destroyRef = inject(DestroyRef, {\n optional: true\n }) ?? undefined;\n this.pendingTasks = inject(PendingTasksInternal, {\n optional: true\n }) ?? undefined;\n }\n }\n emit(value) {\n const prevConsumer = setActiveConsumer$1(null);\n try {\n super.next(value);\n } finally {\n setActiveConsumer$1(prevConsumer);\n }\n }\n subscribe(observerOrNext, error, complete) {\n let nextFn = observerOrNext;\n let errorFn = error || (() => null);\n let completeFn = complete;\n if (observerOrNext && typeof observerOrNext === 'object') {\n const observer = observerOrNext;\n nextFn = observer.next?.bind(observer);\n errorFn = observer.error?.bind(observer);\n completeFn = observer.complete?.bind(observer);\n }\n if (this.__isAsync) {\n errorFn = this.wrapInTimeout(errorFn);\n if (nextFn) {\n nextFn = this.wrapInTimeout(nextFn);\n }\n if (completeFn) {\n completeFn = this.wrapInTimeout(completeFn);\n }\n }\n const sink = super.subscribe({\n next: nextFn,\n error: errorFn,\n complete: completeFn\n });\n if (observerOrNext instanceof Subscription) {\n observerOrNext.add(sink);\n }\n return sink;\n }\n wrapInTimeout(fn) {\n return value => {\n const taskId = this.pendingTasks?.add();\n setTimeout(() => {\n try {\n fn(value);\n } finally {\n if (taskId !== undefined) {\n this.pendingTasks?.remove(taskId);\n }\n }\n });\n };\n }\n}\nconst EventEmitter = EventEmitter_;\nfunction noop(...args) {}\nfunction scheduleCallbackWithRafRace(callback) {\n let timeoutId;\n let animationFrameId;\n function cleanup() {\n callback = noop;\n try {\n if (animationFrameId !== undefined && typeof cancelAnimationFrame === 'function') {\n cancelAnimationFrame(animationFrameId);\n }\n if (timeoutId !== undefined) {\n clearTimeout(timeoutId);\n }\n } catch {}\n }\n timeoutId = setTimeout(() => {\n callback();\n cleanup();\n });\n if (typeof requestAnimationFrame === 'function') {\n animationFrameId = requestAnimationFrame(() => {\n callback();\n cleanup();\n });\n }\n return () => cleanup();\n}\nfunction scheduleCallbackWithMicrotask(callback) {\n queueMicrotask(() => callback());\n return () => {\n callback = noop;\n };\n}\nclass AsyncStackTaggingZoneSpec {\n createTask;\n constructor(namePrefix, consoleAsyncStackTaggingImpl = console) {\n this.name = 'asyncStackTagging for ' + namePrefix;\n this.createTask = consoleAsyncStackTaggingImpl?.createTask ?? (() => null);\n }\n name;\n onScheduleTask(delegate, _current, target, task) {\n task.consoleTask = this.createTask(`Zone - ${task.source || task.type}`);\n return delegate.scheduleTask(target, task);\n }\n onInvokeTask(delegate, _currentZone, targetZone, task, applyThis, applyArgs) {\n let ret;\n if (task.consoleTask) {\n ret = task.consoleTask.run(() => delegate.invokeTask(targetZone, task, applyThis, applyArgs));\n } else {\n ret = delegate.invokeTask(targetZone, task, applyThis, applyArgs);\n }\n return ret;\n }\n}\nconst isAngularZoneProperty = 'isAngularZone';\nconst angularZoneInstanceIdProperty = isAngularZoneProperty + '_ID';\nlet ngZoneInstanceId = 0;\nclass NgZone {\n hasPendingMacrotasks = false;\n hasPendingMicrotasks = false;\n isStable = true;\n onUnstable = /*#__PURE__*/new EventEmitter(false);\n onMicrotaskEmpty = /*#__PURE__*/new EventEmitter(false);\n onStable = /*#__PURE__*/new EventEmitter(false);\n onError = /*#__PURE__*/new EventEmitter(false);\n constructor(options) {\n const {\n enableLongStackTrace = false,\n shouldCoalesceEventChangeDetection = false,\n shouldCoalesceRunChangeDetection = false,\n scheduleInRootZone = SCHEDULE_IN_ROOT_ZONE_DEFAULT\n } = options;\n if (typeof Zone == 'undefined') {\n throw new RuntimeError(908, ngDevMode && `In this configuration Angular requires Zone.js`);\n }\n Zone.assertZonePatched();\n const self = this;\n self._nesting = 0;\n self._outer = self._inner = Zone.current;\n if (ngDevMode) {\n self._inner = self._inner.fork(new AsyncStackTaggingZoneSpec('Angular'));\n }\n if (Zone['TaskTrackingZoneSpec']) {\n self._inner = self._inner.fork(new Zone['TaskTrackingZoneSpec']());\n }\n if (enableLongStackTrace && Zone['longStackTraceZoneSpec']) {\n self._inner = self._inner.fork(Zone['longStackTraceZoneSpec']);\n }\n self.shouldCoalesceEventChangeDetection = !shouldCoalesceRunChangeDetection && shouldCoalesceEventChangeDetection;\n self.shouldCoalesceRunChangeDetection = shouldCoalesceRunChangeDetection;\n self.callbackScheduled = false;\n self.scheduleInRootZone = scheduleInRootZone;\n forkInnerZoneWithAngularBehavior(self);\n }\n static isInAngularZone() {\n return typeof Zone !== 'undefined' && Zone.current.get(isAngularZoneProperty) === true;\n }\n static assertInAngularZone() {\n if (!NgZone.isInAngularZone()) {\n throw new RuntimeError(909, ngDevMode && 'Expected to be in Angular Zone, but it is not!');\n }\n }\n static assertNotInAngularZone() {\n if (NgZone.isInAngularZone()) {\n throw new RuntimeError(909, ngDevMode && 'Expected to not be in Angular Zone, but it is!');\n }\n }\n run(fn, applyThis, applyArgs) {\n return this._inner.run(fn, applyThis, applyArgs);\n }\n runTask(fn, applyThis, applyArgs, name) {\n const zone = this._inner;\n const task = zone.scheduleEventTask('NgZoneEvent: ' + name, fn, EMPTY_PAYLOAD, noop, noop);\n try {\n return zone.runTask(task, applyThis, applyArgs);\n } finally {\n zone.cancelTask(task);\n }\n }\n runGuarded(fn, applyThis, applyArgs) {\n return this._inner.runGuarded(fn, applyThis, applyArgs);\n }\n runOutsideAngular(fn) {\n return this._outer.run(fn);\n }\n}\nconst EMPTY_PAYLOAD = {};\nfunction checkStable(zone) {\n if (zone._nesting == 0 && !zone.hasPendingMicrotasks && !zone.isStable) {\n try {\n zone._nesting++;\n zone.onMicrotaskEmpty.emit(null);\n } finally {\n zone._nesting--;\n if (!zone.hasPendingMicrotasks) {\n try {\n zone.runOutsideAngular(() => zone.onStable.emit(null));\n } finally {\n zone.isStable = true;\n }\n }\n }\n }\n}\nfunction delayChangeDetectionForEvents(zone) {\n if (zone.isCheckStableRunning || zone.callbackScheduled) {\n return;\n }\n zone.callbackScheduled = true;\n function scheduleCheckStable() {\n scheduleCallbackWithRafRace(() => {\n zone.callbackScheduled = false;\n updateMicroTaskStatus(zone);\n zone.isCheckStableRunning = true;\n checkStable(zone);\n zone.isCheckStableRunning = false;\n });\n }\n if (zone.scheduleInRootZone) {\n Zone.root.run(() => {\n scheduleCheckStable();\n });\n } else {\n zone._outer.run(() => {\n scheduleCheckStable();\n });\n }\n updateMicroTaskStatus(zone);\n}\nfunction forkInnerZoneWithAngularBehavior(zone) {\n const delayChangeDetectionForEventsDelegate = () => {\n delayChangeDetectionForEvents(zone);\n };\n const instanceId = ngZoneInstanceId++;\n zone._inner = zone._inner.fork({\n name: 'angular',\n properties: {\n [isAngularZoneProperty]: true,\n [angularZoneInstanceIdProperty]: instanceId,\n [angularZoneInstanceIdProperty + instanceId]: true\n },\n onInvokeTask: (delegate, current, target, task, applyThis, applyArgs) => {\n if (shouldBeIgnoredByZone(applyArgs)) {\n return delegate.invokeTask(target, task, applyThis, applyArgs);\n }\n try {\n onEnter(zone);\n return delegate.invokeTask(target, task, applyThis, applyArgs);\n } finally {\n if (zone.shouldCoalesceEventChangeDetection && task.type === 'eventTask' || zone.shouldCoalesceRunChangeDetection) {\n delayChangeDetectionForEventsDelegate();\n }\n onLeave(zone);\n }\n },\n onInvoke: (delegate, current, target, callback, applyThis, applyArgs, source) => {\n try {\n onEnter(zone);\n return delegate.invoke(target, callback, applyThis, applyArgs, source);\n } finally {\n if (zone.shouldCoalesceRunChangeDetection && !zone.callbackScheduled && !isSchedulerTick(applyArgs)) {\n delayChangeDetectionForEventsDelegate();\n }\n onLeave(zone);\n }\n },\n onHasTask: (delegate, current, target, hasTaskState) => {\n delegate.hasTask(target, hasTaskState);\n if (current === target) {\n if (hasTaskState.change == 'microTask') {\n zone._hasPendingMicrotasks = hasTaskState.microTask;\n updateMicroTaskStatus(zone);\n checkStable(zone);\n } else if (hasTaskState.change == 'macroTask') {\n zone.hasPendingMacrotasks = hasTaskState.macroTask;\n }\n }\n },\n onHandleError: (delegate, current, target, error) => {\n delegate.handleError(target, error);\n zone.runOutsideAngular(() => zone.onError.emit(error));\n return false;\n }\n });\n}\nfunction updateMicroTaskStatus(zone) {\n if (zone._hasPendingMicrotasks || (zone.shouldCoalesceEventChangeDetection || zone.shouldCoalesceRunChangeDetection) && zone.callbackScheduled === true) {\n zone.hasPendingMicrotasks = true;\n } else {\n zone.hasPendingMicrotasks = false;\n }\n}\nfunction onEnter(zone) {\n zone._nesting++;\n if (zone.isStable) {\n zone.isStable = false;\n zone.onUnstable.emit(null);\n }\n}\nfunction onLeave(zone) {\n zone._nesting--;\n checkStable(zone);\n}\nclass NoopNgZone {\n hasPendingMicrotasks = false;\n hasPendingMacrotasks = false;\n isStable = true;\n onUnstable = /*#__PURE__*/new EventEmitter();\n onMicrotaskEmpty = /*#__PURE__*/new EventEmitter();\n onStable = /*#__PURE__*/new EventEmitter();\n onError = /*#__PURE__*/new EventEmitter();\n run(fn, applyThis, applyArgs) {\n return fn.apply(applyThis, applyArgs);\n }\n runGuarded(fn, applyThis, applyArgs) {\n return fn.apply(applyThis, applyArgs);\n }\n runOutsideAngular(fn) {\n return fn();\n }\n runTask(fn, applyThis, applyArgs, name) {\n return fn.apply(applyThis, applyArgs);\n }\n}\nfunction shouldBeIgnoredByZone(applyArgs) {\n return hasApplyArgsData(applyArgs, '__ignore_ng_zone__');\n}\nfunction isSchedulerTick(applyArgs) {\n return hasApplyArgsData(applyArgs, '__scheduler_tick__');\n}\nfunction hasApplyArgsData(applyArgs, key) {\n if (!Array.isArray(applyArgs)) {\n return false;\n }\n if (applyArgs.length !== 1) {\n return false;\n }\n return applyArgs[0]?.data?.[key] === true;\n}\nclass ErrorHandler {\n _console = console;\n handleError(error) {\n this._console.error('ERROR', error);\n }\n}\nconst INTERNAL_APPLICATION_ERROR_HANDLER = /*#__PURE__*/new InjectionToken(typeof ngDevMode === 'undefined' || ngDevMode ? 'internal error handler' : '', {\n factory: () => {\n const zone = inject(NgZone);\n const injector = inject(EnvironmentInjector);\n let userErrorHandler;\n return e => {\n zone.runOutsideAngular(() => {\n if (injector.destroyed && !userErrorHandler) {\n setTimeout(() => {\n throw e;\n });\n } else {\n userErrorHandler ??= injector.get(ErrorHandler);\n userErrorHandler.handleError(e);\n }\n });\n };\n }\n});\nconst errorHandlerEnvironmentInitializer = {\n provide: ENVIRONMENT_INITIALIZER,\n useValue: () => {\n const handler = inject(ErrorHandler, {\n optional: true\n });\n if ((typeof ngDevMode === 'undefined' || ngDevMode) && handler === null) {\n throw new RuntimeError(402, `A required Injectable was not found in the dependency injection tree. ` + 'If you are bootstrapping an NgModule, make sure that the `BrowserModule` is imported.');\n }\n },\n multi: true\n};\nconst globalErrorListeners = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'GlobalErrorListeners' : '', {\n factory: () => {\n if (typeof ngServerMode !== 'undefined' && ngServerMode) {\n return;\n }\n const window = inject(DOCUMENT).defaultView;\n if (!window) {\n return;\n }\n const errorHandler = inject(INTERNAL_APPLICATION_ERROR_HANDLER);\n const rejectionListener = e => {\n errorHandler(e.reason);\n e.preventDefault();\n };\n const errorListener = e => {\n if (e.error) {\n errorHandler(e.error);\n } else {\n errorHandler(new Error(ngDevMode ? `An ErrorEvent with no error occurred. See Error.cause for details: ${e.message}` : e.message, {\n cause: e\n }));\n }\n e.preventDefault();\n };\n const setupEventListeners = () => {\n window.addEventListener('unhandledrejection', rejectionListener);\n window.addEventListener('error', errorListener);\n };\n if (typeof Zone !== 'undefined') {\n Zone.root.run(setupEventListeners);\n } else {\n setupEventListeners();\n }\n inject(DestroyRef).onDestroy(() => {\n window.removeEventListener('error', errorListener);\n window.removeEventListener('unhandledrejection', rejectionListener);\n });\n }\n});\nfunction provideBrowserGlobalErrorListeners() {\n return makeEnvironmentProviders([provideEnvironmentInitializer(() => void inject(globalErrorListeners))]);\n}\nfunction \u0275unwrapWritableSignal(value) {\n return null;\n}\nfunction signal(initialValue, options) {\n const [get, set, update] = createSignal(initialValue, options?.equal);\n const signalFn = get;\n const node = signalFn[SIGNAL];\n signalFn.set = set;\n signalFn.update = update;\n signalFn.asReadonly = signalAsReadonlyFn.bind(signalFn);\n if (typeof ngDevMode !== 'undefined' && ngDevMode) {\n const debugName = options?.debugName;\n node.debugName = debugName;\n signalFn.toString = () => `[Signal${debugName ? ' (' + debugName + ')' : ''}: ${signalFn()}]`;\n }\n return signalFn;\n}\nfunction signalAsReadonlyFn() {\n const node = this[SIGNAL];\n if (node.readonlyFn === undefined) {\n const readonlyFn = () => this();\n readonlyFn[SIGNAL] = node;\n node.readonlyFn = readonlyFn;\n }\n return node.readonlyFn;\n}\nfunction assertNotInReactiveContext(debugFn, extraContext) {\n if (getActiveConsumer() !== null) {\n throw new RuntimeError(-602, ngDevMode && `${debugFn.name}() cannot be called from within a reactive context.${extraContext ? ` ${extraContext}` : ''}`);\n }\n}\nlet ViewContext = /*#__PURE__*/(() => {\n class ViewContext {\n view;\n node;\n constructor(view, node) {\n this.view = view;\n this.node = node;\n }\n static __NG_ELEMENT_ID__ = injectViewContext;\n }\n return ViewContext;\n})();\nfunction injectViewContext() {\n return new ViewContext(getLView(), getCurrentTNode());\n}\nclass ChangeDetectionScheduler {}\nconst ZONELESS_ENABLED = /*#__PURE__*/new InjectionToken(typeof ngDevMode === 'undefined' || ngDevMode ? 'Zoneless enabled' : '', {\n factory: () => true\n});\nconst PROVIDED_ZONELESS = /*#__PURE__*/new InjectionToken(typeof ngDevMode === 'undefined' || ngDevMode ? 'Zoneless provided' : '', {\n factory: () => false\n});\nconst SCHEDULE_IN_ROOT_ZONE = /*#__PURE__*/new InjectionToken(typeof ngDevMode === 'undefined' || ngDevMode ? 'run changes outside zone in root' : '');\nlet PendingTasks = /*#__PURE__*/(() => {\n class PendingTasks {\n internalPendingTasks = inject(PendingTasksInternal);\n scheduler = inject(ChangeDetectionScheduler);\n errorHandler = inject(INTERNAL_APPLICATION_ERROR_HANDLER);\n add() {\n const taskId = this.internalPendingTasks.add();\n return () => {\n if (!this.internalPendingTasks.has(taskId)) {\n return;\n }\n this.scheduler.notify(11);\n this.internalPendingTasks.remove(taskId);\n };\n }\n run(fn) {\n const removeTask = this.add();\n fn().catch(this.errorHandler).finally(removeTask);\n }\n static \u0275prov = /* @__PURE__ */\n \u0275\u0275defineInjectable({\n token: PendingTasks,\n providedIn: 'root',\n factory: () => new PendingTasks()\n });\n }\n return PendingTasks;\n})();\nlet EffectScheduler = /*#__PURE__*/(() => {\n class EffectScheduler {\n static \u0275prov = /* @__PURE__ */\n \u0275\u0275defineInjectable({\n token: EffectScheduler,\n providedIn: 'root',\n factory: () => new ZoneAwareEffectScheduler()\n });\n }\n return EffectScheduler;\n})();\nclass ZoneAwareEffectScheduler {\n dirtyEffectCount = 0;\n queues = /*#__PURE__*/new Map();\n add(handle) {\n this.enqueue(handle);\n this.schedule(handle);\n }\n schedule(handle) {\n if (!handle.dirty) {\n return;\n }\n this.dirtyEffectCount++;\n }\n remove(handle) {\n const zone = handle.zone;\n const queue = this.queues.get(zone);\n if (!queue.has(handle)) {\n return;\n }\n queue.delete(handle);\n if (handle.dirty) {\n this.dirtyEffectCount--;\n }\n }\n enqueue(handle) {\n const zone = handle.zone;\n if (!this.queues.has(zone)) {\n this.queues.set(zone, new Set());\n }\n const queue = this.queues.get(zone);\n if (queue.has(handle)) {\n return;\n }\n queue.add(handle);\n }\n flush() {\n while (this.dirtyEffectCount > 0) {\n let ranOneEffect = false;\n for (const [zone, queue] of this.queues) {\n if (zone === null) {\n ranOneEffect ||= this.flushQueue(queue);\n } else {\n ranOneEffect ||= zone.run(() => this.flushQueue(queue));\n }\n }\n if (!ranOneEffect) {\n this.dirtyEffectCount = 0;\n }\n }\n }\n flushQueue(queue) {\n let ranOneEffect = false;\n for (const handle of queue) {\n if (!handle.dirty) {\n continue;\n }\n this.dirtyEffectCount--;\n ranOneEffect = true;\n handle.run();\n }\n return ranOneEffect;\n }\n}\nclass EffectRefImpl {\n [SIGNAL];\n constructor(node) {\n this[SIGNAL] = node;\n }\n destroy() {\n this[SIGNAL].destroy();\n }\n}\nfunction effect(effectFn, options) {\n ngDevMode && assertNotInReactiveContext(effect, 'Call `effect` outside of a reactive context. For example, schedule the ' + 'effect inside the component constructor.');\n if (ngDevMode && !options?.injector) {\n assertInInjectionContext(effect);\n }\n if (ngDevMode && options?.allowSignalWrites !== undefined) {\n console.warn(`The 'allowSignalWrites' flag is deprecated and no longer impacts effect() (writes are always allowed)`);\n }\n const injector = options?.injector ?? inject(Injector);\n let destroyRef = options?.manualCleanup !== true ? injector.get(DestroyRef) : null;\n let node;\n const viewContext = injector.get(ViewContext, null, {\n optional: true\n });\n const notifier = injector.get(ChangeDetectionScheduler);\n if (viewContext !== null) {\n node = createViewEffect(viewContext.view, notifier, effectFn);\n if (destroyRef instanceof NodeInjectorDestroyRef && destroyRef._lView === viewContext.view) {\n destroyRef = null;\n }\n } else {\n node = createRootEffect(effectFn, injector.get(EffectScheduler), notifier);\n }\n node.injector = injector;\n if (destroyRef !== null) {\n node.onDestroyFns = [destroyRef.onDestroy(() => node.destroy())];\n }\n const effectRef = new EffectRefImpl(node);\n if (ngDevMode) {\n node.debugName = options?.debugName ?? '';\n const prevInjectorProfilerContext = setInjectorProfilerContext({\n injector,\n token: null\n });\n try {\n emitEffectCreatedEvent(effectRef);\n } finally {\n setInjectorProfilerContext(prevInjectorProfilerContext);\n }\n }\n return effectRef;\n}\nconst EFFECT_NODE = /* @__PURE__ */(() => ({\n ...BASE_EFFECT_NODE,\n cleanupFns: undefined,\n zone: null,\n onDestroyFns: null,\n run() {\n if (ngDevMode && isInNotificationPhase()) {\n throw new Error(`Schedulers cannot synchronously execute watches while scheduling.`);\n }\n const prevRefreshingViews = setIsRefreshingViews(false);\n try {\n runEffect(this);\n } finally {\n setIsRefreshingViews(prevRefreshingViews);\n }\n },\n cleanup() {\n if (!this.cleanupFns?.length) {\n return;\n }\n const prevConsumer = setActiveConsumer$1(null);\n try {\n while (this.cleanupFns.length) {\n this.cleanupFns.pop()();\n }\n } finally {\n this.cleanupFns = [];\n setActiveConsumer$1(prevConsumer);\n }\n }\n}))();\nconst ROOT_EFFECT_NODE = /* @__PURE__ */(() => ({\n ...EFFECT_NODE,\n consumerMarkedDirty() {\n this.scheduler.schedule(this);\n this.notifier.notify(12);\n },\n destroy() {\n consumerDestroy(this);\n if (this.onDestroyFns !== null) {\n for (const fn of this.onDestroyFns) {\n fn();\n }\n }\n this.cleanup();\n this.scheduler.remove(this);\n }\n}))();\nconst VIEW_EFFECT_NODE = /* @__PURE__ */(() => ({\n ...EFFECT_NODE,\n consumerMarkedDirty() {\n this.view[FLAGS] |= 8192;\n markAncestorsForTraversal(this.view);\n this.notifier.notify(13);\n },\n destroy() {\n consumerDestroy(this);\n if (this.onDestroyFns !== null) {\n for (const fn of this.onDestroyFns) {\n fn();\n }\n }\n this.cleanup();\n this.view[EFFECTS]?.delete(this);\n }\n}))();\nfunction createViewEffect(view, notifier, fn) {\n const node = Object.create(VIEW_EFFECT_NODE);\n node.view = view;\n node.zone = typeof Zone !== 'undefined' ? Zone.current : null;\n node.notifier = notifier;\n node.fn = createEffectFn(node, fn);\n view[EFFECTS] ??= new Set();\n view[EFFECTS].add(node);\n node.consumerMarkedDirty(node);\n return node;\n}\nfunction createRootEffect(fn, scheduler, notifier) {\n const node = Object.create(ROOT_EFFECT_NODE);\n node.fn = createEffectFn(node, fn);\n node.scheduler = scheduler;\n node.notifier = notifier;\n node.zone = typeof Zone !== 'undefined' ? Zone.current : null;\n node.scheduler.add(node);\n node.notifier.notify(12);\n return node;\n}\nfunction createEffectFn(node, fn) {\n return () => {\n fn(cleanupFn => (node.cleanupFns ??= []).push(cleanupFn));\n };\n}\nexport { AFTER_RENDER_SEQUENCES_TO_ADD, ANIMATIONS, CHILD_HEAD, CHILD_TAIL, CLEANUP, CONTAINER_HEADER_OFFSET, CONTEXT, ChangeDetectionScheduler, CheckNoChangesMode, DEBUG_TASK_TRACKER, DECLARATION_COMPONENT_VIEW, DECLARATION_LCONTAINER, DECLARATION_VIEW, DEHYDRATED_VIEWS, DOCUMENT, DOC_PAGE_BASE_URL, DestroyRef, EFFECTS, EFFECTS_TO_SCHEDULE, EMBEDDED_VIEW_INJECTOR, EMPTY_ARRAY, EMPTY_OBJ, ENVIRONMENT, ENVIRONMENT_INITIALIZER, ERROR_DETAILS_PAGE_BASE_URL, EffectRefImpl, EffectScheduler, EnvironmentInjector, ErrorHandler, EventEmitter, FLAGS, HEADER_OFFSET, HOST, HYDRATION, ID, INJECTOR$1 as INJECTOR, INJECTOR as INJECTOR$1, INJECTOR_DEF_TYPES, INJECTOR_SCOPE, INTERNAL_APPLICATION_ERROR_HANDLER, InjectionToken, Injector, MATH_ML_NAMESPACE, MOVED_VIEWS, NATIVE, NEXT, NG_COMP_DEF, NG_DIR_DEF, NG_ELEMENT_ID, NG_FACTORY_DEF, NG_INJ_DEF, NG_MOD_DEF, NG_PIPE_DEF, NG_PROV_DEF, NgZone, NoopNgZone, NullInjector, ON_DESTROY_HOOKS, PARENT, PREORDER_HOOK_FLAGS, PROVIDED_ZONELESS, PendingTasks, PendingTasksInternal, QUERIES, R3Injector, REACTIVE_TEMPLATE_CONSUMER, RENDERER, RuntimeError, SCHEDULE_IN_ROOT_ZONE, SCHEDULE_IN_ROOT_ZONE_DEFAULT, SVG_NAMESPACE, TVIEW, T_HOST, VERSION, VIEW_REFS, Version, ViewContext, XSS_SECURITY_URL, ZONELESS_ENABLED, _global, addToArray, angularZoneInstanceIdProperty, arrayEquals, arrayInsert2, arraySplice, assertComponentType, assertDefined, assertDirectiveDef, assertDomNode, assertElement, assertEqual, assertFirstCreatePass, assertFirstUpdatePass, assertFunction, assertGreaterThan, assertGreaterThanOrEqual, assertHasParent, assertInInjectionContext, assertIndexInDeclRange, assertIndexInExpandoRange, assertIndexInRange, assertInjectImplementationNotEqual, assertLContainer, assertLView, assertLessThan, assertNgModuleType, assertNodeInjector, assertNotDefined, assertNotEqual, assertNotInReactiveContext, assertNotReactive, assertNotSame, assertNumber, assertNumberInRange, assertOneOf, assertParentView, assertProjectionSlots, assertSame, assertString, assertTIcu, assertTNode, assertTNodeCreationIndex, assertTNodeForLView, assertTNodeForTView, attachInjectFlag, concatStringsWithSpace, convertToBitFlags, createInjector, createInjectorWithoutInjectorInstances, cyclicDependencyError, cyclicDependencyErrorWithDetails, debugStringifyTypeForError, decreaseElementDepthCount, deepForEach, effect, emitAfterRenderEffectPhaseCreatedEvent, emitInjectEvent, emitInjectorToCreateInstanceEvent, emitInstanceCreatedByInjectorEvent, emitProviderConfiguredEvent, enterDI, enterSkipHydrationBlock, enterView, errorHandlerEnvironmentInitializer, fillProperties, flatten, formatRuntimeError, forwardRef, getBindingIndex, getBindingRoot, getBindingsEnabled, getClosureSafeProperty, getComponentDef, getComponentLViewByIndex, getConstant, getContextLView, getCurrentDirectiveDef, getCurrentDirectiveIndex, getCurrentParentTNode, getCurrentQueryIndex, getCurrentTNode, getCurrentTNodePlaceholderOk, getDirectiveDef, getDirectiveDefOrThrow, getElementDepthCount, getFactoryDef, getInjectableDef, getInjectorDef, getLView, getLViewParent, getNamespace, getNativeByIndex, getNativeByTNode, getNativeByTNodeOrNull, getNgModuleDef, getNgModuleDefOrThrow, getNullInjector, getOrCreateLViewCleanup, getOrCreateTViewCleanup, getPipeDef, getSelectedIndex, getSelectedTNode, getTNode, getTView, hasI18n, importProvidersFrom, increaseElementDepthCount, incrementBindingIndex, initNgDevMode, inject, injectRootLimpMode, internalImportProvidersFrom, isClassProvider, isComponentDef, isComponentHost, isContentQueryHost, isCreationMode, isCurrentTNodeParent, isDestroyed, isDirectiveHost, isEnvironmentProviders, isExhaustiveCheckNoChanges, isForwardRef, isInCheckNoChangesMode, isInI18nBlock, isInInjectionContext, isInSkipHydrationBlock, isInjectable, isLContainer, isLView, isProjectionTNode, isRefreshingViews, isRootView, isSkipHydrationRootTNode, isStandalone, isTypeProvider, keyValueArrayGet, keyValueArrayIndexOf, keyValueArraySet, lastNodeWasCreated, leaveDI, leaveSkipHydrationBlock, leaveView, load, makeEnvironmentProviders, markAncestorsForTraversal, markViewForRefresh, newArray, nextBindingIndex, nextContextImpl, provideBrowserGlobalErrorListeners, provideEnvironmentInitializer, providerToFactory, removeFromArray, removeLViewOnDestroy, renderStringify, requiresRefreshOrTraversal, resetPreOrderHookFlags, resolveForwardRef, runInInjectionContext, runInInjectorProfilerContext, scheduleCallbackWithMicrotask, scheduleCallbackWithRafRace, setBindingIndex, setBindingRootForHostBindings, setCurrentDirectiveIndex, setCurrentQueryIndex, setCurrentTNode, setCurrentTNodeAsNotParent, setInI18nBlock, setInjectImplementation, setInjectorProfiler, setInjectorProfilerContext, setIsInCheckNoChangesMode, setIsRefreshingViews, setSelectedIndex, signal, signalAsReadonlyFn, store, storeCleanupWithContext, storeLViewOnDestroy, stringify, stringifyForError, throwError, throwProviderNotFoundError, truncateMiddle, unwrapLView, unwrapRNode, updateAncestorTraversalFlagsOnAttach, viewAttachedToChangeDetector, viewAttachedToContainer, walkProviderTree, walkUpViews, wasLastNodeCreated, \u0275unwrapWritableSignal, \u0275\u0275defineInjectable, \u0275\u0275defineInjector, \u0275\u0275disableBindings, \u0275\u0275enableBindings, \u0275\u0275inject, \u0275\u0275invalidFactoryDep, \u0275\u0275namespaceHTML, \u0275\u0275namespaceMathML, \u0275\u0275namespaceSVG, \u0275\u0275resetView, \u0275\u0275restoreView };\n","/**\n * @license Angular v21.2.4\n * (c) 2010-2026 Google LLC. https://angular.dev/\n * License: MIT\n */\n\nimport { attachInjectFlag, _global, \u0275\u0275defineInjectable as __defineInjectable, \u0275\u0275defineInjector as __defineInjector, \u0275\u0275inject as __inject, \u0275\u0275invalidFactoryDep as __invalidFactoryDep, resolveForwardRef, newArray, EMPTY_OBJ, assertString, assertNotEqual, FLAGS, assertEqual, isInCheckNoChangesMode, PREORDER_HOOK_FLAGS, assertFirstCreatePass, assertDefined, throwError, assertNumber, assertGreaterThan, HEADER_OFFSET, DECLARATION_VIEW, NG_FACTORY_DEF, isForwardRef, getFactoryDef, assertIndexInRange, assertTNodeForLView, enterDI, runInInjectorProfilerContext, getCurrentTNode, getLView, emitInjectorToCreateInstanceEvent, emitInstanceCreatedByInjectorEvent, throwProviderNotFoundError, leaveDI, assertNodeInjector, stringifyForError, cyclicDependencyErrorWithDetails, cyclicDependencyError, setInjectorProfilerContext, setInjectImplementation, assertDirectiveDef, NG_ELEMENT_ID, convertToBitFlags, isRootView, T_HOST, TVIEW, injectRootLimpMode, isComponentDef, EMBEDDED_VIEW_INJECTOR, INJECTOR$1 as INJECTOR, DECLARATION_COMPONENT_VIEW, isComponentHost, RuntimeError, NG_PROV_DEF, getClosureSafeProperty, getNativeByTNode, flatten, arrayEquals, ID, isLView, assertDomNode, unwrapRNode, getComponentLViewByIndex, CONTEXT, EMPTY_ARRAY, assertLView, HOST, CHILD_HEAD, NEXT, isLContainer, getLViewParent, Injector, CLEANUP, getComponentDef, getDirectiveDef, InjectionToken, inject, DOCUMENT as DOCUMENT$1, ENVIRONMENT_INITIALIZER, formatRuntimeError, isInSkipHydrationBlock as isInSkipHydrationBlock$1, HYDRATION, isContentQueryHost, setCurrentQueryIndex, isDirectiveHost, XSS_SECURITY_URL, RENDERER, renderStringify, getSelectedTNode, ENVIRONMENT, makeEnvironmentProviders, resetPreOrderHookFlags, PARENT, CHILD_TAIL, assertSame, assertFirstUpdatePass, getSelectedIndex, getTView, assertIndexInDeclRange, setSelectedIndex, stringify, ANIMATIONS, NgZone, ChangeDetectionScheduler, ErrorHandler, AFTER_RENDER_SEQUENCES_TO_ADD, markAncestorsForTraversal, assertNotInReactiveContext, assertInInjectionContext, DestroyRef, ViewContext, EnvironmentInjector, assertLContainer, MOVED_VIEWS, isDestroyed, REACTIVE_TEMPLATE_CONSUMER, DECLARATION_LCONTAINER, QUERIES, assertNotReactive, ON_DESTROY_HOOKS, assertFunction, EFFECTS, assertProjectionSlots, NATIVE, assertParentView, CONTAINER_HEADER_OFFSET, assertNotSame, setCurrentDirectiveIndex, setCurrentTNode, getElementDepthCount, increaseElementDepthCount, wasLastNodeCreated, isCurrentTNodeParent, setCurrentTNodeAsNotParent, assertHasParent, INTERNAL_APPLICATION_ERROR_HANDLER, getCurrentDirectiveIndex, unwrapLView, isCreationMode, enterView, leaveView, markViewForRefresh, setIsRefreshingViews, isExhaustiveCheckNoChanges, requiresRefreshOrTraversal, setIsInCheckNoChangesMode, CheckNoChangesMode, setBindingIndex, EFFECTS_TO_SCHEDULE, viewAttachedToChangeDetector, setBindingRootForHostBindings, isRefreshingViews, removeFromArray, addToArray, updateAncestorTraversalFlagsOnAttach, storeLViewOnDestroy, VIEW_REFS, assertGreaterThanOrEqual, isInI18nBlock, assertTNodeForTView, getCurrentParentTNode, getCurrentTNodePlaceholderOk, assertTNode, assertTIcu, assertNumberInRange, DEHYDRATED_VIEWS, getNgModuleDef, getPipeDef as getPipeDef$1, getNgModuleDefOrThrow, isStandalone, concatStringsWithSpace, assertInjectImplementationNotEqual, emitInjectEvent, getConstant, assertLessThan, getOrCreateTViewCleanup, getOrCreateLViewCleanup, debugStringifyTypeForError, assertNotDefined, nextBindingIndex, getTNode, getDirectiveDefOrThrow, assertComponentType, SVG_NAMESPACE, MATH_ML_NAMESPACE, viewAttachedToContainer, storeCleanupWithContext, signal, createInjectorWithoutInjectorInstances, R3Injector, getNullInjector, internalImportProvidersFrom, initNgDevMode, fillProperties, getBindingsEnabled, lastNodeWasCreated, removeLViewOnDestroy, walkUpViews, getNativeByIndex, assertElement, arrayInsert2, arraySplice, setInjectorProfiler, EffectRefImpl, NullInjector, INJECTOR_DEF_TYPES, walkProviderTree, getInjectorDef, deepForEach, isTypeProvider, isInInjectionContext, runInInjectionContext, ZONELESS_ENABLED, EffectScheduler, PendingTasksInternal, PendingTasks, assertTNodeCreationIndex, decreaseElementDepthCount, isSkipHydrationRootTNode, leaveSkipHydrationBlock, getNamespace, enterSkipHydrationBlock, getCurrentDirectiveDef, assertIndexInExpandoRange, getBindingIndex, assertOneOf, setInI18nBlock, nextContextImpl, getCurrentQueryIndex, getContextLView, load, keyValueArrayIndexOf, incrementBindingIndex, keyValueArraySet, keyValueArrayGet, store, getBindingRoot, providerToFactory, emitProviderConfiguredEvent, isClassProvider, NG_COMP_DEF, \u0275\u0275resetView as __resetView, \u0275\u0275namespaceHTML as __namespaceHTML, \u0275\u0275namespaceMathML as __namespaceMathML, \u0275\u0275namespaceSVG as __namespaceSVG, \u0275\u0275enableBindings as __enableBindings, \u0275\u0275disableBindings as __disableBindings, \u0275\u0275restoreView as __restoreView, forwardRef, NG_MOD_DEF, NG_INJ_DEF, NG_DIR_DEF, NG_PIPE_DEF, angularZoneInstanceIdProperty, SCHEDULE_IN_ROOT_ZONE, PROVIDED_ZONELESS, NoopNgZone, scheduleCallbackWithMicrotask, scheduleCallbackWithRafRace, getNativeByTNodeOrNull } from './_effect-chunk2.mjs';\nimport { setActiveConsumer, SIGNAL, consumerDestroy, REACTIVE_NODE, consumerPollProducersForChange, consumerBeforeComputation, getActiveConsumer, consumerAfterComputation, createComputed, setThrowInvalidWriteToSignalError } from './_effect-chunk.mjs';\nimport { Subject, Subscription } from 'rxjs';\nimport { setActiveConsumer as setActiveConsumer$1 } from '@angular/core/primitives/signals';\nimport { map } from 'rxjs/operators';\nimport { Attribute as Attribute$1 } from './_attribute-chunk.mjs';\nfunction noSideEffects(fn) {\n return {\n toString: fn\n }.toString();\n}\nconst ANNOTATIONS = '__annotations__';\nconst PARAMETERS = '__parameters__';\nconst PROP_METADATA = '__prop__metadata__';\nfunction makeDecorator(name, props, parentClass, additionalProcessing, typeFn) {\n return noSideEffects(() => {\n const metaCtor = makeMetadataCtor(props);\n function DecoratorFactory(...args) {\n if (this instanceof DecoratorFactory) {\n metaCtor.call(this, ...args);\n return this;\n }\n const annotationInstance = new DecoratorFactory(...args);\n return function TypeDecorator(cls) {\n if (typeFn) typeFn(cls, ...args);\n const annotations = cls.hasOwnProperty(ANNOTATIONS) ? cls[ANNOTATIONS] : Object.defineProperty(cls, ANNOTATIONS, {\n value: []\n })[ANNOTATIONS];\n annotations.push(annotationInstance);\n return cls;\n };\n }\n if (parentClass) {\n DecoratorFactory.prototype = Object.create(parentClass.prototype);\n }\n DecoratorFactory.prototype.ngMetadataName = name;\n DecoratorFactory.annotationCls = DecoratorFactory;\n return DecoratorFactory;\n });\n}\nfunction makeMetadataCtor(props) {\n return function ctor(...args) {\n if (props) {\n const values = props(...args);\n for (const propName in values) {\n this[propName] = values[propName];\n }\n }\n };\n}\nfunction makeParamDecorator(name, props, parentClass) {\n return noSideEffects(() => {\n const metaCtor = makeMetadataCtor(props);\n function ParamDecoratorFactory(...args) {\n if (this instanceof ParamDecoratorFactory) {\n metaCtor.apply(this, args);\n return this;\n }\n const annotationInstance = new ParamDecoratorFactory(...args);\n ParamDecorator.annotation = annotationInstance;\n return ParamDecorator;\n function ParamDecorator(cls, unusedKey, index) {\n const parameters = cls.hasOwnProperty(PARAMETERS) ? cls[PARAMETERS] : Object.defineProperty(cls, PARAMETERS, {\n value: []\n })[PARAMETERS];\n while (parameters.length <= index) {\n parameters.push(null);\n }\n (parameters[index] = parameters[index] || []).push(annotationInstance);\n return cls;\n }\n }\n ParamDecoratorFactory.prototype.ngMetadataName = name;\n ParamDecoratorFactory.annotationCls = ParamDecoratorFactory;\n return ParamDecoratorFactory;\n });\n}\nfunction makePropDecorator(name, props, parentClass, additionalProcessing) {\n return noSideEffects(() => {\n const metaCtor = makeMetadataCtor(props);\n function PropDecoratorFactory(...args) {\n if (this instanceof PropDecoratorFactory) {\n metaCtor.apply(this, args);\n return this;\n }\n const decoratorInstance = new PropDecoratorFactory(...args);\n function PropDecorator(target, name) {\n if (target === undefined) {\n throw new Error('Standard Angular field decorators are not supported in JIT mode.');\n }\n const constructor = target.constructor;\n const meta = constructor.hasOwnProperty(PROP_METADATA) ? constructor[PROP_METADATA] : Object.defineProperty(constructor, PROP_METADATA, {\n value: {}\n })[PROP_METADATA];\n meta[name] = meta.hasOwnProperty(name) && meta[name] || [];\n meta[name].unshift(decoratorInstance);\n }\n return PropDecorator;\n }\n if (parentClass) {\n PropDecoratorFactory.prototype = Object.create(parentClass.prototype);\n }\n PropDecoratorFactory.prototype.ngMetadataName = name;\n PropDecoratorFactory.annotationCls = PropDecoratorFactory;\n return PropDecoratorFactory;\n });\n}\nconst Inject = /*#__PURE__*/attachInjectFlag(/*#__PURE__*/makeParamDecorator('Inject', token => ({\n token\n})), -1);\nconst Optional = /*#__PURE__*/attachInjectFlag(/*#__PURE__*/makeParamDecorator('Optional'), 8);\nconst Self = /*#__PURE__*/attachInjectFlag(/*#__PURE__*/makeParamDecorator('Self'), 2);\nconst SkipSelf = /*#__PURE__*/attachInjectFlag(/*#__PURE__*/makeParamDecorator('SkipSelf'), 4);\nconst Host = /*#__PURE__*/attachInjectFlag(/*#__PURE__*/makeParamDecorator('Host'), 1);\nfunction getCompilerFacade(request) {\n const globalNg = _global['ng'];\n if (globalNg && globalNg.\u0275compilerFacade) {\n return globalNg.\u0275compilerFacade;\n }\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n console.error(`JIT compilation failed for ${request.kind}`, request.type);\n let message = `The ${request.kind} '${request.type.name}' needs to be compiled using the JIT compiler, but '@angular/compiler' is not available.\\n\\n`;\n if (request.usage === 1) {\n message += `The ${request.kind} is part of a library that has been partially compiled.\\n`;\n message += `However, the Angular Linker has not processed the library such that JIT compilation is used as fallback.\\n`;\n message += '\\n';\n message += `Ideally, the library is processed using the Angular Linker to become fully AOT compiled.\\n`;\n } else {\n message += `JIT compilation is discouraged for production use-cases! Consider using AOT mode instead.\\n`;\n }\n message += `Alternatively, the JIT compiler should be loaded by bootstrapping using '@angular/platform-browser-dynamic' or '@angular/platform-server',\\n`;\n message += `or manually provide the compiler with 'import \"@angular/compiler\";' before bootstrapping.`;\n throw new Error(message);\n } else {\n throw new Error('JIT compiler unavailable');\n }\n}\nconst angularCoreDiEnv = {\n '\u0275\u0275defineInjectable': __defineInjectable,\n '\u0275\u0275defineInjector': __defineInjector,\n '\u0275\u0275inject': __inject,\n '\u0275\u0275invalidFactoryDep': __invalidFactoryDep,\n 'resolveForwardRef': resolveForwardRef\n};\nconst Type = Function;\nfunction isType(v) {\n return typeof v === 'function';\n}\nconst ES5_DELEGATE_CTOR = /^function\\s+\\S+\\(\\)\\s*{[\\s\\S]+\\.apply\\(this,\\s*(arguments|(?:[^()]+\\(\\[\\],)?[^()]+\\(arguments\\).*)\\)/;\nconst ES2015_INHERITED_CLASS = /^class\\s+[A-Za-z\\d$_]*\\s*extends\\s+[^{]+{/;\nconst ES2015_INHERITED_CLASS_WITH_CTOR = /^class\\s+[A-Za-z\\d$_]*\\s*extends\\s+[^{]+{[\\s\\S]*constructor\\s*\\(/;\nconst ES2015_INHERITED_CLASS_WITH_DELEGATE_CTOR = /^class\\s+[A-Za-z\\d$_]*\\s*extends\\s+[^{]+{[\\s\\S]*constructor\\s*\\(\\)\\s*{[^}]*super\\(\\.\\.\\.arguments\\)/;\nfunction isDelegateCtor(typeStr) {\n return ES5_DELEGATE_CTOR.test(typeStr) || ES2015_INHERITED_CLASS_WITH_DELEGATE_CTOR.test(typeStr) || ES2015_INHERITED_CLASS.test(typeStr) && !ES2015_INHERITED_CLASS_WITH_CTOR.test(typeStr);\n}\nclass ReflectionCapabilities {\n _reflect;\n constructor(reflect) {\n this._reflect = reflect || _global['Reflect'];\n }\n factory(t) {\n return (...args) => new t(...args);\n }\n _zipTypesAndAnnotations(paramTypes, paramAnnotations) {\n let result;\n if (typeof paramTypes === 'undefined') {\n result = newArray(paramAnnotations.length);\n } else {\n result = newArray(paramTypes.length);\n }\n for (let i = 0; i < result.length; i++) {\n if (typeof paramTypes === 'undefined') {\n result[i] = [];\n } else if (paramTypes[i] && paramTypes[i] != Object) {\n result[i] = [paramTypes[i]];\n } else {\n result[i] = [];\n }\n if (paramAnnotations && paramAnnotations[i] != null) {\n result[i] = result[i].concat(paramAnnotations[i]);\n }\n }\n return result;\n }\n _ownParameters(type, parentCtor) {\n const typeStr = type.toString();\n if (isDelegateCtor(typeStr)) {\n return null;\n }\n if (type.parameters && type.parameters !== parentCtor.parameters) {\n return type.parameters;\n }\n const tsickleCtorParams = type.ctorParameters;\n if (tsickleCtorParams && tsickleCtorParams !== parentCtor.ctorParameters) {\n const ctorParameters = typeof tsickleCtorParams === 'function' ? tsickleCtorParams() : tsickleCtorParams;\n const paramTypes = ctorParameters.map(ctorParam => ctorParam && ctorParam.type);\n const paramAnnotations = ctorParameters.map(ctorParam => ctorParam && convertTsickleDecoratorIntoMetadata(ctorParam.decorators));\n return this._zipTypesAndAnnotations(paramTypes, paramAnnotations);\n }\n const paramAnnotations = type.hasOwnProperty(PARAMETERS) && type[PARAMETERS];\n const paramTypes = this._reflect && this._reflect.getOwnMetadata && this._reflect.getOwnMetadata('design:paramtypes', type);\n if (paramTypes || paramAnnotations) {\n return this._zipTypesAndAnnotations(paramTypes, paramAnnotations);\n }\n return newArray(type.length);\n }\n parameters(type) {\n if (!isType(type)) {\n return [];\n }\n const parentCtor = getParentCtor(type);\n let parameters = this._ownParameters(type, parentCtor);\n if (!parameters && parentCtor !== Object) {\n parameters = this.parameters(parentCtor);\n }\n return parameters || [];\n }\n _ownAnnotations(typeOrFunc, parentCtor) {\n if (typeOrFunc.annotations && typeOrFunc.annotations !== parentCtor.annotations) {\n let annotations = typeOrFunc.annotations;\n if (typeof annotations === 'function' && annotations.annotations) {\n annotations = annotations.annotations;\n }\n return annotations;\n }\n if (typeOrFunc.decorators && typeOrFunc.decorators !== parentCtor.decorators) {\n return convertTsickleDecoratorIntoMetadata(typeOrFunc.decorators);\n }\n if (typeOrFunc.hasOwnProperty(ANNOTATIONS)) {\n return typeOrFunc[ANNOTATIONS];\n }\n return null;\n }\n annotations(typeOrFunc) {\n if (!isType(typeOrFunc)) {\n return [];\n }\n const parentCtor = getParentCtor(typeOrFunc);\n const ownAnnotations = this._ownAnnotations(typeOrFunc, parentCtor) || [];\n const parentAnnotations = parentCtor !== Object ? this.annotations(parentCtor) : [];\n return parentAnnotations.concat(ownAnnotations);\n }\n _ownPropMetadata(typeOrFunc, parentCtor) {\n if (typeOrFunc.propMetadata && typeOrFunc.propMetadata !== parentCtor.propMetadata) {\n let propMetadata = typeOrFunc.propMetadata;\n if (typeof propMetadata === 'function' && propMetadata.propMetadata) {\n propMetadata = propMetadata.propMetadata;\n }\n return propMetadata;\n }\n if (typeOrFunc.propDecorators && typeOrFunc.propDecorators !== parentCtor.propDecorators) {\n const propDecorators = typeOrFunc.propDecorators;\n const propMetadata = {};\n Object.keys(propDecorators).forEach(prop => {\n propMetadata[prop] = convertTsickleDecoratorIntoMetadata(propDecorators[prop]);\n });\n return propMetadata;\n }\n if (typeOrFunc.hasOwnProperty(PROP_METADATA)) {\n return typeOrFunc[PROP_METADATA];\n }\n return null;\n }\n propMetadata(typeOrFunc) {\n if (!isType(typeOrFunc)) {\n return {};\n }\n const parentCtor = getParentCtor(typeOrFunc);\n const propMetadata = {};\n if (parentCtor !== Object) {\n const parentPropMetadata = this.propMetadata(parentCtor);\n Object.keys(parentPropMetadata).forEach(propName => {\n propMetadata[propName] = parentPropMetadata[propName];\n });\n }\n const ownPropMetadata = this._ownPropMetadata(typeOrFunc, parentCtor);\n if (ownPropMetadata) {\n Object.keys(ownPropMetadata).forEach(propName => {\n const decorators = [];\n if (propMetadata.hasOwnProperty(propName)) {\n decorators.push(...propMetadata[propName]);\n }\n decorators.push(...ownPropMetadata[propName]);\n propMetadata[propName] = decorators;\n });\n }\n return propMetadata;\n }\n ownPropMetadata(typeOrFunc) {\n if (!isType(typeOrFunc)) {\n return {};\n }\n return this._ownPropMetadata(typeOrFunc, getParentCtor(typeOrFunc)) || {};\n }\n hasLifecycleHook(type, lcProperty) {\n return type instanceof Type && lcProperty in type.prototype;\n }\n}\nfunction convertTsickleDecoratorIntoMetadata(decoratorInvocations) {\n if (!decoratorInvocations) {\n return [];\n }\n return decoratorInvocations.map(decoratorInvocation => {\n const decoratorType = decoratorInvocation.type;\n const annotationCls = decoratorType.annotationCls;\n const annotationArgs = decoratorInvocation.args ? decoratorInvocation.args : [];\n return new annotationCls(...annotationArgs);\n });\n}\nfunction getParentCtor(ctor) {\n const parentProto = ctor.prototype ? Object.getPrototypeOf(ctor.prototype) : null;\n const parentCtor = parentProto ? parentProto.constructor : null;\n return parentCtor || Object;\n}\nfunction applyValueToInputField(instance, inputSignalNode, privateName, value) {\n if (inputSignalNode !== null) {\n inputSignalNode.applyValueToInputSignal(inputSignalNode, value);\n } else {\n instance[privateName] = value;\n }\n}\nclass SimpleChange {\n previousValue;\n currentValue;\n firstChange;\n constructor(previousValue, currentValue, firstChange) {\n this.previousValue = previousValue;\n this.currentValue = currentValue;\n this.firstChange = firstChange;\n }\n isFirstChange() {\n return this.firstChange;\n }\n}\nconst \u0275\u0275NgOnChangesFeature = /* @__PURE__ */(() => {\n const \u0275\u0275NgOnChangesFeatureImpl = () => NgOnChangesFeatureImpl;\n \u0275\u0275NgOnChangesFeatureImpl.ngInherit = true;\n return \u0275\u0275NgOnChangesFeatureImpl;\n})();\nfunction NgOnChangesFeatureImpl(definition) {\n if (definition.type.prototype.ngOnChanges) {\n definition.setInput = ngOnChangesSetInput;\n }\n return rememberChangeHistoryAndInvokeOnChangesHook;\n}\nfunction rememberChangeHistoryAndInvokeOnChangesHook() {\n const simpleChangesStore = getSimpleChangesStore(this);\n const current = simpleChangesStore?.current;\n if (current) {\n const previous = simpleChangesStore.previous;\n if (previous === EMPTY_OBJ) {\n simpleChangesStore.previous = current;\n } else {\n for (let key in current) {\n previous[key] = current[key];\n }\n }\n simpleChangesStore.current = null;\n this.ngOnChanges(current);\n }\n}\nfunction ngOnChangesSetInput(instance, inputSignalNode, value, publicName, privateName) {\n const declaredName = this.declaredInputs[publicName];\n ngDevMode && assertString(declaredName, 'Name of input in ngOnChanges has to be a string');\n const simpleChangesStore = getSimpleChangesStore(instance) || setSimpleChangesStore(instance, {\n previous: EMPTY_OBJ,\n current: null\n });\n const current = simpleChangesStore.current || (simpleChangesStore.current = {});\n const previous = simpleChangesStore.previous;\n const previousChange = previous[declaredName];\n current[declaredName] = new SimpleChange(previousChange && previousChange.currentValue, value, previous === EMPTY_OBJ);\n applyValueToInputField(instance, inputSignalNode, privateName, value);\n}\nconst SIMPLE_CHANGES_STORE = '__ngSimpleChanges__';\nfunction getSimpleChangesStore(instance) {\n return instance[SIMPLE_CHANGES_STORE] || null;\n}\nfunction setSimpleChangesStore(instance, store) {\n return instance[SIMPLE_CHANGES_STORE] = store;\n}\nconst profilerCallbacks = [];\nconst NOOP_PROFILER_REMOVAL = () => {};\nfunction removeProfiler(profiler) {\n const profilerIdx = profilerCallbacks.indexOf(profiler);\n if (profilerIdx !== -1) {\n profilerCallbacks.splice(profilerIdx, 1);\n }\n}\nfunction setProfiler(profiler) {\n if (profiler !== null) {\n if (!profilerCallbacks.includes(profiler)) {\n profilerCallbacks.push(profiler);\n }\n return () => removeProfiler(profiler);\n } else {\n profilerCallbacks.length = 0;\n return NOOP_PROFILER_REMOVAL;\n }\n}\nconst profiler = function (event, instance = null, eventFn) {\n for (let i = 0; i < profilerCallbacks.length; i++) {\n const profilerCallback = profilerCallbacks[i];\n profilerCallback(event, instance, eventFn);\n }\n};\nvar ProfilerEvent = /*#__PURE__*/function (ProfilerEvent) {\n ProfilerEvent[ProfilerEvent[\"TemplateCreateStart\"] = 0] = \"TemplateCreateStart\";\n ProfilerEvent[ProfilerEvent[\"TemplateCreateEnd\"] = 1] = \"TemplateCreateEnd\";\n ProfilerEvent[ProfilerEvent[\"TemplateUpdateStart\"] = 2] = \"TemplateUpdateStart\";\n ProfilerEvent[ProfilerEvent[\"TemplateUpdateEnd\"] = 3] = \"TemplateUpdateEnd\";\n ProfilerEvent[ProfilerEvent[\"LifecycleHookStart\"] = 4] = \"LifecycleHookStart\";\n ProfilerEvent[ProfilerEvent[\"LifecycleHookEnd\"] = 5] = \"LifecycleHookEnd\";\n ProfilerEvent[ProfilerEvent[\"OutputStart\"] = 6] = \"OutputStart\";\n ProfilerEvent[ProfilerEvent[\"OutputEnd\"] = 7] = \"OutputEnd\";\n ProfilerEvent[ProfilerEvent[\"BootstrapApplicationStart\"] = 8] = \"BootstrapApplicationStart\";\n ProfilerEvent[ProfilerEvent[\"BootstrapApplicationEnd\"] = 9] = \"BootstrapApplicationEnd\";\n ProfilerEvent[ProfilerEvent[\"BootstrapComponentStart\"] = 10] = \"BootstrapComponentStart\";\n ProfilerEvent[ProfilerEvent[\"BootstrapComponentEnd\"] = 11] = \"BootstrapComponentEnd\";\n ProfilerEvent[ProfilerEvent[\"ChangeDetectionStart\"] = 12] = \"ChangeDetectionStart\";\n ProfilerEvent[ProfilerEvent[\"ChangeDetectionEnd\"] = 13] = \"ChangeDetectionEnd\";\n ProfilerEvent[ProfilerEvent[\"ChangeDetectionSyncStart\"] = 14] = \"ChangeDetectionSyncStart\";\n ProfilerEvent[ProfilerEvent[\"ChangeDetectionSyncEnd\"] = 15] = \"ChangeDetectionSyncEnd\";\n ProfilerEvent[ProfilerEvent[\"AfterRenderHooksStart\"] = 16] = \"AfterRenderHooksStart\";\n ProfilerEvent[ProfilerEvent[\"AfterRenderHooksEnd\"] = 17] = \"AfterRenderHooksEnd\";\n ProfilerEvent[ProfilerEvent[\"ComponentStart\"] = 18] = \"ComponentStart\";\n ProfilerEvent[ProfilerEvent[\"ComponentEnd\"] = 19] = \"ComponentEnd\";\n ProfilerEvent[ProfilerEvent[\"DeferBlockStateStart\"] = 20] = \"DeferBlockStateStart\";\n ProfilerEvent[ProfilerEvent[\"DeferBlockStateEnd\"] = 21] = \"DeferBlockStateEnd\";\n ProfilerEvent[ProfilerEvent[\"DynamicComponentStart\"] = 22] = \"DynamicComponentStart\";\n ProfilerEvent[ProfilerEvent[\"DynamicComponentEnd\"] = 23] = \"DynamicComponentEnd\";\n ProfilerEvent[ProfilerEvent[\"HostBindingsUpdateStart\"] = 24] = \"HostBindingsUpdateStart\";\n ProfilerEvent[ProfilerEvent[\"HostBindingsUpdateEnd\"] = 25] = \"HostBindingsUpdateEnd\";\n return ProfilerEvent;\n}(ProfilerEvent || {});\nfunction registerPreOrderHooks(directiveIndex, directiveDef, tView) {\n ngDevMode && assertFirstCreatePass(tView);\n const {\n ngOnChanges,\n ngOnInit,\n ngDoCheck\n } = directiveDef.type.prototype;\n if (ngOnChanges) {\n const wrappedOnChanges = NgOnChangesFeatureImpl(directiveDef);\n (tView.preOrderHooks ??= []).push(directiveIndex, wrappedOnChanges);\n (tView.preOrderCheckHooks ??= []).push(directiveIndex, wrappedOnChanges);\n }\n if (ngOnInit) {\n (tView.preOrderHooks ??= []).push(0 - directiveIndex, ngOnInit);\n }\n if (ngDoCheck) {\n (tView.preOrderHooks ??= []).push(directiveIndex, ngDoCheck);\n (tView.preOrderCheckHooks ??= []).push(directiveIndex, ngDoCheck);\n }\n}\nfunction registerPostOrderHooks(tView, tNode) {\n ngDevMode && assertFirstCreatePass(tView);\n for (let i = tNode.directiveStart, end = tNode.directiveEnd; i < end; i++) {\n const directiveDef = tView.data[i];\n ngDevMode && assertDefined(directiveDef, 'Expecting DirectiveDef');\n const lifecycleHooks = directiveDef.type.prototype;\n const {\n ngAfterContentInit,\n ngAfterContentChecked,\n ngAfterViewInit,\n ngAfterViewChecked,\n ngOnDestroy\n } = lifecycleHooks;\n if (ngAfterContentInit) {\n (tView.contentHooks ??= []).push(-i, ngAfterContentInit);\n }\n if (ngAfterContentChecked) {\n (tView.contentHooks ??= []).push(i, ngAfterContentChecked);\n (tView.contentCheckHooks ??= []).push(i, ngAfterContentChecked);\n }\n if (ngAfterViewInit) {\n (tView.viewHooks ??= []).push(-i, ngAfterViewInit);\n }\n if (ngAfterViewChecked) {\n (tView.viewHooks ??= []).push(i, ngAfterViewChecked);\n (tView.viewCheckHooks ??= []).push(i, ngAfterViewChecked);\n }\n if (ngOnDestroy != null) {\n (tView.destroyHooks ??= []).push(i, ngOnDestroy);\n }\n }\n}\nfunction executeCheckHooks(lView, hooks, nodeIndex) {\n callHooks(lView, hooks, 3, nodeIndex);\n}\nfunction executeInitAndCheckHooks(lView, hooks, initPhase, nodeIndex) {\n ngDevMode && assertNotEqual(initPhase, 3, 'Init pre-order hooks should not be called more than once');\n if ((lView[FLAGS] & 3) === initPhase) {\n callHooks(lView, hooks, initPhase, nodeIndex);\n }\n}\nfunction incrementInitPhaseFlags(lView, initPhase) {\n ngDevMode && assertNotEqual(initPhase, 3, 'Init hooks phase should not be incremented after all init hooks have been run.');\n let flags = lView[FLAGS];\n if ((flags & 3) === initPhase) {\n flags &= 16383;\n flags += 1;\n lView[FLAGS] = flags;\n }\n}\nfunction callHooks(currentView, arr, initPhase, currentNodeIndex) {\n ngDevMode && assertEqual(isInCheckNoChangesMode(), false, 'Hooks should never be run when in check no changes mode.');\n const startIndex = currentNodeIndex !== undefined ? currentView[PREORDER_HOOK_FLAGS] & 65535 : 0;\n const nodeIndexLimit = currentNodeIndex != null ? currentNodeIndex : -1;\n const max = arr.length - 1;\n let lastNodeIndexFound = 0;\n for (let i = startIndex; i < max; i++) {\n const hook = arr[i + 1];\n if (typeof hook === 'number') {\n lastNodeIndexFound = arr[i];\n if (currentNodeIndex != null && lastNodeIndexFound >= currentNodeIndex) {\n break;\n }\n } else {\n const isInitHook = arr[i] < 0;\n if (isInitHook) {\n currentView[PREORDER_HOOK_FLAGS] += 65536;\n }\n if (lastNodeIndexFound < nodeIndexLimit || nodeIndexLimit == -1) {\n callHook(currentView, initPhase, arr, i);\n currentView[PREORDER_HOOK_FLAGS] = (currentView[PREORDER_HOOK_FLAGS] & 4294901760) + i + 2;\n }\n i++;\n }\n }\n}\nfunction callHookInternal(directive, hook) {\n profiler(ProfilerEvent.LifecycleHookStart, directive, hook);\n const prevConsumer = setActiveConsumer(null);\n try {\n hook.call(directive);\n } finally {\n setActiveConsumer(prevConsumer);\n profiler(ProfilerEvent.LifecycleHookEnd, directive, hook);\n }\n}\nfunction callHook(currentView, initPhase, arr, i) {\n const isInitHook = arr[i] < 0;\n const hook = arr[i + 1];\n const directiveIndex = isInitHook ? -arr[i] : arr[i];\n const directive = currentView[directiveIndex];\n if (isInitHook) {\n const indexWithintInitPhase = currentView[FLAGS] >> 14;\n if (indexWithintInitPhase < currentView[PREORDER_HOOK_FLAGS] >> 16 && (currentView[FLAGS] & 3) === initPhase) {\n currentView[FLAGS] += 16384;\n callHookInternal(directive, hook);\n }\n } else {\n callHookInternal(directive, hook);\n }\n}\nconst NO_PARENT_INJECTOR = -1;\nclass NodeInjectorFactory {\n factory;\n name;\n injectImpl;\n resolving = false;\n canSeeViewProviders;\n multi;\n componentProviders;\n index;\n providerFactory;\n constructor(factory, isViewProvider, injectImplementation, name) {\n this.factory = factory;\n this.name = name;\n ngDevMode && assertDefined(factory, 'Factory not specified');\n ngDevMode && assertEqual(typeof factory, 'function', 'Expected factory function.');\n this.canSeeViewProviders = isViewProvider;\n this.injectImpl = injectImplementation;\n }\n}\nfunction toTNodeTypeAsString(tNodeType) {\n let text = '';\n tNodeType & 1 && (text += '|Text');\n tNodeType & 2 && (text += '|Element');\n tNodeType & 4 && (text += '|Container');\n tNodeType & 8 && (text += '|ElementContainer');\n tNodeType & 16 && (text += '|Projection');\n tNodeType & 32 && (text += '|IcuContainer');\n tNodeType & 64 && (text += '|Placeholder');\n tNodeType & 128 && (text += '|LetDeclaration');\n return text.length > 0 ? text.substring(1) : text;\n}\nfunction isTNodeShape(value) {\n return value != null && typeof value === 'object' && (value.insertBeforeIndex === null || typeof value.insertBeforeIndex === 'number' || Array.isArray(value.insertBeforeIndex));\n}\nfunction isLetDeclaration(tNode) {\n return !!(tNode.type & 128);\n}\nfunction hasClassInput(tNode) {\n return (tNode.flags & 8) !== 0;\n}\nfunction hasStyleInput(tNode) {\n return (tNode.flags & 16) !== 0;\n}\nfunction assertTNodeType(tNode, expectedTypes, message) {\n assertDefined(tNode, 'should be called with a TNode');\n if ((tNode.type & expectedTypes) === 0) {\n throwError(message || `Expected [${toTNodeTypeAsString(expectedTypes)}] but got ${toTNodeTypeAsString(tNode.type)}.`);\n }\n}\nfunction assertPureTNodeType(type) {\n if (!(type === 2 || type === 1 || type === 4 || type === 8 || type === 32 || type === 16 || type === 64 || type === 128)) {\n throwError(`Expected TNodeType to have only a single type selected, but got ${toTNodeTypeAsString(type)}.`);\n }\n}\nfunction setUpAttributes(renderer, native, attrs) {\n let i = 0;\n while (i < attrs.length) {\n const value = attrs[i];\n if (typeof value === 'number') {\n if (value !== 0) {\n break;\n }\n i++;\n const namespaceURI = attrs[i++];\n const attrName = attrs[i++];\n const attrVal = attrs[i++];\n renderer.setAttribute(native, attrName, attrVal, namespaceURI);\n } else {\n const attrName = value;\n const attrVal = attrs[++i];\n if (isAnimationProp(attrName)) {\n renderer.setProperty(native, attrName, attrVal);\n } else {\n renderer.setAttribute(native, attrName, attrVal);\n }\n i++;\n }\n }\n return i;\n}\nfunction isNameOnlyAttributeMarker(marker) {\n return marker === 3 || marker === 4 || marker === 6;\n}\nfunction isAnimationProp(name) {\n return name.charCodeAt(0) === 64;\n}\nfunction mergeHostAttrs(dst, src) {\n if (src === null || src.length === 0) ;else if (dst === null || dst.length === 0) {\n dst = src.slice();\n } else {\n let srcMarker = -1;\n for (let i = 0; i < src.length; i++) {\n const item = src[i];\n if (typeof item === 'number') {\n srcMarker = item;\n } else {\n if (srcMarker === 0) ;else if (srcMarker === -1 || srcMarker === 2) {\n mergeHostAttribute(dst, srcMarker, item, null, src[++i]);\n } else {\n mergeHostAttribute(dst, srcMarker, item, null, null);\n }\n }\n }\n }\n return dst;\n}\nfunction mergeHostAttribute(dst, marker, key1, key2, value) {\n let i = 0;\n let markerInsertPosition = dst.length;\n if (marker === -1) {\n markerInsertPosition = -1;\n } else {\n while (i < dst.length) {\n const dstValue = dst[i++];\n if (typeof dstValue === 'number') {\n if (dstValue === marker) {\n markerInsertPosition = -1;\n break;\n } else if (dstValue > marker) {\n markerInsertPosition = i - 1;\n break;\n }\n }\n }\n }\n while (i < dst.length) {\n const item = dst[i];\n if (typeof item === 'number') {\n break;\n } else if (item === key1) {\n {\n if (value !== null) {\n dst[i + 1] = value;\n }\n return;\n }\n }\n i++;\n if (value !== null) i++;\n }\n if (markerInsertPosition !== -1) {\n dst.splice(markerInsertPosition, 0, marker);\n i = markerInsertPosition + 1;\n }\n dst.splice(i++, 0, key1);\n if (value !== null) {\n dst.splice(i++, 0, value);\n }\n}\nfunction hasParentInjector(parentLocation) {\n return parentLocation !== NO_PARENT_INJECTOR;\n}\nfunction getParentInjectorIndex(parentLocation) {\n if (ngDevMode) {\n assertNumber(parentLocation, 'Number expected');\n assertNotEqual(parentLocation, -1, 'Not a valid state.');\n const parentInjectorIndex = parentLocation & 32767;\n assertGreaterThan(parentInjectorIndex, HEADER_OFFSET, 'Parent injector must be pointing past HEADER_OFFSET.');\n }\n return parentLocation & 32767;\n}\nfunction getParentInjectorViewOffset(parentLocation) {\n return parentLocation >> 16;\n}\nfunction getParentInjectorView(location, startView) {\n let viewOffset = getParentInjectorViewOffset(location);\n let parentView = startView;\n while (viewOffset > 0) {\n parentView = parentView[DECLARATION_VIEW];\n viewOffset--;\n }\n return parentView;\n}\nlet includeViewProviders = true;\nfunction setIncludeViewProviders(v) {\n const oldValue = includeViewProviders;\n includeViewProviders = v;\n return oldValue;\n}\nconst BLOOM_SIZE = 256;\nconst BLOOM_MASK = BLOOM_SIZE - 1;\nconst BLOOM_BUCKET_BITS = 5;\nlet nextNgElementId = 0;\nconst NOT_FOUND = {};\nfunction bloomAdd(injectorIndex, tView, type) {\n ngDevMode && assertEqual(tView.firstCreatePass, true, 'expected firstCreatePass to be true');\n let id;\n if (typeof type === 'string') {\n id = type.charCodeAt(0) || 0;\n } else if (type.hasOwnProperty(NG_ELEMENT_ID)) {\n id = type[NG_ELEMENT_ID];\n }\n if (id == null) {\n id = type[NG_ELEMENT_ID] = nextNgElementId++;\n }\n const bloomHash = id & BLOOM_MASK;\n const mask = 1 << bloomHash;\n tView.data[injectorIndex + (bloomHash >> BLOOM_BUCKET_BITS)] |= mask;\n}\nfunction getOrCreateNodeInjectorForNode(tNode, lView) {\n const existingInjectorIndex = getInjectorIndex(tNode, lView);\n if (existingInjectorIndex !== -1) {\n return existingInjectorIndex;\n }\n const tView = lView[TVIEW];\n if (tView.firstCreatePass) {\n tNode.injectorIndex = lView.length;\n insertBloom(tView.data, tNode);\n insertBloom(lView, null);\n insertBloom(tView.blueprint, null);\n }\n const parentLoc = getParentInjectorLocation(tNode, lView);\n const injectorIndex = tNode.injectorIndex;\n if (hasParentInjector(parentLoc)) {\n const parentIndex = getParentInjectorIndex(parentLoc);\n const parentLView = getParentInjectorView(parentLoc, lView);\n const parentData = parentLView[TVIEW].data;\n for (let i = 0; i < 8; i++) {\n lView[injectorIndex + i] = parentLView[parentIndex + i] | parentData[parentIndex + i];\n }\n }\n lView[injectorIndex + 8] = parentLoc;\n return injectorIndex;\n}\nfunction insertBloom(arr, footer) {\n arr.push(0, 0, 0, 0, 0, 0, 0, 0, footer);\n}\nfunction getInjectorIndex(tNode, lView) {\n if (tNode.injectorIndex === -1 || tNode.parent && tNode.parent.injectorIndex === tNode.injectorIndex || lView[tNode.injectorIndex + 8] === null) {\n return -1;\n } else {\n ngDevMode && assertIndexInRange(lView, tNode.injectorIndex);\n return tNode.injectorIndex;\n }\n}\nfunction getParentInjectorLocation(tNode, lView) {\n if (tNode.parent && tNode.parent.injectorIndex !== -1) {\n return tNode.parent.injectorIndex;\n }\n let declarationViewOffset = 0;\n let parentTNode = null;\n let lViewCursor = lView;\n while (lViewCursor !== null) {\n parentTNode = getTNodeFromLView(lViewCursor);\n if (parentTNode === null) {\n return NO_PARENT_INJECTOR;\n }\n ngDevMode && parentTNode && assertTNodeForLView(parentTNode, lViewCursor[DECLARATION_VIEW]);\n declarationViewOffset++;\n lViewCursor = lViewCursor[DECLARATION_VIEW];\n if (parentTNode.injectorIndex !== -1) {\n return parentTNode.injectorIndex | declarationViewOffset << 16;\n }\n }\n return NO_PARENT_INJECTOR;\n}\nfunction diPublicInInjector(injectorIndex, tView, token) {\n bloomAdd(injectorIndex, tView, token);\n}\nfunction injectAttributeImpl(tNode, attrNameToInject) {\n ngDevMode && assertTNodeType(tNode, 12 | 3);\n ngDevMode && assertDefined(tNode, 'expecting tNode');\n if (attrNameToInject === 'class') {\n return tNode.classes;\n }\n if (attrNameToInject === 'style') {\n return tNode.styles;\n }\n const attrs = tNode.attrs;\n if (attrs) {\n const attrsLength = attrs.length;\n let i = 0;\n while (i < attrsLength) {\n const value = attrs[i];\n if (isNameOnlyAttributeMarker(value)) break;\n if (value === 0) {\n i = i + 2;\n } else if (typeof value === 'number') {\n i++;\n while (i < attrsLength && typeof attrs[i] === 'string') {\n i++;\n }\n } else if (value === attrNameToInject) {\n return attrs[i + 1];\n } else {\n i = i + 2;\n }\n }\n }\n return null;\n}\nfunction notFoundValueOrThrow(notFoundValue, token, flags) {\n if (flags & 8 || notFoundValue !== undefined) {\n return notFoundValue;\n } else {\n throwProviderNotFoundError(token, 'NodeInjector');\n }\n}\nfunction lookupTokenUsingModuleInjector(lView, token, flags, notFoundValue) {\n if (flags & 8 && notFoundValue === undefined) {\n notFoundValue = null;\n }\n if ((flags & (2 | 1)) === 0) {\n const moduleInjector = lView[INJECTOR];\n const previousInjectImplementation = setInjectImplementation(undefined);\n try {\n if (moduleInjector) {\n return moduleInjector.get(token, notFoundValue, flags & 8);\n } else {\n return injectRootLimpMode(token, notFoundValue, flags & 8);\n }\n } finally {\n setInjectImplementation(previousInjectImplementation);\n }\n }\n return notFoundValueOrThrow(notFoundValue, token, flags);\n}\nfunction getOrCreateInjectable(tNode, lView, token, flags = 0, notFoundValue) {\n if (tNode !== null) {\n if (lView[FLAGS] & 2048 && !(flags & 2)) {\n const embeddedInjectorValue = lookupTokenUsingEmbeddedInjector(tNode, lView, token, flags, NOT_FOUND);\n if (embeddedInjectorValue !== NOT_FOUND) {\n return embeddedInjectorValue;\n }\n }\n const value = lookupTokenUsingNodeInjector(tNode, lView, token, flags, NOT_FOUND);\n if (value !== NOT_FOUND) {\n return value;\n }\n }\n return lookupTokenUsingModuleInjector(lView, token, flags, notFoundValue);\n}\nfunction lookupTokenUsingNodeInjector(tNode, lView, token, flags, notFoundValue) {\n const bloomHash = bloomHashBitOrFactory(token);\n if (typeof bloomHash === 'function') {\n if (!enterDI(lView, tNode, flags)) {\n return flags & 1 ? notFoundValueOrThrow(notFoundValue, token, flags) : lookupTokenUsingModuleInjector(lView, token, flags, notFoundValue);\n }\n try {\n let value;\n if (ngDevMode) {\n runInInjectorProfilerContext(new NodeInjector(getCurrentTNode(), getLView()), token, () => {\n emitInjectorToCreateInstanceEvent(token);\n value = bloomHash(flags);\n emitInstanceCreatedByInjectorEvent(value);\n });\n } else {\n value = bloomHash(flags);\n }\n if (value == null && !(flags & 8)) {\n throwProviderNotFoundError(token);\n } else {\n return value;\n }\n } finally {\n leaveDI();\n }\n } else if (typeof bloomHash === 'number') {\n let previousTView = null;\n let injectorIndex = getInjectorIndex(tNode, lView);\n let parentLocation = NO_PARENT_INJECTOR;\n let hostTElementNode = flags & 1 ? lView[DECLARATION_COMPONENT_VIEW][T_HOST] : null;\n if (injectorIndex === -1 || flags & 4) {\n parentLocation = injectorIndex === -1 ? getParentInjectorLocation(tNode, lView) : lView[injectorIndex + 8];\n if (parentLocation === NO_PARENT_INJECTOR || !shouldSearchParent(flags, false)) {\n injectorIndex = -1;\n } else {\n previousTView = lView[TVIEW];\n injectorIndex = getParentInjectorIndex(parentLocation);\n lView = getParentInjectorView(parentLocation, lView);\n }\n }\n while (injectorIndex !== -1) {\n ngDevMode && assertNodeInjector(lView, injectorIndex);\n const tView = lView[TVIEW];\n ngDevMode && assertTNodeForLView(tView.data[injectorIndex + 8], lView);\n if (bloomHasToken(bloomHash, injectorIndex, tView.data)) {\n const instance = searchTokensOnInjector(injectorIndex, lView, token, previousTView, flags, hostTElementNode);\n if (instance !== NOT_FOUND) {\n return instance;\n }\n }\n parentLocation = lView[injectorIndex + 8];\n if (parentLocation !== NO_PARENT_INJECTOR && shouldSearchParent(flags, lView[TVIEW].data[injectorIndex + 8] === hostTElementNode) && bloomHasToken(bloomHash, injectorIndex, lView)) {\n previousTView = tView;\n injectorIndex = getParentInjectorIndex(parentLocation);\n lView = getParentInjectorView(parentLocation, lView);\n } else {\n injectorIndex = -1;\n }\n }\n }\n return notFoundValue;\n}\nfunction searchTokensOnInjector(injectorIndex, lView, token, previousTView, flags, hostTElementNode) {\n const currentTView = lView[TVIEW];\n const tNode = currentTView.data[injectorIndex + 8];\n const canAccessViewProviders = previousTView == null ? isComponentHost(tNode) && includeViewProviders : previousTView != currentTView && (tNode.type & 3) !== 0;\n const isHostSpecialCase = flags & 1 && hostTElementNode === tNode;\n const injectableIdx = locateDirectiveOrProvider(tNode, currentTView, token, canAccessViewProviders, isHostSpecialCase);\n if (injectableIdx !== null) {\n return getNodeInjectable(lView, currentTView, injectableIdx, tNode, flags);\n } else {\n return NOT_FOUND;\n }\n}\nfunction locateDirectiveOrProvider(tNode, tView, token, canAccessViewProviders, isHostSpecialCase) {\n const nodeProviderIndexes = tNode.providerIndexes;\n const tInjectables = tView.data;\n const injectablesStart = nodeProviderIndexes & 1048575;\n const directivesStart = tNode.directiveStart;\n const directiveEnd = tNode.directiveEnd;\n const cptViewProvidersCount = nodeProviderIndexes >> 20;\n const startingIndex = canAccessViewProviders ? injectablesStart : injectablesStart + cptViewProvidersCount;\n const endIndex = isHostSpecialCase ? injectablesStart + cptViewProvidersCount : directiveEnd;\n for (let i = startingIndex; i < endIndex; i++) {\n const providerTokenOrDef = tInjectables[i];\n if (i < directivesStart && token === providerTokenOrDef || i >= directivesStart && providerTokenOrDef.type === token) {\n return i;\n }\n }\n if (isHostSpecialCase) {\n const dirDef = tInjectables[directivesStart];\n if (dirDef && isComponentDef(dirDef) && dirDef.type === token) {\n return directivesStart;\n }\n }\n return null;\n}\nlet injectionPath = [];\nfunction getNodeInjectable(lView, tView, index, tNode, flags) {\n let value = lView[index];\n const tData = tView.data;\n if (value instanceof NodeInjectorFactory) {\n const factory = value;\n ngDevMode && injectionPath.push(factory.name ?? 'unknown');\n if (factory.resolving) {\n let token = '';\n if (ngDevMode) {\n token = stringifyForError(tData[index]);\n throw cyclicDependencyErrorWithDetails(token, injectionPath);\n } else {\n throw cyclicDependencyError(token);\n }\n }\n const previousIncludeViewProviders = setIncludeViewProviders(factory.canSeeViewProviders);\n factory.resolving = true;\n const token = tData[index].type || tData[index];\n let prevInjectContext;\n if (ngDevMode) {\n const injector = new NodeInjector(tNode, lView);\n prevInjectContext = setInjectorProfilerContext({\n injector,\n token\n });\n }\n const previousInjectImplementation = factory.injectImpl ? setInjectImplementation(factory.injectImpl) : null;\n const success = enterDI(lView, tNode, 0);\n ngDevMode && assertEqual(success, true, \"Because flags do not contain `SkipSelf' we expect this to always succeed.\");\n try {\n ngDevMode && emitInjectorToCreateInstanceEvent(token);\n value = lView[index] = factory.factory(undefined, flags, tData, lView, tNode);\n ngDevMode && emitInstanceCreatedByInjectorEvent(value);\n if (tView.firstCreatePass && index >= tNode.directiveStart) {\n ngDevMode && assertDirectiveDef(tData[index]);\n registerPreOrderHooks(index, tData[index], tView);\n }\n } finally {\n ngDevMode && setInjectorProfilerContext(prevInjectContext);\n previousInjectImplementation !== null && setInjectImplementation(previousInjectImplementation);\n setIncludeViewProviders(previousIncludeViewProviders);\n factory.resolving = false;\n leaveDI();\n ngDevMode && (injectionPath = []);\n }\n }\n return value;\n}\nfunction bloomHashBitOrFactory(token) {\n ngDevMode && assertDefined(token, 'token must be defined');\n if (typeof token === 'string') {\n return token.charCodeAt(0) || 0;\n }\n const tokenId = token.hasOwnProperty(NG_ELEMENT_ID) ? token[NG_ELEMENT_ID] : undefined;\n if (typeof tokenId === 'number') {\n if (tokenId >= 0) {\n return tokenId & BLOOM_MASK;\n } else {\n ngDevMode && assertEqual(tokenId, -1, 'Expecting to get Special Injector Id');\n return createNodeInjector;\n }\n } else {\n return tokenId;\n }\n}\nfunction bloomHasToken(bloomHash, injectorIndex, injectorView) {\n const mask = 1 << bloomHash;\n const value = injectorView[injectorIndex + (bloomHash >> BLOOM_BUCKET_BITS)];\n return !!(value & mask);\n}\nfunction shouldSearchParent(flags, isFirstHostTNode) {\n return !(flags & 2) && !(flags & 1 && isFirstHostTNode);\n}\nfunction getNodeInjectorLView(nodeInjector) {\n return nodeInjector._lView;\n}\nfunction getNodeInjectorTNode(nodeInjector) {\n return nodeInjector._tNode;\n}\nclass NodeInjector {\n _tNode;\n _lView;\n constructor(_tNode, _lView) {\n this._tNode = _tNode;\n this._lView = _lView;\n }\n get(token, notFoundValue, flags) {\n return getOrCreateInjectable(this._tNode, this._lView, token, convertToBitFlags(flags), notFoundValue);\n }\n}\nfunction createNodeInjector() {\n return new NodeInjector(getCurrentTNode(), getLView());\n}\nfunction \u0275\u0275getInheritedFactory(type) {\n return noSideEffects(() => {\n const ownConstructor = type.prototype.constructor;\n const ownFactory = ownConstructor[NG_FACTORY_DEF] || getFactoryOf(ownConstructor);\n const objectPrototype = Object.prototype;\n let parent = Object.getPrototypeOf(type.prototype).constructor;\n while (parent && parent !== objectPrototype) {\n const factory = parent[NG_FACTORY_DEF] || getFactoryOf(parent);\n if (factory && factory !== ownFactory) {\n return factory;\n }\n parent = Object.getPrototypeOf(parent);\n }\n return t => new t();\n });\n}\nfunction getFactoryOf(type) {\n if (isForwardRef(type)) {\n return () => {\n const factory = getFactoryOf(resolveForwardRef(type));\n return factory && factory();\n };\n }\n return getFactoryDef(type);\n}\nfunction lookupTokenUsingEmbeddedInjector(tNode, lView, token, flags, notFoundValue) {\n let currentTNode = tNode;\n let currentLView = lView;\n while (currentTNode !== null && currentLView !== null && currentLView[FLAGS] & 2048 && !isRootView(currentLView)) {\n ngDevMode && assertTNodeForLView(currentTNode, currentLView);\n const nodeInjectorValue = lookupTokenUsingNodeInjector(currentTNode, currentLView, token, flags | 2, NOT_FOUND);\n if (nodeInjectorValue !== NOT_FOUND) {\n return nodeInjectorValue;\n }\n let parentTNode = currentTNode.parent;\n if (!parentTNode) {\n const embeddedViewInjector = currentLView[EMBEDDED_VIEW_INJECTOR];\n if (embeddedViewInjector) {\n const embeddedViewInjectorValue = embeddedViewInjector.get(token, NOT_FOUND, flags & ~4);\n if (embeddedViewInjectorValue !== NOT_FOUND) {\n return embeddedViewInjectorValue;\n }\n }\n parentTNode = getTNodeFromLView(currentLView);\n currentLView = currentLView[DECLARATION_VIEW];\n }\n currentTNode = parentTNode;\n }\n return notFoundValue;\n}\nfunction getTNodeFromLView(lView) {\n const tView = lView[TVIEW];\n const tViewType = tView.type;\n if (tViewType === 2) {\n ngDevMode && assertDefined(tView.declTNode, 'Embedded TNodes should have declaration parents.');\n return tView.declTNode;\n } else if (tViewType === 1) {\n return lView[T_HOST];\n }\n return null;\n}\nfunction \u0275\u0275injectAttribute(attrNameToInject) {\n return injectAttributeImpl(getCurrentTNode(), attrNameToInject);\n}\nconst Attribute = /*#__PURE__*/makeParamDecorator('Attribute', attributeName => ({\n attributeName,\n __NG_ELEMENT_ID__: () => \u0275\u0275injectAttribute(attributeName)\n}));\nlet _reflect = null;\nfunction getReflect() {\n return _reflect = _reflect || new ReflectionCapabilities();\n}\nfunction reflectDependencies(type) {\n return convertDependencies(getReflect().parameters(type));\n}\nfunction convertDependencies(deps) {\n return deps.map(dep => reflectDependency(dep));\n}\nfunction reflectDependency(dep) {\n const meta = {\n token: null,\n attribute: null,\n host: false,\n optional: false,\n self: false,\n skipSelf: false\n };\n if (Array.isArray(dep) && dep.length > 0) {\n for (let j = 0; j < dep.length; j++) {\n const param = dep[j];\n if (param === undefined) {\n continue;\n }\n const proto = Object.getPrototypeOf(param);\n if (param instanceof Optional || proto.ngMetadataName === 'Optional') {\n meta.optional = true;\n } else if (param instanceof SkipSelf || proto.ngMetadataName === 'SkipSelf') {\n meta.skipSelf = true;\n } else if (param instanceof Self || proto.ngMetadataName === 'Self') {\n meta.self = true;\n } else if (param instanceof Host || proto.ngMetadataName === 'Host') {\n meta.host = true;\n } else if (param instanceof Inject) {\n meta.token = param.token;\n } else if (param instanceof Attribute) {\n if (param.attributeName === undefined) {\n throw new RuntimeError(-204, ngDevMode && `Attribute name must be defined.`);\n }\n meta.attribute = param.attributeName;\n } else {\n meta.token = param;\n }\n }\n } else if (dep === undefined || Array.isArray(dep) && dep.length === 0) {\n meta.token = null;\n } else {\n meta.token = dep;\n }\n return meta;\n}\nfunction compileInjectable(type, meta) {\n let ngInjectableDef = null;\n let ngFactoryDef = null;\n if (!type.hasOwnProperty(NG_PROV_DEF)) {\n Object.defineProperty(type, NG_PROV_DEF, {\n get: () => {\n if (ngInjectableDef === null) {\n const compiler = getCompilerFacade({\n usage: 0,\n kind: 'injectable',\n type\n });\n ngInjectableDef = compiler.compileInjectable(angularCoreDiEnv, `ng:///${type.name}/\u0275prov.js`, getInjectableMetadata(type, meta));\n }\n return ngInjectableDef;\n }\n });\n }\n if (!type.hasOwnProperty(NG_FACTORY_DEF)) {\n Object.defineProperty(type, NG_FACTORY_DEF, {\n get: () => {\n if (ngFactoryDef === null) {\n const compiler = getCompilerFacade({\n usage: 0,\n kind: 'injectable',\n type\n });\n ngFactoryDef = compiler.compileFactory(angularCoreDiEnv, `ng:///${type.name}/\u0275fac.js`, {\n name: type.name,\n type,\n typeArgumentCount: 0,\n deps: reflectDependencies(type),\n target: compiler.FactoryTarget.Injectable\n });\n }\n return ngFactoryDef;\n },\n configurable: true\n });\n }\n}\nconst USE_VALUE = /*#__PURE__*/getClosureSafeProperty({\n provide: String,\n useValue: getClosureSafeProperty\n});\nfunction isUseClassProvider(meta) {\n return meta.useClass !== undefined;\n}\nfunction isUseValueProvider(meta) {\n return USE_VALUE in meta;\n}\nfunction isUseFactoryProvider(meta) {\n return meta.useFactory !== undefined;\n}\nfunction isUseExistingProvider(meta) {\n return meta.useExisting !== undefined;\n}\nfunction getInjectableMetadata(type, srcMeta) {\n const meta = srcMeta || {\n providedIn: null\n };\n const compilerMeta = {\n name: type.name,\n type: type,\n typeArgumentCount: 0,\n providedIn: meta.providedIn\n };\n if ((isUseClassProvider(meta) || isUseFactoryProvider(meta)) && meta.deps !== undefined) {\n compilerMeta.deps = convertDependencies(meta.deps);\n }\n if (isUseClassProvider(meta)) {\n compilerMeta.useClass = meta.useClass;\n } else if (isUseValueProvider(meta)) {\n compilerMeta.useValue = meta.useValue;\n } else if (isUseFactoryProvider(meta)) {\n compilerMeta.useFactory = meta.useFactory;\n } else if (isUseExistingProvider(meta)) {\n compilerMeta.useExisting = meta.useExisting;\n }\n return compilerMeta;\n}\nconst Injectable = /*#__PURE__*/makeDecorator('Injectable', undefined, undefined, undefined, (type, meta) => compileInjectable(type, meta));\nfunction injectElementRef() {\n return createElementRef(getCurrentTNode(), getLView());\n}\nfunction createElementRef(tNode, lView) {\n return new ElementRef(getNativeByTNode(tNode, lView));\n}\nlet ElementRef = /*#__PURE__*/(() => {\n class ElementRef {\n nativeElement;\n constructor(nativeElement) {\n this.nativeElement = nativeElement;\n }\n static __NG_ELEMENT_ID__ = injectElementRef;\n }\n return ElementRef;\n})();\nfunction unwrapElementRef(value) {\n return value instanceof ElementRef ? value.nativeElement : value;\n}\nfunction symbolIterator() {\n return this._results[Symbol.iterator]();\n}\nclass QueryList {\n _emitDistinctChangesOnly;\n dirty = true;\n _onDirty = undefined;\n _results = [];\n _changesDetected = false;\n _changes = undefined;\n length = 0;\n first = undefined;\n last = undefined;\n get changes() {\n return this._changes ??= new Subject();\n }\n constructor(_emitDistinctChangesOnly = false) {\n this._emitDistinctChangesOnly = _emitDistinctChangesOnly;\n }\n get(index) {\n return this._results[index];\n }\n map(fn) {\n return this._results.map(fn);\n }\n filter(fn) {\n return this._results.filter(fn);\n }\n find(fn) {\n return this._results.find(fn);\n }\n reduce(fn, init) {\n return this._results.reduce(fn, init);\n }\n forEach(fn) {\n this._results.forEach(fn);\n }\n some(fn) {\n return this._results.some(fn);\n }\n toArray() {\n return this._results.slice();\n }\n toString() {\n return this._results.toString();\n }\n reset(resultsTree, identityAccessor) {\n this.dirty = false;\n const newResultFlat = flatten(resultsTree);\n if (this._changesDetected = !arrayEquals(this._results, newResultFlat, identityAccessor)) {\n this._results = newResultFlat;\n this.length = newResultFlat.length;\n this.last = newResultFlat[this.length - 1];\n this.first = newResultFlat[0];\n }\n }\n notifyOnChanges() {\n if (this._changes !== undefined && (this._changesDetected || !this._emitDistinctChangesOnly)) this._changes.next(this);\n }\n onDirty(cb) {\n this._onDirty = cb;\n }\n setDirty() {\n this.dirty = true;\n this._onDirty?.();\n }\n destroy() {\n if (this._changes !== undefined) {\n this._changes.complete();\n this._changes.unsubscribe();\n }\n }\n [Symbol.iterator] = /*#__PURE__*/(() => symbolIterator)();\n}\nconst SKIP_HYDRATION_ATTR_NAME = 'ngSkipHydration';\nconst SKIP_HYDRATION_ATTR_NAME_LOWER_CASE = 'ngskiphydration';\nfunction hasSkipHydrationAttrOnTNode(tNode) {\n const attrs = tNode.mergedAttrs;\n if (attrs === null) return false;\n for (let i = 0; i < attrs.length; i += 2) {\n const value = attrs[i];\n if (typeof value === 'number') return false;\n if (typeof value === 'string' && value.toLowerCase() === SKIP_HYDRATION_ATTR_NAME_LOWER_CASE) {\n return true;\n }\n }\n return false;\n}\nfunction hasSkipHydrationAttrOnRElement(rNode) {\n return rNode.hasAttribute(SKIP_HYDRATION_ATTR_NAME);\n}\nfunction hasInSkipHydrationBlockFlag(tNode) {\n return (tNode.flags & 128) === 128;\n}\nfunction isInSkipHydrationBlock(tNode) {\n if (hasInSkipHydrationBlockFlag(tNode)) {\n return true;\n }\n let currentTNode = tNode.parent;\n while (currentTNode) {\n if (hasInSkipHydrationBlockFlag(tNode) || hasSkipHydrationAttrOnTNode(currentTNode)) {\n return true;\n }\n currentTNode = currentTNode.parent;\n }\n return false;\n}\nfunction isI18nInSkipHydrationBlock(parentTNode) {\n return hasInSkipHydrationBlockFlag(parentTNode) || hasSkipHydrationAttrOnTNode(parentTNode) || isInSkipHydrationBlock(parentTNode);\n}\nvar ChangeDetectionStrategy = /*#__PURE__*/function (ChangeDetectionStrategy) {\n ChangeDetectionStrategy[ChangeDetectionStrategy[\"OnPush\"] = 0] = \"OnPush\";\n ChangeDetectionStrategy[ChangeDetectionStrategy[\"Eager\"] = 1] = \"Eager\";\n ChangeDetectionStrategy[ChangeDetectionStrategy[\"Default\"] = 1] = \"Default\";\n return ChangeDetectionStrategy;\n}(ChangeDetectionStrategy || {});\nconst TRACKED_LVIEWS = /*#__PURE__*/new Map();\nlet uniqueIdCounter = 0;\nfunction getUniqueLViewId() {\n return uniqueIdCounter++;\n}\nfunction registerLView(lView) {\n ngDevMode && assertNumber(lView[ID], 'LView must have an ID in order to be registered');\n TRACKED_LVIEWS.set(lView[ID], lView);\n}\nfunction getLViewById(id) {\n ngDevMode && assertNumber(id, 'ID used for LView lookup must be a number');\n return TRACKED_LVIEWS.get(id) || null;\n}\nfunction unregisterLView(lView) {\n ngDevMode && assertNumber(lView[ID], 'Cannot stop tracking an LView that does not have an ID');\n TRACKED_LVIEWS.delete(lView[ID]);\n}\nfunction getTrackedLViews() {\n return TRACKED_LVIEWS;\n}\nclass LContext {\n lViewId;\n nodeIndex;\n native;\n component;\n directives;\n localRefs;\n get lView() {\n return getLViewById(this.lViewId);\n }\n constructor(lViewId, nodeIndex, native) {\n this.lViewId = lViewId;\n this.nodeIndex = nodeIndex;\n this.native = native;\n }\n}\nfunction getLContext(target) {\n let mpValue = readPatchedData(target);\n if (mpValue) {\n if (isLView(mpValue)) {\n const lView = mpValue;\n let nodeIndex;\n let component = undefined;\n let directives = undefined;\n if (isComponentInstance(target)) {\n nodeIndex = findViaComponent(lView, target);\n if (nodeIndex == -1) {\n throw new Error('The provided component was not found in the application');\n }\n component = target;\n } else if (isDirectiveInstance(target)) {\n nodeIndex = findViaDirective(lView, target);\n if (nodeIndex == -1) {\n throw new Error('The provided directive was not found in the application');\n }\n directives = getDirectivesAtNodeIndex(nodeIndex, lView);\n } else {\n nodeIndex = findViaNativeElement(lView, target);\n if (nodeIndex == -1) {\n return null;\n }\n }\n const native = unwrapRNode(lView[nodeIndex]);\n const existingCtx = readPatchedData(native);\n const context = existingCtx && !Array.isArray(existingCtx) ? existingCtx : createLContext(lView, nodeIndex, native);\n if (component && context.component === undefined) {\n context.component = component;\n attachPatchData(context.component, context);\n }\n if (directives && context.directives === undefined) {\n context.directives = directives;\n for (let i = 0; i < directives.length; i++) {\n attachPatchData(directives[i], context);\n }\n }\n attachPatchData(context.native, context);\n mpValue = context;\n }\n } else {\n const rElement = target;\n ngDevMode && assertDomNode(rElement);\n let parent = rElement;\n while (parent = parent.parentNode) {\n const parentContext = readPatchedData(parent);\n if (parentContext) {\n const lView = Array.isArray(parentContext) ? parentContext : parentContext.lView;\n if (!lView) {\n return null;\n }\n const index = findViaNativeElement(lView, rElement);\n if (index >= 0) {\n const native = unwrapRNode(lView[index]);\n const context = createLContext(lView, index, native);\n attachPatchData(native, context);\n mpValue = context;\n break;\n }\n }\n }\n }\n return mpValue || null;\n}\nfunction createLContext(lView, nodeIndex, native) {\n return new LContext(lView[ID], nodeIndex, native);\n}\nfunction getComponentViewByInstance(componentInstance) {\n let patchedData = readPatchedData(componentInstance);\n let lView;\n if (isLView(patchedData)) {\n const contextLView = patchedData;\n const nodeIndex = findViaComponent(contextLView, componentInstance);\n lView = getComponentLViewByIndex(nodeIndex, contextLView);\n const context = createLContext(contextLView, nodeIndex, lView[HOST]);\n context.component = componentInstance;\n attachPatchData(componentInstance, context);\n attachPatchData(context.native, context);\n } else {\n const context = patchedData;\n const contextLView = context.lView;\n ngDevMode && assertLView(contextLView);\n lView = getComponentLViewByIndex(context.nodeIndex, contextLView);\n }\n return lView;\n}\nconst MONKEY_PATCH_KEY_NAME = '__ngContext__';\nfunction attachPatchData(target, data) {\n ngDevMode && assertDefined(target, 'Target expected');\n if (isLView(data)) {\n target[MONKEY_PATCH_KEY_NAME] = data[ID];\n registerLView(data);\n } else {\n target[MONKEY_PATCH_KEY_NAME] = data;\n }\n}\nfunction readPatchedData(target) {\n ngDevMode && assertDefined(target, 'Target expected');\n const data = target[MONKEY_PATCH_KEY_NAME];\n return typeof data === 'number' ? getLViewById(data) : data || null;\n}\nfunction readPatchedLView(target) {\n const value = readPatchedData(target);\n if (value) {\n return isLView(value) ? value : value.lView;\n }\n return null;\n}\nfunction isComponentInstance(instance) {\n return instance && instance.constructor && instance.constructor.\u0275cmp;\n}\nfunction isDirectiveInstance(instance) {\n return instance && instance.constructor && instance.constructor.\u0275dir;\n}\nfunction findViaNativeElement(lView, target) {\n const tView = lView[TVIEW];\n for (let i = HEADER_OFFSET; i < tView.bindingStartIndex; i++) {\n if (unwrapRNode(lView[i]) === target) {\n return i;\n }\n }\n return -1;\n}\nfunction traverseNextElement(tNode) {\n if (tNode.child) {\n return tNode.child;\n } else if (tNode.next) {\n return tNode.next;\n } else {\n while (tNode.parent && !tNode.parent.next) {\n tNode = tNode.parent;\n }\n return tNode.parent && tNode.parent.next;\n }\n}\nfunction findViaComponent(lView, componentInstance) {\n const componentIndices = lView[TVIEW].components;\n if (componentIndices) {\n for (let i = 0; i < componentIndices.length; i++) {\n const elementComponentIndex = componentIndices[i];\n const componentView = getComponentLViewByIndex(elementComponentIndex, lView);\n if (componentView[CONTEXT] === componentInstance) {\n return elementComponentIndex;\n }\n }\n } else {\n const rootComponentView = getComponentLViewByIndex(HEADER_OFFSET, lView);\n const rootComponent = rootComponentView[CONTEXT];\n if (rootComponent === componentInstance) {\n return HEADER_OFFSET;\n }\n }\n return -1;\n}\nfunction findViaDirective(lView, directiveInstance) {\n let tNode = lView[TVIEW].firstChild;\n while (tNode) {\n const directiveIndexStart = tNode.directiveStart;\n const directiveIndexEnd = tNode.directiveEnd;\n for (let i = directiveIndexStart; i < directiveIndexEnd; i++) {\n if (lView[i] === directiveInstance) {\n return tNode.index;\n }\n }\n tNode = traverseNextElement(tNode);\n }\n return -1;\n}\nfunction getDirectivesAtNodeIndex(nodeIndex, lView) {\n const tNode = lView[TVIEW].data[nodeIndex];\n if (tNode.directiveStart === 0) return EMPTY_ARRAY;\n const results = [];\n for (let i = tNode.directiveStart; i < tNode.directiveEnd; i++) {\n const directiveInstance = lView[i];\n if (!isComponentInstance(directiveInstance)) {\n results.push(directiveInstance);\n }\n }\n return results;\n}\nfunction getComponentAtNodeIndex(nodeIndex, lView) {\n const tNode = lView[TVIEW].data[nodeIndex];\n return isComponentHost(tNode) ? lView[tNode.directiveStart + tNode.componentOffset] : null;\n}\nfunction discoverLocalRefs(lView, nodeIndex) {\n const tNode = lView[TVIEW].data[nodeIndex];\n if (tNode && tNode.localNames) {\n const result = {};\n let localIndex = tNode.index + 1;\n for (let i = 0; i < tNode.localNames.length; i += 2) {\n result[tNode.localNames[i]] = lView[localIndex];\n localIndex++;\n }\n return result;\n }\n return null;\n}\nfunction getRootView(componentOrLView) {\n ngDevMode && assertDefined(componentOrLView, 'component');\n let lView = isLView(componentOrLView) ? componentOrLView : readPatchedLView(componentOrLView);\n while (lView && !isRootView(lView)) {\n lView = getLViewParent(lView);\n }\n ngDevMode && assertLView(lView);\n return lView;\n}\nfunction getRootContext(viewOrComponent) {\n const rootView = getRootView(viewOrComponent);\n ngDevMode && assertDefined(rootView[CONTEXT], 'Root view has no context. Perhaps it is disconnected?');\n return rootView[CONTEXT];\n}\nfunction getFirstLContainer(lView) {\n return getNearestLContainer(lView[CHILD_HEAD]);\n}\nfunction getNextLContainer(container) {\n return getNearestLContainer(container[NEXT]);\n}\nfunction getNearestLContainer(viewOrContainer) {\n while (viewOrContainer !== null && !isLContainer(viewOrContainer)) {\n viewOrContainer = viewOrContainer[NEXT];\n }\n return viewOrContainer;\n}\nfunction getComponent(element) {\n ngDevMode && assertDomElement(element);\n const context = getLContext(element);\n if (context === null) return null;\n if (context.component === undefined) {\n const lView = context.lView;\n if (lView === null) {\n return null;\n }\n context.component = getComponentAtNodeIndex(context.nodeIndex, lView);\n }\n return context.component;\n}\nfunction getContext(element) {\n assertDomElement(element);\n const context = getLContext(element);\n const lView = context ? context.lView : null;\n return lView === null ? null : lView[CONTEXT];\n}\nfunction getOwningComponent(elementOrDir) {\n const context = getLContext(elementOrDir);\n let lView = context ? context.lView : null;\n if (lView === null) return null;\n let parent;\n while (lView[TVIEW].type === 2 && (parent = getLViewParent(lView))) {\n lView = parent;\n }\n return isRootView(lView) ? null : lView[CONTEXT];\n}\nfunction getRootComponents(elementOrDir) {\n const lView = readPatchedLView(elementOrDir);\n return lView !== null ? [getRootContext(lView)] : [];\n}\nfunction getInjector(elementOrDir) {\n const context = getLContext(elementOrDir);\n const lView = context ? context.lView : null;\n if (lView === null) return Injector.NULL;\n const tNode = lView[TVIEW].data[context.nodeIndex];\n return new NodeInjector(tNode, lView);\n}\nfunction getInjectionTokens(element) {\n const context = getLContext(element);\n const lView = context ? context.lView : null;\n if (lView === null) return [];\n const tView = lView[TVIEW];\n const tNode = tView.data[context.nodeIndex];\n const providerTokens = [];\n const startIndex = tNode.providerIndexes & 1048575;\n const endIndex = tNode.directiveEnd;\n for (let i = startIndex; i < endIndex; i++) {\n let value = tView.data[i];\n if (isDirectiveDefHack(value)) {\n value = value.type;\n }\n providerTokens.push(value);\n }\n return providerTokens;\n}\nfunction getDirectives(node) {\n if (node instanceof Text) {\n return [];\n }\n const context = getLContext(node);\n const lView = context ? context.lView : null;\n if (lView === null) {\n return [];\n }\n const tView = lView[TVIEW];\n const nodeIndex = context.nodeIndex;\n if (!tView?.data[nodeIndex]) {\n return [];\n }\n if (context.directives === undefined) {\n context.directives = getDirectivesAtNodeIndex(nodeIndex, lView);\n }\n return context.directives === null ? [] : [...context.directives];\n}\nvar AcxChangeDetectionStrategy = /*#__PURE__*/function (AcxChangeDetectionStrategy) {\n AcxChangeDetectionStrategy[AcxChangeDetectionStrategy[\"Default\"] = 0] = \"Default\";\n AcxChangeDetectionStrategy[AcxChangeDetectionStrategy[\"OnPush\"] = 1] = \"OnPush\";\n return AcxChangeDetectionStrategy;\n}(AcxChangeDetectionStrategy || {});\nvar AcxViewEncapsulation = /*#__PURE__*/function (AcxViewEncapsulation) {\n AcxViewEncapsulation[AcxViewEncapsulation[\"Emulated\"] = 0] = \"Emulated\";\n AcxViewEncapsulation[AcxViewEncapsulation[\"None\"] = 1] = \"None\";\n return AcxViewEncapsulation;\n}(AcxViewEncapsulation || {});\nfunction getDirectiveMetadata$1(directiveOrComponentInstance) {\n const {\n constructor\n } = directiveOrComponentInstance;\n if (!constructor) {\n throw new Error('Unable to find the instance constructor');\n }\n const componentDef = getComponentDef(constructor);\n if (componentDef) {\n const inputs = extractInputDebugMetadata(componentDef.inputs);\n return {\n inputs,\n outputs: componentDef.outputs,\n encapsulation: componentDef.encapsulation,\n changeDetection: componentDef.onPush ? ChangeDetectionStrategy.OnPush : ChangeDetectionStrategy.Eager\n };\n }\n const directiveDef = getDirectiveDef(constructor);\n if (directiveDef) {\n const inputs = extractInputDebugMetadata(directiveDef.inputs);\n return {\n inputs,\n outputs: directiveDef.outputs\n };\n }\n return null;\n}\nfunction getLocalRefs(target) {\n const context = getLContext(target);\n if (context === null) return {};\n if (context.localRefs === undefined) {\n const lView = context.lView;\n if (lView === null) {\n return {};\n }\n context.localRefs = discoverLocalRefs(lView, context.nodeIndex);\n }\n return context.localRefs || {};\n}\nfunction getHostElement(componentOrDirective) {\n return getLContext(componentOrDirective).native;\n}\nfunction getListeners(element) {\n ngDevMode && assertDomElement(element);\n const lContext = getLContext(element);\n const lView = lContext === null ? null : lContext.lView;\n if (lView === null) return [];\n const tView = lView[TVIEW];\n const lCleanup = lView[CLEANUP];\n const tCleanup = tView.cleanup;\n const listeners = [];\n if (tCleanup && lCleanup) {\n for (let i = 0; i < tCleanup.length;) {\n const firstParam = tCleanup[i++];\n const secondParam = tCleanup[i++];\n if (typeof firstParam === 'string') {\n const name = firstParam;\n const listenerElement = unwrapRNode(lView[secondParam]);\n const callback = lCleanup[tCleanup[i++]];\n const useCaptureOrIndx = tCleanup[i++];\n const type = typeof useCaptureOrIndx === 'boolean' || useCaptureOrIndx >= 0 ? 'dom' : 'output';\n const useCapture = typeof useCaptureOrIndx === 'boolean' ? useCaptureOrIndx : false;\n if (element == listenerElement) {\n listeners.push({\n element,\n name,\n callback,\n useCapture,\n type\n });\n }\n }\n }\n }\n listeners.sort(sortListeners);\n return listeners;\n}\nfunction sortListeners(a, b) {\n if (a.name == b.name) return 0;\n return a.name < b.name ? -1 : 1;\n}\nfunction isDirectiveDefHack(obj) {\n return obj.type !== undefined && obj.declaredInputs !== undefined && obj.resolveHostDirectives !== undefined;\n}\nfunction assertDomElement(value) {\n if (typeof Element !== 'undefined' && !(value instanceof Element)) {\n throw new Error('Expecting instance of DOM Element');\n }\n}\nfunction extractInputDebugMetadata(inputs) {\n const res = {};\n for (const key in inputs) {\n if (inputs.hasOwnProperty(key)) {\n const value = inputs[key];\n if (value !== undefined) {\n res[key] = value[0];\n }\n }\n }\n return res;\n}\nlet DOCUMENT = undefined;\nfunction setDocument(document) {\n DOCUMENT = document;\n}\nfunction getDocument() {\n if (DOCUMENT !== undefined) {\n return DOCUMENT;\n } else if (typeof document !== 'undefined') {\n return document;\n }\n throw new RuntimeError(210, (typeof ngDevMode === 'undefined' || ngDevMode) && `The document object is not available in this context. Make sure the DOCUMENT injection token is provided.`);\n}\nconst APP_ID = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'AppId' : '', {\n factory: () => DEFAULT_APP_ID\n});\nconst DEFAULT_APP_ID = 'ng';\nconst validAppIdInitializer = {\n provide: ENVIRONMENT_INITIALIZER,\n multi: true,\n useValue: () => {\n const appId = inject(APP_ID);\n const isAlphanumeric = /^[a-zA-Z0-9\\-_]+$/.test(appId);\n if (!isAlphanumeric) {\n throw new RuntimeError(211, `APP_ID value \"${appId}\" is not alphanumeric. ` + `The APP_ID must be a string of alphanumeric characters. (a-zA-Z0-9), hyphens (-) and underscores (_) are allowed.`);\n }\n }\n};\nconst PLATFORM_INITIALIZER = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'Platform Initializer' : '');\nconst PLATFORM_ID = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'Platform ID' : '', {\n providedIn: 'platform',\n factory: () => 'unknown'\n});\nconst ANIMATION_MODULE_TYPE = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'AnimationModuleType' : '');\nconst CSP_NONCE = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'CSP nonce' : '', {\n factory: () => {\n return inject(DOCUMENT$1).body?.querySelector('[ngCspNonce]')?.getAttribute('ngCspNonce') || null;\n }\n});\nconst IMAGE_CONFIG_DEFAULTS = {\n breakpoints: [16, 32, 48, 64, 96, 128, 256, 384, 640, 750, 828, 1080, 1200, 1920, 2048, 3840],\n placeholderResolution: 30,\n disableImageSizeWarning: false,\n disableImageLazyLoadWarning: false\n};\nconst IMAGE_CONFIG = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'ImageConfig' : '', {\n factory: () => IMAGE_CONFIG_DEFAULTS\n});\nfunction makeStateKey(key) {\n return key;\n}\nlet TransferState = /*#__PURE__*/(() => {\n class TransferState {\n static \u0275prov = /* @__PURE__ */\n __defineInjectable({\n token: TransferState,\n providedIn: 'root',\n factory: () => {\n const transferState = new TransferState();\n if (typeof ngServerMode === 'undefined' || !ngServerMode) {\n transferState.store = retrieveTransferredState(inject(DOCUMENT$1), inject(APP_ID));\n }\n return transferState;\n }\n });\n store = {};\n onSerializeCallbacks = {};\n get(key, defaultValue) {\n return this.store[key] !== undefined ? this.store[key] : defaultValue;\n }\n set(key, value) {\n this.store[key] = value;\n }\n remove(key) {\n delete this.store[key];\n }\n hasKey(key) {\n return this.store.hasOwnProperty(key);\n }\n get isEmpty() {\n return Object.keys(this.store).length === 0;\n }\n onSerialize(key, callback) {\n this.onSerializeCallbacks[key] = callback;\n }\n toJson() {\n for (const key in this.onSerializeCallbacks) {\n if (this.onSerializeCallbacks.hasOwnProperty(key)) {\n try {\n this.store[key] = this.onSerializeCallbacks[key]();\n } catch (e) {\n console.warn('Exception in onSerialize callback: ', e);\n }\n }\n }\n return JSON.stringify(this.store).replace(/ PRESERVE_HOST_CONTENT_DEFAULT\n});\nconst IS_I18N_HYDRATION_ENABLED = /*#__PURE__*/new InjectionToken(typeof ngDevMode === 'undefined' || ngDevMode ? 'IS_I18N_HYDRATION_ENABLED' : '');\nconst IS_EVENT_REPLAY_ENABLED = /*#__PURE__*/new InjectionToken(typeof ngDevMode === 'undefined' || ngDevMode ? 'IS_EVENT_REPLAY_ENABLED' : '');\nconst EVENT_REPLAY_ENABLED_DEFAULT = false;\nconst EVENT_REPLAY_QUEUE = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'EVENT_REPLAY_QUEUE' : '', {\n factory: () => []\n});\nconst IS_INCREMENTAL_HYDRATION_ENABLED = /*#__PURE__*/new InjectionToken(typeof ngDevMode === 'undefined' || ngDevMode ? 'IS_INCREMENTAL_HYDRATION_ENABLED' : '');\nconst JSACTION_BLOCK_ELEMENT_MAP = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'JSACTION_BLOCK_ELEMENT_MAP' : '', {\n factory: () => new Map()\n});\nconst IS_ENABLED_BLOCKING_INITIAL_NAVIGATION = /*#__PURE__*/new InjectionToken(typeof ngDevMode === 'undefined' || ngDevMode ? 'IS_ENABLED_BLOCKING_INITIAL_NAVIGATION' : '');\nconst eventListenerOptions = {\n passive: true,\n capture: true\n};\nconst hoverTriggers = /*#__PURE__*/new WeakMap();\nconst interactionTriggers = /*#__PURE__*/new WeakMap();\nconst viewportTriggers = /*#__PURE__*/new WeakMap();\nconst interactionEventNames = ['click', 'keydown'];\nconst hoverEventNames = ['mouseenter', 'mouseover', 'focusin'];\nconst intersectionObservers = /*#__PURE__*/new Map();\nclass DeferEventEntry {\n callbacks = /*#__PURE__*/new Set();\n listener = () => {\n for (const callback of this.callbacks) {\n callback();\n }\n };\n}\nfunction onInteraction(trigger, callback) {\n let entry = interactionTriggers.get(trigger);\n if (!entry) {\n entry = new DeferEventEntry();\n interactionTriggers.set(trigger, entry);\n for (const name of interactionEventNames) {\n trigger.addEventListener(name, entry.listener, eventListenerOptions);\n }\n }\n entry.callbacks.add(callback);\n return () => {\n const {\n callbacks,\n listener\n } = entry;\n callbacks.delete(callback);\n if (callbacks.size === 0) {\n interactionTriggers.delete(trigger);\n for (const name of interactionEventNames) {\n trigger.removeEventListener(name, listener, eventListenerOptions);\n }\n }\n };\n}\nfunction onHover(trigger, callback) {\n let entry = hoverTriggers.get(trigger);\n if (!entry) {\n entry = new DeferEventEntry();\n hoverTriggers.set(trigger, entry);\n for (const name of hoverEventNames) {\n trigger.addEventListener(name, entry.listener, eventListenerOptions);\n }\n }\n entry.callbacks.add(callback);\n return () => {\n const {\n callbacks,\n listener\n } = entry;\n callbacks.delete(callback);\n if (callbacks.size === 0) {\n for (const name of hoverEventNames) {\n trigger.removeEventListener(name, listener, eventListenerOptions);\n }\n hoverTriggers.delete(trigger);\n }\n };\n}\nfunction createIntersectionObserver(options) {\n const key = getIntersectionObserverKey(options);\n return new IntersectionObserver(entries => {\n for (const current of entries) {\n if (current.isIntersecting && viewportTriggers.has(current.target)) {\n viewportTriggers.get(current.target)?.get(key)?.listener();\n }\n }\n }, options);\n}\nfunction onViewport(trigger, callback, observerFactoryFn, options) {\n const key = getIntersectionObserverKey(options);\n let entry = viewportTriggers.get(trigger)?.get(key);\n if (!intersectionObservers.has(key)) {\n intersectionObservers.set(key, {\n observer: observerFactoryFn(options),\n count: 0\n });\n }\n const config = intersectionObservers.get(key);\n if (!entry) {\n entry = new DeferEventEntry();\n config.observer.observe(trigger);\n let triggerConfig = viewportTriggers.get(trigger);\n if (triggerConfig) {\n triggerConfig.set(key, entry);\n } else {\n triggerConfig = new Map();\n viewportTriggers.set(trigger, triggerConfig);\n }\n triggerConfig.set(key, entry);\n config.count++;\n }\n entry.callbacks.add(callback);\n return () => {\n if (!viewportTriggers.get(trigger)?.has(key)) {\n return;\n }\n entry.callbacks.delete(callback);\n if (entry.callbacks.size === 0) {\n config.observer.unobserve(trigger);\n config.count--;\n const triggerConfig = viewportTriggers.get(trigger);\n if (triggerConfig) {\n triggerConfig.delete(key);\n if (triggerConfig.size === 0) {\n viewportTriggers.delete(trigger);\n }\n }\n }\n if (config.count === 0) {\n config.observer.disconnect();\n intersectionObservers.delete(key);\n }\n };\n}\nfunction getIntersectionObserverKey(options) {\n if (!options) {\n return '';\n }\n return `${options.rootMargin}/${typeof options.threshold === 'number' ? options.threshold : options.threshold?.join('\\n')}`;\n}\nconst DEFER_BLOCK_SSR_ID_ATTRIBUTE = 'ngb';\nfunction setJSActionAttributes(nativeElement, eventTypes, parentDeferBlockId = null) {\n if (eventTypes.length === 0 || nativeElement.nodeType !== Node.ELEMENT_NODE) {\n return;\n }\n const existingAttr = nativeElement.getAttribute(Attribute$1.JSACTION);\n const parts = eventTypes.reduce((prev, curr) => {\n return (existingAttr?.indexOf(curr) ?? -1) === -1 ? prev + curr + ':;' : prev;\n }, '');\n nativeElement.setAttribute(Attribute$1.JSACTION, `${existingAttr ?? ''}${parts}`);\n const blockName = parentDeferBlockId ?? '';\n if (blockName !== '' && parts.length > 0) {\n nativeElement.setAttribute(DEFER_BLOCK_SSR_ID_ATTRIBUTE, blockName);\n }\n}\nconst sharedStashFunction = (rEl, eventType, listenerFn) => {\n const el = rEl;\n const eventListenerMap = el.__jsaction_fns ?? new Map();\n const eventListeners = eventListenerMap.get(eventType) ?? [];\n eventListeners.push(listenerFn);\n eventListenerMap.set(eventType, eventListeners);\n el.__jsaction_fns = eventListenerMap;\n};\nconst sharedMapFunction = (rEl, jsActionMap) => {\n const el = rEl;\n let blockName = el.getAttribute(DEFER_BLOCK_SSR_ID_ATTRIBUTE) ?? '';\n const blockSet = jsActionMap.get(blockName) ?? new Set();\n if (!blockSet.has(el)) {\n blockSet.add(el);\n }\n jsActionMap.set(blockName, blockSet);\n};\nfunction removeListenersFromBlocks(blockNames, jsActionMap) {\n if (blockNames.length > 0) {\n let blockList = [];\n for (let blockName of blockNames) {\n if (jsActionMap.has(blockName)) {\n blockList = [...blockList, ...jsActionMap.get(blockName)];\n }\n }\n const replayList = new Set(blockList);\n replayList.forEach(removeListeners);\n }\n}\nconst removeListeners = el => {\n el.removeAttribute(Attribute$1.JSACTION);\n el.removeAttribute(DEFER_BLOCK_SSR_ID_ATTRIBUTE);\n el.__jsaction_fns = undefined;\n};\nconst JSACTION_EVENT_CONTRACT = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'EVENT_CONTRACT_DETAILS' : '', {\n factory: () => ({})\n});\nfunction invokeListeners(event, currentTarget) {\n const handlerFns = currentTarget?.__jsaction_fns?.get(event.type);\n if (!handlerFns || !currentTarget?.isConnected) {\n return;\n }\n for (const handler of handlerFns) {\n handler(event);\n }\n}\nconst stashEventListeners = /*#__PURE__*/new Map();\nfunction setStashFn(appId, fn) {\n stashEventListeners.set(appId, fn);\n return () => stashEventListeners.delete(appId);\n}\nlet isStashEventListenerImplEnabled = false;\nlet _stashEventListenerImpl = (lView, target, eventName, wrappedListener) => {};\nfunction stashEventListenerImpl(lView, target, eventName, wrappedListener) {\n _stashEventListenerImpl(lView, target, eventName, wrappedListener);\n}\nfunction enableStashEventListenerImpl() {\n if (!isStashEventListenerImplEnabled) {\n _stashEventListenerImpl = (lView, target, eventName, wrappedListener) => {\n const appId = lView[INJECTOR].get(APP_ID);\n const stashEventListener = stashEventListeners.get(appId);\n stashEventListener?.(target, eventName, wrappedListener);\n };\n isStashEventListenerImplEnabled = true;\n }\n}\nconst DEHYDRATED_BLOCK_REGISTRY = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'DEHYDRATED_BLOCK_REGISTRY' : '');\nlet DehydratedBlockRegistry = /*#__PURE__*/(() => {\n class DehydratedBlockRegistry {\n registry = new Map();\n cleanupFns = new Map();\n jsActionMap = inject(JSACTION_BLOCK_ELEMENT_MAP);\n contract = inject(JSACTION_EVENT_CONTRACT);\n add(blockId, info) {\n this.registry.set(blockId, info);\n if (this.awaitingCallbacks.has(blockId)) {\n const awaitingCallbacks = this.awaitingCallbacks.get(blockId);\n for (const cb of awaitingCallbacks) {\n cb();\n }\n }\n }\n get(blockId) {\n return this.registry.get(blockId) ?? null;\n }\n has(blockId) {\n return this.registry.has(blockId);\n }\n cleanup(hydratedBlocks) {\n removeListenersFromBlocks(hydratedBlocks, this.jsActionMap);\n for (let blockId of hydratedBlocks) {\n this.registry.delete(blockId);\n this.jsActionMap.delete(blockId);\n this.invokeTriggerCleanupFns(blockId);\n this.hydrating.delete(blockId);\n this.awaitingCallbacks.delete(blockId);\n }\n if (this.size === 0) {\n this.contract.instance?.cleanUp();\n }\n }\n get size() {\n return this.registry.size;\n }\n addCleanupFn(blockId, fn) {\n let cleanupFunctions = [];\n if (this.cleanupFns.has(blockId)) {\n cleanupFunctions = this.cleanupFns.get(blockId);\n }\n cleanupFunctions.push(fn);\n this.cleanupFns.set(blockId, cleanupFunctions);\n }\n invokeTriggerCleanupFns(blockId) {\n const fns = this.cleanupFns.get(blockId) ?? [];\n for (let fn of fns) {\n fn();\n }\n this.cleanupFns.delete(blockId);\n }\n hydrating = new Map();\n awaitingCallbacks = new Map();\n awaitParentBlock(topmostParentBlock, callback) {\n const parentBlockAwaitCallbacks = this.awaitingCallbacks.get(topmostParentBlock) ?? [];\n parentBlockAwaitCallbacks.push(callback);\n this.awaitingCallbacks.set(topmostParentBlock, parentBlockAwaitCallbacks);\n }\n static \u0275prov = /* @__PURE__ */\n __defineInjectable({\n token: DehydratedBlockRegistry,\n providedIn: null,\n factory: () => new DehydratedBlockRegistry()\n });\n }\n return DehydratedBlockRegistry;\n})();\nfunction isDetachedByI18n(tNode) {\n return (tNode.flags & 32) === 32;\n}\nconst TRANSFER_STATE_TOKEN_ID = '__nghData__';\nconst NGH_DATA_KEY = /*#__PURE__*/makeStateKey(TRANSFER_STATE_TOKEN_ID);\nconst TRANSFER_STATE_DEFER_BLOCKS_INFO = '__nghDeferData__';\nconst NGH_DEFER_BLOCKS_KEY = /*#__PURE__*/makeStateKey(TRANSFER_STATE_DEFER_BLOCKS_INFO);\nfunction isInternalHydrationTransferStateKey(key) {\n return key === TRANSFER_STATE_TOKEN_ID || key === TRANSFER_STATE_DEFER_BLOCKS_INFO;\n}\nconst NGH_ATTR_NAME = 'ngh';\nconst SSR_CONTENT_INTEGRITY_MARKER = 'nghm';\nlet _retrieveHydrationInfoImpl = () => null;\nfunction retrieveHydrationInfoImpl(rNode, injector, isRootView = false) {\n let nghAttrValue = rNode.getAttribute(NGH_ATTR_NAME);\n if (nghAttrValue == null) return null;\n const [componentViewNgh, rootViewNgh] = nghAttrValue.split('|');\n nghAttrValue = isRootView ? rootViewNgh : componentViewNgh;\n if (!nghAttrValue) return null;\n const rootNgh = rootViewNgh ? `|${rootViewNgh}` : '';\n const remainingNgh = isRootView ? componentViewNgh : rootNgh;\n let data = {};\n if (nghAttrValue !== '') {\n const transferState = injector.get(TransferState, null, {\n optional: true\n });\n if (transferState !== null) {\n const nghData = transferState.get(NGH_DATA_KEY, []);\n data = nghData[Number(nghAttrValue)];\n ngDevMode && assertDefined(data, 'Unable to retrieve hydration info from the TransferState.');\n }\n }\n const dehydratedView = {\n data,\n firstChild: rNode.firstChild ?? null\n };\n if (isRootView) {\n dehydratedView.firstChild = rNode;\n setSegmentHead(dehydratedView, 0, rNode.nextSibling);\n }\n if (remainingNgh) {\n rNode.setAttribute(NGH_ATTR_NAME, remainingNgh);\n } else {\n rNode.removeAttribute(NGH_ATTR_NAME);\n }\n ngDevMode && markRNodeAsClaimedByHydration(rNode, false);\n ngDevMode && ngDevMode.hydratedComponents++;\n return dehydratedView;\n}\nfunction enableRetrieveHydrationInfoImpl() {\n _retrieveHydrationInfoImpl = retrieveHydrationInfoImpl;\n}\nfunction retrieveHydrationInfo(rNode, injector, isRootView = false) {\n return _retrieveHydrationInfoImpl(rNode, injector, isRootView);\n}\nfunction getLNodeForHydration(viewRef) {\n let lView = viewRef._lView;\n const tView = lView[TVIEW];\n if (tView.type === 2) {\n return null;\n }\n if (isRootView(lView)) {\n lView = lView[HEADER_OFFSET];\n }\n return lView;\n}\nfunction getTextNodeContent(node) {\n return node.textContent?.replace(/\\s/gm, '');\n}\nfunction processTextNodeMarkersBeforeHydration(node) {\n const doc = getDocument();\n const commentNodesIterator = doc.createNodeIterator(node, NodeFilter.SHOW_COMMENT, {\n acceptNode(node) {\n const content = getTextNodeContent(node);\n const isTextNodeMarker = content === \"ngetn\" || content === \"ngtns\";\n return isTextNodeMarker ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_REJECT;\n }\n });\n let currentNode;\n const nodes = [];\n while (currentNode = commentNodesIterator.nextNode()) {\n nodes.push(currentNode);\n }\n for (const node of nodes) {\n if (node.textContent === \"ngetn\") {\n node.replaceWith(doc.createTextNode(''));\n } else {\n node.remove();\n }\n }\n}\nvar HydrationStatus = /*#__PURE__*/function (HydrationStatus) {\n HydrationStatus[\"Hydrated\"] = \"hydrated\";\n HydrationStatus[\"Skipped\"] = \"skipped\";\n HydrationStatus[\"Mismatched\"] = \"mismatched\";\n return HydrationStatus;\n}(HydrationStatus || {});\nconst HYDRATION_INFO_KEY = '__ngDebugHydrationInfo__';\nfunction patchHydrationInfo(node, info) {\n node[HYDRATION_INFO_KEY] = info;\n}\nfunction readHydrationInfo(node) {\n return node[HYDRATION_INFO_KEY] ?? null;\n}\nfunction markRNodeAsClaimedByHydration(node, checkIfAlreadyClaimed = true) {\n if (!ngDevMode) {\n throw new Error('Calling `markRNodeAsClaimedByHydration` in prod mode ' + 'is not supported and likely a mistake.');\n }\n if (checkIfAlreadyClaimed && isRNodeClaimedForHydration(node)) {\n throw new Error('Trying to claim a node, which was claimed already.');\n }\n patchHydrationInfo(node, {\n status: HydrationStatus.Hydrated\n });\n ngDevMode.hydratedNodes++;\n}\nfunction markRNodeAsSkippedByHydration(node) {\n if (!ngDevMode) {\n throw new Error('Calling `markRNodeAsSkippedByHydration` in prod mode ' + 'is not supported and likely a mistake.');\n }\n patchHydrationInfo(node, {\n status: HydrationStatus.Skipped\n });\n ngDevMode.componentsSkippedHydration++;\n}\nfunction countBlocksSkippedByHydration(injector) {\n const transferState = injector.get(TransferState);\n const nghDeferData = transferState.get(NGH_DEFER_BLOCKS_KEY, {});\n if (ngDevMode) {\n ngDevMode.deferBlocksWithIncrementalHydration = Object.keys(nghDeferData).length;\n }\n}\nfunction markRNodeAsHavingHydrationMismatch(node, expectedNodeDetails = null, actualNodeDetails = null) {\n if (!ngDevMode) {\n throw new Error('Calling `markRNodeAsMismatchedByHydration` in prod mode ' + 'is not supported and likely a mistake.');\n }\n while (node && !getComponent(node)) {\n node = node?.parentNode;\n }\n if (node) {\n patchHydrationInfo(node, {\n status: HydrationStatus.Mismatched,\n expectedNodeDetails,\n actualNodeDetails\n });\n }\n}\nfunction isRNodeClaimedForHydration(node) {\n return readHydrationInfo(node)?.status === HydrationStatus.Hydrated;\n}\nfunction setSegmentHead(hydrationInfo, index, node) {\n hydrationInfo.segmentHeads ??= {};\n hydrationInfo.segmentHeads[index] = node;\n}\nfunction getSegmentHead(hydrationInfo, index) {\n return hydrationInfo.segmentHeads?.[index] ?? null;\n}\nfunction isIncrementalHydrationEnabled(injector) {\n return injector.get(IS_INCREMENTAL_HYDRATION_ENABLED, false, {\n optional: true\n });\n}\nlet incrementalHydrationEnabledWarned = false;\nfunction resetIncrementalHydrationEnabledWarnedForTests() {\n incrementalHydrationEnabledWarned = false;\n}\nfunction warnIncrementalHydrationNotConfigured() {\n if (!incrementalHydrationEnabledWarned) {\n incrementalHydrationEnabledWarned = true;\n console.warn(formatRuntimeError(508, 'Angular has detected that some `@defer` blocks use `hydrate` triggers, ' + 'but incremental hydration was not enabled. Please ensure that the `withIncrementalHydration()` ' + 'call is added as an argument for the `provideClientHydration()` function call ' + 'in your application config.'));\n }\n}\nfunction assertSsrIdDefined(ssrUniqueId) {\n assertDefined(ssrUniqueId, 'Internal error: expecting an SSR id for a defer block that should be hydrated, but the id is not present');\n}\nfunction getNgContainerSize(hydrationInfo, index) {\n const data = hydrationInfo.data;\n let size = data[ELEMENT_CONTAINERS]?.[index] ?? null;\n if (size === null && data[CONTAINERS]?.[index]) {\n size = calcSerializedContainerSize(hydrationInfo, index);\n }\n return size;\n}\nfunction isSerializedElementContainer(hydrationInfo, index) {\n return hydrationInfo.data[ELEMENT_CONTAINERS]?.[index] !== undefined;\n}\nfunction getSerializedContainerViews(hydrationInfo, index) {\n return hydrationInfo.data[CONTAINERS]?.[index] ?? null;\n}\nfunction calcSerializedContainerSize(hydrationInfo, index) {\n const views = getSerializedContainerViews(hydrationInfo, index) ?? [];\n let numNodes = 0;\n for (let view of views) {\n numNodes += view[NUM_ROOT_NODES] * (view[MULTIPLIER] ?? 1);\n }\n return numNodes;\n}\nfunction initDisconnectedNodes(hydrationInfo) {\n if (typeof hydrationInfo.disconnectedNodes === 'undefined') {\n const nodeIds = hydrationInfo.data[DISCONNECTED_NODES];\n hydrationInfo.disconnectedNodes = nodeIds ? new Set(nodeIds) : null;\n }\n return hydrationInfo.disconnectedNodes;\n}\nfunction isDisconnectedNode$1(hydrationInfo, index) {\n if (typeof hydrationInfo.disconnectedNodes === 'undefined') {\n const nodeIds = hydrationInfo.data[DISCONNECTED_NODES];\n hydrationInfo.disconnectedNodes = nodeIds ? new Set(nodeIds) : null;\n }\n return !!initDisconnectedNodes(hydrationInfo)?.has(index);\n}\nfunction canHydrateNode(lView, tNode) {\n const hydrationInfo = lView[HYDRATION];\n return hydrationInfo !== null && !isInSkipHydrationBlock$1() && !isDetachedByI18n(tNode) && !isDisconnectedNode$1(hydrationInfo, tNode.index - HEADER_OFFSET);\n}\nfunction processTextNodeBeforeSerialization(context, node) {\n const el = node;\n const corruptedTextNodes = context.corruptedTextNodes;\n if (el.textContent === '') {\n corruptedTextNodes.set(el, \"ngetn\");\n } else if (el.nextSibling?.nodeType === Node.TEXT_NODE) {\n corruptedTextNodes.set(el, \"ngtns\");\n }\n}\nfunction convertHydrateTriggersToJsAction(triggers) {\n let actionList = [];\n if (triggers !== null) {\n if (triggers.has(4)) {\n actionList.push(...hoverEventNames);\n }\n if (triggers.has(3)) {\n actionList.push(...interactionEventNames);\n }\n }\n return actionList;\n}\nfunction getParentBlockHydrationQueue(deferBlockId, injector) {\n const dehydratedBlockRegistry = injector.get(DEHYDRATED_BLOCK_REGISTRY);\n const transferState = injector.get(TransferState);\n const deferBlockParents = transferState.get(NGH_DEFER_BLOCKS_KEY, {});\n let isTopMostDeferBlock = false;\n let currentBlockId = deferBlockId;\n let parentBlockPromise = null;\n const hydrationQueue = [];\n while (!isTopMostDeferBlock && currentBlockId) {\n ngDevMode && assertEqual(hydrationQueue.indexOf(currentBlockId), -1, 'Internal error: defer block hierarchy has a cycle.');\n isTopMostDeferBlock = dehydratedBlockRegistry.has(currentBlockId);\n const hydratingParentBlock = dehydratedBlockRegistry.hydrating.get(currentBlockId);\n if (parentBlockPromise === null && hydratingParentBlock != null) {\n parentBlockPromise = hydratingParentBlock.promise;\n break;\n }\n hydrationQueue.unshift(currentBlockId);\n currentBlockId = deferBlockParents[currentBlockId][DEFER_PARENT_BLOCK_ID];\n }\n return {\n parentBlockPromise,\n hydrationQueue\n };\n}\nfunction gatherDeferBlocksByJSActionAttribute(doc) {\n const jsactionNodes = doc.body.querySelectorAll('[jsaction]');\n const blockMap = new Set();\n const eventTypes = [hoverEventNames.join(':;'), interactionEventNames.join(':;')].join('|');\n for (let node of jsactionNodes) {\n const attr = node.getAttribute('jsaction');\n const blockId = node.getAttribute('ngb');\n if (attr?.match(eventTypes) && blockId !== null) {\n blockMap.add(node);\n }\n }\n return blockMap;\n}\nfunction appendDeferBlocksToJSActionMap(doc, injector) {\n const blockMap = gatherDeferBlocksByJSActionAttribute(doc);\n const jsActionMap = injector.get(JSACTION_BLOCK_ELEMENT_MAP);\n for (let rNode of blockMap) {\n sharedMapFunction(rNode, jsActionMap);\n }\n}\nlet _retrieveDeferBlockDataImpl = () => {\n return {};\n};\nfunction retrieveDeferBlockDataImpl(injector) {\n const transferState = injector.get(TransferState, null, {\n optional: true\n });\n if (transferState !== null) {\n const nghDeferData = transferState.get(NGH_DEFER_BLOCKS_KEY, {});\n ngDevMode && assertDefined(nghDeferData, 'Unable to retrieve defer block info from the TransferState.');\n return nghDeferData;\n }\n return {};\n}\nfunction enableRetrieveDeferBlockDataImpl() {\n _retrieveDeferBlockDataImpl = retrieveDeferBlockDataImpl;\n}\nfunction retrieveDeferBlockData(injector) {\n return _retrieveDeferBlockDataImpl(injector);\n}\nfunction isTimerTrigger(triggerInfo) {\n return typeof triggerInfo === 'object' && triggerInfo.trigger === 5;\n}\nfunction getHydrateTimerTrigger(blockData) {\n const trigger = blockData[DEFER_HYDRATE_TRIGGERS]?.find(t => isTimerTrigger(t));\n return trigger?.delay ?? null;\n}\nfunction getHydrateViewportTrigger(blockData) {\n const details = blockData[DEFER_HYDRATE_TRIGGERS];\n if (details) {\n for (const current of details) {\n if (current === 2) {\n return true;\n } else if (typeof current === 'object' && current.trigger === 2) {\n return current.intersectionObserverOptions || true;\n }\n }\n }\n return null;\n}\nfunction hasHydrateTrigger(blockData, trigger) {\n return blockData[DEFER_HYDRATE_TRIGGERS]?.includes(trigger) ?? false;\n}\nfunction createBlockSummary(blockInfo) {\n return {\n data: blockInfo,\n hydrate: {\n idle: hasHydrateTrigger(blockInfo, 0),\n immediate: hasHydrateTrigger(blockInfo, 1),\n timer: getHydrateTimerTrigger(blockInfo),\n viewport: getHydrateViewportTrigger(blockInfo)\n }\n };\n}\nfunction processBlockData(injector) {\n const blockData = retrieveDeferBlockData(injector);\n let blockDetails = new Map();\n for (let blockId in blockData) {\n blockDetails.set(blockId, createBlockSummary(blockData[blockId]));\n }\n return blockDetails;\n}\nfunction isSsrContentsIntegrity(node) {\n return !!node && node.nodeType === Node.COMMENT_NODE && node.textContent?.trim() === SSR_CONTENT_INTEGRITY_MARKER;\n}\nfunction skipTextNodes(node) {\n while (node && node.nodeType === Node.TEXT_NODE) {\n node = node.previousSibling;\n }\n return node;\n}\nfunction verifySsrContentsIntegrity(doc) {\n for (const node of doc.body.childNodes) {\n if (isSsrContentsIntegrity(node)) {\n return;\n }\n }\n const beforeBody = skipTextNodes(doc.body.previousSibling);\n if (isSsrContentsIntegrity(beforeBody)) {\n return;\n }\n let endOfHead = skipTextNodes(doc.head.lastChild);\n if (isSsrContentsIntegrity(endOfHead)) {\n return;\n }\n throw new RuntimeError(-507, typeof ngDevMode !== 'undefined' && ngDevMode && 'Angular hydration logic detected that HTML content of this page was modified after it ' + 'was produced during server side rendering. Make sure that there are no optimizations ' + 'that remove comment nodes from HTML enabled on your CDN. Angular hydration ' + 'relies on HTML produced by the server, including whitespaces and comment nodes.');\n}\nfunction refreshContentQueries(tView, lView) {\n const contentQueries = tView.contentQueries;\n if (contentQueries !== null) {\n const prevConsumer = setActiveConsumer(null);\n try {\n for (let i = 0; i < contentQueries.length; i += 2) {\n const queryStartIdx = contentQueries[i];\n const directiveDefIdx = contentQueries[i + 1];\n if (directiveDefIdx !== -1) {\n const directiveDef = tView.data[directiveDefIdx];\n ngDevMode && assertDefined(directiveDef, 'DirectiveDef not found.');\n ngDevMode && assertDefined(directiveDef.contentQueries, 'contentQueries function should be defined');\n setCurrentQueryIndex(queryStartIdx);\n directiveDef.contentQueries(2, lView[directiveDefIdx], directiveDefIdx);\n }\n }\n } finally {\n setActiveConsumer(prevConsumer);\n }\n }\n}\nfunction executeViewQueryFn(flags, viewQueryFn, component) {\n ngDevMode && assertDefined(viewQueryFn, 'View queries function to execute must be defined.');\n setCurrentQueryIndex(0);\n const prevConsumer = setActiveConsumer(null);\n try {\n viewQueryFn(flags, component);\n } finally {\n setActiveConsumer(prevConsumer);\n }\n}\nfunction executeContentQueries(tView, tNode, lView) {\n if (isContentQueryHost(tNode)) {\n const prevConsumer = setActiveConsumer(null);\n try {\n const start = tNode.directiveStart;\n const end = tNode.directiveEnd;\n for (let directiveIndex = start; directiveIndex < end; directiveIndex++) {\n const def = tView.data[directiveIndex];\n if (def.contentQueries) {\n const directiveInstance = lView[directiveIndex];\n ngDevMode && assertDefined(directiveIndex, 'Incorrect reference to a directive defining a content query');\n def.contentQueries(1, directiveInstance, directiveIndex);\n }\n }\n } finally {\n setActiveConsumer(prevConsumer);\n }\n }\n}\nvar ViewEncapsulation = /*#__PURE__*/function (ViewEncapsulation) {\n ViewEncapsulation[ViewEncapsulation[\"Emulated\"] = 0] = \"Emulated\";\n ViewEncapsulation[ViewEncapsulation[\"None\"] = 2] = \"None\";\n ViewEncapsulation[ViewEncapsulation[\"ShadowDom\"] = 3] = \"ShadowDom\";\n ViewEncapsulation[ViewEncapsulation[\"ExperimentalIsolatedShadowDom\"] = 4] = \"ExperimentalIsolatedShadowDom\";\n return ViewEncapsulation;\n}(ViewEncapsulation || {});\nconst CUSTOM_ELEMENTS_SCHEMA = {\n name: 'custom-elements'\n};\nconst NO_ERRORS_SCHEMA = {\n name: 'no-errors-schema'\n};\nlet shouldThrowErrorOnUnknownElement = false;\nfunction \u0275setUnknownElementStrictMode(shouldThrow) {\n shouldThrowErrorOnUnknownElement = shouldThrow;\n}\nfunction \u0275getUnknownElementStrictMode() {\n return shouldThrowErrorOnUnknownElement;\n}\nlet shouldThrowErrorOnUnknownProperty = false;\nfunction \u0275setUnknownPropertyStrictMode(shouldThrow) {\n shouldThrowErrorOnUnknownProperty = shouldThrow;\n}\nfunction \u0275getUnknownPropertyStrictMode() {\n return shouldThrowErrorOnUnknownProperty;\n}\nfunction validateElementIsKnown(lView, tNode) {\n const tView = lView[TVIEW];\n if (tView.schemas === null) return;\n const tagName = tNode.value;\n if (!isDirectiveHost(tNode) && tagName !== null) {\n const isUnknown = typeof HTMLUnknownElement !== 'undefined' && HTMLUnknownElement && getNativeByTNode(tNode, lView) instanceof HTMLUnknownElement || typeof customElements !== 'undefined' && tagName.indexOf('-') > -1 && !customElements.get(tagName);\n if (isUnknown && !matchingSchemas(tView.schemas, tagName)) {\n const isHostStandalone = isHostComponentStandalone(lView);\n const templateLocation = getTemplateLocationDetails(lView);\n const schemas = `'${isHostStandalone ? '@Component' : '@NgModule'}.schemas'`;\n let message = `'${tagName}' is not a known element${templateLocation}:\\n`;\n message += `1. If '${tagName}' is an Angular component, then verify that it is ${isHostStandalone ? \"included in the '@Component.imports' of this component\" : 'a part of an @NgModule where this component is declared'}.\\n`;\n if (tagName && tagName.indexOf('-') > -1) {\n message += `2. If '${tagName}' is a Web Component then add 'CUSTOM_ELEMENTS_SCHEMA' to the ${schemas} of this component to suppress this message.`;\n } else {\n message += `2. To allow any element add 'NO_ERRORS_SCHEMA' to the ${schemas} of this component.`;\n }\n if (shouldThrowErrorOnUnknownElement) {\n throw new RuntimeError(304, message);\n } else {\n console.error(formatRuntimeError(304, message));\n }\n }\n }\n}\nfunction isPropertyValid(element, propName, tagName, schemas) {\n if (schemas === null) return true;\n if (matchingSchemas(schemas, tagName) || propName in element || isAnimationProp(propName)) {\n return true;\n }\n return typeof Node === 'undefined' || Node === null || !(element instanceof Node);\n}\nfunction handleUnknownPropertyError(propName, tagName, nodeType, lView) {\n if (!tagName && nodeType === 4) {\n tagName = 'ng-template';\n }\n const isHostStandalone = isHostComponentStandalone(lView);\n const templateLocation = getTemplateLocationDetails(lView);\n let message = `Can't bind to '${propName}' since it isn't a known property of '${tagName}'${templateLocation}.`;\n const schemas = `'${isHostStandalone ? '@Component' : '@NgModule'}.schemas'`;\n const importLocation = isHostStandalone ? \"included in the '@Component.imports' of this component\" : 'a part of an @NgModule where this component is declared';\n if (KNOWN_CONTROL_FLOW_DIRECTIVES.has(propName)) {\n const correspondingImport = KNOWN_CONTROL_FLOW_DIRECTIVES.get(propName);\n message += `\\nIf the '${propName}' is an Angular control flow directive, ` + `please make sure that either the '${correspondingImport}' directive or the 'CommonModule' is ${importLocation}.`;\n } else {\n message += `\\n1. If '${tagName}' is an Angular component and it has the ` + `'${propName}' input, then verify that it is ${importLocation}.`;\n if (tagName && tagName.indexOf('-') > -1) {\n message += `\\n2. If '${tagName}' is a Web Component then add 'CUSTOM_ELEMENTS_SCHEMA' ` + `to the ${schemas} of this component to suppress this message.`;\n message += `\\n3. To allow any property add 'NO_ERRORS_SCHEMA' to ` + `the ${schemas} of this component.`;\n } else {\n message += `\\n2. To allow any property add 'NO_ERRORS_SCHEMA' to ` + `the ${schemas} of this component.`;\n }\n }\n reportUnknownPropertyError(message);\n}\nfunction reportUnknownPropertyError(message) {\n if (shouldThrowErrorOnUnknownProperty) {\n throw new RuntimeError(303, message);\n } else {\n console.error(formatRuntimeError(303, message));\n }\n}\nfunction getDeclarationComponentDef(lView) {\n !ngDevMode && throwError('Must never be called in production mode');\n const declarationLView = lView[DECLARATION_COMPONENT_VIEW];\n const context = declarationLView[CONTEXT];\n if (!context) return null;\n return context.constructor ? getComponentDef(context.constructor) : null;\n}\nfunction isHostComponentStandalone(lView) {\n !ngDevMode && throwError('Must never be called in production mode');\n const componentDef = getDeclarationComponentDef(lView);\n return !!componentDef?.standalone;\n}\nfunction getTemplateLocationDetails(lView) {\n !ngDevMode && throwError('Must never be called in production mode');\n const hostComponentDef = getDeclarationComponentDef(lView);\n const componentClassName = hostComponentDef?.type?.name;\n return componentClassName ? ` (used in the '${componentClassName}' component template)` : '';\n}\nconst KNOWN_CONTROL_FLOW_DIRECTIVES = /*#__PURE__*/new Map([['ngIf', 'NgIf'], ['ngFor', 'NgFor'], ['ngSwitchCase', 'NgSwitchCase'], ['ngSwitchDefault', 'NgSwitchDefault']]);\nfunction matchingSchemas(schemas, tagName) {\n if (schemas !== null) {\n for (let i = 0; i < schemas.length; i++) {\n const schema = schemas[i];\n if (schema === NO_ERRORS_SCHEMA || schema === CUSTOM_ELEMENTS_SCHEMA && tagName && tagName.indexOf('-') > -1) {\n return true;\n }\n }\n }\n return false;\n}\nlet policy$1;\nfunction getPolicy$1() {\n if (policy$1 === undefined) {\n policy$1 = null;\n if (_global.trustedTypes) {\n try {\n policy$1 = _global.trustedTypes.createPolicy('angular', {\n createHTML: s => s,\n createScript: s => s,\n createScriptURL: s => s\n });\n } catch {}\n }\n }\n return policy$1;\n}\nfunction trustedHTMLFromString(html) {\n return getPolicy$1()?.createHTML(html) || html;\n}\nfunction trustedScriptURLFromString(url) {\n return getPolicy$1()?.createScriptURL(url) || url;\n}\nlet policy;\nfunction getPolicy() {\n if (policy === undefined) {\n policy = null;\n if (_global.trustedTypes) {\n try {\n policy = _global.trustedTypes.createPolicy('angular#unsafe-bypass', {\n createHTML: s => s,\n createScript: s => s,\n createScriptURL: s => s\n });\n } catch {}\n }\n }\n return policy;\n}\nfunction trustedHTMLFromStringBypass(html) {\n return getPolicy()?.createHTML(html) || html;\n}\nfunction trustedScriptFromStringBypass(script) {\n return getPolicy()?.createScript(script) || script;\n}\nfunction trustedScriptURLFromStringBypass(url) {\n return getPolicy()?.createScriptURL(url) || url;\n}\nclass SafeValueImpl {\n changingThisBreaksApplicationSecurity;\n constructor(changingThisBreaksApplicationSecurity) {\n this.changingThisBreaksApplicationSecurity = changingThisBreaksApplicationSecurity;\n }\n toString() {\n return `SafeValue must use [property]=binding: ${this.changingThisBreaksApplicationSecurity}` + ` (see ${XSS_SECURITY_URL})`;\n }\n}\nclass SafeHtmlImpl extends SafeValueImpl {\n getTypeName() {\n return \"HTML\";\n }\n}\nclass SafeStyleImpl extends SafeValueImpl {\n getTypeName() {\n return \"Style\";\n }\n}\nclass SafeScriptImpl extends SafeValueImpl {\n getTypeName() {\n return \"Script\";\n }\n}\nclass SafeUrlImpl extends SafeValueImpl {\n getTypeName() {\n return \"URL\";\n }\n}\nclass SafeResourceUrlImpl extends SafeValueImpl {\n getTypeName() {\n return \"ResourceURL\";\n }\n}\nfunction unwrapSafeValue(value) {\n return value instanceof SafeValueImpl ? value.changingThisBreaksApplicationSecurity : value;\n}\nfunction allowSanitizationBypassAndThrow(value, type) {\n const actualType = getSanitizationBypassType(value);\n if (actualType != null && actualType !== type) {\n if (actualType === \"ResourceURL\" && type === \"URL\") return true;\n throw new Error(`Required a safe ${type}, got a ${actualType} (see ${XSS_SECURITY_URL})`);\n }\n return actualType === type;\n}\nfunction getSanitizationBypassType(value) {\n return value instanceof SafeValueImpl && value.getTypeName() || null;\n}\nfunction bypassSanitizationTrustHtml(trustedHtml) {\n return new SafeHtmlImpl(trustedHtml);\n}\nfunction bypassSanitizationTrustStyle(trustedStyle) {\n return new SafeStyleImpl(trustedStyle);\n}\nfunction bypassSanitizationTrustScript(trustedScript) {\n return new SafeScriptImpl(trustedScript);\n}\nfunction bypassSanitizationTrustUrl(trustedUrl) {\n return new SafeUrlImpl(trustedUrl);\n}\nfunction bypassSanitizationTrustResourceUrl(trustedResourceUrl) {\n return new SafeResourceUrlImpl(trustedResourceUrl);\n}\nfunction getInertBodyHelper(defaultDoc) {\n const inertDocumentHelper = new InertDocumentHelper(defaultDoc);\n return isDOMParserAvailable() ? new DOMParserHelper(inertDocumentHelper) : inertDocumentHelper;\n}\nclass DOMParserHelper {\n inertDocumentHelper;\n constructor(inertDocumentHelper) {\n this.inertDocumentHelper = inertDocumentHelper;\n }\n getInertBodyElement(html) {\n html = '' + html;\n try {\n const body = new window.DOMParser().parseFromString(trustedHTMLFromString(html), 'text/html').body;\n if (body === null) {\n return this.inertDocumentHelper.getInertBodyElement(html);\n }\n body.firstChild?.remove();\n return body;\n } catch {\n return null;\n }\n }\n}\nclass InertDocumentHelper {\n defaultDoc;\n inertDocument;\n constructor(defaultDoc) {\n this.defaultDoc = defaultDoc;\n this.inertDocument = this.defaultDoc.implementation.createHTMLDocument('sanitization-inert');\n }\n getInertBodyElement(html) {\n const templateEl = this.inertDocument.createElement('template');\n templateEl.innerHTML = trustedHTMLFromString(html);\n return templateEl;\n }\n}\nfunction isDOMParserAvailable() {\n try {\n return !!new window.DOMParser().parseFromString(trustedHTMLFromString(''), 'text/html');\n } catch {\n return false;\n }\n}\nconst SAFE_URL_PATTERN = /^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:\\/?#]*(?:[\\/?#]|$))/i;\nfunction _sanitizeUrl(url) {\n url = String(url);\n if (url.match(SAFE_URL_PATTERN)) return url;\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n console.warn(`WARNING: sanitizing unsafe URL value ${url} (see ${XSS_SECURITY_URL})`);\n }\n return 'unsafe:' + url;\n}\nfunction tagSet(tags) {\n const res = {};\n for (const t of tags.split(',')) res[t] = true;\n return res;\n}\nfunction merge(...sets) {\n const res = {};\n for (const s of sets) {\n for (const v in s) {\n if (s.hasOwnProperty(v)) res[v] = true;\n }\n }\n return res;\n}\nconst VOID_ELEMENTS = /*#__PURE__*/tagSet('area,br,col,hr,img,wbr');\nconst OPTIONAL_END_TAG_BLOCK_ELEMENTS = /*#__PURE__*/tagSet('colgroup,dd,dt,li,p,tbody,td,tfoot,th,thead,tr');\nconst OPTIONAL_END_TAG_INLINE_ELEMENTS = /*#__PURE__*/tagSet('rp,rt');\nconst OPTIONAL_END_TAG_ELEMENTS = /*#__PURE__*/merge(OPTIONAL_END_TAG_INLINE_ELEMENTS, OPTIONAL_END_TAG_BLOCK_ELEMENTS);\nconst BLOCK_ELEMENTS = /*#__PURE__*/merge(OPTIONAL_END_TAG_BLOCK_ELEMENTS, /*#__PURE__*/tagSet('address,article,' + 'aside,blockquote,caption,center,del,details,dialog,dir,div,dl,figure,figcaption,footer,h1,h2,h3,h4,h5,' + 'h6,header,hgroup,hr,ins,main,map,menu,nav,ol,pre,section,summary,table,ul'));\nconst INLINE_ELEMENTS = /*#__PURE__*/merge(OPTIONAL_END_TAG_INLINE_ELEMENTS, /*#__PURE__*/tagSet('a,abbr,acronym,audio,b,' + 'bdi,bdo,big,br,cite,code,del,dfn,em,font,i,img,ins,kbd,label,map,mark,picture,q,ruby,rp,rt,s,' + 'samp,small,source,span,strike,strong,sub,sup,time,track,tt,u,var,video'));\nconst VALID_ELEMENTS = /*#__PURE__*/merge(VOID_ELEMENTS, BLOCK_ELEMENTS, INLINE_ELEMENTS, OPTIONAL_END_TAG_ELEMENTS);\nconst URI_ATTRS = /*#__PURE__*/tagSet('background,cite,href,itemtype,longdesc,poster,src,xlink:href');\nconst HTML_ATTRS = /*#__PURE__*/tagSet('abbr,accesskey,align,alt,autoplay,axis,bgcolor,border,cellpadding,cellspacing,class,clear,color,cols,colspan,' + 'compact,controls,coords,datetime,default,dir,download,face,headers,height,hidden,hreflang,hspace,' + 'ismap,itemscope,itemprop,kind,label,lang,language,loop,media,muted,nohref,nowrap,open,preload,rel,rev,role,rows,rowspan,rules,' + 'scope,scrolling,shape,size,sizes,span,srclang,srcset,start,summary,tabindex,target,title,translate,type,usemap,' + 'valign,value,vspace,width');\nconst ARIA_ATTRS = /*#__PURE__*/tagSet('aria-activedescendant,aria-atomic,aria-autocomplete,aria-busy,aria-checked,aria-colcount,aria-colindex,' + 'aria-colspan,aria-controls,aria-current,aria-describedby,aria-details,aria-disabled,aria-dropeffect,' + 'aria-errormessage,aria-expanded,aria-flowto,aria-grabbed,aria-haspopup,aria-hidden,aria-invalid,' + 'aria-keyshortcuts,aria-label,aria-labelledby,aria-level,aria-live,aria-modal,aria-multiline,' + 'aria-multiselectable,aria-orientation,aria-owns,aria-placeholder,aria-posinset,aria-pressed,aria-readonly,' + 'aria-relevant,aria-required,aria-roledescription,aria-rowcount,aria-rowindex,aria-rowspan,aria-selected,' + 'aria-setsize,aria-sort,aria-valuemax,aria-valuemin,aria-valuenow,aria-valuetext');\nconst VALID_ATTRS = /*#__PURE__*/merge(URI_ATTRS, HTML_ATTRS, ARIA_ATTRS);\nconst SKIP_TRAVERSING_CONTENT_IF_INVALID_ELEMENTS = /*#__PURE__*/tagSet('script,style,template');\nconst SENSITIVE_ATTRS = /*#__PURE__*/merge(URI_ATTRS, /*#__PURE__*/tagSet('action,formaction,data,codebase'));\nclass SanitizingHtmlSerializer {\n sanitizedSomething = false;\n buf = [];\n sanitizeChildren(el) {\n let current = el.firstChild;\n let traverseContent = true;\n let parentNodes = [];\n while (current) {\n if (current.nodeType === Node.ELEMENT_NODE) {\n traverseContent = this.startElement(current);\n } else if (current.nodeType === Node.TEXT_NODE) {\n this.chars(current.nodeValue);\n } else {\n this.sanitizedSomething = true;\n }\n if (traverseContent && current.firstChild) {\n parentNodes.push(current);\n current = getFirstChild(current);\n continue;\n }\n while (current) {\n if (current.nodeType === Node.ELEMENT_NODE) {\n this.endElement(current);\n }\n let next = getNextSibling(current);\n if (next) {\n current = next;\n break;\n }\n current = parentNodes.pop();\n }\n }\n return this.buf.join('');\n }\n startElement(element) {\n const tagName = getNodeName(element).toLowerCase();\n if (!VALID_ELEMENTS.hasOwnProperty(tagName)) {\n this.sanitizedSomething = true;\n return !SKIP_TRAVERSING_CONTENT_IF_INVALID_ELEMENTS.hasOwnProperty(tagName);\n }\n this.buf.push('<');\n this.buf.push(tagName);\n const elAttrs = element.attributes;\n for (let i = 0; i < elAttrs.length; i++) {\n const elAttr = elAttrs.item(i);\n const attrName = elAttr.name;\n const lower = attrName.toLowerCase();\n if (!VALID_ATTRS.hasOwnProperty(lower)) {\n this.sanitizedSomething = true;\n continue;\n }\n let value = elAttr.value;\n if (URI_ATTRS[lower]) value = _sanitizeUrl(value);\n this.buf.push(' ', attrName, '=\"', encodeEntities(value), '\"');\n }\n this.buf.push('>');\n return true;\n }\n endElement(current) {\n const tagName = getNodeName(current).toLowerCase();\n if (VALID_ELEMENTS.hasOwnProperty(tagName) && !VOID_ELEMENTS.hasOwnProperty(tagName)) {\n this.buf.push('');\n }\n }\n chars(chars) {\n this.buf.push(encodeEntities(chars));\n }\n}\nfunction isClobberedElement(parentNode, childNode) {\n return (parentNode.compareDocumentPosition(childNode) & Node.DOCUMENT_POSITION_CONTAINED_BY) !== Node.DOCUMENT_POSITION_CONTAINED_BY;\n}\nfunction getNextSibling(node) {\n const nextSibling = node.nextSibling;\n if (nextSibling && node !== nextSibling.previousSibling) {\n throw clobberedElementError(nextSibling);\n }\n return nextSibling;\n}\nfunction getFirstChild(node) {\n const firstChild = node.firstChild;\n if (firstChild && isClobberedElement(node, firstChild)) {\n throw clobberedElementError(firstChild);\n }\n return firstChild;\n}\nfunction getNodeName(node) {\n const nodeName = node.nodeName;\n return typeof nodeName === 'string' ? nodeName : 'FORM';\n}\nfunction clobberedElementError(node) {\n return new Error(`Failed to sanitize html because the element is clobbered: ${node.outerHTML}`);\n}\nconst SURROGATE_PAIR_REGEXP = /[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g;\nconst NON_ALPHANUMERIC_REGEXP = /([^\\#-~ |!])/g;\nfunction encodeEntities(value) {\n return value.replace(/&/g, '&').replace(SURROGATE_PAIR_REGEXP, function (match) {\n const hi = match.charCodeAt(0);\n const low = match.charCodeAt(1);\n return '&#' + ((hi - 0xd800) * 0x400 + (low - 0xdc00) + 0x10000) + ';';\n }).replace(NON_ALPHANUMERIC_REGEXP, function (match) {\n return '&#' + match.charCodeAt(0) + ';';\n }).replace(//g, '>');\n}\nlet inertBodyHelper;\nfunction _sanitizeHtml(defaultDoc, unsafeHtmlInput) {\n let inertBodyElement = null;\n try {\n inertBodyHelper = inertBodyHelper || getInertBodyHelper(defaultDoc);\n let unsafeHtml = unsafeHtmlInput ? String(unsafeHtmlInput) : '';\n inertBodyElement = inertBodyHelper.getInertBodyElement(unsafeHtml);\n let mXSSAttempts = 5;\n let parsedHtml = unsafeHtml;\n do {\n if (mXSSAttempts === 0) {\n throw new Error('Failed to sanitize html because the input is unstable');\n }\n mXSSAttempts--;\n unsafeHtml = parsedHtml;\n parsedHtml = inertBodyElement.innerHTML;\n inertBodyElement = inertBodyHelper.getInertBodyElement(unsafeHtml);\n } while (unsafeHtml !== parsedHtml);\n const sanitizer = new SanitizingHtmlSerializer();\n const safeHtml = sanitizer.sanitizeChildren(getTemplateContent(inertBodyElement) || inertBodyElement);\n if ((typeof ngDevMode === 'undefined' || ngDevMode) && sanitizer.sanitizedSomething) {\n console.warn(`WARNING: sanitizing HTML stripped some content, see ${XSS_SECURITY_URL}`);\n }\n return trustedHTMLFromString(safeHtml);\n } finally {\n if (inertBodyElement) {\n const parent = getTemplateContent(inertBodyElement) || inertBodyElement;\n while (parent.firstChild) {\n parent.firstChild.remove();\n }\n }\n }\n}\nfunction getTemplateContent(el) {\n return 'content' in el && isTemplateElement(el) ? el.content : null;\n}\nfunction isTemplateElement(el) {\n return el.nodeType === Node.ELEMENT_NODE && el.nodeName === 'TEMPLATE';\n}\nconst COMMENT_DISALLOWED = /^>|^->||--!>|)/g;\nconst COMMENT_DELIMITER_ESCAPED = '\\u200B$1\\u200B';\nfunction escapeCommentText(value) {\n return value.replace(COMMENT_DISALLOWED, text => text.replace(COMMENT_DELIMITER, COMMENT_DELIMITER_ESCAPED));\n}\nfunction createTextNode(renderer, value) {\n return renderer.createText(value);\n}\nfunction updateTextNode(renderer, rNode, value) {\n renderer.setValue(rNode, value);\n}\nfunction createCommentNode(renderer, value) {\n return renderer.createComment(escapeCommentText(value));\n}\nfunction createElementNode(renderer, name, namespace) {\n return renderer.createElement(name, namespace);\n}\nfunction nativeInsertBefore(renderer, parent, child, beforeNode, isMove) {\n renderer.insertBefore(parent, child, beforeNode, isMove);\n}\nfunction nativeAppendChild(renderer, parent, child) {\n ngDevMode && assertDefined(parent, 'parent node must be defined');\n renderer.appendChild(parent, child);\n}\nfunction nativeAppendOrInsertBefore(renderer, parent, child, beforeNode, isMove) {\n if (beforeNode !== null) {\n nativeInsertBefore(renderer, parent, child, beforeNode, isMove);\n } else {\n nativeAppendChild(renderer, parent, child);\n }\n}\nfunction nativeRemoveNode(renderer, rNode, isHostElement, requireSynchronousElementRemoval) {\n renderer.removeChild(null, rNode, isHostElement, requireSynchronousElementRemoval);\n}\nfunction clearElementContents(rElement) {\n rElement.textContent = '';\n}\nfunction writeDirectStyle(renderer, element, newValue) {\n ngDevMode && assertString(newValue, \"'newValue' should be a string\");\n renderer.setAttribute(element, 'style', newValue);\n}\nfunction writeDirectClass(renderer, element, newValue) {\n ngDevMode && assertString(newValue, \"'newValue' should be a string\");\n if (newValue === '') {\n renderer.removeAttribute(element, 'class');\n } else {\n renderer.setAttribute(element, 'class', newValue);\n }\n}\nfunction setupStaticAttributes(renderer, element, tNode) {\n const {\n mergedAttrs,\n classes,\n styles\n } = tNode;\n if (mergedAttrs !== null) {\n setUpAttributes(renderer, element, mergedAttrs);\n }\n if (classes !== null) {\n writeDirectClass(renderer, element, classes);\n }\n if (styles !== null) {\n writeDirectStyle(renderer, element, styles);\n }\n}\nfunction enforceIframeSecurity(iframe) {\n const lView = getLView();\n iframe.src = '';\n iframe.srcdoc = trustedHTMLFromString('');\n nativeRemoveNode(lView[RENDERER], iframe);\n}\nvar SecurityContext = /*#__PURE__*/function (SecurityContext) {\n SecurityContext[SecurityContext[\"NONE\"] = 0] = \"NONE\";\n SecurityContext[SecurityContext[\"HTML\"] = 1] = \"HTML\";\n SecurityContext[SecurityContext[\"STYLE\"] = 2] = \"STYLE\";\n SecurityContext[SecurityContext[\"SCRIPT\"] = 3] = \"SCRIPT\";\n SecurityContext[SecurityContext[\"URL\"] = 4] = \"URL\";\n SecurityContext[SecurityContext[\"RESOURCE_URL\"] = 5] = \"RESOURCE_URL\";\n return SecurityContext;\n}(SecurityContext || {});\nfunction \u0275\u0275sanitizeHtml(unsafeHtml) {\n const sanitizer = getSanitizer();\n if (sanitizer) {\n return trustedHTMLFromStringBypass(sanitizer.sanitize(SecurityContext.HTML, unsafeHtml) || '');\n }\n if (allowSanitizationBypassAndThrow(unsafeHtml, \"HTML\")) {\n return trustedHTMLFromStringBypass(unwrapSafeValue(unsafeHtml));\n }\n return _sanitizeHtml(getDocument(), renderStringify(unsafeHtml));\n}\nfunction \u0275\u0275sanitizeStyle(unsafeStyle) {\n const sanitizer = getSanitizer();\n if (sanitizer) {\n return sanitizer.sanitize(SecurityContext.STYLE, unsafeStyle) || '';\n }\n if (allowSanitizationBypassAndThrow(unsafeStyle, \"Style\")) {\n return unwrapSafeValue(unsafeStyle);\n }\n return renderStringify(unsafeStyle);\n}\nfunction \u0275\u0275sanitizeUrl(unsafeUrl) {\n const sanitizer = getSanitizer();\n if (sanitizer) {\n return sanitizer.sanitize(SecurityContext.URL, unsafeUrl) || '';\n }\n if (allowSanitizationBypassAndThrow(unsafeUrl, \"URL\")) {\n return unwrapSafeValue(unsafeUrl);\n }\n return _sanitizeUrl(renderStringify(unsafeUrl));\n}\nfunction \u0275\u0275sanitizeResourceUrl(unsafeResourceUrl) {\n const sanitizer = getSanitizer();\n if (sanitizer) {\n return trustedScriptURLFromStringBypass(sanitizer.sanitize(SecurityContext.RESOURCE_URL, unsafeResourceUrl) || '');\n }\n if (allowSanitizationBypassAndThrow(unsafeResourceUrl, \"ResourceURL\")) {\n return trustedScriptURLFromStringBypass(unwrapSafeValue(unsafeResourceUrl));\n }\n throw new RuntimeError(904, ngDevMode && `unsafe value used in a resource URL context (see ${XSS_SECURITY_URL})`);\n}\nfunction \u0275\u0275sanitizeScript(unsafeScript) {\n const sanitizer = getSanitizer();\n if (sanitizer) {\n return trustedScriptFromStringBypass(sanitizer.sanitize(SecurityContext.SCRIPT, unsafeScript) || '');\n }\n if (allowSanitizationBypassAndThrow(unsafeScript, \"Script\")) {\n return trustedScriptFromStringBypass(unwrapSafeValue(unsafeScript));\n }\n throw new RuntimeError(905, ngDevMode && 'unsafe value used in a script context');\n}\nfunction \u0275\u0275trustConstantHtml(html) {\n if (ngDevMode && (!Array.isArray(html) || !Array.isArray(html.raw) || html.length !== 1)) {\n throw new Error(`Unexpected interpolation in trusted HTML constant: ${html.join('?')}`);\n }\n return trustedHTMLFromString(html[0]);\n}\nfunction \u0275\u0275trustConstantResourceUrl(url) {\n if (ngDevMode && (!Array.isArray(url) || !Array.isArray(url.raw) || url.length !== 1)) {\n throw new Error(`Unexpected interpolation in trusted URL constant: ${url.join('?')}`);\n }\n return trustedScriptURLFromString(url[0]);\n}\nconst SRC_RESOURCE_TAGS = /*#__PURE__*/new Set(['embed', 'frame', 'iframe', 'media', 'script']);\nconst HREF_RESOURCE_TAGS = /*#__PURE__*/new Set(['base', 'link', 'script']);\nfunction getUrlSanitizer(tag, prop) {\n const isResource = prop === 'src' && SRC_RESOURCE_TAGS.has(tag) || prop === 'href' && HREF_RESOURCE_TAGS.has(tag) || prop === 'xlink:href' && tag === 'script';\n return isResource ? \u0275\u0275sanitizeResourceUrl : \u0275\u0275sanitizeUrl;\n}\nfunction \u0275\u0275sanitizeUrlOrResourceUrl(unsafeUrl, tag, prop) {\n return getUrlSanitizer(tag, prop)(unsafeUrl);\n}\nfunction validateAgainstEventProperties(name) {\n if (name.toLowerCase().startsWith('on')) {\n const errorMessage = `Binding to event property '${name}' is disallowed for security reasons, ` + `please use (${name.slice(2)})=...` + `\\nIf '${name}' is a directive input, make sure the directive is imported by the` + ` current module.`;\n throw new RuntimeError(306, errorMessage);\n }\n}\nfunction validateAgainstEventAttributes(name) {\n if (name.toLowerCase().startsWith('on')) {\n const errorMessage = `Binding to event attribute '${name}' is disallowed for security reasons, ` + `please use (${name.slice(2)})=...`;\n throw new RuntimeError(306, errorMessage);\n }\n}\nfunction getSanitizer() {\n const lView = getLView();\n return lView && lView[ENVIRONMENT].sanitizer;\n}\nconst attributeName = /*#__PURE__*/new Set(['attributename']);\nconst SECURITY_SENSITIVE_ELEMENTS = {\n 'iframe': /*#__PURE__*/new Set(['sandbox', 'allow', 'allowfullscreen', 'referrerpolicy', 'csp', 'fetchpriority']),\n 'animate': attributeName,\n 'set': attributeName,\n 'animatemotion': attributeName,\n 'animatetransform': attributeName\n};\nfunction \u0275\u0275validateAttribute(value, tagName, attributeName) {\n const lowerCaseTagName = tagName.toLowerCase();\n const lowerCaseAttrName = attributeName.toLowerCase();\n if (!SECURITY_SENSITIVE_ELEMENTS[lowerCaseTagName]?.has(lowerCaseAttrName)) {\n return value;\n }\n const tNode = getSelectedTNode();\n if (tNode.type !== 2) {\n return value;\n }\n const lView = getLView();\n if (lowerCaseTagName === 'iframe') {\n const element = getNativeByTNode(tNode, lView);\n enforceIframeSecurity(element);\n }\n const errorMessage = ngDevMode && `Angular has detected that the \\`${attributeName}\\` was applied ` + `as a binding to the <${tagName}> element${getTemplateLocationDetails(lView)}. ` + `For security reasons, the \\`${attributeName}\\` can be set on the <${tagName}> element ` + `as a static attribute only. \\n` + `To fix this, switch the \\`${attributeName}\\` binding to a static attribute ` + `in a template or in host bindings section.`;\n throw new RuntimeError(-910, errorMessage);\n}\nconst NG_REFLECT_ATTRS_FLAG_DEFAULT = false;\nconst NG_REFLECT_ATTRS_FLAG = /*#__PURE__*/new InjectionToken(typeof ngDevMode === 'undefined' || ngDevMode ? 'NG_REFLECT_FLAG' : '', {\n factory: () => NG_REFLECT_ATTRS_FLAG_DEFAULT\n});\nfunction provideNgReflectAttributes() {\n const providers = typeof ngDevMode === 'undefined' || ngDevMode ? [{\n provide: NG_REFLECT_ATTRS_FLAG,\n useValue: true\n }] : [];\n return makeEnvironmentProviders(providers);\n}\nfunction normalizeDebugBindingName(name) {\n name = camelCaseToDashCase(name.replace(/[$@]/g, '_'));\n return `ng-reflect-${name}`;\n}\nconst CAMEL_CASE_REGEXP = /([A-Z])/g;\nfunction camelCaseToDashCase(input) {\n return input.replace(CAMEL_CASE_REGEXP, (...m) => '-' + m[1].toLowerCase());\n}\nfunction normalizeDebugBindingValue(value) {\n try {\n return value != null ? value.toString().slice(0, 30) : value;\n } catch (e) {\n return '[ERROR] Exception while trying to serialize the value';\n }\n}\nfunction \u0275\u0275resolveWindow(element) {\n return element.ownerDocument.defaultView;\n}\nfunction \u0275\u0275resolveDocument(element) {\n return element.ownerDocument;\n}\nfunction \u0275\u0275resolveBody(element) {\n return element.ownerDocument.body;\n}\nconst INTERPOLATION_DELIMITER = `\uFFFD`;\nfunction maybeUnwrapFn(value) {\n if (value instanceof Function) {\n return value();\n } else {\n return value;\n }\n}\nconst VALUE_STRING_LENGTH_LIMIT = 200;\nfunction assertStandaloneComponentType(type) {\n assertComponentDef(type);\n const componentDef = getComponentDef(type);\n if (!componentDef.standalone) {\n throw new RuntimeError(907, `The ${stringifyForError(type)} component is not marked as standalone, ` + `but Angular expects to have a standalone component here. ` + `Please make sure the ${stringifyForError(type)} component does not have ` + `the \\`standalone: false\\` flag in the decorator.`);\n }\n}\nfunction assertComponentDef(type) {\n if (!getComponentDef(type)) {\n throw new RuntimeError(906, `The ${stringifyForError(type)} is not an Angular component, ` + `make sure it has the \\`@Component\\` decorator.`);\n }\n}\nfunction throwMultipleComponentError(tNode, first, second) {\n throw new RuntimeError(-300, `Multiple components match node with tagname ${tNode.value}: ` + `${stringifyForError(first)} and ` + `${stringifyForError(second)}`);\n}\nfunction throwErrorIfNoChangesMode(creationMode, oldValue, currValue, propName, lView) {\n const hostComponentDef = getDeclarationComponentDef(lView);\n const componentClassName = hostComponentDef?.type?.name;\n const field = propName ? ` for '${propName}'` : '';\n let msg = `ExpressionChangedAfterItHasBeenCheckedError: Expression has changed after it was checked. Previous value${field}: '${formatValue(oldValue)}'. Current value: '${formatValue(currValue)}'.${componentClassName ? ` Expression location: ${componentClassName} component` : ''}`;\n if (creationMode) {\n msg += ` It seems like the view has been created after its parent and its children have been dirty checked.` + ` Has it been created in a change detection hook?`;\n }\n throw new RuntimeError(-100, msg);\n}\nfunction formatValue(value) {\n let strValue = String(value);\n try {\n if (Array.isArray(value) || strValue === '[object Object]') {\n strValue = JSON.stringify(value);\n }\n } catch (error) {}\n return strValue.length > VALUE_STRING_LENGTH_LIMIT ? strValue.substring(0, VALUE_STRING_LENGTH_LIMIT) + '\u2026' : strValue;\n}\nfunction constructDetailsForInterpolation(lView, rootIndex, expressionIndex, meta, changedValue) {\n const [propName, prefix, ...chunks] = meta.split(INTERPOLATION_DELIMITER);\n let oldValue = prefix,\n newValue = prefix;\n for (let i = 0; i < chunks.length; i++) {\n const slotIdx = rootIndex + i;\n oldValue += `${lView[slotIdx]}${chunks[i]}`;\n newValue += `${slotIdx === expressionIndex ? changedValue : lView[slotIdx]}${chunks[i]}`;\n }\n return {\n propName,\n oldValue,\n newValue\n };\n}\nfunction getExpressionChangedErrorDetails(lView, bindingIndex, oldValue, newValue) {\n const tData = lView[TVIEW].data;\n const metadata = tData[bindingIndex];\n if (typeof metadata === 'string') {\n if (metadata.indexOf(INTERPOLATION_DELIMITER) > -1) {\n return constructDetailsForInterpolation(lView, bindingIndex, bindingIndex, metadata, newValue);\n }\n return {\n propName: metadata,\n oldValue,\n newValue\n };\n }\n if (metadata === null) {\n let idx = bindingIndex - 1;\n while (typeof tData[idx] !== 'string' && tData[idx + 1] === null) {\n idx--;\n }\n const meta = tData[idx];\n if (typeof meta === 'string') {\n const matches = meta.match(new RegExp(INTERPOLATION_DELIMITER, 'g'));\n if (matches && matches.length - 1 > bindingIndex - idx) {\n return constructDetailsForInterpolation(lView, idx, bindingIndex, meta, newValue);\n }\n }\n }\n return {\n propName: undefined,\n oldValue,\n newValue\n };\n}\nfunction classIndexOf(className, classToSearch, startingIndex) {\n ngDevMode && assertNotEqual(classToSearch, '', 'can not look for \"\" string.');\n let end = className.length;\n while (true) {\n const foundIndex = className.indexOf(classToSearch, startingIndex);\n if (foundIndex === -1) return foundIndex;\n if (foundIndex === 0 || className.charCodeAt(foundIndex - 1) <= 32) {\n const length = classToSearch.length;\n if (foundIndex + length === end || className.charCodeAt(foundIndex + length) <= 32) {\n return foundIndex;\n }\n }\n startingIndex = foundIndex + 1;\n }\n}\nconst NG_TEMPLATE_SELECTOR = 'ng-template';\nfunction isCssClassMatching(tNode, attrs, cssClassToMatch, isProjectionMode) {\n ngDevMode && assertEqual(cssClassToMatch, cssClassToMatch.toLowerCase(), 'Class name expected to be lowercase.');\n let i = 0;\n if (isProjectionMode) {\n for (; i < attrs.length && typeof attrs[i] === 'string'; i += 2) {\n if (attrs[i] === 'class' && classIndexOf(attrs[i + 1].toLowerCase(), cssClassToMatch, 0) !== -1) {\n return true;\n }\n }\n } else if (isInlineTemplate(tNode)) {\n return false;\n }\n i = attrs.indexOf(1, i);\n if (i > -1) {\n let item;\n while (++i < attrs.length && typeof (item = attrs[i]) === 'string') {\n if (item.toLowerCase() === cssClassToMatch) {\n return true;\n }\n }\n }\n return false;\n}\nfunction isInlineTemplate(tNode) {\n return tNode.type === 4 && tNode.value !== NG_TEMPLATE_SELECTOR;\n}\nfunction hasTagAndTypeMatch(tNode, currentSelector, isProjectionMode) {\n const tagNameToCompare = tNode.type === 4 && !isProjectionMode ? NG_TEMPLATE_SELECTOR : tNode.value;\n return currentSelector === tagNameToCompare;\n}\nfunction isNodeMatchingSelector(tNode, selector, isProjectionMode) {\n ngDevMode && assertDefined(selector[0], 'Selector should have a tag name');\n let mode = 4;\n const nodeAttrs = tNode.attrs;\n const nameOnlyMarkerIdx = nodeAttrs !== null ? getNameOnlyMarkerIndex(nodeAttrs) : 0;\n let skipToNextSelector = false;\n for (let i = 0; i < selector.length; i++) {\n const current = selector[i];\n if (typeof current === 'number') {\n if (!skipToNextSelector && !isPositive(mode) && !isPositive(current)) {\n return false;\n }\n if (skipToNextSelector && isPositive(current)) continue;\n skipToNextSelector = false;\n mode = current | mode & 1;\n continue;\n }\n if (skipToNextSelector) continue;\n if (mode & 4) {\n mode = 2 | mode & 1;\n if (current !== '' && !hasTagAndTypeMatch(tNode, current, isProjectionMode) || current === '' && selector.length === 1) {\n if (isPositive(mode)) return false;\n skipToNextSelector = true;\n }\n } else if (mode & 8) {\n if (nodeAttrs === null || !isCssClassMatching(tNode, nodeAttrs, current, isProjectionMode)) {\n if (isPositive(mode)) return false;\n skipToNextSelector = true;\n }\n } else {\n const selectorAttrValue = selector[++i];\n const attrIndexInNode = findAttrIndexInNode(current, nodeAttrs, isInlineTemplate(tNode), isProjectionMode);\n if (attrIndexInNode === -1) {\n if (isPositive(mode)) return false;\n skipToNextSelector = true;\n continue;\n }\n if (selectorAttrValue !== '') {\n let nodeAttrValue;\n if (attrIndexInNode > nameOnlyMarkerIdx) {\n nodeAttrValue = '';\n } else {\n ngDevMode && assertNotEqual(nodeAttrs[attrIndexInNode], 0, 'We do not match directives on namespaced attributes');\n nodeAttrValue = nodeAttrs[attrIndexInNode + 1].toLowerCase();\n }\n if (mode & 2 && selectorAttrValue !== nodeAttrValue) {\n if (isPositive(mode)) return false;\n skipToNextSelector = true;\n }\n }\n }\n }\n return isPositive(mode) || skipToNextSelector;\n}\nfunction isPositive(mode) {\n return (mode & 1) === 0;\n}\nfunction findAttrIndexInNode(name, attrs, isInlineTemplate, isProjectionMode) {\n if (attrs === null) return -1;\n let i = 0;\n if (isProjectionMode || !isInlineTemplate) {\n let bindingsMode = false;\n while (i < attrs.length) {\n const maybeAttrName = attrs[i];\n if (maybeAttrName === name) {\n return i;\n } else if (maybeAttrName === 3 || maybeAttrName === 6) {\n bindingsMode = true;\n } else if (maybeAttrName === 1 || maybeAttrName === 2) {\n let value = attrs[++i];\n while (typeof value === 'string') {\n value = attrs[++i];\n }\n continue;\n } else if (maybeAttrName === 4) {\n break;\n } else if (maybeAttrName === 0) {\n i += 4;\n continue;\n }\n i += bindingsMode ? 1 : 2;\n }\n return -1;\n } else {\n return matchTemplateAttribute(attrs, name);\n }\n}\nfunction isNodeMatchingSelectorList(tNode, selector, isProjectionMode = false) {\n for (let i = 0; i < selector.length; i++) {\n if (isNodeMatchingSelector(tNode, selector[i], isProjectionMode)) {\n return true;\n }\n }\n return false;\n}\nfunction getProjectAsAttrValue(tNode) {\n const nodeAttrs = tNode.attrs;\n if (nodeAttrs != null) {\n const ngProjectAsAttrIdx = nodeAttrs.indexOf(5);\n if ((ngProjectAsAttrIdx & 1) === 0) {\n return nodeAttrs[ngProjectAsAttrIdx + 1];\n }\n }\n return null;\n}\nfunction getNameOnlyMarkerIndex(nodeAttrs) {\n for (let i = 0; i < nodeAttrs.length; i++) {\n const nodeAttr = nodeAttrs[i];\n if (isNameOnlyAttributeMarker(nodeAttr)) {\n return i;\n }\n }\n return nodeAttrs.length;\n}\nfunction matchTemplateAttribute(attrs, name) {\n let i = attrs.indexOf(4);\n if (i > -1) {\n i++;\n while (i < attrs.length) {\n const attr = attrs[i];\n if (typeof attr === 'number') return -1;\n if (attr === name) return i;\n i++;\n }\n }\n return -1;\n}\nfunction isSelectorInSelectorList(selector, list) {\n selectorListLoop: for (let i = 0; i < list.length; i++) {\n const currentSelectorInList = list[i];\n if (selector.length !== currentSelectorInList.length) {\n continue;\n }\n for (let j = 0; j < selector.length; j++) {\n if (selector[j] !== currentSelectorInList[j]) {\n continue selectorListLoop;\n }\n }\n return true;\n }\n return false;\n}\nfunction maybeWrapInNotSelector(isNegativeMode, chunk) {\n return isNegativeMode ? ':not(' + chunk.trim() + ')' : chunk;\n}\nfunction stringifyCSSSelector(selector) {\n let result = selector[0];\n let i = 1;\n let mode = 2;\n let currentChunk = '';\n let isNegativeMode = false;\n while (i < selector.length) {\n let valueOrMarker = selector[i];\n if (typeof valueOrMarker === 'string') {\n if (mode & 2) {\n const attrValue = selector[++i];\n currentChunk += '[' + valueOrMarker + (attrValue.length > 0 ? '=\"' + attrValue + '\"' : '') + ']';\n } else if (mode & 8) {\n currentChunk += '.' + valueOrMarker;\n } else if (mode & 4) {\n currentChunk += ' ' + valueOrMarker;\n }\n } else {\n if (currentChunk !== '' && !isPositive(valueOrMarker)) {\n result += maybeWrapInNotSelector(isNegativeMode, currentChunk);\n currentChunk = '';\n }\n mode = valueOrMarker;\n isNegativeMode = isNegativeMode || !isPositive(mode);\n }\n i++;\n }\n if (currentChunk !== '') {\n result += maybeWrapInNotSelector(isNegativeMode, currentChunk);\n }\n return result;\n}\nfunction stringifyCSSSelectorList(selectorList) {\n return selectorList.map(stringifyCSSSelector).join(',');\n}\nfunction extractAttrsAndClassesFromSelector(selector) {\n const attrs = [];\n const classes = [];\n let i = 1;\n let mode = 2;\n while (i < selector.length) {\n let valueOrMarker = selector[i];\n if (typeof valueOrMarker === 'string') {\n if (mode === 2) {\n if (valueOrMarker !== '') {\n attrs.push(valueOrMarker, selector[++i]);\n }\n } else if (mode === 8) {\n classes.push(valueOrMarker);\n }\n } else {\n if (!isPositive(mode)) break;\n mode = valueOrMarker;\n }\n i++;\n }\n if (classes.length) {\n attrs.push(1, ...classes);\n }\n return attrs;\n}\nconst NO_CHANGE = typeof ngDevMode === 'undefined' || ngDevMode ? {\n __brand__: 'NO_CHANGE'\n} : {};\nfunction createTView(type, declTNode, templateFn, decls, vars, directives, pipes, viewQuery, schemas, constsOrFactory, ssrId) {\n const bindingStartIndex = HEADER_OFFSET + decls;\n const initialViewLength = bindingStartIndex + vars;\n const blueprint = createViewBlueprint(bindingStartIndex, initialViewLength);\n const consts = typeof constsOrFactory === 'function' ? constsOrFactory() : constsOrFactory;\n const tView = blueprint[TVIEW] = {\n type: type,\n blueprint: blueprint,\n template: templateFn,\n queries: null,\n viewQuery: viewQuery,\n declTNode: declTNode,\n data: blueprint.slice().fill(null, bindingStartIndex),\n bindingStartIndex: bindingStartIndex,\n expandoStartIndex: initialViewLength,\n hostBindingOpCodes: null,\n firstCreatePass: true,\n firstUpdatePass: true,\n staticViewQueries: false,\n staticContentQueries: false,\n preOrderHooks: null,\n preOrderCheckHooks: null,\n contentHooks: null,\n contentCheckHooks: null,\n viewHooks: null,\n viewCheckHooks: null,\n destroyHooks: null,\n cleanup: null,\n contentQueries: null,\n components: null,\n directiveRegistry: typeof directives === 'function' ? directives() : directives,\n pipeRegistry: typeof pipes === 'function' ? pipes() : pipes,\n firstChild: null,\n schemas: schemas,\n consts: consts,\n incompleteFirstPass: false,\n ssrId\n };\n if (ngDevMode) {\n Object.seal(tView);\n }\n return tView;\n}\nfunction createViewBlueprint(bindingStartIndex, initialViewLength) {\n const blueprint = [];\n for (let i = 0; i < initialViewLength; i++) {\n blueprint.push(i < bindingStartIndex ? null : NO_CHANGE);\n }\n return blueprint;\n}\nfunction getOrCreateComponentTView(def) {\n const tView = def.tView;\n if (tView === null || tView.incompleteFirstPass) {\n const declTNode = null;\n return def.tView = createTView(1, declTNode, def.template, def.decls, def.vars, def.directiveDefs, def.pipeDefs, def.viewQuery, def.schemas, def.consts, def.id);\n }\n return tView;\n}\nfunction createLView(parentLView, tView, context, flags, host, tHostNode, environment, renderer, injector, embeddedViewInjector, hydrationInfo) {\n const lView = tView.blueprint.slice();\n lView[HOST] = host;\n lView[FLAGS] = flags | 4 | 128 | 8 | 64 | 1024;\n if (embeddedViewInjector !== null || parentLView && parentLView[FLAGS] & 2048) {\n lView[FLAGS] |= 2048;\n }\n resetPreOrderHookFlags(lView);\n ngDevMode && tView.declTNode && parentLView && assertTNodeForLView(tView.declTNode, parentLView);\n lView[PARENT] = lView[DECLARATION_VIEW] = parentLView;\n lView[CONTEXT] = context;\n lView[ENVIRONMENT] = environment || parentLView && parentLView[ENVIRONMENT];\n ngDevMode && assertDefined(lView[ENVIRONMENT], 'LViewEnvironment is required');\n lView[RENDERER] = renderer || parentLView && parentLView[RENDERER];\n ngDevMode && assertDefined(lView[RENDERER], 'Renderer is required');\n lView[INJECTOR] = injector || parentLView && parentLView[INJECTOR] || null;\n lView[T_HOST] = tHostNode;\n lView[ID] = getUniqueLViewId();\n lView[HYDRATION] = hydrationInfo;\n lView[EMBEDDED_VIEW_INJECTOR] = embeddedViewInjector;\n ngDevMode && assertEqual(tView.type == 2 ? parentLView !== null : true, true, 'Embedded views must have parentLView');\n lView[DECLARATION_COMPONENT_VIEW] = tView.type == 2 ? parentLView[DECLARATION_COMPONENT_VIEW] : lView;\n return lView;\n}\nfunction createComponentLView(lView, hostTNode, def) {\n const native = getNativeByTNode(hostTNode, lView);\n const tView = getOrCreateComponentTView(def);\n const rendererFactory = lView[ENVIRONMENT].rendererFactory;\n const componentView = addToEndOfViewTree(lView, createLView(lView, tView, null, getInitialLViewFlagsFromDef(def), native, hostTNode, null, rendererFactory.createRenderer(native, def), null, null, null));\n return lView[hostTNode.index] = componentView;\n}\nfunction getInitialLViewFlagsFromDef(def) {\n let flags = 16;\n if (def.signals) {\n flags = 4096;\n } else if (def.onPush) {\n flags = 64;\n }\n return flags;\n}\nfunction allocExpando(tView, lView, numSlotsToAlloc, initialValue) {\n if (numSlotsToAlloc === 0) return -1;\n if (ngDevMode) {\n assertFirstCreatePass(tView);\n assertSame(tView, lView[TVIEW], '`LView` must be associated with `TView`!');\n assertEqual(tView.data.length, lView.length, 'Expecting LView to be same size as TView');\n assertEqual(tView.data.length, tView.blueprint.length, 'Expecting Blueprint to be same size as TView');\n assertFirstUpdatePass(tView);\n }\n const allocIdx = lView.length;\n for (let i = 0; i < numSlotsToAlloc; i++) {\n lView.push(initialValue);\n tView.blueprint.push(initialValue);\n tView.data.push(null);\n }\n return allocIdx;\n}\nfunction addToEndOfViewTree(lView, lViewOrLContainer) {\n if (lView[CHILD_HEAD]) {\n lView[CHILD_TAIL][NEXT] = lViewOrLContainer;\n } else {\n lView[CHILD_HEAD] = lViewOrLContainer;\n }\n lView[CHILD_TAIL] = lViewOrLContainer;\n return lViewOrLContainer;\n}\nfunction \u0275\u0275advance(delta = 1) {\n ngDevMode && assertGreaterThan(delta, 0, 'Can only advance forward');\n selectIndexInternal(getTView(), getLView(), getSelectedIndex() + delta, !!ngDevMode && isInCheckNoChangesMode());\n}\nfunction selectIndexInternal(tView, lView, index, checkNoChangesMode) {\n ngDevMode && assertIndexInDeclRange(lView[TVIEW], index);\n if (!checkNoChangesMode) {\n const hooksInitPhaseCompleted = (lView[FLAGS] & 3) === 3;\n if (hooksInitPhaseCompleted) {\n const preOrderCheckHooks = tView.preOrderCheckHooks;\n if (preOrderCheckHooks !== null) {\n executeCheckHooks(lView, preOrderCheckHooks, index);\n }\n } else {\n const preOrderHooks = tView.preOrderHooks;\n if (preOrderHooks !== null) {\n executeInitAndCheckHooks(lView, preOrderHooks, 0, index);\n }\n }\n }\n setSelectedIndex(index);\n}\nvar InputFlags = /*#__PURE__*/function (InputFlags) {\n InputFlags[InputFlags[\"None\"] = 0] = \"None\";\n InputFlags[InputFlags[\"SignalBased\"] = 1] = \"SignalBased\";\n InputFlags[InputFlags[\"HasDecoratorInputTransform\"] = 2] = \"HasDecoratorInputTransform\";\n return InputFlags;\n}(InputFlags || {});\nfunction writeToDirectiveInput(def, instance, publicName, value) {\n const prevConsumer = setActiveConsumer(null);\n try {\n if (ngDevMode) {\n if (!def.inputs.hasOwnProperty(publicName)) {\n throw new Error(`ASSERTION ERROR: Directive ${def.type.name} does not have an input with a public name of \"${publicName}\"`);\n }\n if (instance instanceof NodeInjectorFactory) {\n throw new Error(`ASSERTION ERROR: Cannot write input to factory for type ${def.type.name}. Directive has not been created yet.`);\n }\n }\n const [privateName, flags, transform] = def.inputs[publicName];\n let inputSignalNode = null;\n if ((flags & InputFlags.SignalBased) !== 0) {\n const field = instance[privateName];\n inputSignalNode = field[SIGNAL];\n }\n if (inputSignalNode !== null && inputSignalNode.transformFn !== undefined) {\n value = inputSignalNode.transformFn(value);\n } else if (transform !== null) {\n value = transform.call(instance, value);\n }\n if (def.setInput !== null) {\n def.setInput(instance, inputSignalNode, value, publicName, privateName);\n } else {\n applyValueToInputField(instance, inputSignalNode, privateName, value);\n }\n } finally {\n setActiveConsumer(prevConsumer);\n }\n}\nvar RendererStyleFlags2 = /*#__PURE__*/function (RendererStyleFlags2) {\n RendererStyleFlags2[RendererStyleFlags2[\"Important\"] = 1] = \"Important\";\n RendererStyleFlags2[RendererStyleFlags2[\"DashCase\"] = 2] = \"DashCase\";\n return RendererStyleFlags2;\n}(RendererStyleFlags2 || {});\nlet _icuContainerIterate;\nfunction icuContainerIterate(tIcuContainerNode, lView) {\n return _icuContainerIterate(tIcuContainerNode, lView);\n}\nfunction ensureIcuContainerVisitorLoaded(loader) {\n if (_icuContainerIterate === undefined) {\n _icuContainerIterate = loader();\n }\n}\nconst ANIMATIONS_DISABLED = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'AnimationsDisabled' : '', {\n factory: () => false\n});\nconst MAX_ANIMATION_TIMEOUT = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'MaxAnimationTimeout' : '', {\n factory: () => MAX_ANIMATION_TIMEOUT_DEFAULT\n});\nconst MAX_ANIMATION_TIMEOUT_DEFAULT = 4000;\nconst DEFAULT_ANIMATIONS_DISABLED = false;\nconst areAnimationSupported = (typeof ngServerMode === 'undefined' || !ngServerMode) && typeof document !== 'undefined' && typeof document?.documentElement?.getAnimations === 'function';\nfunction areAnimationsDisabled(lView) {\n const injector = lView[INJECTOR];\n return injector.get(ANIMATIONS_DISABLED, DEFAULT_ANIMATIONS_DISABLED);\n}\nfunction assertAnimationTypes(value, instruction) {\n if (value == null || typeof value !== 'string' && typeof value !== 'function') {\n throw new RuntimeError(650, `'${instruction}' value must be a string of CSS classes or an animation function, got ${stringify(value)}`);\n }\n}\nfunction assertElementNodes(nativeElement, instruction) {\n if (nativeElement.nodeType !== Node.ELEMENT_NODE) {\n throw new RuntimeError(650, `'${instruction}' can only be used on an element node, got ${stringify(nativeElement.nodeType)}`);\n }\n}\nfunction trackEnterClasses(el, classList, cleanupFns) {\n const elementData = enterClassMap.get(el);\n if (elementData) {\n for (const klass of classList) {\n elementData.classList.push(klass);\n }\n for (const fn of cleanupFns) {\n elementData.cleanupFns.push(fn);\n }\n } else {\n enterClassMap.set(el, {\n classList,\n cleanupFns\n });\n }\n}\nfunction cleanupEnterClassData(element) {\n const elementData = enterClassMap.get(element);\n if (elementData) {\n for (const fn of elementData.cleanupFns) {\n fn();\n }\n enterClassMap.delete(element);\n }\n longestAnimations.delete(element);\n}\nconst noOpAnimationComplete = () => {};\nconst enterClassMap = /*#__PURE__*/new WeakMap();\nconst longestAnimations = /*#__PURE__*/new WeakMap();\nconst leavingNodes = /*#__PURE__*/new WeakMap();\nconst reusedNodes = /*#__PURE__*/new WeakSet();\nfunction clearLeavingNodes(tNode, el) {\n const nodes = leavingNodes.get(tNode);\n if (nodes && nodes.length > 0) {\n const ix = nodes.findIndex(node => node === el);\n if (ix > -1) nodes.splice(ix, 1);\n }\n if (nodes?.length === 0) {\n leavingNodes.delete(tNode);\n }\n}\nfunction cancelLeavingNodes(tNode, newElement) {\n const nodes = leavingNodes.get(tNode);\n if (!nodes || nodes.length === 0) return;\n const newParent = newElement.parentNode;\n const prevSibling = newElement.previousSibling;\n for (let i = nodes.length - 1; i >= 0; i--) {\n const leavingEl = nodes[i];\n const leavingParent = leavingEl.parentNode;\n if (leavingEl === newElement) {\n nodes.splice(i, 1);\n reusedNodes.add(leavingEl);\n leavingEl.dispatchEvent(new CustomEvent('animationend', {\n detail: {\n cancel: true\n }\n }));\n } else if (prevSibling && leavingEl === prevSibling || leavingParent && newParent && leavingParent !== newParent) {\n nodes.splice(i, 1);\n leavingEl.dispatchEvent(new CustomEvent('animationend', {\n detail: {\n cancel: true\n }\n }));\n leavingEl.parentNode?.removeChild(leavingEl);\n }\n }\n}\nfunction trackLeavingNodes(tNode, el) {\n const nodes = leavingNodes.get(tNode);\n if (nodes) {\n if (!nodes.includes(el)) {\n nodes.push(el);\n }\n } else {\n leavingNodes.set(tNode, [el]);\n }\n}\nfunction getLViewEnterAnimations(lView) {\n const animationData = lView[ANIMATIONS] ??= {};\n return animationData.enter ??= new Map();\n}\nfunction getLViewLeaveAnimations(lView) {\n const animationData = lView[ANIMATIONS] ??= {};\n return animationData.leave ??= new Map();\n}\nfunction getClassListFromValue(value) {\n const classes = typeof value === 'function' ? value() : value;\n let classList = Array.isArray(classes) ? classes : null;\n if (typeof classes === 'string') {\n classList = classes.trim().split(/\\s+/).filter(k => k);\n }\n return classList;\n}\nfunction cancelAnimationsIfRunning(element, renderer) {\n if (!areAnimationSupported) return;\n const elementData = enterClassMap.get(element);\n if (elementData && elementData.classList.length > 0 && elementHasClassList(element, elementData.classList)) {\n for (const klass of elementData.classList) {\n renderer.removeClass(element, klass);\n }\n }\n cleanupEnterClassData(element);\n}\nfunction elementHasClassList(element, classList) {\n for (const className of classList) {\n if (element.classList.contains(className)) return true;\n }\n return false;\n}\nfunction getEventTarget(event) {\n return event.composedPath ? event.composedPath()[0] : event.target;\n}\nfunction isLongestAnimation(event, nativeElement) {\n const longestAnimation = longestAnimations.get(nativeElement);\n if (longestAnimation === undefined) return true;\n return nativeElement === getEventTarget(event) && (longestAnimation.animationName !== undefined && event.animationName === longestAnimation.animationName || longestAnimation.propertyName !== undefined && (longestAnimation.propertyName === 'all' || event.propertyName === longestAnimation.propertyName));\n}\nfunction addAnimationToLView(animations, tNode, fn) {\n const nodeAnimations = animations.get(tNode.index) ?? {\n animateFns: []\n };\n nodeAnimations.animateFns.push(fn);\n animations.set(tNode.index, nodeAnimations);\n}\nfunction cleanupAfterLeaveAnimations(resolvers, cleanupFns) {\n if (resolvers) {\n for (const fn of resolvers) {\n fn();\n }\n }\n for (const fn of cleanupFns) {\n fn();\n }\n}\nfunction clearLViewNodeAnimationResolvers(lView, tNode) {\n const nodeAnimations = getLViewLeaveAnimations(lView).get(tNode.index);\n if (nodeAnimations) nodeAnimations.resolvers = undefined;\n}\nfunction leaveAnimationFunctionCleanup(lView, tNode, nativeElement, resolvers, cleanupFns) {\n clearLeavingNodes(tNode, nativeElement);\n cleanupAfterLeaveAnimations(resolvers, cleanupFns);\n clearLViewNodeAnimationResolvers(lView, tNode);\n}\nfunction parseCssTimeUnitsToMs(value) {\n if (!value) return 0;\n const multiplier = value.toLowerCase().indexOf('ms') > -1 ? 1 : 1000;\n return parseFloat(value) * multiplier;\n}\nfunction parseCssPropertyValue(computedStyle, name) {\n const value = computedStyle.getPropertyValue(name);\n return value.split(',').map(part => part.trim());\n}\nfunction getLongestComputedTransition(computedStyle) {\n const transitionedProperties = parseCssPropertyValue(computedStyle, 'transition-property');\n const rawDurations = parseCssPropertyValue(computedStyle, 'transition-duration');\n const rawDelays = parseCssPropertyValue(computedStyle, 'transition-delay');\n const longest = {\n propertyName: '',\n duration: 0,\n animationName: undefined\n };\n for (let i = 0; i < transitionedProperties.length; i++) {\n const duration = parseCssTimeUnitsToMs(rawDelays[i]) + parseCssTimeUnitsToMs(rawDurations[i]);\n if (duration > longest.duration) {\n longest.propertyName = transitionedProperties[i];\n longest.duration = duration;\n }\n }\n return longest;\n}\nfunction getLongestComputedAnimation(computedStyle) {\n const rawNames = parseCssPropertyValue(computedStyle, 'animation-name');\n const rawDelays = parseCssPropertyValue(computedStyle, 'animation-delay');\n const rawDurations = parseCssPropertyValue(computedStyle, 'animation-duration');\n const rawIterationCounts = parseCssPropertyValue(computedStyle, 'animation-iteration-count');\n const longest = {\n animationName: '',\n propertyName: undefined,\n duration: 0\n };\n for (let i = 0; i < rawNames.length; i++) {\n const duration = parseCssTimeUnitsToMs(rawDelays[i]) + parseCssTimeUnitsToMs(rawDurations[i]);\n const iterationCount = rawIterationCounts[i];\n if (duration > longest.duration && iterationCount !== 'infinite') {\n longest.animationName = rawNames[i];\n longest.duration = duration;\n }\n }\n return longest;\n}\nfunction isShorterThanExistingAnimation(existing, longest) {\n return existing !== undefined && existing.duration > longest.duration;\n}\nfunction longestExists(longest) {\n return (longest.animationName != undefined || longest.propertyName != undefined) && longest.duration > 0;\n}\nfunction determineLongestAnimationFromComputedStyles(el, animationsMap) {\n const computedStyle = getComputedStyle(el);\n const longestAnimation = getLongestComputedAnimation(computedStyle);\n const longestTransition = getLongestComputedTransition(computedStyle);\n const longest = longestAnimation.duration > longestTransition.duration ? longestAnimation : longestTransition;\n if (isShorterThanExistingAnimation(animationsMap.get(el), longest)) return;\n if (longestExists(longest)) {\n animationsMap.set(el, longest);\n }\n}\nfunction determineLongestAnimation(el, animationsMap, areAnimationSupported) {\n if (!areAnimationSupported) return;\n const animations = el.getAnimations();\n return animations.length === 0 ? determineLongestAnimationFromComputedStyles(el, animationsMap) : determineLongestAnimationFromElementAnimations(el, animationsMap, animations);\n}\nfunction determineLongestAnimationFromElementAnimations(el, animationsMap, animations) {\n let longest = {\n animationName: undefined,\n propertyName: undefined,\n duration: 0\n };\n for (const animation of animations) {\n const timing = animation.effect?.getTiming();\n if (timing?.iterations === Infinity) {\n continue;\n }\n const animDuration = typeof timing?.duration === 'number' ? timing.duration : 0;\n let duration = (timing?.delay ?? 0) + animDuration;\n let propertyName;\n let animationName;\n if (animation.animationName) {\n animationName = animation.animationName;\n } else {\n propertyName = animation.transitionProperty;\n }\n if (duration >= longest.duration) {\n longest = {\n animationName,\n propertyName,\n duration\n };\n }\n }\n if (isShorterThanExistingAnimation(animationsMap.get(el), longest)) return;\n if (longestExists(longest)) {\n animationsMap.set(el, longest);\n }\n}\nconst allLeavingAnimations = /*#__PURE__*/new Set();\nvar TracingAction = /*#__PURE__*/function (TracingAction) {\n TracingAction[TracingAction[\"CHANGE_DETECTION\"] = 0] = \"CHANGE_DETECTION\";\n TracingAction[TracingAction[\"AFTER_NEXT_RENDER\"] = 1] = \"AFTER_NEXT_RENDER\";\n return TracingAction;\n}(TracingAction || {});\nconst TracingService = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'TracingService' : '');\nconst markedFeatures = /*#__PURE__*/new Set();\nfunction performanceMarkFeature(feature) {\n if (markedFeatures.has(feature)) {\n return;\n }\n markedFeatures.add(feature);\n performance?.mark?.('mark_feature_usage', {\n detail: {\n feature\n }\n });\n}\nlet AfterRenderManager = /*#__PURE__*/(() => {\n class AfterRenderManager {\n impl = null;\n execute() {\n this.impl?.execute();\n }\n static \u0275prov = /* @__PURE__ */\n __defineInjectable({\n token: AfterRenderManager,\n providedIn: 'root',\n factory: () => new AfterRenderManager()\n });\n }\n return AfterRenderManager;\n})();\nconst AFTER_RENDER_PHASES = /* @__PURE__ **/(() => [0, 1, 2, 3])();\nlet AfterRenderImpl = /*#__PURE__*/(() => {\n class AfterRenderImpl {\n ngZone = inject(NgZone);\n scheduler = inject(ChangeDetectionScheduler);\n errorHandler = inject(ErrorHandler, {\n optional: true\n });\n sequences = new Set();\n deferredRegistrations = new Set();\n executing = false;\n constructor() {\n inject(TracingService, {\n optional: true\n });\n }\n execute() {\n const hasSequencesToExecute = this.sequences.size > 0;\n if (hasSequencesToExecute) {\n profiler(ProfilerEvent.AfterRenderHooksStart);\n }\n this.executing = true;\n for (const phase of AFTER_RENDER_PHASES) {\n for (const sequence of this.sequences) {\n if (sequence.erroredOrDestroyed || !sequence.hooks[phase]) {\n continue;\n }\n try {\n sequence.pipelinedValue = this.ngZone.runOutsideAngular(() => this.maybeTrace(() => {\n const hookFn = sequence.hooks[phase];\n const value = hookFn(sequence.pipelinedValue);\n return value;\n }, sequence.snapshot));\n } catch (err) {\n sequence.erroredOrDestroyed = true;\n this.errorHandler?.handleError(err);\n }\n }\n }\n this.executing = false;\n for (const sequence of this.sequences) {\n sequence.afterRun();\n if (sequence.once) {\n this.sequences.delete(sequence);\n sequence.destroy();\n }\n }\n for (const sequence of this.deferredRegistrations) {\n this.sequences.add(sequence);\n }\n if (this.deferredRegistrations.size > 0) {\n this.scheduler.notify(7);\n }\n this.deferredRegistrations.clear();\n if (hasSequencesToExecute) {\n profiler(ProfilerEvent.AfterRenderHooksEnd);\n }\n }\n register(sequence) {\n const {\n view\n } = sequence;\n if (view !== undefined) {\n (view[AFTER_RENDER_SEQUENCES_TO_ADD] ??= []).push(sequence);\n markAncestorsForTraversal(view);\n view[FLAGS] |= 8192;\n } else if (!this.executing) {\n this.addSequence(sequence);\n } else {\n this.deferredRegistrations.add(sequence);\n }\n }\n addSequence(sequence) {\n this.sequences.add(sequence);\n this.scheduler.notify(7);\n }\n unregister(sequence) {\n if (this.executing && this.sequences.has(sequence)) {\n sequence.erroredOrDestroyed = true;\n sequence.pipelinedValue = undefined;\n sequence.once = true;\n } else {\n this.sequences.delete(sequence);\n this.deferredRegistrations.delete(sequence);\n }\n }\n maybeTrace(fn, snapshot) {\n return snapshot ? snapshot.run(TracingAction.AFTER_NEXT_RENDER, fn) : fn();\n }\n static \u0275prov = /* @__PURE__ */\n __defineInjectable({\n token: AfterRenderImpl,\n providedIn: 'root',\n factory: () => new AfterRenderImpl()\n });\n }\n return AfterRenderImpl;\n})();\nclass AfterRenderSequence {\n impl;\n hooks;\n view;\n once;\n snapshot;\n erroredOrDestroyed = false;\n pipelinedValue = undefined;\n unregisterOnDestroy;\n constructor(impl, hooks, view, once, destroyRef, snapshot = null) {\n this.impl = impl;\n this.hooks = hooks;\n this.view = view;\n this.once = once;\n this.snapshot = snapshot;\n this.unregisterOnDestroy = destroyRef?.onDestroy(() => this.destroy());\n }\n afterRun() {\n this.erroredOrDestroyed = false;\n this.pipelinedValue = undefined;\n this.snapshot?.dispose();\n this.snapshot = null;\n }\n destroy() {\n this.impl.unregister(this);\n this.unregisterOnDestroy?.();\n const scheduled = this.view?.[AFTER_RENDER_SEQUENCES_TO_ADD];\n if (scheduled) {\n this.view[AFTER_RENDER_SEQUENCES_TO_ADD] = scheduled.filter(s => s !== this);\n }\n }\n}\nfunction afterEveryRender(callbackOrSpec, options) {\n ngDevMode && assertNotInReactiveContext(afterEveryRender, 'Call `afterEveryRender` outside of a reactive context. For example, schedule the render ' + 'callback inside the component constructor`.');\n if (ngDevMode && !options?.injector) {\n assertInInjectionContext(afterEveryRender);\n }\n const injector = options?.injector ?? inject(Injector);\n if (typeof ngServerMode !== 'undefined' && ngServerMode) {\n return NOOP_AFTER_RENDER_REF;\n }\n performanceMarkFeature('NgAfterRender');\n return afterEveryRenderImpl(callbackOrSpec, injector, options, false);\n}\nfunction afterNextRender(callbackOrSpec, options) {\n if (ngDevMode && !options?.injector) {\n assertInInjectionContext(afterNextRender);\n }\n const injector = options?.injector ?? inject(Injector);\n if (typeof ngServerMode !== 'undefined' && ngServerMode) {\n return NOOP_AFTER_RENDER_REF;\n }\n performanceMarkFeature('NgAfterNextRender');\n return afterEveryRenderImpl(callbackOrSpec, injector, options, true);\n}\nfunction getHooks(callbackOrSpec) {\n if (callbackOrSpec instanceof Function) {\n return [undefined, undefined, callbackOrSpec, undefined];\n } else {\n return [callbackOrSpec.earlyRead, callbackOrSpec.write, callbackOrSpec.mixedReadWrite, callbackOrSpec.read];\n }\n}\nfunction afterEveryRenderImpl(callbackOrSpec, injector, options, once) {\n const manager = injector.get(AfterRenderManager);\n manager.impl ??= injector.get(AfterRenderImpl);\n const tracing = injector.get(TracingService, null, {\n optional: true\n });\n const destroyRef = options?.manualCleanup !== true ? injector.get(DestroyRef) : null;\n const viewContext = injector.get(ViewContext, null, {\n optional: true\n });\n const sequence = new AfterRenderSequence(manager.impl, getHooks(callbackOrSpec), viewContext?.view, once, destroyRef, tracing?.snapshot(null));\n manager.impl.register(sequence);\n return sequence;\n}\nconst NOOP_AFTER_RENDER_REF = {\n destroy() {}\n};\nconst ANIMATION_QUEUE = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'AnimationQueue' : '', {\n factory: () => {\n return {\n queue: new Set(),\n isScheduled: false,\n scheduler: null,\n injector: inject(EnvironmentInjector)\n };\n }\n});\nfunction addToAnimationQueue(injector, animationFns, animationData) {\n const animationQueue = injector.get(ANIMATION_QUEUE);\n if (Array.isArray(animationFns)) {\n for (const animateFn of animationFns) {\n animationQueue.queue.add(animateFn);\n animationData?.detachedLeaveAnimationFns?.push(animateFn);\n }\n } else {\n animationQueue.queue.add(animationFns);\n animationData?.detachedLeaveAnimationFns?.push(animationFns);\n }\n animationQueue.scheduler && animationQueue.scheduler(injector);\n}\nfunction removeFromAnimationQueue(injector, animationData) {\n const animationQueue = injector.get(ANIMATION_QUEUE);\n if (animationData.detachedLeaveAnimationFns) {\n for (const animationFn of animationData.detachedLeaveAnimationFns) {\n animationQueue.queue.delete(animationFn);\n }\n animationData.detachedLeaveAnimationFns = undefined;\n }\n}\nfunction scheduleAnimationQueue(injector) {\n const animationQueue = injector.get(ANIMATION_QUEUE);\n if (!animationQueue.isScheduled) {\n afterNextRender(() => {\n animationQueue.isScheduled = false;\n for (let animateFn of animationQueue.queue) {\n animateFn();\n }\n animationQueue.queue.clear();\n }, {\n injector: animationQueue.injector\n });\n animationQueue.isScheduled = true;\n }\n}\nfunction initializeAnimationQueueScheduler(injector) {\n const animationQueue = injector.get(ANIMATION_QUEUE);\n animationQueue.scheduler = scheduleAnimationQueue;\n animationQueue.scheduler(injector);\n}\nfunction queueEnterAnimations(injector, enterAnimations) {\n for (const [_, nodeAnimations] of enterAnimations) {\n addToAnimationQueue(injector, nodeAnimations.animateFns);\n }\n}\nfunction maybeQueueEnterAnimation(parentLView, parent, tNode, injector) {\n const enterAnimations = parentLView?.[ANIMATIONS]?.enter;\n if (parent !== null && enterAnimations && enterAnimations.has(tNode.index)) {\n queueEnterAnimations(injector, enterAnimations);\n }\n}\nfunction applyToElementOrContainer(action, renderer, injector, parent, lNodeToHandle, tNode, beforeNode, parentLView) {\n if (lNodeToHandle != null) {\n let lContainer;\n let isComponent = false;\n if (isLContainer(lNodeToHandle)) {\n lContainer = lNodeToHandle;\n } else if (isLView(lNodeToHandle)) {\n isComponent = true;\n ngDevMode && assertDefined(lNodeToHandle[HOST], 'HOST must be defined for a component LView');\n lNodeToHandle = lNodeToHandle[HOST];\n }\n const rNode = unwrapRNode(lNodeToHandle);\n if (action === 0 && parent !== null) {\n maybeQueueEnterAnimation(parentLView, parent, tNode, injector);\n if (beforeNode == null) {\n nativeAppendChild(renderer, parent, rNode);\n } else {\n nativeInsertBefore(renderer, parent, rNode, beforeNode || null, true);\n }\n } else if (action === 1 && parent !== null) {\n maybeQueueEnterAnimation(parentLView, parent, tNode, injector);\n nativeInsertBefore(renderer, parent, rNode, beforeNode || null, true);\n cancelLeavingNodes(tNode, rNode);\n } else if (action === 2) {\n if (parentLView?.[ANIMATIONS]?.leave?.has(tNode.index)) {\n trackLeavingNodes(tNode, rNode);\n }\n runLeaveAnimationsWithCallback(parentLView, tNode, injector, nodeHasLeaveAnimations => {\n if (reusedNodes.has(rNode)) {\n reusedNodes.delete(rNode);\n return;\n }\n nativeRemoveNode(renderer, rNode, isComponent, nodeHasLeaveAnimations);\n });\n } else if (action === 3) {\n runLeaveAnimationsWithCallback(parentLView, tNode, injector, () => {\n renderer.destroyNode(rNode);\n });\n }\n if (lContainer != null) {\n applyContainer(renderer, action, injector, lContainer, tNode, parent, beforeNode);\n }\n }\n}\nfunction removeViewFromDOM(tView, lView) {\n detachViewFromDOM(tView, lView);\n lView[HOST] = null;\n lView[T_HOST] = null;\n}\nfunction addViewToDOM(tView, parentTNode, renderer, lView, parentNativeNode, beforeNode) {\n lView[HOST] = parentNativeNode;\n lView[T_HOST] = parentTNode;\n applyView(tView, lView, renderer, 1, parentNativeNode, beforeNode);\n}\nfunction detachViewFromDOM(tView, lView) {\n lView[ENVIRONMENT].changeDetectionScheduler?.notify(9);\n applyView(tView, lView, lView[RENDERER], 2, null, null);\n}\nfunction destroyViewTree(rootView) {\n let lViewOrLContainer = rootView[CHILD_HEAD];\n if (!lViewOrLContainer) {\n return cleanUpView(rootView[TVIEW], rootView);\n }\n while (lViewOrLContainer) {\n let next = null;\n if (isLView(lViewOrLContainer)) {\n next = lViewOrLContainer[CHILD_HEAD];\n } else {\n ngDevMode && assertLContainer(lViewOrLContainer);\n const firstView = lViewOrLContainer[CONTAINER_HEADER_OFFSET];\n if (firstView) next = firstView;\n }\n if (!next) {\n while (lViewOrLContainer && !lViewOrLContainer[NEXT] && lViewOrLContainer !== rootView) {\n if (isLView(lViewOrLContainer)) {\n cleanUpView(lViewOrLContainer[TVIEW], lViewOrLContainer);\n }\n lViewOrLContainer = lViewOrLContainer[PARENT];\n }\n if (lViewOrLContainer === null) lViewOrLContainer = rootView;\n if (isLView(lViewOrLContainer)) {\n cleanUpView(lViewOrLContainer[TVIEW], lViewOrLContainer);\n }\n next = lViewOrLContainer && lViewOrLContainer[NEXT];\n }\n lViewOrLContainer = next;\n }\n}\nfunction detachMovedView(declarationContainer, lView) {\n ngDevMode && assertLContainer(declarationContainer);\n ngDevMode && assertDefined(declarationContainer[MOVED_VIEWS], 'A projected view should belong to a non-empty projected views collection');\n const movedViews = declarationContainer[MOVED_VIEWS];\n const declarationViewIndex = movedViews.indexOf(lView);\n movedViews.splice(declarationViewIndex, 1);\n}\nfunction destroyLView(tView, lView) {\n if (isDestroyed(lView)) {\n return;\n }\n const renderer = lView[RENDERER];\n if (renderer.destroyNode) {\n applyView(tView, lView, renderer, 3, null, null);\n }\n destroyViewTree(lView);\n}\nfunction cleanUpView(tView, lView) {\n if (isDestroyed(lView)) {\n return;\n }\n const prevConsumer = setActiveConsumer(null);\n try {\n lView[FLAGS] &= ~128;\n lView[FLAGS] |= 256;\n lView[REACTIVE_TEMPLATE_CONSUMER] && consumerDestroy(lView[REACTIVE_TEMPLATE_CONSUMER]);\n executeOnDestroys(tView, lView);\n processCleanups(tView, lView);\n if (lView[TVIEW].type === 1) {\n lView[RENDERER].destroy();\n }\n const declarationContainer = lView[DECLARATION_LCONTAINER];\n if (declarationContainer !== null && isLContainer(lView[PARENT])) {\n if (declarationContainer !== lView[PARENT]) {\n detachMovedView(declarationContainer, lView);\n }\n const lQueries = lView[QUERIES];\n if (lQueries !== null) {\n lQueries.detachView(tView);\n }\n }\n unregisterLView(lView);\n } finally {\n setActiveConsumer(prevConsumer);\n }\n}\nfunction runLeaveAnimationsWithCallback(lView, tNode, injector, callback) {\n const animations = lView?.[ANIMATIONS];\n if (animations == null || animations.leave == undefined || !animations.leave.has(tNode.index)) return callback(false);\n if (lView) allLeavingAnimations.add(lView[ID]);\n addToAnimationQueue(injector, () => {\n if (animations.leave && animations.leave.has(tNode.index)) {\n const leaveAnimationMap = animations.leave;\n const leaveAnimations = leaveAnimationMap.get(tNode.index);\n const runningAnimations = [];\n if (leaveAnimations) {\n for (let index = 0; index < leaveAnimations.animateFns.length; index++) {\n const animationFn = leaveAnimations.animateFns[index];\n const {\n promise\n } = animationFn();\n runningAnimations.push(promise);\n }\n animations.detachedLeaveAnimationFns = undefined;\n }\n animations.running = Promise.allSettled(runningAnimations);\n runAfterLeaveAnimations(lView, callback);\n } else {\n if (lView) allLeavingAnimations.delete(lView[ID]);\n callback(false);\n }\n }, animations);\n}\nfunction runAfterLeaveAnimations(lView, callback) {\n const runningAnimations = lView[ANIMATIONS]?.running;\n if (runningAnimations) {\n runningAnimations.then(() => {\n lView[ANIMATIONS].running = undefined;\n allLeavingAnimations.delete(lView[ID]);\n callback(true);\n });\n return;\n }\n callback(false);\n}\nfunction processCleanups(tView, lView) {\n ngDevMode && assertNotReactive(processCleanups.name);\n const tCleanup = tView.cleanup;\n const lCleanup = lView[CLEANUP];\n if (tCleanup !== null) {\n for (let i = 0; i < tCleanup.length - 1; i += 2) {\n if (typeof tCleanup[i] === 'string') {\n const targetIdx = tCleanup[i + 3];\n ngDevMode && assertNumber(targetIdx, 'cleanup target must be a number');\n if (targetIdx >= 0) {\n lCleanup[targetIdx]();\n } else {\n lCleanup[-targetIdx].unsubscribe();\n }\n i += 2;\n } else {\n const context = lCleanup[tCleanup[i + 1]];\n tCleanup[i].call(context);\n }\n }\n }\n if (lCleanup !== null) {\n lView[CLEANUP] = null;\n }\n const destroyHooks = lView[ON_DESTROY_HOOKS];\n if (destroyHooks !== null) {\n lView[ON_DESTROY_HOOKS] = null;\n for (let i = 0; i < destroyHooks.length; i++) {\n const destroyHooksFn = destroyHooks[i];\n ngDevMode && assertFunction(destroyHooksFn, 'Expecting destroy hook to be a function.');\n destroyHooksFn();\n }\n }\n const effects = lView[EFFECTS];\n if (effects !== null) {\n lView[EFFECTS] = null;\n for (const effect of effects) {\n effect.destroy();\n }\n }\n}\nfunction executeOnDestroys(tView, lView) {\n ngDevMode && assertNotReactive(executeOnDestroys.name);\n let destroyHooks;\n if (tView != null && (destroyHooks = tView.destroyHooks) != null) {\n for (let i = 0; i < destroyHooks.length; i += 2) {\n const context = lView[destroyHooks[i]];\n if (!(context instanceof NodeInjectorFactory)) {\n const toCall = destroyHooks[i + 1];\n if (Array.isArray(toCall)) {\n for (let j = 0; j < toCall.length; j += 2) {\n const callContext = context[toCall[j]];\n const hook = toCall[j + 1];\n profiler(ProfilerEvent.LifecycleHookStart, callContext, hook);\n try {\n hook.call(callContext);\n } finally {\n profiler(ProfilerEvent.LifecycleHookEnd, callContext, hook);\n }\n }\n } else {\n profiler(ProfilerEvent.LifecycleHookStart, context, toCall);\n try {\n toCall.call(context);\n } finally {\n profiler(ProfilerEvent.LifecycleHookEnd, context, toCall);\n }\n }\n }\n }\n }\n}\nfunction getParentRElement(tView, tNode, lView) {\n return getClosestRElement(tView, tNode.parent, lView);\n}\nfunction getClosestRElement(tView, tNode, lView) {\n let parentTNode = tNode;\n while (parentTNode !== null && parentTNode.type & (8 | 32 | 128)) {\n tNode = parentTNode;\n parentTNode = tNode.parent;\n }\n if (parentTNode === null) {\n return lView[HOST];\n } else {\n ngDevMode && assertTNodeType(parentTNode, 3 | 4);\n if (isComponentHost(parentTNode)) {\n ngDevMode && assertTNodeForLView(parentTNode, lView);\n const {\n encapsulation\n } = tView.data[parentTNode.directiveStart + parentTNode.componentOffset];\n if (encapsulation === ViewEncapsulation.None || encapsulation === ViewEncapsulation.Emulated) {\n return null;\n }\n }\n return getNativeByTNode(parentTNode, lView);\n }\n}\nfunction getInsertInFrontOfRNode(parentTNode, currentTNode, lView) {\n return _getInsertInFrontOfRNodeWithI18n(parentTNode, currentTNode, lView);\n}\nfunction getInsertInFrontOfRNodeWithNoI18n(parentTNode, currentTNode, lView) {\n if (parentTNode.type & (8 | 32)) {\n return getNativeByTNode(parentTNode, lView);\n }\n return null;\n}\nlet _getInsertInFrontOfRNodeWithI18n = getInsertInFrontOfRNodeWithNoI18n;\nlet _processI18nInsertBefore;\nfunction setI18nHandling(getInsertInFrontOfRNodeWithI18n, processI18nInsertBefore) {\n _getInsertInFrontOfRNodeWithI18n = getInsertInFrontOfRNodeWithI18n;\n _processI18nInsertBefore = processI18nInsertBefore;\n}\nfunction appendChild(tView, lView, childRNode, childTNode) {\n const parentRNode = getParentRElement(tView, childTNode, lView);\n const renderer = lView[RENDERER];\n const parentTNode = childTNode.parent || lView[T_HOST];\n const anchorNode = getInsertInFrontOfRNode(parentTNode, childTNode, lView);\n if (parentRNode != null) {\n if (Array.isArray(childRNode)) {\n for (let i = 0; i < childRNode.length; i++) {\n nativeAppendOrInsertBefore(renderer, parentRNode, childRNode[i], anchorNode, false);\n }\n } else {\n nativeAppendOrInsertBefore(renderer, parentRNode, childRNode, anchorNode, false);\n }\n }\n _processI18nInsertBefore !== undefined && _processI18nInsertBefore(renderer, childTNode, lView, childRNode, parentRNode);\n}\nfunction getFirstNativeNode(lView, tNode) {\n if (tNode !== null) {\n ngDevMode && assertTNodeType(tNode, 3 | 12 | 32 | 16 | 128);\n const tNodeType = tNode.type;\n if (tNodeType & 3) {\n return getNativeByTNode(tNode, lView);\n } else if (tNodeType & 4) {\n return getBeforeNodeForView(-1, lView[tNode.index]);\n } else if (tNodeType & 8) {\n const elIcuContainerChild = tNode.child;\n if (elIcuContainerChild !== null) {\n return getFirstNativeNode(lView, elIcuContainerChild);\n } else {\n const rNodeOrLContainer = lView[tNode.index];\n if (isLContainer(rNodeOrLContainer)) {\n return getBeforeNodeForView(-1, rNodeOrLContainer);\n } else {\n return unwrapRNode(rNodeOrLContainer);\n }\n }\n } else if (tNodeType & 128) {\n return getFirstNativeNode(lView, tNode.next);\n } else if (tNodeType & 32) {\n let nextRNode = icuContainerIterate(tNode, lView);\n let rNode = nextRNode();\n return rNode || unwrapRNode(lView[tNode.index]);\n } else {\n const projectionNodes = getProjectionNodes(lView, tNode);\n if (projectionNodes !== null) {\n if (Array.isArray(projectionNodes)) {\n return projectionNodes[0];\n }\n const parentView = getLViewParent(lView[DECLARATION_COMPONENT_VIEW]);\n ngDevMode && assertParentView(parentView);\n return getFirstNativeNode(parentView, projectionNodes);\n } else {\n return getFirstNativeNode(lView, tNode.next);\n }\n }\n }\n return null;\n}\nfunction getProjectionNodes(lView, tNode) {\n if (tNode !== null) {\n const componentView = lView[DECLARATION_COMPONENT_VIEW];\n const componentHost = componentView[T_HOST];\n const slotIdx = tNode.projection;\n ngDevMode && assertProjectionSlots(lView);\n return componentHost.projection[slotIdx];\n }\n return null;\n}\nfunction getBeforeNodeForView(viewIndexInContainer, lContainer) {\n const nextViewIndex = CONTAINER_HEADER_OFFSET + viewIndexInContainer + 1;\n if (nextViewIndex < lContainer.length) {\n const lView = lContainer[nextViewIndex];\n const firstTNodeOfView = lView[TVIEW].firstChild;\n if (firstTNodeOfView !== null) {\n return getFirstNativeNode(lView, firstTNodeOfView);\n }\n }\n return lContainer[NATIVE];\n}\nfunction applyNodes(renderer, action, tNode, lView, parentRElement, beforeNode, isProjection) {\n while (tNode != null) {\n ngDevMode && assertTNodeForLView(tNode, lView);\n const injector = lView[INJECTOR];\n if (tNode.type === 128) {\n tNode = tNode.next;\n continue;\n }\n ngDevMode && assertTNodeType(tNode, 3 | 12 | 16 | 32);\n const rawSlotValue = lView[tNode.index];\n const tNodeType = tNode.type;\n if (isProjection) {\n if (action === 0) {\n rawSlotValue && attachPatchData(unwrapRNode(rawSlotValue), lView);\n tNode.flags |= 2;\n }\n }\n if (!isDetachedByI18n(tNode)) {\n if (tNodeType & 8) {\n applyNodes(renderer, action, tNode.child, lView, parentRElement, beforeNode, false);\n applyToElementOrContainer(action, renderer, injector, parentRElement, rawSlotValue, tNode, beforeNode, lView);\n } else if (tNodeType & 32) {\n const nextRNode = icuContainerIterate(tNode, lView);\n let rNode;\n while (rNode = nextRNode()) {\n applyToElementOrContainer(action, renderer, injector, parentRElement, rNode, tNode, beforeNode, lView);\n }\n applyToElementOrContainer(action, renderer, injector, parentRElement, rawSlotValue, tNode, beforeNode, lView);\n } else if (tNodeType & 16) {\n applyProjectionRecursive(renderer, action, lView, tNode, parentRElement, beforeNode);\n } else {\n ngDevMode && assertTNodeType(tNode, 3 | 4);\n applyToElementOrContainer(action, renderer, injector, parentRElement, rawSlotValue, tNode, beforeNode, lView);\n }\n }\n tNode = isProjection ? tNode.projectionNext : tNode.next;\n }\n}\nfunction applyView(tView, lView, renderer, action, parentRElement, beforeNode) {\n applyNodes(renderer, action, tView.firstChild, lView, parentRElement, beforeNode, false);\n}\nfunction applyProjection(tView, lView, tProjectionNode) {\n const renderer = lView[RENDERER];\n const parentRNode = getParentRElement(tView, tProjectionNode, lView);\n const parentTNode = tProjectionNode.parent || lView[T_HOST];\n let beforeNode = getInsertInFrontOfRNode(parentTNode, tProjectionNode, lView);\n applyProjectionRecursive(renderer, 0, lView, tProjectionNode, parentRNode, beforeNode);\n}\nfunction applyProjectionRecursive(renderer, action, lView, tProjectionNode, parentRElement, beforeNode) {\n const componentLView = lView[DECLARATION_COMPONENT_VIEW];\n const componentNode = componentLView[T_HOST];\n ngDevMode && assertEqual(typeof tProjectionNode.projection, 'number', 'expecting projection index');\n const nodeToProjectOrRNodes = componentNode.projection[tProjectionNode.projection];\n if (Array.isArray(nodeToProjectOrRNodes)) {\n for (let i = 0; i < nodeToProjectOrRNodes.length; i++) {\n const rNode = nodeToProjectOrRNodes[i];\n applyToElementOrContainer(action, renderer, lView[INJECTOR], parentRElement, rNode, tProjectionNode, beforeNode, lView);\n }\n } else {\n let nodeToProject = nodeToProjectOrRNodes;\n const projectedComponentLView = componentLView[PARENT];\n if (hasInSkipHydrationBlockFlag(tProjectionNode)) {\n nodeToProject.flags |= 128;\n }\n applyNodes(renderer, action, nodeToProject, projectedComponentLView, parentRElement, beforeNode, true);\n }\n}\nfunction applyContainer(renderer, action, injector, lContainer, tNode, parentRElement, beforeNode) {\n ngDevMode && assertLContainer(lContainer);\n const anchor = lContainer[NATIVE];\n const native = unwrapRNode(lContainer);\n if (anchor !== native) {\n applyToElementOrContainer(action, renderer, injector, parentRElement, anchor, tNode, beforeNode);\n }\n for (let i = CONTAINER_HEADER_OFFSET; i < lContainer.length; i++) {\n const lView = lContainer[i];\n applyView(lView[TVIEW], lView, renderer, action, parentRElement, anchor);\n }\n}\nfunction applyStyling(renderer, isClassBased, rNode, prop, value) {\n if (isClassBased) {\n if (!value) {\n renderer.removeClass(rNode, prop);\n } else {\n renderer.addClass(rNode, prop);\n }\n } else {\n let flags = prop.indexOf('-') === -1 ? undefined : RendererStyleFlags2.DashCase;\n if (value == null) {\n renderer.removeStyle(rNode, prop, flags);\n } else {\n const isImportant = typeof value === 'string' ? value.endsWith('!important') : false;\n if (isImportant) {\n value = value.slice(0, -10);\n flags |= RendererStyleFlags2.Important;\n }\n renderer.setStyle(rNode, prop, value, flags);\n }\n }\n}\nfunction executeTemplate(tView, lView, templateFn, rf, context) {\n const prevSelectedIndex = getSelectedIndex();\n const isUpdatePhase = rf & 2;\n try {\n setSelectedIndex(-1);\n if (isUpdatePhase && lView.length > HEADER_OFFSET) {\n selectIndexInternal(tView, lView, HEADER_OFFSET, !!ngDevMode && isInCheckNoChangesMode());\n }\n const preHookType = isUpdatePhase ? ProfilerEvent.TemplateUpdateStart : ProfilerEvent.TemplateCreateStart;\n profiler(preHookType, context, templateFn);\n templateFn(rf, context);\n } finally {\n setSelectedIndex(prevSelectedIndex);\n const postHookType = isUpdatePhase ? ProfilerEvent.TemplateUpdateEnd : ProfilerEvent.TemplateCreateEnd;\n profiler(postHookType, context, templateFn);\n }\n}\nfunction createDirectivesInstances(tView, lView, tNode) {\n instantiateAllDirectives(tView, lView, tNode);\n if ((tNode.flags & 64) === 64) {\n invokeDirectivesHostBindings(tView, lView, tNode);\n }\n}\nfunction saveResolvedLocalsInData(viewData, tNode, localRefExtractor = getNativeByTNode) {\n const localNames = tNode.localNames;\n if (localNames !== null) {\n let localIndex = tNode.index + 1;\n for (let i = 0; i < localNames.length; i += 2) {\n const index = localNames[i + 1];\n const value = index === -1 ? localRefExtractor(tNode, viewData) : viewData[index];\n viewData[localIndex++] = value;\n }\n }\n}\nfunction locateHostElement(renderer, elementOrSelector, encapsulation, injector) {\n const preserveHostContent = injector.get(PRESERVE_HOST_CONTENT, PRESERVE_HOST_CONTENT_DEFAULT);\n const preserveContent = preserveHostContent || encapsulation === ViewEncapsulation.ShadowDom || encapsulation === ViewEncapsulation.ExperimentalIsolatedShadowDom;\n const rootElement = renderer.selectRootElement(elementOrSelector, preserveContent);\n applyRootElementTransform(rootElement);\n return rootElement;\n}\nfunction applyRootElementTransform(rootElement) {\n _applyRootElementTransformImpl(rootElement);\n}\nlet _applyRootElementTransformImpl = () => null;\nfunction applyRootElementTransformImpl(rootElement) {\n if (hasSkipHydrationAttrOnRElement(rootElement)) {\n clearElementContents(rootElement);\n } else {\n processTextNodeMarkersBeforeHydration(rootElement);\n }\n}\nfunction enableApplyRootElementTransformImpl() {\n _applyRootElementTransformImpl = applyRootElementTransformImpl;\n}\nfunction mapPropName(name) {\n if (name === 'class') return 'className';\n if (name === 'for') return 'htmlFor';\n if (name === 'formaction') return 'formAction';\n if (name === 'innerHtml') return 'innerHTML';\n if (name === 'readonly') return 'readOnly';\n if (name === 'tabindex') return 'tabIndex';\n return name;\n}\nfunction setPropertyAndInputs(tNode, lView, propName, value, renderer, sanitizer) {\n ngDevMode && assertNotSame(value, NO_CHANGE, 'Incoming value should never be NO_CHANGE.');\n const tView = lView[TVIEW];\n const hasSetInput = setAllInputsForProperty(tNode, tView, lView, propName, value);\n if (hasSetInput) {\n isComponentHost(tNode) && markDirtyIfOnPush(lView, tNode.index);\n ngDevMode && setNgReflectProperties(lView, tView, tNode, propName, value);\n return;\n }\n if (tNode.type & 3) {\n propName = mapPropName(propName);\n }\n setDomProperty(tNode, lView, propName, value, renderer, sanitizer);\n}\nfunction setDomProperty(tNode, lView, propName, value, renderer, sanitizer) {\n if (tNode.type & 3) {\n const element = getNativeByTNode(tNode, lView);\n if (ngDevMode) {\n validateAgainstEventProperties(propName);\n if (!isPropertyValid(element, propName, tNode.value, lView[TVIEW].schemas)) {\n handleUnknownPropertyError(propName, tNode.value, tNode.type, lView);\n }\n }\n value = sanitizer != null ? sanitizer(value, tNode.value || '', propName) : value;\n renderer.setProperty(element, propName, value);\n } else if (tNode.type & 12) {\n if (ngDevMode && !matchingSchemas(lView[TVIEW].schemas, tNode.value)) {\n handleUnknownPropertyError(propName, tNode.value, tNode.type, lView);\n }\n }\n}\nfunction markDirtyIfOnPush(lView, viewIndex) {\n ngDevMode && assertLView(lView);\n const childComponentLView = getComponentLViewByIndex(viewIndex, lView);\n if (!(childComponentLView[FLAGS] & 16)) {\n childComponentLView[FLAGS] |= 64;\n }\n}\nfunction setNgReflectProperty(lView, tNode, attrName, value) {\n const environment = lView[ENVIRONMENT];\n if (!environment.ngReflect) {\n return;\n }\n const element = getNativeByTNode(tNode, lView);\n const renderer = lView[RENDERER];\n attrName = normalizeDebugBindingName(attrName);\n const debugValue = normalizeDebugBindingValue(value);\n if (tNode.type & 3) {\n if (value == null) {\n renderer.removeAttribute(element, attrName);\n } else {\n renderer.setAttribute(element, attrName, debugValue);\n }\n } else {\n const textContent = escapeCommentText(`bindings=${JSON.stringify({\n [attrName]: debugValue\n }, null, 2)}`);\n renderer.setValue(element, textContent);\n }\n}\nfunction setNgReflectProperties(lView, tView, tNode, publicName, value) {\n const environment = lView[ENVIRONMENT];\n if (!environment.ngReflect || !(tNode.type & (3 | 4))) {\n return;\n }\n const inputConfig = tNode.inputs?.[publicName];\n const hostInputConfig = tNode.hostDirectiveInputs?.[publicName];\n if (hostInputConfig) {\n for (let i = 0; i < hostInputConfig.length; i += 2) {\n const index = hostInputConfig[i];\n const publicName = hostInputConfig[i + 1];\n const def = tView.data[index];\n setNgReflectProperty(lView, tNode, def.inputs[publicName][0], value);\n }\n }\n if (inputConfig) {\n for (const index of inputConfig) {\n const def = tView.data[index];\n setNgReflectProperty(lView, tNode, def.inputs[publicName][0], value);\n }\n }\n}\nfunction instantiateAllDirectives(tView, lView, tNode) {\n const start = tNode.directiveStart;\n const end = tNode.directiveEnd;\n if (isComponentHost(tNode)) {\n ngDevMode && assertTNodeType(tNode, 3);\n createComponentLView(lView, tNode, tView.data[start + tNode.componentOffset]);\n }\n if (!tView.firstCreatePass) {\n getOrCreateNodeInjectorForNode(tNode, lView);\n }\n const initialInputs = tNode.initialInputs;\n for (let i = start; i < end; i++) {\n const def = tView.data[i];\n const directive = getNodeInjectable(lView, tView, i, tNode);\n attachPatchData(directive, lView);\n if (initialInputs !== null) {\n setInputsFromAttrs(lView, i - start, directive, def, tNode, initialInputs);\n }\n if (isComponentDef(def)) {\n const componentView = getComponentLViewByIndex(tNode.index, lView);\n componentView[CONTEXT] = getNodeInjectable(lView, tView, i, tNode);\n }\n }\n}\nfunction invokeDirectivesHostBindings(tView, lView, tNode) {\n const start = tNode.directiveStart;\n const end = tNode.directiveEnd;\n const elementIndex = tNode.index;\n const currentDirectiveIndex = getCurrentDirectiveIndex();\n try {\n setSelectedIndex(elementIndex);\n for (let dirIndex = start; dirIndex < end; dirIndex++) {\n const def = tView.data[dirIndex];\n const directive = lView[dirIndex];\n setCurrentDirectiveIndex(dirIndex);\n if (def.hostBindings !== null || def.hostVars !== 0 || def.hostAttrs !== null) {\n invokeHostBindingsInCreationMode(def, directive);\n }\n }\n } finally {\n setSelectedIndex(-1);\n setCurrentDirectiveIndex(currentDirectiveIndex);\n }\n}\nfunction invokeHostBindingsInCreationMode(def, directive) {\n if (def.hostBindings !== null) {\n def.hostBindings(1, directive);\n }\n}\nfunction findDirectiveDefMatches(tView, tNode) {\n ngDevMode && assertFirstCreatePass(tView);\n ngDevMode && assertTNodeType(tNode, 3 | 12);\n const registry = tView.directiveRegistry;\n let matches = null;\n if (registry) {\n for (let i = 0; i < registry.length; i++) {\n const def = registry[i];\n if (isNodeMatchingSelectorList(tNode, def.selectors, false)) {\n matches ??= [];\n if (isComponentDef(def)) {\n if (ngDevMode) {\n assertTNodeType(tNode, 2, `\"${tNode.value}\" tags cannot be used as component hosts. ` + `Please use a different tag to activate the ${stringify(def.type)} component.`);\n if (matches.length && isComponentDef(matches[0])) {\n throwMultipleComponentError(tNode, matches.find(isComponentDef).type, def.type);\n }\n }\n matches.unshift(def);\n } else {\n matches.push(def);\n }\n }\n }\n }\n return matches;\n}\nfunction elementAttributeInternal(tNode, lView, name, value, sanitizer, namespace) {\n if (ngDevMode) {\n assertNotSame(value, NO_CHANGE, 'Incoming value should never be NO_CHANGE.');\n validateAgainstEventAttributes(name);\n assertTNodeType(tNode, 2, `Attempted to set attribute \\`${name}\\` on a container node. ` + `Host bindings are not valid on ng-container or ng-template.`);\n }\n const element = getNativeByTNode(tNode, lView);\n setElementAttribute(lView[RENDERER], element, namespace, tNode.value, name, value, sanitizer);\n}\nfunction setElementAttribute(renderer, element, namespace, tagName, name, value, sanitizer) {\n if (value == null) {\n renderer.removeAttribute(element, name, namespace);\n } else {\n const strValue = sanitizer == null ? renderStringify(value) : sanitizer(value, tagName || '', name);\n renderer.setAttribute(element, name, strValue, namespace);\n }\n}\nfunction setInputsFromAttrs(lView, directiveIndex, instance, def, tNode, initialInputData) {\n const initialInputs = initialInputData[directiveIndex];\n if (initialInputs !== null) {\n for (let i = 0; i < initialInputs.length; i += 2) {\n const lookupName = initialInputs[i];\n const value = initialInputs[i + 1];\n writeToDirectiveInput(def, instance, lookupName, value);\n if (ngDevMode) {\n setNgReflectProperty(lView, tNode, def.inputs[lookupName][0], value);\n }\n }\n }\n}\nfunction elementLikeStartShared(tNode, lView, index, name, locateOrCreateNativeNode) {\n const adjustedIndex = HEADER_OFFSET + index;\n const tView = lView[TVIEW];\n const native = locateOrCreateNativeNode(tView, lView, tNode, name, index);\n lView[adjustedIndex] = native;\n setCurrentTNode(tNode, true);\n const isElement = tNode.type === 2;\n if (isElement) {\n setupStaticAttributes(lView[RENDERER], native, tNode);\n if (getElementDepthCount() === 0 || isDirectiveHost(tNode)) {\n attachPatchData(native, lView);\n }\n increaseElementDepthCount();\n } else {\n attachPatchData(native, lView);\n }\n if (wasLastNodeCreated() && (!isElement || !isDetachedByI18n(tNode))) {\n appendChild(tView, lView, native, tNode);\n }\n return tNode;\n}\nfunction elementLikeEndShared(tNode) {\n let currentTNode = tNode;\n if (isCurrentTNodeParent()) {\n setCurrentTNodeAsNotParent();\n } else {\n ngDevMode && assertHasParent(getCurrentTNode());\n currentTNode = currentTNode.parent;\n setCurrentTNode(currentTNode, false);\n }\n return currentTNode;\n}\nfunction storePropertyBindingMetadata(tData, tNode, propertyName, bindingIndex, ...interpolationParts) {\n if (tData[bindingIndex] === null) {\n if (!tNode.inputs?.[propertyName] && !tNode.hostDirectiveInputs?.[propertyName]) {\n const propBindingIdxs = tNode.propertyBindings || (tNode.propertyBindings = []);\n propBindingIdxs.push(bindingIndex);\n let bindingMetadata = propertyName;\n if (interpolationParts.length > 0) {\n bindingMetadata += INTERPOLATION_DELIMITER + interpolationParts.join(INTERPOLATION_DELIMITER);\n }\n tData[bindingIndex] = bindingMetadata;\n }\n }\n}\nfunction loadComponentRenderer(currentDef, tNode, lView) {\n if (currentDef === null || isComponentDef(currentDef)) {\n lView = unwrapLView(lView[tNode.index]);\n }\n return lView[RENDERER];\n}\nfunction handleUncaughtError(lView, error) {\n const injector = lView[INJECTOR];\n if (!injector) {\n return;\n }\n let errorHandler;\n try {\n errorHandler = injector.get(INTERNAL_APPLICATION_ERROR_HANDLER, null);\n } catch {\n errorHandler = null;\n }\n errorHandler?.(error);\n}\nfunction setAllInputsForProperty(tNode, tView, lView, publicName, value) {\n const inputs = tNode.inputs?.[publicName];\n const hostDirectiveInputs = tNode.hostDirectiveInputs?.[publicName];\n let hasMatch = false;\n if (hostDirectiveInputs) {\n for (let i = 0; i < hostDirectiveInputs.length; i += 2) {\n const index = hostDirectiveInputs[i];\n ngDevMode && assertIndexInRange(lView, index);\n const publicName = hostDirectiveInputs[i + 1];\n const def = tView.data[index];\n writeToDirectiveInput(def, lView[index], publicName, value);\n hasMatch = true;\n }\n }\n if (inputs) {\n for (const index of inputs) {\n ngDevMode && assertIndexInRange(lView, index);\n const instance = lView[index];\n const def = tView.data[index];\n writeToDirectiveInput(def, instance, publicName, value);\n hasMatch = true;\n }\n }\n return hasMatch;\n}\nfunction setDirectiveInput(tNode, tView, lView, target, publicName, value) {\n let hostIndex = null;\n let hostDirectivesStart = null;\n let hostDirectivesEnd = null;\n let hasSet = false;\n if (ngDevMode && !tNode.directiveToIndex?.has(target.type)) {\n throw new Error(`Node does not have a directive with type ${target.type.name}`);\n }\n const data = tNode.directiveToIndex.get(target.type);\n if (typeof data === 'number') {\n hostIndex = data;\n } else {\n [hostIndex, hostDirectivesStart, hostDirectivesEnd] = data;\n }\n if (hostDirectivesStart !== null && hostDirectivesEnd !== null && tNode.hostDirectiveInputs?.hasOwnProperty(publicName)) {\n const hostDirectiveInputs = tNode.hostDirectiveInputs[publicName];\n for (let i = 0; i < hostDirectiveInputs.length; i += 2) {\n const index = hostDirectiveInputs[i];\n if (index >= hostDirectivesStart && index <= hostDirectivesEnd) {\n ngDevMode && assertIndexInRange(lView, index);\n const def = tView.data[index];\n const hostDirectivePublicName = hostDirectiveInputs[i + 1];\n writeToDirectiveInput(def, lView[index], hostDirectivePublicName, value);\n hasSet = true;\n } else if (index > hostDirectivesEnd) {\n break;\n }\n }\n }\n if (hostIndex !== null && target.inputs.hasOwnProperty(publicName)) {\n ngDevMode && assertIndexInRange(lView, hostIndex);\n writeToDirectiveInput(target, lView[hostIndex], publicName, value);\n hasSet = true;\n }\n return hasSet;\n}\nfunction renderComponent(hostLView, componentHostIdx) {\n ngDevMode && assertEqual(isCreationMode(hostLView), true, 'Should be run in creation mode');\n const componentView = getComponentLViewByIndex(componentHostIdx, hostLView);\n const componentTView = componentView[TVIEW];\n syncViewWithBlueprint(componentTView, componentView);\n const hostRNode = componentView[HOST];\n if (hostRNode !== null && componentView[HYDRATION] === null) {\n componentView[HYDRATION] = retrieveHydrationInfo(hostRNode, componentView[INJECTOR]);\n }\n profiler(ProfilerEvent.ComponentStart);\n try {\n renderView(componentTView, componentView, componentView[CONTEXT]);\n } finally {\n profiler(ProfilerEvent.ComponentEnd, componentView[CONTEXT]);\n }\n}\nfunction syncViewWithBlueprint(tView, lView) {\n for (let i = lView.length; i < tView.blueprint.length; i++) {\n lView.push(tView.blueprint[i]);\n }\n}\nfunction renderView(tView, lView, context) {\n ngDevMode && assertEqual(isCreationMode(lView), true, 'Should be run in creation mode');\n ngDevMode && assertNotReactive(renderView.name);\n enterView(lView);\n try {\n const viewQuery = tView.viewQuery;\n if (viewQuery !== null) {\n executeViewQueryFn(1, viewQuery, context);\n }\n const templateFn = tView.template;\n if (templateFn !== null) {\n executeTemplate(tView, lView, templateFn, 1, context);\n }\n if (tView.firstCreatePass) {\n tView.firstCreatePass = false;\n }\n lView[QUERIES]?.finishViewCreation(tView);\n if (tView.staticContentQueries) {\n refreshContentQueries(tView, lView);\n }\n if (tView.staticViewQueries) {\n executeViewQueryFn(2, tView.viewQuery, context);\n }\n const components = tView.components;\n if (components !== null) {\n renderChildComponents(lView, components);\n }\n } catch (error) {\n if (tView.firstCreatePass) {\n tView.incompleteFirstPass = true;\n tView.firstCreatePass = false;\n }\n throw error;\n } finally {\n lView[FLAGS] &= ~4;\n leaveView();\n }\n}\nfunction renderChildComponents(hostLView, components) {\n for (let i = 0; i < components.length; i++) {\n renderComponent(hostLView, components[i]);\n }\n}\nfunction createAndRenderEmbeddedLView(declarationLView, templateTNode, context, options) {\n const prevConsumer = setActiveConsumer(null);\n try {\n const embeddedTView = templateTNode.tView;\n ngDevMode && assertDefined(embeddedTView, 'TView must be defined for a template node.');\n ngDevMode && assertTNodeForLView(templateTNode, declarationLView);\n const isSignalView = declarationLView[FLAGS] & 4096;\n const viewFlags = isSignalView ? 4096 : 16;\n const embeddedLView = createLView(declarationLView, embeddedTView, context, viewFlags, null, templateTNode, null, null, options?.injector ?? null, options?.embeddedViewInjector ?? null, options?.dehydratedView ?? null);\n const declarationLContainer = declarationLView[templateTNode.index];\n ngDevMode && assertLContainer(declarationLContainer);\n embeddedLView[DECLARATION_LCONTAINER] = declarationLContainer;\n const declarationViewLQueries = declarationLView[QUERIES];\n if (declarationViewLQueries !== null) {\n embeddedLView[QUERIES] = declarationViewLQueries.createEmbeddedView(embeddedTView);\n }\n renderView(embeddedTView, embeddedLView, context);\n return embeddedLView;\n } finally {\n setActiveConsumer(prevConsumer);\n }\n}\nfunction shouldAddViewToDom(tNode, dehydratedView) {\n return !dehydratedView || dehydratedView.firstChild === null || hasInSkipHydrationBlockFlag(tNode);\n}\nconst USE_EXHAUSTIVE_CHECK_NO_CHANGES_DEFAULT = false;\nconst UseExhaustiveCheckNoChanges = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'exhaustive checkNoChanges' : '');\nfunction collectNativeNodes(tView, lView, tNode, result, isProjection = false) {\n while (tNode !== null) {\n if (tNode.type === 128) {\n tNode = isProjection ? tNode.projectionNext : tNode.next;\n continue;\n }\n ngDevMode && assertTNodeType(tNode, 3 | 12 | 16 | 32);\n const lNode = lView[tNode.index];\n if (lNode !== null) {\n result.push(unwrapRNode(lNode));\n }\n if (isLContainer(lNode)) {\n collectNativeNodesInLContainer(lNode, result);\n }\n const tNodeType = tNode.type;\n if (tNodeType & 8) {\n collectNativeNodes(tView, lView, tNode.child, result);\n } else if (tNodeType & 32) {\n const nextRNode = icuContainerIterate(tNode, lView);\n let rNode;\n while (rNode = nextRNode()) {\n result.push(rNode);\n }\n } else if (tNodeType & 16) {\n const nodesInSlot = getProjectionNodes(lView, tNode);\n if (Array.isArray(nodesInSlot)) {\n result.push(...nodesInSlot);\n } else {\n const parentView = getLViewParent(lView[DECLARATION_COMPONENT_VIEW]);\n ngDevMode && assertParentView(parentView);\n collectNativeNodes(parentView[TVIEW], parentView, nodesInSlot, result, true);\n }\n }\n tNode = isProjection ? tNode.projectionNext : tNode.next;\n }\n return result;\n}\nfunction collectNativeNodesInLContainer(lContainer, result) {\n for (let i = CONTAINER_HEADER_OFFSET; i < lContainer.length; i++) {\n const lViewInAContainer = lContainer[i];\n const lViewFirstChildTNode = lViewInAContainer[TVIEW].firstChild;\n if (lViewFirstChildTNode !== null) {\n collectNativeNodes(lViewInAContainer[TVIEW], lViewInAContainer, lViewFirstChildTNode, result);\n }\n }\n if (lContainer[NATIVE] !== lContainer[HOST]) {\n result.push(lContainer[NATIVE]);\n }\n}\nfunction addAfterRenderSequencesForView(lView) {\n if (lView[AFTER_RENDER_SEQUENCES_TO_ADD] !== null) {\n for (const sequence of lView[AFTER_RENDER_SEQUENCES_TO_ADD]) {\n sequence.impl.addSequence(sequence);\n }\n lView[AFTER_RENDER_SEQUENCES_TO_ADD].length = 0;\n }\n}\nlet freeConsumers = [];\nfunction getOrBorrowReactiveLViewConsumer(lView) {\n return lView[REACTIVE_TEMPLATE_CONSUMER] ?? borrowReactiveLViewConsumer(lView);\n}\nfunction borrowReactiveLViewConsumer(lView) {\n const consumer = freeConsumers.pop() ?? Object.create(REACTIVE_LVIEW_CONSUMER_NODE);\n consumer.lView = lView;\n return consumer;\n}\nfunction maybeReturnReactiveLViewConsumer(consumer) {\n if (consumer.lView[REACTIVE_TEMPLATE_CONSUMER] === consumer) {\n return;\n }\n consumer.lView = null;\n freeConsumers.push(consumer);\n}\nconst REACTIVE_LVIEW_CONSUMER_NODE = {\n ...REACTIVE_NODE,\n consumerIsAlwaysLive: true,\n kind: 'template',\n consumerMarkedDirty: node => {\n markAncestorsForTraversal(node.lView);\n },\n consumerOnSignalRead() {\n this.lView[REACTIVE_TEMPLATE_CONSUMER] = this;\n }\n};\nfunction getOrCreateTemporaryConsumer(lView) {\n const consumer = lView[REACTIVE_TEMPLATE_CONSUMER] ?? Object.create(TEMPORARY_CONSUMER_NODE);\n consumer.lView = lView;\n return consumer;\n}\nconst TEMPORARY_CONSUMER_NODE = {\n ...REACTIVE_NODE,\n consumerIsAlwaysLive: true,\n kind: 'template',\n consumerMarkedDirty: node => {\n let parent = getLViewParent(node.lView);\n while (parent && !viewShouldHaveReactiveConsumer(parent[TVIEW])) {\n parent = getLViewParent(parent);\n }\n if (!parent) {\n return;\n }\n markViewForRefresh(parent);\n },\n consumerOnSignalRead() {\n this.lView[REACTIVE_TEMPLATE_CONSUMER] = this;\n }\n};\nfunction viewShouldHaveReactiveConsumer(tView) {\n return tView.type !== 2;\n}\nfunction isReactiveLViewConsumer(node) {\n return node.kind === 'template';\n}\nfunction runEffectsInView(view) {\n if (view[EFFECTS] === null) {\n return;\n }\n let tryFlushEffects = true;\n while (tryFlushEffects) {\n let foundDirtyEffect = false;\n for (const effect of view[EFFECTS]) {\n if (!effect.dirty) {\n continue;\n }\n foundDirtyEffect = true;\n if (effect.zone === null || Zone.current === effect.zone) {\n effect.run();\n } else {\n effect.zone.run(() => effect.run());\n }\n }\n tryFlushEffects = foundDirtyEffect && !!(view[FLAGS] & 8192);\n }\n}\nconst MAXIMUM_REFRESH_RERUNS$1 = 100;\nfunction detectChangesInternal(lView, mode = 0) {\n const environment = lView[ENVIRONMENT];\n const rendererFactory = environment.rendererFactory;\n const checkNoChangesMode = !!ngDevMode && isInCheckNoChangesMode();\n if (!checkNoChangesMode) {\n rendererFactory.begin?.();\n }\n try {\n detectChangesInViewWhileDirty(lView, mode);\n } finally {\n if (!checkNoChangesMode) {\n rendererFactory.end?.();\n }\n }\n}\nfunction detectChangesInViewWhileDirty(lView, mode) {\n const lastIsRefreshingViewsValue = isRefreshingViews();\n try {\n setIsRefreshingViews(true);\n detectChangesInView(lView, mode);\n if (ngDevMode && isExhaustiveCheckNoChanges()) {\n return;\n }\n let retries = 0;\n while (requiresRefreshOrTraversal(lView)) {\n if (retries === MAXIMUM_REFRESH_RERUNS$1) {\n throw new RuntimeError(103, ngDevMode && 'Infinite change detection while trying to refresh views. ' + 'There may be components which each cause the other to require a refresh, ' + 'causing an infinite loop.');\n }\n retries++;\n detectChangesInView(lView, 1);\n }\n } finally {\n setIsRefreshingViews(lastIsRefreshingViewsValue);\n }\n}\nfunction checkNoChangesInternal(lView, exhaustive) {\n setIsInCheckNoChangesMode(exhaustive ? CheckNoChangesMode.Exhaustive : CheckNoChangesMode.OnlyDirtyViews);\n try {\n detectChangesInternal(lView);\n } finally {\n setIsInCheckNoChangesMode(CheckNoChangesMode.Off);\n }\n}\nfunction refreshView(tView, lView, templateFn, context) {\n ngDevMode && assertEqual(isCreationMode(lView), false, 'Should be run in update mode');\n if (isDestroyed(lView)) return;\n const flags = lView[FLAGS];\n const isInCheckNoChangesPass = ngDevMode && isInCheckNoChangesMode();\n const isInExhaustiveCheckNoChangesPass = ngDevMode && isExhaustiveCheckNoChanges();\n enterView(lView);\n let returnConsumerToPool = true;\n let prevConsumer = null;\n let currentConsumer = null;\n if (!isInCheckNoChangesPass) {\n if (viewShouldHaveReactiveConsumer(tView)) {\n currentConsumer = getOrBorrowReactiveLViewConsumer(lView);\n prevConsumer = consumerBeforeComputation(currentConsumer);\n } else if (getActiveConsumer() === null) {\n returnConsumerToPool = false;\n currentConsumer = getOrCreateTemporaryConsumer(lView);\n prevConsumer = consumerBeforeComputation(currentConsumer);\n } else if (lView[REACTIVE_TEMPLATE_CONSUMER]) {\n consumerDestroy(lView[REACTIVE_TEMPLATE_CONSUMER]);\n lView[REACTIVE_TEMPLATE_CONSUMER] = null;\n }\n }\n try {\n resetPreOrderHookFlags(lView);\n setBindingIndex(tView.bindingStartIndex);\n if (templateFn !== null) {\n executeTemplate(tView, lView, templateFn, 2, context);\n }\n const hooksInitPhaseCompleted = (flags & 3) === 3;\n if (!isInCheckNoChangesPass) {\n if (hooksInitPhaseCompleted) {\n const preOrderCheckHooks = tView.preOrderCheckHooks;\n if (preOrderCheckHooks !== null) {\n executeCheckHooks(lView, preOrderCheckHooks, null);\n }\n } else {\n const preOrderHooks = tView.preOrderHooks;\n if (preOrderHooks !== null) {\n executeInitAndCheckHooks(lView, preOrderHooks, 0, null);\n }\n incrementInitPhaseFlags(lView, 0);\n }\n }\n if (!isInExhaustiveCheckNoChangesPass) {\n markTransplantedViewsForRefresh(lView);\n }\n runEffectsInView(lView);\n detectChangesInEmbeddedViews(lView, 0);\n if (tView.contentQueries !== null) {\n refreshContentQueries(tView, lView);\n }\n if (!isInCheckNoChangesPass) {\n if (hooksInitPhaseCompleted) {\n const contentCheckHooks = tView.contentCheckHooks;\n if (contentCheckHooks !== null) {\n executeCheckHooks(lView, contentCheckHooks);\n }\n } else {\n const contentHooks = tView.contentHooks;\n if (contentHooks !== null) {\n executeInitAndCheckHooks(lView, contentHooks, 1);\n }\n incrementInitPhaseFlags(lView, 1);\n }\n }\n processHostBindingOpCodes(tView, lView);\n const components = tView.components;\n if (components !== null) {\n detectChangesInChildComponents(lView, components, 0);\n }\n const viewQuery = tView.viewQuery;\n if (viewQuery !== null) {\n executeViewQueryFn(2, viewQuery, context);\n }\n if (!isInCheckNoChangesPass) {\n if (hooksInitPhaseCompleted) {\n const viewCheckHooks = tView.viewCheckHooks;\n if (viewCheckHooks !== null) {\n executeCheckHooks(lView, viewCheckHooks);\n }\n } else {\n const viewHooks = tView.viewHooks;\n if (viewHooks !== null) {\n executeInitAndCheckHooks(lView, viewHooks, 2);\n }\n incrementInitPhaseFlags(lView, 2);\n }\n }\n if (tView.firstUpdatePass === true) {\n tView.firstUpdatePass = false;\n }\n if (lView[EFFECTS_TO_SCHEDULE]) {\n for (const notifyEffect of lView[EFFECTS_TO_SCHEDULE]) {\n notifyEffect();\n }\n lView[EFFECTS_TO_SCHEDULE] = null;\n }\n if (!isInCheckNoChangesPass) {\n addAfterRenderSequencesForView(lView);\n lView[FLAGS] &= ~(64 | 8);\n }\n } catch (e) {\n if (!isInCheckNoChangesPass) {\n markAncestorsForTraversal(lView);\n }\n throw e;\n } finally {\n if (currentConsumer !== null) {\n consumerAfterComputation(currentConsumer, prevConsumer);\n if (returnConsumerToPool) {\n maybeReturnReactiveLViewConsumer(currentConsumer);\n }\n }\n leaveView();\n }\n}\nfunction detectChangesInEmbeddedViews(lView, mode) {\n for (let lContainer = getFirstLContainer(lView); lContainer !== null; lContainer = getNextLContainer(lContainer)) {\n for (let i = CONTAINER_HEADER_OFFSET; i < lContainer.length; i++) {\n const embeddedLView = lContainer[i];\n detectChangesInViewIfAttached(embeddedLView, mode);\n }\n }\n}\nfunction markTransplantedViewsForRefresh(lView) {\n for (let lContainer = getFirstLContainer(lView); lContainer !== null; lContainer = getNextLContainer(lContainer)) {\n if (!(lContainer[FLAGS] & 2)) continue;\n const movedViews = lContainer[MOVED_VIEWS];\n ngDevMode && assertDefined(movedViews, 'Transplanted View flags set but missing MOVED_VIEWS');\n for (let i = 0; i < movedViews.length; i++) {\n const movedLView = movedViews[i];\n markViewForRefresh(movedLView);\n }\n }\n}\nfunction detectChangesInComponent(hostLView, componentHostIdx, mode) {\n ngDevMode && assertEqual(isCreationMode(hostLView), false, 'Should be run in update mode');\n profiler(ProfilerEvent.ComponentStart);\n const componentView = getComponentLViewByIndex(componentHostIdx, hostLView);\n try {\n detectChangesInViewIfAttached(componentView, mode);\n } finally {\n profiler(ProfilerEvent.ComponentEnd, componentView[CONTEXT]);\n }\n}\nfunction detectChangesInViewIfAttached(lView, mode) {\n if (!viewAttachedToChangeDetector(lView)) {\n return;\n }\n detectChangesInView(lView, mode);\n}\nfunction detectChangesInView(lView, mode) {\n const isInCheckNoChangesPass = ngDevMode && isInCheckNoChangesMode();\n const tView = lView[TVIEW];\n const flags = lView[FLAGS];\n const consumer = lView[REACTIVE_TEMPLATE_CONSUMER];\n let shouldRefreshView = !!(mode === 0 && flags & 16);\n shouldRefreshView ||= !!(flags & 64 && mode === 0 && !isInCheckNoChangesPass);\n shouldRefreshView ||= !!(flags & 1024);\n shouldRefreshView ||= !!(consumer?.dirty && consumerPollProducersForChange(consumer));\n shouldRefreshView ||= !!(ngDevMode && isExhaustiveCheckNoChanges());\n if (consumer) {\n consumer.dirty = false;\n }\n lView[FLAGS] &= ~(8192 | 1024);\n if (shouldRefreshView) {\n refreshView(tView, lView, tView.template, lView[CONTEXT]);\n } else if (flags & 8192) {\n const prevConsumer = setActiveConsumer(null);\n try {\n if (!isInCheckNoChangesPass) {\n runEffectsInView(lView);\n }\n detectChangesInEmbeddedViews(lView, 1);\n const components = tView.components;\n if (components !== null) {\n detectChangesInChildComponents(lView, components, 1);\n }\n if (!isInCheckNoChangesPass) {\n addAfterRenderSequencesForView(lView);\n }\n } finally {\n setActiveConsumer(prevConsumer);\n }\n }\n}\nfunction detectChangesInChildComponents(hostLView, components, mode) {\n for (let i = 0; i < components.length; i++) {\n detectChangesInComponent(hostLView, components[i], mode);\n }\n}\nfunction processHostBindingOpCodes(tView, lView) {\n const hostBindingOpCodes = tView.hostBindingOpCodes;\n if (hostBindingOpCodes === null) return;\n try {\n for (let i = 0; i < hostBindingOpCodes.length; i++) {\n const opCode = hostBindingOpCodes[i];\n if (opCode < 0) {\n setSelectedIndex(~opCode);\n } else {\n const directiveIdx = opCode;\n const bindingRootIndx = hostBindingOpCodes[++i];\n const hostBindingFn = hostBindingOpCodes[++i];\n setBindingRootForHostBindings(bindingRootIndx, directiveIdx);\n const context = lView[directiveIdx];\n profiler(ProfilerEvent.HostBindingsUpdateStart, context);\n try {\n hostBindingFn(2, context);\n } finally {\n profiler(ProfilerEvent.HostBindingsUpdateEnd, context);\n }\n }\n }\n } finally {\n setSelectedIndex(-1);\n }\n}\nfunction markViewDirty(lView, source) {\n const dirtyBitsToUse = isRefreshingViews() ? 64 : 1024 | 64;\n lView[ENVIRONMENT].changeDetectionScheduler?.notify(source);\n while (lView) {\n lView[FLAGS] |= dirtyBitsToUse;\n const parent = getLViewParent(lView);\n if (isRootView(lView) && !parent) {\n return lView;\n }\n lView = parent;\n }\n return null;\n}\nfunction createLContainer(hostNative, currentView, native, tNode) {\n ngDevMode && assertLView(currentView);\n const lContainer = [hostNative, true, 0, currentView, null, tNode, null, native, null, null];\n ngDevMode && assertEqual(lContainer.length, CONTAINER_HEADER_OFFSET, 'Should allocate correct number of slots for LContainer header.');\n return lContainer;\n}\nfunction getLViewFromLContainer(lContainer, index) {\n const adjustedIndex = CONTAINER_HEADER_OFFSET + index;\n if (adjustedIndex < lContainer.length) {\n const lView = lContainer[adjustedIndex];\n ngDevMode && assertLView(lView);\n return lView;\n }\n return undefined;\n}\nfunction addLViewToLContainer(lContainer, lView, index, addToDOM = true) {\n const tView = lView[TVIEW];\n insertView(tView, lView, lContainer, index);\n if (addToDOM) {\n const beforeNode = getBeforeNodeForView(index, lContainer);\n const renderer = lView[RENDERER];\n const parentRNode = renderer.parentNode(lContainer[NATIVE]);\n if (parentRNode !== null) {\n addViewToDOM(tView, lContainer[T_HOST], renderer, lView, parentRNode, beforeNode);\n }\n }\n const hydrationInfo = lView[HYDRATION];\n if (hydrationInfo !== null && hydrationInfo.firstChild !== null) {\n hydrationInfo.firstChild = null;\n }\n}\nfunction removeLViewFromLContainer(lContainer, index) {\n const lView = detachView(lContainer, index);\n if (lView !== undefined) {\n destroyLView(lView[TVIEW], lView);\n }\n return lView;\n}\nfunction detachView(lContainer, removeIndex) {\n if (lContainer.length <= CONTAINER_HEADER_OFFSET) return;\n const indexInContainer = CONTAINER_HEADER_OFFSET + removeIndex;\n const viewToDetach = lContainer[indexInContainer];\n if (viewToDetach) {\n const declarationLContainer = viewToDetach[DECLARATION_LCONTAINER];\n if (declarationLContainer !== null && declarationLContainer !== lContainer) {\n detachMovedView(declarationLContainer, viewToDetach);\n }\n if (removeIndex > 0) {\n lContainer[indexInContainer - 1][NEXT] = viewToDetach[NEXT];\n }\n const removedLView = removeFromArray(lContainer, CONTAINER_HEADER_OFFSET + removeIndex);\n removeViewFromDOM(viewToDetach[TVIEW], viewToDetach);\n const lQueries = removedLView[QUERIES];\n if (lQueries !== null) {\n lQueries.detachView(removedLView[TVIEW]);\n }\n viewToDetach[PARENT] = null;\n viewToDetach[NEXT] = null;\n viewToDetach[FLAGS] &= ~128;\n }\n return viewToDetach;\n}\nfunction insertView(tView, lView, lContainer, index) {\n ngDevMode && assertLView(lView);\n ngDevMode && assertLContainer(lContainer);\n const indexInContainer = CONTAINER_HEADER_OFFSET + index;\n const containerLength = lContainer.length;\n if (index > 0) {\n lContainer[indexInContainer - 1][NEXT] = lView;\n }\n if (index < containerLength - CONTAINER_HEADER_OFFSET) {\n lView[NEXT] = lContainer[indexInContainer];\n addToArray(lContainer, CONTAINER_HEADER_OFFSET + index, lView);\n } else {\n lContainer.push(lView);\n lView[NEXT] = null;\n }\n lView[PARENT] = lContainer;\n const declarationLContainer = lView[DECLARATION_LCONTAINER];\n if (declarationLContainer !== null && lContainer !== declarationLContainer) {\n trackMovedView(declarationLContainer, lView);\n }\n const lQueries = lView[QUERIES];\n if (lQueries !== null) {\n lQueries.insertView(tView);\n }\n updateAncestorTraversalFlagsOnAttach(lView);\n lView[FLAGS] |= 128;\n}\nfunction trackMovedView(declarationContainer, lView) {\n ngDevMode && assertDefined(lView, 'LView required');\n ngDevMode && assertLContainer(declarationContainer);\n const movedViews = declarationContainer[MOVED_VIEWS];\n const parent = lView[PARENT];\n ngDevMode && assertDefined(parent, 'missing parent');\n if (isLView(parent)) {\n declarationContainer[FLAGS] |= 2;\n } else {\n const insertedComponentLView = parent[PARENT][DECLARATION_COMPONENT_VIEW];\n ngDevMode && assertDefined(insertedComponentLView, 'Missing insertedComponentLView');\n const declaredComponentLView = lView[DECLARATION_COMPONENT_VIEW];\n ngDevMode && assertDefined(declaredComponentLView, 'Missing declaredComponentLView');\n if (declaredComponentLView !== insertedComponentLView) {\n declarationContainer[FLAGS] |= 2;\n }\n }\n if (movedViews === null) {\n declarationContainer[MOVED_VIEWS] = [lView];\n } else {\n movedViews.push(lView);\n }\n}\nclass ViewRef {\n _lView;\n _cdRefInjectingView;\n _appRef = null;\n _attachedToViewContainer = false;\n exhaustive;\n get rootNodes() {\n const lView = this._lView;\n const tView = lView[TVIEW];\n return collectNativeNodes(tView, lView, tView.firstChild, []);\n }\n constructor(_lView, _cdRefInjectingView) {\n this._lView = _lView;\n this._cdRefInjectingView = _cdRefInjectingView;\n }\n get context() {\n return this._lView[CONTEXT];\n }\n set context(value) {\n if (ngDevMode) {\n console.warn('Angular: Replacing the `context` object of an `EmbeddedViewRef` is deprecated.');\n }\n this._lView[CONTEXT] = value;\n }\n get destroyed() {\n return isDestroyed(this._lView);\n }\n destroy() {\n if (this._appRef) {\n this._appRef.detachView(this);\n } else if (this._attachedToViewContainer) {\n const parent = this._lView[PARENT];\n if (isLContainer(parent)) {\n const viewRefs = parent[VIEW_REFS];\n const index = viewRefs ? viewRefs.indexOf(this) : -1;\n if (index > -1) {\n ngDevMode && assertEqual(index, parent.indexOf(this._lView) - CONTAINER_HEADER_OFFSET, 'An attached view should be in the same position within its container as its ViewRef in the VIEW_REFS array.');\n detachView(parent, index);\n removeFromArray(viewRefs, index);\n }\n }\n this._attachedToViewContainer = false;\n }\n destroyLView(this._lView[TVIEW], this._lView);\n }\n onDestroy(callback) {\n storeLViewOnDestroy(this._lView, callback);\n }\n markForCheck() {\n markViewDirty(this._cdRefInjectingView || this._lView, 4);\n }\n detach() {\n this._lView[FLAGS] &= ~128;\n }\n reattach() {\n updateAncestorTraversalFlagsOnAttach(this._lView);\n this._lView[FLAGS] |= 128;\n }\n detectChanges() {\n this._lView[FLAGS] |= 1024;\n detectChangesInternal(this._lView);\n }\n checkNoChanges() {\n if (ngDevMode) {\n try {\n this.exhaustive ??= this._lView[INJECTOR].get(UseExhaustiveCheckNoChanges, USE_EXHAUSTIVE_CHECK_NO_CHANGES_DEFAULT);\n } catch {\n this.exhaustive = USE_EXHAUSTIVE_CHECK_NO_CHANGES_DEFAULT;\n }\n checkNoChangesInternal(this._lView, this.exhaustive);\n }\n }\n attachToViewContainerRef() {\n if (this._appRef) {\n throw new RuntimeError(902, ngDevMode && 'This view is already attached directly to the ApplicationRef!');\n }\n this._attachedToViewContainer = true;\n }\n detachFromAppRef() {\n this._appRef = null;\n const isRoot = isRootView(this._lView);\n const declarationContainer = this._lView[DECLARATION_LCONTAINER];\n if (declarationContainer !== null && !isRoot) {\n detachMovedView(declarationContainer, this._lView);\n }\n detachViewFromDOM(this._lView[TVIEW], this._lView);\n }\n attachToAppRef(appRef) {\n if (this._attachedToViewContainer) {\n throw new RuntimeError(902, ngDevMode && 'This view is already attached to a ViewContainer!');\n }\n this._appRef = appRef;\n const isRoot = isRootView(this._lView);\n const declarationContainer = this._lView[DECLARATION_LCONTAINER];\n if (declarationContainer !== null && !isRoot) {\n trackMovedView(declarationContainer, this._lView);\n }\n updateAncestorTraversalFlagsOnAttach(this._lView);\n }\n}\nfunction isViewDirty(view) {\n return requiresRefreshOrTraversal(view._lView) || !!(view._lView[FLAGS] & 64);\n}\nfunction markForRefresh(view) {\n markViewForRefresh(view._lView);\n}\nlet TemplateRef = /*#__PURE__*/(() => {\n class TemplateRef {\n _declarationLView;\n _declarationTContainer;\n elementRef;\n static __NG_ELEMENT_ID__ = injectTemplateRef;\n constructor(_declarationLView, _declarationTContainer, elementRef) {\n this._declarationLView = _declarationLView;\n this._declarationTContainer = _declarationTContainer;\n this.elementRef = elementRef;\n }\n get ssrId() {\n return this._declarationTContainer.tView?.ssrId || null;\n }\n createEmbeddedView(context, injector) {\n return this.createEmbeddedViewImpl(context, injector);\n }\n createEmbeddedViewImpl(context, injector, dehydratedView) {\n const embeddedLView = createAndRenderEmbeddedLView(this._declarationLView, this._declarationTContainer, context, {\n embeddedViewInjector: injector,\n dehydratedView\n });\n return new ViewRef(embeddedLView);\n }\n }\n return TemplateRef;\n})();\nfunction injectTemplateRef() {\n return createTemplateRef(getCurrentTNode(), getLView());\n}\nfunction createTemplateRef(hostTNode, hostLView) {\n if (hostTNode.type & 4) {\n ngDevMode && assertDefined(hostTNode.tView, 'TView must be allocated');\n return new TemplateRef(hostLView, hostTNode, createElementRef(hostTNode, hostLView));\n }\n return null;\n}\nconst AT_THIS_LOCATION = '<-- AT THIS LOCATION';\nfunction getFriendlyStringFromTNodeType(tNodeType) {\n switch (tNodeType) {\n case 4:\n return 'view container';\n case 2:\n return 'element';\n case 8:\n return 'ng-container';\n case 32:\n return 'icu';\n case 64:\n return 'i18n';\n case 16:\n return 'projection';\n case 1:\n return 'text';\n case 128:\n return '@let';\n default:\n return '';\n }\n}\nfunction validateMatchingNode(node, nodeType, tagName, lView, tNode, isViewContainerAnchor = false) {\n if (!node || node.nodeType !== nodeType || node.nodeType === Node.ELEMENT_NODE && node.tagName.toLowerCase() !== tagName?.toLowerCase()) {\n const expectedNode = shortRNodeDescription(nodeType, tagName, null);\n let header = `During hydration Angular expected ${expectedNode} but `;\n const hostComponentDef = getDeclarationComponentDef(lView);\n const componentClassName = hostComponentDef?.type?.name;\n const expectedDom = describeExpectedDom(lView, tNode, isViewContainerAnchor);\n const expected = `Angular expected this DOM:\\n\\n${expectedDom}\\n\\n`;\n let actual = '';\n const componentHostElement = unwrapRNode(lView[HOST]);\n if (!node) {\n header += `the node was not found.\\n\\n`;\n markRNodeAsHavingHydrationMismatch(componentHostElement, expectedDom);\n } else {\n const actualNode = shortRNodeDescription(node.nodeType, node.tagName ?? null, node.textContent ?? null);\n header += `found ${actualNode}.\\n\\n`;\n const actualDom = describeDomFromNode(node);\n actual = `Actual DOM is:\\n\\n${actualDom}\\n\\n`;\n markRNodeAsHavingHydrationMismatch(componentHostElement, expectedDom, actualDom);\n }\n const footer = getHydrationErrorFooter(componentClassName);\n const message = header + expected + actual + getHydrationAttributeNote() + footer;\n throw new RuntimeError(-500, message);\n }\n}\nfunction validateSiblingNodeExists(node) {\n validateNodeExists(node);\n if (!node.nextSibling) {\n const header = 'During hydration Angular expected more sibling nodes to be present.\\n\\n';\n const actual = `Actual DOM is:\\n\\n${describeDomFromNode(node)}\\n\\n`;\n const footer = getHydrationErrorFooter();\n const message = header + actual + footer;\n markRNodeAsHavingHydrationMismatch(node, '', actual);\n throw new RuntimeError(-501, message);\n }\n}\nfunction validateNodeExists(node, lView = null, tNode = null) {\n if (!node) {\n const header = 'During hydration, Angular expected an element to be present at this location.\\n\\n';\n let expected = '';\n let footer = '';\n if (lView !== null && tNode !== null) {\n expected = describeExpectedDom(lView, tNode, false);\n footer = getHydrationErrorFooter();\n markRNodeAsHavingHydrationMismatch(unwrapRNode(lView[HOST]), expected, '');\n }\n throw new RuntimeError(-502, `${header}${expected}\\n\\n${footer}`);\n }\n}\nfunction nodeNotFoundError(lView, tNode) {\n const header = 'During serialization, Angular was unable to find an element in the DOM:\\n\\n';\n const expected = `${describeExpectedDom(lView, tNode, false)}\\n\\n`;\n const footer = getHydrationErrorFooter();\n throw new RuntimeError(-502, header + expected + footer);\n}\nfunction nodeNotFoundAtPathError(host, path) {\n const header = `During hydration Angular was unable to locate a node ` + `using the \"${path}\" path, starting from the ${describeRNode(host)} node.\\n\\n`;\n const footer = getHydrationErrorFooter();\n markRNodeAsHavingHydrationMismatch(host);\n throw new RuntimeError(-502, header + footer);\n}\nfunction unsupportedProjectionOfDomNodes(rNode) {\n const header = 'During serialization, Angular detected DOM nodes ' + 'that were created outside of Angular context and provided as projectable nodes ' + '(likely via `ViewContainerRef.createComponent` or `createComponent` APIs). ' + 'Hydration is not supported for such cases, consider refactoring the code to avoid ' + 'this pattern or using `ngSkipHydration` on the host element of the component.\\n\\n';\n const actual = `${describeDomFromNode(rNode)}\\n\\n`;\n const message = header + actual + getHydrationAttributeNote();\n return new RuntimeError(-503, message);\n}\nfunction invalidSkipHydrationHost(rNode) {\n const header = 'The `ngSkipHydration` flag is applied on a node ' + \"that doesn't act as a component host. Hydration can be \" + 'skipped only on per-component basis.\\n\\n';\n const actual = `${describeDomFromNode(rNode)}\\n\\n`;\n const footer = 'Please move the `ngSkipHydration` attribute to the component host element.\\n\\n';\n const message = header + actual + footer;\n return new RuntimeError(-504, message);\n}\nfunction stringifyTNodeAttrs(tNode) {\n const results = [];\n if (tNode.attrs) {\n for (let i = 0; i < tNode.attrs.length;) {\n const attrName = tNode.attrs[i++];\n if (typeof attrName == 'number') {\n break;\n }\n const attrValue = tNode.attrs[i++];\n results.push(`${attrName}=\"${shorten(attrValue)}\"`);\n }\n }\n return results.join(' ');\n}\nconst internalAttrs = /*#__PURE__*/new Set(['ngh', 'ng-version', 'ng-server-context']);\nfunction stringifyRNodeAttrs(rNode) {\n const results = [];\n for (let i = 0; i < rNode.attributes.length; i++) {\n const attr = rNode.attributes[i];\n if (internalAttrs.has(attr.name)) continue;\n results.push(`${attr.name}=\"${shorten(attr.value)}\"`);\n }\n return results.join(' ');\n}\nfunction describeTNode(tNode, innerContent = '\u2026') {\n switch (tNode.type) {\n case 1:\n const content = tNode.value ? `(${tNode.value})` : '';\n return `#text${content}`;\n case 2:\n const attrs = stringifyTNodeAttrs(tNode);\n const tag = tNode.value.toLowerCase();\n return `<${tag}${attrs ? ' ' + attrs : ''}>${innerContent}`;\n case 8:\n return '';\n case 4:\n return '';\n default:\n const typeAsString = getFriendlyStringFromTNodeType(tNode.type);\n return `#node(${typeAsString})`;\n }\n}\nfunction describeRNode(rNode, innerContent = '\u2026') {\n const node = rNode;\n switch (node.nodeType) {\n case Node.ELEMENT_NODE:\n const tag = node.tagName.toLowerCase();\n const attrs = stringifyRNodeAttrs(node);\n return `<${tag}${attrs ? ' ' + attrs : ''}>${innerContent}`;\n case Node.TEXT_NODE:\n const content = node.textContent ? shorten(node.textContent) : '';\n return `#text${content ? `(${content})` : ''}`;\n case Node.COMMENT_NODE:\n return ``;\n default:\n return `#node(${node.nodeType})`;\n }\n}\nfunction describeExpectedDom(lView, tNode, isViewContainerAnchor) {\n const spacer = ' ';\n let content = '';\n if (tNode.prev) {\n content += spacer + '\u2026\\n';\n content += spacer + describeTNode(tNode.prev) + '\\n';\n } else if (tNode.type && tNode.type & 12) {\n content += spacer + '\u2026\\n';\n }\n if (isViewContainerAnchor) {\n content += spacer + describeTNode(tNode) + '\\n';\n content += spacer + ` ${AT_THIS_LOCATION}\\n`;\n } else {\n content += spacer + describeTNode(tNode) + ` ${AT_THIS_LOCATION}\\n`;\n }\n content += spacer + '\u2026\\n';\n const parentRNode = tNode.type ? getParentRElement(lView[TVIEW], tNode, lView) : null;\n if (parentRNode) {\n content = describeRNode(parentRNode, '\\n' + content);\n }\n return content;\n}\nfunction describeDomFromNode(node) {\n const spacer = ' ';\n let content = '';\n const currentNode = node;\n if (currentNode.previousSibling) {\n content += spacer + '\u2026\\n';\n content += spacer + describeRNode(currentNode.previousSibling) + '\\n';\n }\n content += spacer + describeRNode(currentNode) + ` ${AT_THIS_LOCATION}\\n`;\n if (node.nextSibling) {\n content += spacer + '\u2026\\n';\n }\n if (node.parentNode) {\n content = describeRNode(currentNode.parentNode, '\\n' + content);\n }\n return content;\n}\nfunction shortRNodeDescription(nodeType, tagName, textContent) {\n switch (nodeType) {\n case Node.ELEMENT_NODE:\n return `<${tagName.toLowerCase()}>`;\n case Node.TEXT_NODE:\n const content = textContent ? ` (with the \"${shorten(textContent)}\" content)` : '';\n return `a text node${content}`;\n case Node.COMMENT_NODE:\n return 'a comment node';\n default:\n return `#node(nodeType=${nodeType})`;\n }\n}\nfunction getHydrationErrorFooter(componentClassName) {\n const componentInfo = componentClassName ? `the \"${componentClassName}\"` : 'corresponding';\n return `To fix this problem:\\n` + ` * check ${componentInfo} component for hydration-related issues\\n` + ` * check to see if your template has valid HTML structure\\n` + ` * or skip hydration by adding the \\`ngSkipHydration\\` attribute ` + `to its host node in a template\\n\\n`;\n}\nfunction getHydrationAttributeNote() {\n return 'Note: attributes are only displayed to better represent the DOM' + ' but have no effect on hydration mismatches.\\n\\n';\n}\nfunction stripNewlines(input) {\n return input.replace(/\\s+/gm, '');\n}\nfunction shorten(input, maxLength = 50) {\n if (!input) {\n return '';\n }\n input = stripNewlines(input);\n return input.length > maxLength ? `${input.substring(0, maxLength - 1)}\u2026` : input;\n}\nfunction getInsertInFrontOfRNodeWithI18n(parentTNode, currentTNode, lView) {\n const tNodeInsertBeforeIndex = currentTNode.insertBeforeIndex;\n const insertBeforeIndex = Array.isArray(tNodeInsertBeforeIndex) ? tNodeInsertBeforeIndex[0] : tNodeInsertBeforeIndex;\n if (insertBeforeIndex === null) {\n return getInsertInFrontOfRNodeWithNoI18n(parentTNode, currentTNode, lView);\n } else {\n ngDevMode && assertIndexInRange(lView, insertBeforeIndex);\n return unwrapRNode(lView[insertBeforeIndex]);\n }\n}\nfunction processI18nInsertBefore(renderer, childTNode, lView, childRNode, parentRElement) {\n const tNodeInsertBeforeIndex = childTNode.insertBeforeIndex;\n if (Array.isArray(tNodeInsertBeforeIndex)) {\n ngDevMode && assertDomNode(childRNode);\n let i18nParent = childRNode;\n let anchorRNode = null;\n if (!(childTNode.type & 3)) {\n anchorRNode = i18nParent;\n i18nParent = parentRElement;\n }\n if (i18nParent !== null && childTNode.componentOffset === -1) {\n for (let i = 1; i < tNodeInsertBeforeIndex.length; i++) {\n const i18nChild = lView[tNodeInsertBeforeIndex[i]];\n nativeInsertBefore(renderer, i18nParent, i18nChild, anchorRNode, false);\n }\n }\n }\n}\nfunction getOrCreateTNode(tView, index, type, name, attrs) {\n ngDevMode && index !== 0 && assertGreaterThanOrEqual(index, HEADER_OFFSET, \"TNodes can't be in the LView header.\");\n ngDevMode && assertPureTNodeType(type);\n let tNode = tView.data[index];\n if (tNode === null) {\n tNode = createTNodeAtIndex(tView, index, type, name, attrs);\n if (isInI18nBlock()) {\n tNode.flags |= 32;\n }\n } else if (tNode.type & 64) {\n tNode.type = type;\n tNode.value = name;\n tNode.attrs = attrs;\n const parent = getCurrentParentTNode();\n tNode.injectorIndex = parent === null ? -1 : parent.injectorIndex;\n ngDevMode && assertTNodeForTView(tNode, tView);\n ngDevMode && assertEqual(index, tNode.index, 'Expecting same index');\n }\n setCurrentTNode(tNode, true);\n return tNode;\n}\nfunction createTNodeAtIndex(tView, index, type, name, attrs) {\n const currentTNode = getCurrentTNodePlaceholderOk();\n const isParent = isCurrentTNodeParent();\n const parent = isParent ? currentTNode : currentTNode && currentTNode.parent;\n const tNode = tView.data[index] = createTNode(tView, parent, type, index, name, attrs);\n linkTNodeInTView(tView, tNode, currentTNode, isParent);\n return tNode;\n}\nfunction linkTNodeInTView(tView, tNode, currentTNode, isParent) {\n if (tView.firstChild === null) {\n tView.firstChild = tNode;\n }\n if (currentTNode !== null) {\n if (isParent) {\n if (currentTNode.child == null && tNode.parent !== null) {\n currentTNode.child = tNode;\n }\n } else {\n if (currentTNode.next === null) {\n currentTNode.next = tNode;\n tNode.prev = currentTNode;\n }\n }\n }\n}\nfunction createTNode(tView, tParent, type, index, value, attrs) {\n ngDevMode && index !== 0 && assertGreaterThanOrEqual(index, HEADER_OFFSET, \"TNodes can't be in the LView header.\");\n ngDevMode && assertNotSame(attrs, undefined, \"'undefined' is not valid value for 'attrs'\");\n ngDevMode && tParent && assertTNodeForTView(tParent, tView);\n let injectorIndex = tParent ? tParent.injectorIndex : -1;\n let flags = 0;\n if (isInSkipHydrationBlock$1()) {\n flags |= 128;\n }\n const tNode = {\n type,\n index,\n insertBeforeIndex: null,\n injectorIndex,\n directiveStart: -1,\n directiveEnd: -1,\n directiveStylingLast: -1,\n componentOffset: -1,\n controlDirectiveIndex: -1,\n customControlIndex: -1,\n propertyBindings: null,\n flags,\n providerIndexes: 0,\n value: value,\n attrs: attrs,\n mergedAttrs: null,\n localNames: null,\n initialInputs: null,\n inputs: null,\n hostDirectiveInputs: null,\n outputs: null,\n hostDirectiveOutputs: null,\n directiveToIndex: null,\n tView: null,\n next: null,\n prev: null,\n projectionNext: null,\n child: null,\n parent: tParent,\n projection: null,\n styles: null,\n stylesWithoutHost: null,\n residualStyles: undefined,\n classes: null,\n classesWithoutHost: null,\n residualClasses: undefined,\n classBindings: 0,\n styleBindings: 0\n };\n if (ngDevMode) {\n Object.seal(tNode);\n }\n return tNode;\n}\nfunction addTNodeAndUpdateInsertBeforeIndex(previousTNodes, newTNode) {\n ngDevMode && assertEqual(newTNode.insertBeforeIndex, null, 'We expect that insertBeforeIndex is not set');\n previousTNodes.push(newTNode);\n if (previousTNodes.length > 1) {\n for (let i = previousTNodes.length - 2; i >= 0; i--) {\n const existingTNode = previousTNodes[i];\n if (!isI18nText(existingTNode)) {\n if (isNewTNodeCreatedBefore(existingTNode, newTNode) && getInsertBeforeIndex(existingTNode) === null) {\n setInsertBeforeIndex(existingTNode, newTNode.index);\n }\n }\n }\n }\n}\nfunction isI18nText(tNode) {\n return !(tNode.type & 64);\n}\nfunction isNewTNodeCreatedBefore(existingTNode, newTNode) {\n return isI18nText(newTNode) || existingTNode.index > newTNode.index;\n}\nfunction getInsertBeforeIndex(tNode) {\n const index = tNode.insertBeforeIndex;\n return Array.isArray(index) ? index[0] : index;\n}\nfunction setInsertBeforeIndex(tNode, value) {\n const index = tNode.insertBeforeIndex;\n if (Array.isArray(index)) {\n index[0] = value;\n } else {\n setI18nHandling(getInsertInFrontOfRNodeWithI18n, processI18nInsertBefore);\n tNode.insertBeforeIndex = value;\n }\n}\nfunction getTIcu(tView, index) {\n const value = tView.data[index];\n if (value === null || typeof value === 'string') return null;\n if (ngDevMode && !(value.hasOwnProperty('tView') || value.hasOwnProperty('currentCaseLViewIndex'))) {\n throwError(\"We expect to get 'null'|'TIcu'|'TIcuContainer', but got: \" + value);\n }\n const tIcu = value.hasOwnProperty('currentCaseLViewIndex') ? value : value.value;\n ngDevMode && assertTIcu(tIcu);\n return tIcu;\n}\nfunction setTIcu(tView, index, tIcu) {\n const tNode = tView.data[index];\n ngDevMode && assertEqual(tNode === null || tNode.hasOwnProperty('tView'), true, \"We expect to get 'null'|'TIcuContainer'\");\n if (tNode === null) {\n tView.data[index] = tIcu;\n } else {\n ngDevMode && assertTNodeType(tNode, 32);\n tNode.value = tIcu;\n }\n}\nfunction setTNodeInsertBeforeIndex(tNode, index) {\n ngDevMode && assertTNode(tNode);\n let insertBeforeIndex = tNode.insertBeforeIndex;\n if (insertBeforeIndex === null) {\n setI18nHandling(getInsertInFrontOfRNodeWithI18n, processI18nInsertBefore);\n insertBeforeIndex = tNode.insertBeforeIndex = [null, index];\n } else {\n assertEqual(Array.isArray(insertBeforeIndex), true, 'Expecting array here');\n insertBeforeIndex.push(index);\n }\n}\nfunction createTNodePlaceholder(tView, previousTNodes, index) {\n const tNode = createTNodeAtIndex(tView, index, 64, null, null);\n addTNodeAndUpdateInsertBeforeIndex(previousTNodes, tNode);\n return tNode;\n}\nfunction getCurrentICUCaseIndex(tIcu, lView) {\n const currentCase = lView[tIcu.currentCaseLViewIndex];\n return currentCase === null ? currentCase : currentCase < 0 ? ~currentCase : currentCase;\n}\nfunction getParentFromIcuCreateOpCode(mergedCode) {\n return mergedCode >>> 17;\n}\nfunction getRefFromIcuCreateOpCode(mergedCode) {\n return (mergedCode & 131070) >>> 1;\n}\nfunction getInstructionFromIcuCreateOpCode(mergedCode) {\n return mergedCode & 1;\n}\nfunction icuCreateOpCode(opCode, parentIdx, refIdx) {\n ngDevMode && assertGreaterThanOrEqual(parentIdx, 0, 'Missing parent index');\n ngDevMode && assertGreaterThan(refIdx, 0, 'Missing ref index');\n return opCode | parentIdx << 17 | refIdx << 1;\n}\nfunction isRootTemplateMessage(subTemplateIndex) {\n return subTemplateIndex === -1;\n}\nfunction enterIcu(state, tIcu, lView) {\n state.index = 0;\n const currentCase = getCurrentICUCaseIndex(tIcu, lView);\n if (currentCase !== null) {\n ngDevMode && assertNumberInRange(currentCase, 0, tIcu.cases.length - 1);\n state.removes = tIcu.remove[currentCase];\n } else {\n state.removes = EMPTY_ARRAY;\n }\n}\nfunction icuContainerIteratorNext(state) {\n if (state.index < state.removes.length) {\n const removeOpCode = state.removes[state.index++];\n ngDevMode && assertNumber(removeOpCode, 'Expecting OpCode number');\n if (removeOpCode > 0) {\n const rNode = state.lView[removeOpCode];\n ngDevMode && assertDomNode(rNode);\n return rNode;\n } else {\n state.stack.push(state.index, state.removes);\n const tIcuIndex = ~removeOpCode;\n const tIcu = state.lView[TVIEW].data[tIcuIndex];\n ngDevMode && assertTIcu(tIcu);\n enterIcu(state, tIcu, state.lView);\n return icuContainerIteratorNext(state);\n }\n } else {\n if (state.stack.length === 0) {\n state.lView = undefined;\n return null;\n } else {\n state.removes = state.stack.pop();\n state.index = state.stack.pop();\n return icuContainerIteratorNext(state);\n }\n }\n}\nfunction loadIcuContainerVisitor() {\n const _state = {\n stack: [],\n index: -1\n };\n function icuContainerIteratorStart(tIcuContainerNode, lView) {\n _state.lView = lView;\n while (_state.stack.length) _state.stack.pop();\n ngDevMode && assertTNodeForLView(tIcuContainerNode, lView);\n enterIcu(_state, tIcuContainerNode.value, lView);\n return icuContainerIteratorNext.bind(null, _state);\n }\n return icuContainerIteratorStart;\n}\nfunction createIcuIterator(tIcu, lView) {\n const state = {\n stack: [],\n index: -1,\n lView\n };\n ngDevMode && assertTIcu(tIcu);\n enterIcu(state, tIcu, lView);\n return icuContainerIteratorNext.bind(null, state);\n}\nconst REF_EXTRACTOR_REGEXP = /* @__PURE__ */(() => {\n return new RegExp(`^(\\\\d+)*(${REFERENCE_NODE_BODY}|${REFERENCE_NODE_HOST})*(.*)`);\n})();\nfunction compressNodeLocation(referenceNode, path) {\n const result = [referenceNode];\n for (const segment of path) {\n const lastIdx = result.length - 1;\n if (lastIdx > 0 && result[lastIdx - 1] === segment) {\n const value = result[lastIdx] || 1;\n result[lastIdx] = value + 1;\n } else {\n result.push(segment, '');\n }\n }\n return result.join('');\n}\nfunction decompressNodeLocation(path) {\n const matches = path.match(REF_EXTRACTOR_REGEXP);\n const [_, refNodeId, refNodeName, rest] = matches;\n const ref = refNodeId ? parseInt(refNodeId, 10) : refNodeName;\n const steps = [];\n for (const [_, step, count] of rest.matchAll(/(f|n)(\\d*)/g)) {\n const repeat = parseInt(count, 10) || 1;\n steps.push(step, repeat);\n }\n return [ref, ...steps];\n}\nfunction isFirstElementInNgContainer(tNode) {\n return !tNode.prev && tNode.parent?.type === 8;\n}\nfunction getNoOffsetIndex(tNode) {\n return tNode.index - HEADER_OFFSET;\n}\nfunction isDisconnectedNode(tNode, lView) {\n return !(tNode.type & (16 | 128)) && !!lView[tNode.index] && isDisconnectedRNode(unwrapRNode(lView[tNode.index]));\n}\nfunction isDisconnectedRNode(rNode) {\n return !!rNode && !rNode.isConnected;\n}\nfunction locateI18nRNodeByIndex(hydrationInfo, noOffsetIndex) {\n const i18nNodes = hydrationInfo.i18nNodes;\n if (i18nNodes) {\n return i18nNodes.get(noOffsetIndex);\n }\n return undefined;\n}\nfunction tryLocateRNodeByPath(hydrationInfo, lView, noOffsetIndex) {\n const nodes = hydrationInfo.data[NODES];\n const path = nodes?.[noOffsetIndex];\n return path ? locateRNodeByPath(path, lView) : null;\n}\nfunction locateNextRNode(hydrationInfo, tView, lView, tNode) {\n const noOffsetIndex = getNoOffsetIndex(tNode);\n let native = locateI18nRNodeByIndex(hydrationInfo, noOffsetIndex);\n if (native === undefined) {\n const nodes = hydrationInfo.data[NODES];\n if (nodes?.[noOffsetIndex]) {\n native = locateRNodeByPath(nodes[noOffsetIndex], lView);\n } else if (tView.firstChild === tNode) {\n native = hydrationInfo.firstChild;\n } else {\n const previousTNodeParent = tNode.prev === null;\n const previousTNode = tNode.prev ?? tNode.parent;\n ngDevMode && assertDefined(previousTNode, 'Unexpected state: current TNode does not have a connection ' + 'to the previous node or a parent node.');\n if (isFirstElementInNgContainer(tNode)) {\n const noOffsetParentIndex = getNoOffsetIndex(tNode.parent);\n native = getSegmentHead(hydrationInfo, noOffsetParentIndex);\n } else {\n let previousRElement = getNativeByTNode(previousTNode, lView);\n if (previousTNodeParent) {\n native = previousRElement.firstChild;\n } else {\n const noOffsetPrevSiblingIndex = getNoOffsetIndex(previousTNode);\n const segmentHead = getSegmentHead(hydrationInfo, noOffsetPrevSiblingIndex);\n if (previousTNode.type === 2 && segmentHead) {\n const numRootNodesToSkip = calcSerializedContainerSize(hydrationInfo, noOffsetPrevSiblingIndex);\n const nodesToSkip = numRootNodesToSkip + 1;\n native = siblingAfter(nodesToSkip, segmentHead);\n } else {\n native = previousRElement.nextSibling;\n }\n }\n }\n }\n }\n return native;\n}\nfunction siblingAfter(skip, from) {\n let currentNode = from;\n for (let i = 0; i < skip; i++) {\n ngDevMode && validateSiblingNodeExists(currentNode);\n currentNode = currentNode.nextSibling;\n }\n return currentNode;\n}\nfunction stringifyNavigationInstructions(instructions) {\n const container = [];\n for (let i = 0; i < instructions.length; i += 2) {\n const step = instructions[i];\n const repeat = instructions[i + 1];\n for (let r = 0; r < repeat; r++) {\n container.push(step === NODE_NAVIGATION_STEP_FIRST_CHILD ? 'firstChild' : 'nextSibling');\n }\n }\n return container.join('.');\n}\nfunction navigateToNode(from, instructions) {\n let node = from;\n for (let i = 0; i < instructions.length; i += 2) {\n const step = instructions[i];\n const repeat = instructions[i + 1];\n for (let r = 0; r < repeat; r++) {\n if (ngDevMode && !node) {\n throw nodeNotFoundAtPathError(from, stringifyNavigationInstructions(instructions));\n }\n switch (step) {\n case NODE_NAVIGATION_STEP_FIRST_CHILD:\n node = node.firstChild;\n break;\n case NODE_NAVIGATION_STEP_NEXT_SIBLING:\n node = node.nextSibling;\n break;\n }\n }\n }\n if (ngDevMode && !node) {\n throw nodeNotFoundAtPathError(from, stringifyNavigationInstructions(instructions));\n }\n return node;\n}\nfunction locateRNodeByPath(path, lView) {\n const [referenceNode, ...navigationInstructions] = decompressNodeLocation(path);\n let ref;\n if (referenceNode === REFERENCE_NODE_HOST) {\n ref = lView[DECLARATION_COMPONENT_VIEW][HOST];\n } else if (referenceNode === REFERENCE_NODE_BODY) {\n ref = \u0275\u0275resolveBody(lView[DECLARATION_COMPONENT_VIEW][HOST]);\n } else {\n const parentElementId = Number(referenceNode);\n ref = unwrapRNode(lView[parentElementId + HEADER_OFFSET]);\n }\n return navigateToNode(ref, navigationInstructions);\n}\nfunction navigateBetween(start, finish) {\n if (start === finish) {\n return [];\n } else if (start.parentElement == null || finish.parentElement == null) {\n return null;\n } else if (start.parentElement === finish.parentElement) {\n return navigateBetweenSiblings(start, finish);\n } else {\n const parent = finish.parentElement;\n const parentPath = navigateBetween(start, parent);\n const childPath = navigateBetween(parent.firstChild, finish);\n if (!parentPath || !childPath) return null;\n return [...parentPath, NODE_NAVIGATION_STEP_FIRST_CHILD, ...childPath];\n }\n}\nfunction navigateBetweenSiblings(start, finish) {\n const nav = [];\n let node = null;\n for (node = start; node != null && node !== finish; node = node.nextSibling) {\n nav.push(NODE_NAVIGATION_STEP_NEXT_SIBLING);\n }\n return node == null ? null : nav;\n}\nfunction calcPathBetween(from, to, fromNodeName) {\n const path = navigateBetween(from, to);\n return path === null ? null : compressNodeLocation(fromNodeName, path);\n}\nfunction calcPathForNode(tNode, lView, excludedParentNodes) {\n let parentTNode = tNode.parent;\n let parentIndex;\n let parentRNode;\n let referenceNodeName;\n while (parentTNode !== null && (isDisconnectedNode(parentTNode, lView) || excludedParentNodes?.has(parentTNode.index))) {\n parentTNode = parentTNode.parent;\n }\n if (parentTNode === null || !(parentTNode.type & 3)) {\n parentIndex = referenceNodeName = REFERENCE_NODE_HOST;\n parentRNode = lView[DECLARATION_COMPONENT_VIEW][HOST];\n } else {\n parentIndex = parentTNode.index;\n parentRNode = unwrapRNode(lView[parentIndex]);\n referenceNodeName = renderStringify(parentIndex - HEADER_OFFSET);\n }\n let rNode = unwrapRNode(lView[tNode.index]);\n if (tNode.type & (12 | 32)) {\n const firstRNode = getFirstNativeNode(lView, tNode);\n if (firstRNode) {\n rNode = firstRNode;\n }\n }\n let path = calcPathBetween(parentRNode, rNode, referenceNodeName);\n if (path === null && parentRNode !== rNode) {\n const body = parentRNode.ownerDocument.body;\n path = calcPathBetween(body, rNode, REFERENCE_NODE_BODY);\n if (path === null) {\n throw nodeNotFoundError(lView, tNode);\n }\n }\n return path;\n}\nfunction gatherDeferBlocksCommentNodes(doc, node) {\n const commentNodesIterator = doc.createNodeIterator(node, NodeFilter.SHOW_COMMENT, {\n acceptNode\n });\n let currentNode;\n const nodesByBlockId = new Map();\n while (currentNode = commentNodesIterator.nextNode()) {\n const nghPattern = 'ngh=';\n const content = currentNode?.textContent;\n const nghIdx = content?.indexOf(nghPattern) ?? -1;\n if (nghIdx > -1) {\n const nghValue = content.substring(nghIdx + nghPattern.length).trim();\n ngDevMode && assertEqual(nghValue.startsWith('d'), true, 'Invalid defer block id found in a comment node.');\n nodesByBlockId.set(nghValue, currentNode);\n }\n }\n return nodesByBlockId;\n}\nfunction acceptNode(node) {\n return node.textContent?.trimStart().startsWith('ngh=') ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_REJECT;\n}\nlet _isI18nHydrationSupportEnabled = false;\nlet _prepareI18nBlockForHydrationImpl = () => {};\nfunction setIsI18nHydrationSupportEnabled(enabled) {\n _isI18nHydrationSupportEnabled = enabled;\n}\nfunction isI18nHydrationSupportEnabled() {\n return _isI18nHydrationSupportEnabled;\n}\nfunction prepareI18nBlockForHydration(lView, index, parentTNode, subTemplateIndex) {\n _prepareI18nBlockForHydrationImpl(lView, index, parentTNode, subTemplateIndex);\n}\nfunction enablePrepareI18nBlockForHydrationImpl() {\n _prepareI18nBlockForHydrationImpl = prepareI18nBlockForHydrationImpl;\n}\nfunction isI18nHydrationEnabled(injector) {\n injector = injector ?? inject(Injector);\n return injector.get(IS_I18N_HYDRATION_ENABLED, false);\n}\nfunction getOrComputeI18nChildren(tView, context) {\n let i18nChildren = context.i18nChildren.get(tView);\n if (i18nChildren === undefined) {\n i18nChildren = collectI18nChildren(tView);\n context.i18nChildren.set(tView, i18nChildren);\n }\n return i18nChildren;\n}\nfunction collectI18nChildren(tView) {\n const children = new Set();\n function collectI18nViews(node) {\n children.add(node.index);\n switch (node.kind) {\n case 1:\n case 2:\n {\n for (const childNode of node.children) {\n collectI18nViews(childNode);\n }\n break;\n }\n case 3:\n {\n for (const caseNodes of node.cases) {\n for (const caseNode of caseNodes) {\n collectI18nViews(caseNode);\n }\n }\n break;\n }\n }\n }\n for (let i = HEADER_OFFSET; i < tView.bindingStartIndex; i++) {\n const tI18n = tView.data[i];\n if (!tI18n || !tI18n.ast) {\n continue;\n }\n for (const node of tI18n.ast) {\n collectI18nViews(node);\n }\n }\n return children.size === 0 ? null : children;\n}\nfunction trySerializeI18nBlock(lView, index, context) {\n if (!context.isI18nHydrationEnabled) {\n return null;\n }\n const tView = lView[TVIEW];\n const tI18n = tView.data[index];\n if (!tI18n || !tI18n.ast) {\n return null;\n }\n const parentTNode = tView.data[tI18n.parentTNodeIndex];\n if (parentTNode && isI18nInSkipHydrationBlock(parentTNode)) {\n return null;\n }\n const serializedI18nBlock = {\n caseQueue: [],\n disconnectedNodes: new Set(),\n disjointNodes: new Set()\n };\n serializeI18nBlock(lView, serializedI18nBlock, context, tI18n.ast);\n return serializedI18nBlock.caseQueue.length === 0 && serializedI18nBlock.disconnectedNodes.size === 0 && serializedI18nBlock.disjointNodes.size === 0 ? null : serializedI18nBlock;\n}\nfunction serializeI18nBlock(lView, serializedI18nBlock, context, nodes) {\n let prevRNode = null;\n for (const node of nodes) {\n const nextRNode = serializeI18nNode(lView, serializedI18nBlock, context, node);\n if (nextRNode) {\n if (isDisjointNode(prevRNode, nextRNode)) {\n serializedI18nBlock.disjointNodes.add(node.index - HEADER_OFFSET);\n }\n prevRNode = nextRNode;\n }\n }\n return prevRNode;\n}\nfunction isDisjointNode(prevNode, nextNode) {\n return prevNode && prevNode.nextSibling !== nextNode;\n}\nfunction serializeI18nNode(lView, serializedI18nBlock, context, node) {\n const maybeRNode = unwrapRNode(lView[node.index]);\n if (!maybeRNode || isDisconnectedRNode(maybeRNode)) {\n serializedI18nBlock.disconnectedNodes.add(node.index - HEADER_OFFSET);\n return null;\n }\n const rNode = maybeRNode;\n switch (node.kind) {\n case 0:\n {\n processTextNodeBeforeSerialization(context, rNode);\n break;\n }\n case 1:\n case 2:\n {\n serializeI18nBlock(lView, serializedI18nBlock, context, node.children);\n break;\n }\n case 3:\n {\n const currentCase = lView[node.currentCaseLViewIndex];\n if (currentCase != null) {\n const caseIdx = currentCase < 0 ? ~currentCase : currentCase;\n serializedI18nBlock.caseQueue.push(caseIdx);\n serializeI18nBlock(lView, serializedI18nBlock, context, node.cases[caseIdx]);\n }\n break;\n }\n }\n return getFirstNativeNodeForI18nNode(lView, node);\n}\nfunction getFirstNativeNodeForI18nNode(lView, node) {\n const tView = lView[TVIEW];\n const maybeTNode = tView.data[node.index];\n if (isTNodeShape(maybeTNode)) {\n return getFirstNativeNode(lView, maybeTNode);\n } else if (node.kind === 3) {\n const icuIterator = createIcuIterator(maybeTNode, lView);\n let rNode = icuIterator();\n return rNode ?? unwrapRNode(lView[node.index]);\n } else {\n return unwrapRNode(lView[node.index]) ?? null;\n }\n}\nfunction setCurrentNode(state, node) {\n state.currentNode = node;\n}\nfunction appendI18nNodeToCollection(context, state, astNode) {\n const noOffsetIndex = astNode.index - HEADER_OFFSET;\n const {\n disconnectedNodes\n } = context;\n const currentNode = state.currentNode;\n if (state.isConnected) {\n context.i18nNodes.set(noOffsetIndex, currentNode);\n disconnectedNodes.delete(noOffsetIndex);\n } else {\n disconnectedNodes.add(noOffsetIndex);\n }\n return currentNode;\n}\nfunction skipSiblingNodes(state, skip) {\n let currentNode = state.currentNode;\n for (let i = 0; i < skip; i++) {\n if (!currentNode) {\n break;\n }\n currentNode = currentNode?.nextSibling ?? null;\n }\n return currentNode;\n}\nfunction forkHydrationState(state, nextNode) {\n return {\n currentNode: nextNode,\n isConnected: state.isConnected\n };\n}\nfunction prepareI18nBlockForHydrationImpl(lView, index, parentTNode, subTemplateIndex) {\n const hydrationInfo = lView[HYDRATION];\n if (!hydrationInfo) {\n return;\n }\n if (!isI18nHydrationSupportEnabled() || parentTNode && (isI18nInSkipHydrationBlock(parentTNode) || isDisconnectedNode$1(hydrationInfo, parentTNode.index - HEADER_OFFSET))) {\n return;\n }\n const tView = lView[TVIEW];\n const tI18n = tView.data[index];\n ngDevMode && assertDefined(tI18n, 'Expected i18n data to be present in a given TView slot during hydration');\n function findHydrationRoot() {\n if (isRootTemplateMessage(subTemplateIndex)) {\n ngDevMode && assertDefined(parentTNode, 'Expected parent TNode while hydrating i18n root');\n const rootNode = locateNextRNode(hydrationInfo, tView, lView, parentTNode);\n return parentTNode.type & 8 ? rootNode : rootNode.firstChild;\n }\n return hydrationInfo?.firstChild;\n }\n const currentNode = findHydrationRoot();\n ngDevMode && assertDefined(currentNode, 'Expected root i18n node during hydration');\n const disconnectedNodes = initDisconnectedNodes(hydrationInfo) ?? new Set();\n const i18nNodes = hydrationInfo.i18nNodes ??= new Map();\n const caseQueue = hydrationInfo.data[I18N_DATA]?.[index - HEADER_OFFSET] ?? [];\n const dehydratedIcuData = hydrationInfo.dehydratedIcuData ??= new Map();\n collectI18nNodesFromDom({\n hydrationInfo,\n lView,\n i18nNodes,\n disconnectedNodes,\n caseQueue,\n dehydratedIcuData\n }, {\n currentNode,\n isConnected: true\n }, tI18n.ast);\n hydrationInfo.disconnectedNodes = disconnectedNodes.size === 0 ? null : disconnectedNodes;\n}\nfunction collectI18nNodesFromDom(context, state, nodeOrNodes) {\n if (Array.isArray(nodeOrNodes)) {\n let nextState = state;\n for (const node of nodeOrNodes) {\n const targetNode = tryLocateRNodeByPath(context.hydrationInfo, context.lView, node.index - HEADER_OFFSET);\n if (targetNode) {\n nextState = forkHydrationState(state, targetNode);\n }\n collectI18nNodesFromDom(context, nextState, node);\n }\n } else {\n if (context.disconnectedNodes.has(nodeOrNodes.index - HEADER_OFFSET)) {\n return;\n }\n switch (nodeOrNodes.kind) {\n case 0:\n {\n const currentNode = appendI18nNodeToCollection(context, state, nodeOrNodes);\n setCurrentNode(state, currentNode?.nextSibling ?? null);\n break;\n }\n case 1:\n {\n collectI18nNodesFromDom(context, forkHydrationState(state, state.currentNode?.firstChild ?? null), nodeOrNodes.children);\n const currentNode = appendI18nNodeToCollection(context, state, nodeOrNodes);\n setCurrentNode(state, currentNode?.nextSibling ?? null);\n break;\n }\n case 2:\n {\n const noOffsetIndex = nodeOrNodes.index - HEADER_OFFSET;\n const {\n hydrationInfo\n } = context;\n const containerSize = getNgContainerSize(hydrationInfo, noOffsetIndex);\n switch (nodeOrNodes.type) {\n case 0:\n {\n const currentNode = appendI18nNodeToCollection(context, state, nodeOrNodes);\n if (isSerializedElementContainer(hydrationInfo, noOffsetIndex)) {\n collectI18nNodesFromDom(context, state, nodeOrNodes.children);\n const nextNode = skipSiblingNodes(state, 1);\n setCurrentNode(state, nextNode);\n } else {\n collectI18nNodesFromDom(context, forkHydrationState(state, state.currentNode?.firstChild ?? null), nodeOrNodes.children);\n setCurrentNode(state, currentNode?.nextSibling ?? null);\n if (containerSize !== null) {\n const nextNode = skipSiblingNodes(state, containerSize + 1);\n setCurrentNode(state, nextNode);\n }\n }\n break;\n }\n case 1:\n {\n ngDevMode && assertNotEqual(containerSize, null, 'Expected a container size while hydrating i18n subtemplate');\n appendI18nNodeToCollection(context, state, nodeOrNodes);\n const nextNode = skipSiblingNodes(state, containerSize + 1);\n setCurrentNode(state, nextNode);\n break;\n }\n }\n break;\n }\n case 3:\n {\n const selectedCase = state.isConnected ? context.caseQueue.shift() : null;\n const childState = {\n currentNode: null,\n isConnected: false\n };\n for (let i = 0; i < nodeOrNodes.cases.length; i++) {\n collectI18nNodesFromDom(context, i === selectedCase ? state : childState, nodeOrNodes.cases[i]);\n }\n if (selectedCase !== null) {\n context.dehydratedIcuData.set(nodeOrNodes.index, {\n case: selectedCase,\n node: nodeOrNodes\n });\n }\n const currentNode = appendI18nNodeToCollection(context, state, nodeOrNodes);\n setCurrentNode(state, currentNode?.nextSibling ?? null);\n break;\n }\n }\n }\n}\nlet _claimDehydratedIcuCaseImpl = () => {};\nfunction claimDehydratedIcuCase(lView, icuIndex, caseIndex) {\n _claimDehydratedIcuCaseImpl(lView, icuIndex, caseIndex);\n}\nfunction enableClaimDehydratedIcuCaseImpl() {\n _claimDehydratedIcuCaseImpl = claimDehydratedIcuCaseImpl;\n}\nfunction claimDehydratedIcuCaseImpl(lView, icuIndex, caseIndex) {\n const dehydratedIcuDataMap = lView[HYDRATION]?.dehydratedIcuData;\n if (dehydratedIcuDataMap) {\n const dehydratedIcuData = dehydratedIcuDataMap.get(icuIndex);\n if (dehydratedIcuData?.case === caseIndex) {\n dehydratedIcuDataMap.delete(icuIndex);\n }\n }\n}\nfunction cleanupI18nHydrationData(lView) {\n const hydrationInfo = lView[HYDRATION];\n if (hydrationInfo) {\n const {\n i18nNodes,\n dehydratedIcuData: dehydratedIcuDataMap\n } = hydrationInfo;\n if (i18nNodes && dehydratedIcuDataMap) {\n const renderer = lView[RENDERER];\n for (const dehydratedIcuData of dehydratedIcuDataMap.values()) {\n cleanupDehydratedIcuData(renderer, i18nNodes, dehydratedIcuData);\n }\n }\n hydrationInfo.i18nNodes = undefined;\n hydrationInfo.dehydratedIcuData = undefined;\n }\n}\nfunction cleanupDehydratedIcuData(renderer, i18nNodes, dehydratedIcuData) {\n for (const node of dehydratedIcuData.node.cases[dehydratedIcuData.case]) {\n const rNode = i18nNodes.get(node.index - HEADER_OFFSET);\n if (rNode) {\n nativeRemoveNode(renderer, rNode, false);\n }\n }\n}\nfunction removeDehydratedViews(lContainer) {\n const views = lContainer[DEHYDRATED_VIEWS] ?? [];\n const parentLView = lContainer[PARENT];\n const renderer = parentLView[RENDERER];\n const retainedViews = [];\n for (const view of views) {\n if (view.data[DEFER_BLOCK_ID] !== undefined) {\n retainedViews.push(view);\n } else {\n removeDehydratedView(view, renderer);\n ngDevMode && ngDevMode.dehydratedViewsRemoved++;\n }\n }\n lContainer[DEHYDRATED_VIEWS] = retainedViews;\n}\nfunction removeDehydratedViewList(deferBlock) {\n const {\n lContainer\n } = deferBlock;\n const dehydratedViews = lContainer[DEHYDRATED_VIEWS];\n if (dehydratedViews === null) return;\n const parentLView = lContainer[PARENT];\n const renderer = parentLView[RENDERER];\n for (const view of dehydratedViews) {\n removeDehydratedView(view, renderer);\n ngDevMode && ngDevMode.dehydratedViewsRemoved++;\n }\n}\nfunction removeDehydratedView(dehydratedView, renderer) {\n let nodesRemoved = 0;\n let currentRNode = dehydratedView.firstChild;\n if (currentRNode) {\n const numNodes = dehydratedView.data[NUM_ROOT_NODES];\n while (nodesRemoved < numNodes) {\n ngDevMode && validateSiblingNodeExists(currentRNode);\n const nextSibling = currentRNode.nextSibling;\n nativeRemoveNode(renderer, currentRNode, false);\n currentRNode = nextSibling;\n nodesRemoved++;\n }\n }\n}\nfunction cleanupLContainer(lContainer) {\n removeDehydratedViews(lContainer);\n const hostLView = lContainer[HOST];\n if (isLView(hostLView)) {\n cleanupLView(hostLView);\n }\n for (let i = CONTAINER_HEADER_OFFSET; i < lContainer.length; i++) {\n cleanupLView(lContainer[i]);\n }\n}\nfunction cleanupLView(lView) {\n cleanupI18nHydrationData(lView);\n const tView = lView[TVIEW];\n for (let i = HEADER_OFFSET; i < tView.bindingStartIndex; i++) {\n if (isLContainer(lView[i])) {\n const lContainer = lView[i];\n cleanupLContainer(lContainer);\n } else if (isLView(lView[i])) {\n cleanupLView(lView[i]);\n }\n }\n}\nfunction cleanupDehydratedViews(appRef) {\n const viewRefs = appRef._views;\n for (const viewRef of viewRefs) {\n const lNode = getLNodeForHydration(viewRef);\n if (lNode !== null && lNode[HOST] !== null) {\n if (isLView(lNode)) {\n cleanupLView(lNode);\n } else {\n cleanupLContainer(lNode);\n }\n ngDevMode && ngDevMode.dehydratedViewsCleanupRuns++;\n }\n }\n}\nfunction cleanupHydratedDeferBlocks(deferBlock, hydratedBlocks, registry, appRef) {\n if (deferBlock !== null) {\n registry.cleanup(hydratedBlocks);\n cleanupLContainer(deferBlock.lContainer);\n cleanupDehydratedViews(appRef);\n }\n}\nfunction locateDehydratedViewsInContainer(currentRNode, serializedViews) {\n const dehydratedViews = [];\n for (const serializedView of serializedViews) {\n for (let i = 0; i < (serializedView[MULTIPLIER] ?? 1); i++) {\n const view = {\n data: serializedView,\n firstChild: null\n };\n if (serializedView[NUM_ROOT_NODES] > 0) {\n view.firstChild = currentRNode;\n currentRNode = siblingAfter(serializedView[NUM_ROOT_NODES], currentRNode);\n }\n dehydratedViews.push(view);\n }\n }\n return [currentRNode, dehydratedViews];\n}\nlet _findMatchingDehydratedViewImpl = () => null;\nlet _findAndReconcileMatchingDehydratedViewsImpl = () => null;\nfunction enableFindMatchingDehydratedViewImpl() {\n _findMatchingDehydratedViewImpl = findMatchingDehydratedViewImpl;\n _findAndReconcileMatchingDehydratedViewsImpl = findAndReconcileMatchingDehydratedViewsImpl;\n}\nfunction findMatchingDehydratedViewImpl(lContainer, template) {\n if (hasMatchingDehydratedView(lContainer, template)) {\n return lContainer[DEHYDRATED_VIEWS].shift();\n } else {\n removeDehydratedViews(lContainer);\n return null;\n }\n}\nfunction findMatchingDehydratedView(lContainer, template) {\n return _findMatchingDehydratedViewImpl(lContainer, template);\n}\nfunction findAndReconcileMatchingDehydratedViewsImpl(lContainer, templateTNode, hostLView) {\n if (templateTNode.tView.ssrId === null) return null;\n const dehydratedView = findMatchingDehydratedView(lContainer, templateTNode.tView.ssrId);\n if (hostLView[TVIEW].firstUpdatePass && dehydratedView === null) {\n removeStaleDehydratedBranch(hostLView, templateTNode);\n }\n return dehydratedView;\n}\nfunction findAndReconcileMatchingDehydratedViews(lContainer, templateTNode, hostLView) {\n return _findAndReconcileMatchingDehydratedViewsImpl(lContainer, templateTNode, hostLView);\n}\nfunction removeStaleDehydratedBranch(hostLView, tNode) {\n let currentTNode = tNode;\n while (currentTNode) {\n if (cleanupMatchingDehydratedViews(hostLView, currentTNode)) return;\n if ((currentTNode.flags & 256) === 256) {\n break;\n }\n currentTNode = currentTNode.prev;\n }\n currentTNode = tNode.next;\n while (currentTNode) {\n if ((currentTNode.flags & 512) !== 512) {\n break;\n }\n if (cleanupMatchingDehydratedViews(hostLView, currentTNode)) return;\n currentTNode = currentTNode.next;\n }\n}\nfunction hasMatchingDehydratedView(lContainer, template) {\n const views = lContainer[DEHYDRATED_VIEWS];\n if (!template || views === null || views.length === 0) {\n return false;\n }\n return views[0].data[TEMPLATE_ID] === template;\n}\nfunction cleanupMatchingDehydratedViews(hostLView, currentTNode) {\n const ssrId = currentTNode.tView?.ssrId;\n if (ssrId == null) return false;\n const container = hostLView[currentTNode.index];\n if (isLContainer(container) && hasMatchingDehydratedView(container, ssrId)) {\n removeDehydratedViews(container);\n return true;\n }\n return false;\n}\nlet ComponentRef$1 = class ComponentRef {};\nlet ComponentFactory$1 = class ComponentFactory {};\nclass _NullComponentFactoryResolver {\n resolveComponentFactory(component) {\n throw new RuntimeError(917, typeof ngDevMode !== 'undefined' && ngDevMode && `No component factory found for ${stringify(component)}.`);\n }\n}\nlet ComponentFactoryResolver$1 = class ComponentFactoryResolver {\n static NULL = /*#__PURE__*/new _NullComponentFactoryResolver();\n};\nclass RendererFactory2 {}\nlet Renderer2 = /*#__PURE__*/(() => {\n class Renderer2 {\n destroyNode = null;\n static __NG_ELEMENT_ID__ = () => injectRenderer2();\n }\n return Renderer2;\n})();\nfunction injectRenderer2() {\n const lView = getLView();\n const tNode = getCurrentTNode();\n const nodeAtIndex = getComponentLViewByIndex(tNode.index, lView);\n return (isLView(nodeAtIndex) ? nodeAtIndex : lView)[RENDERER];\n}\nlet Sanitizer = /*#__PURE__*/(() => {\n class Sanitizer {\n static \u0275prov = /* @__PURE__ */\n __defineInjectable({\n token: Sanitizer,\n providedIn: 'root',\n factory: () => null\n });\n }\n return Sanitizer;\n})();\nfunction isModuleWithProviders(value) {\n return value.ngModule !== undefined;\n}\nfunction isNgModule(value) {\n return !!getNgModuleDef(value);\n}\nfunction isPipe(value) {\n return !!getPipeDef$1(value);\n}\nfunction isDirective(value) {\n return !!getDirectiveDef(value);\n}\nfunction isComponent(value) {\n return !!getComponentDef(value);\n}\nfunction getDependencyTypeForError(type) {\n if (getComponentDef(type)) return 'component';\n if (getDirectiveDef(type)) return 'directive';\n if (getPipeDef$1(type)) return 'pipe';\n return 'type';\n}\nfunction verifyStandaloneImport(depType, importingType) {\n if (isForwardRef(depType)) {\n depType = resolveForwardRef(depType);\n if (!depType) {\n throw new Error(`Expected forwardRef function, imported from \"${stringifyForError(importingType)}\", to return a standalone entity or NgModule but got \"${stringifyForError(depType) || depType}\".`);\n }\n }\n if (getNgModuleDef(depType) == null) {\n const def = getComponentDef(depType) || getDirectiveDef(depType) || getPipeDef$1(depType);\n if (def != null) {\n if (!def.standalone) {\n const type = getDependencyTypeForError(depType);\n throw new Error(`The \"${stringifyForError(depType)}\" ${type}, imported from \"${stringifyForError(importingType)}\", is not standalone. Does the ${type} have the standalone: false flag?`);\n }\n } else {\n if (isModuleWithProviders(depType)) {\n throw new Error(`A module with providers was imported from \"${stringifyForError(importingType)}\". Modules with providers are not supported in standalone components imports.`);\n } else {\n throw new Error(`The \"${stringifyForError(depType)}\" type, imported from \"${stringifyForError(importingType)}\", must be a standalone component / directive / pipe or an NgModule. Did you forget to add the required @Component / @Directive / @Pipe or @NgModule annotation?`);\n }\n }\n }\n}\nclass DepsTracker {\n ownerNgModule = /*#__PURE__*/new WeakMap();\n ngModulesWithSomeUnresolvedDecls = /*#__PURE__*/new Set();\n ngModulesScopeCache = /*#__PURE__*/new WeakMap();\n standaloneComponentsScopeCache = /*#__PURE__*/new WeakMap();\n resolveNgModulesDecls() {\n if (this.ngModulesWithSomeUnresolvedDecls.size === 0) {\n return;\n }\n for (const moduleType of this.ngModulesWithSomeUnresolvedDecls) {\n const def = getNgModuleDef(moduleType);\n if (def?.declarations) {\n for (const decl of maybeUnwrapFn(def.declarations)) {\n if (isComponent(decl)) {\n this.ownerNgModule.set(decl, moduleType);\n }\n }\n }\n }\n this.ngModulesWithSomeUnresolvedDecls.clear();\n }\n getComponentDependencies(type, rawImports) {\n this.resolveNgModulesDecls();\n const def = getComponentDef(type);\n if (def === null) {\n throw new Error(`Attempting to get component dependencies for a type that is not a component: ${type}`);\n }\n if (def.standalone) {\n const scope = this.getStandaloneComponentScope(type, rawImports);\n if (scope.compilation.isPoisoned) {\n return {\n dependencies: []\n };\n }\n return {\n dependencies: [...scope.compilation.directives, ...scope.compilation.pipes, ...scope.compilation.ngModules]\n };\n } else {\n if (!this.ownerNgModule.has(type)) {\n return {\n dependencies: []\n };\n }\n const scope = this.getNgModuleScope(this.ownerNgModule.get(type));\n if (scope.compilation.isPoisoned) {\n return {\n dependencies: []\n };\n }\n return {\n dependencies: [...scope.compilation.directives, ...scope.compilation.pipes]\n };\n }\n }\n registerNgModule(type, scopeInfo) {\n if (!isNgModule(type)) {\n throw new Error(`Attempting to register a Type which is not NgModule as NgModule: ${type}`);\n }\n this.ngModulesWithSomeUnresolvedDecls.add(type);\n }\n clearScopeCacheFor(type) {\n this.ngModulesScopeCache.delete(type);\n this.standaloneComponentsScopeCache.delete(type);\n }\n getNgModuleScope(type) {\n if (this.ngModulesScopeCache.has(type)) {\n return this.ngModulesScopeCache.get(type);\n }\n const scope = this.computeNgModuleScope(type);\n this.ngModulesScopeCache.set(type, scope);\n return scope;\n }\n computeNgModuleScope(type) {\n const def = getNgModuleDefOrThrow(type);\n const scope = {\n exported: {\n directives: new Set(),\n pipes: new Set()\n },\n compilation: {\n directives: new Set(),\n pipes: new Set()\n }\n };\n for (const imported of maybeUnwrapFn(def.imports)) {\n if (isNgModule(imported)) {\n const importedScope = this.getNgModuleScope(imported);\n addSet(importedScope.exported.directives, scope.compilation.directives);\n addSet(importedScope.exported.pipes, scope.compilation.pipes);\n } else if (isStandalone(imported)) {\n if (isDirective(imported) || isComponent(imported)) {\n scope.compilation.directives.add(imported);\n } else if (isPipe(imported)) {\n scope.compilation.pipes.add(imported);\n } else {\n throw new RuntimeError(980, 'The standalone imported type is neither a component nor a directive nor a pipe');\n }\n } else {\n scope.compilation.isPoisoned = true;\n break;\n }\n }\n if (!scope.compilation.isPoisoned) {\n for (const decl of maybeUnwrapFn(def.declarations)) {\n if (isNgModule(decl) || isStandalone(decl)) {\n scope.compilation.isPoisoned = true;\n break;\n }\n if (isPipe(decl)) {\n scope.compilation.pipes.add(decl);\n } else {\n scope.compilation.directives.add(decl);\n }\n }\n }\n for (const exported of maybeUnwrapFn(def.exports)) {\n if (isNgModule(exported)) {\n const exportedScope = this.getNgModuleScope(exported);\n addSet(exportedScope.exported.directives, scope.exported.directives);\n addSet(exportedScope.exported.pipes, scope.exported.pipes);\n addSet(exportedScope.exported.directives, scope.compilation.directives);\n addSet(exportedScope.exported.pipes, scope.compilation.pipes);\n } else if (isPipe(exported)) {\n scope.exported.pipes.add(exported);\n } else {\n scope.exported.directives.add(exported);\n }\n }\n return scope;\n }\n getStandaloneComponentScope(type, rawImports) {\n if (this.standaloneComponentsScopeCache.has(type)) {\n return this.standaloneComponentsScopeCache.get(type);\n }\n const ans = this.computeStandaloneComponentScope(type, rawImports);\n this.standaloneComponentsScopeCache.set(type, ans);\n return ans;\n }\n computeStandaloneComponentScope(type, rawImports) {\n const ans = {\n compilation: {\n directives: new Set([type]),\n pipes: new Set(),\n ngModules: new Set()\n }\n };\n for (const rawImport of flatten(rawImports ?? [])) {\n const imported = resolveForwardRef(rawImport);\n try {\n verifyStandaloneImport(imported, type);\n } catch (e) {\n ans.compilation.isPoisoned = true;\n return ans;\n }\n if (isNgModule(imported)) {\n ans.compilation.ngModules.add(imported);\n const importedScope = this.getNgModuleScope(imported);\n if (importedScope.exported.isPoisoned) {\n ans.compilation.isPoisoned = true;\n return ans;\n }\n addSet(importedScope.exported.directives, ans.compilation.directives);\n addSet(importedScope.exported.pipes, ans.compilation.pipes);\n } else if (isPipe(imported)) {\n ans.compilation.pipes.add(imported);\n } else if (isDirective(imported) || isComponent(imported)) {\n ans.compilation.directives.add(imported);\n } else {\n ans.compilation.isPoisoned = true;\n return ans;\n }\n }\n return ans;\n }\n isOrphanComponent(cmp) {\n const def = getComponentDef(cmp);\n if (!def || def.standalone) {\n return false;\n }\n this.resolveNgModulesDecls();\n return !this.ownerNgModule.has(cmp);\n }\n}\nfunction addSet(sourceSet, targetSet) {\n for (const m of sourceSet) {\n targetSet.add(m);\n }\n}\nconst depsTracker = /*#__PURE__*/new DepsTracker();\nconst NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR = {};\nclass ChainedInjector {\n injector;\n parentInjector;\n constructor(injector, parentInjector) {\n this.injector = injector;\n this.parentInjector = parentInjector;\n }\n get(token, notFoundValue, options) {\n const value = this.injector.get(token, NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR, options);\n if (value !== NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR || notFoundValue === NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR) {\n return value;\n }\n return this.parentInjector.get(token, notFoundValue, options);\n }\n}\nfunction computeStaticStyling(tNode, attrs, writeToHost) {\n ngDevMode && assertFirstCreatePass(getTView(), 'Expecting to be called in first template pass only');\n let styles = writeToHost ? tNode.styles : null;\n let classes = writeToHost ? tNode.classes : null;\n let mode = 0;\n if (attrs !== null) {\n for (let i = 0; i < attrs.length; i++) {\n const value = attrs[i];\n if (typeof value === 'number') {\n mode = value;\n } else if (mode == 1) {\n classes = concatStringsWithSpace(classes, value);\n } else if (mode == 2) {\n const style = value;\n const styleValue = attrs[++i];\n styles = concatStringsWithSpace(styles, style + ': ' + styleValue + ';');\n }\n }\n }\n writeToHost ? tNode.styles = styles : tNode.stylesWithoutHost = styles;\n writeToHost ? tNode.classes = classes : tNode.classesWithoutHost = classes;\n}\nfunction \u0275\u0275directiveInject(token, flags = 0) {\n const lView = getLView();\n if (lView === null) {\n ngDevMode && assertInjectImplementationNotEqual(\u0275\u0275directiveInject);\n return __inject(token, flags);\n }\n const tNode = getCurrentTNode();\n const value = getOrCreateInjectable(tNode, lView, resolveForwardRef(token), flags);\n ngDevMode && emitInjectEvent(token, value, flags);\n return value;\n}\nfunction \u0275\u0275invalidFactory() {\n const msg = ngDevMode ? `This constructor was not compatible with Dependency Injection.` : 'invalid';\n throw new Error(msg);\n}\nfunction resolveDirectives(tView, lView, tNode, localRefs, directiveMatcher) {\n ngDevMode && assertFirstCreatePass(tView);\n const exportsMap = localRefs === null ? null : {\n '': -1\n };\n const matchedDirectiveDefs = directiveMatcher(tView, tNode);\n if (matchedDirectiveDefs !== null) {\n let directiveDefs = matchedDirectiveDefs;\n let hostDirectiveDefs = null;\n let hostDirectiveRanges = null;\n for (const def of matchedDirectiveDefs) {\n if (def.resolveHostDirectives !== null) {\n [directiveDefs, hostDirectiveDefs, hostDirectiveRanges] = def.resolveHostDirectives(matchedDirectiveDefs);\n break;\n }\n }\n ngDevMode && assertNoDuplicateDirectives(directiveDefs);\n initializeDirectives(tView, lView, tNode, directiveDefs, exportsMap, hostDirectiveDefs, hostDirectiveRanges);\n }\n if (exportsMap !== null && localRefs !== null) {\n cacheMatchingLocalNames(tNode, localRefs, exportsMap);\n }\n}\nfunction cacheMatchingLocalNames(tNode, localRefs, exportsMap) {\n const localNames = tNode.localNames = [];\n for (let i = 0; i < localRefs.length; i += 2) {\n const index = exportsMap[localRefs[i + 1]];\n if (index == null) throw new RuntimeError(-301, ngDevMode && `Export of name '${localRefs[i + 1]}' not found!`);\n localNames.push(localRefs[i], index);\n }\n}\nfunction markAsComponentHost(tView, hostTNode, componentOffset) {\n ngDevMode && assertFirstCreatePass(tView);\n ngDevMode && assertGreaterThan(componentOffset, -1, 'componentOffset must be great than -1');\n hostTNode.componentOffset = componentOffset;\n (tView.components ??= []).push(hostTNode.index);\n}\nfunction initializeDirectives(tView, lView, tNode, directives, exportsMap, hostDirectiveDefs, hostDirectiveRanges) {\n ngDevMode && assertFirstCreatePass(tView);\n const directivesLength = directives.length;\n let componentDef = null;\n for (let i = 0; i < directivesLength; i++) {\n const def = directives[i];\n if (componentDef === null && isComponentDef(def)) {\n componentDef = def;\n markAsComponentHost(tView, tNode, i);\n }\n diPublicInInjector(getOrCreateNodeInjectorForNode(tNode, lView), tView, def.type);\n }\n initTNodeFlags(tNode, tView.data.length, directivesLength);\n if (componentDef?.viewProvidersResolver) {\n componentDef.viewProvidersResolver(componentDef);\n }\n for (let i = 0; i < directivesLength; i++) {\n const def = directives[i];\n if (def.providersResolver) {\n def.providersResolver(def);\n }\n }\n let preOrderHooksFound = false;\n let preOrderCheckHooksFound = false;\n let directiveIdx = allocExpando(tView, lView, directivesLength, null);\n ngDevMode && assertSame(directiveIdx, tNode.directiveStart, 'TNode.directiveStart should point to just allocated space');\n if (directivesLength > 0) {\n tNode.directiveToIndex = new Map();\n }\n for (let i = 0; i < directivesLength; i++) {\n const def = directives[i];\n tNode.mergedAttrs = mergeHostAttrs(tNode.mergedAttrs, def.hostAttrs);\n configureViewWithDirective(tView, tNode, lView, directiveIdx, def);\n saveNameToExportMap(directiveIdx, def, exportsMap);\n if (hostDirectiveRanges !== null && hostDirectiveRanges.has(def)) {\n const [start, end] = hostDirectiveRanges.get(def);\n tNode.directiveToIndex.set(def.type, [directiveIdx, start + tNode.directiveStart, end + tNode.directiveStart]);\n } else if (hostDirectiveDefs === null || !hostDirectiveDefs.has(def)) {\n tNode.directiveToIndex.set(def.type, directiveIdx);\n }\n if (def.contentQueries !== null) tNode.flags |= 4;\n if (def.hostBindings !== null || def.hostAttrs !== null || def.hostVars !== 0) tNode.flags |= 64;\n const lifeCycleHooks = def.type.prototype;\n if (!preOrderHooksFound && (lifeCycleHooks.ngOnChanges || lifeCycleHooks.ngOnInit || lifeCycleHooks.ngDoCheck)) {\n (tView.preOrderHooks ??= []).push(tNode.index);\n preOrderHooksFound = true;\n }\n if (!preOrderCheckHooksFound && (lifeCycleHooks.ngOnChanges || lifeCycleHooks.ngDoCheck)) {\n (tView.preOrderCheckHooks ??= []).push(tNode.index);\n preOrderCheckHooksFound = true;\n }\n directiveIdx++;\n }\n initializeInputAndOutputAliases(tView, tNode, hostDirectiveDefs);\n}\nfunction initializeInputAndOutputAliases(tView, tNode, hostDirectiveDefs) {\n ngDevMode && assertFirstCreatePass(tView);\n for (let index = tNode.directiveStart; index < tNode.directiveEnd; index++) {\n const directiveDef = tView.data[index];\n if (hostDirectiveDefs === null || !hostDirectiveDefs.has(directiveDef)) {\n setupSelectorMatchedInputsOrOutputs(0, tNode, directiveDef, index);\n setupSelectorMatchedInputsOrOutputs(1, tNode, directiveDef, index);\n setupInitialInputs(tNode, index, false);\n } else {\n const hostDirectiveDef = hostDirectiveDefs.get(directiveDef);\n setupHostDirectiveInputsOrOutputs(0, tNode, hostDirectiveDef, index);\n setupHostDirectiveInputsOrOutputs(1, tNode, hostDirectiveDef, index);\n setupInitialInputs(tNode, index, true);\n }\n }\n}\nfunction setupSelectorMatchedInputsOrOutputs(mode, tNode, def, directiveIndex) {\n const aliasMap = mode === 0 ? def.inputs : def.outputs;\n for (const publicName in aliasMap) {\n if (aliasMap.hasOwnProperty(publicName)) {\n let bindings;\n if (mode === 0) {\n bindings = tNode.inputs ??= {};\n } else {\n bindings = tNode.outputs ??= {};\n }\n bindings[publicName] ??= [];\n bindings[publicName].push(directiveIndex);\n setShadowStylingInputFlags(tNode, publicName);\n }\n }\n}\nfunction setupHostDirectiveInputsOrOutputs(mode, tNode, config, directiveIndex) {\n const aliasMap = mode === 0 ? config.inputs : config.outputs;\n for (const initialName in aliasMap) {\n if (aliasMap.hasOwnProperty(initialName)) {\n const publicName = aliasMap[initialName];\n let bindings;\n if (mode === 0) {\n bindings = tNode.hostDirectiveInputs ??= {};\n } else {\n bindings = tNode.hostDirectiveOutputs ??= {};\n }\n bindings[publicName] ??= [];\n bindings[publicName].push(directiveIndex, initialName);\n setShadowStylingInputFlags(tNode, publicName);\n }\n }\n}\nfunction setShadowStylingInputFlags(tNode, publicName) {\n if (publicName === 'class') {\n tNode.flags |= 8;\n } else if (publicName === 'style') {\n tNode.flags |= 16;\n }\n}\nfunction setupInitialInputs(tNode, directiveIndex, isHostDirective) {\n const {\n attrs,\n inputs,\n hostDirectiveInputs\n } = tNode;\n if (attrs === null || !isHostDirective && inputs === null || isHostDirective && hostDirectiveInputs === null || isInlineTemplate(tNode)) {\n tNode.initialInputs ??= [];\n tNode.initialInputs.push(null);\n return;\n }\n let inputsToStore = null;\n let i = 0;\n while (i < attrs.length) {\n const attrName = attrs[i];\n if (attrName === 0) {\n i += 4;\n continue;\n } else if (attrName === 5) {\n i += 2;\n continue;\n } else if (typeof attrName === 'number') {\n break;\n }\n if (!isHostDirective && inputs.hasOwnProperty(attrName)) {\n const inputConfig = inputs[attrName];\n for (const index of inputConfig) {\n if (index === directiveIndex) {\n inputsToStore ??= [];\n inputsToStore.push(attrName, attrs[i + 1]);\n break;\n }\n }\n } else if (isHostDirective && hostDirectiveInputs.hasOwnProperty(attrName)) {\n const config = hostDirectiveInputs[attrName];\n for (let j = 0; j < config.length; j += 2) {\n if (config[j] === directiveIndex) {\n inputsToStore ??= [];\n inputsToStore.push(config[j + 1], attrs[i + 1]);\n break;\n }\n }\n }\n i += 2;\n }\n tNode.initialInputs ??= [];\n tNode.initialInputs.push(inputsToStore);\n}\nfunction configureViewWithDirective(tView, tNode, lView, directiveIndex, def) {\n ngDevMode && assertGreaterThanOrEqual(directiveIndex, HEADER_OFFSET, 'Must be in Expando section');\n tView.data[directiveIndex] = def;\n const directiveFactory = def.factory || (def.factory = getFactoryDef(def.type, true));\n const nodeInjectorFactory = new NodeInjectorFactory(directiveFactory, isComponentDef(def), \u0275\u0275directiveInject, ngDevMode ? def.type.name : null);\n tView.blueprint[directiveIndex] = nodeInjectorFactory;\n lView[directiveIndex] = nodeInjectorFactory;\n registerHostBindingOpCodes(tView, tNode, directiveIndex, allocExpando(tView, lView, def.hostVars, NO_CHANGE), def);\n}\nfunction registerHostBindingOpCodes(tView, tNode, directiveIdx, directiveVarsIdx, def) {\n ngDevMode && assertFirstCreatePass(tView);\n const hostBindings = def.hostBindings;\n if (hostBindings) {\n let hostBindingOpCodes = tView.hostBindingOpCodes;\n if (hostBindingOpCodes === null) {\n hostBindingOpCodes = tView.hostBindingOpCodes = [];\n }\n const elementIndx = ~tNode.index;\n if (lastSelectedElementIdx(hostBindingOpCodes) != elementIndx) {\n hostBindingOpCodes.push(elementIndx);\n }\n hostBindingOpCodes.push(directiveIdx, directiveVarsIdx, hostBindings);\n }\n}\nfunction lastSelectedElementIdx(hostBindingOpCodes) {\n let i = hostBindingOpCodes.length;\n while (i > 0) {\n const value = hostBindingOpCodes[--i];\n if (typeof value === 'number' && value < 0) {\n return value;\n }\n }\n return 0;\n}\nfunction saveNameToExportMap(directiveIdx, def, exportsMap) {\n if (exportsMap) {\n if (def.exportAs) {\n for (let i = 0; i < def.exportAs.length; i++) {\n exportsMap[def.exportAs[i]] = directiveIdx;\n }\n }\n if (isComponentDef(def)) exportsMap[''] = directiveIdx;\n }\n}\nfunction initTNodeFlags(tNode, index, numberOfDirectives) {\n ngDevMode && assertNotEqual(numberOfDirectives, tNode.directiveEnd - tNode.directiveStart, 'Reached the max number of directives');\n tNode.flags |= 1;\n tNode.directiveStart = index;\n tNode.directiveEnd = index + numberOfDirectives;\n tNode.providerIndexes = index;\n}\nfunction assertNoDuplicateDirectives(directives) {\n if (directives.length < 2) {\n return;\n }\n const seenDirectives = new Set();\n for (const current of directives) {\n if (seenDirectives.has(current)) {\n throw new RuntimeError(309, `Directive ${current.type.name} matches multiple times on the same element. ` + `Directives can only match an element once.`);\n }\n seenDirectives.add(current);\n }\n}\nfunction directiveHostFirstCreatePass(index, lView, type, name, directiveMatcher, bindingsEnabled, attrsIndex, localRefsIndex) {\n const tView = lView[TVIEW];\n ngDevMode && assertFirstCreatePass(tView);\n const tViewConsts = tView.consts;\n const attrs = getConstant(tViewConsts, attrsIndex);\n const tNode = getOrCreateTNode(tView, index, type, name, attrs);\n if (bindingsEnabled) {\n resolveDirectives(tView, lView, tNode, getConstant(tViewConsts, localRefsIndex), directiveMatcher);\n }\n tNode.mergedAttrs = mergeHostAttrs(tNode.mergedAttrs, tNode.attrs);\n if (tNode.attrs !== null) {\n computeStaticStyling(tNode, tNode.attrs, false);\n }\n if (tNode.mergedAttrs !== null) {\n computeStaticStyling(tNode, tNode.mergedAttrs, true);\n }\n if (tView.queries !== null) {\n tView.queries.elementStart(tView, tNode);\n }\n return tNode;\n}\nfunction directiveHostEndFirstCreatePass(tView, tNode) {\n ngDevMode && assertFirstCreatePass(tView);\n registerPostOrderHooks(tView, tNode);\n if (isContentQueryHost(tNode)) {\n tView.queries.elementEnd(tNode);\n }\n}\nfunction domOnlyFirstCreatePass(index, tView, type, name, attrsIndex, localRefsIndex) {\n ngDevMode && assertFirstCreatePass(tView);\n const tViewConsts = tView.consts;\n const attrs = getConstant(tViewConsts, attrsIndex);\n const tNode = getOrCreateTNode(tView, index, type, name, attrs);\n tNode.mergedAttrs = mergeHostAttrs(tNode.mergedAttrs, tNode.attrs);\n if (localRefsIndex != null) {\n const refs = getConstant(tViewConsts, localRefsIndex);\n tNode.localNames = [];\n for (let i = 0; i < refs.length; i += 2) {\n tNode.localNames.push(refs[i], -1);\n }\n }\n if (tNode.attrs !== null) {\n computeStaticStyling(tNode, tNode.attrs, false);\n }\n if (tNode.mergedAttrs !== null) {\n computeStaticStyling(tNode, tNode.mergedAttrs, true);\n }\n if (tView.queries !== null) {\n tView.queries.elementStart(tView, tNode);\n }\n return tNode;\n}\nfunction isListLikeIterable(obj) {\n if (!isJsObject(obj)) return false;\n return Array.isArray(obj) || !(obj instanceof Map) && Symbol.iterator in obj;\n}\nfunction areIterablesEqual(a, b, comparator) {\n const iterator1 = a[Symbol.iterator]();\n const iterator2 = b[Symbol.iterator]();\n while (true) {\n const item1 = iterator1.next();\n const item2 = iterator2.next();\n if (item1.done && item2.done) return true;\n if (item1.done || item2.done) return false;\n if (!comparator(item1.value, item2.value)) return false;\n }\n}\nfunction iterateListLike(obj, fn) {\n if (Array.isArray(obj)) {\n for (let i = 0; i < obj.length; i++) {\n fn(obj[i]);\n }\n } else {\n const iterator = obj[Symbol.iterator]();\n let item;\n while (!(item = iterator.next()).done) {\n fn(item.value);\n }\n }\n}\nfunction isJsObject(o) {\n return o !== null && (typeof o === 'function' || typeof o === 'object');\n}\nfunction devModeEqual(a, b) {\n const isListLikeIterableA = isListLikeIterable(a);\n const isListLikeIterableB = isListLikeIterable(b);\n if (isListLikeIterableA && isListLikeIterableB) {\n return areIterablesEqual(a, b, devModeEqual);\n } else {\n const isAObject = a && (typeof a === 'object' || typeof a === 'function');\n const isBObject = b && (typeof b === 'object' || typeof b === 'function');\n if (!isListLikeIterableA && isAObject && !isListLikeIterableB && isBObject) {\n return true;\n } else {\n return Object.is(a, b);\n }\n }\n}\nfunction updateBinding(lView, bindingIndex, value) {\n return lView[bindingIndex] = value;\n}\nfunction getBinding(lView, bindingIndex) {\n ngDevMode && assertIndexInRange(lView, bindingIndex);\n ngDevMode && assertNotSame(lView[bindingIndex], NO_CHANGE, 'Stored value should never be NO_CHANGE.');\n return lView[bindingIndex];\n}\nfunction bindingUpdated(lView, bindingIndex, value) {\n ngDevMode && assertLessThan(bindingIndex, lView.length, `Slot should have been initialized to NO_CHANGE`);\n if (value === NO_CHANGE) {\n return false;\n }\n const oldValue = lView[bindingIndex];\n if (Object.is(oldValue, value)) {\n return false;\n } else {\n if (ngDevMode && isInCheckNoChangesMode()) {\n const oldValueToCompare = oldValue !== NO_CHANGE ? oldValue : undefined;\n if (!devModeEqual(oldValueToCompare, value)) {\n const details = getExpressionChangedErrorDetails(lView, bindingIndex, oldValueToCompare, value);\n throwErrorIfNoChangesMode(oldValue === NO_CHANGE, details.oldValue, details.newValue, details.propName, lView);\n }\n return false;\n }\n lView[bindingIndex] = value;\n return true;\n }\n}\nfunction bindingUpdated2(lView, bindingIndex, exp1, exp2) {\n const different = bindingUpdated(lView, bindingIndex, exp1);\n return bindingUpdated(lView, bindingIndex + 1, exp2) || different;\n}\nfunction bindingUpdated3(lView, bindingIndex, exp1, exp2, exp3) {\n const different = bindingUpdated2(lView, bindingIndex, exp1, exp2);\n return bindingUpdated(lView, bindingIndex + 2, exp3) || different;\n}\nfunction bindingUpdated4(lView, bindingIndex, exp1, exp2, exp3, exp4) {\n const different = bindingUpdated2(lView, bindingIndex, exp1, exp2);\n return bindingUpdated2(lView, bindingIndex + 2, exp3, exp4) || different;\n}\nfunction wrapListener(tNode, lView, listenerFn) {\n return function wrapListenerIn_markDirtyAndPreventDefault(event) {\n const startView = isComponentHost(tNode) ? getComponentLViewByIndex(tNode.index, lView) : lView;\n markViewDirty(startView, 5);\n const context = lView[CONTEXT];\n let result = executeListenerWithErrorHandling(lView, context, listenerFn, event);\n let nextListenerFn = wrapListenerIn_markDirtyAndPreventDefault.__ngNextListenerFn__;\n while (nextListenerFn) {\n result = executeListenerWithErrorHandling(lView, context, nextListenerFn, event) && result;\n nextListenerFn = nextListenerFn.__ngNextListenerFn__;\n }\n return result;\n };\n}\nfunction executeListenerWithErrorHandling(lView, context, listenerFn, e) {\n const prevConsumer = setActiveConsumer$1(null);\n try {\n profiler(ProfilerEvent.OutputStart, context, listenerFn);\n return listenerFn(e) !== false;\n } catch (error) {\n handleUncaughtError(lView, error);\n return false;\n } finally {\n profiler(ProfilerEvent.OutputEnd, context, listenerFn);\n setActiveConsumer$1(prevConsumer);\n }\n}\nfunction listenToDomEvent(tNode, tView, lView, eventTargetResolver, renderer, eventName, originalListener, wrappedListener) {\n ngDevMode && assertNotSame(wrappedListener, originalListener, 'Expected wrapped and original listeners to be different.');\n const isTNodeDirectiveHost = isDirectiveHost(tNode);\n let hasCoalesced = false;\n let existingListener = null;\n if (!eventTargetResolver && isTNodeDirectiveHost) {\n existingListener = findExistingListener(tView, lView, eventName, tNode.index);\n }\n if (existingListener !== null) {\n const lastListenerFn = existingListener.__ngLastListenerFn__ || existingListener;\n lastListenerFn.__ngNextListenerFn__ = originalListener;\n existingListener.__ngLastListenerFn__ = originalListener;\n hasCoalesced = true;\n } else {\n const native = getNativeByTNode(tNode, lView);\n const target = eventTargetResolver ? eventTargetResolver(native) : native;\n stashEventListenerImpl(lView, target, eventName, wrappedListener);\n const cleanupFn = renderer.listen(target, eventName, wrappedListener);\n if (!isAnimationEventType(eventName)) {\n const idxOrTargetGetter = eventTargetResolver ? _lView => eventTargetResolver(unwrapRNode(_lView[tNode.index])) : tNode.index;\n storeListenerCleanup(idxOrTargetGetter, tView, lView, eventName, wrappedListener, cleanupFn, false);\n }\n }\n return hasCoalesced;\n}\nfunction isAnimationEventType(eventName) {\n return eventName.startsWith('animation') || eventName.startsWith('transition');\n}\nfunction findExistingListener(tView, lView, eventName, tNodeIndex) {\n const tCleanup = tView.cleanup;\n if (tCleanup != null) {\n for (let i = 0; i < tCleanup.length - 1; i += 2) {\n const cleanupEventName = tCleanup[i];\n if (cleanupEventName === eventName && tCleanup[i + 1] === tNodeIndex) {\n const lCleanup = lView[CLEANUP];\n const listenerIdxInLCleanup = tCleanup[i + 2];\n return lCleanup && lCleanup.length > listenerIdxInLCleanup ? lCleanup[listenerIdxInLCleanup] : null;\n }\n if (typeof cleanupEventName === 'string') {\n i += 2;\n }\n }\n }\n return null;\n}\nfunction storeListenerCleanup(indexOrTargetGetter, tView, lView, eventName, listenerFn, cleanup, isOutput) {\n const tCleanup = tView.firstCreatePass ? getOrCreateTViewCleanup(tView) : null;\n const lCleanup = getOrCreateLViewCleanup(lView);\n const index = lCleanup.length;\n lCleanup.push(listenerFn, cleanup);\n tCleanup && tCleanup.push(eventName, indexOrTargetGetter, index, (index + 1) * (isOutput ? -1 : 1));\n}\nfunction createOutputListener(tNode, lView, listenerFn, targetDef, eventName) {\n const wrappedListener = wrapListener(tNode, lView, listenerFn);\n const hasBound = listenToDirectiveOutput(tNode, lView, targetDef, eventName, wrappedListener);\n if (!hasBound && ngDevMode) {\n throw new RuntimeError(316, `${stringifyForError(targetDef.type)} does not have an output with a public name of \"${eventName}\".`);\n }\n}\nfunction listenToDirectiveOutput(tNode, lView, target, eventName, listenerFn) {\n let hostIndex = null;\n let hostDirectivesStart = null;\n let hostDirectivesEnd = null;\n let hasOutput = false;\n if (ngDevMode && !tNode.directiveToIndex?.has(target.type)) {\n throw new Error(`Node does not have a directive with type ${target.type.name}`);\n }\n const data = tNode.directiveToIndex.get(target.type);\n if (typeof data === 'number') {\n hostIndex = data;\n } else {\n [hostIndex, hostDirectivesStart, hostDirectivesEnd] = data;\n }\n if (hostDirectivesStart !== null && hostDirectivesEnd !== null && tNode.hostDirectiveOutputs?.hasOwnProperty(eventName)) {\n const hostDirectiveOutputs = tNode.hostDirectiveOutputs[eventName];\n for (let i = 0; i < hostDirectiveOutputs.length; i += 2) {\n const index = hostDirectiveOutputs[i];\n if (index >= hostDirectivesStart && index <= hostDirectivesEnd) {\n ngDevMode && assertIndexInRange(lView, index);\n hasOutput = true;\n listenToOutput(tNode, lView, index, hostDirectiveOutputs[i + 1], eventName, listenerFn);\n } else if (index > hostDirectivesEnd) {\n break;\n }\n }\n }\n if (target.outputs.hasOwnProperty(eventName)) {\n ngDevMode && assertIndexInRange(lView, hostIndex);\n hasOutput = true;\n listenToOutput(tNode, lView, hostIndex, eventName, eventName, listenerFn);\n }\n return hasOutput;\n}\nfunction listenToOutput(tNode, lView, directiveIndex, lookupName, eventName, listenerFn) {\n ngDevMode && assertIndexInRange(lView, directiveIndex);\n const instance = lView[directiveIndex];\n const tView = lView[TVIEW];\n const def = tView.data[directiveIndex];\n const propertyName = def.outputs[lookupName];\n const output = instance[propertyName];\n if (ngDevMode && !isOutputSubscribable(output)) {\n throw new Error(`@Output ${propertyName} not initialized in '${instance.constructor.name}'.`);\n }\n const subscription = output.subscribe(listenerFn);\n storeListenerCleanup(tNode.index, tView, lView, eventName, listenerFn, subscription, true);\n}\nfunction isOutputSubscribable(value) {\n return value != null && typeof value.subscribe === 'function';\n}\nfunction \u0275\u0275controlCreate() {\n controlCreateInternal();\n}\nfunction controlCreateInternal() {\n const lView = getLView();\n const tView = getTView();\n const tNode = getCurrentTNode();\n if (tView.firstCreatePass) {\n initializeControlFirstCreatePass(tView, tNode);\n }\n if (tNode.controlDirectiveIndex === -1) {\n return;\n }\n performanceMarkFeature('NgSignalForms');\n const instance = lView[tNode.controlDirectiveIndex];\n const controlDef = tView.data[tNode.controlDirectiveIndex].controlDef;\n controlDef.create(instance, new ControlDirectiveHostImpl(lView, tView, tNode));\n}\nfunction \u0275\u0275control() {\n controlUpdateInternal();\n}\nfunction controlUpdateInternal() {\n if (ngDevMode && isInCheckNoChangesMode()) {\n return;\n }\n const lView = getLView();\n const tView = getTView();\n const tNode = getSelectedTNode();\n if (tNode.controlDirectiveIndex === -1) {\n return;\n }\n const controlDef = tView.data[tNode.controlDirectiveIndex].controlDef;\n const instance = lView[tNode.controlDirectiveIndex];\n controlDef.update(instance, new ControlDirectiveHostImpl(lView, tView, tNode));\n}\nclass ControlDirectiveHostImpl {\n lView;\n tView;\n tNode;\n hasPassThrough;\n constructor(lView, tView, tNode) {\n this.lView = lView;\n this.tView = tView;\n this.tNode = tNode;\n this.hasPassThrough = !!(tNode.flags & 4096);\n }\n get customControl() {\n return this.tNode.customControlIndex !== -1 ? this.lView[this.tNode.customControlIndex] : undefined;\n }\n get descriptor() {\n if (ngDevMode && isComponentHost(this.tNode)) {\n const componentIndex = this.tNode.directiveStart + this.tNode.componentOffset;\n const componentDef = this.tView.data[componentIndex];\n return `Component ${debugStringifyTypeForError(componentDef.type)}`;\n }\n return `<${this.tNode.value}>`;\n }\n listenToCustomControlOutput(outputName, callback) {\n if (!hasOutput(this.tView.data[this.tNode.customControlIndex], outputName)) {\n return;\n }\n listenToOutput(this.tNode, this.lView, this.tNode.customControlIndex, outputName, outputName, wrapListener(this.tNode, this.lView, callback));\n }\n listenToCustomControlModel(listener) {\n const modelName = this.tNode.flags & 1024 ? 'valueChange' : 'checkedChange';\n listenToOutput(this.tNode, this.lView, this.tNode.customControlIndex, modelName, modelName, wrapListener(this.tNode, this.lView, listener));\n }\n listenToDom(eventName, listener) {\n listenToDomEvent(this.tNode, this.tView, this.lView, undefined, this.lView[RENDERER], eventName, listener, wrapListener(this.tNode, this.lView, listener));\n }\n setInputOnDirectives(inputName, value) {\n const directiveIndices = this.tNode.inputs?.[inputName];\n const hostDirectiveInputs = this.tNode.hostDirectiveInputs?.[inputName];\n if (!directiveIndices && !hostDirectiveInputs) {\n return false;\n }\n if (directiveIndices) {\n for (const index of directiveIndices) {\n const directiveDef = this.tView.data[index];\n const directive = this.lView[index];\n writeToDirectiveInput(directiveDef, directive, inputName, value);\n }\n }\n if (hostDirectiveInputs) {\n for (let i = 0; i < hostDirectiveInputs.length; i += 2) {\n const index = hostDirectiveInputs[i];\n const internalName = hostDirectiveInputs[i + 1];\n const directiveDef = this.tView.data[index];\n const directive = this.lView[index];\n writeToDirectiveInput(directiveDef, directive, internalName, value);\n }\n }\n return true;\n }\n setCustomControlModelInput(value) {\n const directive = this.lView[this.tNode.customControlIndex];\n const directiveDef = this.tView.data[this.tNode.customControlIndex];\n const modelName = this.tNode.flags & 1024 ? 'value' : 'checked';\n writeToDirectiveInput(directiveDef, directive, modelName, value);\n }\n customControlHasInput(inputName) {\n if (this.tNode.customControlIndex === -1) {\n return false;\n }\n const directiveDef = this.tView.data[this.tNode.customControlIndex];\n return directiveDef.inputs[inputName] != undefined;\n }\n}\nfunction initializeControlFirstCreatePass(tView, tNode, lView) {\n ngDevMode && assertFirstCreatePass(tView);\n for (let i = tNode.directiveStart; i < tNode.directiveEnd; i++) {\n const directiveDef = tView.data[i];\n if (directiveDef.controlDef) {\n tNode.controlDirectiveIndex = i;\n break;\n }\n }\n if (tNode.controlDirectiveIndex === -1) {\n return;\n }\n const controlDef = tView.data[tNode.controlDirectiveIndex].controlDef;\n if (controlDef.passThroughInput) {\n if ((tNode.inputs?.[controlDef.passThroughInput]?.length ?? 0) > 1) {\n tNode.flags |= 4096;\n return;\n }\n }\n initializeCustomControlStatus(tView, tNode);\n}\nfunction initializeCustomControlStatus(tView, tNode) {\n for (let i = tNode.directiveStart; i < tNode.directiveEnd; i++) {\n const directiveDef = tView.data[i];\n if (hasModelInput(directiveDef, 'value')) {\n tNode.flags |= 1024;\n tNode.customControlIndex = i;\n return;\n }\n if (hasModelInput(directiveDef, 'checked')) {\n tNode.flags |= 2048;\n tNode.customControlIndex = i;\n return;\n }\n }\n}\nfunction hasModelInput(directiveDef, name) {\n return hasInput(directiveDef, name) && hasOutput(directiveDef, name + 'Change');\n}\nfunction hasInput(directiveDef, name) {\n return name in directiveDef.inputs;\n}\nfunction hasOutput(directiveDef, name) {\n return name in directiveDef.outputs;\n}\nconst BINDING = /* @__PURE__ */Symbol('BINDING');\nconst INPUT_BINDING_METADATA = {\n kind: 'input',\n requiredVars: 1\n};\nconst OUTPUT_BINDING_METADATA = {\n kind: 'output',\n requiredVars: 0\n};\nfunction inputBindingUpdate(targetDirectiveIdx, publicName, value) {\n const lView = getLView();\n const bindingIndex = nextBindingIndex();\n if (bindingUpdated(lView, bindingIndex, value)) {\n const tView = lView[TVIEW];\n const tNode = getSelectedTNode();\n const componentLView = getComponentLViewByIndex(tNode.index, lView);\n markViewDirty(componentLView, 1);\n const targetDef = tView.directiveRegistry[targetDirectiveIdx];\n if (ngDevMode && !targetDef) {\n throw new RuntimeError(315, `Input binding to property \"${publicName}\" does not have a target.`);\n }\n const hasSet = setDirectiveInput(tNode, tView, lView, targetDef, publicName, value);\n if (ngDevMode) {\n if (!hasSet) {\n throw new RuntimeError(315, `${stringifyForError(targetDef.type)} does not have an input with a public name of \"${publicName}\".`);\n }\n storePropertyBindingMetadata(tView.data, tNode, publicName, bindingIndex);\n }\n }\n}\nfunction inputBinding(publicName, value) {\n if (publicName === 'formField') {\n const binding = {\n [BINDING]: INPUT_BINDING_METADATA,\n create: () => {\n controlCreateInternal();\n },\n update: () => {\n inputBindingUpdate(binding.targetIdx, publicName, value());\n controlUpdateInternal();\n }\n };\n return binding;\n }\n const binding = {\n [BINDING]: INPUT_BINDING_METADATA,\n update: () => inputBindingUpdate(binding.targetIdx, publicName, value())\n };\n return binding;\n}\nfunction outputBinding(eventName, listener) {\n const binding = {\n [BINDING]: OUTPUT_BINDING_METADATA,\n create: () => {\n const lView = getLView();\n const tNode = getCurrentTNode();\n const tView = lView[TVIEW];\n const targetDef = tView.directiveRegistry[binding.targetIdx];\n createOutputListener(tNode, lView, listener, targetDef, eventName);\n }\n };\n return binding;\n}\nfunction twoWayBinding(publicName, value) {\n const input = inputBinding(publicName, value);\n const output = outputBinding(publicName + 'Change', eventValue => value.set(eventValue));\n ngDevMode && assertNotDefined(input.create, 'Unexpected `create` callback in inputBinding');\n ngDevMode && assertNotDefined(output.update, 'Unexpected `update` callback in outputBinding');\n const binding = {\n [BINDING]: {\n kind: 'twoWay',\n requiredVars: input[BINDING].requiredVars + output[BINDING].requiredVars\n },\n set targetIdx(idx) {\n input.targetIdx = idx;\n output.targetIdx = idx;\n },\n create: output.create,\n update: input.update\n };\n return binding;\n}\nfunction getClosestComponentName(node) {\n let currentNode = node;\n while (currentNode) {\n const lView = readPatchedLView(currentNode);\n if (lView !== null) {\n for (let i = HEADER_OFFSET; i < lView.length; i++) {\n const current = lView[i];\n if (!isLView(current) && !isLContainer(current) || current[HOST] !== currentNode) {\n continue;\n }\n const tView = lView[TVIEW];\n const tNode = getTNode(tView, i);\n if (isComponentHost(tNode)) {\n const def = tView.data[tNode.directiveStart + tNode.componentOffset];\n const name = getComponentName(def);\n if (name !== null) {\n return name;\n } else {\n break;\n }\n }\n }\n }\n currentNode = currentNode.parentNode;\n }\n return null;\n}\nfunction getComponentName(def) {\n return def.debugInfo?.className || def.type.name || null;\n}\nclass ComponentFactoryResolver extends ComponentFactoryResolver$1 {\n ngModule;\n constructor(ngModule) {\n super();\n this.ngModule = ngModule;\n }\n resolveComponentFactory(component) {\n ngDevMode && assertComponentType(component);\n const componentDef = getComponentDef(component);\n return new ComponentFactory(componentDef, this.ngModule);\n }\n}\nfunction toInputRefArray(map) {\n return Object.keys(map).map(name => {\n const [propName, flags, transform] = map[name];\n const inputData = {\n propName: propName,\n templateName: name,\n isSignal: (flags & InputFlags.SignalBased) !== 0\n };\n if (transform) {\n inputData.transform = transform;\n }\n return inputData;\n });\n}\nfunction toOutputRefArray(map) {\n return Object.keys(map).map(name => ({\n propName: map[name],\n templateName: name\n }));\n}\nfunction verifyNotAnOrphanComponent(componentDef) {\n if ((typeof ngJitMode === 'undefined' || ngJitMode) && componentDef.debugInfo?.forbidOrphanRendering) {\n if (depsTracker.isOrphanComponent(componentDef.type)) {\n throw new RuntimeError(981, `Orphan component found! Trying to render the component ${debugStringifyTypeForError(componentDef.type)} without first loading the NgModule that declares it. It is recommended to make this component standalone in order to avoid this error. If this is not possible now, import the component's NgModule in the appropriate NgModule, or the standalone component in which you are trying to render this component. If this is a lazy import, load the NgModule lazily as well and use its module injector.`);\n }\n }\n}\nfunction createRootViewInjector(componentDef, environmentInjector, injector) {\n let realEnvironmentInjector = environmentInjector instanceof EnvironmentInjector ? environmentInjector : environmentInjector?.injector;\n if (realEnvironmentInjector && componentDef.getStandaloneInjector !== null) {\n realEnvironmentInjector = componentDef.getStandaloneInjector(realEnvironmentInjector) || realEnvironmentInjector;\n }\n const rootViewInjector = realEnvironmentInjector ? new ChainedInjector(injector, realEnvironmentInjector) : injector;\n return rootViewInjector;\n}\nfunction createRootLViewEnvironment(rootLViewInjector) {\n const rendererFactory = rootLViewInjector.get(RendererFactory2, null);\n if (rendererFactory === null) {\n throw new RuntimeError(407, ngDevMode && 'Angular was not able to inject a renderer (RendererFactory2). ' + 'Likely this is due to a broken DI hierarchy. ' + 'Make sure that any injector used to create this component has a correct parent.');\n }\n const sanitizer = rootLViewInjector.get(Sanitizer, null);\n const changeDetectionScheduler = rootLViewInjector.get(ChangeDetectionScheduler, null);\n const tracingService = rootLViewInjector.get(TracingService, null, {\n optional: true\n });\n let ngReflect = false;\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n ngReflect = rootLViewInjector.get(NG_REFLECT_ATTRS_FLAG, NG_REFLECT_ATTRS_FLAG_DEFAULT);\n }\n return {\n rendererFactory,\n sanitizer,\n changeDetectionScheduler,\n ngReflect,\n tracingService\n };\n}\nfunction createHostElement(componentDef, renderer) {\n const tagName = inferTagNameFromDefinition(componentDef);\n const namespace = tagName === 'svg' ? SVG_NAMESPACE : tagName === 'math' ? MATH_ML_NAMESPACE : null;\n return createElementNode(renderer, tagName, namespace);\n}\nfunction inferTagNameFromDefinition(componentDef) {\n return (componentDef.selectors[0][0] || 'div').toLowerCase();\n}\nclass ComponentFactory extends ComponentFactory$1 {\n componentDef;\n ngModule;\n selector;\n componentType;\n ngContentSelectors;\n isBoundToModule;\n cachedInputs = null;\n cachedOutputs = null;\n get inputs() {\n this.cachedInputs ??= toInputRefArray(this.componentDef.inputs);\n return this.cachedInputs;\n }\n get outputs() {\n this.cachedOutputs ??= toOutputRefArray(this.componentDef.outputs);\n return this.cachedOutputs;\n }\n constructor(componentDef, ngModule) {\n super();\n this.componentDef = componentDef;\n this.ngModule = ngModule;\n this.componentType = componentDef.type;\n this.selector = stringifyCSSSelectorList(componentDef.selectors);\n this.ngContentSelectors = componentDef.ngContentSelectors ?? [];\n this.isBoundToModule = !!ngModule;\n }\n create(injector, projectableNodes, rootSelectorOrNode, environmentInjector, directives, componentBindings) {\n profiler(ProfilerEvent.DynamicComponentStart);\n const prevConsumer = setActiveConsumer(null);\n try {\n const cmpDef = this.componentDef;\n ngDevMode && verifyNotAnOrphanComponent(cmpDef);\n const rootViewInjector = createRootViewInjector(cmpDef, environmentInjector || this.ngModule, injector);\n const environment = createRootLViewEnvironment(rootViewInjector);\n const tracingService = environment.tracingService;\n if (tracingService && tracingService.componentCreate) {\n return tracingService.componentCreate(getComponentName(cmpDef), () => this.createComponentRef(environment, rootViewInjector, projectableNodes, rootSelectorOrNode, directives, componentBindings));\n } else {\n return this.createComponentRef(environment, rootViewInjector, projectableNodes, rootSelectorOrNode, directives, componentBindings);\n }\n } finally {\n setActiveConsumer(prevConsumer);\n }\n }\n createComponentRef(environment, rootViewInjector, projectableNodes, rootSelectorOrNode, directives, componentBindings) {\n const cmpDef = this.componentDef;\n const rootTView = createRootTView(rootSelectorOrNode, cmpDef, componentBindings, directives);\n const hostRenderer = environment.rendererFactory.createRenderer(null, cmpDef);\n const hostElement = rootSelectorOrNode ? locateHostElement(hostRenderer, rootSelectorOrNode, cmpDef.encapsulation, rootViewInjector) : createHostElement(cmpDef, hostRenderer);\n const hasInputBindings = componentBindings?.some(isInputBinding) || directives?.some(d => typeof d !== 'function' && d.bindings.some(isInputBinding));\n const rootLView = createLView(null, rootTView, null, 512 | getInitialLViewFlagsFromDef(cmpDef), null, null, environment, hostRenderer, rootViewInjector, null, retrieveHydrationInfo(hostElement, rootViewInjector, true));\n rootLView[HEADER_OFFSET] = hostElement;\n enterView(rootLView);\n let componentView = null;\n try {\n const hostTNode = directiveHostFirstCreatePass(HEADER_OFFSET, rootLView, 2, '#host', () => rootTView.directiveRegistry, true, 0);\n setupStaticAttributes(hostRenderer, hostElement, hostTNode);\n attachPatchData(hostElement, rootLView);\n createDirectivesInstances(rootTView, rootLView, hostTNode);\n executeContentQueries(rootTView, hostTNode, rootLView);\n directiveHostEndFirstCreatePass(rootTView, hostTNode);\n if (projectableNodes !== undefined) {\n projectNodes(hostTNode, this.ngContentSelectors, projectableNodes);\n }\n componentView = getComponentLViewByIndex(hostTNode.index, rootLView);\n rootLView[CONTEXT] = componentView[CONTEXT];\n renderView(rootTView, rootLView, null);\n } catch (e) {\n if (componentView !== null) {\n unregisterLView(componentView);\n }\n unregisterLView(rootLView);\n throw e;\n } finally {\n profiler(ProfilerEvent.DynamicComponentEnd);\n leaveView();\n }\n return new ComponentRef(this.componentType, rootLView, !!hasInputBindings);\n }\n}\nfunction createRootTView(rootSelectorOrNode, componentDef, componentBindings, directives) {\n const tAttributes = rootSelectorOrNode ? ['ng-version', '21.2.4'] : extractAttrsAndClassesFromSelector(componentDef.selectors[0]);\n let creationBindings = null;\n let updateBindings = null;\n let varsToAllocate = 0;\n if (componentBindings) {\n for (const binding of componentBindings) {\n varsToAllocate += binding[BINDING].requiredVars;\n if (binding.create) {\n binding.targetIdx = 0;\n (creationBindings ??= []).push(binding);\n }\n if (binding.update) {\n binding.targetIdx = 0;\n (updateBindings ??= []).push(binding);\n }\n }\n }\n if (directives) {\n for (let i = 0; i < directives.length; i++) {\n const directive = directives[i];\n if (typeof directive !== 'function') {\n for (const binding of directive.bindings) {\n varsToAllocate += binding[BINDING].requiredVars;\n const targetDirectiveIdx = i + 1;\n if (binding.create) {\n binding.targetIdx = targetDirectiveIdx;\n (creationBindings ??= []).push(binding);\n }\n if (binding.update) {\n binding.targetIdx = targetDirectiveIdx;\n (updateBindings ??= []).push(binding);\n }\n }\n }\n }\n }\n const directivesToApply = [componentDef];\n if (directives) {\n for (const directive of directives) {\n const directiveType = typeof directive === 'function' ? directive : directive.type;\n const directiveDef = ngDevMode ? getDirectiveDefOrThrow(directiveType) : getDirectiveDef(directiveType);\n if (ngDevMode && !directiveDef.standalone) {\n throw new RuntimeError(907, `The ${stringifyForError(directiveType)} directive must be standalone in ` + `order to be applied to a dynamically-created component.`);\n }\n directivesToApply.push(directiveDef);\n }\n }\n const rootTView = createTView(0, null, getRootTViewTemplate(creationBindings, updateBindings), 1, varsToAllocate, directivesToApply, null, null, null, [tAttributes], null);\n return rootTView;\n}\nfunction getRootTViewTemplate(creationBindings, updateBindings) {\n if (!creationBindings && !updateBindings) {\n return null;\n }\n return flags => {\n if (flags & 1 && creationBindings) {\n for (const binding of creationBindings) {\n binding.create();\n }\n }\n if (flags & 2 && updateBindings) {\n for (const binding of updateBindings) {\n binding.update();\n }\n }\n };\n}\nfunction isInputBinding(binding) {\n const kind = binding[BINDING].kind;\n return kind === 'input' || kind === 'twoWay';\n}\nclass ComponentRef extends ComponentRef$1 {\n _rootLView;\n _hasInputBindings;\n instance;\n hostView;\n changeDetectorRef;\n componentType;\n location;\n previousInputValues = null;\n _tNode;\n constructor(componentType, _rootLView, _hasInputBindings) {\n super();\n this._rootLView = _rootLView;\n this._hasInputBindings = _hasInputBindings;\n this._tNode = getTNode(_rootLView[TVIEW], HEADER_OFFSET);\n this.location = createElementRef(this._tNode, _rootLView);\n this.instance = getComponentLViewByIndex(this._tNode.index, _rootLView)[CONTEXT];\n this.hostView = this.changeDetectorRef = new ViewRef(_rootLView, undefined);\n this.componentType = componentType;\n }\n setInput(name, value) {\n if (this._hasInputBindings && ngDevMode) {\n throw new RuntimeError(317, 'Cannot call `setInput` on a component that is using the `inputBinding` or `twoWayBinding` functions.');\n }\n const tNode = this._tNode;\n this.previousInputValues ??= new Map();\n if (this.previousInputValues.has(name) && Object.is(this.previousInputValues.get(name), value)) {\n return;\n }\n const lView = this._rootLView;\n const hasSetInput = setAllInputsForProperty(tNode, lView[TVIEW], lView, name, value);\n this.previousInputValues.set(name, value);\n const childComponentLView = getComponentLViewByIndex(tNode.index, lView);\n markViewDirty(childComponentLView, 1);\n if (ngDevMode && !hasSetInput) {\n const cmpNameForError = stringifyForError(this.componentType);\n let message = `Can't set value of the '${name}' input on the '${cmpNameForError}' component. `;\n message += `Make sure that the '${name}' property is declared as an input using the input() or model() function or the @Input() decorator.`;\n reportUnknownPropertyError(message);\n }\n }\n get injector() {\n return new NodeInjector(this._tNode, this._rootLView);\n }\n destroy() {\n this.hostView.destroy();\n }\n onDestroy(callback) {\n this.hostView.onDestroy(callback);\n }\n}\nfunction projectNodes(tNode, ngContentSelectors, projectableNodes) {\n const projection = tNode.projection = [];\n for (let i = 0; i < ngContentSelectors.length; i++) {\n const nodesforSlot = projectableNodes[i];\n projection.push(nodesforSlot != null && nodesforSlot.length ? Array.from(nodesforSlot) : null);\n }\n}\nlet ViewContainerRef = /*#__PURE__*/(() => {\n class ViewContainerRef {\n static __NG_ELEMENT_ID__ = injectViewContainerRef;\n }\n return ViewContainerRef;\n})();\nfunction injectViewContainerRef() {\n const previousTNode = getCurrentTNode();\n return createContainerRef(previousTNode, getLView());\n}\nclass R3ViewContainerRef extends ViewContainerRef {\n _lContainer;\n _hostTNode;\n _hostLView;\n constructor(_lContainer, _hostTNode, _hostLView) {\n super();\n this._lContainer = _lContainer;\n this._hostTNode = _hostTNode;\n this._hostLView = _hostLView;\n }\n get element() {\n return createElementRef(this._hostTNode, this._hostLView);\n }\n get injector() {\n return new NodeInjector(this._hostTNode, this._hostLView);\n }\n get parentInjector() {\n const parentLocation = getParentInjectorLocation(this._hostTNode, this._hostLView);\n if (hasParentInjector(parentLocation)) {\n const parentView = getParentInjectorView(parentLocation, this._hostLView);\n const injectorIndex = getParentInjectorIndex(parentLocation);\n ngDevMode && assertNodeInjector(parentView, injectorIndex);\n const parentTNode = parentView[TVIEW].data[injectorIndex + 8];\n return new NodeInjector(parentTNode, parentView);\n } else {\n return new NodeInjector(null, this._hostLView);\n }\n }\n clear() {\n while (this.length > 0) {\n this.remove(this.length - 1);\n }\n }\n get(index) {\n const viewRefs = getViewRefs(this._lContainer);\n return viewRefs !== null && viewRefs[index] || null;\n }\n get length() {\n return this._lContainer.length - CONTAINER_HEADER_OFFSET;\n }\n createEmbeddedView(templateRef, context, indexOrOptions) {\n let index;\n let injector;\n if (typeof indexOrOptions === 'number') {\n index = indexOrOptions;\n } else if (indexOrOptions != null) {\n index = indexOrOptions.index;\n injector = indexOrOptions.injector;\n }\n const dehydratedView = findMatchingDehydratedView(this._lContainer, templateRef.ssrId);\n const viewRef = templateRef.createEmbeddedViewImpl(context || {}, injector, dehydratedView);\n this.insertImpl(viewRef, index, shouldAddViewToDom(this._hostTNode, dehydratedView));\n return viewRef;\n }\n createComponent(componentFactoryOrType, indexOrOptions, injector, projectableNodes, environmentInjector, directives, bindings) {\n const isComponentFactory = componentFactoryOrType && !isType(componentFactoryOrType);\n let index;\n if (isComponentFactory) {\n if (ngDevMode) {\n assertEqual(typeof indexOrOptions !== 'object', true, 'It looks like Component factory was provided as the first argument ' + 'and an options object as the second argument. This combination of arguments ' + 'is incompatible. You can either change the first argument to provide Component ' + 'type or change the second argument to be a number (representing an index at ' + \"which to insert the new component's host view into this container)\");\n }\n index = indexOrOptions;\n } else {\n if (ngDevMode) {\n assertDefined(getComponentDef(componentFactoryOrType), `Provided Component class doesn't contain Component definition. ` + `Please check whether provided class has @Component decorator.`);\n assertEqual(typeof indexOrOptions !== 'number', true, 'It looks like Component type was provided as the first argument ' + \"and a number (representing an index at which to insert the new component's \" + 'host view into this container as the second argument. This combination of arguments ' + 'is incompatible. Please use an object as the second argument instead.');\n }\n const options = indexOrOptions || {};\n if (ngDevMode && options.environmentInjector && options.ngModuleRef) {\n throwError(`Cannot pass both environmentInjector and ngModuleRef options to createComponent().`);\n }\n index = options.index;\n injector = options.injector;\n projectableNodes = options.projectableNodes;\n environmentInjector = options.environmentInjector || options.ngModuleRef;\n directives = options.directives;\n bindings = options.bindings;\n }\n const componentFactory = isComponentFactory ? componentFactoryOrType : new ComponentFactory(getComponentDef(componentFactoryOrType));\n const contextInjector = injector || this.parentInjector;\n if (!environmentInjector && componentFactory.ngModule == null) {\n const _injector = isComponentFactory ? contextInjector : this.parentInjector;\n const result = _injector.get(EnvironmentInjector, null);\n if (result) {\n environmentInjector = result;\n }\n }\n const componentDef = getComponentDef(componentFactory.componentType ?? {});\n const dehydratedView = findMatchingDehydratedView(this._lContainer, componentDef?.id ?? null);\n const rNode = dehydratedView?.firstChild ?? null;\n const componentRef = componentFactory.create(contextInjector, projectableNodes, rNode, environmentInjector, directives, bindings);\n this.insertImpl(componentRef.hostView, index, shouldAddViewToDom(this._hostTNode, dehydratedView));\n return componentRef;\n }\n insert(viewRef, index) {\n return this.insertImpl(viewRef, index, true);\n }\n insertImpl(viewRef, index, addToDOM) {\n const lView = viewRef._lView;\n if (ngDevMode && viewRef.destroyed) {\n throw new RuntimeError(922, ngDevMode && 'Cannot insert a destroyed View in a ViewContainer!');\n }\n if (viewAttachedToContainer(lView)) {\n const prevIdx = this.indexOf(viewRef);\n if (prevIdx !== -1) {\n this.detach(prevIdx);\n } else {\n const prevLContainer = lView[PARENT];\n ngDevMode && assertEqual(isLContainer(prevLContainer), true, 'An attached view should have its PARENT point to a container.');\n const prevVCRef = new R3ViewContainerRef(prevLContainer, prevLContainer[T_HOST], prevLContainer[PARENT]);\n prevVCRef.detach(prevVCRef.indexOf(viewRef));\n }\n }\n const adjustedIdx = this._adjustIndex(index);\n const lContainer = this._lContainer;\n addLViewToLContainer(lContainer, lView, adjustedIdx, addToDOM);\n viewRef.attachToViewContainerRef();\n addToArray(getOrCreateViewRefs(lContainer), adjustedIdx, viewRef);\n return viewRef;\n }\n move(viewRef, newIndex) {\n if (ngDevMode && viewRef.destroyed) {\n throw new RuntimeError(923, ngDevMode && 'Cannot move a destroyed View in a ViewContainer!');\n }\n return this.insert(viewRef, newIndex);\n }\n indexOf(viewRef) {\n const viewRefsArr = getViewRefs(this._lContainer);\n return viewRefsArr !== null ? viewRefsArr.indexOf(viewRef) : -1;\n }\n remove(index) {\n const adjustedIdx = this._adjustIndex(index, -1);\n const detachedView = detachView(this._lContainer, adjustedIdx);\n if (detachedView) {\n removeFromArray(getOrCreateViewRefs(this._lContainer), adjustedIdx);\n destroyLView(detachedView[TVIEW], detachedView);\n }\n }\n detach(index) {\n const adjustedIdx = this._adjustIndex(index, -1);\n const view = detachView(this._lContainer, adjustedIdx);\n const wasDetached = view && removeFromArray(getOrCreateViewRefs(this._lContainer), adjustedIdx) != null;\n return wasDetached ? new ViewRef(view) : null;\n }\n _adjustIndex(index, shift = 0) {\n if (index == null) {\n return this.length + shift;\n }\n if (ngDevMode) {\n assertGreaterThan(index, -1, `ViewRef index must be positive, got ${index}`);\n assertLessThan(index, this.length + 1 + shift, 'index');\n }\n return index;\n }\n}\nfunction getViewRefs(lContainer) {\n return lContainer[VIEW_REFS];\n}\nfunction getOrCreateViewRefs(lContainer) {\n return lContainer[VIEW_REFS] || (lContainer[VIEW_REFS] = []);\n}\nfunction createContainerRef(hostTNode, hostLView) {\n ngDevMode && assertTNodeType(hostTNode, 12 | 3);\n let lContainer;\n const slotValue = hostLView[hostTNode.index];\n if (isLContainer(slotValue)) {\n lContainer = slotValue;\n } else {\n lContainer = createLContainer(slotValue, hostLView, null, hostTNode);\n hostLView[hostTNode.index] = lContainer;\n addToEndOfViewTree(hostLView, lContainer);\n }\n _locateOrCreateAnchorNode(lContainer, hostLView, hostTNode, slotValue);\n return new R3ViewContainerRef(lContainer, hostTNode, hostLView);\n}\nfunction insertAnchorNode(hostLView, hostTNode) {\n const renderer = hostLView[RENDERER];\n const commentNode = renderer.createComment(ngDevMode ? 'container' : '');\n const hostNative = getNativeByTNode(hostTNode, hostLView);\n const parentOfHostNative = renderer.parentNode(hostNative);\n nativeInsertBefore(renderer, parentOfHostNative, commentNode, renderer.nextSibling(hostNative), false);\n return commentNode;\n}\nlet _locateOrCreateAnchorNode = createAnchorNode;\nlet _populateDehydratedViewsInLContainer = () => false;\nfunction populateDehydratedViewsInLContainer(lContainer, tNode, hostLView) {\n return _populateDehydratedViewsInLContainer(lContainer, tNode, hostLView);\n}\nfunction createAnchorNode(lContainer, hostLView, hostTNode, slotValue) {\n if (lContainer[NATIVE]) return;\n let commentNode;\n if (hostTNode.type & 8) {\n commentNode = unwrapRNode(slotValue);\n } else {\n commentNode = insertAnchorNode(hostLView, hostTNode);\n }\n lContainer[NATIVE] = commentNode;\n}\nfunction populateDehydratedViewsInLContainerImpl(lContainer, tNode, hostLView) {\n if (lContainer[NATIVE] && lContainer[DEHYDRATED_VIEWS]) {\n return true;\n }\n const hydrationInfo = hostLView[HYDRATION];\n const noOffsetIndex = tNode.index - HEADER_OFFSET;\n const isNodeCreationMode = !hydrationInfo || isInSkipHydrationBlock(tNode) || isDisconnectedNode$1(hydrationInfo, noOffsetIndex);\n if (isNodeCreationMode) {\n return false;\n }\n const currentRNode = getSegmentHead(hydrationInfo, noOffsetIndex);\n const serializedViews = hydrationInfo.data[CONTAINERS]?.[noOffsetIndex];\n ngDevMode && assertDefined(serializedViews, 'Unexpected state: no hydration info available for a given TNode, ' + 'which represents a view container.');\n const [commentNode, dehydratedViews] = locateDehydratedViewsInContainer(currentRNode, serializedViews);\n if (ngDevMode) {\n validateMatchingNode(commentNode, Node.COMMENT_NODE, null, hostLView, tNode, true);\n markRNodeAsClaimedByHydration(commentNode, false);\n }\n lContainer[NATIVE] = commentNode;\n lContainer[DEHYDRATED_VIEWS] = dehydratedViews;\n return true;\n}\nfunction locateOrCreateAnchorNode(lContainer, hostLView, hostTNode, slotValue) {\n if (!_populateDehydratedViewsInLContainer(lContainer, hostTNode, hostLView)) {\n createAnchorNode(lContainer, hostLView, hostTNode, slotValue);\n }\n}\nfunction enableLocateOrCreateContainerRefImpl() {\n _locateOrCreateAnchorNode = locateOrCreateAnchorNode;\n _populateDehydratedViewsInLContainer = populateDehydratedViewsInLContainerImpl;\n}\nclass LQuery_ {\n queryList;\n matches = null;\n constructor(queryList) {\n this.queryList = queryList;\n }\n clone() {\n return new LQuery_(this.queryList);\n }\n setDirty() {\n this.queryList.setDirty();\n }\n}\nclass LQueries_ {\n queries;\n constructor(queries = []) {\n this.queries = queries;\n }\n createEmbeddedView(tView) {\n const tQueries = tView.queries;\n if (tQueries !== null) {\n const noOfInheritedQueries = tView.contentQueries !== null ? tView.contentQueries[0] : tQueries.length;\n const viewLQueries = [];\n for (let i = 0; i < noOfInheritedQueries; i++) {\n const tQuery = tQueries.getByIndex(i);\n const parentLQuery = this.queries[tQuery.indexInDeclarationView];\n viewLQueries.push(parentLQuery.clone());\n }\n return new LQueries_(viewLQueries);\n }\n return null;\n }\n insertView(tView) {\n this.dirtyQueriesWithMatches(tView);\n }\n detachView(tView) {\n this.dirtyQueriesWithMatches(tView);\n }\n finishViewCreation(tView) {\n this.dirtyQueriesWithMatches(tView);\n }\n dirtyQueriesWithMatches(tView) {\n for (let i = 0; i < this.queries.length; i++) {\n if (getTQuery(tView, i).matches !== null) {\n this.queries[i].setDirty();\n }\n }\n }\n}\nclass TQueryMetadata_ {\n flags;\n read;\n predicate;\n constructor(predicate, flags, read = null) {\n this.flags = flags;\n this.read = read;\n if (typeof predicate === 'string') {\n this.predicate = splitQueryMultiSelectors(predicate);\n } else {\n this.predicate = predicate;\n }\n }\n}\nclass TQueries_ {\n queries;\n constructor(queries = []) {\n this.queries = queries;\n }\n elementStart(tView, tNode) {\n ngDevMode && assertFirstCreatePass(tView, 'Queries should collect results on the first template pass only');\n for (let i = 0; i < this.queries.length; i++) {\n this.queries[i].elementStart(tView, tNode);\n }\n }\n elementEnd(tNode) {\n for (let i = 0; i < this.queries.length; i++) {\n this.queries[i].elementEnd(tNode);\n }\n }\n embeddedTView(tNode) {\n let queriesForTemplateRef = null;\n for (let i = 0; i < this.length; i++) {\n const childQueryIndex = queriesForTemplateRef !== null ? queriesForTemplateRef.length : 0;\n const tqueryClone = this.getByIndex(i).embeddedTView(tNode, childQueryIndex);\n if (tqueryClone) {\n tqueryClone.indexInDeclarationView = i;\n if (queriesForTemplateRef !== null) {\n queriesForTemplateRef.push(tqueryClone);\n } else {\n queriesForTemplateRef = [tqueryClone];\n }\n }\n }\n return queriesForTemplateRef !== null ? new TQueries_(queriesForTemplateRef) : null;\n }\n template(tView, tNode) {\n ngDevMode && assertFirstCreatePass(tView, 'Queries should collect results on the first template pass only');\n for (let i = 0; i < this.queries.length; i++) {\n this.queries[i].template(tView, tNode);\n }\n }\n getByIndex(index) {\n ngDevMode && assertIndexInRange(this.queries, index);\n return this.queries[index];\n }\n get length() {\n return this.queries.length;\n }\n track(tquery) {\n this.queries.push(tquery);\n }\n}\nclass TQuery_ {\n metadata;\n matches = null;\n indexInDeclarationView = -1;\n crossesNgTemplate = false;\n _declarationNodeIndex;\n _appliesToNextNode = true;\n constructor(metadata, nodeIndex = -1) {\n this.metadata = metadata;\n this._declarationNodeIndex = nodeIndex;\n }\n elementStart(tView, tNode) {\n if (this.isApplyingToNode(tNode)) {\n this.matchTNode(tView, tNode);\n }\n }\n elementEnd(tNode) {\n if (this._declarationNodeIndex === tNode.index) {\n this._appliesToNextNode = false;\n }\n }\n template(tView, tNode) {\n this.elementStart(tView, tNode);\n }\n embeddedTView(tNode, childQueryIndex) {\n if (this.isApplyingToNode(tNode)) {\n this.crossesNgTemplate = true;\n this.addMatch(-tNode.index, childQueryIndex);\n return new TQuery_(this.metadata);\n }\n return null;\n }\n isApplyingToNode(tNode) {\n if (this._appliesToNextNode && (this.metadata.flags & 1) !== 1) {\n const declarationNodeIdx = this._declarationNodeIndex;\n let parent = tNode.parent;\n while (parent !== null && parent.type & 8 && parent.index !== declarationNodeIdx) {\n parent = parent.parent;\n }\n return declarationNodeIdx === (parent !== null ? parent.index : -1);\n }\n return this._appliesToNextNode;\n }\n matchTNode(tView, tNode) {\n const predicate = this.metadata.predicate;\n if (Array.isArray(predicate)) {\n for (let i = 0; i < predicate.length; i++) {\n const name = predicate[i];\n this.matchTNodeWithReadOption(tView, tNode, getIdxOfMatchingSelector(tNode, name));\n this.matchTNodeWithReadOption(tView, tNode, locateDirectiveOrProvider(tNode, tView, name, false, false));\n }\n } else {\n if (predicate === TemplateRef) {\n if (tNode.type & 4) {\n this.matchTNodeWithReadOption(tView, tNode, -1);\n }\n } else {\n this.matchTNodeWithReadOption(tView, tNode, locateDirectiveOrProvider(tNode, tView, predicate, false, false));\n }\n }\n }\n matchTNodeWithReadOption(tView, tNode, nodeMatchIdx) {\n if (nodeMatchIdx !== null) {\n const read = this.metadata.read;\n if (read !== null) {\n if (read === ElementRef || read === ViewContainerRef || read === TemplateRef && tNode.type & 4) {\n this.addMatch(tNode.index, -2);\n } else {\n const directiveOrProviderIdx = locateDirectiveOrProvider(tNode, tView, read, false, false);\n if (directiveOrProviderIdx !== null) {\n this.addMatch(tNode.index, directiveOrProviderIdx);\n }\n }\n } else {\n this.addMatch(tNode.index, nodeMatchIdx);\n }\n }\n }\n addMatch(tNodeIdx, matchIdx) {\n if (this.matches === null) {\n this.matches = [tNodeIdx, matchIdx];\n } else {\n this.matches.push(tNodeIdx, matchIdx);\n }\n }\n}\nfunction getIdxOfMatchingSelector(tNode, selector) {\n const localNames = tNode.localNames;\n if (localNames !== null) {\n for (let i = 0; i < localNames.length; i += 2) {\n if (localNames[i] === selector) {\n return localNames[i + 1];\n }\n }\n }\n return null;\n}\nfunction createResultByTNodeType(tNode, currentView) {\n if (tNode.type & (3 | 8)) {\n return createElementRef(tNode, currentView);\n } else if (tNode.type & 4) {\n return createTemplateRef(tNode, currentView);\n }\n return null;\n}\nfunction createResultForNode(lView, tNode, matchingIdx, read) {\n if (matchingIdx === -1) {\n return createResultByTNodeType(tNode, lView);\n } else if (matchingIdx === -2) {\n return createSpecialToken(lView, tNode, read);\n } else {\n return getNodeInjectable(lView, lView[TVIEW], matchingIdx, tNode);\n }\n}\nfunction createSpecialToken(lView, tNode, read) {\n if (read === ElementRef) {\n return createElementRef(tNode, lView);\n } else if (read === TemplateRef) {\n return createTemplateRef(tNode, lView);\n } else if (read === ViewContainerRef) {\n ngDevMode && assertTNodeType(tNode, 3 | 12);\n return createContainerRef(tNode, lView);\n } else {\n ngDevMode && throwError(`Special token to read should be one of ElementRef, TemplateRef or ViewContainerRef but got ${stringify(read)}.`);\n }\n}\nfunction materializeViewResults(tView, lView, tQuery, queryIndex) {\n const lQuery = lView[QUERIES].queries[queryIndex];\n if (lQuery.matches === null) {\n const tViewData = tView.data;\n const tQueryMatches = tQuery.matches;\n const result = [];\n for (let i = 0; tQueryMatches !== null && i < tQueryMatches.length; i += 2) {\n const matchedNodeIdx = tQueryMatches[i];\n if (matchedNodeIdx < 0) {\n result.push(null);\n } else {\n ngDevMode && assertIndexInRange(tViewData, matchedNodeIdx);\n const tNode = tViewData[matchedNodeIdx];\n result.push(createResultForNode(lView, tNode, tQueryMatches[i + 1], tQuery.metadata.read));\n }\n }\n lQuery.matches = result;\n }\n return lQuery.matches;\n}\nfunction collectQueryResults(tView, lView, queryIndex, result) {\n const tQuery = tView.queries.getByIndex(queryIndex);\n const tQueryMatches = tQuery.matches;\n if (tQueryMatches !== null) {\n const lViewResults = materializeViewResults(tView, lView, tQuery, queryIndex);\n for (let i = 0; i < tQueryMatches.length; i += 2) {\n const tNodeIdx = tQueryMatches[i];\n if (tNodeIdx > 0) {\n result.push(lViewResults[i / 2]);\n } else {\n const childQueryIndex = tQueryMatches[i + 1];\n const declarationLContainer = lView[-tNodeIdx];\n ngDevMode && assertLContainer(declarationLContainer);\n for (let i = CONTAINER_HEADER_OFFSET; i < declarationLContainer.length; i++) {\n const embeddedLView = declarationLContainer[i];\n if (embeddedLView[DECLARATION_LCONTAINER] === embeddedLView[PARENT]) {\n collectQueryResults(embeddedLView[TVIEW], embeddedLView, childQueryIndex, result);\n }\n }\n if (declarationLContainer[MOVED_VIEWS] !== null) {\n const embeddedLViews = declarationLContainer[MOVED_VIEWS];\n for (let i = 0; i < embeddedLViews.length; i++) {\n const embeddedLView = embeddedLViews[i];\n collectQueryResults(embeddedLView[TVIEW], embeddedLView, childQueryIndex, result);\n }\n }\n }\n }\n }\n return result;\n}\nfunction loadQueryInternal(lView, queryIndex) {\n ngDevMode && assertDefined(lView[QUERIES], 'LQueries should be defined when trying to load a query');\n ngDevMode && assertIndexInRange(lView[QUERIES].queries, queryIndex);\n return lView[QUERIES].queries[queryIndex].queryList;\n}\nfunction createLQuery(tView, lView, flags) {\n const queryList = new QueryList((flags & 4) === 4);\n storeCleanupWithContext(tView, lView, queryList, queryList.destroy);\n const lQueries = (lView[QUERIES] ??= new LQueries_()).queries;\n return lQueries.push(new LQuery_(queryList)) - 1;\n}\nfunction createViewQuery(predicate, flags, read) {\n ngDevMode && assertNumber(flags, 'Expecting flags');\n const tView = getTView();\n if (tView.firstCreatePass) {\n createTQuery(tView, new TQueryMetadata_(predicate, flags, read), -1);\n if ((flags & 2) === 2) {\n tView.staticViewQueries = true;\n }\n }\n return createLQuery(tView, getLView(), flags);\n}\nfunction createContentQuery(directiveIndex, predicate, flags, read) {\n ngDevMode && assertNumber(flags, 'Expecting flags');\n const tView = getTView();\n if (tView.firstCreatePass) {\n const tNode = getCurrentTNode();\n createTQuery(tView, new TQueryMetadata_(predicate, flags, read), tNode.index);\n saveContentQueryAndDirectiveIndex(tView, directiveIndex);\n if ((flags & 2) === 2) {\n tView.staticContentQueries = true;\n }\n }\n return createLQuery(tView, getLView(), flags);\n}\nfunction splitQueryMultiSelectors(locator) {\n return locator.split(',').map(s => s.trim());\n}\nfunction createTQuery(tView, metadata, nodeIndex) {\n if (tView.queries === null) tView.queries = new TQueries_();\n tView.queries.track(new TQuery_(metadata, nodeIndex));\n}\nfunction saveContentQueryAndDirectiveIndex(tView, directiveIndex) {\n const tViewContentQueries = tView.contentQueries || (tView.contentQueries = []);\n const lastSavedDirectiveIndex = tViewContentQueries.length ? tViewContentQueries[tViewContentQueries.length - 1] : -1;\n if (directiveIndex !== lastSavedDirectiveIndex) {\n tViewContentQueries.push(tView.queries.length - 1, directiveIndex);\n }\n}\nfunction getTQuery(tView, index) {\n ngDevMode && assertDefined(tView.queries, 'TQueries must be defined to retrieve a TQuery');\n return tView.queries.getByIndex(index);\n}\nfunction getQueryResults(lView, queryIndex) {\n const tView = lView[TVIEW];\n const tQuery = getTQuery(tView, queryIndex);\n return tQuery.crossesNgTemplate ? collectQueryResults(tView, lView, queryIndex, []) : materializeViewResults(tView, lView, tQuery, queryIndex);\n}\nfunction createQuerySignalFn(firstOnly, required, opts) {\n let node;\n const signalFn = createComputed(() => {\n node._dirtyCounter();\n const value = refreshSignalQuery(node, firstOnly);\n if (required && value === undefined) {\n throw new RuntimeError(-951, ngDevMode && 'Child query result is required but no value is available.');\n }\n return value;\n });\n node = signalFn[SIGNAL];\n node._dirtyCounter = signal(0);\n node._flatValue = undefined;\n if (ngDevMode) {\n signalFn.toString = () => `[Query Signal]`;\n node.debugName = opts?.debugName;\n }\n return signalFn;\n}\nfunction createSingleResultOptionalQuerySignalFn(opts) {\n return createQuerySignalFn(true, false, opts);\n}\nfunction createSingleResultRequiredQuerySignalFn(opts) {\n return createQuerySignalFn(true, true, opts);\n}\nfunction createMultiResultQuerySignalFn(opts) {\n return createQuerySignalFn(false, false, opts);\n}\nfunction bindQueryToSignal(target, queryIndex) {\n const node = target[SIGNAL];\n node._lView = getLView();\n node._queryIndex = queryIndex;\n node._queryList = loadQueryInternal(node._lView, queryIndex);\n node._queryList.onDirty(() => node._dirtyCounter.update(v => v + 1));\n}\nfunction refreshSignalQuery(node, firstOnly) {\n const lView = node._lView;\n const queryIndex = node._queryIndex;\n if (lView === undefined || queryIndex === undefined || lView[FLAGS] & 4) {\n return firstOnly ? undefined : EMPTY_ARRAY;\n }\n const queryList = loadQueryInternal(lView, queryIndex);\n const results = getQueryResults(lView, queryIndex);\n queryList.reset(results, unwrapElementRef);\n if (firstOnly) {\n return queryList.first;\n } else {\n const resultChanged = queryList._changesDetected;\n if (resultChanged || node._flatValue === undefined) {\n return node._flatValue = queryList.toArray();\n }\n return node._flatValue;\n }\n}\nlet componentResourceResolutionQueue = /*#__PURE__*/new Map();\nconst componentDefPendingResolution = /*#__PURE__*/new Set();\nasync function resolveComponentResources(resourceResolver) {\n const currentQueue = componentResourceResolutionQueue;\n componentResourceResolutionQueue = new Map();\n const urlCache = new Map();\n function cachedResourceResolve(url) {\n const promiseCached = urlCache.get(url);\n if (promiseCached) {\n return promiseCached;\n }\n const promise = resourceResolver(url).then(response => unwrapResponse(url, response));\n urlCache.set(url, promise);\n return promise;\n }\n const resolutionPromises = Array.from(currentQueue).map(async ([type, component]) => {\n if (component.styleUrl && component.styleUrls?.length) {\n throw new Error('@Component cannot define both `styleUrl` and `styleUrls`. ' + 'Use `styleUrl` if the component has one stylesheet, or `styleUrls` if it has multiple');\n }\n const componentTasks = [];\n if (component.templateUrl) {\n componentTasks.push(cachedResourceResolve(component.templateUrl).then(template => {\n component.template = template;\n }));\n }\n const styles = typeof component.styles === 'string' ? [component.styles] : component.styles ?? [];\n component.styles = styles;\n let {\n styleUrl,\n styleUrls\n } = component;\n if (styleUrl) {\n styleUrls = [styleUrl];\n component.styleUrl = undefined;\n }\n if (styleUrls?.length) {\n const allFetched = Promise.all(styleUrls.map(url => cachedResourceResolve(url))).then(fetchedStyles => {\n styles.push(...fetchedStyles);\n component.styleUrls = undefined;\n });\n componentTasks.push(allFetched);\n }\n await Promise.all(componentTasks);\n componentDefPendingResolution.delete(type);\n });\n await Promise.all(resolutionPromises);\n}\nfunction maybeQueueResolutionOfComponentResources(type, metadata) {\n if (componentNeedsResolution(metadata)) {\n componentResourceResolutionQueue.set(type, metadata);\n componentDefPendingResolution.add(type);\n }\n}\nfunction isComponentDefPendingResolution(type) {\n return componentDefPendingResolution.has(type);\n}\nfunction componentNeedsResolution(component) {\n return !!(component.templateUrl && !component.hasOwnProperty('template') || component.styleUrls?.length || component.styleUrl);\n}\nfunction clearResolutionOfComponentResourcesQueue() {\n const old = componentResourceResolutionQueue;\n componentResourceResolutionQueue = new Map();\n return old;\n}\nfunction restoreComponentResolutionQueue(queue) {\n componentDefPendingResolution.clear();\n for (const type of queue.keys()) {\n componentDefPendingResolution.add(type);\n }\n componentResourceResolutionQueue = queue;\n}\nfunction isComponentResourceResolutionQueueEmpty() {\n return componentResourceResolutionQueue.size === 0;\n}\nasync function unwrapResponse(url, response) {\n if (typeof response === 'string') {\n return response;\n }\n if (response.status !== undefined && response.status !== 200) {\n throw new RuntimeError(918, ngDevMode && `Could not load resource: ${url}. Response status: ${response.status}`);\n }\n return response.text();\n}\nconst modules = /*#__PURE__*/new Map();\nlet checkForDuplicateNgModules = true;\nfunction assertSameOrNotExisting(id, type, incoming) {\n if (type && type !== incoming && checkForDuplicateNgModules) {\n throw new RuntimeError(921, ngDevMode && `Duplicate module registered for ${id} - ${stringify(type)} vs ${stringify(type.name)}`);\n }\n}\nfunction registerNgModuleType(ngModuleType, id) {\n const existing = modules.get(id) || null;\n assertSameOrNotExisting(id, existing, ngModuleType);\n modules.set(id, ngModuleType);\n}\nfunction getRegisteredNgModuleType(id) {\n return modules.get(id);\n}\nfunction setAllowDuplicateNgModuleIdsForTest(allowDuplicates) {\n checkForDuplicateNgModules = !allowDuplicates;\n}\nlet NgModuleRef$1 = class NgModuleRef {};\nlet NgModuleFactory$1 = class NgModuleFactory {};\nfunction createNgModule(ngModule, parentInjector) {\n return new NgModuleRef(ngModule, parentInjector ?? null, []);\n}\nconst createNgModuleRef = createNgModule;\nclass NgModuleRef extends NgModuleRef$1 {\n ngModuleType;\n _parent;\n _bootstrapComponents = [];\n _r3Injector;\n instance;\n destroyCbs = [];\n componentFactoryResolver = /*#__PURE__*/new ComponentFactoryResolver(this);\n constructor(ngModuleType, _parent, additionalProviders, runInjectorInitializers = true) {\n super();\n this.ngModuleType = ngModuleType;\n this._parent = _parent;\n const ngModuleDef = getNgModuleDef(ngModuleType);\n ngDevMode && assertDefined(ngModuleDef, `NgModule '${stringify(ngModuleType)}' is not a subtype of 'NgModuleType'.`);\n this._bootstrapComponents = maybeUnwrapFn(ngModuleDef.bootstrap);\n this._r3Injector = createInjectorWithoutInjectorInstances(ngModuleType, _parent, [{\n provide: NgModuleRef$1,\n useValue: this\n }, {\n provide: ComponentFactoryResolver$1,\n useValue: this.componentFactoryResolver\n }, ...additionalProviders], stringify(ngModuleType), new Set(['environment']));\n if (runInjectorInitializers) {\n this.resolveInjectorInitializers();\n }\n }\n resolveInjectorInitializers() {\n this._r3Injector.resolveInjectorInitializers();\n this.instance = this._r3Injector.get(this.ngModuleType);\n }\n get injector() {\n return this._r3Injector;\n }\n destroy() {\n ngDevMode && assertDefined(this.destroyCbs, 'NgModule already destroyed');\n const injector = this._r3Injector;\n !injector.destroyed && injector.destroy();\n this.destroyCbs.forEach(fn => fn());\n this.destroyCbs = null;\n }\n onDestroy(callback) {\n ngDevMode && assertDefined(this.destroyCbs, 'NgModule already destroyed');\n this.destroyCbs.push(callback);\n }\n}\nclass NgModuleFactory extends NgModuleFactory$1 {\n moduleType;\n constructor(moduleType) {\n super();\n this.moduleType = moduleType;\n }\n create(parentInjector) {\n return new NgModuleRef(this.moduleType, parentInjector, []);\n }\n}\nfunction createNgModuleRefWithProviders(moduleType, parentInjector, additionalProviders) {\n return new NgModuleRef(moduleType, parentInjector, additionalProviders, false);\n}\nclass EnvironmentNgModuleRefAdapter extends NgModuleRef$1 {\n injector;\n componentFactoryResolver = /*#__PURE__*/new ComponentFactoryResolver(this);\n instance = null;\n constructor(config) {\n super();\n const injector = new R3Injector([...config.providers, {\n provide: NgModuleRef$1,\n useValue: this\n }, {\n provide: ComponentFactoryResolver$1,\n useValue: this.componentFactoryResolver\n }], config.parent || getNullInjector(), config.debugName, new Set(['environment']));\n this.injector = injector;\n if (config.runEnvironmentInitializers) {\n injector.resolveInjectorInitializers();\n }\n }\n destroy() {\n this.injector.destroy();\n }\n onDestroy(callback) {\n this.injector.onDestroy(callback);\n }\n}\nfunction createEnvironmentInjector(providers, parent, debugName = null) {\n const adapter = new EnvironmentNgModuleRefAdapter({\n providers,\n parent,\n debugName,\n runEnvironmentInitializers: true\n });\n return adapter.injector;\n}\nlet StandaloneService = /*#__PURE__*/(() => {\n class StandaloneService {\n _injector;\n cachedInjectors = new Map();\n constructor(_injector) {\n this._injector = _injector;\n }\n getOrCreateStandaloneInjector(componentDef) {\n if (!componentDef.standalone) {\n return null;\n }\n if (!this.cachedInjectors.has(componentDef)) {\n const providers = internalImportProvidersFrom(false, componentDef.type);\n const standaloneInjector = providers.length > 0 ? createEnvironmentInjector([providers], this._injector, typeof ngDevMode !== 'undefined' && ngDevMode ? `Standalone[${componentDef.type.name}]` : '') : null;\n this.cachedInjectors.set(componentDef, standaloneInjector);\n }\n return this.cachedInjectors.get(componentDef);\n }\n ngOnDestroy() {\n try {\n for (const injector of this.cachedInjectors.values()) {\n if (injector !== null) {\n injector.destroy();\n }\n }\n } finally {\n this.cachedInjectors.clear();\n }\n }\n static \u0275prov = /* @__PURE__ */\n __defineInjectable({\n token: StandaloneService,\n providedIn: 'environment',\n factory: () => new StandaloneService(__inject(EnvironmentInjector))\n });\n }\n return StandaloneService;\n})();\nfunction \u0275\u0275defineComponent(componentDefinition) {\n return noSideEffects(() => {\n (typeof ngDevMode === 'undefined' || ngDevMode) && initNgDevMode();\n const baseDef = getNgDirectiveDef(componentDefinition);\n const def = {\n ...baseDef,\n decls: componentDefinition.decls,\n vars: componentDefinition.vars,\n template: componentDefinition.template,\n consts: componentDefinition.consts || null,\n ngContentSelectors: componentDefinition.ngContentSelectors,\n onPush: componentDefinition.changeDetection === ChangeDetectionStrategy.OnPush,\n directiveDefs: null,\n pipeDefs: null,\n dependencies: baseDef.standalone && componentDefinition.dependencies || null,\n getStandaloneInjector: baseDef.standalone ? parentInjector => {\n return parentInjector.get(StandaloneService).getOrCreateStandaloneInjector(def);\n } : null,\n getExternalStyles: null,\n signals: componentDefinition.signals ?? false,\n data: componentDefinition.data || {},\n encapsulation: componentDefinition.encapsulation || ViewEncapsulation.Emulated,\n styles: componentDefinition.styles || EMPTY_ARRAY,\n _: null,\n schemas: componentDefinition.schemas || null,\n tView: null,\n id: ''\n };\n if (baseDef.standalone) {\n performanceMarkFeature('NgStandalone');\n }\n initFeatures(def);\n const dependencies = componentDefinition.dependencies;\n def.directiveDefs = extractDefListOrFactory(dependencies, extractDirectiveDef);\n def.pipeDefs = extractDefListOrFactory(dependencies, getPipeDef$1);\n def.id = getComponentId(def);\n return def;\n });\n}\nfunction extractDirectiveDef(type) {\n return getComponentDef(type) || getDirectiveDef(type);\n}\nfunction \u0275\u0275defineNgModule(def) {\n return noSideEffects(() => {\n const res = {\n type: def.type,\n bootstrap: def.bootstrap || EMPTY_ARRAY,\n declarations: def.declarations || EMPTY_ARRAY,\n imports: def.imports || EMPTY_ARRAY,\n exports: def.exports || EMPTY_ARRAY,\n transitiveCompileScopes: null,\n schemas: def.schemas || null,\n id: def.id || null\n };\n return res;\n });\n}\nfunction parseAndConvertInputsForDefinition(obj, declaredInputs) {\n if (obj == null) return EMPTY_OBJ;\n const newLookup = {};\n for (const minifiedKey in obj) {\n if (obj.hasOwnProperty(minifiedKey)) {\n const value = obj[minifiedKey];\n let publicName;\n let declaredName;\n let inputFlags;\n let transform;\n if (Array.isArray(value)) {\n inputFlags = value[0];\n publicName = value[1];\n declaredName = value[2] ?? publicName;\n transform = value[3] || null;\n } else {\n publicName = value;\n declaredName = value;\n inputFlags = InputFlags.None;\n transform = null;\n }\n newLookup[publicName] = [minifiedKey, inputFlags, transform];\n declaredInputs[publicName] = declaredName;\n }\n }\n return newLookup;\n}\nfunction parseAndConvertOutputsForDefinition(obj) {\n if (obj == null) return EMPTY_OBJ;\n const newLookup = {};\n for (const minifiedKey in obj) {\n if (obj.hasOwnProperty(minifiedKey)) {\n newLookup[obj[minifiedKey]] = minifiedKey;\n }\n }\n return newLookup;\n}\nfunction \u0275\u0275defineDirective(directiveDefinition) {\n return noSideEffects(() => {\n const def = getNgDirectiveDef(directiveDefinition);\n initFeatures(def);\n return def;\n });\n}\nfunction \u0275\u0275definePipe(pipeDef) {\n return {\n type: pipeDef.type,\n name: pipeDef.name,\n factory: null,\n pure: pipeDef.pure !== false,\n standalone: pipeDef.standalone ?? true,\n onDestroy: pipeDef.type.prototype.ngOnDestroy || null\n };\n}\nfunction getNgDirectiveDef(directiveDefinition) {\n const declaredInputs = {};\n return {\n type: directiveDefinition.type,\n providersResolver: null,\n viewProvidersResolver: null,\n factory: null,\n hostBindings: directiveDefinition.hostBindings || null,\n hostVars: directiveDefinition.hostVars || 0,\n hostAttrs: directiveDefinition.hostAttrs || null,\n contentQueries: directiveDefinition.contentQueries || null,\n declaredInputs: declaredInputs,\n inputConfig: directiveDefinition.inputs || EMPTY_OBJ,\n exportAs: directiveDefinition.exportAs || null,\n standalone: directiveDefinition.standalone ?? true,\n signals: directiveDefinition.signals === true,\n selectors: directiveDefinition.selectors || EMPTY_ARRAY,\n viewQuery: directiveDefinition.viewQuery || null,\n features: directiveDefinition.features || null,\n setInput: null,\n resolveHostDirectives: null,\n hostDirectives: null,\n controlDef: null,\n inputs: parseAndConvertInputsForDefinition(directiveDefinition.inputs, declaredInputs),\n outputs: parseAndConvertOutputsForDefinition(directiveDefinition.outputs),\n debugInfo: null\n };\n}\nfunction initFeatures(definition) {\n definition.features?.forEach(fn => fn(definition));\n}\nfunction extractDefListOrFactory(dependencies, defExtractor) {\n if (!dependencies) {\n return null;\n }\n return () => {\n const resolvedDependencies = typeof dependencies === 'function' ? dependencies() : dependencies;\n const result = [];\n for (const dep of resolvedDependencies) {\n const definition = defExtractor(dep);\n if (definition !== null) {\n result.push(definition);\n }\n }\n return result;\n };\n}\nconst GENERATED_COMP_IDS = /*#__PURE__*/new Map();\nfunction getComponentId(componentDef) {\n let hash = 0;\n const componentDefConsts = typeof componentDef.consts === 'function' ? '' : componentDef.consts;\n const hashSelectors = [componentDef.selectors, componentDef.ngContentSelectors, componentDef.hostVars, componentDef.hostAttrs, componentDefConsts, componentDef.vars, componentDef.decls, componentDef.encapsulation, componentDef.standalone, componentDef.signals, componentDef.exportAs, JSON.stringify(componentDef.inputs), JSON.stringify(componentDef.outputs), Object.getOwnPropertyNames(componentDef.type.prototype), !!componentDef.contentQueries, !!componentDef.viewQuery];\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n for (const item of hashSelectors) {\n assertNotEqual(typeof item, 'function', 'Internal error: attempting to use a function in component id computation logic.');\n }\n }\n for (const char of hashSelectors.join('|')) {\n hash = Math.imul(31, hash) + char.charCodeAt(0) << 0;\n }\n hash += 2147483647 + 1;\n const compId = 'c' + hash;\n if ((typeof ngDevMode === 'undefined' || ngDevMode) && (typeof ngServerMode === 'undefined' || !ngServerMode)) {\n if (GENERATED_COMP_IDS.has(compId)) {\n const previousCompDefType = GENERATED_COMP_IDS.get(compId);\n if (previousCompDefType !== componentDef.type) {\n console.warn(formatRuntimeError(-912, `Component ID generation collision detected. Components '${previousCompDefType.name}' and '${componentDef.type.name}' with selector '${stringifyCSSSelectorList(componentDef.selectors)}' generated the same component ID. To fix this, you can change the selector of one of those components or add an extra host attribute to force a different ID.`));\n }\n } else {\n GENERATED_COMP_IDS.set(compId, componentDef.type);\n }\n }\n return compId;\n}\nfunction \u0275\u0275ControlFeature(passThroughInput) {\n return definition => {\n definition.controlDef = {\n create: (inst, host) => {\n inst?.\u0275ngControlCreate(host);\n },\n update: (inst, host) => {\n inst?.\u0275ngControlUpdate?.(host);\n },\n passThroughInput\n };\n };\n}\nfunction \u0275\u0275HostDirectivesFeature(rawHostDirectives) {\n const feature = definition => {\n const isEager = Array.isArray(rawHostDirectives);\n if (definition.hostDirectives === null) {\n definition.resolveHostDirectives = resolveHostDirectives;\n definition.hostDirectives = isEager ? rawHostDirectives.map(createHostDirectiveDef) : [rawHostDirectives];\n } else if (isEager) {\n definition.hostDirectives.unshift(...rawHostDirectives.map(createHostDirectiveDef));\n } else {\n definition.hostDirectives.unshift(rawHostDirectives);\n }\n };\n feature.ngInherit = true;\n return feature;\n}\nfunction resolveHostDirectives(matches) {\n const allDirectiveDefs = [];\n let hasComponent = false;\n let hostDirectiveDefs = null;\n let hostDirectiveRanges = null;\n for (let i = 0; i < matches.length; i++) {\n const def = matches[i];\n if (def.hostDirectives !== null) {\n const start = allDirectiveDefs.length;\n hostDirectiveDefs ??= new Map();\n hostDirectiveRanges ??= new Map();\n findHostDirectiveDefs(def, allDirectiveDefs, hostDirectiveDefs);\n hostDirectiveRanges.set(def, [start, allDirectiveDefs.length - 1]);\n }\n if (i === 0 && isComponentDef(def)) {\n hasComponent = true;\n allDirectiveDefs.push(def);\n }\n }\n for (let i = hasComponent ? 1 : 0; i < matches.length; i++) {\n allDirectiveDefs.push(matches[i]);\n }\n return [allDirectiveDefs, hostDirectiveDefs, hostDirectiveRanges];\n}\nfunction findHostDirectiveDefs(currentDef, matchedDefs, hostDirectiveDefs) {\n if (currentDef.hostDirectives !== null) {\n for (const configOrFn of currentDef.hostDirectives) {\n if (typeof configOrFn === 'function') {\n const resolved = configOrFn();\n for (const config of resolved) {\n trackHostDirectiveDef(createHostDirectiveDef(config), matchedDefs, hostDirectiveDefs);\n }\n } else {\n trackHostDirectiveDef(configOrFn, matchedDefs, hostDirectiveDefs);\n }\n }\n }\n}\nfunction trackHostDirectiveDef(def, matchedDefs, hostDirectiveDefs) {\n const hostDirectiveDef = getDirectiveDef(def.directive);\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n validateHostDirective(def, hostDirectiveDef);\n }\n patchDeclaredInputs(hostDirectiveDef.declaredInputs, def.inputs);\n findHostDirectiveDefs(hostDirectiveDef, matchedDefs, hostDirectiveDefs);\n hostDirectiveDefs.set(hostDirectiveDef, def);\n matchedDefs.push(hostDirectiveDef);\n}\nfunction createHostDirectiveDef(config) {\n return typeof config === 'function' ? {\n directive: resolveForwardRef(config),\n inputs: EMPTY_OBJ,\n outputs: EMPTY_OBJ\n } : {\n directive: resolveForwardRef(config.directive),\n inputs: bindingArrayToMap(config.inputs),\n outputs: bindingArrayToMap(config.outputs)\n };\n}\nfunction bindingArrayToMap(bindings) {\n if (bindings === undefined || bindings.length === 0) {\n return EMPTY_OBJ;\n }\n const result = {};\n for (let i = 0; i < bindings.length; i += 2) {\n result[bindings[i]] = bindings[i + 1];\n }\n return result;\n}\nfunction patchDeclaredInputs(declaredInputs, exposedInputs) {\n for (const publicName in exposedInputs) {\n if (exposedInputs.hasOwnProperty(publicName)) {\n const remappedPublicName = exposedInputs[publicName];\n const privateName = declaredInputs[publicName];\n if ((typeof ngDevMode === 'undefined' || ngDevMode) && declaredInputs.hasOwnProperty(remappedPublicName)) {\n assertEqual(declaredInputs[remappedPublicName], declaredInputs[publicName], `Conflicting host directive input alias ${publicName}.`);\n }\n declaredInputs[remappedPublicName] = privateName;\n }\n }\n}\nfunction validateHostDirective(hostDirectiveConfig, directiveDef) {\n const type = hostDirectiveConfig.directive;\n if (directiveDef === null) {\n if (getComponentDef(type) !== null) {\n throw new RuntimeError(310, `Host directive ${type.name} cannot be a component.`);\n }\n throw new RuntimeError(307, `Could not resolve metadata for host directive ${type.name}. ` + `Make sure that the ${type.name} class is annotated with an @Directive decorator.`);\n }\n if (!directiveDef.standalone) {\n throw new RuntimeError(308, `Host directive ${directiveDef.type.name} must be standalone.`);\n }\n validateMappings('input', directiveDef, hostDirectiveConfig.inputs);\n validateMappings('output', directiveDef, hostDirectiveConfig.outputs);\n}\nfunction validateMappings(bindingType, def, hostDirectiveBindings) {\n const className = def.type.name;\n const bindings = bindingType === 'input' ? def.inputs : def.outputs;\n for (const publicName in hostDirectiveBindings) {\n if (hostDirectiveBindings.hasOwnProperty(publicName)) {\n if (!bindings.hasOwnProperty(publicName)) {\n throw new RuntimeError(311, `Directive ${className} does not have an ${bindingType} with a public name of ${publicName}.`);\n }\n const remappedPublicName = hostDirectiveBindings[publicName];\n if (bindings.hasOwnProperty(remappedPublicName) && remappedPublicName !== publicName) {\n throw new RuntimeError(312, `Cannot alias ${bindingType} ${publicName} of host directive ${className} to ${remappedPublicName}, because it already has a different ${bindingType} with the same public name.`);\n }\n }\n }\n}\nfunction getSuperType(type) {\n return Object.getPrototypeOf(type.prototype).constructor;\n}\nfunction \u0275\u0275InheritDefinitionFeature(definition) {\n let superType = getSuperType(definition.type);\n let shouldInheritFields = true;\n const inheritanceChain = [definition];\n while (superType) {\n let superDef = undefined;\n if (isComponentDef(definition)) {\n superDef = superType.\u0275cmp || superType.\u0275dir;\n } else {\n if (superType.\u0275cmp) {\n throw new RuntimeError(903, ngDevMode && `Directives cannot inherit Components. Directive ${stringifyForError(definition.type)} is attempting to extend component ${stringifyForError(superType)}`);\n }\n superDef = superType.\u0275dir;\n }\n if (superDef) {\n if (shouldInheritFields) {\n inheritanceChain.push(superDef);\n const writeableDef = definition;\n writeableDef.inputs = maybeUnwrapEmpty(definition.inputs);\n writeableDef.declaredInputs = maybeUnwrapEmpty(definition.declaredInputs);\n writeableDef.outputs = maybeUnwrapEmpty(definition.outputs);\n const superHostBindings = superDef.hostBindings;\n superHostBindings && inheritHostBindings(definition, superHostBindings);\n const superViewQuery = superDef.viewQuery;\n const superContentQueries = superDef.contentQueries;\n superViewQuery && inheritViewQuery(definition, superViewQuery);\n superContentQueries && inheritContentQueries(definition, superContentQueries);\n mergeInputsWithTransforms(definition, superDef);\n fillProperties(definition.outputs, superDef.outputs);\n if (isComponentDef(superDef) && superDef.data.animation) {\n const defData = definition.data;\n defData.animation = (defData.animation || []).concat(superDef.data.animation);\n }\n }\n const features = superDef.features;\n if (features) {\n for (let i = 0; i < features.length; i++) {\n const feature = features[i];\n if (feature && feature.ngInherit) {\n feature(definition);\n }\n if (feature === \u0275\u0275InheritDefinitionFeature) {\n shouldInheritFields = false;\n }\n }\n }\n }\n superType = Object.getPrototypeOf(superType);\n }\n mergeHostAttrsAcrossInheritance(inheritanceChain);\n}\nfunction mergeInputsWithTransforms(target, source) {\n for (const key in source.inputs) {\n if (!source.inputs.hasOwnProperty(key)) {\n continue;\n }\n if (target.inputs.hasOwnProperty(key)) {\n continue;\n }\n const value = source.inputs[key];\n if (value !== undefined) {\n target.inputs[key] = value;\n target.declaredInputs[key] = source.declaredInputs[key];\n }\n }\n}\nfunction mergeHostAttrsAcrossInheritance(inheritanceChain) {\n let hostVars = 0;\n let hostAttrs = null;\n for (let i = inheritanceChain.length - 1; i >= 0; i--) {\n const def = inheritanceChain[i];\n def.hostVars = hostVars += def.hostVars;\n def.hostAttrs = mergeHostAttrs(def.hostAttrs, hostAttrs = mergeHostAttrs(hostAttrs, def.hostAttrs));\n }\n}\nfunction maybeUnwrapEmpty(value) {\n if (value === EMPTY_OBJ) {\n return {};\n } else if (value === EMPTY_ARRAY) {\n return [];\n } else {\n return value;\n }\n}\nfunction inheritViewQuery(definition, superViewQuery) {\n const prevViewQuery = definition.viewQuery;\n if (prevViewQuery) {\n definition.viewQuery = (rf, ctx) => {\n superViewQuery(rf, ctx);\n prevViewQuery(rf, ctx);\n };\n } else {\n definition.viewQuery = superViewQuery;\n }\n}\nfunction inheritContentQueries(definition, superContentQueries) {\n const prevContentQueries = definition.contentQueries;\n if (prevContentQueries) {\n definition.contentQueries = (rf, ctx, directiveIndex) => {\n superContentQueries(rf, ctx, directiveIndex);\n prevContentQueries(rf, ctx, directiveIndex);\n };\n } else {\n definition.contentQueries = superContentQueries;\n }\n}\nfunction inheritHostBindings(definition, superHostBindings) {\n const prevHostBindings = definition.hostBindings;\n if (prevHostBindings) {\n definition.hostBindings = (rf, ctx) => {\n superHostBindings(rf, ctx);\n prevHostBindings(rf, ctx);\n };\n } else {\n definition.hostBindings = superHostBindings;\n }\n}\nfunction templateCreate(tNode, declarationLView, declarationTView, index, templateFn, decls, vars, flags) {\n if (declarationTView.firstCreatePass) {\n tNode.mergedAttrs = mergeHostAttrs(tNode.mergedAttrs, tNode.attrs);\n const embeddedTView = tNode.tView = createTView(2, tNode, templateFn, decls, vars, declarationTView.directiveRegistry, declarationTView.pipeRegistry, null, declarationTView.schemas, declarationTView.consts, null);\n if (declarationTView.queries !== null) {\n declarationTView.queries.template(declarationTView, tNode);\n embeddedTView.queries = declarationTView.queries.embeddedTView(tNode);\n }\n }\n if (flags) {\n tNode.flags |= flags;\n }\n setCurrentTNode(tNode, false);\n const comment = _locateOrCreateContainerAnchor(declarationTView, declarationLView, tNode, index);\n if (wasLastNodeCreated()) {\n appendChild(declarationTView, declarationLView, comment, tNode);\n }\n attachPatchData(comment, declarationLView);\n const lContainer = createLContainer(comment, declarationLView, comment, tNode);\n declarationLView[index + HEADER_OFFSET] = lContainer;\n addToEndOfViewTree(declarationLView, lContainer);\n populateDehydratedViewsInLContainer(lContainer, tNode, declarationLView);\n}\nfunction declareDirectiveHostTemplate(declarationLView, declarationTView, index, templateFn, decls, vars, tagName, attrs, flags, localRefsIndex, localRefExtractor) {\n const adjustedIndex = index + HEADER_OFFSET;\n let tNode;\n if (declarationTView.firstCreatePass) {\n tNode = getOrCreateTNode(declarationTView, adjustedIndex, 4, tagName || null, attrs || null);\n if (getBindingsEnabled()) {\n resolveDirectives(declarationTView, declarationLView, tNode, getConstant(declarationTView.consts, localRefsIndex), findDirectiveDefMatches);\n }\n registerPostOrderHooks(declarationTView, tNode);\n } else {\n tNode = declarationTView.data[adjustedIndex];\n }\n templateCreate(tNode, declarationLView, declarationTView, index, templateFn, decls, vars, flags);\n if (isDirectiveHost(tNode)) {\n createDirectivesInstances(declarationTView, declarationLView, tNode);\n }\n if (localRefsIndex != null) {\n saveResolvedLocalsInData(declarationLView, tNode, localRefExtractor);\n }\n return tNode;\n}\nfunction declareNoDirectiveHostTemplate(declarationLView, declarationTView, index, templateFn, decls, vars, tagName, attrs, flags, localRefsIndex, localRefExtractor) {\n const adjustedIndex = index + HEADER_OFFSET;\n let tNode;\n if (declarationTView.firstCreatePass) {\n tNode = getOrCreateTNode(declarationTView, adjustedIndex, 4, tagName || null, attrs || null);\n if (localRefsIndex != null) {\n const refs = getConstant(declarationTView.consts, localRefsIndex);\n tNode.localNames = [];\n for (let i = 0; i < refs.length; i += 2) {\n tNode.localNames.push(refs[i], -1);\n }\n }\n } else {\n tNode = declarationTView.data[adjustedIndex];\n }\n templateCreate(tNode, declarationLView, declarationTView, index, templateFn, decls, vars, flags);\n if (localRefsIndex != null) {\n saveResolvedLocalsInData(declarationLView, tNode, localRefExtractor);\n }\n return tNode;\n}\nfunction \u0275\u0275template(index, templateFn, decls, vars, tagName, attrsIndex, localRefsIndex, localRefExtractor) {\n const lView = getLView();\n const tView = getTView();\n const attrs = getConstant(tView.consts, attrsIndex);\n declareDirectiveHostTemplate(lView, tView, index, templateFn, decls, vars, tagName, attrs, undefined, localRefsIndex, localRefExtractor);\n return \u0275\u0275template;\n}\nfunction \u0275\u0275domTemplate(index, templateFn, decls, vars, tagName, attrsIndex, localRefsIndex, localRefExtractor) {\n const lView = getLView();\n const tView = getTView();\n const attrs = getConstant(tView.consts, attrsIndex);\n declareNoDirectiveHostTemplate(lView, tView, index, templateFn, decls, vars, tagName, attrs, undefined, localRefsIndex, localRefExtractor);\n return \u0275\u0275domTemplate;\n}\nlet _locateOrCreateContainerAnchor = createContainerAnchorImpl;\nfunction createContainerAnchorImpl(tView, lView, tNode, index) {\n lastNodeWasCreated(true);\n return lView[RENDERER].createComment(ngDevMode ? 'container' : '');\n}\nfunction locateOrCreateContainerAnchorImpl(tView, lView, tNode, index) {\n const isNodeCreationMode = !canHydrateNode(lView, tNode);\n lastNodeWasCreated(isNodeCreationMode);\n const ssrId = lView[HYDRATION]?.data[TEMPLATES]?.[index] ?? null;\n if (ssrId !== null && tNode.tView !== null) {\n if (tNode.tView.ssrId === null) {\n tNode.tView.ssrId = ssrId;\n } else {\n ngDevMode && assertEqual(tNode.tView.ssrId, ssrId, 'Unexpected value of the `ssrId` for this TView');\n }\n }\n if (isNodeCreationMode) {\n return createContainerAnchorImpl(tView, lView);\n }\n const hydrationInfo = lView[HYDRATION];\n const currentRNode = locateNextRNode(hydrationInfo, tView, lView, tNode);\n ngDevMode && validateNodeExists(currentRNode, lView, tNode);\n setSegmentHead(hydrationInfo, index, currentRNode);\n const viewContainerSize = calcSerializedContainerSize(hydrationInfo, index);\n const comment = siblingAfter(viewContainerSize, currentRNode);\n if (ngDevMode) {\n validateMatchingNode(comment, Node.COMMENT_NODE, null, lView, tNode);\n markRNodeAsClaimedByHydration(comment);\n }\n return comment;\n}\nfunction enableLocateOrCreateContainerAnchorImpl() {\n _locateOrCreateContainerAnchor = locateOrCreateContainerAnchorImpl;\n}\nvar DeferDependenciesLoadingState = /*#__PURE__*/function (DeferDependenciesLoadingState) {\n DeferDependenciesLoadingState[DeferDependenciesLoadingState[\"NOT_STARTED\"] = 0] = \"NOT_STARTED\";\n DeferDependenciesLoadingState[DeferDependenciesLoadingState[\"IN_PROGRESS\"] = 1] = \"IN_PROGRESS\";\n DeferDependenciesLoadingState[DeferDependenciesLoadingState[\"COMPLETE\"] = 2] = \"COMPLETE\";\n DeferDependenciesLoadingState[DeferDependenciesLoadingState[\"FAILED\"] = 3] = \"FAILED\";\n return DeferDependenciesLoadingState;\n}(DeferDependenciesLoadingState || {});\nconst MINIMUM_SLOT = 0;\nconst LOADING_AFTER_SLOT = 1;\nvar DeferBlockState = /*#__PURE__*/function (DeferBlockState) {\n DeferBlockState[DeferBlockState[\"Placeholder\"] = 0] = \"Placeholder\";\n DeferBlockState[DeferBlockState[\"Loading\"] = 1] = \"Loading\";\n DeferBlockState[DeferBlockState[\"Complete\"] = 2] = \"Complete\";\n DeferBlockState[DeferBlockState[\"Error\"] = 3] = \"Error\";\n return DeferBlockState;\n}(DeferBlockState || {});\nvar DeferBlockInternalState = /*#__PURE__*/function (DeferBlockInternalState) {\n DeferBlockInternalState[DeferBlockInternalState[\"Initial\"] = -1] = \"Initial\";\n return DeferBlockInternalState;\n}(DeferBlockInternalState || {});\nconst NEXT_DEFER_BLOCK_STATE = 0;\nconst DEFER_BLOCK_STATE = 1;\nconst STATE_IS_FROZEN_UNTIL = 2;\nconst LOADING_AFTER_CLEANUP_FN = 3;\nconst TRIGGER_CLEANUP_FNS = 4;\nconst PREFETCH_TRIGGER_CLEANUP_FNS = 5;\nconst SSR_UNIQUE_ID = 6;\nconst SSR_BLOCK_STATE = 7;\nconst ON_COMPLETE_FNS = 8;\nconst HYDRATE_TRIGGER_CLEANUP_FNS = 9;\nvar DeferBlockBehavior = /*#__PURE__*/function (DeferBlockBehavior) {\n DeferBlockBehavior[DeferBlockBehavior[\"Manual\"] = 0] = \"Manual\";\n DeferBlockBehavior[DeferBlockBehavior[\"Playthrough\"] = 1] = \"Playthrough\";\n return DeferBlockBehavior;\n}(DeferBlockBehavior || {});\nfunction storeTriggerCleanupFn(type, lDetails, cleanupFn) {\n const key = getCleanupFnKeyByType(type);\n if (lDetails[key] === null) {\n lDetails[key] = [];\n }\n lDetails[key].push(cleanupFn);\n}\nfunction invokeTriggerCleanupFns(type, lDetails) {\n const key = getCleanupFnKeyByType(type);\n const cleanupFns = lDetails[key];\n if (cleanupFns !== null) {\n for (const cleanupFn of cleanupFns) {\n cleanupFn();\n }\n lDetails[key] = null;\n }\n}\nfunction invokeAllTriggerCleanupFns(lDetails) {\n invokeTriggerCleanupFns(1, lDetails);\n invokeTriggerCleanupFns(0, lDetails);\n invokeTriggerCleanupFns(2, lDetails);\n}\nfunction getCleanupFnKeyByType(type) {\n let key = TRIGGER_CLEANUP_FNS;\n if (type === 1) {\n key = PREFETCH_TRIGGER_CLEANUP_FNS;\n } else if (type === 2) {\n key = HYDRATE_TRIGGER_CLEANUP_FNS;\n }\n return key;\n}\nfunction getDeferBlockDataIndex(deferBlockIndex) {\n return deferBlockIndex + 1;\n}\nfunction getLDeferBlockDetails(lView, tNode) {\n const tView = lView[TVIEW];\n const slotIndex = getDeferBlockDataIndex(tNode.index);\n ngDevMode && assertIndexInDeclRange(tView, slotIndex);\n return lView[slotIndex];\n}\nfunction setLDeferBlockDetails(lView, deferBlockIndex, lDetails) {\n const tView = lView[TVIEW];\n const slotIndex = getDeferBlockDataIndex(deferBlockIndex);\n ngDevMode && assertIndexInDeclRange(tView, slotIndex);\n lView[slotIndex] = lDetails;\n}\nfunction getTDeferBlockDetails(tView, tNode) {\n const slotIndex = getDeferBlockDataIndex(tNode.index);\n ngDevMode && assertIndexInDeclRange(tView, slotIndex);\n return tView.data[slotIndex];\n}\nfunction setTDeferBlockDetails(tView, deferBlockIndex, deferBlockConfig) {\n const slotIndex = getDeferBlockDataIndex(deferBlockIndex);\n ngDevMode && assertIndexInDeclRange(tView, slotIndex);\n tView.data[slotIndex] = deferBlockConfig;\n}\nfunction getTemplateIndexForState(newState, hostLView, tNode) {\n const tView = hostLView[TVIEW];\n const tDetails = getTDeferBlockDetails(tView, tNode);\n switch (newState) {\n case DeferBlockState.Complete:\n return tDetails.primaryTmplIndex;\n case DeferBlockState.Loading:\n return tDetails.loadingTmplIndex;\n case DeferBlockState.Error:\n return tDetails.errorTmplIndex;\n case DeferBlockState.Placeholder:\n return tDetails.placeholderTmplIndex;\n default:\n ngDevMode && throwError(`Unexpected defer block state: ${newState}`);\n return null;\n }\n}\nfunction getMinimumDurationForState(tDetails, currentState) {\n if (currentState === DeferBlockState.Placeholder) {\n return tDetails.placeholderBlockConfig?.[MINIMUM_SLOT] ?? null;\n } else if (currentState === DeferBlockState.Loading) {\n return tDetails.loadingBlockConfig?.[MINIMUM_SLOT] ?? null;\n }\n return null;\n}\nfunction getLoadingBlockAfter(tDetails) {\n return tDetails.loadingBlockConfig?.[LOADING_AFTER_SLOT] ?? null;\n}\nfunction addDepsToRegistry(currentDeps, newDeps) {\n if (!currentDeps || currentDeps.length === 0) {\n return newDeps;\n }\n const currentDepSet = new Set(currentDeps);\n for (const dep of newDeps) {\n currentDepSet.add(dep);\n }\n return currentDeps.length === currentDepSet.size ? currentDeps : Array.from(currentDepSet);\n}\nfunction getPrimaryBlockTNode(tView, tDetails) {\n const adjustedIndex = tDetails.primaryTmplIndex + HEADER_OFFSET;\n return getTNode(tView, adjustedIndex);\n}\nfunction assertDeferredDependenciesLoaded(tDetails) {\n assertEqual(tDetails.loadingState, DeferDependenciesLoadingState.COMPLETE, 'Expecting all deferred dependencies to be loaded.');\n}\nfunction isTDeferBlockDetails(value) {\n return value !== null && typeof value === 'object' && typeof value.primaryTmplIndex === 'number';\n}\nfunction isDeferBlock(tView, tNode) {\n let tDetails = null;\n const slotIndex = getDeferBlockDataIndex(tNode.index);\n if (HEADER_OFFSET < slotIndex && slotIndex < tView.bindingStartIndex) {\n tDetails = getTDeferBlockDetails(tView, tNode);\n }\n return !!tDetails && isTDeferBlockDetails(tDetails);\n}\nfunction trackTriggerForDebugging(tView, tNode, textRepresentation) {\n const tDetails = getTDeferBlockDetails(tView, tNode);\n tDetails.debug ??= {};\n tDetails.debug.triggers ??= new Set();\n tDetails.debug.triggers.add(textRepresentation);\n}\nfunction onViewportWrapper(trigger, callback, injector, wrapperOptions) {\n const ngZone = injector.get(NgZone);\n return onViewport(trigger, () => ngZone.run(callback), options => ngZone.runOutsideAngular(() => createIntersectionObserver(options)), wrapperOptions);\n}\nfunction getTriggerLView(deferredHostLView, deferredTNode, walkUpTimes) {\n if (walkUpTimes == null) {\n return deferredHostLView;\n }\n if (walkUpTimes >= 0) {\n return walkUpViews(walkUpTimes, deferredHostLView);\n }\n const deferredContainer = deferredHostLView[deferredTNode.index];\n ngDevMode && assertLContainer(deferredContainer);\n const triggerLView = deferredContainer[CONTAINER_HEADER_OFFSET] ?? null;\n if (ngDevMode && triggerLView !== null) {\n const lDetails = getLDeferBlockDetails(deferredHostLView, deferredTNode);\n const renderedState = lDetails[DEFER_BLOCK_STATE];\n assertEqual(renderedState, DeferBlockState.Placeholder, 'Expected a placeholder to be rendered in this defer block.');\n assertLView(triggerLView);\n }\n return triggerLView;\n}\nfunction getTriggerElement(triggerLView, triggerIndex) {\n const element = getNativeByIndex(HEADER_OFFSET + triggerIndex, triggerLView);\n ngDevMode && assertElement(element);\n return element;\n}\nfunction registerDomTrigger(initialLView, tNode, triggerIndex, walkUpTimes, registerFn, callback, type, options) {\n const injector = initialLView[INJECTOR];\n const zone = injector.get(NgZone);\n let poll;\n function pollDomTrigger() {\n if (isDestroyed(initialLView)) {\n poll.destroy();\n return;\n }\n const lDetails = getLDeferBlockDetails(initialLView, tNode);\n const renderedState = lDetails[DEFER_BLOCK_STATE];\n if (renderedState !== DeferBlockInternalState.Initial && renderedState !== DeferBlockState.Placeholder) {\n poll.destroy();\n return;\n }\n const triggerLView = getTriggerLView(initialLView, tNode, walkUpTimes);\n if (!triggerLView) {\n return;\n }\n poll.destroy();\n if (isDestroyed(triggerLView)) {\n return;\n }\n const element = getTriggerElement(triggerLView, triggerIndex);\n const cleanup = registerFn(element, () => {\n zone.run(() => {\n if (initialLView !== triggerLView) {\n removeLViewOnDestroy(triggerLView, cleanup);\n }\n callback();\n });\n }, injector, options);\n if (initialLView !== triggerLView) {\n storeLViewOnDestroy(triggerLView, cleanup);\n }\n storeTriggerCleanupFn(type, lDetails, cleanup);\n }\n poll = afterEveryRender({\n read: pollDomTrigger\n }, {\n injector\n });\n}\nfunction onIdle(callback, injector) {\n const scheduler = injector.get(IdleScheduler);\n const cleanupFn = () => scheduler.remove(callback);\n scheduler.add(callback);\n return cleanupFn;\n}\nconst _requestIdleCallback = () => typeof requestIdleCallback !== 'undefined' ? requestIdleCallback : setTimeout;\nconst _cancelIdleCallback = () => typeof requestIdleCallback !== 'undefined' ? cancelIdleCallback : clearTimeout;\nlet IdleScheduler = /*#__PURE__*/(() => {\n class IdleScheduler {\n executingCallbacks = false;\n idleId = null;\n current = new Set();\n deferred = new Set();\n ngZone = inject(NgZone);\n requestIdleCallbackFn = _requestIdleCallback().bind(globalThis);\n cancelIdleCallbackFn = _cancelIdleCallback().bind(globalThis);\n add(callback) {\n const target = this.executingCallbacks ? this.deferred : this.current;\n target.add(callback);\n if (this.idleId === null) {\n this.scheduleIdleCallback();\n }\n }\n remove(callback) {\n const {\n current,\n deferred\n } = this;\n current.delete(callback);\n deferred.delete(callback);\n if (current.size === 0 && deferred.size === 0) {\n this.cancelIdleCallback();\n }\n }\n scheduleIdleCallback() {\n const callback = () => {\n this.cancelIdleCallback();\n this.executingCallbacks = true;\n for (const callback of this.current) {\n callback();\n }\n this.current.clear();\n this.executingCallbacks = false;\n if (this.deferred.size > 0) {\n for (const callback of this.deferred) {\n this.current.add(callback);\n }\n this.deferred.clear();\n this.scheduleIdleCallback();\n }\n };\n this.idleId = this.requestIdleCallbackFn(() => this.ngZone.run(callback));\n }\n cancelIdleCallback() {\n if (this.idleId !== null) {\n this.cancelIdleCallbackFn(this.idleId);\n this.idleId = null;\n }\n }\n ngOnDestroy() {\n this.cancelIdleCallback();\n this.current.clear();\n this.deferred.clear();\n }\n static \u0275prov = /* @__PURE__ */\n __defineInjectable({\n token: IdleScheduler,\n providedIn: 'root',\n factory: () => new IdleScheduler()\n });\n }\n return IdleScheduler;\n})();\nfunction onTimer(delay) {\n return (callback, injector) => scheduleTimerTrigger(delay, callback, injector);\n}\nfunction scheduleTimerTrigger(delay, callback, injector) {\n const scheduler = injector.get(TimerScheduler);\n const ngZone = injector.get(NgZone);\n const cleanupFn = () => scheduler.remove(callback);\n scheduler.add(delay, callback, ngZone);\n return cleanupFn;\n}\nlet TimerScheduler = /*#__PURE__*/(() => {\n class TimerScheduler {\n executingCallbacks = false;\n timeoutId = null;\n invokeTimerAt = null;\n current = [];\n deferred = [];\n add(delay, callback, ngZone) {\n const target = this.executingCallbacks ? this.deferred : this.current;\n this.addToQueue(target, Date.now() + delay, callback);\n this.scheduleTimer(ngZone);\n }\n remove(callback) {\n const {\n current,\n deferred\n } = this;\n const callbackIndex = this.removeFromQueue(current, callback);\n if (callbackIndex === -1) {\n this.removeFromQueue(deferred, callback);\n }\n if (current.length === 0 && deferred.length === 0) {\n this.clearTimeout();\n }\n }\n addToQueue(target, invokeAt, callback) {\n let insertAtIndex = target.length;\n for (let i = 0; i < target.length; i += 2) {\n const invokeQueuedCallbackAt = target[i];\n if (invokeQueuedCallbackAt > invokeAt) {\n insertAtIndex = i;\n break;\n }\n }\n arrayInsert2(target, insertAtIndex, invokeAt, callback);\n }\n removeFromQueue(target, callback) {\n let index = -1;\n for (let i = 0; i < target.length; i += 2) {\n const queuedCallback = target[i + 1];\n if (queuedCallback === callback) {\n index = i;\n break;\n }\n }\n if (index > -1) {\n arraySplice(target, index, 2);\n }\n return index;\n }\n scheduleTimer(ngZone) {\n const callback = () => {\n this.clearTimeout();\n this.executingCallbacks = true;\n const current = [...this.current];\n const now = Date.now();\n for (let i = 0; i < current.length; i += 2) {\n const invokeAt = current[i];\n const callback = current[i + 1];\n if (invokeAt <= now) {\n callback();\n } else {\n break;\n }\n }\n let lastCallbackIndex = -1;\n for (let i = 0; i < this.current.length; i += 2) {\n const invokeAt = this.current[i];\n if (invokeAt <= now) {\n lastCallbackIndex = i + 1;\n } else {\n break;\n }\n }\n if (lastCallbackIndex >= 0) {\n arraySplice(this.current, 0, lastCallbackIndex + 1);\n }\n this.executingCallbacks = false;\n if (this.deferred.length > 0) {\n for (let i = 0; i < this.deferred.length; i += 2) {\n const invokeAt = this.deferred[i];\n const callback = this.deferred[i + 1];\n this.addToQueue(this.current, invokeAt, callback);\n }\n this.deferred.length = 0;\n }\n this.scheduleTimer(ngZone);\n };\n const FRAME_DURATION_MS = 16;\n if (this.current.length > 0) {\n const now = Date.now();\n const invokeAt = this.current[0];\n if (this.timeoutId === null || this.invokeTimerAt && this.invokeTimerAt - invokeAt > FRAME_DURATION_MS) {\n this.clearTimeout();\n const timeout = Math.max(invokeAt - now, FRAME_DURATION_MS);\n this.invokeTimerAt = invokeAt;\n this.timeoutId = ngZone.runOutsideAngular(() => {\n return setTimeout(() => ngZone.run(callback), timeout);\n });\n }\n }\n }\n clearTimeout() {\n if (this.timeoutId !== null) {\n clearTimeout(this.timeoutId);\n this.timeoutId = null;\n }\n }\n ngOnDestroy() {\n this.clearTimeout();\n this.current.length = 0;\n this.deferred.length = 0;\n }\n static \u0275prov = /* @__PURE__ */\n __defineInjectable({\n token: TimerScheduler,\n providedIn: 'root',\n factory: () => new TimerScheduler()\n });\n }\n return TimerScheduler;\n})();\nlet CachedInjectorService = /*#__PURE__*/(() => {\n class CachedInjectorService {\n cachedInjectors = new Map();\n getOrCreateInjector(key, parentInjector, providers, debugName) {\n if (!this.cachedInjectors.has(key)) {\n const injector = providers.length > 0 ? createEnvironmentInjector(providers, parentInjector, debugName) : null;\n this.cachedInjectors.set(key, injector);\n }\n return this.cachedInjectors.get(key);\n }\n ngOnDestroy() {\n try {\n for (const injector of this.cachedInjectors.values()) {\n if (injector !== null) {\n injector.destroy();\n }\n }\n } finally {\n this.cachedInjectors.clear();\n }\n }\n static \u0275prov = /* @__PURE__ */\n __defineInjectable({\n token: CachedInjectorService,\n providedIn: 'environment',\n factory: () => new CachedInjectorService()\n });\n }\n return CachedInjectorService;\n})();\nconst DEFER_BLOCK_DEPENDENCY_INTERCEPTOR = /* @__PURE__ */new InjectionToken('DEFER_BLOCK_DEPENDENCY_INTERCEPTOR');\nconst DEFER_BLOCK_CONFIG = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'DEFER_BLOCK_CONFIG' : '');\nfunction getOrCreateEnvironmentInjector(parentInjector, tDetails, providers) {\n return parentInjector.get(CachedInjectorService).getOrCreateInjector(tDetails, parentInjector, providers, ngDevMode ? 'DeferBlock Injector' : '');\n}\nfunction createDeferBlockInjector(parentInjector, tDetails, providers) {\n if (parentInjector instanceof ChainedInjector) {\n const origInjector = parentInjector.injector;\n const parentEnvInjector = parentInjector.parentInjector;\n const envInjector = getOrCreateEnvironmentInjector(parentEnvInjector, tDetails, providers);\n return new ChainedInjector(origInjector, envInjector);\n }\n const parentEnvInjector = parentInjector.get(EnvironmentInjector);\n if (parentEnvInjector !== parentInjector) {\n const envInjector = getOrCreateEnvironmentInjector(parentEnvInjector, tDetails, providers);\n return new ChainedInjector(parentInjector, envInjector);\n }\n return getOrCreateEnvironmentInjector(parentInjector, tDetails, providers);\n}\nfunction renderDeferBlockState(newState, tNode, lContainer, skipTimerScheduling = false) {\n const hostLView = lContainer[PARENT];\n const hostTView = hostLView[TVIEW];\n if (isDestroyed(hostLView)) return;\n ngDevMode && assertTNodeForLView(tNode, hostLView);\n const lDetails = getLDeferBlockDetails(hostLView, tNode);\n ngDevMode && assertDefined(lDetails, 'Expected a defer block state defined');\n const currentState = lDetails[DEFER_BLOCK_STATE];\n const ssrState = lDetails[SSR_BLOCK_STATE];\n if (ssrState !== null && newState < ssrState) {\n return;\n }\n if (isValidStateChange(currentState, newState) && isValidStateChange(lDetails[NEXT_DEFER_BLOCK_STATE] ?? -1, newState)) {\n const tDetails = getTDeferBlockDetails(hostTView, tNode);\n const needsScheduling = !skipTimerScheduling && (typeof ngServerMode === 'undefined' || !ngServerMode) && (getLoadingBlockAfter(tDetails) !== null || getMinimumDurationForState(tDetails, DeferBlockState.Loading) !== null || getMinimumDurationForState(tDetails, DeferBlockState.Placeholder));\n if (ngDevMode && needsScheduling) {\n assertDefined(applyDeferBlockStateWithSchedulingImpl, 'Expected scheduling function to be defined');\n }\n const applyStateFn = needsScheduling ? applyDeferBlockStateWithSchedulingImpl : applyDeferBlockState;\n try {\n applyStateFn(newState, lDetails, lContainer, tNode, hostLView);\n } catch (error) {\n handleUncaughtError(hostLView, error);\n }\n }\n}\nfunction findMatchingDehydratedViewForDeferBlock(lContainer, lDetails) {\n const dehydratedViewIx = lContainer[DEHYDRATED_VIEWS]?.findIndex(view => view.data[DEFER_BLOCK_STATE$1] === lDetails[DEFER_BLOCK_STATE]) ?? -1;\n const dehydratedView = dehydratedViewIx > -1 ? lContainer[DEHYDRATED_VIEWS][dehydratedViewIx] : null;\n return {\n dehydratedView,\n dehydratedViewIx\n };\n}\nfunction applyDeferBlockState(newState, lDetails, lContainer, tNode, hostLView) {\n profiler(ProfilerEvent.DeferBlockStateStart);\n const stateTmplIndex = getTemplateIndexForState(newState, hostLView, tNode);\n if (stateTmplIndex !== null) {\n lDetails[DEFER_BLOCK_STATE] = newState;\n const hostTView = hostLView[TVIEW];\n const adjustedIndex = stateTmplIndex + HEADER_OFFSET;\n const activeBlockTNode = getTNode(hostTView, adjustedIndex);\n const viewIndex = 0;\n removeLViewFromLContainer(lContainer, viewIndex);\n let injector;\n if (newState === DeferBlockState.Complete) {\n const tDetails = getTDeferBlockDetails(hostTView, tNode);\n const providers = tDetails.providers;\n if (providers && providers.length > 0) {\n injector = createDeferBlockInjector(hostLView[INJECTOR], tDetails, providers);\n }\n }\n const {\n dehydratedView,\n dehydratedViewIx\n } = findMatchingDehydratedViewForDeferBlock(lContainer, lDetails);\n const embeddedLView = createAndRenderEmbeddedLView(hostLView, activeBlockTNode, null, {\n injector,\n dehydratedView\n });\n addLViewToLContainer(lContainer, embeddedLView, viewIndex, shouldAddViewToDom(activeBlockTNode, dehydratedView));\n markViewDirty(embeddedLView, 2);\n if (dehydratedViewIx > -1) {\n lContainer[DEHYDRATED_VIEWS]?.splice(dehydratedViewIx, 1);\n }\n if ((newState === DeferBlockState.Complete || newState === DeferBlockState.Error) && Array.isArray(lDetails[ON_COMPLETE_FNS])) {\n for (const callback of lDetails[ON_COMPLETE_FNS]) {\n callback();\n }\n lDetails[ON_COMPLETE_FNS] = null;\n }\n }\n profiler(ProfilerEvent.DeferBlockStateEnd);\n}\nfunction applyDeferBlockStateWithScheduling(newState, lDetails, lContainer, tNode, hostLView) {\n const now = Date.now();\n const hostTView = hostLView[TVIEW];\n const tDetails = getTDeferBlockDetails(hostTView, tNode);\n if (lDetails[STATE_IS_FROZEN_UNTIL] === null || lDetails[STATE_IS_FROZEN_UNTIL] <= now) {\n lDetails[STATE_IS_FROZEN_UNTIL] = null;\n const loadingAfter = getLoadingBlockAfter(tDetails);\n const inLoadingAfterPhase = lDetails[LOADING_AFTER_CLEANUP_FN] !== null;\n if (newState === DeferBlockState.Loading && loadingAfter !== null && !inLoadingAfterPhase) {\n lDetails[NEXT_DEFER_BLOCK_STATE] = newState;\n const cleanupFn = scheduleDeferBlockUpdate(loadingAfter, lDetails, tNode, lContainer, hostLView);\n lDetails[LOADING_AFTER_CLEANUP_FN] = cleanupFn;\n } else {\n if (newState > DeferBlockState.Loading && inLoadingAfterPhase) {\n lDetails[LOADING_AFTER_CLEANUP_FN]();\n lDetails[LOADING_AFTER_CLEANUP_FN] = null;\n lDetails[NEXT_DEFER_BLOCK_STATE] = null;\n }\n applyDeferBlockState(newState, lDetails, lContainer, tNode, hostLView);\n const duration = getMinimumDurationForState(tDetails, newState);\n if (duration !== null) {\n lDetails[STATE_IS_FROZEN_UNTIL] = now + duration;\n scheduleDeferBlockUpdate(duration, lDetails, tNode, lContainer, hostLView);\n }\n }\n } else {\n lDetails[NEXT_DEFER_BLOCK_STATE] = newState;\n }\n}\nfunction scheduleDeferBlockUpdate(timeout, lDetails, tNode, lContainer, hostLView) {\n const callback = () => {\n const nextState = lDetails[NEXT_DEFER_BLOCK_STATE];\n lDetails[STATE_IS_FROZEN_UNTIL] = null;\n lDetails[NEXT_DEFER_BLOCK_STATE] = null;\n if (nextState !== null) {\n renderDeferBlockState(nextState, tNode, lContainer);\n }\n };\n return scheduleTimerTrigger(timeout, callback, hostLView[INJECTOR]);\n}\nfunction isValidStateChange(currentState, newState) {\n return currentState < newState;\n}\nfunction renderPlaceholder(lView, tNode) {\n const lContainer = lView[tNode.index];\n ngDevMode && assertLContainer(lContainer);\n renderDeferBlockState(DeferBlockState.Placeholder, tNode, lContainer);\n}\nfunction renderDeferStateAfterResourceLoading(tDetails, tNode, lContainer) {\n ngDevMode && assertDefined(tDetails.loadingPromise, 'Expected loading Promise to exist on this defer block');\n tDetails.loadingPromise.then(() => {\n if (tDetails.loadingState === DeferDependenciesLoadingState.COMPLETE) {\n ngDevMode && assertDeferredDependenciesLoaded(tDetails);\n renderDeferBlockState(DeferBlockState.Complete, tNode, lContainer);\n } else if (tDetails.loadingState === DeferDependenciesLoadingState.FAILED) {\n renderDeferBlockState(DeferBlockState.Error, tNode, lContainer);\n }\n });\n}\nlet applyDeferBlockStateWithSchedulingImpl = null;\nfunction \u0275\u0275deferEnableTimerScheduling(tView, tDetails, placeholderConfigIndex, loadingConfigIndex) {\n const tViewConsts = tView.consts;\n if (placeholderConfigIndex != null) {\n tDetails.placeholderBlockConfig = getConstant(tViewConsts, placeholderConfigIndex);\n }\n if (loadingConfigIndex != null) {\n tDetails.loadingBlockConfig = getConstant(tViewConsts, loadingConfigIndex);\n }\n if (applyDeferBlockStateWithSchedulingImpl === null) {\n applyDeferBlockStateWithSchedulingImpl = applyDeferBlockStateWithScheduling;\n }\n}\nconst ASYNC_COMPONENT_METADATA_FN = '__ngAsyncComponentMetadataFn__';\nfunction getAsyncClassMetadataFn(type) {\n const componentClass = type;\n return componentClass[ASYNC_COMPONENT_METADATA_FN] ?? null;\n}\nfunction setClassMetadataAsync(type, dependencyLoaderFn, metadataSetterFn) {\n const componentClass = type;\n componentClass[ASYNC_COMPONENT_METADATA_FN] = () => Promise.all(dependencyLoaderFn()).then(dependencies => {\n metadataSetterFn(...dependencies);\n componentClass[ASYNC_COMPONENT_METADATA_FN] = null;\n return dependencies;\n });\n return componentClass[ASYNC_COMPONENT_METADATA_FN];\n}\nfunction setClassMetadata(type, decorators, ctorParameters, propDecorators) {\n return noSideEffects(() => {\n const clazz = type;\n if (decorators !== null) {\n if (clazz.hasOwnProperty('decorators') && clazz.decorators !== undefined) {\n clazz.decorators.push(...decorators);\n } else {\n clazz.decorators = decorators;\n }\n }\n if (ctorParameters !== null) {\n clazz.ctorParameters = ctorParameters;\n }\n if (propDecorators !== null) {\n if (clazz.hasOwnProperty('propDecorators') && clazz.propDecorators !== undefined) {\n clazz.propDecorators = {\n ...clazz.propDecorators,\n ...propDecorators\n };\n } else {\n clazz.propDecorators = propDecorators;\n }\n }\n });\n}\nlet Console = /*#__PURE__*/(() => {\n class Console {\n log(message) {\n console.log(message);\n }\n warn(message) {\n console.warn(message);\n }\n static \u0275fac = function Console_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || Console)();\n };\n static \u0275prov = /*@__PURE__*/__defineInjectable({\n token: Console,\n factory: Console.\u0275fac,\n providedIn: 'platform'\n });\n }\n return Console;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && setClassMetadata(Console, [{\n type: Injectable,\n args: [{\n providedIn: 'platform'\n }]\n }], null, null);\n})();\nclass DIDebugData {\n resolverToTokenToDependencies = /*#__PURE__*/new WeakMap();\n resolverToProviders = /*#__PURE__*/new WeakMap();\n resolverToEffects = /*#__PURE__*/new WeakMap();\n standaloneInjectorToComponent = /*#__PURE__*/new WeakMap();\n reset() {\n this.resolverToTokenToDependencies = new WeakMap();\n this.resolverToProviders = new WeakMap();\n this.standaloneInjectorToComponent = new WeakMap();\n }\n}\nlet frameworkDIDebugData = /*#__PURE__*/new DIDebugData();\nfunction getFrameworkDIDebugData() {\n return frameworkDIDebugData;\n}\nfunction setupFrameworkInjectorProfiler() {\n frameworkDIDebugData.reset();\n setInjectorProfiler(injectorProfilerEventHandler);\n}\nfunction injectorProfilerEventHandler(injectorProfilerEvent) {\n const {\n context,\n type\n } = injectorProfilerEvent;\n if (type === 0) {\n handleInjectEvent(context, injectorProfilerEvent.service);\n } else if (type === 1) {\n handleInstanceCreatedByInjectorEvent(context, injectorProfilerEvent.instance);\n } else if (type === 2) {\n handleProviderConfiguredEvent(context, injectorProfilerEvent.providerRecord);\n } else if (type === 3) {\n handleEffectCreatedEvent(context, injectorProfilerEvent.effect);\n } else if (type === 4) {\n handleEffectCreatedEvent(context, injectorProfilerEvent.effectPhase);\n }\n}\nfunction handleEffectCreatedEvent(context, effect) {\n const diResolver = getDIResolver(context.injector);\n if (diResolver === null) {\n throwError('An EffectCreated event must be run within an injection context.');\n }\n const {\n resolverToEffects\n } = frameworkDIDebugData;\n const cleanupContainer = effect instanceof EffectRefImpl ? effect[SIGNAL] : effect.sequence;\n let trackedEffects = resolverToEffects.get(diResolver);\n if (!trackedEffects) {\n trackedEffects = [];\n resolverToEffects.set(diResolver, trackedEffects);\n }\n trackedEffects.push(effect);\n cleanupContainer.onDestroyFns ??= [];\n cleanupContainer.onDestroyFns.push(() => {\n const index = trackedEffects.indexOf(effect);\n if (index > -1) {\n trackedEffects.splice(index, 1);\n }\n });\n}\nfunction handleInjectEvent(context, data) {\n const diResolver = getDIResolver(context.injector);\n if (diResolver === null) {\n throwError('An Inject event must be run within an injection context.');\n }\n const diResolverToInstantiatedToken = frameworkDIDebugData.resolverToTokenToDependencies;\n if (!diResolverToInstantiatedToken.has(diResolver)) {\n diResolverToInstantiatedToken.set(diResolver, new WeakMap());\n }\n if (!canBeHeldWeakly(context.token)) {\n return;\n }\n const instantiatedTokenToDependencies = diResolverToInstantiatedToken.get(diResolver);\n if (!instantiatedTokenToDependencies.has(context.token)) {\n instantiatedTokenToDependencies.set(context.token, []);\n }\n const {\n token,\n value,\n flags\n } = data;\n assertDefined(context.token, 'Injector profiler context token is undefined.');\n const dependencies = instantiatedTokenToDependencies.get(context.token);\n assertDefined(dependencies, 'Could not resolve dependencies for token.');\n if (context.injector instanceof NodeInjector) {\n dependencies.push({\n token,\n value,\n flags,\n injectedIn: getNodeInjectorContext(context.injector)\n });\n } else {\n dependencies.push({\n token,\n value,\n flags\n });\n }\n}\nfunction getNodeInjectorContext(injector) {\n if (!(injector instanceof NodeInjector)) {\n throwError('getNodeInjectorContext must be called with a NodeInjector');\n }\n const lView = getNodeInjectorLView(injector);\n const tNode = getNodeInjectorTNode(injector);\n if (tNode === null) {\n return;\n }\n assertTNodeForLView(tNode, lView);\n return {\n lView,\n tNode\n };\n}\nfunction handleInstanceCreatedByInjectorEvent(context, data) {\n const {\n value\n } = data;\n if (data.value == null) {\n return;\n }\n if (getDIResolver(context.injector) === null) {\n throwError('An InjectorCreatedInstance event must be run within an injection context.');\n }\n let standaloneComponent = undefined;\n if (typeof value === 'object') {\n standaloneComponent = value?.constructor;\n }\n if (standaloneComponent == undefined || !isStandaloneComponent(standaloneComponent)) {\n return;\n }\n const environmentInjector = context.injector.get(EnvironmentInjector, null, {\n optional: true\n });\n if (environmentInjector === null) {\n return;\n }\n const {\n standaloneInjectorToComponent\n } = frameworkDIDebugData;\n if (standaloneInjectorToComponent.has(environmentInjector)) {\n return;\n }\n standaloneInjectorToComponent.set(environmentInjector, standaloneComponent);\n}\nfunction isStandaloneComponent(value) {\n const def = getComponentDef(value);\n return !!def?.standalone;\n}\nfunction handleProviderConfiguredEvent(context, data) {\n const {\n resolverToProviders\n } = frameworkDIDebugData;\n let diResolver;\n if (context?.injector instanceof NodeInjector) {\n diResolver = getNodeInjectorTNode(context.injector);\n } else {\n diResolver = context.injector;\n }\n if (diResolver === null) {\n throwError('A ProviderConfigured event must be run within an injection context.');\n }\n if (!resolverToProviders.has(diResolver)) {\n resolverToProviders.set(diResolver, []);\n }\n resolverToProviders.get(diResolver).push(data);\n}\nfunction getDIResolver(injector) {\n let diResolver = null;\n if (injector === undefined) {\n return diResolver;\n }\n if (injector instanceof NodeInjector) {\n diResolver = getNodeInjectorLView(injector);\n } else {\n diResolver = injector;\n }\n return diResolver;\n}\nfunction canBeHeldWeakly(value) {\n return value !== null && (typeof value === 'object' || typeof value === 'function' || typeof value === 'symbol');\n}\nfunction isSignal(value) {\n return typeof value === 'function' && value[SIGNAL] !== undefined;\n}\nfunction isWritableSignal(value) {\n return isSignal(value) && typeof value.set === 'function';\n}\nfunction applyChanges(component) {\n ngDevMode && assertDefined(component, 'component');\n markViewDirty(getComponentViewByInstance(component), 3);\n getRootComponents(component).forEach(rootComponent => detectChanges(rootComponent));\n}\nfunction detectChanges(component) {\n const view = getComponentViewByInstance(component);\n view[FLAGS] |= 1024;\n detectChangesInternal(view);\n}\nfunction getDeferBlocks$1(lView, deferBlocks) {\n const tView = lView[TVIEW];\n for (let i = HEADER_OFFSET; i < tView.bindingStartIndex; i++) {\n if (isLContainer(lView[i])) {\n const lContainer = lView[i];\n const isLast = i === tView.bindingStartIndex - 1;\n if (!isLast) {\n const tNode = tView.data[i];\n const tDetails = getTDeferBlockDetails(tView, tNode);\n if (isTDeferBlockDetails(tDetails)) {\n deferBlocks.push({\n lContainer,\n lView,\n tNode,\n tDetails\n });\n continue;\n }\n }\n if (isLView(lContainer[HOST])) {\n getDeferBlocks$1(lContainer[HOST], deferBlocks);\n }\n for (let j = CONTAINER_HEADER_OFFSET; j < lContainer.length; j++) {\n getDeferBlocks$1(lContainer[j], deferBlocks);\n }\n } else if (isLView(lView[i])) {\n getDeferBlocks$1(lView[i], deferBlocks);\n }\n }\n}\nfunction getDeferBlocks(node) {\n const results = [];\n const lView = getLContext(node)?.lView;\n if (lView) {\n findDeferBlocks(node, lView, results);\n }\n return results;\n}\nfunction findDeferBlocks(node, lView, results) {\n const viewInjector = lView[INJECTOR];\n const registry = viewInjector.get(DEHYDRATED_BLOCK_REGISTRY, null, {\n optional: true\n });\n const blocks = [];\n getDeferBlocks$1(lView, blocks);\n const transferState = viewInjector.get(TransferState);\n const deferBlockParents = transferState.get(NGH_DEFER_BLOCKS_KEY, {});\n for (const details of blocks) {\n const native = getNativeByTNode(details.tNode, details.lView);\n const lDetails = getLDeferBlockDetails(details.lView, details.tNode);\n if (!node.contains(native)) {\n continue;\n }\n const tDetails = details.tDetails;\n const renderedLView = getRendererLView(details);\n const rootNodes = [];\n const hydrationState = inferHydrationState(tDetails, lDetails, registry);\n if (renderedLView !== null) {\n collectNativeNodes(renderedLView[TVIEW], renderedLView, renderedLView[TVIEW].firstChild, rootNodes);\n } else if (hydrationState === 'dehydrated') {\n const deferId = lDetails[SSR_UNIQUE_ID];\n const deferData = deferBlockParents[deferId];\n const numberOfRootNodes = deferData[NUM_ROOT_NODES];\n let collectedNodeCount = 0;\n const deferBlockCommentNode = details.lContainer[NATIVE];\n let currentNode = deferBlockCommentNode.previousSibling;\n while (collectedNodeCount < numberOfRootNodes && currentNode) {\n rootNodes.unshift(currentNode);\n currentNode = currentNode.previousSibling;\n collectedNodeCount++;\n }\n }\n const data = {\n state: stringifyState(lDetails[DEFER_BLOCK_STATE]),\n incrementalHydrationState: hydrationState,\n hasErrorBlock: tDetails.errorTmplIndex !== null,\n loadingBlock: {\n exists: tDetails.loadingTmplIndex !== null,\n minimumTime: tDetails.loadingBlockConfig?.[MINIMUM_SLOT] ?? null,\n afterTime: tDetails.loadingBlockConfig?.[LOADING_AFTER_SLOT] ?? null\n },\n placeholderBlock: {\n exists: tDetails.placeholderTmplIndex !== null,\n minimumTime: tDetails.placeholderBlockConfig?.[MINIMUM_SLOT] ?? null\n },\n triggers: tDetails.debug?.triggers ? Array.from(tDetails.debug.triggers).sort() : [],\n hostNode: details.lContainer[HOST],\n rootNodes\n };\n results.push(data);\n if (renderedLView !== null) {\n findDeferBlocks(node, renderedLView, results);\n }\n }\n}\nfunction stringifyState(state) {\n switch (state) {\n case DeferBlockState.Complete:\n return 'complete';\n case DeferBlockState.Loading:\n return 'loading';\n case DeferBlockState.Placeholder:\n return 'placeholder';\n case DeferBlockState.Error:\n return 'error';\n case DeferBlockInternalState.Initial:\n return 'initial';\n default:\n throw new Error(`Unrecognized state ${state}`);\n }\n}\nfunction inferHydrationState(tDetails, lDetails, registry) {\n if (registry === null || lDetails[SSR_UNIQUE_ID] === null || tDetails.hydrateTriggers === null || tDetails.hydrateTriggers.has(7)) {\n return 'not-configured';\n }\n return registry.has(lDetails[SSR_UNIQUE_ID]) ? 'dehydrated' : 'hydrated';\n}\nfunction getRendererLView(details) {\n if (details.lContainer.length <= CONTAINER_HEADER_OFFSET) {\n return null;\n }\n const lView = details.lContainer[CONTAINER_HEADER_OFFSET];\n ngDevMode && assertLView(lView);\n return lView;\n}\nfunction getDependenciesFromInjectable(injector, token) {\n const instance = injector.get(token, null, {\n self: true,\n optional: true\n });\n if (instance === null) {\n throw new Error(`Unable to determine instance of ${token} in given injector`);\n }\n const unformattedDependencies = getDependenciesForTokenInInjector(token, injector);\n const resolutionPath = getInjectorResolutionPath(injector);\n const dependencies = unformattedDependencies.map(dep => {\n const formattedDependency = {\n value: dep.value\n };\n const flags = dep.flags;\n formattedDependency.flags = {\n optional: (8 & flags) === 8,\n host: (1 & flags) === 1,\n self: (2 & flags) === 2,\n skipSelf: (4 & flags) === 4\n };\n for (let i = 0; i < resolutionPath.length; i++) {\n const injectorToCheck = resolutionPath[i];\n if (i === 0 && formattedDependency.flags.skipSelf) {\n continue;\n }\n if (formattedDependency.flags.host && injectorToCheck instanceof EnvironmentInjector) {\n break;\n }\n const instance = injectorToCheck.get(dep.token, null, {\n self: true,\n optional: true\n });\n if (instance !== null) {\n if (formattedDependency.flags.host) {\n const firstInjector = resolutionPath[0];\n const lookupFromFirstInjector = firstInjector.get(dep.token, null, {\n ...formattedDependency.flags,\n optional: true\n });\n if (lookupFromFirstInjector !== null) {\n formattedDependency.providedIn = injectorToCheck;\n }\n break;\n }\n formattedDependency.providedIn = injectorToCheck;\n break;\n }\n if (i === 0 && formattedDependency.flags.self) {\n break;\n }\n }\n if (dep.token) formattedDependency.token = dep.token;\n return formattedDependency;\n });\n return {\n instance,\n dependencies\n };\n}\nfunction getDependenciesForTokenInInjector(token, injector) {\n const {\n resolverToTokenToDependencies\n } = getFrameworkDIDebugData();\n if (!(injector instanceof NodeInjector)) {\n return resolverToTokenToDependencies.get(injector)?.get?.(token) ?? [];\n }\n const lView = getNodeInjectorLView(injector);\n const tokenDependencyMap = resolverToTokenToDependencies.get(lView);\n const dependencies = tokenDependencyMap?.get(token) ?? [];\n return dependencies.filter(dependency => {\n const dependencyNode = dependency.injectedIn?.tNode;\n if (dependencyNode === undefined) {\n return false;\n }\n const instanceNode = getNodeInjectorTNode(injector);\n assertTNode(dependencyNode);\n assertTNode(instanceNode);\n return dependencyNode === instanceNode;\n });\n}\nfunction getProviderImportsContainer(injector) {\n const {\n standaloneInjectorToComponent\n } = getFrameworkDIDebugData();\n if (standaloneInjectorToComponent.has(injector)) {\n return standaloneInjectorToComponent.get(injector);\n }\n const defTypeRef = injector.get(NgModuleRef$1, null, {\n self: true,\n optional: true\n });\n if (defTypeRef === null) {\n return null;\n }\n if (defTypeRef.instance === null) {\n return null;\n }\n return defTypeRef.instance.constructor;\n}\nfunction getNodeInjectorProviders(injector) {\n const diResolver = getNodeInjectorTNode(injector);\n const {\n resolverToProviders\n } = getFrameworkDIDebugData();\n return resolverToProviders.get(diResolver) ?? [];\n}\nfunction getProviderImportPaths(providerImportsContainer) {\n const providerToPath = new Map();\n const visitedContainers = new Set();\n const visitor = walkProviderTreeToDiscoverImportPaths(providerToPath, visitedContainers);\n walkProviderTree(providerImportsContainer, visitor, [], new Set());\n return providerToPath;\n}\nfunction walkProviderTreeToDiscoverImportPaths(providerToPath, visitedContainers) {\n return (provider, container) => {\n if (!providerToPath.has(provider)) {\n providerToPath.set(provider, [container]);\n }\n if (!visitedContainers.has(container)) {\n for (const prov of providerToPath.keys()) {\n const existingImportPath = providerToPath.get(prov);\n let containerDef = getInjectorDef(container);\n if (!containerDef) {\n const ngModule = container.ngModule;\n containerDef = getInjectorDef(ngModule);\n }\n if (!containerDef) {\n return;\n }\n const lastContainerAddedToPath = existingImportPath[0];\n let isNextStepInPath = false;\n deepForEach(containerDef.imports, moduleImport => {\n if (isNextStepInPath) {\n return;\n }\n isNextStepInPath = moduleImport.ngModule === lastContainerAddedToPath || moduleImport === lastContainerAddedToPath;\n if (isNextStepInPath) {\n providerToPath.get(prov)?.unshift(container);\n }\n });\n }\n }\n visitedContainers.add(container);\n };\n}\nfunction getEnvironmentInjectorProviders(injector) {\n const providerRecordsWithoutImportPaths = getFrameworkDIDebugData().resolverToProviders.get(injector) ?? [];\n if (isPlatformInjector(injector)) {\n return providerRecordsWithoutImportPaths;\n }\n const providerImportsContainer = getProviderImportsContainer(injector);\n if (providerImportsContainer === null) {\n return providerRecordsWithoutImportPaths;\n }\n const providerToPath = getProviderImportPaths(providerImportsContainer);\n const providerRecords = [];\n for (const providerRecord of providerRecordsWithoutImportPaths) {\n const provider = providerRecord.provider;\n const token = provider.provide;\n if (token === ENVIRONMENT_INITIALIZER || token === INJECTOR_DEF_TYPES) {\n continue;\n }\n let importPath = providerToPath.get(provider) ?? [];\n const def = getComponentDef(providerImportsContainer);\n const isStandaloneComponent = !!def?.standalone;\n if (isStandaloneComponent) {\n importPath = [providerImportsContainer, ...importPath];\n }\n providerRecords.push({\n ...providerRecord,\n importPath\n });\n }\n return providerRecords;\n}\nfunction isPlatformInjector(injector) {\n return injector instanceof R3Injector && injector.scopes.has('platform');\n}\nfunction getInjectorProviders(injector) {\n if (injector instanceof NodeInjector) {\n return getNodeInjectorProviders(injector);\n } else if (injector instanceof EnvironmentInjector) {\n return getEnvironmentInjectorProviders(injector);\n }\n throwError('getInjectorProviders only supports NodeInjector and EnvironmentInjector');\n}\nfunction getInjectorMetadata(injector) {\n if (injector instanceof NodeInjector) {\n const lView = getNodeInjectorLView(injector);\n const tNode = getNodeInjectorTNode(injector);\n assertTNodeForLView(tNode, lView);\n return {\n type: 'element',\n source: getNativeByTNode(tNode, lView)\n };\n }\n if (injector instanceof R3Injector) {\n return {\n type: 'environment',\n source: injector.source ?? null\n };\n }\n if (injector instanceof NullInjector) {\n return {\n type: 'null',\n source: null\n };\n }\n return null;\n}\nfunction getInjectorResolutionPath(injector) {\n const resolutionPath = [injector];\n getInjectorResolutionPathHelper(injector, resolutionPath);\n return resolutionPath;\n}\nfunction getInjectorResolutionPathHelper(injector, resolutionPath) {\n const parent = getInjectorParent(injector);\n if (parent === null) {\n if (injector instanceof NodeInjector) {\n const firstInjector = resolutionPath[0];\n if (firstInjector instanceof NodeInjector) {\n const moduleInjector = getModuleInjectorOfNodeInjector(firstInjector);\n if (moduleInjector === null) {\n throwError('NodeInjector must have some connection to the module injector tree');\n }\n resolutionPath.push(moduleInjector);\n getInjectorResolutionPathHelper(moduleInjector, resolutionPath);\n }\n return resolutionPath;\n }\n } else {\n resolutionPath.push(parent);\n getInjectorResolutionPathHelper(parent, resolutionPath);\n }\n return resolutionPath;\n}\nfunction getInjectorParent(injector) {\n if (injector instanceof R3Injector) {\n return injector.parent;\n }\n let tNode;\n let lView;\n if (injector instanceof NodeInjector) {\n tNode = getNodeInjectorTNode(injector);\n lView = getNodeInjectorLView(injector);\n } else if (injector instanceof NullInjector) {\n return null;\n } else if (injector instanceof ChainedInjector) {\n return injector.parentInjector;\n } else {\n throwError('getInjectorParent only support injectors of type R3Injector, NodeInjector, NullInjector');\n }\n const parentLocation = getParentInjectorLocation(tNode, lView);\n if (hasParentInjector(parentLocation)) {\n const parentInjectorIndex = getParentInjectorIndex(parentLocation);\n const parentLView = getParentInjectorView(parentLocation, lView);\n const parentTView = parentLView[TVIEW];\n const parentTNode = parentTView.data[parentInjectorIndex + 8];\n return new NodeInjector(parentTNode, parentLView);\n } else {\n const chainedInjector = lView[INJECTOR];\n const injectorParent = chainedInjector.injector?.parent;\n if (injectorParent instanceof NodeInjector) {\n return injectorParent;\n }\n }\n return null;\n}\nfunction getModuleInjectorOfNodeInjector(injector) {\n let lView;\n if (injector instanceof NodeInjector) {\n lView = getNodeInjectorLView(injector);\n } else {\n throwError('getModuleInjectorOfNodeInjector must be called with a NodeInjector');\n }\n const inj = lView[INJECTOR];\n const moduleInjector = inj instanceof ChainedInjector ? inj.parentInjector : inj.parent;\n if (!moduleInjector) {\n throwError('NodeInjector must have some connection to the module injector tree');\n }\n return moduleInjector;\n}\nfunction isComputedNode(node) {\n return node.kind === 'computed';\n}\nfunction isTemplateEffectNode(node) {\n return node.kind === 'template';\n}\nfunction isSignalNode(node) {\n return node.kind === 'signal';\n}\nfunction getTemplateConsumer(injector) {\n const tNode = getNodeInjectorTNode(injector);\n assertTNode(tNode);\n const lView = getNodeInjectorLView(injector);\n assertLView(lView);\n const templateLView = lView[tNode.index];\n if (isLView(templateLView)) {\n return templateLView[REACTIVE_TEMPLATE_CONSUMER] ?? null;\n }\n return null;\n}\nconst signalDebugMap = /*#__PURE__*/new WeakMap();\nlet counter$1 = 0;\nfunction getNodesAndEdgesFromSignalMap(signalMap) {\n const nodes = Array.from(signalMap.keys());\n const debugSignalGraphNodes = [];\n const edges = [];\n for (const [consumer, producers] of signalMap.entries()) {\n const consumerIndex = nodes.indexOf(consumer);\n let id = signalDebugMap.get(consumer);\n if (!id) {\n counter$1++;\n id = counter$1.toString();\n signalDebugMap.set(consumer, id);\n }\n if (isComputedNode(consumer)) {\n debugSignalGraphNodes.push({\n label: consumer.debugName,\n value: consumer.value,\n kind: consumer.kind,\n epoch: consumer.version,\n debuggableFn: consumer.computation,\n id\n });\n } else if (isSignalNode(consumer)) {\n debugSignalGraphNodes.push({\n label: consumer.debugName,\n value: consumer.value,\n kind: consumer.kind,\n epoch: consumer.version,\n id\n });\n } else if (isTemplateEffectNode(consumer)) {\n debugSignalGraphNodes.push({\n label: consumer.debugName ?? consumer.lView?.[HOST]?.tagName?.toLowerCase?.(),\n kind: consumer.kind,\n epoch: consumer.version,\n debuggableFn: consumer.lView?.[CONTEXT]?.constructor,\n id\n });\n } else {\n debugSignalGraphNodes.push({\n label: consumer.debugName,\n kind: consumer.kind,\n epoch: consumer.version,\n id\n });\n }\n for (const producer of producers) {\n edges.push({\n consumer: consumerIndex,\n producer: nodes.indexOf(producer)\n });\n }\n }\n return {\n nodes: debugSignalGraphNodes,\n edges\n };\n}\nfunction extractEffectsFromInjector(injector) {\n let diResolver = injector;\n if (injector instanceof NodeInjector) {\n const lView = getNodeInjectorLView(injector);\n diResolver = lView;\n }\n const resolverToEffects = getFrameworkDIDebugData().resolverToEffects;\n const effects = resolverToEffects.get(diResolver) ?? [];\n return effects.map(effect => {\n if (effect instanceof EffectRefImpl) {\n return effect[SIGNAL];\n } else {\n return effect.signal[SIGNAL];\n }\n });\n}\nfunction extractSignalNodesAndEdgesFromRoots(nodes, signalDependenciesMap = new Map()) {\n for (const node of nodes) {\n if (signalDependenciesMap.has(node)) {\n continue;\n }\n const producerNodes = [];\n for (let link = node.producers; link !== undefined; link = link.nextProducer) {\n const producer = link.producer;\n producerNodes.push(producer);\n }\n signalDependenciesMap.set(node, producerNodes);\n extractSignalNodesAndEdgesFromRoots(producerNodes, signalDependenciesMap);\n }\n return signalDependenciesMap;\n}\nfunction getSignalGraph(injector) {\n let templateConsumer = null;\n if (!(injector instanceof NodeInjector) && !(injector instanceof R3Injector)) {\n return throwError('getSignalGraph must be called with a NodeInjector or R3Injector');\n }\n if (injector instanceof NodeInjector) {\n templateConsumer = getTemplateConsumer(injector);\n }\n const nonTemplateEffectNodes = extractEffectsFromInjector(injector);\n const signalNodes = templateConsumer ? [templateConsumer, ...nonTemplateEffectNodes] : nonTemplateEffectNodes;\n const signalDependenciesMap = extractSignalNodesAndEdgesFromRoots(signalNodes);\n return getNodesAndEdgesFromSignalMap(signalDependenciesMap);\n}\nlet changeDetectionRuns = 0;\nlet changeDetectionSyncRuns = 0;\nlet counter = 0;\nconst eventsStack = [];\nfunction measureStart(startEvent) {\n eventsStack.push([startEvent, counter]);\n console.timeStamp('Event_' + startEvent + '_' + counter++);\n}\nfunction measureEnd(startEvent, entryName, color) {\n let top;\n do {\n top = eventsStack.pop();\n assertDefined(top, 'Profiling error: could not find start event entry ' + startEvent);\n } while (top[0] !== startEvent);\n console.timeStamp(entryName, 'Event_' + top[0] + '_' + top[1], undefined, '\\u{1F170}\\uFE0F Angular', undefined, color);\n}\nconst chromeDevToolsInjectorProfiler = event => {\n const eventType = event.type;\n if (eventType === 5) {\n measureStart(100);\n } else if (eventType === 1) {\n const token = event.context.token;\n measureEnd(100, getProviderTokenMeasureName(token), 'tertiary-dark');\n }\n};\nconst devToolsProfiler = (event, instance, eventFn) => {\n switch (event) {\n case ProfilerEvent.BootstrapApplicationStart:\n case ProfilerEvent.BootstrapComponentStart:\n case ProfilerEvent.ChangeDetectionStart:\n case ProfilerEvent.ChangeDetectionSyncStart:\n case ProfilerEvent.AfterRenderHooksStart:\n case ProfilerEvent.ComponentStart:\n case ProfilerEvent.DeferBlockStateStart:\n case ProfilerEvent.DynamicComponentStart:\n case ProfilerEvent.TemplateCreateStart:\n case ProfilerEvent.LifecycleHookStart:\n case ProfilerEvent.TemplateUpdateStart:\n case ProfilerEvent.HostBindingsUpdateStart:\n case ProfilerEvent.OutputStart:\n {\n measureStart(event);\n break;\n }\n case ProfilerEvent.BootstrapApplicationEnd:\n {\n measureEnd(ProfilerEvent.BootstrapApplicationStart, 'Bootstrap application', 'primary-dark');\n break;\n }\n case ProfilerEvent.BootstrapComponentEnd:\n {\n measureEnd(ProfilerEvent.BootstrapComponentStart, 'Bootstrap component', 'primary-dark');\n break;\n }\n case ProfilerEvent.ChangeDetectionEnd:\n {\n changeDetectionSyncRuns = 0;\n measureEnd(ProfilerEvent.ChangeDetectionStart, 'Change detection ' + changeDetectionRuns++, 'primary-dark');\n break;\n }\n case ProfilerEvent.ChangeDetectionSyncEnd:\n {\n measureEnd(ProfilerEvent.ChangeDetectionSyncStart, 'Synchronization ' + changeDetectionSyncRuns++, 'primary');\n break;\n }\n case ProfilerEvent.AfterRenderHooksEnd:\n {\n measureEnd(ProfilerEvent.AfterRenderHooksStart, 'After render hooks', 'primary');\n break;\n }\n case ProfilerEvent.ComponentEnd:\n {\n const typeName = getComponentMeasureName(instance);\n measureEnd(ProfilerEvent.ComponentStart, typeName, 'primary-light');\n break;\n }\n case ProfilerEvent.DeferBlockStateEnd:\n {\n measureEnd(ProfilerEvent.DeferBlockStateStart, 'Defer block', 'primary-dark');\n break;\n }\n case ProfilerEvent.DynamicComponentEnd:\n {\n measureEnd(ProfilerEvent.DynamicComponentStart, 'Dynamic component creation', 'primary-dark');\n break;\n }\n case ProfilerEvent.TemplateUpdateEnd:\n {\n measureEnd(ProfilerEvent.TemplateUpdateStart, stringifyForError(eventFn) + ' (update)', 'secondary-dark');\n break;\n }\n case ProfilerEvent.TemplateCreateEnd:\n {\n measureEnd(ProfilerEvent.TemplateCreateStart, stringifyForError(eventFn) + ' (create)', 'secondary');\n break;\n }\n case ProfilerEvent.HostBindingsUpdateEnd:\n {\n measureEnd(ProfilerEvent.HostBindingsUpdateStart, 'HostBindings', 'secondary-dark');\n break;\n }\n case ProfilerEvent.LifecycleHookEnd:\n {\n const typeName = getComponentMeasureName(instance);\n measureEnd(ProfilerEvent.LifecycleHookStart, `${typeName}:${stringifyForError(eventFn)}`, 'tertiary');\n break;\n }\n case ProfilerEvent.OutputEnd:\n {\n measureEnd(ProfilerEvent.OutputStart, stringifyForError(eventFn), 'tertiary-light');\n break;\n }\n default:\n {\n throw new Error('Unexpected profiling event type: ' + event);\n }\n }\n};\nfunction getComponentMeasureName(instance) {\n return instance.constructor.name;\n}\nfunction getProviderTokenMeasureName(token) {\n if (isTypeProvider(token)) {\n return token.name;\n } else if (token.provide != null) {\n return getProviderTokenMeasureName(token.provide);\n }\n return token.toString();\n}\nfunction enableProfiling() {\n performanceMarkFeature('Chrome DevTools profiling');\n if (typeof ngDevMode !== 'undefined' && ngDevMode) {\n const removeInjectorProfiler = setInjectorProfiler(chromeDevToolsInjectorProfiler);\n const removeProfiler = setProfiler(devToolsProfiler);\n return () => {\n removeInjectorProfiler();\n removeProfiler();\n };\n }\n return () => {};\n}\nfunction getTransferState(injector) {\n const doc = injector.get(DOCUMENT$1);\n const appId = injector.get(APP_ID);\n const transferState = retrieveTransferredState(doc, appId);\n const filteredEntries = {};\n for (const [key, value] of Object.entries(transferState)) {\n if (!isInternalHydrationTransferStateKey(key)) {\n filteredEntries[key] = value;\n }\n }\n return filteredEntries;\n}\nconst GLOBAL_PUBLISH_EXPANDO_KEY = 'ng';\nconst globalUtilsFunctions = {\n '\u0275getDependenciesFromInjectable': getDependenciesFromInjectable,\n '\u0275getInjectorProviders': getInjectorProviders,\n '\u0275getInjectorResolutionPath': getInjectorResolutionPath,\n '\u0275getInjectorMetadata': getInjectorMetadata,\n '\u0275setProfiler': setProfiler,\n '\u0275getSignalGraph': getSignalGraph,\n '\u0275getDeferBlocks': getDeferBlocks,\n '\u0275getTransferState': getTransferState,\n 'getDirectiveMetadata': getDirectiveMetadata$1,\n 'getComponent': getComponent,\n 'getContext': getContext,\n 'getListeners': getListeners,\n 'getOwningComponent': getOwningComponent,\n 'getHostElement': getHostElement,\n 'getInjector': getInjector,\n 'getRootComponents': getRootComponents,\n 'getDirectives': getDirectives,\n 'applyChanges': applyChanges,\n 'isSignal': isSignal,\n 'enableProfiling': enableProfiling\n};\nlet _published = false;\nfunction publishDefaultGlobalUtils$1() {\n if (!_published) {\n _published = true;\n if (typeof window !== 'undefined') {\n setupFrameworkInjectorProfiler();\n }\n for (const [methodName, method] of Object.entries(globalUtilsFunctions)) {\n publishGlobalUtil(methodName, method);\n }\n }\n}\nfunction publishGlobalUtil(name, fn) {\n publishUtil(name, fn);\n}\nfunction publishExternalGlobalUtil(name, fn) {\n publishUtil(name, fn);\n}\nfunction publishUtil(name, fn) {\n if (typeof COMPILED === 'undefined' || !COMPILED) {\n const w = _global;\n ngDevMode && assertDefined(fn, 'function not defined');\n w[GLOBAL_PUBLISH_EXPANDO_KEY] ??= {};\n w[GLOBAL_PUBLISH_EXPANDO_KEY][name] = fn;\n }\n}\nconst TESTABILITY = /*#__PURE__*/new InjectionToken('');\nconst TESTABILITY_GETTER = /*#__PURE__*/new InjectionToken('');\nlet Testability = /*#__PURE__*/(() => {\n class Testability {\n _ngZone;\n registry;\n _isZoneStable = true;\n _callbacks = [];\n _taskTrackingZone = null;\n _destroyRef;\n constructor(_ngZone, registry, testabilityGetter) {\n this._ngZone = _ngZone;\n this.registry = registry;\n if (isInInjectionContext()) {\n this._destroyRef = inject(DestroyRef, {\n optional: true\n }) ?? undefined;\n }\n if (!_testabilityGetter) {\n setTestabilityGetter(testabilityGetter);\n testabilityGetter.addToWindow(registry);\n }\n this._watchAngularEvents();\n _ngZone.run(() => {\n this._taskTrackingZone = typeof Zone == 'undefined' ? null : Zone.current.get('TaskTrackingZone');\n });\n }\n _watchAngularEvents() {\n const onUnstableSubscription = this._ngZone.onUnstable.subscribe({\n next: () => {\n this._isZoneStable = false;\n }\n });\n const onStableSubscription = this._ngZone.runOutsideAngular(() => this._ngZone.onStable.subscribe({\n next: () => {\n NgZone.assertNotInAngularZone();\n queueMicrotask(() => {\n this._isZoneStable = true;\n this._runCallbacksIfReady();\n });\n }\n }));\n this._destroyRef?.onDestroy(() => {\n onUnstableSubscription.unsubscribe();\n onStableSubscription.unsubscribe();\n });\n }\n isStable() {\n return this._isZoneStable && !this._ngZone.hasPendingMacrotasks;\n }\n _runCallbacksIfReady() {\n if (this.isStable()) {\n queueMicrotask(() => {\n while (this._callbacks.length !== 0) {\n let cb = this._callbacks.pop();\n clearTimeout(cb.timeoutId);\n cb.doneCb();\n }\n });\n } else {\n let pending = this.getPendingTasks();\n this._callbacks = this._callbacks.filter(cb => {\n if (cb.updateCb && cb.updateCb(pending)) {\n clearTimeout(cb.timeoutId);\n return false;\n }\n return true;\n });\n }\n }\n getPendingTasks() {\n if (!this._taskTrackingZone) {\n return [];\n }\n return this._taskTrackingZone.macroTasks.map(t => {\n return {\n source: t.source,\n creationLocation: t.creationLocation,\n data: t.data\n };\n });\n }\n addCallback(cb, timeout, updateCb) {\n let timeoutId = -1;\n if (timeout && timeout > 0) {\n timeoutId = setTimeout(() => {\n this._callbacks = this._callbacks.filter(cb => cb.timeoutId !== timeoutId);\n cb();\n }, timeout);\n }\n this._callbacks.push({\n doneCb: cb,\n timeoutId: timeoutId,\n updateCb: updateCb\n });\n }\n whenStable(doneCb, timeout, updateCb) {\n if (updateCb && !this._taskTrackingZone) {\n throw new Error('Task tracking zone is required when passing an update callback to ' + 'whenStable(). Is \"zone.js/plugins/task-tracking\" loaded?');\n }\n this.addCallback(doneCb, timeout, updateCb);\n this._runCallbacksIfReady();\n }\n registerApplication(token) {\n this.registry.registerApplication(token, this);\n }\n unregisterApplication(token) {\n this.registry.unregisterApplication(token);\n }\n findProviders(using, provider, exactMatch) {\n return [];\n }\n static \u0275fac = function Testability_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || Testability)(__inject(NgZone), __inject(TestabilityRegistry), __inject(TESTABILITY_GETTER));\n };\n static \u0275prov = /*@__PURE__*/__defineInjectable({\n token: Testability,\n factory: Testability.\u0275fac\n });\n }\n return Testability;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && setClassMetadata(Testability, [{\n type: Injectable\n }], () => [{\n type: NgZone\n }, {\n type: TestabilityRegistry\n }, {\n type: undefined,\n decorators: [{\n type: Inject,\n args: [TESTABILITY_GETTER]\n }]\n }], null);\n})();\nlet TestabilityRegistry = /*#__PURE__*/(() => {\n class TestabilityRegistry {\n _applications = new Map();\n registerApplication(token, testability) {\n this._applications.set(token, testability);\n }\n unregisterApplication(token) {\n this._applications.delete(token);\n }\n unregisterAllApplications() {\n this._applications.clear();\n }\n getTestability(elem) {\n return this._applications.get(elem) || null;\n }\n getAllTestabilities() {\n return Array.from(this._applications.values());\n }\n getAllRootElements() {\n return Array.from(this._applications.keys());\n }\n findTestabilityInTree(elem, findInAncestors = true) {\n return _testabilityGetter?.findTestabilityInTree(this, elem, findInAncestors) ?? null;\n }\n static \u0275fac = function TestabilityRegistry_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || TestabilityRegistry)();\n };\n static \u0275prov = /*@__PURE__*/__defineInjectable({\n token: TestabilityRegistry,\n factory: TestabilityRegistry.\u0275fac,\n providedIn: 'platform'\n });\n }\n return TestabilityRegistry;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && setClassMetadata(TestabilityRegistry, [{\n type: Injectable,\n args: [{\n providedIn: 'platform'\n }]\n }], null, null);\n})();\nfunction setTestabilityGetter(getter) {\n _testabilityGetter = getter;\n}\nlet _testabilityGetter;\nfunction isPromise(obj) {\n return !!obj && typeof obj.then === 'function';\n}\nfunction isSubscribable(obj) {\n return !!obj && typeof obj.subscribe === 'function';\n}\nconst APP_INITIALIZER = /*#__PURE__*/new InjectionToken(ngDevMode ? 'Application Initializer' : '');\nfunction provideAppInitializer(initializerFn) {\n return makeEnvironmentProviders([{\n provide: APP_INITIALIZER,\n multi: true,\n useValue: initializerFn\n }]);\n}\nlet ApplicationInitStatus = /*#__PURE__*/(() => {\n class ApplicationInitStatus {\n resolve;\n reject;\n initialized = false;\n done = false;\n donePromise = new Promise((res, rej) => {\n this.resolve = res;\n this.reject = rej;\n });\n appInits = inject(APP_INITIALIZER, {\n optional: true\n }) ?? [];\n injector = inject(Injector);\n constructor() {\n if ((typeof ngDevMode === 'undefined' || ngDevMode) && !Array.isArray(this.appInits)) {\n throw new RuntimeError(-209, 'Unexpected type of the `APP_INITIALIZER` token value ' + `(expected an array, but got ${typeof this.appInits}). ` + 'Please check that the `APP_INITIALIZER` token is configured as a ' + '`multi: true` provider.');\n }\n }\n runInitializers() {\n if (this.initialized) {\n return;\n }\n const asyncInitPromises = [];\n for (const appInits of this.appInits) {\n const initResult = runInInjectionContext(this.injector, appInits);\n if (isPromise(initResult)) {\n asyncInitPromises.push(initResult);\n } else if (isSubscribable(initResult)) {\n const observableAsPromise = new Promise((resolve, reject) => {\n initResult.subscribe({\n complete: resolve,\n error: reject\n });\n });\n asyncInitPromises.push(observableAsPromise);\n }\n }\n const complete = () => {\n this.done = true;\n this.resolve();\n };\n Promise.all(asyncInitPromises).then(() => {\n complete();\n }).catch(e => {\n this.reject(e);\n });\n if (asyncInitPromises.length === 0) {\n complete();\n }\n this.initialized = true;\n }\n static \u0275fac = function ApplicationInitStatus_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || ApplicationInitStatus)();\n };\n static \u0275prov = /*@__PURE__*/__defineInjectable({\n token: ApplicationInitStatus,\n factory: ApplicationInitStatus.\u0275fac,\n providedIn: 'root'\n });\n }\n return ApplicationInitStatus;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && setClassMetadata(ApplicationInitStatus, [{\n type: Injectable,\n args: [{\n providedIn: 'root'\n }]\n }], () => [], null);\n})();\nconst APP_BOOTSTRAP_LISTENER = /*#__PURE__*/new InjectionToken(ngDevMode ? 'appBootstrapListener' : '');\nfunction publishDefaultGlobalUtils() {\n ngDevMode && publishDefaultGlobalUtils$1();\n}\nfunction publishSignalConfiguration() {\n setThrowInvalidWriteToSignalError(() => {\n let errorMessage = '';\n if (ngDevMode) {\n const activeConsumer = getActiveConsumer();\n errorMessage = activeConsumer && isReactiveLViewConsumer(activeConsumer) ? 'Writing to signals is not allowed while Angular renders the template (eg. interpolations)' : 'Writing to signals is not allowed in a `computed`';\n }\n throw new RuntimeError(600, errorMessage);\n });\n}\nfunction isBoundToModule(cf) {\n return cf.isBoundToModule;\n}\nconst MAXIMUM_REFRESH_RERUNS = 10;\nfunction optionsReducer(dst, objs) {\n if (Array.isArray(objs)) {\n return objs.reduce(optionsReducer, dst);\n }\n return {\n ...dst,\n ...objs\n };\n}\nlet ApplicationRef = /*#__PURE__*/(() => {\n class ApplicationRef {\n _runningTick = false;\n _destroyed = false;\n _destroyListeners = [];\n _views = [];\n internalErrorHandler = inject(INTERNAL_APPLICATION_ERROR_HANDLER);\n afterRenderManager = inject(AfterRenderManager);\n zonelessEnabled = inject(ZONELESS_ENABLED);\n rootEffectScheduler = inject(EffectScheduler);\n dirtyFlags = 0;\n tracingSnapshot = null;\n allTestViews = new Set();\n autoDetectTestViews = new Set();\n includeAllTestViews = false;\n afterTick = new Subject();\n get allViews() {\n return [...(this.includeAllTestViews ? this.allTestViews : this.autoDetectTestViews).keys(), ...this._views];\n }\n get destroyed() {\n return this._destroyed;\n }\n componentTypes = [];\n components = [];\n internalPendingTask = inject(PendingTasksInternal);\n get isStable() {\n return this.internalPendingTask.hasPendingTasksObservable.pipe(map(pending => !pending));\n }\n constructor() {\n inject(TracingService, {\n optional: true\n });\n }\n whenStable() {\n let subscription;\n return new Promise(resolve => {\n subscription = this.isStable.subscribe({\n next: stable => {\n if (stable) {\n resolve();\n }\n }\n });\n }).finally(() => {\n subscription.unsubscribe();\n });\n }\n _injector = inject(EnvironmentInjector);\n _rendererFactory = null;\n get injector() {\n return this._injector;\n }\n bootstrap(componentOrFactory, rootSelectorOrNode) {\n return this.bootstrapImpl(componentOrFactory, rootSelectorOrNode);\n }\n bootstrapImpl(componentOrFactory, rootSelectorOrNode, injector = Injector.NULL) {\n const ngZone = this._injector.get(NgZone);\n return ngZone.run(() => {\n profiler(ProfilerEvent.BootstrapComponentStart);\n (typeof ngDevMode === 'undefined' || ngDevMode) && warnIfDestroyed(this._destroyed);\n const isComponentFactory = componentOrFactory instanceof ComponentFactory$1;\n const initStatus = this._injector.get(ApplicationInitStatus);\n if (!initStatus.done) {\n let errorMessage = '';\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n const standalone = !isComponentFactory && isStandalone(componentOrFactory);\n errorMessage = 'Cannot bootstrap as there are still asynchronous initializers running.' + (standalone ? '' : ' Bootstrap components in the `ngDoBootstrap` method of the root module.');\n }\n throw new RuntimeError(405, errorMessage);\n }\n let componentFactory;\n if (isComponentFactory) {\n componentFactory = componentOrFactory;\n } else {\n const resolver = this._injector.get(ComponentFactoryResolver$1);\n componentFactory = resolver.resolveComponentFactory(componentOrFactory);\n }\n this.componentTypes.push(componentFactory.componentType);\n const ngModule = isBoundToModule(componentFactory) ? undefined : this._injector.get(NgModuleRef$1);\n const selectorOrNode = rootSelectorOrNode || componentFactory.selector;\n const compRef = componentFactory.create(injector, [], selectorOrNode, ngModule);\n const nativeElement = compRef.location.nativeElement;\n const testability = compRef.injector.get(TESTABILITY, null);\n testability?.registerApplication(nativeElement);\n compRef.onDestroy(() => {\n this.detachView(compRef.hostView);\n remove(this.components, compRef);\n testability?.unregisterApplication(nativeElement);\n });\n this._loadComponent(compRef);\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n const _console = this._injector.get(Console);\n _console.log(`Angular is running in development mode.`);\n }\n profiler(ProfilerEvent.BootstrapComponentEnd, compRef);\n return compRef;\n });\n }\n tick() {\n if (!this.zonelessEnabled) {\n this.dirtyFlags |= 1;\n }\n this._tick();\n }\n _tick() {\n profiler(ProfilerEvent.ChangeDetectionStart);\n if (this.tracingSnapshot !== null) {\n this.tracingSnapshot.run(TracingAction.CHANGE_DETECTION, this.tickImpl);\n } else {\n this.tickImpl();\n }\n }\n tickImpl = () => {\n (typeof ngDevMode === 'undefined' || ngDevMode) && warnIfDestroyed(this._destroyed);\n if (this._runningTick) {\n profiler(ProfilerEvent.ChangeDetectionEnd);\n throw new RuntimeError(101, ngDevMode && 'ApplicationRef.tick is called recursively');\n }\n const prevConsumer = setActiveConsumer(null);\n try {\n this._runningTick = true;\n this.synchronize();\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n for (let view of this.allViews) {\n view.checkNoChanges();\n }\n }\n } finally {\n this._runningTick = false;\n this.tracingSnapshot?.dispose();\n this.tracingSnapshot = null;\n setActiveConsumer(prevConsumer);\n this.afterTick.next();\n profiler(ProfilerEvent.ChangeDetectionEnd);\n }\n };\n synchronize() {\n if (this._rendererFactory === null && !this._injector.destroyed) {\n this._rendererFactory = this._injector.get(RendererFactory2, null, {\n optional: true\n });\n }\n let runs = 0;\n while (this.dirtyFlags !== 0 && runs++ < MAXIMUM_REFRESH_RERUNS) {\n profiler(ProfilerEvent.ChangeDetectionSyncStart);\n try {\n this.synchronizeOnce();\n } finally {\n profiler(ProfilerEvent.ChangeDetectionSyncEnd);\n }\n }\n if ((typeof ngDevMode === 'undefined' || ngDevMode) && runs >= MAXIMUM_REFRESH_RERUNS) {\n throw new RuntimeError(103, ngDevMode && 'Infinite change detection while refreshing application views. ' + 'Ensure views are not calling `markForCheck` on every template execution or ' + 'that afterRender hooks always mark views for check.');\n }\n }\n synchronizeOnce() {\n if (this.dirtyFlags & 16) {\n this.dirtyFlags &= ~16;\n this.rootEffectScheduler.flush();\n }\n let ranDetectChanges = false;\n if (this.dirtyFlags & 7) {\n const useGlobalCheck = Boolean(this.dirtyFlags & 1);\n this.dirtyFlags &= ~7;\n this.dirtyFlags |= 8;\n for (let {\n _lView\n } of this.allViews) {\n if (!useGlobalCheck && !requiresRefreshOrTraversal(_lView)) {\n continue;\n }\n const mode = useGlobalCheck && !this.zonelessEnabled ? 0 : 1;\n detectChangesInternal(_lView, mode);\n ranDetectChanges = true;\n }\n this.dirtyFlags &= ~4;\n this.syncDirtyFlagsWithViews();\n if (this.dirtyFlags & (7 | 16)) {\n return;\n }\n }\n if (!ranDetectChanges) {\n this._rendererFactory?.begin?.();\n this._rendererFactory?.end?.();\n }\n if (this.dirtyFlags & 8) {\n this.dirtyFlags &= ~8;\n this.afterRenderManager.execute();\n }\n this.syncDirtyFlagsWithViews();\n }\n syncDirtyFlagsWithViews() {\n if (this.allViews.some(({\n _lView\n }) => requiresRefreshOrTraversal(_lView))) {\n this.dirtyFlags |= 2;\n return;\n } else {\n this.dirtyFlags &= ~7;\n }\n }\n attachView(viewRef) {\n (typeof ngDevMode === 'undefined' || ngDevMode) && warnIfDestroyed(this._destroyed);\n const view = viewRef;\n this._views.push(view);\n view.attachToAppRef(this);\n }\n detachView(viewRef) {\n (typeof ngDevMode === 'undefined' || ngDevMode) && warnIfDestroyed(this._destroyed);\n const view = viewRef;\n remove(this._views, view);\n view.detachFromAppRef();\n }\n _loadComponent(componentRef) {\n this.attachView(componentRef.hostView);\n try {\n this.tick();\n } catch (e) {\n this.internalErrorHandler(e);\n }\n this.components.push(componentRef);\n const listeners = this._injector.get(APP_BOOTSTRAP_LISTENER, []);\n if (ngDevMode && !Array.isArray(listeners)) {\n throw new RuntimeError(-209, 'Unexpected type of the `APP_BOOTSTRAP_LISTENER` token value ' + `(expected an array, but got ${typeof listeners}). ` + 'Please check that the `APP_BOOTSTRAP_LISTENER` token is configured as a ' + '`multi: true` provider.');\n }\n listeners.forEach(listener => listener(componentRef));\n }\n ngOnDestroy() {\n if (this._destroyed) return;\n try {\n this._destroyListeners.forEach(listener => listener());\n this._views.slice().forEach(view => view.destroy());\n } finally {\n this._destroyed = true;\n this._views = [];\n this._destroyListeners = [];\n }\n }\n onDestroy(callback) {\n (typeof ngDevMode === 'undefined' || ngDevMode) && warnIfDestroyed(this._destroyed);\n this._destroyListeners.push(callback);\n return () => remove(this._destroyListeners, callback);\n }\n destroy() {\n if (this._destroyed) {\n throw new RuntimeError(406, ngDevMode && 'This instance of the `ApplicationRef` has already been destroyed.');\n }\n const injector = this._injector;\n if (injector.destroy && !injector.destroyed) {\n injector.destroy();\n }\n }\n get viewCount() {\n return this._views.length;\n }\n static \u0275fac = function ApplicationRef_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || ApplicationRef)();\n };\n static \u0275prov = /*@__PURE__*/__defineInjectable({\n token: ApplicationRef,\n factory: ApplicationRef.\u0275fac,\n providedIn: 'root'\n });\n }\n return ApplicationRef;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && setClassMetadata(ApplicationRef, [{\n type: Injectable,\n args: [{\n providedIn: 'root'\n }]\n }], () => [], null);\n})();\nfunction warnIfDestroyed(destroyed) {\n if (destroyed) {\n console.warn(formatRuntimeError(406, 'This instance of the `ApplicationRef` has already been destroyed.'));\n }\n}\nfunction remove(list, el) {\n const index = list.indexOf(el);\n if (index > -1) {\n list.splice(index, 1);\n }\n}\nfunction promiseWithResolvers() {\n let resolve;\n let reject;\n const promise = new Promise((res, rej) => {\n resolve = res;\n reject = rej;\n });\n return {\n promise,\n resolve,\n reject\n };\n}\nfunction scheduleDelayedTrigger(scheduleFn) {\n const lView = getLView();\n const tNode = getCurrentTNode();\n renderPlaceholder(lView, tNode);\n if (!shouldTriggerDeferBlock(0, lView)) return;\n const injector = lView[INJECTOR];\n const lDetails = getLDeferBlockDetails(lView, tNode);\n const cleanupFn = scheduleFn(() => triggerDeferBlock(0, lView, tNode), injector);\n storeTriggerCleanupFn(0, lDetails, cleanupFn);\n}\nfunction scheduleDelayedPrefetching(scheduleFn) {\n if (typeof ngServerMode !== 'undefined' && ngServerMode) return;\n const lView = getLView();\n const injector = lView[INJECTOR];\n const tNode = getCurrentTNode();\n const tView = lView[TVIEW];\n const tDetails = getTDeferBlockDetails(tView, tNode);\n if (tDetails.loadingState === DeferDependenciesLoadingState.NOT_STARTED) {\n const lDetails = getLDeferBlockDetails(lView, tNode);\n const prefetch = () => triggerPrefetching(tDetails, lView, tNode);\n const cleanupFn = scheduleFn(prefetch, injector);\n storeTriggerCleanupFn(1, lDetails, cleanupFn);\n }\n}\nfunction scheduleDelayedHydrating(scheduleFn, lView, tNode) {\n if (typeof ngServerMode !== 'undefined' && ngServerMode) return;\n const injector = lView[INJECTOR];\n const lDetails = getLDeferBlockDetails(lView, tNode);\n const ssrUniqueId = lDetails[SSR_UNIQUE_ID];\n ngDevMode && assertSsrIdDefined(ssrUniqueId);\n const cleanupFn = scheduleFn(() => triggerHydrationFromBlockName(injector, ssrUniqueId), injector);\n storeTriggerCleanupFn(2, lDetails, cleanupFn);\n}\nfunction triggerPrefetching(tDetails, lView, tNode) {\n triggerResourceLoading(tDetails, lView, tNode);\n}\nfunction triggerResourceLoading(tDetails, lView, tNode) {\n const injector = lView[INJECTOR];\n const tView = lView[TVIEW];\n if (tDetails.loadingState !== DeferDependenciesLoadingState.NOT_STARTED) {\n return tDetails.loadingPromise ?? Promise.resolve();\n }\n const lDetails = getLDeferBlockDetails(lView, tNode);\n const primaryBlockTNode = getPrimaryBlockTNode(tView, tDetails);\n tDetails.loadingState = DeferDependenciesLoadingState.IN_PROGRESS;\n invokeTriggerCleanupFns(1, lDetails);\n let dependenciesFn = tDetails.dependencyResolverFn;\n if (ngDevMode) {\n const deferDependencyInterceptor = injector.get(DEFER_BLOCK_DEPENDENCY_INTERCEPTOR, null, {\n optional: true\n });\n if (deferDependencyInterceptor) {\n dependenciesFn = deferDependencyInterceptor.intercept(dependenciesFn);\n }\n }\n const removeTask = injector.get(PendingTasks).add();\n if (!dependenciesFn) {\n tDetails.loadingPromise = Promise.resolve().then(() => {\n tDetails.loadingPromise = null;\n tDetails.loadingState = DeferDependenciesLoadingState.COMPLETE;\n removeTask();\n });\n return tDetails.loadingPromise;\n }\n tDetails.loadingPromise = Promise.allSettled(dependenciesFn()).then(results => {\n let failed = false;\n const directiveDefs = [];\n const pipeDefs = [];\n for (const result of results) {\n if (result.status === 'fulfilled') {\n const dependency = result.value;\n const directiveDef = getComponentDef(dependency) || getDirectiveDef(dependency);\n if (directiveDef) {\n directiveDefs.push(directiveDef);\n } else {\n const pipeDef = getPipeDef$1(dependency);\n if (pipeDef) {\n pipeDefs.push(pipeDef);\n }\n }\n } else {\n failed = true;\n break;\n }\n }\n if (failed) {\n tDetails.loadingState = DeferDependenciesLoadingState.FAILED;\n if (tDetails.errorTmplIndex === null) {\n const templateLocation = ngDevMode ? getTemplateLocationDetails(lView) : '';\n const error = new RuntimeError(-750, ngDevMode && 'Loading dependencies for `@defer` block failed, ' + `but no \\`@error\\` block was configured${templateLocation}. ` + 'Consider using the `@error` block to render an error state.');\n handleUncaughtError(lView, error);\n }\n } else {\n tDetails.loadingState = DeferDependenciesLoadingState.COMPLETE;\n const primaryBlockTView = primaryBlockTNode.tView;\n if (directiveDefs.length > 0) {\n primaryBlockTView.directiveRegistry = addDepsToRegistry(primaryBlockTView.directiveRegistry, directiveDefs);\n const directiveTypes = directiveDefs.map(def => def.type);\n const providers = internalImportProvidersFrom(false, ...directiveTypes);\n tDetails.providers = providers;\n }\n if (pipeDefs.length > 0) {\n primaryBlockTView.pipeRegistry = addDepsToRegistry(primaryBlockTView.pipeRegistry, pipeDefs);\n }\n }\n });\n return tDetails.loadingPromise.finally(() => {\n tDetails.loadingPromise = null;\n removeTask();\n });\n}\nfunction shouldTriggerDeferBlock(triggerType, lView) {\n if (triggerType === 0 && typeof ngServerMode !== 'undefined' && ngServerMode) {\n return false;\n }\n const injector = lView[INJECTOR];\n const config = injector.get(DEFER_BLOCK_CONFIG, null, {\n optional: true\n });\n if (config?.behavior === DeferBlockBehavior.Manual) {\n return false;\n }\n return true;\n}\nfunction triggerDeferBlock(triggerType, lView, tNode) {\n const tView = lView[TVIEW];\n const lContainer = lView[tNode.index];\n ngDevMode && assertLContainer(lContainer);\n if (!shouldTriggerDeferBlock(triggerType, lView)) return;\n const lDetails = getLDeferBlockDetails(lView, tNode);\n const tDetails = getTDeferBlockDetails(tView, tNode);\n invokeAllTriggerCleanupFns(lDetails);\n switch (tDetails.loadingState) {\n case DeferDependenciesLoadingState.NOT_STARTED:\n renderDeferBlockState(DeferBlockState.Loading, tNode, lContainer);\n triggerResourceLoading(tDetails, lView, tNode);\n if (tDetails.loadingState === DeferDependenciesLoadingState.IN_PROGRESS) {\n renderDeferStateAfterResourceLoading(tDetails, tNode, lContainer);\n }\n break;\n case DeferDependenciesLoadingState.IN_PROGRESS:\n renderDeferBlockState(DeferBlockState.Loading, tNode, lContainer);\n renderDeferStateAfterResourceLoading(tDetails, tNode, lContainer);\n break;\n case DeferDependenciesLoadingState.COMPLETE:\n ngDevMode && assertDeferredDependenciesLoaded(tDetails);\n renderDeferBlockState(DeferBlockState.Complete, tNode, lContainer);\n break;\n case DeferDependenciesLoadingState.FAILED:\n renderDeferBlockState(DeferBlockState.Error, tNode, lContainer);\n break;\n default:\n if (ngDevMode) {\n throwError('Unknown defer block state');\n }\n }\n}\nasync function triggerHydrationFromBlockName(injector, blockName, replayQueuedEventsFn) {\n const dehydratedBlockRegistry = injector.get(DEHYDRATED_BLOCK_REGISTRY);\n const blocksBeingHydrated = dehydratedBlockRegistry.hydrating;\n if (blocksBeingHydrated.has(blockName)) {\n return;\n }\n const {\n parentBlockPromise,\n hydrationQueue\n } = getParentBlockHydrationQueue(blockName, injector);\n if (hydrationQueue.length === 0) return;\n if (parentBlockPromise !== null) {\n hydrationQueue.shift();\n }\n populateHydratingStateForQueue(dehydratedBlockRegistry, hydrationQueue);\n if (parentBlockPromise !== null) {\n await parentBlockPromise;\n }\n const topmostParentBlock = hydrationQueue[0];\n if (dehydratedBlockRegistry.has(topmostParentBlock)) {\n await triggerHydrationForBlockQueue(injector, hydrationQueue, replayQueuedEventsFn);\n } else {\n dehydratedBlockRegistry.awaitParentBlock(topmostParentBlock, async () => await triggerHydrationForBlockQueue(injector, hydrationQueue, replayQueuedEventsFn));\n }\n}\nasync function triggerHydrationForBlockQueue(injector, hydrationQueue, replayQueuedEventsFn) {\n const dehydratedBlockRegistry = injector.get(DEHYDRATED_BLOCK_REGISTRY);\n const blocksBeingHydrated = dehydratedBlockRegistry.hydrating;\n const pendingTasks = injector.get(PendingTasksInternal);\n const taskId = pendingTasks.add();\n for (let blockQueueIdx = 0; blockQueueIdx < hydrationQueue.length; blockQueueIdx++) {\n const dehydratedBlockId = hydrationQueue[blockQueueIdx];\n const dehydratedDeferBlock = dehydratedBlockRegistry.get(dehydratedBlockId);\n if (dehydratedDeferBlock != null) {\n await triggerResourceLoadingForHydration(dehydratedDeferBlock);\n await nextRender(injector);\n if (deferBlockHasErrored(dehydratedDeferBlock)) {\n removeDehydratedViewList(dehydratedDeferBlock);\n cleanupRemainingHydrationQueue(hydrationQueue.slice(blockQueueIdx), dehydratedBlockRegistry);\n break;\n }\n blocksBeingHydrated.get(dehydratedBlockId).resolve();\n } else {\n cleanupParentContainer(blockQueueIdx, hydrationQueue, dehydratedBlockRegistry);\n cleanupRemainingHydrationQueue(hydrationQueue.slice(blockQueueIdx), dehydratedBlockRegistry);\n break;\n }\n }\n const lastBlockName = hydrationQueue[hydrationQueue.length - 1];\n await blocksBeingHydrated.get(lastBlockName)?.promise;\n pendingTasks.remove(taskId);\n if (replayQueuedEventsFn) {\n replayQueuedEventsFn(hydrationQueue);\n }\n cleanupHydratedDeferBlocks(dehydratedBlockRegistry.get(lastBlockName), hydrationQueue, dehydratedBlockRegistry, injector.get(ApplicationRef));\n}\nfunction deferBlockHasErrored(deferBlock) {\n return getLDeferBlockDetails(deferBlock.lView, deferBlock.tNode)[DEFER_BLOCK_STATE] === DeferBlockState.Error;\n}\nfunction cleanupParentContainer(currentBlockIdx, hydrationQueue, dehydratedBlockRegistry) {\n const parentDeferBlockIdx = currentBlockIdx - 1;\n const parentDeferBlock = parentDeferBlockIdx > -1 ? dehydratedBlockRegistry.get(hydrationQueue[parentDeferBlockIdx]) : null;\n if (parentDeferBlock) {\n cleanupLContainer(parentDeferBlock.lContainer);\n }\n}\nfunction cleanupRemainingHydrationQueue(hydrationQueue, dehydratedBlockRegistry) {\n const blocksBeingHydrated = dehydratedBlockRegistry.hydrating;\n for (const dehydratedBlockId in hydrationQueue) {\n blocksBeingHydrated.get(dehydratedBlockId)?.reject();\n }\n dehydratedBlockRegistry.cleanup(hydrationQueue);\n}\nfunction populateHydratingStateForQueue(registry, queue) {\n for (let blockId of queue) {\n registry.hydrating.set(blockId, promiseWithResolvers());\n }\n}\nfunction nextRender(injector) {\n return new Promise(resolveFn => afterNextRender(resolveFn, {\n injector\n }));\n}\nasync function triggerResourceLoadingForHydration(dehydratedBlock) {\n const {\n tNode,\n lView\n } = dehydratedBlock;\n const lDetails = getLDeferBlockDetails(lView, tNode);\n return new Promise(resolve => {\n onDeferBlockCompletion(lDetails, resolve);\n triggerDeferBlock(2, lView, tNode);\n });\n}\nfunction onDeferBlockCompletion(lDetails, callback) {\n if (!Array.isArray(lDetails[ON_COMPLETE_FNS])) {\n lDetails[ON_COMPLETE_FNS] = [];\n }\n lDetails[ON_COMPLETE_FNS].push(callback);\n}\nfunction shouldAttachTrigger(triggerType, lView, tNode) {\n if (triggerType === 0) {\n return shouldAttachRegularTrigger(lView, tNode);\n } else if (triggerType === 2) {\n return !shouldAttachRegularTrigger(lView, tNode);\n }\n return !(typeof ngServerMode !== 'undefined' && ngServerMode);\n}\nfunction hasHydrateTriggers(flags) {\n return flags != null && (flags & 1) === 1;\n}\nfunction shouldAttachRegularTrigger(lView, tNode) {\n const injector = lView[INJECTOR];\n const tDetails = getTDeferBlockDetails(lView[TVIEW], tNode);\n const incrementalHydrationEnabled = isIncrementalHydrationEnabled(injector);\n const _hasHydrateTriggers = hasHydrateTriggers(tDetails.flags);\n if (typeof ngServerMode !== 'undefined' && ngServerMode) {\n return !incrementalHydrationEnabled || !_hasHydrateTriggers;\n }\n const lDetails = getLDeferBlockDetails(lView, tNode);\n const wasServerSideRendered = lDetails[SSR_UNIQUE_ID] !== null;\n if (_hasHydrateTriggers && wasServerSideRendered && incrementalHydrationEnabled) {\n return false;\n }\n return true;\n}\nfunction getHydrateTriggers(tView, tNode) {\n const tDetails = getTDeferBlockDetails(tView, tNode);\n return tDetails.hydrateTriggers ??= new Map();\n}\nfunction processAndInitTriggers(injector, blockData, nodes) {\n const idleElements = [];\n const timerElements = [];\n const viewportElements = [];\n const immediateElements = [];\n for (let [blockId, blockSummary] of blockData) {\n const commentNode = nodes.get(blockId);\n if (commentNode !== undefined) {\n const numRootNodes = blockSummary.data[NUM_ROOT_NODES];\n let currentNode = commentNode;\n for (let i = 0; i < numRootNodes; i++) {\n currentNode = currentNode.previousSibling;\n if (currentNode.nodeType !== Node.ELEMENT_NODE) {\n continue;\n }\n const elementTrigger = {\n el: currentNode,\n blockName: blockId\n };\n if (blockSummary.hydrate.idle) {\n idleElements.push(elementTrigger);\n }\n if (blockSummary.hydrate.immediate) {\n immediateElements.push(elementTrigger);\n }\n if (blockSummary.hydrate.timer !== null) {\n elementTrigger.delay = blockSummary.hydrate.timer;\n timerElements.push(elementTrigger);\n }\n if (blockSummary.hydrate.viewport) {\n if (typeof blockSummary.hydrate.viewport !== 'boolean') {\n elementTrigger.intersectionObserverOptions = blockSummary.hydrate.viewport;\n }\n viewportElements.push(elementTrigger);\n }\n }\n }\n }\n setIdleTriggers(injector, idleElements);\n setImmediateTriggers(injector, immediateElements);\n setViewportTriggers(injector, viewportElements);\n setTimerTriggers(injector, timerElements);\n}\nfunction setIdleTriggers(injector, elementTriggers) {\n for (const elementTrigger of elementTriggers) {\n const registry = injector.get(DEHYDRATED_BLOCK_REGISTRY);\n const onInvoke = () => triggerHydrationFromBlockName(injector, elementTrigger.blockName);\n const cleanupFn = onIdle(onInvoke, injector);\n registry.addCleanupFn(elementTrigger.blockName, cleanupFn);\n }\n}\nfunction setViewportTriggers(injector, elementTriggers) {\n if (elementTriggers.length > 0) {\n const registry = injector.get(DEHYDRATED_BLOCK_REGISTRY);\n for (let elementTrigger of elementTriggers) {\n const cleanupFn = onViewportWrapper(elementTrigger.el, () => triggerHydrationFromBlockName(injector, elementTrigger.blockName), injector, elementTrigger.intersectionObserverOptions);\n registry.addCleanupFn(elementTrigger.blockName, cleanupFn);\n }\n }\n}\nfunction setTimerTriggers(injector, elementTriggers) {\n for (const elementTrigger of elementTriggers) {\n const registry = injector.get(DEHYDRATED_BLOCK_REGISTRY);\n const onInvoke = () => triggerHydrationFromBlockName(injector, elementTrigger.blockName);\n const timerFn = onTimer(elementTrigger.delay);\n const cleanupFn = timerFn(onInvoke, injector);\n registry.addCleanupFn(elementTrigger.blockName, cleanupFn);\n }\n}\nfunction setImmediateTriggers(injector, elementTriggers) {\n for (const elementTrigger of elementTriggers) {\n triggerHydrationFromBlockName(injector, elementTrigger.blockName);\n }\n}\nlet _hmrWarningProduced = false;\nfunction logHmrWarning(injector) {\n if (!_hmrWarningProduced) {\n _hmrWarningProduced = true;\n const console = injector.get(Console);\n console.log(formatRuntimeError(-751, 'Angular has detected that this application contains `@defer` blocks ' + 'and the hot module replacement (HMR) mode is enabled. All `@defer` ' + 'block dependencies will be loaded eagerly.'));\n }\n}\nfunction \u0275\u0275defer(index, primaryTmplIndex, dependencyResolverFn, loadingTmplIndex, placeholderTmplIndex, errorTmplIndex, loadingConfigIndex, placeholderConfigIndex, enableTimerScheduling, flags) {\n const lView = getLView();\n const tView = getTView();\n const adjustedIndex = index + HEADER_OFFSET;\n const tNode = declareNoDirectiveHostTemplate(lView, tView, index, null, 0, 0);\n const injector = lView[INJECTOR];\n const incrementalHydrationEnabled = isIncrementalHydrationEnabled(injector);\n if (tView.firstCreatePass) {\n performanceMarkFeature('NgDefer');\n if (ngDevMode) {\n if (typeof ngHmrMode !== 'undefined' && ngHmrMode) {\n logHmrWarning(injector);\n }\n if (hasHydrateTriggers(flags) && !incrementalHydrationEnabled) {\n warnIncrementalHydrationNotConfigured();\n }\n }\n const tDetails = {\n primaryTmplIndex,\n loadingTmplIndex: loadingTmplIndex ?? null,\n placeholderTmplIndex: placeholderTmplIndex ?? null,\n errorTmplIndex: errorTmplIndex ?? null,\n placeholderBlockConfig: null,\n loadingBlockConfig: null,\n dependencyResolverFn: dependencyResolverFn ?? null,\n loadingState: DeferDependenciesLoadingState.NOT_STARTED,\n loadingPromise: null,\n providers: null,\n hydrateTriggers: null,\n debug: null,\n flags: flags ?? 0\n };\n enableTimerScheduling?.(tView, tDetails, placeholderConfigIndex, loadingConfigIndex);\n setTDeferBlockDetails(tView, adjustedIndex, tDetails);\n }\n const lContainer = lView[adjustedIndex];\n populateDehydratedViewsInLContainer(lContainer, tNode, lView);\n let ssrBlockState = null;\n let ssrUniqueId = null;\n if (lContainer[DEHYDRATED_VIEWS]?.length > 0) {\n const info = lContainer[DEHYDRATED_VIEWS][0].data;\n ssrUniqueId = info[DEFER_BLOCK_ID] ?? null;\n ssrBlockState = info[DEFER_BLOCK_STATE$1];\n }\n const lDetails = [null, DeferBlockInternalState.Initial, null, null, null, null, ssrUniqueId, ssrBlockState, null, null];\n setLDeferBlockDetails(lView, adjustedIndex, lDetails);\n let registry = null;\n if (ssrUniqueId !== null && incrementalHydrationEnabled) {\n registry = injector.get(DEHYDRATED_BLOCK_REGISTRY);\n registry.add(ssrUniqueId, {\n lView,\n tNode,\n lContainer\n });\n }\n const onLViewDestroy = () => {\n invokeAllTriggerCleanupFns(lDetails);\n if (ssrUniqueId !== null) {\n registry?.cleanup([ssrUniqueId]);\n }\n };\n storeTriggerCleanupFn(0, lDetails, () => removeLViewOnDestroy(lView, onLViewDestroy));\n storeLViewOnDestroy(lView, onLViewDestroy);\n}\nfunction \u0275\u0275deferWhen(rawValue) {\n const lView = getLView();\n const tNode = getSelectedTNode();\n if (ngDevMode) {\n trackTriggerForDebugging(lView[TVIEW], tNode, 'when ');\n }\n if (!shouldAttachTrigger(0, lView, tNode)) return;\n const bindingIndex = nextBindingIndex();\n if (bindingUpdated(lView, bindingIndex, rawValue)) {\n const prevConsumer = setActiveConsumer(null);\n try {\n const value = Boolean(rawValue);\n const lDetails = getLDeferBlockDetails(lView, tNode);\n const renderedState = lDetails[DEFER_BLOCK_STATE];\n if (value === false && renderedState === DeferBlockInternalState.Initial) {\n renderPlaceholder(lView, tNode);\n } else if (value === true && (renderedState === DeferBlockInternalState.Initial || renderedState === DeferBlockState.Placeholder)) {\n triggerDeferBlock(0, lView, tNode);\n }\n } finally {\n setActiveConsumer(prevConsumer);\n }\n }\n}\nfunction \u0275\u0275deferPrefetchWhen(rawValue) {\n const lView = getLView();\n const tNode = getSelectedTNode();\n if (ngDevMode) {\n trackTriggerForDebugging(lView[TVIEW], tNode, 'prefetch when ');\n }\n if (!shouldAttachTrigger(1, lView, tNode)) return;\n const bindingIndex = nextBindingIndex();\n if (bindingUpdated(lView, bindingIndex, rawValue)) {\n const prevConsumer = setActiveConsumer(null);\n try {\n const value = Boolean(rawValue);\n const tView = lView[TVIEW];\n const tDetails = getTDeferBlockDetails(tView, tNode);\n if (value === true && tDetails.loadingState === DeferDependenciesLoadingState.NOT_STARTED) {\n triggerPrefetching(tDetails, lView, tNode);\n }\n } finally {\n setActiveConsumer(prevConsumer);\n }\n }\n}\nfunction \u0275\u0275deferHydrateWhen(rawValue) {\n const lView = getLView();\n const tNode = getSelectedTNode();\n if (ngDevMode) {\n trackTriggerForDebugging(lView[TVIEW], tNode, 'hydrate when ');\n }\n if (!shouldAttachTrigger(2, lView, tNode)) return;\n const bindingIndex = nextBindingIndex();\n const tView = getTView();\n const hydrateTriggers = getHydrateTriggers(tView, tNode);\n hydrateTriggers.set(6, null);\n if (bindingUpdated(lView, bindingIndex, rawValue)) {\n if (typeof ngServerMode !== 'undefined' && ngServerMode) {\n triggerDeferBlock(2, lView, tNode);\n } else {\n const injector = lView[INJECTOR];\n const prevConsumer = setActiveConsumer(null);\n try {\n const value = Boolean(rawValue);\n if (value === true) {\n const lDetails = getLDeferBlockDetails(lView, tNode);\n const ssrUniqueId = lDetails[SSR_UNIQUE_ID];\n ngDevMode && assertSsrIdDefined(ssrUniqueId);\n triggerHydrationFromBlockName(injector, ssrUniqueId);\n }\n } finally {\n setActiveConsumer(prevConsumer);\n }\n }\n }\n}\nfunction \u0275\u0275deferHydrateNever() {\n const lView = getLView();\n const tNode = getCurrentTNode();\n if (ngDevMode) {\n trackTriggerForDebugging(lView[TVIEW], tNode, 'hydrate never');\n }\n if (!shouldAttachTrigger(2, lView, tNode)) return;\n const hydrateTriggers = getHydrateTriggers(getTView(), tNode);\n hydrateTriggers.set(7, null);\n if (typeof ngServerMode !== 'undefined' && ngServerMode) {\n triggerDeferBlock(2, lView, tNode);\n }\n}\nfunction \u0275\u0275deferOnIdle() {\n const lView = getLView();\n const tNode = getCurrentTNode();\n if (ngDevMode) {\n trackTriggerForDebugging(lView[TVIEW], tNode, 'on idle');\n }\n if (!shouldAttachTrigger(0, lView, tNode)) return;\n scheduleDelayedTrigger(onIdle);\n}\nfunction \u0275\u0275deferPrefetchOnIdle() {\n const lView = getLView();\n const tNode = getCurrentTNode();\n if (ngDevMode) {\n trackTriggerForDebugging(lView[TVIEW], tNode, 'prefetch on idle');\n }\n if (!shouldAttachTrigger(1, lView, tNode)) return;\n scheduleDelayedPrefetching(onIdle);\n}\nfunction \u0275\u0275deferHydrateOnIdle() {\n const lView = getLView();\n const tNode = getCurrentTNode();\n if (ngDevMode) {\n trackTriggerForDebugging(lView[TVIEW], tNode, 'hydrate on idle');\n }\n if (!shouldAttachTrigger(2, lView, tNode)) return;\n const hydrateTriggers = getHydrateTriggers(getTView(), tNode);\n hydrateTriggers.set(0, null);\n if (typeof ngServerMode !== 'undefined' && ngServerMode) {\n triggerDeferBlock(2, lView, tNode);\n } else {\n scheduleDelayedHydrating(onIdle, lView, tNode);\n }\n}\nfunction \u0275\u0275deferOnImmediate() {\n const lView = getLView();\n const tNode = getCurrentTNode();\n if (ngDevMode) {\n trackTriggerForDebugging(lView[TVIEW], tNode, 'on immediate');\n }\n if (!shouldAttachTrigger(0, lView, tNode)) return;\n const tDetails = getTDeferBlockDetails(lView[TVIEW], tNode);\n if (tDetails.loadingTmplIndex === null) {\n renderPlaceholder(lView, tNode);\n }\n triggerDeferBlock(0, lView, tNode);\n}\nfunction \u0275\u0275deferPrefetchOnImmediate() {\n const lView = getLView();\n const tNode = getCurrentTNode();\n if (ngDevMode) {\n trackTriggerForDebugging(lView[TVIEW], tNode, 'prefetch on immediate');\n }\n if (!shouldAttachTrigger(1, lView, tNode)) return;\n const tView = lView[TVIEW];\n const tDetails = getTDeferBlockDetails(tView, tNode);\n if (tDetails.loadingState === DeferDependenciesLoadingState.NOT_STARTED) {\n triggerResourceLoading(tDetails, lView, tNode);\n }\n}\nfunction \u0275\u0275deferHydrateOnImmediate() {\n const lView = getLView();\n const tNode = getCurrentTNode();\n if (ngDevMode) {\n trackTriggerForDebugging(lView[TVIEW], tNode, 'hydrate on immediate');\n }\n if (!shouldAttachTrigger(2, lView, tNode)) return;\n const hydrateTriggers = getHydrateTriggers(getTView(), tNode);\n hydrateTriggers.set(1, null);\n if (typeof ngServerMode !== 'undefined' && ngServerMode) {\n triggerDeferBlock(2, lView, tNode);\n } else {\n const injector = lView[INJECTOR];\n const lDetails = getLDeferBlockDetails(lView, tNode);\n const ssrUniqueId = lDetails[SSR_UNIQUE_ID];\n ngDevMode && assertSsrIdDefined(ssrUniqueId);\n triggerHydrationFromBlockName(injector, ssrUniqueId);\n }\n}\nfunction \u0275\u0275deferOnTimer(delay) {\n const lView = getLView();\n const tNode = getCurrentTNode();\n if (ngDevMode) {\n trackTriggerForDebugging(lView[TVIEW], tNode, `on timer(${delay}ms)`);\n }\n if (!shouldAttachTrigger(0, lView, tNode)) return;\n scheduleDelayedTrigger(onTimer(delay));\n}\nfunction \u0275\u0275deferPrefetchOnTimer(delay) {\n const lView = getLView();\n const tNode = getCurrentTNode();\n if (ngDevMode) {\n trackTriggerForDebugging(lView[TVIEW], tNode, `prefetch on timer(${delay}ms)`);\n }\n if (!shouldAttachTrigger(1, lView, tNode)) return;\n scheduleDelayedPrefetching(onTimer(delay));\n}\nfunction \u0275\u0275deferHydrateOnTimer(delay) {\n const lView = getLView();\n const tNode = getCurrentTNode();\n if (ngDevMode) {\n trackTriggerForDebugging(lView[TVIEW], tNode, `hydrate on timer(${delay}ms)`);\n }\n if (!shouldAttachTrigger(2, lView, tNode)) return;\n const hydrateTriggers = getHydrateTriggers(getTView(), tNode);\n hydrateTriggers.set(5, {\n type: 5,\n delay\n });\n if (typeof ngServerMode !== 'undefined' && ngServerMode) {\n triggerDeferBlock(2, lView, tNode);\n } else {\n scheduleDelayedHydrating(onTimer(delay), lView, tNode);\n }\n}\nfunction \u0275\u0275deferOnHover(triggerIndex, walkUpTimes) {\n const lView = getLView();\n const tNode = getCurrentTNode();\n if (ngDevMode) {\n trackTriggerForDebugging(lView[TVIEW], tNode, `on hover${walkUpTimes === -1 ? '' : '()'}`);\n }\n if (!shouldAttachTrigger(0, lView, tNode)) return;\n renderPlaceholder(lView, tNode);\n if (!(typeof ngServerMode !== 'undefined' && ngServerMode)) {\n registerDomTrigger(lView, tNode, triggerIndex, walkUpTimes, onHover, () => triggerDeferBlock(0, lView, tNode), 0);\n }\n}\nfunction \u0275\u0275deferPrefetchOnHover(triggerIndex, walkUpTimes) {\n const lView = getLView();\n const tNode = getCurrentTNode();\n if (ngDevMode) {\n trackTriggerForDebugging(lView[TVIEW], tNode, `prefetch on hover${walkUpTimes === -1 ? '' : '()'}`);\n }\n if (!shouldAttachTrigger(1, lView, tNode)) return;\n const tView = lView[TVIEW];\n const tDetails = getTDeferBlockDetails(tView, tNode);\n if (tDetails.loadingState === DeferDependenciesLoadingState.NOT_STARTED) {\n registerDomTrigger(lView, tNode, triggerIndex, walkUpTimes, onHover, () => triggerPrefetching(tDetails, lView, tNode), 1);\n }\n}\nfunction \u0275\u0275deferHydrateOnHover() {\n const lView = getLView();\n const tNode = getCurrentTNode();\n if (ngDevMode) {\n trackTriggerForDebugging(lView[TVIEW], tNode, 'hydrate on hover');\n }\n if (!shouldAttachTrigger(2, lView, tNode)) return;\n const hydrateTriggers = getHydrateTriggers(getTView(), tNode);\n hydrateTriggers.set(4, null);\n if (typeof ngServerMode !== 'undefined' && ngServerMode) {\n triggerDeferBlock(2, lView, tNode);\n }\n}\nfunction \u0275\u0275deferOnInteraction(triggerIndex, walkUpTimes) {\n const lView = getLView();\n const tNode = getCurrentTNode();\n if (ngDevMode) {\n trackTriggerForDebugging(lView[TVIEW], tNode, `on interaction${walkUpTimes === -1 ? '' : '()'}`);\n }\n if (!shouldAttachTrigger(0, lView, tNode)) return;\n renderPlaceholder(lView, tNode);\n if (!(typeof ngServerMode !== 'undefined' && ngServerMode)) {\n registerDomTrigger(lView, tNode, triggerIndex, walkUpTimes, onInteraction, () => triggerDeferBlock(0, lView, tNode), 0);\n }\n}\nfunction \u0275\u0275deferPrefetchOnInteraction(triggerIndex, walkUpTimes) {\n const lView = getLView();\n const tNode = getCurrentTNode();\n if (ngDevMode) {\n trackTriggerForDebugging(lView[TVIEW], tNode, `prefetch on interaction${walkUpTimes === -1 ? '' : '()'}`);\n }\n if (!shouldAttachTrigger(1, lView, tNode)) return;\n const tView = lView[TVIEW];\n const tDetails = getTDeferBlockDetails(tView, tNode);\n if (tDetails.loadingState === DeferDependenciesLoadingState.NOT_STARTED) {\n registerDomTrigger(lView, tNode, triggerIndex, walkUpTimes, onInteraction, () => triggerPrefetching(tDetails, lView, tNode), 1);\n }\n}\nfunction \u0275\u0275deferHydrateOnInteraction() {\n const lView = getLView();\n const tNode = getCurrentTNode();\n if (ngDevMode) {\n trackTriggerForDebugging(lView[TVIEW], tNode, 'hydrate on interaction');\n }\n if (!shouldAttachTrigger(2, lView, tNode)) return;\n const hydrateTriggers = getHydrateTriggers(getTView(), tNode);\n hydrateTriggers.set(3, null);\n if (typeof ngServerMode !== 'undefined' && ngServerMode) {\n triggerDeferBlock(2, lView, tNode);\n }\n}\nfunction \u0275\u0275deferOnViewport(triggerIndex, walkUpTimes, options) {\n const lView = getLView();\n const tNode = getCurrentTNode();\n if (ngDevMode) {\n const args = [];\n if (walkUpTimes !== undefined && walkUpTimes !== -1) {\n args.push('');\n }\n if (options) {\n args.push(JSON.stringify(options));\n }\n trackTriggerForDebugging(lView[TVIEW], tNode, `on viewport${args.length === 0 ? '' : `(${args.join(', ')})`}`);\n }\n if (!shouldAttachTrigger(0, lView, tNode)) return;\n renderPlaceholder(lView, tNode);\n if (!(typeof ngServerMode !== 'undefined' && ngServerMode)) {\n registerDomTrigger(lView, tNode, triggerIndex, walkUpTimes, onViewportWrapper, () => triggerDeferBlock(0, lView, tNode), 0, options);\n }\n}\nfunction \u0275\u0275deferPrefetchOnViewport(triggerIndex, walkUpTimes, options) {\n const lView = getLView();\n const tNode = getCurrentTNode();\n if (ngDevMode) {\n const args = [];\n if (walkUpTimes !== undefined && walkUpTimes !== -1) {\n args.push('');\n }\n if (options) {\n args.push(JSON.stringify(options));\n }\n trackTriggerForDebugging(lView[TVIEW], tNode, `prefetch on viewport${args.length === 0 ? '' : `(${args.join(', ')})`}`);\n }\n if (!shouldAttachTrigger(1, lView, tNode)) return;\n const tView = lView[TVIEW];\n const tDetails = getTDeferBlockDetails(tView, tNode);\n if (tDetails.loadingState === DeferDependenciesLoadingState.NOT_STARTED) {\n registerDomTrigger(lView, tNode, triggerIndex, walkUpTimes, onViewportWrapper, () => triggerPrefetching(tDetails, lView, tNode), 1, options);\n }\n}\nfunction \u0275\u0275deferHydrateOnViewport(options) {\n const lView = getLView();\n const tNode = getCurrentTNode();\n if (ngDevMode) {\n trackTriggerForDebugging(lView[TVIEW], tNode, `hydrate on viewport${options ? `(${JSON.stringify(options)})` : ''}`);\n }\n if (!shouldAttachTrigger(2, lView, tNode)) return;\n const hydrateTriggers = getHydrateTriggers(getTView(), tNode);\n hydrateTriggers.set(2, options ? {\n type: 2,\n intersectionObserverOptions: options\n } : null);\n if (typeof ngServerMode !== 'undefined' && ngServerMode) {\n triggerDeferBlock(2, lView, tNode);\n }\n}\nfunction \u0275\u0275ariaProperty(name, value) {\n const lView = getLView();\n const bindingIndex = nextBindingIndex();\n if (bindingUpdated(lView, bindingIndex, value)) {\n const tView = getTView();\n const tNode = getSelectedTNode();\n const hasSetInput = setAllInputsForProperty(tNode, tView, lView, name, value);\n if (hasSetInput) {\n isComponentHost(tNode) && markDirtyIfOnPush(lView, tNode.index);\n ngDevMode && setNgReflectProperties(lView, tView, tNode, name, value);\n } else {\n ngDevMode && assertTNodeType(tNode, 2);\n const element = getNativeByTNode(tNode, lView);\n setElementAttribute(lView[RENDERER], element, null, tNode.value, name, value, null);\n }\n ngDevMode && storePropertyBindingMetadata(tView.data, tNode, name, bindingIndex);\n }\n return \u0275\u0275ariaProperty;\n}\nfunction \u0275\u0275attribute(name, value, sanitizer, namespace) {\n const lView = getLView();\n const bindingIndex = nextBindingIndex();\n if (bindingUpdated(lView, bindingIndex, value)) {\n const tView = getTView();\n const tNode = getSelectedTNode();\n elementAttributeInternal(tNode, lView, name, value, sanitizer, namespace);\n ngDevMode && storePropertyBindingMetadata(tView.data, tNode, 'attr.' + name, bindingIndex);\n }\n return \u0275\u0275attribute;\n}\nfunction \u0275\u0275animateEnter(value) {\n performanceMarkFeature('NgAnimateEnter');\n if (typeof ngServerMode !== 'undefined' && ngServerMode || !areAnimationSupported) {\n return \u0275\u0275animateEnter;\n }\n ngDevMode && assertAnimationTypes(value, 'animate.enter');\n const lView = getLView();\n if (areAnimationsDisabled(lView)) {\n return \u0275\u0275animateEnter;\n }\n const tNode = getCurrentTNode();\n const ngZone = lView[INJECTOR].get(NgZone);\n addAnimationToLView(getLViewEnterAnimations(lView), tNode, () => runEnterAnimation(lView, tNode, value, ngZone));\n initializeAnimationQueueScheduler(lView[INJECTOR]);\n queueEnterAnimations(lView[INJECTOR], getLViewEnterAnimations(lView));\n return \u0275\u0275animateEnter;\n}\nfunction runEnterAnimation(lView, tNode, value, ngZone) {\n const nativeElement = getNativeByTNode(tNode, lView);\n ngDevMode && assertElementNodes(nativeElement, 'animate.enter');\n const renderer = lView[RENDERER];\n const activeClasses = getClassListFromValue(value);\n const cleanupFns = [];\n let hasCompleted = false;\n const handleEnterAnimationStart = event => {\n if (getEventTarget(event) !== nativeElement) return;\n const eventName = event instanceof AnimationEvent ? 'animationend' : 'transitionend';\n ngZone.runOutsideAngular(() => {\n renderer.listen(nativeElement, eventName, handleEnterAnimationEnd);\n });\n };\n const handleEnterAnimationEnd = event => {\n if (getEventTarget(event) !== nativeElement) return;\n if (isLongestAnimation(event, nativeElement)) {\n hasCompleted = true;\n }\n enterAnimationEnd(event, nativeElement, renderer);\n };\n if (activeClasses && activeClasses.length > 0) {\n ngZone.runOutsideAngular(() => {\n cleanupFns.push(renderer.listen(nativeElement, 'animationstart', handleEnterAnimationStart));\n cleanupFns.push(renderer.listen(nativeElement, 'transitionstart', handleEnterAnimationStart));\n });\n trackEnterClasses(nativeElement, activeClasses, cleanupFns);\n for (const klass of activeClasses) {\n renderer.addClass(nativeElement, klass);\n }\n ngZone.runOutsideAngular(() => {\n requestAnimationFrame(() => {\n if (hasCompleted) return;\n determineLongestAnimation(nativeElement, longestAnimations, areAnimationSupported);\n if (!longestAnimations.has(nativeElement)) {\n for (const klass of activeClasses) {\n renderer.removeClass(nativeElement, klass);\n }\n cleanupEnterClassData(nativeElement);\n }\n });\n });\n }\n}\nfunction enterAnimationEnd(event, nativeElement, renderer) {\n const elementData = enterClassMap.get(nativeElement);\n if (getEventTarget(event) !== nativeElement || !elementData) return;\n if (isLongestAnimation(event, nativeElement)) {\n event.stopPropagation();\n for (const klass of elementData.classList) {\n renderer.removeClass(nativeElement, klass);\n }\n cleanupEnterClassData(nativeElement);\n }\n}\nfunction \u0275\u0275animateEnterListener(value) {\n performanceMarkFeature('NgAnimateEnter');\n if (typeof ngServerMode !== 'undefined' && ngServerMode || !areAnimationSupported) {\n return \u0275\u0275animateEnterListener;\n }\n ngDevMode && assertAnimationTypes(value, 'animate.enter');\n const lView = getLView();\n if (areAnimationsDisabled(lView)) {\n return \u0275\u0275animateEnterListener;\n }\n const tNode = getCurrentTNode();\n addAnimationToLView(getLViewEnterAnimations(lView), tNode, () => runEnterAnimationFunction(lView, tNode, value));\n initializeAnimationQueueScheduler(lView[INJECTOR]);\n queueEnterAnimations(lView[INJECTOR], getLViewEnterAnimations(lView));\n return \u0275\u0275animateEnterListener;\n}\nfunction runEnterAnimationFunction(lView, tNode, value) {\n const nativeElement = getNativeByTNode(tNode, lView);\n ngDevMode && assertElementNodes(nativeElement, 'animate.enter');\n value.call(lView[CONTEXT], {\n target: nativeElement,\n animationComplete: noOpAnimationComplete\n });\n}\nfunction \u0275\u0275animateLeave(value) {\n performanceMarkFeature('NgAnimateLeave');\n if (typeof ngServerMode !== 'undefined' && ngServerMode || !areAnimationSupported) {\n return \u0275\u0275animateLeave;\n }\n ngDevMode && assertAnimationTypes(value, 'animate.leave');\n const lView = getLView();\n const animationsDisabled = areAnimationsDisabled(lView);\n if (animationsDisabled) {\n return \u0275\u0275animateLeave;\n }\n const tNode = getCurrentTNode();\n const ngZone = lView[INJECTOR].get(NgZone);\n addAnimationToLView(getLViewLeaveAnimations(lView), tNode, () => runLeaveAnimations(lView, tNode, value, ngZone));\n initializeAnimationQueueScheduler(lView[INJECTOR]);\n return \u0275\u0275animateLeave;\n}\nfunction runLeaveAnimations(lView, tNode, value, ngZone) {\n const {\n promise,\n resolve\n } = promiseWithResolvers();\n const nativeElement = getNativeByTNode(tNode, lView);\n ngDevMode && assertElementNodes(nativeElement, 'animate.leave');\n const renderer = lView[RENDERER];\n allLeavingAnimations.add(lView[ID]);\n (getLViewLeaveAnimations(lView).get(tNode.index).resolvers ??= []).push(resolve);\n const activeClasses = getClassListFromValue(value);\n if (activeClasses && activeClasses.length > 0) {\n animateLeaveClassRunner(nativeElement, tNode, lView, activeClasses, renderer, ngZone);\n } else {\n resolve();\n }\n return {\n promise,\n resolve\n };\n}\nfunction animateLeaveClassRunner(el, tNode, lView, classList, renderer, ngZone) {\n cancelAnimationsIfRunning(el, renderer);\n const cleanupFns = [];\n const componentResolvers = getLViewLeaveAnimations(lView).get(tNode.index)?.resolvers;\n let fallbackTimeoutId;\n let hasCompleted = false;\n const handleOutAnimationEnd = event => {\n const target = getEventTarget(event);\n if (target !== el && event.type !== 'animation-fallback') return;\n if (event.type === 'animation-fallback' || isLongestAnimation(event, el)) {\n hasCompleted = true;\n if (fallbackTimeoutId) clearTimeout(fallbackTimeoutId);\n if (event.type !== 'animation-fallback') event.stopPropagation();\n longestAnimations.delete(el);\n clearLeavingNodes(tNode, el);\n if (Array.isArray(tNode.projection)) {\n for (const item of classList) {\n renderer.removeClass(el, item);\n }\n }\n cleanupAfterLeaveAnimations(componentResolvers, cleanupFns);\n clearLViewNodeAnimationResolvers(lView, tNode);\n }\n };\n ngZone.runOutsideAngular(() => {\n cleanupFns.push(renderer.listen(el, 'animationend', handleOutAnimationEnd));\n cleanupFns.push(renderer.listen(el, 'transitionend', handleOutAnimationEnd));\n });\n trackLeavingNodes(tNode, el);\n for (const item of classList) {\n renderer.addClass(el, item);\n }\n ngZone.runOutsideAngular(() => {\n requestAnimationFrame(() => {\n if (hasCompleted) return;\n determineLongestAnimation(el, longestAnimations, areAnimationSupported);\n const longest = longestAnimations.get(el);\n if (!longest) {\n clearLeavingNodes(tNode, el);\n cleanupAfterLeaveAnimations(componentResolvers, cleanupFns);\n clearLViewNodeAnimationResolvers(lView, tNode);\n } else {\n fallbackTimeoutId = setTimeout(() => {\n handleOutAnimationEnd(new CustomEvent('animation-fallback'));\n }, longest.duration + 50);\n cleanupFns.push(() => clearTimeout(fallbackTimeoutId));\n }\n });\n });\n}\nfunction \u0275\u0275animateLeaveListener(value) {\n performanceMarkFeature('NgAnimateLeave');\n if (typeof ngServerMode !== 'undefined' && ngServerMode || !areAnimationSupported) {\n return \u0275\u0275animateLeaveListener;\n }\n ngDevMode && assertAnimationTypes(value, 'animate.leave');\n const lView = getLView();\n const tNode = getCurrentTNode();\n allLeavingAnimations.add(lView[ID]);\n const ngZone = lView[INJECTOR].get(NgZone);\n const maxAnimationTimeout = lView[INJECTOR].get(MAX_ANIMATION_TIMEOUT);\n addAnimationToLView(getLViewLeaveAnimations(lView), tNode, () => runLeaveAnimationFunction(lView, tNode, value, ngZone, maxAnimationTimeout));\n initializeAnimationQueueScheduler(lView[INJECTOR]);\n return \u0275\u0275animateLeaveListener;\n}\nfunction runLeaveAnimationFunction(lView, tNode, value, ngZone, maxAnimationTimeout) {\n const {\n promise,\n resolve\n } = promiseWithResolvers();\n const nativeElement = getNativeByTNode(tNode, lView);\n ngDevMode && assertElementNodes(nativeElement, 'animate.leave');\n const cleanupFns = [];\n const renderer = lView[RENDERER];\n const animationsDisabled = areAnimationsDisabled(lView);\n (getLViewLeaveAnimations(lView).get(tNode.index).resolvers ??= []).push(resolve);\n const resolvers = getLViewLeaveAnimations(lView).get(tNode.index)?.resolvers;\n if (animationsDisabled) {\n leaveAnimationFunctionCleanup(lView, tNode, nativeElement, resolvers, cleanupFns);\n } else {\n const timeoutId = setTimeout(() => leaveAnimationFunctionCleanup(lView, tNode, nativeElement, resolvers, cleanupFns), maxAnimationTimeout);\n const event = {\n target: nativeElement,\n animationComplete: () => {\n leaveAnimationFunctionCleanup(lView, tNode, nativeElement, resolvers, cleanupFns);\n clearTimeout(timeoutId);\n }\n };\n trackLeavingNodes(tNode, nativeElement);\n ngZone.runOutsideAngular(() => {\n cleanupFns.push(renderer.listen(nativeElement, 'animationend', () => {\n leaveAnimationFunctionCleanup(lView, tNode, nativeElement, resolvers, cleanupFns);\n clearTimeout(timeoutId);\n }, {\n once: true\n }));\n });\n value.call(lView[CONTEXT], event);\n }\n return {\n promise,\n resolve\n };\n}\nfunction \u0275\u0275componentInstance() {\n const instance = getLView()[DECLARATION_COMPONENT_VIEW][CONTEXT];\n ngDevMode && assertDefined(instance, 'Expected component instance to be defined');\n return instance;\n}\nclass LiveCollection {\n destroy(item) {}\n updateValue(index, value) {}\n swap(index1, index2) {\n const startIdx = Math.min(index1, index2);\n const endIdx = Math.max(index1, index2);\n const endItem = this.detach(endIdx);\n if (endIdx - startIdx > 1) {\n const startItem = this.detach(startIdx);\n this.attach(startIdx, endItem);\n this.attach(endIdx, startItem);\n } else {\n this.attach(startIdx, endItem);\n }\n }\n move(prevIndex, newIdx) {\n this.attach(newIdx, this.detach(prevIndex));\n }\n}\nfunction valuesMatching(liveIdx, liveValue, newIdx, newValue, trackBy) {\n if (liveIdx === newIdx && Object.is(liveValue, newValue)) {\n return 1;\n } else if (Object.is(trackBy(liveIdx, liveValue), trackBy(newIdx, newValue))) {\n return -1;\n }\n return 0;\n}\nfunction recordDuplicateKeys(keyToIdx, key, idx) {\n const idxSoFar = keyToIdx.get(key);\n if (idxSoFar !== undefined) {\n idxSoFar.add(idx);\n } else {\n keyToIdx.set(key, new Set([idx]));\n }\n}\nfunction reconcile(liveCollection, newCollection, trackByFn, reactiveConsumer) {\n let detachedItems = undefined;\n let liveKeysInTheFuture = undefined;\n let liveStartIdx = 0;\n let liveEndIdx = liveCollection.length - 1;\n const duplicateKeys = ngDevMode ? new Map() : undefined;\n if (Array.isArray(newCollection)) {\n setActiveConsumer$1(reactiveConsumer);\n let newEndIdx = newCollection.length - 1;\n setActiveConsumer$1(null);\n while (liveStartIdx <= liveEndIdx && liveStartIdx <= newEndIdx) {\n const liveStartValue = liveCollection.at(liveStartIdx);\n const newStartValue = newCollection[liveStartIdx];\n if (ngDevMode) {\n recordDuplicateKeys(duplicateKeys, trackByFn(liveStartIdx, newStartValue), liveStartIdx);\n }\n const isStartMatching = valuesMatching(liveStartIdx, liveStartValue, liveStartIdx, newStartValue, trackByFn);\n if (isStartMatching !== 0) {\n if (isStartMatching < 0) {\n liveCollection.updateValue(liveStartIdx, newStartValue);\n }\n liveStartIdx++;\n continue;\n }\n const liveEndValue = liveCollection.at(liveEndIdx);\n const newEndValue = newCollection[newEndIdx];\n if (ngDevMode) {\n recordDuplicateKeys(duplicateKeys, trackByFn(newEndIdx, newEndValue), newEndIdx);\n }\n const isEndMatching = valuesMatching(liveEndIdx, liveEndValue, newEndIdx, newEndValue, trackByFn);\n if (isEndMatching !== 0) {\n if (isEndMatching < 0) {\n liveCollection.updateValue(liveEndIdx, newEndValue);\n }\n liveEndIdx--;\n newEndIdx--;\n continue;\n }\n const liveStartKey = trackByFn(liveStartIdx, liveStartValue);\n const liveEndKey = trackByFn(liveEndIdx, liveEndValue);\n const newStartKey = trackByFn(liveStartIdx, newStartValue);\n if (Object.is(newStartKey, liveEndKey)) {\n const newEndKey = trackByFn(newEndIdx, newEndValue);\n if (Object.is(newEndKey, liveStartKey)) {\n liveCollection.swap(liveStartIdx, liveEndIdx);\n liveCollection.updateValue(liveEndIdx, newEndValue);\n newEndIdx--;\n liveEndIdx--;\n } else {\n liveCollection.move(liveEndIdx, liveStartIdx);\n }\n liveCollection.updateValue(liveStartIdx, newStartValue);\n liveStartIdx++;\n continue;\n }\n detachedItems ??= new UniqueValueMultiKeyMap();\n liveKeysInTheFuture ??= initLiveItemsInTheFuture(liveCollection, liveStartIdx, liveEndIdx, trackByFn);\n if (attachPreviouslyDetached(liveCollection, detachedItems, liveStartIdx, newStartKey)) {\n liveCollection.updateValue(liveStartIdx, newStartValue);\n liveStartIdx++;\n liveEndIdx++;\n } else if (!liveKeysInTheFuture.has(newStartKey)) {\n const newItem = liveCollection.create(liveStartIdx, newCollection[liveStartIdx]);\n liveCollection.attach(liveStartIdx, newItem);\n liveStartIdx++;\n liveEndIdx++;\n } else {\n detachedItems.set(liveStartKey, liveCollection.detach(liveStartIdx));\n liveEndIdx--;\n }\n }\n while (liveStartIdx <= newEndIdx) {\n createOrAttach(liveCollection, detachedItems, trackByFn, liveStartIdx, newCollection[liveStartIdx]);\n liveStartIdx++;\n }\n } else if (newCollection != null) {\n setActiveConsumer$1(reactiveConsumer);\n const newCollectionIterator = newCollection[Symbol.iterator]();\n setActiveConsumer$1(null);\n let newIterationResult = newCollectionIterator.next();\n while (!newIterationResult.done && liveStartIdx <= liveEndIdx) {\n const liveValue = liveCollection.at(liveStartIdx);\n const newValue = newIterationResult.value;\n if (ngDevMode) {\n recordDuplicateKeys(duplicateKeys, trackByFn(liveStartIdx, newValue), liveStartIdx);\n }\n const isStartMatching = valuesMatching(liveStartIdx, liveValue, liveStartIdx, newValue, trackByFn);\n if (isStartMatching !== 0) {\n if (isStartMatching < 0) {\n liveCollection.updateValue(liveStartIdx, newValue);\n }\n liveStartIdx++;\n newIterationResult = newCollectionIterator.next();\n } else {\n detachedItems ??= new UniqueValueMultiKeyMap();\n liveKeysInTheFuture ??= initLiveItemsInTheFuture(liveCollection, liveStartIdx, liveEndIdx, trackByFn);\n const newKey = trackByFn(liveStartIdx, newValue);\n if (attachPreviouslyDetached(liveCollection, detachedItems, liveStartIdx, newKey)) {\n liveCollection.updateValue(liveStartIdx, newValue);\n liveStartIdx++;\n liveEndIdx++;\n newIterationResult = newCollectionIterator.next();\n } else if (!liveKeysInTheFuture.has(newKey)) {\n liveCollection.attach(liveStartIdx, liveCollection.create(liveStartIdx, newValue));\n liveStartIdx++;\n liveEndIdx++;\n newIterationResult = newCollectionIterator.next();\n } else {\n const liveKey = trackByFn(liveStartIdx, liveValue);\n detachedItems.set(liveKey, liveCollection.detach(liveStartIdx));\n liveEndIdx--;\n }\n }\n }\n while (!newIterationResult.done) {\n createOrAttach(liveCollection, detachedItems, trackByFn, liveCollection.length, newIterationResult.value);\n newIterationResult = newCollectionIterator.next();\n }\n }\n while (liveStartIdx <= liveEndIdx) {\n liveCollection.destroy(liveCollection.detach(liveEndIdx--));\n }\n detachedItems?.forEach(item => {\n liveCollection.destroy(item);\n });\n if (ngDevMode) {\n let duplicatedKeysMsg = [];\n for (const [key, idxSet] of duplicateKeys) {\n if (idxSet.size > 1) {\n const idx = [...idxSet].sort((a, b) => a - b);\n for (let i = 1; i < idx.length; i++) {\n duplicatedKeysMsg.push(`key \"${stringifyForError(key)}\" at index \"${idx[i - 1]}\" and \"${idx[i]}\"`);\n }\n }\n }\n if (duplicatedKeysMsg.length > 0) {\n const message = formatRuntimeError(-955, 'The provided track expression resulted in duplicated keys for a given collection. ' + 'Adjust the tracking expression such that it uniquely identifies all the items in the collection. ' + 'Duplicated keys were: \\n' + duplicatedKeysMsg.join(', \\n') + '.');\n console.warn(message);\n }\n }\n}\nfunction attachPreviouslyDetached(prevCollection, detachedItems, index, key) {\n if (detachedItems !== undefined && detachedItems.has(key)) {\n prevCollection.attach(index, detachedItems.get(key));\n detachedItems.delete(key);\n return true;\n }\n return false;\n}\nfunction createOrAttach(liveCollection, detachedItems, trackByFn, index, value) {\n if (!attachPreviouslyDetached(liveCollection, detachedItems, index, trackByFn(index, value))) {\n const newItem = liveCollection.create(index, value);\n liveCollection.attach(index, newItem);\n } else {\n liveCollection.updateValue(index, value);\n }\n}\nfunction initLiveItemsInTheFuture(liveCollection, start, end, trackByFn) {\n const keys = new Set();\n for (let i = start; i <= end; i++) {\n keys.add(trackByFn(i, liveCollection.at(i)));\n }\n return keys;\n}\nclass UniqueValueMultiKeyMap {\n kvMap = /*#__PURE__*/new Map();\n _vMap = undefined;\n has(key) {\n return this.kvMap.has(key);\n }\n delete(key) {\n if (!this.has(key)) return false;\n const value = this.kvMap.get(key);\n if (this._vMap !== undefined && this._vMap.has(value)) {\n this.kvMap.set(key, this._vMap.get(value));\n this._vMap.delete(value);\n } else {\n this.kvMap.delete(key);\n }\n return true;\n }\n get(key) {\n return this.kvMap.get(key);\n }\n set(key, value) {\n if (this.kvMap.has(key)) {\n let prevValue = this.kvMap.get(key);\n if (ngDevMode && prevValue === value) {\n throw new Error(`Detected a duplicated value ${value} for the key ${key}`);\n }\n if (this._vMap === undefined) {\n this._vMap = new Map();\n }\n const vMap = this._vMap;\n while (vMap.has(prevValue)) {\n prevValue = vMap.get(prevValue);\n }\n vMap.set(prevValue, value);\n } else {\n this.kvMap.set(key, value);\n }\n }\n forEach(cb) {\n for (let [key, value] of this.kvMap) {\n cb(value, key);\n if (this._vMap !== undefined) {\n const vMap = this._vMap;\n while (vMap.has(value)) {\n value = vMap.get(value);\n cb(value, key);\n }\n }\n }\n }\n}\nfunction \u0275\u0275conditionalCreate(index, templateFn, decls, vars, tagName, attrsIndex, localRefsIndex, localRefExtractor) {\n performanceMarkFeature('NgControlFlow');\n const lView = getLView();\n const tView = getTView();\n const attrs = getConstant(tView.consts, attrsIndex);\n declareNoDirectiveHostTemplate(lView, tView, index, templateFn, decls, vars, tagName, attrs, 256, localRefsIndex, localRefExtractor);\n return \u0275\u0275conditionalBranchCreate;\n}\nfunction \u0275\u0275conditionalBranchCreate(index, templateFn, decls, vars, tagName, attrsIndex, localRefsIndex, localRefExtractor) {\n performanceMarkFeature('NgControlFlow');\n const lView = getLView();\n const tView = getTView();\n const attrs = getConstant(tView.consts, attrsIndex);\n declareNoDirectiveHostTemplate(lView, tView, index, templateFn, decls, vars, tagName, attrs, 512, localRefsIndex, localRefExtractor);\n return \u0275\u0275conditionalBranchCreate;\n}\nfunction \u0275\u0275conditional(matchingTemplateIndex, contextValue) {\n performanceMarkFeature('NgControlFlow');\n const hostLView = getLView();\n const bindingIndex = nextBindingIndex();\n const prevMatchingTemplateIndex = hostLView[bindingIndex] !== NO_CHANGE ? hostLView[bindingIndex] : -1;\n const prevContainer = prevMatchingTemplateIndex !== -1 ? getLContainer(hostLView, HEADER_OFFSET + prevMatchingTemplateIndex) : undefined;\n const viewInContainerIdx = 0;\n if (bindingUpdated(hostLView, bindingIndex, matchingTemplateIndex)) {\n const prevConsumer = setActiveConsumer(null);\n try {\n if (prevContainer !== undefined) {\n removeLViewFromLContainer(prevContainer, viewInContainerIdx);\n }\n if (matchingTemplateIndex !== -1) {\n const nextLContainerIndex = HEADER_OFFSET + matchingTemplateIndex;\n const nextContainer = getLContainer(hostLView, nextLContainerIndex);\n const templateTNode = getExistingTNode(hostLView[TVIEW], nextLContainerIndex);\n const dehydratedView = findAndReconcileMatchingDehydratedViews(nextContainer, templateTNode, hostLView);\n const embeddedLView = createAndRenderEmbeddedLView(hostLView, templateTNode, contextValue, {\n dehydratedView\n });\n addLViewToLContainer(nextContainer, embeddedLView, viewInContainerIdx, shouldAddViewToDom(templateTNode, dehydratedView));\n }\n } finally {\n setActiveConsumer(prevConsumer);\n }\n } else if (prevContainer !== undefined) {\n const lView = getLViewFromLContainer(prevContainer, viewInContainerIdx);\n if (lView !== undefined) {\n lView[CONTEXT] = contextValue;\n }\n }\n}\nclass RepeaterContext {\n lContainer;\n $implicit;\n $index;\n constructor(lContainer, $implicit, $index) {\n this.lContainer = lContainer;\n this.$implicit = $implicit;\n this.$index = $index;\n }\n get $count() {\n return this.lContainer.length - CONTAINER_HEADER_OFFSET;\n }\n}\nfunction \u0275\u0275repeaterTrackByIndex(index) {\n return index;\n}\nfunction \u0275\u0275repeaterTrackByIdentity(_, value) {\n return value;\n}\nclass RepeaterMetadata {\n hasEmptyBlock;\n trackByFn;\n liveCollection;\n constructor(hasEmptyBlock, trackByFn, liveCollection) {\n this.hasEmptyBlock = hasEmptyBlock;\n this.trackByFn = trackByFn;\n this.liveCollection = liveCollection;\n }\n}\nfunction \u0275\u0275repeaterCreate(index, templateFn, decls, vars, tagName, attrsIndex, trackByFn, trackByUsesComponentInstance, emptyTemplateFn, emptyDecls, emptyVars, emptyTagName, emptyAttrsIndex) {\n performanceMarkFeature('NgControlFlow');\n ngDevMode && assertFunction(trackByFn, `A track expression must be a function, was ${typeof trackByFn} instead.`);\n const lView = getLView();\n const tView = getTView();\n const hasEmptyBlock = emptyTemplateFn !== undefined;\n const hostLView = getLView();\n const boundTrackBy = trackByUsesComponentInstance ? trackByFn.bind(hostLView[DECLARATION_COMPONENT_VIEW][CONTEXT]) : trackByFn;\n const metadata = new RepeaterMetadata(hasEmptyBlock, boundTrackBy);\n hostLView[HEADER_OFFSET + index] = metadata;\n declareNoDirectiveHostTemplate(lView, tView, index + 1, templateFn, decls, vars, tagName, getConstant(tView.consts, attrsIndex), 256);\n if (hasEmptyBlock) {\n ngDevMode && assertDefined(emptyDecls, 'Missing number of declarations for the empty repeater block.');\n ngDevMode && assertDefined(emptyVars, 'Missing number of bindings for the empty repeater block.');\n declareNoDirectiveHostTemplate(lView, tView, index + 2, emptyTemplateFn, emptyDecls, emptyVars, emptyTagName, getConstant(tView.consts, emptyAttrsIndex), 512);\n }\n}\nfunction isViewExpensiveToRecreate(lView) {\n return lView.length - HEADER_OFFSET > 2;\n}\nclass OperationsCounter {\n created = 0;\n destroyed = 0;\n reset() {\n this.created = 0;\n this.destroyed = 0;\n }\n recordCreate() {\n this.created++;\n }\n recordDestroy() {\n this.destroyed++;\n }\n wasReCreated(collectionLen) {\n return collectionLen > 0 && this.created === this.destroyed && this.created === collectionLen;\n }\n}\nclass LiveCollectionLContainerImpl extends LiveCollection {\n lContainer;\n hostLView;\n templateTNode;\n operationsCounter = ngDevMode ? /*#__PURE__*/new OperationsCounter() : undefined;\n needsIndexUpdate = false;\n constructor(lContainer, hostLView, templateTNode) {\n super();\n this.lContainer = lContainer;\n this.hostLView = hostLView;\n this.templateTNode = templateTNode;\n }\n get length() {\n return this.lContainer.length - CONTAINER_HEADER_OFFSET;\n }\n at(index) {\n return this.getLView(index)[CONTEXT].$implicit;\n }\n attach(index, lView) {\n const dehydratedView = lView[HYDRATION];\n this.needsIndexUpdate ||= index !== this.length;\n addLViewToLContainer(this.lContainer, lView, index, shouldAddViewToDom(this.templateTNode, dehydratedView));\n clearDetachAnimationList(this.lContainer, index);\n }\n detach(index) {\n this.needsIndexUpdate ||= index !== this.length - 1;\n maybeInitDetachAnimationList(this.lContainer, index);\n return detachExistingView(this.lContainer, index);\n }\n create(index, value) {\n const dehydratedView = findMatchingDehydratedView(this.lContainer, this.templateTNode.tView.ssrId);\n const embeddedLView = createAndRenderEmbeddedLView(this.hostLView, this.templateTNode, new RepeaterContext(this.lContainer, value, index), {\n dehydratedView\n });\n ngDevMode && this.operationsCounter?.recordCreate();\n return embeddedLView;\n }\n destroy(lView) {\n destroyLView(lView[TVIEW], lView);\n ngDevMode && this.operationsCounter?.recordDestroy();\n }\n updateValue(index, value) {\n this.getLView(index)[CONTEXT].$implicit = value;\n }\n reset() {\n this.needsIndexUpdate = false;\n ngDevMode && this.operationsCounter?.reset();\n }\n updateIndexes() {\n if (this.needsIndexUpdate) {\n for (let i = 0; i < this.length; i++) {\n this.getLView(i)[CONTEXT].$index = i;\n }\n }\n }\n getLView(index) {\n return getExistingLViewFromLContainer(this.lContainer, index);\n }\n}\nfunction \u0275\u0275repeater(collection) {\n const prevConsumer = setActiveConsumer(null);\n const metadataSlotIdx = getSelectedIndex();\n try {\n const hostLView = getLView();\n const hostTView = hostLView[TVIEW];\n const metadata = hostLView[metadataSlotIdx];\n const containerIndex = metadataSlotIdx + 1;\n const lContainer = getLContainer(hostLView, containerIndex);\n if (metadata.liveCollection === undefined) {\n const itemTemplateTNode = getExistingTNode(hostTView, containerIndex);\n metadata.liveCollection = new LiveCollectionLContainerImpl(lContainer, hostLView, itemTemplateTNode);\n } else {\n metadata.liveCollection.reset();\n }\n const liveCollection = metadata.liveCollection;\n reconcile(liveCollection, collection, metadata.trackByFn, prevConsumer);\n if (ngDevMode && metadata.trackByFn === \u0275\u0275repeaterTrackByIdentity && liveCollection.operationsCounter?.wasReCreated(liveCollection.length) && isViewExpensiveToRecreate(getExistingLViewFromLContainer(lContainer, 0))) {\n const message = formatRuntimeError(-956, `The configured tracking expression (track by identity) caused re-creation of the entire collection of size ${liveCollection.length}. ` + 'This is an expensive operation requiring destruction and subsequent creation of DOM nodes, directives, components etc. ' + 'Please review the \"track expression\" and make sure that it uniquely identifies items in a collection.');\n console.warn(message);\n }\n liveCollection.updateIndexes();\n if (metadata.hasEmptyBlock) {\n const bindingIndex = nextBindingIndex();\n const isCollectionEmpty = liveCollection.length === 0;\n if (bindingUpdated(hostLView, bindingIndex, isCollectionEmpty)) {\n const emptyTemplateIndex = metadataSlotIdx + 2;\n const lContainerForEmpty = getLContainer(hostLView, emptyTemplateIndex);\n if (isCollectionEmpty) {\n const emptyTemplateTNode = getExistingTNode(hostTView, emptyTemplateIndex);\n const dehydratedView = findAndReconcileMatchingDehydratedViews(lContainerForEmpty, emptyTemplateTNode, hostLView);\n const embeddedLView = createAndRenderEmbeddedLView(hostLView, emptyTemplateTNode, undefined, {\n dehydratedView\n });\n addLViewToLContainer(lContainerForEmpty, embeddedLView, 0, shouldAddViewToDom(emptyTemplateTNode, dehydratedView));\n } else {\n if (hostTView.firstUpdatePass) {\n removeDehydratedViews(lContainerForEmpty);\n }\n removeLViewFromLContainer(lContainerForEmpty, 0);\n }\n }\n }\n } finally {\n setActiveConsumer(prevConsumer);\n }\n}\nfunction getLContainer(lView, index) {\n const lContainer = lView[index];\n ngDevMode && assertLContainer(lContainer);\n return lContainer;\n}\nfunction clearDetachAnimationList(lContainer, index) {\n if (lContainer.length <= CONTAINER_HEADER_OFFSET) return;\n const indexInContainer = CONTAINER_HEADER_OFFSET + index;\n const viewToDetach = lContainer[indexInContainer];\n const animations = viewToDetach ? viewToDetach[ANIMATIONS] : undefined;\n if (viewToDetach && animations && animations.detachedLeaveAnimationFns && animations.detachedLeaveAnimationFns.length > 0) {\n const injector = viewToDetach[INJECTOR];\n removeFromAnimationQueue(injector, animations);\n allLeavingAnimations.delete(viewToDetach[ID]);\n animations.detachedLeaveAnimationFns = undefined;\n }\n}\nfunction maybeInitDetachAnimationList(lContainer, index) {\n if (lContainer.length <= CONTAINER_HEADER_OFFSET) return;\n const indexInContainer = CONTAINER_HEADER_OFFSET + index;\n const viewToDetach = lContainer[indexInContainer];\n const animations = viewToDetach ? viewToDetach[ANIMATIONS] : undefined;\n if (animations && animations.leave && animations.leave.size > 0) {\n animations.detachedLeaveAnimationFns = [];\n }\n}\nfunction detachExistingView(lContainer, index) {\n const existingLView = detachView(lContainer, index);\n ngDevMode && assertLView(existingLView);\n return existingLView;\n}\nfunction getExistingLViewFromLContainer(lContainer, index) {\n const existingLView = getLViewFromLContainer(lContainer, index);\n ngDevMode && assertLView(existingLView);\n return existingLView;\n}\nfunction getExistingTNode(tView, index) {\n const tNode = getTNode(tView, index);\n ngDevMode && assertTNode(tNode);\n return tNode;\n}\nfunction \u0275\u0275property(propName, value, sanitizer) {\n const lView = getLView();\n const bindingIndex = nextBindingIndex();\n if (bindingUpdated(lView, bindingIndex, value)) {\n const tView = getTView();\n const tNode = getSelectedTNode();\n setPropertyAndInputs(tNode, lView, propName, value, lView[RENDERER], sanitizer);\n ngDevMode && storePropertyBindingMetadata(tView.data, tNode, propName, bindingIndex);\n }\n return \u0275\u0275property;\n}\nfunction setDirectiveInputsWhichShadowsStyling(tView, tNode, lView, value, isClassBased) {\n setAllInputsForProperty(tNode, tView, lView, isClassBased ? 'class' : 'style', value);\n}\nfunction \u0275\u0275elementStart(index, name, attrsIndex, localRefsIndex) {\n const lView = getLView();\n ngDevMode && assertTNodeCreationIndex(lView, index);\n const tView = lView[TVIEW];\n const adjustedIndex = index + HEADER_OFFSET;\n const tNode = tView.firstCreatePass ? directiveHostFirstCreatePass(adjustedIndex, lView, 2, name, findDirectiveDefMatches, getBindingsEnabled(), attrsIndex, localRefsIndex) : tView.data[adjustedIndex];\n if (isComponentHost(tNode)) {\n const tracingService = lView[ENVIRONMENT].tracingService;\n if (tracingService && tracingService.componentCreate) {\n const def = tView.data[tNode.directiveStart + tNode.componentOffset];\n return tracingService.componentCreate(getComponentName(def), () => {\n initializeElement(index, name, lView, tNode, localRefsIndex);\n return \u0275\u0275elementStart;\n });\n }\n }\n initializeElement(index, name, lView, tNode, localRefsIndex);\n return \u0275\u0275elementStart;\n}\nfunction initializeElement(index, name, lView, tNode, localRefsIndex) {\n elementLikeStartShared(tNode, lView, index, name, _locateOrCreateElementNode);\n if (isDirectiveHost(tNode)) {\n const tView = lView[TVIEW];\n createDirectivesInstances(tView, lView, tNode);\n executeContentQueries(tView, tNode, lView);\n }\n if (localRefsIndex != null) {\n saveResolvedLocalsInData(lView, tNode);\n }\n if (ngDevMode && lView[TVIEW].firstCreatePass) {\n validateElementIsKnown(lView, tNode);\n }\n}\nfunction \u0275\u0275elementEnd() {\n const tView = getTView();\n const initialTNode = getCurrentTNode();\n ngDevMode && assertDefined(initialTNode, 'No parent node to close.');\n const currentTNode = elementLikeEndShared(initialTNode);\n ngDevMode && assertTNodeType(currentTNode, 3);\n if (tView.firstCreatePass) {\n directiveHostEndFirstCreatePass(tView, currentTNode);\n }\n if (isSkipHydrationRootTNode(currentTNode)) {\n leaveSkipHydrationBlock();\n }\n decreaseElementDepthCount();\n if (currentTNode.classesWithoutHost != null && hasClassInput(currentTNode)) {\n setDirectiveInputsWhichShadowsStyling(tView, currentTNode, getLView(), currentTNode.classesWithoutHost, true);\n }\n if (currentTNode.stylesWithoutHost != null && hasStyleInput(currentTNode)) {\n setDirectiveInputsWhichShadowsStyling(tView, currentTNode, getLView(), currentTNode.stylesWithoutHost, false);\n }\n return \u0275\u0275elementEnd;\n}\nfunction \u0275\u0275element(index, name, attrsIndex, localRefsIndex) {\n \u0275\u0275elementStart(index, name, attrsIndex, localRefsIndex);\n \u0275\u0275elementEnd();\n return \u0275\u0275element;\n}\nfunction \u0275\u0275domElementStart(index, name, attrsIndex, localRefsIndex) {\n const lView = getLView();\n ngDevMode && assertTNodeCreationIndex(lView, index);\n const tView = lView[TVIEW];\n const adjustedIndex = index + HEADER_OFFSET;\n const tNode = tView.firstCreatePass ? domOnlyFirstCreatePass(adjustedIndex, tView, 2, name, attrsIndex, localRefsIndex) : tView.data[adjustedIndex];\n elementLikeStartShared(tNode, lView, index, name, _locateOrCreateElementNode);\n if (localRefsIndex != null) {\n saveResolvedLocalsInData(lView, tNode);\n }\n if (ngDevMode && lView[TVIEW].firstCreatePass) {\n validateElementIsKnown(lView, tNode);\n }\n return \u0275\u0275domElementStart;\n}\nfunction \u0275\u0275domElementEnd() {\n const initialTNode = getCurrentTNode();\n ngDevMode && assertDefined(initialTNode, 'No parent node to close.');\n const currentTNode = elementLikeEndShared(initialTNode);\n ngDevMode && assertTNodeType(currentTNode, 3);\n if (isSkipHydrationRootTNode(currentTNode)) {\n leaveSkipHydrationBlock();\n }\n decreaseElementDepthCount();\n return \u0275\u0275domElementEnd;\n}\nfunction \u0275\u0275domElement(index, name, attrsIndex, localRefsIndex) {\n \u0275\u0275domElementStart(index, name, attrsIndex, localRefsIndex);\n \u0275\u0275domElementEnd();\n return \u0275\u0275domElement;\n}\nlet _locateOrCreateElementNode = (tView, lView, tNode, name, index) => {\n lastNodeWasCreated(true);\n return createElementNode(lView[RENDERER], name, getNamespace());\n};\nfunction locateOrCreateElementNodeImpl(tView, lView, tNode, name, index) {\n const isNodeCreationMode = !canHydrateNode(lView, tNode);\n lastNodeWasCreated(isNodeCreationMode);\n if (isNodeCreationMode) {\n return createElementNode(lView[RENDERER], name, getNamespace());\n }\n const hydrationInfo = lView[HYDRATION];\n const native = locateNextRNode(hydrationInfo, tView, lView, tNode);\n ngDevMode && validateMatchingNode(native, Node.ELEMENT_NODE, name, lView, tNode);\n ngDevMode && markRNodeAsClaimedByHydration(native);\n if (getSerializedContainerViews(hydrationInfo, index)) {\n ngDevMode && validateNodeExists(native.nextSibling, lView, tNode);\n setSegmentHead(hydrationInfo, index, native.nextSibling);\n }\n if (hydrationInfo && (hasSkipHydrationAttrOnTNode(tNode) || hasSkipHydrationAttrOnRElement(native))) {\n if (isComponentHost(tNode)) {\n enterSkipHydrationBlock(tNode);\n clearElementContents(native);\n ngDevMode && markRNodeAsSkippedByHydration(native);\n } else if (ngDevMode) {\n throw invalidSkipHydrationHost(native);\n }\n }\n return native;\n}\nfunction enableLocateOrCreateElementNodeImpl() {\n _locateOrCreateElementNode = locateOrCreateElementNodeImpl;\n}\nfunction \u0275\u0275elementContainerStart(index, attrsIndex, localRefsIndex) {\n const lView = getLView();\n ngDevMode && assertTNodeCreationIndex(lView, index);\n const tView = lView[TVIEW];\n const adjustedIndex = index + HEADER_OFFSET;\n const tNode = tView.firstCreatePass ? directiveHostFirstCreatePass(adjustedIndex, lView, 8, 'ng-container', findDirectiveDefMatches, getBindingsEnabled(), attrsIndex, localRefsIndex) : tView.data[adjustedIndex];\n elementLikeStartShared(tNode, lView, index, 'ng-container', _locateOrCreateElementContainerNode);\n if (isDirectiveHost(tNode)) {\n const tView = lView[TVIEW];\n createDirectivesInstances(tView, lView, tNode);\n executeContentQueries(tView, tNode, lView);\n }\n if (localRefsIndex != null) {\n saveResolvedLocalsInData(lView, tNode);\n }\n return \u0275\u0275elementContainerStart;\n}\nfunction \u0275\u0275elementContainerEnd() {\n const tView = getTView();\n const initialTNode = getCurrentTNode();\n ngDevMode && assertDefined(initialTNode, 'No parent node to close.');\n const currentTNode = elementLikeEndShared(initialTNode);\n if (tView.firstCreatePass) {\n directiveHostEndFirstCreatePass(tView, currentTNode);\n }\n ngDevMode && assertTNodeType(currentTNode, 8);\n return \u0275\u0275elementContainerEnd;\n}\nfunction \u0275\u0275elementContainer(index, attrsIndex, localRefsIndex) {\n \u0275\u0275elementContainerStart(index, attrsIndex, localRefsIndex);\n \u0275\u0275elementContainerEnd();\n return \u0275\u0275elementContainer;\n}\nfunction \u0275\u0275domElementContainerStart(index, attrsIndex, localRefsIndex) {\n const lView = getLView();\n ngDevMode && assertTNodeCreationIndex(lView, index);\n const tView = lView[TVIEW];\n const adjustedIndex = index + HEADER_OFFSET;\n const tNode = tView.firstCreatePass ? domOnlyFirstCreatePass(adjustedIndex, tView, 8, 'ng-container', attrsIndex, localRefsIndex) : tView.data[adjustedIndex];\n elementLikeStartShared(tNode, lView, index, 'ng-container', _locateOrCreateElementContainerNode);\n if (localRefsIndex != null) {\n saveResolvedLocalsInData(lView, tNode);\n }\n return \u0275\u0275domElementContainerStart;\n}\nfunction \u0275\u0275domElementContainerEnd() {\n const initialTNode = getCurrentTNode();\n ngDevMode && assertDefined(initialTNode, 'No parent node to close.');\n const currentTNode = elementLikeEndShared(initialTNode);\n ngDevMode && assertTNodeType(currentTNode, 8);\n return \u0275\u0275elementContainerEnd;\n}\nfunction \u0275\u0275domElementContainer(index, attrsIndex, localRefsIndex) {\n \u0275\u0275domElementContainerStart(index, attrsIndex, localRefsIndex);\n \u0275\u0275domElementContainerEnd();\n return \u0275\u0275domElementContainer;\n}\nlet _locateOrCreateElementContainerNode = (tView, lView, tNode, commentText, index) => {\n lastNodeWasCreated(true);\n return createCommentNode(lView[RENDERER], ngDevMode ? commentText : '');\n};\nfunction locateOrCreateElementContainerNode(tView, lView, tNode, commentText, index) {\n let comment;\n const isNodeCreationMode = !canHydrateNode(lView, tNode);\n lastNodeWasCreated(isNodeCreationMode);\n if (isNodeCreationMode) {\n return createCommentNode(lView[RENDERER], ngDevMode ? commentText : '');\n }\n const hydrationInfo = lView[HYDRATION];\n const currentRNode = locateNextRNode(hydrationInfo, tView, lView, tNode);\n ngDevMode && validateNodeExists(currentRNode, lView, tNode);\n const ngContainerSize = getNgContainerSize(hydrationInfo, index);\n ngDevMode && assertNumber(ngContainerSize, 'Unexpected state: hydrating an , ' + 'but no hydration info is available.');\n setSegmentHead(hydrationInfo, index, currentRNode);\n comment = siblingAfter(ngContainerSize, currentRNode);\n if (ngDevMode) {\n validateMatchingNode(comment, Node.COMMENT_NODE, null, lView, tNode);\n markRNodeAsClaimedByHydration(comment);\n }\n return comment;\n}\nfunction enableLocateOrCreateElementContainerNodeImpl() {\n _locateOrCreateElementContainerNode = locateOrCreateElementContainerNode;\n}\nfunction \u0275\u0275getCurrentView() {\n return getLView();\n}\nfunction \u0275\u0275domProperty(propName, value, sanitizer) {\n const lView = getLView();\n const bindingIndex = nextBindingIndex();\n if (bindingUpdated(lView, bindingIndex, value)) {\n const tView = getTView();\n const tNode = getSelectedTNode();\n setDomProperty(tNode, lView, propName, value, lView[RENDERER], sanitizer);\n ngDevMode && storePropertyBindingMetadata(tView.data, tNode, propName, bindingIndex);\n }\n return \u0275\u0275domProperty;\n}\nfunction \u0275\u0275syntheticHostProperty(propName, value, sanitizer) {\n const lView = getLView();\n const bindingIndex = nextBindingIndex();\n if (bindingUpdated(lView, bindingIndex, value)) {\n const tView = getTView();\n const tNode = getSelectedTNode();\n const currentDef = getCurrentDirectiveDef(tView.data);\n const renderer = loadComponentRenderer(currentDef, tNode, lView);\n setDomProperty(tNode, lView, propName, value, renderer, sanitizer);\n ngDevMode && storePropertyBindingMetadata(tView.data, tNode, propName, bindingIndex);\n }\n return \u0275\u0275syntheticHostProperty;\n}\nconst u = undefined;\nfunction plural(val) {\n const i = Math.floor(Math.abs(val)),\n v = val.toString().replace(/^[^.]*\\.?/, '').length;\n if (i === 1 && v === 0) return 1;\n return 5;\n}\nvar localeEn = [\"en\", [[\"a\", \"p\"], [\"AM\", \"PM\"]], [[\"AM\", \"PM\"]], [[\"S\", \"M\", \"T\", \"W\", \"T\", \"F\", \"S\"], [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"], [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"], [\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]], u, [[\"J\", \"F\", \"M\", \"A\", \"M\", \"J\", \"J\", \"A\", \"S\", \"O\", \"N\", \"D\"], [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"], [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]], u, [[\"B\", \"A\"], [\"BC\", \"AD\"], [\"Before Christ\", \"Anno Domini\"]], 0, [6, 0], [\"M/d/yy\", \"MMM d, y\", \"MMMM d, y\", \"EEEE, MMMM d, y\"], [\"h:mm\u202Fa\", \"h:mm:ss\u202Fa\", \"h:mm:ss\u202Fa z\", \"h:mm:ss\u202Fa zzzz\"], [\"{1}, {0}\", u, u, u], [\".\", \",\", \";\", \"%\", \"+\", \"-\", \"E\", \"\xD7\", \"\u2030\", \"\u221E\", \"NaN\", \":\"], [\"#,##0.###\", \"#,##0%\", \"\xA4#,##0.00\", \"#E0\"], \"USD\", \"$\", \"US Dollar\", {}, \"ltr\", plural];\nlet LOCALE_DATA = {};\nfunction registerLocaleData(data, localeId, extraData) {\n if (typeof localeId !== 'string') {\n extraData = localeId;\n localeId = data[LocaleDataIndex.LocaleId];\n }\n localeId = localeId.toLowerCase().replace(/_/g, '-');\n LOCALE_DATA[localeId] = data;\n if (extraData) {\n LOCALE_DATA[localeId][LocaleDataIndex.ExtraData] = extraData;\n }\n}\nfunction findLocaleData(locale) {\n const normalizedLocale = normalizeLocale(locale);\n let match = getLocaleData(normalizedLocale);\n if (match) {\n return match;\n }\n const parentLocale = normalizedLocale.split('-')[0];\n match = getLocaleData(parentLocale);\n if (match) {\n return match;\n }\n if (parentLocale === 'en') {\n return localeEn;\n }\n throw new RuntimeError(701, ngDevMode && `Missing locale data for the locale \"${locale}\".`);\n}\nfunction getLocaleCurrencyCode(locale) {\n const data = findLocaleData(locale);\n return data[LocaleDataIndex.CurrencyCode] || null;\n}\nfunction getLocalePluralCase(locale) {\n const data = findLocaleData(locale);\n return data[LocaleDataIndex.PluralCase];\n}\nfunction getLocaleData(normalizedLocale) {\n if (!(normalizedLocale in LOCALE_DATA)) {\n LOCALE_DATA[normalizedLocale] = _global.ng && _global.ng.common && _global.ng.common.locales && _global.ng.common.locales[normalizedLocale];\n }\n return LOCALE_DATA[normalizedLocale];\n}\nfunction unregisterAllLocaleData() {\n LOCALE_DATA = {};\n}\nvar LocaleDataIndex = /*#__PURE__*/function (LocaleDataIndex) {\n LocaleDataIndex[LocaleDataIndex[\"LocaleId\"] = 0] = \"LocaleId\";\n LocaleDataIndex[LocaleDataIndex[\"DayPeriodsFormat\"] = 1] = \"DayPeriodsFormat\";\n LocaleDataIndex[LocaleDataIndex[\"DayPeriodsStandalone\"] = 2] = \"DayPeriodsStandalone\";\n LocaleDataIndex[LocaleDataIndex[\"DaysFormat\"] = 3] = \"DaysFormat\";\n LocaleDataIndex[LocaleDataIndex[\"DaysStandalone\"] = 4] = \"DaysStandalone\";\n LocaleDataIndex[LocaleDataIndex[\"MonthsFormat\"] = 5] = \"MonthsFormat\";\n LocaleDataIndex[LocaleDataIndex[\"MonthsStandalone\"] = 6] = \"MonthsStandalone\";\n LocaleDataIndex[LocaleDataIndex[\"Eras\"] = 7] = \"Eras\";\n LocaleDataIndex[LocaleDataIndex[\"FirstDayOfWeek\"] = 8] = \"FirstDayOfWeek\";\n LocaleDataIndex[LocaleDataIndex[\"WeekendRange\"] = 9] = \"WeekendRange\";\n LocaleDataIndex[LocaleDataIndex[\"DateFormat\"] = 10] = \"DateFormat\";\n LocaleDataIndex[LocaleDataIndex[\"TimeFormat\"] = 11] = \"TimeFormat\";\n LocaleDataIndex[LocaleDataIndex[\"DateTimeFormat\"] = 12] = \"DateTimeFormat\";\n LocaleDataIndex[LocaleDataIndex[\"NumberSymbols\"] = 13] = \"NumberSymbols\";\n LocaleDataIndex[LocaleDataIndex[\"NumberFormats\"] = 14] = \"NumberFormats\";\n LocaleDataIndex[LocaleDataIndex[\"CurrencyCode\"] = 15] = \"CurrencyCode\";\n LocaleDataIndex[LocaleDataIndex[\"CurrencySymbol\"] = 16] = \"CurrencySymbol\";\n LocaleDataIndex[LocaleDataIndex[\"CurrencyName\"] = 17] = \"CurrencyName\";\n LocaleDataIndex[LocaleDataIndex[\"Currencies\"] = 18] = \"Currencies\";\n LocaleDataIndex[LocaleDataIndex[\"Directionality\"] = 19] = \"Directionality\";\n LocaleDataIndex[LocaleDataIndex[\"PluralCase\"] = 20] = \"PluralCase\";\n LocaleDataIndex[LocaleDataIndex[\"ExtraData\"] = 21] = \"ExtraData\";\n return LocaleDataIndex;\n}(LocaleDataIndex || {});\nfunction normalizeLocale(locale) {\n return locale.toLowerCase().replace(/_/g, '-');\n}\nconst pluralMapping = ['zero', 'one', 'two', 'few', 'many'];\nfunction getPluralCase(value, locale) {\n const plural = getLocalePluralCase(locale)(parseInt(value, 10));\n const result = pluralMapping[plural];\n return result !== undefined ? result : 'other';\n}\nconst DEFAULT_LOCALE_ID = 'en-US';\nconst USD_CURRENCY_CODE = 'USD';\nconst ELEMENT_MARKER = {\n marker: 'element'\n};\nconst ICU_MARKER = {\n marker: 'ICU'\n};\nvar I18nCreateOpCode = /*#__PURE__*/function (I18nCreateOpCode) {\n I18nCreateOpCode[I18nCreateOpCode[\"SHIFT\"] = 2] = \"SHIFT\";\n I18nCreateOpCode[I18nCreateOpCode[\"APPEND_EAGERLY\"] = 1] = \"APPEND_EAGERLY\";\n I18nCreateOpCode[I18nCreateOpCode[\"COMMENT\"] = 2] = \"COMMENT\";\n return I18nCreateOpCode;\n}(I18nCreateOpCode || {});\nlet LOCALE_ID$1 = DEFAULT_LOCALE_ID;\nfunction setLocaleId(localeId) {\n ngDevMode && assertDefined(localeId, `Expected localeId to be defined`);\n if (typeof localeId === 'string') {\n LOCALE_ID$1 = localeId.toLowerCase().replace(/_/g, '-');\n }\n}\nfunction getLocaleId() {\n return LOCALE_ID$1;\n}\nlet changeMask = 0b0;\nlet changeMaskCounter = 0;\nfunction setMaskBit(hasChange) {\n if (hasChange) {\n changeMask = changeMask | 1 << Math.min(changeMaskCounter, 31);\n }\n changeMaskCounter++;\n}\nfunction applyI18n(tView, lView, index) {\n if (changeMaskCounter > 0) {\n ngDevMode && assertDefined(tView, `tView should be defined`);\n const tI18n = tView.data[index];\n const updateOpCodes = Array.isArray(tI18n) ? tI18n : tI18n.update;\n const bindingsStartIndex = getBindingIndex() - changeMaskCounter - 1;\n applyUpdateOpCodes(tView, lView, updateOpCodes, bindingsStartIndex, changeMask);\n }\n changeMask = 0b0;\n changeMaskCounter = 0;\n}\nfunction createNodeWithoutHydration(lView, textOrName, nodeType) {\n const renderer = lView[RENDERER];\n switch (nodeType) {\n case Node.COMMENT_NODE:\n return createCommentNode(renderer, textOrName);\n case Node.TEXT_NODE:\n return createTextNode(renderer, textOrName);\n case Node.ELEMENT_NODE:\n return createElementNode(renderer, textOrName, null);\n }\n}\nlet _locateOrCreateNode = (lView, index, textOrName, nodeType) => {\n lastNodeWasCreated(true);\n return createNodeWithoutHydration(lView, textOrName, nodeType);\n};\nfunction locateOrCreateNodeImpl(lView, index, textOrName, nodeType) {\n const hydrationInfo = lView[HYDRATION];\n const noOffsetIndex = index - HEADER_OFFSET;\n const isNodeCreationMode = !isI18nHydrationSupportEnabled() || !hydrationInfo || isInSkipHydrationBlock$1() || isDisconnectedNode$1(hydrationInfo, noOffsetIndex);\n lastNodeWasCreated(isNodeCreationMode);\n if (isNodeCreationMode) {\n return createNodeWithoutHydration(lView, textOrName, nodeType);\n }\n const native = locateI18nRNodeByIndex(hydrationInfo, noOffsetIndex);\n ngDevMode && assertDefined(native, 'expected native element');\n ngDevMode && assertEqual(native.nodeType, nodeType, 'expected matching nodeType');\n ngDevMode && nodeType === Node.ELEMENT_NODE && assertEqual(native.tagName.toLowerCase(), textOrName.toLowerCase(), 'expecting matching tagName');\n ngDevMode && markRNodeAsClaimedByHydration(native);\n return native;\n}\nfunction enableLocateOrCreateI18nNodeImpl() {\n _locateOrCreateNode = locateOrCreateNodeImpl;\n}\nfunction applyCreateOpCodes(lView, createOpCodes, parentRNode, insertInFrontOf) {\n const renderer = lView[RENDERER];\n for (let i = 0; i < createOpCodes.length; i++) {\n const opCode = createOpCodes[i++];\n const text = createOpCodes[i];\n const isComment = (opCode & I18nCreateOpCode.COMMENT) === I18nCreateOpCode.COMMENT;\n const appendNow = (opCode & I18nCreateOpCode.APPEND_EAGERLY) === I18nCreateOpCode.APPEND_EAGERLY;\n const index = opCode >>> I18nCreateOpCode.SHIFT;\n let rNode = lView[index];\n let lastNodeWasCreated = false;\n if (rNode === null) {\n rNode = lView[index] = _locateOrCreateNode(lView, index, text, isComment ? Node.COMMENT_NODE : Node.TEXT_NODE);\n lastNodeWasCreated = wasLastNodeCreated();\n }\n if (appendNow && parentRNode !== null && lastNodeWasCreated) {\n nativeInsertBefore(renderer, parentRNode, rNode, insertInFrontOf, false);\n }\n }\n}\nfunction applyMutableOpCodes(tView, mutableOpCodes, lView, anchorRNode) {\n ngDevMode && assertDomNode(anchorRNode);\n const renderer = lView[RENDERER];\n let rootIdx = null;\n let rootRNode;\n for (let i = 0; i < mutableOpCodes.length; i++) {\n const opCode = mutableOpCodes[i];\n if (typeof opCode == 'string') {\n const textNodeIndex = mutableOpCodes[++i];\n if (lView[textNodeIndex] === null) {\n ngDevMode && assertIndexInRange(lView, textNodeIndex);\n lView[textNodeIndex] = _locateOrCreateNode(lView, textNodeIndex, opCode, Node.TEXT_NODE);\n }\n } else if (typeof opCode == 'number') {\n switch (opCode & 1) {\n case 0:\n const parentIdx = getParentFromIcuCreateOpCode(opCode);\n if (rootIdx === null) {\n rootIdx = parentIdx;\n rootRNode = renderer.parentNode(anchorRNode);\n }\n let insertInFrontOf;\n let parentRNode;\n if (parentIdx === rootIdx) {\n insertInFrontOf = anchorRNode;\n parentRNode = rootRNode;\n } else {\n insertInFrontOf = null;\n parentRNode = unwrapRNode(lView[parentIdx]);\n }\n if (parentRNode !== null) {\n ngDevMode && assertDomNode(parentRNode);\n const refIdx = getRefFromIcuCreateOpCode(opCode);\n ngDevMode && assertGreaterThan(refIdx, HEADER_OFFSET, 'Missing ref');\n const child = lView[refIdx];\n ngDevMode && assertDomNode(child);\n nativeInsertBefore(renderer, parentRNode, child, insertInFrontOf, false);\n const tIcu = getTIcu(tView, refIdx);\n if (tIcu !== null && typeof tIcu === 'object') {\n ngDevMode && assertTIcu(tIcu);\n const caseIndex = getCurrentICUCaseIndex(tIcu, lView);\n if (caseIndex !== null) {\n applyMutableOpCodes(tView, tIcu.create[caseIndex], lView, lView[tIcu.anchorIdx]);\n }\n }\n }\n break;\n case 1:\n const elementNodeIndex = opCode >>> 1;\n const attrName = mutableOpCodes[++i];\n const attrValue = mutableOpCodes[++i];\n setElementAttribute(renderer, getNativeByIndex(elementNodeIndex, lView), null, null, attrName, attrValue, null);\n break;\n default:\n if (ngDevMode) {\n throw new RuntimeError(700, `Unable to determine the type of mutate operation for \"${opCode}\"`);\n }\n }\n } else {\n switch (opCode) {\n case ICU_MARKER:\n const commentValue = mutableOpCodes[++i];\n const commentNodeIndex = mutableOpCodes[++i];\n if (lView[commentNodeIndex] === null) {\n ngDevMode && assertEqual(typeof commentValue, 'string', `Expected \"${commentValue}\" to be a comment node value`);\n ngDevMode && assertIndexInExpandoRange(lView, commentNodeIndex);\n const commentRNode = lView[commentNodeIndex] = _locateOrCreateNode(lView, commentNodeIndex, commentValue, Node.COMMENT_NODE);\n attachPatchData(commentRNode, lView);\n }\n break;\n case ELEMENT_MARKER:\n const tagName = mutableOpCodes[++i];\n const elementNodeIndex = mutableOpCodes[++i];\n if (lView[elementNodeIndex] === null) {\n ngDevMode && assertEqual(typeof tagName, 'string', `Expected \"${tagName}\" to be an element node tag name`);\n ngDevMode && assertIndexInExpandoRange(lView, elementNodeIndex);\n const elementRNode = lView[elementNodeIndex] = _locateOrCreateNode(lView, elementNodeIndex, tagName, Node.ELEMENT_NODE);\n attachPatchData(elementRNode, lView);\n }\n break;\n default:\n ngDevMode && throwError(`Unable to determine the type of mutate operation for \"${opCode}\"`);\n }\n }\n }\n}\nfunction applyUpdateOpCodes(tView, lView, updateOpCodes, bindingsStartIndex, changeMask) {\n for (let i = 0; i < updateOpCodes.length; i++) {\n const checkBit = updateOpCodes[i];\n const skipCodes = updateOpCodes[++i];\n if (checkBit & changeMask) {\n let value = '';\n for (let j = i + 1; j <= i + skipCodes; j++) {\n const opCode = updateOpCodes[j];\n if (typeof opCode == 'string') {\n value += opCode;\n } else if (typeof opCode == 'number') {\n if (opCode < 0) {\n value += renderStringify(lView[bindingsStartIndex - opCode]);\n } else {\n const nodeIndex = opCode >>> 2;\n switch (opCode & 3) {\n case 1:\n const propName = updateOpCodes[++j];\n const sanitizeFn = updateOpCodes[++j];\n const tNodeOrTagName = tView.data[nodeIndex];\n ngDevMode && assertDefined(tNodeOrTagName, 'Experting TNode or string');\n if (typeof tNodeOrTagName === 'string') {\n setElementAttribute(lView[RENDERER], lView[nodeIndex], null, tNodeOrTagName, propName, value, sanitizeFn);\n } else {\n setPropertyAndInputs(tNodeOrTagName, lView, propName, value, lView[RENDERER], sanitizeFn);\n }\n break;\n case 0:\n const rText = lView[nodeIndex];\n rText !== null && updateTextNode(lView[RENDERER], rText, value);\n break;\n case 2:\n applyIcuSwitchCase(tView, getTIcu(tView, nodeIndex), lView, value);\n break;\n case 3:\n applyIcuUpdateCase(tView, getTIcu(tView, nodeIndex), bindingsStartIndex, lView);\n break;\n }\n }\n }\n }\n } else {\n const opCode = updateOpCodes[i + 1];\n if (opCode > 0 && (opCode & 3) === 3) {\n const nodeIndex = opCode >>> 2;\n const tIcu = getTIcu(tView, nodeIndex);\n const currentIndex = lView[tIcu.currentCaseLViewIndex];\n if (currentIndex < 0) {\n applyIcuUpdateCase(tView, tIcu, bindingsStartIndex, lView);\n }\n }\n }\n i += skipCodes;\n }\n}\nfunction applyIcuUpdateCase(tView, tIcu, bindingsStartIndex, lView) {\n ngDevMode && assertIndexInRange(lView, tIcu.currentCaseLViewIndex);\n let activeCaseIndex = lView[tIcu.currentCaseLViewIndex];\n if (activeCaseIndex !== null) {\n let mask = changeMask;\n if (activeCaseIndex < 0) {\n activeCaseIndex = lView[tIcu.currentCaseLViewIndex] = ~activeCaseIndex;\n mask = -1;\n }\n applyUpdateOpCodes(tView, lView, tIcu.update[activeCaseIndex], bindingsStartIndex, mask);\n }\n}\nfunction applyIcuSwitchCase(tView, tIcu, lView, value) {\n const caseIndex = getCaseIndex(tIcu, value);\n let activeCaseIndex = getCurrentICUCaseIndex(tIcu, lView);\n if (activeCaseIndex !== caseIndex) {\n applyIcuSwitchCaseRemove(tView, tIcu, lView);\n lView[tIcu.currentCaseLViewIndex] = caseIndex === null ? null : ~caseIndex;\n if (caseIndex !== null) {\n const anchorRNode = lView[tIcu.anchorIdx];\n if (anchorRNode) {\n ngDevMode && assertDomNode(anchorRNode);\n applyMutableOpCodes(tView, tIcu.create[caseIndex], lView, anchorRNode);\n }\n claimDehydratedIcuCase(lView, tIcu.anchorIdx, caseIndex);\n }\n }\n}\nfunction applyIcuSwitchCaseRemove(tView, tIcu, lView) {\n let activeCaseIndex = getCurrentICUCaseIndex(tIcu, lView);\n if (activeCaseIndex !== null) {\n const removeCodes = tIcu.remove[activeCaseIndex];\n for (let i = 0; i < removeCodes.length; i++) {\n const nodeOrIcuIndex = removeCodes[i];\n if (nodeOrIcuIndex > 0) {\n const rNode = getNativeByIndex(nodeOrIcuIndex, lView);\n rNode !== null && nativeRemoveNode(lView[RENDERER], rNode);\n } else {\n applyIcuSwitchCaseRemove(tView, getTIcu(tView, ~nodeOrIcuIndex), lView);\n }\n }\n }\n}\nfunction getCaseIndex(icuExpression, bindingValue) {\n let index = icuExpression.cases.indexOf(bindingValue);\n if (index === -1) {\n switch (icuExpression.type) {\n case 1:\n {\n const resolvedCase = getPluralCase(bindingValue, getLocaleId());\n index = icuExpression.cases.indexOf(resolvedCase);\n if (index === -1 && resolvedCase !== 'other') {\n index = icuExpression.cases.indexOf('other');\n }\n break;\n }\n case 0:\n {\n index = icuExpression.cases.indexOf('other');\n break;\n }\n }\n }\n return index === -1 ? null : index;\n}\nfunction i18nCreateOpCodesToString(opcodes) {\n const createOpCodes = opcodes || (Array.isArray(this) ? this : []);\n let lines = [];\n for (let i = 0; i < createOpCodes.length; i++) {\n const opCode = createOpCodes[i++];\n const text = createOpCodes[i];\n const isComment = (opCode & I18nCreateOpCode.COMMENT) === I18nCreateOpCode.COMMENT;\n const appendNow = (opCode & I18nCreateOpCode.APPEND_EAGERLY) === I18nCreateOpCode.APPEND_EAGERLY;\n const index = opCode >>> I18nCreateOpCode.SHIFT;\n lines.push(`lView[${index}] = document.${isComment ? 'createComment' : 'createText'}(${JSON.stringify(text)});`);\n if (appendNow) {\n lines.push(`parent.appendChild(lView[${index}]);`);\n }\n }\n return lines;\n}\nfunction i18nUpdateOpCodesToString(opcodes) {\n const parser = new OpCodeParser(opcodes || (Array.isArray(this) ? this : []));\n let lines = [];\n function consumeOpCode(value) {\n const ref = value >>> 2;\n const opCode = value & 3;\n switch (opCode) {\n case 0:\n return `(lView[${ref}] as Text).textContent = $$$`;\n case 1:\n const attrName = parser.consumeString();\n const sanitizationFn = parser.consumeFunction();\n const value = sanitizationFn ? `(${sanitizationFn})($$$)` : '$$$';\n return `(lView[${ref}] as Element).setAttribute('${attrName}', ${value})`;\n case 2:\n return `icuSwitchCase(${ref}, $$$)`;\n case 3:\n return `icuUpdateCase(${ref})`;\n }\n throw new Error('unexpected OpCode');\n }\n while (parser.hasMore()) {\n let mask = parser.consumeNumber();\n let size = parser.consumeNumber();\n const end = parser.i + size;\n const statements = [];\n let statement = '';\n while (parser.i < end) {\n let value = parser.consumeNumberOrString();\n if (typeof value === 'string') {\n statement += value;\n } else if (value < 0) {\n statement += '${lView[i' + value + ']}';\n } else {\n const opCodeText = consumeOpCode(value);\n statements.push(opCodeText.replace('$$$', '`' + statement + '`') + ';');\n statement = '';\n }\n }\n lines.push(`if (mask & 0b${mask.toString(2)}) { ${statements.join(' ')} }`);\n }\n return lines;\n}\nfunction icuCreateOpCodesToString(opcodes) {\n const parser = new OpCodeParser(opcodes || (Array.isArray(this) ? this : []));\n let lines = [];\n function consumeOpCode(opCode) {\n const parent = getParentFromIcuCreateOpCode(opCode);\n const ref = getRefFromIcuCreateOpCode(opCode);\n switch (getInstructionFromIcuCreateOpCode(opCode)) {\n case 0:\n return `(lView[${parent}] as Element).appendChild(lView[${lastRef}])`;\n case 1:\n return `(lView[${ref}] as Element).setAttribute(\"${parser.consumeString()}\", \"${parser.consumeString()}\")`;\n }\n throw new Error('Unexpected OpCode: ' + getInstructionFromIcuCreateOpCode(opCode));\n }\n let lastRef = -1;\n while (parser.hasMore()) {\n let value = parser.consumeNumberStringOrMarker();\n if (value === ICU_MARKER) {\n const text = parser.consumeString();\n lastRef = parser.consumeNumber();\n lines.push(`lView[${lastRef}] = document.createComment(\"${text}\")`);\n } else if (value === ELEMENT_MARKER) {\n const text = parser.consumeString();\n lastRef = parser.consumeNumber();\n lines.push(`lView[${lastRef}] = document.createElement(\"${text}\")`);\n } else if (typeof value === 'string') {\n lastRef = parser.consumeNumber();\n lines.push(`lView[${lastRef}] = document.createTextNode(\"${value}\")`);\n } else if (typeof value === 'number') {\n const line = consumeOpCode(value);\n line && lines.push(line);\n } else {\n throw new Error('Unexpected value');\n }\n }\n return lines;\n}\nfunction i18nRemoveOpCodesToString(opcodes) {\n const removeCodes = opcodes || (Array.isArray(this) ? this : []);\n let lines = [];\n for (let i = 0; i < removeCodes.length; i++) {\n const nodeOrIcuIndex = removeCodes[i];\n if (nodeOrIcuIndex > 0) {\n lines.push(`remove(lView[${nodeOrIcuIndex}])`);\n } else {\n lines.push(`removeNestedICU(${~nodeOrIcuIndex})`);\n }\n }\n return lines;\n}\nclass OpCodeParser {\n i = 0;\n codes;\n constructor(codes) {\n this.codes = codes;\n }\n hasMore() {\n return this.i < this.codes.length;\n }\n consumeNumber() {\n let value = this.codes[this.i++];\n assertNumber(value, 'expecting number in OpCode');\n return value;\n }\n consumeString() {\n let value = this.codes[this.i++];\n assertString(value, 'expecting string in OpCode');\n return value;\n }\n consumeFunction() {\n let value = this.codes[this.i++];\n if (value === null || typeof value === 'function') {\n return value;\n }\n throw new Error('expecting function in OpCode');\n }\n consumeNumberOrString() {\n let value = this.codes[this.i++];\n if (typeof value === 'string') {\n return value;\n }\n assertNumber(value, 'expecting number or string in OpCode');\n return value;\n }\n consumeNumberStringOrMarker() {\n let value = this.codes[this.i++];\n if (typeof value === 'string' || typeof value === 'number' || value == ICU_MARKER || value == ELEMENT_MARKER) {\n return value;\n }\n assertNumber(value, 'expecting number, string, ICU_MARKER or ELEMENT_MARKER in OpCode');\n return value;\n }\n}\nconst BINDING_REGEXP = /\uFFFD(\\d+):?\\d*\uFFFD/gi;\nconst ICU_REGEXP = /({\\s*\uFFFD\\d+:?\\d*\uFFFD\\s*,\\s*\\S{6}\\s*,[\\s\\S]*})/gi;\nconst NESTED_ICU = /\uFFFD(\\d+)\uFFFD/;\nconst ICU_BLOCK_REGEXP = /^\\s*(\uFFFD\\d+:?\\d*\uFFFD)\\s*,\\s*(select|plural)\\s*,/;\nconst MARKER = `\uFFFD`;\nconst SUBTEMPLATE_REGEXP = /\uFFFD\\/?\\*(\\d+:\\d+)\uFFFD/gi;\nconst PH_REGEXP = /\uFFFD(\\/?[#*]\\d+):?\\d*\uFFFD/gi;\nconst NGSP_UNICODE_REGEXP = /\\uE500/g;\nfunction replaceNgsp(value) {\n return value.replace(NGSP_UNICODE_REGEXP, ' ');\n}\nfunction attachDebugGetter(obj, debugGetter) {\n if (ngDevMode) {\n Object.defineProperty(obj, 'debug', {\n get: debugGetter,\n enumerable: false\n });\n } else {\n throw new Error('This method should be guarded with `ngDevMode` so that it can be tree shaken in production!');\n }\n}\nfunction i18nStartFirstCreatePass(tView, parentTNodeIndex, lView, index, message, subTemplateIndex) {\n const rootTNode = getCurrentParentTNode();\n const createOpCodes = [];\n const updateOpCodes = [];\n const existingTNodeStack = [[]];\n const astStack = [[]];\n if (ngDevMode) {\n attachDebugGetter(createOpCodes, i18nCreateOpCodesToString);\n attachDebugGetter(updateOpCodes, i18nUpdateOpCodesToString);\n }\n message = getTranslationForTemplate(message, subTemplateIndex);\n const msgParts = replaceNgsp(message).split(PH_REGEXP);\n for (let i = 0; i < msgParts.length; i++) {\n let value = msgParts[i];\n if ((i & 1) === 0) {\n const parts = i18nParseTextIntoPartsAndICU(value);\n for (let j = 0; j < parts.length; j++) {\n let part = parts[j];\n if ((j & 1) === 0) {\n const text = part;\n ngDevMode && assertString(text, 'Parsed ICU part should be string');\n if (text !== '') {\n i18nStartFirstCreatePassProcessTextNode(astStack[0], tView, rootTNode, existingTNodeStack[0], createOpCodes, updateOpCodes, lView, text);\n }\n } else {\n const icuExpression = part;\n if (typeof icuExpression !== 'object') {\n throw new Error(`Unable to parse ICU expression in \"${message}\" message.`);\n }\n const icuContainerTNode = createTNodeAndAddOpCode(tView, rootTNode, existingTNodeStack[0], lView, createOpCodes, ngDevMode ? `ICU ${index}:${icuExpression.mainBinding}` : '', true);\n const icuNodeIndex = icuContainerTNode.index;\n ngDevMode && assertGreaterThanOrEqual(icuNodeIndex, HEADER_OFFSET, 'Index must be in absolute LView offset');\n icuStart(astStack[0], tView, lView, updateOpCodes, parentTNodeIndex, icuExpression, icuNodeIndex);\n }\n }\n } else {\n const isClosing = value.charCodeAt(0) === 47;\n const type = value.charCodeAt(isClosing ? 1 : 0);\n ngDevMode && assertOneOf(type, 42, 35);\n const index = HEADER_OFFSET + Number.parseInt(value.substring(isClosing ? 2 : 1));\n if (isClosing) {\n existingTNodeStack.shift();\n astStack.shift();\n setCurrentTNode(getCurrentParentTNode(), false);\n } else {\n const tNode = createTNodePlaceholder(tView, existingTNodeStack[0], index);\n existingTNodeStack.unshift([]);\n setCurrentTNode(tNode, true);\n const placeholderNode = {\n kind: 2,\n index,\n children: [],\n type: type === 35 ? 0 : 1\n };\n astStack[0].push(placeholderNode);\n astStack.unshift(placeholderNode.children);\n }\n }\n }\n tView.data[index] = {\n create: createOpCodes,\n update: updateOpCodes,\n ast: astStack[0],\n parentTNodeIndex\n };\n}\nfunction createTNodeAndAddOpCode(tView, rootTNode, existingTNodes, lView, createOpCodes, text, isICU) {\n const i18nNodeIdx = allocExpando(tView, lView, 1, null);\n let opCode = i18nNodeIdx << I18nCreateOpCode.SHIFT;\n let parentTNode = getCurrentParentTNode();\n if (rootTNode === parentTNode) {\n parentTNode = null;\n }\n if (parentTNode === null) {\n opCode |= I18nCreateOpCode.APPEND_EAGERLY;\n }\n if (isICU) {\n opCode |= I18nCreateOpCode.COMMENT;\n ensureIcuContainerVisitorLoaded(loadIcuContainerVisitor);\n }\n createOpCodes.push(opCode, text === null ? '' : text);\n const tNode = createTNodeAtIndex(tView, i18nNodeIdx, isICU ? 32 : 1, text === null ? ngDevMode ? '{{?}}' : '' : text, null);\n addTNodeAndUpdateInsertBeforeIndex(existingTNodes, tNode);\n const tNodeIdx = tNode.index;\n setCurrentTNode(tNode, false);\n if (parentTNode !== null && rootTNode !== parentTNode) {\n setTNodeInsertBeforeIndex(parentTNode, tNodeIdx);\n }\n return tNode;\n}\nfunction i18nStartFirstCreatePassProcessTextNode(ast, tView, rootTNode, existingTNodes, createOpCodes, updateOpCodes, lView, text) {\n const hasBinding = text.match(BINDING_REGEXP);\n const tNode = createTNodeAndAddOpCode(tView, rootTNode, existingTNodes, lView, createOpCodes, hasBinding ? null : text, false);\n const index = tNode.index;\n if (hasBinding) {\n generateBindingUpdateOpCodes(updateOpCodes, text, index, null, 0, null);\n }\n ast.push({\n kind: 0,\n index\n });\n}\nfunction i18nAttributesFirstPass(tView, index, values) {\n const previousElement = getCurrentTNode();\n const previousElementIndex = previousElement.index;\n const updateOpCodes = [];\n if (ngDevMode) {\n attachDebugGetter(updateOpCodes, i18nUpdateOpCodesToString);\n }\n if (tView.firstCreatePass && tView.data[index] === null) {\n for (let i = 0; i < values.length; i += 2) {\n const attrName = values[i];\n const message = values[i + 1];\n if (message !== '') {\n if (ICU_REGEXP.test(message)) {\n throw new Error(`ICU expressions are not supported in attributes. Message: \"${message}\".`);\n }\n generateBindingUpdateOpCodes(updateOpCodes, message, previousElementIndex, attrName, countBindings(updateOpCodes), SENSITIVE_ATTRS[attrName.toLowerCase()] ? _sanitizeUrl : null);\n }\n }\n tView.data[index] = updateOpCodes;\n }\n}\nfunction generateBindingUpdateOpCodes(updateOpCodes, str, destinationNode, attrName, bindingStart, sanitizeFn) {\n ngDevMode && assertGreaterThanOrEqual(destinationNode, HEADER_OFFSET, 'Index must be in absolute LView offset');\n const maskIndex = updateOpCodes.length;\n const sizeIndex = maskIndex + 1;\n updateOpCodes.push(null, null);\n const startIndex = maskIndex + 2;\n if (ngDevMode) {\n attachDebugGetter(updateOpCodes, i18nUpdateOpCodesToString);\n }\n const textParts = str.split(BINDING_REGEXP);\n let mask = 0;\n for (let j = 0; j < textParts.length; j++) {\n const textValue = textParts[j];\n if (j & 1) {\n const bindingIndex = bindingStart + parseInt(textValue, 10);\n updateOpCodes.push(-1 - bindingIndex);\n mask = mask | toMaskBit(bindingIndex);\n } else if (textValue !== '') {\n updateOpCodes.push(textValue);\n }\n }\n updateOpCodes.push(destinationNode << 2 | (attrName ? 1 : 0));\n if (attrName) {\n updateOpCodes.push(attrName, sanitizeFn);\n }\n updateOpCodes[maskIndex] = mask;\n updateOpCodes[sizeIndex] = updateOpCodes.length - startIndex;\n return mask;\n}\nfunction countBindings(opCodes) {\n let count = 0;\n for (let i = 0; i < opCodes.length; i++) {\n const opCode = opCodes[i];\n if (typeof opCode === 'number' && opCode < 0) {\n count++;\n }\n }\n return count;\n}\nfunction toMaskBit(bindingIndex) {\n return 1 << Math.min(bindingIndex, 31);\n}\nfunction removeInnerTemplateTranslation(message) {\n let match;\n let res = '';\n let index = 0;\n let inTemplate = false;\n let tagMatched;\n while ((match = SUBTEMPLATE_REGEXP.exec(message)) !== null) {\n if (!inTemplate) {\n res += message.substring(index, match.index + match[0].length);\n tagMatched = match[1];\n inTemplate = true;\n } else {\n if (match[0] === `${MARKER}/*${tagMatched}${MARKER}`) {\n index = match.index;\n inTemplate = false;\n }\n }\n }\n ngDevMode && assertEqual(inTemplate, false, `Tag mismatch: unable to find the end of the sub-template in the translation \"${message}\"`);\n res += message.slice(index);\n return res;\n}\nfunction getTranslationForTemplate(message, subTemplateIndex) {\n if (isRootTemplateMessage(subTemplateIndex)) {\n return removeInnerTemplateTranslation(message);\n } else {\n const start = message.indexOf(`:${subTemplateIndex}${MARKER}`) + 2 + subTemplateIndex.toString().length;\n const end = message.search(new RegExp(`${MARKER}\\\\/\\\\*\\\\d+:${subTemplateIndex}${MARKER}`));\n return removeInnerTemplateTranslation(message.substring(start, end));\n }\n}\nfunction icuStart(ast, tView, lView, updateOpCodes, parentIdx, icuExpression, anchorIdx) {\n ngDevMode && assertDefined(icuExpression, 'ICU expression must be defined');\n let bindingMask = 0;\n const tIcu = {\n type: icuExpression.type,\n currentCaseLViewIndex: allocExpando(tView, lView, 1, null),\n anchorIdx,\n cases: [],\n create: [],\n remove: [],\n update: []\n };\n addUpdateIcuSwitch(updateOpCodes, icuExpression, anchorIdx);\n setTIcu(tView, anchorIdx, tIcu);\n const values = icuExpression.values;\n const cases = [];\n for (let i = 0; i < values.length; i++) {\n const valueArr = values[i];\n const nestedIcus = [];\n for (let j = 0; j < valueArr.length; j++) {\n const value = valueArr[j];\n if (typeof value !== 'string') {\n const icuIndex = nestedIcus.push(value) - 1;\n valueArr[j] = ``;\n }\n }\n const caseAst = [];\n cases.push(caseAst);\n bindingMask = parseIcuCase(caseAst, tView, tIcu, lView, updateOpCodes, parentIdx, icuExpression.cases[i], valueArr.join(''), nestedIcus) | bindingMask;\n }\n if (bindingMask) {\n addUpdateIcuUpdate(updateOpCodes, bindingMask, anchorIdx);\n }\n ast.push({\n kind: 3,\n index: anchorIdx,\n cases,\n currentCaseLViewIndex: tIcu.currentCaseLViewIndex\n });\n}\nfunction parseICUBlock(pattern) {\n const cases = [];\n const values = [];\n let icuType = 1;\n let mainBinding = 0;\n pattern = pattern.replace(ICU_BLOCK_REGEXP, function (str, binding, type) {\n if (type === 'select') {\n icuType = 0;\n } else {\n icuType = 1;\n }\n mainBinding = parseInt(binding.slice(1), 10);\n return '';\n });\n const parts = i18nParseTextIntoPartsAndICU(pattern);\n for (let pos = 0; pos < parts.length;) {\n let key = parts[pos++].trim();\n if (icuType === 1) {\n key = key.replace(/\\s*(?:=)?(\\w+)\\s*/, '$1');\n }\n if (key.length) {\n cases.push(key);\n }\n const blocks = i18nParseTextIntoPartsAndICU(parts[pos++]);\n if (cases.length > values.length) {\n values.push(blocks);\n }\n }\n return {\n type: icuType,\n mainBinding: mainBinding,\n cases,\n values\n };\n}\nfunction i18nParseTextIntoPartsAndICU(pattern) {\n if (!pattern) {\n return [];\n }\n let prevPos = 0;\n const braceStack = [];\n const results = [];\n const braces = /[{}]/g;\n braces.lastIndex = 0;\n let match;\n while (match = braces.exec(pattern)) {\n const pos = match.index;\n if (match[0] == '}') {\n braceStack.pop();\n if (braceStack.length == 0) {\n const block = pattern.substring(prevPos, pos);\n if (ICU_BLOCK_REGEXP.test(block)) {\n results.push(parseICUBlock(block));\n } else {\n results.push(block);\n }\n prevPos = pos + 1;\n }\n } else {\n if (braceStack.length == 0) {\n const substring = pattern.substring(prevPos, pos);\n results.push(substring);\n prevPos = pos + 1;\n }\n braceStack.push('{');\n }\n }\n const substring = pattern.substring(prevPos);\n results.push(substring);\n return results;\n}\nfunction parseIcuCase(ast, tView, tIcu, lView, updateOpCodes, parentIdx, caseName, unsafeCaseHtml, nestedIcus) {\n const create = [];\n const remove = [];\n const update = [];\n if (ngDevMode) {\n attachDebugGetter(create, icuCreateOpCodesToString);\n attachDebugGetter(remove, i18nRemoveOpCodesToString);\n attachDebugGetter(update, i18nUpdateOpCodesToString);\n }\n tIcu.cases.push(caseName);\n tIcu.create.push(create);\n tIcu.remove.push(remove);\n tIcu.update.push(update);\n const inertBodyHelper = getInertBodyHelper(getDocument());\n const inertBodyElement = inertBodyHelper.getInertBodyElement(unsafeCaseHtml);\n ngDevMode && assertDefined(inertBodyElement, 'Unable to generate inert body element');\n const inertRootNode = getTemplateContent(inertBodyElement) || inertBodyElement;\n if (inertRootNode) {\n return walkIcuTree(ast, tView, tIcu, lView, updateOpCodes, create, remove, update, inertRootNode, parentIdx, nestedIcus, 0);\n } else {\n return 0;\n }\n}\nfunction walkIcuTree(ast, tView, tIcu, lView, sharedUpdateOpCodes, create, remove, update, parentNode, parentIdx, nestedIcus, depth) {\n let bindingMask = 0;\n let currentNode = parentNode.firstChild;\n while (currentNode) {\n const newIndex = allocExpando(tView, lView, 1, null);\n switch (currentNode.nodeType) {\n case Node.ELEMENT_NODE:\n const element = currentNode;\n const tagName = element.tagName.toLowerCase();\n if (VALID_ELEMENTS.hasOwnProperty(tagName)) {\n addCreateNodeAndAppend(create, ELEMENT_MARKER, tagName, parentIdx, newIndex);\n tView.data[newIndex] = tagName;\n const elAttrs = element.attributes;\n for (let i = 0; i < elAttrs.length; i++) {\n const attr = elAttrs.item(i);\n const lowerAttrName = attr.name.toLowerCase();\n const hasBinding = !!attr.value.match(BINDING_REGEXP);\n if (hasBinding) {\n if (VALID_ATTRS.hasOwnProperty(lowerAttrName)) {\n generateBindingUpdateOpCodes(update, attr.value, newIndex, attr.name, 0, SENSITIVE_ATTRS[lowerAttrName] ? _sanitizeUrl : null);\n } else {\n ngDevMode && console.warn(`WARNING: ignoring unsafe attribute value ` + `${lowerAttrName} on element ${tagName} ` + `(see ${XSS_SECURITY_URL})`);\n }\n } else if (VALID_ATTRS[lowerAttrName]) {\n if (SENSITIVE_ATTRS[lowerAttrName]) {\n if (typeof ngDevMode !== 'undefined' && ngDevMode) {\n console.warn(`WARNING: ignoring unsafe attribute ` + `${lowerAttrName} on element ${tagName} ` + `(see ${XSS_SECURITY_URL})`);\n }\n addCreateAttribute(create, newIndex, attr.name, 'unsafe:blocked');\n } else {\n addCreateAttribute(create, newIndex, attr.name, attr.value);\n }\n } else {\n if (typeof ngDevMode !== 'undefined' && ngDevMode) {\n console.warn(`WARNING: ignoring unknown attribute name ` + `${lowerAttrName} on element ${tagName} ` + `(see ${XSS_SECURITY_URL})`);\n }\n }\n }\n const elementNode = {\n kind: 1,\n index: newIndex,\n children: []\n };\n ast.push(elementNode);\n bindingMask = walkIcuTree(elementNode.children, tView, tIcu, lView, sharedUpdateOpCodes, create, remove, update, currentNode, newIndex, nestedIcus, depth + 1) | bindingMask;\n addRemoveNode(remove, newIndex, depth);\n }\n break;\n case Node.TEXT_NODE:\n const value = currentNode.textContent || '';\n const hasBinding = value.match(BINDING_REGEXP);\n addCreateNodeAndAppend(create, null, hasBinding ? '' : value, parentIdx, newIndex);\n addRemoveNode(remove, newIndex, depth);\n if (hasBinding) {\n bindingMask = generateBindingUpdateOpCodes(update, value, newIndex, null, 0, null) | bindingMask;\n }\n ast.push({\n kind: 0,\n index: newIndex\n });\n break;\n case Node.COMMENT_NODE:\n const isNestedIcu = NESTED_ICU.exec(currentNode.textContent || '');\n if (isNestedIcu) {\n const nestedIcuIndex = parseInt(isNestedIcu[1], 10);\n const icuExpression = nestedIcus[nestedIcuIndex];\n addCreateNodeAndAppend(create, ICU_MARKER, ngDevMode ? `nested ICU ${nestedIcuIndex}` : '', parentIdx, newIndex);\n icuStart(ast, tView, lView, sharedUpdateOpCodes, parentIdx, icuExpression, newIndex);\n addRemoveNestedIcu(remove, newIndex, depth);\n }\n break;\n }\n currentNode = currentNode.nextSibling;\n }\n return bindingMask;\n}\nfunction addRemoveNode(remove, index, depth) {\n if (depth === 0) {\n remove.push(index);\n }\n}\nfunction addRemoveNestedIcu(remove, index, depth) {\n if (depth === 0) {\n remove.push(~index);\n remove.push(index);\n }\n}\nfunction addUpdateIcuSwitch(update, icuExpression, index) {\n update.push(toMaskBit(icuExpression.mainBinding), 2, -1 - icuExpression.mainBinding, index << 2 | 2);\n}\nfunction addUpdateIcuUpdate(update, bindingMask, index) {\n update.push(bindingMask, 1, index << 2 | 3);\n}\nfunction addCreateNodeAndAppend(create, marker, text, appendToParentIdx, createAtIdx) {\n if (marker !== null) {\n create.push(marker);\n }\n create.push(text, createAtIdx, icuCreateOpCode(0, appendToParentIdx, createAtIdx));\n}\nfunction addCreateAttribute(create, newIndex, attrName, attrValue) {\n create.push(newIndex << 1 | 1, attrName, attrValue);\n}\nconst ROOT_TEMPLATE_ID = 0;\nconst PP_MULTI_VALUE_PLACEHOLDERS_REGEXP = /\\[(\uFFFD.+?\uFFFD?)\\]/;\nconst PP_PLACEHOLDERS_REGEXP = /\\[(\uFFFD.+?\uFFFD?)\\]|(\uFFFD\\/?\\*\\d+:\\d+\uFFFD)/g;\nconst PP_ICU_VARS_REGEXP = /({\\s*)(VAR_(PLURAL|SELECT)(_\\d+)?)(\\s*,)/g;\nconst PP_ICU_PLACEHOLDERS_REGEXP = /{([A-Z0-9_]+)}/g;\nconst PP_ICUS_REGEXP = /\uFFFDI18N_EXP_(ICU(_\\d+)?)\uFFFD/g;\nconst PP_CLOSE_TEMPLATE_REGEXP = /\\/\\*/;\nconst PP_TEMPLATE_ID_REGEXP = /\\d+\\:(\\d+)/;\nfunction i18nPostprocess(message, replacements = {}) {\n let result = message;\n if (PP_MULTI_VALUE_PLACEHOLDERS_REGEXP.test(message)) {\n const matches = {};\n const templateIdsStack = [ROOT_TEMPLATE_ID];\n result = result.replace(PP_PLACEHOLDERS_REGEXP, (m, phs, tmpl) => {\n const content = phs || tmpl;\n const placeholders = matches[content] || [];\n if (!placeholders.length) {\n content.split('|').forEach(placeholder => {\n const match = placeholder.match(PP_TEMPLATE_ID_REGEXP);\n const templateId = match ? parseInt(match[1], 10) : ROOT_TEMPLATE_ID;\n const isCloseTemplateTag = PP_CLOSE_TEMPLATE_REGEXP.test(placeholder);\n placeholders.push([templateId, isCloseTemplateTag, placeholder]);\n });\n matches[content] = placeholders;\n }\n if (!placeholders.length) {\n throw new Error(`i18n postprocess: unmatched placeholder - ${content}`);\n }\n const currentTemplateId = templateIdsStack[templateIdsStack.length - 1];\n let idx = 0;\n for (let i = 0; i < placeholders.length; i++) {\n if (placeholders[i][0] === currentTemplateId) {\n idx = i;\n break;\n }\n }\n const [templateId, isCloseTemplateTag, placeholder] = placeholders[idx];\n if (isCloseTemplateTag) {\n templateIdsStack.pop();\n } else if (currentTemplateId !== templateId) {\n templateIdsStack.push(templateId);\n }\n placeholders.splice(idx, 1);\n return placeholder;\n });\n }\n if (!Object.keys(replacements).length) {\n return result;\n }\n result = result.replace(PP_ICU_VARS_REGEXP, (match, start, key, _type, _idx, end) => {\n return replacements.hasOwnProperty(key) ? `${start}${replacements[key]}${end}` : match;\n });\n result = result.replace(PP_ICU_PLACEHOLDERS_REGEXP, (match, key) => {\n return replacements.hasOwnProperty(key) ? replacements[key] : match;\n });\n result = result.replace(PP_ICUS_REGEXP, (match, key) => {\n if (replacements.hasOwnProperty(key)) {\n const list = replacements[key];\n if (!list.length) {\n throw new Error(`i18n postprocess: unmatched ICU - ${match} with key: ${key}`);\n }\n return list.shift();\n }\n return match;\n });\n return result;\n}\nfunction \u0275\u0275i18nStart(index, messageIndex, subTemplateIndex = -1) {\n const tView = getTView();\n const lView = getLView();\n const adjustedIndex = HEADER_OFFSET + index;\n ngDevMode && assertDefined(tView, `tView should be defined`);\n const message = getConstant(tView.consts, messageIndex);\n const parentTNode = getCurrentParentTNode();\n if (tView.firstCreatePass) {\n i18nStartFirstCreatePass(tView, parentTNode === null ? 0 : parentTNode.index, lView, adjustedIndex, message, subTemplateIndex);\n }\n if (tView.type === 2) {\n const componentLView = lView[DECLARATION_COMPONENT_VIEW];\n componentLView[FLAGS] |= 32;\n } else {\n lView[FLAGS] |= 32;\n }\n const tI18n = tView.data[adjustedIndex];\n const sameViewParentTNode = parentTNode === lView[T_HOST] ? null : parentTNode;\n const parentRNode = getClosestRElement(tView, sameViewParentTNode, lView);\n const insertInFrontOf = parentTNode && parentTNode.type & 8 ? lView[parentTNode.index] : null;\n prepareI18nBlockForHydration(lView, adjustedIndex, parentTNode, subTemplateIndex);\n applyCreateOpCodes(lView, tI18n.create, parentRNode, insertInFrontOf);\n setInI18nBlock(true);\n}\nfunction \u0275\u0275i18nEnd() {\n setInI18nBlock(false);\n}\nfunction \u0275\u0275i18n(index, messageIndex, subTemplateIndex) {\n \u0275\u0275i18nStart(index, messageIndex, subTemplateIndex);\n \u0275\u0275i18nEnd();\n}\nfunction \u0275\u0275i18nAttributes(index, attrsIndex) {\n const tView = getTView();\n ngDevMode && assertDefined(tView, `tView should be defined`);\n const attrs = getConstant(tView.consts, attrsIndex);\n i18nAttributesFirstPass(tView, index + HEADER_OFFSET, attrs);\n}\nfunction \u0275\u0275i18nExp(value) {\n const lView = getLView();\n setMaskBit(bindingUpdated(lView, nextBindingIndex(), value));\n return \u0275\u0275i18nExp;\n}\nfunction \u0275\u0275i18nApply(index) {\n applyI18n(getTView(), getLView(), index + HEADER_OFFSET);\n}\nfunction \u0275\u0275i18nPostprocess(message, replacements = {}) {\n return i18nPostprocess(message, replacements);\n}\nfunction \u0275\u0275listener(eventName, listenerFn, eventTargetResolver) {\n const lView = getLView();\n const tView = getTView();\n const tNode = getCurrentTNode();\n listenerInternal(tView, lView, lView[RENDERER], tNode, eventName, listenerFn, eventTargetResolver);\n return \u0275\u0275listener;\n}\nfunction \u0275\u0275syntheticHostListener(eventName, listenerFn) {\n const tNode = getCurrentTNode();\n const lView = getLView();\n const tView = getTView();\n const currentDef = getCurrentDirectiveDef(tView.data);\n const renderer = loadComponentRenderer(currentDef, tNode, lView);\n listenerInternal(tView, lView, renderer, tNode, eventName, listenerFn);\n return \u0275\u0275syntheticHostListener;\n}\nfunction \u0275\u0275domListener(eventName, listenerFn, eventTargetResolver) {\n const lView = getLView();\n const tView = getTView();\n const tNode = getCurrentTNode();\n if (tNode.type & 3 || eventTargetResolver) {\n listenToDomEvent(tNode, tView, lView, eventTargetResolver, lView[RENDERER], eventName, listenerFn, wrapListener(tNode, lView, listenerFn));\n }\n return \u0275\u0275domListener;\n}\nfunction listenerInternal(tView, lView, renderer, tNode, eventName, listenerFn, eventTargetResolver) {\n ngDevMode && assertTNodeType(tNode, 3 | 12);\n let processOutputs = true;\n let wrappedListener = null;\n if (tNode.type & 3 || eventTargetResolver) {\n wrappedListener ??= wrapListener(tNode, lView, listenerFn);\n const hasCoalescedDomEvent = listenToDomEvent(tNode, tView, lView, eventTargetResolver, renderer, eventName, listenerFn, wrappedListener);\n if (hasCoalescedDomEvent) {\n processOutputs = false;\n }\n }\n if (processOutputs) {\n const outputConfig = tNode.outputs?.[eventName];\n const hostDirectiveOutputConfig = tNode.hostDirectiveOutputs?.[eventName];\n if (hostDirectiveOutputConfig && hostDirectiveOutputConfig.length) {\n for (let i = 0; i < hostDirectiveOutputConfig.length; i += 2) {\n const index = hostDirectiveOutputConfig[i];\n const lookupName = hostDirectiveOutputConfig[i + 1];\n wrappedListener ??= wrapListener(tNode, lView, listenerFn);\n listenToOutput(tNode, lView, index, lookupName, eventName, wrappedListener);\n }\n }\n if (outputConfig && outputConfig.length) {\n for (const index of outputConfig) {\n wrappedListener ??= wrapListener(tNode, lView, listenerFn);\n listenToOutput(tNode, lView, index, eventName, eventName, wrappedListener);\n }\n }\n }\n}\nfunction \u0275\u0275nextContext(level = 1) {\n return nextContextImpl(level);\n}\nfunction matchingProjectionSlotIndex(tNode, projectionSlots) {\n let wildcardNgContentIndex = null;\n const ngProjectAsAttrVal = getProjectAsAttrValue(tNode);\n for (let i = 0; i < projectionSlots.length; i++) {\n const slotValue = projectionSlots[i];\n if (slotValue === '*') {\n wildcardNgContentIndex = i;\n continue;\n }\n if (ngProjectAsAttrVal === null ? isNodeMatchingSelectorList(tNode, slotValue, true) : isSelectorInSelectorList(ngProjectAsAttrVal, slotValue)) {\n return i;\n }\n }\n return wildcardNgContentIndex;\n}\nfunction \u0275\u0275projectionDef(projectionSlots) {\n const componentNode = getLView()[DECLARATION_COMPONENT_VIEW][T_HOST];\n if (!componentNode.projection) {\n const numProjectionSlots = projectionSlots ? projectionSlots.length : 1;\n const projectionHeads = componentNode.projection = newArray(numProjectionSlots, null);\n const tails = projectionHeads.slice();\n let componentChild = componentNode.child;\n while (componentChild !== null) {\n if (componentChild.type !== 128) {\n const slotIndex = projectionSlots ? matchingProjectionSlotIndex(componentChild, projectionSlots) : 0;\n if (slotIndex !== null) {\n if (tails[slotIndex]) {\n tails[slotIndex].projectionNext = componentChild;\n } else {\n projectionHeads[slotIndex] = componentChild;\n }\n tails[slotIndex] = componentChild;\n }\n }\n componentChild = componentChild.next;\n }\n }\n}\nfunction \u0275\u0275projection(nodeIndex, selectorIndex = 0, attrs, fallbackTemplateFn, fallbackDecls, fallbackVars) {\n const lView = getLView();\n const tView = getTView();\n const fallbackIndex = fallbackTemplateFn ? nodeIndex + 1 : null;\n if (fallbackIndex !== null) {\n declareNoDirectiveHostTemplate(lView, tView, fallbackIndex, fallbackTemplateFn, fallbackDecls, fallbackVars, null, attrs);\n }\n const tProjectionNode = getOrCreateTNode(tView, HEADER_OFFSET + nodeIndex, 16, null, attrs || null);\n if (tProjectionNode.projection === null) {\n tProjectionNode.projection = selectorIndex;\n }\n setCurrentTNodeAsNotParent();\n const hydrationInfo = lView[HYDRATION];\n const isNodeCreationMode = !hydrationInfo || isInSkipHydrationBlock$1();\n const componentHostNode = lView[DECLARATION_COMPONENT_VIEW][T_HOST];\n const isEmpty = componentHostNode.projection[tProjectionNode.projection] === null;\n if (isEmpty && fallbackIndex !== null) {\n insertFallbackContent(lView, tView, fallbackIndex);\n } else if (isNodeCreationMode && !isDetachedByI18n(tProjectionNode)) {\n applyProjection(tView, lView, tProjectionNode);\n }\n}\nfunction insertFallbackContent(lView, tView, fallbackIndex) {\n const adjustedIndex = HEADER_OFFSET + fallbackIndex;\n const fallbackTNode = tView.data[adjustedIndex];\n const fallbackLContainer = lView[adjustedIndex];\n ngDevMode && assertTNode(fallbackTNode);\n ngDevMode && assertLContainer(fallbackLContainer);\n const dehydratedView = findMatchingDehydratedView(fallbackLContainer, fallbackTNode.tView.ssrId);\n const fallbackLView = createAndRenderEmbeddedLView(lView, fallbackTNode, undefined, {\n dehydratedView\n });\n addLViewToLContainer(fallbackLContainer, fallbackLView, 0, shouldAddViewToDom(fallbackTNode, dehydratedView));\n}\nfunction \u0275\u0275contentQuery(directiveIndex, predicate, flags, read) {\n createContentQuery(directiveIndex, predicate, flags, read);\n return \u0275\u0275contentQuery;\n}\nfunction \u0275\u0275viewQuery(predicate, flags, read) {\n createViewQuery(predicate, flags, read);\n return \u0275\u0275viewQuery;\n}\nfunction \u0275\u0275queryRefresh(queryList) {\n const lView = getLView();\n const tView = getTView();\n const queryIndex = getCurrentQueryIndex();\n setCurrentQueryIndex(queryIndex + 1);\n const tQuery = getTQuery(tView, queryIndex);\n if (queryList.dirty && isCreationMode(lView) === ((tQuery.metadata.flags & 2) === 2)) {\n if (tQuery.matches === null) {\n queryList.reset([]);\n } else {\n const result = getQueryResults(lView, queryIndex);\n queryList.reset(result, unwrapElementRef);\n queryList.notifyOnChanges();\n }\n return true;\n }\n return false;\n}\nfunction \u0275\u0275loadQuery() {\n return loadQueryInternal(getLView(), getCurrentQueryIndex());\n}\nfunction \u0275\u0275contentQuerySignal(directiveIndex, target, predicate, flags, read) {\n bindQueryToSignal(target, createContentQuery(directiveIndex, predicate, flags, read));\n return \u0275\u0275contentQuerySignal;\n}\nfunction \u0275\u0275viewQuerySignal(target, predicate, flags, read) {\n bindQueryToSignal(target, createViewQuery(predicate, flags, read));\n return \u0275\u0275viewQuerySignal;\n}\nfunction \u0275\u0275queryAdvance(indexOffset = 1) {\n setCurrentQueryIndex(getCurrentQueryIndex() + indexOffset);\n}\nfunction \u0275\u0275reference(index) {\n const contextLView = getContextLView();\n return load(contextLView, HEADER_OFFSET + index);\n}\nfunction toTStylingRange(prev, next) {\n ngDevMode && assertNumberInRange(prev, 0, 32767);\n ngDevMode && assertNumberInRange(next, 0, 32767);\n return prev << 17 | next << 2;\n}\nfunction getTStylingRangePrev(tStylingRange) {\n ngDevMode && assertNumber(tStylingRange, 'expected number');\n return tStylingRange >> 17 & 32767;\n}\nfunction getTStylingRangePrevDuplicate(tStylingRange) {\n ngDevMode && assertNumber(tStylingRange, 'expected number');\n return (tStylingRange & 2) == 2;\n}\nfunction setTStylingRangePrev(tStylingRange, previous) {\n ngDevMode && assertNumber(tStylingRange, 'expected number');\n ngDevMode && assertNumberInRange(previous, 0, 32767);\n return tStylingRange & ~4294836224 | previous << 17;\n}\nfunction setTStylingRangePrevDuplicate(tStylingRange) {\n ngDevMode && assertNumber(tStylingRange, 'expected number');\n return tStylingRange | 2;\n}\nfunction getTStylingRangeNext(tStylingRange) {\n ngDevMode && assertNumber(tStylingRange, 'expected number');\n return (tStylingRange & 131068) >> 2;\n}\nfunction setTStylingRangeNext(tStylingRange, next) {\n ngDevMode && assertNumber(tStylingRange, 'expected number');\n ngDevMode && assertNumberInRange(next, 0, 32767);\n return tStylingRange & ~131068 | next << 2;\n}\nfunction getTStylingRangeNextDuplicate(tStylingRange) {\n ngDevMode && assertNumber(tStylingRange, 'expected number');\n return (tStylingRange & 1) === 1;\n}\nfunction setTStylingRangeNextDuplicate(tStylingRange) {\n ngDevMode && assertNumber(tStylingRange, 'expected number');\n return tStylingRange | 1;\n}\nfunction insertTStylingBinding(tData, tNode, tStylingKeyWithStatic, index, isHostBinding, isClassBinding) {\n ngDevMode && assertFirstUpdatePass(getTView());\n let tBindings = isClassBinding ? tNode.classBindings : tNode.styleBindings;\n let tmplHead = getTStylingRangePrev(tBindings);\n let tmplTail = getTStylingRangeNext(tBindings);\n tData[index] = tStylingKeyWithStatic;\n let isKeyDuplicateOfStatic = false;\n let tStylingKey;\n if (Array.isArray(tStylingKeyWithStatic)) {\n const staticKeyValueArray = tStylingKeyWithStatic;\n tStylingKey = staticKeyValueArray[1];\n if (tStylingKey === null || keyValueArrayIndexOf(staticKeyValueArray, tStylingKey) > 0) {\n isKeyDuplicateOfStatic = true;\n }\n } else {\n tStylingKey = tStylingKeyWithStatic;\n }\n if (isHostBinding) {\n const hasTemplateBindings = tmplTail !== 0;\n if (hasTemplateBindings) {\n const previousNode = getTStylingRangePrev(tData[tmplHead + 1]);\n tData[index + 1] = toTStylingRange(previousNode, tmplHead);\n if (previousNode !== 0) {\n tData[previousNode + 1] = setTStylingRangeNext(tData[previousNode + 1], index);\n }\n tData[tmplHead + 1] = setTStylingRangePrev(tData[tmplHead + 1], index);\n } else {\n tData[index + 1] = toTStylingRange(tmplHead, 0);\n if (tmplHead !== 0) {\n tData[tmplHead + 1] = setTStylingRangeNext(tData[tmplHead + 1], index);\n }\n tmplHead = index;\n }\n } else {\n tData[index + 1] = toTStylingRange(tmplTail, 0);\n ngDevMode && assertEqual(tmplHead !== 0 && tmplTail === 0, false, 'Adding template bindings after hostBindings is not allowed.');\n if (tmplHead === 0) {\n tmplHead = index;\n } else {\n tData[tmplTail + 1] = setTStylingRangeNext(tData[tmplTail + 1], index);\n }\n tmplTail = index;\n }\n if (isKeyDuplicateOfStatic) {\n tData[index + 1] = setTStylingRangePrevDuplicate(tData[index + 1]);\n }\n markDuplicates(tData, tStylingKey, index, true);\n markDuplicates(tData, tStylingKey, index, false);\n markDuplicateOfResidualStyling(tNode, tStylingKey, tData, index, isClassBinding);\n tBindings = toTStylingRange(tmplHead, tmplTail);\n if (isClassBinding) {\n tNode.classBindings = tBindings;\n } else {\n tNode.styleBindings = tBindings;\n }\n}\nfunction markDuplicateOfResidualStyling(tNode, tStylingKey, tData, index, isClassBinding) {\n const residual = isClassBinding ? tNode.residualClasses : tNode.residualStyles;\n if (residual != null && typeof tStylingKey == 'string' && keyValueArrayIndexOf(residual, tStylingKey) >= 0) {\n tData[index + 1] = setTStylingRangeNextDuplicate(tData[index + 1]);\n }\n}\nfunction markDuplicates(tData, tStylingKey, index, isPrevDir) {\n const tStylingAtIndex = tData[index + 1];\n const isMap = tStylingKey === null;\n let cursor = isPrevDir ? getTStylingRangePrev(tStylingAtIndex) : getTStylingRangeNext(tStylingAtIndex);\n let foundDuplicate = false;\n while (cursor !== 0 && (foundDuplicate === false || isMap)) {\n ngDevMode && assertIndexInRange(tData, cursor);\n const tStylingValueAtCursor = tData[cursor];\n const tStyleRangeAtCursor = tData[cursor + 1];\n if (isStylingMatch(tStylingValueAtCursor, tStylingKey)) {\n foundDuplicate = true;\n tData[cursor + 1] = isPrevDir ? setTStylingRangeNextDuplicate(tStyleRangeAtCursor) : setTStylingRangePrevDuplicate(tStyleRangeAtCursor);\n }\n cursor = isPrevDir ? getTStylingRangePrev(tStyleRangeAtCursor) : getTStylingRangeNext(tStyleRangeAtCursor);\n }\n if (foundDuplicate) {\n tData[index + 1] = isPrevDir ? setTStylingRangePrevDuplicate(tStylingAtIndex) : setTStylingRangeNextDuplicate(tStylingAtIndex);\n }\n}\nfunction isStylingMatch(tStylingKeyCursor, tStylingKey) {\n ngDevMode && assertNotEqual(Array.isArray(tStylingKey), true, \"Expected that 'tStylingKey' has been unwrapped\");\n if (tStylingKeyCursor === null || tStylingKey == null || (Array.isArray(tStylingKeyCursor) ? tStylingKeyCursor[1] : tStylingKeyCursor) === tStylingKey) {\n return true;\n } else if (Array.isArray(tStylingKeyCursor) && typeof tStylingKey === 'string') {\n return keyValueArrayIndexOf(tStylingKeyCursor, tStylingKey) >= 0;\n }\n return false;\n}\nconst parserState = {\n textEnd: 0,\n key: 0,\n keyEnd: 0,\n value: 0,\n valueEnd: 0\n};\nfunction getLastParsedKey(text) {\n return text.substring(parserState.key, parserState.keyEnd);\n}\nfunction getLastParsedValue(text) {\n return text.substring(parserState.value, parserState.valueEnd);\n}\nfunction parseClassName(text) {\n resetParserState(text);\n return parseClassNameNext(text, consumeWhitespace(text, 0, parserState.textEnd));\n}\nfunction parseClassNameNext(text, index) {\n const end = parserState.textEnd;\n if (end === index) {\n return -1;\n }\n index = parserState.keyEnd = consumeClassToken(text, parserState.key = index, end);\n return consumeWhitespace(text, index, end);\n}\nfunction parseStyle(text) {\n resetParserState(text);\n return parseStyleNext(text, consumeWhitespace(text, 0, parserState.textEnd));\n}\nfunction parseStyleNext(text, startIndex) {\n const end = parserState.textEnd;\n let index = parserState.key = consumeWhitespace(text, startIndex, end);\n if (end === index) {\n return -1;\n }\n index = parserState.keyEnd = consumeStyleKey(text, index, end);\n index = consumeSeparator(text, index, end, 58);\n index = parserState.value = consumeWhitespace(text, index, end);\n index = parserState.valueEnd = consumeStyleValue(text, index, end);\n return consumeSeparator(text, index, end, 59);\n}\nfunction resetParserState(text) {\n parserState.key = 0;\n parserState.keyEnd = 0;\n parserState.value = 0;\n parserState.valueEnd = 0;\n parserState.textEnd = text.length;\n}\nfunction consumeWhitespace(text, startIndex, endIndex) {\n while (startIndex < endIndex && text.charCodeAt(startIndex) <= 32) {\n startIndex++;\n }\n return startIndex;\n}\nfunction consumeClassToken(text, startIndex, endIndex) {\n while (startIndex < endIndex && text.charCodeAt(startIndex) > 32) {\n startIndex++;\n }\n return startIndex;\n}\nfunction consumeStyleKey(text, startIndex, endIndex) {\n let ch;\n while (startIndex < endIndex && ((ch = text.charCodeAt(startIndex)) === 45 || ch === 95 || (ch & -33) >= 65 && (ch & -33) <= 90 || ch >= 48 && ch <= 57)) {\n startIndex++;\n }\n return startIndex;\n}\nfunction consumeSeparator(text, startIndex, endIndex, separator) {\n startIndex = consumeWhitespace(text, startIndex, endIndex);\n if (startIndex < endIndex) {\n if (ngDevMode && text.charCodeAt(startIndex) !== separator) {\n malformedStyleError(text, String.fromCharCode(separator), startIndex);\n }\n startIndex++;\n }\n return startIndex;\n}\nfunction consumeStyleValue(text, startIndex, endIndex) {\n let ch1 = -1;\n let ch2 = -1;\n let ch3 = -1;\n let i = startIndex;\n let lastChIndex = i;\n while (i < endIndex) {\n const ch = text.charCodeAt(i++);\n if (ch === 59) {\n return lastChIndex;\n } else if (ch === 34 || ch === 39) {\n lastChIndex = i = consumeQuotedText(text, ch, i, endIndex);\n } else if (startIndex === i - 4 && ch3 === 85 && ch2 === 82 && ch1 === 76 && ch === 40) {\n lastChIndex = i = consumeQuotedText(text, 41, i, endIndex);\n } else if (ch > 32) {\n lastChIndex = i;\n }\n ch3 = ch2;\n ch2 = ch1;\n ch1 = ch & -33;\n }\n return lastChIndex;\n}\nfunction consumeQuotedText(text, quoteCharCode, startIndex, endIndex) {\n let ch1 = -1;\n let index = startIndex;\n while (index < endIndex) {\n const ch = text.charCodeAt(index++);\n if (ch == quoteCharCode && ch1 !== 92) {\n return index;\n }\n if (ch == 92 && ch1 === 92) {\n ch1 = 0;\n } else {\n ch1 = ch;\n }\n }\n throw ngDevMode ? malformedStyleError(text, String.fromCharCode(quoteCharCode), endIndex) : new Error();\n}\nfunction malformedStyleError(text, expecting, index) {\n ngDevMode && assertEqual(typeof text === 'string', true, 'String expected here');\n throw throwError(`Malformed style at location ${index} in string '` + text.substring(0, index) + '[>>' + text.substring(index, index + 1) + '<<]' + text.slice(index + 1) + `'. Expecting '${expecting}'.`);\n}\nfunction \u0275\u0275styleProp(prop, value, suffix) {\n checkStylingProperty(prop, value, suffix, false);\n return \u0275\u0275styleProp;\n}\nfunction \u0275\u0275classProp(className, value) {\n checkStylingProperty(className, value, null, true);\n return \u0275\u0275classProp;\n}\nfunction \u0275\u0275styleMap(styles) {\n checkStylingMap(styleKeyValueArraySet, styleStringParser, styles, false);\n}\nfunction styleStringParser(keyValueArray, text) {\n for (let i = parseStyle(text); i >= 0; i = parseStyleNext(text, i)) {\n styleKeyValueArraySet(keyValueArray, getLastParsedKey(text), getLastParsedValue(text));\n }\n}\nfunction \u0275\u0275classMap(classes) {\n checkStylingMap(classKeyValueArraySet, classStringParser, classes, true);\n}\nfunction classStringParser(keyValueArray, text) {\n for (let i = parseClassName(text); i >= 0; i = parseClassNameNext(text, i)) {\n keyValueArraySet(keyValueArray, getLastParsedKey(text), true);\n }\n}\nfunction checkStylingProperty(prop, value, suffix, isClassBased) {\n const lView = getLView();\n const tView = getTView();\n const bindingIndex = incrementBindingIndex(2);\n if (tView.firstUpdatePass) {\n stylingFirstUpdatePass(tView, prop, bindingIndex, isClassBased);\n }\n if (value !== NO_CHANGE && bindingUpdated(lView, bindingIndex, value)) {\n const tNode = tView.data[getSelectedIndex()];\n updateStyling(tView, tNode, lView, lView[RENDERER], prop, lView[bindingIndex + 1] = normalizeSuffix(value, suffix), isClassBased, bindingIndex);\n }\n}\nfunction checkStylingMap(keyValueArraySet, stringParser, value, isClassBased) {\n const tView = getTView();\n const bindingIndex = incrementBindingIndex(2);\n if (tView.firstUpdatePass) {\n stylingFirstUpdatePass(tView, null, bindingIndex, isClassBased);\n }\n const lView = getLView();\n if (value !== NO_CHANGE && bindingUpdated(lView, bindingIndex, value)) {\n const tNode = tView.data[getSelectedIndex()];\n if (hasStylingInputShadow(tNode, isClassBased) && !isInHostBindings(tView, bindingIndex)) {\n if (ngDevMode) {\n const tStylingKey = tView.data[bindingIndex];\n assertEqual(Array.isArray(tStylingKey) ? tStylingKey[1] : tStylingKey, false, \"Styling linked list shadow input should be marked as 'false'\");\n }\n let staticPrefix = isClassBased ? tNode.classesWithoutHost : tNode.stylesWithoutHost;\n ngDevMode && isClassBased === false && staticPrefix !== null && assertEqual(staticPrefix.endsWith(';'), true, \"Expecting static portion to end with ';'\");\n if (staticPrefix !== null) {\n value = concatStringsWithSpace(staticPrefix, value ? value : '');\n }\n setDirectiveInputsWhichShadowsStyling(tView, tNode, lView, value, isClassBased);\n } else {\n updateStylingMap(tView, tNode, lView, lView[RENDERER], lView[bindingIndex + 1], lView[bindingIndex + 1] = toStylingKeyValueArray(keyValueArraySet, stringParser, value), isClassBased, bindingIndex);\n }\n }\n}\nfunction isInHostBindings(tView, bindingIndex) {\n return bindingIndex >= tView.expandoStartIndex;\n}\nfunction stylingFirstUpdatePass(tView, tStylingKey, bindingIndex, isClassBased) {\n ngDevMode && assertFirstUpdatePass(tView);\n const tData = tView.data;\n if (tData[bindingIndex + 1] === null) {\n const tNode = tData[getSelectedIndex()];\n ngDevMode && assertDefined(tNode, 'TNode expected');\n const isHostBindings = isInHostBindings(tView, bindingIndex);\n if (hasStylingInputShadow(tNode, isClassBased) && tStylingKey === null && !isHostBindings) {\n tStylingKey = false;\n }\n tStylingKey = wrapInStaticStylingKey(tData, tNode, tStylingKey, isClassBased);\n insertTStylingBinding(tData, tNode, tStylingKey, bindingIndex, isHostBindings, isClassBased);\n }\n}\nfunction wrapInStaticStylingKey(tData, tNode, stylingKey, isClassBased) {\n const hostDirectiveDef = getCurrentDirectiveDef(tData);\n let residual = isClassBased ? tNode.residualClasses : tNode.residualStyles;\n if (hostDirectiveDef === null) {\n const isFirstStylingInstructionInTemplate = (isClassBased ? tNode.classBindings : tNode.styleBindings) === 0;\n if (isFirstStylingInstructionInTemplate) {\n stylingKey = collectStylingFromDirectives(null, tData, tNode, stylingKey, isClassBased);\n stylingKey = collectStylingFromTAttrs(stylingKey, tNode.attrs, isClassBased);\n residual = null;\n }\n } else {\n const directiveStylingLast = tNode.directiveStylingLast;\n const isFirstStylingInstructionInHostBinding = directiveStylingLast === -1 || tData[directiveStylingLast] !== hostDirectiveDef;\n if (isFirstStylingInstructionInHostBinding) {\n stylingKey = collectStylingFromDirectives(hostDirectiveDef, tData, tNode, stylingKey, isClassBased);\n if (residual === null) {\n let templateStylingKey = getTemplateHeadTStylingKey(tData, tNode, isClassBased);\n if (templateStylingKey !== undefined && Array.isArray(templateStylingKey)) {\n templateStylingKey = collectStylingFromDirectives(null, tData, tNode, templateStylingKey[1], isClassBased);\n templateStylingKey = collectStylingFromTAttrs(templateStylingKey, tNode.attrs, isClassBased);\n setTemplateHeadTStylingKey(tData, tNode, isClassBased, templateStylingKey);\n }\n } else {\n residual = collectResidual(tData, tNode, isClassBased);\n }\n }\n }\n if (residual !== undefined) {\n isClassBased ? tNode.residualClasses = residual : tNode.residualStyles = residual;\n }\n return stylingKey;\n}\nfunction getTemplateHeadTStylingKey(tData, tNode, isClassBased) {\n const bindings = isClassBased ? tNode.classBindings : tNode.styleBindings;\n if (getTStylingRangeNext(bindings) === 0) {\n return undefined;\n }\n return tData[getTStylingRangePrev(bindings)];\n}\nfunction setTemplateHeadTStylingKey(tData, tNode, isClassBased, tStylingKey) {\n const bindings = isClassBased ? tNode.classBindings : tNode.styleBindings;\n ngDevMode && assertNotEqual(getTStylingRangeNext(bindings), 0, 'Expecting to have at least one template styling binding.');\n tData[getTStylingRangePrev(bindings)] = tStylingKey;\n}\nfunction collectResidual(tData, tNode, isClassBased) {\n let residual = undefined;\n const directiveEnd = tNode.directiveEnd;\n ngDevMode && assertNotEqual(tNode.directiveStylingLast, -1, 'By the time this function gets called at least one hostBindings-node styling instruction must have executed.');\n for (let i = 1 + tNode.directiveStylingLast; i < directiveEnd; i++) {\n const attrs = tData[i].hostAttrs;\n residual = collectStylingFromTAttrs(residual, attrs, isClassBased);\n }\n return collectStylingFromTAttrs(residual, tNode.attrs, isClassBased);\n}\nfunction collectStylingFromDirectives(hostDirectiveDef, tData, tNode, stylingKey, isClassBased) {\n let currentDirective = null;\n const directiveEnd = tNode.directiveEnd;\n let directiveStylingLast = tNode.directiveStylingLast;\n if (directiveStylingLast === -1) {\n directiveStylingLast = tNode.directiveStart;\n } else {\n directiveStylingLast++;\n }\n while (directiveStylingLast < directiveEnd) {\n currentDirective = tData[directiveStylingLast];\n ngDevMode && assertDefined(currentDirective, 'expected to be defined');\n stylingKey = collectStylingFromTAttrs(stylingKey, currentDirective.hostAttrs, isClassBased);\n if (currentDirective === hostDirectiveDef) break;\n directiveStylingLast++;\n }\n if (hostDirectiveDef !== null) {\n tNode.directiveStylingLast = directiveStylingLast;\n }\n return stylingKey;\n}\nfunction collectStylingFromTAttrs(stylingKey, attrs, isClassBased) {\n const desiredMarker = isClassBased ? 1 : 2;\n let currentMarker = -1;\n if (attrs !== null) {\n for (let i = 0; i < attrs.length; i++) {\n const item = attrs[i];\n if (typeof item === 'number') {\n currentMarker = item;\n } else {\n if (currentMarker === desiredMarker) {\n if (!Array.isArray(stylingKey)) {\n stylingKey = stylingKey === undefined ? [] : ['', stylingKey];\n }\n keyValueArraySet(stylingKey, item, isClassBased ? true : attrs[++i]);\n }\n }\n }\n }\n return stylingKey === undefined ? null : stylingKey;\n}\nfunction toStylingKeyValueArray(keyValueArraySet, stringParser, value) {\n if (value == null || value === '') return EMPTY_ARRAY;\n const styleKeyValueArray = [];\n const unwrappedValue = unwrapSafeValue(value);\n if (Array.isArray(unwrappedValue)) {\n for (let i = 0; i < unwrappedValue.length; i++) {\n keyValueArraySet(styleKeyValueArray, unwrappedValue[i], true);\n }\n } else if (unwrappedValue instanceof Set) {\n for (const current of unwrappedValue) {\n keyValueArraySet(styleKeyValueArray, current, true);\n }\n } else if (typeof unwrappedValue === 'object') {\n for (const key in unwrappedValue) {\n if (unwrappedValue.hasOwnProperty(key)) {\n keyValueArraySet(styleKeyValueArray, key, unwrappedValue[key]);\n }\n }\n } else if (typeof unwrappedValue === 'string') {\n stringParser(styleKeyValueArray, unwrappedValue);\n } else {\n ngDevMode && throwError('Unsupported styling type: ' + typeof unwrappedValue + ' (' + unwrappedValue + ')');\n }\n return styleKeyValueArray;\n}\nfunction styleKeyValueArraySet(keyValueArray, key, value) {\n keyValueArraySet(keyValueArray, key, unwrapSafeValue(value));\n}\nfunction classKeyValueArraySet(keyValueArray, key, value) {\n const stringKey = String(key);\n if (stringKey !== '' && !stringKey.includes(' ')) {\n keyValueArraySet(keyValueArray, stringKey, value);\n }\n}\nfunction updateStylingMap(tView, tNode, lView, renderer, oldKeyValueArray, newKeyValueArray, isClassBased, bindingIndex) {\n if (oldKeyValueArray === NO_CHANGE) {\n oldKeyValueArray = EMPTY_ARRAY;\n }\n let oldIndex = 0;\n let newIndex = 0;\n let oldKey = 0 < oldKeyValueArray.length ? oldKeyValueArray[0] : null;\n let newKey = 0 < newKeyValueArray.length ? newKeyValueArray[0] : null;\n while (oldKey !== null || newKey !== null) {\n ngDevMode && assertLessThan(oldIndex, 999, 'Are we stuck in infinite loop?');\n ngDevMode && assertLessThan(newIndex, 999, 'Are we stuck in infinite loop?');\n const oldValue = oldIndex < oldKeyValueArray.length ? oldKeyValueArray[oldIndex + 1] : undefined;\n const newValue = newIndex < newKeyValueArray.length ? newKeyValueArray[newIndex + 1] : undefined;\n let setKey = null;\n let setValue = undefined;\n if (oldKey === newKey) {\n oldIndex += 2;\n newIndex += 2;\n if (oldValue !== newValue) {\n setKey = newKey;\n setValue = newValue;\n }\n } else if (newKey === null || oldKey !== null && oldKey < newKey) {\n oldIndex += 2;\n setKey = oldKey;\n } else {\n ngDevMode && assertDefined(newKey, 'Expecting to have a valid key');\n newIndex += 2;\n setKey = newKey;\n setValue = newValue;\n }\n if (setKey !== null) {\n updateStyling(tView, tNode, lView, renderer, setKey, setValue, isClassBased, bindingIndex);\n }\n oldKey = oldIndex < oldKeyValueArray.length ? oldKeyValueArray[oldIndex] : null;\n newKey = newIndex < newKeyValueArray.length ? newKeyValueArray[newIndex] : null;\n }\n}\nfunction updateStyling(tView, tNode, lView, renderer, prop, value, isClassBased, bindingIndex) {\n if (!(tNode.type & 3)) {\n return;\n }\n const tData = tView.data;\n const tRange = tData[bindingIndex + 1];\n const higherPriorityValue = getTStylingRangeNextDuplicate(tRange) ? findStylingValue(tData, tNode, lView, prop, getTStylingRangeNext(tRange), isClassBased) : undefined;\n if (!isStylingValuePresent(higherPriorityValue)) {\n if (!isStylingValuePresent(value)) {\n if (getTStylingRangePrevDuplicate(tRange)) {\n value = findStylingValue(tData, null, lView, prop, bindingIndex, isClassBased);\n }\n }\n const rNode = getNativeByIndex(getSelectedIndex(), lView);\n applyStyling(renderer, isClassBased, rNode, prop, value);\n }\n}\nfunction findStylingValue(tData, tNode, lView, prop, index, isClassBased) {\n const isPrevDirection = tNode === null;\n let value = undefined;\n while (index > 0) {\n const rawKey = tData[index];\n const containsStatics = Array.isArray(rawKey);\n const key = containsStatics ? rawKey[1] : rawKey;\n const isStylingMap = key === null;\n let valueAtLViewIndex = lView[index + 1];\n if (valueAtLViewIndex === NO_CHANGE) {\n valueAtLViewIndex = isStylingMap ? EMPTY_ARRAY : undefined;\n }\n let currentValue = isStylingMap ? keyValueArrayGet(valueAtLViewIndex, prop) : key === prop ? valueAtLViewIndex : undefined;\n if (containsStatics && !isStylingValuePresent(currentValue)) {\n currentValue = keyValueArrayGet(rawKey, prop);\n }\n if (isStylingValuePresent(currentValue)) {\n value = currentValue;\n if (isPrevDirection) {\n return value;\n }\n }\n const tRange = tData[index + 1];\n index = isPrevDirection ? getTStylingRangePrev(tRange) : getTStylingRangeNext(tRange);\n }\n if (tNode !== null) {\n let residual = isClassBased ? tNode.residualClasses : tNode.residualStyles;\n if (residual != null) {\n value = keyValueArrayGet(residual, prop);\n }\n }\n return value;\n}\nfunction isStylingValuePresent(value) {\n return value !== undefined;\n}\nfunction normalizeSuffix(value, suffix) {\n if (value == null || value === '') ;else if (typeof suffix === 'string') {\n value = value + suffix;\n } else if (typeof value === 'object') {\n value = stringify(unwrapSafeValue(value));\n }\n return value;\n}\nfunction hasStylingInputShadow(tNode, isClassBased) {\n return (tNode.flags & (isClassBased ? 8 : 16)) !== 0;\n}\nfunction \u0275\u0275text(index, value = '') {\n const lView = getLView();\n const tView = getTView();\n const adjustedIndex = index + HEADER_OFFSET;\n ngDevMode && assertTNodeCreationIndex(lView, index);\n const tNode = tView.firstCreatePass ? getOrCreateTNode(tView, adjustedIndex, 1, value, null) : tView.data[adjustedIndex];\n const textNative = _locateOrCreateTextNode(tView, lView, tNode, value);\n lView[adjustedIndex] = textNative;\n if (wasLastNodeCreated()) {\n appendChild(tView, lView, textNative, tNode);\n }\n setCurrentTNode(tNode, false);\n}\nlet _locateOrCreateTextNode = (tView, lView, tNode, value) => {\n lastNodeWasCreated(true);\n return createTextNode(lView[RENDERER], value);\n};\nfunction locateOrCreateTextNodeImpl(tView, lView, tNode, value) {\n const isNodeCreationMode = !canHydrateNode(lView, tNode);\n lastNodeWasCreated(isNodeCreationMode);\n if (isNodeCreationMode) {\n return createTextNode(lView[RENDERER], value);\n }\n const hydrationInfo = lView[HYDRATION];\n const textNative = locateNextRNode(hydrationInfo, tView, lView, tNode);\n ngDevMode && validateMatchingNode(textNative, Node.TEXT_NODE, null, lView, tNode);\n ngDevMode && markRNodeAsClaimedByHydration(textNative);\n return textNative;\n}\nfunction enableLocateOrCreateTextNodeImpl() {\n _locateOrCreateTextNode = locateOrCreateTextNodeImpl;\n}\nfunction interpolationV(lView, values) {\n ngDevMode && assertLessThan(2, values.length, 'should have at least 3 values');\n let isBindingUpdated = false;\n let bindingIndex = getBindingIndex();\n for (let i = 1; i < values.length; i += 2) {\n isBindingUpdated = bindingUpdated(lView, bindingIndex++, values[i]) || isBindingUpdated;\n }\n setBindingIndex(bindingIndex);\n if (!isBindingUpdated) {\n return NO_CHANGE;\n }\n let content = values[0];\n for (let i = 1; i < values.length; i += 2) {\n content += renderStringify(values[i]) + (i + 1 !== values.length ? values[i + 1] : '');\n }\n return content;\n}\nfunction interpolation1(lView, prefix, v0, suffix = '') {\n const different = bindingUpdated(lView, nextBindingIndex(), v0);\n return different ? prefix + renderStringify(v0) + suffix : NO_CHANGE;\n}\nfunction interpolation2(lView, prefix, v0, i0, v1, suffix = '') {\n const bindingIndex = getBindingIndex();\n const different = bindingUpdated2(lView, bindingIndex, v0, v1);\n incrementBindingIndex(2);\n return different ? prefix + renderStringify(v0) + i0 + renderStringify(v1) + suffix : NO_CHANGE;\n}\nfunction interpolation3(lView, prefix, v0, i0, v1, i1, v2, suffix = '') {\n const bindingIndex = getBindingIndex();\n const different = bindingUpdated3(lView, bindingIndex, v0, v1, v2);\n incrementBindingIndex(3);\n return different ? prefix + renderStringify(v0) + i0 + renderStringify(v1) + i1 + renderStringify(v2) + suffix : NO_CHANGE;\n}\nfunction interpolation4(lView, prefix, v0, i0, v1, i1, v2, i2, v3, suffix = '') {\n const bindingIndex = getBindingIndex();\n const different = bindingUpdated4(lView, bindingIndex, v0, v1, v2, v3);\n incrementBindingIndex(4);\n return different ? prefix + renderStringify(v0) + i0 + renderStringify(v1) + i1 + renderStringify(v2) + i2 + renderStringify(v3) + suffix : NO_CHANGE;\n}\nfunction interpolation5(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, suffix = '') {\n const bindingIndex = getBindingIndex();\n let different = bindingUpdated4(lView, bindingIndex, v0, v1, v2, v3);\n different = bindingUpdated(lView, bindingIndex + 4, v4) || different;\n incrementBindingIndex(5);\n return different ? prefix + renderStringify(v0) + i0 + renderStringify(v1) + i1 + renderStringify(v2) + i2 + renderStringify(v3) + i3 + renderStringify(v4) + suffix : NO_CHANGE;\n}\nfunction interpolation6(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, suffix = '') {\n const bindingIndex = getBindingIndex();\n let different = bindingUpdated4(lView, bindingIndex, v0, v1, v2, v3);\n different = bindingUpdated2(lView, bindingIndex + 4, v4, v5) || different;\n incrementBindingIndex(6);\n return different ? prefix + renderStringify(v0) + i0 + renderStringify(v1) + i1 + renderStringify(v2) + i2 + renderStringify(v3) + i3 + renderStringify(v4) + i4 + renderStringify(v5) + suffix : NO_CHANGE;\n}\nfunction interpolation7(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, suffix = '') {\n const bindingIndex = getBindingIndex();\n let different = bindingUpdated4(lView, bindingIndex, v0, v1, v2, v3);\n different = bindingUpdated3(lView, bindingIndex + 4, v4, v5, v6) || different;\n incrementBindingIndex(7);\n return different ? prefix + renderStringify(v0) + i0 + renderStringify(v1) + i1 + renderStringify(v2) + i2 + renderStringify(v3) + i3 + renderStringify(v4) + i4 + renderStringify(v5) + i5 + renderStringify(v6) + suffix : NO_CHANGE;\n}\nfunction interpolation8(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, i6, v7, suffix = '') {\n const bindingIndex = getBindingIndex();\n let different = bindingUpdated4(lView, bindingIndex, v0, v1, v2, v3);\n different = bindingUpdated4(lView, bindingIndex + 4, v4, v5, v6, v7) || different;\n incrementBindingIndex(8);\n return different ? prefix + renderStringify(v0) + i0 + renderStringify(v1) + i1 + renderStringify(v2) + i2 + renderStringify(v3) + i3 + renderStringify(v4) + i4 + renderStringify(v5) + i5 + renderStringify(v6) + i6 + renderStringify(v7) + suffix : NO_CHANGE;\n}\nfunction \u0275\u0275textInterpolate(v0) {\n \u0275\u0275textInterpolate1('', v0);\n return \u0275\u0275textInterpolate;\n}\nfunction \u0275\u0275textInterpolate1(prefix, v0, suffix) {\n const lView = getLView();\n const interpolated = interpolation1(lView, prefix, v0, suffix);\n if (interpolated !== NO_CHANGE) {\n textBindingInternal(lView, getSelectedIndex(), interpolated);\n }\n return \u0275\u0275textInterpolate1;\n}\nfunction \u0275\u0275textInterpolate2(prefix, v0, i0, v1, suffix) {\n const lView = getLView();\n const interpolated = interpolation2(lView, prefix, v0, i0, v1, suffix);\n if (interpolated !== NO_CHANGE) {\n textBindingInternal(lView, getSelectedIndex(), interpolated);\n }\n return \u0275\u0275textInterpolate2;\n}\nfunction \u0275\u0275textInterpolate3(prefix, v0, i0, v1, i1, v2, suffix) {\n const lView = getLView();\n const interpolated = interpolation3(lView, prefix, v0, i0, v1, i1, v2, suffix);\n if (interpolated !== NO_CHANGE) {\n textBindingInternal(lView, getSelectedIndex(), interpolated);\n }\n return \u0275\u0275textInterpolate3;\n}\nfunction \u0275\u0275textInterpolate4(prefix, v0, i0, v1, i1, v2, i2, v3, suffix) {\n const lView = getLView();\n const interpolated = interpolation4(lView, prefix, v0, i0, v1, i1, v2, i2, v3, suffix);\n if (interpolated !== NO_CHANGE) {\n textBindingInternal(lView, getSelectedIndex(), interpolated);\n }\n return \u0275\u0275textInterpolate4;\n}\nfunction \u0275\u0275textInterpolate5(prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, suffix) {\n const lView = getLView();\n const interpolated = interpolation5(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, suffix);\n if (interpolated !== NO_CHANGE) {\n textBindingInternal(lView, getSelectedIndex(), interpolated);\n }\n return \u0275\u0275textInterpolate5;\n}\nfunction \u0275\u0275textInterpolate6(prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, suffix) {\n const lView = getLView();\n const interpolated = interpolation6(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, suffix);\n if (interpolated !== NO_CHANGE) {\n textBindingInternal(lView, getSelectedIndex(), interpolated);\n }\n return \u0275\u0275textInterpolate6;\n}\nfunction \u0275\u0275textInterpolate7(prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, suffix) {\n const lView = getLView();\n const interpolated = interpolation7(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, suffix);\n if (interpolated !== NO_CHANGE) {\n textBindingInternal(lView, getSelectedIndex(), interpolated);\n }\n return \u0275\u0275textInterpolate7;\n}\nfunction \u0275\u0275textInterpolate8(prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, i6, v7, suffix) {\n const lView = getLView();\n const interpolated = interpolation8(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, i6, v7, suffix);\n if (interpolated !== NO_CHANGE) {\n textBindingInternal(lView, getSelectedIndex(), interpolated);\n }\n return \u0275\u0275textInterpolate8;\n}\nfunction \u0275\u0275textInterpolateV(values) {\n const lView = getLView();\n const interpolated = interpolationV(lView, values);\n if (interpolated !== NO_CHANGE) {\n textBindingInternal(lView, getSelectedIndex(), interpolated);\n }\n return \u0275\u0275textInterpolateV;\n}\nfunction textBindingInternal(lView, index, value) {\n ngDevMode && assertString(value, 'Value should be a string');\n ngDevMode && assertNotSame(value, NO_CHANGE, 'value should not be NO_CHANGE');\n ngDevMode && assertIndexInRange(lView, index);\n const element = getNativeByIndex(index, lView);\n ngDevMode && assertDefined(element, 'native element should exist');\n updateTextNode(lView[RENDERER], element, value);\n}\nfunction \u0275\u0275twoWayProperty(propName, value, sanitizer) {\n if (isWritableSignal(value)) {\n value = value();\n }\n const lView = getLView();\n const bindingIndex = nextBindingIndex();\n if (bindingUpdated(lView, bindingIndex, value)) {\n const tView = getTView();\n const tNode = getSelectedTNode();\n setPropertyAndInputs(tNode, lView, propName, value, lView[RENDERER], sanitizer);\n ngDevMode && storePropertyBindingMetadata(tView.data, tNode, propName, bindingIndex);\n }\n return \u0275\u0275twoWayProperty;\n}\nfunction \u0275\u0275twoWayBindingSet(target, value) {\n const canWrite = isWritableSignal(target);\n canWrite && target.set(value);\n return canWrite;\n}\nfunction \u0275\u0275twoWayListener(eventName, listenerFn) {\n const lView = getLView();\n const tView = getTView();\n const tNode = getCurrentTNode();\n listenerInternal(tView, lView, lView[RENDERER], tNode, eventName, listenerFn);\n return \u0275\u0275twoWayListener;\n}\nconst UNINITIALIZED_LET = {};\nfunction \u0275\u0275declareLet(index) {\n performanceMarkFeature('NgLet');\n const tView = getTView();\n const lView = getLView();\n const adjustedIndex = index + HEADER_OFFSET;\n const tNode = getOrCreateTNode(tView, adjustedIndex, 128, null, null);\n setCurrentTNode(tNode, false);\n store(tView, lView, adjustedIndex, UNINITIALIZED_LET);\n return \u0275\u0275declareLet;\n}\nfunction \u0275\u0275storeLet(value) {\n const tView = getTView();\n const lView = getLView();\n const index = getSelectedIndex();\n store(tView, lView, index, value);\n return value;\n}\nfunction \u0275\u0275readContextLet(index) {\n const contextLView = getContextLView();\n const value = load(contextLView, HEADER_OFFSET + index);\n if (value === UNINITIALIZED_LET) {\n throw new RuntimeError(314, ngDevMode && 'Attempting to access a @let declaration whose value is not available yet');\n }\n return value;\n}\nfunction \u0275\u0275attachSourceLocations(templatePath, locations) {\n const tView = getTView();\n const lView = getLView();\n const renderer = lView[RENDERER];\n const attributeName = 'data-ng-source-location';\n for (const [index, offset, line, column] of locations) {\n const tNode = getTNode(tView, index + HEADER_OFFSET);\n ngDevMode && assertTNodeType(tNode, 2);\n const node = getNativeByIndex(index + HEADER_OFFSET, lView);\n if (!node.hasAttribute(attributeName)) {\n const attributeValue = `${templatePath}@o:${offset},l:${line},c:${column}`;\n renderer.setAttribute(node, attributeName, attributeValue);\n }\n }\n}\nfunction \u0275\u0275interpolate(v0) {\n return bindingUpdated(getLView(), nextBindingIndex(), v0) ? renderStringify(v0) : NO_CHANGE;\n}\nfunction \u0275\u0275interpolate1(prefix, v0, suffix = '') {\n return interpolation1(getLView(), prefix, v0, suffix);\n}\nfunction \u0275\u0275interpolate2(prefix, v0, i0, v1, suffix = '') {\n return interpolation2(getLView(), prefix, v0, i0, v1, suffix);\n}\nfunction \u0275\u0275interpolate3(prefix, v0, i0, v1, i1, v2, suffix = '') {\n return interpolation3(getLView(), prefix, v0, i0, v1, i1, v2, suffix);\n}\nfunction \u0275\u0275interpolate4(prefix, v0, i0, v1, i1, v2, i2, v3, suffix = '') {\n return interpolation4(getLView(), prefix, v0, i0, v1, i1, v2, i2, v3, suffix);\n}\nfunction \u0275\u0275interpolate5(prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, suffix = '') {\n return interpolation5(getLView(), prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, suffix);\n}\nfunction \u0275\u0275interpolate6(prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, suffix = '') {\n return interpolation6(getLView(), prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, suffix);\n}\nfunction \u0275\u0275interpolate7(prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, suffix = '') {\n return interpolation7(getLView(), prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, suffix);\n}\nfunction \u0275\u0275interpolate8(prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, i6, v7, suffix = '') {\n return interpolation8(getLView(), prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, i6, v7, suffix);\n}\nfunction \u0275\u0275interpolateV(values) {\n return interpolationV(getLView(), values);\n}\nfunction \u0275\u0275arrowFunction(slotOffset, factory, context) {\n const bindingIndex = getBindingRoot() + slotOffset;\n const lView = getLView();\n return lView[bindingIndex] === NO_CHANGE ? updateBinding(lView, bindingIndex, factory(context, lView)) : getBinding(lView, bindingIndex);\n}\nfunction providersResolver(def, providers, isViewProviders) {\n const tView = getTView();\n if (tView.firstCreatePass) {\n resolveProvider(providers, tView.data, tView.blueprint, isComponentDef(def), isViewProviders);\n }\n}\nfunction resolveProvider(provider, tInjectables, lInjectablesBlueprint, isComponent, isViewProvider) {\n provider = resolveForwardRef(provider);\n if (Array.isArray(provider)) {\n for (let i = 0; i < provider.length; i++) {\n resolveProvider(provider[i], tInjectables, lInjectablesBlueprint, isComponent, isViewProvider);\n }\n } else {\n const tView = getTView();\n const lView = getLView();\n const tNode = getCurrentTNode();\n let token = isTypeProvider(provider) ? provider : resolveForwardRef(provider.provide);\n const providerFactory = providerToFactory(provider);\n if (ngDevMode) {\n const injector = new NodeInjector(tNode, lView);\n runInInjectorProfilerContext(injector, token, () => {\n emitProviderConfiguredEvent(provider, isViewProvider);\n });\n }\n const beginIndex = tNode.providerIndexes & 1048575;\n const endIndex = tNode.directiveStart;\n const cptViewProvidersCount = tNode.providerIndexes >> 20;\n if (isTypeProvider(provider) || !provider.multi) {\n const factory = new NodeInjectorFactory(providerFactory, isViewProvider, \u0275\u0275directiveInject, ngDevMode ? providerName(provider) : null);\n const existingFactoryIndex = indexOf(token, tInjectables, isViewProvider ? beginIndex : beginIndex + cptViewProvidersCount, endIndex);\n if (existingFactoryIndex === -1) {\n diPublicInInjector(getOrCreateNodeInjectorForNode(tNode, lView), tView, token);\n registerDestroyHooksIfSupported(tView, provider, tInjectables.length);\n tInjectables.push(token);\n tNode.directiveStart++;\n tNode.directiveEnd++;\n if (isViewProvider) {\n tNode.providerIndexes += 1048576;\n }\n lInjectablesBlueprint.push(factory);\n lView.push(factory);\n } else {\n lInjectablesBlueprint[existingFactoryIndex] = factory;\n lView[existingFactoryIndex] = factory;\n }\n } else {\n const existingProvidersFactoryIndex = indexOf(token, tInjectables, beginIndex + cptViewProvidersCount, endIndex);\n const existingViewProvidersFactoryIndex = indexOf(token, tInjectables, beginIndex, beginIndex + cptViewProvidersCount);\n const doesProvidersFactoryExist = existingProvidersFactoryIndex >= 0 && lInjectablesBlueprint[existingProvidersFactoryIndex];\n const doesViewProvidersFactoryExist = existingViewProvidersFactoryIndex >= 0 && lInjectablesBlueprint[existingViewProvidersFactoryIndex];\n if (isViewProvider && !doesViewProvidersFactoryExist || !isViewProvider && !doesProvidersFactoryExist) {\n diPublicInInjector(getOrCreateNodeInjectorForNode(tNode, lView), tView, token);\n const factory = multiFactory(isViewProvider ? multiViewProvidersFactoryResolver : multiProvidersFactoryResolver, lInjectablesBlueprint.length, isViewProvider, isComponent, providerFactory, provider);\n if (!isViewProvider && doesViewProvidersFactoryExist) {\n lInjectablesBlueprint[existingViewProvidersFactoryIndex].providerFactory = factory;\n }\n registerDestroyHooksIfSupported(tView, provider, tInjectables.length, 0);\n tInjectables.push(token);\n tNode.directiveStart++;\n tNode.directiveEnd++;\n if (isViewProvider) {\n tNode.providerIndexes += 1048576;\n }\n lInjectablesBlueprint.push(factory);\n lView.push(factory);\n } else {\n const indexInFactory = multiFactoryAdd(lInjectablesBlueprint[isViewProvider ? existingViewProvidersFactoryIndex : existingProvidersFactoryIndex], providerFactory, !isViewProvider && isComponent);\n registerDestroyHooksIfSupported(tView, provider, existingProvidersFactoryIndex > -1 ? existingProvidersFactoryIndex : existingViewProvidersFactoryIndex, indexInFactory);\n }\n if (!isViewProvider && isComponent && doesViewProvidersFactoryExist) {\n lInjectablesBlueprint[existingViewProvidersFactoryIndex].componentProviders++;\n }\n }\n }\n}\nfunction registerDestroyHooksIfSupported(tView, provider, contextIndex, indexInFactory) {\n const providerIsTypeProvider = isTypeProvider(provider);\n const providerIsClassProvider = isClassProvider(provider);\n if (providerIsTypeProvider || providerIsClassProvider) {\n const classToken = providerIsClassProvider ? resolveForwardRef(provider.useClass) : provider;\n const prototype = classToken.prototype;\n const ngOnDestroy = prototype.ngOnDestroy;\n if (ngOnDestroy) {\n const hooks = tView.destroyHooks || (tView.destroyHooks = []);\n if (!providerIsTypeProvider && provider.multi) {\n ngDevMode && assertDefined(indexInFactory, 'indexInFactory when registering multi factory destroy hook');\n const existingCallbacksIndex = hooks.indexOf(contextIndex);\n if (existingCallbacksIndex === -1) {\n hooks.push(contextIndex, [indexInFactory, ngOnDestroy]);\n } else {\n hooks[existingCallbacksIndex + 1].push(indexInFactory, ngOnDestroy);\n }\n } else {\n hooks.push(contextIndex, ngOnDestroy);\n }\n }\n }\n}\nfunction multiFactoryAdd(multiFactory, factory, isComponentProvider) {\n if (isComponentProvider) {\n multiFactory.componentProviders++;\n }\n return multiFactory.multi.push(factory) - 1;\n}\nfunction indexOf(item, arr, begin, end) {\n for (let i = begin; i < end; i++) {\n if (arr[i] === item) return i;\n }\n return -1;\n}\nfunction multiProvidersFactoryResolver(_, flags, tData, lData, tNode) {\n return multiResolve(this.multi, []);\n}\nfunction multiViewProvidersFactoryResolver(_, _flags, _tData, lView, tNode) {\n const factories = this.multi;\n let result;\n if (this.providerFactory) {\n const componentCount = this.providerFactory.componentProviders;\n const multiProviders = getNodeInjectable(lView, lView[TVIEW], this.providerFactory.index, tNode);\n result = multiProviders.slice(0, componentCount);\n multiResolve(factories, result);\n for (let i = componentCount; i < multiProviders.length; i++) {\n result.push(multiProviders[i]);\n }\n } else {\n result = [];\n multiResolve(factories, result);\n }\n return result;\n}\nfunction multiResolve(factories, result) {\n for (let i = 0; i < factories.length; i++) {\n const factory = factories[i];\n result.push(factory());\n }\n return result;\n}\nfunction multiFactory(factoryFn, index, isViewProvider, isComponent, f, provider) {\n const factory = new NodeInjectorFactory(factoryFn, isViewProvider, \u0275\u0275directiveInject, ngDevMode ? providerName(provider) : null);\n factory.multi = [];\n factory.index = index;\n factory.componentProviders = 0;\n multiFactoryAdd(factory, f, isComponent && !isViewProvider);\n return factory;\n}\nfunction providerName(provider) {\n if (Array.isArray(provider)) {\n return null;\n }\n if (isTypeProvider(provider)) {\n return provider.name;\n } else if (isClassProvider(provider)) {\n if (provider.provide instanceof InjectionToken) {\n return `('${provider.provide.toString()}':${provider.useClass.name})`;\n }\n return provider.useClass.name;\n } else if (provider.provide instanceof InjectionToken) {\n return provider.provide.toString();\n } else if (typeof provider.provide === 'string') {\n return provider.provide;\n } else {\n return null;\n }\n}\nfunction \u0275\u0275ProvidersFeature(providers, viewProviders) {\n return definition => {\n definition.providersResolver = (def, processProvidersFn) => providersResolver(def, processProvidersFn ? processProvidersFn(providers) : providers, false);\n if (viewProviders) {\n definition.viewProvidersResolver = (def, processProvidersFn) => providersResolver(def, processProvidersFn ? processProvidersFn(viewProviders) : viewProviders, true);\n }\n };\n}\nfunction \u0275\u0275ExternalStylesFeature(styleUrls) {\n return definition => {\n if (styleUrls.length < 1) {\n return;\n }\n definition.getExternalStyles = encapsulationId => {\n const urls = styleUrls.map(value => value + '?ngcomp' + (encapsulationId ? '=' + encodeURIComponent(encapsulationId) : '') + '&e=' + definition.encapsulation);\n return urls;\n };\n };\n}\nfunction \u0275\u0275setComponentScope(type, directives, pipes) {\n const def = type.\u0275cmp;\n def.directiveDefs = extractDefListOrFactory(directives, extractDirectiveDef);\n def.pipeDefs = extractDefListOrFactory(pipes, getPipeDef$1);\n}\nfunction \u0275\u0275setNgModuleScope(type, scope) {\n return noSideEffects(() => {\n const ngModuleDef = getNgModuleDefOrThrow(type);\n ngModuleDef.declarations = convertToTypeArray(scope.declarations || EMPTY_ARRAY);\n ngModuleDef.imports = convertToTypeArray(scope.imports || EMPTY_ARRAY);\n ngModuleDef.exports = convertToTypeArray(scope.exports || EMPTY_ARRAY);\n if (scope.bootstrap) {\n ngModuleDef.bootstrap = convertToTypeArray(scope.bootstrap);\n }\n depsTracker.registerNgModule(type, scope);\n });\n}\nfunction convertToTypeArray(values) {\n if (typeof values === 'function') {\n return values;\n }\n const flattenValues = flatten(values);\n if (flattenValues.some(isForwardRef)) {\n return () => flattenValues.map(resolveForwardRef).map(maybeUnwrapModuleWithProviders);\n } else {\n return flattenValues.map(maybeUnwrapModuleWithProviders);\n }\n}\nfunction maybeUnwrapModuleWithProviders(value) {\n return isModuleWithProviders(value) ? value.ngModule : value;\n}\nfunction \u0275\u0275pureFunction0(slotOffset, pureFn) {\n const bindingIndex = getBindingRoot() + slotOffset;\n const lView = getLView();\n return lView[bindingIndex] === NO_CHANGE ? updateBinding(lView, bindingIndex, pureFn()) : getBinding(lView, bindingIndex);\n}\nfunction \u0275\u0275pureFunction1(slotOffset, pureFn, exp) {\n return pureFunction1Internal(getLView(), getBindingRoot(), slotOffset, pureFn, exp);\n}\nfunction \u0275\u0275pureFunction2(slotOffset, pureFn, exp1, exp2) {\n return pureFunction2Internal(getLView(), getBindingRoot(), slotOffset, pureFn, exp1, exp2);\n}\nfunction \u0275\u0275pureFunction3(slotOffset, pureFn, exp1, exp2, exp3) {\n return pureFunction3Internal(getLView(), getBindingRoot(), slotOffset, pureFn, exp1, exp2, exp3);\n}\nfunction \u0275\u0275pureFunction4(slotOffset, pureFn, exp1, exp2, exp3, exp4, thisArg) {\n return pureFunction4Internal(getLView(), getBindingRoot(), slotOffset, pureFn, exp1, exp2, exp3, exp4);\n}\nfunction \u0275\u0275pureFunction5(slotOffset, pureFn, exp1, exp2, exp3, exp4, exp5) {\n const bindingIndex = getBindingRoot() + slotOffset;\n const lView = getLView();\n const different = bindingUpdated4(lView, bindingIndex, exp1, exp2, exp3, exp4);\n return bindingUpdated(lView, bindingIndex + 4, exp5) || different ? updateBinding(lView, bindingIndex + 5, pureFn(exp1, exp2, exp3, exp4, exp5)) : getBinding(lView, bindingIndex + 5);\n}\nfunction \u0275\u0275pureFunction6(slotOffset, pureFn, exp1, exp2, exp3, exp4, exp5, exp6) {\n const bindingIndex = getBindingRoot() + slotOffset;\n const lView = getLView();\n const different = bindingUpdated4(lView, bindingIndex, exp1, exp2, exp3, exp4);\n return bindingUpdated2(lView, bindingIndex + 4, exp5, exp6) || different ? updateBinding(lView, bindingIndex + 6, pureFn(exp1, exp2, exp3, exp4, exp5, exp6)) : getBinding(lView, bindingIndex + 6);\n}\nfunction \u0275\u0275pureFunction7(slotOffset, pureFn, exp1, exp2, exp3, exp4, exp5, exp6, exp7) {\n const bindingIndex = getBindingRoot() + slotOffset;\n const lView = getLView();\n let different = bindingUpdated4(lView, bindingIndex, exp1, exp2, exp3, exp4);\n return bindingUpdated3(lView, bindingIndex + 4, exp5, exp6, exp7) || different ? updateBinding(lView, bindingIndex + 7, pureFn(exp1, exp2, exp3, exp4, exp5, exp6, exp7)) : getBinding(lView, bindingIndex + 7);\n}\nfunction \u0275\u0275pureFunction8(slotOffset, pureFn, exp1, exp2, exp3, exp4, exp5, exp6, exp7, exp8) {\n const bindingIndex = getBindingRoot() + slotOffset;\n const lView = getLView();\n const different = bindingUpdated4(lView, bindingIndex, exp1, exp2, exp3, exp4);\n return bindingUpdated4(lView, bindingIndex + 4, exp5, exp6, exp7, exp8) || different ? updateBinding(lView, bindingIndex + 8, pureFn(exp1, exp2, exp3, exp4, exp5, exp6, exp7, exp8)) : getBinding(lView, bindingIndex + 8);\n}\nfunction \u0275\u0275pureFunctionV(slotOffset, pureFn, exps) {\n return pureFunctionVInternal(getLView(), getBindingRoot(), slotOffset, pureFn, exps);\n}\nfunction getPureFunctionReturnValue(lView, returnValueIndex) {\n ngDevMode && assertIndexInRange(lView, returnValueIndex);\n const lastReturnValue = lView[returnValueIndex];\n return lastReturnValue === NO_CHANGE ? undefined : lastReturnValue;\n}\nfunction pureFunction1Internal(lView, bindingRoot, slotOffset, pureFn, exp, thisArg) {\n const bindingIndex = bindingRoot + slotOffset;\n return bindingUpdated(lView, bindingIndex, exp) ? updateBinding(lView, bindingIndex + 1, thisArg ? pureFn.call(thisArg, exp) : pureFn(exp)) : getPureFunctionReturnValue(lView, bindingIndex + 1);\n}\nfunction pureFunction2Internal(lView, bindingRoot, slotOffset, pureFn, exp1, exp2, thisArg) {\n const bindingIndex = bindingRoot + slotOffset;\n return bindingUpdated2(lView, bindingIndex, exp1, exp2) ? updateBinding(lView, bindingIndex + 2, thisArg ? pureFn.call(thisArg, exp1, exp2) : pureFn(exp1, exp2)) : getPureFunctionReturnValue(lView, bindingIndex + 2);\n}\nfunction pureFunction3Internal(lView, bindingRoot, slotOffset, pureFn, exp1, exp2, exp3, thisArg) {\n const bindingIndex = bindingRoot + slotOffset;\n return bindingUpdated3(lView, bindingIndex, exp1, exp2, exp3) ? updateBinding(lView, bindingIndex + 3, thisArg ? pureFn.call(thisArg, exp1, exp2, exp3) : pureFn(exp1, exp2, exp3)) : getPureFunctionReturnValue(lView, bindingIndex + 3);\n}\nfunction pureFunction4Internal(lView, bindingRoot, slotOffset, pureFn, exp1, exp2, exp3, exp4, thisArg) {\n const bindingIndex = bindingRoot + slotOffset;\n return bindingUpdated4(lView, bindingIndex, exp1, exp2, exp3, exp4) ? updateBinding(lView, bindingIndex + 4, thisArg ? pureFn.call(thisArg, exp1, exp2, exp3, exp4) : pureFn(exp1, exp2, exp3, exp4)) : getPureFunctionReturnValue(lView, bindingIndex + 4);\n}\nfunction pureFunctionVInternal(lView, bindingRoot, slotOffset, pureFn, exps, thisArg) {\n let bindingIndex = bindingRoot + slotOffset;\n let different = false;\n for (let i = 0; i < exps.length; i++) {\n bindingUpdated(lView, bindingIndex++, exps[i]) && (different = true);\n }\n return different ? updateBinding(lView, bindingIndex, pureFn.apply(thisArg, exps)) : getPureFunctionReturnValue(lView, bindingIndex);\n}\nfunction \u0275\u0275pipe(index, pipeName) {\n const tView = getTView();\n let pipeDef;\n const adjustedIndex = index + HEADER_OFFSET;\n if (tView.firstCreatePass) {\n pipeDef = getPipeDef(pipeName, tView.pipeRegistry);\n tView.data[adjustedIndex] = pipeDef;\n if (pipeDef.onDestroy) {\n (tView.destroyHooks ??= []).push(adjustedIndex, pipeDef.onDestroy);\n }\n } else {\n pipeDef = tView.data[adjustedIndex];\n }\n const pipeFactory = pipeDef.factory || (pipeDef.factory = getFactoryDef(pipeDef.type, true));\n let previousInjectorProfilerContext;\n if (ngDevMode) {\n previousInjectorProfilerContext = setInjectorProfilerContext({\n injector: new NodeInjector(getCurrentTNode(), getLView()),\n token: pipeDef.type\n });\n }\n const previousInjectImplementation = setInjectImplementation(\u0275\u0275directiveInject);\n try {\n const previousIncludeViewProviders = setIncludeViewProviders(false);\n const pipeInstance = pipeFactory();\n setIncludeViewProviders(previousIncludeViewProviders);\n store(tView, getLView(), adjustedIndex, pipeInstance);\n return pipeInstance;\n } finally {\n setInjectImplementation(previousInjectImplementation);\n ngDevMode && setInjectorProfilerContext(previousInjectorProfilerContext);\n }\n}\nfunction getPipeDef(name, registry) {\n if (registry) {\n if (ngDevMode) {\n const pipes = registry.filter(pipe => pipe.name === name);\n if (pipes.length > 1) {\n console.warn(formatRuntimeError(313, getMultipleMatchingPipesMessage(name)));\n }\n }\n for (let i = registry.length - 1; i >= 0; i--) {\n const pipeDef = registry[i];\n if (name === pipeDef.name) {\n return pipeDef;\n }\n }\n }\n if (ngDevMode) {\n throw new RuntimeError(-302, getPipeNotFoundErrorMessage(name));\n }\n return;\n}\nfunction getMultipleMatchingPipesMessage(name) {\n const lView = getLView();\n const declarationLView = lView[DECLARATION_COMPONENT_VIEW];\n const context = declarationLView[CONTEXT];\n const hostIsStandalone = isHostComponentStandalone(lView);\n const componentInfoMessage = context ? ` in the '${context.constructor.name}' component` : '';\n const verifyMessage = `check ${hostIsStandalone ? \"'@Component.imports' of this component\" : 'the imports of this module'}`;\n const errorMessage = `Multiple pipes match the name \\`${name}\\`${componentInfoMessage}. ${verifyMessage}`;\n return errorMessage;\n}\nfunction getPipeNotFoundErrorMessage(name) {\n const lView = getLView();\n const declarationLView = lView[DECLARATION_COMPONENT_VIEW];\n const context = declarationLView[CONTEXT];\n const hostIsStandalone = isHostComponentStandalone(lView);\n const componentInfoMessage = context ? ` in the '${context.constructor.name}' component` : '';\n const verifyMessage = `Verify that it is ${hostIsStandalone ? \"included in the '@Component.imports' of this component\" : 'declared or imported in this module'}`;\n const errorMessage = `The pipe '${name}' could not be found${componentInfoMessage}. ${verifyMessage}`;\n return errorMessage;\n}\nfunction \u0275\u0275pipeBind1(index, offset, v1) {\n const adjustedIndex = index + HEADER_OFFSET;\n const lView = getLView();\n const pipeInstance = load(lView, adjustedIndex);\n return isPure(lView, adjustedIndex) ? pureFunction1Internal(lView, getBindingRoot(), offset, pipeInstance.transform, v1, pipeInstance) : pipeInstance.transform(v1);\n}\nfunction \u0275\u0275pipeBind2(index, slotOffset, v1, v2) {\n const adjustedIndex = index + HEADER_OFFSET;\n const lView = getLView();\n const pipeInstance = load(lView, adjustedIndex);\n return isPure(lView, adjustedIndex) ? pureFunction2Internal(lView, getBindingRoot(), slotOffset, pipeInstance.transform, v1, v2, pipeInstance) : pipeInstance.transform(v1, v2);\n}\nfunction \u0275\u0275pipeBind3(index, slotOffset, v1, v2, v3) {\n const adjustedIndex = index + HEADER_OFFSET;\n const lView = getLView();\n const pipeInstance = load(lView, adjustedIndex);\n return isPure(lView, adjustedIndex) ? pureFunction3Internal(lView, getBindingRoot(), slotOffset, pipeInstance.transform, v1, v2, v3, pipeInstance) : pipeInstance.transform(v1, v2, v3);\n}\nfunction \u0275\u0275pipeBind4(index, slotOffset, v1, v2, v3, v4) {\n const adjustedIndex = index + HEADER_OFFSET;\n const lView = getLView();\n const pipeInstance = load(lView, adjustedIndex);\n return isPure(lView, adjustedIndex) ? pureFunction4Internal(lView, getBindingRoot(), slotOffset, pipeInstance.transform, v1, v2, v3, v4, pipeInstance) : pipeInstance.transform(v1, v2, v3, v4);\n}\nfunction \u0275\u0275pipeBindV(index, slotOffset, values) {\n const adjustedIndex = index + HEADER_OFFSET;\n const lView = getLView();\n const pipeInstance = load(lView, adjustedIndex);\n return isPure(lView, adjustedIndex) ? pureFunctionVInternal(lView, getBindingRoot(), slotOffset, pipeInstance.transform, values, pipeInstance) : pipeInstance.transform.apply(pipeInstance, values);\n}\nfunction isPure(lView, index) {\n return lView[TVIEW].data[index].pure;\n}\nfunction \u0275\u0275templateRefExtractor(tNode, lView) {\n return createTemplateRef(tNode, lView);\n}\nfunction \u0275\u0275getComponentDepsFactory(type, rawImports) {\n return () => {\n try {\n return depsTracker.getComponentDependencies(type, rawImports).dependencies;\n } catch (e) {\n console.error(`Computing dependencies in local compilation mode for the component \"${type.name}\" failed with the exception:`, e);\n throw e;\n }\n };\n}\nfunction \u0275setClassDebugInfo(type, debugInfo) {\n const def = getComponentDef(type);\n if (def !== null) {\n def.debugInfo = debugInfo;\n }\n}\nfunction \u0275\u0275getReplaceMetadataURL(id, timestamp, base) {\n const url = `./@ng/component?c=${id}&t=${encodeURIComponent(timestamp)}`;\n return new URL(url, base).href;\n}\nfunction \u0275\u0275replaceMetadata(type, applyMetadata, namespaces, locals, importMeta = null, id = null) {\n ngDevMode && assertComponentDef(type);\n const currentDef = getComponentDef(type);\n applyMetadata.apply(null, [type, namespaces, ...locals]);\n const {\n newDef,\n oldDef\n } = mergeWithExistingDefinition(currentDef, getComponentDef(type));\n type[NG_COMP_DEF] = newDef;\n if (oldDef.tView) {\n const trackedViews = getTrackedLViews().values();\n for (const root of trackedViews) {\n if (isRootView(root) && root[PARENT] === null) {\n recreateMatchingLViews(importMeta, id, newDef, oldDef, root);\n }\n }\n }\n}\nfunction mergeWithExistingDefinition(currentDef, newDef) {\n const clone = {\n ...currentDef\n };\n const replacement = Object.assign(currentDef, newDef, {\n directiveDefs: clone.directiveDefs,\n pipeDefs: clone.pipeDefs,\n setInput: clone.setInput,\n type: clone.type\n });\n ngDevMode && assertEqual(replacement, currentDef, 'Expected definition to be merged in place');\n return {\n newDef: replacement,\n oldDef: clone\n };\n}\nfunction recreateMatchingLViews(importMeta, id, newDef, oldDef, rootLView) {\n ngDevMode && assertDefined(oldDef.tView, 'Expected a component definition that has been instantiated at least once');\n const tView = rootLView[TVIEW];\n if (tView === oldDef.tView) {\n ngDevMode && assertComponentDef(oldDef.type);\n recreateLView(importMeta, id, newDef, oldDef, rootLView);\n return;\n }\n for (let i = HEADER_OFFSET; i < tView.bindingStartIndex; i++) {\n const current = rootLView[i];\n if (isLContainer(current)) {\n if (isLView(current[HOST])) {\n recreateMatchingLViews(importMeta, id, newDef, oldDef, current[HOST]);\n }\n for (let j = CONTAINER_HEADER_OFFSET; j < current.length; j++) {\n recreateMatchingLViews(importMeta, id, newDef, oldDef, current[j]);\n }\n } else if (isLView(current)) {\n recreateMatchingLViews(importMeta, id, newDef, oldDef, current);\n }\n }\n}\nfunction clearRendererCache(factory, def) {\n factory.componentReplaced?.(def.id);\n}\nfunction recreateLView(importMeta, id, newDef, oldDef, lView) {\n const instance = lView[CONTEXT];\n let host = lView[HOST];\n const parentLView = lView[PARENT];\n ngDevMode && assertLView(parentLView);\n const tNode = lView[T_HOST];\n ngDevMode && assertTNodeType(tNode, 2);\n ngDevMode && assertNotEqual(newDef, oldDef, 'Expected different component definition');\n const zone = lView[INJECTOR].get(NgZone, null);\n const recreate = () => {\n if (oldDef.encapsulation === ViewEncapsulation.ShadowDom || oldDef.encapsulation === ViewEncapsulation.ExperimentalIsolatedShadowDom) {\n const newHost = host.cloneNode(false);\n host.replaceWith(newHost);\n host = newHost;\n }\n const newTView = getOrCreateComponentTView(newDef);\n const newLView = createLView(parentLView, newTView, instance, getInitialLViewFlagsFromDef(newDef), host, tNode, null, null, null, null, null);\n replaceLViewInTree(parentLView, lView, newLView, tNode.index);\n destroyLView(lView[TVIEW], lView);\n const rendererFactory = lView[ENVIRONMENT].rendererFactory;\n clearRendererCache(rendererFactory, oldDef);\n newLView[RENDERER] = rendererFactory.createRenderer(host, newDef);\n removeViewFromDOM(lView[TVIEW], lView);\n resetProjectionState(tNode);\n renderView(newTView, newLView, instance);\n refreshView(newTView, newLView, newTView.template, instance);\n };\n if (zone === null) {\n executeWithInvalidateFallback(importMeta, id, recreate);\n } else {\n zone.run(() => executeWithInvalidateFallback(importMeta, id, recreate));\n }\n}\nfunction executeWithInvalidateFallback(importMeta, id, callback) {\n try {\n callback();\n } catch (e) {\n const error = e;\n if (id !== null && error.message) {\n const toLog = error.message + (error.stack ? '\\n' + error.stack : '');\n importMeta?.hot?.send?.('angular:invalidate', {\n id,\n message: toLog,\n error: true\n });\n }\n throw e;\n }\n}\nfunction replaceLViewInTree(parentLView, oldLView, newLView, index) {\n for (let i = HEADER_OFFSET; i < parentLView[TVIEW].bindingStartIndex; i++) {\n const current = parentLView[i];\n if ((isLView(current) || isLContainer(current)) && current[NEXT] === oldLView) {\n current[NEXT] = newLView;\n break;\n }\n }\n if (parentLView[CHILD_HEAD] === oldLView) {\n parentLView[CHILD_HEAD] = newLView;\n }\n if (parentLView[CHILD_TAIL] === oldLView) {\n parentLView[CHILD_TAIL] = newLView;\n }\n newLView[NEXT] = oldLView[NEXT];\n oldLView[NEXT] = null;\n parentLView[index] = newLView;\n}\nfunction resetProjectionState(tNode) {\n if (tNode.projection !== null) {\n for (const current of tNode.projection) {\n if (isTNodeShape(current)) {\n current.projectionNext = null;\n current.flags &= ~2;\n }\n }\n tNode.projection = null;\n }\n}\nconst angularCoreEnv = /*#__PURE__*/(() => ({\n '\u0275\u0275animateEnter': \u0275\u0275animateEnter,\n '\u0275\u0275animateEnterListener': \u0275\u0275animateEnterListener,\n '\u0275\u0275animateLeave': \u0275\u0275animateLeave,\n '\u0275\u0275animateLeaveListener': \u0275\u0275animateLeaveListener,\n '\u0275\u0275attribute': \u0275\u0275attribute,\n '\u0275\u0275defineComponent': \u0275\u0275defineComponent,\n '\u0275\u0275defineDirective': \u0275\u0275defineDirective,\n '\u0275\u0275defineInjectable': __defineInjectable,\n '\u0275\u0275defineInjector': __defineInjector,\n '\u0275\u0275defineNgModule': \u0275\u0275defineNgModule,\n '\u0275\u0275definePipe': \u0275\u0275definePipe,\n '\u0275\u0275directiveInject': \u0275\u0275directiveInject,\n '\u0275\u0275getInheritedFactory': \u0275\u0275getInheritedFactory,\n '\u0275\u0275inject': __inject,\n '\u0275\u0275injectAttribute': \u0275\u0275injectAttribute,\n '\u0275\u0275invalidFactory': \u0275\u0275invalidFactory,\n '\u0275\u0275invalidFactoryDep': __invalidFactoryDep,\n '\u0275\u0275templateRefExtractor': \u0275\u0275templateRefExtractor,\n '\u0275\u0275resetView': __resetView,\n '\u0275\u0275HostDirectivesFeature': \u0275\u0275HostDirectivesFeature,\n '\u0275\u0275NgOnChangesFeature': \u0275\u0275NgOnChangesFeature,\n '\u0275\u0275ControlFeature': \u0275\u0275ControlFeature,\n '\u0275\u0275ProvidersFeature': \u0275\u0275ProvidersFeature,\n '\u0275\u0275InheritDefinitionFeature': \u0275\u0275InheritDefinitionFeature,\n '\u0275\u0275ExternalStylesFeature': \u0275\u0275ExternalStylesFeature,\n '\u0275\u0275nextContext': \u0275\u0275nextContext,\n '\u0275\u0275namespaceHTML': __namespaceHTML,\n '\u0275\u0275namespaceMathML': __namespaceMathML,\n '\u0275\u0275namespaceSVG': __namespaceSVG,\n '\u0275\u0275enableBindings': __enableBindings,\n '\u0275\u0275disableBindings': __disableBindings,\n '\u0275\u0275elementStart': \u0275\u0275elementStart,\n '\u0275\u0275elementEnd': \u0275\u0275elementEnd,\n '\u0275\u0275element': \u0275\u0275element,\n '\u0275\u0275elementContainerStart': \u0275\u0275elementContainerStart,\n '\u0275\u0275elementContainerEnd': \u0275\u0275elementContainerEnd,\n '\u0275\u0275domElement': \u0275\u0275domElement,\n '\u0275\u0275domElementStart': \u0275\u0275domElementStart,\n '\u0275\u0275domElementEnd': \u0275\u0275domElementEnd,\n '\u0275\u0275domElementContainer': \u0275\u0275domElementContainer,\n '\u0275\u0275domElementContainerStart': \u0275\u0275domElementContainerStart,\n '\u0275\u0275domElementContainerEnd': \u0275\u0275domElementContainerEnd,\n '\u0275\u0275domTemplate': \u0275\u0275domTemplate,\n '\u0275\u0275domListener': \u0275\u0275domListener,\n '\u0275\u0275elementContainer': \u0275\u0275elementContainer,\n '\u0275\u0275pureFunction0': \u0275\u0275pureFunction0,\n '\u0275\u0275pureFunction1': \u0275\u0275pureFunction1,\n '\u0275\u0275pureFunction2': \u0275\u0275pureFunction2,\n '\u0275\u0275pureFunction3': \u0275\u0275pureFunction3,\n '\u0275\u0275pureFunction4': \u0275\u0275pureFunction4,\n '\u0275\u0275pureFunction5': \u0275\u0275pureFunction5,\n '\u0275\u0275pureFunction6': \u0275\u0275pureFunction6,\n '\u0275\u0275pureFunction7': \u0275\u0275pureFunction7,\n '\u0275\u0275pureFunction8': \u0275\u0275pureFunction8,\n '\u0275\u0275pureFunctionV': \u0275\u0275pureFunctionV,\n '\u0275\u0275getCurrentView': \u0275\u0275getCurrentView,\n '\u0275\u0275restoreView': __restoreView,\n '\u0275\u0275listener': \u0275\u0275listener,\n '\u0275\u0275projection': \u0275\u0275projection,\n '\u0275\u0275syntheticHostProperty': \u0275\u0275syntheticHostProperty,\n '\u0275\u0275syntheticHostListener': \u0275\u0275syntheticHostListener,\n '\u0275\u0275pipeBind1': \u0275\u0275pipeBind1,\n '\u0275\u0275pipeBind2': \u0275\u0275pipeBind2,\n '\u0275\u0275pipeBind3': \u0275\u0275pipeBind3,\n '\u0275\u0275pipeBind4': \u0275\u0275pipeBind4,\n '\u0275\u0275pipeBindV': \u0275\u0275pipeBindV,\n '\u0275\u0275projectionDef': \u0275\u0275projectionDef,\n '\u0275\u0275domProperty': \u0275\u0275domProperty,\n '\u0275\u0275ariaProperty': \u0275\u0275ariaProperty,\n '\u0275\u0275property': \u0275\u0275property,\n '\u0275\u0275control': \u0275\u0275control,\n '\u0275\u0275controlCreate': \u0275\u0275controlCreate,\n '\u0275\u0275pipe': \u0275\u0275pipe,\n '\u0275\u0275queryRefresh': \u0275\u0275queryRefresh,\n '\u0275\u0275queryAdvance': \u0275\u0275queryAdvance,\n '\u0275\u0275viewQuery': \u0275\u0275viewQuery,\n '\u0275\u0275viewQuerySignal': \u0275\u0275viewQuerySignal,\n '\u0275\u0275loadQuery': \u0275\u0275loadQuery,\n '\u0275\u0275contentQuery': \u0275\u0275contentQuery,\n '\u0275\u0275contentQuerySignal': \u0275\u0275contentQuerySignal,\n '\u0275\u0275reference': \u0275\u0275reference,\n '\u0275\u0275classMap': \u0275\u0275classMap,\n '\u0275\u0275styleMap': \u0275\u0275styleMap,\n '\u0275\u0275styleProp': \u0275\u0275styleProp,\n '\u0275\u0275classProp': \u0275\u0275classProp,\n '\u0275\u0275advance': \u0275\u0275advance,\n '\u0275\u0275template': \u0275\u0275template,\n '\u0275\u0275conditional': \u0275\u0275conditional,\n '\u0275\u0275conditionalCreate': \u0275\u0275conditionalCreate,\n '\u0275\u0275conditionalBranchCreate': \u0275\u0275conditionalBranchCreate,\n '\u0275\u0275defer': \u0275\u0275defer,\n '\u0275\u0275deferWhen': \u0275\u0275deferWhen,\n '\u0275\u0275deferOnIdle': \u0275\u0275deferOnIdle,\n '\u0275\u0275deferOnImmediate': \u0275\u0275deferOnImmediate,\n '\u0275\u0275deferOnTimer': \u0275\u0275deferOnTimer,\n '\u0275\u0275deferOnHover': \u0275\u0275deferOnHover,\n '\u0275\u0275deferOnInteraction': \u0275\u0275deferOnInteraction,\n '\u0275\u0275deferOnViewport': \u0275\u0275deferOnViewport,\n '\u0275\u0275deferPrefetchWhen': \u0275\u0275deferPrefetchWhen,\n '\u0275\u0275deferPrefetchOnIdle': \u0275\u0275deferPrefetchOnIdle,\n '\u0275\u0275deferPrefetchOnImmediate': \u0275\u0275deferPrefetchOnImmediate,\n '\u0275\u0275deferPrefetchOnTimer': \u0275\u0275deferPrefetchOnTimer,\n '\u0275\u0275deferPrefetchOnHover': \u0275\u0275deferPrefetchOnHover,\n '\u0275\u0275deferPrefetchOnInteraction': \u0275\u0275deferPrefetchOnInteraction,\n '\u0275\u0275deferPrefetchOnViewport': \u0275\u0275deferPrefetchOnViewport,\n '\u0275\u0275deferHydrateWhen': \u0275\u0275deferHydrateWhen,\n '\u0275\u0275deferHydrateNever': \u0275\u0275deferHydrateNever,\n '\u0275\u0275deferHydrateOnIdle': \u0275\u0275deferHydrateOnIdle,\n '\u0275\u0275deferHydrateOnImmediate': \u0275\u0275deferHydrateOnImmediate,\n '\u0275\u0275deferHydrateOnTimer': \u0275\u0275deferHydrateOnTimer,\n '\u0275\u0275deferHydrateOnHover': \u0275\u0275deferHydrateOnHover,\n '\u0275\u0275deferHydrateOnInteraction': \u0275\u0275deferHydrateOnInteraction,\n '\u0275\u0275deferHydrateOnViewport': \u0275\u0275deferHydrateOnViewport,\n '\u0275\u0275deferEnableTimerScheduling': \u0275\u0275deferEnableTimerScheduling,\n '\u0275\u0275repeater': \u0275\u0275repeater,\n '\u0275\u0275repeaterCreate': \u0275\u0275repeaterCreate,\n '\u0275\u0275repeaterTrackByIndex': \u0275\u0275repeaterTrackByIndex,\n '\u0275\u0275repeaterTrackByIdentity': \u0275\u0275repeaterTrackByIdentity,\n '\u0275\u0275componentInstance': \u0275\u0275componentInstance,\n '\u0275\u0275text': \u0275\u0275text,\n '\u0275\u0275textInterpolate': \u0275\u0275textInterpolate,\n '\u0275\u0275textInterpolate1': \u0275\u0275textInterpolate1,\n '\u0275\u0275textInterpolate2': \u0275\u0275textInterpolate2,\n '\u0275\u0275textInterpolate3': \u0275\u0275textInterpolate3,\n '\u0275\u0275textInterpolate4': \u0275\u0275textInterpolate4,\n '\u0275\u0275textInterpolate5': \u0275\u0275textInterpolate5,\n '\u0275\u0275textInterpolate6': \u0275\u0275textInterpolate6,\n '\u0275\u0275textInterpolate7': \u0275\u0275textInterpolate7,\n '\u0275\u0275textInterpolate8': \u0275\u0275textInterpolate8,\n '\u0275\u0275textInterpolateV': \u0275\u0275textInterpolateV,\n '\u0275\u0275i18n': \u0275\u0275i18n,\n '\u0275\u0275i18nAttributes': \u0275\u0275i18nAttributes,\n '\u0275\u0275i18nExp': \u0275\u0275i18nExp,\n '\u0275\u0275i18nStart': \u0275\u0275i18nStart,\n '\u0275\u0275i18nEnd': \u0275\u0275i18nEnd,\n '\u0275\u0275i18nApply': \u0275\u0275i18nApply,\n '\u0275\u0275i18nPostprocess': \u0275\u0275i18nPostprocess,\n '\u0275\u0275resolveWindow': \u0275\u0275resolveWindow,\n '\u0275\u0275resolveDocument': \u0275\u0275resolveDocument,\n '\u0275\u0275resolveBody': \u0275\u0275resolveBody,\n '\u0275\u0275setComponentScope': \u0275\u0275setComponentScope,\n '\u0275\u0275setNgModuleScope': \u0275\u0275setNgModuleScope,\n '\u0275\u0275registerNgModuleType': registerNgModuleType,\n '\u0275\u0275getComponentDepsFactory': \u0275\u0275getComponentDepsFactory,\n '\u0275setClassDebugInfo': \u0275setClassDebugInfo,\n '\u0275\u0275declareLet': \u0275\u0275declareLet,\n '\u0275\u0275storeLet': \u0275\u0275storeLet,\n '\u0275\u0275arrowFunction': \u0275\u0275arrowFunction,\n '\u0275\u0275readContextLet': \u0275\u0275readContextLet,\n '\u0275\u0275attachSourceLocations': \u0275\u0275attachSourceLocations,\n '\u0275\u0275interpolate': \u0275\u0275interpolate,\n '\u0275\u0275interpolate1': \u0275\u0275interpolate1,\n '\u0275\u0275interpolate2': \u0275\u0275interpolate2,\n '\u0275\u0275interpolate3': \u0275\u0275interpolate3,\n '\u0275\u0275interpolate4': \u0275\u0275interpolate4,\n '\u0275\u0275interpolate5': \u0275\u0275interpolate5,\n '\u0275\u0275interpolate6': \u0275\u0275interpolate6,\n '\u0275\u0275interpolate7': \u0275\u0275interpolate7,\n '\u0275\u0275interpolate8': \u0275\u0275interpolate8,\n '\u0275\u0275interpolateV': \u0275\u0275interpolateV,\n '\u0275\u0275sanitizeHtml': \u0275\u0275sanitizeHtml,\n '\u0275\u0275sanitizeStyle': \u0275\u0275sanitizeStyle,\n '\u0275\u0275sanitizeResourceUrl': \u0275\u0275sanitizeResourceUrl,\n '\u0275\u0275sanitizeScript': \u0275\u0275sanitizeScript,\n '\u0275\u0275validateAttribute': \u0275\u0275validateAttribute,\n '\u0275\u0275sanitizeUrl': \u0275\u0275sanitizeUrl,\n '\u0275\u0275sanitizeUrlOrResourceUrl': \u0275\u0275sanitizeUrlOrResourceUrl,\n '\u0275\u0275trustConstantHtml': \u0275\u0275trustConstantHtml,\n '\u0275\u0275trustConstantResourceUrl': \u0275\u0275trustConstantResourceUrl,\n 'forwardRef': forwardRef,\n 'resolveForwardRef': resolveForwardRef,\n '\u0275\u0275twoWayProperty': \u0275\u0275twoWayProperty,\n '\u0275\u0275twoWayBindingSet': \u0275\u0275twoWayBindingSet,\n '\u0275\u0275twoWayListener': \u0275\u0275twoWayListener,\n '\u0275\u0275replaceMetadata': \u0275\u0275replaceMetadata,\n '\u0275\u0275getReplaceMetadataURL': \u0275\u0275getReplaceMetadataURL\n}))();\nlet jitOptions = null;\nfunction setJitOptions(options) {\n if (jitOptions !== null) {\n if (options.defaultEncapsulation !== jitOptions.defaultEncapsulation) {\n ngDevMode && console.error('Provided value for `defaultEncapsulation` can not be changed once it has been set.');\n return;\n }\n if (options.preserveWhitespaces !== jitOptions.preserveWhitespaces) {\n ngDevMode && console.error('Provided value for `preserveWhitespaces` can not be changed once it has been set.');\n return;\n }\n }\n jitOptions = options;\n}\nfunction getJitOptions() {\n return jitOptions;\n}\nfunction resetJitOptions() {\n jitOptions = null;\n}\nconst moduleQueue = [];\nfunction enqueueModuleForDelayedScoping(moduleType, ngModule) {\n moduleQueue.push({\n moduleType,\n ngModule\n });\n}\nlet flushingModuleQueue = false;\nfunction flushModuleScopingQueueAsMuchAsPossible() {\n if (!flushingModuleQueue) {\n flushingModuleQueue = true;\n try {\n for (let i = moduleQueue.length - 1; i >= 0; i--) {\n const {\n moduleType,\n ngModule\n } = moduleQueue[i];\n if (ngModule.declarations && ngModule.declarations.every(isResolvedDeclaration)) {\n moduleQueue.splice(i, 1);\n setScopeOnDeclaredComponents(moduleType, ngModule);\n }\n }\n } finally {\n flushingModuleQueue = false;\n }\n }\n}\nfunction isResolvedDeclaration(declaration) {\n if (Array.isArray(declaration)) {\n return declaration.every(isResolvedDeclaration);\n }\n return !!resolveForwardRef(declaration);\n}\nfunction compileNgModule(moduleType, ngModule = {}) {\n compileNgModuleDefs(moduleType, ngModule);\n if (ngModule.id !== undefined) {\n registerNgModuleType(moduleType, ngModule.id);\n }\n enqueueModuleForDelayedScoping(moduleType, ngModule);\n}\nfunction compileNgModuleDefs(moduleType, ngModule, allowDuplicateDeclarationsInRoot = false) {\n ngDevMode && assertDefined(moduleType, 'Required value moduleType');\n ngDevMode && assertDefined(ngModule, 'Required value ngModule');\n const declarations = flatten(ngModule.declarations || EMPTY_ARRAY);\n let ngModuleDef = null;\n Object.defineProperty(moduleType, NG_MOD_DEF, {\n configurable: true,\n get: () => {\n if (ngModuleDef === null) {\n if (ngDevMode && ngModule.imports && ngModule.imports.indexOf(moduleType) > -1) {\n throw new Error(`'${stringifyForError(moduleType)}' module can't import itself`);\n }\n const compiler = getCompilerFacade({\n usage: 0,\n kind: 'NgModule',\n type: moduleType\n });\n ngModuleDef = compiler.compileNgModule(angularCoreEnv, `ng:///${moduleType.name}/\u0275mod.js`, {\n type: moduleType,\n bootstrap: flatten(ngModule.bootstrap || EMPTY_ARRAY).map(resolveForwardRef),\n declarations: declarations.map(resolveForwardRef),\n imports: flatten(ngModule.imports || EMPTY_ARRAY).map(resolveForwardRef).map(expandModuleWithProviders),\n exports: flatten(ngModule.exports || EMPTY_ARRAY).map(resolveForwardRef).map(expandModuleWithProviders),\n schemas: ngModule.schemas ? flatten(ngModule.schemas) : null,\n id: ngModule.id || null\n });\n if (!ngModuleDef.schemas) {\n ngModuleDef.schemas = [];\n }\n }\n return ngModuleDef;\n }\n });\n let ngFactoryDef = null;\n Object.defineProperty(moduleType, NG_FACTORY_DEF, {\n get: () => {\n if (ngFactoryDef === null) {\n const compiler = getCompilerFacade({\n usage: 0,\n kind: 'NgModule',\n type: moduleType\n });\n ngFactoryDef = compiler.compileFactory(angularCoreEnv, `ng:///${moduleType.name}/\u0275fac.js`, {\n name: moduleType.name,\n type: moduleType,\n deps: reflectDependencies(moduleType),\n target: compiler.FactoryTarget.NgModule,\n typeArgumentCount: 0\n });\n }\n return ngFactoryDef;\n },\n configurable: !!ngDevMode\n });\n let ngInjectorDef = null;\n Object.defineProperty(moduleType, NG_INJ_DEF, {\n get: () => {\n if (ngInjectorDef === null) {\n ngDevMode && verifySemanticsOfNgModuleDef(moduleType, allowDuplicateDeclarationsInRoot);\n const meta = {\n name: moduleType.name,\n type: moduleType,\n providers: ngModule.providers || EMPTY_ARRAY,\n imports: [(ngModule.imports || EMPTY_ARRAY).map(resolveForwardRef), (ngModule.exports || EMPTY_ARRAY).map(resolveForwardRef)]\n };\n const compiler = getCompilerFacade({\n usage: 0,\n kind: 'NgModule',\n type: moduleType\n });\n ngInjectorDef = compiler.compileInjector(angularCoreEnv, `ng:///${moduleType.name}/\u0275inj.js`, meta);\n }\n return ngInjectorDef;\n },\n configurable: !!ngDevMode\n });\n}\nfunction generateStandaloneInDeclarationsError(type, location) {\n const prefix = `Unexpected \"${stringifyForError(type)}\" found in the \"declarations\" array of the`;\n const suffix = `\"${stringifyForError(type)}\" is marked as standalone and can't be declared ` + 'in any NgModule - did you intend to import it instead (by adding it to the \"imports\" array)?';\n return `${prefix} ${location}, ${suffix}`;\n}\nfunction verifySemanticsOfNgModuleDef(moduleType, allowDuplicateDeclarationsInRoot, importingModule) {\n if (verifiedNgModule.get(moduleType)) return;\n if (isStandalone(moduleType)) return;\n verifiedNgModule.set(moduleType, true);\n moduleType = resolveForwardRef(moduleType);\n let ngModuleDef;\n if (importingModule) {\n ngModuleDef = getNgModuleDef(moduleType);\n if (!ngModuleDef) {\n throw new Error(`Unexpected value '${moduleType.name}' imported by the module '${importingModule.name}'. Please add an @NgModule annotation.`);\n }\n } else {\n ngModuleDef = getNgModuleDefOrThrow(moduleType);\n }\n const errors = [];\n const declarations = maybeUnwrapFn(ngModuleDef.declarations);\n const imports = maybeUnwrapFn(ngModuleDef.imports);\n flatten(imports).map(unwrapModuleWithProvidersImports).forEach(modOrStandaloneCmpt => {\n verifySemanticsOfNgModuleImport(modOrStandaloneCmpt, moduleType);\n verifySemanticsOfNgModuleDef(modOrStandaloneCmpt, false, moduleType);\n });\n const exports = maybeUnwrapFn(ngModuleDef.exports);\n declarations.forEach(verifyDeclarationsHaveDefinitions);\n declarations.forEach(verifyDirectivesHaveSelector);\n declarations.forEach(declarationType => verifyNotStandalone(declarationType, moduleType));\n const combinedDeclarations = [...declarations.map(resolveForwardRef), ...flatten(imports.map(computeCombinedExports)).map(resolveForwardRef)];\n exports.forEach(verifyExportsAreDeclaredOrReExported);\n declarations.forEach(decl => verifyDeclarationIsUnique(decl, allowDuplicateDeclarationsInRoot));\n const ngModule = getAnnotation(moduleType, 'NgModule');\n if (ngModule) {\n ngModule.imports && flatten(ngModule.imports).map(unwrapModuleWithProvidersImports).forEach(mod => {\n verifySemanticsOfNgModuleImport(mod, moduleType);\n verifySemanticsOfNgModuleDef(mod, false, moduleType);\n });\n ngModule.bootstrap && deepForEach(ngModule.bootstrap, verifyCorrectBootstrapType);\n ngModule.bootstrap && deepForEach(ngModule.bootstrap, verifyComponentIsPartOfNgModule);\n }\n if (errors.length) {\n throw new Error(errors.join('\\n'));\n }\n function verifyDeclarationsHaveDefinitions(type) {\n type = resolveForwardRef(type);\n const def = getComponentDef(type) || getDirectiveDef(type) || getPipeDef$1(type);\n if (!def) {\n errors.push(`Unexpected value '${stringifyForError(type)}' declared by the module '${stringifyForError(moduleType)}'. Please add a @Pipe/@Directive/@Component annotation.`);\n }\n }\n function verifyDirectivesHaveSelector(type) {\n type = resolveForwardRef(type);\n const def = getDirectiveDef(type);\n if (!getComponentDef(type) && def && def.selectors.length == 0) {\n errors.push(`Directive ${stringifyForError(type)} has no selector, please add it!`);\n }\n }\n function verifyNotStandalone(type, moduleType) {\n type = resolveForwardRef(type);\n const def = getComponentDef(type) || getDirectiveDef(type) || getPipeDef$1(type);\n if (def?.standalone) {\n const location = `\"${stringifyForError(moduleType)}\" NgModule`;\n errors.push(generateStandaloneInDeclarationsError(type, location));\n }\n }\n function verifyExportsAreDeclaredOrReExported(type) {\n type = resolveForwardRef(type);\n const kind = getComponentDef(type) && 'component' || getDirectiveDef(type) && 'directive' || getPipeDef$1(type) && 'pipe';\n if (kind) {\n if (combinedDeclarations.lastIndexOf(type) === -1) {\n errors.push(`Can't export ${kind} ${stringifyForError(type)} from ${stringifyForError(moduleType)} as it was neither declared nor imported!`);\n }\n }\n }\n function verifyDeclarationIsUnique(type, suppressErrors) {\n type = resolveForwardRef(type);\n const existingModule = ownerNgModule.get(type);\n if (existingModule && existingModule !== moduleType) {\n if (!suppressErrors) {\n const modules = [existingModule, moduleType].map(stringifyForError).sort();\n errors.push(`Type ${stringifyForError(type)} is part of the declarations of 2 modules: ${modules[0]} and ${modules[1]}! ` + `Please consider moving ${stringifyForError(type)} to a higher module that imports ${modules[0]} and ${modules[1]}. ` + `You can also create a new NgModule that exports and includes ${stringifyForError(type)} then import that NgModule in ${modules[0]} and ${modules[1]}.`);\n }\n } else {\n ownerNgModule.set(type, moduleType);\n }\n }\n function verifyComponentIsPartOfNgModule(type) {\n type = resolveForwardRef(type);\n const existingModule = ownerNgModule.get(type);\n if (!existingModule && !isStandalone(type)) {\n errors.push(`Component ${stringifyForError(type)} is not part of any NgModule or the module has not been imported into your module.`);\n }\n }\n function verifyCorrectBootstrapType(type) {\n type = resolveForwardRef(type);\n if (!getComponentDef(type)) {\n errors.push(`${stringifyForError(type)} cannot be used as an entry component.`);\n }\n if (isStandalone(type)) {\n errors.push(`The \\`${stringifyForError(type)}\\` class is a standalone component, which can ` + `not be used in the \\`@NgModule.bootstrap\\` array. Use the \\`bootstrapApplication\\` ` + `function for bootstrap instead.`);\n }\n }\n function verifySemanticsOfNgModuleImport(type, importingModule) {\n type = resolveForwardRef(type);\n const directiveDef = getComponentDef(type) || getDirectiveDef(type);\n if (directiveDef !== null && !directiveDef.standalone) {\n throw new Error(`Unexpected directive '${type.name}' imported by the module '${importingModule.name}'. Please add an @NgModule annotation.`);\n }\n const pipeDef = getPipeDef$1(type);\n if (pipeDef !== null && !pipeDef.standalone) {\n throw new Error(`Unexpected pipe '${type.name}' imported by the module '${importingModule.name}'. Please add an @NgModule annotation.`);\n }\n }\n}\nfunction unwrapModuleWithProvidersImports(typeOrWithProviders) {\n typeOrWithProviders = resolveForwardRef(typeOrWithProviders);\n return typeOrWithProviders.ngModule || typeOrWithProviders;\n}\nfunction getAnnotation(type, name) {\n let annotation = null;\n collect(type.__annotations__);\n collect(type.decorators);\n return annotation;\n function collect(annotations) {\n if (annotations) {\n annotations.forEach(readAnnotation);\n }\n }\n function readAnnotation(decorator) {\n if (!annotation) {\n const proto = Object.getPrototypeOf(decorator);\n if (proto.ngMetadataName == name) {\n annotation = decorator;\n } else if (decorator.type) {\n const proto = Object.getPrototypeOf(decorator.type);\n if (proto.ngMetadataName == name) {\n annotation = decorator.args[0];\n }\n }\n }\n }\n}\nlet ownerNgModule = /*#__PURE__*/new WeakMap();\nlet verifiedNgModule = /*#__PURE__*/new WeakMap();\nfunction resetCompiledComponents() {\n ownerNgModule = new WeakMap();\n verifiedNgModule = new WeakMap();\n moduleQueue.length = 0;\n GENERATED_COMP_IDS.clear();\n}\nfunction computeCombinedExports(type) {\n type = resolveForwardRef(type);\n const ngModuleDef = getNgModuleDef(type);\n if (ngModuleDef === null) {\n return [type];\n }\n return flatten(maybeUnwrapFn(ngModuleDef.exports).map(type => {\n const ngModuleDef = getNgModuleDef(type);\n if (ngModuleDef) {\n verifySemanticsOfNgModuleDef(type, false);\n return computeCombinedExports(type);\n } else {\n return type;\n }\n }));\n}\nfunction setScopeOnDeclaredComponents(moduleType, ngModule) {\n const declarations = flatten(ngModule.declarations || EMPTY_ARRAY);\n const transitiveScopes = transitiveScopesFor(moduleType);\n declarations.forEach(declaration => {\n declaration = resolveForwardRef(declaration);\n if (declaration.hasOwnProperty(NG_COMP_DEF)) {\n const component = declaration;\n const componentDef = getComponentDef(component);\n patchComponentDefWithScope(componentDef, transitiveScopes);\n } else if (!declaration.hasOwnProperty(NG_DIR_DEF) && !declaration.hasOwnProperty(NG_PIPE_DEF)) {\n declaration.ngSelectorScope = moduleType;\n }\n });\n}\nfunction patchComponentDefWithScope(componentDef, transitiveScopes) {\n componentDef.directiveDefs = () => Array.from(transitiveScopes.compilation.directives).map(dir => dir.hasOwnProperty(NG_COMP_DEF) ? getComponentDef(dir) : getDirectiveDef(dir)).filter(def => !!def);\n componentDef.pipeDefs = () => Array.from(transitiveScopes.compilation.pipes).map(pipe => getPipeDef$1(pipe));\n componentDef.schemas = transitiveScopes.schemas;\n componentDef.tView = null;\n}\nfunction transitiveScopesFor(type) {\n if (isNgModule(type)) {\n const scope = depsTracker.getNgModuleScope(type);\n const def = getNgModuleDefOrThrow(type);\n return {\n schemas: def.schemas || null,\n ...scope\n };\n } else if (isStandalone(type)) {\n const directiveDef = getComponentDef(type) || getDirectiveDef(type);\n if (directiveDef !== null) {\n return {\n schemas: null,\n compilation: {\n directives: new Set(),\n pipes: new Set()\n },\n exported: {\n directives: new Set([type]),\n pipes: new Set()\n }\n };\n }\n const pipeDef = getPipeDef$1(type);\n if (pipeDef !== null) {\n return {\n schemas: null,\n compilation: {\n directives: new Set(),\n pipes: new Set()\n },\n exported: {\n directives: new Set(),\n pipes: new Set([type])\n }\n };\n }\n }\n throw new Error(`${type.name} does not have a module def (\u0275mod property)`);\n}\nfunction expandModuleWithProviders(value) {\n if (isModuleWithProviders(value)) {\n return value.ngModule;\n }\n return value;\n}\nlet compilationDepth = 0;\nfunction compileComponent(type, metadata) {\n (typeof ngDevMode === 'undefined' || ngDevMode) && initNgDevMode();\n let ngComponentDef = null;\n maybeQueueResolutionOfComponentResources(type, metadata);\n addDirectiveFactoryDef(type, metadata);\n Object.defineProperty(type, NG_COMP_DEF, {\n get: () => {\n if (ngComponentDef === null) {\n const compiler = getCompilerFacade({\n usage: 0,\n kind: 'component',\n type: type\n });\n if (componentNeedsResolution(metadata)) {\n const error = [`Component '${type.name}' is not resolved:`];\n if (metadata.templateUrl) {\n error.push(` - templateUrl: ${metadata.templateUrl}`);\n }\n if (metadata.styleUrls && metadata.styleUrls.length) {\n error.push(` - styleUrls: ${JSON.stringify(metadata.styleUrls)}`);\n }\n if (metadata.styleUrl) {\n error.push(` - styleUrl: ${metadata.styleUrl}`);\n }\n error.push(`Did you run and wait for 'resolveComponentResources()'?`);\n throw new Error(error.join('\\n'));\n }\n const options = getJitOptions();\n let preserveWhitespaces = metadata.preserveWhitespaces;\n if (preserveWhitespaces === undefined) {\n if (options !== null && options.preserveWhitespaces !== undefined) {\n preserveWhitespaces = options.preserveWhitespaces;\n } else {\n preserveWhitespaces = false;\n }\n }\n let encapsulation = metadata.encapsulation;\n if (encapsulation === undefined) {\n if (options !== null && options.defaultEncapsulation !== undefined) {\n encapsulation = options.defaultEncapsulation;\n } else {\n encapsulation = ViewEncapsulation.Emulated;\n }\n }\n const templateUrl = metadata.templateUrl || `ng:///${type.name}/template.html`;\n const baseMeta = directiveMetadata(type, metadata);\n const meta = {\n ...baseMeta,\n typeSourceSpan: compiler.createParseSourceSpan('Component', type.name, templateUrl),\n template: metadata.template || '',\n preserveWhitespaces,\n styles: typeof metadata.styles === 'string' ? [metadata.styles] : metadata.styles || EMPTY_ARRAY,\n animations: metadata.animations,\n declarations: [],\n changeDetection: metadata.changeDetection,\n encapsulation,\n viewProviders: metadata.viewProviders || null,\n hasDirectiveDependencies: !baseMeta.isStandalone || metadata.imports != null && metadata.imports.length > 0\n };\n compilationDepth++;\n try {\n if (meta.usesInheritance) {\n addDirectiveDefToUndecoratedParents(type);\n }\n ngComponentDef = compiler.compileComponent(angularCoreEnv, templateUrl, meta);\n if (meta.isStandalone) {\n const imports = flatten(metadata.imports || EMPTY_ARRAY);\n const {\n directiveDefs,\n pipeDefs\n } = getStandaloneDefFunctions(type, imports);\n ngComponentDef.directiveDefs = directiveDefs;\n ngComponentDef.pipeDefs = pipeDefs;\n ngComponentDef.dependencies = () => imports.map(resolveForwardRef);\n }\n } finally {\n compilationDepth--;\n }\n if (compilationDepth === 0) {\n flushModuleScopingQueueAsMuchAsPossible();\n }\n if (hasSelectorScope(type)) {\n const scopes = transitiveScopesFor(type.ngSelectorScope);\n patchComponentDefWithScope(ngComponentDef, scopes);\n }\n if (metadata.schemas) {\n if (meta.isStandalone) {\n ngComponentDef.schemas = metadata.schemas;\n } else {\n throw new Error(`The 'schemas' was specified for the ${stringifyForError(type)} but is only valid on a component that is standalone.`);\n }\n } else if (meta.isStandalone) {\n ngComponentDef.schemas = [];\n }\n }\n return ngComponentDef;\n },\n set: def => {\n ngComponentDef = def;\n },\n configurable: !!ngDevMode\n });\n}\nfunction getStandaloneDefFunctions(type, imports) {\n const directiveDefs = () => {\n if (ngDevMode) {\n for (const rawDep of imports) {\n verifyStandaloneImport(rawDep, type);\n }\n }\n if (!isComponent(type)) {\n return [];\n }\n const scope = depsTracker.getStandaloneComponentScope(type, imports);\n return [...scope.compilation.directives].map(p => getComponentDef(p) || getDirectiveDef(p)).filter(d => d !== null);\n };\n const pipeDefs = () => {\n if (ngDevMode) {\n for (const rawDep of imports) {\n verifyStandaloneImport(rawDep, type);\n }\n }\n if (!isComponent(type)) {\n return [];\n }\n const scope = depsTracker.getStandaloneComponentScope(type, imports);\n return [...scope.compilation.pipes].map(p => getPipeDef$1(p)).filter(d => d !== null);\n };\n return {\n directiveDefs,\n pipeDefs\n };\n}\nfunction hasSelectorScope(component) {\n return component.ngSelectorScope !== undefined;\n}\nfunction compileDirective(type, directive) {\n let ngDirectiveDef = null;\n addDirectiveFactoryDef(type, directive || {});\n Object.defineProperty(type, NG_DIR_DEF, {\n get: () => {\n if (ngDirectiveDef === null) {\n const meta = getDirectiveMetadata(type, directive || {});\n const compiler = getCompilerFacade({\n usage: 0,\n kind: 'directive',\n type\n });\n ngDirectiveDef = compiler.compileDirective(angularCoreEnv, meta.sourceMapUrl, meta.metadata);\n }\n return ngDirectiveDef;\n },\n configurable: !!ngDevMode\n });\n}\nfunction getDirectiveMetadata(type, metadata) {\n const name = type && type.name;\n const sourceMapUrl = `ng:///${name}/\u0275dir.js`;\n const compiler = getCompilerFacade({\n usage: 0,\n kind: 'directive',\n type\n });\n const facade = directiveMetadata(type, metadata);\n facade.typeSourceSpan = compiler.createParseSourceSpan('Directive', name, sourceMapUrl);\n if (facade.usesInheritance) {\n addDirectiveDefToUndecoratedParents(type);\n }\n return {\n metadata: facade,\n sourceMapUrl\n };\n}\nfunction addDirectiveFactoryDef(type, metadata) {\n let ngFactoryDef = null;\n Object.defineProperty(type, NG_FACTORY_DEF, {\n get: () => {\n if (ngFactoryDef === null) {\n const meta = getDirectiveMetadata(type, metadata);\n const compiler = getCompilerFacade({\n usage: 0,\n kind: 'directive',\n type\n });\n ngFactoryDef = compiler.compileFactory(angularCoreEnv, `ng:///${type.name}/\u0275fac.js`, {\n name: meta.metadata.name,\n type: meta.metadata.type,\n typeArgumentCount: 0,\n deps: reflectDependencies(type),\n target: compiler.FactoryTarget.Directive\n });\n }\n return ngFactoryDef;\n },\n configurable: !!ngDevMode\n });\n}\nfunction extendsDirectlyFromObject(type) {\n return Object.getPrototypeOf(type.prototype) === Object.prototype;\n}\nfunction directiveMetadata(type, metadata) {\n const reflect = getReflect();\n const propMetadata = reflect.ownPropMetadata(type);\n return {\n name: type.name,\n type: type,\n selector: metadata.selector !== undefined ? metadata.selector : null,\n host: metadata.host || EMPTY_OBJ,\n propMetadata: propMetadata,\n inputs: metadata.inputs || EMPTY_ARRAY,\n outputs: metadata.outputs || EMPTY_ARRAY,\n queries: extractQueriesMetadata(type, propMetadata, isContentQuery),\n lifecycle: {\n usesOnChanges: reflect.hasLifecycleHook(type, 'ngOnChanges')\n },\n controlCreate: null,\n typeSourceSpan: null,\n usesInheritance: !extendsDirectlyFromObject(type),\n exportAs: extractExportAs(metadata.exportAs),\n providers: metadata.providers || null,\n viewQueries: extractQueriesMetadata(type, propMetadata, isViewQuery),\n isStandalone: metadata.standalone === undefined ? true : !!metadata.standalone,\n isSignal: !!metadata.signals,\n hostDirectives: metadata.hostDirectives?.map(directive => typeof directive === 'function' ? {\n directive\n } : directive) || null\n };\n}\nfunction addDirectiveDefToUndecoratedParents(type) {\n const objPrototype = Object.prototype;\n let parent = Object.getPrototypeOf(type.prototype).constructor;\n while (parent && parent !== objPrototype) {\n if (!getDirectiveDef(parent) && !getComponentDef(parent) && shouldAddAbstractDirective(parent)) {\n compileDirective(parent, null);\n }\n parent = Object.getPrototypeOf(parent);\n }\n}\nfunction convertToR3QueryPredicate(selector) {\n return typeof selector === 'string' ? splitByComma(selector) : resolveForwardRef(selector);\n}\nfunction convertToR3QueryMetadata(propertyName, ann) {\n return {\n propertyName: propertyName,\n predicate: convertToR3QueryPredicate(ann.selector),\n descendants: ann.descendants,\n first: ann.first,\n read: ann.read ? ann.read : null,\n static: !!ann.static,\n emitDistinctChangesOnly: !!ann.emitDistinctChangesOnly,\n isSignal: !!ann.isSignal\n };\n}\nfunction extractQueriesMetadata(type, propMetadata, isQueryAnn) {\n const queriesMeta = [];\n for (const field in propMetadata) {\n if (propMetadata.hasOwnProperty(field)) {\n const annotations = propMetadata[field];\n annotations.forEach(ann => {\n if (isQueryAnn(ann)) {\n if (!ann.selector) {\n throw new Error(`Can't construct a query for the property \"${field}\" of ` + `\"${stringifyForError(type)}\" since the query selector wasn't defined.`);\n }\n if (annotations.some(isInputAnnotation)) {\n throw new Error(`Cannot combine @Input decorators with query decorators`);\n }\n queriesMeta.push(convertToR3QueryMetadata(field, ann));\n }\n });\n }\n }\n return queriesMeta;\n}\nfunction extractExportAs(exportAs) {\n return exportAs === undefined ? null : splitByComma(exportAs);\n}\nfunction isContentQuery(value) {\n const name = value.ngMetadataName;\n return name === 'ContentChild' || name === 'ContentChildren';\n}\nfunction isViewQuery(value) {\n const name = value.ngMetadataName;\n return name === 'ViewChild' || name === 'ViewChildren';\n}\nfunction isInputAnnotation(value) {\n return value.ngMetadataName === 'Input';\n}\nfunction splitByComma(value) {\n return value.split(',').map(piece => piece.trim());\n}\nconst LIFECYCLE_HOOKS = ['ngOnChanges', 'ngOnInit', 'ngOnDestroy', 'ngDoCheck', 'ngAfterViewInit', 'ngAfterViewChecked', 'ngAfterContentInit', 'ngAfterContentChecked'];\nfunction shouldAddAbstractDirective(type) {\n const reflect = getReflect();\n if (LIFECYCLE_HOOKS.some(hookName => reflect.hasLifecycleHook(type, hookName))) {\n return true;\n }\n const propMetadata = reflect.propMetadata(type);\n for (const field in propMetadata) {\n const annotations = propMetadata[field];\n for (let i = 0; i < annotations.length; i++) {\n const current = annotations[i];\n const metadataName = current.ngMetadataName;\n if (isInputAnnotation(current) || isContentQuery(current) || isViewQuery(current) || metadataName === 'Output' || metadataName === 'HostBinding' || metadataName === 'HostListener') {\n return true;\n }\n }\n }\n return false;\n}\nfunction compilePipe(type, meta) {\n let ngPipeDef = null;\n let ngFactoryDef = null;\n Object.defineProperty(type, NG_FACTORY_DEF, {\n get: () => {\n if (ngFactoryDef === null) {\n const metadata = getPipeMetadata(type, meta);\n const compiler = getCompilerFacade({\n usage: 0,\n kind: 'pipe',\n type: metadata.type\n });\n ngFactoryDef = compiler.compileFactory(angularCoreEnv, `ng:///${metadata.name}/\u0275fac.js`, {\n name: metadata.name,\n type: metadata.type,\n typeArgumentCount: 0,\n deps: reflectDependencies(type),\n target: compiler.FactoryTarget.Pipe\n });\n }\n return ngFactoryDef;\n },\n configurable: !!ngDevMode\n });\n Object.defineProperty(type, NG_PIPE_DEF, {\n get: () => {\n if (ngPipeDef === null) {\n const metadata = getPipeMetadata(type, meta);\n const compiler = getCompilerFacade({\n usage: 0,\n kind: 'pipe',\n type: metadata.type\n });\n ngPipeDef = compiler.compilePipe(angularCoreEnv, `ng:///${metadata.name}/\u0275pipe.js`, metadata);\n }\n return ngPipeDef;\n },\n configurable: !!ngDevMode\n });\n}\nfunction getPipeMetadata(type, meta) {\n return {\n type: type,\n name: type.name,\n pipeName: meta.name,\n pure: meta.pure !== undefined ? meta.pure : true,\n isStandalone: meta.standalone === undefined ? true : !!meta.standalone\n };\n}\nconst Directive = /*#__PURE__*/makeDecorator('Directive', (dir = {}) => dir, undefined, undefined, (type, meta) => compileDirective(type, meta));\nconst Component = /*#__PURE__*/makeDecorator('Component', (c = {}) => ({\n changeDetection: ChangeDetectionStrategy.Eager,\n ...c\n}), Directive, undefined, (type, meta) => compileComponent(type, meta));\nconst Pipe = /*#__PURE__*/makeDecorator('Pipe', p => ({\n pure: true,\n ...p\n}), undefined, undefined, (type, meta) => compilePipe(type, meta));\nconst Input = /*#__PURE__*/makePropDecorator('Input', arg => {\n if (!arg) {\n return {};\n }\n return typeof arg === 'string' ? {\n alias: arg\n } : arg;\n});\nconst Output = /*#__PURE__*/makePropDecorator('Output', alias => ({\n alias\n}));\nconst HostBinding = /*#__PURE__*/makePropDecorator('HostBinding', hostPropertyName => ({\n hostPropertyName\n}));\nconst HostListener = /*#__PURE__*/makePropDecorator('HostListener', (eventName, args) => ({\n eventName,\n args\n}));\nconst NgModule = /*#__PURE__*/makeDecorator('NgModule', ngModule => ngModule, undefined, undefined, (type, meta) => compileNgModule(type, meta));\nclass ModuleWithComponentFactories {\n ngModuleFactory;\n componentFactories;\n constructor(ngModuleFactory, componentFactories) {\n this.ngModuleFactory = ngModuleFactory;\n this.componentFactories = componentFactories;\n }\n}\nlet Compiler = /*#__PURE__*/(() => {\n class Compiler {\n compileModuleSync(moduleType) {\n return new NgModuleFactory(moduleType);\n }\n compileModuleAsync(moduleType) {\n return Promise.resolve(this.compileModuleSync(moduleType));\n }\n compileModuleAndAllComponentsSync(moduleType) {\n const ngModuleFactory = this.compileModuleSync(moduleType);\n const moduleDef = getNgModuleDef(moduleType);\n const componentFactories = maybeUnwrapFn(moduleDef.declarations).reduce((factories, declaration) => {\n const componentDef = getComponentDef(declaration);\n componentDef && factories.push(new ComponentFactory(componentDef));\n return factories;\n }, []);\n return new ModuleWithComponentFactories(ngModuleFactory, componentFactories);\n }\n compileModuleAndAllComponentsAsync(moduleType) {\n return Promise.resolve(this.compileModuleAndAllComponentsSync(moduleType));\n }\n clearCache() {}\n clearCacheFor(type) {}\n getModuleId(moduleType) {\n return undefined;\n }\n static \u0275fac = function Compiler_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || Compiler)();\n };\n static \u0275prov = /*@__PURE__*/__defineInjectable({\n token: Compiler,\n factory: Compiler.\u0275fac,\n providedIn: 'root'\n });\n }\n return Compiler;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && setClassMetadata(Compiler, [{\n type: Injectable,\n args: [{\n providedIn: 'root'\n }]\n }], null, null);\n})();\nconst COMPILER_OPTIONS = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'compilerOptions' : '');\nclass CompilerFactory {}\nconst CONSECUTIVE_MICROTASK_NOTIFICATION_LIMIT = 100;\nlet consecutiveMicrotaskNotifications = 0;\nlet stackFromLastFewNotifications = [];\nfunction trackMicrotaskNotificationForDebugging() {\n consecutiveMicrotaskNotifications++;\n if (CONSECUTIVE_MICROTASK_NOTIFICATION_LIMIT - consecutiveMicrotaskNotifications < 5) {\n const stack = new Error().stack;\n if (stack) {\n stackFromLastFewNotifications.push(stack);\n }\n }\n if (consecutiveMicrotaskNotifications === CONSECUTIVE_MICROTASK_NOTIFICATION_LIMIT) {\n throw new RuntimeError(103, 'Angular could not stabilize because there were endless change notifications within the browser event loop. ' + 'The stack from the last several notifications: \\n' + stackFromLastFewNotifications.join('\\n'));\n }\n}\nlet ChangeDetectionSchedulerImpl = /*#__PURE__*/(() => {\n class ChangeDetectionSchedulerImpl {\n applicationErrorHandler = inject(INTERNAL_APPLICATION_ERROR_HANDLER);\n appRef = inject(ApplicationRef);\n taskService = inject(PendingTasksInternal);\n ngZone = inject(NgZone);\n zonelessEnabled = inject(ZONELESS_ENABLED);\n tracing = inject(TracingService, {\n optional: true\n });\n zoneIsDefined = typeof Zone !== 'undefined' && !!Zone.root.run;\n schedulerTickApplyArgs = [{\n data: {\n '__scheduler_tick__': true\n }\n }];\n subscriptions = new Subscription();\n angularZoneId = this.zoneIsDefined ? this.ngZone._inner?.get(angularZoneInstanceIdProperty) : null;\n scheduleInRootZone = !this.zonelessEnabled && this.zoneIsDefined && (inject(SCHEDULE_IN_ROOT_ZONE, {\n optional: true\n }) ?? false);\n cancelScheduledCallback = null;\n useMicrotaskScheduler = false;\n runningTick = false;\n pendingRenderTaskId = null;\n constructor() {\n this.subscriptions.add(this.appRef.afterTick.subscribe(() => {\n const task = this.taskService.add();\n if (!this.runningTick) {\n this.cleanup();\n if (!this.zonelessEnabled || this.appRef.includeAllTestViews) {\n this.taskService.remove(task);\n return;\n }\n }\n this.switchToMicrotaskScheduler();\n this.taskService.remove(task);\n }));\n this.subscriptions.add(this.ngZone.onUnstable.subscribe(() => {\n if (!this.runningTick) {\n this.cleanup();\n }\n }));\n }\n switchToMicrotaskScheduler() {\n this.ngZone.runOutsideAngular(() => {\n const task = this.taskService.add();\n this.useMicrotaskScheduler = true;\n queueMicrotask(() => {\n this.useMicrotaskScheduler = false;\n this.taskService.remove(task);\n });\n });\n }\n notify(source) {\n if (!this.zonelessEnabled && source === 5) {\n return;\n }\n switch (source) {\n case 0:\n {\n this.appRef.dirtyFlags |= 2;\n break;\n }\n case 3:\n case 2:\n case 4:\n case 5:\n case 1:\n {\n this.appRef.dirtyFlags |= 4;\n break;\n }\n case 6:\n {\n this.appRef.dirtyFlags |= 2;\n break;\n }\n case 12:\n {\n this.appRef.dirtyFlags |= 16;\n break;\n }\n case 13:\n {\n this.appRef.dirtyFlags |= 2;\n break;\n }\n case 11:\n {\n break;\n }\n case 9:\n case 8:\n case 7:\n case 10:\n default:\n {\n this.appRef.dirtyFlags |= 8;\n }\n }\n this.appRef.tracingSnapshot = this.tracing?.snapshot(this.appRef.tracingSnapshot) ?? null;\n if (!this.shouldScheduleTick()) {\n return;\n }\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n if (this.useMicrotaskScheduler) {\n trackMicrotaskNotificationForDebugging();\n } else {\n consecutiveMicrotaskNotifications = 0;\n stackFromLastFewNotifications.length = 0;\n }\n }\n const scheduleCallback = this.useMicrotaskScheduler ? scheduleCallbackWithMicrotask : scheduleCallbackWithRafRace;\n this.pendingRenderTaskId = this.taskService.add();\n if (this.scheduleInRootZone) {\n this.cancelScheduledCallback = Zone.root.run(() => scheduleCallback(() => this.tick()));\n } else {\n this.cancelScheduledCallback = this.ngZone.runOutsideAngular(() => scheduleCallback(() => this.tick()));\n }\n }\n shouldScheduleTick() {\n if (this.appRef.destroyed) {\n return false;\n }\n if (this.pendingRenderTaskId !== null || this.runningTick || this.appRef._runningTick) {\n return false;\n }\n if (!this.zonelessEnabled && this.zoneIsDefined && Zone.current.get(angularZoneInstanceIdProperty + this.angularZoneId)) {\n return false;\n }\n return true;\n }\n tick() {\n if (this.runningTick || this.appRef.destroyed) {\n return;\n }\n if (this.appRef.dirtyFlags === 0) {\n this.cleanup();\n return;\n }\n if (!this.zonelessEnabled && this.appRef.dirtyFlags & 7) {\n this.appRef.dirtyFlags |= 1;\n }\n const task = this.taskService.add();\n try {\n this.ngZone.run(() => {\n this.runningTick = true;\n this.appRef._tick();\n }, undefined, this.schedulerTickApplyArgs);\n } catch (e) {\n this.applicationErrorHandler(e);\n } finally {\n this.taskService.remove(task);\n this.cleanup();\n }\n }\n ngOnDestroy() {\n this.subscriptions.unsubscribe();\n this.cleanup();\n }\n cleanup() {\n this.runningTick = false;\n this.cancelScheduledCallback?.();\n this.cancelScheduledCallback = null;\n if (this.pendingRenderTaskId !== null) {\n const taskId = this.pendingRenderTaskId;\n this.pendingRenderTaskId = null;\n this.taskService.remove(taskId);\n }\n }\n static \u0275fac = function ChangeDetectionSchedulerImpl_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || ChangeDetectionSchedulerImpl)();\n };\n static \u0275prov = /*@__PURE__*/__defineInjectable({\n token: ChangeDetectionSchedulerImpl,\n factory: ChangeDetectionSchedulerImpl.\u0275fac,\n providedIn: 'root'\n });\n }\n return ChangeDetectionSchedulerImpl;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && setClassMetadata(ChangeDetectionSchedulerImpl, [{\n type: Injectable,\n args: [{\n providedIn: 'root'\n }]\n }], () => [], null);\n})();\nfunction provideZonelessChangeDetection() {\n performanceMarkFeature('NgZoneless');\n if ((typeof ngDevMode === 'undefined' || ngDevMode) && typeof Zone !== 'undefined' && Zone) {\n const message = formatRuntimeError(914, `The application is using zoneless change detection, but is still loading Zone.js. ` + `Consider removing Zone.js to get the full benefits of zoneless. ` + `In applications using the Angular CLI, Zone.js is typically included in the \"polyfills\" section of the angular.json file.`);\n console.warn(message);\n }\n return makeEnvironmentProviders([...provideZonelessChangeDetectionInternal(), typeof ngDevMode === 'undefined' || ngDevMode ? [{\n provide: PROVIDED_ZONELESS,\n useValue: true\n }] : []]);\n}\nfunction provideZonelessChangeDetectionInternal() {\n return [{\n provide: ChangeDetectionScheduler,\n useExisting: ChangeDetectionSchedulerImpl\n }, {\n provide: NgZone,\n useClass: NoopNgZone\n }, {\n provide: ZONELESS_ENABLED,\n useValue: true\n }];\n}\nfunction getGlobalLocale() {\n if (typeof ngI18nClosureMode !== 'undefined' && ngI18nClosureMode && typeof goog !== 'undefined' && goog.LOCALE !== 'en') {\n return goog.LOCALE;\n } else {\n return typeof $localize !== 'undefined' && $localize.locale || DEFAULT_LOCALE_ID;\n }\n}\nconst LOCALE_ID = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'LocaleId' : '', {\n factory: () => inject(LOCALE_ID, {\n optional: true,\n skipSelf: true\n }) || getGlobalLocale()\n});\nconst DEFAULT_CURRENCY_CODE = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'DefaultCurrencyCode' : '', {\n factory: () => USD_CURRENCY_CODE\n});\nconst TRANSLATIONS = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'Translations' : '');\nconst TRANSLATIONS_FORMAT = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'TranslationsFormat' : '');\nvar MissingTranslationStrategy = /*#__PURE__*/function (MissingTranslationStrategy) {\n MissingTranslationStrategy[MissingTranslationStrategy[\"Error\"] = 0] = \"Error\";\n MissingTranslationStrategy[MissingTranslationStrategy[\"Warning\"] = 1] = \"Warning\";\n MissingTranslationStrategy[MissingTranslationStrategy[\"Ignore\"] = 2] = \"Ignore\";\n return MissingTranslationStrategy;\n}(MissingTranslationStrategy || {});\nclass DebugEventListener {\n name;\n callback;\n constructor(name, callback) {\n this.name = name;\n this.callback = callback;\n }\n}\nfunction asNativeElements(debugEls) {\n return debugEls.map(el => el.nativeElement);\n}\nclass DebugNode {\n nativeNode;\n constructor(nativeNode) {\n this.nativeNode = nativeNode;\n }\n get parent() {\n const parent = this.nativeNode.parentNode;\n return parent ? new DebugElement(parent) : null;\n }\n get injector() {\n return getInjector(this.nativeNode);\n }\n get componentInstance() {\n const nativeElement = this.nativeNode;\n return nativeElement && (getComponent(nativeElement) || getOwningComponent(nativeElement));\n }\n get context() {\n return getComponent(this.nativeNode) || getContext(this.nativeNode);\n }\n get listeners() {\n return getListeners(this.nativeNode).filter(listener => listener.type === 'dom');\n }\n get references() {\n return getLocalRefs(this.nativeNode);\n }\n get providerTokens() {\n return getInjectionTokens(this.nativeNode);\n }\n}\nclass DebugElement extends DebugNode {\n constructor(nativeNode) {\n ngDevMode && assertDomNode(nativeNode);\n super(nativeNode);\n }\n get nativeElement() {\n return this.nativeNode.nodeType == Node.ELEMENT_NODE ? this.nativeNode : null;\n }\n get name() {\n const context = getLContext(this.nativeNode);\n const lView = context ? context.lView : null;\n if (lView !== null) {\n const tData = lView[TVIEW].data;\n const tNode = tData[context.nodeIndex];\n return tNode.value;\n } else {\n return this.nativeNode.nodeName;\n }\n }\n get properties() {\n const context = getLContext(this.nativeNode);\n const lView = context ? context.lView : null;\n if (lView === null) {\n return {};\n }\n const tData = lView[TVIEW].data;\n const tNode = tData[context.nodeIndex];\n const properties = {};\n copyDomProperties(this.nativeElement, properties);\n collectPropertyBindings(properties, tNode, lView, tData);\n return properties;\n }\n get attributes() {\n const attributes = {};\n const element = this.nativeElement;\n if (!element) {\n return attributes;\n }\n const context = getLContext(element);\n const lView = context ? context.lView : null;\n if (lView === null) {\n return {};\n }\n const tNodeAttrs = lView[TVIEW].data[context.nodeIndex].attrs;\n const lowercaseTNodeAttrs = [];\n if (tNodeAttrs) {\n let i = 0;\n while (i < tNodeAttrs.length) {\n const attrName = tNodeAttrs[i];\n if (typeof attrName !== 'string') break;\n const attrValue = tNodeAttrs[i + 1];\n attributes[attrName] = attrValue;\n lowercaseTNodeAttrs.push(attrName.toLowerCase());\n i += 2;\n }\n }\n for (const attr of element.attributes) {\n if (!lowercaseTNodeAttrs.includes(attr.name)) {\n attributes[attr.name] = attr.value;\n }\n }\n return attributes;\n }\n get styles() {\n const element = this.nativeElement;\n return element?.style ?? {};\n }\n get classes() {\n const result = {};\n const element = this.nativeElement;\n const className = element.className;\n const classes = typeof className !== 'string' ? className.baseVal.split(' ') : className.split(' ');\n classes.forEach(value => result[value] = true);\n return result;\n }\n get childNodes() {\n const childNodes = this.nativeNode.childNodes;\n const children = [];\n for (let i = 0; i < childNodes.length; i++) {\n const element = childNodes[i];\n children.push(getDebugNode(element));\n }\n return children;\n }\n get children() {\n const nativeElement = this.nativeElement;\n if (!nativeElement) return [];\n const childNodes = nativeElement.children;\n const children = [];\n for (let i = 0; i < childNodes.length; i++) {\n const element = childNodes[i];\n children.push(getDebugNode(element));\n }\n return children;\n }\n query(predicate) {\n const results = this.queryAll(predicate);\n return results[0] || null;\n }\n queryAll(predicate) {\n const matches = [];\n _queryAll(this, predicate, matches, true);\n return matches;\n }\n queryAllNodes(predicate) {\n const matches = [];\n _queryAll(this, predicate, matches, false);\n return matches;\n }\n triggerEventHandler(eventName, eventObj) {\n const node = this.nativeNode;\n const invokedListeners = [];\n this.listeners.forEach(listener => {\n if (listener.name === eventName) {\n const callback = listener.callback;\n callback.call(node, eventObj);\n invokedListeners.push(callback);\n }\n });\n if (typeof node.eventListeners === 'function') {\n node.eventListeners(eventName).forEach(listener => {\n if (listener.toString().indexOf('__ngUnwrap__') !== -1) {\n const unwrappedListener = listener('__ngUnwrap__');\n return invokedListeners.indexOf(unwrappedListener) === -1 && unwrappedListener.call(node, eventObj);\n }\n });\n }\n }\n}\nfunction copyDomProperties(element, properties) {\n if (element) {\n let obj = Object.getPrototypeOf(element);\n const NodePrototype = Node.prototype;\n while (obj !== null && obj !== NodePrototype) {\n const descriptors = Object.getOwnPropertyDescriptors(obj);\n for (let key in descriptors) {\n if (!key.startsWith('__') && !key.startsWith('on')) {\n const value = element[key];\n if (isPrimitiveValue(value)) {\n properties[key] = value;\n }\n }\n }\n obj = Object.getPrototypeOf(obj);\n }\n }\n}\nfunction isPrimitiveValue(value) {\n return typeof value === 'string' || typeof value === 'boolean' || typeof value === 'number' || value === null;\n}\nfunction _queryAll(parentElement, predicate, matches, elementsOnly) {\n const context = getLContext(parentElement.nativeNode);\n const lView = context ? context.lView : null;\n if (lView !== null) {\n const parentTNode = lView[TVIEW].data[context.nodeIndex];\n _queryNodeChildren(parentTNode, lView, predicate, matches, elementsOnly, parentElement.nativeNode);\n } else {\n _queryNativeNodeDescendants(parentElement.nativeNode, predicate, matches, elementsOnly);\n }\n}\nfunction _queryNodeChildren(tNode, lView, predicate, matches, elementsOnly, rootNativeNode) {\n ngDevMode && assertTNodeForLView(tNode, lView);\n const nativeNode = getNativeByTNodeOrNull(tNode, lView);\n if (tNode.type & (3 | 8)) {\n _addQueryMatch(nativeNode, predicate, matches, elementsOnly, rootNativeNode);\n if (isComponentHost(tNode)) {\n const componentView = getComponentLViewByIndex(tNode.index, lView);\n if (componentView && componentView[TVIEW].firstChild) {\n _queryNodeChildren(componentView[TVIEW].firstChild, componentView, predicate, matches, elementsOnly, rootNativeNode);\n }\n } else {\n if (tNode.child) {\n _queryNodeChildren(tNode.child, lView, predicate, matches, elementsOnly, rootNativeNode);\n }\n nativeNode && _queryNativeNodeDescendants(nativeNode, predicate, matches, elementsOnly);\n }\n const nodeOrContainer = lView[tNode.index];\n if (isLContainer(nodeOrContainer)) {\n _queryNodeChildrenInContainer(nodeOrContainer, predicate, matches, elementsOnly, rootNativeNode);\n }\n } else if (tNode.type & 4) {\n const lContainer = lView[tNode.index];\n _addQueryMatch(lContainer[NATIVE], predicate, matches, elementsOnly, rootNativeNode);\n _queryNodeChildrenInContainer(lContainer, predicate, matches, elementsOnly, rootNativeNode);\n } else if (tNode.type & 16) {\n const componentView = lView[DECLARATION_COMPONENT_VIEW];\n const componentHost = componentView[T_HOST];\n const head = componentHost.projection[tNode.projection];\n if (Array.isArray(head)) {\n for (let nativeNode of head) {\n _addQueryMatch(nativeNode, predicate, matches, elementsOnly, rootNativeNode);\n }\n } else if (head) {\n const nextLView = componentView[PARENT];\n const nextTNode = nextLView[TVIEW].data[head.index];\n _queryNodeChildren(nextTNode, nextLView, predicate, matches, elementsOnly, rootNativeNode);\n }\n } else if (tNode.child) {\n _queryNodeChildren(tNode.child, lView, predicate, matches, elementsOnly, rootNativeNode);\n }\n if (rootNativeNode !== nativeNode) {\n const nextTNode = tNode.flags & 2 ? tNode.projectionNext : tNode.next;\n if (nextTNode) {\n _queryNodeChildren(nextTNode, lView, predicate, matches, elementsOnly, rootNativeNode);\n }\n }\n}\nfunction _queryNodeChildrenInContainer(lContainer, predicate, matches, elementsOnly, rootNativeNode) {\n for (let i = CONTAINER_HEADER_OFFSET; i < lContainer.length; i++) {\n const childView = lContainer[i];\n const firstChild = childView[TVIEW].firstChild;\n if (firstChild) {\n _queryNodeChildren(firstChild, childView, predicate, matches, elementsOnly, rootNativeNode);\n }\n }\n}\nfunction _addQueryMatch(nativeNode, predicate, matches, elementsOnly, rootNativeNode) {\n if (rootNativeNode !== nativeNode) {\n const debugNode = getDebugNode(nativeNode);\n if (!debugNode) {\n return;\n }\n if (elementsOnly && debugNode instanceof DebugElement && predicate(debugNode) && matches.indexOf(debugNode) === -1) {\n matches.push(debugNode);\n } else if (!elementsOnly && predicate(debugNode) && matches.indexOf(debugNode) === -1) {\n matches.push(debugNode);\n }\n }\n}\nfunction _queryNativeNodeDescendants(parentNode, predicate, matches, elementsOnly) {\n const nodes = parentNode.childNodes;\n const length = nodes.length;\n for (let i = 0; i < length; i++) {\n const node = nodes[i];\n const debugNode = getDebugNode(node);\n if (debugNode) {\n if (elementsOnly && debugNode instanceof DebugElement && predicate(debugNode) && matches.indexOf(debugNode) === -1) {\n matches.push(debugNode);\n } else if (!elementsOnly && predicate(debugNode) && matches.indexOf(debugNode) === -1) {\n matches.push(debugNode);\n }\n _queryNativeNodeDescendants(node, predicate, matches, elementsOnly);\n }\n }\n}\nfunction collectPropertyBindings(properties, tNode, lView, tData) {\n let bindingIndexes = tNode.propertyBindings;\n if (bindingIndexes !== null) {\n for (let i = 0; i < bindingIndexes.length; i++) {\n const bindingIndex = bindingIndexes[i];\n const propMetadata = tData[bindingIndex];\n const metadataParts = propMetadata.split(INTERPOLATION_DELIMITER);\n const propertyName = metadataParts[0];\n if (metadataParts.length > 1) {\n let value = metadataParts[1];\n for (let j = 1; j < metadataParts.length - 1; j++) {\n value += renderStringify(lView[bindingIndex + j - 1]) + metadataParts[j + 1];\n }\n properties[propertyName] = value;\n } else {\n properties[propertyName] = lView[bindingIndex];\n }\n }\n }\n}\nconst NG_DEBUG_PROPERTY = '__ng_debug__';\nfunction getDebugNode(nativeNode) {\n if (nativeNode instanceof Node) {\n if (!nativeNode.hasOwnProperty(NG_DEBUG_PROPERTY)) {\n nativeNode[NG_DEBUG_PROPERTY] = nativeNode.nodeType == Node.ELEMENT_NODE ? new DebugElement(nativeNode) : new DebugNode(nativeNode);\n }\n return nativeNode[NG_DEBUG_PROPERTY];\n }\n return null;\n}\nexport { AFTER_RENDER_PHASES, ANIMATIONS_DISABLED, ANIMATION_MODULE_TYPE, APP_BOOTSTRAP_LISTENER, APP_ID, APP_INITIALIZER, AcxChangeDetectionStrategy, AcxViewEncapsulation, AfterRenderImpl, AfterRenderManager, AfterRenderSequence, ApplicationInitStatus, ApplicationRef, Attribute, COMPILER_OPTIONS, CONTAINERS, CSP_NONCE, CUSTOM_ELEMENTS_SCHEMA, ChangeDetectionSchedulerImpl, ChangeDetectionStrategy, Compiler, CompilerFactory, Component, ComponentFactory, ComponentFactory$1, ComponentFactoryResolver$1 as ComponentFactoryResolver, ComponentRef$1 as ComponentRef, ComponentRef as ComponentRef$1, Console, DEFAULT_CURRENCY_CODE, DEFAULT_LOCALE_ID, DEFER_BLOCK_CONFIG, DEFER_BLOCK_DEPENDENCY_INTERCEPTOR, DEFER_BLOCK_ID, DEFER_BLOCK_SSR_ID_ATTRIBUTE, DEFER_BLOCK_STATE$1 as DEFER_BLOCK_STATE, DEFER_BLOCK_STATE as DEFER_BLOCK_STATE$1, DEFER_HYDRATE_TRIGGERS, DEFER_PARENT_BLOCK_ID, DEHYDRATED_BLOCK_REGISTRY, DISCONNECTED_NODES, DebugElement, DebugEventListener, DebugNode, DeferBlockBehavior, DeferBlockState, DehydratedBlockRegistry, Directive, ELEMENT_CONTAINERS, EVENT_REPLAY_ENABLED_DEFAULT, EVENT_REPLAY_QUEUE, ElementRef, EnvironmentNgModuleRefAdapter, Host, HostBinding, HostListener, HydrationStatus, I18N_DATA, IMAGE_CONFIG, IMAGE_CONFIG_DEFAULTS, IS_ENABLED_BLOCKING_INITIAL_NAVIGATION, IS_EVENT_REPLAY_ENABLED, IS_HYDRATION_DOM_REUSE_ENABLED, IS_I18N_HYDRATION_ENABLED, IS_INCREMENTAL_HYDRATION_ENABLED, Inject, Injectable, Input, JSACTION_BLOCK_ELEMENT_MAP, JSACTION_EVENT_CONTRACT, LContext, LOCALE_ID, LocaleDataIndex, MAX_ANIMATION_TIMEOUT, MULTIPLIER, MissingTranslationStrategy, ModuleWithComponentFactories, NGH_ATTR_NAME, NGH_DATA_KEY, NGH_DEFER_BLOCKS_KEY, NODES, NOOP_AFTER_RENDER_REF, NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR, NO_CHANGE, NO_ERRORS_SCHEMA, NUM_ROOT_NODES, NgModule, NgModuleFactory, NgModuleFactory$1, NgModuleRef, NgModuleRef$1, Optional, Output, PLATFORM_ID, PLATFORM_INITIALIZER, PRESERVE_HOST_CONTENT, Pipe, ProfilerEvent, QueryList, ReflectionCapabilities, Renderer2, RendererFactory2, RendererStyleFlags2, SKIP_HYDRATION_ATTR_NAME, SSR_CONTENT_INTEGRITY_MARKER, Sanitizer, SecurityContext, Self, SimpleChange, SkipSelf, TEMPLATES, TEMPLATE_ID, TESTABILITY, TESTABILITY_GETTER, TRANSLATIONS, TRANSLATIONS_FORMAT, TemplateRef, Testability, TestabilityRegistry, TimerScheduler, TracingAction, TracingService, TransferState, Type, UseExhaustiveCheckNoChanges, ViewContainerRef, ViewEncapsulation, ViewRef, _sanitizeHtml, _sanitizeUrl, afterEveryRender, afterNextRender, allLeavingAnimations, allowSanitizationBypassAndThrow, angularCoreEnv, appendDeferBlocksToJSActionMap, asNativeElements, assertComponentDef, assertStandaloneComponentType, bypassSanitizationTrustHtml, bypassSanitizationTrustResourceUrl, bypassSanitizationTrustScript, bypassSanitizationTrustStyle, bypassSanitizationTrustUrl, calcPathForNode, checkNoChangesInternal, cleanupDehydratedViews, clearResolutionOfComponentResourcesQueue, collectNativeNodes, collectNativeNodesInLContainer, compileComponent, compileDirective, compileNgModule, compileNgModuleDefs, compilePipe, convertHydrateTriggersToJsAction, countBlocksSkippedByHydration, createEnvironmentInjector, createMultiResultQuerySignalFn, createNgModule, createNgModuleRef, createNgModuleRefWithProviders, createSingleResultOptionalQuerySignalFn, createSingleResultRequiredQuerySignalFn, depsTracker, devModeEqual, enableApplyRootElementTransformImpl, enableClaimDehydratedIcuCaseImpl, enableFindMatchingDehydratedViewImpl, enableLocateOrCreateContainerAnchorImpl, enableLocateOrCreateContainerRefImpl, enableLocateOrCreateElementContainerNodeImpl, enableLocateOrCreateElementNodeImpl, enableLocateOrCreateI18nNodeImpl, enableLocateOrCreateTextNodeImpl, enablePrepareI18nBlockForHydrationImpl, enableProfiling, enableRetrieveDeferBlockDataImpl, enableRetrieveHydrationInfoImpl, enableStashEventListenerImpl, findLocaleData, flushModuleScopingQueueAsMuchAsPossible, gatherDeferBlocksCommentNodes, generateStandaloneInDeclarationsError, getAsyncClassMetadataFn, getClosestComponentName, getCompilerFacade, getDebugNode, getDeferBlocks$1 as getDeferBlocks, getDirectives, getDocument, getHostElement, getLContext, getLDeferBlockDetails, getLNodeForHydration, getLocaleCurrencyCode, getLocalePluralCase, getOrComputeI18nChildren, getRegisteredNgModuleType, getSanitizationBypassType, getTDeferBlockDetails, getTransferState, inferTagNameFromDefinition, inputBinding, invokeListeners, isBoundToModule, isComponentDefPendingResolution, isComponentResourceResolutionQueueEmpty, isDeferBlock, isDetachedByI18n, isDisconnectedNode, isI18nHydrationEnabled, isI18nHydrationSupportEnabled, isInSkipHydrationBlock, isIncrementalHydrationEnabled, isJsObject, isLetDeclaration, isListLikeIterable, isNgModule, isPromise, isSignal, isSubscribable, isTNodeShape, isViewDirty, isWritableSignal, iterateListLike, makePropDecorator, makeStateKey, markForRefresh, noSideEffects, optionsReducer, outputBinding, patchComponentDefWithScope, performanceMarkFeature, processAndInitTriggers, processBlockData, processTextNodeBeforeSerialization, profiler, promiseWithResolvers, provideAppInitializer, provideNgReflectAttributes, provideZonelessChangeDetection, provideZonelessChangeDetectionInternal, publishDefaultGlobalUtils, publishExternalGlobalUtil, publishSignalConfiguration, readHydrationInfo, registerLocaleData, registerNgModuleType, remove, removeListeners, renderDeferBlockState, resetCompiledComponents, resetIncrementalHydrationEnabledWarnedForTests, resetJitOptions, resolveComponentResources, restoreComponentResolutionQueue, setAllowDuplicateNgModuleIdsForTest, setClassMetadata, setClassMetadataAsync, setDocument, setIsI18nHydrationSupportEnabled, setJSActionAttributes, setJitOptions, setLocaleId, setStashFn, setTestabilityGetter, sharedMapFunction, sharedStashFunction, transitiveScopesFor, triggerHydrationFromBlockName, triggerResourceLoading, trySerializeI18nBlock, twoWayBinding, unregisterAllLocaleData, unsupportedProjectionOfDomNodes, unwrapSafeValue, validAppIdInitializer, validateMatchingNode, validateNodeExists, verifySsrContentsIntegrity, \u0275getUnknownElementStrictMode, \u0275getUnknownPropertyStrictMode, \u0275setClassDebugInfo, \u0275setUnknownElementStrictMode, \u0275setUnknownPropertyStrictMode, \u0275\u0275ControlFeature, \u0275\u0275ExternalStylesFeature, \u0275\u0275HostDirectivesFeature, \u0275\u0275InheritDefinitionFeature, \u0275\u0275NgOnChangesFeature, \u0275\u0275ProvidersFeature, \u0275\u0275advance, \u0275\u0275animateEnter, \u0275\u0275animateEnterListener, \u0275\u0275animateLeave, \u0275\u0275animateLeaveListener, \u0275\u0275ariaProperty, \u0275\u0275arrowFunction, \u0275\u0275attachSourceLocations, \u0275\u0275attribute, \u0275\u0275classMap, \u0275\u0275classProp, \u0275\u0275componentInstance, \u0275\u0275conditional, \u0275\u0275conditionalBranchCreate, \u0275\u0275conditionalCreate, \u0275\u0275contentQuery, \u0275\u0275contentQuerySignal, \u0275\u0275control, \u0275\u0275controlCreate, \u0275\u0275declareLet, \u0275\u0275defer, \u0275\u0275deferEnableTimerScheduling, \u0275\u0275deferHydrateNever, \u0275\u0275deferHydrateOnHover, \u0275\u0275deferHydrateOnIdle, \u0275\u0275deferHydrateOnImmediate, \u0275\u0275deferHydrateOnInteraction, \u0275\u0275deferHydrateOnTimer, \u0275\u0275deferHydrateOnViewport, \u0275\u0275deferHydrateWhen, \u0275\u0275deferOnHover, \u0275\u0275deferOnIdle, \u0275\u0275deferOnImmediate, \u0275\u0275deferOnInteraction, \u0275\u0275deferOnTimer, \u0275\u0275deferOnViewport, \u0275\u0275deferPrefetchOnHover, \u0275\u0275deferPrefetchOnIdle, \u0275\u0275deferPrefetchOnImmediate, \u0275\u0275deferPrefetchOnInteraction, \u0275\u0275deferPrefetchOnTimer, \u0275\u0275deferPrefetchOnViewport, \u0275\u0275deferPrefetchWhen, \u0275\u0275deferWhen, \u0275\u0275defineComponent, \u0275\u0275defineDirective, \u0275\u0275defineNgModule, \u0275\u0275definePipe, \u0275\u0275directiveInject, \u0275\u0275domElement, \u0275\u0275domElementContainer, \u0275\u0275domElementContainerEnd, \u0275\u0275domElementContainerStart, \u0275\u0275domElementEnd, \u0275\u0275domElementStart, \u0275\u0275domListener, \u0275\u0275domProperty, \u0275\u0275domTemplate, \u0275\u0275element, \u0275\u0275elementContainer, \u0275\u0275elementContainerEnd, \u0275\u0275elementContainerStart, \u0275\u0275elementEnd, \u0275\u0275elementStart, \u0275\u0275getComponentDepsFactory, \u0275\u0275getCurrentView, \u0275\u0275getInheritedFactory, \u0275\u0275getReplaceMetadataURL, \u0275\u0275i18n, \u0275\u0275i18nApply, \u0275\u0275i18nAttributes, \u0275\u0275i18nEnd, \u0275\u0275i18nExp, \u0275\u0275i18nPostprocess, \u0275\u0275i18nStart, \u0275\u0275injectAttribute, \u0275\u0275interpolate, \u0275\u0275interpolate1, \u0275\u0275interpolate2, \u0275\u0275interpolate3, \u0275\u0275interpolate4, \u0275\u0275interpolate5, \u0275\u0275interpolate6, \u0275\u0275interpolate7, \u0275\u0275interpolate8, \u0275\u0275interpolateV, \u0275\u0275invalidFactory, \u0275\u0275listener, \u0275\u0275loadQuery, \u0275\u0275nextContext, \u0275\u0275pipe, \u0275\u0275pipeBind1, \u0275\u0275pipeBind2, \u0275\u0275pipeBind3, \u0275\u0275pipeBind4, \u0275\u0275pipeBindV, \u0275\u0275projection, \u0275\u0275projectionDef, \u0275\u0275property, \u0275\u0275pureFunction0, \u0275\u0275pureFunction1, \u0275\u0275pureFunction2, \u0275\u0275pureFunction3, \u0275\u0275pureFunction4, \u0275\u0275pureFunction5, \u0275\u0275pureFunction6, \u0275\u0275pureFunction7, \u0275\u0275pureFunction8, \u0275\u0275pureFunctionV, \u0275\u0275queryAdvance, \u0275\u0275queryRefresh, \u0275\u0275readContextLet, \u0275\u0275reference, \u0275\u0275repeater, \u0275\u0275repeaterCreate, \u0275\u0275repeaterTrackByIdentity, \u0275\u0275repeaterTrackByIndex, \u0275\u0275replaceMetadata, \u0275\u0275resolveBody, \u0275\u0275resolveDocument, \u0275\u0275resolveWindow, \u0275\u0275sanitizeHtml, \u0275\u0275sanitizeResourceUrl, \u0275\u0275sanitizeScript, \u0275\u0275sanitizeStyle, \u0275\u0275sanitizeUrl, \u0275\u0275sanitizeUrlOrResourceUrl, \u0275\u0275setComponentScope, \u0275\u0275setNgModuleScope, \u0275\u0275storeLet, \u0275\u0275styleMap, \u0275\u0275styleProp, \u0275\u0275syntheticHostListener, \u0275\u0275syntheticHostProperty, \u0275\u0275template, \u0275\u0275templateRefExtractor, \u0275\u0275text, \u0275\u0275textInterpolate, \u0275\u0275textInterpolate1, \u0275\u0275textInterpolate2, \u0275\u0275textInterpolate3, \u0275\u0275textInterpolate4, \u0275\u0275textInterpolate5, \u0275\u0275textInterpolate6, \u0275\u0275textInterpolate7, \u0275\u0275textInterpolate8, \u0275\u0275textInterpolateV, \u0275\u0275trustConstantHtml, \u0275\u0275trustConstantResourceUrl, \u0275\u0275twoWayBindingSet, \u0275\u0275twoWayListener, \u0275\u0275twoWayProperty, \u0275\u0275validateAttribute, \u0275\u0275viewQuery, \u0275\u0275viewQuerySignal };\n","/**\n * @license Angular v21.2.4\n * (c) 2010-2026 Google LLC. https://angular.dev/\n * License: MIT\n */\n\nimport { inject, ErrorHandler, DestroyRef, RuntimeError, formatRuntimeError, signalAsReadonlyFn, assertInInjectionContext, Injector, effect, PendingTasks, signal } from './_effect-chunk2.mjs';\nimport { setActiveConsumer, createComputed, SIGNAL } from './_effect-chunk.mjs';\nimport { untracked as untracked$1, createLinkedSignal, linkedSignalSetFn, linkedSignalUpdateFn } from './_untracked-chunk.mjs';\nclass OutputEmitterRef {\n destroyed = false;\n listeners = null;\n errorHandler = /*#__PURE__*/inject(ErrorHandler, {\n optional: true\n });\n destroyRef = /*#__PURE__*/inject(DestroyRef);\n constructor() {\n this.destroyRef.onDestroy(() => {\n this.destroyed = true;\n this.listeners = null;\n });\n }\n subscribe(callback) {\n if (this.destroyed) {\n throw new RuntimeError(953, ngDevMode && 'Unexpected subscription to destroyed `OutputRef`. ' + 'The owning directive/component is destroyed.');\n }\n (this.listeners ??= []).push(callback);\n return {\n unsubscribe: () => {\n const idx = this.listeners?.indexOf(callback);\n if (idx !== undefined && idx !== -1) {\n this.listeners?.splice(idx, 1);\n }\n }\n };\n }\n emit(value) {\n if (this.destroyed) {\n console.warn(formatRuntimeError(953, ngDevMode && 'Unexpected emit for destroyed `OutputRef`. ' + 'The owning directive/component is destroyed.'));\n return;\n }\n if (this.listeners === null) {\n return;\n }\n const previousConsumer = setActiveConsumer(null);\n try {\n for (const listenerFn of this.listeners) {\n try {\n listenerFn(value);\n } catch (err) {\n this.errorHandler?.handleError(err);\n }\n }\n } finally {\n setActiveConsumer(previousConsumer);\n }\n }\n}\nfunction getOutputDestroyRef(ref) {\n return ref.destroyRef;\n}\nfunction untracked(nonReactiveReadsFn) {\n return untracked$1(nonReactiveReadsFn);\n}\nfunction computed(computation, options) {\n const getter = createComputed(computation, options?.equal);\n if (typeof ngDevMode !== 'undefined' && ngDevMode) {\n const debugName = options?.debugName;\n getter[SIGNAL].debugName = debugName;\n getter.toString = () => `[Computed${debugName ? ' (' + debugName + ')' : ''}: ${getter()}]`;\n }\n return getter;\n}\nconst identityFn = v => v;\nfunction linkedSignal(optionsOrComputation, options) {\n if (typeof optionsOrComputation === 'function') {\n const getter = createLinkedSignal(optionsOrComputation, identityFn, options?.equal);\n return upgradeLinkedSignalGetter(getter, options?.debugName);\n } else {\n const getter = createLinkedSignal(optionsOrComputation.source, optionsOrComputation.computation, optionsOrComputation.equal);\n return upgradeLinkedSignalGetter(getter, optionsOrComputation.debugName);\n }\n}\nfunction upgradeLinkedSignalGetter(getter, debugName) {\n if (typeof ngDevMode !== 'undefined' && ngDevMode) {\n getter[SIGNAL].debugName = debugName;\n getter.toString = () => `[LinkedSignal${debugName ? ' (' + debugName + ')' : ''}: ${getter()}]`;\n }\n const node = getter[SIGNAL];\n const upgradedGetter = getter;\n upgradedGetter.set = newValue => linkedSignalSetFn(node, newValue);\n upgradedGetter.update = updateFn => linkedSignalUpdateFn(node, updateFn);\n upgradedGetter.asReadonly = signalAsReadonlyFn.bind(getter);\n return upgradedGetter;\n}\nfunction resource(options) {\n if (ngDevMode && !options?.injector) {\n assertInInjectionContext(resource);\n }\n const oldNameForParams = options.request;\n const params = options.params ?? oldNameForParams ?? (() => null);\n return new ResourceImpl(params, getLoader(options), options.defaultValue, options.equal ? wrapEqualityFn(options.equal) : undefined, options.debugName, options.injector ?? inject(Injector));\n}\nclass BaseWritableResource {\n value;\n isLoading;\n constructor(value, debugName) {\n this.value = value;\n this.value.set = this.set.bind(this);\n this.value.update = this.update.bind(this);\n this.value.asReadonly = signalAsReadonlyFn;\n this.isLoading = computed(() => this.status() === 'loading' || this.status() === 'reloading', ngDevMode ? createDebugNameObject(debugName, 'isLoading') : undefined);\n }\n isError = /*#__PURE__*/computed(() => this.status() === 'error');\n update(updateFn) {\n this.set(updateFn(untracked(this.value)));\n }\n isValueDefined = /*#__PURE__*/computed(() => {\n if (this.isError()) {\n return false;\n }\n return this.value() !== undefined;\n });\n _snapshot;\n get snapshot() {\n return this._snapshot ??= computed(() => {\n const status = this.status();\n if (status === 'error') {\n return {\n status: 'error',\n error: this.error()\n };\n } else {\n return {\n status,\n value: this.value()\n };\n }\n });\n }\n hasValue() {\n return this.isValueDefined();\n }\n asReadonly() {\n return this;\n }\n}\nclass ResourceImpl extends BaseWritableResource {\n loaderFn;\n equal;\n debugName;\n pendingTasks;\n state;\n extRequest;\n effectRef;\n pendingController;\n resolvePendingTask = undefined;\n destroyed = false;\n unregisterOnDestroy;\n status;\n error;\n constructor(request, loaderFn, defaultValue, equal, debugName, injector, getInitialStream) {\n super(computed(() => {\n const streamValue = this.state().stream?.();\n if (!streamValue) {\n return defaultValue;\n }\n if (this.state().status === 'loading' && this.error()) {\n return defaultValue;\n }\n if (!isResolved(streamValue)) {\n throw new ResourceValueError(this.error());\n }\n return streamValue.value;\n }, {\n equal,\n ...(ngDevMode ? createDebugNameObject(debugName, 'value') : undefined)\n }), debugName);\n this.loaderFn = loaderFn;\n this.equal = equal;\n this.debugName = debugName;\n this.extRequest = linkedSignal({\n source: request,\n computation: request => ({\n request,\n reload: 0\n }),\n ...(ngDevMode ? createDebugNameObject(debugName, 'extRequest') : undefined)\n });\n this.state = linkedSignal({\n source: this.extRequest,\n computation: (extRequest, previous) => {\n if (!previous) {\n const initialStream = getInitialStream?.(extRequest.request);\n getInitialStream = undefined;\n const status = extRequest.request === undefined ? 'idle' : initialStream ? 'resolved' : 'loading';\n return {\n extRequest,\n status,\n previousStatus: 'idle',\n stream: initialStream\n };\n } else {\n const status = extRequest.request === undefined ? 'idle' : 'loading';\n return {\n extRequest,\n status,\n previousStatus: projectStatusOfState(previous.value),\n stream: previous.value.extRequest.request === extRequest.request ? previous.value.stream : undefined\n };\n }\n },\n ...(ngDevMode ? createDebugNameObject(debugName, 'state') : undefined)\n });\n this.effectRef = effect(this.loadEffect.bind(this), {\n injector,\n manualCleanup: true,\n ...(ngDevMode ? createDebugNameObject(debugName, 'loadEffect') : undefined)\n });\n this.pendingTasks = injector.get(PendingTasks);\n this.unregisterOnDestroy = injector.get(DestroyRef).onDestroy(() => this.destroy());\n this.status = computed(() => projectStatusOfState(this.state()), ngDevMode ? createDebugNameObject(debugName, 'status') : undefined);\n this.error = computed(() => {\n const stream = this.state().stream?.();\n return stream && !isResolved(stream) ? stream.error : undefined;\n }, ngDevMode ? createDebugNameObject(debugName, 'error') : undefined);\n }\n set(value) {\n if (this.destroyed) {\n return;\n }\n const error = untracked(this.error);\n const state = untracked(this.state);\n if (!error) {\n const current = untracked(this.value);\n if (state.status === 'local' && (this.equal ? this.equal(current, value) : current === value)) {\n return;\n }\n }\n this.state.set({\n extRequest: state.extRequest,\n status: 'local',\n previousStatus: 'local',\n stream: signal({\n value\n }, ngDevMode ? createDebugNameObject(this.debugName, 'stream') : undefined)\n });\n this.abortInProgressLoad();\n }\n reload() {\n const {\n status\n } = untracked(this.state);\n if (status === 'idle' || status === 'loading') {\n return false;\n }\n this.extRequest.update(({\n request,\n reload\n }) => ({\n request,\n reload: reload + 1\n }));\n return true;\n }\n destroy() {\n this.destroyed = true;\n this.unregisterOnDestroy();\n this.effectRef.destroy();\n this.abortInProgressLoad();\n this.state.set({\n extRequest: {\n request: undefined,\n reload: 0\n },\n status: 'idle',\n previousStatus: 'idle',\n stream: undefined\n });\n }\n async loadEffect() {\n const extRequest = this.extRequest();\n const {\n status: currentStatus,\n previousStatus\n } = untracked(this.state);\n if (extRequest.request === undefined) {\n return;\n } else if (currentStatus !== 'loading') {\n return;\n }\n this.abortInProgressLoad();\n let resolvePendingTask = this.resolvePendingTask = this.pendingTasks.add();\n const {\n signal: abortSignal\n } = this.pendingController = new AbortController();\n try {\n const stream = await untracked(() => {\n return this.loaderFn({\n params: extRequest.request,\n abortSignal,\n previous: {\n status: previousStatus\n }\n });\n });\n if (abortSignal.aborted || untracked(this.extRequest) !== extRequest) {\n return;\n }\n this.state.set({\n extRequest,\n status: 'resolved',\n previousStatus: 'resolved',\n stream\n });\n } catch (err) {\n if (abortSignal.aborted || untracked(this.extRequest) !== extRequest) {\n return;\n }\n this.state.set({\n extRequest,\n status: 'resolved',\n previousStatus: 'error',\n stream: signal({\n error: encapsulateResourceError(err)\n }, ngDevMode ? createDebugNameObject(this.debugName, 'stream') : undefined)\n });\n } finally {\n resolvePendingTask?.();\n resolvePendingTask = undefined;\n }\n }\n abortInProgressLoad() {\n untracked(() => this.pendingController?.abort());\n this.pendingController = undefined;\n this.resolvePendingTask?.();\n this.resolvePendingTask = undefined;\n }\n}\nfunction wrapEqualityFn(equal) {\n return (a, b) => a === undefined || b === undefined ? a === b : equal(a, b);\n}\nfunction getLoader(options) {\n if (isStreamingResourceOptions(options)) {\n return options.stream;\n }\n return async params => {\n try {\n return signal({\n value: await options.loader(params)\n }, ngDevMode ? createDebugNameObject(options.debugName, 'stream') : undefined);\n } catch (err) {\n return signal({\n error: encapsulateResourceError(err)\n }, ngDevMode ? createDebugNameObject(options.debugName, 'stream') : undefined);\n }\n };\n}\nfunction isStreamingResourceOptions(options) {\n return !!options.stream;\n}\nfunction projectStatusOfState(state) {\n switch (state.status) {\n case 'loading':\n return state.extRequest.reload === 0 ? 'loading' : 'reloading';\n case 'resolved':\n return isResolved(state.stream()) ? 'resolved' : 'error';\n default:\n return state.status;\n }\n}\nfunction isResolved(state) {\n return state.error === undefined;\n}\nfunction createDebugNameObject(resourceDebugName, internalSignalDebugName) {\n return {\n debugName: `Resource${resourceDebugName ? '#' + resourceDebugName : ''}.${internalSignalDebugName}`\n };\n}\nfunction encapsulateResourceError(error) {\n if (isErrorLike(error)) {\n return error;\n }\n return new ResourceWrappedError(error);\n}\nfunction isErrorLike(error) {\n return error instanceof Error || typeof error === 'object' && typeof error.name === 'string' && typeof error.message === 'string';\n}\nclass ResourceValueError extends Error {\n constructor(error) {\n super(ngDevMode ? `Resource is currently in an error state (see Error.cause for details): ${error.message}` : error.message, {\n cause: error\n });\n }\n}\nclass ResourceWrappedError extends Error {\n constructor(error) {\n super(ngDevMode ? `Resource returned an error that's not an Error instance: ${String(error)}. Check this error's .cause for the actual error.` : String(error), {\n cause: error\n });\n }\n}\nexport { OutputEmitterRef, ResourceImpl, ResourceValueError, computed, encapsulateResourceError, getOutputDestroyRef, linkedSignal, resource, untracked };\n","/**\n * @license Angular v21.2.4\n * (c) 2010-2026 Google LLC. https://angular.dev/\n * License: MIT\n */\n\nimport { RuntimeError, InjectionToken, getCurrentTNode, assertInInjectionContext, signalAsReadonlyFn, assertNgModuleType, Injector, inject, NgZone, ChangeDetectionScheduler, INTERNAL_APPLICATION_ERROR_HANDLER, \u0275\u0275defineInjectable as __defineInjectable, ZONELESS_ENABLED, ENVIRONMENT_INITIALIZER, SCHEDULE_IN_ROOT_ZONE, SCHEDULE_IN_ROOT_ZONE_DEFAULT, makeEnvironmentProviders, PendingTasksInternal, formatRuntimeError, ERROR_DETAILS_PAGE_BASE_URL, PROVIDED_ZONELESS, stringify, \u0275\u0275inject as __inject, errorHandlerEnvironmentInitializer, INJECTOR_SCOPE, runInInjectionContext, provideEnvironmentInitializer, ErrorHandler, _global, unwrapRNode, CLEANUP, DOCUMENT, DOC_PAGE_BASE_URL, DEBUG_TASK_TRACKER, isComponentHost, getComponentLViewByIndex, getLView, DECLARATION_COMPONENT_VIEW, \u0275\u0275defineInjector as __defineInjector, isLContainer, HOST, hasI18n, unwrapLView, RENDERER, assertTNode, isProjectionTNode, getComponentDef, PARENT, isRootView, HEADER_OFFSET, TVIEW, CONTEXT, CONTAINER_HEADER_OFFSET, assertNotInReactiveContext, ViewContext, DestroyRef, setInjectorProfilerContext, emitAfterRenderEffectPhaseCreatedEvent, getNullInjector } from './_effect-chunk2.mjs';\nexport { EnvironmentInjector, EventEmitter, INJECTOR, PendingTasks, VERSION, Version, effect, forwardRef, importProvidersFrom, isStandalone, provideBrowserGlobalErrorListeners, resolveForwardRef, signal, EffectScheduler as \u0275EffectScheduler, NG_COMP_DEF as \u0275NG_COMP_DEF, NG_DIR_DEF as \u0275NG_DIR_DEF, NG_ELEMENT_ID as \u0275NG_ELEMENT_ID, NG_INJ_DEF as \u0275NG_INJ_DEF, NG_MOD_DEF as \u0275NG_MOD_DEF, NG_PIPE_DEF as \u0275NG_PIPE_DEF, NG_PROV_DEF as \u0275NG_PROV_DEF, NoopNgZone as \u0275NoopNgZone, R3Injector as \u0275R3Injector, XSS_SECURITY_URL as \u0275XSS_SECURITY_URL, convertToBitFlags as \u0275convertToBitFlags, createInjector as \u0275createInjector, getInjectableDef as \u0275getInjectableDef, isEnvironmentProviders as \u0275isEnvironmentProviders, isInjectable as \u0275isInjectable, store as \u0275store, truncateMiddle as \u0275truncateMiddle, \u0275unwrapWritableSignal, \u0275\u0275disableBindings, \u0275\u0275enableBindings, \u0275\u0275invalidFactoryDep, \u0275\u0275namespaceHTML, \u0275\u0275namespaceMathML, \u0275\u0275namespaceSVG, \u0275\u0275resetView, \u0275\u0275restoreView } from './_effect-chunk2.mjs';\nimport { SIGNAL_NODE, signalSetFn, SIGNAL, producerAccessed, consumerDestroy, consumerPollProducersForChange, consumerBeforeComputation, consumerAfterComputation } from './_effect-chunk.mjs';\nimport { \u0275\u0275injectAttribute as __injectAttribute, createMultiResultQuerySignalFn, createSingleResultOptionalQuerySignalFn, createSingleResultRequiredQuerySignalFn, makePropDecorator, NgModuleFactory, COMPILER_OPTIONS, setJitOptions, isComponentResourceResolutionQueueEmpty, getCompilerFacade, resolveComponentResources, ApplicationRef, setClassMetadata, Injectable, performanceMarkFeature, IMAGE_CONFIG, getDocument, remove, isPromise, ApplicationInitStatus, LOCALE_ID, DEFAULT_LOCALE_ID, setLocaleId, createNgModuleRefWithProviders, optionsReducer, provideZonelessChangeDetectionInternal, validAppIdInitializer, publishDefaultGlobalUtils, PLATFORM_INITIALIZER, publishSignalConfiguration, ChangeDetectionSchedulerImpl, checkNoChangesInternal, UseExhaustiveCheckNoChanges, JSACTION_BLOCK_ELEMENT_MAP, APP_ID, setStashFn, APP_BOOTSTRAP_LISTENER, JSACTION_EVENT_CONTRACT, removeListeners, isIncrementalHydrationEnabled, DEFER_BLOCK_SSR_ID_ATTRIBUTE, invokeListeners, EVENT_REPLAY_QUEUE, triggerHydrationFromBlockName, IS_EVENT_REPLAY_ENABLED, EVENT_REPLAY_ENABLED_DEFAULT, sharedStashFunction, sharedMapFunction, enableStashEventListenerImpl, IS_I18N_HYDRATION_ENABLED, IS_HYDRATION_DOM_REUSE_ENABLED, IS_INCREMENTAL_HYDRATION_ENABLED, DEHYDRATED_BLOCK_REGISTRY, DehydratedBlockRegistry, processBlockData, gatherDeferBlocksCommentNodes, processAndInitTriggers, appendDeferBlocksToJSActionMap, TransferState, NGH_DATA_KEY, verifySsrContentsIntegrity, Console, PRESERVE_HOST_CONTENT, cleanupDehydratedViews, countBlocksSkippedByHydration, enableRetrieveHydrationInfoImpl, enableLocateOrCreateElementNodeImpl, enableLocateOrCreateTextNodeImpl, enableLocateOrCreateElementContainerNodeImpl, enableLocateOrCreateContainerAnchorImpl, enableLocateOrCreateContainerRefImpl, enableFindMatchingDehydratedViewImpl, enableApplyRootElementTransformImpl, enableLocateOrCreateI18nNodeImpl, enablePrepareI18nBlockForHydrationImpl, setIsI18nHydrationSupportEnabled, enableClaimDehydratedIcuCaseImpl, enableRetrieveDeferBlockDataImpl, provideAppInitializer, getRegisteredNgModuleType, ViewRef as ViewRef$1, isListLikeIterable, iterateListLike, isJsObject, \u0275\u0275defineNgModule as __defineNgModule, NgModule, profiler, assertStandaloneComponentType, EnvironmentNgModuleRefAdapter, ProfilerEvent, isI18nHydrationEnabled, NGH_DEFER_BLOCKS_KEY, SKIP_HYDRATION_ATTR_NAME, NGH_ATTR_NAME, getLNodeForHydration, isI18nHydrationSupportEnabled, getOrComputeI18nChildren, trySerializeI18nBlock, I18N_DATA, isTNodeShape, isDetachedByI18n, TEMPLATES, isDisconnectedNode, isInSkipHydrationBlock, unsupportedProjectionOfDomNodes, CONTAINERS, isLetDeclaration, ELEMENT_CONTAINERS, processTextNodeBeforeSerialization, setJSActionAttributes, ViewEncapsulation as ViewEncapsulation$1, collectNativeNodes, TEMPLATE_ID, NUM_ROOT_NODES, isDeferBlock, getLDeferBlockDetails, getTDeferBlockDetails, collectNativeNodesInLContainer, validateNodeExists, validateMatchingNode, DEFER_BLOCK_ID, DEFER_BLOCK_STATE, DEFER_BLOCK_STATE$1, MULTIPLIER, NODES, calcPathForNode, DISCONNECTED_NODES, convertHydrateTriggersToJsAction, DEFER_HYDRATE_TRIGGERS, DEFER_PARENT_BLOCK_ID, angularCoreEnv, setClassMetadataAsync, NOOP_AFTER_RENDER_REF, AfterRenderManager, TracingService, AfterRenderImpl, AfterRenderSequence, AFTER_RENDER_PHASES, isSignal, assertComponentDef, ComponentFactory } from './_debug_node-chunk.mjs';\nexport { ANIMATION_MODULE_TYPE, APP_INITIALIZER, Attribute, CSP_NONCE, CUSTOM_ELEMENTS_SCHEMA, ChangeDetectionStrategy, Compiler, CompilerFactory, Component, ComponentFactory$1 as ComponentFactory, ComponentFactoryResolver, ComponentRef, DEFAULT_CURRENCY_CODE, DebugElement, DebugEventListener, DebugNode, Directive, ElementRef, Host, HostBinding, HostListener, Inject, Input, MAX_ANIMATION_TIMEOUT, MissingTranslationStrategy, ModuleWithComponentFactories, NO_ERRORS_SCHEMA, NgModuleFactory$1 as NgModuleFactory, NgModuleRef$1 as NgModuleRef, Optional, Output, PLATFORM_ID, Pipe, QueryList, Renderer2, RendererFactory2, RendererStyleFlags2, Sanitizer, SecurityContext, Self, SimpleChange, SkipSelf, TRANSLATIONS, TRANSLATIONS_FORMAT, TemplateRef, Testability, TestabilityRegistry, Type, ViewContainerRef, afterEveryRender, afterNextRender, asNativeElements, createEnvironmentInjector, createNgModule, createNgModuleRef, enableProfiling, getDebugNode, inputBinding, isWritableSignal, makeStateKey, outputBinding, provideNgReflectAttributes, provideZonelessChangeDetection, setTestabilityGetter, twoWayBinding, ANIMATIONS_DISABLED as \u0275ANIMATIONS_DISABLED, AcxChangeDetectionStrategy as \u0275AcxChangeDetectionStrategy, AcxViewEncapsulation as \u0275AcxViewEncapsulation, ComponentFactory$1 as \u0275ComponentFactory, DEFER_BLOCK_CONFIG as \u0275DEFER_BLOCK_CONFIG, DEFER_BLOCK_DEPENDENCY_INTERCEPTOR as \u0275DEFER_BLOCK_DEPENDENCY_INTERCEPTOR, DeferBlockBehavior as \u0275DeferBlockBehavior, DeferBlockState as \u0275DeferBlockState, HydrationStatus as \u0275HydrationStatus, IMAGE_CONFIG_DEFAULTS as \u0275IMAGE_CONFIG_DEFAULTS, IS_ENABLED_BLOCKING_INITIAL_NAVIGATION as \u0275IS_ENABLED_BLOCKING_INITIAL_NAVIGATION, LContext as \u0275LContext, LocaleDataIndex as \u0275LocaleDataIndex, NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR as \u0275NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR, NO_CHANGE as \u0275NO_CHANGE, ReflectionCapabilities as \u0275ReflectionCapabilities, ComponentRef$1 as \u0275Render3ComponentRef, NgModuleRef as \u0275Render3NgModuleRef, SSR_CONTENT_INTEGRITY_MARKER as \u0275SSR_CONTENT_INTEGRITY_MARKER, TESTABILITY as \u0275TESTABILITY, TESTABILITY_GETTER as \u0275TESTABILITY_GETTER, TimerScheduler as \u0275TimerScheduler, TracingAction as \u0275TracingAction, _sanitizeHtml as \u0275_sanitizeHtml, _sanitizeUrl as \u0275_sanitizeUrl, allLeavingAnimations as \u0275allLeavingAnimations, allowSanitizationBypassAndThrow as \u0275allowSanitizationBypassAndThrow, bypassSanitizationTrustHtml as \u0275bypassSanitizationTrustHtml, bypassSanitizationTrustResourceUrl as \u0275bypassSanitizationTrustResourceUrl, bypassSanitizationTrustScript as \u0275bypassSanitizationTrustScript, bypassSanitizationTrustStyle as \u0275bypassSanitizationTrustStyle, bypassSanitizationTrustUrl as \u0275bypassSanitizationTrustUrl, clearResolutionOfComponentResourcesQueue as \u0275clearResolutionOfComponentResourcesQueue, compileComponent as \u0275compileComponent, compileDirective as \u0275compileDirective, compileNgModule as \u0275compileNgModule, compileNgModuleDefs as \u0275compileNgModuleDefs, compilePipe as \u0275compilePipe, depsTracker as \u0275depsTracker, devModeEqual as \u0275devModeEqual, findLocaleData as \u0275findLocaleData, flushModuleScopingQueueAsMuchAsPossible as \u0275flushModuleScopingQueueAsMuchAsPossible, generateStandaloneInDeclarationsError as \u0275generateStandaloneInDeclarationsError, getAsyncClassMetadataFn as \u0275getAsyncClassMetadataFn, getClosestComponentName as \u0275getClosestComponentName, getDeferBlocks as \u0275getDeferBlocks, getDirectives as \u0275getDirectives, getHostElement as \u0275getHostElement, getLContext as \u0275getLContext, getLocaleCurrencyCode as \u0275getLocaleCurrencyCode, getLocalePluralCase as \u0275getLocalePluralCase, getSanitizationBypassType as \u0275getSanitizationBypassType, getTransferState as \u0275getTransferState, \u0275getUnknownElementStrictMode, \u0275getUnknownPropertyStrictMode, inferTagNameFromDefinition as \u0275inferTagNameFromDefinition, isBoundToModule as \u0275isBoundToModule, isComponentDefPendingResolution as \u0275isComponentDefPendingResolution, isNgModule as \u0275isNgModule, isSubscribable as \u0275isSubscribable, isViewDirty as \u0275isViewDirty, markForRefresh as \u0275markForRefresh, noSideEffects as \u0275noSideEffects, patchComponentDefWithScope as \u0275patchComponentDefWithScope, promiseWithResolvers as \u0275promiseWithResolvers, publishExternalGlobalUtil as \u0275publishExternalGlobalUtil, readHydrationInfo as \u0275readHydrationInfo, registerLocaleData as \u0275registerLocaleData, renderDeferBlockState as \u0275renderDeferBlockState, resetCompiledComponents as \u0275resetCompiledComponents, resetIncrementalHydrationEnabledWarnedForTests as \u0275resetIncrementalHydrationEnabledWarnedForTests, resetJitOptions as \u0275resetJitOptions, restoreComponentResolutionQueue as \u0275restoreComponentResolutionQueue, setAllowDuplicateNgModuleIdsForTest as \u0275setAllowDuplicateNgModuleIdsForTest, \u0275setClassDebugInfo, setDocument as \u0275setDocument, \u0275setUnknownElementStrictMode, \u0275setUnknownPropertyStrictMode, transitiveScopesFor as \u0275transitiveScopesFor, triggerResourceLoading as \u0275triggerResourceLoading, unregisterAllLocaleData as \u0275unregisterLocaleData, unwrapSafeValue as \u0275unwrapSafeValue, \u0275\u0275ControlFeature, \u0275\u0275ExternalStylesFeature, \u0275\u0275HostDirectivesFeature, \u0275\u0275InheritDefinitionFeature, \u0275\u0275NgOnChangesFeature, \u0275\u0275ProvidersFeature, \u0275\u0275advance, \u0275\u0275animateEnter, \u0275\u0275animateEnterListener, \u0275\u0275animateLeave, \u0275\u0275animateLeaveListener, \u0275\u0275ariaProperty, \u0275\u0275arrowFunction, \u0275\u0275attachSourceLocations, \u0275\u0275attribute, \u0275\u0275classMap, \u0275\u0275classProp, \u0275\u0275componentInstance, \u0275\u0275conditional, \u0275\u0275conditionalBranchCreate, \u0275\u0275conditionalCreate, \u0275\u0275contentQuery, \u0275\u0275contentQuerySignal, \u0275\u0275control, \u0275\u0275controlCreate, \u0275\u0275declareLet, \u0275\u0275defer, \u0275\u0275deferEnableTimerScheduling, \u0275\u0275deferHydrateNever, \u0275\u0275deferHydrateOnHover, \u0275\u0275deferHydrateOnIdle, \u0275\u0275deferHydrateOnImmediate, \u0275\u0275deferHydrateOnInteraction, \u0275\u0275deferHydrateOnTimer, \u0275\u0275deferHydrateOnViewport, \u0275\u0275deferHydrateWhen, \u0275\u0275deferOnHover, \u0275\u0275deferOnIdle, \u0275\u0275deferOnImmediate, \u0275\u0275deferOnInteraction, \u0275\u0275deferOnTimer, \u0275\u0275deferOnViewport, \u0275\u0275deferPrefetchOnHover, \u0275\u0275deferPrefetchOnIdle, \u0275\u0275deferPrefetchOnImmediate, \u0275\u0275deferPrefetchOnInteraction, \u0275\u0275deferPrefetchOnTimer, \u0275\u0275deferPrefetchOnViewport, \u0275\u0275deferPrefetchWhen, \u0275\u0275deferWhen, \u0275\u0275defineComponent, \u0275\u0275defineDirective, \u0275\u0275definePipe, \u0275\u0275directiveInject, \u0275\u0275domElement, \u0275\u0275domElementContainer, \u0275\u0275domElementContainerEnd, \u0275\u0275domElementContainerStart, \u0275\u0275domElementEnd, \u0275\u0275domElementStart, \u0275\u0275domListener, \u0275\u0275domProperty, \u0275\u0275domTemplate, \u0275\u0275element, \u0275\u0275elementContainer, \u0275\u0275elementContainerEnd, \u0275\u0275elementContainerStart, \u0275\u0275elementEnd, \u0275\u0275elementStart, \u0275\u0275getComponentDepsFactory, \u0275\u0275getCurrentView, \u0275\u0275getInheritedFactory, \u0275\u0275getReplaceMetadataURL, \u0275\u0275i18n, \u0275\u0275i18nApply, \u0275\u0275i18nAttributes, \u0275\u0275i18nEnd, \u0275\u0275i18nExp, \u0275\u0275i18nPostprocess, \u0275\u0275i18nStart, \u0275\u0275interpolate, \u0275\u0275interpolate1, \u0275\u0275interpolate2, \u0275\u0275interpolate3, \u0275\u0275interpolate4, \u0275\u0275interpolate5, \u0275\u0275interpolate6, \u0275\u0275interpolate7, \u0275\u0275interpolate8, \u0275\u0275interpolateV, \u0275\u0275invalidFactory, \u0275\u0275listener, \u0275\u0275loadQuery, \u0275\u0275nextContext, \u0275\u0275pipe, \u0275\u0275pipeBind1, \u0275\u0275pipeBind2, \u0275\u0275pipeBind3, \u0275\u0275pipeBind4, \u0275\u0275pipeBindV, \u0275\u0275projection, \u0275\u0275projectionDef, \u0275\u0275property, \u0275\u0275pureFunction0, \u0275\u0275pureFunction1, \u0275\u0275pureFunction2, \u0275\u0275pureFunction3, \u0275\u0275pureFunction4, \u0275\u0275pureFunction5, \u0275\u0275pureFunction6, \u0275\u0275pureFunction7, \u0275\u0275pureFunction8, \u0275\u0275pureFunctionV, \u0275\u0275queryAdvance, \u0275\u0275queryRefresh, \u0275\u0275readContextLet, \u0275\u0275reference, registerNgModuleType as \u0275\u0275registerNgModuleType, \u0275\u0275repeater, \u0275\u0275repeaterCreate, \u0275\u0275repeaterTrackByIdentity, \u0275\u0275repeaterTrackByIndex, \u0275\u0275replaceMetadata, \u0275\u0275resolveBody, \u0275\u0275resolveDocument, \u0275\u0275resolveWindow, \u0275\u0275sanitizeHtml, \u0275\u0275sanitizeResourceUrl, \u0275\u0275sanitizeScript, \u0275\u0275sanitizeStyle, \u0275\u0275sanitizeUrl, \u0275\u0275sanitizeUrlOrResourceUrl, \u0275\u0275setComponentScope, \u0275\u0275setNgModuleScope, \u0275\u0275storeLet, \u0275\u0275styleMap, \u0275\u0275styleProp, \u0275\u0275syntheticHostListener, \u0275\u0275syntheticHostProperty, \u0275\u0275template, \u0275\u0275templateRefExtractor, \u0275\u0275text, \u0275\u0275textInterpolate, \u0275\u0275textInterpolate1, \u0275\u0275textInterpolate2, \u0275\u0275textInterpolate3, \u0275\u0275textInterpolate4, \u0275\u0275textInterpolate5, \u0275\u0275textInterpolate6, \u0275\u0275textInterpolate7, \u0275\u0275textInterpolate8, \u0275\u0275textInterpolateV, \u0275\u0275trustConstantHtml, \u0275\u0275trustConstantResourceUrl, \u0275\u0275twoWayBindingSet, \u0275\u0275twoWayListener, \u0275\u0275twoWayProperty, \u0275\u0275validateAttribute, \u0275\u0275viewQuery, \u0275\u0275viewQuerySignal } from './_debug_node-chunk.mjs';\nimport { OutputEmitterRef, computed, ResourceValueError } from './_resource-chunk.mjs';\nexport { linkedSignal, resource, untracked, ResourceImpl as \u0275ResourceImpl, encapsulateResourceError as \u0275encapsulateResourceError, getOutputDestroyRef as \u0275getOutputDestroyRef } from './_resource-chunk.mjs';\nimport { Subscription } from 'rxjs';\nimport { clearAppScopedEarlyEventContract, EventContract, EventContractContainer, EventDispatcher, registerDispatcher, EventPhase, getAppScopedQueuedEventInfos, isEarlyEventType, isCaptureEventType } from './primitives-event-dispatch.mjs';\nexport { setAlternateWeakRefImpl as \u0275setAlternateWeakRefImpl } from './_weak_ref-chunk.mjs';\nexport { setCurrentInjector as \u0275setCurrentInjector } from './_not_found-chunk.mjs';\nimport '@angular/core/primitives/signals';\nimport '@angular/core/primitives/di';\nimport 'rxjs/operators';\nimport './_attribute-chunk.mjs';\nimport './_untracked-chunk.mjs';\nconst REQUIRED_UNSET_VALUE = /* @__PURE__ */Symbol('InputSignalNode#UNSET');\nconst INPUT_SIGNAL_NODE = /* @__PURE__ */(() => {\n return {\n ...SIGNAL_NODE,\n transformFn: undefined,\n applyValueToInputSignal(node, value) {\n signalSetFn(node, value);\n }\n };\n})();\nconst \u0275INPUT_SIGNAL_BRAND_WRITE_TYPE = /* @__PURE__ */Symbol();\nfunction createInputSignal(initialValue, options) {\n const node = Object.create(INPUT_SIGNAL_NODE);\n node.value = initialValue;\n node.transformFn = options?.transform;\n function inputValueFn() {\n producerAccessed(node);\n if (node.value === REQUIRED_UNSET_VALUE) {\n let message = null;\n if (ngDevMode) {\n const name = options?.debugName ?? options?.alias;\n message = `Input${name ? ` \"${name}\"` : ''} is required but no value is available yet.`;\n }\n throw new RuntimeError(-950, message);\n }\n return node.value;\n }\n inputValueFn[SIGNAL] = node;\n if (ngDevMode) {\n inputValueFn.toString = () => `[Input Signal: ${inputValueFn()}]`;\n node.debugName = options?.debugName;\n }\n return inputValueFn;\n}\nvar FactoryTarget = /*#__PURE__*/function (FactoryTarget) {\n FactoryTarget[FactoryTarget[\"Directive\"] = 0] = \"Directive\";\n FactoryTarget[FactoryTarget[\"Component\"] = 1] = \"Component\";\n FactoryTarget[FactoryTarget[\"Injectable\"] = 2] = \"Injectable\";\n FactoryTarget[FactoryTarget[\"Pipe\"] = 3] = \"Pipe\";\n FactoryTarget[FactoryTarget[\"NgModule\"] = 4] = \"NgModule\";\n return FactoryTarget;\n}(FactoryTarget || {});\nvar R3TemplateDependencyKind = /*#__PURE__*/function (R3TemplateDependencyKind) {\n R3TemplateDependencyKind[R3TemplateDependencyKind[\"Directive\"] = 0] = \"Directive\";\n R3TemplateDependencyKind[R3TemplateDependencyKind[\"Pipe\"] = 1] = \"Pipe\";\n R3TemplateDependencyKind[R3TemplateDependencyKind[\"NgModule\"] = 2] = \"NgModule\";\n return R3TemplateDependencyKind;\n}(R3TemplateDependencyKind || {});\nvar ViewEncapsulation = /*#__PURE__*/function (ViewEncapsulation) {\n ViewEncapsulation[ViewEncapsulation[\"Emulated\"] = 0] = \"Emulated\";\n ViewEncapsulation[ViewEncapsulation[\"None\"] = 2] = \"None\";\n ViewEncapsulation[ViewEncapsulation[\"ShadowDom\"] = 3] = \"ShadowDom\";\n ViewEncapsulation[ViewEncapsulation[\"ExperimentalIsolatedShadowDom\"] = 4] = \"ExperimentalIsolatedShadowDom\";\n return ViewEncapsulation;\n}(ViewEncapsulation || {});\nvar Framework = /*#__PURE__*/function (Framework) {\n Framework[\"Angular\"] = \"angular\";\n Framework[\"ACX\"] = \"acx\";\n Framework[\"Wiz\"] = \"wiz\";\n return Framework;\n}(Framework || {});\nclass HostAttributeToken {\n attributeName;\n constructor(attributeName) {\n this.attributeName = attributeName;\n }\n __NG_ELEMENT_ID__ = () => __injectAttribute(this.attributeName);\n toString() {\n return `HostAttributeToken ${this.attributeName}`;\n }\n}\nconst HOST_TAG_NAME = /* @__PURE__ */(() => {\n const HOST_TAG_NAME_TOKEN = new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'HOST_TAG_NAME' : '');\n HOST_TAG_NAME_TOKEN.__NG_ELEMENT_ID__ = flags => {\n const tNode = getCurrentTNode();\n if (tNode === null) {\n throw new RuntimeError(-204, ngDevMode && 'HOST_TAG_NAME can only be injected in directives and components ' + 'during construction time (in a class constructor or as a class field initializer)');\n }\n if (tNode.type & 2) {\n return tNode.value;\n }\n if (flags & 8) {\n return null;\n }\n throw new RuntimeError(-204, ngDevMode && `HOST_TAG_NAME was used on ${getDevModeNodeName(tNode)} which doesn't have an underlying element in the DOM. ` + `This is invalid, and so the dependency should be marked as optional.`);\n };\n return HOST_TAG_NAME_TOKEN;\n})();\nfunction getDevModeNodeName(tNode) {\n if (tNode.type & 8) {\n return 'an ';\n } else if (tNode.type & 4) {\n return 'an ';\n } else if (tNode.type & 128) {\n return 'an @let declaration';\n } else {\n return 'a node';\n }\n}\nfunction output(opts) {\n ngDevMode && assertInInjectionContext(output);\n return new OutputEmitterRef();\n}\nfunction inputFunction(initialValue, opts) {\n ngDevMode && assertInInjectionContext(input);\n return createInputSignal(initialValue, opts);\n}\nfunction inputRequiredFunction(opts) {\n ngDevMode && assertInInjectionContext(input);\n return createInputSignal(REQUIRED_UNSET_VALUE, opts);\n}\nconst input = /*#__PURE__*/(() => {\n inputFunction.required = inputRequiredFunction;\n return inputFunction;\n})();\nfunction viewChildFn(locator, opts) {\n ngDevMode && assertInInjectionContext(viewChild);\n return createSingleResultOptionalQuerySignalFn(opts);\n}\nfunction viewChildRequiredFn(locator, opts) {\n ngDevMode && assertInInjectionContext(viewChild);\n return createSingleResultRequiredQuerySignalFn(opts);\n}\nconst viewChild = /*#__PURE__*/(() => {\n viewChildFn.required = viewChildRequiredFn;\n return viewChildFn;\n})();\nfunction viewChildren(locator, opts) {\n ngDevMode && assertInInjectionContext(viewChildren);\n return createMultiResultQuerySignalFn(opts);\n}\nfunction contentChildFn(locator, opts) {\n ngDevMode && assertInInjectionContext(contentChild);\n return createSingleResultOptionalQuerySignalFn(opts);\n}\nfunction contentChildRequiredFn(locator, opts) {\n ngDevMode && assertInInjectionContext(contentChildren);\n return createSingleResultRequiredQuerySignalFn(opts);\n}\nconst contentChild = /*#__PURE__*/(() => {\n contentChildFn.required = contentChildRequiredFn;\n return contentChildFn;\n})();\nfunction contentChildren(locator, opts) {\n return createMultiResultQuerySignalFn(opts);\n}\nfunction createModelSignal(initialValue, opts) {\n const node = Object.create(INPUT_SIGNAL_NODE);\n const emitterRef = new OutputEmitterRef();\n node.value = initialValue;\n function getter() {\n producerAccessed(node);\n assertModelSet(node.value);\n return node.value;\n }\n getter[SIGNAL] = node;\n getter.asReadonly = signalAsReadonlyFn.bind(getter);\n getter.set = newValue => {\n if (!node.equal(node.value, newValue)) {\n signalSetFn(node, newValue);\n emitterRef.emit(newValue);\n }\n };\n getter.update = updateFn => {\n assertModelSet(node.value);\n getter.set(updateFn(node.value));\n };\n getter.subscribe = emitterRef.subscribe.bind(emitterRef);\n getter.destroyRef = emitterRef.destroyRef;\n if (ngDevMode) {\n getter.toString = () => `[Model Signal: ${getter()}]`;\n node.debugName = opts?.debugName;\n }\n return getter;\n}\nfunction assertModelSet(value) {\n if (value === REQUIRED_UNSET_VALUE) {\n throw new RuntimeError(952, ngDevMode && 'Model is required but no value is available yet.');\n }\n}\nfunction modelFunction(initialValue, opts) {\n ngDevMode && assertInInjectionContext(model);\n return createModelSignal(initialValue, opts);\n}\nfunction modelRequiredFunction(opts) {\n ngDevMode && assertInInjectionContext(model);\n return createModelSignal(REQUIRED_UNSET_VALUE, opts);\n}\nconst model = /*#__PURE__*/(() => {\n modelFunction.required = modelRequiredFunction;\n return modelFunction;\n})();\nconst emitDistinctChangesOnlyDefaultValue = true;\nclass Query {}\nconst ContentChildren = /*#__PURE__*/makePropDecorator('ContentChildren', (selector, opts = {}) => ({\n selector,\n first: false,\n isViewQuery: false,\n descendants: false,\n emitDistinctChangesOnly: emitDistinctChangesOnlyDefaultValue,\n ...opts\n}), Query);\nconst ContentChild = /*#__PURE__*/makePropDecorator('ContentChild', (selector, opts = {}) => ({\n selector,\n first: true,\n isViewQuery: false,\n descendants: true,\n ...opts\n}), Query);\nconst ViewChildren = /*#__PURE__*/makePropDecorator('ViewChildren', (selector, opts = {}) => ({\n selector,\n first: false,\n isViewQuery: true,\n descendants: true,\n emitDistinctChangesOnly: emitDistinctChangesOnlyDefaultValue,\n ...opts\n}), Query);\nconst ViewChild = /*#__PURE__*/makePropDecorator('ViewChild', (selector, opts) => ({\n selector,\n first: true,\n isViewQuery: true,\n descendants: true,\n ...opts\n}), Query);\nfunction compileNgModuleFactory(injector, options, moduleType) {\n ngDevMode && assertNgModuleType(moduleType);\n const moduleFactory = new NgModuleFactory(moduleType);\n if (typeof ngJitMode !== 'undefined' && !ngJitMode) {\n return Promise.resolve(moduleFactory);\n }\n const compilerOptions = injector.get(COMPILER_OPTIONS, []).concat(options);\n setJitOptions({\n defaultEncapsulation: _lastDefined(compilerOptions.map(opts => opts.defaultEncapsulation)),\n preserveWhitespaces: _lastDefined(compilerOptions.map(opts => opts.preserveWhitespaces))\n });\n if (isComponentResourceResolutionQueueEmpty()) {\n return Promise.resolve(moduleFactory);\n }\n const compilerProviders = compilerOptions.flatMap(option => option.providers ?? []);\n if (compilerProviders.length === 0) {\n return Promise.resolve(moduleFactory);\n }\n const compiler = getCompilerFacade({\n usage: 0,\n kind: 'NgModule',\n type: moduleType\n });\n const compilerInjector = Injector.create({\n providers: compilerProviders\n });\n const resourceLoader = compilerInjector.get(compiler.ResourceLoader);\n return resolveComponentResources(url => Promise.resolve(resourceLoader.get(url))).then(() => moduleFactory);\n}\nfunction _lastDefined(args) {\n for (let i = args.length - 1; i >= 0; i--) {\n if (args[i] !== undefined) {\n return args[i];\n }\n }\n return undefined;\n}\nlet NgZoneChangeDetectionScheduler = /*#__PURE__*/(() => {\n class NgZoneChangeDetectionScheduler {\n zone = inject(NgZone);\n changeDetectionScheduler = inject(ChangeDetectionScheduler);\n applicationRef = inject(ApplicationRef);\n applicationErrorHandler = inject(INTERNAL_APPLICATION_ERROR_HANDLER);\n _onMicrotaskEmptySubscription;\n initialize() {\n if (this._onMicrotaskEmptySubscription) {\n return;\n }\n this._onMicrotaskEmptySubscription = this.zone.onMicrotaskEmpty.subscribe({\n next: () => {\n if (this.changeDetectionScheduler.runningTick) {\n return;\n }\n this.zone.run(() => {\n try {\n this.applicationRef.dirtyFlags |= 1;\n this.applicationRef._tick();\n } catch (e) {\n this.applicationErrorHandler(e);\n }\n });\n }\n });\n }\n ngOnDestroy() {\n this._onMicrotaskEmptySubscription?.unsubscribe();\n }\n static \u0275fac = function NgZoneChangeDetectionScheduler_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || NgZoneChangeDetectionScheduler)();\n };\n static \u0275prov = /*@__PURE__*/__defineInjectable({\n token: NgZoneChangeDetectionScheduler,\n factory: NgZoneChangeDetectionScheduler.\u0275fac,\n providedIn: 'root'\n });\n }\n return NgZoneChangeDetectionScheduler;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && setClassMetadata(NgZoneChangeDetectionScheduler, [{\n type: Injectable,\n args: [{\n providedIn: 'root'\n }]\n }], null, null);\n})();\nconst PROVIDED_NG_ZONE = /*#__PURE__*/new InjectionToken(typeof ngDevMode === 'undefined' || ngDevMode ? 'provideZoneChangeDetection token' : '', {\n factory: () => false\n});\nfunction internalProvideZoneChangeDetection({\n ngZoneFactory,\n scheduleInRootZone\n}) {\n ngZoneFactory ??= () => new NgZone({\n ...getNgZoneOptions(),\n scheduleInRootZone\n });\n return [{\n provide: ZONELESS_ENABLED,\n useValue: false\n }, {\n provide: NgZone,\n useFactory: ngZoneFactory\n }, {\n provide: ENVIRONMENT_INITIALIZER,\n multi: true,\n useFactory: () => {\n const ngZoneChangeDetectionScheduler = inject(NgZoneChangeDetectionScheduler, {\n optional: true\n });\n if ((typeof ngDevMode === 'undefined' || ngDevMode) && ngZoneChangeDetectionScheduler === null) {\n throw new RuntimeError(402, `A required Injectable was not found in the dependency injection tree. ` + 'If you are bootstrapping an NgModule, make sure that the `BrowserModule` is imported.');\n }\n return () => ngZoneChangeDetectionScheduler.initialize();\n }\n }, {\n provide: ENVIRONMENT_INITIALIZER,\n multi: true,\n useFactory: () => {\n const service = inject(ZoneStablePendingTask);\n return () => {\n service.initialize();\n };\n }\n }, {\n provide: SCHEDULE_IN_ROOT_ZONE,\n useValue: scheduleInRootZone ?? SCHEDULE_IN_ROOT_ZONE_DEFAULT\n }];\n}\nfunction provideZoneChangeDetection(options) {\n const scheduleInRootZone = options?.scheduleInRootZone;\n const zoneProviders = internalProvideZoneChangeDetection({\n ngZoneFactory: () => {\n const ngZoneOptions = getNgZoneOptions(options);\n ngZoneOptions.scheduleInRootZone = scheduleInRootZone;\n if (ngZoneOptions.shouldCoalesceEventChangeDetection) {\n performanceMarkFeature('NgZone_CoalesceEvent');\n }\n return new NgZone(ngZoneOptions);\n },\n scheduleInRootZone\n });\n return makeEnvironmentProviders([{\n provide: PROVIDED_NG_ZONE,\n useValue: true\n }, zoneProviders]);\n}\nfunction getNgZoneOptions(options) {\n return {\n enableLongStackTrace: typeof ngDevMode === 'undefined' ? false : !!ngDevMode,\n shouldCoalesceEventChangeDetection: options?.eventCoalescing ?? false,\n shouldCoalesceRunChangeDetection: options?.runCoalescing ?? false\n };\n}\nlet ZoneStablePendingTask = /*#__PURE__*/(() => {\n class ZoneStablePendingTask {\n subscription = new Subscription();\n initialized = false;\n zone = inject(NgZone);\n pendingTasks = inject(PendingTasksInternal);\n initialize() {\n if (this.initialized) {\n return;\n }\n this.initialized = true;\n let task = null;\n if (!this.zone.isStable && !this.zone.hasPendingMacrotasks && !this.zone.hasPendingMicrotasks) {\n task = this.pendingTasks.add();\n }\n this.zone.runOutsideAngular(() => {\n this.subscription.add(this.zone.onStable.subscribe(() => {\n NgZone.assertNotInAngularZone();\n queueMicrotask(() => {\n if (task !== null && !this.zone.hasPendingMacrotasks && !this.zone.hasPendingMicrotasks) {\n this.pendingTasks.remove(task);\n task = null;\n }\n });\n }));\n });\n this.subscription.add(this.zone.onUnstable.subscribe(() => {\n NgZone.assertInAngularZone();\n task ??= this.pendingTasks.add();\n }));\n }\n ngOnDestroy() {\n this.subscription.unsubscribe();\n }\n static \u0275fac = function ZoneStablePendingTask_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || ZoneStablePendingTask)();\n };\n static \u0275prov = /*@__PURE__*/__defineInjectable({\n token: ZoneStablePendingTask,\n factory: ZoneStablePendingTask.\u0275fac,\n providedIn: 'root'\n });\n }\n return ZoneStablePendingTask;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && setClassMetadata(ZoneStablePendingTask, [{\n type: Injectable,\n args: [{\n providedIn: 'root'\n }]\n }], null, null);\n})();\nconst SCAN_DELAY = 200;\nconst OVERSIZED_IMAGE_TOLERANCE = 1200;\nlet ImagePerformanceWarning = /*#__PURE__*/(() => {\n class ImagePerformanceWarning {\n window = null;\n observer = null;\n options = inject(IMAGE_CONFIG);\n lcpImageUrl;\n start() {\n if (typeof ngServerMode !== 'undefined' && ngServerMode || typeof PerformanceObserver === 'undefined' || this.options?.disableImageSizeWarning && this.options?.disableImageLazyLoadWarning) {\n return;\n }\n this.observer = this.initPerformanceObserver();\n const doc = getDocument();\n const win = doc.defaultView;\n if (win) {\n this.window = win;\n const waitToScan = () => {\n setTimeout(this.scanImages.bind(this), SCAN_DELAY);\n };\n const setup = () => {\n if (doc.readyState === 'complete') {\n waitToScan();\n } else {\n this.window?.addEventListener('load', waitToScan, {\n once: true\n });\n }\n };\n if (typeof Zone !== 'undefined') {\n Zone.root.run(() => setup());\n } else {\n setup();\n }\n }\n }\n ngOnDestroy() {\n this.observer?.disconnect();\n }\n initPerformanceObserver() {\n if (typeof PerformanceObserver === 'undefined') {\n return null;\n }\n const observer = new PerformanceObserver(entryList => {\n const entries = entryList.getEntries();\n if (entries.length === 0) return;\n const lcpElement = entries[entries.length - 1];\n const imgSrc = lcpElement.element?.src ?? '';\n if (imgSrc.startsWith('data:') || imgSrc.startsWith('blob:')) return;\n this.lcpImageUrl = imgSrc;\n });\n observer.observe({\n type: 'largest-contentful-paint',\n buffered: true\n });\n return observer;\n }\n scanImages() {\n const images = getDocument().querySelectorAll('img');\n let lcpElementFound,\n lcpElementLoadedCorrectly = false;\n for (let index = 0; index < images.length; index++) {\n const image = images[index];\n if (!image) {\n continue;\n }\n if (!this.options?.disableImageSizeWarning) {\n if (!image.getAttribute('ng-img') && this.isOversized(image)) {\n logOversizedImageWarning(image.src);\n }\n }\n if (!this.options?.disableImageLazyLoadWarning && this.lcpImageUrl) {\n if (image.src === this.lcpImageUrl) {\n lcpElementFound = true;\n if (image.loading !== 'lazy' || image.getAttribute('ng-img')) {\n lcpElementLoadedCorrectly = true;\n }\n }\n }\n }\n if (lcpElementFound && !lcpElementLoadedCorrectly && this.lcpImageUrl && !this.options?.disableImageLazyLoadWarning) {\n logLazyLCPWarning(this.lcpImageUrl);\n }\n }\n isOversized(image) {\n if (!this.window) {\n return false;\n }\n const nonOversizedImageExtentions = ['.svg'];\n const imageSource = (image.src || '').toLowerCase();\n if (nonOversizedImageExtentions.some(extension => imageSource.endsWith(extension))) {\n return false;\n }\n const computedStyle = this.window.getComputedStyle(image);\n let renderedWidth = parseFloat(computedStyle.getPropertyValue('width'));\n let renderedHeight = parseFloat(computedStyle.getPropertyValue('height'));\n const boxSizing = computedStyle.getPropertyValue('box-sizing');\n const objectFit = computedStyle.getPropertyValue('object-fit');\n if (objectFit === `cover`) {\n return false;\n }\n if (boxSizing === 'border-box') {\n const paddingTop = computedStyle.getPropertyValue('padding-top');\n const paddingRight = computedStyle.getPropertyValue('padding-right');\n const paddingBottom = computedStyle.getPropertyValue('padding-bottom');\n const paddingLeft = computedStyle.getPropertyValue('padding-left');\n renderedWidth -= parseFloat(paddingRight) + parseFloat(paddingLeft);\n renderedHeight -= parseFloat(paddingTop) + parseFloat(paddingBottom);\n }\n const intrinsicWidth = image.naturalWidth;\n const intrinsicHeight = image.naturalHeight;\n const recommendedWidth = this.window.devicePixelRatio * renderedWidth;\n const recommendedHeight = this.window.devicePixelRatio * renderedHeight;\n const oversizedWidth = intrinsicWidth - recommendedWidth >= OVERSIZED_IMAGE_TOLERANCE;\n const oversizedHeight = intrinsicHeight - recommendedHeight >= OVERSIZED_IMAGE_TOLERANCE;\n return oversizedWidth || oversizedHeight;\n }\n static \u0275fac = function ImagePerformanceWarning_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || ImagePerformanceWarning)();\n };\n static \u0275prov = /*@__PURE__*/__defineInjectable({\n token: ImagePerformanceWarning,\n factory: ImagePerformanceWarning.\u0275fac,\n providedIn: 'root'\n });\n }\n return ImagePerformanceWarning;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && setClassMetadata(ImagePerformanceWarning, [{\n type: Injectable,\n args: [{\n providedIn: 'root'\n }]\n }], null, null);\n})();\nfunction logLazyLCPWarning(src) {\n console.warn(formatRuntimeError(-913, `An image with src ${src} is the Largest Contentful Paint (LCP) element ` + `but was given a \"loading\" value of \"lazy\", which can negatively impact ` + `application loading performance. This warning can be addressed by ` + `changing the loading value of the LCP image to \"eager\", or by using the ` + `NgOptimizedImage directive's prioritization utilities. For more ` + `information about addressing or disabling this warning, see ` + `${ERROR_DETAILS_PAGE_BASE_URL}/NG0913`));\n}\nfunction logOversizedImageWarning(src) {\n console.warn(formatRuntimeError(-913, `An image with src ${src} has intrinsic file dimensions much larger than its ` + `rendered size. This can negatively impact application loading performance. ` + `For more information about addressing or disabling this warning, see ` + `${ERROR_DETAILS_PAGE_BASE_URL}/NG0913`));\n}\nconst PLATFORM_DESTROY_LISTENERS = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'PlatformDestroyListeners' : '');\nconst ENABLE_ROOT_COMPONENT_BOOTSTRAP = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'ENABLE_ROOT_COMPONENT_BOOTSTRAP' : '');\nfunction isApplicationBootstrapConfig(config) {\n return !config.moduleRef;\n}\nfunction bootstrap(config) {\n const envInjector = isApplicationBootstrapConfig(config) ? config.r3Injector : config.moduleRef.injector;\n const ngZone = envInjector.get(NgZone);\n return ngZone.run(() => {\n if (isApplicationBootstrapConfig(config)) {\n config.r3Injector.resolveInjectorInitializers();\n } else {\n config.moduleRef.resolveInjectorInitializers();\n }\n const exceptionHandler = envInjector.get(INTERNAL_APPLICATION_ERROR_HANDLER);\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n if (envInjector.get(PROVIDED_ZONELESS) && envInjector.get(PROVIDED_NG_ZONE)) {\n console.warn(formatRuntimeError(408, 'Both provideZoneChangeDetection and provideZonelessChangeDetection are provided. ' + 'This is likely a mistake. Update the application providers to use only one of the two.'));\n }\n }\n let onErrorSubscription;\n ngZone.runOutsideAngular(() => {\n onErrorSubscription = ngZone.onError.subscribe({\n next: exceptionHandler\n });\n });\n if (isApplicationBootstrapConfig(config)) {\n const destroyListener = () => envInjector.destroy();\n const onPlatformDestroyListeners = config.platformInjector.get(PLATFORM_DESTROY_LISTENERS);\n onPlatformDestroyListeners.add(destroyListener);\n envInjector.onDestroy(() => {\n onErrorSubscription.unsubscribe();\n onPlatformDestroyListeners.delete(destroyListener);\n });\n } else {\n const destroyListener = () => config.moduleRef.destroy();\n const onPlatformDestroyListeners = config.platformInjector.get(PLATFORM_DESTROY_LISTENERS);\n onPlatformDestroyListeners.add(destroyListener);\n config.moduleRef.onDestroy(() => {\n remove(config.allPlatformModules, config.moduleRef);\n onErrorSubscription.unsubscribe();\n onPlatformDestroyListeners.delete(destroyListener);\n });\n }\n return _callAndReportToErrorHandler(exceptionHandler, ngZone, () => {\n const pendingTasks = envInjector.get(PendingTasksInternal);\n const taskId = pendingTasks.add();\n const initStatus = envInjector.get(ApplicationInitStatus);\n initStatus.runInitializers();\n return initStatus.donePromise.then(() => {\n const localeId = envInjector.get(LOCALE_ID, DEFAULT_LOCALE_ID);\n setLocaleId(localeId || DEFAULT_LOCALE_ID);\n const enableRootComponentbootstrap = envInjector.get(ENABLE_ROOT_COMPONENT_BOOTSTRAP, true);\n if (!enableRootComponentbootstrap) {\n if (isApplicationBootstrapConfig(config)) {\n return envInjector.get(ApplicationRef);\n }\n config.allPlatformModules.push(config.moduleRef);\n return config.moduleRef;\n }\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n const imagePerformanceService = envInjector.get(ImagePerformanceWarning);\n imagePerformanceService.start();\n }\n if (isApplicationBootstrapConfig(config)) {\n const appRef = envInjector.get(ApplicationRef);\n if (config.rootComponent !== undefined) {\n appRef.bootstrap(config.rootComponent);\n }\n return appRef;\n } else {\n moduleBootstrapImpl?.(config.moduleRef, config.allPlatformModules);\n return config.moduleRef;\n }\n }).finally(() => void pendingTasks.remove(taskId));\n });\n });\n}\nlet moduleBootstrapImpl;\nfunction setModuleBootstrapImpl() {\n moduleBootstrapImpl = _moduleDoBootstrap;\n}\nfunction _moduleDoBootstrap(moduleRef, allPlatformModules) {\n const appRef = moduleRef.injector.get(ApplicationRef);\n if (moduleRef._bootstrapComponents.length > 0) {\n moduleRef._bootstrapComponents.forEach(f => appRef.bootstrap(f));\n } else if (moduleRef.instance.ngDoBootstrap) {\n moduleRef.instance.ngDoBootstrap(appRef);\n } else {\n throw new RuntimeError(-403, ngDevMode && `The module ${stringify(moduleRef.instance.constructor)} was bootstrapped, ` + `but it does not declare \"@NgModule.bootstrap\" components nor a \"ngDoBootstrap\" method. ` + `Please define one of these.`);\n }\n allPlatformModules.push(moduleRef);\n}\nfunction _callAndReportToErrorHandler(errorHandler, ngZone, callback) {\n try {\n const result = callback();\n if (isPromise(result)) {\n return result.catch(e => {\n ngZone.runOutsideAngular(() => errorHandler(e));\n throw e;\n });\n }\n return result;\n } catch (e) {\n ngZone.runOutsideAngular(() => errorHandler(e));\n throw e;\n }\n}\nlet PlatformRef = /*#__PURE__*/(() => {\n class PlatformRef {\n _injector;\n _modules = [];\n _destroyListeners = [];\n _destroyed = false;\n constructor(_injector) {\n this._injector = _injector;\n }\n bootstrapModuleFactory(moduleFactory, options) {\n const allAppProviders = [provideZonelessChangeDetectionInternal(), ...(options?.applicationProviders ?? []), errorHandlerEnvironmentInitializer, ...(ngDevMode ? [validAppIdInitializer] : [])];\n const moduleRef = createNgModuleRefWithProviders(moduleFactory.moduleType, this.injector, allAppProviders);\n setModuleBootstrapImpl();\n return bootstrap({\n moduleRef,\n allPlatformModules: this._modules,\n platformInjector: this.injector\n });\n }\n bootstrapModule(moduleType, compilerOptions = []) {\n const options = optionsReducer({}, compilerOptions);\n setModuleBootstrapImpl();\n return compileNgModuleFactory(this.injector, options, moduleType).then(moduleFactory => this.bootstrapModuleFactory(moduleFactory, options));\n }\n onDestroy(callback) {\n this._destroyListeners.push(callback);\n }\n get injector() {\n return this._injector;\n }\n destroy() {\n if (this._destroyed) {\n throw new RuntimeError(404, ngDevMode && 'The platform has already been destroyed!');\n }\n this._modules.slice().forEach(module => module.destroy());\n this._destroyListeners.forEach(listener => listener());\n const destroyListeners = this._injector.get(PLATFORM_DESTROY_LISTENERS, null);\n if (destroyListeners) {\n destroyListeners.forEach(listener => listener());\n destroyListeners.clear();\n }\n this._destroyed = true;\n }\n get destroyed() {\n return this._destroyed;\n }\n static \u0275fac = function PlatformRef_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || PlatformRef)(__inject(Injector));\n };\n static \u0275prov = /*@__PURE__*/__defineInjectable({\n token: PlatformRef,\n factory: PlatformRef.\u0275fac,\n providedIn: 'platform'\n });\n }\n return PlatformRef;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && setClassMetadata(PlatformRef, [{\n type: Injectable,\n args: [{\n providedIn: 'platform'\n }]\n }], () => [{\n type: Injector\n }], null);\n})();\nlet _platformInjector = null;\nfunction createPlatform(injector) {\n if (getPlatform()) {\n throw new RuntimeError(400, ngDevMode && 'There can be only one platform. Destroy the previous one to create a new one.');\n }\n publishDefaultGlobalUtils();\n publishSignalConfiguration();\n _platformInjector = typeof ngServerMode === 'undefined' || !ngServerMode ? injector : null;\n const platform = injector.get(PlatformRef);\n runPlatformInitializers(injector);\n return platform;\n}\nfunction createPlatformFactory(parentPlatformFactory, name, providers = []) {\n const desc = `Platform: ${name}`;\n const marker = new InjectionToken(desc);\n return (extraProviders = []) => {\n let platform = getPlatform();\n if (!platform) {\n const platformProviders = [...providers, ...extraProviders, {\n provide: marker,\n useValue: true\n }];\n platform = parentPlatformFactory?.(platformProviders) ?? createPlatform(createPlatformInjector(platformProviders, desc));\n }\n return typeof ngServerMode !== 'undefined' && ngServerMode ? platform : assertPlatform(marker);\n };\n}\nfunction createPlatformInjector(providers = [], name) {\n return Injector.create({\n name,\n providers: [{\n provide: INJECTOR_SCOPE,\n useValue: 'platform'\n }, {\n provide: PLATFORM_DESTROY_LISTENERS,\n useValue: new Set([() => _platformInjector = null])\n }, ...providers]\n });\n}\nfunction assertPlatform(requiredToken) {\n const platform = getPlatform();\n if (!platform) {\n throw new RuntimeError(-401, ngDevMode && 'No platform exists!');\n }\n if ((typeof ngDevMode === 'undefined' || ngDevMode) && !platform.injector.get(requiredToken, null)) {\n throw new RuntimeError(400, 'A platform with a different configuration has been created. Please destroy it first.');\n }\n return platform;\n}\nfunction getPlatform() {\n if (typeof ngServerMode !== 'undefined' && ngServerMode) {\n return null;\n }\n return _platformInjector?.get(PlatformRef) ?? null;\n}\nfunction destroyPlatform() {\n getPlatform()?.destroy();\n}\nfunction createOrReusePlatformInjector(providers = []) {\n if (_platformInjector) return _platformInjector;\n publishDefaultGlobalUtils();\n const injector = createPlatformInjector(providers);\n if (typeof ngServerMode === 'undefined' || !ngServerMode) {\n _platformInjector = injector;\n }\n publishSignalConfiguration();\n runPlatformInitializers(injector);\n return injector;\n}\nfunction providePlatformInitializer(initializerFn) {\n return {\n provide: PLATFORM_INITIALIZER,\n useValue: initializerFn,\n multi: true\n };\n}\nfunction runPlatformInitializers(injector) {\n const inits = injector.get(PLATFORM_INITIALIZER, null);\n runInInjectionContext(injector, () => {\n inits?.forEach(init => init());\n });\n}\nfunction exhaustiveCheckNoChangesInterval(interval) {\n return provideEnvironmentInitializer(() => {\n const applicationRef = inject(ApplicationRef);\n const errorHandler = inject(ErrorHandler);\n const scheduler = inject(ChangeDetectionSchedulerImpl);\n const ngZone = inject(NgZone);\n function scheduleCheckNoChanges() {\n ngZone.runOutsideAngular(() => {\n setTimeout(() => {\n if (applicationRef.destroyed) {\n return;\n }\n if (scheduler.pendingRenderTaskId || scheduler.runningTick) {\n scheduleCheckNoChanges();\n return;\n }\n for (const view of applicationRef.allViews) {\n try {\n checkNoChangesInternal(view._lView, true);\n } catch (e) {\n errorHandler.handleError(e);\n }\n }\n scheduleCheckNoChanges();\n }, interval);\n });\n }\n scheduleCheckNoChanges();\n });\n}\nfunction provideCheckNoChangesConfig(options) {\n return makeEnvironmentProviders(typeof ngDevMode === 'undefined' || ngDevMode ? [{\n provide: UseExhaustiveCheckNoChanges,\n useValue: options.exhaustive\n }, options?.interval !== undefined ? exhaustiveCheckNoChangesInterval(options.interval) : []] : []);\n}\nfunction isDevMode() {\n return typeof ngDevMode === 'undefined' || !!ngDevMode;\n}\nfunction enableProdMode() {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n _global['ngDevMode'] = false;\n }\n}\nconst appsWithEventReplay = /*#__PURE__*/new WeakSet();\nconst EAGER_CONTENT_LISTENERS_KEY = '';\nfunction shouldEnableEventReplay(injector) {\n return injector.get(IS_EVENT_REPLAY_ENABLED, EVENT_REPLAY_ENABLED_DEFAULT);\n}\nfunction withEventReplay() {\n const providers = [{\n provide: IS_EVENT_REPLAY_ENABLED,\n useFactory: () => {\n let isEnabled = true;\n if (typeof ngServerMode === 'undefined' || !ngServerMode) {\n const appId = inject(APP_ID);\n isEnabled = !!window._ejsas?.[appId];\n }\n if (isEnabled) {\n performanceMarkFeature('NgEventReplay');\n }\n return isEnabled;\n }\n }];\n if (typeof ngServerMode === 'undefined' || !ngServerMode) {\n providers.push({\n provide: ENVIRONMENT_INITIALIZER,\n useValue: () => {\n const appRef = inject(ApplicationRef);\n const {\n injector\n } = appRef;\n if (!appsWithEventReplay.has(appRef)) {\n const jsActionMap = inject(JSACTION_BLOCK_ELEMENT_MAP);\n if (shouldEnableEventReplay(injector)) {\n enableStashEventListenerImpl();\n const appId = injector.get(APP_ID);\n const clearStashFn = setStashFn(appId, (rEl, eventName, listenerFn) => {\n if (rEl.nodeType !== Node.ELEMENT_NODE) return;\n sharedStashFunction(rEl, eventName, listenerFn);\n sharedMapFunction(rEl, jsActionMap);\n });\n appRef.onDestroy(clearStashFn);\n }\n }\n },\n multi: true\n }, {\n provide: APP_BOOTSTRAP_LISTENER,\n useFactory: () => {\n const appRef = inject(ApplicationRef);\n const {\n injector\n } = appRef;\n return () => {\n if (!shouldEnableEventReplay(injector) || appsWithEventReplay.has(appRef)) {\n return;\n }\n appsWithEventReplay.add(appRef);\n const appId = injector.get(APP_ID);\n appRef.onDestroy(() => {\n appsWithEventReplay.delete(appRef);\n if (typeof ngServerMode !== 'undefined' && !ngServerMode) {\n clearAppScopedEarlyEventContract(appId);\n }\n });\n appRef.whenStable().then(() => {\n if (appRef.destroyed) {\n return;\n }\n const eventContractDetails = injector.get(JSACTION_EVENT_CONTRACT);\n initEventReplay(eventContractDetails, injector);\n const jsActionMap = injector.get(JSACTION_BLOCK_ELEMENT_MAP);\n jsActionMap.get(EAGER_CONTENT_LISTENERS_KEY)?.forEach(removeListeners);\n jsActionMap.delete(EAGER_CONTENT_LISTENERS_KEY);\n const eventContract = eventContractDetails.instance;\n if (isIncrementalHydrationEnabled(injector)) {\n appRef.onDestroy(() => eventContract.cleanUp());\n } else {\n eventContract.cleanUp();\n }\n });\n };\n },\n multi: true\n });\n }\n return providers;\n}\nconst initEventReplay = (eventDelegation, injector) => {\n const appId = injector.get(APP_ID);\n const earlyJsactionData = window._ejsas[appId];\n const eventContract = eventDelegation.instance = new EventContract(new EventContractContainer(earlyJsactionData.c));\n for (const et of earlyJsactionData.et) {\n eventContract.addEvent(et);\n }\n for (const et of earlyJsactionData.etc) {\n eventContract.addEvent(et);\n }\n const eventInfos = getAppScopedQueuedEventInfos(appId);\n eventContract.replayEarlyEventInfos(eventInfos);\n clearAppScopedEarlyEventContract(appId);\n const dispatcher = new EventDispatcher(event => {\n invokeRegisteredReplayListeners(injector, event, event.currentTarget);\n });\n registerDispatcher(eventContract, dispatcher);\n};\nfunction collectDomEventsInfo(tView, lView, eventTypesToReplay) {\n const domEventsInfo = new Map();\n const lCleanup = lView[CLEANUP];\n const tCleanup = tView.cleanup;\n if (!tCleanup || !lCleanup) {\n return domEventsInfo;\n }\n for (let i = 0; i < tCleanup.length;) {\n const firstParam = tCleanup[i++];\n const secondParam = tCleanup[i++];\n if (typeof firstParam !== 'string') {\n continue;\n }\n const eventType = firstParam;\n if (!isEarlyEventType(eventType)) {\n continue;\n }\n if (isCaptureEventType(eventType)) {\n eventTypesToReplay.capture.add(eventType);\n } else {\n eventTypesToReplay.regular.add(eventType);\n }\n const listenerElement = unwrapRNode(lView[secondParam]);\n i++;\n const useCaptureOrIndx = tCleanup[i++];\n const isDomEvent = typeof useCaptureOrIndx === 'boolean' || useCaptureOrIndx >= 0;\n if (!isDomEvent) {\n continue;\n }\n if (!domEventsInfo.has(listenerElement)) {\n domEventsInfo.set(listenerElement, [eventType]);\n } else {\n domEventsInfo.get(listenerElement).push(eventType);\n }\n }\n return domEventsInfo;\n}\nfunction invokeRegisteredReplayListeners(injector, event, currentTarget) {\n const blockName = (currentTarget && currentTarget.getAttribute(DEFER_BLOCK_SSR_ID_ATTRIBUTE)) ?? '';\n if (/d\\d+/.test(blockName)) {\n hydrateAndInvokeBlockListeners(blockName, injector, event, currentTarget);\n } else if (event.eventPhase === EventPhase.REPLAY) {\n invokeListeners(event, currentTarget);\n }\n}\nfunction hydrateAndInvokeBlockListeners(blockName, injector, event, currentTarget) {\n const queue = injector.get(EVENT_REPLAY_QUEUE);\n queue.push({\n event,\n currentTarget\n });\n triggerHydrationFromBlockName(injector, blockName, createReplayQueuedBlockEventsFn(queue));\n}\nfunction createReplayQueuedBlockEventsFn(queue) {\n return hydratedBlocks => {\n const hydrated = new Set(hydratedBlocks);\n const newQueue = [];\n for (let {\n event,\n currentTarget\n } of queue) {\n const blockName = currentTarget.getAttribute(DEFER_BLOCK_SSR_ID_ATTRIBUTE);\n if (hydrated.has(blockName)) {\n invokeListeners(event, currentTarget);\n } else {\n newQueue.push({\n event,\n currentTarget\n });\n }\n }\n queue.length = 0;\n queue.push(...newQueue);\n };\n}\nlet isHydrationSupportEnabled = false;\nlet isI18nHydrationRuntimeSupportEnabled = false;\nlet isIncrementalHydrationRuntimeSupportEnabled = false;\nconst APPLICATION_IS_STABLE_TIMEOUT = 10_000;\nfunction enableHydrationRuntimeSupport() {\n if (!isHydrationSupportEnabled) {\n isHydrationSupportEnabled = true;\n enableRetrieveHydrationInfoImpl();\n enableLocateOrCreateElementNodeImpl();\n enableLocateOrCreateTextNodeImpl();\n enableLocateOrCreateElementContainerNodeImpl();\n enableLocateOrCreateContainerAnchorImpl();\n enableLocateOrCreateContainerRefImpl();\n enableFindMatchingDehydratedViewImpl();\n enableApplyRootElementTransformImpl();\n }\n}\nfunction enableI18nHydrationRuntimeSupport() {\n if (!isI18nHydrationRuntimeSupportEnabled) {\n isI18nHydrationRuntimeSupportEnabled = true;\n enableLocateOrCreateI18nNodeImpl();\n enablePrepareI18nBlockForHydrationImpl();\n enableClaimDehydratedIcuCaseImpl();\n }\n}\nfunction enableIncrementalHydrationRuntimeSupport() {\n if (!isIncrementalHydrationRuntimeSupportEnabled) {\n isIncrementalHydrationRuntimeSupportEnabled = true;\n enableRetrieveDeferBlockDataImpl();\n }\n}\nfunction printHydrationStats(injector) {\n const console = injector.get(Console);\n const message = `Angular hydrated ${ngDevMode.hydratedComponents} component(s) ` + `and ${ngDevMode.hydratedNodes} node(s), ` + `${ngDevMode.componentsSkippedHydration} component(s) were skipped. ` + (isIncrementalHydrationEnabled(injector) ? `${ngDevMode.deferBlocksWithIncrementalHydration} defer block(s) were configured to use incremental hydration. ` : '') + `Learn more at ${DOC_PAGE_BASE_URL}/guide/hydration.`;\n console.log(message);\n}\nfunction whenStableWithTimeout(appRef) {\n const whenStablePromise = appRef.whenStable();\n if (typeof ngDevMode !== 'undefined' && ngDevMode) {\n const timeoutTime = APPLICATION_IS_STABLE_TIMEOUT;\n const console = appRef.injector.get(Console);\n const ngZone = appRef.injector.get(NgZone);\n const timeoutId = ngZone.runOutsideAngular(() => {\n return setTimeout(() => logWarningOnStableTimedout(timeoutTime, console), timeoutTime);\n });\n whenStablePromise.finally(() => clearTimeout(timeoutId));\n }\n return whenStablePromise;\n}\nconst CLIENT_RENDER_MODE_FLAG = 'ngcm';\nfunction isClientRenderModeEnabled(doc) {\n return (typeof ngServerMode === 'undefined' || !ngServerMode) && doc.body.hasAttribute(CLIENT_RENDER_MODE_FLAG);\n}\nfunction withDomHydration() {\n const providers = [{\n provide: IS_HYDRATION_DOM_REUSE_ENABLED,\n useFactory: () => {\n let isEnabled = true;\n if (typeof ngServerMode === 'undefined' || !ngServerMode) {\n const transferState = inject(TransferState, {\n optional: true\n });\n isEnabled = !!transferState?.get(NGH_DATA_KEY, null);\n }\n if (isEnabled) {\n performanceMarkFeature('NgHydration');\n }\n return isEnabled;\n }\n }, {\n provide: ENVIRONMENT_INITIALIZER,\n useValue: () => {\n setIsI18nHydrationSupportEnabled(false);\n if (typeof ngServerMode !== 'undefined' && ngServerMode) {\n return;\n }\n const doc = inject(DOCUMENT);\n if (inject(IS_HYDRATION_DOM_REUSE_ENABLED)) {\n verifySsrContentsIntegrity(doc);\n enableHydrationRuntimeSupport();\n } else if (typeof ngDevMode !== 'undefined' && ngDevMode && !isClientRenderModeEnabled(doc)) {\n const console = inject(Console);\n const message = formatRuntimeError(-505, 'Angular hydration was requested on the client, but there was no ' + 'serialized information present in the server response, ' + 'thus hydration was not enabled. ' + 'Make sure the `provideClientHydration()` is included into the list ' + 'of providers in the server part of the application configuration.');\n console.warn(message);\n }\n },\n multi: true\n }];\n if (typeof ngServerMode === 'undefined' || !ngServerMode) {\n providers.push({\n provide: PRESERVE_HOST_CONTENT,\n useFactory: () => {\n return inject(IS_HYDRATION_DOM_REUSE_ENABLED);\n }\n }, {\n provide: APP_BOOTSTRAP_LISTENER,\n useFactory: () => {\n const scheduler = inject(ChangeDetectionScheduler);\n if (inject(IS_HYDRATION_DOM_REUSE_ENABLED)) {\n const appRef = inject(ApplicationRef);\n return () => {\n whenStableWithTimeout(appRef).then(() => {\n if (appRef.destroyed) {\n return;\n }\n cleanupDehydratedViews(appRef);\n if (typeof ngDevMode !== 'undefined' && ngDevMode) {\n countBlocksSkippedByHydration(appRef.injector);\n printHydrationStats(appRef.injector);\n }\n scheduler.notify(7);\n });\n };\n }\n return () => {};\n },\n multi: true\n });\n }\n return makeEnvironmentProviders(providers);\n}\nfunction withI18nSupport() {\n return [{\n provide: IS_I18N_HYDRATION_ENABLED,\n useFactory: () => inject(IS_HYDRATION_DOM_REUSE_ENABLED)\n }, {\n provide: ENVIRONMENT_INITIALIZER,\n useValue: () => {\n if (inject(IS_HYDRATION_DOM_REUSE_ENABLED)) {\n enableI18nHydrationRuntimeSupport();\n setIsI18nHydrationSupportEnabled(true);\n performanceMarkFeature('NgI18nHydration');\n }\n },\n multi: true\n }];\n}\nfunction withIncrementalHydration() {\n const providers = [withEventReplay(), {\n provide: IS_INCREMENTAL_HYDRATION_ENABLED,\n useValue: true\n }, {\n provide: DEHYDRATED_BLOCK_REGISTRY,\n useClass: DehydratedBlockRegistry\n }, {\n provide: ENVIRONMENT_INITIALIZER,\n useValue: () => {\n enableIncrementalHydrationRuntimeSupport();\n performanceMarkFeature('NgIncrementalHydration');\n },\n multi: true\n }];\n if (typeof ngServerMode === 'undefined' || !ngServerMode) {\n providers.push({\n provide: APP_BOOTSTRAP_LISTENER,\n useFactory: () => {\n const injector = inject(Injector);\n const doc = inject(DOCUMENT);\n return () => {\n const deferBlockData = processBlockData(injector);\n const commentsByBlockId = gatherDeferBlocksCommentNodes(doc, doc.body);\n processAndInitTriggers(injector, deferBlockData, commentsByBlockId);\n appendDeferBlocksToJSActionMap(doc, injector);\n };\n },\n multi: true\n });\n }\n return providers;\n}\nfunction logWarningOnStableTimedout(time, console) {\n const message = `Angular hydration expected the ApplicationRef.isStable() to emit \\`true\\`, but it ` + `didn't happen within ${time}ms. Angular hydration logic depends on the application becoming stable ` + `as a signal to complete hydration process.`;\n console.warn(formatRuntimeError(-506, message));\n}\nconst STABILITY_WARNING_THRESHOLD = APPLICATION_IS_STABLE_TIMEOUT - 1_000;\nclass DebugTaskTrackerImpl {\n openTasks = /*#__PURE__*/new Map();\n add(taskId) {\n this.openTasks.set(taskId, new Error('Task stack tracking error'));\n }\n remove(taskId) {\n this.openTasks.delete(taskId);\n }\n}\nfunction provideStabilityDebugging() {\n const taskTracker = new DebugTaskTrackerImpl();\n const {\n openTasks\n } = taskTracker;\n return makeEnvironmentProviders([{\n provide: DEBUG_TASK_TRACKER,\n useValue: taskTracker\n }, provideAppInitializer(() => {\n if (typeof ngDevMode === 'undefined' || !ngDevMode) {\n console.warn('Stability debugging utility was provided in production mode. ' + 'This will cause debug code to be included in production bundles. ' + 'If this is intentional because you are debugging stability issues in a production environment, you can ignore this warning.');\n }\n const ngZone = inject(NgZone);\n const applicationRef = inject(ApplicationRef);\n let _taskTrackingZone = null;\n if (typeof Zone !== 'undefined') {\n ngZone.run(() => {\n _taskTrackingZone = Zone.current.get('TaskTrackingZone');\n });\n }\n ngZone.runOutsideAngular(() => {\n const timeoutId = setTimeout(() => {\n console.debug(`---- Application did not stabilize within ${STABILITY_WARNING_THRESHOLD / 1000} seconds ----`);\n if (typeof Zone !== 'undefined' && !_taskTrackingZone) {\n console.info('Zone.js is present but no TaskTrackingZone found. To enable better debugging of tasks in the Angular Zone, ' + 'import \"zone.js/plugins/task-tracking\" in your application.');\n }\n if (_taskTrackingZone?.macroTasks?.length) {\n console.group('Macrotasks keeping Angular Zone unstable:');\n for (const t of _taskTrackingZone?.macroTasks ?? []) {\n console.debug(t.creationLocation.stack);\n }\n console.groupEnd();\n }\n console.group('PendingTasks keeping application unstable:');\n for (const error of openTasks.values()) {\n console.debug(error.stack);\n }\n console.groupEnd();\n }, STABILITY_WARNING_THRESHOLD);\n applicationRef.whenStable().then(() => {\n clearTimeout(timeoutId);\n });\n });\n })]);\n}\nfunction getModuleFactory(id) {\n const type = getRegisteredNgModuleType(id);\n if (!type) throw noModuleError(id);\n return new NgModuleFactory(type);\n}\nfunction getNgModuleById(id) {\n const type = getRegisteredNgModuleType(id);\n if (!type) throw noModuleError(id);\n return type;\n}\nfunction noModuleError(id) {\n return new RuntimeError(920, ngDevMode && `No module with ID ${id} loaded`);\n}\nlet ChangeDetectorRef = /*#__PURE__*/(() => {\n class ChangeDetectorRef {\n static __NG_ELEMENT_ID__ = injectChangeDetectorRef;\n }\n return ChangeDetectorRef;\n})();\nfunction injectChangeDetectorRef(flags) {\n return createViewRef(getCurrentTNode(), getLView(), (flags & 16) === 16);\n}\nfunction createViewRef(tNode, lView, isPipe) {\n if (isComponentHost(tNode) && !isPipe) {\n const componentView = getComponentLViewByIndex(tNode.index, lView);\n return new ViewRef$1(componentView, componentView);\n } else if (tNode.type & (3 | 12 | 32 | 128)) {\n const hostComponentView = lView[DECLARATION_COMPONENT_VIEW];\n return new ViewRef$1(hostComponentView, lView);\n }\n return null;\n}\nclass ViewRef extends ChangeDetectorRef {}\nclass EmbeddedViewRef extends ViewRef {}\nclass DefaultIterableDifferFactory {\n supports(obj) {\n return isListLikeIterable(obj);\n }\n create(trackByFn) {\n return new DefaultIterableDiffer(trackByFn);\n }\n}\nconst trackByIdentity = (index, item) => item;\nclass DefaultIterableDiffer {\n length = 0;\n collection;\n _linkedRecords = null;\n _unlinkedRecords = null;\n _previousItHead = null;\n _itHead = null;\n _itTail = null;\n _additionsHead = null;\n _additionsTail = null;\n _movesHead = null;\n _movesTail = null;\n _removalsHead = null;\n _removalsTail = null;\n _identityChangesHead = null;\n _identityChangesTail = null;\n _trackByFn;\n constructor(trackByFn) {\n this._trackByFn = trackByFn || trackByIdentity;\n }\n forEachItem(fn) {\n let record;\n for (record = this._itHead; record !== null; record = record._next) {\n fn(record);\n }\n }\n forEachOperation(fn) {\n let nextIt = this._itHead;\n let nextRemove = this._removalsHead;\n let addRemoveOffset = 0;\n let moveOffsets = null;\n while (nextIt || nextRemove) {\n const record = !nextRemove || nextIt && nextIt.currentIndex < getPreviousIndex(nextRemove, addRemoveOffset, moveOffsets) ? nextIt : nextRemove;\n const adjPreviousIndex = getPreviousIndex(record, addRemoveOffset, moveOffsets);\n const currentIndex = record.currentIndex;\n if (record === nextRemove) {\n addRemoveOffset--;\n nextRemove = nextRemove._nextRemoved;\n } else {\n nextIt = nextIt._next;\n if (record.previousIndex == null) {\n addRemoveOffset++;\n } else {\n if (!moveOffsets) moveOffsets = [];\n const localMovePreviousIndex = adjPreviousIndex - addRemoveOffset;\n const localCurrentIndex = currentIndex - addRemoveOffset;\n if (localMovePreviousIndex != localCurrentIndex) {\n for (let i = 0; i < localMovePreviousIndex; i++) {\n const offset = i < moveOffsets.length ? moveOffsets[i] : moveOffsets[i] = 0;\n const index = offset + i;\n if (localCurrentIndex <= index && index < localMovePreviousIndex) {\n moveOffsets[i] = offset + 1;\n }\n }\n const previousIndex = record.previousIndex;\n moveOffsets[previousIndex] = localCurrentIndex - localMovePreviousIndex;\n }\n }\n }\n if (adjPreviousIndex !== currentIndex) {\n fn(record, adjPreviousIndex, currentIndex);\n }\n }\n }\n forEachPreviousItem(fn) {\n let record;\n for (record = this._previousItHead; record !== null; record = record._nextPrevious) {\n fn(record);\n }\n }\n forEachAddedItem(fn) {\n let record;\n for (record = this._additionsHead; record !== null; record = record._nextAdded) {\n fn(record);\n }\n }\n forEachMovedItem(fn) {\n let record;\n for (record = this._movesHead; record !== null; record = record._nextMoved) {\n fn(record);\n }\n }\n forEachRemovedItem(fn) {\n let record;\n for (record = this._removalsHead; record !== null; record = record._nextRemoved) {\n fn(record);\n }\n }\n forEachIdentityChange(fn) {\n let record;\n for (record = this._identityChangesHead; record !== null; record = record._nextIdentityChange) {\n fn(record);\n }\n }\n diff(collection) {\n if (collection == null) collection = [];\n if (!isListLikeIterable(collection)) {\n throw new RuntimeError(900, ngDevMode && `Error trying to diff '${stringify(collection)}'. Only arrays and iterables are allowed`);\n }\n if (this.check(collection)) {\n return this;\n } else {\n return null;\n }\n }\n onDestroy() {}\n check(collection) {\n this._reset();\n let record = this._itHead;\n let mayBeDirty = false;\n let index;\n let item;\n let itemTrackBy;\n if (Array.isArray(collection)) {\n this.length = collection.length;\n for (let index = 0; index < this.length; index++) {\n item = collection[index];\n itemTrackBy = this._trackByFn(index, item);\n if (record === null || !Object.is(record.trackById, itemTrackBy)) {\n record = this._mismatch(record, item, itemTrackBy, index);\n mayBeDirty = true;\n } else {\n if (mayBeDirty) {\n record = this._verifyReinsertion(record, item, itemTrackBy, index);\n }\n if (!Object.is(record.item, item)) this._addIdentityChange(record, item);\n }\n record = record._next;\n }\n } else {\n index = 0;\n iterateListLike(collection, item => {\n itemTrackBy = this._trackByFn(index, item);\n if (record === null || !Object.is(record.trackById, itemTrackBy)) {\n record = this._mismatch(record, item, itemTrackBy, index);\n mayBeDirty = true;\n } else {\n if (mayBeDirty) {\n record = this._verifyReinsertion(record, item, itemTrackBy, index);\n }\n if (!Object.is(record.item, item)) this._addIdentityChange(record, item);\n }\n record = record._next;\n index++;\n });\n this.length = index;\n }\n this._truncate(record);\n this.collection = collection;\n return this.isDirty;\n }\n get isDirty() {\n return this._additionsHead !== null || this._movesHead !== null || this._removalsHead !== null || this._identityChangesHead !== null;\n }\n _reset() {\n if (this.isDirty) {\n let record;\n for (record = this._previousItHead = this._itHead; record !== null; record = record._next) {\n record._nextPrevious = record._next;\n }\n for (record = this._additionsHead; record !== null; record = record._nextAdded) {\n record.previousIndex = record.currentIndex;\n }\n this._additionsHead = this._additionsTail = null;\n for (record = this._movesHead; record !== null; record = record._nextMoved) {\n record.previousIndex = record.currentIndex;\n }\n this._movesHead = this._movesTail = null;\n this._removalsHead = this._removalsTail = null;\n this._identityChangesHead = this._identityChangesTail = null;\n }\n }\n _mismatch(record, item, itemTrackBy, index) {\n let previousRecord;\n if (record === null) {\n previousRecord = this._itTail;\n } else {\n previousRecord = record._prev;\n this._remove(record);\n }\n record = this._unlinkedRecords === null ? null : this._unlinkedRecords.get(itemTrackBy, null);\n if (record !== null) {\n if (!Object.is(record.item, item)) this._addIdentityChange(record, item);\n this._reinsertAfter(record, previousRecord, index);\n } else {\n record = this._linkedRecords === null ? null : this._linkedRecords.get(itemTrackBy, index);\n if (record !== null) {\n if (!Object.is(record.item, item)) this._addIdentityChange(record, item);\n this._moveAfter(record, previousRecord, index);\n } else {\n record = this._addAfter(new IterableChangeRecord_(item, itemTrackBy), previousRecord, index);\n }\n }\n return record;\n }\n _verifyReinsertion(record, item, itemTrackBy, index) {\n let reinsertRecord = this._unlinkedRecords === null ? null : this._unlinkedRecords.get(itemTrackBy, null);\n if (reinsertRecord !== null) {\n record = this._reinsertAfter(reinsertRecord, record._prev, index);\n } else if (record.currentIndex != index) {\n record.currentIndex = index;\n this._addToMoves(record, index);\n }\n return record;\n }\n _truncate(record) {\n while (record !== null) {\n const nextRecord = record._next;\n this._addToRemovals(this._unlink(record));\n record = nextRecord;\n }\n if (this._unlinkedRecords !== null) {\n this._unlinkedRecords.clear();\n }\n if (this._additionsTail !== null) {\n this._additionsTail._nextAdded = null;\n }\n if (this._movesTail !== null) {\n this._movesTail._nextMoved = null;\n }\n if (this._itTail !== null) {\n this._itTail._next = null;\n }\n if (this._removalsTail !== null) {\n this._removalsTail._nextRemoved = null;\n }\n if (this._identityChangesTail !== null) {\n this._identityChangesTail._nextIdentityChange = null;\n }\n }\n _reinsertAfter(record, prevRecord, index) {\n if (this._unlinkedRecords !== null) {\n this._unlinkedRecords.remove(record);\n }\n const prev = record._prevRemoved;\n const next = record._nextRemoved;\n if (prev === null) {\n this._removalsHead = next;\n } else {\n prev._nextRemoved = next;\n }\n if (next === null) {\n this._removalsTail = prev;\n } else {\n next._prevRemoved = prev;\n }\n this._insertAfter(record, prevRecord, index);\n this._addToMoves(record, index);\n return record;\n }\n _moveAfter(record, prevRecord, index) {\n this._unlink(record);\n this._insertAfter(record, prevRecord, index);\n this._addToMoves(record, index);\n return record;\n }\n _addAfter(record, prevRecord, index) {\n this._insertAfter(record, prevRecord, index);\n if (this._additionsTail === null) {\n this._additionsTail = this._additionsHead = record;\n } else {\n this._additionsTail = this._additionsTail._nextAdded = record;\n }\n return record;\n }\n _insertAfter(record, prevRecord, index) {\n const next = prevRecord === null ? this._itHead : prevRecord._next;\n record._next = next;\n record._prev = prevRecord;\n if (next === null) {\n this._itTail = record;\n } else {\n next._prev = record;\n }\n if (prevRecord === null) {\n this._itHead = record;\n } else {\n prevRecord._next = record;\n }\n if (this._linkedRecords === null) {\n this._linkedRecords = new _DuplicateMap();\n }\n this._linkedRecords.put(record);\n record.currentIndex = index;\n return record;\n }\n _remove(record) {\n return this._addToRemovals(this._unlink(record));\n }\n _unlink(record) {\n if (this._linkedRecords !== null) {\n this._linkedRecords.remove(record);\n }\n const prev = record._prev;\n const next = record._next;\n if (prev === null) {\n this._itHead = next;\n } else {\n prev._next = next;\n }\n if (next === null) {\n this._itTail = prev;\n } else {\n next._prev = prev;\n }\n return record;\n }\n _addToMoves(record, toIndex) {\n if (record.previousIndex === toIndex) {\n return record;\n }\n if (this._movesTail === null) {\n this._movesTail = this._movesHead = record;\n } else {\n this._movesTail = this._movesTail._nextMoved = record;\n }\n return record;\n }\n _addToRemovals(record) {\n if (this._unlinkedRecords === null) {\n this._unlinkedRecords = new _DuplicateMap();\n }\n this._unlinkedRecords.put(record);\n record.currentIndex = null;\n record._nextRemoved = null;\n if (this._removalsTail === null) {\n this._removalsTail = this._removalsHead = record;\n record._prevRemoved = null;\n } else {\n record._prevRemoved = this._removalsTail;\n this._removalsTail = this._removalsTail._nextRemoved = record;\n }\n return record;\n }\n _addIdentityChange(record, item) {\n record.item = item;\n if (this._identityChangesTail === null) {\n this._identityChangesTail = this._identityChangesHead = record;\n } else {\n this._identityChangesTail = this._identityChangesTail._nextIdentityChange = record;\n }\n return record;\n }\n}\nclass IterableChangeRecord_ {\n item;\n trackById;\n currentIndex = null;\n previousIndex = null;\n _nextPrevious = null;\n _prev = null;\n _next = null;\n _prevDup = null;\n _nextDup = null;\n _prevRemoved = null;\n _nextRemoved = null;\n _nextAdded = null;\n _nextMoved = null;\n _nextIdentityChange = null;\n constructor(item, trackById) {\n this.item = item;\n this.trackById = trackById;\n }\n}\nclass _DuplicateItemRecordList {\n _head = null;\n _tail = null;\n add(record) {\n if (this._head === null) {\n this._head = this._tail = record;\n record._nextDup = null;\n record._prevDup = null;\n } else {\n this._tail._nextDup = record;\n record._prevDup = this._tail;\n record._nextDup = null;\n this._tail = record;\n }\n }\n get(trackById, atOrAfterIndex) {\n let record;\n for (record = this._head; record !== null; record = record._nextDup) {\n if ((atOrAfterIndex === null || atOrAfterIndex <= record.currentIndex) && Object.is(record.trackById, trackById)) {\n return record;\n }\n }\n return null;\n }\n remove(record) {\n const prev = record._prevDup;\n const next = record._nextDup;\n if (prev === null) {\n this._head = next;\n } else {\n prev._nextDup = next;\n }\n if (next === null) {\n this._tail = prev;\n } else {\n next._prevDup = prev;\n }\n return this._head === null;\n }\n}\nclass _DuplicateMap {\n map = /*#__PURE__*/new Map();\n put(record) {\n const key = record.trackById;\n let duplicates = this.map.get(key);\n if (!duplicates) {\n duplicates = new _DuplicateItemRecordList();\n this.map.set(key, duplicates);\n }\n duplicates.add(record);\n }\n get(trackById, atOrAfterIndex) {\n const key = trackById;\n const recordList = this.map.get(key);\n return recordList ? recordList.get(trackById, atOrAfterIndex) : null;\n }\n remove(record) {\n const key = record.trackById;\n const recordList = this.map.get(key);\n if (recordList.remove(record)) {\n this.map.delete(key);\n }\n return record;\n }\n get isEmpty() {\n return this.map.size === 0;\n }\n clear() {\n this.map.clear();\n }\n}\nfunction getPreviousIndex(item, addRemoveOffset, moveOffsets) {\n const previousIndex = item.previousIndex;\n if (previousIndex === null) return previousIndex;\n let moveOffset = 0;\n if (moveOffsets && previousIndex < moveOffsets.length) {\n moveOffset = moveOffsets[previousIndex];\n }\n return previousIndex + addRemoveOffset + moveOffset;\n}\nclass DefaultKeyValueDifferFactory {\n supports(obj) {\n return obj instanceof Map || isJsObject(obj);\n }\n create() {\n return new DefaultKeyValueDiffer();\n }\n}\nclass DefaultKeyValueDiffer {\n _records = /*#__PURE__*/new Map();\n _mapHead = null;\n _appendAfter = null;\n _previousMapHead = null;\n _changesHead = null;\n _changesTail = null;\n _additionsHead = null;\n _additionsTail = null;\n _removalsHead = null;\n get isDirty() {\n return this._additionsHead !== null || this._changesHead !== null || this._removalsHead !== null;\n }\n forEachItem(fn) {\n let record;\n for (record = this._mapHead; record !== null; record = record._next) {\n fn(record);\n }\n }\n forEachPreviousItem(fn) {\n let record;\n for (record = this._previousMapHead; record !== null; record = record._nextPrevious) {\n fn(record);\n }\n }\n forEachChangedItem(fn) {\n let record;\n for (record = this._changesHead; record !== null; record = record._nextChanged) {\n fn(record);\n }\n }\n forEachAddedItem(fn) {\n let record;\n for (record = this._additionsHead; record !== null; record = record._nextAdded) {\n fn(record);\n }\n }\n forEachRemovedItem(fn) {\n let record;\n for (record = this._removalsHead; record !== null; record = record._nextRemoved) {\n fn(record);\n }\n }\n diff(map) {\n if (!map) {\n map = new Map();\n } else if (!(map instanceof Map || isJsObject(map))) {\n throw new RuntimeError(900, ngDevMode && `Error trying to diff '${stringify(map)}'. Only maps and objects are allowed`);\n }\n return this.check(map) ? this : null;\n }\n check(map) {\n this._reset();\n let insertBefore = this._mapHead;\n this._appendAfter = null;\n this._forEach(map, (value, key) => {\n if (insertBefore && insertBefore.key === key) {\n this._maybeAddToChanges(insertBefore, value);\n this._appendAfter = insertBefore;\n insertBefore = insertBefore._next;\n } else {\n const record = this._getOrCreateRecordForKey(key, value);\n insertBefore = this._insertBeforeOrAppend(insertBefore, record);\n }\n });\n if (insertBefore) {\n if (insertBefore._prev) {\n insertBefore._prev._next = null;\n }\n this._removalsHead = insertBefore;\n for (let record = insertBefore; record !== null; record = record._nextRemoved) {\n if (record === this._mapHead) {\n this._mapHead = null;\n }\n this._records.delete(record.key);\n record._nextRemoved = record._next;\n record.previousValue = record.currentValue;\n record.currentValue = null;\n record._prev = null;\n record._next = null;\n }\n }\n if (this._changesTail) this._changesTail._nextChanged = null;\n if (this._additionsTail) this._additionsTail._nextAdded = null;\n return this.isDirty;\n }\n _insertBeforeOrAppend(before, record) {\n if (before) {\n const prev = before._prev;\n record._next = before;\n record._prev = prev;\n before._prev = record;\n if (prev) {\n prev._next = record;\n }\n if (before === this._mapHead) {\n this._mapHead = record;\n }\n this._appendAfter = before;\n return before;\n }\n if (this._appendAfter) {\n this._appendAfter._next = record;\n record._prev = this._appendAfter;\n } else {\n this._mapHead = record;\n }\n this._appendAfter = record;\n return null;\n }\n _getOrCreateRecordForKey(key, value) {\n if (this._records.has(key)) {\n const record = this._records.get(key);\n this._maybeAddToChanges(record, value);\n const prev = record._prev;\n const next = record._next;\n if (prev) {\n prev._next = next;\n }\n if (next) {\n next._prev = prev;\n }\n record._next = null;\n record._prev = null;\n return record;\n }\n const record = new KeyValueChangeRecord_(key);\n this._records.set(key, record);\n record.currentValue = value;\n this._addToAdditions(record);\n return record;\n }\n _reset() {\n if (this.isDirty) {\n let record;\n this._previousMapHead = this._mapHead;\n for (record = this._previousMapHead; record !== null; record = record._next) {\n record._nextPrevious = record._next;\n }\n for (record = this._changesHead; record !== null; record = record._nextChanged) {\n record.previousValue = record.currentValue;\n }\n for (record = this._additionsHead; record != null; record = record._nextAdded) {\n record.previousValue = record.currentValue;\n }\n this._changesHead = this._changesTail = null;\n this._additionsHead = this._additionsTail = null;\n this._removalsHead = null;\n }\n }\n _maybeAddToChanges(record, newValue) {\n if (!Object.is(newValue, record.currentValue)) {\n record.previousValue = record.currentValue;\n record.currentValue = newValue;\n this._addToChanges(record);\n }\n }\n _addToAdditions(record) {\n if (this._additionsHead === null) {\n this._additionsHead = this._additionsTail = record;\n } else {\n this._additionsTail._nextAdded = record;\n this._additionsTail = record;\n }\n }\n _addToChanges(record) {\n if (this._changesHead === null) {\n this._changesHead = this._changesTail = record;\n } else {\n this._changesTail._nextChanged = record;\n this._changesTail = record;\n }\n }\n _forEach(obj, fn) {\n if (obj instanceof Map) {\n obj.forEach(fn);\n } else {\n Object.keys(obj).forEach(k => fn(obj[k], k));\n }\n }\n}\nclass KeyValueChangeRecord_ {\n key;\n previousValue = null;\n currentValue = null;\n _nextPrevious = null;\n _next = null;\n _prev = null;\n _nextAdded = null;\n _nextRemoved = null;\n _nextChanged = null;\n constructor(key) {\n this.key = key;\n }\n}\nfunction defaultIterableDiffersFactory() {\n return new IterableDiffers([new DefaultIterableDifferFactory()]);\n}\nlet IterableDiffers = /*#__PURE__*/(() => {\n class IterableDiffers {\n factories;\n static \u0275prov = /* @__PURE__ */\n __defineInjectable({\n token: IterableDiffers,\n providedIn: 'root',\n factory: defaultIterableDiffersFactory\n });\n constructor(factories) {\n this.factories = factories;\n }\n static create(factories, parent) {\n if (parent != null) {\n const copied = parent.factories.slice();\n factories = factories.concat(copied);\n }\n return new IterableDiffers(factories);\n }\n static extend(factories) {\n return {\n provide: IterableDiffers,\n useFactory: () => {\n const parent = inject(IterableDiffers, {\n optional: true,\n skipSelf: true\n });\n return IterableDiffers.create(factories, parent || defaultIterableDiffersFactory());\n }\n };\n }\n find(iterable) {\n const factory = this.factories.find(f => f.supports(iterable));\n if (factory != null) {\n return factory;\n } else {\n throw new RuntimeError(901, ngDevMode && `Cannot find a differ supporting object '${iterable}' of type '${getTypeNameForDebugging(iterable)}'`);\n }\n }\n }\n return IterableDiffers;\n})();\nfunction getTypeNameForDebugging(type) {\n return type['name'] || typeof type;\n}\nfunction defaultKeyValueDiffersFactory() {\n return new KeyValueDiffers([new DefaultKeyValueDifferFactory()]);\n}\nlet KeyValueDiffers = /*#__PURE__*/(() => {\n class KeyValueDiffers {\n static \u0275prov = /* @__PURE__ */\n __defineInjectable({\n token: KeyValueDiffers,\n providedIn: 'root',\n factory: defaultKeyValueDiffersFactory\n });\n factories;\n constructor(factories) {\n this.factories = factories;\n }\n static create(factories, parent) {\n if (parent) {\n const copied = parent.factories.slice();\n factories = factories.concat(copied);\n }\n return new KeyValueDiffers(factories);\n }\n static extend(factories) {\n return {\n provide: KeyValueDiffers,\n useFactory: () => {\n const parent = inject(KeyValueDiffers, {\n optional: true,\n skipSelf: true\n });\n return KeyValueDiffers.create(factories, parent || defaultKeyValueDiffersFactory());\n }\n };\n }\n find(kv) {\n const factory = this.factories.find(f => f.supports(kv));\n if (factory) {\n return factory;\n }\n throw new RuntimeError(901, ngDevMode && `Cannot find a differ supporting object '${kv}'`);\n }\n }\n return KeyValueDiffers;\n})();\nconst keyValDiff = [/*#__PURE__*/new DefaultKeyValueDifferFactory()];\nconst iterableDiff = [/*#__PURE__*/new DefaultIterableDifferFactory()];\nconst defaultIterableDiffers = /*#__PURE__*/new IterableDiffers(iterableDiff);\nconst defaultKeyValueDiffers = /*#__PURE__*/new KeyValueDiffers(keyValDiff);\nconst platformCore = /*#__PURE__*/createPlatformFactory(null, 'core', []);\nlet ApplicationModule = /*#__PURE__*/(() => {\n class ApplicationModule {\n constructor(appRef) {}\n static \u0275fac = function ApplicationModule_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || ApplicationModule)(__inject(ApplicationRef));\n };\n static \u0275mod = /*@__PURE__*/__defineNgModule({\n type: ApplicationModule\n });\n static \u0275inj = /*@__PURE__*/__defineInjector({});\n }\n return ApplicationModule;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && setClassMetadata(ApplicationModule, [{\n type: NgModule\n }], () => [{\n type: ApplicationRef\n }], null);\n})();\nfunction internalCreateApplication(config) {\n const {\n rootComponent,\n appProviders,\n platformProviders,\n platformRef\n } = config;\n profiler(ProfilerEvent.BootstrapApplicationStart);\n if (typeof ngServerMode !== 'undefined' && ngServerMode && !platformRef) {\n throw new RuntimeError(-401, ngDevMode && 'Missing Platform: This may be due to using `bootstrapApplication` on the server without passing a `BootstrapContext`. ' + 'Please make sure that `bootstrapApplication` is called with a `context` argument.');\n }\n try {\n const platformInjector = platformRef?.injector ?? createOrReusePlatformInjector(platformProviders);\n if ((typeof ngDevMode === 'undefined' || ngDevMode) && rootComponent !== undefined) {\n assertStandaloneComponentType(rootComponent);\n }\n const allAppProviders = [provideZonelessChangeDetectionInternal(), errorHandlerEnvironmentInitializer, ...(ngDevMode ? [validAppIdInitializer] : []), ...(appProviders || [])];\n const adapter = new EnvironmentNgModuleRefAdapter({\n providers: allAppProviders,\n parent: platformInjector,\n debugName: typeof ngDevMode === 'undefined' || ngDevMode ? 'Environment Injector' : '',\n runEnvironmentInitializers: false\n });\n return bootstrap({\n r3Injector: adapter.injector,\n platformInjector,\n rootComponent\n });\n } catch (e) {\n return Promise.reject(e);\n } finally {\n profiler(ProfilerEvent.BootstrapApplicationEnd);\n }\n}\nclass SerializedViewCollection {\n views = [];\n indexByContent = /*#__PURE__*/new Map();\n add(serializedView) {\n const viewAsString = JSON.stringify(serializedView);\n if (!this.indexByContent.has(viewAsString)) {\n const index = this.views.length;\n this.views.push(serializedView);\n this.indexByContent.set(viewAsString, index);\n return index;\n }\n return this.indexByContent.get(viewAsString);\n }\n getAll() {\n return this.views;\n }\n}\nlet tViewSsrId = 0;\nfunction getSsrId(tView) {\n if (!tView.ssrId) {\n tView.ssrId = `t${tViewSsrId++}`;\n }\n return tView.ssrId;\n}\nfunction calcNumRootNodes(tView, lView, tNode) {\n const rootNodes = [];\n collectNativeNodes(tView, lView, tNode, rootNodes);\n return rootNodes.length;\n}\nfunction calcNumRootNodesInLContainer(lContainer) {\n const rootNodes = [];\n collectNativeNodesInLContainer(lContainer, rootNodes);\n return rootNodes.length;\n}\nfunction annotateComponentLViewForHydration(lView, context) {\n const hostElement = lView[HOST];\n if (hostElement && !hostElement.hasAttribute(SKIP_HYDRATION_ATTR_NAME)) {\n return annotateHostElementForHydration(hostElement, lView, null, context);\n }\n return null;\n}\nfunction annotateLContainerForHydration(lContainer, context) {\n const componentLView = unwrapLView(lContainer[HOST]);\n const componentLViewNghIndex = annotateComponentLViewForHydration(componentLView, context);\n if (componentLViewNghIndex === null) {\n return;\n }\n const hostElement = unwrapRNode(componentLView[HOST]);\n const rootLView = lContainer[PARENT];\n const rootLViewNghIndex = annotateHostElementForHydration(hostElement, rootLView, null, context);\n const renderer = componentLView[RENDERER];\n const finalIndex = `${componentLViewNghIndex}|${rootLViewNghIndex}`;\n renderer.setAttribute(hostElement, NGH_ATTR_NAME, finalIndex);\n}\nfunction annotateForHydration(appRef, doc) {\n const injector = appRef.injector;\n const isI18nHydrationEnabledVal = isI18nHydrationEnabled(injector);\n const isIncrementalHydrationEnabledVal = isIncrementalHydrationEnabled(injector);\n const serializedViewCollection = new SerializedViewCollection();\n const corruptedTextNodes = new Map();\n const viewRefs = appRef._views;\n const shouldReplayEvents = injector.get(IS_EVENT_REPLAY_ENABLED, EVENT_REPLAY_ENABLED_DEFAULT);\n const eventTypesToReplay = {\n regular: new Set(),\n capture: new Set()\n };\n const deferBlocks = new Map();\n const appId = appRef.injector.get(APP_ID);\n for (const viewRef of viewRefs) {\n const lNode = getLNodeForHydration(viewRef);\n if (lNode !== null) {\n const context = {\n serializedViewCollection,\n corruptedTextNodes,\n isI18nHydrationEnabled: isI18nHydrationEnabledVal,\n isIncrementalHydrationEnabled: isIncrementalHydrationEnabledVal,\n i18nChildren: new Map(),\n eventTypesToReplay,\n shouldReplayEvents,\n appId,\n deferBlocks\n };\n if (isLContainer(lNode)) {\n annotateLContainerForHydration(lNode, context);\n } else {\n annotateComponentLViewForHydration(lNode, context);\n }\n insertCorruptedTextNodeMarkers(corruptedTextNodes, doc);\n }\n }\n const serializedViews = serializedViewCollection.getAll();\n const transferState = injector.get(TransferState);\n transferState.set(NGH_DATA_KEY, serializedViews);\n if (deferBlocks.size > 0) {\n const blocks = {};\n for (const [id, info] of deferBlocks.entries()) {\n blocks[id] = info;\n }\n transferState.set(NGH_DEFER_BLOCKS_KEY, blocks);\n }\n return eventTypesToReplay;\n}\nfunction serializeLContainer(lContainer, tNode, lView, parentDeferBlockId, context) {\n const views = [];\n let lastViewAsString = '';\n for (let i = CONTAINER_HEADER_OFFSET; i < lContainer.length; i++) {\n let childLView = lContainer[i];\n let template;\n let numRootNodes;\n let serializedView;\n if (isRootView(childLView)) {\n childLView = childLView[HEADER_OFFSET];\n if (isLContainer(childLView)) {\n numRootNodes = calcNumRootNodesInLContainer(childLView) + 1;\n annotateLContainerForHydration(childLView, context);\n const componentLView = unwrapLView(childLView[HOST]);\n serializedView = {\n [TEMPLATE_ID]: componentLView[TVIEW].ssrId,\n [NUM_ROOT_NODES]: numRootNodes\n };\n }\n }\n if (!serializedView) {\n const childTView = childLView[TVIEW];\n if (childTView.type === 1) {\n template = childTView.ssrId;\n numRootNodes = 1;\n } else {\n template = getSsrId(childTView);\n numRootNodes = calcNumRootNodes(childTView, childLView, childTView.firstChild);\n }\n serializedView = {\n [TEMPLATE_ID]: template,\n [NUM_ROOT_NODES]: numRootNodes\n };\n let isHydrateNeverBlock = false;\n if (isDeferBlock(lView[TVIEW], tNode)) {\n const lDetails = getLDeferBlockDetails(lView, tNode);\n const tDetails = getTDeferBlockDetails(lView[TVIEW], tNode);\n if (context.isIncrementalHydrationEnabled && tDetails.hydrateTriggers !== null) {\n const deferBlockId = `d${context.deferBlocks.size}`;\n if (tDetails.hydrateTriggers.has(7)) {\n isHydrateNeverBlock = true;\n }\n let rootNodes = [];\n collectNativeNodesInLContainer(lContainer, rootNodes);\n const deferBlockInfo = {\n [NUM_ROOT_NODES]: rootNodes.length,\n [DEFER_BLOCK_STATE]: lDetails[DEFER_BLOCK_STATE$1]\n };\n const serializedTriggers = serializeHydrateTriggers(tDetails.hydrateTriggers);\n if (serializedTriggers.length > 0) {\n deferBlockInfo[DEFER_HYDRATE_TRIGGERS] = serializedTriggers;\n }\n if (parentDeferBlockId !== null) {\n deferBlockInfo[DEFER_PARENT_BLOCK_ID] = parentDeferBlockId;\n }\n context.deferBlocks.set(deferBlockId, deferBlockInfo);\n const node = unwrapRNode(lContainer);\n if (node !== undefined) {\n if (node.nodeType === Node.COMMENT_NODE) {\n annotateDeferBlockAnchorForHydration(node, deferBlockId);\n }\n } else {\n ngDevMode && validateNodeExists(node, childLView, tNode);\n ngDevMode && validateMatchingNode(node, Node.COMMENT_NODE, null, childLView, tNode, true);\n annotateDeferBlockAnchorForHydration(node, deferBlockId);\n }\n if (!isHydrateNeverBlock) {\n annotateDeferBlockRootNodesWithJsAction(tDetails, rootNodes, deferBlockId, context);\n }\n parentDeferBlockId = deferBlockId;\n serializedView[DEFER_BLOCK_ID] = deferBlockId;\n }\n serializedView[DEFER_BLOCK_STATE] = lDetails[DEFER_BLOCK_STATE$1];\n }\n if (!isHydrateNeverBlock) {\n Object.assign(serializedView, serializeLView(lContainer[i], parentDeferBlockId, context));\n }\n }\n const currentViewAsString = JSON.stringify(serializedView);\n if (views.length > 0 && currentViewAsString === lastViewAsString) {\n const previousView = views[views.length - 1];\n previousView[MULTIPLIER] ??= 1;\n previousView[MULTIPLIER]++;\n } else {\n lastViewAsString = currentViewAsString;\n views.push(serializedView);\n }\n }\n return views;\n}\nfunction serializeHydrateTriggers(triggerMap) {\n const serializableDeferBlockTrigger = new Set([0, 1, 2, 5]);\n let triggers = [];\n for (let [trigger, details] of triggerMap) {\n if (serializableDeferBlockTrigger.has(trigger)) {\n if (details === null) {\n triggers.push(trigger);\n } else if (details.type === 5) {\n triggers.push({\n trigger,\n delay: details.delay\n });\n } else {\n triggers.push({\n trigger,\n intersectionObserverOptions: details.intersectionObserverOptions\n });\n }\n }\n }\n return triggers;\n}\nfunction appendSerializedNodePath(ngh, tNode, lView, excludedParentNodes) {\n const noOffsetIndex = tNode.index - HEADER_OFFSET;\n ngh[NODES] ??= {};\n ngh[NODES][noOffsetIndex] ??= calcPathForNode(tNode, lView, excludedParentNodes);\n}\nfunction appendDisconnectedNodeIndex(ngh, tNodeOrNoOffsetIndex) {\n const noOffsetIndex = typeof tNodeOrNoOffsetIndex === 'number' ? tNodeOrNoOffsetIndex : tNodeOrNoOffsetIndex.index - HEADER_OFFSET;\n ngh[DISCONNECTED_NODES] ??= [];\n if (!ngh[DISCONNECTED_NODES].includes(noOffsetIndex)) {\n ngh[DISCONNECTED_NODES].push(noOffsetIndex);\n }\n}\nfunction serializeLView(lView, parentDeferBlockId = null, context) {\n const ngh = {};\n const tView = lView[TVIEW];\n const i18nChildren = getOrComputeI18nChildren(tView, context);\n const nativeElementsToEventTypes = context.shouldReplayEvents ? collectDomEventsInfo(tView, lView, context.eventTypesToReplay) : null;\n for (let i = HEADER_OFFSET; i < tView.bindingStartIndex; i++) {\n const tNode = tView.data[i];\n const noOffsetIndex = i - HEADER_OFFSET;\n const i18nData = trySerializeI18nBlock(lView, i, context);\n if (i18nData) {\n ngh[I18N_DATA] ??= {};\n ngh[I18N_DATA][noOffsetIndex] = i18nData.caseQueue;\n for (const nodeNoOffsetIndex of i18nData.disconnectedNodes) {\n appendDisconnectedNodeIndex(ngh, nodeNoOffsetIndex);\n }\n for (const nodeNoOffsetIndex of i18nData.disjointNodes) {\n const tNode = tView.data[nodeNoOffsetIndex + HEADER_OFFSET];\n ngDevMode && assertTNode(tNode);\n appendSerializedNodePath(ngh, tNode, lView, i18nChildren);\n }\n continue;\n }\n if (!isTNodeShape(tNode)) {\n continue;\n }\n if (isDetachedByI18n(tNode)) {\n continue;\n }\n if (isLContainer(lView[i]) && tNode.tView) {\n ngh[TEMPLATES] ??= {};\n ngh[TEMPLATES][noOffsetIndex] = getSsrId(tNode.tView);\n }\n if (isDisconnectedNode(tNode, lView) && isContentProjectedNode(tNode)) {\n appendDisconnectedNodeIndex(ngh, tNode);\n continue;\n }\n if (Array.isArray(tNode.projection)) {\n for (const projectionHeadTNode of tNode.projection) {\n if (!projectionHeadTNode) continue;\n if (!Array.isArray(projectionHeadTNode)) {\n if (!isProjectionTNode(projectionHeadTNode) && !isInSkipHydrationBlock(projectionHeadTNode)) {\n if (isDisconnectedNode(projectionHeadTNode, lView)) {\n appendDisconnectedNodeIndex(ngh, projectionHeadTNode);\n } else {\n appendSerializedNodePath(ngh, projectionHeadTNode, lView, i18nChildren);\n }\n }\n } else {\n throw unsupportedProjectionOfDomNodes(unwrapRNode(lView[i]));\n }\n }\n }\n conditionallyAnnotateNodePath(ngh, tNode, lView, i18nChildren);\n if (isLContainer(lView[i])) {\n const hostNode = lView[i][HOST];\n if (Array.isArray(hostNode)) {\n const targetNode = unwrapRNode(hostNode);\n if (!targetNode.hasAttribute(SKIP_HYDRATION_ATTR_NAME)) {\n annotateHostElementForHydration(targetNode, hostNode, parentDeferBlockId, context);\n }\n }\n ngh[CONTAINERS] ??= {};\n ngh[CONTAINERS][noOffsetIndex] = serializeLContainer(lView[i], tNode, lView, parentDeferBlockId, context);\n } else if (Array.isArray(lView[i]) && !isLetDeclaration(tNode)) {\n const targetNode = unwrapRNode(lView[i][HOST]);\n if (!targetNode.hasAttribute(SKIP_HYDRATION_ATTR_NAME)) {\n annotateHostElementForHydration(targetNode, lView[i], parentDeferBlockId, context);\n }\n } else {\n if (tNode.type & 8) {\n ngh[ELEMENT_CONTAINERS] ??= {};\n ngh[ELEMENT_CONTAINERS][noOffsetIndex] = calcNumRootNodes(tView, lView, tNode.child);\n } else if (tNode.type & (16 | 128)) {\n let nextTNode = tNode.next;\n while (nextTNode !== null && nextTNode.type & (16 | 128)) {\n nextTNode = nextTNode.next;\n }\n if (nextTNode && !isInSkipHydrationBlock(nextTNode)) {\n appendSerializedNodePath(ngh, nextTNode, lView, i18nChildren);\n }\n } else if (tNode.type & 1) {\n const rNode = unwrapRNode(lView[i]);\n processTextNodeBeforeSerialization(context, rNode);\n }\n }\n if (nativeElementsToEventTypes && tNode.type & 2) {\n const nativeElement = unwrapRNode(lView[i]);\n if (nativeElementsToEventTypes.has(nativeElement)) {\n setJSActionAttributes(nativeElement, nativeElementsToEventTypes.get(nativeElement), parentDeferBlockId);\n }\n }\n }\n return ngh;\n}\nfunction conditionallyAnnotateNodePath(ngh, tNode, lView, excludedParentNodes) {\n if (isProjectionTNode(tNode)) {\n return;\n }\n if (tNode.projectionNext && tNode.projectionNext !== tNode.next && !isInSkipHydrationBlock(tNode.projectionNext)) {\n appendSerializedNodePath(ngh, tNode.projectionNext, lView, excludedParentNodes);\n }\n if (tNode.prev === null && tNode.parent !== null && isDisconnectedNode(tNode.parent, lView) && !isDisconnectedNode(tNode, lView)) {\n appendSerializedNodePath(ngh, tNode, lView, excludedParentNodes);\n }\n}\nfunction componentUsesShadowDomEncapsulation(lView) {\n const instance = lView[CONTEXT];\n if (!instance?.constructor) return false;\n const def = getComponentDef(instance.constructor);\n return def?.encapsulation === ViewEncapsulation$1.ShadowDom || def?.encapsulation === ViewEncapsulation$1.ExperimentalIsolatedShadowDom;\n}\nfunction annotateHostElementForHydration(element, lView, parentDeferBlockId, context) {\n const renderer = lView[RENDERER];\n if (hasI18n(lView) && !isI18nHydrationSupportEnabled() || componentUsesShadowDomEncapsulation(lView)) {\n renderer.setAttribute(element, SKIP_HYDRATION_ATTR_NAME, '');\n return null;\n } else {\n const ngh = serializeLView(lView, parentDeferBlockId, context);\n const index = context.serializedViewCollection.add(ngh);\n renderer.setAttribute(element, NGH_ATTR_NAME, index.toString());\n return index;\n }\n}\nfunction annotateDeferBlockAnchorForHydration(comment, deferBlockId) {\n comment.textContent = `ngh=${deferBlockId}`;\n}\nfunction insertCorruptedTextNodeMarkers(corruptedTextNodes, doc) {\n for (const [textNode, marker] of corruptedTextNodes) {\n textNode.after(doc.createComment(marker));\n }\n}\nfunction isContentProjectedNode(tNode) {\n let currentTNode = tNode;\n while (currentTNode != null) {\n if (isComponentHost(currentTNode)) {\n return true;\n }\n currentTNode = currentTNode.parent;\n }\n return false;\n}\nfunction annotateDeferBlockRootNodesWithJsAction(tDetails, rootNodes, parentDeferBlockId, context) {\n const actionList = convertHydrateTriggersToJsAction(tDetails.hydrateTriggers);\n for (let et of actionList) {\n context.eventTypesToReplay.regular.add(et);\n }\n if (actionList.length > 0) {\n const elementNodes = rootNodes.filter(rn => rn.nodeType === Node.ELEMENT_NODE);\n for (let rNode of elementNodes) {\n setJSActionAttributes(rNode, actionList, parentDeferBlockId);\n }\n }\n}\nfunction booleanAttribute(value) {\n return typeof value === 'boolean' ? value : value != null && value !== 'false';\n}\nfunction numberAttribute(value, fallbackValue = NaN) {\n const isNumberValue = !isNaN(parseFloat(value)) && !isNaN(Number(value));\n return isNumberValue ? Number(value) : fallbackValue;\n}\nconst PERFORMANCE_MARK_PREFIX = '\uD83C\uDD70\uFE0F';\nlet enablePerfLogging = false;\nfunction startMeasuring(label) {\n if (!enablePerfLogging) {\n return;\n }\n const {\n startLabel\n } = labels(label);\n performance.mark(startLabel);\n}\nfunction stopMeasuring(label) {\n if (!enablePerfLogging) {\n return;\n }\n const {\n startLabel,\n labelName,\n endLabel\n } = labels(label);\n performance.mark(endLabel);\n performance.measure(labelName, startLabel, endLabel);\n performance.clearMarks(startLabel);\n performance.clearMarks(endLabel);\n}\nfunction labels(label) {\n const labelName = `${PERFORMANCE_MARK_PREFIX}:${label}`;\n return {\n labelName,\n startLabel: `start:${labelName}`,\n endLabel: `end:${labelName}`\n };\n}\nlet warningLogged = false;\nfunction enableProfiling() {\n if (!warningLogged && (typeof performance === 'undefined' || !performance.mark || !performance.measure)) {\n warningLogged = true;\n console.warn('Performance API is not supported on this platform');\n return;\n }\n enablePerfLogging = true;\n}\nfunction disableProfiling() {\n enablePerfLogging = false;\n}\nfunction \u0275assertType(value) {}\nfunction \u0275\u0275ngDeclareDirective(decl) {\n const compiler = getCompilerFacade({\n usage: 1,\n kind: 'directive',\n type: decl.type\n });\n return compiler.compileDirectiveDeclaration(angularCoreEnv, `ng:///${decl.type.name}/\u0275fac.js`, decl);\n}\nfunction \u0275\u0275ngDeclareClassMetadata(decl) {\n setClassMetadata(decl.type, decl.decorators, decl.ctorParameters ?? null, decl.propDecorators ?? null);\n}\nfunction \u0275\u0275ngDeclareClassMetadataAsync(decl) {\n setClassMetadataAsync(decl.type, decl.resolveDeferredDeps, (...types) => {\n const meta = decl.resolveMetadata(...types);\n setClassMetadata(decl.type, meta.decorators, meta.ctorParameters, meta.propDecorators);\n });\n}\nfunction \u0275\u0275ngDeclareComponent(decl) {\n const compiler = getCompilerFacade({\n usage: 1,\n kind: 'component',\n type: decl.type\n });\n return compiler.compileComponentDeclaration(angularCoreEnv, `ng:///${decl.type.name}/\u0275cmp.js`, decl);\n}\nfunction \u0275\u0275ngDeclareFactory(decl) {\n const compiler = getCompilerFacade({\n usage: 1,\n kind: getFactoryKind(decl.target),\n type: decl.type\n });\n return compiler.compileFactoryDeclaration(angularCoreEnv, `ng:///${decl.type.name}/\u0275fac.js`, decl);\n}\nfunction getFactoryKind(target) {\n switch (target) {\n case FactoryTarget.Directive:\n return 'directive';\n case FactoryTarget.Component:\n return 'component';\n case FactoryTarget.Injectable:\n return 'injectable';\n case FactoryTarget.Pipe:\n return 'pipe';\n case FactoryTarget.NgModule:\n return 'NgModule';\n }\n}\nfunction \u0275\u0275ngDeclareInjectable(decl) {\n const compiler = getCompilerFacade({\n usage: 1,\n kind: 'injectable',\n type: decl.type\n });\n return compiler.compileInjectableDeclaration(angularCoreEnv, `ng:///${decl.type.name}/\u0275prov.js`, decl);\n}\nfunction \u0275\u0275ngDeclareInjector(decl) {\n const compiler = getCompilerFacade({\n usage: 1,\n kind: 'NgModule',\n type: decl.type\n });\n return compiler.compileInjectorDeclaration(angularCoreEnv, `ng:///${decl.type.name}/\u0275inj.js`, decl);\n}\nfunction \u0275\u0275ngDeclareNgModule(decl) {\n const compiler = getCompilerFacade({\n usage: 1,\n kind: 'NgModule',\n type: decl.type\n });\n return compiler.compileNgModuleDeclaration(angularCoreEnv, `ng:///${decl.type.name}/\u0275mod.js`, decl);\n}\nfunction \u0275\u0275ngDeclarePipe(decl) {\n const compiler = getCompilerFacade({\n usage: 1,\n kind: 'pipe',\n type: decl.type\n });\n return compiler.compilePipeDeclaration(angularCoreEnv, `ng:///${decl.type.name}/\u0275pipe.js`, decl);\n}\nconst NOT_SET = /* @__PURE__ */Symbol('NOT_SET');\nconst EMPTY_CLEANUP_SET = /* @__PURE__ */new Set();\nconst AFTER_RENDER_PHASE_EFFECT_NODE = /* @__PURE__ */(() => ({\n ...SIGNAL_NODE,\n kind: 'afterRenderEffectPhase',\n consumerIsAlwaysLive: true,\n consumerAllowSignalWrites: true,\n value: NOT_SET,\n cleanup: null,\n consumerMarkedDirty() {\n if (this.sequence.impl.executing) {\n if (this.sequence.lastPhase === null || this.sequence.lastPhase < this.phase) {\n return;\n }\n this.sequence.erroredOrDestroyed = true;\n }\n this.sequence.scheduler.notify(7);\n },\n phaseFn(previousValue) {\n this.sequence.lastPhase = this.phase;\n if (!this.dirty) {\n return this.signal;\n }\n this.dirty = false;\n if (this.value !== NOT_SET && !consumerPollProducersForChange(this)) {\n return this.signal;\n }\n try {\n for (const cleanupFn of this.cleanup ?? EMPTY_CLEANUP_SET) {\n cleanupFn();\n }\n } finally {\n this.cleanup?.clear();\n }\n const args = [];\n if (previousValue !== undefined) {\n args.push(previousValue);\n }\n args.push(this.registerCleanupFn);\n const prevConsumer = consumerBeforeComputation(this);\n let newValue;\n try {\n newValue = this.userFn.apply(null, args);\n } finally {\n consumerAfterComputation(this, prevConsumer);\n }\n if (this.value === NOT_SET || !this.equal(this.value, newValue)) {\n this.value = newValue;\n this.version++;\n }\n return this.signal;\n }\n}))();\nclass AfterRenderEffectSequence extends AfterRenderSequence {\n scheduler;\n lastPhase = null;\n nodes = [undefined, undefined, undefined, undefined];\n onDestroyFns = null;\n constructor(impl, effectHooks, view, scheduler, injector, snapshot = null) {\n super(impl, [undefined, undefined, undefined, undefined], view, false, injector.get(DestroyRef), snapshot);\n this.scheduler = scheduler;\n for (const phase of AFTER_RENDER_PHASES) {\n const effectHook = effectHooks[phase];\n if (effectHook === undefined) {\n continue;\n }\n const node = Object.create(AFTER_RENDER_PHASE_EFFECT_NODE);\n node.sequence = this;\n node.phase = phase;\n node.userFn = effectHook;\n node.dirty = true;\n node.signal = () => {\n producerAccessed(node);\n return node.value;\n };\n node.signal[SIGNAL] = node;\n node.registerCleanupFn = fn => (node.cleanup ??= new Set()).add(fn);\n this.nodes[phase] = node;\n this.hooks[phase] = value => node.phaseFn(value);\n if (ngDevMode) {\n setupDebugInfo(node, injector);\n }\n }\n }\n afterRun() {\n super.afterRun();\n this.lastPhase = null;\n }\n destroy() {\n if (this.onDestroyFns !== null) {\n for (const fn of this.onDestroyFns) {\n fn();\n }\n }\n super.destroy();\n for (const node of this.nodes) {\n if (node) {\n try {\n for (const fn of node.cleanup ?? EMPTY_CLEANUP_SET) {\n fn();\n }\n } finally {\n consumerDestroy(node);\n }\n }\n }\n }\n}\nfunction afterRenderEffect(callbackOrSpec, options) {\n ngDevMode && assertNotInReactiveContext(afterRenderEffect, 'Call `afterRenderEffect` outside of a reactive context. For example, create the render ' + 'effect inside the component constructor`.');\n if (ngDevMode && !options?.injector) {\n assertInInjectionContext(afterRenderEffect);\n }\n if (typeof ngServerMode !== 'undefined' && ngServerMode) {\n return NOOP_AFTER_RENDER_REF;\n }\n const injector = options?.injector ?? inject(Injector);\n const scheduler = injector.get(ChangeDetectionScheduler);\n const manager = injector.get(AfterRenderManager);\n const tracing = injector.get(TracingService, null, {\n optional: true\n });\n manager.impl ??= injector.get(AfterRenderImpl);\n let spec = callbackOrSpec;\n if (typeof spec === 'function') {\n spec = {\n mixedReadWrite: callbackOrSpec\n };\n }\n const viewContext = injector.get(ViewContext, null, {\n optional: true\n });\n const sequence = new AfterRenderEffectSequence(manager.impl, [spec.earlyRead, spec.write, spec.mixedReadWrite, spec.read], viewContext?.view, scheduler, injector, tracing?.snapshot(null));\n manager.impl.register(sequence);\n return sequence;\n}\nfunction setupDebugInfo(node, injector) {\n node.debugName = `afterRenderEffect - ${phaseDebugName(node.phase)} phase`;\n const prevInjectorProfilerContext = setInjectorProfilerContext({\n injector,\n token: null\n });\n try {\n emitAfterRenderEffectPhaseCreatedEvent(node);\n } finally {\n setInjectorProfilerContext(prevInjectorProfilerContext);\n }\n}\nfunction phaseDebugName(phase) {\n switch (phase) {\n case 0:\n return 'EarlyRead';\n case 1:\n return 'Write';\n case 2:\n return 'MixedReadWrite';\n case 3:\n return 'Read';\n }\n}\nfunction resourceFromSnapshots(source) {\n return new SnapshotResource(isSignal(source) ? source : computed(source));\n}\nclass SnapshotResource {\n snapshot;\n constructor(snapshot) {\n this.snapshot = snapshot;\n }\n get state() {\n return this.snapshot();\n }\n value = /*#__PURE__*/computed(() => {\n if (this.state.status === 'error') {\n throw new ResourceValueError(this.state.error);\n }\n return this.state.value;\n });\n status = /*#__PURE__*/computed(() => this.state.status);\n error = /*#__PURE__*/computed(() => this.state.status === 'error' ? this.state.error : undefined);\n isLoading = /*#__PURE__*/computed(() => this.state.status === 'loading' || this.state.status === 'reloading');\n isValueDefined = /*#__PURE__*/computed(() => this.state.status !== 'error' && this.state.value !== undefined);\n hasValue() {\n return this.isValueDefined();\n }\n}\nfunction createComponent(component, options) {\n ngDevMode && assertComponentDef(component);\n const componentDef = getComponentDef(component);\n const elementInjector = options.elementInjector || getNullInjector();\n const factory = new ComponentFactory(componentDef);\n return factory.create(elementInjector, options.projectableNodes, options.hostElement, options.environmentInjector, options.directives, options.bindings);\n}\nfunction reflectComponentType(component) {\n const componentDef = getComponentDef(component);\n if (!componentDef) return null;\n const factory = new ComponentFactory(componentDef);\n return {\n get selector() {\n return factory.selector;\n },\n get type() {\n return factory.componentType;\n },\n get inputs() {\n return factory.inputs;\n },\n get outputs() {\n return factory.outputs;\n },\n get ngContentSelectors() {\n return factory.ngContentSelectors;\n },\n get isStandalone() {\n return componentDef.standalone;\n },\n get isSignal() {\n return componentDef.signals;\n }\n };\n}\nfunction mergeApplicationConfig(...configs) {\n return configs.reduce((prev, curr) => {\n return Object.assign(prev, curr, {\n providers: [...prev.providers, ...curr.providers]\n });\n }, {\n providers: []\n });\n}\nconst REQUEST = /*#__PURE__*/new InjectionToken(typeof ngDevMode === 'undefined' || ngDevMode ? 'REQUEST' : '', {\n providedIn: 'platform',\n factory: () => null\n});\nconst RESPONSE_INIT = /*#__PURE__*/new InjectionToken(typeof ngDevMode === 'undefined' || ngDevMode ? 'RESPONSE_INIT' : '', {\n providedIn: 'platform',\n factory: () => null\n});\nconst REQUEST_CONTEXT = /*#__PURE__*/new InjectionToken(typeof ngDevMode === 'undefined' || ngDevMode ? 'REQUEST_CONTEXT' : '', {\n providedIn: 'platform',\n factory: () => null\n});\nexport { APP_BOOTSTRAP_LISTENER, APP_ID, ApplicationInitStatus, ApplicationModule, ApplicationRef, COMPILER_OPTIONS, ChangeDetectorRef, ContentChild, ContentChildren, DOCUMENT, DefaultIterableDiffer, DestroyRef, ENVIRONMENT_INITIALIZER, EmbeddedViewRef, ErrorHandler, HOST_TAG_NAME, HostAttributeToken, Injectable, InjectionToken, Injector, IterableDiffers, KeyValueDiffers, LOCALE_ID, NgModule, NgZone, OutputEmitterRef, PLATFORM_INITIALIZER, PlatformRef, Query, REQUEST, REQUEST_CONTEXT, RESPONSE_INIT, TransferState, ViewChild, ViewChildren, ViewEncapsulation$1 as ViewEncapsulation, ViewRef, afterRenderEffect, assertInInjectionContext, assertNotInReactiveContext, assertPlatform, booleanAttribute, computed, contentChild, contentChildren, createComponent, createPlatform, createPlatformFactory, destroyPlatform, enableProdMode, getModuleFactory, getNgModuleById, getPlatform, inject, input, isDevMode, isSignal, makeEnvironmentProviders, mergeApplicationConfig, model, numberAttribute, output, platformCore, provideAppInitializer, provideCheckNoChangesConfig, provideEnvironmentInitializer, providePlatformInitializer, provideStabilityDebugging, provideZoneChangeDetection, reflectComponentType, resourceFromSnapshots, runInInjectionContext, viewChild, viewChildren, AfterRenderManager as \u0275AfterRenderManager, CLIENT_RENDER_MODE_FLAG as \u0275CLIENT_RENDER_MODE_FLAG, CONTAINER_HEADER_OFFSET as \u0275CONTAINER_HEADER_OFFSET, ChangeDetectionScheduler as \u0275ChangeDetectionScheduler, Console as \u0275Console, DEFAULT_LOCALE_ID as \u0275DEFAULT_LOCALE_ID, DEHYDRATED_BLOCK_REGISTRY as \u0275DEHYDRATED_BLOCK_REGISTRY, ENABLE_ROOT_COMPONENT_BOOTSTRAP as \u0275ENABLE_ROOT_COMPONENT_BOOTSTRAP, EVENT_REPLAY_QUEUE as \u0275EVENT_REPLAY_QUEUE, Framework as \u0275Framework, IMAGE_CONFIG as \u0275IMAGE_CONFIG, INJECTOR_SCOPE as \u0275INJECTOR_SCOPE, \u0275INPUT_SIGNAL_BRAND_WRITE_TYPE, INTERNAL_APPLICATION_ERROR_HANDLER as \u0275INTERNAL_APPLICATION_ERROR_HANDLER, IS_HYDRATION_DOM_REUSE_ENABLED as \u0275IS_HYDRATION_DOM_REUSE_ENABLED, IS_INCREMENTAL_HYDRATION_ENABLED as \u0275IS_INCREMENTAL_HYDRATION_ENABLED, JSACTION_BLOCK_ELEMENT_MAP as \u0275JSACTION_BLOCK_ELEMENT_MAP, JSACTION_EVENT_CONTRACT as \u0275JSACTION_EVENT_CONTRACT, NgModuleFactory as \u0275NgModuleFactory, PERFORMANCE_MARK_PREFIX as \u0275PERFORMANCE_MARK_PREFIX, PROVIDED_NG_ZONE as \u0275PROVIDED_NG_ZONE, PROVIDED_ZONELESS as \u0275PROVIDED_ZONELESS, PendingTasksInternal as \u0275PendingTasksInternal, ProfilerEvent as \u0275ProfilerEvent, ComponentFactory as \u0275Render3ComponentFactory, RuntimeError as \u0275RuntimeError, SIGNAL as \u0275SIGNAL, TracingService as \u0275TracingService, ViewRef$1 as \u0275ViewRef, ZONELESS_ENABLED as \u0275ZONELESS_ENABLED, annotateForHydration as \u0275annotateForHydration, \u0275assertType, compileNgModuleFactory as \u0275compileNgModuleFactory, createOrReusePlatformInjector as \u0275createOrReusePlatformInjector, defaultIterableDiffers as \u0275defaultIterableDiffers, defaultKeyValueDiffers as \u0275defaultKeyValueDiffers, disableProfiling as \u0275disableProfiling, enableProfiling as \u0275enableProfiling, formatRuntimeError as \u0275formatRuntimeError, getComponentDef as \u0275getComponentDef, getDocument as \u0275getDocument, _global as \u0275global, injectChangeDetectorRef as \u0275injectChangeDetectorRef, internalCreateApplication as \u0275internalCreateApplication, internalProvideZoneChangeDetection as \u0275internalProvideZoneChangeDetection, isPromise as \u0275isPromise, performanceMarkFeature as \u0275performanceMarkFeature, provideZonelessChangeDetectionInternal as \u0275provideZonelessChangeDetectionInternal, resolveComponentResources as \u0275resolveComponentResources, setClassMetadata as \u0275setClassMetadata, setClassMetadataAsync as \u0275setClassMetadataAsync, setInjectorProfilerContext as \u0275setInjectorProfilerContext, setLocaleId as \u0275setLocaleId, startMeasuring as \u0275startMeasuring, stopMeasuring as \u0275stopMeasuring, stringify as \u0275stringify, withDomHydration as \u0275withDomHydration, withEventReplay as \u0275withEventReplay, withI18nSupport as \u0275withI18nSupport, withIncrementalHydration as \u0275withIncrementalHydration, FactoryTarget as \u0275\u0275FactoryTarget, __defineInjectable as \u0275\u0275defineInjectable, __defineInjector as \u0275\u0275defineInjector, __defineNgModule as \u0275\u0275defineNgModule, __inject as \u0275\u0275inject, __injectAttribute as \u0275\u0275injectAttribute, \u0275\u0275ngDeclareClassMetadata, \u0275\u0275ngDeclareClassMetadataAsync, \u0275\u0275ngDeclareComponent, \u0275\u0275ngDeclareDirective, \u0275\u0275ngDeclareFactory, \u0275\u0275ngDeclareInjectable, \u0275\u0275ngDeclareInjector, \u0275\u0275ngDeclareNgModule, \u0275\u0275ngDeclarePipe };\n","/**\n * @license Angular v21.2.4\n * (c) 2010-2026 Google LLC. https://angular.dev/\n * License: MIT\n */\n\nimport * as i0 from '@angular/core';\nimport { inject, Injectable, InjectionToken, DOCUMENT } from '@angular/core';\nlet _DOM = null;\nfunction getDOM() {\n return _DOM;\n}\nfunction setRootDomAdapter(adapter) {\n _DOM ??= adapter;\n}\nclass DomAdapter {}\nlet PlatformLocation = /*#__PURE__*/(() => {\n class PlatformLocation {\n historyGo(relativePosition) {\n throw new Error(ngDevMode ? 'Not implemented' : '');\n }\n static \u0275fac = function PlatformLocation_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || PlatformLocation)();\n };\n static \u0275prov = /* @__PURE__ */i0.\u0275\u0275defineInjectable({\n token: PlatformLocation,\n factory: () => (() => inject(BrowserPlatformLocation))(),\n providedIn: 'platform'\n });\n }\n return PlatformLocation;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst LOCATION_INITIALIZED = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'Location Initialized' : '');\nlet BrowserPlatformLocation = /*#__PURE__*/(() => {\n class BrowserPlatformLocation extends PlatformLocation {\n _location;\n _history;\n _doc = inject(DOCUMENT);\n constructor() {\n super();\n this._location = window.location;\n this._history = window.history;\n }\n getBaseHrefFromDOM() {\n return getDOM().getBaseHref(this._doc);\n }\n onPopState(fn) {\n const window = getDOM().getGlobalEventTarget(this._doc, 'window');\n window.addEventListener('popstate', fn, false);\n return () => window.removeEventListener('popstate', fn);\n }\n onHashChange(fn) {\n const window = getDOM().getGlobalEventTarget(this._doc, 'window');\n window.addEventListener('hashchange', fn, false);\n return () => window.removeEventListener('hashchange', fn);\n }\n get href() {\n return this._location.href;\n }\n get protocol() {\n return this._location.protocol;\n }\n get hostname() {\n return this._location.hostname;\n }\n get port() {\n return this._location.port;\n }\n get pathname() {\n return this._location.pathname;\n }\n get search() {\n return this._location.search;\n }\n get hash() {\n return this._location.hash;\n }\n set pathname(newPath) {\n this._location.pathname = newPath;\n }\n pushState(state, title, url) {\n this._history.pushState(state, title, url);\n }\n replaceState(state, title, url) {\n this._history.replaceState(state, title, url);\n }\n forward() {\n this._history.forward();\n }\n back() {\n this._history.back();\n }\n historyGo(relativePosition = 0) {\n this._history.go(relativePosition);\n }\n getState() {\n return this._history.state;\n }\n static \u0275fac = function BrowserPlatformLocation_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || BrowserPlatformLocation)();\n };\n static \u0275prov = /* @__PURE__ */i0.\u0275\u0275defineInjectable({\n token: BrowserPlatformLocation,\n factory: () => (() => new BrowserPlatformLocation())(),\n providedIn: 'platform'\n });\n }\n return BrowserPlatformLocation;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nexport { BrowserPlatformLocation, DomAdapter, LOCATION_INITIALIZED, PlatformLocation, getDOM, setRootDomAdapter };\n","/**\n * @license Angular v21.2.4\n * (c) 2010-2026 Google LLC. https://angular.dev/\n * License: MIT\n */\n\nfunction parseCookieValue(cookieStr, name) {\n name = encodeURIComponent(name);\n for (const cookie of cookieStr.split(';')) {\n const eqIndex = cookie.indexOf('=');\n const [cookieName, cookieValue] = eqIndex == -1 ? [cookie, ''] : [cookie.slice(0, eqIndex), cookie.slice(eqIndex + 1)];\n if (cookieName.trim() === name) {\n return decodeURIComponent(cookieValue);\n }\n }\n return null;\n}\nclass XhrFactory {}\nexport { XhrFactory, parseCookieValue };\n"],mappings:"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",names:["isFunction","value","createErrorClass","createImpl","ctorFunc","instance","UnsubscriptionError","createErrorClass","_super","errors","err","i","arrRemove","arr","item","index","Subscription","_Subscription","initialTeardown","errors","_parentage","parent","initialFinalizer","isFunction","e","UnsubscriptionError","_finalizers","finalizer","execFinalizer","err","teardown","_a","arrRemove","empty","EMPTY_SUBSCRIPTION","isSubscription","value","config","timeoutProvider","handler","timeout","args","delegate","handle","reportUnhandledError","err","timeoutProvider","onUnhandledError","config","noop","COMPLETE_NOTIFICATION","createNotification","errorNotification","error","nextNotification","value","kind","context","errorContext","cb","config","isRoot","errorThrown","error","captureError","err","Subscriber","Subscription","destination","isSubscription","EMPTY_OBSERVER","next","error","complete","SafeSubscriber","value","handleStoppedNotification","nextNotification","err","errorNotification","COMPLETE_NOTIFICATION","_bind","bind","fn","thisArg","ConsumerObserver","partialObserver","handleUnhandledError","observerOrNext","isFunction","context","config","captureError","reportUnhandledError","defaultErrorHandler","notification","subscriber","onStoppedNotification","timeoutProvider","noop","observable","identity","x","pipe","fns","pipeFromArray","identity","input","prev","fn","Observable","subscribe","operator","observable","observerOrNext","error","complete","subscriber","isSubscriber","SafeSubscriber","errorContext","source","sink","err","next","promiseCtor","getPromiseCtor","resolve","reject","value","_a","operations","pipeFromArray","x","config","isObserver","isFunction","Subscriber","isSubscription","ObjectUnsubscribedError","createErrorClass","_super","Subject","Observable","operator","subject","AnonymousSubject","ObjectUnsubscribedError","value","errorContext","observer","err","observers","_a","subscriber","hasError","isStopped","EMPTY_SUBSCRIPTION","Subscription","arrRemove","thrownError","observable","destination","source","_b","BehaviorSubject","Subject","_value","subscriber","subscription","hasError","thrownError","value","isScheduler","value","isFunction","last","arr","popResultSelector","args","isFunction","popScheduler","isScheduler","__awaiter","thisArg","_arguments","P","generator","adopt","value","resolve","reject","fulfilled","step","e","rejected","result","__values","o","s","m","i","__await","v","__asyncGenerator","thisArg","_arguments","generator","g","i","q","verb","awaitReturn","reject","n","f","a","b","resume","step","e","settle","r","fulfill","value","__asyncValues","o","m","i","__values","verb","n","v","resolve","reject","settle","d","isArrayLike","x","isPromise","value","isFunction","isInteropObservable","input","isFunction","observable","isAsyncIterable","obj","isFunction","createInvalidObservableTypeError","input","getSymbolIterator","iterator","isIterable","input","isFunction","iterator","readableStreamLikeToAsyncGenerator","readableStream","__asyncGenerator","reader","value","done","__await","isReadableStreamLike","obj","isFunction","innerFrom","input","Observable","isInteropObservable","fromInteropObservable","isArrayLike","fromArrayLike","isPromise","fromPromise","isAsyncIterable","fromAsyncIterable","isIterable","fromIterable","isReadableStreamLike","fromReadableStreamLike","createInvalidObservableTypeError","obj","subscriber","obs","observable","isFunction","array","i","promise","value","err","reportUnhandledError","iterable","asyncIterable","process","readableStream","readableStreamLikeToAsyncGenerator","asyncIterable_1","asyncIterable_1_1","e_1","_a","__awaiter","__asyncValues","e_1_1","executeSchedule","parentSubscription","scheduler","work","delay","repeat","scheduleSubscription","hasLift","source","isFunction","operate","init","liftedSource","err","createOperatorSubscriber","destination","onNext","onComplete","onError","onFinalize","OperatorSubscriber","Subscriber","shouldUnsubscribe","value","err","_a","closed","observeOn","scheduler","delay","operate","source","subscriber","createOperatorSubscriber","value","executeSchedule","err","subscribeOn","scheduler","delay","operate","source","subscriber","scheduleObservable","input","scheduler","innerFrom","subscribeOn","observeOn","schedulePromise","input","scheduler","innerFrom","subscribeOn","observeOn","scheduleArray","input","scheduler","Observable","subscriber","i","scheduleIterable","input","scheduler","Observable","subscriber","iterator","executeSchedule","value","done","err","isFunction","scheduleAsyncIterable","input","scheduler","Observable","subscriber","executeSchedule","iterator","result","scheduleReadableStreamLike","input","scheduler","scheduleAsyncIterable","readableStreamLikeToAsyncGenerator","scheduled","input","scheduler","isInteropObservable","scheduleObservable","isArrayLike","scheduleArray","isPromise","schedulePromise","isAsyncIterable","scheduleAsyncIterable","isIterable","scheduleIterable","isReadableStreamLike","scheduleReadableStreamLike","createInvalidObservableTypeError","from","input","scheduler","scheduled","innerFrom","of","args","scheduler","popScheduler","from","map","project","thisArg","operate","source","subscriber","index","createOperatorSubscriber","value","mergeInternals","source","subscriber","project","concurrent","onBeforeNext","expand","innerSubScheduler","additionalFinalizer","buffer","active","index","isComplete","checkComplete","outerNext","value","doInnerSub","innerComplete","innerFrom","createOperatorSubscriber","innerValue","bufferedValue","executeSchedule","err","mergeMap","project","resultSelector","concurrent","isFunction","a","i","map","b","ii","innerFrom","operate","source","subscriber","mergeInternals","isArray","callOrApply","fn","args","mapOneOrManyArgs","map","nodeEventEmitterMethods","eventTargetMethods","jqueryMethods","fromEvent","target","eventName","options","resultSelector","isFunction","mapOneOrManyArgs","add","remove","isEventTarget","methodName","handler","isNodeStyleEventEmitter","toCommonHandlerRegistry","isJQueryStyleEventEmitter","isArrayLike","mergeMap","subTarget","innerFrom","Observable","subscriber","args","filter","predicate","thisArg","operate","source","subscriber","index","createOperatorSubscriber","value","catchError","selector","operate","source","subscriber","innerSub","syncUnsub","handledResult","createOperatorSubscriber","err","innerFrom","EMPTY","Observable","subscriber","take","count","EMPTY","operate","source","subscriber","seen","createOperatorSubscriber","value","finalize","callback","operate","source","subscriber","mergeAll","concurrent","mergeMap","identity","concatAll","mergeAll","concat","args","concatAll","from","popScheduler","startWith","values","scheduler","popScheduler","operate","source","subscriber","concat","switchMap","project","resultSelector","operate","source","subscriber","innerSubscriber","index","isComplete","checkComplete","createOperatorSubscriber","value","innerIndex","outerIndex","innerFrom","innerValue","takeUntil","notifier","operate","source","subscriber","innerFrom","createOperatorSubscriber","noop","tap","observerOrNext","error","complete","tapObserver","isFunction","operate","source","subscriber","_a","isUnsub","createOperatorSubscriber","value","err","_b","identity","dateTimestampProvider","ReplaySubject","Subject","_bufferSize","_windowTime","_timestampProvider","dateTimestampProvider","value","isStopped","_buffer","_infiniteTimeWindow","subscriber","subscription","copy","i","adjustedBufferSize","now","last","Action","Subscription","scheduler","work","state","delay","intervalProvider","handler","timeout","args","delegate","handle","AsyncAction","Action","scheduler","work","state","delay","_a","id","_id","intervalProvider","_scheduler","error","_delay","errored","errorValue","e","actions","arrRemove","Scheduler","_Scheduler","schedulerActionCtor","now","work","delay","state","dateTimestampProvider","AsyncScheduler","Scheduler","SchedulerAction","now","action","actions","error","asyncScheduler","AsyncScheduler","AsyncAction","async","throwError","errorOrErrorFactory","scheduler","errorFactory","isFunction","init","subscriber","Observable","isObservable","obj","Observable","isFunction","EmptyError","createErrorClass","_super","isValidDate","value","TimeoutError","createErrorClass","_super","info","timeout","config","schedulerArg","first","each","_with","timeoutErrorFactory","scheduler","asyncScheduler","meta","isValidDate","operate","source","subscriber","originalSourceSubscription","timerSubscription","lastValue","seen","startTimer","delay","executeSchedule","innerFrom","err","createOperatorSubscriber","value","isArray","getPrototypeOf","objectProto","getKeys","argsArgArrayOrObject","args","first","isPOJO","keys","key","obj","createObject","keys","values","result","key","i","combineLatest","args","scheduler","popScheduler","resultSelector","popResultSelector","observables","keys","argsArgArrayOrObject","from","result","Observable","combineLatestInit","values","createObject","identity","mapOneOrManyArgs","valueTransform","subscriber","maybeSchedule","length","active","remainingFirstValues","i","source","hasFirstValue","createOperatorSubscriber","value","execute","subscription","executeSchedule","defer","observableFactory","Observable","subscriber","innerFrom","forkJoin","args","resultSelector","popResultSelector","sources","keys","argsArgArrayOrObject","result","Observable","subscriber","length","values","remainingCompletions","remainingEmissions","sourceIndex","hasValue","innerFrom","createOperatorSubscriber","value","createObject","mapOneOrManyArgs","timer","dueTime","intervalOrScheduler","scheduler","async","intervalDuration","isScheduler","Observable","subscriber","due","isValidDate","n","interval","period","scheduler","asyncScheduler","timer","concatMap","project","resultSelector","isFunction","mergeMap","defaultIfEmpty","defaultValue","operate","source","subscriber","hasValue","createOperatorSubscriber","value","distinctUntilChanged","comparator","keySelector","identity","defaultCompare","operate","source","subscriber","previousKey","first","createOperatorSubscriber","value","currentKey","a","b","throwIfEmpty","errorFactory","defaultErrorFactory","operate","source","subscriber","hasValue","createOperatorSubscriber","value","EmptyError","first","predicate","defaultValue","hasDefaultValue","source","filter","v","identity","take","defaultIfEmpty","throwIfEmpty","EmptyError","takeLast","count","EMPTY","operate","source","subscriber","buffer","createOperatorSubscriber","value","share","options","connector","Subject","resetOnError","resetOnComplete","resetOnRefCountZero","wrapperSource","connection","resetConnection","subject","refCount","hasCompleted","hasErrored","cancelReset","reset","resetAndUnsubscribe","conn","operate","source","subscriber","dest","handleReset","SafeSubscriber","value","err","innerFrom","on","args","onSubscriber","shareReplay","configOrBufferSize","windowTime","scheduler","bufferSize","refCount","share","ReplaySubject","activeConsumer","inNotificationPhase","epoch","postProducerCreatedFn","SIGNAL","setActiveConsumer","consumer","prev","getActiveConsumer","REACTIVE_NODE","producerAccessed","node","inNotificationPhase","activeConsumer","prevProducerLink","nextProducerLink","isRecomputing","prevConsumerLink","isValidLink","isLive","consumerIsLive","newLink","producerAddLiveConsumer","producerIncrementEpoch","epoch","producerUpdateValueVersion","consumerPollProducersForChange","producerMarkClean","producerNotifyConsumers","prev","link","consumer","consumerMarkDirty","producerUpdatesAllowed","consumerBeforeComputation","resetConsumerBeforeComputation","setActiveConsumer","consumerAfterComputation","prevConsumer","finalizeConsumerAfterComputation","producersTail","toRemove","producerRemoveLiveConsumerLink","producer","seenVersion","consumerDestroy","consumersTail","wasLive","nextProducer","nextConsumer","producerLink","runPostProducerCreatedFn","postProducerCreatedFn","isValidLink","checkLink","consumer","producersTail","link","defaultEquals","a","b","createComputed","computation","equal","node","COMPUTED_NODE","computed","producerUpdateValueVersion","producerAccessed","ERRORED","SIGNAL","runPostProducerCreatedFn","UNSET","COMPUTING","__spreadProps","__spreadValues","REACTIVE_NODE","oldValue","prevConsumer","consumerBeforeComputation","newValue","wasEqual","setActiveConsumer","err","consumerAfterComputation","defaultThrowError","throwInvalidWriteToSignalErrorFn","throwInvalidWriteToSignalError","setThrowInvalidWriteToSignalError","fn","postSignalSetFn","createSignal","initialValue","SIGNAL_NODE","getter","signalGetFn","signalSetFn","updateFn","signalUpdateFn","signalGetFn","node","producerAccessed","signalSetFn","newValue","producerUpdatesAllowed","throwInvalidWriteToSignalError","signalValueChanged","signalUpdateFn","updater","SIGNAL_NODE","__spreadProps","__spreadValues","REACTIVE_NODE","defaultEquals","signalValueChanged","node","producerIncrementEpoch","producerNotifyConsumers","postSignalSetFn","BASE_EFFECT_NODE","runEffect","consumerPollProducersForChange","prevNode","consumerBeforeComputation","consumerAfterComputation","_currentInjector","getCurrentInjector","setCurrentInjector","injector","former","NOT_FOUND","isNotFound","NOT_FOUND","createLinkedSignal","sourceFn","computationFn","equalityFn","node","LINKED_SIGNAL_NODE","getter","producerUpdateValueVersion","producerAccessed","ERRORED","SIGNAL","runPostProducerCreatedFn","linkedSignalSetFn","newValue","signalSetFn","producerMarkClean","linkedSignalUpdateFn","updater","signalUpdateFn","__spreadProps","__spreadValues","REACTIVE_NODE","UNSET","defaultEquals","COMPUTING","oldValue","prevConsumer","consumerBeforeComputation","newSourceValue","prev","err","consumerAfterComputation","untracked","nonReactiveReadsFn","setActiveConsumer","XSS_SECURITY_URL","RuntimeError","code","message","formatRuntimeError","formatRuntimeErrorCode","_global","getClosureSafeProperty","objWithPropertyToExtract","key","fillProperties","target","source","stringify","token","name","result","newLineIndex","concatStringsWithSpace","before","after","__forward_ref__","getClosureSafeProperty","forwardRef","forwardRefFn","resolveForwardRef","type","isForwardRef","fn","\u0275\u0275defineInjectable","opts","\u0275\u0275defineInjector","options","getInjectableDef","type","getOwnDefinition","NG_PROV_DEF","isInjectable","field","getInheritedInjectableDef","def","getInjectorDef","NG_INJ_DEF","getClosureSafeProperty","InjectionToken","_desc","isEnvironmentProviders","value","NG_COMP_DEF","getClosureSafeProperty","NG_DIR_DEF","NG_PIPE_DEF","NG_MOD_DEF","NG_FACTORY_DEF","NG_ELEMENT_ID","NG_ENV_ID","getNgModuleDef","type","assertTypeDefined","getComponentDef","type","assertTypeDefined","NG_COMP_DEF","getDirectiveDef","type","assertTypeDefined","NG_DIR_DEF","getPipeDef","NG_PIPE_DEF","symbolType","RuntimeError","renderStringify","value","NG_RUNTIME_ERROR_CODE","getClosureSafeProperty","NG_RUNTIME_ERROR_MESSAGE","NG_TOKEN_PATH","cyclicDependencyError","token","path","createRuntimeError","throwProviderNotFoundError","token","injectorName","RuntimeError","createRuntimeError","message","code","path","error","RuntimeError","NG_RUNTIME_ERROR_CODE","NG_RUNTIME_ERROR_MESSAGE","NG_TOKEN_PATH","getRuntimeErrorCode","_injectImplementation","getInjectImplementation","setInjectImplementation","impl","previous","injectRootLimpMode","token","notFoundValue","flags","injectableDef","getInjectableDef","throwProviderNotFoundError","_THROW_IF_NOT_FOUND","THROW_IF_NOT_FOUND","DI_DECORATOR_FLAG","RetrievingInjector","injector","token","options","flags","convertToBitFlags","e","isNotFound","injectInjectorOnly","currentInjector","getCurrentInjector","RuntimeError","injectRootLimpMode","convertToInjectOptions","value","\u0275\u0275inject","getInjectImplementation","resolveForwardRef","inject","token","options","\u0275\u0275inject","convertToBitFlags","flags","convertToInjectOptions","injectArgs","types","args","i","arg","resolveForwardRef","RuntimeError","type","j","meta","flag","getInjectFlag","getInjectFlag","token","DI_DECORATOR_FLAG","getFactoryDef","type","throwNotFound","hasFactoryDef","NG_FACTORY_DEF","arrayEquals","a","b","identityAccessor","i","valueA","valueB","flatten","list","deepForEach","input","fn","value","addToArray","arr","index","removeFromArray","newArray","size","arrayInsert2","array","index","value1","value2","end","previousEnd","keyValueArraySet","keyValueArray","key","value","keyValueArrayIndexOf","keyValueArrayGet","_arrayIndexOfSorted","shift","start","middle","current","EMPTY_OBJ","EMPTY_ARRAY","ENVIRONMENT_INITIALIZER","InjectionToken","INJECTOR$1","INJECTOR_DEF_TYPES","NullInjector","token","notFoundValue","THROW_IF_NOT_FOUND","error","createRuntimeError","makeEnvironmentProviders","providers","provideEnvironmentInitializer","initializerFn","importProvidersFrom","sources","internalImportProvidersFrom","checkForStandaloneCmp","providersOut","dedup","injectorTypesWithProviders","collectProviders","provider","deepForEach","source","internalSource","walkProviderTree","processInjectorTypesWithProviders","typesWithProviders","visitor","i","ngModule","deepForEachProvider","container","parents","resolveForwardRef","defType","injDef","getInjectorDef","cmpDef","getComponentDef","isDuplicate","deps","dep","importTypesWithProviders","imported","factory","getFactoryDef","\u0275\u0275inject","defProviders","injectorType","deepForEachProvider","providers","fn","provider","isEnvironmentProviders","USE_VALUE","getClosureSafeProperty","isValueProvider","value","isExistingProvider","isFactoryProvider","isTypeProvider","isClassProvider","INJECTOR_SCOPE","InjectionToken","NOT_YET","CIRCULAR","NULL_INJECTOR","getNullInjector","NullInjector","EnvironmentInjector","R3Injector","parent","source","scopes","forEachSingleProvider","INJECTOR$1","makeRecord","record","INJECTOR_DEF_TYPES","EMPTY_ARRAY","token","options","flags","convertToBitFlags","THROW_IF_NOT_FOUND","e","isNotFound","assertNotDestroyed","prevConsumer","setActiveConsumer","service","onDestroyHooks","hook","callback","previousInjector","setCurrentInjector","previousInjectImplementation","setInjectImplementation","prevInjectContext","notFoundValue","NG_ENV_ID","def","couldBeInjectableType","getInjectableDef","injectableDefOrInjectorDefFactory","nextInjector","error","errorCode","getRuntimeErrorCode","RuntimeError","initializers","ENVIRONMENT_INITIALIZER","initializer","resolveForwardRef","providerToRecord","multiRecord","injectArgs","cyclicDependencyError","hasOnDestroy","providedIn","destroyCBIdx","injectableDef","factory","getFactoryDef","getUndecoratedInjectableFactory","inheritedInjectableDef","getInheritedInjectableDef","providerToFactory","ngModuleType","unwrappedProvider","_","\u0275\u0275inject","classRef","hasDeps","injector","multi","runInInjectionContext","internalInjector","RetrievingInjector","prevInjectorProfilerContext","prevInjector","isInInjectionContext","getInjectImplementation","getCurrentInjector","HOST","TVIEW","FLAGS","PARENT","NEXT","T_HOST","HYDRATION","CLEANUP","CONTEXT","INJECTOR","ENVIRONMENT","RENDERER","CHILD_HEAD","CHILD_TAIL","DECLARATION_VIEW","DECLARATION_COMPONENT_VIEW","DECLARATION_LCONTAINER","PREORDER_HOOK_FLAGS","QUERIES","ID","EMBEDDED_VIEW_INJECTOR","ON_DESTROY_HOOKS","EFFECTS_TO_SCHEDULE","EFFECTS","REACTIVE_TEMPLATE_CONSUMER","AFTER_RENDER_SEQUENCES_TO_ADD","ANIMATIONS","HEADER_OFFSET","TYPE","DEHYDRATED_VIEWS","NATIVE","VIEW_REFS","MOVED_VIEWS","CONTAINER_HEADER_OFFSET","isLView","value","isLContainer","isContentQueryHost","tNode","isComponentHost","isDirectiveHost","isComponentDef","def","isRootView","target","isDestroyed","lView","FLAGS","SVG_NAMESPACE","MATH_ML_NAMESPACE","unwrapRNode","value","HOST","getNativeByIndex","index","lView","unwrapRNode","getNativeByTNode","tNode","getTNode","tView","index","load","view","store","lView","value","getComponentLViewByIndex","nodeIndex","hostView","slotValue","isLView","HOST","isCreationMode","FLAGS","viewAttachedToChangeDetector","viewAttachedToContainer","isLContainer","PARENT","getConstant","consts","resetPreOrderHookFlags","PREORDER_HOOK_FLAGS","markViewForRefresh","markAncestorsForTraversal","walkUpViews","nestingLevel","currentView","DECLARATION_VIEW","requiresRefreshOrTraversal","REACTIVE_TEMPLATE_CONSUMER","updateAncestorTraversalFlagsOnAttach","ENVIRONMENT","parent","getLViewParent","storeLViewOnDestroy","onDestroyCallback","isDestroyed","RuntimeError","ON_DESTROY_HOOKS","removeLViewOnDestroy","destroyCBIdx","getOrCreateLViewCleanup","CLEANUP","getOrCreateTViewCleanup","storeCleanupWithContext","context","cleanupFn","lCleanup","instructionState","createLFrame","_isRefreshingViews","getElementDepthCount","instructionState","increaseElementDepthCount","decreaseElementDepthCount","getBindingsEnabled","isInSkipHydrationBlock","isSkipHydrationRootTNode","tNode","leaveSkipHydrationBlock","instructionState","getLView","getTView","\u0275\u0275restoreView","viewToRestore","CONTEXT","\u0275\u0275resetView","value","getCurrentTNode","currentTNode","getCurrentTNodePlaceholderOk","getCurrentParentTNode","lFrame","setCurrentTNode","tNode","isParent","isCurrentTNodeParent","setCurrentTNodeAsNotParent","getContextLView","isRefreshingViews","_isRefreshingViews","setIsRefreshingViews","mode","prev","getBindingRoot","lFrame","instructionState","index","getBindingIndex","setBindingIndex","value","nextBindingIndex","incrementBindingIndex","count","isInI18nBlock","setBindingRootForHostBindings","bindingRootIndex","currentDirectiveIndex","lFrame","instructionState","setCurrentDirectiveIndex","getCurrentDirectiveIndex","getCurrentDirectiveDef","tData","getCurrentQueryIndex","setCurrentQueryIndex","value","getDeclarationTNode","lView","tView","TVIEW","T_HOST","enterDI","tNode","flags","parentTNode","parentLView","DECLARATION_VIEW","allocLFrame","enterView","newView","newLFrame","currentLFrame","childLFrame","createLFrame","parent","leaveViewLight","oldLFrame","leaveDI","leaveView","nextContextImpl","level","walkUpViews","CONTEXT","getSelectedIndex","setSelectedIndex","index","getSelectedTNode","getTNode","\u0275\u0275namespaceSVG","SVG_NAMESPACE","\u0275\u0275namespaceHTML","namespaceHTMLInternal","instructionState","getNamespace","_wasLastNodeCreated","wasLastNodeCreated","lastNodeWasCreated","flag","createInjector","defType","parent","additionalProviders","name","injector","createInjectorWithoutInjectorInstances","scopes","providers","EMPTY_ARRAY","importProvidersFrom","source","R3Injector","getNullInjector","Injector","_Injector","THROW_IF_NOT_FOUND","NullInjector","options","\u0275\u0275defineInjectable","\u0275\u0275inject","INJECTOR$1","DOCUMENT","InjectionToken","DestroyRef","injectDestroyRef","NodeInjectorDestroyRef","_lView","isDestroyed","callback","lView","storeLViewOnDestroy","removeLViewOnDestroy","getLView","SCHEDULE_IN_ROOT_ZONE_DEFAULT","DEBUG_TASK_TRACKER","PendingTasksInternal","BehaviorSubject","inject","Observable","subscriber","taskId","EventEmitter_","Subject","isAsync","isInInjectionContext","value","prevConsumer","setActiveConsumer","observerOrNext","error","complete","nextFn","errorFn","completeFn","observer","sink","Subscription","fn","EventEmitter","noop","args","scheduleCallbackWithRafRace","timeoutId","animationFrameId","cleanup","scheduleCallbackWithMicrotask","isAngularZoneProperty","angularZoneInstanceIdProperty","ngZoneInstanceId","NgZone","_NgZone","EventEmitter","options","enableLongStackTrace","shouldCoalesceEventChangeDetection","shouldCoalesceRunChangeDetection","scheduleInRootZone","SCHEDULE_IN_ROOT_ZONE_DEFAULT","RuntimeError","self","forkInnerZoneWithAngularBehavior","fn","applyThis","applyArgs","name","zone","task","EMPTY_PAYLOAD","noop","checkStable","delayChangeDetectionForEvents","scheduleCheckStable","scheduleCallbackWithRafRace","updateMicroTaskStatus","delayChangeDetectionForEventsDelegate","instanceId","delegate","current","target","shouldBeIgnoredByZone","onEnter","onLeave","callback","source","isSchedulerTick","hasTaskState","error","NoopNgZone","hasApplyArgsData","key","ErrorHandler","INTERNAL_APPLICATION_ERROR_HANDLER","InjectionToken","inject","injector","EnvironmentInjector","userErrorHandler","e","errorHandlerEnvironmentInitializer","ENVIRONMENT_INITIALIZER","handler","globalErrorListeners","window","DOCUMENT","errorHandler","rejectionListener","errorListener","setupEventListeners","DestroyRef","provideBrowserGlobalErrorListeners","makeEnvironmentProviders","provideEnvironmentInitializer","signal","initialValue","options","get","set","update","createSignal","signalFn","node","SIGNAL","signalAsReadonlyFn","readonlyFn","ViewContext","view","node","injectViewContext","getLView","getCurrentTNode","ChangeDetectionScheduler","ZONELESS_ENABLED","InjectionToken","SCHEDULE_IN_ROOT_ZONE","InjectionToken","PendingTasks","inject","PendingTasksInternal","ChangeDetectionScheduler","INTERNAL_APPLICATION_ERROR_HANDLER","taskId","fn","removeTask","\u0275\u0275defineInjectable","EffectScheduler","ZoneAwareEffectScheduler","handle","zone","queue","ranOneEffect","EffectRefImpl","SIGNAL","node","effect","effectFn","options","injector","Injector","destroyRef","DestroyRef","viewContext","ViewContext","notifier","createViewEffect","NodeInjectorDestroyRef","createRootEffect","EFFECT_NODE","__spreadProps","__spreadValues","BASE_EFFECT_NODE","prevRefreshingViews","setIsRefreshingViews","runEffect","prevConsumer","setActiveConsumer","ROOT_EFFECT_NODE","consumerDestroy","VIEW_EFFECT_NODE","FLAGS","markAncestorsForTraversal","EFFECTS","view","createEffectFn","scheduler","cleanupFn","noSideEffects","fn","isType","v","applyValueToInputField","instance","inputSignalNode","privateName","value","SimpleChange","previousValue","currentValue","firstChange","\u0275\u0275NgOnChangesFeature","\u0275\u0275NgOnChangesFeatureImpl","NgOnChangesFeatureImpl","definition","ngOnChangesSetInput","rememberChangeHistoryAndInvokeOnChangesHook","simpleChangesStore","getSimpleChangesStore","current","previous","EMPTY_OBJ","key","publicName","declaredName","setSimpleChangesStore","previousChange","SIMPLE_CHANGES_STORE","store","profilerCallbacks","profiler","event","instance","eventFn","i","profilerCallbacks","profilerCallback","ProfilerEvent","registerPreOrderHooks","directiveIndex","directiveDef","tView","ngOnChanges","ngOnInit","ngDoCheck","wrappedOnChanges","NgOnChangesFeatureImpl","registerPostOrderHooks","tNode","end","lifecycleHooks","ngAfterContentInit","ngAfterContentChecked","ngAfterViewInit","ngAfterViewChecked","ngOnDestroy","executeCheckHooks","lView","hooks","nodeIndex","callHooks","executeInitAndCheckHooks","initPhase","FLAGS","incrementInitPhaseFlags","flags","currentView","arr","currentNodeIndex","startIndex","PREORDER_HOOK_FLAGS","nodeIndexLimit","max","lastNodeIndexFound","callHook","callHookInternal","directive","hook","prevConsumer","setActiveConsumer","isInitHook","NO_PARENT_INJECTOR","NodeInjectorFactory","factory","isViewProvider","injectImplementation","name","hasClassInput","tNode","hasStyleInput","setUpAttributes","renderer","native","attrs","i","value","namespaceURI","attrName","attrVal","isAnimationProp","isNameOnlyAttributeMarker","marker","name","mergeHostAttrs","dst","src","srcMarker","item","mergeHostAttribute","key1","key2","markerInsertPosition","dstValue","hasParentInjector","parentLocation","NO_PARENT_INJECTOR","getParentInjectorIndex","getParentInjectorViewOffset","getParentInjectorView","location","startView","viewOffset","parentView","DECLARATION_VIEW","includeViewProviders","setIncludeViewProviders","v","oldValue","BLOOM_SIZE","BLOOM_MASK","BLOOM_BUCKET_BITS","nextNgElementId","NOT_FOUND","bloomAdd","injectorIndex","tView","type","id","NG_ELEMENT_ID","bloomHash","mask","getOrCreateNodeInjectorForNode","tNode","lView","existingInjectorIndex","getInjectorIndex","TVIEW","insertBloom","parentLoc","getParentInjectorLocation","parentIndex","parentLView","parentData","arr","footer","declarationViewOffset","parentTNode","lViewCursor","getTNodeFromLView","diPublicInInjector","token","injectAttributeImpl","attrNameToInject","attrsLength","notFoundValueOrThrow","notFoundValue","flags","throwProviderNotFoundError","lookupTokenUsingModuleInjector","moduleInjector","INJECTOR","previousInjectImplementation","setInjectImplementation","injectRootLimpMode","getOrCreateInjectable","FLAGS","embeddedInjectorValue","lookupTokenUsingEmbeddedInjector","lookupTokenUsingNodeInjector","bloomHashBitOrFactory","enterDI","leaveDI","previousTView","hostTElementNode","DECLARATION_COMPONENT_VIEW","T_HOST","shouldSearchParent","bloomHasToken","instance","searchTokensOnInjector","currentTView","canAccessViewProviders","isComponentHost","isHostSpecialCase","injectableIdx","locateDirectiveOrProvider","getNodeInjectable","nodeProviderIndexes","tInjectables","injectablesStart","directivesStart","directiveEnd","cptViewProvidersCount","startingIndex","endIndex","providerTokenOrDef","dirDef","isComponentDef","getNodeInjectable","lView","tView","index","tNode","flags","value","tData","NodeInjectorFactory","factory","cyclicDependencyError","previousIncludeViewProviders","setIncludeViewProviders","token","prevInjectContext","previousInjectImplementation","setInjectImplementation","success","enterDI","registerPreOrderHooks","leaveDI","bloomHashBitOrFactory","tokenId","NG_ELEMENT_ID","BLOOM_MASK","createNodeInjector","bloomHasToken","bloomHash","injectorIndex","injectorView","mask","BLOOM_BUCKET_BITS","shouldSearchParent","isFirstHostTNode","NodeInjector","_tNode","_lView","token","notFoundValue","flags","getOrCreateInjectable","convertToBitFlags","createNodeInjector","getCurrentTNode","getLView","\u0275\u0275getInheritedFactory","type","noSideEffects","ownConstructor","ownFactory","NG_FACTORY_DEF","getFactoryOf","objectPrototype","parent","factory","t","isForwardRef","resolveForwardRef","getFactoryDef","lookupTokenUsingEmbeddedInjector","tNode","lView","currentTNode","currentLView","FLAGS","isRootView","nodeInjectorValue","lookupTokenUsingNodeInjector","NOT_FOUND","parentTNode","embeddedViewInjector","EMBEDDED_VIEW_INJECTOR","embeddedViewInjectorValue","getTNodeFromLView","DECLARATION_VIEW","tView","TVIEW","tViewType","T_HOST","\u0275\u0275injectAttribute","attrNameToInject","injectAttributeImpl","injectElementRef","createElementRef","getCurrentTNode","getLView","tNode","lView","ElementRef","getNativeByTNode","nativeElement","unwrapElementRef","value","symbolIterator","QueryList","Subject","_emitDistinctChangesOnly","index","fn","init","resultsTree","identityAccessor","newResultFlat","flatten","arrayEquals","cb","hasInSkipHydrationBlockFlag","tNode","ChangeDetectionStrategy","TRACKED_LVIEWS","uniqueIdCounter","getUniqueLViewId","registerLView","lView","ID","unregisterLView","lView","TRACKED_LVIEWS","ID","MONKEY_PATCH_KEY_NAME","attachPatchData","target","data","isLView","ID","registerLView","getFirstLContainer","lView","getNearestLContainer","CHILD_HEAD","getNextLContainer","container","NEXT","viewOrContainer","isLContainer","DOCUMENT","setDocument","document","APP_ID","InjectionToken","DEFAULT_APP_ID","PLATFORM_INITIALIZER","InjectionToken","PLATFORM_ID","CSP_NONCE","InjectionToken","inject","DOCUMENT","NUM_ROOT_NODES","DEFER_BLOCK_ID","PRESERVE_HOST_CONTENT_DEFAULT","PRESERVE_HOST_CONTENT","InjectionToken","IS_ENABLED_BLOCKING_INITIAL_NAVIGATION","InjectionToken","_stashEventListenerImpl","lView","target","eventName","wrappedListener","stashEventListenerImpl","isDetachedByI18n","tNode","_retrieveHydrationInfoImpl","retrieveHydrationInfo","rNode","injector","isRootView","_retrieveHydrationInfoImpl","refreshContentQueries","tView","lView","contentQueries","prevConsumer","setActiveConsumer","i","queryStartIdx","directiveDefIdx","directiveDef","setCurrentQueryIndex","executeViewQueryFn","flags","viewQueryFn","component","executeContentQueries","tNode","isContentQueryHost","start","end","directiveIndex","def","directiveInstance","ViewEncapsulation","policy","getPolicy","_global","s","trustedScriptURLFromStringBypass","url","getPolicy","SafeValueImpl","changingThisBreaksApplicationSecurity","XSS_SECURITY_URL","unwrapSafeValue","value","SafeValueImpl","allowSanitizationBypassAndThrow","type","actualType","getSanitizationBypassType","XSS_SECURITY_URL","SAFE_URL_PATTERN","_sanitizeUrl","url","createTextNode","renderer","value","updateTextNode","rNode","createElementNode","renderer","name","namespace","nativeInsertBefore","parent","child","beforeNode","isMove","nativeAppendChild","nativeAppendOrInsertBefore","nativeRemoveNode","rNode","isHostElement","requireSynchronousElementRemoval","writeDirectStyle","renderer","element","newValue","writeDirectClass","setupStaticAttributes","tNode","mergedAttrs","classes","styles","setUpAttributes","SecurityContext","\u0275\u0275sanitizeUrl","unsafeUrl","sanitizer","getSanitizer","SecurityContext","allowSanitizationBypassAndThrow","unwrapSafeValue","_sanitizeUrl","renderStringify","\u0275\u0275sanitizeResourceUrl","unsafeResourceUrl","trustedScriptURLFromStringBypass","RuntimeError","SRC_RESOURCE_TAGS","HREF_RESOURCE_TAGS","getUrlSanitizer","tag","prop","\u0275\u0275sanitizeResourceUrl","\u0275\u0275sanitizeUrl","\u0275\u0275sanitizeUrlOrResourceUrl","unsafeUrl","getSanitizer","lView","getLView","ENVIRONMENT","maybeUnwrapFn","value","classIndexOf","className","classToSearch","startingIndex","end","foundIndex","length","NG_TEMPLATE_SELECTOR","isCssClassMatching","tNode","attrs","cssClassToMatch","isProjectionMode","i","isInlineTemplate","item","hasTagAndTypeMatch","currentSelector","tagNameToCompare","isNodeMatchingSelector","selector","mode","nodeAttrs","nameOnlyMarkerIdx","getNameOnlyMarkerIndex","skipToNextSelector","current","isPositive","selectorAttrValue","attrIndexInNode","findAttrIndexInNode","nodeAttrValue","name","bindingsMode","maybeAttrName","value","matchTemplateAttribute","isNodeMatchingSelectorList","getProjectAsAttrValue","ngProjectAsAttrIdx","nodeAttr","isNameOnlyAttributeMarker","attr","isSelectorInSelectorList","list","selectorListLoop","currentSelectorInList","j","maybeWrapInNotSelector","isNegativeMode","chunk","stringifyCSSSelector","result","currentChunk","valueOrMarker","attrValue","stringifyCSSSelectorList","selectorList","extractAttrsAndClassesFromSelector","classes","NO_CHANGE","createTView","type","declTNode","templateFn","decls","vars","directives","pipes","viewQuery","schemas","constsOrFactory","ssrId","bindingStartIndex","HEADER_OFFSET","initialViewLength","blueprint","createViewBlueprint","consts","TVIEW","getOrCreateComponentTView","def","tView","createLView","parentLView","context","flags","host","tHostNode","environment","renderer","injector","embeddedViewInjector","hydrationInfo","lView","HOST","FLAGS","resetPreOrderHookFlags","PARENT","DECLARATION_VIEW","CONTEXT","ENVIRONMENT","RENDERER","INJECTOR","T_HOST","ID","getUniqueLViewId","HYDRATION","EMBEDDED_VIEW_INJECTOR","DECLARATION_COMPONENT_VIEW","createComponentLView","hostTNode","native","getNativeByTNode","rendererFactory","componentView","addToEndOfViewTree","getInitialLViewFlagsFromDef","allocExpando","numSlotsToAlloc","initialValue","allocIdx","lViewOrLContainer","CHILD_HEAD","CHILD_TAIL","NEXT","\u0275\u0275advance","delta","selectIndexInternal","getTView","getLView","getSelectedIndex","index","checkNoChangesMode","preOrderCheckHooks","executeCheckHooks","preOrderHooks","executeInitAndCheckHooks","setSelectedIndex","InputFlags","writeToDirectiveInput","instance","publicName","prevConsumer","setActiveConsumer","privateName","transform","inputSignalNode","SIGNAL","applyValueToInputField","RendererStyleFlags2","_icuContainerIterate","icuContainerIterate","tIcuContainerNode","areAnimationSupported","leavingNodes","reusedNodes","cancelLeavingNodes","tNode","newElement","nodes","leavingNodes","newParent","prevSibling","leavingEl","leavingParent","reusedNodes","trackLeavingNodes","el","allLeavingAnimations","TracingAction","TracingService","InjectionToken","markedFeatures","performanceMarkFeature","feature","AfterRenderManager","\u0275\u0275defineInjectable","AFTER_RENDER_PHASES","AfterRenderImpl","inject","NgZone","ChangeDetectionScheduler","ErrorHandler","hasSequencesToExecute","profiler","ProfilerEvent","phase","sequence","hookFn","err","view","AFTER_RENDER_SEQUENCES_TO_ADD","markAncestorsForTraversal","FLAGS","fn","snapshot","AfterRenderSequence","impl","hooks","once","destroyRef","scheduled","s","afterNextRender","callbackOrSpec","options","injector","inject","Injector","performanceMarkFeature","afterEveryRenderImpl","getHooks","once","manager","AfterRenderManager","AfterRenderImpl","tracing","TracingService","destroyRef","DestroyRef","viewContext","ViewContext","sequence","AfterRenderSequence","ANIMATION_QUEUE","InjectionToken","inject","EnvironmentInjector","addToAnimationQueue","injector","animationFns","animationData","animationQueue","animateFn","removeFromAnimationQueue","animationFn","queueEnterAnimations","injector","enterAnimations","_","nodeAnimations","addToAnimationQueue","maybeQueueEnterAnimation","parentLView","parent","tNode","ANIMATIONS","applyToElementOrContainer","action","renderer","lNodeToHandle","beforeNode","lContainer","isComponent","isLContainer","isLView","HOST","rNode","unwrapRNode","nativeAppendChild","nativeInsertBefore","cancelLeavingNodes","trackLeavingNodes","runLeaveAnimationsWithCallback","nodeHasLeaveAnimations","reusedNodes","nativeRemoveNode","applyContainer","removeViewFromDOM","tView","lView","detachViewFromDOM","T_HOST","addViewToDOM","parentTNode","parentNativeNode","applyView","ENVIRONMENT","RENDERER","destroyViewTree","rootView","lViewOrLContainer","CHILD_HEAD","cleanUpView","TVIEW","next","firstView","CONTAINER_HEADER_OFFSET","NEXT","PARENT","detachMovedView","declarationContainer","movedViews","MOVED_VIEWS","declarationViewIndex","destroyLView","isDestroyed","prevConsumer","setActiveConsumer","FLAGS","REACTIVE_TEMPLATE_CONSUMER","consumerDestroy","executeOnDestroys","processCleanups","DECLARATION_LCONTAINER","lQueries","QUERIES","unregisterLView","callback","animations","allLeavingAnimations","ID","leaveAnimations","runningAnimations","index","animationFn","promise","runAfterLeaveAnimations","tCleanup","lCleanup","CLEANUP","i","targetIdx","context","destroyHooks","ON_DESTROY_HOOKS","destroyHooksFn","effects","EFFECTS","effect","NodeInjectorFactory","toCall","j","callContext","hook","profiler","ProfilerEvent","getParentRElement","getClosestRElement","isComponentHost","encapsulation","ViewEncapsulation","getNativeByTNode","getInsertInFrontOfRNode","currentTNode","_getInsertInFrontOfRNodeWithI18n","getInsertInFrontOfRNodeWithNoI18n","_processI18nInsertBefore","appendChild","tView","lView","childRNode","childTNode","parentRNode","getParentRElement","renderer","RENDERER","parentTNode","T_HOST","anchorNode","getInsertInFrontOfRNode","i","nativeAppendOrInsertBefore","_processI18nInsertBefore","getFirstNativeNode","tNode","tNodeType","getNativeByTNode","getBeforeNodeForView","elIcuContainerChild","rNodeOrLContainer","isLContainer","unwrapRNode","icuContainerIterate","projectionNodes","getProjectionNodes","parentView","getLViewParent","DECLARATION_COMPONENT_VIEW","componentHost","slotIdx","viewIndexInContainer","lContainer","nextViewIndex","CONTAINER_HEADER_OFFSET","firstTNodeOfView","TVIEW","NATIVE","applyNodes","action","parentRElement","beforeNode","isProjection","injector","INJECTOR","rawSlotValue","attachPatchData","isDetachedByI18n","applyToElementOrContainer","nextRNode","rNode","applyProjectionRecursive","applyView","applyProjection","tProjectionNode","componentLView","nodeToProjectOrRNodes","nodeToProject","projectedComponentLView","PARENT","hasInSkipHydrationBlockFlag","applyContainer","anchor","native","applyStyling","isClassBased","prop","value","flags","RendererStyleFlags2","executeTemplate","templateFn","rf","context","prevSelectedIndex","getSelectedIndex","isUpdatePhase","setSelectedIndex","HEADER_OFFSET","selectIndexInternal","preHookType","ProfilerEvent","profiler","postHookType","createDirectivesInstances","instantiateAllDirectives","invokeDirectivesHostBindings","saveResolvedLocalsInData","viewData","localRefExtractor","localNames","localIndex","index","locateHostElement","elementOrSelector","encapsulation","preserveContent","PRESERVE_HOST_CONTENT","PRESERVE_HOST_CONTENT_DEFAULT","ViewEncapsulation","rootElement","applyRootElementTransform","_applyRootElementTransformImpl","mapPropName","name","setPropertyAndInputs","tNode","lView","propName","value","renderer","sanitizer","tView","TVIEW","setAllInputsForProperty","isComponentHost","markDirtyIfOnPush","setDomProperty","element","getNativeByTNode","viewIndex","childComponentLView","getComponentLViewByIndex","FLAGS","instantiateAllDirectives","tView","lView","tNode","start","end","isComponentHost","createComponentLView","getOrCreateNodeInjectorForNode","initialInputs","i","def","directive","getNodeInjectable","attachPatchData","setInputsFromAttrs","isComponentDef","componentView","getComponentLViewByIndex","CONTEXT","invokeDirectivesHostBindings","elementIndex","currentDirectiveIndex","getCurrentDirectiveIndex","setSelectedIndex","dirIndex","setCurrentDirectiveIndex","invokeHostBindingsInCreationMode","findDirectiveDefMatches","registry","matches","isNodeMatchingSelectorList","elementAttributeInternal","name","value","sanitizer","namespace","element","getNativeByTNode","setElementAttribute","RENDERER","renderer","tagName","strValue","renderStringify","directiveIndex","instance","initialInputData","lookupName","writeToDirectiveInput","elementLikeStartShared","index","locateOrCreateNativeNode","adjustedIndex","HEADER_OFFSET","TVIEW","native","setCurrentTNode","isElement","setupStaticAttributes","getElementDepthCount","isDirectiveHost","increaseElementDepthCount","wasLastNodeCreated","isDetachedByI18n","appendChild","elementLikeEndShared","currentTNode","isCurrentTNodeParent","setCurrentTNodeAsNotParent","handleUncaughtError","lView","error","injector","INJECTOR","errorHandler","INTERNAL_APPLICATION_ERROR_HANDLER","setAllInputsForProperty","tNode","tView","publicName","value","inputs","hostDirectiveInputs","hasMatch","i","index","def","writeToDirectiveInput","instance","renderComponent","hostLView","componentHostIdx","componentView","getComponentLViewByIndex","componentTView","TVIEW","syncViewWithBlueprint","hostRNode","HOST","HYDRATION","retrieveHydrationInfo","INJECTOR","profiler","ProfilerEvent","renderView","CONTEXT","tView","lView","i","context","enterView","viewQuery","executeViewQueryFn","templateFn","executeTemplate","QUERIES","refreshContentQueries","components","renderChildComponents","error","FLAGS","leaveView","createAndRenderEmbeddedLView","declarationLView","templateTNode","options","prevConsumer","setActiveConsumer","embeddedTView","viewFlags","embeddedLView","createLView","declarationLContainer","DECLARATION_LCONTAINER","declarationViewLQueries","shouldAddViewToDom","tNode","dehydratedView","hasInSkipHydrationBlockFlag","collectNativeNodes","tView","lView","tNode","result","isProjection","lNode","unwrapRNode","isLContainer","collectNativeNodesInLContainer","tNodeType","nextRNode","icuContainerIterate","rNode","nodesInSlot","getProjectionNodes","parentView","getLViewParent","DECLARATION_COMPONENT_VIEW","TVIEW","lContainer","i","CONTAINER_HEADER_OFFSET","lViewInAContainer","lViewFirstChildTNode","NATIVE","HOST","addAfterRenderSequencesForView","AFTER_RENDER_SEQUENCES_TO_ADD","sequence","freeConsumers","getOrBorrowReactiveLViewConsumer","REACTIVE_TEMPLATE_CONSUMER","borrowReactiveLViewConsumer","consumer","REACTIVE_LVIEW_CONSUMER_NODE","maybeReturnReactiveLViewConsumer","__spreadProps","__spreadValues","REACTIVE_NODE","node","markAncestorsForTraversal","getOrCreateTemporaryConsumer","TEMPORARY_CONSUMER_NODE","parent","viewShouldHaveReactiveConsumer","markViewForRefresh","runEffectsInView","view","EFFECTS","tryFlushEffects","foundDirtyEffect","effect","FLAGS","MAXIMUM_REFRESH_RERUNS$1","detectChangesInternal","lView","mode","rendererFactory","ENVIRONMENT","checkNoChangesMode","detectChangesInViewWhileDirty","lastIsRefreshingViewsValue","isRefreshingViews","setIsRefreshingViews","detectChangesInView","retries","requiresRefreshOrTraversal","RuntimeError","refreshView","tView","lView","templateFn","context","isDestroyed","flags","FLAGS","isInCheckNoChangesPass","isInExhaustiveCheckNoChangesPass","enterView","returnConsumerToPool","prevConsumer","currentConsumer","viewShouldHaveReactiveConsumer","getOrBorrowReactiveLViewConsumer","consumerBeforeComputation","getActiveConsumer","getOrCreateTemporaryConsumer","REACTIVE_TEMPLATE_CONSUMER","consumerDestroy","resetPreOrderHookFlags","setBindingIndex","executeTemplate","hooksInitPhaseCompleted","preOrderCheckHooks","executeCheckHooks","preOrderHooks","executeInitAndCheckHooks","incrementInitPhaseFlags","markTransplantedViewsForRefresh","runEffectsInView","detectChangesInEmbeddedViews","refreshContentQueries","contentCheckHooks","contentHooks","processHostBindingOpCodes","components","detectChangesInChildComponents","viewQuery","executeViewQueryFn","viewCheckHooks","viewHooks","EFFECTS_TO_SCHEDULE","notifyEffect","addAfterRenderSequencesForView","e","markAncestorsForTraversal","consumerAfterComputation","maybeReturnReactiveLViewConsumer","leaveView","mode","lContainer","getFirstLContainer","getNextLContainer","i","CONTAINER_HEADER_OFFSET","embeddedLView","detectChangesInViewIfAttached","movedViews","MOVED_VIEWS","movedLView","markViewForRefresh","detectChangesInComponent","hostLView","componentHostIdx","profiler","ProfilerEvent","componentView","getComponentLViewByIndex","CONTEXT","viewAttachedToChangeDetector","detectChangesInView","TVIEW","consumer","shouldRefreshView","consumerPollProducersForChange","setActiveConsumer","hostBindingOpCodes","opCode","setSelectedIndex","directiveIdx","bindingRootIndx","hostBindingFn","setBindingRootForHostBindings","markViewDirty","source","dirtyBitsToUse","isRefreshingViews","ENVIRONMENT","parent","getLViewParent","isRootView","createLContainer","hostNative","currentView","native","tNode","getLViewFromLContainer","index","adjustedIndex","addLViewToLContainer","addToDOM","insertView","beforeNode","getBeforeNodeForView","renderer","RENDERER","parentRNode","NATIVE","addViewToDOM","T_HOST","hydrationInfo","HYDRATION","removeLViewFromLContainer","detachView","destroyLView","removeIndex","indexInContainer","viewToDetach","declarationLContainer","DECLARATION_LCONTAINER","detachMovedView","NEXT","removedLView","removeFromArray","removeViewFromDOM","lQueries","QUERIES","PARENT","containerLength","addToArray","trackMovedView","updateAncestorTraversalFlagsOnAttach","declarationContainer","isLView","insertedComponentLView","DECLARATION_COMPONENT_VIEW","ViewRef","collectNativeNodes","_lView","_cdRefInjectingView","value","isLContainer","viewRefs","VIEW_REFS","callback","storeLViewOnDestroy","detectChangesInternal","RuntimeError","isRoot","detachViewFromDOM","appRef","TemplateRef","injectTemplateRef","_declarationLView","_declarationTContainer","elementRef","context","injector","dehydratedView","embeddedLView","createAndRenderEmbeddedLView","ViewRef","createTemplateRef","getCurrentTNode","getLView","hostTNode","hostLView","createElementRef","getOrCreateTNode","tView","index","type","name","attrs","tNode","createTNodeAtIndex","isInI18nBlock","parent","getCurrentParentTNode","setCurrentTNode","currentTNode","getCurrentTNodePlaceholderOk","isParent","isCurrentTNodeParent","createTNode","linkTNodeInTView","tParent","value","injectorIndex","flags","isInSkipHydrationBlock","removeDehydratedViews","lContainer","views","DEHYDRATED_VIEWS","renderer","PARENT","RENDERER","retainedViews","view","DEFER_BLOCK_ID","removeDehydratedView","removeDehydratedView","dehydratedView","renderer","nodesRemoved","currentRNode","numNodes","NUM_ROOT_NODES","nextSibling","nativeRemoveNode","_findMatchingDehydratedViewImpl","_findAndReconcileMatchingDehydratedViewsImpl","findMatchingDehydratedView","lContainer","template","_findMatchingDehydratedViewImpl","findAndReconcileMatchingDehydratedViews","lContainer","templateTNode","hostLView","_findAndReconcileMatchingDehydratedViewsImpl","ComponentRef$1","ComponentFactory$1","_NullComponentFactoryResolver","component","RuntimeError","ComponentFactoryResolver$1","RendererFactory2","Renderer2","injectRenderer2","lView","getLView","tNode","getCurrentTNode","nodeAtIndex","getComponentLViewByIndex","isLView","RENDERER","Sanitizer","\u0275\u0275defineInjectable","NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR","ChainedInjector","injector","parentInjector","token","notFoundValue","options","value","computeStaticStyling","tNode","attrs","writeToHost","styles","classes","mode","i","concatStringsWithSpace","style","styleValue","\u0275\u0275directiveInject","flags","lView","getLView","\u0275\u0275inject","getCurrentTNode","getOrCreateInjectable","resolveForwardRef","\u0275\u0275invalidFactory","msg","resolveDirectives","tView","localRefs","directiveMatcher","exportsMap","matchedDirectiveDefs","directiveDefs","hostDirectiveDefs","hostDirectiveRanges","def","initializeDirectives","cacheMatchingLocalNames","localNames","index","RuntimeError","markAsComponentHost","hostTNode","componentOffset","directives","directivesLength","componentDef","isComponentDef","diPublicInInjector","getOrCreateNodeInjectorForNode","initTNodeFlags","preOrderHooksFound","preOrderCheckHooksFound","directiveIdx","allocExpando","mergeHostAttrs","configureViewWithDirective","saveNameToExportMap","start","end","lifeCycleHooks","initializeInputAndOutputAliases","directiveDef","setupSelectorMatchedInputsOrOutputs","setupInitialInputs","hostDirectiveDef","setupHostDirectiveInputsOrOutputs","directiveIndex","aliasMap","publicName","bindings","setShadowStylingInputFlags","config","initialName","isHostDirective","inputs","hostDirectiveInputs","isInlineTemplate","inputsToStore","attrName","inputConfig","j","directiveFactory","getFactoryDef","nodeInjectorFactory","NodeInjectorFactory","registerHostBindingOpCodes","NO_CHANGE","directiveVarsIdx","hostBindings","hostBindingOpCodes","elementIndx","lastSelectedElementIdx","numberOfDirectives","directiveHostFirstCreatePass","index","lView","type","name","directiveMatcher","bindingsEnabled","attrsIndex","localRefsIndex","tView","TVIEW","tViewConsts","attrs","getConstant","tNode","getOrCreateTNode","resolveDirectives","mergeHostAttrs","computeStaticStyling","directiveHostEndFirstCreatePass","registerPostOrderHooks","isContentQueryHost","domOnlyFirstCreatePass","refs","i","isListLikeIterable","obj","isJsObject","iterateListLike","obj","fn","i","iterator","item","isJsObject","o","updateBinding","lView","bindingIndex","value","getBinding","bindingUpdated","NO_CHANGE","oldValue","bindingUpdated2","exp1","exp2","different","wrapListener","tNode","lView","listenerFn","wrapListenerIn_markDirtyAndPreventDefault","event","startView","isComponentHost","getComponentLViewByIndex","markViewDirty","context","CONTEXT","result","executeListenerWithErrorHandling","nextListenerFn","e","prevConsumer","setActiveConsumer","profiler","ProfilerEvent","error","handleUncaughtError","listenToDomEvent","tView","eventTargetResolver","renderer","eventName","originalListener","wrappedListener","isTNodeDirectiveHost","isDirectiveHost","hasCoalesced","existingListener","findExistingListener","lastListenerFn","native","getNativeByTNode","target","stashEventListenerImpl","cleanupFn","isAnimationEventType","idxOrTargetGetter","_lView","unwrapRNode","storeListenerCleanup","tNodeIndex","tCleanup","cleanupEventName","lCleanup","CLEANUP","listenerIdxInLCleanup","indexOrTargetGetter","cleanup","isOutput","getOrCreateTViewCleanup","getOrCreateLViewCleanup","index","listenToOutput","tNode","lView","directiveIndex","lookupName","eventName","listenerFn","instance","tView","TVIEW","propertyName","subscription","storeListenerCleanup","BINDING","getComponentName","def","ComponentFactoryResolver","ComponentFactoryResolver$1","ngModule","component","componentDef","getComponentDef","ComponentFactory","toInputRefArray","map","name","propName","flags","transform","inputData","InputFlags","toOutputRefArray","createRootViewInjector","componentDef","environmentInjector","injector","realEnvironmentInjector","EnvironmentInjector","ChainedInjector","createRootLViewEnvironment","rootLViewInjector","rendererFactory","RendererFactory2","RuntimeError","sanitizer","Sanitizer","changeDetectionScheduler","ChangeDetectionScheduler","tracingService","TracingService","createHostElement","renderer","tagName","inferTagNameFromDefinition","createElementNode","SVG_NAMESPACE","MATH_ML_NAMESPACE","ComponentFactory","ComponentFactory$1","toInputRefArray","toOutputRefArray","ngModule","stringifyCSSSelectorList","projectableNodes","rootSelectorOrNode","directives","componentBindings","profiler","ProfilerEvent","prevConsumer","setActiveConsumer","cmpDef","rootViewInjector","environment","getComponentName","rootTView","createRootTView","hostRenderer","hostElement","locateHostElement","hasInputBindings","isInputBinding","d","rootLView","createLView","getInitialLViewFlagsFromDef","retrieveHydrationInfo","HEADER_OFFSET","enterView","componentView","hostTNode","directiveHostFirstCreatePass","setupStaticAttributes","attachPatchData","createDirectivesInstances","executeContentQueries","directiveHostEndFirstCreatePass","projectNodes","getComponentLViewByIndex","CONTEXT","renderView","e","unregisterLView","leaveView","ComponentRef","tAttributes","extractAttrsAndClassesFromSelector","creationBindings","updateBindings","varsToAllocate","binding","BINDING","i","directive","targetDirectiveIdx","directivesToApply","directiveType","directiveDef","getDirectiveDef","createTView","getRootTViewTemplate","flags","kind","ComponentRef$1","componentType","_rootLView","_hasInputBindings","getTNode","TVIEW","createElementRef","ViewRef","name","value","tNode","lView","hasSetInput","setAllInputsForProperty","childComponentLView","markViewDirty","NodeInjector","callback","ngContentSelectors","projection","nodesforSlot","ViewContainerRef","injectViewContainerRef","previousTNode","getCurrentTNode","createContainerRef","getLView","R3ViewContainerRef","_R3ViewContainerRef","_lContainer","_hostTNode","_hostLView","parentLocation","getParentInjectorLocation","hasParentInjector","parentView","getParentInjectorView","injectorIndex","getParentInjectorIndex","parentTNode","index","viewRefs","getViewRefs","CONTAINER_HEADER_OFFSET","templateRef","context","indexOrOptions","dehydratedView","findMatchingDehydratedView","viewRef","shouldAddViewToDom","componentFactoryOrType","bindings","isComponentFactory","isType","options","componentFactory","getComponentDef","contextInjector","result","rNode","componentRef","addToDOM","viewAttachedToContainer","prevIdx","prevLContainer","PARENT","prevVCRef","T_HOST","adjustedIdx","lContainer","addLViewToLContainer","addToArray","getOrCreateViewRefs","newIndex","viewRefsArr","detachedView","detachView","removeFromArray","destroyLView","view","shift","VIEW_REFS","hostLView","slotValue","isLContainer","createLContainer","addToEndOfViewTree","_locateOrCreateAnchorNode","insertAnchorNode","RENDERER","commentNode","hostNative","getNativeByTNode","parentOfHostNative","nativeInsertBefore","createAnchorNode","_populateDehydratedViewsInLContainer","populateDehydratedViewsInLContainer","NATIVE","unwrapRNode","LQuery_","_LQuery_","queryList","LQueries_","_LQueries_","queries","tView","tQueries","noOfInheritedQueries","viewLQueries","tQuery","parentLQuery","i","getTQuery","TQueryMetadata_","predicate","flags","read","splitQueryMultiSelectors","TQueries_","_TQueries_","tNode","queriesForTemplateRef","childQueryIndex","tqueryClone","index","tquery","TQuery_","_TQuery_","metadata","nodeIndex","declarationNodeIdx","parent","name","getIdxOfMatchingSelector","locateDirectiveOrProvider","TemplateRef","nodeMatchIdx","ElementRef","ViewContainerRef","directiveOrProviderIdx","tNodeIdx","matchIdx","selector","localNames","createResultByTNodeType","currentView","createElementRef","createTemplateRef","createResultForNode","lView","matchingIdx","createSpecialToken","getNodeInjectable","TVIEW","createContainerRef","materializeViewResults","queryIndex","lQuery","QUERIES","tViewData","tQueryMatches","result","matchedNodeIdx","collectQueryResults","lViewResults","declarationLContainer","CONTAINER_HEADER_OFFSET","embeddedLView","DECLARATION_LCONTAINER","PARENT","MOVED_VIEWS","embeddedLViews","loadQueryInternal","createLQuery","QueryList","storeCleanupWithContext","createViewQuery","getTView","createTQuery","getLView","createContentQuery","directiveIndex","getCurrentTNode","saveContentQueryAndDirectiveIndex","locator","s","tViewContentQueries","lastSavedDirectiveIndex","getQueryResults","NgModuleRef$1","NgModuleFactory$1","NgModuleRef","NgModuleRef$1","ComponentFactoryResolver","ngModuleType","_parent","additionalProviders","runInjectorInitializers","ngModuleDef","getNgModuleDef","maybeUnwrapFn","createInjectorWithoutInjectorInstances","ComponentFactoryResolver$1","stringify","injector","fn","callback","NgModuleFactory","NgModuleFactory$1","moduleType","parentInjector","EnvironmentNgModuleRefAdapter","NgModuleRef$1","ComponentFactoryResolver","config","injector","R3Injector","ComponentFactoryResolver$1","getNullInjector","callback","createEnvironmentInjector","providers","parent","debugName","StandaloneService","_injector","componentDef","internalImportProvidersFrom","standaloneInjector","\u0275\u0275defineInjectable","\u0275\u0275inject","EnvironmentInjector","\u0275\u0275defineComponent","componentDefinition","noSideEffects","baseDef","getNgDirectiveDef","def","__spreadProps","__spreadValues","ChangeDetectionStrategy","parentInjector","ViewEncapsulation","EMPTY_ARRAY","performanceMarkFeature","initFeatures","dependencies","extractDefListOrFactory","extractDirectiveDef","getPipeDef","getComponentId","type","getComponentDef","getDirectiveDef","\u0275\u0275defineNgModule","parseAndConvertInputsForDefinition","obj","declaredInputs","EMPTY_OBJ","newLookup","minifiedKey","value","publicName","declaredName","inputFlags","transform","InputFlags","parseAndConvertOutputsForDefinition","\u0275\u0275defineDirective","directiveDefinition","\u0275\u0275definePipe","pipeDef","definition","fn","defExtractor","resolvedDependencies","result","dep","getComponentId","componentDef","hash","componentDefConsts","hashSelectors","char","getSuperType","type","\u0275\u0275InheritDefinitionFeature","definition","superType","shouldInheritFields","inheritanceChain","superDef","isComponentDef","RuntimeError","writeableDef","maybeUnwrapEmpty","superHostBindings","inheritHostBindings","superViewQuery","superContentQueries","inheritViewQuery","inheritContentQueries","mergeInputsWithTransforms","fillProperties","defData","features","i","feature","mergeHostAttrsAcrossInheritance","target","source","key","value","hostVars","hostAttrs","def","mergeHostAttrs","EMPTY_OBJ","EMPTY_ARRAY","prevViewQuery","rf","ctx","prevContentQueries","directiveIndex","prevHostBindings","templateCreate","tNode","declarationLView","declarationTView","index","templateFn","decls","vars","flags","embeddedTView","createTView","setCurrentTNode","comment","_locateOrCreateContainerAnchor","wasLastNodeCreated","appendChild","attachPatchData","lContainer","createLContainer","HEADER_OFFSET","addToEndOfViewTree","populateDehydratedViewsInLContainer","declareDirectiveHostTemplate","tagName","attrs","localRefsIndex","localRefExtractor","adjustedIndex","getOrCreateTNode","getBindingsEnabled","resolveDirectives","getConstant","findDirectiveDefMatches","registerPostOrderHooks","isDirectiveHost","createDirectivesInstances","saveResolvedLocalsInData","declareNoDirectiveHostTemplate","refs","\u0275\u0275template","attrsIndex","lView","getLView","tView","getTView","_locateOrCreateContainerAnchor","createContainerAnchorImpl","tView","lView","tNode","index","lastNodeWasCreated","RENDERER","Console","message","__ngFactoryType__","\u0275\u0275defineInjectable","TESTABILITY","InjectionToken","isPromise","obj","isSubscribable","APP_INITIALIZER","InjectionToken","provideAppInitializer","initializerFn","makeEnvironmentProviders","ApplicationInitStatus","res","rej","inject","Injector","asyncInitPromises","appInits","initResult","runInInjectionContext","observableAsPromise","resolve","reject","complete","e","__ngFactoryType__","\u0275\u0275defineInjectable","APP_BOOTSTRAP_LISTENER","publishSignalConfiguration","setThrowInvalidWriteToSignalError","errorMessage","RuntimeError","isBoundToModule","cf","MAXIMUM_REFRESH_RERUNS","ApplicationRef","inject","INTERNAL_APPLICATION_ERROR_HANDLER","AfterRenderManager","ZONELESS_ENABLED","EffectScheduler","Subject","PendingTasksInternal","map","pending","TracingService","subscription","resolve","stable","EnvironmentInjector","componentOrFactory","rootSelectorOrNode","injector","Injector","NgZone","profiler","ProfilerEvent","isComponentFactory","ComponentFactory$1","ApplicationInitStatus","errorMessage","RuntimeError","componentFactory","ComponentFactoryResolver$1","ngModule","isBoundToModule","NgModuleRef$1","selectorOrNode","compRef","nativeElement","testability","TESTABILITY","remove","TracingAction","prevConsumer","setActiveConsumer","RendererFactory2","runs","MAXIMUM_REFRESH_RERUNS","ranDetectChanges","useGlobalCheck","_lView","requiresRefreshOrTraversal","mode","detectChangesInternal","viewRef","view","componentRef","e","APP_BOOTSTRAP_LISTENER","listener","callback","__ngFactoryType__","\u0275\u0275defineInjectable","remove","list","el","index","\u0275\u0275attribute","name","value","sanitizer","namespace","lView","getLView","bindingIndex","nextBindingIndex","bindingUpdated","tView","getTView","tNode","getSelectedTNode","elementAttributeInternal","\u0275\u0275componentInstance","getLView","DECLARATION_COMPONENT_VIEW","CONTEXT","LiveCollection","item","index","value","index1","index2","startIdx","endIdx","endItem","startItem","prevIndex","newIdx","valuesMatching","liveIdx","liveValue","newValue","trackBy","reconcile","liveCollection","newCollection","trackByFn","reactiveConsumer","detachedItems","liveKeysInTheFuture","liveStartIdx","liveEndIdx","duplicateKeys","setActiveConsumer","newEndIdx","liveStartValue","newStartValue","isStartMatching","valuesMatching","liveEndValue","newEndValue","isEndMatching","liveStartKey","liveEndKey","newStartKey","newEndKey","UniqueValueMultiKeyMap","initLiveItemsInTheFuture","attachPreviouslyDetached","newItem","createOrAttach","newCollectionIterator","newIterationResult","liveValue","newValue","newKey","liveKey","item","prevCollection","index","key","value","start","end","keys","prevValue","vMap","cb","\u0275\u0275conditionalCreate","templateFn","decls","vars","tagName","attrsIndex","localRefsIndex","localRefExtractor","performanceMarkFeature","lView","getLView","tView","getTView","attrs","getConstant","declareNoDirectiveHostTemplate","\u0275\u0275conditionalBranchCreate","\u0275\u0275conditional","matchingTemplateIndex","contextValue","hostLView","bindingIndex","nextBindingIndex","prevMatchingTemplateIndex","NO_CHANGE","prevContainer","getLContainer","HEADER_OFFSET","viewInContainerIdx","bindingUpdated","prevConsumer","removeLViewFromLContainer","nextLContainerIndex","nextContainer","templateTNode","getExistingTNode","TVIEW","dehydratedView","findAndReconcileMatchingDehydratedViews","embeddedLView","createAndRenderEmbeddedLView","addLViewToLContainer","shouldAddViewToDom","getLViewFromLContainer","CONTEXT","RepeaterContext","lContainer","$implicit","$index","CONTAINER_HEADER_OFFSET","\u0275\u0275repeaterTrackByIdentity","_","value","RepeaterMetadata","hasEmptyBlock","trackByFn","liveCollection","\u0275\u0275repeaterCreate","index","templateFn","decls","vars","tagName","attrsIndex","trackByUsesComponentInstance","emptyTemplateFn","emptyDecls","emptyVars","emptyTagName","emptyAttrsIndex","performanceMarkFeature","lView","getLView","tView","getTView","hostLView","boundTrackBy","DECLARATION_COMPONENT_VIEW","CONTEXT","metadata","HEADER_OFFSET","declareNoDirectiveHostTemplate","getConstant","LiveCollectionLContainerImpl","LiveCollection","lContainer","hostLView","templateTNode","CONTAINER_HEADER_OFFSET","index","CONTEXT","lView","dehydratedView","HYDRATION","addLViewToLContainer","shouldAddViewToDom","clearDetachAnimationList","maybeInitDetachAnimationList","detachExistingView","value","findMatchingDehydratedView","createAndRenderEmbeddedLView","RepeaterContext","destroyLView","TVIEW","i","getExistingLViewFromLContainer","\u0275\u0275repeater","collection","prevConsumer","setActiveConsumer","metadataSlotIdx","getSelectedIndex","getLView","hostTView","metadata","containerIndex","getLContainer","itemTemplateTNode","getExistingTNode","liveCollection","reconcile","bindingIndex","nextBindingIndex","isCollectionEmpty","bindingUpdated","emptyTemplateIndex","lContainerForEmpty","emptyTemplateTNode","findAndReconcileMatchingDehydratedViews","embeddedLView","removeDehydratedViews","removeLViewFromLContainer","indexInContainer","viewToDetach","animations","ANIMATIONS","injector","INJECTOR","removeFromAnimationQueue","allLeavingAnimations","ID","detachView","getLViewFromLContainer","tView","getTNode","\u0275\u0275property","propName","sanitizer","getTView","tNode","getSelectedTNode","setPropertyAndInputs","RENDERER","setDirectiveInputsWhichShadowsStyling","isClassBased","setAllInputsForProperty","\u0275\u0275elementStart","name","attrsIndex","localRefsIndex","adjustedIndex","HEADER_OFFSET","directiveHostFirstCreatePass","findDirectiveDefMatches","getBindingsEnabled","isComponentHost","tracingService","ENVIRONMENT","def","getComponentName","initializeElement","elementLikeStartShared","_locateOrCreateElementNode","isDirectiveHost","createDirectivesInstances","executeContentQueries","saveResolvedLocalsInData","\u0275\u0275elementEnd","initialTNode","getCurrentTNode","currentTNode","elementLikeEndShared","directiveHostEndFirstCreatePass","isSkipHydrationRootTNode","leaveSkipHydrationBlock","decreaseElementDepthCount","hasClassInput","hasStyleInput","\u0275\u0275element","\u0275\u0275domElementStart","domOnlyFirstCreatePass","\u0275\u0275domElementEnd","\u0275\u0275domElement","lastNodeWasCreated","createElementNode","getNamespace","\u0275\u0275getCurrentView","getLView","\u0275\u0275domProperty","propName","value","sanitizer","lView","bindingIndex","nextBindingIndex","bindingUpdated","tView","getTView","tNode","getSelectedTNode","setDomProperty","RENDERER","u","plural","val","i","v","localeEn","LOCALE_DATA","findLocaleData","locale","normalizedLocale","normalizeLocale","match","getLocaleData","parentLocale","localeEn","RuntimeError","getLocaleData","normalizedLocale","LOCALE_DATA","_global","LocaleDataIndex","normalizeLocale","locale","DEFAULT_LOCALE_ID","LOCALE_ID$1","DEFAULT_LOCALE_ID","setLocaleId","localeId","\u0275\u0275listener","eventName","listenerFn","eventTargetResolver","lView","getLView","tView","getTView","tNode","getCurrentTNode","listenerInternal","RENDERER","\u0275\u0275domListener","eventName","listenerFn","eventTargetResolver","lView","getLView","tView","getTView","tNode","getCurrentTNode","listenToDomEvent","RENDERER","wrapListener","listenerInternal","renderer","processOutputs","wrappedListener","outputConfig","hostDirectiveOutputConfig","i","index","lookupName","listenToOutput","\u0275\u0275nextContext","level","nextContextImpl","matchingProjectionSlotIndex","projectionSlots","wildcardNgContentIndex","ngProjectAsAttrVal","getProjectAsAttrValue","slotValue","isNodeMatchingSelectorList","isSelectorInSelectorList","\u0275\u0275projectionDef","componentNode","DECLARATION_COMPONENT_VIEW","T_HOST","numProjectionSlots","projectionHeads","newArray","tails","componentChild","slotIndex","\u0275\u0275projection","nodeIndex","selectorIndex","attrs","fallbackTemplateFn","fallbackDecls","fallbackVars","fallbackIndex","declareNoDirectiveHostTemplate","tProjectionNode","getOrCreateTNode","HEADER_OFFSET","setCurrentTNodeAsNotParent","isNodeCreationMode","HYDRATION","isInSkipHydrationBlock","insertFallbackContent","isDetachedByI18n","applyProjection","adjustedIndex","fallbackTNode","fallbackLContainer","dehydratedView","findMatchingDehydratedView","fallbackLView","createAndRenderEmbeddedLView","addLViewToLContainer","shouldAddViewToDom","\u0275\u0275contentQuery","directiveIndex","predicate","flags","read","createContentQuery","\u0275\u0275viewQuery","createViewQuery","\u0275\u0275queryRefresh","queryList","queryIndex","getCurrentQueryIndex","setCurrentQueryIndex","tQuery","getTQuery","isCreationMode","result","getQueryResults","unwrapElementRef","\u0275\u0275loadQuery","loadQueryInternal","\u0275\u0275reference","index","contextLView","getContextLView","load","HEADER_OFFSET","toTStylingRange","prev","next","getTStylingRangePrev","tStylingRange","getTStylingRangePrevDuplicate","setTStylingRangePrev","previous","setTStylingRangePrevDuplicate","getTStylingRangeNext","setTStylingRangeNext","getTStylingRangeNextDuplicate","setTStylingRangeNextDuplicate","insertTStylingBinding","tData","tNode","tStylingKeyWithStatic","isHostBinding","isClassBinding","tBindings","tmplHead","tmplTail","isKeyDuplicateOfStatic","tStylingKey","staticKeyValueArray","keyValueArrayIndexOf","previousNode","markDuplicates","markDuplicateOfResidualStyling","residual","isPrevDir","tStylingAtIndex","isMap","cursor","foundDuplicate","tStylingValueAtCursor","tStyleRangeAtCursor","isStylingMatch","tStylingKeyCursor","parserState","getLastParsedKey","text","parseClassName","text","resetParserState","parseClassNameNext","consumeWhitespace","parserState","index","end","consumeClassToken","resetParserState","text","parserState","consumeWhitespace","startIndex","endIndex","consumeClassToken","\u0275\u0275styleProp","prop","value","suffix","checkStylingProperty","\u0275\u0275classProp","className","\u0275\u0275classMap","classes","checkStylingMap","classKeyValueArraySet","classStringParser","keyValueArray","text","i","parseClassName","parseClassNameNext","keyValueArraySet","getLastParsedKey","checkStylingProperty","prop","value","suffix","isClassBased","lView","getLView","tView","getTView","bindingIndex","incrementBindingIndex","stylingFirstUpdatePass","NO_CHANGE","bindingUpdated","tNode","getSelectedIndex","updateStyling","RENDERER","normalizeSuffix","stringParser","hasStylingInputShadow","isInHostBindings","staticPrefix","concatStringsWithSpace","setDirectiveInputsWhichShadowsStyling","updateStylingMap","toStylingKeyValueArray","tStylingKey","tData","isHostBindings","wrapInStaticStylingKey","insertTStylingBinding","stylingKey","hostDirectiveDef","getCurrentDirectiveDef","residual","collectStylingFromDirectives","collectStylingFromTAttrs","directiveStylingLast","templateStylingKey","getTemplateHeadTStylingKey","setTemplateHeadTStylingKey","collectResidual","bindings","getTStylingRangeNext","getTStylingRangePrev","directiveEnd","attrs","currentDirective","desiredMarker","currentMarker","item","EMPTY_ARRAY","styleKeyValueArray","unwrappedValue","unwrapSafeValue","current","key","classKeyValueArraySet","keyValueArray","key","value","stringKey","keyValueArraySet","updateStylingMap","tView","tNode","lView","renderer","oldKeyValueArray","newKeyValueArray","isClassBased","bindingIndex","NO_CHANGE","EMPTY_ARRAY","oldIndex","newIndex","oldKey","newKey","oldValue","newValue","setKey","setValue","updateStyling","prop","tData","tRange","higherPriorityValue","getTStylingRangeNextDuplicate","findStylingValue","getTStylingRangeNext","isStylingValuePresent","getTStylingRangePrevDuplicate","rNode","getNativeByIndex","getSelectedIndex","applyStyling","index","isPrevDirection","rawKey","containsStatics","isStylingMap","valueAtLViewIndex","currentValue","keyValueArrayGet","getTStylingRangePrev","residual","normalizeSuffix","suffix","stringify","unwrapSafeValue","hasStylingInputShadow","\u0275\u0275text","getLView","getTView","adjustedIndex","HEADER_OFFSET","getOrCreateTNode","textNative","_locateOrCreateTextNode","wasLastNodeCreated","appendChild","setCurrentTNode","lastNodeWasCreated","createTextNode","RENDERER","interpolation1","lView","prefix","v0","suffix","bindingUpdated","nextBindingIndex","renderStringify","NO_CHANGE","interpolation2","i0","v1","bindingIndex","getBindingIndex","different","bindingUpdated2","incrementBindingIndex","\u0275\u0275textInterpolate","v0","\u0275\u0275textInterpolate1","prefix","suffix","lView","getLView","interpolated","interpolation1","NO_CHANGE","textBindingInternal","getSelectedIndex","\u0275\u0275textInterpolate2","i0","v1","interpolation2","textBindingInternal","lView","index","value","element","getNativeByIndex","updateTextNode","RENDERER","\u0275\u0275interpolate1","prefix","v0","suffix","interpolation1","getLView","providersResolver","def","providers","isViewProviders","tView","getTView","resolveProvider","isComponentDef","provider","tInjectables","lInjectablesBlueprint","isComponent","isViewProvider","resolveForwardRef","lView","getLView","tNode","getCurrentTNode","token","isTypeProvider","providerFactory","providerToFactory","beginIndex","endIndex","cptViewProvidersCount","factory","NodeInjectorFactory","\u0275\u0275directiveInject","existingFactoryIndex","indexOf","diPublicInInjector","getOrCreateNodeInjectorForNode","registerDestroyHooksIfSupported","existingProvidersFactoryIndex","existingViewProvidersFactoryIndex","doesProvidersFactoryExist","doesViewProvidersFactoryExist","multiFactory","multiViewProvidersFactoryResolver","multiProvidersFactoryResolver","indexInFactory","multiFactoryAdd","contextIndex","providerIsTypeProvider","providerIsClassProvider","isClassProvider","ngOnDestroy","hooks","existingCallbacksIndex","isComponentProvider","item","arr","begin","end","i","_","flags","tData","lData","multiResolve","_flags","_tData","factories","result","componentCount","multiProviders","getNodeInjectable","TVIEW","factoryFn","index","f","\u0275\u0275ProvidersFeature","providers","viewProviders","definition","def","processProvidersFn","providersResolver","\u0275\u0275pureFunction0","slotOffset","pureFn","bindingIndex","getBindingRoot","lView","getLView","NO_CHANGE","updateBinding","getBinding","\u0275\u0275pureFunction2","slotOffset","pureFn","exp1","exp2","pureFunction2Internal","getLView","getBindingRoot","getPureFunctionReturnValue","lView","returnValueIndex","lastReturnValue","NO_CHANGE","pureFunction1Internal","bindingRoot","slotOffset","pureFn","exp","thisArg","bindingIndex","bindingUpdated","updateBinding","pureFunction2Internal","exp1","exp2","bindingUpdated2","\u0275\u0275pipe","index","pipeName","tView","getTView","pipeDef","adjustedIndex","HEADER_OFFSET","getPipeDef","pipeFactory","getFactoryDef","previousInjectorProfilerContext","previousInjectImplementation","setInjectImplementation","\u0275\u0275directiveInject","previousIncludeViewProviders","setIncludeViewProviders","pipeInstance","store","getLView","name","registry","i","\u0275\u0275pipeBind1","index","offset","v1","adjustedIndex","HEADER_OFFSET","lView","getLView","pipeInstance","load","isPure","pureFunction1Internal","getBindingRoot","\u0275\u0275pipeBind2","slotOffset","v2","pureFunction2Internal","isPure","lView","index","TVIEW","\u0275\u0275templateRefExtractor","tNode","createTemplateRef","ModuleWithComponentFactories","ngModuleFactory","componentFactories","Compiler","moduleType","NgModuleFactory","moduleDef","getNgModuleDef","maybeUnwrapFn","factories","declaration","componentDef","getComponentDef","ComponentFactory","type","__ngFactoryType__","\u0275\u0275defineInjectable","ChangeDetectionSchedulerImpl","inject","INTERNAL_APPLICATION_ERROR_HANDLER","ApplicationRef","PendingTasksInternal","NgZone","ZONELESS_ENABLED","TracingService","Subscription","angularZoneInstanceIdProperty","SCHEDULE_IN_ROOT_ZONE","task","source","scheduleCallback","scheduleCallbackWithMicrotask","scheduleCallbackWithRafRace","e","taskId","__ngFactoryType__","\u0275\u0275defineInjectable","provideZonelessChangeDetectionInternal","ChangeDetectionScheduler","ChangeDetectionSchedulerImpl","NgZone","NoopNgZone","ZONELESS_ENABLED","getGlobalLocale","DEFAULT_LOCALE_ID","LOCALE_ID","InjectionToken","inject","OutputEmitterRef","inject","ErrorHandler","DestroyRef","callback","RuntimeError","idx","value","formatRuntimeError","previousConsumer","setActiveConsumer","listenerFn","err","untracked","nonReactiveReadsFn","computed","computation","options","createComputed","identityFn","v","linkedSignal","optionsOrComputation","getter","createLinkedSignal","upgradeLinkedSignalGetter","debugName","node","SIGNAL","upgradedGetter","newValue","linkedSignalSetFn","updateFn","linkedSignalUpdateFn","signalAsReadonlyFn","REQUIRED_UNSET_VALUE","INPUT_SIGNAL_NODE","__spreadProps","__spreadValues","SIGNAL_NODE","node","value","signalSetFn","createInputSignal","initialValue","options","node","INPUT_SIGNAL_NODE","inputValueFn","producerAccessed","REQUIRED_UNSET_VALUE","message","RuntimeError","SIGNAL","HostAttributeToken","attributeName","\u0275\u0275injectAttribute","output","opts","OutputEmitterRef","inputFunction","initialValue","createInputSignal","inputRequiredFunction","REQUIRED_UNSET_VALUE","input","PLATFORM_DESTROY_LISTENERS","InjectionToken","ENABLE_ROOT_COMPONENT_BOOTSTRAP","isApplicationBootstrapConfig","config","bootstrap","envInjector","ngZone","NgZone","exceptionHandler","INTERNAL_APPLICATION_ERROR_HANDLER","onErrorSubscription","destroyListener","onPlatformDestroyListeners","remove","_callAndReportToErrorHandler","pendingTasks","PendingTasksInternal","taskId","initStatus","ApplicationInitStatus","localeId","LOCALE_ID","DEFAULT_LOCALE_ID","setLocaleId","ApplicationRef","appRef","moduleBootstrapImpl","_callAndReportToErrorHandler","errorHandler","ngZone","callback","result","isPromise","e","_platformInjector","createPlatformInjector","providers","name","Injector","INJECTOR_SCOPE","PLATFORM_DESTROY_LISTENERS","_platformInjector","createOrReusePlatformInjector","providers","_platformInjector","injector","createPlatformInjector","publishSignalConfiguration","runPlatformInitializers","runPlatformInitializers","injector","inits","PLATFORM_INITIALIZER","runInInjectionContext","init","APPLICATION_IS_STABLE_TIMEOUT","STABILITY_WARNING_THRESHOLD","APPLICATION_IS_STABLE_TIMEOUT","ChangeDetectorRef","injectChangeDetectorRef","flags","createViewRef","getCurrentTNode","getLView","tNode","lView","isPipe","isComponentHost","componentView","getComponentLViewByIndex","ViewRef","hostComponentView","DECLARATION_COMPONENT_VIEW","DefaultIterableDifferFactory","obj","isListLikeIterable","trackByFn","DefaultIterableDiffer","trackByIdentity","index","item","fn","record","nextIt","nextRemove","addRemoveOffset","moveOffsets","getPreviousIndex","adjPreviousIndex","currentIndex","localMovePreviousIndex","localCurrentIndex","i","offset","previousIndex","collection","RuntimeError","mayBeDirty","itemTrackBy","iterateListLike","previousRecord","IterableChangeRecord_","reinsertRecord","nextRecord","prevRecord","prev","next","_DuplicateMap","toIndex","trackById","_DuplicateItemRecordList","atOrAfterIndex","key","duplicates","recordList","moveOffset","defaultIterableDiffersFactory","IterableDiffers","DefaultIterableDifferFactory","\u0275\u0275defineInjectable","factories","parent","copied","inject","iterable","factory","f","RuntimeError","internalCreateApplication","config","rootComponent","appProviders","platformProviders","platformRef","profiler","ProfilerEvent","platformInjector","createOrReusePlatformInjector","allAppProviders","provideZonelessChangeDetectionInternal","errorHandlerEnvironmentInitializer","adapter","EnvironmentNgModuleRefAdapter","bootstrap","e","booleanAttribute","value","reflectComponentType","component","componentDef","getComponentDef","factory","ComponentFactory","_DOM","getDOM","setRootDomAdapter","adapter","DomAdapter","PlatformLocation","relativePosition","__ngFactoryType__","\u0275\u0275defineInjectable","inject","BrowserPlatformLocation","LOCATION_INITIALIZED","InjectionToken","DOCUMENT","fn","window","newPath","state","title","url","parseCookieValue","cookieStr","name","cookie","eqIndex","cookieName","cookieValue","XhrFactory"],x_google_ignoreList:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98]},_coverageSchema:"1a1c01bbd47fc00a2c39e90264f33305004495a9",hash:"5681395b1ea3c9bb6d1ac9e687f920368b0ed9d2"};var coverage=global[gcv]||(global[gcv]={});if(!coverage[path]||coverage[path].hash!==hash){coverage[path]=coverageData;}var actualCoverage=coverage[path];{// @ts-ignore +cov_18tmdn9r60=function(){return actualCoverage;};}return actualCoverage;}cov_18tmdn9r60();import{a as B,b as $}from"./chunk-VCZGUBMY.js";function m(e){cov_18tmdn9r60().f[0]++;cov_18tmdn9r60().s[0]++;return typeof e=="function";}function je(e){cov_18tmdn9r60().f[1]++;let n=(cov_18tmdn9r60().s[1]++,e(r=>{cov_18tmdn9r60().f[2]++;cov_18tmdn9r60().s[2]++;Error.call(r),r.stack=new Error().stack;}));cov_18tmdn9r60().s[3]++;return n.prototype=Object.create(Error.prototype),n.prototype.constructor=n,n;}var nr=(cov_18tmdn9r60().s[4]++,je(e=>{cov_18tmdn9r60().f[3]++;cov_18tmdn9r60().s[5]++;return function(n){cov_18tmdn9r60().f[4]++;cov_18tmdn9r60().s[6]++;e(this),this.message=n?(cov_18tmdn9r60().b[0][0]++,`${n.length} errors occurred during unsubscription: +${n.map((r,o)=>{cov_18tmdn9r60().f[5]++;cov_18tmdn9r60().s[7]++;return`${o+1}) ${r.toString()}`;}).join(` + `)}`):(cov_18tmdn9r60().b[0][1]++,""),this.name="UnsubscriptionError",this.errors=n;};}));function nt(e,t){cov_18tmdn9r60().f[6]++;cov_18tmdn9r60().s[8]++;if(e){cov_18tmdn9r60().b[1][0]++;let n=(cov_18tmdn9r60().s[9]++,e.indexOf(t));cov_18tmdn9r60().s[10]++;(cov_18tmdn9r60().b[2][0]++,0<=n)&&(cov_18tmdn9r60().b[2][1]++,e.splice(n,1));}else{cov_18tmdn9r60().b[1][1]++;}}cov_18tmdn9r60().s[11]++;var U=class e{constructor(t){cov_18tmdn9r60().f[7]++;cov_18tmdn9r60().s[12]++;this.initialTeardown=t,this.closed=!1,this._parentage=null,this._finalizers=null;}unsubscribe(){cov_18tmdn9r60().f[8]++;let t;cov_18tmdn9r60().s[13]++;if(!this.closed){cov_18tmdn9r60().b[3][0]++;cov_18tmdn9r60().s[14]++;this.closed=!0;let{_parentage:n}=(cov_18tmdn9r60().s[15]++,this);cov_18tmdn9r60().s[16]++;if(n){cov_18tmdn9r60().b[4][0]++;cov_18tmdn9r60().s[17]++;if(this._parentage=null,Array.isArray(n)){cov_18tmdn9r60().b[5][0]++;cov_18tmdn9r60().s[18]++;for(let i of n){cov_18tmdn9r60().s[19]++;i.remove(this);}}else{cov_18tmdn9r60().b[5][1]++;cov_18tmdn9r60().s[20]++;n.remove(this);}}else{cov_18tmdn9r60().b[4][1]++;}let{initialTeardown:r}=(cov_18tmdn9r60().s[21]++,this);cov_18tmdn9r60().s[22]++;if(m(r)){cov_18tmdn9r60().b[6][0]++;cov_18tmdn9r60().s[23]++;try{cov_18tmdn9r60().s[24]++;r();}catch(i){cov_18tmdn9r60().s[25]++;t=i instanceof nr?(cov_18tmdn9r60().b[7][0]++,i.errors):(cov_18tmdn9r60().b[7][1]++,[i]);}}else{cov_18tmdn9r60().b[6][1]++;}let{_finalizers:o}=(cov_18tmdn9r60().s[26]++,this);cov_18tmdn9r60().s[27]++;if(o){cov_18tmdn9r60().b[8][0]++;cov_18tmdn9r60().s[28]++;this._finalizers=null;cov_18tmdn9r60().s[29]++;for(let i of o){cov_18tmdn9r60().s[30]++;try{cov_18tmdn9r60().s[31]++;Ka(i);}catch(s){cov_18tmdn9r60().s[32]++;t=(cov_18tmdn9r60().b[9][0]++,t)??(cov_18tmdn9r60().b[9][1]++,[]),s instanceof nr?(cov_18tmdn9r60().b[10][0]++,t=[...t,...s.errors]):(cov_18tmdn9r60().b[10][1]++,t.push(s));}}}else{cov_18tmdn9r60().b[8][1]++;}cov_18tmdn9r60().s[33]++;if(t){cov_18tmdn9r60().b[11][0]++;cov_18tmdn9r60().s[34]++;throw new nr(t);}else{cov_18tmdn9r60().b[11][1]++;}}else{cov_18tmdn9r60().b[3][1]++;}}add(t){cov_18tmdn9r60().f[9]++;var n;cov_18tmdn9r60().s[35]++;if((cov_18tmdn9r60().b[13][0]++,t)&&(cov_18tmdn9r60().b[13][1]++,t!==this)){cov_18tmdn9r60().b[12][0]++;cov_18tmdn9r60().s[36]++;if(this.closed){cov_18tmdn9r60().b[14][0]++;cov_18tmdn9r60().s[37]++;Ka(t);}else{cov_18tmdn9r60().b[14][1]++;cov_18tmdn9r60().s[38]++;if(t instanceof e){cov_18tmdn9r60().b[15][0]++;cov_18tmdn9r60().s[39]++;if((cov_18tmdn9r60().b[17][0]++,t.closed)||(cov_18tmdn9r60().b[17][1]++,t._hasParent(this))){cov_18tmdn9r60().b[16][0]++;cov_18tmdn9r60().s[40]++;return;}else{cov_18tmdn9r60().b[16][1]++;}cov_18tmdn9r60().s[41]++;t._addParent(this);}else{cov_18tmdn9r60().b[15][1]++;}cov_18tmdn9r60().s[42]++;(this._finalizers=(cov_18tmdn9r60().b[19][0]++,(n=this._finalizers)!==null)&&(cov_18tmdn9r60().b[19][1]++,n!==void 0)?(cov_18tmdn9r60().b[18][0]++,n):(cov_18tmdn9r60().b[18][1]++,[])).push(t);}}else{cov_18tmdn9r60().b[12][1]++;}}_hasParent(t){cov_18tmdn9r60().f[10]++;let{_parentage:n}=(cov_18tmdn9r60().s[43]++,this);cov_18tmdn9r60().s[44]++;return(cov_18tmdn9r60().b[20][0]++,n===t)||(cov_18tmdn9r60().b[20][1]++,Array.isArray(n))&&(cov_18tmdn9r60().b[20][2]++,n.includes(t));}_addParent(t){cov_18tmdn9r60().f[11]++;let{_parentage:n}=(cov_18tmdn9r60().s[45]++,this);cov_18tmdn9r60().s[46]++;this._parentage=Array.isArray(n)?(cov_18tmdn9r60().b[21][0]++,n.push(t),n):(cov_18tmdn9r60().b[21][1]++,n?(cov_18tmdn9r60().b[22][0]++,[n,t]):(cov_18tmdn9r60().b[22][1]++,t));}_removeParent(t){cov_18tmdn9r60().f[12]++;let{_parentage:n}=(cov_18tmdn9r60().s[47]++,this);cov_18tmdn9r60().s[48]++;n===t?(cov_18tmdn9r60().b[23][0]++,this._parentage=null):(cov_18tmdn9r60().b[23][1]++,(cov_18tmdn9r60().b[24][0]++,Array.isArray(n))&&(cov_18tmdn9r60().b[24][1]++,nt(n,t)));}remove(t){cov_18tmdn9r60().f[13]++;let{_finalizers:n}=(cov_18tmdn9r60().s[49]++,this);cov_18tmdn9r60().s[50]++;(cov_18tmdn9r60().b[25][0]++,n)&&(cov_18tmdn9r60().b[25][1]++,nt(n,t)),(cov_18tmdn9r60().b[26][0]++,t instanceof e)&&(cov_18tmdn9r60().b[26][1]++,t._removeParent(this));}};cov_18tmdn9r60().s[51]++;U.EMPTY=(()=>{cov_18tmdn9r60().f[14]++;let e=(cov_18tmdn9r60().s[52]++,new U());cov_18tmdn9r60().s[53]++;return e.closed=!0,e;})();var oi=(cov_18tmdn9r60().s[54]++,U.EMPTY);function rr(e){cov_18tmdn9r60().f[15]++;cov_18tmdn9r60().s[55]++;return(cov_18tmdn9r60().b[27][0]++,e instanceof U)||(cov_18tmdn9r60().b[27][1]++,e)&&(cov_18tmdn9r60().b[27][2]++,"closed"in e)&&(cov_18tmdn9r60().b[27][3]++,m(e.remove))&&(cov_18tmdn9r60().b[27][4]++,m(e.add))&&(cov_18tmdn9r60().b[27][5]++,m(e.unsubscribe));}function Ka(e){cov_18tmdn9r60().f[16]++;cov_18tmdn9r60().s[56]++;m(e)?(cov_18tmdn9r60().b[28][0]++,e()):(cov_18tmdn9r60().b[28][1]++,e.unsubscribe());}var ce=(cov_18tmdn9r60().s[57]++,{onUnhandledError:null,onStoppedNotification:null,Promise:void 0,useDeprecatedSynchronousErrorHandling:!1,useDeprecatedNextContext:!1});var Rt=(cov_18tmdn9r60().s[58]++,{setTimeout(e,t,...n){cov_18tmdn9r60().f[17]++;let{delegate:r}=(cov_18tmdn9r60().s[59]++,Rt);cov_18tmdn9r60().s[60]++;return r?.setTimeout?(cov_18tmdn9r60().b[29][0]++,r.setTimeout(e,t,...n)):(cov_18tmdn9r60().b[29][1]++,setTimeout(e,t,...n));},clearTimeout(e){cov_18tmdn9r60().f[18]++;let{delegate:t}=(cov_18tmdn9r60().s[61]++,Rt);cov_18tmdn9r60().s[62]++;return((cov_18tmdn9r60().b[30][0]++,t?.clearTimeout)||(cov_18tmdn9r60().b[30][1]++,clearTimeout))(e);},delegate:void 0});function or(e){cov_18tmdn9r60().f[19]++;cov_18tmdn9r60().s[63]++;Rt.setTimeout(()=>{cov_18tmdn9r60().f[20]++;let{onUnhandledError:t}=(cov_18tmdn9r60().s[64]++,ce);cov_18tmdn9r60().s[65]++;if(t){cov_18tmdn9r60().b[31][0]++;cov_18tmdn9r60().s[66]++;t(e);}else{cov_18tmdn9r60().b[31][1]++;cov_18tmdn9r60().s[67]++;throw e;}});}function an(){cov_18tmdn9r60().f[21]++;}var Ja=(cov_18tmdn9r60().s[68]++,ii("C",void 0,void 0));function Xa(e){cov_18tmdn9r60().f[22]++;cov_18tmdn9r60().s[69]++;return ii("E",void 0,e);}function ec(e){cov_18tmdn9r60().f[23]++;cov_18tmdn9r60().s[70]++;return ii("N",e,void 0);}function ii(e,t,n){cov_18tmdn9r60().f[24]++;cov_18tmdn9r60().s[71]++;return{kind:e,value:t,error:n};}var rt=(cov_18tmdn9r60().s[72]++,null);function kt(e){cov_18tmdn9r60().f[25]++;cov_18tmdn9r60().s[73]++;if(ce.useDeprecatedSynchronousErrorHandling){cov_18tmdn9r60().b[32][0]++;let t=(cov_18tmdn9r60().s[74]++,!rt);cov_18tmdn9r60().s[75]++;if((cov_18tmdn9r60().b[34][0]++,t)&&(cov_18tmdn9r60().b[34][1]++,rt={errorThrown:!1,error:null}),e(),t){cov_18tmdn9r60().b[33][0]++;let{errorThrown:n,error:r}=(cov_18tmdn9r60().s[76]++,rt);cov_18tmdn9r60().s[77]++;if(rt=null,n){cov_18tmdn9r60().b[35][0]++;cov_18tmdn9r60().s[78]++;throw r;}else{cov_18tmdn9r60().b[35][1]++;}}else{cov_18tmdn9r60().b[33][1]++;}}else{cov_18tmdn9r60().b[32][1]++;cov_18tmdn9r60().s[79]++;e();}}function tc(e){cov_18tmdn9r60().f[26]++;cov_18tmdn9r60().s[80]++;(cov_18tmdn9r60().b[36][0]++,ce.useDeprecatedSynchronousErrorHandling)&&(cov_18tmdn9r60().b[36][1]++,rt)&&(cov_18tmdn9r60().b[36][2]++,rt.errorThrown=!0,rt.error=e);}cov_18tmdn9r60().s[81]++;var ot=class extends U{constructor(t){cov_18tmdn9r60().f[27]++;cov_18tmdn9r60().s[82]++;super(),this.isStopped=!1,t?(cov_18tmdn9r60().b[37][0]++,this.destination=t,(cov_18tmdn9r60().b[38][0]++,rr(t))&&(cov_18tmdn9r60().b[38][1]++,t.add(this))):(cov_18tmdn9r60().b[37][1]++,this.destination=tp);}static create(t,n,r){cov_18tmdn9r60().f[28]++;cov_18tmdn9r60().s[83]++;return new _e(t,n,r);}next(t){cov_18tmdn9r60().f[29]++;cov_18tmdn9r60().s[84]++;this.isStopped?(cov_18tmdn9r60().b[39][0]++,ai(ec(t),this)):(cov_18tmdn9r60().b[39][1]++,this._next(t));}error(t){cov_18tmdn9r60().f[30]++;cov_18tmdn9r60().s[85]++;this.isStopped?(cov_18tmdn9r60().b[40][0]++,ai(Xa(t),this)):(cov_18tmdn9r60().b[40][1]++,this.isStopped=!0,this._error(t));}complete(){cov_18tmdn9r60().f[31]++;cov_18tmdn9r60().s[86]++;this.isStopped?(cov_18tmdn9r60().b[41][0]++,ai(Ja,this)):(cov_18tmdn9r60().b[41][1]++,this.isStopped=!0,this._complete());}unsubscribe(){cov_18tmdn9r60().f[32]++;cov_18tmdn9r60().s[87]++;(cov_18tmdn9r60().b[42][0]++,this.closed)||(cov_18tmdn9r60().b[42][1]++,this.isStopped=!0,super.unsubscribe(),this.destination=null);}_next(t){cov_18tmdn9r60().f[33]++;cov_18tmdn9r60().s[88]++;this.destination.next(t);}_error(t){cov_18tmdn9r60().f[34]++;cov_18tmdn9r60().s[89]++;try{cov_18tmdn9r60().s[90]++;this.destination.error(t);}finally{cov_18tmdn9r60().s[91]++;this.unsubscribe();}}_complete(){cov_18tmdn9r60().f[35]++;cov_18tmdn9r60().s[92]++;try{cov_18tmdn9r60().s[93]++;this.destination.complete();}finally{cov_18tmdn9r60().s[94]++;this.unsubscribe();}}},Xf=(cov_18tmdn9r60().s[95]++,Function.prototype.bind);function si(e,t){cov_18tmdn9r60().f[36]++;cov_18tmdn9r60().s[96]++;return Xf.call(e,t);}cov_18tmdn9r60().s[97]++;cov_18tmdn9r60().s[115]++;var ci=class{constructor(t){cov_18tmdn9r60().f[37]++;cov_18tmdn9r60().s[98]++;this.partialObserver=t;}next(t){cov_18tmdn9r60().f[38]++;let{partialObserver:n}=(cov_18tmdn9r60().s[99]++,this);cov_18tmdn9r60().s[100]++;if(n.next){cov_18tmdn9r60().b[43][0]++;cov_18tmdn9r60().s[101]++;try{cov_18tmdn9r60().s[102]++;n.next(t);}catch(r){cov_18tmdn9r60().s[103]++;ir(r);}}else{cov_18tmdn9r60().b[43][1]++;}}error(t){cov_18tmdn9r60().f[39]++;let{partialObserver:n}=(cov_18tmdn9r60().s[104]++,this);cov_18tmdn9r60().s[105]++;if(n.error){cov_18tmdn9r60().b[44][0]++;cov_18tmdn9r60().s[106]++;try{cov_18tmdn9r60().s[107]++;n.error(t);}catch(r){cov_18tmdn9r60().s[108]++;ir(r);}}else{cov_18tmdn9r60().b[44][1]++;cov_18tmdn9r60().s[109]++;ir(t);}}complete(){cov_18tmdn9r60().f[40]++;let{partialObserver:t}=(cov_18tmdn9r60().s[110]++,this);cov_18tmdn9r60().s[111]++;if(t.complete){cov_18tmdn9r60().b[45][0]++;cov_18tmdn9r60().s[112]++;try{cov_18tmdn9r60().s[113]++;t.complete();}catch(n){cov_18tmdn9r60().s[114]++;ir(n);}}else{cov_18tmdn9r60().b[45][1]++;}}},_e=class extends ot{constructor(t,n,r){cov_18tmdn9r60().f[41]++;cov_18tmdn9r60().s[116]++;super();let o;cov_18tmdn9r60().s[117]++;if((cov_18tmdn9r60().b[47][0]++,m(t))||(cov_18tmdn9r60().b[47][1]++,!t)){cov_18tmdn9r60().b[46][0]++;cov_18tmdn9r60().s[118]++;o={next:(cov_18tmdn9r60().b[48][0]++,t)??(cov_18tmdn9r60().b[48][1]++,void 0),error:(cov_18tmdn9r60().b[49][0]++,n)??(cov_18tmdn9r60().b[49][1]++,void 0),complete:(cov_18tmdn9r60().b[50][0]++,r)??(cov_18tmdn9r60().b[50][1]++,void 0)};}else{cov_18tmdn9r60().b[46][1]++;let i;cov_18tmdn9r60().s[119]++;(cov_18tmdn9r60().b[52][0]++,this)&&(cov_18tmdn9r60().b[52][1]++,ce.useDeprecatedNextContext)?(cov_18tmdn9r60().b[51][0]++,i=Object.create(t),i.unsubscribe=()=>{cov_18tmdn9r60().f[42]++;cov_18tmdn9r60().s[120]++;return this.unsubscribe();},o={next:(cov_18tmdn9r60().b[53][0]++,t.next)&&(cov_18tmdn9r60().b[53][1]++,si(t.next,i)),error:(cov_18tmdn9r60().b[54][0]++,t.error)&&(cov_18tmdn9r60().b[54][1]++,si(t.error,i)),complete:(cov_18tmdn9r60().b[55][0]++,t.complete)&&(cov_18tmdn9r60().b[55][1]++,si(t.complete,i))}):(cov_18tmdn9r60().b[51][1]++,o=t);}cov_18tmdn9r60().s[121]++;this.destination=new ci(o);}};function ir(e){cov_18tmdn9r60().f[43]++;cov_18tmdn9r60().s[122]++;ce.useDeprecatedSynchronousErrorHandling?(cov_18tmdn9r60().b[56][0]++,tc(e)):(cov_18tmdn9r60().b[56][1]++,or(e));}function ep(e){cov_18tmdn9r60().f[44]++;cov_18tmdn9r60().s[123]++;throw e;}function ai(e,t){cov_18tmdn9r60().f[45]++;let{onStoppedNotification:n}=(cov_18tmdn9r60().s[124]++,ce);cov_18tmdn9r60().s[125]++;(cov_18tmdn9r60().b[57][0]++,n)&&(cov_18tmdn9r60().b[57][1]++,Rt.setTimeout(()=>{cov_18tmdn9r60().f[46]++;cov_18tmdn9r60().s[126]++;return n(e,t);}));}var tp=(cov_18tmdn9r60().s[127]++,{closed:!0,next:an,error:ep,complete:an});var Ot=(cov_18tmdn9r60().s[128]++,(cov_18tmdn9r60().b[58][0]++,typeof Symbol=="function")&&(cov_18tmdn9r60().b[58][1]++,Symbol.observable)||(cov_18tmdn9r60().b[58][2]++,"@@observable"));function ee(e){cov_18tmdn9r60().f[47]++;cov_18tmdn9r60().s[129]++;return e;}function np(...e){cov_18tmdn9r60().f[48]++;cov_18tmdn9r60().s[130]++;return li(e);}function li(e){cov_18tmdn9r60().f[49]++;cov_18tmdn9r60().s[131]++;return e.length===0?(cov_18tmdn9r60().b[59][0]++,ee):(cov_18tmdn9r60().b[59][1]++,e.length===1?(cov_18tmdn9r60().b[60][0]++,e[0]):(cov_18tmdn9r60().b[60][1]++,function(n){cov_18tmdn9r60().f[50]++;cov_18tmdn9r60().s[132]++;return e.reduce((r,o)=>{cov_18tmdn9r60().f[51]++;cov_18tmdn9r60().s[133]++;return o(r);},n);}));}var b=(cov_18tmdn9r60().s[134]++,(()=>{cov_18tmdn9r60().f[52]++;class e{constructor(n){cov_18tmdn9r60().f[53]++;cov_18tmdn9r60().s[135]++;(cov_18tmdn9r60().b[61][0]++,n)&&(cov_18tmdn9r60().b[61][1]++,this._subscribe=n);}lift(n){cov_18tmdn9r60().f[54]++;let r=(cov_18tmdn9r60().s[136]++,new e());cov_18tmdn9r60().s[137]++;return r.source=this,r.operator=n,r;}subscribe(n,r,o){cov_18tmdn9r60().f[55]++;let i=(cov_18tmdn9r60().s[138]++,op(n)?(cov_18tmdn9r60().b[62][0]++,n):(cov_18tmdn9r60().b[62][1]++,new _e(n,r,o)));cov_18tmdn9r60().s[139]++;return kt(()=>{cov_18tmdn9r60().f[56]++;let{operator:s,source:a}=(cov_18tmdn9r60().s[140]++,this);cov_18tmdn9r60().s[141]++;i.add(s?(cov_18tmdn9r60().b[63][0]++,s.call(i,a)):(cov_18tmdn9r60().b[63][1]++,a?(cov_18tmdn9r60().b[64][0]++,this._subscribe(i)):(cov_18tmdn9r60().b[64][1]++,this._trySubscribe(i))));}),i;}_trySubscribe(n){cov_18tmdn9r60().f[57]++;cov_18tmdn9r60().s[142]++;try{cov_18tmdn9r60().s[143]++;return this._subscribe(n);}catch(r){cov_18tmdn9r60().s[144]++;n.error(r);}}forEach(n,r){cov_18tmdn9r60().f[58]++;cov_18tmdn9r60().s[145]++;return r=nc(r),new r((o,i)=>{cov_18tmdn9r60().f[59]++;let s=(cov_18tmdn9r60().s[146]++,new _e({next:a=>{cov_18tmdn9r60().f[60]++;cov_18tmdn9r60().s[147]++;try{cov_18tmdn9r60().s[148]++;n(a);}catch(c){cov_18tmdn9r60().s[149]++;i(c),s.unsubscribe();}},error:i,complete:o}));cov_18tmdn9r60().s[150]++;this.subscribe(s);});}_subscribe(n){cov_18tmdn9r60().f[61]++;var r;cov_18tmdn9r60().s[151]++;return(cov_18tmdn9r60().b[66][0]++,(r=this.source)===null)||(cov_18tmdn9r60().b[66][1]++,r===void 0)?(cov_18tmdn9r60().b[65][0]++,void 0):(cov_18tmdn9r60().b[65][1]++,r.subscribe(n));}[Ot](){cov_18tmdn9r60().f[62]++;cov_18tmdn9r60().s[152]++;return this;}pipe(...n){cov_18tmdn9r60().f[63]++;cov_18tmdn9r60().s[153]++;return li(n)(this);}toPromise(n){cov_18tmdn9r60().f[64]++;cov_18tmdn9r60().s[154]++;return n=nc(n),new n((r,o)=>{cov_18tmdn9r60().f[65]++;let i;cov_18tmdn9r60().s[155]++;this.subscribe(s=>{cov_18tmdn9r60().f[66]++;cov_18tmdn9r60().s[156]++;return i=s;},s=>{cov_18tmdn9r60().f[67]++;cov_18tmdn9r60().s[157]++;return o(s);},()=>{cov_18tmdn9r60().f[68]++;cov_18tmdn9r60().s[158]++;return r(i);});});}}cov_18tmdn9r60().s[159]++;return e.create=t=>{cov_18tmdn9r60().f[69]++;cov_18tmdn9r60().s[160]++;return new e(t);},e;})());function nc(e){cov_18tmdn9r60().f[70]++;var t;cov_18tmdn9r60().s[161]++;return(cov_18tmdn9r60().b[68][0]++,(t=(cov_18tmdn9r60().b[69][0]++,e)??(cov_18tmdn9r60().b[69][1]++,ce.Promise))!==null)&&(cov_18tmdn9r60().b[68][1]++,t!==void 0)?(cov_18tmdn9r60().b[67][0]++,t):(cov_18tmdn9r60().b[67][1]++,Promise);}function rp(e){cov_18tmdn9r60().f[71]++;cov_18tmdn9r60().s[162]++;return(cov_18tmdn9r60().b[70][0]++,e)&&(cov_18tmdn9r60().b[70][1]++,m(e.next))&&(cov_18tmdn9r60().b[70][2]++,m(e.error))&&(cov_18tmdn9r60().b[70][3]++,m(e.complete));}function op(e){cov_18tmdn9r60().f[72]++;cov_18tmdn9r60().s[163]++;return(cov_18tmdn9r60().b[71][0]++,e)&&(cov_18tmdn9r60().b[71][1]++,e instanceof ot)||(cov_18tmdn9r60().b[71][2]++,rp(e))&&(cov_18tmdn9r60().b[71][3]++,rr(e));}var rc=(cov_18tmdn9r60().s[164]++,je(e=>{cov_18tmdn9r60().f[73]++;cov_18tmdn9r60().s[165]++;return function(){cov_18tmdn9r60().f[74]++;cov_18tmdn9r60().s[166]++;e(this),this.name="ObjectUnsubscribedError",this.message="object unsubscribed";};}));cov_18tmdn9r60().s[203]++;var te=(cov_18tmdn9r60().s[167]++,(()=>{cov_18tmdn9r60().f[75]++;class e extends b{constructor(){cov_18tmdn9r60().f[76]++;cov_18tmdn9r60().s[168]++;super(),this.closed=!1,this.currentObservers=null,this.observers=[],this.isStopped=!1,this.hasError=!1,this.thrownError=null;}lift(n){cov_18tmdn9r60().f[77]++;let r=(cov_18tmdn9r60().s[169]++,new sr(this,this));cov_18tmdn9r60().s[170]++;return r.operator=n,r;}_throwIfClosed(){cov_18tmdn9r60().f[78]++;cov_18tmdn9r60().s[171]++;if(this.closed){cov_18tmdn9r60().b[72][0]++;cov_18tmdn9r60().s[172]++;throw new rc();}else{cov_18tmdn9r60().b[72][1]++;}}next(n){cov_18tmdn9r60().f[79]++;cov_18tmdn9r60().s[173]++;kt(()=>{cov_18tmdn9r60().f[80]++;cov_18tmdn9r60().s[174]++;if(this._throwIfClosed(),!this.isStopped){cov_18tmdn9r60().b[73][0]++;cov_18tmdn9r60().s[175]++;(cov_18tmdn9r60().b[74][0]++,this.currentObservers)||(cov_18tmdn9r60().b[74][1]++,this.currentObservers=Array.from(this.observers));cov_18tmdn9r60().s[176]++;for(let r of this.currentObservers){cov_18tmdn9r60().s[177]++;r.next(n);}}else{cov_18tmdn9r60().b[73][1]++;}});}error(n){cov_18tmdn9r60().f[81]++;cov_18tmdn9r60().s[178]++;kt(()=>{cov_18tmdn9r60().f[82]++;cov_18tmdn9r60().s[179]++;if(this._throwIfClosed(),!this.isStopped){cov_18tmdn9r60().b[75][0]++;cov_18tmdn9r60().s[180]++;this.hasError=this.isStopped=!0,this.thrownError=n;let{observers:r}=(cov_18tmdn9r60().s[181]++,this);cov_18tmdn9r60().s[182]++;for(;r.length;){cov_18tmdn9r60().s[183]++;r.shift().error(n);}}else{cov_18tmdn9r60().b[75][1]++;}});}complete(){cov_18tmdn9r60().f[83]++;cov_18tmdn9r60().s[184]++;kt(()=>{cov_18tmdn9r60().f[84]++;cov_18tmdn9r60().s[185]++;if(this._throwIfClosed(),!this.isStopped){cov_18tmdn9r60().b[76][0]++;cov_18tmdn9r60().s[186]++;this.isStopped=!0;let{observers:n}=(cov_18tmdn9r60().s[187]++,this);cov_18tmdn9r60().s[188]++;for(;n.length;){cov_18tmdn9r60().s[189]++;n.shift().complete();}}else{cov_18tmdn9r60().b[76][1]++;}});}unsubscribe(){cov_18tmdn9r60().f[85]++;cov_18tmdn9r60().s[190]++;this.isStopped=this.closed=!0,this.observers=this.currentObservers=null;}get observed(){cov_18tmdn9r60().f[86]++;var n;cov_18tmdn9r60().s[191]++;return((cov_18tmdn9r60().b[78][0]++,(n=this.observers)===null)||(cov_18tmdn9r60().b[78][1]++,n===void 0)?(cov_18tmdn9r60().b[77][0]++,void 0):(cov_18tmdn9r60().b[77][1]++,n.length))>0;}_trySubscribe(n){cov_18tmdn9r60().f[87]++;cov_18tmdn9r60().s[192]++;return this._throwIfClosed(),super._trySubscribe(n);}_subscribe(n){cov_18tmdn9r60().f[88]++;cov_18tmdn9r60().s[193]++;return this._throwIfClosed(),this._checkFinalizedStatuses(n),this._innerSubscribe(n);}_innerSubscribe(n){cov_18tmdn9r60().f[89]++;let{hasError:r,isStopped:o,observers:i}=(cov_18tmdn9r60().s[194]++,this);cov_18tmdn9r60().s[195]++;return(cov_18tmdn9r60().b[80][0]++,r)||(cov_18tmdn9r60().b[80][1]++,o)?(cov_18tmdn9r60().b[79][0]++,oi):(cov_18tmdn9r60().b[79][1]++,this.currentObservers=null,i.push(n),new U(()=>{cov_18tmdn9r60().f[90]++;cov_18tmdn9r60().s[196]++;this.currentObservers=null,nt(i,n);}));}_checkFinalizedStatuses(n){cov_18tmdn9r60().f[91]++;let{hasError:r,thrownError:o,isStopped:i}=(cov_18tmdn9r60().s[197]++,this);cov_18tmdn9r60().s[198]++;r?(cov_18tmdn9r60().b[81][0]++,n.error(o)):(cov_18tmdn9r60().b[81][1]++,(cov_18tmdn9r60().b[82][0]++,i)&&(cov_18tmdn9r60().b[82][1]++,n.complete()));}asObservable(){cov_18tmdn9r60().f[92]++;let n=(cov_18tmdn9r60().s[199]++,new b());cov_18tmdn9r60().s[200]++;return n.source=this,n;}}cov_18tmdn9r60().s[201]++;return e.create=(t,n)=>{cov_18tmdn9r60().f[93]++;cov_18tmdn9r60().s[202]++;return new sr(t,n);},e;})()),sr=class extends te{constructor(t,n){cov_18tmdn9r60().f[94]++;cov_18tmdn9r60().s[204]++;super(),this.destination=t,this.source=n;}next(t){cov_18tmdn9r60().f[95]++;var n,r;cov_18tmdn9r60().s[205]++;(cov_18tmdn9r60().b[83][0]++,(r=(cov_18tmdn9r60().b[85][0]++,(n=this.destination)===null)||(cov_18tmdn9r60().b[85][1]++,n===void 0)?(cov_18tmdn9r60().b[84][0]++,void 0):(cov_18tmdn9r60().b[84][1]++,n.next))===null)||(cov_18tmdn9r60().b[83][1]++,r===void 0)||(cov_18tmdn9r60().b[83][2]++,r.call(n,t));}error(t){cov_18tmdn9r60().f[96]++;var n,r;cov_18tmdn9r60().s[206]++;(cov_18tmdn9r60().b[86][0]++,(r=(cov_18tmdn9r60().b[88][0]++,(n=this.destination)===null)||(cov_18tmdn9r60().b[88][1]++,n===void 0)?(cov_18tmdn9r60().b[87][0]++,void 0):(cov_18tmdn9r60().b[87][1]++,n.error))===null)||(cov_18tmdn9r60().b[86][1]++,r===void 0)||(cov_18tmdn9r60().b[86][2]++,r.call(n,t));}complete(){cov_18tmdn9r60().f[97]++;var t,n;cov_18tmdn9r60().s[207]++;(cov_18tmdn9r60().b[89][0]++,(n=(cov_18tmdn9r60().b[91][0]++,(t=this.destination)===null)||(cov_18tmdn9r60().b[91][1]++,t===void 0)?(cov_18tmdn9r60().b[90][0]++,void 0):(cov_18tmdn9r60().b[90][1]++,t.complete))===null)||(cov_18tmdn9r60().b[89][1]++,n===void 0)||(cov_18tmdn9r60().b[89][2]++,n.call(t));}_subscribe(t){cov_18tmdn9r60().f[98]++;var n,r;cov_18tmdn9r60().s[208]++;return(cov_18tmdn9r60().b[93][0]++,(r=(cov_18tmdn9r60().b[95][0]++,(n=this.source)===null)||(cov_18tmdn9r60().b[95][1]++,n===void 0)?(cov_18tmdn9r60().b[94][0]++,void 0):(cov_18tmdn9r60().b[94][1]++,n.subscribe(t)))!==null)&&(cov_18tmdn9r60().b[93][1]++,r!==void 0)?(cov_18tmdn9r60().b[92][0]++,r):(cov_18tmdn9r60().b[92][1]++,oi);}};cov_18tmdn9r60().s[209]++;var cn=class extends te{constructor(t){cov_18tmdn9r60().f[99]++;cov_18tmdn9r60().s[210]++;super(),this._value=t;}get value(){cov_18tmdn9r60().f[100]++;cov_18tmdn9r60().s[211]++;return this.getValue();}_subscribe(t){cov_18tmdn9r60().f[101]++;let n=(cov_18tmdn9r60().s[212]++,super._subscribe(t));cov_18tmdn9r60().s[213]++;return(cov_18tmdn9r60().b[96][0]++,!n.closed)&&(cov_18tmdn9r60().b[96][1]++,t.next(this._value)),n;}getValue(){cov_18tmdn9r60().f[102]++;let{hasError:t,thrownError:n,_value:r}=(cov_18tmdn9r60().s[214]++,this);cov_18tmdn9r60().s[215]++;if(t){cov_18tmdn9r60().b[97][0]++;cov_18tmdn9r60().s[216]++;throw n;}else{cov_18tmdn9r60().b[97][1]++;}cov_18tmdn9r60().s[217]++;return this._throwIfClosed(),r;}next(t){cov_18tmdn9r60().f[103]++;cov_18tmdn9r60().s[218]++;super.next(this._value=t);}};function ar(e){cov_18tmdn9r60().f[104]++;cov_18tmdn9r60().s[219]++;return(cov_18tmdn9r60().b[98][0]++,e)&&(cov_18tmdn9r60().b[98][1]++,m(e.schedule));}function oc(e){cov_18tmdn9r60().f[105]++;cov_18tmdn9r60().s[220]++;return e[e.length-1];}function cr(e){cov_18tmdn9r60().f[106]++;cov_18tmdn9r60().s[221]++;return m(oc(e))?(cov_18tmdn9r60().b[99][0]++,e.pop()):(cov_18tmdn9r60().b[99][1]++,void 0);}function Ve(e){cov_18tmdn9r60().f[107]++;cov_18tmdn9r60().s[222]++;return ar(oc(e))?(cov_18tmdn9r60().b[100][0]++,e.pop()):(cov_18tmdn9r60().b[100][1]++,void 0);}function sc(e,t,n,r){cov_18tmdn9r60().f[108]++;function o(i){cov_18tmdn9r60().f[109]++;cov_18tmdn9r60().s[223]++;return i instanceof n?(cov_18tmdn9r60().b[101][0]++,i):(cov_18tmdn9r60().b[101][1]++,new n(function(s){cov_18tmdn9r60().f[110]++;cov_18tmdn9r60().s[224]++;s(i);}));}cov_18tmdn9r60().s[225]++;return new((cov_18tmdn9r60().b[102][0]++,n)||(cov_18tmdn9r60().b[102][1]++,n=Promise))(function(i,s){cov_18tmdn9r60().f[111]++;function a(u){cov_18tmdn9r60().f[112]++;cov_18tmdn9r60().s[226]++;try{cov_18tmdn9r60().s[227]++;l(r.next(u));}catch(d){cov_18tmdn9r60().s[228]++;s(d);}}function c(u){cov_18tmdn9r60().f[113]++;cov_18tmdn9r60().s[229]++;try{cov_18tmdn9r60().s[230]++;l(r.throw(u));}catch(d){cov_18tmdn9r60().s[231]++;s(d);}}function l(u){cov_18tmdn9r60().f[114]++;cov_18tmdn9r60().s[232]++;u.done?(cov_18tmdn9r60().b[103][0]++,i(u.value)):(cov_18tmdn9r60().b[103][1]++,o(u.value).then(a,c));}cov_18tmdn9r60().s[233]++;l((r=r.apply(e,(cov_18tmdn9r60().b[104][0]++,t)||(cov_18tmdn9r60().b[104][1]++,[]))).next());});}function ic(e){cov_18tmdn9r60().f[115]++;var t=(cov_18tmdn9r60().s[234]++,(cov_18tmdn9r60().b[105][0]++,typeof Symbol=="function")&&(cov_18tmdn9r60().b[105][1]++,Symbol.iterator)),n=(cov_18tmdn9r60().s[235]++,(cov_18tmdn9r60().b[106][0]++,t)&&(cov_18tmdn9r60().b[106][1]++,e[t])),r=(cov_18tmdn9r60().s[236]++,0);cov_18tmdn9r60().s[237]++;if(n){cov_18tmdn9r60().b[107][0]++;cov_18tmdn9r60().s[238]++;return n.call(e);}else{cov_18tmdn9r60().b[107][1]++;}cov_18tmdn9r60().s[239]++;if((cov_18tmdn9r60().b[109][0]++,e)&&(cov_18tmdn9r60().b[109][1]++,typeof e.length=="number")){cov_18tmdn9r60().b[108][0]++;cov_18tmdn9r60().s[240]++;return{next:function(){cov_18tmdn9r60().f[116]++;cov_18tmdn9r60().s[241]++;return(cov_18tmdn9r60().b[110][0]++,e)&&(cov_18tmdn9r60().b[110][1]++,r>=e.length)&&(cov_18tmdn9r60().b[110][2]++,e=void 0),{value:(cov_18tmdn9r60().b[111][0]++,e)&&(cov_18tmdn9r60().b[111][1]++,e[r++]),done:!e};}};}else{cov_18tmdn9r60().b[108][1]++;}cov_18tmdn9r60().s[242]++;throw new TypeError(t?(cov_18tmdn9r60().b[112][0]++,"Object is not iterable."):(cov_18tmdn9r60().b[112][1]++,"Symbol.iterator is not defined."));}function it(e){cov_18tmdn9r60().f[117]++;cov_18tmdn9r60().s[243]++;return this instanceof it?(cov_18tmdn9r60().b[113][0]++,this.v=e,this):(cov_18tmdn9r60().b[113][1]++,new it(e));}function ac(e,t,n){cov_18tmdn9r60().f[118]++;cov_18tmdn9r60().s[244]++;if(!Symbol.asyncIterator){cov_18tmdn9r60().b[114][0]++;cov_18tmdn9r60().s[245]++;throw new TypeError("Symbol.asyncIterator is not defined.");}else{cov_18tmdn9r60().b[114][1]++;}var r=(cov_18tmdn9r60().s[246]++,n.apply(e,(cov_18tmdn9r60().b[115][0]++,t)||(cov_18tmdn9r60().b[115][1]++,[]))),o,i=(cov_18tmdn9r60().s[247]++,[]);cov_18tmdn9r60().s[248]++;return o=Object.create((typeof AsyncIterator=="function"?(cov_18tmdn9r60().b[116][0]++,AsyncIterator):(cov_18tmdn9r60().b[116][1]++,Object)).prototype),a("next"),a("throw"),a("return",s),o[Symbol.asyncIterator]=function(){cov_18tmdn9r60().f[119]++;cov_18tmdn9r60().s[249]++;return this;},o;function s(f){cov_18tmdn9r60().f[120]++;cov_18tmdn9r60().s[250]++;return function(h){cov_18tmdn9r60().f[121]++;cov_18tmdn9r60().s[251]++;return Promise.resolve(h).then(f,d);};}function a(f,h){cov_18tmdn9r60().f[122]++;cov_18tmdn9r60().s[252]++;(cov_18tmdn9r60().b[117][0]++,r[f])&&(cov_18tmdn9r60().b[117][1]++,o[f]=function(D){cov_18tmdn9r60().f[123]++;cov_18tmdn9r60().s[253]++;return new Promise(function(A,R){cov_18tmdn9r60().f[124]++;cov_18tmdn9r60().s[254]++;(cov_18tmdn9r60().b[118][0]++,i.push([f,D,A,R])>1)||(cov_18tmdn9r60().b[118][1]++,c(f,D));});},(cov_18tmdn9r60().b[119][0]++,h)&&(cov_18tmdn9r60().b[119][1]++,o[f]=h(o[f])));}function c(f,h){cov_18tmdn9r60().f[125]++;cov_18tmdn9r60().s[255]++;try{cov_18tmdn9r60().s[256]++;l(r[f](h));}catch(D){cov_18tmdn9r60().s[257]++;p(i[0][3],D);}}function l(f){cov_18tmdn9r60().f[126]++;cov_18tmdn9r60().s[258]++;f.value instanceof it?(cov_18tmdn9r60().b[120][0]++,Promise.resolve(f.value.v).then(u,d)):(cov_18tmdn9r60().b[120][1]++,p(i[0][2],f));}function u(f){cov_18tmdn9r60().f[127]++;cov_18tmdn9r60().s[259]++;c("next",f);}function d(f){cov_18tmdn9r60().f[128]++;cov_18tmdn9r60().s[260]++;c("throw",f);}function p(f,h){cov_18tmdn9r60().f[129]++;cov_18tmdn9r60().s[261]++;f(h),i.shift(),(cov_18tmdn9r60().b[121][0]++,i.length)&&(cov_18tmdn9r60().b[121][1]++,c(i[0][0],i[0][1]));}}function cc(e){cov_18tmdn9r60().f[130]++;cov_18tmdn9r60().s[262]++;if(!Symbol.asyncIterator){cov_18tmdn9r60().b[122][0]++;cov_18tmdn9r60().s[263]++;throw new TypeError("Symbol.asyncIterator is not defined.");}else{cov_18tmdn9r60().b[122][1]++;}var t=(cov_18tmdn9r60().s[264]++,e[Symbol.asyncIterator]),n;cov_18tmdn9r60().s[265]++;return t?(cov_18tmdn9r60().b[123][0]++,t.call(e)):(cov_18tmdn9r60().b[123][1]++,e=typeof ic=="function"?(cov_18tmdn9r60().b[124][0]++,ic(e)):(cov_18tmdn9r60().b[124][1]++,e[Symbol.iterator]()),n={},r("next"),r("throw"),r("return"),n[Symbol.asyncIterator]=function(){cov_18tmdn9r60().f[131]++;cov_18tmdn9r60().s[266]++;return this;},n);function r(i){cov_18tmdn9r60().f[132]++;cov_18tmdn9r60().s[267]++;n[i]=(cov_18tmdn9r60().b[125][0]++,e[i])&&(cov_18tmdn9r60().b[125][1]++,function(s){cov_18tmdn9r60().f[133]++;cov_18tmdn9r60().s[268]++;return new Promise(function(a,c){cov_18tmdn9r60().f[134]++;cov_18tmdn9r60().s[269]++;s=e[i](s),o(a,c,s.done,s.value);});});}function o(i,s,a,c){cov_18tmdn9r60().f[135]++;cov_18tmdn9r60().s[270]++;Promise.resolve(c).then(function(l){cov_18tmdn9r60().f[136]++;cov_18tmdn9r60().s[271]++;i({value:l,done:a});},s);}}cov_18tmdn9r60().s[272]++;var Pt=e=>{cov_18tmdn9r60().f[137]++;cov_18tmdn9r60().s[273]++;return(cov_18tmdn9r60().b[126][0]++,e)&&(cov_18tmdn9r60().b[126][1]++,typeof e.length=="number")&&(cov_18tmdn9r60().b[126][2]++,typeof e!="function");};function lr(e){cov_18tmdn9r60().f[138]++;cov_18tmdn9r60().s[274]++;return m(e?.then);}function ur(e){cov_18tmdn9r60().f[139]++;cov_18tmdn9r60().s[275]++;return m(e[Ot]);}function dr(e){cov_18tmdn9r60().f[140]++;cov_18tmdn9r60().s[276]++;return(cov_18tmdn9r60().b[127][0]++,Symbol.asyncIterator)&&(cov_18tmdn9r60().b[127][1]++,m(e?.[Symbol.asyncIterator]));}function fr(e){cov_18tmdn9r60().f[141]++;cov_18tmdn9r60().s[277]++;return new TypeError(`You provided ${(cov_18tmdn9r60().b[129][0]++,e!==null)&&(cov_18tmdn9r60().b[129][1]++,typeof e=="object")?(cov_18tmdn9r60().b[128][0]++,"an invalid object"):(cov_18tmdn9r60().b[128][1]++,`'${e}'`)} where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.`);}function ip(){cov_18tmdn9r60().f[142]++;cov_18tmdn9r60().s[278]++;return(cov_18tmdn9r60().b[131][0]++,typeof Symbol!="function")||(cov_18tmdn9r60().b[131][1]++,!Symbol.iterator)?(cov_18tmdn9r60().b[130][0]++,"@@iterator"):(cov_18tmdn9r60().b[130][1]++,Symbol.iterator);}var pr=(cov_18tmdn9r60().s[279]++,ip());function hr(e){cov_18tmdn9r60().f[143]++;cov_18tmdn9r60().s[280]++;return m(e?.[pr]);}function gr(e){cov_18tmdn9r60().f[144]++;cov_18tmdn9r60().s[281]++;return ac(this,arguments,function*(){cov_18tmdn9r60().f[145]++;let n=(cov_18tmdn9r60().s[282]++,e.getReader());cov_18tmdn9r60().s[283]++;try{cov_18tmdn9r60().s[284]++;for(;;){let{value:r,done:o}=(cov_18tmdn9r60().s[285]++,yield it(n.read()));cov_18tmdn9r60().s[286]++;if(o){cov_18tmdn9r60().b[132][0]++;cov_18tmdn9r60().s[287]++;return yield it(void 0);}else{cov_18tmdn9r60().b[132][1]++;}cov_18tmdn9r60().s[288]++;yield yield it(r);}}finally{cov_18tmdn9r60().s[289]++;n.releaseLock();}});}function mr(e){cov_18tmdn9r60().f[146]++;cov_18tmdn9r60().s[290]++;return m(e?.getReader);}function k(e){cov_18tmdn9r60().f[147]++;cov_18tmdn9r60().s[291]++;if(e instanceof b){cov_18tmdn9r60().b[133][0]++;cov_18tmdn9r60().s[292]++;return e;}else{cov_18tmdn9r60().b[133][1]++;}cov_18tmdn9r60().s[293]++;if(e!=null){cov_18tmdn9r60().b[134][0]++;cov_18tmdn9r60().s[294]++;if(ur(e)){cov_18tmdn9r60().b[135][0]++;cov_18tmdn9r60().s[295]++;return sp(e);}else{cov_18tmdn9r60().b[135][1]++;}cov_18tmdn9r60().s[296]++;if(Pt(e)){cov_18tmdn9r60().b[136][0]++;cov_18tmdn9r60().s[297]++;return ap(e);}else{cov_18tmdn9r60().b[136][1]++;}cov_18tmdn9r60().s[298]++;if(lr(e)){cov_18tmdn9r60().b[137][0]++;cov_18tmdn9r60().s[299]++;return cp(e);}else{cov_18tmdn9r60().b[137][1]++;}cov_18tmdn9r60().s[300]++;if(dr(e)){cov_18tmdn9r60().b[138][0]++;cov_18tmdn9r60().s[301]++;return lc(e);}else{cov_18tmdn9r60().b[138][1]++;}cov_18tmdn9r60().s[302]++;if(hr(e)){cov_18tmdn9r60().b[139][0]++;cov_18tmdn9r60().s[303]++;return lp(e);}else{cov_18tmdn9r60().b[139][1]++;}cov_18tmdn9r60().s[304]++;if(mr(e)){cov_18tmdn9r60().b[140][0]++;cov_18tmdn9r60().s[305]++;return up(e);}else{cov_18tmdn9r60().b[140][1]++;}}else{cov_18tmdn9r60().b[134][1]++;}cov_18tmdn9r60().s[306]++;throw fr(e);}function sp(e){cov_18tmdn9r60().f[148]++;cov_18tmdn9r60().s[307]++;return new b(t=>{cov_18tmdn9r60().f[149]++;let n=(cov_18tmdn9r60().s[308]++,e[Ot]());cov_18tmdn9r60().s[309]++;if(m(n.subscribe)){cov_18tmdn9r60().b[141][0]++;cov_18tmdn9r60().s[310]++;return n.subscribe(t);}else{cov_18tmdn9r60().b[141][1]++;}cov_18tmdn9r60().s[311]++;throw new TypeError("Provided object does not correctly implement Symbol.observable");});}function ap(e){cov_18tmdn9r60().f[150]++;cov_18tmdn9r60().s[312]++;return new b(t=>{cov_18tmdn9r60().f[151]++;cov_18tmdn9r60().s[313]++;for(let n=(cov_18tmdn9r60().s[314]++,0);(cov_18tmdn9r60().b[142][0]++,n{cov_18tmdn9r60().f[153]++;cov_18tmdn9r60().s[318]++;e.then(n=>{cov_18tmdn9r60().f[154]++;cov_18tmdn9r60().s[319]++;(cov_18tmdn9r60().b[143][0]++,t.closed)||(cov_18tmdn9r60().b[143][1]++,t.next(n),t.complete());},n=>{cov_18tmdn9r60().f[155]++;cov_18tmdn9r60().s[320]++;return t.error(n);}).then(null,or);});}function lp(e){cov_18tmdn9r60().f[156]++;cov_18tmdn9r60().s[321]++;return new b(t=>{cov_18tmdn9r60().f[157]++;cov_18tmdn9r60().s[322]++;for(let n of e){cov_18tmdn9r60().s[323]++;if(t.next(n),t.closed){cov_18tmdn9r60().b[144][0]++;cov_18tmdn9r60().s[324]++;return;}else{cov_18tmdn9r60().b[144][1]++;}}cov_18tmdn9r60().s[325]++;t.complete();});}function lc(e){cov_18tmdn9r60().f[158]++;cov_18tmdn9r60().s[326]++;return new b(t=>{cov_18tmdn9r60().f[159]++;cov_18tmdn9r60().s[327]++;dp(e,t).catch(n=>{cov_18tmdn9r60().f[160]++;cov_18tmdn9r60().s[328]++;return t.error(n);});});}function up(e){cov_18tmdn9r60().f[161]++;cov_18tmdn9r60().s[329]++;return lc(gr(e));}function dp(e,t){cov_18tmdn9r60().f[162]++;var n,r,o,i;cov_18tmdn9r60().s[330]++;return sc(this,void 0,void 0,function*(){cov_18tmdn9r60().f[163]++;cov_18tmdn9r60().s[331]++;try{cov_18tmdn9r60().s[332]++;for(n=cc(e);r=yield n.next(),!r.done;){let s=(cov_18tmdn9r60().s[333]++,r.value);cov_18tmdn9r60().s[334]++;if(t.next(s),t.closed){cov_18tmdn9r60().b[145][0]++;cov_18tmdn9r60().s[335]++;return;}else{cov_18tmdn9r60().b[145][1]++;}}}catch(s){cov_18tmdn9r60().s[336]++;o={error:s};}finally{cov_18tmdn9r60().s[337]++;try{cov_18tmdn9r60().s[338]++;(cov_18tmdn9r60().b[146][0]++,r)&&(cov_18tmdn9r60().b[146][1]++,!r.done)&&(cov_18tmdn9r60().b[146][2]++,i=n.return)&&(cov_18tmdn9r60().b[146][3]++,yield i.call(n));}finally{cov_18tmdn9r60().s[339]++;if(o){cov_18tmdn9r60().b[147][0]++;cov_18tmdn9r60().s[340]++;throw o.error;}else{cov_18tmdn9r60().b[147][1]++;}}}cov_18tmdn9r60().s[341]++;t.complete();});}function z(e,t,n,r=(cov_18tmdn9r60().b[148][0]++,0),o=(cov_18tmdn9r60().b[149][0]++,!1)){cov_18tmdn9r60().f[164]++;let i=(cov_18tmdn9r60().s[342]++,t.schedule(function(){cov_18tmdn9r60().f[165]++;cov_18tmdn9r60().s[343]++;n(),o?(cov_18tmdn9r60().b[150][0]++,e.add(this.schedule(null,r))):(cov_18tmdn9r60().b[150][1]++,this.unsubscribe());},r));cov_18tmdn9r60().s[344]++;if(e.add(i),!o){cov_18tmdn9r60().b[151][0]++;cov_18tmdn9r60().s[345]++;return i;}else{cov_18tmdn9r60().b[151][1]++;}}function fp(e){cov_18tmdn9r60().f[166]++;cov_18tmdn9r60().s[346]++;return m(e?.lift);}function w(e){cov_18tmdn9r60().f[167]++;cov_18tmdn9r60().s[347]++;return t=>{cov_18tmdn9r60().f[168]++;cov_18tmdn9r60().s[348]++;if(fp(t)){cov_18tmdn9r60().b[152][0]++;cov_18tmdn9r60().s[349]++;return t.lift(function(n){cov_18tmdn9r60().f[169]++;cov_18tmdn9r60().s[350]++;try{cov_18tmdn9r60().s[351]++;return e(n,this);}catch(r){cov_18tmdn9r60().s[352]++;this.error(r);}});}else{cov_18tmdn9r60().b[152][1]++;}cov_18tmdn9r60().s[353]++;throw new TypeError("Unable to lift unknown Observable type");};}function _(e,t,n,r,o){cov_18tmdn9r60().f[170]++;cov_18tmdn9r60().s[354]++;return new ui(e,t,n,r,o);}cov_18tmdn9r60().s[355]++;var ui=class extends ot{constructor(t,n,r,o,i,s){cov_18tmdn9r60().f[171]++;cov_18tmdn9r60().s[356]++;super(t),this.onFinalize=i,this.shouldUnsubscribe=s,this._next=n?(cov_18tmdn9r60().b[153][0]++,function(a){cov_18tmdn9r60().f[172]++;cov_18tmdn9r60().s[357]++;try{cov_18tmdn9r60().s[358]++;n(a);}catch(c){cov_18tmdn9r60().s[359]++;t.error(c);}}):(cov_18tmdn9r60().b[153][1]++,super._next),this._error=o?(cov_18tmdn9r60().b[154][0]++,function(a){cov_18tmdn9r60().f[173]++;cov_18tmdn9r60().s[360]++;try{cov_18tmdn9r60().s[361]++;o(a);}catch(c){cov_18tmdn9r60().s[362]++;t.error(c);}finally{cov_18tmdn9r60().s[363]++;this.unsubscribe();}}):(cov_18tmdn9r60().b[154][1]++,super._error),this._complete=r?(cov_18tmdn9r60().b[155][0]++,function(){cov_18tmdn9r60().f[174]++;cov_18tmdn9r60().s[364]++;try{cov_18tmdn9r60().s[365]++;r();}catch(a){cov_18tmdn9r60().s[366]++;t.error(a);}finally{cov_18tmdn9r60().s[367]++;this.unsubscribe();}}):(cov_18tmdn9r60().b[155][1]++,super._complete);}unsubscribe(){cov_18tmdn9r60().f[175]++;var t;cov_18tmdn9r60().s[368]++;if((cov_18tmdn9r60().b[157][0]++,!this.shouldUnsubscribe)||(cov_18tmdn9r60().b[157][1]++,this.shouldUnsubscribe())){cov_18tmdn9r60().b[156][0]++;let{closed:n}=(cov_18tmdn9r60().s[369]++,this);cov_18tmdn9r60().s[370]++;super.unsubscribe(),(cov_18tmdn9r60().b[158][0]++,!n)&&((cov_18tmdn9r60().b[158][1]++,(t=this.onFinalize)===null)||(cov_18tmdn9r60().b[158][2]++,t===void 0)||(cov_18tmdn9r60().b[158][3]++,t.call(this)));}else{cov_18tmdn9r60().b[156][1]++;}}};function yr(e,t=(cov_18tmdn9r60().b[159][0]++,0)){cov_18tmdn9r60().f[176]++;cov_18tmdn9r60().s[371]++;return w((n,r)=>{cov_18tmdn9r60().f[177]++;cov_18tmdn9r60().s[372]++;n.subscribe(_(r,o=>{cov_18tmdn9r60().f[178]++;cov_18tmdn9r60().s[373]++;return z(r,e,()=>{cov_18tmdn9r60().f[179]++;cov_18tmdn9r60().s[374]++;return r.next(o);},t);},()=>{cov_18tmdn9r60().f[180]++;cov_18tmdn9r60().s[375]++;return z(r,e,()=>{cov_18tmdn9r60().f[181]++;cov_18tmdn9r60().s[376]++;return r.complete();},t);},o=>{cov_18tmdn9r60().f[182]++;cov_18tmdn9r60().s[377]++;return z(r,e,()=>{cov_18tmdn9r60().f[183]++;cov_18tmdn9r60().s[378]++;return r.error(o);},t);}));});}function vr(e,t=(cov_18tmdn9r60().b[160][0]++,0)){cov_18tmdn9r60().f[184]++;cov_18tmdn9r60().s[379]++;return w((n,r)=>{cov_18tmdn9r60().f[185]++;cov_18tmdn9r60().s[380]++;r.add(e.schedule(()=>{cov_18tmdn9r60().f[186]++;cov_18tmdn9r60().s[381]++;return n.subscribe(r);},t));});}function uc(e,t){cov_18tmdn9r60().f[187]++;cov_18tmdn9r60().s[382]++;return k(e).pipe(vr(t),yr(t));}function dc(e,t){cov_18tmdn9r60().f[188]++;cov_18tmdn9r60().s[383]++;return k(e).pipe(vr(t),yr(t));}function fc(e,t){cov_18tmdn9r60().f[189]++;cov_18tmdn9r60().s[384]++;return new b(n=>{cov_18tmdn9r60().f[190]++;let r=(cov_18tmdn9r60().s[385]++,0);cov_18tmdn9r60().s[386]++;return t.schedule(function(){cov_18tmdn9r60().f[191]++;cov_18tmdn9r60().s[387]++;r===e.length?(cov_18tmdn9r60().b[161][0]++,n.complete()):(cov_18tmdn9r60().b[161][1]++,n.next(e[r++]),(cov_18tmdn9r60().b[162][0]++,n.closed)||(cov_18tmdn9r60().b[162][1]++,this.schedule()));});});}function pc(e,t){cov_18tmdn9r60().f[192]++;cov_18tmdn9r60().s[388]++;return new b(n=>{cov_18tmdn9r60().f[193]++;let r;cov_18tmdn9r60().s[389]++;return z(n,t,()=>{cov_18tmdn9r60().f[194]++;cov_18tmdn9r60().s[390]++;r=e[pr](),z(n,t,()=>{cov_18tmdn9r60().f[195]++;let o,i;cov_18tmdn9r60().s[391]++;try{cov_18tmdn9r60().s[392]++;({value:o,done:i}=r.next());}catch(s){cov_18tmdn9r60().s[393]++;n.error(s);cov_18tmdn9r60().s[394]++;return;}cov_18tmdn9r60().s[395]++;i?(cov_18tmdn9r60().b[163][0]++,n.complete()):(cov_18tmdn9r60().b[163][1]++,n.next(o));},0,!0);}),()=>{cov_18tmdn9r60().f[196]++;cov_18tmdn9r60().s[396]++;return(cov_18tmdn9r60().b[164][0]++,m(r?.return))&&(cov_18tmdn9r60().b[164][1]++,r.return());};});}function Er(e,t){cov_18tmdn9r60().f[197]++;cov_18tmdn9r60().s[397]++;if(!e){cov_18tmdn9r60().b[165][0]++;cov_18tmdn9r60().s[398]++;throw new Error("Iterable cannot be null");}else{cov_18tmdn9r60().b[165][1]++;}cov_18tmdn9r60().s[399]++;return new b(n=>{cov_18tmdn9r60().f[198]++;cov_18tmdn9r60().s[400]++;z(n,t,()=>{cov_18tmdn9r60().f[199]++;let r=(cov_18tmdn9r60().s[401]++,e[Symbol.asyncIterator]());cov_18tmdn9r60().s[402]++;z(n,t,()=>{cov_18tmdn9r60().f[200]++;cov_18tmdn9r60().s[403]++;r.next().then(o=>{cov_18tmdn9r60().f[201]++;cov_18tmdn9r60().s[404]++;o.done?(cov_18tmdn9r60().b[166][0]++,n.complete()):(cov_18tmdn9r60().b[166][1]++,n.next(o.value));});},0,!0);});});}function hc(e,t){cov_18tmdn9r60().f[202]++;cov_18tmdn9r60().s[405]++;return Er(gr(e),t);}function gc(e,t){cov_18tmdn9r60().f[203]++;cov_18tmdn9r60().s[406]++;if(e!=null){cov_18tmdn9r60().b[167][0]++;cov_18tmdn9r60().s[407]++;if(ur(e)){cov_18tmdn9r60().b[168][0]++;cov_18tmdn9r60().s[408]++;return uc(e,t);}else{cov_18tmdn9r60().b[168][1]++;}cov_18tmdn9r60().s[409]++;if(Pt(e)){cov_18tmdn9r60().b[169][0]++;cov_18tmdn9r60().s[410]++;return fc(e,t);}else{cov_18tmdn9r60().b[169][1]++;}cov_18tmdn9r60().s[411]++;if(lr(e)){cov_18tmdn9r60().b[170][0]++;cov_18tmdn9r60().s[412]++;return dc(e,t);}else{cov_18tmdn9r60().b[170][1]++;}cov_18tmdn9r60().s[413]++;if(dr(e)){cov_18tmdn9r60().b[171][0]++;cov_18tmdn9r60().s[414]++;return Er(e,t);}else{cov_18tmdn9r60().b[171][1]++;}cov_18tmdn9r60().s[415]++;if(hr(e)){cov_18tmdn9r60().b[172][0]++;cov_18tmdn9r60().s[416]++;return pc(e,t);}else{cov_18tmdn9r60().b[172][1]++;}cov_18tmdn9r60().s[417]++;if(mr(e)){cov_18tmdn9r60().b[173][0]++;cov_18tmdn9r60().s[418]++;return hc(e,t);}else{cov_18tmdn9r60().b[173][1]++;}}else{cov_18tmdn9r60().b[167][1]++;}cov_18tmdn9r60().s[419]++;throw fr(e);}function He(e,t){cov_18tmdn9r60().f[204]++;cov_18tmdn9r60().s[420]++;return t?(cov_18tmdn9r60().b[174][0]++,gc(e,t)):(cov_18tmdn9r60().b[174][1]++,k(e));}function pp(...e){cov_18tmdn9r60().f[205]++;let t=(cov_18tmdn9r60().s[421]++,Ve(e));cov_18tmdn9r60().s[422]++;return He(e,t);}function Be(e,t){cov_18tmdn9r60().f[206]++;cov_18tmdn9r60().s[423]++;return w((n,r)=>{cov_18tmdn9r60().f[207]++;let o=(cov_18tmdn9r60().s[424]++,0);cov_18tmdn9r60().s[425]++;n.subscribe(_(r,i=>{cov_18tmdn9r60().f[208]++;cov_18tmdn9r60().s[426]++;r.next(e.call(t,i,o++));}));});}function mc(e,t,n,r,o,i,s,a){cov_18tmdn9r60().f[209]++;cov_18tmdn9r60().s[431]++;cov_18tmdn9r60().s[433]++;cov_18tmdn9r60().s[435]++;let c=(cov_18tmdn9r60().s[427]++,[]),l=(cov_18tmdn9r60().s[428]++,0),u=(cov_18tmdn9r60().s[429]++,0),d=(cov_18tmdn9r60().s[430]++,!1),p=()=>{cov_18tmdn9r60().f[210]++;cov_18tmdn9r60().s[432]++;(cov_18tmdn9r60().b[175][0]++,d)&&(cov_18tmdn9r60().b[175][1]++,!c.length)&&(cov_18tmdn9r60().b[175][2]++,!l)&&(cov_18tmdn9r60().b[175][3]++,t.complete());},f=D=>{cov_18tmdn9r60().f[211]++;cov_18tmdn9r60().s[434]++;return l{cov_18tmdn9r60().f[212]++;cov_18tmdn9r60().s[436]++;(cov_18tmdn9r60().b[177][0]++,i)&&(cov_18tmdn9r60().b[177][1]++,t.next(D)),l++;let A=(cov_18tmdn9r60().s[437]++,!1);cov_18tmdn9r60().s[438]++;k(n(D,u++)).subscribe(_(t,R=>{cov_18tmdn9r60().f[213]++;cov_18tmdn9r60().s[439]++;o?.(R),i?(cov_18tmdn9r60().b[178][0]++,f(R)):(cov_18tmdn9r60().b[178][1]++,t.next(R));},()=>{cov_18tmdn9r60().f[214]++;cov_18tmdn9r60().s[440]++;A=!0;},void 0,()=>{cov_18tmdn9r60().f[215]++;cov_18tmdn9r60().s[441]++;if(A){cov_18tmdn9r60().b[179][0]++;cov_18tmdn9r60().s[442]++;try{cov_18tmdn9r60().s[443]++;for(l--;(cov_18tmdn9r60().b[180][0]++,c.length)&&(cov_18tmdn9r60().b[180][1]++,l{cov_18tmdn9r60().f[216]++;cov_18tmdn9r60().s[446]++;return h(R);})):(cov_18tmdn9r60().b[181][1]++,h(R));}cov_18tmdn9r60().s[447]++;p();}catch(R){cov_18tmdn9r60().s[448]++;t.error(R);}}else{cov_18tmdn9r60().b[179][1]++;}}));};cov_18tmdn9r60().s[449]++;return e.subscribe(_(t,f,()=>{cov_18tmdn9r60().f[217]++;cov_18tmdn9r60().s[450]++;d=!0,p();})),()=>{cov_18tmdn9r60().f[218]++;cov_18tmdn9r60().s[451]++;a?.();};}function Me(e,t,n=(cov_18tmdn9r60().b[182][0]++,1/0)){cov_18tmdn9r60().f[219]++;cov_18tmdn9r60().s[452]++;return m(t)?(cov_18tmdn9r60().b[183][0]++,Me((r,o)=>{cov_18tmdn9r60().f[220]++;cov_18tmdn9r60().s[453]++;return Be((i,s)=>{cov_18tmdn9r60().f[221]++;cov_18tmdn9r60().s[454]++;return t(r,i,o,s);})(k(e(r,o)));},n)):(cov_18tmdn9r60().b[183][1]++,(cov_18tmdn9r60().b[184][0]++,typeof t=="number")&&(cov_18tmdn9r60().b[184][1]++,n=t),w((r,o)=>{cov_18tmdn9r60().f[222]++;cov_18tmdn9r60().s[455]++;return mc(r,o,e,n);}));}var{isArray:hp}=(cov_18tmdn9r60().s[456]++,Array);function gp(e,t){cov_18tmdn9r60().f[223]++;cov_18tmdn9r60().s[457]++;return hp(t)?(cov_18tmdn9r60().b[185][0]++,e(...t)):(cov_18tmdn9r60().b[185][1]++,e(t));}function Lt(e){cov_18tmdn9r60().f[224]++;cov_18tmdn9r60().s[458]++;return Be(t=>{cov_18tmdn9r60().f[225]++;cov_18tmdn9r60().s[459]++;return gp(e,t);});}var mp=(cov_18tmdn9r60().s[460]++,["addListener","removeListener"]),yp=(cov_18tmdn9r60().s[461]++,["addEventListener","removeEventListener"]),vp=(cov_18tmdn9r60().s[462]++,["on","off"]);function di(e,t,n,r){cov_18tmdn9r60().f[226]++;cov_18tmdn9r60().s[463]++;if((cov_18tmdn9r60().b[187][0]++,m(n))&&(cov_18tmdn9r60().b[187][1]++,r=n,n=void 0),r){cov_18tmdn9r60().b[186][0]++;cov_18tmdn9r60().s[464]++;return di(e,t,n).pipe(Lt(r));}else{cov_18tmdn9r60().b[186][1]++;}let[o,i]=(cov_18tmdn9r60().s[465]++,Dp(e)?(cov_18tmdn9r60().b[188][0]++,yp.map(s=>{cov_18tmdn9r60().f[227]++;cov_18tmdn9r60().s[466]++;return a=>{cov_18tmdn9r60().f[228]++;cov_18tmdn9r60().s[467]++;return e[s](t,a,n);};})):(cov_18tmdn9r60().b[188][1]++,Ep(e)?(cov_18tmdn9r60().b[189][0]++,mp.map(yc(e,t))):(cov_18tmdn9r60().b[189][1]++,Ip(e)?(cov_18tmdn9r60().b[190][0]++,vp.map(yc(e,t))):(cov_18tmdn9r60().b[190][1]++,[]))));cov_18tmdn9r60().s[468]++;if((cov_18tmdn9r60().b[192][0]++,!o)&&(cov_18tmdn9r60().b[192][1]++,Pt(e))){cov_18tmdn9r60().b[191][0]++;cov_18tmdn9r60().s[469]++;return Me(s=>{cov_18tmdn9r60().f[229]++;cov_18tmdn9r60().s[470]++;return di(s,t,n);})(k(e));}else{cov_18tmdn9r60().b[191][1]++;}cov_18tmdn9r60().s[471]++;if(!o){cov_18tmdn9r60().b[193][0]++;cov_18tmdn9r60().s[472]++;throw new TypeError("Invalid event target");}else{cov_18tmdn9r60().b[193][1]++;}cov_18tmdn9r60().s[473]++;return new b(s=>{cov_18tmdn9r60().f[230]++;cov_18tmdn9r60().s[474]++;let a=(...c)=>{cov_18tmdn9r60().f[231]++;cov_18tmdn9r60().s[475]++;return s.next(1{cov_18tmdn9r60().f[232]++;cov_18tmdn9r60().s[477]++;return i(a);};});}function yc(e,t){cov_18tmdn9r60().f[233]++;cov_18tmdn9r60().s[478]++;return n=>{cov_18tmdn9r60().f[234]++;cov_18tmdn9r60().s[479]++;return r=>{cov_18tmdn9r60().f[235]++;cov_18tmdn9r60().s[480]++;return e[n](t,r);};};}function Ep(e){cov_18tmdn9r60().f[236]++;cov_18tmdn9r60().s[481]++;return(cov_18tmdn9r60().b[195][0]++,m(e.addListener))&&(cov_18tmdn9r60().b[195][1]++,m(e.removeListener));}function Ip(e){cov_18tmdn9r60().f[237]++;cov_18tmdn9r60().s[482]++;return(cov_18tmdn9r60().b[196][0]++,m(e.on))&&(cov_18tmdn9r60().b[196][1]++,m(e.off));}function Dp(e){cov_18tmdn9r60().f[238]++;cov_18tmdn9r60().s[483]++;return(cov_18tmdn9r60().b[197][0]++,m(e.addEventListener))&&(cov_18tmdn9r60().b[197][1]++,m(e.removeEventListener));}function Ir(e,t){cov_18tmdn9r60().f[239]++;cov_18tmdn9r60().s[484]++;return w((n,r)=>{cov_18tmdn9r60().f[240]++;let o=(cov_18tmdn9r60().s[485]++,0);cov_18tmdn9r60().s[486]++;n.subscribe(_(r,i=>{cov_18tmdn9r60().f[241]++;cov_18tmdn9r60().s[487]++;return(cov_18tmdn9r60().b[198][0]++,e.call(t,i,o++))&&(cov_18tmdn9r60().b[198][1]++,r.next(i));}));});}function fi(e){cov_18tmdn9r60().f[242]++;cov_18tmdn9r60().s[488]++;return w((t,n)=>{cov_18tmdn9r60().f[243]++;let r=(cov_18tmdn9r60().s[489]++,null),o=(cov_18tmdn9r60().s[490]++,!1),i;cov_18tmdn9r60().s[491]++;r=t.subscribe(_(n,void 0,void 0,s=>{cov_18tmdn9r60().f[244]++;cov_18tmdn9r60().s[492]++;i=k(e(s,fi(e)(t))),r?(cov_18tmdn9r60().b[199][0]++,r.unsubscribe(),r=null,i.subscribe(n)):(cov_18tmdn9r60().b[199][1]++,o=!0);})),(cov_18tmdn9r60().b[200][0]++,o)&&(cov_18tmdn9r60().b[200][1]++,r.unsubscribe(),r=null,i.subscribe(n));});}var ln=(cov_18tmdn9r60().s[493]++,new b(e=>{cov_18tmdn9r60().f[245]++;cov_18tmdn9r60().s[494]++;return e.complete();}));function Dr(e){cov_18tmdn9r60().f[246]++;cov_18tmdn9r60().s[495]++;return e<=0?(cov_18tmdn9r60().b[201][0]++,()=>{cov_18tmdn9r60().f[247]++;cov_18tmdn9r60().s[496]++;return ln;}):(cov_18tmdn9r60().b[201][1]++,w((t,n)=>{cov_18tmdn9r60().f[248]++;let r=(cov_18tmdn9r60().s[497]++,0);cov_18tmdn9r60().s[498]++;t.subscribe(_(n,o=>{cov_18tmdn9r60().f[249]++;cov_18tmdn9r60().s[499]++;(cov_18tmdn9r60().b[202][0]++,++r<=e)&&(cov_18tmdn9r60().b[202][1]++,n.next(o),(cov_18tmdn9r60().b[203][0]++,e<=r)&&(cov_18tmdn9r60().b[203][1]++,n.complete()));}));}));}function vc(e){cov_18tmdn9r60().f[250]++;cov_18tmdn9r60().s[500]++;return w((t,n)=>{cov_18tmdn9r60().f[251]++;cov_18tmdn9r60().s[501]++;try{cov_18tmdn9r60().s[502]++;t.subscribe(n);}finally{cov_18tmdn9r60().s[503]++;n.add(e);}});}function pi(e=(cov_18tmdn9r60().b[204][0]++,1/0)){cov_18tmdn9r60().f[252]++;cov_18tmdn9r60().s[504]++;return Me(ee,e);}function Ec(){cov_18tmdn9r60().f[253]++;cov_18tmdn9r60().s[505]++;return pi(1);}function Cr(...e){cov_18tmdn9r60().f[254]++;cov_18tmdn9r60().s[506]++;return Ec()(He(e,Ve(e)));}function Ic(...e){cov_18tmdn9r60().f[255]++;let t=(cov_18tmdn9r60().s[507]++,Ve(e));cov_18tmdn9r60().s[508]++;return w((n,r)=>{cov_18tmdn9r60().f[256]++;cov_18tmdn9r60().s[509]++;(t?(cov_18tmdn9r60().b[205][0]++,Cr(e,n,t)):(cov_18tmdn9r60().b[205][1]++,Cr(e,n))).subscribe(r);});}function Dc(e,t){cov_18tmdn9r60().f[257]++;cov_18tmdn9r60().s[510]++;return w((n,r)=>{cov_18tmdn9r60().f[258]++;cov_18tmdn9r60().s[514]++;let o=(cov_18tmdn9r60().s[511]++,null),i=(cov_18tmdn9r60().s[512]++,0),s=(cov_18tmdn9r60().s[513]++,!1),a=()=>{cov_18tmdn9r60().f[259]++;cov_18tmdn9r60().s[515]++;return(cov_18tmdn9r60().b[206][0]++,s)&&(cov_18tmdn9r60().b[206][1]++,!o)&&(cov_18tmdn9r60().b[206][2]++,r.complete());};cov_18tmdn9r60().s[516]++;n.subscribe(_(r,c=>{cov_18tmdn9r60().f[260]++;cov_18tmdn9r60().s[517]++;o?.unsubscribe();let l=(cov_18tmdn9r60().s[518]++,0),u=(cov_18tmdn9r60().s[519]++,i++);cov_18tmdn9r60().s[520]++;k(e(c,u)).subscribe(o=_(r,d=>{cov_18tmdn9r60().f[261]++;cov_18tmdn9r60().s[521]++;return r.next(t?(cov_18tmdn9r60().b[207][0]++,t(c,d,u,l++)):(cov_18tmdn9r60().b[207][1]++,d));},()=>{cov_18tmdn9r60().f[262]++;cov_18tmdn9r60().s[522]++;o=null,a();}));},()=>{cov_18tmdn9r60().f[263]++;cov_18tmdn9r60().s[523]++;s=!0,a();}));});}function Cc(e){cov_18tmdn9r60().f[264]++;cov_18tmdn9r60().s[524]++;return w((t,n)=>{cov_18tmdn9r60().f[265]++;cov_18tmdn9r60().s[525]++;k(e).subscribe(_(n,()=>{cov_18tmdn9r60().f[266]++;cov_18tmdn9r60().s[526]++;return n.complete();},an)),(cov_18tmdn9r60().b[208][0]++,!n.closed)&&(cov_18tmdn9r60().b[208][1]++,t.subscribe(n));});}function wc(e,t,n){cov_18tmdn9r60().f[267]++;let r=(cov_18tmdn9r60().s[527]++,(cov_18tmdn9r60().b[210][0]++,m(e))||(cov_18tmdn9r60().b[210][1]++,t)||(cov_18tmdn9r60().b[210][2]++,n)?(cov_18tmdn9r60().b[209][0]++,{next:e,error:t,complete:n}):(cov_18tmdn9r60().b[209][1]++,e));cov_18tmdn9r60().s[528]++;return r?(cov_18tmdn9r60().b[211][0]++,w((o,i)=>{cov_18tmdn9r60().f[268]++;var s;cov_18tmdn9r60().s[529]++;(cov_18tmdn9r60().b[212][0]++,(s=r.subscribe)===null)||(cov_18tmdn9r60().b[212][1]++,s===void 0)||(cov_18tmdn9r60().b[212][2]++,s.call(r));let a=(cov_18tmdn9r60().s[530]++,!0);cov_18tmdn9r60().s[531]++;o.subscribe(_(i,c=>{cov_18tmdn9r60().f[269]++;var l;cov_18tmdn9r60().s[532]++;(cov_18tmdn9r60().b[213][0]++,(l=r.next)===null)||(cov_18tmdn9r60().b[213][1]++,l===void 0)||(cov_18tmdn9r60().b[213][2]++,l.call(r,c)),i.next(c);},()=>{cov_18tmdn9r60().f[270]++;var c;cov_18tmdn9r60().s[533]++;a=!1,(cov_18tmdn9r60().b[214][0]++,(c=r.complete)===null)||(cov_18tmdn9r60().b[214][1]++,c===void 0)||(cov_18tmdn9r60().b[214][2]++,c.call(r)),i.complete();},c=>{cov_18tmdn9r60().f[271]++;var l;cov_18tmdn9r60().s[534]++;a=!1,(cov_18tmdn9r60().b[215][0]++,(l=r.error)===null)||(cov_18tmdn9r60().b[215][1]++,l===void 0)||(cov_18tmdn9r60().b[215][2]++,l.call(r,c)),i.error(c);},()=>{cov_18tmdn9r60().f[272]++;var c,l;cov_18tmdn9r60().s[535]++;(cov_18tmdn9r60().b[216][0]++,a)&&((cov_18tmdn9r60().b[216][1]++,(c=r.unsubscribe)===null)||(cov_18tmdn9r60().b[216][2]++,c===void 0)||(cov_18tmdn9r60().b[216][3]++,c.call(r))),(cov_18tmdn9r60().b[217][0]++,(l=r.finalize)===null)||(cov_18tmdn9r60().b[217][1]++,l===void 0)||(cov_18tmdn9r60().b[217][2]++,l.call(r));}));})):(cov_18tmdn9r60().b[211][1]++,ee);}var un=(cov_18tmdn9r60().s[536]++,{now(){cov_18tmdn9r60().f[273]++;cov_18tmdn9r60().s[537]++;return((cov_18tmdn9r60().b[218][0]++,un.delegate)||(cov_18tmdn9r60().b[218][1]++,Date)).now();},delegate:void 0});cov_18tmdn9r60().s[538]++;var wr=class extends te{constructor(t=(cov_18tmdn9r60().b[219][0]++,1/0),n=(cov_18tmdn9r60().b[220][0]++,1/0),r=(cov_18tmdn9r60().b[221][0]++,un)){cov_18tmdn9r60().f[274]++;cov_18tmdn9r60().s[539]++;super(),this._bufferSize=t,this._windowTime=n,this._timestampProvider=r,this._buffer=[],this._infiniteTimeWindow=!0,this._infiniteTimeWindow=n===1/0,this._bufferSize=Math.max(1,t),this._windowTime=Math.max(1,n);}next(t){cov_18tmdn9r60().f[275]++;let{isStopped:n,_buffer:r,_infiniteTimeWindow:o,_timestampProvider:i,_windowTime:s}=(cov_18tmdn9r60().s[540]++,this);cov_18tmdn9r60().s[541]++;(cov_18tmdn9r60().b[222][0]++,n)||(cov_18tmdn9r60().b[222][1]++,r.push(t),(cov_18tmdn9r60().b[223][0]++,!o)&&(cov_18tmdn9r60().b[223][1]++,r.push(i.now()+s))),this._trimBuffer(),super.next(t);}_subscribe(t){cov_18tmdn9r60().f[276]++;cov_18tmdn9r60().s[542]++;this._throwIfClosed(),this._trimBuffer();let n=(cov_18tmdn9r60().s[543]++,this._innerSubscribe(t)),{_infiniteTimeWindow:r,_buffer:o}=(cov_18tmdn9r60().s[544]++,this),i=(cov_18tmdn9r60().s[545]++,o.slice());cov_18tmdn9r60().s[546]++;for(let s=(cov_18tmdn9r60().s[547]++,0);(cov_18tmdn9r60().b[224][0]++,s{cov_18tmdn9r60().f[294]++;cov_18tmdn9r60().s[617]++;return e;})),r=o=>{cov_18tmdn9r60().f[295]++;cov_18tmdn9r60().s[619]++;return o.error(n());};cov_18tmdn9r60().s[620]++;return new b(t?(cov_18tmdn9r60().b[258][0]++,o=>{cov_18tmdn9r60().f[296]++;cov_18tmdn9r60().s[621]++;return t.schedule(r,0,o);}):(cov_18tmdn9r60().b[258][1]++,r));}function wp(e){cov_18tmdn9r60().f[297]++;cov_18tmdn9r60().s[622]++;return(cov_18tmdn9r60().b[259][0]++,!!e)&&((cov_18tmdn9r60().b[259][1]++,e instanceof b)||(cov_18tmdn9r60().b[259][2]++,m(e.lift))&&(cov_18tmdn9r60().b[259][3]++,m(e.subscribe)));}var pn=(cov_18tmdn9r60().s[623]++,je(e=>{cov_18tmdn9r60().f[298]++;cov_18tmdn9r60().s[624]++;return function(){cov_18tmdn9r60().f[299]++;cov_18tmdn9r60().s[625]++;e(this),this.name="EmptyError",this.message="no elements in sequence";};}));function Mr(e){cov_18tmdn9r60().f[300]++;cov_18tmdn9r60().s[626]++;return(cov_18tmdn9r60().b[260][0]++,e instanceof Date)&&(cov_18tmdn9r60().b[260][1]++,!isNaN(e));}var Tp=(cov_18tmdn9r60().s[627]++,je(e=>{cov_18tmdn9r60().f[301]++;cov_18tmdn9r60().s[628]++;return function(n=(cov_18tmdn9r60().b[261][0]++,null)){cov_18tmdn9r60().f[302]++;cov_18tmdn9r60().s[629]++;e(this),this.message="Timeout has occurred",this.name="TimeoutError",this.info=n;};}));function bp(e,t){cov_18tmdn9r60().f[303]++;let{first:n,each:r,with:o=(cov_18tmdn9r60().b[262][0]++,_p),scheduler:i=(cov_18tmdn9r60().b[263][0]++,(cov_18tmdn9r60().b[264][0]++,t)??(cov_18tmdn9r60().b[264][1]++,fn)),meta:s=(cov_18tmdn9r60().b[265][0]++,null)}=(cov_18tmdn9r60().s[630]++,Mr(e)?(cov_18tmdn9r60().b[266][0]++,{first:e}):(cov_18tmdn9r60().b[266][1]++,typeof e=="number"?(cov_18tmdn9r60().b[267][0]++,{each:e}):(cov_18tmdn9r60().b[267][1]++,e)));cov_18tmdn9r60().s[631]++;if((cov_18tmdn9r60().b[269][0]++,n==null)&&(cov_18tmdn9r60().b[269][1]++,r==null)){cov_18tmdn9r60().b[268][0]++;cov_18tmdn9r60().s[632]++;throw new TypeError("No timeout provided.");}else{cov_18tmdn9r60().b[268][1]++;}cov_18tmdn9r60().s[633]++;return w((a,c)=>{cov_18tmdn9r60().f[304]++;cov_18tmdn9r60().s[636]++;let l,u,d=(cov_18tmdn9r60().s[634]++,null),p=(cov_18tmdn9r60().s[635]++,0),f=h=>{cov_18tmdn9r60().f[305]++;cov_18tmdn9r60().s[637]++;u=z(c,i,()=>{cov_18tmdn9r60().f[306]++;cov_18tmdn9r60().s[638]++;try{cov_18tmdn9r60().s[639]++;l.unsubscribe(),k(o({meta:s,lastValue:d,seen:p})).subscribe(c);}catch(D){cov_18tmdn9r60().s[640]++;c.error(D);}},h);};cov_18tmdn9r60().s[641]++;l=a.subscribe(_(c,h=>{cov_18tmdn9r60().f[307]++;cov_18tmdn9r60().s[642]++;u?.unsubscribe(),p++,c.next(d=h),(cov_18tmdn9r60().b[270][0]++,r>0)&&(cov_18tmdn9r60().b[270][1]++,f(r));},void 0,void 0,()=>{cov_18tmdn9r60().f[308]++;cov_18tmdn9r60().s[643]++;(cov_18tmdn9r60().b[271][0]++,u?.closed)||(cov_18tmdn9r60().b[271][1]++,u?.unsubscribe()),d=null;})),(cov_18tmdn9r60().b[272][0]++,!p)&&(cov_18tmdn9r60().b[272][1]++,f(n!=null?(cov_18tmdn9r60().b[273][0]++,typeof n=="number"?(cov_18tmdn9r60().b[274][0]++,n):(cov_18tmdn9r60().b[274][1]++,+n-i.now())):(cov_18tmdn9r60().b[273][1]++,r)));});}function _p(e){cov_18tmdn9r60().f[309]++;cov_18tmdn9r60().s[644]++;throw new Tp(e);}var{isArray:Mp}=(cov_18tmdn9r60().s[645]++,Array),{getPrototypeOf:Np,prototype:Sp,keys:xp}=(cov_18tmdn9r60().s[646]++,Object);function Nr(e){cov_18tmdn9r60().f[310]++;cov_18tmdn9r60().s[647]++;if(e.length===1){cov_18tmdn9r60().b[275][0]++;let t=(cov_18tmdn9r60().s[648]++,e[0]);cov_18tmdn9r60().s[649]++;if(Mp(t)){cov_18tmdn9r60().b[276][0]++;cov_18tmdn9r60().s[650]++;return{args:t,keys:null};}else{cov_18tmdn9r60().b[276][1]++;}cov_18tmdn9r60().s[651]++;if(Ap(t)){cov_18tmdn9r60().b[277][0]++;let n=(cov_18tmdn9r60().s[652]++,xp(t));cov_18tmdn9r60().s[653]++;return{args:n.map(r=>{cov_18tmdn9r60().f[311]++;cov_18tmdn9r60().s[654]++;return t[r];}),keys:n};}else{cov_18tmdn9r60().b[277][1]++;}}else{cov_18tmdn9r60().b[275][1]++;}cov_18tmdn9r60().s[655]++;return{args:e,keys:null};}function Ap(e){cov_18tmdn9r60().f[312]++;cov_18tmdn9r60().s[656]++;return(cov_18tmdn9r60().b[278][0]++,e)&&(cov_18tmdn9r60().b[278][1]++,typeof e=="object")&&(cov_18tmdn9r60().b[278][2]++,Np(e)===Sp);}function Sr(e,t){cov_18tmdn9r60().f[313]++;cov_18tmdn9r60().s[657]++;return e.reduce((n,r,o)=>{cov_18tmdn9r60().f[314]++;cov_18tmdn9r60().s[658]++;return n[r]=t[o],n;},{});}function Rp(...e){cov_18tmdn9r60().f[315]++;let t=(cov_18tmdn9r60().s[659]++,Ve(e)),n=(cov_18tmdn9r60().s[660]++,cr(e)),{args:r,keys:o}=(cov_18tmdn9r60().s[661]++,Nr(e));cov_18tmdn9r60().s[662]++;if(r.length===0){cov_18tmdn9r60().b[279][0]++;cov_18tmdn9r60().s[663]++;return He([],t);}else{cov_18tmdn9r60().b[279][1]++;}let i=(cov_18tmdn9r60().s[664]++,new b(kp(r,t,o?(cov_18tmdn9r60().b[280][0]++,s=>{cov_18tmdn9r60().f[316]++;cov_18tmdn9r60().s[665]++;return Sr(o,s);}):(cov_18tmdn9r60().b[280][1]++,ee))));cov_18tmdn9r60().s[666]++;return n?(cov_18tmdn9r60().b[281][0]++,i.pipe(Lt(n))):(cov_18tmdn9r60().b[281][1]++,i);}function kp(e,t,n=(cov_18tmdn9r60().b[282][0]++,ee)){cov_18tmdn9r60().f[317]++;cov_18tmdn9r60().s[667]++;return r=>{cov_18tmdn9r60().f[318]++;cov_18tmdn9r60().s[668]++;bc(t,()=>{cov_18tmdn9r60().f[319]++;let{length:o}=(cov_18tmdn9r60().s[669]++,e),i=(cov_18tmdn9r60().s[670]++,new Array(o)),s=(cov_18tmdn9r60().s[671]++,o),a=(cov_18tmdn9r60().s[672]++,o);cov_18tmdn9r60().s[673]++;for(let c=(cov_18tmdn9r60().s[674]++,0);c{cov_18tmdn9r60().f[320]++;let l=(cov_18tmdn9r60().s[676]++,He(e[c],t)),u=(cov_18tmdn9r60().s[677]++,!1);cov_18tmdn9r60().s[678]++;l.subscribe(_(r,d=>{cov_18tmdn9r60().f[321]++;cov_18tmdn9r60().s[679]++;i[c]=d,(cov_18tmdn9r60().b[283][0]++,u)||(cov_18tmdn9r60().b[283][1]++,u=!0,a--),(cov_18tmdn9r60().b[284][0]++,a)||(cov_18tmdn9r60().b[284][1]++,r.next(n(i.slice())));},()=>{cov_18tmdn9r60().f[322]++;cov_18tmdn9r60().s[680]++;(cov_18tmdn9r60().b[285][0]++,--s)||(cov_18tmdn9r60().b[285][1]++,r.complete());}));},r);}},r);};}function bc(e,t,n){cov_18tmdn9r60().f[323]++;cov_18tmdn9r60().s[681]++;e?(cov_18tmdn9r60().b[286][0]++,z(n,e,t)):(cov_18tmdn9r60().b[286][1]++,t());}function Op(e){cov_18tmdn9r60().f[324]++;cov_18tmdn9r60().s[682]++;return new b(t=>{cov_18tmdn9r60().f[325]++;cov_18tmdn9r60().s[683]++;k(e()).subscribe(t);});}function Pp(...e){cov_18tmdn9r60().f[326]++;let t=(cov_18tmdn9r60().s[684]++,cr(e)),{args:n,keys:r}=(cov_18tmdn9r60().s[685]++,Nr(e)),o=(cov_18tmdn9r60().s[686]++,new b(i=>{cov_18tmdn9r60().f[327]++;let{length:s}=(cov_18tmdn9r60().s[687]++,n);cov_18tmdn9r60().s[688]++;if(!s){cov_18tmdn9r60().b[287][0]++;cov_18tmdn9r60().s[689]++;i.complete();cov_18tmdn9r60().s[690]++;return;}else{cov_18tmdn9r60().b[287][1]++;}let a=(cov_18tmdn9r60().s[691]++,new Array(s)),c=(cov_18tmdn9r60().s[692]++,s),l=(cov_18tmdn9r60().s[693]++,s);cov_18tmdn9r60().s[694]++;for(let u=(cov_18tmdn9r60().s[695]++,0);u{cov_18tmdn9r60().f[328]++;cov_18tmdn9r60().s[698]++;(cov_18tmdn9r60().b[288][0]++,d)||(cov_18tmdn9r60().b[288][1]++,d=!0,l--),a[u]=p;},()=>{cov_18tmdn9r60().f[329]++;cov_18tmdn9r60().s[699]++;return c--;},void 0,()=>{cov_18tmdn9r60().f[330]++;cov_18tmdn9r60().s[700]++;((cov_18tmdn9r60().b[289][0]++,!c)||(cov_18tmdn9r60().b[289][1]++,!d))&&(cov_18tmdn9r60().b[289][2]++,(cov_18tmdn9r60().b[290][0]++,l)||(cov_18tmdn9r60().b[290][1]++,i.next(r?(cov_18tmdn9r60().b[291][0]++,Sr(r,a)):(cov_18tmdn9r60().b[291][1]++,a))),i.complete());}));}}));cov_18tmdn9r60().s[701]++;return t?(cov_18tmdn9r60().b[292][0]++,o.pipe(Lt(t))):(cov_18tmdn9r60().b[292][1]++,o);}function _c(e=(cov_18tmdn9r60().b[293][0]++,0),t,n=(cov_18tmdn9r60().b[294][0]++,Tc)){cov_18tmdn9r60().f[331]++;let r=(cov_18tmdn9r60().s[702]++,-1);cov_18tmdn9r60().s[703]++;return(cov_18tmdn9r60().b[295][0]++,t!=null)&&(cov_18tmdn9r60().b[295][1]++,ar(t)?(cov_18tmdn9r60().b[296][0]++,n=t):(cov_18tmdn9r60().b[296][1]++,r=t)),new b(o=>{cov_18tmdn9r60().f[332]++;let i=(cov_18tmdn9r60().s[704]++,Mr(e)?(cov_18tmdn9r60().b[297][0]++,+e-n.now()):(cov_18tmdn9r60().b[297][1]++,e));cov_18tmdn9r60().s[705]++;(cov_18tmdn9r60().b[298][0]++,i<0)&&(cov_18tmdn9r60().b[298][1]++,i=0);let s=(cov_18tmdn9r60().s[706]++,0);cov_18tmdn9r60().s[707]++;return n.schedule(function(){cov_18tmdn9r60().f[333]++;cov_18tmdn9r60().s[708]++;(cov_18tmdn9r60().b[299][0]++,o.closed)||(cov_18tmdn9r60().b[299][1]++,o.next(s++),0<=r?(cov_18tmdn9r60().b[300][0]++,this.schedule(void 0,r)):(cov_18tmdn9r60().b[300][1]++,o.complete()));},i);});}function Lp(e=(cov_18tmdn9r60().b[301][0]++,0),t=(cov_18tmdn9r60().b[302][0]++,fn)){cov_18tmdn9r60().f[334]++;cov_18tmdn9r60().s[709]++;return(cov_18tmdn9r60().b[303][0]++,e<0)&&(cov_18tmdn9r60().b[303][1]++,e=0),_c(e,e,t);}function Fp(e,t){cov_18tmdn9r60().f[335]++;cov_18tmdn9r60().s[710]++;return m(t)?(cov_18tmdn9r60().b[304][0]++,Me(e,t,1)):(cov_18tmdn9r60().b[304][1]++,Me(e,1));}function Mc(e){cov_18tmdn9r60().f[336]++;cov_18tmdn9r60().s[711]++;return w((t,n)=>{cov_18tmdn9r60().f[337]++;let r=(cov_18tmdn9r60().s[712]++,!1);cov_18tmdn9r60().s[713]++;t.subscribe(_(n,o=>{cov_18tmdn9r60().f[338]++;cov_18tmdn9r60().s[714]++;r=!0,n.next(o);},()=>{cov_18tmdn9r60().f[339]++;cov_18tmdn9r60().s[715]++;(cov_18tmdn9r60().b[305][0]++,r)||(cov_18tmdn9r60().b[305][1]++,n.next(e)),n.complete();}));});}function jp(e,t=(cov_18tmdn9r60().b[306][0]++,ee)){cov_18tmdn9r60().f[340]++;cov_18tmdn9r60().s[716]++;return e=(cov_18tmdn9r60().b[307][0]++,e)??(cov_18tmdn9r60().b[307][1]++,Vp),w((n,r)=>{cov_18tmdn9r60().f[341]++;let o,i=(cov_18tmdn9r60().s[717]++,!0);cov_18tmdn9r60().s[718]++;n.subscribe(_(r,s=>{cov_18tmdn9r60().f[342]++;let a=(cov_18tmdn9r60().s[719]++,t(s));cov_18tmdn9r60().s[720]++;((cov_18tmdn9r60().b[308][0]++,i)||(cov_18tmdn9r60().b[308][1]++,!e(o,a)))&&(cov_18tmdn9r60().b[308][2]++,i=!1,o=a,r.next(s));}));});}function Vp(e,t){cov_18tmdn9r60().f[343]++;cov_18tmdn9r60().s[721]++;return e===t;}function Nc(e=(cov_18tmdn9r60().b[309][0]++,Hp)){cov_18tmdn9r60().f[344]++;cov_18tmdn9r60().s[722]++;return w((t,n)=>{cov_18tmdn9r60().f[345]++;let r=(cov_18tmdn9r60().s[723]++,!1);cov_18tmdn9r60().s[724]++;t.subscribe(_(n,o=>{cov_18tmdn9r60().f[346]++;cov_18tmdn9r60().s[725]++;r=!0,n.next(o);},()=>{cov_18tmdn9r60().f[347]++;cov_18tmdn9r60().s[726]++;return r?(cov_18tmdn9r60().b[310][0]++,n.complete()):(cov_18tmdn9r60().b[310][1]++,n.error(e()));}));});}function Hp(){cov_18tmdn9r60().f[348]++;cov_18tmdn9r60().s[727]++;return new pn();}function Bp(e,t){cov_18tmdn9r60().f[349]++;let n=(cov_18tmdn9r60().s[728]++,arguments.length>=2);cov_18tmdn9r60().s[729]++;return r=>{cov_18tmdn9r60().f[350]++;cov_18tmdn9r60().s[730]++;return r.pipe(e?(cov_18tmdn9r60().b[311][0]++,Ir((o,i)=>{cov_18tmdn9r60().f[351]++;cov_18tmdn9r60().s[731]++;return e(o,i,r);})):(cov_18tmdn9r60().b[311][1]++,ee),Dr(1),n?(cov_18tmdn9r60().b[312][0]++,Mc(t)):(cov_18tmdn9r60().b[312][1]++,Nc(()=>{cov_18tmdn9r60().f[352]++;cov_18tmdn9r60().s[732]++;return new pn();})));};}function $p(e){cov_18tmdn9r60().f[353]++;cov_18tmdn9r60().s[733]++;return e<=0?(cov_18tmdn9r60().b[313][0]++,()=>{cov_18tmdn9r60().f[354]++;cov_18tmdn9r60().s[734]++;return ln;}):(cov_18tmdn9r60().b[313][1]++,w((t,n)=>{cov_18tmdn9r60().f[355]++;let r=(cov_18tmdn9r60().s[735]++,[]);cov_18tmdn9r60().s[736]++;t.subscribe(_(n,o=>{cov_18tmdn9r60().f[356]++;cov_18tmdn9r60().s[737]++;r.push(o),(cov_18tmdn9r60().b[314][0]++,e{cov_18tmdn9r60().f[357]++;cov_18tmdn9r60().s[738]++;for(let o of r){cov_18tmdn9r60().s[739]++;n.next(o);}cov_18tmdn9r60().s[740]++;n.complete();},void 0,()=>{cov_18tmdn9r60().f[358]++;cov_18tmdn9r60().s[741]++;r=null;}));}));}function Sc(e=(cov_18tmdn9r60().b[315][0]++,{})){cov_18tmdn9r60().f[359]++;let{connector:t=(cov_18tmdn9r60().b[316][0]++,()=>{cov_18tmdn9r60().f[360]++;cov_18tmdn9r60().s[743]++;return new te();}),resetOnError:n=(cov_18tmdn9r60().b[317][0]++,!0),resetOnComplete:r=(cov_18tmdn9r60().b[318][0]++,!0),resetOnRefCountZero:o=(cov_18tmdn9r60().b[319][0]++,!0)}=(cov_18tmdn9r60().s[742]++,e);cov_18tmdn9r60().s[744]++;return i=>{cov_18tmdn9r60().f[361]++;cov_18tmdn9r60().s[748]++;cov_18tmdn9r60().s[750]++;cov_18tmdn9r60().s[752]++;let s,a,c,l=(cov_18tmdn9r60().s[745]++,0),u=(cov_18tmdn9r60().s[746]++,!1),d=(cov_18tmdn9r60().s[747]++,!1),p=()=>{cov_18tmdn9r60().f[362]++;cov_18tmdn9r60().s[749]++;a?.unsubscribe(),a=void 0;},f=()=>{cov_18tmdn9r60().f[363]++;cov_18tmdn9r60().s[751]++;p(),s=c=void 0,u=d=!1;},h=()=>{cov_18tmdn9r60().f[364]++;let D=(cov_18tmdn9r60().s[753]++,s);cov_18tmdn9r60().s[754]++;f(),D?.unsubscribe();};cov_18tmdn9r60().s[755]++;return w((D,A)=>{cov_18tmdn9r60().f[365]++;cov_18tmdn9r60().s[756]++;l++,(cov_18tmdn9r60().b[320][0]++,!d)&&(cov_18tmdn9r60().b[320][1]++,!u)&&(cov_18tmdn9r60().b[320][2]++,p());let R=(cov_18tmdn9r60().s[757]++,c=(cov_18tmdn9r60().b[321][0]++,c)??(cov_18tmdn9r60().b[321][1]++,t()));cov_18tmdn9r60().s[758]++;A.add(()=>{cov_18tmdn9r60().f[366]++;cov_18tmdn9r60().s[759]++;l--,(cov_18tmdn9r60().b[322][0]++,l===0)&&(cov_18tmdn9r60().b[322][1]++,!d)&&(cov_18tmdn9r60().b[322][2]++,!u)&&(cov_18tmdn9r60().b[322][3]++,a=hi(h,o));}),R.subscribe(A),(cov_18tmdn9r60().b[323][0]++,!s)&&(cov_18tmdn9r60().b[323][1]++,l>0)&&(cov_18tmdn9r60().b[323][2]++,s=new _e({next:me=>{cov_18tmdn9r60().f[367]++;cov_18tmdn9r60().s[760]++;return R.next(me);},error:me=>{cov_18tmdn9r60().f[368]++;cov_18tmdn9r60().s[761]++;d=!0,p(),a=hi(f,n,me),R.error(me);},complete:()=>{cov_18tmdn9r60().f[369]++;cov_18tmdn9r60().s[762]++;u=!0,p(),a=hi(f,r),R.complete();}}),k(D).subscribe(s));})(i);};}function hi(e,t,...n){cov_18tmdn9r60().f[370]++;cov_18tmdn9r60().s[763]++;if(t===!0){cov_18tmdn9r60().b[324][0]++;cov_18tmdn9r60().s[764]++;e();cov_18tmdn9r60().s[765]++;return;}else{cov_18tmdn9r60().b[324][1]++;}cov_18tmdn9r60().s[766]++;if(t===!1){cov_18tmdn9r60().b[325][0]++;cov_18tmdn9r60().s[767]++;return;}else{cov_18tmdn9r60().b[325][1]++;}let r=(cov_18tmdn9r60().s[768]++,new _e({next:()=>{cov_18tmdn9r60().f[371]++;cov_18tmdn9r60().s[769]++;r.unsubscribe(),e();}}));cov_18tmdn9r60().s[770]++;return k(t(...n)).subscribe(r);}function Up(e,t,n){cov_18tmdn9r60().f[372]++;let r,o=(cov_18tmdn9r60().s[771]++,!1);cov_18tmdn9r60().s[772]++;return(cov_18tmdn9r60().b[327][0]++,e)&&(cov_18tmdn9r60().b[327][1]++,typeof e=="object")?(cov_18tmdn9r60().b[326][0]++,{bufferSize:r=(cov_18tmdn9r60().b[328][0]++,1/0),windowTime:t=(cov_18tmdn9r60().b[329][0]++,1/0),refCount:o=(cov_18tmdn9r60().b[330][0]++,!1),scheduler:n}=e):(cov_18tmdn9r60().b[326][1]++,r=(cov_18tmdn9r60().b[331][0]++,e)??(cov_18tmdn9r60().b[331][1]++,1/0)),Sc({connector:()=>{cov_18tmdn9r60().f[373]++;cov_18tmdn9r60().s[773]++;return new wr(r,t,n);},resetOnError:!0,resetOnComplete:!1,resetOnRefCountZero:o});}var Q=(cov_18tmdn9r60().s[774]++,null),xr=(cov_18tmdn9r60().s[775]++,!1),gi=(cov_18tmdn9r60().s[776]++,1),Wp=(cov_18tmdn9r60().s[777]++,null),W=(cov_18tmdn9r60().s[778]++,Symbol("SIGNAL"));function g(e){cov_18tmdn9r60().f[374]++;let t=(cov_18tmdn9r60().s[779]++,Q);cov_18tmdn9r60().s[780]++;return Q=e,t;}function Ar(){cov_18tmdn9r60().f[375]++;cov_18tmdn9r60().s[781]++;return Q;}var Ue=(cov_18tmdn9r60().s[782]++,{version:0,lastCleanEpoch:0,dirty:!1,producers:void 0,producersTail:void 0,consumers:void 0,consumersTail:void 0,recomputing:!1,consumerAllowSignalWrites:!1,consumerIsAlwaysLive:!1,kind:"unknown",producerMustRecompute:()=>{cov_18tmdn9r60().f[376]++;cov_18tmdn9r60().s[783]++;return!1;},producerRecomputeValue:()=>{cov_18tmdn9r60().f[377]++;},consumerMarkedDirty:()=>{cov_18tmdn9r60().f[378]++;},consumerOnSignalRead:()=>{cov_18tmdn9r60().f[379]++;}});function at(e){cov_18tmdn9r60().f[380]++;cov_18tmdn9r60().s[784]++;if(xr){cov_18tmdn9r60().b[332][0]++;cov_18tmdn9r60().s[785]++;throw new Error("");}else{cov_18tmdn9r60().b[332][1]++;}cov_18tmdn9r60().s[786]++;if(Q===null){cov_18tmdn9r60().b[333][0]++;cov_18tmdn9r60().s[787]++;return;}else{cov_18tmdn9r60().b[333][1]++;}cov_18tmdn9r60().s[788]++;Q.consumerOnSignalRead(e);let t=(cov_18tmdn9r60().s[789]++,Q.producersTail);cov_18tmdn9r60().s[790]++;if((cov_18tmdn9r60().b[335][0]++,t!==void 0)&&(cov_18tmdn9r60().b[335][1]++,t.producer===e)){cov_18tmdn9r60().b[334][0]++;cov_18tmdn9r60().s[791]++;return;}else{cov_18tmdn9r60().b[334][1]++;}let n,r=(cov_18tmdn9r60().s[792]++,Q.recomputing);cov_18tmdn9r60().s[793]++;if((cov_18tmdn9r60().b[337][0]++,r)&&(cov_18tmdn9r60().b[337][1]++,n=t!==void 0?(cov_18tmdn9r60().b[338][0]++,t.nextProducer):(cov_18tmdn9r60().b[338][1]++,Q.producers),(cov_18tmdn9r60().b[339][0]++,n!==void 0)&&(cov_18tmdn9r60().b[339][1]++,n.producer===e))){cov_18tmdn9r60().b[336][0]++;cov_18tmdn9r60().s[794]++;Q.producersTail=n,n.lastReadVersion=e.version;cov_18tmdn9r60().s[795]++;return;}else{cov_18tmdn9r60().b[336][1]++;}let o=(cov_18tmdn9r60().s[796]++,e.consumersTail);cov_18tmdn9r60().s[797]++;if((cov_18tmdn9r60().b[341][0]++,o!==void 0)&&(cov_18tmdn9r60().b[341][1]++,o.consumer===Q)&&((cov_18tmdn9r60().b[341][2]++,!r)||(cov_18tmdn9r60().b[341][3]++,Gp(o,Q)))){cov_18tmdn9r60().b[340][0]++;cov_18tmdn9r60().s[798]++;return;}else{cov_18tmdn9r60().b[340][1]++;}let i=(cov_18tmdn9r60().s[799]++,Vt(Q)),s=(cov_18tmdn9r60().s[800]++,{producer:e,consumer:Q,nextProducer:n,prevConsumer:o,lastReadVersion:e.version,nextConsumer:void 0});cov_18tmdn9r60().s[801]++;Q.producersTail=s,t!==void 0?(cov_18tmdn9r60().b[342][0]++,t.nextProducer=s):(cov_18tmdn9r60().b[342][1]++,Q.producers=s),(cov_18tmdn9r60().b[343][0]++,i)&&(cov_18tmdn9r60().b[343][1]++,kc(e,s));}function xc(){cov_18tmdn9r60().f[381]++;cov_18tmdn9r60().s[802]++;gi++;}function ct(e){cov_18tmdn9r60().f[382]++;cov_18tmdn9r60().s[803]++;if((cov_18tmdn9r60().b[345][0]++,!((cov_18tmdn9r60().b[346][0]++,Vt(e))&&(cov_18tmdn9r60().b[346][1]++,!e.dirty)))&&(cov_18tmdn9r60().b[345][1]++,!((cov_18tmdn9r60().b[347][0]++,!e.dirty)&&(cov_18tmdn9r60().b[347][1]++,e.lastCleanEpoch===gi)))){cov_18tmdn9r60().b[344][0]++;cov_18tmdn9r60().s[804]++;if((cov_18tmdn9r60().b[349][0]++,!e.producerMustRecompute(e))&&(cov_18tmdn9r60().b[349][1]++,!hn(e))){cov_18tmdn9r60().b[348][0]++;cov_18tmdn9r60().s[805]++;jt(e);cov_18tmdn9r60().s[806]++;return;}else{cov_18tmdn9r60().b[348][1]++;}cov_18tmdn9r60().s[807]++;e.producerRecomputeValue(e),jt(e);}else{cov_18tmdn9r60().b[344][1]++;}}function mi(e){cov_18tmdn9r60().f[383]++;cov_18tmdn9r60().s[808]++;if(e.consumers===void 0){cov_18tmdn9r60().b[350][0]++;cov_18tmdn9r60().s[809]++;return;}else{cov_18tmdn9r60().b[350][1]++;}let t=(cov_18tmdn9r60().s[810]++,xr);cov_18tmdn9r60().s[811]++;xr=!0;cov_18tmdn9r60().s[812]++;try{cov_18tmdn9r60().s[813]++;for(let n=(cov_18tmdn9r60().s[814]++,e.consumers);n!==void 0;n=n.nextConsumer){let r=(cov_18tmdn9r60().s[815]++,n.consumer);cov_18tmdn9r60().s[816]++;(cov_18tmdn9r60().b[351][0]++,r.dirty)||(cov_18tmdn9r60().b[351][1]++,qp(r));}}finally{cov_18tmdn9r60().s[817]++;xr=t;}}function yi(){cov_18tmdn9r60().f[384]++;cov_18tmdn9r60().s[818]++;return Q?.consumerAllowSignalWrites!==!1;}function qp(e){cov_18tmdn9r60().f[385]++;cov_18tmdn9r60().s[819]++;e.dirty=!0,mi(e),e.consumerMarkedDirty?.(e);}function jt(e){cov_18tmdn9r60().f[386]++;cov_18tmdn9r60().s[820]++;e.dirty=!1,e.lastCleanEpoch=gi;}function We(e){cov_18tmdn9r60().f[387]++;cov_18tmdn9r60().s[821]++;return(cov_18tmdn9r60().b[352][0]++,e)&&(cov_18tmdn9r60().b[352][1]++,Ac(e)),g(e);}function Ac(e){cov_18tmdn9r60().f[388]++;cov_18tmdn9r60().s[822]++;e.producersTail=void 0,e.recomputing=!0;}function lt(e,t){cov_18tmdn9r60().f[389]++;cov_18tmdn9r60().s[823]++;g(t),(cov_18tmdn9r60().b[353][0]++,e)&&(cov_18tmdn9r60().b[353][1]++,Rc(e));}function Rc(e){cov_18tmdn9r60().f[390]++;cov_18tmdn9r60().s[824]++;e.recomputing=!1;let t=(cov_18tmdn9r60().s[825]++,e.producersTail),n=(cov_18tmdn9r60().s[826]++,t!==void 0?(cov_18tmdn9r60().b[354][0]++,t.nextProducer):(cov_18tmdn9r60().b[354][1]++,e.producers));cov_18tmdn9r60().s[827]++;if(n!==void 0){cov_18tmdn9r60().b[355][0]++;cov_18tmdn9r60().s[828]++;if(Vt(e)){cov_18tmdn9r60().b[356][0]++;cov_18tmdn9r60().s[829]++;do{cov_18tmdn9r60().s[830]++;n=vi(n);}while(n!==void 0);}else{cov_18tmdn9r60().b[356][1]++;}cov_18tmdn9r60().s[831]++;t!==void 0?(cov_18tmdn9r60().b[357][0]++,t.nextProducer=void 0):(cov_18tmdn9r60().b[357][1]++,e.producers=void 0);}else{cov_18tmdn9r60().b[355][1]++;}}function hn(e){cov_18tmdn9r60().f[391]++;cov_18tmdn9r60().s[832]++;for(let t=(cov_18tmdn9r60().s[833]++,e.producers);t!==void 0;t=t.nextProducer){let n=(cov_18tmdn9r60().s[834]++,t.producer),r=(cov_18tmdn9r60().s[835]++,t.lastReadVersion);cov_18tmdn9r60().s[836]++;if((cov_18tmdn9r60().b[359][0]++,r!==n.version)||(cov_18tmdn9r60().b[359][1]++,ct(n),r!==n.version)){cov_18tmdn9r60().b[358][0]++;cov_18tmdn9r60().s[837]++;return!0;}else{cov_18tmdn9r60().b[358][1]++;}}cov_18tmdn9r60().s[838]++;return!1;}function ut(e){cov_18tmdn9r60().f[392]++;cov_18tmdn9r60().s[839]++;if(Vt(e)){cov_18tmdn9r60().b[360][0]++;let t=(cov_18tmdn9r60().s[840]++,e.producers);cov_18tmdn9r60().s[841]++;for(;t!==void 0;){cov_18tmdn9r60().s[842]++;t=vi(t);}}else{cov_18tmdn9r60().b[360][1]++;}cov_18tmdn9r60().s[843]++;e.producers=void 0,e.producersTail=void 0,e.consumers=void 0,e.consumersTail=void 0;}function kc(e,t){cov_18tmdn9r60().f[393]++;let n=(cov_18tmdn9r60().s[844]++,e.consumersTail),r=(cov_18tmdn9r60().s[845]++,Vt(e));cov_18tmdn9r60().s[846]++;if(n!==void 0?(cov_18tmdn9r60().b[362][0]++,t.nextConsumer=n.nextConsumer,n.nextConsumer=t):(cov_18tmdn9r60().b[362][1]++,t.nextConsumer=void 0,e.consumers=t),t.prevConsumer=n,e.consumersTail=t,!r){cov_18tmdn9r60().b[361][0]++;cov_18tmdn9r60().s[847]++;for(let o=(cov_18tmdn9r60().s[848]++,e.producers);o!==void 0;o=o.nextProducer){cov_18tmdn9r60().s[849]++;kc(o.producer,o);}}else{cov_18tmdn9r60().b[361][1]++;}}function vi(e){cov_18tmdn9r60().f[394]++;let t=(cov_18tmdn9r60().s[850]++,e.producer),n=(cov_18tmdn9r60().s[851]++,e.nextProducer),r=(cov_18tmdn9r60().s[852]++,e.nextConsumer),o=(cov_18tmdn9r60().s[853]++,e.prevConsumer);cov_18tmdn9r60().s[854]++;if(e.nextConsumer=void 0,e.prevConsumer=void 0,r!==void 0?(cov_18tmdn9r60().b[364][0]++,r.prevConsumer=o):(cov_18tmdn9r60().b[364][1]++,t.consumersTail=o),o!==void 0){cov_18tmdn9r60().b[363][0]++;cov_18tmdn9r60().s[855]++;o.nextConsumer=r;}else{cov_18tmdn9r60().b[363][1]++;cov_18tmdn9r60().s[856]++;if(t.consumers=r,!Vt(t)){cov_18tmdn9r60().b[365][0]++;let i=(cov_18tmdn9r60().s[857]++,t.producers);cov_18tmdn9r60().s[858]++;for(;i!==void 0;){cov_18tmdn9r60().s[859]++;i=vi(i);}}else{cov_18tmdn9r60().b[365][1]++;}}cov_18tmdn9r60().s[860]++;return n;}function Vt(e){cov_18tmdn9r60().f[395]++;cov_18tmdn9r60().s[861]++;return(cov_18tmdn9r60().b[366][0]++,e.consumerIsAlwaysLive)||(cov_18tmdn9r60().b[366][1]++,e.consumers!==void 0);}function gn(e){cov_18tmdn9r60().f[396]++;cov_18tmdn9r60().s[862]++;Wp?.(e);}function Gp(e,t){cov_18tmdn9r60().f[397]++;let n=(cov_18tmdn9r60().s[863]++,t.producersTail);cov_18tmdn9r60().s[864]++;if(n!==void 0){cov_18tmdn9r60().b[367][0]++;let r=(cov_18tmdn9r60().s[865]++,t.producers);cov_18tmdn9r60().s[866]++;do{cov_18tmdn9r60().s[867]++;if(r===e){cov_18tmdn9r60().b[368][0]++;cov_18tmdn9r60().s[868]++;return!0;}else{cov_18tmdn9r60().b[368][1]++;}cov_18tmdn9r60().s[869]++;if(r===n){cov_18tmdn9r60().b[369][0]++;cov_18tmdn9r60().s[870]++;break;}else{cov_18tmdn9r60().b[369][1]++;}cov_18tmdn9r60().s[871]++;r=r.nextProducer;}while(r!==void 0);}else{cov_18tmdn9r60().b[367][1]++;}cov_18tmdn9r60().s[872]++;return!1;}function mn(e,t){cov_18tmdn9r60().f[398]++;cov_18tmdn9r60().s[873]++;return Object.is(e,t);}function Rr(e,t){cov_18tmdn9r60().f[399]++;let n=(cov_18tmdn9r60().s[874]++,Object.create(zp));cov_18tmdn9r60().s[875]++;n.computation=e,(cov_18tmdn9r60().b[370][0]++,t!==void 0)&&(cov_18tmdn9r60().b[370][1]++,n.equal=t);cov_18tmdn9r60().s[876]++;let r=()=>{cov_18tmdn9r60().f[400]++;cov_18tmdn9r60().s[877]++;if(ct(n),at(n),n.value===ye){cov_18tmdn9r60().b[371][0]++;cov_18tmdn9r60().s[878]++;throw n.error;}else{cov_18tmdn9r60().b[371][1]++;}cov_18tmdn9r60().s[879]++;return n.value;};cov_18tmdn9r60().s[880]++;return r[W]=n,gn(n),r;}var $e=(cov_18tmdn9r60().s[881]++,Symbol("UNSET")),st=(cov_18tmdn9r60().s[882]++,Symbol("COMPUTING")),ye=(cov_18tmdn9r60().s[883]++,Symbol("ERRORED")),zp=(cov_18tmdn9r60().s[884]++,$(B({},Ue),{value:$e,dirty:!0,error:null,equal:mn,kind:"computed",producerMustRecompute(e){cov_18tmdn9r60().f[401]++;cov_18tmdn9r60().s[885]++;return(cov_18tmdn9r60().b[372][0]++,e.value===$e)||(cov_18tmdn9r60().b[372][1]++,e.value===st);},producerRecomputeValue(e){cov_18tmdn9r60().f[402]++;cov_18tmdn9r60().s[886]++;if(e.value===st){cov_18tmdn9r60().b[373][0]++;cov_18tmdn9r60().s[887]++;throw new Error("");}else{cov_18tmdn9r60().b[373][1]++;}let t=(cov_18tmdn9r60().s[888]++,e.value);cov_18tmdn9r60().s[889]++;e.value=st;let n=(cov_18tmdn9r60().s[890]++,We(e)),r,o=(cov_18tmdn9r60().s[891]++,!1);cov_18tmdn9r60().s[892]++;try{cov_18tmdn9r60().s[893]++;r=e.computation(),g(null),o=(cov_18tmdn9r60().b[374][0]++,t!==$e)&&(cov_18tmdn9r60().b[374][1]++,t!==ye)&&(cov_18tmdn9r60().b[374][2]++,r!==ye)&&(cov_18tmdn9r60().b[374][3]++,e.equal(t,r));}catch(i){cov_18tmdn9r60().s[894]++;r=ye,e.error=i;}finally{cov_18tmdn9r60().s[895]++;lt(e,n);}cov_18tmdn9r60().s[896]++;if(o){cov_18tmdn9r60().b[375][0]++;cov_18tmdn9r60().s[897]++;e.value=t;cov_18tmdn9r60().s[898]++;return;}else{cov_18tmdn9r60().b[375][1]++;}cov_18tmdn9r60().s[899]++;e.value=r,e.version++;}}));function Qp(){cov_18tmdn9r60().f[403]++;cov_18tmdn9r60().s[900]++;throw new Error();}var Oc=(cov_18tmdn9r60().s[901]++,Qp);function Pc(e){cov_18tmdn9r60().f[404]++;cov_18tmdn9r60().s[902]++;Oc(e);}function Ei(e){cov_18tmdn9r60().f[405]++;cov_18tmdn9r60().s[903]++;Oc=e;}var Zp=(cov_18tmdn9r60().s[904]++,null);function Ii(e,t){cov_18tmdn9r60().f[406]++;let n=(cov_18tmdn9r60().s[905]++,Object.create(Or));cov_18tmdn9r60().s[906]++;n.value=e,(cov_18tmdn9r60().b[376][0]++,t!==void 0)&&(cov_18tmdn9r60().b[376][1]++,n.equal=t);cov_18tmdn9r60().s[907]++;let r=()=>{cov_18tmdn9r60().f[407]++;cov_18tmdn9r60().s[908]++;return Lc(n);};cov_18tmdn9r60().s[909]++;return r[W]=n,gn(n),[r,s=>{cov_18tmdn9r60().f[408]++;cov_18tmdn9r60().s[910]++;return dt(n,s);},s=>{cov_18tmdn9r60().f[409]++;cov_18tmdn9r60().s[911]++;return kr(n,s);}];}function Lc(e){cov_18tmdn9r60().f[410]++;cov_18tmdn9r60().s[912]++;return at(e),e.value;}function dt(e,t){cov_18tmdn9r60().f[411]++;cov_18tmdn9r60().s[913]++;(cov_18tmdn9r60().b[377][0]++,yi())||(cov_18tmdn9r60().b[377][1]++,Pc(e)),(cov_18tmdn9r60().b[378][0]++,e.equal(e.value,t))||(cov_18tmdn9r60().b[378][1]++,e.value=t,Yp(e));}function kr(e,t){cov_18tmdn9r60().f[412]++;cov_18tmdn9r60().s[914]++;(cov_18tmdn9r60().b[379][0]++,yi())||(cov_18tmdn9r60().b[379][1]++,Pc(e)),dt(e,t(e.value));}var Or=(cov_18tmdn9r60().s[915]++,$(B({},Ue),{equal:mn,value:void 0,kind:"signal"}));function Yp(e){cov_18tmdn9r60().f[413]++;cov_18tmdn9r60().s[916]++;e.version++,xc(),mi(e),Zp?.(e);}var Di=(cov_18tmdn9r60().s[917]++,$(B({},Ue),{consumerIsAlwaysLive:!0,consumerAllowSignalWrites:!0,dirty:!0,kind:"effect"}));function Ci(e){cov_18tmdn9r60().f[414]++;cov_18tmdn9r60().s[918]++;if(e.dirty=!1,(cov_18tmdn9r60().b[381][0]++,e.version>0)&&(cov_18tmdn9r60().b[381][1]++,!hn(e))){cov_18tmdn9r60().b[380][0]++;cov_18tmdn9r60().s[919]++;return;}else{cov_18tmdn9r60().b[380][1]++;}cov_18tmdn9r60().s[920]++;e.version++;let t=(cov_18tmdn9r60().s[921]++,We(e));cov_18tmdn9r60().s[922]++;try{cov_18tmdn9r60().s[923]++;e.cleanup(),e.fn();}finally{cov_18tmdn9r60().s[924]++;lt(e,t);}}var wi;function Pr(){cov_18tmdn9r60().f[415]++;cov_18tmdn9r60().s[925]++;return wi;}function ve(e){cov_18tmdn9r60().f[416]++;let t=(cov_18tmdn9r60().s[926]++,wi);cov_18tmdn9r60().s[927]++;return wi=e,t;}var Fc=(cov_18tmdn9r60().s[928]++,Symbol("NotFound"));function Ht(e){cov_18tmdn9r60().f[417]++;cov_18tmdn9r60().s[929]++;return(cov_18tmdn9r60().b[382][0]++,e===Fc)||(cov_18tmdn9r60().b[382][1]++,e?.name==="\u0275NotFound");}function Ti(e,t,n){cov_18tmdn9r60().f[418]++;let r=(cov_18tmdn9r60().s[930]++,Object.create(Kp));cov_18tmdn9r60().s[931]++;r.source=e,r.computation=t,(cov_18tmdn9r60().b[383][0]++,n!=null)&&(cov_18tmdn9r60().b[383][1]++,r.equal=n);cov_18tmdn9r60().s[932]++;let i=()=>{cov_18tmdn9r60().f[419]++;cov_18tmdn9r60().s[933]++;if(ct(r),at(r),r.value===ye){cov_18tmdn9r60().b[384][0]++;cov_18tmdn9r60().s[934]++;throw r.error;}else{cov_18tmdn9r60().b[384][1]++;}cov_18tmdn9r60().s[935]++;return r.value;};cov_18tmdn9r60().s[936]++;return i[W]=r,gn(r),i;}function jc(e,t){cov_18tmdn9r60().f[420]++;cov_18tmdn9r60().s[937]++;ct(e),dt(e,t),jt(e);}function Vc(e,t){cov_18tmdn9r60().f[421]++;cov_18tmdn9r60().s[938]++;if(ct(e),e.value===ye){cov_18tmdn9r60().b[385][0]++;cov_18tmdn9r60().s[939]++;throw e.error;}else{cov_18tmdn9r60().b[385][1]++;}cov_18tmdn9r60().s[940]++;kr(e,t),jt(e);}var Kp=(cov_18tmdn9r60().s[941]++,$(B({},Ue),{value:$e,dirty:!0,error:null,equal:mn,kind:"linkedSignal",producerMustRecompute(e){cov_18tmdn9r60().f[422]++;cov_18tmdn9r60().s[942]++;return(cov_18tmdn9r60().b[386][0]++,e.value===$e)||(cov_18tmdn9r60().b[386][1]++,e.value===st);},producerRecomputeValue(e){cov_18tmdn9r60().f[423]++;cov_18tmdn9r60().s[943]++;if(e.value===st){cov_18tmdn9r60().b[387][0]++;cov_18tmdn9r60().s[944]++;throw new Error("");}else{cov_18tmdn9r60().b[387][1]++;}let t=(cov_18tmdn9r60().s[945]++,e.value);cov_18tmdn9r60().s[946]++;e.value=st;let n=(cov_18tmdn9r60().s[947]++,We(e)),r;cov_18tmdn9r60().s[948]++;try{let o=(cov_18tmdn9r60().s[949]++,e.source()),i=(cov_18tmdn9r60().s[950]++,(cov_18tmdn9r60().b[389][0]++,t===$e)||(cov_18tmdn9r60().b[389][1]++,t===ye)?(cov_18tmdn9r60().b[388][0]++,void 0):(cov_18tmdn9r60().b[388][1]++,{source:e.sourceValue,value:t}));cov_18tmdn9r60().s[951]++;r=e.computation(o,i),e.sourceValue=o;}catch(o){cov_18tmdn9r60().s[952]++;r=ye,e.error=o;}finally{cov_18tmdn9r60().s[953]++;lt(e,n);}cov_18tmdn9r60().s[954]++;if((cov_18tmdn9r60().b[391][0]++,t!==$e)&&(cov_18tmdn9r60().b[391][1]++,r!==ye)&&(cov_18tmdn9r60().b[391][2]++,e.equal(t,r))){cov_18tmdn9r60().b[390][0]++;cov_18tmdn9r60().s[955]++;e.value=t;cov_18tmdn9r60().s[956]++;return;}else{cov_18tmdn9r60().b[390][1]++;}cov_18tmdn9r60().s[957]++;e.value=r,e.version++;}}));function Hc(e){cov_18tmdn9r60().f[424]++;let t=(cov_18tmdn9r60().s[958]++,g(null));cov_18tmdn9r60().s[959]++;try{cov_18tmdn9r60().s[960]++;return e();}finally{cov_18tmdn9r60().s[961]++;g(t);}}cov_18tmdn9r60().s[963]++;var $r=(cov_18tmdn9r60().s[962]++,"https://angular.dev/best-practices/security#preventing-cross-site-scripting-xss"),T=class extends Error{code;constructor(t,n){cov_18tmdn9r60().f[425]++;cov_18tmdn9r60().s[964]++;super(wn(t,n)),this.code=t;}};function Jp(e){cov_18tmdn9r60().f[426]++;cov_18tmdn9r60().s[965]++;return`NG0${Math.abs(e)}`;}function wn(e,t){cov_18tmdn9r60().f[427]++;cov_18tmdn9r60().s[966]++;return`${Jp(e)}${t?(cov_18tmdn9r60().b[392][0]++,": "+t):(cov_18tmdn9r60().b[392][1]++,"")}`;}var Qe=(cov_18tmdn9r60().s[967]++,globalThis);function S(e){cov_18tmdn9r60().f[428]++;cov_18tmdn9r60().s[968]++;for(let t in e){cov_18tmdn9r60().s[969]++;if(e[t]===S){cov_18tmdn9r60().b[393][0]++;cov_18tmdn9r60().s[970]++;return t;}else{cov_18tmdn9r60().b[393][1]++;}}cov_18tmdn9r60().s[971]++;throw Error("");}function qc(e,t){cov_18tmdn9r60().f[429]++;cov_18tmdn9r60().s[972]++;for(let n in t){cov_18tmdn9r60().s[973]++;(cov_18tmdn9r60().b[394][0]++,t.hasOwnProperty(n))&&(cov_18tmdn9r60().b[394][1]++,!e.hasOwnProperty(n))&&(cov_18tmdn9r60().b[394][2]++,e[n]=t[n]);}}function Tn(e){cov_18tmdn9r60().f[430]++;cov_18tmdn9r60().s[974]++;if(typeof e=="string"){cov_18tmdn9r60().b[395][0]++;cov_18tmdn9r60().s[975]++;return e;}else{cov_18tmdn9r60().b[395][1]++;}cov_18tmdn9r60().s[976]++;if(Array.isArray(e)){cov_18tmdn9r60().b[396][0]++;cov_18tmdn9r60().s[977]++;return`[${e.map(Tn).join(", ")}]`;}else{cov_18tmdn9r60().b[396][1]++;}cov_18tmdn9r60().s[978]++;if(e==null){cov_18tmdn9r60().b[397][0]++;cov_18tmdn9r60().s[979]++;return""+e;}else{cov_18tmdn9r60().b[397][1]++;}let t=(cov_18tmdn9r60().s[980]++,(cov_18tmdn9r60().b[398][0]++,e.overriddenName)||(cov_18tmdn9r60().b[398][1]++,e.name));cov_18tmdn9r60().s[981]++;if(t){cov_18tmdn9r60().b[399][0]++;cov_18tmdn9r60().s[982]++;return`${t}`;}else{cov_18tmdn9r60().b[399][1]++;}let n=(cov_18tmdn9r60().s[983]++,e.toString());cov_18tmdn9r60().s[984]++;if(n==null){cov_18tmdn9r60().b[400][0]++;cov_18tmdn9r60().s[985]++;return""+n;}else{cov_18tmdn9r60().b[400][1]++;}let r=(cov_18tmdn9r60().s[986]++,n.indexOf(` +`));cov_18tmdn9r60().s[987]++;return r>=0?(cov_18tmdn9r60().b[401][0]++,n.slice(0,r)):(cov_18tmdn9r60().b[401][1]++,n);}function Ur(e,t){cov_18tmdn9r60().f[431]++;cov_18tmdn9r60().s[988]++;return e?(cov_18tmdn9r60().b[402][0]++,t?(cov_18tmdn9r60().b[403][0]++,`${e} ${t}`):(cov_18tmdn9r60().b[403][1]++,e)):(cov_18tmdn9r60().b[402][1]++,(cov_18tmdn9r60().b[404][0]++,t)||(cov_18tmdn9r60().b[404][1]++,""));}var Xp=(cov_18tmdn9r60().s[989]++,S({__forward_ref__:S}));function Wr(e){cov_18tmdn9r60().f[432]++;cov_18tmdn9r60().s[990]++;return e.__forward_ref__=Wr,e;}function q(e){cov_18tmdn9r60().f[433]++;cov_18tmdn9r60().s[991]++;return Fi(e)?(cov_18tmdn9r60().b[405][0]++,e()):(cov_18tmdn9r60().b[405][1]++,e);}function Fi(e){cov_18tmdn9r60().f[434]++;cov_18tmdn9r60().s[992]++;return(cov_18tmdn9r60().b[406][0]++,typeof e=="function")&&(cov_18tmdn9r60().b[406][1]++,e.hasOwnProperty(Xp))&&(cov_18tmdn9r60().b[406][2]++,e.__forward_ref__===Wr);}function V(e){cov_18tmdn9r60().f[435]++;cov_18tmdn9r60().s[993]++;return{token:e.token,providedIn:(cov_18tmdn9r60().b[407][0]++,e.providedIn)||(cov_18tmdn9r60().b[407][1]++,null),factory:e.factory,value:void 0};}function Gc(e){cov_18tmdn9r60().f[436]++;cov_18tmdn9r60().s[994]++;return{providers:(cov_18tmdn9r60().b[408][0]++,e.providers)||(cov_18tmdn9r60().b[408][1]++,[]),imports:(cov_18tmdn9r60().b[409][0]++,e.imports)||(cov_18tmdn9r60().b[409][1]++,[])};}function bn(e){cov_18tmdn9r60().f[437]++;cov_18tmdn9r60().s[995]++;return th(e,qr);}function eh(e){cov_18tmdn9r60().f[438]++;cov_18tmdn9r60().s[996]++;return bn(e)!==null;}function th(e,t){cov_18tmdn9r60().f[439]++;cov_18tmdn9r60().s[997]++;return(cov_18tmdn9r60().b[410][0]++,e.hasOwnProperty(t))&&(cov_18tmdn9r60().b[410][1]++,e[t])||(cov_18tmdn9r60().b[410][2]++,null);}function nh(e){cov_18tmdn9r60().f[440]++;let t=(cov_18tmdn9r60().s[998]++,(cov_18tmdn9r60().b[411][0]++,e?.[qr])??(cov_18tmdn9r60().b[411][1]++,null));cov_18tmdn9r60().s[999]++;return(cov_18tmdn9r60().b[412][0]++,t)||(cov_18tmdn9r60().b[412][1]++,null);}function _i(e){cov_18tmdn9r60().f[441]++;cov_18tmdn9r60().s[1000]++;return(cov_18tmdn9r60().b[414][0]++,e)&&(cov_18tmdn9r60().b[414][1]++,e.hasOwnProperty(Fr))?(cov_18tmdn9r60().b[413][0]++,e[Fr]):(cov_18tmdn9r60().b[413][1]++,null);}cov_18tmdn9r60().s[1003]++;var qr=(cov_18tmdn9r60().s[1001]++,S({ɵprov:S})),Fr=(cov_18tmdn9r60().s[1002]++,S({ɵinj:S})),N=class{_desc;ngMetadataName=(cov_18tmdn9r60().s[1004]++,"InjectionToken");ɵprov;constructor(t,n){cov_18tmdn9r60().f[442]++;cov_18tmdn9r60().s[1005]++;this._desc=t,this.ɵprov=void 0,typeof n=="number"?(cov_18tmdn9r60().b[415][0]++,this.__NG_ELEMENT_ID__=n):(cov_18tmdn9r60().b[415][1]++,(cov_18tmdn9r60().b[416][0]++,n!==void 0)&&(cov_18tmdn9r60().b[416][1]++,this.ɵprov=V({token:this,providedIn:(cov_18tmdn9r60().b[417][0]++,n.providedIn)||(cov_18tmdn9r60().b[417][1]++,"root"),factory:n.factory})));}get multi(){cov_18tmdn9r60().f[443]++;cov_18tmdn9r60().s[1006]++;return this;}toString(){cov_18tmdn9r60().f[444]++;cov_18tmdn9r60().s[1007]++;return`InjectionToken ${this._desc}`;}};function ji(e){cov_18tmdn9r60().f[445]++;cov_18tmdn9r60().s[1008]++;return(cov_18tmdn9r60().b[418][0]++,e)&&(cov_18tmdn9r60().b[418][1]++,!!e.ɵproviders);}var Vi=(cov_18tmdn9r60().s[1009]++,S({ɵcmp:S})),Hi=(cov_18tmdn9r60().s[1010]++,S({ɵdir:S})),Bi=(cov_18tmdn9r60().s[1011]++,S({ɵpipe:S})),$i=(cov_18tmdn9r60().s[1012]++,S({ɵmod:S})),vn=(cov_18tmdn9r60().s[1013]++,S({ɵfac:S})),mt=(cov_18tmdn9r60().s[1014]++,S({__NG_ELEMENT_ID__:S})),Bc=(cov_18tmdn9r60().s[1015]++,S({__NG_ENV_ID__:S}));function Ui(e){cov_18tmdn9r60().f[446]++;cov_18tmdn9r60().s[1016]++;return Gr(e,"@NgModule"),(cov_18tmdn9r60().b[419][0]++,e[$i])||(cov_18tmdn9r60().b[419][1]++,null);}function Re(e){cov_18tmdn9r60().f[447]++;cov_18tmdn9r60().s[1017]++;return Gr(e,"@Component"),(cov_18tmdn9r60().b[420][0]++,e[Vi])||(cov_18tmdn9r60().b[420][1]++,null);}function Wi(e){cov_18tmdn9r60().f[448]++;cov_18tmdn9r60().s[1018]++;return Gr(e,"@Directive"),(cov_18tmdn9r60().b[421][0]++,e[Hi])||(cov_18tmdn9r60().b[421][1]++,null);}function zc(e){cov_18tmdn9r60().f[449]++;cov_18tmdn9r60().s[1019]++;return Gr(e,"@Pipe"),(cov_18tmdn9r60().b[422][0]++,e[Bi])||(cov_18tmdn9r60().b[422][1]++,null);}function Gr(e,t){cov_18tmdn9r60().f[450]++;cov_18tmdn9r60().s[1020]++;if(e==null){cov_18tmdn9r60().b[423][0]++;cov_18tmdn9r60().s[1021]++;throw new T(-919,!1);}else{cov_18tmdn9r60().b[423][1]++;}}function $t(e){cov_18tmdn9r60().f[451]++;cov_18tmdn9r60().s[1022]++;return typeof e=="string"?(cov_18tmdn9r60().b[424][0]++,e):(cov_18tmdn9r60().b[424][1]++,e==null?(cov_18tmdn9r60().b[425][0]++,""):(cov_18tmdn9r60().b[425][1]++,String(e)));}var Qc=(cov_18tmdn9r60().s[1023]++,S({ngErrorCode:S})),rh=(cov_18tmdn9r60().s[1024]++,S({ngErrorMessage:S})),oh=(cov_18tmdn9r60().s[1025]++,S({ngTokenPath:S}));function qi(e,t){cov_18tmdn9r60().f[452]++;cov_18tmdn9r60().s[1026]++;return Zc("",-200,t);}function zr(e,t){cov_18tmdn9r60().f[453]++;cov_18tmdn9r60().s[1027]++;throw new T(-201,!1);}function Zc(e,t,n){cov_18tmdn9r60().f[454]++;let r=(cov_18tmdn9r60().s[1028]++,new T(t,e));cov_18tmdn9r60().s[1029]++;return r[Qc]=t,r[rh]=e,(cov_18tmdn9r60().b[426][0]++,n)&&(cov_18tmdn9r60().b[426][1]++,r[oh]=n),r;}function ih(e){cov_18tmdn9r60().f[455]++;cov_18tmdn9r60().s[1030]++;return e[Qc];}var Mi;function Yc(){cov_18tmdn9r60().f[456]++;cov_18tmdn9r60().s[1031]++;return Mi;}function Y(e){cov_18tmdn9r60().f[457]++;let t=(cov_18tmdn9r60().s[1032]++,Mi);cov_18tmdn9r60().s[1033]++;return Mi=e,t;}function Gi(e,t,n){cov_18tmdn9r60().f[458]++;let r=(cov_18tmdn9r60().s[1034]++,bn(e));cov_18tmdn9r60().s[1035]++;if((cov_18tmdn9r60().b[428][0]++,r)&&(cov_18tmdn9r60().b[428][1]++,r.providedIn=="root")){cov_18tmdn9r60().b[427][0]++;cov_18tmdn9r60().s[1036]++;return r.value===void 0?(cov_18tmdn9r60().b[429][0]++,r.value=r.factory()):(cov_18tmdn9r60().b[429][1]++,r.value);}else{cov_18tmdn9r60().b[427][1]++;}cov_18tmdn9r60().s[1037]++;if(n&8){cov_18tmdn9r60().b[430][0]++;cov_18tmdn9r60().s[1038]++;return null;}else{cov_18tmdn9r60().b[430][1]++;}cov_18tmdn9r60().s[1039]++;if(t!==void 0){cov_18tmdn9r60().b[431][0]++;cov_18tmdn9r60().s[1040]++;return t;}else{cov_18tmdn9r60().b[431][1]++;}cov_18tmdn9r60().s[1041]++;zr(e,"");}cov_18tmdn9r60().s[1045]++;var sh=(cov_18tmdn9r60().s[1042]++,{}),ft=(cov_18tmdn9r60().s[1043]++,sh),ah=(cov_18tmdn9r60().s[1044]++,"__NG_DI_FLAG__"),Ni=class{injector;constructor(t){cov_18tmdn9r60().f[459]++;cov_18tmdn9r60().s[1046]++;this.injector=t;}retrieve(t,n){cov_18tmdn9r60().f[460]++;let r=(cov_18tmdn9r60().s[1047]++,(cov_18tmdn9r60().b[432][0]++,pt(n))||(cov_18tmdn9r60().b[432][1]++,0));cov_18tmdn9r60().s[1048]++;try{cov_18tmdn9r60().s[1049]++;return this.injector.get(t,r&8?(cov_18tmdn9r60().b[433][0]++,null):(cov_18tmdn9r60().b[433][1]++,ft),r);}catch(o){cov_18tmdn9r60().s[1050]++;if(Ht(o)){cov_18tmdn9r60().b[434][0]++;cov_18tmdn9r60().s[1051]++;return o;}else{cov_18tmdn9r60().b[434][1]++;}cov_18tmdn9r60().s[1052]++;throw o;}}};function ch(e,t=(cov_18tmdn9r60().b[435][0]++,0)){cov_18tmdn9r60().f[461]++;let n=(cov_18tmdn9r60().s[1053]++,Pr());cov_18tmdn9r60().s[1054]++;if(n===void 0){cov_18tmdn9r60().b[436][0]++;cov_18tmdn9r60().s[1055]++;throw new T(-203,!1);}else{cov_18tmdn9r60().b[436][1]++;}cov_18tmdn9r60().s[1056]++;if(n===null){cov_18tmdn9r60().b[437][0]++;cov_18tmdn9r60().s[1057]++;return Gi(e,void 0,t);}else{cov_18tmdn9r60().b[437][1]++;}{let r=(cov_18tmdn9r60().s[1058]++,lh(t)),o=(cov_18tmdn9r60().s[1059]++,n.retrieve(e,r));cov_18tmdn9r60().s[1060]++;if(Ht(o)){cov_18tmdn9r60().b[438][0]++;cov_18tmdn9r60().s[1061]++;if(r.optional){cov_18tmdn9r60().b[439][0]++;cov_18tmdn9r60().s[1062]++;return null;}else{cov_18tmdn9r60().b[439][1]++;}cov_18tmdn9r60().s[1063]++;throw o;}else{cov_18tmdn9r60().b[438][1]++;}cov_18tmdn9r60().s[1064]++;return o;}}function Ee(e,t=(cov_18tmdn9r60().b[440][0]++,0)){cov_18tmdn9r60().f[462]++;cov_18tmdn9r60().s[1065]++;return((cov_18tmdn9r60().b[441][0]++,Yc())||(cov_18tmdn9r60().b[441][1]++,ch))(q(e),t);}function E(e,t){cov_18tmdn9r60().f[463]++;cov_18tmdn9r60().s[1066]++;return Ee(e,pt(t));}function pt(e){cov_18tmdn9r60().f[464]++;cov_18tmdn9r60().s[1067]++;return(cov_18tmdn9r60().b[443][0]++,typeof e>"u")||(cov_18tmdn9r60().b[443][1]++,typeof e=="number")?(cov_18tmdn9r60().b[442][0]++,e):(cov_18tmdn9r60().b[442][1]++,0|((cov_18tmdn9r60().b[444][0]++,e.optional)&&(cov_18tmdn9r60().b[444][1]++,8))|((cov_18tmdn9r60().b[445][0]++,e.host)&&(cov_18tmdn9r60().b[445][1]++,1))|((cov_18tmdn9r60().b[446][0]++,e.self)&&(cov_18tmdn9r60().b[446][1]++,2))|((cov_18tmdn9r60().b[447][0]++,e.skipSelf)&&(cov_18tmdn9r60().b[447][1]++,4)));}function lh(e){cov_18tmdn9r60().f[465]++;cov_18tmdn9r60().s[1068]++;return{optional:!!(e&8),host:!!(e&1),self:!!(e&2),skipSelf:!!(e&4)};}function Si(e){cov_18tmdn9r60().f[466]++;let t=(cov_18tmdn9r60().s[1069]++,[]);cov_18tmdn9r60().s[1070]++;for(let n=(cov_18tmdn9r60().s[1071]++,0);n{cov_18tmdn9r60().f[472]++;cov_18tmdn9r60().s[1099]++;return Array.isArray(n)?(cov_18tmdn9r60().b[456][0]++,Qr(n,t)):(cov_18tmdn9r60().b[456][1]++,t(n));});}function zi(e,t,n){cov_18tmdn9r60().f[473]++;cov_18tmdn9r60().s[1100]++;t>=e.length?(cov_18tmdn9r60().b[457][0]++,e.push(n)):(cov_18tmdn9r60().b[457][1]++,e.splice(t,0,n));}function _n(e,t){cov_18tmdn9r60().f[474]++;cov_18tmdn9r60().s[1101]++;return t>=e.length-1?(cov_18tmdn9r60().b[458][0]++,e.pop()):(cov_18tmdn9r60().b[458][1]++,e.splice(t,1)[0]);}function Xc(e,t){cov_18tmdn9r60().f[475]++;let n=(cov_18tmdn9r60().s[1102]++,[]);cov_18tmdn9r60().s[1103]++;for(let r=(cov_18tmdn9r60().s[1104]++,0);rt;){let i=(cov_18tmdn9r60().s[1113]++,o-2);cov_18tmdn9r60().s[1114]++;e[o]=e[i],o--;}cov_18tmdn9r60().s[1115]++;e[t]=n,e[t+1]=r;}}}function Zr(e,t,n){cov_18tmdn9r60().f[477]++;let r=(cov_18tmdn9r60().s[1116]++,Ut(e,t));cov_18tmdn9r60().s[1117]++;return r>=0?(cov_18tmdn9r60().b[461][0]++,e[r|1]=n):(cov_18tmdn9r60().b[461][1]++,r=~r,el(e,r,t,n)),r;}function Yr(e,t){cov_18tmdn9r60().f[478]++;let n=(cov_18tmdn9r60().s[1118]++,Ut(e,t));cov_18tmdn9r60().s[1119]++;if(n>=0){cov_18tmdn9r60().b[462][0]++;cov_18tmdn9r60().s[1120]++;return e[n|1];}else{cov_18tmdn9r60().b[462][1]++;}}function Ut(e,t){cov_18tmdn9r60().f[479]++;cov_18tmdn9r60().s[1121]++;return dh(e,t,1);}function dh(e,t,n){cov_18tmdn9r60().f[480]++;let r=(cov_18tmdn9r60().s[1122]++,0),o=(cov_18tmdn9r60().s[1123]++,e.length>>n);cov_18tmdn9r60().s[1124]++;for(;o!==r;){let i=(cov_18tmdn9r60().s[1125]++,r+(o-r>>1)),s=(cov_18tmdn9r60().s[1126]++,e[i<t?(cov_18tmdn9r60().b[464][0]++,o=i):(cov_18tmdn9r60().b[464][1]++,r=i+1);}cov_18tmdn9r60().s[1130]++;return~(o<{cov_18tmdn9r60().f[486]++;cov_18tmdn9r60().s[1147]++;n.push(s);};cov_18tmdn9r60().s[1148]++;return Qr(t,s=>{cov_18tmdn9r60().f[487]++;let a=(cov_18tmdn9r60().s[1149]++,s);cov_18tmdn9r60().s[1150]++;(cov_18tmdn9r60().b[467][0]++,jr(a,i,[],r))&&(cov_18tmdn9r60().b[467][1]++,o||=[],o.push(a));}),(cov_18tmdn9r60().b[468][0]++,o!==void 0)&&(cov_18tmdn9r60().b[468][1]++,rl(o,i)),n;}function rl(e,t){cov_18tmdn9r60().f[488]++;cov_18tmdn9r60().s[1151]++;for(let n=(cov_18tmdn9r60().s[1152]++,0);n{cov_18tmdn9r60().f[489]++;cov_18tmdn9r60().s[1155]++;t(i,r);});}}function jr(e,t,n,r){cov_18tmdn9r60().f[490]++;cov_18tmdn9r60().s[1156]++;if(e=q(e),!e){cov_18tmdn9r60().b[469][0]++;cov_18tmdn9r60().s[1157]++;return!1;}else{cov_18tmdn9r60().b[469][1]++;}let o=(cov_18tmdn9r60().s[1158]++,null),i=(cov_18tmdn9r60().s[1159]++,_i(e)),s=(cov_18tmdn9r60().s[1160]++,(cov_18tmdn9r60().b[470][0]++,!i)&&(cov_18tmdn9r60().b[470][1]++,Re(e)));cov_18tmdn9r60().s[1161]++;if((cov_18tmdn9r60().b[472][0]++,!i)&&(cov_18tmdn9r60().b[472][1]++,!s)){cov_18tmdn9r60().b[471][0]++;let c=(cov_18tmdn9r60().s[1162]++,e.ngModule);cov_18tmdn9r60().s[1163]++;if(i=_i(c),i){cov_18tmdn9r60().b[473][0]++;cov_18tmdn9r60().s[1164]++;o=c;}else{cov_18tmdn9r60().b[473][1]++;cov_18tmdn9r60().s[1165]++;return!1;}}else{cov_18tmdn9r60().b[471][1]++;cov_18tmdn9r60().s[1166]++;if((cov_18tmdn9r60().b[475][0]++,s)&&(cov_18tmdn9r60().b[475][1]++,!s.standalone)){cov_18tmdn9r60().b[474][0]++;cov_18tmdn9r60().s[1167]++;return!1;}else{cov_18tmdn9r60().b[474][1]++;}cov_18tmdn9r60().s[1168]++;o=e;}let a=(cov_18tmdn9r60().s[1169]++,r.has(o));cov_18tmdn9r60().s[1170]++;if(s){cov_18tmdn9r60().b[476][0]++;cov_18tmdn9r60().s[1171]++;if(a){cov_18tmdn9r60().b[477][0]++;cov_18tmdn9r60().s[1172]++;return!1;}else{cov_18tmdn9r60().b[477][1]++;}cov_18tmdn9r60().s[1173]++;if(r.add(o),s.dependencies){cov_18tmdn9r60().b[478][0]++;let c=(cov_18tmdn9r60().s[1174]++,typeof s.dependencies=="function"?(cov_18tmdn9r60().b[479][0]++,s.dependencies()):(cov_18tmdn9r60().b[479][1]++,s.dependencies));cov_18tmdn9r60().s[1175]++;for(let l of c){cov_18tmdn9r60().s[1176]++;jr(l,t,n,r);}}else{cov_18tmdn9r60().b[478][1]++;}}else{cov_18tmdn9r60().b[476][1]++;cov_18tmdn9r60().s[1177]++;if(i){cov_18tmdn9r60().b[480][0]++;cov_18tmdn9r60().s[1178]++;if((cov_18tmdn9r60().b[482][0]++,i.imports!=null)&&(cov_18tmdn9r60().b[482][1]++,!a)){cov_18tmdn9r60().b[481][0]++;cov_18tmdn9r60().s[1179]++;r.add(o);let l;cov_18tmdn9r60().s[1180]++;Qr(i.imports,u=>{cov_18tmdn9r60().f[491]++;cov_18tmdn9r60().s[1181]++;(cov_18tmdn9r60().b[483][0]++,jr(u,t,n,r))&&(cov_18tmdn9r60().b[483][1]++,l||=[],l.push(u));}),(cov_18tmdn9r60().b[484][0]++,l!==void 0)&&(cov_18tmdn9r60().b[484][1]++,rl(l,t));}else{cov_18tmdn9r60().b[481][1]++;}cov_18tmdn9r60().s[1182]++;if(!a){cov_18tmdn9r60().b[485][0]++;let l=(cov_18tmdn9r60().s[1183]++,(cov_18tmdn9r60().b[486][0]++,qe(o))||(cov_18tmdn9r60().b[486][1]++,()=>{cov_18tmdn9r60().f[492]++;cov_18tmdn9r60().s[1184]++;return new o();}));cov_18tmdn9r60().s[1185]++;t({provide:o,useFactory:l,deps:K},o),t({provide:Zi,useValue:o,multi:!0},o),t({provide:Wt,useValue:()=>{cov_18tmdn9r60().f[493]++;cov_18tmdn9r60().s[1186]++;return Ee(o);},multi:!0},o);}else{cov_18tmdn9r60().b[485][1]++;}let c=(cov_18tmdn9r60().s[1187]++,i.providers);cov_18tmdn9r60().s[1188]++;if((cov_18tmdn9r60().b[488][0]++,c!=null)&&(cov_18tmdn9r60().b[488][1]++,!a)){cov_18tmdn9r60().b[487][0]++;let l=(cov_18tmdn9r60().s[1189]++,e);cov_18tmdn9r60().s[1190]++;Ki(c,u=>{cov_18tmdn9r60().f[494]++;cov_18tmdn9r60().s[1191]++;t(u,l);});}else{cov_18tmdn9r60().b[487][1]++;}}else{cov_18tmdn9r60().b[480][1]++;cov_18tmdn9r60().s[1192]++;return!1;}}cov_18tmdn9r60().s[1193]++;return(cov_18tmdn9r60().b[489][0]++,o!==e)&&(cov_18tmdn9r60().b[489][1]++,e.providers!==void 0);}function Ki(e,t){cov_18tmdn9r60().f[495]++;cov_18tmdn9r60().s[1194]++;for(let n of e){cov_18tmdn9r60().s[1195]++;(cov_18tmdn9r60().b[490][0]++,ji(n))&&(cov_18tmdn9r60().b[490][1]++,n=n.ɵproviders),Array.isArray(n)?(cov_18tmdn9r60().b[491][0]++,Ki(n,t)):(cov_18tmdn9r60().b[491][1]++,t(n));}}var fh=(cov_18tmdn9r60().s[1196]++,S({provide:String,useValue:S}));function ol(e){cov_18tmdn9r60().f[496]++;cov_18tmdn9r60().s[1197]++;return(cov_18tmdn9r60().b[492][0]++,e!==null)&&(cov_18tmdn9r60().b[492][1]++,typeof e=="object")&&(cov_18tmdn9r60().b[492][2]++,fh in e);}function ph(e){cov_18tmdn9r60().f[497]++;cov_18tmdn9r60().s[1198]++;return!!((cov_18tmdn9r60().b[493][0]++,e)&&(cov_18tmdn9r60().b[493][1]++,e.useExisting));}function hh(e){cov_18tmdn9r60().f[498]++;cov_18tmdn9r60().s[1199]++;return!!((cov_18tmdn9r60().b[494][0]++,e)&&(cov_18tmdn9r60().b[494][1]++,e.useFactory));}function ht(e){cov_18tmdn9r60().f[499]++;cov_18tmdn9r60().s[1200]++;return typeof e=="function";}function il(e){cov_18tmdn9r60().f[500]++;cov_18tmdn9r60().s[1201]++;return!!e.useClass;}var Ji=(cov_18tmdn9r60().s[1202]++,new N("")),Lr=(cov_18tmdn9r60().s[1203]++,{}),$c=(cov_18tmdn9r60().s[1204]++,{}),bi;function Nn(){cov_18tmdn9r60().f[501]++;cov_18tmdn9r60().s[1205]++;return(cov_18tmdn9r60().b[495][0]++,bi===void 0)&&(cov_18tmdn9r60().b[495][1]++,bi=new En()),bi;}cov_18tmdn9r60().s[1206]++;cov_18tmdn9r60().s[1207]++;var re=class{},gt=class extends re{parent;source;scopes;records=(cov_18tmdn9r60().s[1208]++,new Map());_ngOnDestroyHooks=(cov_18tmdn9r60().s[1209]++,new Set());_onDestroyHooks=(cov_18tmdn9r60().s[1210]++,[]);get destroyed(){cov_18tmdn9r60().f[502]++;cov_18tmdn9r60().s[1211]++;return this._destroyed;}_destroyed=(cov_18tmdn9r60().s[1212]++,!1);injectorDefTypes;constructor(t,n,r,o){cov_18tmdn9r60().f[503]++;cov_18tmdn9r60().s[1213]++;super(),this.parent=n,this.source=r,this.scopes=o,Ai(t,s=>{cov_18tmdn9r60().f[504]++;cov_18tmdn9r60().s[1214]++;return this.processProvider(s);}),this.records.set(Qi,Bt(void 0,this)),(cov_18tmdn9r60().b[496][0]++,o.has("environment"))&&(cov_18tmdn9r60().b[496][1]++,this.records.set(re,Bt(void 0,this)));let i=(cov_18tmdn9r60().s[1215]++,this.records.get(Ji));cov_18tmdn9r60().s[1216]++;(cov_18tmdn9r60().b[497][0]++,i!=null)&&(cov_18tmdn9r60().b[497][1]++,typeof i.value=="string")&&(cov_18tmdn9r60().b[497][2]++,this.scopes.add(i.value)),this.injectorDefTypes=new Set(this.get(Zi,K,{self:!0}));}retrieve(t,n){cov_18tmdn9r60().f[505]++;let r=(cov_18tmdn9r60().s[1217]++,(cov_18tmdn9r60().b[498][0]++,pt(n))||(cov_18tmdn9r60().b[498][1]++,0));cov_18tmdn9r60().s[1218]++;try{cov_18tmdn9r60().s[1219]++;return this.get(t,ft,r);}catch(o){cov_18tmdn9r60().s[1220]++;if(Ht(o)){cov_18tmdn9r60().b[499][0]++;cov_18tmdn9r60().s[1221]++;return o;}else{cov_18tmdn9r60().b[499][1]++;}cov_18tmdn9r60().s[1222]++;throw o;}}destroy(){cov_18tmdn9r60().f[506]++;cov_18tmdn9r60().s[1223]++;yn(this),this._destroyed=!0;let t=(cov_18tmdn9r60().s[1224]++,g(null));cov_18tmdn9r60().s[1225]++;try{cov_18tmdn9r60().s[1226]++;for(let r of this._ngOnDestroyHooks){cov_18tmdn9r60().s[1227]++;r.ngOnDestroy();}let n=(cov_18tmdn9r60().s[1228]++,this._onDestroyHooks);cov_18tmdn9r60().s[1229]++;this._onDestroyHooks=[];cov_18tmdn9r60().s[1230]++;for(let r of n){cov_18tmdn9r60().s[1231]++;r();}}finally{cov_18tmdn9r60().s[1232]++;this.records.clear(),this._ngOnDestroyHooks.clear(),this.injectorDefTypes.clear(),g(t);}}onDestroy(t){cov_18tmdn9r60().f[507]++;cov_18tmdn9r60().s[1233]++;return yn(this),this._onDestroyHooks.push(t),()=>{cov_18tmdn9r60().f[508]++;cov_18tmdn9r60().s[1234]++;return this.removeOnDestroy(t);};}runInContext(t){cov_18tmdn9r60().f[509]++;cov_18tmdn9r60().s[1235]++;yn(this);let n=(cov_18tmdn9r60().s[1236]++,ve(this)),r=(cov_18tmdn9r60().s[1237]++,Y(void 0)),o;cov_18tmdn9r60().s[1238]++;try{cov_18tmdn9r60().s[1239]++;return t();}finally{cov_18tmdn9r60().s[1240]++;ve(n),Y(r);}}get(t,n=(cov_18tmdn9r60().b[500][0]++,ft),r){cov_18tmdn9r60().f[510]++;cov_18tmdn9r60().s[1241]++;if(yn(this),t.hasOwnProperty(Bc)){cov_18tmdn9r60().b[501][0]++;cov_18tmdn9r60().s[1242]++;return t[Bc](this);}else{cov_18tmdn9r60().b[501][1]++;}let o=(cov_18tmdn9r60().s[1243]++,pt(r)),i,s=(cov_18tmdn9r60().s[1244]++,ve(this)),a=(cov_18tmdn9r60().s[1245]++,Y(void 0));cov_18tmdn9r60().s[1246]++;try{cov_18tmdn9r60().s[1247]++;if(!(o&4)){cov_18tmdn9r60().b[502][0]++;let l=(cov_18tmdn9r60().s[1248]++,this.records.get(t));cov_18tmdn9r60().s[1249]++;if(l===void 0){cov_18tmdn9r60().b[503][0]++;let u=(cov_18tmdn9r60().s[1250]++,(cov_18tmdn9r60().b[504][0]++,Eh(t))&&(cov_18tmdn9r60().b[504][1]++,bn(t)));cov_18tmdn9r60().s[1251]++;(cov_18tmdn9r60().b[506][0]++,u)&&(cov_18tmdn9r60().b[506][1]++,this.injectableDefInScope(u))?(cov_18tmdn9r60().b[505][0]++,l=Bt(xi(t),Lr)):(cov_18tmdn9r60().b[505][1]++,l=null),this.records.set(t,l);}else{cov_18tmdn9r60().b[503][1]++;}cov_18tmdn9r60().s[1252]++;if(l!=null){cov_18tmdn9r60().b[507][0]++;cov_18tmdn9r60().s[1253]++;return this.hydrate(t,l,o);}else{cov_18tmdn9r60().b[507][1]++;}}else{cov_18tmdn9r60().b[502][1]++;}let c=(cov_18tmdn9r60().s[1254]++,o&2?(cov_18tmdn9r60().b[508][0]++,Nn()):(cov_18tmdn9r60().b[508][1]++,this.parent));cov_18tmdn9r60().s[1255]++;return n=(cov_18tmdn9r60().b[510][0]++,o&8)&&(cov_18tmdn9r60().b[510][1]++,n===ft)?(cov_18tmdn9r60().b[509][0]++,null):(cov_18tmdn9r60().b[509][1]++,n),c.get(t,n);}catch(c){let l=(cov_18tmdn9r60().s[1256]++,ih(c));cov_18tmdn9r60().s[1257]++;throw(cov_18tmdn9r60().b[512][0]++,l===-200)||(cov_18tmdn9r60().b[512][1]++,l===-201)?(cov_18tmdn9r60().b[511][0]++,new T(l,null)):(cov_18tmdn9r60().b[511][1]++,c);}finally{cov_18tmdn9r60().s[1258]++;Y(a),ve(s);}}resolveInjectorInitializers(){cov_18tmdn9r60().f[511]++;let t=(cov_18tmdn9r60().s[1259]++,g(null)),n=(cov_18tmdn9r60().s[1260]++,ve(this)),r=(cov_18tmdn9r60().s[1261]++,Y(void 0)),o;cov_18tmdn9r60().s[1262]++;try{let i=(cov_18tmdn9r60().s[1263]++,this.get(Wt,K,{self:!0}));cov_18tmdn9r60().s[1264]++;for(let s of i){cov_18tmdn9r60().s[1265]++;s();}}finally{cov_18tmdn9r60().s[1266]++;ve(n),Y(r),g(t);}}toString(){cov_18tmdn9r60().f[512]++;cov_18tmdn9r60().s[1267]++;return"R3Injector[...]";}processProvider(t){cov_18tmdn9r60().f[513]++;cov_18tmdn9r60().s[1268]++;t=q(t);let n=(cov_18tmdn9r60().s[1269]++,ht(t)?(cov_18tmdn9r60().b[513][0]++,t):(cov_18tmdn9r60().b[513][1]++,q((cov_18tmdn9r60().b[514][0]++,t)&&(cov_18tmdn9r60().b[514][1]++,t.provide)))),r=(cov_18tmdn9r60().s[1270]++,mh(t));cov_18tmdn9r60().s[1271]++;if((cov_18tmdn9r60().b[516][0]++,!ht(t))&&(cov_18tmdn9r60().b[516][1]++,t.multi===!0)){cov_18tmdn9r60().b[515][0]++;let o=(cov_18tmdn9r60().s[1272]++,this.records.get(n));cov_18tmdn9r60().s[1273]++;(cov_18tmdn9r60().b[517][0]++,o)||(cov_18tmdn9r60().b[517][1]++,o=Bt(void 0,Lr,!0),o.factory=()=>{cov_18tmdn9r60().f[514]++;cov_18tmdn9r60().s[1274]++;return Si(o.multi);},this.records.set(n,o)),n=t,o.multi.push(t);}else{cov_18tmdn9r60().b[515][1]++;}cov_18tmdn9r60().s[1275]++;this.records.set(n,r);}hydrate(t,n,r){cov_18tmdn9r60().f[515]++;let o=(cov_18tmdn9r60().s[1276]++,g(null));cov_18tmdn9r60().s[1277]++;try{cov_18tmdn9r60().s[1278]++;if(n.value===$c){cov_18tmdn9r60().b[518][0]++;cov_18tmdn9r60().s[1279]++;throw qi("");}else{cov_18tmdn9r60().b[518][1]++;}cov_18tmdn9r60().s[1280]++;return(cov_18tmdn9r60().b[519][0]++,n.value===Lr)&&(cov_18tmdn9r60().b[519][1]++,n.value=$c,n.value=n.factory(void 0,r)),(cov_18tmdn9r60().b[520][0]++,typeof n.value=="object")&&(cov_18tmdn9r60().b[520][1]++,n.value)&&(cov_18tmdn9r60().b[520][2]++,vh(n.value))&&(cov_18tmdn9r60().b[520][3]++,this._ngOnDestroyHooks.add(n.value)),n.value;}finally{cov_18tmdn9r60().s[1281]++;g(o);}}injectableDefInScope(t){cov_18tmdn9r60().f[516]++;cov_18tmdn9r60().s[1282]++;if(!t.providedIn){cov_18tmdn9r60().b[521][0]++;cov_18tmdn9r60().s[1283]++;return!1;}else{cov_18tmdn9r60().b[521][1]++;}let n=(cov_18tmdn9r60().s[1284]++,q(t.providedIn));cov_18tmdn9r60().s[1285]++;return typeof n=="string"?(cov_18tmdn9r60().b[522][0]++,(cov_18tmdn9r60().b[523][0]++,n==="any")||(cov_18tmdn9r60().b[523][1]++,this.scopes.has(n))):(cov_18tmdn9r60().b[522][1]++,this.injectorDefTypes.has(n));}removeOnDestroy(t){cov_18tmdn9r60().f[517]++;let n=(cov_18tmdn9r60().s[1286]++,this._onDestroyHooks.indexOf(t));cov_18tmdn9r60().s[1287]++;(cov_18tmdn9r60().b[524][0]++,n!==-1)&&(cov_18tmdn9r60().b[524][1]++,this._onDestroyHooks.splice(n,1));}};function xi(e){cov_18tmdn9r60().f[518]++;let t=(cov_18tmdn9r60().s[1288]++,bn(e)),n=(cov_18tmdn9r60().s[1289]++,t!==null?(cov_18tmdn9r60().b[525][0]++,t.factory):(cov_18tmdn9r60().b[525][1]++,qe(e)));cov_18tmdn9r60().s[1290]++;if(n!==null){cov_18tmdn9r60().b[526][0]++;cov_18tmdn9r60().s[1291]++;return n;}else{cov_18tmdn9r60().b[526][1]++;}cov_18tmdn9r60().s[1292]++;if(e instanceof N){cov_18tmdn9r60().b[527][0]++;cov_18tmdn9r60().s[1293]++;throw new T(-204,!1);}else{cov_18tmdn9r60().b[527][1]++;}cov_18tmdn9r60().s[1294]++;if(e instanceof Function){cov_18tmdn9r60().b[528][0]++;cov_18tmdn9r60().s[1295]++;return gh(e);}else{cov_18tmdn9r60().b[528][1]++;}cov_18tmdn9r60().s[1296]++;throw new T(-204,!1);}function gh(e){cov_18tmdn9r60().f[519]++;cov_18tmdn9r60().s[1297]++;if(e.length>0){cov_18tmdn9r60().b[529][0]++;cov_18tmdn9r60().s[1298]++;throw new T(-204,!1);}else{cov_18tmdn9r60().b[529][1]++;}let n=(cov_18tmdn9r60().s[1299]++,nh(e));cov_18tmdn9r60().s[1300]++;return n!==null?(cov_18tmdn9r60().b[530][0]++,()=>{cov_18tmdn9r60().f[520]++;cov_18tmdn9r60().s[1301]++;return n.factory(e);}):(cov_18tmdn9r60().b[530][1]++,()=>{cov_18tmdn9r60().f[521]++;cov_18tmdn9r60().s[1302]++;return new e();});}function mh(e){cov_18tmdn9r60().f[522]++;cov_18tmdn9r60().s[1303]++;if(ol(e)){cov_18tmdn9r60().b[531][0]++;cov_18tmdn9r60().s[1304]++;return Bt(void 0,e.useValue);}else{cov_18tmdn9r60().b[531][1]++;}{let t=(cov_18tmdn9r60().s[1305]++,Xi(e));cov_18tmdn9r60().s[1306]++;return Bt(t,Lr);}}function Xi(e,t,n){cov_18tmdn9r60().f[523]++;let r;cov_18tmdn9r60().s[1307]++;if(ht(e)){cov_18tmdn9r60().b[532][0]++;let o=(cov_18tmdn9r60().s[1308]++,q(e));cov_18tmdn9r60().s[1309]++;return(cov_18tmdn9r60().b[533][0]++,qe(o))||(cov_18tmdn9r60().b[533][1]++,xi(o));}else{cov_18tmdn9r60().b[532][1]++;cov_18tmdn9r60().s[1310]++;if(ol(e)){cov_18tmdn9r60().b[534][0]++;cov_18tmdn9r60().s[1311]++;r=()=>{cov_18tmdn9r60().f[524]++;cov_18tmdn9r60().s[1312]++;return q(e.useValue);};}else{cov_18tmdn9r60().b[534][1]++;cov_18tmdn9r60().s[1313]++;if(hh(e)){cov_18tmdn9r60().b[535][0]++;cov_18tmdn9r60().s[1314]++;r=()=>{cov_18tmdn9r60().f[525]++;cov_18tmdn9r60().s[1315]++;return e.useFactory(...Si((cov_18tmdn9r60().b[536][0]++,e.deps)||(cov_18tmdn9r60().b[536][1]++,[])));};}else{cov_18tmdn9r60().b[535][1]++;cov_18tmdn9r60().s[1316]++;if(ph(e)){cov_18tmdn9r60().b[537][0]++;cov_18tmdn9r60().s[1317]++;r=(o,i)=>{cov_18tmdn9r60().f[526]++;cov_18tmdn9r60().s[1318]++;return Ee(q(e.useExisting),(cov_18tmdn9r60().b[539][0]++,i!==void 0)&&(cov_18tmdn9r60().b[539][1]++,i&8)?(cov_18tmdn9r60().b[538][0]++,8):(cov_18tmdn9r60().b[538][1]++,void 0));};}else{cov_18tmdn9r60().b[537][1]++;let o=(cov_18tmdn9r60().s[1319]++,q((cov_18tmdn9r60().b[540][0]++,e)&&((cov_18tmdn9r60().b[540][1]++,e.useClass)||(cov_18tmdn9r60().b[540][2]++,e.provide))));cov_18tmdn9r60().s[1320]++;if(yh(e)){cov_18tmdn9r60().b[541][0]++;cov_18tmdn9r60().s[1321]++;r=()=>{cov_18tmdn9r60().f[527]++;cov_18tmdn9r60().s[1322]++;return new o(...Si(e.deps));};}else{cov_18tmdn9r60().b[541][1]++;cov_18tmdn9r60().s[1323]++;return(cov_18tmdn9r60().b[542][0]++,qe(o))||(cov_18tmdn9r60().b[542][1]++,xi(o));}}}}}cov_18tmdn9r60().s[1324]++;return r;}function yn(e){cov_18tmdn9r60().f[528]++;cov_18tmdn9r60().s[1325]++;if(e.destroyed){cov_18tmdn9r60().b[543][0]++;cov_18tmdn9r60().s[1326]++;throw new T(-205,!1);}else{cov_18tmdn9r60().b[543][1]++;}}function Bt(e,t,n=(cov_18tmdn9r60().b[544][0]++,!1)){cov_18tmdn9r60().f[529]++;cov_18tmdn9r60().s[1327]++;return{factory:e,value:t,multi:n?(cov_18tmdn9r60().b[545][0]++,[]):(cov_18tmdn9r60().b[545][1]++,void 0)};}function yh(e){cov_18tmdn9r60().f[530]++;cov_18tmdn9r60().s[1328]++;return!!e.deps;}function vh(e){cov_18tmdn9r60().f[531]++;cov_18tmdn9r60().s[1329]++;return(cov_18tmdn9r60().b[546][0]++,e!==null)&&(cov_18tmdn9r60().b[546][1]++,typeof e=="object")&&(cov_18tmdn9r60().b[546][2]++,typeof e.ngOnDestroy=="function");}function Eh(e){cov_18tmdn9r60().f[532]++;cov_18tmdn9r60().s[1330]++;return(cov_18tmdn9r60().b[547][0]++,typeof e=="function")||(cov_18tmdn9r60().b[547][1]++,typeof e=="object")&&(cov_18tmdn9r60().b[547][2]++,e.ngMetadataName==="InjectionToken");}function Ai(e,t){cov_18tmdn9r60().f[533]++;cov_18tmdn9r60().s[1331]++;for(let n of e){cov_18tmdn9r60().s[1332]++;Array.isArray(n)?(cov_18tmdn9r60().b[548][0]++,Ai(n,t)):(cov_18tmdn9r60().b[548][1]++,(cov_18tmdn9r60().b[550][0]++,n)&&(cov_18tmdn9r60().b[550][1]++,ji(n))?(cov_18tmdn9r60().b[549][0]++,Ai(n.ɵproviders,t)):(cov_18tmdn9r60().b[549][1]++,t(n)));}}function Kr(e,t){cov_18tmdn9r60().f[534]++;let n;cov_18tmdn9r60().s[1333]++;e instanceof gt?(cov_18tmdn9r60().b[551][0]++,yn(e),n=e):(cov_18tmdn9r60().b[551][1]++,n=new Ni(e));let r,o=(cov_18tmdn9r60().s[1334]++,ve(n)),i=(cov_18tmdn9r60().s[1335]++,Y(void 0));cov_18tmdn9r60().s[1336]++;try{cov_18tmdn9r60().s[1337]++;return t();}finally{cov_18tmdn9r60().s[1338]++;ve(o),Y(i);}}function sl(){cov_18tmdn9r60().f[535]++;cov_18tmdn9r60().s[1339]++;return(cov_18tmdn9r60().b[552][0]++,Yc()!==void 0)||(cov_18tmdn9r60().b[552][1]++,Pr()!=null);}var le=(cov_18tmdn9r60().s[1340]++,0),y=(cov_18tmdn9r60().s[1341]++,1),I=(cov_18tmdn9r60().s[1342]++,2),H=(cov_18tmdn9r60().s[1343]++,3),oe=(cov_18tmdn9r60().s[1344]++,4),J=(cov_18tmdn9r60().s[1345]++,5),yt=(cov_18tmdn9r60().s[1346]++,6),qt=(cov_18tmdn9r60().s[1347]++,7),L=(cov_18tmdn9r60().s[1348]++,8),ke=(cov_18tmdn9r60().s[1349]++,9),ue=(cov_18tmdn9r60().s[1350]++,10),O=(cov_18tmdn9r60().s[1351]++,11),Gt=(cov_18tmdn9r60().s[1352]++,12),es=(cov_18tmdn9r60().s[1353]++,13),vt=(cov_18tmdn9r60().s[1354]++,14),Z=(cov_18tmdn9r60().s[1355]++,15),Ye=(cov_18tmdn9r60().s[1356]++,16),Et=(cov_18tmdn9r60().s[1357]++,17),Ce=(cov_18tmdn9r60().s[1358]++,18),Oe=(cov_18tmdn9r60().s[1359]++,19),ts=(cov_18tmdn9r60().s[1360]++,20),Se=(cov_18tmdn9r60().s[1361]++,21),Jr=(cov_18tmdn9r60().s[1362]++,22),Ge=(cov_18tmdn9r60().s[1363]++,23),ne=(cov_18tmdn9r60().s[1364]++,24),It=(cov_18tmdn9r60().s[1365]++,25),Ke=(cov_18tmdn9r60().s[1366]++,26),P=(cov_18tmdn9r60().s[1367]++,27),al=(cov_18tmdn9r60().s[1368]++,1),ns=(cov_18tmdn9r60().s[1369]++,6),Je=(cov_18tmdn9r60().s[1370]++,7),Sn=(cov_18tmdn9r60().s[1371]++,8),Dt=(cov_18tmdn9r60().s[1372]++,9),F=(cov_18tmdn9r60().s[1373]++,10);function Pe(e){cov_18tmdn9r60().f[536]++;cov_18tmdn9r60().s[1374]++;return(cov_18tmdn9r60().b[553][0]++,Array.isArray(e))&&(cov_18tmdn9r60().b[553][1]++,typeof e[al]=="object");}function de(e){cov_18tmdn9r60().f[537]++;cov_18tmdn9r60().s[1375]++;return(cov_18tmdn9r60().b[554][0]++,Array.isArray(e))&&(cov_18tmdn9r60().b[554][1]++,e[al]===!0);}function rs(e){cov_18tmdn9r60().f[538]++;cov_18tmdn9r60().s[1376]++;return(e.flags&4)!==0;}function Le(e){cov_18tmdn9r60().f[539]++;cov_18tmdn9r60().s[1377]++;return e.componentOffset>-1;}function xn(e){cov_18tmdn9r60().f[540]++;cov_18tmdn9r60().s[1378]++;return(e.flags&1)===1;}function we(e){cov_18tmdn9r60().f[541]++;cov_18tmdn9r60().s[1379]++;return!!e.template;}function zt(e){cov_18tmdn9r60().f[542]++;cov_18tmdn9r60().s[1380]++;return(e[I]&512)!==0;}function Ct(e){cov_18tmdn9r60().f[543]++;cov_18tmdn9r60().s[1381]++;return(e[I]&256)===256;}var os=(cov_18tmdn9r60().s[1382]++,"svg"),cl=(cov_18tmdn9r60().s[1383]++,"math");function ie(e){cov_18tmdn9r60().f[544]++;cov_18tmdn9r60().s[1384]++;for(;Array.isArray(e);){cov_18tmdn9r60().s[1385]++;e=e[le];}cov_18tmdn9r60().s[1386]++;return e;}function is(e,t){cov_18tmdn9r60().f[545]++;cov_18tmdn9r60().s[1387]++;return ie(t[e]);}function fe(e,t){cov_18tmdn9r60().f[546]++;cov_18tmdn9r60().s[1388]++;return ie(t[e.index]);}function Xr(e,t){cov_18tmdn9r60().f[547]++;cov_18tmdn9r60().s[1389]++;return e.data[t];}function eo(e,t){cov_18tmdn9r60().f[548]++;cov_18tmdn9r60().s[1390]++;return e[t];}function ss(e,t,n,r){cov_18tmdn9r60().f[549]++;cov_18tmdn9r60().s[1391]++;(cov_18tmdn9r60().b[555][0]++,n>=e.data.length)&&(cov_18tmdn9r60().b[555][1]++,e.data[n]=null,e.blueprint[n]=null),t[n]=r;}function se(e,t){cov_18tmdn9r60().f[550]++;let n=(cov_18tmdn9r60().s[1392]++,t[e]);cov_18tmdn9r60().s[1393]++;return Pe(n)?(cov_18tmdn9r60().b[556][0]++,n):(cov_18tmdn9r60().b[556][1]++,n[le]);}function ll(e){cov_18tmdn9r60().f[551]++;cov_18tmdn9r60().s[1394]++;return(e[I]&4)===4;}function to(e){cov_18tmdn9r60().f[552]++;cov_18tmdn9r60().s[1395]++;return(e[I]&128)===128;}function ul(e){cov_18tmdn9r60().f[553]++;cov_18tmdn9r60().s[1396]++;return de(e[H]);}function ae(e,t){cov_18tmdn9r60().f[554]++;cov_18tmdn9r60().s[1397]++;return t==null?(cov_18tmdn9r60().b[557][0]++,null):(cov_18tmdn9r60().b[557][1]++,e[t]);}function as(e){cov_18tmdn9r60().f[555]++;cov_18tmdn9r60().s[1398]++;e[Et]=0;}function cs(e){cov_18tmdn9r60().f[556]++;cov_18tmdn9r60().s[1399]++;(cov_18tmdn9r60().b[558][0]++,e[I]&1024)||(cov_18tmdn9r60().b[558][1]++,e[I]|=1024,(cov_18tmdn9r60().b[559][0]++,to(e))&&(cov_18tmdn9r60().b[559][1]++,wt(e)));}function dl(e,t){cov_18tmdn9r60().f[557]++;cov_18tmdn9r60().s[1400]++;for(;e>0;){cov_18tmdn9r60().s[1401]++;t=t[vt],e--;}cov_18tmdn9r60().s[1402]++;return t;}function An(e){cov_18tmdn9r60().f[558]++;cov_18tmdn9r60().s[1403]++;return!!((cov_18tmdn9r60().b[560][0]++,e[I]&9216)||(cov_18tmdn9r60().b[560][1]++,e[ne]?.dirty));}function no(e){cov_18tmdn9r60().f[559]++;cov_18tmdn9r60().s[1404]++;e[ue].changeDetectionScheduler?.notify(8),(cov_18tmdn9r60().b[561][0]++,e[I]&64)&&(cov_18tmdn9r60().b[561][1]++,e[I]|=1024),(cov_18tmdn9r60().b[562][0]++,An(e))&&(cov_18tmdn9r60().b[562][1]++,wt(e));}function wt(e){cov_18tmdn9r60().f[560]++;cov_18tmdn9r60().s[1405]++;e[ue].changeDetectionScheduler?.notify(0);let t=(cov_18tmdn9r60().s[1406]++,ze(e));cov_18tmdn9r60().s[1407]++;for(;(cov_18tmdn9r60().b[563][0]++,t!==null)&&(cov_18tmdn9r60().b[563][1]++,!((cov_18tmdn9r60().b[564][0]++,t[I]&8192)||(cov_18tmdn9r60().b[564][1]++,t[I]|=8192,!to(t))));){cov_18tmdn9r60().s[1408]++;t=ze(t);}}function ls(e,t){cov_18tmdn9r60().f[561]++;cov_18tmdn9r60().s[1409]++;if(Ct(e)){cov_18tmdn9r60().b[565][0]++;cov_18tmdn9r60().s[1410]++;throw new T(911,!1);}else{cov_18tmdn9r60().b[565][1]++;}cov_18tmdn9r60().s[1411]++;(cov_18tmdn9r60().b[566][0]++,e[Se]===null)&&(cov_18tmdn9r60().b[566][1]++,e[Se]=[]),e[Se].push(t);}function fl(e,t){cov_18tmdn9r60().f[562]++;cov_18tmdn9r60().s[1412]++;if(e[Se]===null){cov_18tmdn9r60().b[567][0]++;cov_18tmdn9r60().s[1413]++;return;}else{cov_18tmdn9r60().b[567][1]++;}let n=(cov_18tmdn9r60().s[1414]++,e[Se].indexOf(t));cov_18tmdn9r60().s[1415]++;(cov_18tmdn9r60().b[568][0]++,n!==-1)&&(cov_18tmdn9r60().b[568][1]++,e[Se].splice(n,1));}function ze(e){cov_18tmdn9r60().f[563]++;let t=(cov_18tmdn9r60().s[1416]++,e[H]);cov_18tmdn9r60().s[1417]++;return de(t)?(cov_18tmdn9r60().b[569][0]++,t[H]):(cov_18tmdn9r60().b[569][1]++,t);}function us(e){cov_18tmdn9r60().f[564]++;cov_18tmdn9r60().s[1418]++;return e[qt]??=[];}function ds(e){cov_18tmdn9r60().f[565]++;cov_18tmdn9r60().s[1419]++;return e.cleanup??=[];}function pl(e,t,n,r){cov_18tmdn9r60().f[566]++;let o=(cov_18tmdn9r60().s[1420]++,us(t));cov_18tmdn9r60().s[1421]++;o.push(n),(cov_18tmdn9r60().b[570][0]++,e.firstCreatePass)&&(cov_18tmdn9r60().b[570][1]++,ds(e).push(r,o.length-1));}var C=(cov_18tmdn9r60().s[1422]++,{lFrame:Ml(null),bindingsEnabled:!0,skipHydrationRootTNode:null});var Ri=(cov_18tmdn9r60().s[1423]++,!1);function hl(){cov_18tmdn9r60().f[567]++;cov_18tmdn9r60().s[1424]++;return C.lFrame.elementDepthCount;}function gl(){cov_18tmdn9r60().f[568]++;cov_18tmdn9r60().s[1425]++;C.lFrame.elementDepthCount++;}function fs(){cov_18tmdn9r60().f[569]++;cov_18tmdn9r60().s[1426]++;C.lFrame.elementDepthCount--;}function ps(){cov_18tmdn9r60().f[570]++;cov_18tmdn9r60().s[1427]++;return C.bindingsEnabled;}function hs(){cov_18tmdn9r60().f[571]++;cov_18tmdn9r60().s[1428]++;return C.skipHydrationRootTNode!==null;}function gs(e){cov_18tmdn9r60().f[572]++;cov_18tmdn9r60().s[1429]++;return C.skipHydrationRootTNode===e;}function ms(){cov_18tmdn9r60().f[573]++;cov_18tmdn9r60().s[1430]++;C.skipHydrationRootTNode=null;}function v(){cov_18tmdn9r60().f[574]++;cov_18tmdn9r60().s[1431]++;return C.lFrame.lView;}function j(){cov_18tmdn9r60().f[575]++;cov_18tmdn9r60().s[1432]++;return C.lFrame.tView;}function ml(e){cov_18tmdn9r60().f[576]++;cov_18tmdn9r60().s[1433]++;return C.lFrame.contextLView=e,e[L];}function yl(e){cov_18tmdn9r60().f[577]++;cov_18tmdn9r60().s[1434]++;return C.lFrame.contextLView=null,e;}function G(){cov_18tmdn9r60().f[578]++;let e=(cov_18tmdn9r60().s[1435]++,ys());cov_18tmdn9r60().s[1436]++;for(;(cov_18tmdn9r60().b[571][0]++,e!==null)&&(cov_18tmdn9r60().b[571][1]++,e.type===64);){cov_18tmdn9r60().s[1437]++;e=e.parent;}cov_18tmdn9r60().s[1438]++;return e;}function ys(){cov_18tmdn9r60().f[579]++;cov_18tmdn9r60().s[1439]++;return C.lFrame.currentTNode;}function vl(){cov_18tmdn9r60().f[580]++;let e=(cov_18tmdn9r60().s[1440]++,C.lFrame),t=(cov_18tmdn9r60().s[1441]++,e.currentTNode);cov_18tmdn9r60().s[1442]++;return e.isParent?(cov_18tmdn9r60().b[572][0]++,t):(cov_18tmdn9r60().b[572][1]++,t.parent);}function Qt(e,t){cov_18tmdn9r60().f[581]++;let n=(cov_18tmdn9r60().s[1443]++,C.lFrame);cov_18tmdn9r60().s[1444]++;n.currentTNode=e,n.isParent=t;}function vs(){cov_18tmdn9r60().f[582]++;cov_18tmdn9r60().s[1445]++;return C.lFrame.isParent;}function Es(){cov_18tmdn9r60().f[583]++;cov_18tmdn9r60().s[1446]++;C.lFrame.isParent=!1;}function El(){cov_18tmdn9r60().f[584]++;cov_18tmdn9r60().s[1447]++;return C.lFrame.contextLView;}function Is(){cov_18tmdn9r60().f[585]++;cov_18tmdn9r60().s[1448]++;return Ri;}function In(e){cov_18tmdn9r60().f[586]++;let t=(cov_18tmdn9r60().s[1449]++,Ri);cov_18tmdn9r60().s[1450]++;return Ri=e,t;}function Rn(){cov_18tmdn9r60().f[587]++;let e=(cov_18tmdn9r60().s[1451]++,C.lFrame),t=(cov_18tmdn9r60().s[1452]++,e.bindingRootIndex);cov_18tmdn9r60().s[1453]++;return(cov_18tmdn9r60().b[573][0]++,t===-1)&&(cov_18tmdn9r60().b[573][1]++,t=e.bindingRootIndex=e.tView.bindingStartIndex),t;}function Il(){cov_18tmdn9r60().f[588]++;cov_18tmdn9r60().s[1454]++;return C.lFrame.bindingIndex;}function Dl(e){cov_18tmdn9r60().f[589]++;cov_18tmdn9r60().s[1455]++;return C.lFrame.bindingIndex=e;}function Tt(){cov_18tmdn9r60().f[590]++;cov_18tmdn9r60().s[1456]++;return C.lFrame.bindingIndex++;}function ro(e){cov_18tmdn9r60().f[591]++;let t=(cov_18tmdn9r60().s[1457]++,C.lFrame),n=(cov_18tmdn9r60().s[1458]++,t.bindingIndex);cov_18tmdn9r60().s[1459]++;return t.bindingIndex=t.bindingIndex+e,n;}function Cl(){cov_18tmdn9r60().f[592]++;cov_18tmdn9r60().s[1460]++;return C.lFrame.inI18n;}function wl(e,t){cov_18tmdn9r60().f[593]++;let n=(cov_18tmdn9r60().s[1461]++,C.lFrame);cov_18tmdn9r60().s[1462]++;n.bindingIndex=n.bindingRootIndex=e,oo(t);}function Tl(){cov_18tmdn9r60().f[594]++;cov_18tmdn9r60().s[1463]++;return C.lFrame.currentDirectiveIndex;}function oo(e){cov_18tmdn9r60().f[595]++;cov_18tmdn9r60().s[1464]++;C.lFrame.currentDirectiveIndex=e;}function bl(e){cov_18tmdn9r60().f[596]++;let t=(cov_18tmdn9r60().s[1465]++,C.lFrame.currentDirectiveIndex);cov_18tmdn9r60().s[1466]++;return t===-1?(cov_18tmdn9r60().b[574][0]++,null):(cov_18tmdn9r60().b[574][1]++,e[t]);}function Ds(){cov_18tmdn9r60().f[597]++;cov_18tmdn9r60().s[1467]++;return C.lFrame.currentQueryIndex;}function io(e){cov_18tmdn9r60().f[598]++;cov_18tmdn9r60().s[1468]++;C.lFrame.currentQueryIndex=e;}function Ih(e){cov_18tmdn9r60().f[599]++;let t=(cov_18tmdn9r60().s[1469]++,e[y]);cov_18tmdn9r60().s[1470]++;return t.type===2?(cov_18tmdn9r60().b[575][0]++,t.declTNode):(cov_18tmdn9r60().b[575][1]++,t.type===1?(cov_18tmdn9r60().b[576][0]++,e[J]):(cov_18tmdn9r60().b[576][1]++,null));}function Cs(e,t,n){cov_18tmdn9r60().f[600]++;cov_18tmdn9r60().s[1471]++;if(n&4){cov_18tmdn9r60().b[577][0]++;let o=(cov_18tmdn9r60().s[1472]++,t),i=(cov_18tmdn9r60().s[1473]++,e);cov_18tmdn9r60().s[1474]++;for(;o=o.parent,(cov_18tmdn9r60().b[578][0]++,o===null)&&(cov_18tmdn9r60().b[578][1]++,!(n&1));){cov_18tmdn9r60().s[1475]++;if(o=Ih(i),(cov_18tmdn9r60().b[580][0]++,o===null)||(cov_18tmdn9r60().b[580][1]++,i=i[vt],o.type&10)){cov_18tmdn9r60().b[579][0]++;cov_18tmdn9r60().s[1476]++;break;}else{cov_18tmdn9r60().b[579][1]++;}}cov_18tmdn9r60().s[1477]++;if(o===null){cov_18tmdn9r60().b[581][0]++;cov_18tmdn9r60().s[1478]++;return!1;}else{cov_18tmdn9r60().b[581][1]++;}cov_18tmdn9r60().s[1479]++;t=o,e=i;}else{cov_18tmdn9r60().b[577][1]++;}let r=(cov_18tmdn9r60().s[1480]++,C.lFrame=_l());cov_18tmdn9r60().s[1481]++;return r.currentTNode=t,r.lView=e,!0;}function so(e){cov_18tmdn9r60().f[601]++;let t=(cov_18tmdn9r60().s[1482]++,_l()),n=(cov_18tmdn9r60().s[1483]++,e[y]);cov_18tmdn9r60().s[1484]++;C.lFrame=t,t.currentTNode=n.firstChild,t.lView=e,t.tView=n,t.contextLView=e,t.bindingIndex=n.bindingStartIndex,t.inI18n=!1;}function _l(){cov_18tmdn9r60().f[602]++;let e=(cov_18tmdn9r60().s[1485]++,C.lFrame),t=(cov_18tmdn9r60().s[1486]++,e===null?(cov_18tmdn9r60().b[582][0]++,null):(cov_18tmdn9r60().b[582][1]++,e.child));cov_18tmdn9r60().s[1487]++;return t===null?(cov_18tmdn9r60().b[583][0]++,Ml(e)):(cov_18tmdn9r60().b[583][1]++,t);}function Ml(e){cov_18tmdn9r60().f[603]++;let t=(cov_18tmdn9r60().s[1488]++,{currentTNode:null,isParent:!0,lView:null,tView:null,selectedIndex:-1,contextLView:null,elementDepthCount:0,currentNamespace:null,currentDirectiveIndex:-1,bindingRootIndex:-1,bindingIndex:-1,currentQueryIndex:0,parent:e,child:null,inI18n:!1});cov_18tmdn9r60().s[1489]++;return(cov_18tmdn9r60().b[584][0]++,e!==null)&&(cov_18tmdn9r60().b[584][1]++,e.child=t),t;}function Nl(){cov_18tmdn9r60().f[604]++;let e=(cov_18tmdn9r60().s[1490]++,C.lFrame);cov_18tmdn9r60().s[1491]++;return C.lFrame=e.parent,e.currentTNode=null,e.lView=null,e;}var ws=(cov_18tmdn9r60().s[1492]++,Nl);function ao(){cov_18tmdn9r60().f[605]++;let e=(cov_18tmdn9r60().s[1493]++,Nl());cov_18tmdn9r60().s[1494]++;e.isParent=!0,e.tView=null,e.selectedIndex=-1,e.contextLView=null,e.elementDepthCount=0,e.currentDirectiveIndex=-1,e.currentNamespace=null,e.bindingRootIndex=-1,e.bindingIndex=-1,e.currentQueryIndex=0;}function Sl(e){cov_18tmdn9r60().f[606]++;cov_18tmdn9r60().s[1495]++;return(C.lFrame.contextLView=dl(e,C.lFrame.contextLView))[L];}function Te(){cov_18tmdn9r60().f[607]++;cov_18tmdn9r60().s[1496]++;return C.lFrame.selectedIndex;}function Xe(e){cov_18tmdn9r60().f[608]++;cov_18tmdn9r60().s[1497]++;C.lFrame.selectedIndex=e;}function co(){cov_18tmdn9r60().f[609]++;let e=(cov_18tmdn9r60().s[1498]++,C.lFrame);cov_18tmdn9r60().s[1499]++;return Xr(e.tView,e.selectedIndex);}function xl(){cov_18tmdn9r60().f[610]++;cov_18tmdn9r60().s[1500]++;C.lFrame.currentNamespace=os;}function Al(){cov_18tmdn9r60().f[611]++;cov_18tmdn9r60().s[1501]++;Dh();}function Dh(){cov_18tmdn9r60().f[612]++;cov_18tmdn9r60().s[1502]++;C.lFrame.currentNamespace=null;}function Rl(){cov_18tmdn9r60().f[613]++;cov_18tmdn9r60().s[1503]++;return C.lFrame.currentNamespace;}var kl=(cov_18tmdn9r60().s[1504]++,!0);function lo(){cov_18tmdn9r60().f[614]++;cov_18tmdn9r60().s[1505]++;return kl;}function uo(e){cov_18tmdn9r60().f[615]++;cov_18tmdn9r60().s[1506]++;kl=e;}function ki(e,t=(cov_18tmdn9r60().b[585][0]++,null),n=(cov_18tmdn9r60().b[586][0]++,null),r){cov_18tmdn9r60().f[616]++;let o=(cov_18tmdn9r60().s[1507]++,Ts(e,t,n,r));cov_18tmdn9r60().s[1508]++;return o.resolveInjectorInitializers(),o;}function Ts(e,t=(cov_18tmdn9r60().b[587][0]++,null),n=(cov_18tmdn9r60().b[588][0]++,null),r,o=(cov_18tmdn9r60().b[589][0]++,new Set())){cov_18tmdn9r60().f[617]++;let i=(cov_18tmdn9r60().s[1509]++,[(cov_18tmdn9r60().b[590][0]++,n)||(cov_18tmdn9r60().b[590][1]++,K),nl(e)]),s;cov_18tmdn9r60().s[1510]++;return new gt(i,(cov_18tmdn9r60().b[591][0]++,t)||(cov_18tmdn9r60().b[591][1]++,Nn()),(cov_18tmdn9r60().b[592][0]++,s)||(cov_18tmdn9r60().b[592][1]++,null),o);}cov_18tmdn9r60().s[1511]++;cov_18tmdn9r60().s[1527]++;var Ie=class e{static THROW_IF_NOT_FOUND=(cov_18tmdn9r60().s[1512]++,ft);static NULL=(cov_18tmdn9r60().s[1513]++,new En());static create(t,n){cov_18tmdn9r60().f[618]++;cov_18tmdn9r60().s[1514]++;if(Array.isArray(t)){cov_18tmdn9r60().b[593][0]++;cov_18tmdn9r60().s[1515]++;return ki({name:""},n,t,"");}else{cov_18tmdn9r60().b[593][1]++;}{let r=(cov_18tmdn9r60().s[1516]++,(cov_18tmdn9r60().b[594][0]++,t.name)??(cov_18tmdn9r60().b[594][1]++,""));cov_18tmdn9r60().s[1517]++;return ki({name:r},t.parent,t.providers,r);}}static ɵprov=(cov_18tmdn9r60().s[1518]++,V({token:e,providedIn:"any",factory:()=>{cov_18tmdn9r60().f[619]++;cov_18tmdn9r60().s[1519]++;return Ee(Qi);}}));static __NG_ELEMENT_ID__=(cov_18tmdn9r60().s[1520]++,-1);},Zt=(cov_18tmdn9r60().s[1521]++,new N("")),Fe=(cov_18tmdn9r60().s[1522]++,(()=>{cov_18tmdn9r60().f[620]++;class e{static __NG_ELEMENT_ID__=(cov_18tmdn9r60().s[1523]++,Ch);static __NG_ENV_ID__=(cov_18tmdn9r60().s[1524]++,n=>{cov_18tmdn9r60().f[621]++;cov_18tmdn9r60().s[1525]++;return n;});}cov_18tmdn9r60().s[1526]++;return e;})()),Vr=class extends Fe{_lView;constructor(t){cov_18tmdn9r60().f[622]++;cov_18tmdn9r60().s[1528]++;super(),this._lView=t;}get destroyed(){cov_18tmdn9r60().f[623]++;cov_18tmdn9r60().s[1529]++;return Ct(this._lView);}onDestroy(t){cov_18tmdn9r60().f[624]++;let n=(cov_18tmdn9r60().s[1530]++,this._lView);cov_18tmdn9r60().s[1531]++;return ls(n,t),()=>{cov_18tmdn9r60().f[625]++;cov_18tmdn9r60().s[1532]++;return fl(n,t);};}};function Ch(){cov_18tmdn9r60().f[626]++;cov_18tmdn9r60().s[1533]++;return new Vr(v());}cov_18tmdn9r60().s[1554]++;var Ol=(cov_18tmdn9r60().s[1534]++,!1),Pl=(cov_18tmdn9r60().s[1535]++,new N("")),bt=(cov_18tmdn9r60().s[1536]++,(()=>{cov_18tmdn9r60().f[627]++;class e{taskId=(cov_18tmdn9r60().s[1537]++,0);pendingTasks=(cov_18tmdn9r60().s[1538]++,new Set());destroyed=(cov_18tmdn9r60().s[1539]++,!1);pendingTask=(cov_18tmdn9r60().s[1540]++,new cn(!1));debugTaskTracker=(cov_18tmdn9r60().s[1541]++,E(Pl,{optional:!0}));get hasPendingTasks(){cov_18tmdn9r60().f[628]++;cov_18tmdn9r60().s[1542]++;return this.destroyed?(cov_18tmdn9r60().b[595][0]++,!1):(cov_18tmdn9r60().b[595][1]++,this.pendingTask.value);}get hasPendingTasksObservable(){cov_18tmdn9r60().f[629]++;cov_18tmdn9r60().s[1543]++;return this.destroyed?(cov_18tmdn9r60().b[596][0]++,new b(n=>{cov_18tmdn9r60().f[630]++;cov_18tmdn9r60().s[1544]++;n.next(!1),n.complete();})):(cov_18tmdn9r60().b[596][1]++,this.pendingTask);}add(){cov_18tmdn9r60().f[631]++;cov_18tmdn9r60().s[1545]++;(cov_18tmdn9r60().b[597][0]++,!this.hasPendingTasks)&&(cov_18tmdn9r60().b[597][1]++,!this.destroyed)&&(cov_18tmdn9r60().b[597][2]++,this.pendingTask.next(!0));let n=(cov_18tmdn9r60().s[1546]++,this.taskId++);cov_18tmdn9r60().s[1547]++;return this.pendingTasks.add(n),this.debugTaskTracker?.add(n),n;}has(n){cov_18tmdn9r60().f[632]++;cov_18tmdn9r60().s[1548]++;return this.pendingTasks.has(n);}remove(n){cov_18tmdn9r60().f[633]++;cov_18tmdn9r60().s[1549]++;this.pendingTasks.delete(n),this.debugTaskTracker?.remove(n),(cov_18tmdn9r60().b[598][0]++,this.pendingTasks.size===0)&&(cov_18tmdn9r60().b[598][1]++,this.hasPendingTasks)&&(cov_18tmdn9r60().b[598][2]++,this.pendingTask.next(!1));}ngOnDestroy(){cov_18tmdn9r60().f[634]++;cov_18tmdn9r60().s[1550]++;this.pendingTasks.clear(),(cov_18tmdn9r60().b[599][0]++,this.hasPendingTasks)&&(cov_18tmdn9r60().b[599][1]++,this.pendingTask.next(!1)),this.destroyed=!0,this.pendingTask.unsubscribe();}static ɵprov=(cov_18tmdn9r60().s[1551]++,V({token:e,providedIn:"root",factory:()=>{cov_18tmdn9r60().f[635]++;cov_18tmdn9r60().s[1552]++;return new e();}}));}cov_18tmdn9r60().s[1553]++;return e;})()),Oi=class extends te{__isAsync;destroyRef=(cov_18tmdn9r60().s[1555]++,void 0);pendingTasks=(cov_18tmdn9r60().s[1556]++,void 0);constructor(t=(cov_18tmdn9r60().b[600][0]++,!1)){cov_18tmdn9r60().f[636]++;cov_18tmdn9r60().s[1557]++;super(),this.__isAsync=t,(cov_18tmdn9r60().b[601][0]++,sl())&&(cov_18tmdn9r60().b[601][1]++,this.destroyRef=(cov_18tmdn9r60().b[602][0]++,E(Fe,{optional:!0}))??(cov_18tmdn9r60().b[602][1]++,void 0),this.pendingTasks=(cov_18tmdn9r60().b[603][0]++,E(bt,{optional:!0}))??(cov_18tmdn9r60().b[603][1]++,void 0));}emit(t){cov_18tmdn9r60().f[637]++;let n=(cov_18tmdn9r60().s[1558]++,g(null));cov_18tmdn9r60().s[1559]++;try{cov_18tmdn9r60().s[1560]++;super.next(t);}finally{cov_18tmdn9r60().s[1561]++;g(n);}}subscribe(t,n,r){cov_18tmdn9r60().f[638]++;let o=(cov_18tmdn9r60().s[1562]++,t),i=(cov_18tmdn9r60().s[1563]++,(cov_18tmdn9r60().b[604][0]++,n)||(cov_18tmdn9r60().b[604][1]++,()=>{cov_18tmdn9r60().f[639]++;cov_18tmdn9r60().s[1564]++;return null;})),s=(cov_18tmdn9r60().s[1565]++,r);cov_18tmdn9r60().s[1566]++;if((cov_18tmdn9r60().b[606][0]++,t)&&(cov_18tmdn9r60().b[606][1]++,typeof t=="object")){cov_18tmdn9r60().b[605][0]++;let c=(cov_18tmdn9r60().s[1567]++,t);cov_18tmdn9r60().s[1568]++;o=c.next?.bind(c),i=c.error?.bind(c),s=c.complete?.bind(c);}else{cov_18tmdn9r60().b[605][1]++;}cov_18tmdn9r60().s[1569]++;(cov_18tmdn9r60().b[607][0]++,this.__isAsync)&&(cov_18tmdn9r60().b[607][1]++,i=this.wrapInTimeout(i),(cov_18tmdn9r60().b[608][0]++,o)&&(cov_18tmdn9r60().b[608][1]++,o=this.wrapInTimeout(o)),(cov_18tmdn9r60().b[609][0]++,s)&&(cov_18tmdn9r60().b[609][1]++,s=this.wrapInTimeout(s)));let a=(cov_18tmdn9r60().s[1570]++,super.subscribe({next:o,error:i,complete:s}));cov_18tmdn9r60().s[1571]++;return(cov_18tmdn9r60().b[610][0]++,t instanceof U)&&(cov_18tmdn9r60().b[610][1]++,t.add(a)),a;}wrapInTimeout(t){cov_18tmdn9r60().f[640]++;cov_18tmdn9r60().s[1572]++;return n=>{cov_18tmdn9r60().f[641]++;let r=(cov_18tmdn9r60().s[1573]++,this.pendingTasks?.add());cov_18tmdn9r60().s[1574]++;setTimeout(()=>{cov_18tmdn9r60().f[642]++;cov_18tmdn9r60().s[1575]++;try{cov_18tmdn9r60().s[1576]++;t(n);}finally{cov_18tmdn9r60().s[1577]++;(cov_18tmdn9r60().b[611][0]++,r!==void 0)&&(cov_18tmdn9r60().b[611][1]++,this.pendingTasks?.remove(r));}});};}},Ne=(cov_18tmdn9r60().s[1578]++,Oi);function Hr(...e){cov_18tmdn9r60().f[643]++;}function bs(e){cov_18tmdn9r60().f[644]++;let t,n;function r(){cov_18tmdn9r60().f[645]++;cov_18tmdn9r60().s[1579]++;e=Hr;cov_18tmdn9r60().s[1580]++;try{cov_18tmdn9r60().s[1581]++;(cov_18tmdn9r60().b[612][0]++,n!==void 0)&&(cov_18tmdn9r60().b[612][1]++,typeof cancelAnimationFrame=="function")&&(cov_18tmdn9r60().b[612][2]++,cancelAnimationFrame(n)),(cov_18tmdn9r60().b[613][0]++,t!==void 0)&&(cov_18tmdn9r60().b[613][1]++,clearTimeout(t));}catch{}}cov_18tmdn9r60().s[1582]++;return t=setTimeout(()=>{cov_18tmdn9r60().f[646]++;cov_18tmdn9r60().s[1583]++;e(),r();}),(cov_18tmdn9r60().b[614][0]++,typeof requestAnimationFrame=="function")&&(cov_18tmdn9r60().b[614][1]++,n=requestAnimationFrame(()=>{cov_18tmdn9r60().f[647]++;cov_18tmdn9r60().s[1584]++;e(),r();})),()=>{cov_18tmdn9r60().f[648]++;cov_18tmdn9r60().s[1585]++;return r();};}function Ll(e){cov_18tmdn9r60().f[649]++;cov_18tmdn9r60().s[1586]++;return queueMicrotask(()=>{cov_18tmdn9r60().f[650]++;cov_18tmdn9r60().s[1587]++;return e();}),()=>{cov_18tmdn9r60().f[651]++;cov_18tmdn9r60().s[1588]++;e=Hr;};}cov_18tmdn9r60().s[1592]++;var _s=(cov_18tmdn9r60().s[1589]++,"isAngularZone"),Dn=(cov_18tmdn9r60().s[1590]++,_s+"_ID"),wh=(cov_18tmdn9r60().s[1591]++,0),De=class e{hasPendingMacrotasks=(cov_18tmdn9r60().s[1593]++,!1);hasPendingMicrotasks=(cov_18tmdn9r60().s[1594]++,!1);isStable=(cov_18tmdn9r60().s[1595]++,!0);onUnstable=(cov_18tmdn9r60().s[1596]++,new Ne(!1));onMicrotaskEmpty=(cov_18tmdn9r60().s[1597]++,new Ne(!1));onStable=(cov_18tmdn9r60().s[1598]++,new Ne(!1));onError=(cov_18tmdn9r60().s[1599]++,new Ne(!1));constructor(t){cov_18tmdn9r60().f[652]++;let{enableLongStackTrace:n=(cov_18tmdn9r60().b[615][0]++,!1),shouldCoalesceEventChangeDetection:r=(cov_18tmdn9r60().b[616][0]++,!1),shouldCoalesceRunChangeDetection:o=(cov_18tmdn9r60().b[617][0]++,!1),scheduleInRootZone:i=(cov_18tmdn9r60().b[618][0]++,Ol)}=(cov_18tmdn9r60().s[1600]++,t);cov_18tmdn9r60().s[1601]++;if(typeof Zone>"u"){cov_18tmdn9r60().b[619][0]++;cov_18tmdn9r60().s[1602]++;throw new T(908,!1);}else{cov_18tmdn9r60().b[619][1]++;}cov_18tmdn9r60().s[1603]++;Zone.assertZonePatched();let s=(cov_18tmdn9r60().s[1604]++,this);cov_18tmdn9r60().s[1605]++;s._nesting=0,s._outer=s._inner=Zone.current,(cov_18tmdn9r60().b[620][0]++,Zone.TaskTrackingZoneSpec)&&(cov_18tmdn9r60().b[620][1]++,s._inner=s._inner.fork(new Zone.TaskTrackingZoneSpec())),(cov_18tmdn9r60().b[621][0]++,n)&&(cov_18tmdn9r60().b[621][1]++,Zone.longStackTraceZoneSpec)&&(cov_18tmdn9r60().b[621][2]++,s._inner=s._inner.fork(Zone.longStackTraceZoneSpec)),s.shouldCoalesceEventChangeDetection=(cov_18tmdn9r60().b[622][0]++,!o)&&(cov_18tmdn9r60().b[622][1]++,r),s.shouldCoalesceRunChangeDetection=o,s.callbackScheduled=!1,s.scheduleInRootZone=i,_h(s);}static isInAngularZone(){cov_18tmdn9r60().f[653]++;cov_18tmdn9r60().s[1606]++;return(cov_18tmdn9r60().b[623][0]++,typeof Zone<"u")&&(cov_18tmdn9r60().b[623][1]++,Zone.current.get(_s)===!0);}static assertInAngularZone(){cov_18tmdn9r60().f[654]++;cov_18tmdn9r60().s[1607]++;if(!e.isInAngularZone()){cov_18tmdn9r60().b[624][0]++;cov_18tmdn9r60().s[1608]++;throw new T(909,!1);}else{cov_18tmdn9r60().b[624][1]++;}}static assertNotInAngularZone(){cov_18tmdn9r60().f[655]++;cov_18tmdn9r60().s[1609]++;if(e.isInAngularZone()){cov_18tmdn9r60().b[625][0]++;cov_18tmdn9r60().s[1610]++;throw new T(909,!1);}else{cov_18tmdn9r60().b[625][1]++;}}run(t,n,r){cov_18tmdn9r60().f[656]++;cov_18tmdn9r60().s[1611]++;return this._inner.run(t,n,r);}runTask(t,n,r,o){cov_18tmdn9r60().f[657]++;let i=(cov_18tmdn9r60().s[1612]++,this._inner),s=(cov_18tmdn9r60().s[1613]++,i.scheduleEventTask("NgZoneEvent: "+o,t,Th,Hr,Hr));cov_18tmdn9r60().s[1614]++;try{cov_18tmdn9r60().s[1615]++;return i.runTask(s,n,r);}finally{cov_18tmdn9r60().s[1616]++;i.cancelTask(s);}}runGuarded(t,n,r){cov_18tmdn9r60().f[658]++;cov_18tmdn9r60().s[1617]++;return this._inner.runGuarded(t,n,r);}runOutsideAngular(t){cov_18tmdn9r60().f[659]++;cov_18tmdn9r60().s[1618]++;return this._outer.run(t);}},Th=(cov_18tmdn9r60().s[1619]++,{});function Ms(e){cov_18tmdn9r60().f[660]++;cov_18tmdn9r60().s[1620]++;if((cov_18tmdn9r60().b[627][0]++,e._nesting==0)&&(cov_18tmdn9r60().b[627][1]++,!e.hasPendingMicrotasks)&&(cov_18tmdn9r60().b[627][2]++,!e.isStable)){cov_18tmdn9r60().b[626][0]++;cov_18tmdn9r60().s[1621]++;try{cov_18tmdn9r60().s[1622]++;e._nesting++,e.onMicrotaskEmpty.emit(null);}finally{cov_18tmdn9r60().s[1623]++;if(e._nesting--,!e.hasPendingMicrotasks){cov_18tmdn9r60().b[628][0]++;cov_18tmdn9r60().s[1624]++;try{cov_18tmdn9r60().s[1625]++;e.runOutsideAngular(()=>{cov_18tmdn9r60().f[661]++;cov_18tmdn9r60().s[1626]++;return e.onStable.emit(null);});}finally{cov_18tmdn9r60().s[1627]++;e.isStable=!0;}}else{cov_18tmdn9r60().b[628][1]++;}}}else{cov_18tmdn9r60().b[626][1]++;}}function bh(e){cov_18tmdn9r60().f[662]++;cov_18tmdn9r60().s[1628]++;if((cov_18tmdn9r60().b[630][0]++,e.isCheckStableRunning)||(cov_18tmdn9r60().b[630][1]++,e.callbackScheduled)){cov_18tmdn9r60().b[629][0]++;cov_18tmdn9r60().s[1629]++;return;}else{cov_18tmdn9r60().b[629][1]++;}cov_18tmdn9r60().s[1630]++;e.callbackScheduled=!0;function t(){cov_18tmdn9r60().f[663]++;cov_18tmdn9r60().s[1631]++;bs(()=>{cov_18tmdn9r60().f[664]++;cov_18tmdn9r60().s[1632]++;e.callbackScheduled=!1,Pi(e),e.isCheckStableRunning=!0,Ms(e),e.isCheckStableRunning=!1;});}cov_18tmdn9r60().s[1633]++;e.scheduleInRootZone?(cov_18tmdn9r60().b[631][0]++,Zone.root.run(()=>{cov_18tmdn9r60().f[665]++;cov_18tmdn9r60().s[1634]++;t();})):(cov_18tmdn9r60().b[631][1]++,e._outer.run(()=>{cov_18tmdn9r60().f[666]++;cov_18tmdn9r60().s[1635]++;t();})),Pi(e);}function _h(e){cov_18tmdn9r60().f[667]++;cov_18tmdn9r60().s[1636]++;let t=()=>{cov_18tmdn9r60().f[668]++;cov_18tmdn9r60().s[1637]++;bh(e);},n=(cov_18tmdn9r60().s[1638]++,wh++);cov_18tmdn9r60().s[1639]++;e._inner=e._inner.fork({name:"angular",properties:{[_s]:!0,[Dn]:n,[Dn+n]:!0},onInvokeTask:(r,o,i,s,a,c)=>{cov_18tmdn9r60().f[669]++;cov_18tmdn9r60().s[1640]++;if(Mh(c)){cov_18tmdn9r60().b[632][0]++;cov_18tmdn9r60().s[1641]++;return r.invokeTask(i,s,a,c);}else{cov_18tmdn9r60().b[632][1]++;}cov_18tmdn9r60().s[1642]++;try{cov_18tmdn9r60().s[1643]++;return Uc(e),r.invokeTask(i,s,a,c);}finally{cov_18tmdn9r60().s[1644]++;((cov_18tmdn9r60().b[633][0]++,e.shouldCoalesceEventChangeDetection)&&(cov_18tmdn9r60().b[633][1]++,s.type==="eventTask")||(cov_18tmdn9r60().b[633][2]++,e.shouldCoalesceRunChangeDetection))&&(cov_18tmdn9r60().b[633][3]++,t()),Wc(e);}},onInvoke:(r,o,i,s,a,c,l)=>{cov_18tmdn9r60().f[670]++;cov_18tmdn9r60().s[1645]++;try{cov_18tmdn9r60().s[1646]++;return Uc(e),r.invoke(i,s,a,c,l);}finally{cov_18tmdn9r60().s[1647]++;(cov_18tmdn9r60().b[634][0]++,e.shouldCoalesceRunChangeDetection)&&(cov_18tmdn9r60().b[634][1]++,!e.callbackScheduled)&&(cov_18tmdn9r60().b[634][2]++,!Nh(c))&&(cov_18tmdn9r60().b[634][3]++,t()),Wc(e);}},onHasTask:(r,o,i,s)=>{cov_18tmdn9r60().f[671]++;cov_18tmdn9r60().s[1648]++;r.hasTask(i,s),(cov_18tmdn9r60().b[635][0]++,o===i)&&(cov_18tmdn9r60().b[635][1]++,s.change=="microTask"?(cov_18tmdn9r60().b[636][0]++,e._hasPendingMicrotasks=s.microTask,Pi(e),Ms(e)):(cov_18tmdn9r60().b[636][1]++,(cov_18tmdn9r60().b[637][0]++,s.change=="macroTask")&&(cov_18tmdn9r60().b[637][1]++,e.hasPendingMacrotasks=s.macroTask)));},onHandleError:(r,o,i,s)=>{cov_18tmdn9r60().f[672]++;cov_18tmdn9r60().s[1649]++;return r.handleError(i,s),e.runOutsideAngular(()=>{cov_18tmdn9r60().f[673]++;cov_18tmdn9r60().s[1650]++;return e.onError.emit(s);}),!1;}});}function Pi(e){cov_18tmdn9r60().f[674]++;cov_18tmdn9r60().s[1651]++;(cov_18tmdn9r60().b[639][0]++,e._hasPendingMicrotasks)||((cov_18tmdn9r60().b[639][1]++,e.shouldCoalesceEventChangeDetection)||(cov_18tmdn9r60().b[639][2]++,e.shouldCoalesceRunChangeDetection))&&(cov_18tmdn9r60().b[639][3]++,e.callbackScheduled===!0)?(cov_18tmdn9r60().b[638][0]++,e.hasPendingMicrotasks=!0):(cov_18tmdn9r60().b[638][1]++,e.hasPendingMicrotasks=!1);}function Uc(e){cov_18tmdn9r60().f[675]++;cov_18tmdn9r60().s[1652]++;e._nesting++,(cov_18tmdn9r60().b[640][0]++,e.isStable)&&(cov_18tmdn9r60().b[640][1]++,e.isStable=!1,e.onUnstable.emit(null));}function Wc(e){cov_18tmdn9r60().f[676]++;cov_18tmdn9r60().s[1653]++;e._nesting--,Ms(e);}cov_18tmdn9r60().s[1654]++;var Cn=class{hasPendingMicrotasks=(cov_18tmdn9r60().s[1655]++,!1);hasPendingMacrotasks=(cov_18tmdn9r60().s[1656]++,!1);isStable=(cov_18tmdn9r60().s[1657]++,!0);onUnstable=(cov_18tmdn9r60().s[1658]++,new Ne());onMicrotaskEmpty=(cov_18tmdn9r60().s[1659]++,new Ne());onStable=(cov_18tmdn9r60().s[1660]++,new Ne());onError=(cov_18tmdn9r60().s[1661]++,new Ne());run(t,n,r){cov_18tmdn9r60().f[677]++;cov_18tmdn9r60().s[1662]++;return t.apply(n,r);}runGuarded(t,n,r){cov_18tmdn9r60().f[678]++;cov_18tmdn9r60().s[1663]++;return t.apply(n,r);}runOutsideAngular(t){cov_18tmdn9r60().f[679]++;cov_18tmdn9r60().s[1664]++;return t();}runTask(t,n,r,o){cov_18tmdn9r60().f[680]++;cov_18tmdn9r60().s[1665]++;return t.apply(n,r);}};function Mh(e){cov_18tmdn9r60().f[681]++;cov_18tmdn9r60().s[1666]++;return Fl(e,"__ignore_ng_zone__");}function Nh(e){cov_18tmdn9r60().f[682]++;cov_18tmdn9r60().s[1667]++;return Fl(e,"__scheduler_tick__");}function Fl(e,t){cov_18tmdn9r60().f[683]++;cov_18tmdn9r60().s[1668]++;return(cov_18tmdn9r60().b[642][0]++,!Array.isArray(e))||(cov_18tmdn9r60().b[642][1]++,e.length!==1)?(cov_18tmdn9r60().b[641][0]++,!1):(cov_18tmdn9r60().b[641][1]++,e[0]?.data?.[t]===!0);}cov_18tmdn9r60().s[1669]++;var xe=class{_console=(cov_18tmdn9r60().s[1670]++,console);handleError(t){cov_18tmdn9r60().f[684]++;cov_18tmdn9r60().s[1671]++;this._console.error("ERROR",t);}},et=(cov_18tmdn9r60().s[1672]++,new N("",{factory:()=>{cov_18tmdn9r60().f[685]++;let e=(cov_18tmdn9r60().s[1673]++,E(De)),t=(cov_18tmdn9r60().s[1674]++,E(re)),n;cov_18tmdn9r60().s[1675]++;return r=>{cov_18tmdn9r60().f[686]++;cov_18tmdn9r60().s[1676]++;e.runOutsideAngular(()=>{cov_18tmdn9r60().f[687]++;cov_18tmdn9r60().s[1677]++;(cov_18tmdn9r60().b[644][0]++,t.destroyed)&&(cov_18tmdn9r60().b[644][1]++,!n)?(cov_18tmdn9r60().b[643][0]++,setTimeout(()=>{cov_18tmdn9r60().f[688]++;cov_18tmdn9r60().s[1678]++;throw r;})):(cov_18tmdn9r60().b[643][1]++,n??=t.get(xe),n.handleError(r));});};}})),jl=(cov_18tmdn9r60().s[1679]++,{provide:Wt,useValue:()=>{cov_18tmdn9r60().f[689]++;let e=(cov_18tmdn9r60().s[1680]++,E(xe,{optional:!0}));},multi:!0}),Sh=(cov_18tmdn9r60().s[1681]++,new N("",{factory:()=>{cov_18tmdn9r60().f[690]++;let e=(cov_18tmdn9r60().s[1682]++,E(Zt).defaultView);cov_18tmdn9r60().s[1683]++;if(!e){cov_18tmdn9r60().b[645][0]++;cov_18tmdn9r60().s[1684]++;return;}else{cov_18tmdn9r60().b[645][1]++;}cov_18tmdn9r60().s[1686]++;cov_18tmdn9r60().s[1688]++;cov_18tmdn9r60().s[1690]++;let t=(cov_18tmdn9r60().s[1685]++,E(et)),n=i=>{cov_18tmdn9r60().f[691]++;cov_18tmdn9r60().s[1687]++;t(i.reason),i.preventDefault();},r=i=>{cov_18tmdn9r60().f[692]++;cov_18tmdn9r60().s[1689]++;i.error?(cov_18tmdn9r60().b[646][0]++,t(i.error)):(cov_18tmdn9r60().b[646][1]++,t(new Error(i.message,{cause:i}))),i.preventDefault();},o=()=>{cov_18tmdn9r60().f[693]++;cov_18tmdn9r60().s[1691]++;e.addEventListener("unhandledrejection",n),e.addEventListener("error",r);};cov_18tmdn9r60().s[1692]++;typeof Zone<"u"?(cov_18tmdn9r60().b[647][0]++,Zone.root.run(o)):(cov_18tmdn9r60().b[647][1]++,o()),E(Fe).onDestroy(()=>{cov_18tmdn9r60().f[694]++;cov_18tmdn9r60().s[1693]++;e.removeEventListener("error",r),e.removeEventListener("unhandledrejection",n);});}}));function xh(){cov_18tmdn9r60().f[695]++;cov_18tmdn9r60().s[1694]++;return Mn([tl(()=>{cov_18tmdn9r60().f[696]++;cov_18tmdn9r60().s[1695]++;E(Sh);})]);}function Ns(e,t){cov_18tmdn9r60().f[697]++;let[n,r,o]=(cov_18tmdn9r60().s[1696]++,Ii(e,t?.equal)),i=(cov_18tmdn9r60().s[1697]++,n),s=(cov_18tmdn9r60().s[1698]++,i[W]);cov_18tmdn9r60().s[1699]++;return i.set=r,i.update=o,i.asReadonly=fo.bind(i),i;}function fo(){cov_18tmdn9r60().f[698]++;let e=(cov_18tmdn9r60().s[1700]++,this[W]);cov_18tmdn9r60().s[1701]++;if(e.readonlyFn===void 0){cov_18tmdn9r60().b[648][0]++;cov_18tmdn9r60().s[1702]++;let t=()=>{cov_18tmdn9r60().f[699]++;cov_18tmdn9r60().s[1703]++;return this();};cov_18tmdn9r60().s[1704]++;t[W]=e,e.readonlyFn=t;}else{cov_18tmdn9r60().b[648][1]++;}cov_18tmdn9r60().s[1705]++;return e.readonlyFn;}var kn=(cov_18tmdn9r60().s[1706]++,(()=>{cov_18tmdn9r60().f[700]++;class e{view;node;constructor(n,r){cov_18tmdn9r60().f[701]++;cov_18tmdn9r60().s[1707]++;this.view=n,this.node=r;}static __NG_ELEMENT_ID__=(cov_18tmdn9r60().s[1708]++,Ah);}cov_18tmdn9r60().s[1709]++;return e;})());function Ah(){cov_18tmdn9r60().f[702]++;cov_18tmdn9r60().s[1710]++;return new kn(v(),G());}cov_18tmdn9r60().s[1711]++;var Ae=class{},On=(cov_18tmdn9r60().s[1712]++,new N("",{factory:()=>{cov_18tmdn9r60().f[703]++;cov_18tmdn9r60().s[1713]++;return!0;}}));cov_18tmdn9r60().s[1731]++;cov_18tmdn9r60().s[1753]++;var Ss=(cov_18tmdn9r60().s[1714]++,new N("")),xs=(cov_18tmdn9r60().s[1715]++,(()=>{cov_18tmdn9r60().f[704]++;class e{internalPendingTasks=(cov_18tmdn9r60().s[1716]++,E(bt));scheduler=(cov_18tmdn9r60().s[1717]++,E(Ae));errorHandler=(cov_18tmdn9r60().s[1718]++,E(et));add(){cov_18tmdn9r60().f[705]++;let n=(cov_18tmdn9r60().s[1719]++,this.internalPendingTasks.add());cov_18tmdn9r60().s[1720]++;return()=>{cov_18tmdn9r60().f[706]++;cov_18tmdn9r60().s[1721]++;(cov_18tmdn9r60().b[649][0]++,this.internalPendingTasks.has(n))&&(cov_18tmdn9r60().b[649][1]++,this.scheduler.notify(11),this.internalPendingTasks.remove(n));};}run(n){cov_18tmdn9r60().f[707]++;let r=(cov_18tmdn9r60().s[1722]++,this.add());cov_18tmdn9r60().s[1723]++;n().catch(this.errorHandler).finally(r);}static ɵprov=(cov_18tmdn9r60().s[1724]++,V({token:e,providedIn:"root",factory:()=>{cov_18tmdn9r60().f[708]++;cov_18tmdn9r60().s[1725]++;return new e();}}));}cov_18tmdn9r60().s[1726]++;return e;})()),po=(cov_18tmdn9r60().s[1727]++,(()=>{cov_18tmdn9r60().f[709]++;class e{static ɵprov=(cov_18tmdn9r60().s[1728]++,V({token:e,providedIn:"root",factory:()=>{cov_18tmdn9r60().f[710]++;cov_18tmdn9r60().s[1729]++;return new Li();}}));}cov_18tmdn9r60().s[1730]++;return e;})()),Li=class{dirtyEffectCount=(cov_18tmdn9r60().s[1732]++,0);queues=(cov_18tmdn9r60().s[1733]++,new Map());add(t){cov_18tmdn9r60().f[711]++;cov_18tmdn9r60().s[1734]++;this.enqueue(t),this.schedule(t);}schedule(t){cov_18tmdn9r60().f[712]++;cov_18tmdn9r60().s[1735]++;(cov_18tmdn9r60().b[650][0]++,t.dirty)&&(cov_18tmdn9r60().b[650][1]++,this.dirtyEffectCount++);}remove(t){cov_18tmdn9r60().f[713]++;let n=(cov_18tmdn9r60().s[1736]++,t.zone),r=(cov_18tmdn9r60().s[1737]++,this.queues.get(n));cov_18tmdn9r60().s[1738]++;(cov_18tmdn9r60().b[651][0]++,r.has(t))&&(cov_18tmdn9r60().b[651][1]++,r.delete(t),(cov_18tmdn9r60().b[652][0]++,t.dirty)&&(cov_18tmdn9r60().b[652][1]++,this.dirtyEffectCount--));}enqueue(t){cov_18tmdn9r60().f[714]++;let n=(cov_18tmdn9r60().s[1739]++,t.zone);cov_18tmdn9r60().s[1740]++;(cov_18tmdn9r60().b[653][0]++,this.queues.has(n))||(cov_18tmdn9r60().b[653][1]++,this.queues.set(n,new Set()));let r=(cov_18tmdn9r60().s[1741]++,this.queues.get(n));cov_18tmdn9r60().s[1742]++;(cov_18tmdn9r60().b[654][0]++,r.has(t))||(cov_18tmdn9r60().b[654][1]++,r.add(t));}flush(){cov_18tmdn9r60().f[715]++;cov_18tmdn9r60().s[1743]++;for(;this.dirtyEffectCount>0;){let t=(cov_18tmdn9r60().s[1744]++,!1);cov_18tmdn9r60().s[1745]++;for(let[n,r]of this.queues){cov_18tmdn9r60().s[1746]++;n===null?(cov_18tmdn9r60().b[655][0]++,t||=this.flushQueue(r)):(cov_18tmdn9r60().b[655][1]++,t||=n.run(()=>{cov_18tmdn9r60().f[716]++;cov_18tmdn9r60().s[1747]++;return this.flushQueue(r);}));}cov_18tmdn9r60().s[1748]++;(cov_18tmdn9r60().b[656][0]++,t)||(cov_18tmdn9r60().b[656][1]++,this.dirtyEffectCount=0);}}flushQueue(t){cov_18tmdn9r60().f[717]++;let n=(cov_18tmdn9r60().s[1749]++,!1);cov_18tmdn9r60().s[1750]++;for(let r of t){cov_18tmdn9r60().s[1751]++;(cov_18tmdn9r60().b[657][0]++,r.dirty)&&(cov_18tmdn9r60().b[657][1]++,this.dirtyEffectCount--,n=!0,r.run());}cov_18tmdn9r60().s[1752]++;return n;}},Br=class{[W];constructor(t){cov_18tmdn9r60().f[718]++;cov_18tmdn9r60().s[1754]++;this[W]=t;}destroy(){cov_18tmdn9r60().f[719]++;cov_18tmdn9r60().s[1755]++;this[W].destroy();}};function Vl(e,t){cov_18tmdn9r60().f[720]++;let n=(cov_18tmdn9r60().s[1756]++,(cov_18tmdn9r60().b[658][0]++,t?.injector)??(cov_18tmdn9r60().b[658][1]++,E(Ie))),r=(cov_18tmdn9r60().s[1757]++,t?.manualCleanup!==!0?(cov_18tmdn9r60().b[659][0]++,n.get(Fe)):(cov_18tmdn9r60().b[659][1]++,null)),o,i=(cov_18tmdn9r60().s[1758]++,n.get(kn,null,{optional:!0})),s=(cov_18tmdn9r60().s[1759]++,n.get(Ae));cov_18tmdn9r60().s[1760]++;return i!==null?(cov_18tmdn9r60().b[660][0]++,o=Oh(i.view,s,e),(cov_18tmdn9r60().b[661][0]++,r instanceof Vr)&&(cov_18tmdn9r60().b[661][1]++,r._lView===i.view)&&(cov_18tmdn9r60().b[661][2]++,r=null)):(cov_18tmdn9r60().b[660][1]++,o=Ph(e,n.get(po),s)),o.injector=n,(cov_18tmdn9r60().b[662][0]++,r!==null)&&(cov_18tmdn9r60().b[662][1]++,o.onDestroyFns=[r.onDestroy(()=>{cov_18tmdn9r60().f[721]++;cov_18tmdn9r60().s[1761]++;return o.destroy();})]),new Br(o);}var Hl=(cov_18tmdn9r60().s[1762]++,$(B({},Di),{cleanupFns:void 0,zone:null,onDestroyFns:null,run(){cov_18tmdn9r60().f[722]++;let e=(cov_18tmdn9r60().s[1763]++,In(!1));cov_18tmdn9r60().s[1764]++;try{cov_18tmdn9r60().s[1765]++;Ci(this);}finally{cov_18tmdn9r60().s[1766]++;In(e);}},cleanup(){cov_18tmdn9r60().f[723]++;cov_18tmdn9r60().s[1767]++;if(!this.cleanupFns?.length){cov_18tmdn9r60().b[663][0]++;cov_18tmdn9r60().s[1768]++;return;}else{cov_18tmdn9r60().b[663][1]++;}let e=(cov_18tmdn9r60().s[1769]++,g(null));cov_18tmdn9r60().s[1770]++;try{cov_18tmdn9r60().s[1771]++;for(;this.cleanupFns.length;){cov_18tmdn9r60().s[1772]++;this.cleanupFns.pop()();}}finally{cov_18tmdn9r60().s[1773]++;this.cleanupFns=[],g(e);}}})),Rh=(cov_18tmdn9r60().s[1774]++,$(B({},Hl),{consumerMarkedDirty(){cov_18tmdn9r60().f[724]++;cov_18tmdn9r60().s[1775]++;this.scheduler.schedule(this),this.notifier.notify(12);},destroy(){cov_18tmdn9r60().f[725]++;cov_18tmdn9r60().s[1776]++;if(ut(this),this.onDestroyFns!==null){cov_18tmdn9r60().b[664][0]++;cov_18tmdn9r60().s[1777]++;for(let e of this.onDestroyFns){cov_18tmdn9r60().s[1778]++;e();}}else{cov_18tmdn9r60().b[664][1]++;}cov_18tmdn9r60().s[1779]++;this.cleanup(),this.scheduler.remove(this);}})),kh=(cov_18tmdn9r60().s[1780]++,$(B({},Hl),{consumerMarkedDirty(){cov_18tmdn9r60().f[726]++;cov_18tmdn9r60().s[1781]++;this.view[I]|=8192,wt(this.view),this.notifier.notify(13);},destroy(){cov_18tmdn9r60().f[727]++;cov_18tmdn9r60().s[1782]++;if(ut(this),this.onDestroyFns!==null){cov_18tmdn9r60().b[665][0]++;cov_18tmdn9r60().s[1783]++;for(let e of this.onDestroyFns){cov_18tmdn9r60().s[1784]++;e();}}else{cov_18tmdn9r60().b[665][1]++;}cov_18tmdn9r60().s[1785]++;this.cleanup(),this.view[Ge]?.delete(this);}}));function Oh(e,t,n){cov_18tmdn9r60().f[728]++;let r=(cov_18tmdn9r60().s[1786]++,Object.create(kh));cov_18tmdn9r60().s[1787]++;return r.view=e,r.zone=typeof Zone<"u"?(cov_18tmdn9r60().b[666][0]++,Zone.current):(cov_18tmdn9r60().b[666][1]++,null),r.notifier=t,r.fn=Bl(r,n),e[Ge]??=new Set(),e[Ge].add(r),r.consumerMarkedDirty(r),r;}function Ph(e,t,n){cov_18tmdn9r60().f[729]++;let r=(cov_18tmdn9r60().s[1788]++,Object.create(Rh));cov_18tmdn9r60().s[1789]++;return r.fn=Bl(r,e),r.scheduler=t,r.notifier=n,r.zone=typeof Zone<"u"?(cov_18tmdn9r60().b[667][0]++,Zone.current):(cov_18tmdn9r60().b[667][1]++,null),r.scheduler.add(r),r.notifier.notify(12),r;}function Bl(e,t){cov_18tmdn9r60().f[730]++;cov_18tmdn9r60().s[1790]++;return()=>{cov_18tmdn9r60().f[731]++;cov_18tmdn9r60().s[1791]++;t(n=>{cov_18tmdn9r60().f[732]++;cov_18tmdn9r60().s[1792]++;return(e.cleanupFns??=[]).push(n);});};}function zn(e){cov_18tmdn9r60().f[733]++;cov_18tmdn9r60().s[1793]++;return{toString:e}.toString();}function $h(e){cov_18tmdn9r60().f[734]++;cov_18tmdn9r60().s[1794]++;return typeof e=="function";}function mu(e,t,n,r){cov_18tmdn9r60().f[735]++;cov_18tmdn9r60().s[1795]++;t!==null?(cov_18tmdn9r60().b[668][0]++,t.applyValueToInputSignal(t,r)):(cov_18tmdn9r60().b[668][1]++,e[n]=r);}cov_18tmdn9r60().s[1796]++;var Do=class{previousValue;currentValue;firstChange;constructor(t,n,r){cov_18tmdn9r60().f[736]++;cov_18tmdn9r60().s[1797]++;this.previousValue=t,this.currentValue=n,this.firstChange=r;}isFirstChange(){cov_18tmdn9r60().f[737]++;cov_18tmdn9r60().s[1798]++;return this.firstChange;}},Uh=(cov_18tmdn9r60().s[1799]++,(()=>{cov_18tmdn9r60().f[738]++;cov_18tmdn9r60().s[1800]++;let e=()=>{cov_18tmdn9r60().f[739]++;cov_18tmdn9r60().s[1801]++;return yu;};cov_18tmdn9r60().s[1802]++;return e.ngInherit=!0,e;})());function yu(e){cov_18tmdn9r60().f[740]++;cov_18tmdn9r60().s[1803]++;return(cov_18tmdn9r60().b[669][0]++,e.type.prototype.ngOnChanges)&&(cov_18tmdn9r60().b[669][1]++,e.setInput=qh),Wh;}function Wh(){cov_18tmdn9r60().f[741]++;let e=(cov_18tmdn9r60().s[1804]++,Eu(this)),t=(cov_18tmdn9r60().s[1805]++,e?.current);cov_18tmdn9r60().s[1806]++;if(t){cov_18tmdn9r60().b[670][0]++;let n=(cov_18tmdn9r60().s[1807]++,e.previous);cov_18tmdn9r60().s[1808]++;if(n===Ze){cov_18tmdn9r60().b[671][0]++;cov_18tmdn9r60().s[1809]++;e.previous=t;}else{cov_18tmdn9r60().b[671][1]++;cov_18tmdn9r60().s[1810]++;for(let r in t){cov_18tmdn9r60().s[1811]++;n[r]=t[r];}}cov_18tmdn9r60().s[1812]++;e.current=null,this.ngOnChanges(t);}else{cov_18tmdn9r60().b[670][1]++;}}function qh(e,t,n,r,o){cov_18tmdn9r60().f[742]++;let i=(cov_18tmdn9r60().s[1813]++,this.declaredInputs[r]),s=(cov_18tmdn9r60().s[1814]++,(cov_18tmdn9r60().b[672][0]++,Eu(e))||(cov_18tmdn9r60().b[672][1]++,Gh(e,{previous:Ze,current:null}))),a=(cov_18tmdn9r60().s[1815]++,(cov_18tmdn9r60().b[673][0]++,s.current)||(cov_18tmdn9r60().b[673][1]++,s.current={})),c=(cov_18tmdn9r60().s[1816]++,s.previous),l=(cov_18tmdn9r60().s[1817]++,c[i]);cov_18tmdn9r60().s[1818]++;a[i]=new Do((cov_18tmdn9r60().b[674][0]++,l)&&(cov_18tmdn9r60().b[674][1]++,l.currentValue),n,c===Ze),mu(e,t,o,n);}var vu=(cov_18tmdn9r60().s[1819]++,"__ngSimpleChanges__");function Eu(e){cov_18tmdn9r60().f[743]++;cov_18tmdn9r60().s[1820]++;return(cov_18tmdn9r60().b[675][0]++,e[vu])||(cov_18tmdn9r60().b[675][1]++,null);}function Gh(e,t){cov_18tmdn9r60().f[744]++;cov_18tmdn9r60().s[1821]++;return e[vu]=t;}var $l=(cov_18tmdn9r60().s[1822]++,[]);cov_18tmdn9r60().s[1823]++;var x=function(e,t=(cov_18tmdn9r60().b[676][0]++,null),n){cov_18tmdn9r60().f[745]++;cov_18tmdn9r60().s[1824]++;for(let r=(cov_18tmdn9r60().s[1825]++,0);r<$l.length;r++){let o=(cov_18tmdn9r60().s[1826]++,$l[r]);cov_18tmdn9r60().s[1827]++;o(e,t,n);}},M=(cov_18tmdn9r60().s[1828]++,function(e){cov_18tmdn9r60().f[746]++;cov_18tmdn9r60().s[1829]++;return e[e.TemplateCreateStart=0]="TemplateCreateStart",e[e.TemplateCreateEnd=1]="TemplateCreateEnd",e[e.TemplateUpdateStart=2]="TemplateUpdateStart",e[e.TemplateUpdateEnd=3]="TemplateUpdateEnd",e[e.LifecycleHookStart=4]="LifecycleHookStart",e[e.LifecycleHookEnd=5]="LifecycleHookEnd",e[e.OutputStart=6]="OutputStart",e[e.OutputEnd=7]="OutputEnd",e[e.BootstrapApplicationStart=8]="BootstrapApplicationStart",e[e.BootstrapApplicationEnd=9]="BootstrapApplicationEnd",e[e.BootstrapComponentStart=10]="BootstrapComponentStart",e[e.BootstrapComponentEnd=11]="BootstrapComponentEnd",e[e.ChangeDetectionStart=12]="ChangeDetectionStart",e[e.ChangeDetectionEnd=13]="ChangeDetectionEnd",e[e.ChangeDetectionSyncStart=14]="ChangeDetectionSyncStart",e[e.ChangeDetectionSyncEnd=15]="ChangeDetectionSyncEnd",e[e.AfterRenderHooksStart=16]="AfterRenderHooksStart",e[e.AfterRenderHooksEnd=17]="AfterRenderHooksEnd",e[e.ComponentStart=18]="ComponentStart",e[e.ComponentEnd=19]="ComponentEnd",e[e.DeferBlockStateStart=20]="DeferBlockStateStart",e[e.DeferBlockStateEnd=21]="DeferBlockStateEnd",e[e.DynamicComponentStart=22]="DynamicComponentStart",e[e.DynamicComponentEnd=23]="DynamicComponentEnd",e[e.HostBindingsUpdateStart=24]="HostBindingsUpdateStart",e[e.HostBindingsUpdateEnd=25]="HostBindingsUpdateEnd",e;}((cov_18tmdn9r60().b[677][0]++,M)||(cov_18tmdn9r60().b[677][1]++,{})));function zh(e,t,n){cov_18tmdn9r60().f[747]++;let{ngOnChanges:r,ngOnInit:o,ngDoCheck:i}=(cov_18tmdn9r60().s[1830]++,t.type.prototype);cov_18tmdn9r60().s[1831]++;if(r){cov_18tmdn9r60().b[678][0]++;let s=(cov_18tmdn9r60().s[1832]++,yu(t));cov_18tmdn9r60().s[1833]++;(n.preOrderHooks??=[]).push(e,s),(n.preOrderCheckHooks??=[]).push(e,s);}else{cov_18tmdn9r60().b[678][1]++;}cov_18tmdn9r60().s[1834]++;(cov_18tmdn9r60().b[679][0]++,o)&&(cov_18tmdn9r60().b[679][1]++,(n.preOrderHooks??=[]).push(0-e,o)),(cov_18tmdn9r60().b[680][0]++,i)&&(cov_18tmdn9r60().b[680][1]++,(n.preOrderHooks??=[]).push(e,i),(n.preOrderCheckHooks??=[]).push(e,i));}function Iu(e,t){cov_18tmdn9r60().f[748]++;cov_18tmdn9r60().s[1835]++;for(let n=(cov_18tmdn9r60().s[1836]++,t.directiveStart),r=(cov_18tmdn9r60().s[1837]++,t.directiveEnd);n=r)){cov_18tmdn9r60().b[691][0]++;cov_18tmdn9r60().s[1853]++;break;}else{cov_18tmdn9r60().b[691][1]++;}}else{cov_18tmdn9r60().b[690][1]++;cov_18tmdn9r60().s[1854]++;(cov_18tmdn9r60().b[693][0]++,t[c]<0)&&(cov_18tmdn9r60().b[693][1]++,e[Et]+=65536),((cov_18tmdn9r60().b[694][0]++,a>14>16)&&(cov_18tmdn9r60().b[697][1]++,(e[I]&3)===t)&&(cov_18tmdn9r60().b[697][2]++,e[I]+=16384,Ul(a,i))):(cov_18tmdn9r60().b[696][1]++,Ul(a,i));}cov_18tmdn9r60().s[1866]++;var Kt=(cov_18tmdn9r60().s[1865]++,-1),Mt=class{factory;name;injectImpl;resolving=(cov_18tmdn9r60().s[1867]++,!1);canSeeViewProviders;multi;componentProviders;index;providerFactory;constructor(t,n,r,o){cov_18tmdn9r60().f[755]++;cov_18tmdn9r60().s[1868]++;this.factory=t,this.name=o,this.canSeeViewProviders=n,this.injectImpl=r;}};function Zh(e){cov_18tmdn9r60().f[756]++;cov_18tmdn9r60().s[1869]++;return(e.flags&8)!==0;}function Yh(e){cov_18tmdn9r60().f[757]++;cov_18tmdn9r60().s[1870]++;return(e.flags&16)!==0;}function Kh(e,t,n){cov_18tmdn9r60().f[758]++;let r=(cov_18tmdn9r60().s[1871]++,0);cov_18tmdn9r60().s[1872]++;for(;rt){cov_18tmdn9r60().b[713][0]++;cov_18tmdn9r60().s[1908]++;s=i-1;cov_18tmdn9r60().s[1909]++;break;}else{cov_18tmdn9r60().b[713][1]++;}}}else{cov_18tmdn9r60().b[711][1]++;}}}cov_18tmdn9r60().s[1910]++;for(;i>16;}function wo(e,t){cov_18tmdn9r60().f[766]++;let n=(cov_18tmdn9r60().s[1922]++,Xh(e)),r=(cov_18tmdn9r60().s[1923]++,t);cov_18tmdn9r60().s[1924]++;for(;n>0;){cov_18tmdn9r60().s[1925]++;r=r[vt],n--;}cov_18tmdn9r60().s[1926]++;return r;}var $s=(cov_18tmdn9r60().s[1927]++,!0);function To(e){cov_18tmdn9r60().f[767]++;let t=(cov_18tmdn9r60().s[1928]++,$s);cov_18tmdn9r60().s[1929]++;return $s=e,t;}var eg=(cov_18tmdn9r60().s[1930]++,256),Tu=(cov_18tmdn9r60().s[1931]++,eg-1),bu=(cov_18tmdn9r60().s[1932]++,5),tg=(cov_18tmdn9r60().s[1933]++,0),be=(cov_18tmdn9r60().s[1934]++,{});function ng(e,t,n){cov_18tmdn9r60().f[768]++;let r;cov_18tmdn9r60().s[1935]++;typeof n=="string"?(cov_18tmdn9r60().b[720][0]++,r=(cov_18tmdn9r60().b[721][0]++,n.charCodeAt(0))||(cov_18tmdn9r60().b[721][1]++,0)):(cov_18tmdn9r60().b[720][1]++,(cov_18tmdn9r60().b[722][0]++,n.hasOwnProperty(mt))&&(cov_18tmdn9r60().b[722][1]++,r=n[mt])),(cov_18tmdn9r60().b[723][0]++,r==null)&&(cov_18tmdn9r60().b[723][1]++,r=n[mt]=tg++);let o=(cov_18tmdn9r60().s[1936]++,r&Tu),i=(cov_18tmdn9r60().s[1937]++,1<>bu)]|=i;}function bo(e,t){cov_18tmdn9r60().f[769]++;let n=(cov_18tmdn9r60().s[1939]++,_u(e,t));cov_18tmdn9r60().s[1940]++;if(n!==-1){cov_18tmdn9r60().b[724][0]++;cov_18tmdn9r60().s[1941]++;return n;}else{cov_18tmdn9r60().b[724][1]++;}let r=(cov_18tmdn9r60().s[1942]++,t[y]);cov_18tmdn9r60().s[1943]++;(cov_18tmdn9r60().b[725][0]++,r.firstCreatePass)&&(cov_18tmdn9r60().b[725][1]++,e.injectorIndex=t.length,Rs(r.data,e),Rs(t,null),Rs(r.blueprint,null));let o=(cov_18tmdn9r60().s[1944]++,ya(e,t)),i=(cov_18tmdn9r60().s[1945]++,e.injectorIndex);cov_18tmdn9r60().s[1946]++;if(wu(o)){cov_18tmdn9r60().b[726][0]++;let s=(cov_18tmdn9r60().s[1947]++,Co(o)),a=(cov_18tmdn9r60().s[1948]++,wo(o,t)),c=(cov_18tmdn9r60().s[1949]++,a[y].data);cov_18tmdn9r60().s[1950]++;for(let l=(cov_18tmdn9r60().s[1951]++,0);l<8;l++){cov_18tmdn9r60().s[1952]++;t[i+l]=a[s+l]|c[s+l];}}else{cov_18tmdn9r60().b[726][1]++;}cov_18tmdn9r60().s[1953]++;return t[i+8]=o,i;}function Rs(e,t){cov_18tmdn9r60().f[770]++;cov_18tmdn9r60().s[1954]++;e.push(0,0,0,0,0,0,0,0,t);}function _u(e,t){cov_18tmdn9r60().f[771]++;cov_18tmdn9r60().s[1955]++;return(cov_18tmdn9r60().b[728][0]++,e.injectorIndex===-1)||(cov_18tmdn9r60().b[728][1]++,e.parent)&&(cov_18tmdn9r60().b[728][2]++,e.parent.injectorIndex===e.injectorIndex)||(cov_18tmdn9r60().b[728][3]++,t[e.injectorIndex+8]===null)?(cov_18tmdn9r60().b[727][0]++,-1):(cov_18tmdn9r60().b[727][1]++,e.injectorIndex);}function ya(e,t){cov_18tmdn9r60().f[772]++;cov_18tmdn9r60().s[1956]++;if((cov_18tmdn9r60().b[730][0]++,e.parent)&&(cov_18tmdn9r60().b[730][1]++,e.parent.injectorIndex!==-1)){cov_18tmdn9r60().b[729][0]++;cov_18tmdn9r60().s[1957]++;return e.parent.injectorIndex;}else{cov_18tmdn9r60().b[729][1]++;}let n=(cov_18tmdn9r60().s[1958]++,0),r=(cov_18tmdn9r60().s[1959]++,null),o=(cov_18tmdn9r60().s[1960]++,t);cov_18tmdn9r60().s[1961]++;for(;o!==null;){cov_18tmdn9r60().s[1962]++;if(r=Au(o),r===null){cov_18tmdn9r60().b[731][0]++;cov_18tmdn9r60().s[1963]++;return Kt;}else{cov_18tmdn9r60().b[731][1]++;}cov_18tmdn9r60().s[1964]++;if(n++,o=o[vt],r.injectorIndex!==-1){cov_18tmdn9r60().b[732][0]++;cov_18tmdn9r60().s[1965]++;return r.injectorIndex|n<<16;}else{cov_18tmdn9r60().b[732][1]++;}}cov_18tmdn9r60().s[1966]++;return Kt;}function Us(e,t,n){cov_18tmdn9r60().f[773]++;cov_18tmdn9r60().s[1967]++;ng(e,t,n);}function rg(e,t){cov_18tmdn9r60().f[774]++;cov_18tmdn9r60().s[1968]++;if(t==="class"){cov_18tmdn9r60().b[733][0]++;cov_18tmdn9r60().s[1969]++;return e.classes;}else{cov_18tmdn9r60().b[733][1]++;}cov_18tmdn9r60().s[1970]++;if(t==="style"){cov_18tmdn9r60().b[734][0]++;cov_18tmdn9r60().s[1971]++;return e.styles;}else{cov_18tmdn9r60().b[734][1]++;}let n=(cov_18tmdn9r60().s[1972]++,e.attrs);cov_18tmdn9r60().s[1973]++;if(n){cov_18tmdn9r60().b[735][0]++;let r=(cov_18tmdn9r60().s[1974]++,n.length),o=(cov_18tmdn9r60().s[1975]++,0);cov_18tmdn9r60().s[1976]++;for(;o>20),d=(cov_18tmdn9r60().s[2042]++,r?(cov_18tmdn9r60().b[772][0]++,a):(cov_18tmdn9r60().b[772][1]++,a+u)),p=(cov_18tmdn9r60().s[2043]++,o?(cov_18tmdn9r60().b[773][0]++,a+u):(cov_18tmdn9r60().b[773][1]++,l));cov_18tmdn9r60().s[2044]++;for(let f=(cov_18tmdn9r60().s[2045]++,d);f=c)&&(cov_18tmdn9r60().b[775][3]++,h.type===n)){cov_18tmdn9r60().b[774][0]++;cov_18tmdn9r60().s[2048]++;return f;}else{cov_18tmdn9r60().b[774][1]++;}}cov_18tmdn9r60().s[2049]++;if(o){cov_18tmdn9r60().b[776][0]++;let f=(cov_18tmdn9r60().s[2050]++,s[c]);cov_18tmdn9r60().s[2051]++;if((cov_18tmdn9r60().b[778][0]++,f)&&(cov_18tmdn9r60().b[778][1]++,we(f))&&(cov_18tmdn9r60().b[778][2]++,f.type===n)){cov_18tmdn9r60().b[777][0]++;cov_18tmdn9r60().s[2052]++;return c;}else{cov_18tmdn9r60().b[777][1]++;}}else{cov_18tmdn9r60().b[776][1]++;}cov_18tmdn9r60().s[2053]++;return null;}function jn(e,t,n,r,o){cov_18tmdn9r60().f[781]++;let i=(cov_18tmdn9r60().s[2054]++,e[n]),s=(cov_18tmdn9r60().s[2055]++,t.data);cov_18tmdn9r60().s[2056]++;if(i instanceof Mt){cov_18tmdn9r60().b[779][0]++;let a=(cov_18tmdn9r60().s[2057]++,i);cov_18tmdn9r60().s[2058]++;if(a.resolving){cov_18tmdn9r60().b[780][0]++;cov_18tmdn9r60().s[2059]++;throw qi("");}else{cov_18tmdn9r60().b[780][1]++;}let c=(cov_18tmdn9r60().s[2060]++,To(a.canSeeViewProviders));cov_18tmdn9r60().s[2061]++;a.resolving=!0;let l=(cov_18tmdn9r60().s[2062]++,(cov_18tmdn9r60().b[781][0]++,s[n].type)||(cov_18tmdn9r60().b[781][1]++,s[n])),u,d=(cov_18tmdn9r60().s[2063]++,a.injectImpl?(cov_18tmdn9r60().b[782][0]++,Y(a.injectImpl)):(cov_18tmdn9r60().b[782][1]++,null)),p=(cov_18tmdn9r60().s[2064]++,Cs(e,r,0));cov_18tmdn9r60().s[2065]++;try{cov_18tmdn9r60().s[2066]++;i=e[n]=a.factory(void 0,o,s,e,r),(cov_18tmdn9r60().b[783][0]++,t.firstCreatePass)&&(cov_18tmdn9r60().b[783][1]++,n>=r.directiveStart)&&(cov_18tmdn9r60().b[783][2]++,zh(n,s[n],t));}finally{cov_18tmdn9r60().s[2067]++;(cov_18tmdn9r60().b[784][0]++,d!==null)&&(cov_18tmdn9r60().b[784][1]++,Y(d)),To(c),a.resolving=!1,ws();}}else{cov_18tmdn9r60().b[779][1]++;}cov_18tmdn9r60().s[2068]++;return i;}function ig(e){cov_18tmdn9r60().f[782]++;cov_18tmdn9r60().s[2069]++;if(typeof e=="string"){cov_18tmdn9r60().b[785][0]++;cov_18tmdn9r60().s[2070]++;return(cov_18tmdn9r60().b[786][0]++,e.charCodeAt(0))||(cov_18tmdn9r60().b[786][1]++,0);}else{cov_18tmdn9r60().b[785][1]++;}let t=(cov_18tmdn9r60().s[2071]++,e.hasOwnProperty(mt)?(cov_18tmdn9r60().b[787][0]++,e[mt]):(cov_18tmdn9r60().b[787][1]++,void 0));cov_18tmdn9r60().s[2072]++;return typeof t=="number"?(cov_18tmdn9r60().b[788][0]++,t>=0?(cov_18tmdn9r60().b[789][0]++,t&Tu):(cov_18tmdn9r60().b[789][1]++,sg)):(cov_18tmdn9r60().b[788][1]++,t);}function ql(e,t,n){cov_18tmdn9r60().f[783]++;let r=(cov_18tmdn9r60().s[2073]++,1<>bu)]&r);}function Gl(e,t){cov_18tmdn9r60().f[784]++;cov_18tmdn9r60().s[2075]++;return(cov_18tmdn9r60().b[790][0]++,!(e&2))&&(cov_18tmdn9r60().b[790][1]++,!((cov_18tmdn9r60().b[791][0]++,e&1)&&(cov_18tmdn9r60().b[791][1]++,t)));}cov_18tmdn9r60().s[2076]++;var _t=class{_tNode;_lView;constructor(t,n){cov_18tmdn9r60().f[785]++;cov_18tmdn9r60().s[2077]++;this._tNode=t,this._lView=n;}get(t,n,r){cov_18tmdn9r60().f[786]++;cov_18tmdn9r60().s[2078]++;return Su(this._tNode,this._lView,t,pt(r),n);}};function sg(){cov_18tmdn9r60().f[787]++;cov_18tmdn9r60().s[2079]++;return new _t(G(),v());}function ag(e){cov_18tmdn9r60().f[788]++;cov_18tmdn9r60().s[2080]++;return zn(()=>{cov_18tmdn9r60().f[789]++;let t=(cov_18tmdn9r60().s[2081]++,e.prototype.constructor),n=(cov_18tmdn9r60().s[2082]++,(cov_18tmdn9r60().b[792][0]++,t[vn])||(cov_18tmdn9r60().b[792][1]++,Ws(t))),r=(cov_18tmdn9r60().s[2083]++,Object.prototype),o=(cov_18tmdn9r60().s[2084]++,Object.getPrototypeOf(e.prototype).constructor);cov_18tmdn9r60().s[2085]++;for(;(cov_18tmdn9r60().b[793][0]++,o)&&(cov_18tmdn9r60().b[793][1]++,o!==r);){let i=(cov_18tmdn9r60().s[2086]++,(cov_18tmdn9r60().b[794][0]++,o[vn])||(cov_18tmdn9r60().b[794][1]++,Ws(o)));cov_18tmdn9r60().s[2087]++;if((cov_18tmdn9r60().b[796][0]++,i)&&(cov_18tmdn9r60().b[796][1]++,i!==n)){cov_18tmdn9r60().b[795][0]++;cov_18tmdn9r60().s[2088]++;return i;}else{cov_18tmdn9r60().b[795][1]++;}cov_18tmdn9r60().s[2089]++;o=Object.getPrototypeOf(o);}cov_18tmdn9r60().s[2090]++;return i=>{cov_18tmdn9r60().f[790]++;cov_18tmdn9r60().s[2091]++;return new i();};});}function Ws(e){cov_18tmdn9r60().f[791]++;cov_18tmdn9r60().s[2092]++;return Fi(e)?(cov_18tmdn9r60().b[797][0]++,()=>{cov_18tmdn9r60().f[792]++;let t=(cov_18tmdn9r60().s[2093]++,Ws(q(e)));cov_18tmdn9r60().s[2094]++;return(cov_18tmdn9r60().b[798][0]++,t)&&(cov_18tmdn9r60().b[798][1]++,t());}):(cov_18tmdn9r60().b[797][1]++,qe(e));}function cg(e,t,n,r,o){cov_18tmdn9r60().f[793]++;let i=(cov_18tmdn9r60().s[2095]++,e),s=(cov_18tmdn9r60().s[2096]++,t);cov_18tmdn9r60().s[2097]++;for(;(cov_18tmdn9r60().b[799][0]++,i!==null)&&(cov_18tmdn9r60().b[799][1]++,s!==null)&&(cov_18tmdn9r60().b[799][2]++,s[I]&2048)&&(cov_18tmdn9r60().b[799][3]++,!zt(s));){let a=(cov_18tmdn9r60().s[2098]++,xu(i,s,n,r|2,be));cov_18tmdn9r60().s[2099]++;if(a!==be){cov_18tmdn9r60().b[800][0]++;cov_18tmdn9r60().s[2100]++;return a;}else{cov_18tmdn9r60().b[800][1]++;}let c=(cov_18tmdn9r60().s[2101]++,i.parent);cov_18tmdn9r60().s[2102]++;if(!c){cov_18tmdn9r60().b[801][0]++;let l=(cov_18tmdn9r60().s[2103]++,s[ts]);cov_18tmdn9r60().s[2104]++;if(l){cov_18tmdn9r60().b[802][0]++;let u=(cov_18tmdn9r60().s[2105]++,l.get(n,be,r&-5));cov_18tmdn9r60().s[2106]++;if(u!==be){cov_18tmdn9r60().b[803][0]++;cov_18tmdn9r60().s[2107]++;return u;}else{cov_18tmdn9r60().b[803][1]++;}}else{cov_18tmdn9r60().b[802][1]++;}cov_18tmdn9r60().s[2108]++;c=Au(s),s=s[vt];}else{cov_18tmdn9r60().b[801][1]++;}cov_18tmdn9r60().s[2109]++;i=c;}cov_18tmdn9r60().s[2110]++;return o;}function Au(e){cov_18tmdn9r60().f[794]++;let t=(cov_18tmdn9r60().s[2111]++,e[y]),n=(cov_18tmdn9r60().s[2112]++,t.type);cov_18tmdn9r60().s[2113]++;return n===2?(cov_18tmdn9r60().b[804][0]++,t.declTNode):(cov_18tmdn9r60().b[804][1]++,n===1?(cov_18tmdn9r60().b[805][0]++,e[J]):(cov_18tmdn9r60().b[805][1]++,null));}function Ru(e){cov_18tmdn9r60().f[795]++;cov_18tmdn9r60().s[2114]++;return rg(G(),e);}function lg(){cov_18tmdn9r60().f[796]++;cov_18tmdn9r60().s[2115]++;return rn(G(),v());}function rn(e,t){cov_18tmdn9r60().f[797]++;cov_18tmdn9r60().s[2116]++;return new Qn(fe(e,t));}var Qn=(cov_18tmdn9r60().s[2117]++,(()=>{cov_18tmdn9r60().f[798]++;class e{nativeElement;constructor(n){cov_18tmdn9r60().f[799]++;cov_18tmdn9r60().s[2118]++;this.nativeElement=n;}static __NG_ELEMENT_ID__=(cov_18tmdn9r60().s[2119]++,lg);}cov_18tmdn9r60().s[2120]++;return e;})());function ug(e){cov_18tmdn9r60().f[800]++;cov_18tmdn9r60().s[2121]++;return e instanceof Qn?(cov_18tmdn9r60().b[806][0]++,e.nativeElement):(cov_18tmdn9r60().b[806][1]++,e);}function dg(){cov_18tmdn9r60().f[801]++;cov_18tmdn9r60().s[2122]++;return this._results[Symbol.iterator]();}cov_18tmdn9r60().s[2123]++;var _o=class{_emitDistinctChangesOnly;dirty=(cov_18tmdn9r60().s[2124]++,!0);_onDirty=(cov_18tmdn9r60().s[2125]++,void 0);_results=(cov_18tmdn9r60().s[2126]++,[]);_changesDetected=(cov_18tmdn9r60().s[2127]++,!1);_changes=(cov_18tmdn9r60().s[2128]++,void 0);length=(cov_18tmdn9r60().s[2129]++,0);first=(cov_18tmdn9r60().s[2130]++,void 0);last=(cov_18tmdn9r60().s[2131]++,void 0);get changes(){cov_18tmdn9r60().f[802]++;cov_18tmdn9r60().s[2132]++;return this._changes??=new te();}constructor(t=(cov_18tmdn9r60().b[807][0]++,!1)){cov_18tmdn9r60().f[803]++;cov_18tmdn9r60().s[2133]++;this._emitDistinctChangesOnly=t;}get(t){cov_18tmdn9r60().f[804]++;cov_18tmdn9r60().s[2134]++;return this._results[t];}map(t){cov_18tmdn9r60().f[805]++;cov_18tmdn9r60().s[2135]++;return this._results.map(t);}filter(t){cov_18tmdn9r60().f[806]++;cov_18tmdn9r60().s[2136]++;return this._results.filter(t);}find(t){cov_18tmdn9r60().f[807]++;cov_18tmdn9r60().s[2137]++;return this._results.find(t);}reduce(t,n){cov_18tmdn9r60().f[808]++;cov_18tmdn9r60().s[2138]++;return this._results.reduce(t,n);}forEach(t){cov_18tmdn9r60().f[809]++;cov_18tmdn9r60().s[2139]++;this._results.forEach(t);}some(t){cov_18tmdn9r60().f[810]++;cov_18tmdn9r60().s[2140]++;return this._results.some(t);}toArray(){cov_18tmdn9r60().f[811]++;cov_18tmdn9r60().s[2141]++;return this._results.slice();}toString(){cov_18tmdn9r60().f[812]++;cov_18tmdn9r60().s[2142]++;return this._results.toString();}reset(t,n){cov_18tmdn9r60().f[813]++;cov_18tmdn9r60().s[2143]++;this.dirty=!1;let r=(cov_18tmdn9r60().s[2144]++,Jc(t));cov_18tmdn9r60().s[2145]++;(cov_18tmdn9r60().b[808][0]++,this._changesDetected=!Kc(this._results,r,n))&&(cov_18tmdn9r60().b[808][1]++,this._results=r,this.length=r.length,this.last=r[this.length-1],this.first=r[0]);}notifyOnChanges(){cov_18tmdn9r60().f[814]++;cov_18tmdn9r60().s[2146]++;(cov_18tmdn9r60().b[809][0]++,this._changes!==void 0)&&((cov_18tmdn9r60().b[809][1]++,this._changesDetected)||(cov_18tmdn9r60().b[809][2]++,!this._emitDistinctChangesOnly))&&(cov_18tmdn9r60().b[809][3]++,this._changes.next(this));}onDirty(t){cov_18tmdn9r60().f[815]++;cov_18tmdn9r60().s[2147]++;this._onDirty=t;}setDirty(){cov_18tmdn9r60().f[816]++;cov_18tmdn9r60().s[2148]++;this.dirty=!0,this._onDirty?.();}destroy(){cov_18tmdn9r60().f[817]++;cov_18tmdn9r60().s[2149]++;(cov_18tmdn9r60().b[810][0]++,this._changes!==void 0)&&(cov_18tmdn9r60().b[810][1]++,this._changes.complete(),this._changes.unsubscribe());}[Symbol.iterator]=(cov_18tmdn9r60().s[2150]++,dg);};function ku(e){cov_18tmdn9r60().f[818]++;cov_18tmdn9r60().s[2151]++;return(e.flags&128)===128;}var va=(cov_18tmdn9r60().s[2152]++,function(e){cov_18tmdn9r60().f[819]++;cov_18tmdn9r60().s[2153]++;return e[e.OnPush=0]="OnPush",e[e.Eager=1]="Eager",e[e.Default=1]="Default",e;}((cov_18tmdn9r60().b[811][0]++,va)||(cov_18tmdn9r60().b[811][1]++,{}))),Ou=(cov_18tmdn9r60().s[2154]++,new Map()),fg=(cov_18tmdn9r60().s[2155]++,0);function pg(){cov_18tmdn9r60().f[820]++;cov_18tmdn9r60().s[2156]++;return fg++;}function hg(e){cov_18tmdn9r60().f[821]++;cov_18tmdn9r60().s[2157]++;Ou.set(e[Oe],e);}function qs(e){cov_18tmdn9r60().f[822]++;cov_18tmdn9r60().s[2158]++;Ou.delete(e[Oe]);}var zl=(cov_18tmdn9r60().s[2159]++,"__ngContext__");function Xt(e,t){cov_18tmdn9r60().f[823]++;cov_18tmdn9r60().s[2160]++;Pe(t)?(cov_18tmdn9r60().b[812][0]++,e[zl]=t[Oe],hg(t)):(cov_18tmdn9r60().b[812][1]++,e[zl]=t);}function Pu(e){cov_18tmdn9r60().f[824]++;cov_18tmdn9r60().s[2161]++;return Fu(e[Gt]);}function Lu(e){cov_18tmdn9r60().f[825]++;cov_18tmdn9r60().s[2162]++;return Fu(e[oe]);}function Fu(e){cov_18tmdn9r60().f[826]++;cov_18tmdn9r60().s[2163]++;for(;(cov_18tmdn9r60().b[813][0]++,e!==null)&&(cov_18tmdn9r60().b[813][1]++,!de(e));){cov_18tmdn9r60().s[2164]++;e=e[oe];}cov_18tmdn9r60().s[2165]++;return e;}var gg;function mg(e){cov_18tmdn9r60().f[827]++;cov_18tmdn9r60().s[2166]++;gg=e;}var yg=(cov_18tmdn9r60().s[2167]++,new N("",{factory:()=>{cov_18tmdn9r60().f[828]++;cov_18tmdn9r60().s[2168]++;return vg;}})),vg=(cov_18tmdn9r60().s[2169]++,"ng");var ju=(cov_18tmdn9r60().s[2170]++,new N("")),Eg=(cov_18tmdn9r60().s[2171]++,new N("",{providedIn:"platform",factory:()=>{cov_18tmdn9r60().f[829]++;cov_18tmdn9r60().s[2172]++;return"unknown";}}));var Ig=(cov_18tmdn9r60().s[2173]++,new N("",{factory:()=>{cov_18tmdn9r60().f[830]++;cov_18tmdn9r60().s[2174]++;return(cov_18tmdn9r60().b[814][0]++,E(Zt).body?.querySelector("[ngCspNonce]")?.getAttribute("ngCspNonce"))||(cov_18tmdn9r60().b[814][1]++,null);}}));var Vu=(cov_18tmdn9r60().s[2175]++,"r");var Hu=(cov_18tmdn9r60().s[2176]++,"di");var Bu=(cov_18tmdn9r60().s[2177]++,!1),$u=(cov_18tmdn9r60().s[2178]++,new N("",{factory:()=>{cov_18tmdn9r60().f[831]++;cov_18tmdn9r60().s[2179]++;return Bu;}}));var Dg=(cov_18tmdn9r60().s[2180]++,new N(""));cov_18tmdn9r60().s[2181]++;var Cg=(e,t,n,r)=>{cov_18tmdn9r60().f[832]++;};function wg(e,t,n,r){cov_18tmdn9r60().f[833]++;cov_18tmdn9r60().s[2182]++;Cg(e,t,n,r);}function Uo(e){cov_18tmdn9r60().f[834]++;cov_18tmdn9r60().s[2183]++;return(e.flags&32)===32;}cov_18tmdn9r60().s[2184]++;var Tg=()=>{cov_18tmdn9r60().f[835]++;cov_18tmdn9r60().s[2185]++;return null;};function Uu(e,t,n=(cov_18tmdn9r60().b[815][0]++,!1)){cov_18tmdn9r60().f[836]++;cov_18tmdn9r60().s[2186]++;return Tg(e,t,n);}function Wu(e,t){cov_18tmdn9r60().f[837]++;let n=(cov_18tmdn9r60().s[2187]++,e.contentQueries);cov_18tmdn9r60().s[2188]++;if(n!==null){cov_18tmdn9r60().b[816][0]++;let r=(cov_18tmdn9r60().s[2189]++,g(null));cov_18tmdn9r60().s[2190]++;try{cov_18tmdn9r60().s[2191]++;for(let o=(cov_18tmdn9r60().s[2192]++,0);o{cov_18tmdn9r60().f[842]++;cov_18tmdn9r60().s[2221]++;return e;},createScript:e=>{cov_18tmdn9r60().f[843]++;cov_18tmdn9r60().s[2222]++;return e;},createScriptURL:e=>{cov_18tmdn9r60().f[844]++;cov_18tmdn9r60().s[2223]++;return e;}});}catch{}}else{cov_18tmdn9r60().b[821][1]++;}cov_18tmdn9r60().s[2224]++;return ho;}function Ql(e){cov_18tmdn9r60().f[845]++;cov_18tmdn9r60().s[2225]++;return(cov_18tmdn9r60().b[823][0]++,bg()?.createScriptURL(e))||(cov_18tmdn9r60().b[823][1]++,e);}cov_18tmdn9r60().s[2226]++;var Mo=class{changingThisBreaksApplicationSecurity;constructor(t){cov_18tmdn9r60().f[846]++;cov_18tmdn9r60().s[2227]++;this.changingThisBreaksApplicationSecurity=t;}toString(){cov_18tmdn9r60().f[847]++;cov_18tmdn9r60().s[2228]++;return`SafeValue must use [property]=binding: ${this.changingThisBreaksApplicationSecurity} (see ${$r})`;}};function Zn(e){cov_18tmdn9r60().f[848]++;cov_18tmdn9r60().s[2229]++;return e instanceof Mo?(cov_18tmdn9r60().b[824][0]++,e.changingThisBreaksApplicationSecurity):(cov_18tmdn9r60().b[824][1]++,e);}function Ea(e,t){cov_18tmdn9r60().f[849]++;let n=(cov_18tmdn9r60().s[2230]++,Gu(e));cov_18tmdn9r60().s[2231]++;if((cov_18tmdn9r60().b[826][0]++,n!=null)&&(cov_18tmdn9r60().b[826][1]++,n!==t)){cov_18tmdn9r60().b[825][0]++;cov_18tmdn9r60().s[2232]++;if((cov_18tmdn9r60().b[828][0]++,n==="ResourceURL")&&(cov_18tmdn9r60().b[828][1]++,t==="URL")){cov_18tmdn9r60().b[827][0]++;cov_18tmdn9r60().s[2233]++;return!0;}else{cov_18tmdn9r60().b[827][1]++;}cov_18tmdn9r60().s[2234]++;throw new Error(`Required a safe ${t}, got a ${n} (see ${$r})`);}else{cov_18tmdn9r60().b[825][1]++;}cov_18tmdn9r60().s[2235]++;return n===t;}function Gu(e){cov_18tmdn9r60().f[850]++;cov_18tmdn9r60().s[2236]++;return(cov_18tmdn9r60().b[829][0]++,e instanceof Mo)&&(cov_18tmdn9r60().b[829][1]++,e.getTypeName())||(cov_18tmdn9r60().b[829][2]++,null);}var _g=(cov_18tmdn9r60().s[2237]++,/^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:\/?#]*(?:[\/?#]|$))/i);function zu(e){cov_18tmdn9r60().f[851]++;cov_18tmdn9r60().s[2238]++;return e=String(e),e.match(_g)?(cov_18tmdn9r60().b[830][0]++,e):(cov_18tmdn9r60().b[830][1]++,"unsafe:"+e);}function Mg(e,t){cov_18tmdn9r60().f[852]++;cov_18tmdn9r60().s[2239]++;return e.createText(t);}function Ng(e,t,n){cov_18tmdn9r60().f[853]++;cov_18tmdn9r60().s[2240]++;e.setValue(t,n);}function Qu(e,t,n){cov_18tmdn9r60().f[854]++;cov_18tmdn9r60().s[2241]++;return e.createElement(t,n);}function No(e,t,n,r,o){cov_18tmdn9r60().f[855]++;cov_18tmdn9r60().s[2242]++;e.insertBefore(t,n,r,o);}function Zu(e,t,n){cov_18tmdn9r60().f[856]++;cov_18tmdn9r60().s[2243]++;e.appendChild(t,n);}function Zl(e,t,n,r,o){cov_18tmdn9r60().f[857]++;cov_18tmdn9r60().s[2244]++;r!==null?(cov_18tmdn9r60().b[831][0]++,No(e,t,n,r,o)):(cov_18tmdn9r60().b[831][1]++,Zu(e,t,n));}function Yu(e,t,n,r){cov_18tmdn9r60().f[858]++;cov_18tmdn9r60().s[2245]++;e.removeChild(null,t,n,r);}function Sg(e,t,n){cov_18tmdn9r60().f[859]++;cov_18tmdn9r60().s[2246]++;e.setAttribute(t,"style",n);}function xg(e,t,n){cov_18tmdn9r60().f[860]++;cov_18tmdn9r60().s[2247]++;n===""?(cov_18tmdn9r60().b[832][0]++,e.removeAttribute(t,"class")):(cov_18tmdn9r60().b[832][1]++,e.setAttribute(t,"class",n));}function Ku(e,t,n){cov_18tmdn9r60().f[861]++;let{mergedAttrs:r,classes:o,styles:i}=(cov_18tmdn9r60().s[2248]++,n);cov_18tmdn9r60().s[2249]++;(cov_18tmdn9r60().b[833][0]++,r!==null)&&(cov_18tmdn9r60().b[833][1]++,Kh(e,t,r)),(cov_18tmdn9r60().b[834][0]++,o!==null)&&(cov_18tmdn9r60().b[834][1]++,xg(e,t,o)),(cov_18tmdn9r60().b[835][0]++,i!==null)&&(cov_18tmdn9r60().b[835][1]++,Sg(e,t,i));}var Wo=(cov_18tmdn9r60().s[2250]++,function(e){cov_18tmdn9r60().f[862]++;cov_18tmdn9r60().s[2251]++;return e[e.NONE=0]="NONE",e[e.HTML=1]="HTML",e[e.STYLE=2]="STYLE",e[e.SCRIPT=3]="SCRIPT",e[e.URL=4]="URL",e[e.RESOURCE_URL=5]="RESOURCE_URL",e;}((cov_18tmdn9r60().b[836][0]++,Wo)||(cov_18tmdn9r60().b[836][1]++,{})));function Ju(e){cov_18tmdn9r60().f[863]++;let t=(cov_18tmdn9r60().s[2252]++,ed());cov_18tmdn9r60().s[2253]++;return t?(cov_18tmdn9r60().b[837][0]++,(cov_18tmdn9r60().b[838][0]++,t.sanitize(Wo.URL,e))||(cov_18tmdn9r60().b[838][1]++,"")):(cov_18tmdn9r60().b[837][1]++,Ea(e,"URL")?(cov_18tmdn9r60().b[839][0]++,Zn(e)):(cov_18tmdn9r60().b[839][1]++,zu($t(e))));}function Xu(e){cov_18tmdn9r60().f[864]++;let t=(cov_18tmdn9r60().s[2254]++,ed());cov_18tmdn9r60().s[2255]++;if(t){cov_18tmdn9r60().b[840][0]++;cov_18tmdn9r60().s[2256]++;return Ql((cov_18tmdn9r60().b[841][0]++,t.sanitize(Wo.RESOURCE_URL,e))||(cov_18tmdn9r60().b[841][1]++,""));}else{cov_18tmdn9r60().b[840][1]++;}cov_18tmdn9r60().s[2257]++;if(Ea(e,"ResourceURL")){cov_18tmdn9r60().b[842][0]++;cov_18tmdn9r60().s[2258]++;return Ql(Zn(e));}else{cov_18tmdn9r60().b[842][1]++;}cov_18tmdn9r60().s[2259]++;throw new T(904,!1);}var Ag=(cov_18tmdn9r60().s[2260]++,new Set(["embed","frame","iframe","media","script"])),Rg=(cov_18tmdn9r60().s[2261]++,new Set(["base","link","script"]));function kg(e,t){cov_18tmdn9r60().f[865]++;cov_18tmdn9r60().s[2262]++;return(cov_18tmdn9r60().b[844][0]++,t==="src")&&(cov_18tmdn9r60().b[844][1]++,Ag.has(e))||(cov_18tmdn9r60().b[844][2]++,t==="href")&&(cov_18tmdn9r60().b[844][3]++,Rg.has(e))||(cov_18tmdn9r60().b[844][4]++,t==="xlink:href")&&(cov_18tmdn9r60().b[844][5]++,e==="script")?(cov_18tmdn9r60().b[843][0]++,Xu):(cov_18tmdn9r60().b[843][1]++,Ju);}function Og(e,t,n){cov_18tmdn9r60().f[866]++;cov_18tmdn9r60().s[2263]++;return kg(t,n)(e);}function ed(){cov_18tmdn9r60().f[867]++;let e=(cov_18tmdn9r60().s[2264]++,v());cov_18tmdn9r60().s[2265]++;return(cov_18tmdn9r60().b[845][0]++,e)&&(cov_18tmdn9r60().b[845][1]++,e[ue].sanitizer);}function td(e){cov_18tmdn9r60().f[868]++;cov_18tmdn9r60().s[2266]++;return e instanceof Function?(cov_18tmdn9r60().b[846][0]++,e()):(cov_18tmdn9r60().b[846][1]++,e);}function Pg(e,t,n){cov_18tmdn9r60().f[869]++;let r=(cov_18tmdn9r60().s[2267]++,e.length);cov_18tmdn9r60().s[2268]++;for(;;){let o=(cov_18tmdn9r60().s[2269]++,e.indexOf(t,n));cov_18tmdn9r60().s[2270]++;if(o===-1){cov_18tmdn9r60().b[847][0]++;cov_18tmdn9r60().s[2271]++;return o;}else{cov_18tmdn9r60().b[847][1]++;}cov_18tmdn9r60().s[2272]++;if((cov_18tmdn9r60().b[849][0]++,o===0)||(cov_18tmdn9r60().b[849][1]++,e.charCodeAt(o-1)<=32)){cov_18tmdn9r60().b[848][0]++;let i=(cov_18tmdn9r60().s[2273]++,t.length);cov_18tmdn9r60().s[2274]++;if((cov_18tmdn9r60().b[851][0]++,o+i===r)||(cov_18tmdn9r60().b[851][1]++,e.charCodeAt(o+i)<=32)){cov_18tmdn9r60().b[850][0]++;cov_18tmdn9r60().s[2275]++;return o;}else{cov_18tmdn9r60().b[850][1]++;}}else{cov_18tmdn9r60().b[848][1]++;}cov_18tmdn9r60().s[2276]++;n=o+1;}}var nd=(cov_18tmdn9r60().s[2277]++,"ng-template");function Lg(e,t,n,r){cov_18tmdn9r60().f[870]++;let o=(cov_18tmdn9r60().s[2278]++,0);cov_18tmdn9r60().s[2279]++;if(r){cov_18tmdn9r60().b[852][0]++;cov_18tmdn9r60().s[2280]++;for(;(cov_18tmdn9r60().b[853][0]++,o-1){cov_18tmdn9r60().b[857][0]++;let i;cov_18tmdn9r60().s[2286]++;for(;(cov_18tmdn9r60().b[858][0]++,++oi?(cov_18tmdn9r60().b[882][0]++,d=""):(cov_18tmdn9r60().b[882][1]++,d=o[u+1].toLowerCase()),(cov_18tmdn9r60().b[883][0]++,r&2)&&(cov_18tmdn9r60().b[883][1]++,l!==d)){cov_18tmdn9r60().b[881][0]++;cov_18tmdn9r60().s[2327]++;if(pe(r)){cov_18tmdn9r60().b[884][0]++;cov_18tmdn9r60().s[2328]++;return!1;}else{cov_18tmdn9r60().b[884][1]++;}cov_18tmdn9r60().s[2329]++;s=!0;}else{cov_18tmdn9r60().b[881][1]++;}}else{cov_18tmdn9r60().b[880][1]++;}}}}else{cov_18tmdn9r60().b[869][1]++;}}cov_18tmdn9r60().s[2330]++;return(cov_18tmdn9r60().b[885][0]++,pe(r))||(cov_18tmdn9r60().b[885][1]++,s);}function pe(e){cov_18tmdn9r60().f[874]++;cov_18tmdn9r60().s[2331]++;return(e&1)===0;}function Vg(e,t,n,r){cov_18tmdn9r60().f[875]++;cov_18tmdn9r60().s[2332]++;if(t===null){cov_18tmdn9r60().b[886][0]++;cov_18tmdn9r60().s[2333]++;return-1;}else{cov_18tmdn9r60().b[886][1]++;}let o=(cov_18tmdn9r60().s[2334]++,0);cov_18tmdn9r60().s[2335]++;if((cov_18tmdn9r60().b[888][0]++,r)||(cov_18tmdn9r60().b[888][1]++,!n)){cov_18tmdn9r60().b[887][0]++;let i=(cov_18tmdn9r60().s[2336]++,!1);cov_18tmdn9r60().s[2337]++;for(;o-1){cov_18tmdn9r60().b[902][0]++;cov_18tmdn9r60().s[2375]++;for(n++;n0?(cov_18tmdn9r60().b[910][0]++,'="'+a+'"'):(cov_18tmdn9r60().b[910][1]++,""))+"]";}else{cov_18tmdn9r60().b[909][1]++;cov_18tmdn9r60().s[2406]++;r&8?(cov_18tmdn9r60().b[911][0]++,o+="."+s):(cov_18tmdn9r60().b[911][1]++,(cov_18tmdn9r60().b[912][0]++,r&4)&&(cov_18tmdn9r60().b[912][1]++,o+=" "+s));}}else{cov_18tmdn9r60().b[908][1]++;cov_18tmdn9r60().s[2407]++;(cov_18tmdn9r60().b[913][0]++,o!=="")&&(cov_18tmdn9r60().b[913][1]++,!pe(s))&&(cov_18tmdn9r60().b[913][2]++,t+=Yl(i,o),o=""),r=s,i=(cov_18tmdn9r60().b[914][0]++,i)||(cov_18tmdn9r60().b[914][1]++,!pe(r));}cov_18tmdn9r60().s[2408]++;n++;}cov_18tmdn9r60().s[2409]++;return(cov_18tmdn9r60().b[915][0]++,o!=="")&&(cov_18tmdn9r60().b[915][1]++,t+=Yl(i,o)),t;}function qg(e){cov_18tmdn9r60().f[883]++;cov_18tmdn9r60().s[2410]++;return e.map(Wg).join(",");}function Gg(e){cov_18tmdn9r60().f[884]++;let t=(cov_18tmdn9r60().s[2411]++,[]),n=(cov_18tmdn9r60().s[2412]++,[]),r=(cov_18tmdn9r60().s[2413]++,1),o=(cov_18tmdn9r60().s[2414]++,2);cov_18tmdn9r60().s[2415]++;for(;r=0;i--){let s=(cov_18tmdn9r60().s[2483]++,n[i]),a=(cov_18tmdn9r60().s[2484]++,s.parentNode);cov_18tmdn9r60().s[2485]++;s===t?(cov_18tmdn9r60().b[952][0]++,n.splice(i,1),Zs.add(s),s.dispatchEvent(new CustomEvent("animationend",{detail:{cancel:!0}}))):(cov_18tmdn9r60().b[952][1]++,((cov_18tmdn9r60().b[953][0]++,o)&&(cov_18tmdn9r60().b[953][1]++,s===o)||(cov_18tmdn9r60().b[953][2]++,a)&&(cov_18tmdn9r60().b[953][3]++,r)&&(cov_18tmdn9r60().b[953][4]++,a!==r))&&(cov_18tmdn9r60().b[953][5]++,n.splice(i,1),s.dispatchEvent(new CustomEvent("animationend",{detail:{cancel:!0}})),s.parentNode?.removeChild(s)));}}function Xg(e,t){cov_18tmdn9r60().f[900]++;let n=(cov_18tmdn9r60().s[2486]++,Qs.get(e));cov_18tmdn9r60().s[2487]++;n?(cov_18tmdn9r60().b[954][0]++,(cov_18tmdn9r60().b[955][0]++,n.includes(t))||(cov_18tmdn9r60().b[955][1]++,n.push(t))):(cov_18tmdn9r60().b[954][1]++,Qs.set(e,[t]));}var Vn=(cov_18tmdn9r60().s[2488]++,new Set()),Go=(cov_18tmdn9r60().s[2489]++,function(e){cov_18tmdn9r60().f[901]++;cov_18tmdn9r60().s[2490]++;return e[e.CHANGE_DETECTION=0]="CHANGE_DETECTION",e[e.AFTER_NEXT_RENDER=1]="AFTER_NEXT_RENDER",e;}((cov_18tmdn9r60().b[956][0]++,Go)||(cov_18tmdn9r60().b[956][1]++,{}))),on=(cov_18tmdn9r60().s[2491]++,new N("")),Kl=(cov_18tmdn9r60().s[2492]++,new Set());function At(e){cov_18tmdn9r60().f[902]++;cov_18tmdn9r60().s[2493]++;(cov_18tmdn9r60().b[957][0]++,Kl.has(e))||(cov_18tmdn9r60().b[957][1]++,Kl.add(e),performance?.mark?.("mark_feature_usage",{detail:{feature:e}}));}cov_18tmdn9r60().s[2534]++;var ba=(cov_18tmdn9r60().s[2494]++,(()=>{cov_18tmdn9r60().f[903]++;class e{impl=(cov_18tmdn9r60().s[2495]++,null);execute(){cov_18tmdn9r60().f[904]++;cov_18tmdn9r60().s[2496]++;this.impl?.execute();}static ɵprov=(cov_18tmdn9r60().s[2497]++,V({token:e,providedIn:"root",factory:()=>{cov_18tmdn9r60().f[905]++;cov_18tmdn9r60().s[2498]++;return new e();}}));}cov_18tmdn9r60().s[2499]++;return e;})()),ad=(cov_18tmdn9r60().s[2500]++,[0,1,2,3]),cd=(cov_18tmdn9r60().s[2501]++,(()=>{cov_18tmdn9r60().f[906]++;class e{ngZone=(cov_18tmdn9r60().s[2502]++,E(De));scheduler=(cov_18tmdn9r60().s[2503]++,E(Ae));errorHandler=(cov_18tmdn9r60().s[2504]++,E(xe,{optional:!0}));sequences=(cov_18tmdn9r60().s[2505]++,new Set());deferredRegistrations=(cov_18tmdn9r60().s[2506]++,new Set());executing=(cov_18tmdn9r60().s[2507]++,!1);constructor(){cov_18tmdn9r60().f[907]++;cov_18tmdn9r60().s[2508]++;E(on,{optional:!0});}execute(){cov_18tmdn9r60().f[908]++;let n=(cov_18tmdn9r60().s[2509]++,this.sequences.size>0);cov_18tmdn9r60().s[2510]++;(cov_18tmdn9r60().b[958][0]++,n)&&(cov_18tmdn9r60().b[958][1]++,x(M.AfterRenderHooksStart)),this.executing=!0;cov_18tmdn9r60().s[2511]++;for(let r of ad){cov_18tmdn9r60().s[2512]++;for(let o of this.sequences){cov_18tmdn9r60().s[2513]++;if(!((cov_18tmdn9r60().b[960][0]++,o.erroredOrDestroyed)||(cov_18tmdn9r60().b[960][1]++,!o.hooks[r]))){cov_18tmdn9r60().b[959][0]++;cov_18tmdn9r60().s[2514]++;try{cov_18tmdn9r60().s[2515]++;o.pipelinedValue=this.ngZone.runOutsideAngular(()=>{cov_18tmdn9r60().f[909]++;cov_18tmdn9r60().s[2516]++;return this.maybeTrace(()=>{cov_18tmdn9r60().f[910]++;let i=(cov_18tmdn9r60().s[2517]++,o.hooks[r]);cov_18tmdn9r60().s[2518]++;return i(o.pipelinedValue);},o.snapshot);});}catch(i){cov_18tmdn9r60().s[2519]++;o.erroredOrDestroyed=!0,this.errorHandler?.handleError(i);}}else{cov_18tmdn9r60().b[959][1]++;}}}cov_18tmdn9r60().s[2520]++;this.executing=!1;cov_18tmdn9r60().s[2521]++;for(let r of this.sequences){cov_18tmdn9r60().s[2522]++;r.afterRun(),(cov_18tmdn9r60().b[961][0]++,r.once)&&(cov_18tmdn9r60().b[961][1]++,this.sequences.delete(r),r.destroy());}cov_18tmdn9r60().s[2523]++;for(let r of this.deferredRegistrations){cov_18tmdn9r60().s[2524]++;this.sequences.add(r);}cov_18tmdn9r60().s[2525]++;(cov_18tmdn9r60().b[962][0]++,this.deferredRegistrations.size>0)&&(cov_18tmdn9r60().b[962][1]++,this.scheduler.notify(7)),this.deferredRegistrations.clear(),(cov_18tmdn9r60().b[963][0]++,n)&&(cov_18tmdn9r60().b[963][1]++,x(M.AfterRenderHooksEnd));}register(n){cov_18tmdn9r60().f[911]++;let{view:r}=(cov_18tmdn9r60().s[2526]++,n);cov_18tmdn9r60().s[2527]++;r!==void 0?(cov_18tmdn9r60().b[964][0]++,(r[It]??=[]).push(n),wt(r),r[I]|=8192):(cov_18tmdn9r60().b[964][1]++,this.executing?(cov_18tmdn9r60().b[965][0]++,this.deferredRegistrations.add(n)):(cov_18tmdn9r60().b[965][1]++,this.addSequence(n)));}addSequence(n){cov_18tmdn9r60().f[912]++;cov_18tmdn9r60().s[2528]++;this.sequences.add(n),this.scheduler.notify(7);}unregister(n){cov_18tmdn9r60().f[913]++;cov_18tmdn9r60().s[2529]++;(cov_18tmdn9r60().b[967][0]++,this.executing)&&(cov_18tmdn9r60().b[967][1]++,this.sequences.has(n))?(cov_18tmdn9r60().b[966][0]++,n.erroredOrDestroyed=!0,n.pipelinedValue=void 0,n.once=!0):(cov_18tmdn9r60().b[966][1]++,this.sequences.delete(n),this.deferredRegistrations.delete(n));}maybeTrace(n,r){cov_18tmdn9r60().f[914]++;cov_18tmdn9r60().s[2530]++;return r?(cov_18tmdn9r60().b[968][0]++,r.run(Go.AFTER_NEXT_RENDER,n)):(cov_18tmdn9r60().b[968][1]++,n());}static ɵprov=(cov_18tmdn9r60().s[2531]++,V({token:e,providedIn:"root",factory:()=>{cov_18tmdn9r60().f[915]++;cov_18tmdn9r60().s[2532]++;return new e();}}));}cov_18tmdn9r60().s[2533]++;return e;})()),xo=class{impl;hooks;view;once;snapshot;erroredOrDestroyed=(cov_18tmdn9r60().s[2535]++,!1);pipelinedValue=(cov_18tmdn9r60().s[2536]++,void 0);unregisterOnDestroy;constructor(t,n,r,o,i,s=(cov_18tmdn9r60().b[969][0]++,null)){cov_18tmdn9r60().f[916]++;cov_18tmdn9r60().s[2537]++;this.impl=t,this.hooks=n,this.view=r,this.once=o,this.snapshot=s,this.unregisterOnDestroy=i?.onDestroy(()=>{cov_18tmdn9r60().f[917]++;cov_18tmdn9r60().s[2538]++;return this.destroy();});}afterRun(){cov_18tmdn9r60().f[918]++;cov_18tmdn9r60().s[2539]++;this.erroredOrDestroyed=!1,this.pipelinedValue=void 0,this.snapshot?.dispose(),this.snapshot=null;}destroy(){cov_18tmdn9r60().f[919]++;cov_18tmdn9r60().s[2540]++;this.impl.unregister(this),this.unregisterOnDestroy?.();let t=(cov_18tmdn9r60().s[2541]++,this.view?.[It]);cov_18tmdn9r60().s[2542]++;(cov_18tmdn9r60().b[970][0]++,t)&&(cov_18tmdn9r60().b[970][1]++,this.view[It]=t.filter(n=>{cov_18tmdn9r60().f[920]++;cov_18tmdn9r60().s[2543]++;return n!==this;}));}};function em(e,t){cov_18tmdn9r60().f[921]++;let n=(cov_18tmdn9r60().s[2544]++,(cov_18tmdn9r60().b[971][0]++,t?.injector)??(cov_18tmdn9r60().b[971][1]++,E(Ie)));cov_18tmdn9r60().s[2545]++;return At("NgAfterNextRender"),nm(e,n,t,!0);}function tm(e){cov_18tmdn9r60().f[922]++;cov_18tmdn9r60().s[2546]++;return e instanceof Function?(cov_18tmdn9r60().b[972][0]++,[void 0,void 0,e,void 0]):(cov_18tmdn9r60().b[972][1]++,[e.earlyRead,e.write,e.mixedReadWrite,e.read]);}function nm(e,t,n,r){cov_18tmdn9r60().f[923]++;let o=(cov_18tmdn9r60().s[2547]++,t.get(ba));cov_18tmdn9r60().s[2548]++;o.impl??=t.get(cd);let i=(cov_18tmdn9r60().s[2549]++,t.get(on,null,{optional:!0})),s=(cov_18tmdn9r60().s[2550]++,n?.manualCleanup!==!0?(cov_18tmdn9r60().b[973][0]++,t.get(Fe)):(cov_18tmdn9r60().b[973][1]++,null)),a=(cov_18tmdn9r60().s[2551]++,t.get(kn,null,{optional:!0})),c=(cov_18tmdn9r60().s[2552]++,new xo(o.impl,tm(e),a?.view,r,s,i?.snapshot(null)));cov_18tmdn9r60().s[2553]++;return o.impl.register(c),c;}var ld=(cov_18tmdn9r60().s[2554]++,new N("",{factory:()=>{cov_18tmdn9r60().f[924]++;cov_18tmdn9r60().s[2555]++;return{queue:new Set(),isScheduled:!1,scheduler:null,injector:E(re)};}}));function ud(e,t,n){cov_18tmdn9r60().f[925]++;let r=(cov_18tmdn9r60().s[2556]++,e.get(ld));cov_18tmdn9r60().s[2557]++;if(Array.isArray(t)){cov_18tmdn9r60().b[974][0]++;cov_18tmdn9r60().s[2558]++;for(let o of t){cov_18tmdn9r60().s[2559]++;r.queue.add(o),n?.detachedLeaveAnimationFns?.push(o);}}else{cov_18tmdn9r60().b[974][1]++;cov_18tmdn9r60().s[2560]++;r.queue.add(t),n?.detachedLeaveAnimationFns?.push(t);}cov_18tmdn9r60().s[2561]++;(cov_18tmdn9r60().b[975][0]++,r.scheduler)&&(cov_18tmdn9r60().b[975][1]++,r.scheduler(e));}function rm(e,t){cov_18tmdn9r60().f[926]++;let n=(cov_18tmdn9r60().s[2562]++,e.get(ld));cov_18tmdn9r60().s[2563]++;if(t.detachedLeaveAnimationFns){cov_18tmdn9r60().b[976][0]++;cov_18tmdn9r60().s[2564]++;for(let r of t.detachedLeaveAnimationFns){cov_18tmdn9r60().s[2565]++;n.queue.delete(r);}cov_18tmdn9r60().s[2566]++;t.detachedLeaveAnimationFns=void 0;}else{cov_18tmdn9r60().b[976][1]++;}}function om(e,t){cov_18tmdn9r60().f[927]++;cov_18tmdn9r60().s[2567]++;for(let[n,r]of t){cov_18tmdn9r60().s[2568]++;ud(e,r.animateFns);}}function Jl(e,t,n,r){cov_18tmdn9r60().f[928]++;let o=(cov_18tmdn9r60().s[2569]++,e?.[Ke]?.enter);cov_18tmdn9r60().s[2570]++;(cov_18tmdn9r60().b[977][0]++,t!==null)&&(cov_18tmdn9r60().b[977][1]++,o)&&(cov_18tmdn9r60().b[977][2]++,o.has(n.index))&&(cov_18tmdn9r60().b[977][3]++,om(r,o));}function Yt(e,t,n,r,o,i,s,a){cov_18tmdn9r60().f[929]++;cov_18tmdn9r60().s[2571]++;if(o!=null){cov_18tmdn9r60().b[978][0]++;let c,l=(cov_18tmdn9r60().s[2572]++,!1);cov_18tmdn9r60().s[2573]++;de(o)?(cov_18tmdn9r60().b[979][0]++,c=o):(cov_18tmdn9r60().b[979][1]++,(cov_18tmdn9r60().b[980][0]++,Pe(o))&&(cov_18tmdn9r60().b[980][1]++,l=!0,o=o[le]));let u=(cov_18tmdn9r60().s[2574]++,ie(o));cov_18tmdn9r60().s[2575]++;(cov_18tmdn9r60().b[982][0]++,e===0)&&(cov_18tmdn9r60().b[982][1]++,r!==null)?(cov_18tmdn9r60().b[981][0]++,Jl(a,r,i,n),s==null?(cov_18tmdn9r60().b[983][0]++,Zu(t,r,u)):(cov_18tmdn9r60().b[983][1]++,No(t,r,u,(cov_18tmdn9r60().b[984][0]++,s)||(cov_18tmdn9r60().b[984][1]++,null),!0))):(cov_18tmdn9r60().b[981][1]++,(cov_18tmdn9r60().b[986][0]++,e===1)&&(cov_18tmdn9r60().b[986][1]++,r!==null)?(cov_18tmdn9r60().b[985][0]++,Jl(a,r,i,n),No(t,r,u,(cov_18tmdn9r60().b[987][0]++,s)||(cov_18tmdn9r60().b[987][1]++,null),!0),Jg(i,u)):(cov_18tmdn9r60().b[985][1]++,e===2?(cov_18tmdn9r60().b[988][0]++,(cov_18tmdn9r60().b[989][0]++,a?.[Ke]?.leave?.has(i.index))&&(cov_18tmdn9r60().b[989][1]++,Xg(i,u)),Xl(a,i,n,d=>{cov_18tmdn9r60().f[930]++;cov_18tmdn9r60().s[2576]++;if(Zs.has(u)){cov_18tmdn9r60().b[990][0]++;cov_18tmdn9r60().s[2577]++;Zs.delete(u);cov_18tmdn9r60().s[2578]++;return;}else{cov_18tmdn9r60().b[990][1]++;}cov_18tmdn9r60().s[2579]++;Yu(t,u,l,d);})):(cov_18tmdn9r60().b[988][1]++,(cov_18tmdn9r60().b[991][0]++,e===3)&&(cov_18tmdn9r60().b[991][1]++,Xl(a,i,n,()=>{cov_18tmdn9r60().f[931]++;cov_18tmdn9r60().s[2580]++;t.destroyNode(u);}))))),(cov_18tmdn9r60().b[992][0]++,c!=null)&&(cov_18tmdn9r60().b[992][1]++,gm(t,e,n,c,i,r,s));}else{cov_18tmdn9r60().b[978][1]++;}}function im(e,t){cov_18tmdn9r60().f[932]++;cov_18tmdn9r60().s[2581]++;dd(e,t),t[le]=null,t[J]=null;}function sm(e,t,n,r,o,i){cov_18tmdn9r60().f[933]++;cov_18tmdn9r60().s[2582]++;r[le]=o,r[J]=t,Qo(e,r,n,1,o,i);}function dd(e,t){cov_18tmdn9r60().f[934]++;cov_18tmdn9r60().s[2583]++;t[ue].changeDetectionScheduler?.notify(9),Qo(e,t,t[O],2,null,null);}function am(e){cov_18tmdn9r60().f[935]++;let t=(cov_18tmdn9r60().s[2584]++,e[Gt]);cov_18tmdn9r60().s[2585]++;if(!t){cov_18tmdn9r60().b[993][0]++;cov_18tmdn9r60().s[2586]++;return ks(e[y],e);}else{cov_18tmdn9r60().b[993][1]++;}cov_18tmdn9r60().s[2587]++;for(;t;){let n=(cov_18tmdn9r60().s[2588]++,null);cov_18tmdn9r60().s[2589]++;if(Pe(t)){cov_18tmdn9r60().b[994][0]++;cov_18tmdn9r60().s[2590]++;n=t[Gt];}else{cov_18tmdn9r60().b[994][1]++;let r=(cov_18tmdn9r60().s[2591]++,t[F]);cov_18tmdn9r60().s[2592]++;(cov_18tmdn9r60().b[995][0]++,r)&&(cov_18tmdn9r60().b[995][1]++,n=r);}cov_18tmdn9r60().s[2593]++;if(!n){cov_18tmdn9r60().b[996][0]++;cov_18tmdn9r60().s[2594]++;for(;(cov_18tmdn9r60().b[997][0]++,t)&&(cov_18tmdn9r60().b[997][1]++,!t[oe])&&(cov_18tmdn9r60().b[997][2]++,t!==e);){cov_18tmdn9r60().s[2595]++;(cov_18tmdn9r60().b[998][0]++,Pe(t))&&(cov_18tmdn9r60().b[998][1]++,ks(t[y],t)),t=t[H];}cov_18tmdn9r60().s[2596]++;(cov_18tmdn9r60().b[999][0]++,t===null)&&(cov_18tmdn9r60().b[999][1]++,t=e),(cov_18tmdn9r60().b[1000][0]++,Pe(t))&&(cov_18tmdn9r60().b[1000][1]++,ks(t[y],t)),n=(cov_18tmdn9r60().b[1001][0]++,t)&&(cov_18tmdn9r60().b[1001][1]++,t[oe]);}else{cov_18tmdn9r60().b[996][1]++;}cov_18tmdn9r60().s[2597]++;t=n;}}function _a(e,t){cov_18tmdn9r60().f[936]++;let n=(cov_18tmdn9r60().s[2598]++,e[Dt]),r=(cov_18tmdn9r60().s[2599]++,n.indexOf(t));cov_18tmdn9r60().s[2600]++;n.splice(r,1);}function zo(e,t){cov_18tmdn9r60().f[937]++;cov_18tmdn9r60().s[2601]++;if(Ct(t)){cov_18tmdn9r60().b[1002][0]++;cov_18tmdn9r60().s[2602]++;return;}else{cov_18tmdn9r60().b[1002][1]++;}let n=(cov_18tmdn9r60().s[2603]++,t[O]);cov_18tmdn9r60().s[2604]++;(cov_18tmdn9r60().b[1003][0]++,n.destroyNode)&&(cov_18tmdn9r60().b[1003][1]++,Qo(e,t,n,3,null,null)),am(t);}function ks(e,t){cov_18tmdn9r60().f[938]++;cov_18tmdn9r60().s[2605]++;if(Ct(t)){cov_18tmdn9r60().b[1004][0]++;cov_18tmdn9r60().s[2606]++;return;}else{cov_18tmdn9r60().b[1004][1]++;}let n=(cov_18tmdn9r60().s[2607]++,g(null));cov_18tmdn9r60().s[2608]++;try{cov_18tmdn9r60().s[2609]++;t[I]&=-129,t[I]|=256,(cov_18tmdn9r60().b[1005][0]++,t[ne])&&(cov_18tmdn9r60().b[1005][1]++,ut(t[ne])),um(e,t),lm(e,t),(cov_18tmdn9r60().b[1006][0]++,t[y].type===1)&&(cov_18tmdn9r60().b[1006][1]++,t[O].destroy());let r=(cov_18tmdn9r60().s[2610]++,t[Ye]);cov_18tmdn9r60().s[2611]++;if((cov_18tmdn9r60().b[1008][0]++,r!==null)&&(cov_18tmdn9r60().b[1008][1]++,de(t[H]))){cov_18tmdn9r60().b[1007][0]++;cov_18tmdn9r60().s[2612]++;(cov_18tmdn9r60().b[1009][0]++,r!==t[H])&&(cov_18tmdn9r60().b[1009][1]++,_a(r,t));let o=(cov_18tmdn9r60().s[2613]++,t[Ce]);cov_18tmdn9r60().s[2614]++;(cov_18tmdn9r60().b[1010][0]++,o!==null)&&(cov_18tmdn9r60().b[1010][1]++,o.detachView(e));}else{cov_18tmdn9r60().b[1007][1]++;}cov_18tmdn9r60().s[2615]++;qs(t);}finally{cov_18tmdn9r60().s[2616]++;g(n);}}function Xl(e,t,n,r){cov_18tmdn9r60().f[939]++;let o=(cov_18tmdn9r60().s[2617]++,e?.[Ke]);cov_18tmdn9r60().s[2618]++;if((cov_18tmdn9r60().b[1012][0]++,o==null)||(cov_18tmdn9r60().b[1012][1]++,o.leave==null)||(cov_18tmdn9r60().b[1012][2]++,!o.leave.has(t.index))){cov_18tmdn9r60().b[1011][0]++;cov_18tmdn9r60().s[2619]++;return r(!1);}else{cov_18tmdn9r60().b[1011][1]++;}cov_18tmdn9r60().s[2620]++;(cov_18tmdn9r60().b[1013][0]++,e)&&(cov_18tmdn9r60().b[1013][1]++,Vn.add(e[Oe])),ud(n,()=>{cov_18tmdn9r60().f[940]++;cov_18tmdn9r60().s[2621]++;if((cov_18tmdn9r60().b[1015][0]++,o.leave)&&(cov_18tmdn9r60().b[1015][1]++,o.leave.has(t.index))){cov_18tmdn9r60().b[1014][0]++;let s=(cov_18tmdn9r60().s[2622]++,o.leave.get(t.index)),a=(cov_18tmdn9r60().s[2623]++,[]);cov_18tmdn9r60().s[2624]++;if(s){cov_18tmdn9r60().b[1016][0]++;cov_18tmdn9r60().s[2625]++;for(let c=(cov_18tmdn9r60().s[2626]++,0);c{cov_18tmdn9r60().f[942]++;cov_18tmdn9r60().s[2636]++;e[Ke].running=void 0,Vn.delete(e[Oe]),t(!0);});cov_18tmdn9r60().s[2637]++;return;}else{cov_18tmdn9r60().b[1018][1]++;}cov_18tmdn9r60().s[2638]++;t(!1);}function lm(e,t){cov_18tmdn9r60().f[943]++;let n=(cov_18tmdn9r60().s[2639]++,e.cleanup),r=(cov_18tmdn9r60().s[2640]++,t[qt]);cov_18tmdn9r60().s[2641]++;if(n!==null){cov_18tmdn9r60().b[1019][0]++;cov_18tmdn9r60().s[2642]++;for(let s=(cov_18tmdn9r60().s[2643]++,0);s=0?(cov_18tmdn9r60().b[1021][0]++,r[a]()):(cov_18tmdn9r60().b[1021][1]++,r[-a].unsubscribe()),s+=2;}else{cov_18tmdn9r60().b[1020][1]++;let a=(cov_18tmdn9r60().s[2647]++,r[n[s+1]]);cov_18tmdn9r60().s[2648]++;n[s].call(a);}}}else{cov_18tmdn9r60().b[1019][1]++;}cov_18tmdn9r60().s[2649]++;(cov_18tmdn9r60().b[1022][0]++,r!==null)&&(cov_18tmdn9r60().b[1022][1]++,t[qt]=null);let o=(cov_18tmdn9r60().s[2650]++,t[Se]);cov_18tmdn9r60().s[2651]++;if(o!==null){cov_18tmdn9r60().b[1023][0]++;cov_18tmdn9r60().s[2652]++;t[Se]=null;cov_18tmdn9r60().s[2653]++;for(let s=(cov_18tmdn9r60().s[2654]++,0);sP)&&(cov_18tmdn9r60().b[1070][2]++,sd(e,t,P,!1));let a=(cov_18tmdn9r60().s[2790]++,s?(cov_18tmdn9r60().b[1071][0]++,M.TemplateUpdateStart):(cov_18tmdn9r60().b[1071][1]++,M.TemplateCreateStart));cov_18tmdn9r60().s[2791]++;x(a,o,n),n(r,o);}finally{cov_18tmdn9r60().s[2792]++;Xe(i);let a=(cov_18tmdn9r60().s[2793]++,s?(cov_18tmdn9r60().b[1072][0]++,M.TemplateUpdateEnd):(cov_18tmdn9r60().b[1072][1]++,M.TemplateCreateEnd));cov_18tmdn9r60().s[2794]++;x(a,o,n);}}function Sa(e,t,n){cov_18tmdn9r60().f[960]++;cov_18tmdn9r60().s[2795]++;wm(e,t,n),(cov_18tmdn9r60().b[1073][0]++,(n.flags&64)===64)&&(cov_18tmdn9r60().b[1073][1]++,Tm(e,t,n));}function Zo(e,t,n=(cov_18tmdn9r60().b[1074][0]++,fe)){cov_18tmdn9r60().f[961]++;let r=(cov_18tmdn9r60().s[2796]++,t.localNames);cov_18tmdn9r60().s[2797]++;if(r!==null){cov_18tmdn9r60().b[1075][0]++;let o=(cov_18tmdn9r60().s[2798]++,t.index+1);cov_18tmdn9r60().s[2799]++;for(let i=(cov_18tmdn9r60().s[2800]++,0);i{cov_18tmdn9r60().f[964]++;cov_18tmdn9r60().s[2809]++;return null;};function Im(e){cov_18tmdn9r60().f[965]++;cov_18tmdn9r60().s[2810]++;return e==="class"?(cov_18tmdn9r60().b[1078][0]++,"className"):(cov_18tmdn9r60().b[1078][1]++,e==="for"?(cov_18tmdn9r60().b[1079][0]++,"htmlFor"):(cov_18tmdn9r60().b[1079][1]++,e==="formaction"?(cov_18tmdn9r60().b[1080][0]++,"formAction"):(cov_18tmdn9r60().b[1080][1]++,e==="innerHtml"?(cov_18tmdn9r60().b[1081][0]++,"innerHTML"):(cov_18tmdn9r60().b[1081][1]++,e==="readonly"?(cov_18tmdn9r60().b[1082][0]++,"readOnly"):(cov_18tmdn9r60().b[1082][1]++,e==="tabindex"?(cov_18tmdn9r60().b[1083][0]++,"tabIndex"):(cov_18tmdn9r60().b[1083][1]++,e))))));}function Dm(e,t,n,r,o,i){cov_18tmdn9r60().f[966]++;let s=(cov_18tmdn9r60().s[2811]++,t[y]);cov_18tmdn9r60().s[2812]++;if(xa(e,s,t,n,r)){cov_18tmdn9r60().b[1084][0]++;cov_18tmdn9r60().s[2813]++;(cov_18tmdn9r60().b[1085][0]++,Le(e))&&(cov_18tmdn9r60().b[1085][1]++,Cm(t,e.index));cov_18tmdn9r60().s[2814]++;return;}else{cov_18tmdn9r60().b[1084][1]++;}cov_18tmdn9r60().s[2815]++;(cov_18tmdn9r60().b[1086][0]++,e.type&3)&&(cov_18tmdn9r60().b[1086][1]++,n=Im(n)),yd(e,t,n,r,o,i);}function yd(e,t,n,r,o,i){cov_18tmdn9r60().f[967]++;cov_18tmdn9r60().s[2816]++;if(e.type&3){cov_18tmdn9r60().b[1087][0]++;let s=(cov_18tmdn9r60().s[2817]++,fe(e,t));cov_18tmdn9r60().s[2818]++;r=i!=null?(cov_18tmdn9r60().b[1088][0]++,i(r,(cov_18tmdn9r60().b[1089][0]++,e.value)||(cov_18tmdn9r60().b[1089][1]++,""),n)):(cov_18tmdn9r60().b[1088][1]++,r),o.setProperty(s,n,r);}else{cov_18tmdn9r60().b[1087][1]++;cov_18tmdn9r60().s[2819]++;e.type&12;}}function Cm(e,t){cov_18tmdn9r60().f[968]++;let n=(cov_18tmdn9r60().s[2820]++,se(t,e));cov_18tmdn9r60().s[2821]++;(cov_18tmdn9r60().b[1090][0]++,n[I]&16)||(cov_18tmdn9r60().b[1090][1]++,n[I]|=64);}function wm(e,t,n){cov_18tmdn9r60().f[969]++;let r=(cov_18tmdn9r60().s[2822]++,n.directiveStart),o=(cov_18tmdn9r60().s[2823]++,n.directiveEnd);cov_18tmdn9r60().s[2824]++;(cov_18tmdn9r60().b[1091][0]++,Le(n))&&(cov_18tmdn9r60().b[1091][1]++,Zg(t,n,e.data[r+n.componentOffset])),(cov_18tmdn9r60().b[1092][0]++,e.firstCreatePass)||(cov_18tmdn9r60().b[1092][1]++,bo(n,t));let i=(cov_18tmdn9r60().s[2825]++,n.initialInputs);cov_18tmdn9r60().s[2826]++;for(let s=(cov_18tmdn9r60().s[2827]++,r);s{cov_18tmdn9r60().f[992]++;cov_18tmdn9r60().s[2970]++;wt(e.lView);},consumerOnSignalRead(){cov_18tmdn9r60().f[993]++;cov_18tmdn9r60().s[2971]++;this.lView[ne]=this;}}));function Fm(e){cov_18tmdn9r60().f[994]++;let t=(cov_18tmdn9r60().s[2972]++,(cov_18tmdn9r60().b[1141][0]++,e[ne])??(cov_18tmdn9r60().b[1141][1]++,Object.create(jm)));cov_18tmdn9r60().s[2973]++;return t.lView=e,t;}var jm=(cov_18tmdn9r60().s[2974]++,$(B({},Ue),{consumerIsAlwaysLive:!0,kind:"template",consumerMarkedDirty:e=>{cov_18tmdn9r60().f[995]++;let t=(cov_18tmdn9r60().s[2975]++,ze(e.lView));cov_18tmdn9r60().s[2976]++;for(;(cov_18tmdn9r60().b[1142][0]++,t)&&(cov_18tmdn9r60().b[1142][1]++,!Td(t[y]));){cov_18tmdn9r60().s[2977]++;t=ze(t);}cov_18tmdn9r60().s[2978]++;(cov_18tmdn9r60().b[1143][0]++,t)&&(cov_18tmdn9r60().b[1143][1]++,cs(t));},consumerOnSignalRead(){cov_18tmdn9r60().f[996]++;cov_18tmdn9r60().s[2979]++;this.lView[ne]=this;}}));function Td(e){cov_18tmdn9r60().f[997]++;cov_18tmdn9r60().s[2980]++;return e.type!==2;}function bd(e){cov_18tmdn9r60().f[998]++;cov_18tmdn9r60().s[2981]++;if(e[Ge]===null){cov_18tmdn9r60().b[1144][0]++;cov_18tmdn9r60().s[2982]++;return;}else{cov_18tmdn9r60().b[1144][1]++;}let t=(cov_18tmdn9r60().s[2983]++,!0);cov_18tmdn9r60().s[2984]++;for(;t;){let n=(cov_18tmdn9r60().s[2985]++,!1);cov_18tmdn9r60().s[2986]++;for(let r of e[Ge]){cov_18tmdn9r60().s[2987]++;(cov_18tmdn9r60().b[1145][0]++,r.dirty)&&(cov_18tmdn9r60().b[1145][1]++,n=!0,(cov_18tmdn9r60().b[1147][0]++,r.zone===null)||(cov_18tmdn9r60().b[1147][1]++,Zone.current===r.zone)?(cov_18tmdn9r60().b[1146][0]++,r.run()):(cov_18tmdn9r60().b[1146][1]++,r.zone.run(()=>{cov_18tmdn9r60().f[999]++;cov_18tmdn9r60().s[2988]++;return r.run();})));}cov_18tmdn9r60().s[2989]++;t=(cov_18tmdn9r60().b[1148][0]++,n)&&(cov_18tmdn9r60().b[1148][1]++,!!(e[I]&8192));}}var Vm=(cov_18tmdn9r60().s[2990]++,100);function _d(e,t=(cov_18tmdn9r60().b[1149][0]++,0)){cov_18tmdn9r60().f[1000]++;let r=(cov_18tmdn9r60().s[2991]++,e[ue].rendererFactory),o=(cov_18tmdn9r60().s[2992]++,!1);cov_18tmdn9r60().s[2993]++;(cov_18tmdn9r60().b[1150][0]++,o)||(cov_18tmdn9r60().b[1150][1]++,r.begin?.());cov_18tmdn9r60().s[2994]++;try{cov_18tmdn9r60().s[2995]++;Hm(e,t);}finally{cov_18tmdn9r60().s[2996]++;(cov_18tmdn9r60().b[1151][0]++,o)||(cov_18tmdn9r60().b[1151][1]++,r.end?.());}}function Hm(e,t){cov_18tmdn9r60().f[1001]++;let n=(cov_18tmdn9r60().s[2997]++,Is());cov_18tmdn9r60().s[2998]++;try{cov_18tmdn9r60().s[2999]++;In(!0),Ks(e,t);let r=(cov_18tmdn9r60().s[3000]++,0);cov_18tmdn9r60().s[3001]++;for(;An(e);){cov_18tmdn9r60().s[3002]++;if(r===Vm){cov_18tmdn9r60().b[1152][0]++;cov_18tmdn9r60().s[3003]++;throw new T(103,!1);}else{cov_18tmdn9r60().b[1152][1]++;}cov_18tmdn9r60().s[3004]++;r++,Ks(e,1);}}finally{cov_18tmdn9r60().s[3005]++;In(n);}}function Bm(e,t,n,r){cov_18tmdn9r60().f[1002]++;cov_18tmdn9r60().s[3006]++;if(Ct(t)){cov_18tmdn9r60().b[1153][0]++;cov_18tmdn9r60().s[3007]++;return;}else{cov_18tmdn9r60().b[1153][1]++;}let o=(cov_18tmdn9r60().s[3008]++,t[I]),i=(cov_18tmdn9r60().s[3009]++,!1),s=(cov_18tmdn9r60().s[3010]++,!1);cov_18tmdn9r60().s[3011]++;so(t);let a=(cov_18tmdn9r60().s[3012]++,!0),c=(cov_18tmdn9r60().s[3013]++,null),l=(cov_18tmdn9r60().s[3014]++,null);cov_18tmdn9r60().s[3015]++;(cov_18tmdn9r60().b[1154][0]++,i)||(cov_18tmdn9r60().b[1154][1]++,Td(e)?(cov_18tmdn9r60().b[1155][0]++,l=km(t),c=We(l)):(cov_18tmdn9r60().b[1155][1]++,Ar()===null?(cov_18tmdn9r60().b[1156][0]++,a=!1,l=Fm(t),c=We(l)):(cov_18tmdn9r60().b[1156][1]++,(cov_18tmdn9r60().b[1157][0]++,t[ne])&&(cov_18tmdn9r60().b[1157][1]++,ut(t[ne]),t[ne]=null))));cov_18tmdn9r60().s[3016]++;try{cov_18tmdn9r60().s[3017]++;as(t),Dl(e.bindingStartIndex),(cov_18tmdn9r60().b[1158][0]++,n!==null)&&(cov_18tmdn9r60().b[1158][1]++,md(e,t,n,2,r));let u=(cov_18tmdn9r60().s[3018]++,(o&3)===3);cov_18tmdn9r60().s[3019]++;if(!i){cov_18tmdn9r60().b[1159][0]++;cov_18tmdn9r60().s[3020]++;if(u){cov_18tmdn9r60().b[1160][0]++;let f=(cov_18tmdn9r60().s[3021]++,e.preOrderCheckHooks);cov_18tmdn9r60().s[3022]++;(cov_18tmdn9r60().b[1161][0]++,f!==null)&&(cov_18tmdn9r60().b[1161][1]++,mo(t,f,null));}else{cov_18tmdn9r60().b[1160][1]++;let f=(cov_18tmdn9r60().s[3023]++,e.preOrderHooks);cov_18tmdn9r60().s[3024]++;(cov_18tmdn9r60().b[1162][0]++,f!==null)&&(cov_18tmdn9r60().b[1162][1]++,yo(t,f,0,null)),As(t,0);}}else{cov_18tmdn9r60().b[1159][1]++;}cov_18tmdn9r60().s[3025]++;if((cov_18tmdn9r60().b[1164][0]++,s)||(cov_18tmdn9r60().b[1164][1]++,$m(t)),bd(t),Md(t,0),(cov_18tmdn9r60().b[1165][0]++,e.contentQueries!==null)&&(cov_18tmdn9r60().b[1165][1]++,Wu(e,t)),!i){cov_18tmdn9r60().b[1163][0]++;cov_18tmdn9r60().s[3026]++;if(u){cov_18tmdn9r60().b[1166][0]++;let f=(cov_18tmdn9r60().s[3027]++,e.contentCheckHooks);cov_18tmdn9r60().s[3028]++;(cov_18tmdn9r60().b[1167][0]++,f!==null)&&(cov_18tmdn9r60().b[1167][1]++,mo(t,f));}else{cov_18tmdn9r60().b[1166][1]++;let f=(cov_18tmdn9r60().s[3029]++,e.contentHooks);cov_18tmdn9r60().s[3030]++;(cov_18tmdn9r60().b[1168][0]++,f!==null)&&(cov_18tmdn9r60().b[1168][1]++,yo(t,f,1)),As(t,1);}}else{cov_18tmdn9r60().b[1163][1]++;}cov_18tmdn9r60().s[3031]++;Wm(e,t);let d=(cov_18tmdn9r60().s[3032]++,e.components);cov_18tmdn9r60().s[3033]++;(cov_18tmdn9r60().b[1169][0]++,d!==null)&&(cov_18tmdn9r60().b[1169][1]++,Sd(t,d,0));let p=(cov_18tmdn9r60().s[3034]++,e.viewQuery);cov_18tmdn9r60().s[3035]++;if((cov_18tmdn9r60().b[1171][0]++,p!==null)&&(cov_18tmdn9r60().b[1171][1]++,Gs(2,p,r)),!i){cov_18tmdn9r60().b[1170][0]++;cov_18tmdn9r60().s[3036]++;if(u){cov_18tmdn9r60().b[1172][0]++;let f=(cov_18tmdn9r60().s[3037]++,e.viewCheckHooks);cov_18tmdn9r60().s[3038]++;(cov_18tmdn9r60().b[1173][0]++,f!==null)&&(cov_18tmdn9r60().b[1173][1]++,mo(t,f));}else{cov_18tmdn9r60().b[1172][1]++;let f=(cov_18tmdn9r60().s[3039]++,e.viewHooks);cov_18tmdn9r60().s[3040]++;(cov_18tmdn9r60().b[1174][0]++,f!==null)&&(cov_18tmdn9r60().b[1174][1]++,yo(t,f,2)),As(t,2);}}else{cov_18tmdn9r60().b[1170][1]++;}cov_18tmdn9r60().s[3041]++;if((cov_18tmdn9r60().b[1176][0]++,e.firstUpdatePass===!0)&&(cov_18tmdn9r60().b[1176][1]++,e.firstUpdatePass=!1),t[Jr]){cov_18tmdn9r60().b[1175][0]++;cov_18tmdn9r60().s[3042]++;for(let f of t[Jr]){cov_18tmdn9r60().s[3043]++;f();}cov_18tmdn9r60().s[3044]++;t[Jr]=null;}else{cov_18tmdn9r60().b[1175][1]++;}cov_18tmdn9r60().s[3045]++;(cov_18tmdn9r60().b[1177][0]++,i)||(cov_18tmdn9r60().b[1177][1]++,Cd(t),t[I]&=-73);}catch(u){cov_18tmdn9r60().s[3046]++;throw(cov_18tmdn9r60().b[1178][0]++,i)||(cov_18tmdn9r60().b[1178][1]++,wt(t)),u;}finally{cov_18tmdn9r60().s[3047]++;(cov_18tmdn9r60().b[1179][0]++,l!==null)&&(cov_18tmdn9r60().b[1179][1]++,lt(l,c),(cov_18tmdn9r60().b[1180][0]++,a)&&(cov_18tmdn9r60().b[1180][1]++,Pm(l))),ao();}}function Md(e,t){cov_18tmdn9r60().f[1003]++;cov_18tmdn9r60().s[3048]++;for(let n=(cov_18tmdn9r60().s[3049]++,Pu(e));n!==null;n=Lu(n)){cov_18tmdn9r60().s[3050]++;for(let r=(cov_18tmdn9r60().s[3051]++,F);r0)&&(cov_18tmdn9r60().b[1204][1]++,e[n-1][oe]=r[oe]);let i=(cov_18tmdn9r60().s[3132]++,_n(e,F+t));cov_18tmdn9r60().s[3133]++;im(r[y],r);let s=(cov_18tmdn9r60().s[3134]++,i[Ce]);cov_18tmdn9r60().s[3135]++;(cov_18tmdn9r60().b[1205][0]++,s!==null)&&(cov_18tmdn9r60().b[1205][1]++,s.detachView(i[y])),r[H]=null,r[oe]=null,r[I]&=-129;}else{cov_18tmdn9r60().b[1202][1]++;}cov_18tmdn9r60().s[3136]++;return r;}function qm(e,t,n,r){cov_18tmdn9r60().f[1016]++;let o=(cov_18tmdn9r60().s[3137]++,F+r),i=(cov_18tmdn9r60().s[3138]++,n.length);cov_18tmdn9r60().s[3139]++;(cov_18tmdn9r60().b[1206][0]++,r>0)&&(cov_18tmdn9r60().b[1206][1]++,n[o-1][oe]=t),r-1)&&(cov_18tmdn9r60().b[1217][1]++,Bn(t,r),_n(n,r));}else{cov_18tmdn9r60().b[1215][1]++;}cov_18tmdn9r60().s[3169]++;this._attachedToViewContainer=!1;}else{cov_18tmdn9r60().b[1214][1]++;}}cov_18tmdn9r60().s[3170]++;zo(this._lView[y],this._lView);}onDestroy(t){cov_18tmdn9r60().f[1024]++;cov_18tmdn9r60().s[3171]++;ls(this._lView,t);}markForCheck(){cov_18tmdn9r60().f[1025]++;cov_18tmdn9r60().s[3172]++;Ra((cov_18tmdn9r60().b[1218][0]++,this._cdRefInjectingView)||(cov_18tmdn9r60().b[1218][1]++,this._lView),4);}detach(){cov_18tmdn9r60().f[1026]++;cov_18tmdn9r60().s[3173]++;this._lView[I]&=-129;}reattach(){cov_18tmdn9r60().f[1027]++;cov_18tmdn9r60().s[3174]++;no(this._lView),this._lView[I]|=128;}detectChanges(){cov_18tmdn9r60().f[1028]++;cov_18tmdn9r60().s[3175]++;this._lView[I]|=1024,_d(this._lView);}checkNoChanges(){cov_18tmdn9r60().f[1029]++;}attachToViewContainerRef(){cov_18tmdn9r60().f[1030]++;cov_18tmdn9r60().s[3176]++;if(this._appRef){cov_18tmdn9r60().b[1219][0]++;cov_18tmdn9r60().s[3177]++;throw new T(902,!1);}else{cov_18tmdn9r60().b[1219][1]++;}cov_18tmdn9r60().s[3178]++;this._attachedToViewContainer=!0;}detachFromAppRef(){cov_18tmdn9r60().f[1031]++;cov_18tmdn9r60().s[3179]++;this._appRef=null;let t=(cov_18tmdn9r60().s[3180]++,zt(this._lView)),n=(cov_18tmdn9r60().s[3181]++,this._lView[Ye]);cov_18tmdn9r60().s[3182]++;(cov_18tmdn9r60().b[1220][0]++,n!==null)&&(cov_18tmdn9r60().b[1220][1]++,!t)&&(cov_18tmdn9r60().b[1220][2]++,_a(n,this._lView)),dd(this._lView[y],this._lView);}attachToAppRef(t){cov_18tmdn9r60().f[1032]++;cov_18tmdn9r60().s[3183]++;if(this._attachedToViewContainer){cov_18tmdn9r60().b[1221][0]++;cov_18tmdn9r60().s[3184]++;throw new T(902,!1);}else{cov_18tmdn9r60().b[1221][1]++;}cov_18tmdn9r60().s[3185]++;this._appRef=t;let n=(cov_18tmdn9r60().s[3186]++,zt(this._lView)),r=(cov_18tmdn9r60().s[3187]++,this._lView[Ye]);cov_18tmdn9r60().s[3188]++;(cov_18tmdn9r60().b[1222][0]++,r!==null)&&(cov_18tmdn9r60().b[1222][1]++,!n)&&(cov_18tmdn9r60().b[1222][2]++,kd(r,this._lView)),no(this._lView);}};var $n=(cov_18tmdn9r60().s[3189]++,(()=>{cov_18tmdn9r60().f[1033]++;class e{_declarationLView;_declarationTContainer;elementRef;static __NG_ELEMENT_ID__=(cov_18tmdn9r60().s[3190]++,Gm);constructor(n,r,o){cov_18tmdn9r60().f[1034]++;cov_18tmdn9r60().s[3191]++;this._declarationLView=n,this._declarationTContainer=r,this.elementRef=o;}get ssrId(){cov_18tmdn9r60().f[1035]++;cov_18tmdn9r60().s[3192]++;return(cov_18tmdn9r60().b[1223][0]++,this._declarationTContainer.tView?.ssrId)||(cov_18tmdn9r60().b[1223][1]++,null);}createEmbeddedView(n,r){cov_18tmdn9r60().f[1036]++;cov_18tmdn9r60().s[3193]++;return this.createEmbeddedViewImpl(n,r);}createEmbeddedViewImpl(n,r,o){cov_18tmdn9r60().f[1037]++;let i=(cov_18tmdn9r60().s[3194]++,Yn(this._declarationLView,this._declarationTContainer,n,{embeddedViewInjector:r,dehydratedView:o}));cov_18tmdn9r60().s[3195]++;return new tt(i);}}cov_18tmdn9r60().s[3196]++;return e;})());function Gm(){cov_18tmdn9r60().f[1038]++;cov_18tmdn9r60().s[3197]++;return Yo(G(),v());}function Yo(e,t){cov_18tmdn9r60().f[1039]++;cov_18tmdn9r60().s[3198]++;return e.type&4?(cov_18tmdn9r60().b[1224][0]++,new $n(t,e,rn(e,t))):(cov_18tmdn9r60().b[1224][1]++,null);}function sn(e,t,n,r,o){cov_18tmdn9r60().f[1040]++;let i=(cov_18tmdn9r60().s[3199]++,e.data[t]);cov_18tmdn9r60().s[3200]++;if(i===null){cov_18tmdn9r60().b[1225][0]++;cov_18tmdn9r60().s[3201]++;i=zm(e,t,n,r,o),(cov_18tmdn9r60().b[1226][0]++,Cl())&&(cov_18tmdn9r60().b[1226][1]++,i.flags|=32);}else{cov_18tmdn9r60().b[1225][1]++;cov_18tmdn9r60().s[3202]++;if(i.type&64){cov_18tmdn9r60().b[1227][0]++;cov_18tmdn9r60().s[3203]++;i.type=n,i.value=r,i.attrs=o;let s=(cov_18tmdn9r60().s[3204]++,vl());cov_18tmdn9r60().s[3205]++;i.injectorIndex=s===null?(cov_18tmdn9r60().b[1228][0]++,-1):(cov_18tmdn9r60().b[1228][1]++,s.injectorIndex);}else{cov_18tmdn9r60().b[1227][1]++;}}cov_18tmdn9r60().s[3206]++;return Qt(i,!0),i;}function zm(e,t,n,r,o){cov_18tmdn9r60().f[1041]++;let i=(cov_18tmdn9r60().s[3207]++,ys()),s=(cov_18tmdn9r60().s[3208]++,vs()),a=(cov_18tmdn9r60().s[3209]++,s?(cov_18tmdn9r60().b[1229][0]++,i):(cov_18tmdn9r60().b[1229][1]++,(cov_18tmdn9r60().b[1230][0]++,i)&&(cov_18tmdn9r60().b[1230][1]++,i.parent))),c=(cov_18tmdn9r60().s[3210]++,e.data[t]=Zm(e,a,n,t,r,o));cov_18tmdn9r60().s[3211]++;return Qm(e,c,i,s),c;}function Qm(e,t,n,r){cov_18tmdn9r60().f[1042]++;cov_18tmdn9r60().s[3212]++;(cov_18tmdn9r60().b[1231][0]++,e.firstChild===null)&&(cov_18tmdn9r60().b[1231][1]++,e.firstChild=t),(cov_18tmdn9r60().b[1232][0]++,n!==null)&&(cov_18tmdn9r60().b[1232][1]++,r?(cov_18tmdn9r60().b[1233][0]++,(cov_18tmdn9r60().b[1234][0]++,n.child==null)&&(cov_18tmdn9r60().b[1234][1]++,t.parent!==null)&&(cov_18tmdn9r60().b[1234][2]++,n.child=t)):(cov_18tmdn9r60().b[1233][1]++,(cov_18tmdn9r60().b[1235][0]++,n.next===null)&&(cov_18tmdn9r60().b[1235][1]++,n.next=t,t.prev=n)));}function Zm(e,t,n,r,o,i){cov_18tmdn9r60().f[1043]++;let s=(cov_18tmdn9r60().s[3213]++,t?(cov_18tmdn9r60().b[1236][0]++,t.injectorIndex):(cov_18tmdn9r60().b[1236][1]++,-1)),a=(cov_18tmdn9r60().s[3214]++,0);cov_18tmdn9r60().s[3215]++;return(cov_18tmdn9r60().b[1237][0]++,hs())&&(cov_18tmdn9r60().b[1237][1]++,a|=128),{type:n,index:r,insertBeforeIndex:null,injectorIndex:s,directiveStart:-1,directiveEnd:-1,directiveStylingLast:-1,componentOffset:-1,controlDirectiveIndex:-1,customControlIndex:-1,propertyBindings:null,flags:a,providerIndexes:0,value:o,attrs:i,mergedAttrs:null,localNames:null,initialInputs:null,inputs:null,hostDirectiveInputs:null,outputs:null,hostDirectiveOutputs:null,directiveToIndex:null,tView:null,next:null,prev:null,projectionNext:null,child:null,parent:t,projection:null,styles:null,stylesWithoutHost:null,residualStyles:void 0,classes:null,classesWithoutHost:null,residualClasses:void 0,classBindings:0,styleBindings:0};}function Ym(e){cov_18tmdn9r60().f[1044]++;let t=(cov_18tmdn9r60().s[3216]++,(cov_18tmdn9r60().b[1238][0]++,e[ns])??(cov_18tmdn9r60().b[1238][1]++,[])),r=(cov_18tmdn9r60().s[3217]++,e[H][O]),o=(cov_18tmdn9r60().s[3218]++,[]);cov_18tmdn9r60().s[3219]++;for(let i of t){cov_18tmdn9r60().s[3220]++;i.data[Hu]!==void 0?(cov_18tmdn9r60().b[1239][0]++,o.push(i)):(cov_18tmdn9r60().b[1239][1]++,Km(i,r));}cov_18tmdn9r60().s[3221]++;e[ns]=o;}function Km(e,t){cov_18tmdn9r60().f[1045]++;let n=(cov_18tmdn9r60().s[3222]++,0),r=(cov_18tmdn9r60().s[3223]++,e.firstChild);cov_18tmdn9r60().s[3224]++;if(r){cov_18tmdn9r60().b[1240][0]++;let o=(cov_18tmdn9r60().s[3225]++,e.data[Vu]);cov_18tmdn9r60().s[3226]++;for(;n{cov_18tmdn9r60().f[1046]++;cov_18tmdn9r60().s[3230]++;return null;},Xm=()=>{cov_18tmdn9r60().f[1047]++;cov_18tmdn9r60().s[3232]++;return null;};function Ao(e,t){cov_18tmdn9r60().f[1048]++;cov_18tmdn9r60().s[3233]++;return Jm(e,t);}function Od(e,t,n){cov_18tmdn9r60().f[1049]++;cov_18tmdn9r60().s[3234]++;return Xm(e,t,n);}cov_18tmdn9r60().s[3235]++;cov_18tmdn9r60().s[3236]++;cov_18tmdn9r60().s[3237]++;cov_18tmdn9r60().s[3239]++;cov_18tmdn9r60().s[3241]++;var Pd=class{},Ko=class{},Js=class{resolveComponentFactory(t){cov_18tmdn9r60().f[1050]++;cov_18tmdn9r60().s[3238]++;throw new T(917,!1);}},Jn=class{static NULL=(cov_18tmdn9r60().s[3240]++,new Js());},Un=class{},ey=(cov_18tmdn9r60().s[3242]++,(()=>{cov_18tmdn9r60().f[1051]++;class e{destroyNode=(cov_18tmdn9r60().s[3243]++,null);static __NG_ELEMENT_ID__=(cov_18tmdn9r60().s[3244]++,()=>{cov_18tmdn9r60().f[1052]++;cov_18tmdn9r60().s[3245]++;return ty();});}cov_18tmdn9r60().s[3246]++;return e;})());function ty(){cov_18tmdn9r60().f[1053]++;let e=(cov_18tmdn9r60().s[3247]++,v()),t=(cov_18tmdn9r60().s[3248]++,G()),n=(cov_18tmdn9r60().s[3249]++,se(t.index,e));cov_18tmdn9r60().s[3250]++;return(Pe(n)?(cov_18tmdn9r60().b[1241][0]++,n):(cov_18tmdn9r60().b[1241][1]++,e))[O];}var Ld=(cov_18tmdn9r60().s[3251]++,(()=>{cov_18tmdn9r60().f[1054]++;class e{static ɵprov=(cov_18tmdn9r60().s[3252]++,V({token:e,providedIn:"root",factory:()=>{cov_18tmdn9r60().f[1055]++;cov_18tmdn9r60().s[3253]++;return null;}}));}cov_18tmdn9r60().s[3254]++;return e;})());cov_18tmdn9r60().s[3256]++;var Eo=(cov_18tmdn9r60().s[3255]++,{}),Xs=class{injector;parentInjector;constructor(t,n){cov_18tmdn9r60().f[1056]++;cov_18tmdn9r60().s[3257]++;this.injector=t,this.parentInjector=n;}get(t,n,r){cov_18tmdn9r60().f[1057]++;let o=(cov_18tmdn9r60().s[3258]++,this.injector.get(t,Eo,r));cov_18tmdn9r60().s[3259]++;return(cov_18tmdn9r60().b[1243][0]++,o!==Eo)||(cov_18tmdn9r60().b[1243][1]++,n===Eo)?(cov_18tmdn9r60().b[1242][0]++,o):(cov_18tmdn9r60().b[1242][1]++,this.parentInjector.get(t,n,r));}};function Ro(e,t,n){cov_18tmdn9r60().f[1058]++;let r=(cov_18tmdn9r60().s[3260]++,n?(cov_18tmdn9r60().b[1244][0]++,e.styles):(cov_18tmdn9r60().b[1244][1]++,null)),o=(cov_18tmdn9r60().s[3261]++,n?(cov_18tmdn9r60().b[1245][0]++,e.classes):(cov_18tmdn9r60().b[1245][1]++,null)),i=(cov_18tmdn9r60().s[3262]++,0);cov_18tmdn9r60().s[3263]++;if(t!==null){cov_18tmdn9r60().b[1246][0]++;cov_18tmdn9r60().s[3264]++;for(let s=(cov_18tmdn9r60().s[3265]++,0);s0)&&(cov_18tmdn9r60().b[1262][1]++,n.directiveToIndex=new Map());cov_18tmdn9r60().s[3318]++;for(let p=(cov_18tmdn9r60().s[3319]++,0);p0;){let n=(cov_18tmdn9r60().s[3389]++,e[--t]);cov_18tmdn9r60().s[3390]++;if((cov_18tmdn9r60().b[1296][0]++,typeof n=="number")&&(cov_18tmdn9r60().b[1296][1]++,n<0)){cov_18tmdn9r60().b[1295][0]++;cov_18tmdn9r60().s[3391]++;return n;}else{cov_18tmdn9r60().b[1295][1]++;}}cov_18tmdn9r60().s[3392]++;return 0;}function uy(e,t,n){cov_18tmdn9r60().f[1073]++;cov_18tmdn9r60().s[3393]++;if(n){cov_18tmdn9r60().b[1297][0]++;cov_18tmdn9r60().s[3394]++;if(t.exportAs){cov_18tmdn9r60().b[1298][0]++;cov_18tmdn9r60().s[3395]++;for(let r=(cov_18tmdn9r60().s[3396]++,0);r{cov_18tmdn9r60().f[1089]++;cov_18tmdn9r60().s[3459]++;return r(ie(D[e.index]));}):(cov_18tmdn9r60().b[1323][1]++,e.index));cov_18tmdn9r60().s[3460]++;qd(h,t,n,i,a,f,!1);}else{cov_18tmdn9r60().b[1322][1]++;}}cov_18tmdn9r60().s[3461]++;return l;}function hy(e){cov_18tmdn9r60().f[1090]++;cov_18tmdn9r60().s[3462]++;return(cov_18tmdn9r60().b[1324][0]++,e.startsWith("animation"))||(cov_18tmdn9r60().b[1324][1]++,e.startsWith("transition"));}function gy(e,t,n,r){cov_18tmdn9r60().f[1091]++;let o=(cov_18tmdn9r60().s[3463]++,e.cleanup);cov_18tmdn9r60().s[3464]++;if(o!=null){cov_18tmdn9r60().b[1325][0]++;cov_18tmdn9r60().s[3465]++;for(let i=(cov_18tmdn9r60().s[3466]++,0);ic)?(cov_18tmdn9r60().b[1328][0]++,a[c]):(cov_18tmdn9r60().b[1328][1]++,null);}else{cov_18tmdn9r60().b[1326][1]++;}cov_18tmdn9r60().s[3472]++;(cov_18tmdn9r60().b[1330][0]++,typeof s=="string")&&(cov_18tmdn9r60().b[1330][1]++,i+=2);}}else{cov_18tmdn9r60().b[1325][1]++;}cov_18tmdn9r60().s[3473]++;return null;}function qd(e,t,n,r,o,i,s){cov_18tmdn9r60().f[1092]++;let a=(cov_18tmdn9r60().s[3474]++,t.firstCreatePass?(cov_18tmdn9r60().b[1331][0]++,ds(t)):(cov_18tmdn9r60().b[1331][1]++,null)),c=(cov_18tmdn9r60().s[3475]++,us(n)),l=(cov_18tmdn9r60().s[3476]++,c.length);cov_18tmdn9r60().s[3477]++;c.push(o,i),(cov_18tmdn9r60().b[1332][0]++,a)&&(cov_18tmdn9r60().b[1332][1]++,a.push(r,e,l,(l+1)*(s?(cov_18tmdn9r60().b[1333][0]++,-1):(cov_18tmdn9r60().b[1333][1]++,1))));}function iu(e,t,n,r,o,i){cov_18tmdn9r60().f[1093]++;let s=(cov_18tmdn9r60().s[3478]++,t[n]),a=(cov_18tmdn9r60().s[3479]++,t[y]),l=(cov_18tmdn9r60().s[3480]++,a.data[n].outputs[r]),d=(cov_18tmdn9r60().s[3481]++,s[l].subscribe(i));cov_18tmdn9r60().s[3482]++;qd(e.index,a,t,o,i,d,!0);}var ea=(cov_18tmdn9r60().s[3483]++,Symbol("BINDING"));function Gd(e){cov_18tmdn9r60().f[1094]++;cov_18tmdn9r60().s[3484]++;return(cov_18tmdn9r60().b[1334][0]++,e.debugInfo?.className)||(cov_18tmdn9r60().b[1334][1]++,e.type.name)||(cov_18tmdn9r60().b[1334][2]++,null);}cov_18tmdn9r60().s[3485]++;var ko=class extends Jn{ngModule;constructor(t){cov_18tmdn9r60().f[1095]++;cov_18tmdn9r60().s[3486]++;super(),this.ngModule=t;}resolveComponentFactory(t){cov_18tmdn9r60().f[1096]++;let n=(cov_18tmdn9r60().s[3487]++,Re(t));cov_18tmdn9r60().s[3488]++;return new St(n,this.ngModule);}};function my(e){cov_18tmdn9r60().f[1097]++;cov_18tmdn9r60().s[3489]++;return Object.keys(e).map(t=>{cov_18tmdn9r60().f[1098]++;let[n,r,o]=(cov_18tmdn9r60().s[3490]++,e[t]),i=(cov_18tmdn9r60().s[3491]++,{propName:n,templateName:t,isSignal:(r&qo.SignalBased)!==0});cov_18tmdn9r60().s[3492]++;return(cov_18tmdn9r60().b[1335][0]++,o)&&(cov_18tmdn9r60().b[1335][1]++,i.transform=o),i;});}function yy(e){cov_18tmdn9r60().f[1099]++;cov_18tmdn9r60().s[3493]++;return Object.keys(e).map(t=>{cov_18tmdn9r60().f[1100]++;cov_18tmdn9r60().s[3494]++;return{propName:e[t],templateName:t};});}function vy(e,t,n){cov_18tmdn9r60().f[1101]++;let r=(cov_18tmdn9r60().s[3495]++,t instanceof re?(cov_18tmdn9r60().b[1336][0]++,t):(cov_18tmdn9r60().b[1336][1]++,t?.injector));cov_18tmdn9r60().s[3496]++;return(cov_18tmdn9r60().b[1337][0]++,r)&&(cov_18tmdn9r60().b[1337][1]++,e.getStandaloneInjector!==null)&&(cov_18tmdn9r60().b[1337][2]++,r=(cov_18tmdn9r60().b[1338][0]++,e.getStandaloneInjector(r))||(cov_18tmdn9r60().b[1338][1]++,r)),r?(cov_18tmdn9r60().b[1339][0]++,new Xs(n,r)):(cov_18tmdn9r60().b[1339][1]++,n);}function Ey(e){cov_18tmdn9r60().f[1102]++;let t=(cov_18tmdn9r60().s[3497]++,e.get(Un,null));cov_18tmdn9r60().s[3498]++;if(t===null){cov_18tmdn9r60().b[1340][0]++;cov_18tmdn9r60().s[3499]++;throw new T(407,!1);}else{cov_18tmdn9r60().b[1340][1]++;}let n=(cov_18tmdn9r60().s[3500]++,e.get(Ld,null)),r=(cov_18tmdn9r60().s[3501]++,e.get(Ae,null)),o=(cov_18tmdn9r60().s[3502]++,e.get(on,null,{optional:!0}));cov_18tmdn9r60().s[3503]++;return{rendererFactory:t,sanitizer:n,changeDetectionScheduler:r,ngReflect:!1,tracingService:o};}function Iy(e,t){cov_18tmdn9r60().f[1103]++;let n=(cov_18tmdn9r60().s[3504]++,zd(e));cov_18tmdn9r60().s[3505]++;return Qu(t,n,n==="svg"?(cov_18tmdn9r60().b[1341][0]++,os):(cov_18tmdn9r60().b[1341][1]++,n==="math"?(cov_18tmdn9r60().b[1342][0]++,cl):(cov_18tmdn9r60().b[1342][1]++,null)));}function zd(e){cov_18tmdn9r60().f[1104]++;cov_18tmdn9r60().s[3506]++;return((cov_18tmdn9r60().b[1343][0]++,e.selectors[0][0])||(cov_18tmdn9r60().b[1343][1]++,"div")).toLowerCase();}cov_18tmdn9r60().s[3507]++;var St=class extends Ko{componentDef;ngModule;selector;componentType;ngContentSelectors;isBoundToModule;cachedInputs=(cov_18tmdn9r60().s[3508]++,null);cachedOutputs=(cov_18tmdn9r60().s[3509]++,null);get inputs(){cov_18tmdn9r60().f[1105]++;cov_18tmdn9r60().s[3510]++;return this.cachedInputs??=my(this.componentDef.inputs),this.cachedInputs;}get outputs(){cov_18tmdn9r60().f[1106]++;cov_18tmdn9r60().s[3511]++;return this.cachedOutputs??=yy(this.componentDef.outputs),this.cachedOutputs;}constructor(t,n){cov_18tmdn9r60().f[1107]++;cov_18tmdn9r60().s[3512]++;super(),this.componentDef=t,this.ngModule=n,this.componentType=t.type,this.selector=qg(t.selectors),this.ngContentSelectors=(cov_18tmdn9r60().b[1344][0]++,t.ngContentSelectors)??(cov_18tmdn9r60().b[1344][1]++,[]),this.isBoundToModule=!!n;}create(t,n,r,o,i,s){cov_18tmdn9r60().f[1108]++;cov_18tmdn9r60().s[3513]++;x(M.DynamicComponentStart);let a=(cov_18tmdn9r60().s[3514]++,g(null));cov_18tmdn9r60().s[3515]++;try{let c=(cov_18tmdn9r60().s[3516]++,this.componentDef),l=(cov_18tmdn9r60().s[3517]++,vy(c,(cov_18tmdn9r60().b[1345][0]++,o)||(cov_18tmdn9r60().b[1345][1]++,this.ngModule),t)),u=(cov_18tmdn9r60().s[3518]++,Ey(l)),d=(cov_18tmdn9r60().s[3519]++,u.tracingService);cov_18tmdn9r60().s[3520]++;return(cov_18tmdn9r60().b[1347][0]++,d)&&(cov_18tmdn9r60().b[1347][1]++,d.componentCreate)?(cov_18tmdn9r60().b[1346][0]++,d.componentCreate(Gd(c),()=>{cov_18tmdn9r60().f[1109]++;cov_18tmdn9r60().s[3521]++;return this.createComponentRef(u,l,n,r,i,s);})):(cov_18tmdn9r60().b[1346][1]++,this.createComponentRef(u,l,n,r,i,s));}finally{cov_18tmdn9r60().s[3522]++;g(a);}}createComponentRef(t,n,r,o,i,s){cov_18tmdn9r60().f[1110]++;let a=(cov_18tmdn9r60().s[3523]++,this.componentDef),c=(cov_18tmdn9r60().s[3524]++,Dy(o,a,s,i)),l=(cov_18tmdn9r60().s[3525]++,t.rendererFactory.createRenderer(null,a)),u=(cov_18tmdn9r60().s[3526]++,o?(cov_18tmdn9r60().b[1348][0]++,ym(l,o,a.encapsulation,n)):(cov_18tmdn9r60().b[1348][1]++,Iy(a,l))),d=(cov_18tmdn9r60().s[3527]++,(cov_18tmdn9r60().b[1349][0]++,s?.some(su))||(cov_18tmdn9r60().b[1349][1]++,i?.some(h=>{cov_18tmdn9r60().f[1111]++;cov_18tmdn9r60().s[3528]++;return(cov_18tmdn9r60().b[1350][0]++,typeof h!="function")&&(cov_18tmdn9r60().b[1350][1]++,h.bindings.some(su));}))),p=(cov_18tmdn9r60().s[3529]++,Ca(null,c,null,512|od(a),null,null,t,l,n,null,Uu(u,n,!0)));cov_18tmdn9r60().s[3530]++;p[P]=u,so(p);let f=(cov_18tmdn9r60().s[3531]++,null);cov_18tmdn9r60().s[3532]++;try{let h=(cov_18tmdn9r60().s[3533]++,Vd(P,p,2,"#host",()=>{cov_18tmdn9r60().f[1112]++;cov_18tmdn9r60().s[3534]++;return c.directiveRegistry;},!0,0));cov_18tmdn9r60().s[3535]++;Ku(l,u,h),Xt(u,p),Sa(c,p,h),qu(c,h,p),Hd(c,h),(cov_18tmdn9r60().b[1351][0]++,r!==void 0)&&(cov_18tmdn9r60().b[1351][1]++,wy(h,this.ngContentSelectors,r)),f=se(h.index,p),p[L]=f[L],Aa(c,p,null);}catch(h){cov_18tmdn9r60().s[3536]++;throw(cov_18tmdn9r60().b[1352][0]++,f!==null)&&(cov_18tmdn9r60().b[1352][1]++,qs(f)),qs(p),h;}finally{cov_18tmdn9r60().s[3537]++;x(M.DynamicComponentEnd),ao();}cov_18tmdn9r60().s[3538]++;return new Oo(this.componentType,p,!!d);}};function Dy(e,t,n,r){cov_18tmdn9r60().f[1113]++;let o=(cov_18tmdn9r60().s[3539]++,e?(cov_18tmdn9r60().b[1353][0]++,["ng-version","21.2.4"]):(cov_18tmdn9r60().b[1353][1]++,Gg(t.selectors[0]))),i=(cov_18tmdn9r60().s[3540]++,null),s=(cov_18tmdn9r60().s[3541]++,null),a=(cov_18tmdn9r60().s[3542]++,0);cov_18tmdn9r60().s[3543]++;if(n){cov_18tmdn9r60().b[1354][0]++;cov_18tmdn9r60().s[3544]++;for(let u of n){cov_18tmdn9r60().s[3545]++;a+=u[ea].requiredVars,(cov_18tmdn9r60().b[1355][0]++,u.create)&&(cov_18tmdn9r60().b[1355][1]++,u.targetIdx=0,(i??=[]).push(u)),(cov_18tmdn9r60().b[1356][0]++,u.update)&&(cov_18tmdn9r60().b[1356][1]++,u.targetIdx=0,(s??=[]).push(u));}}else{cov_18tmdn9r60().b[1354][1]++;}cov_18tmdn9r60().s[3546]++;if(r){cov_18tmdn9r60().b[1357][0]++;cov_18tmdn9r60().s[3547]++;for(let u=(cov_18tmdn9r60().s[3548]++,0);u{cov_18tmdn9r60().f[1115]++;cov_18tmdn9r60().s[3563]++;if((cov_18tmdn9r60().b[1366][0]++,n&1)&&(cov_18tmdn9r60().b[1366][1]++,e)){cov_18tmdn9r60().b[1365][0]++;cov_18tmdn9r60().s[3564]++;for(let r of e){cov_18tmdn9r60().s[3565]++;r.create();}}else{cov_18tmdn9r60().b[1365][1]++;}cov_18tmdn9r60().s[3566]++;if((cov_18tmdn9r60().b[1368][0]++,n&2)&&(cov_18tmdn9r60().b[1368][1]++,t)){cov_18tmdn9r60().b[1367][0]++;cov_18tmdn9r60().s[3567]++;for(let r of t){cov_18tmdn9r60().s[3568]++;r.update();}}else{cov_18tmdn9r60().b[1367][1]++;}});}function su(e){cov_18tmdn9r60().f[1116]++;let t=(cov_18tmdn9r60().s[3569]++,e[ea].kind);cov_18tmdn9r60().s[3570]++;return(cov_18tmdn9r60().b[1369][0]++,t==="input")||(cov_18tmdn9r60().b[1369][1]++,t==="twoWay");}cov_18tmdn9r60().s[3571]++;var Oo=class extends Pd{_rootLView;_hasInputBindings;instance;hostView;changeDetectorRef;componentType;location;previousInputValues=(cov_18tmdn9r60().s[3572]++,null);_tNode;constructor(t,n,r){cov_18tmdn9r60().f[1117]++;cov_18tmdn9r60().s[3573]++;super(),this._rootLView=n,this._hasInputBindings=r,this._tNode=Xr(n[y],P),this.location=rn(this._tNode,n),this.instance=se(this._tNode.index,n)[L],this.hostView=this.changeDetectorRef=new tt(n,void 0),this.componentType=t;}setInput(t,n){cov_18tmdn9r60().f[1118]++;cov_18tmdn9r60().s[3574]++;this._hasInputBindings;let r=(cov_18tmdn9r60().s[3575]++,this._tNode);cov_18tmdn9r60().s[3576]++;if(this.previousInputValues??=new Map(),(cov_18tmdn9r60().b[1371][0]++,this.previousInputValues.has(t))&&(cov_18tmdn9r60().b[1371][1]++,Object.is(this.previousInputValues.get(t),n))){cov_18tmdn9r60().b[1370][0]++;cov_18tmdn9r60().s[3577]++;return;}else{cov_18tmdn9r60().b[1370][1]++;}let o=(cov_18tmdn9r60().s[3578]++,this._rootLView),i=(cov_18tmdn9r60().s[3579]++,xa(r,o[y],o,t,n));cov_18tmdn9r60().s[3580]++;this.previousInputValues.set(t,n);let s=(cov_18tmdn9r60().s[3581]++,se(r.index,o));cov_18tmdn9r60().s[3582]++;Ra(s,1);}get injector(){cov_18tmdn9r60().f[1119]++;cov_18tmdn9r60().s[3583]++;return new _t(this._tNode,this._rootLView);}destroy(){cov_18tmdn9r60().f[1120]++;cov_18tmdn9r60().s[3584]++;this.hostView.destroy();}onDestroy(t){cov_18tmdn9r60().f[1121]++;cov_18tmdn9r60().s[3585]++;this.hostView.onDestroy(t);}};function wy(e,t,n){cov_18tmdn9r60().f[1122]++;let r=(cov_18tmdn9r60().s[3586]++,e.projection=[]);cov_18tmdn9r60().s[3587]++;for(let o=(cov_18tmdn9r60().s[3588]++,0);o{cov_18tmdn9r60().f[1123]++;class e{static __NG_ELEMENT_ID__=(cov_18tmdn9r60().s[3592]++,Ty);}cov_18tmdn9r60().s[3593]++;return e;})());function Ty(){cov_18tmdn9r60().f[1124]++;let e=(cov_18tmdn9r60().s[3594]++,G());cov_18tmdn9r60().s[3595]++;return Qd(e,v());}cov_18tmdn9r60().s[3596]++;var ta=class e extends Jo{_lContainer;_hostTNode;_hostLView;constructor(t,n,r){cov_18tmdn9r60().f[1125]++;cov_18tmdn9r60().s[3597]++;super(),this._lContainer=t,this._hostTNode=n,this._hostLView=r;}get element(){cov_18tmdn9r60().f[1126]++;cov_18tmdn9r60().s[3598]++;return rn(this._hostTNode,this._hostLView);}get injector(){cov_18tmdn9r60().f[1127]++;cov_18tmdn9r60().s[3599]++;return new _t(this._hostTNode,this._hostLView);}get parentInjector(){cov_18tmdn9r60().f[1128]++;let t=(cov_18tmdn9r60().s[3600]++,ya(this._hostTNode,this._hostLView));cov_18tmdn9r60().s[3601]++;if(wu(t)){cov_18tmdn9r60().b[1374][0]++;let n=(cov_18tmdn9r60().s[3602]++,wo(t,this._hostLView)),r=(cov_18tmdn9r60().s[3603]++,Co(t)),o=(cov_18tmdn9r60().s[3604]++,n[y].data[r+8]);cov_18tmdn9r60().s[3605]++;return new _t(o,n);}else{cov_18tmdn9r60().b[1374][1]++;cov_18tmdn9r60().s[3606]++;return new _t(null,this._hostLView);}}clear(){cov_18tmdn9r60().f[1129]++;cov_18tmdn9r60().s[3607]++;for(;this.length>0;){cov_18tmdn9r60().s[3608]++;this.remove(this.length-1);}}get(t){cov_18tmdn9r60().f[1130]++;let n=(cov_18tmdn9r60().s[3609]++,au(this._lContainer));cov_18tmdn9r60().s[3610]++;return(cov_18tmdn9r60().b[1375][0]++,n!==null)&&(cov_18tmdn9r60().b[1375][1]++,n[t])||(cov_18tmdn9r60().b[1375][2]++,null);}get length(){cov_18tmdn9r60().f[1131]++;cov_18tmdn9r60().s[3611]++;return this._lContainer.length-F;}createEmbeddedView(t,n,r){cov_18tmdn9r60().f[1132]++;let o,i;cov_18tmdn9r60().s[3612]++;typeof r=="number"?(cov_18tmdn9r60().b[1376][0]++,o=r):(cov_18tmdn9r60().b[1376][1]++,(cov_18tmdn9r60().b[1377][0]++,r!=null)&&(cov_18tmdn9r60().b[1377][1]++,o=r.index,i=r.injector));let s=(cov_18tmdn9r60().s[3613]++,Ao(this._lContainer,t.ssrId)),a=(cov_18tmdn9r60().s[3614]++,t.createEmbeddedViewImpl((cov_18tmdn9r60().b[1378][0]++,n)||(cov_18tmdn9r60().b[1378][1]++,{}),i,s));cov_18tmdn9r60().s[3615]++;return this.insertImpl(a,o,en(this._hostTNode,s)),a;}createComponent(t,n,r,o,i,s,a){cov_18tmdn9r60().f[1133]++;let c=(cov_18tmdn9r60().s[3616]++,(cov_18tmdn9r60().b[1379][0]++,t)&&(cov_18tmdn9r60().b[1379][1]++,!$h(t))),l;cov_18tmdn9r60().s[3617]++;if(c){cov_18tmdn9r60().b[1380][0]++;cov_18tmdn9r60().s[3618]++;l=n;}else{cov_18tmdn9r60().b[1380][1]++;let A=(cov_18tmdn9r60().s[3619]++,(cov_18tmdn9r60().b[1381][0]++,n)||(cov_18tmdn9r60().b[1381][1]++,{}));cov_18tmdn9r60().s[3620]++;l=A.index,r=A.injector,o=A.projectableNodes,i=(cov_18tmdn9r60().b[1382][0]++,A.environmentInjector)||(cov_18tmdn9r60().b[1382][1]++,A.ngModuleRef),s=A.directives,a=A.bindings;}let u=(cov_18tmdn9r60().s[3621]++,c?(cov_18tmdn9r60().b[1383][0]++,t):(cov_18tmdn9r60().b[1383][1]++,new St(Re(t)))),d=(cov_18tmdn9r60().s[3622]++,(cov_18tmdn9r60().b[1384][0]++,r)||(cov_18tmdn9r60().b[1384][1]++,this.parentInjector));cov_18tmdn9r60().s[3623]++;if((cov_18tmdn9r60().b[1386][0]++,!i)&&(cov_18tmdn9r60().b[1386][1]++,u.ngModule==null)){cov_18tmdn9r60().b[1385][0]++;let R=(cov_18tmdn9r60().s[3624]++,(c?(cov_18tmdn9r60().b[1387][0]++,d):(cov_18tmdn9r60().b[1387][1]++,this.parentInjector)).get(re,null));cov_18tmdn9r60().s[3625]++;(cov_18tmdn9r60().b[1388][0]++,R)&&(cov_18tmdn9r60().b[1388][1]++,i=R);}else{cov_18tmdn9r60().b[1385][1]++;}let p=(cov_18tmdn9r60().s[3626]++,Re((cov_18tmdn9r60().b[1389][0]++,u.componentType)??(cov_18tmdn9r60().b[1389][1]++,{}))),f=(cov_18tmdn9r60().s[3627]++,Ao(this._lContainer,(cov_18tmdn9r60().b[1390][0]++,p?.id)??(cov_18tmdn9r60().b[1390][1]++,null))),h=(cov_18tmdn9r60().s[3628]++,(cov_18tmdn9r60().b[1391][0]++,f?.firstChild)??(cov_18tmdn9r60().b[1391][1]++,null)),D=(cov_18tmdn9r60().s[3629]++,u.create(d,o,h,i,s,a));cov_18tmdn9r60().s[3630]++;return this.insertImpl(D.hostView,l,en(this._hostTNode,f)),D;}insert(t,n){cov_18tmdn9r60().f[1134]++;cov_18tmdn9r60().s[3631]++;return this.insertImpl(t,n,!0);}insertImpl(t,n,r){cov_18tmdn9r60().f[1135]++;let o=(cov_18tmdn9r60().s[3632]++,t._lView);cov_18tmdn9r60().s[3633]++;if(ul(o)){cov_18tmdn9r60().b[1392][0]++;let a=(cov_18tmdn9r60().s[3634]++,this.indexOf(t));cov_18tmdn9r60().s[3635]++;if(a!==-1){cov_18tmdn9r60().b[1393][0]++;cov_18tmdn9r60().s[3636]++;this.detach(a);}else{cov_18tmdn9r60().b[1393][1]++;let c=(cov_18tmdn9r60().s[3637]++,o[H]),l=(cov_18tmdn9r60().s[3638]++,new e(c,c[J],c[H]));cov_18tmdn9r60().s[3639]++;l.detach(l.indexOf(t));}}else{cov_18tmdn9r60().b[1392][1]++;}let i=(cov_18tmdn9r60().s[3640]++,this._adjustIndex(n)),s=(cov_18tmdn9r60().s[3641]++,this._lContainer);cov_18tmdn9r60().s[3642]++;return Kn(s,o,i,r),t.attachToViewContainerRef(),zi(Os(s),i,t),t;}move(t,n){cov_18tmdn9r60().f[1136]++;cov_18tmdn9r60().s[3643]++;return this.insert(t,n);}indexOf(t){cov_18tmdn9r60().f[1137]++;let n=(cov_18tmdn9r60().s[3644]++,au(this._lContainer));cov_18tmdn9r60().s[3645]++;return n!==null?(cov_18tmdn9r60().b[1394][0]++,n.indexOf(t)):(cov_18tmdn9r60().b[1394][1]++,-1);}remove(t){cov_18tmdn9r60().f[1138]++;let n=(cov_18tmdn9r60().s[3646]++,this._adjustIndex(t,-1)),r=(cov_18tmdn9r60().s[3647]++,Bn(this._lContainer,n));cov_18tmdn9r60().s[3648]++;(cov_18tmdn9r60().b[1395][0]++,r)&&(cov_18tmdn9r60().b[1395][1]++,_n(Os(this._lContainer),n),zo(r[y],r));}detach(t){cov_18tmdn9r60().f[1139]++;let n=(cov_18tmdn9r60().s[3649]++,this._adjustIndex(t,-1)),r=(cov_18tmdn9r60().s[3650]++,Bn(this._lContainer,n));cov_18tmdn9r60().s[3651]++;return(cov_18tmdn9r60().b[1397][0]++,r)&&(cov_18tmdn9r60().b[1397][1]++,_n(Os(this._lContainer),n)!=null)?(cov_18tmdn9r60().b[1396][0]++,new tt(r)):(cov_18tmdn9r60().b[1396][1]++,null);}_adjustIndex(t,n=(cov_18tmdn9r60().b[1398][0]++,0)){cov_18tmdn9r60().f[1140]++;cov_18tmdn9r60().s[3652]++;return(cov_18tmdn9r60().b[1399][0]++,t)??(cov_18tmdn9r60().b[1399][1]++,this.length+n);}};function au(e){cov_18tmdn9r60().f[1141]++;cov_18tmdn9r60().s[3653]++;return e[Sn];}function Os(e){cov_18tmdn9r60().f[1142]++;cov_18tmdn9r60().s[3654]++;return(cov_18tmdn9r60().b[1400][0]++,e[Sn])||(cov_18tmdn9r60().b[1400][1]++,e[Sn]=[]);}function Qd(e,t){cov_18tmdn9r60().f[1143]++;let n,r=(cov_18tmdn9r60().s[3655]++,t[e.index]);cov_18tmdn9r60().s[3656]++;return de(r)?(cov_18tmdn9r60().b[1401][0]++,n=r):(cov_18tmdn9r60().b[1401][1]++,n=xd(r,t,null,e),t[e.index]=n,wa(t,n)),_y(n,t,e,r),new ta(n,e,t);}function by(e,t){cov_18tmdn9r60().f[1144]++;let n=(cov_18tmdn9r60().s[3657]++,e[O]),r=(cov_18tmdn9r60().s[3658]++,n.createComment("")),o=(cov_18tmdn9r60().s[3659]++,fe(t,e)),i=(cov_18tmdn9r60().s[3660]++,n.parentNode(o));cov_18tmdn9r60().s[3661]++;return No(n,i,r,n.nextSibling(o),!1),r;}cov_18tmdn9r60().s[3663]++;var _y=(cov_18tmdn9r60().s[3662]++,Sy),My=()=>{cov_18tmdn9r60().f[1145]++;cov_18tmdn9r60().s[3664]++;return!1;};function Ny(e,t,n){cov_18tmdn9r60().f[1146]++;cov_18tmdn9r60().s[3665]++;return My(e,t,n);}function Sy(e,t,n,r){cov_18tmdn9r60().f[1147]++;cov_18tmdn9r60().s[3666]++;if(e[Je]){cov_18tmdn9r60().b[1402][0]++;cov_18tmdn9r60().s[3667]++;return;}else{cov_18tmdn9r60().b[1402][1]++;}let o;cov_18tmdn9r60().s[3668]++;n.type&8?(cov_18tmdn9r60().b[1403][0]++,o=ie(r)):(cov_18tmdn9r60().b[1403][1]++,o=by(t,n)),e[Je]=o;}cov_18tmdn9r60().s[3669]++;cov_18tmdn9r60().s[3674]++;cov_18tmdn9r60().s[3693]++;cov_18tmdn9r60().s[3695]++;cov_18tmdn9r60().s[3716]++;var na=class e{queryList;matches=(cov_18tmdn9r60().s[3670]++,null);constructor(t){cov_18tmdn9r60().f[1148]++;cov_18tmdn9r60().s[3671]++;this.queryList=t;}clone(){cov_18tmdn9r60().f[1149]++;cov_18tmdn9r60().s[3672]++;return new e(this.queryList);}setDirty(){cov_18tmdn9r60().f[1150]++;cov_18tmdn9r60().s[3673]++;this.queryList.setDirty();}},ra=class e{queries;constructor(t=(cov_18tmdn9r60().b[1404][0]++,[])){cov_18tmdn9r60().f[1151]++;cov_18tmdn9r60().s[3675]++;this.queries=t;}createEmbeddedView(t){cov_18tmdn9r60().f[1152]++;let n=(cov_18tmdn9r60().s[3676]++,t.queries);cov_18tmdn9r60().s[3677]++;if(n!==null){cov_18tmdn9r60().b[1405][0]++;let r=(cov_18tmdn9r60().s[3678]++,t.contentQueries!==null?(cov_18tmdn9r60().b[1406][0]++,t.contentQueries[0]):(cov_18tmdn9r60().b[1406][1]++,n.length)),o=(cov_18tmdn9r60().s[3679]++,[]);cov_18tmdn9r60().s[3680]++;for(let i=(cov_18tmdn9r60().s[3681]++,0);i0){cov_18tmdn9r60().b[1445][0]++;cov_18tmdn9r60().s[3786]++;r.push(s[a/2]);}else{cov_18tmdn9r60().b[1445][1]++;let l=(cov_18tmdn9r60().s[3787]++,i[a+1]),u=(cov_18tmdn9r60().s[3788]++,t[-c]);cov_18tmdn9r60().s[3789]++;for(let d=(cov_18tmdn9r60().s[3790]++,F);d{cov_18tmdn9r60().f[1186]++;cov_18tmdn9r60().s[3811]++;return t.trim();});}function Kd(e,t,n){cov_18tmdn9r60().f[1187]++;cov_18tmdn9r60().s[3812]++;(cov_18tmdn9r60().b[1452][0]++,e.queries===null)&&(cov_18tmdn9r60().b[1452][1]++,e.queries=new oa()),e.queries.track(new ia(t,n));}function jy(e,t){cov_18tmdn9r60().f[1188]++;let n=(cov_18tmdn9r60().s[3813]++,(cov_18tmdn9r60().b[1453][0]++,e.contentQueries)||(cov_18tmdn9r60().b[1453][1]++,e.contentQueries=[])),r=(cov_18tmdn9r60().s[3814]++,n.length?(cov_18tmdn9r60().b[1454][0]++,n[n.length-1]):(cov_18tmdn9r60().b[1454][1]++,-1));cov_18tmdn9r60().s[3815]++;(cov_18tmdn9r60().b[1455][0]++,t!==r)&&(cov_18tmdn9r60().b[1455][1]++,n.push(e.queries.length-1,t));}function Pa(e,t){cov_18tmdn9r60().f[1189]++;cov_18tmdn9r60().s[3816]++;return e.queries.getByIndex(t);}function Vy(e,t){cov_18tmdn9r60().f[1190]++;let n=(cov_18tmdn9r60().s[3817]++,e[y]),r=(cov_18tmdn9r60().s[3818]++,Pa(n,t));cov_18tmdn9r60().s[3819]++;return r.crossesNgTemplate?(cov_18tmdn9r60().b[1456][0]++,sa(n,e,t,[])):(cov_18tmdn9r60().b[1456][1]++,Zd(n,e,r,t));}cov_18tmdn9r60().s[3820]++;cov_18tmdn9r60().s[3821]++;var tn=class{},Jd=class{};cov_18tmdn9r60().s[3822]++;cov_18tmdn9r60().s[3835]++;var Lo=class extends tn{ngModuleType;_parent;_bootstrapComponents=(cov_18tmdn9r60().s[3823]++,[]);_r3Injector;instance;destroyCbs=(cov_18tmdn9r60().s[3824]++,[]);componentFactoryResolver=(cov_18tmdn9r60().s[3825]++,new ko(this));constructor(t,n,r,o=(cov_18tmdn9r60().b[1457][0]++,!0)){cov_18tmdn9r60().f[1191]++;cov_18tmdn9r60().s[3826]++;super(),this.ngModuleType=t,this._parent=n;let i=(cov_18tmdn9r60().s[3827]++,Ui(t));cov_18tmdn9r60().s[3828]++;this._bootstrapComponents=td(i.bootstrap),this._r3Injector=Ts(t,n,[{provide:tn,useValue:this},{provide:Jn,useValue:this.componentFactoryResolver},...r],Tn(t),new Set(["environment"])),(cov_18tmdn9r60().b[1458][0]++,o)&&(cov_18tmdn9r60().b[1458][1]++,this.resolveInjectorInitializers());}resolveInjectorInitializers(){cov_18tmdn9r60().f[1192]++;cov_18tmdn9r60().s[3829]++;this._r3Injector.resolveInjectorInitializers(),this.instance=this._r3Injector.get(this.ngModuleType);}get injector(){cov_18tmdn9r60().f[1193]++;cov_18tmdn9r60().s[3830]++;return this._r3Injector;}destroy(){cov_18tmdn9r60().f[1194]++;let t=(cov_18tmdn9r60().s[3831]++,this._r3Injector);cov_18tmdn9r60().s[3832]++;(cov_18tmdn9r60().b[1459][0]++,!t.destroyed)&&(cov_18tmdn9r60().b[1459][1]++,t.destroy()),this.destroyCbs.forEach(n=>{cov_18tmdn9r60().f[1195]++;cov_18tmdn9r60().s[3833]++;return n();}),this.destroyCbs=null;}onDestroy(t){cov_18tmdn9r60().f[1196]++;cov_18tmdn9r60().s[3834]++;this.destroyCbs.push(t);}},Fo=class extends Jd{moduleType;constructor(t){cov_18tmdn9r60().f[1197]++;cov_18tmdn9r60().s[3836]++;super(),this.moduleType=t;}create(t){cov_18tmdn9r60().f[1198]++;cov_18tmdn9r60().s[3837]++;return new Lo(this.moduleType,t,[]);}};cov_18tmdn9r60().s[3838]++;var Wn=class extends tn{injector;componentFactoryResolver=(cov_18tmdn9r60().s[3839]++,new ko(this));instance=(cov_18tmdn9r60().s[3840]++,null);constructor(t){cov_18tmdn9r60().f[1199]++;cov_18tmdn9r60().s[3841]++;super();let n=(cov_18tmdn9r60().s[3842]++,new gt([...t.providers,{provide:tn,useValue:this},{provide:Jn,useValue:this.componentFactoryResolver}],(cov_18tmdn9r60().b[1460][0]++,t.parent)||(cov_18tmdn9r60().b[1460][1]++,Nn()),t.debugName,new Set(["environment"])));cov_18tmdn9r60().s[3843]++;this.injector=n,(cov_18tmdn9r60().b[1461][0]++,t.runEnvironmentInitializers)&&(cov_18tmdn9r60().b[1461][1]++,n.resolveInjectorInitializers());}destroy(){cov_18tmdn9r60().f[1200]++;cov_18tmdn9r60().s[3844]++;this.injector.destroy();}onDestroy(t){cov_18tmdn9r60().f[1201]++;cov_18tmdn9r60().s[3845]++;this.injector.onDestroy(t);}};function Xd(e,t,n=(cov_18tmdn9r60().b[1462][0]++,null)){cov_18tmdn9r60().f[1202]++;cov_18tmdn9r60().s[3846]++;return new Wn({providers:e,parent:t,debugName:n,runEnvironmentInitializers:!0}).injector;}var Hy=(cov_18tmdn9r60().s[3847]++,(()=>{cov_18tmdn9r60().f[1203]++;class e{_injector;cachedInjectors=(cov_18tmdn9r60().s[3848]++,new Map());constructor(n){cov_18tmdn9r60().f[1204]++;cov_18tmdn9r60().s[3849]++;this._injector=n;}getOrCreateStandaloneInjector(n){cov_18tmdn9r60().f[1205]++;cov_18tmdn9r60().s[3850]++;if(!n.standalone){cov_18tmdn9r60().b[1463][0]++;cov_18tmdn9r60().s[3851]++;return null;}else{cov_18tmdn9r60().b[1463][1]++;}cov_18tmdn9r60().s[3852]++;if(!this.cachedInjectors.has(n)){cov_18tmdn9r60().b[1464][0]++;let r=(cov_18tmdn9r60().s[3853]++,Yi(!1,n.type)),o=(cov_18tmdn9r60().s[3854]++,r.length>0?(cov_18tmdn9r60().b[1465][0]++,Xd([r],this._injector,"")):(cov_18tmdn9r60().b[1465][1]++,null));cov_18tmdn9r60().s[3855]++;this.cachedInjectors.set(n,o);}else{cov_18tmdn9r60().b[1464][1]++;}cov_18tmdn9r60().s[3856]++;return this.cachedInjectors.get(n);}ngOnDestroy(){cov_18tmdn9r60().f[1206]++;cov_18tmdn9r60().s[3857]++;try{cov_18tmdn9r60().s[3858]++;for(let n of this.cachedInjectors.values()){cov_18tmdn9r60().s[3859]++;(cov_18tmdn9r60().b[1466][0]++,n!==null)&&(cov_18tmdn9r60().b[1466][1]++,n.destroy());}}finally{cov_18tmdn9r60().s[3860]++;this.cachedInjectors.clear();}}static ɵprov=(cov_18tmdn9r60().s[3861]++,V({token:e,providedIn:"environment",factory:()=>{cov_18tmdn9r60().f[1207]++;cov_18tmdn9r60().s[3862]++;return new e(Ee(re));}}));}cov_18tmdn9r60().s[3863]++;return e;})());function By(e){cov_18tmdn9r60().f[1208]++;cov_18tmdn9r60().s[3864]++;return zn(()=>{cov_18tmdn9r60().f[1209]++;let t=(cov_18tmdn9r60().s[3865]++,ef(e)),n=(cov_18tmdn9r60().s[3866]++,$(B({},t),{decls:e.decls,vars:e.vars,template:e.template,consts:(cov_18tmdn9r60().b[1467][0]++,e.consts)||(cov_18tmdn9r60().b[1467][1]++,null),ngContentSelectors:e.ngContentSelectors,onPush:e.changeDetection===va.OnPush,directiveDefs:null,pipeDefs:null,dependencies:(cov_18tmdn9r60().b[1468][0]++,t.standalone)&&(cov_18tmdn9r60().b[1468][1]++,e.dependencies)||(cov_18tmdn9r60().b[1468][2]++,null),getStandaloneInjector:t.standalone?(cov_18tmdn9r60().b[1469][0]++,o=>{cov_18tmdn9r60().f[1210]++;cov_18tmdn9r60().s[3867]++;return o.get(Hy).getOrCreateStandaloneInjector(n);}):(cov_18tmdn9r60().b[1469][1]++,null),getExternalStyles:null,signals:(cov_18tmdn9r60().b[1470][0]++,e.signals)??(cov_18tmdn9r60().b[1470][1]++,!1),data:(cov_18tmdn9r60().b[1471][0]++,e.data)||(cov_18tmdn9r60().b[1471][1]++,{}),encapsulation:(cov_18tmdn9r60().b[1472][0]++,e.encapsulation)||(cov_18tmdn9r60().b[1472][1]++,Nt.Emulated),styles:(cov_18tmdn9r60().b[1473][0]++,e.styles)||(cov_18tmdn9r60().b[1473][1]++,K),_:null,schemas:(cov_18tmdn9r60().b[1474][0]++,e.schemas)||(cov_18tmdn9r60().b[1474][1]++,null),tView:null,id:""}));cov_18tmdn9r60().s[3868]++;(cov_18tmdn9r60().b[1475][0]++,t.standalone)&&(cov_18tmdn9r60().b[1475][1]++,At("NgStandalone")),tf(n);let r=(cov_18tmdn9r60().s[3869]++,e.dependencies);cov_18tmdn9r60().s[3870]++;return n.directiveDefs=cu(r,$y),n.pipeDefs=cu(r,zc),n.id=Qy(n),n;});}function $y(e){cov_18tmdn9r60().f[1211]++;cov_18tmdn9r60().s[3871]++;return(cov_18tmdn9r60().b[1476][0]++,Re(e))||(cov_18tmdn9r60().b[1476][1]++,Wi(e));}function Uy(e){cov_18tmdn9r60().f[1212]++;cov_18tmdn9r60().s[3872]++;return zn(()=>{cov_18tmdn9r60().f[1213]++;cov_18tmdn9r60().s[3873]++;return{type:e.type,bootstrap:(cov_18tmdn9r60().b[1477][0]++,e.bootstrap)||(cov_18tmdn9r60().b[1477][1]++,K),declarations:(cov_18tmdn9r60().b[1478][0]++,e.declarations)||(cov_18tmdn9r60().b[1478][1]++,K),imports:(cov_18tmdn9r60().b[1479][0]++,e.imports)||(cov_18tmdn9r60().b[1479][1]++,K),exports:(cov_18tmdn9r60().b[1480][0]++,e.exports)||(cov_18tmdn9r60().b[1480][1]++,K),transitiveCompileScopes:null,schemas:(cov_18tmdn9r60().b[1481][0]++,e.schemas)||(cov_18tmdn9r60().b[1481][1]++,null),id:(cov_18tmdn9r60().b[1482][0]++,e.id)||(cov_18tmdn9r60().b[1482][1]++,null)};});}function Wy(e,t){cov_18tmdn9r60().f[1214]++;cov_18tmdn9r60().s[3874]++;if(e==null){cov_18tmdn9r60().b[1483][0]++;cov_18tmdn9r60().s[3875]++;return Ze;}else{cov_18tmdn9r60().b[1483][1]++;}let n=(cov_18tmdn9r60().s[3876]++,{});cov_18tmdn9r60().s[3877]++;for(let r in e){cov_18tmdn9r60().s[3878]++;if(e.hasOwnProperty(r)){cov_18tmdn9r60().b[1484][0]++;let o=(cov_18tmdn9r60().s[3879]++,e[r]),i,s,a,c;cov_18tmdn9r60().s[3880]++;Array.isArray(o)?(cov_18tmdn9r60().b[1485][0]++,a=o[0],i=o[1],s=(cov_18tmdn9r60().b[1486][0]++,o[2])??(cov_18tmdn9r60().b[1486][1]++,i),c=(cov_18tmdn9r60().b[1487][0]++,o[3])||(cov_18tmdn9r60().b[1487][1]++,null)):(cov_18tmdn9r60().b[1485][1]++,i=o,s=o,a=qo.None,c=null),n[i]=[r,a,c],t[i]=s;}else{cov_18tmdn9r60().b[1484][1]++;}}cov_18tmdn9r60().s[3881]++;return n;}function qy(e){cov_18tmdn9r60().f[1215]++;cov_18tmdn9r60().s[3882]++;if(e==null){cov_18tmdn9r60().b[1488][0]++;cov_18tmdn9r60().s[3883]++;return Ze;}else{cov_18tmdn9r60().b[1488][1]++;}let t=(cov_18tmdn9r60().s[3884]++,{});cov_18tmdn9r60().s[3885]++;for(let n in e){cov_18tmdn9r60().s[3886]++;(cov_18tmdn9r60().b[1489][0]++,e.hasOwnProperty(n))&&(cov_18tmdn9r60().b[1489][1]++,t[e[n]]=n);}cov_18tmdn9r60().s[3887]++;return t;}function Gy(e){cov_18tmdn9r60().f[1216]++;cov_18tmdn9r60().s[3888]++;return zn(()=>{cov_18tmdn9r60().f[1217]++;let t=(cov_18tmdn9r60().s[3889]++,ef(e));cov_18tmdn9r60().s[3890]++;return tf(t),t;});}function zy(e){cov_18tmdn9r60().f[1218]++;cov_18tmdn9r60().s[3891]++;return{type:e.type,name:e.name,factory:null,pure:e.pure!==!1,standalone:(cov_18tmdn9r60().b[1490][0]++,e.standalone)??(cov_18tmdn9r60().b[1490][1]++,!0),onDestroy:(cov_18tmdn9r60().b[1491][0]++,e.type.prototype.ngOnDestroy)||(cov_18tmdn9r60().b[1491][1]++,null)};}function ef(e){cov_18tmdn9r60().f[1219]++;let t=(cov_18tmdn9r60().s[3892]++,{});cov_18tmdn9r60().s[3893]++;return{type:e.type,providersResolver:null,viewProvidersResolver:null,factory:null,hostBindings:(cov_18tmdn9r60().b[1492][0]++,e.hostBindings)||(cov_18tmdn9r60().b[1492][1]++,null),hostVars:(cov_18tmdn9r60().b[1493][0]++,e.hostVars)||(cov_18tmdn9r60().b[1493][1]++,0),hostAttrs:(cov_18tmdn9r60().b[1494][0]++,e.hostAttrs)||(cov_18tmdn9r60().b[1494][1]++,null),contentQueries:(cov_18tmdn9r60().b[1495][0]++,e.contentQueries)||(cov_18tmdn9r60().b[1495][1]++,null),declaredInputs:t,inputConfig:(cov_18tmdn9r60().b[1496][0]++,e.inputs)||(cov_18tmdn9r60().b[1496][1]++,Ze),exportAs:(cov_18tmdn9r60().b[1497][0]++,e.exportAs)||(cov_18tmdn9r60().b[1497][1]++,null),standalone:(cov_18tmdn9r60().b[1498][0]++,e.standalone)??(cov_18tmdn9r60().b[1498][1]++,!0),signals:e.signals===!0,selectors:(cov_18tmdn9r60().b[1499][0]++,e.selectors)||(cov_18tmdn9r60().b[1499][1]++,K),viewQuery:(cov_18tmdn9r60().b[1500][0]++,e.viewQuery)||(cov_18tmdn9r60().b[1500][1]++,null),features:(cov_18tmdn9r60().b[1501][0]++,e.features)||(cov_18tmdn9r60().b[1501][1]++,null),setInput:null,resolveHostDirectives:null,hostDirectives:null,controlDef:null,inputs:Wy(e.inputs,t),outputs:qy(e.outputs),debugInfo:null};}function tf(e){cov_18tmdn9r60().f[1220]++;cov_18tmdn9r60().s[3894]++;e.features?.forEach(t=>{cov_18tmdn9r60().f[1221]++;cov_18tmdn9r60().s[3895]++;return t(e);});}function cu(e,t){cov_18tmdn9r60().f[1222]++;cov_18tmdn9r60().s[3896]++;return e?(cov_18tmdn9r60().b[1502][0]++,()=>{cov_18tmdn9r60().f[1223]++;let n=(cov_18tmdn9r60().s[3897]++,typeof e=="function"?(cov_18tmdn9r60().b[1503][0]++,e()):(cov_18tmdn9r60().b[1503][1]++,e)),r=(cov_18tmdn9r60().s[3898]++,[]);cov_18tmdn9r60().s[3899]++;for(let o of n){let i=(cov_18tmdn9r60().s[3900]++,t(o));cov_18tmdn9r60().s[3901]++;(cov_18tmdn9r60().b[1504][0]++,i!==null)&&(cov_18tmdn9r60().b[1504][1]++,r.push(i));}cov_18tmdn9r60().s[3902]++;return r;}):(cov_18tmdn9r60().b[1502][1]++,null);}function Qy(e){cov_18tmdn9r60().f[1224]++;let t=(cov_18tmdn9r60().s[3903]++,0),n=(cov_18tmdn9r60().s[3904]++,typeof e.consts=="function"?(cov_18tmdn9r60().b[1505][0]++,""):(cov_18tmdn9r60().b[1505][1]++,e.consts)),r=(cov_18tmdn9r60().s[3905]++,[e.selectors,e.ngContentSelectors,e.hostVars,e.hostAttrs,n,e.vars,e.decls,e.encapsulation,e.standalone,e.signals,e.exportAs,JSON.stringify(e.inputs),JSON.stringify(e.outputs),Object.getOwnPropertyNames(e.type.prototype),!!e.contentQueries,!!e.viewQuery]);cov_18tmdn9r60().s[3906]++;for(let i of r.join("|")){cov_18tmdn9r60().s[3907]++;t=Math.imul(31,t)+i.charCodeAt(0)<<0;}cov_18tmdn9r60().s[3908]++;return t+=2147483648,"c"+t;}function Zy(e){cov_18tmdn9r60().f[1225]++;cov_18tmdn9r60().s[3909]++;return Object.getPrototypeOf(e.prototype).constructor;}function nf(e){cov_18tmdn9r60().f[1226]++;let t=(cov_18tmdn9r60().s[3910]++,Zy(e.type)),n=(cov_18tmdn9r60().s[3911]++,!0),r=(cov_18tmdn9r60().s[3912]++,[e]);cov_18tmdn9r60().s[3913]++;for(;t;){let o;cov_18tmdn9r60().s[3914]++;if(we(e)){cov_18tmdn9r60().b[1506][0]++;cov_18tmdn9r60().s[3915]++;o=(cov_18tmdn9r60().b[1507][0]++,t.ɵcmp)||(cov_18tmdn9r60().b[1507][1]++,t.ɵdir);}else{cov_18tmdn9r60().b[1506][1]++;cov_18tmdn9r60().s[3916]++;if(t.ɵcmp){cov_18tmdn9r60().b[1508][0]++;cov_18tmdn9r60().s[3917]++;throw new T(903,!1);}else{cov_18tmdn9r60().b[1508][1]++;}cov_18tmdn9r60().s[3918]++;o=t.ɵdir;}cov_18tmdn9r60().s[3919]++;if(o){cov_18tmdn9r60().b[1509][0]++;cov_18tmdn9r60().s[3920]++;if(n){cov_18tmdn9r60().b[1510][0]++;cov_18tmdn9r60().s[3921]++;r.push(o);let s=(cov_18tmdn9r60().s[3922]++,e);cov_18tmdn9r60().s[3923]++;s.inputs=Ps(e.inputs),s.declaredInputs=Ps(e.declaredInputs),s.outputs=Ps(e.outputs);let a=(cov_18tmdn9r60().s[3924]++,o.hostBindings);cov_18tmdn9r60().s[3925]++;(cov_18tmdn9r60().b[1511][0]++,a)&&(cov_18tmdn9r60().b[1511][1]++,ev(e,a));let c=(cov_18tmdn9r60().s[3926]++,o.viewQuery),l=(cov_18tmdn9r60().s[3927]++,o.contentQueries);cov_18tmdn9r60().s[3928]++;if((cov_18tmdn9r60().b[1513][0]++,c)&&(cov_18tmdn9r60().b[1513][1]++,Jy(e,c)),(cov_18tmdn9r60().b[1514][0]++,l)&&(cov_18tmdn9r60().b[1514][1]++,Xy(e,l)),Yy(e,o),qc(e.outputs,o.outputs),(cov_18tmdn9r60().b[1515][0]++,we(o))&&(cov_18tmdn9r60().b[1515][1]++,o.data.animation)){cov_18tmdn9r60().b[1512][0]++;let u=(cov_18tmdn9r60().s[3929]++,e.data);cov_18tmdn9r60().s[3930]++;u.animation=((cov_18tmdn9r60().b[1516][0]++,u.animation)||(cov_18tmdn9r60().b[1516][1]++,[])).concat(o.data.animation);}else{cov_18tmdn9r60().b[1512][1]++;}}else{cov_18tmdn9r60().b[1510][1]++;}let i=(cov_18tmdn9r60().s[3931]++,o.features);cov_18tmdn9r60().s[3932]++;if(i){cov_18tmdn9r60().b[1517][0]++;cov_18tmdn9r60().s[3933]++;for(let s=(cov_18tmdn9r60().s[3934]++,0);s=0;r--){let o=(cov_18tmdn9r60().s[3948]++,e[r]);cov_18tmdn9r60().s[3949]++;o.hostVars=t+=o.hostVars,o.hostAttrs=Jt(o.hostAttrs,n=Jt(n,o.hostAttrs));}}function Ps(e){cov_18tmdn9r60().f[1229]++;cov_18tmdn9r60().s[3950]++;return e===Ze?(cov_18tmdn9r60().b[1523][0]++,{}):(cov_18tmdn9r60().b[1523][1]++,e===K?(cov_18tmdn9r60().b[1524][0]++,[]):(cov_18tmdn9r60().b[1524][1]++,e));}function Jy(e,t){cov_18tmdn9r60().f[1230]++;let n=(cov_18tmdn9r60().s[3951]++,e.viewQuery);cov_18tmdn9r60().s[3952]++;n?(cov_18tmdn9r60().b[1525][0]++,e.viewQuery=(r,o)=>{cov_18tmdn9r60().f[1231]++;cov_18tmdn9r60().s[3953]++;t(r,o),n(r,o);}):(cov_18tmdn9r60().b[1525][1]++,e.viewQuery=t);}function Xy(e,t){cov_18tmdn9r60().f[1232]++;let n=(cov_18tmdn9r60().s[3954]++,e.contentQueries);cov_18tmdn9r60().s[3955]++;n?(cov_18tmdn9r60().b[1526][0]++,e.contentQueries=(r,o,i)=>{cov_18tmdn9r60().f[1233]++;cov_18tmdn9r60().s[3956]++;t(r,o,i),n(r,o,i);}):(cov_18tmdn9r60().b[1526][1]++,e.contentQueries=t);}function ev(e,t){cov_18tmdn9r60().f[1234]++;let n=(cov_18tmdn9r60().s[3957]++,e.hostBindings);cov_18tmdn9r60().s[3958]++;n?(cov_18tmdn9r60().b[1527][0]++,e.hostBindings=(r,o)=>{cov_18tmdn9r60().f[1235]++;cov_18tmdn9r60().s[3959]++;t(r,o),n(r,o);}):(cov_18tmdn9r60().b[1527][1]++,e.hostBindings=t);}function rf(e,t,n,r,o,i,s,a){cov_18tmdn9r60().f[1236]++;cov_18tmdn9r60().s[3960]++;if(n.firstCreatePass){cov_18tmdn9r60().b[1528][0]++;cov_18tmdn9r60().s[3961]++;e.mergedAttrs=Jt(e.mergedAttrs,e.attrs);let u=(cov_18tmdn9r60().s[3962]++,e.tView=Da(2,e,o,i,s,n.directiveRegistry,n.pipeRegistry,null,n.schemas,n.consts,null));cov_18tmdn9r60().s[3963]++;(cov_18tmdn9r60().b[1529][0]++,n.queries!==null)&&(cov_18tmdn9r60().b[1529][1]++,n.queries.template(n,e),u.queries=n.queries.embeddedTView(e));}else{cov_18tmdn9r60().b[1528][1]++;}cov_18tmdn9r60().s[3964]++;(cov_18tmdn9r60().b[1530][0]++,a)&&(cov_18tmdn9r60().b[1530][1]++,e.flags|=a),Qt(e,!1);let c=(cov_18tmdn9r60().s[3965]++,nv(n,t,e,r));cov_18tmdn9r60().s[3966]++;(cov_18tmdn9r60().b[1531][0]++,lo())&&(cov_18tmdn9r60().b[1531][1]++,Ma(n,t,c,e)),Xt(c,t);let l=(cov_18tmdn9r60().s[3967]++,xd(c,t,c,e));cov_18tmdn9r60().s[3968]++;t[r+P]=l,wa(t,l),Ny(l,e,t);}function tv(e,t,n,r,o,i,s,a,c,l,u){cov_18tmdn9r60().f[1237]++;let d=(cov_18tmdn9r60().s[3969]++,n+P),p;cov_18tmdn9r60().s[3970]++;return t.firstCreatePass?(cov_18tmdn9r60().b[1532][0]++,p=sn(t,d,4,(cov_18tmdn9r60().b[1533][0]++,s)||(cov_18tmdn9r60().b[1533][1]++,null),(cov_18tmdn9r60().b[1534][0]++,a)||(cov_18tmdn9r60().b[1534][1]++,null)),(cov_18tmdn9r60().b[1535][0]++,ps())&&(cov_18tmdn9r60().b[1535][1]++,Fd(t,e,p,ae(t.consts,l),vd)),Iu(t,p)):(cov_18tmdn9r60().b[1532][1]++,p=t.data[d]),rf(p,e,t,n,r,o,i,c),(cov_18tmdn9r60().b[1536][0]++,xn(p))&&(cov_18tmdn9r60().b[1536][1]++,Sa(t,e,p)),(cov_18tmdn9r60().b[1537][0]++,l!=null)&&(cov_18tmdn9r60().b[1537][1]++,Zo(e,p,u)),p;}function qn(e,t,n,r,o,i,s,a,c,l,u){cov_18tmdn9r60().f[1238]++;let d=(cov_18tmdn9r60().s[3971]++,n+P),p;cov_18tmdn9r60().s[3972]++;if(t.firstCreatePass){cov_18tmdn9r60().b[1538][0]++;cov_18tmdn9r60().s[3973]++;if(p=sn(t,d,4,(cov_18tmdn9r60().b[1540][0]++,s)||(cov_18tmdn9r60().b[1540][1]++,null),(cov_18tmdn9r60().b[1541][0]++,a)||(cov_18tmdn9r60().b[1541][1]++,null)),l!=null){cov_18tmdn9r60().b[1539][0]++;let f=(cov_18tmdn9r60().s[3974]++,ae(t.consts,l));cov_18tmdn9r60().s[3975]++;p.localNames=[];cov_18tmdn9r60().s[3976]++;for(let h=(cov_18tmdn9r60().s[3977]++,0);h{cov_18tmdn9r60().f[1241]++;class e{log(n){cov_18tmdn9r60().f[1242]++;cov_18tmdn9r60().s[3988]++;console.log(n);}warn(n){cov_18tmdn9r60().f[1243]++;cov_18tmdn9r60().s[3989]++;console.warn(n);}static ɵfac=(cov_18tmdn9r60().s[3990]++,function(r){cov_18tmdn9r60().f[1244]++;cov_18tmdn9r60().s[3991]++;return new((cov_18tmdn9r60().b[1543][0]++,r)||(cov_18tmdn9r60().b[1543][1]++,e))();});static ɵprov=(cov_18tmdn9r60().s[3992]++,V({token:e,factory:e.ɵfac,providedIn:"platform"}));}cov_18tmdn9r60().s[3993]++;return e;})());var sf=(cov_18tmdn9r60().s[3994]++,new N(""));function La(e){cov_18tmdn9r60().f[1245]++;cov_18tmdn9r60().s[3995]++;return(cov_18tmdn9r60().b[1544][0]++,!!e)&&(cov_18tmdn9r60().b[1544][1]++,typeof e.then=="function");}function af(e){cov_18tmdn9r60().f[1246]++;cov_18tmdn9r60().s[3996]++;return(cov_18tmdn9r60().b[1545][0]++,!!e)&&(cov_18tmdn9r60().b[1545][1]++,typeof e.subscribe=="function");}var Fa=(cov_18tmdn9r60().s[3997]++,new N(""));function iv(e){cov_18tmdn9r60().f[1247]++;cov_18tmdn9r60().s[3998]++;return Mn([{provide:Fa,multi:!0,useValue:e}]);}var ja=(cov_18tmdn9r60().s[3999]++,(()=>{cov_18tmdn9r60().f[1248]++;class e{resolve;reject;initialized=(cov_18tmdn9r60().s[4000]++,!1);done=(cov_18tmdn9r60().s[4001]++,!1);donePromise=(cov_18tmdn9r60().s[4002]++,new Promise((n,r)=>{cov_18tmdn9r60().f[1249]++;cov_18tmdn9r60().s[4003]++;this.resolve=n,this.reject=r;}));appInits=(cov_18tmdn9r60().s[4004]++,(cov_18tmdn9r60().b[1546][0]++,E(Fa,{optional:!0}))??(cov_18tmdn9r60().b[1546][1]++,[]));injector=(cov_18tmdn9r60().s[4005]++,E(Ie));constructor(){cov_18tmdn9r60().f[1250]++;}runInitializers(){cov_18tmdn9r60().f[1251]++;cov_18tmdn9r60().s[4006]++;if(this.initialized){cov_18tmdn9r60().b[1547][0]++;cov_18tmdn9r60().s[4007]++;return;}else{cov_18tmdn9r60().b[1547][1]++;}let n=(cov_18tmdn9r60().s[4008]++,[]);cov_18tmdn9r60().s[4009]++;for(let o of this.appInits){let i=(cov_18tmdn9r60().s[4010]++,Kr(this.injector,o));cov_18tmdn9r60().s[4011]++;if(La(i)){cov_18tmdn9r60().b[1548][0]++;cov_18tmdn9r60().s[4012]++;n.push(i);}else{cov_18tmdn9r60().b[1548][1]++;cov_18tmdn9r60().s[4013]++;if(af(i)){cov_18tmdn9r60().b[1549][0]++;let s=(cov_18tmdn9r60().s[4014]++,new Promise((a,c)=>{cov_18tmdn9r60().f[1252]++;cov_18tmdn9r60().s[4015]++;i.subscribe({complete:a,error:c});}));cov_18tmdn9r60().s[4016]++;n.push(s);}else{cov_18tmdn9r60().b[1549][1]++;}}}cov_18tmdn9r60().s[4017]++;let r=()=>{cov_18tmdn9r60().f[1253]++;cov_18tmdn9r60().s[4018]++;this.done=!0,this.resolve();};cov_18tmdn9r60().s[4019]++;Promise.all(n).then(()=>{cov_18tmdn9r60().f[1254]++;cov_18tmdn9r60().s[4020]++;r();}).catch(o=>{cov_18tmdn9r60().f[1255]++;cov_18tmdn9r60().s[4021]++;this.reject(o);}),(cov_18tmdn9r60().b[1550][0]++,n.length===0)&&(cov_18tmdn9r60().b[1550][1]++,r()),this.initialized=!0;}static ɵfac=(cov_18tmdn9r60().s[4022]++,function(r){cov_18tmdn9r60().f[1256]++;cov_18tmdn9r60().s[4023]++;return new((cov_18tmdn9r60().b[1551][0]++,r)||(cov_18tmdn9r60().b[1551][1]++,e))();});static ɵprov=(cov_18tmdn9r60().s[4024]++,V({token:e,factory:e.ɵfac,providedIn:"root"}));}cov_18tmdn9r60().s[4025]++;return e;})()),cf=(cov_18tmdn9r60().s[4026]++,new N(""));function lf(){cov_18tmdn9r60().f[1257]++;cov_18tmdn9r60().s[4027]++;Ei(()=>{cov_18tmdn9r60().f[1258]++;let e=(cov_18tmdn9r60().s[4028]++,"");cov_18tmdn9r60().s[4029]++;throw new T(600,e);});}function uf(e){cov_18tmdn9r60().f[1259]++;cov_18tmdn9r60().s[4030]++;return e.isBoundToModule;}var sv=(cov_18tmdn9r60().s[4031]++,10);var Xo=(cov_18tmdn9r60().s[4032]++,(()=>{cov_18tmdn9r60().f[1260]++;class e{_runningTick=(cov_18tmdn9r60().s[4033]++,!1);_destroyed=(cov_18tmdn9r60().s[4034]++,!1);_destroyListeners=(cov_18tmdn9r60().s[4035]++,[]);_views=(cov_18tmdn9r60().s[4036]++,[]);internalErrorHandler=(cov_18tmdn9r60().s[4037]++,E(et));afterRenderManager=(cov_18tmdn9r60().s[4038]++,E(ba));zonelessEnabled=(cov_18tmdn9r60().s[4039]++,E(On));rootEffectScheduler=(cov_18tmdn9r60().s[4040]++,E(po));dirtyFlags=(cov_18tmdn9r60().s[4041]++,0);tracingSnapshot=(cov_18tmdn9r60().s[4042]++,null);allTestViews=(cov_18tmdn9r60().s[4043]++,new Set());autoDetectTestViews=(cov_18tmdn9r60().s[4044]++,new Set());includeAllTestViews=(cov_18tmdn9r60().s[4045]++,!1);afterTick=(cov_18tmdn9r60().s[4046]++,new te());get allViews(){cov_18tmdn9r60().f[1261]++;cov_18tmdn9r60().s[4047]++;return[...(this.includeAllTestViews?(cov_18tmdn9r60().b[1552][0]++,this.allTestViews):(cov_18tmdn9r60().b[1552][1]++,this.autoDetectTestViews)).keys(),...this._views];}get destroyed(){cov_18tmdn9r60().f[1262]++;cov_18tmdn9r60().s[4048]++;return this._destroyed;}componentTypes=(cov_18tmdn9r60().s[4049]++,[]);components=(cov_18tmdn9r60().s[4050]++,[]);internalPendingTask=(cov_18tmdn9r60().s[4051]++,E(bt));get isStable(){cov_18tmdn9r60().f[1263]++;cov_18tmdn9r60().s[4052]++;return this.internalPendingTask.hasPendingTasksObservable.pipe(Be(n=>{cov_18tmdn9r60().f[1264]++;cov_18tmdn9r60().s[4053]++;return!n;}));}constructor(){cov_18tmdn9r60().f[1265]++;cov_18tmdn9r60().s[4054]++;E(on,{optional:!0});}whenStable(){cov_18tmdn9r60().f[1266]++;let n;cov_18tmdn9r60().s[4055]++;return new Promise(r=>{cov_18tmdn9r60().f[1267]++;cov_18tmdn9r60().s[4056]++;n=this.isStable.subscribe({next:o=>{cov_18tmdn9r60().f[1268]++;cov_18tmdn9r60().s[4057]++;(cov_18tmdn9r60().b[1553][0]++,o)&&(cov_18tmdn9r60().b[1553][1]++,r());}});}).finally(()=>{cov_18tmdn9r60().f[1269]++;cov_18tmdn9r60().s[4058]++;n.unsubscribe();});}_injector=(cov_18tmdn9r60().s[4059]++,E(re));_rendererFactory=(cov_18tmdn9r60().s[4060]++,null);get injector(){cov_18tmdn9r60().f[1270]++;cov_18tmdn9r60().s[4061]++;return this._injector;}bootstrap(n,r){cov_18tmdn9r60().f[1271]++;cov_18tmdn9r60().s[4062]++;return this.bootstrapImpl(n,r);}bootstrapImpl(n,r,o=(cov_18tmdn9r60().b[1554][0]++,Ie.NULL)){cov_18tmdn9r60().f[1272]++;cov_18tmdn9r60().s[4063]++;return this._injector.get(De).run(()=>{cov_18tmdn9r60().f[1273]++;cov_18tmdn9r60().s[4064]++;x(M.BootstrapComponentStart);let s=(cov_18tmdn9r60().s[4065]++,n instanceof Ko);cov_18tmdn9r60().s[4066]++;if(!this._injector.get(ja).done){cov_18tmdn9r60().b[1555][0]++;let h=(cov_18tmdn9r60().s[4067]++,"");cov_18tmdn9r60().s[4068]++;throw new T(405,h);}else{cov_18tmdn9r60().b[1555][1]++;}let c;cov_18tmdn9r60().s[4069]++;s?(cov_18tmdn9r60().b[1556][0]++,c=n):(cov_18tmdn9r60().b[1556][1]++,c=this._injector.get(Jn).resolveComponentFactory(n)),this.componentTypes.push(c.componentType);let l=(cov_18tmdn9r60().s[4070]++,uf(c)?(cov_18tmdn9r60().b[1557][0]++,void 0):(cov_18tmdn9r60().b[1557][1]++,this._injector.get(tn))),u=(cov_18tmdn9r60().s[4071]++,(cov_18tmdn9r60().b[1558][0]++,r)||(cov_18tmdn9r60().b[1558][1]++,c.selector)),d=(cov_18tmdn9r60().s[4072]++,c.create(o,[],u,l)),p=(cov_18tmdn9r60().s[4073]++,d.location.nativeElement),f=(cov_18tmdn9r60().s[4074]++,d.injector.get(sf,null));cov_18tmdn9r60().s[4075]++;return f?.registerApplication(p),d.onDestroy(()=>{cov_18tmdn9r60().f[1274]++;cov_18tmdn9r60().s[4076]++;this.detachView(d.hostView),Fn(this.components,d),f?.unregisterApplication(p);}),this._loadComponent(d),x(M.BootstrapComponentEnd,d),d;});}tick(){cov_18tmdn9r60().f[1275]++;cov_18tmdn9r60().s[4077]++;(cov_18tmdn9r60().b[1559][0]++,this.zonelessEnabled)||(cov_18tmdn9r60().b[1559][1]++,this.dirtyFlags|=1),this._tick();}_tick(){cov_18tmdn9r60().f[1276]++;cov_18tmdn9r60().s[4078]++;x(M.ChangeDetectionStart),this.tracingSnapshot!==null?(cov_18tmdn9r60().b[1560][0]++,this.tracingSnapshot.run(Go.CHANGE_DETECTION,this.tickImpl)):(cov_18tmdn9r60().b[1560][1]++,this.tickImpl());}tickImpl=(cov_18tmdn9r60().s[4079]++,()=>{cov_18tmdn9r60().f[1277]++;cov_18tmdn9r60().s[4080]++;if(this._runningTick){cov_18tmdn9r60().b[1561][0]++;cov_18tmdn9r60().s[4081]++;throw x(M.ChangeDetectionEnd),new T(101,!1);}else{cov_18tmdn9r60().b[1561][1]++;}let n=(cov_18tmdn9r60().s[4082]++,g(null));cov_18tmdn9r60().s[4083]++;try{cov_18tmdn9r60().s[4084]++;this._runningTick=!0,this.synchronize();}finally{cov_18tmdn9r60().s[4085]++;this._runningTick=!1,this.tracingSnapshot?.dispose(),this.tracingSnapshot=null,g(n),this.afterTick.next(),x(M.ChangeDetectionEnd);}});synchronize(){cov_18tmdn9r60().f[1278]++;cov_18tmdn9r60().s[4086]++;(cov_18tmdn9r60().b[1562][0]++,this._rendererFactory===null)&&(cov_18tmdn9r60().b[1562][1]++,!this._injector.destroyed)&&(cov_18tmdn9r60().b[1562][2]++,this._rendererFactory=this._injector.get(Un,null,{optional:!0}));let n=(cov_18tmdn9r60().s[4087]++,0);cov_18tmdn9r60().s[4088]++;for(;(cov_18tmdn9r60().b[1563][0]++,this.dirtyFlags!==0)&&(cov_18tmdn9r60().b[1563][1]++,n++{cov_18tmdn9r60().f[1281]++;cov_18tmdn9r60().s[4107]++;return An(n);})){cov_18tmdn9r60().b[1573][0]++;cov_18tmdn9r60().s[4108]++;this.dirtyFlags|=2;cov_18tmdn9r60().s[4109]++;return;}else{cov_18tmdn9r60().b[1573][1]++;cov_18tmdn9r60().s[4110]++;this.dirtyFlags&=-8;}}attachView(n){cov_18tmdn9r60().f[1282]++;let r=(cov_18tmdn9r60().s[4111]++,n);cov_18tmdn9r60().s[4112]++;this._views.push(r),r.attachToAppRef(this);}detachView(n){cov_18tmdn9r60().f[1283]++;let r=(cov_18tmdn9r60().s[4113]++,n);cov_18tmdn9r60().s[4114]++;Fn(this._views,r),r.detachFromAppRef();}_loadComponent(n){cov_18tmdn9r60().f[1284]++;cov_18tmdn9r60().s[4115]++;this.attachView(n.hostView);cov_18tmdn9r60().s[4116]++;try{cov_18tmdn9r60().s[4117]++;this.tick();}catch(o){cov_18tmdn9r60().s[4118]++;this.internalErrorHandler(o);}cov_18tmdn9r60().s[4119]++;this.components.push(n),this._injector.get(cf,[]).forEach(o=>{cov_18tmdn9r60().f[1285]++;cov_18tmdn9r60().s[4120]++;return o(n);});}ngOnDestroy(){cov_18tmdn9r60().f[1286]++;cov_18tmdn9r60().s[4121]++;if(!this._destroyed){cov_18tmdn9r60().b[1574][0]++;cov_18tmdn9r60().s[4122]++;try{cov_18tmdn9r60().s[4123]++;this._destroyListeners.forEach(n=>{cov_18tmdn9r60().f[1287]++;cov_18tmdn9r60().s[4124]++;return n();}),this._views.slice().forEach(n=>{cov_18tmdn9r60().f[1288]++;cov_18tmdn9r60().s[4125]++;return n.destroy();});}finally{cov_18tmdn9r60().s[4126]++;this._destroyed=!0,this._views=[],this._destroyListeners=[];}}else{cov_18tmdn9r60().b[1574][1]++;}}onDestroy(n){cov_18tmdn9r60().f[1289]++;cov_18tmdn9r60().s[4127]++;return this._destroyListeners.push(n),()=>{cov_18tmdn9r60().f[1290]++;cov_18tmdn9r60().s[4128]++;return Fn(this._destroyListeners,n);};}destroy(){cov_18tmdn9r60().f[1291]++;cov_18tmdn9r60().s[4129]++;if(this._destroyed){cov_18tmdn9r60().b[1575][0]++;cov_18tmdn9r60().s[4130]++;throw new T(406,!1);}else{cov_18tmdn9r60().b[1575][1]++;}let n=(cov_18tmdn9r60().s[4131]++,this._injector);cov_18tmdn9r60().s[4132]++;(cov_18tmdn9r60().b[1576][0]++,n.destroy)&&(cov_18tmdn9r60().b[1576][1]++,!n.destroyed)&&(cov_18tmdn9r60().b[1576][2]++,n.destroy());}get viewCount(){cov_18tmdn9r60().f[1292]++;cov_18tmdn9r60().s[4133]++;return this._views.length;}static ɵfac=(cov_18tmdn9r60().s[4134]++,function(r){cov_18tmdn9r60().f[1293]++;cov_18tmdn9r60().s[4135]++;return new((cov_18tmdn9r60().b[1577][0]++,r)||(cov_18tmdn9r60().b[1577][1]++,e))();});static ɵprov=(cov_18tmdn9r60().s[4136]++,V({token:e,factory:e.ɵfac,providedIn:"root"}));}cov_18tmdn9r60().s[4137]++;return e;})());function Fn(e,t){cov_18tmdn9r60().f[1294]++;let n=(cov_18tmdn9r60().s[4138]++,e.indexOf(t));cov_18tmdn9r60().s[4139]++;(cov_18tmdn9r60().b[1578][0]++,n>-1)&&(cov_18tmdn9r60().b[1578][1]++,e.splice(n,1));}function df(e,t,n,r){cov_18tmdn9r60().f[1295]++;let o=(cov_18tmdn9r60().s[4140]++,v()),i=(cov_18tmdn9r60().s[4141]++,Tt());cov_18tmdn9r60().s[4142]++;if(ge(o,i,t)){cov_18tmdn9r60().b[1579][0]++;let s=(cov_18tmdn9r60().s[4143]++,j()),a=(cov_18tmdn9r60().s[4144]++,co());cov_18tmdn9r60().s[4145]++;_m(a,o,e,t,n,r);}else{cov_18tmdn9r60().b[1579][1]++;}cov_18tmdn9r60().s[4146]++;return df;}function av(){cov_18tmdn9r60().f[1296]++;cov_18tmdn9r60().s[4147]++;return v()[Z][L];}cov_18tmdn9r60().s[4148]++;var aa=class{destroy(t){cov_18tmdn9r60().f[1297]++;}updateValue(t,n){cov_18tmdn9r60().f[1298]++;}swap(t,n){cov_18tmdn9r60().f[1299]++;let r=(cov_18tmdn9r60().s[4149]++,Math.min(t,n)),o=(cov_18tmdn9r60().s[4150]++,Math.max(t,n)),i=(cov_18tmdn9r60().s[4151]++,this.detach(o));cov_18tmdn9r60().s[4152]++;if(o-r>1){cov_18tmdn9r60().b[1580][0]++;let s=(cov_18tmdn9r60().s[4153]++,this.detach(r));cov_18tmdn9r60().s[4154]++;this.attach(r,i),this.attach(o,s);}else{cov_18tmdn9r60().b[1580][1]++;cov_18tmdn9r60().s[4155]++;this.attach(r,i);}}move(t,n){cov_18tmdn9r60().f[1300]++;cov_18tmdn9r60().s[4156]++;this.attach(n,this.detach(t));}};function Ls(e,t,n,r,o){cov_18tmdn9r60().f[1301]++;cov_18tmdn9r60().s[4157]++;return(cov_18tmdn9r60().b[1582][0]++,e===n)&&(cov_18tmdn9r60().b[1582][1]++,Object.is(t,r))?(cov_18tmdn9r60().b[1581][0]++,1):(cov_18tmdn9r60().b[1581][1]++,Object.is(o(e,t),o(n,r))?(cov_18tmdn9r60().b[1583][0]++,-1):(cov_18tmdn9r60().b[1583][1]++,0));}function cv(e,t,n,r){cov_18tmdn9r60().f[1302]++;let o,i,s=(cov_18tmdn9r60().s[4158]++,0),a=(cov_18tmdn9r60().s[4159]++,e.length-1),c=(cov_18tmdn9r60().s[4160]++,void 0);cov_18tmdn9r60().s[4161]++;if(Array.isArray(t)){cov_18tmdn9r60().b[1584][0]++;cov_18tmdn9r60().s[4162]++;g(r);let l=(cov_18tmdn9r60().s[4163]++,t.length-1);cov_18tmdn9r60().s[4164]++;for(g(null);(cov_18tmdn9r60().b[1585][0]++,s<=a)&&(cov_18tmdn9r60().b[1585][1]++,s<=l);){let u=(cov_18tmdn9r60().s[4165]++,e.at(s)),d=(cov_18tmdn9r60().s[4166]++,t[s]),p=(cov_18tmdn9r60().s[4167]++,Ls(s,u,s,d,n));cov_18tmdn9r60().s[4168]++;if(p!==0){cov_18tmdn9r60().b[1586][0]++;cov_18tmdn9r60().s[4169]++;(cov_18tmdn9r60().b[1587][0]++,p<0)&&(cov_18tmdn9r60().b[1587][1]++,e.updateValue(s,d)),s++;cov_18tmdn9r60().s[4170]++;continue;}else{cov_18tmdn9r60().b[1586][1]++;}let f=(cov_18tmdn9r60().s[4171]++,e.at(a)),h=(cov_18tmdn9r60().s[4172]++,t[l]),D=(cov_18tmdn9r60().s[4173]++,Ls(a,f,l,h,n));cov_18tmdn9r60().s[4174]++;if(D!==0){cov_18tmdn9r60().b[1588][0]++;cov_18tmdn9r60().s[4175]++;(cov_18tmdn9r60().b[1589][0]++,D<0)&&(cov_18tmdn9r60().b[1589][1]++,e.updateValue(a,h)),a--,l--;cov_18tmdn9r60().s[4176]++;continue;}else{cov_18tmdn9r60().b[1588][1]++;}let A=(cov_18tmdn9r60().s[4177]++,n(s,u)),R=(cov_18tmdn9r60().s[4178]++,n(a,f)),me=(cov_18tmdn9r60().s[4179]++,n(s,d));cov_18tmdn9r60().s[4180]++;if(Object.is(me,R)){cov_18tmdn9r60().b[1590][0]++;let ri=(cov_18tmdn9r60().s[4181]++,n(l,h));cov_18tmdn9r60().s[4182]++;Object.is(ri,A)?(cov_18tmdn9r60().b[1591][0]++,e.swap(s,a),e.updateValue(a,h),l--,a--):(cov_18tmdn9r60().b[1591][1]++,e.move(a,s)),e.updateValue(s,d),s++;cov_18tmdn9r60().s[4183]++;continue;}else{cov_18tmdn9r60().b[1590][1]++;}cov_18tmdn9r60().s[4184]++;if(o??=new jo(),i??=uu(e,s,a,n),ca(e,o,s,me)){cov_18tmdn9r60().b[1592][0]++;cov_18tmdn9r60().s[4185]++;e.updateValue(s,d),s++,a++;}else{cov_18tmdn9r60().b[1592][1]++;cov_18tmdn9r60().s[4186]++;if(i.has(me)){cov_18tmdn9r60().b[1593][0]++;cov_18tmdn9r60().s[4187]++;o.set(A,e.detach(s)),a--;}else{cov_18tmdn9r60().b[1593][1]++;let ri=(cov_18tmdn9r60().s[4188]++,e.create(s,t[s]));cov_18tmdn9r60().s[4189]++;e.attach(s,ri),s++,a++;}}}cov_18tmdn9r60().s[4190]++;for(;s<=l;){cov_18tmdn9r60().s[4191]++;lu(e,o,n,s,t[s]),s++;}}else{cov_18tmdn9r60().b[1584][1]++;cov_18tmdn9r60().s[4192]++;if(t!=null){cov_18tmdn9r60().b[1594][0]++;cov_18tmdn9r60().s[4193]++;g(r);let l=(cov_18tmdn9r60().s[4194]++,t[Symbol.iterator]());cov_18tmdn9r60().s[4195]++;g(null);let u=(cov_18tmdn9r60().s[4196]++,l.next());cov_18tmdn9r60().s[4197]++;for(;(cov_18tmdn9r60().b[1595][0]++,!u.done)&&(cov_18tmdn9r60().b[1595][1]++,s<=a);){let d=(cov_18tmdn9r60().s[4198]++,e.at(s)),p=(cov_18tmdn9r60().s[4199]++,u.value),f=(cov_18tmdn9r60().s[4200]++,Ls(s,d,s,p,n));cov_18tmdn9r60().s[4201]++;if(f!==0){cov_18tmdn9r60().b[1596][0]++;cov_18tmdn9r60().s[4202]++;(cov_18tmdn9r60().b[1597][0]++,f<0)&&(cov_18tmdn9r60().b[1597][1]++,e.updateValue(s,p)),s++,u=l.next();}else{cov_18tmdn9r60().b[1596][1]++;cov_18tmdn9r60().s[4203]++;o??=new jo(),i??=uu(e,s,a,n);let h=(cov_18tmdn9r60().s[4204]++,n(s,p));cov_18tmdn9r60().s[4205]++;if(ca(e,o,s,h)){cov_18tmdn9r60().b[1598][0]++;cov_18tmdn9r60().s[4206]++;e.updateValue(s,p),s++,a++,u=l.next();}else{cov_18tmdn9r60().b[1598][1]++;cov_18tmdn9r60().s[4207]++;if(!i.has(h)){cov_18tmdn9r60().b[1599][0]++;cov_18tmdn9r60().s[4208]++;e.attach(s,e.create(s,p)),s++,a++,u=l.next();}else{cov_18tmdn9r60().b[1599][1]++;let D=(cov_18tmdn9r60().s[4209]++,n(s,d));cov_18tmdn9r60().s[4210]++;o.set(D,e.detach(s)),a--;}}}}cov_18tmdn9r60().s[4211]++;for(;!u.done;){cov_18tmdn9r60().s[4212]++;lu(e,o,n,e.length,u.value),u=l.next();}}else{cov_18tmdn9r60().b[1594][1]++;}}cov_18tmdn9r60().s[4213]++;for(;s<=a;){cov_18tmdn9r60().s[4214]++;e.destroy(e.detach(a--));}cov_18tmdn9r60().s[4215]++;o?.forEach(l=>{cov_18tmdn9r60().f[1303]++;cov_18tmdn9r60().s[4216]++;e.destroy(l);});}function ca(e,t,n,r){cov_18tmdn9r60().f[1304]++;cov_18tmdn9r60().s[4217]++;return(cov_18tmdn9r60().b[1601][0]++,t!==void 0)&&(cov_18tmdn9r60().b[1601][1]++,t.has(r))?(cov_18tmdn9r60().b[1600][0]++,e.attach(n,t.get(r)),t.delete(r),!0):(cov_18tmdn9r60().b[1600][1]++,!1);}function lu(e,t,n,r,o){cov_18tmdn9r60().f[1305]++;cov_18tmdn9r60().s[4218]++;if(ca(e,t,r,n(r,o))){cov_18tmdn9r60().b[1602][0]++;cov_18tmdn9r60().s[4219]++;e.updateValue(r,o);}else{cov_18tmdn9r60().b[1602][1]++;let i=(cov_18tmdn9r60().s[4220]++,e.create(r,o));cov_18tmdn9r60().s[4221]++;e.attach(r,i);}}function uu(e,t,n,r){cov_18tmdn9r60().f[1306]++;let o=(cov_18tmdn9r60().s[4222]++,new Set());cov_18tmdn9r60().s[4223]++;for(let i=(cov_18tmdn9r60().s[4224]++,t);i<=n;i++){cov_18tmdn9r60().s[4225]++;o.add(r(i,e.at(i)));}cov_18tmdn9r60().s[4226]++;return o;}cov_18tmdn9r60().s[4227]++;var jo=class{kvMap=(cov_18tmdn9r60().s[4228]++,new Map());_vMap=(cov_18tmdn9r60().s[4229]++,void 0);has(t){cov_18tmdn9r60().f[1307]++;cov_18tmdn9r60().s[4230]++;return this.kvMap.has(t);}delete(t){cov_18tmdn9r60().f[1308]++;cov_18tmdn9r60().s[4231]++;if(!this.has(t)){cov_18tmdn9r60().b[1603][0]++;cov_18tmdn9r60().s[4232]++;return!1;}else{cov_18tmdn9r60().b[1603][1]++;}let n=(cov_18tmdn9r60().s[4233]++,this.kvMap.get(t));cov_18tmdn9r60().s[4234]++;return(cov_18tmdn9r60().b[1605][0]++,this._vMap!==void 0)&&(cov_18tmdn9r60().b[1605][1]++,this._vMap.has(n))?(cov_18tmdn9r60().b[1604][0]++,this.kvMap.set(t,this._vMap.get(n)),this._vMap.delete(n)):(cov_18tmdn9r60().b[1604][1]++,this.kvMap.delete(t)),!0;}get(t){cov_18tmdn9r60().f[1309]++;cov_18tmdn9r60().s[4235]++;return this.kvMap.get(t);}set(t,n){cov_18tmdn9r60().f[1310]++;cov_18tmdn9r60().s[4236]++;if(this.kvMap.has(t)){cov_18tmdn9r60().b[1606][0]++;let r=(cov_18tmdn9r60().s[4237]++,this.kvMap.get(t));cov_18tmdn9r60().s[4238]++;(cov_18tmdn9r60().b[1607][0]++,this._vMap===void 0)&&(cov_18tmdn9r60().b[1607][1]++,this._vMap=new Map());let o=(cov_18tmdn9r60().s[4239]++,this._vMap);cov_18tmdn9r60().s[4240]++;for(;o.has(r);){cov_18tmdn9r60().s[4241]++;r=o.get(r);}cov_18tmdn9r60().s[4242]++;o.set(r,n);}else{cov_18tmdn9r60().b[1606][1]++;cov_18tmdn9r60().s[4243]++;this.kvMap.set(t,n);}}forEach(t){cov_18tmdn9r60().f[1311]++;cov_18tmdn9r60().s[4244]++;for(let[n,r]of this.kvMap){cov_18tmdn9r60().s[4245]++;if(t(r,n),this._vMap!==void 0){cov_18tmdn9r60().b[1608][0]++;let o=(cov_18tmdn9r60().s[4246]++,this._vMap);cov_18tmdn9r60().s[4247]++;for(;o.has(r);){cov_18tmdn9r60().s[4248]++;r=o.get(r),t(r,n);}}else{cov_18tmdn9r60().b[1608][1]++;}}}};function lv(e,t,n,r,o,i,s,a){cov_18tmdn9r60().f[1312]++;cov_18tmdn9r60().s[4249]++;At("NgControlFlow");let c=(cov_18tmdn9r60().s[4250]++,v()),l=(cov_18tmdn9r60().s[4251]++,j()),u=(cov_18tmdn9r60().s[4252]++,ae(l.consts,i));cov_18tmdn9r60().s[4253]++;return qn(c,l,e,t,n,r,o,u,256,s,a),Va;}function Va(e,t,n,r,o,i,s,a){cov_18tmdn9r60().f[1313]++;cov_18tmdn9r60().s[4254]++;At("NgControlFlow");let c=(cov_18tmdn9r60().s[4255]++,v()),l=(cov_18tmdn9r60().s[4256]++,j()),u=(cov_18tmdn9r60().s[4257]++,ae(l.consts,i));cov_18tmdn9r60().s[4258]++;return qn(c,l,e,t,n,r,o,u,512,s,a),Va;}function uv(e,t){cov_18tmdn9r60().f[1314]++;cov_18tmdn9r60().s[4259]++;At("NgControlFlow");let n=(cov_18tmdn9r60().s[4260]++,v()),r=(cov_18tmdn9r60().s[4261]++,Tt()),o=(cov_18tmdn9r60().s[4262]++,n[r]!==X?(cov_18tmdn9r60().b[1609][0]++,n[r]):(cov_18tmdn9r60().b[1609][1]++,-1)),i=(cov_18tmdn9r60().s[4263]++,o!==-1?(cov_18tmdn9r60().b[1610][0]++,Vo(n,P+o)):(cov_18tmdn9r60().b[1610][1]++,void 0)),s=(cov_18tmdn9r60().s[4264]++,0);cov_18tmdn9r60().s[4265]++;if(ge(n,r,e)){cov_18tmdn9r60().b[1611][0]++;let a=(cov_18tmdn9r60().s[4266]++,g(null));cov_18tmdn9r60().s[4267]++;try{cov_18tmdn9r60().s[4268]++;if((cov_18tmdn9r60().b[1613][0]++,i!==void 0)&&(cov_18tmdn9r60().b[1613][1]++,Rd(i,s)),e!==-1){cov_18tmdn9r60().b[1612][0]++;let c=(cov_18tmdn9r60().s[4269]++,P+e),l=(cov_18tmdn9r60().s[4270]++,Vo(n,c)),u=(cov_18tmdn9r60().s[4271]++,fa(n[y],c)),d=(cov_18tmdn9r60().s[4272]++,Od(l,u,n)),p=(cov_18tmdn9r60().s[4273]++,Yn(n,u,t,{dehydratedView:d}));cov_18tmdn9r60().s[4274]++;Kn(l,p,s,en(u,d));}else{cov_18tmdn9r60().b[1612][1]++;}}finally{cov_18tmdn9r60().s[4275]++;g(a);}}else{cov_18tmdn9r60().b[1611][1]++;cov_18tmdn9r60().s[4276]++;if(i!==void 0){cov_18tmdn9r60().b[1614][0]++;let a=(cov_18tmdn9r60().s[4277]++,Ad(i,s));cov_18tmdn9r60().s[4278]++;(cov_18tmdn9r60().b[1615][0]++,a!==void 0)&&(cov_18tmdn9r60().b[1615][1]++,a[L]=t);}else{cov_18tmdn9r60().b[1614][1]++;}}}cov_18tmdn9r60().s[4279]++;var la=class{lContainer;$implicit;$index;constructor(t,n,r){cov_18tmdn9r60().f[1315]++;cov_18tmdn9r60().s[4280]++;this.lContainer=t,this.$implicit=n,this.$index=r;}get $count(){cov_18tmdn9r60().f[1316]++;cov_18tmdn9r60().s[4281]++;return this.lContainer.length-F;}};function dv(e,t){cov_18tmdn9r60().f[1317]++;cov_18tmdn9r60().s[4282]++;return t;}cov_18tmdn9r60().s[4283]++;var ua=class{hasEmptyBlock;trackByFn;liveCollection;constructor(t,n,r){cov_18tmdn9r60().f[1318]++;cov_18tmdn9r60().s[4284]++;this.hasEmptyBlock=t,this.trackByFn=n,this.liveCollection=r;}};function fv(e,t,n,r,o,i,s,a,c,l,u,d,p){cov_18tmdn9r60().f[1319]++;cov_18tmdn9r60().s[4285]++;At("NgControlFlow");let f=(cov_18tmdn9r60().s[4286]++,v()),h=(cov_18tmdn9r60().s[4287]++,j()),D=(cov_18tmdn9r60().s[4288]++,c!==void 0),A=(cov_18tmdn9r60().s[4289]++,v()),R=(cov_18tmdn9r60().s[4290]++,a?(cov_18tmdn9r60().b[1616][0]++,s.bind(A[Z][L])):(cov_18tmdn9r60().b[1616][1]++,s)),me=(cov_18tmdn9r60().s[4291]++,new ua(D,R));cov_18tmdn9r60().s[4292]++;A[P+e]=me,qn(f,h,e+1,t,n,r,o,ae(h.consts,i),256),(cov_18tmdn9r60().b[1617][0]++,D)&&(cov_18tmdn9r60().b[1617][1]++,qn(f,h,e+2,c,l,u,d,ae(h.consts,p),512));}cov_18tmdn9r60().s[4293]++;var da=class extends aa{lContainer;hostLView;templateTNode;operationsCounter=(cov_18tmdn9r60().s[4294]++,void 0);needsIndexUpdate=(cov_18tmdn9r60().s[4295]++,!1);constructor(t,n,r){cov_18tmdn9r60().f[1320]++;cov_18tmdn9r60().s[4296]++;super(),this.lContainer=t,this.hostLView=n,this.templateTNode=r;}get length(){cov_18tmdn9r60().f[1321]++;cov_18tmdn9r60().s[4297]++;return this.lContainer.length-F;}at(t){cov_18tmdn9r60().f[1322]++;cov_18tmdn9r60().s[4298]++;return this.getLView(t)[L].$implicit;}attach(t,n){cov_18tmdn9r60().f[1323]++;let r=(cov_18tmdn9r60().s[4299]++,n[yt]);cov_18tmdn9r60().s[4300]++;this.needsIndexUpdate||=t!==this.length,Kn(this.lContainer,n,t,en(this.templateTNode,r)),hv(this.lContainer,t);}detach(t){cov_18tmdn9r60().f[1324]++;cov_18tmdn9r60().s[4301]++;return this.needsIndexUpdate||=t!==this.length-1,gv(this.lContainer,t),mv(this.lContainer,t);}create(t,n){cov_18tmdn9r60().f[1325]++;let r=(cov_18tmdn9r60().s[4302]++,Ao(this.lContainer,this.templateTNode.tView.ssrId));cov_18tmdn9r60().s[4303]++;return Yn(this.hostLView,this.templateTNode,new la(this.lContainer,n,t),{dehydratedView:r});}destroy(t){cov_18tmdn9r60().f[1326]++;cov_18tmdn9r60().s[4304]++;zo(t[y],t);}updateValue(t,n){cov_18tmdn9r60().f[1327]++;cov_18tmdn9r60().s[4305]++;this.getLView(t)[L].$implicit=n;}reset(){cov_18tmdn9r60().f[1328]++;cov_18tmdn9r60().s[4306]++;this.needsIndexUpdate=!1;}updateIndexes(){cov_18tmdn9r60().f[1329]++;cov_18tmdn9r60().s[4307]++;if(this.needsIndexUpdate){cov_18tmdn9r60().b[1618][0]++;cov_18tmdn9r60().s[4308]++;for(let t=(cov_18tmdn9r60().s[4309]++,0);t0)){cov_18tmdn9r60().b[1626][0]++;let i=(cov_18tmdn9r60().s[4345]++,r[ke]);cov_18tmdn9r60().s[4346]++;rm(i,o),Vn.delete(r[Oe]),o.detachedLeaveAnimationFns=void 0;}else{cov_18tmdn9r60().b[1626][1]++;}}function gv(e,t){cov_18tmdn9r60().f[1334]++;cov_18tmdn9r60().s[4347]++;if(e.length<=F){cov_18tmdn9r60().b[1628][0]++;cov_18tmdn9r60().s[4348]++;return;}else{cov_18tmdn9r60().b[1628][1]++;}let n=(cov_18tmdn9r60().s[4349]++,F+t),r=(cov_18tmdn9r60().s[4350]++,e[n]),o=(cov_18tmdn9r60().s[4351]++,r?(cov_18tmdn9r60().b[1629][0]++,r[Ke]):(cov_18tmdn9r60().b[1629][1]++,void 0));cov_18tmdn9r60().s[4352]++;(cov_18tmdn9r60().b[1630][0]++,o)&&(cov_18tmdn9r60().b[1630][1]++,o.leave)&&(cov_18tmdn9r60().b[1630][2]++,o.leave.size>0)&&(cov_18tmdn9r60().b[1630][3]++,o.detachedLeaveAnimationFns=[]);}function mv(e,t){cov_18tmdn9r60().f[1335]++;cov_18tmdn9r60().s[4353]++;return Bn(e,t);}function yv(e,t){cov_18tmdn9r60().f[1336]++;cov_18tmdn9r60().s[4354]++;return Ad(e,t);}function fa(e,t){cov_18tmdn9r60().f[1337]++;cov_18tmdn9r60().s[4355]++;return Xr(e,t);}function ff(e,t,n){cov_18tmdn9r60().f[1338]++;let r=(cov_18tmdn9r60().s[4356]++,v()),o=(cov_18tmdn9r60().s[4357]++,Tt());cov_18tmdn9r60().s[4358]++;if(ge(r,o,t)){cov_18tmdn9r60().b[1631][0]++;let i=(cov_18tmdn9r60().s[4359]++,j()),s=(cov_18tmdn9r60().s[4360]++,co());cov_18tmdn9r60().s[4361]++;Dm(s,r,e,t,r[O],n);}else{cov_18tmdn9r60().b[1631][1]++;}cov_18tmdn9r60().s[4362]++;return ff;}function pa(e,t,n,r,o){cov_18tmdn9r60().f[1339]++;cov_18tmdn9r60().s[4363]++;xa(t,e,n,o?(cov_18tmdn9r60().b[1632][0]++,"class"):(cov_18tmdn9r60().b[1632][1]++,"style"),r);}function Ho(e,t,n,r){cov_18tmdn9r60().f[1340]++;let o=(cov_18tmdn9r60().s[4364]++,v()),i=(cov_18tmdn9r60().s[4365]++,o[y]),s=(cov_18tmdn9r60().s[4366]++,e+P),a=(cov_18tmdn9r60().s[4367]++,i.firstCreatePass?(cov_18tmdn9r60().b[1633][0]++,Vd(s,o,2,t,vd,ps(),n,r)):(cov_18tmdn9r60().b[1633][1]++,i.data[s]));cov_18tmdn9r60().s[4368]++;if(Le(a)){cov_18tmdn9r60().b[1634][0]++;let c=(cov_18tmdn9r60().s[4369]++,o[ue].tracingService);cov_18tmdn9r60().s[4370]++;if((cov_18tmdn9r60().b[1636][0]++,c)&&(cov_18tmdn9r60().b[1636][1]++,c.componentCreate)){cov_18tmdn9r60().b[1635][0]++;let l=(cov_18tmdn9r60().s[4371]++,i.data[a.directiveStart+a.componentOffset]);cov_18tmdn9r60().s[4372]++;return c.componentCreate(Gd(l),()=>{cov_18tmdn9r60().f[1341]++;cov_18tmdn9r60().s[4373]++;return du(e,t,o,a,r),Ho;});}else{cov_18tmdn9r60().b[1635][1]++;}}else{cov_18tmdn9r60().b[1634][1]++;}cov_18tmdn9r60().s[4374]++;return du(e,t,o,a,r),Ho;}function du(e,t,n,r,o){cov_18tmdn9r60().f[1342]++;cov_18tmdn9r60().s[4375]++;if(Ed(r,n,e,t,gf),xn(r)){cov_18tmdn9r60().b[1637][0]++;let i=(cov_18tmdn9r60().s[4376]++,n[y]);cov_18tmdn9r60().s[4377]++;Sa(i,n,r),qu(i,r,n);}else{cov_18tmdn9r60().b[1637][1]++;}cov_18tmdn9r60().s[4378]++;(cov_18tmdn9r60().b[1638][0]++,o!=null)&&(cov_18tmdn9r60().b[1638][1]++,Zo(n,r));}function Ha(){cov_18tmdn9r60().f[1343]++;let e=(cov_18tmdn9r60().s[4379]++,j()),t=(cov_18tmdn9r60().s[4380]++,G()),n=(cov_18tmdn9r60().s[4381]++,Id(t));cov_18tmdn9r60().s[4382]++;return(cov_18tmdn9r60().b[1639][0]++,e.firstCreatePass)&&(cov_18tmdn9r60().b[1639][1]++,Hd(e,n)),(cov_18tmdn9r60().b[1640][0]++,gs(n))&&(cov_18tmdn9r60().b[1640][1]++,ms()),fs(),(cov_18tmdn9r60().b[1641][0]++,n.classesWithoutHost!=null)&&(cov_18tmdn9r60().b[1641][1]++,Zh(n))&&(cov_18tmdn9r60().b[1641][2]++,pa(e,n,v(),n.classesWithoutHost,!0)),(cov_18tmdn9r60().b[1642][0]++,n.stylesWithoutHost!=null)&&(cov_18tmdn9r60().b[1642][1]++,Yh(n))&&(cov_18tmdn9r60().b[1642][2]++,pa(e,n,v(),n.stylesWithoutHost,!1)),Ha;}function pf(e,t,n,r){cov_18tmdn9r60().f[1344]++;cov_18tmdn9r60().s[4383]++;return Ho(e,t,n,r),Ha(),pf;}function Ba(e,t,n,r){cov_18tmdn9r60().f[1345]++;let o=(cov_18tmdn9r60().s[4384]++,v()),i=(cov_18tmdn9r60().s[4385]++,o[y]),s=(cov_18tmdn9r60().s[4386]++,e+P),a=(cov_18tmdn9r60().s[4387]++,i.firstCreatePass?(cov_18tmdn9r60().b[1643][0]++,fy(s,i,2,t,n,r)):(cov_18tmdn9r60().b[1643][1]++,i.data[s]));cov_18tmdn9r60().s[4388]++;return Ed(a,o,e,t,gf),(cov_18tmdn9r60().b[1644][0]++,r!=null)&&(cov_18tmdn9r60().b[1644][1]++,Zo(o,a)),Ba;}function $a(){cov_18tmdn9r60().f[1346]++;let e=(cov_18tmdn9r60().s[4389]++,G()),t=(cov_18tmdn9r60().s[4390]++,Id(e));cov_18tmdn9r60().s[4391]++;return(cov_18tmdn9r60().b[1645][0]++,gs(t))&&(cov_18tmdn9r60().b[1645][1]++,ms()),fs(),$a;}function hf(e,t,n,r){cov_18tmdn9r60().f[1347]++;cov_18tmdn9r60().s[4392]++;return Ba(e,t,n,r),$a(),hf;}cov_18tmdn9r60().s[4393]++;var gf=(e,t,n,r,o)=>{cov_18tmdn9r60().f[1348]++;cov_18tmdn9r60().s[4394]++;return uo(!0),Qu(t[O],r,Rl());};function vv(){cov_18tmdn9r60().f[1349]++;cov_18tmdn9r60().s[4395]++;return v();}function mf(e,t,n){cov_18tmdn9r60().f[1350]++;let r=(cov_18tmdn9r60().s[4396]++,v()),o=(cov_18tmdn9r60().s[4397]++,Tt());cov_18tmdn9r60().s[4398]++;if(ge(r,o,t)){cov_18tmdn9r60().b[1646][0]++;let i=(cov_18tmdn9r60().s[4399]++,j()),s=(cov_18tmdn9r60().s[4400]++,co());cov_18tmdn9r60().s[4401]++;yd(s,r,e,t,r[O],n);}else{cov_18tmdn9r60().b[1646][1]++;}cov_18tmdn9r60().s[4402]++;return mf;}var Pn=(cov_18tmdn9r60().s[4403]++,void 0);function Ev(e){cov_18tmdn9r60().f[1351]++;let t=(cov_18tmdn9r60().s[4404]++,Math.floor(Math.abs(e))),n=(cov_18tmdn9r60().s[4405]++,e.toString().replace(/^[^.]*\.?/,"").length);cov_18tmdn9r60().s[4406]++;return(cov_18tmdn9r60().b[1648][0]++,t===1)&&(cov_18tmdn9r60().b[1648][1]++,n===0)?(cov_18tmdn9r60().b[1647][0]++,1):(cov_18tmdn9r60().b[1647][1]++,5);}var Iv=(cov_18tmdn9r60().s[4407]++,["en",[["a","p"],["AM","PM"]],[["AM","PM"]],[["S","M","T","W","T","F","S"],["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],["Su","Mo","Tu","We","Th","Fr","Sa"]],Pn,[["J","F","M","A","M","J","J","A","S","O","N","D"],["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],["January","February","March","April","May","June","July","August","September","October","November","December"]],Pn,[["B","A"],["BC","AD"],["Before Christ","Anno Domini"]],0,[6,0],["M/d/yy","MMM d, y","MMMM d, y","EEEE, MMMM d, y"],["h:mm\u202Fa","h:mm:ss\u202Fa","h:mm:ss\u202Fa z","h:mm:ss\u202Fa zzzz"],["{1}, {0}",Pn,Pn,Pn],[".",",",";","%","+","-","E","\xD7","\u2030","\u221E","NaN",":"],["#,##0.###","#,##0%","\xA4#,##0.00","#E0"],"USD","$","US Dollar",{},"ltr",Ev]),Fs=(cov_18tmdn9r60().s[4408]++,{});function Dv(e){cov_18tmdn9r60().f[1352]++;let t=(cov_18tmdn9r60().s[4409]++,Cv(e)),n=(cov_18tmdn9r60().s[4410]++,fu(t));cov_18tmdn9r60().s[4411]++;if(n){cov_18tmdn9r60().b[1649][0]++;cov_18tmdn9r60().s[4412]++;return n;}else{cov_18tmdn9r60().b[1649][1]++;}let r=(cov_18tmdn9r60().s[4413]++,t.split("-")[0]);cov_18tmdn9r60().s[4414]++;if(n=fu(r),n){cov_18tmdn9r60().b[1650][0]++;cov_18tmdn9r60().s[4415]++;return n;}else{cov_18tmdn9r60().b[1650][1]++;}cov_18tmdn9r60().s[4416]++;if(r==="en"){cov_18tmdn9r60().b[1651][0]++;cov_18tmdn9r60().s[4417]++;return Iv;}else{cov_18tmdn9r60().b[1651][1]++;}cov_18tmdn9r60().s[4418]++;throw new T(701,!1);}function fu(e){cov_18tmdn9r60().f[1353]++;cov_18tmdn9r60().s[4419]++;return(cov_18tmdn9r60().b[1652][0]++,e in Fs)||(cov_18tmdn9r60().b[1652][1]++,Fs[e]=(cov_18tmdn9r60().b[1653][0]++,Qe.ng)&&(cov_18tmdn9r60().b[1653][1]++,Qe.ng.common)&&(cov_18tmdn9r60().b[1653][2]++,Qe.ng.common.locales)&&(cov_18tmdn9r60().b[1653][3]++,Qe.ng.common.locales[e])),Fs[e];}var yf=(cov_18tmdn9r60().s[4420]++,function(e){cov_18tmdn9r60().f[1354]++;cov_18tmdn9r60().s[4421]++;return e[e.LocaleId=0]="LocaleId",e[e.DayPeriodsFormat=1]="DayPeriodsFormat",e[e.DayPeriodsStandalone=2]="DayPeriodsStandalone",e[e.DaysFormat=3]="DaysFormat",e[e.DaysStandalone=4]="DaysStandalone",e[e.MonthsFormat=5]="MonthsFormat",e[e.MonthsStandalone=6]="MonthsStandalone",e[e.Eras=7]="Eras",e[e.FirstDayOfWeek=8]="FirstDayOfWeek",e[e.WeekendRange=9]="WeekendRange",e[e.DateFormat=10]="DateFormat",e[e.TimeFormat=11]="TimeFormat",e[e.DateTimeFormat=12]="DateTimeFormat",e[e.NumberSymbols=13]="NumberSymbols",e[e.NumberFormats=14]="NumberFormats",e[e.CurrencyCode=15]="CurrencyCode",e[e.CurrencySymbol=16]="CurrencySymbol",e[e.CurrencyName=17]="CurrencyName",e[e.Currencies=18]="Currencies",e[e.Directionality=19]="Directionality",e[e.PluralCase=20]="PluralCase",e[e.ExtraData=21]="ExtraData",e;}((cov_18tmdn9r60().b[1654][0]++,yf)||(cov_18tmdn9r60().b[1654][1]++,{})));function Cv(e){cov_18tmdn9r60().f[1355]++;cov_18tmdn9r60().s[4422]++;return e.toLowerCase().replace(/_/g,"-");}var er=(cov_18tmdn9r60().s[4423]++,"en-US");var wv=(cov_18tmdn9r60().s[4424]++,er);function vf(e){cov_18tmdn9r60().f[1356]++;cov_18tmdn9r60().s[4425]++;(cov_18tmdn9r60().b[1655][0]++,typeof e=="string")&&(cov_18tmdn9r60().b[1655][1]++,wv=e.toLowerCase().replace(/_/g,"-"));}function Ef(e,t,n){cov_18tmdn9r60().f[1357]++;let r=(cov_18tmdn9r60().s[4426]++,v()),o=(cov_18tmdn9r60().s[4427]++,j()),i=(cov_18tmdn9r60().s[4428]++,G());cov_18tmdn9r60().s[4429]++;return Tv(o,r,r[O],i,e,t,n),Ef;}function If(e,t,n){cov_18tmdn9r60().f[1358]++;let r=(cov_18tmdn9r60().s[4430]++,v()),o=(cov_18tmdn9r60().s[4431]++,j()),i=(cov_18tmdn9r60().s[4432]++,G());cov_18tmdn9r60().s[4433]++;return((cov_18tmdn9r60().b[1656][0]++,i.type&3)||(cov_18tmdn9r60().b[1656][1]++,n))&&(cov_18tmdn9r60().b[1656][2]++,Wd(i,o,r,n,r[O],e,t,Io(i,r,t))),If;}function Tv(e,t,n,r,o,i,s){cov_18tmdn9r60().f[1359]++;let a=(cov_18tmdn9r60().s[4434]++,!0),c=(cov_18tmdn9r60().s[4435]++,null);cov_18tmdn9r60().s[4436]++;if(((cov_18tmdn9r60().b[1658][0]++,r.type&3)||(cov_18tmdn9r60().b[1658][1]++,s))&&(cov_18tmdn9r60().b[1658][2]++,c??=Io(r,t,i),(cov_18tmdn9r60().b[1659][0]++,Wd(r,e,t,s,n,o,i,c))&&(cov_18tmdn9r60().b[1659][1]++,a=!1)),a){cov_18tmdn9r60().b[1657][0]++;let l=(cov_18tmdn9r60().s[4437]++,r.outputs?.[o]),u=(cov_18tmdn9r60().s[4438]++,r.hostDirectiveOutputs?.[o]);cov_18tmdn9r60().s[4439]++;if((cov_18tmdn9r60().b[1661][0]++,u)&&(cov_18tmdn9r60().b[1661][1]++,u.length)){cov_18tmdn9r60().b[1660][0]++;cov_18tmdn9r60().s[4440]++;for(let d=(cov_18tmdn9r60().s[4441]++,0);d>17&32767;}function kv(e){cov_18tmdn9r60().f[1372]++;cov_18tmdn9r60().s[4504]++;return(e&2)==2;}function Ov(e,t){cov_18tmdn9r60().f[1373]++;cov_18tmdn9r60().s[4505]++;return e&131071|t<<17;}function ha(e){cov_18tmdn9r60().f[1374]++;cov_18tmdn9r60().s[4506]++;return e|2;}function nn(e){cov_18tmdn9r60().f[1375]++;cov_18tmdn9r60().s[4507]++;return(e&131068)>>2;}function js(e,t){cov_18tmdn9r60().f[1376]++;cov_18tmdn9r60().s[4508]++;return e&-131069|t<<2;}function Pv(e){cov_18tmdn9r60().f[1377]++;cov_18tmdn9r60().s[4509]++;return(e&1)===1;}function ga(e){cov_18tmdn9r60().f[1378]++;cov_18tmdn9r60().s[4510]++;return e|1;}function Lv(e,t,n,r,o,i){cov_18tmdn9r60().f[1379]++;let s=(cov_18tmdn9r60().s[4511]++,i?(cov_18tmdn9r60().b[1686][0]++,t.classBindings):(cov_18tmdn9r60().b[1686][1]++,t.styleBindings)),a=(cov_18tmdn9r60().s[4512]++,xt(s)),c=(cov_18tmdn9r60().s[4513]++,nn(s));cov_18tmdn9r60().s[4514]++;e[r]=n;let l=(cov_18tmdn9r60().s[4515]++,!1),u;cov_18tmdn9r60().s[4516]++;if(Array.isArray(n)){cov_18tmdn9r60().b[1687][0]++;let d=(cov_18tmdn9r60().s[4517]++,n);cov_18tmdn9r60().s[4518]++;u=d[1],((cov_18tmdn9r60().b[1688][0]++,u===null)||(cov_18tmdn9r60().b[1688][1]++,Ut(d,u)>0))&&(cov_18tmdn9r60().b[1688][2]++,l=!0);}else{cov_18tmdn9r60().b[1687][1]++;cov_18tmdn9r60().s[4519]++;u=n;}cov_18tmdn9r60().s[4520]++;if(o){cov_18tmdn9r60().b[1689][0]++;cov_18tmdn9r60().s[4521]++;if(c!==0){cov_18tmdn9r60().b[1690][0]++;let p=(cov_18tmdn9r60().s[4522]++,xt(e[a+1]));cov_18tmdn9r60().s[4523]++;e[r+1]=go(p,a),(cov_18tmdn9r60().b[1691][0]++,p!==0)&&(cov_18tmdn9r60().b[1691][1]++,e[p+1]=js(e[p+1],r)),e[a+1]=Ov(e[a+1],r);}else{cov_18tmdn9r60().b[1690][1]++;cov_18tmdn9r60().s[4524]++;e[r+1]=go(a,0),(cov_18tmdn9r60().b[1692][0]++,a!==0)&&(cov_18tmdn9r60().b[1692][1]++,e[a+1]=js(e[a+1],r)),a=r;}}else{cov_18tmdn9r60().b[1689][1]++;cov_18tmdn9r60().s[4525]++;e[r+1]=go(c,0),a===0?(cov_18tmdn9r60().b[1693][0]++,a=r):(cov_18tmdn9r60().b[1693][1]++,e[c+1]=js(e[c+1],r)),c=r;}cov_18tmdn9r60().s[4526]++;(cov_18tmdn9r60().b[1694][0]++,l)&&(cov_18tmdn9r60().b[1694][1]++,e[r+1]=ha(e[r+1])),pu(e,u,r,!0),pu(e,u,r,!1),Fv(t,u,e,r,i),s=go(a,c),i?(cov_18tmdn9r60().b[1695][0]++,t.classBindings=s):(cov_18tmdn9r60().b[1695][1]++,t.styleBindings=s);}function Fv(e,t,n,r,o){cov_18tmdn9r60().f[1380]++;let i=(cov_18tmdn9r60().s[4527]++,o?(cov_18tmdn9r60().b[1696][0]++,e.residualClasses):(cov_18tmdn9r60().b[1696][1]++,e.residualStyles));cov_18tmdn9r60().s[4528]++;(cov_18tmdn9r60().b[1697][0]++,i!=null)&&(cov_18tmdn9r60().b[1697][1]++,typeof t=="string")&&(cov_18tmdn9r60().b[1697][2]++,Ut(i,t)>=0)&&(cov_18tmdn9r60().b[1697][3]++,n[r+1]=ga(n[r+1]));}function pu(e,t,n,r){cov_18tmdn9r60().f[1381]++;let o=(cov_18tmdn9r60().s[4529]++,e[n+1]),i=(cov_18tmdn9r60().s[4530]++,t===null),s=(cov_18tmdn9r60().s[4531]++,r?(cov_18tmdn9r60().b[1698][0]++,xt(o)):(cov_18tmdn9r60().b[1698][1]++,nn(o))),a=(cov_18tmdn9r60().s[4532]++,!1);cov_18tmdn9r60().s[4533]++;for(;(cov_18tmdn9r60().b[1699][0]++,s!==0)&&((cov_18tmdn9r60().b[1699][1]++,a===!1)||(cov_18tmdn9r60().b[1699][2]++,i));){let c=(cov_18tmdn9r60().s[4534]++,e[s]),l=(cov_18tmdn9r60().s[4535]++,e[s+1]);cov_18tmdn9r60().s[4536]++;(cov_18tmdn9r60().b[1700][0]++,jv(c,t))&&(cov_18tmdn9r60().b[1700][1]++,a=!0,e[s+1]=r?(cov_18tmdn9r60().b[1701][0]++,ga(l)):(cov_18tmdn9r60().b[1701][1]++,ha(l))),s=r?(cov_18tmdn9r60().b[1702][0]++,xt(l)):(cov_18tmdn9r60().b[1702][1]++,nn(l));}cov_18tmdn9r60().s[4537]++;(cov_18tmdn9r60().b[1703][0]++,a)&&(cov_18tmdn9r60().b[1703][1]++,e[n+1]=r?(cov_18tmdn9r60().b[1704][0]++,ha(o)):(cov_18tmdn9r60().b[1704][1]++,ga(o)));}function jv(e,t){cov_18tmdn9r60().f[1382]++;cov_18tmdn9r60().s[4538]++;return(cov_18tmdn9r60().b[1706][0]++,e===null)||(cov_18tmdn9r60().b[1706][1]++,t==null)||(cov_18tmdn9r60().b[1706][2]++,(Array.isArray(e)?(cov_18tmdn9r60().b[1707][0]++,e[1]):(cov_18tmdn9r60().b[1707][1]++,e))===t)?(cov_18tmdn9r60().b[1705][0]++,!0):(cov_18tmdn9r60().b[1705][1]++,(cov_18tmdn9r60().b[1709][0]++,Array.isArray(e))&&(cov_18tmdn9r60().b[1709][1]++,typeof t=="string")?(cov_18tmdn9r60().b[1708][0]++,Ut(e,t)>=0):(cov_18tmdn9r60().b[1708][1]++,!1));}var he=(cov_18tmdn9r60().s[4539]++,{textEnd:0,key:0,keyEnd:0,value:0,valueEnd:0});function Vv(e){cov_18tmdn9r60().f[1383]++;cov_18tmdn9r60().s[4540]++;return e.substring(he.key,he.keyEnd);}function Hv(e){cov_18tmdn9r60().f[1384]++;cov_18tmdn9r60().s[4541]++;return Bv(e),wf(e,Tf(e,0,he.textEnd));}function wf(e,t){cov_18tmdn9r60().f[1385]++;let n=(cov_18tmdn9r60().s[4542]++,he.textEnd);cov_18tmdn9r60().s[4543]++;return n===t?(cov_18tmdn9r60().b[1710][0]++,-1):(cov_18tmdn9r60().b[1710][1]++,t=he.keyEnd=$v(e,he.key=t,n),Tf(e,t,n));}function Bv(e){cov_18tmdn9r60().f[1386]++;cov_18tmdn9r60().s[4544]++;he.key=0,he.keyEnd=0,he.value=0,he.valueEnd=0,he.textEnd=e.length;}function Tf(e,t,n){cov_18tmdn9r60().f[1387]++;cov_18tmdn9r60().s[4545]++;for(;(cov_18tmdn9r60().b[1711][0]++,t32);){cov_18tmdn9r60().s[4549]++;t++;}cov_18tmdn9r60().s[4550]++;return t;}function bf(e,t,n){cov_18tmdn9r60().f[1389]++;cov_18tmdn9r60().s[4551]++;return Mf(e,t,n,!1),bf;}function _f(e,t){cov_18tmdn9r60().f[1390]++;cov_18tmdn9r60().s[4552]++;return Mf(e,t,null,!0),_f;}function Uv(e){cov_18tmdn9r60().f[1391]++;cov_18tmdn9r60().s[4553]++;qv(Kv,Wv,e,!0);}function Wv(e,t){cov_18tmdn9r60().f[1392]++;cov_18tmdn9r60().s[4554]++;for(let n=(cov_18tmdn9r60().s[4555]++,Hv(t));n>=0;n=wf(t,n)){cov_18tmdn9r60().s[4556]++;Zr(e,Vv(t),!0);}}function Mf(e,t,n,r){cov_18tmdn9r60().f[1393]++;let o=(cov_18tmdn9r60().s[4557]++,v()),i=(cov_18tmdn9r60().s[4558]++,j()),s=(cov_18tmdn9r60().s[4559]++,ro(2));cov_18tmdn9r60().s[4560]++;if((cov_18tmdn9r60().b[1714][0]++,i.firstUpdatePass)&&(cov_18tmdn9r60().b[1714][1]++,Sf(i,e,s,r)),(cov_18tmdn9r60().b[1715][0]++,t!==X)&&(cov_18tmdn9r60().b[1715][1]++,ge(o,s,t))){cov_18tmdn9r60().b[1713][0]++;let a=(cov_18tmdn9r60().s[4561]++,i.data[Te()]);cov_18tmdn9r60().s[4562]++;xf(i,a,o,o[O],e,o[s+1]=Xv(t,n),r,s);}else{cov_18tmdn9r60().b[1713][1]++;}}function qv(e,t,n,r){cov_18tmdn9r60().f[1394]++;let o=(cov_18tmdn9r60().s[4563]++,j()),i=(cov_18tmdn9r60().s[4564]++,ro(2));cov_18tmdn9r60().s[4565]++;(cov_18tmdn9r60().b[1716][0]++,o.firstUpdatePass)&&(cov_18tmdn9r60().b[1716][1]++,Sf(o,null,i,r));let s=(cov_18tmdn9r60().s[4566]++,v());cov_18tmdn9r60().s[4567]++;if((cov_18tmdn9r60().b[1718][0]++,n!==X)&&(cov_18tmdn9r60().b[1718][1]++,ge(s,i,n))){cov_18tmdn9r60().b[1717][0]++;let a=(cov_18tmdn9r60().s[4568]++,o.data[Te()]);cov_18tmdn9r60().s[4569]++;if((cov_18tmdn9r60().b[1720][0]++,Af(a,r))&&(cov_18tmdn9r60().b[1720][1]++,!Nf(o,i))){cov_18tmdn9r60().b[1719][0]++;let c=(cov_18tmdn9r60().s[4570]++,r?(cov_18tmdn9r60().b[1721][0]++,a.classesWithoutHost):(cov_18tmdn9r60().b[1721][1]++,a.stylesWithoutHost));cov_18tmdn9r60().s[4571]++;(cov_18tmdn9r60().b[1722][0]++,c!==null)&&(cov_18tmdn9r60().b[1722][1]++,n=Ur(c,(cov_18tmdn9r60().b[1723][0]++,n)||(cov_18tmdn9r60().b[1723][1]++,""))),pa(o,a,s,n,r);}else{cov_18tmdn9r60().b[1719][1]++;cov_18tmdn9r60().s[4572]++;Jv(o,a,s,s[O],s[i+1],s[i+1]=Yv(e,t,n),r,i);}}else{cov_18tmdn9r60().b[1717][1]++;}}function Nf(e,t){cov_18tmdn9r60().f[1395]++;cov_18tmdn9r60().s[4573]++;return t>=e.expandoStartIndex;}function Sf(e,t,n,r){cov_18tmdn9r60().f[1396]++;let o=(cov_18tmdn9r60().s[4574]++,e.data);cov_18tmdn9r60().s[4575]++;if(o[n+1]===null){cov_18tmdn9r60().b[1724][0]++;let i=(cov_18tmdn9r60().s[4576]++,o[Te()]),s=(cov_18tmdn9r60().s[4577]++,Nf(e,n));cov_18tmdn9r60().s[4578]++;(cov_18tmdn9r60().b[1725][0]++,Af(i,r))&&(cov_18tmdn9r60().b[1725][1]++,t===null)&&(cov_18tmdn9r60().b[1725][2]++,!s)&&(cov_18tmdn9r60().b[1725][3]++,t=!1),t=Gv(o,i,t,r),Lv(o,i,t,n,s,r);}else{cov_18tmdn9r60().b[1724][1]++;}}function Gv(e,t,n,r){cov_18tmdn9r60().f[1397]++;let o=(cov_18tmdn9r60().s[4579]++,bl(e)),i=(cov_18tmdn9r60().s[4580]++,r?(cov_18tmdn9r60().b[1726][0]++,t.residualClasses):(cov_18tmdn9r60().b[1726][1]++,t.residualStyles));cov_18tmdn9r60().s[4581]++;if(o===null){cov_18tmdn9r60().b[1727][0]++;cov_18tmdn9r60().s[4582]++;(cov_18tmdn9r60().b[1728][0]++,(r?(cov_18tmdn9r60().b[1729][0]++,t.classBindings):(cov_18tmdn9r60().b[1729][1]++,t.styleBindings))===0)&&(cov_18tmdn9r60().b[1728][1]++,n=Vs(null,e,t,n,r),n=Gn(n,t.attrs,r),i=null);}else{cov_18tmdn9r60().b[1727][1]++;let s=(cov_18tmdn9r60().s[4583]++,t.directiveStylingLast);cov_18tmdn9r60().s[4584]++;if((cov_18tmdn9r60().b[1731][0]++,s===-1)||(cov_18tmdn9r60().b[1731][1]++,e[s]!==o)){cov_18tmdn9r60().b[1730][0]++;cov_18tmdn9r60().s[4585]++;if(n=Vs(o,e,t,n,r),i===null){cov_18tmdn9r60().b[1732][0]++;let c=(cov_18tmdn9r60().s[4586]++,zv(e,t,r));cov_18tmdn9r60().s[4587]++;(cov_18tmdn9r60().b[1733][0]++,c!==void 0)&&(cov_18tmdn9r60().b[1733][1]++,Array.isArray(c))&&(cov_18tmdn9r60().b[1733][2]++,c=Vs(null,e,t,c[1],r),c=Gn(c,t.attrs,r),Qv(e,t,r,c));}else{cov_18tmdn9r60().b[1732][1]++;cov_18tmdn9r60().s[4588]++;i=Zv(e,t,r);}}else{cov_18tmdn9r60().b[1730][1]++;}}cov_18tmdn9r60().s[4589]++;return(cov_18tmdn9r60().b[1734][0]++,i!==void 0)&&(cov_18tmdn9r60().b[1734][1]++,r?(cov_18tmdn9r60().b[1735][0]++,t.residualClasses=i):(cov_18tmdn9r60().b[1735][1]++,t.residualStyles=i)),n;}function zv(e,t,n){cov_18tmdn9r60().f[1398]++;let r=(cov_18tmdn9r60().s[4590]++,n?(cov_18tmdn9r60().b[1736][0]++,t.classBindings):(cov_18tmdn9r60().b[1736][1]++,t.styleBindings));cov_18tmdn9r60().s[4591]++;if(nn(r)!==0){cov_18tmdn9r60().b[1737][0]++;cov_18tmdn9r60().s[4592]++;return e[xt(r)];}else{cov_18tmdn9r60().b[1737][1]++;}}function Qv(e,t,n,r){cov_18tmdn9r60().f[1399]++;let o=(cov_18tmdn9r60().s[4593]++,n?(cov_18tmdn9r60().b[1738][0]++,t.classBindings):(cov_18tmdn9r60().b[1738][1]++,t.styleBindings));cov_18tmdn9r60().s[4594]++;e[xt(o)]=r;}function Zv(e,t,n){cov_18tmdn9r60().f[1400]++;let r,o=(cov_18tmdn9r60().s[4595]++,t.directiveEnd);cov_18tmdn9r60().s[4596]++;for(let i=(cov_18tmdn9r60().s[4597]++,1+t.directiveStylingLast);i0;){let c=(cov_18tmdn9r60().s[4654]++,e[o]),l=(cov_18tmdn9r60().s[4655]++,Array.isArray(c)),u=(cov_18tmdn9r60().s[4656]++,l?(cov_18tmdn9r60().b[1775][0]++,c[1]):(cov_18tmdn9r60().b[1775][1]++,c)),d=(cov_18tmdn9r60().s[4657]++,u===null),p=(cov_18tmdn9r60().s[4658]++,n[o+1]);cov_18tmdn9r60().s[4659]++;(cov_18tmdn9r60().b[1776][0]++,p===X)&&(cov_18tmdn9r60().b[1776][1]++,p=d?(cov_18tmdn9r60().b[1777][0]++,K):(cov_18tmdn9r60().b[1777][1]++,void 0));let f=(cov_18tmdn9r60().s[4660]++,d?(cov_18tmdn9r60().b[1778][0]++,Yr(p,r)):(cov_18tmdn9r60().b[1778][1]++,u===r?(cov_18tmdn9r60().b[1779][0]++,p):(cov_18tmdn9r60().b[1779][1]++,void 0)));cov_18tmdn9r60().s[4661]++;if((cov_18tmdn9r60().b[1781][0]++,l)&&(cov_18tmdn9r60().b[1781][1]++,!Bo(f))&&(cov_18tmdn9r60().b[1781][2]++,f=Yr(c,r)),(cov_18tmdn9r60().b[1782][0]++,Bo(f))&&(cov_18tmdn9r60().b[1782][1]++,a=f,s)){cov_18tmdn9r60().b[1780][0]++;cov_18tmdn9r60().s[4662]++;return a;}else{cov_18tmdn9r60().b[1780][1]++;}let h=(cov_18tmdn9r60().s[4663]++,e[o+1]);cov_18tmdn9r60().s[4664]++;o=s?(cov_18tmdn9r60().b[1783][0]++,xt(h)):(cov_18tmdn9r60().b[1783][1]++,nn(h));}cov_18tmdn9r60().s[4665]++;if(t!==null){cov_18tmdn9r60().b[1784][0]++;let c=(cov_18tmdn9r60().s[4666]++,i?(cov_18tmdn9r60().b[1785][0]++,t.residualClasses):(cov_18tmdn9r60().b[1785][1]++,t.residualStyles));cov_18tmdn9r60().s[4667]++;(cov_18tmdn9r60().b[1786][0]++,c!=null)&&(cov_18tmdn9r60().b[1786][1]++,a=Yr(c,r));}else{cov_18tmdn9r60().b[1784][1]++;}cov_18tmdn9r60().s[4668]++;return a;}function Bo(e){cov_18tmdn9r60().f[1408]++;cov_18tmdn9r60().s[4669]++;return e!==void 0;}function Xv(e,t){cov_18tmdn9r60().f[1409]++;cov_18tmdn9r60().s[4670]++;return(cov_18tmdn9r60().b[1787][0]++,e==null)||(cov_18tmdn9r60().b[1787][1]++,e==="")||(cov_18tmdn9r60().b[1787][2]++,typeof t=="string"?(cov_18tmdn9r60().b[1788][0]++,e=e+t):(cov_18tmdn9r60().b[1788][1]++,(cov_18tmdn9r60().b[1789][0]++,typeof e=="object")&&(cov_18tmdn9r60().b[1789][1]++,e=Tn(Zn(e))))),e;}function Af(e,t){cov_18tmdn9r60().f[1410]++;cov_18tmdn9r60().s[4671]++;return(e.flags&(t?(cov_18tmdn9r60().b[1790][0]++,8):(cov_18tmdn9r60().b[1790][1]++,16)))!==0;}function eE(e,t=(cov_18tmdn9r60().b[1791][0]++,"")){cov_18tmdn9r60().f[1411]++;let n=(cov_18tmdn9r60().s[4672]++,v()),r=(cov_18tmdn9r60().s[4673]++,j()),o=(cov_18tmdn9r60().s[4674]++,e+P),i=(cov_18tmdn9r60().s[4675]++,r.firstCreatePass?(cov_18tmdn9r60().b[1792][0]++,sn(r,o,1,t,null)):(cov_18tmdn9r60().b[1792][1]++,r.data[o])),s=(cov_18tmdn9r60().s[4676]++,tE(r,n,i,t));cov_18tmdn9r60().s[4677]++;n[o]=s,(cov_18tmdn9r60().b[1793][0]++,lo())&&(cov_18tmdn9r60().b[1793][1]++,Ma(r,n,s,i)),Qt(i,!1);}cov_18tmdn9r60().s[4678]++;var tE=(e,t,n,r)=>{cov_18tmdn9r60().f[1412]++;cov_18tmdn9r60().s[4679]++;return uo(!0),Mg(t[O],r);};function Rf(e,t,n,r=(cov_18tmdn9r60().b[1794][0]++,"")){cov_18tmdn9r60().f[1413]++;cov_18tmdn9r60().s[4680]++;return ge(e,Tt(),n)?(cov_18tmdn9r60().b[1795][0]++,t+$t(n)+r):(cov_18tmdn9r60().b[1795][1]++,X);}function nE(e,t,n,r,o,i=(cov_18tmdn9r60().b[1796][0]++,"")){cov_18tmdn9r60().f[1414]++;let s=(cov_18tmdn9r60().s[4681]++,Il()),a=(cov_18tmdn9r60().s[4682]++,Ud(e,s,n,o));cov_18tmdn9r60().s[4683]++;return ro(2),a?(cov_18tmdn9r60().b[1797][0]++,t+$t(n)+r+$t(o)+i):(cov_18tmdn9r60().b[1797][1]++,X);}function kf(e){cov_18tmdn9r60().f[1415]++;cov_18tmdn9r60().s[4684]++;return Ua("",e),kf;}function Ua(e,t,n){cov_18tmdn9r60().f[1416]++;let r=(cov_18tmdn9r60().s[4685]++,v()),o=(cov_18tmdn9r60().s[4686]++,Rf(r,e,t,n));cov_18tmdn9r60().s[4687]++;return(cov_18tmdn9r60().b[1798][0]++,o!==X)&&(cov_18tmdn9r60().b[1798][1]++,Pf(r,Te(),o)),Ua;}function Of(e,t,n,r,o){cov_18tmdn9r60().f[1417]++;let i=(cov_18tmdn9r60().s[4688]++,v()),s=(cov_18tmdn9r60().s[4689]++,nE(i,e,t,n,r,o));cov_18tmdn9r60().s[4690]++;return(cov_18tmdn9r60().b[1799][0]++,s!==X)&&(cov_18tmdn9r60().b[1799][1]++,Pf(i,Te(),s)),Of;}function Pf(e,t,n){cov_18tmdn9r60().f[1418]++;let r=(cov_18tmdn9r60().s[4691]++,is(t,e));cov_18tmdn9r60().s[4692]++;Ng(e[O],r,n);}function rE(e,t,n=(cov_18tmdn9r60().b[1800][0]++,"")){cov_18tmdn9r60().f[1419]++;cov_18tmdn9r60().s[4693]++;return Rf(v(),e,t,n);}function gu(e,t,n){cov_18tmdn9r60().f[1420]++;let r=(cov_18tmdn9r60().s[4694]++,j());cov_18tmdn9r60().s[4695]++;(cov_18tmdn9r60().b[1801][0]++,r.firstCreatePass)&&(cov_18tmdn9r60().b[1801][1]++,Lf(t,r.data,r.blueprint,we(e),n));}function Lf(e,t,n,r,o){cov_18tmdn9r60().f[1421]++;cov_18tmdn9r60().s[4696]++;if(e=q(e),Array.isArray(e)){cov_18tmdn9r60().b[1802][0]++;cov_18tmdn9r60().s[4697]++;for(let i=(cov_18tmdn9r60().s[4698]++,0);i>20);cov_18tmdn9r60().s[4708]++;if((cov_18tmdn9r60().b[1805][0]++,ht(e))||(cov_18tmdn9r60().b[1805][1]++,!e.multi)){cov_18tmdn9r60().b[1804][0]++;let f=(cov_18tmdn9r60().s[4709]++,new Mt(l,o,Xn,null)),h=(cov_18tmdn9r60().s[4710]++,Bs(c,t,o?(cov_18tmdn9r60().b[1806][0]++,u):(cov_18tmdn9r60().b[1806][1]++,u+p),d));cov_18tmdn9r60().s[4711]++;h===-1?(cov_18tmdn9r60().b[1807][0]++,Us(bo(a,s),i,c),Hs(i,e,t.length),t.push(c),a.directiveStart++,a.directiveEnd++,(cov_18tmdn9r60().b[1808][0]++,o)&&(cov_18tmdn9r60().b[1808][1]++,a.providerIndexes+=1048576),n.push(f),s.push(f)):(cov_18tmdn9r60().b[1807][1]++,n[h]=f,s[h]=f);}else{cov_18tmdn9r60().b[1804][1]++;let f=(cov_18tmdn9r60().s[4712]++,Bs(c,t,u+p,d)),h=(cov_18tmdn9r60().s[4713]++,Bs(c,t,u,u+p)),D=(cov_18tmdn9r60().s[4714]++,(cov_18tmdn9r60().b[1809][0]++,f>=0)&&(cov_18tmdn9r60().b[1809][1]++,n[f])),A=(cov_18tmdn9r60().s[4715]++,(cov_18tmdn9r60().b[1810][0]++,h>=0)&&(cov_18tmdn9r60().b[1810][1]++,n[h]));cov_18tmdn9r60().s[4716]++;if((cov_18tmdn9r60().b[1812][0]++,o)&&(cov_18tmdn9r60().b[1812][1]++,!A)||(cov_18tmdn9r60().b[1812][2]++,!o)&&(cov_18tmdn9r60().b[1812][3]++,!D)){cov_18tmdn9r60().b[1811][0]++;cov_18tmdn9r60().s[4717]++;Us(bo(a,s),i,c);let R=(cov_18tmdn9r60().s[4718]++,sE(o?(cov_18tmdn9r60().b[1813][0]++,iE):(cov_18tmdn9r60().b[1813][1]++,oE),n.length,o,r,l,e));cov_18tmdn9r60().s[4719]++;(cov_18tmdn9r60().b[1814][0]++,!o)&&(cov_18tmdn9r60().b[1814][1]++,A)&&(cov_18tmdn9r60().b[1814][2]++,n[h].providerFactory=R),Hs(i,e,t.length,0),t.push(c),a.directiveStart++,a.directiveEnd++,(cov_18tmdn9r60().b[1815][0]++,o)&&(cov_18tmdn9r60().b[1815][1]++,a.providerIndexes+=1048576),n.push(R),s.push(R);}else{cov_18tmdn9r60().b[1811][1]++;let R=(cov_18tmdn9r60().s[4720]++,Ff(n[o?(cov_18tmdn9r60().b[1816][0]++,h):(cov_18tmdn9r60().b[1816][1]++,f)],l,(cov_18tmdn9r60().b[1817][0]++,!o)&&(cov_18tmdn9r60().b[1817][1]++,r)));cov_18tmdn9r60().s[4721]++;Hs(i,e,f>-1?(cov_18tmdn9r60().b[1818][0]++,f):(cov_18tmdn9r60().b[1818][1]++,h),R);}cov_18tmdn9r60().s[4722]++;(cov_18tmdn9r60().b[1819][0]++,!o)&&(cov_18tmdn9r60().b[1819][1]++,r)&&(cov_18tmdn9r60().b[1819][2]++,A)&&(cov_18tmdn9r60().b[1819][3]++,n[h].componentProviders++);}}}function Hs(e,t,n,r){cov_18tmdn9r60().f[1422]++;let o=(cov_18tmdn9r60().s[4723]++,ht(t)),i=(cov_18tmdn9r60().s[4724]++,il(t));cov_18tmdn9r60().s[4725]++;if((cov_18tmdn9r60().b[1821][0]++,o)||(cov_18tmdn9r60().b[1821][1]++,i)){cov_18tmdn9r60().b[1820][0]++;let c=(cov_18tmdn9r60().s[4726]++,(i?(cov_18tmdn9r60().b[1822][0]++,q(t.useClass)):(cov_18tmdn9r60().b[1822][1]++,t)).prototype.ngOnDestroy);cov_18tmdn9r60().s[4727]++;if(c){cov_18tmdn9r60().b[1823][0]++;let l=(cov_18tmdn9r60().s[4728]++,(cov_18tmdn9r60().b[1824][0]++,e.destroyHooks)||(cov_18tmdn9r60().b[1824][1]++,e.destroyHooks=[]));cov_18tmdn9r60().s[4729]++;if((cov_18tmdn9r60().b[1826][0]++,!o)&&(cov_18tmdn9r60().b[1826][1]++,t.multi)){cov_18tmdn9r60().b[1825][0]++;let u=(cov_18tmdn9r60().s[4730]++,l.indexOf(n));cov_18tmdn9r60().s[4731]++;u===-1?(cov_18tmdn9r60().b[1827][0]++,l.push(n,[r,c])):(cov_18tmdn9r60().b[1827][1]++,l[u+1].push(r,c));}else{cov_18tmdn9r60().b[1825][1]++;cov_18tmdn9r60().s[4732]++;l.push(n,c);}}else{cov_18tmdn9r60().b[1823][1]++;}}else{cov_18tmdn9r60().b[1820][1]++;}}function Ff(e,t,n){cov_18tmdn9r60().f[1423]++;cov_18tmdn9r60().s[4733]++;return(cov_18tmdn9r60().b[1828][0]++,n)&&(cov_18tmdn9r60().b[1828][1]++,e.componentProviders++),e.multi.push(t)-1;}function Bs(e,t,n,r){cov_18tmdn9r60().f[1424]++;cov_18tmdn9r60().s[4734]++;for(let o=(cov_18tmdn9r60().s[4735]++,n);o{cov_18tmdn9r60().f[1430]++;cov_18tmdn9r60().s[4758]++;n.providersResolver=(r,o)=>{cov_18tmdn9r60().f[1431]++;cov_18tmdn9r60().s[4759]++;return gu(r,o?(cov_18tmdn9r60().b[1832][0]++,o(e)):(cov_18tmdn9r60().b[1832][1]++,e),!1);},(cov_18tmdn9r60().b[1833][0]++,t)&&(cov_18tmdn9r60().b[1833][1]++,n.viewProvidersResolver=(r,o)=>{cov_18tmdn9r60().f[1432]++;cov_18tmdn9r60().s[4760]++;return gu(r,o?(cov_18tmdn9r60().b[1834][0]++,o(t)):(cov_18tmdn9r60().b[1834][1]++,t),!0);});};}function cE(e,t){cov_18tmdn9r60().f[1433]++;let n=(cov_18tmdn9r60().s[4761]++,Rn()+e),r=(cov_18tmdn9r60().s[4762]++,v());cov_18tmdn9r60().s[4763]++;return r[n]===X?(cov_18tmdn9r60().b[1835][0]++,Oa(r,n,t())):(cov_18tmdn9r60().b[1835][1]++,py(r,n));}function lE(e,t,n,r){cov_18tmdn9r60().f[1434]++;cov_18tmdn9r60().s[4764]++;return Vf(v(),Rn(),e,t,n,r);}function jf(e,t){cov_18tmdn9r60().f[1435]++;let n=(cov_18tmdn9r60().s[4765]++,e[t]);cov_18tmdn9r60().s[4766]++;return n===X?(cov_18tmdn9r60().b[1836][0]++,void 0):(cov_18tmdn9r60().b[1836][1]++,n);}function uE(e,t,n,r,o,i){cov_18tmdn9r60().f[1436]++;let s=(cov_18tmdn9r60().s[4767]++,t+n);cov_18tmdn9r60().s[4768]++;return ge(e,s,o)?(cov_18tmdn9r60().b[1837][0]++,Oa(e,s+1,i?(cov_18tmdn9r60().b[1838][0]++,r.call(i,o)):(cov_18tmdn9r60().b[1838][1]++,r(o)))):(cov_18tmdn9r60().b[1837][1]++,jf(e,s+1));}function Vf(e,t,n,r,o,i,s){cov_18tmdn9r60().f[1437]++;let a=(cov_18tmdn9r60().s[4769]++,t+n);cov_18tmdn9r60().s[4770]++;return Ud(e,a,o,i)?(cov_18tmdn9r60().b[1839][0]++,Oa(e,a+2,s?(cov_18tmdn9r60().b[1840][0]++,r.call(s,o,i)):(cov_18tmdn9r60().b[1840][1]++,r(o,i)))):(cov_18tmdn9r60().b[1839][1]++,jf(e,a+2));}function dE(e,t){cov_18tmdn9r60().f[1438]++;let n=(cov_18tmdn9r60().s[4771]++,j()),r,o=(cov_18tmdn9r60().s[4772]++,e+P);cov_18tmdn9r60().s[4773]++;n.firstCreatePass?(cov_18tmdn9r60().b[1841][0]++,r=fE(t,n.pipeRegistry),n.data[o]=r,(cov_18tmdn9r60().b[1842][0]++,r.onDestroy)&&(cov_18tmdn9r60().b[1842][1]++,(n.destroyHooks??=[]).push(o,r.onDestroy))):(cov_18tmdn9r60().b[1841][1]++,r=n.data[o]);let i=(cov_18tmdn9r60().s[4774]++,(cov_18tmdn9r60().b[1843][0]++,r.factory)||(cov_18tmdn9r60().b[1843][1]++,r.factory=qe(r.type,!0))),s,a=(cov_18tmdn9r60().s[4775]++,Y(Xn));cov_18tmdn9r60().s[4776]++;try{let c=(cov_18tmdn9r60().s[4777]++,To(!1)),l=(cov_18tmdn9r60().s[4778]++,i());cov_18tmdn9r60().s[4779]++;return To(c),ss(n,v(),o,l),l;}finally{cov_18tmdn9r60().s[4780]++;Y(a);}}function fE(e,t){cov_18tmdn9r60().f[1439]++;cov_18tmdn9r60().s[4781]++;if(t){cov_18tmdn9r60().b[1844][0]++;cov_18tmdn9r60().s[4782]++;for(let n=(cov_18tmdn9r60().s[4783]++,t.length-1);n>=0;n--){let r=(cov_18tmdn9r60().s[4784]++,t[n]);cov_18tmdn9r60().s[4785]++;if(e===r.name){cov_18tmdn9r60().b[1845][0]++;cov_18tmdn9r60().s[4786]++;return r;}else{cov_18tmdn9r60().b[1845][1]++;}}}else{cov_18tmdn9r60().b[1844][1]++;}}function pE(e,t,n){cov_18tmdn9r60().f[1440]++;let r=(cov_18tmdn9r60().s[4787]++,e+P),o=(cov_18tmdn9r60().s[4788]++,v()),i=(cov_18tmdn9r60().s[4789]++,eo(o,r));cov_18tmdn9r60().s[4790]++;return Hf(o,r)?(cov_18tmdn9r60().b[1846][0]++,uE(o,Rn(),t,i.transform,n,i)):(cov_18tmdn9r60().b[1846][1]++,i.transform(n));}function hE(e,t,n,r){cov_18tmdn9r60().f[1441]++;let o=(cov_18tmdn9r60().s[4791]++,e+P),i=(cov_18tmdn9r60().s[4792]++,v()),s=(cov_18tmdn9r60().s[4793]++,eo(i,o));cov_18tmdn9r60().s[4794]++;return Hf(i,o)?(cov_18tmdn9r60().b[1847][0]++,Vf(i,Rn(),t,s.transform,n,r,s)):(cov_18tmdn9r60().b[1847][1]++,s.transform(n,r));}function Hf(e,t){cov_18tmdn9r60().f[1442]++;cov_18tmdn9r60().s[4795]++;return e[y].data[t].pure;}function gE(e,t){cov_18tmdn9r60().f[1443]++;cov_18tmdn9r60().s[4796]++;return Yo(e,t);}cov_18tmdn9r60().s[4797]++;var $o=class{ngModuleFactory;componentFactories;constructor(t,n){cov_18tmdn9r60().f[1444]++;cov_18tmdn9r60().s[4798]++;this.ngModuleFactory=t,this.componentFactories=n;}},mE=(cov_18tmdn9r60().s[4799]++,(()=>{cov_18tmdn9r60().f[1445]++;class e{compileModuleSync(n){cov_18tmdn9r60().f[1446]++;cov_18tmdn9r60().s[4800]++;return new Fo(n);}compileModuleAsync(n){cov_18tmdn9r60().f[1447]++;cov_18tmdn9r60().s[4801]++;return Promise.resolve(this.compileModuleSync(n));}compileModuleAndAllComponentsSync(n){cov_18tmdn9r60().f[1448]++;let r=(cov_18tmdn9r60().s[4802]++,this.compileModuleSync(n)),o=(cov_18tmdn9r60().s[4803]++,Ui(n)),i=(cov_18tmdn9r60().s[4804]++,td(o.declarations).reduce((s,a)=>{cov_18tmdn9r60().f[1449]++;let c=(cov_18tmdn9r60().s[4805]++,Re(a));cov_18tmdn9r60().s[4806]++;return(cov_18tmdn9r60().b[1848][0]++,c)&&(cov_18tmdn9r60().b[1848][1]++,s.push(new St(c))),s;},[]));cov_18tmdn9r60().s[4807]++;return new $o(r,i);}compileModuleAndAllComponentsAsync(n){cov_18tmdn9r60().f[1450]++;cov_18tmdn9r60().s[4808]++;return Promise.resolve(this.compileModuleAndAllComponentsSync(n));}clearCache(){cov_18tmdn9r60().f[1451]++;}clearCacheFor(n){cov_18tmdn9r60().f[1452]++;}getModuleId(n){cov_18tmdn9r60().f[1453]++;}static ɵfac=(cov_18tmdn9r60().s[4809]++,function(r){cov_18tmdn9r60().f[1454]++;cov_18tmdn9r60().s[4810]++;return new((cov_18tmdn9r60().b[1849][0]++,r)||(cov_18tmdn9r60().b[1849][1]++,e))();});static ɵprov=(cov_18tmdn9r60().s[4811]++,V({token:e,factory:e.ɵfac,providedIn:"root"}));}cov_18tmdn9r60().s[4812]++;return e;})());var Bf=(cov_18tmdn9r60().s[4813]++,(()=>{cov_18tmdn9r60().f[1455]++;class e{applicationErrorHandler=(cov_18tmdn9r60().s[4814]++,E(et));appRef=(cov_18tmdn9r60().s[4815]++,E(Xo));taskService=(cov_18tmdn9r60().s[4816]++,E(bt));ngZone=(cov_18tmdn9r60().s[4817]++,E(De));zonelessEnabled=(cov_18tmdn9r60().s[4818]++,E(On));tracing=(cov_18tmdn9r60().s[4819]++,E(on,{optional:!0}));zoneIsDefined=(cov_18tmdn9r60().s[4820]++,(cov_18tmdn9r60().b[1850][0]++,typeof Zone<"u")&&(cov_18tmdn9r60().b[1850][1]++,!!Zone.root.run));schedulerTickApplyArgs=(cov_18tmdn9r60().s[4821]++,[{data:{__scheduler_tick__:!0}}]);subscriptions=(cov_18tmdn9r60().s[4822]++,new U());angularZoneId=(cov_18tmdn9r60().s[4823]++,this.zoneIsDefined?(cov_18tmdn9r60().b[1851][0]++,this.ngZone._inner?.get(Dn)):(cov_18tmdn9r60().b[1851][1]++,null));scheduleInRootZone=(cov_18tmdn9r60().s[4824]++,(cov_18tmdn9r60().b[1852][0]++,!this.zonelessEnabled)&&(cov_18tmdn9r60().b[1852][1]++,this.zoneIsDefined)&&((cov_18tmdn9r60().b[1852][2]++,E(Ss,{optional:!0}))??(cov_18tmdn9r60().b[1852][3]++,!1)));cancelScheduledCallback=(cov_18tmdn9r60().s[4825]++,null);useMicrotaskScheduler=(cov_18tmdn9r60().s[4826]++,!1);runningTick=(cov_18tmdn9r60().s[4827]++,!1);pendingRenderTaskId=(cov_18tmdn9r60().s[4828]++,null);constructor(){cov_18tmdn9r60().f[1456]++;cov_18tmdn9r60().s[4829]++;this.subscriptions.add(this.appRef.afterTick.subscribe(()=>{cov_18tmdn9r60().f[1457]++;let n=(cov_18tmdn9r60().s[4830]++,this.taskService.add());cov_18tmdn9r60().s[4831]++;if((cov_18tmdn9r60().b[1854][0]++,!this.runningTick)&&(cov_18tmdn9r60().b[1854][1]++,this.cleanup(),(cov_18tmdn9r60().b[1855][0]++,!this.zonelessEnabled)||(cov_18tmdn9r60().b[1855][1]++,this.appRef.includeAllTestViews))){cov_18tmdn9r60().b[1853][0]++;cov_18tmdn9r60().s[4832]++;this.taskService.remove(n);cov_18tmdn9r60().s[4833]++;return;}else{cov_18tmdn9r60().b[1853][1]++;}cov_18tmdn9r60().s[4834]++;this.switchToMicrotaskScheduler(),this.taskService.remove(n);})),this.subscriptions.add(this.ngZone.onUnstable.subscribe(()=>{cov_18tmdn9r60().f[1458]++;cov_18tmdn9r60().s[4835]++;(cov_18tmdn9r60().b[1856][0]++,this.runningTick)||(cov_18tmdn9r60().b[1856][1]++,this.cleanup());}));}switchToMicrotaskScheduler(){cov_18tmdn9r60().f[1459]++;cov_18tmdn9r60().s[4836]++;this.ngZone.runOutsideAngular(()=>{cov_18tmdn9r60().f[1460]++;let n=(cov_18tmdn9r60().s[4837]++,this.taskService.add());cov_18tmdn9r60().s[4838]++;this.useMicrotaskScheduler=!0,queueMicrotask(()=>{cov_18tmdn9r60().f[1461]++;cov_18tmdn9r60().s[4839]++;this.useMicrotaskScheduler=!1,this.taskService.remove(n);});});}notify(n){cov_18tmdn9r60().f[1462]++;cov_18tmdn9r60().s[4840]++;if((cov_18tmdn9r60().b[1858][0]++,!this.zonelessEnabled)&&(cov_18tmdn9r60().b[1858][1]++,n===5)){cov_18tmdn9r60().b[1857][0]++;cov_18tmdn9r60().s[4841]++;return;}else{cov_18tmdn9r60().b[1857][1]++;}cov_18tmdn9r60().s[4842]++;switch(n){case 0:cov_18tmdn9r60().b[1859][0]++;{cov_18tmdn9r60().s[4843]++;this.appRef.dirtyFlags|=2;cov_18tmdn9r60().s[4844]++;break;}case 3:cov_18tmdn9r60().b[1859][1]++;case 2:cov_18tmdn9r60().b[1859][2]++;case 4:cov_18tmdn9r60().b[1859][3]++;case 5:cov_18tmdn9r60().b[1859][4]++;case 1:cov_18tmdn9r60().b[1859][5]++;{cov_18tmdn9r60().s[4845]++;this.appRef.dirtyFlags|=4;cov_18tmdn9r60().s[4846]++;break;}case 6:cov_18tmdn9r60().b[1859][6]++;{cov_18tmdn9r60().s[4847]++;this.appRef.dirtyFlags|=2;cov_18tmdn9r60().s[4848]++;break;}case 12:cov_18tmdn9r60().b[1859][7]++;{cov_18tmdn9r60().s[4849]++;this.appRef.dirtyFlags|=16;cov_18tmdn9r60().s[4850]++;break;}case 13:cov_18tmdn9r60().b[1859][8]++;{cov_18tmdn9r60().s[4851]++;this.appRef.dirtyFlags|=2;cov_18tmdn9r60().s[4852]++;break;}case 11:cov_18tmdn9r60().b[1859][9]++;cov_18tmdn9r60().s[4853]++;break;default:cov_18tmdn9r60().b[1859][10]++;cov_18tmdn9r60().s[4854]++;this.appRef.dirtyFlags|=8;}cov_18tmdn9r60().s[4855]++;if(this.appRef.tracingSnapshot=(cov_18tmdn9r60().b[1861][0]++,this.tracing?.snapshot(this.appRef.tracingSnapshot))??(cov_18tmdn9r60().b[1861][1]++,null),!this.shouldScheduleTick()){cov_18tmdn9r60().b[1860][0]++;cov_18tmdn9r60().s[4856]++;return;}else{cov_18tmdn9r60().b[1860][1]++;}let r=(cov_18tmdn9r60().s[4857]++,this.useMicrotaskScheduler?(cov_18tmdn9r60().b[1862][0]++,Ll):(cov_18tmdn9r60().b[1862][1]++,bs));cov_18tmdn9r60().s[4858]++;this.pendingRenderTaskId=this.taskService.add(),this.scheduleInRootZone?(cov_18tmdn9r60().b[1863][0]++,this.cancelScheduledCallback=Zone.root.run(()=>{cov_18tmdn9r60().f[1463]++;cov_18tmdn9r60().s[4859]++;return r(()=>{cov_18tmdn9r60().f[1464]++;cov_18tmdn9r60().s[4860]++;return this.tick();});})):(cov_18tmdn9r60().b[1863][1]++,this.cancelScheduledCallback=this.ngZone.runOutsideAngular(()=>{cov_18tmdn9r60().f[1465]++;cov_18tmdn9r60().s[4861]++;return r(()=>{cov_18tmdn9r60().f[1466]++;cov_18tmdn9r60().s[4862]++;return this.tick();});}));}shouldScheduleTick(){cov_18tmdn9r60().f[1467]++;cov_18tmdn9r60().s[4863]++;return!((cov_18tmdn9r60().b[1864][0]++,this.appRef.destroyed)||(cov_18tmdn9r60().b[1864][1]++,this.pendingRenderTaskId!==null)||(cov_18tmdn9r60().b[1864][2]++,this.runningTick)||(cov_18tmdn9r60().b[1864][3]++,this.appRef._runningTick)||(cov_18tmdn9r60().b[1864][4]++,!this.zonelessEnabled)&&(cov_18tmdn9r60().b[1864][5]++,this.zoneIsDefined)&&(cov_18tmdn9r60().b[1864][6]++,Zone.current.get(Dn+this.angularZoneId)));}tick(){cov_18tmdn9r60().f[1468]++;cov_18tmdn9r60().s[4864]++;if((cov_18tmdn9r60().b[1866][0]++,this.runningTick)||(cov_18tmdn9r60().b[1866][1]++,this.appRef.destroyed)){cov_18tmdn9r60().b[1865][0]++;cov_18tmdn9r60().s[4865]++;return;}else{cov_18tmdn9r60().b[1865][1]++;}cov_18tmdn9r60().s[4866]++;if(this.appRef.dirtyFlags===0){cov_18tmdn9r60().b[1867][0]++;cov_18tmdn9r60().s[4867]++;this.cleanup();cov_18tmdn9r60().s[4868]++;return;}else{cov_18tmdn9r60().b[1867][1]++;}cov_18tmdn9r60().s[4869]++;(cov_18tmdn9r60().b[1868][0]++,!this.zonelessEnabled)&&(cov_18tmdn9r60().b[1868][1]++,this.appRef.dirtyFlags&7)&&(cov_18tmdn9r60().b[1868][2]++,this.appRef.dirtyFlags|=1);let n=(cov_18tmdn9r60().s[4870]++,this.taskService.add());cov_18tmdn9r60().s[4871]++;try{cov_18tmdn9r60().s[4872]++;this.ngZone.run(()=>{cov_18tmdn9r60().f[1469]++;cov_18tmdn9r60().s[4873]++;this.runningTick=!0,this.appRef._tick();},void 0,this.schedulerTickApplyArgs);}catch(r){cov_18tmdn9r60().s[4874]++;this.applicationErrorHandler(r);}finally{cov_18tmdn9r60().s[4875]++;this.taskService.remove(n),this.cleanup();}}ngOnDestroy(){cov_18tmdn9r60().f[1470]++;cov_18tmdn9r60().s[4876]++;this.subscriptions.unsubscribe(),this.cleanup();}cleanup(){cov_18tmdn9r60().f[1471]++;cov_18tmdn9r60().s[4877]++;if(this.runningTick=!1,this.cancelScheduledCallback?.(),this.cancelScheduledCallback=null,this.pendingRenderTaskId!==null){cov_18tmdn9r60().b[1869][0]++;let n=(cov_18tmdn9r60().s[4878]++,this.pendingRenderTaskId);cov_18tmdn9r60().s[4879]++;this.pendingRenderTaskId=null,this.taskService.remove(n);}else{cov_18tmdn9r60().b[1869][1]++;}}static ɵfac=(cov_18tmdn9r60().s[4880]++,function(r){cov_18tmdn9r60().f[1472]++;cov_18tmdn9r60().s[4881]++;return new((cov_18tmdn9r60().b[1870][0]++,r)||(cov_18tmdn9r60().b[1870][1]++,e))();});static ɵprov=(cov_18tmdn9r60().s[4882]++,V({token:e,factory:e.ɵfac,providedIn:"root"}));}cov_18tmdn9r60().s[4883]++;return e;})());function $f(){cov_18tmdn9r60().f[1473]++;cov_18tmdn9r60().s[4884]++;return[{provide:Ae,useExisting:Bf},{provide:De,useClass:Cn},{provide:On,useValue:!0}];}function yE(){cov_18tmdn9r60().f[1474]++;cov_18tmdn9r60().s[4885]++;return(cov_18tmdn9r60().b[1871][0]++,typeof $localize<"u")&&(cov_18tmdn9r60().b[1871][1]++,$localize.locale)||(cov_18tmdn9r60().b[1871][2]++,er);}var Wa=(cov_18tmdn9r60().s[4886]++,new N("",{factory:()=>{cov_18tmdn9r60().f[1475]++;cov_18tmdn9r60().s[4887]++;return(cov_18tmdn9r60().b[1872][0]++,E(Wa,{optional:!0,skipSelf:!0}))||(cov_18tmdn9r60().b[1872][1]++,yE());}}));cov_18tmdn9r60().s[4888]++;var ei=class{destroyed=(cov_18tmdn9r60().s[4889]++,!1);listeners=(cov_18tmdn9r60().s[4890]++,null);errorHandler=(cov_18tmdn9r60().s[4891]++,E(xe,{optional:!0}));destroyRef=(cov_18tmdn9r60().s[4892]++,E(Fe));constructor(){cov_18tmdn9r60().f[1476]++;cov_18tmdn9r60().s[4893]++;this.destroyRef.onDestroy(()=>{cov_18tmdn9r60().f[1477]++;cov_18tmdn9r60().s[4894]++;this.destroyed=!0,this.listeners=null;});}subscribe(t){cov_18tmdn9r60().f[1478]++;cov_18tmdn9r60().s[4895]++;if(this.destroyed){cov_18tmdn9r60().b[1873][0]++;cov_18tmdn9r60().s[4896]++;throw new T(953,!1);}else{cov_18tmdn9r60().b[1873][1]++;}cov_18tmdn9r60().s[4897]++;return(this.listeners??=[]).push(t),{unsubscribe:()=>{cov_18tmdn9r60().f[1479]++;let n=(cov_18tmdn9r60().s[4898]++,this.listeners?.indexOf(t));cov_18tmdn9r60().s[4899]++;(cov_18tmdn9r60().b[1874][0]++,n!==void 0)&&(cov_18tmdn9r60().b[1874][1]++,n!==-1)&&(cov_18tmdn9r60().b[1874][2]++,this.listeners?.splice(n,1));}};}emit(t){cov_18tmdn9r60().f[1480]++;cov_18tmdn9r60().s[4900]++;if(this.destroyed){cov_18tmdn9r60().b[1875][0]++;cov_18tmdn9r60().s[4901]++;console.warn(wn(953,!1));cov_18tmdn9r60().s[4902]++;return;}else{cov_18tmdn9r60().b[1875][1]++;}cov_18tmdn9r60().s[4903]++;if(this.listeners===null){cov_18tmdn9r60().b[1876][0]++;cov_18tmdn9r60().s[4904]++;return;}else{cov_18tmdn9r60().b[1876][1]++;}let n=(cov_18tmdn9r60().s[4905]++,g(null));cov_18tmdn9r60().s[4906]++;try{cov_18tmdn9r60().s[4907]++;for(let r of this.listeners){cov_18tmdn9r60().s[4908]++;try{cov_18tmdn9r60().s[4909]++;r(t);}catch(o){cov_18tmdn9r60().s[4910]++;this.errorHandler?.handleError(o);}}}finally{cov_18tmdn9r60().s[4911]++;g(n);}}};function vE(e){cov_18tmdn9r60().f[1481]++;cov_18tmdn9r60().s[4912]++;return Hc(e);}function EE(e,t){cov_18tmdn9r60().f[1482]++;cov_18tmdn9r60().s[4913]++;return Rr(e,t?.equal);}cov_18tmdn9r60().s[4914]++;var IE=e=>{cov_18tmdn9r60().f[1483]++;cov_18tmdn9r60().s[4915]++;return e;};function DE(e,t){cov_18tmdn9r60().f[1484]++;cov_18tmdn9r60().s[4916]++;if(typeof e=="function"){cov_18tmdn9r60().b[1877][0]++;let n=(cov_18tmdn9r60().s[4917]++,Ti(e,IE,t?.equal));cov_18tmdn9r60().s[4918]++;return Uf(n,t?.debugName);}else{cov_18tmdn9r60().b[1877][1]++;let n=(cov_18tmdn9r60().s[4919]++,Ti(e.source,e.computation,e.equal));cov_18tmdn9r60().s[4920]++;return Uf(n,e.debugName);}}function Uf(e,t){cov_18tmdn9r60().f[1485]++;let n=(cov_18tmdn9r60().s[4921]++,e[W]),r=(cov_18tmdn9r60().s[4922]++,e);cov_18tmdn9r60().s[4923]++;return r.set=o=>{cov_18tmdn9r60().f[1486]++;cov_18tmdn9r60().s[4924]++;return jc(n,o);},r.update=o=>{cov_18tmdn9r60().f[1487]++;cov_18tmdn9r60().s[4925]++;return Vc(n,o);},r.asReadonly=fo.bind(e),r;}var Qf=(cov_18tmdn9r60().s[4926]++,Symbol("InputSignalNode#UNSET")),CE=(cov_18tmdn9r60().s[4927]++,$(B({},Or),{transformFn:void 0,applyValueToInputSignal(e,t){cov_18tmdn9r60().f[1488]++;cov_18tmdn9r60().s[4928]++;dt(e,t);}}));function Zf(e,t){cov_18tmdn9r60().f[1489]++;let n=(cov_18tmdn9r60().s[4929]++,Object.create(CE));cov_18tmdn9r60().s[4930]++;n.value=e,n.transformFn=t?.transform;function r(){cov_18tmdn9r60().f[1490]++;cov_18tmdn9r60().s[4931]++;if(at(n),n.value===Qf){cov_18tmdn9r60().b[1878][0]++;let o=(cov_18tmdn9r60().s[4932]++,null);cov_18tmdn9r60().s[4933]++;throw new T(-950,o);}else{cov_18tmdn9r60().b[1878][1]++;}cov_18tmdn9r60().s[4934]++;return n.value;}cov_18tmdn9r60().s[4935]++;return r[W]=n,r;}cov_18tmdn9r60().s[4936]++;var Wf=class{attributeName;constructor(t){cov_18tmdn9r60().f[1491]++;cov_18tmdn9r60().s[4937]++;this.attributeName=t;}__NG_ELEMENT_ID__=(cov_18tmdn9r60().s[4938]++,()=>{cov_18tmdn9r60().f[1492]++;cov_18tmdn9r60().s[4939]++;return Ru(this.attributeName);});toString(){cov_18tmdn9r60().f[1493]++;cov_18tmdn9r60().s[4940]++;return`HostAttributeToken ${this.attributeName}`;}};function hO(e){cov_18tmdn9r60().f[1494]++;cov_18tmdn9r60().s[4941]++;return new ei();}function qf(e,t){cov_18tmdn9r60().f[1495]++;cov_18tmdn9r60().s[4942]++;return Zf(e,t);}function wE(e){cov_18tmdn9r60().f[1496]++;cov_18tmdn9r60().s[4943]++;return Zf(Qf,e);}var gO=(cov_18tmdn9r60().s[4944]++,qf.required=wE,qf);var qa=(cov_18tmdn9r60().s[4945]++,new N("")),TE=(cov_18tmdn9r60().s[4946]++,new N(""));function tr(e){cov_18tmdn9r60().f[1497]++;cov_18tmdn9r60().s[4947]++;return!e.moduleRef;}function bE(e){cov_18tmdn9r60().f[1498]++;let t=(cov_18tmdn9r60().s[4948]++,tr(e)?(cov_18tmdn9r60().b[1879][0]++,e.r3Injector):(cov_18tmdn9r60().b[1879][1]++,e.moduleRef.injector)),n=(cov_18tmdn9r60().s[4949]++,t.get(De));cov_18tmdn9r60().s[4950]++;return n.run(()=>{cov_18tmdn9r60().f[1499]++;cov_18tmdn9r60().s[4951]++;tr(e)?(cov_18tmdn9r60().b[1880][0]++,e.r3Injector.resolveInjectorInitializers()):(cov_18tmdn9r60().b[1880][1]++,e.moduleRef.resolveInjectorInitializers());let r=(cov_18tmdn9r60().s[4952]++,t.get(et)),o;cov_18tmdn9r60().s[4953]++;if(n.runOutsideAngular(()=>{cov_18tmdn9r60().f[1500]++;cov_18tmdn9r60().s[4954]++;o=n.onError.subscribe({next:r});}),tr(e)){cov_18tmdn9r60().b[1881][0]++;cov_18tmdn9r60().s[4955]++;let i=()=>{cov_18tmdn9r60().f[1501]++;cov_18tmdn9r60().s[4956]++;return t.destroy();},s=(cov_18tmdn9r60().s[4957]++,e.platformInjector.get(qa));cov_18tmdn9r60().s[4958]++;s.add(i),t.onDestroy(()=>{cov_18tmdn9r60().f[1502]++;cov_18tmdn9r60().s[4959]++;o.unsubscribe(),s.delete(i);});}else{cov_18tmdn9r60().b[1881][1]++;cov_18tmdn9r60().s[4960]++;let i=()=>{cov_18tmdn9r60().f[1503]++;cov_18tmdn9r60().s[4961]++;return e.moduleRef.destroy();},s=(cov_18tmdn9r60().s[4962]++,e.platformInjector.get(qa));cov_18tmdn9r60().s[4963]++;s.add(i),e.moduleRef.onDestroy(()=>{cov_18tmdn9r60().f[1504]++;cov_18tmdn9r60().s[4964]++;Fn(e.allPlatformModules,e.moduleRef),o.unsubscribe(),s.delete(i);});}cov_18tmdn9r60().s[4965]++;return ME(r,n,()=>{cov_18tmdn9r60().f[1505]++;let i=(cov_18tmdn9r60().s[4966]++,t.get(bt)),s=(cov_18tmdn9r60().s[4967]++,i.add()),a=(cov_18tmdn9r60().s[4968]++,t.get(ja));cov_18tmdn9r60().s[4969]++;return a.runInitializers(),a.donePromise.then(()=>{cov_18tmdn9r60().f[1506]++;let c=(cov_18tmdn9r60().s[4970]++,t.get(Wa,er));cov_18tmdn9r60().s[4971]++;if(vf((cov_18tmdn9r60().b[1883][0]++,c)||(cov_18tmdn9r60().b[1883][1]++,er)),!t.get(TE,!0)){cov_18tmdn9r60().b[1882][0]++;cov_18tmdn9r60().s[4972]++;return tr(e)?(cov_18tmdn9r60().b[1884][0]++,t.get(Xo)):(cov_18tmdn9r60().b[1884][1]++,e.allPlatformModules.push(e.moduleRef),e.moduleRef);}else{cov_18tmdn9r60().b[1882][1]++;}cov_18tmdn9r60().s[4973]++;if(tr(e)){cov_18tmdn9r60().b[1885][0]++;let u=(cov_18tmdn9r60().s[4974]++,t.get(Xo));cov_18tmdn9r60().s[4975]++;return(cov_18tmdn9r60().b[1886][0]++,e.rootComponent!==void 0)&&(cov_18tmdn9r60().b[1886][1]++,u.bootstrap(e.rootComponent)),u;}else{cov_18tmdn9r60().b[1885][1]++;cov_18tmdn9r60().s[4976]++;return _E?.(e.moduleRef,e.allPlatformModules),e.moduleRef;}}).finally(()=>{cov_18tmdn9r60().f[1507]++;cov_18tmdn9r60().s[4977]++;i.remove(s);});});});}var _E;function ME(e,t,n){cov_18tmdn9r60().f[1508]++;cov_18tmdn9r60().s[4978]++;try{let r=(cov_18tmdn9r60().s[4979]++,n());cov_18tmdn9r60().s[4980]++;return La(r)?(cov_18tmdn9r60().b[1887][0]++,r.catch(o=>{cov_18tmdn9r60().f[1509]++;cov_18tmdn9r60().s[4981]++;throw t.runOutsideAngular(()=>{cov_18tmdn9r60().f[1510]++;cov_18tmdn9r60().s[4982]++;return e(o);}),o;})):(cov_18tmdn9r60().b[1887][1]++,r);}catch(r){cov_18tmdn9r60().s[4983]++;throw t.runOutsideAngular(()=>{cov_18tmdn9r60().f[1511]++;cov_18tmdn9r60().s[4984]++;return e(r);}),r;}}var ti=(cov_18tmdn9r60().s[4985]++,null);function NE(e=(cov_18tmdn9r60().b[1888][0]++,[]),t){cov_18tmdn9r60().f[1512]++;cov_18tmdn9r60().s[4986]++;return Ie.create({name:t,providers:[{provide:Ji,useValue:"platform"},{provide:qa,useValue:new Set([()=>{cov_18tmdn9r60().f[1513]++;cov_18tmdn9r60().s[4987]++;return ti=null;}])},...e]});}function SE(e=(cov_18tmdn9r60().b[1889][0]++,[])){cov_18tmdn9r60().f[1514]++;cov_18tmdn9r60().s[4988]++;if(ti){cov_18tmdn9r60().b[1890][0]++;cov_18tmdn9r60().s[4989]++;return ti;}else{cov_18tmdn9r60().b[1890][1]++;}let t=(cov_18tmdn9r60().s[4990]++,NE(e));cov_18tmdn9r60().s[4991]++;return ti=t,lf(),xE(t),t;}function xE(e){cov_18tmdn9r60().f[1515]++;let t=(cov_18tmdn9r60().s[4992]++,e.get(ju,null));cov_18tmdn9r60().s[4993]++;Kr(e,()=>{cov_18tmdn9r60().f[1516]++;cov_18tmdn9r60().s[4994]++;t?.forEach(n=>{cov_18tmdn9r60().f[1517]++;cov_18tmdn9r60().s[4995]++;return n();});});}var AE=(cov_18tmdn9r60().s[4996]++,1e4);var mO=(cov_18tmdn9r60().s[4997]++,AE-1e3);var yO=(cov_18tmdn9r60().s[4998]++,(()=>{cov_18tmdn9r60().f[1518]++;class e{static __NG_ELEMENT_ID__=(cov_18tmdn9r60().s[4999]++,RE);}cov_18tmdn9r60().s[5000]++;return e;})());function RE(e){cov_18tmdn9r60().f[1519]++;cov_18tmdn9r60().s[5001]++;return kE(G(),v(),(e&16)===16);}function kE(e,t,n){cov_18tmdn9r60().f[1520]++;cov_18tmdn9r60().s[5002]++;if((cov_18tmdn9r60().b[1892][0]++,Le(e))&&(cov_18tmdn9r60().b[1892][1]++,!n)){cov_18tmdn9r60().b[1891][0]++;let r=(cov_18tmdn9r60().s[5003]++,se(e.index,t));cov_18tmdn9r60().s[5004]++;return new tt(r,r);}else{cov_18tmdn9r60().b[1891][1]++;cov_18tmdn9r60().s[5005]++;if(e.type&175){cov_18tmdn9r60().b[1893][0]++;let r=(cov_18tmdn9r60().s[5006]++,t[Z]);cov_18tmdn9r60().s[5007]++;return new tt(r,t);}else{cov_18tmdn9r60().b[1893][1]++;}}cov_18tmdn9r60().s[5008]++;return null;}cov_18tmdn9r60().s[5009]++;cov_18tmdn9r60().s[5012]++;cov_18tmdn9r60().s[5014]++;cov_18tmdn9r60().s[5112]++;cov_18tmdn9r60().s[5126]++;cov_18tmdn9r60().s[5137]++;var Ga=class{supports(t){cov_18tmdn9r60().f[1521]++;cov_18tmdn9r60().s[5010]++;return ka(t);}create(t){cov_18tmdn9r60().f[1522]++;cov_18tmdn9r60().s[5011]++;return new za(t);}},OE=(e,t)=>{cov_18tmdn9r60().f[1523]++;cov_18tmdn9r60().s[5013]++;return t;},za=class{length=(cov_18tmdn9r60().s[5015]++,0);collection;_linkedRecords=(cov_18tmdn9r60().s[5016]++,null);_unlinkedRecords=(cov_18tmdn9r60().s[5017]++,null);_previousItHead=(cov_18tmdn9r60().s[5018]++,null);_itHead=(cov_18tmdn9r60().s[5019]++,null);_itTail=(cov_18tmdn9r60().s[5020]++,null);_additionsHead=(cov_18tmdn9r60().s[5021]++,null);_additionsTail=(cov_18tmdn9r60().s[5022]++,null);_movesHead=(cov_18tmdn9r60().s[5023]++,null);_movesTail=(cov_18tmdn9r60().s[5024]++,null);_removalsHead=(cov_18tmdn9r60().s[5025]++,null);_removalsTail=(cov_18tmdn9r60().s[5026]++,null);_identityChangesHead=(cov_18tmdn9r60().s[5027]++,null);_identityChangesTail=(cov_18tmdn9r60().s[5028]++,null);_trackByFn;constructor(t){cov_18tmdn9r60().f[1524]++;cov_18tmdn9r60().s[5029]++;this._trackByFn=(cov_18tmdn9r60().b[1894][0]++,t)||(cov_18tmdn9r60().b[1894][1]++,OE);}forEachItem(t){cov_18tmdn9r60().f[1525]++;let n;cov_18tmdn9r60().s[5030]++;for(n=this._itHead;n!==null;n=n._next){cov_18tmdn9r60().s[5031]++;t(n);}}forEachOperation(t){cov_18tmdn9r60().f[1526]++;let n=(cov_18tmdn9r60().s[5032]++,this._itHead),r=(cov_18tmdn9r60().s[5033]++,this._removalsHead),o=(cov_18tmdn9r60().s[5034]++,0),i=(cov_18tmdn9r60().s[5035]++,null);cov_18tmdn9r60().s[5036]++;for(;(cov_18tmdn9r60().b[1895][0]++,n)||(cov_18tmdn9r60().b[1895][1]++,r);){let s=(cov_18tmdn9r60().s[5037]++,(cov_18tmdn9r60().b[1897][0]++,!r)||(cov_18tmdn9r60().b[1897][1]++,n)&&(cov_18tmdn9r60().b[1897][2]++,n.currentIndex{cov_18tmdn9r60().f[1535]++;cov_18tmdn9r60().s[5078]++;s=this._trackByFn(o,a),(cov_18tmdn9r60().b[1914][0]++,n===null)||(cov_18tmdn9r60().b[1914][1]++,!Object.is(n.trackById,s))?(cov_18tmdn9r60().b[1913][0]++,n=this._mismatch(n,a,s,o),r=!0):(cov_18tmdn9r60().b[1913][1]++,(cov_18tmdn9r60().b[1915][0]++,r)&&(cov_18tmdn9r60().b[1915][1]++,n=this._verifyReinsertion(n,a,s,o)),(cov_18tmdn9r60().b[1916][0]++,Object.is(n.item,a))||(cov_18tmdn9r60().b[1916][1]++,this._addIdentityChange(n,a))),n=n._next,o++;}),this.length=o;}cov_18tmdn9r60().s[5079]++;return this._truncate(n),this.collection=t,this.isDirty;}get isDirty(){cov_18tmdn9r60().f[1536]++;cov_18tmdn9r60().s[5080]++;return(cov_18tmdn9r60().b[1917][0]++,this._additionsHead!==null)||(cov_18tmdn9r60().b[1917][1]++,this._movesHead!==null)||(cov_18tmdn9r60().b[1917][2]++,this._removalsHead!==null)||(cov_18tmdn9r60().b[1917][3]++,this._identityChangesHead!==null);}_reset(){cov_18tmdn9r60().f[1537]++;cov_18tmdn9r60().s[5081]++;if(this.isDirty){cov_18tmdn9r60().b[1918][0]++;let t;cov_18tmdn9r60().s[5082]++;for(t=this._previousItHead=this._itHead;t!==null;t=t._next){cov_18tmdn9r60().s[5083]++;t._nextPrevious=t._next;}cov_18tmdn9r60().s[5084]++;for(t=this._additionsHead;t!==null;t=t._nextAdded){cov_18tmdn9r60().s[5085]++;t.previousIndex=t.currentIndex;}cov_18tmdn9r60().s[5086]++;for(this._additionsHead=this._additionsTail=null,t=this._movesHead;t!==null;t=t._nextMoved){cov_18tmdn9r60().s[5087]++;t.previousIndex=t.currentIndex;}cov_18tmdn9r60().s[5088]++;this._movesHead=this._movesTail=null,this._removalsHead=this._removalsTail=null,this._identityChangesHead=this._identityChangesTail=null;}else{cov_18tmdn9r60().b[1918][1]++;}}_mismatch(t,n,r,o){cov_18tmdn9r60().f[1538]++;let i;cov_18tmdn9r60().s[5089]++;return t===null?(cov_18tmdn9r60().b[1919][0]++,i=this._itTail):(cov_18tmdn9r60().b[1919][1]++,i=t._prev,this._remove(t)),t=this._unlinkedRecords===null?(cov_18tmdn9r60().b[1920][0]++,null):(cov_18tmdn9r60().b[1920][1]++,this._unlinkedRecords.get(r,null)),t!==null?(cov_18tmdn9r60().b[1921][0]++,(cov_18tmdn9r60().b[1922][0]++,Object.is(t.item,n))||(cov_18tmdn9r60().b[1922][1]++,this._addIdentityChange(t,n)),this._reinsertAfter(t,i,o)):(cov_18tmdn9r60().b[1921][1]++,t=this._linkedRecords===null?(cov_18tmdn9r60().b[1923][0]++,null):(cov_18tmdn9r60().b[1923][1]++,this._linkedRecords.get(r,o)),t!==null?(cov_18tmdn9r60().b[1924][0]++,(cov_18tmdn9r60().b[1925][0]++,Object.is(t.item,n))||(cov_18tmdn9r60().b[1925][1]++,this._addIdentityChange(t,n)),this._moveAfter(t,i,o)):(cov_18tmdn9r60().b[1924][1]++,t=this._addAfter(new Qa(n,r),i,o))),t;}_verifyReinsertion(t,n,r,o){cov_18tmdn9r60().f[1539]++;let i=(cov_18tmdn9r60().s[5090]++,this._unlinkedRecords===null?(cov_18tmdn9r60().b[1926][0]++,null):(cov_18tmdn9r60().b[1926][1]++,this._unlinkedRecords.get(r,null)));cov_18tmdn9r60().s[5091]++;return i!==null?(cov_18tmdn9r60().b[1927][0]++,t=this._reinsertAfter(i,t._prev,o)):(cov_18tmdn9r60().b[1927][1]++,(cov_18tmdn9r60().b[1928][0]++,t.currentIndex!=o)&&(cov_18tmdn9r60().b[1928][1]++,t.currentIndex=o,this._addToMoves(t,o))),t;}_truncate(t){cov_18tmdn9r60().f[1540]++;cov_18tmdn9r60().s[5092]++;for(;t!==null;){let n=(cov_18tmdn9r60().s[5093]++,t._next);cov_18tmdn9r60().s[5094]++;this._addToRemovals(this._unlink(t)),t=n;}cov_18tmdn9r60().s[5095]++;(cov_18tmdn9r60().b[1929][0]++,this._unlinkedRecords!==null)&&(cov_18tmdn9r60().b[1929][1]++,this._unlinkedRecords.clear()),(cov_18tmdn9r60().b[1930][0]++,this._additionsTail!==null)&&(cov_18tmdn9r60().b[1930][1]++,this._additionsTail._nextAdded=null),(cov_18tmdn9r60().b[1931][0]++,this._movesTail!==null)&&(cov_18tmdn9r60().b[1931][1]++,this._movesTail._nextMoved=null),(cov_18tmdn9r60().b[1932][0]++,this._itTail!==null)&&(cov_18tmdn9r60().b[1932][1]++,this._itTail._next=null),(cov_18tmdn9r60().b[1933][0]++,this._removalsTail!==null)&&(cov_18tmdn9r60().b[1933][1]++,this._removalsTail._nextRemoved=null),(cov_18tmdn9r60().b[1934][0]++,this._identityChangesTail!==null)&&(cov_18tmdn9r60().b[1934][1]++,this._identityChangesTail._nextIdentityChange=null);}_reinsertAfter(t,n,r){cov_18tmdn9r60().f[1541]++;cov_18tmdn9r60().s[5096]++;(cov_18tmdn9r60().b[1935][0]++,this._unlinkedRecords!==null)&&(cov_18tmdn9r60().b[1935][1]++,this._unlinkedRecords.remove(t));let o=(cov_18tmdn9r60().s[5097]++,t._prevRemoved),i=(cov_18tmdn9r60().s[5098]++,t._nextRemoved);cov_18tmdn9r60().s[5099]++;return o===null?(cov_18tmdn9r60().b[1936][0]++,this._removalsHead=i):(cov_18tmdn9r60().b[1936][1]++,o._nextRemoved=i),i===null?(cov_18tmdn9r60().b[1937][0]++,this._removalsTail=o):(cov_18tmdn9r60().b[1937][1]++,i._prevRemoved=o),this._insertAfter(t,n,r),this._addToMoves(t,r),t;}_moveAfter(t,n,r){cov_18tmdn9r60().f[1542]++;cov_18tmdn9r60().s[5100]++;return this._unlink(t),this._insertAfter(t,n,r),this._addToMoves(t,r),t;}_addAfter(t,n,r){cov_18tmdn9r60().f[1543]++;cov_18tmdn9r60().s[5101]++;return this._insertAfter(t,n,r),this._additionsTail===null?(cov_18tmdn9r60().b[1938][0]++,this._additionsTail=this._additionsHead=t):(cov_18tmdn9r60().b[1938][1]++,this._additionsTail=this._additionsTail._nextAdded=t),t;}_insertAfter(t,n,r){cov_18tmdn9r60().f[1544]++;let o=(cov_18tmdn9r60().s[5102]++,n===null?(cov_18tmdn9r60().b[1939][0]++,this._itHead):(cov_18tmdn9r60().b[1939][1]++,n._next));cov_18tmdn9r60().s[5103]++;return t._next=o,t._prev=n,o===null?(cov_18tmdn9r60().b[1940][0]++,this._itTail=t):(cov_18tmdn9r60().b[1940][1]++,o._prev=t),n===null?(cov_18tmdn9r60().b[1941][0]++,this._itHead=t):(cov_18tmdn9r60().b[1941][1]++,n._next=t),(cov_18tmdn9r60().b[1942][0]++,this._linkedRecords===null)&&(cov_18tmdn9r60().b[1942][1]++,this._linkedRecords=new ni()),this._linkedRecords.put(t),t.currentIndex=r,t;}_remove(t){cov_18tmdn9r60().f[1545]++;cov_18tmdn9r60().s[5104]++;return this._addToRemovals(this._unlink(t));}_unlink(t){cov_18tmdn9r60().f[1546]++;cov_18tmdn9r60().s[5105]++;(cov_18tmdn9r60().b[1943][0]++,this._linkedRecords!==null)&&(cov_18tmdn9r60().b[1943][1]++,this._linkedRecords.remove(t));let n=(cov_18tmdn9r60().s[5106]++,t._prev),r=(cov_18tmdn9r60().s[5107]++,t._next);cov_18tmdn9r60().s[5108]++;return n===null?(cov_18tmdn9r60().b[1944][0]++,this._itHead=r):(cov_18tmdn9r60().b[1944][1]++,n._next=r),r===null?(cov_18tmdn9r60().b[1945][0]++,this._itTail=n):(cov_18tmdn9r60().b[1945][1]++,r._prev=n),t;}_addToMoves(t,n){cov_18tmdn9r60().f[1547]++;cov_18tmdn9r60().s[5109]++;return(cov_18tmdn9r60().b[1946][0]++,t.previousIndex===n)||(cov_18tmdn9r60().b[1946][1]++,this._movesTail===null?(cov_18tmdn9r60().b[1947][0]++,this._movesTail=this._movesHead=t):(cov_18tmdn9r60().b[1947][1]++,this._movesTail=this._movesTail._nextMoved=t)),t;}_addToRemovals(t){cov_18tmdn9r60().f[1548]++;cov_18tmdn9r60().s[5110]++;return(cov_18tmdn9r60().b[1948][0]++,this._unlinkedRecords===null)&&(cov_18tmdn9r60().b[1948][1]++,this._unlinkedRecords=new ni()),this._unlinkedRecords.put(t),t.currentIndex=null,t._nextRemoved=null,this._removalsTail===null?(cov_18tmdn9r60().b[1949][0]++,this._removalsTail=this._removalsHead=t,t._prevRemoved=null):(cov_18tmdn9r60().b[1949][1]++,t._prevRemoved=this._removalsTail,this._removalsTail=this._removalsTail._nextRemoved=t),t;}_addIdentityChange(t,n){cov_18tmdn9r60().f[1549]++;cov_18tmdn9r60().s[5111]++;return t.item=n,this._identityChangesTail===null?(cov_18tmdn9r60().b[1950][0]++,this._identityChangesTail=this._identityChangesHead=t):(cov_18tmdn9r60().b[1950][1]++,this._identityChangesTail=this._identityChangesTail._nextIdentityChange=t),t;}},Qa=class{item;trackById;currentIndex=(cov_18tmdn9r60().s[5113]++,null);previousIndex=(cov_18tmdn9r60().s[5114]++,null);_nextPrevious=(cov_18tmdn9r60().s[5115]++,null);_prev=(cov_18tmdn9r60().s[5116]++,null);_next=(cov_18tmdn9r60().s[5117]++,null);_prevDup=(cov_18tmdn9r60().s[5118]++,null);_nextDup=(cov_18tmdn9r60().s[5119]++,null);_prevRemoved=(cov_18tmdn9r60().s[5120]++,null);_nextRemoved=(cov_18tmdn9r60().s[5121]++,null);_nextAdded=(cov_18tmdn9r60().s[5122]++,null);_nextMoved=(cov_18tmdn9r60().s[5123]++,null);_nextIdentityChange=(cov_18tmdn9r60().s[5124]++,null);constructor(t,n){cov_18tmdn9r60().f[1550]++;cov_18tmdn9r60().s[5125]++;this.item=t,this.trackById=n;}},Za=class{_head=(cov_18tmdn9r60().s[5127]++,null);_tail=(cov_18tmdn9r60().s[5128]++,null);add(t){cov_18tmdn9r60().f[1551]++;cov_18tmdn9r60().s[5129]++;this._head===null?(cov_18tmdn9r60().b[1951][0]++,this._head=this._tail=t,t._nextDup=null,t._prevDup=null):(cov_18tmdn9r60().b[1951][1]++,this._tail._nextDup=t,t._prevDup=this._tail,t._nextDup=null,this._tail=t);}get(t,n){cov_18tmdn9r60().f[1552]++;let r;cov_18tmdn9r60().s[5130]++;for(r=this._head;r!==null;r=r._nextDup){cov_18tmdn9r60().s[5131]++;if(((cov_18tmdn9r60().b[1953][0]++,n===null)||(cov_18tmdn9r60().b[1953][1]++,n<=r.currentIndex))&&(cov_18tmdn9r60().b[1953][2]++,Object.is(r.trackById,t))){cov_18tmdn9r60().b[1952][0]++;cov_18tmdn9r60().s[5132]++;return r;}else{cov_18tmdn9r60().b[1952][1]++;}}cov_18tmdn9r60().s[5133]++;return null;}remove(t){cov_18tmdn9r60().f[1553]++;let n=(cov_18tmdn9r60().s[5134]++,t._prevDup),r=(cov_18tmdn9r60().s[5135]++,t._nextDup);cov_18tmdn9r60().s[5136]++;return n===null?(cov_18tmdn9r60().b[1954][0]++,this._head=r):(cov_18tmdn9r60().b[1954][1]++,n._nextDup=r),r===null?(cov_18tmdn9r60().b[1955][0]++,this._tail=n):(cov_18tmdn9r60().b[1955][1]++,r._prevDup=n),this._head===null;}},ni=class{map=(cov_18tmdn9r60().s[5138]++,new Map());put(t){cov_18tmdn9r60().f[1554]++;let n=(cov_18tmdn9r60().s[5139]++,t.trackById),r=(cov_18tmdn9r60().s[5140]++,this.map.get(n));cov_18tmdn9r60().s[5141]++;(cov_18tmdn9r60().b[1956][0]++,r)||(cov_18tmdn9r60().b[1956][1]++,r=new Za(),this.map.set(n,r)),r.add(t);}get(t,n){cov_18tmdn9r60().f[1555]++;let r=(cov_18tmdn9r60().s[5142]++,t),o=(cov_18tmdn9r60().s[5143]++,this.map.get(r));cov_18tmdn9r60().s[5144]++;return o?(cov_18tmdn9r60().b[1957][0]++,o.get(t,n)):(cov_18tmdn9r60().b[1957][1]++,null);}remove(t){cov_18tmdn9r60().f[1556]++;let n=(cov_18tmdn9r60().s[5145]++,t.trackById);cov_18tmdn9r60().s[5146]++;return(cov_18tmdn9r60().b[1958][0]++,this.map.get(n).remove(t))&&(cov_18tmdn9r60().b[1958][1]++,this.map.delete(n)),t;}get isEmpty(){cov_18tmdn9r60().f[1557]++;cov_18tmdn9r60().s[5147]++;return this.map.size===0;}clear(){cov_18tmdn9r60().f[1558]++;cov_18tmdn9r60().s[5148]++;this.map.clear();}};function Gf(e,t,n){cov_18tmdn9r60().f[1559]++;let r=(cov_18tmdn9r60().s[5149]++,e.previousIndex);cov_18tmdn9r60().s[5150]++;if(r===null){cov_18tmdn9r60().b[1959][0]++;cov_18tmdn9r60().s[5151]++;return r;}else{cov_18tmdn9r60().b[1959][1]++;}let o=(cov_18tmdn9r60().s[5152]++,0);cov_18tmdn9r60().s[5153]++;return(cov_18tmdn9r60().b[1960][0]++,n)&&(cov_18tmdn9r60().b[1960][1]++,r{cov_18tmdn9r60().f[1561]++;class e{factories;static ɵprov=(cov_18tmdn9r60().s[5156]++,V({token:e,providedIn:"root",factory:zf}));constructor(n){cov_18tmdn9r60().f[1562]++;cov_18tmdn9r60().s[5157]++;this.factories=n;}static create(n,r){cov_18tmdn9r60().f[1563]++;cov_18tmdn9r60().s[5158]++;if(r!=null){cov_18tmdn9r60().b[1961][0]++;let o=(cov_18tmdn9r60().s[5159]++,r.factories.slice());cov_18tmdn9r60().s[5160]++;n=n.concat(o);}else{cov_18tmdn9r60().b[1961][1]++;}cov_18tmdn9r60().s[5161]++;return new e(n);}static extend(n){cov_18tmdn9r60().f[1564]++;cov_18tmdn9r60().s[5162]++;return{provide:e,useFactory:()=>{cov_18tmdn9r60().f[1565]++;let r=(cov_18tmdn9r60().s[5163]++,E(e,{optional:!0,skipSelf:!0}));cov_18tmdn9r60().s[5164]++;return e.create(n,(cov_18tmdn9r60().b[1962][0]++,r)||(cov_18tmdn9r60().b[1962][1]++,zf()));}};}find(n){cov_18tmdn9r60().f[1566]++;let r=(cov_18tmdn9r60().s[5165]++,this.factories.find(o=>{cov_18tmdn9r60().f[1567]++;cov_18tmdn9r60().s[5166]++;return o.supports(n);}));cov_18tmdn9r60().s[5167]++;if(r!=null){cov_18tmdn9r60().b[1963][0]++;cov_18tmdn9r60().s[5168]++;return r;}else{cov_18tmdn9r60().b[1963][1]++;}cov_18tmdn9r60().s[5169]++;throw new T(901,!1);}}cov_18tmdn9r60().s[5170]++;return e;})());function vO(e){cov_18tmdn9r60().f[1568]++;let{rootComponent:t,appProviders:n,platformProviders:r,platformRef:o}=(cov_18tmdn9r60().s[5171]++,e);cov_18tmdn9r60().s[5172]++;x(M.BootstrapApplicationStart);cov_18tmdn9r60().s[5173]++;try{let i=(cov_18tmdn9r60().s[5174]++,(cov_18tmdn9r60().b[1964][0]++,o?.injector)??(cov_18tmdn9r60().b[1964][1]++,SE(r))),s=(cov_18tmdn9r60().s[5175]++,[$f(),jl,...((cov_18tmdn9r60().b[1965][0]++,n)||(cov_18tmdn9r60().b[1965][1]++,[]))]),a=(cov_18tmdn9r60().s[5176]++,new Wn({providers:s,parent:i,debugName:"",runEnvironmentInitializers:!1}));cov_18tmdn9r60().s[5177]++;return bE({r3Injector:a.injector,platformInjector:i,rootComponent:t});}catch(i){cov_18tmdn9r60().s[5178]++;return Promise.reject(i);}finally{cov_18tmdn9r60().s[5179]++;x(M.BootstrapApplicationEnd);}}function EO(e){cov_18tmdn9r60().f[1569]++;cov_18tmdn9r60().s[5180]++;return typeof e=="boolean"?(cov_18tmdn9r60().b[1966][0]++,e):(cov_18tmdn9r60().b[1966][1]++,(cov_18tmdn9r60().b[1967][0]++,e!=null)&&(cov_18tmdn9r60().b[1967][1]++,e!=="false"));}function IO(e){cov_18tmdn9r60().f[1570]++;let t=(cov_18tmdn9r60().s[5181]++,Re(e));cov_18tmdn9r60().s[5182]++;if(!t){cov_18tmdn9r60().b[1968][0]++;cov_18tmdn9r60().s[5183]++;return null;}else{cov_18tmdn9r60().b[1968][1]++;}let n=(cov_18tmdn9r60().s[5184]++,new St(t));cov_18tmdn9r60().s[5185]++;return{get selector(){cov_18tmdn9r60().f[1571]++;cov_18tmdn9r60().s[5186]++;return n.selector;},get type(){cov_18tmdn9r60().f[1572]++;cov_18tmdn9r60().s[5187]++;return n.componentType;},get inputs(){cov_18tmdn9r60().f[1573]++;cov_18tmdn9r60().s[5188]++;return n.inputs;},get outputs(){cov_18tmdn9r60().f[1574]++;cov_18tmdn9r60().s[5189]++;return n.outputs;},get ngContentSelectors(){cov_18tmdn9r60().f[1575]++;cov_18tmdn9r60().s[5190]++;return n.ngContentSelectors;},get isStandalone(){cov_18tmdn9r60().f[1576]++;cov_18tmdn9r60().s[5191]++;return t.standalone;},get isSignal(){cov_18tmdn9r60().f[1577]++;cov_18tmdn9r60().s[5192]++;return t.signals;}};}var Kf=(cov_18tmdn9r60().s[5193]++,null);function Ya(){cov_18tmdn9r60().f[1578]++;cov_18tmdn9r60().s[5194]++;return Kf;}function MO(e){cov_18tmdn9r60().f[1579]++;cov_18tmdn9r60().s[5195]++;Kf??=e;}cov_18tmdn9r60().s[5196]++;var Yf=class{},FE=(cov_18tmdn9r60().s[5197]++,(()=>{cov_18tmdn9r60().f[1580]++;class e{historyGo(n){cov_18tmdn9r60().f[1581]++;cov_18tmdn9r60().s[5198]++;throw new Error("");}static ɵfac=(cov_18tmdn9r60().s[5199]++,function(r){cov_18tmdn9r60().f[1582]++;cov_18tmdn9r60().s[5200]++;return new((cov_18tmdn9r60().b[1969][0]++,r)||(cov_18tmdn9r60().b[1969][1]++,e))();});static ɵprov=(cov_18tmdn9r60().s[5201]++,V({token:e,factory:()=>{cov_18tmdn9r60().f[1583]++;cov_18tmdn9r60().s[5202]++;return E(jE);},providedIn:"platform"}));}cov_18tmdn9r60().s[5203]++;return e;})()),NO=(cov_18tmdn9r60().s[5204]++,new N("")),jE=(cov_18tmdn9r60().s[5205]++,(()=>{cov_18tmdn9r60().f[1584]++;class e extends FE{_location;_history;_doc=(cov_18tmdn9r60().s[5206]++,E(Zt));constructor(){cov_18tmdn9r60().f[1585]++;cov_18tmdn9r60().s[5207]++;super(),this._location=window.location,this._history=window.history;}getBaseHrefFromDOM(){cov_18tmdn9r60().f[1586]++;cov_18tmdn9r60().s[5208]++;return Ya().getBaseHref(this._doc);}onPopState(n){cov_18tmdn9r60().f[1587]++;let r=(cov_18tmdn9r60().s[5209]++,Ya().getGlobalEventTarget(this._doc,"window"));cov_18tmdn9r60().s[5210]++;return r.addEventListener("popstate",n,!1),()=>{cov_18tmdn9r60().f[1588]++;cov_18tmdn9r60().s[5211]++;return r.removeEventListener("popstate",n);};}onHashChange(n){cov_18tmdn9r60().f[1589]++;let r=(cov_18tmdn9r60().s[5212]++,Ya().getGlobalEventTarget(this._doc,"window"));cov_18tmdn9r60().s[5213]++;return r.addEventListener("hashchange",n,!1),()=>{cov_18tmdn9r60().f[1590]++;cov_18tmdn9r60().s[5214]++;return r.removeEventListener("hashchange",n);};}get href(){cov_18tmdn9r60().f[1591]++;cov_18tmdn9r60().s[5215]++;return this._location.href;}get protocol(){cov_18tmdn9r60().f[1592]++;cov_18tmdn9r60().s[5216]++;return this._location.protocol;}get hostname(){cov_18tmdn9r60().f[1593]++;cov_18tmdn9r60().s[5217]++;return this._location.hostname;}get port(){cov_18tmdn9r60().f[1594]++;cov_18tmdn9r60().s[5218]++;return this._location.port;}get pathname(){cov_18tmdn9r60().f[1595]++;cov_18tmdn9r60().s[5219]++;return this._location.pathname;}get search(){cov_18tmdn9r60().f[1596]++;cov_18tmdn9r60().s[5220]++;return this._location.search;}get hash(){cov_18tmdn9r60().f[1597]++;cov_18tmdn9r60().s[5221]++;return this._location.hash;}set pathname(n){cov_18tmdn9r60().f[1598]++;cov_18tmdn9r60().s[5222]++;this._location.pathname=n;}pushState(n,r,o){cov_18tmdn9r60().f[1599]++;cov_18tmdn9r60().s[5223]++;this._history.pushState(n,r,o);}replaceState(n,r,o){cov_18tmdn9r60().f[1600]++;cov_18tmdn9r60().s[5224]++;this._history.replaceState(n,r,o);}forward(){cov_18tmdn9r60().f[1601]++;cov_18tmdn9r60().s[5225]++;this._history.forward();}back(){cov_18tmdn9r60().f[1602]++;cov_18tmdn9r60().s[5226]++;this._history.back();}historyGo(n=(cov_18tmdn9r60().b[1970][0]++,0)){cov_18tmdn9r60().f[1603]++;cov_18tmdn9r60().s[5227]++;this._history.go(n);}getState(){cov_18tmdn9r60().f[1604]++;cov_18tmdn9r60().s[5228]++;return this._history.state;}static ɵfac=(cov_18tmdn9r60().s[5229]++,function(r){cov_18tmdn9r60().f[1605]++;cov_18tmdn9r60().s[5230]++;return new((cov_18tmdn9r60().b[1971][0]++,r)||(cov_18tmdn9r60().b[1971][1]++,e))();});static ɵprov=(cov_18tmdn9r60().s[5231]++,V({token:e,factory:()=>{cov_18tmdn9r60().f[1606]++;cov_18tmdn9r60().s[5232]++;return new e();},providedIn:"platform"}));}cov_18tmdn9r60().s[5233]++;return e;})());function xO(e,t){cov_18tmdn9r60().f[1607]++;cov_18tmdn9r60().s[5234]++;t=encodeURIComponent(t);cov_18tmdn9r60().s[5235]++;for(let n of e.split(";")){let r=(cov_18tmdn9r60().s[5236]++,n.indexOf("=")),[o,i]=(cov_18tmdn9r60().s[5237]++,r==-1?(cov_18tmdn9r60().b[1972][0]++,[n,""]):(cov_18tmdn9r60().b[1972][1]++,[n.slice(0,r),n.slice(r+1)]));cov_18tmdn9r60().s[5238]++;if(o.trim()===t){cov_18tmdn9r60().b[1973][0]++;cov_18tmdn9r60().s[5239]++;return decodeURIComponent(i);}else{cov_18tmdn9r60().b[1973][1]++;}}cov_18tmdn9r60().s[5240]++;return null;}cov_18tmdn9r60().s[5241]++;var Jf=class{};export{U as a,np as b,b as c,te as d,cn as e,ln as f,He as g,pp as h,Cp as i,wp as j,pn as k,bp as l,Be as m,Rp as n,Me as o,pi as p,Cr as q,Op as r,Pp as s,di as t,Lp as u,Ir as v,fi as w,Fp as x,Dr as y,jp as z,vc as A,Bp as B,$p as C,Up as D,Ic as E,Dc as F,Cc as G,wc as H,T as I,wn as J,Wr as K,V as L,Gc as M,eh as N,N as O,Ee as P,E as Q,Mn as R,Ji as S,re as T,Kr as U,ml as V,yl as W,xl as X,Al as Y,Ie as Z,Zt as _,Fe as $,bt as aa,Ne as ba,De as ca,xe as da,et as ea,xh as fa,Ns as ga,xs as ha,Vl as ia,Uh as ja,ag as ka,Ru as la,Qn as ma,mg as na,yg as oa,ju as pa,Eg as qa,Ig as ra,Dg as sa,Nt as ta,Ju as ua,Og as va,Yg as wa,So as xa,Vn as ya,on as za,At as Aa,em as Ba,$n as Ca,Un as Da,ey as Ea,Xn as Fa,ny as Ga,Jo as Ha,Jd as Ia,Xd as Ja,By as Ka,Uy as La,Gy as Ma,zy as Na,nf as Oa,of as Pa,ov as Qa,La as Ra,af as Sa,iv as Ta,cf as Ua,Xo as Va,df as Wa,av as Xa,lv as Ya,Va as Za,uv as _a,dv as $a,fv as ab,pv as bb,ff as cb,Ho as db,Ha as eb,pf as fb,Ba as gb,$a as hb,hf as ib,vv as jb,mf as kb,Dv as lb,yf as mb,Ef as nb,If as ob,bv as pb,Mv as qb,Nv as rb,Df as sb,Cf as tb,xv as ub,Av as vb,Rv as wb,bf as xb,_f as yb,Uv as zb,eE as Ab,kf as Bb,Ua as Cb,Of as Db,rE as Eb,aE as Fb,cE as Gb,lE as Hb,dE as Ib,pE as Jb,hE as Kb,gE as Lb,mE as Mb,Wa as Nb,vE as Ob,EE as Pb,DE as Qb,Wf as Rb,hO as Sb,gO as Tb,yO as Ub,PE as Vb,vO as Wb,EO as Xb,IO as Yb,Ya as Zb,MO as _b,Yf as $b,FE as ac,NO as bc,xO as cc,Jf as dc};//# sourceMappingURL=chunk-RYTNMYZW.js.map +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJtIiwiZSIsImNvdl8xOHRtZG45cjYwIiwiZiIsInMiLCJqZSIsIm4iLCJyIiwiRXJyb3IiLCJjYWxsIiwic3RhY2siLCJwcm90b3R5cGUiLCJPYmplY3QiLCJjcmVhdGUiLCJjb25zdHJ1Y3RvciIsIm5yIiwibWVzc2FnZSIsImIiLCJsZW5ndGgiLCJtYXAiLCJvIiwidG9TdHJpbmciLCJqb2luIiwibmFtZSIsImVycm9ycyIsIm50IiwidCIsImluZGV4T2YiLCJzcGxpY2UiLCJVIiwiaW5pdGlhbFRlYXJkb3duIiwiY2xvc2VkIiwiX3BhcmVudGFnZSIsIl9maW5hbGl6ZXJzIiwidW5zdWJzY3JpYmUiLCJBcnJheSIsImlzQXJyYXkiLCJpIiwicmVtb3ZlIiwiS2EiLCJwdXNoIiwiYWRkIiwiX2hhc1BhcmVudCIsIl9hZGRQYXJlbnQiLCJpbmNsdWRlcyIsIl9yZW1vdmVQYXJlbnQiLCJFTVBUWSIsIm9pIiwicnIiLCJjZSIsIm9uVW5oYW5kbGVkRXJyb3IiLCJvblN0b3BwZWROb3RpZmljYXRpb24iLCJQcm9taXNlIiwidXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZyIsInVzZURlcHJlY2F0ZWROZXh0Q29udGV4dCIsIlJ0Iiwic2V0VGltZW91dCIsImRlbGVnYXRlIiwiY2xlYXJUaW1lb3V0Iiwib3IiLCJhbiIsIkphIiwiaWkiLCJYYSIsImVjIiwia2luZCIsInZhbHVlIiwiZXJyb3IiLCJydCIsImt0IiwiZXJyb3JUaHJvd24iLCJ0YyIsIm90IiwiaXNTdG9wcGVkIiwiZGVzdGluYXRpb24iLCJ0cCIsIl9lIiwibmV4dCIsImFpIiwiX25leHQiLCJfZXJyb3IiLCJjb21wbGV0ZSIsIl9jb21wbGV0ZSIsIlhmIiwiRnVuY3Rpb24iLCJiaW5kIiwic2kiLCJjaSIsInBhcnRpYWxPYnNlcnZlciIsImlyIiwiZXAiLCJPdCIsIlN5bWJvbCIsIm9ic2VydmFibGUiLCJlZSIsIm5wIiwibGkiLCJyZWR1Y2UiLCJfc3Vic2NyaWJlIiwibGlmdCIsInNvdXJjZSIsIm9wZXJhdG9yIiwic3Vic2NyaWJlIiwib3AiLCJhIiwiX3RyeVN1YnNjcmliZSIsImZvckVhY2giLCJuYyIsImMiLCJwaXBlIiwidG9Qcm9taXNlIiwicnAiLCJyYyIsInRlIiwiY3VycmVudE9ic2VydmVycyIsIm9ic2VydmVycyIsImhhc0Vycm9yIiwidGhyb3duRXJyb3IiLCJzciIsIl90aHJvd0lmQ2xvc2VkIiwiZnJvbSIsInNoaWZ0Iiwib2JzZXJ2ZWQiLCJfY2hlY2tGaW5hbGl6ZWRTdGF0dXNlcyIsIl9pbm5lclN1YnNjcmliZSIsImFzT2JzZXJ2YWJsZSIsImNuIiwiX3ZhbHVlIiwiZ2V0VmFsdWUiLCJhciIsInNjaGVkdWxlIiwib2MiLCJjciIsInBvcCIsIlZlIiwic2MiLCJ1IiwibCIsImQiLCJ0aHJvdyIsImRvbmUiLCJ0aGVuIiwiYXBwbHkiLCJpYyIsIml0ZXJhdG9yIiwiVHlwZUVycm9yIiwiaXQiLCJ2IiwiYWMiLCJhc3luY0l0ZXJhdG9yIiwiQXN5bmNJdGVyYXRvciIsImgiLCJyZXNvbHZlIiwiRCIsIkEiLCJSIiwicCIsImNjIiwiUHQiLCJsciIsInVyIiwiZHIiLCJmciIsImlwIiwicHIiLCJociIsImdyIiwiYXJndW1lbnRzIiwiZ2V0UmVhZGVyIiwicmVhZCIsInJlbGVhc2VMb2NrIiwibXIiLCJrIiwic3AiLCJhcCIsImNwIiwibGMiLCJscCIsInVwIiwiZHAiLCJjYXRjaCIsInJldHVybiIsInoiLCJmcCIsInciLCJfIiwidWkiLCJvbkZpbmFsaXplIiwic2hvdWxkVW5zdWJzY3JpYmUiLCJ5ciIsInZyIiwidWMiLCJkYyIsImZjIiwicGMiLCJFciIsImhjIiwiZ2MiLCJIZSIsInBwIiwiQmUiLCJtYyIsImNoZWNrQ29tcGxldGUiLCJNZSIsImhwIiwiZ3AiLCJMdCIsIm1wIiwieXAiLCJ2cCIsImRpIiwiRHAiLCJFcCIsInljIiwiSXAiLCJoYW5kbGVyIiwiYWRkTGlzdGVuZXIiLCJyZW1vdmVMaXN0ZW5lciIsIm9uIiwib2ZmIiwiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJJciIsImZpIiwibG4iLCJEciIsInZjIiwicGkiLCJFYyIsIkNyIiwiSWMiLCJEYyIsIkNjIiwid2MiLCJmaW5hbGl6ZSIsInVuIiwibm93IiwiRGF0ZSIsIndyIiwiX2J1ZmZlclNpemUiLCJfd2luZG93VGltZSIsIl90aW1lc3RhbXBQcm92aWRlciIsIl9idWZmZXIiLCJfaW5maW5pdGVUaW1lV2luZG93IiwiTWF0aCIsIm1heCIsIl90cmltQnVmZmVyIiwic2xpY2UiLCJUciIsImRuIiwic2V0SW50ZXJ2YWwiLCJjbGVhckludGVydmFsIiwiYnIiLCJzY2hlZHVsZXIiLCJ3b3JrIiwicGVuZGluZyIsInN0YXRlIiwiaWQiLCJyZWN5Y2xlQXN5bmNJZCIsImRlbGF5IiwicmVxdWVzdEFzeW5jSWQiLCJmbHVzaCIsImV4ZWN1dGUiLCJfZXhlY3V0ZSIsImFjdGlvbnMiLCJGdCIsInNjaGVkdWxlckFjdGlvbkN0b3IiLCJfciIsIl9hY3RpdmUiLCJmbiIsIlRjIiwiQ3AiLCJ3cCIsInBuIiwiTXIiLCJpc05hTiIsIlRwIiwiaW5mbyIsImJwIiwiZmlyc3QiLCJlYWNoIiwid2l0aCIsIl9wIiwibWV0YSIsImxhc3RWYWx1ZSIsInNlZW4iLCJNcCIsImdldFByb3RvdHlwZU9mIiwiTnAiLCJTcCIsImtleXMiLCJ4cCIsIk5yIiwiYXJncyIsIkFwIiwiU3IiLCJScCIsImtwIiwiYmMiLCJPcCIsIlBwIiwiX2MiLCJMcCIsIkZwIiwiTWMiLCJqcCIsIlZwIiwiTmMiLCJIcCIsIkJwIiwiJHAiLCJTYyIsImNvbm5lY3RvciIsInJlc2V0T25FcnJvciIsInJlc2V0T25Db21wbGV0ZSIsInJlc2V0T25SZWZDb3VudFplcm8iLCJjYW5jZWxSZXNldCIsInJlc2V0IiwicmVzZXRBbmRVbnN1YnNjcmliZSIsImhpIiwibWUiLCJVcCIsImJ1ZmZlclNpemUiLCJ3aW5kb3dUaW1lIiwicmVmQ291bnQiLCJRIiwieHIiLCJnaSIsIldwIiwiVyIsImciLCJBciIsIlVlIiwidmVyc2lvbiIsImxhc3RDbGVhbkVwb2NoIiwiZGlydHkiLCJwcm9kdWNlcnMiLCJwcm9kdWNlcnNUYWlsIiwiY29uc3VtZXJzIiwiY29uc3VtZXJzVGFpbCIsInJlY29tcHV0aW5nIiwiY29uc3VtZXJBbGxvd1NpZ25hbFdyaXRlcyIsImNvbnN1bWVySXNBbHdheXNMaXZlIiwicHJvZHVjZXJNdXN0UmVjb21wdXRlIiwicHJvZHVjZXJSZWNvbXB1dGVWYWx1ZSIsImNvbnN1bWVyTWFya2VkRGlydHkiLCJjb25zdW1lck9uU2lnbmFsUmVhZCIsImF0IiwicHJvZHVjZXIiLCJuZXh0UHJvZHVjZXIiLCJsYXN0UmVhZFZlcnNpb24iLCJjb25zdW1lciIsIkdwIiwiVnQiLCJwcmV2Q29uc3VtZXIiLCJuZXh0Q29uc3VtZXIiLCJrYyIsInhjIiwiY3QiLCJobiIsImp0IiwibWkiLCJxcCIsInlpIiwiV2UiLCJBYyIsImx0IiwiUmMiLCJ2aSIsInV0IiwiZ24iLCJtbiIsImlzIiwiUnIiLCJ6cCIsImNvbXB1dGF0aW9uIiwiZXF1YWwiLCJjb21wdXRlZCIsInllIiwiJGUiLCJzdCIsIiQiLCJCIiwiUXAiLCJPYyIsIlBjIiwiRWkiLCJacCIsIklpIiwiT3IiLCJnZXR0ZXIiLCJMYyIsImR0Iiwia3IiLCJZcCIsIkRpIiwiQ2kiLCJjbGVhbnVwIiwid2kiLCJQciIsInZlIiwiRmMiLCJIdCIsIlRpIiwiS3AiLCJqYyIsIlZjIiwic291cmNlVmFsdWUiLCJIYyIsIiRyIiwiVCIsImNvZGUiLCJ3biIsIkpwIiwiYWJzIiwiUWUiLCJnbG9iYWxUaGlzIiwiUyIsInFjIiwiaGFzT3duUHJvcGVydHkiLCJUbiIsIm92ZXJyaWRkZW5OYW1lIiwiVXIiLCJYcCIsIl9fZm9yd2FyZF9yZWZfXyIsIldyIiwicSIsIkZpIiwiViIsInRva2VuIiwicHJvdmlkZWRJbiIsImZhY3RvcnkiLCJHYyIsInByb3ZpZGVycyIsImltcG9ydHMiLCJibiIsInRoIiwicXIiLCJlaCIsIm5oIiwiX2kiLCJGciIsIsm1cHJvdiIsIsm1aW5qIiwiTiIsIl9kZXNjIiwibmdNZXRhZGF0YU5hbWUiLCJfX05HX0VMRU1FTlRfSURfXyIsIm11bHRpIiwiamkiLCLJtXByb3ZpZGVycyIsIlZpIiwiybVjbXAiLCJIaSIsIsm1ZGlyIiwiQmkiLCLJtXBpcGUiLCIkaSIsIsm1bW9kIiwidm4iLCLJtWZhYyIsIm10IiwiQmMiLCJfX05HX0VOVl9JRF9fIiwiVWkiLCJHciIsIlJlIiwiV2kiLCJ6YyIsIiR0IiwiU3RyaW5nIiwiUWMiLCJuZ0Vycm9yQ29kZSIsInJoIiwibmdFcnJvck1lc3NhZ2UiLCJvaCIsIm5nVG9rZW5QYXRoIiwicWkiLCJaYyIsInpyIiwiaWgiLCJNaSIsIlljIiwiWSIsIkdpIiwic2giLCJmdCIsImFoIiwiTmkiLCJpbmplY3RvciIsInJldHJpZXZlIiwicHQiLCJnZXQiLCJjaCIsImxoIiwib3B0aW9uYWwiLCJFZSIsIkUiLCJob3N0Iiwic2VsZiIsInNraXBTZWxmIiwiU2kiLCJ1aCIsInFlIiwiS2MiLCJKYyIsImZsYXQiLCJOdW1iZXIiLCJQT1NJVElWRV9JTkZJTklUWSIsIlFyIiwiemkiLCJfbiIsIlhjIiwiZWwiLCJaciIsIlV0IiwiWXIiLCJkaCIsIlplIiwiSyIsIld0IiwiUWkiLCJaaSIsIkVuIiwiTW4iLCJ0bCIsInByb3ZpZGUiLCJ1c2VWYWx1ZSIsIm5sIiwiWWkiLCLJtWZyb21OZ01vZHVsZSIsIlNldCIsImpyIiwicmwiLCJuZ01vZHVsZSIsIktpIiwic3RhbmRhbG9uZSIsImhhcyIsImRlcGVuZGVuY2llcyIsInVzZUZhY3RvcnkiLCJkZXBzIiwiZmgiLCJvbCIsInBoIiwidXNlRXhpc3RpbmciLCJoaCIsImh0IiwiaWwiLCJ1c2VDbGFzcyIsIkppIiwiTHIiLCIkYyIsImJpIiwiTm4iLCJyZSIsImd0IiwicGFyZW50Iiwic2NvcGVzIiwicmVjb3JkcyIsIk1hcCIsIl9uZ09uRGVzdHJveUhvb2tzIiwiX29uRGVzdHJveUhvb2tzIiwiZGVzdHJveWVkIiwiX2Rlc3Ryb3llZCIsImluamVjdG9yRGVmVHlwZXMiLCJBaSIsInByb2Nlc3NQcm92aWRlciIsInNldCIsIkJ0IiwiZGVzdHJveSIsInluIiwibmdPbkRlc3Ryb3kiLCJjbGVhciIsIm9uRGVzdHJveSIsInJlbW92ZU9uRGVzdHJveSIsInJ1bkluQ29udGV4dCIsIkVoIiwiaW5qZWN0YWJsZURlZkluU2NvcGUiLCJ4aSIsImh5ZHJhdGUiLCJyZXNvbHZlSW5qZWN0b3JJbml0aWFsaXplcnMiLCJtaCIsInZoIiwiZ2giLCJYaSIsInloIiwiS3IiLCJzbCIsImxlIiwieSIsIkkiLCJIIiwib2UiLCJKIiwieXQiLCJxdCIsIkwiLCJrZSIsInVlIiwiTyIsIkd0IiwiZXMiLCJ2dCIsIloiLCJZZSIsIkV0IiwiQ2UiLCJPZSIsInRzIiwiU2UiLCJKciIsIkdlIiwibmUiLCJJdCIsIktlIiwiUCIsImFsIiwibnMiLCJKZSIsIlNuIiwiRHQiLCJGIiwiUGUiLCJkZSIsInJzIiwiZmxhZ3MiLCJMZSIsImNvbXBvbmVudE9mZnNldCIsInhuIiwid2UiLCJ0ZW1wbGF0ZSIsInp0IiwiQ3QiLCJvcyIsImNsIiwiaWUiLCJmZSIsImluZGV4IiwiWHIiLCJkYXRhIiwiZW8iLCJzcyIsImJsdWVwcmludCIsInNlIiwibGwiLCJ0byIsInVsIiwiYWUiLCJhcyIsImNzIiwid3QiLCJkbCIsIkFuIiwibm8iLCJjaGFuZ2VEZXRlY3Rpb25TY2hlZHVsZXIiLCJub3RpZnkiLCJ6ZSIsImxzIiwiZmwiLCJ1cyIsImRzIiwicGwiLCJmaXJzdENyZWF0ZVBhc3MiLCJDIiwibEZyYW1lIiwiTWwiLCJiaW5kaW5nc0VuYWJsZWQiLCJza2lwSHlkcmF0aW9uUm9vdFROb2RlIiwiUmkiLCJobCIsImVsZW1lbnREZXB0aENvdW50IiwiZ2wiLCJmcyIsInBzIiwiaHMiLCJncyIsIm1zIiwibFZpZXciLCJqIiwidFZpZXciLCJtbCIsImNvbnRleHRMVmlldyIsInlsIiwiRyIsInlzIiwidHlwZSIsImN1cnJlbnRUTm9kZSIsInZsIiwiaXNQYXJlbnQiLCJRdCIsInZzIiwiRXMiLCJFbCIsIklzIiwiSW4iLCJSbiIsImJpbmRpbmdSb290SW5kZXgiLCJiaW5kaW5nU3RhcnRJbmRleCIsIklsIiwiYmluZGluZ0luZGV4IiwiRGwiLCJUdCIsInJvIiwiQ2wiLCJpbkkxOG4iLCJ3bCIsIm9vIiwiVGwiLCJjdXJyZW50RGlyZWN0aXZlSW5kZXgiLCJibCIsIkRzIiwiY3VycmVudFF1ZXJ5SW5kZXgiLCJpbyIsIkloIiwiZGVjbFROb2RlIiwiQ3MiLCJfbCIsInNvIiwiZmlyc3RDaGlsZCIsImNoaWxkIiwic2VsZWN0ZWRJbmRleCIsImN1cnJlbnROYW1lc3BhY2UiLCJObCIsIndzIiwiYW8iLCJTbCIsIlRlIiwiWGUiLCJjbyIsInhsIiwiQWwiLCJEaCIsIlJsIiwia2wiLCJsbyIsInVvIiwia2kiLCJUcyIsIkllIiwiVEhST1dfSUZfTk9UX0ZPVU5EIiwiTlVMTCIsIlp0IiwiRmUiLCJDaCIsIlZyIiwiX2xWaWV3IiwiT2wiLCJQbCIsImJ0IiwidGFza0lkIiwicGVuZGluZ1Rhc2tzIiwicGVuZGluZ1Rhc2siLCJkZWJ1Z1Rhc2tUcmFja2VyIiwiaGFzUGVuZGluZ1Rhc2tzIiwiaGFzUGVuZGluZ1Rhc2tzT2JzZXJ2YWJsZSIsImRlbGV0ZSIsInNpemUiLCJPaSIsIl9faXNBc3luYyIsImRlc3Ryb3lSZWYiLCJlbWl0Iiwid3JhcEluVGltZW91dCIsIk5lIiwiSHIiLCJicyIsImNhbmNlbEFuaW1hdGlvbkZyYW1lIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwiTGwiLCJxdWV1ZU1pY3JvdGFzayIsIl9zIiwiRG4iLCJ3aCIsIkRlIiwiaGFzUGVuZGluZ01hY3JvdGFza3MiLCJoYXNQZW5kaW5nTWljcm90YXNrcyIsImlzU3RhYmxlIiwib25VbnN0YWJsZSIsIm9uTWljcm90YXNrRW1wdHkiLCJvblN0YWJsZSIsIm9uRXJyb3IiLCJlbmFibGVMb25nU3RhY2tUcmFjZSIsInNob3VsZENvYWxlc2NlRXZlbnRDaGFuZ2VEZXRlY3Rpb24iLCJzaG91bGRDb2FsZXNjZVJ1bkNoYW5nZURldGVjdGlvbiIsInNjaGVkdWxlSW5Sb290Wm9uZSIsIlpvbmUiLCJhc3NlcnRab25lUGF0Y2hlZCIsIl9uZXN0aW5nIiwiX291dGVyIiwiX2lubmVyIiwiY3VycmVudCIsIlRhc2tUcmFja2luZ1pvbmVTcGVjIiwiZm9yayIsImxvbmdTdGFja1RyYWNlWm9uZVNwZWMiLCJjYWxsYmFja1NjaGVkdWxlZCIsIl9oIiwiaXNJbkFuZ3VsYXJab25lIiwiYXNzZXJ0SW5Bbmd1bGFyWm9uZSIsImFzc2VydE5vdEluQW5ndWxhclpvbmUiLCJydW4iLCJydW5UYXNrIiwic2NoZWR1bGVFdmVudFRhc2siLCJUaCIsImNhbmNlbFRhc2siLCJydW5HdWFyZGVkIiwicnVuT3V0c2lkZUFuZ3VsYXIiLCJNcyIsImJoIiwiaXNDaGVja1N0YWJsZVJ1bm5pbmciLCJQaSIsInJvb3QiLCJkZWxheUNoYW5nZURldGVjdGlvbkZvckV2ZW50c0RlbGVnYXRlIiwicHJvcGVydGllcyIsIm9uSW52b2tlVGFzayIsIk1oIiwiaW52b2tlVGFzayIsIlVjIiwiV2MiLCJvbkludm9rZSIsImludm9rZSIsIk5oIiwib25IYXNUYXNrIiwiaGFzVGFzayIsImNoYW5nZSIsIl9oYXNQZW5kaW5nTWljcm90YXNrcyIsIm1pY3JvVGFzayIsIm1hY3JvVGFzayIsIm9uSGFuZGxlRXJyb3IiLCJoYW5kbGVFcnJvciIsIkNuIiwiRmwiLCJ4ZSIsIl9jb25zb2xlIiwiY29uc29sZSIsImV0IiwiamwiLCJTaCIsImRlZmF1bHRWaWV3IiwicmVhc29uIiwicHJldmVudERlZmF1bHQiLCJjYXVzZSIsInNldHVwRXZlbnRMaXN0ZW5lcnMiLCJ4aCIsIk5zIiwidXBkYXRlIiwiYXNSZWFkb25seSIsImZvIiwicmVhZG9ubHlGbiIsImtuIiwidmlldyIsIm5vZGUiLCJBaCIsIkFlIiwiT24iLCJTcyIsInhzIiwiaW50ZXJuYWxQZW5kaW5nVGFza3MiLCJlcnJvckhhbmRsZXIiLCJmaW5hbGx5IiwicG8iLCJMaSIsImRpcnR5RWZmZWN0Q291bnQiLCJxdWV1ZXMiLCJlbnF1ZXVlIiwiem9uZSIsImZsdXNoUXVldWUiLCJCciIsIlZsIiwibWFudWFsQ2xlYW51cCIsIk9oIiwiUGgiLCJvbkRlc3Ryb3lGbnMiLCJIbCIsImNsZWFudXBGbnMiLCJSaCIsIm5vdGlmaWVyIiwia2giLCJCbCIsInpuIiwiJGgiLCJtdSIsImFwcGx5VmFsdWVUb0lucHV0U2lnbmFsIiwiRG8iLCJwcmV2aW91c1ZhbHVlIiwiY3VycmVudFZhbHVlIiwiZmlyc3RDaGFuZ2UiLCJpc0ZpcnN0Q2hhbmdlIiwiVWgiLCLJtcm1TmdPbkNoYW5nZXNGZWF0dXJlSW1wbCIsInl1IiwibmdJbmhlcml0IiwibmdPbkNoYW5nZXMiLCJzZXRJbnB1dCIsInFoIiwiV2giLCJFdSIsInByZXZpb3VzIiwiZGVjbGFyZWRJbnB1dHMiLCJHaCIsInZ1IiwiJGwiLCJ4IiwicHJvZmlsZXIiLCJNIiwiVGVtcGxhdGVDcmVhdGVTdGFydCIsIlRlbXBsYXRlQ3JlYXRlRW5kIiwiVGVtcGxhdGVVcGRhdGVTdGFydCIsIlRlbXBsYXRlVXBkYXRlRW5kIiwiTGlmZWN5Y2xlSG9va1N0YXJ0IiwiTGlmZWN5Y2xlSG9va0VuZCIsIk91dHB1dFN0YXJ0IiwiT3V0cHV0RW5kIiwiQm9vdHN0cmFwQXBwbGljYXRpb25TdGFydCIsIkJvb3RzdHJhcEFwcGxpY2F0aW9uRW5kIiwiQm9vdHN0cmFwQ29tcG9uZW50U3RhcnQiLCJCb290c3RyYXBDb21wb25lbnRFbmQiLCJDaGFuZ2VEZXRlY3Rpb25TdGFydCIsIkNoYW5nZURldGVjdGlvbkVuZCIsIkNoYW5nZURldGVjdGlvblN5bmNTdGFydCIsIkNoYW5nZURldGVjdGlvblN5bmNFbmQiLCJBZnRlclJlbmRlckhvb2tzU3RhcnQiLCJBZnRlclJlbmRlckhvb2tzRW5kIiwiQ29tcG9uZW50U3RhcnQiLCJDb21wb25lbnRFbmQiLCJEZWZlckJsb2NrU3RhdGVTdGFydCIsIkRlZmVyQmxvY2tTdGF0ZUVuZCIsIkR5bmFtaWNDb21wb25lbnRTdGFydCIsIkR5bmFtaWNDb21wb25lbnRFbmQiLCJIb3N0QmluZGluZ3NVcGRhdGVTdGFydCIsIkhvc3RCaW5kaW5nc1VwZGF0ZUVuZCIsInpoIiwibmdPbkluaXQiLCJuZ0RvQ2hlY2siLCJwcmVPcmRlckhvb2tzIiwicHJlT3JkZXJDaGVja0hvb2tzIiwiSXUiLCJkaXJlY3RpdmVTdGFydCIsImRpcmVjdGl2ZUVuZCIsIm5nQWZ0ZXJDb250ZW50SW5pdCIsIm5nQWZ0ZXJDb250ZW50Q2hlY2tlZCIsIm5nQWZ0ZXJWaWV3SW5pdCIsIm5nQWZ0ZXJWaWV3Q2hlY2tlZCIsImNvbnRlbnRIb29rcyIsImNvbnRlbnRDaGVja0hvb2tzIiwidmlld0hvb2tzIiwidmlld0NoZWNrSG9va3MiLCJkZXN0cm95SG9va3MiLCJtbyIsIkR1IiwieW8iLCJBcyIsIlFoIiwiVWwiLCJLdCIsIk10IiwiaW5qZWN0SW1wbCIsInJlc29sdmluZyIsImNhblNlZVZpZXdQcm92aWRlcnMiLCJjb21wb25lbnRQcm92aWRlcnMiLCJwcm92aWRlckZhY3RvcnkiLCJaaCIsIlloIiwiS2giLCJzZXRBdHRyaWJ1dGUiLCJKaCIsInNldFByb3BlcnR5IiwiQ3UiLCJjaGFyQ29kZUF0IiwiSnQiLCJXbCIsInd1IiwiQ28iLCJYaCIsIndvIiwiJHMiLCJUbyIsImVnIiwiVHUiLCJidSIsInRnIiwiYmUiLCJuZyIsImJvIiwiX3UiLCJpbmplY3RvckluZGV4IiwiUnMiLCJ5YSIsIkF1IiwiVXMiLCJyZyIsImNsYXNzZXMiLCJzdHlsZXMiLCJhdHRycyIsIk11IiwiTnUiLCJTdSIsImNnIiwieHUiLCJpZyIsIkdsIiwicWwiLCJvZyIsInZvIiwiam4iLCJwcm92aWRlckluZGV4ZXMiLCJzZyIsIl90IiwiX3ROb2RlIiwiYWciLCJXcyIsIlJ1IiwibGciLCJybiIsIlFuIiwibmF0aXZlRWxlbWVudCIsInVnIiwiZGciLCJfcmVzdWx0cyIsIl9vIiwiX2VtaXREaXN0aW5jdENoYW5nZXNPbmx5IiwiX29uRGlydHkiLCJfY2hhbmdlc0RldGVjdGVkIiwiX2NoYW5nZXMiLCJsYXN0IiwiY2hhbmdlcyIsImZpbHRlciIsImZpbmQiLCJzb21lIiwidG9BcnJheSIsIm5vdGlmeU9uQ2hhbmdlcyIsIm9uRGlydHkiLCJzZXREaXJ0eSIsImt1IiwidmEiLCJPblB1c2giLCJFYWdlciIsIkRlZmF1bHQiLCJPdSIsImZnIiwicGciLCJoZyIsInFzIiwiemwiLCJYdCIsIlB1IiwiRnUiLCJMdSIsImdnIiwibWciLCJ5ZyIsInZnIiwianUiLCJFZyIsIklnIiwiYm9keSIsInF1ZXJ5U2VsZWN0b3IiLCJnZXRBdHRyaWJ1dGUiLCJWdSIsIkh1IiwiQnUiLCIkdSIsIkRnIiwiQ2ciLCJfc3Rhc2hFdmVudExpc3RlbmVySW1wbCIsIndnIiwiVW8iLCJUZyIsIl9yZXRyaWV2ZUh5ZHJhdGlvbkluZm9JbXBsIiwiVXUiLCJXdSIsImNvbnRlbnRRdWVyaWVzIiwiR3MiLCJxdSIsIk50IiwiRW11bGF0ZWQiLCJOb25lIiwiU2hhZG93RG9tIiwiRXhwZXJpbWVudGFsSXNvbGF0ZWRTaGFkb3dEb20iLCJobyIsImJnIiwidHJ1c3RlZFR5cGVzIiwiY3JlYXRlUG9saWN5IiwiY3JlYXRlSFRNTCIsImNyZWF0ZVNjcmlwdCIsImNyZWF0ZVNjcmlwdFVSTCIsIlFsIiwiTW8iLCJjaGFuZ2luZ1RoaXNCcmVha3NBcHBsaWNhdGlvblNlY3VyaXR5IiwiWm4iLCJFYSIsIkd1IiwiZ2V0VHlwZU5hbWUiLCJfZyIsInp1IiwibWF0Y2giLCJNZyIsImNyZWF0ZVRleHQiLCJOZyIsInNldFZhbHVlIiwiUXUiLCJjcmVhdGVFbGVtZW50IiwiTm8iLCJpbnNlcnRCZWZvcmUiLCJadSIsImFwcGVuZENoaWxkIiwiWmwiLCJZdSIsInJlbW92ZUNoaWxkIiwiU2ciLCJ4ZyIsInJlbW92ZUF0dHJpYnV0ZSIsIkt1IiwibWVyZ2VkQXR0cnMiLCJXbyIsIk5PTkUiLCJIVE1MIiwiU1RZTEUiLCJTQ1JJUFQiLCJVUkwiLCJSRVNPVVJDRV9VUkwiLCJKdSIsImVkIiwic2FuaXRpemUiLCJYdSIsIkFnIiwiUmciLCJrZyIsIk9nIiwic2FuaXRpemVyIiwidGQiLCJQZyIsIm5kIiwiTGciLCJ0b0xvd2VyQ2FzZSIsIklhIiwiRmciLCJqZyIsIkJnIiwicGUiLCJWZyIsIiRnIiwicmQiLCJIZyIsIlVnIiwiWWwiLCJ0cmltIiwiV2ciLCJxZyIsIkdnIiwiWCIsIkRhIiwiemciLCJxdWVyaWVzIiwidmlld1F1ZXJ5IiwiZmlsbCIsImV4cGFuZG9TdGFydEluZGV4IiwiaG9zdEJpbmRpbmdPcENvZGVzIiwiZmlyc3RVcGRhdGVQYXNzIiwic3RhdGljVmlld1F1ZXJpZXMiLCJzdGF0aWNDb250ZW50UXVlcmllcyIsImNvbXBvbmVudHMiLCJkaXJlY3RpdmVSZWdpc3RyeSIsInBpcGVSZWdpc3RyeSIsInNjaGVtYXMiLCJjb25zdHMiLCJpbmNvbXBsZXRlRmlyc3RQYXNzIiwic3NySWQiLCJRZyIsImRlY2xzIiwidmFycyIsImRpcmVjdGl2ZURlZnMiLCJwaXBlRGVmcyIsIkNhIiwiWmciLCJyZW5kZXJlckZhY3RvcnkiLCJ3YSIsIm9kIiwiY3JlYXRlUmVuZGVyZXIiLCJzaWduYWxzIiwib25QdXNoIiwiWWciLCJzZCIsInFvIiwiU2lnbmFsQmFzZWQiLCJIYXNEZWNvcmF0b3JJbnB1dFRyYW5zZm9ybSIsInpzIiwiaW5wdXRzIiwidHJhbnNmb3JtRm4iLCJTbyIsIkltcG9ydGFudCIsIkRhc2hDYXNlIiwiS2ciLCJUYSIsIldNIiwiZG9jdW1lbnQiLCJkb2N1bWVudEVsZW1lbnQiLCJnZXRBbmltYXRpb25zIiwiUXMiLCJXZWFrTWFwIiwiWnMiLCJXZWFrU2V0IiwiSmciLCJwYXJlbnROb2RlIiwicHJldmlvdXNTaWJsaW5nIiwiZGlzcGF0Y2hFdmVudCIsIkN1c3RvbUV2ZW50IiwiZGV0YWlsIiwiY2FuY2VsIiwiWGciLCJWbiIsIkdvIiwiQ0hBTkdFX0RFVEVDVElPTiIsIkFGVEVSX05FWFRfUkVOREVSIiwiS2wiLCJBdCIsInBlcmZvcm1hbmNlIiwibWFyayIsImZlYXR1cmUiLCJiYSIsImltcGwiLCJhZCIsImNkIiwibmdab25lIiwic2VxdWVuY2VzIiwiZGVmZXJyZWRSZWdpc3RyYXRpb25zIiwiZXhlY3V0aW5nIiwiZXJyb3JlZE9yRGVzdHJveWVkIiwiaG9va3MiLCJwaXBlbGluZWRWYWx1ZSIsIm1heWJlVHJhY2UiLCJzbmFwc2hvdCIsImFmdGVyUnVuIiwib25jZSIsInJlZ2lzdGVyIiwiYWRkU2VxdWVuY2UiLCJ1bnJlZ2lzdGVyIiwieG8iLCJ1bnJlZ2lzdGVyT25EZXN0cm95IiwiZGlzcG9zZSIsImVtIiwibm0iLCJ0bSIsImVhcmx5UmVhZCIsIndyaXRlIiwibWl4ZWRSZWFkV3JpdGUiLCJsZCIsInF1ZXVlIiwiaXNTY2hlZHVsZWQiLCJ1ZCIsImRldGFjaGVkTGVhdmVBbmltYXRpb25GbnMiLCJybSIsIm9tIiwiYW5pbWF0ZUZucyIsIkpsIiwiZW50ZXIiLCJZdCIsImxlYXZlIiwiWGwiLCJkZXN0cm95Tm9kZSIsImdtIiwiaW0iLCJkZCIsInNtIiwiUW8iLCJhbSIsImtzIiwiX2EiLCJ6byIsInVtIiwibG0iLCJkZXRhY2hWaWV3IiwicHJvbWlzZSIsInJ1bm5pbmciLCJhbGxTZXR0bGVkIiwiY20iLCJmZCIsImRtIiwiZW5jYXBzdWxhdGlvbiIsInBkIiwicG0iLCJmbSIsImV1IiwiTWEiLCJMbiIsIllzIiwiaGQiLCJwcm9qZWN0aW9uIiwiTmEiLCJnZCIsInByb2plY3Rpb25OZXh0IiwiaG0iLCJtbSIsImFkZENsYXNzIiwicmVtb3ZlQ2xhc3MiLCJyZW1vdmVTdHlsZSIsImVuZHNXaXRoIiwic2V0U3R5bGUiLCJtZCIsIlNhIiwid20iLCJUbSIsIlpvIiwibG9jYWxOYW1lcyIsInltIiwic2VsZWN0Um9vdEVsZW1lbnQiLCJ2bSIsIkVtIiwiX2FwcGx5Um9vdEVsZW1lbnRUcmFuc2Zvcm1JbXBsIiwiSW0iLCJEbSIsInhhIiwiQ20iLCJ5ZCIsImluaXRpYWxJbnB1dHMiLCJObSIsImhvc3RCaW5kaW5ncyIsImhvc3RWYXJzIiwiaG9zdEF0dHJzIiwiYm0iLCJ2ZCIsInNlbGVjdG9ycyIsInVuc2hpZnQiLCJfbSIsIk1tIiwiRWQiLCJJZCIsIlNtIiwiaG9zdERpcmVjdGl2ZUlucHV0cyIsInhtIiwiQW0iLCJBYSIsImZpbmlzaFZpZXdDcmVhdGlvbiIsIlJtIiwiWW4iLCJlbWJlZGRlZFZpZXdJbmplY3RvciIsImRlaHlkcmF0ZWRWaWV3IiwiY3JlYXRlRW1iZWRkZWRWaWV3IiwiZW4iLCJIbiIsIkRkIiwiQ2QiLCJ3ZCIsImttIiwiT20iLCJMbSIsIlBtIiwiRm0iLCJqbSIsIlRkIiwiYmQiLCJWbSIsIl9kIiwiYmVnaW4iLCJIbSIsImVuZCIsIktzIiwiQm0iLCIkbSIsIk1kIiwiV20iLCJTZCIsIk5kIiwiVW0iLCJSYSIsInhkIiwiQWQiLCJLbiIsInFtIiwiUmQiLCJCbiIsImtkIiwiaW5zZXJ0VmlldyIsInR0IiwiX2NkUmVmSW5qZWN0aW5nVmlldyIsIl9hcHBSZWYiLCJfYXR0YWNoZWRUb1ZpZXdDb250YWluZXIiLCJleGhhdXN0aXZlIiwicm9vdE5vZGVzIiwiY29udGV4dCIsIm1hcmtGb3JDaGVjayIsImRldGFjaCIsInJlYXR0YWNoIiwiZGV0ZWN0Q2hhbmdlcyIsImNoZWNrTm9DaGFuZ2VzIiwiYXR0YWNoVG9WaWV3Q29udGFpbmVyUmVmIiwiZGV0YWNoRnJvbUFwcFJlZiIsImF0dGFjaFRvQXBwUmVmIiwiJG4iLCJfZGVjbGFyYXRpb25MVmlldyIsIl9kZWNsYXJhdGlvblRDb250YWluZXIiLCJlbGVtZW50UmVmIiwiR20iLCJjcmVhdGVFbWJlZGRlZFZpZXdJbXBsIiwiWW8iLCJzbiIsInptIiwiWm0iLCJRbSIsInByZXYiLCJpbnNlcnRCZWZvcmVJbmRleCIsImRpcmVjdGl2ZVN0eWxpbmdMYXN0IiwiY29udHJvbERpcmVjdGl2ZUluZGV4IiwiY3VzdG9tQ29udHJvbEluZGV4IiwicHJvcGVydHlCaW5kaW5ncyIsIm91dHB1dHMiLCJob3N0RGlyZWN0aXZlT3V0cHV0cyIsImRpcmVjdGl2ZVRvSW5kZXgiLCJzdHlsZXNXaXRob3V0SG9zdCIsInJlc2lkdWFsU3R5bGVzIiwiY2xhc3Nlc1dpdGhvdXRIb3N0IiwicmVzaWR1YWxDbGFzc2VzIiwiY2xhc3NCaW5kaW5ncyIsInN0eWxlQmluZGluZ3MiLCJZbSIsIkttIiwibmV4dFNpYmxpbmciLCJKbSIsIl9maW5kTWF0Y2hpbmdEZWh5ZHJhdGVkVmlld0ltcGwiLCJYbSIsIl9maW5kQW5kUmVjb25jaWxlTWF0Y2hpbmdEZWh5ZHJhdGVkVmlld3NJbXBsIiwiQW8iLCJPZCIsIlBkIiwiS28iLCJKcyIsInJlc29sdmVDb21wb25lbnRGYWN0b3J5IiwiSm4iLCJVbiIsImV5IiwidHkiLCJMZCIsIkVvIiwiWHMiLCJwYXJlbnRJbmplY3RvciIsIlJvIiwiWG4iLCJueSIsIkZkIiwicmVzb2x2ZUhvc3REaXJlY3RpdmVzIiwiaXkiLCJyeSIsIm95IiwiZHkiLCJ2aWV3UHJvdmlkZXJzUmVzb2x2ZXIiLCJwcm92aWRlcnNSZXNvbHZlciIsImF5IiwidXkiLCJzeSIsInR1IiwicnUiLCJudSIsImpkIiwiY3kiLCJseSIsImV4cG9ydEFzIiwiVmQiLCJlbGVtZW50U3RhcnQiLCJIZCIsImVsZW1lbnRFbmQiLCJmeSIsImthIiwiJGQiLCJCZCIsIk9hIiwicHkiLCJnZSIsIlVkIiwiSW8iLCJvdSIsIl9fbmdOZXh0TGlzdGVuZXJGbl9fIiwiV2QiLCJneSIsIl9fbmdMYXN0TGlzdGVuZXJGbl9fIiwibGlzdGVuIiwiaHkiLCJxZCIsInN0YXJ0c1dpdGgiLCJpdSIsImVhIiwiR2QiLCJkZWJ1Z0luZm8iLCJjbGFzc05hbWUiLCJrbyIsIlN0IiwibXkiLCJwcm9wTmFtZSIsInRlbXBsYXRlTmFtZSIsImlzU2lnbmFsIiwidHJhbnNmb3JtIiwieXkiLCJ2eSIsImdldFN0YW5kYWxvbmVJbmplY3RvciIsIkV5IiwibmdSZWZsZWN0IiwidHJhY2luZ1NlcnZpY2UiLCJJeSIsInpkIiwiY29tcG9uZW50RGVmIiwic2VsZWN0b3IiLCJjb21wb25lbnRUeXBlIiwibmdDb250ZW50U2VsZWN0b3JzIiwiaXNCb3VuZFRvTW9kdWxlIiwiY2FjaGVkSW5wdXRzIiwiY2FjaGVkT3V0cHV0cyIsImNvbXBvbmVudENyZWF0ZSIsImNyZWF0ZUNvbXBvbmVudFJlZiIsIkR5Iiwic3UiLCJiaW5kaW5ncyIsInd5IiwiT28iLCJyZXF1aXJlZFZhcnMiLCJ0YXJnZXRJZHgiLCJDeSIsIl9yb290TFZpZXciLCJfaGFzSW5wdXRCaW5kaW5ncyIsImluc3RhbmNlIiwiaG9zdFZpZXciLCJjaGFuZ2VEZXRlY3RvclJlZiIsImxvY2F0aW9uIiwicHJldmlvdXNJbnB1dFZhbHVlcyIsIkpvIiwiVHkiLCJRZCIsInRhIiwiX2xDb250YWluZXIiLCJfaG9zdFROb2RlIiwiX2hvc3RMVmlldyIsImVsZW1lbnQiLCJhdSIsImluc2VydEltcGwiLCJjcmVhdGVDb21wb25lbnQiLCJwcm9qZWN0YWJsZU5vZGVzIiwiZW52aXJvbm1lbnRJbmplY3RvciIsIm5nTW9kdWxlUmVmIiwiZGlyZWN0aXZlcyIsImluc2VydCIsIl9hZGp1c3RJbmRleCIsIk9zIiwibW92ZSIsIl95IiwiYnkiLCJjcmVhdGVDb21tZW50IiwiU3kiLCJNeSIsIl9wb3B1bGF0ZURlaHlkcmF0ZWRWaWV3c0luTENvbnRhaW5lciIsIk55IiwibmEiLCJxdWVyeUxpc3QiLCJtYXRjaGVzIiwiY2xvbmUiLCJyYSIsImdldEJ5SW5kZXgiLCJpbmRleEluRGVjbGFyYXRpb25WaWV3IiwiZGlydHlRdWVyaWVzV2l0aE1hdGNoZXMiLCJQYSIsIlBvIiwicHJlZGljYXRlIiwiRnkiLCJvYSIsImVtYmVkZGVkVFZpZXciLCJ0cmFjayIsImlhIiwibWV0YWRhdGEiLCJjcm9zc2VzTmdUZW1wbGF0ZSIsIl9kZWNsYXJhdGlvbk5vZGVJbmRleCIsIl9hcHBsaWVzVG9OZXh0Tm9kZSIsImlzQXBwbHlpbmdUb05vZGUiLCJtYXRjaFROb2RlIiwiYWRkTWF0Y2giLCJtYXRjaFROb2RlV2l0aFJlYWRPcHRpb24iLCJ4eSIsIkF5IiwiUnkiLCJreSIsIlpkIiwic2EiLCJPeSIsIllkIiwiUHkiLCJLZCIsIkx5IiwiankiLCJzcGxpdCIsIlZ5IiwidG4iLCJKZCIsIkxvIiwibmdNb2R1bGVUeXBlIiwiX3BhcmVudCIsIl9ib290c3RyYXBDb21wb25lbnRzIiwiX3IzSW5qZWN0b3IiLCJkZXN0cm95Q2JzIiwiY29tcG9uZW50RmFjdG9yeVJlc29sdmVyIiwiYm9vdHN0cmFwIiwiRm8iLCJtb2R1bGVUeXBlIiwiV24iLCJkZWJ1Z05hbWUiLCJydW5FbnZpcm9ubWVudEluaXRpYWxpemVycyIsIlhkIiwiSHkiLCJfaW5qZWN0b3IiLCJjYWNoZWRJbmplY3RvcnMiLCJnZXRPckNyZWF0ZVN0YW5kYWxvbmVJbmplY3RvciIsInZhbHVlcyIsIkJ5IiwiZWYiLCJjaGFuZ2VEZXRlY3Rpb24iLCJnZXRFeHRlcm5hbFN0eWxlcyIsInRmIiwiY3UiLCIkeSIsIlF5IiwiVXkiLCJkZWNsYXJhdGlvbnMiLCJleHBvcnRzIiwidHJhbnNpdGl2ZUNvbXBpbGVTY29wZXMiLCJXeSIsInF5IiwiR3kiLCJ6eSIsInB1cmUiLCJpbnB1dENvbmZpZyIsImZlYXR1cmVzIiwiaG9zdERpcmVjdGl2ZXMiLCJjb250cm9sRGVmIiwiSlNPTiIsInN0cmluZ2lmeSIsImdldE93blByb3BlcnR5TmFtZXMiLCJpbXVsIiwiWnkiLCJuZiIsIlBzIiwiZXYiLCJKeSIsIlh5IiwiWXkiLCJhbmltYXRpb24iLCJjb25jYXQiLCJLeSIsInJmIiwibnYiLCJ0diIsInFuIiwib2YiLCJydiIsIm92IiwibG9nIiwid2FybiIsInNmIiwiTGEiLCJhZiIsIkZhIiwiaXYiLCJqYSIsInJlamVjdCIsImluaXRpYWxpemVkIiwiZG9uZVByb21pc2UiLCJhcHBJbml0cyIsInJ1bkluaXRpYWxpemVycyIsImFsbCIsImNmIiwibGYiLCJ1ZiIsInN2IiwiWG8iLCJfcnVubmluZ1RpY2siLCJfZGVzdHJveUxpc3RlbmVycyIsIl92aWV3cyIsImludGVybmFsRXJyb3JIYW5kbGVyIiwiYWZ0ZXJSZW5kZXJNYW5hZ2VyIiwiem9uZWxlc3NFbmFibGVkIiwicm9vdEVmZmVjdFNjaGVkdWxlciIsImRpcnR5RmxhZ3MiLCJ0cmFjaW5nU25hcHNob3QiLCJhbGxUZXN0Vmlld3MiLCJhdXRvRGV0ZWN0VGVzdFZpZXdzIiwiaW5jbHVkZUFsbFRlc3RWaWV3cyIsImFmdGVyVGljayIsImFsbFZpZXdzIiwiY29tcG9uZW50VHlwZXMiLCJpbnRlcm5hbFBlbmRpbmdUYXNrIiwid2hlblN0YWJsZSIsIl9yZW5kZXJlckZhY3RvcnkiLCJib290c3RyYXBJbXBsIiwicmVnaXN0ZXJBcHBsaWNhdGlvbiIsIkZuIiwidW5yZWdpc3RlckFwcGxpY2F0aW9uIiwiX2xvYWRDb21wb25lbnQiLCJ0aWNrIiwiX3RpY2siLCJ0aWNrSW1wbCIsInN5bmNocm9uaXplIiwic3luY2hyb25pemVPbmNlIiwic3luY0RpcnR5RmxhZ3NXaXRoVmlld3MiLCJhdHRhY2hWaWV3Iiwidmlld0NvdW50IiwiZGYiLCJhdiIsImFhIiwidXBkYXRlVmFsdWUiLCJzd2FwIiwibWluIiwiYXR0YWNoIiwiTHMiLCJjdiIsInJpIiwiam8iLCJ1dSIsImNhIiwibHUiLCJrdk1hcCIsIl92TWFwIiwibHYiLCJWYSIsInV2IiwiVm8iLCJmYSIsImxhIiwibENvbnRhaW5lciIsIiRpbXBsaWNpdCIsIiRpbmRleCIsIiRjb3VudCIsImR2IiwidWEiLCJoYXNFbXB0eUJsb2NrIiwidHJhY2tCeUZuIiwibGl2ZUNvbGxlY3Rpb24iLCJmdiIsImRhIiwiaG9zdExWaWV3IiwidGVtcGxhdGVUTm9kZSIsIm9wZXJhdGlvbnNDb3VudGVyIiwibmVlZHNJbmRleFVwZGF0ZSIsImdldExWaWV3IiwiaHYiLCJndiIsIm12IiwidXBkYXRlSW5kZXhlcyIsInl2IiwicHYiLCJmZiIsInBhIiwiSG8iLCJkdSIsImdmIiwiSGEiLCJwZiIsIkJhIiwiJGEiLCJoZiIsIl9sb2NhdGVPckNyZWF0ZUVsZW1lbnROb2RlIiwidnYiLCJtZiIsIlBuIiwiRXYiLCJmbG9vciIsInJlcGxhY2UiLCJJdiIsIkZzIiwiRHYiLCJDdiIsImZ1IiwiY29tbW9uIiwibG9jYWxlcyIsInlmIiwiTG9jYWxlSWQiLCJEYXlQZXJpb2RzRm9ybWF0IiwiRGF5UGVyaW9kc1N0YW5kYWxvbmUiLCJEYXlzRm9ybWF0IiwiRGF5c1N0YW5kYWxvbmUiLCJNb250aHNGb3JtYXQiLCJNb250aHNTdGFuZGFsb25lIiwiRXJhcyIsIkZpcnN0RGF5T2ZXZWVrIiwiV2Vla2VuZFJhbmdlIiwiRGF0ZUZvcm1hdCIsIlRpbWVGb3JtYXQiLCJEYXRlVGltZUZvcm1hdCIsIk51bWJlclN5bWJvbHMiLCJOdW1iZXJGb3JtYXRzIiwiQ3VycmVuY3lDb2RlIiwiQ3VycmVuY3lTeW1ib2wiLCJDdXJyZW5jeU5hbWUiLCJDdXJyZW5jaWVzIiwiRGlyZWN0aW9uYWxpdHkiLCJQbHVyYWxDYXNlIiwiRXh0cmFEYXRhIiwiZXIiLCJ3diIsInZmIiwiRWYiLCJUdiIsIklmIiwiYnYiLCJfdiIsIk12IiwiTnYiLCJTdiIsIkRmIiwiQ2YiLCJ4diIsIkF2IiwiUnYiLCJnbyIsInh0Iiwia3YiLCJPdiIsImhhIiwibm4iLCJqcyIsIlB2IiwiZ2EiLCJMdiIsInB1IiwiRnYiLCJqdiIsImhlIiwidGV4dEVuZCIsImtleSIsImtleUVuZCIsInZhbHVlRW5kIiwiVnYiLCJzdWJzdHJpbmciLCJIdiIsIkJ2Iiwid2YiLCJUZiIsIiR2IiwiYmYiLCJNZiIsIl9mIiwiVXYiLCJxdiIsIkt2IiwiV3YiLCJTZiIsInhmIiwiWHYiLCJBZiIsIk5mIiwiSnYiLCJZdiIsIkd2IiwiVnMiLCJHbiIsInp2IiwiUXYiLCJadiIsImh1IiwiQm8iLCJlRSIsInRFIiwiX2xvY2F0ZU9yQ3JlYXRlVGV4dE5vZGUiLCJSZiIsIm5FIiwia2YiLCJVYSIsIlBmIiwiT2YiLCJyRSIsImd1IiwiTGYiLCJCcyIsIkhzIiwic0UiLCJpRSIsIm9FIiwiRmYiLCJtYSIsImFFIiwiY0UiLCJsRSIsIlZmIiwiamYiLCJ1RSIsImRFIiwiZkUiLCJwRSIsIkhmIiwiaEUiLCJnRSIsIiRvIiwibmdNb2R1bGVGYWN0b3J5IiwiY29tcG9uZW50RmFjdG9yaWVzIiwibUUiLCJjb21waWxlTW9kdWxlU3luYyIsImNvbXBpbGVNb2R1bGVBc3luYyIsImNvbXBpbGVNb2R1bGVBbmRBbGxDb21wb25lbnRzU3luYyIsImNvbXBpbGVNb2R1bGVBbmRBbGxDb21wb25lbnRzQXN5bmMiLCJjbGVhckNhY2hlIiwiY2xlYXJDYWNoZUZvciIsImdldE1vZHVsZUlkIiwiQmYiLCJhcHBsaWNhdGlvbkVycm9ySGFuZGxlciIsImFwcFJlZiIsInRhc2tTZXJ2aWNlIiwidHJhY2luZyIsInpvbmVJc0RlZmluZWQiLCJzY2hlZHVsZXJUaWNrQXBwbHlBcmdzIiwiX19zY2hlZHVsZXJfdGlja19fIiwic3Vic2NyaXB0aW9ucyIsImFuZ3VsYXJab25lSWQiLCJjYW5jZWxTY2hlZHVsZWRDYWxsYmFjayIsInVzZU1pY3JvdGFza1NjaGVkdWxlciIsInJ1bm5pbmdUaWNrIiwicGVuZGluZ1JlbmRlclRhc2tJZCIsInN3aXRjaFRvTWljcm90YXNrU2NoZWR1bGVyIiwic2hvdWxkU2NoZWR1bGVUaWNrIiwiJGYiLCJ5RSIsIiRsb2NhbGl6ZSIsImxvY2FsZSIsIldhIiwiZWkiLCJsaXN0ZW5lcnMiLCJ2RSIsIkVFIiwiSUUiLCJERSIsIlVmIiwiUWYiLCJDRSIsIlpmIiwiV2YiLCJhdHRyaWJ1dGVOYW1lIiwiaE8iLCJxZiIsIndFIiwiZ08iLCJyZXF1aXJlZCIsInFhIiwiVEUiLCJ0ciIsIm1vZHVsZVJlZiIsImJFIiwicjNJbmplY3RvciIsImRlc3Ryb3lMaXN0ZW5lciIsInBsYXRmb3JtSW5qZWN0b3IiLCJhbGxQbGF0Zm9ybU1vZHVsZXMiLCJNRSIsInJvb3RDb21wb25lbnQiLCJfRSIsInRpIiwiTkUiLCJTRSIsInhFIiwiQUUiLCJtTyIsInlPIiwiUkUiLCJrRSIsIkdhIiwic3VwcG9ydHMiLCJ6YSIsIk9FIiwidHJhY2tCeUlkZW50aXR5IiwiY29sbGVjdGlvbiIsIl9saW5rZWRSZWNvcmRzIiwiX3VubGlua2VkUmVjb3JkcyIsIl9wcmV2aW91c0l0SGVhZCIsIl9pdEhlYWQiLCJfaXRUYWlsIiwiX2FkZGl0aW9uc0hlYWQiLCJfYWRkaXRpb25zVGFpbCIsIl9tb3Zlc0hlYWQiLCJfbW92ZXNUYWlsIiwiX3JlbW92YWxzSGVhZCIsIl9yZW1vdmFsc1RhaWwiLCJfaWRlbnRpdHlDaGFuZ2VzSGVhZCIsIl9pZGVudGl0eUNoYW5nZXNUYWlsIiwiX3RyYWNrQnlGbiIsImZvckVhY2hJdGVtIiwiZm9yRWFjaE9wZXJhdGlvbiIsImN1cnJlbnRJbmRleCIsIkdmIiwiX25leHRSZW1vdmVkIiwicHJldmlvdXNJbmRleCIsImZvckVhY2hQcmV2aW91c0l0ZW0iLCJfbmV4dFByZXZpb3VzIiwiZm9yRWFjaEFkZGVkSXRlbSIsIl9uZXh0QWRkZWQiLCJmb3JFYWNoTW92ZWRJdGVtIiwiX25leHRNb3ZlZCIsImZvckVhY2hSZW1vdmVkSXRlbSIsImZvckVhY2hJZGVudGl0eUNoYW5nZSIsIl9uZXh0SWRlbnRpdHlDaGFuZ2UiLCJkaWZmIiwiY2hlY2siLCJfcmVzZXQiLCJ0cmFja0J5SWQiLCJfbWlzbWF0Y2giLCJfdmVyaWZ5UmVpbnNlcnRpb24iLCJpdGVtIiwiX2FkZElkZW50aXR5Q2hhbmdlIiwiX3RydW5jYXRlIiwiaXNEaXJ0eSIsIl9wcmV2IiwiX3JlbW92ZSIsIl9yZWluc2VydEFmdGVyIiwiX21vdmVBZnRlciIsIl9hZGRBZnRlciIsIlFhIiwiX2FkZFRvTW92ZXMiLCJfYWRkVG9SZW1vdmFscyIsIl91bmxpbmsiLCJfcHJldlJlbW92ZWQiLCJfaW5zZXJ0QWZ0ZXIiLCJuaSIsInB1dCIsIl9wcmV2RHVwIiwiX25leHREdXAiLCJaYSIsIl9oZWFkIiwiX3RhaWwiLCJpc0VtcHR5IiwiemYiLCJQRSIsImZhY3RvcmllcyIsImV4dGVuZCIsInZPIiwiYXBwUHJvdmlkZXJzIiwicGxhdGZvcm1Qcm92aWRlcnMiLCJwbGF0Zm9ybVJlZiIsIkVPIiwiSU8iLCJpc1N0YW5kYWxvbmUiLCJLZiIsIllhIiwiTU8iLCJZZiIsIkZFIiwiaGlzdG9yeUdvIiwiakUiLCJOTyIsIl9sb2NhdGlvbiIsIl9oaXN0b3J5IiwiX2RvYyIsIndpbmRvdyIsImhpc3RvcnkiLCJnZXRCYXNlSHJlZkZyb21ET00iLCJnZXRCYXNlSHJlZiIsIm9uUG9wU3RhdGUiLCJnZXRHbG9iYWxFdmVudFRhcmdldCIsIm9uSGFzaENoYW5nZSIsImhyZWYiLCJwcm90b2NvbCIsImhvc3RuYW1lIiwicG9ydCIsInBhdGhuYW1lIiwic2VhcmNoIiwiaGFzaCIsInB1c2hTdGF0ZSIsInJlcGxhY2VTdGF0ZSIsImZvcndhcmQiLCJiYWNrIiwiZ2V0U3RhdGUiLCJ4TyIsImVuY29kZVVSSUNvbXBvbmVudCIsImRlY29kZVVSSUNvbXBvbmVudCIsIkpmIiwiYWIiLCJiYiIsImNiIiwiZGIiLCJlYiIsImZiIiwiZ2IiLCJoYiIsImliIiwiamIiLCJrYiIsImxiIiwibWIiLCJuYiIsIm9iIiwicGIiLCJxYiIsInJiIiwic2IiLCJ0YiIsInViIiwidmIiLCJ3YiIsInhiIiwieWIiLCJ6YiIsIkFiIiwiQmIiLCJDYiIsIkRiIiwiRWIiLCJGYiIsIkdiIiwiSGIiLCJJYiIsIkpiIiwiS2IiLCJMYiIsIk1iIiwiTmIiLCJPYiIsIlBiIiwiUWIiLCJSYiIsIlNiIiwiVGIiLCJVYiIsIlZiIiwiV2IiLCJYYiIsIlliIiwiWmIiLCJfYiIsIiRiIl0sInNvdXJjZXMiOlsibm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc20vaW50ZXJuYWwvdXRpbC9pc0Z1bmN0aW9uLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc20vaW50ZXJuYWwvdXRpbC9jcmVhdGVFcnJvckNsYXNzLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc20vaW50ZXJuYWwvdXRpbC9VbnN1YnNjcmlwdGlvbkVycm9yLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc20vaW50ZXJuYWwvdXRpbC9hcnJSZW1vdmUuanMiLCJub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbS9pbnRlcm5hbC9TdWJzY3JpcHRpb24uanMiLCJub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbS9pbnRlcm5hbC9jb25maWcuanMiLCJub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbS9pbnRlcm5hbC9zY2hlZHVsZXIvdGltZW91dFByb3ZpZGVyLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc20vaW50ZXJuYWwvdXRpbC9yZXBvcnRVbmhhbmRsZWRFcnJvci5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtL2ludGVybmFsL3V0aWwvbm9vcC5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtL2ludGVybmFsL05vdGlmaWNhdGlvbkZhY3Rvcmllcy5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtL2ludGVybmFsL3V0aWwvZXJyb3JDb250ZXh0LmpzIiwibm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc20vaW50ZXJuYWwvU3Vic2NyaWJlci5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtL2ludGVybmFsL3N5bWJvbC9vYnNlcnZhYmxlLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc20vaW50ZXJuYWwvdXRpbC9pZGVudGl0eS5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtL2ludGVybmFsL3V0aWwvcGlwZS5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtL2ludGVybmFsL09ic2VydmFibGUuanMiLCJub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbS9pbnRlcm5hbC91dGlsL09iamVjdFVuc3Vic2NyaWJlZEVycm9yLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc20vaW50ZXJuYWwvU3ViamVjdC5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtL2ludGVybmFsL0JlaGF2aW9yU3ViamVjdC5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtL2ludGVybmFsL3V0aWwvaXNTY2hlZHVsZXIuanMiLCJub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbS9pbnRlcm5hbC91dGlsL2FyZ3MuanMiLCJub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2Lm1qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtL2ludGVybmFsL3V0aWwvaXNBcnJheUxpa2UuanMiLCJub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbS9pbnRlcm5hbC91dGlsL2lzUHJvbWlzZS5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtL2ludGVybmFsL3V0aWwvaXNJbnRlcm9wT2JzZXJ2YWJsZS5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtL2ludGVybmFsL3V0aWwvaXNBc3luY0l0ZXJhYmxlLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc20vaW50ZXJuYWwvdXRpbC90aHJvd1Vub2JzZXJ2YWJsZUVycm9yLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc20vaW50ZXJuYWwvc3ltYm9sL2l0ZXJhdG9yLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc20vaW50ZXJuYWwvdXRpbC9pc0l0ZXJhYmxlLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc20vaW50ZXJuYWwvdXRpbC9pc1JlYWRhYmxlU3RyZWFtTGlrZS5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtL2ludGVybmFsL29ic2VydmFibGUvaW5uZXJGcm9tLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc20vaW50ZXJuYWwvdXRpbC9leGVjdXRlU2NoZWR1bGUuanMiLCJub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbS9pbnRlcm5hbC91dGlsL2xpZnQuanMiLCJub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbS9pbnRlcm5hbC9vcGVyYXRvcnMvT3BlcmF0b3JTdWJzY3JpYmVyLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc20vaW50ZXJuYWwvb3BlcmF0b3JzL29ic2VydmVPbi5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtL2ludGVybmFsL29wZXJhdG9ycy9zdWJzY3JpYmVPbi5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtL2ludGVybmFsL3NjaGVkdWxlZC9zY2hlZHVsZU9ic2VydmFibGUuanMiLCJub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbS9pbnRlcm5hbC9zY2hlZHVsZWQvc2NoZWR1bGVQcm9taXNlLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc20vaW50ZXJuYWwvc2NoZWR1bGVkL3NjaGVkdWxlQXJyYXkuanMiLCJub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbS9pbnRlcm5hbC9zY2hlZHVsZWQvc2NoZWR1bGVJdGVyYWJsZS5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtL2ludGVybmFsL3NjaGVkdWxlZC9zY2hlZHVsZUFzeW5jSXRlcmFibGUuanMiLCJub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbS9pbnRlcm5hbC9zY2hlZHVsZWQvc2NoZWR1bGVSZWFkYWJsZVN0cmVhbUxpa2UuanMiLCJub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbS9pbnRlcm5hbC9zY2hlZHVsZWQvc2NoZWR1bGVkLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc20vaW50ZXJuYWwvb2JzZXJ2YWJsZS9mcm9tLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc20vaW50ZXJuYWwvb2JzZXJ2YWJsZS9vZi5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtL2ludGVybmFsL29wZXJhdG9ycy9tYXAuanMiLCJub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbS9pbnRlcm5hbC9vcGVyYXRvcnMvbWVyZ2VJbnRlcm5hbHMuanMiLCJub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbS9pbnRlcm5hbC9vcGVyYXRvcnMvbWVyZ2VNYXAuanMiLCJub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbS9pbnRlcm5hbC91dGlsL21hcE9uZU9yTWFueUFyZ3MuanMiLCJub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbS9pbnRlcm5hbC9vYnNlcnZhYmxlL2Zyb21FdmVudC5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtL2ludGVybmFsL29wZXJhdG9ycy9maWx0ZXIuanMiLCJub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbS9pbnRlcm5hbC9vcGVyYXRvcnMvY2F0Y2hFcnJvci5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtL2ludGVybmFsL29ic2VydmFibGUvZW1wdHkuanMiLCJub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbS9pbnRlcm5hbC9vcGVyYXRvcnMvdGFrZS5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtL2ludGVybmFsL29wZXJhdG9ycy9maW5hbGl6ZS5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtL2ludGVybmFsL29wZXJhdG9ycy9tZXJnZUFsbC5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtL2ludGVybmFsL29wZXJhdG9ycy9jb25jYXRBbGwuanMiLCJub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbS9pbnRlcm5hbC9vYnNlcnZhYmxlL2NvbmNhdC5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtL2ludGVybmFsL29wZXJhdG9ycy9zdGFydFdpdGguanMiLCJub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbS9pbnRlcm5hbC9vcGVyYXRvcnMvc3dpdGNoTWFwLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc20vaW50ZXJuYWwvb3BlcmF0b3JzL3Rha2VVbnRpbC5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtL2ludGVybmFsL29wZXJhdG9ycy90YXAuanMiLCJub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbS9pbnRlcm5hbC9zY2hlZHVsZXIvZGF0ZVRpbWVzdGFtcFByb3ZpZGVyLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc20vaW50ZXJuYWwvUmVwbGF5U3ViamVjdC5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtL2ludGVybmFsL3NjaGVkdWxlci9BY3Rpb24uanMiLCJub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbS9pbnRlcm5hbC9zY2hlZHVsZXIvaW50ZXJ2YWxQcm92aWRlci5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtL2ludGVybmFsL3NjaGVkdWxlci9Bc3luY0FjdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtL2ludGVybmFsL1NjaGVkdWxlci5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtL2ludGVybmFsL3NjaGVkdWxlci9Bc3luY1NjaGVkdWxlci5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtL2ludGVybmFsL3NjaGVkdWxlci9hc3luYy5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtL2ludGVybmFsL29ic2VydmFibGUvdGhyb3dFcnJvci5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtL2ludGVybmFsL3V0aWwvaXNPYnNlcnZhYmxlLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc20vaW50ZXJuYWwvdXRpbC9FbXB0eUVycm9yLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc20vaW50ZXJuYWwvdXRpbC9pc0RhdGUuanMiLCJub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbS9pbnRlcm5hbC9vcGVyYXRvcnMvdGltZW91dC5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtL2ludGVybmFsL3V0aWwvYXJnc0FyZ0FycmF5T3JPYmplY3QuanMiLCJub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbS9pbnRlcm5hbC91dGlsL2NyZWF0ZU9iamVjdC5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtL2ludGVybmFsL29ic2VydmFibGUvY29tYmluZUxhdGVzdC5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtL2ludGVybmFsL29ic2VydmFibGUvZGVmZXIuanMiLCJub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbS9pbnRlcm5hbC9vYnNlcnZhYmxlL2ZvcmtKb2luLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc20vaW50ZXJuYWwvb2JzZXJ2YWJsZS90aW1lci5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtL2ludGVybmFsL29ic2VydmFibGUvaW50ZXJ2YWwuanMiLCJub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbS9pbnRlcm5hbC9vcGVyYXRvcnMvY29uY2F0TWFwLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc20vaW50ZXJuYWwvb3BlcmF0b3JzL2RlZmF1bHRJZkVtcHR5LmpzIiwibm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc20vaW50ZXJuYWwvb3BlcmF0b3JzL2Rpc3RpbmN0VW50aWxDaGFuZ2VkLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc20vaW50ZXJuYWwvb3BlcmF0b3JzL3Rocm93SWZFbXB0eS5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtL2ludGVybmFsL29wZXJhdG9ycy9maXJzdC5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtL2ludGVybmFsL29wZXJhdG9ycy90YWtlTGFzdC5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtL2ludGVybmFsL29wZXJhdG9ycy9zaGFyZS5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtL2ludGVybmFsL29wZXJhdG9ycy9zaGFyZVJlcGxheS5qcyIsIm5vZGVfbW9kdWxlcy9AYW5ndWxhci9jb3JlL2Zlc20yMDIyL19lZmZlY3QtY2h1bmsubWpzIiwibm9kZV9tb2R1bGVzL0Bhbmd1bGFyL2NvcmUvZmVzbTIwMjIvX25vdF9mb3VuZC1jaHVuay5tanMiLCJub2RlX21vZHVsZXMvQGFuZ3VsYXIvY29yZS9mZXNtMjAyMi9fdW50cmFja2VkLWNodW5rLm1qcyIsIm5vZGVfbW9kdWxlcy9AYW5ndWxhci9jb3JlL2Zlc20yMDIyL19lZmZlY3QtY2h1bmsyLm1qcyIsIm5vZGVfbW9kdWxlcy9AYW5ndWxhci9jb3JlL2Zlc20yMDIyL19kZWJ1Z19ub2RlLWNodW5rLm1qcyIsIm5vZGVfbW9kdWxlcy9AYW5ndWxhci9jb3JlL2Zlc20yMDIyL19yZXNvdXJjZS1jaHVuay5tanMiLCJub2RlX21vZHVsZXMvQGFuZ3VsYXIvY29yZS9mZXNtMjAyMi9jb3JlLm1qcyIsIm5vZGVfbW9kdWxlcy9AYW5ndWxhci9jb21tb24vZmVzbTIwMjIvX3BsYXRmb3JtX2xvY2F0aW9uLWNodW5rLm1qcyIsIm5vZGVfbW9kdWxlcy9AYW5ndWxhci9jb21tb24vZmVzbTIwMjIvX3hoci1jaHVuay5tanMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJztcbn1cbiIsImV4cG9ydCBmdW5jdGlvbiBjcmVhdGVFcnJvckNsYXNzKGNyZWF0ZUltcGwpIHtcbiAgY29uc3QgX3N1cGVyID0gaW5zdGFuY2UgPT4ge1xuICAgIEVycm9yLmNhbGwoaW5zdGFuY2UpO1xuICAgIGluc3RhbmNlLnN0YWNrID0gbmV3IEVycm9yKCkuc3RhY2s7XG4gIH07XG4gIGNvbnN0IGN0b3JGdW5jID0gY3JlYXRlSW1wbChfc3VwZXIpO1xuICBjdG9yRnVuYy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEVycm9yLnByb3RvdHlwZSk7XG4gIGN0b3JGdW5jLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGN0b3JGdW5jO1xuICByZXR1cm4gY3RvckZ1bmM7XG59XG4iLCJpbXBvcnQgeyBjcmVhdGVFcnJvckNsYXNzIH0gZnJvbSAnLi9jcmVhdGVFcnJvckNsYXNzJztcbmV4cG9ydCBjb25zdCBVbnN1YnNjcmlwdGlvbkVycm9yID0gY3JlYXRlRXJyb3JDbGFzcyhfc3VwZXIgPT4gZnVuY3Rpb24gVW5zdWJzY3JpcHRpb25FcnJvckltcGwoZXJyb3JzKSB7XG4gIF9zdXBlcih0aGlzKTtcbiAgdGhpcy5tZXNzYWdlID0gZXJyb3JzID8gYCR7ZXJyb3JzLmxlbmd0aH0gZXJyb3JzIG9jY3VycmVkIGR1cmluZyB1bnN1YnNjcmlwdGlvbjpcbiR7ZXJyb3JzLm1hcCgoZXJyLCBpKSA9PiBgJHtpICsgMX0pICR7ZXJyLnRvU3RyaW5nKCl9YCkuam9pbignXFxuICAnKX1gIDogJyc7XG4gIHRoaXMubmFtZSA9ICdVbnN1YnNjcmlwdGlvbkVycm9yJztcbiAgdGhpcy5lcnJvcnMgPSBlcnJvcnM7XG59KTtcbiIsImV4cG9ydCBmdW5jdGlvbiBhcnJSZW1vdmUoYXJyLCBpdGVtKSB7XG4gIGlmIChhcnIpIHtcbiAgICBjb25zdCBpbmRleCA9IGFyci5pbmRleE9mKGl0ZW0pO1xuICAgIDAgPD0gaW5kZXggJiYgYXJyLnNwbGljZShpbmRleCwgMSk7XG4gIH1cbn1cbiIsImltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tICcuL3V0aWwvaXNGdW5jdGlvbic7XG5pbXBvcnQgeyBVbnN1YnNjcmlwdGlvbkVycm9yIH0gZnJvbSAnLi91dGlsL1Vuc3Vic2NyaXB0aW9uRXJyb3InO1xuaW1wb3J0IHsgYXJyUmVtb3ZlIH0gZnJvbSAnLi91dGlsL2FyclJlbW92ZSc7XG5leHBvcnQgY2xhc3MgU3Vic2NyaXB0aW9uIHtcbiAgY29uc3RydWN0b3IoaW5pdGlhbFRlYXJkb3duKSB7XG4gICAgdGhpcy5pbml0aWFsVGVhcmRvd24gPSBpbml0aWFsVGVhcmRvd247XG4gICAgdGhpcy5jbG9zZWQgPSBmYWxzZTtcbiAgICB0aGlzLl9wYXJlbnRhZ2UgPSBudWxsO1xuICAgIHRoaXMuX2ZpbmFsaXplcnMgPSBudWxsO1xuICB9XG4gIHVuc3Vic2NyaWJlKCkge1xuICAgIGxldCBlcnJvcnM7XG4gICAgaWYgKCF0aGlzLmNsb3NlZCkge1xuICAgICAgdGhpcy5jbG9zZWQgPSB0cnVlO1xuICAgICAgY29uc3Qge1xuICAgICAgICBfcGFyZW50YWdlXG4gICAgICB9ID0gdGhpcztcbiAgICAgIGlmIChfcGFyZW50YWdlKSB7XG4gICAgICAgIHRoaXMuX3BhcmVudGFnZSA9IG51bGw7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KF9wYXJlbnRhZ2UpKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBwYXJlbnQgb2YgX3BhcmVudGFnZSkge1xuICAgICAgICAgICAgcGFyZW50LnJlbW92ZSh0aGlzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgX3BhcmVudGFnZS5yZW1vdmUodGhpcyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbnN0IHtcbiAgICAgICAgaW5pdGlhbFRlYXJkb3duOiBpbml0aWFsRmluYWxpemVyXG4gICAgICB9ID0gdGhpcztcbiAgICAgIGlmIChpc0Z1bmN0aW9uKGluaXRpYWxGaW5hbGl6ZXIpKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaW5pdGlhbEZpbmFsaXplcigpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgZXJyb3JzID0gZSBpbnN0YW5jZW9mIFVuc3Vic2NyaXB0aW9uRXJyb3IgPyBlLmVycm9ycyA6IFtlXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29uc3Qge1xuICAgICAgICBfZmluYWxpemVyc1xuICAgICAgfSA9IHRoaXM7XG4gICAgICBpZiAoX2ZpbmFsaXplcnMpIHtcbiAgICAgICAgdGhpcy5fZmluYWxpemVycyA9IG51bGw7XG4gICAgICAgIGZvciAoY29uc3QgZmluYWxpemVyIG9mIF9maW5hbGl6ZXJzKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGV4ZWNGaW5hbGl6ZXIoZmluYWxpemVyKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGVycm9ycyA9IGVycm9ycyAhPT0gbnVsbCAmJiBlcnJvcnMgIT09IHZvaWQgMCA/IGVycm9ycyA6IFtdO1xuICAgICAgICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIFVuc3Vic2NyaXB0aW9uRXJyb3IpIHtcbiAgICAgICAgICAgICAgZXJyb3JzID0gWy4uLmVycm9ycywgLi4uZXJyLmVycm9yc107XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBlcnJvcnMucHVzaChlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGVycm9ycykge1xuICAgICAgICB0aHJvdyBuZXcgVW5zdWJzY3JpcHRpb25FcnJvcihlcnJvcnMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBhZGQodGVhcmRvd24pIHtcbiAgICB2YXIgX2E7XG4gICAgaWYgKHRlYXJkb3duICYmIHRlYXJkb3duICE9PSB0aGlzKSB7XG4gICAgICBpZiAodGhpcy5jbG9zZWQpIHtcbiAgICAgICAgZXhlY0ZpbmFsaXplcih0ZWFyZG93bik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodGVhcmRvd24gaW5zdGFuY2VvZiBTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICBpZiAodGVhcmRvd24uY2xvc2VkIHx8IHRlYXJkb3duLl9oYXNQYXJlbnQodGhpcykpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGVhcmRvd24uX2FkZFBhcmVudCh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICAodGhpcy5fZmluYWxpemVycyA9IChfYSA9IHRoaXMuX2ZpbmFsaXplcnMpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFtdKS5wdXNoKHRlYXJkb3duKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgX2hhc1BhcmVudChwYXJlbnQpIHtcbiAgICBjb25zdCB7XG4gICAgICBfcGFyZW50YWdlXG4gICAgfSA9IHRoaXM7XG4gICAgcmV0dXJuIF9wYXJlbnRhZ2UgPT09IHBhcmVudCB8fCBBcnJheS5pc0FycmF5KF9wYXJlbnRhZ2UpICYmIF9wYXJlbnRhZ2UuaW5jbHVkZXMocGFyZW50KTtcbiAgfVxuICBfYWRkUGFyZW50KHBhcmVudCkge1xuICAgIGNvbnN0IHtcbiAgICAgIF9wYXJlbnRhZ2VcbiAgICB9ID0gdGhpcztcbiAgICB0aGlzLl9wYXJlbnRhZ2UgPSBBcnJheS5pc0FycmF5KF9wYXJlbnRhZ2UpID8gKF9wYXJlbnRhZ2UucHVzaChwYXJlbnQpLCBfcGFyZW50YWdlKSA6IF9wYXJlbnRhZ2UgPyBbX3BhcmVudGFnZSwgcGFyZW50XSA6IHBhcmVudDtcbiAgfVxuICBfcmVtb3ZlUGFyZW50KHBhcmVudCkge1xuICAgIGNvbnN0IHtcbiAgICAgIF9wYXJlbnRhZ2VcbiAgICB9ID0gdGhpcztcbiAgICBpZiAoX3BhcmVudGFnZSA9PT0gcGFyZW50KSB7XG4gICAgICB0aGlzLl9wYXJlbnRhZ2UgPSBudWxsO1xuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShfcGFyZW50YWdlKSkge1xuICAgICAgYXJyUmVtb3ZlKF9wYXJlbnRhZ2UsIHBhcmVudCk7XG4gICAgfVxuICB9XG4gIHJlbW92ZSh0ZWFyZG93bikge1xuICAgIGNvbnN0IHtcbiAgICAgIF9maW5hbGl6ZXJzXG4gICAgfSA9IHRoaXM7XG4gICAgX2ZpbmFsaXplcnMgJiYgYXJyUmVtb3ZlKF9maW5hbGl6ZXJzLCB0ZWFyZG93bik7XG4gICAgaWYgKHRlYXJkb3duIGluc3RhbmNlb2YgU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0ZWFyZG93bi5fcmVtb3ZlUGFyZW50KHRoaXMpO1xuICAgIH1cbiAgfVxufVxuU3Vic2NyaXB0aW9uLkVNUFRZID0gKCgpID0+IHtcbiAgY29uc3QgZW1wdHkgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gIGVtcHR5LmNsb3NlZCA9IHRydWU7XG4gIHJldHVybiBlbXB0eTtcbn0pKCk7XG5leHBvcnQgY29uc3QgRU1QVFlfU1VCU0NSSVBUSU9OID0gU3Vic2NyaXB0aW9uLkVNUFRZO1xuZXhwb3J0IGZ1bmN0aW9uIGlzU3Vic2NyaXB0aW9uKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFN1YnNjcmlwdGlvbiB8fCB2YWx1ZSAmJiAnY2xvc2VkJyBpbiB2YWx1ZSAmJiBpc0Z1bmN0aW9uKHZhbHVlLnJlbW92ZSkgJiYgaXNGdW5jdGlvbih2YWx1ZS5hZGQpICYmIGlzRnVuY3Rpb24odmFsdWUudW5zdWJzY3JpYmUpO1xufVxuZnVuY3Rpb24gZXhlY0ZpbmFsaXplcihmaW5hbGl6ZXIpIHtcbiAgaWYgKGlzRnVuY3Rpb24oZmluYWxpemVyKSkge1xuICAgIGZpbmFsaXplcigpO1xuICB9IGVsc2Uge1xuICAgIGZpbmFsaXplci51bnN1YnNjcmliZSgpO1xuICB9XG59XG4iLCJleHBvcnQgY29uc3QgY29uZmlnID0ge1xuICBvblVuaGFuZGxlZEVycm9yOiBudWxsLFxuICBvblN0b3BwZWROb3RpZmljYXRpb246IG51bGwsXG4gIFByb21pc2U6IHVuZGVmaW5lZCxcbiAgdXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZzogZmFsc2UsXG4gIHVzZURlcHJlY2F0ZWROZXh0Q29udGV4dDogZmFsc2Vcbn07XG4iLCJleHBvcnQgY29uc3QgdGltZW91dFByb3ZpZGVyID0ge1xuICBzZXRUaW1lb3V0KGhhbmRsZXIsIHRpbWVvdXQsIC4uLmFyZ3MpIHtcbiAgICBjb25zdCB7XG4gICAgICBkZWxlZ2F0ZVxuICAgIH0gPSB0aW1lb3V0UHJvdmlkZXI7XG4gICAgaWYgKGRlbGVnYXRlID09PSBudWxsIHx8IGRlbGVnYXRlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBkZWxlZ2F0ZS5zZXRUaW1lb3V0KSB7XG4gICAgICByZXR1cm4gZGVsZWdhdGUuc2V0VGltZW91dChoYW5kbGVyLCB0aW1lb3V0LCAuLi5hcmdzKTtcbiAgICB9XG4gICAgcmV0dXJuIHNldFRpbWVvdXQoaGFuZGxlciwgdGltZW91dCwgLi4uYXJncyk7XG4gIH0sXG4gIGNsZWFyVGltZW91dChoYW5kbGUpIHtcbiAgICBjb25zdCB7XG4gICAgICBkZWxlZ2F0ZVxuICAgIH0gPSB0aW1lb3V0UHJvdmlkZXI7XG4gICAgcmV0dXJuICgoZGVsZWdhdGUgPT09IG51bGwgfHwgZGVsZWdhdGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGRlbGVnYXRlLmNsZWFyVGltZW91dCkgfHwgY2xlYXJUaW1lb3V0KShoYW5kbGUpO1xuICB9LFxuICBkZWxlZ2F0ZTogdW5kZWZpbmVkXG59O1xuIiwiaW1wb3J0IHsgY29uZmlnIH0gZnJvbSAnLi4vY29uZmlnJztcbmltcG9ydCB7IHRpbWVvdXRQcm92aWRlciB9IGZyb20gJy4uL3NjaGVkdWxlci90aW1lb3V0UHJvdmlkZXInO1xuZXhwb3J0IGZ1bmN0aW9uIHJlcG9ydFVuaGFuZGxlZEVycm9yKGVycikge1xuICB0aW1lb3V0UHJvdmlkZXIuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb25VbmhhbmRsZWRFcnJvclxuICAgIH0gPSBjb25maWc7XG4gICAgaWYgKG9uVW5oYW5kbGVkRXJyb3IpIHtcbiAgICAgIG9uVW5oYW5kbGVkRXJyb3IoZXJyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbiAgfSk7XG59XG4iLCJleHBvcnQgZnVuY3Rpb24gbm9vcCgpIHt9XG4iLCJleHBvcnQgY29uc3QgQ09NUExFVEVfTk9USUZJQ0FUSU9OID0gKCgpID0+IGNyZWF0ZU5vdGlmaWNhdGlvbignQycsIHVuZGVmaW5lZCwgdW5kZWZpbmVkKSkoKTtcbmV4cG9ydCBmdW5jdGlvbiBlcnJvck5vdGlmaWNhdGlvbihlcnJvcikge1xuICByZXR1cm4gY3JlYXRlTm90aWZpY2F0aW9uKCdFJywgdW5kZWZpbmVkLCBlcnJvcik7XG59XG5leHBvcnQgZnVuY3Rpb24gbmV4dE5vdGlmaWNhdGlvbih2YWx1ZSkge1xuICByZXR1cm4gY3JlYXRlTm90aWZpY2F0aW9uKCdOJywgdmFsdWUsIHVuZGVmaW5lZCk7XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTm90aWZpY2F0aW9uKGtpbmQsIHZhbHVlLCBlcnJvcikge1xuICByZXR1cm4ge1xuICAgIGtpbmQsXG4gICAgdmFsdWUsXG4gICAgZXJyb3JcbiAgfTtcbn1cbiIsImltcG9ydCB7IGNvbmZpZyB9IGZyb20gJy4uL2NvbmZpZyc7XG5sZXQgY29udGV4dCA9IG51bGw7XG5leHBvcnQgZnVuY3Rpb24gZXJyb3JDb250ZXh0KGNiKSB7XG4gIGlmIChjb25maWcudXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZykge1xuICAgIGNvbnN0IGlzUm9vdCA9ICFjb250ZXh0O1xuICAgIGlmIChpc1Jvb3QpIHtcbiAgICAgIGNvbnRleHQgPSB7XG4gICAgICAgIGVycm9yVGhyb3duOiBmYWxzZSxcbiAgICAgICAgZXJyb3I6IG51bGxcbiAgICAgIH07XG4gICAgfVxuICAgIGNiKCk7XG4gICAgaWYgKGlzUm9vdCkge1xuICAgICAgY29uc3Qge1xuICAgICAgICBlcnJvclRocm93bixcbiAgICAgICAgZXJyb3JcbiAgICAgIH0gPSBjb250ZXh0O1xuICAgICAgY29udGV4dCA9IG51bGw7XG4gICAgICBpZiAoZXJyb3JUaHJvd24pIHtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGNiKCk7XG4gIH1cbn1cbmV4cG9ydCBmdW5jdGlvbiBjYXB0dXJlRXJyb3IoZXJyKSB7XG4gIGlmIChjb25maWcudXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZyAmJiBjb250ZXh0KSB7XG4gICAgY29udGV4dC5lcnJvclRocm93biA9IHRydWU7XG4gICAgY29udGV4dC5lcnJvciA9IGVycjtcbiAgfVxufVxuIiwiaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gJy4vdXRpbC9pc0Z1bmN0aW9uJztcbmltcG9ydCB7IGlzU3Vic2NyaXB0aW9uLCBTdWJzY3JpcHRpb24gfSBmcm9tICcuL1N1YnNjcmlwdGlvbic7XG5pbXBvcnQgeyBjb25maWcgfSBmcm9tICcuL2NvbmZpZyc7XG5pbXBvcnQgeyByZXBvcnRVbmhhbmRsZWRFcnJvciB9IGZyb20gJy4vdXRpbC9yZXBvcnRVbmhhbmRsZWRFcnJvcic7XG5pbXBvcnQgeyBub29wIH0gZnJvbSAnLi91dGlsL25vb3AnO1xuaW1wb3J0IHsgbmV4dE5vdGlmaWNhdGlvbiwgZXJyb3JOb3RpZmljYXRpb24sIENPTVBMRVRFX05PVElGSUNBVElPTiB9IGZyb20gJy4vTm90aWZpY2F0aW9uRmFjdG9yaWVzJztcbmltcG9ydCB7IHRpbWVvdXRQcm92aWRlciB9IGZyb20gJy4vc2NoZWR1bGVyL3RpbWVvdXRQcm92aWRlcic7XG5pbXBvcnQgeyBjYXB0dXJlRXJyb3IgfSBmcm9tICcuL3V0aWwvZXJyb3JDb250ZXh0JztcbmV4cG9ydCBjbGFzcyBTdWJzY3JpYmVyIGV4dGVuZHMgU3Vic2NyaXB0aW9uIHtcbiAgY29uc3RydWN0b3IoZGVzdGluYXRpb24pIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuaXNTdG9wcGVkID0gZmFsc2U7XG4gICAgaWYgKGRlc3RpbmF0aW9uKSB7XG4gICAgICB0aGlzLmRlc3RpbmF0aW9uID0gZGVzdGluYXRpb247XG4gICAgICBpZiAoaXNTdWJzY3JpcHRpb24oZGVzdGluYXRpb24pKSB7XG4gICAgICAgIGRlc3RpbmF0aW9uLmFkZCh0aGlzKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kZXN0aW5hdGlvbiA9IEVNUFRZX09CU0VSVkVSO1xuICAgIH1cbiAgfVxuICBzdGF0aWMgY3JlYXRlKG5leHQsIGVycm9yLCBjb21wbGV0ZSkge1xuICAgIHJldHVybiBuZXcgU2FmZVN1YnNjcmliZXIobmV4dCwgZXJyb3IsIGNvbXBsZXRlKTtcbiAgfVxuICBuZXh0KHZhbHVlKSB7XG4gICAgaWYgKHRoaXMuaXNTdG9wcGVkKSB7XG4gICAgICBoYW5kbGVTdG9wcGVkTm90aWZpY2F0aW9uKG5leHROb3RpZmljYXRpb24odmFsdWUpLCB0aGlzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fbmV4dCh2YWx1ZSk7XG4gICAgfVxuICB9XG4gIGVycm9yKGVycikge1xuICAgIGlmICh0aGlzLmlzU3RvcHBlZCkge1xuICAgICAgaGFuZGxlU3RvcHBlZE5vdGlmaWNhdGlvbihlcnJvck5vdGlmaWNhdGlvbihlcnIpLCB0aGlzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pc1N0b3BwZWQgPSB0cnVlO1xuICAgICAgdGhpcy5fZXJyb3IoZXJyKTtcbiAgICB9XG4gIH1cbiAgY29tcGxldGUoKSB7XG4gICAgaWYgKHRoaXMuaXNTdG9wcGVkKSB7XG4gICAgICBoYW5kbGVTdG9wcGVkTm90aWZpY2F0aW9uKENPTVBMRVRFX05PVElGSUNBVElPTiwgdGhpcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaXNTdG9wcGVkID0gdHJ1ZTtcbiAgICAgIHRoaXMuX2NvbXBsZXRlKCk7XG4gICAgfVxuICB9XG4gIHVuc3Vic2NyaWJlKCkge1xuICAgIGlmICghdGhpcy5jbG9zZWQpIHtcbiAgICAgIHRoaXMuaXNTdG9wcGVkID0gdHJ1ZTtcbiAgICAgIHN1cGVyLnVuc3Vic2NyaWJlKCk7XG4gICAgICB0aGlzLmRlc3RpbmF0aW9uID0gbnVsbDtcbiAgICB9XG4gIH1cbiAgX25leHQodmFsdWUpIHtcbiAgICB0aGlzLmRlc3RpbmF0aW9uLm5leHQodmFsdWUpO1xuICB9XG4gIF9lcnJvcihlcnIpIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5kZXN0aW5hdGlvbi5lcnJvcihlcnIpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG4gIF9jb21wbGV0ZSgpIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG59XG5jb25zdCBfYmluZCA9IEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kO1xuZnVuY3Rpb24gYmluZChmbiwgdGhpc0FyZykge1xuICByZXR1cm4gX2JpbmQuY2FsbChmbiwgdGhpc0FyZyk7XG59XG5jbGFzcyBDb25zdW1lck9ic2VydmVyIHtcbiAgY29uc3RydWN0b3IocGFydGlhbE9ic2VydmVyKSB7XG4gICAgdGhpcy5wYXJ0aWFsT2JzZXJ2ZXIgPSBwYXJ0aWFsT2JzZXJ2ZXI7XG4gIH1cbiAgbmV4dCh2YWx1ZSkge1xuICAgIGNvbnN0IHtcbiAgICAgIHBhcnRpYWxPYnNlcnZlclxuICAgIH0gPSB0aGlzO1xuICAgIGlmIChwYXJ0aWFsT2JzZXJ2ZXIubmV4dCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcGFydGlhbE9ic2VydmVyLm5leHQodmFsdWUpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaGFuZGxlVW5oYW5kbGVkRXJyb3IoZXJyb3IpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBlcnJvcihlcnIpIHtcbiAgICBjb25zdCB7XG4gICAgICBwYXJ0aWFsT2JzZXJ2ZXJcbiAgICB9ID0gdGhpcztcbiAgICBpZiAocGFydGlhbE9ic2VydmVyLmVycm9yKSB7XG4gICAgICB0cnkge1xuICAgICAgICBwYXJ0aWFsT2JzZXJ2ZXIuZXJyb3IoZXJyKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGhhbmRsZVVuaGFuZGxlZEVycm9yKGVycm9yKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaGFuZGxlVW5oYW5kbGVkRXJyb3IoZXJyKTtcbiAgICB9XG4gIH1cbiAgY29tcGxldGUoKSB7XG4gICAgY29uc3Qge1xuICAgICAgcGFydGlhbE9ic2VydmVyXG4gICAgfSA9IHRoaXM7XG4gICAgaWYgKHBhcnRpYWxPYnNlcnZlci5jb21wbGV0ZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcGFydGlhbE9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBoYW5kbGVVbmhhbmRsZWRFcnJvcihlcnJvcik7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5leHBvcnQgY2xhc3MgU2FmZVN1YnNjcmliZXIgZXh0ZW5kcyBTdWJzY3JpYmVyIHtcbiAgY29uc3RydWN0b3Iob2JzZXJ2ZXJPck5leHQsIGVycm9yLCBjb21wbGV0ZSkge1xuICAgIHN1cGVyKCk7XG4gICAgbGV0IHBhcnRpYWxPYnNlcnZlcjtcbiAgICBpZiAoaXNGdW5jdGlvbihvYnNlcnZlck9yTmV4dCkgfHwgIW9ic2VydmVyT3JOZXh0KSB7XG4gICAgICBwYXJ0aWFsT2JzZXJ2ZXIgPSB7XG4gICAgICAgIG5leHQ6IG9ic2VydmVyT3JOZXh0ICE9PSBudWxsICYmIG9ic2VydmVyT3JOZXh0ICE9PSB2b2lkIDAgPyBvYnNlcnZlck9yTmV4dCA6IHVuZGVmaW5lZCxcbiAgICAgICAgZXJyb3I6IGVycm9yICE9PSBudWxsICYmIGVycm9yICE9PSB2b2lkIDAgPyBlcnJvciA6IHVuZGVmaW5lZCxcbiAgICAgICAgY29tcGxldGU6IGNvbXBsZXRlICE9PSBudWxsICYmIGNvbXBsZXRlICE9PSB2b2lkIDAgPyBjb21wbGV0ZSA6IHVuZGVmaW5lZFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IGNvbnRleHQ7XG4gICAgICBpZiAodGhpcyAmJiBjb25maWcudXNlRGVwcmVjYXRlZE5leHRDb250ZXh0KSB7XG4gICAgICAgIGNvbnRleHQgPSBPYmplY3QuY3JlYXRlKG9ic2VydmVyT3JOZXh0KTtcbiAgICAgICAgY29udGV4dC51bnN1YnNjcmliZSA9ICgpID0+IHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgcGFydGlhbE9ic2VydmVyID0ge1xuICAgICAgICAgIG5leHQ6IG9ic2VydmVyT3JOZXh0Lm5leHQgJiYgYmluZChvYnNlcnZlck9yTmV4dC5uZXh0LCBjb250ZXh0KSxcbiAgICAgICAgICBlcnJvcjogb2JzZXJ2ZXJPck5leHQuZXJyb3IgJiYgYmluZChvYnNlcnZlck9yTmV4dC5lcnJvciwgY29udGV4dCksXG4gICAgICAgICAgY29tcGxldGU6IG9ic2VydmVyT3JOZXh0LmNvbXBsZXRlICYmIGJpbmQob2JzZXJ2ZXJPck5leHQuY29tcGxldGUsIGNvbnRleHQpXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJ0aWFsT2JzZXJ2ZXIgPSBvYnNlcnZlck9yTmV4dDtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5kZXN0aW5hdGlvbiA9IG5ldyBDb25zdW1lck9ic2VydmVyKHBhcnRpYWxPYnNlcnZlcik7XG4gIH1cbn1cbmZ1bmN0aW9uIGhhbmRsZVVuaGFuZGxlZEVycm9yKGVycm9yKSB7XG4gIGlmIChjb25maWcudXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZykge1xuICAgIGNhcHR1cmVFcnJvcihlcnJvcik7XG4gIH0gZWxzZSB7XG4gICAgcmVwb3J0VW5oYW5kbGVkRXJyb3IoZXJyb3IpO1xuICB9XG59XG5mdW5jdGlvbiBkZWZhdWx0RXJyb3JIYW5kbGVyKGVycikge1xuICB0aHJvdyBlcnI7XG59XG5mdW5jdGlvbiBoYW5kbGVTdG9wcGVkTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgc3Vic2NyaWJlcikge1xuICBjb25zdCB7XG4gICAgb25TdG9wcGVkTm90aWZpY2F0aW9uXG4gIH0gPSBjb25maWc7XG4gIG9uU3RvcHBlZE5vdGlmaWNhdGlvbiAmJiB0aW1lb3V0UHJvdmlkZXIuc2V0VGltZW91dCgoKSA9PiBvblN0b3BwZWROb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBzdWJzY3JpYmVyKSk7XG59XG5leHBvcnQgY29uc3QgRU1QVFlfT0JTRVJWRVIgPSB7XG4gIGNsb3NlZDogdHJ1ZSxcbiAgbmV4dDogbm9vcCxcbiAgZXJyb3I6IGRlZmF1bHRFcnJvckhhbmRsZXIsXG4gIGNvbXBsZXRlOiBub29wXG59O1xuIiwiZXhwb3J0IGNvbnN0IG9ic2VydmFibGUgPSAoKCkgPT4gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wub2JzZXJ2YWJsZSB8fCAnQEBvYnNlcnZhYmxlJykoKTtcbiIsImV4cG9ydCBmdW5jdGlvbiBpZGVudGl0eSh4KSB7XG4gIHJldHVybiB4O1xufVxuIiwiaW1wb3J0IHsgaWRlbnRpdHkgfSBmcm9tICcuL2lkZW50aXR5JztcbmV4cG9ydCBmdW5jdGlvbiBwaXBlKC4uLmZucykge1xuICByZXR1cm4gcGlwZUZyb21BcnJheShmbnMpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHBpcGVGcm9tQXJyYXkoZm5zKSB7XG4gIGlmIChmbnMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGlkZW50aXR5O1xuICB9XG4gIGlmIChmbnMubGVuZ3RoID09PSAxKSB7XG4gICAgcmV0dXJuIGZuc1swXTtcbiAgfVxuICByZXR1cm4gZnVuY3Rpb24gcGlwZWQoaW5wdXQpIHtcbiAgICByZXR1cm4gZm5zLnJlZHVjZSgocHJldiwgZm4pID0+IGZuKHByZXYpLCBpbnB1dCk7XG4gIH07XG59XG4iLCJpbXBvcnQgeyBTYWZlU3Vic2NyaWJlciwgU3Vic2NyaWJlciB9IGZyb20gJy4vU3Vic2NyaWJlcic7XG5pbXBvcnQgeyBpc1N1YnNjcmlwdGlvbiB9IGZyb20gJy4vU3Vic2NyaXB0aW9uJztcbmltcG9ydCB7IG9ic2VydmFibGUgYXMgU3ltYm9sX29ic2VydmFibGUgfSBmcm9tICcuL3N5bWJvbC9vYnNlcnZhYmxlJztcbmltcG9ydCB7IHBpcGVGcm9tQXJyYXkgfSBmcm9tICcuL3V0aWwvcGlwZSc7XG5pbXBvcnQgeyBjb25maWcgfSBmcm9tICcuL2NvbmZpZyc7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSAnLi91dGlsL2lzRnVuY3Rpb24nO1xuaW1wb3J0IHsgZXJyb3JDb250ZXh0IH0gZnJvbSAnLi91dGlsL2Vycm9yQ29udGV4dCc7XG5leHBvcnQgbGV0IE9ic2VydmFibGUgPSAvKiNfX1BVUkVfXyovKCgpID0+IHtcbiAgY2xhc3MgT2JzZXJ2YWJsZSB7XG4gICAgY29uc3RydWN0b3Ioc3Vic2NyaWJlKSB7XG4gICAgICBpZiAoc3Vic2NyaWJlKSB7XG4gICAgICAgIHRoaXMuX3N1YnNjcmliZSA9IHN1YnNjcmliZTtcbiAgICAgIH1cbiAgICB9XG4gICAgbGlmdChvcGVyYXRvcikge1xuICAgICAgY29uc3Qgb2JzZXJ2YWJsZSA9IG5ldyBPYnNlcnZhYmxlKCk7XG4gICAgICBvYnNlcnZhYmxlLnNvdXJjZSA9IHRoaXM7XG4gICAgICBvYnNlcnZhYmxlLm9wZXJhdG9yID0gb3BlcmF0b3I7XG4gICAgICByZXR1cm4gb2JzZXJ2YWJsZTtcbiAgICB9XG4gICAgc3Vic2NyaWJlKG9ic2VydmVyT3JOZXh0LCBlcnJvciwgY29tcGxldGUpIHtcbiAgICAgIGNvbnN0IHN1YnNjcmliZXIgPSBpc1N1YnNjcmliZXIob2JzZXJ2ZXJPck5leHQpID8gb2JzZXJ2ZXJPck5leHQgOiBuZXcgU2FmZVN1YnNjcmliZXIob2JzZXJ2ZXJPck5leHQsIGVycm9yLCBjb21wbGV0ZSk7XG4gICAgICBlcnJvckNvbnRleHQoKCkgPT4ge1xuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgb3BlcmF0b3IsXG4gICAgICAgICAgc291cmNlXG4gICAgICAgIH0gPSB0aGlzO1xuICAgICAgICBzdWJzY3JpYmVyLmFkZChvcGVyYXRvciA/IG9wZXJhdG9yLmNhbGwoc3Vic2NyaWJlciwgc291cmNlKSA6IHNvdXJjZSA/IHRoaXMuX3N1YnNjcmliZShzdWJzY3JpYmVyKSA6IHRoaXMuX3RyeVN1YnNjcmliZShzdWJzY3JpYmVyKSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBzdWJzY3JpYmVyO1xuICAgIH1cbiAgICBfdHJ5U3Vic2NyaWJlKHNpbmspIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zdWJzY3JpYmUoc2luayk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgc2luay5lcnJvcihlcnIpO1xuICAgICAgfVxuICAgIH1cbiAgICBmb3JFYWNoKG5leHQsIHByb21pc2VDdG9yKSB7XG4gICAgICBwcm9taXNlQ3RvciA9IGdldFByb21pc2VDdG9yKHByb21pc2VDdG9yKTtcbiAgICAgIHJldHVybiBuZXcgcHJvbWlzZUN0b3IoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCBzdWJzY3JpYmVyID0gbmV3IFNhZmVTdWJzY3JpYmVyKHtcbiAgICAgICAgICBuZXh0OiB2YWx1ZSA9PiB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBuZXh0KHZhbHVlKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgc3Vic2NyaWJlci51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgZXJyb3I6IHJlamVjdCxcbiAgICAgICAgICBjb21wbGV0ZTogcmVzb2x2ZVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gICAgICB9KTtcbiAgICB9XG4gICAgX3N1YnNjcmliZShzdWJzY3JpYmVyKSB7XG4gICAgICB2YXIgX2E7XG4gICAgICByZXR1cm4gKF9hID0gdGhpcy5zb3VyY2UpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gICAgfVxuICAgIFtTeW1ib2xfb2JzZXJ2YWJsZV0oKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgcGlwZSguLi5vcGVyYXRpb25zKSB7XG4gICAgICByZXR1cm4gcGlwZUZyb21BcnJheShvcGVyYXRpb25zKSh0aGlzKTtcbiAgICB9XG4gICAgdG9Qcm9taXNlKHByb21pc2VDdG9yKSB7XG4gICAgICBwcm9taXNlQ3RvciA9IGdldFByb21pc2VDdG9yKHByb21pc2VDdG9yKTtcbiAgICAgIHJldHVybiBuZXcgcHJvbWlzZUN0b3IoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBsZXQgdmFsdWU7XG4gICAgICAgIHRoaXMuc3Vic2NyaWJlKHggPT4gdmFsdWUgPSB4LCBlcnIgPT4gcmVqZWN0KGVyciksICgpID0+IHJlc29sdmUodmFsdWUpKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICBPYnNlcnZhYmxlLmNyZWF0ZSA9IHN1YnNjcmliZSA9PiB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKHN1YnNjcmliZSk7XG4gIH07XG4gIHJldHVybiBPYnNlcnZhYmxlO1xufSkoKTtcbmZ1bmN0aW9uIGdldFByb21pc2VDdG9yKHByb21pc2VDdG9yKSB7XG4gIHZhciBfYTtcbiAgcmV0dXJuIChfYSA9IHByb21pc2VDdG9yICE9PSBudWxsICYmIHByb21pc2VDdG9yICE9PSB2b2lkIDAgPyBwcm9taXNlQ3RvciA6IGNvbmZpZy5Qcm9taXNlKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBQcm9taXNlO1xufVxuZnVuY3Rpb24gaXNPYnNlcnZlcih2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgJiYgaXNGdW5jdGlvbih2YWx1ZS5uZXh0KSAmJiBpc0Z1bmN0aW9uKHZhbHVlLmVycm9yKSAmJiBpc0Z1bmN0aW9uKHZhbHVlLmNvbXBsZXRlKTtcbn1cbmZ1bmN0aW9uIGlzU3Vic2NyaWJlcih2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgJiYgdmFsdWUgaW5zdGFuY2VvZiBTdWJzY3JpYmVyIHx8IGlzT2JzZXJ2ZXIodmFsdWUpICYmIGlzU3Vic2NyaXB0aW9uKHZhbHVlKTtcbn1cbiIsImltcG9ydCB7IGNyZWF0ZUVycm9yQ2xhc3MgfSBmcm9tICcuL2NyZWF0ZUVycm9yQ2xhc3MnO1xuZXhwb3J0IGNvbnN0IE9iamVjdFVuc3Vic2NyaWJlZEVycm9yID0gY3JlYXRlRXJyb3JDbGFzcyhfc3VwZXIgPT4gZnVuY3Rpb24gT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3JJbXBsKCkge1xuICBfc3VwZXIodGhpcyk7XG4gIHRoaXMubmFtZSA9ICdPYmplY3RVbnN1YnNjcmliZWRFcnJvcic7XG4gIHRoaXMubWVzc2FnZSA9ICdvYmplY3QgdW5zdWJzY3JpYmVkJztcbn0pO1xuIiwiaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJy4vT2JzZXJ2YWJsZSc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24sIEVNUFRZX1NVQlNDUklQVElPTiB9IGZyb20gJy4vU3Vic2NyaXB0aW9uJztcbmltcG9ydCB7IE9iamVjdFVuc3Vic2NyaWJlZEVycm9yIH0gZnJvbSAnLi91dGlsL09iamVjdFVuc3Vic2NyaWJlZEVycm9yJztcbmltcG9ydCB7IGFyclJlbW92ZSB9IGZyb20gJy4vdXRpbC9hcnJSZW1vdmUnO1xuaW1wb3J0IHsgZXJyb3JDb250ZXh0IH0gZnJvbSAnLi91dGlsL2Vycm9yQ29udGV4dCc7XG5leHBvcnQgbGV0IFN1YmplY3QgPSAvKiNfX1BVUkVfXyovKCgpID0+IHtcbiAgY2xhc3MgU3ViamVjdCBleHRlbmRzIE9ic2VydmFibGUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgc3VwZXIoKTtcbiAgICAgIHRoaXMuY2xvc2VkID0gZmFsc2U7XG4gICAgICB0aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsO1xuICAgICAgdGhpcy5vYnNlcnZlcnMgPSBbXTtcbiAgICAgIHRoaXMuaXNTdG9wcGVkID0gZmFsc2U7XG4gICAgICB0aGlzLmhhc0Vycm9yID0gZmFsc2U7XG4gICAgICB0aGlzLnRocm93bkVycm9yID0gbnVsbDtcbiAgICB9XG4gICAgbGlmdChvcGVyYXRvcikge1xuICAgICAgY29uc3Qgc3ViamVjdCA9IG5ldyBBbm9ueW1vdXNTdWJqZWN0KHRoaXMsIHRoaXMpO1xuICAgICAgc3ViamVjdC5vcGVyYXRvciA9IG9wZXJhdG9yO1xuICAgICAgcmV0dXJuIHN1YmplY3Q7XG4gICAgfVxuICAgIF90aHJvd0lmQ2xvc2VkKCkge1xuICAgICAgaWYgKHRoaXMuY2xvc2VkKSB7XG4gICAgICAgIHRocm93IG5ldyBPYmplY3RVbnN1YnNjcmliZWRFcnJvcigpO1xuICAgICAgfVxuICAgIH1cbiAgICBuZXh0KHZhbHVlKSB7XG4gICAgICBlcnJvckNvbnRleHQoKCkgPT4ge1xuICAgICAgICB0aGlzLl90aHJvd0lmQ2xvc2VkKCk7XG4gICAgICAgIGlmICghdGhpcy5pc1N0b3BwZWQpIHtcbiAgICAgICAgICBpZiAoIXRoaXMuY3VycmVudE9ic2VydmVycykge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50T2JzZXJ2ZXJzID0gQXJyYXkuZnJvbSh0aGlzLm9ic2VydmVycyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZvciAoY29uc3Qgb2JzZXJ2ZXIgb2YgdGhpcy5jdXJyZW50T2JzZXJ2ZXJzKSB7XG4gICAgICAgICAgICBvYnNlcnZlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICBlcnJvcihlcnIpIHtcbiAgICAgIGVycm9yQ29udGV4dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuX3Rocm93SWZDbG9zZWQoKTtcbiAgICAgICAgaWYgKCF0aGlzLmlzU3RvcHBlZCkge1xuICAgICAgICAgIHRoaXMuaGFzRXJyb3IgPSB0aGlzLmlzU3RvcHBlZCA9IHRydWU7XG4gICAgICAgICAgdGhpcy50aHJvd25FcnJvciA9IGVycjtcbiAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBvYnNlcnZlcnNcbiAgICAgICAgICB9ID0gdGhpcztcbiAgICAgICAgICB3aGlsZSAob2JzZXJ2ZXJzLmxlbmd0aCkge1xuICAgICAgICAgICAgb2JzZXJ2ZXJzLnNoaWZ0KCkuZXJyb3IoZXJyKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICBjb21wbGV0ZSgpIHtcbiAgICAgIGVycm9yQ29udGV4dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuX3Rocm93SWZDbG9zZWQoKTtcbiAgICAgICAgaWYgKCF0aGlzLmlzU3RvcHBlZCkge1xuICAgICAgICAgIHRoaXMuaXNTdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBvYnNlcnZlcnNcbiAgICAgICAgICB9ID0gdGhpcztcbiAgICAgICAgICB3aGlsZSAob2JzZXJ2ZXJzLmxlbmd0aCkge1xuICAgICAgICAgICAgb2JzZXJ2ZXJzLnNoaWZ0KCkuY29tcGxldGUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICB1bnN1YnNjcmliZSgpIHtcbiAgICAgIHRoaXMuaXNTdG9wcGVkID0gdGhpcy5jbG9zZWQgPSB0cnVlO1xuICAgICAgdGhpcy5vYnNlcnZlcnMgPSB0aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsO1xuICAgIH1cbiAgICBnZXQgb2JzZXJ2ZWQoKSB7XG4gICAgICB2YXIgX2E7XG4gICAgICByZXR1cm4gKChfYSA9IHRoaXMub2JzZXJ2ZXJzKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EubGVuZ3RoKSA+IDA7XG4gICAgfVxuICAgIF90cnlTdWJzY3JpYmUoc3Vic2NyaWJlcikge1xuICAgICAgdGhpcy5fdGhyb3dJZkNsb3NlZCgpO1xuICAgICAgcmV0dXJuIHN1cGVyLl90cnlTdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gICAgfVxuICAgIF9zdWJzY3JpYmUoc3Vic2NyaWJlcikge1xuICAgICAgdGhpcy5fdGhyb3dJZkNsb3NlZCgpO1xuICAgICAgdGhpcy5fY2hlY2tGaW5hbGl6ZWRTdGF0dXNlcyhzdWJzY3JpYmVyKTtcbiAgICAgIHJldHVybiB0aGlzLl9pbm5lclN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICB9XG4gICAgX2lubmVyU3Vic2NyaWJlKHN1YnNjcmliZXIpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgaGFzRXJyb3IsXG4gICAgICAgIGlzU3RvcHBlZCxcbiAgICAgICAgb2JzZXJ2ZXJzXG4gICAgICB9ID0gdGhpcztcbiAgICAgIGlmIChoYXNFcnJvciB8fCBpc1N0b3BwZWQpIHtcbiAgICAgICAgcmV0dXJuIEVNUFRZX1NVQlNDUklQVElPTjtcbiAgICAgIH1cbiAgICAgIHRoaXMuY3VycmVudE9ic2VydmVycyA9IG51bGw7XG4gICAgICBvYnNlcnZlcnMucHVzaChzdWJzY3JpYmVyKTtcbiAgICAgIHJldHVybiBuZXcgU3Vic2NyaXB0aW9uKCgpID0+IHtcbiAgICAgICAgdGhpcy5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbDtcbiAgICAgICAgYXJyUmVtb3ZlKG9ic2VydmVycywgc3Vic2NyaWJlcik7XG4gICAgICB9KTtcbiAgICB9XG4gICAgX2NoZWNrRmluYWxpemVkU3RhdHVzZXMoc3Vic2NyaWJlcikge1xuICAgICAgY29uc3Qge1xuICAgICAgICBoYXNFcnJvcixcbiAgICAgICAgdGhyb3duRXJyb3IsXG4gICAgICAgIGlzU3RvcHBlZFxuICAgICAgfSA9IHRoaXM7XG4gICAgICBpZiAoaGFzRXJyb3IpIHtcbiAgICAgICAgc3Vic2NyaWJlci5lcnJvcih0aHJvd25FcnJvcik7XG4gICAgICB9IGVsc2UgaWYgKGlzU3RvcHBlZCkge1xuICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICB9XG4gICAgfVxuICAgIGFzT2JzZXJ2YWJsZSgpIHtcbiAgICAgIGNvbnN0IG9ic2VydmFibGUgPSBuZXcgT2JzZXJ2YWJsZSgpO1xuICAgICAgb2JzZXJ2YWJsZS5zb3VyY2UgPSB0aGlzO1xuICAgICAgcmV0dXJuIG9ic2VydmFibGU7XG4gICAgfVxuICB9XG4gIFN1YmplY3QuY3JlYXRlID0gKGRlc3RpbmF0aW9uLCBzb3VyY2UpID0+IHtcbiAgICByZXR1cm4gbmV3IEFub255bW91c1N1YmplY3QoZGVzdGluYXRpb24sIHNvdXJjZSk7XG4gIH07XG4gIHJldHVybiBTdWJqZWN0O1xufSkoKTtcbmV4cG9ydCBjbGFzcyBBbm9ueW1vdXNTdWJqZWN0IGV4dGVuZHMgU3ViamVjdCB7XG4gIGNvbnN0cnVjdG9yKGRlc3RpbmF0aW9uLCBzb3VyY2UpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuZGVzdGluYXRpb24gPSBkZXN0aW5hdGlvbjtcbiAgICB0aGlzLnNvdXJjZSA9IHNvdXJjZTtcbiAgfVxuICBuZXh0KHZhbHVlKSB7XG4gICAgdmFyIF9hLCBfYjtcbiAgICAoX2IgPSAoX2EgPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EubmV4dCkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EsIHZhbHVlKTtcbiAgfVxuICBlcnJvcihlcnIpIHtcbiAgICB2YXIgX2EsIF9iO1xuICAgIChfYiA9IChfYSA9IHRoaXMuZGVzdGluYXRpb24pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5lcnJvcikgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EsIGVycik7XG4gIH1cbiAgY29tcGxldGUoKSB7XG4gICAgdmFyIF9hLCBfYjtcbiAgICAoX2IgPSAoX2EgPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY29tcGxldGUpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKF9hKTtcbiAgfVxuICBfc3Vic2NyaWJlKHN1YnNjcmliZXIpIHtcbiAgICB2YXIgX2EsIF9iO1xuICAgIHJldHVybiAoX2IgPSAoX2EgPSB0aGlzLnNvdXJjZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnN1YnNjcmliZShzdWJzY3JpYmVyKSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogRU1QVFlfU1VCU0NSSVBUSU9OO1xuICB9XG59XG4iLCJpbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAnLi9TdWJqZWN0JztcbmV4cG9ydCBjbGFzcyBCZWhhdmlvclN1YmplY3QgZXh0ZW5kcyBTdWJqZWN0IHtcbiAgY29uc3RydWN0b3IoX3ZhbHVlKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLl92YWx1ZSA9IF92YWx1ZTtcbiAgfVxuICBnZXQgdmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VmFsdWUoKTtcbiAgfVxuICBfc3Vic2NyaWJlKHN1YnNjcmliZXIpIHtcbiAgICBjb25zdCBzdWJzY3JpcHRpb24gPSBzdXBlci5fc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgICFzdWJzY3JpcHRpb24uY2xvc2VkICYmIHN1YnNjcmliZXIubmV4dCh0aGlzLl92YWx1ZSk7XG4gICAgcmV0dXJuIHN1YnNjcmlwdGlvbjtcbiAgfVxuICBnZXRWYWx1ZSgpIHtcbiAgICBjb25zdCB7XG4gICAgICBoYXNFcnJvcixcbiAgICAgIHRocm93bkVycm9yLFxuICAgICAgX3ZhbHVlXG4gICAgfSA9IHRoaXM7XG4gICAgaWYgKGhhc0Vycm9yKSB7XG4gICAgICB0aHJvdyB0aHJvd25FcnJvcjtcbiAgICB9XG4gICAgdGhpcy5fdGhyb3dJZkNsb3NlZCgpO1xuICAgIHJldHVybiBfdmFsdWU7XG4gIH1cbiAgbmV4dCh2YWx1ZSkge1xuICAgIHN1cGVyLm5leHQodGhpcy5fdmFsdWUgPSB2YWx1ZSk7XG4gIH1cbn1cbiIsImltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tICcuL2lzRnVuY3Rpb24nO1xuZXhwb3J0IGZ1bmN0aW9uIGlzU2NoZWR1bGVyKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAmJiBpc0Z1bmN0aW9uKHZhbHVlLnNjaGVkdWxlKTtcbn1cbiIsImltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tICcuL2lzRnVuY3Rpb24nO1xuaW1wb3J0IHsgaXNTY2hlZHVsZXIgfSBmcm9tICcuL2lzU2NoZWR1bGVyJztcbmZ1bmN0aW9uIGxhc3QoYXJyKSB7XG4gIHJldHVybiBhcnJbYXJyLmxlbmd0aCAtIDFdO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHBvcFJlc3VsdFNlbGVjdG9yKGFyZ3MpIHtcbiAgcmV0dXJuIGlzRnVuY3Rpb24obGFzdChhcmdzKSkgPyBhcmdzLnBvcCgpIDogdW5kZWZpbmVkO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHBvcFNjaGVkdWxlcihhcmdzKSB7XG4gIHJldHVybiBpc1NjaGVkdWxlcihsYXN0KGFyZ3MpKSA/IGFyZ3MucG9wKCkgOiB1bmRlZmluZWQ7XG59XG5leHBvcnQgZnVuY3Rpb24gcG9wTnVtYmVyKGFyZ3MsIGRlZmF1bHRWYWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIGxhc3QoYXJncykgPT09ICdudW1iZXInID8gYXJncy5wb3AoKSA6IGRlZmF1bHRWYWx1ZTtcbn1cbiIsIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuXG5QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnlcbnB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSFxuUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZXG5BTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsXG5JTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST01cbkxPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SXG5PVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SXG5QRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLlxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cbi8qIGdsb2JhbCBSZWZsZWN0LCBQcm9taXNlLCBTdXBwcmVzc2VkRXJyb3IsIFN5bWJvbCwgSXRlcmF0b3IgKi9cblxudmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IHtcbiAgICBfX3Byb3RvX186IFtdXG4gIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikge1xuICAgIGQuX19wcm90b19fID0gYjtcbiAgfSB8fCBmdW5jdGlvbiAoZCwgYikge1xuICAgIGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07XG4gIH07XG4gIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBfX2V4dGVuZHMoZCwgYikge1xuICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gIGZ1bmN0aW9uIF9fKCkge1xuICAgIHRoaXMuY29uc3RydWN0b3IgPSBkO1xuICB9XG4gIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbn1cbmV4cG9ydCB2YXIgX19hc3NpZ24gPSBmdW5jdGlvbiAoKSB7XG4gIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiBfX2Fzc2lnbih0KSB7XG4gICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICBzID0gYXJndW1lbnRzW2ldO1xuICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKSB0W3BdID0gc1twXTtcbiAgICB9XG4gICAgcmV0dXJuIHQ7XG4gIH07XG4gIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBfX3Jlc3QocywgZSkge1xuICB2YXIgdCA9IHt9O1xuICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMCkgdFtwXSA9IHNbcF07XG4gIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIikgZm9yICh2YXIgaSA9IDAsIHAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHMpOyBpIDwgcC5sZW5ndGg7IGkrKykge1xuICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSkgdFtwW2ldXSA9IHNbcFtpXV07XG4gIH1cbiAgcmV0dXJuIHQ7XG59XG5leHBvcnQgZnVuY3Rpb24gX19kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xuICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsXG4gICAgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsXG4gICAgZDtcbiAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xuICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xufVxuZXhwb3J0IGZ1bmN0aW9uIF9fcGFyYW0ocGFyYW1JbmRleCwgZGVjb3JhdG9yKSB7XG4gIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBrZXkpIHtcbiAgICBkZWNvcmF0b3IodGFyZ2V0LCBrZXksIHBhcmFtSW5kZXgpO1xuICB9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIF9fZXNEZWNvcmF0ZShjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykge1xuICBmdW5jdGlvbiBhY2NlcHQoZikge1xuICAgIGlmIChmICE9PSB2b2lkIDAgJiYgdHlwZW9mIGYgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZ1bmN0aW9uIGV4cGVjdGVkXCIpO1xuICAgIHJldHVybiBmO1xuICB9XG4gIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsXG4gICAga2V5ID0ga2luZCA9PT0gXCJnZXR0ZXJcIiA/IFwiZ2V0XCIgOiBraW5kID09PSBcInNldHRlclwiID8gXCJzZXRcIiA6IFwidmFsdWVcIjtcbiAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJbltcInN0YXRpY1wiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7XG4gIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pO1xuICB2YXIgXyxcbiAgICBkb25lID0gZmFsc2U7XG4gIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgdmFyIGNvbnRleHQgPSB7fTtcbiAgICBmb3IgKHZhciBwIGluIGNvbnRleHRJbikgY29udGV4dFtwXSA9IHAgPT09IFwiYWNjZXNzXCIgPyB7fSA6IGNvbnRleHRJbltwXTtcbiAgICBmb3IgKHZhciBwIGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQuYWNjZXNzW3BdID0gY29udGV4dEluLmFjY2Vzc1twXTtcbiAgICBjb250ZXh0LmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24gKGYpIHtcbiAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkXCIpO1xuICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZiB8fCBudWxsKSk7XG4gICAgfTtcbiAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaV0pKGtpbmQgPT09IFwiYWNjZXNzb3JcIiA/IHtcbiAgICAgIGdldDogZGVzY3JpcHRvci5nZXQsXG4gICAgICBzZXQ6IGRlc2NyaXB0b3Iuc2V0XG4gICAgfSA6IGRlc2NyaXB0b3Jba2V5XSwgY29udGV4dCk7XG4gICAgaWYgKGtpbmQgPT09IFwiYWNjZXNzb3JcIikge1xuICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTtcbiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gXCJvYmplY3RcIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk9iamVjdCBleHBlY3RlZFwiKTtcbiAgICAgIGlmIChfID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF87XG4gICAgICBpZiAoXyA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfO1xuICAgICAgaWYgKF8gPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfKTtcbiAgICB9IGVsc2UgaWYgKF8gPSBhY2NlcHQocmVzdWx0KSkge1xuICAgICAgaWYgKGtpbmQgPT09IFwiZmllbGRcIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXyk7ZWxzZSBkZXNjcmlwdG9yW2tleV0gPSBfO1xuICAgIH1cbiAgfVxuICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7XG4gIGRvbmUgPSB0cnVlO1xufVxuO1xuZXhwb3J0IGZ1bmN0aW9uIF9fcnVuSW5pdGlhbGl6ZXJzKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUpIHtcbiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFsdWUgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpXS5jYWxsKHRoaXNBcmcsIHZhbHVlKSA6IGluaXRpYWxpemVyc1tpXS5jYWxsKHRoaXNBcmcpO1xuICB9XG4gIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlIDogdm9pZCAwO1xufVxuO1xuZXhwb3J0IGZ1bmN0aW9uIF9fcHJvcEtleSh4KSB7XG4gIHJldHVybiB0eXBlb2YgeCA9PT0gXCJzeW1ib2xcIiA/IHggOiBcIlwiLmNvbmNhdCh4KTtcbn1cbjtcbmV4cG9ydCBmdW5jdGlvbiBfX3NldEZ1bmN0aW9uTmFtZShmLCBuYW1lLCBwcmVmaXgpIHtcbiAgaWYgKHR5cGVvZiBuYW1lID09PSBcInN5bWJvbFwiKSBuYW1lID0gbmFtZS5kZXNjcmlwdGlvbiA/IFwiW1wiLmNvbmNhdChuYW1lLmRlc2NyaXB0aW9uLCBcIl1cIikgOiBcIlwiO1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGYsIFwibmFtZVwiLCB7XG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIHZhbHVlOiBwcmVmaXggPyBcIlwiLmNvbmNhdChwcmVmaXgsIFwiIFwiLCBuYW1lKSA6IG5hbWVcbiAgfSk7XG59XG47XG5leHBvcnQgZnVuY3Rpb24gX19tZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSkge1xuICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QubWV0YWRhdGEgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIF9fYXdhaXRlcih0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgcmVzb2x2ZSh2YWx1ZSk7XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7XG4gICAgICB0cnkge1xuICAgICAgICBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJlamVjdChlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkge1xuICAgICAgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7XG4gICAgfVxuICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gX19nZW5lcmF0b3IodGhpc0FyZywgYm9keSkge1xuICB2YXIgXyA9IHtcbiAgICAgIGxhYmVsOiAwLFxuICAgICAgc2VudDogZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodFswXSAmIDEpIHRocm93IHRbMV07XG4gICAgICAgIHJldHVybiB0WzFdO1xuICAgICAgfSxcbiAgICAgIHRyeXM6IFtdLFxuICAgICAgb3BzOiBbXVxuICAgIH0sXG4gICAgZixcbiAgICB5LFxuICAgIHQsXG4gICAgZyA9IE9iamVjdC5jcmVhdGUoKHR5cGVvZiBJdGVyYXRvciA9PT0gXCJmdW5jdGlvblwiID8gSXRlcmF0b3IgOiBPYmplY3QpLnByb3RvdHlwZSk7XG4gIHJldHVybiBnLm5leHQgPSB2ZXJiKDApLCBnW1widGhyb3dcIl0gPSB2ZXJiKDEpLCBnW1wicmV0dXJuXCJdID0gdmVyYigyKSwgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIChnW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0pLCBnO1xuICBmdW5jdGlvbiB2ZXJiKG4pIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHYpIHtcbiAgICAgIHJldHVybiBzdGVwKFtuLCB2XSk7XG4gICAgfTtcbiAgfVxuICBmdW5jdGlvbiBzdGVwKG9wKSB7XG4gICAgaWYgKGYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xuICAgIHdoaWxlIChnICYmIChnID0gMCwgb3BbMF0gJiYgKF8gPSAwKSksIF8pIHRyeSB7XG4gICAgICBpZiAoZiA9IDEsIHkgJiYgKHQgPSBvcFswXSAmIDIgPyB5W1wicmV0dXJuXCJdIDogb3BbMF0gPyB5W1widGhyb3dcIl0gfHwgKCh0ID0geVtcInJldHVyblwiXSkgJiYgdC5jYWxsKHkpLCAwKSA6IHkubmV4dCkgJiYgISh0ID0gdC5jYWxsKHksIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ7XG4gICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XG4gICAgICBzd2l0Y2ggKG9wWzBdKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIHQgPSBvcDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIF8ubGFiZWwrKztcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdmFsdWU6IG9wWzFdLFxuICAgICAgICAgICAgZG9uZTogZmFsc2VcbiAgICAgICAgICB9O1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgXy5sYWJlbCsrO1xuICAgICAgICAgIHkgPSBvcFsxXTtcbiAgICAgICAgICBvcCA9IFswXTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSA3OlxuICAgICAgICAgIG9wID0gXy5vcHMucG9wKCk7XG4gICAgICAgICAgXy50cnlzLnBvcCgpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7XG4gICAgICAgICAgICBfID0gMDtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAob3BbMF0gPT09IDMgJiYgKCF0IHx8IG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSB7XG4gICAgICAgICAgICBfLmxhYmVsID0gb3BbMV07XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7XG4gICAgICAgICAgICBfLmxhYmVsID0gdFsxXTtcbiAgICAgICAgICAgIHQgPSBvcDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkge1xuICAgICAgICAgICAgXy5sYWJlbCA9IHRbMl07XG4gICAgICAgICAgICBfLm9wcy5wdXNoKG9wKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7XG4gICAgICAgICAgXy50cnlzLnBvcCgpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgb3AgPSBbNiwgZV07XG4gICAgICB5ID0gMDtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgZiA9IHQgPSAwO1xuICAgIH1cbiAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTtcbiAgICByZXR1cm4ge1xuICAgICAgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsXG4gICAgICBkb25lOiB0cnVlXG4gICAgfTtcbiAgfVxufVxuZXhwb3J0IHZhciBfX2NyZWF0ZUJpbmRpbmcgPSBPYmplY3QuY3JlYXRlID8gZnVuY3Rpb24gKG8sIG0sIGssIGsyKSB7XG4gIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICBkZXNjID0ge1xuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gbVtrXTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG59IDogZnVuY3Rpb24gKG8sIG0sIGssIGsyKSB7XG4gIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gIG9bazJdID0gbVtrXTtcbn07XG5leHBvcnQgZnVuY3Rpb24gX19leHBvcnRTdGFyKG0sIG8pIHtcbiAgZm9yICh2YXIgcCBpbiBtKSBpZiAocCAhPT0gXCJkZWZhdWx0XCIgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvLCBwKSkgX19jcmVhdGVCaW5kaW5nKG8sIG0sIHApO1xufVxuZXhwb3J0IGZ1bmN0aW9uIF9fdmFsdWVzKG8pIHtcbiAgdmFyIHMgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLml0ZXJhdG9yLFxuICAgIG0gPSBzICYmIG9bc10sXG4gICAgaSA9IDA7XG4gIGlmIChtKSByZXR1cm4gbS5jYWxsKG8pO1xuICBpZiAobyAmJiB0eXBlb2Ygby5sZW5ndGggPT09IFwibnVtYmVyXCIpIHJldHVybiB7XG4gICAgbmV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKG8gJiYgaSA+PSBvLmxlbmd0aCkgbyA9IHZvaWQgMDtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZhbHVlOiBvICYmIG9baSsrXSxcbiAgICAgICAgZG9uZTogIW9cbiAgICAgIH07XG4gICAgfVxuICB9O1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKHMgPyBcIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCIgOiBcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG59XG5leHBvcnQgZnVuY3Rpb24gX19yZWFkKG8sIG4pIHtcbiAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xuICBpZiAoIW0pIHJldHVybiBvO1xuICB2YXIgaSA9IG0uY2FsbChvKSxcbiAgICByLFxuICAgIGFyID0gW10sXG4gICAgZTtcbiAgdHJ5IHtcbiAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBlID0ge1xuICAgICAgZXJyb3I6IGVycm9yXG4gICAgfTtcbiAgfSBmaW5hbGx5IHtcbiAgICB0cnkge1xuICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmIChlKSB0aHJvdyBlLmVycm9yO1xuICAgIH1cbiAgfVxuICByZXR1cm4gYXI7XG59XG5cbi8qKiBAZGVwcmVjYXRlZCAqL1xuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkKCkge1xuICBmb3IgKHZhciBhciA9IFtdLCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgYXIgPSBhci5jb25jYXQoX19yZWFkKGFyZ3VtZW50c1tpXSkpO1xuICByZXR1cm4gYXI7XG59XG5cbi8qKiBAZGVwcmVjYXRlZCAqL1xuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkQXJyYXlzKCkge1xuICBmb3IgKHZhciBzID0gMCwgaSA9IDAsIGlsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGlsOyBpKyspIHMgKz0gYXJndW1lbnRzW2ldLmxlbmd0aDtcbiAgZm9yICh2YXIgciA9IEFycmF5KHMpLCBrID0gMCwgaSA9IDA7IGkgPCBpbDsgaSsrKSBmb3IgKHZhciBhID0gYXJndW1lbnRzW2ldLCBqID0gMCwgamwgPSBhLmxlbmd0aDsgaiA8IGpsOyBqKyssIGsrKykgcltrXSA9IGFbal07XG4gIHJldHVybiByO1xufVxuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkQXJyYXkodG8sIGZyb20sIHBhY2spIHtcbiAgaWYgKHBhY2sgfHwgYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgaSA9IDAsIGwgPSBmcm9tLmxlbmd0aCwgYXI7IGkgPCBsOyBpKyspIHtcbiAgICBpZiAoYXIgfHwgIShpIGluIGZyb20pKSB7XG4gICAgICBpZiAoIWFyKSBhciA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20sIDAsIGkpO1xuICAgICAgYXJbaV0gPSBmcm9tW2ldO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdG8uY29uY2F0KGFyIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20pKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBfX2F3YWl0KHYpIHtcbiAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBfX2F3YWl0ID8gKHRoaXMudiA9IHYsIHRoaXMpIDogbmV3IF9fYXdhaXQodik7XG59XG5leHBvcnQgZnVuY3Rpb24gX19hc3luY0dlbmVyYXRvcih0aGlzQXJnLCBfYXJndW1lbnRzLCBnZW5lcmF0b3IpIHtcbiAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgdmFyIGcgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSksXG4gICAgaSxcbiAgICBxID0gW107XG4gIHJldHVybiBpID0gT2JqZWN0LmNyZWF0ZSgodHlwZW9mIEFzeW5jSXRlcmF0b3IgPT09IFwiZnVuY3Rpb25cIiA/IEFzeW5jSXRlcmF0b3IgOiBPYmplY3QpLnByb3RvdHlwZSksIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiwgYXdhaXRSZXR1cm4pLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSwgaTtcbiAgZnVuY3Rpb24gYXdhaXRSZXR1cm4oZikge1xuICAgIHJldHVybiBmdW5jdGlvbiAodikge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh2KS50aGVuKGYsIHJlamVjdCk7XG4gICAgfTtcbiAgfVxuICBmdW5jdGlvbiB2ZXJiKG4sIGYpIHtcbiAgICBpZiAoZ1tuXSkge1xuICAgICAgaVtuXSA9IGZ1bmN0aW9uICh2KSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgIHEucHVzaChbbiwgdiwgYSwgYl0pID4gMSB8fCByZXN1bWUobiwgdik7XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGlmIChmKSBpW25dID0gZihpW25dKTtcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gcmVzdW1lKG4sIHYpIHtcbiAgICB0cnkge1xuICAgICAgc3RlcChnW25dKHYpKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBzZXR0bGUocVswXVszXSwgZSk7XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIHN0ZXAocikge1xuICAgIHIudmFsdWUgaW5zdGFuY2VvZiBfX2F3YWl0ID8gUHJvbWlzZS5yZXNvbHZlKHIudmFsdWUudikudGhlbihmdWxmaWxsLCByZWplY3QpIDogc2V0dGxlKHFbMF1bMl0sIHIpO1xuICB9XG4gIGZ1bmN0aW9uIGZ1bGZpbGwodmFsdWUpIHtcbiAgICByZXN1bWUoXCJuZXh0XCIsIHZhbHVlKTtcbiAgfVxuICBmdW5jdGlvbiByZWplY3QodmFsdWUpIHtcbiAgICByZXN1bWUoXCJ0aHJvd1wiLCB2YWx1ZSk7XG4gIH1cbiAgZnVuY3Rpb24gc2V0dGxlKGYsIHYpIHtcbiAgICBpZiAoZih2KSwgcS5zaGlmdCgpLCBxLmxlbmd0aCkgcmVzdW1lKHFbMF1bMF0sIHFbMF1bMV0pO1xuICB9XG59XG5leHBvcnQgZnVuY3Rpb24gX19hc3luY0RlbGVnYXRvcihvKSB7XG4gIHZhciBpLCBwO1xuICByZXR1cm4gaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIsIGZ1bmN0aW9uIChlKSB7XG4gICAgdGhyb3cgZTtcbiAgfSksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSwgaTtcbiAgZnVuY3Rpb24gdmVyYihuLCBmKSB7XG4gICAgaVtuXSA9IG9bbl0gPyBmdW5jdGlvbiAodikge1xuICAgICAgcmV0dXJuIChwID0gIXApID8ge1xuICAgICAgICB2YWx1ZTogX19hd2FpdChvW25dKHYpKSxcbiAgICAgICAgZG9uZTogZmFsc2VcbiAgICAgIH0gOiBmID8gZih2KSA6IHY7XG4gICAgfSA6IGY7XG4gIH1cbn1cbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jVmFsdWVzKG8pIHtcbiAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgdmFyIG0gPSBvW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSxcbiAgICBpO1xuICByZXR1cm4gbSA/IG0uY2FsbChvKSA6IChvID0gdHlwZW9mIF9fdmFsdWVzID09PSBcImZ1bmN0aW9uXCIgPyBfX3ZhbHVlcyhvKSA6IG9bU3ltYm9sLml0ZXJhdG9yXSgpLCBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9LCBpKTtcbiAgZnVuY3Rpb24gdmVyYihuKSB7XG4gICAgaVtuXSA9IG9bbl0gJiYgZnVuY3Rpb24gKHYpIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIHYgPSBvW25dKHYpLCBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCB2LmRvbmUsIHYudmFsdWUpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgfVxuICBmdW5jdGlvbiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCBkLCB2KSB7XG4gICAgUHJvbWlzZS5yZXNvbHZlKHYpLnRoZW4oZnVuY3Rpb24gKHYpIHtcbiAgICAgIHJlc29sdmUoe1xuICAgICAgICB2YWx1ZTogdixcbiAgICAgICAgZG9uZTogZFxuICAgICAgfSk7XG4gICAgfSwgcmVqZWN0KTtcbiAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIF9fbWFrZVRlbXBsYXRlT2JqZWN0KGNvb2tlZCwgcmF3KSB7XG4gIGlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29va2VkLCBcInJhd1wiLCB7XG4gICAgICB2YWx1ZTogcmF3XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgY29va2VkLnJhdyA9IHJhdztcbiAgfVxuICByZXR1cm4gY29va2VkO1xufVxuO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9IE9iamVjdC5jcmVhdGUgPyBmdW5jdGlvbiAobywgdikge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIHZhbHVlOiB2XG4gIH0pO1xufSA6IGZ1bmN0aW9uIChvLCB2KSB7XG4gIG9bXCJkZWZhdWx0XCJdID0gdjtcbn07XG52YXIgb3duS2V5cyA9IGZ1bmN0aW9uIChvKSB7XG4gIG93bktleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB8fCBmdW5jdGlvbiAobykge1xuICAgIHZhciBhciA9IFtdO1xuICAgIGZvciAodmFyIGsgaW4gbykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvLCBrKSkgYXJbYXIubGVuZ3RoXSA9IGs7XG4gICAgcmV0dXJuIGFyO1xuICB9O1xuICByZXR1cm4gb3duS2V5cyhvKTtcbn07XG5leHBvcnQgZnVuY3Rpb24gX19pbXBvcnRTdGFyKG1vZCkge1xuICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICB2YXIgcmVzdWx0ID0ge307XG4gIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayA9IG93bktleXMobW9kKSwgaSA9IDA7IGkgPCBrLmxlbmd0aDsgaSsrKSBpZiAoa1tpXSAhPT0gXCJkZWZhdWx0XCIpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwga1tpXSk7XG4gIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5leHBvcnQgZnVuY3Rpb24gX19pbXBvcnREZWZhdWx0KG1vZCkge1xuICByZXR1cm4gbW9kICYmIG1vZC5fX2VzTW9kdWxlID8gbW9kIDoge1xuICAgIGRlZmF1bHQ6IG1vZFxuICB9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRHZXQocmVjZWl2ZXIsIHN0YXRlLCBraW5kLCBmKSB7XG4gIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIGdldHRlclwiKTtcbiAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgcmVhZCBwcml2YXRlIG1lbWJlciBmcm9tIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XG4gIHJldHVybiBraW5kID09PSBcIm1cIiA/IGYgOiBraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlcikgOiBmID8gZi52YWx1ZSA6IHN0YXRlLmdldChyZWNlaXZlcik7XG59XG5leHBvcnQgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZFNldChyZWNlaXZlciwgc3RhdGUsIHZhbHVlLCBraW5kLCBmKSB7XG4gIGlmIChraW5kID09PSBcIm1cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgbWV0aG9kIGlzIG5vdCB3cml0YWJsZVwiKTtcbiAgaWYgKGtpbmQgPT09IFwiYVwiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgc2V0dGVyXCIpO1xuICBpZiAodHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciAhPT0gc3RhdGUgfHwgIWYgOiAhc3RhdGUuaGFzKHJlY2VpdmVyKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCB3cml0ZSBwcml2YXRlIG1lbWJlciB0byBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO1xuICByZXR1cm4ga2luZCA9PT0gXCJhXCIgPyBmLmNhbGwocmVjZWl2ZXIsIHZhbHVlKSA6IGYgPyBmLnZhbHVlID0gdmFsdWUgOiBzdGF0ZS5zZXQocmVjZWl2ZXIsIHZhbHVlKSwgdmFsdWU7XG59XG5leHBvcnQgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZEluKHN0YXRlLCByZWNlaXZlcikge1xuICBpZiAocmVjZWl2ZXIgPT09IG51bGwgfHwgdHlwZW9mIHJlY2VpdmVyICE9PSBcIm9iamVjdFwiICYmIHR5cGVvZiByZWNlaXZlciAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHVzZSAnaW4nIG9wZXJhdG9yIG9uIG5vbi1vYmplY3RcIik7XG4gIHJldHVybiB0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyID09PSBzdGF0ZSA6IHN0YXRlLmhhcyhyZWNlaXZlcik7XG59XG5leHBvcnQgZnVuY3Rpb24gX19hZGREaXNwb3NhYmxlUmVzb3VyY2UoZW52LCB2YWx1ZSwgYXN5bmMpIHtcbiAgaWYgKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB2b2lkIDApIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiICYmIHR5cGVvZiB2YWx1ZSAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiT2JqZWN0IGV4cGVjdGVkLlwiKTtcbiAgICB2YXIgZGlzcG9zZSwgaW5uZXI7XG4gICAgaWYgKGFzeW5jKSB7XG4gICAgICBpZiAoIVN5bWJvbC5hc3luY0Rpc3Bvc2UpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNEaXNwb3NlIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgICAgIGRpc3Bvc2UgPSB2YWx1ZVtTeW1ib2wuYXN5bmNEaXNwb3NlXTtcbiAgICB9XG4gICAgaWYgKGRpc3Bvc2UgPT09IHZvaWQgMCkge1xuICAgICAgaWYgKCFTeW1ib2wuZGlzcG9zZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5kaXNwb3NlIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgICAgIGRpc3Bvc2UgPSB2YWx1ZVtTeW1ib2wuZGlzcG9zZV07XG4gICAgICBpZiAoYXN5bmMpIGlubmVyID0gZGlzcG9zZTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBkaXNwb3NlICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJPYmplY3Qgbm90IGRpc3Bvc2FibGUuXCIpO1xuICAgIGlmIChpbm5lcikgZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlubmVyLmNhbGwodGhpcyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGVudi5zdGFjay5wdXNoKHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGRpc3Bvc2U6IGRpc3Bvc2UsXG4gICAgICBhc3luYzogYXN5bmNcbiAgICB9KTtcbiAgfSBlbHNlIGlmIChhc3luYykge1xuICAgIGVudi5zdGFjay5wdXNoKHtcbiAgICAgIGFzeW5jOiB0cnVlXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxudmFyIF9TdXBwcmVzc2VkRXJyb3IgPSB0eXBlb2YgU3VwcHJlc3NlZEVycm9yID09PSBcImZ1bmN0aW9uXCIgPyBTdXBwcmVzc2VkRXJyb3IgOiBmdW5jdGlvbiAoZXJyb3IsIHN1cHByZXNzZWQsIG1lc3NhZ2UpIHtcbiAgdmFyIGUgPSBuZXcgRXJyb3IobWVzc2FnZSk7XG4gIHJldHVybiBlLm5hbWUgPSBcIlN1cHByZXNzZWRFcnJvclwiLCBlLmVycm9yID0gZXJyb3IsIGUuc3VwcHJlc3NlZCA9IHN1cHByZXNzZWQsIGU7XG59O1xuZXhwb3J0IGZ1bmN0aW9uIF9fZGlzcG9zZVJlc291cmNlcyhlbnYpIHtcbiAgZnVuY3Rpb24gZmFpbChlKSB7XG4gICAgZW52LmVycm9yID0gZW52Lmhhc0Vycm9yID8gbmV3IF9TdXBwcmVzc2VkRXJyb3IoZSwgZW52LmVycm9yLCBcIkFuIGVycm9yIHdhcyBzdXBwcmVzc2VkIGR1cmluZyBkaXNwb3NhbC5cIikgOiBlO1xuICAgIGVudi5oYXNFcnJvciA9IHRydWU7XG4gIH1cbiAgdmFyIHIsXG4gICAgcyA9IDA7XG4gIGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgd2hpbGUgKHIgPSBlbnYuc3RhY2sucG9wKCkpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICghci5hc3luYyAmJiBzID09PSAxKSByZXR1cm4gcyA9IDAsIGVudi5zdGFjay5wdXNoKHIpLCBQcm9taXNlLnJlc29sdmUoKS50aGVuKG5leHQpO1xuICAgICAgICBpZiAoci5kaXNwb3NlKSB7XG4gICAgICAgICAgdmFyIHJlc3VsdCA9IHIuZGlzcG9zZS5jYWxsKHIudmFsdWUpO1xuICAgICAgICAgIGlmIChyLmFzeW5jKSByZXR1cm4gcyB8PSAyLCBQcm9taXNlLnJlc29sdmUocmVzdWx0KS50aGVuKG5leHQsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICBmYWlsKGUpO1xuICAgICAgICAgICAgcmV0dXJuIG5leHQoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHMgfD0gMTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgZmFpbChlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHMgPT09IDEpIHJldHVybiBlbnYuaGFzRXJyb3IgPyBQcm9taXNlLnJlamVjdChlbnYuZXJyb3IpIDogUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgaWYgKGVudi5oYXNFcnJvcikgdGhyb3cgZW52LmVycm9yO1xuICB9XG4gIHJldHVybiBuZXh0KCk7XG59XG5leHBvcnQgZnVuY3Rpb24gX19yZXdyaXRlUmVsYXRpdmVJbXBvcnRFeHRlbnNpb24ocGF0aCwgcHJlc2VydmVKc3gpIHtcbiAgaWYgKHR5cGVvZiBwYXRoID09PSBcInN0cmluZ1wiICYmIC9eXFwuXFwuP1xcLy8udGVzdChwYXRoKSkge1xuICAgIHJldHVybiBwYXRoLnJlcGxhY2UoL1xcLih0c3gpJHwoKD86XFwuZCk/KSgoPzpcXC5bXi4vXSs/KT8pXFwuKFtjbV0/KXRzJC9pLCBmdW5jdGlvbiAobSwgdHN4LCBkLCBleHQsIGNtKSB7XG4gICAgICByZXR1cm4gdHN4ID8gcHJlc2VydmVKc3ggPyBcIi5qc3hcIiA6IFwiLmpzXCIgOiBkICYmICghZXh0IHx8ICFjbSkgPyBtIDogZCArIGV4dCArIFwiLlwiICsgY20udG9Mb3dlckNhc2UoKSArIFwianNcIjtcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gcGF0aDtcbn1cbmV4cG9ydCBkZWZhdWx0IHtcbiAgX19leHRlbmRzLFxuICBfX2Fzc2lnbixcbiAgX19yZXN0LFxuICBfX2RlY29yYXRlLFxuICBfX3BhcmFtLFxuICBfX2VzRGVjb3JhdGUsXG4gIF9fcnVuSW5pdGlhbGl6ZXJzLFxuICBfX3Byb3BLZXksXG4gIF9fc2V0RnVuY3Rpb25OYW1lLFxuICBfX21ldGFkYXRhLFxuICBfX2F3YWl0ZXIsXG4gIF9fZ2VuZXJhdG9yLFxuICBfX2NyZWF0ZUJpbmRpbmcsXG4gIF9fZXhwb3J0U3RhcixcbiAgX192YWx1ZXMsXG4gIF9fcmVhZCxcbiAgX19zcHJlYWQsXG4gIF9fc3ByZWFkQXJyYXlzLFxuICBfX3NwcmVhZEFycmF5LFxuICBfX2F3YWl0LFxuICBfX2FzeW5jR2VuZXJhdG9yLFxuICBfX2FzeW5jRGVsZWdhdG9yLFxuICBfX2FzeW5jVmFsdWVzLFxuICBfX21ha2VUZW1wbGF0ZU9iamVjdCxcbiAgX19pbXBvcnRTdGFyLFxuICBfX2ltcG9ydERlZmF1bHQsXG4gIF9fY2xhc3NQcml2YXRlRmllbGRHZXQsXG4gIF9fY2xhc3NQcml2YXRlRmllbGRTZXQsXG4gIF9fY2xhc3NQcml2YXRlRmllbGRJbixcbiAgX19hZGREaXNwb3NhYmxlUmVzb3VyY2UsXG4gIF9fZGlzcG9zZVJlc291cmNlcyxcbiAgX19yZXdyaXRlUmVsYXRpdmVJbXBvcnRFeHRlbnNpb25cbn07IiwiZXhwb3J0IGNvbnN0IGlzQXJyYXlMaWtlID0geCA9PiB4ICYmIHR5cGVvZiB4Lmxlbmd0aCA9PT0gJ251bWJlcicgJiYgdHlwZW9mIHggIT09ICdmdW5jdGlvbic7XG4iLCJpbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSBcIi4vaXNGdW5jdGlvblwiO1xuZXhwb3J0IGZ1bmN0aW9uIGlzUHJvbWlzZSh2YWx1ZSkge1xuICByZXR1cm4gaXNGdW5jdGlvbih2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogdmFsdWUudGhlbik7XG59XG4iLCJpbXBvcnQgeyBvYnNlcnZhYmxlIGFzIFN5bWJvbF9vYnNlcnZhYmxlIH0gZnJvbSAnLi4vc3ltYm9sL29ic2VydmFibGUnO1xuaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gJy4vaXNGdW5jdGlvbic7XG5leHBvcnQgZnVuY3Rpb24gaXNJbnRlcm9wT2JzZXJ2YWJsZShpbnB1dCkge1xuICByZXR1cm4gaXNGdW5jdGlvbihpbnB1dFtTeW1ib2xfb2JzZXJ2YWJsZV0pO1xufVxuIiwiaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gJy4vaXNGdW5jdGlvbic7XG5leHBvcnQgZnVuY3Rpb24gaXNBc3luY0l0ZXJhYmxlKG9iaikge1xuICByZXR1cm4gU3ltYm9sLmFzeW5jSXRlcmF0b3IgJiYgaXNGdW5jdGlvbihvYmogPT09IG51bGwgfHwgb2JqID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvYmpbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKTtcbn1cbiIsImV4cG9ydCBmdW5jdGlvbiBjcmVhdGVJbnZhbGlkT2JzZXJ2YWJsZVR5cGVFcnJvcihpbnB1dCkge1xuICByZXR1cm4gbmV3IFR5cGVFcnJvcihgWW91IHByb3ZpZGVkICR7aW5wdXQgIT09IG51bGwgJiYgdHlwZW9mIGlucHV0ID09PSAnb2JqZWN0JyA/ICdhbiBpbnZhbGlkIG9iamVjdCcgOiBgJyR7aW5wdXR9J2B9IHdoZXJlIGEgc3RyZWFtIHdhcyBleHBlY3RlZC4gWW91IGNhbiBwcm92aWRlIGFuIE9ic2VydmFibGUsIFByb21pc2UsIFJlYWRhYmxlU3RyZWFtLCBBcnJheSwgQXN5bmNJdGVyYWJsZSwgb3IgSXRlcmFibGUuYCk7XG59XG4iLCJleHBvcnQgZnVuY3Rpb24gZ2V0U3ltYm9sSXRlcmF0b3IoKSB7XG4gIGlmICh0eXBlb2YgU3ltYm9sICE9PSAnZnVuY3Rpb24nIHx8ICFTeW1ib2wuaXRlcmF0b3IpIHtcbiAgICByZXR1cm4gJ0BAaXRlcmF0b3InO1xuICB9XG4gIHJldHVybiBTeW1ib2wuaXRlcmF0b3I7XG59XG5leHBvcnQgY29uc3QgaXRlcmF0b3IgPSBnZXRTeW1ib2xJdGVyYXRvcigpO1xuIiwiaW1wb3J0IHsgaXRlcmF0b3IgYXMgU3ltYm9sX2l0ZXJhdG9yIH0gZnJvbSAnLi4vc3ltYm9sL2l0ZXJhdG9yJztcbmltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tICcuL2lzRnVuY3Rpb24nO1xuZXhwb3J0IGZ1bmN0aW9uIGlzSXRlcmFibGUoaW5wdXQpIHtcbiAgcmV0dXJuIGlzRnVuY3Rpb24oaW5wdXQgPT09IG51bGwgfHwgaW5wdXQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGlucHV0W1N5bWJvbF9pdGVyYXRvcl0pO1xufVxuIiwiaW1wb3J0IHsgX19hc3luY0dlbmVyYXRvciwgX19hd2FpdCB9IGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gJy4vaXNGdW5jdGlvbic7XG5leHBvcnQgZnVuY3Rpb24gcmVhZGFibGVTdHJlYW1MaWtlVG9Bc3luY0dlbmVyYXRvcihyZWFkYWJsZVN0cmVhbSkge1xuICByZXR1cm4gX19hc3luY0dlbmVyYXRvcih0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKiByZWFkYWJsZVN0cmVhbUxpa2VUb0FzeW5jR2VuZXJhdG9yXzEoKSB7XG4gICAgY29uc3QgcmVhZGVyID0gcmVhZGFibGVTdHJlYW0uZ2V0UmVhZGVyKCk7XG4gICAgdHJ5IHtcbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICBkb25lXG4gICAgICAgIH0gPSB5aWVsZCBfX2F3YWl0KHJlYWRlci5yZWFkKCkpO1xuICAgICAgICBpZiAoZG9uZSkge1xuICAgICAgICAgIHJldHVybiB5aWVsZCBfX2F3YWl0KHZvaWQgMCk7XG4gICAgICAgIH1cbiAgICAgICAgeWllbGQgeWllbGQgX19hd2FpdCh2YWx1ZSk7XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHJlYWRlci5yZWxlYXNlTG9jaygpO1xuICAgIH1cbiAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNSZWFkYWJsZVN0cmVhbUxpa2Uob2JqKSB7XG4gIHJldHVybiBpc0Z1bmN0aW9uKG9iaiA9PT0gbnVsbCB8fCBvYmogPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9iai5nZXRSZWFkZXIpO1xufVxuIiwiaW1wb3J0IHsgX19hc3luY1ZhbHVlcywgX19hd2FpdGVyIH0gZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyBpc0FycmF5TGlrZSB9IGZyb20gJy4uL3V0aWwvaXNBcnJheUxpa2UnO1xuaW1wb3J0IHsgaXNQcm9taXNlIH0gZnJvbSAnLi4vdXRpbC9pc1Byb21pc2UnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJy4uL09ic2VydmFibGUnO1xuaW1wb3J0IHsgaXNJbnRlcm9wT2JzZXJ2YWJsZSB9IGZyb20gJy4uL3V0aWwvaXNJbnRlcm9wT2JzZXJ2YWJsZSc7XG5pbXBvcnQgeyBpc0FzeW5jSXRlcmFibGUgfSBmcm9tICcuLi91dGlsL2lzQXN5bmNJdGVyYWJsZSc7XG5pbXBvcnQgeyBjcmVhdGVJbnZhbGlkT2JzZXJ2YWJsZVR5cGVFcnJvciB9IGZyb20gJy4uL3V0aWwvdGhyb3dVbm9ic2VydmFibGVFcnJvcic7XG5pbXBvcnQgeyBpc0l0ZXJhYmxlIH0gZnJvbSAnLi4vdXRpbC9pc0l0ZXJhYmxlJztcbmltcG9ydCB7IGlzUmVhZGFibGVTdHJlYW1MaWtlLCByZWFkYWJsZVN0cmVhbUxpa2VUb0FzeW5jR2VuZXJhdG9yIH0gZnJvbSAnLi4vdXRpbC9pc1JlYWRhYmxlU3RyZWFtTGlrZSc7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSAnLi4vdXRpbC9pc0Z1bmN0aW9uJztcbmltcG9ydCB7IHJlcG9ydFVuaGFuZGxlZEVycm9yIH0gZnJvbSAnLi4vdXRpbC9yZXBvcnRVbmhhbmRsZWRFcnJvcic7XG5pbXBvcnQgeyBvYnNlcnZhYmxlIGFzIFN5bWJvbF9vYnNlcnZhYmxlIH0gZnJvbSAnLi4vc3ltYm9sL29ic2VydmFibGUnO1xuZXhwb3J0IGZ1bmN0aW9uIGlubmVyRnJvbShpbnB1dCkge1xuICBpZiAoaW5wdXQgaW5zdGFuY2VvZiBPYnNlcnZhYmxlKSB7XG4gICAgcmV0dXJuIGlucHV0O1xuICB9XG4gIGlmIChpbnB1dCAhPSBudWxsKSB7XG4gICAgaWYgKGlzSW50ZXJvcE9ic2VydmFibGUoaW5wdXQpKSB7XG4gICAgICByZXR1cm4gZnJvbUludGVyb3BPYnNlcnZhYmxlKGlucHV0KTtcbiAgICB9XG4gICAgaWYgKGlzQXJyYXlMaWtlKGlucHV0KSkge1xuICAgICAgcmV0dXJuIGZyb21BcnJheUxpa2UoaW5wdXQpO1xuICAgIH1cbiAgICBpZiAoaXNQcm9taXNlKGlucHV0KSkge1xuICAgICAgcmV0dXJuIGZyb21Qcm9taXNlKGlucHV0KTtcbiAgICB9XG4gICAgaWYgKGlzQXN5bmNJdGVyYWJsZShpbnB1dCkpIHtcbiAgICAgIHJldHVybiBmcm9tQXN5bmNJdGVyYWJsZShpbnB1dCk7XG4gICAgfVxuICAgIGlmIChpc0l0ZXJhYmxlKGlucHV0KSkge1xuICAgICAgcmV0dXJuIGZyb21JdGVyYWJsZShpbnB1dCk7XG4gICAgfVxuICAgIGlmIChpc1JlYWRhYmxlU3RyZWFtTGlrZShpbnB1dCkpIHtcbiAgICAgIHJldHVybiBmcm9tUmVhZGFibGVTdHJlYW1MaWtlKGlucHV0KTtcbiAgICB9XG4gIH1cbiAgdGhyb3cgY3JlYXRlSW52YWxpZE9ic2VydmFibGVUeXBlRXJyb3IoaW5wdXQpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGZyb21JbnRlcm9wT2JzZXJ2YWJsZShvYmopIHtcbiAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKHN1YnNjcmliZXIgPT4ge1xuICAgIGNvbnN0IG9icyA9IG9ialtTeW1ib2xfb2JzZXJ2YWJsZV0oKTtcbiAgICBpZiAoaXNGdW5jdGlvbihvYnMuc3Vic2NyaWJlKSkge1xuICAgICAgcmV0dXJuIG9icy5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gICAgfVxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Byb3ZpZGVkIG9iamVjdCBkb2VzIG5vdCBjb3JyZWN0bHkgaW1wbGVtZW50IFN5bWJvbC5vYnNlcnZhYmxlJyk7XG4gIH0pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGZyb21BcnJheUxpa2UoYXJyYXkpIHtcbiAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKHN1YnNjcmliZXIgPT4ge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoICYmICFzdWJzY3JpYmVyLmNsb3NlZDsgaSsrKSB7XG4gICAgICBzdWJzY3JpYmVyLm5leHQoYXJyYXlbaV0pO1xuICAgIH1cbiAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gIH0pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGZyb21Qcm9taXNlKHByb21pc2UpIHtcbiAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKHN1YnNjcmliZXIgPT4ge1xuICAgIHByb21pc2UudGhlbih2YWx1ZSA9PiB7XG4gICAgICBpZiAoIXN1YnNjcmliZXIuY2xvc2VkKSB7XG4gICAgICAgIHN1YnNjcmliZXIubmV4dCh2YWx1ZSk7XG4gICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgIH1cbiAgICB9LCBlcnIgPT4gc3Vic2NyaWJlci5lcnJvcihlcnIpKS50aGVuKG51bGwsIHJlcG9ydFVuaGFuZGxlZEVycm9yKTtcbiAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gZnJvbUl0ZXJhYmxlKGl0ZXJhYmxlKSB7XG4gIHJldHVybiBuZXcgT2JzZXJ2YWJsZShzdWJzY3JpYmVyID0+IHtcbiAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIGl0ZXJhYmxlKSB7XG4gICAgICBzdWJzY3JpYmVyLm5leHQodmFsdWUpO1xuICAgICAgaWYgKHN1YnNjcmliZXIuY2xvc2VkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICB9KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBmcm9tQXN5bmNJdGVyYWJsZShhc3luY0l0ZXJhYmxlKSB7XG4gIHJldHVybiBuZXcgT2JzZXJ2YWJsZShzdWJzY3JpYmVyID0+IHtcbiAgICBwcm9jZXNzKGFzeW5jSXRlcmFibGUsIHN1YnNjcmliZXIpLmNhdGNoKGVyciA9PiBzdWJzY3JpYmVyLmVycm9yKGVycikpO1xuICB9KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBmcm9tUmVhZGFibGVTdHJlYW1MaWtlKHJlYWRhYmxlU3RyZWFtKSB7XG4gIHJldHVybiBmcm9tQXN5bmNJdGVyYWJsZShyZWFkYWJsZVN0cmVhbUxpa2VUb0FzeW5jR2VuZXJhdG9yKHJlYWRhYmxlU3RyZWFtKSk7XG59XG5mdW5jdGlvbiBwcm9jZXNzKGFzeW5jSXRlcmFibGUsIHN1YnNjcmliZXIpIHtcbiAgdmFyIGFzeW5jSXRlcmFibGVfMSwgYXN5bmNJdGVyYWJsZV8xXzE7XG4gIHZhciBlXzEsIF9hO1xuICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgIHRyeSB7XG4gICAgICBmb3IgKGFzeW5jSXRlcmFibGVfMSA9IF9fYXN5bmNWYWx1ZXMoYXN5bmNJdGVyYWJsZSk7IGFzeW5jSXRlcmFibGVfMV8xID0geWllbGQgYXN5bmNJdGVyYWJsZV8xLm5leHQoKSwgIWFzeW5jSXRlcmFibGVfMV8xLmRvbmU7KSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gYXN5bmNJdGVyYWJsZV8xXzEudmFsdWU7XG4gICAgICAgIHN1YnNjcmliZXIubmV4dCh2YWx1ZSk7XG4gICAgICAgIGlmIChzdWJzY3JpYmVyLmNsb3NlZCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVfMV8xKSB7XG4gICAgICBlXzEgPSB7XG4gICAgICAgIGVycm9yOiBlXzFfMVxuICAgICAgfTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKGFzeW5jSXRlcmFibGVfMV8xICYmICFhc3luY0l0ZXJhYmxlXzFfMS5kb25lICYmIChfYSA9IGFzeW5jSXRlcmFibGVfMS5yZXR1cm4pKSB5aWVsZCBfYS5jYWxsKGFzeW5jSXRlcmFibGVfMSk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpZiAoZV8xKSB0aHJvdyBlXzEuZXJyb3I7XG4gICAgICB9XG4gICAgfVxuICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgfSk7XG59XG4iLCJleHBvcnQgZnVuY3Rpb24gZXhlY3V0ZVNjaGVkdWxlKHBhcmVudFN1YnNjcmlwdGlvbiwgc2NoZWR1bGVyLCB3b3JrLCBkZWxheSA9IDAsIHJlcGVhdCA9IGZhbHNlKSB7XG4gIGNvbnN0IHNjaGVkdWxlU3Vic2NyaXB0aW9uID0gc2NoZWR1bGVyLnNjaGVkdWxlKGZ1bmN0aW9uICgpIHtcbiAgICB3b3JrKCk7XG4gICAgaWYgKHJlcGVhdCkge1xuICAgICAgcGFyZW50U3Vic2NyaXB0aW9uLmFkZCh0aGlzLnNjaGVkdWxlKG51bGwsIGRlbGF5KSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH0sIGRlbGF5KTtcbiAgcGFyZW50U3Vic2NyaXB0aW9uLmFkZChzY2hlZHVsZVN1YnNjcmlwdGlvbik7XG4gIGlmICghcmVwZWF0KSB7XG4gICAgcmV0dXJuIHNjaGVkdWxlU3Vic2NyaXB0aW9uO1xuICB9XG59XG4iLCJpbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSAnLi9pc0Z1bmN0aW9uJztcbmV4cG9ydCBmdW5jdGlvbiBoYXNMaWZ0KHNvdXJjZSkge1xuICByZXR1cm4gaXNGdW5jdGlvbihzb3VyY2UgPT09IG51bGwgfHwgc291cmNlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzb3VyY2UubGlmdCk7XG59XG5leHBvcnQgZnVuY3Rpb24gb3BlcmF0ZShpbml0KSB7XG4gIHJldHVybiBzb3VyY2UgPT4ge1xuICAgIGlmIChoYXNMaWZ0KHNvdXJjZSkpIHtcbiAgICAgIHJldHVybiBzb3VyY2UubGlmdChmdW5jdGlvbiAobGlmdGVkU291cmNlKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIGluaXQobGlmdGVkU291cmNlLCB0aGlzKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgdGhpcy5lcnJvcihlcnIpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5hYmxlIHRvIGxpZnQgdW5rbm93biBPYnNlcnZhYmxlIHR5cGUnKTtcbiAgfTtcbn1cbiIsImltcG9ydCB7IFN1YnNjcmliZXIgfSBmcm9tICcuLi9TdWJzY3JpYmVyJztcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoZGVzdGluYXRpb24sIG9uTmV4dCwgb25Db21wbGV0ZSwgb25FcnJvciwgb25GaW5hbGl6ZSkge1xuICByZXR1cm4gbmV3IE9wZXJhdG9yU3Vic2NyaWJlcihkZXN0aW5hdGlvbiwgb25OZXh0LCBvbkNvbXBsZXRlLCBvbkVycm9yLCBvbkZpbmFsaXplKTtcbn1cbmV4cG9ydCBjbGFzcyBPcGVyYXRvclN1YnNjcmliZXIgZXh0ZW5kcyBTdWJzY3JpYmVyIHtcbiAgY29uc3RydWN0b3IoZGVzdGluYXRpb24sIG9uTmV4dCwgb25Db21wbGV0ZSwgb25FcnJvciwgb25GaW5hbGl6ZSwgc2hvdWxkVW5zdWJzY3JpYmUpIHtcbiAgICBzdXBlcihkZXN0aW5hdGlvbik7XG4gICAgdGhpcy5vbkZpbmFsaXplID0gb25GaW5hbGl6ZTtcbiAgICB0aGlzLnNob3VsZFVuc3Vic2NyaWJlID0gc2hvdWxkVW5zdWJzY3JpYmU7XG4gICAgdGhpcy5fbmV4dCA9IG9uTmV4dCA/IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgb25OZXh0KHZhbHVlKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBkZXN0aW5hdGlvbi5lcnJvcihlcnIpO1xuICAgICAgfVxuICAgIH0gOiBzdXBlci5fbmV4dDtcbiAgICB0aGlzLl9lcnJvciA9IG9uRXJyb3IgPyBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICB0cnkge1xuICAgICAgICBvbkVycm9yKGVycik7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgZGVzdGluYXRpb24uZXJyb3IoZXJyKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgIH1cbiAgICB9IDogc3VwZXIuX2Vycm9yO1xuICAgIHRoaXMuX2NvbXBsZXRlID0gb25Db21wbGV0ZSA/IGZ1bmN0aW9uICgpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIG9uQ29tcGxldGUoKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBkZXN0aW5hdGlvbi5lcnJvcihlcnIpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgfVxuICAgIH0gOiBzdXBlci5fY29tcGxldGU7XG4gIH1cbiAgdW5zdWJzY3JpYmUoKSB7XG4gICAgdmFyIF9hO1xuICAgIGlmICghdGhpcy5zaG91bGRVbnN1YnNjcmliZSB8fCB0aGlzLnNob3VsZFVuc3Vic2NyaWJlKCkpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgY2xvc2VkXG4gICAgICB9ID0gdGhpcztcbiAgICAgIHN1cGVyLnVuc3Vic2NyaWJlKCk7XG4gICAgICAhY2xvc2VkICYmICgoX2EgPSB0aGlzLm9uRmluYWxpemUpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jYWxsKHRoaXMpKTtcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7IGV4ZWN1dGVTY2hlZHVsZSB9IGZyb20gJy4uL3V0aWwvZXhlY3V0ZVNjaGVkdWxlJztcbmltcG9ydCB7IG9wZXJhdGUgfSBmcm9tICcuLi91dGlsL2xpZnQnO1xuaW1wb3J0IHsgY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyIH0gZnJvbSAnLi9PcGVyYXRvclN1YnNjcmliZXInO1xuZXhwb3J0IGZ1bmN0aW9uIG9ic2VydmVPbihzY2hlZHVsZXIsIGRlbGF5ID0gMCkge1xuICByZXR1cm4gb3BlcmF0ZSgoc291cmNlLCBzdWJzY3JpYmVyKSA9PiB7XG4gICAgc291cmNlLnN1YnNjcmliZShjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgdmFsdWUgPT4gZXhlY3V0ZVNjaGVkdWxlKHN1YnNjcmliZXIsIHNjaGVkdWxlciwgKCkgPT4gc3Vic2NyaWJlci5uZXh0KHZhbHVlKSwgZGVsYXkpLCAoKSA9PiBleGVjdXRlU2NoZWR1bGUoc3Vic2NyaWJlciwgc2NoZWR1bGVyLCAoKSA9PiBzdWJzY3JpYmVyLmNvbXBsZXRlKCksIGRlbGF5KSwgZXJyID0+IGV4ZWN1dGVTY2hlZHVsZShzdWJzY3JpYmVyLCBzY2hlZHVsZXIsICgpID0+IHN1YnNjcmliZXIuZXJyb3IoZXJyKSwgZGVsYXkpKSk7XG4gIH0pO1xufVxuIiwiaW1wb3J0IHsgb3BlcmF0ZSB9IGZyb20gJy4uL3V0aWwvbGlmdCc7XG5leHBvcnQgZnVuY3Rpb24gc3Vic2NyaWJlT24oc2NoZWR1bGVyLCBkZWxheSA9IDApIHtcbiAgcmV0dXJuIG9wZXJhdGUoKHNvdXJjZSwgc3Vic2NyaWJlcikgPT4ge1xuICAgIHN1YnNjcmliZXIuYWRkKHNjaGVkdWxlci5zY2hlZHVsZSgoKSA9PiBzb3VyY2Uuc3Vic2NyaWJlKHN1YnNjcmliZXIpLCBkZWxheSkpO1xuICB9KTtcbn1cbiIsImltcG9ydCB7IGlubmVyRnJvbSB9IGZyb20gJy4uL29ic2VydmFibGUvaW5uZXJGcm9tJztcbmltcG9ydCB7IG9ic2VydmVPbiB9IGZyb20gJy4uL29wZXJhdG9ycy9vYnNlcnZlT24nO1xuaW1wb3J0IHsgc3Vic2NyaWJlT24gfSBmcm9tICcuLi9vcGVyYXRvcnMvc3Vic2NyaWJlT24nO1xuZXhwb3J0IGZ1bmN0aW9uIHNjaGVkdWxlT2JzZXJ2YWJsZShpbnB1dCwgc2NoZWR1bGVyKSB7XG4gIHJldHVybiBpbm5lckZyb20oaW5wdXQpLnBpcGUoc3Vic2NyaWJlT24oc2NoZWR1bGVyKSwgb2JzZXJ2ZU9uKHNjaGVkdWxlcikpO1xufVxuIiwiaW1wb3J0IHsgaW5uZXJGcm9tIH0gZnJvbSAnLi4vb2JzZXJ2YWJsZS9pbm5lckZyb20nO1xuaW1wb3J0IHsgb2JzZXJ2ZU9uIH0gZnJvbSAnLi4vb3BlcmF0b3JzL29ic2VydmVPbic7XG5pbXBvcnQgeyBzdWJzY3JpYmVPbiB9IGZyb20gJy4uL29wZXJhdG9ycy9zdWJzY3JpYmVPbic7XG5leHBvcnQgZnVuY3Rpb24gc2NoZWR1bGVQcm9taXNlKGlucHV0LCBzY2hlZHVsZXIpIHtcbiAgcmV0dXJuIGlubmVyRnJvbShpbnB1dCkucGlwZShzdWJzY3JpYmVPbihzY2hlZHVsZXIpLCBvYnNlcnZlT24oc2NoZWR1bGVyKSk7XG59XG4iLCJpbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAnLi4vT2JzZXJ2YWJsZSc7XG5leHBvcnQgZnVuY3Rpb24gc2NoZWR1bGVBcnJheShpbnB1dCwgc2NoZWR1bGVyKSB7XG4gIHJldHVybiBuZXcgT2JzZXJ2YWJsZShzdWJzY3JpYmVyID0+IHtcbiAgICBsZXQgaSA9IDA7XG4gICAgcmV0dXJuIHNjaGVkdWxlci5zY2hlZHVsZShmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoaSA9PT0gaW5wdXQubGVuZ3RoKSB7XG4gICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN1YnNjcmliZXIubmV4dChpbnB1dFtpKytdKTtcbiAgICAgICAgaWYgKCFzdWJzY3JpYmVyLmNsb3NlZCkge1xuICAgICAgICAgIHRoaXMuc2NoZWR1bGUoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cbiIsImltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICcuLi9PYnNlcnZhYmxlJztcbmltcG9ydCB7IGl0ZXJhdG9yIGFzIFN5bWJvbF9pdGVyYXRvciB9IGZyb20gJy4uL3N5bWJvbC9pdGVyYXRvcic7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSAnLi4vdXRpbC9pc0Z1bmN0aW9uJztcbmltcG9ydCB7IGV4ZWN1dGVTY2hlZHVsZSB9IGZyb20gJy4uL3V0aWwvZXhlY3V0ZVNjaGVkdWxlJztcbmV4cG9ydCBmdW5jdGlvbiBzY2hlZHVsZUl0ZXJhYmxlKGlucHV0LCBzY2hlZHVsZXIpIHtcbiAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKHN1YnNjcmliZXIgPT4ge1xuICAgIGxldCBpdGVyYXRvcjtcbiAgICBleGVjdXRlU2NoZWR1bGUoc3Vic2NyaWJlciwgc2NoZWR1bGVyLCAoKSA9PiB7XG4gICAgICBpdGVyYXRvciA9IGlucHV0W1N5bWJvbF9pdGVyYXRvcl0oKTtcbiAgICAgIGV4ZWN1dGVTY2hlZHVsZShzdWJzY3JpYmVyLCBzY2hlZHVsZXIsICgpID0+IHtcbiAgICAgICAgbGV0IHZhbHVlO1xuICAgICAgICBsZXQgZG9uZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAoe1xuICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICBkb25lXG4gICAgICAgICAgfSA9IGl0ZXJhdG9yLm5leHQoKSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIHN1YnNjcmliZXIuZXJyb3IoZXJyKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSwgMCwgdHJ1ZSk7XG4gICAgfSk7XG4gICAgcmV0dXJuICgpID0+IGlzRnVuY3Rpb24oaXRlcmF0b3IgPT09IG51bGwgfHwgaXRlcmF0b3IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGl0ZXJhdG9yLnJldHVybikgJiYgaXRlcmF0b3IucmV0dXJuKCk7XG4gIH0pO1xufVxuIiwiaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJy4uL09ic2VydmFibGUnO1xuaW1wb3J0IHsgZXhlY3V0ZVNjaGVkdWxlIH0gZnJvbSAnLi4vdXRpbC9leGVjdXRlU2NoZWR1bGUnO1xuZXhwb3J0IGZ1bmN0aW9uIHNjaGVkdWxlQXN5bmNJdGVyYWJsZShpbnB1dCwgc2NoZWR1bGVyKSB7XG4gIGlmICghaW5wdXQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0l0ZXJhYmxlIGNhbm5vdCBiZSBudWxsJyk7XG4gIH1cbiAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKHN1YnNjcmliZXIgPT4ge1xuICAgIGV4ZWN1dGVTY2hlZHVsZShzdWJzY3JpYmVyLCBzY2hlZHVsZXIsICgpID0+IHtcbiAgICAgIGNvbnN0IGl0ZXJhdG9yID0gaW5wdXRbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCk7XG4gICAgICBleGVjdXRlU2NoZWR1bGUoc3Vic2NyaWJlciwgc2NoZWR1bGVyLCAoKSA9PiB7XG4gICAgICAgIGl0ZXJhdG9yLm5leHQoKS50aGVuKHJlc3VsdCA9PiB7XG4gICAgICAgICAgaWYgKHJlc3VsdC5kb25lKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChyZXN1bHQudmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9LCAwLCB0cnVlKTtcbiAgICB9KTtcbiAgfSk7XG59XG4iLCJpbXBvcnQgeyBzY2hlZHVsZUFzeW5jSXRlcmFibGUgfSBmcm9tICcuL3NjaGVkdWxlQXN5bmNJdGVyYWJsZSc7XG5pbXBvcnQgeyByZWFkYWJsZVN0cmVhbUxpa2VUb0FzeW5jR2VuZXJhdG9yIH0gZnJvbSAnLi4vdXRpbC9pc1JlYWRhYmxlU3RyZWFtTGlrZSc7XG5leHBvcnQgZnVuY3Rpb24gc2NoZWR1bGVSZWFkYWJsZVN0cmVhbUxpa2UoaW5wdXQsIHNjaGVkdWxlcikge1xuICByZXR1cm4gc2NoZWR1bGVBc3luY0l0ZXJhYmxlKHJlYWRhYmxlU3RyZWFtTGlrZVRvQXN5bmNHZW5lcmF0b3IoaW5wdXQpLCBzY2hlZHVsZXIpO1xufVxuIiwiaW1wb3J0IHsgc2NoZWR1bGVPYnNlcnZhYmxlIH0gZnJvbSAnLi9zY2hlZHVsZU9ic2VydmFibGUnO1xuaW1wb3J0IHsgc2NoZWR1bGVQcm9taXNlIH0gZnJvbSAnLi9zY2hlZHVsZVByb21pc2UnO1xuaW1wb3J0IHsgc2NoZWR1bGVBcnJheSB9IGZyb20gJy4vc2NoZWR1bGVBcnJheSc7XG5pbXBvcnQgeyBzY2hlZHVsZUl0ZXJhYmxlIH0gZnJvbSAnLi9zY2hlZHVsZUl0ZXJhYmxlJztcbmltcG9ydCB7IHNjaGVkdWxlQXN5bmNJdGVyYWJsZSB9IGZyb20gJy4vc2NoZWR1bGVBc3luY0l0ZXJhYmxlJztcbmltcG9ydCB7IGlzSW50ZXJvcE9ic2VydmFibGUgfSBmcm9tICcuLi91dGlsL2lzSW50ZXJvcE9ic2VydmFibGUnO1xuaW1wb3J0IHsgaXNQcm9taXNlIH0gZnJvbSAnLi4vdXRpbC9pc1Byb21pc2UnO1xuaW1wb3J0IHsgaXNBcnJheUxpa2UgfSBmcm9tICcuLi91dGlsL2lzQXJyYXlMaWtlJztcbmltcG9ydCB7IGlzSXRlcmFibGUgfSBmcm9tICcuLi91dGlsL2lzSXRlcmFibGUnO1xuaW1wb3J0IHsgaXNBc3luY0l0ZXJhYmxlIH0gZnJvbSAnLi4vdXRpbC9pc0FzeW5jSXRlcmFibGUnO1xuaW1wb3J0IHsgY3JlYXRlSW52YWxpZE9ic2VydmFibGVUeXBlRXJyb3IgfSBmcm9tICcuLi91dGlsL3Rocm93VW5vYnNlcnZhYmxlRXJyb3InO1xuaW1wb3J0IHsgaXNSZWFkYWJsZVN0cmVhbUxpa2UgfSBmcm9tICcuLi91dGlsL2lzUmVhZGFibGVTdHJlYW1MaWtlJztcbmltcG9ydCB7IHNjaGVkdWxlUmVhZGFibGVTdHJlYW1MaWtlIH0gZnJvbSAnLi9zY2hlZHVsZVJlYWRhYmxlU3RyZWFtTGlrZSc7XG5leHBvcnQgZnVuY3Rpb24gc2NoZWR1bGVkKGlucHV0LCBzY2hlZHVsZXIpIHtcbiAgaWYgKGlucHV0ICE9IG51bGwpIHtcbiAgICBpZiAoaXNJbnRlcm9wT2JzZXJ2YWJsZShpbnB1dCkpIHtcbiAgICAgIHJldHVybiBzY2hlZHVsZU9ic2VydmFibGUoaW5wdXQsIHNjaGVkdWxlcik7XG4gICAgfVxuICAgIGlmIChpc0FycmF5TGlrZShpbnB1dCkpIHtcbiAgICAgIHJldHVybiBzY2hlZHVsZUFycmF5KGlucHV0LCBzY2hlZHVsZXIpO1xuICAgIH1cbiAgICBpZiAoaXNQcm9taXNlKGlucHV0KSkge1xuICAgICAgcmV0dXJuIHNjaGVkdWxlUHJvbWlzZShpbnB1dCwgc2NoZWR1bGVyKTtcbiAgICB9XG4gICAgaWYgKGlzQXN5bmNJdGVyYWJsZShpbnB1dCkpIHtcbiAgICAgIHJldHVybiBzY2hlZHVsZUFzeW5jSXRlcmFibGUoaW5wdXQsIHNjaGVkdWxlcik7XG4gICAgfVxuICAgIGlmIChpc0l0ZXJhYmxlKGlucHV0KSkge1xuICAgICAgcmV0dXJuIHNjaGVkdWxlSXRlcmFibGUoaW5wdXQsIHNjaGVkdWxlcik7XG4gICAgfVxuICAgIGlmIChpc1JlYWRhYmxlU3RyZWFtTGlrZShpbnB1dCkpIHtcbiAgICAgIHJldHVybiBzY2hlZHVsZVJlYWRhYmxlU3RyZWFtTGlrZShpbnB1dCwgc2NoZWR1bGVyKTtcbiAgICB9XG4gIH1cbiAgdGhyb3cgY3JlYXRlSW52YWxpZE9ic2VydmFibGVUeXBlRXJyb3IoaW5wdXQpO1xufVxuIiwiaW1wb3J0IHsgc2NoZWR1bGVkIH0gZnJvbSAnLi4vc2NoZWR1bGVkL3NjaGVkdWxlZCc7XG5pbXBvcnQgeyBpbm5lckZyb20gfSBmcm9tICcuL2lubmVyRnJvbSc7XG5leHBvcnQgZnVuY3Rpb24gZnJvbShpbnB1dCwgc2NoZWR1bGVyKSB7XG4gIHJldHVybiBzY2hlZHVsZXIgPyBzY2hlZHVsZWQoaW5wdXQsIHNjaGVkdWxlcikgOiBpbm5lckZyb20oaW5wdXQpO1xufVxuIiwiaW1wb3J0IHsgcG9wU2NoZWR1bGVyIH0gZnJvbSAnLi4vdXRpbC9hcmdzJztcbmltcG9ydCB7IGZyb20gfSBmcm9tICcuL2Zyb20nO1xuZXhwb3J0IGZ1bmN0aW9uIG9mKC4uLmFyZ3MpIHtcbiAgY29uc3Qgc2NoZWR1bGVyID0gcG9wU2NoZWR1bGVyKGFyZ3MpO1xuICByZXR1cm4gZnJvbShhcmdzLCBzY2hlZHVsZXIpO1xufVxuIiwiaW1wb3J0IHsgb3BlcmF0ZSB9IGZyb20gJy4uL3V0aWwvbGlmdCc7XG5pbXBvcnQgeyBjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIgfSBmcm9tICcuL09wZXJhdG9yU3Vic2NyaWJlcic7XG5leHBvcnQgZnVuY3Rpb24gbWFwKHByb2plY3QsIHRoaXNBcmcpIHtcbiAgcmV0dXJuIG9wZXJhdGUoKHNvdXJjZSwgc3Vic2NyaWJlcikgPT4ge1xuICAgIGxldCBpbmRleCA9IDA7XG4gICAgc291cmNlLnN1YnNjcmliZShjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgdmFsdWUgPT4ge1xuICAgICAgc3Vic2NyaWJlci5uZXh0KHByb2plY3QuY2FsbCh0aGlzQXJnLCB2YWx1ZSwgaW5kZXgrKykpO1xuICAgIH0pKTtcbiAgfSk7XG59XG4iLCJpbXBvcnQgeyBpbm5lckZyb20gfSBmcm9tICcuLi9vYnNlcnZhYmxlL2lubmVyRnJvbSc7XG5pbXBvcnQgeyBleGVjdXRlU2NoZWR1bGUgfSBmcm9tICcuLi91dGlsL2V4ZWN1dGVTY2hlZHVsZSc7XG5pbXBvcnQgeyBjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIgfSBmcm9tICcuL09wZXJhdG9yU3Vic2NyaWJlcic7XG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VJbnRlcm5hbHMoc291cmNlLCBzdWJzY3JpYmVyLCBwcm9qZWN0LCBjb25jdXJyZW50LCBvbkJlZm9yZU5leHQsIGV4cGFuZCwgaW5uZXJTdWJTY2hlZHVsZXIsIGFkZGl0aW9uYWxGaW5hbGl6ZXIpIHtcbiAgY29uc3QgYnVmZmVyID0gW107XG4gIGxldCBhY3RpdmUgPSAwO1xuICBsZXQgaW5kZXggPSAwO1xuICBsZXQgaXNDb21wbGV0ZSA9IGZhbHNlO1xuICBjb25zdCBjaGVja0NvbXBsZXRlID0gKCkgPT4ge1xuICAgIGlmIChpc0NvbXBsZXRlICYmICFidWZmZXIubGVuZ3RoICYmICFhY3RpdmUpIHtcbiAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IG91dGVyTmV4dCA9IHZhbHVlID0+IGFjdGl2ZSA8IGNvbmN1cnJlbnQgPyBkb0lubmVyU3ViKHZhbHVlKSA6IGJ1ZmZlci5wdXNoKHZhbHVlKTtcbiAgY29uc3QgZG9Jbm5lclN1YiA9IHZhbHVlID0+IHtcbiAgICBleHBhbmQgJiYgc3Vic2NyaWJlci5uZXh0KHZhbHVlKTtcbiAgICBhY3RpdmUrKztcbiAgICBsZXQgaW5uZXJDb21wbGV0ZSA9IGZhbHNlO1xuICAgIGlubmVyRnJvbShwcm9qZWN0KHZhbHVlLCBpbmRleCsrKSkuc3Vic2NyaWJlKGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBpbm5lclZhbHVlID0+IHtcbiAgICAgIG9uQmVmb3JlTmV4dCA9PT0gbnVsbCB8fCBvbkJlZm9yZU5leHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQmVmb3JlTmV4dChpbm5lclZhbHVlKTtcbiAgICAgIGlmIChleHBhbmQpIHtcbiAgICAgICAgb3V0ZXJOZXh0KGlubmVyVmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3Vic2NyaWJlci5uZXh0KGlubmVyVmFsdWUpO1xuICAgICAgfVxuICAgIH0sICgpID0+IHtcbiAgICAgIGlubmVyQ29tcGxldGUgPSB0cnVlO1xuICAgIH0sIHVuZGVmaW5lZCwgKCkgPT4ge1xuICAgICAgaWYgKGlubmVyQ29tcGxldGUpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhY3RpdmUtLTtcbiAgICAgICAgICB3aGlsZSAoYnVmZmVyLmxlbmd0aCAmJiBhY3RpdmUgPCBjb25jdXJyZW50KSB7XG4gICAgICAgICAgICBjb25zdCBidWZmZXJlZFZhbHVlID0gYnVmZmVyLnNoaWZ0KCk7XG4gICAgICAgICAgICBpZiAoaW5uZXJTdWJTY2hlZHVsZXIpIHtcbiAgICAgICAgICAgICAgZXhlY3V0ZVNjaGVkdWxlKHN1YnNjcmliZXIsIGlubmVyU3ViU2NoZWR1bGVyLCAoKSA9PiBkb0lubmVyU3ViKGJ1ZmZlcmVkVmFsdWUpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGRvSW5uZXJTdWIoYnVmZmVyZWRWYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGNoZWNrQ29tcGxldGUoKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgc3Vic2NyaWJlci5lcnJvcihlcnIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSkpO1xuICB9O1xuICBzb3VyY2Uuc3Vic2NyaWJlKGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBvdXRlck5leHQsICgpID0+IHtcbiAgICBpc0NvbXBsZXRlID0gdHJ1ZTtcbiAgICBjaGVja0NvbXBsZXRlKCk7XG4gIH0pKTtcbiAgcmV0dXJuICgpID0+IHtcbiAgICBhZGRpdGlvbmFsRmluYWxpemVyID09PSBudWxsIHx8IGFkZGl0aW9uYWxGaW5hbGl6ZXIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGFkZGl0aW9uYWxGaW5hbGl6ZXIoKTtcbiAgfTtcbn1cbiIsImltcG9ydCB7IG1hcCB9IGZyb20gJy4vbWFwJztcbmltcG9ydCB7IGlubmVyRnJvbSB9IGZyb20gJy4uL29ic2VydmFibGUvaW5uZXJGcm9tJztcbmltcG9ydCB7IG9wZXJhdGUgfSBmcm9tICcuLi91dGlsL2xpZnQnO1xuaW1wb3J0IHsgbWVyZ2VJbnRlcm5hbHMgfSBmcm9tICcuL21lcmdlSW50ZXJuYWxzJztcbmltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tICcuLi91dGlsL2lzRnVuY3Rpb24nO1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlTWFwKHByb2plY3QsIHJlc3VsdFNlbGVjdG9yLCBjb25jdXJyZW50ID0gSW5maW5pdHkpIHtcbiAgaWYgKGlzRnVuY3Rpb24ocmVzdWx0U2VsZWN0b3IpKSB7XG4gICAgcmV0dXJuIG1lcmdlTWFwKChhLCBpKSA9PiBtYXAoKGIsIGlpKSA9PiByZXN1bHRTZWxlY3RvcihhLCBiLCBpLCBpaSkpKGlubmVyRnJvbShwcm9qZWN0KGEsIGkpKSksIGNvbmN1cnJlbnQpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiByZXN1bHRTZWxlY3RvciA9PT0gJ251bWJlcicpIHtcbiAgICBjb25jdXJyZW50ID0gcmVzdWx0U2VsZWN0b3I7XG4gIH1cbiAgcmV0dXJuIG9wZXJhdGUoKHNvdXJjZSwgc3Vic2NyaWJlcikgPT4gbWVyZ2VJbnRlcm5hbHMoc291cmNlLCBzdWJzY3JpYmVyLCBwcm9qZWN0LCBjb25jdXJyZW50KSk7XG59XG4iLCJpbXBvcnQgeyBtYXAgfSBmcm9tIFwiLi4vb3BlcmF0b3JzL21hcFwiO1xuY29uc3Qge1xuICBpc0FycmF5XG59ID0gQXJyYXk7XG5mdW5jdGlvbiBjYWxsT3JBcHBseShmbiwgYXJncykge1xuICByZXR1cm4gaXNBcnJheShhcmdzKSA/IGZuKC4uLmFyZ3MpIDogZm4oYXJncyk7XG59XG5leHBvcnQgZnVuY3Rpb24gbWFwT25lT3JNYW55QXJncyhmbikge1xuICByZXR1cm4gbWFwKGFyZ3MgPT4gY2FsbE9yQXBwbHkoZm4sIGFyZ3MpKTtcbn1cbiIsImltcG9ydCB7IGlubmVyRnJvbSB9IGZyb20gJy4uL29ic2VydmFibGUvaW5uZXJGcm9tJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICcuLi9PYnNlcnZhYmxlJztcbmltcG9ydCB7IG1lcmdlTWFwIH0gZnJvbSAnLi4vb3BlcmF0b3JzL21lcmdlTWFwJztcbmltcG9ydCB7IGlzQXJyYXlMaWtlIH0gZnJvbSAnLi4vdXRpbC9pc0FycmF5TGlrZSc7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSAnLi4vdXRpbC9pc0Z1bmN0aW9uJztcbmltcG9ydCB7IG1hcE9uZU9yTWFueUFyZ3MgfSBmcm9tICcuLi91dGlsL21hcE9uZU9yTWFueUFyZ3MnO1xuY29uc3Qgbm9kZUV2ZW50RW1pdHRlck1ldGhvZHMgPSBbJ2FkZExpc3RlbmVyJywgJ3JlbW92ZUxpc3RlbmVyJ107XG5jb25zdCBldmVudFRhcmdldE1ldGhvZHMgPSBbJ2FkZEV2ZW50TGlzdGVuZXInLCAncmVtb3ZlRXZlbnRMaXN0ZW5lciddO1xuY29uc3QganF1ZXJ5TWV0aG9kcyA9IFsnb24nLCAnb2ZmJ107XG5leHBvcnQgZnVuY3Rpb24gZnJvbUV2ZW50KHRhcmdldCwgZXZlbnROYW1lLCBvcHRpb25zLCByZXN1bHRTZWxlY3Rvcikge1xuICBpZiAoaXNGdW5jdGlvbihvcHRpb25zKSkge1xuICAgIHJlc3VsdFNlbGVjdG9yID0gb3B0aW9ucztcbiAgICBvcHRpb25zID0gdW5kZWZpbmVkO1xuICB9XG4gIGlmIChyZXN1bHRTZWxlY3Rvcikge1xuICAgIHJldHVybiBmcm9tRXZlbnQodGFyZ2V0LCBldmVudE5hbWUsIG9wdGlvbnMpLnBpcGUobWFwT25lT3JNYW55QXJncyhyZXN1bHRTZWxlY3RvcikpO1xuICB9XG4gIGNvbnN0IFthZGQsIHJlbW92ZV0gPSBpc0V2ZW50VGFyZ2V0KHRhcmdldCkgPyBldmVudFRhcmdldE1ldGhvZHMubWFwKG1ldGhvZE5hbWUgPT4gaGFuZGxlciA9PiB0YXJnZXRbbWV0aG9kTmFtZV0oZXZlbnROYW1lLCBoYW5kbGVyLCBvcHRpb25zKSkgOiBpc05vZGVTdHlsZUV2ZW50RW1pdHRlcih0YXJnZXQpID8gbm9kZUV2ZW50RW1pdHRlck1ldGhvZHMubWFwKHRvQ29tbW9uSGFuZGxlclJlZ2lzdHJ5KHRhcmdldCwgZXZlbnROYW1lKSkgOiBpc0pRdWVyeVN0eWxlRXZlbnRFbWl0dGVyKHRhcmdldCkgPyBqcXVlcnlNZXRob2RzLm1hcCh0b0NvbW1vbkhhbmRsZXJSZWdpc3RyeSh0YXJnZXQsIGV2ZW50TmFtZSkpIDogW107XG4gIGlmICghYWRkKSB7XG4gICAgaWYgKGlzQXJyYXlMaWtlKHRhcmdldCkpIHtcbiAgICAgIHJldHVybiBtZXJnZU1hcChzdWJUYXJnZXQgPT4gZnJvbUV2ZW50KHN1YlRhcmdldCwgZXZlbnROYW1lLCBvcHRpb25zKSkoaW5uZXJGcm9tKHRhcmdldCkpO1xuICAgIH1cbiAgfVxuICBpZiAoIWFkZCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgZXZlbnQgdGFyZ2V0Jyk7XG4gIH1cbiAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKHN1YnNjcmliZXIgPT4ge1xuICAgIGNvbnN0IGhhbmRsZXIgPSAoLi4uYXJncykgPT4gc3Vic2NyaWJlci5uZXh0KDEgPCBhcmdzLmxlbmd0aCA/IGFyZ3MgOiBhcmdzWzBdKTtcbiAgICBhZGQoaGFuZGxlcik7XG4gICAgcmV0dXJuICgpID0+IHJlbW92ZShoYW5kbGVyKTtcbiAgfSk7XG59XG5mdW5jdGlvbiB0b0NvbW1vbkhhbmRsZXJSZWdpc3RyeSh0YXJnZXQsIGV2ZW50TmFtZSkge1xuICByZXR1cm4gbWV0aG9kTmFtZSA9PiBoYW5kbGVyID0+IHRhcmdldFttZXRob2ROYW1lXShldmVudE5hbWUsIGhhbmRsZXIpO1xufVxuZnVuY3Rpb24gaXNOb2RlU3R5bGVFdmVudEVtaXR0ZXIodGFyZ2V0KSB7XG4gIHJldHVybiBpc0Z1bmN0aW9uKHRhcmdldC5hZGRMaXN0ZW5lcikgJiYgaXNGdW5jdGlvbih0YXJnZXQucmVtb3ZlTGlzdGVuZXIpO1xufVxuZnVuY3Rpb24gaXNKUXVlcnlTdHlsZUV2ZW50RW1pdHRlcih0YXJnZXQpIHtcbiAgcmV0dXJuIGlzRnVuY3Rpb24odGFyZ2V0Lm9uKSAmJiBpc0Z1bmN0aW9uKHRhcmdldC5vZmYpO1xufVxuZnVuY3Rpb24gaXNFdmVudFRhcmdldCh0YXJnZXQpIHtcbiAgcmV0dXJuIGlzRnVuY3Rpb24odGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIpICYmIGlzRnVuY3Rpb24odGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIpO1xufVxuIiwiaW1wb3J0IHsgb3BlcmF0ZSB9IGZyb20gJy4uL3V0aWwvbGlmdCc7XG5pbXBvcnQgeyBjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIgfSBmcm9tICcuL09wZXJhdG9yU3Vic2NyaWJlcic7XG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyKHByZWRpY2F0ZSwgdGhpc0FyZykge1xuICByZXR1cm4gb3BlcmF0ZSgoc291cmNlLCBzdWJzY3JpYmVyKSA9PiB7XG4gICAgbGV0IGluZGV4ID0gMDtcbiAgICBzb3VyY2Uuc3Vic2NyaWJlKGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCB2YWx1ZSA9PiBwcmVkaWNhdGUuY2FsbCh0aGlzQXJnLCB2YWx1ZSwgaW5kZXgrKykgJiYgc3Vic2NyaWJlci5uZXh0KHZhbHVlKSkpO1xuICB9KTtcbn1cbiIsImltcG9ydCB7IGlubmVyRnJvbSB9IGZyb20gJy4uL29ic2VydmFibGUvaW5uZXJGcm9tJztcbmltcG9ydCB7IGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlciB9IGZyb20gJy4vT3BlcmF0b3JTdWJzY3JpYmVyJztcbmltcG9ydCB7IG9wZXJhdGUgfSBmcm9tICcuLi91dGlsL2xpZnQnO1xuZXhwb3J0IGZ1bmN0aW9uIGNhdGNoRXJyb3Ioc2VsZWN0b3IpIHtcbiAgcmV0dXJuIG9wZXJhdGUoKHNvdXJjZSwgc3Vic2NyaWJlcikgPT4ge1xuICAgIGxldCBpbm5lclN1YiA9IG51bGw7XG4gICAgbGV0IHN5bmNVbnN1YiA9IGZhbHNlO1xuICAgIGxldCBoYW5kbGVkUmVzdWx0O1xuICAgIGlubmVyU3ViID0gc291cmNlLnN1YnNjcmliZShjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGVyciA9PiB7XG4gICAgICBoYW5kbGVkUmVzdWx0ID0gaW5uZXJGcm9tKHNlbGVjdG9yKGVyciwgY2F0Y2hFcnJvcihzZWxlY3Rvcikoc291cmNlKSkpO1xuICAgICAgaWYgKGlubmVyU3ViKSB7XG4gICAgICAgIGlubmVyU3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIGlubmVyU3ViID0gbnVsbDtcbiAgICAgICAgaGFuZGxlZFJlc3VsdC5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzeW5jVW5zdWIgPSB0cnVlO1xuICAgICAgfVxuICAgIH0pKTtcbiAgICBpZiAoc3luY1Vuc3ViKSB7XG4gICAgICBpbm5lclN1Yi51bnN1YnNjcmliZSgpO1xuICAgICAgaW5uZXJTdWIgPSBudWxsO1xuICAgICAgaGFuZGxlZFJlc3VsdC5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gICAgfVxuICB9KTtcbn1cbiIsImltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICcuLi9PYnNlcnZhYmxlJztcbmV4cG9ydCBjb25zdCBFTVBUWSA9IG5ldyBPYnNlcnZhYmxlKHN1YnNjcmliZXIgPT4gc3Vic2NyaWJlci5jb21wbGV0ZSgpKTtcbmV4cG9ydCBmdW5jdGlvbiBlbXB0eShzY2hlZHVsZXIpIHtcbiAgcmV0dXJuIHNjaGVkdWxlciA/IGVtcHR5U2NoZWR1bGVkKHNjaGVkdWxlcikgOiBFTVBUWTtcbn1cbmZ1bmN0aW9uIGVtcHR5U2NoZWR1bGVkKHNjaGVkdWxlcikge1xuICByZXR1cm4gbmV3IE9ic2VydmFibGUoc3Vic2NyaWJlciA9PiBzY2hlZHVsZXIuc2NoZWR1bGUoKCkgPT4gc3Vic2NyaWJlci5jb21wbGV0ZSgpKSk7XG59XG4iLCJpbXBvcnQgeyBFTVBUWSB9IGZyb20gJy4uL29ic2VydmFibGUvZW1wdHknO1xuaW1wb3J0IHsgb3BlcmF0ZSB9IGZyb20gJy4uL3V0aWwvbGlmdCc7XG5pbXBvcnQgeyBjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIgfSBmcm9tICcuL09wZXJhdG9yU3Vic2NyaWJlcic7XG5leHBvcnQgZnVuY3Rpb24gdGFrZShjb3VudCkge1xuICByZXR1cm4gY291bnQgPD0gMCA/ICgpID0+IEVNUFRZIDogb3BlcmF0ZSgoc291cmNlLCBzdWJzY3JpYmVyKSA9PiB7XG4gICAgbGV0IHNlZW4gPSAwO1xuICAgIHNvdXJjZS5zdWJzY3JpYmUoY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIHZhbHVlID0+IHtcbiAgICAgIGlmICgrK3NlZW4gPD0gY291bnQpIHtcbiAgICAgICAgc3Vic2NyaWJlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgaWYgKGNvdW50IDw9IHNlZW4pIHtcbiAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KSk7XG4gIH0pO1xufVxuIiwiaW1wb3J0IHsgb3BlcmF0ZSB9IGZyb20gJy4uL3V0aWwvbGlmdCc7XG5leHBvcnQgZnVuY3Rpb24gZmluYWxpemUoY2FsbGJhY2spIHtcbiAgcmV0dXJuIG9wZXJhdGUoKHNvdXJjZSwgc3Vic2NyaWJlcikgPT4ge1xuICAgIHRyeSB7XG4gICAgICBzb3VyY2Uuc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBzdWJzY3JpYmVyLmFkZChjYWxsYmFjayk7XG4gICAgfVxuICB9KTtcbn1cbiIsImltcG9ydCB7IG1lcmdlTWFwIH0gZnJvbSAnLi9tZXJnZU1hcCc7XG5pbXBvcnQgeyBpZGVudGl0eSB9IGZyb20gJy4uL3V0aWwvaWRlbnRpdHknO1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlQWxsKGNvbmN1cnJlbnQgPSBJbmZpbml0eSkge1xuICByZXR1cm4gbWVyZ2VNYXAoaWRlbnRpdHksIGNvbmN1cnJlbnQpO1xufVxuIiwiaW1wb3J0IHsgbWVyZ2VBbGwgfSBmcm9tICcuL21lcmdlQWxsJztcbmV4cG9ydCBmdW5jdGlvbiBjb25jYXRBbGwoKSB7XG4gIHJldHVybiBtZXJnZUFsbCgxKTtcbn1cbiIsImltcG9ydCB7IGNvbmNhdEFsbCB9IGZyb20gJy4uL29wZXJhdG9ycy9jb25jYXRBbGwnO1xuaW1wb3J0IHsgcG9wU2NoZWR1bGVyIH0gZnJvbSAnLi4vdXRpbC9hcmdzJztcbmltcG9ydCB7IGZyb20gfSBmcm9tICcuL2Zyb20nO1xuZXhwb3J0IGZ1bmN0aW9uIGNvbmNhdCguLi5hcmdzKSB7XG4gIHJldHVybiBjb25jYXRBbGwoKShmcm9tKGFyZ3MsIHBvcFNjaGVkdWxlcihhcmdzKSkpO1xufVxuIiwiaW1wb3J0IHsgY29uY2F0IH0gZnJvbSAnLi4vb2JzZXJ2YWJsZS9jb25jYXQnO1xuaW1wb3J0IHsgcG9wU2NoZWR1bGVyIH0gZnJvbSAnLi4vdXRpbC9hcmdzJztcbmltcG9ydCB7IG9wZXJhdGUgfSBmcm9tICcuLi91dGlsL2xpZnQnO1xuZXhwb3J0IGZ1bmN0aW9uIHN0YXJ0V2l0aCguLi52YWx1ZXMpIHtcbiAgY29uc3Qgc2NoZWR1bGVyID0gcG9wU2NoZWR1bGVyKHZhbHVlcyk7XG4gIHJldHVybiBvcGVyYXRlKChzb3VyY2UsIHN1YnNjcmliZXIpID0+IHtcbiAgICAoc2NoZWR1bGVyID8gY29uY2F0KHZhbHVlcywgc291cmNlLCBzY2hlZHVsZXIpIDogY29uY2F0KHZhbHVlcywgc291cmNlKSkuc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICB9KTtcbn1cbiIsImltcG9ydCB7IGlubmVyRnJvbSB9IGZyb20gJy4uL29ic2VydmFibGUvaW5uZXJGcm9tJztcbmltcG9ydCB7IG9wZXJhdGUgfSBmcm9tICcuLi91dGlsL2xpZnQnO1xuaW1wb3J0IHsgY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyIH0gZnJvbSAnLi9PcGVyYXRvclN1YnNjcmliZXInO1xuZXhwb3J0IGZ1bmN0aW9uIHN3aXRjaE1hcChwcm9qZWN0LCByZXN1bHRTZWxlY3Rvcikge1xuICByZXR1cm4gb3BlcmF0ZSgoc291cmNlLCBzdWJzY3JpYmVyKSA9PiB7XG4gICAgbGV0IGlubmVyU3Vic2NyaWJlciA9IG51bGw7XG4gICAgbGV0IGluZGV4ID0gMDtcbiAgICBsZXQgaXNDb21wbGV0ZSA9IGZhbHNlO1xuICAgIGNvbnN0IGNoZWNrQ29tcGxldGUgPSAoKSA9PiBpc0NvbXBsZXRlICYmICFpbm5lclN1YnNjcmliZXIgJiYgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgIHNvdXJjZS5zdWJzY3JpYmUoY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIHZhbHVlID0+IHtcbiAgICAgIGlubmVyU3Vic2NyaWJlciA9PT0gbnVsbCB8fCBpbm5lclN1YnNjcmliZXIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGlubmVyU3Vic2NyaWJlci51bnN1YnNjcmliZSgpO1xuICAgICAgbGV0IGlubmVySW5kZXggPSAwO1xuICAgICAgY29uc3Qgb3V0ZXJJbmRleCA9IGluZGV4Kys7XG4gICAgICBpbm5lckZyb20ocHJvamVjdCh2YWx1ZSwgb3V0ZXJJbmRleCkpLnN1YnNjcmliZShpbm5lclN1YnNjcmliZXIgPSBjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgaW5uZXJWYWx1ZSA9PiBzdWJzY3JpYmVyLm5leHQocmVzdWx0U2VsZWN0b3IgPyByZXN1bHRTZWxlY3Rvcih2YWx1ZSwgaW5uZXJWYWx1ZSwgb3V0ZXJJbmRleCwgaW5uZXJJbmRleCsrKSA6IGlubmVyVmFsdWUpLCAoKSA9PiB7XG4gICAgICAgIGlubmVyU3Vic2NyaWJlciA9IG51bGw7XG4gICAgICAgIGNoZWNrQ29tcGxldGUoKTtcbiAgICAgIH0pKTtcbiAgICB9LCAoKSA9PiB7XG4gICAgICBpc0NvbXBsZXRlID0gdHJ1ZTtcbiAgICAgIGNoZWNrQ29tcGxldGUoKTtcbiAgICB9KSk7XG4gIH0pO1xufVxuIiwiaW1wb3J0IHsgb3BlcmF0ZSB9IGZyb20gJy4uL3V0aWwvbGlmdCc7XG5pbXBvcnQgeyBjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIgfSBmcm9tICcuL09wZXJhdG9yU3Vic2NyaWJlcic7XG5pbXBvcnQgeyBpbm5lckZyb20gfSBmcm9tICcuLi9vYnNlcnZhYmxlL2lubmVyRnJvbSc7XG5pbXBvcnQgeyBub29wIH0gZnJvbSAnLi4vdXRpbC9ub29wJztcbmV4cG9ydCBmdW5jdGlvbiB0YWtlVW50aWwobm90aWZpZXIpIHtcbiAgcmV0dXJuIG9wZXJhdGUoKHNvdXJjZSwgc3Vic2NyaWJlcikgPT4ge1xuICAgIGlubmVyRnJvbShub3RpZmllcikuc3Vic2NyaWJlKGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCAoKSA9PiBzdWJzY3JpYmVyLmNvbXBsZXRlKCksIG5vb3ApKTtcbiAgICAhc3Vic2NyaWJlci5jbG9zZWQgJiYgc291cmNlLnN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgfSk7XG59XG4iLCJpbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSAnLi4vdXRpbC9pc0Z1bmN0aW9uJztcbmltcG9ydCB7IG9wZXJhdGUgfSBmcm9tICcuLi91dGlsL2xpZnQnO1xuaW1wb3J0IHsgY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyIH0gZnJvbSAnLi9PcGVyYXRvclN1YnNjcmliZXInO1xuaW1wb3J0IHsgaWRlbnRpdHkgfSBmcm9tICcuLi91dGlsL2lkZW50aXR5JztcbmV4cG9ydCBmdW5jdGlvbiB0YXAob2JzZXJ2ZXJPck5leHQsIGVycm9yLCBjb21wbGV0ZSkge1xuICBjb25zdCB0YXBPYnNlcnZlciA9IGlzRnVuY3Rpb24ob2JzZXJ2ZXJPck5leHQpIHx8IGVycm9yIHx8IGNvbXBsZXRlID8ge1xuICAgIG5leHQ6IG9ic2VydmVyT3JOZXh0LFxuICAgIGVycm9yLFxuICAgIGNvbXBsZXRlXG4gIH0gOiBvYnNlcnZlck9yTmV4dDtcbiAgcmV0dXJuIHRhcE9ic2VydmVyID8gb3BlcmF0ZSgoc291cmNlLCBzdWJzY3JpYmVyKSA9PiB7XG4gICAgdmFyIF9hO1xuICAgIChfYSA9IHRhcE9ic2VydmVyLnN1YnNjcmliZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNhbGwodGFwT2JzZXJ2ZXIpO1xuICAgIGxldCBpc1Vuc3ViID0gdHJ1ZTtcbiAgICBzb3VyY2Uuc3Vic2NyaWJlKGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCB2YWx1ZSA9PiB7XG4gICAgICB2YXIgX2E7XG4gICAgICAoX2EgPSB0YXBPYnNlcnZlci5uZXh0KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2FsbCh0YXBPYnNlcnZlciwgdmFsdWUpO1xuICAgICAgc3Vic2NyaWJlci5uZXh0KHZhbHVlKTtcbiAgICB9LCAoKSA9PiB7XG4gICAgICB2YXIgX2E7XG4gICAgICBpc1Vuc3ViID0gZmFsc2U7XG4gICAgICAoX2EgPSB0YXBPYnNlcnZlci5jb21wbGV0ZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNhbGwodGFwT2JzZXJ2ZXIpO1xuICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgIH0sIGVyciA9PiB7XG4gICAgICB2YXIgX2E7XG4gICAgICBpc1Vuc3ViID0gZmFsc2U7XG4gICAgICAoX2EgPSB0YXBPYnNlcnZlci5lcnJvcikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNhbGwodGFwT2JzZXJ2ZXIsIGVycik7XG4gICAgICBzdWJzY3JpYmVyLmVycm9yKGVycik7XG4gICAgfSwgKCkgPT4ge1xuICAgICAgdmFyIF9hLCBfYjtcbiAgICAgIGlmIChpc1Vuc3ViKSB7XG4gICAgICAgIChfYSA9IHRhcE9ic2VydmVyLnVuc3Vic2NyaWJlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2FsbCh0YXBPYnNlcnZlcik7XG4gICAgICB9XG4gICAgICAoX2IgPSB0YXBPYnNlcnZlci5maW5hbGl6ZSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwodGFwT2JzZXJ2ZXIpO1xuICAgIH0pKTtcbiAgfSkgOiBpZGVudGl0eTtcbn1cbiIsImV4cG9ydCBjb25zdCBkYXRlVGltZXN0YW1wUHJvdmlkZXIgPSB7XG4gIG5vdygpIHtcbiAgICByZXR1cm4gKGRhdGVUaW1lc3RhbXBQcm92aWRlci5kZWxlZ2F0ZSB8fCBEYXRlKS5ub3coKTtcbiAgfSxcbiAgZGVsZWdhdGU6IHVuZGVmaW5lZFxufTtcbiIsImltcG9ydCB7IFN1YmplY3QgfSBmcm9tICcuL1N1YmplY3QnO1xuaW1wb3J0IHsgZGF0ZVRpbWVzdGFtcFByb3ZpZGVyIH0gZnJvbSAnLi9zY2hlZHVsZXIvZGF0ZVRpbWVzdGFtcFByb3ZpZGVyJztcbmV4cG9ydCBjbGFzcyBSZXBsYXlTdWJqZWN0IGV4dGVuZHMgU3ViamVjdCB7XG4gIGNvbnN0cnVjdG9yKF9idWZmZXJTaXplID0gSW5maW5pdHksIF93aW5kb3dUaW1lID0gSW5maW5pdHksIF90aW1lc3RhbXBQcm92aWRlciA9IGRhdGVUaW1lc3RhbXBQcm92aWRlcikge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5fYnVmZmVyU2l6ZSA9IF9idWZmZXJTaXplO1xuICAgIHRoaXMuX3dpbmRvd1RpbWUgPSBfd2luZG93VGltZTtcbiAgICB0aGlzLl90aW1lc3RhbXBQcm92aWRlciA9IF90aW1lc3RhbXBQcm92aWRlcjtcbiAgICB0aGlzLl9idWZmZXIgPSBbXTtcbiAgICB0aGlzLl9pbmZpbml0ZVRpbWVXaW5kb3cgPSB0cnVlO1xuICAgIHRoaXMuX2luZmluaXRlVGltZVdpbmRvdyA9IF93aW5kb3dUaW1lID09PSBJbmZpbml0eTtcbiAgICB0aGlzLl9idWZmZXJTaXplID0gTWF0aC5tYXgoMSwgX2J1ZmZlclNpemUpO1xuICAgIHRoaXMuX3dpbmRvd1RpbWUgPSBNYXRoLm1heCgxLCBfd2luZG93VGltZSk7XG4gIH1cbiAgbmV4dCh2YWx1ZSkge1xuICAgIGNvbnN0IHtcbiAgICAgIGlzU3RvcHBlZCxcbiAgICAgIF9idWZmZXIsXG4gICAgICBfaW5maW5pdGVUaW1lV2luZG93LFxuICAgICAgX3RpbWVzdGFtcFByb3ZpZGVyLFxuICAgICAgX3dpbmRvd1RpbWVcbiAgICB9ID0gdGhpcztcbiAgICBpZiAoIWlzU3RvcHBlZCkge1xuICAgICAgX2J1ZmZlci5wdXNoKHZhbHVlKTtcbiAgICAgICFfaW5maW5pdGVUaW1lV2luZG93ICYmIF9idWZmZXIucHVzaChfdGltZXN0YW1wUHJvdmlkZXIubm93KCkgKyBfd2luZG93VGltZSk7XG4gICAgfVxuICAgIHRoaXMuX3RyaW1CdWZmZXIoKTtcbiAgICBzdXBlci5uZXh0KHZhbHVlKTtcbiAgfVxuICBfc3Vic2NyaWJlKHN1YnNjcmliZXIpIHtcbiAgICB0aGlzLl90aHJvd0lmQ2xvc2VkKCk7XG4gICAgdGhpcy5fdHJpbUJ1ZmZlcigpO1xuICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IHRoaXMuX2lubmVyU3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgIGNvbnN0IHtcbiAgICAgIF9pbmZpbml0ZVRpbWVXaW5kb3csXG4gICAgICBfYnVmZmVyXG4gICAgfSA9IHRoaXM7XG4gICAgY29uc3QgY29weSA9IF9idWZmZXIuc2xpY2UoKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvcHkubGVuZ3RoICYmICFzdWJzY3JpYmVyLmNsb3NlZDsgaSArPSBfaW5maW5pdGVUaW1lV2luZG93ID8gMSA6IDIpIHtcbiAgICAgIHN1YnNjcmliZXIubmV4dChjb3B5W2ldKTtcbiAgICB9XG4gICAgdGhpcy5fY2hlY2tGaW5hbGl6ZWRTdGF0dXNlcyhzdWJzY3JpYmVyKTtcbiAgICByZXR1cm4gc3Vic2NyaXB0aW9uO1xuICB9XG4gIF90cmltQnVmZmVyKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIF9idWZmZXJTaXplLFxuICAgICAgX3RpbWVzdGFtcFByb3ZpZGVyLFxuICAgICAgX2J1ZmZlcixcbiAgICAgIF9pbmZpbml0ZVRpbWVXaW5kb3dcbiAgICB9ID0gdGhpcztcbiAgICBjb25zdCBhZGp1c3RlZEJ1ZmZlclNpemUgPSAoX2luZmluaXRlVGltZVdpbmRvdyA/IDEgOiAyKSAqIF9idWZmZXJTaXplO1xuICAgIF9idWZmZXJTaXplIDwgSW5maW5pdHkgJiYgYWRqdXN0ZWRCdWZmZXJTaXplIDwgX2J1ZmZlci5sZW5ndGggJiYgX2J1ZmZlci5zcGxpY2UoMCwgX2J1ZmZlci5sZW5ndGggLSBhZGp1c3RlZEJ1ZmZlclNpemUpO1xuICAgIGlmICghX2luZmluaXRlVGltZVdpbmRvdykge1xuICAgICAgY29uc3Qgbm93ID0gX3RpbWVzdGFtcFByb3ZpZGVyLm5vdygpO1xuICAgICAgbGV0IGxhc3QgPSAwO1xuICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBfYnVmZmVyLmxlbmd0aCAmJiBfYnVmZmVyW2ldIDw9IG5vdzsgaSArPSAyKSB7XG4gICAgICAgIGxhc3QgPSBpO1xuICAgICAgfVxuICAgICAgbGFzdCAmJiBfYnVmZmVyLnNwbGljZSgwLCBsYXN0ICsgMSk7XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICcuLi9TdWJzY3JpcHRpb24nO1xuZXhwb3J0IGNsYXNzIEFjdGlvbiBleHRlbmRzIFN1YnNjcmlwdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHNjaGVkdWxlciwgd29yaykge1xuICAgIHN1cGVyKCk7XG4gIH1cbiAgc2NoZWR1bGUoc3RhdGUsIGRlbGF5ID0gMCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9XG59XG4iLCJleHBvcnQgY29uc3QgaW50ZXJ2YWxQcm92aWRlciA9IHtcbiAgc2V0SW50ZXJ2YWwoaGFuZGxlciwgdGltZW91dCwgLi4uYXJncykge1xuICAgIGNvbnN0IHtcbiAgICAgIGRlbGVnYXRlXG4gICAgfSA9IGludGVydmFsUHJvdmlkZXI7XG4gICAgaWYgKGRlbGVnYXRlID09PSBudWxsIHx8IGRlbGVnYXRlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBkZWxlZ2F0ZS5zZXRJbnRlcnZhbCkge1xuICAgICAgcmV0dXJuIGRlbGVnYXRlLnNldEludGVydmFsKGhhbmRsZXIsIHRpbWVvdXQsIC4uLmFyZ3MpO1xuICAgIH1cbiAgICByZXR1cm4gc2V0SW50ZXJ2YWwoaGFuZGxlciwgdGltZW91dCwgLi4uYXJncyk7XG4gIH0sXG4gIGNsZWFySW50ZXJ2YWwoaGFuZGxlKSB7XG4gICAgY29uc3Qge1xuICAgICAgZGVsZWdhdGVcbiAgICB9ID0gaW50ZXJ2YWxQcm92aWRlcjtcbiAgICByZXR1cm4gKChkZWxlZ2F0ZSA9PT0gbnVsbCB8fCBkZWxlZ2F0ZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZGVsZWdhdGUuY2xlYXJJbnRlcnZhbCkgfHwgY2xlYXJJbnRlcnZhbCkoaGFuZGxlKTtcbiAgfSxcbiAgZGVsZWdhdGU6IHVuZGVmaW5lZFxufTtcbiIsImltcG9ydCB7IEFjdGlvbiB9IGZyb20gJy4vQWN0aW9uJztcbmltcG9ydCB7IGludGVydmFsUHJvdmlkZXIgfSBmcm9tICcuL2ludGVydmFsUHJvdmlkZXInO1xuaW1wb3J0IHsgYXJyUmVtb3ZlIH0gZnJvbSAnLi4vdXRpbC9hcnJSZW1vdmUnO1xuZXhwb3J0IGNsYXNzIEFzeW5jQWN0aW9uIGV4dGVuZHMgQWN0aW9uIHtcbiAgY29uc3RydWN0b3Ioc2NoZWR1bGVyLCB3b3JrKSB7XG4gICAgc3VwZXIoc2NoZWR1bGVyLCB3b3JrKTtcbiAgICB0aGlzLnNjaGVkdWxlciA9IHNjaGVkdWxlcjtcbiAgICB0aGlzLndvcmsgPSB3b3JrO1xuICAgIHRoaXMucGVuZGluZyA9IGZhbHNlO1xuICB9XG4gIHNjaGVkdWxlKHN0YXRlLCBkZWxheSA9IDApIHtcbiAgICB2YXIgX2E7XG4gICAgaWYgKHRoaXMuY2xvc2VkKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgdGhpcy5zdGF0ZSA9IHN0YXRlO1xuICAgIGNvbnN0IGlkID0gdGhpcy5pZDtcbiAgICBjb25zdCBzY2hlZHVsZXIgPSB0aGlzLnNjaGVkdWxlcjtcbiAgICBpZiAoaWQgIT0gbnVsbCkge1xuICAgICAgdGhpcy5pZCA9IHRoaXMucmVjeWNsZUFzeW5jSWQoc2NoZWR1bGVyLCBpZCwgZGVsYXkpO1xuICAgIH1cbiAgICB0aGlzLnBlbmRpbmcgPSB0cnVlO1xuICAgIHRoaXMuZGVsYXkgPSBkZWxheTtcbiAgICB0aGlzLmlkID0gKF9hID0gdGhpcy5pZCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogdGhpcy5yZXF1ZXN0QXN5bmNJZChzY2hlZHVsZXIsIHRoaXMuaWQsIGRlbGF5KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICByZXF1ZXN0QXN5bmNJZChzY2hlZHVsZXIsIF9pZCwgZGVsYXkgPSAwKSB7XG4gICAgcmV0dXJuIGludGVydmFsUHJvdmlkZXIuc2V0SW50ZXJ2YWwoc2NoZWR1bGVyLmZsdXNoLmJpbmQoc2NoZWR1bGVyLCB0aGlzKSwgZGVsYXkpO1xuICB9XG4gIHJlY3ljbGVBc3luY0lkKF9zY2hlZHVsZXIsIGlkLCBkZWxheSA9IDApIHtcbiAgICBpZiAoZGVsYXkgIT0gbnVsbCAmJiB0aGlzLmRlbGF5ID09PSBkZWxheSAmJiB0aGlzLnBlbmRpbmcgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gaWQ7XG4gICAgfVxuICAgIGlmIChpZCAhPSBudWxsKSB7XG4gICAgICBpbnRlcnZhbFByb3ZpZGVyLmNsZWFySW50ZXJ2YWwoaWQpO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGV4ZWN1dGUoc3RhdGUsIGRlbGF5KSB7XG4gICAgaWYgKHRoaXMuY2xvc2VkKSB7XG4gICAgICByZXR1cm4gbmV3IEVycm9yKCdleGVjdXRpbmcgYSBjYW5jZWxsZWQgYWN0aW9uJyk7XG4gICAgfVxuICAgIHRoaXMucGVuZGluZyA9IGZhbHNlO1xuICAgIGNvbnN0IGVycm9yID0gdGhpcy5fZXhlY3V0ZShzdGF0ZSwgZGVsYXkpO1xuICAgIGlmIChlcnJvcikge1xuICAgICAgcmV0dXJuIGVycm9yO1xuICAgIH0gZWxzZSBpZiAodGhpcy5wZW5kaW5nID09PSBmYWxzZSAmJiB0aGlzLmlkICE9IG51bGwpIHtcbiAgICAgIHRoaXMuaWQgPSB0aGlzLnJlY3ljbGVBc3luY0lkKHRoaXMuc2NoZWR1bGVyLCB0aGlzLmlkLCBudWxsKTtcbiAgICB9XG4gIH1cbiAgX2V4ZWN1dGUoc3RhdGUsIF9kZWxheSkge1xuICAgIGxldCBlcnJvcmVkID0gZmFsc2U7XG4gICAgbGV0IGVycm9yVmFsdWU7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMud29yayhzdGF0ZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgZXJyb3JlZCA9IHRydWU7XG4gICAgICBlcnJvclZhbHVlID0gZSA/IGUgOiBuZXcgRXJyb3IoJ1NjaGVkdWxlZCBhY3Rpb24gdGhyZXcgZmFsc3kgZXJyb3InKTtcbiAgICB9XG4gICAgaWYgKGVycm9yZWQpIHtcbiAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgIHJldHVybiBlcnJvclZhbHVlO1xuICAgIH1cbiAgfVxuICB1bnN1YnNjcmliZSgpIHtcbiAgICBpZiAoIXRoaXMuY2xvc2VkKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGlkLFxuICAgICAgICBzY2hlZHVsZXJcbiAgICAgIH0gPSB0aGlzO1xuICAgICAgY29uc3Qge1xuICAgICAgICBhY3Rpb25zXG4gICAgICB9ID0gc2NoZWR1bGVyO1xuICAgICAgdGhpcy53b3JrID0gdGhpcy5zdGF0ZSA9IHRoaXMuc2NoZWR1bGVyID0gbnVsbDtcbiAgICAgIHRoaXMucGVuZGluZyA9IGZhbHNlO1xuICAgICAgYXJyUmVtb3ZlKGFjdGlvbnMsIHRoaXMpO1xuICAgICAgaWYgKGlkICE9IG51bGwpIHtcbiAgICAgICAgdGhpcy5pZCA9IHRoaXMucmVjeWNsZUFzeW5jSWQoc2NoZWR1bGVyLCBpZCwgbnVsbCk7XG4gICAgICB9XG4gICAgICB0aGlzLmRlbGF5ID0gbnVsbDtcbiAgICAgIHN1cGVyLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyBkYXRlVGltZXN0YW1wUHJvdmlkZXIgfSBmcm9tICcuL3NjaGVkdWxlci9kYXRlVGltZXN0YW1wUHJvdmlkZXInO1xuZXhwb3J0IGNsYXNzIFNjaGVkdWxlciB7XG4gIGNvbnN0cnVjdG9yKHNjaGVkdWxlckFjdGlvbkN0b3IsIG5vdyA9IFNjaGVkdWxlci5ub3cpIHtcbiAgICB0aGlzLnNjaGVkdWxlckFjdGlvbkN0b3IgPSBzY2hlZHVsZXJBY3Rpb25DdG9yO1xuICAgIHRoaXMubm93ID0gbm93O1xuICB9XG4gIHNjaGVkdWxlKHdvcmssIGRlbGF5ID0gMCwgc3RhdGUpIHtcbiAgICByZXR1cm4gbmV3IHRoaXMuc2NoZWR1bGVyQWN0aW9uQ3Rvcih0aGlzLCB3b3JrKS5zY2hlZHVsZShzdGF0ZSwgZGVsYXkpO1xuICB9XG59XG5TY2hlZHVsZXIubm93ID0gZGF0ZVRpbWVzdGFtcFByb3ZpZGVyLm5vdztcbiIsImltcG9ydCB7IFNjaGVkdWxlciB9IGZyb20gJy4uL1NjaGVkdWxlcic7XG5leHBvcnQgY2xhc3MgQXN5bmNTY2hlZHVsZXIgZXh0ZW5kcyBTY2hlZHVsZXIge1xuICBjb25zdHJ1Y3RvcihTY2hlZHVsZXJBY3Rpb24sIG5vdyA9IFNjaGVkdWxlci5ub3cpIHtcbiAgICBzdXBlcihTY2hlZHVsZXJBY3Rpb24sIG5vdyk7XG4gICAgdGhpcy5hY3Rpb25zID0gW107XG4gICAgdGhpcy5fYWN0aXZlID0gZmFsc2U7XG4gIH1cbiAgZmx1c2goYWN0aW9uKSB7XG4gICAgY29uc3Qge1xuICAgICAgYWN0aW9uc1xuICAgIH0gPSB0aGlzO1xuICAgIGlmICh0aGlzLl9hY3RpdmUpIHtcbiAgICAgIGFjdGlvbnMucHVzaChhY3Rpb24pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgZXJyb3I7XG4gICAgdGhpcy5fYWN0aXZlID0gdHJ1ZTtcbiAgICBkbyB7XG4gICAgICBpZiAoZXJyb3IgPSBhY3Rpb24uZXhlY3V0ZShhY3Rpb24uc3RhdGUsIGFjdGlvbi5kZWxheSkpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSB3aGlsZSAoYWN0aW9uID0gYWN0aW9ucy5zaGlmdCgpKTtcbiAgICB0aGlzLl9hY3RpdmUgPSBmYWxzZTtcbiAgICBpZiAoZXJyb3IpIHtcbiAgICAgIHdoaWxlIChhY3Rpb24gPSBhY3Rpb25zLnNoaWZ0KCkpIHtcbiAgICAgICAgYWN0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICB9XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7IEFzeW5jQWN0aW9uIH0gZnJvbSAnLi9Bc3luY0FjdGlvbic7XG5pbXBvcnQgeyBBc3luY1NjaGVkdWxlciB9IGZyb20gJy4vQXN5bmNTY2hlZHVsZXInO1xuZXhwb3J0IGNvbnN0IGFzeW5jU2NoZWR1bGVyID0gbmV3IEFzeW5jU2NoZWR1bGVyKEFzeW5jQWN0aW9uKTtcbmV4cG9ydCBjb25zdCBhc3luYyA9IGFzeW5jU2NoZWR1bGVyO1xuIiwiaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJy4uL09ic2VydmFibGUnO1xuaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gJy4uL3V0aWwvaXNGdW5jdGlvbic7XG5leHBvcnQgZnVuY3Rpb24gdGhyb3dFcnJvcihlcnJvck9yRXJyb3JGYWN0b3J5LCBzY2hlZHVsZXIpIHtcbiAgY29uc3QgZXJyb3JGYWN0b3J5ID0gaXNGdW5jdGlvbihlcnJvck9yRXJyb3JGYWN0b3J5KSA/IGVycm9yT3JFcnJvckZhY3RvcnkgOiAoKSA9PiBlcnJvck9yRXJyb3JGYWN0b3J5O1xuICBjb25zdCBpbml0ID0gc3Vic2NyaWJlciA9PiBzdWJzY3JpYmVyLmVycm9yKGVycm9yRmFjdG9yeSgpKTtcbiAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKHNjaGVkdWxlciA/IHN1YnNjcmliZXIgPT4gc2NoZWR1bGVyLnNjaGVkdWxlKGluaXQsIDAsIHN1YnNjcmliZXIpIDogaW5pdCk7XG59XG4iLCJpbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAnLi4vT2JzZXJ2YWJsZSc7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSAnLi9pc0Z1bmN0aW9uJztcbmV4cG9ydCBmdW5jdGlvbiBpc09ic2VydmFibGUob2JqKSB7XG4gIHJldHVybiAhIW9iaiAmJiAob2JqIGluc3RhbmNlb2YgT2JzZXJ2YWJsZSB8fCBpc0Z1bmN0aW9uKG9iai5saWZ0KSAmJiBpc0Z1bmN0aW9uKG9iai5zdWJzY3JpYmUpKTtcbn1cbiIsImltcG9ydCB7IGNyZWF0ZUVycm9yQ2xhc3MgfSBmcm9tICcuL2NyZWF0ZUVycm9yQ2xhc3MnO1xuZXhwb3J0IGNvbnN0IEVtcHR5RXJyb3IgPSBjcmVhdGVFcnJvckNsYXNzKF9zdXBlciA9PiBmdW5jdGlvbiBFbXB0eUVycm9ySW1wbCgpIHtcbiAgX3N1cGVyKHRoaXMpO1xuICB0aGlzLm5hbWUgPSAnRW1wdHlFcnJvcic7XG4gIHRoaXMubWVzc2FnZSA9ICdubyBlbGVtZW50cyBpbiBzZXF1ZW5jZSc7XG59KTtcbiIsImV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkRGF0ZSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBEYXRlICYmICFpc05hTih2YWx1ZSk7XG59XG4iLCJpbXBvcnQgeyBhc3luY1NjaGVkdWxlciB9IGZyb20gJy4uL3NjaGVkdWxlci9hc3luYyc7XG5pbXBvcnQgeyBpc1ZhbGlkRGF0ZSB9IGZyb20gJy4uL3V0aWwvaXNEYXRlJztcbmltcG9ydCB7IG9wZXJhdGUgfSBmcm9tICcuLi91dGlsL2xpZnQnO1xuaW1wb3J0IHsgaW5uZXJGcm9tIH0gZnJvbSAnLi4vb2JzZXJ2YWJsZS9pbm5lckZyb20nO1xuaW1wb3J0IHsgY3JlYXRlRXJyb3JDbGFzcyB9IGZyb20gJy4uL3V0aWwvY3JlYXRlRXJyb3JDbGFzcyc7XG5pbXBvcnQgeyBjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIgfSBmcm9tICcuL09wZXJhdG9yU3Vic2NyaWJlcic7XG5pbXBvcnQgeyBleGVjdXRlU2NoZWR1bGUgfSBmcm9tICcuLi91dGlsL2V4ZWN1dGVTY2hlZHVsZSc7XG5leHBvcnQgY29uc3QgVGltZW91dEVycm9yID0gY3JlYXRlRXJyb3JDbGFzcyhfc3VwZXIgPT4gZnVuY3Rpb24gVGltZW91dEVycm9ySW1wbChpbmZvID0gbnVsbCkge1xuICBfc3VwZXIodGhpcyk7XG4gIHRoaXMubWVzc2FnZSA9ICdUaW1lb3V0IGhhcyBvY2N1cnJlZCc7XG4gIHRoaXMubmFtZSA9ICdUaW1lb3V0RXJyb3InO1xuICB0aGlzLmluZm8gPSBpbmZvO1xufSk7XG5leHBvcnQgZnVuY3Rpb24gdGltZW91dChjb25maWcsIHNjaGVkdWxlckFyZykge1xuICBjb25zdCB7XG4gICAgZmlyc3QsXG4gICAgZWFjaCxcbiAgICB3aXRoOiBfd2l0aCA9IHRpbWVvdXRFcnJvckZhY3RvcnksXG4gICAgc2NoZWR1bGVyID0gc2NoZWR1bGVyQXJnICE9PSBudWxsICYmIHNjaGVkdWxlckFyZyAhPT0gdm9pZCAwID8gc2NoZWR1bGVyQXJnIDogYXN5bmNTY2hlZHVsZXIsXG4gICAgbWV0YSA9IG51bGxcbiAgfSA9IGlzVmFsaWREYXRlKGNvbmZpZykgPyB7XG4gICAgZmlyc3Q6IGNvbmZpZ1xuICB9IDogdHlwZW9mIGNvbmZpZyA9PT0gJ251bWJlcicgPyB7XG4gICAgZWFjaDogY29uZmlnXG4gIH0gOiBjb25maWc7XG4gIGlmIChmaXJzdCA9PSBudWxsICYmIGVhY2ggPT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ05vIHRpbWVvdXQgcHJvdmlkZWQuJyk7XG4gIH1cbiAgcmV0dXJuIG9wZXJhdGUoKHNvdXJjZSwgc3Vic2NyaWJlcikgPT4ge1xuICAgIGxldCBvcmlnaW5hbFNvdXJjZVN1YnNjcmlwdGlvbjtcbiAgICBsZXQgdGltZXJTdWJzY3JpcHRpb247XG4gICAgbGV0IGxhc3RWYWx1ZSA9IG51bGw7XG4gICAgbGV0IHNlZW4gPSAwO1xuICAgIGNvbnN0IHN0YXJ0VGltZXIgPSBkZWxheSA9PiB7XG4gICAgICB0aW1lclN1YnNjcmlwdGlvbiA9IGV4ZWN1dGVTY2hlZHVsZShzdWJzY3JpYmVyLCBzY2hlZHVsZXIsICgpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBvcmlnaW5hbFNvdXJjZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgIGlubmVyRnJvbShfd2l0aCh7XG4gICAgICAgICAgICBtZXRhLFxuICAgICAgICAgICAgbGFzdFZhbHVlLFxuICAgICAgICAgICAgc2VlblxuICAgICAgICAgIH0pKS5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIHN1YnNjcmliZXIuZXJyb3IoZXJyKTtcbiAgICAgICAgfVxuICAgICAgfSwgZGVsYXkpO1xuICAgIH07XG4gICAgb3JpZ2luYWxTb3VyY2VTdWJzY3JpcHRpb24gPSBzb3VyY2Uuc3Vic2NyaWJlKGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCB2YWx1ZSA9PiB7XG4gICAgICB0aW1lclN1YnNjcmlwdGlvbiA9PT0gbnVsbCB8fCB0aW1lclN1YnNjcmlwdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogdGltZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgIHNlZW4rKztcbiAgICAgIHN1YnNjcmliZXIubmV4dChsYXN0VmFsdWUgPSB2YWx1ZSk7XG4gICAgICBlYWNoID4gMCAmJiBzdGFydFRpbWVyKGVhY2gpO1xuICAgIH0sIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCAoKSA9PiB7XG4gICAgICBpZiAoISh0aW1lclN1YnNjcmlwdGlvbiA9PT0gbnVsbCB8fCB0aW1lclN1YnNjcmlwdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogdGltZXJTdWJzY3JpcHRpb24uY2xvc2VkKSkge1xuICAgICAgICB0aW1lclN1YnNjcmlwdGlvbiA9PT0gbnVsbCB8fCB0aW1lclN1YnNjcmlwdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogdGltZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgIH1cbiAgICAgIGxhc3RWYWx1ZSA9IG51bGw7XG4gICAgfSkpO1xuICAgICFzZWVuICYmIHN0YXJ0VGltZXIoZmlyc3QgIT0gbnVsbCA/IHR5cGVvZiBmaXJzdCA9PT0gJ251bWJlcicgPyBmaXJzdCA6ICtmaXJzdCAtIHNjaGVkdWxlci5ub3coKSA6IGVhY2gpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIHRpbWVvdXRFcnJvckZhY3RvcnkoaW5mbykge1xuICB0aHJvdyBuZXcgVGltZW91dEVycm9yKGluZm8pO1xufVxuIiwiY29uc3Qge1xuICBpc0FycmF5XG59ID0gQXJyYXk7XG5jb25zdCB7XG4gIGdldFByb3RvdHlwZU9mLFxuICBwcm90b3R5cGU6IG9iamVjdFByb3RvLFxuICBrZXlzOiBnZXRLZXlzXG59ID0gT2JqZWN0O1xuZXhwb3J0IGZ1bmN0aW9uIGFyZ3NBcmdBcnJheU9yT2JqZWN0KGFyZ3MpIHtcbiAgaWYgKGFyZ3MubGVuZ3RoID09PSAxKSB7XG4gICAgY29uc3QgZmlyc3QgPSBhcmdzWzBdO1xuICAgIGlmIChpc0FycmF5KGZpcnN0KSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYXJnczogZmlyc3QsXG4gICAgICAgIGtleXM6IG51bGxcbiAgICAgIH07XG4gICAgfVxuICAgIGlmIChpc1BPSk8oZmlyc3QpKSB7XG4gICAgICBjb25zdCBrZXlzID0gZ2V0S2V5cyhmaXJzdCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBhcmdzOiBrZXlzLm1hcChrZXkgPT4gZmlyc3Rba2V5XSksXG4gICAgICAgIGtleXNcbiAgICAgIH07XG4gICAgfVxuICB9XG4gIHJldHVybiB7XG4gICAgYXJnczogYXJncyxcbiAgICBrZXlzOiBudWxsXG4gIH07XG59XG5mdW5jdGlvbiBpc1BPSk8ob2JqKSB7XG4gIHJldHVybiBvYmogJiYgdHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgZ2V0UHJvdG90eXBlT2Yob2JqKSA9PT0gb2JqZWN0UHJvdG87XG59XG4iLCJleHBvcnQgZnVuY3Rpb24gY3JlYXRlT2JqZWN0KGtleXMsIHZhbHVlcykge1xuICByZXR1cm4ga2V5cy5yZWR1Y2UoKHJlc3VsdCwga2V5LCBpKSA9PiAocmVzdWx0W2tleV0gPSB2YWx1ZXNbaV0sIHJlc3VsdCksIHt9KTtcbn1cbiIsImltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICcuLi9PYnNlcnZhYmxlJztcbmltcG9ydCB7IGFyZ3NBcmdBcnJheU9yT2JqZWN0IH0gZnJvbSAnLi4vdXRpbC9hcmdzQXJnQXJyYXlPck9iamVjdCc7XG5pbXBvcnQgeyBmcm9tIH0gZnJvbSAnLi9mcm9tJztcbmltcG9ydCB7IGlkZW50aXR5IH0gZnJvbSAnLi4vdXRpbC9pZGVudGl0eSc7XG5pbXBvcnQgeyBtYXBPbmVPck1hbnlBcmdzIH0gZnJvbSAnLi4vdXRpbC9tYXBPbmVPck1hbnlBcmdzJztcbmltcG9ydCB7IHBvcFJlc3VsdFNlbGVjdG9yLCBwb3BTY2hlZHVsZXIgfSBmcm9tICcuLi91dGlsL2FyZ3MnO1xuaW1wb3J0IHsgY3JlYXRlT2JqZWN0IH0gZnJvbSAnLi4vdXRpbC9jcmVhdGVPYmplY3QnO1xuaW1wb3J0IHsgY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyIH0gZnJvbSAnLi4vb3BlcmF0b3JzL09wZXJhdG9yU3Vic2NyaWJlcic7XG5pbXBvcnQgeyBleGVjdXRlU2NoZWR1bGUgfSBmcm9tICcuLi91dGlsL2V4ZWN1dGVTY2hlZHVsZSc7XG5leHBvcnQgZnVuY3Rpb24gY29tYmluZUxhdGVzdCguLi5hcmdzKSB7XG4gIGNvbnN0IHNjaGVkdWxlciA9IHBvcFNjaGVkdWxlcihhcmdzKTtcbiAgY29uc3QgcmVzdWx0U2VsZWN0b3IgPSBwb3BSZXN1bHRTZWxlY3RvcihhcmdzKTtcbiAgY29uc3Qge1xuICAgIGFyZ3M6IG9ic2VydmFibGVzLFxuICAgIGtleXNcbiAgfSA9IGFyZ3NBcmdBcnJheU9yT2JqZWN0KGFyZ3MpO1xuICBpZiAob2JzZXJ2YWJsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGZyb20oW10sIHNjaGVkdWxlcik7XG4gIH1cbiAgY29uc3QgcmVzdWx0ID0gbmV3IE9ic2VydmFibGUoY29tYmluZUxhdGVzdEluaXQob2JzZXJ2YWJsZXMsIHNjaGVkdWxlciwga2V5cyA/IHZhbHVlcyA9PiBjcmVhdGVPYmplY3Qoa2V5cywgdmFsdWVzKSA6IGlkZW50aXR5KSk7XG4gIHJldHVybiByZXN1bHRTZWxlY3RvciA/IHJlc3VsdC5waXBlKG1hcE9uZU9yTWFueUFyZ3MocmVzdWx0U2VsZWN0b3IpKSA6IHJlc3VsdDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5lTGF0ZXN0SW5pdChvYnNlcnZhYmxlcywgc2NoZWR1bGVyLCB2YWx1ZVRyYW5zZm9ybSA9IGlkZW50aXR5KSB7XG4gIHJldHVybiBzdWJzY3JpYmVyID0+IHtcbiAgICBtYXliZVNjaGVkdWxlKHNjaGVkdWxlciwgKCkgPT4ge1xuICAgICAgY29uc3Qge1xuICAgICAgICBsZW5ndGhcbiAgICAgIH0gPSBvYnNlcnZhYmxlcztcbiAgICAgIGNvbnN0IHZhbHVlcyA9IG5ldyBBcnJheShsZW5ndGgpO1xuICAgICAgbGV0IGFjdGl2ZSA9IGxlbmd0aDtcbiAgICAgIGxldCByZW1haW5pbmdGaXJzdFZhbHVlcyA9IGxlbmd0aDtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbWF5YmVTY2hlZHVsZShzY2hlZHVsZXIsICgpID0+IHtcbiAgICAgICAgICBjb25zdCBzb3VyY2UgPSBmcm9tKG9ic2VydmFibGVzW2ldLCBzY2hlZHVsZXIpO1xuICAgICAgICAgIGxldCBoYXNGaXJzdFZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgc291cmNlLnN1YnNjcmliZShjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgdmFsdWUgPT4ge1xuICAgICAgICAgICAgdmFsdWVzW2ldID0gdmFsdWU7XG4gICAgICAgICAgICBpZiAoIWhhc0ZpcnN0VmFsdWUpIHtcbiAgICAgICAgICAgICAgaGFzRmlyc3RWYWx1ZSA9IHRydWU7XG4gICAgICAgICAgICAgIHJlbWFpbmluZ0ZpcnN0VmFsdWVzLS07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXJlbWFpbmluZ0ZpcnN0VmFsdWVzKSB7XG4gICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCh2YWx1ZVRyYW5zZm9ybSh2YWx1ZXMuc2xpY2UoKSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sICgpID0+IHtcbiAgICAgICAgICAgIGlmICghIC0tYWN0aXZlKSB7XG4gICAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSk7XG4gICAgICAgIH0sIHN1YnNjcmliZXIpO1xuICAgICAgfVxuICAgIH0sIHN1YnNjcmliZXIpO1xuICB9O1xufVxuZnVuY3Rpb24gbWF5YmVTY2hlZHVsZShzY2hlZHVsZXIsIGV4ZWN1dGUsIHN1YnNjcmlwdGlvbikge1xuICBpZiAoc2NoZWR1bGVyKSB7XG4gICAgZXhlY3V0ZVNjaGVkdWxlKHN1YnNjcmlwdGlvbiwgc2NoZWR1bGVyLCBleGVjdXRlKTtcbiAgfSBlbHNlIHtcbiAgICBleGVjdXRlKCk7XG4gIH1cbn1cbiIsImltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICcuLi9PYnNlcnZhYmxlJztcbmltcG9ydCB7IGlubmVyRnJvbSB9IGZyb20gJy4vaW5uZXJGcm9tJztcbmV4cG9ydCBmdW5jdGlvbiBkZWZlcihvYnNlcnZhYmxlRmFjdG9yeSkge1xuICByZXR1cm4gbmV3IE9ic2VydmFibGUoc3Vic2NyaWJlciA9PiB7XG4gICAgaW5uZXJGcm9tKG9ic2VydmFibGVGYWN0b3J5KCkpLnN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgfSk7XG59XG4iLCJpbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAnLi4vT2JzZXJ2YWJsZSc7XG5pbXBvcnQgeyBhcmdzQXJnQXJyYXlPck9iamVjdCB9IGZyb20gJy4uL3V0aWwvYXJnc0FyZ0FycmF5T3JPYmplY3QnO1xuaW1wb3J0IHsgaW5uZXJGcm9tIH0gZnJvbSAnLi9pbm5lckZyb20nO1xuaW1wb3J0IHsgcG9wUmVzdWx0U2VsZWN0b3IgfSBmcm9tICcuLi91dGlsL2FyZ3MnO1xuaW1wb3J0IHsgY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyIH0gZnJvbSAnLi4vb3BlcmF0b3JzL09wZXJhdG9yU3Vic2NyaWJlcic7XG5pbXBvcnQgeyBtYXBPbmVPck1hbnlBcmdzIH0gZnJvbSAnLi4vdXRpbC9tYXBPbmVPck1hbnlBcmdzJztcbmltcG9ydCB7IGNyZWF0ZU9iamVjdCB9IGZyb20gJy4uL3V0aWwvY3JlYXRlT2JqZWN0JztcbmV4cG9ydCBmdW5jdGlvbiBmb3JrSm9pbiguLi5hcmdzKSB7XG4gIGNvbnN0IHJlc3VsdFNlbGVjdG9yID0gcG9wUmVzdWx0U2VsZWN0b3IoYXJncyk7XG4gIGNvbnN0IHtcbiAgICBhcmdzOiBzb3VyY2VzLFxuICAgIGtleXNcbiAgfSA9IGFyZ3NBcmdBcnJheU9yT2JqZWN0KGFyZ3MpO1xuICBjb25zdCByZXN1bHQgPSBuZXcgT2JzZXJ2YWJsZShzdWJzY3JpYmVyID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBsZW5ndGhcbiAgICB9ID0gc291cmNlcztcbiAgICBpZiAoIWxlbmd0aCkge1xuICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB2YWx1ZXMgPSBuZXcgQXJyYXkobGVuZ3RoKTtcbiAgICBsZXQgcmVtYWluaW5nQ29tcGxldGlvbnMgPSBsZW5ndGg7XG4gICAgbGV0IHJlbWFpbmluZ0VtaXNzaW9ucyA9IGxlbmd0aDtcbiAgICBmb3IgKGxldCBzb3VyY2VJbmRleCA9IDA7IHNvdXJjZUluZGV4IDwgbGVuZ3RoOyBzb3VyY2VJbmRleCsrKSB7XG4gICAgICBsZXQgaGFzVmFsdWUgPSBmYWxzZTtcbiAgICAgIGlubmVyRnJvbShzb3VyY2VzW3NvdXJjZUluZGV4XSkuc3Vic2NyaWJlKGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCB2YWx1ZSA9PiB7XG4gICAgICAgIGlmICghaGFzVmFsdWUpIHtcbiAgICAgICAgICBoYXNWYWx1ZSA9IHRydWU7XG4gICAgICAgICAgcmVtYWluaW5nRW1pc3Npb25zLS07XG4gICAgICAgIH1cbiAgICAgICAgdmFsdWVzW3NvdXJjZUluZGV4XSA9IHZhbHVlO1xuICAgICAgfSwgKCkgPT4gcmVtYWluaW5nQ29tcGxldGlvbnMtLSwgdW5kZWZpbmVkLCAoKSA9PiB7XG4gICAgICAgIGlmICghcmVtYWluaW5nQ29tcGxldGlvbnMgfHwgIWhhc1ZhbHVlKSB7XG4gICAgICAgICAgaWYgKCFyZW1haW5pbmdFbWlzc2lvbnMpIHtcbiAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChrZXlzID8gY3JlYXRlT2JqZWN0KGtleXMsIHZhbHVlcykgOiB2YWx1ZXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0U2VsZWN0b3IgPyByZXN1bHQucGlwZShtYXBPbmVPck1hbnlBcmdzKHJlc3VsdFNlbGVjdG9yKSkgOiByZXN1bHQ7XG59XG4iLCJpbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAnLi4vT2JzZXJ2YWJsZSc7XG5pbXBvcnQgeyBhc3luYyBhcyBhc3luY1NjaGVkdWxlciB9IGZyb20gJy4uL3NjaGVkdWxlci9hc3luYyc7XG5pbXBvcnQgeyBpc1NjaGVkdWxlciB9IGZyb20gJy4uL3V0aWwvaXNTY2hlZHVsZXInO1xuaW1wb3J0IHsgaXNWYWxpZERhdGUgfSBmcm9tICcuLi91dGlsL2lzRGF0ZSc7XG5leHBvcnQgZnVuY3Rpb24gdGltZXIoZHVlVGltZSA9IDAsIGludGVydmFsT3JTY2hlZHVsZXIsIHNjaGVkdWxlciA9IGFzeW5jU2NoZWR1bGVyKSB7XG4gIGxldCBpbnRlcnZhbER1cmF0aW9uID0gLTE7XG4gIGlmIChpbnRlcnZhbE9yU2NoZWR1bGVyICE9IG51bGwpIHtcbiAgICBpZiAoaXNTY2hlZHVsZXIoaW50ZXJ2YWxPclNjaGVkdWxlcikpIHtcbiAgICAgIHNjaGVkdWxlciA9IGludGVydmFsT3JTY2hlZHVsZXI7XG4gICAgfSBlbHNlIHtcbiAgICAgIGludGVydmFsRHVyYXRpb24gPSBpbnRlcnZhbE9yU2NoZWR1bGVyO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbmV3IE9ic2VydmFibGUoc3Vic2NyaWJlciA9PiB7XG4gICAgbGV0IGR1ZSA9IGlzVmFsaWREYXRlKGR1ZVRpbWUpID8gK2R1ZVRpbWUgLSBzY2hlZHVsZXIubm93KCkgOiBkdWVUaW1lO1xuICAgIGlmIChkdWUgPCAwKSB7XG4gICAgICBkdWUgPSAwO1xuICAgIH1cbiAgICBsZXQgbiA9IDA7XG4gICAgcmV0dXJuIHNjaGVkdWxlci5zY2hlZHVsZShmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoIXN1YnNjcmliZXIuY2xvc2VkKSB7XG4gICAgICAgIHN1YnNjcmliZXIubmV4dChuKyspO1xuICAgICAgICBpZiAoMCA8PSBpbnRlcnZhbER1cmF0aW9uKSB7XG4gICAgICAgICAgdGhpcy5zY2hlZHVsZSh1bmRlZmluZWQsIGludGVydmFsRHVyYXRpb24pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIGR1ZSk7XG4gIH0pO1xufVxuIiwiaW1wb3J0IHsgYXN5bmNTY2hlZHVsZXIgfSBmcm9tICcuLi9zY2hlZHVsZXIvYXN5bmMnO1xuaW1wb3J0IHsgdGltZXIgfSBmcm9tICcuL3RpbWVyJztcbmV4cG9ydCBmdW5jdGlvbiBpbnRlcnZhbChwZXJpb2QgPSAwLCBzY2hlZHVsZXIgPSBhc3luY1NjaGVkdWxlcikge1xuICBpZiAocGVyaW9kIDwgMCkge1xuICAgIHBlcmlvZCA9IDA7XG4gIH1cbiAgcmV0dXJuIHRpbWVyKHBlcmlvZCwgcGVyaW9kLCBzY2hlZHVsZXIpO1xufVxuIiwiaW1wb3J0IHsgbWVyZ2VNYXAgfSBmcm9tICcuL21lcmdlTWFwJztcbmltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tICcuLi91dGlsL2lzRnVuY3Rpb24nO1xuZXhwb3J0IGZ1bmN0aW9uIGNvbmNhdE1hcChwcm9qZWN0LCByZXN1bHRTZWxlY3Rvcikge1xuICByZXR1cm4gaXNGdW5jdGlvbihyZXN1bHRTZWxlY3RvcikgPyBtZXJnZU1hcChwcm9qZWN0LCByZXN1bHRTZWxlY3RvciwgMSkgOiBtZXJnZU1hcChwcm9qZWN0LCAxKTtcbn1cbiIsImltcG9ydCB7IG9wZXJhdGUgfSBmcm9tICcuLi91dGlsL2xpZnQnO1xuaW1wb3J0IHsgY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyIH0gZnJvbSAnLi9PcGVyYXRvclN1YnNjcmliZXInO1xuZXhwb3J0IGZ1bmN0aW9uIGRlZmF1bHRJZkVtcHR5KGRlZmF1bHRWYWx1ZSkge1xuICByZXR1cm4gb3BlcmF0ZSgoc291cmNlLCBzdWJzY3JpYmVyKSA9PiB7XG4gICAgbGV0IGhhc1ZhbHVlID0gZmFsc2U7XG4gICAgc291cmNlLnN1YnNjcmliZShjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgdmFsdWUgPT4ge1xuICAgICAgaGFzVmFsdWUgPSB0cnVlO1xuICAgICAgc3Vic2NyaWJlci5uZXh0KHZhbHVlKTtcbiAgICB9LCAoKSA9PiB7XG4gICAgICBpZiAoIWhhc1ZhbHVlKSB7XG4gICAgICAgIHN1YnNjcmliZXIubmV4dChkZWZhdWx0VmFsdWUpO1xuICAgICAgfVxuICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgIH0pKTtcbiAgfSk7XG59XG4iLCJpbXBvcnQgeyBpZGVudGl0eSB9IGZyb20gJy4uL3V0aWwvaWRlbnRpdHknO1xuaW1wb3J0IHsgb3BlcmF0ZSB9IGZyb20gJy4uL3V0aWwvbGlmdCc7XG5pbXBvcnQgeyBjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIgfSBmcm9tICcuL09wZXJhdG9yU3Vic2NyaWJlcic7XG5leHBvcnQgZnVuY3Rpb24gZGlzdGluY3RVbnRpbENoYW5nZWQoY29tcGFyYXRvciwga2V5U2VsZWN0b3IgPSBpZGVudGl0eSkge1xuICBjb21wYXJhdG9yID0gY29tcGFyYXRvciAhPT0gbnVsbCAmJiBjb21wYXJhdG9yICE9PSB2b2lkIDAgPyBjb21wYXJhdG9yIDogZGVmYXVsdENvbXBhcmU7XG4gIHJldHVybiBvcGVyYXRlKChzb3VyY2UsIHN1YnNjcmliZXIpID0+IHtcbiAgICBsZXQgcHJldmlvdXNLZXk7XG4gICAgbGV0IGZpcnN0ID0gdHJ1ZTtcbiAgICBzb3VyY2Uuc3Vic2NyaWJlKGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCB2YWx1ZSA9PiB7XG4gICAgICBjb25zdCBjdXJyZW50S2V5ID0ga2V5U2VsZWN0b3IodmFsdWUpO1xuICAgICAgaWYgKGZpcnN0IHx8ICFjb21wYXJhdG9yKHByZXZpb3VzS2V5LCBjdXJyZW50S2V5KSkge1xuICAgICAgICBmaXJzdCA9IGZhbHNlO1xuICAgICAgICBwcmV2aW91c0tleSA9IGN1cnJlbnRLZXk7XG4gICAgICAgIHN1YnNjcmliZXIubmV4dCh2YWx1ZSk7XG4gICAgICB9XG4gICAgfSkpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIGRlZmF1bHRDb21wYXJlKGEsIGIpIHtcbiAgcmV0dXJuIGEgPT09IGI7XG59XG4iLCJpbXBvcnQgeyBFbXB0eUVycm9yIH0gZnJvbSAnLi4vdXRpbC9FbXB0eUVycm9yJztcbmltcG9ydCB7IG9wZXJhdGUgfSBmcm9tICcuLi91dGlsL2xpZnQnO1xuaW1wb3J0IHsgY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyIH0gZnJvbSAnLi9PcGVyYXRvclN1YnNjcmliZXInO1xuZXhwb3J0IGZ1bmN0aW9uIHRocm93SWZFbXB0eShlcnJvckZhY3RvcnkgPSBkZWZhdWx0RXJyb3JGYWN0b3J5KSB7XG4gIHJldHVybiBvcGVyYXRlKChzb3VyY2UsIHN1YnNjcmliZXIpID0+IHtcbiAgICBsZXQgaGFzVmFsdWUgPSBmYWxzZTtcbiAgICBzb3VyY2Uuc3Vic2NyaWJlKGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCB2YWx1ZSA9PiB7XG4gICAgICBoYXNWYWx1ZSA9IHRydWU7XG4gICAgICBzdWJzY3JpYmVyLm5leHQodmFsdWUpO1xuICAgIH0sICgpID0+IGhhc1ZhbHVlID8gc3Vic2NyaWJlci5jb21wbGV0ZSgpIDogc3Vic2NyaWJlci5lcnJvcihlcnJvckZhY3RvcnkoKSkpKTtcbiAgfSk7XG59XG5mdW5jdGlvbiBkZWZhdWx0RXJyb3JGYWN0b3J5KCkge1xuICByZXR1cm4gbmV3IEVtcHR5RXJyb3IoKTtcbn1cbiIsImltcG9ydCB7IEVtcHR5RXJyb3IgfSBmcm9tICcuLi91dGlsL0VtcHR5RXJyb3InO1xuaW1wb3J0IHsgZmlsdGVyIH0gZnJvbSAnLi9maWx0ZXInO1xuaW1wb3J0IHsgdGFrZSB9IGZyb20gJy4vdGFrZSc7XG5pbXBvcnQgeyBkZWZhdWx0SWZFbXB0eSB9IGZyb20gJy4vZGVmYXVsdElmRW1wdHknO1xuaW1wb3J0IHsgdGhyb3dJZkVtcHR5IH0gZnJvbSAnLi90aHJvd0lmRW1wdHknO1xuaW1wb3J0IHsgaWRlbnRpdHkgfSBmcm9tICcuLi91dGlsL2lkZW50aXR5JztcbmV4cG9ydCBmdW5jdGlvbiBmaXJzdChwcmVkaWNhdGUsIGRlZmF1bHRWYWx1ZSkge1xuICBjb25zdCBoYXNEZWZhdWx0VmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID49IDI7XG4gIHJldHVybiBzb3VyY2UgPT4gc291cmNlLnBpcGUocHJlZGljYXRlID8gZmlsdGVyKCh2LCBpKSA9PiBwcmVkaWNhdGUodiwgaSwgc291cmNlKSkgOiBpZGVudGl0eSwgdGFrZSgxKSwgaGFzRGVmYXVsdFZhbHVlID8gZGVmYXVsdElmRW1wdHkoZGVmYXVsdFZhbHVlKSA6IHRocm93SWZFbXB0eSgoKSA9PiBuZXcgRW1wdHlFcnJvcigpKSk7XG59XG4iLCJpbXBvcnQgeyBFTVBUWSB9IGZyb20gJy4uL29ic2VydmFibGUvZW1wdHknO1xuaW1wb3J0IHsgb3BlcmF0ZSB9IGZyb20gJy4uL3V0aWwvbGlmdCc7XG5pbXBvcnQgeyBjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIgfSBmcm9tICcuL09wZXJhdG9yU3Vic2NyaWJlcic7XG5leHBvcnQgZnVuY3Rpb24gdGFrZUxhc3QoY291bnQpIHtcbiAgcmV0dXJuIGNvdW50IDw9IDAgPyAoKSA9PiBFTVBUWSA6IG9wZXJhdGUoKHNvdXJjZSwgc3Vic2NyaWJlcikgPT4ge1xuICAgIGxldCBidWZmZXIgPSBbXTtcbiAgICBzb3VyY2Uuc3Vic2NyaWJlKGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCB2YWx1ZSA9PiB7XG4gICAgICBidWZmZXIucHVzaCh2YWx1ZSk7XG4gICAgICBjb3VudCA8IGJ1ZmZlci5sZW5ndGggJiYgYnVmZmVyLnNoaWZ0KCk7XG4gICAgfSwgKCkgPT4ge1xuICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiBidWZmZXIpIHtcbiAgICAgICAgc3Vic2NyaWJlci5uZXh0KHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICB9LCB1bmRlZmluZWQsICgpID0+IHtcbiAgICAgIGJ1ZmZlciA9IG51bGw7XG4gICAgfSkpO1xuICB9KTtcbn1cbiIsImltcG9ydCB7IGlubmVyRnJvbSB9IGZyb20gJy4uL29ic2VydmFibGUvaW5uZXJGcm9tJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICcuLi9TdWJqZWN0JztcbmltcG9ydCB7IFNhZmVTdWJzY3JpYmVyIH0gZnJvbSAnLi4vU3Vic2NyaWJlcic7XG5pbXBvcnQgeyBvcGVyYXRlIH0gZnJvbSAnLi4vdXRpbC9saWZ0JztcbmV4cG9ydCBmdW5jdGlvbiBzaGFyZShvcHRpb25zID0ge30pIHtcbiAgY29uc3Qge1xuICAgIGNvbm5lY3RvciA9ICgpID0+IG5ldyBTdWJqZWN0KCksXG4gICAgcmVzZXRPbkVycm9yID0gdHJ1ZSxcbiAgICByZXNldE9uQ29tcGxldGUgPSB0cnVlLFxuICAgIHJlc2V0T25SZWZDb3VudFplcm8gPSB0cnVlXG4gIH0gPSBvcHRpb25zO1xuICByZXR1cm4gd3JhcHBlclNvdXJjZSA9PiB7XG4gICAgbGV0IGNvbm5lY3Rpb247XG4gICAgbGV0IHJlc2V0Q29ubmVjdGlvbjtcbiAgICBsZXQgc3ViamVjdDtcbiAgICBsZXQgcmVmQ291bnQgPSAwO1xuICAgIGxldCBoYXNDb21wbGV0ZWQgPSBmYWxzZTtcbiAgICBsZXQgaGFzRXJyb3JlZCA9IGZhbHNlO1xuICAgIGNvbnN0IGNhbmNlbFJlc2V0ID0gKCkgPT4ge1xuICAgICAgcmVzZXRDb25uZWN0aW9uID09PSBudWxsIHx8IHJlc2V0Q29ubmVjdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogcmVzZXRDb25uZWN0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICByZXNldENvbm5lY3Rpb24gPSB1bmRlZmluZWQ7XG4gICAgfTtcbiAgICBjb25zdCByZXNldCA9ICgpID0+IHtcbiAgICAgIGNhbmNlbFJlc2V0KCk7XG4gICAgICBjb25uZWN0aW9uID0gc3ViamVjdCA9IHVuZGVmaW5lZDtcbiAgICAgIGhhc0NvbXBsZXRlZCA9IGhhc0Vycm9yZWQgPSBmYWxzZTtcbiAgICB9O1xuICAgIGNvbnN0IHJlc2V0QW5kVW5zdWJzY3JpYmUgPSAoKSA9PiB7XG4gICAgICBjb25zdCBjb25uID0gY29ubmVjdGlvbjtcbiAgICAgIHJlc2V0KCk7XG4gICAgICBjb25uID09PSBudWxsIHx8IGNvbm4gPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNvbm4udW5zdWJzY3JpYmUoKTtcbiAgICB9O1xuICAgIHJldHVybiBvcGVyYXRlKChzb3VyY2UsIHN1YnNjcmliZXIpID0+IHtcbiAgICAgIHJlZkNvdW50Kys7XG4gICAgICBpZiAoIWhhc0Vycm9yZWQgJiYgIWhhc0NvbXBsZXRlZCkge1xuICAgICAgICBjYW5jZWxSZXNldCgpO1xuICAgICAgfVxuICAgICAgY29uc3QgZGVzdCA9IHN1YmplY3QgPSBzdWJqZWN0ICE9PSBudWxsICYmIHN1YmplY3QgIT09IHZvaWQgMCA/IHN1YmplY3QgOiBjb25uZWN0b3IoKTtcbiAgICAgIHN1YnNjcmliZXIuYWRkKCgpID0+IHtcbiAgICAgICAgcmVmQ291bnQtLTtcbiAgICAgICAgaWYgKHJlZkNvdW50ID09PSAwICYmICFoYXNFcnJvcmVkICYmICFoYXNDb21wbGV0ZWQpIHtcbiAgICAgICAgICByZXNldENvbm5lY3Rpb24gPSBoYW5kbGVSZXNldChyZXNldEFuZFVuc3Vic2NyaWJlLCByZXNldE9uUmVmQ291bnRaZXJvKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBkZXN0LnN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICAgIGlmICghY29ubmVjdGlvbiAmJiByZWZDb3VudCA+IDApIHtcbiAgICAgICAgY29ubmVjdGlvbiA9IG5ldyBTYWZlU3Vic2NyaWJlcih7XG4gICAgICAgICAgbmV4dDogdmFsdWUgPT4gZGVzdC5uZXh0KHZhbHVlKSxcbiAgICAgICAgICBlcnJvcjogZXJyID0+IHtcbiAgICAgICAgICAgIGhhc0Vycm9yZWQgPSB0cnVlO1xuICAgICAgICAgICAgY2FuY2VsUmVzZXQoKTtcbiAgICAgICAgICAgIHJlc2V0Q29ubmVjdGlvbiA9IGhhbmRsZVJlc2V0KHJlc2V0LCByZXNldE9uRXJyb3IsIGVycik7XG4gICAgICAgICAgICBkZXN0LmVycm9yKGVycik7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBjb21wbGV0ZTogKCkgPT4ge1xuICAgICAgICAgICAgaGFzQ29tcGxldGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGNhbmNlbFJlc2V0KCk7XG4gICAgICAgICAgICByZXNldENvbm5lY3Rpb24gPSBoYW5kbGVSZXNldChyZXNldCwgcmVzZXRPbkNvbXBsZXRlKTtcbiAgICAgICAgICAgIGRlc3QuY29tcGxldGUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBpbm5lckZyb20oc291cmNlKS5zdWJzY3JpYmUoY29ubmVjdGlvbik7XG4gICAgICB9XG4gICAgfSkod3JhcHBlclNvdXJjZSk7XG4gIH07XG59XG5mdW5jdGlvbiBoYW5kbGVSZXNldChyZXNldCwgb24sIC4uLmFyZ3MpIHtcbiAgaWYgKG9uID09PSB0cnVlKSB7XG4gICAgcmVzZXQoKTtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKG9uID09PSBmYWxzZSkge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBvblN1YnNjcmliZXIgPSBuZXcgU2FmZVN1YnNjcmliZXIoe1xuICAgIG5leHQ6ICgpID0+IHtcbiAgICAgIG9uU3Vic2NyaWJlci51bnN1YnNjcmliZSgpO1xuICAgICAgcmVzZXQoKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gaW5uZXJGcm9tKG9uKC4uLmFyZ3MpKS5zdWJzY3JpYmUob25TdWJzY3JpYmVyKTtcbn1cbiIsImltcG9ydCB7IFJlcGxheVN1YmplY3QgfSBmcm9tICcuLi9SZXBsYXlTdWJqZWN0JztcbmltcG9ydCB7IHNoYXJlIH0gZnJvbSAnLi9zaGFyZSc7XG5leHBvcnQgZnVuY3Rpb24gc2hhcmVSZXBsYXkoY29uZmlnT3JCdWZmZXJTaXplLCB3aW5kb3dUaW1lLCBzY2hlZHVsZXIpIHtcbiAgbGV0IGJ1ZmZlclNpemU7XG4gIGxldCByZWZDb3VudCA9IGZhbHNlO1xuICBpZiAoY29uZmlnT3JCdWZmZXJTaXplICYmIHR5cGVvZiBjb25maWdPckJ1ZmZlclNpemUgPT09ICdvYmplY3QnKSB7XG4gICAgKHtcbiAgICAgIGJ1ZmZlclNpemUgPSBJbmZpbml0eSxcbiAgICAgIHdpbmRvd1RpbWUgPSBJbmZpbml0eSxcbiAgICAgIHJlZkNvdW50ID0gZmFsc2UsXG4gICAgICBzY2hlZHVsZXJcbiAgICB9ID0gY29uZmlnT3JCdWZmZXJTaXplKTtcbiAgfSBlbHNlIHtcbiAgICBidWZmZXJTaXplID0gY29uZmlnT3JCdWZmZXJTaXplICE9PSBudWxsICYmIGNvbmZpZ09yQnVmZmVyU2l6ZSAhPT0gdm9pZCAwID8gY29uZmlnT3JCdWZmZXJTaXplIDogSW5maW5pdHk7XG4gIH1cbiAgcmV0dXJuIHNoYXJlKHtcbiAgICBjb25uZWN0b3I6ICgpID0+IG5ldyBSZXBsYXlTdWJqZWN0KGJ1ZmZlclNpemUsIHdpbmRvd1RpbWUsIHNjaGVkdWxlciksXG4gICAgcmVzZXRPbkVycm9yOiB0cnVlLFxuICAgIHJlc2V0T25Db21wbGV0ZTogZmFsc2UsXG4gICAgcmVzZXRPblJlZkNvdW50WmVybzogcmVmQ291bnRcbiAgfSk7XG59XG4iLCIvKipcbiAqIEBsaWNlbnNlIEFuZ3VsYXIgdjIxLjIuNFxuICogKGMpIDIwMTAtMjAyNiBHb29nbGUgTExDLiBodHRwczovL2FuZ3VsYXIuZGV2L1xuICogTGljZW5zZTogTUlUXG4gKi9cblxubGV0IGFjdGl2ZUNvbnN1bWVyID0gbnVsbDtcbmxldCBpbk5vdGlmaWNhdGlvblBoYXNlID0gZmFsc2U7XG5sZXQgZXBvY2ggPSAxO1xubGV0IHBvc3RQcm9kdWNlckNyZWF0ZWRGbiA9IG51bGw7XG5jb25zdCBTSUdOQUwgPSAvKiBAX19QVVJFX18gKi9TeW1ib2woJ1NJR05BTCcpO1xuZnVuY3Rpb24gc2V0QWN0aXZlQ29uc3VtZXIoY29uc3VtZXIpIHtcbiAgY29uc3QgcHJldiA9IGFjdGl2ZUNvbnN1bWVyO1xuICBhY3RpdmVDb25zdW1lciA9IGNvbnN1bWVyO1xuICByZXR1cm4gcHJldjtcbn1cbmZ1bmN0aW9uIGdldEFjdGl2ZUNvbnN1bWVyKCkge1xuICByZXR1cm4gYWN0aXZlQ29uc3VtZXI7XG59XG5mdW5jdGlvbiBpc0luTm90aWZpY2F0aW9uUGhhc2UoKSB7XG4gIHJldHVybiBpbk5vdGlmaWNhdGlvblBoYXNlO1xufVxuZnVuY3Rpb24gaXNSZWFjdGl2ZSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWVbU0lHTkFMXSAhPT0gdW5kZWZpbmVkO1xufVxuY29uc3QgUkVBQ1RJVkVfTk9ERSA9IHtcbiAgdmVyc2lvbjogMCxcbiAgbGFzdENsZWFuRXBvY2g6IDAsXG4gIGRpcnR5OiBmYWxzZSxcbiAgcHJvZHVjZXJzOiB1bmRlZmluZWQsXG4gIHByb2R1Y2Vyc1RhaWw6IHVuZGVmaW5lZCxcbiAgY29uc3VtZXJzOiB1bmRlZmluZWQsXG4gIGNvbnN1bWVyc1RhaWw6IHVuZGVmaW5lZCxcbiAgcmVjb21wdXRpbmc6IGZhbHNlLFxuICBjb25zdW1lckFsbG93U2lnbmFsV3JpdGVzOiBmYWxzZSxcbiAgY29uc3VtZXJJc0Fsd2F5c0xpdmU6IGZhbHNlLFxuICBraW5kOiAndW5rbm93bicsXG4gIHByb2R1Y2VyTXVzdFJlY29tcHV0ZTogKCkgPT4gZmFsc2UsXG4gIHByb2R1Y2VyUmVjb21wdXRlVmFsdWU6ICgpID0+IHt9LFxuICBjb25zdW1lck1hcmtlZERpcnR5OiAoKSA9PiB7fSxcbiAgY29uc3VtZXJPblNpZ25hbFJlYWQ6ICgpID0+IHt9XG59O1xuZnVuY3Rpb24gcHJvZHVjZXJBY2Nlc3NlZChub2RlKSB7XG4gIGlmIChpbk5vdGlmaWNhdGlvblBoYXNlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKHR5cGVvZiBuZ0Rldk1vZGUgIT09ICd1bmRlZmluZWQnICYmIG5nRGV2TW9kZSA/IGBBc3NlcnRpb24gZXJyb3I6IHNpZ25hbCByZWFkIGR1cmluZyBub3RpZmljYXRpb24gcGhhc2VgIDogJycpO1xuICB9XG4gIGlmIChhY3RpdmVDb25zdW1lciA9PT0gbnVsbCkge1xuICAgIHJldHVybjtcbiAgfVxuICBhY3RpdmVDb25zdW1lci5jb25zdW1lck9uU2lnbmFsUmVhZChub2RlKTtcbiAgY29uc3QgcHJldlByb2R1Y2VyTGluayA9IGFjdGl2ZUNvbnN1bWVyLnByb2R1Y2Vyc1RhaWw7XG4gIGlmIChwcmV2UHJvZHVjZXJMaW5rICE9PSB1bmRlZmluZWQgJiYgcHJldlByb2R1Y2VyTGluay5wcm9kdWNlciA9PT0gbm9kZSkge1xuICAgIHJldHVybjtcbiAgfVxuICBsZXQgbmV4dFByb2R1Y2VyTGluayA9IHVuZGVmaW5lZDtcbiAgY29uc3QgaXNSZWNvbXB1dGluZyA9IGFjdGl2ZUNvbnN1bWVyLnJlY29tcHV0aW5nO1xuICBpZiAoaXNSZWNvbXB1dGluZykge1xuICAgIG5leHRQcm9kdWNlckxpbmsgPSBwcmV2UHJvZHVjZXJMaW5rICE9PSB1bmRlZmluZWQgPyBwcmV2UHJvZHVjZXJMaW5rLm5leHRQcm9kdWNlciA6IGFjdGl2ZUNvbnN1bWVyLnByb2R1Y2VycztcbiAgICBpZiAobmV4dFByb2R1Y2VyTGluayAhPT0gdW5kZWZpbmVkICYmIG5leHRQcm9kdWNlckxpbmsucHJvZHVjZXIgPT09IG5vZGUpIHtcbiAgICAgIGFjdGl2ZUNvbnN1bWVyLnByb2R1Y2Vyc1RhaWwgPSBuZXh0UHJvZHVjZXJMaW5rO1xuICAgICAgbmV4dFByb2R1Y2VyTGluay5sYXN0UmVhZFZlcnNpb24gPSBub2RlLnZlcnNpb247XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG4gIGNvbnN0IHByZXZDb25zdW1lckxpbmsgPSBub2RlLmNvbnN1bWVyc1RhaWw7XG4gIGlmIChwcmV2Q29uc3VtZXJMaW5rICE9PSB1bmRlZmluZWQgJiYgcHJldkNvbnN1bWVyTGluay5jb25zdW1lciA9PT0gYWN0aXZlQ29uc3VtZXIgJiYgKCFpc1JlY29tcHV0aW5nIHx8IGlzVmFsaWRMaW5rKHByZXZDb25zdW1lckxpbmssIGFjdGl2ZUNvbnN1bWVyKSkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgaXNMaXZlID0gY29uc3VtZXJJc0xpdmUoYWN0aXZlQ29uc3VtZXIpO1xuICBjb25zdCBuZXdMaW5rID0ge1xuICAgIHByb2R1Y2VyOiBub2RlLFxuICAgIGNvbnN1bWVyOiBhY3RpdmVDb25zdW1lcixcbiAgICBuZXh0UHJvZHVjZXI6IG5leHRQcm9kdWNlckxpbmssXG4gICAgcHJldkNvbnN1bWVyOiBwcmV2Q29uc3VtZXJMaW5rLFxuICAgIGxhc3RSZWFkVmVyc2lvbjogbm9kZS52ZXJzaW9uLFxuICAgIG5leHRDb25zdW1lcjogdW5kZWZpbmVkXG4gIH07XG4gIGFjdGl2ZUNvbnN1bWVyLnByb2R1Y2Vyc1RhaWwgPSBuZXdMaW5rO1xuICBpZiAocHJldlByb2R1Y2VyTGluayAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcHJldlByb2R1Y2VyTGluay5uZXh0UHJvZHVjZXIgPSBuZXdMaW5rO1xuICB9IGVsc2Uge1xuICAgIGFjdGl2ZUNvbnN1bWVyLnByb2R1Y2VycyA9IG5ld0xpbms7XG4gIH1cbiAgaWYgKGlzTGl2ZSkge1xuICAgIHByb2R1Y2VyQWRkTGl2ZUNvbnN1bWVyKG5vZGUsIG5ld0xpbmspO1xuICB9XG59XG5mdW5jdGlvbiBwcm9kdWNlckluY3JlbWVudEVwb2NoKCkge1xuICBlcG9jaCsrO1xufVxuZnVuY3Rpb24gcHJvZHVjZXJVcGRhdGVWYWx1ZVZlcnNpb24obm9kZSkge1xuICBpZiAoY29uc3VtZXJJc0xpdmUobm9kZSkgJiYgIW5vZGUuZGlydHkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKCFub2RlLmRpcnR5ICYmIG5vZGUubGFzdENsZWFuRXBvY2ggPT09IGVwb2NoKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmICghbm9kZS5wcm9kdWNlck11c3RSZWNvbXB1dGUobm9kZSkgJiYgIWNvbnN1bWVyUG9sbFByb2R1Y2Vyc0ZvckNoYW5nZShub2RlKSkge1xuICAgIHByb2R1Y2VyTWFya0NsZWFuKG5vZGUpO1xuICAgIHJldHVybjtcbiAgfVxuICBub2RlLnByb2R1Y2VyUmVjb21wdXRlVmFsdWUobm9kZSk7XG4gIHByb2R1Y2VyTWFya0NsZWFuKG5vZGUpO1xufVxuZnVuY3Rpb24gcHJvZHVjZXJOb3RpZnlDb25zdW1lcnMobm9kZSkge1xuICBpZiAobm9kZS5jb25zdW1lcnMgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBwcmV2ID0gaW5Ob3RpZmljYXRpb25QaGFzZTtcbiAgaW5Ob3RpZmljYXRpb25QaGFzZSA9IHRydWU7XG4gIHRyeSB7XG4gICAgZm9yIChsZXQgbGluayA9IG5vZGUuY29uc3VtZXJzOyBsaW5rICE9PSB1bmRlZmluZWQ7IGxpbmsgPSBsaW5rLm5leHRDb25zdW1lcikge1xuICAgICAgY29uc3QgY29uc3VtZXIgPSBsaW5rLmNvbnN1bWVyO1xuICAgICAgaWYgKCFjb25zdW1lci5kaXJ0eSkge1xuICAgICAgICBjb25zdW1lck1hcmtEaXJ0eShjb25zdW1lcik7XG4gICAgICB9XG4gICAgfVxuICB9IGZpbmFsbHkge1xuICAgIGluTm90aWZpY2F0aW9uUGhhc2UgPSBwcmV2O1xuICB9XG59XG5mdW5jdGlvbiBwcm9kdWNlclVwZGF0ZXNBbGxvd2VkKCkge1xuICByZXR1cm4gYWN0aXZlQ29uc3VtZXI/LmNvbnN1bWVyQWxsb3dTaWduYWxXcml0ZXMgIT09IGZhbHNlO1xufVxuZnVuY3Rpb24gY29uc3VtZXJNYXJrRGlydHkobm9kZSkge1xuICBub2RlLmRpcnR5ID0gdHJ1ZTtcbiAgcHJvZHVjZXJOb3RpZnlDb25zdW1lcnMobm9kZSk7XG4gIG5vZGUuY29uc3VtZXJNYXJrZWREaXJ0eT8uKG5vZGUpO1xufVxuZnVuY3Rpb24gcHJvZHVjZXJNYXJrQ2xlYW4obm9kZSkge1xuICBub2RlLmRpcnR5ID0gZmFsc2U7XG4gIG5vZGUubGFzdENsZWFuRXBvY2ggPSBlcG9jaDtcbn1cbmZ1bmN0aW9uIGNvbnN1bWVyQmVmb3JlQ29tcHV0YXRpb24obm9kZSkge1xuICBpZiAobm9kZSkgcmVzZXRDb25zdW1lckJlZm9yZUNvbXB1dGF0aW9uKG5vZGUpO1xuICByZXR1cm4gc2V0QWN0aXZlQ29uc3VtZXIobm9kZSk7XG59XG5mdW5jdGlvbiByZXNldENvbnN1bWVyQmVmb3JlQ29tcHV0YXRpb24obm9kZSkge1xuICBub2RlLnByb2R1Y2Vyc1RhaWwgPSB1bmRlZmluZWQ7XG4gIG5vZGUucmVjb21wdXRpbmcgPSB0cnVlO1xufVxuZnVuY3Rpb24gY29uc3VtZXJBZnRlckNvbXB1dGF0aW9uKG5vZGUsIHByZXZDb25zdW1lcikge1xuICBzZXRBY3RpdmVDb25zdW1lcihwcmV2Q29uc3VtZXIpO1xuICBpZiAobm9kZSkgZmluYWxpemVDb25zdW1lckFmdGVyQ29tcHV0YXRpb24obm9kZSk7XG59XG5mdW5jdGlvbiBmaW5hbGl6ZUNvbnN1bWVyQWZ0ZXJDb21wdXRhdGlvbihub2RlKSB7XG4gIG5vZGUucmVjb21wdXRpbmcgPSBmYWxzZTtcbiAgY29uc3QgcHJvZHVjZXJzVGFpbCA9IG5vZGUucHJvZHVjZXJzVGFpbDtcbiAgbGV0IHRvUmVtb3ZlID0gcHJvZHVjZXJzVGFpbCAhPT0gdW5kZWZpbmVkID8gcHJvZHVjZXJzVGFpbC5uZXh0UHJvZHVjZXIgOiBub2RlLnByb2R1Y2VycztcbiAgaWYgKHRvUmVtb3ZlICE9PSB1bmRlZmluZWQpIHtcbiAgICBpZiAoY29uc3VtZXJJc0xpdmUobm9kZSkpIHtcbiAgICAgIGRvIHtcbiAgICAgICAgdG9SZW1vdmUgPSBwcm9kdWNlclJlbW92ZUxpdmVDb25zdW1lckxpbmsodG9SZW1vdmUpO1xuICAgICAgfSB3aGlsZSAodG9SZW1vdmUgIT09IHVuZGVmaW5lZCk7XG4gICAgfVxuICAgIGlmIChwcm9kdWNlcnNUYWlsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHByb2R1Y2Vyc1RhaWwubmV4dFByb2R1Y2VyID0gdW5kZWZpbmVkO1xuICAgIH0gZWxzZSB7XG4gICAgICBub2RlLnByb2R1Y2VycyA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGNvbnN1bWVyUG9sbFByb2R1Y2Vyc0ZvckNoYW5nZShub2RlKSB7XG4gIGZvciAobGV0IGxpbmsgPSBub2RlLnByb2R1Y2VyczsgbGluayAhPT0gdW5kZWZpbmVkOyBsaW5rID0gbGluay5uZXh0UHJvZHVjZXIpIHtcbiAgICBjb25zdCBwcm9kdWNlciA9IGxpbmsucHJvZHVjZXI7XG4gICAgY29uc3Qgc2VlblZlcnNpb24gPSBsaW5rLmxhc3RSZWFkVmVyc2lvbjtcbiAgICBpZiAoc2VlblZlcnNpb24gIT09IHByb2R1Y2VyLnZlcnNpb24pIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBwcm9kdWNlclVwZGF0ZVZhbHVlVmVyc2lvbihwcm9kdWNlcik7XG4gICAgaWYgKHNlZW5WZXJzaW9uICE9PSBwcm9kdWNlci52ZXJzaW9uKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gY29uc3VtZXJEZXN0cm95KG5vZGUpIHtcbiAgaWYgKGNvbnN1bWVySXNMaXZlKG5vZGUpKSB7XG4gICAgbGV0IGxpbmsgPSBub2RlLnByb2R1Y2VycztcbiAgICB3aGlsZSAobGluayAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBsaW5rID0gcHJvZHVjZXJSZW1vdmVMaXZlQ29uc3VtZXJMaW5rKGxpbmspO1xuICAgIH1cbiAgfVxuICBub2RlLnByb2R1Y2VycyA9IHVuZGVmaW5lZDtcbiAgbm9kZS5wcm9kdWNlcnNUYWlsID0gdW5kZWZpbmVkO1xuICBub2RlLmNvbnN1bWVycyA9IHVuZGVmaW5lZDtcbiAgbm9kZS5jb25zdW1lcnNUYWlsID0gdW5kZWZpbmVkO1xufVxuZnVuY3Rpb24gcHJvZHVjZXJBZGRMaXZlQ29uc3VtZXIobm9kZSwgbGluaykge1xuICBjb25zdCBjb25zdW1lcnNUYWlsID0gbm9kZS5jb25zdW1lcnNUYWlsO1xuICBjb25zdCB3YXNMaXZlID0gY29uc3VtZXJJc0xpdmUobm9kZSk7XG4gIGlmIChjb25zdW1lcnNUYWlsICE9PSB1bmRlZmluZWQpIHtcbiAgICBsaW5rLm5leHRDb25zdW1lciA9IGNvbnN1bWVyc1RhaWwubmV4dENvbnN1bWVyO1xuICAgIGNvbnN1bWVyc1RhaWwubmV4dENvbnN1bWVyID0gbGluaztcbiAgfSBlbHNlIHtcbiAgICBsaW5rLm5leHRDb25zdW1lciA9IHVuZGVmaW5lZDtcbiAgICBub2RlLmNvbnN1bWVycyA9IGxpbms7XG4gIH1cbiAgbGluay5wcmV2Q29uc3VtZXIgPSBjb25zdW1lcnNUYWlsO1xuICBub2RlLmNvbnN1bWVyc1RhaWwgPSBsaW5rO1xuICBpZiAoIXdhc0xpdmUpIHtcbiAgICBmb3IgKGxldCBsaW5rID0gbm9kZS5wcm9kdWNlcnM7IGxpbmsgIT09IHVuZGVmaW5lZDsgbGluayA9IGxpbmsubmV4dFByb2R1Y2VyKSB7XG4gICAgICBwcm9kdWNlckFkZExpdmVDb25zdW1lcihsaW5rLnByb2R1Y2VyLCBsaW5rKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIHByb2R1Y2VyUmVtb3ZlTGl2ZUNvbnN1bWVyTGluayhsaW5rKSB7XG4gIGNvbnN0IHByb2R1Y2VyID0gbGluay5wcm9kdWNlcjtcbiAgY29uc3QgbmV4dFByb2R1Y2VyID0gbGluay5uZXh0UHJvZHVjZXI7XG4gIGNvbnN0IG5leHRDb25zdW1lciA9IGxpbmsubmV4dENvbnN1bWVyO1xuICBjb25zdCBwcmV2Q29uc3VtZXIgPSBsaW5rLnByZXZDb25zdW1lcjtcbiAgbGluay5uZXh0Q29uc3VtZXIgPSB1bmRlZmluZWQ7XG4gIGxpbmsucHJldkNvbnN1bWVyID0gdW5kZWZpbmVkO1xuICBpZiAobmV4dENvbnN1bWVyICE9PSB1bmRlZmluZWQpIHtcbiAgICBuZXh0Q29uc3VtZXIucHJldkNvbnN1bWVyID0gcHJldkNvbnN1bWVyO1xuICB9IGVsc2Uge1xuICAgIHByb2R1Y2VyLmNvbnN1bWVyc1RhaWwgPSBwcmV2Q29uc3VtZXI7XG4gIH1cbiAgaWYgKHByZXZDb25zdW1lciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcHJldkNvbnN1bWVyLm5leHRDb25zdW1lciA9IG5leHRDb25zdW1lcjtcbiAgfSBlbHNlIHtcbiAgICBwcm9kdWNlci5jb25zdW1lcnMgPSBuZXh0Q29uc3VtZXI7XG4gICAgaWYgKCFjb25zdW1lcklzTGl2ZShwcm9kdWNlcikpIHtcbiAgICAgIGxldCBwcm9kdWNlckxpbmsgPSBwcm9kdWNlci5wcm9kdWNlcnM7XG4gICAgICB3aGlsZSAocHJvZHVjZXJMaW5rICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcHJvZHVjZXJMaW5rID0gcHJvZHVjZXJSZW1vdmVMaXZlQ29uc3VtZXJMaW5rKHByb2R1Y2VyTGluayk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBuZXh0UHJvZHVjZXI7XG59XG5mdW5jdGlvbiBjb25zdW1lcklzTGl2ZShub2RlKSB7XG4gIHJldHVybiBub2RlLmNvbnN1bWVySXNBbHdheXNMaXZlIHx8IG5vZGUuY29uc3VtZXJzICE9PSB1bmRlZmluZWQ7XG59XG5mdW5jdGlvbiBydW5Qb3N0UHJvZHVjZXJDcmVhdGVkRm4obm9kZSkge1xuICBwb3N0UHJvZHVjZXJDcmVhdGVkRm4/Lihub2RlKTtcbn1cbmZ1bmN0aW9uIHNldFBvc3RQcm9kdWNlckNyZWF0ZWRGbihmbikge1xuICBjb25zdCBwcmV2ID0gcG9zdFByb2R1Y2VyQ3JlYXRlZEZuO1xuICBwb3N0UHJvZHVjZXJDcmVhdGVkRm4gPSBmbjtcbiAgcmV0dXJuIHByZXY7XG59XG5mdW5jdGlvbiBpc1ZhbGlkTGluayhjaGVja0xpbmssIGNvbnN1bWVyKSB7XG4gIGNvbnN0IHByb2R1Y2Vyc1RhaWwgPSBjb25zdW1lci5wcm9kdWNlcnNUYWlsO1xuICBpZiAocHJvZHVjZXJzVGFpbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgbGV0IGxpbmsgPSBjb25zdW1lci5wcm9kdWNlcnM7XG4gICAgZG8ge1xuICAgICAgaWYgKGxpbmsgPT09IGNoZWNrTGluaykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChsaW5rID09PSBwcm9kdWNlcnNUYWlsKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgbGluayA9IGxpbmsubmV4dFByb2R1Y2VyO1xuICAgIH0gd2hpbGUgKGxpbmsgIT09IHVuZGVmaW5lZCk7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gZGVmYXVsdEVxdWFscyhhLCBiKSB7XG4gIHJldHVybiBPYmplY3QuaXMoYSwgYik7XG59XG5mdW5jdGlvbiBjcmVhdGVDb21wdXRlZChjb21wdXRhdGlvbiwgZXF1YWwpIHtcbiAgY29uc3Qgbm9kZSA9IE9iamVjdC5jcmVhdGUoQ09NUFVURURfTk9ERSk7XG4gIG5vZGUuY29tcHV0YXRpb24gPSBjb21wdXRhdGlvbjtcbiAgaWYgKGVxdWFsICE9PSB1bmRlZmluZWQpIHtcbiAgICBub2RlLmVxdWFsID0gZXF1YWw7XG4gIH1cbiAgY29uc3QgY29tcHV0ZWQgPSAoKSA9PiB7XG4gICAgcHJvZHVjZXJVcGRhdGVWYWx1ZVZlcnNpb24obm9kZSk7XG4gICAgcHJvZHVjZXJBY2Nlc3NlZChub2RlKTtcbiAgICBpZiAobm9kZS52YWx1ZSA9PT0gRVJST1JFRCkge1xuICAgICAgdGhyb3cgbm9kZS5lcnJvcjtcbiAgICB9XG4gICAgcmV0dXJuIG5vZGUudmFsdWU7XG4gIH07XG4gIGNvbXB1dGVkW1NJR05BTF0gPSBub2RlO1xuICBpZiAodHlwZW9mIG5nRGV2TW9kZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbmdEZXZNb2RlKSB7XG4gICAgY29tcHV0ZWQudG9TdHJpbmcgPSAoKSA9PiBgW0NvbXB1dGVkJHtub2RlLmRlYnVnTmFtZSA/ICcgKCcgKyBub2RlLmRlYnVnTmFtZSArICcpJyA6ICcnfTogJHtTdHJpbmcobm9kZS52YWx1ZSl9XWA7XG4gIH1cbiAgcnVuUG9zdFByb2R1Y2VyQ3JlYXRlZEZuKG5vZGUpO1xuICByZXR1cm4gY29tcHV0ZWQ7XG59XG5jb25zdCBVTlNFVCA9IC8qIEBfX1BVUkVfXyAqL1N5bWJvbCgnVU5TRVQnKTtcbmNvbnN0IENPTVBVVElORyA9IC8qIEBfX1BVUkVfXyAqL1N5bWJvbCgnQ09NUFVUSU5HJyk7XG5jb25zdCBFUlJPUkVEID0gLyogQF9fUFVSRV9fICovU3ltYm9sKCdFUlJPUkVEJyk7XG5jb25zdCBDT01QVVRFRF9OT0RFID0gLyogQF9fUFVSRV9fICovKCgpID0+IHtcbiAgcmV0dXJuIHtcbiAgICAuLi5SRUFDVElWRV9OT0RFLFxuICAgIHZhbHVlOiBVTlNFVCxcbiAgICBkaXJ0eTogdHJ1ZSxcbiAgICBlcnJvcjogbnVsbCxcbiAgICBlcXVhbDogZGVmYXVsdEVxdWFscyxcbiAgICBraW5kOiAnY29tcHV0ZWQnLFxuICAgIHByb2R1Y2VyTXVzdFJlY29tcHV0ZShub2RlKSB7XG4gICAgICByZXR1cm4gbm9kZS52YWx1ZSA9PT0gVU5TRVQgfHwgbm9kZS52YWx1ZSA9PT0gQ09NUFVUSU5HO1xuICAgIH0sXG4gICAgcHJvZHVjZXJSZWNvbXB1dGVWYWx1ZShub2RlKSB7XG4gICAgICBpZiAobm9kZS52YWx1ZSA9PT0gQ09NUFVUSU5HKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcih0eXBlb2YgbmdEZXZNb2RlICE9PSAndW5kZWZpbmVkJyAmJiBuZ0Rldk1vZGUgPyAnRGV0ZWN0ZWQgY3ljbGUgaW4gY29tcHV0YXRpb25zLicgOiAnJyk7XG4gICAgICB9XG4gICAgICBjb25zdCBvbGRWYWx1ZSA9IG5vZGUudmFsdWU7XG4gICAgICBub2RlLnZhbHVlID0gQ09NUFVUSU5HO1xuICAgICAgY29uc3QgcHJldkNvbnN1bWVyID0gY29uc3VtZXJCZWZvcmVDb21wdXRhdGlvbihub2RlKTtcbiAgICAgIGxldCBuZXdWYWx1ZTtcbiAgICAgIGxldCB3YXNFcXVhbCA9IGZhbHNlO1xuICAgICAgdHJ5IHtcbiAgICAgICAgbmV3VmFsdWUgPSBub2RlLmNvbXB1dGF0aW9uKCk7XG4gICAgICAgIHNldEFjdGl2ZUNvbnN1bWVyKG51bGwpO1xuICAgICAgICB3YXNFcXVhbCA9IG9sZFZhbHVlICE9PSBVTlNFVCAmJiBvbGRWYWx1ZSAhPT0gRVJST1JFRCAmJiBuZXdWYWx1ZSAhPT0gRVJST1JFRCAmJiBub2RlLmVxdWFsKG9sZFZhbHVlLCBuZXdWYWx1ZSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgbmV3VmFsdWUgPSBFUlJPUkVEO1xuICAgICAgICBub2RlLmVycm9yID0gZXJyO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgY29uc3VtZXJBZnRlckNvbXB1dGF0aW9uKG5vZGUsIHByZXZDb25zdW1lcik7XG4gICAgICB9XG4gICAgICBpZiAod2FzRXF1YWwpIHtcbiAgICAgICAgbm9kZS52YWx1ZSA9IG9sZFZhbHVlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBub2RlLnZhbHVlID0gbmV3VmFsdWU7XG4gICAgICBub2RlLnZlcnNpb24rKztcbiAgICB9XG4gIH07XG59KSgpO1xuZnVuY3Rpb24gZGVmYXVsdFRocm93RXJyb3IoKSB7XG4gIHRocm93IG5ldyBFcnJvcigpO1xufVxubGV0IHRocm93SW52YWxpZFdyaXRlVG9TaWduYWxFcnJvckZuID0gZGVmYXVsdFRocm93RXJyb3I7XG5mdW5jdGlvbiB0aHJvd0ludmFsaWRXcml0ZVRvU2lnbmFsRXJyb3Iobm9kZSkge1xuICB0aHJvd0ludmFsaWRXcml0ZVRvU2lnbmFsRXJyb3JGbihub2RlKTtcbn1cbmZ1bmN0aW9uIHNldFRocm93SW52YWxpZFdyaXRlVG9TaWduYWxFcnJvcihmbikge1xuICB0aHJvd0ludmFsaWRXcml0ZVRvU2lnbmFsRXJyb3JGbiA9IGZuO1xufVxubGV0IHBvc3RTaWduYWxTZXRGbiA9IG51bGw7XG5mdW5jdGlvbiBjcmVhdGVTaWduYWwoaW5pdGlhbFZhbHVlLCBlcXVhbCkge1xuICBjb25zdCBub2RlID0gT2JqZWN0LmNyZWF0ZShTSUdOQUxfTk9ERSk7XG4gIG5vZGUudmFsdWUgPSBpbml0aWFsVmFsdWU7XG4gIGlmIChlcXVhbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgbm9kZS5lcXVhbCA9IGVxdWFsO1xuICB9XG4gIGNvbnN0IGdldHRlciA9ICgpID0+IHNpZ25hbEdldEZuKG5vZGUpO1xuICBnZXR0ZXJbU0lHTkFMXSA9IG5vZGU7XG4gIGlmICh0eXBlb2YgbmdEZXZNb2RlICE9PSAndW5kZWZpbmVkJyAmJiBuZ0Rldk1vZGUpIHtcbiAgICBnZXR0ZXIudG9TdHJpbmcgPSAoKSA9PiBgW1NpZ25hbCR7bm9kZS5kZWJ1Z05hbWUgPyAnICgnICsgbm9kZS5kZWJ1Z05hbWUgKyAnKScgOiAnJ306ICR7U3RyaW5nKG5vZGUudmFsdWUpfV1gO1xuICB9XG4gIHJ1blBvc3RQcm9kdWNlckNyZWF0ZWRGbihub2RlKTtcbiAgY29uc3Qgc2V0ID0gbmV3VmFsdWUgPT4gc2lnbmFsU2V0Rm4obm9kZSwgbmV3VmFsdWUpO1xuICBjb25zdCB1cGRhdGUgPSB1cGRhdGVGbiA9PiBzaWduYWxVcGRhdGVGbihub2RlLCB1cGRhdGVGbik7XG4gIHJldHVybiBbZ2V0dGVyLCBzZXQsIHVwZGF0ZV07XG59XG5mdW5jdGlvbiBzZXRQb3N0U2lnbmFsU2V0Rm4oZm4pIHtcbiAgY29uc3QgcHJldiA9IHBvc3RTaWduYWxTZXRGbjtcbiAgcG9zdFNpZ25hbFNldEZuID0gZm47XG4gIHJldHVybiBwcmV2O1xufVxuZnVuY3Rpb24gc2lnbmFsR2V0Rm4obm9kZSkge1xuICBwcm9kdWNlckFjY2Vzc2VkKG5vZGUpO1xuICByZXR1cm4gbm9kZS52YWx1ZTtcbn1cbmZ1bmN0aW9uIHNpZ25hbFNldEZuKG5vZGUsIG5ld1ZhbHVlKSB7XG4gIGlmICghcHJvZHVjZXJVcGRhdGVzQWxsb3dlZCgpKSB7XG4gICAgdGhyb3dJbnZhbGlkV3JpdGVUb1NpZ25hbEVycm9yKG5vZGUpO1xuICB9XG4gIGlmICghbm9kZS5lcXVhbChub2RlLnZhbHVlLCBuZXdWYWx1ZSkpIHtcbiAgICBub2RlLnZhbHVlID0gbmV3VmFsdWU7XG4gICAgc2lnbmFsVmFsdWVDaGFuZ2VkKG5vZGUpO1xuICB9XG59XG5mdW5jdGlvbiBzaWduYWxVcGRhdGVGbihub2RlLCB1cGRhdGVyKSB7XG4gIGlmICghcHJvZHVjZXJVcGRhdGVzQWxsb3dlZCgpKSB7XG4gICAgdGhyb3dJbnZhbGlkV3JpdGVUb1NpZ25hbEVycm9yKG5vZGUpO1xuICB9XG4gIHNpZ25hbFNldEZuKG5vZGUsIHVwZGF0ZXIobm9kZS52YWx1ZSkpO1xufVxuZnVuY3Rpb24gcnVuUG9zdFNpZ25hbFNldEZuKG5vZGUpIHtcbiAgcG9zdFNpZ25hbFNldEZuPy4obm9kZSk7XG59XG5jb25zdCBTSUdOQUxfTk9ERSA9IC8qIEBfX1BVUkVfXyAqLygoKSA9PiB7XG4gIHJldHVybiB7XG4gICAgLi4uUkVBQ1RJVkVfTk9ERSxcbiAgICBlcXVhbDogZGVmYXVsdEVxdWFscyxcbiAgICB2YWx1ZTogdW5kZWZpbmVkLFxuICAgIGtpbmQ6ICdzaWduYWwnXG4gIH07XG59KSgpO1xuZnVuY3Rpb24gc2lnbmFsVmFsdWVDaGFuZ2VkKG5vZGUpIHtcbiAgbm9kZS52ZXJzaW9uKys7XG4gIHByb2R1Y2VySW5jcmVtZW50RXBvY2goKTtcbiAgcHJvZHVjZXJOb3RpZnlDb25zdW1lcnMobm9kZSk7XG4gIHBvc3RTaWduYWxTZXRGbj8uKG5vZGUpO1xufVxuY29uc3QgQkFTRV9FRkZFQ1RfTk9ERSA9IC8qIEBfX1BVUkVfXyAqLygoKSA9PiAoe1xuICAuLi5SRUFDVElWRV9OT0RFLFxuICBjb25zdW1lcklzQWx3YXlzTGl2ZTogdHJ1ZSxcbiAgY29uc3VtZXJBbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSxcbiAgZGlydHk6IHRydWUsXG4gIGtpbmQ6ICdlZmZlY3QnXG59KSkoKTtcbmZ1bmN0aW9uIHJ1bkVmZmVjdChub2RlKSB7XG4gIG5vZGUuZGlydHkgPSBmYWxzZTtcbiAgaWYgKG5vZGUudmVyc2lvbiA+IDAgJiYgIWNvbnN1bWVyUG9sbFByb2R1Y2Vyc0ZvckNoYW5nZShub2RlKSkge1xuICAgIHJldHVybjtcbiAgfVxuICBub2RlLnZlcnNpb24rKztcbiAgY29uc3QgcHJldk5vZGUgPSBjb25zdW1lckJlZm9yZUNvbXB1dGF0aW9uKG5vZGUpO1xuICB0cnkge1xuICAgIG5vZGUuY2xlYW51cCgpO1xuICAgIG5vZGUuZm4oKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBjb25zdW1lckFmdGVyQ29tcHV0YXRpb24obm9kZSwgcHJldk5vZGUpO1xuICB9XG59XG5leHBvcnQgeyBCQVNFX0VGRkVDVF9OT0RFLCBDT01QVVRJTkcsIEVSUk9SRUQsIFJFQUNUSVZFX05PREUsIFNJR05BTCwgU0lHTkFMX05PREUsIFVOU0VULCBjb25zdW1lckFmdGVyQ29tcHV0YXRpb24sIGNvbnN1bWVyQmVmb3JlQ29tcHV0YXRpb24sIGNvbnN1bWVyRGVzdHJveSwgY29uc3VtZXJNYXJrRGlydHksIGNvbnN1bWVyUG9sbFByb2R1Y2Vyc0ZvckNoYW5nZSwgY3JlYXRlQ29tcHV0ZWQsIGNyZWF0ZVNpZ25hbCwgZGVmYXVsdEVxdWFscywgZmluYWxpemVDb25zdW1lckFmdGVyQ29tcHV0YXRpb24sIGdldEFjdGl2ZUNvbnN1bWVyLCBpc0luTm90aWZpY2F0aW9uUGhhc2UsIGlzUmVhY3RpdmUsIHByb2R1Y2VyQWNjZXNzZWQsIHByb2R1Y2VySW5jcmVtZW50RXBvY2gsIHByb2R1Y2VyTWFya0NsZWFuLCBwcm9kdWNlck5vdGlmeUNvbnN1bWVycywgcHJvZHVjZXJVcGRhdGVWYWx1ZVZlcnNpb24sIHByb2R1Y2VyVXBkYXRlc0FsbG93ZWQsIHJlc2V0Q29uc3VtZXJCZWZvcmVDb21wdXRhdGlvbiwgcnVuRWZmZWN0LCBydW5Qb3N0UHJvZHVjZXJDcmVhdGVkRm4sIHJ1blBvc3RTaWduYWxTZXRGbiwgc2V0QWN0aXZlQ29uc3VtZXIsIHNldFBvc3RQcm9kdWNlckNyZWF0ZWRGbiwgc2V0UG9zdFNpZ25hbFNldEZuLCBzZXRUaHJvd0ludmFsaWRXcml0ZVRvU2lnbmFsRXJyb3IsIHNpZ25hbEdldEZuLCBzaWduYWxTZXRGbiwgc2lnbmFsVXBkYXRlRm4gfTtcbiIsIi8qKlxuICogQGxpY2Vuc2UgQW5ndWxhciB2MjEuMi40XG4gKiAoYykgMjAxMC0yMDI2IEdvb2dsZSBMTEMuIGh0dHBzOi8vYW5ndWxhci5kZXYvXG4gKiBMaWNlbnNlOiBNSVRcbiAqL1xuXG5sZXQgX2N1cnJlbnRJbmplY3RvciA9IHVuZGVmaW5lZDtcbmZ1bmN0aW9uIGdldEN1cnJlbnRJbmplY3RvcigpIHtcbiAgcmV0dXJuIF9jdXJyZW50SW5qZWN0b3I7XG59XG5mdW5jdGlvbiBzZXRDdXJyZW50SW5qZWN0b3IoaW5qZWN0b3IpIHtcbiAgY29uc3QgZm9ybWVyID0gX2N1cnJlbnRJbmplY3RvcjtcbiAgX2N1cnJlbnRJbmplY3RvciA9IGluamVjdG9yO1xuICByZXR1cm4gZm9ybWVyO1xufVxuZnVuY3Rpb24gaW5qZWN0KHRva2VuLCBvcHRpb25zKSB7XG4gIGNvbnN0IGN1cnJlbnRJbmplY3RvciA9IGdldEN1cnJlbnRJbmplY3RvcigpO1xuICBpZiAoIWN1cnJlbnRJbmplY3Rvcikge1xuICAgIHRocm93IG5ldyBFcnJvcignQ3VycmVudCBpbmplY3RvciBpcyBub3Qgc2V0LicpO1xuICB9XG4gIGlmICghdG9rZW4uybVwcm92KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdUb2tlbiBpcyBub3QgYW4gaW5qZWN0YWJsZScpO1xuICB9XG4gIHJldHVybiBjdXJyZW50SW5qZWN0b3IucmV0cmlldmUodG9rZW4sIG9wdGlvbnMpO1xufVxuY29uc3QgTk9UX0ZPVU5EID0gLyojX19QVVJFX18qL1N5bWJvbCgnTm90Rm91bmQnKTtcbmNsYXNzIE5vdEZvdW5kRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIG5hbWUgPSAnybVOb3RGb3VuZCc7XG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKTtcbiAgfVxufVxuZnVuY3Rpb24gaXNOb3RGb3VuZChlKSB7XG4gIHJldHVybiBlID09PSBOT1RfRk9VTkQgfHwgZT8ubmFtZSA9PT0gJ8m1Tm90Rm91bmQnO1xufVxuZXhwb3J0IHsgTk9UX0ZPVU5ELCBOb3RGb3VuZEVycm9yLCBnZXRDdXJyZW50SW5qZWN0b3IsIGluamVjdCwgaXNOb3RGb3VuZCwgc2V0Q3VycmVudEluamVjdG9yIH07XG4iLCIvKipcbiAqIEBsaWNlbnNlIEFuZ3VsYXIgdjIxLjIuNFxuICogKGMpIDIwMTAtMjAyNiBHb29nbGUgTExDLiBodHRwczovL2FuZ3VsYXIuZGV2L1xuICogTGljZW5zZTogTUlUXG4gKi9cblxuaW1wb3J0IHsgU0lHTkFMLCBydW5Qb3N0UHJvZHVjZXJDcmVhdGVkRm4sIHByb2R1Y2VyVXBkYXRlVmFsdWVWZXJzaW9uLCBzaWduYWxTZXRGbiwgcHJvZHVjZXJNYXJrQ2xlYW4sIEVSUk9SRUQsIHNpZ25hbFVwZGF0ZUZuLCBSRUFDVElWRV9OT0RFLCBVTlNFVCwgZGVmYXVsdEVxdWFscywgQ09NUFVUSU5HLCBjb25zdW1lckJlZm9yZUNvbXB1dGF0aW9uLCBjb25zdW1lckFmdGVyQ29tcHV0YXRpb24sIHByb2R1Y2VyQWNjZXNzZWQsIHNldEFjdGl2ZUNvbnN1bWVyIH0gZnJvbSAnLi9fZWZmZWN0LWNodW5rLm1qcyc7XG5mdW5jdGlvbiBjcmVhdGVMaW5rZWRTaWduYWwoc291cmNlRm4sIGNvbXB1dGF0aW9uRm4sIGVxdWFsaXR5Rm4pIHtcbiAgY29uc3Qgbm9kZSA9IE9iamVjdC5jcmVhdGUoTElOS0VEX1NJR05BTF9OT0RFKTtcbiAgbm9kZS5zb3VyY2UgPSBzb3VyY2VGbjtcbiAgbm9kZS5jb21wdXRhdGlvbiA9IGNvbXB1dGF0aW9uRm47XG4gIGlmIChlcXVhbGl0eUZuICE9IHVuZGVmaW5lZCkge1xuICAgIG5vZGUuZXF1YWwgPSBlcXVhbGl0eUZuO1xuICB9XG4gIGNvbnN0IGxpbmtlZFNpZ25hbEdldHRlciA9ICgpID0+IHtcbiAgICBwcm9kdWNlclVwZGF0ZVZhbHVlVmVyc2lvbihub2RlKTtcbiAgICBwcm9kdWNlckFjY2Vzc2VkKG5vZGUpO1xuICAgIGlmIChub2RlLnZhbHVlID09PSBFUlJPUkVEKSB7XG4gICAgICB0aHJvdyBub2RlLmVycm9yO1xuICAgIH1cbiAgICByZXR1cm4gbm9kZS52YWx1ZTtcbiAgfTtcbiAgY29uc3QgZ2V0dGVyID0gbGlua2VkU2lnbmFsR2V0dGVyO1xuICBnZXR0ZXJbU0lHTkFMXSA9IG5vZGU7XG4gIGlmICh0eXBlb2YgbmdEZXZNb2RlICE9PSAndW5kZWZpbmVkJyAmJiBuZ0Rldk1vZGUpIHtcbiAgICBnZXR0ZXIudG9TdHJpbmcgPSAoKSA9PiBgW0xpbmtlZFNpZ25hbCR7bm9kZS5kZWJ1Z05hbWUgPyAnICgnICsgbm9kZS5kZWJ1Z05hbWUgKyAnKScgOiAnJ306ICR7U3RyaW5nKG5vZGUudmFsdWUpfV1gO1xuICB9XG4gIHJ1blBvc3RQcm9kdWNlckNyZWF0ZWRGbihub2RlKTtcbiAgcmV0dXJuIGdldHRlcjtcbn1cbmZ1bmN0aW9uIGxpbmtlZFNpZ25hbFNldEZuKG5vZGUsIG5ld1ZhbHVlKSB7XG4gIHByb2R1Y2VyVXBkYXRlVmFsdWVWZXJzaW9uKG5vZGUpO1xuICBzaWduYWxTZXRGbihub2RlLCBuZXdWYWx1ZSk7XG4gIHByb2R1Y2VyTWFya0NsZWFuKG5vZGUpO1xufVxuZnVuY3Rpb24gbGlua2VkU2lnbmFsVXBkYXRlRm4obm9kZSwgdXBkYXRlcikge1xuICBwcm9kdWNlclVwZGF0ZVZhbHVlVmVyc2lvbihub2RlKTtcbiAgaWYgKG5vZGUudmFsdWUgPT09IEVSUk9SRUQpIHtcbiAgICB0aHJvdyBub2RlLmVycm9yO1xuICB9XG4gIHNpZ25hbFVwZGF0ZUZuKG5vZGUsIHVwZGF0ZXIpO1xuICBwcm9kdWNlck1hcmtDbGVhbihub2RlKTtcbn1cbmNvbnN0IExJTktFRF9TSUdOQUxfTk9ERSA9IC8qIEBfX1BVUkVfXyAqLygoKSA9PiB7XG4gIHJldHVybiB7XG4gICAgLi4uUkVBQ1RJVkVfTk9ERSxcbiAgICB2YWx1ZTogVU5TRVQsXG4gICAgZGlydHk6IHRydWUsXG4gICAgZXJyb3I6IG51bGwsXG4gICAgZXF1YWw6IGRlZmF1bHRFcXVhbHMsXG4gICAga2luZDogJ2xpbmtlZFNpZ25hbCcsXG4gICAgcHJvZHVjZXJNdXN0UmVjb21wdXRlKG5vZGUpIHtcbiAgICAgIHJldHVybiBub2RlLnZhbHVlID09PSBVTlNFVCB8fCBub2RlLnZhbHVlID09PSBDT01QVVRJTkc7XG4gICAgfSxcbiAgICBwcm9kdWNlclJlY29tcHV0ZVZhbHVlKG5vZGUpIHtcbiAgICAgIGlmIChub2RlLnZhbHVlID09PSBDT01QVVRJTkcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKHR5cGVvZiBuZ0Rldk1vZGUgIT09ICd1bmRlZmluZWQnICYmIG5nRGV2TW9kZSA/ICdEZXRlY3RlZCBjeWNsZSBpbiBjb21wdXRhdGlvbnMuJyA6ICcnKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG9sZFZhbHVlID0gbm9kZS52YWx1ZTtcbiAgICAgIG5vZGUudmFsdWUgPSBDT01QVVRJTkc7XG4gICAgICBjb25zdCBwcmV2Q29uc3VtZXIgPSBjb25zdW1lckJlZm9yZUNvbXB1dGF0aW9uKG5vZGUpO1xuICAgICAgbGV0IG5ld1ZhbHVlO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgbmV3U291cmNlVmFsdWUgPSBub2RlLnNvdXJjZSgpO1xuICAgICAgICBjb25zdCBwcmV2ID0gb2xkVmFsdWUgPT09IFVOU0VUIHx8IG9sZFZhbHVlID09PSBFUlJPUkVEID8gdW5kZWZpbmVkIDoge1xuICAgICAgICAgIHNvdXJjZTogbm9kZS5zb3VyY2VWYWx1ZSxcbiAgICAgICAgICB2YWx1ZTogb2xkVmFsdWVcbiAgICAgICAgfTtcbiAgICAgICAgbmV3VmFsdWUgPSBub2RlLmNvbXB1dGF0aW9uKG5ld1NvdXJjZVZhbHVlLCBwcmV2KTtcbiAgICAgICAgbm9kZS5zb3VyY2VWYWx1ZSA9IG5ld1NvdXJjZVZhbHVlO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIG5ld1ZhbHVlID0gRVJST1JFRDtcbiAgICAgICAgbm9kZS5lcnJvciA9IGVycjtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGNvbnN1bWVyQWZ0ZXJDb21wdXRhdGlvbihub2RlLCBwcmV2Q29uc3VtZXIpO1xuICAgICAgfVxuICAgICAgaWYgKG9sZFZhbHVlICE9PSBVTlNFVCAmJiBuZXdWYWx1ZSAhPT0gRVJST1JFRCAmJiBub2RlLmVxdWFsKG9sZFZhbHVlLCBuZXdWYWx1ZSkpIHtcbiAgICAgICAgbm9kZS52YWx1ZSA9IG9sZFZhbHVlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBub2RlLnZhbHVlID0gbmV3VmFsdWU7XG4gICAgICBub2RlLnZlcnNpb24rKztcbiAgICB9XG4gIH07XG59KSgpO1xuZnVuY3Rpb24gdW50cmFja2VkKG5vblJlYWN0aXZlUmVhZHNGbikge1xuICBjb25zdCBwcmV2Q29uc3VtZXIgPSBzZXRBY3RpdmVDb25zdW1lcihudWxsKTtcbiAgdHJ5IHtcbiAgICByZXR1cm4gbm9uUmVhY3RpdmVSZWFkc0ZuKCk7XG4gIH0gZmluYWxseSB7XG4gICAgc2V0QWN0aXZlQ29uc3VtZXIocHJldkNvbnN1bWVyKTtcbiAgfVxufVxuZXhwb3J0IHsgY3JlYXRlTGlua2VkU2lnbmFsLCBsaW5rZWRTaWduYWxTZXRGbiwgbGlua2VkU2lnbmFsVXBkYXRlRm4sIHVudHJhY2tlZCB9O1xuIiwiLyoqXG4gKiBAbGljZW5zZSBBbmd1bGFyIHYyMS4yLjRcbiAqIChjKSAyMDEwLTIwMjYgR29vZ2xlIExMQy4gaHR0cHM6Ly9hbmd1bGFyLmRldi9cbiAqIExpY2Vuc2U6IE1JVFxuICovXG5cbmltcG9ydCB7IGdldEFjdGl2ZUNvbnN1bWVyLCBzZXRBY3RpdmVDb25zdW1lciBhcyBzZXRBY3RpdmVDb25zdW1lciQxLCBjcmVhdGVTaWduYWwsIFNJR05BTCwgY29uc3VtZXJEZXN0cm95LCBCQVNFX0VGRkVDVF9OT0RFLCBpc0luTm90aWZpY2F0aW9uUGhhc2UsIHJ1bkVmZmVjdCB9IGZyb20gJy4vX2VmZmVjdC1jaHVuay5tanMnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGlzTm90Rm91bmQsIGdldEN1cnJlbnRJbmplY3Rvciwgc2V0Q3VycmVudEluamVjdG9yIH0gZnJvbSAnLi9fbm90X2ZvdW5kLWNodW5rLm1qcyc7XG5pbXBvcnQgeyBzZXRBY3RpdmVDb25zdW1lciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcHJpbWl0aXZlcy9zaWduYWxzJztcbmltcG9ydCB7IGlzTm90Rm91bmQgYXMgaXNOb3RGb3VuZCQxIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9wcmltaXRpdmVzL2RpJztcbmNsYXNzIFZlcnNpb24ge1xuICBmdWxsO1xuICBtYWpvcjtcbiAgbWlub3I7XG4gIHBhdGNoO1xuICBjb25zdHJ1Y3RvcihmdWxsKSB7XG4gICAgdGhpcy5mdWxsID0gZnVsbDtcbiAgICBjb25zdCBwYXJ0cyA9IGZ1bGwuc3BsaXQoJy4nKTtcbiAgICB0aGlzLm1ham9yID0gcGFydHNbMF07XG4gICAgdGhpcy5taW5vciA9IHBhcnRzWzFdO1xuICAgIHRoaXMucGF0Y2ggPSBwYXJ0cy5zbGljZSgyKS5qb2luKCcuJyk7XG4gIH1cbn1cbmNvbnN0IFZFUlNJT04gPSAvKiBAX19QVVJFX18gKi9uZXcgVmVyc2lvbignMjEuMi40Jyk7XG5jb25zdCBET0NfUEFHRV9CQVNFX1VSTCA9IC8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICBjb25zdCBmdWxsID0gVkVSU0lPTi5mdWxsO1xuICBjb25zdCBpc1ByZVJlbGVhc2UgPSBmdWxsLmluY2x1ZGVzKCctbmV4dCcpIHx8IGZ1bGwuaW5jbHVkZXMoJy1yYycpIHx8IGZ1bGwgPT09ICcwLjAuMCcgKyAnLVBMQUNFSE9MREVSJztcbiAgY29uc3QgcHJlZml4ID0gaXNQcmVSZWxlYXNlID8gJ25leHQnIDogYHYke1ZFUlNJT04ubWFqb3J9YDtcbiAgcmV0dXJuIGBodHRwczovLyR7cHJlZml4fS5hbmd1bGFyLmRldmA7XG59KSgpO1xuY29uc3QgRVJST1JfREVUQUlMU19QQUdFX0JBU0VfVVJMID0gLyojX19QVVJFX18qLygoKSA9PiB7XG4gIHJldHVybiBgJHtET0NfUEFHRV9CQVNFX1VSTH0vZXJyb3JzYDtcbn0pKCk7XG5jb25zdCBYU1NfU0VDVVJJVFlfVVJMID0gJ2h0dHBzOi8vYW5ndWxhci5kZXYvYmVzdC1wcmFjdGljZXMvc2VjdXJpdHkjcHJldmVudGluZy1jcm9zcy1zaXRlLXNjcmlwdGluZy14c3MnO1xuY2xhc3MgUnVudGltZUVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb2RlO1xuICBjb25zdHJ1Y3Rvcihjb2RlLCBtZXNzYWdlKSB7XG4gICAgc3VwZXIoZm9ybWF0UnVudGltZUVycm9yKGNvZGUsIG1lc3NhZ2UpKTtcbiAgICB0aGlzLmNvZGUgPSBjb2RlO1xuICB9XG59XG5mdW5jdGlvbiBmb3JtYXRSdW50aW1lRXJyb3JDb2RlKGNvZGUpIHtcbiAgcmV0dXJuIGBORzAke01hdGguYWJzKGNvZGUpfWA7XG59XG5mdW5jdGlvbiBmb3JtYXRSdW50aW1lRXJyb3IoY29kZSwgbWVzc2FnZSkge1xuICBjb25zdCBmdWxsQ29kZSA9IGZvcm1hdFJ1bnRpbWVFcnJvckNvZGUoY29kZSk7XG4gIGxldCBlcnJvck1lc3NhZ2UgPSBgJHtmdWxsQ29kZX0ke21lc3NhZ2UgPyAnOiAnICsgbWVzc2FnZSA6ICcnfWA7XG4gIGlmIChuZ0Rldk1vZGUgJiYgY29kZSA8IDApIHtcbiAgICBjb25zdCBhZGRQZXJpb2RTZXBhcmF0b3IgPSAhZXJyb3JNZXNzYWdlLm1hdGNoKC9bLiw7IT9cXG5dJC8pO1xuICAgIGNvbnN0IHNlcGFyYXRvciA9IGFkZFBlcmlvZFNlcGFyYXRvciA/ICcuJyA6ICcnO1xuICAgIGVycm9yTWVzc2FnZSA9IGAke2Vycm9yTWVzc2FnZX0ke3NlcGFyYXRvcn0gRmluZCBtb3JlIGF0ICR7RVJST1JfREVUQUlMU19QQUdFX0JBU0VfVVJMfS8ke2Z1bGxDb2RlfWA7XG4gIH1cbiAgcmV0dXJuIGVycm9yTWVzc2FnZTtcbn1cbmNvbnN0IF9nbG9iYWwgPSBnbG9iYWxUaGlzO1xuZnVuY3Rpb24gbmdEZXZNb2RlUmVzZXRQZXJmQ291bnRlcnMoKSB7XG4gIGNvbnN0IGxvY2F0aW9uU3RyaW5nID0gdHlwZW9mIGxvY2F0aW9uICE9PSAndW5kZWZpbmVkJyA/IGxvY2F0aW9uLnRvU3RyaW5nKCkgOiAnJztcbiAgY29uc3QgbmV3Q291bnRlcnMgPSB7XG4gICAgaHlkcmF0ZWROb2RlczogMCxcbiAgICBoeWRyYXRlZENvbXBvbmVudHM6IDAsXG4gICAgZGVoeWRyYXRlZFZpZXdzUmVtb3ZlZDogMCxcbiAgICBkZWh5ZHJhdGVkVmlld3NDbGVhbnVwUnVuczogMCxcbiAgICBjb21wb25lbnRzU2tpcHBlZEh5ZHJhdGlvbjogMCxcbiAgICBkZWZlckJsb2Nrc1dpdGhJbmNyZW1lbnRhbEh5ZHJhdGlvbjogMFxuICB9O1xuICBjb25zdCBhbGxvd05nRGV2TW9kZVRydWUgPSBsb2NhdGlvblN0cmluZy5pbmRleE9mKCduZ0Rldk1vZGU9ZmFsc2UnKSA9PT0gLTE7XG4gIGlmICghYWxsb3dOZ0Rldk1vZGVUcnVlKSB7XG4gICAgX2dsb2JhbFsnbmdEZXZNb2RlJ10gPSBmYWxzZTtcbiAgfSBlbHNlIHtcbiAgICBpZiAodHlwZW9mIF9nbG9iYWxbJ25nRGV2TW9kZSddICE9PSAnb2JqZWN0Jykge1xuICAgICAgX2dsb2JhbFsnbmdEZXZNb2RlJ10gPSB7fTtcbiAgICB9XG4gICAgT2JqZWN0LmFzc2lnbihfZ2xvYmFsWyduZ0Rldk1vZGUnXSwgbmV3Q291bnRlcnMpO1xuICB9XG4gIHJldHVybiBuZXdDb3VudGVycztcbn1cbmZ1bmN0aW9uIGluaXROZ0Rldk1vZGUoKSB7XG4gIGlmICh0eXBlb2YgbmdEZXZNb2RlID09PSAndW5kZWZpbmVkJyB8fCBuZ0Rldk1vZGUpIHtcbiAgICBpZiAodHlwZW9mIG5nRGV2TW9kZSAhPT0gJ29iamVjdCcgfHwgT2JqZWN0LmtleXMobmdEZXZNb2RlKS5sZW5ndGggPT09IDApIHtcbiAgICAgIG5nRGV2TW9kZVJlc2V0UGVyZkNvdW50ZXJzKCk7XG4gICAgfVxuICAgIHJldHVybiB0eXBlb2YgbmdEZXZNb2RlICE9PSAndW5kZWZpbmVkJyAmJiAhIW5nRGV2TW9kZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiBnZXRDbG9zdXJlU2FmZVByb3BlcnR5KG9ialdpdGhQcm9wZXJ0eVRvRXh0cmFjdCkge1xuICBmb3IgKGxldCBrZXkgaW4gb2JqV2l0aFByb3BlcnR5VG9FeHRyYWN0KSB7XG4gICAgaWYgKG9ialdpdGhQcm9wZXJ0eVRvRXh0cmFjdFtrZXldID09PSBnZXRDbG9zdXJlU2FmZVByb3BlcnR5KSB7XG4gICAgICByZXR1cm4ga2V5O1xuICAgIH1cbiAgfVxuICB0aHJvdyBFcnJvcih0eXBlb2YgbmdEZXZNb2RlICE9PSAndW5kZWZpbmVkJyAmJiBuZ0Rldk1vZGUgPyAnQ291bGQgbm90IGZpbmQgcmVuYW1lZCBwcm9wZXJ0eSBvbiB0YXJnZXQgb2JqZWN0LicgOiAnJyk7XG59XG5mdW5jdGlvbiBmaWxsUHJvcGVydGllcyh0YXJnZXQsIHNvdXJjZSkge1xuICBmb3IgKGNvbnN0IGtleSBpbiBzb3VyY2UpIHtcbiAgICBpZiAoc291cmNlLmhhc093blByb3BlcnR5KGtleSkgJiYgIXRhcmdldC5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gc3RyaW5naWZ5KHRva2VuKSB7XG4gIGlmICh0eXBlb2YgdG9rZW4gPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHRva2VuO1xuICB9XG4gIGlmIChBcnJheS5pc0FycmF5KHRva2VuKSkge1xuICAgIHJldHVybiBgWyR7dG9rZW4ubWFwKHN0cmluZ2lmeSkuam9pbignLCAnKX1dYDtcbiAgfVxuICBpZiAodG9rZW4gPT0gbnVsbCkge1xuICAgIHJldHVybiAnJyArIHRva2VuO1xuICB9XG4gIGNvbnN0IG5hbWUgPSB0b2tlbi5vdmVycmlkZGVuTmFtZSB8fCB0b2tlbi5uYW1lO1xuICBpZiAobmFtZSkge1xuICAgIHJldHVybiBgJHtuYW1lfWA7XG4gIH1cbiAgY29uc3QgcmVzdWx0ID0gdG9rZW4udG9TdHJpbmcoKTtcbiAgaWYgKHJlc3VsdCA9PSBudWxsKSB7XG4gICAgcmV0dXJuICcnICsgcmVzdWx0O1xuICB9XG4gIGNvbnN0IG5ld0xpbmVJbmRleCA9IHJlc3VsdC5pbmRleE9mKCdcXG4nKTtcbiAgcmV0dXJuIG5ld0xpbmVJbmRleCA+PSAwID8gcmVzdWx0LnNsaWNlKDAsIG5ld0xpbmVJbmRleCkgOiByZXN1bHQ7XG59XG5mdW5jdGlvbiBjb25jYXRTdHJpbmdzV2l0aFNwYWNlKGJlZm9yZSwgYWZ0ZXIpIHtcbiAgaWYgKCFiZWZvcmUpIHJldHVybiBhZnRlciB8fCAnJztcbiAgaWYgKCFhZnRlcikgcmV0dXJuIGJlZm9yZTtcbiAgcmV0dXJuIGAke2JlZm9yZX0gJHthZnRlcn1gO1xufVxuZnVuY3Rpb24gdHJ1bmNhdGVNaWRkbGUoc3RyLCBtYXhMZW5ndGggPSAxMDApIHtcbiAgaWYgKCFzdHIgfHwgbWF4TGVuZ3RoIDwgMSB8fCBzdHIubGVuZ3RoIDw9IG1heExlbmd0aCkgcmV0dXJuIHN0cjtcbiAgaWYgKG1heExlbmd0aCA9PSAxKSByZXR1cm4gc3RyLnN1YnN0cmluZygwLCAxKSArICcuLi4nO1xuICBjb25zdCBoYWxmTGltaXQgPSBNYXRoLnJvdW5kKG1heExlbmd0aCAvIDIpO1xuICByZXR1cm4gc3RyLnN1YnN0cmluZygwLCBoYWxmTGltaXQpICsgJy4uLicgKyBzdHIuc3Vic3RyaW5nKHN0ci5sZW5ndGggLSBoYWxmTGltaXQpO1xufVxuY29uc3QgX19mb3J3YXJkX3JlZl9fID0gLyojX19QVVJFX18qL2dldENsb3N1cmVTYWZlUHJvcGVydHkoe1xuICBfX2ZvcndhcmRfcmVmX186IGdldENsb3N1cmVTYWZlUHJvcGVydHlcbn0pO1xuZnVuY3Rpb24gZm9yd2FyZFJlZihmb3J3YXJkUmVmRm4pIHtcbiAgZm9yd2FyZFJlZkZuLl9fZm9yd2FyZF9yZWZfXyA9IGZvcndhcmRSZWY7XG4gIGlmIChuZ0Rldk1vZGUpIHtcbiAgICBmb3J3YXJkUmVmRm4udG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gc3RyaW5naWZ5KHRoaXMoKSk7XG4gICAgfTtcbiAgfVxuICByZXR1cm4gZm9yd2FyZFJlZkZuO1xufVxuZnVuY3Rpb24gcmVzb2x2ZUZvcndhcmRSZWYodHlwZSkge1xuICByZXR1cm4gaXNGb3J3YXJkUmVmKHR5cGUpID8gdHlwZSgpIDogdHlwZTtcbn1cbmZ1bmN0aW9uIGlzRm9yd2FyZFJlZihmbikge1xuICByZXR1cm4gdHlwZW9mIGZuID09PSAnZnVuY3Rpb24nICYmIGZuLmhhc093blByb3BlcnR5KF9fZm9yd2FyZF9yZWZfXykgJiYgZm4uX19mb3J3YXJkX3JlZl9fID09PSBmb3J3YXJkUmVmO1xufVxuZnVuY3Rpb24gYXNzZXJ0TnVtYmVyKGFjdHVhbCwgbXNnKSB7XG4gIGlmICghKHR5cGVvZiBhY3R1YWwgPT09ICdudW1iZXInKSkge1xuICAgIHRocm93RXJyb3IobXNnLCB0eXBlb2YgYWN0dWFsLCAnbnVtYmVyJywgJz09PScpO1xuICB9XG59XG5mdW5jdGlvbiBhc3NlcnROdW1iZXJJblJhbmdlKGFjdHVhbCwgbWluSW5jbHVzaXZlLCBtYXhJbmNsdXNpdmUpIHtcbiAgYXNzZXJ0TnVtYmVyKGFjdHVhbCwgJ0V4cGVjdGVkIGEgbnVtYmVyJyk7XG4gIGFzc2VydExlc3NUaGFuT3JFcXVhbChhY3R1YWwsIG1heEluY2x1c2l2ZSwgJ0V4cGVjdGVkIG51bWJlciB0byBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8nKTtcbiAgYXNzZXJ0R3JlYXRlclRoYW5PckVxdWFsKGFjdHVhbCwgbWluSW5jbHVzaXZlLCAnRXhwZWN0ZWQgbnVtYmVyIHRvIGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0bycpO1xufVxuZnVuY3Rpb24gYXNzZXJ0U3RyaW5nKGFjdHVhbCwgbXNnKSB7XG4gIGlmICghKHR5cGVvZiBhY3R1YWwgPT09ICdzdHJpbmcnKSkge1xuICAgIHRocm93RXJyb3IobXNnLCBhY3R1YWwgPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2YgYWN0dWFsLCAnc3RyaW5nJywgJz09PScpO1xuICB9XG59XG5mdW5jdGlvbiBhc3NlcnRGdW5jdGlvbihhY3R1YWwsIG1zZykge1xuICBpZiAoISh0eXBlb2YgYWN0dWFsID09PSAnZnVuY3Rpb24nKSkge1xuICAgIHRocm93RXJyb3IobXNnLCBhY3R1YWwgPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2YgYWN0dWFsLCAnZnVuY3Rpb24nLCAnPT09Jyk7XG4gIH1cbn1cbmZ1bmN0aW9uIGFzc2VydEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1zZykge1xuICBpZiAoIShhY3R1YWwgPT0gZXhwZWN0ZWQpKSB7XG4gICAgdGhyb3dFcnJvcihtc2csIGFjdHVhbCwgZXhwZWN0ZWQsICc9PScpO1xuICB9XG59XG5mdW5jdGlvbiBhc3NlcnROb3RFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtc2cpIHtcbiAgaWYgKCEoYWN0dWFsICE9IGV4cGVjdGVkKSkge1xuICAgIHRocm93RXJyb3IobXNnLCBhY3R1YWwsIGV4cGVjdGVkLCAnIT0nKTtcbiAgfVxufVxuZnVuY3Rpb24gYXNzZXJ0U2FtZShhY3R1YWwsIGV4cGVjdGVkLCBtc2cpIHtcbiAgaWYgKCEoYWN0dWFsID09PSBleHBlY3RlZCkpIHtcbiAgICB0aHJvd0Vycm9yKG1zZywgYWN0dWFsLCBleHBlY3RlZCwgJz09PScpO1xuICB9XG59XG5mdW5jdGlvbiBhc3NlcnROb3RTYW1lKGFjdHVhbCwgZXhwZWN0ZWQsIG1zZykge1xuICBpZiAoIShhY3R1YWwgIT09IGV4cGVjdGVkKSkge1xuICAgIHRocm93RXJyb3IobXNnLCBhY3R1YWwsIGV4cGVjdGVkLCAnIT09Jyk7XG4gIH1cbn1cbmZ1bmN0aW9uIGFzc2VydExlc3NUaGFuKGFjdHVhbCwgZXhwZWN0ZWQsIG1zZykge1xuICBpZiAoIShhY3R1YWwgPCBleHBlY3RlZCkpIHtcbiAgICB0aHJvd0Vycm9yKG1zZywgYWN0dWFsLCBleHBlY3RlZCwgJzwnKTtcbiAgfVxufVxuZnVuY3Rpb24gYXNzZXJ0TGVzc1RoYW5PckVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1zZykge1xuICBpZiAoIShhY3R1YWwgPD0gZXhwZWN0ZWQpKSB7XG4gICAgdGhyb3dFcnJvcihtc2csIGFjdHVhbCwgZXhwZWN0ZWQsICc8PScpO1xuICB9XG59XG5mdW5jdGlvbiBhc3NlcnRHcmVhdGVyVGhhbihhY3R1YWwsIGV4cGVjdGVkLCBtc2cpIHtcbiAgaWYgKCEoYWN0dWFsID4gZXhwZWN0ZWQpKSB7XG4gICAgdGhyb3dFcnJvcihtc2csIGFjdHVhbCwgZXhwZWN0ZWQsICc+Jyk7XG4gIH1cbn1cbmZ1bmN0aW9uIGFzc2VydEdyZWF0ZXJUaGFuT3JFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtc2cpIHtcbiAgaWYgKCEoYWN0dWFsID49IGV4cGVjdGVkKSkge1xuICAgIHRocm93RXJyb3IobXNnLCBhY3R1YWwsIGV4cGVjdGVkLCAnPj0nKTtcbiAgfVxufVxuZnVuY3Rpb24gYXNzZXJ0Tm90RGVmaW5lZChhY3R1YWwsIG1zZykge1xuICBpZiAoYWN0dWFsICE9IG51bGwpIHtcbiAgICB0aHJvd0Vycm9yKG1zZywgYWN0dWFsLCBudWxsLCAnPT0nKTtcbiAgfVxufVxuZnVuY3Rpb24gYXNzZXJ0RGVmaW5lZChhY3R1YWwsIG1zZykge1xuICBpZiAoYWN0dWFsID09IG51bGwpIHtcbiAgICB0aHJvd0Vycm9yKG1zZywgYWN0dWFsLCBudWxsLCAnIT0nKTtcbiAgfVxufVxuZnVuY3Rpb24gdGhyb3dFcnJvcihtc2csIGFjdHVhbCwgZXhwZWN0ZWQsIGNvbXBhcmlzb24pIHtcbiAgdGhyb3cgbmV3IEVycm9yKGBBU1NFUlRJT04gRVJST1I6ICR7bXNnfWAgKyAoY29tcGFyaXNvbiA9PSBudWxsID8gJycgOiBgIFtFeHBlY3RlZD0+ICR7ZXhwZWN0ZWR9ICR7Y29tcGFyaXNvbn0gJHthY3R1YWx9IDw9QWN0dWFsXWApKTtcbn1cbmZ1bmN0aW9uIGFzc2VydERvbU5vZGUobm9kZSkge1xuICBpZiAoIShub2RlIGluc3RhbmNlb2YgTm9kZSkpIHtcbiAgICB0aHJvd0Vycm9yKGBUaGUgcHJvdmlkZWQgdmFsdWUgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBhIERPTSBOb2RlIGJ1dCBnb3QgJHtzdHJpbmdpZnkobm9kZSl9YCk7XG4gIH1cbn1cbmZ1bmN0aW9uIGFzc2VydEVsZW1lbnQobm9kZSkge1xuICBpZiAoIShub2RlIGluc3RhbmNlb2YgRWxlbWVudCkpIHtcbiAgICB0aHJvd0Vycm9yKGBUaGUgcHJvdmlkZWQgdmFsdWUgbXVzdCBiZSBhbiBlbGVtZW50IGJ1dCBnb3QgJHtzdHJpbmdpZnkobm9kZSl9YCk7XG4gIH1cbn1cbmZ1bmN0aW9uIGFzc2VydEluZGV4SW5SYW5nZShhcnIsIGluZGV4KSB7XG4gIGFzc2VydERlZmluZWQoYXJyLCAnQXJyYXkgbXVzdCBiZSBkZWZpbmVkLicpO1xuICBjb25zdCBtYXhMZW4gPSBhcnIubGVuZ3RoO1xuICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IG1heExlbikge1xuICAgIHRocm93RXJyb3IoYEluZGV4IGV4cGVjdGVkIHRvIGJlIGxlc3MgdGhhbiAke21heExlbn0gYnV0IGdvdCAke2luZGV4fWApO1xuICB9XG59XG5mdW5jdGlvbiBhc3NlcnRPbmVPZih2YWx1ZSwgLi4udmFsaWRWYWx1ZXMpIHtcbiAgaWYgKHZhbGlkVmFsdWVzLmluZGV4T2YodmFsdWUpICE9PSAtMSkgcmV0dXJuIHRydWU7XG4gIHRocm93RXJyb3IoYEV4cGVjdGVkIHZhbHVlIHRvIGJlIG9uZSBvZiAke0pTT04uc3RyaW5naWZ5KHZhbGlkVmFsdWVzKX0gYnV0IHdhcyAke0pTT04uc3RyaW5naWZ5KHZhbHVlKX0uYCk7XG59XG5mdW5jdGlvbiBhc3NlcnROb3RSZWFjdGl2ZShmbikge1xuICBpZiAoZ2V0QWN0aXZlQ29uc3VtZXIoKSAhPT0gbnVsbCkge1xuICAgIHRocm93RXJyb3IoYCR7Zm59KCkgc2hvdWxkIG5ldmVyIGJlIGNhbGxlZCBpbiBhIHJlYWN0aXZlIGNvbnRleHQuYCk7XG4gIH1cbn1cbmZ1bmN0aW9uIMm1ybVkZWZpbmVJbmplY3RhYmxlKG9wdHMpIHtcbiAgcmV0dXJuIHtcbiAgICB0b2tlbjogb3B0cy50b2tlbixcbiAgICBwcm92aWRlZEluOiBvcHRzLnByb3ZpZGVkSW4gfHwgbnVsbCxcbiAgICBmYWN0b3J5OiBvcHRzLmZhY3RvcnksXG4gICAgdmFsdWU6IHVuZGVmaW5lZFxuICB9O1xufVxuZnVuY3Rpb24gybXJtWRlZmluZUluamVjdG9yKG9wdGlvbnMpIHtcbiAgcmV0dXJuIHtcbiAgICBwcm92aWRlcnM6IG9wdGlvbnMucHJvdmlkZXJzIHx8IFtdLFxuICAgIGltcG9ydHM6IG9wdGlvbnMuaW1wb3J0cyB8fCBbXVxuICB9O1xufVxuZnVuY3Rpb24gZ2V0SW5qZWN0YWJsZURlZih0eXBlKSB7XG4gIHJldHVybiBnZXRPd25EZWZpbml0aW9uKHR5cGUsIE5HX1BST1ZfREVGKTtcbn1cbmZ1bmN0aW9uIGlzSW5qZWN0YWJsZSh0eXBlKSB7XG4gIHJldHVybiBnZXRJbmplY3RhYmxlRGVmKHR5cGUpICE9PSBudWxsO1xufVxuZnVuY3Rpb24gZ2V0T3duRGVmaW5pdGlvbih0eXBlLCBmaWVsZCkge1xuICByZXR1cm4gdHlwZS5oYXNPd25Qcm9wZXJ0eShmaWVsZCkgJiYgdHlwZVtmaWVsZF0gfHwgbnVsbDtcbn1cbmZ1bmN0aW9uIGdldEluaGVyaXRlZEluamVjdGFibGVEZWYodHlwZSkge1xuICBjb25zdCBkZWYgPSB0eXBlPy5bTkdfUFJPVl9ERUZdID8/IG51bGw7XG4gIGlmIChkZWYpIHtcbiAgICBuZ0Rldk1vZGUgJiYgY29uc29sZS53YXJuKGBERVBSRUNBVEVEOiBESSBpcyBpbnN0YW50aWF0aW5nIGEgdG9rZW4gXCIke3R5cGUubmFtZX1cIiB0aGF0IGluaGVyaXRzIGl0cyBASW5qZWN0YWJsZSBkZWNvcmF0b3IgYnV0IGRvZXMgbm90IHByb3ZpZGUgb25lIGl0c2VsZi5cXG5gICsgYFRoaXMgd2lsbCBiZWNvbWUgYW4gZXJyb3IgaW4gYSBmdXR1cmUgdmVyc2lvbiBvZiBBbmd1bGFyLiBQbGVhc2UgYWRkIEBJbmplY3RhYmxlKCkgdG8gdGhlIFwiJHt0eXBlLm5hbWV9XCIgY2xhc3MuYCk7XG4gICAgcmV0dXJuIGRlZjtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuZnVuY3Rpb24gZ2V0SW5qZWN0b3JEZWYodHlwZSkge1xuICByZXR1cm4gdHlwZSAmJiB0eXBlLmhhc093blByb3BlcnR5KE5HX0lOSl9ERUYpID8gdHlwZVtOR19JTkpfREVGXSA6IG51bGw7XG59XG5jb25zdCBOR19QUk9WX0RFRiA9IC8qI19fUFVSRV9fKi9nZXRDbG9zdXJlU2FmZVByb3BlcnR5KHtcbiAgybVwcm92OiBnZXRDbG9zdXJlU2FmZVByb3BlcnR5XG59KTtcbmNvbnN0IE5HX0lOSl9ERUYgPSAvKiNfX1BVUkVfXyovZ2V0Q2xvc3VyZVNhZmVQcm9wZXJ0eSh7XG4gIMm1aW5qOiBnZXRDbG9zdXJlU2FmZVByb3BlcnR5XG59KTtcbmNsYXNzIEluamVjdGlvblRva2VuIHtcbiAgX2Rlc2M7XG4gIG5nTWV0YWRhdGFOYW1lID0gJ0luamVjdGlvblRva2VuJztcbiAgybVwcm92O1xuICBjb25zdHJ1Y3RvcihfZGVzYywgb3B0aW9ucykge1xuICAgIHRoaXMuX2Rlc2MgPSBfZGVzYztcbiAgICB0aGlzLsm1cHJvdiA9IHVuZGVmaW5lZDtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT0gJ251bWJlcicpIHtcbiAgICAgICh0eXBlb2YgbmdEZXZNb2RlID09PSAndW5kZWZpbmVkJyB8fCBuZ0Rldk1vZGUpICYmIGFzc2VydExlc3NUaGFuKG9wdGlvbnMsIDAsICdPbmx5IG5lZ2F0aXZlIG51bWJlcnMgYXJlIHN1cHBvcnRlZCBoZXJlJyk7XG4gICAgICB0aGlzLl9fTkdfRUxFTUVOVF9JRF9fID0gb3B0aW9ucztcbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy7JtXByb3YgPSDJtcm1ZGVmaW5lSW5qZWN0YWJsZSh7XG4gICAgICAgIHRva2VuOiB0aGlzLFxuICAgICAgICBwcm92aWRlZEluOiBvcHRpb25zLnByb3ZpZGVkSW4gfHwgJ3Jvb3QnLFxuICAgICAgICBmYWN0b3J5OiBvcHRpb25zLmZhY3RvcnlcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICBnZXQgbXVsdGkoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIGBJbmplY3Rpb25Ub2tlbiAke3RoaXMuX2Rlc2N9YDtcbiAgfVxufVxubGV0IF9pbmplY3RvclByb2ZpbGVyQ29udGV4dDtcbmZ1bmN0aW9uIGdldEluamVjdG9yUHJvZmlsZXJDb250ZXh0KCkge1xuICAhbmdEZXZNb2RlICYmIHRocm93RXJyb3IoJ2dldEluamVjdG9yUHJvZmlsZXJDb250ZXh0IHNob3VsZCBuZXZlciBiZSBjYWxsZWQgaW4gcHJvZHVjdGlvbiBtb2RlJyk7XG4gIHJldHVybiBfaW5qZWN0b3JQcm9maWxlckNvbnRleHQ7XG59XG5mdW5jdGlvbiBzZXRJbmplY3RvclByb2ZpbGVyQ29udGV4dChjb250ZXh0KSB7XG4gICFuZ0Rldk1vZGUgJiYgdGhyb3dFcnJvcignc2V0SW5qZWN0b3JQcm9maWxlckNvbnRleHQgc2hvdWxkIG5ldmVyIGJlIGNhbGxlZCBpbiBwcm9kdWN0aW9uIG1vZGUnKTtcbiAgY29uc3QgcHJldmlvdXMgPSBfaW5qZWN0b3JQcm9maWxlckNvbnRleHQ7XG4gIF9pbmplY3RvclByb2ZpbGVyQ29udGV4dCA9IGNvbnRleHQ7XG4gIHJldHVybiBwcmV2aW91cztcbn1cbmNvbnN0IGluamVjdG9yUHJvZmlsZXJDYWxsYmFja3MgPSBbXTtcbmNvbnN0IE5PT1BfUFJPRklMRVJfUkVNT1ZBTCA9ICgpID0+IHt9O1xuZnVuY3Rpb24gcmVtb3ZlUHJvZmlsZXIocHJvZmlsZXIpIHtcbiAgY29uc3QgcHJvZmlsZXJJZHggPSBpbmplY3RvclByb2ZpbGVyQ2FsbGJhY2tzLmluZGV4T2YocHJvZmlsZXIpO1xuICBpZiAocHJvZmlsZXJJZHggIT09IC0xKSB7XG4gICAgaW5qZWN0b3JQcm9maWxlckNhbGxiYWNrcy5zcGxpY2UocHJvZmlsZXJJZHgsIDEpO1xuICB9XG59XG5mdW5jdGlvbiBzZXRJbmplY3RvclByb2ZpbGVyKGluamVjdG9yUHJvZmlsZXIpIHtcbiAgIW5nRGV2TW9kZSAmJiB0aHJvd0Vycm9yKCdzZXRJbmplY3RvclByb2ZpbGVyIHNob3VsZCBuZXZlciBiZSBjYWxsZWQgaW4gcHJvZHVjdGlvbiBtb2RlJyk7XG4gIGlmIChpbmplY3RvclByb2ZpbGVyICE9PSBudWxsKSB7XG4gICAgaWYgKCFpbmplY3RvclByb2ZpbGVyQ2FsbGJhY2tzLmluY2x1ZGVzKGluamVjdG9yUHJvZmlsZXIpKSB7XG4gICAgICBpbmplY3RvclByb2ZpbGVyQ2FsbGJhY2tzLnB1c2goaW5qZWN0b3JQcm9maWxlcik7XG4gICAgfVxuICAgIHJldHVybiAoKSA9PiByZW1vdmVQcm9maWxlcihpbmplY3RvclByb2ZpbGVyKTtcbiAgfSBlbHNlIHtcbiAgICBpbmplY3RvclByb2ZpbGVyQ2FsbGJhY2tzLmxlbmd0aCA9IDA7XG4gICAgcmV0dXJuIE5PT1BfUFJPRklMRVJfUkVNT1ZBTDtcbiAgfVxufVxuZnVuY3Rpb24gaW5qZWN0b3JQcm9maWxlcihldmVudCkge1xuICAhbmdEZXZNb2RlICYmIHRocm93RXJyb3IoJ0luamVjdG9yIHByb2ZpbGVyIHNob3VsZCBuZXZlciBiZSBjYWxsZWQgaW4gcHJvZHVjdGlvbiBtb2RlJyk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgaW5qZWN0b3JQcm9maWxlckNhbGxiYWNrcy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGluamVjdG9yUHJvZmlsZXJDYWxsYmFjayA9IGluamVjdG9yUHJvZmlsZXJDYWxsYmFja3NbaV07XG4gICAgaW5qZWN0b3JQcm9maWxlckNhbGxiYWNrKGV2ZW50KTtcbiAgfVxufVxuZnVuY3Rpb24gZW1pdFByb3ZpZGVyQ29uZmlndXJlZEV2ZW50KGV2ZW50UHJvdmlkZXIsIGlzVmlld1Byb3ZpZGVyID0gZmFsc2UpIHtcbiAgIW5nRGV2TW9kZSAmJiB0aHJvd0Vycm9yKCdJbmplY3RvciBwcm9maWxlciBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkIGluIHByb2R1Y3Rpb24gbW9kZScpO1xuICBsZXQgdG9rZW47XG4gIGlmICh0eXBlb2YgZXZlbnRQcm92aWRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHRva2VuID0gZXZlbnRQcm92aWRlcjtcbiAgfSBlbHNlIGlmIChldmVudFByb3ZpZGVyIGluc3RhbmNlb2YgSW5qZWN0aW9uVG9rZW4pIHtcbiAgICB0b2tlbiA9IGV2ZW50UHJvdmlkZXI7XG4gIH0gZWxzZSB7XG4gICAgdG9rZW4gPSByZXNvbHZlRm9yd2FyZFJlZihldmVudFByb3ZpZGVyLnByb3ZpZGUpO1xuICB9XG4gIGxldCBwcm92aWRlciA9IGV2ZW50UHJvdmlkZXI7XG4gIGlmIChldmVudFByb3ZpZGVyIGluc3RhbmNlb2YgSW5qZWN0aW9uVG9rZW4pIHtcbiAgICBwcm92aWRlciA9IGV2ZW50UHJvdmlkZXIuybVwcm92IHx8IGV2ZW50UHJvdmlkZXI7XG4gIH1cbiAgaW5qZWN0b3JQcm9maWxlcih7XG4gICAgdHlwZTogMixcbiAgICBjb250ZXh0OiBnZXRJbmplY3RvclByb2ZpbGVyQ29udGV4dCgpLFxuICAgIHByb3ZpZGVyUmVjb3JkOiB7XG4gICAgICB0b2tlbixcbiAgICAgIHByb3ZpZGVyLFxuICAgICAgaXNWaWV3UHJvdmlkZXJcbiAgICB9XG4gIH0pO1xufVxuZnVuY3Rpb24gZW1pdEluamVjdG9yVG9DcmVhdGVJbnN0YW5jZUV2ZW50KHRva2VuKSB7XG4gICFuZ0Rldk1vZGUgJiYgdGhyb3dFcnJvcignSW5qZWN0b3IgcHJvZmlsZXIgc2hvdWxkIG5ldmVyIGJlIGNhbGxlZCBpbiBwcm9kdWN0aW9uIG1vZGUnKTtcbiAgaW5qZWN0b3JQcm9maWxlcih7XG4gICAgdHlwZTogNSxcbiAgICBjb250ZXh0OiBnZXRJbmplY3RvclByb2ZpbGVyQ29udGV4dCgpLFxuICAgIHRva2VuOiB0b2tlblxuICB9KTtcbn1cbmZ1bmN0aW9uIGVtaXRJbnN0YW5jZUNyZWF0ZWRCeUluamVjdG9yRXZlbnQoaW5zdGFuY2UpIHtcbiAgIW5nRGV2TW9kZSAmJiB0aHJvd0Vycm9yKCdJbmplY3RvciBwcm9maWxlciBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkIGluIHByb2R1Y3Rpb24gbW9kZScpO1xuICBpbmplY3RvclByb2ZpbGVyKHtcbiAgICB0eXBlOiAxLFxuICAgIGNvbnRleHQ6IGdldEluamVjdG9yUHJvZmlsZXJDb250ZXh0KCksXG4gICAgaW5zdGFuY2U6IHtcbiAgICAgIHZhbHVlOiBpbnN0YW5jZVxuICAgIH1cbiAgfSk7XG59XG5mdW5jdGlvbiBlbWl0SW5qZWN0RXZlbnQodG9rZW4sIHZhbHVlLCBmbGFncykge1xuICAhbmdEZXZNb2RlICYmIHRocm93RXJyb3IoJ0luamVjdG9yIHByb2ZpbGVyIHNob3VsZCBuZXZlciBiZSBjYWxsZWQgaW4gcHJvZHVjdGlvbiBtb2RlJyk7XG4gIGluamVjdG9yUHJvZmlsZXIoe1xuICAgIHR5cGU6IDAsXG4gICAgY29udGV4dDogZ2V0SW5qZWN0b3JQcm9maWxlckNvbnRleHQoKSxcbiAgICBzZXJ2aWNlOiB7XG4gICAgICB0b2tlbixcbiAgICAgIHZhbHVlLFxuICAgICAgZmxhZ3NcbiAgICB9XG4gIH0pO1xufVxuZnVuY3Rpb24gZW1pdEVmZmVjdENyZWF0ZWRFdmVudChlZmZlY3QpIHtcbiAgIW5nRGV2TW9kZSAmJiB0aHJvd0Vycm9yKCdJbmplY3RvciBwcm9maWxlciBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkIGluIHByb2R1Y3Rpb24gbW9kZScpO1xuICBpbmplY3RvclByb2ZpbGVyKHtcbiAgICB0eXBlOiAzLFxuICAgIGNvbnRleHQ6IGdldEluamVjdG9yUHJvZmlsZXJDb250ZXh0KCksXG4gICAgZWZmZWN0XG4gIH0pO1xufVxuZnVuY3Rpb24gZW1pdEFmdGVyUmVuZGVyRWZmZWN0UGhhc2VDcmVhdGVkRXZlbnQoZWZmZWN0UGhhc2UpIHtcbiAgIW5nRGV2TW9kZSAmJiB0aHJvd0Vycm9yKCdJbmplY3RvciBwcm9maWxlciBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkIGluIHByb2R1Y3Rpb24gbW9kZScpO1xuICBpbmplY3RvclByb2ZpbGVyKHtcbiAgICB0eXBlOiA0LFxuICAgIGNvbnRleHQ6IGdldEluamVjdG9yUHJvZmlsZXJDb250ZXh0KCksXG4gICAgZWZmZWN0UGhhc2VcbiAgfSk7XG59XG5mdW5jdGlvbiBydW5JbkluamVjdG9yUHJvZmlsZXJDb250ZXh0KGluamVjdG9yLCB0b2tlbiwgY2FsbGJhY2spIHtcbiAgIW5nRGV2TW9kZSAmJiB0aHJvd0Vycm9yKCdydW5JbkluamVjdG9yUHJvZmlsZXJDb250ZXh0IHNob3VsZCBuZXZlciBiZSBjYWxsZWQgaW4gcHJvZHVjdGlvbiBtb2RlJyk7XG4gIGNvbnN0IHByZXZJbmplY3RDb250ZXh0ID0gc2V0SW5qZWN0b3JQcm9maWxlckNvbnRleHQoe1xuICAgIGluamVjdG9yLFxuICAgIHRva2VuXG4gIH0pO1xuICB0cnkge1xuICAgIGNhbGxiYWNrKCk7XG4gIH0gZmluYWxseSB7XG4gICAgc2V0SW5qZWN0b3JQcm9maWxlckNvbnRleHQocHJldkluamVjdENvbnRleHQpO1xuICB9XG59XG5mdW5jdGlvbiBpc0Vudmlyb25tZW50UHJvdmlkZXJzKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAmJiAhIXZhbHVlLsm1cHJvdmlkZXJzO1xufVxuY29uc3QgTkdfQ09NUF9ERUYgPSAvKiNfX1BVUkVfXyovZ2V0Q2xvc3VyZVNhZmVQcm9wZXJ0eSh7XG4gIMm1Y21wOiBnZXRDbG9zdXJlU2FmZVByb3BlcnR5XG59KTtcbmNvbnN0IE5HX0RJUl9ERUYgPSAvKiNfX1BVUkVfXyovZ2V0Q2xvc3VyZVNhZmVQcm9wZXJ0eSh7XG4gIMm1ZGlyOiBnZXRDbG9zdXJlU2FmZVByb3BlcnR5XG59KTtcbmNvbnN0IE5HX1BJUEVfREVGID0gLyojX19QVVJFX18qL2dldENsb3N1cmVTYWZlUHJvcGVydHkoe1xuICDJtXBpcGU6IGdldENsb3N1cmVTYWZlUHJvcGVydHlcbn0pO1xuY29uc3QgTkdfTU9EX0RFRiA9IC8qI19fUFVSRV9fKi9nZXRDbG9zdXJlU2FmZVByb3BlcnR5KHtcbiAgybVtb2Q6IGdldENsb3N1cmVTYWZlUHJvcGVydHlcbn0pO1xuY29uc3QgTkdfRkFDVE9SWV9ERUYgPSAvKiNfX1BVUkVfXyovZ2V0Q2xvc3VyZVNhZmVQcm9wZXJ0eSh7XG4gIMm1ZmFjOiBnZXRDbG9zdXJlU2FmZVByb3BlcnR5XG59KTtcbmNvbnN0IE5HX0VMRU1FTlRfSUQgPSAvKiNfX1BVUkVfXyovZ2V0Q2xvc3VyZVNhZmVQcm9wZXJ0eSh7XG4gIF9fTkdfRUxFTUVOVF9JRF9fOiBnZXRDbG9zdXJlU2FmZVByb3BlcnR5XG59KTtcbmNvbnN0IE5HX0VOVl9JRCA9IC8qI19fUFVSRV9fKi9nZXRDbG9zdXJlU2FmZVByb3BlcnR5KHtcbiAgX19OR19FTlZfSURfXzogZ2V0Q2xvc3VyZVNhZmVQcm9wZXJ0eVxufSk7XG5mdW5jdGlvbiBnZXROZ01vZHVsZURlZih0eXBlKSB7XG4gIGFzc2VydFR5cGVEZWZpbmVkKHR5cGUsICdATmdNb2R1bGUnKTtcbiAgcmV0dXJuIHR5cGVbTkdfTU9EX0RFRl0gfHwgbnVsbDtcbn1cbmZ1bmN0aW9uIGdldE5nTW9kdWxlRGVmT3JUaHJvdyh0eXBlKSB7XG4gIGNvbnN0IG5nTW9kdWxlRGVmID0gZ2V0TmdNb2R1bGVEZWYodHlwZSk7XG4gIGlmICghbmdNb2R1bGVEZWYpIHtcbiAgICB0aHJvdyBuZXcgUnVudGltZUVycm9yKDkxNSwgKHR5cGVvZiBuZ0Rldk1vZGUgPT09ICd1bmRlZmluZWQnIHx8IG5nRGV2TW9kZSkgJiYgYFR5cGUgJHtzdHJpbmdpZnkodHlwZSl9IGRvZXMgbm90IGhhdmUgJ8m1bW9kJyBwcm9wZXJ0eS5gKTtcbiAgfVxuICByZXR1cm4gbmdNb2R1bGVEZWY7XG59XG5mdW5jdGlvbiBnZXRDb21wb25lbnREZWYodHlwZSkge1xuICBhc3NlcnRUeXBlRGVmaW5lZCh0eXBlLCAnQENvbXBvbmVudCcpO1xuICByZXR1cm4gdHlwZVtOR19DT01QX0RFRl0gfHwgbnVsbDtcbn1cbmZ1bmN0aW9uIGdldERpcmVjdGl2ZURlZk9yVGhyb3codHlwZSkge1xuICBjb25zdCBkZWYgPSBnZXREaXJlY3RpdmVEZWYodHlwZSk7XG4gIGlmICghZGVmKSB7XG4gICAgdGhyb3cgbmV3IFJ1bnRpbWVFcnJvcig5MTYsICh0eXBlb2YgbmdEZXZNb2RlID09PSAndW5kZWZpbmVkJyB8fCBuZ0Rldk1vZGUpICYmIGBUeXBlICR7c3RyaW5naWZ5KHR5cGUpfSBkb2VzIG5vdCBoYXZlICfJtWRpcicgcHJvcGVydHkuYCk7XG4gIH1cbiAgcmV0dXJuIGRlZjtcbn1cbmZ1bmN0aW9uIGdldERpcmVjdGl2ZURlZih0eXBlKSB7XG4gIGFzc2VydFR5cGVEZWZpbmVkKHR5cGUsICdARGlyZWN0aXZlJyk7XG4gIHJldHVybiB0eXBlW05HX0RJUl9ERUZdIHx8IG51bGw7XG59XG5mdW5jdGlvbiBnZXRQaXBlRGVmKHR5cGUpIHtcbiAgYXNzZXJ0VHlwZURlZmluZWQodHlwZSwgJ0BQaXBlJyk7XG4gIHJldHVybiB0eXBlW05HX1BJUEVfREVGXSB8fCBudWxsO1xufVxuZnVuY3Rpb24gYXNzZXJ0VHlwZURlZmluZWQodHlwZSwgc3ltYm9sVHlwZSkge1xuICBpZiAodHlwZSA9PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IFJ1bnRpbWVFcnJvcigtOTE5LCAodHlwZW9mIG5nRGV2TW9kZSA9PT0gJ3VuZGVmaW5lZCcgfHwgbmdEZXZNb2RlKSAmJiBgQ2Fubm90IHJlYWQgJHtzeW1ib2xUeXBlfSBtZXRhZGF0YS4gVGhpcyBjYW4gaW5kaWNhdGUgYSBydW50aW1lIGAgKyBgY2lyY3VsYXIgZGVwZW5kZW5jeSBpbiB5b3VyIGFwcCB0aGF0IG5lZWRzIHRvIGJlIHJlc29sdmVkLmApO1xuICB9XG59XG5mdW5jdGlvbiBpc1N0YW5kYWxvbmUodHlwZSkge1xuICBjb25zdCBkZWYgPSBnZXRDb21wb25lbnREZWYodHlwZSkgfHwgZ2V0RGlyZWN0aXZlRGVmKHR5cGUpIHx8IGdldFBpcGVEZWYodHlwZSk7XG4gIHJldHVybiBkZWYgIT09IG51bGwgJiYgZGVmLnN0YW5kYWxvbmU7XG59XG5mdW5jdGlvbiByZW5kZXJTdHJpbmdpZnkodmFsdWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHJldHVybiB2YWx1ZTtcbiAgaWYgKHZhbHVlID09IG51bGwpIHJldHVybiAnJztcbiAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG59XG5mdW5jdGlvbiBzdHJpbmdpZnlGb3JFcnJvcih2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSByZXR1cm4gdmFsdWUubmFtZSB8fCB2YWx1ZS50b1N0cmluZygpO1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPSBudWxsICYmIHR5cGVvZiB2YWx1ZS50eXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIHZhbHVlLnR5cGUubmFtZSB8fCB2YWx1ZS50eXBlLnRvU3RyaW5nKCk7XG4gIH1cbiAgcmV0dXJuIHJlbmRlclN0cmluZ2lmeSh2YWx1ZSk7XG59XG5mdW5jdGlvbiBkZWJ1Z1N0cmluZ2lmeVR5cGVGb3JFcnJvcih0eXBlKSB7XG4gIGNvbnN0IGNvbXBvbmVudERlZiA9IGdldENvbXBvbmVudERlZih0eXBlKTtcbiAgaWYgKGNvbXBvbmVudERlZiAhPT0gbnVsbCAmJiBjb21wb25lbnREZWYuZGVidWdJbmZvKSB7XG4gICAgcmV0dXJuIHN0cmluZ2lmeVR5cGVGcm9tRGVidWdJbmZvKGNvbXBvbmVudERlZi5kZWJ1Z0luZm8pO1xuICB9XG4gIHJldHVybiBzdHJpbmdpZnlGb3JFcnJvcih0eXBlKTtcbn1cbmZ1bmN0aW9uIHN0cmluZ2lmeVR5cGVGcm9tRGVidWdJbmZvKGRlYnVnSW5mbykge1xuICBpZiAoIWRlYnVnSW5mby5maWxlUGF0aCB8fCAhZGVidWdJbmZvLmxpbmVOdW1iZXIpIHtcbiAgICByZXR1cm4gZGVidWdJbmZvLmNsYXNzTmFtZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gYCR7ZGVidWdJbmZvLmNsYXNzTmFtZX0gKGF0ICR7ZGVidWdJbmZvLmZpbGVQYXRofToke2RlYnVnSW5mby5saW5lTnVtYmVyfSlgO1xuICB9XG59XG5jb25zdCBOR19SVU5USU1FX0VSUk9SX0NPREUgPSAvKiNfX1BVUkVfXyovZ2V0Q2xvc3VyZVNhZmVQcm9wZXJ0eSh7XG4gICduZ0Vycm9yQ29kZSc6IGdldENsb3N1cmVTYWZlUHJvcGVydHlcbn0pO1xuY29uc3QgTkdfUlVOVElNRV9FUlJPUl9NRVNTQUdFID0gLyojX19QVVJFX18qL2dldENsb3N1cmVTYWZlUHJvcGVydHkoe1xuICAnbmdFcnJvck1lc3NhZ2UnOiBnZXRDbG9zdXJlU2FmZVByb3BlcnR5XG59KTtcbmNvbnN0IE5HX1RPS0VOX1BBVEggPSAvKiNfX1BVUkVfXyovZ2V0Q2xvc3VyZVNhZmVQcm9wZXJ0eSh7XG4gICduZ1Rva2VuUGF0aCc6IGdldENsb3N1cmVTYWZlUHJvcGVydHlcbn0pO1xuZnVuY3Rpb24gY3ljbGljRGVwZW5kZW5jeUVycm9yKHRva2VuLCBwYXRoKSB7XG4gIGNvbnN0IG1lc3NhZ2UgPSBuZ0Rldk1vZGUgPyBgQ2lyY3VsYXIgZGVwZW5kZW5jeSBkZXRlY3RlZCBmb3IgXFxgJHt0b2tlbn1cXGAuYCA6ICcnO1xuICByZXR1cm4gY3JlYXRlUnVudGltZUVycm9yKG1lc3NhZ2UsIC0yMDAsIHBhdGgpO1xufVxuZnVuY3Rpb24gY3ljbGljRGVwZW5kZW5jeUVycm9yV2l0aERldGFpbHModG9rZW4sIHBhdGgpIHtcbiAgcmV0dXJuIGF1Z21lbnRSdW50aW1lRXJyb3IoY3ljbGljRGVwZW5kZW5jeUVycm9yKHRva2VuLCBwYXRoKSwgbnVsbCk7XG59XG5mdW5jdGlvbiB0aHJvd01peGVkTXVsdGlQcm92aWRlckVycm9yKCkge1xuICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBtaXggbXVsdGkgcHJvdmlkZXJzIGFuZCByZWd1bGFyIHByb3ZpZGVyc2ApO1xufVxuZnVuY3Rpb24gdGhyb3dJbnZhbGlkUHJvdmlkZXJFcnJvcihuZ01vZHVsZVR5cGUsIHByb3ZpZGVycywgcHJvdmlkZXIpIHtcbiAgaWYgKG5nTW9kdWxlVHlwZSAmJiBwcm92aWRlcnMpIHtcbiAgICBjb25zdCBwcm92aWRlckRldGFpbCA9IHByb3ZpZGVycy5tYXAodiA9PiB2ID09IHByb3ZpZGVyID8gJz8nICsgcHJvdmlkZXIgKyAnPycgOiAnLi4uJyk7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHByb3ZpZGVyIGZvciB0aGUgTmdNb2R1bGUgJyR7c3RyaW5naWZ5KG5nTW9kdWxlVHlwZSl9JyAtIG9ubHkgaW5zdGFuY2VzIG9mIFByb3ZpZGVyIGFuZCBUeXBlIGFyZSBhbGxvd2VkLCBnb3Q6IFske3Byb3ZpZGVyRGV0YWlsLmpvaW4oJywgJyl9XWApO1xuICB9IGVsc2UgaWYgKGlzRW52aXJvbm1lbnRQcm92aWRlcnMocHJvdmlkZXIpKSB7XG4gICAgaWYgKHByb3ZpZGVyLsm1ZnJvbU5nTW9kdWxlKSB7XG4gICAgICB0aHJvdyBuZXcgUnVudGltZUVycm9yKC0yMDcsIGBJbnZhbGlkIHByb3ZpZGVycyBmcm9tICdpbXBvcnRQcm92aWRlcnNGcm9tJyBwcmVzZW50IGluIGEgbm9uLWVudmlyb25tZW50IGluamVjdG9yLiAnaW1wb3J0UHJvdmlkZXJzRnJvbScgY2FuJ3QgYmUgdXNlZCBmb3IgY29tcG9uZW50IHByb3ZpZGVycy5gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFcnJvcigtMjA3LCBgSW52YWxpZCBwcm92aWRlcnMgcHJlc2VudCBpbiBhIG5vbi1lbnZpcm9ubWVudCBpbmplY3Rvci4gJ0Vudmlyb25tZW50UHJvdmlkZXJzJyBjYW4ndCBiZSB1c2VkIGZvciBjb21wb25lbnQgcHJvdmlkZXJzLmApO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgcHJvdmlkZXInKTtcbiAgfVxufVxuZnVuY3Rpb24gdGhyb3dQcm92aWRlck5vdEZvdW5kRXJyb3IodG9rZW4sIGluamVjdG9yTmFtZSkge1xuICBjb25zdCBlcnJvck1lc3NhZ2UgPSBuZ0Rldk1vZGUgJiYgYE5vIHByb3ZpZGVyIGZvciAke3N0cmluZ2lmeUZvckVycm9yKHRva2VuKX0gZm91bmQke2luamVjdG9yTmFtZSA/IGAgaW4gJHtpbmplY3Rvck5hbWV9YCA6ICcnfWA7XG4gIHRocm93IG5ldyBSdW50aW1lRXJyb3IoLTIwMSwgZXJyb3JNZXNzYWdlKTtcbn1cbmZ1bmN0aW9uIHByZXBlbmRUb2tlblRvRGVwZW5kZW5jeVBhdGgoZXJyb3IsIHRva2VuKSB7XG4gIGVycm9yW05HX1RPS0VOX1BBVEhdID8/PSBbXTtcbiAgY29uc3QgY3VycmVudFBhdGggPSBlcnJvcltOR19UT0tFTl9QQVRIXTtcbiAgbGV0IHBhdGhTdHI7XG4gIGlmICh0eXBlb2YgdG9rZW4gPT09ICdvYmplY3QnICYmICdtdWx0aScgaW4gdG9rZW4gJiYgdG9rZW4/Lm11bHRpID09PSB0cnVlKSB7XG4gICAgYXNzZXJ0RGVmaW5lZCh0b2tlbi5wcm92aWRlLCAnVG9rZW4gd2l0aCBtdWx0aTogdHJ1ZSBzaG91bGQgaGF2ZSBhIHByb3ZpZGUgcHJvcGVydHknKTtcbiAgICBwYXRoU3RyID0gc3RyaW5naWZ5Rm9yRXJyb3IodG9rZW4ucHJvdmlkZSk7XG4gIH0gZWxzZSB7XG4gICAgcGF0aFN0ciA9IHN0cmluZ2lmeUZvckVycm9yKHRva2VuKTtcbiAgfVxuICBpZiAoY3VycmVudFBhdGhbMF0gIT09IHBhdGhTdHIpIHtcbiAgICBlcnJvcltOR19UT0tFTl9QQVRIXS51bnNoaWZ0KHBhdGhTdHIpO1xuICB9XG59XG5mdW5jdGlvbiBhdWdtZW50UnVudGltZUVycm9yKGVycm9yLCBzb3VyY2UpIHtcbiAgY29uc3QgdG9rZW5QYXRoID0gZXJyb3JbTkdfVE9LRU5fUEFUSF07XG4gIGNvbnN0IGVycm9yQ29kZSA9IGVycm9yW05HX1JVTlRJTUVfRVJST1JfQ09ERV07XG4gIGNvbnN0IG1lc3NhZ2UgPSBlcnJvcltOR19SVU5USU1FX0VSUk9SX01FU1NBR0VdIHx8IGVycm9yLm1lc3NhZ2U7XG4gIGVycm9yLm1lc3NhZ2UgPSBmb3JtYXRFcnJvck1lc3NhZ2UobWVzc2FnZSwgZXJyb3JDb2RlLCB0b2tlblBhdGgsIHNvdXJjZSk7XG4gIHJldHVybiBlcnJvcjtcbn1cbmZ1bmN0aW9uIGNyZWF0ZVJ1bnRpbWVFcnJvcihtZXNzYWdlLCBjb2RlLCBwYXRoKSB7XG4gIGNvbnN0IGVycm9yID0gbmV3IFJ1bnRpbWVFcnJvcihjb2RlLCBtZXNzYWdlKTtcbiAgZXJyb3JbTkdfUlVOVElNRV9FUlJPUl9DT0RFXSA9IGNvZGU7XG4gIGVycm9yW05HX1JVTlRJTUVfRVJST1JfTUVTU0FHRV0gPSBtZXNzYWdlO1xuICBpZiAocGF0aCkge1xuICAgIGVycm9yW05HX1RPS0VOX1BBVEhdID0gcGF0aDtcbiAgfVxuICByZXR1cm4gZXJyb3I7XG59XG5mdW5jdGlvbiBnZXRSdW50aW1lRXJyb3JDb2RlKGVycm9yKSB7XG4gIHJldHVybiBlcnJvcltOR19SVU5USU1FX0VSUk9SX0NPREVdO1xufVxuZnVuY3Rpb24gZm9ybWF0RXJyb3JNZXNzYWdlKHRleHQsIGNvZGUsIHBhdGggPSBbXSwgc291cmNlID0gbnVsbCkge1xuICBsZXQgcGF0aERldGFpbHMgPSAnJztcbiAgaWYgKHBhdGggJiYgcGF0aC5sZW5ndGggPiAxKSB7XG4gICAgcGF0aERldGFpbHMgPSBgIFBhdGg6ICR7cGF0aC5qb2luKCcgLT4gJyl9LmA7XG4gIH1cbiAgY29uc3Qgc291cmNlRGV0YWlscyA9IHNvdXJjZSA/IGAgU291cmNlOiAke3NvdXJjZX0uYCA6ICcnO1xuICByZXR1cm4gZm9ybWF0UnVudGltZUVycm9yKGNvZGUsIGAke3RleHR9JHtzb3VyY2VEZXRhaWxzfSR7cGF0aERldGFpbHN9YCk7XG59XG5sZXQgX2luamVjdEltcGxlbWVudGF0aW9uO1xuZnVuY3Rpb24gZ2V0SW5qZWN0SW1wbGVtZW50YXRpb24oKSB7XG4gIHJldHVybiBfaW5qZWN0SW1wbGVtZW50YXRpb247XG59XG5mdW5jdGlvbiBzZXRJbmplY3RJbXBsZW1lbnRhdGlvbihpbXBsKSB7XG4gIGNvbnN0IHByZXZpb3VzID0gX2luamVjdEltcGxlbWVudGF0aW9uO1xuICBfaW5qZWN0SW1wbGVtZW50YXRpb24gPSBpbXBsO1xuICByZXR1cm4gcHJldmlvdXM7XG59XG5mdW5jdGlvbiBpbmplY3RSb290TGltcE1vZGUodG9rZW4sIG5vdEZvdW5kVmFsdWUsIGZsYWdzKSB7XG4gIGNvbnN0IGluamVjdGFibGVEZWYgPSBnZXRJbmplY3RhYmxlRGVmKHRva2VuKTtcbiAgaWYgKGluamVjdGFibGVEZWYgJiYgaW5qZWN0YWJsZURlZi5wcm92aWRlZEluID09ICdyb290Jykge1xuICAgIHJldHVybiBpbmplY3RhYmxlRGVmLnZhbHVlID09PSB1bmRlZmluZWQgPyBpbmplY3RhYmxlRGVmLnZhbHVlID0gaW5qZWN0YWJsZURlZi5mYWN0b3J5KCkgOiBpbmplY3RhYmxlRGVmLnZhbHVlO1xuICB9XG4gIGlmIChmbGFncyAmIDgpIHJldHVybiBudWxsO1xuICBpZiAobm90Rm91bmRWYWx1ZSAhPT0gdW5kZWZpbmVkKSByZXR1cm4gbm90Rm91bmRWYWx1ZTtcbiAgdGhyb3dQcm92aWRlck5vdEZvdW5kRXJyb3IodG9rZW4sIHR5cGVvZiBuZ0Rldk1vZGUgIT09ICd1bmRlZmluZWQnICYmIG5nRGV2TW9kZSA/ICdJbmplY3RvcicgOiAnJyk7XG59XG5mdW5jdGlvbiBhc3NlcnRJbmplY3RJbXBsZW1lbnRhdGlvbk5vdEVxdWFsKGZuKSB7XG4gIG5nRGV2TW9kZSAmJiBhc3NlcnROb3RFcXVhbChfaW5qZWN0SW1wbGVtZW50YXRpb24sIGZuLCAnQ2FsbGluZyDJtcm1aW5qZWN0IHdvdWxkIGNhdXNlIGluZmluaXRlIHJlY3Vyc2lvbicpO1xufVxuY29uc3QgX1RIUk9XX0lGX05PVF9GT1VORCA9IHt9O1xuY29uc3QgVEhST1dfSUZfTk9UX0ZPVU5EID0gX1RIUk9XX0lGX05PVF9GT1VORDtcbmNvbnN0IERJX0RFQ09SQVRPUl9GTEFHID0gJ19fTkdfRElfRkxBR19fJztcbmNsYXNzIFJldHJpZXZpbmdJbmplY3RvciB7XG4gIGluamVjdG9yO1xuICBjb25zdHJ1Y3RvcihpbmplY3Rvcikge1xuICAgIHRoaXMuaW5qZWN0b3IgPSBpbmplY3RvcjtcbiAgfVxuICByZXRyaWV2ZSh0b2tlbiwgb3B0aW9ucykge1xuICAgIGNvbnN0IGZsYWdzID0gY29udmVydFRvQml0RmxhZ3Mob3B0aW9ucykgfHwgMDtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHRoaXMuaW5qZWN0b3IuZ2V0KHRva2VuLCBmbGFncyAmIDggPyBudWxsIDogVEhST1dfSUZfTk9UX0ZPVU5ELCBmbGFncyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKGlzTm90Rm91bmQoZSkpIHtcbiAgICAgICAgcmV0dXJuIGU7XG4gICAgICB9XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gaW5qZWN0SW5qZWN0b3JPbmx5KHRva2VuLCBmbGFncyA9IDApIHtcbiAgY29uc3QgY3VycmVudEluamVjdG9yID0gZ2V0Q3VycmVudEluamVjdG9yKCk7XG4gIGlmIChjdXJyZW50SW5qZWN0b3IgPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBSdW50aW1lRXJyb3IoLTIwMywgbmdEZXZNb2RlICYmIGBUaGUgXFxgJHtzdHJpbmdpZnkodG9rZW4pfVxcYCB0b2tlbiBpbmplY3Rpb24gZmFpbGVkLiBcXGBpbmplY3QoKVxcYCBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBmcm9tIGFuIGluamVjdGlvbiBjb250ZXh0IHN1Y2ggYXMgYSBjb25zdHJ1Y3RvciwgYSBmYWN0b3J5IGZ1bmN0aW9uLCBhIGZpZWxkIGluaXRpYWxpemVyLCBvciBhIGZ1bmN0aW9uIHVzZWQgd2l0aCBcXGBydW5JbkluamVjdGlvbkNvbnRleHRcXGAuYCk7XG4gIH0gZWxzZSBpZiAoY3VycmVudEluamVjdG9yID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGluamVjdFJvb3RMaW1wTW9kZSh0b2tlbiwgdW5kZWZpbmVkLCBmbGFncyk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IGNvbnZlcnRUb0luamVjdE9wdGlvbnMoZmxhZ3MpO1xuICAgIGNvbnN0IHZhbHVlID0gY3VycmVudEluamVjdG9yLnJldHJpZXZlKHRva2VuLCBvcHRpb25zKTtcbiAgICBuZ0Rldk1vZGUgJiYgZW1pdEluamVjdEV2ZW50KHRva2VuLCB2YWx1ZSwgZmxhZ3MpO1xuICAgIGlmIChpc05vdEZvdW5kKHZhbHVlKSkge1xuICAgICAgaWYgKG9wdGlvbnMub3B0aW9uYWwpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICB0aHJvdyB2YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG59XG5mdW5jdGlvbiDJtcm1aW5qZWN0KHRva2VuLCBmbGFncyA9IDApIHtcbiAgcmV0dXJuIChnZXRJbmplY3RJbXBsZW1lbnRhdGlvbigpIHx8IGluamVjdEluamVjdG9yT25seSkocmVzb2x2ZUZvcndhcmRSZWYodG9rZW4pLCBmbGFncyk7XG59XG5mdW5jdGlvbiDJtcm1aW52YWxpZEZhY3RvcnlEZXAoaW5kZXgpIHtcbiAgdGhyb3cgbmV3IFJ1bnRpbWVFcnJvcigyMDIsIG5nRGV2TW9kZSAmJiBgVGhpcyBjb25zdHJ1Y3RvciBpcyBub3QgY29tcGF0aWJsZSB3aXRoIEFuZ3VsYXIgRGVwZW5kZW5jeSBJbmplY3Rpb24gYmVjYXVzZSBpdHMgZGVwZW5kZW5jeSBhdCBpbmRleCAke2luZGV4fSBvZiB0aGUgcGFyYW1ldGVyIGxpc3QgaXMgaW52YWxpZC5cblRoaXMgY2FuIGhhcHBlbiBpZiB0aGUgZGVwZW5kZW5jeSB0eXBlIGlzIGEgcHJpbWl0aXZlIGxpa2UgYSBzdHJpbmcgb3IgaWYgYW4gYW5jZXN0b3Igb2YgdGhpcyBjbGFzcyBpcyBtaXNzaW5nIGFuIEFuZ3VsYXIgZGVjb3JhdG9yLlxuXG5QbGVhc2UgY2hlY2sgdGhhdCAxKSB0aGUgdHlwZSBmb3IgdGhlIHBhcmFtZXRlciBhdCBpbmRleCAke2luZGV4fSBpcyBjb3JyZWN0IGFuZCAyKSB0aGUgY29ycmVjdCBBbmd1bGFyIGRlY29yYXRvcnMgYXJlIGRlZmluZWQgZm9yIHRoaXMgY2xhc3MgYW5kIGl0cyBhbmNlc3RvcnMuYCk7XG59XG5mdW5jdGlvbiBpbmplY3QodG9rZW4sIG9wdGlvbnMpIHtcbiAgcmV0dXJuIMm1ybVpbmplY3QodG9rZW4sIGNvbnZlcnRUb0JpdEZsYWdzKG9wdGlvbnMpKTtcbn1cbmZ1bmN0aW9uIGNvbnZlcnRUb0JpdEZsYWdzKGZsYWdzKSB7XG4gIGlmICh0eXBlb2YgZmxhZ3MgPT09ICd1bmRlZmluZWQnIHx8IHR5cGVvZiBmbGFncyA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gZmxhZ3M7XG4gIH1cbiAgcmV0dXJuIDAgfCAoZmxhZ3Mub3B0aW9uYWwgJiYgOCkgfCAoZmxhZ3MuaG9zdCAmJiAxKSB8IChmbGFncy5zZWxmICYmIDIpIHwgKGZsYWdzLnNraXBTZWxmICYmIDQpO1xufVxuZnVuY3Rpb24gY29udmVydFRvSW5qZWN0T3B0aW9ucyhmbGFncykge1xuICByZXR1cm4ge1xuICAgIG9wdGlvbmFsOiAhIShmbGFncyAmIDgpLFxuICAgIGhvc3Q6ICEhKGZsYWdzICYgMSksXG4gICAgc2VsZjogISEoZmxhZ3MgJiAyKSxcbiAgICBza2lwU2VsZjogISEoZmxhZ3MgJiA0KVxuICB9O1xufVxuZnVuY3Rpb24gaW5qZWN0QXJncyh0eXBlcykge1xuICBjb25zdCBhcmdzID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdHlwZXMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBhcmcgPSByZXNvbHZlRm9yd2FyZFJlZih0eXBlc1tpXSk7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYXJnKSkge1xuICAgICAgaWYgKGFyZy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFcnJvcig5MDAsIG5nRGV2TW9kZSAmJiAnQXJndW1lbnRzIGFycmF5IG11c3QgaGF2ZSBhcmd1bWVudHMuJyk7XG4gICAgICB9XG4gICAgICBsZXQgdHlwZSA9IHVuZGVmaW5lZDtcbiAgICAgIGxldCBmbGFncyA9IDA7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGFyZy5sZW5ndGg7IGorKykge1xuICAgICAgICBjb25zdCBtZXRhID0gYXJnW2pdO1xuICAgICAgICBjb25zdCBmbGFnID0gZ2V0SW5qZWN0RmxhZyhtZXRhKTtcbiAgICAgICAgaWYgKHR5cGVvZiBmbGFnID09PSAnbnVtYmVyJykge1xuICAgICAgICAgIGlmIChmbGFnID09PSAtMSkge1xuICAgICAgICAgICAgdHlwZSA9IG1ldGEudG9rZW47XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZsYWdzIHw9IGZsYWc7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHR5cGUgPSBtZXRhO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBhcmdzLnB1c2goybXJtWluamVjdCh0eXBlLCBmbGFncykpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhcmdzLnB1c2goybXJtWluamVjdChhcmcpKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGFyZ3M7XG59XG5mdW5jdGlvbiBhdHRhY2hJbmplY3RGbGFnKGRlY29yYXRvciwgZmxhZykge1xuICBkZWNvcmF0b3JbRElfREVDT1JBVE9SX0ZMQUddID0gZmxhZztcbiAgZGVjb3JhdG9yLnByb3RvdHlwZVtESV9ERUNPUkFUT1JfRkxBR10gPSBmbGFnO1xuICByZXR1cm4gZGVjb3JhdG9yO1xufVxuZnVuY3Rpb24gZ2V0SW5qZWN0RmxhZyh0b2tlbikge1xuICByZXR1cm4gdG9rZW5bRElfREVDT1JBVE9SX0ZMQUddO1xufVxuZnVuY3Rpb24gZ2V0RmFjdG9yeURlZih0eXBlLCB0aHJvd05vdEZvdW5kKSB7XG4gIGNvbnN0IGhhc0ZhY3RvcnlEZWYgPSB0eXBlLmhhc093blByb3BlcnR5KE5HX0ZBQ1RPUllfREVGKTtcbiAgaWYgKCFoYXNGYWN0b3J5RGVmICYmIHRocm93Tm90Rm91bmQgPT09IHRydWUgJiYgbmdEZXZNb2RlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBUeXBlICR7c3RyaW5naWZ5KHR5cGUpfSBkb2VzIG5vdCBoYXZlICfJtWZhYycgcHJvcGVydHkuYCk7XG4gIH1cbiAgcmV0dXJuIGhhc0ZhY3RvcnlEZWYgPyB0eXBlW05HX0ZBQ1RPUllfREVGXSA6IG51bGw7XG59XG5mdW5jdGlvbiBhcnJheUVxdWFscyhhLCBiLCBpZGVudGl0eUFjY2Vzc29yKSB7XG4gIGlmIChhLmxlbmd0aCAhPT0gYi5sZW5ndGgpIHJldHVybiBmYWxzZTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhLmxlbmd0aDsgaSsrKSB7XG4gICAgbGV0IHZhbHVlQSA9IGFbaV07XG4gICAgbGV0IHZhbHVlQiA9IGJbaV07XG4gICAgaWYgKGlkZW50aXR5QWNjZXNzb3IpIHtcbiAgICAgIHZhbHVlQSA9IGlkZW50aXR5QWNjZXNzb3IodmFsdWVBKTtcbiAgICAgIHZhbHVlQiA9IGlkZW50aXR5QWNjZXNzb3IodmFsdWVCKTtcbiAgICB9XG4gICAgaWYgKHZhbHVlQiAhPT0gdmFsdWVBKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlO1xufVxuZnVuY3Rpb24gZmxhdHRlbihsaXN0KSB7XG4gIHJldHVybiBsaXN0LmZsYXQoTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKTtcbn1cbmZ1bmN0aW9uIGRlZXBGb3JFYWNoKGlucHV0LCBmbikge1xuICBpbnB1dC5mb3JFYWNoKHZhbHVlID0+IEFycmF5LmlzQXJyYXkodmFsdWUpID8gZGVlcEZvckVhY2godmFsdWUsIGZuKSA6IGZuKHZhbHVlKSk7XG59XG5mdW5jdGlvbiBhZGRUb0FycmF5KGFyciwgaW5kZXgsIHZhbHVlKSB7XG4gIGlmIChpbmRleCA+PSBhcnIubGVuZ3RoKSB7XG4gICAgYXJyLnB1c2godmFsdWUpO1xuICB9IGVsc2Uge1xuICAgIGFyci5zcGxpY2UoaW5kZXgsIDAsIHZhbHVlKTtcbiAgfVxufVxuZnVuY3Rpb24gcmVtb3ZlRnJvbUFycmF5KGFyciwgaW5kZXgpIHtcbiAgaWYgKGluZGV4ID49IGFyci5sZW5ndGggLSAxKSB7XG4gICAgcmV0dXJuIGFyci5wb3AoKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gYXJyLnNwbGljZShpbmRleCwgMSlbMF07XG4gIH1cbn1cbmZ1bmN0aW9uIG5ld0FycmF5KHNpemUsIHZhbHVlKSB7XG4gIGNvbnN0IGxpc3QgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHtcbiAgICBsaXN0LnB1c2godmFsdWUpO1xuICB9XG4gIHJldHVybiBsaXN0O1xufVxuZnVuY3Rpb24gYXJyYXlTcGxpY2UoYXJyYXksIGluZGV4LCBjb3VudCkge1xuICBjb25zdCBsZW5ndGggPSBhcnJheS5sZW5ndGggLSBjb3VudDtcbiAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgYXJyYXlbaW5kZXhdID0gYXJyYXlbaW5kZXggKyBjb3VudF07XG4gICAgaW5kZXgrKztcbiAgfVxuICB3aGlsZSAoY291bnQtLSkge1xuICAgIGFycmF5LnBvcCgpO1xuICB9XG59XG5mdW5jdGlvbiBhcnJheUluc2VydDIoYXJyYXksIGluZGV4LCB2YWx1ZTEsIHZhbHVlMikge1xuICBuZ0Rldk1vZGUgJiYgYXNzZXJ0TGVzc1RoYW5PckVxdWFsKGluZGV4LCBhcnJheS5sZW5ndGgsIFwiQ2FuJ3QgaW5zZXJ0IHBhc3QgYXJyYXkgZW5kLlwiKTtcbiAgbGV0IGVuZCA9IGFycmF5Lmxlbmd0aDtcbiAgaWYgKGVuZCA9PSBpbmRleCkge1xuICAgIGFycmF5LnB1c2godmFsdWUxLCB2YWx1ZTIpO1xuICB9IGVsc2UgaWYgKGVuZCA9PT0gMSkge1xuICAgIGFycmF5LnB1c2godmFsdWUyLCBhcnJheVswXSk7XG4gICAgYXJyYXlbMF0gPSB2YWx1ZTE7XG4gIH0gZWxzZSB7XG4gICAgZW5kLS07XG4gICAgYXJyYXkucHVzaChhcnJheVtlbmQgLSAxXSwgYXJyYXlbZW5kXSk7XG4gICAgd2hpbGUgKGVuZCA+IGluZGV4KSB7XG4gICAgICBjb25zdCBwcmV2aW91c0VuZCA9IGVuZCAtIDI7XG4gICAgICBhcnJheVtlbmRdID0gYXJyYXlbcHJldmlvdXNFbmRdO1xuICAgICAgZW5kLS07XG4gICAgfVxuICAgIGFycmF5W2luZGV4XSA9IHZhbHVlMTtcbiAgICBhcnJheVtpbmRleCArIDFdID0gdmFsdWUyO1xuICB9XG59XG5mdW5jdGlvbiBrZXlWYWx1ZUFycmF5U2V0KGtleVZhbHVlQXJyYXksIGtleSwgdmFsdWUpIHtcbiAgbGV0IGluZGV4ID0ga2V5VmFsdWVBcnJheUluZGV4T2Yoa2V5VmFsdWVBcnJheSwga2V5KTtcbiAgaWYgKGluZGV4ID49IDApIHtcbiAgICBrZXlWYWx1ZUFycmF5W2luZGV4IHwgMV0gPSB2YWx1ZTtcbiAgfSBlbHNlIHtcbiAgICBpbmRleCA9IH5pbmRleDtcbiAgICBhcnJheUluc2VydDIoa2V5VmFsdWVBcnJheSwgaW5kZXgsIGtleSwgdmFsdWUpO1xuICB9XG4gIHJldHVybiBpbmRleDtcbn1cbmZ1bmN0aW9uIGtleVZhbHVlQXJyYXlHZXQoa2V5VmFsdWVBcnJheSwga2V5KSB7XG4gIGNvbnN0IGluZGV4ID0ga2V5VmFsdWVBcnJheUluZGV4T2Yoa2V5VmFsdWVBcnJheSwga2V5KTtcbiAgaWYgKGluZGV4ID49IDApIHtcbiAgICByZXR1cm4ga2V5VmFsdWVBcnJheVtpbmRleCB8IDFdO1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5mdW5jdGlvbiBrZXlWYWx1ZUFycmF5SW5kZXhPZihrZXlWYWx1ZUFycmF5LCBrZXkpIHtcbiAgcmV0dXJuIF9hcnJheUluZGV4T2ZTb3J0ZWQoa2V5VmFsdWVBcnJheSwga2V5LCAxKTtcbn1cbmZ1bmN0aW9uIF9hcnJheUluZGV4T2ZTb3J0ZWQoYXJyYXksIHZhbHVlLCBzaGlmdCkge1xuICBuZ0Rldk1vZGUgJiYgYXNzZXJ0RXF1YWwoQXJyYXkuaXNBcnJheShhcnJheSksIHRydWUsICdFeHBlY3RpbmcgYW4gYXJyYXknKTtcbiAgbGV0IHN0YXJ0ID0gMDtcbiAgbGV0IGVuZCA9IGFycmF5Lmxlbmd0aCA+PiBzaGlmdDtcbiAgd2hpbGUgKGVuZCAhPT0gc3RhcnQpIHtcbiAgICBjb25zdCBtaWRkbGUgPSBzdGFydCArIChlbmQgLSBzdGFydCA+PiAxKTtcbiAgICBjb25zdCBjdXJyZW50ID0gYXJyYXlbbWlkZGxlIDw8IHNoaWZ0XTtcbiAgICBpZiAodmFsdWUgPT09IGN1cnJlbnQpIHtcbiAgICAgIHJldHVybiBtaWRkbGUgPDwgc2hpZnQ7XG4gICAgfSBlbHNlIGlmIChjdXJyZW50ID4gdmFsdWUpIHtcbiAgICAgIGVuZCA9IG1pZGRsZTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhcnQgPSBtaWRkbGUgKyAxO1xuICAgIH1cbiAgfVxuICByZXR1cm4gfihlbmQgPDwgc2hpZnQpO1xufVxuY29uc3QgRU1QVFlfT0JKID0ge307XG5jb25zdCBFTVBUWV9BUlJBWSA9IFtdO1xuaWYgKCh0eXBlb2YgbmdEZXZNb2RlID09PSAndW5kZWZpbmVkJyB8fCBuZ0Rldk1vZGUpICYmIC8qI19fUFVSRV9fKi9pbml0TmdEZXZNb2RlKCkpIHtcbiAgLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoRU1QVFlfT0JKKTtcbiAgLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoRU1QVFlfQVJSQVkpO1xufVxuY29uc3QgRU5WSVJPTk1FTlRfSU5JVElBTElaRVIgPSAvKiNfX1BVUkVfXyovbmV3IEluamVjdGlvblRva2VuKHR5cGVvZiBuZ0Rldk1vZGUgIT09ICd1bmRlZmluZWQnICYmIG5nRGV2TW9kZSA/ICdFTlZJUk9OTUVOVF9JTklUSUFMSVpFUicgOiAnJyk7XG5jb25zdCBJTkpFQ1RPUiQxID0gLyojX19QVVJFX18qL25ldyBJbmplY3Rpb25Ub2tlbih0eXBlb2YgbmdEZXZNb2RlICE9PSAndW5kZWZpbmVkJyAmJiBuZ0Rldk1vZGUgPyAnSU5KRUNUT1InIDogJycsIC0xKTtcbmNvbnN0IElOSkVDVE9SX0RFRl9UWVBFUyA9IC8qI19fUFVSRV9fKi9uZXcgSW5qZWN0aW9uVG9rZW4odHlwZW9mIG5nRGV2TW9kZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbmdEZXZNb2RlID8gJ0lOSkVDVE9SX0RFRl9UWVBFUycgOiAnJyk7XG5jbGFzcyBOdWxsSW5qZWN0b3Ige1xuICBnZXQodG9rZW4sIG5vdEZvdW5kVmFsdWUgPSBUSFJPV19JRl9OT1RfRk9VTkQpIHtcbiAgICBpZiAobm90Rm91bmRWYWx1ZSA9PT0gVEhST1dfSUZfTk9UX0ZPVU5EKSB7XG4gICAgICBjb25zdCBtZXNzYWdlID0gbmdEZXZNb2RlID8gYE5vIHByb3ZpZGVyIGZvdW5kIGZvciBcXGAke3N0cmluZ2lmeSh0b2tlbil9XFxgLmAgOiAnJztcbiAgICAgIGNvbnN0IGVycm9yID0gY3JlYXRlUnVudGltZUVycm9yKG1lc3NhZ2UsIC0yMDEpO1xuICAgICAgZXJyb3IubmFtZSA9ICfJtU5vdEZvdW5kJztcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgICByZXR1cm4gbm90Rm91bmRWYWx1ZTtcbiAgfVxufVxuZnVuY3Rpb24gbWFrZUVudmlyb25tZW50UHJvdmlkZXJzKHByb3ZpZGVycykge1xuICByZXR1cm4ge1xuICAgIMm1cHJvdmlkZXJzOiBwcm92aWRlcnNcbiAgfTtcbn1cbmZ1bmN0aW9uIHByb3ZpZGVFbnZpcm9ubWVudEluaXRpYWxpemVyKGluaXRpYWxpemVyRm4pIHtcbiAgcmV0dXJuIG1ha2VFbnZpcm9ubWVudFByb3ZpZGVycyhbe1xuICAgIHByb3ZpZGU6IEVOVklST05NRU5UX0lOSVRJQUxJWkVSLFxuICAgIG11bHRpOiB0cnVlLFxuICAgIHVzZVZhbHVlOiBpbml0aWFsaXplckZuXG4gIH1dKTtcbn1cbmZ1bmN0aW9uIGltcG9ydFByb3ZpZGVyc0Zyb20oLi4uc291cmNlcykge1xuICByZXR1cm4ge1xuICAgIMm1cHJvdmlkZXJzOiBpbnRlcm5hbEltcG9ydFByb3ZpZGVyc0Zyb20odHJ1ZSwgc291cmNlcyksXG4gICAgybVmcm9tTmdNb2R1bGU6IHRydWVcbiAgfTtcbn1cbmZ1bmN0aW9uIGludGVybmFsSW1wb3J0UHJvdmlkZXJzRnJvbShjaGVja0ZvclN0YW5kYWxvbmVDbXAsIC4uLnNvdXJjZXMpIHtcbiAgY29uc3QgcHJvdmlkZXJzT3V0ID0gW107XG4gIGNvbnN0IGRlZHVwID0gbmV3IFNldCgpO1xuICBsZXQgaW5qZWN0b3JUeXBlc1dpdGhQcm92aWRlcnM7XG4gIGNvbnN0IGNvbGxlY3RQcm92aWRlcnMgPSBwcm92aWRlciA9PiB7XG4gICAgcHJvdmlkZXJzT3V0LnB1c2gocHJvdmlkZXIpO1xuICB9O1xuICBkZWVwRm9yRWFjaChzb3VyY2VzLCBzb3VyY2UgPT4ge1xuICAgIGlmICgodHlwZW9mIG5nRGV2TW9kZSA9PT0gJ3VuZGVmaW5lZCcgfHwgbmdEZXZNb2RlKSAmJiBjaGVja0ZvclN0YW5kYWxvbmVDbXApIHtcbiAgICAgIGNvbnN0IGNtcERlZiA9IGdldENvbXBvbmVudERlZihzb3VyY2UpO1xuICAgICAgaWYgKGNtcERlZj8uc3RhbmRhbG9uZSkge1xuICAgICAgICB0aHJvdyBuZXcgUnVudGltZUVycm9yKDgwMCwgYEltcG9ydGluZyBwcm92aWRlcnMgc3VwcG9ydHMgTmdNb2R1bGUgb3IgTW9kdWxlV2l0aFByb3ZpZGVycyBidXQgZ290IGEgc3RhbmRhbG9uZSBjb21wb25lbnQgXCIke3N0cmluZ2lmeUZvckVycm9yKHNvdXJjZSl9XCJgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgaW50ZXJuYWxTb3VyY2UgPSBzb3VyY2U7XG4gICAgaWYgKHdhbGtQcm92aWRlclRyZWUoaW50ZXJuYWxTb3VyY2UsIGNvbGxlY3RQcm92aWRlcnMsIFtdLCBkZWR1cCkpIHtcbiAgICAgIGluamVjdG9yVHlwZXNXaXRoUHJvdmlkZXJzIHx8PSBbXTtcbiAgICAgIGluamVjdG9yVHlwZXNXaXRoUHJvdmlkZXJzLnB1c2goaW50ZXJuYWxTb3VyY2UpO1xuICAgIH1cbiAgfSk7XG4gIGlmIChpbmplY3RvclR5cGVzV2l0aFByb3ZpZGVycyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcHJvY2Vzc0luamVjdG9yVHlwZXNXaXRoUHJvdmlkZXJzKGluamVjdG9yVHlwZXNXaXRoUHJvdmlkZXJzLCBjb2xsZWN0UHJvdmlkZXJzKTtcbiAgfVxuICByZXR1cm4gcHJvdmlkZXJzT3V0O1xufVxuZnVuY3Rpb24gcHJvY2Vzc0luamVjdG9yVHlwZXNXaXRoUHJvdmlkZXJzKHR5cGVzV2l0aFByb3ZpZGVycywgdmlzaXRvcikge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHR5cGVzV2l0aFByb3ZpZGVycy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IHtcbiAgICAgIG5nTW9kdWxlLFxuICAgICAgcHJvdmlkZXJzXG4gICAgfSA9IHR5cGVzV2l0aFByb3ZpZGVyc1tpXTtcbiAgICBkZWVwRm9yRWFjaFByb3ZpZGVyKHByb3ZpZGVycywgcHJvdmlkZXIgPT4ge1xuICAgICAgbmdEZXZNb2RlICYmIHZhbGlkYXRlUHJvdmlkZXIocHJvdmlkZXIsIHByb3ZpZGVycyB8fCBFTVBUWV9BUlJBWSwgbmdNb2R1bGUpO1xuICAgICAgdmlzaXRvcihwcm92aWRlciwgbmdNb2R1bGUpO1xuICAgIH0pO1xuICB9XG59XG5mdW5jdGlvbiB3YWxrUHJvdmlkZXJUcmVlKGNvbnRhaW5lciwgdmlzaXRvciwgcGFyZW50cywgZGVkdXApIHtcbiAgY29udGFpbmVyID0gcmVzb2x2ZUZvcndhcmRSZWYoY29udGFpbmVyKTtcbiAgaWYgKCFjb250YWluZXIpIHJldHVybiBmYWxzZTtcbiAgbGV0IGRlZlR5cGUgPSBudWxsO1xuICBsZXQgaW5qRGVmID0gZ2V0SW5qZWN0b3JEZWYoY29udGFpbmVyKTtcbiAgY29uc3QgY21wRGVmID0gIWluakRlZiAmJiBnZXRDb21wb25lbnREZWYoY29udGFpbmVyKTtcbiAgaWYgKCFpbmpEZWYgJiYgIWNtcERlZikge1xuICAgIGNvbnN0IG5nTW9kdWxlID0gY29udGFpbmVyLm5nTW9kdWxlO1xuICAgIGluakRlZiA9IGdldEluamVjdG9yRGVmKG5nTW9kdWxlKTtcbiAgICBpZiAoaW5qRGVmKSB7XG4gICAgICBkZWZUeXBlID0gbmdNb2R1bGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoY21wRGVmICYmICFjbXBEZWYuc3RhbmRhbG9uZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSBlbHNlIHtcbiAgICBkZWZUeXBlID0gY29udGFpbmVyO1xuICB9XG4gIGlmIChuZ0Rldk1vZGUgJiYgcGFyZW50cy5pbmRleE9mKGRlZlR5cGUpICE9PSAtMSkge1xuICAgIGNvbnN0IGRlZk5hbWUgPSBzdHJpbmdpZnkoZGVmVHlwZSk7XG4gICAgY29uc3QgcGF0aCA9IHBhcmVudHMubWFwKHN0cmluZ2lmeSkuY29uY2F0KGRlZk5hbWUpO1xuICAgIHRocm93IGN5Y2xpY0RlcGVuZGVuY3lFcnJvcldpdGhEZXRhaWxzKGRlZk5hbWUsIHBhdGgpO1xuICB9XG4gIGNvbnN0IGlzRHVwbGljYXRlID0gZGVkdXAuaGFzKGRlZlR5cGUpO1xuICBpZiAoY21wRGVmKSB7XG4gICAgaWYgKGlzRHVwbGljYXRlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGRlZHVwLmFkZChkZWZUeXBlKTtcbiAgICBpZiAoY21wRGVmLmRlcGVuZGVuY2llcykge1xuICAgICAgY29uc3QgZGVwcyA9IHR5cGVvZiBjbXBEZWYuZGVwZW5kZW5jaWVzID09PSAnZnVuY3Rpb24nID8gY21wRGVmLmRlcGVuZGVuY2llcygpIDogY21wRGVmLmRlcGVuZGVuY2llcztcbiAgICAgIGZvciAoY29uc3QgZGVwIG9mIGRlcHMpIHtcbiAgICAgICAgd2Fsa1Byb3ZpZGVyVHJlZShkZXAsIHZpc2l0b3IsIHBhcmVudHMsIGRlZHVwKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSBpZiAoaW5qRGVmKSB7XG4gICAgaWYgKGluakRlZi5pbXBvcnRzICE9IG51bGwgJiYgIWlzRHVwbGljYXRlKSB7XG4gICAgICBuZ0Rldk1vZGUgJiYgcGFyZW50cy5wdXNoKGRlZlR5cGUpO1xuICAgICAgZGVkdXAuYWRkKGRlZlR5cGUpO1xuICAgICAgbGV0IGltcG9ydFR5cGVzV2l0aFByb3ZpZGVycztcbiAgICAgIHRyeSB7XG4gICAgICAgIGRlZXBGb3JFYWNoKGluakRlZi5pbXBvcnRzLCBpbXBvcnRlZCA9PiB7XG4gICAgICAgICAgaWYgKHdhbGtQcm92aWRlclRyZWUoaW1wb3J0ZWQsIHZpc2l0b3IsIHBhcmVudHMsIGRlZHVwKSkge1xuICAgICAgICAgICAgaW1wb3J0VHlwZXNXaXRoUHJvdmlkZXJzIHx8PSBbXTtcbiAgICAgICAgICAgIGltcG9ydFR5cGVzV2l0aFByb3ZpZGVycy5wdXNoKGltcG9ydGVkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgbmdEZXZNb2RlICYmIHBhcmVudHMucG9wKCk7XG4gICAgICB9XG4gICAgICBpZiAoaW1wb3J0VHlwZXNXaXRoUHJvdmlkZXJzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcHJvY2Vzc0luamVjdG9yVHlwZXNXaXRoUHJvdmlkZXJzKGltcG9ydFR5cGVzV2l0aFByb3ZpZGVycywgdmlzaXRvcik7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghaXNEdXBsaWNhdGUpIHtcbiAgICAgIGNvbnN0IGZhY3RvcnkgPSBnZXRGYWN0b3J5RGVmKGRlZlR5cGUpIHx8ICgoKSA9PiBuZXcgZGVmVHlwZSgpKTtcbiAgICAgIHZpc2l0b3Ioe1xuICAgICAgICBwcm92aWRlOiBkZWZUeXBlLFxuICAgICAgICB1c2VGYWN0b3J5OiBmYWN0b3J5LFxuICAgICAgICBkZXBzOiBFTVBUWV9BUlJBWVxuICAgICAgfSwgZGVmVHlwZSk7XG4gICAgICB2aXNpdG9yKHtcbiAgICAgICAgcHJvdmlkZTogSU5KRUNUT1JfREVGX1RZUEVTLFxuICAgICAgICB1c2VWYWx1ZTogZGVmVHlwZSxcbiAgICAgICAgbXVsdGk6IHRydWVcbiAgICAgIH0sIGRlZlR5cGUpO1xuICAgICAgdmlzaXRvcih7XG4gICAgICAgIHByb3ZpZGU6IEVOVklST05NRU5UX0lOSVRJQUxJWkVSLFxuICAgICAgICB1c2VWYWx1ZTogKCkgPT4gybXJtWluamVjdChkZWZUeXBlKSxcbiAgICAgICAgbXVsdGk6IHRydWVcbiAgICAgIH0sIGRlZlR5cGUpO1xuICAgIH1cbiAgICBjb25zdCBkZWZQcm92aWRlcnMgPSBpbmpEZWYucHJvdmlkZXJzO1xuICAgIGlmIChkZWZQcm92aWRlcnMgIT0gbnVsbCAmJiAhaXNEdXBsaWNhdGUpIHtcbiAgICAgIGNvbnN0IGluamVjdG9yVHlwZSA9IGNvbnRhaW5lcjtcbiAgICAgIGRlZXBGb3JFYWNoUHJvdmlkZXIoZGVmUHJvdmlkZXJzLCBwcm92aWRlciA9PiB7XG4gICAgICAgIG5nRGV2TW9kZSAmJiB2YWxpZGF0ZVByb3ZpZGVyKHByb3ZpZGVyLCBkZWZQcm92aWRlcnMsIGluamVjdG9yVHlwZSk7XG4gICAgICAgIHZpc2l0b3IocHJvdmlkZXIsIGluamVjdG9yVHlwZSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiBkZWZUeXBlICE9PSBjb250YWluZXIgJiYgY29udGFpbmVyLnByb3ZpZGVycyAhPT0gdW5kZWZpbmVkO1xufVxuZnVuY3Rpb24gdmFsaWRhdGVQcm92aWRlcihwcm92aWRlciwgcHJvdmlkZXJzLCBjb250YWluZXJUeXBlKSB7XG4gIGlmIChpc1R5cGVQcm92aWRlcihwcm92aWRlcikgfHwgaXNWYWx1ZVByb3ZpZGVyKHByb3ZpZGVyKSB8fCBpc0ZhY3RvcnlQcm92aWRlcihwcm92aWRlcikgfHwgaXNFeGlzdGluZ1Byb3ZpZGVyKHByb3ZpZGVyKSkge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBjbGFzc1JlZiA9IHJlc29sdmVGb3J3YXJkUmVmKHByb3ZpZGVyICYmIChwcm92aWRlci51c2VDbGFzcyB8fCBwcm92aWRlci5wcm92aWRlKSk7XG4gIGlmICghY2xhc3NSZWYpIHtcbiAgICB0aHJvd0ludmFsaWRQcm92aWRlckVycm9yKGNvbnRhaW5lclR5cGUsIHByb3ZpZGVycywgcHJvdmlkZXIpO1xuICB9XG59XG5mdW5jdGlvbiBkZWVwRm9yRWFjaFByb3ZpZGVyKHByb3ZpZGVycywgZm4pIHtcbiAgZm9yIChsZXQgcHJvdmlkZXIgb2YgcHJvdmlkZXJzKSB7XG4gICAgaWYgKGlzRW52aXJvbm1lbnRQcm92aWRlcnMocHJvdmlkZXIpKSB7XG4gICAgICBwcm92aWRlciA9IHByb3ZpZGVyLsm1cHJvdmlkZXJzO1xuICAgIH1cbiAgICBpZiAoQXJyYXkuaXNBcnJheShwcm92aWRlcikpIHtcbiAgICAgIGRlZXBGb3JFYWNoUHJvdmlkZXIocHJvdmlkZXIsIGZuKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZm4ocHJvdmlkZXIpO1xuICAgIH1cbiAgfVxufVxuY29uc3QgVVNFX1ZBTFVFID0gLyojX19QVVJFX18qL2dldENsb3N1cmVTYWZlUHJvcGVydHkoe1xuICBwcm92aWRlOiBTdHJpbmcsXG4gIHVzZVZhbHVlOiBnZXRDbG9zdXJlU2FmZVByb3BlcnR5XG59KTtcbmZ1bmN0aW9uIGlzVmFsdWVQcm92aWRlcih2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlID09ICdvYmplY3QnICYmIFVTRV9WQUxVRSBpbiB2YWx1ZTtcbn1cbmZ1bmN0aW9uIGlzRXhpc3RpbmdQcm92aWRlcih2YWx1ZSkge1xuICByZXR1cm4gISEodmFsdWUgJiYgdmFsdWUudXNlRXhpc3RpbmcpO1xufVxuZnVuY3Rpb24gaXNGYWN0b3J5UHJvdmlkZXIodmFsdWUpIHtcbiAgcmV0dXJuICEhKHZhbHVlICYmIHZhbHVlLnVzZUZhY3RvcnkpO1xufVxuZnVuY3Rpb24gaXNUeXBlUHJvdmlkZXIodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJztcbn1cbmZ1bmN0aW9uIGlzQ2xhc3NQcm92aWRlcih2YWx1ZSkge1xuICByZXR1cm4gISF2YWx1ZS51c2VDbGFzcztcbn1cbmNvbnN0IElOSkVDVE9SX1NDT1BFID0gLyojX19QVVJFX18qL25ldyBJbmplY3Rpb25Ub2tlbih0eXBlb2YgbmdEZXZNb2RlICE9PSAndW5kZWZpbmVkJyAmJiBuZ0Rldk1vZGUgPyAnU2V0IEluamVjdG9yIHNjb3BlLicgOiAnJyk7XG5jb25zdCBOT1RfWUVUID0ge307XG5jb25zdCBDSVJDVUxBUiA9IHt9O1xubGV0IE5VTExfSU5KRUNUT1IgPSB1bmRlZmluZWQ7XG5mdW5jdGlvbiBnZXROdWxsSW5qZWN0b3IoKSB7XG4gIGlmIChOVUxMX0lOSkVDVE9SID09PSB1bmRlZmluZWQpIHtcbiAgICBOVUxMX0lOSkVDVE9SID0gbmV3IE51bGxJbmplY3RvcigpO1xuICB9XG4gIHJldHVybiBOVUxMX0lOSkVDVE9SO1xufVxuY2xhc3MgRW52aXJvbm1lbnRJbmplY3RvciB7fVxuY2xhc3MgUjNJbmplY3RvciBleHRlbmRzIEVudmlyb25tZW50SW5qZWN0b3Ige1xuICBwYXJlbnQ7XG4gIHNvdXJjZTtcbiAgc2NvcGVzO1xuICByZWNvcmRzID0gLyojX19QVVJFX18qL25ldyBNYXAoKTtcbiAgX25nT25EZXN0cm95SG9va3MgPSAvKiNfX1BVUkVfXyovbmV3IFNldCgpO1xuICBfb25EZXN0cm95SG9va3MgPSBbXTtcbiAgZ2V0IGRlc3Ryb3llZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZGVzdHJveWVkO1xuICB9XG4gIF9kZXN0cm95ZWQgPSBmYWxzZTtcbiAgaW5qZWN0b3JEZWZUeXBlcztcbiAgY29uc3RydWN0b3IocHJvdmlkZXJzLCBwYXJlbnQsIHNvdXJjZSwgc2NvcGVzKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLnBhcmVudCA9IHBhcmVudDtcbiAgICB0aGlzLnNvdXJjZSA9IHNvdXJjZTtcbiAgICB0aGlzLnNjb3BlcyA9IHNjb3BlcztcbiAgICBmb3JFYWNoU2luZ2xlUHJvdmlkZXIocHJvdmlkZXJzLCBwcm92aWRlciA9PiB0aGlzLnByb2Nlc3NQcm92aWRlcihwcm92aWRlcikpO1xuICAgIHRoaXMucmVjb3Jkcy5zZXQoSU5KRUNUT1IkMSwgbWFrZVJlY29yZCh1bmRlZmluZWQsIHRoaXMpKTtcbiAgICBpZiAoc2NvcGVzLmhhcygnZW52aXJvbm1lbnQnKSkge1xuICAgICAgdGhpcy5yZWNvcmRzLnNldChFbnZpcm9ubWVudEluamVjdG9yLCBtYWtlUmVjb3JkKHVuZGVmaW5lZCwgdGhpcykpO1xuICAgIH1cbiAgICBjb25zdCByZWNvcmQgPSB0aGlzLnJlY29yZHMuZ2V0KElOSkVDVE9SX1NDT1BFKTtcbiAgICBpZiAocmVjb3JkICE9IG51bGwgJiYgdHlwZW9mIHJlY29yZC52YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRoaXMuc2NvcGVzLmFkZChyZWNvcmQudmFsdWUpO1xuICAgIH1cbiAgICB0aGlzLmluamVjdG9yRGVmVHlwZXMgPSBuZXcgU2V0KHRoaXMuZ2V0KElOSkVDVE9SX0RFRl9UWVBFUywgRU1QVFlfQVJSQVksIHtcbiAgICAgIHNlbGY6IHRydWVcbiAgICB9KSk7XG4gIH1cbiAgcmV0cmlldmUodG9rZW4sIG9wdGlvbnMpIHtcbiAgICBjb25zdCBmbGFncyA9IGNvbnZlcnRUb0JpdEZsYWdzKG9wdGlvbnMpIHx8IDA7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB0aGlzLmdldCh0b2tlbiwgVEhST1dfSUZfTk9UX0ZPVU5ELCBmbGFncyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKGlzTm90Rm91bmQkMShlKSkge1xuICAgICAgICByZXR1cm4gZTtcbiAgICAgIH1cbiAgICAgIHRocm93IGU7XG4gICAgfVxuICB9XG4gIGRlc3Ryb3koKSB7XG4gICAgYXNzZXJ0Tm90RGVzdHJveWVkKHRoaXMpO1xuICAgIHRoaXMuX2Rlc3Ryb3llZCA9IHRydWU7XG4gICAgY29uc3QgcHJldkNvbnN1bWVyID0gc2V0QWN0aXZlQ29uc3VtZXIobnVsbCk7XG4gICAgdHJ5IHtcbiAgICAgIGZvciAoY29uc3Qgc2VydmljZSBvZiB0aGlzLl9uZ09uRGVzdHJveUhvb2tzKSB7XG4gICAgICAgIHNlcnZpY2UubmdPbkRlc3Ryb3koKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG9uRGVzdHJveUhvb2tzID0gdGhpcy5fb25EZXN0cm95SG9va3M7XG4gICAgICB0aGlzLl9vbkRlc3Ryb3lIb29rcyA9IFtdO1xuICAgICAgZm9yIChjb25zdCBob29rIG9mIG9uRGVzdHJveUhvb2tzKSB7XG4gICAgICAgIGhvb2soKTtcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5yZWNvcmRzLmNsZWFyKCk7XG4gICAgICB0aGlzLl9uZ09uRGVzdHJveUhvb2tzLmNsZWFyKCk7XG4gICAgICB0aGlzLmluamVjdG9yRGVmVHlwZXMuY2xlYXIoKTtcbiAgICAgIHNldEFjdGl2ZUNvbnN1bWVyKHByZXZDb25zdW1lcik7XG4gICAgfVxuICB9XG4gIG9uRGVzdHJveShjYWxsYmFjaykge1xuICAgIGFzc2VydE5vdERlc3Ryb3llZCh0aGlzKTtcbiAgICB0aGlzLl9vbkRlc3Ryb3lIb29rcy5wdXNoKGNhbGxiYWNrKTtcbiAgICByZXR1cm4gKCkgPT4gdGhpcy5yZW1vdmVPbkRlc3Ryb3koY2FsbGJhY2spO1xuICB9XG4gIHJ1bkluQ29udGV4dChmbikge1xuICAgIGFzc2VydE5vdERlc3Ryb3llZCh0aGlzKTtcbiAgICBjb25zdCBwcmV2aW91c0luamVjdG9yID0gc2V0Q3VycmVudEluamVjdG9yKHRoaXMpO1xuICAgIGNvbnN0IHByZXZpb3VzSW5qZWN0SW1wbGVtZW50YXRpb24gPSBzZXRJbmplY3RJbXBsZW1lbnRhdGlvbih1bmRlZmluZWQpO1xuICAgIGxldCBwcmV2SW5qZWN0Q29udGV4dDtcbiAgICBpZiAobmdEZXZNb2RlKSB7XG4gICAgICBwcmV2SW5qZWN0Q29udGV4dCA9IHNldEluamVjdG9yUHJvZmlsZXJDb250ZXh0KHtcbiAgICAgICAgaW5qZWN0b3I6IHRoaXMsXG4gICAgICAgIHRva2VuOiBudWxsXG4gICAgICB9KTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBmbigpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBzZXRDdXJyZW50SW5qZWN0b3IocHJldmlvdXNJbmplY3Rvcik7XG4gICAgICBzZXRJbmplY3RJbXBsZW1lbnRhdGlvbihwcmV2aW91c0luamVjdEltcGxlbWVudGF0aW9uKTtcbiAgICAgIG5nRGV2TW9kZSAmJiBzZXRJbmplY3RvclByb2ZpbGVyQ29udGV4dChwcmV2SW5qZWN0Q29udGV4dCk7XG4gICAgfVxuICB9XG4gIGdldCh0b2tlbiwgbm90Rm91bmRWYWx1ZSA9IFRIUk9XX0lGX05PVF9GT1VORCwgb3B0aW9ucykge1xuICAgIGFzc2VydE5vdERlc3Ryb3llZCh0aGlzKTtcbiAgICBpZiAodG9rZW4uaGFzT3duUHJvcGVydHkoTkdfRU5WX0lEKSkge1xuICAgICAgcmV0dXJuIHRva2VuW05HX0VOVl9JRF0odGhpcyk7XG4gICAgfVxuICAgIGNvbnN0IGZsYWdzID0gY29udmVydFRvQml0RmxhZ3Mob3B0aW9ucyk7XG4gICAgbGV0IHByZXZJbmplY3RDb250ZXh0O1xuICAgIGlmIChuZ0Rldk1vZGUpIHtcbiAgICAgIHByZXZJbmplY3RDb250ZXh0ID0gc2V0SW5qZWN0b3JQcm9maWxlckNvbnRleHQoe1xuICAgICAgICBpbmplY3RvcjogdGhpcyxcbiAgICAgICAgdG9rZW46IHRva2VuXG4gICAgICB9KTtcbiAgICB9XG4gICAgY29uc3QgcHJldmlvdXNJbmplY3RvciA9IHNldEN1cnJlbnRJbmplY3Rvcih0aGlzKTtcbiAgICBjb25zdCBwcmV2aW91c0luamVjdEltcGxlbWVudGF0aW9uID0gc2V0SW5qZWN0SW1wbGVtZW50YXRpb24odW5kZWZpbmVkKTtcbiAgICB0cnkge1xuICAgICAgaWYgKCEoZmxhZ3MgJiA0KSkge1xuICAgICAgICBsZXQgcmVjb3JkID0gdGhpcy5yZWNvcmRzLmdldCh0b2tlbik7XG4gICAgICAgIGlmIChyZWNvcmQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGNvbnN0IGRlZiA9IGNvdWxkQmVJbmplY3RhYmxlVHlwZSh0b2tlbikgJiYgZ2V0SW5qZWN0YWJsZURlZih0b2tlbik7XG4gICAgICAgICAgaWYgKGRlZiAmJiB0aGlzLmluamVjdGFibGVEZWZJblNjb3BlKGRlZikpIHtcbiAgICAgICAgICAgIGlmIChuZ0Rldk1vZGUpIHtcbiAgICAgICAgICAgICAgcnVuSW5JbmplY3RvclByb2ZpbGVyQ29udGV4dCh0aGlzLCB0b2tlbiwgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGVtaXRQcm92aWRlckNvbmZpZ3VyZWRFdmVudCh0b2tlbik7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVjb3JkID0gbWFrZVJlY29yZChpbmplY3RhYmxlRGVmT3JJbmplY3RvckRlZkZhY3RvcnkodG9rZW4pLCBOT1RfWUVUKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVjb3JkID0gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5yZWNvcmRzLnNldCh0b2tlbiwgcmVjb3JkKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVjb3JkICE9IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5oeWRyYXRlKHRva2VuLCByZWNvcmQsIGZsYWdzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29uc3QgbmV4dEluamVjdG9yID0gIShmbGFncyAmIDIpID8gdGhpcy5wYXJlbnQgOiBnZXROdWxsSW5qZWN0b3IoKTtcbiAgICAgIG5vdEZvdW5kVmFsdWUgPSBmbGFncyAmIDggJiYgbm90Rm91bmRWYWx1ZSA9PT0gVEhST1dfSUZfTk9UX0ZPVU5EID8gbnVsbCA6IG5vdEZvdW5kVmFsdWU7XG4gICAgICByZXR1cm4gbmV4dEluamVjdG9yLmdldCh0b2tlbiwgbm90Rm91bmRWYWx1ZSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnN0IGVycm9yQ29kZSA9IGdldFJ1bnRpbWVFcnJvckNvZGUoZXJyb3IpO1xuICAgICAgaWYgKGVycm9yQ29kZSA9PT0gLTIwMCB8fCBlcnJvckNvZGUgPT09IC0yMDEpIHtcbiAgICAgICAgaWYgKG5nRGV2TW9kZSkge1xuICAgICAgICAgIHByZXBlbmRUb2tlblRvRGVwZW5kZW5jeVBhdGgoZXJyb3IsIHRva2VuKTtcbiAgICAgICAgICBpZiAocHJldmlvdXNJbmplY3Rvcikge1xuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IGF1Z21lbnRSdW50aW1lRXJyb3IoZXJyb3IsIHRoaXMuc291cmNlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFcnJvcihlcnJvckNvZGUsIG51bGwpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2V0SW5qZWN0SW1wbGVtZW50YXRpb24ocHJldmlvdXNJbmplY3RJbXBsZW1lbnRhdGlvbik7XG4gICAgICBzZXRDdXJyZW50SW5qZWN0b3IocHJldmlvdXNJbmplY3Rvcik7XG4gICAgICBuZ0Rldk1vZGUgJiYgc2V0SW5qZWN0b3JQcm9maWxlckNvbnRleHQocHJldkluamVjdENvbnRleHQpO1xuICAgIH1cbiAgfVxuICByZXNvbHZlSW5qZWN0b3JJbml0aWFsaXplcnMoKSB7XG4gICAgY29uc3QgcHJldkNvbnN1bWVyID0gc2V0QWN0aXZlQ29uc3VtZXIobnVsbCk7XG4gICAgY29uc3QgcHJldmlvdXNJbmplY3RvciA9IHNldEN1cnJlbnRJbmplY3Rvcih0aGlzKTtcbiAgICBjb25zdCBwcmV2aW91c0luamVjdEltcGxlbWVudGF0aW9uID0gc2V0SW5qZWN0SW1wbGVtZW50YXRpb24odW5kZWZpbmVkKTtcbiAgICBsZXQgcHJldkluamVjdENvbnRleHQ7XG4gICAgaWYgKG5nRGV2TW9kZSkge1xuICAgICAgcHJldkluamVjdENvbnRleHQgPSBzZXRJbmplY3RvclByb2ZpbGVyQ29udGV4dCh7XG4gICAgICAgIGluamVjdG9yOiB0aGlzLFxuICAgICAgICB0b2tlbjogbnVsbFxuICAgICAgfSk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBjb25zdCBpbml0aWFsaXplcnMgPSB0aGlzLmdldChFTlZJUk9OTUVOVF9JTklUSUFMSVpFUiwgRU1QVFlfQVJSQVksIHtcbiAgICAgICAgc2VsZjogdHJ1ZVxuICAgICAgfSk7XG4gICAgICBpZiAobmdEZXZNb2RlICYmICFBcnJheS5pc0FycmF5KGluaXRpYWxpemVycykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFcnJvcigtMjA5LCAnVW5leHBlY3RlZCB0eXBlIG9mIHRoZSBgRU5WSVJPTk1FTlRfSU5JVElBTElaRVJgIHRva2VuIHZhbHVlICcgKyBgKGV4cGVjdGVkIGFuIGFycmF5LCBidXQgZ290ICR7dHlwZW9mIGluaXRpYWxpemVyc30pLiBgICsgJ1BsZWFzZSBjaGVjayB0aGF0IHRoZSBgRU5WSVJPTk1FTlRfSU5JVElBTElaRVJgIHRva2VuIGlzIGNvbmZpZ3VyZWQgYXMgYSAnICsgJ2BtdWx0aTogdHJ1ZWAgcHJvdmlkZXIuJyk7XG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IGluaXRpYWxpemVyIG9mIGluaXRpYWxpemVycykge1xuICAgICAgICBpbml0aWFsaXplcigpO1xuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICBzZXRDdXJyZW50SW5qZWN0b3IocHJldmlvdXNJbmplY3Rvcik7XG4gICAgICBzZXRJbmplY3RJbXBsZW1lbnRhdGlvbihwcmV2aW91c0luamVjdEltcGxlbWVudGF0aW9uKTtcbiAgICAgIG5nRGV2TW9kZSAmJiBzZXRJbmplY3RvclByb2ZpbGVyQ29udGV4dChwcmV2SW5qZWN0Q29udGV4dCk7XG4gICAgICBzZXRBY3RpdmVDb25zdW1lcihwcmV2Q29uc3VtZXIpO1xuICAgIH1cbiAgfVxuICB0b1N0cmluZygpIHtcbiAgICBpZiAobmdEZXZNb2RlKSB7XG4gICAgICBjb25zdCB0b2tlbnMgPSBbXTtcbiAgICAgIGNvbnN0IHJlY29yZHMgPSB0aGlzLnJlY29yZHM7XG4gICAgICBmb3IgKGNvbnN0IHRva2VuIG9mIHJlY29yZHMua2V5cygpKSB7XG4gICAgICAgIHRva2Vucy5wdXNoKHN0cmluZ2lmeSh0b2tlbikpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGBSM0luamVjdG9yWyR7dG9rZW5zLmpvaW4oJywgJyl9XWA7XG4gICAgfVxuICAgIHJldHVybiAnUjNJbmplY3RvclsuLi5dJztcbiAgfVxuICBwcm9jZXNzUHJvdmlkZXIocHJvdmlkZXIpIHtcbiAgICBwcm92aWRlciA9IHJlc29sdmVGb3J3YXJkUmVmKHByb3ZpZGVyKTtcbiAgICBsZXQgdG9rZW4gPSBpc1R5cGVQcm92aWRlcihwcm92aWRlcikgPyBwcm92aWRlciA6IHJlc29sdmVGb3J3YXJkUmVmKHByb3ZpZGVyICYmIHByb3ZpZGVyLnByb3ZpZGUpO1xuICAgIGNvbnN0IHJlY29yZCA9IHByb3ZpZGVyVG9SZWNvcmQocHJvdmlkZXIpO1xuICAgIGlmIChuZ0Rldk1vZGUpIHtcbiAgICAgIHJ1bkluSW5qZWN0b3JQcm9maWxlckNvbnRleHQodGhpcywgdG9rZW4sICgpID0+IHtcbiAgICAgICAgaWYgKGlzVmFsdWVQcm92aWRlcihwcm92aWRlcikpIHtcbiAgICAgICAgICBlbWl0SW5qZWN0b3JUb0NyZWF0ZUluc3RhbmNlRXZlbnQodG9rZW4pO1xuICAgICAgICAgIGVtaXRJbnN0YW5jZUNyZWF0ZWRCeUluamVjdG9yRXZlbnQocHJvdmlkZXIudXNlVmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGVtaXRQcm92aWRlckNvbmZpZ3VyZWRFdmVudChwcm92aWRlcik7XG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKCFpc1R5cGVQcm92aWRlcihwcm92aWRlcikgJiYgcHJvdmlkZXIubXVsdGkgPT09IHRydWUpIHtcbiAgICAgIGxldCBtdWx0aVJlY29yZCA9IHRoaXMucmVjb3Jkcy5nZXQodG9rZW4pO1xuICAgICAgaWYgKG11bHRpUmVjb3JkKSB7XG4gICAgICAgIGlmIChuZ0Rldk1vZGUgJiYgbXVsdGlSZWNvcmQubXVsdGkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRocm93TWl4ZWRNdWx0aVByb3ZpZGVyRXJyb3IoKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbXVsdGlSZWNvcmQgPSBtYWtlUmVjb3JkKHVuZGVmaW5lZCwgTk9UX1lFVCwgdHJ1ZSk7XG4gICAgICAgIG11bHRpUmVjb3JkLmZhY3RvcnkgPSAoKSA9PiBpbmplY3RBcmdzKG11bHRpUmVjb3JkLm11bHRpKTtcbiAgICAgICAgdGhpcy5yZWNvcmRzLnNldCh0b2tlbiwgbXVsdGlSZWNvcmQpO1xuICAgICAgfVxuICAgICAgdG9rZW4gPSBwcm92aWRlcjtcbiAgICAgIG11bHRpUmVjb3JkLm11bHRpLnB1c2gocHJvdmlkZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAobmdEZXZNb2RlKSB7XG4gICAgICAgIGNvbnN0IGV4aXN0aW5nID0gdGhpcy5yZWNvcmRzLmdldCh0b2tlbik7XG4gICAgICAgIGlmIChleGlzdGluZyAmJiBleGlzdGluZy5tdWx0aSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhyb3dNaXhlZE11bHRpUHJvdmlkZXJFcnJvcigpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMucmVjb3Jkcy5zZXQodG9rZW4sIHJlY29yZCk7XG4gIH1cbiAgaHlkcmF0ZSh0b2tlbiwgcmVjb3JkLCBmbGFncykge1xuICAgIGNvbnN0IHByZXZDb25zdW1lciA9IHNldEFjdGl2ZUNvbnN1bWVyKG51bGwpO1xuICAgIHRyeSB7XG4gICAgICBpZiAocmVjb3JkLnZhbHVlID09PSBDSVJDVUxBUikge1xuICAgICAgICB0aHJvdyBjeWNsaWNEZXBlbmRlbmN5RXJyb3IobmdEZXZNb2RlID8gc3RyaW5naWZ5KHRva2VuKSA6ICcnKTtcbiAgICAgIH0gZWxzZSBpZiAocmVjb3JkLnZhbHVlID09PSBOT1RfWUVUKSB7XG4gICAgICAgIHJlY29yZC52YWx1ZSA9IENJUkNVTEFSO1xuICAgICAgICBpZiAobmdEZXZNb2RlKSB7XG4gICAgICAgICAgcnVuSW5JbmplY3RvclByb2ZpbGVyQ29udGV4dCh0aGlzLCB0b2tlbiwgKCkgPT4ge1xuICAgICAgICAgICAgZW1pdEluamVjdG9yVG9DcmVhdGVJbnN0YW5jZUV2ZW50KHRva2VuKTtcbiAgICAgICAgICAgIHJlY29yZC52YWx1ZSA9IHJlY29yZC5mYWN0b3J5KHVuZGVmaW5lZCwgZmxhZ3MpO1xuICAgICAgICAgICAgZW1pdEluc3RhbmNlQ3JlYXRlZEJ5SW5qZWN0b3JFdmVudChyZWNvcmQudmFsdWUpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlY29yZC52YWx1ZSA9IHJlY29yZC5mYWN0b3J5KHVuZGVmaW5lZCwgZmxhZ3MpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIHJlY29yZC52YWx1ZSA9PT0gJ29iamVjdCcgJiYgcmVjb3JkLnZhbHVlICYmIGhhc09uRGVzdHJveShyZWNvcmQudmFsdWUpKSB7XG4gICAgICAgIHRoaXMuX25nT25EZXN0cm95SG9va3MuYWRkKHJlY29yZC52YWx1ZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVjb3JkLnZhbHVlO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBzZXRBY3RpdmVDb25zdW1lcihwcmV2Q29uc3VtZXIpO1xuICAgIH1cbiAgfVxuICBpbmplY3RhYmxlRGVmSW5TY29wZShkZWYpIHtcbiAgICBpZiAoIWRlZi5wcm92aWRlZEluKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IHByb3ZpZGVkSW4gPSByZXNvbHZlRm9yd2FyZFJlZihkZWYucHJvdmlkZWRJbik7XG4gICAgaWYgKHR5cGVvZiBwcm92aWRlZEluID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIHByb3ZpZGVkSW4gPT09ICdhbnknIHx8IHRoaXMuc2NvcGVzLmhhcyhwcm92aWRlZEluKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuaW5qZWN0b3JEZWZUeXBlcy5oYXMocHJvdmlkZWRJbik7XG4gICAgfVxuICB9XG4gIHJlbW92ZU9uRGVzdHJveShjYWxsYmFjaykge1xuICAgIGNvbnN0IGRlc3Ryb3lDQklkeCA9IHRoaXMuX29uRGVzdHJveUhvb2tzLmluZGV4T2YoY2FsbGJhY2spO1xuICAgIGlmIChkZXN0cm95Q0JJZHggIT09IC0xKSB7XG4gICAgICB0aGlzLl9vbkRlc3Ryb3lIb29rcy5zcGxpY2UoZGVzdHJveUNCSWR4LCAxKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGluamVjdGFibGVEZWZPckluamVjdG9yRGVmRmFjdG9yeSh0b2tlbikge1xuICBjb25zdCBpbmplY3RhYmxlRGVmID0gZ2V0SW5qZWN0YWJsZURlZih0b2tlbik7XG4gIGNvbnN0IGZhY3RvcnkgPSBpbmplY3RhYmxlRGVmICE9PSBudWxsID8gaW5qZWN0YWJsZURlZi5mYWN0b3J5IDogZ2V0RmFjdG9yeURlZih0b2tlbik7XG4gIGlmIChmYWN0b3J5ICE9PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhY3Rvcnk7XG4gIH1cbiAgaWYgKHRva2VuIGluc3RhbmNlb2YgSW5qZWN0aW9uVG9rZW4pIHtcbiAgICB0aHJvdyBuZXcgUnVudGltZUVycm9yKC0yMDQsIG5nRGV2TW9kZSAmJiBgVG9rZW4gJHtzdHJpbmdpZnkodG9rZW4pfSBpcyBtaXNzaW5nIGEgybVwcm92IGRlZmluaXRpb24uYCk7XG4gIH1cbiAgaWYgKHRva2VuIGluc3RhbmNlb2YgRnVuY3Rpb24pIHtcbiAgICByZXR1cm4gZ2V0VW5kZWNvcmF0ZWRJbmplY3RhYmxlRmFjdG9yeSh0b2tlbik7XG4gIH1cbiAgdGhyb3cgbmV3IFJ1bnRpbWVFcnJvcigtMjA0LCBuZ0Rldk1vZGUgJiYgJ3VucmVhY2hhYmxlJyk7XG59XG5mdW5jdGlvbiBnZXRVbmRlY29yYXRlZEluamVjdGFibGVGYWN0b3J5KHRva2VuKSB7XG4gIGNvbnN0IHBhcmFtTGVuZ3RoID0gdG9rZW4ubGVuZ3RoO1xuICBpZiAocGFyYW1MZW5ndGggPiAwKSB7XG4gICAgdGhyb3cgbmV3IFJ1bnRpbWVFcnJvcigtMjA0LCBuZ0Rldk1vZGUgJiYgYENhbid0IHJlc29sdmUgYWxsIHBhcmFtZXRlcnMgZm9yICR7c3RyaW5naWZ5KHRva2VuKX06ICgke25ld0FycmF5KHBhcmFtTGVuZ3RoLCAnPycpLmpvaW4oJywgJyl9KS5gKTtcbiAgfVxuICBjb25zdCBpbmhlcml0ZWRJbmplY3RhYmxlRGVmID0gZ2V0SW5oZXJpdGVkSW5qZWN0YWJsZURlZih0b2tlbik7XG4gIGlmIChpbmhlcml0ZWRJbmplY3RhYmxlRGVmICE9PSBudWxsKSB7XG4gICAgcmV0dXJuICgpID0+IGluaGVyaXRlZEluamVjdGFibGVEZWYuZmFjdG9yeSh0b2tlbik7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuICgpID0+IG5ldyB0b2tlbigpO1xuICB9XG59XG5mdW5jdGlvbiBwcm92aWRlclRvUmVjb3JkKHByb3ZpZGVyKSB7XG4gIGlmIChpc1ZhbHVlUHJvdmlkZXIocHJvdmlkZXIpKSB7XG4gICAgcmV0dXJuIG1ha2VSZWNvcmQodW5kZWZpbmVkLCBwcm92aWRlci51c2VWYWx1ZSk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgZmFjdG9yeSA9IHByb3ZpZGVyVG9GYWN0b3J5KHByb3ZpZGVyKTtcbiAgICByZXR1cm4gbWFrZVJlY29yZChmYWN0b3J5LCBOT1RfWUVUKTtcbiAgfVxufVxuZnVuY3Rpb24gcHJvdmlkZXJUb0ZhY3RvcnkocHJvdmlkZXIsIG5nTW9kdWxlVHlwZSwgcHJvdmlkZXJzKSB7XG4gIGxldCBmYWN0b3J5ID0gdW5kZWZpbmVkO1xuICBpZiAobmdEZXZNb2RlICYmIGlzRW52aXJvbm1lbnRQcm92aWRlcnMocHJvdmlkZXIpKSB7XG4gICAgdGhyb3dJbnZhbGlkUHJvdmlkZXJFcnJvcih1bmRlZmluZWQsIHByb3ZpZGVycywgcHJvdmlkZXIpO1xuICB9XG4gIGlmIChpc1R5cGVQcm92aWRlcihwcm92aWRlcikpIHtcbiAgICBjb25zdCB1bndyYXBwZWRQcm92aWRlciA9IHJlc29sdmVGb3J3YXJkUmVmKHByb3ZpZGVyKTtcbiAgICByZXR1cm4gZ2V0RmFjdG9yeURlZih1bndyYXBwZWRQcm92aWRlcikgfHwgaW5qZWN0YWJsZURlZk9ySW5qZWN0b3JEZWZGYWN0b3J5KHVud3JhcHBlZFByb3ZpZGVyKTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoaXNWYWx1ZVByb3ZpZGVyKHByb3ZpZGVyKSkge1xuICAgICAgZmFjdG9yeSA9ICgpID0+IHJlc29sdmVGb3J3YXJkUmVmKHByb3ZpZGVyLnVzZVZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKGlzRmFjdG9yeVByb3ZpZGVyKHByb3ZpZGVyKSkge1xuICAgICAgZmFjdG9yeSA9ICgpID0+IHByb3ZpZGVyLnVzZUZhY3RvcnkoLi4uaW5qZWN0QXJncyhwcm92aWRlci5kZXBzIHx8IFtdKSk7XG4gICAgfSBlbHNlIGlmIChpc0V4aXN0aW5nUHJvdmlkZXIocHJvdmlkZXIpKSB7XG4gICAgICBmYWN0b3J5ID0gKF8sIGZsYWdzKSA9PiDJtcm1aW5qZWN0KHJlc29sdmVGb3J3YXJkUmVmKHByb3ZpZGVyLnVzZUV4aXN0aW5nKSwgZmxhZ3MgIT09IHVuZGVmaW5lZCAmJiBmbGFncyAmIDggPyA4IDogdW5kZWZpbmVkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgY2xhc3NSZWYgPSByZXNvbHZlRm9yd2FyZFJlZihwcm92aWRlciAmJiAocHJvdmlkZXIudXNlQ2xhc3MgfHwgcHJvdmlkZXIucHJvdmlkZSkpO1xuICAgICAgaWYgKG5nRGV2TW9kZSAmJiAhY2xhc3NSZWYpIHtcbiAgICAgICAgdGhyb3dJbnZhbGlkUHJvdmlkZXJFcnJvcihuZ01vZHVsZVR5cGUsIHByb3ZpZGVycywgcHJvdmlkZXIpO1xuICAgICAgfVxuICAgICAgaWYgKGhhc0RlcHMocHJvdmlkZXIpKSB7XG4gICAgICAgIGZhY3RvcnkgPSAoKSA9PiBuZXcgY2xhc3NSZWYoLi4uaW5qZWN0QXJncyhwcm92aWRlci5kZXBzKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZ2V0RmFjdG9yeURlZihjbGFzc1JlZikgfHwgaW5qZWN0YWJsZURlZk9ySW5qZWN0b3JEZWZGYWN0b3J5KGNsYXNzUmVmKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhY3Rvcnk7XG59XG5mdW5jdGlvbiBhc3NlcnROb3REZXN0cm95ZWQoaW5qZWN0b3IpIHtcbiAgaWYgKGluamVjdG9yLmRlc3Ryb3llZCkge1xuICAgIHRocm93IG5ldyBSdW50aW1lRXJyb3IoLTIwNSwgbmdEZXZNb2RlICYmICdJbmplY3RvciBoYXMgYWxyZWFkeSBiZWVuIGRlc3Ryb3llZC4nKTtcbiAgfVxufVxuZnVuY3Rpb24gbWFrZVJlY29yZChmYWN0b3J5LCB2YWx1ZSwgbXVsdGkgPSBmYWxzZSkge1xuICByZXR1cm4ge1xuICAgIGZhY3Rvcnk6IGZhY3RvcnksXG4gICAgdmFsdWU6IHZhbHVlLFxuICAgIG11bHRpOiBtdWx0aSA/IFtdIDogdW5kZWZpbmVkXG4gIH07XG59XG5mdW5jdGlvbiBoYXNEZXBzKHZhbHVlKSB7XG4gIHJldHVybiAhIXZhbHVlLmRlcHM7XG59XG5mdW5jdGlvbiBoYXNPbkRlc3Ryb3kodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIHZhbHVlLm5nT25EZXN0cm95ID09PSAnZnVuY3Rpb24nO1xufVxuZnVuY3Rpb24gY291bGRCZUluamVjdGFibGVUeXBlKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZS5uZ01ldGFkYXRhTmFtZSA9PT0gJ0luamVjdGlvblRva2VuJztcbn1cbmZ1bmN0aW9uIGZvckVhY2hTaW5nbGVQcm92aWRlcihwcm92aWRlcnMsIGZuKSB7XG4gIGZvciAoY29uc3QgcHJvdmlkZXIgb2YgcHJvdmlkZXJzKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkocHJvdmlkZXIpKSB7XG4gICAgICBmb3JFYWNoU2luZ2xlUHJvdmlkZXIocHJvdmlkZXIsIGZuKTtcbiAgICB9IGVsc2UgaWYgKHByb3ZpZGVyICYmIGlzRW52aXJvbm1lbnRQcm92aWRlcnMocHJvdmlkZXIpKSB7XG4gICAgICBmb3JFYWNoU2luZ2xlUHJvdmlkZXIocHJvdmlkZXIuybVwcm92aWRlcnMsIGZuKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZm4ocHJvdmlkZXIpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gcnVuSW5JbmplY3Rpb25Db250ZXh0KGluamVjdG9yLCBmbikge1xuICBsZXQgaW50ZXJuYWxJbmplY3RvcjtcbiAgaWYgKGluamVjdG9yIGluc3RhbmNlb2YgUjNJbmplY3Rvcikge1xuICAgIGFzc2VydE5vdERlc3Ryb3llZChpbmplY3Rvcik7XG4gICAgaW50ZXJuYWxJbmplY3RvciA9IGluamVjdG9yO1xuICB9IGVsc2Uge1xuICAgIGludGVybmFsSW5qZWN0b3IgPSBuZXcgUmV0cmlldmluZ0luamVjdG9yKGluamVjdG9yKTtcbiAgfVxuICBsZXQgcHJldkluamVjdG9yUHJvZmlsZXJDb250ZXh0O1xuICBpZiAobmdEZXZNb2RlKSB7XG4gICAgcHJldkluamVjdG9yUHJvZmlsZXJDb250ZXh0ID0gc2V0SW5qZWN0b3JQcm9maWxlckNvbnRleHQoe1xuICAgICAgaW5qZWN0b3IsXG4gICAgICB0b2tlbjogbnVsbFxuICAgIH0pO1xuICB9XG4gIGNvbnN0IHByZXZJbmplY3RvciA9IHNldEN1cnJlbnRJbmplY3RvcihpbnRlcm5hbEluamVjdG9yKTtcbiAgY29uc3QgcHJldmlvdXNJbmplY3RJbXBsZW1lbnRhdGlvbiA9IHNldEluamVjdEltcGxlbWVudGF0aW9uKHVuZGVmaW5lZCk7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGZuKCk7XG4gIH0gZmluYWxseSB7XG4gICAgc2V0Q3VycmVudEluamVjdG9yKHByZXZJbmplY3Rvcik7XG4gICAgbmdEZXZNb2RlICYmIHNldEluamVjdG9yUHJvZmlsZXJDb250ZXh0KHByZXZJbmplY3RvclByb2ZpbGVyQ29udGV4dCk7XG4gICAgc2V0SW5qZWN0SW1wbGVtZW50YXRpb24ocHJldmlvdXNJbmplY3RJbXBsZW1lbnRhdGlvbik7XG4gIH1cbn1cbmZ1bmN0aW9uIGlzSW5JbmplY3Rpb25Db250ZXh0KCkge1xuICByZXR1cm4gZ2V0SW5qZWN0SW1wbGVtZW50YXRpb24oKSAhPT0gdW5kZWZpbmVkIHx8IGdldEN1cnJlbnRJbmplY3RvcigpICE9IG51bGw7XG59XG5mdW5jdGlvbiBhc3NlcnRJbkluamVjdGlvbkNvbnRleHQoZGVidWdGbikge1xuICBpZiAoIWlzSW5JbmplY3Rpb25Db250ZXh0KCkpIHtcbiAgICB0aHJvdyBuZXcgUnVudGltZUVycm9yKC0yMDMsIG5nRGV2TW9kZSAmJiBkZWJ1Z0ZuLm5hbWUgKyAnKCkgY2FuIG9ubHkgYmUgdXNlZCB3aXRoaW4gYW4gaW5qZWN0aW9uIGNvbnRleHQgc3VjaCBhcyBhIGNvbnN0cnVjdG9yLCBhIGZhY3RvcnkgZnVuY3Rpb24sIGEgZmllbGQgaW5pdGlhbGl6ZXIsIG9yIGEgZnVuY3Rpb24gdXNlZCB3aXRoIGBydW5JbkluamVjdGlvbkNvbnRleHRgJyk7XG4gIH1cbn1cbmNvbnN0IEhPU1QgPSAwO1xuY29uc3QgVFZJRVcgPSAxO1xuY29uc3QgRkxBR1MgPSAyO1xuY29uc3QgUEFSRU5UID0gMztcbmNvbnN0IE5FWFQgPSA0O1xuY29uc3QgVF9IT1NUID0gNTtcbmNvbnN0IEhZRFJBVElPTiA9IDY7XG5jb25zdCBDTEVBTlVQID0gNztcbmNvbnN0IENPTlRFWFQgPSA4O1xuY29uc3QgSU5KRUNUT1IgPSA5O1xuY29uc3QgRU5WSVJPTk1FTlQgPSAxMDtcbmNvbnN0IFJFTkRFUkVSID0gMTE7XG5jb25zdCBDSElMRF9IRUFEID0gMTI7XG5jb25zdCBDSElMRF9UQUlMID0gMTM7XG5jb25zdCBERUNMQVJBVElPTl9WSUVXID0gMTQ7XG5jb25zdCBERUNMQVJBVElPTl9DT01QT05FTlRfVklFVyA9IDE1O1xuY29uc3QgREVDTEFSQVRJT05fTENPTlRBSU5FUiA9IDE2O1xuY29uc3QgUFJFT1JERVJfSE9PS19GTEFHUyA9IDE3O1xuY29uc3QgUVVFUklFUyA9IDE4O1xuY29uc3QgSUQgPSAxOTtcbmNvbnN0IEVNQkVEREVEX1ZJRVdfSU5KRUNUT1IgPSAyMDtcbmNvbnN0IE9OX0RFU1RST1lfSE9PS1MgPSAyMTtcbmNvbnN0IEVGRkVDVFNfVE9fU0NIRURVTEUgPSAyMjtcbmNvbnN0IEVGRkVDVFMgPSAyMztcbmNvbnN0IFJFQUNUSVZFX1RFTVBMQVRFX0NPTlNVTUVSID0gMjQ7XG5jb25zdCBBRlRFUl9SRU5ERVJfU0VRVUVOQ0VTX1RPX0FERCA9IDI1O1xuY29uc3QgQU5JTUFUSU9OUyA9IDI2O1xuY29uc3QgSEVBREVSX09GRlNFVCA9IDI3O1xuY29uc3QgVFlQRSA9IDE7XG5jb25zdCBERUhZRFJBVEVEX1ZJRVdTID0gNjtcbmNvbnN0IE5BVElWRSA9IDc7XG5jb25zdCBWSUVXX1JFRlMgPSA4O1xuY29uc3QgTU9WRURfVklFV1MgPSA5O1xuY29uc3QgQ09OVEFJTkVSX0hFQURFUl9PRkZTRVQgPSAxMDtcbmZ1bmN0aW9uIGlzTFZpZXcodmFsdWUpIHtcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHR5cGVvZiB2YWx1ZVtUWVBFXSA9PT0gJ29iamVjdCc7XG59XG5mdW5jdGlvbiBpc0xDb250YWluZXIodmFsdWUpIHtcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlW1RZUEVdID09PSB0cnVlO1xufVxuZnVuY3Rpb24gaXNDb250ZW50UXVlcnlIb3N0KHROb2RlKSB7XG4gIHJldHVybiAodE5vZGUuZmxhZ3MgJiA0KSAhPT0gMDtcbn1cbmZ1bmN0aW9uIGlzQ29tcG9uZW50SG9zdCh0Tm9kZSkge1xuICByZXR1cm4gdE5vZGUuY29tcG9uZW50T2Zmc2V0ID4gLTE7XG59XG5mdW5jdGlvbiBpc0RpcmVjdGl2ZUhvc3QodE5vZGUpIHtcbiAgcmV0dXJuICh0Tm9kZS5mbGFncyAmIDEpID09PSAxO1xufVxuZnVuY3Rpb24gaXNDb21wb25lbnREZWYoZGVmKSB7XG4gIHJldHVybiAhIWRlZi50ZW1wbGF0ZTtcbn1cbmZ1bmN0aW9uIGlzUm9vdFZpZXcodGFyZ2V0KSB7XG4gIHJldHVybiAodGFyZ2V0W0ZMQUdTXSAmIDUxMikgIT09IDA7XG59XG5mdW5jdGlvbiBpc1Byb2plY3Rpb25UTm9kZSh0Tm9kZSkge1xuICByZXR1cm4gKHROb2RlLnR5cGUgJiAxNikgPT09IDE2O1xufVxuZnVuY3Rpb24gaGFzSTE4bihsVmlldykge1xuICByZXR1cm4gKGxWaWV3W0ZMQUdTXSAmIDMyKSA9PT0gMzI7XG59XG5mdW5jdGlvbiBpc0Rlc3Ryb3llZChsVmlldykge1xuICByZXR1cm4gKGxWaWV3W0ZMQUdTXSAmIDI1NikgPT09IDI1Njtcbn1cbmZ1bmN0aW9uIGFzc2VydFROb2RlRm9yTFZpZXcodE5vZGUsIGxWaWV3KSB7XG4gIGFzc2VydFROb2RlRm9yVFZpZXcodE5vZGUsIGxWaWV3W1RWSUVXXSk7XG59XG5mdW5jdGlvbiBhc3NlcnRUTm9kZUNyZWF0aW9uSW5kZXgobFZpZXcsIGluZGV4KSB7XG4gIGNvbnN0IGFkanVzdGVkSW5kZXggPSBpbmRleCArIEhFQURFUl9PRkZTRVQ7XG4gIGFzc2VydEluZGV4SW5SYW5nZShsVmlldywgYWRqdXN0ZWRJbmRleCk7XG4gIGFzc2VydExlc3NUaGFuKGFkanVzdGVkSW5kZXgsIGxWaWV3W1RWSUVXXS5iaW5kaW5nU3RhcnRJbmRleCwgJ1ROb2RlcyBzaG91bGQgYmUgY3JlYXRlZCBiZWZvcmUgYW55IGJpbmRpbmdzJyk7XG59XG5mdW5jdGlvbiBhc3NlcnRUTm9kZUZvclRWaWV3KHROb2RlLCB0Vmlldykge1xuICBhc3NlcnRUTm9kZSh0Tm9kZSk7XG4gIGNvbnN0IHREYXRhID0gdFZpZXcuZGF0YTtcbiAgZm9yIChsZXQgaSA9IEhFQURFUl9PRkZTRVQ7IGkgPCB0RGF0YS5sZW5ndGg7IGkrKykge1xuICAgIGlmICh0RGF0YVtpXSA9PT0gdE5vZGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbiAgdGhyb3dFcnJvcignVGhpcyBUTm9kZSBkb2VzIG5vdCBiZWxvbmcgdG8gdGhpcyBUVmlldy4nKTtcbn1cbmZ1bmN0aW9uIGFzc2VydFROb2RlKHROb2RlKSB7XG4gIGFzc2VydERlZmluZWQodE5vZGUsICdUTm9kZSBtdXN0IGJlIGRlZmluZWQnKTtcbiAgaWYgKCEodE5vZGUgJiYgdHlwZW9mIHROb2RlID09PSAnb2JqZWN0JyAmJiB0Tm9kZS5oYXNPd25Qcm9wZXJ0eSgnZGlyZWN0aXZlU3R5bGluZ0xhc3QnKSkpIHtcbiAgICB0aHJvd0Vycm9yKCdOb3Qgb2YgdHlwZSBUTm9kZSwgZ290OiAnICsgdE5vZGUpO1xuICB9XG59XG5mdW5jdGlvbiBhc3NlcnRUSWN1KHRJY3UpIHtcbiAgYXNzZXJ0RGVmaW5lZCh0SWN1LCAnRXhwZWN0ZWQgVEljdSB0byBiZSBkZWZpbmVkJyk7XG4gIGlmICghKHR5cGVvZiB0SWN1LmN1cnJlbnRDYXNlTFZpZXdJbmRleCA9PT0gJ251bWJlcicpKSB7XG4gICAgdGhyb3dFcnJvcignT2JqZWN0IGlzIG5vdCBvZiBUSWN1IHR5cGUuJyk7XG4gIH1cbn1cbmZ1bmN0aW9uIGFzc2VydENvbXBvbmVudFR5cGUoYWN0dWFsLCBtc2cgPSBcIlR5cGUgcGFzc2VkIGluIGlzIG5vdCBDb21wb25lbnRUeXBlLCBpdCBkb2VzIG5vdCBoYXZlICfJtWNtcCcgcHJvcGVydHkuXCIpIHtcbiAgaWYgKCFnZXRDb21wb25lbnREZWYoYWN0dWFsKSkge1xuICAgIHRocm93RXJyb3IobXNnKTtcbiAgfVxufVxuZnVuY3Rpb24gYXNzZXJ0TmdNb2R1bGVUeXBlKGFjdHVhbCwgbXNnID0gXCJUeXBlIHBhc3NlZCBpbiBpcyBub3QgTmdNb2R1bGVUeXBlLCBpdCBkb2VzIG5vdCBoYXZlICfJtW1vZCcgcHJvcGVydHkuXCIpIHtcbiAgaWYgKCFnZXROZ01vZHVsZURlZihhY3R1YWwpKSB7XG4gICAgdGhyb3dFcnJvcihtc2cpO1xuICB9XG59XG5mdW5jdGlvbiBhc3NlcnRIYXNQYXJlbnQodE5vZGUpIHtcbiAgYXNzZXJ0RGVmaW5lZCh0Tm9kZSwgJ2N1cnJlbnRUTm9kZSBzaG91bGQgZXhpc3QhJyk7XG4gIGFzc2VydERlZmluZWQodE5vZGUucGFyZW50LCAnY3VycmVudFROb2RlIHNob3VsZCBoYXZlIGEgcGFyZW50Jyk7XG59XG5mdW5jdGlvbiBhc3NlcnRMQ29udGFpbmVyKHZhbHVlKSB7XG4gIGFzc2VydERlZmluZWQodmFsdWUsICdMQ29udGFpbmVyIG11c3QgYmUgZGVmaW5lZCcpO1xuICBhc3NlcnRFcXVhbChpc0xDb250YWluZXIodmFsdWUpLCB0cnVlLCAnRXhwZWN0aW5nIExDb250YWluZXInKTtcbn1cbmZ1bmN0aW9uIGFzc2VydExWaWV3T3JVbmRlZmluZWQodmFsdWUpIHtcbiAgdmFsdWUgJiYgYXNzZXJ0RXF1YWwoaXNMVmlldyh2YWx1ZSksIHRydWUsICdFeHBlY3RpbmcgTFZpZXcgb3IgdW5kZWZpbmVkIG9yIG51bGwnKTtcbn1cbmZ1bmN0aW9uIGFzc2VydExWaWV3KHZhbHVlKSB7XG4gIGFzc2VydERlZmluZWQodmFsdWUsICdMVmlldyBtdXN0IGJlIGRlZmluZWQnKTtcbiAgYXNzZXJ0RXF1YWwoaXNMVmlldyh2YWx1ZSksIHRydWUsICdFeHBlY3RpbmcgTFZpZXcnKTtcbn1cbmZ1bmN0aW9uIGFzc2VydEZpcnN0Q3JlYXRlUGFzcyh0VmlldywgZXJyTWVzc2FnZSkge1xuICBhc3NlcnRFcXVhbCh0Vmlldy5maXJzdENyZWF0ZVBhc3MsIHRydWUsIGVyck1lc3NhZ2UgfHwgJ1Nob3VsZCBvbmx5IGJlIGNhbGxlZCBpbiBmaXJzdCBjcmVhdGUgcGFzcy4nKTtcbn1cbmZ1bmN0aW9uIGFzc2VydEZpcnN0VXBkYXRlUGFzcyh0VmlldywgZXJyTWVzc2FnZSkge1xuICBhc3NlcnRFcXVhbCh0Vmlldy5maXJzdFVwZGF0ZVBhc3MsIHRydWUsICdTaG91bGQgb25seSBiZSBjYWxsZWQgaW4gZmlyc3QgdXBkYXRlIHBhc3MuJyk7XG59XG5mdW5jdGlvbiBhc3NlcnREaXJlY3RpdmVEZWYob2JqKSB7XG4gIGlmIChvYmoudHlwZSA9PT0gdW5kZWZpbmVkIHx8IG9iai5zZWxlY3RvcnMgPT0gdW5kZWZpbmVkIHx8IG9iai5pbnB1dHMgPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93RXJyb3IoYEV4cGVjdGVkIGEgRGlyZWN0aXZlRGVmL0NvbXBvbmVudERlZiBhbmQgdGhpcyBvYmplY3QgZG9lcyBub3Qgc2VlbSB0byBoYXZlIHRoZSBleHBlY3RlZCBzaGFwZS5gKTtcbiAgfVxufVxuZnVuY3Rpb24gYXNzZXJ0SW5kZXhJbkRlY2xSYW5nZSh0VmlldywgaW5kZXgpIHtcbiAgYXNzZXJ0QmV0d2VlbihIRUFERVJfT0ZGU0VULCB0Vmlldy5iaW5kaW5nU3RhcnRJbmRleCwgaW5kZXgpO1xufVxuZnVuY3Rpb24gYXNzZXJ0SW5kZXhJbkV4cGFuZG9SYW5nZShsVmlldywgaW5kZXgpIHtcbiAgY29uc3QgdFZpZXcgPSBsVmlld1sxXTtcbiAgYXNzZXJ0QmV0d2Vlbih0Vmlldy5leHBhbmRvU3RhcnRJbmRleCwgbFZpZXcubGVuZ3RoLCBpbmRleCk7XG59XG5mdW5jdGlvbiBhc3NlcnRCZXR3ZWVuKGxvd2VyLCB1cHBlciwgaW5kZXgpIHtcbiAgaWYgKCEobG93ZXIgPD0gaW5kZXggJiYgaW5kZXggPCB1cHBlcikpIHtcbiAgICB0aHJvd0Vycm9yKGBJbmRleCBvdXQgb2YgcmFuZ2UgKGV4cGVjdGluZyAke2xvd2VyfSA8PSAke2luZGV4fSA8ICR7dXBwZXJ9KWApO1xuICB9XG59XG5mdW5jdGlvbiBhc3NlcnRQcm9qZWN0aW9uU2xvdHMobFZpZXcsIGVyck1lc3NhZ2UpIHtcbiAgYXNzZXJ0RGVmaW5lZChsVmlld1tERUNMQVJBVElPTl9DT01QT05FTlRfVklFV10sICdDb21wb25lbnQgdmlld3Mgc2hvdWxkIGV4aXN0LicpO1xuICBhc3NlcnREZWZpbmVkKGxWaWV3W0RFQ0xBUkFUSU9OX0NPTVBPTkVOVF9WSUVXXVtUX0hPU1RdLnByb2plY3Rpb24sICdDb21wb25lbnRzIHdpdGggcHJvamVjdGlvbiBub2RlcyAoPG5nLWNvbnRlbnQ+KSBtdXN0IGhhdmUgcHJvamVjdGlvbiBzbG90cyBkZWZpbmVkLicpO1xufVxuZnVuY3Rpb24gYXNzZXJ0UGFyZW50VmlldyhsVmlldywgZXJyTWVzc2FnZSkge1xuICBhc3NlcnREZWZpbmVkKGxWaWV3LCBcIkNvbXBvbmVudCB2aWV3cyBzaG91bGQgYWx3YXlzIGhhdmUgYSBwYXJlbnQgdmlldyAoY29tcG9uZW50J3MgaG9zdCB2aWV3KVwiKTtcbn1cbmZ1bmN0aW9uIGFzc2VydE5vZGVJbmplY3RvcihsVmlldywgaW5qZWN0b3JJbmRleCkge1xuICBhc3NlcnRJbmRleEluRXhwYW5kb1JhbmdlKGxWaWV3LCBpbmplY3RvckluZGV4KTtcbiAgYXNzZXJ0SW5kZXhJbkV4cGFuZG9SYW5nZShsVmlldywgaW5qZWN0b3JJbmRleCArIDgpO1xuICBhc3NlcnROdW1iZXIobFZpZXdbaW5qZWN0b3JJbmRleCArIDBdLCAnaW5qZWN0b3JJbmRleCBzaG91bGQgcG9pbnQgdG8gYSBibG9vbSBmaWx0ZXInKTtcbiAgYXNzZXJ0TnVtYmVyKGxWaWV3W2luamVjdG9ySW5kZXggKyAxXSwgJ2luamVjdG9ySW5kZXggc2hvdWxkIHBvaW50IHRvIGEgYmxvb20gZmlsdGVyJyk7XG4gIGFzc2VydE51bWJlcihsVmlld1tpbmplY3RvckluZGV4ICsgMl0sICdpbmplY3RvckluZGV4IHNob3VsZCBwb2ludCB0byBhIGJsb29tIGZpbHRlcicpO1xuICBhc3NlcnROdW1iZXIobFZpZXdbaW5qZWN0b3JJbmRleCArIDNdLCAnaW5qZWN0b3JJbmRleCBzaG91bGQgcG9pbnQgdG8gYSBibG9vbSBmaWx0ZXInKTtcbiAgYXNzZXJ0TnVtYmVyKGxWaWV3W2luamVjdG9ySW5kZXggKyA0XSwgJ2luamVjdG9ySW5kZXggc2hvdWxkIHBvaW50IHRvIGEgYmxvb20gZmlsdGVyJyk7XG4gIGFzc2VydE51bWJlcihsVmlld1tpbmplY3RvckluZGV4ICsgNV0sICdpbmplY3RvckluZGV4IHNob3VsZCBwb2ludCB0byBhIGJsb29tIGZpbHRlcicpO1xuICBhc3NlcnROdW1iZXIobFZpZXdbaW5qZWN0b3JJbmRleCArIDZdLCAnaW5qZWN0b3JJbmRleCBzaG91bGQgcG9pbnQgdG8gYSBibG9vbSBmaWx0ZXInKTtcbiAgYXNzZXJ0TnVtYmVyKGxWaWV3W2luamVjdG9ySW5kZXggKyA3XSwgJ2luamVjdG9ySW5kZXggc2hvdWxkIHBvaW50IHRvIGEgYmxvb20gZmlsdGVyJyk7XG4gIGFzc2VydE51bWJlcihsVmlld1tpbmplY3RvckluZGV4ICsgOF0sICdpbmplY3RvckluZGV4IHNob3VsZCBwb2ludCB0byBwYXJlbnQgaW5qZWN0b3InKTtcbn1cbmNvbnN0IFNWR19OQU1FU1BBQ0UgPSAnc3ZnJztcbmNvbnN0IE1BVEhfTUxfTkFNRVNQQUNFID0gJ21hdGgnO1xuZnVuY3Rpb24gdW53cmFwUk5vZGUodmFsdWUpIHtcbiAgd2hpbGUgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgdmFsdWUgPSB2YWx1ZVtIT1NUXTtcbiAgfVxuICByZXR1cm4gdmFsdWU7XG59XG5mdW5jdGlvbiB1bndyYXBMVmlldyh2YWx1ZSkge1xuICB3aGlsZSAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlW1RZUEVdID09PSAnb2JqZWN0JykgcmV0dXJuIHZhbHVlO1xuICAgIHZhbHVlID0gdmFsdWVbSE9TVF07XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5mdW5jdGlvbiBnZXROYXRpdmVCeUluZGV4KGluZGV4LCBsVmlldykge1xuICBuZ0Rldk1vZGUgJiYgYXNzZXJ0SW5kZXhJblJhbmdlKGxWaWV3LCBpbmRleCk7XG4gIG5nRGV2TW9kZSAmJiBhc3NlcnRHcmVhdGVyVGhhbk9yRXF1YWwoaW5kZXgsIEhFQURFUl9PRkZTRVQsICdFeHBlY3RlZCB0byBiZSBwYXN0IEhFQURFUl9PRkZTRVQnKTtcbiAgcmV0dXJuIHVud3JhcFJOb2RlKGxWaWV3W2luZGV4XSk7XG59XG5mdW5jdGlvbiBnZXROYXRpdmVCeVROb2RlKHROb2RlLCBsVmlldykge1xuICBuZ0Rldk1vZGUgJiYgYXNzZXJ0VE5vZGVGb3JMVmlldyh0Tm9kZSwgbFZpZXcpO1xuICBuZ0Rldk1vZGUgJiYgYXNzZXJ0SW5kZXhJblJhbmdlKGxWaWV3LCB0Tm9kZS5pbmRleCk7XG4gIGNvbnN0IG5vZGUgPSB1bndyYXBSTm9kZShsVmlld1t0Tm9kZS5pbmRleF0pO1xuICByZXR1cm4gbm9kZTtcbn1cbmZ1bmN0aW9uIGdldE5hdGl2ZUJ5VE5vZGVPck51bGwodE5vZGUsIGxWaWV3KSB7XG4gIGNvbnN0IGluZGV4ID0gdE5vZGUgPT09IG51bGwgPyAtMSA6IHROb2RlLmluZGV4O1xuICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgbmdEZXZNb2RlICYmIGFzc2VydFROb2RlRm9yTFZpZXcodE5vZGUsIGxWaWV3KTtcbiAgICBjb25zdCBub2RlID0gdW53cmFwUk5vZGUobFZpZXdbaW5kZXhdKTtcbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIGdldFROb2RlKHRWaWV3LCBpbmRleCkge1xuICBuZ0Rldk1vZGUgJiYgYXNzZXJ0R3JlYXRlclRoYW4oaW5kZXgsIC0xLCAnd3JvbmcgaW5kZXggZm9yIFROb2RlJyk7XG4gIG5nRGV2TW9kZSAmJiBhc3NlcnRMZXNzVGhhbihpbmRleCwgdFZpZXcuZGF0YS5sZW5ndGgsICd3cm9uZyBpbmRleCBmb3IgVE5vZGUnKTtcbiAgY29uc3QgdE5vZGUgPSB0Vmlldy5kYXRhW2luZGV4XTtcbiAgbmdEZXZNb2RlICYmIHROb2RlICE9PSBudWxsICYmIGFzc2VydFROb2RlKHROb2RlKTtcbiAgcmV0dXJuIHROb2RlO1xufVxuZnVuY3Rpb24gbG9hZCh2aWV3LCBpbmRleCkge1xuICBuZ0Rldk1vZGUgJiYgYXNzZXJ0SW5kZXhJblJhbmdlKHZpZXcsIGluZGV4KTtcbiAgcmV0dXJuIHZpZXdbaW5kZXhdO1xufVxuZnVuY3Rpb24gc3RvcmUodFZpZXcsIGxWaWV3LCBpbmRleCwgdmFsdWUpIHtcbiAgaWYgKGluZGV4ID49IHRWaWV3LmRhdGEubGVuZ3RoKSB7XG4gICAgdFZpZXcuZGF0YVtpbmRleF0gPSBudWxsO1xuICAgIHRWaWV3LmJsdWVwcmludFtpbmRleF0gPSBudWxsO1xuICB9XG4gIGxWaWV3W2luZGV4XSA9IHZhbHVlO1xufVxuZnVuY3Rpb24gZ2V0Q29tcG9uZW50TFZpZXdCeUluZGV4KG5vZGVJbmRleCwgaG9zdFZpZXcpIHtcbiAgbmdEZXZNb2RlICYmIGFzc2VydEluZGV4SW5SYW5nZShob3N0Vmlldywgbm9kZUluZGV4KTtcbiAgY29uc3Qgc2xvdFZhbHVlID0gaG9zdFZpZXdbbm9kZUluZGV4XTtcbiAgY29uc3QgbFZpZXcgPSBpc0xWaWV3KHNsb3RWYWx1ZSkgPyBzbG90VmFsdWUgOiBzbG90VmFsdWVbSE9TVF07XG4gIHJldHVybiBsVmlldztcbn1cbmZ1bmN0aW9uIGlzQ3JlYXRpb25Nb2RlKHZpZXcpIHtcbiAgcmV0dXJuICh2aWV3W0ZMQUdTXSAmIDQpID09PSA0O1xufVxuZnVuY3Rpb24gdmlld0F0dGFjaGVkVG9DaGFuZ2VEZXRlY3Rvcih2aWV3KSB7XG4gIHJldHVybiAodmlld1tGTEFHU10gJiAxMjgpID09PSAxMjg7XG59XG5mdW5jdGlvbiB2aWV3QXR0YWNoZWRUb0NvbnRhaW5lcih2aWV3KSB7XG4gIHJldHVybiBpc0xDb250YWluZXIodmlld1tQQVJFTlRdKTtcbn1cbmZ1bmN0aW9uIGdldENvbnN0YW50KGNvbnN0cywgaW5kZXgpIHtcbiAgaWYgKGluZGV4ID09PSBudWxsIHx8IGluZGV4ID09PSB1bmRlZmluZWQpIHJldHVybiBudWxsO1xuICBuZ0Rldk1vZGUgJiYgYXNzZXJ0SW5kZXhJblJhbmdlKGNvbnN0cywgaW5kZXgpO1xuICByZXR1cm4gY29uc3RzW2luZGV4XTtcbn1cbmZ1bmN0aW9uIHJlc2V0UHJlT3JkZXJIb29rRmxhZ3MobFZpZXcpIHtcbiAgbFZpZXdbUFJFT1JERVJfSE9PS19GTEFHU10gPSAwO1xufVxuZnVuY3Rpb24gbWFya1ZpZXdGb3JSZWZyZXNoKGxWaWV3KSB7XG4gIGlmIChsVmlld1tGTEFHU10gJiAxMDI0KSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGxWaWV3W0ZMQUdTXSB8PSAxMDI0O1xuICBpZiAodmlld0F0dGFjaGVkVG9DaGFuZ2VEZXRlY3RvcihsVmlldykpIHtcbiAgICBtYXJrQW5jZXN0b3JzRm9yVHJhdmVyc2FsKGxWaWV3KTtcbiAgfVxufVxuZnVuY3Rpb24gd2Fsa1VwVmlld3MobmVzdGluZ0xldmVsLCBjdXJyZW50Vmlldykge1xuICB3aGlsZSAobmVzdGluZ0xldmVsID4gMCkge1xuICAgIG5nRGV2TW9kZSAmJiBhc3NlcnREZWZpbmVkKGN1cnJlbnRWaWV3W0RFQ0xBUkFUSU9OX1ZJRVddLCAnRGVjbGFyYXRpb24gdmlldyBzaG91bGQgYmUgZGVmaW5lZCBpZiBuZXN0aW5nIGxldmVsIGlzIGdyZWF0ZXIgdGhhbiAwLicpO1xuICAgIGN1cnJlbnRWaWV3ID0gY3VycmVudFZpZXdbREVDTEFSQVRJT05fVklFV107XG4gICAgbmVzdGluZ0xldmVsLS07XG4gIH1cbiAgcmV0dXJuIGN1cnJlbnRWaWV3O1xufVxuZnVuY3Rpb24gcmVxdWlyZXNSZWZyZXNoT3JUcmF2ZXJzYWwobFZpZXcpIHtcbiAgcmV0dXJuICEhKGxWaWV3W0ZMQUdTXSAmICgxMDI0IHwgODE5MikgfHwgbFZpZXdbUkVBQ1RJVkVfVEVNUExBVEVfQ09OU1VNRVJdPy5kaXJ0eSk7XG59XG5mdW5jdGlvbiB1cGRhdGVBbmNlc3RvclRyYXZlcnNhbEZsYWdzT25BdHRhY2gobFZpZXcpIHtcbiAgbFZpZXdbRU5WSVJPTk1FTlRdLmNoYW5nZURldGVjdGlvblNjaGVkdWxlcj8ubm90aWZ5KDgpO1xuICBpZiAobFZpZXdbRkxBR1NdICYgNjQpIHtcbiAgICBsVmlld1tGTEFHU10gfD0gMTAyNDtcbiAgfVxuICBpZiAocmVxdWlyZXNSZWZyZXNoT3JUcmF2ZXJzYWwobFZpZXcpKSB7XG4gICAgbWFya0FuY2VzdG9yc0ZvclRyYXZlcnNhbChsVmlldyk7XG4gIH1cbn1cbmZ1bmN0aW9uIG1hcmtBbmNlc3RvcnNGb3JUcmF2ZXJzYWwobFZpZXcpIHtcbiAgbFZpZXdbRU5WSVJPTk1FTlRdLmNoYW5nZURldGVjdGlvblNjaGVkdWxlcj8ubm90aWZ5KDApO1xuICBsZXQgcGFyZW50ID0gZ2V0TFZpZXdQYXJlbnQobFZpZXcpO1xuICB3aGlsZSAocGFyZW50ICE9PSBudWxsKSB7XG4gICAgaWYgKHBhcmVudFtGTEFHU10gJiA4MTkyKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgcGFyZW50W0ZMQUdTXSB8PSA4MTkyO1xuICAgIGlmICghdmlld0F0dGFjaGVkVG9DaGFuZ2VEZXRlY3RvcihwYXJlbnQpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgcGFyZW50ID0gZ2V0TFZpZXdQYXJlbnQocGFyZW50KTtcbiAgfVxufVxuZnVuY3Rpb24gc3RvcmVMVmlld09uRGVzdHJveShsVmlldywgb25EZXN0cm95Q2FsbGJhY2spIHtcbiAgaWYgKGlzRGVzdHJveWVkKGxWaWV3KSkge1xuICAgIHRocm93IG5ldyBSdW50aW1lRXJyb3IoOTExLCBuZ0Rldk1vZGUgJiYgJ1ZpZXcgaGFzIGFscmVhZHkgYmVlbiBkZXN0cm95ZWQuJyk7XG4gIH1cbiAgaWYgKGxWaWV3W09OX0RFU1RST1lfSE9PS1NdID09PSBudWxsKSB7XG4gICAgbFZpZXdbT05fREVTVFJPWV9IT09LU10gPSBbXTtcbiAgfVxuICBsVmlld1tPTl9ERVNUUk9ZX0hPT0tTXS5wdXNoKG9uRGVzdHJveUNhbGxiYWNrKTtcbn1cbmZ1bmN0aW9uIHJlbW92ZUxWaWV3T25EZXN0cm95KGxWaWV3LCBvbkRlc3Ryb3lDYWxsYmFjaykge1xuICBpZiAobFZpZXdbT05fREVTVFJPWV9IT09LU10gPT09IG51bGwpIHJldHVybjtcbiAgY29uc3QgZGVzdHJveUNCSWR4ID0gbFZpZXdbT05fREVTVFJPWV9IT09LU10uaW5kZXhPZihvbkRlc3Ryb3lDYWxsYmFjayk7XG4gIGlmIChkZXN0cm95Q0JJZHggIT09IC0xKSB7XG4gICAgbFZpZXdbT05fREVTVFJPWV9IT09LU10uc3BsaWNlKGRlc3Ryb3lDQklkeCwgMSk7XG4gIH1cbn1cbmZ1bmN0aW9uIGdldExWaWV3UGFyZW50KGxWaWV3KSB7XG4gIG5nRGV2TW9kZSAmJiBhc3NlcnRMVmlldyhsVmlldyk7XG4gIGNvbnN0IHBhcmVudCA9IGxWaWV3W1BBUkVOVF07XG4gIHJldHVybiBpc0xDb250YWluZXIocGFyZW50KSA/IHBhcmVudFtQQVJFTlRdIDogcGFyZW50O1xufVxuZnVuY3Rpb24gZ2V0T3JDcmVhdGVMVmlld0NsZWFudXAodmlldykge1xuICByZXR1cm4gdmlld1tDTEVBTlVQXSA/Pz0gW107XG59XG5mdW5jdGlvbiBnZXRPckNyZWF0ZVRWaWV3Q2xlYW51cCh0Vmlldykge1xuICByZXR1cm4gdFZpZXcuY2xlYW51cCA/Pz0gW107XG59XG5mdW5jdGlvbiBzdG9yZUNsZWFudXBXaXRoQ29udGV4dCh0VmlldywgbFZpZXcsIGNvbnRleHQsIGNsZWFudXBGbikge1xuICBjb25zdCBsQ2xlYW51cCA9IGdldE9yQ3JlYXRlTFZpZXdDbGVhbnVwKGxWaWV3KTtcbiAgbmdEZXZNb2RlICYmIGFzc2VydERlZmluZWQoY29udGV4dCwgJ0NsZWFudXAgY29udGV4dCBpcyBtYW5kYXRvcnkgd2hlbiByZWdpc3RlcmluZyBmcmFtZXdvcmstbGV2ZWwgZGVzdHJveSBob29rcycpO1xuICBsQ2xlYW51cC5wdXNoKGNvbnRleHQpO1xuICBpZiAodFZpZXcuZmlyc3RDcmVhdGVQYXNzKSB7XG4gICAgZ2V0T3JDcmVhdGVUVmlld0NsZWFudXAodFZpZXcpLnB1c2goY2xlYW51cEZuLCBsQ2xlYW51cC5sZW5ndGggLSAxKTtcbiAgfSBlbHNlIHtcbiAgICBpZiAobmdEZXZNb2RlKSB7XG4gICAgICBPYmplY3QuZnJlZXplKGdldE9yQ3JlYXRlVFZpZXdDbGVhbnVwKHRWaWV3KSk7XG4gICAgfVxuICB9XG59XG5jb25zdCBpbnN0cnVjdGlvblN0YXRlID0ge1xuICBsRnJhbWU6IC8qI19fUFVSRV9fKi9jcmVhdGVMRnJhbWUobnVsbCksXG4gIGJpbmRpbmdzRW5hYmxlZDogdHJ1ZSxcbiAgc2tpcEh5ZHJhdGlvblJvb3RUTm9kZTogbnVsbFxufTtcbnZhciBDaGVja05vQ2hhbmdlc01vZGUgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKENoZWNrTm9DaGFuZ2VzTW9kZSkge1xuICBDaGVja05vQ2hhbmdlc01vZGVbQ2hlY2tOb0NoYW5nZXNNb2RlW1wiT2ZmXCJdID0gMF0gPSBcIk9mZlwiO1xuICBDaGVja05vQ2hhbmdlc01vZGVbQ2hlY2tOb0NoYW5nZXNNb2RlW1wiRXhoYXVzdGl2ZVwiXSA9IDFdID0gXCJFeGhhdXN0aXZlXCI7XG4gIENoZWNrTm9DaGFuZ2VzTW9kZVtDaGVja05vQ2hhbmdlc01vZGVbXCJPbmx5RGlydHlWaWV3c1wiXSA9IDJdID0gXCJPbmx5RGlydHlWaWV3c1wiO1xuICByZXR1cm4gQ2hlY2tOb0NoYW5nZXNNb2RlO1xufShDaGVja05vQ2hhbmdlc01vZGUgfHwge30pO1xubGV0IF9jaGVja05vQ2hhbmdlc01vZGUgPSAwO1xubGV0IF9pc1JlZnJlc2hpbmdWaWV3cyA9IGZhbHNlO1xuZnVuY3Rpb24gZ2V0RWxlbWVudERlcHRoQ291bnQoKSB7XG4gIHJldHVybiBpbnN0cnVjdGlvblN0YXRlLmxGcmFtZS5lbGVtZW50RGVwdGhDb3VudDtcbn1cbmZ1bmN0aW9uIGluY3JlYXNlRWxlbWVudERlcHRoQ291bnQoKSB7XG4gIGluc3RydWN0aW9uU3RhdGUubEZyYW1lLmVsZW1lbnREZXB0aENvdW50Kys7XG59XG5mdW5jdGlvbiBkZWNyZWFzZUVsZW1lbnREZXB0aENvdW50KCkge1xuICBpbnN0cnVjdGlvblN0YXRlLmxGcmFtZS5lbGVtZW50RGVwdGhDb3VudC0tO1xufVxuZnVuY3Rpb24gZ2V0QmluZGluZ3NFbmFibGVkKCkge1xuICByZXR1cm4gaW5zdHJ1Y3Rpb25TdGF0ZS5iaW5kaW5nc0VuYWJsZWQ7XG59XG5mdW5jdGlvbiBpc0luU2tpcEh5ZHJhdGlvbkJsb2NrKCkge1xuICByZXR1cm4gaW5zdHJ1Y3Rpb25TdGF0ZS5za2lwSHlkcmF0aW9uUm9vdFROb2RlICE9PSBudWxsO1xufVxuZnVuY3Rpb24gaXNTa2lwSHlkcmF0aW9uUm9vdFROb2RlKHROb2RlKSB7XG4gIHJldHVybiBpbnN0cnVjdGlvblN0YXRlLnNraXBIeWRyYXRpb25Sb290VE5vZGUgPT09IHROb2RlO1xufVxuZnVuY3Rpb24gybXJtWVuYWJsZUJpbmRpbmdzKCkge1xuICBpbnN0cnVjdGlvblN0YXRlLmJpbmRpbmdzRW5hYmxlZCA9IHRydWU7XG59XG5mdW5jdGlvbiBlbnRlclNraXBIeWRyYXRpb25CbG9jayh0Tm9kZSkge1xuICBpbnN0cnVjdGlvblN0YXRlLnNraXBIeWRyYXRpb25Sb290VE5vZGUgPSB0Tm9kZTtcbn1cbmZ1bmN0aW9uIMm1ybVkaXNhYmxlQmluZGluZ3MoKSB7XG4gIGluc3RydWN0aW9uU3RhdGUuYmluZGluZ3NFbmFibGVkID0gZmFsc2U7XG59XG5mdW5jdGlvbiBsZWF2ZVNraXBIeWRyYXRpb25CbG9jaygpIHtcbiAgaW5zdHJ1Y3Rpb25TdGF0ZS5za2lwSHlkcmF0aW9uUm9vdFROb2RlID0gbnVsbDtcbn1cbmZ1bmN0aW9uIGdldExWaWV3KCkge1xuICByZXR1cm4gaW5zdHJ1Y3Rpb25TdGF0ZS5sRnJhbWUubFZpZXc7XG59XG5mdW5jdGlvbiBnZXRUVmlldygpIHtcbiAgcmV0dXJuIGluc3RydWN0aW9uU3RhdGUubEZyYW1lLnRWaWV3O1xufVxuZnVuY3Rpb24gybXJtXJlc3RvcmVWaWV3KHZpZXdUb1Jlc3RvcmUpIHtcbiAgaW5zdHJ1Y3Rpb25TdGF0ZS5sRnJhbWUuY29udGV4dExWaWV3ID0gdmlld1RvUmVzdG9yZTtcbiAgcmV0dXJuIHZpZXdUb1Jlc3RvcmVbQ09OVEVYVF07XG59XG5mdW5jdGlvbiDJtcm1cmVzZXRWaWV3KHZhbHVlKSB7XG4gIGluc3RydWN0aW9uU3RhdGUubEZyYW1lLmNvbnRleHRMVmlldyA9IG51bGw7XG4gIHJldHVybiB2YWx1ZTtcbn1cbmZ1bmN0aW9uIGdldEN1cnJlbnRUTm9kZSgpIHtcbiAgbGV0IGN1cnJlbnRUTm9kZSA9IGdldEN1cnJlbnRUTm9kZVBsYWNlaG9sZGVyT2soKTtcbiAgd2hpbGUgKGN1cnJlbnRUTm9kZSAhPT0gbnVsbCAmJiBjdXJyZW50VE5vZGUudHlwZSA9PT0gNjQpIHtcbiAgICBjdXJyZW50VE5vZGUgPSBjdXJyZW50VE5vZGUucGFyZW50O1xuICB9XG4gIHJldHVybiBjdXJyZW50VE5vZGU7XG59XG5mdW5jdGlvbiBnZXRDdXJyZW50VE5vZGVQbGFjZWhvbGRlck9rKCkge1xuICByZXR1cm4gaW5zdHJ1Y3Rpb25TdGF0ZS5sRnJhbWUuY3VycmVudFROb2RlO1xufVxuZnVuY3Rpb24gZ2V0Q3VycmVudFBhcmVudFROb2RlKCkge1xuICBjb25zdCBsRnJhbWUgPSBpbnN0cnVjdGlvblN0YXRlLmxGcmFtZTtcbiAgY29uc3QgY3VycmVudFROb2RlID0gbEZyYW1lLmN1cnJlbnRUTm9kZTtcbiAgcmV0dXJuIGxGcmFtZS5pc1BhcmVudCA/IGN1cnJlbnRUTm9kZSA6IGN1cnJlbnRUTm9kZS5wYXJlbnQ7XG59XG5mdW5jdGlvbiBzZXRDdXJyZW50VE5vZGUodE5vZGUsIGlzUGFyZW50KSB7XG4gIG5nRGV2TW9kZSAmJiB0Tm9kZSAmJiBhc3NlcnRUTm9kZUZvclRWaWV3KHROb2RlLCBpbnN0cnVjdGlvblN0YXRlLmxGcmFtZS50Vmlldyk7XG4gIGNvbnN0IGxGcmFtZSA9IGluc3RydWN0aW9uU3RhdGUubEZyYW1lO1xuICBsRnJhbWUuY3VycmVudFROb2RlID0gdE5vZGU7XG4gIGxGcmFtZS5pc1BhcmVudCA9IGlzUGFyZW50O1xufVxuZnVuY3Rpb24gaXNDdXJyZW50VE5vZGVQYXJlbnQoKSB7XG4gIHJldHVybiBpbnN0cnVjdGlvblN0YXRlLmxGcmFtZS5pc1BhcmVudDtcbn1cbmZ1bmN0aW9uIHNldEN1cnJlbnRUTm9kZUFzTm90UGFyZW50KCkge1xuICBpbnN0cnVjdGlvblN0YXRlLmxGcmFtZS5pc1BhcmVudCA9IGZhbHNlO1xufVxuZnVuY3Rpb24gZ2V0Q29udGV4dExWaWV3KCkge1xuICBjb25zdCBjb250ZXh0TFZpZXcgPSBpbnN0cnVjdGlvblN0YXRlLmxGcmFtZS5jb250ZXh0TFZpZXc7XG4gIG5nRGV2TW9kZSAmJiBhc3NlcnREZWZpbmVkKGNvbnRleHRMVmlldywgJ2NvbnRleHRMVmlldyBtdXN0IGJlIGRlZmluZWQuJyk7XG4gIHJldHVybiBjb250ZXh0TFZpZXc7XG59XG5mdW5jdGlvbiBpc0luQ2hlY2tOb0NoYW5nZXNNb2RlKCkge1xuICAhbmdEZXZNb2RlICYmIHRocm93RXJyb3IoJ011c3QgbmV2ZXIgYmUgY2FsbGVkIGluIHByb2R1Y3Rpb24gbW9kZScpO1xuICByZXR1cm4gX2NoZWNrTm9DaGFuZ2VzTW9kZSAhPT0gQ2hlY2tOb0NoYW5nZXNNb2RlLk9mZjtcbn1cbmZ1bmN0aW9uIGlzRXhoYXVzdGl2ZUNoZWNrTm9DaGFuZ2VzKCkge1xuICAhbmdEZXZNb2RlICYmIHRocm93RXJyb3IoJ011c3QgbmV2ZXIgYmUgY2FsbGVkIGluIHByb2R1Y3Rpb24gbW9kZScpO1xuICByZXR1cm4gX2NoZWNrTm9DaGFuZ2VzTW9kZSA9PT0gQ2hlY2tOb0NoYW5nZXNNb2RlLkV4aGF1c3RpdmU7XG59XG5mdW5jdGlvbiBzZXRJc0luQ2hlY2tOb0NoYW5nZXNNb2RlKG1vZGUpIHtcbiAgIW5nRGV2TW9kZSAmJiB0aHJvd0Vycm9yKCdNdXN0IG5ldmVyIGJlIGNhbGxlZCBpbiBwcm9kdWN0aW9uIG1vZGUnKTtcbiAgX2NoZWNrTm9DaGFuZ2VzTW9kZSA9IG1vZGU7XG59XG5mdW5jdGlvbiBpc1JlZnJlc2hpbmdWaWV3cygpIHtcbiAgcmV0dXJuIF9pc1JlZnJlc2hpbmdWaWV3cztcbn1cbmZ1bmN0aW9uIHNldElzUmVmcmVzaGluZ1ZpZXdzKG1vZGUpIHtcbiAgY29uc3QgcHJldiA9IF9pc1JlZnJlc2hpbmdWaWV3cztcbiAgX2lzUmVmcmVzaGluZ1ZpZXdzID0gbW9kZTtcbiAgcmV0dXJuIHByZXY7XG59XG5mdW5jdGlvbiBnZXRCaW5kaW5nUm9vdCgpIHtcbiAgY29uc3QgbEZyYW1lID0gaW5zdHJ1Y3Rpb25TdGF0ZS5sRnJhbWU7XG4gIGxldCBpbmRleCA9IGxGcmFtZS5iaW5kaW5nUm9vdEluZGV4O1xuICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgaW5kZXggPSBsRnJhbWUuYmluZGluZ1Jvb3RJbmRleCA9IGxGcmFtZS50Vmlldy5iaW5kaW5nU3RhcnRJbmRleDtcbiAgfVxuICByZXR1cm4gaW5kZXg7XG59XG5mdW5jdGlvbiBnZXRCaW5kaW5nSW5kZXgoKSB7XG4gIHJldHVybiBpbnN0cnVjdGlvblN0YXRlLmxGcmFtZS5iaW5kaW5nSW5kZXg7XG59XG5mdW5jdGlvbiBzZXRCaW5kaW5nSW5kZXgodmFsdWUpIHtcbiAgcmV0dXJuIGluc3RydWN0aW9uU3RhdGUubEZyYW1lLmJpbmRpbmdJbmRleCA9IHZhbHVlO1xufVxuZnVuY3Rpb24gbmV4dEJpbmRpbmdJbmRleCgpIHtcbiAgcmV0dXJuIGluc3RydWN0aW9uU3RhdGUubEZyYW1lLmJpbmRpbmdJbmRleCsrO1xufVxuZnVuY3Rpb24gaW5jcmVtZW50QmluZGluZ0luZGV4KGNvdW50KSB7XG4gIGNvbnN0IGxGcmFtZSA9IGluc3RydWN0aW9uU3RhdGUubEZyYW1lO1xuICBjb25zdCBpbmRleCA9IGxGcmFtZS5iaW5kaW5nSW5kZXg7XG4gIGxGcmFtZS5iaW5kaW5nSW5kZXggPSBsRnJhbWUuYmluZGluZ0luZGV4ICsgY291bnQ7XG4gIHJldHVybiBpbmRleDtcbn1cbmZ1bmN0aW9uIGlzSW5JMThuQmxvY2soKSB7XG4gIHJldHVybiBpbnN0cnVjdGlvblN0YXRlLmxGcmFtZS5pbkkxOG47XG59XG5mdW5jdGlvbiBzZXRJbkkxOG5CbG9jayhpc0luSTE4bkJsb2NrKSB7XG4gIGluc3RydWN0aW9uU3RhdGUubEZyYW1lLmluSTE4biA9IGlzSW5JMThuQmxvY2s7XG59XG5mdW5jdGlvbiBzZXRCaW5kaW5nUm9vdEZvckhvc3RCaW5kaW5ncyhiaW5kaW5nUm9vdEluZGV4LCBjdXJyZW50RGlyZWN0aXZlSW5kZXgpIHtcbiAgY29uc3QgbEZyYW1lID0gaW5zdHJ1Y3Rpb25TdGF0ZS5sRnJhbWU7XG4gIGxGcmFtZS5iaW5kaW5nSW5kZXggPSBsRnJhbWUuYmluZGluZ1Jvb3RJbmRleCA9IGJpbmRpbmdSb290SW5kZXg7XG4gIHNldEN1cnJlbnREaXJlY3RpdmVJbmRleChjdXJyZW50RGlyZWN0aXZlSW5kZXgpO1xufVxuZnVuY3Rpb24gZ2V0Q3VycmVudERpcmVjdGl2ZUluZGV4KCkge1xuICByZXR1cm4gaW5zdHJ1Y3Rpb25TdGF0ZS5sRnJhbWUuY3VycmVudERpcmVjdGl2ZUluZGV4O1xufVxuZnVuY3Rpb24gc2V0Q3VycmVudERpcmVjdGl2ZUluZGV4KGN1cnJlbnREaXJlY3RpdmVJbmRleCkge1xuICBpbnN0cnVjdGlvblN0YXRlLmxGcmFtZS5jdXJyZW50RGlyZWN0aXZlSW5kZXggPSBjdXJyZW50RGlyZWN0aXZlSW5kZXg7XG59XG5mdW5jdGlvbiBnZXRDdXJyZW50RGlyZWN0aXZlRGVmKHREYXRhKSB7XG4gIGNvbnN0IGN1cnJlbnREaXJlY3RpdmVJbmRleCA9IGluc3RydWN0aW9uU3RhdGUubEZyYW1lLmN1cnJlbnREaXJlY3RpdmVJbmRleDtcbiAgcmV0dXJuIGN1cnJlbnREaXJlY3RpdmVJbmRleCA9PT0gLTEgPyBudWxsIDogdERhdGFbY3VycmVudERpcmVjdGl2ZUluZGV4XTtcbn1cbmZ1bmN0aW9uIGdldEN1cnJlbnRRdWVyeUluZGV4KCkge1xuICByZXR1cm4gaW5zdHJ1Y3Rpb25TdGF0ZS5sRnJhbWUuY3VycmVudFF1ZXJ5SW5kZXg7XG59XG5mdW5jdGlvbiBzZXRDdXJyZW50UXVlcnlJbmRleCh2YWx1ZSkge1xuICBpbnN0cnVjdGlvblN0YXRlLmxGcmFtZS5jdXJyZW50UXVlcnlJbmRleCA9IHZhbHVlO1xufVxuZnVuY3Rpb24gZ2V0RGVjbGFyYXRpb25UTm9kZShsVmlldykge1xuICBjb25zdCB0VmlldyA9IGxWaWV3W1RWSUVXXTtcbiAgaWYgKHRWaWV3LnR5cGUgPT09IDIpIHtcbiAgICBuZ0Rldk1vZGUgJiYgYXNzZXJ0RGVmaW5lZCh0Vmlldy5kZWNsVE5vZGUsICdFbWJlZGRlZCBUTm9kZXMgc2hvdWxkIGhhdmUgZGVjbGFyYXRpb24gcGFyZW50cy4nKTtcbiAgICByZXR1cm4gdFZpZXcuZGVjbFROb2RlO1xuICB9XG4gIGlmICh0Vmlldy50eXBlID09PSAxKSB7XG4gICAgcmV0dXJuIGxWaWV3W1RfSE9TVF07XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5mdW5jdGlvbiBlbnRlckRJKGxWaWV3LCB0Tm9kZSwgZmxhZ3MpIHtcbiAgbmdEZXZNb2RlICYmIGFzc2VydExWaWV3T3JVbmRlZmluZWQobFZpZXcpO1xuICBpZiAoZmxhZ3MgJiA0KSB7XG4gICAgbmdEZXZNb2RlICYmIGFzc2VydFROb2RlRm9yVFZpZXcodE5vZGUsIGxWaWV3W1RWSUVXXSk7XG4gICAgbGV0IHBhcmVudFROb2RlID0gdE5vZGU7XG4gICAgbGV0IHBhcmVudExWaWV3ID0gbFZpZXc7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIG5nRGV2TW9kZSAmJiBhc3NlcnREZWZpbmVkKHBhcmVudFROb2RlLCAnUGFyZW50IFROb2RlIHNob3VsZCBiZSBkZWZpbmVkJyk7XG4gICAgICBwYXJlbnRUTm9kZSA9IHBhcmVudFROb2RlLnBhcmVudDtcbiAgICAgIGlmIChwYXJlbnRUTm9kZSA9PT0gbnVsbCAmJiAhKGZsYWdzICYgMSkpIHtcbiAgICAgICAgcGFyZW50VE5vZGUgPSBnZXREZWNsYXJhdGlvblROb2RlKHBhcmVudExWaWV3KTtcbiAgICAgICAgaWYgKHBhcmVudFROb2RlID09PSBudWxsKSBicmVhaztcbiAgICAgICAgbmdEZXZNb2RlICYmIGFzc2VydERlZmluZWQocGFyZW50TFZpZXcsICdQYXJlbnQgTFZpZXcgc2hvdWxkIGJlIGRlZmluZWQnKTtcbiAgICAgICAgcGFyZW50TFZpZXcgPSBwYXJlbnRMVmlld1tERUNMQVJBVElPTl9WSUVXXTtcbiAgICAgICAgaWYgKHBhcmVudFROb2RlLnR5cGUgJiAoMiB8IDgpKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAocGFyZW50VE5vZGUgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdE5vZGUgPSBwYXJlbnRUTm9kZTtcbiAgICAgIGxWaWV3ID0gcGFyZW50TFZpZXc7XG4gICAgfVxuICB9XG4gIG5nRGV2TW9kZSAmJiBhc3NlcnRUTm9kZUZvckxWaWV3KHROb2RlLCBsVmlldyk7XG4gIGNvbnN0IGxGcmFtZSA9IGluc3RydWN0aW9uU3RhdGUubEZyYW1lID0gYWxsb2NMRnJhbWUoKTtcbiAgbEZyYW1lLmN1cnJlbnRUTm9kZSA9IHROb2RlO1xuICBsRnJhbWUubFZpZXcgPSBsVmlldztcbiAgcmV0dXJuIHRydWU7XG59XG5mdW5jdGlvbiBlbnRlclZpZXcobmV3Vmlldykge1xuICBuZ0Rldk1vZGUgJiYgYXNzZXJ0Tm90RXF1YWwobmV3Vmlld1swXSwgbmV3Vmlld1sxXSwgJz8/Pz8nKTtcbiAgbmdEZXZNb2RlICYmIGFzc2VydExWaWV3T3JVbmRlZmluZWQobmV3Vmlldyk7XG4gIGNvbnN0IG5ld0xGcmFtZSA9IGFsbG9jTEZyYW1lKCk7XG4gIGlmIChuZ0Rldk1vZGUpIHtcbiAgICBhc3NlcnRFcXVhbChuZXdMRnJhbWUuaXNQYXJlbnQsIHRydWUsICdFeHBlY3RlZCBjbGVhbiBMRnJhbWUnKTtcbiAgICBhc3NlcnRFcXVhbChuZXdMRnJhbWUubFZpZXcsIG51bGwsICdFeHBlY3RlZCBjbGVhbiBMRnJhbWUnKTtcbiAgICBhc3NlcnRFcXVhbChuZXdMRnJhbWUudFZpZXcsIG51bGwsICdFeHBlY3RlZCBjbGVhbiBMRnJhbWUnKTtcbiAgICBhc3NlcnRFcXVhbChuZXdMRnJhbWUuc2VsZWN0ZWRJbmRleCwgLTEsICdFeHBlY3RlZCBjbGVhbiBMRnJhbWUnKTtcbiAgICBhc3NlcnRFcXVhbChuZXdMRnJhbWUuZWxlbWVudERlcHRoQ291bnQsIDAsICdFeHBlY3RlZCBjbGVhbiBMRnJhbWUnKTtcbiAgICBhc3NlcnRFcXVhbChuZXdMRnJhbWUuY3VycmVudERpcmVjdGl2ZUluZGV4LCAtMSwgJ0V4cGVjdGVkIGNsZWFuIExGcmFtZScpO1xuICAgIGFzc2VydEVxdWFsKG5ld0xGcmFtZS5jdXJyZW50TmFtZXNwYWNlLCBudWxsLCAnRXhwZWN0ZWQgY2xlYW4gTEZyYW1lJyk7XG4gICAgYXNzZXJ0RXF1YWwobmV3TEZyYW1lLmJpbmRpbmdSb290SW5kZXgsIC0xLCAnRXhwZWN0ZWQgY2xlYW4gTEZyYW1lJyk7XG4gICAgYXNzZXJ0RXF1YWwobmV3TEZyYW1lLmN1cnJlbnRRdWVyeUluZGV4LCAwLCAnRXhwZWN0ZWQgY2xlYW4gTEZyYW1lJyk7XG4gIH1cbiAgY29uc3QgdFZpZXcgPSBuZXdWaWV3W1RWSUVXXTtcbiAgaW5zdHJ1Y3Rpb25TdGF0ZS5sRnJhbWUgPSBuZXdMRnJhbWU7XG4gIG5nRGV2TW9kZSAmJiB0Vmlldy5maXJzdENoaWxkICYmIGFzc2VydFROb2RlRm9yVFZpZXcodFZpZXcuZmlyc3RDaGlsZCwgdFZpZXcpO1xuICBuZXdMRnJhbWUuY3VycmVudFROb2RlID0gdFZpZXcuZmlyc3RDaGlsZDtcbiAgbmV3TEZyYW1lLmxWaWV3ID0gbmV3VmlldztcbiAgbmV3TEZyYW1lLnRWaWV3ID0gdFZpZXc7XG4gIG5ld0xGcmFtZS5jb250ZXh0TFZpZXcgPSBuZXdWaWV3O1xuICBuZXdMRnJhbWUuYmluZGluZ0luZGV4ID0gdFZpZXcuYmluZGluZ1N0YXJ0SW5kZXg7XG4gIG5ld0xGcmFtZS5pbkkxOG4gPSBmYWxzZTtcbn1cbmZ1bmN0aW9uIGFsbG9jTEZyYW1lKCkge1xuICBjb25zdCBjdXJyZW50TEZyYW1lID0gaW5zdHJ1Y3Rpb25TdGF0ZS5sRnJhbWU7XG4gIGNvbnN0IGNoaWxkTEZyYW1lID0gY3VycmVudExGcmFtZSA9PT0gbnVsbCA/IG51bGwgOiBjdXJyZW50TEZyYW1lLmNoaWxkO1xuICBjb25zdCBuZXdMRnJhbWUgPSBjaGlsZExGcmFtZSA9PT0gbnVsbCA/IGNyZWF0ZUxGcmFtZShjdXJyZW50TEZyYW1lKSA6IGNoaWxkTEZyYW1lO1xuICByZXR1cm4gbmV3TEZyYW1lO1xufVxuZnVuY3Rpb24gY3JlYXRlTEZyYW1lKHBhcmVudCkge1xuICBjb25zdCBsRnJhbWUgPSB7XG4gICAgY3VycmVudFROb2RlOiBudWxsLFxuICAgIGlzUGFyZW50OiB0cnVlLFxuICAgIGxWaWV3OiBudWxsLFxuICAgIHRWaWV3OiBudWxsLFxuICAgIHNlbGVjdGVkSW5kZXg6IC0xLFxuICAgIGNvbnRleHRMVmlldzogbnVsbCxcbiAgICBlbGVtZW50RGVwdGhDb3VudDogMCxcbiAgICBjdXJyZW50TmFtZXNwYWNlOiBudWxsLFxuICAgIGN1cnJlbnREaXJlY3RpdmVJbmRleDogLTEsXG4gICAgYmluZGluZ1Jvb3RJbmRleDogLTEsXG4gICAgYmluZGluZ0luZGV4OiAtMSxcbiAgICBjdXJyZW50UXVlcnlJbmRleDogMCxcbiAgICBwYXJlbnQ6IHBhcmVudCxcbiAgICBjaGlsZDogbnVsbCxcbiAgICBpbkkxOG46IGZhbHNlXG4gIH07XG4gIHBhcmVudCAhPT0gbnVsbCAmJiAocGFyZW50LmNoaWxkID0gbEZyYW1lKTtcbiAgcmV0dXJuIGxGcmFtZTtcbn1cbmZ1bmN0aW9uIGxlYXZlVmlld0xpZ2h0KCkge1xuICBjb25zdCBvbGRMRnJhbWUgPSBpbnN0cnVjdGlvblN0YXRlLmxGcmFtZTtcbiAgaW5zdHJ1Y3Rpb25TdGF0ZS5sRnJhbWUgPSBvbGRMRnJhbWUucGFyZW50O1xuICBvbGRMRnJhbWUuY3VycmVudFROb2RlID0gbnVsbDtcbiAgb2xkTEZyYW1lLmxWaWV3ID0gbnVsbDtcbiAgcmV0dXJuIG9sZExGcmFtZTtcbn1cbmNvbnN0IGxlYXZlREkgPSBsZWF2ZVZpZXdMaWdodDtcbmZ1bmN0aW9uIGxlYXZlVmlldygpIHtcbiAgY29uc3Qgb2xkTEZyYW1lID0gbGVhdmVWaWV3TGlnaHQoKTtcbiAgb2xkTEZyYW1lLmlzUGFyZW50ID0gdHJ1ZTtcbiAgb2xkTEZyYW1lLnRWaWV3ID0gbnVsbDtcbiAgb2xkTEZyYW1lLnNlbGVjdGVkSW5kZXggPSAtMTtcbiAgb2xkTEZyYW1lLmNvbnRleHRMVmlldyA9IG51bGw7XG4gIG9sZExGcmFtZS5lbGVtZW50RGVwdGhDb3VudCA9IDA7XG4gIG9sZExGcmFtZS5jdXJyZW50RGlyZWN0aXZlSW5kZXggPSAtMTtcbiAgb2xkTEZyYW1lLmN1cnJlbnROYW1lc3BhY2UgPSBudWxsO1xuICBvbGRMRnJhbWUuYmluZGluZ1Jvb3RJbmRleCA9IC0xO1xuICBvbGRMRnJhbWUuYmluZGluZ0luZGV4ID0gLTE7XG4gIG9sZExGcmFtZS5jdXJyZW50UXVlcnlJbmRleCA9IDA7XG59XG5mdW5jdGlvbiBuZXh0Q29udGV4dEltcGwobGV2ZWwpIHtcbiAgY29uc3QgY29udGV4dExWaWV3ID0gaW5zdHJ1Y3Rpb25TdGF0ZS5sRnJhbWUuY29udGV4dExWaWV3ID0gd2Fsa1VwVmlld3MobGV2ZWwsIGluc3RydWN0aW9uU3RhdGUubEZyYW1lLmNvbnRleHRMVmlldyk7XG4gIHJldHVybiBjb250ZXh0TFZpZXdbQ09OVEVYVF07XG59XG5mdW5jdGlvbiBnZXRTZWxlY3RlZEluZGV4KCkge1xuICByZXR1cm4gaW5zdHJ1Y3Rpb25TdGF0ZS5sRnJhbWUuc2VsZWN0ZWRJbmRleDtcbn1cbmZ1bmN0aW9uIHNldFNlbGVjdGVkSW5kZXgoaW5kZXgpIHtcbiAgbmdEZXZNb2RlICYmIGluZGV4ICE9PSAtMSAmJiBhc3NlcnRHcmVhdGVyVGhhbk9yRXF1YWwoaW5kZXgsIEhFQURFUl9PRkZTRVQsICdJbmRleCBtdXN0IGJlIHBhc3QgSEVBREVSX09GRlNFVCAob3IgLTEpLicpO1xuICBuZ0Rldk1vZGUgJiYgYXNzZXJ0TGVzc1RoYW4oaW5kZXgsIGluc3RydWN0aW9uU3RhdGUubEZyYW1lLmxWaWV3Lmxlbmd0aCwgXCJDYW4ndCBzZXQgaW5kZXggcGFzc2VkIGVuZCBvZiBMVmlld1wiKTtcbiAgaW5zdHJ1Y3Rpb25TdGF0ZS5sRnJhbWUuc2VsZWN0ZWRJbmRleCA9IGluZGV4O1xufVxuZnVuY3Rpb24gZ2V0U2VsZWN0ZWRUTm9kZSgpIHtcbiAgY29uc3QgbEZyYW1lID0gaW5zdHJ1Y3Rpb25TdGF0ZS5sRnJhbWU7XG4gIHJldHVybiBnZXRUTm9kZShsRnJhbWUudFZpZXcsIGxGcmFtZS5zZWxlY3RlZEluZGV4KTtcbn1cbmZ1bmN0aW9uIMm1ybVuYW1lc3BhY2VTVkcoKSB7XG4gIGluc3RydWN0aW9uU3RhdGUubEZyYW1lLmN1cnJlbnROYW1lc3BhY2UgPSBTVkdfTkFNRVNQQUNFO1xufVxuZnVuY3Rpb24gybXJtW5hbWVzcGFjZU1hdGhNTCgpIHtcbiAgaW5zdHJ1Y3Rpb25TdGF0ZS5sRnJhbWUuY3VycmVudE5hbWVzcGFjZSA9IE1BVEhfTUxfTkFNRVNQQUNFO1xufVxuZnVuY3Rpb24gybXJtW5hbWVzcGFjZUhUTUwoKSB7XG4gIG5hbWVzcGFjZUhUTUxJbnRlcm5hbCgpO1xufVxuZnVuY3Rpb24gbmFtZXNwYWNlSFRNTEludGVybmFsKCkge1xuICBpbnN0cnVjdGlvblN0YXRlLmxGcmFtZS5jdXJyZW50TmFtZXNwYWNlID0gbnVsbDtcbn1cbmZ1bmN0aW9uIGdldE5hbWVzcGFjZSgpIHtcbiAgcmV0dXJuIGluc3RydWN0aW9uU3RhdGUubEZyYW1lLmN1cnJlbnROYW1lc3BhY2U7XG59XG5sZXQgX3dhc0xhc3ROb2RlQ3JlYXRlZCA9IHRydWU7XG5mdW5jdGlvbiB3YXNMYXN0Tm9kZUNyZWF0ZWQoKSB7XG4gIHJldHVybiBfd2FzTGFzdE5vZGVDcmVhdGVkO1xufVxuZnVuY3Rpb24gbGFzdE5vZGVXYXNDcmVhdGVkKGZsYWcpIHtcbiAgX3dhc0xhc3ROb2RlQ3JlYXRlZCA9IGZsYWc7XG59XG5mdW5jdGlvbiBjcmVhdGVJbmplY3RvcihkZWZUeXBlLCBwYXJlbnQgPSBudWxsLCBhZGRpdGlvbmFsUHJvdmlkZXJzID0gbnVsbCwgbmFtZSkge1xuICBjb25zdCBpbmplY3RvciA9IGNyZWF0ZUluamVjdG9yV2l0aG91dEluamVjdG9ySW5zdGFuY2VzKGRlZlR5cGUsIHBhcmVudCwgYWRkaXRpb25hbFByb3ZpZGVycywgbmFtZSk7XG4gIGluamVjdG9yLnJlc29sdmVJbmplY3RvckluaXRpYWxpemVycygpO1xuICByZXR1cm4gaW5qZWN0b3I7XG59XG5mdW5jdGlvbiBjcmVhdGVJbmplY3RvcldpdGhvdXRJbmplY3Rvckluc3RhbmNlcyhkZWZUeXBlLCBwYXJlbnQgPSBudWxsLCBhZGRpdGlvbmFsUHJvdmlkZXJzID0gbnVsbCwgbmFtZSwgc2NvcGVzID0gbmV3IFNldCgpKSB7XG4gIGNvbnN0IHByb3ZpZGVycyA9IFthZGRpdGlvbmFsUHJvdmlkZXJzIHx8IEVNUFRZX0FSUkFZLCBpbXBvcnRQcm92aWRlcnNGcm9tKGRlZlR5cGUpXTtcbiAgbGV0IHNvdXJjZSA9IHVuZGVmaW5lZDtcbiAgaWYgKG5nRGV2TW9kZSkge1xuICAgIHNvdXJjZSA9IG5hbWUgfHwgKHR5cGVvZiBkZWZUeXBlID09PSAnb2JqZWN0JyA/IHVuZGVmaW5lZCA6IHN0cmluZ2lmeShkZWZUeXBlKSk7XG4gIH1cbiAgcmV0dXJuIG5ldyBSM0luamVjdG9yKHByb3ZpZGVycywgcGFyZW50IHx8IGdldE51bGxJbmplY3RvcigpLCBzb3VyY2UgfHwgbnVsbCwgc2NvcGVzKTtcbn1cbmNsYXNzIEluamVjdG9yIHtcbiAgc3RhdGljIFRIUk9XX0lGX05PVF9GT1VORCA9IFRIUk9XX0lGX05PVF9GT1VORDtcbiAgc3RhdGljIE5VTEwgPSAvKiNfX1BVUkVfXyovbmV3IE51bGxJbmplY3RvcigpO1xuICBzdGF0aWMgY3JlYXRlKG9wdGlvbnMsIHBhcmVudCkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KG9wdGlvbnMpKSB7XG4gICAgICByZXR1cm4gY3JlYXRlSW5qZWN0b3Ioe1xuICAgICAgICBuYW1lOiAnJ1xuICAgICAgfSwgcGFyZW50LCBvcHRpb25zLCAnJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IG5hbWUgPSBvcHRpb25zLm5hbWUgPz8gJyc7XG4gICAgICByZXR1cm4gY3JlYXRlSW5qZWN0b3Ioe1xuICAgICAgICBuYW1lXG4gICAgICB9LCBvcHRpb25zLnBhcmVudCwgb3B0aW9ucy5wcm92aWRlcnMsIG5hbWUpO1xuICAgIH1cbiAgfVxuICBzdGF0aWMgybVwcm92ID0gLyogQF9fUFVSRV9fICovXG4gIMm1ybVkZWZpbmVJbmplY3RhYmxlKHtcbiAgICB0b2tlbjogSW5qZWN0b3IsXG4gICAgcHJvdmlkZWRJbjogJ2FueScsXG4gICAgZmFjdG9yeTogKCkgPT4gybXJtWluamVjdChJTkpFQ1RPUiQxKVxuICB9KTtcbiAgc3RhdGljIF9fTkdfRUxFTUVOVF9JRF9fID0gLTE7XG59XG5jb25zdCBET0NVTUVOVCA9IC8qI19fUFVSRV9fKi9uZXcgSW5qZWN0aW9uVG9rZW4odHlwZW9mIG5nRGV2TW9kZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbmdEZXZNb2RlID8gJ0RvY3VtZW50VG9rZW4nIDogJycpO1xubGV0IERlc3Ryb3lSZWYgPSAvKiNfX1BVUkVfXyovKCgpID0+IHtcbiAgY2xhc3MgRGVzdHJveVJlZiB7XG4gICAgc3RhdGljIF9fTkdfRUxFTUVOVF9JRF9fID0gaW5qZWN0RGVzdHJveVJlZjtcbiAgICBzdGF0aWMgX19OR19FTlZfSURfXyA9IGluamVjdG9yID0+IGluamVjdG9yO1xuICB9XG4gIHJldHVybiBEZXN0cm95UmVmO1xufSkoKTtcbmNsYXNzIE5vZGVJbmplY3RvckRlc3Ryb3lSZWYgZXh0ZW5kcyBEZXN0cm95UmVmIHtcbiAgX2xWaWV3O1xuICBjb25zdHJ1Y3RvcihfbFZpZXcpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuX2xWaWV3ID0gX2xWaWV3O1xuICB9XG4gIGdldCBkZXN0cm95ZWQoKSB7XG4gICAgcmV0dXJuIGlzRGVzdHJveWVkKHRoaXMuX2xWaWV3KTtcbiAgfVxuICBvbkRlc3Ryb3koY2FsbGJhY2spIHtcbiAgICBjb25zdCBsVmlldyA9IHRoaXMuX2xWaWV3O1xuICAgIHN0b3JlTFZpZXdPbkRlc3Ryb3kobFZpZXcsIGNhbGxiYWNrKTtcbiAgICByZXR1cm4gKCkgPT4gcmVtb3ZlTFZpZXdPbkRlc3Ryb3kobFZpZXcsIGNhbGxiYWNrKTtcbiAgfVxufVxuZnVuY3Rpb24gaW5qZWN0RGVzdHJveVJlZigpIHtcbiAgcmV0dXJuIG5ldyBOb2RlSW5qZWN0b3JEZXN0cm95UmVmKGdldExWaWV3KCkpO1xufVxuY29uc3QgU0NIRURVTEVfSU5fUk9PVF9aT05FX0RFRkFVTFQgPSBmYWxzZTtcbmNvbnN0IERFQlVHX1RBU0tfVFJBQ0tFUiA9IC8qI19fUFVSRV9fKi9uZXcgSW5qZWN0aW9uVG9rZW4odHlwZW9mIG5nRGV2TW9kZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbmdEZXZNb2RlID8gJ0RFQlVHX1RBU0tfVFJBQ0tFUicgOiAnJyk7XG5sZXQgUGVuZGluZ1Rhc2tzSW50ZXJuYWwgPSAvKiNfX1BVUkVfXyovKCgpID0+IHtcbiAgY2xhc3MgUGVuZGluZ1Rhc2tzSW50ZXJuYWwge1xuICAgIHRhc2tJZCA9IDA7XG4gICAgcGVuZGluZ1Rhc2tzID0gbmV3IFNldCgpO1xuICAgIGRlc3Ryb3llZCA9IGZhbHNlO1xuICAgIHBlbmRpbmdUYXNrID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG4gICAgZGVidWdUYXNrVHJhY2tlciA9IGluamVjdChERUJVR19UQVNLX1RSQUNLRVIsIHtcbiAgICAgIG9wdGlvbmFsOiB0cnVlXG4gICAgfSk7XG4gICAgZ2V0IGhhc1BlbmRpbmdUYXNrcygpIHtcbiAgICAgIHJldHVybiB0aGlzLmRlc3Ryb3llZCA/IGZhbHNlIDogdGhpcy5wZW5kaW5nVGFzay52YWx1ZTtcbiAgICB9XG4gICAgZ2V0IGhhc1BlbmRpbmdUYXNrc09ic2VydmFibGUoKSB7XG4gICAgICBpZiAodGhpcy5kZXN0cm95ZWQpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKHN1YnNjcmliZXIgPT4ge1xuICAgICAgICAgIHN1YnNjcmliZXIubmV4dChmYWxzZSk7XG4gICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLnBlbmRpbmdUYXNrO1xuICAgIH1cbiAgICBhZGQoKSB7XG4gICAgICBpZiAoIXRoaXMuaGFzUGVuZGluZ1Rhc2tzICYmICF0aGlzLmRlc3Ryb3llZCkge1xuICAgICAgICB0aGlzLnBlbmRpbmdUYXNrLm5leHQodHJ1ZSk7XG4gICAgICB9XG4gICAgICBjb25zdCB0YXNrSWQgPSB0aGlzLnRhc2tJZCsrO1xuICAgICAgdGhpcy5wZW5kaW5nVGFza3MuYWRkKHRhc2tJZCk7XG4gICAgICB0aGlzLmRlYnVnVGFza1RyYWNrZXI/LmFkZCh0YXNrSWQpO1xuICAgICAgcmV0dXJuIHRhc2tJZDtcbiAgICB9XG4gICAgaGFzKHRhc2tJZCkge1xuICAgICAgcmV0dXJuIHRoaXMucGVuZGluZ1Rhc2tzLmhhcyh0YXNrSWQpO1xuICAgIH1cbiAgICByZW1vdmUodGFza0lkKSB7XG4gICAgICB0aGlzLnBlbmRpbmdUYXNrcy5kZWxldGUodGFza0lkKTtcbiAgICAgIHRoaXMuZGVidWdUYXNrVHJhY2tlcj8ucmVtb3ZlKHRhc2tJZCk7XG4gICAgICBpZiAodGhpcy5wZW5kaW5nVGFza3Muc2l6ZSA9PT0gMCAmJiB0aGlzLmhhc1BlbmRpbmdUYXNrcykge1xuICAgICAgICB0aGlzLnBlbmRpbmdUYXNrLm5leHQoZmFsc2UpO1xuICAgICAgfVxuICAgIH1cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgIHRoaXMucGVuZGluZ1Rhc2tzLmNsZWFyKCk7XG4gICAgICBpZiAodGhpcy5oYXNQZW5kaW5nVGFza3MpIHtcbiAgICAgICAgdGhpcy5wZW5kaW5nVGFzay5uZXh0KGZhbHNlKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZGVzdHJveWVkID0gdHJ1ZTtcbiAgICAgIHRoaXMucGVuZGluZ1Rhc2sudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgc3RhdGljIMm1cHJvdiA9IC8qIEBfX1BVUkVfXyAqL1xuICAgIMm1ybVkZWZpbmVJbmplY3RhYmxlKHtcbiAgICAgIHRva2VuOiBQZW5kaW5nVGFza3NJbnRlcm5hbCxcbiAgICAgIHByb3ZpZGVkSW46ICdyb290JyxcbiAgICAgIGZhY3Rvcnk6ICgpID0+IG5ldyBQZW5kaW5nVGFza3NJbnRlcm5hbCgpXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIFBlbmRpbmdUYXNrc0ludGVybmFsO1xufSkoKTtcbmNsYXNzIEV2ZW50RW1pdHRlcl8gZXh0ZW5kcyBTdWJqZWN0IHtcbiAgX19pc0FzeW5jO1xuICBkZXN0cm95UmVmID0gdW5kZWZpbmVkO1xuICBwZW5kaW5nVGFza3MgPSB1bmRlZmluZWQ7XG4gIGNvbnN0cnVjdG9yKGlzQXN5bmMgPSBmYWxzZSkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5fX2lzQXN5bmMgPSBpc0FzeW5jO1xuICAgIGlmIChpc0luSW5qZWN0aW9uQ29udGV4dCgpKSB7XG4gICAgICB0aGlzLmRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZiwge1xuICAgICAgICBvcHRpb25hbDogdHJ1ZVxuICAgICAgfSkgPz8gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5wZW5kaW5nVGFza3MgPSBpbmplY3QoUGVuZGluZ1Rhc2tzSW50ZXJuYWwsIHtcbiAgICAgICAgb3B0aW9uYWw6IHRydWVcbiAgICAgIH0pID8/IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cbiAgZW1pdCh2YWx1ZSkge1xuICAgIGNvbnN0IHByZXZDb25zdW1lciA9IHNldEFjdGl2ZUNvbnN1bWVyJDEobnVsbCk7XG4gICAgdHJ5IHtcbiAgICAgIHN1cGVyLm5leHQodmFsdWUpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBzZXRBY3RpdmVDb25zdW1lciQxKHByZXZDb25zdW1lcik7XG4gICAgfVxuICB9XG4gIHN1YnNjcmliZShvYnNlcnZlck9yTmV4dCwgZXJyb3IsIGNvbXBsZXRlKSB7XG4gICAgbGV0IG5leHRGbiA9IG9ic2VydmVyT3JOZXh0O1xuICAgIGxldCBlcnJvckZuID0gZXJyb3IgfHwgKCgpID0+IG51bGwpO1xuICAgIGxldCBjb21wbGV0ZUZuID0gY29tcGxldGU7XG4gICAgaWYgKG9ic2VydmVyT3JOZXh0ICYmIHR5cGVvZiBvYnNlcnZlck9yTmV4dCA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGNvbnN0IG9ic2VydmVyID0gb2JzZXJ2ZXJPck5leHQ7XG4gICAgICBuZXh0Rm4gPSBvYnNlcnZlci5uZXh0Py5iaW5kKG9ic2VydmVyKTtcbiAgICAgIGVycm9yRm4gPSBvYnNlcnZlci5lcnJvcj8uYmluZChvYnNlcnZlcik7XG4gICAgICBjb21wbGV0ZUZuID0gb2JzZXJ2ZXIuY29tcGxldGU/LmJpbmQob2JzZXJ2ZXIpO1xuICAgIH1cbiAgICBpZiAodGhpcy5fX2lzQXN5bmMpIHtcbiAgICAgIGVycm9yRm4gPSB0aGlzLndyYXBJblRpbWVvdXQoZXJyb3JGbik7XG4gICAgICBpZiAobmV4dEZuKSB7XG4gICAgICAgIG5leHRGbiA9IHRoaXMud3JhcEluVGltZW91dChuZXh0Rm4pO1xuICAgICAgfVxuICAgICAgaWYgKGNvbXBsZXRlRm4pIHtcbiAgICAgICAgY29tcGxldGVGbiA9IHRoaXMud3JhcEluVGltZW91dChjb21wbGV0ZUZuKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3Qgc2luayA9IHN1cGVyLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiBuZXh0Rm4sXG4gICAgICBlcnJvcjogZXJyb3JGbixcbiAgICAgIGNvbXBsZXRlOiBjb21wbGV0ZUZuXG4gICAgfSk7XG4gICAgaWYgKG9ic2VydmVyT3JOZXh0IGluc3RhbmNlb2YgU3Vic2NyaXB0aW9uKSB7XG4gICAgICBvYnNlcnZlck9yTmV4dC5hZGQoc2luayk7XG4gICAgfVxuICAgIHJldHVybiBzaW5rO1xuICB9XG4gIHdyYXBJblRpbWVvdXQoZm4pIHtcbiAgICByZXR1cm4gdmFsdWUgPT4ge1xuICAgICAgY29uc3QgdGFza0lkID0gdGhpcy5wZW5kaW5nVGFza3M/LmFkZCgpO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgZm4odmFsdWUpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIGlmICh0YXNrSWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5wZW5kaW5nVGFza3M/LnJlbW92ZSh0YXNrSWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcbiAgfVxufVxuY29uc3QgRXZlbnRFbWl0dGVyID0gRXZlbnRFbWl0dGVyXztcbmZ1bmN0aW9uIG5vb3AoLi4uYXJncykge31cbmZ1bmN0aW9uIHNjaGVkdWxlQ2FsbGJhY2tXaXRoUmFmUmFjZShjYWxsYmFjaykge1xuICBsZXQgdGltZW91dElkO1xuICBsZXQgYW5pbWF0aW9uRnJhbWVJZDtcbiAgZnVuY3Rpb24gY2xlYW51cCgpIHtcbiAgICBjYWxsYmFjayA9IG5vb3A7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChhbmltYXRpb25GcmFtZUlkICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIGNhbmNlbEFuaW1hdGlvbkZyYW1lID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKGFuaW1hdGlvbkZyYW1lSWQpO1xuICAgICAgfVxuICAgICAgaWYgKHRpbWVvdXRJZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgICAgfVxuICAgIH0gY2F0Y2gge31cbiAgfVxuICB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICBjYWxsYmFjaygpO1xuICAgIGNsZWFudXAoKTtcbiAgfSk7XG4gIGlmICh0eXBlb2YgcmVxdWVzdEFuaW1hdGlvbkZyYW1lID09PSAnZnVuY3Rpb24nKSB7XG4gICAgYW5pbWF0aW9uRnJhbWVJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICBjYWxsYmFjaygpO1xuICAgICAgY2xlYW51cCgpO1xuICAgIH0pO1xuICB9XG4gIHJldHVybiAoKSA9PiBjbGVhbnVwKCk7XG59XG5mdW5jdGlvbiBzY2hlZHVsZUNhbGxiYWNrV2l0aE1pY3JvdGFzayhjYWxsYmFjaykge1xuICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBjYWxsYmFjaygpKTtcbiAgcmV0dXJuICgpID0+IHtcbiAgICBjYWxsYmFjayA9IG5vb3A7XG4gIH07XG59XG5jbGFzcyBBc3luY1N0YWNrVGFnZ2luZ1pvbmVTcGVjIHtcbiAgY3JlYXRlVGFzaztcbiAgY29uc3RydWN0b3IobmFtZVByZWZpeCwgY29uc29sZUFzeW5jU3RhY2tUYWdnaW5nSW1wbCA9IGNvbnNvbGUpIHtcbiAgICB0aGlzLm5hbWUgPSAnYXN5bmNTdGFja1RhZ2dpbmcgZm9yICcgKyBuYW1lUHJlZml4O1xuICAgIHRoaXMuY3JlYXRlVGFzayA9IGNvbnNvbGVBc3luY1N0YWNrVGFnZ2luZ0ltcGw/LmNyZWF0ZVRhc2sgPz8gKCgpID0+IG51bGwpO1xuICB9XG4gIG5hbWU7XG4gIG9uU2NoZWR1bGVUYXNrKGRlbGVnYXRlLCBfY3VycmVudCwgdGFyZ2V0LCB0YXNrKSB7XG4gICAgdGFzay5jb25zb2xlVGFzayA9IHRoaXMuY3JlYXRlVGFzayhgWm9uZSAtICR7dGFzay5zb3VyY2UgfHwgdGFzay50eXBlfWApO1xuICAgIHJldHVybiBkZWxlZ2F0ZS5zY2hlZHVsZVRhc2sodGFyZ2V0LCB0YXNrKTtcbiAgfVxuICBvbkludm9rZVRhc2soZGVsZWdhdGUsIF9jdXJyZW50Wm9uZSwgdGFyZ2V0Wm9uZSwgdGFzaywgYXBwbHlUaGlzLCBhcHBseUFyZ3MpIHtcbiAgICBsZXQgcmV0O1xuICAgIGlmICh0YXNrLmNvbnNvbGVUYXNrKSB7XG4gICAgICByZXQgPSB0YXNrLmNvbnNvbGVUYXNrLnJ1bigoKSA9PiBkZWxlZ2F0ZS5pbnZva2VUYXNrKHRhcmdldFpvbmUsIHRhc2ssIGFwcGx5VGhpcywgYXBwbHlBcmdzKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldCA9IGRlbGVnYXRlLmludm9rZVRhc2sodGFyZ2V0Wm9uZSwgdGFzaywgYXBwbHlUaGlzLCBhcHBseUFyZ3MpO1xuICAgIH1cbiAgICByZXR1cm4gcmV0O1xuICB9XG59XG5jb25zdCBpc0FuZ3VsYXJab25lUHJvcGVydHkgPSAnaXNBbmd1bGFyWm9uZSc7XG5jb25zdCBhbmd1bGFyWm9uZUluc3RhbmNlSWRQcm9wZXJ0eSA9IGlzQW5ndWxhclpvbmVQcm9wZXJ0eSArICdfSUQnO1xubGV0IG5nWm9uZUluc3RhbmNlSWQgPSAwO1xuY2xhc3MgTmdab25lIHtcbiAgaGFzUGVuZGluZ01hY3JvdGFza3MgPSBmYWxzZTtcbiAgaGFzUGVuZGluZ01pY3JvdGFza3MgPSBmYWxzZTtcbiAgaXNTdGFibGUgPSB0cnVlO1xuICBvblVuc3RhYmxlID0gLyojX19QVVJFX18qL25ldyBFdmVudEVtaXR0ZXIoZmFsc2UpO1xuICBvbk1pY3JvdGFza0VtcHR5ID0gLyojX19QVVJFX18qL25ldyBFdmVudEVtaXR0ZXIoZmFsc2UpO1xuICBvblN0YWJsZSA9IC8qI19fUFVSRV9fKi9uZXcgRXZlbnRFbWl0dGVyKGZhbHNlKTtcbiAgb25FcnJvciA9IC8qI19fUFVSRV9fKi9uZXcgRXZlbnRFbWl0dGVyKGZhbHNlKTtcbiAgY29uc3RydWN0b3Iob3B0aW9ucykge1xuICAgIGNvbnN0IHtcbiAgICAgIGVuYWJsZUxvbmdTdGFja1RyYWNlID0gZmFsc2UsXG4gICAgICBzaG91bGRDb2FsZXNjZUV2ZW50Q2hhbmdlRGV0ZWN0aW9uID0gZmFsc2UsXG4gICAgICBzaG91bGRDb2FsZXNjZVJ1bkNoYW5nZURldGVjdGlvbiA9IGZhbHNlLFxuICAgICAgc2NoZWR1bGVJblJvb3Rab25lID0gU0NIRURVTEVfSU5fUk9PVF9aT05FX0RFRkFVTFRcbiAgICB9ID0gb3B0aW9ucztcbiAgICBpZiAodHlwZW9mIFpvbmUgPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRocm93IG5ldyBSdW50aW1lRXJyb3IoOTA4LCBuZ0Rldk1vZGUgJiYgYEluIHRoaXMgY29uZmlndXJhdGlvbiBBbmd1bGFyIHJlcXVpcmVzIFpvbmUuanNgKTtcbiAgICB9XG4gICAgWm9uZS5hc3NlcnRab25lUGF0Y2hlZCgpO1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIHNlbGYuX25lc3RpbmcgPSAwO1xuICAgIHNlbGYuX291dGVyID0gc2VsZi5faW5uZXIgPSBab25lLmN1cnJlbnQ7XG4gICAgaWYgKG5nRGV2TW9kZSkge1xuICAgICAgc2VsZi5faW5uZXIgPSBzZWxmLl9pbm5lci5mb3JrKG5ldyBBc3luY1N0YWNrVGFnZ2luZ1pvbmVTcGVjKCdBbmd1bGFyJykpO1xuICAgIH1cbiAgICBpZiAoWm9uZVsnVGFza1RyYWNraW5nWm9uZVNwZWMnXSkge1xuICAgICAgc2VsZi5faW5uZXIgPSBzZWxmLl9pbm5lci5mb3JrKG5ldyBab25lWydUYXNrVHJhY2tpbmdab25lU3BlYyddKCkpO1xuICAgIH1cbiAgICBpZiAoZW5hYmxlTG9uZ1N0YWNrVHJhY2UgJiYgWm9uZVsnbG9uZ1N0YWNrVHJhY2Vab25lU3BlYyddKSB7XG4gICAgICBzZWxmLl9pbm5lciA9IHNlbGYuX2lubmVyLmZvcmsoWm9uZVsnbG9uZ1N0YWNrVHJhY2Vab25lU3BlYyddKTtcbiAgICB9XG4gICAgc2VsZi5zaG91bGRDb2FsZXNjZUV2ZW50Q2hhbmdlRGV0ZWN0aW9uID0gIXNob3VsZENvYWxlc2NlUnVuQ2hhbmdlRGV0ZWN0aW9uICYmIHNob3VsZENvYWxlc2NlRXZlbnRDaGFuZ2VEZXRlY3Rpb247XG4gICAgc2VsZi5zaG91bGRDb2FsZXNjZVJ1bkNoYW5nZURldGVjdGlvbiA9IHNob3VsZENvYWxlc2NlUnVuQ2hhbmdlRGV0ZWN0aW9uO1xuICAgIHNlbGYuY2FsbGJhY2tTY2hlZHVsZWQgPSBmYWxzZTtcbiAgICBzZWxmLnNjaGVkdWxlSW5Sb290Wm9uZSA9IHNjaGVkdWxlSW5Sb290Wm9uZTtcbiAgICBmb3JrSW5uZXJab25lV2l0aEFuZ3VsYXJCZWhhdmlvcihzZWxmKTtcbiAgfVxuICBzdGF0aWMgaXNJbkFuZ3VsYXJab25lKCkge1xuICAgIHJldHVybiB0eXBlb2YgWm9uZSAhPT0gJ3VuZGVmaW5lZCcgJiYgWm9uZS5jdXJyZW50LmdldChpc0FuZ3VsYXJab25lUHJvcGVydHkpID09PSB0cnVlO1xuICB9XG4gIHN0YXRpYyBhc3NlcnRJbkFuZ3VsYXJab25lKCkge1xuICAgIGlmICghTmdab25lLmlzSW5Bbmd1bGFyWm9uZSgpKSB7XG4gICAgICB0aHJvdyBuZXcgUnVudGltZUVycm9yKDkwOSwgbmdEZXZNb2RlICYmICdFeHBlY3RlZCB0byBiZSBpbiBBbmd1bGFyIFpvbmUsIGJ1dCBpdCBpcyBub3QhJyk7XG4gICAgfVxuICB9XG4gIHN0YXRpYyBhc3NlcnROb3RJbkFuZ3VsYXJab25lKCkge1xuICAgIGlmIChOZ1pvbmUuaXNJbkFuZ3VsYXJab25lKCkpIHtcbiAgICAgIHRocm93IG5ldyBSdW50aW1lRXJyb3IoOTA5LCBuZ0Rldk1vZGUgJiYgJ0V4cGVjdGVkIHRvIG5vdCBiZSBpbiBBbmd1bGFyIFpvbmUsIGJ1dCBpdCBpcyEnKTtcbiAgICB9XG4gIH1cbiAgcnVuKGZuLCBhcHBseVRoaXMsIGFwcGx5QXJncykge1xuICAgIHJldHVybiB0aGlzLl9pbm5lci5ydW4oZm4sIGFwcGx5VGhpcywgYXBwbHlBcmdzKTtcbiAgfVxuICBydW5UYXNrKGZuLCBhcHBseVRoaXMsIGFwcGx5QXJncywgbmFtZSkge1xuICAgIGNvbnN0IHpvbmUgPSB0aGlzLl9pbm5lcjtcbiAgICBjb25zdCB0YXNrID0gem9uZS5zY2hlZHVsZUV2ZW50VGFzaygnTmdab25lRXZlbnQ6ICcgKyBuYW1lLCBmbiwgRU1QVFlfUEFZTE9BRCwgbm9vcCwgbm9vcCk7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB6b25lLnJ1blRhc2sodGFzaywgYXBwbHlUaGlzLCBhcHBseUFyZ3MpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB6b25lLmNhbmNlbFRhc2sodGFzayk7XG4gICAgfVxuICB9XG4gIHJ1bkd1YXJkZWQoZm4sIGFwcGx5VGhpcywgYXBwbHlBcmdzKSB7XG4gICAgcmV0dXJuIHRoaXMuX2lubmVyLnJ1bkd1YXJkZWQoZm4sIGFwcGx5VGhpcywgYXBwbHlBcmdzKTtcbiAgfVxuICBydW5PdXRzaWRlQW5ndWxhcihmbikge1xuICAgIHJldHVybiB0aGlzLl9vdXRlci5ydW4oZm4pO1xuICB9XG59XG5jb25zdCBFTVBUWV9QQVlMT0FEID0ge307XG5mdW5jdGlvbiBjaGVja1N0YWJsZSh6b25lKSB7XG4gIGlmICh6b25lLl9uZXN0aW5nID09IDAgJiYgIXpvbmUuaGFzUGVuZGluZ01pY3JvdGFza3MgJiYgIXpvbmUuaXNTdGFibGUpIHtcbiAgICB0cnkge1xuICAgICAgem9uZS5fbmVzdGluZysrO1xuICAgICAgem9uZS5vbk1pY3JvdGFza0VtcHR5LmVtaXQobnVsbCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHpvbmUuX25lc3RpbmctLTtcbiAgICAgIGlmICghem9uZS5oYXNQZW5kaW5nTWljcm90YXNrcykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4gem9uZS5vblN0YWJsZS5lbWl0KG51bGwpKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICB6b25lLmlzU3RhYmxlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gZGVsYXlDaGFuZ2VEZXRlY3Rpb25Gb3JFdmVudHMoem9uZSkge1xuICBpZiAoem9uZS5pc0NoZWNrU3RhYmxlUnVubmluZyB8fCB6b25lLmNhbGxiYWNrU2NoZWR1bGVkKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHpvbmUuY2FsbGJhY2tTY2hlZHVsZWQgPSB0cnVlO1xuICBmdW5jdGlvbiBzY2hlZHVsZUNoZWNrU3RhYmxlKCkge1xuICAgIHNjaGVkdWxlQ2FsbGJhY2tXaXRoUmFmUmFjZSgoKSA9PiB7XG4gICAgICB6b25lLmNhbGxiYWNrU2NoZWR1bGVkID0gZmFsc2U7XG4gICAgICB1cGRhdGVNaWNyb1Rhc2tTdGF0dXMoem9uZSk7XG4gICAgICB6b25lLmlzQ2hlY2tTdGFibGVSdW5uaW5nID0gdHJ1ZTtcbiAgICAgIGNoZWNrU3RhYmxlKHpvbmUpO1xuICAgICAgem9uZS5pc0NoZWNrU3RhYmxlUnVubmluZyA9IGZhbHNlO1xuICAgIH0pO1xuICB9XG4gIGlmICh6b25lLnNjaGVkdWxlSW5Sb290Wm9uZSkge1xuICAgIFpvbmUucm9vdC5ydW4oKCkgPT4ge1xuICAgICAgc2NoZWR1bGVDaGVja1N0YWJsZSgpO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIHpvbmUuX291dGVyLnJ1bigoKSA9PiB7XG4gICAgICBzY2hlZHVsZUNoZWNrU3RhYmxlKCk7XG4gICAgfSk7XG4gIH1cbiAgdXBkYXRlTWljcm9UYXNrU3RhdHVzKHpvbmUpO1xufVxuZnVuY3Rpb24gZm9ya0lubmVyWm9uZVdpdGhBbmd1bGFyQmVoYXZpb3Ioem9uZSkge1xuICBjb25zdCBkZWxheUNoYW5nZURldGVjdGlvbkZvckV2ZW50c0RlbGVnYXRlID0gKCkgPT4ge1xuICAgIGRlbGF5Q2hhbmdlRGV0ZWN0aW9uRm9yRXZlbnRzKHpvbmUpO1xuICB9O1xuICBjb25zdCBpbnN0YW5jZUlkID0gbmdab25lSW5zdGFuY2VJZCsrO1xuICB6b25lLl9pbm5lciA9IHpvbmUuX2lubmVyLmZvcmsoe1xuICAgIG5hbWU6ICdhbmd1bGFyJyxcbiAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICBbaXNBbmd1bGFyWm9uZVByb3BlcnR5XTogdHJ1ZSxcbiAgICAgIFthbmd1bGFyWm9uZUluc3RhbmNlSWRQcm9wZXJ0eV06IGluc3RhbmNlSWQsXG4gICAgICBbYW5ndWxhclpvbmVJbnN0YW5jZUlkUHJvcGVydHkgKyBpbnN0YW5jZUlkXTogdHJ1ZVxuICAgIH0sXG4gICAgb25JbnZva2VUYXNrOiAoZGVsZWdhdGUsIGN1cnJlbnQsIHRhcmdldCwgdGFzaywgYXBwbHlUaGlzLCBhcHBseUFyZ3MpID0+IHtcbiAgICAgIGlmIChzaG91bGRCZUlnbm9yZWRCeVpvbmUoYXBwbHlBcmdzKSkge1xuICAgICAgICByZXR1cm4gZGVsZWdhdGUuaW52b2tlVGFzayh0YXJnZXQsIHRhc2ssIGFwcGx5VGhpcywgYXBwbHlBcmdzKTtcbiAgICAgIH1cbiAgICAgIHRyeSB7XG4gICAgICAgIG9uRW50ZXIoem9uZSk7XG4gICAgICAgIHJldHVybiBkZWxlZ2F0ZS5pbnZva2VUYXNrKHRhcmdldCwgdGFzaywgYXBwbHlUaGlzLCBhcHBseUFyZ3MpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgaWYgKHpvbmUuc2hvdWxkQ29hbGVzY2VFdmVudENoYW5nZURldGVjdGlvbiAmJiB0YXNrLnR5cGUgPT09ICdldmVudFRhc2snIHx8IHpvbmUuc2hvdWxkQ29hbGVzY2VSdW5DaGFuZ2VEZXRlY3Rpb24pIHtcbiAgICAgICAgICBkZWxheUNoYW5nZURldGVjdGlvbkZvckV2ZW50c0RlbGVnYXRlKCk7XG4gICAgICAgIH1cbiAgICAgICAgb25MZWF2ZSh6b25lKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIG9uSW52b2tlOiAoZGVsZWdhdGUsIGN1cnJlbnQsIHRhcmdldCwgY2FsbGJhY2ssIGFwcGx5VGhpcywgYXBwbHlBcmdzLCBzb3VyY2UpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIG9uRW50ZXIoem9uZSk7XG4gICAgICAgIHJldHVybiBkZWxlZ2F0ZS5pbnZva2UodGFyZ2V0LCBjYWxsYmFjaywgYXBwbHlUaGlzLCBhcHBseUFyZ3MsIHNvdXJjZSk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpZiAoem9uZS5zaG91bGRDb2FsZXNjZVJ1bkNoYW5nZURldGVjdGlvbiAmJiAhem9uZS5jYWxsYmFja1NjaGVkdWxlZCAmJiAhaXNTY2hlZHVsZXJUaWNrKGFwcGx5QXJncykpIHtcbiAgICAgICAgICBkZWxheUNoYW5nZURldGVjdGlvbkZvckV2ZW50c0RlbGVnYXRlKCk7XG4gICAgICAgIH1cbiAgICAgICAgb25MZWF2ZSh6b25lKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIG9uSGFzVGFzazogKGRlbGVnYXRlLCBjdXJyZW50LCB0YXJnZXQsIGhhc1Rhc2tTdGF0ZSkgPT4ge1xuICAgICAgZGVsZWdhdGUuaGFzVGFzayh0YXJnZXQsIGhhc1Rhc2tTdGF0ZSk7XG4gICAgICBpZiAoY3VycmVudCA9PT0gdGFyZ2V0KSB7XG4gICAgICAgIGlmIChoYXNUYXNrU3RhdGUuY2hhbmdlID09ICdtaWNyb1Rhc2snKSB7XG4gICAgICAgICAgem9uZS5faGFzUGVuZGluZ01pY3JvdGFza3MgPSBoYXNUYXNrU3RhdGUubWljcm9UYXNrO1xuICAgICAgICAgIHVwZGF0ZU1pY3JvVGFza1N0YXR1cyh6b25lKTtcbiAgICAgICAgICBjaGVja1N0YWJsZSh6b25lKTtcbiAgICAgICAgfSBlbHNlIGlmIChoYXNUYXNrU3RhdGUuY2hhbmdlID09ICdtYWNyb1Rhc2snKSB7XG4gICAgICAgICAgem9uZS5oYXNQZW5kaW5nTWFjcm90YXNrcyA9IGhhc1Rhc2tTdGF0ZS5tYWNyb1Rhc2s7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIG9uSGFuZGxlRXJyb3I6IChkZWxlZ2F0ZSwgY3VycmVudCwgdGFyZ2V0LCBlcnJvcikgPT4ge1xuICAgICAgZGVsZWdhdGUuaGFuZGxlRXJyb3IodGFyZ2V0LCBlcnJvcik7XG4gICAgICB6b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHpvbmUub25FcnJvci5lbWl0KGVycm9yKSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9KTtcbn1cbmZ1bmN0aW9uIHVwZGF0ZU1pY3JvVGFza1N0YXR1cyh6b25lKSB7XG4gIGlmICh6b25lLl9oYXNQZW5kaW5nTWljcm90YXNrcyB8fCAoem9uZS5zaG91bGRDb2FsZXNjZUV2ZW50Q2hhbmdlRGV0ZWN0aW9uIHx8IHpvbmUuc2hvdWxkQ29hbGVzY2VSdW5DaGFuZ2VEZXRlY3Rpb24pICYmIHpvbmUuY2FsbGJhY2tTY2hlZHVsZWQgPT09IHRydWUpIHtcbiAgICB6b25lLmhhc1BlbmRpbmdNaWNyb3Rhc2tzID0gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICB6b25lLmhhc1BlbmRpbmdNaWNyb3Rhc2tzID0gZmFsc2U7XG4gIH1cbn1cbmZ1bmN0aW9uIG9uRW50ZXIoem9uZSkge1xuICB6b25lLl9uZXN0aW5nKys7XG4gIGlmICh6b25lLmlzU3RhYmxlKSB7XG4gICAgem9uZS5pc1N0YWJsZSA9IGZhbHNlO1xuICAgIHpvbmUub25VbnN0YWJsZS5lbWl0KG51bGwpO1xuICB9XG59XG5mdW5jdGlvbiBvbkxlYXZlKHpvbmUpIHtcbiAgem9uZS5fbmVzdGluZy0tO1xuICBjaGVja1N0YWJsZSh6b25lKTtcbn1cbmNsYXNzIE5vb3BOZ1pvbmUge1xuICBoYXNQZW5kaW5nTWljcm90YXNrcyA9IGZhbHNlO1xuICBoYXNQZW5kaW5nTWFjcm90YXNrcyA9IGZhbHNlO1xuICBpc1N0YWJsZSA9IHRydWU7XG4gIG9uVW5zdGFibGUgPSAvKiNfX1BVUkVfXyovbmV3IEV2ZW50RW1pdHRlcigpO1xuICBvbk1pY3JvdGFza0VtcHR5ID0gLyojX19QVVJFX18qL25ldyBFdmVudEVtaXR0ZXIoKTtcbiAgb25TdGFibGUgPSAvKiNfX1BVUkVfXyovbmV3IEV2ZW50RW1pdHRlcigpO1xuICBvbkVycm9yID0gLyojX19QVVJFX18qL25ldyBFdmVudEVtaXR0ZXIoKTtcbiAgcnVuKGZuLCBhcHBseVRoaXMsIGFwcGx5QXJncykge1xuICAgIHJldHVybiBmbi5hcHBseShhcHBseVRoaXMsIGFwcGx5QXJncyk7XG4gIH1cbiAgcnVuR3VhcmRlZChmbiwgYXBwbHlUaGlzLCBhcHBseUFyZ3MpIHtcbiAgICByZXR1cm4gZm4uYXBwbHkoYXBwbHlUaGlzLCBhcHBseUFyZ3MpO1xuICB9XG4gIHJ1bk91dHNpZGVBbmd1bGFyKGZuKSB7XG4gICAgcmV0dXJuIGZuKCk7XG4gIH1cbiAgcnVuVGFzayhmbiwgYXBwbHlUaGlzLCBhcHBseUFyZ3MsIG5hbWUpIHtcbiAgICByZXR1cm4gZm4uYXBwbHkoYXBwbHlUaGlzLCBhcHBseUFyZ3MpO1xuICB9XG59XG5mdW5jdGlvbiBzaG91bGRCZUlnbm9yZWRCeVpvbmUoYXBwbHlBcmdzKSB7XG4gIHJldHVybiBoYXNBcHBseUFyZ3NEYXRhKGFwcGx5QXJncywgJ19faWdub3JlX25nX3pvbmVfXycpO1xufVxuZnVuY3Rpb24gaXNTY2hlZHVsZXJUaWNrKGFwcGx5QXJncykge1xuICByZXR1cm4gaGFzQXBwbHlBcmdzRGF0YShhcHBseUFyZ3MsICdfX3NjaGVkdWxlcl90aWNrX18nKTtcbn1cbmZ1bmN0aW9uIGhhc0FwcGx5QXJnc0RhdGEoYXBwbHlBcmdzLCBrZXkpIHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KGFwcGx5QXJncykpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKGFwcGx5QXJncy5sZW5ndGggIT09IDEpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIGFwcGx5QXJnc1swXT8uZGF0YT8uW2tleV0gPT09IHRydWU7XG59XG5jbGFzcyBFcnJvckhhbmRsZXIge1xuICBfY29uc29sZSA9IGNvbnNvbGU7XG4gIGhhbmRsZUVycm9yKGVycm9yKSB7XG4gICAgdGhpcy5fY29uc29sZS5lcnJvcignRVJST1InLCBlcnJvcik7XG4gIH1cbn1cbmNvbnN0IElOVEVSTkFMX0FQUExJQ0FUSU9OX0VSUk9SX0hBTkRMRVIgPSAvKiNfX1BVUkVfXyovbmV3IEluamVjdGlvblRva2VuKHR5cGVvZiBuZ0Rldk1vZGUgPT09ICd1bmRlZmluZWQnIHx8IG5nRGV2TW9kZSA/ICdpbnRlcm5hbCBlcnJvciBoYW5kbGVyJyA6ICcnLCB7XG4gIGZhY3Rvcnk6ICgpID0+IHtcbiAgICBjb25zdCB6b25lID0gaW5qZWN0KE5nWm9uZSk7XG4gICAgY29uc3QgaW5qZWN0b3IgPSBpbmplY3QoRW52aXJvbm1lbnRJbmplY3Rvcik7XG4gICAgbGV0IHVzZXJFcnJvckhhbmRsZXI7XG4gICAgcmV0dXJuIGUgPT4ge1xuICAgICAgem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgIGlmIChpbmplY3Rvci5kZXN0cm95ZWQgJiYgIXVzZXJFcnJvckhhbmRsZXIpIHtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdXNlckVycm9ySGFuZGxlciA/Pz0gaW5qZWN0b3IuZ2V0KEVycm9ySGFuZGxlcik7XG4gICAgICAgICAgdXNlckVycm9ySGFuZGxlci5oYW5kbGVFcnJvcihlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcbiAgfVxufSk7XG5jb25zdCBlcnJvckhhbmRsZXJFbnZpcm9ubWVudEluaXRpYWxpemVyID0ge1xuICBwcm92aWRlOiBFTlZJUk9OTUVOVF9JTklUSUFMSVpFUixcbiAgdXNlVmFsdWU6ICgpID0+IHtcbiAgICBjb25zdCBoYW5kbGVyID0gaW5qZWN0KEVycm9ySGFuZGxlciwge1xuICAgICAgb3B0aW9uYWw6IHRydWVcbiAgICB9KTtcbiAgICBpZiAoKHR5cGVvZiBuZ0Rldk1vZGUgPT09ICd1bmRlZmluZWQnIHx8IG5nRGV2TW9kZSkgJiYgaGFuZGxlciA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFcnJvcig0MDIsIGBBIHJlcXVpcmVkIEluamVjdGFibGUgd2FzIG5vdCBmb3VuZCBpbiB0aGUgZGVwZW5kZW5jeSBpbmplY3Rpb24gdHJlZS4gYCArICdJZiB5b3UgYXJlIGJvb3RzdHJhcHBpbmcgYW4gTmdNb2R1bGUsIG1ha2Ugc3VyZSB0aGF0IHRoZSBgQnJvd3Nlck1vZHVsZWAgaXMgaW1wb3J0ZWQuJyk7XG4gICAgfVxuICB9LFxuICBtdWx0aTogdHJ1ZVxufTtcbmNvbnN0IGdsb2JhbEVycm9yTGlzdGVuZXJzID0gLyojX19QVVJFX18qL25ldyBJbmplY3Rpb25Ub2tlbih0eXBlb2YgbmdEZXZNb2RlICE9PSAndW5kZWZpbmVkJyAmJiBuZ0Rldk1vZGUgPyAnR2xvYmFsRXJyb3JMaXN0ZW5lcnMnIDogJycsIHtcbiAgZmFjdG9yeTogKCkgPT4ge1xuICAgIGlmICh0eXBlb2YgbmdTZXJ2ZXJNb2RlICE9PSAndW5kZWZpbmVkJyAmJiBuZ1NlcnZlck1vZGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgd2luZG93ID0gaW5qZWN0KERPQ1VNRU5UKS5kZWZhdWx0VmlldztcbiAgICBpZiAoIXdpbmRvdykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBlcnJvckhhbmRsZXIgPSBpbmplY3QoSU5URVJOQUxfQVBQTElDQVRJT05fRVJST1JfSEFORExFUik7XG4gICAgY29uc3QgcmVqZWN0aW9uTGlzdGVuZXIgPSBlID0+IHtcbiAgICAgIGVycm9ySGFuZGxlcihlLnJlYXNvbik7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgfTtcbiAgICBjb25zdCBlcnJvckxpc3RlbmVyID0gZSA9PiB7XG4gICAgICBpZiAoZS5lcnJvcikge1xuICAgICAgICBlcnJvckhhbmRsZXIoZS5lcnJvcik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlcnJvckhhbmRsZXIobmV3IEVycm9yKG5nRGV2TW9kZSA/IGBBbiBFcnJvckV2ZW50IHdpdGggbm8gZXJyb3Igb2NjdXJyZWQuIFNlZSBFcnJvci5jYXVzZSBmb3IgZGV0YWlsczogJHtlLm1lc3NhZ2V9YCA6IGUubWVzc2FnZSwge1xuICAgICAgICAgIGNhdXNlOiBlXG4gICAgICAgIH0pKTtcbiAgICAgIH1cbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICB9O1xuICAgIGNvbnN0IHNldHVwRXZlbnRMaXN0ZW5lcnMgPSAoKSA9PiB7XG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigndW5oYW5kbGVkcmVqZWN0aW9uJywgcmVqZWN0aW9uTGlzdGVuZXIpO1xuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgZXJyb3JMaXN0ZW5lcik7XG4gICAgfTtcbiAgICBpZiAodHlwZW9mIFpvbmUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBab25lLnJvb3QucnVuKHNldHVwRXZlbnRMaXN0ZW5lcnMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZXR1cEV2ZW50TGlzdGVuZXJzKCk7XG4gICAgfVxuICAgIGluamVjdChEZXN0cm95UmVmKS5vbkRlc3Ryb3koKCkgPT4ge1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgZXJyb3JMaXN0ZW5lcik7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigndW5oYW5kbGVkcmVqZWN0aW9uJywgcmVqZWN0aW9uTGlzdGVuZXIpO1xuICAgIH0pO1xuICB9XG59KTtcbmZ1bmN0aW9uIHByb3ZpZGVCcm93c2VyR2xvYmFsRXJyb3JMaXN0ZW5lcnMoKSB7XG4gIHJldHVybiBtYWtlRW52aXJvbm1lbnRQcm92aWRlcnMoW3Byb3ZpZGVFbnZpcm9ubWVudEluaXRpYWxpemVyKCgpID0+IHZvaWQgaW5qZWN0KGdsb2JhbEVycm9yTGlzdGVuZXJzKSldKTtcbn1cbmZ1bmN0aW9uIMm1dW53cmFwV3JpdGFibGVTaWduYWwodmFsdWUpIHtcbiAgcmV0dXJuIG51bGw7XG59XG5mdW5jdGlvbiBzaWduYWwoaW5pdGlhbFZhbHVlLCBvcHRpb25zKSB7XG4gIGNvbnN0IFtnZXQsIHNldCwgdXBkYXRlXSA9IGNyZWF0ZVNpZ25hbChpbml0aWFsVmFsdWUsIG9wdGlvbnM/LmVxdWFsKTtcbiAgY29uc3Qgc2lnbmFsRm4gPSBnZXQ7XG4gIGNvbnN0IG5vZGUgPSBzaWduYWxGbltTSUdOQUxdO1xuICBzaWduYWxGbi5zZXQgPSBzZXQ7XG4gIHNpZ25hbEZuLnVwZGF0ZSA9IHVwZGF0ZTtcbiAgc2lnbmFsRm4uYXNSZWFkb25seSA9IHNpZ25hbEFzUmVhZG9ubHlGbi5iaW5kKHNpZ25hbEZuKTtcbiAgaWYgKHR5cGVvZiBuZ0Rldk1vZGUgIT09ICd1bmRlZmluZWQnICYmIG5nRGV2TW9kZSkge1xuICAgIGNvbnN0IGRlYnVnTmFtZSA9IG9wdGlvbnM/LmRlYnVnTmFtZTtcbiAgICBub2RlLmRlYnVnTmFtZSA9IGRlYnVnTmFtZTtcbiAgICBzaWduYWxGbi50b1N0cmluZyA9ICgpID0+IGBbU2lnbmFsJHtkZWJ1Z05hbWUgPyAnICgnICsgZGVidWdOYW1lICsgJyknIDogJyd9OiAke3NpZ25hbEZuKCl9XWA7XG4gIH1cbiAgcmV0dXJuIHNpZ25hbEZuO1xufVxuZnVuY3Rpb24gc2lnbmFsQXNSZWFkb25seUZuKCkge1xuICBjb25zdCBub2RlID0gdGhpc1tTSUdOQUxdO1xuICBpZiAobm9kZS5yZWFkb25seUZuID09PSB1bmRlZmluZWQpIHtcbiAgICBjb25zdCByZWFkb25seUZuID0gKCkgPT4gdGhpcygpO1xuICAgIHJlYWRvbmx5Rm5bU0lHTkFMXSA9IG5vZGU7XG4gICAgbm9kZS5yZWFkb25seUZuID0gcmVhZG9ubHlGbjtcbiAgfVxuICByZXR1cm4gbm9kZS5yZWFkb25seUZuO1xufVxuZnVuY3Rpb24gYXNzZXJ0Tm90SW5SZWFjdGl2ZUNvbnRleHQoZGVidWdGbiwgZXh0cmFDb250ZXh0KSB7XG4gIGlmIChnZXRBY3RpdmVDb25zdW1lcigpICE9PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IFJ1bnRpbWVFcnJvcigtNjAyLCBuZ0Rldk1vZGUgJiYgYCR7ZGVidWdGbi5uYW1lfSgpIGNhbm5vdCBiZSBjYWxsZWQgZnJvbSB3aXRoaW4gYSByZWFjdGl2ZSBjb250ZXh0LiR7ZXh0cmFDb250ZXh0ID8gYCAke2V4dHJhQ29udGV4dH1gIDogJyd9YCk7XG4gIH1cbn1cbmxldCBWaWV3Q29udGV4dCA9IC8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICBjbGFzcyBWaWV3Q29udGV4dCB7XG4gICAgdmlldztcbiAgICBub2RlO1xuICAgIGNvbnN0cnVjdG9yKHZpZXcsIG5vZGUpIHtcbiAgICAgIHRoaXMudmlldyA9IHZpZXc7XG4gICAgICB0aGlzLm5vZGUgPSBub2RlO1xuICAgIH1cbiAgICBzdGF0aWMgX19OR19FTEVNRU5UX0lEX18gPSBpbmplY3RWaWV3Q29udGV4dDtcbiAgfVxuICByZXR1cm4gVmlld0NvbnRleHQ7XG59KSgpO1xuZnVuY3Rpb24gaW5qZWN0Vmlld0NvbnRleHQoKSB7XG4gIHJldHVybiBuZXcgVmlld0NvbnRleHQoZ2V0TFZpZXcoKSwgZ2V0Q3VycmVudFROb2RlKCkpO1xufVxuY2xhc3MgQ2hhbmdlRGV0ZWN0aW9uU2NoZWR1bGVyIHt9XG5jb25zdCBaT05FTEVTU19FTkFCTEVEID0gLyojX19QVVJFX18qL25ldyBJbmplY3Rpb25Ub2tlbih0eXBlb2YgbmdEZXZNb2RlID09PSAndW5kZWZpbmVkJyB8fCBuZ0Rldk1vZGUgPyAnWm9uZWxlc3MgZW5hYmxlZCcgOiAnJywge1xuICBmYWN0b3J5OiAoKSA9PiB0cnVlXG59KTtcbmNvbnN0IFBST1ZJREVEX1pPTkVMRVNTID0gLyojX19QVVJFX18qL25ldyBJbmplY3Rpb25Ub2tlbih0eXBlb2YgbmdEZXZNb2RlID09PSAndW5kZWZpbmVkJyB8fCBuZ0Rldk1vZGUgPyAnWm9uZWxlc3MgcHJvdmlkZWQnIDogJycsIHtcbiAgZmFjdG9yeTogKCkgPT4gZmFsc2Vcbn0pO1xuY29uc3QgU0NIRURVTEVfSU5fUk9PVF9aT05FID0gLyojX19QVVJFX18qL25ldyBJbmplY3Rpb25Ub2tlbih0eXBlb2YgbmdEZXZNb2RlID09PSAndW5kZWZpbmVkJyB8fCBuZ0Rldk1vZGUgPyAncnVuIGNoYW5nZXMgb3V0c2lkZSB6b25lIGluIHJvb3QnIDogJycpO1xubGV0IFBlbmRpbmdUYXNrcyA9IC8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICBjbGFzcyBQZW5kaW5nVGFza3Mge1xuICAgIGludGVybmFsUGVuZGluZ1Rhc2tzID0gaW5qZWN0KFBlbmRpbmdUYXNrc0ludGVybmFsKTtcbiAgICBzY2hlZHVsZXIgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0aW9uU2NoZWR1bGVyKTtcbiAgICBlcnJvckhhbmRsZXIgPSBpbmplY3QoSU5URVJOQUxfQVBQTElDQVRJT05fRVJST1JfSEFORExFUik7XG4gICAgYWRkKCkge1xuICAgICAgY29uc3QgdGFza0lkID0gdGhpcy5pbnRlcm5hbFBlbmRpbmdUYXNrcy5hZGQoKTtcbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5pbnRlcm5hbFBlbmRpbmdUYXNrcy5oYXModGFza0lkKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNjaGVkdWxlci5ub3RpZnkoMTEpO1xuICAgICAgICB0aGlzLmludGVybmFsUGVuZGluZ1Rhc2tzLnJlbW92ZSh0YXNrSWQpO1xuICAgICAgfTtcbiAgICB9XG4gICAgcnVuKGZuKSB7XG4gICAgICBjb25zdCByZW1vdmVUYXNrID0gdGhpcy5hZGQoKTtcbiAgICAgIGZuKCkuY2F0Y2godGhpcy5lcnJvckhhbmRsZXIpLmZpbmFsbHkocmVtb3ZlVGFzayk7XG4gICAgfVxuICAgIHN0YXRpYyDJtXByb3YgPSAvKiBAX19QVVJFX18gKi9cbiAgICDJtcm1ZGVmaW5lSW5qZWN0YWJsZSh7XG4gICAgICB0b2tlbjogUGVuZGluZ1Rhc2tzLFxuICAgICAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxuICAgICAgZmFjdG9yeTogKCkgPT4gbmV3IFBlbmRpbmdUYXNrcygpXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIFBlbmRpbmdUYXNrcztcbn0pKCk7XG5sZXQgRWZmZWN0U2NoZWR1bGVyID0gLyojX19QVVJFX18qLygoKSA9PiB7XG4gIGNsYXNzIEVmZmVjdFNjaGVkdWxlciB7XG4gICAgc3RhdGljIMm1cHJvdiA9IC8qIEBfX1BVUkVfXyAqL1xuICAgIMm1ybVkZWZpbmVJbmplY3RhYmxlKHtcbiAgICAgIHRva2VuOiBFZmZlY3RTY2hlZHVsZXIsXG4gICAgICBwcm92aWRlZEluOiAncm9vdCcsXG4gICAgICBmYWN0b3J5OiAoKSA9PiBuZXcgWm9uZUF3YXJlRWZmZWN0U2NoZWR1bGVyKClcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gRWZmZWN0U2NoZWR1bGVyO1xufSkoKTtcbmNsYXNzIFpvbmVBd2FyZUVmZmVjdFNjaGVkdWxlciB7XG4gIGRpcnR5RWZmZWN0Q291bnQgPSAwO1xuICBxdWV1ZXMgPSAvKiNfX1BVUkVfXyovbmV3IE1hcCgpO1xuICBhZGQoaGFuZGxlKSB7XG4gICAgdGhpcy5lbnF1ZXVlKGhhbmRsZSk7XG4gICAgdGhpcy5zY2hlZHVsZShoYW5kbGUpO1xuICB9XG4gIHNjaGVkdWxlKGhhbmRsZSkge1xuICAgIGlmICghaGFuZGxlLmRpcnR5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuZGlydHlFZmZlY3RDb3VudCsrO1xuICB9XG4gIHJlbW92ZShoYW5kbGUpIHtcbiAgICBjb25zdCB6b25lID0gaGFuZGxlLnpvbmU7XG4gICAgY29uc3QgcXVldWUgPSB0aGlzLnF1ZXVlcy5nZXQoem9uZSk7XG4gICAgaWYgKCFxdWV1ZS5oYXMoaGFuZGxlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBxdWV1ZS5kZWxldGUoaGFuZGxlKTtcbiAgICBpZiAoaGFuZGxlLmRpcnR5KSB7XG4gICAgICB0aGlzLmRpcnR5RWZmZWN0Q291bnQtLTtcbiAgICB9XG4gIH1cbiAgZW5xdWV1ZShoYW5kbGUpIHtcbiAgICBjb25zdCB6b25lID0gaGFuZGxlLnpvbmU7XG4gICAgaWYgKCF0aGlzLnF1ZXVlcy5oYXMoem9uZSkpIHtcbiAgICAgIHRoaXMucXVldWVzLnNldCh6b25lLCBuZXcgU2V0KCkpO1xuICAgIH1cbiAgICBjb25zdCBxdWV1ZSA9IHRoaXMucXVldWVzLmdldCh6b25lKTtcbiAgICBpZiAocXVldWUuaGFzKGhhbmRsZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcXVldWUuYWRkKGhhbmRsZSk7XG4gIH1cbiAgZmx1c2goKSB7XG4gICAgd2hpbGUgKHRoaXMuZGlydHlFZmZlY3RDb3VudCA+IDApIHtcbiAgICAgIGxldCByYW5PbmVFZmZlY3QgPSBmYWxzZTtcbiAgICAgIGZvciAoY29uc3QgW3pvbmUsIHF1ZXVlXSBvZiB0aGlzLnF1ZXVlcykge1xuICAgICAgICBpZiAoem9uZSA9PT0gbnVsbCkge1xuICAgICAgICAgIHJhbk9uZUVmZmVjdCB8fD0gdGhpcy5mbHVzaFF1ZXVlKHF1ZXVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByYW5PbmVFZmZlY3QgfHw9IHpvbmUucnVuKCgpID0+IHRoaXMuZmx1c2hRdWV1ZShxdWV1ZSkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoIXJhbk9uZUVmZmVjdCkge1xuICAgICAgICB0aGlzLmRpcnR5RWZmZWN0Q291bnQgPSAwO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBmbHVzaFF1ZXVlKHF1ZXVlKSB7XG4gICAgbGV0IHJhbk9uZUVmZmVjdCA9IGZhbHNlO1xuICAgIGZvciAoY29uc3QgaGFuZGxlIG9mIHF1ZXVlKSB7XG4gICAgICBpZiAoIWhhbmRsZS5kaXJ0eSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZGlydHlFZmZlY3RDb3VudC0tO1xuICAgICAgcmFuT25lRWZmZWN0ID0gdHJ1ZTtcbiAgICAgIGhhbmRsZS5ydW4oKTtcbiAgICB9XG4gICAgcmV0dXJuIHJhbk9uZUVmZmVjdDtcbiAgfVxufVxuY2xhc3MgRWZmZWN0UmVmSW1wbCB7XG4gIFtTSUdOQUxdO1xuICBjb25zdHJ1Y3Rvcihub2RlKSB7XG4gICAgdGhpc1tTSUdOQUxdID0gbm9kZTtcbiAgfVxuICBkZXN0cm95KCkge1xuICAgIHRoaXNbU0lHTkFMXS5kZXN0cm95KCk7XG4gIH1cbn1cbmZ1bmN0aW9uIGVmZmVjdChlZmZlY3RGbiwgb3B0aW9ucykge1xuICBuZ0Rldk1vZGUgJiYgYXNzZXJ0Tm90SW5SZWFjdGl2ZUNvbnRleHQoZWZmZWN0LCAnQ2FsbCBgZWZmZWN0YCBvdXRzaWRlIG9mIGEgcmVhY3RpdmUgY29udGV4dC4gRm9yIGV4YW1wbGUsIHNjaGVkdWxlIHRoZSAnICsgJ2VmZmVjdCBpbnNpZGUgdGhlIGNvbXBvbmVudCBjb25zdHJ1Y3Rvci4nKTtcbiAgaWYgKG5nRGV2TW9kZSAmJiAhb3B0aW9ucz8uaW5qZWN0b3IpIHtcbiAgICBhc3NlcnRJbkluamVjdGlvbkNvbnRleHQoZWZmZWN0KTtcbiAgfVxuICBpZiAobmdEZXZNb2RlICYmIG9wdGlvbnM/LmFsbG93U2lnbmFsV3JpdGVzICE9PSB1bmRlZmluZWQpIHtcbiAgICBjb25zb2xlLndhcm4oYFRoZSAnYWxsb3dTaWduYWxXcml0ZXMnIGZsYWcgaXMgZGVwcmVjYXRlZCBhbmQgbm8gbG9uZ2VyIGltcGFjdHMgZWZmZWN0KCkgKHdyaXRlcyBhcmUgYWx3YXlzIGFsbG93ZWQpYCk7XG4gIH1cbiAgY29uc3QgaW5qZWN0b3IgPSBvcHRpb25zPy5pbmplY3RvciA/PyBpbmplY3QoSW5qZWN0b3IpO1xuICBsZXQgZGVzdHJveVJlZiA9IG9wdGlvbnM/Lm1hbnVhbENsZWFudXAgIT09IHRydWUgPyBpbmplY3Rvci5nZXQoRGVzdHJveVJlZikgOiBudWxsO1xuICBsZXQgbm9kZTtcbiAgY29uc3Qgdmlld0NvbnRleHQgPSBpbmplY3Rvci5nZXQoVmlld0NvbnRleHQsIG51bGwsIHtcbiAgICBvcHRpb25hbDogdHJ1ZVxuICB9KTtcbiAgY29uc3Qgbm90aWZpZXIgPSBpbmplY3Rvci5nZXQoQ2hhbmdlRGV0ZWN0aW9uU2NoZWR1bGVyKTtcbiAgaWYgKHZpZXdDb250ZXh0ICE9PSBudWxsKSB7XG4gICAgbm9kZSA9IGNyZWF0ZVZpZXdFZmZlY3Qodmlld0NvbnRleHQudmlldywgbm90aWZpZXIsIGVmZmVjdEZuKTtcbiAgICBpZiAoZGVzdHJveVJlZiBpbnN0YW5jZW9mIE5vZGVJbmplY3RvckRlc3Ryb3lSZWYgJiYgZGVzdHJveVJlZi5fbFZpZXcgPT09IHZpZXdDb250ZXh0LnZpZXcpIHtcbiAgICAgIGRlc3Ryb3lSZWYgPSBudWxsO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBub2RlID0gY3JlYXRlUm9vdEVmZmVjdChlZmZlY3RGbiwgaW5qZWN0b3IuZ2V0KEVmZmVjdFNjaGVkdWxlciksIG5vdGlmaWVyKTtcbiAgfVxuICBub2RlLmluamVjdG9yID0gaW5qZWN0b3I7XG4gIGlmIChkZXN0cm95UmVmICE9PSBudWxsKSB7XG4gICAgbm9kZS5vbkRlc3Ryb3lGbnMgPSBbZGVzdHJveVJlZi5vbkRlc3Ryb3koKCkgPT4gbm9kZS5kZXN0cm95KCkpXTtcbiAgfVxuICBjb25zdCBlZmZlY3RSZWYgPSBuZXcgRWZmZWN0UmVmSW1wbChub2RlKTtcbiAgaWYgKG5nRGV2TW9kZSkge1xuICAgIG5vZGUuZGVidWdOYW1lID0gb3B0aW9ucz8uZGVidWdOYW1lID8/ICcnO1xuICAgIGNvbnN0IHByZXZJbmplY3RvclByb2ZpbGVyQ29udGV4dCA9IHNldEluamVjdG9yUHJvZmlsZXJDb250ZXh0KHtcbiAgICAgIGluamVjdG9yLFxuICAgICAgdG9rZW46IG51bGxcbiAgICB9KTtcbiAgICB0cnkge1xuICAgICAgZW1pdEVmZmVjdENyZWF0ZWRFdmVudChlZmZlY3RSZWYpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBzZXRJbmplY3RvclByb2ZpbGVyQ29udGV4dChwcmV2SW5qZWN0b3JQcm9maWxlckNvbnRleHQpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZWZmZWN0UmVmO1xufVxuY29uc3QgRUZGRUNUX05PREUgPSAvKiBAX19QVVJFX18gKi8oKCkgPT4gKHtcbiAgLi4uQkFTRV9FRkZFQ1RfTk9ERSxcbiAgY2xlYW51cEZuczogdW5kZWZpbmVkLFxuICB6b25lOiBudWxsLFxuICBvbkRlc3Ryb3lGbnM6IG51bGwsXG4gIHJ1bigpIHtcbiAgICBpZiAobmdEZXZNb2RlICYmIGlzSW5Ob3RpZmljYXRpb25QaGFzZSgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFNjaGVkdWxlcnMgY2Fubm90IHN5bmNocm9ub3VzbHkgZXhlY3V0ZSB3YXRjaGVzIHdoaWxlIHNjaGVkdWxpbmcuYCk7XG4gICAgfVxuICAgIGNvbnN0IHByZXZSZWZyZXNoaW5nVmlld3MgPSBzZXRJc1JlZnJlc2hpbmdWaWV3cyhmYWxzZSk7XG4gICAgdHJ5IHtcbiAgICAgIHJ1bkVmZmVjdCh0aGlzKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2V0SXNSZWZyZXNoaW5nVmlld3MocHJldlJlZnJlc2hpbmdWaWV3cyk7XG4gICAgfVxuICB9LFxuICBjbGVhbnVwKCkge1xuICAgIGlmICghdGhpcy5jbGVhbnVwRm5zPy5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcHJldkNvbnN1bWVyID0gc2V0QWN0aXZlQ29uc3VtZXIkMShudWxsKTtcbiAgICB0cnkge1xuICAgICAgd2hpbGUgKHRoaXMuY2xlYW51cEZucy5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5jbGVhbnVwRm5zLnBvcCgpKCk7XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuY2xlYW51cEZucyA9IFtdO1xuICAgICAgc2V0QWN0aXZlQ29uc3VtZXIkMShwcmV2Q29uc3VtZXIpO1xuICAgIH1cbiAgfVxufSkpKCk7XG5jb25zdCBST09UX0VGRkVDVF9OT0RFID0gLyogQF9fUFVSRV9fICovKCgpID0+ICh7XG4gIC4uLkVGRkVDVF9OT0RFLFxuICBjb25zdW1lck1hcmtlZERpcnR5KCkge1xuICAgIHRoaXMuc2NoZWR1bGVyLnNjaGVkdWxlKHRoaXMpO1xuICAgIHRoaXMubm90aWZpZXIubm90aWZ5KDEyKTtcbiAgfSxcbiAgZGVzdHJveSgpIHtcbiAgICBjb25zdW1lckRlc3Ryb3kodGhpcyk7XG4gICAgaWYgKHRoaXMub25EZXN0cm95Rm5zICE9PSBudWxsKSB7XG4gICAgICBmb3IgKGNvbnN0IGZuIG9mIHRoaXMub25EZXN0cm95Rm5zKSB7XG4gICAgICAgIGZuKCk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuY2xlYW51cCgpO1xuICAgIHRoaXMuc2NoZWR1bGVyLnJlbW92ZSh0aGlzKTtcbiAgfVxufSkpKCk7XG5jb25zdCBWSUVXX0VGRkVDVF9OT0RFID0gLyogQF9fUFVSRV9fICovKCgpID0+ICh7XG4gIC4uLkVGRkVDVF9OT0RFLFxuICBjb25zdW1lck1hcmtlZERpcnR5KCkge1xuICAgIHRoaXMudmlld1tGTEFHU10gfD0gODE5MjtcbiAgICBtYXJrQW5jZXN0b3JzRm9yVHJhdmVyc2FsKHRoaXMudmlldyk7XG4gICAgdGhpcy5ub3RpZmllci5ub3RpZnkoMTMpO1xuICB9LFxuICBkZXN0cm95KCkge1xuICAgIGNvbnN1bWVyRGVzdHJveSh0aGlzKTtcbiAgICBpZiAodGhpcy5vbkRlc3Ryb3lGbnMgIT09IG51bGwpIHtcbiAgICAgIGZvciAoY29uc3QgZm4gb2YgdGhpcy5vbkRlc3Ryb3lGbnMpIHtcbiAgICAgICAgZm4oKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5jbGVhbnVwKCk7XG4gICAgdGhpcy52aWV3W0VGRkVDVFNdPy5kZWxldGUodGhpcyk7XG4gIH1cbn0pKSgpO1xuZnVuY3Rpb24gY3JlYXRlVmlld0VmZmVjdCh2aWV3LCBub3RpZmllciwgZm4pIHtcbiAgY29uc3Qgbm9kZSA9IE9iamVjdC5jcmVhdGUoVklFV19FRkZFQ1RfTk9ERSk7XG4gIG5vZGUudmlldyA9IHZpZXc7XG4gIG5vZGUuem9uZSA9IHR5cGVvZiBab25lICE9PSAndW5kZWZpbmVkJyA/IFpvbmUuY3VycmVudCA6IG51bGw7XG4gIG5vZGUubm90aWZpZXIgPSBub3RpZmllcjtcbiAgbm9kZS5mbiA9IGNyZWF0ZUVmZmVjdEZuKG5vZGUsIGZuKTtcbiAgdmlld1tFRkZFQ1RTXSA/Pz0gbmV3IFNldCgpO1xuICB2aWV3W0VGRkVDVFNdLmFkZChub2RlKTtcbiAgbm9kZS5jb25zdW1lck1hcmtlZERpcnR5KG5vZGUpO1xuICByZXR1cm4gbm9kZTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZVJvb3RFZmZlY3QoZm4sIHNjaGVkdWxlciwgbm90aWZpZXIpIHtcbiAgY29uc3Qgbm9kZSA9IE9iamVjdC5jcmVhdGUoUk9PVF9FRkZFQ1RfTk9ERSk7XG4gIG5vZGUuZm4gPSBjcmVhdGVFZmZlY3RGbihub2RlLCBmbik7XG4gIG5vZGUuc2NoZWR1bGVyID0gc2NoZWR1bGVyO1xuICBub2RlLm5vdGlmaWVyID0gbm90aWZpZXI7XG4gIG5vZGUuem9uZSA9IHR5cGVvZiBab25lICE9PSAndW5kZWZpbmVkJyA/IFpvbmUuY3VycmVudCA6IG51bGw7XG4gIG5vZGUuc2NoZWR1bGVyLmFkZChub2RlKTtcbiAgbm9kZS5ub3RpZmllci5ub3RpZnkoMTIpO1xuICByZXR1cm4gbm9kZTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUVmZmVjdEZuKG5vZGUsIGZuKSB7XG4gIHJldHVybiAoKSA9PiB7XG4gICAgZm4oY2xlYW51cEZuID0+IChub2RlLmNsZWFudXBGbnMgPz89IFtdKS5wdXNoKGNsZWFudXBGbikpO1xuICB9O1xufVxuZXhwb3J0IHsgQUZURVJfUkVOREVSX1NFUVVFTkNFU19UT19BREQsIEFOSU1BVElPTlMsIENISUxEX0hFQUQsIENISUxEX1RBSUwsIENMRUFOVVAsIENPTlRBSU5FUl9IRUFERVJfT0ZGU0VULCBDT05URVhULCBDaGFuZ2VEZXRlY3Rpb25TY2hlZHVsZXIsIENoZWNrTm9DaGFuZ2VzTW9kZSwgREVCVUdfVEFTS19UUkFDS0VSLCBERUNMQVJBVElPTl9DT01QT05FTlRfVklFVywgREVDTEFSQVRJT05fTENPTlRBSU5FUiwgREVDTEFSQVRJT05fVklFVywgREVIWURSQVRFRF9WSUVXUywgRE9DVU1FTlQsIERPQ19QQUdFX0JBU0VfVVJMLCBEZXN0cm95UmVmLCBFRkZFQ1RTLCBFRkZFQ1RTX1RPX1NDSEVEVUxFLCBFTUJFRERFRF9WSUVXX0lOSkVDVE9SLCBFTVBUWV9BUlJBWSwgRU1QVFlfT0JKLCBFTlZJUk9OTUVOVCwgRU5WSVJPTk1FTlRfSU5JVElBTElaRVIsIEVSUk9SX0RFVEFJTFNfUEFHRV9CQVNFX1VSTCwgRWZmZWN0UmVmSW1wbCwgRWZmZWN0U2NoZWR1bGVyLCBFbnZpcm9ubWVudEluamVjdG9yLCBFcnJvckhhbmRsZXIsIEV2ZW50RW1pdHRlciwgRkxBR1MsIEhFQURFUl9PRkZTRVQsIEhPU1QsIEhZRFJBVElPTiwgSUQsIElOSkVDVE9SJDEgYXMgSU5KRUNUT1IsIElOSkVDVE9SIGFzIElOSkVDVE9SJDEsIElOSkVDVE9SX0RFRl9UWVBFUywgSU5KRUNUT1JfU0NPUEUsIElOVEVSTkFMX0FQUExJQ0FUSU9OX0VSUk9SX0hBTkRMRVIsIEluamVjdGlvblRva2VuLCBJbmplY3RvciwgTUFUSF9NTF9OQU1FU1BBQ0UsIE1PVkVEX1ZJRVdTLCBOQVRJVkUsIE5FWFQsIE5HX0NPTVBfREVGLCBOR19ESVJfREVGLCBOR19FTEVNRU5UX0lELCBOR19GQUNUT1JZX0RFRiwgTkdfSU5KX0RFRiwgTkdfTU9EX0RFRiwgTkdfUElQRV9ERUYsIE5HX1BST1ZfREVGLCBOZ1pvbmUsIE5vb3BOZ1pvbmUsIE51bGxJbmplY3RvciwgT05fREVTVFJPWV9IT09LUywgUEFSRU5ULCBQUkVPUkRFUl9IT09LX0ZMQUdTLCBQUk9WSURFRF9aT05FTEVTUywgUGVuZGluZ1Rhc2tzLCBQZW5kaW5nVGFza3NJbnRlcm5hbCwgUVVFUklFUywgUjNJbmplY3RvciwgUkVBQ1RJVkVfVEVNUExBVEVfQ09OU1VNRVIsIFJFTkRFUkVSLCBSdW50aW1lRXJyb3IsIFNDSEVEVUxFX0lOX1JPT1RfWk9ORSwgU0NIRURVTEVfSU5fUk9PVF9aT05FX0RFRkFVTFQsIFNWR19OQU1FU1BBQ0UsIFRWSUVXLCBUX0hPU1QsIFZFUlNJT04sIFZJRVdfUkVGUywgVmVyc2lvbiwgVmlld0NvbnRleHQsIFhTU19TRUNVUklUWV9VUkwsIFpPTkVMRVNTX0VOQUJMRUQsIF9nbG9iYWwsIGFkZFRvQXJyYXksIGFuZ3VsYXJab25lSW5zdGFuY2VJZFByb3BlcnR5LCBhcnJheUVxdWFscywgYXJyYXlJbnNlcnQyLCBhcnJheVNwbGljZSwgYXNzZXJ0Q29tcG9uZW50VHlwZSwgYXNzZXJ0RGVmaW5lZCwgYXNzZXJ0RGlyZWN0aXZlRGVmLCBhc3NlcnREb21Ob2RlLCBhc3NlcnRFbGVtZW50LCBhc3NlcnRFcXVhbCwgYXNzZXJ0Rmlyc3RDcmVhdGVQYXNzLCBhc3NlcnRGaXJzdFVwZGF0ZVBhc3MsIGFzc2VydEZ1bmN0aW9uLCBhc3NlcnRHcmVhdGVyVGhhbiwgYXNzZXJ0R3JlYXRlclRoYW5PckVxdWFsLCBhc3NlcnRIYXNQYXJlbnQsIGFzc2VydEluSW5qZWN0aW9uQ29udGV4dCwgYXNzZXJ0SW5kZXhJbkRlY2xSYW5nZSwgYXNzZXJ0SW5kZXhJbkV4cGFuZG9SYW5nZSwgYXNzZXJ0SW5kZXhJblJhbmdlLCBhc3NlcnRJbmplY3RJbXBsZW1lbnRhdGlvbk5vdEVxdWFsLCBhc3NlcnRMQ29udGFpbmVyLCBhc3NlcnRMVmlldywgYXNzZXJ0TGVzc1RoYW4sIGFzc2VydE5nTW9kdWxlVHlwZSwgYXNzZXJ0Tm9kZUluamVjdG9yLCBhc3NlcnROb3REZWZpbmVkLCBhc3NlcnROb3RFcXVhbCwgYXNzZXJ0Tm90SW5SZWFjdGl2ZUNvbnRleHQsIGFzc2VydE5vdFJlYWN0aXZlLCBhc3NlcnROb3RTYW1lLCBhc3NlcnROdW1iZXIsIGFzc2VydE51bWJlckluUmFuZ2UsIGFzc2VydE9uZU9mLCBhc3NlcnRQYXJlbnRWaWV3LCBhc3NlcnRQcm9qZWN0aW9uU2xvdHMsIGFzc2VydFNhbWUsIGFzc2VydFN0cmluZywgYXNzZXJ0VEljdSwgYXNzZXJ0VE5vZGUsIGFzc2VydFROb2RlQ3JlYXRpb25JbmRleCwgYXNzZXJ0VE5vZGVGb3JMVmlldywgYXNzZXJ0VE5vZGVGb3JUVmlldywgYXR0YWNoSW5qZWN0RmxhZywgY29uY2F0U3RyaW5nc1dpdGhTcGFjZSwgY29udmVydFRvQml0RmxhZ3MsIGNyZWF0ZUluamVjdG9yLCBjcmVhdGVJbmplY3RvcldpdGhvdXRJbmplY3Rvckluc3RhbmNlcywgY3ljbGljRGVwZW5kZW5jeUVycm9yLCBjeWNsaWNEZXBlbmRlbmN5RXJyb3JXaXRoRGV0YWlscywgZGVidWdTdHJpbmdpZnlUeXBlRm9yRXJyb3IsIGRlY3JlYXNlRWxlbWVudERlcHRoQ291bnQsIGRlZXBGb3JFYWNoLCBlZmZlY3QsIGVtaXRBZnRlclJlbmRlckVmZmVjdFBoYXNlQ3JlYXRlZEV2ZW50LCBlbWl0SW5qZWN0RXZlbnQsIGVtaXRJbmplY3RvclRvQ3JlYXRlSW5zdGFuY2VFdmVudCwgZW1pdEluc3RhbmNlQ3JlYXRlZEJ5SW5qZWN0b3JFdmVudCwgZW1pdFByb3ZpZGVyQ29uZmlndXJlZEV2ZW50LCBlbnRlckRJLCBlbnRlclNraXBIeWRyYXRpb25CbG9jaywgZW50ZXJWaWV3LCBlcnJvckhhbmRsZXJFbnZpcm9ubWVudEluaXRpYWxpemVyLCBmaWxsUHJvcGVydGllcywgZmxhdHRlbiwgZm9ybWF0UnVudGltZUVycm9yLCBmb3J3YXJkUmVmLCBnZXRCaW5kaW5nSW5kZXgsIGdldEJpbmRpbmdSb290LCBnZXRCaW5kaW5nc0VuYWJsZWQsIGdldENsb3N1cmVTYWZlUHJvcGVydHksIGdldENvbXBvbmVudERlZiwgZ2V0Q29tcG9uZW50TFZpZXdCeUluZGV4LCBnZXRDb25zdGFudCwgZ2V0Q29udGV4dExWaWV3LCBnZXRDdXJyZW50RGlyZWN0aXZlRGVmLCBnZXRDdXJyZW50RGlyZWN0aXZlSW5kZXgsIGdldEN1cnJlbnRQYXJlbnRUTm9kZSwgZ2V0Q3VycmVudFF1ZXJ5SW5kZXgsIGdldEN1cnJlbnRUTm9kZSwgZ2V0Q3VycmVudFROb2RlUGxhY2Vob2xkZXJPaywgZ2V0RGlyZWN0aXZlRGVmLCBnZXREaXJlY3RpdmVEZWZPclRocm93LCBnZXRFbGVtZW50RGVwdGhDb3VudCwgZ2V0RmFjdG9yeURlZiwgZ2V0SW5qZWN0YWJsZURlZiwgZ2V0SW5qZWN0b3JEZWYsIGdldExWaWV3LCBnZXRMVmlld1BhcmVudCwgZ2V0TmFtZXNwYWNlLCBnZXROYXRpdmVCeUluZGV4LCBnZXROYXRpdmVCeVROb2RlLCBnZXROYXRpdmVCeVROb2RlT3JOdWxsLCBnZXROZ01vZHVsZURlZiwgZ2V0TmdNb2R1bGVEZWZPclRocm93LCBnZXROdWxsSW5qZWN0b3IsIGdldE9yQ3JlYXRlTFZpZXdDbGVhbnVwLCBnZXRPckNyZWF0ZVRWaWV3Q2xlYW51cCwgZ2V0UGlwZURlZiwgZ2V0U2VsZWN0ZWRJbmRleCwgZ2V0U2VsZWN0ZWRUTm9kZSwgZ2V0VE5vZGUsIGdldFRWaWV3LCBoYXNJMThuLCBpbXBvcnRQcm92aWRlcnNGcm9tLCBpbmNyZWFzZUVsZW1lbnREZXB0aENvdW50LCBpbmNyZW1lbnRCaW5kaW5nSW5kZXgsIGluaXROZ0Rldk1vZGUsIGluamVjdCwgaW5qZWN0Um9vdExpbXBNb2RlLCBpbnRlcm5hbEltcG9ydFByb3ZpZGVyc0Zyb20sIGlzQ2xhc3NQcm92aWRlciwgaXNDb21wb25lbnREZWYsIGlzQ29tcG9uZW50SG9zdCwgaXNDb250ZW50UXVlcnlIb3N0LCBpc0NyZWF0aW9uTW9kZSwgaXNDdXJyZW50VE5vZGVQYXJlbnQsIGlzRGVzdHJveWVkLCBpc0RpcmVjdGl2ZUhvc3QsIGlzRW52aXJvbm1lbnRQcm92aWRlcnMsIGlzRXhoYXVzdGl2ZUNoZWNrTm9DaGFuZ2VzLCBpc0ZvcndhcmRSZWYsIGlzSW5DaGVja05vQ2hhbmdlc01vZGUsIGlzSW5JMThuQmxvY2ssIGlzSW5JbmplY3Rpb25Db250ZXh0LCBpc0luU2tpcEh5ZHJhdGlvbkJsb2NrLCBpc0luamVjdGFibGUsIGlzTENvbnRhaW5lciwgaXNMVmlldywgaXNQcm9qZWN0aW9uVE5vZGUsIGlzUmVmcmVzaGluZ1ZpZXdzLCBpc1Jvb3RWaWV3LCBpc1NraXBIeWRyYXRpb25Sb290VE5vZGUsIGlzU3RhbmRhbG9uZSwgaXNUeXBlUHJvdmlkZXIsIGtleVZhbHVlQXJyYXlHZXQsIGtleVZhbHVlQXJyYXlJbmRleE9mLCBrZXlWYWx1ZUFycmF5U2V0LCBsYXN0Tm9kZVdhc0NyZWF0ZWQsIGxlYXZlREksIGxlYXZlU2tpcEh5ZHJhdGlvbkJsb2NrLCBsZWF2ZVZpZXcsIGxvYWQsIG1ha2VFbnZpcm9ubWVudFByb3ZpZGVycywgbWFya0FuY2VzdG9yc0ZvclRyYXZlcnNhbCwgbWFya1ZpZXdGb3JSZWZyZXNoLCBuZXdBcnJheSwgbmV4dEJpbmRpbmdJbmRleCwgbmV4dENvbnRleHRJbXBsLCBwcm92aWRlQnJvd3Nlckdsb2JhbEVycm9yTGlzdGVuZXJzLCBwcm92aWRlRW52aXJvbm1lbnRJbml0aWFsaXplciwgcHJvdmlkZXJUb0ZhY3RvcnksIHJlbW92ZUZyb21BcnJheSwgcmVtb3ZlTFZpZXdPbkRlc3Ryb3ksIHJlbmRlclN0cmluZ2lmeSwgcmVxdWlyZXNSZWZyZXNoT3JUcmF2ZXJzYWwsIHJlc2V0UHJlT3JkZXJIb29rRmxhZ3MsIHJlc29sdmVGb3J3YXJkUmVmLCBydW5JbkluamVjdGlvbkNvbnRleHQsIHJ1bkluSW5qZWN0b3JQcm9maWxlckNvbnRleHQsIHNjaGVkdWxlQ2FsbGJhY2tXaXRoTWljcm90YXNrLCBzY2hlZHVsZUNhbGxiYWNrV2l0aFJhZlJhY2UsIHNldEJpbmRpbmdJbmRleCwgc2V0QmluZGluZ1Jvb3RGb3JIb3N0QmluZGluZ3MsIHNldEN1cnJlbnREaXJlY3RpdmVJbmRleCwgc2V0Q3VycmVudFF1ZXJ5SW5kZXgsIHNldEN1cnJlbnRUTm9kZSwgc2V0Q3VycmVudFROb2RlQXNOb3RQYXJlbnQsIHNldEluSTE4bkJsb2NrLCBzZXRJbmplY3RJbXBsZW1lbnRhdGlvbiwgc2V0SW5qZWN0b3JQcm9maWxlciwgc2V0SW5qZWN0b3JQcm9maWxlckNvbnRleHQsIHNldElzSW5DaGVja05vQ2hhbmdlc01vZGUsIHNldElzUmVmcmVzaGluZ1ZpZXdzLCBzZXRTZWxlY3RlZEluZGV4LCBzaWduYWwsIHNpZ25hbEFzUmVhZG9ubHlGbiwgc3RvcmUsIHN0b3JlQ2xlYW51cFdpdGhDb250ZXh0LCBzdG9yZUxWaWV3T25EZXN0cm95LCBzdHJpbmdpZnksIHN0cmluZ2lmeUZvckVycm9yLCB0aHJvd0Vycm9yLCB0aHJvd1Byb3ZpZGVyTm90Rm91bmRFcnJvciwgdHJ1bmNhdGVNaWRkbGUsIHVud3JhcExWaWV3LCB1bndyYXBSTm9kZSwgdXBkYXRlQW5jZXN0b3JUcmF2ZXJzYWxGbGFnc09uQXR0YWNoLCB2aWV3QXR0YWNoZWRUb0NoYW5nZURldGVjdG9yLCB2aWV3QXR0YWNoZWRUb0NvbnRhaW5lciwgd2Fsa1Byb3ZpZGVyVHJlZSwgd2Fsa1VwVmlld3MsIHdhc0xhc3ROb2RlQ3JlYXRlZCwgybV1bndyYXBXcml0YWJsZVNpZ25hbCwgybXJtWRlZmluZUluamVjdGFibGUsIMm1ybVkZWZpbmVJbmplY3RvciwgybXJtWRpc2FibGVCaW5kaW5ncywgybXJtWVuYWJsZUJpbmRpbmdzLCDJtcm1aW5qZWN0LCDJtcm1aW52YWxpZEZhY3RvcnlEZXAsIMm1ybVuYW1lc3BhY2VIVE1MLCDJtcm1bmFtZXNwYWNlTWF0aE1MLCDJtcm1bmFtZXNwYWNlU1ZHLCDJtcm1cmVzZXRWaWV3LCDJtcm1cmVzdG9yZVZpZXcgfTtcbiIsIi8qKlxuICogQGxpY2Vuc2UgQW5ndWxhciB2MjEuMi40XG4gKiAoYykgMjAxMC0yMDI2IEdvb2dsZSBMTEMuIGh0dHBzOi8vYW5ndWxhci5kZXYvXG4gKiBMaWNlbnNlOiBNSVRcbiAqL1xuXG5pbXBvcnQgeyBhdHRhY2hJbmplY3RGbGFnLCBfZ2xvYmFsLCDJtcm1ZGVmaW5lSW5qZWN0YWJsZSBhcyBfX2RlZmluZUluamVjdGFibGUsIMm1ybVkZWZpbmVJbmplY3RvciBhcyBfX2RlZmluZUluamVjdG9yLCDJtcm1aW5qZWN0IGFzIF9faW5qZWN0LCDJtcm1aW52YWxpZEZhY3RvcnlEZXAgYXMgX19pbnZhbGlkRmFjdG9yeURlcCwgcmVzb2x2ZUZvcndhcmRSZWYsIG5ld0FycmF5LCBFTVBUWV9PQkosIGFzc2VydFN0cmluZywgYXNzZXJ0Tm90RXF1YWwsIEZMQUdTLCBhc3NlcnRFcXVhbCwgaXNJbkNoZWNrTm9DaGFuZ2VzTW9kZSwgUFJFT1JERVJfSE9PS19GTEFHUywgYXNzZXJ0Rmlyc3RDcmVhdGVQYXNzLCBhc3NlcnREZWZpbmVkLCB0aHJvd0Vycm9yLCBhc3NlcnROdW1iZXIsIGFzc2VydEdyZWF0ZXJUaGFuLCBIRUFERVJfT0ZGU0VULCBERUNMQVJBVElPTl9WSUVXLCBOR19GQUNUT1JZX0RFRiwgaXNGb3J3YXJkUmVmLCBnZXRGYWN0b3J5RGVmLCBhc3NlcnRJbmRleEluUmFuZ2UsIGFzc2VydFROb2RlRm9yTFZpZXcsIGVudGVyREksIHJ1bkluSW5qZWN0b3JQcm9maWxlckNvbnRleHQsIGdldEN1cnJlbnRUTm9kZSwgZ2V0TFZpZXcsIGVtaXRJbmplY3RvclRvQ3JlYXRlSW5zdGFuY2VFdmVudCwgZW1pdEluc3RhbmNlQ3JlYXRlZEJ5SW5qZWN0b3JFdmVudCwgdGhyb3dQcm92aWRlck5vdEZvdW5kRXJyb3IsIGxlYXZlREksIGFzc2VydE5vZGVJbmplY3Rvciwgc3RyaW5naWZ5Rm9yRXJyb3IsIGN5Y2xpY0RlcGVuZGVuY3lFcnJvcldpdGhEZXRhaWxzLCBjeWNsaWNEZXBlbmRlbmN5RXJyb3IsIHNldEluamVjdG9yUHJvZmlsZXJDb250ZXh0LCBzZXRJbmplY3RJbXBsZW1lbnRhdGlvbiwgYXNzZXJ0RGlyZWN0aXZlRGVmLCBOR19FTEVNRU5UX0lELCBjb252ZXJ0VG9CaXRGbGFncywgaXNSb290VmlldywgVF9IT1NULCBUVklFVywgaW5qZWN0Um9vdExpbXBNb2RlLCBpc0NvbXBvbmVudERlZiwgRU1CRURERURfVklFV19JTkpFQ1RPUiwgSU5KRUNUT1IkMSBhcyBJTkpFQ1RPUiwgREVDTEFSQVRJT05fQ09NUE9ORU5UX1ZJRVcsIGlzQ29tcG9uZW50SG9zdCwgUnVudGltZUVycm9yLCBOR19QUk9WX0RFRiwgZ2V0Q2xvc3VyZVNhZmVQcm9wZXJ0eSwgZ2V0TmF0aXZlQnlUTm9kZSwgZmxhdHRlbiwgYXJyYXlFcXVhbHMsIElELCBpc0xWaWV3LCBhc3NlcnREb21Ob2RlLCB1bndyYXBSTm9kZSwgZ2V0Q29tcG9uZW50TFZpZXdCeUluZGV4LCBDT05URVhULCBFTVBUWV9BUlJBWSwgYXNzZXJ0TFZpZXcsIEhPU1QsIENISUxEX0hFQUQsIE5FWFQsIGlzTENvbnRhaW5lciwgZ2V0TFZpZXdQYXJlbnQsIEluamVjdG9yLCBDTEVBTlVQLCBnZXRDb21wb25lbnREZWYsIGdldERpcmVjdGl2ZURlZiwgSW5qZWN0aW9uVG9rZW4sIGluamVjdCwgRE9DVU1FTlQgYXMgRE9DVU1FTlQkMSwgRU5WSVJPTk1FTlRfSU5JVElBTElaRVIsIGZvcm1hdFJ1bnRpbWVFcnJvciwgaXNJblNraXBIeWRyYXRpb25CbG9jayBhcyBpc0luU2tpcEh5ZHJhdGlvbkJsb2NrJDEsIEhZRFJBVElPTiwgaXNDb250ZW50UXVlcnlIb3N0LCBzZXRDdXJyZW50UXVlcnlJbmRleCwgaXNEaXJlY3RpdmVIb3N0LCBYU1NfU0VDVVJJVFlfVVJMLCBSRU5ERVJFUiwgcmVuZGVyU3RyaW5naWZ5LCBnZXRTZWxlY3RlZFROb2RlLCBFTlZJUk9OTUVOVCwgbWFrZUVudmlyb25tZW50UHJvdmlkZXJzLCByZXNldFByZU9yZGVySG9va0ZsYWdzLCBQQVJFTlQsIENISUxEX1RBSUwsIGFzc2VydFNhbWUsIGFzc2VydEZpcnN0VXBkYXRlUGFzcywgZ2V0U2VsZWN0ZWRJbmRleCwgZ2V0VFZpZXcsIGFzc2VydEluZGV4SW5EZWNsUmFuZ2UsIHNldFNlbGVjdGVkSW5kZXgsIHN0cmluZ2lmeSwgQU5JTUFUSU9OUywgTmdab25lLCBDaGFuZ2VEZXRlY3Rpb25TY2hlZHVsZXIsIEVycm9ySGFuZGxlciwgQUZURVJfUkVOREVSX1NFUVVFTkNFU19UT19BREQsIG1hcmtBbmNlc3RvcnNGb3JUcmF2ZXJzYWwsIGFzc2VydE5vdEluUmVhY3RpdmVDb250ZXh0LCBhc3NlcnRJbkluamVjdGlvbkNvbnRleHQsIERlc3Ryb3lSZWYsIFZpZXdDb250ZXh0LCBFbnZpcm9ubWVudEluamVjdG9yLCBhc3NlcnRMQ29udGFpbmVyLCBNT1ZFRF9WSUVXUywgaXNEZXN0cm95ZWQsIFJFQUNUSVZFX1RFTVBMQVRFX0NPTlNVTUVSLCBERUNMQVJBVElPTl9MQ09OVEFJTkVSLCBRVUVSSUVTLCBhc3NlcnROb3RSZWFjdGl2ZSwgT05fREVTVFJPWV9IT09LUywgYXNzZXJ0RnVuY3Rpb24sIEVGRkVDVFMsIGFzc2VydFByb2plY3Rpb25TbG90cywgTkFUSVZFLCBhc3NlcnRQYXJlbnRWaWV3LCBDT05UQUlORVJfSEVBREVSX09GRlNFVCwgYXNzZXJ0Tm90U2FtZSwgc2V0Q3VycmVudERpcmVjdGl2ZUluZGV4LCBzZXRDdXJyZW50VE5vZGUsIGdldEVsZW1lbnREZXB0aENvdW50LCBpbmNyZWFzZUVsZW1lbnREZXB0aENvdW50LCB3YXNMYXN0Tm9kZUNyZWF0ZWQsIGlzQ3VycmVudFROb2RlUGFyZW50LCBzZXRDdXJyZW50VE5vZGVBc05vdFBhcmVudCwgYXNzZXJ0SGFzUGFyZW50LCBJTlRFUk5BTF9BUFBMSUNBVElPTl9FUlJPUl9IQU5ETEVSLCBnZXRDdXJyZW50RGlyZWN0aXZlSW5kZXgsIHVud3JhcExWaWV3LCBpc0NyZWF0aW9uTW9kZSwgZW50ZXJWaWV3LCBsZWF2ZVZpZXcsIG1hcmtWaWV3Rm9yUmVmcmVzaCwgc2V0SXNSZWZyZXNoaW5nVmlld3MsIGlzRXhoYXVzdGl2ZUNoZWNrTm9DaGFuZ2VzLCByZXF1aXJlc1JlZnJlc2hPclRyYXZlcnNhbCwgc2V0SXNJbkNoZWNrTm9DaGFuZ2VzTW9kZSwgQ2hlY2tOb0NoYW5nZXNNb2RlLCBzZXRCaW5kaW5nSW5kZXgsIEVGRkVDVFNfVE9fU0NIRURVTEUsIHZpZXdBdHRhY2hlZFRvQ2hhbmdlRGV0ZWN0b3IsIHNldEJpbmRpbmdSb290Rm9ySG9zdEJpbmRpbmdzLCBpc1JlZnJlc2hpbmdWaWV3cywgcmVtb3ZlRnJvbUFycmF5LCBhZGRUb0FycmF5LCB1cGRhdGVBbmNlc3RvclRyYXZlcnNhbEZsYWdzT25BdHRhY2gsIHN0b3JlTFZpZXdPbkRlc3Ryb3ksIFZJRVdfUkVGUywgYXNzZXJ0R3JlYXRlclRoYW5PckVxdWFsLCBpc0luSTE4bkJsb2NrLCBhc3NlcnRUTm9kZUZvclRWaWV3LCBnZXRDdXJyZW50UGFyZW50VE5vZGUsIGdldEN1cnJlbnRUTm9kZVBsYWNlaG9sZGVyT2ssIGFzc2VydFROb2RlLCBhc3NlcnRUSWN1LCBhc3NlcnROdW1iZXJJblJhbmdlLCBERUhZRFJBVEVEX1ZJRVdTLCBnZXROZ01vZHVsZURlZiwgZ2V0UGlwZURlZiBhcyBnZXRQaXBlRGVmJDEsIGdldE5nTW9kdWxlRGVmT3JUaHJvdywgaXNTdGFuZGFsb25lLCBjb25jYXRTdHJpbmdzV2l0aFNwYWNlLCBhc3NlcnRJbmplY3RJbXBsZW1lbnRhdGlvbk5vdEVxdWFsLCBlbWl0SW5qZWN0RXZlbnQsIGdldENvbnN0YW50LCBhc3NlcnRMZXNzVGhhbiwgZ2V0T3JDcmVhdGVUVmlld0NsZWFudXAsIGdldE9yQ3JlYXRlTFZpZXdDbGVhbnVwLCBkZWJ1Z1N0cmluZ2lmeVR5cGVGb3JFcnJvciwgYXNzZXJ0Tm90RGVmaW5lZCwgbmV4dEJpbmRpbmdJbmRleCwgZ2V0VE5vZGUsIGdldERpcmVjdGl2ZURlZk9yVGhyb3csIGFzc2VydENvbXBvbmVudFR5cGUsIFNWR19OQU1FU1BBQ0UsIE1BVEhfTUxfTkFNRVNQQUNFLCB2aWV3QXR0YWNoZWRUb0NvbnRhaW5lciwgc3RvcmVDbGVhbnVwV2l0aENvbnRleHQsIHNpZ25hbCwgY3JlYXRlSW5qZWN0b3JXaXRob3V0SW5qZWN0b3JJbnN0YW5jZXMsIFIzSW5qZWN0b3IsIGdldE51bGxJbmplY3RvciwgaW50ZXJuYWxJbXBvcnRQcm92aWRlcnNGcm9tLCBpbml0TmdEZXZNb2RlLCBmaWxsUHJvcGVydGllcywgZ2V0QmluZGluZ3NFbmFibGVkLCBsYXN0Tm9kZVdhc0NyZWF0ZWQsIHJlbW92ZUxWaWV3T25EZXN0cm95LCB3YWxrVXBWaWV3cywgZ2V0TmF0aXZlQnlJbmRleCwgYXNzZXJ0RWxlbWVudCwgYXJyYXlJbnNlcnQyLCBhcnJheVNwbGljZSwgc2V0SW5qZWN0b3JQcm9maWxlciwgRWZmZWN0UmVmSW1wbCwgTnVsbEluamVjdG9yLCBJTkpFQ1RPUl9ERUZfVFlQRVMsIHdhbGtQcm92aWRlclRyZWUsIGdldEluamVjdG9yRGVmLCBkZWVwRm9yRWFjaCwgaXNUeXBlUHJvdmlkZXIsIGlzSW5JbmplY3Rpb25Db250ZXh0LCBydW5JbkluamVjdGlvbkNvbnRleHQsIFpPTkVMRVNTX0VOQUJMRUQsIEVmZmVjdFNjaGVkdWxlciwgUGVuZGluZ1Rhc2tzSW50ZXJuYWwsIFBlbmRpbmdUYXNrcywgYXNzZXJ0VE5vZGVDcmVhdGlvbkluZGV4LCBkZWNyZWFzZUVsZW1lbnREZXB0aENvdW50LCBpc1NraXBIeWRyYXRpb25Sb290VE5vZGUsIGxlYXZlU2tpcEh5ZHJhdGlvbkJsb2NrLCBnZXROYW1lc3BhY2UsIGVudGVyU2tpcEh5ZHJhdGlvbkJsb2NrLCBnZXRDdXJyZW50RGlyZWN0aXZlRGVmLCBhc3NlcnRJbmRleEluRXhwYW5kb1JhbmdlLCBnZXRCaW5kaW5nSW5kZXgsIGFzc2VydE9uZU9mLCBzZXRJbkkxOG5CbG9jaywgbmV4dENvbnRleHRJbXBsLCBnZXRDdXJyZW50UXVlcnlJbmRleCwgZ2V0Q29udGV4dExWaWV3LCBsb2FkLCBrZXlWYWx1ZUFycmF5SW5kZXhPZiwgaW5jcmVtZW50QmluZGluZ0luZGV4LCBrZXlWYWx1ZUFycmF5U2V0LCBrZXlWYWx1ZUFycmF5R2V0LCBzdG9yZSwgZ2V0QmluZGluZ1Jvb3QsIHByb3ZpZGVyVG9GYWN0b3J5LCBlbWl0UHJvdmlkZXJDb25maWd1cmVkRXZlbnQsIGlzQ2xhc3NQcm92aWRlciwgTkdfQ09NUF9ERUYsIMm1ybVyZXNldFZpZXcgYXMgX19yZXNldFZpZXcsIMm1ybVuYW1lc3BhY2VIVE1MIGFzIF9fbmFtZXNwYWNlSFRNTCwgybXJtW5hbWVzcGFjZU1hdGhNTCBhcyBfX25hbWVzcGFjZU1hdGhNTCwgybXJtW5hbWVzcGFjZVNWRyBhcyBfX25hbWVzcGFjZVNWRywgybXJtWVuYWJsZUJpbmRpbmdzIGFzIF9fZW5hYmxlQmluZGluZ3MsIMm1ybVkaXNhYmxlQmluZGluZ3MgYXMgX19kaXNhYmxlQmluZGluZ3MsIMm1ybVyZXN0b3JlVmlldyBhcyBfX3Jlc3RvcmVWaWV3LCBmb3J3YXJkUmVmLCBOR19NT0RfREVGLCBOR19JTkpfREVGLCBOR19ESVJfREVGLCBOR19QSVBFX0RFRiwgYW5ndWxhclpvbmVJbnN0YW5jZUlkUHJvcGVydHksIFNDSEVEVUxFX0lOX1JPT1RfWk9ORSwgUFJPVklERURfWk9ORUxFU1MsIE5vb3BOZ1pvbmUsIHNjaGVkdWxlQ2FsbGJhY2tXaXRoTWljcm90YXNrLCBzY2hlZHVsZUNhbGxiYWNrV2l0aFJhZlJhY2UsIGdldE5hdGl2ZUJ5VE5vZGVPck51bGwgfSBmcm9tICcuL19lZmZlY3QtY2h1bmsyLm1qcyc7XG5pbXBvcnQgeyBzZXRBY3RpdmVDb25zdW1lciwgU0lHTkFMLCBjb25zdW1lckRlc3Ryb3ksIFJFQUNUSVZFX05PREUsIGNvbnN1bWVyUG9sbFByb2R1Y2Vyc0ZvckNoYW5nZSwgY29uc3VtZXJCZWZvcmVDb21wdXRhdGlvbiwgZ2V0QWN0aXZlQ29uc3VtZXIsIGNvbnN1bWVyQWZ0ZXJDb21wdXRhdGlvbiwgY3JlYXRlQ29tcHV0ZWQsIHNldFRocm93SW52YWxpZFdyaXRlVG9TaWduYWxFcnJvciB9IGZyb20gJy4vX2VmZmVjdC1jaHVuay5tanMnO1xuaW1wb3J0IHsgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBzZXRBY3RpdmVDb25zdW1lciBhcyBzZXRBY3RpdmVDb25zdW1lciQxIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9wcmltaXRpdmVzL3NpZ25hbHMnO1xuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQXR0cmlidXRlIGFzIEF0dHJpYnV0ZSQxIH0gZnJvbSAnLi9fYXR0cmlidXRlLWNodW5rLm1qcyc7XG5mdW5jdGlvbiBub1NpZGVFZmZlY3RzKGZuKSB7XG4gIHJldHVybiB7XG4gICAgdG9TdHJpbmc6IGZuXG4gIH0udG9TdHJpbmcoKTtcbn1cbmNvbnN0IEFOTk9UQVRJT05TID0gJ19fYW5ub3RhdGlvbnNfXyc7XG5jb25zdCBQQVJBTUVURVJTID0gJ19fcGFyYW1ldGVyc19fJztcbmNvbnN0IFBST1BfTUVUQURBVEEgPSAnX19wcm9wX19tZXRhZGF0YV9fJztcbmZ1bmN0aW9uIG1ha2VEZWNvcmF0b3IobmFtZSwgcHJvcHMsIHBhcmVudENsYXNzLCBhZGRpdGlvbmFsUHJvY2Vzc2luZywgdHlwZUZuKSB7XG4gIHJldHVybiBub1NpZGVFZmZlY3RzKCgpID0+IHtcbiAgICBjb25zdCBtZXRhQ3RvciA9IG1ha2VNZXRhZGF0YUN0b3IocHJvcHMpO1xuICAgIGZ1bmN0aW9uIERlY29yYXRvckZhY3RvcnkoLi4uYXJncykge1xuICAgICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBEZWNvcmF0b3JGYWN0b3J5KSB7XG4gICAgICAgIG1ldGFDdG9yLmNhbGwodGhpcywgLi4uYXJncyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuICAgICAgY29uc3QgYW5ub3RhdGlvbkluc3RhbmNlID0gbmV3IERlY29yYXRvckZhY3RvcnkoLi4uYXJncyk7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gVHlwZURlY29yYXRvcihjbHMpIHtcbiAgICAgICAgaWYgKHR5cGVGbikgdHlwZUZuKGNscywgLi4uYXJncyk7XG4gICAgICAgIGNvbnN0IGFubm90YXRpb25zID0gY2xzLmhhc093blByb3BlcnR5KEFOTk9UQVRJT05TKSA/IGNsc1tBTk5PVEFUSU9OU10gOiBPYmplY3QuZGVmaW5lUHJvcGVydHkoY2xzLCBBTk5PVEFUSU9OUywge1xuICAgICAgICAgIHZhbHVlOiBbXVxuICAgICAgICB9KVtBTk5PVEFUSU9OU107XG4gICAgICAgIGFubm90YXRpb25zLnB1c2goYW5ub3RhdGlvbkluc3RhbmNlKTtcbiAgICAgICAgcmV0dXJuIGNscztcbiAgICAgIH07XG4gICAgfVxuICAgIGlmIChwYXJlbnRDbGFzcykge1xuICAgICAgRGVjb3JhdG9yRmFjdG9yeS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHBhcmVudENsYXNzLnByb3RvdHlwZSk7XG4gICAgfVxuICAgIERlY29yYXRvckZhY3RvcnkucHJvdG90eXBlLm5nTWV0YWRhdGFOYW1lID0gbmFtZTtcbiAgICBEZWNvcmF0b3JGYWN0b3J5LmFubm90YXRpb25DbHMgPSBEZWNvcmF0b3JGYWN0b3J5O1xuICAgIHJldHVybiBEZWNvcmF0b3JGYWN0b3J5O1xuICB9KTtcbn1cbmZ1bmN0aW9uIG1ha2VNZXRhZGF0YUN0b3IocHJvcHMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGN0b3IoLi4uYXJncykge1xuICAgIGlmIChwcm9wcykge1xuICAgICAgY29uc3QgdmFsdWVzID0gcHJvcHMoLi4uYXJncyk7XG4gICAgICBmb3IgKGNvbnN0IHByb3BOYW1lIGluIHZhbHVlcykge1xuICAgICAgICB0aGlzW3Byb3BOYW1lXSA9IHZhbHVlc1twcm9wTmFtZV07XG4gICAgICB9XG4gICAgfVxuICB9O1xufVxuZnVuY3Rpb24gbWFrZVBhcmFtRGVjb3JhdG9yKG5hbWUsIHByb3BzLCBwYXJlbnRDbGFzcykge1xuICByZXR1cm4gbm9TaWRlRWZmZWN0cygoKSA9PiB7XG4gICAgY29uc3QgbWV0YUN0b3IgPSBtYWtlTWV0YWRhdGFDdG9yKHByb3BzKTtcbiAgICBmdW5jdGlvbiBQYXJhbURlY29yYXRvckZhY3RvcnkoLi4uYXJncykge1xuICAgICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBQYXJhbURlY29yYXRvckZhY3RvcnkpIHtcbiAgICAgICAgbWV0YUN0b3IuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuICAgICAgY29uc3QgYW5ub3RhdGlvbkluc3RhbmNlID0gbmV3IFBhcmFtRGVjb3JhdG9yRmFjdG9yeSguLi5hcmdzKTtcbiAgICAgIFBhcmFtRGVjb3JhdG9yLmFubm90YXRpb24gPSBhbm5vdGF0aW9uSW5zdGFuY2U7XG4gICAgICByZXR1cm4gUGFyYW1EZWNvcmF0b3I7XG4gICAgICBmdW5jdGlvbiBQYXJhbURlY29yYXRvcihjbHMsIHVudXNlZEtleSwgaW5kZXgpIHtcbiAgICAgICAgY29uc3QgcGFyYW1ldGVycyA9IGNscy5oYXNPd25Qcm9wZXJ0eShQQVJBTUVURVJTKSA/IGNsc1tQQVJBTUVURVJTXSA6IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjbHMsIFBBUkFNRVRFUlMsIHtcbiAgICAgICAgICB2YWx1ZTogW11cbiAgICAgICAgfSlbUEFSQU1FVEVSU107XG4gICAgICAgIHdoaWxlIChwYXJhbWV0ZXJzLmxlbmd0aCA8PSBpbmRleCkge1xuICAgICAgICAgIHBhcmFtZXRlcnMucHVzaChudWxsKTtcbiAgICAgICAgfVxuICAgICAgICAocGFyYW1ldGVyc1tpbmRleF0gPSBwYXJhbWV0ZXJzW2luZGV4XSB8fCBbXSkucHVzaChhbm5vdGF0aW9uSW5zdGFuY2UpO1xuICAgICAgICByZXR1cm4gY2xzO1xuICAgICAgfVxuICAgIH1cbiAgICBQYXJhbURlY29yYXRvckZhY3RvcnkucHJvdG90eXBlLm5nTWV0YWRhdGFOYW1lID0gbmFtZTtcbiAgICBQYXJhbURlY29yYXRvckZhY3RvcnkuYW5ub3RhdGlvbkNscyA9IFBhcmFtRGVjb3JhdG9yRmFjdG9yeTtcbiAgICByZXR1cm4gUGFyYW1EZWNvcmF0b3JGYWN0b3J5O1xuICB9KTtcbn1cbmZ1bmN0aW9uIG1ha2VQcm9wRGVjb3JhdG9yKG5hbWUsIHByb3BzLCBwYXJlbnRDbGFzcywgYWRkaXRpb25hbFByb2Nlc3NpbmcpIHtcbiAgcmV0dXJuIG5vU2lkZUVmZmVjdHMoKCkgPT4ge1xuICAgIGNvbnN0IG1ldGFDdG9yID0gbWFrZU1ldGFkYXRhQ3Rvcihwcm9wcyk7XG4gICAgZnVuY3Rpb24gUHJvcERlY29yYXRvckZhY3RvcnkoLi4uYXJncykge1xuICAgICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBQcm9wRGVjb3JhdG9yRmFjdG9yeSkge1xuICAgICAgICBtZXRhQ3Rvci5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG4gICAgICBjb25zdCBkZWNvcmF0b3JJbnN0YW5jZSA9IG5ldyBQcm9wRGVjb3JhdG9yRmFjdG9yeSguLi5hcmdzKTtcbiAgICAgIGZ1bmN0aW9uIFByb3BEZWNvcmF0b3IodGFyZ2V0LCBuYW1lKSB7XG4gICAgICAgIGlmICh0YXJnZXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignU3RhbmRhcmQgQW5ndWxhciBmaWVsZCBkZWNvcmF0b3JzIGFyZSBub3Qgc3VwcG9ydGVkIGluIEpJVCBtb2RlLicpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbnN0cnVjdG9yID0gdGFyZ2V0LmNvbnN0cnVjdG9yO1xuICAgICAgICBjb25zdCBtZXRhID0gY29uc3RydWN0b3IuaGFzT3duUHJvcGVydHkoUFJPUF9NRVRBREFUQSkgPyBjb25zdHJ1Y3RvcltQUk9QX01FVEFEQVRBXSA6IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb25zdHJ1Y3RvciwgUFJPUF9NRVRBREFUQSwge1xuICAgICAgICAgIHZhbHVlOiB7fVxuICAgICAgICB9KVtQUk9QX01FVEFEQVRBXTtcbiAgICAgICAgbWV0YVtuYW1lXSA9IG1ldGEuaGFzT3duUHJvcGVydHkobmFtZSkgJiYgbWV0YVtuYW1lXSB8fCBbXTtcbiAgICAgICAgbWV0YVtuYW1lXS51bnNoaWZ0KGRlY29yYXRvckluc3RhbmNlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBQcm9wRGVjb3JhdG9yO1xuICAgIH1cbiAgICBpZiAocGFyZW50Q2xhc3MpIHtcbiAgICAgIFByb3BEZWNvcmF0b3JGYWN0b3J5LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUocGFyZW50Q2xhc3MucHJvdG90eXBlKTtcbiAgICB9XG4gICAgUHJvcERlY29yYXRvckZhY3RvcnkucHJvdG90eXBlLm5nTWV0YWRhdGFOYW1lID0gbmFtZTtcbiAgICBQcm9wRGVjb3JhdG9yRmFjdG9yeS5hbm5vdGF0aW9uQ2xzID0gUHJvcERlY29yYXRvckZhY3Rvcnk7XG4gICAgcmV0dXJuIFByb3BEZWNvcmF0b3JGYWN0b3J5O1xuICB9KTtcbn1cbmNvbnN0IEluamVjdCA9IC8qI19fUFVSRV9fKi9hdHRhY2hJbmplY3RGbGFnKC8qI19fUFVSRV9fKi9tYWtlUGFyYW1EZWNvcmF0b3IoJ0luamVjdCcsIHRva2VuID0+ICh7XG4gIHRva2VuXG59KSksIC0xKTtcbmNvbnN0IE9wdGlvbmFsID0gLyojX19QVVJFX18qL2F0dGFjaEluamVjdEZsYWcoLyojX19QVVJFX18qL21ha2VQYXJhbURlY29yYXRvcignT3B0aW9uYWwnKSwgOCk7XG5jb25zdCBTZWxmID0gLyojX19QVVJFX18qL2F0dGFjaEluamVjdEZsYWcoLyojX19QVVJFX18qL21ha2VQYXJhbURlY29yYXRvcignU2VsZicpLCAyKTtcbmNvbnN0IFNraXBTZWxmID0gLyojX19QVVJFX18qL2F0dGFjaEluamVjdEZsYWcoLyojX19QVVJFX18qL21ha2VQYXJhbURlY29yYXRvcignU2tpcFNlbGYnKSwgNCk7XG5jb25zdCBIb3N0ID0gLyojX19QVVJFX18qL2F0dGFjaEluamVjdEZsYWcoLyojX19QVVJFX18qL21ha2VQYXJhbURlY29yYXRvcignSG9zdCcpLCAxKTtcbmZ1bmN0aW9uIGdldENvbXBpbGVyRmFjYWRlKHJlcXVlc3QpIHtcbiAgY29uc3QgZ2xvYmFsTmcgPSBfZ2xvYmFsWyduZyddO1xuICBpZiAoZ2xvYmFsTmcgJiYgZ2xvYmFsTmcuybVjb21waWxlckZhY2FkZSkge1xuICAgIHJldHVybiBnbG9iYWxOZy7JtWNvbXBpbGVyRmFjYWRlO1xuICB9XG4gIGlmICh0eXBlb2YgbmdEZXZNb2RlID09PSAndW5kZWZpbmVkJyB8fCBuZ0Rldk1vZGUpIHtcbiAgICBjb25zb2xlLmVycm9yKGBKSVQgY29tcGlsYXRpb24gZmFpbGVkIGZvciAke3JlcXVlc3Qua2luZH1gLCByZXF1ZXN0LnR5cGUpO1xuICAgIGxldCBtZXNzYWdlID0gYFRoZSAke3JlcXVlc3Qua2luZH0gJyR7cmVxdWVzdC50eXBlLm5hbWV9JyBuZWVkcyB0byBiZSBjb21waWxlZCB1c2luZyB0aGUgSklUIGNvbXBpbGVyLCBidXQgJ0Bhbmd1bGFyL2NvbXBpbGVyJyBpcyBub3QgYXZhaWxhYmxlLlxcblxcbmA7XG4gICAgaWYgKHJlcXVlc3QudXNhZ2UgPT09IDEpIHtcbiAgICAgIG1lc3NhZ2UgKz0gYFRoZSAke3JlcXVlc3Qua2luZH0gaXMgcGFydCBvZiBhIGxpYnJhcnkgdGhhdCBoYXMgYmVlbiBwYXJ0aWFsbHkgY29tcGlsZWQuXFxuYDtcbiAgICAgIG1lc3NhZ2UgKz0gYEhvd2V2ZXIsIHRoZSBBbmd1bGFyIExpbmtlciBoYXMgbm90IHByb2Nlc3NlZCB0aGUgbGlicmFyeSBzdWNoIHRoYXQgSklUIGNvbXBpbGF0aW9uIGlzIHVzZWQgYXMgZmFsbGJhY2suXFxuYDtcbiAgICAgIG1lc3NhZ2UgKz0gJ1xcbic7XG4gICAgICBtZXNzYWdlICs9IGBJZGVhbGx5LCB0aGUgbGlicmFyeSBpcyBwcm9jZXNzZWQgdXNpbmcgdGhlIEFuZ3VsYXIgTGlua2VyIHRvIGJlY29tZSBmdWxseSBBT1QgY29tcGlsZWQuXFxuYDtcbiAgICB9IGVsc2Uge1xuICAgICAgbWVzc2FnZSArPSBgSklUIGNvbXBpbGF0aW9uIGlzIGRpc2NvdXJhZ2VkIGZvciBwcm9kdWN0aW9uIHVzZS1jYXNlcyEgQ29uc2lkZXIgdXNpbmcgQU9UIG1vZGUgaW5zdGVhZC5cXG5gO1xuICAgIH1cbiAgICBtZXNzYWdlICs9IGBBbHRlcm5hdGl2ZWx5LCB0aGUgSklUIGNvbXBpbGVyIHNob3VsZCBiZSBsb2FkZWQgYnkgYm9vdHN0cmFwcGluZyB1c2luZyAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlci1keW5hbWljJyBvciAnQGFuZ3VsYXIvcGxhdGZvcm0tc2VydmVyJyxcXG5gO1xuICAgIG1lc3NhZ2UgKz0gYG9yIG1hbnVhbGx5IHByb3ZpZGUgdGhlIGNvbXBpbGVyIHdpdGggJ2ltcG9ydCBcIkBhbmd1bGFyL2NvbXBpbGVyXCI7JyBiZWZvcmUgYm9vdHN0cmFwcGluZy5gO1xuICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0pJVCBjb21waWxlciB1bmF2YWlsYWJsZScpO1xuICB9XG59XG5jb25zdCBhbmd1bGFyQ29yZURpRW52ID0ge1xuICAnybXJtWRlZmluZUluamVjdGFibGUnOiBfX2RlZmluZUluamVjdGFibGUsXG4gICfJtcm1ZGVmaW5lSW5qZWN0b3InOiBfX2RlZmluZUluamVjdG9yLFxuICAnybXJtWluamVjdCc6IF9faW5qZWN0LFxuICAnybXJtWludmFsaWRGYWN0b3J5RGVwJzogX19pbnZhbGlkRmFjdG9yeURlcCxcbiAgJ3Jlc29sdmVGb3J3YXJkUmVmJzogcmVzb2x2ZUZvcndhcmRSZWZcbn07XG5jb25zdCBUeXBlID0gRnVuY3Rpb247XG5mdW5jdGlvbiBpc1R5cGUodikge1xuICByZXR1cm4gdHlwZW9mIHYgPT09ICdmdW5jdGlvbic7XG59XG5jb25zdCBFUzVfREVMRUdBVEVfQ1RPUiA9IC9eZnVuY3Rpb25cXHMrXFxTK1xcKFxcKVxccyp7W1xcc1xcU10rXFwuYXBwbHlcXCh0aGlzLFxccyooYXJndW1lbnRzfCg/OlteKCldK1xcKFxcW1xcXSwpP1teKCldK1xcKGFyZ3VtZW50c1xcKS4qKVxcKS87XG5jb25zdCBFUzIwMTVfSU5IRVJJVEVEX0NMQVNTID0gL15jbGFzc1xccytbQS1aYS16XFxkJF9dKlxccypleHRlbmRzXFxzK1tee10rey87XG5jb25zdCBFUzIwMTVfSU5IRVJJVEVEX0NMQVNTX1dJVEhfQ1RPUiA9IC9eY2xhc3NcXHMrW0EtWmEtelxcZCRfXSpcXHMqZXh0ZW5kc1xccytbXntdK3tbXFxzXFxTXSpjb25zdHJ1Y3RvclxccypcXCgvO1xuY29uc3QgRVMyMDE1X0lOSEVSSVRFRF9DTEFTU19XSVRIX0RFTEVHQVRFX0NUT1IgPSAvXmNsYXNzXFxzK1tBLVphLXpcXGQkX10qXFxzKmV4dGVuZHNcXHMrW157XSt7W1xcc1xcU10qY29uc3RydWN0b3JcXHMqXFwoXFwpXFxzKntbXn1dKnN1cGVyXFwoXFwuXFwuXFwuYXJndW1lbnRzXFwpLztcbmZ1bmN0aW9uIGlzRGVsZWdhdGVDdG9yKHR5cGVTdHIpIHtcbiAgcmV0dXJuIEVTNV9ERUxFR0FURV9DVE9SLnRlc3QodHlwZVN0cikgfHwgRVMyMDE1X0lOSEVSSVRFRF9DTEFTU19XSVRIX0RFTEVHQVRFX0NUT1IudGVzdCh0eXBlU3RyKSB8fCBFUzIwMTVfSU5IRVJJVEVEX0NMQVNTLnRlc3QodHlwZVN0cikgJiYgIUVTMjAxNV9JTkhFUklURURfQ0xBU1NfV0lUSF9DVE9SLnRlc3QodHlwZVN0cik7XG59XG5jbGFzcyBSZWZsZWN0aW9uQ2FwYWJpbGl0aWVzIHtcbiAgX3JlZmxlY3Q7XG4gIGNvbnN0cnVjdG9yKHJlZmxlY3QpIHtcbiAgICB0aGlzLl9yZWZsZWN0ID0gcmVmbGVjdCB8fCBfZ2xvYmFsWydSZWZsZWN0J107XG4gIH1cbiAgZmFjdG9yeSh0KSB7XG4gICAgcmV0dXJuICguLi5hcmdzKSA9PiBuZXcgdCguLi5hcmdzKTtcbiAgfVxuICBfemlwVHlwZXNBbmRBbm5vdGF0aW9ucyhwYXJhbVR5cGVzLCBwYXJhbUFubm90YXRpb25zKSB7XG4gICAgbGV0IHJlc3VsdDtcbiAgICBpZiAodHlwZW9mIHBhcmFtVHlwZXMgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXN1bHQgPSBuZXdBcnJheShwYXJhbUFubm90YXRpb25zLmxlbmd0aCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdCA9IG5ld0FycmF5KHBhcmFtVHlwZXMubGVuZ3RoKTtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXN1bHQubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh0eXBlb2YgcGFyYW1UeXBlcyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmVzdWx0W2ldID0gW107XG4gICAgICB9IGVsc2UgaWYgKHBhcmFtVHlwZXNbaV0gJiYgcGFyYW1UeXBlc1tpXSAhPSBPYmplY3QpIHtcbiAgICAgICAgcmVzdWx0W2ldID0gW3BhcmFtVHlwZXNbaV1dO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0W2ldID0gW107XG4gICAgICB9XG4gICAgICBpZiAocGFyYW1Bbm5vdGF0aW9ucyAmJiBwYXJhbUFubm90YXRpb25zW2ldICE9IG51bGwpIHtcbiAgICAgICAgcmVzdWx0W2ldID0gcmVzdWx0W2ldLmNvbmNhdChwYXJhbUFubm90YXRpb25zW2ldKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBfb3duUGFyYW1ldGVycyh0eXBlLCBwYXJlbnRDdG9yKSB7XG4gICAgY29uc3QgdHlwZVN0ciA9IHR5cGUudG9TdHJpbmcoKTtcbiAgICBpZiAoaXNEZWxlZ2F0ZUN0b3IodHlwZVN0cikpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBpZiAodHlwZS5wYXJhbWV0ZXJzICYmIHR5cGUucGFyYW1ldGVycyAhPT0gcGFyZW50Q3Rvci5wYXJhbWV0ZXJzKSB7XG4gICAgICByZXR1cm4gdHlwZS5wYXJhbWV0ZXJzO1xuICAgIH1cbiAgICBjb25zdCB0c2lja2xlQ3RvclBhcmFtcyA9IHR5cGUuY3RvclBhcmFtZXRlcnM7XG4gICAgaWYgKHRzaWNrbGVDdG9yUGFyYW1zICYmIHRzaWNrbGVDdG9yUGFyYW1zICE9PSBwYXJlbnRDdG9yLmN0b3JQYXJhbWV0ZXJzKSB7XG4gICAgICBjb25zdCBjdG9yUGFyYW1ldGVycyA9IHR5cGVvZiB0c2lja2xlQ3RvclBhcmFtcyA9PT0gJ2Z1bmN0aW9uJyA/IHRzaWNrbGVDdG9yUGFyYW1zKCkgOiB0c2lja2xlQ3RvclBhcmFtcztcbiAgICAgIGNvbnN0IHBhcmFtVHlwZXMgPSBjdG9yUGFyYW1ldGVycy5tYXAoY3RvclBhcmFtID0+IGN0b3JQYXJhbSAmJiBjdG9yUGFyYW0udHlwZSk7XG4gICAgICBjb25zdCBwYXJhbUFubm90YXRpb25zID0gY3RvclBhcmFtZXRlcnMubWFwKGN0b3JQYXJhbSA9PiBjdG9yUGFyYW0gJiYgY29udmVydFRzaWNrbGVEZWNvcmF0b3JJbnRvTWV0YWRhdGEoY3RvclBhcmFtLmRlY29yYXRvcnMpKTtcbiAgICAgIHJldHVybiB0aGlzLl96aXBUeXBlc0FuZEFubm90YXRpb25zKHBhcmFtVHlwZXMsIHBhcmFtQW5ub3RhdGlvbnMpO1xuICAgIH1cbiAgICBjb25zdCBwYXJhbUFubm90YXRpb25zID0gdHlwZS5oYXNPd25Qcm9wZXJ0eShQQVJBTUVURVJTKSAmJiB0eXBlW1BBUkFNRVRFUlNdO1xuICAgIGNvbnN0IHBhcmFtVHlwZXMgPSB0aGlzLl9yZWZsZWN0ICYmIHRoaXMuX3JlZmxlY3QuZ2V0T3duTWV0YWRhdGEgJiYgdGhpcy5fcmVmbGVjdC5nZXRPd25NZXRhZGF0YSgnZGVzaWduOnBhcmFtdHlwZXMnLCB0eXBlKTtcbiAgICBpZiAocGFyYW1UeXBlcyB8fCBwYXJhbUFubm90YXRpb25zKSB7XG4gICAgICByZXR1cm4gdGhpcy5femlwVHlwZXNBbmRBbm5vdGF0aW9ucyhwYXJhbVR5cGVzLCBwYXJhbUFubm90YXRpb25zKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ld0FycmF5KHR5cGUubGVuZ3RoKTtcbiAgfVxuICBwYXJhbWV0ZXJzKHR5cGUpIHtcbiAgICBpZiAoIWlzVHlwZSh0eXBlKSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICBjb25zdCBwYXJlbnRDdG9yID0gZ2V0UGFyZW50Q3Rvcih0eXBlKTtcbiAgICBsZXQgcGFyYW1ldGVycyA9IHRoaXMuX293blBhcmFtZXRlcnModHlwZSwgcGFyZW50Q3Rvcik7XG4gICAgaWYgKCFwYXJhbWV0ZXJzICYmIHBhcmVudEN0b3IgIT09IE9iamVjdCkge1xuICAgICAgcGFyYW1ldGVycyA9IHRoaXMucGFyYW1ldGVycyhwYXJlbnRDdG9yKTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcmFtZXRlcnMgfHwgW107XG4gIH1cbiAgX293bkFubm90YXRpb25zKHR5cGVPckZ1bmMsIHBhcmVudEN0b3IpIHtcbiAgICBpZiAodHlwZU9yRnVuYy5hbm5vdGF0aW9ucyAmJiB0eXBlT3JGdW5jLmFubm90YXRpb25zICE9PSBwYXJlbnRDdG9yLmFubm90YXRpb25zKSB7XG4gICAgICBsZXQgYW5ub3RhdGlvbnMgPSB0eXBlT3JGdW5jLmFubm90YXRpb25zO1xuICAgICAgaWYgKHR5cGVvZiBhbm5vdGF0aW9ucyA9PT0gJ2Z1bmN0aW9uJyAmJiBhbm5vdGF0aW9ucy5hbm5vdGF0aW9ucykge1xuICAgICAgICBhbm5vdGF0aW9ucyA9IGFubm90YXRpb25zLmFubm90YXRpb25zO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFubm90YXRpb25zO1xuICAgIH1cbiAgICBpZiAodHlwZU9yRnVuYy5kZWNvcmF0b3JzICYmIHR5cGVPckZ1bmMuZGVjb3JhdG9ycyAhPT0gcGFyZW50Q3Rvci5kZWNvcmF0b3JzKSB7XG4gICAgICByZXR1cm4gY29udmVydFRzaWNrbGVEZWNvcmF0b3JJbnRvTWV0YWRhdGEodHlwZU9yRnVuYy5kZWNvcmF0b3JzKTtcbiAgICB9XG4gICAgaWYgKHR5cGVPckZ1bmMuaGFzT3duUHJvcGVydHkoQU5OT1RBVElPTlMpKSB7XG4gICAgICByZXR1cm4gdHlwZU9yRnVuY1tBTk5PVEFUSU9OU107XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGFubm90YXRpb25zKHR5cGVPckZ1bmMpIHtcbiAgICBpZiAoIWlzVHlwZSh0eXBlT3JGdW5jKSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICBjb25zdCBwYXJlbnRDdG9yID0gZ2V0UGFyZW50Q3Rvcih0eXBlT3JGdW5jKTtcbiAgICBjb25zdCBvd25Bbm5vdGF0aW9ucyA9IHRoaXMuX293bkFubm90YXRpb25zKHR5cGVPckZ1bmMsIHBhcmVudEN0b3IpIHx8IFtdO1xuICAgIGNvbnN0IHBhcmVudEFubm90YXRpb25zID0gcGFyZW50Q3RvciAhPT0gT2JqZWN0ID8gdGhpcy5hbm5vdGF0aW9ucyhwYXJlbnRDdG9yKSA6IFtdO1xuICAgIHJldHVybiBwYXJlbnRBbm5vdGF0aW9ucy5jb25jYXQob3duQW5ub3RhdGlvbnMpO1xuICB9XG4gIF9vd25Qcm9wTWV0YWRhdGEodHlwZU9yRnVuYywgcGFyZW50Q3Rvcikge1xuICAgIGlmICh0eXBlT3JGdW5jLnByb3BNZXRhZGF0YSAmJiB0eXBlT3JGdW5jLnByb3BNZXRhZGF0YSAhPT0gcGFyZW50Q3Rvci5wcm9wTWV0YWRhdGEpIHtcbiAgICAgIGxldCBwcm9wTWV0YWRhdGEgPSB0eXBlT3JGdW5jLnByb3BNZXRhZGF0YTtcbiAgICAgIGlmICh0eXBlb2YgcHJvcE1ldGFkYXRhID09PSAnZnVuY3Rpb24nICYmIHByb3BNZXRhZGF0YS5wcm9wTWV0YWRhdGEpIHtcbiAgICAgICAgcHJvcE1ldGFkYXRhID0gcHJvcE1ldGFkYXRhLnByb3BNZXRhZGF0YTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBwcm9wTWV0YWRhdGE7XG4gICAgfVxuICAgIGlmICh0eXBlT3JGdW5jLnByb3BEZWNvcmF0b3JzICYmIHR5cGVPckZ1bmMucHJvcERlY29yYXRvcnMgIT09IHBhcmVudEN0b3IucHJvcERlY29yYXRvcnMpIHtcbiAgICAgIGNvbnN0IHByb3BEZWNvcmF0b3JzID0gdHlwZU9yRnVuYy5wcm9wRGVjb3JhdG9ycztcbiAgICAgIGNvbnN0IHByb3BNZXRhZGF0YSA9IHt9O1xuICAgICAgT2JqZWN0LmtleXMocHJvcERlY29yYXRvcnMpLmZvckVhY2gocHJvcCA9PiB7XG4gICAgICAgIHByb3BNZXRhZGF0YVtwcm9wXSA9IGNvbnZlcnRUc2lja2xlRGVjb3JhdG9ySW50b01ldGFkYXRhKHByb3BEZWNvcmF0b3JzW3Byb3BdKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHByb3BNZXRhZGF0YTtcbiAgICB9XG4gICAgaWYgKHR5cGVPckZ1bmMuaGFzT3duUHJvcGVydHkoUFJPUF9NRVRBREFUQSkpIHtcbiAgICAgIHJldHVybiB0eXBlT3JGdW5jW1BST1BfTUVUQURBVEFdO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBwcm9wTWV0YWRhdGEodHlwZU9yRnVuYykge1xuICAgIGlmICghaXNUeXBlKHR5cGVPckZ1bmMpKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIGNvbnN0IHBhcmVudEN0b3IgPSBnZXRQYXJlbnRDdG9yKHR5cGVPckZ1bmMpO1xuICAgIGNvbnN0IHByb3BNZXRhZGF0YSA9IHt9O1xuICAgIGlmIChwYXJlbnRDdG9yICE9PSBPYmplY3QpIHtcbiAgICAgIGNvbnN0IHBhcmVudFByb3BNZXRhZGF0YSA9IHRoaXMucHJvcE1ldGFkYXRhKHBhcmVudEN0b3IpO1xuICAgICAgT2JqZWN0LmtleXMocGFyZW50UHJvcE1ldGFkYXRhKS5mb3JFYWNoKHByb3BOYW1lID0+IHtcbiAgICAgICAgcHJvcE1ldGFkYXRhW3Byb3BOYW1lXSA9IHBhcmVudFByb3BNZXRhZGF0YVtwcm9wTmFtZV07XG4gICAgICB9KTtcbiAgICB9XG4gICAgY29uc3Qgb3duUHJvcE1ldGFkYXRhID0gdGhpcy5fb3duUHJvcE1ldGFkYXRhKHR5cGVPckZ1bmMsIHBhcmVudEN0b3IpO1xuICAgIGlmIChvd25Qcm9wTWV0YWRhdGEpIHtcbiAgICAgIE9iamVjdC5rZXlzKG93blByb3BNZXRhZGF0YSkuZm9yRWFjaChwcm9wTmFtZSA9PiB7XG4gICAgICAgIGNvbnN0IGRlY29yYXRvcnMgPSBbXTtcbiAgICAgICAgaWYgKHByb3BNZXRhZGF0YS5oYXNPd25Qcm9wZXJ0eShwcm9wTmFtZSkpIHtcbiAgICAgICAgICBkZWNvcmF0b3JzLnB1c2goLi4ucHJvcE1ldGFkYXRhW3Byb3BOYW1lXSk7XG4gICAgICAgIH1cbiAgICAgICAgZGVjb3JhdG9ycy5wdXNoKC4uLm93blByb3BNZXRhZGF0YVtwcm9wTmFtZV0pO1xuICAgICAgICBwcm9wTWV0YWRhdGFbcHJvcE5hbWVdID0gZGVjb3JhdG9ycztcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcHJvcE1ldGFkYXRhO1xuICB9XG4gIG93blByb3BNZXRhZGF0YSh0eXBlT3JGdW5jKSB7XG4gICAgaWYgKCFpc1R5cGUodHlwZU9yRnVuYykpIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX293blByb3BNZXRhZGF0YSh0eXBlT3JGdW5jLCBnZXRQYXJlbnRDdG9yKHR5cGVPckZ1bmMpKSB8fCB7fTtcbiAgfVxuICBoYXNMaWZlY3ljbGVIb29rKHR5cGUsIGxjUHJvcGVydHkpIHtcbiAgICByZXR1cm4gdHlwZSBpbnN0YW5jZW9mIFR5cGUgJiYgbGNQcm9wZXJ0eSBpbiB0eXBlLnByb3RvdHlwZTtcbiAgfVxufVxuZnVuY3Rpb24gY29udmVydFRzaWNrbGVEZWNvcmF0b3JJbnRvTWV0YWRhdGEoZGVjb3JhdG9ySW52b2NhdGlvbnMpIHtcbiAgaWYgKCFkZWNvcmF0b3JJbnZvY2F0aW9ucykge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICByZXR1cm4gZGVjb3JhdG9ySW52b2NhdGlvbnMubWFwKGRlY29yYXRvckludm9jYXRpb24gPT4ge1xuICAgIGNvbnN0IGRlY29yYXRvclR5cGUgPSBkZWNvcmF0b3JJbnZvY2F0aW9uLnR5cGU7XG4gICAgY29uc3QgYW5ub3RhdGlvbkNscyA9IGRlY29yYXRvclR5cGUuYW5ub3RhdGlvbkNscztcbiAgICBjb25zdCBhbm5vdGF0aW9uQXJncyA9IGRlY29yYXRvckludm9jYXRpb24uYXJncyA/IGRlY29yYXRvckludm9jYXRpb24uYXJncyA6IFtdO1xuICAgIHJldHVybiBuZXcgYW5ub3RhdGlvbkNscyguLi5hbm5vdGF0aW9uQXJncyk7XG4gIH0pO1xufVxuZnVuY3Rpb24gZ2V0UGFyZW50Q3RvcihjdG9yKSB7XG4gIGNvbnN0IHBhcmVudFByb3RvID0gY3Rvci5wcm90b3R5cGUgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YoY3Rvci5wcm90b3R5cGUpIDogbnVsbDtcbiAgY29uc3QgcGFyZW50Q3RvciA9IHBhcmVudFByb3RvID8gcGFyZW50UHJvdG8uY29uc3RydWN0b3IgOiBudWxsO1xuICByZXR1cm4gcGFyZW50Q3RvciB8fCBPYmplY3Q7XG59XG5mdW5jdGlvbiBhcHBseVZhbHVlVG9JbnB1dEZpZWxkKGluc3RhbmNlLCBpbnB1dFNpZ25hbE5vZGUsIHByaXZhdGVOYW1lLCB2YWx1ZSkge1xuICBpZiAoaW5wdXRTaWduYWxOb2RlICE9PSBudWxsKSB7XG4gICAgaW5wdXRTaWduYWxOb2RlLmFwcGx5VmFsdWVUb0lucHV0U2lnbmFsKGlucHV0U2lnbmFsTm9kZSwgdmFsdWUpO1xuICB9IGVsc2Uge1xuICAgIGluc3RhbmNlW3ByaXZhdGVOYW1lXSA9IHZhbHVlO1xuICB9XG59XG5jbGFzcyBTaW1wbGVDaGFuZ2Uge1xuICBwcmV2aW91c1ZhbHVlO1xuICBjdXJyZW50VmFsdWU7XG4gIGZpcnN0Q2hhbmdlO1xuICBjb25zdHJ1Y3RvcihwcmV2aW91c1ZhbHVlLCBjdXJyZW50VmFsdWUsIGZpcnN0Q2hhbmdlKSB7XG4gICAgdGhpcy5wcmV2aW91c1ZhbHVlID0gcHJldmlvdXNWYWx1ZTtcbiAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IGN1cnJlbnRWYWx1ZTtcbiAgICB0aGlzLmZpcnN0Q2hhbmdlID0gZmlyc3RDaGFuZ2U7XG4gIH1cbiAgaXNGaXJzdENoYW5nZSgpIHtcbiAgICByZXR1cm4gdGhpcy5maXJzdENoYW5nZTtcbiAgfVxufVxuY29uc3QgybXJtU5nT25DaGFuZ2VzRmVhdHVyZSA9IC8qIEBfX1BVUkVfXyAqLygoKSA9PiB7XG4gIGNvbnN0IMm1ybVOZ09uQ2hhbmdlc0ZlYXR1cmVJbXBsID0gKCkgPT4gTmdPbkNoYW5nZXNGZWF0dXJlSW1wbDtcbiAgybXJtU5nT25DaGFuZ2VzRmVhdHVyZUltcGwubmdJbmhlcml0ID0gdHJ1ZTtcbiAgcmV0dXJuIMm1ybVOZ09uQ2hhbmdlc0ZlYXR1cmVJbXBsO1xufSkoKTtcbmZ1bmN0aW9uIE5nT25DaGFuZ2VzRmVhdHVyZUltcGwoZGVmaW5pdGlvbikge1xuICBpZiAoZGVmaW5pdGlvbi50eXBlLnByb3RvdHlwZS5uZ09uQ2hhbmdlcykge1xuICAgIGRlZmluaXRpb24uc2V0SW5wdXQgPSBuZ09uQ2hhbmdlc1NldElucHV0O1xuICB9XG4gIHJldHVybiByZW1lbWJlckNoYW5nZUhpc3RvcnlBbmRJbnZva2VPbkNoYW5nZXNIb29rO1xufVxuZnVuY3Rpb24gcmVtZW1iZXJDaGFuZ2VIaXN0b3J5QW5kSW52b2tlT25DaGFuZ2VzSG9vaygpIHtcbiAgY29uc3Qgc2ltcGxlQ2hhbmdlc1N0b3JlID0gZ2V0U2ltcGxlQ2hhbmdlc1N0b3JlKHRoaXMpO1xuICBjb25zdCBjdXJyZW50ID0gc2ltcGxlQ2hhbmdlc1N0b3JlPy5jdXJyZW50O1xuICBpZiAoY3VycmVudCkge1xuICAgIGNvbnN0IHByZXZpb3VzID0gc2ltcGxlQ2hhbmdlc1N0b3JlLnByZXZpb3VzO1xuICAgIGlmIChwcmV2aW91cyA9PT0gRU1QVFlfT0JKKSB7XG4gICAgICBzaW1wbGVDaGFuZ2VzU3RvcmUucHJldmlvdXMgPSBjdXJyZW50O1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGxldCBrZXkgaW4gY3VycmVudCkge1xuICAgICAgICBwcmV2aW91c1trZXldID0gY3VycmVudFtrZXldO1xuICAgICAgfVxuICAgIH1cbiAgICBzaW1wbGVDaGFuZ2VzU3RvcmUuY3VycmVudCA9IG51bGw7XG4gICAgdGhpcy5uZ09uQ2hhbmdlcyhjdXJyZW50KTtcbiAgfVxufVxuZnVuY3Rpb24gbmdPbkNoYW5nZXNTZXRJbnB1dChpbnN0YW5jZSwgaW5wdXRTaWduYWxOb2RlLCB2YWx1ZSwgcHVibGljTmFtZSwgcHJpdmF0ZU5hbWUpIHtcbiAgY29uc3QgZGVjbGFyZWROYW1lID0gdGhpcy5kZWNsYXJlZElucHV0c1twdWJsaWNOYW1lXTtcbiAgbmdEZXZNb2RlICYmIGFzc2VydFN0cmluZyhkZWNsYXJlZE5hbWUsICdOYW1lIG9mIGlucHV0IGluIG5nT25DaGFuZ2VzIGhhcyB0byBiZSBhIHN0cmluZycpO1xuICBjb25zdCBzaW1wbGVDaGFuZ2VzU3RvcmUgPSBnZXRTaW1wbGVDaGFuZ2VzU3RvcmUoaW5zdGFuY2UpIHx8IHNldFNpbXBsZUNoYW5nZXNTdG9yZShpbnN0YW5jZSwge1xuICAgIHByZXZpb3VzOiBFTVBUWV9PQkosXG4gICAgY3VycmVudDogbnVsbFxuICB9KTtcbiAgY29uc3QgY3VycmVudCA9IHNpbXBsZUNoYW5nZXNTdG9yZS5jdXJyZW50IHx8IChzaW1wbGVDaGFuZ2VzU3RvcmUuY3VycmVudCA9IHt9KTtcbiAgY29uc3QgcHJldmlvdXMgPSBzaW1wbGVDaGFuZ2VzU3RvcmUucHJldmlvdXM7XG4gIGNvbnN0IHByZXZpb3VzQ2hhbmdlID0gcHJldmlvdXNbZGVjbGFyZWROYW1lXTtcbiAgY3VycmVudFtkZWNsYXJlZE5hbWVdID0gbmV3IFNpbXBsZUNoYW5nZShwcmV2aW91c0NoYW5nZSAmJiBwcmV2aW91c0NoYW5nZS5jdXJyZW50VmFsdWUsIHZhbHVlLCBwcmV2aW91cyA9PT0gRU1QVFlfT0JKKTtcbiAgYXBwbHlWYWx1ZVRvSW5wdXRGaWVsZChpbnN0YW5jZSwgaW5wdXRTaWduYWxOb2RlLCBwcml2YXRlTmFtZSwgdmFsdWUpO1xufVxuY29uc3QgU0lNUExFX0NIQU5HRVNfU1RPUkUgPSAnX19uZ1NpbXBsZUNoYW5nZXNfXyc7XG5mdW5jdGlvbiBnZXRTaW1wbGVDaGFuZ2VzU3RvcmUoaW5zdGFuY2UpIHtcbiAgcmV0dXJuIGluc3RhbmNlW1NJTVBMRV9DSEFOR0VTX1NUT1JFXSB8fCBudWxsO1xufVxuZnVuY3Rpb24gc2V0U2ltcGxlQ2hhbmdlc1N0b3JlKGluc3RhbmNlLCBzdG9yZSkge1xuICByZXR1cm4gaW5zdGFuY2VbU0lNUExFX0NIQU5HRVNfU1RPUkVdID0gc3RvcmU7XG59XG5jb25zdCBwcm9maWxlckNhbGxiYWNrcyA9IFtdO1xuY29uc3QgTk9PUF9QUk9GSUxFUl9SRU1PVkFMID0gKCkgPT4ge307XG5mdW5jdGlvbiByZW1vdmVQcm9maWxlcihwcm9maWxlcikge1xuICBjb25zdCBwcm9maWxlcklkeCA9IHByb2ZpbGVyQ2FsbGJhY2tzLmluZGV4T2YocHJvZmlsZXIpO1xuICBpZiAocHJvZmlsZXJJZHggIT09IC0xKSB7XG4gICAgcHJvZmlsZXJDYWxsYmFja3Muc3BsaWNlKHByb2ZpbGVySWR4LCAxKTtcbiAgfVxufVxuZnVuY3Rpb24gc2V0UHJvZmlsZXIocHJvZmlsZXIpIHtcbiAgaWYgKHByb2ZpbGVyICE9PSBudWxsKSB7XG4gICAgaWYgKCFwcm9maWxlckNhbGxiYWNrcy5pbmNsdWRlcyhwcm9maWxlcikpIHtcbiAgICAgIHByb2ZpbGVyQ2FsbGJhY2tzLnB1c2gocHJvZmlsZXIpO1xuICAgIH1cbiAgICByZXR1cm4gKCkgPT4gcmVtb3ZlUHJvZmlsZXIocHJvZmlsZXIpO1xuICB9IGVsc2Uge1xuICAgIHByb2ZpbGVyQ2FsbGJhY2tzLmxlbmd0aCA9IDA7XG4gICAgcmV0dXJuIE5PT1BfUFJPRklMRVJfUkVNT1ZBTDtcbiAgfVxufVxuY29uc3QgcHJvZmlsZXIgPSBmdW5jdGlvbiAoZXZlbnQsIGluc3RhbmNlID0gbnVsbCwgZXZlbnRGbikge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHByb2ZpbGVyQ2FsbGJhY2tzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgcHJvZmlsZXJDYWxsYmFjayA9IHByb2ZpbGVyQ2FsbGJhY2tzW2ldO1xuICAgIHByb2ZpbGVyQ2FsbGJhY2soZXZlbnQsIGluc3RhbmNlLCBldmVudEZuKTtcbiAgfVxufTtcbnZhciBQcm9maWxlckV2ZW50ID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChQcm9maWxlckV2ZW50KSB7XG4gIFByb2ZpbGVyRXZlbnRbUHJvZmlsZXJFdmVudFtcIlRlbXBsYXRlQ3JlYXRlU3RhcnRcIl0gPSAwXSA9IFwiVGVtcGxhdGVDcmVhdGVTdGFydFwiO1xuICBQcm9maWxlckV2ZW50W1Byb2ZpbGVyRXZlbnRbXCJUZW1wbGF0ZUNyZWF0ZUVuZFwiXSA9IDFdID0gXCJUZW1wbGF0ZUNyZWF0ZUVuZFwiO1xuICBQcm9maWxlckV2ZW50W1Byb2ZpbGVyRXZlbnRbXCJUZW1wbGF0ZVVwZGF0ZVN0YXJ0XCJdID0gMl0gPSBcIlRlbXBsYXRlVXBkYXRlU3RhcnRcIjtcbiAgUHJvZmlsZXJFdmVudFtQcm9maWxlckV2ZW50W1wiVGVtcGxhdGVVcGRhdGVFbmRcIl0gPSAzXSA9IFwiVGVtcGxhdGVVcGRhdGVFbmRcIjtcbiAgUHJvZmlsZXJFdmVudFtQcm9maWxlckV2ZW50W1wiTGlmZWN5Y2xlSG9va1N0YXJ0XCJdID0gNF0gPSBcIkxpZmVjeWNsZUhvb2tTdGFydFwiO1xuICBQcm9maWxlckV2ZW50W1Byb2ZpbGVyRXZlbnRbXCJMaWZlY3ljbGVIb29rRW5kXCJdID0gNV0gPSBcIkxpZmVjeWNsZUhvb2tFbmRcIjtcbiAgUHJvZmlsZXJFdmVudFtQcm9maWxlckV2ZW50W1wiT3V0cHV0U3RhcnRcIl0gPSA2XSA9IFwiT3V0cHV0U3RhcnRcIjtcbiAgUHJvZmlsZXJFdmVudFtQcm9maWxlckV2ZW50W1wiT3V0cHV0RW5kXCJdID0gN10gPSBcIk91dHB1dEVuZFwiO1xuICBQcm9maWxlckV2ZW50W1Byb2ZpbGVyRXZlbnRbXCJCb290c3RyYXBBcHBsaWNhdGlvblN0YXJ0XCJdID0gOF0gPSBcIkJvb3RzdHJhcEFwcGxpY2F0aW9uU3RhcnRcIjtcbiAgUHJvZmlsZXJFdmVudFtQcm9maWxlckV2ZW50W1wiQm9vdHN0cmFwQXBwbGljYXRpb25FbmRcIl0gPSA5XSA9IFwiQm9vdHN0cmFwQXBwbGljYXRpb25FbmRcIjtcbiAgUHJvZmlsZXJFdmVudFtQcm9maWxlckV2ZW50W1wiQm9vdHN0cmFwQ29tcG9uZW50U3RhcnRcIl0gPSAxMF0gPSBcIkJvb3RzdHJhcENvbXBvbmVudFN0YXJ0XCI7XG4gIFByb2ZpbGVyRXZlbnRbUHJvZmlsZXJFdmVudFtcIkJvb3RzdHJhcENvbXBvbmVudEVuZFwiXSA9IDExXSA9IFwiQm9vdHN0cmFwQ29tcG9uZW50RW5kXCI7XG4gIFByb2ZpbGVyRXZlbnRbUHJvZmlsZXJFdmVudFtcIkNoYW5nZURldGVjdGlvblN0YXJ0XCJdID0gMTJdID0gXCJDaGFuZ2VEZXRlY3Rpb25TdGFydFwiO1xuICBQcm9maWxlckV2ZW50W1Byb2ZpbGVyRXZlbnRbXCJDaGFuZ2VEZXRlY3Rpb25FbmRcIl0gPSAxM10gPSBcIkNoYW5nZURldGVjdGlvbkVuZFwiO1xuICBQcm9maWxlckV2ZW50W1Byb2ZpbGVyRXZlbnRbXCJDaGFuZ2VEZXRlY3Rpb25TeW5jU3RhcnRcIl0gPSAxNF0gPSBcIkNoYW5nZURldGVjdGlvblN5bmNTdGFydFwiO1xuICBQcm9maWxlckV2ZW50W1Byb2ZpbGVyRXZlbnRbXCJDaGFuZ2VEZXRlY3Rpb25TeW5jRW5kXCJdID0gMTVdID0gXCJDaGFuZ2VEZXRlY3Rpb25TeW5jRW5kXCI7XG4gIFByb2ZpbGVyRXZlbnRbUHJvZmlsZXJFdmVudFtcIkFmdGVyUmVuZGVySG9va3NTdGFydFwiXSA9IDE2XSA9IFwiQWZ0ZXJSZW5kZXJIb29rc1N0YXJ0XCI7XG4gIFByb2ZpbGVyRXZlbnRbUHJvZmlsZXJFdmVudFtcIkFmdGVyUmVuZGVySG9va3NFbmRcIl0gPSAxN10gPSBcIkFmdGVyUmVuZGVySG9va3NFbmRcIjtcbiAgUHJvZmlsZXJFdmVudFtQcm9maWxlckV2ZW50W1wiQ29tcG9uZW50U3RhcnRcIl0gPSAxOF0gPSBcIkNvbXBvbmVudFN0YXJ0XCI7XG4gIFByb2ZpbGVyRXZlbnRbUHJvZmlsZXJFdmVudFtcIkNvbXBvbmVudEVuZFwiXSA9IDE5XSA9IFwiQ29tcG9uZW50RW5kXCI7XG4gIFByb2ZpbGVyRXZlbnRbUHJvZmlsZXJFdmVudFtcIkRlZmVyQmxvY2tTdGF0ZVN0YXJ0XCJdID0gMjBdID0gXCJEZWZlckJsb2NrU3RhdGVTdGFydFwiO1xuICBQcm9maWxlckV2ZW50W1Byb2ZpbGVyRXZlbnRbXCJEZWZlckJsb2NrU3RhdGVFbmRcIl0gPSAyMV0gPSBcIkRlZmVyQmxvY2tTdGF0ZUVuZFwiO1xuICBQcm9maWxlckV2ZW50W1Byb2ZpbGVyRXZlbnRbXCJEeW5hbWljQ29tcG9uZW50U3RhcnRcIl0gPSAyMl0gPSBcIkR5bmFtaWNDb21wb25lbnRTdGFydFwiO1xuICBQcm9maWxlckV2ZW50W1Byb2ZpbGVyRXZlbnRbXCJEeW5hbWljQ29tcG9uZW50RW5kXCJdID0gMjNdID0gXCJEeW5hbWljQ29tcG9uZW50RW5kXCI7XG4gIFByb2ZpbGVyRXZlbnRbUHJvZmlsZXJFdmVudFtcIkhvc3RCaW5kaW5nc1VwZGF0ZVN0YXJ0XCJdID0gMjRdID0gXCJIb3N0QmluZGluZ3NVcGRhdGVTdGFydFwiO1xuICBQcm9maWxlckV2ZW50W1Byb2ZpbGVyRXZlbnRbXCJIb3N0QmluZGluZ3NVcGRhdGVFbmRcIl0gPSAyNV0gPSBcIkhvc3RCaW5kaW5nc1VwZGF0ZUVuZFwiO1xuICByZXR1cm4gUHJvZmlsZXJFdmVudDtcbn0oUHJvZmlsZXJFdmVudCB8fCB7fSk7XG5mdW5jdGlvbiByZWdpc3RlclByZU9yZGVySG9va3MoZGlyZWN0aXZlSW5kZXgsIGRpcmVjdGl2ZURlZiwgdFZpZXcpIHtcbiAgbmdEZXZNb2RlICYmIGFzc2VydEZpcnN0Q3JlYXRlUGFzcyh0Vmlldyk7XG4gIGNvbnN0IHtcbiAgICBuZ09uQ2hhbmdlcyxcbiAgICBuZ09uSW5pdCxcbiAgICBuZ0RvQ2hlY2tcbiAgfSA9IGRpcmVjdGl2ZURlZi50eXBlLnByb3RvdHlwZTtcbiAgaWYgKG5nT25DaGFuZ2VzKSB7XG4gICAgY29uc3Qgd3JhcHBlZE9uQ2hhbmdlcyA9IE5nT25DaGFuZ2VzRmVhdHVyZUltcGwoZGlyZWN0aXZlRGVmKTtcbiAgICAodFZpZXcucHJlT3JkZXJIb29rcyA/Pz0gW10pLnB1c2goZGlyZWN0aXZlSW5kZXgsIHdyYXBwZWRPbkNoYW5nZXMpO1xuICAgICh0Vmlldy5wcmVPcmRlckNoZWNrSG9va3MgPz89IFtdKS5wdXNoKGRpcmVjdGl2ZUluZGV4LCB3cmFwcGVkT25DaGFuZ2VzKTtcbiAgfVxuICBpZiAobmdPbkluaXQpIHtcbiAgICAodFZpZXcucHJlT3JkZXJIb29rcyA/Pz0gW10pLnB1c2goMCAtIGRpcmVjdGl2ZUluZGV4LCBuZ09uSW5pdCk7XG4gIH1cbiAgaWYgKG5nRG9DaGVjaykge1xuICAgICh0Vmlldy5wcmVPcmRlckhvb2tzID8/PSBbXSkucHVzaChkaXJlY3RpdmVJbmRleCwgbmdEb0NoZWNrKTtcbiAgICAodFZpZXcucHJlT3JkZXJDaGVja0hvb2tzID8/PSBbXSkucHVzaChkaXJlY3RpdmVJbmRleCwgbmdEb0NoZWNrKTtcbiAgfVxufVxuZnVuY3Rpb24gcmVnaXN0ZXJQb3N0T3JkZXJIb29rcyh0VmlldywgdE5vZGUpIHtcbiAgbmdEZXZNb2RlICYmIGFzc2VydEZpcnN0Q3JlYXRlUGFzcyh0Vmlldyk7XG4gIGZvciAobGV0IGkgPSB0Tm9kZS5kaXJlY3RpdmVTdGFydCwgZW5kID0gdE5vZGUuZGlyZWN0aXZlRW5kOyBpIDwgZW5kOyBpKyspIHtcbiAgICBjb25zdCBkaXJlY3RpdmVEZWYgPSB0Vmlldy5kYXRhW2ldO1xuICAgIG5nRGV2TW9kZSAmJiBhc3NlcnREZWZpbmVkKGRpcmVjdGl2ZURlZiwgJ0V4cGVjdGluZyBEaXJlY3RpdmVEZWYnKTtcbiAgICBjb25zdCBsaWZlY3ljbGVIb29rcyA9IGRpcmVjdGl2ZURlZi50eXBlLnByb3RvdHlwZTtcbiAgICBjb25zdCB7XG4gICAgICBuZ0FmdGVyQ29udGVudEluaXQsXG4gICAgICBuZ0FmdGVyQ29udGVudENoZWNrZWQsXG4gICAgICBuZ0FmdGVyVmlld0luaXQsXG4gICAgICBuZ0FmdGVyVmlld0NoZWNrZWQsXG4gICAgICBuZ09uRGVzdHJveVxuICAgIH0gPSBsaWZlY3ljbGVIb29rcztcbiAgICBpZiAobmdBZnRlckNvbnRlbnRJbml0KSB7XG4gICAgICAodFZpZXcuY29udGVudEhvb2tzID8/PSBbXSkucHVzaCgtaSwgbmdBZnRlckNvbnRlbnRJbml0KTtcbiAgICB9XG4gICAgaWYgKG5nQWZ0ZXJDb250ZW50Q2hlY2tlZCkge1xuICAgICAgKHRWaWV3LmNvbnRlbnRIb29rcyA/Pz0gW10pLnB1c2goaSwgbmdBZnRlckNvbnRlbnRDaGVja2VkKTtcbiAgICAgICh0Vmlldy5jb250ZW50Q2hlY2tIb29rcyA/Pz0gW10pLnB1c2goaSwgbmdBZnRlckNvbnRlbnRDaGVja2VkKTtcbiAgICB9XG4gICAgaWYgKG5nQWZ0ZXJWaWV3SW5pdCkge1xuICAgICAgKHRWaWV3LnZpZXdIb29rcyA/Pz0gW10pLnB1c2goLWksIG5nQWZ0ZXJWaWV3SW5pdCk7XG4gICAgfVxuICAgIGlmIChuZ0FmdGVyVmlld0NoZWNrZWQpIHtcbiAgICAgICh0Vmlldy52aWV3SG9va3MgPz89IFtdKS5wdXNoKGksIG5nQWZ0ZXJWaWV3Q2hlY2tlZCk7XG4gICAgICAodFZpZXcudmlld0NoZWNrSG9va3MgPz89IFtdKS5wdXNoKGksIG5nQWZ0ZXJWaWV3Q2hlY2tlZCk7XG4gICAgfVxuICAgIGlmIChuZ09uRGVzdHJveSAhPSBudWxsKSB7XG4gICAgICAodFZpZXcuZGVzdHJveUhvb2tzID8/PSBbXSkucHVzaChpLCBuZ09uRGVzdHJveSk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBleGVjdXRlQ2hlY2tIb29rcyhsVmlldywgaG9va3MsIG5vZGVJbmRleCkge1xuICBjYWxsSG9va3MobFZpZXcsIGhvb2tzLCAzLCBub2RlSW5kZXgpO1xufVxuZnVuY3Rpb24gZXhlY3V0ZUluaXRBbmRDaGVja0hvb2tzKGxWaWV3LCBob29rcywgaW5pdFBoYXNlLCBub2RlSW5kZXgpIHtcbiAgbmdEZXZNb2RlICYmIGFzc2VydE5vdEVxdWFsKGluaXRQaGFzZSwgMywgJ0luaXQgcHJlLW9yZGVyIGhvb2tzIHNob3VsZCBub3QgYmUgY2FsbGVkIG1vcmUgdGhhbiBvbmNlJyk7XG4gIGlmICgobFZpZXdbRkxBR1NdICYgMykgPT09IGluaXRQaGFzZSkge1xuICAgIGNhbGxIb29rcyhsVmlldywgaG9va3MsIGluaXRQaGFzZSwgbm9kZUluZGV4KTtcbiAgfVxufVxuZnVuY3Rpb24gaW5jcmVtZW50SW5pdFBoYXNlRmxhZ3MobFZpZXcsIGluaXRQaGFzZSkge1xuICBuZ0Rldk1vZGUgJiYgYXNzZXJ0Tm90RXF1YWwoaW5pdFBoYXNlLCAzLCAnSW5pdCBob29rcyBwaGFzZSBzaG91bGQgbm90IGJlIGluY3JlbWVudGVkIGFmdGVyIGFsbCBpbml0IGhvb2tzIGhhdmUgYmVlbiBydW4uJyk7XG4gIGxldCBmbGFncyA9IGxWaWV3W0ZMQUdTXTtcbiAgaWYgKChmbGFncyAmIDMpID09PSBpbml0UGhhc2UpIHtcbiAgICBmbGFncyAmPSAxNjM4MztcbiAgICBmbGFncyArPSAxO1xuICAgIGxWaWV3W0ZMQUdTXSA9IGZsYWdzO1xuICB9XG59XG5mdW5jdGlvbiBjYWxsSG9va3MoY3VycmVudFZpZXcsIGFyciwgaW5pdFBoYXNlLCBjdXJyZW50Tm9kZUluZGV4KSB7XG4gIG5nRGV2TW9kZSAmJiBhc3NlcnRFcXVhbChpc0luQ2hlY2tOb0NoYW5nZXNNb2RlKCksIGZhbHNlLCAnSG9va3Mgc2hvdWxkIG5ldmVyIGJlIHJ1biB3aGVuIGluIGNoZWNrIG5vIGNoYW5nZXMgbW9kZS4nKTtcbiAgY29uc3Qgc3RhcnRJbmRleCA9IGN1cnJlbnROb2RlSW5kZXggIT09IHVuZGVmaW5lZCA/IGN1cnJlbnRWaWV3W1BSRU9SREVSX0hPT0tfRkxBR1NdICYgNjU1MzUgOiAwO1xuICBjb25zdCBub2RlSW5kZXhMaW1pdCA9IGN1cnJlbnROb2RlSW5kZXggIT0gbnVsbCA/IGN1cnJlbnROb2RlSW5kZXggOiAtMTtcbiAgY29uc3QgbWF4ID0gYXJyLmxlbmd0aCAtIDE7XG4gIGxldCBsYXN0Tm9kZUluZGV4Rm91bmQgPSAwO1xuICBmb3IgKGxldCBpID0gc3RhcnRJbmRleDsgaSA8IG1heDsgaSsrKSB7XG4gICAgY29uc3QgaG9vayA9IGFycltpICsgMV07XG4gICAgaWYgKHR5cGVvZiBob29rID09PSAnbnVtYmVyJykge1xuICAgICAgbGFzdE5vZGVJbmRleEZvdW5kID0gYXJyW2ldO1xuICAgICAgaWYgKGN1cnJlbnROb2RlSW5kZXggIT0gbnVsbCAmJiBsYXN0Tm9kZUluZGV4Rm91bmQgPj0gY3VycmVudE5vZGVJbmRleCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgaXNJbml0SG9vayA9IGFycltpXSA8IDA7XG4gICAgICBpZiAoaXNJbml0SG9vaykge1xuICAgICAgICBjdXJyZW50Vmlld1tQUkVPUkRFUl9IT09LX0ZMQUdTXSArPSA2NTUzNjtcbiAgICAgIH1cbiAgICAgIGlmIChsYXN0Tm9kZUluZGV4Rm91bmQgPCBub2RlSW5kZXhMaW1pdCB8fCBub2RlSW5kZXhMaW1pdCA9PSAtMSkge1xuICAgICAgICBjYWxsSG9vayhjdXJyZW50VmlldywgaW5pdFBoYXNlLCBhcnIsIGkpO1xuICAgICAgICBjdXJyZW50Vmlld1tQUkVPUkRFUl9IT09LX0ZMQUdTXSA9IChjdXJyZW50Vmlld1tQUkVPUkRFUl9IT09LX0ZMQUdTXSAmIDQyOTQ5MDE3NjApICsgaSArIDI7XG4gICAgICB9XG4gICAgICBpKys7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBjYWxsSG9va0ludGVybmFsKGRpcmVjdGl2ZSwgaG9vaykge1xuICBwcm9maWxlcihQcm9maWxlckV2ZW50LkxpZmVjeWNsZUhvb2tTdGFydCwgZGlyZWN0aXZlLCBob29rKTtcbiAgY29uc3QgcHJldkNvbnN1bWVyID0gc2V0QWN0aXZlQ29uc3VtZXIobnVsbCk7XG4gIHRyeSB7XG4gICAgaG9vay5jYWxsKGRpcmVjdGl2ZSk7XG4gIH0gZmluYWxseSB7XG4gICAgc2V0QWN0aXZlQ29uc3VtZXIocHJldkNvbnN1bWVyKTtcbiAgICBwcm9maWxlcihQcm9maWxlckV2ZW50LkxpZmVjeWNsZUhvb2tFbmQsIGRpcmVjdGl2ZSwgaG9vayk7XG4gIH1cbn1cbmZ1bmN0aW9uIGNhbGxIb29rKGN1cnJlbnRWaWV3LCBpbml0UGhhc2UsIGFyciwgaSkge1xuICBjb25zdCBpc0luaXRIb29rID0gYXJyW2ldIDwgMDtcbiAgY29uc3QgaG9vayA9IGFycltpICsgMV07XG4gIGNvbnN0IGRpcmVjdGl2ZUluZGV4ID0gaXNJbml0SG9vayA/IC1hcnJbaV0gOiBhcnJbaV07XG4gIGNvbnN0IGRpcmVjdGl2ZSA9IGN1cnJlbnRWaWV3W2RpcmVjdGl2ZUluZGV4XTtcbiAgaWYgKGlzSW5pdEhvb2spIHtcbiAgICBjb25zdCBpbmRleFdpdGhpbnRJbml0UGhhc2UgPSBjdXJyZW50Vmlld1tGTEFHU10gPj4gMTQ7XG4gICAgaWYgKGluZGV4V2l0aGludEluaXRQaGFzZSA8IGN1cnJlbnRWaWV3W1BSRU9SREVSX0hPT0tfRkxBR1NdID4+IDE2ICYmIChjdXJyZW50Vmlld1tGTEFHU10gJiAzKSA9PT0gaW5pdFBoYXNlKSB7XG4gICAgICBjdXJyZW50Vmlld1tGTEFHU10gKz0gMTYzODQ7XG4gICAgICBjYWxsSG9va0ludGVybmFsKGRpcmVjdGl2ZSwgaG9vayk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGNhbGxIb29rSW50ZXJuYWwoZGlyZWN0aXZlLCBob29rKTtcbiAgfVxufVxuY29uc3QgTk9fUEFSRU5UX0lOSkVDVE9SID0gLTE7XG5jbGFzcyBOb2RlSW5qZWN0b3JGYWN0b3J5IHtcbiAgZmFjdG9yeTtcbiAgbmFtZTtcbiAgaW5qZWN0SW1wbDtcbiAgcmVzb2x2aW5nID0gZmFsc2U7XG4gIGNhblNlZVZpZXdQcm92aWRlcnM7XG4gIG11bHRpO1xuICBjb21wb25lbnRQcm92aWRlcnM7XG4gIGluZGV4O1xuICBwcm92aWRlckZhY3Rvcnk7XG4gIGNvbnN0cnVjdG9yKGZhY3RvcnksIGlzVmlld1Byb3ZpZGVyLCBpbmplY3RJbXBsZW1lbnRhdGlvbiwgbmFtZSkge1xuICAgIHRoaXMuZmFjdG9yeSA9IGZhY3Rvcnk7XG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICBuZ0Rldk1vZGUgJiYgYXNzZXJ0RGVmaW5lZChmYWN0b3J5LCAnRmFjdG9yeSBub3Qgc3BlY2lmaWVkJyk7XG4gICAgbmdEZXZNb2RlICYmIGFzc2VydEVxdWFsKHR5cGVvZiBmYWN0b3J5LCAnZnVuY3Rpb24nLCAnRXhwZWN0ZWQgZmFjdG9yeSBmdW5jdGlvbi4nKTtcbiAgICB0aGlzLmNhblNlZVZpZXdQcm92aWRlcnMgPSBpc1ZpZXdQcm92aWRlcjtcbiAgICB0aGlzLmluamVjdEltcGwgPSBpbmplY3RJbXBsZW1lbnRhdGlvbjtcbiAgfVxufVxuZnVuY3Rpb24gdG9UTm9kZVR5cGVBc1N0cmluZyh0Tm9kZVR5cGUpIHtcbiAgbGV0IHRleHQgPSAnJztcbiAgdE5vZGVUeXBlICYgMSAmJiAodGV4dCArPSAnfFRleHQnKTtcbiAgdE5vZGVUeXBlICYgMiAmJiAodGV4dCArPSAnfEVsZW1lbnQnKTtcbiAgdE5vZGVUeXBlICYgNCAmJiAodGV4dCArPSAnfENvbnRhaW5lcicpO1xuICB0Tm9kZVR5cGUgJiA4ICYmICh0ZXh0ICs9ICd8RWxlbWVudENvbnRhaW5lcicpO1xuICB0Tm9kZVR5cGUgJiAxNiAmJiAodGV4dCArPSAnfFByb2plY3Rpb24nKTtcbiAgdE5vZGVUeXBlICYgMzIgJiYgKHRleHQgKz0gJ3xJY3VDb250YWluZXInKTtcbiAgdE5vZGVUeXBlICYgNjQgJiYgKHRleHQgKz0gJ3xQbGFjZWhvbGRlcicpO1xuICB0Tm9kZVR5cGUgJiAxMjggJiYgKHRleHQgKz0gJ3xMZXREZWNsYXJhdGlvbicpO1xuICByZXR1cm4gdGV4dC5sZW5ndGggPiAwID8gdGV4dC5zdWJzdHJpbmcoMSkgOiB0ZXh0O1xufVxuZnVuY3Rpb24gaXNUTm9kZVNoYXBlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgKHZhbHVlLmluc2VydEJlZm9yZUluZGV4ID09PSBudWxsIHx8IHR5cGVvZiB2YWx1ZS5pbnNlcnRCZWZvcmVJbmRleCA9PT0gJ251bWJlcicgfHwgQXJyYXkuaXNBcnJheSh2YWx1ZS5pbnNlcnRCZWZvcmVJbmRleCkpO1xufVxuZnVuY3Rpb24gaXNMZXREZWNsYXJhdGlvbih0Tm9kZSkge1xuICByZXR1cm4gISEodE5vZGUudHlwZSAmIDEyOCk7XG59XG5mdW5jdGlvbiBoYXNDbGFzc0lucHV0KHROb2RlKSB7XG4gIHJldHVybiAodE5vZGUuZmxhZ3MgJiA4KSAhPT0gMDtcbn1cbmZ1bmN0aW9uIGhhc1N0eWxlSW5wdXQodE5vZGUpIHtcbiAgcmV0dXJuICh0Tm9kZS5mbGFncyAmIDE2KSAhPT0gMDtcbn1cbmZ1bmN0aW9uIGFzc2VydFROb2RlVHlwZSh0Tm9kZSwgZXhwZWN0ZWRUeXBlcywgbWVzc2FnZSkge1xuICBhc3NlcnREZWZpbmVkKHROb2RlLCAnc2hvdWxkIGJlIGNhbGxlZCB3aXRoIGEgVE5vZGUnKTtcbiAgaWYgKCh0Tm9kZS50eXBlICYgZXhwZWN0ZWRUeXBlcykgPT09IDApIHtcbiAgICB0aHJvd0Vycm9yKG1lc3NhZ2UgfHwgYEV4cGVjdGVkIFske3RvVE5vZGVUeXBlQXNTdHJpbmcoZXhwZWN0ZWRUeXBlcyl9XSBidXQgZ290ICR7dG9UTm9kZVR5cGVBc1N0cmluZyh0Tm9kZS50eXBlKX0uYCk7XG4gIH1cbn1cbmZ1bmN0aW9uIGFzc2VydFB1cmVUTm9kZVR5cGUodHlwZSkge1xuICBpZiAoISh0eXBlID09PSAyIHx8IHR5cGUgPT09IDEgfHwgdHlwZSA9PT0gNCB8fCB0eXBlID09PSA4IHx8IHR5cGUgPT09IDMyIHx8IHR5cGUgPT09IDE2IHx8IHR5cGUgPT09IDY0IHx8IHR5cGUgPT09IDEyOCkpIHtcbiAgICB0aHJvd0Vycm9yKGBFeHBlY3RlZCBUTm9kZVR5cGUgdG8gaGF2ZSBvbmx5IGEgc2luZ2xlIHR5cGUgc2VsZWN0ZWQsIGJ1dCBnb3QgJHt0b1ROb2RlVHlwZUFzU3RyaW5nKHR5cGUpfS5gKTtcbiAgfVxufVxuZnVuY3Rpb24gc2V0VXBBdHRyaWJ1dGVzKHJlbmRlcmVyLCBuYXRpdmUsIGF0dHJzKSB7XG4gIGxldCBpID0gMDtcbiAgd2hpbGUgKGkgPCBhdHRycy5sZW5ndGgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IGF0dHJzW2ldO1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICBpZiAodmFsdWUgIT09IDApIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBpKys7XG4gICAgICBjb25zdCBuYW1lc3BhY2VVUkkgPSBhdHRyc1tpKytdO1xuICAgICAgY29uc3QgYXR0ck5hbWUgPSBhdHRyc1tpKytdO1xuICAgICAgY29uc3QgYXR0clZhbCA9IGF0dHJzW2krK107XG4gICAgICByZW5kZXJlci5zZXRBdHRyaWJ1dGUobmF0aXZlLCBhdHRyTmFtZSwgYXR0clZhbCwgbmFtZXNwYWNlVVJJKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgYXR0ck5hbWUgPSB2YWx1ZTtcbiAgICAgIGNvbnN0IGF0dHJWYWwgPSBhdHRyc1srK2ldO1xuICAgICAgaWYgKGlzQW5pbWF0aW9uUHJvcChhdHRyTmFtZSkpIHtcbiAgICAgICAgcmVuZGVyZXIuc2V0UHJvcGVydHkobmF0aXZlLCBhdHRyTmFtZSwgYXR0clZhbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZW5kZXJlci5zZXRBdHRyaWJ1dGUobmF0aXZlLCBhdHRyTmFtZSwgYXR0clZhbCk7XG4gICAgICB9XG4gICAgICBpKys7XG4gICAgfVxuICB9XG4gIHJldHVybiBpO1xufVxuZnVuY3Rpb24gaXNOYW1lT25seUF0dHJpYnV0ZU1hcmtlcihtYXJrZXIpIHtcbiAgcmV0dXJuIG1hcmtlciA9PT0gMyB8fCBtYXJrZXIgPT09IDQgfHwgbWFya2VyID09PSA2O1xufVxuZnVuY3Rpb24gaXNBbmltYXRpb25Qcm9wKG5hbWUpIHtcbiAgcmV0dXJuIG5hbWUuY2hhckNvZGVBdCgwKSA9PT0gNjQ7XG59XG5mdW5jdGlvbiBtZXJnZUhvc3RBdHRycyhkc3QsIHNyYykge1xuICBpZiAoc3JjID09PSBudWxsIHx8IHNyYy5sZW5ndGggPT09IDApIDtlbHNlIGlmIChkc3QgPT09IG51bGwgfHwgZHN0Lmxlbmd0aCA9PT0gMCkge1xuICAgIGRzdCA9IHNyYy5zbGljZSgpO1xuICB9IGVsc2Uge1xuICAgIGxldCBzcmNNYXJrZXIgPSAtMTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNyYy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgaXRlbSA9IHNyY1tpXTtcbiAgICAgIGlmICh0eXBlb2YgaXRlbSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgc3JjTWFya2VyID0gaXRlbTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChzcmNNYXJrZXIgPT09IDApIDtlbHNlIGlmIChzcmNNYXJrZXIgPT09IC0xIHx8IHNyY01hcmtlciA9PT0gMikge1xuICAgICAgICAgIG1lcmdlSG9zdEF0dHJpYnV0ZShkc3QsIHNyY01hcmtlciwgaXRlbSwgbnVsbCwgc3JjWysraV0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG1lcmdlSG9zdEF0dHJpYnV0ZShkc3QsIHNyY01hcmtlciwgaXRlbSwgbnVsbCwgbnVsbCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGRzdDtcbn1cbmZ1bmN0aW9uIG1lcmdlSG9zdEF0dHJpYnV0ZShkc3QsIG1hcmtlciwga2V5MSwga2V5MiwgdmFsdWUpIHtcbiAgbGV0IGkgPSAwO1xuICBsZXQgbWFya2VySW5zZXJ0UG9zaXRpb24gPSBkc3QubGVuZ3RoO1xuICBpZiAobWFya2VyID09PSAtMSkge1xuICAgIG1hcmtlckluc2VydFBvc2l0aW9uID0gLTE7XG4gIH0gZWxzZSB7XG4gICAgd2hpbGUgKGkgPCBkc3QubGVuZ3RoKSB7XG4gICAgICBjb25zdCBkc3RWYWx1ZSA9IGRzdFtpKytdO1xuICAgICAgaWYgKHR5cGVvZiBkc3RWYWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgaWYgKGRzdFZhbHVlID09PSBtYXJrZXIpIHtcbiAgICAgICAgICBtYXJrZXJJbnNlcnRQb3NpdGlvbiA9IC0xO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9IGVsc2UgaWYgKGRzdFZhbHVlID4gbWFya2VyKSB7XG4gICAgICAgICAgbWFya2VySW5zZXJ0UG9zaXRpb24gPSBpIC0gMTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICB3aGlsZSAoaSA8IGRzdC5sZW5ndGgpIHtcbiAgICBjb25zdCBpdGVtID0gZHN0W2ldO1xuICAgIGlmICh0eXBlb2YgaXRlbSA9PT0gJ251bWJlcicpIHtcbiAgICAgIGJyZWFrO1xuICAgIH0gZWxzZSBpZiAoaXRlbSA9PT0ga2V5MSkge1xuICAgICAge1xuICAgICAgICBpZiAodmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICBkc3RbaSArIDFdID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICBpKys7XG4gICAgaWYgKHZhbHVlICE9PSBudWxsKSBpKys7XG4gIH1cbiAgaWYgKG1hcmtlckluc2VydFBvc2l0aW9uICE9PSAtMSkge1xuICAgIGRzdC5zcGxpY2UobWFya2VySW5zZXJ0UG9zaXRpb24sIDAsIG1hcmtlcik7XG4gICAgaSA9IG1hcmtlckluc2VydFBvc2l0aW9uICsgMTtcbiAgfVxuICBkc3Quc3BsaWNlKGkrKywgMCwga2V5MSk7XG4gIGlmICh2YWx1ZSAhPT0gbnVsbCkge1xuICAgIGRzdC5zcGxpY2UoaSsrLCAwLCB2YWx1ZSk7XG4gIH1cbn1cbmZ1bmN0aW9uIGhhc1BhcmVudEluamVjdG9yKHBhcmVudExvY2F0aW9uKSB7XG4gIHJldHVybiBwYXJlbnRMb2NhdGlvbiAhPT0gTk9fUEFSRU5UX0lOSkVDVE9SO1xufVxuZnVuY3Rpb24gZ2V0UGFyZW50SW5qZWN0b3JJbmRleChwYXJlbnRMb2NhdGlvbikge1xuICBpZiAobmdEZXZNb2RlKSB7XG4gICAgYXNzZXJ0TnVtYmVyKHBhcmVudExvY2F0aW9uLCAnTnVtYmVyIGV4cGVjdGVkJyk7XG4gICAgYXNzZXJ0Tm90RXF1YWwocGFyZW50TG9jYXRpb24sIC0xLCAnTm90IGEgdmFsaWQgc3RhdGUuJyk7XG4gICAgY29uc3QgcGFyZW50SW5qZWN0b3JJbmRleCA9IHBhcmVudExvY2F0aW9uICYgMzI3Njc7XG4gICAgYXNzZXJ0R3JlYXRlclRoYW4ocGFyZW50SW5qZWN0b3JJbmRleCwgSEVBREVSX09GRlNFVCwgJ1BhcmVudCBpbmplY3RvciBtdXN0IGJlIHBvaW50aW5nIHBhc3QgSEVBREVSX09GRlNFVC4nKTtcbiAgfVxuICByZXR1cm4gcGFyZW50TG9jYXRpb24gJiAzMjc2Nztcbn1cbmZ1bmN0aW9uIGdldFBhcmVudEluamVjdG9yVmlld09mZnNldChwYXJlbnRMb2NhdGlvbikge1xuICByZXR1cm4gcGFyZW50TG9jYXRpb24gPj4gMTY7XG59XG5mdW5jdGlvbiBnZXRQYXJlbnRJbmplY3RvclZpZXcobG9jYXRpb24sIHN0YXJ0Vmlldykge1xuICBsZXQgdmlld09mZnNldCA9IGdldFBhcmVudEluamVjdG9yVmlld09mZnNldChsb2NhdGlvbik7XG4gIGxldCBwYXJlbnRWaWV3ID0gc3RhcnRWaWV3O1xuICB3aGlsZSAodmlld09mZnNldCA+IDApIHtcbiAgICBwYXJlbnRWaWV3ID0gcGFyZW50Vmlld1tERUNMQVJBVElPTl9WSUVXXTtcbiAgICB2aWV3T2Zmc2V0LS07XG4gIH1cbiAgcmV0dXJuIHBhcmVudFZpZXc7XG59XG5sZXQgaW5jbHVkZVZpZXdQcm92aWRlcnMgPSB0cnVlO1xuZnVuY3Rpb24gc2V0SW5jbHVkZVZpZXdQcm92aWRlcnModikge1xuICBjb25zdCBvbGRWYWx1ZSA9IGluY2x1ZGVWaWV3UHJvdmlkZXJzO1xuICBpbmNsdWRlVmlld1Byb3ZpZGVycyA9IHY7XG4gIHJldHVybiBvbGRWYWx1ZTtcbn1cbmNvbnN0IEJMT09NX1NJWkUgPSAyNTY7XG5jb25zdCBCTE9PTV9NQVNLID0gQkxPT01fU0laRSAtIDE7XG5jb25zdCBCTE9PTV9CVUNLRVRfQklUUyA9IDU7XG5sZXQgbmV4dE5nRWxlbWVudElkID0gMDtcbmNvbnN0IE5PVF9GT1VORCA9IHt9O1xuZnVuY3Rpb24gYmxvb21BZGQoaW5qZWN0b3JJbmRleCwgdFZpZXcsIHR5cGUpIHtcbiAgbmdEZXZNb2RlICYmIGFzc2VydEVxdWFsKHRWaWV3LmZpcnN0Q3JlYXRlUGFzcywgdHJ1ZSwgJ2V4cGVjdGVkIGZpcnN0Q3JlYXRlUGFzcyB0byBiZSB0cnVlJyk7XG4gIGxldCBpZDtcbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJykge1xuICAgIGlkID0gdHlwZS5jaGFyQ29kZUF0KDApIHx8IDA7XG4gIH0gZWxzZSBpZiAodHlwZS5oYXNPd25Qcm9wZXJ0eShOR19FTEVNRU5UX0lEKSkge1xuICAgIGlkID0gdHlwZVtOR19FTEVNRU5UX0lEXTtcbiAgfVxuICBpZiAoaWQgPT0gbnVsbCkge1xuICAgIGlkID0gdHlwZVtOR19FTEVNRU5UX0lEXSA9IG5leHROZ0VsZW1lbnRJZCsrO1xuICB9XG4gIGNvbnN0IGJsb29tSGFzaCA9IGlkICYgQkxPT01fTUFTSztcbiAgY29uc3QgbWFzayA9IDEgPDwgYmxvb21IYXNoO1xuICB0Vmlldy5kYXRhW2luamVjdG9ySW5kZXggKyAoYmxvb21IYXNoID4+IEJMT09NX0JVQ0tFVF9CSVRTKV0gfD0gbWFzaztcbn1cbmZ1bmN0aW9uIGdldE9yQ3JlYXRlTm9kZUluamVjdG9yRm9yTm9kZSh0Tm9kZSwgbFZpZXcpIHtcbiAgY29uc3QgZXhpc3RpbmdJbmplY3RvckluZGV4ID0gZ2V0SW5qZWN0b3JJbmRleCh0Tm9kZSwgbFZpZXcpO1xuICBpZiAoZXhpc3RpbmdJbmplY3RvckluZGV4ICE9PSAtMSkge1xuICAgIHJldHVybiBleGlzdGluZ0luamVjdG9ySW5kZXg7XG4gIH1cbiAgY29uc3QgdFZpZXcgPSBsVmlld1tUVklFV107XG4gIGlmICh0Vmlldy5maXJzdENyZWF0ZVBhc3MpIHtcbiAgICB0Tm9kZS5pbmplY3RvckluZGV4ID0gbFZpZXcubGVuZ3RoO1xuICAgIGluc2VydEJsb29tKHRWaWV3LmRhdGEsIHROb2RlKTtcbiAgICBpbnNlcnRCbG9vbShsVmlldywgbnVsbCk7XG4gICAgaW5zZXJ0Qmxvb20odFZpZXcuYmx1ZXByaW50LCBudWxsKTtcbiAgfVxuICBjb25zdCBwYXJlbnRMb2MgPSBnZXRQYXJlbnRJbmplY3RvckxvY2F0aW9uKHROb2RlLCBsVmlldyk7XG4gIGNvbnN0IGluamVjdG9ySW5kZXggPSB0Tm9kZS5pbmplY3RvckluZGV4O1xuICBpZiAoaGFzUGFyZW50SW5qZWN0b3IocGFyZW50TG9jKSkge1xuICAgIGNvbnN0IHBhcmVudEluZGV4ID0gZ2V0UGFyZW50SW5qZWN0b3JJbmRleChwYXJlbnRMb2MpO1xuICAgIGNvbnN0IHBhcmVudExWaWV3ID0gZ2V0UGFyZW50SW5qZWN0b3JWaWV3KHBhcmVudExvYywgbFZpZXcpO1xuICAgIGNvbnN0IHBhcmVudERhdGEgPSBwYXJlbnRMVmlld1tUVklFV10uZGF0YTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDg7IGkrKykge1xuICAgICAgbFZpZXdbaW5qZWN0b3JJbmRleCArIGldID0gcGFyZW50TFZpZXdbcGFyZW50SW5kZXggKyBpXSB8IHBhcmVudERhdGFbcGFyZW50SW5kZXggKyBpXTtcbiAgICB9XG4gIH1cbiAgbFZpZXdbaW5qZWN0b3JJbmRleCArIDhdID0gcGFyZW50TG9jO1xuICByZXR1cm4gaW5qZWN0b3JJbmRleDtcbn1cbmZ1bmN0aW9uIGluc2VydEJsb29tKGFyciwgZm9vdGVyKSB7XG4gIGFyci5wdXNoKDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIGZvb3Rlcik7XG59XG5mdW5jdGlvbiBnZXRJbmplY3RvckluZGV4KHROb2RlLCBsVmlldykge1xuICBpZiAodE5vZGUuaW5qZWN0b3JJbmRleCA9PT0gLTEgfHwgdE5vZGUucGFyZW50ICYmIHROb2RlLnBhcmVudC5pbmplY3RvckluZGV4ID09PSB0Tm9kZS5pbmplY3RvckluZGV4IHx8IGxWaWV3W3ROb2RlLmluamVjdG9ySW5kZXggKyA4XSA9PT0gbnVsbCkge1xuICAgIHJldHVybiAtMTtcbiAgfSBlbHNlIHtcbiAgICBuZ0Rldk1vZGUgJiYgYXNzZXJ0SW5kZXhJblJhbmdlKGxWaWV3LCB0Tm9kZS5pbmplY3RvckluZGV4KTtcbiAgICByZXR1cm4gdE5vZGUuaW5qZWN0b3JJbmRleDtcbiAgfVxufVxuZnVuY3Rpb24gZ2V0UGFyZW50SW5qZWN0b3JMb2NhdGlvbih0Tm9kZSwgbFZpZXcpIHtcbiAgaWYgKHROb2RlLnBhcmVudCAmJiB0Tm9kZS5wYXJlbnQuaW5qZWN0b3JJbmRleCAhPT0gLTEpIHtcbiAgICByZXR1cm4gdE5vZGUucGFyZW50LmluamVjdG9ySW5kZXg7XG4gIH1cbiAgbGV0IGRlY2xhcmF0aW9uVmlld09mZnNldCA9IDA7XG4gIGxldCBwYXJlbnRUTm9kZSA9IG51bGw7XG4gIGxldCBsVmlld0N1cnNvciA9IGxWaWV3O1xuICB3aGlsZSAobFZpZXdDdXJzb3IgIT09IG51bGwpIHtcbiAgICBwYXJlbnRUTm9kZSA9IGdldFROb2RlRnJvbUxWaWV3KGxWaWV3Q3Vyc29yKTtcbiAgICBpZiAocGFyZW50VE5vZGUgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBOT19QQVJFTlRfSU5KRUNUT1I7XG4gICAgfVxuICAgIG5nRGV2TW9kZSAmJiBwYXJlbnRUTm9kZSAmJiBhc3NlcnRUTm9kZUZvckxWaWV3KHBhcmVudFROb2RlLCBsVmlld0N1cnNvcltERUNMQVJBVElPTl9WSUVXXSk7XG4gICAgZGVjbGFyYXRpb25WaWV3T2Zmc2V0Kys7XG4gICAgbFZpZXdDdXJzb3IgPSBsVmlld0N1cnNvcltERUNMQVJBVElPTl9WSUVXXTtcbiAgICBpZiAocGFyZW50VE5vZGUuaW5qZWN0b3JJbmRleCAhPT0gLTEpIHtcbiAgICAgIHJldHVybiBwYXJlbnRUTm9kZS5pbmplY3RvckluZGV4IHwgZGVjbGFyYXRpb25WaWV3T2Zmc2V0IDw8IDE2O1xuICAgIH1cbiAgfVxuICByZXR1cm4gTk9fUEFSRU5UX0lOSkVDVE9SO1xufVxuZnVuY3Rpb24gZGlQdWJsaWNJbkluamVjdG9yKGluamVjdG9ySW5kZXgsIHRWaWV3LCB0b2tlbikge1xuICBibG9vbUFkZChpbmplY3RvckluZGV4LCB0VmlldywgdG9rZW4pO1xufVxuZnVuY3Rpb24gaW5qZWN0QXR0cmlidXRlSW1wbCh0Tm9kZSwgYXR0ck5hbWVUb0luamVjdCkge1xuICBuZ0Rldk1vZGUgJiYgYXNzZXJ0VE5vZGVUeXBlKHROb2RlLCAxMiB8IDMpO1xuICBuZ0Rldk1vZGUgJiYgYXNzZXJ0RGVmaW5lZCh0Tm9kZSwgJ2V4cGVjdGluZyB0Tm9kZScpO1xuICBpZiAoYXR0ck5hbWVUb0luamVjdCA9PT0gJ2NsYXNzJykge1xuICAgIHJldHVybiB0Tm9kZS5jbGFzc2VzO1xuICB9XG4gIGlmIChhdHRyTmFtZVRvSW5qZWN0ID09PSAnc3R5bGUnKSB7XG4gICAgcmV0dXJuIHROb2RlLnN0eWxlcztcbiAgfVxuICBjb25zdCBhdHRycyA9IHROb2RlLmF0dHJzO1xuICBpZiAoYXR0cnMpIHtcbiAgICBjb25zdCBhdHRyc0xlbmd0aCA9IGF0dHJzLmxlbmd0aDtcbiAgICBsZXQgaSA9IDA7XG4gICAgd2hpbGUgKGkgPCBhdHRyc0xlbmd0aCkge1xuICAgICAgY29uc3QgdmFsdWUgPSBhdHRyc1tpXTtcbiAgICAgIGlmIChpc05hbWVPbmx5QXR0cmlidXRlTWFya2VyKHZhbHVlKSkgYnJlYWs7XG4gICAgICBpZiAodmFsdWUgPT09IDApIHtcbiAgICAgICAgaSA9IGkgKyAyO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICAgIGkrKztcbiAgICAgICAgd2hpbGUgKGkgPCBhdHRyc0xlbmd0aCAmJiB0eXBlb2YgYXR0cnNbaV0gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgaSsrO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHZhbHVlID09PSBhdHRyTmFtZVRvSW5qZWN0KSB7XG4gICAgICAgIHJldHVybiBhdHRyc1tpICsgMV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpID0gaSArIDI7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsO1xufVxuZnVuY3Rpb24gbm90Rm91bmRWYWx1ZU9yVGhyb3cobm90Rm91bmRWYWx1ZSwgdG9rZW4sIGZsYWdzKSB7XG4gIGlmIChmbGFncyAmIDggfHwgbm90Rm91bmRWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIG5vdEZvdW5kVmFsdWU7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3dQcm92aWRlck5vdEZvdW5kRXJyb3IodG9rZW4sICdOb2RlSW5qZWN0b3InKTtcbiAgfVxufVxuZnVuY3Rpb24gbG9va3VwVG9rZW5Vc2luZ01vZHVsZUluamVjdG9yKGxWaWV3LCB0b2tlbiwgZmxhZ3MsIG5vdEZvdW5kVmFsdWUpIHtcbiAgaWYgKGZsYWdzICYgOCAmJiBub3RGb3VuZFZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICBub3RGb3VuZFZhbHVlID0gbnVsbDtcbiAgfVxuICBpZiAoKGZsYWdzICYgKDIgfCAxKSkgPT09IDApIHtcbiAgICBjb25zdCBtb2R1bGVJbmplY3RvciA9IGxWaWV3W0lOSkVDVE9SXTtcbiAgICBjb25zdCBwcmV2aW91c0luamVjdEltcGxlbWVudGF0aW9uID0gc2V0SW5qZWN0SW1wbGVtZW50YXRpb24odW5kZWZpbmVkKTtcbiAgICB0cnkge1xuICAgICAgaWYgKG1vZHVsZUluamVjdG9yKSB7XG4gICAgICAgIHJldHVybiBtb2R1bGVJbmplY3Rvci5nZXQodG9rZW4sIG5vdEZvdW5kVmFsdWUsIGZsYWdzICYgOCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gaW5qZWN0Um9vdExpbXBNb2RlKHRva2VuLCBub3RGb3VuZFZhbHVlLCBmbGFncyAmIDgpO1xuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICBzZXRJbmplY3RJbXBsZW1lbnRhdGlvbihwcmV2aW91c0luamVjdEltcGxlbWVudGF0aW9uKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5vdEZvdW5kVmFsdWVPclRocm93KG5vdEZvdW5kVmFsdWUsIHRva2VuLCBmbGFncyk7XG59XG5mdW5jdGlvbiBnZXRPckNyZWF0ZUluamVjdGFibGUodE5vZGUsIGxWaWV3LCB0b2tlbiwgZmxhZ3MgPSAwLCBub3RGb3VuZFZhbHVlKSB7XG4gIGlmICh0Tm9kZSAhPT0gbnVsbCkge1xuICAgIGlmIChsVmlld1tGTEFHU10gJiAyMDQ4ICYmICEoZmxhZ3MgJiAyKSkge1xuICAgICAgY29uc3QgZW1iZWRkZWRJbmplY3RvclZhbHVlID0gbG9va3VwVG9rZW5Vc2luZ0VtYmVkZGVkSW5qZWN0b3IodE5vZGUsIGxWaWV3LCB0b2tlbiwgZmxhZ3MsIE5PVF9GT1VORCk7XG4gICAgICBpZiAoZW1iZWRkZWRJbmplY3RvclZhbHVlICE9PSBOT1RfRk9VTkQpIHtcbiAgICAgICAgcmV0dXJuIGVtYmVkZGVkSW5qZWN0b3JWYWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgdmFsdWUgPSBsb29rdXBUb2tlblVzaW5nTm9kZUluamVjdG9yKHROb2RlLCBsVmlldywgdG9rZW4sIGZsYWdzLCBOT1RfRk9VTkQpO1xuICAgIGlmICh2YWx1ZSAhPT0gTk9UX0ZPVU5EKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBsb29rdXBUb2tlblVzaW5nTW9kdWxlSW5qZWN0b3IobFZpZXcsIHRva2VuLCBmbGFncywgbm90Rm91bmRWYWx1ZSk7XG59XG5mdW5jdGlvbiBsb29rdXBUb2tlblVzaW5nTm9kZUluamVjdG9yKHROb2RlLCBsVmlldywgdG9rZW4sIGZsYWdzLCBub3RGb3VuZFZhbHVlKSB7XG4gIGNvbnN0IGJsb29tSGFzaCA9IGJsb29tSGFzaEJpdE9yRmFjdG9yeSh0b2tlbik7XG4gIGlmICh0eXBlb2YgYmxvb21IYXNoID09PSAnZnVuY3Rpb24nKSB7XG4gICAgaWYgKCFlbnRlckRJKGxWaWV3LCB0Tm9kZSwgZmxhZ3MpKSB7XG4gICAgICByZXR1cm4gZmxhZ3MgJiAxID8gbm90Rm91bmRWYWx1ZU9yVGhyb3cobm90Rm91bmRWYWx1ZSwgdG9rZW4sIGZsYWdzKSA6IGxvb2t1cFRva2VuVXNpbmdNb2R1bGVJbmplY3RvcihsVmlldywgdG9rZW4sIGZsYWdzLCBub3RGb3VuZFZhbHVlKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGxldCB2YWx1ZTtcbiAgICAgIGlmIChuZ0Rldk1vZGUpIHtcbiAgICAgICAgcnVuSW5JbmplY3RvclByb2ZpbGVyQ29udGV4dChuZXcgTm9kZUluamVjdG9yKGdldEN1cnJlbnRUTm9kZSgpLCBnZXRMVmlldygpKSwgdG9rZW4sICgpID0+IHtcbiAgICAgICAgICBlbWl0SW5qZWN0b3JUb0NyZWF0ZUluc3RhbmNlRXZlbnQodG9rZW4pO1xuICAgICAgICAgIHZhbHVlID0gYmxvb21IYXNoKGZsYWdzKTtcbiAgICAgICAgICBlbWl0SW5zdGFuY2VDcmVhdGVkQnlJbmplY3RvckV2ZW50KHZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWx1ZSA9IGJsb29tSGFzaChmbGFncyk7XG4gICAgICB9XG4gICAgICBpZiAodmFsdWUgPT0gbnVsbCAmJiAhKGZsYWdzICYgOCkpIHtcbiAgICAgICAgdGhyb3dQcm92aWRlck5vdEZvdW5kRXJyb3IodG9rZW4pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICBsZWF2ZURJKCk7XG4gICAgfVxuICB9IGVsc2UgaWYgKHR5cGVvZiBibG9vbUhhc2ggPT09ICdudW1iZXInKSB7XG4gICAgbGV0IHByZXZpb3VzVFZpZXcgPSBudWxsO1xuICAgIGxldCBpbmplY3RvckluZGV4ID0gZ2V0SW5qZWN0b3JJbmRleCh0Tm9kZSwgbFZpZXcpO1xuICAgIGxldCBwYXJlbnRMb2NhdGlvbiA9IE5PX1BBUkVOVF9JTkpFQ1RPUjtcbiAgICBsZXQgaG9zdFRFbGVtZW50Tm9kZSA9IGZsYWdzICYgMSA/IGxWaWV3W0RFQ0xBUkFUSU9OX0NPTVBPTkVOVF9WSUVXXVtUX0hPU1RdIDogbnVsbDtcbiAgICBpZiAoaW5qZWN0b3JJbmRleCA9PT0gLTEgfHwgZmxhZ3MgJiA0KSB7XG4gICAgICBwYXJlbnRMb2NhdGlvbiA9IGluamVjdG9ySW5kZXggPT09IC0xID8gZ2V0UGFyZW50SW5qZWN0b3JMb2NhdGlvbih0Tm9kZSwgbFZpZXcpIDogbFZpZXdbaW5qZWN0b3JJbmRleCArIDhdO1xuICAgICAgaWYgKHBhcmVudExvY2F0aW9uID09PSBOT19QQVJFTlRfSU5KRUNUT1IgfHwgIXNob3VsZFNlYXJjaFBhcmVudChmbGFncywgZmFsc2UpKSB7XG4gICAgICAgIGluamVjdG9ySW5kZXggPSAtMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHByZXZpb3VzVFZpZXcgPSBsVmlld1tUVklFV107XG4gICAgICAgIGluamVjdG9ySW5kZXggPSBnZXRQYXJlbnRJbmplY3RvckluZGV4KHBhcmVudExvY2F0aW9uKTtcbiAgICAgICAgbFZpZXcgPSBnZXRQYXJlbnRJbmplY3RvclZpZXcocGFyZW50TG9jYXRpb24sIGxWaWV3KTtcbiAgICAgIH1cbiAgICB9XG4gICAgd2hpbGUgKGluamVjdG9ySW5kZXggIT09IC0xKSB7XG4gICAgICBuZ0Rldk1vZGUgJiYgYXNzZXJ0Tm9kZUluamVjdG9yKGxWaWV3LCBpbmplY3RvckluZGV4KTtcbiAgICAgIGNvbnN0IHRWaWV3ID0gbFZpZXdbVFZJRVddO1xuICAgICAgbmdEZXZNb2RlICYmIGFzc2VydFROb2RlRm9yTFZpZXcodFZpZXcuZGF0YVtpbmplY3RvckluZGV4ICsgOF0sIGxWaWV3KTtcbiAgICAgIGlmIChibG9vbUhhc1Rva2VuKGJsb29tSGFzaCwgaW5qZWN0b3JJbmRleCwgdFZpZXcuZGF0YSkpIHtcbiAgICAgICAgY29uc3QgaW5zdGFuY2UgPSBzZWFyY2hUb2tlbnNPbkluamVjdG9yKGluamVjdG9ySW5kZXgsIGxWaWV3LCB0b2tlbiwgcHJldmlvdXNUVmlldywgZmxhZ3MsIGhvc3RURWxlbWVudE5vZGUpO1xuICAgICAgICBpZiAoaW5zdGFuY2UgIT09IE5PVF9GT1VORCkge1xuICAgICAgICAgIHJldHVybiBpbnN0YW5jZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcGFyZW50TG9jYXRpb24gPSBsVmlld1tpbmplY3RvckluZGV4ICsgOF07XG4gICAgICBpZiAocGFyZW50TG9jYXRpb24gIT09IE5PX1BBUkVOVF9JTkpFQ1RPUiAmJiBzaG91bGRTZWFyY2hQYXJlbnQoZmxhZ3MsIGxWaWV3W1RWSUVXXS5kYXRhW2luamVjdG9ySW5kZXggKyA4XSA9PT0gaG9zdFRFbGVtZW50Tm9kZSkgJiYgYmxvb21IYXNUb2tlbihibG9vbUhhc2gsIGluamVjdG9ySW5kZXgsIGxWaWV3KSkge1xuICAgICAgICBwcmV2aW91c1RWaWV3ID0gdFZpZXc7XG4gICAgICAgIGluamVjdG9ySW5kZXggPSBnZXRQYXJlbnRJbmplY3RvckluZGV4KHBhcmVudExvY2F0aW9uKTtcbiAgICAgICAgbFZpZXcgPSBnZXRQYXJlbnRJbmplY3RvclZpZXcocGFyZW50TG9jYXRpb24sIGxWaWV3KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGluamVjdG9ySW5kZXggPSAtMTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5vdEZvdW5kVmFsdWU7XG59XG5mdW5jdGlvbiBzZWFyY2hUb2tlbnNPbkluamVjdG9yKGluamVjdG9ySW5kZXgsIGxWaWV3LCB0b2tlbiwgcHJldmlvdXNUVmlldywgZmxhZ3MsIGhvc3RURWxlbWVudE5vZGUpIHtcbiAgY29uc3QgY3VycmVudFRWaWV3ID0gbFZpZXdbVFZJRVddO1xuICBjb25zdCB0Tm9kZSA9IGN1cnJlbnRUVmlldy5kYXRhW2luamVjdG9ySW5kZXggKyA4XTtcbiAgY29uc3QgY2FuQWNjZXNzVmlld1Byb3ZpZGVycyA9IHByZXZpb3VzVFZpZXcgPT0gbnVsbCA/IGlzQ29tcG9uZW50SG9zdCh0Tm9kZSkgJiYgaW5jbHVkZVZpZXdQcm92aWRlcnMgOiBwcmV2aW91c1RWaWV3ICE9IGN1cnJlbnRUVmlldyAmJiAodE5vZGUudHlwZSAmIDMpICE9PSAwO1xuICBjb25zdCBpc0hvc3RTcGVjaWFsQ2FzZSA9IGZsYWdzICYgMSAmJiBob3N0VEVsZW1lbnROb2RlID09PSB0Tm9kZTtcbiAgY29uc3QgaW5qZWN0YWJsZUlkeCA9IGxvY2F0ZURpcmVjdGl2ZU9yUHJvdmlkZXIodE5vZGUsIGN1cnJlbnRUVmlldywgdG9rZW4sIGNhbkFjY2Vzc1ZpZXdQcm92aWRlcnMsIGlzSG9zdFNwZWNpYWxDYXNlKTtcbiAgaWYgKGluamVjdGFibGVJZHggIT09IG51bGwpIHtcbiAgICByZXR1cm4gZ2V0Tm9kZUluamVjdGFibGUobFZpZXcsIGN1cnJlbnRUVmlldywgaW5qZWN0YWJsZUlkeCwgdE5vZGUsIGZsYWdzKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gTk9UX0ZPVU5EO1xuICB9XG59XG5mdW5jdGlvbiBsb2NhdGVEaXJlY3RpdmVPclByb3ZpZGVyKHROb2RlLCB0VmlldywgdG9rZW4sIGNhbkFjY2Vzc1ZpZXdQcm92aWRlcnMsIGlzSG9zdFNwZWNpYWxDYXNlKSB7XG4gIGNvbnN0IG5vZGVQcm92aWRlckluZGV4ZXMgPSB0Tm9kZS5wcm92aWRlckluZGV4ZXM7XG4gIGNvbnN0IHRJbmplY3RhYmxlcyA9IHRWaWV3LmRhdGE7XG4gIGNvbnN0IGluamVjdGFibGVzU3RhcnQgPSBub2RlUHJvdmlkZXJJbmRleGVzICYgMTA0ODU3NTtcbiAgY29uc3QgZGlyZWN0aXZlc1N0YXJ0ID0gdE5vZGUuZGlyZWN0aXZlU3RhcnQ7XG4gIGNvbnN0IGRpcmVjdGl2ZUVuZCA9IHROb2RlLmRpcmVjdGl2ZUVuZDtcbiAgY29uc3QgY3B0Vmlld1Byb3ZpZGVyc0NvdW50ID0gbm9kZVByb3ZpZGVySW5kZXhlcyA+PiAyMDtcbiAgY29uc3Qgc3RhcnRpbmdJbmRleCA9IGNhbkFjY2Vzc1ZpZXdQcm92aWRlcnMgPyBpbmplY3RhYmxlc1N0YXJ0IDogaW5qZWN0YWJsZXNTdGFydCArIGNwdFZpZXdQcm92aWRlcnNDb3VudDtcbiAgY29uc3QgZW5kSW5kZXggPSBpc0hvc3RTcGVjaWFsQ2FzZSA/IGluamVjdGFibGVzU3RhcnQgKyBjcHRWaWV3UHJvdmlkZXJzQ291bnQgOiBkaXJlY3RpdmVFbmQ7XG4gIGZvciAobGV0IGkgPSBzdGFydGluZ0luZGV4OyBpIDwgZW5kSW5kZXg7IGkrKykge1xuICAgIGNvbnN0IHByb3ZpZGVyVG9rZW5PckRlZiA9IHRJbmplY3RhYmxlc1tpXTtcbiAgICBpZiAoaSA8IGRpcmVjdGl2ZXNTdGFydCAmJiB0b2tlbiA9PT0gcHJvdmlkZXJUb2tlbk9yRGVmIHx8IGkgPj0gZGlyZWN0aXZlc1N0YXJ0ICYmIHByb3ZpZGVyVG9rZW5PckRlZi50eXBlID09PSB0b2tlbikge1xuICAgICAgcmV0dXJuIGk7XG4gICAgfVxuICB9XG4gIGlmIChpc0hvc3RTcGVjaWFsQ2FzZSkge1xuICAgIGNvbnN0IGRpckRlZiA9IHRJbmplY3RhYmxlc1tkaXJlY3RpdmVzU3RhcnRdO1xuICAgIGlmIChkaXJEZWYgJiYgaXNDb21wb25lbnREZWYoZGlyRGVmKSAmJiBkaXJEZWYudHlwZSA9PT0gdG9rZW4pIHtcbiAgICAgIHJldHVybiBkaXJlY3RpdmVzU3RhcnQ7XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsO1xufVxubGV0IGluamVjdGlvblBhdGggPSBbXTtcbmZ1bmN0aW9uIGdldE5vZGVJbmplY3RhYmxlKGxWaWV3LCB0VmlldywgaW5kZXgsIHROb2RlLCBmbGFncykge1xuICBsZXQgdmFsdWUgPSBsVmlld1tpbmRleF07XG4gIGNvbnN0IHREYXRhID0gdFZpZXcuZGF0YTtcbiAgaWYgKHZhbHVlIGluc3RhbmNlb2YgTm9kZUluamVjdG9yRmFjdG9yeSkge1xuICAgIGNvbnN0IGZhY3RvcnkgPSB2YWx1ZTtcbiAgICBuZ0Rldk1vZGUgJiYgaW5qZWN0aW9uUGF0aC5wdXNoKGZhY3RvcnkubmFtZSA/PyAndW5rbm93bicpO1xuICAgIGlmIChmYWN0b3J5LnJlc29sdmluZykge1xuICAgICAgbGV0IHRva2VuID0gJyc7XG4gICAgICBpZiAobmdEZXZNb2RlKSB7XG4gICAgICAgIHRva2VuID0gc3RyaW5naWZ5Rm9yRXJyb3IodERhdGFbaW5kZXhdKTtcbiAgICAgICAgdGhyb3cgY3ljbGljRGVwZW5kZW5jeUVycm9yV2l0aERldGFpbHModG9rZW4sIGluamVjdGlvblBhdGgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgY3ljbGljRGVwZW5kZW5jeUVycm9yKHRva2VuKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgcHJldmlvdXNJbmNsdWRlVmlld1Byb3ZpZGVycyA9IHNldEluY2x1ZGVWaWV3UHJvdmlkZXJzKGZhY3RvcnkuY2FuU2VlVmlld1Byb3ZpZGVycyk7XG4gICAgZmFjdG9yeS5yZXNvbHZpbmcgPSB0cnVlO1xuICAgIGNvbnN0IHRva2VuID0gdERhdGFbaW5kZXhdLnR5cGUgfHwgdERhdGFbaW5kZXhdO1xuICAgIGxldCBwcmV2SW5qZWN0Q29udGV4dDtcbiAgICBpZiAobmdEZXZNb2RlKSB7XG4gICAgICBjb25zdCBpbmplY3RvciA9IG5ldyBOb2RlSW5qZWN0b3IodE5vZGUsIGxWaWV3KTtcbiAgICAgIHByZXZJbmplY3RDb250ZXh0ID0gc2V0SW5qZWN0b3JQcm9maWxlckNvbnRleHQoe1xuICAgICAgICBpbmplY3RvcixcbiAgICAgICAgdG9rZW5cbiAgICAgIH0pO1xuICAgIH1cbiAgICBjb25zdCBwcmV2aW91c0luamVjdEltcGxlbWVudGF0aW9uID0gZmFjdG9yeS5pbmplY3RJbXBsID8gc2V0SW5qZWN0SW1wbGVtZW50YXRpb24oZmFjdG9yeS5pbmplY3RJbXBsKSA6IG51bGw7XG4gICAgY29uc3Qgc3VjY2VzcyA9IGVudGVyREkobFZpZXcsIHROb2RlLCAwKTtcbiAgICBuZ0Rldk1vZGUgJiYgYXNzZXJ0RXF1YWwoc3VjY2VzcywgdHJ1ZSwgXCJCZWNhdXNlIGZsYWdzIGRvIG5vdCBjb250YWluIGBTa2lwU2VsZicgd2UgZXhwZWN0IHRoaXMgdG8gYWx3YXlzIHN1Y2NlZWQuXCIpO1xuICAgIHRyeSB7XG4gICAgICBuZ0Rldk1vZGUgJiYgZW1pdEluamVjdG9yVG9DcmVhdGVJbnN0YW5jZUV2ZW50KHRva2VuKTtcbiAgICAgIHZhbHVlID0gbFZpZXdbaW5kZXhdID0gZmFjdG9yeS5mYWN0b3J5KHVuZGVmaW5lZCwgZmxhZ3MsIHREYXRhLCBsVmlldywgdE5vZGUpO1xuICAgICAgbmdEZXZNb2RlICYmIGVtaXRJbnN0YW5jZUNyZWF0ZWRCeUluamVjdG9yRXZlbnQodmFsdWUpO1xuICAgICAgaWYgKHRWaWV3LmZpcnN0Q3JlYXRlUGFzcyAmJiBpbmRleCA+PSB0Tm9kZS5kaXJlY3RpdmVTdGFydCkge1xuICAgICAgICBuZ0Rldk1vZGUgJiYgYXNzZXJ0RGlyZWN0aXZlRGVmKHREYXRhW2luZGV4XSk7XG4gICAgICAgIHJlZ2lzdGVyUHJlT3JkZXJIb29rcyhpbmRleCwgdERhdGFbaW5kZXhdLCB0Vmlldyk7XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIG5nRGV2TW9kZSAmJiBzZXRJbmplY3RvclByb2ZpbGVyQ29udGV4dChwcmV2SW5qZWN0Q29udGV4dCk7XG4gICAgICBwcmV2aW91c0luamVjdEltcGxlbWVudGF0aW9uICE9PSBudWxsICYmIHNldEluamVjdEltcGxlbWVudGF0aW9uKHByZXZpb3VzSW5qZWN0SW1wbGVtZW50YXRpb24pO1xuICAgICAgc2V0SW5jbHVkZVZpZXdQcm92aWRlcnMocHJldmlvdXNJbmNsdWRlVmlld1Byb3ZpZGVycyk7XG4gICAgICBmYWN0b3J5LnJlc29sdmluZyA9IGZhbHNlO1xuICAgICAgbGVhdmVESSgpO1xuICAgICAgbmdEZXZNb2RlICYmIChpbmplY3Rpb25QYXRoID0gW10pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdmFsdWU7XG59XG5mdW5jdGlvbiBibG9vbUhhc2hCaXRPckZhY3RvcnkodG9rZW4pIHtcbiAgbmdEZXZNb2RlICYmIGFzc2VydERlZmluZWQodG9rZW4sICd0b2tlbiBtdXN0IGJlIGRlZmluZWQnKTtcbiAgaWYgKHR5cGVvZiB0b2tlbiA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdG9rZW4uY2hhckNvZGVBdCgwKSB8fCAwO1xuICB9XG4gIGNvbnN0IHRva2VuSWQgPSB0b2tlbi5oYXNPd25Qcm9wZXJ0eShOR19FTEVNRU5UX0lEKSA/IHRva2VuW05HX0VMRU1FTlRfSURdIDogdW5kZWZpbmVkO1xuICBpZiAodHlwZW9mIHRva2VuSWQgPT09ICdudW1iZXInKSB7XG4gICAgaWYgKHRva2VuSWQgPj0gMCkge1xuICAgICAgcmV0dXJuIHRva2VuSWQgJiBCTE9PTV9NQVNLO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZ0Rldk1vZGUgJiYgYXNzZXJ0RXF1YWwodG9rZW5JZCwgLTEsICdFeHBlY3RpbmcgdG8gZ2V0IFNwZWNpYWwgSW5qZWN0b3IgSWQnKTtcbiAgICAgIHJldHVybiBjcmVhdGVOb2RlSW5qZWN0b3I7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHJldHVybiB0b2tlbklkO1xuICB9XG59XG5mdW5jdGlvbiBibG9vbUhhc1Rva2VuKGJsb29tSGFzaCwgaW5qZWN0b3JJbmRleCwgaW5qZWN0b3JWaWV3KSB7XG4gIGNvbnN0IG1hc2sgPSAxIDw8IGJsb29tSGFzaDtcbiAgY29uc3QgdmFsdWUgPSBpbmplY3RvclZpZXdbaW5qZWN0b3JJbmRleCArIChibG9vbUhhc2ggPj4gQkxPT01fQlVDS0VUX0JJVFMpXTtcbiAgcmV0dXJuICEhKHZhbHVlICYgbWFzayk7XG59XG5mdW5jdGlvbiBzaG91bGRTZWFyY2hQYXJlbnQoZmxhZ3MsIGlzRmlyc3RIb3N0VE5vZGUpIHtcbiAgcmV0dXJuICEoZmxhZ3MgJiAyKSAmJiAhKGZsYWdzICYgMSAmJiBpc0ZpcnN0SG9zdFROb2RlKTtcbn1cbmZ1bmN0aW9uIGdldE5vZGVJbmplY3RvckxWaWV3KG5vZGVJbmplY3Rvcikge1xuICByZXR1cm4gbm9kZUluamVjdG9yLl9sVmlldztcbn1cbmZ1bmN0aW9uIGdldE5vZGVJbmplY3RvclROb2RlKG5vZGVJbmplY3Rvcikge1xuICByZXR1cm4gbm9kZUluamVjdG9yLl90Tm9kZTtcbn1cbmNsYXNzIE5vZGVJbmplY3RvciB7XG4gIF90Tm9kZTtcbiAgX2xWaWV3O1xuICBjb25zdHJ1Y3RvcihfdE5vZGUsIF9sVmlldykge1xuICAgIHRoaXMuX3ROb2RlID0gX3ROb2RlO1xuICAgIHRoaXMuX2xWaWV3ID0gX2xWaWV3O1xuICB9XG4gIGdldCh0b2tlbiwgbm90Rm91bmRWYWx1ZSwgZmxhZ3MpIHtcbiAgICByZXR1cm4gZ2V0T3JDcmVhdGVJbmplY3RhYmxlKHRoaXMuX3ROb2RlLCB0aGlzLl9sVmlldywgdG9rZW4sIGNvbnZlcnRUb0JpdEZsYWdzKGZsYWdzKSwgbm90Rm91bmRWYWx1ZSk7XG4gIH1cbn1cbmZ1bmN0aW9uIGNyZWF0ZU5vZGVJbmplY3RvcigpIHtcbiAgcmV0dXJuIG5ldyBOb2RlSW5qZWN0b3IoZ2V0Q3VycmVudFROb2RlKCksIGdldExWaWV3KCkpO1xufVxuZnVuY3Rpb24gybXJtWdldEluaGVyaXRlZEZhY3RvcnkodHlwZSkge1xuICByZXR1cm4gbm9TaWRlRWZmZWN0cygoKSA9PiB7XG4gICAgY29uc3Qgb3duQ29uc3RydWN0b3IgPSB0eXBlLnByb3RvdHlwZS5jb25zdHJ1Y3RvcjtcbiAgICBjb25zdCBvd25GYWN0b3J5ID0gb3duQ29uc3RydWN0b3JbTkdfRkFDVE9SWV9ERUZdIHx8IGdldEZhY3RvcnlPZihvd25Db25zdHJ1Y3Rvcik7XG4gICAgY29uc3Qgb2JqZWN0UHJvdG90eXBlID0gT2JqZWN0LnByb3RvdHlwZTtcbiAgICBsZXQgcGFyZW50ID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHR5cGUucHJvdG90eXBlKS5jb25zdHJ1Y3RvcjtcbiAgICB3aGlsZSAocGFyZW50ICYmIHBhcmVudCAhPT0gb2JqZWN0UHJvdG90eXBlKSB7XG4gICAgICBjb25zdCBmYWN0b3J5ID0gcGFyZW50W05HX0ZBQ1RPUllfREVGXSB8fCBnZXRGYWN0b3J5T2YocGFyZW50KTtcbiAgICAgIGlmIChmYWN0b3J5ICYmIGZhY3RvcnkgIT09IG93bkZhY3RvcnkpIHtcbiAgICAgICAgcmV0dXJuIGZhY3Rvcnk7XG4gICAgICB9XG4gICAgICBwYXJlbnQgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YocGFyZW50KTtcbiAgICB9XG4gICAgcmV0dXJuIHQgPT4gbmV3IHQoKTtcbiAgfSk7XG59XG5mdW5jdGlvbiBnZXRGYWN0b3J5T2YodHlwZSkge1xuICBpZiAoaXNGb3J3YXJkUmVmKHR5cGUpKSB7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGNvbnN0IGZhY3RvcnkgPSBnZXRGYWN0b3J5T2YocmVzb2x2ZUZvcndhcmRSZWYodHlwZSkpO1xuICAgICAgcmV0dXJuIGZhY3RvcnkgJiYgZmFjdG9yeSgpO1xuICAgIH07XG4gIH1cbiAgcmV0dXJuIGdldEZhY3RvcnlEZWYodHlwZSk7XG59XG5mdW5jdGlvbiBsb29rdXBUb2tlblVzaW5nRW1iZWRkZWRJbmplY3Rvcih0Tm9kZSwgbFZpZXcsIHRva2VuLCBmbGFncywgbm90Rm91bmRWYWx1ZSkge1xuICBsZXQgY3VycmVudFROb2RlID0gdE5vZGU7XG4gIGxldCBjdXJyZW50TFZpZXcgPSBsVmlldztcbiAgd2hpbGUgKGN1cnJlbnRUTm9kZSAhPT0gbnVsbCAmJiBjdXJyZW50TFZpZXcgIT09IG51bGwgJiYgY3VycmVudExWaWV3W0ZMQUdTXSAmIDIwNDggJiYgIWlzUm9vdFZpZXcoY3VycmVudExWaWV3KSkge1xuICAgIG5nRGV2TW9kZSAmJiBhc3NlcnRUTm9kZUZvckxWaWV3KGN1cnJlbnRUTm9kZSwgY3VycmVudExWaWV3KTtcbiAgICBjb25zdCBub2RlSW5qZWN0b3JWYWx1ZSA9IGxvb2t1cFRva2VuVXNpbmdOb2RlSW5qZWN0b3IoY3VycmVudFROb2RlLCBjdXJyZW50TFZpZXcsIHRva2VuLCBmbGFncyB8IDIsIE5PVF9GT1VORCk7XG4gICAgaWYgKG5vZGVJbmplY3RvclZhbHVlICE9PSBOT1RfRk9VTkQpIHtcbiAgICAgIHJldHVybiBub2RlSW5qZWN0b3JWYWx1ZTtcbiAgICB9XG4gICAgbGV0IHBhcmVudFROb2RlID0gY3VycmVudFROb2RlLnBhcmVudDtcbiAgICBpZiAoIXBhcmVudFROb2RlKSB7XG4gICAgICBjb25zdCBlbWJlZGRlZFZpZXdJbmplY3RvciA9IGN1cnJlbnRMVmlld1tFTUJFRERFRF9WSUVXX0lOSkVDVE9SXTtcbiAgICAgIGlmIChlbWJlZGRlZFZpZXdJbmplY3Rvcikge1xuICAgICAgICBjb25zdCBlbWJlZGRlZFZpZXdJbmplY3RvclZhbHVlID0gZW1iZWRkZWRWaWV3SW5qZWN0b3IuZ2V0KHRva2VuLCBOT1RfRk9VTkQsIGZsYWdzICYgfjQpO1xuICAgICAgICBpZiAoZW1iZWRkZWRWaWV3SW5qZWN0b3JWYWx1ZSAhPT0gTk9UX0ZPVU5EKSB7XG4gICAgICAgICAgcmV0dXJuIGVtYmVkZGVkVmlld0luamVjdG9yVmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHBhcmVudFROb2RlID0gZ2V0VE5vZGVGcm9tTFZpZXcoY3VycmVudExWaWV3KTtcbiAgICAgIGN1cnJlbnRMVmlldyA9IGN1cnJlbnRMVmlld1tERUNMQVJBVElPTl9WSUVXXTtcbiAgICB9XG4gICAgY3VycmVudFROb2RlID0gcGFyZW50VE5vZGU7XG4gIH1cbiAgcmV0dXJuIG5vdEZvdW5kVmFsdWU7XG59XG5mdW5jdGlvbiBnZXRUTm9kZUZyb21MVmlldyhsVmlldykge1xuICBjb25zdCB0VmlldyA9IGxWaWV3W1RWSUVXXTtcbiAgY29uc3QgdFZpZXdUeXBlID0gdFZpZXcudHlwZTtcbiAgaWYgKHRWaWV3VHlwZSA9PT0gMikge1xuICAgIG5nRGV2TW9kZSAmJiBhc3NlcnREZWZpbmVkKHRWaWV3LmRlY2xUTm9kZSwgJ0VtYmVkZGVkIFROb2RlcyBzaG91bGQgaGF2ZSBkZWNsYXJhdGlvbiBwYXJlbnRzLicpO1xuICAgIHJldHVybiB0Vmlldy5kZWNsVE5vZGU7XG4gIH0gZWxzZSBpZiAodFZpZXdUeXBlID09PSAxKSB7XG4gICAgcmV0dXJuIGxWaWV3W1RfSE9TVF07XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5mdW5jdGlvbiDJtcm1aW5qZWN0QXR0cmlidXRlKGF0dHJOYW1lVG9JbmplY3QpIHtcbiAgcmV0dXJuIGluamVjdEF0dHJpYnV0ZUltcGwoZ2V0Q3VycmVudFROb2RlKCksIGF0dHJOYW1lVG9JbmplY3QpO1xufVxuY29uc3QgQXR0cmlidXRlID0gLyojX19QVVJFX18qL21ha2VQYXJhbURlY29yYXRvcignQXR0cmlidXRlJywgYXR0cmlidXRlTmFtZSA9PiAoe1xuICBhdHRyaWJ1dGVOYW1lLFxuICBfX05HX0VMRU1FTlRfSURfXzogKCkgPT4gybXJtWluamVjdEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKVxufSkpO1xubGV0IF9yZWZsZWN0ID0gbnVsbDtcbmZ1bmN0aW9uIGdldFJlZmxlY3QoKSB7XG4gIHJldHVybiBfcmVmbGVjdCA9IF9yZWZsZWN0IHx8IG5ldyBSZWZsZWN0aW9uQ2FwYWJpbGl0aWVzKCk7XG59XG5mdW5jdGlvbiByZWZsZWN0RGVwZW5kZW5jaWVzKHR5cGUpIHtcbiAgcmV0dXJuIGNvbnZlcnREZXBlbmRlbmNpZXMoZ2V0UmVmbGVjdCgpLnBhcmFtZXRlcnModHlwZSkpO1xufVxuZnVuY3Rpb24gY29udmVydERlcGVuZGVuY2llcyhkZXBzKSB7XG4gIHJldHVybiBkZXBzLm1hcChkZXAgPT4gcmVmbGVjdERlcGVuZGVuY3koZGVwKSk7XG59XG5mdW5jdGlvbiByZWZsZWN0RGVwZW5kZW5jeShkZXApIHtcbiAgY29uc3QgbWV0YSA9IHtcbiAgICB0b2tlbjogbnVsbCxcbiAgICBhdHRyaWJ1dGU6IG51bGwsXG4gICAgaG9zdDogZmFsc2UsXG4gICAgb3B0aW9uYWw6IGZhbHNlLFxuICAgIHNlbGY6IGZhbHNlLFxuICAgIHNraXBTZWxmOiBmYWxzZVxuICB9O1xuICBpZiAoQXJyYXkuaXNBcnJheShkZXApICYmIGRlcC5sZW5ndGggPiAwKSB7XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBkZXAubGVuZ3RoOyBqKyspIHtcbiAgICAgIGNvbnN0IHBhcmFtID0gZGVwW2pdO1xuICAgICAgaWYgKHBhcmFtID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCBwcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihwYXJhbSk7XG4gICAgICBpZiAocGFyYW0gaW5zdGFuY2VvZiBPcHRpb25hbCB8fCBwcm90by5uZ01ldGFkYXRhTmFtZSA9PT0gJ09wdGlvbmFsJykge1xuICAgICAgICBtZXRhLm9wdGlvbmFsID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAocGFyYW0gaW5zdGFuY2VvZiBTa2lwU2VsZiB8fCBwcm90by5uZ01ldGFkYXRhTmFtZSA9PT0gJ1NraXBTZWxmJykge1xuICAgICAgICBtZXRhLnNraXBTZWxmID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAocGFyYW0gaW5zdGFuY2VvZiBTZWxmIHx8IHByb3RvLm5nTWV0YWRhdGFOYW1lID09PSAnU2VsZicpIHtcbiAgICAgICAgbWV0YS5zZWxmID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAocGFyYW0gaW5zdGFuY2VvZiBIb3N0IHx8IHByb3RvLm5nTWV0YWRhdGFOYW1lID09PSAnSG9zdCcpIHtcbiAgICAgICAgbWV0YS5ob3N0ID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAocGFyYW0gaW5zdGFuY2VvZiBJbmplY3QpIHtcbiAgICAgICAgbWV0YS50b2tlbiA9IHBhcmFtLnRva2VuO1xuICAgICAgfSBlbHNlIGlmIChwYXJhbSBpbnN0YW5jZW9mIEF0dHJpYnV0ZSkge1xuICAgICAgICBpZiAocGFyYW0uYXR0cmlidXRlTmFtZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFcnJvcigtMjA0LCBuZ0Rldk1vZGUgJiYgYEF0dHJpYnV0ZSBuYW1lIG11c3QgYmUgZGVmaW5lZC5gKTtcbiAgICAgICAgfVxuICAgICAgICBtZXRhLmF0dHJpYnV0ZSA9IHBhcmFtLmF0dHJpYnV0ZU5hbWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBtZXRhLnRva2VuID0gcGFyYW07XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2UgaWYgKGRlcCA9PT0gdW5kZWZpbmVkIHx8IEFycmF5LmlzQXJyYXkoZGVwKSAmJiBkZXAubGVuZ3RoID09PSAwKSB7XG4gICAgbWV0YS50b2tlbiA9IG51bGw7XG4gIH0gZWxzZSB7XG4gICAgbWV0YS50b2tlbiA9IGRlcDtcbiAgfVxuICByZXR1cm4gbWV0YTtcbn1cbmZ1bmN0aW9uIGNvbXBpbGVJbmplY3RhYmxlKHR5cGUsIG1ldGEpIHtcbiAgbGV0IG5nSW5qZWN0YWJsZURlZiA9IG51bGw7XG4gIGxldCBuZ0ZhY3RvcnlEZWYgPSBudWxsO1xuICBpZiAoIXR5cGUuaGFzT3duUHJvcGVydHkoTkdfUFJPVl9ERUYpKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHR5cGUsIE5HX1BST1ZfREVGLCB7XG4gICAgICBnZXQ6ICgpID0+IHtcbiAgICAgICAgaWYgKG5nSW5qZWN0YWJsZURlZiA9PT0gbnVsbCkge1xuICAgICAgICAgIGNvbnN0IGNvbXBpbGVyID0gZ2V0Q29tcGlsZXJGYWNhZGUoe1xuICAgICAgICAgICAgdXNhZ2U6IDAsXG4gICAgICAgICAgICBraW5kOiAnaW5qZWN0YWJsZScsXG4gICAgICAgICAgICB0eXBlXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgbmdJbmplY3RhYmxlRGVmID0gY29tcGlsZXIuY29tcGlsZUluamVjdGFibGUoYW5ndWxhckNvcmVEaUVudiwgYG5nOi8vLyR7dHlwZS5uYW1lfS/JtXByb3YuanNgLCBnZXRJbmplY3RhYmxlTWV0YWRhdGEodHlwZSwgbWV0YSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZ0luamVjdGFibGVEZWY7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgaWYgKCF0eXBlLmhhc093blByb3BlcnR5KE5HX0ZBQ1RPUllfREVGKSkge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0eXBlLCBOR19GQUNUT1JZX0RFRiwge1xuICAgICAgZ2V0OiAoKSA9PiB7XG4gICAgICAgIGlmIChuZ0ZhY3RvcnlEZWYgPT09IG51bGwpIHtcbiAgICAgICAgICBjb25zdCBjb21waWxlciA9IGdldENvbXBpbGVyRmFjYWRlKHtcbiAgICAgICAgICAgIHVzYWdlOiAwLFxuICAgICAgICAgICAga2luZDogJ2luamVjdGFibGUnLFxuICAgICAgICAgICAgdHlwZVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIG5nRmFjdG9yeURlZiA9IGNvbXBpbGVyLmNvbXBpbGVGYWN0b3J5KGFuZ3VsYXJDb3JlRGlFbnYsIGBuZzovLy8ke3R5cGUubmFtZX0vybVmYWMuanNgLCB7XG4gICAgICAgICAgICBuYW1lOiB0eXBlLm5hbWUsXG4gICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgdHlwZUFyZ3VtZW50Q291bnQ6IDAsXG4gICAgICAgICAgICBkZXBzOiByZWZsZWN0RGVwZW5kZW5jaWVzKHR5cGUpLFxuICAgICAgICAgICAgdGFyZ2V0OiBjb21waWxlci5GYWN0b3J5VGFyZ2V0LkluamVjdGFibGVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmdGYWN0b3J5RGVmO1xuICAgICAgfSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9XG59XG5jb25zdCBVU0VfVkFMVUUgPSAvKiNfX1BVUkVfXyovZ2V0Q2xvc3VyZVNhZmVQcm9wZXJ0eSh7XG4gIHByb3ZpZGU6IFN0cmluZyxcbiAgdXNlVmFsdWU6IGdldENsb3N1cmVTYWZlUHJvcGVydHlcbn0pO1xuZnVuY3Rpb24gaXNVc2VDbGFzc1Byb3ZpZGVyKG1ldGEpIHtcbiAgcmV0dXJuIG1ldGEudXNlQ2xhc3MgIT09IHVuZGVmaW5lZDtcbn1cbmZ1bmN0aW9uIGlzVXNlVmFsdWVQcm92aWRlcihtZXRhKSB7XG4gIHJldHVybiBVU0VfVkFMVUUgaW4gbWV0YTtcbn1cbmZ1bmN0aW9uIGlzVXNlRmFjdG9yeVByb3ZpZGVyKG1ldGEpIHtcbiAgcmV0dXJuIG1ldGEudXNlRmFjdG9yeSAhPT0gdW5kZWZpbmVkO1xufVxuZnVuY3Rpb24gaXNVc2VFeGlzdGluZ1Byb3ZpZGVyKG1ldGEpIHtcbiAgcmV0dXJuIG1ldGEudXNlRXhpc3RpbmcgIT09IHVuZGVmaW5lZDtcbn1cbmZ1bmN0aW9uIGdldEluamVjdGFibGVNZXRhZGF0YSh0eXBlLCBzcmNNZXRhKSB7XG4gIGNvbnN0IG1ldGEgPSBzcmNNZXRhIHx8IHtcbiAgICBwcm92aWRlZEluOiBudWxsXG4gIH07XG4gIGNvbnN0IGNvbXBpbGVyTWV0YSA9IHtcbiAgICBuYW1lOiB0eXBlLm5hbWUsXG4gICAgdHlwZTogdHlwZSxcbiAgICB0eXBlQXJndW1lbnRDb3VudDogMCxcbiAgICBwcm92aWRlZEluOiBtZXRhLnByb3ZpZGVkSW5cbiAgfTtcbiAgaWYgKChpc1VzZUNsYXNzUHJvdmlkZXIobWV0YSkgfHwgaXNVc2VGYWN0b3J5UHJvdmlkZXIobWV0YSkpICYmIG1ldGEuZGVwcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY29tcGlsZXJNZXRhLmRlcHMgPSBjb252ZXJ0RGVwZW5kZW5jaWVzKG1ldGEuZGVwcyk7XG4gIH1cbiAgaWYgKGlzVXNlQ2xhc3NQcm92aWRlcihtZXRhKSkge1xuICAgIGNvbXBpbGVyTWV0YS51c2VDbGFzcyA9IG1ldGEudXNlQ2xhc3M7XG4gIH0gZWxzZSBpZiAoaXNVc2VWYWx1ZVByb3ZpZGVyKG1ldGEpKSB7XG4gICAgY29tcGlsZXJNZXRhLnVzZVZhbHVlID0gbWV0YS51c2VWYWx1ZTtcbiAgfSBlbHNlIGlmIChpc1VzZUZhY3RvcnlQcm92aWRlcihtZXRhKSkge1xuICAgIGNvbXBpbGVyTWV0YS51c2VGYWN0b3J5ID0gbWV0YS51c2VGYWN0b3J5O1xuICB9IGVsc2UgaWYgKGlzVXNlRXhpc3RpbmdQcm92aWRlcihtZXRhKSkge1xuICAgIGNvbXBpbGVyTWV0YS51c2VFeGlzdGluZyA9IG1ldGEudXNlRXhpc3Rpbmc7XG4gIH1cbiAgcmV0dXJuIGNvbXBpbGVyTWV0YTtcbn1cbmNvbnN0IEluamVjdGFibGUgPSAvKiNfX1BVUkVfXyovbWFrZURlY29yYXRvcignSW5qZWN0YWJsZScsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsICh0eXBlLCBtZXRhKSA9PiBjb21waWxlSW5qZWN0YWJsZSh0eXBlLCBtZXRhKSk7XG5mdW5jdGlvbiBpbmplY3RFbGVtZW50UmVmKCkge1xuICByZXR1cm4gY3JlYXRlRWxlbWVudFJlZihnZXRDdXJyZW50VE5vZGUoKSwgZ2V0TFZpZXcoKSk7XG59XG5mdW5jdGlvbiBjcmVhdGVFbGVtZW50UmVmKHROb2RlLCBsVmlldykge1xuICByZXR1cm4gbmV3IEVsZW1lbnRSZWYoZ2V0TmF0aXZlQnlUTm9kZSh0Tm9kZSwgbFZpZXcpKTtcbn1cbmxldCBFbGVtZW50UmVmID0gLyojX19QVVJFX18qLygoKSA9PiB7XG4gIGNsYXNzIEVsZW1lbnRSZWYge1xuICAgIG5hdGl2ZUVsZW1lbnQ7XG4gICAgY29uc3RydWN0b3IobmF0aXZlRWxlbWVudCkge1xuICAgICAgdGhpcy5uYXRpdmVFbGVtZW50ID0gbmF0aXZlRWxlbWVudDtcbiAgICB9XG4gICAgc3RhdGljIF9fTkdfRUxFTUVOVF9JRF9fID0gaW5qZWN0RWxlbWVudFJlZjtcbiAgfVxuICByZXR1cm4gRWxlbWVudFJlZjtcbn0pKCk7XG5mdW5jdGlvbiB1bndyYXBFbGVtZW50UmVmKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIEVsZW1lbnRSZWYgPyB2YWx1ZS5uYXRpdmVFbGVtZW50IDogdmFsdWU7XG59XG5mdW5jdGlvbiBzeW1ib2xJdGVyYXRvcigpIHtcbiAgcmV0dXJuIHRoaXMuX3Jlc3VsdHNbU3ltYm9sLml0ZXJhdG9yXSgpO1xufVxuY2xhc3MgUXVlcnlMaXN0IHtcbiAgX2VtaXREaXN0aW5jdENoYW5nZXNPbmx5O1xuICBkaXJ0eSA9IHRydWU7XG4gIF9vbkRpcnR5ID0gdW5kZWZpbmVkO1xuICBfcmVzdWx0cyA9IFtdO1xuICBfY2hhbmdlc0RldGVjdGVkID0gZmFsc2U7XG4gIF9jaGFuZ2VzID0gdW5kZWZpbmVkO1xuICBsZW5ndGggPSAwO1xuICBmaXJzdCA9IHVuZGVmaW5lZDtcbiAgbGFzdCA9IHVuZGVmaW5lZDtcbiAgZ2V0IGNoYW5nZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NoYW5nZXMgPz89IG5ldyBTdWJqZWN0KCk7XG4gIH1cbiAgY29uc3RydWN0b3IoX2VtaXREaXN0aW5jdENoYW5nZXNPbmx5ID0gZmFsc2UpIHtcbiAgICB0aGlzLl9lbWl0RGlzdGluY3RDaGFuZ2VzT25seSA9IF9lbWl0RGlzdGluY3RDaGFuZ2VzT25seTtcbiAgfVxuICBnZXQoaW5kZXgpIHtcbiAgICByZXR1cm4gdGhpcy5fcmVzdWx0c1tpbmRleF07XG4gIH1cbiAgbWFwKGZuKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Jlc3VsdHMubWFwKGZuKTtcbiAgfVxuICBmaWx0ZXIoZm4pIHtcbiAgICByZXR1cm4gdGhpcy5fcmVzdWx0cy5maWx0ZXIoZm4pO1xuICB9XG4gIGZpbmQoZm4pIHtcbiAgICByZXR1cm4gdGhpcy5fcmVzdWx0cy5maW5kKGZuKTtcbiAgfVxuICByZWR1Y2UoZm4sIGluaXQpIHtcbiAgICByZXR1cm4gdGhpcy5fcmVzdWx0cy5yZWR1Y2UoZm4sIGluaXQpO1xuICB9XG4gIGZvckVhY2goZm4pIHtcbiAgICB0aGlzLl9yZXN1bHRzLmZvckVhY2goZm4pO1xuICB9XG4gIHNvbWUoZm4pIHtcbiAgICByZXR1cm4gdGhpcy5fcmVzdWx0cy5zb21lKGZuKTtcbiAgfVxuICB0b0FycmF5KCkge1xuICAgIHJldHVybiB0aGlzLl9yZXN1bHRzLnNsaWNlKCk7XG4gIH1cbiAgdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Jlc3VsdHMudG9TdHJpbmcoKTtcbiAgfVxuICByZXNldChyZXN1bHRzVHJlZSwgaWRlbnRpdHlBY2Nlc3Nvcikge1xuICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICBjb25zdCBuZXdSZXN1bHRGbGF0ID0gZmxhdHRlbihyZXN1bHRzVHJlZSk7XG4gICAgaWYgKHRoaXMuX2NoYW5nZXNEZXRlY3RlZCA9ICFhcnJheUVxdWFscyh0aGlzLl9yZXN1bHRzLCBuZXdSZXN1bHRGbGF0LCBpZGVudGl0eUFjY2Vzc29yKSkge1xuICAgICAgdGhpcy5fcmVzdWx0cyA9IG5ld1Jlc3VsdEZsYXQ7XG4gICAgICB0aGlzLmxlbmd0aCA9IG5ld1Jlc3VsdEZsYXQubGVuZ3RoO1xuICAgICAgdGhpcy5sYXN0ID0gbmV3UmVzdWx0RmxhdFt0aGlzLmxlbmd0aCAtIDFdO1xuICAgICAgdGhpcy5maXJzdCA9IG5ld1Jlc3VsdEZsYXRbMF07XG4gICAgfVxuICB9XG4gIG5vdGlmeU9uQ2hhbmdlcygpIHtcbiAgICBpZiAodGhpcy5fY2hhbmdlcyAhPT0gdW5kZWZpbmVkICYmICh0aGlzLl9jaGFuZ2VzRGV0ZWN0ZWQgfHwgIXRoaXMuX2VtaXREaXN0aW5jdENoYW5nZXNPbmx5KSkgdGhpcy5fY2hhbmdlcy5uZXh0KHRoaXMpO1xuICB9XG4gIG9uRGlydHkoY2IpIHtcbiAgICB0aGlzLl9vbkRpcnR5ID0gY2I7XG4gIH1cbiAgc2V0RGlydHkoKSB7XG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgdGhpcy5fb25EaXJ0eT8uKCk7XG4gIH1cbiAgZGVzdHJveSgpIHtcbiAgICBpZiAodGhpcy5fY2hhbmdlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLl9jaGFuZ2VzLmNvbXBsZXRlKCk7XG4gICAgICB0aGlzLl9jaGFuZ2VzLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG4gIFtTeW1ib2wuaXRlcmF0b3JdID0gLyojX19QVVJFX18qLygoKSA9PiBzeW1ib2xJdGVyYXRvcikoKTtcbn1cbmNvbnN0IFNLSVBfSFlEUkFUSU9OX0FUVFJfTkFNRSA9ICduZ1NraXBIeWRyYXRpb24nO1xuY29uc3QgU0tJUF9IWURSQVRJT05fQVRUUl9OQU1FX0xPV0VSX0NBU0UgPSAnbmdza2lwaHlkcmF0aW9uJztcbmZ1bmN0aW9uIGhhc1NraXBIeWRyYXRpb25BdHRyT25UTm9kZSh0Tm9kZSkge1xuICBjb25zdCBhdHRycyA9IHROb2RlLm1lcmdlZEF0dHJzO1xuICBpZiAoYXR0cnMgPT09IG51bGwpIHJldHVybiBmYWxzZTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhdHRycy5sZW5ndGg7IGkgKz0gMikge1xuICAgIGNvbnN0IHZhbHVlID0gYXR0cnNbaV07XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHJldHVybiBmYWxzZTtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiB2YWx1ZS50b0xvd2VyQ2FzZSgpID09PSBTS0lQX0hZRFJBVElPTl9BVFRSX05BTUVfTE9XRVJfQ0FTRSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIGhhc1NraXBIeWRyYXRpb25BdHRyT25SRWxlbWVudChyTm9kZSkge1xuICByZXR1cm4gck5vZGUuaGFzQXR0cmlidXRlKFNLSVBfSFlEUkFUSU9OX0FUVFJfTkFNRSk7XG59XG5mdW5jdGlvbiBoYXNJblNraXBIeWRyYXRpb25CbG9ja0ZsYWcodE5vZGUpIHtcbiAgcmV0dXJuICh0Tm9kZS5mbGFncyAmIDEyOCkgPT09IDEyODtcbn1cbmZ1bmN0aW9uIGlzSW5Ta2lwSHlkcmF0aW9uQmxvY2sodE5vZGUpIHtcbiAgaWYgKGhhc0luU2tpcEh5ZHJhdGlvbkJsb2NrRmxhZyh0Tm9kZSkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBsZXQgY3VycmVudFROb2RlID0gdE5vZGUucGFyZW50O1xuICB3aGlsZSAoY3VycmVudFROb2RlKSB7XG4gICAgaWYgKGhhc0luU2tpcEh5ZHJhdGlvbkJsb2NrRmxhZyh0Tm9kZSkgfHwgaGFzU2tpcEh5ZHJhdGlvbkF0dHJPblROb2RlKGN1cnJlbnRUTm9kZSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBjdXJyZW50VE5vZGUgPSBjdXJyZW50VE5vZGUucGFyZW50O1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIGlzSTE4bkluU2tpcEh5ZHJhdGlvbkJsb2NrKHBhcmVudFROb2RlKSB7XG4gIHJldHVybiBoYXNJblNraXBIeWRyYXRpb25CbG9ja0ZsYWcocGFyZW50VE5vZGUpIHx8IGhhc1NraXBIeWRyYXRpb25BdHRyT25UTm9kZShwYXJlbnRUTm9kZSkgfHwgaXNJblNraXBIeWRyYXRpb25CbG9jayhwYXJlbnRUTm9kZSk7XG59XG52YXIgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKENoYW5nZURldGVjdGlvblN0cmF0ZWd5KSB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5W0NoYW5nZURldGVjdGlvblN0cmF0ZWd5W1wiT25QdXNoXCJdID0gMF0gPSBcIk9uUHVzaFwiO1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneVtDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneVtcIkVhZ2VyXCJdID0gMV0gPSBcIkVhZ2VyXCI7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5W0NoYW5nZURldGVjdGlvblN0cmF0ZWd5W1wiRGVmYXVsdFwiXSA9IDFdID0gXCJEZWZhdWx0XCI7XG4gIHJldHVybiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneTtcbn0oQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kgfHwge30pO1xuY29uc3QgVFJBQ0tFRF9MVklFV1MgPSAvKiNfX1BVUkVfXyovbmV3IE1hcCgpO1xubGV0IHVuaXF1ZUlkQ291bnRlciA9IDA7XG5mdW5jdGlvbiBnZXRVbmlxdWVMVmlld0lkKCkge1xuICByZXR1cm4gdW5pcXVlSWRDb3VudGVyKys7XG59XG5mdW5jdGlvbiByZWdpc3RlckxWaWV3KGxWaWV3KSB7XG4gIG5nRGV2TW9kZSAmJiBhc3NlcnROdW1iZXIobFZpZXdbSURdLCAnTFZpZXcgbXVzdCBoYXZlIGFuIElEIGluIG9yZGVyIHRvIGJlIHJlZ2lzdGVyZWQnKTtcbiAgVFJBQ0tFRF9MVklFV1Muc2V0KGxWaWV3W0lEXSwgbFZpZXcpO1xufVxuZnVuY3Rpb24gZ2V0TFZpZXdCeUlkKGlkKSB7XG4gIG5nRGV2TW9kZSAmJiBhc3NlcnROdW1iZXIoaWQsICdJRCB1c2VkIGZvciBMVmlldyBsb29rdXAgbXVzdCBiZSBhIG51bWJlcicpO1xuICByZXR1cm4gVFJBQ0tFRF9MVklFV1MuZ2V0KGlkKSB8fCBudWxsO1xufVxuZnVuY3Rpb24gdW5yZWdpc3RlckxWaWV3KGxWaWV3KSB7XG4gIG5nRGV2TW9kZSAmJiBhc3NlcnROdW1iZXIobFZpZXdbSURdLCAnQ2Fubm90IHN0b3AgdHJhY2tpbmcgYW4gTFZpZXcgdGhhdCBkb2VzIG5vdCBoYXZlIGFuIElEJyk7XG4gIFRSQUNLRURfTFZJRVdTLmRlbGV0ZShsVmlld1tJRF0pO1xufVxuZnVuY3Rpb24gZ2V0VHJhY2tlZExWaWV3cygpIHtcbiAgcmV0dXJuIFRSQUNLRURfTFZJRVdTO1xufVxuY2xhc3MgTENvbnRleHQge1xuICBsVmlld0lkO1xuICBub2RlSW5kZXg7XG4gIG5hdGl2ZTtcbiAgY29tcG9uZW50O1xuICBkaXJlY3RpdmVzO1xuICBsb2NhbFJlZnM7XG4gIGdldCBsVmlldygpIHtcbiAgICByZXR1cm4gZ2V0TFZpZXdCeUlkKHRoaXMubFZpZXdJZCk7XG4gIH1cbiAgY29uc3RydWN0b3IobFZpZXdJZCwgbm9kZUluZGV4LCBuYXRpdmUpIHtcbiAgICB0aGlzLmxWaWV3SWQgPSBsVmlld0lkO1xuICAgIHRoaXMubm9kZUluZGV4ID0gbm9kZUluZGV4O1xuICAgIHRoaXMubmF0aXZlID0gbmF0aXZlO1xuICB9XG59XG5mdW5jdGlvbiBnZXRMQ29udGV4dCh0YXJnZXQpIHtcbiAgbGV0IG1wVmFsdWUgPSByZWFkUGF0Y2hlZERhdGEodGFyZ2V0KTtcbiAgaWYgKG1wVmFsdWUpIHtcbiAgICBpZiAoaXNMVmlldyhtcFZhbHVlKSkge1xuICAgICAgY29uc3QgbFZpZXcgPSBtcFZhbHVlO1xuICAgICAgbGV0IG5vZGVJbmRleDtcbiAgICAgIGxldCBjb21wb25lbnQgPSB1bmRlZmluZWQ7XG4gICAgICBsZXQgZGlyZWN0aXZlcyA9IHVuZGVmaW5lZDtcbiAgICAgIGlmIChpc0NvbXBvbmVudEluc3RhbmNlKHRhcmdldCkpIHtcbiAgICAgICAgbm9kZUluZGV4ID0gZmluZFZpYUNvbXBvbmVudChsVmlldywgdGFyZ2V0KTtcbiAgICAgICAgaWYgKG5vZGVJbmRleCA9PSAtMSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIHByb3ZpZGVkIGNvbXBvbmVudCB3YXMgbm90IGZvdW5kIGluIHRoZSBhcHBsaWNhdGlvbicpO1xuICAgICAgICB9XG4gICAgICAgIGNvbXBvbmVudCA9IHRhcmdldDtcbiAgICAgIH0gZWxzZSBpZiAoaXNEaXJlY3RpdmVJbnN0YW5jZSh0YXJnZXQpKSB7XG4gICAgICAgIG5vZGVJbmRleCA9IGZpbmRWaWFEaXJlY3RpdmUobFZpZXcsIHRhcmdldCk7XG4gICAgICAgIGlmIChub2RlSW5kZXggPT0gLTEpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBwcm92aWRlZCBkaXJlY3RpdmUgd2FzIG5vdCBmb3VuZCBpbiB0aGUgYXBwbGljYXRpb24nKTtcbiAgICAgICAgfVxuICAgICAgICBkaXJlY3RpdmVzID0gZ2V0RGlyZWN0aXZlc0F0Tm9kZUluZGV4KG5vZGVJbmRleCwgbFZpZXcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbm9kZUluZGV4ID0gZmluZFZpYU5hdGl2ZUVsZW1lbnQobFZpZXcsIHRhcmdldCk7XG4gICAgICAgIGlmIChub2RlSW5kZXggPT0gLTEpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29uc3QgbmF0aXZlID0gdW53cmFwUk5vZGUobFZpZXdbbm9kZUluZGV4XSk7XG4gICAgICBjb25zdCBleGlzdGluZ0N0eCA9IHJlYWRQYXRjaGVkRGF0YShuYXRpdmUpO1xuICAgICAgY29uc3QgY29udGV4dCA9IGV4aXN0aW5nQ3R4ICYmICFBcnJheS5pc0FycmF5KGV4aXN0aW5nQ3R4KSA/IGV4aXN0aW5nQ3R4IDogY3JlYXRlTENvbnRleHQobFZpZXcsIG5vZGVJbmRleCwgbmF0aXZlKTtcbiAgICAgIGlmIChjb21wb25lbnQgJiYgY29udGV4dC5jb21wb25lbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb250ZXh0LmNvbXBvbmVudCA9IGNvbXBvbmVudDtcbiAgICAgICAgYXR0YWNoUGF0Y2hEYXRhKGNvbnRleHQuY29tcG9uZW50LCBjb250ZXh0KTtcbiAgICAgIH1cbiAgICAgIGlmIChkaXJlY3RpdmVzICYmIGNvbnRleHQuZGlyZWN0aXZlcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnRleHQuZGlyZWN0aXZlcyA9IGRpcmVjdGl2ZXM7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGlyZWN0aXZlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGF0dGFjaFBhdGNoRGF0YShkaXJlY3RpdmVzW2ldLCBjb250ZXh0KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYXR0YWNoUGF0Y2hEYXRhKGNvbnRleHQubmF0aXZlLCBjb250ZXh0KTtcbiAgICAgIG1wVmFsdWUgPSBjb250ZXh0O1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBjb25zdCByRWxlbWVudCA9IHRhcmdldDtcbiAgICBuZ0Rldk1vZGUgJiYgYXNzZXJ0RG9tTm9kZShyRWxlbWVudCk7XG4gICAgbGV0IHBhcmVudCA9IHJFbGVtZW50O1xuICAgIHdoaWxlIChwYXJlbnQgPSBwYXJlbnQucGFyZW50Tm9kZSkge1xuICAgICAgY29uc3QgcGFyZW50Q29udGV4dCA9IHJlYWRQYXRjaGVkRGF0YShwYXJlbnQpO1xuICAgICAgaWYgKHBhcmVudENvbnRleHQpIHtcbiAgICAgICAgY29uc3QgbFZpZXcgPSBBcnJheS5pc0FycmF5KHBhcmVudENvbnRleHQpID8gcGFyZW50Q29udGV4dCA6IHBhcmVudENvbnRleHQubFZpZXc7XG4gICAgICAgIGlmICghbFZpZXcpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpbmRleCA9IGZpbmRWaWFOYXRpdmVFbGVtZW50KGxWaWV3LCByRWxlbWVudCk7XG4gICAgICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICAgICAgY29uc3QgbmF0aXZlID0gdW53cmFwUk5vZGUobFZpZXdbaW5kZXhdKTtcbiAgICAgICAgICBjb25zdCBjb250ZXh0ID0gY3JlYXRlTENvbnRleHQobFZpZXcsIGluZGV4LCBuYXRpdmUpO1xuICAgICAgICAgIGF0dGFjaFBhdGNoRGF0YShuYXRpdmUsIGNvbnRleHQpO1xuICAgICAgICAgIG1wVmFsdWUgPSBjb250ZXh0O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBtcFZhbHVlIHx8IG51bGw7XG59XG5mdW5jdGlvbiBjcmVhdGVMQ29udGV4dChsVmlldywgbm9kZUluZGV4LCBuYXRpdmUpIHtcbiAgcmV0dXJuIG5ldyBMQ29udGV4dChsVmlld1tJRF0sIG5vZGVJbmRleCwgbmF0aXZlKTtcbn1cbmZ1bmN0aW9uIGdldENvbXBvbmVudFZpZXdCeUluc3RhbmNlKGNvbXBvbmVudEluc3RhbmNlKSB7XG4gIGxldCBwYXRjaGVkRGF0YSA9IHJlYWRQYXRjaGVkRGF0YShjb21wb25lbnRJbnN0YW5jZSk7XG4gIGxldCBsVmlldztcbiAgaWYgKGlzTFZpZXcocGF0Y2hlZERhdGEpKSB7XG4gICAgY29uc3QgY29udGV4dExWaWV3ID0gcGF0Y2hlZERhdGE7XG4gICAgY29uc3Qgbm9kZUluZGV4ID0gZmluZFZpYUNvbXBvbmVudChjb250ZXh0TFZpZXcsIGNvbXBvbmVudEluc3RhbmNlKTtcbiAgICBsVmlldyA9IGdldENvbXBvbmVudExWaWV3QnlJbmRleChub2RlSW5kZXgsIGNvbnRleHRMVmlldyk7XG4gICAgY29uc3QgY29udGV4dCA9IGNyZWF0ZUxDb250ZXh0KGNvbnRleHRMVmlldywgbm9kZUluZGV4LCBsVmlld1tIT1NUXSk7XG4gICAgY29udGV4dC5jb21wb25lbnQgPSBjb21wb25lbnRJbnN0YW5jZTtcbiAgICBhdHRhY2hQYXRjaERhdGEoY29tcG9uZW50SW5zdGFuY2UsIGNvbnRleHQpO1xuICAgIGF0dGFjaFBhdGNoRGF0YShjb250ZXh0Lm5hdGl2ZSwgY29udGV4dCk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgY29udGV4dCA9IHBhdGNoZWREYXRhO1xuICAgIGNvbnN0IGNvbnRleHRMVmlldyA9IGNvbnRleHQubFZpZXc7XG4gICAgbmdEZXZNb2RlICYmIGFzc2VydExWaWV3KGNvbnRleHRMVmlldyk7XG4gICAgbFZpZXcgPSBnZXRDb21wb25lbnRMVmlld0J5SW5kZXgoY29udGV4dC5ub2RlSW5kZXgsIGNvbnRleHRMVmlldyk7XG4gIH1cbiAgcmV0dXJuIGxWaWV3O1xufVxuY29uc3QgTU9OS0VZX1BBVENIX0tFWV9OQU1FID0gJ19fbmdDb250ZXh0X18nO1xuZnVuY3Rpb24gYXR0YWNoUGF0Y2hEYXRhKHRhcmdldCwgZGF0YSkge1xuICBuZ0Rldk1vZGUgJiYgYXNzZXJ0RGVmaW5lZCh0YXJnZXQsICdUYXJnZXQgZXhwZWN0ZWQnKTtcbiAgaWYgKGlzTFZpZXcoZGF0YSkpIHtcbiAgICB0YXJnZXRbTU9OS0VZX1BBVENIX0tFWV9OQU1FXSA9IGRhdGFbSURdO1xuICAgIHJlZ2lzdGVyTFZpZXcoZGF0YSk7XG4gIH0gZWxzZSB7XG4gICAgdGFyZ2V0W01PTktFWV9QQVRDSF9LRVlfTkFNRV0gPSBkYXRhO1xuICB9XG59XG5mdW5jdGlvbiByZWFkUGF0Y2hlZERhdGEodGFyZ2V0KSB7XG4gIG5nRGV2TW9kZSAmJiBhc3NlcnREZWZpbmVkKHRhcmdldCwgJ1RhcmdldCBleHBlY3RlZCcpO1xuICBjb25zdCBkYXRhID0gdGFyZ2V0W01PTktFWV9QQVRDSF9LRVlfTkFNRV07XG4gIHJldHVybiB0eXBlb2YgZGF0YSA9PT0gJ251bWJlcicgPyBnZXRMVmlld0J5SWQoZGF0YSkgOiBkYXRhIHx8IG51bGw7XG59XG5mdW5jdGlvbiByZWFkUGF0Y2hlZExWaWV3KHRhcmdldCkge1xuICBjb25zdCB2YWx1ZSA9IHJlYWRQYXRjaGVkRGF0YSh0YXJnZXQpO1xuICBpZiAodmFsdWUpIHtcbiAgICByZXR1cm4gaXNMVmlldyh2YWx1ZSkgPyB2YWx1ZSA6IHZhbHVlLmxWaWV3O1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuZnVuY3Rpb24gaXNDb21wb25lbnRJbnN0YW5jZShpbnN0YW5jZSkge1xuICByZXR1cm4gaW5zdGFuY2UgJiYgaW5zdGFuY2UuY29uc3RydWN0b3IgJiYgaW5zdGFuY2UuY29uc3RydWN0b3IuybVjbXA7XG59XG5mdW5jdGlvbiBpc0RpcmVjdGl2ZUluc3RhbmNlKGluc3RhbmNlKSB7XG4gIHJldHVybiBpbnN0YW5jZSAmJiBpbnN0YW5jZS5jb25zdHJ1Y3RvciAmJiBpbnN0YW5jZS5jb25zdHJ1Y3Rvci7JtWRpcjtcbn1cbmZ1bmN0aW9uIGZpbmRWaWFOYXRpdmVFbGVtZW50KGxWaWV3LCB0YXJnZXQpIHtcbiAgY29uc3QgdFZpZXcgPSBsVmlld1tUVklFV107XG4gIGZvciAobGV0IGkgPSBIRUFERVJfT0ZGU0VUOyBpIDwgdFZpZXcuYmluZGluZ1N0YXJ0SW5kZXg7IGkrKykge1xuICAgIGlmICh1bndyYXBSTm9kZShsVmlld1tpXSkgPT09IHRhcmdldCkge1xuICAgICAgcmV0dXJuIGk7XG4gICAgfVxuICB9XG4gIHJldHVybiAtMTtcbn1cbmZ1bmN0aW9uIHRyYXZlcnNlTmV4dEVsZW1lbnQodE5vZGUpIHtcbiAgaWYgKHROb2RlLmNoaWxkKSB7XG4gICAgcmV0dXJuIHROb2RlLmNoaWxkO1xuICB9IGVsc2UgaWYgKHROb2RlLm5leHQpIHtcbiAgICByZXR1cm4gdE5vZGUubmV4dDtcbiAgfSBlbHNlIHtcbiAgICB3aGlsZSAodE5vZGUucGFyZW50ICYmICF0Tm9kZS5wYXJlbnQubmV4dCkge1xuICAgICAgdE5vZGUgPSB0Tm9kZS5wYXJlbnQ7XG4gICAgfVxuICAgIHJldHVybiB0Tm9kZS5wYXJlbnQgJiYgdE5vZGUucGFyZW50Lm5leHQ7XG4gIH1cbn1cbmZ1bmN0aW9uIGZpbmRWaWFDb21wb25lbnQobFZpZXcsIGNvbXBvbmVudEluc3RhbmNlKSB7XG4gIGNvbnN0IGNvbXBvbmVudEluZGljZXMgPSBsVmlld1tUVklFV10uY29tcG9uZW50cztcbiAgaWYgKGNvbXBvbmVudEluZGljZXMpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbXBvbmVudEluZGljZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGVsZW1lbnRDb21wb25lbnRJbmRleCA9IGNvbXBvbmVudEluZGljZXNbaV07XG4gICAgICBjb25zdCBjb21wb25lbnRWaWV3ID0gZ2V0Q29tcG9uZW50TFZpZXdCeUluZGV4KGVsZW1lbnRDb21wb25lbnRJbmRleCwgbFZpZXcpO1xuICAgICAgaWYgKGNvbXBvbmVudFZpZXdbQ09OVEVYVF0gPT09IGNvbXBvbmVudEluc3RhbmNlKSB7XG4gICAgICAgIHJldHVybiBlbGVtZW50Q29tcG9uZW50SW5kZXg7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGNvbnN0IHJvb3RDb21wb25lbnRWaWV3ID0gZ2V0Q29tcG9uZW50TFZpZXdCeUluZGV4KEhFQURFUl9PRkZTRVQsIGxWaWV3KTtcbiAgICBjb25zdCByb290Q29tcG9uZW50ID0gcm9vdENvbXBvbmVudFZpZXdbQ09OVEVYVF07XG4gICAgaWYgKHJvb3RDb21wb25lbnQgPT09IGNvbXBvbmVudEluc3RhbmNlKSB7XG4gICAgICByZXR1cm4gSEVBREVSX09GRlNFVDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIC0xO1xufVxuZnVuY3Rpb24gZmluZFZpYURpcmVjdGl2ZShsVmlldywgZGlyZWN0aXZlSW5zdGFuY2UpIHtcbiAgbGV0IHROb2RlID0gbFZpZXdbVFZJRVddLmZpcnN0Q2hpbGQ7XG4gIHdoaWxlICh0Tm9kZSkge1xuICAgIGNvbnN0IGRpcmVjdGl2ZUluZGV4U3RhcnQgPSB0Tm9kZS5kaXJlY3RpdmVTdGFydDtcbiAgICBjb25zdCBkaXJlY3RpdmVJbmRleEVuZCA9IHROb2RlLmRpcmVjdGl2ZUVuZDtcbiAgICBmb3IgKGxldCBpID0gZGlyZWN0aXZlSW5kZXhTdGFydDsgaSA8IGRpcmVjdGl2ZUluZGV4RW5kOyBpKyspIHtcbiAgICAgIGlmIChsVmlld1tpXSA9PT0gZGlyZWN0aXZlSW5zdGFuY2UpIHtcbiAgICAgICAgcmV0dXJuIHROb2RlLmluZGV4O1xuICAgICAgfVxuICAgIH1cbiAgICB0Tm9kZSA9IHRyYXZlcnNlTmV4dEVsZW1lbnQodE5vZGUpO1xuICB9XG4gIHJldHVybiAtMTtcbn1cbmZ1bmN0aW9uIGdldERpcmVjdGl2ZXNBdE5vZGVJbmRleChub2RlSW5kZXgsIGxWaWV3KSB7XG4gIGNvbnN0IHROb2RlID0gbFZpZXdbVFZJRVddLmRhdGFbbm9kZUluZGV4XTtcbiAgaWYgKHROb2RlLmRpcmVjdGl2ZVN0YXJ0ID09PSAwKSByZXR1cm4gRU1QVFlfQVJSQVk7XG4gIGNvbnN0IHJlc3VsdHMgPSBbXTtcbiAgZm9yIChsZXQgaSA9IHROb2RlLmRpcmVjdGl2ZVN0YXJ0OyBpIDwgdE5vZGUuZGlyZWN0aXZlRW5kOyBpKyspIHtcbiAgICBjb25zdCBkaXJlY3RpdmVJbnN0YW5jZSA9IGxWaWV3W2ldO1xuICAgIGlmICghaXNDb21wb25lbnRJbnN0YW5jZShkaXJlY3RpdmVJbnN0YW5jZSkpIHtcbiAgICAgIHJlc3VsdHMucHVzaChkaXJlY3RpdmVJbnN0YW5jZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHRzO1xufVxuZnVuY3Rpb24gZ2V0Q29tcG9uZW50QXROb2RlSW5kZXgobm9kZUluZGV4LCBsVmlldykge1xuICBjb25zdCB0Tm9kZSA9IGxWaWV3W1RWSUVXXS5kYXRhW25vZGVJbmRleF07XG4gIHJldHVybiBpc0NvbXBvbmVudEhvc3QodE5vZGUpID8gbFZpZXdbdE5vZGUuZGlyZWN0aXZlU3RhcnQgKyB0Tm9kZS5jb21wb25lbnRPZmZzZXRdIDogbnVsbDtcbn1cbmZ1bmN0aW9uIGRpc2NvdmVyTG9jYWxSZWZzKGxWaWV3LCBub2RlSW5kZXgpIHtcbiAgY29uc3QgdE5vZGUgPSBsVmlld1tUVklFV10uZGF0YVtub2RlSW5kZXhdO1xuICBpZiAodE5vZGUgJiYgdE5vZGUubG9jYWxOYW1lcykge1xuICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xuICAgIGxldCBsb2NhbEluZGV4ID0gdE5vZGUuaW5kZXggKyAxO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdE5vZGUubG9jYWxOYW1lcy5sZW5ndGg7IGkgKz0gMikge1xuICAgICAgcmVzdWx0W3ROb2RlLmxvY2FsTmFtZXNbaV1dID0gbFZpZXdbbG9jYWxJbmRleF07XG4gICAgICBsb2NhbEluZGV4Kys7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5mdW5jdGlvbiBnZXRSb290Vmlldyhjb21wb25lbnRPckxWaWV3KSB7XG4gIG5nRGV2TW9kZSAmJiBhc3NlcnREZWZpbmVkKGNvbXBvbmVudE9yTFZpZXcsICdjb21wb25lbnQnKTtcbiAgbGV0IGxWaWV3ID0gaXNMVmlldyhjb21wb25lbnRPckxWaWV3KSA/IGNvbXBvbmVudE9yTFZpZXcgOiByZWFkUGF0Y2hlZExWaWV3KGNvbXBvbmVudE9yTFZpZXcpO1xuICB3aGlsZSAobFZpZXcgJiYgIWlzUm9vdFZpZXcobFZpZXcpKSB7XG4gICAgbFZpZXcgPSBnZXRMVmlld1BhcmVudChsVmlldyk7XG4gIH1cbiAgbmdEZXZNb2RlICYmIGFzc2VydExWaWV3KGxWaWV3KTtcbiAgcmV0dXJuIGxWaWV3O1xufVxuZnVuY3Rpb24gZ2V0Um9vdENvbnRleHQodmlld09yQ29tcG9uZW50KSB7XG4gIGNvbnN0IHJvb3RWaWV3ID0gZ2V0Um9vdFZpZXcodmlld09yQ29tcG9uZW50KTtcbiAgbmdEZXZNb2RlICYmIGFzc2VydERlZmluZWQocm9vdFZpZXdbQ09OVEVYVF0sICdSb290IHZpZXcgaGFzIG5vIGNvbnRleHQuIFBlcmhhcHMgaXQgaXMgZGlzY29ubmVjdGVkPycpO1xuICByZXR1cm4gcm9vdFZpZXdbQ09OVEVYVF07XG59XG5mdW5jdGlvbiBnZXRGaXJzdExDb250YWluZXIobFZpZXcpIHtcbiAgcmV0dXJuIGdldE5lYXJlc3RMQ29udGFpbmVyKGxWaWV3W0NISUxEX0hFQURdKTtcbn1cbmZ1bmN0aW9uIGdldE5leHRMQ29udGFpbmVyKGNvbnRhaW5lcikge1xuICByZXR1cm4gZ2V0TmVhcmVzdExDb250YWluZXIoY29udGFpbmVyW05FWFRdKTtcbn1cbmZ1bmN0aW9uIGdldE5lYXJlc3RMQ29udGFpbmVyKHZpZXdPckNvbnRhaW5lcikge1xuICB3aGlsZSAodmlld09yQ29udGFpbmVyICE9PSBudWxsICYmICFpc0xDb250YWluZXIodmlld09yQ29udGFpbmVyKSkge1xuICAgIHZpZXdPckNvbnRhaW5lciA9IHZpZXdPckNvbnRhaW5lcltORVhUXTtcbiAgfVxuICByZXR1cm4gdmlld09yQ29udGFpbmVyO1xufVxuZnVuY3Rpb24gZ2V0Q29tcG9uZW50KGVsZW1lbnQpIHtcbiAgbmdEZXZNb2RlICYmIGFzc2VydERvbUVsZW1lbnQoZWxlbWVudCk7XG4gIGNvbnN0IGNvbnRleHQgPSBnZXRMQ29udGV4dChlbGVtZW50KTtcbiAgaWYgKGNvbnRleHQgPT09IG51bGwpIHJldHVybiBudWxsO1xuICBpZiAoY29udGV4dC5jb21wb25lbnQgPT09IHVuZGVmaW5lZCkge1xuICAgIGNvbnN0IGxWaWV3ID0gY29udGV4dC5sVmlldztcbiAgICBpZiAobFZpZXcgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb250ZXh0LmNvbXBvbmVudCA9IGdldENvbXBvbmVudEF0Tm9kZUluZGV4KGNvbnRleHQubm9kZUluZGV4LCBsVmlldyk7XG4gIH1cbiAgcmV0dXJuIGNvbnRleHQuY29tcG9uZW50O1xufVxuZnVuY3Rpb24gZ2V0Q29udGV4dChlbGVtZW50KSB7XG4gIGFzc2VydERvbUVsZW1lbnQoZWxlbWVudCk7XG4gIGNvbnN0IGNvbnRleHQgPSBnZXRMQ29udGV4dChlbGVtZW50KTtcbiAgY29uc3QgbFZpZXcgPSBjb250ZXh0ID8gY29udGV4dC5sVmlldyA6IG51bGw7XG4gIHJldHVybiBsVmlldyA9PT0gbnVsbCA/IG51bGwgOiBsVmlld1tDT05URVhUXTtcbn1cbmZ1bmN0aW9uIGdldE93bmluZ0NvbXBvbmVudChlbGVtZW50T3JEaXIpIHtcbiAgY29uc3QgY29udGV4dCA9IGdldExDb250ZXh0KGVsZW1lbnRPckRpcik7XG4gIGxldCBsVmlldyA9IGNvbnRleHQgPyBjb250ZXh0LmxWaWV3IDogbnVsbDtcbiAgaWYgKGxWaWV3ID09PSBudWxsKSByZXR1cm4gbnVsbDtcbiAgbGV0IHBhcmVudDtcbiAgd2hpbGUgKGxWaWV3W1RWSUVXXS50eXBlID09PSAyICYmIChwYXJlbnQgPSBnZXRMVmlld1BhcmVudChsVmlldykpKSB7XG4gICAgbFZpZXcgPSBwYXJlbnQ7XG4gIH1cbiAgcmV0dXJuIGlzUm9vdFZpZXcobFZpZXcpID8gbnVsbCA6IGxWaWV3W0NPTlRFWFRdO1xufVxuZnVuY3Rpb24gZ2V0Um9vdENvbXBvbmVudHMoZWxlbWVudE9yRGlyKSB7XG4gIGNvbnN0IGxWaWV3ID0gcmVhZFBhdGNoZWRMVmlldyhlbGVtZW50T3JEaXIpO1xuICByZXR1cm4gbFZpZXcgIT09IG51bGwgPyBbZ2V0Um9vdENvbnRleHQobFZpZXcpXSA6IFtdO1xufVxuZnVuY3Rpb24gZ2V0SW5qZWN0b3IoZWxlbWVudE9yRGlyKSB7XG4gIGNvbnN0IGNvbnRleHQgPSBnZXRMQ29udGV4dChlbGVtZW50T3JEaXIpO1xuICBjb25zdCBsVmlldyA9IGNvbnRleHQgPyBjb250ZXh0LmxWaWV3IDogbnVsbDtcbiAgaWYgKGxWaWV3ID09PSBudWxsKSByZXR1cm4gSW5qZWN0b3IuTlVMTDtcbiAgY29uc3QgdE5vZGUgPSBsVmlld1tUVklFV10uZGF0YVtjb250ZXh0Lm5vZGVJbmRleF07XG4gIHJldHVybiBuZXcgTm9kZUluamVjdG9yKHROb2RlLCBsVmlldyk7XG59XG5mdW5jdGlvbiBnZXRJbmplY3Rpb25Ub2tlbnMoZWxlbWVudCkge1xuICBjb25zdCBjb250ZXh0ID0gZ2V0TENvbnRleHQoZWxlbWVudCk7XG4gIGNvbnN0IGxWaWV3ID0gY29udGV4dCA/IGNvbnRleHQubFZpZXcgOiBudWxsO1xuICBpZiAobFZpZXcgPT09IG51bGwpIHJldHVybiBbXTtcbiAgY29uc3QgdFZpZXcgPSBsVmlld1tUVklFV107XG4gIGNvbnN0IHROb2RlID0gdFZpZXcuZGF0YVtjb250ZXh0Lm5vZGVJbmRleF07XG4gIGNvbnN0IHByb3ZpZGVyVG9rZW5zID0gW107XG4gIGNvbnN0IHN0YXJ0SW5kZXggPSB0Tm9kZS5wcm92aWRlckluZGV4ZXMgJiAxMDQ4NTc1O1xuICBjb25zdCBlbmRJbmRleCA9IHROb2RlLmRpcmVjdGl2ZUVuZDtcbiAgZm9yIChsZXQgaSA9IHN0YXJ0SW5kZXg7IGkgPCBlbmRJbmRleDsgaSsrKSB7XG4gICAgbGV0IHZhbHVlID0gdFZpZXcuZGF0YVtpXTtcbiAgICBpZiAoaXNEaXJlY3RpdmVEZWZIYWNrKHZhbHVlKSkge1xuICAgICAgdmFsdWUgPSB2YWx1ZS50eXBlO1xuICAgIH1cbiAgICBwcm92aWRlclRva2Vucy5wdXNoKHZhbHVlKTtcbiAgfVxuICByZXR1cm4gcHJvdmlkZXJUb2tlbnM7XG59XG5mdW5jdGlvbiBnZXREaXJlY3RpdmVzKG5vZGUpIHtcbiAgaWYgKG5vZGUgaW5zdGFuY2VvZiBUZXh0KSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIGNvbnN0IGNvbnRleHQgPSBnZXRMQ29udGV4dChub2RlKTtcbiAgY29uc3QgbFZpZXcgPSBjb250ZXh0ID8gY29udGV4dC5sVmlldyA6IG51bGw7XG4gIGlmIChsVmlldyA9PT0gbnVsbCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICBjb25zdCB0VmlldyA9IGxWaWV3W1RWSUVXXTtcbiAgY29uc3Qgbm9kZUluZGV4ID0gY29udGV4dC5ub2RlSW5kZXg7XG4gIGlmICghdFZpZXc/LmRhdGFbbm9kZUluZGV4XSkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICBpZiAoY29udGV4dC5kaXJlY3RpdmVzID09PSB1bmRlZmluZWQpIHtcbiAgICBjb250ZXh0LmRpcmVjdGl2ZXMgPSBnZXREaXJlY3RpdmVzQXROb2RlSW5kZXgobm9kZUluZGV4LCBsVmlldyk7XG4gIH1cbiAgcmV0dXJuIGNvbnRleHQuZGlyZWN0aXZlcyA9PT0gbnVsbCA/IFtdIDogWy4uLmNvbnRleHQuZGlyZWN0aXZlc107XG59XG52YXIgQWN4Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKEFjeENoYW5nZURldGVjdGlvblN0cmF0ZWd5KSB7XG4gIEFjeENoYW5nZURldGVjdGlvblN0cmF0ZWd5W0FjeENoYW5nZURldGVjdGlvblN0cmF0ZWd5W1wiRGVmYXVsdFwiXSA9IDBdID0gXCJEZWZhdWx0XCI7XG4gIEFjeENoYW5nZURldGVjdGlvblN0cmF0ZWd5W0FjeENoYW5nZURldGVjdGlvblN0cmF0ZWd5W1wiT25QdXNoXCJdID0gMV0gPSBcIk9uUHVzaFwiO1xuICByZXR1cm4gQWN4Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3k7XG59KEFjeENoYW5nZURldGVjdGlvblN0cmF0ZWd5IHx8IHt9KTtcbnZhciBBY3hWaWV3RW5jYXBzdWxhdGlvbiA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoQWN4Vmlld0VuY2Fwc3VsYXRpb24pIHtcbiAgQWN4Vmlld0VuY2Fwc3VsYXRpb25bQWN4Vmlld0VuY2Fwc3VsYXRpb25bXCJFbXVsYXRlZFwiXSA9IDBdID0gXCJFbXVsYXRlZFwiO1xuICBBY3hWaWV3RW5jYXBzdWxhdGlvbltBY3hWaWV3RW5jYXBzdWxhdGlvbltcIk5vbmVcIl0gPSAxXSA9IFwiTm9uZVwiO1xuICByZXR1cm4gQWN4Vmlld0VuY2Fwc3VsYXRpb247XG59KEFjeFZpZXdFbmNhcHN1bGF0aW9uIHx8IHt9KTtcbmZ1bmN0aW9uIGdldERpcmVjdGl2ZU1ldGFkYXRhJDEoZGlyZWN0aXZlT3JDb21wb25lbnRJbnN0YW5jZSkge1xuICBjb25zdCB7XG4gICAgY29uc3RydWN0b3JcbiAgfSA9IGRpcmVjdGl2ZU9yQ29tcG9uZW50SW5zdGFuY2U7XG4gIGlmICghY29uc3RydWN0b3IpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBmaW5kIHRoZSBpbnN0YW5jZSBjb25zdHJ1Y3RvcicpO1xuICB9XG4gIGNvbnN0IGNvbXBvbmVudERlZiA9IGdldENvbXBvbmVudERlZihjb25zdHJ1Y3Rvcik7XG4gIGlmIChjb21wb25lbnREZWYpIHtcbiAgICBjb25zdCBpbnB1dHMgPSBleHRyYWN0SW5wdXREZWJ1Z01ldGFkYXRhKGNvbXBvbmVudERlZi5pbnB1dHMpO1xuICAgIHJldHVybiB7XG4gICAgICBpbnB1dHMsXG4gICAgICBvdXRwdXRzOiBjb21wb25lbnREZWYub3V0cHV0cyxcbiAgICAgIGVuY2Fwc3VsYXRpb246IGNvbXBvbmVudERlZi5lbmNhcHN1bGF0aW9uLFxuICAgICAgY2hhbmdlRGV0ZWN0aW9uOiBjb21wb25lbnREZWYub25QdXNoID8gQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoIDogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuRWFnZXJcbiAgICB9O1xuICB9XG4gIGNvbnN0IGRpcmVjdGl2ZURlZiA9IGdldERpcmVjdGl2ZURlZihjb25zdHJ1Y3Rvcik7XG4gIGlmIChkaXJlY3RpdmVEZWYpIHtcbiAgICBjb25zdCBpbnB1dHMgPSBleHRyYWN0SW5wdXREZWJ1Z01ldGFkYXRhKGRpcmVjdGl2ZURlZi5pbnB1dHMpO1xuICAgIHJldHVybiB7XG4gICAgICBpbnB1dHMsXG4gICAgICBvdXRwdXRzOiBkaXJlY3RpdmVEZWYub3V0cHV0c1xuICAgIH07XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5mdW5jdGlvbiBnZXRMb2NhbFJlZnModGFyZ2V0KSB7XG4gIGNvbnN0IGNvbnRleHQgPSBnZXRMQ29udGV4dCh0YXJnZXQpO1xuICBpZiAoY29udGV4dCA9PT0gbnVsbCkgcmV0dXJuIHt9O1xuICBpZiAoY29udGV4dC5sb2NhbFJlZnMgPT09IHVuZGVmaW5lZCkge1xuICAgIGNvbnN0IGxWaWV3ID0gY29udGV4dC5sVmlldztcbiAgICBpZiAobFZpZXcgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgY29udGV4dC5sb2NhbFJlZnMgPSBkaXNjb3ZlckxvY2FsUmVmcyhsVmlldywgY29udGV4dC5ub2RlSW5kZXgpO1xuICB9XG4gIHJldHVybiBjb250ZXh0LmxvY2FsUmVmcyB8fCB7fTtcbn1cbmZ1bmN0aW9uIGdldEhvc3RFbGVtZW50KGNvbXBvbmVudE9yRGlyZWN0aXZlKSB7XG4gIHJldHVybiBnZXRMQ29udGV4dChjb21wb25lbnRPckRpcmVjdGl2ZSkubmF0aXZlO1xufVxuZnVuY3Rpb24gZ2V0TGlzdGVuZXJzKGVsZW1lbnQpIHtcbiAgbmdEZXZNb2RlICYmIGFzc2VydERvbUVsZW1lbnQoZWxlbWVudCk7XG4gIGNvbnN0IGxDb250ZXh0ID0gZ2V0TENvbnRleHQoZWxlbWVudCk7XG4gIGNvbnN0IGxWaWV3ID0gbENvbnRleHQgPT09IG51bGwgPyBudWxsIDogbENvbnRleHQubFZpZXc7XG4gIGlmIChsVmlldyA9PT0gbnVsbCkgcmV0dXJuIFtdO1xuICBjb25zdCB0VmlldyA9IGxWaWV3W1RWSUVXXTtcbiAgY29uc3QgbENsZWFudXAgPSBsVmlld1tDTEVBTlVQXTtcbiAgY29uc3QgdENsZWFudXAgPSB0Vmlldy5jbGVhbnVwO1xuICBjb25zdCBsaXN0ZW5lcnMgPSBbXTtcbiAgaWYgKHRDbGVhbnVwICYmIGxDbGVhbnVwKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0Q2xlYW51cC5sZW5ndGg7KSB7XG4gICAgICBjb25zdCBmaXJzdFBhcmFtID0gdENsZWFudXBbaSsrXTtcbiAgICAgIGNvbnN0IHNlY29uZFBhcmFtID0gdENsZWFudXBbaSsrXTtcbiAgICAgIGlmICh0eXBlb2YgZmlyc3RQYXJhbSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY29uc3QgbmFtZSA9IGZpcnN0UGFyYW07XG4gICAgICAgIGNvbnN0IGxpc3RlbmVyRWxlbWVudCA9IHVud3JhcFJOb2RlKGxWaWV3W3NlY29uZFBhcmFtXSk7XG4gICAgICAgIGNvbnN0IGNhbGxiYWNrID0gbENsZWFudXBbdENsZWFudXBbaSsrXV07XG4gICAgICAgIGNvbnN0IHVzZUNhcHR1cmVPckluZHggPSB0Q2xlYW51cFtpKytdO1xuICAgICAgICBjb25zdCB0eXBlID0gdHlwZW9mIHVzZUNhcHR1cmVPckluZHggPT09ICdib29sZWFuJyB8fCB1c2VDYXB0dXJlT3JJbmR4ID49IDAgPyAnZG9tJyA6ICdvdXRwdXQnO1xuICAgICAgICBjb25zdCB1c2VDYXB0dXJlID0gdHlwZW9mIHVzZUNhcHR1cmVPckluZHggPT09ICdib29sZWFuJyA/IHVzZUNhcHR1cmVPckluZHggOiBmYWxzZTtcbiAgICAgICAgaWYgKGVsZW1lbnQgPT0gbGlzdGVuZXJFbGVtZW50KSB7XG4gICAgICAgICAgbGlzdGVuZXJzLnB1c2goe1xuICAgICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICBjYWxsYmFjayxcbiAgICAgICAgICAgIHVzZUNhcHR1cmUsXG4gICAgICAgICAgICB0eXBlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgbGlzdGVuZXJzLnNvcnQoc29ydExpc3RlbmVycyk7XG4gIHJldHVybiBsaXN0ZW5lcnM7XG59XG5mdW5jdGlvbiBzb3J0TGlzdGVuZXJzKGEsIGIpIHtcbiAgaWYgKGEubmFtZSA9PSBiLm5hbWUpIHJldHVybiAwO1xuICByZXR1cm4gYS5uYW1lIDwgYi5uYW1lID8gLTEgOiAxO1xufVxuZnVuY3Rpb24gaXNEaXJlY3RpdmVEZWZIYWNrKG9iaikge1xuICByZXR1cm4gb2JqLnR5cGUgIT09IHVuZGVmaW5lZCAmJiBvYmouZGVjbGFyZWRJbnB1dHMgIT09IHVuZGVmaW5lZCAmJiBvYmoucmVzb2x2ZUhvc3REaXJlY3RpdmVzICE9PSB1bmRlZmluZWQ7XG59XG5mdW5jdGlvbiBhc3NlcnREb21FbGVtZW50KHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgRWxlbWVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgISh2YWx1ZSBpbnN0YW5jZW9mIEVsZW1lbnQpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RpbmcgaW5zdGFuY2Ugb2YgRE9NIEVsZW1lbnQnKTtcbiAgfVxufVxuZnVuY3Rpb24gZXh0cmFjdElucHV0RGVidWdNZXRhZGF0YShpbnB1dHMpIHtcbiAgY29uc3QgcmVzID0ge307XG4gIGZvciAoY29uc3Qga2V5IGluIGlucHV0cykge1xuICAgIGlmIChpbnB1dHMuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgY29uc3QgdmFsdWUgPSBpbnB1dHNba2V5XTtcbiAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJlc1trZXldID0gdmFsdWVbMF07XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiByZXM7XG59XG5sZXQgRE9DVU1FTlQgPSB1bmRlZmluZWQ7XG5mdW5jdGlvbiBzZXREb2N1bWVudChkb2N1bWVudCkge1xuICBET0NVTUVOVCA9IGRvY3VtZW50O1xufVxuZnVuY3Rpb24gZ2V0RG9jdW1lbnQoKSB7XG4gIGlmIChET0NVTUVOVCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIERPQ1VNRU5UO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQ7XG4gIH1cbiAgdGhyb3cgbmV3IFJ1bnRpbWVFcnJvcigyMTAsICh0eXBlb2YgbmdEZXZNb2RlID09PSAndW5kZWZpbmVkJyB8fCBuZ0Rldk1vZGUpICYmIGBUaGUgZG9jdW1lbnQgb2JqZWN0IGlzIG5vdCBhdmFpbGFibGUgaW4gdGhpcyBjb250ZXh0LiBNYWtlIHN1cmUgdGhlIERPQ1VNRU5UIGluamVjdGlvbiB0b2tlbiBpcyBwcm92aWRlZC5gKTtcbn1cbmNvbnN0IEFQUF9JRCA9IC8qI19fUFVSRV9fKi9uZXcgSW5qZWN0aW9uVG9rZW4odHlwZW9mIG5nRGV2TW9kZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbmdEZXZNb2RlID8gJ0FwcElkJyA6ICcnLCB7XG4gIGZhY3Rvcnk6ICgpID0+IERFRkFVTFRfQVBQX0lEXG59KTtcbmNvbnN0IERFRkFVTFRfQVBQX0lEID0gJ25nJztcbmNvbnN0IHZhbGlkQXBwSWRJbml0aWFsaXplciA9IHtcbiAgcHJvdmlkZTogRU5WSVJPTk1FTlRfSU5JVElBTElaRVIsXG4gIG11bHRpOiB0cnVlLFxuICB1c2VWYWx1ZTogKCkgPT4ge1xuICAgIGNvbnN0IGFwcElkID0gaW5qZWN0KEFQUF9JRCk7XG4gICAgY29uc3QgaXNBbHBoYW51bWVyaWMgPSAvXlthLXpBLVowLTlcXC1fXSskLy50ZXN0KGFwcElkKTtcbiAgICBpZiAoIWlzQWxwaGFudW1lcmljKSB7XG4gICAgICB0aHJvdyBuZXcgUnVudGltZUVycm9yKDIxMSwgYEFQUF9JRCB2YWx1ZSBcIiR7YXBwSWR9XCIgaXMgbm90IGFscGhhbnVtZXJpYy4gYCArIGBUaGUgQVBQX0lEIG11c3QgYmUgYSBzdHJpbmcgb2YgYWxwaGFudW1lcmljIGNoYXJhY3RlcnMuIChhLXpBLVowLTkpLCBoeXBoZW5zICgtKSBhbmQgdW5kZXJzY29yZXMgKF8pIGFyZSBhbGxvd2VkLmApO1xuICAgIH1cbiAgfVxufTtcbmNvbnN0IFBMQVRGT1JNX0lOSVRJQUxJWkVSID0gLyojX19QVVJFX18qL25ldyBJbmplY3Rpb25Ub2tlbih0eXBlb2YgbmdEZXZNb2RlICE9PSAndW5kZWZpbmVkJyAmJiBuZ0Rldk1vZGUgPyAnUGxhdGZvcm0gSW5pdGlhbGl6ZXInIDogJycpO1xuY29uc3QgUExBVEZPUk1fSUQgPSAvKiNfX1BVUkVfXyovbmV3IEluamVjdGlvblRva2VuKHR5cGVvZiBuZ0Rldk1vZGUgIT09ICd1bmRlZmluZWQnICYmIG5nRGV2TW9kZSA/ICdQbGF0Zm9ybSBJRCcgOiAnJywge1xuICBwcm92aWRlZEluOiAncGxhdGZvcm0nLFxuICBmYWN0b3J5OiAoKSA9PiAndW5rbm93bidcbn0pO1xuY29uc3QgQU5JTUFUSU9OX01PRFVMRV9UWVBFID0gLyojX19QVVJFX18qL25ldyBJbmplY3Rpb25Ub2tlbih0eXBlb2YgbmdEZXZNb2RlICE9PSAndW5kZWZpbmVkJyAmJiBuZ0Rldk1vZGUgPyAnQW5pbWF0aW9uTW9kdWxlVHlwZScgOiAnJyk7XG5jb25zdCBDU1BfTk9OQ0UgPSAvKiNfX1BVUkVfXyovbmV3IEluamVjdGlvblRva2VuKHR5cGVvZiBuZ0Rldk1vZGUgIT09ICd1bmRlZmluZWQnICYmIG5nRGV2TW9kZSA/ICdDU1Agbm9uY2UnIDogJycsIHtcbiAgZmFjdG9yeTogKCkgPT4ge1xuICAgIHJldHVybiBpbmplY3QoRE9DVU1FTlQkMSkuYm9keT8ucXVlcnlTZWxlY3RvcignW25nQ3NwTm9uY2VdJyk/LmdldEF0dHJpYnV0ZSgnbmdDc3BOb25jZScpIHx8IG51bGw7XG4gIH1cbn0pO1xuY29uc3QgSU1BR0VfQ09ORklHX0RFRkFVTFRTID0ge1xuICBicmVha3BvaW50czogWzE2LCAzMiwgNDgsIDY0LCA5NiwgMTI4LCAyNTYsIDM4NCwgNjQwLCA3NTAsIDgyOCwgMTA4MCwgMTIwMCwgMTkyMCwgMjA0OCwgMzg0MF0sXG4gIHBsYWNlaG9sZGVyUmVzb2x1dGlvbjogMzAsXG4gIGRpc2FibGVJbWFnZVNpemVXYXJuaW5nOiBmYWxzZSxcbiAgZGlzYWJsZUltYWdlTGF6eUxvYWRXYXJuaW5nOiBmYWxzZVxufTtcbmNvbnN0IElNQUdFX0NPTkZJRyA9IC8qI19fUFVSRV9fKi9uZXcgSW5qZWN0aW9uVG9rZW4odHlwZW9mIG5nRGV2TW9kZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbmdEZXZNb2RlID8gJ0ltYWdlQ29uZmlnJyA6ICcnLCB7XG4gIGZhY3Rvcnk6ICgpID0+IElNQUdFX0NPTkZJR19ERUZBVUxUU1xufSk7XG5mdW5jdGlvbiBtYWtlU3RhdGVLZXkoa2V5KSB7XG4gIHJldHVybiBrZXk7XG59XG5sZXQgVHJhbnNmZXJTdGF0ZSA9IC8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICBjbGFzcyBUcmFuc2ZlclN0YXRlIHtcbiAgICBzdGF0aWMgybVwcm92ID0gLyogQF9fUFVSRV9fICovXG4gICAgX19kZWZpbmVJbmplY3RhYmxlKHtcbiAgICAgIHRva2VuOiBUcmFuc2ZlclN0YXRlLFxuICAgICAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxuICAgICAgZmFjdG9yeTogKCkgPT4ge1xuICAgICAgICBjb25zdCB0cmFuc2ZlclN0YXRlID0gbmV3IFRyYW5zZmVyU3RhdGUoKTtcbiAgICAgICAgaWYgKHR5cGVvZiBuZ1NlcnZlck1vZGUgPT09ICd1bmRlZmluZWQnIHx8ICFuZ1NlcnZlck1vZGUpIHtcbiAgICAgICAgICB0cmFuc2ZlclN0YXRlLnN0b3JlID0gcmV0cmlldmVUcmFuc2ZlcnJlZFN0YXRlKGluamVjdChET0NVTUVOVCQxKSwgaW5qZWN0KEFQUF9JRCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cmFuc2ZlclN0YXRlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHN0b3JlID0ge307XG4gICAgb25TZXJpYWxpemVDYWxsYmFja3MgPSB7fTtcbiAgICBnZXQoa2V5LCBkZWZhdWx0VmFsdWUpIHtcbiAgICAgIHJldHVybiB0aGlzLnN0b3JlW2tleV0gIT09IHVuZGVmaW5lZCA/IHRoaXMuc3RvcmVba2V5XSA6IGRlZmF1bHRWYWx1ZTtcbiAgICB9XG4gICAgc2V0KGtleSwgdmFsdWUpIHtcbiAgICAgIHRoaXMuc3RvcmVba2V5XSA9IHZhbHVlO1xuICAgIH1cbiAgICByZW1vdmUoa2V5KSB7XG4gICAgICBkZWxldGUgdGhpcy5zdG9yZVtrZXldO1xuICAgIH1cbiAgICBoYXNLZXkoa2V5KSB7XG4gICAgICByZXR1cm4gdGhpcy5zdG9yZS5oYXNPd25Qcm9wZXJ0eShrZXkpO1xuICAgIH1cbiAgICBnZXQgaXNFbXB0eSgpIHtcbiAgICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLnN0b3JlKS5sZW5ndGggPT09IDA7XG4gICAgfVxuICAgIG9uU2VyaWFsaXplKGtleSwgY2FsbGJhY2spIHtcbiAgICAgIHRoaXMub25TZXJpYWxpemVDYWxsYmFja3Nba2V5XSA9IGNhbGxiYWNrO1xuICAgIH1cbiAgICB0b0pzb24oKSB7XG4gICAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLm9uU2VyaWFsaXplQ2FsbGJhY2tzKSB7XG4gICAgICAgIGlmICh0aGlzLm9uU2VyaWFsaXplQ2FsbGJhY2tzLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5zdG9yZVtrZXldID0gdGhpcy5vblNlcmlhbGl6ZUNhbGxiYWNrc1trZXldKCk7XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdFeGNlcHRpb24gaW4gb25TZXJpYWxpemUgY2FsbGJhY2s6ICcsIGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHRoaXMuc3RvcmUpLnJlcGxhY2UoLzwvZywgJ1xcXFx1MDAzQycpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gVHJhbnNmZXJTdGF0ZTtcbn0pKCk7XG5mdW5jdGlvbiByZXRyaWV2ZVRyYW5zZmVycmVkU3RhdGUoZG9jLCBhcHBJZCkge1xuICBjb25zdCBzY3JpcHQgPSBkb2MuZ2V0RWxlbWVudEJ5SWQoYXBwSWQgKyAnLXN0YXRlJyk7XG4gIGlmIChzY3JpcHQ/LnRleHRDb250ZW50KSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBKU09OLnBhcnNlKHNjcmlwdC50ZXh0Q29udGVudCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS53YXJuKCdFeGNlcHRpb24gd2hpbGUgcmVzdG9yaW5nIFRyYW5zZmVyU3RhdGUgZm9yIGFwcCAnICsgYXBwSWQsIGUpO1xuICAgIH1cbiAgfVxuICByZXR1cm4ge307XG59XG5jb25zdCBSRUZFUkVOQ0VfTk9ERV9IT1NUID0gJ2gnO1xuY29uc3QgUkVGRVJFTkNFX05PREVfQk9EWSA9ICdiJztcbmNvbnN0IE5PREVfTkFWSUdBVElPTl9TVEVQX0ZJUlNUX0NISUxEID0gJ2YnO1xuY29uc3QgTk9ERV9OQVZJR0FUSU9OX1NURVBfTkVYVF9TSUJMSU5HID0gJ24nO1xuY29uc3QgRUxFTUVOVF9DT05UQUlORVJTID0gJ2UnO1xuY29uc3QgVEVNUExBVEVTID0gJ3QnO1xuY29uc3QgQ09OVEFJTkVSUyA9ICdjJztcbmNvbnN0IE1VTFRJUExJRVIgPSAneCc7XG5jb25zdCBOVU1fUk9PVF9OT0RFUyA9ICdyJztcbmNvbnN0IFRFTVBMQVRFX0lEID0gJ2knO1xuY29uc3QgTk9ERVMgPSAnbic7XG5jb25zdCBESVNDT05ORUNURURfTk9ERVMgPSAnZCc7XG5jb25zdCBJMThOX0RBVEEgPSAnbCc7XG5jb25zdCBERUZFUl9CTE9DS19JRCA9ICdkaSc7XG5jb25zdCBERUZFUl9CTE9DS19TVEFURSQxID0gJ3MnO1xuY29uc3QgREVGRVJfUEFSRU5UX0JMT0NLX0lEID0gJ3AnO1xuY29uc3QgREVGRVJfSFlEUkFURV9UUklHR0VSUyA9ICd0JztcbmNvbnN0IElTX0hZRFJBVElPTl9ET01fUkVVU0VfRU5BQkxFRCA9IC8qI19fUFVSRV9fKi9uZXcgSW5qZWN0aW9uVG9rZW4odHlwZW9mIG5nRGV2TW9kZSA9PT0gJ3VuZGVmaW5lZCcgfHwgbmdEZXZNb2RlID8gJ0lTX0hZRFJBVElPTl9ET01fUkVVU0VfRU5BQkxFRCcgOiAnJyk7XG5jb25zdCBQUkVTRVJWRV9IT1NUX0NPTlRFTlRfREVGQVVMVCA9IGZhbHNlO1xuY29uc3QgUFJFU0VSVkVfSE9TVF9DT05URU5UID0gLyojX19QVVJFX18qL25ldyBJbmplY3Rpb25Ub2tlbih0eXBlb2YgbmdEZXZNb2RlID09PSAndW5kZWZpbmVkJyB8fCBuZ0Rldk1vZGUgPyAnUFJFU0VSVkVfSE9TVF9DT05URU5UJyA6ICcnLCB7XG4gIGZhY3Rvcnk6ICgpID0+IFBSRVNFUlZFX0hPU1RfQ09OVEVOVF9ERUZBVUxUXG59KTtcbmNvbnN0IElTX0kxOE5fSFlEUkFUSU9OX0VOQUJMRUQgPSAvKiNfX1BVUkVfXyovbmV3IEluamVjdGlvblRva2VuKHR5cGVvZiBuZ0Rldk1vZGUgPT09ICd1bmRlZmluZWQnIHx8IG5nRGV2TW9kZSA/ICdJU19JMThOX0hZRFJBVElPTl9FTkFCTEVEJyA6ICcnKTtcbmNvbnN0IElTX0VWRU5UX1JFUExBWV9FTkFCTEVEID0gLyojX19QVVJFX18qL25ldyBJbmplY3Rpb25Ub2tlbih0eXBlb2YgbmdEZXZNb2RlID09PSAndW5kZWZpbmVkJyB8fCBuZ0Rldk1vZGUgPyAnSVNfRVZFTlRfUkVQTEFZX0VOQUJMRUQnIDogJycpO1xuY29uc3QgRVZFTlRfUkVQTEFZX0VOQUJMRURfREVGQVVMVCA9IGZhbHNlO1xuY29uc3QgRVZFTlRfUkVQTEFZX1FVRVVFID0gLyojX19QVVJFX18qL25ldyBJbmplY3Rpb25Ub2tlbih0eXBlb2YgbmdEZXZNb2RlICE9PSAndW5kZWZpbmVkJyAmJiBuZ0Rldk1vZGUgPyAnRVZFTlRfUkVQTEFZX1FVRVVFJyA6ICcnLCB7XG4gIGZhY3Rvcnk6ICgpID0+IFtdXG59KTtcbmNvbnN0IElTX0lOQ1JFTUVOVEFMX0hZRFJBVElPTl9FTkFCTEVEID0gLyojX19QVVJFX18qL25ldyBJbmplY3Rpb25Ub2tlbih0eXBlb2YgbmdEZXZNb2RlID09PSAndW5kZWZpbmVkJyB8fCBuZ0Rldk1vZGUgPyAnSVNfSU5DUkVNRU5UQUxfSFlEUkFUSU9OX0VOQUJMRUQnIDogJycpO1xuY29uc3QgSlNBQ1RJT05fQkxPQ0tfRUxFTUVOVF9NQVAgPSAvKiNfX1BVUkVfXyovbmV3IEluamVjdGlvblRva2VuKHR5cGVvZiBuZ0Rldk1vZGUgIT09ICd1bmRlZmluZWQnICYmIG5nRGV2TW9kZSA/ICdKU0FDVElPTl9CTE9DS19FTEVNRU5UX01BUCcgOiAnJywge1xuICBmYWN0b3J5OiAoKSA9PiBuZXcgTWFwKClcbn0pO1xuY29uc3QgSVNfRU5BQkxFRF9CTE9DS0lOR19JTklUSUFMX05BVklHQVRJT04gPSAvKiNfX1BVUkVfXyovbmV3IEluamVjdGlvblRva2VuKHR5cGVvZiBuZ0Rldk1vZGUgPT09ICd1bmRlZmluZWQnIHx8IG5nRGV2TW9kZSA/ICdJU19FTkFCTEVEX0JMT0NLSU5HX0lOSVRJQUxfTkFWSUdBVElPTicgOiAnJyk7XG5jb25zdCBldmVudExpc3RlbmVyT3B0aW9ucyA9IHtcbiAgcGFzc2l2ZTogdHJ1ZSxcbiAgY2FwdHVyZTogdHJ1ZVxufTtcbmNvbnN0IGhvdmVyVHJpZ2dlcnMgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbmNvbnN0IGludGVyYWN0aW9uVHJpZ2dlcnMgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbmNvbnN0IHZpZXdwb3J0VHJpZ2dlcnMgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbmNvbnN0IGludGVyYWN0aW9uRXZlbnROYW1lcyA9IFsnY2xpY2snLCAna2V5ZG93biddO1xuY29uc3QgaG92ZXJFdmVudE5hbWVzID0gWydtb3VzZWVudGVyJywgJ21vdXNlb3ZlcicsICdmb2N1c2luJ107XG5jb25zdCBpbnRlcnNlY3Rpb25PYnNlcnZlcnMgPSAvKiNfX1BVUkVfXyovbmV3IE1hcCgpO1xuY2xhc3MgRGVmZXJFdmVudEVudHJ5IHtcbiAgY2FsbGJhY2tzID0gLyojX19QVVJFX18qL25ldyBTZXQoKTtcbiAgbGlzdGVuZXIgPSAoKSA9PiB7XG4gICAgZm9yIChjb25zdCBjYWxsYmFjayBvZiB0aGlzLmNhbGxiYWNrcykge1xuICAgICAgY2FsbGJhY2soKTtcbiAgICB9XG4gIH07XG59XG5mdW5jdGlvbiBvbkludGVyYWN0aW9uKHRyaWdnZXIsIGNhbGxiYWNrKSB7XG4gIGxldCBlbnRyeSA9IGludGVyYWN0aW9uVHJpZ2dlcnMuZ2V0KHRyaWdnZXIpO1xuICBpZiAoIWVudHJ5KSB7XG4gICAgZW50cnkgPSBuZXcgRGVmZXJFdmVudEVudHJ5KCk7XG4gICAgaW50ZXJhY3Rpb25UcmlnZ2Vycy5zZXQodHJpZ2dlciwgZW50cnkpO1xuICAgIGZvciAoY29uc3QgbmFtZSBvZiBpbnRlcmFjdGlvbkV2ZW50TmFtZXMpIHtcbiAgICAgIHRyaWdnZXIuYWRkRXZlbnRMaXN0ZW5lcihuYW1lLCBlbnRyeS5saXN0ZW5lciwgZXZlbnRMaXN0ZW5lck9wdGlvbnMpO1xuICAgIH1cbiAgfVxuICBlbnRyeS5jYWxsYmFja3MuYWRkKGNhbGxiYWNrKTtcbiAgcmV0dXJuICgpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBjYWxsYmFja3MsXG4gICAgICBsaXN0ZW5lclxuICAgIH0gPSBlbnRyeTtcbiAgICBjYWxsYmFja3MuZGVsZXRlKGNhbGxiYWNrKTtcbiAgICBpZiAoY2FsbGJhY2tzLnNpemUgPT09IDApIHtcbiAgICAgIGludGVyYWN0aW9uVHJpZ2dlcnMuZGVsZXRlKHRyaWdnZXIpO1xuICAgICAgZm9yIChjb25zdCBuYW1lIG9mIGludGVyYWN0aW9uRXZlbnROYW1lcykge1xuICAgICAgICB0cmlnZ2VyLnJlbW92ZUV2ZW50TGlzdGVuZXIobmFtZSwgbGlzdGVuZXIsIGV2ZW50TGlzdGVuZXJPcHRpb25zKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG59XG5mdW5jdGlvbiBvbkhvdmVyKHRyaWdnZXIsIGNhbGxiYWNrKSB7XG4gIGxldCBlbnRyeSA9IGhvdmVyVHJpZ2dlcnMuZ2V0KHRyaWdnZXIpO1xuICBpZiAoIWVudHJ5KSB7XG4gICAgZW50cnkgPSBuZXcgRGVmZXJFdmVudEVudHJ5KCk7XG4gICAgaG92ZXJUcmlnZ2Vycy5zZXQodHJpZ2dlciwgZW50cnkpO1xuICAgIGZvciAoY29uc3QgbmFtZSBvZiBob3ZlckV2ZW50TmFtZXMpIHtcbiAgICAgIHRyaWdnZXIuYWRkRXZlbnRMaXN0ZW5lcihuYW1lLCBlbnRyeS5saXN0ZW5lciwgZXZlbnRMaXN0ZW5lck9wdGlvbnMpO1xuICAgIH1cbiAgfVxuICBlbnRyeS5jYWxsYmFja3MuYWRkKGNhbGxiYWNrKTtcbiAgcmV0dXJuICgpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBjYWxsYmFja3MsXG4gICAgICBsaXN0ZW5lclxuICAgIH0gPSBlbnRyeTtcbiAgICBjYWxsYmFja3MuZGVsZXRlKGNhbGxiYWNrKTtcbiAgICBpZiAoY2FsbGJhY2tzLnNpemUgPT09IDApIHtcbiAgICAgIGZvciAoY29uc3QgbmFtZSBvZiBob3ZlckV2ZW50TmFtZXMpIHtcbiAgICAgICAgdHJpZ2dlci5yZW1vdmVFdmVudExpc3RlbmVyKG5hbWUsIGxpc3RlbmVyLCBldmVudExpc3RlbmVyT3B0aW9ucyk7XG4gICAgICB9XG4gICAgICBob3ZlclRyaWdnZXJzLmRlbGV0ZSh0cmlnZ2VyKTtcbiAgICB9XG4gIH07XG59XG5mdW5jdGlvbiBjcmVhdGVJbnRlcnNlY3Rpb25PYnNlcnZlcihvcHRpb25zKSB7XG4gIGNvbnN0IGtleSA9IGdldEludGVyc2VjdGlvbk9ic2VydmVyS2V5KG9wdGlvbnMpO1xuICByZXR1cm4gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKGVudHJpZXMgPT4ge1xuICAgIGZvciAoY29uc3QgY3VycmVudCBvZiBlbnRyaWVzKSB7XG4gICAgICBpZiAoY3VycmVudC5pc0ludGVyc2VjdGluZyAmJiB2aWV3cG9ydFRyaWdnZXJzLmhhcyhjdXJyZW50LnRhcmdldCkpIHtcbiAgICAgICAgdmlld3BvcnRUcmlnZ2Vycy5nZXQoY3VycmVudC50YXJnZXQpPy5nZXQoa2V5KT8ubGlzdGVuZXIoKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIG9wdGlvbnMpO1xufVxuZnVuY3Rpb24gb25WaWV3cG9ydCh0cmlnZ2VyLCBjYWxsYmFjaywgb2JzZXJ2ZXJGYWN0b3J5Rm4sIG9wdGlvbnMpIHtcbiAgY29uc3Qga2V5ID0gZ2V0SW50ZXJzZWN0aW9uT2JzZXJ2ZXJLZXkob3B0aW9ucyk7XG4gIGxldCBlbnRyeSA9IHZpZXdwb3J0VHJpZ2dlcnMuZ2V0KHRyaWdnZXIpPy5nZXQoa2V5KTtcbiAgaWYgKCFpbnRlcnNlY3Rpb25PYnNlcnZlcnMuaGFzKGtleSkpIHtcbiAgICBpbnRlcnNlY3Rpb25PYnNlcnZlcnMuc2V0KGtleSwge1xuICAgICAgb2JzZXJ2ZXI6IG9ic2VydmVyRmFjdG9yeUZuKG9wdGlvbnMpLFxuICAgICAgY291bnQ6IDBcbiAgICB9KTtcbiAgfVxuICBjb25zdCBjb25maWcgPSBpbnRlcnNlY3Rpb25PYnNlcnZlcnMuZ2V0KGtleSk7XG4gIGlmICghZW50cnkpIHtcbiAgICBlbnRyeSA9IG5ldyBEZWZlckV2ZW50RW50cnkoKTtcbiAgICBjb25maWcub2JzZXJ2ZXIub2JzZXJ2ZSh0cmlnZ2VyKTtcbiAgICBsZXQgdHJpZ2dlckNvbmZpZyA9IHZpZXdwb3J0VHJpZ2dlcnMuZ2V0KHRyaWdnZXIpO1xuICAgIGlmICh0cmlnZ2VyQ29uZmlnKSB7XG4gICAgICB0cmlnZ2VyQ29uZmlnLnNldChrZXksIGVudHJ5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdHJpZ2dlckNvbmZpZyA9IG5ldyBNYXAoKTtcbiAgICAgIHZpZXdwb3J0VHJpZ2dlcnMuc2V0KHRyaWdnZXIsIHRyaWdnZXJDb25maWcpO1xuICAgIH1cbiAgICB0cmlnZ2VyQ29uZmlnLnNldChrZXksIGVudHJ5KTtcbiAgICBjb25maWcuY291bnQrKztcbiAgfVxuICBlbnRyeS5jYWxsYmFja3MuYWRkKGNhbGxiYWNrKTtcbiAgcmV0dXJuICgpID0+IHtcbiAgICBpZiAoIXZpZXdwb3J0VHJpZ2dlcnMuZ2V0KHRyaWdnZXIpPy5oYXMoa2V5KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBlbnRyeS5jYWxsYmFja3MuZGVsZXRlKGNhbGxiYWNrKTtcbiAgICBpZiAoZW50cnkuY2FsbGJhY2tzLnNpemUgPT09IDApIHtcbiAgICAgIGNvbmZpZy5vYnNlcnZlci51bm9ic2VydmUodHJpZ2dlcik7XG4gICAgICBjb25maWcuY291bnQtLTtcbiAgICAgIGNvbnN0IHRyaWdnZXJDb25maWcgPSB2aWV3cG9ydFRyaWdnZXJzLmdldCh0cmlnZ2VyKTtcbiAgICAgIGlmICh0cmlnZ2VyQ29uZmlnKSB7XG4gICAgICAgIHRyaWdnZXJDb25maWcuZGVsZXRlKGtleSk7XG4gICAgICAgIGlmICh0cmlnZ2VyQ29uZmlnLnNpemUgPT09IDApIHtcbiAgICAgICAgICB2aWV3cG9ydFRyaWdnZXJzLmRlbGV0ZSh0cmlnZ2VyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoY29uZmlnLmNvdW50ID09PSAwKSB7XG4gICAgICBjb25maWcub2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgICAgaW50ZXJzZWN0aW9uT2JzZXJ2ZXJzLmRlbGV0ZShrZXkpO1xuICAgIH1cbiAgfTtcbn1cbmZ1bmN0aW9uIGdldEludGVyc2VjdGlvbk9ic2VydmVyS2V5KG9wdGlvbnMpIHtcbiAgaWYgKCFvcHRpb25zKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG4gIHJldHVybiBgJHtvcHRpb25zLnJvb3RNYXJnaW59LyR7dHlwZW9mIG9wdGlvbnMudGhyZXNob2xkID09PSAnbnVtYmVyJyA/IG9wdGlvbnMudGhyZXNob2xkIDogb3B0aW9ucy50aHJlc2hvbGQ/LmpvaW4oJ1xcbicpfWA7XG59XG5jb25zdCBERUZFUl9CTE9DS19TU1JfSURfQVRUUklCVVRFID0gJ25nYic7XG5mdW5jdGlvbiBzZXRKU0FjdGlvbkF0dHJpYnV0ZXMobmF0aXZlRWxlbWVudCwgZXZlbnRUeXBlcywgcGFyZW50RGVmZXJCbG9ja0lkID0gbnVsbCkge1xuICBpZiAoZXZlbnRUeXBlcy5sZW5ndGggPT09IDAgfHwgbmF0aXZlRWxlbWVudC5ub2RlVHlwZSAhPT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgZXhpc3RpbmdBdHRyID0gbmF0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoQXR0cmlidXRlJDEuSlNBQ1RJT04pO1xuICBjb25zdCBwYXJ0cyA9IGV2ZW50VHlwZXMucmVkdWNlKChwcmV2LCBjdXJyKSA9PiB7XG4gICAgcmV0dXJuIChleGlzdGluZ0F0dHI/LmluZGV4T2YoY3VycikgPz8gLTEpID09PSAtMSA/IHByZXYgKyBjdXJyICsgJzo7JyA6IHByZXY7XG4gIH0sICcnKTtcbiAgbmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoQXR0cmlidXRlJDEuSlNBQ1RJT04sIGAke2V4aXN0aW5nQXR0ciA/PyAnJ30ke3BhcnRzfWApO1xuICBjb25zdCBibG9ja05hbWUgPSBwYXJlbnREZWZlckJsb2NrSWQgPz8gJyc7XG4gIGlmIChibG9ja05hbWUgIT09ICcnICYmIHBhcnRzLmxlbmd0aCA+IDApIHtcbiAgICBuYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZShERUZFUl9CTE9DS19TU1JfSURfQVRUUklCVVRFLCBibG9ja05hbWUpO1xuICB9XG59XG5jb25zdCBzaGFyZWRTdGFzaEZ1bmN0aW9uID0gKHJFbCwgZXZlbnRUeXBlLCBsaXN0ZW5lckZuKSA9PiB7XG4gIGNvbnN0IGVsID0gckVsO1xuICBjb25zdCBldmVudExpc3RlbmVyTWFwID0gZWwuX19qc2FjdGlvbl9mbnMgPz8gbmV3IE1hcCgpO1xuICBjb25zdCBldmVudExpc3RlbmVycyA9IGV2ZW50TGlzdGVuZXJNYXAuZ2V0KGV2ZW50VHlwZSkgPz8gW107XG4gIGV2ZW50TGlzdGVuZXJzLnB1c2gobGlzdGVuZXJGbik7XG4gIGV2ZW50TGlzdGVuZXJNYXAuc2V0KGV2ZW50VHlwZSwgZXZlbnRMaXN0ZW5lcnMpO1xuICBlbC5fX2pzYWN0aW9uX2ZucyA9IGV2ZW50TGlzdGVuZXJNYXA7XG59O1xuY29uc3Qgc2hhcmVkTWFwRnVuY3Rpb24gPSAockVsLCBqc0FjdGlvbk1hcCkgPT4ge1xuICBjb25zdCBlbCA9IHJFbDtcbiAgbGV0IGJsb2NrTmFtZSA9IGVsLmdldEF0dHJpYnV0ZShERUZFUl9CTE9DS19TU1JfSURfQVRUUklCVVRFKSA/PyAnJztcbiAgY29uc3QgYmxvY2tTZXQgPSBqc0FjdGlvbk1hcC5nZXQoYmxvY2tOYW1lKSA/PyBuZXcgU2V0KCk7XG4gIGlmICghYmxvY2tTZXQuaGFzKGVsKSkge1xuICAgIGJsb2NrU2V0LmFkZChlbCk7XG4gIH1cbiAganNBY3Rpb25NYXAuc2V0KGJsb2NrTmFtZSwgYmxvY2tTZXQpO1xufTtcbmZ1bmN0aW9uIHJlbW92ZUxpc3RlbmVyc0Zyb21CbG9ja3MoYmxvY2tOYW1lcywganNBY3Rpb25NYXApIHtcbiAgaWYgKGJsb2NrTmFtZXMubGVuZ3RoID4gMCkge1xuICAgIGxldCBibG9ja0xpc3QgPSBbXTtcbiAgICBmb3IgKGxldCBibG9ja05hbWUgb2YgYmxvY2tOYW1lcykge1xuICAgICAgaWYgKGpzQWN0aW9uTWFwLmhhcyhibG9ja05hbWUpKSB7XG4gICAgICAgIGJsb2NrTGlzdCA9IFsuLi5ibG9ja0xpc3QsIC4uLmpzQWN0aW9uTWFwLmdldChibG9ja05hbWUpXTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgcmVwbGF5TGlzdCA9IG5ldyBTZXQoYmxvY2tMaXN0KTtcbiAgICByZXBsYXlMaXN0LmZvckVhY2gocmVtb3ZlTGlzdGVuZXJzKTtcbiAgfVxufVxuY29uc3QgcmVtb3ZlTGlzdGVuZXJzID0gZWwgPT4ge1xuICBlbC5yZW1vdmVBdHRyaWJ1dGUoQXR0cmlidXRlJDEuSlNBQ1RJT04pO1xuICBlbC5yZW1vdmVBdHRyaWJ1dGUoREVGRVJfQkxPQ0tfU1NSX0lEX0FUVFJJQlVURSk7XG4gIGVsLl9fanNhY3Rpb25fZm5zID0gdW5kZWZpbmVkO1xufTtcbmNvbnN0IEpTQUNUSU9OX0VWRU5UX0NPTlRSQUNUID0gLyojX19QVVJFX18qL25ldyBJbmplY3Rpb25Ub2tlbih0eXBlb2YgbmdEZXZNb2RlICE9PSAndW5kZWZpbmVkJyAmJiBuZ0Rldk1vZGUgPyAnRVZFTlRfQ09OVFJBQ1RfREVUQUlMUycgOiAnJywge1xuICBmYWN0b3J5OiAoKSA9PiAoe30pXG59KTtcbmZ1bmN0aW9uIGludm9rZUxpc3RlbmVycyhldmVudCwgY3VycmVudFRhcmdldCkge1xuICBjb25zdCBoYW5kbGVyRm5zID0gY3VycmVudFRhcmdldD8uX19qc2FjdGlvbl9mbnM/LmdldChldmVudC50eXBlKTtcbiAgaWYgKCFoYW5kbGVyRm5zIHx8ICFjdXJyZW50VGFyZ2V0Py5pc0Nvbm5lY3RlZCkge1xuICAgIHJldHVybjtcbiAgfVxuICBmb3IgKGNvbnN0IGhhbmRsZXIgb2YgaGFuZGxlckZucykge1xuICAgIGhhbmRsZXIoZXZlbnQpO1xuICB9XG59XG5jb25zdCBzdGFzaEV2ZW50TGlzdGVuZXJzID0gLyojX19QVVJFX18qL25ldyBNYXAoKTtcbmZ1bmN0aW9uIHNldFN0YXNoRm4oYXBwSWQsIGZuKSB7XG4gIHN0YXNoRXZlbnRMaXN0ZW5lcnMuc2V0KGFwcElkLCBmbik7XG4gIHJldHVybiAoKSA9PiBzdGFzaEV2ZW50TGlzdGVuZXJzLmRlbGV0ZShhcHBJZCk7XG59XG5sZXQgaXNTdGFzaEV2ZW50TGlzdGVuZXJJbXBsRW5hYmxlZCA9IGZhbHNlO1xubGV0IF9zdGFzaEV2ZW50TGlzdGVuZXJJbXBsID0gKGxWaWV3LCB0YXJnZXQsIGV2ZW50TmFtZSwgd3JhcHBlZExpc3RlbmVyKSA9PiB7fTtcbmZ1bmN0aW9uIHN0YXNoRXZlbnRMaXN0ZW5lckltcGwobFZpZXcsIHRhcmdldCwgZXZlbnROYW1lLCB3cmFwcGVkTGlzdGVuZXIpIHtcbiAgX3N0YXNoRXZlbnRMaXN0ZW5lckltcGwobFZpZXcsIHRhcmdldCwgZXZlbnROYW1lLCB3cmFwcGVkTGlzdGVuZXIpO1xufVxuZnVuY3Rpb24gZW5hYmxlU3Rhc2hFdmVudExpc3RlbmVySW1wbCgpIHtcbiAgaWYgKCFpc1N0YXNoRXZlbnRMaXN0ZW5lckltcGxFbmFibGVkKSB7XG4gICAgX3N0YXNoRXZlbnRMaXN0ZW5lckltcGwgPSAobFZpZXcsIHRhcmdldCwgZXZlbnROYW1lLCB3cmFwcGVkTGlzdGVuZXIpID0+IHtcbiAgICAgIGNvbnN0IGFwcElkID0gbFZpZXdbSU5KRUNUT1JdLmdldChBUFBfSUQpO1xuICAgICAgY29uc3Qgc3Rhc2hFdmVudExpc3RlbmVyID0gc3Rhc2hFdmVudExpc3RlbmVycy5nZXQoYXBwSWQpO1xuICAgICAgc3Rhc2hFdmVudExpc3RlbmVyPy4odGFyZ2V0LCBldmVudE5hbWUsIHdyYXBwZWRMaXN0ZW5lcik7XG4gICAgfTtcbiAgICBpc1N0YXNoRXZlbnRMaXN0ZW5lckltcGxFbmFibGVkID0gdHJ1ZTtcbiAgfVxufVxuY29uc3QgREVIWURSQVRFRF9CTE9DS19SRUdJU1RSWSA9IC8qI19fUFVSRV9fKi9uZXcgSW5qZWN0aW9uVG9rZW4odHlwZW9mIG5nRGV2TW9kZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbmdEZXZNb2RlID8gJ0RFSFlEUkFURURfQkxPQ0tfUkVHSVNUUlknIDogJycpO1xubGV0IERlaHlkcmF0ZWRCbG9ja1JlZ2lzdHJ5ID0gLyojX19QVVJFX18qLygoKSA9PiB7XG4gIGNsYXNzIERlaHlkcmF0ZWRCbG9ja1JlZ2lzdHJ5IHtcbiAgICByZWdpc3RyeSA9IG5ldyBNYXAoKTtcbiAgICBjbGVhbnVwRm5zID0gbmV3IE1hcCgpO1xuICAgIGpzQWN0aW9uTWFwID0gaW5qZWN0KEpTQUNUSU9OX0JMT0NLX0VMRU1FTlRfTUFQKTtcbiAgICBjb250cmFjdCA9IGluamVjdChKU0FDVElPTl9FVkVOVF9DT05UUkFDVCk7XG4gICAgYWRkKGJsb2NrSWQsIGluZm8pIHtcbiAgICAgIHRoaXMucmVnaXN0cnkuc2V0KGJsb2NrSWQsIGluZm8pO1xuICAgICAgaWYgKHRoaXMuYXdhaXRpbmdDYWxsYmFja3MuaGFzKGJsb2NrSWQpKSB7XG4gICAgICAgIGNvbnN0IGF3YWl0aW5nQ2FsbGJhY2tzID0gdGhpcy5hd2FpdGluZ0NhbGxiYWNrcy5nZXQoYmxvY2tJZCk7XG4gICAgICAgIGZvciAoY29uc3QgY2Igb2YgYXdhaXRpbmdDYWxsYmFja3MpIHtcbiAgICAgICAgICBjYigpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGdldChibG9ja0lkKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZWdpc3RyeS5nZXQoYmxvY2tJZCkgPz8gbnVsbDtcbiAgICB9XG4gICAgaGFzKGJsb2NrSWQpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlZ2lzdHJ5LmhhcyhibG9ja0lkKTtcbiAgICB9XG4gICAgY2xlYW51cChoeWRyYXRlZEJsb2Nrcykge1xuICAgICAgcmVtb3ZlTGlzdGVuZXJzRnJvbUJsb2NrcyhoeWRyYXRlZEJsb2NrcywgdGhpcy5qc0FjdGlvbk1hcCk7XG4gICAgICBmb3IgKGxldCBibG9ja0lkIG9mIGh5ZHJhdGVkQmxvY2tzKSB7XG4gICAgICAgIHRoaXMucmVnaXN0cnkuZGVsZXRlKGJsb2NrSWQpO1xuICAgICAgICB0aGlzLmpzQWN0aW9uTWFwLmRlbGV0ZShibG9ja0lkKTtcbiAgICAgICAgdGhpcy5pbnZva2VUcmlnZ2VyQ2xlYW51cEZucyhibG9ja0lkKTtcbiAgICAgICAgdGhpcy5oeWRyYXRpbmcuZGVsZXRlKGJsb2NrSWQpO1xuICAgICAgICB0aGlzLmF3YWl0aW5nQ2FsbGJhY2tzLmRlbGV0ZShibG9ja0lkKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnNpemUgPT09IDApIHtcbiAgICAgICAgdGhpcy5jb250cmFjdC5pbnN0YW5jZT8uY2xlYW5VcCgpO1xuICAgICAgfVxuICAgIH1cbiAgICBnZXQgc2l6ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlZ2lzdHJ5LnNpemU7XG4gICAgfVxuICAgIGFkZENsZWFudXBGbihibG9ja0lkLCBmbikge1xuICAgICAgbGV0IGNsZWFudXBGdW5jdGlvbnMgPSBbXTtcbiAgICAgIGlmICh0aGlzLmNsZWFudXBGbnMuaGFzKGJsb2NrSWQpKSB7XG4gICAgICAgIGNsZWFudXBGdW5jdGlvbnMgPSB0aGlzLmNsZWFudXBGbnMuZ2V0KGJsb2NrSWQpO1xuICAgICAgfVxuICAgICAgY2xlYW51cEZ1bmN0aW9ucy5wdXNoKGZuKTtcbiAgICAgIHRoaXMuY2xlYW51cEZucy5zZXQoYmxvY2tJZCwgY2xlYW51cEZ1bmN0aW9ucyk7XG4gICAgfVxuICAgIGludm9rZVRyaWdnZXJDbGVhbnVwRm5zKGJsb2NrSWQpIHtcbiAgICAgIGNvbnN0IGZucyA9IHRoaXMuY2xlYW51cEZucy5nZXQoYmxvY2tJZCkgPz8gW107XG4gICAgICBmb3IgKGxldCBmbiBvZiBmbnMpIHtcbiAgICAgICAgZm4oKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuY2xlYW51cEZucy5kZWxldGUoYmxvY2tJZCk7XG4gICAgfVxuICAgIGh5ZHJhdGluZyA9IG5ldyBNYXAoKTtcbiAgICBhd2FpdGluZ0NhbGxiYWNrcyA9IG5ldyBNYXAoKTtcbiAgICBhd2FpdFBhcmVudEJsb2NrKHRvcG1vc3RQYXJlbnRCbG9jaywgY2FsbGJhY2spIHtcbiAgICAgIGNvbnN0IHBhcmVudEJsb2NrQXdhaXRDYWxsYmFja3MgPSB0aGlzLmF3YWl0aW5nQ2FsbGJhY2tzLmdldCh0b3Btb3N0UGFyZW50QmxvY2spID8/IFtdO1xuICAgICAgcGFyZW50QmxvY2tBd2FpdENhbGxiYWNrcy5wdXNoKGNhbGxiYWNrKTtcbiAgICAgIHRoaXMuYXdhaXRpbmdDYWxsYmFja3Muc2V0KHRvcG1vc3RQYXJlbnRCbG9jaywgcGFyZW50QmxvY2tBd2FpdENhbGxiYWNrcyk7XG4gICAgfVxuICAgIHN0YXRpYyDJtXByb3YgPSAvKiBAX19QVVJFX18gKi9cbiAgICBfX2RlZmluZUluamVjdGFibGUoe1xuICAgICAgdG9rZW46IERlaHlkcmF0ZWRCbG9ja1JlZ2lzdHJ5LFxuICAgICAgcHJvdmlkZWRJbjogbnVsbCxcbiAgICAgIGZhY3Rvcnk6ICgpID0+IG5ldyBEZWh5ZHJhdGVkQmxvY2tSZWdpc3RyeSgpXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIERlaHlkcmF0ZWRCbG9ja1JlZ2lzdHJ5O1xufSkoKTtcbmZ1bmN0aW9uIGlzRGV0YWNoZWRCeUkxOG4odE5vZGUpIHtcbiAgcmV0dXJuICh0Tm9kZS5mbGFncyAmIDMyKSA9PT0gMzI7XG59XG5jb25zdCBUUkFOU0ZFUl9TVEFURV9UT0tFTl9JRCA9ICdfX25naERhdGFfXyc7XG5jb25zdCBOR0hfREFUQV9LRVkgPSAvKiNfX1BVUkVfXyovbWFrZVN0YXRlS2V5KFRSQU5TRkVSX1NUQVRFX1RPS0VOX0lEKTtcbmNvbnN0IFRSQU5TRkVSX1NUQVRFX0RFRkVSX0JMT0NLU19JTkZPID0gJ19fbmdoRGVmZXJEYXRhX18nO1xuY29uc3QgTkdIX0RFRkVSX0JMT0NLU19LRVkgPSAvKiNfX1BVUkVfXyovbWFrZVN0YXRlS2V5KFRSQU5TRkVSX1NUQVRFX0RFRkVSX0JMT0NLU19JTkZPKTtcbmZ1bmN0aW9uIGlzSW50ZXJuYWxIeWRyYXRpb25UcmFuc2ZlclN0YXRlS2V5KGtleSkge1xuICByZXR1cm4ga2V5ID09PSBUUkFOU0ZFUl9TVEFURV9UT0tFTl9JRCB8fCBrZXkgPT09IFRSQU5TRkVSX1NUQVRFX0RFRkVSX0JMT0NLU19JTkZPO1xufVxuY29uc3QgTkdIX0FUVFJfTkFNRSA9ICduZ2gnO1xuY29uc3QgU1NSX0NPTlRFTlRfSU5URUdSSVRZX01BUktFUiA9ICduZ2htJztcbmxldCBfcmV0cmlldmVIeWRyYXRpb25JbmZvSW1wbCA9ICgpID0+IG51bGw7XG5mdW5jdGlvbiByZXRyaWV2ZUh5ZHJhdGlvbkluZm9JbXBsKHJOb2RlLCBpbmplY3RvciwgaXNSb290VmlldyA9IGZhbHNlKSB7XG4gIGxldCBuZ2hBdHRyVmFsdWUgPSByTm9kZS5nZXRBdHRyaWJ1dGUoTkdIX0FUVFJfTkFNRSk7XG4gIGlmIChuZ2hBdHRyVmFsdWUgPT0gbnVsbCkgcmV0dXJuIG51bGw7XG4gIGNvbnN0IFtjb21wb25lbnRWaWV3TmdoLCByb290Vmlld05naF0gPSBuZ2hBdHRyVmFsdWUuc3BsaXQoJ3wnKTtcbiAgbmdoQXR0clZhbHVlID0gaXNSb290VmlldyA/IHJvb3RWaWV3TmdoIDogY29tcG9uZW50Vmlld05naDtcbiAgaWYgKCFuZ2hBdHRyVmFsdWUpIHJldHVybiBudWxsO1xuICBjb25zdCByb290TmdoID0gcm9vdFZpZXdOZ2ggPyBgfCR7cm9vdFZpZXdOZ2h9YCA6ICcnO1xuICBjb25zdCByZW1haW5pbmdOZ2ggPSBpc1Jvb3RWaWV3ID8gY29tcG9uZW50Vmlld05naCA6IHJvb3ROZ2g7XG4gIGxldCBkYXRhID0ge307XG4gIGlmIChuZ2hBdHRyVmFsdWUgIT09ICcnKSB7XG4gICAgY29uc3QgdHJhbnNmZXJTdGF0ZSA9IGluamVjdG9yLmdldChUcmFuc2ZlclN0YXRlLCBudWxsLCB7XG4gICAgICBvcHRpb25hbDogdHJ1ZVxuICAgIH0pO1xuICAgIGlmICh0cmFuc2ZlclN0YXRlICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBuZ2hEYXRhID0gdHJhbnNmZXJTdGF0ZS5nZXQoTkdIX0RBVEFfS0VZLCBbXSk7XG4gICAgICBkYXRhID0gbmdoRGF0YVtOdW1iZXIobmdoQXR0clZhbHVlKV07XG4gICAgICBuZ0Rldk1vZGUgJiYgYXNzZXJ0RGVmaW5lZChkYXRhLCAnVW5hYmxlIHRvIHJldHJpZXZlIGh5ZHJhdGlvbiBpbmZvIGZyb20gdGhlIFRyYW5zZmVyU3RhdGUuJyk7XG4gICAgfVxuICB9XG4gIGNvbnN0IGRlaHlkcmF0ZWRWaWV3ID0ge1xuICAgIGRhdGEsXG4gICAgZmlyc3RDaGlsZDogck5vZGUuZmlyc3RDaGlsZCA/PyBudWxsXG4gIH07XG4gIGlmIChpc1Jvb3RWaWV3KSB7XG4gICAgZGVoeWRyYXRlZFZpZXcuZmlyc3RDaGlsZCA9IHJOb2RlO1xuICAgIHNldFNlZ21lbnRIZWFkKGRlaHlkcmF0ZWRWaWV3LCAwLCByTm9kZS5uZXh0U2libGluZyk7XG4gIH1cbiAgaWYgKHJlbWFpbmluZ05naCkge1xuICAgIHJOb2RlLnNldEF0dHJpYnV0ZShOR0hfQVRUUl9OQU1FLCByZW1haW5pbmdOZ2gpO1xuICB9IGVsc2Uge1xuICAgIHJOb2RlLnJlbW92ZUF0dHJpYnV0ZShOR0hfQVRUUl9OQU1FKTtcbiAgfVxuICBuZ0Rldk1vZGUgJiYgbWFya1JOb2RlQXNDbGFpbWVkQnlIeWRyYXRpb24ock5vZGUsIGZhbHNlKTtcbiAgbmdEZXZNb2RlICYmIG5nRGV2TW9kZS5oeWRyYXRlZENvbXBvbmVudHMrKztcbiAgcmV0dXJuIGRlaHlkcmF0ZWRWaWV3O1xufVxuZnVuY3Rpb24gZW5hYmxlUmV0cmlldmVIeWRyYXRpb25JbmZvSW1wbCgpIHtcbiAgX3JldHJpZXZlSHlkcmF0aW9uSW5mb0ltcGwgPSByZXRyaWV2ZUh5ZHJhdGlvbkluZm9JbXBsO1xufVxuZnVuY3Rpb24gcmV0cmlldmVIeWRyYXRpb25JbmZvKHJOb2RlLCBpbmplY3RvciwgaXNSb290VmlldyA9IGZhbHNlKSB7XG4gIHJldHVybiBfcmV0cmlldmVIeWRyYXRpb25JbmZvSW1wbChyTm9kZSwgaW5qZWN0b3IsIGlzUm9vdFZpZXcpO1xufVxuZnVuY3Rpb24gZ2V0TE5vZGVGb3JIeWRyYXRpb24odmlld1JlZikge1xuICBsZXQgbFZpZXcgPSB2aWV3UmVmLl9sVmlldztcbiAgY29uc3QgdFZpZXcgPSBsVmlld1tUVklFV107XG4gIGlmICh0Vmlldy50eXBlID09PSAyKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgaWYgKGlzUm9vdFZpZXcobFZpZXcpKSB7XG4gICAgbFZpZXcgPSBsVmlld1tIRUFERVJfT0ZGU0VUXTtcbiAgfVxuICByZXR1cm4gbFZpZXc7XG59XG5mdW5jdGlvbiBnZXRUZXh0Tm9kZUNvbnRlbnQobm9kZSkge1xuICByZXR1cm4gbm9kZS50ZXh0Q29udGVudD8ucmVwbGFjZSgvXFxzL2dtLCAnJyk7XG59XG5mdW5jdGlvbiBwcm9jZXNzVGV4dE5vZGVNYXJrZXJzQmVmb3JlSHlkcmF0aW9uKG5vZGUpIHtcbiAgY29uc3QgZG9jID0gZ2V0RG9jdW1lbnQoKTtcbiAgY29uc3QgY29tbWVudE5vZGVzSXRlcmF0b3IgPSBkb2MuY3JlYXRlTm9kZUl0ZXJhdG9yKG5vZGUsIE5vZGVGaWx0ZXIuU0hPV19DT01NRU5ULCB7XG4gICAgYWNjZXB0Tm9kZShub2RlKSB7XG4gICAgICBjb25zdCBjb250ZW50ID0gZ2V0VGV4dE5vZGVDb250ZW50KG5vZGUpO1xuICAgICAgY29uc3QgaXNUZXh0Tm9kZU1hcmtlciA9IGNvbnRlbnQgPT09IFwibmdldG5cIiB8fCBjb250ZW50ID09PSBcIm5ndG5zXCI7XG4gICAgICByZXR1cm4gaXNUZXh0Tm9kZU1hcmtlciA/IE5vZGVGaWx0ZXIuRklMVEVSX0FDQ0VQVCA6IE5vZGVGaWx0ZXIuRklMVEVSX1JFSkVDVDtcbiAgICB9XG4gIH0pO1xuICBsZXQgY3VycmVudE5vZGU7XG4gIGNvbnN0IG5vZGVzID0gW107XG4gIHdoaWxlIChjdXJyZW50Tm9kZSA9IGNvbW1lbnROb2Rlc0l0ZXJhdG9yLm5leHROb2RlKCkpIHtcbiAgICBub2Rlcy5wdXNoKGN1cnJlbnROb2RlKTtcbiAgfVxuICBmb3IgKGNvbnN0IG5vZGUgb2Ygbm9kZXMpIHtcbiAgICBpZiAobm9kZS50ZXh0Q29udGVudCA9PT0gXCJuZ2V0blwiKSB7XG4gICAgICBub2RlLnJlcGxhY2VXaXRoKGRvYy5jcmVhdGVUZXh0Tm9kZSgnJykpO1xuICAgIH0gZWxzZSB7XG4gICAgICBub2RlLnJlbW92ZSgpO1xuICAgIH1cbiAgfVxufVxudmFyIEh5ZHJhdGlvblN0YXR1cyA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoSHlkcmF0aW9uU3RhdHVzKSB7XG4gIEh5ZHJhdGlvblN0YXR1c1tcIkh5ZHJhdGVkXCJdID0gXCJoeWRyYXRlZFwiO1xuICBIeWRyYXRpb25TdGF0dXNbXCJTa2lwcGVkXCJdID0gXCJza2lwcGVkXCI7XG4gIEh5ZHJhdGlvblN0YXR1c1tcIk1pc21hdGNoZWRcIl0gPSBcIm1pc21hdGNoZWRcIjtcbiAgcmV0dXJuIEh5ZHJhdGlvblN0YXR1cztcbn0oSHlkcmF0aW9uU3RhdHVzIHx8IHt9KTtcbmNvbnN0IEhZRFJBVElPTl9JTkZPX0tFWSA9ICdfX25nRGVidWdIeWRyYXRpb25JbmZvX18nO1xuZnVuY3Rpb24gcGF0Y2hIeWRyYXRpb25JbmZvKG5vZGUsIGluZm8pIHtcbiAgbm9kZVtIWURSQVRJT05fSU5GT19LRVldID0gaW5mbztcbn1cbmZ1bmN0aW9uIHJlYWRIeWRyYXRpb25JbmZvKG5vZGUpIHtcbiAgcmV0dXJuIG5vZGVbSFlEUkFUSU9OX0lORk9fS0VZXSA/PyBudWxsO1xufVxuZnVuY3Rpb24gbWFya1JOb2RlQXNDbGFpbWVkQnlIeWRyYXRpb24obm9kZSwgY2hlY2tJZkFscmVhZHlDbGFpbWVkID0gdHJ1ZSkge1xuICBpZiAoIW5nRGV2TW9kZSkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ2FsbGluZyBgbWFya1JOb2RlQXNDbGFpbWVkQnlIeWRyYXRpb25gIGluIHByb2QgbW9kZSAnICsgJ2lzIG5vdCBzdXBwb3J0ZWQgYW5kIGxpa2VseSBhIG1pc3Rha2UuJyk7XG4gIH1cbiAgaWYgKGNoZWNrSWZBbHJlYWR5Q2xhaW1lZCAmJiBpc1JOb2RlQ2xhaW1lZEZvckh5ZHJhdGlvbihub2RlKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignVHJ5aW5nIHRvIGNsYWltIGEgbm9kZSwgd2hpY2ggd2FzIGNsYWltZWQgYWxyZWFkeS4nKTtcbiAgfVxuICBwYXRjaEh5ZHJhdGlvbkluZm8obm9kZSwge1xuICAgIHN0YXR1czogSHlkcmF0aW9uU3RhdHVzLkh5ZHJhdGVkXG4gIH0pO1xuICBuZ0Rldk1vZGUuaHlkcmF0ZWROb2RlcysrO1xufVxuZnVuY3Rpb24gbWFya1JOb2RlQXNTa2lwcGVkQnlIeWRyYXRpb24obm9kZSkge1xuICBpZiAoIW5nRGV2TW9kZSkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ2FsbGluZyBgbWFya1JOb2RlQXNTa2lwcGVkQnlIeWRyYXRpb25gIGluIHByb2QgbW9kZSAnICsgJ2lzIG5vdCBzdXBwb3J0ZWQgYW5kIGxpa2VseSBhIG1pc3Rha2UuJyk7XG4gIH1cbiAgcGF0Y2hIeWRyYXRpb25JbmZvKG5vZGUsIHtcbiAgICBzdGF0dXM6IEh5ZHJhdGlvblN0YXR1cy5Ta2lwcGVkXG4gIH0pO1xuICBuZ0Rldk1vZGUuY29tcG9uZW50c1NraXBwZWRIeWRyYXRpb24rKztcbn1cbmZ1bmN0aW9uIGNvdW50QmxvY2tzU2tpcHBlZEJ5SHlkcmF0aW9uKGluamVjdG9yKSB7XG4gIGNvbnN0IHRyYW5zZmVyU3RhdGUgPSBpbmplY3Rvci5nZXQoVHJhbnNmZXJTdGF0ZSk7XG4gIGNvbnN0IG5naERlZmVyRGF0YSA9IHRyYW5zZmVyU3RhdGUuZ2V0KE5HSF9ERUZFUl9CTE9DS1NfS0VZLCB7fSk7XG4gIGlmIChuZ0Rldk1vZGUpIHtcbiAgICBuZ0Rldk1vZGUuZGVmZXJCbG9ja3NXaXRoSW5jcmVtZW50YWxIeWRyYXRpb24gPSBPYmplY3Qua2V5cyhuZ2hEZWZlckRhdGEpLmxlbmd0aDtcbiAgfVxufVxuZnVuY3Rpb24gbWFya1JOb2RlQXNIYXZpbmdIeWRyYXRpb25NaXNtYXRjaChub2RlLCBleHBlY3RlZE5vZGVEZXRhaWxzID0gbnVsbCwgYWN0dWFsTm9kZURldGFpbHMgPSBudWxsKSB7XG4gIGlmICghbmdEZXZNb2RlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYWxsaW5nIGBtYXJrUk5vZGVBc01pc21hdGNoZWRCeUh5ZHJhdGlvbmAgaW4gcHJvZCBtb2RlICcgKyAnaXMgbm90IHN1cHBvcnRlZCBhbmQgbGlrZWx5IGEgbWlzdGFrZS4nKTtcbiAgfVxuICB3aGlsZSAobm9kZSAmJiAhZ2V0Q29tcG9uZW50KG5vZGUpKSB7XG4gICAgbm9kZSA9IG5vZGU/LnBhcmVudE5vZGU7XG4gIH1cbiAgaWYgKG5vZGUpIHtcbiAgICBwYXRjaEh5ZHJhdGlvbkluZm8obm9kZSwge1xuICAgICAgc3RhdHVzOiBIeWRyYXRpb25TdGF0dXMuTWlzbWF0Y2hlZCxcbiAgICAgIGV4cGVjdGVkTm9kZURldGFpbHMsXG4gICAgICBhY3R1YWxOb2RlRGV0YWlsc1xuICAgIH0pO1xuICB9XG59XG5mdW5jdGlvbiBpc1JOb2RlQ2xhaW1lZEZvckh5ZHJhdGlvbihub2RlKSB7XG4gIHJldHVybiByZWFkSHlkcmF0aW9uSW5mbyhub2RlKT8uc3RhdHVzID09PSBIeWRyYXRpb25TdGF0dXMuSHlkcmF0ZWQ7XG59XG5mdW5jdGlvbiBzZXRTZWdtZW50SGVhZChoeWRyYXRpb25JbmZvLCBpbmRleCwgbm9kZSkge1xuICBoeWRyYXRpb25JbmZvLnNlZ21lbnRIZWFkcyA/Pz0ge307XG4gIGh5ZHJhdGlvbkluZm8uc2VnbWVudEhlYWRzW2luZGV4XSA9IG5vZGU7XG59XG5mdW5jdGlvbiBnZXRTZWdtZW50SGVhZChoeWRyYXRpb25JbmZvLCBpbmRleCkge1xuICByZXR1cm4gaHlkcmF0aW9uSW5mby5zZWdtZW50SGVhZHM/LltpbmRleF0gPz8gbnVsbDtcbn1cbmZ1bmN0aW9uIGlzSW5jcmVtZW50YWxIeWRyYXRpb25FbmFibGVkKGluamVjdG9yKSB7XG4gIHJldHVybiBpbmplY3Rvci5nZXQoSVNfSU5DUkVNRU5UQUxfSFlEUkFUSU9OX0VOQUJMRUQsIGZhbHNlLCB7XG4gICAgb3B0aW9uYWw6IHRydWVcbiAgfSk7XG59XG5sZXQgaW5jcmVtZW50YWxIeWRyYXRpb25FbmFibGVkV2FybmVkID0gZmFsc2U7XG5mdW5jdGlvbiByZXNldEluY3JlbWVudGFsSHlkcmF0aW9uRW5hYmxlZFdhcm5lZEZvclRlc3RzKCkge1xuICBpbmNyZW1lbnRhbEh5ZHJhdGlvbkVuYWJsZWRXYXJuZWQgPSBmYWxzZTtcbn1cbmZ1bmN0aW9uIHdhcm5JbmNyZW1lbnRhbEh5ZHJhdGlvbk5vdENvbmZpZ3VyZWQoKSB7XG4gIGlmICghaW5jcmVtZW50YWxIeWRyYXRpb25FbmFibGVkV2FybmVkKSB7XG4gICAgaW5jcmVtZW50YWxIeWRyYXRpb25FbmFibGVkV2FybmVkID0gdHJ1ZTtcbiAgICBjb25zb2xlLndhcm4oZm9ybWF0UnVudGltZUVycm9yKDUwOCwgJ0FuZ3VsYXIgaGFzIGRldGVjdGVkIHRoYXQgc29tZSBgQGRlZmVyYCBibG9ja3MgdXNlIGBoeWRyYXRlYCB0cmlnZ2VycywgJyArICdidXQgaW5jcmVtZW50YWwgaHlkcmF0aW9uIHdhcyBub3QgZW5hYmxlZC4gUGxlYXNlIGVuc3VyZSB0aGF0IHRoZSBgd2l0aEluY3JlbWVudGFsSHlkcmF0aW9uKClgICcgKyAnY2FsbCBpcyBhZGRlZCBhcyBhbiBhcmd1bWVudCBmb3IgdGhlIGBwcm92aWRlQ2xpZW50SHlkcmF0aW9uKClgIGZ1bmN0aW9uIGNhbGwgJyArICdpbiB5b3VyIGFwcGxpY2F0aW9uIGNvbmZpZy4nKSk7XG4gIH1cbn1cbmZ1bmN0aW9uIGFzc2VydFNzcklkRGVmaW5lZChzc3JVbmlxdWVJZCkge1xuICBhc3NlcnREZWZpbmVkKHNzclVuaXF1ZUlkLCAnSW50ZXJuYWwgZXJyb3I6IGV4cGVjdGluZyBhbiBTU1IgaWQgZm9yIGEgZGVmZXIgYmxvY2sgdGhhdCBzaG91bGQgYmUgaHlkcmF0ZWQsIGJ1dCB0aGUgaWQgaXMgbm90IHByZXNlbnQnKTtcbn1cbmZ1bmN0aW9uIGdldE5nQ29udGFpbmVyU2l6ZShoeWRyYXRpb25JbmZvLCBpbmRleCkge1xuICBjb25zdCBkYXRhID0gaHlkcmF0aW9uSW5mby5kYXRhO1xuICBsZXQgc2l6ZSA9IGRhdGFbRUxFTUVOVF9DT05UQUlORVJTXT8uW2luZGV4XSA/PyBudWxsO1xuICBpZiAoc2l6ZSA9PT0gbnVsbCAmJiBkYXRhW0NPTlRBSU5FUlNdPy5baW5kZXhdKSB7XG4gICAgc2l6ZSA9IGNhbGNTZXJpYWxpemVkQ29udGFpbmVyU2l6ZShoeWRyYXRpb25JbmZvLCBpbmRleCk7XG4gIH1cbiAgcmV0dXJuIHNpemU7XG59XG5mdW5jdGlvbiBpc1NlcmlhbGl6ZWRFbGVtZW50Q29udGFpbmVyKGh5ZHJhdGlvbkluZm8sIGluZGV4KSB7XG4gIHJldHVybiBoeWRyYXRpb25JbmZvLmRhdGFbRUxFTUVOVF9DT05UQUlORVJTXT8uW2luZGV4XSAhPT0gdW5kZWZpbmVkO1xufVxuZnVuY3Rpb24gZ2V0U2VyaWFsaXplZENvbnRhaW5lclZpZXdzKGh5ZHJhdGlvbkluZm8sIGluZGV4KSB7XG4gIHJldHVybiBoeWRyYXRpb25JbmZvLmRhdGFbQ09OVEFJTkVSU10/LltpbmRleF0gPz8gbnVsbDtcbn1cbmZ1bmN0aW9uIGNhbGNTZXJpYWxpemVkQ29udGFpbmVyU2l6ZShoeWRyYXRpb25JbmZvLCBpbmRleCkge1xuICBjb25zdCB2aWV3cyA9IGdldFNlcmlhbGl6ZWRDb250YWluZXJWaWV3cyhoeWRyYXRpb25JbmZvLCBpbmRleCkgPz8gW107XG4gIGxldCBudW1Ob2RlcyA9IDA7XG4gIGZvciAobGV0IHZpZXcgb2Ygdmlld3MpIHtcbiAgICBudW1Ob2RlcyArPSB2aWV3W05VTV9ST09UX05PREVTXSAqICh2aWV3W01VTFRJUExJRVJdID8/IDEpO1xuICB9XG4gIHJldHVybiBudW1Ob2Rlcztcbn1cbmZ1bmN0aW9uIGluaXREaXNjb25uZWN0ZWROb2RlcyhoeWRyYXRpb25JbmZvKSB7XG4gIGlmICh0eXBlb2YgaHlkcmF0aW9uSW5mby5kaXNjb25uZWN0ZWROb2RlcyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBjb25zdCBub2RlSWRzID0gaHlkcmF0aW9uSW5mby5kYXRhW0RJU0NPTk5FQ1RFRF9OT0RFU107XG4gICAgaHlkcmF0aW9uSW5mby5kaXNjb25uZWN0ZWROb2RlcyA9IG5vZGVJZHMgPyBuZXcgU2V0KG5vZGVJZHMpIDogbnVsbDtcbiAgfVxuICByZXR1cm4gaHlkcmF0aW9uSW5mby5kaXNjb25uZWN0ZWROb2Rlcztcbn1cbmZ1bmN0aW9uIGlzRGlzY29ubmVjdGVkTm9kZSQxKGh5ZHJhdGlvbkluZm8sIGluZGV4KSB7XG4gIGlmICh0eXBlb2YgaHlkcmF0aW9uSW5mby5kaXNjb25uZWN0ZWROb2RlcyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBjb25zdCBub2RlSWRzID0gaHlkcmF0aW9uSW5mby5kYXRhW0RJU0NPTk5FQ1RFRF9OT0RFU107XG4gICAgaHlkcmF0aW9uSW5mby5kaXNjb25uZWN0ZWROb2RlcyA9IG5vZGVJZHMgPyBuZXcgU2V0KG5vZGVJZHMpIDogbnVsbDtcbiAgfVxuICByZXR1cm4gISFpbml0RGlzY29ubmVjdGVkTm9kZXMoaHlkcmF0aW9uSW5mbyk/LmhhcyhpbmRleCk7XG59XG5mdW5jdGlvbiBjYW5IeWRyYXRlTm9kZShsVmlldywgdE5vZGUpIHtcbiAgY29uc3QgaHlkcmF0aW9uSW5mbyA9IGxWaWV3W0hZRFJBVElPTl07XG4gIHJldHVybiBoeWRyYXRpb25JbmZvICE9PSBudWxsICYmICFpc0luU2tpcEh5ZHJhdGlvbkJsb2NrJDEoKSAmJiAhaXNEZXRhY2hlZEJ5STE4bih0Tm9kZSkgJiYgIWlzRGlzY29ubmVjdGVkTm9kZSQxKGh5ZHJhdGlvbkluZm8sIHROb2RlLmluZGV4IC0gSEVBREVSX09GRlNFVCk7XG59XG5mdW5jdGlvbiBwcm9jZXNzVGV4dE5vZGVCZWZvcmVTZXJpYWxpemF0aW9uKGNvbnRleHQsIG5vZGUpIHtcbiAgY29uc3QgZWwgPSBub2RlO1xuICBjb25zdCBjb3JydXB0ZWRUZXh0Tm9kZXMgPSBjb250ZXh0LmNvcnJ1cHRlZFRleHROb2RlcztcbiAgaWYgKGVsLnRleHRDb250ZW50ID09PSAnJykge1xuICAgIGNvcnJ1cHRlZFRleHROb2Rlcy5zZXQoZWwsIFwibmdldG5cIik7XG4gIH0gZWxzZSBpZiAoZWwubmV4dFNpYmxpbmc/Lm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSkge1xuICAgIGNvcnJ1cHRlZFRleHROb2Rlcy5zZXQoZWwsIFwibmd0bnNcIik7XG4gIH1cbn1cbmZ1bmN0aW9uIGNvbnZlcnRIeWRyYXRlVHJpZ2dlcnNUb0pzQWN0aW9uKHRyaWdnZXJzKSB7XG4gIGxldCBhY3Rpb25MaXN0ID0gW107XG4gIGlmICh0cmlnZ2VycyAhPT0gbnVsbCkge1xuICAgIGlmICh0cmlnZ2Vycy5oYXMoNCkpIHtcbiAgICAgIGFjdGlvbkxpc3QucHVzaCguLi5ob3ZlckV2ZW50TmFtZXMpO1xuICAgIH1cbiAgICBpZiAodHJpZ2dlcnMuaGFzKDMpKSB7XG4gICAgICBhY3Rpb25MaXN0LnB1c2goLi4uaW50ZXJhY3Rpb25FdmVudE5hbWVzKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGFjdGlvbkxpc3Q7XG59XG5mdW5jdGlvbiBnZXRQYXJlbnRCbG9ja0h5ZHJhdGlvblF1ZXVlKGRlZmVyQmxvY2tJZCwgaW5qZWN0b3IpIHtcbiAgY29uc3QgZGVoeWRyYXRlZEJsb2NrUmVnaXN0cnkgPSBpbmplY3Rvci5nZXQoREVIWURSQVRFRF9CTE9DS19SRUdJU1RSWSk7XG4gIGNvbnN0IHRyYW5zZmVyU3RhdGUgPSBpbmplY3Rvci5nZXQoVHJhbnNmZXJTdGF0ZSk7XG4gIGNvbnN0IGRlZmVyQmxvY2tQYXJlbnRzID0gdHJhbnNmZXJTdGF0ZS5nZXQoTkdIX0RFRkVSX0JMT0NLU19LRVksIHt9KTtcbiAgbGV0IGlzVG9wTW9zdERlZmVyQmxvY2sgPSBmYWxzZTtcbiAgbGV0IGN1cnJlbnRCbG9ja0lkID0gZGVmZXJCbG9ja0lkO1xuICBsZXQgcGFyZW50QmxvY2tQcm9taXNlID0gbnVsbDtcbiAgY29uc3QgaHlkcmF0aW9uUXVldWUgPSBbXTtcbiAgd2hpbGUgKCFpc1RvcE1vc3REZWZlckJsb2NrICYmIGN1cnJlbnRCbG9ja0lkKSB7XG4gICAgbmdEZXZNb2RlICYmIGFzc2VydEVxdWFsKGh5ZHJhdGlvblF1ZXVlLmluZGV4T2YoY3VycmVudEJsb2NrSWQpLCAtMSwgJ0ludGVybmFsIGVycm9yOiBkZWZlciBibG9jayBoaWVyYXJjaHkgaGFzIGEgY3ljbGUuJyk7XG4gICAgaXNUb3BNb3N0RGVmZXJCbG9jayA9IGRlaHlkcmF0ZWRCbG9ja1JlZ2lzdHJ5LmhhcyhjdXJyZW50QmxvY2tJZCk7XG4gICAgY29uc3QgaHlkcmF0aW5nUGFyZW50QmxvY2sgPSBkZWh5ZHJhdGVkQmxvY2tSZWdpc3RyeS5oeWRyYXRpbmcuZ2V0KGN1cnJlbnRCbG9ja0lkKTtcbiAgICBpZiAocGFyZW50QmxvY2tQcm9taXNlID09PSBudWxsICYmIGh5ZHJhdGluZ1BhcmVudEJsb2NrICE9IG51bGwpIHtcbiAgICAgIHBhcmVudEJsb2NrUHJvbWlzZSA9IGh5ZHJhdGluZ1BhcmVudEJsb2NrLnByb21pc2U7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgaHlkcmF0aW9uUXVldWUudW5zaGlmdChjdXJyZW50QmxvY2tJZCk7XG4gICAgY3VycmVudEJsb2NrSWQgPSBkZWZlckJsb2NrUGFyZW50c1tjdXJyZW50QmxvY2tJZF1bREVGRVJfUEFSRU5UX0JMT0NLX0lEXTtcbiAgfVxuICByZXR1cm4ge1xuICAgIHBhcmVudEJsb2NrUHJvbWlzZSxcbiAgICBoeWRyYXRpb25RdWV1ZVxuICB9O1xufVxuZnVuY3Rpb24gZ2F0aGVyRGVmZXJCbG9ja3NCeUpTQWN0aW9uQXR0cmlidXRlKGRvYykge1xuICBjb25zdCBqc2FjdGlvbk5vZGVzID0gZG9jLmJvZHkucXVlcnlTZWxlY3RvckFsbCgnW2pzYWN0aW9uXScpO1xuICBjb25zdCBibG9ja01hcCA9IG5ldyBTZXQoKTtcbiAgY29uc3QgZXZlbnRUeXBlcyA9IFtob3ZlckV2ZW50TmFtZXMuam9pbignOjsnKSwgaW50ZXJhY3Rpb25FdmVudE5hbWVzLmpvaW4oJzo7JyldLmpvaW4oJ3wnKTtcbiAgZm9yIChsZXQgbm9kZSBvZiBqc2FjdGlvbk5vZGVzKSB7XG4gICAgY29uc3QgYXR0ciA9IG5vZGUuZ2V0QXR0cmlidXRlKCdqc2FjdGlvbicpO1xuICAgIGNvbnN0IGJsb2NrSWQgPSBub2RlLmdldEF0dHJpYnV0ZSgnbmdiJyk7XG4gICAgaWYgKGF0dHI/Lm1hdGNoKGV2ZW50VHlwZXMpICYmIGJsb2NrSWQgIT09IG51bGwpIHtcbiAgICAgIGJsb2NrTWFwLmFkZChub2RlKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGJsb2NrTWFwO1xufVxuZnVuY3Rpb24gYXBwZW5kRGVmZXJCbG9ja3NUb0pTQWN0aW9uTWFwKGRvYywgaW5qZWN0b3IpIHtcbiAgY29uc3QgYmxvY2tNYXAgPSBnYXRoZXJEZWZlckJsb2Nrc0J5SlNBY3Rpb25BdHRyaWJ1dGUoZG9jKTtcbiAgY29uc3QganNBY3Rpb25NYXAgPSBpbmplY3Rvci5nZXQoSlNBQ1RJT05fQkxPQ0tfRUxFTUVOVF9NQVApO1xuICBmb3IgKGxldCByTm9kZSBvZiBibG9ja01hcCkge1xuICAgIHNoYXJlZE1hcEZ1bmN0aW9uKHJOb2RlLCBqc0FjdGlvbk1hcCk7XG4gIH1cbn1cbmxldCBfcmV0cmlldmVEZWZlckJsb2NrRGF0YUltcGwgPSAoKSA9PiB7XG4gIHJldHVybiB7fTtcbn07XG5mdW5jdGlvbiByZXRyaWV2ZURlZmVyQmxvY2tEYXRhSW1wbChpbmplY3Rvcikge1xuICBjb25zdCB0cmFuc2ZlclN0YXRlID0gaW5qZWN0b3IuZ2V0KFRyYW5zZmVyU3RhdGUsIG51bGwsIHtcbiAgICBvcHRpb25hbDogdHJ1ZVxuICB9KTtcbiAgaWYgKHRyYW5zZmVyU3RhdGUgIT09IG51bGwpIHtcbiAgICBjb25zdCBuZ2hEZWZlckRhdGEgPSB0cmFuc2ZlclN0YXRlLmdldChOR0hfREVGRVJfQkxPQ0tTX0tFWSwge30pO1xuICAgIG5nRGV2TW9kZSAmJiBhc3NlcnREZWZpbmVkKG5naERlZmVyRGF0YSwgJ1VuYWJsZSB0byByZXRyaWV2ZSBkZWZlciBibG9jayBpbmZvIGZyb20gdGhlIFRyYW5zZmVyU3RhdGUuJyk7XG4gICAgcmV0dXJuIG5naERlZmVyRGF0YTtcbiAgfVxuICByZXR1cm4ge307XG59XG5mdW5jdGlvbiBlbmFibGVSZXRyaWV2ZURlZmVyQmxvY2tEYXRhSW1wbCgpIHtcbiAgX3JldHJpZXZlRGVmZXJCbG9ja0RhdGFJbXBsID0gcmV0cmlldmVEZWZlckJsb2NrRGF0YUltcGw7XG59XG5mdW5jdGlvbiByZXRyaWV2ZURlZmVyQmxvY2tEYXRhKGluamVjdG9yKSB7XG4gIHJldHVybiBfcmV0cmlldmVEZWZlckJsb2NrRGF0YUltcGwoaW5qZWN0b3IpO1xufVxuZnVuY3Rpb24gaXNUaW1lclRyaWdnZXIodHJpZ2dlckluZm8pIHtcbiAgcmV0dXJuIHR5cGVvZiB0cmlnZ2VySW5mbyA9PT0gJ29iamVjdCcgJiYgdHJpZ2dlckluZm8udHJpZ2dlciA9PT0gNTtcbn1cbmZ1bmN0aW9uIGdldEh5ZHJhdGVUaW1lclRyaWdnZXIoYmxvY2tEYXRhKSB7XG4gIGNvbnN0IHRyaWdnZXIgPSBibG9ja0RhdGFbREVGRVJfSFlEUkFURV9UUklHR0VSU10/LmZpbmQodCA9PiBpc1RpbWVyVHJpZ2dlcih0KSk7XG4gIHJldHVybiB0cmlnZ2VyPy5kZWxheSA/PyBudWxsO1xufVxuZnVuY3Rpb24gZ2V0SHlkcmF0ZVZpZXdwb3J0VHJpZ2dlcihibG9ja0RhdGEpIHtcbiAgY29uc3QgZGV0YWlscyA9IGJsb2NrRGF0YVtERUZFUl9IWURSQVRFX1RSSUdHRVJTXTtcbiAgaWYgKGRldGFpbHMpIHtcbiAgICBmb3IgKGNvbnN0IGN1cnJlbnQgb2YgZGV0YWlscykge1xuICAgICAgaWYgKGN1cnJlbnQgPT09IDIpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBjdXJyZW50ID09PSAnb2JqZWN0JyAmJiBjdXJyZW50LnRyaWdnZXIgPT09IDIpIHtcbiAgICAgICAgcmV0dXJuIGN1cnJlbnQuaW50ZXJzZWN0aW9uT2JzZXJ2ZXJPcHRpb25zIHx8IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsO1xufVxuZnVuY3Rpb24gaGFzSHlkcmF0ZVRyaWdnZXIoYmxvY2tEYXRhLCB0cmlnZ2VyKSB7XG4gIHJldHVybiBibG9ja0RhdGFbREVGRVJfSFlEUkFURV9UUklHR0VSU10/LmluY2x1ZGVzKHRyaWdnZXIpID8/IGZhbHNlO1xufVxuZnVuY3Rpb24gY3JlYXRlQmxvY2tTdW1tYXJ5KGJsb2NrSW5mbykge1xuICByZXR1cm4ge1xuICAgIGRhdGE6IGJsb2NrSW5mbyxcbiAgICBoeWRyYXRlOiB7XG4gICAgICBpZGxlOiBoYXNIeWRyYXRlVHJpZ2dlcihibG9ja0luZm8sIDApLFxuICAgICAgaW1tZWRpYXRlOiBoYXNIeWRyYXRlVHJpZ2dlcihibG9ja0luZm8sIDEpLFxuICAgICAgdGltZXI6IGdldEh5ZHJhdGVUaW1lclRyaWdnZXIoYmxvY2tJbmZvKSxcbiAgICAgIHZpZXdwb3J0OiBnZXRIeWRyYXRlVmlld3BvcnRUcmlnZ2VyKGJsb2NrSW5mbylcbiAgICB9XG4gIH07XG59XG5mdW5jdGlvbiBwcm9jZXNzQmxvY2tEYXRhKGluamVjdG9yKSB7XG4gIGNvbnN0IGJsb2NrRGF0YSA9IHJldHJpZXZlRGVmZXJCbG9ja0RhdGEoaW5qZWN0b3IpO1xuICBsZXQgYmxvY2tEZXRhaWxzID0gbmV3IE1hcCgpO1xuICBmb3IgKGxldCBibG9ja0lkIGluIGJsb2NrRGF0YSkge1xuICAgIGJsb2NrRGV0YWlscy5zZXQoYmxvY2tJZCwgY3JlYXRlQmxvY2tTdW1tYXJ5KGJsb2NrRGF0YVtibG9ja0lkXSkpO1xuICB9XG4gIHJldHVybiBibG9ja0RldGFpbHM7XG59XG5mdW5jdGlvbiBpc1NzckNvbnRlbnRzSW50ZWdyaXR5KG5vZGUpIHtcbiAgcmV0dXJuICEhbm9kZSAmJiBub2RlLm5vZGVUeXBlID09PSBOb2RlLkNPTU1FTlRfTk9ERSAmJiBub2RlLnRleHRDb250ZW50Py50cmltKCkgPT09IFNTUl9DT05URU5UX0lOVEVHUklUWV9NQVJLRVI7XG59XG5mdW5jdGlvbiBza2lwVGV4dE5vZGVzKG5vZGUpIHtcbiAgd2hpbGUgKG5vZGUgJiYgbm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5URVhUX05PREUpIHtcbiAgICBub2RlID0gbm9kZS5wcmV2aW91c1NpYmxpbmc7XG4gIH1cbiAgcmV0dXJuIG5vZGU7XG59XG5mdW5jdGlvbiB2ZXJpZnlTc3JDb250ZW50c0ludGVncml0eShkb2MpIHtcbiAgZm9yIChjb25zdCBub2RlIG9mIGRvYy5ib2R5LmNoaWxkTm9kZXMpIHtcbiAgICBpZiAoaXNTc3JDb250ZW50c0ludGVncml0eShub2RlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuICBjb25zdCBiZWZvcmVCb2R5ID0gc2tpcFRleHROb2Rlcyhkb2MuYm9keS5wcmV2aW91c1NpYmxpbmcpO1xuICBpZiAoaXNTc3JDb250ZW50c0ludGVncml0eShiZWZvcmVCb2R5KSkge1xuICAgIHJldHVybjtcbiAgfVxuICBsZXQgZW5kT2ZIZWFkID0gc2tpcFRleHROb2Rlcyhkb2MuaGVhZC5sYXN0Q2hpbGQpO1xuICBpZiAoaXNTc3JDb250ZW50c0ludGVncml0eShlbmRPZkhlYWQpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHRocm93IG5ldyBSdW50aW1lRXJyb3IoLTUwNywgdHlwZW9mIG5nRGV2TW9kZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbmdEZXZNb2RlICYmICdBbmd1bGFyIGh5ZHJhdGlvbiBsb2dpYyBkZXRlY3RlZCB0aGF0IEhUTUwgY29udGVudCBvZiB0aGlzIHBhZ2Ugd2FzIG1vZGlmaWVkIGFmdGVyIGl0ICcgKyAnd2FzIHByb2R1Y2VkIGR1cmluZyBzZXJ2ZXIgc2lkZSByZW5kZXJpbmcuIE1ha2Ugc3VyZSB0aGF0IHRoZXJlIGFyZSBubyBvcHRpbWl6YXRpb25zICcgKyAndGhhdCByZW1vdmUgY29tbWVudCBub2RlcyBmcm9tIEhUTUwgZW5hYmxlZCBvbiB5b3VyIENETi4gQW5ndWxhciBoeWRyYXRpb24gJyArICdyZWxpZXMgb24gSFRNTCBwcm9kdWNlZCBieSB0aGUgc2VydmVyLCBpbmNsdWRpbmcgd2hpdGVzcGFjZXMgYW5kIGNvbW1lbnQgbm9kZXMuJyk7XG59XG5mdW5jdGlvbiByZWZyZXNoQ29udGVudFF1ZXJpZXModFZpZXcsIGxWaWV3KSB7XG4gIGNvbnN0IGNvbnRlbnRRdWVyaWVzID0gdFZpZXcuY29udGVudFF1ZXJpZXM7XG4gIGlmIChjb250ZW50UXVlcmllcyAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHByZXZDb25zdW1lciA9IHNldEFjdGl2ZUNvbnN1bWVyKG51bGwpO1xuICAgIHRyeSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbnRlbnRRdWVyaWVzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICAgIGNvbnN0IHF1ZXJ5U3RhcnRJZHggPSBjb250ZW50UXVlcmllc1tpXTtcbiAgICAgICAgY29uc3QgZGlyZWN0aXZlRGVmSWR4ID0gY29udGVudFF1ZXJpZXNbaSArIDFdO1xuICAgICAgICBpZiAoZGlyZWN0aXZlRGVmSWR4ICE9PSAtMSkge1xuICAgICAgICAgIGNvbnN0IGRpcmVjdGl2ZURlZiA9IHRWaWV3LmRhdGFbZGlyZWN0aXZlRGVmSWR4XTtcbiAgICAgICAgICBuZ0Rldk1vZGUgJiYgYXNzZXJ0RGVmaW5lZChkaXJlY3RpdmVEZWYsICdEaXJlY3RpdmVEZWYgbm90IGZvdW5kLicpO1xuICAgICAgICAgIG5nRGV2TW9kZSAmJiBhc3NlcnREZWZpbmVkKGRpcmVjdGl2ZURlZi5jb250ZW50UXVlcmllcywgJ2NvbnRlbnRRdWVyaWVzIGZ1bmN0aW9uIHNob3VsZCBiZSBkZWZpbmVkJyk7XG4gICAgICAgICAgc2V0Q3VycmVudFF1ZXJ5SW5kZXgocXVlcnlTdGFydElkeCk7XG4gICAgICAgICAgZGlyZWN0aXZlRGVmLmNvbnRlbnRRdWVyaWVzKDIsIGxWaWV3W2RpcmVjdGl2ZURlZklkeF0sIGRpcmVjdGl2ZURlZklkeCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2V0QWN0aXZlQ29uc3VtZXIocHJldkNvbnN1bWVyKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGV4ZWN1dGVWaWV3UXVlcnlGbihmbGFncywgdmlld1F1ZXJ5Rm4sIGNvbXBvbmVudCkge1xuICBuZ0Rldk1vZGUgJiYgYXNzZXJ0RGVmaW5lZCh2aWV3UXVlcnlGbiwgJ1ZpZXcgcXVlcmllcyBmdW5jdGlvbiB0byBleGVjdXRlIG11c3QgYmUgZGVmaW5lZC4nKTtcbiAgc2V0Q3VycmVudFF1ZXJ5SW5kZXgoMCk7XG4gIGNvbnN0IHByZXZDb25zdW1lciA9IHNldEFjdGl2ZUNvbnN1bWVyKG51bGwpO1xuICB0cnkge1xuICAgIHZpZXdRdWVyeUZuKGZsYWdzLCBjb21wb25lbnQpO1xuICB9IGZpbmFsbHkge1xuICAgIHNldEFjdGl2ZUNvbnN1bWVyKHByZXZDb25zdW1lcik7XG4gIH1cbn1cbmZ1bmN0aW9uIGV4ZWN1dGVDb250ZW50UXVlcmllcyh0VmlldywgdE5vZGUsIGxWaWV3KSB7XG4gIGlmIChpc0NvbnRlbnRRdWVyeUhvc3QodE5vZGUpKSB7XG4gICAgY29uc3QgcHJldkNvbnN1bWVyID0gc2V0QWN0aXZlQ29uc3VtZXIobnVsbCk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHN0YXJ0ID0gdE5vZGUuZGlyZWN0aXZlU3RhcnQ7XG4gICAgICBjb25zdCBlbmQgPSB0Tm9kZS5kaXJlY3RpdmVFbmQ7XG4gICAgICBmb3IgKGxldCBkaXJlY3RpdmVJbmRleCA9IHN0YXJ0OyBkaXJlY3RpdmVJbmRleCA8IGVuZDsgZGlyZWN0aXZlSW5kZXgrKykge1xuICAgICAgICBjb25zdCBkZWYgPSB0Vmlldy5kYXRhW2RpcmVjdGl2ZUluZGV4XTtcbiAgICAgICAgaWYgKGRlZi5jb250ZW50UXVlcmllcykge1xuICAgICAgICAgIGNvbnN0IGRpcmVjdGl2ZUluc3RhbmNlID0gbFZpZXdbZGlyZWN0aXZlSW5kZXhdO1xuICAgICAgICAgIG5nRGV2TW9kZSAmJiBhc3NlcnREZWZpbmVkKGRpcmVjdGl2ZUluZGV4LCAnSW5jb3JyZWN0IHJlZmVyZW5jZSB0byBhIGRpcmVjdGl2ZSBkZWZpbmluZyBhIGNvbnRlbnQgcXVlcnknKTtcbiAgICAgICAgICBkZWYuY29udGVudFF1ZXJpZXMoMSwgZGlyZWN0aXZlSW5zdGFuY2UsIGRpcmVjdGl2ZUluZGV4KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICBzZXRBY3RpdmVDb25zdW1lcihwcmV2Q29uc3VtZXIpO1xuICAgIH1cbiAgfVxufVxudmFyIFZpZXdFbmNhcHN1bGF0aW9uID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChWaWV3RW5jYXBzdWxhdGlvbikge1xuICBWaWV3RW5jYXBzdWxhdGlvbltWaWV3RW5jYXBzdWxhdGlvbltcIkVtdWxhdGVkXCJdID0gMF0gPSBcIkVtdWxhdGVkXCI7XG4gIFZpZXdFbmNhcHN1bGF0aW9uW1ZpZXdFbmNhcHN1bGF0aW9uW1wiTm9uZVwiXSA9IDJdID0gXCJOb25lXCI7XG4gIFZpZXdFbmNhcHN1bGF0aW9uW1ZpZXdFbmNhcHN1bGF0aW9uW1wiU2hhZG93RG9tXCJdID0gM10gPSBcIlNoYWRvd0RvbVwiO1xuICBWaWV3RW5jYXBzdWxhdGlvbltWaWV3RW5jYXBzdWxhdGlvbltcIkV4cGVyaW1lbnRhbElzb2xhdGVkU2hhZG93RG9tXCJdID0gNF0gPSBcIkV4cGVyaW1lbnRhbElzb2xhdGVkU2hhZG93RG9tXCI7XG4gIHJldHVybiBWaWV3RW5jYXBzdWxhdGlvbjtcbn0oVmlld0VuY2Fwc3VsYXRpb24gfHwge30pO1xuY29uc3QgQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQSA9IHtcbiAgbmFtZTogJ2N1c3RvbS1lbGVtZW50cydcbn07XG5jb25zdCBOT19FUlJPUlNfU0NIRU1BID0ge1xuICBuYW1lOiAnbm8tZXJyb3JzLXNjaGVtYSdcbn07XG5sZXQgc2hvdWxkVGhyb3dFcnJvck9uVW5rbm93bkVsZW1lbnQgPSBmYWxzZTtcbmZ1bmN0aW9uIMm1c2V0VW5rbm93bkVsZW1lbnRTdHJpY3RNb2RlKHNob3VsZFRocm93KSB7XG4gIHNob3VsZFRocm93RXJyb3JPblVua25vd25FbGVtZW50ID0gc2hvdWxkVGhyb3c7XG59XG5mdW5jdGlvbiDJtWdldFVua25vd25FbGVtZW50U3RyaWN0TW9kZSgpIHtcbiAgcmV0dXJuIHNob3VsZFRocm93RXJyb3JPblVua25vd25FbGVtZW50O1xufVxubGV0IHNob3VsZFRocm93RXJyb3JPblVua25vd25Qcm9wZXJ0eSA9IGZhbHNlO1xuZnVuY3Rpb24gybVzZXRVbmtub3duUHJvcGVydHlTdHJpY3RNb2RlKHNob3VsZFRocm93KSB7XG4gIHNob3VsZFRocm93RXJyb3JPblVua25vd25Qcm9wZXJ0eSA9IHNob3VsZFRocm93O1xufVxuZnVuY3Rpb24gybVnZXRVbmtub3duUHJvcGVydHlTdHJpY3RNb2RlKCkge1xuICByZXR1cm4gc2hvdWxkVGhyb3dFcnJvck9uVW5rbm93blByb3BlcnR5O1xufVxuZnVuY3Rpb24gdmFsaWRhdGVFbGVtZW50SXNLbm93bihsVmlldywgdE5vZGUpIHtcbiAgY29uc3QgdFZpZXcgPSBsVmlld1tUVklFV107XG4gIGlmICh0Vmlldy5zY2hlbWFzID09PSBudWxsKSByZXR1cm47XG4gIGNvbnN0IHRhZ05hbWUgPSB0Tm9kZS52YWx1ZTtcbiAgaWYgKCFpc0RpcmVjdGl2ZUhvc3QodE5vZGUpICYmIHRhZ05hbWUgIT09IG51bGwpIHtcbiAgICBjb25zdCBpc1Vua25vd24gPSB0eXBlb2YgSFRNTFVua25vd25FbGVtZW50ICE9PSAndW5kZWZpbmVkJyAmJiBIVE1MVW5rbm93bkVsZW1lbnQgJiYgZ2V0TmF0aXZlQnlUTm9kZSh0Tm9kZSwgbFZpZXcpIGluc3RhbmNlb2YgSFRNTFVua25vd25FbGVtZW50IHx8IHR5cGVvZiBjdXN0b21FbGVtZW50cyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGFnTmFtZS5pbmRleE9mKCctJykgPiAtMSAmJiAhY3VzdG9tRWxlbWVudHMuZ2V0KHRhZ05hbWUpO1xuICAgIGlmIChpc1Vua25vd24gJiYgIW1hdGNoaW5nU2NoZW1hcyh0Vmlldy5zY2hlbWFzLCB0YWdOYW1lKSkge1xuICAgICAgY29uc3QgaXNIb3N0U3RhbmRhbG9uZSA9IGlzSG9zdENvbXBvbmVudFN0YW5kYWxvbmUobFZpZXcpO1xuICAgICAgY29uc3QgdGVtcGxhdGVMb2NhdGlvbiA9IGdldFRlbXBsYXRlTG9jYXRpb25EZXRhaWxzKGxWaWV3KTtcbiAgICAgIGNvbnN0IHNjaGVtYXMgPSBgJyR7aXNIb3N0U3RhbmRhbG9uZSA/ICdAQ29tcG9uZW50JyA6ICdATmdNb2R1bGUnfS5zY2hlbWFzJ2A7XG4gICAgICBsZXQgbWVzc2FnZSA9IGAnJHt0YWdOYW1lfScgaXMgbm90IGEga25vd24gZWxlbWVudCR7dGVtcGxhdGVMb2NhdGlvbn06XFxuYDtcbiAgICAgIG1lc3NhZ2UgKz0gYDEuIElmICcke3RhZ05hbWV9JyBpcyBhbiBBbmd1bGFyIGNvbXBvbmVudCwgdGhlbiB2ZXJpZnkgdGhhdCBpdCBpcyAke2lzSG9zdFN0YW5kYWxvbmUgPyBcImluY2x1ZGVkIGluIHRoZSAnQENvbXBvbmVudC5pbXBvcnRzJyBvZiB0aGlzIGNvbXBvbmVudFwiIDogJ2EgcGFydCBvZiBhbiBATmdNb2R1bGUgd2hlcmUgdGhpcyBjb21wb25lbnQgaXMgZGVjbGFyZWQnfS5cXG5gO1xuICAgICAgaWYgKHRhZ05hbWUgJiYgdGFnTmFtZS5pbmRleE9mKCctJykgPiAtMSkge1xuICAgICAgICBtZXNzYWdlICs9IGAyLiBJZiAnJHt0YWdOYW1lfScgaXMgYSBXZWIgQ29tcG9uZW50IHRoZW4gYWRkICdDVVNUT01fRUxFTUVOVFNfU0NIRU1BJyB0byB0aGUgJHtzY2hlbWFzfSBvZiB0aGlzIGNvbXBvbmVudCB0byBzdXBwcmVzcyB0aGlzIG1lc3NhZ2UuYDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG1lc3NhZ2UgKz0gYDIuIFRvIGFsbG93IGFueSBlbGVtZW50IGFkZCAnTk9fRVJST1JTX1NDSEVNQScgdG8gdGhlICR7c2NoZW1hc30gb2YgdGhpcyBjb21wb25lbnQuYDtcbiAgICAgIH1cbiAgICAgIGlmIChzaG91bGRUaHJvd0Vycm9yT25Vbmtub3duRWxlbWVudCkge1xuICAgICAgICB0aHJvdyBuZXcgUnVudGltZUVycm9yKDMwNCwgbWVzc2FnZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmVycm9yKGZvcm1hdFJ1bnRpbWVFcnJvcigzMDQsIG1lc3NhZ2UpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGlzUHJvcGVydHlWYWxpZChlbGVtZW50LCBwcm9wTmFtZSwgdGFnTmFtZSwgc2NoZW1hcykge1xuICBpZiAoc2NoZW1hcyA9PT0gbnVsbCkgcmV0dXJuIHRydWU7XG4gIGlmIChtYXRjaGluZ1NjaGVtYXMoc2NoZW1hcywgdGFnTmFtZSkgfHwgcHJvcE5hbWUgaW4gZWxlbWVudCB8fCBpc0FuaW1hdGlvblByb3AocHJvcE5hbWUpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIHR5cGVvZiBOb2RlID09PSAndW5kZWZpbmVkJyB8fCBOb2RlID09PSBudWxsIHx8ICEoZWxlbWVudCBpbnN0YW5jZW9mIE5vZGUpO1xufVxuZnVuY3Rpb24gaGFuZGxlVW5rbm93blByb3BlcnR5RXJyb3IocHJvcE5hbWUsIHRhZ05hbWUsIG5vZGVUeXBlLCBsVmlldykge1xuICBpZiAoIXRhZ05hbWUgJiYgbm9kZVR5cGUgPT09IDQpIHtcbiAgICB0YWdOYW1lID0gJ25nLXRlbXBsYXRlJztcbiAgfVxuICBjb25zdCBpc0hvc3RTdGFuZGFsb25lID0gaXNIb3N0Q29tcG9uZW50U3RhbmRhbG9uZShsVmlldyk7XG4gIGNvbnN0IHRlbXBsYXRlTG9jYXRpb24gPSBnZXRUZW1wbGF0ZUxvY2F0aW9uRGV0YWlscyhsVmlldyk7XG4gIGxldCBtZXNzYWdlID0gYENhbid0IGJpbmQgdG8gJyR7cHJvcE5hbWV9JyBzaW5jZSBpdCBpc24ndCBhIGtub3duIHByb3BlcnR5IG9mICcke3RhZ05hbWV9JyR7dGVtcGxhdGVMb2NhdGlvbn0uYDtcbiAgY29uc3Qgc2NoZW1hcyA9IGAnJHtpc0hvc3RTdGFuZGFsb25lID8gJ0BDb21wb25lbnQnIDogJ0BOZ01vZHVsZSd9LnNjaGVtYXMnYDtcbiAgY29uc3QgaW1wb3J0TG9jYXRpb24gPSBpc0hvc3RTdGFuZGFsb25lID8gXCJpbmNsdWRlZCBpbiB0aGUgJ0BDb21wb25lbnQuaW1wb3J0cycgb2YgdGhpcyBjb21wb25lbnRcIiA6ICdhIHBhcnQgb2YgYW4gQE5nTW9kdWxlIHdoZXJlIHRoaXMgY29tcG9uZW50IGlzIGRlY2xhcmVkJztcbiAgaWYgKEtOT1dOX0NPTlRST0xfRkxPV19ESVJFQ1RJVkVTLmhhcyhwcm9wTmFtZSkpIHtcbiAgICBjb25zdCBjb3JyZXNwb25kaW5nSW1wb3J0ID0gS05PV05fQ09OVFJPTF9GTE9XX0RJUkVDVElWRVMuZ2V0KHByb3BOYW1lKTtcbiAgICBtZXNzYWdlICs9IGBcXG5JZiB0aGUgJyR7cHJvcE5hbWV9JyBpcyBhbiBBbmd1bGFyIGNvbnRyb2wgZmxvdyBkaXJlY3RpdmUsIGAgKyBgcGxlYXNlIG1ha2Ugc3VyZSB0aGF0IGVpdGhlciB0aGUgJyR7Y29ycmVzcG9uZGluZ0ltcG9ydH0nIGRpcmVjdGl2ZSBvciB0aGUgJ0NvbW1vbk1vZHVsZScgaXMgJHtpbXBvcnRMb2NhdGlvbn0uYDtcbiAgfSBlbHNlIHtcbiAgICBtZXNzYWdlICs9IGBcXG4xLiBJZiAnJHt0YWdOYW1lfScgaXMgYW4gQW5ndWxhciBjb21wb25lbnQgYW5kIGl0IGhhcyB0aGUgYCArIGAnJHtwcm9wTmFtZX0nIGlucHV0LCB0aGVuIHZlcmlmeSB0aGF0IGl0IGlzICR7aW1wb3J0TG9jYXRpb259LmA7XG4gICAgaWYgKHRhZ05hbWUgJiYgdGFnTmFtZS5pbmRleE9mKCctJykgPiAtMSkge1xuICAgICAgbWVzc2FnZSArPSBgXFxuMi4gSWYgJyR7dGFnTmFtZX0nIGlzIGEgV2ViIENvbXBvbmVudCB0aGVuIGFkZCAnQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQScgYCArIGB0byB0aGUgJHtzY2hlbWFzfSBvZiB0aGlzIGNvbXBvbmVudCB0byBzdXBwcmVzcyB0aGlzIG1lc3NhZ2UuYDtcbiAgICAgIG1lc3NhZ2UgKz0gYFxcbjMuIFRvIGFsbG93IGFueSBwcm9wZXJ0eSBhZGQgJ05PX0VSUk9SU19TQ0hFTUEnIHRvIGAgKyBgdGhlICR7c2NoZW1hc30gb2YgdGhpcyBjb21wb25lbnQuYDtcbiAgICB9IGVsc2Uge1xuICAgICAgbWVzc2FnZSArPSBgXFxuMi4gVG8gYWxsb3cgYW55IHByb3BlcnR5IGFkZCAnTk9fRVJST1JTX1NDSEVNQScgdG8gYCArIGB0aGUgJHtzY2hlbWFzfSBvZiB0aGlzIGNvbXBvbmVudC5gO1xuICAgIH1cbiAgfVxuICByZXBvcnRVbmtub3duUHJvcGVydHlFcnJvcihtZXNzYWdlKTtcbn1cbmZ1bmN0aW9uIHJlcG9ydFVua25vd25Qcm9wZXJ0eUVycm9yKG1lc3NhZ2UpIHtcbiAgaWYgKHNob3VsZFRocm93RXJyb3JPblVua25vd25Qcm9wZXJ0eSkge1xuICAgIHRocm93IG5ldyBSdW50aW1lRXJyb3IoMzAzLCBtZXNzYWdlKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zb2xlLmVycm9yKGZvcm1hdFJ1bnRpbWVFcnJvcigzMDMsIG1lc3NhZ2UpKTtcbiAgfVxufVxuZnVuY3Rpb24gZ2V0RGVjbGFyYXRpb25Db21wb25lbnREZWYobFZpZXcpIHtcbiAgIW5nRGV2TW9kZSAmJiB0aHJvd0Vycm9yKCdNdXN0IG5ldmVyIGJlIGNhbGxlZCBpbiBwcm9kdWN0aW9uIG1vZGUnKTtcbiAgY29uc3QgZGVjbGFyYXRpb25MVmlldyA9IGxWaWV3W0RFQ0xBUkFUSU9OX0NPTVBPTkVOVF9WSUVXXTtcbiAgY29uc3QgY29udGV4dCA9IGRlY2xhcmF0aW9uTFZpZXdbQ09OVEVYVF07XG4gIGlmICghY29udGV4dCkgcmV0dXJuIG51bGw7XG4gIHJldHVybiBjb250ZXh0LmNvbnN0cnVjdG9yID8gZ2V0Q29tcG9uZW50RGVmKGNvbnRleHQuY29uc3RydWN0b3IpIDogbnVsbDtcbn1cbmZ1bmN0aW9uIGlzSG9zdENvbXBvbmVudFN0YW5kYWxvbmUobFZpZXcpIHtcbiAgIW5nRGV2TW9kZSAmJiB0aHJvd0Vycm9yKCdNdXN0IG5ldmVyIGJlIGNhbGxlZCBpbiBwcm9kdWN0aW9uIG1vZGUnKTtcbiAgY29uc3QgY29tcG9uZW50RGVmID0gZ2V0RGVjbGFyYXRpb25Db21wb25lbnREZWYobFZpZXcpO1xuICByZXR1cm4gISFjb21wb25lbnREZWY/LnN0YW5kYWxvbmU7XG59XG5mdW5jdGlvbiBnZXRUZW1wbGF0ZUxvY2F0aW9uRGV0YWlscyhsVmlldykge1xuICAhbmdEZXZNb2RlICYmIHRocm93RXJyb3IoJ011c3QgbmV2ZXIgYmUgY2FsbGVkIGluIHByb2R1Y3Rpb24gbW9kZScpO1xuICBjb25zdCBob3N0Q29tcG9uZW50RGVmID0gZ2V0RGVjbGFyYXRpb25Db21wb25lbnREZWYobFZpZXcpO1xuICBjb25zdCBjb21wb25lbnRDbGFzc05hbWUgPSBob3N0Q29tcG9uZW50RGVmPy50eXBlPy5uYW1lO1xuICByZXR1cm4gY29tcG9uZW50Q2xhc3NOYW1lID8gYCAodXNlZCBpbiB0aGUgJyR7Y29tcG9uZW50Q2xhc3NOYW1lfScgY29tcG9uZW50IHRlbXBsYXRlKWAgOiAnJztcbn1cbmNvbnN0IEtOT1dOX0NPTlRST0xfRkxPV19ESVJFQ1RJVkVTID0gLyojX19QVVJFX18qL25ldyBNYXAoW1snbmdJZicsICdOZ0lmJ10sIFsnbmdGb3InLCAnTmdGb3InXSwgWyduZ1N3aXRjaENhc2UnLCAnTmdTd2l0Y2hDYXNlJ10sIFsnbmdTd2l0Y2hEZWZhdWx0JywgJ05nU3dpdGNoRGVmYXVsdCddXSk7XG5mdW5jdGlvbiBtYXRjaGluZ1NjaGVtYXMoc2NoZW1hcywgdGFnTmFtZSkge1xuICBpZiAoc2NoZW1hcyAhPT0gbnVsbCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2NoZW1hcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qgc2NoZW1hID0gc2NoZW1hc1tpXTtcbiAgICAgIGlmIChzY2hlbWEgPT09IE5PX0VSUk9SU19TQ0hFTUEgfHwgc2NoZW1hID09PSBDVVNUT01fRUxFTUVOVFNfU0NIRU1BICYmIHRhZ05hbWUgJiYgdGFnTmFtZS5pbmRleE9mKCctJykgPiAtMSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxubGV0IHBvbGljeSQxO1xuZnVuY3Rpb24gZ2V0UG9saWN5JDEoKSB7XG4gIGlmIChwb2xpY3kkMSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcG9saWN5JDEgPSBudWxsO1xuICAgIGlmIChfZ2xvYmFsLnRydXN0ZWRUeXBlcykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcG9saWN5JDEgPSBfZ2xvYmFsLnRydXN0ZWRUeXBlcy5jcmVhdGVQb2xpY3koJ2FuZ3VsYXInLCB7XG4gICAgICAgICAgY3JlYXRlSFRNTDogcyA9PiBzLFxuICAgICAgICAgIGNyZWF0ZVNjcmlwdDogcyA9PiBzLFxuICAgICAgICAgIGNyZWF0ZVNjcmlwdFVSTDogcyA9PiBzXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCB7fVxuICAgIH1cbiAgfVxuICByZXR1cm4gcG9saWN5JDE7XG59XG5mdW5jdGlvbiB0cnVzdGVkSFRNTEZyb21TdHJpbmcoaHRtbCkge1xuICByZXR1cm4gZ2V0UG9saWN5JDEoKT8uY3JlYXRlSFRNTChodG1sKSB8fCBodG1sO1xufVxuZnVuY3Rpb24gdHJ1c3RlZFNjcmlwdFVSTEZyb21TdHJpbmcodXJsKSB7XG4gIHJldHVybiBnZXRQb2xpY3kkMSgpPy5jcmVhdGVTY3JpcHRVUkwodXJsKSB8fCB1cmw7XG59XG5sZXQgcG9saWN5O1xuZnVuY3Rpb24gZ2V0UG9saWN5KCkge1xuICBpZiAocG9saWN5ID09PSB1bmRlZmluZWQpIHtcbiAgICBwb2xpY3kgPSBudWxsO1xuICAgIGlmIChfZ2xvYmFsLnRydXN0ZWRUeXBlcykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcG9saWN5ID0gX2dsb2JhbC50cnVzdGVkVHlwZXMuY3JlYXRlUG9saWN5KCdhbmd1bGFyI3Vuc2FmZS1ieXBhc3MnLCB7XG4gICAgICAgICAgY3JlYXRlSFRNTDogcyA9PiBzLFxuICAgICAgICAgIGNyZWF0ZVNjcmlwdDogcyA9PiBzLFxuICAgICAgICAgIGNyZWF0ZVNjcmlwdFVSTDogcyA9PiBzXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCB7fVxuICAgIH1cbiAgfVxuICByZXR1cm4gcG9saWN5O1xufVxuZnVuY3Rpb24gdHJ1c3RlZEhUTUxGcm9tU3RyaW5nQnlwYXNzKGh0bWwpIHtcbiAgcmV0dXJuIGdldFBvbGljeSgpPy5jcmVhdGVIVE1MKGh0bWwpIHx8IGh0bWw7XG59XG5mdW5jdGlvbiB0cnVzdGVkU2NyaXB0RnJvbVN0cmluZ0J5cGFzcyhzY3JpcHQpIHtcbiAgcmV0dXJuIGdldFBvbGljeSgpPy5jcmVhdGVTY3JpcHQoc2NyaXB0KSB8fCBzY3JpcHQ7XG59XG5mdW5jdGlvbiB0cnVzdGVkU2NyaXB0VVJMRnJvbVN0cmluZ0J5cGFzcyh1cmwpIHtcbiAgcmV0dXJuIGdldFBvbGljeSgpPy5jcmVhdGVTY3JpcHRVUkwodXJsKSB8fCB1cmw7XG59XG5jbGFzcyBTYWZlVmFsdWVJbXBsIHtcbiAgY2hhbmdpbmdUaGlzQnJlYWtzQXBwbGljYXRpb25TZWN1cml0eTtcbiAgY29uc3RydWN0b3IoY2hhbmdpbmdUaGlzQnJlYWtzQXBwbGljYXRpb25TZWN1cml0eSkge1xuICAgIHRoaXMuY2hhbmdpbmdUaGlzQnJlYWtzQXBwbGljYXRpb25TZWN1cml0eSA9IGNoYW5naW5nVGhpc0JyZWFrc0FwcGxpY2F0aW9uU2VjdXJpdHk7XG4gIH1cbiAgdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIGBTYWZlVmFsdWUgbXVzdCB1c2UgW3Byb3BlcnR5XT1iaW5kaW5nOiAke3RoaXMuY2hhbmdpbmdUaGlzQnJlYWtzQXBwbGljYXRpb25TZWN1cml0eX1gICsgYCAoc2VlICR7WFNTX1NFQ1VSSVRZX1VSTH0pYDtcbiAgfVxufVxuY2xhc3MgU2FmZUh0bWxJbXBsIGV4dGVuZHMgU2FmZVZhbHVlSW1wbCB7XG4gIGdldFR5cGVOYW1lKCkge1xuICAgIHJldHVybiBcIkhUTUxcIjtcbiAgfVxufVxuY2xhc3MgU2FmZVN0eWxlSW1wbCBleHRlbmRzIFNhZmVWYWx1ZUltcGwge1xuICBnZXRUeXBlTmFtZSgpIHtcbiAgICByZXR1cm4gXCJTdHlsZVwiO1xuICB9XG59XG5jbGFzcyBTYWZlU2NyaXB0SW1wbCBleHRlbmRzIFNhZmVWYWx1ZUltcGwge1xuICBnZXRUeXBlTmFtZSgpIHtcbiAgICByZXR1cm4gXCJTY3JpcHRcIjtcbiAgfVxufVxuY2xhc3MgU2FmZVVybEltcGwgZXh0ZW5kcyBTYWZlVmFsdWVJbXBsIHtcbiAgZ2V0VHlwZU5hbWUoKSB7XG4gICAgcmV0dXJuIFwiVVJMXCI7XG4gIH1cbn1cbmNsYXNzIFNhZmVSZXNvdXJjZVVybEltcGwgZXh0ZW5kcyBTYWZlVmFsdWVJbXBsIHtcbiAgZ2V0VHlwZU5hbWUoKSB7XG4gICAgcmV0dXJuIFwiUmVzb3VyY2VVUkxcIjtcbiAgfVxufVxuZnVuY3Rpb24gdW53cmFwU2FmZVZhbHVlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFNhZmVWYWx1ZUltcGwgPyB2YWx1ZS5jaGFuZ2luZ1RoaXNCcmVha3NBcHBsaWNhdGlvblNlY3VyaXR5IDogdmFsdWU7XG59XG5mdW5jdGlvbiBhbGxvd1Nhbml0aXphdGlvbkJ5cGFzc0FuZFRocm93KHZhbHVlLCB0eXBlKSB7XG4gIGNvbnN0IGFjdHVhbFR5cGUgPSBnZXRTYW5pdGl6YXRpb25CeXBhc3NUeXBlKHZhbHVlKTtcbiAgaWYgKGFjdHVhbFR5cGUgIT0gbnVsbCAmJiBhY3R1YWxUeXBlICE9PSB0eXBlKSB7XG4gICAgaWYgKGFjdHVhbFR5cGUgPT09IFwiUmVzb3VyY2VVUkxcIiAmJiB0eXBlID09PSBcIlVSTFwiKSByZXR1cm4gdHJ1ZTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFJlcXVpcmVkIGEgc2FmZSAke3R5cGV9LCBnb3QgYSAke2FjdHVhbFR5cGV9IChzZWUgJHtYU1NfU0VDVVJJVFlfVVJMfSlgKTtcbiAgfVxuICByZXR1cm4gYWN0dWFsVHlwZSA9PT0gdHlwZTtcbn1cbmZ1bmN0aW9uIGdldFNhbml0aXphdGlvbkJ5cGFzc1R5cGUodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgU2FmZVZhbHVlSW1wbCAmJiB2YWx1ZS5nZXRUeXBlTmFtZSgpIHx8IG51bGw7XG59XG5mdW5jdGlvbiBieXBhc3NTYW5pdGl6YXRpb25UcnVzdEh0bWwodHJ1c3RlZEh0bWwpIHtcbiAgcmV0dXJuIG5ldyBTYWZlSHRtbEltcGwodHJ1c3RlZEh0bWwpO1xufVxuZnVuY3Rpb24gYnlwYXNzU2FuaXRpemF0aW9uVHJ1c3RTdHlsZSh0cnVzdGVkU3R5bGUpIHtcbiAgcmV0dXJuIG5ldyBTYWZlU3R5bGVJbXBsKHRydXN0ZWRTdHlsZSk7XG59XG5mdW5jdGlvbiBieXBhc3NTYW5pdGl6YXRpb25UcnVzdFNjcmlwdCh0cnVzdGVkU2NyaXB0KSB7XG4gIHJldHVybiBuZXcgU2FmZVNjcmlwdEltcGwodHJ1c3RlZFNjcmlwdCk7XG59XG5mdW5jdGlvbiBieXBhc3NTYW5pdGl6YXRpb25UcnVzdFVybCh0cnVzdGVkVXJsKSB7XG4gIHJldHVybiBuZXcgU2FmZVVybEltcGwodHJ1c3RlZFVybCk7XG59XG5mdW5jdGlvbiBieXBhc3NTYW5pdGl6YXRpb25UcnVzdFJlc291cmNlVXJsKHRydXN0ZWRSZXNvdXJjZVVybCkge1xuICByZXR1cm4gbmV3IFNhZmVSZXNvdXJjZVVybEltcGwodHJ1c3RlZFJlc291cmNlVXJsKTtcbn1cbmZ1bmN0aW9uIGdldEluZXJ0Qm9keUhlbHBlcihkZWZhdWx0RG9jKSB7XG4gIGNvbnN0IGluZXJ0RG9jdW1lbnRIZWxwZXIgPSBuZXcgSW5lcnREb2N1bWVudEhlbHBlcihkZWZhdWx0RG9jKTtcbiAgcmV0dXJuIGlzRE9NUGFyc2VyQXZhaWxhYmxlKCkgPyBuZXcgRE9NUGFyc2VySGVscGVyKGluZXJ0RG9jdW1lbnRIZWxwZXIpIDogaW5lcnREb2N1bWVudEhlbHBlcjtcbn1cbmNsYXNzIERPTVBhcnNlckhlbHBlciB7XG4gIGluZXJ0RG9jdW1lbnRIZWxwZXI7XG4gIGNvbnN0cnVjdG9yKGluZXJ0RG9jdW1lbnRIZWxwZXIpIHtcbiAgICB0aGlzLmluZXJ0RG9jdW1lbnRIZWxwZXIgPSBpbmVydERvY3VtZW50SGVscGVyO1xuICB9XG4gIGdldEluZXJ0Qm9keUVsZW1lbnQoaHRtbCkge1xuICAgIGh0bWwgPSAnPGJvZHk+PHJlbW92ZT48L3JlbW92ZT4nICsgaHRtbDtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYm9keSA9IG5ldyB3aW5kb3cuRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKHRydXN0ZWRIVE1MRnJvbVN0cmluZyhodG1sKSwgJ3RleHQvaHRtbCcpLmJvZHk7XG4gICAgICBpZiAoYm9keSA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pbmVydERvY3VtZW50SGVscGVyLmdldEluZXJ0Qm9keUVsZW1lbnQoaHRtbCk7XG4gICAgICB9XG4gICAgICBib2R5LmZpcnN0Q2hpbGQ/LnJlbW92ZSgpO1xuICAgICAgcmV0dXJuIGJvZHk7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cbn1cbmNsYXNzIEluZXJ0RG9jdW1lbnRIZWxwZXIge1xuICBkZWZhdWx0RG9jO1xuICBpbmVydERvY3VtZW50O1xuICBjb25zdHJ1Y3RvcihkZWZhdWx0RG9jKSB7XG4gICAgdGhpcy5kZWZhdWx0RG9jID0gZGVmYXVsdERvYztcbiAgICB0aGlzLmluZXJ0RG9jdW1lbnQgPSB0aGlzLmRlZmF1bHREb2MuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KCdzYW5pdGl6YXRpb24taW5lcnQnKTtcbiAgfVxuICBnZXRJbmVydEJvZHlFbGVtZW50KGh0bWwpIHtcbiAgICBjb25zdCB0ZW1wbGF0ZUVsID0gdGhpcy5pbmVydERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RlbXBsYXRlJyk7XG4gICAgdGVtcGxhdGVFbC5pbm5lckhUTUwgPSB0cnVzdGVkSFRNTEZyb21TdHJpbmcoaHRtbCk7XG4gICAgcmV0dXJuIHRlbXBsYXRlRWw7XG4gIH1cbn1cbmZ1bmN0aW9uIGlzRE9NUGFyc2VyQXZhaWxhYmxlKCkge1xuICB0cnkge1xuICAgIHJldHVybiAhIW5ldyB3aW5kb3cuRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKHRydXN0ZWRIVE1MRnJvbVN0cmluZygnJyksICd0ZXh0L2h0bWwnKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5jb25zdCBTQUZFX1VSTF9QQVRURVJOID0gL14oPyFqYXZhc2NyaXB0OikoPzpbYS16MC05Ky4tXSs6fFteJjpcXC8/I10qKD86W1xcLz8jXXwkKSkvaTtcbmZ1bmN0aW9uIF9zYW5pdGl6ZVVybCh1cmwpIHtcbiAgdXJsID0gU3RyaW5nKHVybCk7XG4gIGlmICh1cmwubWF0Y2goU0FGRV9VUkxfUEFUVEVSTikpIHJldHVybiB1cmw7XG4gIGlmICh0eXBlb2YgbmdEZXZNb2RlID09PSAndW5kZWZpbmVkJyB8fCBuZ0Rldk1vZGUpIHtcbiAgICBjb25zb2xlLndhcm4oYFdBUk5JTkc6IHNhbml0aXppbmcgdW5zYWZlIFVSTCB2YWx1ZSAke3VybH0gKHNlZSAke1hTU19TRUNVUklUWV9VUkx9KWApO1xuICB9XG4gIHJldHVybiAndW5zYWZlOicgKyB1cmw7XG59XG5mdW5jdGlvbiB0YWdTZXQodGFncykge1xuICBjb25zdCByZXMgPSB7fTtcbiAgZm9yIChjb25zdCB0IG9mIHRhZ3Muc3BsaXQoJywnKSkgcmVzW3RdID0gdHJ1ZTtcbiAgcmV0dXJuIHJlcztcbn1cbmZ1bmN0aW9uIG1lcmdlKC4uLnNldHMpIHtcbiAgY29uc3QgcmVzID0ge307XG4gIGZvciAoY29uc3QgcyBvZiBzZXRzKSB7XG4gICAgZm9yIChjb25zdCB2IGluIHMpIHtcbiAgICAgIGlmIChzLmhhc093blByb3BlcnR5KHYpKSByZXNbdl0gPSB0cnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzO1xufVxuY29uc3QgVk9JRF9FTEVNRU5UUyA9IC8qI19fUFVSRV9fKi90YWdTZXQoJ2FyZWEsYnIsY29sLGhyLGltZyx3YnInKTtcbmNvbnN0IE9QVElPTkFMX0VORF9UQUdfQkxPQ0tfRUxFTUVOVFMgPSAvKiNfX1BVUkVfXyovdGFnU2V0KCdjb2xncm91cCxkZCxkdCxsaSxwLHRib2R5LHRkLHRmb290LHRoLHRoZWFkLHRyJyk7XG5jb25zdCBPUFRJT05BTF9FTkRfVEFHX0lOTElORV9FTEVNRU5UUyA9IC8qI19fUFVSRV9fKi90YWdTZXQoJ3JwLHJ0Jyk7XG5jb25zdCBPUFRJT05BTF9FTkRfVEFHX0VMRU1FTlRTID0gLyojX19QVVJFX18qL21lcmdlKE9QVElPTkFMX0VORF9UQUdfSU5MSU5FX0VMRU1FTlRTLCBPUFRJT05BTF9FTkRfVEFHX0JMT0NLX0VMRU1FTlRTKTtcbmNvbnN0IEJMT0NLX0VMRU1FTlRTID0gLyojX19QVVJFX18qL21lcmdlKE9QVElPTkFMX0VORF9UQUdfQkxPQ0tfRUxFTUVOVFMsIC8qI19fUFVSRV9fKi90YWdTZXQoJ2FkZHJlc3MsYXJ0aWNsZSwnICsgJ2FzaWRlLGJsb2NrcXVvdGUsY2FwdGlvbixjZW50ZXIsZGVsLGRldGFpbHMsZGlhbG9nLGRpcixkaXYsZGwsZmlndXJlLGZpZ2NhcHRpb24sZm9vdGVyLGgxLGgyLGgzLGg0LGg1LCcgKyAnaDYsaGVhZGVyLGhncm91cCxocixpbnMsbWFpbixtYXAsbWVudSxuYXYsb2wscHJlLHNlY3Rpb24sc3VtbWFyeSx0YWJsZSx1bCcpKTtcbmNvbnN0IElOTElORV9FTEVNRU5UUyA9IC8qI19fUFVSRV9fKi9tZXJnZShPUFRJT05BTF9FTkRfVEFHX0lOTElORV9FTEVNRU5UUywgLyojX19QVVJFX18qL3RhZ1NldCgnYSxhYmJyLGFjcm9ueW0sYXVkaW8sYiwnICsgJ2JkaSxiZG8sYmlnLGJyLGNpdGUsY29kZSxkZWwsZGZuLGVtLGZvbnQsaSxpbWcsaW5zLGtiZCxsYWJlbCxtYXAsbWFyayxwaWN0dXJlLHEscnVieSxycCxydCxzLCcgKyAnc2FtcCxzbWFsbCxzb3VyY2Usc3BhbixzdHJpa2Usc3Ryb25nLHN1YixzdXAsdGltZSx0cmFjayx0dCx1LHZhcix2aWRlbycpKTtcbmNvbnN0IFZBTElEX0VMRU1FTlRTID0gLyojX19QVVJFX18qL21lcmdlKFZPSURfRUxFTUVOVFMsIEJMT0NLX0VMRU1FTlRTLCBJTkxJTkVfRUxFTUVOVFMsIE9QVElPTkFMX0VORF9UQUdfRUxFTUVOVFMpO1xuY29uc3QgVVJJX0FUVFJTID0gLyojX19QVVJFX18qL3RhZ1NldCgnYmFja2dyb3VuZCxjaXRlLGhyZWYsaXRlbXR5cGUsbG9uZ2Rlc2MscG9zdGVyLHNyYyx4bGluazpocmVmJyk7XG5jb25zdCBIVE1MX0FUVFJTID0gLyojX19QVVJFX18qL3RhZ1NldCgnYWJicixhY2Nlc3NrZXksYWxpZ24sYWx0LGF1dG9wbGF5LGF4aXMsYmdjb2xvcixib3JkZXIsY2VsbHBhZGRpbmcsY2VsbHNwYWNpbmcsY2xhc3MsY2xlYXIsY29sb3IsY29scyxjb2xzcGFuLCcgKyAnY29tcGFjdCxjb250cm9scyxjb29yZHMsZGF0ZXRpbWUsZGVmYXVsdCxkaXIsZG93bmxvYWQsZmFjZSxoZWFkZXJzLGhlaWdodCxoaWRkZW4saHJlZmxhbmcsaHNwYWNlLCcgKyAnaXNtYXAsaXRlbXNjb3BlLGl0ZW1wcm9wLGtpbmQsbGFiZWwsbGFuZyxsYW5ndWFnZSxsb29wLG1lZGlhLG11dGVkLG5vaHJlZixub3dyYXAsb3BlbixwcmVsb2FkLHJlbCxyZXYscm9sZSxyb3dzLHJvd3NwYW4scnVsZXMsJyArICdzY29wZSxzY3JvbGxpbmcsc2hhcGUsc2l6ZSxzaXplcyxzcGFuLHNyY2xhbmcsc3Jjc2V0LHN0YXJ0LHN1bW1hcnksdGFiaW5kZXgsdGFyZ2V0LHRpdGxlLHRyYW5zbGF0ZSx0eXBlLHVzZW1hcCwnICsgJ3ZhbGlnbix2YWx1ZSx2c3BhY2Usd2lkdGgnKTtcbmNvbnN0IEFSSUFfQVRUUlMgPSAvKiNfX1BVUkVfXyovdGFnU2V0KCdhcmlhLWFjdGl2ZWRlc2NlbmRhbnQsYXJpYS1hdG9taWMsYXJpYS1hdXRvY29tcGxldGUsYXJpYS1idXN5LGFyaWEtY2hlY2tlZCxhcmlhLWNvbGNvdW50LGFyaWEtY29saW5kZXgsJyArICdhcmlhLWNvbHNwYW4sYXJpYS1jb250cm9scyxhcmlhLWN1cnJlbnQsYXJpYS1kZXNjcmliZWRieSxhcmlhLWRldGFpbHMsYXJpYS1kaXNhYmxlZCxhcmlhLWRyb3BlZmZlY3QsJyArICdhcmlhLWVycm9ybWVzc2FnZSxhcmlhLWV4cGFuZGVkLGFyaWEtZmxvd3RvLGFyaWEtZ3JhYmJlZCxhcmlhLWhhc3BvcHVwLGFyaWEtaGlkZGVuLGFyaWEtaW52YWxpZCwnICsgJ2FyaWEta2V5c2hvcnRjdXRzLGFyaWEtbGFiZWwsYXJpYS1sYWJlbGxlZGJ5LGFyaWEtbGV2ZWwsYXJpYS1saXZlLGFyaWEtbW9kYWwsYXJpYS1tdWx0aWxpbmUsJyArICdhcmlhLW11bHRpc2VsZWN0YWJsZSxhcmlhLW9yaWVudGF0aW9uLGFyaWEtb3ducyxhcmlhLXBsYWNlaG9sZGVyLGFyaWEtcG9zaW5zZXQsYXJpYS1wcmVzc2VkLGFyaWEtcmVhZG9ubHksJyArICdhcmlhLXJlbGV2YW50LGFyaWEtcmVxdWlyZWQsYXJpYS1yb2xlZGVzY3JpcHRpb24sYXJpYS1yb3djb3VudCxhcmlhLXJvd2luZGV4LGFyaWEtcm93c3BhbixhcmlhLXNlbGVjdGVkLCcgKyAnYXJpYS1zZXRzaXplLGFyaWEtc29ydCxhcmlhLXZhbHVlbWF4LGFyaWEtdmFsdWVtaW4sYXJpYS12YWx1ZW5vdyxhcmlhLXZhbHVldGV4dCcpO1xuY29uc3QgVkFMSURfQVRUUlMgPSAvKiNfX1BVUkVfXyovbWVyZ2UoVVJJX0FUVFJTLCBIVE1MX0FUVFJTLCBBUklBX0FUVFJTKTtcbmNvbnN0IFNLSVBfVFJBVkVSU0lOR19DT05URU5UX0lGX0lOVkFMSURfRUxFTUVOVFMgPSAvKiNfX1BVUkVfXyovdGFnU2V0KCdzY3JpcHQsc3R5bGUsdGVtcGxhdGUnKTtcbmNvbnN0IFNFTlNJVElWRV9BVFRSUyA9IC8qI19fUFVSRV9fKi9tZXJnZShVUklfQVRUUlMsIC8qI19fUFVSRV9fKi90YWdTZXQoJ2FjdGlvbixmb3JtYWN0aW9uLGRhdGEsY29kZWJhc2UnKSk7XG5jbGFzcyBTYW5pdGl6aW5nSHRtbFNlcmlhbGl6ZXIge1xuICBzYW5pdGl6ZWRTb21ldGhpbmcgPSBmYWxzZTtcbiAgYnVmID0gW107XG4gIHNhbml0aXplQ2hpbGRyZW4oZWwpIHtcbiAgICBsZXQgY3VycmVudCA9IGVsLmZpcnN0Q2hpbGQ7XG4gICAgbGV0IHRyYXZlcnNlQ29udGVudCA9IHRydWU7XG4gICAgbGV0IHBhcmVudE5vZGVzID0gW107XG4gICAgd2hpbGUgKGN1cnJlbnQpIHtcbiAgICAgIGlmIChjdXJyZW50Lm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgICAgICB0cmF2ZXJzZUNvbnRlbnQgPSB0aGlzLnN0YXJ0RWxlbWVudChjdXJyZW50KTtcbiAgICAgIH0gZWxzZSBpZiAoY3VycmVudC5ub2RlVHlwZSA9PT0gTm9kZS5URVhUX05PREUpIHtcbiAgICAgICAgdGhpcy5jaGFycyhjdXJyZW50Lm5vZGVWYWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNhbml0aXplZFNvbWV0aGluZyA9IHRydWU7XG4gICAgICB9XG4gICAgICBpZiAodHJhdmVyc2VDb250ZW50ICYmIGN1cnJlbnQuZmlyc3RDaGlsZCkge1xuICAgICAgICBwYXJlbnROb2Rlcy5wdXNoKGN1cnJlbnQpO1xuICAgICAgICBjdXJyZW50ID0gZ2V0Rmlyc3RDaGlsZChjdXJyZW50KTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICB3aGlsZSAoY3VycmVudCkge1xuICAgICAgICBpZiAoY3VycmVudC5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICAgICAgICB0aGlzLmVuZEVsZW1lbnQoY3VycmVudCk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IG5leHQgPSBnZXROZXh0U2libGluZyhjdXJyZW50KTtcbiAgICAgICAgaWYgKG5leHQpIHtcbiAgICAgICAgICBjdXJyZW50ID0gbmV4dDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjdXJyZW50ID0gcGFyZW50Tm9kZXMucG9wKCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmJ1Zi5qb2luKCcnKTtcbiAgfVxuICBzdGFydEVsZW1lbnQoZWxlbWVudCkge1xuICAgIGNvbnN0IHRhZ05hbWUgPSBnZXROb2RlTmFtZShlbGVtZW50KS50b0xvd2VyQ2FzZSgpO1xuICAgIGlmICghVkFMSURfRUxFTUVOVFMuaGFzT3duUHJvcGVydHkodGFnTmFtZSkpIHtcbiAgICAgIHRoaXMuc2FuaXRpemVkU29tZXRoaW5nID0gdHJ1ZTtcbiAgICAgIHJldHVybiAhU0tJUF9UUkFWRVJTSU5HX0NPTlRFTlRfSUZfSU5WQUxJRF9FTEVNRU5UUy5oYXNPd25Qcm9wZXJ0eSh0YWdOYW1lKTtcbiAgICB9XG4gICAgdGhpcy5idWYucHVzaCgnPCcpO1xuICAgIHRoaXMuYnVmLnB1c2godGFnTmFtZSk7XG4gICAgY29uc3QgZWxBdHRycyA9IGVsZW1lbnQuYXR0cmlidXRlcztcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVsQXR0cnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGVsQXR0ciA9IGVsQXR0cnMuaXRlbShpKTtcbiAgICAgIGNvbnN0IGF0dHJOYW1lID0gZWxBdHRyLm5hbWU7XG4gICAgICBjb25zdCBsb3dlciA9IGF0dHJOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICBpZiAoIVZBTElEX0FUVFJTLmhhc093blByb3BlcnR5KGxvd2VyKSkge1xuICAgICAgICB0aGlzLnNhbml0aXplZFNvbWV0aGluZyA9IHRydWU7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgbGV0IHZhbHVlID0gZWxBdHRyLnZhbHVlO1xuICAgICAgaWYgKFVSSV9BVFRSU1tsb3dlcl0pIHZhbHVlID0gX3Nhbml0aXplVXJsKHZhbHVlKTtcbiAgICAgIHRoaXMuYnVmLnB1c2goJyAnLCBhdHRyTmFtZSwgJz1cIicsIGVuY29kZUVudGl0aWVzKHZhbHVlKSwgJ1wiJyk7XG4gICAgfVxuICAgIHRoaXMuYnVmLnB1c2goJz4nKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBlbmRFbGVtZW50KGN1cnJlbnQpIHtcbiAgICBjb25zdCB0YWdOYW1lID0gZ2V0Tm9kZU5hbWUoY3VycmVudCkudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoVkFMSURfRUxFTUVOVFMuaGFzT3duUHJvcGVydHkodGFnTmFtZSkgJiYgIVZPSURfRUxFTUVOVFMuaGFzT3duUHJvcGVydHkodGFnTmFtZSkpIHtcbiAgICAgIHRoaXMuYnVmLnB1c2goJzwvJyk7XG4gICAgICB0aGlzLmJ1Zi5wdXNoKHRhZ05hbWUpO1xuICAgICAgdGhpcy5idWYucHVzaCgnPicpO1xuICAgIH1cbiAgfVxuICBjaGFycyhjaGFycykge1xuICAgIHRoaXMuYnVmLnB1c2goZW5jb2RlRW50aXRpZXMoY2hhcnMpKTtcbiAgfVxufVxuZnVuY3Rpb24gaXNDbG9iYmVyZWRFbGVtZW50KHBhcmVudE5vZGUsIGNoaWxkTm9kZSkge1xuICByZXR1cm4gKHBhcmVudE5vZGUuY29tcGFyZURvY3VtZW50UG9zaXRpb24oY2hpbGROb2RlKSAmIE5vZGUuRE9DVU1FTlRfUE9TSVRJT05fQ09OVEFJTkVEX0JZKSAhPT0gTm9kZS5ET0NVTUVOVF9QT1NJVElPTl9DT05UQUlORURfQlk7XG59XG5mdW5jdGlvbiBnZXROZXh0U2libGluZyhub2RlKSB7XG4gIGNvbnN0IG5leHRTaWJsaW5nID0gbm9kZS5uZXh0U2libGluZztcbiAgaWYgKG5leHRTaWJsaW5nICYmIG5vZGUgIT09IG5leHRTaWJsaW5nLnByZXZpb3VzU2libGluZykge1xuICAgIHRocm93IGNsb2JiZXJlZEVsZW1lbnRFcnJvcihuZXh0U2libGluZyk7XG4gIH1cbiAgcmV0dXJuIG5leHRTaWJsaW5nO1xufVxuZnVuY3Rpb24gZ2V0Rmlyc3RDaGlsZChub2RlKSB7XG4gIGNvbnN0IGZpcnN0Q2hpbGQgPSBub2RlLmZpcnN0Q2hpbGQ7XG4gIGlmIChmaXJzdENoaWxkICYmIGlzQ2xvYmJlcmVkRWxlbWVudChub2RlLCBmaXJzdENoaWxkKSkge1xuICAgIHRocm93IGNsb2JiZXJlZEVsZW1lbnRFcnJvcihmaXJzdENoaWxkKTtcbiAgfVxuICByZXR1cm4gZmlyc3RDaGlsZDtcbn1cbmZ1bmN0aW9uIGdldE5vZGVOYW1lKG5vZGUpIHtcbiAgY29uc3Qgbm9kZU5hbWUgPSBub2RlLm5vZGVOYW1lO1xuICByZXR1cm4gdHlwZW9mIG5vZGVOYW1lID09PSAnc3RyaW5nJyA/IG5vZGVOYW1lIDogJ0ZPUk0nO1xufVxuZnVuY3Rpb24gY2xvYmJlcmVkRWxlbWVudEVycm9yKG5vZGUpIHtcbiAgcmV0dXJuIG5ldyBFcnJvcihgRmFpbGVkIHRvIHNhbml0aXplIGh0bWwgYmVjYXVzZSB0aGUgZWxlbWVudCBpcyBjbG9iYmVyZWQ6ICR7bm9kZS5vdXRlckhUTUx9YCk7XG59XG5jb25zdCBTVVJST0dBVEVfUEFJUl9SRUdFWFAgPSAvW1xcdUQ4MDAtXFx1REJGRl1bXFx1REMwMC1cXHVERkZGXS9nO1xuY29uc3QgTk9OX0FMUEhBTlVNRVJJQ19SRUdFWFAgPSAvKFteXFwjLX4gfCFdKS9nO1xuZnVuY3Rpb24gZW5jb2RlRW50aXRpZXModmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlLnJlcGxhY2UoLyYvZywgJyZhbXA7JykucmVwbGFjZShTVVJST0dBVEVfUEFJUl9SRUdFWFAsIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgIGNvbnN0IGhpID0gbWF0Y2guY2hhckNvZGVBdCgwKTtcbiAgICBjb25zdCBsb3cgPSBtYXRjaC5jaGFyQ29kZUF0KDEpO1xuICAgIHJldHVybiAnJiMnICsgKChoaSAtIDB4ZDgwMCkgKiAweDQwMCArIChsb3cgLSAweGRjMDApICsgMHgxMDAwMCkgKyAnOyc7XG4gIH0pLnJlcGxhY2UoTk9OX0FMUEhBTlVNRVJJQ19SRUdFWFAsIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgIHJldHVybiAnJiMnICsgbWF0Y2guY2hhckNvZGVBdCgwKSArICc7JztcbiAgfSkucmVwbGFjZSgvPC9nLCAnJmx0OycpLnJlcGxhY2UoLz4vZywgJyZndDsnKTtcbn1cbmxldCBpbmVydEJvZHlIZWxwZXI7XG5mdW5jdGlvbiBfc2FuaXRpemVIdG1sKGRlZmF1bHREb2MsIHVuc2FmZUh0bWxJbnB1dCkge1xuICBsZXQgaW5lcnRCb2R5RWxlbWVudCA9IG51bGw7XG4gIHRyeSB7XG4gICAgaW5lcnRCb2R5SGVscGVyID0gaW5lcnRCb2R5SGVscGVyIHx8IGdldEluZXJ0Qm9keUhlbHBlcihkZWZhdWx0RG9jKTtcbiAgICBsZXQgdW5zYWZlSHRtbCA9IHVuc2FmZUh0bWxJbnB1dCA/IFN0cmluZyh1bnNhZmVIdG1sSW5wdXQpIDogJyc7XG4gICAgaW5lcnRCb2R5RWxlbWVudCA9IGluZXJ0Qm9keUhlbHBlci5nZXRJbmVydEJvZHlFbGVtZW50KHVuc2FmZUh0bWwpO1xuICAgIGxldCBtWFNTQXR0ZW1wdHMgPSA1O1xuICAgIGxldCBwYXJzZWRIdG1sID0gdW5zYWZlSHRtbDtcbiAgICBkbyB7XG4gICAgICBpZiAobVhTU0F0dGVtcHRzID09PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIHNhbml0aXplIGh0bWwgYmVjYXVzZSB0aGUgaW5wdXQgaXMgdW5zdGFibGUnKTtcbiAgICAgIH1cbiAgICAgIG1YU1NBdHRlbXB0cy0tO1xuICAgICAgdW5zYWZlSHRtbCA9IHBhcnNlZEh0bWw7XG4gICAgICBwYXJzZWRIdG1sID0gaW5lcnRCb2R5RWxlbWVudC5pbm5lckhUTUw7XG4gICAgICBpbmVydEJvZHlFbGVtZW50ID0gaW5lcnRCb2R5SGVscGVyLmdldEluZXJ0Qm9keUVsZW1lbnQodW5zYWZlSHRtbCk7XG4gICAgfSB3aGlsZSAodW5zYWZlSHRtbCAhPT0gcGFyc2VkSHRtbCk7XG4gICAgY29uc3Qgc2FuaXRpemVyID0gbmV3IFNhbml0aXppbmdIdG1sU2VyaWFsaXplcigpO1xuICAgIGNvbnN0IHNhZmVIdG1sID0gc2FuaXRpemVyLnNhbml0aXplQ2hpbGRyZW4oZ2V0VGVtcGxhdGVDb250ZW50KGluZXJ0Qm9keUVsZW1lbnQpIHx8IGluZXJ0Qm9keUVsZW1lbnQpO1xuICAgIGlmICgodHlwZW9mIG5nRGV2TW9kZSA9PT0gJ3VuZGVmaW5lZCcgfHwgbmdEZXZNb2RlKSAmJiBzYW5pdGl6ZXIuc2FuaXRpemVkU29tZXRoaW5nKSB7XG4gICAgICBjb25zb2xlLndhcm4oYFdBUk5JTkc6IHNhbml0aXppbmcgSFRNTCBzdHJpcHBlZCBzb21lIGNvbnRlbnQsIHNlZSAke1hTU19TRUNVUklUWV9VUkx9YCk7XG4gICAgfVxuICAgIHJldHVybiB0cnVzdGVkSFRNTEZyb21TdHJpbmcoc2FmZUh0bWwpO1xuICB9IGZpbmFsbHkge1xuICAgIGlmIChpbmVydEJvZHlFbGVtZW50KSB7XG4gICAgICBjb25zdCBwYXJlbnQgPSBnZXRUZW1wbGF0ZUNvbnRlbnQoaW5lcnRCb2R5RWxlbWVudCkgfHwgaW5lcnRCb2R5RWxlbWVudDtcbiAgICAgIHdoaWxlIChwYXJlbnQuZmlyc3RDaGlsZCkge1xuICAgICAgICBwYXJlbnQuZmlyc3RDaGlsZC5yZW1vdmUoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGdldFRlbXBsYXRlQ29udGVudChlbCkge1xuICByZXR1cm4gJ2NvbnRlbnQnIGluIGVsICYmIGlzVGVtcGxhdGVFbGVtZW50KGVsKSA/IGVsLmNvbnRlbnQgOiBudWxsO1xufVxuZnVuY3Rpb24gaXNUZW1wbGF0ZUVsZW1lbnQoZWwpIHtcbiAgcmV0dXJuIGVsLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSAmJiBlbC5ub2RlTmFtZSA9PT0gJ1RFTVBMQVRFJztcbn1cbmNvbnN0IENPTU1FTlRfRElTQUxMT1dFRCA9IC9ePnxeLT58PCEtLXwtLT58LS0hPnw8IS0kL2c7XG5jb25zdCBDT01NRU5UX0RFTElNSVRFUiA9IC8oPHw+KS9nO1xuY29uc3QgQ09NTUVOVF9ERUxJTUlURVJfRVNDQVBFRCA9ICdcXHUyMDBCJDFcXHUyMDBCJztcbmZ1bmN0aW9uIGVzY2FwZUNvbW1lbnRUZXh0KHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZS5yZXBsYWNlKENPTU1FTlRfRElTQUxMT1dFRCwgdGV4dCA9PiB0ZXh0LnJlcGxhY2UoQ09NTUVOVF9ERUxJTUlURVIsIENPTU1FTlRfREVMSU1JVEVSX0VTQ0FQRUQpKTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZVRleHROb2RlKHJlbmRlcmVyLCB2YWx1ZSkge1xuICByZXR1cm4gcmVuZGVyZXIuY3JlYXRlVGV4dCh2YWx1ZSk7XG59XG5mdW5jdGlvbiB1cGRhdGVUZXh0Tm9kZShyZW5kZXJlciwgck5vZGUsIHZhbHVlKSB7XG4gIHJlbmRlcmVyLnNldFZhbHVlKHJOb2RlLCB2YWx1ZSk7XG59XG5mdW5jdGlvbiBjcmVhdGVDb21tZW50Tm9kZShyZW5kZXJlciwgdmFsdWUpIHtcbiAgcmV0dXJuIHJlbmRlcmVyLmNyZWF0ZUNvbW1lbnQoZXNjYXBlQ29tbWVudFRleHQodmFsdWUpKTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnROb2RlKHJlbmRlcmVyLCBuYW1lLCBuYW1lc3BhY2UpIHtcbiAgcmV0dXJuIHJlbmRlcmVyLmNyZWF0ZUVsZW1lbnQobmFtZSwgbmFtZXNwYWNlKTtcbn1cbmZ1bmN0aW9uIG5hdGl2ZUluc2VydEJlZm9yZShyZW5kZXJlciwgcGFyZW50LCBjaGlsZCwgYmVmb3JlTm9kZSwgaXNNb3ZlKSB7XG4gIHJlbmRlcmVyLmluc2VydEJlZm9yZShwYXJlbnQsIGNoaWxkLCBiZWZvcmVOb2RlLCBpc01vdmUpO1xufVxuZnVuY3Rpb24gbmF0aXZlQXBwZW5kQ2hpbGQocmVuZGVyZXIsIHBhcmVudCwgY2hpbGQpIHtcbiAgbmdEZXZNb2RlICYmIGFzc2VydERlZmluZWQocGFyZW50LCAncGFyZW50IG5vZGUgbXVzdCBiZSBkZWZpbmVkJyk7XG4gIHJlbmRlcmVyLmFwcGVuZENoaWxkKHBhcmVudCwgY2hpbGQpO1xufVxuZnVuY3Rpb24gbmF0aXZlQXBwZW5kT3JJbnNlcnRCZWZvcmUocmVuZGVyZXIsIHBhcmVudCwgY2hpbGQsIGJlZm9yZU5vZGUsIGlzTW92ZSkge1xuICBpZiAoYmVmb3JlTm9kZSAhPT0gbnVsbCkge1xuICAgIG5hdGl2ZUluc2VydEJlZm9yZShyZW5kZXJlciwgcGFyZW50LCBjaGlsZCwgYmVmb3JlTm9kZSwgaXNNb3ZlKTtcbiAgfSBlbHNlIHtcbiAgICBuYXRpdmVBcHBlbmRDaGlsZChyZW5kZXJlciwgcGFyZW50LCBjaGlsZCk7XG4gIH1cbn1cbmZ1bmN0aW9uIG5hdGl2ZVJlbW92ZU5vZGUocmVuZGVyZXIsIHJOb2RlLCBpc0hvc3RFbGVtZW50LCByZXF1aXJlU3luY2hyb25vdXNFbGVtZW50UmVtb3ZhbCkge1xuICByZW5kZXJlci5yZW1vdmVDaGlsZChudWxsLCByTm9kZSwgaXNIb3N0RWxlbWVudCwgcmVxdWlyZVN5bmNocm9ub3VzRWxlbWVudFJlbW92YWwpO1xufVxuZnVuY3Rpb24gY2xlYXJFbGVtZW50Q29udGVudHMockVsZW1lbnQpIHtcbiAgckVsZW1lbnQudGV4dENvbnRlbnQgPSAnJztcbn1cbmZ1bmN0aW9uIHdyaXRlRGlyZWN0U3R5bGUocmVuZGVyZXIsIGVsZW1lbnQsIG5ld1ZhbHVlKSB7XG4gIG5nRGV2TW9kZSAmJiBhc3NlcnRTdHJpbmcobmV3VmFsdWUsIFwiJ25ld1ZhbHVlJyBzaG91bGQgYmUgYSBzdHJpbmdcIik7XG4gIHJlbmRlcmVyLnNldEF0dHJpYnV0ZShlbGVtZW50LCAnc3R5bGUnLCBuZXdWYWx1ZSk7XG59XG5mdW5jdGlvbiB3cml0ZURpcmVjdENsYXNzKHJlbmRlcmVyLCBlbGVtZW50LCBuZXdWYWx1ZSkge1xuICBuZ0Rldk1vZGUgJiYgYXNzZXJ0U3RyaW5nKG5ld1ZhbHVlLCBcIiduZXdWYWx1ZScgc2hvdWxkIGJlIGEgc3RyaW5nXCIpO1xuICBpZiAobmV3VmFsdWUgPT09ICcnKSB7XG4gICAgcmVuZGVyZXIucmVtb3ZlQXR0cmlidXRlKGVsZW1lbnQsICdjbGFzcycpO1xuICB9IGVsc2Uge1xuICAgIHJlbmRlcmVyLnNldEF0dHJpYnV0ZShlbGVtZW50LCAnY2xhc3MnLCBuZXdWYWx1ZSk7XG4gIH1cbn1cbmZ1bmN0aW9uIHNldHVwU3RhdGljQXR0cmlidXRlcyhyZW5kZXJlciwgZWxlbWVudCwgdE5vZGUpIHtcbiAgY29uc3Qge1xuICAgIG1lcmdlZEF0dHJzLFxuICAgIGNsYXNzZXMsXG4gICAgc3R5bGVzXG4gIH0gPSB0Tm9kZTtcbiAgaWYgKG1lcmdlZEF0dHJzICE9PSBudWxsKSB7XG4gICAgc2V0VXBBdHRyaWJ1dGVzKHJlbmRlcmVyLCBlbGVtZW50LCBtZXJnZWRBdHRycyk7XG4gIH1cbiAgaWYgKGNsYXNzZXMgIT09IG51bGwpIHtcbiAgICB3cml0ZURpcmVjdENsYXNzKHJlbmRlcmVyLCBlbGVtZW50LCBjbGFzc2VzKTtcbiAgfVxuICBpZiAoc3R5bGVzICE9PSBudWxsKSB7XG4gICAgd3JpdGVEaXJlY3RTdHlsZShyZW5kZXJlciwgZWxlbWVudCwgc3R5bGVzKTtcbiAgfVxufVxuZnVuY3Rpb24gZW5mb3JjZUlmcmFtZVNlY3VyaXR5KGlmcmFtZSkge1xuICBjb25zdCBsVmlldyA9IGdldExWaWV3KCk7XG4gIGlmcmFtZS5zcmMgPSAnJztcbiAgaWZyYW1lLnNyY2RvYyA9IHRydXN0ZWRIVE1MRnJvbVN0cmluZygnJyk7XG4gIG5hdGl2ZVJlbW92ZU5vZGUobFZpZXdbUkVOREVSRVJdLCBpZnJhbWUpO1xufVxudmFyIFNlY3VyaXR5Q29udGV4dCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoU2VjdXJpdHlDb250ZXh0KSB7XG4gIFNlY3VyaXR5Q29udGV4dFtTZWN1cml0eUNvbnRleHRbXCJOT05FXCJdID0gMF0gPSBcIk5PTkVcIjtcbiAgU2VjdXJpdHlDb250ZXh0W1NlY3VyaXR5Q29udGV4dFtcIkhUTUxcIl0gPSAxXSA9IFwiSFRNTFwiO1xuICBTZWN1cml0eUNvbnRleHRbU2VjdXJpdHlDb250ZXh0W1wiU1RZTEVcIl0gPSAyXSA9IFwiU1RZTEVcIjtcbiAgU2VjdXJpdHlDb250ZXh0W1NlY3VyaXR5Q29udGV4dFtcIlNDUklQVFwiXSA9IDNdID0gXCJTQ1JJUFRcIjtcbiAgU2VjdXJpdHlDb250ZXh0W1NlY3VyaXR5Q29udGV4dFtcIlVSTFwiXSA9IDRdID0gXCJVUkxcIjtcbiAgU2VjdXJpdHlDb250ZXh0W1NlY3VyaXR5Q29udGV4dFtcIlJFU09VUkNFX1VSTFwiXSA9IDVdID0gXCJSRVNPVVJDRV9VUkxcIjtcbiAgcmV0dXJuIFNlY3VyaXR5Q29udGV4dDtcbn0oU2VjdXJpdHlDb250ZXh0IHx8IHt9KTtcbmZ1bmN0aW9uIMm1ybVzYW5pdGl6ZUh0bWwodW5zYWZlSHRtbCkge1xuICBjb25zdCBzYW5pdGl6ZXIgPSBnZXRTYW5pdGl6ZXIoKTtcbiAgaWYgKHNhbml0aXplcikge1xuICAgIHJldHVybiB0cnVzdGVkSFRNTEZyb21TdHJpbmdCeXBhc3Moc2FuaXRpemVyLnNhbml0aXplKFNlY3VyaXR5Q29udGV4dC5IVE1MLCB1bnNhZmVIdG1sKSB8fCAnJyk7XG4gIH1cbiAgaWYgKGFsbG93U2FuaXRpemF0aW9uQnlwYXNzQW5kVGhyb3codW5zYWZlSHRtbCwgXCJIVE1MXCIpKSB7XG4gICAgcmV0dXJuIHRydXN0ZWRIVE1MRnJvbVN0cmluZ0J5cGFzcyh1bndyYXBTYWZlVmFsdWUodW5zYWZlSHRtbCkpO1xuICB9XG4gIHJldHVybiBfc2FuaXRpemVIdG1sKGdldERvY3VtZW50KCksIHJlbmRlclN0cmluZ2lmeSh1bnNhZmVIdG1sKSk7XG59XG5mdW5jdGlvbiDJtcm1c2FuaXRpemVTdHlsZSh1bnNhZmVTdHlsZSkge1xuICBjb25zdCBzYW5pdGl6ZXIgPSBnZXRTYW5pdGl6ZXIoKTtcbiAgaWYgKHNhbml0aXplcikge1xuICAgIHJldHVybiBzYW5pdGl6ZXIuc2FuaXRpemUoU2VjdXJpdHlDb250ZXh0LlNUWUxFLCB1bnNhZmVTdHlsZSkgfHwgJyc7XG4gIH1cbiAgaWYgKGFsbG93U2FuaXRpemF0aW9uQnlwYXNzQW5kVGhyb3codW5zYWZlU3R5bGUsIFwiU3R5bGVcIikpIHtcbiAgICByZXR1cm4gdW53cmFwU2FmZVZhbHVlKHVuc2FmZVN0eWxlKTtcbiAgfVxuICByZXR1cm4gcmVuZGVyU3RyaW5naWZ5KHVuc2FmZVN0eWxlKTtcbn1cbmZ1bmN0aW9uIMm1ybVzYW5pdGl6ZVVybCh1bnNhZmVVcmwpIHtcbiAgY29uc3Qgc2FuaXRpemVyID0gZ2V0U2FuaXRpemVyKCk7XG4gIGlmIChzYW5pdGl6ZXIpIHtcbiAgICByZXR1cm4gc2FuaXRpemVyLnNhbml0aXplKFNlY3VyaXR5Q29udGV4dC5VUkwsIHVuc2FmZVVybCkgfHwgJyc7XG4gIH1cbiAgaWYgKGFsbG93U2FuaXRpemF0aW9uQnlwYXNzQW5kVGhyb3codW5zYWZlVXJsLCBcIlVSTFwiKSkge1xuICAgIHJldHVybiB1bndyYXBTYWZlVmFsdWUodW5zYWZlVXJsKTtcbiAgfVxuICByZXR1cm4gX3Nhbml0aXplVXJsKHJlbmRlclN0cmluZ2lmeSh1bnNhZmVVcmwpKTtcbn1cbmZ1bmN0aW9uIMm1ybVzYW5pdGl6ZVJlc291cmNlVXJsKHVuc2FmZVJlc291cmNlVXJsKSB7XG4gIGNvbnN0IHNhbml0aXplciA9IGdldFNhbml0aXplcigpO1xuICBpZiAoc2FuaXRpemVyKSB7XG4gICAgcmV0dXJuIHRydXN0ZWRTY3JpcHRVUkxGcm9tU3RyaW5nQnlwYXNzKHNhbml0aXplci5zYW5pdGl6ZShTZWN1cml0eUNvbnRleHQuUkVTT1VSQ0VfVVJMLCB1bnNhZmVSZXNvdXJjZVVybCkgfHwgJycpO1xuICB9XG4gIGlmIChhbGxvd1Nhbml0aXphdGlvbkJ5cGFzc0FuZFRocm93KHVuc2FmZVJlc291cmNlVXJsLCBcIlJlc291cmNlVVJMXCIpKSB7XG4gICAgcmV0dXJuIHRydXN0ZWRTY3JpcHRVUkxGcm9tU3RyaW5nQnlwYXNzKHVud3JhcFNhZmVWYWx1ZSh1bnNhZmVSZXNvdXJjZVVybCkpO1xuICB9XG4gIHRocm93IG5ldyBSdW50aW1lRXJyb3IoOTA0LCBuZ0Rldk1vZGUgJiYgYHVuc2FmZSB2YWx1ZSB1c2VkIGluIGEgcmVzb3VyY2UgVVJMIGNvbnRleHQgKHNlZSAke1hTU19TRUNVUklUWV9VUkx9KWApO1xufVxuZnVuY3Rpb24gybXJtXNhbml0aXplU2NyaXB0KHVuc2FmZVNjcmlwdCkge1xuICBjb25zdCBzYW5pdGl6ZXIgPSBnZXRTYW5pdGl6ZXIoKTtcbiAgaWYgKHNhbml0aXplcikge1xuICAgIHJldHVybiB0cnVzdGVkU2NyaXB0RnJvbVN0cmluZ0J5cGFzcyhzYW5pdGl6ZXIuc2FuaXRpemUoU2VjdXJpdHlDb250ZXh0LlNDUklQVCwgdW5zYWZlU2NyaXB0KSB8fCAnJyk7XG4gIH1cbiAgaWYgKGFsbG93U2FuaXRpemF0aW9uQnlwYXNzQW5kVGhyb3codW5zYWZlU2NyaXB0LCBcIlNjcmlwdFwiKSkge1xuICAgIHJldHVybiB0cnVzdGVkU2NyaXB0RnJvbVN0cmluZ0J5cGFzcyh1bndyYXBTYWZlVmFsdWUodW5zYWZlU2NyaXB0KSk7XG4gIH1cbiAgdGhyb3cgbmV3IFJ1bnRpbWVFcnJvcig5MDUsIG5nRGV2TW9kZSAmJiAndW5zYWZlIHZhbHVlIHVzZWQgaW4gYSBzY3JpcHQgY29udGV4dCcpO1xufVxuZnVuY3Rpb24gybXJtXRydXN0Q29uc3RhbnRIdG1sKGh0bWwpIHtcbiAgaWYgKG5nRGV2TW9kZSAmJiAoIUFycmF5LmlzQXJyYXkoaHRtbCkgfHwgIUFycmF5LmlzQXJyYXkoaHRtbC5yYXcpIHx8IGh0bWwubGVuZ3RoICE9PSAxKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgVW5leHBlY3RlZCBpbnRlcnBvbGF0aW9uIGluIHRydXN0ZWQgSFRNTCBjb25zdGFudDogJHtodG1sLmpvaW4oJz8nKX1gKTtcbiAgfVxuICByZXR1cm4gdHJ1c3RlZEhUTUxGcm9tU3RyaW5nKGh0bWxbMF0pO1xufVxuZnVuY3Rpb24gybXJtXRydXN0Q29uc3RhbnRSZXNvdXJjZVVybCh1cmwpIHtcbiAgaWYgKG5nRGV2TW9kZSAmJiAoIUFycmF5LmlzQXJyYXkodXJsKSB8fCAhQXJyYXkuaXNBcnJheSh1cmwucmF3KSB8fCB1cmwubGVuZ3RoICE9PSAxKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgVW5leHBlY3RlZCBpbnRlcnBvbGF0aW9uIGluIHRydXN0ZWQgVVJMIGNvbnN0YW50OiAke3VybC5qb2luKCc/Jyl9YCk7XG4gIH1cbiAgcmV0dXJuIHRydXN0ZWRTY3JpcHRVUkxGcm9tU3RyaW5nKHVybFswXSk7XG59XG5jb25zdCBTUkNfUkVTT1VSQ0VfVEFHUyA9IC8qI19fUFVSRV9fKi9uZXcgU2V0KFsnZW1iZWQnLCAnZnJhbWUnLCAnaWZyYW1lJywgJ21lZGlhJywgJ3NjcmlwdCddKTtcbmNvbnN0IEhSRUZfUkVTT1VSQ0VfVEFHUyA9IC8qI19fUFVSRV9fKi9uZXcgU2V0KFsnYmFzZScsICdsaW5rJywgJ3NjcmlwdCddKTtcbmZ1bmN0aW9uIGdldFVybFNhbml0aXplcih0YWcsIHByb3ApIHtcbiAgY29uc3QgaXNSZXNvdXJjZSA9IHByb3AgPT09ICdzcmMnICYmIFNSQ19SRVNPVVJDRV9UQUdTLmhhcyh0YWcpIHx8IHByb3AgPT09ICdocmVmJyAmJiBIUkVGX1JFU09VUkNFX1RBR1MuaGFzKHRhZykgfHwgcHJvcCA9PT0gJ3hsaW5rOmhyZWYnICYmIHRhZyA9PT0gJ3NjcmlwdCc7XG4gIHJldHVybiBpc1Jlc291cmNlID8gybXJtXNhbml0aXplUmVzb3VyY2VVcmwgOiDJtcm1c2FuaXRpemVVcmw7XG59XG5mdW5jdGlvbiDJtcm1c2FuaXRpemVVcmxPclJlc291cmNlVXJsKHVuc2FmZVVybCwgdGFnLCBwcm9wKSB7XG4gIHJldHVybiBnZXRVcmxTYW5pdGl6ZXIodGFnLCBwcm9wKSh1bnNhZmVVcmwpO1xufVxuZnVuY3Rpb24gdmFsaWRhdGVBZ2FpbnN0RXZlbnRQcm9wZXJ0aWVzKG5hbWUpIHtcbiAgaWYgKG5hbWUudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKCdvbicpKSB7XG4gICAgY29uc3QgZXJyb3JNZXNzYWdlID0gYEJpbmRpbmcgdG8gZXZlbnQgcHJvcGVydHkgJyR7bmFtZX0nIGlzIGRpc2FsbG93ZWQgZm9yIHNlY3VyaXR5IHJlYXNvbnMsIGAgKyBgcGxlYXNlIHVzZSAoJHtuYW1lLnNsaWNlKDIpfSk9Li4uYCArIGBcXG5JZiAnJHtuYW1lfScgaXMgYSBkaXJlY3RpdmUgaW5wdXQsIG1ha2Ugc3VyZSB0aGUgZGlyZWN0aXZlIGlzIGltcG9ydGVkIGJ5IHRoZWAgKyBgIGN1cnJlbnQgbW9kdWxlLmA7XG4gICAgdGhyb3cgbmV3IFJ1bnRpbWVFcnJvcigzMDYsIGVycm9yTWVzc2FnZSk7XG4gIH1cbn1cbmZ1bmN0aW9uIHZhbGlkYXRlQWdhaW5zdEV2ZW50QXR0cmlidXRlcyhuYW1lKSB7XG4gIGlmIChuYW1lLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aCgnb24nKSkge1xuICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGBCaW5kaW5nIHRvIGV2ZW50IGF0dHJpYnV0ZSAnJHtuYW1lfScgaXMgZGlzYWxsb3dlZCBmb3Igc2VjdXJpdHkgcmVhc29ucywgYCArIGBwbGVhc2UgdXNlICgke25hbWUuc2xpY2UoMil9KT0uLi5gO1xuICAgIHRocm93IG5ldyBSdW50aW1lRXJyb3IoMzA2LCBlcnJvck1lc3NhZ2UpO1xuICB9XG59XG5mdW5jdGlvbiBnZXRTYW5pdGl6ZXIoKSB7XG4gIGNvbnN0IGxWaWV3ID0gZ2V0TFZpZXcoKTtcbiAgcmV0dXJuIGxWaWV3ICYmIGxWaWV3W0VOVklST05NRU5UXS5zYW5pdGl6ZXI7XG59XG5jb25zdCBhdHRyaWJ1dGVOYW1lID0gLyojX19QVVJFX18qL25ldyBTZXQoWydhdHRyaWJ1dGVuYW1lJ10pO1xuY29uc3QgU0VDVVJJVFlfU0VOU0lUSVZFX0VMRU1FTlRTID0ge1xuICAnaWZyYW1lJzogLyojX19QVVJFX18qL25ldyBTZXQoWydzYW5kYm94JywgJ2FsbG93JywgJ2FsbG93ZnVsbHNjcmVlbicsICdyZWZlcnJlcnBvbGljeScsICdjc3AnLCAnZmV0Y2hwcmlvcml0eSddKSxcbiAgJ2FuaW1hdGUnOiBhdHRyaWJ1dGVOYW1lLFxuICAnc2V0JzogYXR0cmlidXRlTmFtZSxcbiAgJ2FuaW1hdGVtb3Rpb24nOiBhdHRyaWJ1dGVOYW1lLFxuICAnYW5pbWF0ZXRyYW5zZm9ybSc6IGF0dHJpYnV0ZU5hbWVcbn07XG5mdW5jdGlvbiDJtcm1dmFsaWRhdGVBdHRyaWJ1dGUodmFsdWUsIHRhZ05hbWUsIGF0dHJpYnV0ZU5hbWUpIHtcbiAgY29uc3QgbG93ZXJDYXNlVGFnTmFtZSA9IHRhZ05hbWUudG9Mb3dlckNhc2UoKTtcbiAgY29uc3QgbG93ZXJDYXNlQXR0ck5hbWUgPSBhdHRyaWJ1dGVOYW1lLnRvTG93ZXJDYXNlKCk7XG4gIGlmICghU0VDVVJJVFlfU0VOU0lUSVZFX0VMRU1FTlRTW2xvd2VyQ2FzZVRhZ05hbWVdPy5oYXMobG93ZXJDYXNlQXR0ck5hbWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIGNvbnN0IHROb2RlID0gZ2V0U2VsZWN0ZWRUTm9kZSgpO1xuICBpZiAodE5vZGUudHlwZSAhPT0gMikge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICBjb25zdCBsVmlldyA9IGdldExWaWV3KCk7XG4gIGlmIChsb3dlckNhc2VUYWdOYW1lID09PSAnaWZyYW1lJykge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBnZXROYXRpdmVCeVROb2RlKHROb2RlLCBsVmlldyk7XG4gICAgZW5mb3JjZUlmcmFtZVNlY3VyaXR5KGVsZW1lbnQpO1xuICB9XG4gIGNvbnN0IGVycm9yTWVzc2FnZSA9IG5nRGV2TW9kZSAmJiBgQW5ndWxhciBoYXMgZGV0ZWN0ZWQgdGhhdCB0aGUgXFxgJHthdHRyaWJ1dGVOYW1lfVxcYCB3YXMgYXBwbGllZCBgICsgYGFzIGEgYmluZGluZyB0byB0aGUgPCR7dGFnTmFtZX0+IGVsZW1lbnQke2dldFRlbXBsYXRlTG9jYXRpb25EZXRhaWxzKGxWaWV3KX0uIGAgKyBgRm9yIHNlY3VyaXR5IHJlYXNvbnMsIHRoZSBcXGAke2F0dHJpYnV0ZU5hbWV9XFxgIGNhbiBiZSBzZXQgb24gdGhlIDwke3RhZ05hbWV9PiBlbGVtZW50IGAgKyBgYXMgYSBzdGF0aWMgYXR0cmlidXRlIG9ubHkuIFxcbmAgKyBgVG8gZml4IHRoaXMsIHN3aXRjaCB0aGUgXFxgJHthdHRyaWJ1dGVOYW1lfVxcYCBiaW5kaW5nIHRvIGEgc3RhdGljIGF0dHJpYnV0ZSBgICsgYGluIGEgdGVtcGxhdGUgb3IgaW4gaG9zdCBiaW5kaW5ncyBzZWN0aW9uLmA7XG4gIHRocm93IG5ldyBSdW50aW1lRXJyb3IoLTkxMCwgZXJyb3JNZXNzYWdlKTtcbn1cbmNvbnN0IE5HX1JFRkxFQ1RfQVRUUlNfRkxBR19ERUZBVUxUID0gZmFsc2U7XG5jb25zdCBOR19SRUZMRUNUX0FUVFJTX0ZMQUcgPSAvKiNfX1BVUkVfXyovbmV3IEluamVjdGlvblRva2VuKHR5cGVvZiBuZ0Rldk1vZGUgPT09ICd1bmRlZmluZWQnIHx8IG5nRGV2TW9kZSA/ICdOR19SRUZMRUNUX0ZMQUcnIDogJycsIHtcbiAgZmFjdG9yeTogKCkgPT4gTkdfUkVGTEVDVF9BVFRSU19GTEFHX0RFRkFVTFRcbn0pO1xuZnVuY3Rpb24gcHJvdmlkZU5nUmVmbGVjdEF0dHJpYnV0ZXMoKSB7XG4gIGNvbnN0IHByb3ZpZGVycyA9IHR5cGVvZiBuZ0Rldk1vZGUgPT09ICd1bmRlZmluZWQnIHx8IG5nRGV2TW9kZSA/IFt7XG4gICAgcHJvdmlkZTogTkdfUkVGTEVDVF9BVFRSU19GTEFHLFxuICAgIHVzZVZhbHVlOiB0cnVlXG4gIH1dIDogW107XG4gIHJldHVybiBtYWtlRW52aXJvbm1lbnRQcm92aWRlcnMocHJvdmlkZXJzKTtcbn1cbmZ1bmN0aW9uIG5vcm1hbGl6ZURlYnVnQmluZGluZ05hbWUobmFtZSkge1xuICBuYW1lID0gY2FtZWxDYXNlVG9EYXNoQ2FzZShuYW1lLnJlcGxhY2UoL1skQF0vZywgJ18nKSk7XG4gIHJldHVybiBgbmctcmVmbGVjdC0ke25hbWV9YDtcbn1cbmNvbnN0IENBTUVMX0NBU0VfUkVHRVhQID0gLyhbQS1aXSkvZztcbmZ1bmN0aW9uIGNhbWVsQ2FzZVRvRGFzaENhc2UoaW5wdXQpIHtcbiAgcmV0dXJuIGlucHV0LnJlcGxhY2UoQ0FNRUxfQ0FTRV9SRUdFWFAsICguLi5tKSA9PiAnLScgKyBtWzFdLnRvTG93ZXJDYXNlKCkpO1xufVxuZnVuY3Rpb24gbm9ybWFsaXplRGVidWdCaW5kaW5nVmFsdWUodmFsdWUpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gdmFsdWUgIT0gbnVsbCA/IHZhbHVlLnRvU3RyaW5nKCkuc2xpY2UoMCwgMzApIDogdmFsdWU7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gJ1tFUlJPUl0gRXhjZXB0aW9uIHdoaWxlIHRyeWluZyB0byBzZXJpYWxpemUgdGhlIHZhbHVlJztcbiAgfVxufVxuZnVuY3Rpb24gybXJtXJlc29sdmVXaW5kb3coZWxlbWVudCkge1xuICByZXR1cm4gZWxlbWVudC5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3O1xufVxuZnVuY3Rpb24gybXJtXJlc29sdmVEb2N1bWVudChlbGVtZW50KSB7XG4gIHJldHVybiBlbGVtZW50Lm93bmVyRG9jdW1lbnQ7XG59XG5mdW5jdGlvbiDJtcm1cmVzb2x2ZUJvZHkoZWxlbWVudCkge1xuICByZXR1cm4gZWxlbWVudC5vd25lckRvY3VtZW50LmJvZHk7XG59XG5jb25zdCBJTlRFUlBPTEFUSU9OX0RFTElNSVRFUiA9IGDvv71gO1xuZnVuY3Rpb24gbWF5YmVVbndyYXBGbih2YWx1ZSkge1xuICBpZiAodmFsdWUgaW5zdGFuY2VvZiBGdW5jdGlvbikge1xuICAgIHJldHVybiB2YWx1ZSgpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxufVxuY29uc3QgVkFMVUVfU1RSSU5HX0xFTkdUSF9MSU1JVCA9IDIwMDtcbmZ1bmN0aW9uIGFzc2VydFN0YW5kYWxvbmVDb21wb25lbnRUeXBlKHR5cGUpIHtcbiAgYXNzZXJ0Q29tcG9uZW50RGVmKHR5cGUpO1xuICBjb25zdCBjb21wb25lbnREZWYgPSBnZXRDb21wb25lbnREZWYodHlwZSk7XG4gIGlmICghY29tcG9uZW50RGVmLnN0YW5kYWxvbmUpIHtcbiAgICB0aHJvdyBuZXcgUnVudGltZUVycm9yKDkwNywgYFRoZSAke3N0cmluZ2lmeUZvckVycm9yKHR5cGUpfSBjb21wb25lbnQgaXMgbm90IG1hcmtlZCBhcyBzdGFuZGFsb25lLCBgICsgYGJ1dCBBbmd1bGFyIGV4cGVjdHMgdG8gaGF2ZSBhIHN0YW5kYWxvbmUgY29tcG9uZW50IGhlcmUuIGAgKyBgUGxlYXNlIG1ha2Ugc3VyZSB0aGUgJHtzdHJpbmdpZnlGb3JFcnJvcih0eXBlKX0gY29tcG9uZW50IGRvZXMgbm90IGhhdmUgYCArIGB0aGUgXFxgc3RhbmRhbG9uZTogZmFsc2VcXGAgZmxhZyBpbiB0aGUgZGVjb3JhdG9yLmApO1xuICB9XG59XG5mdW5jdGlvbiBhc3NlcnRDb21wb25lbnREZWYodHlwZSkge1xuICBpZiAoIWdldENvbXBvbmVudERlZih0eXBlKSkge1xuICAgIHRocm93IG5ldyBSdW50aW1lRXJyb3IoOTA2LCBgVGhlICR7c3RyaW5naWZ5Rm9yRXJyb3IodHlwZSl9IGlzIG5vdCBhbiBBbmd1bGFyIGNvbXBvbmVudCwgYCArIGBtYWtlIHN1cmUgaXQgaGFzIHRoZSBcXGBAQ29tcG9uZW50XFxgIGRlY29yYXRvci5gKTtcbiAgfVxufVxuZnVuY3Rpb24gdGhyb3dNdWx0aXBsZUNvbXBvbmVudEVycm9yKHROb2RlLCBmaXJzdCwgc2Vjb25kKSB7XG4gIHRocm93IG5ldyBSdW50aW1lRXJyb3IoLTMwMCwgYE11bHRpcGxlIGNvbXBvbmVudHMgbWF0Y2ggbm9kZSB3aXRoIHRhZ25hbWUgJHt0Tm9kZS52YWx1ZX06IGAgKyBgJHtzdHJpbmdpZnlGb3JFcnJvcihmaXJzdCl9IGFuZCBgICsgYCR7c3RyaW5naWZ5Rm9yRXJyb3Ioc2Vjb25kKX1gKTtcbn1cbmZ1bmN0aW9uIHRocm93RXJyb3JJZk5vQ2hhbmdlc01vZGUoY3JlYXRpb25Nb2RlLCBvbGRWYWx1ZSwgY3VyclZhbHVlLCBwcm9wTmFtZSwgbFZpZXcpIHtcbiAgY29uc3QgaG9zdENvbXBvbmVudERlZiA9IGdldERlY2xhcmF0aW9uQ29tcG9uZW50RGVmKGxWaWV3KTtcbiAgY29uc3QgY29tcG9uZW50Q2xhc3NOYW1lID0gaG9zdENvbXBvbmVudERlZj8udHlwZT8ubmFtZTtcbiAgY29uc3QgZmllbGQgPSBwcm9wTmFtZSA/IGAgZm9yICcke3Byb3BOYW1lfSdgIDogJyc7XG4gIGxldCBtc2cgPSBgRXhwcmVzc2lvbkNoYW5nZWRBZnRlckl0SGFzQmVlbkNoZWNrZWRFcnJvcjogRXhwcmVzc2lvbiBoYXMgY2hhbmdlZCBhZnRlciBpdCB3YXMgY2hlY2tlZC4gUHJldmlvdXMgdmFsdWUke2ZpZWxkfTogJyR7Zm9ybWF0VmFsdWUob2xkVmFsdWUpfScuIEN1cnJlbnQgdmFsdWU6ICcke2Zvcm1hdFZhbHVlKGN1cnJWYWx1ZSl9Jy4ke2NvbXBvbmVudENsYXNzTmFtZSA/IGAgRXhwcmVzc2lvbiBsb2NhdGlvbjogJHtjb21wb25lbnRDbGFzc05hbWV9IGNvbXBvbmVudGAgOiAnJ31gO1xuICBpZiAoY3JlYXRpb25Nb2RlKSB7XG4gICAgbXNnICs9IGAgSXQgc2VlbXMgbGlrZSB0aGUgdmlldyBoYXMgYmVlbiBjcmVhdGVkIGFmdGVyIGl0cyBwYXJlbnQgYW5kIGl0cyBjaGlsZHJlbiBoYXZlIGJlZW4gZGlydHkgY2hlY2tlZC5gICsgYCBIYXMgaXQgYmVlbiBjcmVhdGVkIGluIGEgY2hhbmdlIGRldGVjdGlvbiBob29rP2A7XG4gIH1cbiAgdGhyb3cgbmV3IFJ1bnRpbWVFcnJvcigtMTAwLCBtc2cpO1xufVxuZnVuY3Rpb24gZm9ybWF0VmFsdWUodmFsdWUpIHtcbiAgbGV0IHN0clZhbHVlID0gU3RyaW5nKHZhbHVlKTtcbiAgdHJ5IHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgfHwgc3RyVmFsdWUgPT09ICdbb2JqZWN0IE9iamVjdF0nKSB7XG4gICAgICBzdHJWYWx1ZSA9IEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7fVxuICByZXR1cm4gc3RyVmFsdWUubGVuZ3RoID4gVkFMVUVfU1RSSU5HX0xFTkdUSF9MSU1JVCA/IHN0clZhbHVlLnN1YnN0cmluZygwLCBWQUxVRV9TVFJJTkdfTEVOR1RIX0xJTUlUKSArICfigKYnIDogc3RyVmFsdWU7XG59XG5mdW5jdGlvbiBjb25zdHJ1Y3REZXRhaWxzRm9ySW50ZXJwb2xhdGlvbihsVmlldywgcm9vdEluZGV4LCBleHByZXNzaW9uSW5kZXgsIG1ldGEsIGNoYW5nZWRWYWx1ZSkge1xuICBjb25zdCBbcHJvcE5hbWUsIHByZWZpeCwgLi4uY2h1bmtzXSA9IG1ldGEuc3BsaXQoSU5URVJQT0xBVElPTl9ERUxJTUlURVIpO1xuICBsZXQgb2xkVmFsdWUgPSBwcmVmaXgsXG4gICAgbmV3VmFsdWUgPSBwcmVmaXg7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgY2h1bmtzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3Qgc2xvdElkeCA9IHJvb3RJbmRleCArIGk7XG4gICAgb2xkVmFsdWUgKz0gYCR7bFZpZXdbc2xvdElkeF19JHtjaHVua3NbaV19YDtcbiAgICBuZXdWYWx1ZSArPSBgJHtzbG90SWR4ID09PSBleHByZXNzaW9uSW5kZXggPyBjaGFuZ2VkVmFsdWUgOiBsVmlld1tzbG90SWR4XX0ke2NodW5rc1tpXX1gO1xuICB9XG4gIHJldHVybiB7XG4gICAgcHJvcE5hbWUsXG4gICAgb2xkVmFsdWUsXG4gICAgbmV3VmFsdWVcbiAgfTtcbn1cbmZ1bmN0aW9uIGdldEV4cHJlc3Npb25DaGFuZ2VkRXJyb3JEZXRhaWxzKGxWaWV3LCBiaW5kaW5nSW5kZXgsIG9sZFZhbHVlLCBuZXdWYWx1ZSkge1xuICBjb25zdCB0RGF0YSA9IGxWaWV3W1RWSUVXXS5kYXRhO1xuICBjb25zdCBtZXRhZGF0YSA9IHREYXRhW2JpbmRpbmdJbmRleF07XG4gIGlmICh0eXBlb2YgbWV0YWRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKG1ldGFkYXRhLmluZGV4T2YoSU5URVJQT0xBVElPTl9ERUxJTUlURVIpID4gLTEpIHtcbiAgICAgIHJldHVybiBjb25zdHJ1Y3REZXRhaWxzRm9ySW50ZXJwb2xhdGlvbihsVmlldywgYmluZGluZ0luZGV4LCBiaW5kaW5nSW5kZXgsIG1ldGFkYXRhLCBuZXdWYWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBwcm9wTmFtZTogbWV0YWRhdGEsXG4gICAgICBvbGRWYWx1ZSxcbiAgICAgIG5ld1ZhbHVlXG4gICAgfTtcbiAgfVxuICBpZiAobWV0YWRhdGEgPT09IG51bGwpIHtcbiAgICBsZXQgaWR4ID0gYmluZGluZ0luZGV4IC0gMTtcbiAgICB3aGlsZSAodHlwZW9mIHREYXRhW2lkeF0gIT09ICdzdHJpbmcnICYmIHREYXRhW2lkeCArIDFdID09PSBudWxsKSB7XG4gICAgICBpZHgtLTtcbiAgICB9XG4gICAgY29uc3QgbWV0YSA9IHREYXRhW2lkeF07XG4gICAgaWYgKHR5cGVvZiBtZXRhID09PSAnc3RyaW5nJykge1xuICAgICAgY29uc3QgbWF0Y2hlcyA9IG1ldGEubWF0Y2gobmV3IFJlZ0V4cChJTlRFUlBPTEFUSU9OX0RFTElNSVRFUiwgJ2cnKSk7XG4gICAgICBpZiAobWF0Y2hlcyAmJiBtYXRjaGVzLmxlbmd0aCAtIDEgPiBiaW5kaW5nSW5kZXggLSBpZHgpIHtcbiAgICAgICAgcmV0dXJuIGNvbnN0cnVjdERldGFpbHNGb3JJbnRlcnBvbGF0aW9uKGxWaWV3LCBpZHgsIGJpbmRpbmdJbmRleCwgbWV0YSwgbmV3VmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIHByb3BOYW1lOiB1bmRlZmluZWQsXG4gICAgb2xkVmFsdWUsXG4gICAgbmV3VmFsdWVcbiAgfTtcbn1cbmZ1bmN0aW9uIGNsYXNzSW5kZXhPZihjbGFzc05hbWUsIGNsYXNzVG9TZWFyY2gsIHN0YXJ0aW5nSW5kZXgpIHtcbiAgbmdEZXZNb2RlICYmIGFzc2VydE5vdEVxdWFsKGNsYXNzVG9TZWFyY2gsICcnLCAnY2FuIG5vdCBsb29rIGZvciBcIlwiIHN0cmluZy4nKTtcbiAgbGV0IGVuZCA9IGNsYXNzTmFtZS5sZW5ndGg7XG4gIHdoaWxlICh0cnVlKSB7XG4gICAgY29uc3QgZm91bmRJbmRleCA9IGNsYXNzTmFtZS5pbmRleE9mKGNsYXNzVG9TZWFyY2gsIHN0YXJ0aW5nSW5kZXgpO1xuICAgIGlmIChmb3VuZEluZGV4ID09PSAtMSkgcmV0dXJuIGZvdW5kSW5kZXg7XG4gICAgaWYgKGZvdW5kSW5kZXggPT09IDAgfHwgY2xhc3NOYW1lLmNoYXJDb2RlQXQoZm91bmRJbmRleCAtIDEpIDw9IDMyKSB7XG4gICAgICBjb25zdCBsZW5ndGggPSBjbGFzc1RvU2VhcmNoLmxlbmd0aDtcbiAgICAgIGlmIChmb3VuZEluZGV4ICsgbGVuZ3RoID09PSBlbmQgfHwgY2xhc3NOYW1lLmNoYXJDb2RlQXQoZm91bmRJbmRleCArIGxlbmd0aCkgPD0gMzIpIHtcbiAgICAgICAgcmV0dXJuIGZvdW5kSW5kZXg7XG4gICAgICB9XG4gICAgfVxuICAgIHN0YXJ0aW5nSW5kZXggPSBmb3VuZEluZGV4ICsgMTtcbiAgfVxufVxuY29uc3QgTkdfVEVNUExBVEVfU0VMRUNUT1IgPSAnbmctdGVtcGxhdGUnO1xuZnVuY3Rpb24gaXNDc3NDbGFzc01hdGNoaW5nKHROb2RlLCBhdHRycywgY3NzQ2xhc3NUb01hdGNoLCBpc1Byb2plY3Rpb25Nb2RlKSB7XG4gIG5nRGV2TW9kZSAmJiBhc3NlcnRFcXVhbChjc3NDbGFzc1RvTWF0Y2gsIGNzc0NsYXNzVG9NYXRjaC50b0xvd2VyQ2FzZSgpLCAnQ2xhc3MgbmFtZSBleHBlY3RlZCB0byBiZSBsb3dlcmNhc2UuJyk7XG4gIGxldCBpID0gMDtcbiAgaWYgKGlzUHJvamVjdGlvbk1vZGUpIHtcbiAgICBmb3IgKDsgaSA8IGF0dHJzLmxlbmd0aCAmJiB0eXBlb2YgYXR0cnNbaV0gPT09ICdzdHJpbmcnOyBpICs9IDIpIHtcbiAgICAgIGlmIChhdHRyc1tpXSA9PT0gJ2NsYXNzJyAmJiBjbGFzc0luZGV4T2YoYXR0cnNbaSArIDFdLnRvTG93ZXJDYXNlKCksIGNzc0NsYXNzVG9NYXRjaCwgMCkgIT09IC0xKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIGlmIChpc0lubGluZVRlbXBsYXRlKHROb2RlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpID0gYXR0cnMuaW5kZXhPZigxLCBpKTtcbiAgaWYgKGkgPiAtMSkge1xuICAgIGxldCBpdGVtO1xuICAgIHdoaWxlICgrK2kgPCBhdHRycy5sZW5ndGggJiYgdHlwZW9mIChpdGVtID0gYXR0cnNbaV0pID09PSAnc3RyaW5nJykge1xuICAgICAgaWYgKGl0ZW0udG9Mb3dlckNhc2UoKSA9PT0gY3NzQ2xhc3NUb01hdGNoKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiBpc0lubGluZVRlbXBsYXRlKHROb2RlKSB7XG4gIHJldHVybiB0Tm9kZS50eXBlID09PSA0ICYmIHROb2RlLnZhbHVlICE9PSBOR19URU1QTEFURV9TRUxFQ1RPUjtcbn1cbmZ1bmN0aW9uIGhhc1RhZ0FuZFR5cGVNYXRjaCh0Tm9kZSwgY3VycmVudFNlbGVjdG9yLCBpc1Byb2plY3Rpb25Nb2RlKSB7XG4gIGNvbnN0IHRhZ05hbWVUb0NvbXBhcmUgPSB0Tm9kZS50eXBlID09PSA0ICYmICFpc1Byb2plY3Rpb25Nb2RlID8gTkdfVEVNUExBVEVfU0VMRUNUT1IgOiB0Tm9kZS52YWx1ZTtcbiAgcmV0dXJuIGN1cnJlbnRTZWxlY3RvciA9PT0gdGFnTmFtZVRvQ29tcGFyZTtcbn1cbmZ1bmN0aW9uIGlzTm9kZU1hdGNoaW5nU2VsZWN0b3IodE5vZGUsIHNlbGVjdG9yLCBpc1Byb2plY3Rpb25Nb2RlKSB7XG4gIG5nRGV2TW9kZSAmJiBhc3NlcnREZWZpbmVkKHNlbGVjdG9yWzBdLCAnU2VsZWN0b3Igc2hvdWxkIGhhdmUgYSB0YWcgbmFtZScpO1xuICBsZXQgbW9kZSA9IDQ7XG4gIGNvbnN0IG5vZGVBdHRycyA9IHROb2RlLmF0dHJzO1xuICBjb25zdCBuYW1lT25seU1hcmtlcklkeCA9IG5vZGVBdHRycyAhPT0gbnVsbCA/IGdldE5hbWVPbmx5TWFya2VySW5kZXgobm9kZUF0dHJzKSA6IDA7XG4gIGxldCBza2lwVG9OZXh0U2VsZWN0b3IgPSBmYWxzZTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZWxlY3Rvci5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGN1cnJlbnQgPSBzZWxlY3RvcltpXTtcbiAgICBpZiAodHlwZW9mIGN1cnJlbnQgPT09ICdudW1iZXInKSB7XG4gICAgICBpZiAoIXNraXBUb05leHRTZWxlY3RvciAmJiAhaXNQb3NpdGl2ZShtb2RlKSAmJiAhaXNQb3NpdGl2ZShjdXJyZW50KSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAoc2tpcFRvTmV4dFNlbGVjdG9yICYmIGlzUG9zaXRpdmUoY3VycmVudCkpIGNvbnRpbnVlO1xuICAgICAgc2tpcFRvTmV4dFNlbGVjdG9yID0gZmFsc2U7XG4gICAgICBtb2RlID0gY3VycmVudCB8IG1vZGUgJiAxO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChza2lwVG9OZXh0U2VsZWN0b3IpIGNvbnRpbnVlO1xuICAgIGlmIChtb2RlICYgNCkge1xuICAgICAgbW9kZSA9IDIgfCBtb2RlICYgMTtcbiAgICAgIGlmIChjdXJyZW50ICE9PSAnJyAmJiAhaGFzVGFnQW5kVHlwZU1hdGNoKHROb2RlLCBjdXJyZW50LCBpc1Byb2plY3Rpb25Nb2RlKSB8fCBjdXJyZW50ID09PSAnJyAmJiBzZWxlY3Rvci5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgaWYgKGlzUG9zaXRpdmUobW9kZSkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgc2tpcFRvTmV4dFNlbGVjdG9yID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG1vZGUgJiA4KSB7XG4gICAgICBpZiAobm9kZUF0dHJzID09PSBudWxsIHx8ICFpc0Nzc0NsYXNzTWF0Y2hpbmcodE5vZGUsIG5vZGVBdHRycywgY3VycmVudCwgaXNQcm9qZWN0aW9uTW9kZSkpIHtcbiAgICAgICAgaWYgKGlzUG9zaXRpdmUobW9kZSkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgc2tpcFRvTmV4dFNlbGVjdG9yID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgc2VsZWN0b3JBdHRyVmFsdWUgPSBzZWxlY3RvclsrK2ldO1xuICAgICAgY29uc3QgYXR0ckluZGV4SW5Ob2RlID0gZmluZEF0dHJJbmRleEluTm9kZShjdXJyZW50LCBub2RlQXR0cnMsIGlzSW5saW5lVGVtcGxhdGUodE5vZGUpLCBpc1Byb2plY3Rpb25Nb2RlKTtcbiAgICAgIGlmIChhdHRySW5kZXhJbk5vZGUgPT09IC0xKSB7XG4gICAgICAgIGlmIChpc1Bvc2l0aXZlKG1vZGUpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHNraXBUb05leHRTZWxlY3RvciA9IHRydWU7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKHNlbGVjdG9yQXR0clZhbHVlICE9PSAnJykge1xuICAgICAgICBsZXQgbm9kZUF0dHJWYWx1ZTtcbiAgICAgICAgaWYgKGF0dHJJbmRleEluTm9kZSA+IG5hbWVPbmx5TWFya2VySWR4KSB7XG4gICAgICAgICAgbm9kZUF0dHJWYWx1ZSA9ICcnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5nRGV2TW9kZSAmJiBhc3NlcnROb3RFcXVhbChub2RlQXR0cnNbYXR0ckluZGV4SW5Ob2RlXSwgMCwgJ1dlIGRvIG5vdCBtYXRjaCBkaXJlY3RpdmVzIG9uIG5hbWVzcGFjZWQgYXR0cmlidXRlcycpO1xuICAgICAgICAgIG5vZGVBdHRyVmFsdWUgPSBub2RlQXR0cnNbYXR0ckluZGV4SW5Ob2RlICsgMV0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobW9kZSAmIDIgJiYgc2VsZWN0b3JBdHRyVmFsdWUgIT09IG5vZGVBdHRyVmFsdWUpIHtcbiAgICAgICAgICBpZiAoaXNQb3NpdGl2ZShtb2RlKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIHNraXBUb05leHRTZWxlY3RvciA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGlzUG9zaXRpdmUobW9kZSkgfHwgc2tpcFRvTmV4dFNlbGVjdG9yO1xufVxuZnVuY3Rpb24gaXNQb3NpdGl2ZShtb2RlKSB7XG4gIHJldHVybiAobW9kZSAmIDEpID09PSAwO1xufVxuZnVuY3Rpb24gZmluZEF0dHJJbmRleEluTm9kZShuYW1lLCBhdHRycywgaXNJbmxpbmVUZW1wbGF0ZSwgaXNQcm9qZWN0aW9uTW9kZSkge1xuICBpZiAoYXR0cnMgPT09IG51bGwpIHJldHVybiAtMTtcbiAgbGV0IGkgPSAwO1xuICBpZiAoaXNQcm9qZWN0aW9uTW9kZSB8fCAhaXNJbmxpbmVUZW1wbGF0ZSkge1xuICAgIGxldCBiaW5kaW5nc01vZGUgPSBmYWxzZTtcbiAgICB3aGlsZSAoaSA8IGF0dHJzLmxlbmd0aCkge1xuICAgICAgY29uc3QgbWF5YmVBdHRyTmFtZSA9IGF0dHJzW2ldO1xuICAgICAgaWYgKG1heWJlQXR0ck5hbWUgPT09IG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIGk7XG4gICAgICB9IGVsc2UgaWYgKG1heWJlQXR0ck5hbWUgPT09IDMgfHwgbWF5YmVBdHRyTmFtZSA9PT0gNikge1xuICAgICAgICBiaW5kaW5nc01vZGUgPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmIChtYXliZUF0dHJOYW1lID09PSAxIHx8IG1heWJlQXR0ck5hbWUgPT09IDIpIHtcbiAgICAgICAgbGV0IHZhbHVlID0gYXR0cnNbKytpXTtcbiAgICAgICAgd2hpbGUgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICB2YWx1ZSA9IGF0dHJzWysraV07XG4gICAgICAgIH1cbiAgICAgICAgY29udGludWU7XG4gICAgICB9IGVsc2UgaWYgKG1heWJlQXR0ck5hbWUgPT09IDQpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9IGVsc2UgaWYgKG1heWJlQXR0ck5hbWUgPT09IDApIHtcbiAgICAgICAgaSArPSA0O1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGkgKz0gYmluZGluZ3NNb2RlID8gMSA6IDI7XG4gICAgfVxuICAgIHJldHVybiAtMTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbWF0Y2hUZW1wbGF0ZUF0dHJpYnV0ZShhdHRycywgbmFtZSk7XG4gIH1cbn1cbmZ1bmN0aW9uIGlzTm9kZU1hdGNoaW5nU2VsZWN0b3JMaXN0KHROb2RlLCBzZWxlY3RvciwgaXNQcm9qZWN0aW9uTW9kZSA9IGZhbHNlKSB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc2VsZWN0b3IubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoaXNOb2RlTWF0Y2hpbmdTZWxlY3Rvcih0Tm9kZSwgc2VsZWN0b3JbaV0sIGlzUHJvamVjdGlvbk1vZGUpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gZ2V0UHJvamVjdEFzQXR0clZhbHVlKHROb2RlKSB7XG4gIGNvbnN0IG5vZGVBdHRycyA9IHROb2RlLmF0dHJzO1xuICBpZiAobm9kZUF0dHJzICE9IG51bGwpIHtcbiAgICBjb25zdCBuZ1Byb2plY3RBc0F0dHJJZHggPSBub2RlQXR0cnMuaW5kZXhPZig1KTtcbiAgICBpZiAoKG5nUHJvamVjdEFzQXR0cklkeCAmIDEpID09PSAwKSB7XG4gICAgICByZXR1cm4gbm9kZUF0dHJzW25nUHJvamVjdEFzQXR0cklkeCArIDFdO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIGdldE5hbWVPbmx5TWFya2VySW5kZXgobm9kZUF0dHJzKSB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZUF0dHJzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3Qgbm9kZUF0dHIgPSBub2RlQXR0cnNbaV07XG4gICAgaWYgKGlzTmFtZU9ubHlBdHRyaWJ1dGVNYXJrZXIobm9kZUF0dHIpKSB7XG4gICAgICByZXR1cm4gaTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5vZGVBdHRycy5sZW5ndGg7XG59XG5mdW5jdGlvbiBtYXRjaFRlbXBsYXRlQXR0cmlidXRlKGF0dHJzLCBuYW1lKSB7XG4gIGxldCBpID0gYXR0cnMuaW5kZXhPZig0KTtcbiAgaWYgKGkgPiAtMSkge1xuICAgIGkrKztcbiAgICB3aGlsZSAoaSA8IGF0dHJzLmxlbmd0aCkge1xuICAgICAgY29uc3QgYXR0ciA9IGF0dHJzW2ldO1xuICAgICAgaWYgKHR5cGVvZiBhdHRyID09PSAnbnVtYmVyJykgcmV0dXJuIC0xO1xuICAgICAgaWYgKGF0dHIgPT09IG5hbWUpIHJldHVybiBpO1xuICAgICAgaSsrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gLTE7XG59XG5mdW5jdGlvbiBpc1NlbGVjdG9ySW5TZWxlY3Rvckxpc3Qoc2VsZWN0b3IsIGxpc3QpIHtcbiAgc2VsZWN0b3JMaXN0TG9vcDogZm9yIChsZXQgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgY3VycmVudFNlbGVjdG9ySW5MaXN0ID0gbGlzdFtpXTtcbiAgICBpZiAoc2VsZWN0b3IubGVuZ3RoICE9PSBjdXJyZW50U2VsZWN0b3JJbkxpc3QubGVuZ3RoKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBzZWxlY3Rvci5sZW5ndGg7IGorKykge1xuICAgICAgaWYgKHNlbGVjdG9yW2pdICE9PSBjdXJyZW50U2VsZWN0b3JJbkxpc3Rbal0pIHtcbiAgICAgICAgY29udGludWUgc2VsZWN0b3JMaXN0TG9vcDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gbWF5YmVXcmFwSW5Ob3RTZWxlY3Rvcihpc05lZ2F0aXZlTW9kZSwgY2h1bmspIHtcbiAgcmV0dXJuIGlzTmVnYXRpdmVNb2RlID8gJzpub3QoJyArIGNodW5rLnRyaW0oKSArICcpJyA6IGNodW5rO1xufVxuZnVuY3Rpb24gc3RyaW5naWZ5Q1NTU2VsZWN0b3Ioc2VsZWN0b3IpIHtcbiAgbGV0IHJlc3VsdCA9IHNlbGVjdG9yWzBdO1xuICBsZXQgaSA9IDE7XG4gIGxldCBtb2RlID0gMjtcbiAgbGV0IGN1cnJlbnRDaHVuayA9ICcnO1xuICBsZXQgaXNOZWdhdGl2ZU1vZGUgPSBmYWxzZTtcbiAgd2hpbGUgKGkgPCBzZWxlY3Rvci5sZW5ndGgpIHtcbiAgICBsZXQgdmFsdWVPck1hcmtlciA9IHNlbGVjdG9yW2ldO1xuICAgIGlmICh0eXBlb2YgdmFsdWVPck1hcmtlciA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGlmIChtb2RlICYgMikge1xuICAgICAgICBjb25zdCBhdHRyVmFsdWUgPSBzZWxlY3RvclsrK2ldO1xuICAgICAgICBjdXJyZW50Q2h1bmsgKz0gJ1snICsgdmFsdWVPck1hcmtlciArIChhdHRyVmFsdWUubGVuZ3RoID4gMCA/ICc9XCInICsgYXR0clZhbHVlICsgJ1wiJyA6ICcnKSArICddJztcbiAgICAgIH0gZWxzZSBpZiAobW9kZSAmIDgpIHtcbiAgICAgICAgY3VycmVudENodW5rICs9ICcuJyArIHZhbHVlT3JNYXJrZXI7XG4gICAgICB9IGVsc2UgaWYgKG1vZGUgJiA0KSB7XG4gICAgICAgIGN1cnJlbnRDaHVuayArPSAnICcgKyB2YWx1ZU9yTWFya2VyO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoY3VycmVudENodW5rICE9PSAnJyAmJiAhaXNQb3NpdGl2ZSh2YWx1ZU9yTWFya2VyKSkge1xuICAgICAgICByZXN1bHQgKz0gbWF5YmVXcmFwSW5Ob3RTZWxlY3Rvcihpc05lZ2F0aXZlTW9kZSwgY3VycmVudENodW5rKTtcbiAgICAgICAgY3VycmVudENodW5rID0gJyc7XG4gICAgICB9XG4gICAgICBtb2RlID0gdmFsdWVPck1hcmtlcjtcbiAgICAgIGlzTmVnYXRpdmVNb2RlID0gaXNOZWdhdGl2ZU1vZGUgfHwgIWlzUG9zaXRpdmUobW9kZSk7XG4gICAgfVxuICAgIGkrKztcbiAgfVxuICBpZiAoY3VycmVudENodW5rICE9PSAnJykge1xuICAgIHJlc3VsdCArPSBtYXliZVdyYXBJbk5vdFNlbGVjdG9yKGlzTmVnYXRpdmVNb2RlLCBjdXJyZW50Q2h1bmspO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5mdW5jdGlvbiBzdHJpbmdpZnlDU1NTZWxlY3Rvckxpc3Qoc2VsZWN0b3JMaXN0KSB7XG4gIHJldHVybiBzZWxlY3Rvckxpc3QubWFwKHN0cmluZ2lmeUNTU1NlbGVjdG9yKS5qb2luKCcsJyk7XG59XG5mdW5jdGlvbiBleHRyYWN0QXR0cnNBbmRDbGFzc2VzRnJvbVNlbGVjdG9yKHNlbGVjdG9yKSB7XG4gIGNvbnN0IGF0dHJzID0gW107XG4gIGNvbnN0IGNsYXNzZXMgPSBbXTtcbiAgbGV0IGkgPSAxO1xuICBsZXQgbW9kZSA9IDI7XG4gIHdoaWxlIChpIDwgc2VsZWN0b3IubGVuZ3RoKSB7XG4gICAgbGV0IHZhbHVlT3JNYXJrZXIgPSBzZWxlY3RvcltpXTtcbiAgICBpZiAodHlwZW9mIHZhbHVlT3JNYXJrZXIgPT09ICdzdHJpbmcnKSB7XG4gICAgICBpZiAobW9kZSA9PT0gMikge1xuICAgICAgICBpZiAodmFsdWVPck1hcmtlciAhPT0gJycpIHtcbiAgICAgICAgICBhdHRycy5wdXNoKHZhbHVlT3JNYXJrZXIsIHNlbGVjdG9yWysraV0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKG1vZGUgPT09IDgpIHtcbiAgICAgICAgY2xhc3Nlcy5wdXNoKHZhbHVlT3JNYXJrZXIpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIWlzUG9zaXRpdmUobW9kZSkpIGJyZWFrO1xuICAgICAgbW9kZSA9IHZhbHVlT3JNYXJrZXI7XG4gICAgfVxuICAgIGkrKztcbiAgfVxuICBpZiAoY2xhc3Nlcy5sZW5ndGgpIHtcbiAgICBhdHRycy5wdXNoKDEsIC4uLmNsYXNzZXMpO1xuICB9XG4gIHJldHVybiBhdHRycztcbn1cbmNvbnN0IE5PX0NIQU5HRSA9IHR5cGVvZiBuZ0Rldk1vZGUgPT09ICd1bmRlZmluZWQnIHx8IG5nRGV2TW9kZSA/IHtcbiAgX19icmFuZF9fOiAnTk9fQ0hBTkdFJ1xufSA6IHt9O1xuZnVuY3Rpb24gY3JlYXRlVFZpZXcodHlwZSwgZGVjbFROb2RlLCB0ZW1wbGF0ZUZuLCBkZWNscywgdmFycywgZGlyZWN0aXZlcywgcGlwZXMsIHZpZXdRdWVyeSwgc2NoZW1hcywgY29uc3RzT3JGYWN0b3J5LCBzc3JJZCkge1xuICBjb25zdCBiaW5kaW5nU3RhcnRJbmRleCA9IEhFQURFUl9PRkZTRVQgKyBkZWNscztcbiAgY29uc3QgaW5pdGlhbFZpZXdMZW5ndGggPSBiaW5kaW5nU3RhcnRJbmRleCArIHZhcnM7XG4gIGNvbnN0IGJsdWVwcmludCA9IGNyZWF0ZVZpZXdCbHVlcHJpbnQoYmluZGluZ1N0YXJ0SW5kZXgsIGluaXRpYWxWaWV3TGVuZ3RoKTtcbiAgY29uc3QgY29uc3RzID0gdHlwZW9mIGNvbnN0c09yRmFjdG9yeSA9PT0gJ2Z1bmN0aW9uJyA/IGNvbnN0c09yRmFjdG9yeSgpIDogY29uc3RzT3JGYWN0b3J5O1xuICBjb25zdCB0VmlldyA9IGJsdWVwcmludFtUVklFV10gPSB7XG4gICAgdHlwZTogdHlwZSxcbiAgICBibHVlcHJpbnQ6IGJsdWVwcmludCxcbiAgICB0ZW1wbGF0ZTogdGVtcGxhdGVGbixcbiAgICBxdWVyaWVzOiBudWxsLFxuICAgIHZpZXdRdWVyeTogdmlld1F1ZXJ5LFxuICAgIGRlY2xUTm9kZTogZGVjbFROb2RlLFxuICAgIGRhdGE6IGJsdWVwcmludC5zbGljZSgpLmZpbGwobnVsbCwgYmluZGluZ1N0YXJ0SW5kZXgpLFxuICAgIGJpbmRpbmdTdGFydEluZGV4OiBiaW5kaW5nU3RhcnRJbmRleCxcbiAgICBleHBhbmRvU3RhcnRJbmRleDogaW5pdGlhbFZpZXdMZW5ndGgsXG4gICAgaG9zdEJpbmRpbmdPcENvZGVzOiBudWxsLFxuICAgIGZpcnN0Q3JlYXRlUGFzczogdHJ1ZSxcbiAgICBmaXJzdFVwZGF0ZVBhc3M6IHRydWUsXG4gICAgc3RhdGljVmlld1F1ZXJpZXM6IGZhbHNlLFxuICAgIHN0YXRpY0NvbnRlbnRRdWVyaWVzOiBmYWxzZSxcbiAgICBwcmVPcmRlckhvb2tzOiBudWxsLFxuICAgIHByZU9yZGVyQ2hlY2tIb29rczogbnVsbCxcbiAgICBjb250ZW50SG9va3M6IG51bGwsXG4gICAgY29udGVudENoZWNrSG9va3M6IG51bGwsXG4gICAgdmlld0hvb2tzOiBudWxsLFxuICAgIHZpZXdDaGVja0hvb2tzOiBudWxsLFxuICAgIGRlc3Ryb3lIb29rczogbnVsbCxcbiAgICBjbGVhbnVwOiBudWxsLFxuICAgIGNvbnRlbnRRdWVyaWVzOiBudWxsLFxuICAgIGNvbXBvbmVudHM6IG51bGwsXG4gICAgZGlyZWN0aXZlUmVnaXN0cnk6IHR5cGVvZiBkaXJlY3RpdmVzID09PSAnZnVuY3Rpb24nID8gZGlyZWN0aXZlcygpIDogZGlyZWN0aXZlcyxcbiAgICBwaXBlUmVnaXN0cnk6IHR5cGVvZiBwaXBlcyA9PT0gJ2Z1bmN0aW9uJyA/IHBpcGVzKCkgOiBwaXBlcyxcbiAgICBmaXJzdENoaWxkOiBudWxsLFxuICAgIHNjaGVtYXM6IHNjaGVtYXMsXG4gICAgY29uc3RzOiBjb25zdHMsXG4gICAgaW5jb21wbGV0ZUZpcnN0UGFzczogZmFsc2UsXG4gICAgc3NySWRcbiAgfTtcbiAgaWYgKG5nRGV2TW9kZSkge1xuICAgIE9iamVjdC5zZWFsKHRWaWV3KTtcbiAgfVxuICByZXR1cm4gdFZpZXc7XG59XG5mdW5jdGlvbiBjcmVhdGVWaWV3Qmx1ZXByaW50KGJpbmRpbmdTdGFydEluZGV4LCBpbml0aWFsVmlld0xlbmd0aCkge1xuICBjb25zdCBibHVlcHJpbnQgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbml0aWFsVmlld0xlbmd0aDsgaSsrKSB7XG4gICAgYmx1ZXByaW50LnB1c2goaSA8IGJpbmRpbmdTdGFydEluZGV4ID8gbnVsbCA6IE5PX0NIQU5HRSk7XG4gIH1cbiAgcmV0dXJuIGJsdWVwcmludDtcbn1cbmZ1bmN0aW9uIGdldE9yQ3JlYXRlQ29tcG9uZW50VFZpZXcoZGVmKSB7XG4gIGNvbnN0IHRWaWV3ID0gZGVmLnRWaWV3O1xuICBpZiAodFZpZXcgPT09IG51bGwgfHwgdFZpZXcuaW5jb21wbGV0ZUZpcnN0UGFzcykge1xuICAgIGNvbnN0IGRlY2xUTm9kZSA9IG51bGw7XG4gICAgcmV0dXJuIGRlZi50VmlldyA9IGNyZWF0ZVRWaWV3KDEsIGRlY2xUTm9kZSwgZGVmLnRlbXBsYXRlLCBkZWYuZGVjbHMsIGRlZi52YXJzLCBkZWYuZGlyZWN0aXZlRGVmcywgZGVmLnBpcGVEZWZzLCBkZWYudmlld1F1ZXJ5LCBkZWYuc2NoZW1hcywgZGVmLmNvbnN0cywgZGVmLmlkKTtcbiAgfVxuICByZXR1cm4gdFZpZXc7XG59XG5mdW5jdGlvbiBjcmVhdGVMVmlldyhwYXJlbnRMVmlldywgdFZpZXcsIGNvbnRleHQsIGZsYWdzLCBob3N0LCB0SG9zdE5vZGUsIGVudmlyb25tZW50LCByZW5kZXJlciwgaW5qZWN0b3IsIGVtYmVkZGVkVmlld0luamVjdG9yLCBoeWRyYXRpb25JbmZvKSB7XG4gIGNvbnN0IGxWaWV3ID0gdFZpZXcuYmx1ZXByaW50LnNsaWNlKCk7XG4gIGxWaWV3W0hPU1RdID0gaG9zdDtcbiAgbFZpZXdbRkxBR1NdID0gZmxhZ3MgfCA0IHwgMTI4IHwgOCB8IDY0IHwgMTAyNDtcbiAgaWYgKGVtYmVkZGVkVmlld0luamVjdG9yICE9PSBudWxsIHx8IHBhcmVudExWaWV3ICYmIHBhcmVudExWaWV3W0ZMQUdTXSAmIDIwNDgpIHtcbiAgICBsVmlld1tGTEFHU10gfD0gMjA0ODtcbiAgfVxuICByZXNldFByZU9yZGVySG9va0ZsYWdzKGxWaWV3KTtcbiAgbmdEZXZNb2RlICYmIHRWaWV3LmRlY2xUTm9kZSAmJiBwYXJlbnRMVmlldyAmJiBhc3NlcnRUTm9kZUZvckxWaWV3KHRWaWV3LmRlY2xUTm9kZSwgcGFyZW50TFZpZXcpO1xuICBsVmlld1tQQVJFTlRdID0gbFZpZXdbREVDTEFSQVRJT05fVklFV10gPSBwYXJlbnRMVmlldztcbiAgbFZpZXdbQ09OVEVYVF0gPSBjb250ZXh0O1xuICBsVmlld1tFTlZJUk9OTUVOVF0gPSBlbnZpcm9ubWVudCB8fCBwYXJlbnRMVmlldyAmJiBwYXJlbnRMVmlld1tFTlZJUk9OTUVOVF07XG4gIG5nRGV2TW9kZSAmJiBhc3NlcnREZWZpbmVkKGxWaWV3W0VOVklST05NRU5UXSwgJ0xWaWV3RW52aXJvbm1lbnQgaXMgcmVxdWlyZWQnKTtcbiAgbFZpZXdbUkVOREVSRVJdID0gcmVuZGVyZXIgfHwgcGFyZW50TFZpZXcgJiYgcGFyZW50TFZpZXdbUkVOREVSRVJdO1xuICBuZ0Rldk1vZGUgJiYgYXNzZXJ0RGVmaW5lZChsVmlld1tSRU5ERVJFUl0sICdSZW5kZXJlciBpcyByZXF1aXJlZCcpO1xuICBsVmlld1tJTkpFQ1RPUl0gPSBpbmplY3RvciB8fCBwYXJlbnRMVmlldyAmJiBwYXJlbnRMVmlld1tJTkpFQ1RPUl0gfHwgbnVsbDtcbiAgbFZpZXdbVF9IT1NUXSA9IHRIb3N0Tm9kZTtcbiAgbFZpZXdbSURdID0gZ2V0VW5pcXVlTFZpZXdJZCgpO1xuICBsVmlld1tIWURSQVRJT05dID0gaHlkcmF0aW9uSW5mbztcbiAgbFZpZXdbRU1CRURERURfVklFV19JTkpFQ1RPUl0gPSBlbWJlZGRlZFZpZXdJbmplY3RvcjtcbiAgbmdEZXZNb2RlICYmIGFzc2VydEVxdWFsKHRWaWV3LnR5cGUgPT0gMiA/IHBhcmVudExWaWV3ICE9PSBudWxsIDogdHJ1ZSwgdHJ1ZSwgJ0VtYmVkZGVkIHZpZXdzIG11c3QgaGF2ZSBwYXJlbnRMVmlldycpO1xuICBsVmlld1tERUNMQVJBVElPTl9DT01QT05FTlRfVklFV10gPSB0Vmlldy50eXBlID09IDIgPyBwYXJlbnRMVmlld1tERUNMQVJBVElPTl9DT01QT05FTlRfVklFV10gOiBsVmlldztcbiAgcmV0dXJuIGxWaWV3O1xufVxuZnVuY3Rpb24gY3JlYXRlQ29tcG9uZW50TFZpZXcobFZpZXcsIGhvc3RUTm9kZSwgZGVmKSB7XG4gIGNvbnN0IG5hdGl2ZSA9IGdldE5hdGl2ZUJ5VE5vZGUoaG9zdFROb2RlLCBsVmlldyk7XG4gIGNvbnN0IHRWaWV3ID0gZ2V0T3JDcmVhdGVDb21wb25lbnRUVmlldyhkZWYpO1xuICBjb25zdCByZW5kZXJlckZhY3RvcnkgPSBsVmlld1tFTlZJUk9OTUVOVF0ucmVuZGVyZXJGYWN0b3J5O1xuICBjb25zdCBjb21wb25lbnRWaWV3ID0gYWRkVG9FbmRPZlZpZXdUcmVlKGxWaWV3LCBjcmVhdGVMVmlldyhsVmlldywgdFZpZXcsIG51bGwsIGdldEluaXRpYWxMVmlld0ZsYWdzRnJvbURlZihkZWYpLCBuYXRpdmUsIGhvc3RUTm9kZSwgbnVsbCwgcmVuZGVyZXJGYWN0b3J5LmNyZWF0ZVJlbmRlcmVyKG5hdGl2ZSwgZGVmKSwgbnVsbCwgbnVsbCwgbnVsbCkpO1xuICByZXR1cm4gbFZpZXdbaG9zdFROb2RlLmluZGV4XSA9IGNvbXBvbmVudFZpZXc7XG59XG5mdW5jdGlvbiBnZXRJbml0aWFsTFZpZXdGbGFnc0Zyb21EZWYoZGVmKSB7XG4gIGxldCBmbGFncyA9IDE2O1xuICBpZiAoZGVmLnNpZ25hbHMpIHtcbiAgICBmbGFncyA9IDQwOTY7XG4gIH0gZWxzZSBpZiAoZGVmLm9uUHVzaCkge1xuICAgIGZsYWdzID0gNjQ7XG4gIH1cbiAgcmV0dXJuIGZsYWdzO1xufVxuZnVuY3Rpb24gYWxsb2NFeHBhbmRvKHRWaWV3LCBsVmlldywgbnVtU2xvdHNUb0FsbG9jLCBpbml0aWFsVmFsdWUpIHtcbiAgaWYgKG51bVNsb3RzVG9BbGxvYyA9PT0gMCkgcmV0dXJuIC0xO1xuICBpZiAobmdEZXZNb2RlKSB7XG4gICAgYXNzZXJ0Rmlyc3RDcmVhdGVQYXNzKHRWaWV3KTtcbiAgICBhc3NlcnRTYW1lKHRWaWV3LCBsVmlld1tUVklFV10sICdgTFZpZXdgIG11c3QgYmUgYXNzb2NpYXRlZCB3aXRoIGBUVmlld2AhJyk7XG4gICAgYXNzZXJ0RXF1YWwodFZpZXcuZGF0YS5sZW5ndGgsIGxWaWV3Lmxlbmd0aCwgJ0V4cGVjdGluZyBMVmlldyB0byBiZSBzYW1lIHNpemUgYXMgVFZpZXcnKTtcbiAgICBhc3NlcnRFcXVhbCh0Vmlldy5kYXRhLmxlbmd0aCwgdFZpZXcuYmx1ZXByaW50Lmxlbmd0aCwgJ0V4cGVjdGluZyBCbHVlcHJpbnQgdG8gYmUgc2FtZSBzaXplIGFzIFRWaWV3Jyk7XG4gICAgYXNzZXJ0Rmlyc3RVcGRhdGVQYXNzKHRWaWV3KTtcbiAgfVxuICBjb25zdCBhbGxvY0lkeCA9IGxWaWV3Lmxlbmd0aDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1TbG90c1RvQWxsb2M7IGkrKykge1xuICAgIGxWaWV3LnB1c2goaW5pdGlhbFZhbHVlKTtcbiAgICB0Vmlldy5ibHVlcHJpbnQucHVzaChpbml0aWFsVmFsdWUpO1xuICAgIHRWaWV3LmRhdGEucHVzaChudWxsKTtcbiAgfVxuICByZXR1cm4gYWxsb2NJZHg7XG59XG5mdW5jdGlvbiBhZGRUb0VuZE9mVmlld1RyZWUobFZpZXcsIGxWaWV3T3JMQ29udGFpbmVyKSB7XG4gIGlmIChsVmlld1tDSElMRF9IRUFEXSkge1xuICAgIGxWaWV3W0NISUxEX1RBSUxdW05FWFRdID0gbFZpZXdPckxDb250YWluZXI7XG4gIH0gZWxzZSB7XG4gICAgbFZpZXdbQ0hJTERfSEVBRF0gPSBsVmlld09yTENvbnRhaW5lcjtcbiAgfVxuICBsVmlld1tDSElMRF9UQUlMXSA9IGxWaWV3T3JMQ29udGFpbmVyO1xuICByZXR1cm4gbFZpZXdPckxDb250YWluZXI7XG59XG5mdW5jdGlvbiDJtcm1YWR2YW5jZShkZWx0YSA9IDEpIHtcbiAgbmdEZXZNb2RlICYmIGFzc2VydEdyZWF0ZXJUaGFuKGRlbHRhLCAwLCAnQ2FuIG9ubHkgYWR2YW5jZSBmb3J3YXJkJyk7XG4gIHNlbGVjdEluZGV4SW50ZXJuYWwoZ2V0VFZpZXcoKSwgZ2V0TFZpZXcoKSwgZ2V0U2VsZWN0ZWRJbmRleCgpICsgZGVsdGEsICEhbmdEZXZNb2RlICYmIGlzSW5DaGVja05vQ2hhbmdlc01vZGUoKSk7XG59XG5mdW5jdGlvbiBzZWxlY3RJbmRleEludGVybmFsKHRWaWV3LCBsVmlldywgaW5kZXgsIGNoZWNrTm9DaGFuZ2VzTW9kZSkge1xuICBuZ0Rldk1vZGUgJiYgYXNzZXJ0SW5kZXhJbkRlY2xSYW5nZShsVmlld1tUVklFV10sIGluZGV4KTtcbiAgaWYgKCFjaGVja05vQ2hhbmdlc01vZGUpIHtcbiAgICBjb25zdCBob29rc0luaXRQaGFzZUNvbXBsZXRlZCA9IChsVmlld1tGTEFHU10gJiAzKSA9PT0gMztcbiAgICBpZiAoaG9va3NJbml0UGhhc2VDb21wbGV0ZWQpIHtcbiAgICAgIGNvbnN0IHByZU9yZGVyQ2hlY2tIb29rcyA9IHRWaWV3LnByZU9yZGVyQ2hlY2tIb29rcztcbiAgICAgIGlmIChwcmVPcmRlckNoZWNrSG9va3MgIT09IG51bGwpIHtcbiAgICAgICAgZXhlY3V0ZUNoZWNrSG9va3MobFZpZXcsIHByZU9yZGVyQ2hlY2tIb29rcywgaW5kZXgpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBwcmVPcmRlckhvb2tzID0gdFZpZXcucHJlT3JkZXJIb29rcztcbiAgICAgIGlmIChwcmVPcmRlckhvb2tzICE9PSBudWxsKSB7XG4gICAgICAgIGV4ZWN1dGVJbml0QW5kQ2hlY2tIb29rcyhsVmlldywgcHJlT3JkZXJIb29rcywgMCwgaW5kZXgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBzZXRTZWxlY3RlZEluZGV4KGluZGV4KTtcbn1cbnZhciBJbnB1dEZsYWdzID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChJbnB1dEZsYWdzKSB7XG4gIElucHV0RmxhZ3NbSW5wdXRGbGFnc1tcIk5vbmVcIl0gPSAwXSA9IFwiTm9uZVwiO1xuICBJbnB1dEZsYWdzW0lucHV0RmxhZ3NbXCJTaWduYWxCYXNlZFwiXSA9IDFdID0gXCJTaWduYWxCYXNlZFwiO1xuICBJbnB1dEZsYWdzW0lucHV0RmxhZ3NbXCJIYXNEZWNvcmF0b3JJbnB1dFRyYW5zZm9ybVwiXSA9IDJdID0gXCJIYXNEZWNvcmF0b3JJbnB1dFRyYW5zZm9ybVwiO1xuICByZXR1cm4gSW5wdXRGbGFncztcbn0oSW5wdXRGbGFncyB8fCB7fSk7XG5mdW5jdGlvbiB3cml0ZVRvRGlyZWN0aXZlSW5wdXQoZGVmLCBpbnN0YW5jZSwgcHVibGljTmFtZSwgdmFsdWUpIHtcbiAgY29uc3QgcHJldkNvbnN1bWVyID0gc2V0QWN0aXZlQ29uc3VtZXIobnVsbCk7XG4gIHRyeSB7XG4gICAgaWYgKG5nRGV2TW9kZSkge1xuICAgICAgaWYgKCFkZWYuaW5wdXRzLmhhc093blByb3BlcnR5KHB1YmxpY05hbWUpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQVNTRVJUSU9OIEVSUk9SOiBEaXJlY3RpdmUgJHtkZWYudHlwZS5uYW1lfSBkb2VzIG5vdCBoYXZlIGFuIGlucHV0IHdpdGggYSBwdWJsaWMgbmFtZSBvZiBcIiR7cHVibGljTmFtZX1cImApO1xuICAgICAgfVxuICAgICAgaWYgKGluc3RhbmNlIGluc3RhbmNlb2YgTm9kZUluamVjdG9yRmFjdG9yeSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEFTU0VSVElPTiBFUlJPUjogQ2Fubm90IHdyaXRlIGlucHV0IHRvIGZhY3RvcnkgZm9yIHR5cGUgJHtkZWYudHlwZS5uYW1lfS4gRGlyZWN0aXZlIGhhcyBub3QgYmVlbiBjcmVhdGVkIHlldC5gKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgW3ByaXZhdGVOYW1lLCBmbGFncywgdHJhbnNmb3JtXSA9IGRlZi5pbnB1dHNbcHVibGljTmFtZV07XG4gICAgbGV0IGlucHV0U2lnbmFsTm9kZSA9IG51bGw7XG4gICAgaWYgKChmbGFncyAmIElucHV0RmxhZ3MuU2lnbmFsQmFzZWQpICE9PSAwKSB7XG4gICAgICBjb25zdCBmaWVsZCA9IGluc3RhbmNlW3ByaXZhdGVOYW1lXTtcbiAgICAgIGlucHV0U2lnbmFsTm9kZSA9IGZpZWxkW1NJR05BTF07XG4gICAgfVxuICAgIGlmIChpbnB1dFNpZ25hbE5vZGUgIT09IG51bGwgJiYgaW5wdXRTaWduYWxOb2RlLnRyYW5zZm9ybUZuICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHZhbHVlID0gaW5wdXRTaWduYWxOb2RlLnRyYW5zZm9ybUZuKHZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKHRyYW5zZm9ybSAhPT0gbnVsbCkge1xuICAgICAgdmFsdWUgPSB0cmFuc2Zvcm0uY2FsbChpbnN0YW5jZSwgdmFsdWUpO1xuICAgIH1cbiAgICBpZiAoZGVmLnNldElucHV0ICE9PSBudWxsKSB7XG4gICAgICBkZWYuc2V0SW5wdXQoaW5zdGFuY2UsIGlucHV0U2lnbmFsTm9kZSwgdmFsdWUsIHB1YmxpY05hbWUsIHByaXZhdGVOYW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXBwbHlWYWx1ZVRvSW5wdXRGaWVsZChpbnN0YW5jZSwgaW5wdXRTaWduYWxOb2RlLCBwcml2YXRlTmFtZSwgdmFsdWUpO1xuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICBzZXRBY3RpdmVDb25zdW1lcihwcmV2Q29uc3VtZXIpO1xuICB9XG59XG52YXIgUmVuZGVyZXJTdHlsZUZsYWdzMiA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoUmVuZGVyZXJTdHlsZUZsYWdzMikge1xuICBSZW5kZXJlclN0eWxlRmxhZ3MyW1JlbmRlcmVyU3R5bGVGbGFnczJbXCJJbXBvcnRhbnRcIl0gPSAxXSA9IFwiSW1wb3J0YW50XCI7XG4gIFJlbmRlcmVyU3R5bGVGbGFnczJbUmVuZGVyZXJTdHlsZUZsYWdzMltcIkRhc2hDYXNlXCJdID0gMl0gPSBcIkRhc2hDYXNlXCI7XG4gIHJldHVybiBSZW5kZXJlclN0eWxlRmxhZ3MyO1xufShSZW5kZXJlclN0eWxlRmxhZ3MyIHx8IHt9KTtcbmxldCBfaWN1Q29udGFpbmVySXRlcmF0ZTtcbmZ1bmN0aW9uIGljdUNvbnRhaW5lckl0ZXJhdGUodEljdUNvbnRhaW5lck5vZGUsIGxWaWV3KSB7XG4gIHJldHVybiBfaWN1Q29udGFpbmVySXRlcmF0ZSh0SWN1Q29udGFpbmVyTm9kZSwgbFZpZXcpO1xufVxuZnVuY3Rpb24gZW5zdXJlSWN1Q29udGFpbmVyVmlzaXRvckxvYWRlZChsb2FkZXIpIHtcbiAgaWYgKF9pY3VDb250YWluZXJJdGVyYXRlID09PSB1bmRlZmluZWQpIHtcbiAgICBfaWN1Q29udGFpbmVySXRlcmF0ZSA9IGxvYWRlcigpO1xuICB9XG59XG5jb25zdCBBTklNQVRJT05TX0RJU0FCTEVEID0gLyojX19QVVJFX18qL25ldyBJbmplY3Rpb25Ub2tlbih0eXBlb2YgbmdEZXZNb2RlICE9PSAndW5kZWZpbmVkJyAmJiBuZ0Rldk1vZGUgPyAnQW5pbWF0aW9uc0Rpc2FibGVkJyA6ICcnLCB7XG4gIGZhY3Rvcnk6ICgpID0+IGZhbHNlXG59KTtcbmNvbnN0IE1BWF9BTklNQVRJT05fVElNRU9VVCA9IC8qI19fUFVSRV9fKi9uZXcgSW5qZWN0aW9uVG9rZW4odHlwZW9mIG5nRGV2TW9kZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbmdEZXZNb2RlID8gJ01heEFuaW1hdGlvblRpbWVvdXQnIDogJycsIHtcbiAgZmFjdG9yeTogKCkgPT4gTUFYX0FOSU1BVElPTl9USU1FT1VUX0RFRkFVTFRcbn0pO1xuY29uc3QgTUFYX0FOSU1BVElPTl9USU1FT1VUX0RFRkFVTFQgPSA0MDAwO1xuY29uc3QgREVGQVVMVF9BTklNQVRJT05TX0RJU0FCTEVEID0gZmFsc2U7XG5jb25zdCBhcmVBbmltYXRpb25TdXBwb3J0ZWQgPSAodHlwZW9mIG5nU2VydmVyTW9kZSA9PT0gJ3VuZGVmaW5lZCcgfHwgIW5nU2VydmVyTW9kZSkgJiYgdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgZG9jdW1lbnQ/LmRvY3VtZW50RWxlbWVudD8uZ2V0QW5pbWF0aW9ucyA9PT0gJ2Z1bmN0aW9uJztcbmZ1bmN0aW9uIGFyZUFuaW1hdGlvbnNEaXNhYmxlZChsVmlldykge1xuICBjb25zdCBpbmplY3RvciA9IGxWaWV3W0lOSkVDVE9SXTtcbiAgcmV0dXJuIGluamVjdG9yLmdldChBTklNQVRJT05TX0RJU0FCTEVELCBERUZBVUxUX0FOSU1BVElPTlNfRElTQUJMRUQpO1xufVxuZnVuY3Rpb24gYXNzZXJ0QW5pbWF0aW9uVHlwZXModmFsdWUsIGluc3RydWN0aW9uKSB7XG4gIGlmICh2YWx1ZSA9PSBudWxsIHx8IHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycgJiYgdHlwZW9mIHZhbHVlICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IFJ1bnRpbWVFcnJvcig2NTAsIGAnJHtpbnN0cnVjdGlvbn0nIHZhbHVlIG11c3QgYmUgYSBzdHJpbmcgb2YgQ1NTIGNsYXNzZXMgb3IgYW4gYW5pbWF0aW9uIGZ1bmN0aW9uLCBnb3QgJHtzdHJpbmdpZnkodmFsdWUpfWApO1xuICB9XG59XG5mdW5jdGlvbiBhc3NlcnRFbGVtZW50Tm9kZXMobmF0aXZlRWxlbWVudCwgaW5zdHJ1Y3Rpb24pIHtcbiAgaWYgKG5hdGl2ZUVsZW1lbnQubm9kZVR5cGUgIT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgdGhyb3cgbmV3IFJ1bnRpbWVFcnJvcig2NTAsIGAnJHtpbnN0cnVjdGlvbn0nIGNhbiBvbmx5IGJlIHVzZWQgb24gYW4gZWxlbWVudCBub2RlLCBnb3QgJHtzdHJpbmdpZnkobmF0aXZlRWxlbWVudC5ub2RlVHlwZSl9YCk7XG4gIH1cbn1cbmZ1bmN0aW9uIHRyYWNrRW50ZXJDbGFzc2VzKGVsLCBjbGFzc0xpc3QsIGNsZWFudXBGbnMpIHtcbiAgY29uc3QgZWxlbWVudERhdGEgPSBlbnRlckNsYXNzTWFwLmdldChlbCk7XG4gIGlmIChlbGVtZW50RGF0YSkge1xuICAgIGZvciAoY29uc3Qga2xhc3Mgb2YgY2xhc3NMaXN0KSB7XG4gICAgICBlbGVtZW50RGF0YS5jbGFzc0xpc3QucHVzaChrbGFzcyk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgZm4gb2YgY2xlYW51cEZucykge1xuICAgICAgZWxlbWVudERhdGEuY2xlYW51cEZucy5wdXNoKGZuKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZW50ZXJDbGFzc01hcC5zZXQoZWwsIHtcbiAgICAgIGNsYXNzTGlzdCxcbiAgICAgIGNsZWFudXBGbnNcbiAgICB9KTtcbiAgfVxufVxuZnVuY3Rpb24gY2xlYW51cEVudGVyQ2xhc3NEYXRhKGVsZW1lbnQpIHtcbiAgY29uc3QgZWxlbWVudERhdGEgPSBlbnRlckNsYXNzTWFwLmdldChlbGVtZW50KTtcbiAgaWYgKGVsZW1lbnREYXRhKSB7XG4gICAgZm9yIChjb25zdCBmbiBvZiBlbGVtZW50RGF0YS5jbGVhbnVwRm5zKSB7XG4gICAgICBmbigpO1xuICAgIH1cbiAgICBlbnRlckNsYXNzTWFwLmRlbGV0ZShlbGVtZW50KTtcbiAgfVxuICBsb25nZXN0QW5pbWF0aW9ucy5kZWxldGUoZWxlbWVudCk7XG59XG5jb25zdCBub09wQW5pbWF0aW9uQ29tcGxldGUgPSAoKSA9PiB7fTtcbmNvbnN0IGVudGVyQ2xhc3NNYXAgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbmNvbnN0IGxvbmdlc3RBbmltYXRpb25zID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG5jb25zdCBsZWF2aW5nTm9kZXMgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbmNvbnN0IHJldXNlZE5vZGVzID0gLyojX19QVVJFX18qL25ldyBXZWFrU2V0KCk7XG5mdW5jdGlvbiBjbGVhckxlYXZpbmdOb2Rlcyh0Tm9kZSwgZWwpIHtcbiAgY29uc3Qgbm9kZXMgPSBsZWF2aW5nTm9kZXMuZ2V0KHROb2RlKTtcbiAgaWYgKG5vZGVzICYmIG5vZGVzLmxlbmd0aCA+IDApIHtcbiAgICBjb25zdCBpeCA9IG5vZGVzLmZpbmRJbmRleChub2RlID0+IG5vZGUgPT09IGVsKTtcbiAgICBpZiAoaXggPiAtMSkgbm9kZXMuc3BsaWNlKGl4LCAxKTtcbiAgfVxuICBpZiAobm9kZXM/Lmxlbmd0aCA9PT0gMCkge1xuICAgIGxlYXZpbmdOb2Rlcy5kZWxldGUodE5vZGUpO1xuICB9XG59XG5mdW5jdGlvbiBjYW5jZWxMZWF2aW5nTm9kZXModE5vZGUsIG5ld0VsZW1lbnQpIHtcbiAgY29uc3Qgbm9kZXMgPSBsZWF2aW5nTm9kZXMuZ2V0KHROb2RlKTtcbiAgaWYgKCFub2RlcyB8fCBub2Rlcy5sZW5ndGggPT09IDApIHJldHVybjtcbiAgY29uc3QgbmV3UGFyZW50ID0gbmV3RWxlbWVudC5wYXJlbnROb2RlO1xuICBjb25zdCBwcmV2U2libGluZyA9IG5ld0VsZW1lbnQucHJldmlvdXNTaWJsaW5nO1xuICBmb3IgKGxldCBpID0gbm9kZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBjb25zdCBsZWF2aW5nRWwgPSBub2Rlc1tpXTtcbiAgICBjb25zdCBsZWF2aW5nUGFyZW50ID0gbGVhdmluZ0VsLnBhcmVudE5vZGU7XG4gICAgaWYgKGxlYXZpbmdFbCA9PT0gbmV3RWxlbWVudCkge1xuICAgICAgbm9kZXMuc3BsaWNlKGksIDEpO1xuICAgICAgcmV1c2VkTm9kZXMuYWRkKGxlYXZpbmdFbCk7XG4gICAgICBsZWF2aW5nRWwuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2FuaW1hdGlvbmVuZCcsIHtcbiAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgY2FuY2VsOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0pKTtcbiAgICB9IGVsc2UgaWYgKHByZXZTaWJsaW5nICYmIGxlYXZpbmdFbCA9PT0gcHJldlNpYmxpbmcgfHwgbGVhdmluZ1BhcmVudCAmJiBuZXdQYXJlbnQgJiYgbGVhdmluZ1BhcmVudCAhPT0gbmV3UGFyZW50KSB7XG4gICAgICBub2Rlcy5zcGxpY2UoaSwgMSk7XG4gICAgICBsZWF2aW5nRWwuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2FuaW1hdGlvbmVuZCcsIHtcbiAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgY2FuY2VsOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0pKTtcbiAgICAgIGxlYXZpbmdFbC5wYXJlbnROb2RlPy5yZW1vdmVDaGlsZChsZWF2aW5nRWwpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gdHJhY2tMZWF2aW5nTm9kZXModE5vZGUsIGVsKSB7XG4gIGNvbnN0IG5vZGVzID0gbGVhdmluZ05vZGVzLmdldCh0Tm9kZSk7XG4gIGlmIChub2Rlcykge1xuICAgIGlmICghbm9kZXMuaW5jbHVkZXMoZWwpKSB7XG4gICAgICBub2Rlcy5wdXNoKGVsKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbGVhdmluZ05vZGVzLnNldCh0Tm9kZSwgW2VsXSk7XG4gIH1cbn1cbmZ1bmN0aW9uIGdldExWaWV3RW50ZXJBbmltYXRpb25zKGxWaWV3KSB7XG4gIGNvbnN0IGFuaW1hdGlvbkRhdGEgPSBsVmlld1tBTklNQVRJT05TXSA/Pz0ge307XG4gIHJldHVybiBhbmltYXRpb25EYXRhLmVudGVyID8/PSBuZXcgTWFwKCk7XG59XG5mdW5jdGlvbiBnZXRMVmlld0xlYXZlQW5pbWF0aW9ucyhsVmlldykge1xuICBjb25zdCBhbmltYXRpb25EYXRhID0gbFZpZXdbQU5JTUFUSU9OU10gPz89IHt9O1xuICByZXR1cm4gYW5pbWF0aW9uRGF0YS5sZWF2ZSA/Pz0gbmV3IE1hcCgpO1xufVxuZnVuY3Rpb24gZ2V0Q2xhc3NMaXN0RnJvbVZhbHVlKHZhbHVlKSB7XG4gIGNvbnN0IGNsYXNzZXMgPSB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicgPyB2YWx1ZSgpIDogdmFsdWU7XG4gIGxldCBjbGFzc0xpc3QgPSBBcnJheS5pc0FycmF5KGNsYXNzZXMpID8gY2xhc3NlcyA6IG51bGw7XG4gIGlmICh0eXBlb2YgY2xhc3NlcyA9PT0gJ3N0cmluZycpIHtcbiAgICBjbGFzc0xpc3QgPSBjbGFzc2VzLnRyaW0oKS5zcGxpdCgvXFxzKy8pLmZpbHRlcihrID0+IGspO1xuICB9XG4gIHJldHVybiBjbGFzc0xpc3Q7XG59XG5mdW5jdGlvbiBjYW5jZWxBbmltYXRpb25zSWZSdW5uaW5nKGVsZW1lbnQsIHJlbmRlcmVyKSB7XG4gIGlmICghYXJlQW5pbWF0aW9uU3VwcG9ydGVkKSByZXR1cm47XG4gIGNvbnN0IGVsZW1lbnREYXRhID0gZW50ZXJDbGFzc01hcC5nZXQoZWxlbWVudCk7XG4gIGlmIChlbGVtZW50RGF0YSAmJiBlbGVtZW50RGF0YS5jbGFzc0xpc3QubGVuZ3RoID4gMCAmJiBlbGVtZW50SGFzQ2xhc3NMaXN0KGVsZW1lbnQsIGVsZW1lbnREYXRhLmNsYXNzTGlzdCkpIHtcbiAgICBmb3IgKGNvbnN0IGtsYXNzIG9mIGVsZW1lbnREYXRhLmNsYXNzTGlzdCkge1xuICAgICAgcmVuZGVyZXIucmVtb3ZlQ2xhc3MoZWxlbWVudCwga2xhc3MpO1xuICAgIH1cbiAgfVxuICBjbGVhbnVwRW50ZXJDbGFzc0RhdGEoZWxlbWVudCk7XG59XG5mdW5jdGlvbiBlbGVtZW50SGFzQ2xhc3NMaXN0KGVsZW1lbnQsIGNsYXNzTGlzdCkge1xuICBmb3IgKGNvbnN0IGNsYXNzTmFtZSBvZiBjbGFzc0xpc3QpIHtcbiAgICBpZiAoZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoY2xhc3NOYW1lKSkgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gZ2V0RXZlbnRUYXJnZXQoZXZlbnQpIHtcbiAgcmV0dXJuIGV2ZW50LmNvbXBvc2VkUGF0aCA/IGV2ZW50LmNvbXBvc2VkUGF0aCgpWzBdIDogZXZlbnQudGFyZ2V0O1xufVxuZnVuY3Rpb24gaXNMb25nZXN0QW5pbWF0aW9uKGV2ZW50LCBuYXRpdmVFbGVtZW50KSB7XG4gIGNvbnN0IGxvbmdlc3RBbmltYXRpb24gPSBsb25nZXN0QW5pbWF0aW9ucy5nZXQobmF0aXZlRWxlbWVudCk7XG4gIGlmIChsb25nZXN0QW5pbWF0aW9uID09PSB1bmRlZmluZWQpIHJldHVybiB0cnVlO1xuICByZXR1cm4gbmF0aXZlRWxlbWVudCA9PT0gZ2V0RXZlbnRUYXJnZXQoZXZlbnQpICYmIChsb25nZXN0QW5pbWF0aW9uLmFuaW1hdGlvbk5hbWUgIT09IHVuZGVmaW5lZCAmJiBldmVudC5hbmltYXRpb25OYW1lID09PSBsb25nZXN0QW5pbWF0aW9uLmFuaW1hdGlvbk5hbWUgfHwgbG9uZ2VzdEFuaW1hdGlvbi5wcm9wZXJ0eU5hbWUgIT09IHVuZGVmaW5lZCAmJiAobG9uZ2VzdEFuaW1hdGlvbi5wcm9wZXJ0eU5hbWUgPT09ICdhbGwnIHx8IGV2ZW50LnByb3BlcnR5TmFtZSA9PT0gbG9uZ2VzdEFuaW1hdGlvbi5wcm9wZXJ0eU5hbWUpKTtcbn1cbmZ1bmN0aW9uIGFkZEFuaW1hdGlvblRvTFZpZXcoYW5pbWF0aW9ucywgdE5vZGUsIGZuKSB7XG4gIGNvbnN0IG5vZGVBbmltYXRpb25zID0gYW5pbWF0aW9ucy5nZXQodE5vZGUuaW5kZXgpID8/IHtcbiAgICBhbmltYXRlRm5zOiBbXVxuICB9O1xuICBub2RlQW5pbWF0aW9ucy5hbmltYXRlRm5zLnB1c2goZm4pO1xuICBhbmltYXRpb25zLnNldCh0Tm9kZS5pbmRleCwgbm9kZUFuaW1hdGlvbnMpO1xufVxuZnVuY3Rpb24gY2xlYW51cEFmdGVyTGVhdmVBbmltYXRpb25zKHJlc29sdmVycywgY2xlYW51cEZucykge1xuICBpZiAocmVzb2x2ZXJzKSB7XG4gICAgZm9yIChjb25zdCBmbiBvZiByZXNvbHZlcnMpIHtcbiAgICAgIGZuKCk7XG4gICAgfVxuICB9XG4gIGZvciAoY29uc3QgZm4gb2YgY2xlYW51cEZucykge1xuICAgIGZuKCk7XG4gIH1cbn1cbmZ1bmN0aW9uIGNsZWFyTFZpZXdOb2RlQW5pbWF0aW9uUmVzb2x2ZXJzKGxWaWV3LCB0Tm9kZSkge1xuICBjb25zdCBub2RlQW5pbWF0aW9ucyA9IGdldExWaWV3TGVhdmVBbmltYXRpb25zKGxWaWV3KS5nZXQodE5vZGUuaW5kZXgpO1xuICBpZiAobm9kZUFuaW1hdGlvbnMpIG5vZGVBbmltYXRpb25zLnJlc29sdmVycyA9IHVuZGVmaW5lZDtcbn1cbmZ1bmN0aW9uIGxlYXZlQW5pbWF0aW9uRnVuY3Rpb25DbGVhbnVwKGxWaWV3LCB0Tm9kZSwgbmF0aXZlRWxlbWVudCwgcmVzb2x2ZXJzLCBjbGVhbnVwRm5zKSB7XG4gIGNsZWFyTGVhdmluZ05vZGVzKHROb2RlLCBuYXRpdmVFbGVtZW50KTtcbiAgY2xlYW51cEFmdGVyTGVhdmVBbmltYXRpb25zKHJlc29sdmVycywgY2xlYW51cEZucyk7XG4gIGNsZWFyTFZpZXdOb2RlQW5pbWF0aW9uUmVzb2x2ZXJzKGxWaWV3LCB0Tm9kZSk7XG59XG5mdW5jdGlvbiBwYXJzZUNzc1RpbWVVbml0c1RvTXModmFsdWUpIHtcbiAgaWYgKCF2YWx1ZSkgcmV0dXJuIDA7XG4gIGNvbnN0IG11bHRpcGxpZXIgPSB2YWx1ZS50b0xvd2VyQ2FzZSgpLmluZGV4T2YoJ21zJykgPiAtMSA/IDEgOiAxMDAwO1xuICByZXR1cm4gcGFyc2VGbG9hdCh2YWx1ZSkgKiBtdWx0aXBsaWVyO1xufVxuZnVuY3Rpb24gcGFyc2VDc3NQcm9wZXJ0eVZhbHVlKGNvbXB1dGVkU3R5bGUsIG5hbWUpIHtcbiAgY29uc3QgdmFsdWUgPSBjb21wdXRlZFN0eWxlLmdldFByb3BlcnR5VmFsdWUobmFtZSk7XG4gIHJldHVybiB2YWx1ZS5zcGxpdCgnLCcpLm1hcChwYXJ0ID0+IHBhcnQudHJpbSgpKTtcbn1cbmZ1bmN0aW9uIGdldExvbmdlc3RDb21wdXRlZFRyYW5zaXRpb24oY29tcHV0ZWRTdHlsZSkge1xuICBjb25zdCB0cmFuc2l0aW9uZWRQcm9wZXJ0aWVzID0gcGFyc2VDc3NQcm9wZXJ0eVZhbHVlKGNvbXB1dGVkU3R5bGUsICd0cmFuc2l0aW9uLXByb3BlcnR5Jyk7XG4gIGNvbnN0IHJhd0R1cmF0aW9ucyA9IHBhcnNlQ3NzUHJvcGVydHlWYWx1ZShjb21wdXRlZFN0eWxlLCAndHJhbnNpdGlvbi1kdXJhdGlvbicpO1xuICBjb25zdCByYXdEZWxheXMgPSBwYXJzZUNzc1Byb3BlcnR5VmFsdWUoY29tcHV0ZWRTdHlsZSwgJ3RyYW5zaXRpb24tZGVsYXknKTtcbiAgY29uc3QgbG9uZ2VzdCA9IHtcbiAgICBwcm9wZXJ0eU5hbWU6ICcnLFxuICAgIGR1cmF0aW9uOiAwLFxuICAgIGFuaW1hdGlvbk5hbWU6IHVuZGVmaW5lZFxuICB9O1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHRyYW5zaXRpb25lZFByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBkdXJhdGlvbiA9IHBhcnNlQ3NzVGltZVVuaXRzVG9NcyhyYXdEZWxheXNbaV0pICsgcGFyc2VDc3NUaW1lVW5pdHNUb01zKHJhd0R1cmF0aW9uc1tpXSk7XG4gICAgaWYgKGR1cmF0aW9uID4gbG9uZ2VzdC5kdXJhdGlvbikge1xuICAgICAgbG9uZ2VzdC5wcm9wZXJ0eU5hbWUgPSB0cmFuc2l0aW9uZWRQcm9wZXJ0aWVzW2ldO1xuICAgICAgbG9uZ2VzdC5kdXJhdGlvbiA9IGR1cmF0aW9uO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbG9uZ2VzdDtcbn1cbmZ1bmN0aW9uIGdldExvbmdlc3RDb21wdXRlZEFuaW1hdGlvbihjb21wdXRlZFN0eWxlKSB7XG4gIGNvbnN0IHJhd05hbWVzID0gcGFyc2VDc3NQcm9wZXJ0eVZhbHVlKGNvbXB1dGVkU3R5bGUsICdhbmltYXRpb24tbmFtZScpO1xuICBjb25zdCByYXdEZWxheXMgPSBwYXJzZUNzc1Byb3BlcnR5VmFsdWUoY29tcHV0ZWRTdHlsZSwgJ2FuaW1hdGlvbi1kZWxheScpO1xuICBjb25zdCByYXdEdXJhdGlvbnMgPSBwYXJzZUNzc1Byb3BlcnR5VmFsdWUoY29tcHV0ZWRTdHlsZSwgJ2FuaW1hdGlvbi1kdXJhdGlvbicpO1xuICBjb25zdCByYXdJdGVyYXRpb25Db3VudHMgPSBwYXJzZUNzc1Byb3BlcnR5VmFsdWUoY29tcHV0ZWRTdHlsZSwgJ2FuaW1hdGlvbi1pdGVyYXRpb24tY291bnQnKTtcbiAgY29uc3QgbG9uZ2VzdCA9IHtcbiAgICBhbmltYXRpb25OYW1lOiAnJyxcbiAgICBwcm9wZXJ0eU5hbWU6IHVuZGVmaW5lZCxcbiAgICBkdXJhdGlvbjogMFxuICB9O1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHJhd05hbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgZHVyYXRpb24gPSBwYXJzZUNzc1RpbWVVbml0c1RvTXMocmF3RGVsYXlzW2ldKSArIHBhcnNlQ3NzVGltZVVuaXRzVG9NcyhyYXdEdXJhdGlvbnNbaV0pO1xuICAgIGNvbnN0IGl0ZXJhdGlvbkNvdW50ID0gcmF3SXRlcmF0aW9uQ291bnRzW2ldO1xuICAgIGlmIChkdXJhdGlvbiA+IGxvbmdlc3QuZHVyYXRpb24gJiYgaXRlcmF0aW9uQ291bnQgIT09ICdpbmZpbml0ZScpIHtcbiAgICAgIGxvbmdlc3QuYW5pbWF0aW9uTmFtZSA9IHJhd05hbWVzW2ldO1xuICAgICAgbG9uZ2VzdC5kdXJhdGlvbiA9IGR1cmF0aW9uO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbG9uZ2VzdDtcbn1cbmZ1bmN0aW9uIGlzU2hvcnRlclRoYW5FeGlzdGluZ0FuaW1hdGlvbihleGlzdGluZywgbG9uZ2VzdCkge1xuICByZXR1cm4gZXhpc3RpbmcgIT09IHVuZGVmaW5lZCAmJiBleGlzdGluZy5kdXJhdGlvbiA+IGxvbmdlc3QuZHVyYXRpb247XG59XG5mdW5jdGlvbiBsb25nZXN0RXhpc3RzKGxvbmdlc3QpIHtcbiAgcmV0dXJuIChsb25nZXN0LmFuaW1hdGlvbk5hbWUgIT0gdW5kZWZpbmVkIHx8IGxvbmdlc3QucHJvcGVydHlOYW1lICE9IHVuZGVmaW5lZCkgJiYgbG9uZ2VzdC5kdXJhdGlvbiA+IDA7XG59XG5mdW5jdGlvbiBkZXRlcm1pbmVMb25nZXN0QW5pbWF0aW9uRnJvbUNvbXB1dGVkU3R5bGVzKGVsLCBhbmltYXRpb25zTWFwKSB7XG4gIGNvbnN0IGNvbXB1dGVkU3R5bGUgPSBnZXRDb21wdXRlZFN0eWxlKGVsKTtcbiAgY29uc3QgbG9uZ2VzdEFuaW1hdGlvbiA9IGdldExvbmdlc3RDb21wdXRlZEFuaW1hdGlvbihjb21wdXRlZFN0eWxlKTtcbiAgY29uc3QgbG9uZ2VzdFRyYW5zaXRpb24gPSBnZXRMb25nZXN0Q29tcHV0ZWRUcmFuc2l0aW9uKGNvbXB1dGVkU3R5bGUpO1xuICBjb25zdCBsb25nZXN0ID0gbG9uZ2VzdEFuaW1hdGlvbi5kdXJhdGlvbiA+IGxvbmdlc3RUcmFuc2l0aW9uLmR1cmF0aW9uID8gbG9uZ2VzdEFuaW1hdGlvbiA6IGxvbmdlc3RUcmFuc2l0aW9uO1xuICBpZiAoaXNTaG9ydGVyVGhhbkV4aXN0aW5nQW5pbWF0aW9uKGFuaW1hdGlvbnNNYXAuZ2V0KGVsKSwgbG9uZ2VzdCkpIHJldHVybjtcbiAgaWYgKGxvbmdlc3RFeGlzdHMobG9uZ2VzdCkpIHtcbiAgICBhbmltYXRpb25zTWFwLnNldChlbCwgbG9uZ2VzdCk7XG4gIH1cbn1cbmZ1bmN0aW9uIGRldGVybWluZUxvbmdlc3RBbmltYXRpb24oZWwsIGFuaW1hdGlvbnNNYXAsIGFyZUFuaW1hdGlvblN1cHBvcnRlZCkge1xuICBpZiAoIWFyZUFuaW1hdGlvblN1cHBvcnRlZCkgcmV0dXJuO1xuICBjb25zdCBhbmltYXRpb25zID0gZWwuZ2V0QW5pbWF0aW9ucygpO1xuICByZXR1cm4gYW5pbWF0aW9ucy5sZW5ndGggPT09IDAgPyBkZXRlcm1pbmVMb25nZXN0QW5pbWF0aW9uRnJvbUNvbXB1dGVkU3R5bGVzKGVsLCBhbmltYXRpb25zTWFwKSA6IGRldGVybWluZUxvbmdlc3RBbmltYXRpb25Gcm9tRWxlbWVudEFuaW1hdGlvbnMoZWwsIGFuaW1hdGlvbnNNYXAsIGFuaW1hdGlvbnMpO1xufVxuZnVuY3Rpb24gZGV0ZXJtaW5lTG9uZ2VzdEFuaW1hdGlvbkZyb21FbGVtZW50QW5pbWF0aW9ucyhlbCwgYW5pbWF0aW9uc01hcCwgYW5pbWF0aW9ucykge1xuICBsZXQgbG9uZ2VzdCA9IHtcbiAgICBhbmltYXRpb25OYW1lOiB1bmRlZmluZWQsXG4gICAgcHJvcGVydHlOYW1lOiB1bmRlZmluZWQsXG4gICAgZHVyYXRpb246IDBcbiAgfTtcbiAgZm9yIChjb25zdCBhbmltYXRpb24gb2YgYW5pbWF0aW9ucykge1xuICAgIGNvbnN0IHRpbWluZyA9IGFuaW1hdGlvbi5lZmZlY3Q/LmdldFRpbWluZygpO1xuICAgIGlmICh0aW1pbmc/Lml0ZXJhdGlvbnMgPT09IEluZmluaXR5KSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3QgYW5pbUR1cmF0aW9uID0gdHlwZW9mIHRpbWluZz8uZHVyYXRpb24gPT09ICdudW1iZXInID8gdGltaW5nLmR1cmF0aW9uIDogMDtcbiAgICBsZXQgZHVyYXRpb24gPSAodGltaW5nPy5kZWxheSA/PyAwKSArIGFuaW1EdXJhdGlvbjtcbiAgICBsZXQgcHJvcGVydHlOYW1lO1xuICAgIGxldCBhbmltYXRpb25OYW1lO1xuICAgIGlmIChhbmltYXRpb24uYW5pbWF0aW9uTmFtZSkge1xuICAgICAgYW5pbWF0aW9uTmFtZSA9IGFuaW1hdGlvbi5hbmltYXRpb25OYW1lO1xuICAgIH0gZWxzZSB7XG4gICAgICBwcm9wZXJ0eU5hbWUgPSBhbmltYXRpb24udHJhbnNpdGlvblByb3BlcnR5O1xuICAgIH1cbiAgICBpZiAoZHVyYXRpb24gPj0gbG9uZ2VzdC5kdXJhdGlvbikge1xuICAgICAgbG9uZ2VzdCA9IHtcbiAgICAgICAgYW5pbWF0aW9uTmFtZSxcbiAgICAgICAgcHJvcGVydHlOYW1lLFxuICAgICAgICBkdXJhdGlvblxuICAgICAgfTtcbiAgICB9XG4gIH1cbiAgaWYgKGlzU2hvcnRlclRoYW5FeGlzdGluZ0FuaW1hdGlvbihhbmltYXRpb25zTWFwLmdldChlbCksIGxvbmdlc3QpKSByZXR1cm47XG4gIGlmIChsb25nZXN0RXhpc3RzKGxvbmdlc3QpKSB7XG4gICAgYW5pbWF0aW9uc01hcC5zZXQoZWwsIGxvbmdlc3QpO1xuICB9XG59XG5jb25zdCBhbGxMZWF2aW5nQW5pbWF0aW9ucyA9IC8qI19fUFVSRV9fKi9uZXcgU2V0KCk7XG52YXIgVHJhY2luZ0FjdGlvbiA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoVHJhY2luZ0FjdGlvbikge1xuICBUcmFjaW5nQWN0aW9uW1RyYWNpbmdBY3Rpb25bXCJDSEFOR0VfREVURUNUSU9OXCJdID0gMF0gPSBcIkNIQU5HRV9ERVRFQ1RJT05cIjtcbiAgVHJhY2luZ0FjdGlvbltUcmFjaW5nQWN0aW9uW1wiQUZURVJfTkVYVF9SRU5ERVJcIl0gPSAxXSA9IFwiQUZURVJfTkVYVF9SRU5ERVJcIjtcbiAgcmV0dXJuIFRyYWNpbmdBY3Rpb247XG59KFRyYWNpbmdBY3Rpb24gfHwge30pO1xuY29uc3QgVHJhY2luZ1NlcnZpY2UgPSAvKiNfX1BVUkVfXyovbmV3IEluamVjdGlvblRva2VuKHR5cGVvZiBuZ0Rldk1vZGUgIT09ICd1bmRlZmluZWQnICYmIG5nRGV2TW9kZSA/ICdUcmFjaW5nU2VydmljZScgOiAnJyk7XG5jb25zdCBtYXJrZWRGZWF0dXJlcyA9IC8qI19fUFVSRV9fKi9uZXcgU2V0KCk7XG5mdW5jdGlvbiBwZXJmb3JtYW5jZU1hcmtGZWF0dXJlKGZlYXR1cmUpIHtcbiAgaWYgKG1hcmtlZEZlYXR1cmVzLmhhcyhmZWF0dXJlKSkge1xuICAgIHJldHVybjtcbiAgfVxuICBtYXJrZWRGZWF0dXJlcy5hZGQoZmVhdHVyZSk7XG4gIHBlcmZvcm1hbmNlPy5tYXJrPy4oJ21hcmtfZmVhdHVyZV91c2FnZScsIHtcbiAgICBkZXRhaWw6IHtcbiAgICAgIGZlYXR1cmVcbiAgICB9XG4gIH0pO1xufVxubGV0IEFmdGVyUmVuZGVyTWFuYWdlciA9IC8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICBjbGFzcyBBZnRlclJlbmRlck1hbmFnZXIge1xuICAgIGltcGwgPSBudWxsO1xuICAgIGV4ZWN1dGUoKSB7XG4gICAgICB0aGlzLmltcGw/LmV4ZWN1dGUoKTtcbiAgICB9XG4gICAgc3RhdGljIMm1cHJvdiA9IC8qIEBfX1BVUkVfXyAqL1xuICAgIF9fZGVmaW5lSW5qZWN0YWJsZSh7XG4gICAgICB0b2tlbjogQWZ0ZXJSZW5kZXJNYW5hZ2VyLFxuICAgICAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxuICAgICAgZmFjdG9yeTogKCkgPT4gbmV3IEFmdGVyUmVuZGVyTWFuYWdlcigpXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIEFmdGVyUmVuZGVyTWFuYWdlcjtcbn0pKCk7XG5jb25zdCBBRlRFUl9SRU5ERVJfUEhBU0VTID0gLyogQF9fUFVSRV9fICoqLygoKSA9PiBbMCwgMSwgMiwgM10pKCk7XG5sZXQgQWZ0ZXJSZW5kZXJJbXBsID0gLyojX19QVVJFX18qLygoKSA9PiB7XG4gIGNsYXNzIEFmdGVyUmVuZGVySW1wbCB7XG4gICAgbmdab25lID0gaW5qZWN0KE5nWm9uZSk7XG4gICAgc2NoZWR1bGVyID0gaW5qZWN0KENoYW5nZURldGVjdGlvblNjaGVkdWxlcik7XG4gICAgZXJyb3JIYW5kbGVyID0gaW5qZWN0KEVycm9ySGFuZGxlciwge1xuICAgICAgb3B0aW9uYWw6IHRydWVcbiAgICB9KTtcbiAgICBzZXF1ZW5jZXMgPSBuZXcgU2V0KCk7XG4gICAgZGVmZXJyZWRSZWdpc3RyYXRpb25zID0gbmV3IFNldCgpO1xuICAgIGV4ZWN1dGluZyA9IGZhbHNlO1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgaW5qZWN0KFRyYWNpbmdTZXJ2aWNlLCB7XG4gICAgICAgIG9wdGlvbmFsOiB0cnVlXG4gICAgICB9KTtcbiAgICB9XG4gICAgZXhlY3V0ZSgpIHtcbiAgICAgIGNvbnN0IGhhc1NlcXVlbmNlc1RvRXhlY3V0ZSA9IHRoaXMuc2VxdWVuY2VzLnNpemUgPiAwO1xuICAgICAgaWYgKGhhc1NlcXVlbmNlc1RvRXhlY3V0ZSkge1xuICAgICAgICBwcm9maWxlcihQcm9maWxlckV2ZW50LkFmdGVyUmVuZGVySG9va3NTdGFydCk7XG4gICAgICB9XG4gICAgICB0aGlzLmV4ZWN1dGluZyA9IHRydWU7XG4gICAgICBmb3IgKGNvbnN0IHBoYXNlIG9mIEFGVEVSX1JFTkRFUl9QSEFTRVMpIHtcbiAgICAgICAgZm9yIChjb25zdCBzZXF1ZW5jZSBvZiB0aGlzLnNlcXVlbmNlcykge1xuICAgICAgICAgIGlmIChzZXF1ZW5jZS5lcnJvcmVkT3JEZXN0cm95ZWQgfHwgIXNlcXVlbmNlLmhvb2tzW3BoYXNlXSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBzZXF1ZW5jZS5waXBlbGluZWRWYWx1ZSA9IHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHRoaXMubWF5YmVUcmFjZSgoKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGhvb2tGbiA9IHNlcXVlbmNlLmhvb2tzW3BoYXNlXTtcbiAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBob29rRm4oc2VxdWVuY2UucGlwZWxpbmVkVmFsdWUpO1xuICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICB9LCBzZXF1ZW5jZS5zbmFwc2hvdCkpO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgc2VxdWVuY2UuZXJyb3JlZE9yRGVzdHJveWVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuZXJyb3JIYW5kbGVyPy5oYW5kbGVFcnJvcihlcnIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5leGVjdXRpbmcgPSBmYWxzZTtcbiAgICAgIGZvciAoY29uc3Qgc2VxdWVuY2Ugb2YgdGhpcy5zZXF1ZW5jZXMpIHtcbiAgICAgICAgc2VxdWVuY2UuYWZ0ZXJSdW4oKTtcbiAgICAgICAgaWYgKHNlcXVlbmNlLm9uY2UpIHtcbiAgICAgICAgICB0aGlzLnNlcXVlbmNlcy5kZWxldGUoc2VxdWVuY2UpO1xuICAgICAgICAgIHNlcXVlbmNlLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZm9yIChjb25zdCBzZXF1ZW5jZSBvZiB0aGlzLmRlZmVycmVkUmVnaXN0cmF0aW9ucykge1xuICAgICAgICB0aGlzLnNlcXVlbmNlcy5hZGQoc2VxdWVuY2UpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuZGVmZXJyZWRSZWdpc3RyYXRpb25zLnNpemUgPiAwKSB7XG4gICAgICAgIHRoaXMuc2NoZWR1bGVyLm5vdGlmeSg3KTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZGVmZXJyZWRSZWdpc3RyYXRpb25zLmNsZWFyKCk7XG4gICAgICBpZiAoaGFzU2VxdWVuY2VzVG9FeGVjdXRlKSB7XG4gICAgICAgIHByb2ZpbGVyKFByb2ZpbGVyRXZlbnQuQWZ0ZXJSZW5kZXJIb29rc0VuZCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJlZ2lzdGVyKHNlcXVlbmNlKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHZpZXdcbiAgICAgIH0gPSBzZXF1ZW5jZTtcbiAgICAgIGlmICh2aWV3ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgKHZpZXdbQUZURVJfUkVOREVSX1NFUVVFTkNFU19UT19BRERdID8/PSBbXSkucHVzaChzZXF1ZW5jZSk7XG4gICAgICAgIG1hcmtBbmNlc3RvcnNGb3JUcmF2ZXJzYWwodmlldyk7XG4gICAgICAgIHZpZXdbRkxBR1NdIHw9IDgxOTI7XG4gICAgICB9IGVsc2UgaWYgKCF0aGlzLmV4ZWN1dGluZykge1xuICAgICAgICB0aGlzLmFkZFNlcXVlbmNlKHNlcXVlbmNlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZGVmZXJyZWRSZWdpc3RyYXRpb25zLmFkZChzZXF1ZW5jZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGFkZFNlcXVlbmNlKHNlcXVlbmNlKSB7XG4gICAgICB0aGlzLnNlcXVlbmNlcy5hZGQoc2VxdWVuY2UpO1xuICAgICAgdGhpcy5zY2hlZHVsZXIubm90aWZ5KDcpO1xuICAgIH1cbiAgICB1bnJlZ2lzdGVyKHNlcXVlbmNlKSB7XG4gICAgICBpZiAodGhpcy5leGVjdXRpbmcgJiYgdGhpcy5zZXF1ZW5jZXMuaGFzKHNlcXVlbmNlKSkge1xuICAgICAgICBzZXF1ZW5jZS5lcnJvcmVkT3JEZXN0cm95ZWQgPSB0cnVlO1xuICAgICAgICBzZXF1ZW5jZS5waXBlbGluZWRWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgc2VxdWVuY2Uub25jZSA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNlcXVlbmNlcy5kZWxldGUoc2VxdWVuY2UpO1xuICAgICAgICB0aGlzLmRlZmVycmVkUmVnaXN0cmF0aW9ucy5kZWxldGUoc2VxdWVuY2UpO1xuICAgICAgfVxuICAgIH1cbiAgICBtYXliZVRyYWNlKGZuLCBzbmFwc2hvdCkge1xuICAgICAgcmV0dXJuIHNuYXBzaG90ID8gc25hcHNob3QucnVuKFRyYWNpbmdBY3Rpb24uQUZURVJfTkVYVF9SRU5ERVIsIGZuKSA6IGZuKCk7XG4gICAgfVxuICAgIHN0YXRpYyDJtXByb3YgPSAvKiBAX19QVVJFX18gKi9cbiAgICBfX2RlZmluZUluamVjdGFibGUoe1xuICAgICAgdG9rZW46IEFmdGVyUmVuZGVySW1wbCxcbiAgICAgIHByb3ZpZGVkSW46ICdyb290JyxcbiAgICAgIGZhY3Rvcnk6ICgpID0+IG5ldyBBZnRlclJlbmRlckltcGwoKVxuICAgIH0pO1xuICB9XG4gIHJldHVybiBBZnRlclJlbmRlckltcGw7XG59KSgpO1xuY2xhc3MgQWZ0ZXJSZW5kZXJTZXF1ZW5jZSB7XG4gIGltcGw7XG4gIGhvb2tzO1xuICB2aWV3O1xuICBvbmNlO1xuICBzbmFwc2hvdDtcbiAgZXJyb3JlZE9yRGVzdHJveWVkID0gZmFsc2U7XG4gIHBpcGVsaW5lZFZhbHVlID0gdW5kZWZpbmVkO1xuICB1bnJlZ2lzdGVyT25EZXN0cm95O1xuICBjb25zdHJ1Y3RvcihpbXBsLCBob29rcywgdmlldywgb25jZSwgZGVzdHJveVJlZiwgc25hcHNob3QgPSBudWxsKSB7XG4gICAgdGhpcy5pbXBsID0gaW1wbDtcbiAgICB0aGlzLmhvb2tzID0gaG9va3M7XG4gICAgdGhpcy52aWV3ID0gdmlldztcbiAgICB0aGlzLm9uY2UgPSBvbmNlO1xuICAgIHRoaXMuc25hcHNob3QgPSBzbmFwc2hvdDtcbiAgICB0aGlzLnVucmVnaXN0ZXJPbkRlc3Ryb3kgPSBkZXN0cm95UmVmPy5vbkRlc3Ryb3koKCkgPT4gdGhpcy5kZXN0cm95KCkpO1xuICB9XG4gIGFmdGVyUnVuKCkge1xuICAgIHRoaXMuZXJyb3JlZE9yRGVzdHJveWVkID0gZmFsc2U7XG4gICAgdGhpcy5waXBlbGluZWRWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnNuYXBzaG90Py5kaXNwb3NlKCk7XG4gICAgdGhpcy5zbmFwc2hvdCA9IG51bGw7XG4gIH1cbiAgZGVzdHJveSgpIHtcbiAgICB0aGlzLmltcGwudW5yZWdpc3Rlcih0aGlzKTtcbiAgICB0aGlzLnVucmVnaXN0ZXJPbkRlc3Ryb3k/LigpO1xuICAgIGNvbnN0IHNjaGVkdWxlZCA9IHRoaXMudmlldz8uW0FGVEVSX1JFTkRFUl9TRVFVRU5DRVNfVE9fQUREXTtcbiAgICBpZiAoc2NoZWR1bGVkKSB7XG4gICAgICB0aGlzLnZpZXdbQUZURVJfUkVOREVSX1NFUVVFTkNFU19UT19BRERdID0gc2NoZWR1bGVkLmZpbHRlcihzID0+IHMgIT09IHRoaXMpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gYWZ0ZXJFdmVyeVJlbmRlcihjYWxsYmFja09yU3BlYywgb3B0aW9ucykge1xuICBuZ0Rldk1vZGUgJiYgYXNzZXJ0Tm90SW5SZWFjdGl2ZUNvbnRleHQoYWZ0ZXJFdmVyeVJlbmRlciwgJ0NhbGwgYGFmdGVyRXZlcnlSZW5kZXJgIG91dHNpZGUgb2YgYSByZWFjdGl2ZSBjb250ZXh0LiBGb3IgZXhhbXBsZSwgc2NoZWR1bGUgdGhlIHJlbmRlciAnICsgJ2NhbGxiYWNrIGluc2lkZSB0aGUgY29tcG9uZW50IGNvbnN0cnVjdG9yYC4nKTtcbiAgaWYgKG5nRGV2TW9kZSAmJiAhb3B0aW9ucz8uaW5qZWN0b3IpIHtcbiAgICBhc3NlcnRJbkluamVjdGlvbkNvbnRleHQoYWZ0ZXJFdmVyeVJlbmRlcik7XG4gIH1cbiAgY29uc3QgaW5qZWN0b3IgPSBvcHRpb25zPy5pbmplY3RvciA/PyBpbmplY3QoSW5qZWN0b3IpO1xuICBpZiAodHlwZW9mIG5nU2VydmVyTW9kZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbmdTZXJ2ZXJNb2RlKSB7XG4gICAgcmV0dXJuIE5PT1BfQUZURVJfUkVOREVSX1JFRjtcbiAgfVxuICBwZXJmb3JtYW5jZU1hcmtGZWF0dXJlKCdOZ0FmdGVyUmVuZGVyJyk7XG4gIHJldHVybiBhZnRlckV2ZXJ5UmVuZGVySW1wbChjYWxsYmFja09yU3BlYywgaW5qZWN0b3IsIG9wdGlvbnMsIGZhbHNlKTtcbn1cbmZ1bmN0aW9uIGFmdGVyTmV4dFJlbmRlcihjYWxsYmFja09yU3BlYywgb3B0aW9ucykge1xuICBpZiAobmdEZXZNb2RlICYmICFvcHRpb25zPy5pbmplY3Rvcikge1xuICAgIGFzc2VydEluSW5qZWN0aW9uQ29udGV4dChhZnRlck5leHRSZW5kZXIpO1xuICB9XG4gIGNvbnN0IGluamVjdG9yID0gb3B0aW9ucz8uaW5qZWN0b3IgPz8gaW5qZWN0KEluamVjdG9yKTtcbiAgaWYgKHR5cGVvZiBuZ1NlcnZlck1vZGUgIT09ICd1bmRlZmluZWQnICYmIG5nU2VydmVyTW9kZSkge1xuICAgIHJldHVybiBOT09QX0FGVEVSX1JFTkRFUl9SRUY7XG4gIH1cbiAgcGVyZm9ybWFuY2VNYXJrRmVhdHVyZSgnTmdBZnRlck5leHRSZW5kZXInKTtcbiAgcmV0dXJuIGFmdGVyRXZlcnlSZW5kZXJJbXBsKGNhbGxiYWNrT3JTcGVjLCBpbmplY3Rvciwgb3B0aW9ucywgdHJ1ZSk7XG59XG5mdW5jdGlvbiBnZXRIb29rcyhjYWxsYmFja09yU3BlYykge1xuICBpZiAoY2FsbGJhY2tPclNwZWMgaW5zdGFuY2VvZiBGdW5jdGlvbikge1xuICAgIHJldHVybiBbdW5kZWZpbmVkLCB1bmRlZmluZWQsIGNhbGxiYWNrT3JTcGVjLCB1bmRlZmluZWRdO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBbY2FsbGJhY2tPclNwZWMuZWFybHlSZWFkLCBjYWxsYmFja09yU3BlYy53cml0ZSwgY2FsbGJhY2tPclNwZWMubWl4ZWRSZWFkV3JpdGUsIGNhbGxiYWNrT3JTcGVjLnJlYWRdO1xuICB9XG59XG5mdW5jdGlvbiBhZnRlckV2ZXJ5UmVuZGVySW1wbChjYWxsYmFja09yU3BlYywgaW5qZWN0b3IsIG9wdGlvbnMsIG9uY2UpIHtcbiAgY29uc3QgbWFuYWdlciA9IGluamVjdG9yLmdldChBZnRlclJlbmRlck1hbmFnZXIpO1xuICBtYW5hZ2VyLmltcGwgPz89IGluamVjdG9yLmdldChBZnRlclJlbmRlckltcGwpO1xuICBjb25zdCB0cmFjaW5nID0gaW5qZWN0b3IuZ2V0KFRyYWNpbmdTZXJ2aWNlLCBudWxsLCB7XG4gICAgb3B0aW9uYWw6IHRydWVcbiAgfSk7XG4gIGNvbnN0IGRlc3Ryb3lSZWYgPSBvcHRpb25zPy5tYW51YWxDbGVhbnVwICE9PSB0cnVlID8gaW5qZWN0b3IuZ2V0KERlc3Ryb3lSZWYpIDogbnVsbDtcbiAgY29uc3Qgdmlld0NvbnRleHQgPSBpbmplY3Rvci5nZXQoVmlld0NvbnRleHQsIG51bGwsIHtcbiAgICBvcHRpb25hbDogdHJ1ZVxuICB9KTtcbiAgY29uc3Qgc2VxdWVuY2UgPSBuZXcgQWZ0ZXJSZW5kZXJTZXF1ZW5jZShtYW5hZ2VyLmltcGwsIGdldEhvb2tzKGNhbGxiYWNrT3JTcGVjKSwgdmlld0NvbnRleHQ/LnZpZXcsIG9uY2UsIGRlc3Ryb3lSZWYsIHRyYWNpbmc/LnNuYXBzaG90KG51bGwpKTtcbiAgbWFuYWdlci5pbXBsLnJlZ2lzdGVyKHNlcXVlbmNlKTtcbiAgcmV0dXJuIHNlcXVlbmNlO1xufVxuY29uc3QgTk9PUF9BRlRFUl9SRU5ERVJfUkVGID0ge1xuICBkZXN0cm95KCkge31cbn07XG5jb25zdCBBTklNQVRJT05fUVVFVUUgPSAvKiNfX1BVUkVfXyovbmV3IEluamVjdGlvblRva2VuKHR5cGVvZiBuZ0Rldk1vZGUgIT09ICd1bmRlZmluZWQnICYmIG5nRGV2TW9kZSA/ICdBbmltYXRpb25RdWV1ZScgOiAnJywge1xuICBmYWN0b3J5OiAoKSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHF1ZXVlOiBuZXcgU2V0KCksXG4gICAgICBpc1NjaGVkdWxlZDogZmFsc2UsXG4gICAgICBzY2hlZHVsZXI6IG51bGwsXG4gICAgICBpbmplY3RvcjogaW5qZWN0KEVudmlyb25tZW50SW5qZWN0b3IpXG4gICAgfTtcbiAgfVxufSk7XG5mdW5jdGlvbiBhZGRUb0FuaW1hdGlvblF1ZXVlKGluamVjdG9yLCBhbmltYXRpb25GbnMsIGFuaW1hdGlvbkRhdGEpIHtcbiAgY29uc3QgYW5pbWF0aW9uUXVldWUgPSBpbmplY3Rvci5nZXQoQU5JTUFUSU9OX1FVRVVFKTtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYW5pbWF0aW9uRm5zKSkge1xuICAgIGZvciAoY29uc3QgYW5pbWF0ZUZuIG9mIGFuaW1hdGlvbkZucykge1xuICAgICAgYW5pbWF0aW9uUXVldWUucXVldWUuYWRkKGFuaW1hdGVGbik7XG4gICAgICBhbmltYXRpb25EYXRhPy5kZXRhY2hlZExlYXZlQW5pbWF0aW9uRm5zPy5wdXNoKGFuaW1hdGVGbik7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGFuaW1hdGlvblF1ZXVlLnF1ZXVlLmFkZChhbmltYXRpb25GbnMpO1xuICAgIGFuaW1hdGlvbkRhdGE/LmRldGFjaGVkTGVhdmVBbmltYXRpb25GbnM/LnB1c2goYW5pbWF0aW9uRm5zKTtcbiAgfVxuICBhbmltYXRpb25RdWV1ZS5zY2hlZHVsZXIgJiYgYW5pbWF0aW9uUXVldWUuc2NoZWR1bGVyKGluamVjdG9yKTtcbn1cbmZ1bmN0aW9uIHJlbW92ZUZyb21BbmltYXRpb25RdWV1ZShpbmplY3RvciwgYW5pbWF0aW9uRGF0YSkge1xuICBjb25zdCBhbmltYXRpb25RdWV1ZSA9IGluamVjdG9yLmdldChBTklNQVRJT05fUVVFVUUpO1xuICBpZiAoYW5pbWF0aW9uRGF0YS5kZXRhY2hlZExlYXZlQW5pbWF0aW9uRm5zKSB7XG4gICAgZm9yIChjb25zdCBhbmltYXRpb25GbiBvZiBhbmltYXRpb25EYXRhLmRldGFjaGVkTGVhdmVBbmltYXRpb25GbnMpIHtcbiAgICAgIGFuaW1hdGlvblF1ZXVlLnF1ZXVlLmRlbGV0ZShhbmltYXRpb25Gbik7XG4gICAgfVxuICAgIGFuaW1hdGlvbkRhdGEuZGV0YWNoZWRMZWF2ZUFuaW1hdGlvbkZucyA9IHVuZGVmaW5lZDtcbiAgfVxufVxuZnVuY3Rpb24gc2NoZWR1bGVBbmltYXRpb25RdWV1ZShpbmplY3Rvcikge1xuICBjb25zdCBhbmltYXRpb25RdWV1ZSA9IGluamVjdG9yLmdldChBTklNQVRJT05fUVVFVUUpO1xuICBpZiAoIWFuaW1hdGlvblF1ZXVlLmlzU2NoZWR1bGVkKSB7XG4gICAgYWZ0ZXJOZXh0UmVuZGVyKCgpID0+IHtcbiAgICAgIGFuaW1hdGlvblF1ZXVlLmlzU2NoZWR1bGVkID0gZmFsc2U7XG4gICAgICBmb3IgKGxldCBhbmltYXRlRm4gb2YgYW5pbWF0aW9uUXVldWUucXVldWUpIHtcbiAgICAgICAgYW5pbWF0ZUZuKCk7XG4gICAgICB9XG4gICAgICBhbmltYXRpb25RdWV1ZS5xdWV1ZS5jbGVhcigpO1xuICAgIH0sIHtcbiAgICAgIGluamVjdG9yOiBhbmltYXRpb25RdWV1ZS5pbmplY3RvclxuICAgIH0pO1xuICAgIGFuaW1hdGlvblF1ZXVlLmlzU2NoZWR1bGVkID0gdHJ1ZTtcbiAgfVxufVxuZnVuY3Rpb24gaW5pdGlhbGl6ZUFuaW1hdGlvblF1ZXVlU2NoZWR1bGVyKGluamVjdG9yKSB7XG4gIGNvbnN0IGFuaW1hdGlvblF1ZXVlID0gaW5qZWN0b3IuZ2V0KEFOSU1BVElPTl9RVUVVRSk7XG4gIGFuaW1hdGlvblF1ZXVlLnNjaGVkdWxlciA9IHNjaGVkdWxlQW5pbWF0aW9uUXVldWU7XG4gIGFuaW1hdGlvblF1ZXVlLnNjaGVkdWxlcihpbmplY3Rvcik7XG59XG5mdW5jdGlvbiBxdWV1ZUVudGVyQW5pbWF0aW9ucyhpbmplY3RvciwgZW50ZXJBbmltYXRpb25zKSB7XG4gIGZvciAoY29uc3QgW18sIG5vZGVBbmltYXRpb25zXSBvZiBlbnRlckFuaW1hdGlvbnMpIHtcbiAgICBhZGRUb0FuaW1hdGlvblF1ZXVlKGluamVjdG9yLCBub2RlQW5pbWF0aW9ucy5hbmltYXRlRm5zKTtcbiAgfVxufVxuZnVuY3Rpb24gbWF5YmVRdWV1ZUVudGVyQW5pbWF0aW9uKHBhcmVudExWaWV3LCBwYXJlbnQsIHROb2RlLCBpbmplY3Rvcikge1xuICBjb25zdCBlbnRlckFuaW1hdGlvbnMgPSBwYXJlbnRMVmlldz8uW0FOSU1BVElPTlNdPy5lbnRlcjtcbiAgaWYgKHBhcmVudCAhPT0gbnVsbCAmJiBlbnRlckFuaW1hdGlvbnMgJiYgZW50ZXJBbmltYXRpb25zLmhhcyh0Tm9kZS5pbmRleCkpIHtcbiAgICBxdWV1ZUVudGVyQW5pbWF0aW9ucyhpbmplY3RvciwgZW50ZXJBbmltYXRpb25zKTtcbiAgfVxufVxuZnVuY3Rpb24gYXBwbHlUb0VsZW1lbnRPckNvbnRhaW5lcihhY3Rpb24sIHJlbmRlcmVyLCBpbmplY3RvciwgcGFyZW50LCBsTm9kZVRvSGFuZGxlLCB0Tm9kZSwgYmVmb3JlTm9kZSwgcGFyZW50TFZpZXcpIHtcbiAgaWYgKGxOb2RlVG9IYW5kbGUgIT0gbnVsbCkge1xuICAgIGxldCBsQ29udGFpbmVyO1xuICAgIGxldCBpc0NvbXBvbmVudCA9IGZhbHNlO1xuICAgIGlmIChpc0xDb250YWluZXIobE5vZGVUb0hhbmRsZSkpIHtcbiAgICAgIGxDb250YWluZXIgPSBsTm9kZVRvSGFuZGxlO1xuICAgIH0gZWxzZSBpZiAoaXNMVmlldyhsTm9kZVRvSGFuZGxlKSkge1xuICAgICAgaXNDb21wb25lbnQgPSB0cnVlO1xuICAgICAgbmdEZXZNb2RlICYmIGFzc2VydERlZmluZWQobE5vZGVUb0hhbmRsZVtIT1NUXSwgJ0hPU1QgbXVzdCBiZSBkZWZpbmVkIGZvciBhIGNvbXBvbmVudCBMVmlldycpO1xuICAgICAgbE5vZGVUb0hhbmRsZSA9IGxOb2RlVG9IYW5kbGVbSE9TVF07XG4gICAgfVxuICAgIGNvbnN0IHJOb2RlID0gdW53cmFwUk5vZGUobE5vZGVUb0hhbmRsZSk7XG4gICAgaWYgKGFjdGlvbiA9PT0gMCAmJiBwYXJlbnQgIT09IG51bGwpIHtcbiAgICAgIG1heWJlUXVldWVFbnRlckFuaW1hdGlvbihwYXJlbnRMVmlldywgcGFyZW50LCB0Tm9kZSwgaW5qZWN0b3IpO1xuICAgICAgaWYgKGJlZm9yZU5vZGUgPT0gbnVsbCkge1xuICAgICAgICBuYXRpdmVBcHBlbmRDaGlsZChyZW5kZXJlciwgcGFyZW50LCByTm9kZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuYXRpdmVJbnNlcnRCZWZvcmUocmVuZGVyZXIsIHBhcmVudCwgck5vZGUsIGJlZm9yZU5vZGUgfHwgbnVsbCwgdHJ1ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChhY3Rpb24gPT09IDEgJiYgcGFyZW50ICE9PSBudWxsKSB7XG4gICAgICBtYXliZVF1ZXVlRW50ZXJBbmltYXRpb24ocGFyZW50TFZpZXcsIHBhcmVudCwgdE5vZGUsIGluamVjdG9yKTtcbiAgICAgIG5hdGl2ZUluc2VydEJlZm9yZShyZW5kZXJlciwgcGFyZW50LCByTm9kZSwgYmVmb3JlTm9kZSB8fCBudWxsLCB0cnVlKTtcbiAgICAgIGNhbmNlbExlYXZpbmdOb2Rlcyh0Tm9kZSwgck5vZGUpO1xuICAgIH0gZWxzZSBpZiAoYWN0aW9uID09PSAyKSB7XG4gICAgICBpZiAocGFyZW50TFZpZXc/LltBTklNQVRJT05TXT8ubGVhdmU/Lmhhcyh0Tm9kZS5pbmRleCkpIHtcbiAgICAgICAgdHJhY2tMZWF2aW5nTm9kZXModE5vZGUsIHJOb2RlKTtcbiAgICAgIH1cbiAgICAgIHJ1bkxlYXZlQW5pbWF0aW9uc1dpdGhDYWxsYmFjayhwYXJlbnRMVmlldywgdE5vZGUsIGluamVjdG9yLCBub2RlSGFzTGVhdmVBbmltYXRpb25zID0+IHtcbiAgICAgICAgaWYgKHJldXNlZE5vZGVzLmhhcyhyTm9kZSkpIHtcbiAgICAgICAgICByZXVzZWROb2Rlcy5kZWxldGUock5vZGUpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBuYXRpdmVSZW1vdmVOb2RlKHJlbmRlcmVyLCByTm9kZSwgaXNDb21wb25lbnQsIG5vZGVIYXNMZWF2ZUFuaW1hdGlvbnMpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChhY3Rpb24gPT09IDMpIHtcbiAgICAgIHJ1bkxlYXZlQW5pbWF0aW9uc1dpdGhDYWxsYmFjayhwYXJlbnRMVmlldywgdE5vZGUsIGluamVjdG9yLCAoKSA9PiB7XG4gICAgICAgIHJlbmRlcmVyLmRlc3Ryb3lOb2RlKHJOb2RlKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAobENvbnRhaW5lciAhPSBudWxsKSB7XG4gICAgICBhcHBseUNvbnRhaW5lcihyZW5kZXJlciwgYWN0aW9uLCBpbmplY3RvciwgbENvbnRhaW5lciwgdE5vZGUsIHBhcmVudCwgYmVmb3JlTm9kZSk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiByZW1vdmVWaWV3RnJvbURPTSh0VmlldywgbFZpZXcpIHtcbiAgZGV0YWNoVmlld0Zyb21ET00odFZpZXcsIGxWaWV3KTtcbiAgbFZpZXdbSE9TVF0gPSBudWxsO1xuICBsVmlld1tUX0hPU1RdID0gbnVsbDtcbn1cbmZ1bmN0aW9uIGFkZFZpZXdUb0RPTSh0VmlldywgcGFyZW50VE5vZGUsIHJlbmRlcmVyLCBsVmlldywgcGFyZW50TmF0aXZlTm9kZSwgYmVmb3JlTm9kZSkge1xuICBsVmlld1tIT1NUXSA9IHBhcmVudE5hdGl2ZU5vZGU7XG4gIGxWaWV3W1RfSE9TVF0gPSBwYXJlbnRUTm9kZTtcbiAgYXBwbHlWaWV3KHRWaWV3LCBsVmlldywgcmVuZGVyZXIsIDEsIHBhcmVudE5hdGl2ZU5vZGUsIGJlZm9yZU5vZGUpO1xufVxuZnVuY3Rpb24gZGV0YWNoVmlld0Zyb21ET00odFZpZXcsIGxWaWV3KSB7XG4gIGxWaWV3W0VOVklST05NRU5UXS5jaGFuZ2VEZXRlY3Rpb25TY2hlZHVsZXI/Lm5vdGlmeSg5KTtcbiAgYXBwbHlWaWV3KHRWaWV3LCBsVmlldywgbFZpZXdbUkVOREVSRVJdLCAyLCBudWxsLCBudWxsKTtcbn1cbmZ1bmN0aW9uIGRlc3Ryb3lWaWV3VHJlZShyb290Vmlldykge1xuICBsZXQgbFZpZXdPckxDb250YWluZXIgPSByb290Vmlld1tDSElMRF9IRUFEXTtcbiAgaWYgKCFsVmlld09yTENvbnRhaW5lcikge1xuICAgIHJldHVybiBjbGVhblVwVmlldyhyb290Vmlld1tUVklFV10sIHJvb3RWaWV3KTtcbiAgfVxuICB3aGlsZSAobFZpZXdPckxDb250YWluZXIpIHtcbiAgICBsZXQgbmV4dCA9IG51bGw7XG4gICAgaWYgKGlzTFZpZXcobFZpZXdPckxDb250YWluZXIpKSB7XG4gICAgICBuZXh0ID0gbFZpZXdPckxDb250YWluZXJbQ0hJTERfSEVBRF07XG4gICAgfSBlbHNlIHtcbiAgICAgIG5nRGV2TW9kZSAmJiBhc3NlcnRMQ29udGFpbmVyKGxWaWV3T3JMQ29udGFpbmVyKTtcbiAgICAgIGNvbnN0IGZpcnN0VmlldyA9IGxWaWV3T3JMQ29udGFpbmVyW0NPTlRBSU5FUl9IRUFERVJfT0ZGU0VUXTtcbiAgICAgIGlmIChmaXJzdFZpZXcpIG5leHQgPSBmaXJzdFZpZXc7XG4gICAgfVxuICAgIGlmICghbmV4dCkge1xuICAgICAgd2hpbGUgKGxWaWV3T3JMQ29udGFpbmVyICYmICFsVmlld09yTENvbnRhaW5lcltORVhUXSAmJiBsVmlld09yTENvbnRhaW5lciAhPT0gcm9vdFZpZXcpIHtcbiAgICAgICAgaWYgKGlzTFZpZXcobFZpZXdPckxDb250YWluZXIpKSB7XG4gICAgICAgICAgY2xlYW5VcFZpZXcobFZpZXdPckxDb250YWluZXJbVFZJRVddLCBsVmlld09yTENvbnRhaW5lcik7XG4gICAgICAgIH1cbiAgICAgICAgbFZpZXdPckxDb250YWluZXIgPSBsVmlld09yTENvbnRhaW5lcltQQVJFTlRdO1xuICAgICAgfVxuICAgICAgaWYgKGxWaWV3T3JMQ29udGFpbmVyID09PSBudWxsKSBsVmlld09yTENvbnRhaW5lciA9IHJvb3RWaWV3O1xuICAgICAgaWYgKGlzTFZpZXcobFZpZXdPckxDb250YWluZXIpKSB7XG4gICAgICAgIGNsZWFuVXBWaWV3KGxWaWV3T3JMQ29udGFpbmVyW1RWSUVXXSwgbFZpZXdPckxDb250YWluZXIpO1xuICAgICAgfVxuICAgICAgbmV4dCA9IGxWaWV3T3JMQ29udGFpbmVyICYmIGxWaWV3T3JMQ29udGFpbmVyW05FWFRdO1xuICAgIH1cbiAgICBsVmlld09yTENvbnRhaW5lciA9IG5leHQ7XG4gIH1cbn1cbmZ1bmN0aW9uIGRldGFjaE1vdmVkVmlldyhkZWNsYXJhdGlvbkNvbnRhaW5lciwgbFZpZXcpIHtcbiAgbmdEZXZNb2RlICYmIGFzc2VydExDb250YWluZXIoZGVjbGFyYXRpb25Db250YWluZXIpO1xuICBuZ0Rldk1vZGUgJiYgYXNzZXJ0RGVmaW5lZChkZWNsYXJhdGlvbkNvbnRhaW5lcltNT1ZFRF9WSUVXU10sICdBIHByb2plY3RlZCB2aWV3IHNob3VsZCBiZWxvbmcgdG8gYSBub24tZW1wdHkgcHJvamVjdGVkIHZpZXdzIGNvbGxlY3Rpb24nKTtcbiAgY29uc3QgbW92ZWRWaWV3cyA9IGRlY2xhcmF0aW9uQ29udGFpbmVyW01PVkVEX1ZJRVdTXTtcbiAgY29uc3QgZGVjbGFyYXRpb25WaWV3SW5kZXggPSBtb3ZlZFZpZXdzLmluZGV4T2YobFZpZXcpO1xuICBtb3ZlZFZpZXdzLnNwbGljZShkZWNsYXJhdGlvblZpZXdJbmRleCwgMSk7XG59XG5mdW5jdGlvbiBkZXN0cm95TFZpZXcodFZpZXcsIGxWaWV3KSB7XG4gIGlmIChpc0Rlc3Ryb3llZChsVmlldykpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgcmVuZGVyZXIgPSBsVmlld1tSRU5ERVJFUl07XG4gIGlmIChyZW5kZXJlci5kZXN0cm95Tm9kZSkge1xuICAgIGFwcGx5Vmlldyh0VmlldywgbFZpZXcsIHJlbmRlcmVyLCAzLCBudWxsLCBudWxsKTtcbiAgfVxuICBkZXN0cm95Vmlld1RyZWUobFZpZXcpO1xufVxuZnVuY3Rpb24gY2xlYW5VcFZpZXcodFZpZXcsIGxWaWV3KSB7XG4gIGlmIChpc0Rlc3Ryb3llZChsVmlldykpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgcHJldkNvbnN1bWVyID0gc2V0QWN0aXZlQ29uc3VtZXIobnVsbCk7XG4gIHRyeSB7XG4gICAgbFZpZXdbRkxBR1NdICY9IH4xMjg7XG4gICAgbFZpZXdbRkxBR1NdIHw9IDI1NjtcbiAgICBsVmlld1tSRUFDVElWRV9URU1QTEFURV9DT05TVU1FUl0gJiYgY29uc3VtZXJEZXN0cm95KGxWaWV3W1JFQUNUSVZFX1RFTVBMQVRFX0NPTlNVTUVSXSk7XG4gICAgZXhlY3V0ZU9uRGVzdHJveXModFZpZXcsIGxWaWV3KTtcbiAgICBwcm9jZXNzQ2xlYW51cHModFZpZXcsIGxWaWV3KTtcbiAgICBpZiAobFZpZXdbVFZJRVddLnR5cGUgPT09IDEpIHtcbiAgICAgIGxWaWV3W1JFTkRFUkVSXS5kZXN0cm95KCk7XG4gICAgfVxuICAgIGNvbnN0IGRlY2xhcmF0aW9uQ29udGFpbmVyID0gbFZpZXdbREVDTEFSQVRJT05fTENPTlRBSU5FUl07XG4gICAgaWYgKGRlY2xhcmF0aW9uQ29udGFpbmVyICE9PSBudWxsICYmIGlzTENvbnRhaW5lcihsVmlld1tQQVJFTlRdKSkge1xuICAgICAgaWYgKGRlY2xhcmF0aW9uQ29udGFpbmVyICE9PSBsVmlld1tQQVJFTlRdKSB7XG4gICAgICAgIGRldGFjaE1vdmVkVmlldyhkZWNsYXJhdGlvbkNvbnRhaW5lciwgbFZpZXcpO1xuICAgICAgfVxuICAgICAgY29uc3QgbFF1ZXJpZXMgPSBsVmlld1tRVUVSSUVTXTtcbiAgICAgIGlmIChsUXVlcmllcyAhPT0gbnVsbCkge1xuICAgICAgICBsUXVlcmllcy5kZXRhY2hWaWV3KHRWaWV3KTtcbiAgICAgIH1cbiAgICB9XG4gICAgdW5yZWdpc3RlckxWaWV3KGxWaWV3KTtcbiAgfSBmaW5hbGx5IHtcbiAgICBzZXRBY3RpdmVDb25zdW1lcihwcmV2Q29uc3VtZXIpO1xuICB9XG59XG5mdW5jdGlvbiBydW5MZWF2ZUFuaW1hdGlvbnNXaXRoQ2FsbGJhY2sobFZpZXcsIHROb2RlLCBpbmplY3RvciwgY2FsbGJhY2spIHtcbiAgY29uc3QgYW5pbWF0aW9ucyA9IGxWaWV3Py5bQU5JTUFUSU9OU107XG4gIGlmIChhbmltYXRpb25zID09IG51bGwgfHwgYW5pbWF0aW9ucy5sZWF2ZSA9PSB1bmRlZmluZWQgfHwgIWFuaW1hdGlvbnMubGVhdmUuaGFzKHROb2RlLmluZGV4KSkgcmV0dXJuIGNhbGxiYWNrKGZhbHNlKTtcbiAgaWYgKGxWaWV3KSBhbGxMZWF2aW5nQW5pbWF0aW9ucy5hZGQobFZpZXdbSURdKTtcbiAgYWRkVG9BbmltYXRpb25RdWV1ZShpbmplY3RvciwgKCkgPT4ge1xuICAgIGlmIChhbmltYXRpb25zLmxlYXZlICYmIGFuaW1hdGlvbnMubGVhdmUuaGFzKHROb2RlLmluZGV4KSkge1xuICAgICAgY29uc3QgbGVhdmVBbmltYXRpb25NYXAgPSBhbmltYXRpb25zLmxlYXZlO1xuICAgICAgY29uc3QgbGVhdmVBbmltYXRpb25zID0gbGVhdmVBbmltYXRpb25NYXAuZ2V0KHROb2RlLmluZGV4KTtcbiAgICAgIGNvbnN0IHJ1bm5pbmdBbmltYXRpb25zID0gW107XG4gICAgICBpZiAobGVhdmVBbmltYXRpb25zKSB7XG4gICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBsZWF2ZUFuaW1hdGlvbnMuYW5pbWF0ZUZucy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICBjb25zdCBhbmltYXRpb25GbiA9IGxlYXZlQW5pbWF0aW9ucy5hbmltYXRlRm5zW2luZGV4XTtcbiAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBwcm9taXNlXG4gICAgICAgICAgfSA9IGFuaW1hdGlvbkZuKCk7XG4gICAgICAgICAgcnVubmluZ0FuaW1hdGlvbnMucHVzaChwcm9taXNlKTtcbiAgICAgICAgfVxuICAgICAgICBhbmltYXRpb25zLmRldGFjaGVkTGVhdmVBbmltYXRpb25GbnMgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICBhbmltYXRpb25zLnJ1bm5pbmcgPSBQcm9taXNlLmFsbFNldHRsZWQocnVubmluZ0FuaW1hdGlvbnMpO1xuICAgICAgcnVuQWZ0ZXJMZWF2ZUFuaW1hdGlvbnMobFZpZXcsIGNhbGxiYWNrKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGxWaWV3KSBhbGxMZWF2aW5nQW5pbWF0aW9ucy5kZWxldGUobFZpZXdbSURdKTtcbiAgICAgIGNhbGxiYWNrKGZhbHNlKTtcbiAgICB9XG4gIH0sIGFuaW1hdGlvbnMpO1xufVxuZnVuY3Rpb24gcnVuQWZ0ZXJMZWF2ZUFuaW1hdGlvbnMobFZpZXcsIGNhbGxiYWNrKSB7XG4gIGNvbnN0IHJ1bm5pbmdBbmltYXRpb25zID0gbFZpZXdbQU5JTUFUSU9OU10/LnJ1bm5pbmc7XG4gIGlmIChydW5uaW5nQW5pbWF0aW9ucykge1xuICAgIHJ1bm5pbmdBbmltYXRpb25zLnRoZW4oKCkgPT4ge1xuICAgICAgbFZpZXdbQU5JTUFUSU9OU10ucnVubmluZyA9IHVuZGVmaW5lZDtcbiAgICAgIGFsbExlYXZpbmdBbmltYXRpb25zLmRlbGV0ZShsVmlld1tJRF0pO1xuICAgICAgY2FsbGJhY2sodHJ1ZSk7XG4gICAgfSk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNhbGxiYWNrKGZhbHNlKTtcbn1cbmZ1bmN0aW9uIHByb2Nlc3NDbGVhbnVwcyh0VmlldywgbFZpZXcpIHtcbiAgbmdEZXZNb2RlICYmIGFzc2VydE5vdFJlYWN0aXZlKHByb2Nlc3NDbGVhbnVwcy5uYW1lKTtcbiAgY29uc3QgdENsZWFudXAgPSB0Vmlldy5jbGVhbnVwO1xuICBjb25zdCBsQ2xlYW51cCA9IGxWaWV3W0NMRUFOVVBdO1xuICBpZiAodENsZWFudXAgIT09IG51bGwpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRDbGVhbnVwLmxlbmd0aCAtIDE7IGkgKz0gMikge1xuICAgICAgaWYgKHR5cGVvZiB0Q2xlYW51cFtpXSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0SWR4ID0gdENsZWFudXBbaSArIDNdO1xuICAgICAgICBuZ0Rldk1vZGUgJiYgYXNzZXJ0TnVtYmVyKHRhcmdldElkeCwgJ2NsZWFudXAgdGFyZ2V0IG11c3QgYmUgYSBudW1iZXInKTtcbiAgICAgICAgaWYgKHRhcmdldElkeCA+PSAwKSB7XG4gICAgICAgICAgbENsZWFudXBbdGFyZ2V0SWR4XSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxDbGVhbnVwWy10YXJnZXRJZHhdLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaSArPSAyO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgY29udGV4dCA9IGxDbGVhbnVwW3RDbGVhbnVwW2kgKyAxXV07XG4gICAgICAgIHRDbGVhbnVwW2ldLmNhbGwoY29udGV4dCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmIChsQ2xlYW51cCAhPT0gbnVsbCkge1xuICAgIGxWaWV3W0NMRUFOVVBdID0gbnVsbDtcbiAgfVxuICBjb25zdCBkZXN0cm95SG9va3MgPSBsVmlld1tPTl9ERVNUUk9ZX0hPT0tTXTtcbiAgaWYgKGRlc3Ryb3lIb29rcyAhPT0gbnVsbCkge1xuICAgIGxWaWV3W09OX0RFU1RST1lfSE9PS1NdID0gbnVsbDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRlc3Ryb3lIb29rcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgZGVzdHJveUhvb2tzRm4gPSBkZXN0cm95SG9va3NbaV07XG4gICAgICBuZ0Rldk1vZGUgJiYgYXNzZXJ0RnVuY3Rpb24oZGVzdHJveUhvb2tzRm4sICdFeHBlY3RpbmcgZGVzdHJveSBob29rIHRvIGJlIGEgZnVuY3Rpb24uJyk7XG4gICAgICBkZXN0cm95SG9va3NGbigpO1xuICAgIH1cbiAgfVxuICBjb25zdCBlZmZlY3RzID0gbFZpZXdbRUZGRUNUU107XG4gIGlmIChlZmZlY3RzICE9PSBudWxsKSB7XG4gICAgbFZpZXdbRUZGRUNUU10gPSBudWxsO1xuICAgIGZvciAoY29uc3QgZWZmZWN0IG9mIGVmZmVjdHMpIHtcbiAgICAgIGVmZmVjdC5kZXN0cm95KCk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBleGVjdXRlT25EZXN0cm95cyh0VmlldywgbFZpZXcpIHtcbiAgbmdEZXZNb2RlICYmIGFzc2VydE5vdFJlYWN0aXZlKGV4ZWN1dGVPbkRlc3Ryb3lzLm5hbWUpO1xuICBsZXQgZGVzdHJveUhvb2tzO1xuICBpZiAodFZpZXcgIT0gbnVsbCAmJiAoZGVzdHJveUhvb2tzID0gdFZpZXcuZGVzdHJveUhvb2tzKSAhPSBudWxsKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkZXN0cm95SG9va3MubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgIGNvbnN0IGNvbnRleHQgPSBsVmlld1tkZXN0cm95SG9va3NbaV1dO1xuICAgICAgaWYgKCEoY29udGV4dCBpbnN0YW5jZW9mIE5vZGVJbmplY3RvckZhY3RvcnkpKSB7XG4gICAgICAgIGNvbnN0IHRvQ2FsbCA9IGRlc3Ryb3lIb29rc1tpICsgMV07XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRvQ2FsbCkpIHtcbiAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRvQ2FsbC5sZW5ndGg7IGogKz0gMikge1xuICAgICAgICAgICAgY29uc3QgY2FsbENvbnRleHQgPSBjb250ZXh0W3RvQ2FsbFtqXV07XG4gICAgICAgICAgICBjb25zdCBob29rID0gdG9DYWxsW2ogKyAxXTtcbiAgICAgICAgICAgIHByb2ZpbGVyKFByb2ZpbGVyRXZlbnQuTGlmZWN5Y2xlSG9va1N0YXJ0LCBjYWxsQ29udGV4dCwgaG9vayk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBob29rLmNhbGwoY2FsbENvbnRleHQpO1xuICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgcHJvZmlsZXIoUHJvZmlsZXJFdmVudC5MaWZlY3ljbGVIb29rRW5kLCBjYWxsQ29udGV4dCwgaG9vayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByb2ZpbGVyKFByb2ZpbGVyRXZlbnQuTGlmZWN5Y2xlSG9va1N0YXJ0LCBjb250ZXh0LCB0b0NhbGwpO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0b0NhbGwuY2FsbChjb250ZXh0KTtcbiAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgcHJvZmlsZXIoUHJvZmlsZXJFdmVudC5MaWZlY3ljbGVIb29rRW5kLCBjb250ZXh0LCB0b0NhbGwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gZ2V0UGFyZW50UkVsZW1lbnQodFZpZXcsIHROb2RlLCBsVmlldykge1xuICByZXR1cm4gZ2V0Q2xvc2VzdFJFbGVtZW50KHRWaWV3LCB0Tm9kZS5wYXJlbnQsIGxWaWV3KTtcbn1cbmZ1bmN0aW9uIGdldENsb3Nlc3RSRWxlbWVudCh0VmlldywgdE5vZGUsIGxWaWV3KSB7XG4gIGxldCBwYXJlbnRUTm9kZSA9IHROb2RlO1xuICB3aGlsZSAocGFyZW50VE5vZGUgIT09IG51bGwgJiYgcGFyZW50VE5vZGUudHlwZSAmICg4IHwgMzIgfCAxMjgpKSB7XG4gICAgdE5vZGUgPSBwYXJlbnRUTm9kZTtcbiAgICBwYXJlbnRUTm9kZSA9IHROb2RlLnBhcmVudDtcbiAgfVxuICBpZiAocGFyZW50VE5vZGUgPT09IG51bGwpIHtcbiAgICByZXR1cm4gbFZpZXdbSE9TVF07XG4gIH0gZWxzZSB7XG4gICAgbmdEZXZNb2RlICYmIGFzc2VydFROb2RlVHlwZShwYXJlbnRUTm9kZSwgMyB8IDQpO1xuICAgIGlmIChpc0NvbXBvbmVudEhvc3QocGFyZW50VE5vZGUpKSB7XG4gICAgICBuZ0Rldk1vZGUgJiYgYXNzZXJ0VE5vZGVGb3JMVmlldyhwYXJlbnRUTm9kZSwgbFZpZXcpO1xuICAgICAgY29uc3Qge1xuICAgICAgICBlbmNhcHN1bGF0aW9uXG4gICAgICB9ID0gdFZpZXcuZGF0YVtwYXJlbnRUTm9kZS5kaXJlY3RpdmVTdGFydCArIHBhcmVudFROb2RlLmNvbXBvbmVudE9mZnNldF07XG4gICAgICBpZiAoZW5jYXBzdWxhdGlvbiA9PT0gVmlld0VuY2Fwc3VsYXRpb24uTm9uZSB8fCBlbmNhcHN1bGF0aW9uID09PSBWaWV3RW5jYXBzdWxhdGlvbi5FbXVsYXRlZCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGdldE5hdGl2ZUJ5VE5vZGUocGFyZW50VE5vZGUsIGxWaWV3KTtcbiAgfVxufVxuZnVuY3Rpb24gZ2V0SW5zZXJ0SW5Gcm9udE9mUk5vZGUocGFyZW50VE5vZGUsIGN1cnJlbnRUTm9kZSwgbFZpZXcpIHtcbiAgcmV0dXJuIF9nZXRJbnNlcnRJbkZyb250T2ZSTm9kZVdpdGhJMThuKHBhcmVudFROb2RlLCBjdXJyZW50VE5vZGUsIGxWaWV3KTtcbn1cbmZ1bmN0aW9uIGdldEluc2VydEluRnJvbnRPZlJOb2RlV2l0aE5vSTE4bihwYXJlbnRUTm9kZSwgY3VycmVudFROb2RlLCBsVmlldykge1xuICBpZiAocGFyZW50VE5vZGUudHlwZSAmICg4IHwgMzIpKSB7XG4gICAgcmV0dXJuIGdldE5hdGl2ZUJ5VE5vZGUocGFyZW50VE5vZGUsIGxWaWV3KTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cbmxldCBfZ2V0SW5zZXJ0SW5Gcm9udE9mUk5vZGVXaXRoSTE4biA9IGdldEluc2VydEluRnJvbnRPZlJOb2RlV2l0aE5vSTE4bjtcbmxldCBfcHJvY2Vzc0kxOG5JbnNlcnRCZWZvcmU7XG5mdW5jdGlvbiBzZXRJMThuSGFuZGxpbmcoZ2V0SW5zZXJ0SW5Gcm9udE9mUk5vZGVXaXRoSTE4biwgcHJvY2Vzc0kxOG5JbnNlcnRCZWZvcmUpIHtcbiAgX2dldEluc2VydEluRnJvbnRPZlJOb2RlV2l0aEkxOG4gPSBnZXRJbnNlcnRJbkZyb250T2ZSTm9kZVdpdGhJMThuO1xuICBfcHJvY2Vzc0kxOG5JbnNlcnRCZWZvcmUgPSBwcm9jZXNzSTE4bkluc2VydEJlZm9yZTtcbn1cbmZ1bmN0aW9uIGFwcGVuZENoaWxkKHRWaWV3LCBsVmlldywgY2hpbGRSTm9kZSwgY2hpbGRUTm9kZSkge1xuICBjb25zdCBwYXJlbnRSTm9kZSA9IGdldFBhcmVudFJFbGVtZW50KHRWaWV3LCBjaGlsZFROb2RlLCBsVmlldyk7XG4gIGNvbnN0IHJlbmRlcmVyID0gbFZpZXdbUkVOREVSRVJdO1xuICBjb25zdCBwYXJlbnRUTm9kZSA9IGNoaWxkVE5vZGUucGFyZW50IHx8IGxWaWV3W1RfSE9TVF07XG4gIGNvbnN0IGFuY2hvck5vZGUgPSBnZXRJbnNlcnRJbkZyb250T2ZSTm9kZShwYXJlbnRUTm9kZSwgY2hpbGRUTm9kZSwgbFZpZXcpO1xuICBpZiAocGFyZW50Uk5vZGUgIT0gbnVsbCkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGNoaWxkUk5vZGUpKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNoaWxkUk5vZGUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbmF0aXZlQXBwZW5kT3JJbnNlcnRCZWZvcmUocmVuZGVyZXIsIHBhcmVudFJOb2RlLCBjaGlsZFJOb2RlW2ldLCBhbmNob3JOb2RlLCBmYWxzZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG5hdGl2ZUFwcGVuZE9ySW5zZXJ0QmVmb3JlKHJlbmRlcmVyLCBwYXJlbnRSTm9kZSwgY2hpbGRSTm9kZSwgYW5jaG9yTm9kZSwgZmFsc2UpO1xuICAgIH1cbiAgfVxuICBfcHJvY2Vzc0kxOG5JbnNlcnRCZWZvcmUgIT09IHVuZGVmaW5lZCAmJiBfcHJvY2Vzc0kxOG5JbnNlcnRCZWZvcmUocmVuZGVyZXIsIGNoaWxkVE5vZGUsIGxWaWV3LCBjaGlsZFJOb2RlLCBwYXJlbnRSTm9kZSk7XG59XG5mdW5jdGlvbiBnZXRGaXJzdE5hdGl2ZU5vZGUobFZpZXcsIHROb2RlKSB7XG4gIGlmICh0Tm9kZSAhPT0gbnVsbCkge1xuICAgIG5nRGV2TW9kZSAmJiBhc3NlcnRUTm9kZVR5cGUodE5vZGUsIDMgfCAxMiB8IDMyIHwgMTYgfCAxMjgpO1xuICAgIGNvbnN0IHROb2RlVHlwZSA9IHROb2RlLnR5cGU7XG4gICAgaWYgKHROb2RlVHlwZSAmIDMpIHtcbiAgICAgIHJldHVybiBnZXROYXRpdmVCeVROb2RlKHROb2RlLCBsVmlldyk7XG4gICAgfSBlbHNlIGlmICh0Tm9kZVR5cGUgJiA0KSB7XG4gICAgICByZXR1cm4gZ2V0QmVmb3JlTm9kZUZvclZpZXcoLTEsIGxWaWV3W3ROb2RlLmluZGV4XSk7XG4gICAgfSBlbHNlIGlmICh0Tm9kZVR5cGUgJiA4KSB7XG4gICAgICBjb25zdCBlbEljdUNvbnRhaW5lckNoaWxkID0gdE5vZGUuY2hpbGQ7XG4gICAgICBpZiAoZWxJY3VDb250YWluZXJDaGlsZCAhPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gZ2V0Rmlyc3ROYXRpdmVOb2RlKGxWaWV3LCBlbEljdUNvbnRhaW5lckNoaWxkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHJOb2RlT3JMQ29udGFpbmVyID0gbFZpZXdbdE5vZGUuaW5kZXhdO1xuICAgICAgICBpZiAoaXNMQ29udGFpbmVyKHJOb2RlT3JMQ29udGFpbmVyKSkge1xuICAgICAgICAgIHJldHVybiBnZXRCZWZvcmVOb2RlRm9yVmlldygtMSwgck5vZGVPckxDb250YWluZXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB1bndyYXBSTm9kZShyTm9kZU9yTENvbnRhaW5lcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHROb2RlVHlwZSAmIDEyOCkge1xuICAgICAgcmV0dXJuIGdldEZpcnN0TmF0aXZlTm9kZShsVmlldywgdE5vZGUubmV4dCk7XG4gICAgfSBlbHNlIGlmICh0Tm9kZVR5cGUgJiAzMikge1xuICAgICAgbGV0IG5leHRSTm9kZSA9IGljdUNvbnRhaW5lckl0ZXJhdGUodE5vZGUsIGxWaWV3KTtcbiAgICAgIGxldCByTm9kZSA9IG5leHRSTm9kZSgpO1xuICAgICAgcmV0dXJuIHJOb2RlIHx8IHVud3JhcFJOb2RlKGxWaWV3W3ROb2RlLmluZGV4XSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHByb2plY3Rpb25Ob2RlcyA9IGdldFByb2plY3Rpb25Ob2RlcyhsVmlldywgdE5vZGUpO1xuICAgICAgaWYgKHByb2plY3Rpb25Ob2RlcyAhPT0gbnVsbCkge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShwcm9qZWN0aW9uTm9kZXMpKSB7XG4gICAgICAgICAgcmV0dXJuIHByb2plY3Rpb25Ob2Rlc1swXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYXJlbnRWaWV3ID0gZ2V0TFZpZXdQYXJlbnQobFZpZXdbREVDTEFSQVRJT05fQ09NUE9ORU5UX1ZJRVddKTtcbiAgICAgICAgbmdEZXZNb2RlICYmIGFzc2VydFBhcmVudFZpZXcocGFyZW50Vmlldyk7XG4gICAgICAgIHJldHVybiBnZXRGaXJzdE5hdGl2ZU5vZGUocGFyZW50VmlldywgcHJvamVjdGlvbk5vZGVzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBnZXRGaXJzdE5hdGl2ZU5vZGUobFZpZXcsIHROb2RlLm5leHQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIGdldFByb2plY3Rpb25Ob2RlcyhsVmlldywgdE5vZGUpIHtcbiAgaWYgKHROb2RlICE9PSBudWxsKSB7XG4gICAgY29uc3QgY29tcG9uZW50VmlldyA9IGxWaWV3W0RFQ0xBUkFUSU9OX0NPTVBPTkVOVF9WSUVXXTtcbiAgICBjb25zdCBjb21wb25lbnRIb3N0ID0gY29tcG9uZW50Vmlld1tUX0hPU1RdO1xuICAgIGNvbnN0IHNsb3RJZHggPSB0Tm9kZS5wcm9qZWN0aW9uO1xuICAgIG5nRGV2TW9kZSAmJiBhc3NlcnRQcm9qZWN0aW9uU2xvdHMobFZpZXcpO1xuICAgIHJldHVybiBjb21wb25lbnRIb3N0LnByb2plY3Rpb25bc2xvdElkeF07XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5mdW5jdGlvbiBnZXRCZWZvcmVOb2RlRm9yVmlldyh2aWV3SW5kZXhJbkNvbnRhaW5lciwgbENvbnRhaW5lcikge1xuICBjb25zdCBuZXh0Vmlld0luZGV4ID0gQ09OVEFJTkVSX0hFQURFUl9PRkZTRVQgKyB2aWV3SW5kZXhJbkNvbnRhaW5lciArIDE7XG4gIGlmIChuZXh0Vmlld0luZGV4IDwgbENvbnRhaW5lci5sZW5ndGgpIHtcbiAgICBjb25zdCBsVmlldyA9IGxDb250YWluZXJbbmV4dFZpZXdJbmRleF07XG4gICAgY29uc3QgZmlyc3RUTm9kZU9mVmlldyA9IGxWaWV3W1RWSUVXXS5maXJzdENoaWxkO1xuICAgIGlmIChmaXJzdFROb2RlT2ZWaWV3ICE9PSBudWxsKSB7XG4gICAgICByZXR1cm4gZ2V0Rmlyc3ROYXRpdmVOb2RlKGxWaWV3LCBmaXJzdFROb2RlT2ZWaWV3KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGxDb250YWluZXJbTkFUSVZFXTtcbn1cbmZ1bmN0aW9uIGFwcGx5Tm9kZXMocmVuZGVyZXIsIGFjdGlvbiwgdE5vZGUsIGxWaWV3LCBwYXJlbnRSRWxlbWVudCwgYmVmb3JlTm9kZSwgaXNQcm9qZWN0aW9uKSB7XG4gIHdoaWxlICh0Tm9kZSAhPSBudWxsKSB7XG4gICAgbmdEZXZNb2RlICYmIGFzc2VydFROb2RlRm9yTFZpZXcodE5vZGUsIGxWaWV3KTtcbiAgICBjb25zdCBpbmplY3RvciA9IGxWaWV3W0lOSkVDVE9SXTtcbiAgICBpZiAodE5vZGUudHlwZSA9PT0gMTI4KSB7XG4gICAgICB0Tm9kZSA9IHROb2RlLm5leHQ7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgbmdEZXZNb2RlICYmIGFzc2VydFROb2RlVHlwZSh0Tm9kZSwgMyB8IDEyIHwgMTYgfCAzMik7XG4gICAgY29uc3QgcmF3U2xvdFZhbHVlID0gbFZpZXdbdE5vZGUuaW5kZXhdO1xuICAgIGNvbnN0IHROb2RlVHlwZSA9IHROb2RlLnR5cGU7XG4gICAgaWYgKGlzUHJvamVjdGlvbikge1xuICAgICAgaWYgKGFjdGlvbiA9PT0gMCkge1xuICAgICAgICByYXdTbG90VmFsdWUgJiYgYXR0YWNoUGF0Y2hEYXRhKHVud3JhcFJOb2RlKHJhd1Nsb3RWYWx1ZSksIGxWaWV3KTtcbiAgICAgICAgdE5vZGUuZmxhZ3MgfD0gMjtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCFpc0RldGFjaGVkQnlJMThuKHROb2RlKSkge1xuICAgICAgaWYgKHROb2RlVHlwZSAmIDgpIHtcbiAgICAgICAgYXBwbHlOb2RlcyhyZW5kZXJlciwgYWN0aW9uLCB0Tm9kZS5jaGlsZCwgbFZpZXcsIHBhcmVudFJFbGVtZW50LCBiZWZvcmVOb2RlLCBmYWxzZSk7XG4gICAgICAgIGFwcGx5VG9FbGVtZW50T3JDb250YWluZXIoYWN0aW9uLCByZW5kZXJlciwgaW5qZWN0b3IsIHBhcmVudFJFbGVtZW50LCByYXdTbG90VmFsdWUsIHROb2RlLCBiZWZvcmVOb2RlLCBsVmlldyk7XG4gICAgICB9IGVsc2UgaWYgKHROb2RlVHlwZSAmIDMyKSB7XG4gICAgICAgIGNvbnN0IG5leHRSTm9kZSA9IGljdUNvbnRhaW5lckl0ZXJhdGUodE5vZGUsIGxWaWV3KTtcbiAgICAgICAgbGV0IHJOb2RlO1xuICAgICAgICB3aGlsZSAock5vZGUgPSBuZXh0Uk5vZGUoKSkge1xuICAgICAgICAgIGFwcGx5VG9FbGVtZW50T3JDb250YWluZXIoYWN0aW9uLCByZW5kZXJlciwgaW5qZWN0b3IsIHBhcmVudFJFbGVtZW50LCByTm9kZSwgdE5vZGUsIGJlZm9yZU5vZGUsIGxWaWV3KTtcbiAgICAgICAgfVxuICAgICAgICBhcHBseVRvRWxlbWVudE9yQ29udGFpbmVyKGFjdGlvbiwgcmVuZGVyZXIsIGluamVjdG9yLCBwYXJlbnRSRWxlbWVudCwgcmF3U2xvdFZhbHVlLCB0Tm9kZSwgYmVmb3JlTm9kZSwgbFZpZXcpO1xuICAgICAgfSBlbHNlIGlmICh0Tm9kZVR5cGUgJiAxNikge1xuICAgICAgICBhcHBseVByb2plY3Rpb25SZWN1cnNpdmUocmVuZGVyZXIsIGFjdGlvbiwgbFZpZXcsIHROb2RlLCBwYXJlbnRSRWxlbWVudCwgYmVmb3JlTm9kZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZ0Rldk1vZGUgJiYgYXNzZXJ0VE5vZGVUeXBlKHROb2RlLCAzIHwgNCk7XG4gICAgICAgIGFwcGx5VG9FbGVtZW50T3JDb250YWluZXIoYWN0aW9uLCByZW5kZXJlciwgaW5qZWN0b3IsIHBhcmVudFJFbGVtZW50LCByYXdTbG90VmFsdWUsIHROb2RlLCBiZWZvcmVOb2RlLCBsVmlldyk7XG4gICAgICB9XG4gICAgfVxuICAgIHROb2RlID0gaXNQcm9qZWN0aW9uID8gdE5vZGUucHJvamVjdGlvbk5leHQgOiB0Tm9kZS5uZXh0O1xuICB9XG59XG5mdW5jdGlvbiBhcHBseVZpZXcodFZpZXcsIGxWaWV3LCByZW5kZXJlciwgYWN0aW9uLCBwYXJlbnRSRWxlbWVudCwgYmVmb3JlTm9kZSkge1xuICBhcHBseU5vZGVzKHJlbmRlcmVyLCBhY3Rpb24sIHRWaWV3LmZpcnN0Q2hpbGQsIGxWaWV3LCBwYXJlbnRSRWxlbWVudCwgYmVmb3JlTm9kZSwgZmFsc2UpO1xufVxuZnVuY3Rpb24gYXBwbHlQcm9qZWN0aW9uKHRWaWV3LCBsVmlldywgdFByb2plY3Rpb25Ob2RlKSB7XG4gIGNvbnN0IHJlbmRlcmVyID0gbFZpZXdbUkVOREVSRVJdO1xuICBjb25zdCBwYXJlbnRSTm9kZSA9IGdldFBhcmVudFJFbGVtZW50KHRWaWV3LCB0UHJvamVjdGlvbk5vZGUsIGxWaWV3KTtcbiAgY29uc3QgcGFyZW50VE5vZGUgPSB0UHJvamVjdGlvbk5vZGUucGFyZW50IHx8IGxWaWV3W1RfSE9TVF07XG4gIGxldCBiZWZvcmVOb2RlID0gZ2V0SW5zZXJ0SW5Gcm9udE9mUk5vZGUocGFyZW50VE5vZGUsIHRQcm9qZWN0aW9uTm9kZSwgbFZpZXcpO1xuICBhcHBseVByb2plY3Rpb25SZWN1cnNpdmUocmVuZGVyZXIsIDAsIGxWaWV3LCB0UHJvamVjdGlvbk5vZGUsIHBhcmVudFJOb2RlLCBiZWZvcmVOb2RlKTtcbn1cbmZ1bmN0aW9uIGFwcGx5UHJvamVjdGlvblJlY3Vyc2l2ZShyZW5kZXJlciwgYWN0aW9uLCBsVmlldywgdFByb2plY3Rpb25Ob2RlLCBwYXJlbnRSRWxlbWVudCwgYmVmb3JlTm9kZSkge1xuICBjb25zdCBjb21wb25lbnRMVmlldyA9IGxWaWV3W0RFQ0xBUkFUSU9OX0NPTVBPTkVOVF9WSUVXXTtcbiAgY29uc3QgY29tcG9uZW50Tm9kZSA9IGNvbXBvbmVudExWaWV3W1RfSE9TVF07XG4gIG5nRGV2TW9kZSAmJiBhc3NlcnRFcXVhbCh0eXBlb2YgdFByb2plY3Rpb25Ob2RlLnByb2plY3Rpb24sICdudW1iZXInLCAnZXhwZWN0aW5nIHByb2plY3Rpb24gaW5kZXgnKTtcbiAgY29uc3Qgbm9kZVRvUHJvamVjdE9yUk5vZGVzID0gY29tcG9uZW50Tm9kZS5wcm9qZWN0aW9uW3RQcm9qZWN0aW9uTm9kZS5wcm9qZWN0aW9uXTtcbiAgaWYgKEFycmF5LmlzQXJyYXkobm9kZVRvUHJvamVjdE9yUk5vZGVzKSkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZVRvUHJvamVjdE9yUk5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCByTm9kZSA9IG5vZGVUb1Byb2plY3RPclJOb2Rlc1tpXTtcbiAgICAgIGFwcGx5VG9FbGVtZW50T3JDb250YWluZXIoYWN0aW9uLCByZW5kZXJlciwgbFZpZXdbSU5KRUNUT1JdLCBwYXJlbnRSRWxlbWVudCwgck5vZGUsIHRQcm9qZWN0aW9uTm9kZSwgYmVmb3JlTm9kZSwgbFZpZXcpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBsZXQgbm9kZVRvUHJvamVjdCA9IG5vZGVUb1Byb2plY3RPclJOb2RlcztcbiAgICBjb25zdCBwcm9qZWN0ZWRDb21wb25lbnRMVmlldyA9IGNvbXBvbmVudExWaWV3W1BBUkVOVF07XG4gICAgaWYgKGhhc0luU2tpcEh5ZHJhdGlvbkJsb2NrRmxhZyh0UHJvamVjdGlvbk5vZGUpKSB7XG4gICAgICBub2RlVG9Qcm9qZWN0LmZsYWdzIHw9IDEyODtcbiAgICB9XG4gICAgYXBwbHlOb2RlcyhyZW5kZXJlciwgYWN0aW9uLCBub2RlVG9Qcm9qZWN0LCBwcm9qZWN0ZWRDb21wb25lbnRMVmlldywgcGFyZW50UkVsZW1lbnQsIGJlZm9yZU5vZGUsIHRydWUpO1xuICB9XG59XG5mdW5jdGlvbiBhcHBseUNvbnRhaW5lcihyZW5kZXJlciwgYWN0aW9uLCBpbmplY3RvciwgbENvbnRhaW5lciwgdE5vZGUsIHBhcmVudFJFbGVtZW50LCBiZWZvcmVOb2RlKSB7XG4gIG5nRGV2TW9kZSAmJiBhc3NlcnRMQ29udGFpbmVyKGxDb250YWluZXIpO1xuICBjb25zdCBhbmNob3IgPSBsQ29udGFpbmVyW05BVElWRV07XG4gIGNvbnN0IG5hdGl2ZSA9IHVud3JhcFJOb2RlKGxDb250YWluZXIpO1xuICBpZiAoYW5jaG9yICE9PSBuYXRpdmUpIHtcbiAgICBhcHBseVRvRWxlbWVudE9yQ29udGFpbmVyKGFjdGlvbiwgcmVuZGVyZXIsIGluamVjdG9yLCBwYXJlbnRSRWxlbWVudCwgYW5jaG9yLCB0Tm9kZSwgYmVmb3JlTm9kZSk7XG4gIH1cbiAgZm9yIChsZXQgaSA9IENPTlRBSU5FUl9IRUFERVJfT0ZGU0VUOyBpIDwgbENvbnRhaW5lci5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGxWaWV3ID0gbENvbnRhaW5lcltpXTtcbiAgICBhcHBseVZpZXcobFZpZXdbVFZJRVddLCBsVmlldywgcmVuZGVyZXIsIGFjdGlvbiwgcGFyZW50UkVsZW1lbnQsIGFuY2hvcik7XG4gIH1cbn1cbmZ1bmN0aW9uIGFwcGx5U3R5bGluZyhyZW5kZXJlciwgaXNDbGFzc0Jhc2VkLCByTm9kZSwgcHJvcCwgdmFsdWUpIHtcbiAgaWYgKGlzQ2xhc3NCYXNlZCkge1xuICAgIGlmICghdmFsdWUpIHtcbiAgICAgIHJlbmRlcmVyLnJlbW92ZUNsYXNzKHJOb2RlLCBwcm9wKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVuZGVyZXIuYWRkQ2xhc3Mock5vZGUsIHByb3ApO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBsZXQgZmxhZ3MgPSBwcm9wLmluZGV4T2YoJy0nKSA9PT0gLTEgPyB1bmRlZmluZWQgOiBSZW5kZXJlclN0eWxlRmxhZ3MyLkRhc2hDYXNlO1xuICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgICByZW5kZXJlci5yZW1vdmVTdHlsZShyTm9kZSwgcHJvcCwgZmxhZ3MpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBpc0ltcG9ydGFudCA9IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgPyB2YWx1ZS5lbmRzV2l0aCgnIWltcG9ydGFudCcpIDogZmFsc2U7XG4gICAgICBpZiAoaXNJbXBvcnRhbnQpIHtcbiAgICAgICAgdmFsdWUgPSB2YWx1ZS5zbGljZSgwLCAtMTApO1xuICAgICAgICBmbGFncyB8PSBSZW5kZXJlclN0eWxlRmxhZ3MyLkltcG9ydGFudDtcbiAgICAgIH1cbiAgICAgIHJlbmRlcmVyLnNldFN0eWxlKHJOb2RlLCBwcm9wLCB2YWx1ZSwgZmxhZ3MpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gZXhlY3V0ZVRlbXBsYXRlKHRWaWV3LCBsVmlldywgdGVtcGxhdGVGbiwgcmYsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJldlNlbGVjdGVkSW5kZXggPSBnZXRTZWxlY3RlZEluZGV4KCk7XG4gIGNvbnN0IGlzVXBkYXRlUGhhc2UgPSByZiAmIDI7XG4gIHRyeSB7XG4gICAgc2V0U2VsZWN0ZWRJbmRleCgtMSk7XG4gICAgaWYgKGlzVXBkYXRlUGhhc2UgJiYgbFZpZXcubGVuZ3RoID4gSEVBREVSX09GRlNFVCkge1xuICAgICAgc2VsZWN0SW5kZXhJbnRlcm5hbCh0VmlldywgbFZpZXcsIEhFQURFUl9PRkZTRVQsICEhbmdEZXZNb2RlICYmIGlzSW5DaGVja05vQ2hhbmdlc01vZGUoKSk7XG4gICAgfVxuICAgIGNvbnN0IHByZUhvb2tUeXBlID0gaXNVcGRhdGVQaGFzZSA/IFByb2ZpbGVyRXZlbnQuVGVtcGxhdGVVcGRhdGVTdGFydCA6IFByb2ZpbGVyRXZlbnQuVGVtcGxhdGVDcmVhdGVTdGFydDtcbiAgICBwcm9maWxlcihwcmVIb29rVHlwZSwgY29udGV4dCwgdGVtcGxhdGVGbik7XG4gICAgdGVtcGxhdGVGbihyZiwgY29udGV4dCk7XG4gIH0gZmluYWxseSB7XG4gICAgc2V0U2VsZWN0ZWRJbmRleChwcmV2U2VsZWN0ZWRJbmRleCk7XG4gICAgY29uc3QgcG9zdEhvb2tUeXBlID0gaXNVcGRhdGVQaGFzZSA/IFByb2ZpbGVyRXZlbnQuVGVtcGxhdGVVcGRhdGVFbmQgOiBQcm9maWxlckV2ZW50LlRlbXBsYXRlQ3JlYXRlRW5kO1xuICAgIHByb2ZpbGVyKHBvc3RIb29rVHlwZSwgY29udGV4dCwgdGVtcGxhdGVGbik7XG4gIH1cbn1cbmZ1bmN0aW9uIGNyZWF0ZURpcmVjdGl2ZXNJbnN0YW5jZXModFZpZXcsIGxWaWV3LCB0Tm9kZSkge1xuICBpbnN0YW50aWF0ZUFsbERpcmVjdGl2ZXModFZpZXcsIGxWaWV3LCB0Tm9kZSk7XG4gIGlmICgodE5vZGUuZmxhZ3MgJiA2NCkgPT09IDY0KSB7XG4gICAgaW52b2tlRGlyZWN0aXZlc0hvc3RCaW5kaW5ncyh0VmlldywgbFZpZXcsIHROb2RlKTtcbiAgfVxufVxuZnVuY3Rpb24gc2F2ZVJlc29sdmVkTG9jYWxzSW5EYXRhKHZpZXdEYXRhLCB0Tm9kZSwgbG9jYWxSZWZFeHRyYWN0b3IgPSBnZXROYXRpdmVCeVROb2RlKSB7XG4gIGNvbnN0IGxvY2FsTmFtZXMgPSB0Tm9kZS5sb2NhbE5hbWVzO1xuICBpZiAobG9jYWxOYW1lcyAhPT0gbnVsbCkge1xuICAgIGxldCBsb2NhbEluZGV4ID0gdE5vZGUuaW5kZXggKyAxO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbG9jYWxOYW1lcy5sZW5ndGg7IGkgKz0gMikge1xuICAgICAgY29uc3QgaW5kZXggPSBsb2NhbE5hbWVzW2kgKyAxXTtcbiAgICAgIGNvbnN0IHZhbHVlID0gaW5kZXggPT09IC0xID8gbG9jYWxSZWZFeHRyYWN0b3IodE5vZGUsIHZpZXdEYXRhKSA6IHZpZXdEYXRhW2luZGV4XTtcbiAgICAgIHZpZXdEYXRhW2xvY2FsSW5kZXgrK10gPSB2YWx1ZTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGxvY2F0ZUhvc3RFbGVtZW50KHJlbmRlcmVyLCBlbGVtZW50T3JTZWxlY3RvciwgZW5jYXBzdWxhdGlvbiwgaW5qZWN0b3IpIHtcbiAgY29uc3QgcHJlc2VydmVIb3N0Q29udGVudCA9IGluamVjdG9yLmdldChQUkVTRVJWRV9IT1NUX0NPTlRFTlQsIFBSRVNFUlZFX0hPU1RfQ09OVEVOVF9ERUZBVUxUKTtcbiAgY29uc3QgcHJlc2VydmVDb250ZW50ID0gcHJlc2VydmVIb3N0Q29udGVudCB8fCBlbmNhcHN1bGF0aW9uID09PSBWaWV3RW5jYXBzdWxhdGlvbi5TaGFkb3dEb20gfHwgZW5jYXBzdWxhdGlvbiA9PT0gVmlld0VuY2Fwc3VsYXRpb24uRXhwZXJpbWVudGFsSXNvbGF0ZWRTaGFkb3dEb207XG4gIGNvbnN0IHJvb3RFbGVtZW50ID0gcmVuZGVyZXIuc2VsZWN0Um9vdEVsZW1lbnQoZWxlbWVudE9yU2VsZWN0b3IsIHByZXNlcnZlQ29udGVudCk7XG4gIGFwcGx5Um9vdEVsZW1lbnRUcmFuc2Zvcm0ocm9vdEVsZW1lbnQpO1xuICByZXR1cm4gcm9vdEVsZW1lbnQ7XG59XG5mdW5jdGlvbiBhcHBseVJvb3RFbGVtZW50VHJhbnNmb3JtKHJvb3RFbGVtZW50KSB7XG4gIF9hcHBseVJvb3RFbGVtZW50VHJhbnNmb3JtSW1wbChyb290RWxlbWVudCk7XG59XG5sZXQgX2FwcGx5Um9vdEVsZW1lbnRUcmFuc2Zvcm1JbXBsID0gKCkgPT4gbnVsbDtcbmZ1bmN0aW9uIGFwcGx5Um9vdEVsZW1lbnRUcmFuc2Zvcm1JbXBsKHJvb3RFbGVtZW50KSB7XG4gIGlmIChoYXNTa2lwSHlkcmF0aW9uQXR0ck9uUkVsZW1lbnQocm9vdEVsZW1lbnQpKSB7XG4gICAgY2xlYXJFbGVtZW50Q29udGVudHMocm9vdEVsZW1lbnQpO1xuICB9IGVsc2Uge1xuICAgIHByb2Nlc3NUZXh0Tm9kZU1hcmtlcnNCZWZvcmVIeWRyYXRpb24ocm9vdEVsZW1lbnQpO1xuICB9XG59XG5mdW5jdGlvbiBlbmFibGVBcHBseVJvb3RFbGVtZW50VHJhbnNmb3JtSW1wbCgpIHtcbiAgX2FwcGx5Um9vdEVsZW1lbnRUcmFuc2Zvcm1JbXBsID0gYXBwbHlSb290RWxlbWVudFRyYW5zZm9ybUltcGw7XG59XG5mdW5jdGlvbiBtYXBQcm9wTmFtZShuYW1lKSB7XG4gIGlmIChuYW1lID09PSAnY2xhc3MnKSByZXR1cm4gJ2NsYXNzTmFtZSc7XG4gIGlmIChuYW1lID09PSAnZm9yJykgcmV0dXJuICdodG1sRm9yJztcbiAgaWYgKG5hbWUgPT09ICdmb3JtYWN0aW9uJykgcmV0dXJuICdmb3JtQWN0aW9uJztcbiAgaWYgKG5hbWUgPT09ICdpbm5lckh0bWwnKSByZXR1cm4gJ2lubmVySFRNTCc7XG4gIGlmIChuYW1lID09PSAncmVhZG9ubHknKSByZXR1cm4gJ3JlYWRPbmx5JztcbiAgaWYgKG5hbWUgPT09ICd0YWJpbmRleCcpIHJldHVybiAndGFiSW5kZXgnO1xuICByZXR1cm4gbmFtZTtcbn1cbmZ1bmN0aW9uIHNldFByb3BlcnR5QW5kSW5wdXRzKHROb2RlLCBsVmlldywgcHJvcE5hbWUsIHZhbHVlLCByZW5kZXJlciwgc2FuaXRpemVyKSB7XG4gIG5nRGV2TW9kZSAmJiBhc3NlcnROb3RTYW1lKHZhbHVlLCBOT19DSEFOR0UsICdJbmNvbWluZyB2YWx1ZSBzaG91bGQgbmV2ZXIgYmUgTk9fQ0hBTkdFLicpO1xuICBjb25zdCB0VmlldyA9IGxWaWV3W1RWSUVXXTtcbiAgY29uc3QgaGFzU2V0SW5wdXQgPSBzZXRBbGxJbnB1dHNGb3JQcm9wZXJ0eSh0Tm9kZSwgdFZpZXcsIGxWaWV3LCBwcm9wTmFtZSwgdmFsdWUpO1xuICBpZiAoaGFzU2V0SW5wdXQpIHtcbiAgICBpc0NvbXBvbmVudEhvc3QodE5vZGUpICYmIG1hcmtEaXJ0eUlmT25QdXNoKGxWaWV3LCB0Tm9kZS5pbmRleCk7XG4gICAgbmdEZXZNb2RlICYmIHNldE5nUmVmbGVjdFByb3BlcnRpZXMobFZpZXcsIHRWaWV3LCB0Tm9kZSwgcHJvcE5hbWUsIHZhbHVlKTtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKHROb2RlLnR5cGUgJiAzKSB7XG4gICAgcHJvcE5hbWUgPSBtYXBQcm9wTmFtZShwcm9wTmFtZSk7XG4gIH1cbiAgc2V0RG9tUHJvcGVydHkodE5vZGUsIGxWaWV3LCBwcm9wTmFtZSwgdmFsdWUsIHJlbmRlcmVyLCBzYW5pdGl6ZXIpO1xufVxuZnVuY3Rpb24gc2V0RG9tUHJvcGVydHkodE5vZGUsIGxWaWV3LCBwcm9wTmFtZSwgdmFsdWUsIHJlbmRlcmVyLCBzYW5pdGl6ZXIpIHtcbiAgaWYgKHROb2RlLnR5cGUgJiAzKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IGdldE5hdGl2ZUJ5VE5vZGUodE5vZGUsIGxWaWV3KTtcbiAgICBpZiAobmdEZXZNb2RlKSB7XG4gICAgICB2YWxpZGF0ZUFnYWluc3RFdmVudFByb3BlcnRpZXMocHJvcE5hbWUpO1xuICAgICAgaWYgKCFpc1Byb3BlcnR5VmFsaWQoZWxlbWVudCwgcHJvcE5hbWUsIHROb2RlLnZhbHVlLCBsVmlld1tUVklFV10uc2NoZW1hcykpIHtcbiAgICAgICAgaGFuZGxlVW5rbm93blByb3BlcnR5RXJyb3IocHJvcE5hbWUsIHROb2RlLnZhbHVlLCB0Tm9kZS50eXBlLCBsVmlldyk7XG4gICAgICB9XG4gICAgfVxuICAgIHZhbHVlID0gc2FuaXRpemVyICE9IG51bGwgPyBzYW5pdGl6ZXIodmFsdWUsIHROb2RlLnZhbHVlIHx8ICcnLCBwcm9wTmFtZSkgOiB2YWx1ZTtcbiAgICByZW5kZXJlci5zZXRQcm9wZXJ0eShlbGVtZW50LCBwcm9wTmFtZSwgdmFsdWUpO1xuICB9IGVsc2UgaWYgKHROb2RlLnR5cGUgJiAxMikge1xuICAgIGlmIChuZ0Rldk1vZGUgJiYgIW1hdGNoaW5nU2NoZW1hcyhsVmlld1tUVklFV10uc2NoZW1hcywgdE5vZGUudmFsdWUpKSB7XG4gICAgICBoYW5kbGVVbmtub3duUHJvcGVydHlFcnJvcihwcm9wTmFtZSwgdE5vZGUudmFsdWUsIHROb2RlLnR5cGUsIGxWaWV3KTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIG1hcmtEaXJ0eUlmT25QdXNoKGxWaWV3LCB2aWV3SW5kZXgpIHtcbiAgbmdEZXZNb2RlICYmIGFzc2VydExWaWV3KGxWaWV3KTtcbiAgY29uc3QgY2hpbGRDb21wb25lbnRMVmlldyA9IGdldENvbXBvbmVudExWaWV3QnlJbmRleCh2aWV3SW5kZXgsIGxWaWV3KTtcbiAgaWYgKCEoY2hpbGRDb21wb25lbnRMVmlld1tGTEFHU10gJiAxNikpIHtcbiAgICBjaGlsZENvbXBvbmVudExWaWV3W0ZMQUdTXSB8PSA2NDtcbiAgfVxufVxuZnVuY3Rpb24gc2V0TmdSZWZsZWN0UHJvcGVydHkobFZpZXcsIHROb2RlLCBhdHRyTmFtZSwgdmFsdWUpIHtcbiAgY29uc3QgZW52aXJvbm1lbnQgPSBsVmlld1tFTlZJUk9OTUVOVF07XG4gIGlmICghZW52aXJvbm1lbnQubmdSZWZsZWN0KSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IGVsZW1lbnQgPSBnZXROYXRpdmVCeVROb2RlKHROb2RlLCBsVmlldyk7XG4gIGNvbnN0IHJlbmRlcmVyID0gbFZpZXdbUkVOREVSRVJdO1xuICBhdHRyTmFtZSA9IG5vcm1hbGl6ZURlYnVnQmluZGluZ05hbWUoYXR0ck5hbWUpO1xuICBjb25zdCBkZWJ1Z1ZhbHVlID0gbm9ybWFsaXplRGVidWdCaW5kaW5nVmFsdWUodmFsdWUpO1xuICBpZiAodE5vZGUudHlwZSAmIDMpIHtcbiAgICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgICAgcmVuZGVyZXIucmVtb3ZlQXR0cmlidXRlKGVsZW1lbnQsIGF0dHJOYW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVuZGVyZXIuc2V0QXR0cmlidXRlKGVsZW1lbnQsIGF0dHJOYW1lLCBkZWJ1Z1ZhbHVlKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgdGV4dENvbnRlbnQgPSBlc2NhcGVDb21tZW50VGV4dChgYmluZGluZ3M9JHtKU09OLnN0cmluZ2lmeSh7XG4gICAgICBbYXR0ck5hbWVdOiBkZWJ1Z1ZhbHVlXG4gICAgfSwgbnVsbCwgMil9YCk7XG4gICAgcmVuZGVyZXIuc2V0VmFsdWUoZWxlbWVudCwgdGV4dENvbnRlbnQpO1xuICB9XG59XG5mdW5jdGlvbiBzZXROZ1JlZmxlY3RQcm9wZXJ0aWVzKGxWaWV3LCB0VmlldywgdE5vZGUsIHB1YmxpY05hbWUsIHZhbHVlKSB7XG4gIGNvbnN0IGVudmlyb25tZW50ID0gbFZpZXdbRU5WSVJPTk1FTlRdO1xuICBpZiAoIWVudmlyb25tZW50Lm5nUmVmbGVjdCB8fCAhKHROb2RlLnR5cGUgJiAoMyB8IDQpKSkge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBpbnB1dENvbmZpZyA9IHROb2RlLmlucHV0cz8uW3B1YmxpY05hbWVdO1xuICBjb25zdCBob3N0SW5wdXRDb25maWcgPSB0Tm9kZS5ob3N0RGlyZWN0aXZlSW5wdXRzPy5bcHVibGljTmFtZV07XG4gIGlmIChob3N0SW5wdXRDb25maWcpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGhvc3RJbnB1dENvbmZpZy5sZW5ndGg7IGkgKz0gMikge1xuICAgICAgY29uc3QgaW5kZXggPSBob3N0SW5wdXRDb25maWdbaV07XG4gICAgICBjb25zdCBwdWJsaWNOYW1lID0gaG9zdElucHV0Q29uZmlnW2kgKyAxXTtcbiAgICAgIGNvbnN0IGRlZiA9IHRWaWV3LmRhdGFbaW5kZXhdO1xuICAgICAgc2V0TmdSZWZsZWN0UHJvcGVydHkobFZpZXcsIHROb2RlLCBkZWYuaW5wdXRzW3B1YmxpY05hbWVdWzBdLCB2YWx1ZSk7XG4gICAgfVxuICB9XG4gIGlmIChpbnB1dENvbmZpZykge1xuICAgIGZvciAoY29uc3QgaW5kZXggb2YgaW5wdXRDb25maWcpIHtcbiAgICAgIGNvbnN0IGRlZiA9IHRWaWV3LmRhdGFbaW5kZXhdO1xuICAgICAgc2V0TmdSZWZsZWN0UHJvcGVydHkobFZpZXcsIHROb2RlLCBkZWYuaW5wdXRzW3B1YmxpY05hbWVdWzBdLCB2YWx1ZSk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBpbnN0YW50aWF0ZUFsbERpcmVjdGl2ZXModFZpZXcsIGxWaWV3LCB0Tm9kZSkge1xuICBjb25zdCBzdGFydCA9IHROb2RlLmRpcmVjdGl2ZVN0YXJ0O1xuICBjb25zdCBlbmQgPSB0Tm9kZS5kaXJlY3RpdmVFbmQ7XG4gIGlmIChpc0NvbXBvbmVudEhvc3QodE5vZGUpKSB7XG4gICAgbmdEZXZNb2RlICYmIGFzc2VydFROb2RlVHlwZSh0Tm9kZSwgMyk7XG4gICAgY3JlYXRlQ29tcG9uZW50TFZpZXcobFZpZXcsIHROb2RlLCB0Vmlldy5kYXRhW3N0YXJ0ICsgdE5vZGUuY29tcG9uZW50T2Zmc2V0XSk7XG4gIH1cbiAgaWYgKCF0Vmlldy5maXJzdENyZWF0ZVBhc3MpIHtcbiAgICBnZXRPckNyZWF0ZU5vZGVJbmplY3RvckZvck5vZGUodE5vZGUsIGxWaWV3KTtcbiAgfVxuICBjb25zdCBpbml0aWFsSW5wdXRzID0gdE5vZGUuaW5pdGlhbElucHV0cztcbiAgZm9yIChsZXQgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHtcbiAgICBjb25zdCBkZWYgPSB0Vmlldy5kYXRhW2ldO1xuICAgIGNvbnN0IGRpcmVjdGl2ZSA9IGdldE5vZGVJbmplY3RhYmxlKGxWaWV3LCB0VmlldywgaSwgdE5vZGUpO1xuICAgIGF0dGFjaFBhdGNoRGF0YShkaXJlY3RpdmUsIGxWaWV3KTtcbiAgICBpZiAoaW5pdGlhbElucHV0cyAhPT0gbnVsbCkge1xuICAgICAgc2V0SW5wdXRzRnJvbUF0dHJzKGxWaWV3LCBpIC0gc3RhcnQsIGRpcmVjdGl2ZSwgZGVmLCB0Tm9kZSwgaW5pdGlhbElucHV0cyk7XG4gICAgfVxuICAgIGlmIChpc0NvbXBvbmVudERlZihkZWYpKSB7XG4gICAgICBjb25zdCBjb21wb25lbnRWaWV3ID0gZ2V0Q29tcG9uZW50TFZpZXdCeUluZGV4KHROb2RlLmluZGV4LCBsVmlldyk7XG4gICAgICBjb21wb25lbnRWaWV3W0NPTlRFWFRdID0gZ2V0Tm9kZUluamVjdGFibGUobFZpZXcsIHRWaWV3LCBpLCB0Tm9kZSk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBpbnZva2VEaXJlY3RpdmVzSG9zdEJpbmRpbmdzKHRWaWV3LCBsVmlldywgdE5vZGUpIHtcbiAgY29uc3Qgc3RhcnQgPSB0Tm9kZS5kaXJlY3RpdmVTdGFydDtcbiAgY29uc3QgZW5kID0gdE5vZGUuZGlyZWN0aXZlRW5kO1xuICBjb25zdCBlbGVtZW50SW5kZXggPSB0Tm9kZS5pbmRleDtcbiAgY29uc3QgY3VycmVudERpcmVjdGl2ZUluZGV4ID0gZ2V0Q3VycmVudERpcmVjdGl2ZUluZGV4KCk7XG4gIHRyeSB7XG4gICAgc2V0U2VsZWN0ZWRJbmRleChlbGVtZW50SW5kZXgpO1xuICAgIGZvciAobGV0IGRpckluZGV4ID0gc3RhcnQ7IGRpckluZGV4IDwgZW5kOyBkaXJJbmRleCsrKSB7XG4gICAgICBjb25zdCBkZWYgPSB0Vmlldy5kYXRhW2RpckluZGV4XTtcbiAgICAgIGNvbnN0IGRpcmVjdGl2ZSA9IGxWaWV3W2RpckluZGV4XTtcbiAgICAgIHNldEN1cnJlbnREaXJlY3RpdmVJbmRleChkaXJJbmRleCk7XG4gICAgICBpZiAoZGVmLmhvc3RCaW5kaW5ncyAhPT0gbnVsbCB8fCBkZWYuaG9zdFZhcnMgIT09IDAgfHwgZGVmLmhvc3RBdHRycyAhPT0gbnVsbCkge1xuICAgICAgICBpbnZva2VIb3N0QmluZGluZ3NJbkNyZWF0aW9uTW9kZShkZWYsIGRpcmVjdGl2ZSk7XG4gICAgICB9XG4gICAgfVxuICB9IGZpbmFsbHkge1xuICAgIHNldFNlbGVjdGVkSW5kZXgoLTEpO1xuICAgIHNldEN1cnJlbnREaXJlY3RpdmVJbmRleChjdXJyZW50RGlyZWN0aXZlSW5kZXgpO1xuICB9XG59XG5mdW5jdGlvbiBpbnZva2VIb3N0QmluZGluZ3NJbkNyZWF0aW9uTW9kZShkZWYsIGRpcmVjdGl2ZSkge1xuICBpZiAoZGVmLmhvc3RCaW5kaW5ncyAhPT0gbnVsbCkge1xuICAgIGRlZi5ob3N0QmluZGluZ3MoMSwgZGlyZWN0aXZlKTtcbiAgfVxufVxuZnVuY3Rpb24gZmluZERpcmVjdGl2ZURlZk1hdGNoZXModFZpZXcsIHROb2RlKSB7XG4gIG5nRGV2TW9kZSAmJiBhc3NlcnRGaXJzdENyZWF0ZVBhc3ModFZpZXcpO1xuICBuZ0Rldk1vZGUgJiYgYXNzZXJ0VE5vZGVUeXBlKHROb2RlLCAzIHwgMTIpO1xuICBjb25zdCByZWdpc3RyeSA9IHRWaWV3LmRpcmVjdGl2ZVJlZ2lzdHJ5O1xuICBsZXQgbWF0Y2hlcyA9IG51bGw7XG4gIGlmIChyZWdpc3RyeSkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVnaXN0cnkubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGRlZiA9IHJlZ2lzdHJ5W2ldO1xuICAgICAgaWYgKGlzTm9kZU1hdGNoaW5nU2VsZWN0b3JMaXN0KHROb2RlLCBkZWYuc2VsZWN0b3JzLCBmYWxzZSkpIHtcbiAgICAgICAgbWF0Y2hlcyA/Pz0gW107XG4gICAgICAgIGlmIChpc0NvbXBvbmVudERlZihkZWYpKSB7XG4gICAgICAgICAgaWYgKG5nRGV2TW9kZSkge1xuICAgICAgICAgICAgYXNzZXJ0VE5vZGVUeXBlKHROb2RlLCAyLCBgXCIke3ROb2RlLnZhbHVlfVwiIHRhZ3MgY2Fubm90IGJlIHVzZWQgYXMgY29tcG9uZW50IGhvc3RzLiBgICsgYFBsZWFzZSB1c2UgYSBkaWZmZXJlbnQgdGFnIHRvIGFjdGl2YXRlIHRoZSAke3N0cmluZ2lmeShkZWYudHlwZSl9IGNvbXBvbmVudC5gKTtcbiAgICAgICAgICAgIGlmIChtYXRjaGVzLmxlbmd0aCAmJiBpc0NvbXBvbmVudERlZihtYXRjaGVzWzBdKSkge1xuICAgICAgICAgICAgICB0aHJvd011bHRpcGxlQ29tcG9uZW50RXJyb3IodE5vZGUsIG1hdGNoZXMuZmluZChpc0NvbXBvbmVudERlZikudHlwZSwgZGVmLnR5cGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBtYXRjaGVzLnVuc2hpZnQoZGVmKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBtYXRjaGVzLnB1c2goZGVmKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gbWF0Y2hlcztcbn1cbmZ1bmN0aW9uIGVsZW1lbnRBdHRyaWJ1dGVJbnRlcm5hbCh0Tm9kZSwgbFZpZXcsIG5hbWUsIHZhbHVlLCBzYW5pdGl6ZXIsIG5hbWVzcGFjZSkge1xuICBpZiAobmdEZXZNb2RlKSB7XG4gICAgYXNzZXJ0Tm90U2FtZSh2YWx1ZSwgTk9fQ0hBTkdFLCAnSW5jb21pbmcgdmFsdWUgc2hvdWxkIG5ldmVyIGJlIE5PX0NIQU5HRS4nKTtcbiAgICB2YWxpZGF0ZUFnYWluc3RFdmVudEF0dHJpYnV0ZXMobmFtZSk7XG4gICAgYXNzZXJ0VE5vZGVUeXBlKHROb2RlLCAyLCBgQXR0ZW1wdGVkIHRvIHNldCBhdHRyaWJ1dGUgXFxgJHtuYW1lfVxcYCBvbiBhIGNvbnRhaW5lciBub2RlLiBgICsgYEhvc3QgYmluZGluZ3MgYXJlIG5vdCB2YWxpZCBvbiBuZy1jb250YWluZXIgb3IgbmctdGVtcGxhdGUuYCk7XG4gIH1cbiAgY29uc3QgZWxlbWVudCA9IGdldE5hdGl2ZUJ5VE5vZGUodE5vZGUsIGxWaWV3KTtcbiAgc2V0RWxlbWVudEF0dHJpYnV0ZShsVmlld1tSRU5ERVJFUl0sIGVsZW1lbnQsIG5hbWVzcGFjZSwgdE5vZGUudmFsdWUsIG5hbWUsIHZhbHVlLCBzYW5pdGl6ZXIpO1xufVxuZnVuY3Rpb24gc2V0RWxlbWVudEF0dHJpYnV0ZShyZW5kZXJlciwgZWxlbWVudCwgbmFtZXNwYWNlLCB0YWdOYW1lLCBuYW1lLCB2YWx1ZSwgc2FuaXRpemVyKSB7XG4gIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgcmVuZGVyZXIucmVtb3ZlQXR0cmlidXRlKGVsZW1lbnQsIG5hbWUsIG5hbWVzcGFjZSk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3Qgc3RyVmFsdWUgPSBzYW5pdGl6ZXIgPT0gbnVsbCA/IHJlbmRlclN0cmluZ2lmeSh2YWx1ZSkgOiBzYW5pdGl6ZXIodmFsdWUsIHRhZ05hbWUgfHwgJycsIG5hbWUpO1xuICAgIHJlbmRlcmVyLnNldEF0dHJpYnV0ZShlbGVtZW50LCBuYW1lLCBzdHJWYWx1ZSwgbmFtZXNwYWNlKTtcbiAgfVxufVxuZnVuY3Rpb24gc2V0SW5wdXRzRnJvbUF0dHJzKGxWaWV3LCBkaXJlY3RpdmVJbmRleCwgaW5zdGFuY2UsIGRlZiwgdE5vZGUsIGluaXRpYWxJbnB1dERhdGEpIHtcbiAgY29uc3QgaW5pdGlhbElucHV0cyA9IGluaXRpYWxJbnB1dERhdGFbZGlyZWN0aXZlSW5kZXhdO1xuICBpZiAoaW5pdGlhbElucHV0cyAhPT0gbnVsbCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5pdGlhbElucHV0cy5sZW5ndGg7IGkgKz0gMikge1xuICAgICAgY29uc3QgbG9va3VwTmFtZSA9IGluaXRpYWxJbnB1dHNbaV07XG4gICAgICBjb25zdCB2YWx1ZSA9IGluaXRpYWxJbnB1dHNbaSArIDFdO1xuICAgICAgd3JpdGVUb0RpcmVjdGl2ZUlucHV0KGRlZiwgaW5zdGFuY2UsIGxvb2t1cE5hbWUsIHZhbHVlKTtcbiAgICAgIGlmIChuZ0Rldk1vZGUpIHtcbiAgICAgICAgc2V0TmdSZWZsZWN0UHJvcGVydHkobFZpZXcsIHROb2RlLCBkZWYuaW5wdXRzW2xvb2t1cE5hbWVdWzBdLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBlbGVtZW50TGlrZVN0YXJ0U2hhcmVkKHROb2RlLCBsVmlldywgaW5kZXgsIG5hbWUsIGxvY2F0ZU9yQ3JlYXRlTmF0aXZlTm9kZSkge1xuICBjb25zdCBhZGp1c3RlZEluZGV4ID0gSEVBREVSX09GRlNFVCArIGluZGV4O1xuICBjb25zdCB0VmlldyA9IGxWaWV3W1RWSUVXXTtcbiAgY29uc3QgbmF0aXZlID0gbG9jYXRlT3JDcmVhdGVOYXRpdmVOb2RlKHRWaWV3LCBsVmlldywgdE5vZGUsIG5hbWUsIGluZGV4KTtcbiAgbFZpZXdbYWRqdXN0ZWRJbmRleF0gPSBuYXRpdmU7XG4gIHNldEN1cnJlbnRUTm9kZSh0Tm9kZSwgdHJ1ZSk7XG4gIGNvbnN0IGlzRWxlbWVudCA9IHROb2RlLnR5cGUgPT09IDI7XG4gIGlmIChpc0VsZW1lbnQpIHtcbiAgICBzZXR1cFN0YXRpY0F0dHJpYnV0ZXMobFZpZXdbUkVOREVSRVJdLCBuYXRpdmUsIHROb2RlKTtcbiAgICBpZiAoZ2V0RWxlbWVudERlcHRoQ291bnQoKSA9PT0gMCB8fCBpc0RpcmVjdGl2ZUhvc3QodE5vZGUpKSB7XG4gICAgICBhdHRhY2hQYXRjaERhdGEobmF0aXZlLCBsVmlldyk7XG4gICAgfVxuICAgIGluY3JlYXNlRWxlbWVudERlcHRoQ291bnQoKTtcbiAgfSBlbHNlIHtcbiAgICBhdHRhY2hQYXRjaERhdGEobmF0aXZlLCBsVmlldyk7XG4gIH1cbiAgaWYgKHdhc0xhc3ROb2RlQ3JlYXRlZCgpICYmICghaXNFbGVtZW50IHx8ICFpc0RldGFjaGVkQnlJMThuKHROb2RlKSkpIHtcbiAgICBhcHBlbmRDaGlsZCh0VmlldywgbFZpZXcsIG5hdGl2ZSwgdE5vZGUpO1xuICB9XG4gIHJldHVybiB0Tm9kZTtcbn1cbmZ1bmN0aW9uIGVsZW1lbnRMaWtlRW5kU2hhcmVkKHROb2RlKSB7XG4gIGxldCBjdXJyZW50VE5vZGUgPSB0Tm9kZTtcbiAgaWYgKGlzQ3VycmVudFROb2RlUGFyZW50KCkpIHtcbiAgICBzZXRDdXJyZW50VE5vZGVBc05vdFBhcmVudCgpO1xuICB9IGVsc2Uge1xuICAgIG5nRGV2TW9kZSAmJiBhc3NlcnRIYXNQYXJlbnQoZ2V0Q3VycmVudFROb2RlKCkpO1xuICAgIGN1cnJlbnRUTm9kZSA9IGN1cnJlbnRUTm9kZS5wYXJlbnQ7XG4gICAgc2V0Q3VycmVudFROb2RlKGN1cnJlbnRUTm9kZSwgZmFsc2UpO1xuICB9XG4gIHJldHVybiBjdXJyZW50VE5vZGU7XG59XG5mdW5jdGlvbiBzdG9yZVByb3BlcnR5QmluZGluZ01ldGFkYXRhKHREYXRhLCB0Tm9kZSwgcHJvcGVydHlOYW1lLCBiaW5kaW5nSW5kZXgsIC4uLmludGVycG9sYXRpb25QYXJ0cykge1xuICBpZiAodERhdGFbYmluZGluZ0luZGV4XSA9PT0gbnVsbCkge1xuICAgIGlmICghdE5vZGUuaW5wdXRzPy5bcHJvcGVydHlOYW1lXSAmJiAhdE5vZGUuaG9zdERpcmVjdGl2ZUlucHV0cz8uW3Byb3BlcnR5TmFtZV0pIHtcbiAgICAgIGNvbnN0IHByb3BCaW5kaW5nSWR4cyA9IHROb2RlLnByb3BlcnR5QmluZGluZ3MgfHwgKHROb2RlLnByb3BlcnR5QmluZGluZ3MgPSBbXSk7XG4gICAgICBwcm9wQmluZGluZ0lkeHMucHVzaChiaW5kaW5nSW5kZXgpO1xuICAgICAgbGV0IGJpbmRpbmdNZXRhZGF0YSA9IHByb3BlcnR5TmFtZTtcbiAgICAgIGlmIChpbnRlcnBvbGF0aW9uUGFydHMubGVuZ3RoID4gMCkge1xuICAgICAgICBiaW5kaW5nTWV0YWRhdGEgKz0gSU5URVJQT0xBVElPTl9ERUxJTUlURVIgKyBpbnRlcnBvbGF0aW9uUGFydHMuam9pbihJTlRFUlBPTEFUSU9OX0RFTElNSVRFUik7XG4gICAgICB9XG4gICAgICB0RGF0YVtiaW5kaW5nSW5kZXhdID0gYmluZGluZ01ldGFkYXRhO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gbG9hZENvbXBvbmVudFJlbmRlcmVyKGN1cnJlbnREZWYsIHROb2RlLCBsVmlldykge1xuICBpZiAoY3VycmVudERlZiA9PT0gbnVsbCB8fCBpc0NvbXBvbmVudERlZihjdXJyZW50RGVmKSkge1xuICAgIGxWaWV3ID0gdW53cmFwTFZpZXcobFZpZXdbdE5vZGUuaW5kZXhdKTtcbiAgfVxuICByZXR1cm4gbFZpZXdbUkVOREVSRVJdO1xufVxuZnVuY3Rpb24gaGFuZGxlVW5jYXVnaHRFcnJvcihsVmlldywgZXJyb3IpIHtcbiAgY29uc3QgaW5qZWN0b3IgPSBsVmlld1tJTkpFQ1RPUl07XG4gIGlmICghaW5qZWN0b3IpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgbGV0IGVycm9ySGFuZGxlcjtcbiAgdHJ5IHtcbiAgICBlcnJvckhhbmRsZXIgPSBpbmplY3Rvci5nZXQoSU5URVJOQUxfQVBQTElDQVRJT05fRVJST1JfSEFORExFUiwgbnVsbCk7XG4gIH0gY2F0Y2gge1xuICAgIGVycm9ySGFuZGxlciA9IG51bGw7XG4gIH1cbiAgZXJyb3JIYW5kbGVyPy4oZXJyb3IpO1xufVxuZnVuY3Rpb24gc2V0QWxsSW5wdXRzRm9yUHJvcGVydHkodE5vZGUsIHRWaWV3LCBsVmlldywgcHVibGljTmFtZSwgdmFsdWUpIHtcbiAgY29uc3QgaW5wdXRzID0gdE5vZGUuaW5wdXRzPy5bcHVibGljTmFtZV07XG4gIGNvbnN0IGhvc3REaXJlY3RpdmVJbnB1dHMgPSB0Tm9kZS5ob3N0RGlyZWN0aXZlSW5wdXRzPy5bcHVibGljTmFtZV07XG4gIGxldCBoYXNNYXRjaCA9IGZhbHNlO1xuICBpZiAoaG9zdERpcmVjdGl2ZUlucHV0cykge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaG9zdERpcmVjdGl2ZUlucHV0cy5sZW5ndGg7IGkgKz0gMikge1xuICAgICAgY29uc3QgaW5kZXggPSBob3N0RGlyZWN0aXZlSW5wdXRzW2ldO1xuICAgICAgbmdEZXZNb2RlICYmIGFzc2VydEluZGV4SW5SYW5nZShsVmlldywgaW5kZXgpO1xuICAgICAgY29uc3QgcHVibGljTmFtZSA9IGhvc3REaXJlY3RpdmVJbnB1dHNbaSArIDFdO1xuICAgICAgY29uc3QgZGVmID0gdFZpZXcuZGF0YVtpbmRleF07XG4gICAgICB3cml0ZVRvRGlyZWN0aXZlSW5wdXQoZGVmLCBsVmlld1tpbmRleF0sIHB1YmxpY05hbWUsIHZhbHVlKTtcbiAgICAgIGhhc01hdGNoID0gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgaWYgKGlucHV0cykge1xuICAgIGZvciAoY29uc3QgaW5kZXggb2YgaW5wdXRzKSB7XG4gICAgICBuZ0Rldk1vZGUgJiYgYXNzZXJ0SW5kZXhJblJhbmdlKGxWaWV3LCBpbmRleCk7XG4gICAgICBjb25zdCBpbnN0YW5jZSA9IGxWaWV3W2luZGV4XTtcbiAgICAgIGNvbnN0IGRlZiA9IHRWaWV3LmRhdGFbaW5kZXhdO1xuICAgICAgd3JpdGVUb0RpcmVjdGl2ZUlucHV0KGRlZiwgaW5zdGFuY2UsIHB1YmxpY05hbWUsIHZhbHVlKTtcbiAgICAgIGhhc01hdGNoID0gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGhhc01hdGNoO1xufVxuZnVuY3Rpb24gc2V0RGlyZWN0aXZlSW5wdXQodE5vZGUsIHRWaWV3LCBsVmlldywgdGFyZ2V0LCBwdWJsaWNOYW1lLCB2YWx1ZSkge1xuICBsZXQgaG9zdEluZGV4ID0gbnVsbDtcbiAgbGV0IGhvc3REaXJlY3RpdmVzU3RhcnQgPSBudWxsO1xuICBsZXQgaG9zdERpcmVjdGl2ZXNFbmQgPSBudWxsO1xuICBsZXQgaGFzU2V0ID0gZmFsc2U7XG4gIGlmIChuZ0Rldk1vZGUgJiYgIXROb2RlLmRpcmVjdGl2ZVRvSW5kZXg/Lmhhcyh0YXJnZXQudHlwZSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE5vZGUgZG9lcyBub3QgaGF2ZSBhIGRpcmVjdGl2ZSB3aXRoIHR5cGUgJHt0YXJnZXQudHlwZS5uYW1lfWApO1xuICB9XG4gIGNvbnN0IGRhdGEgPSB0Tm9kZS5kaXJlY3RpdmVUb0luZGV4LmdldCh0YXJnZXQudHlwZSk7XG4gIGlmICh0eXBlb2YgZGF0YSA9PT0gJ251bWJlcicpIHtcbiAgICBob3N0SW5kZXggPSBkYXRhO1xuICB9IGVsc2Uge1xuICAgIFtob3N0SW5kZXgsIGhvc3REaXJlY3RpdmVzU3RhcnQsIGhvc3REaXJlY3RpdmVzRW5kXSA9IGRhdGE7XG4gIH1cbiAgaWYgKGhvc3REaXJlY3RpdmVzU3RhcnQgIT09IG51bGwgJiYgaG9zdERpcmVjdGl2ZXNFbmQgIT09IG51bGwgJiYgdE5vZGUuaG9zdERpcmVjdGl2ZUlucHV0cz8uaGFzT3duUHJvcGVydHkocHVibGljTmFtZSkpIHtcbiAgICBjb25zdCBob3N0RGlyZWN0aXZlSW5wdXRzID0gdE5vZGUuaG9zdERpcmVjdGl2ZUlucHV0c1twdWJsaWNOYW1lXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGhvc3REaXJlY3RpdmVJbnB1dHMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgIGNvbnN0IGluZGV4ID0gaG9zdERpcmVjdGl2ZUlucHV0c1tpXTtcbiAgICAgIGlmIChpbmRleCA+PSBob3N0RGlyZWN0aXZlc1N0YXJ0ICYmIGluZGV4IDw9IGhvc3REaXJlY3RpdmVzRW5kKSB7XG4gICAgICAgIG5nRGV2TW9kZSAmJiBhc3NlcnRJbmRleEluUmFuZ2UobFZpZXcsIGluZGV4KTtcbiAgICAgICAgY29uc3QgZGVmID0gdFZpZXcuZGF0YVtpbmRleF07XG4gICAgICAgIGNvbnN0IGhvc3REaXJlY3RpdmVQdWJsaWNOYW1lID0gaG9zdERpcmVjdGl2ZUlucHV0c1tpICsgMV07XG4gICAgICAgIHdyaXRlVG9EaXJlY3RpdmVJbnB1dChkZWYsIGxWaWV3W2luZGV4XSwgaG9zdERpcmVjdGl2ZVB1YmxpY05hbWUsIHZhbHVlKTtcbiAgICAgICAgaGFzU2V0ID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAoaW5kZXggPiBob3N0RGlyZWN0aXZlc0VuZCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKGhvc3RJbmRleCAhPT0gbnVsbCAmJiB0YXJnZXQuaW5wdXRzLmhhc093blByb3BlcnR5KHB1YmxpY05hbWUpKSB7XG4gICAgbmdEZXZNb2RlICYmIGFzc2VydEluZGV4SW5SYW5nZShsVmlldywgaG9zdEluZGV4KTtcbiAgICB3cml0ZVRvRGlyZWN0aXZlSW5wdXQodGFyZ2V0LCBsVmlld1tob3N0SW5kZXhdLCBwdWJsaWNOYW1lLCB2YWx1ZSk7XG4gICAgaGFzU2V0ID0gdHJ1ZTtcbiAgfVxuICByZXR1cm4gaGFzU2V0O1xufVxuZnVuY3Rpb24gcmVuZGVyQ29tcG9uZW50KGhvc3RMVmlldywgY29tcG9uZW50SG9zdElkeCkge1xuICBuZ0Rldk1vZGUgJiYgYXNzZXJ0RXF1YWwoaXNDcmVhdGlvbk1vZGUoaG9zdExWaWV3KSwgdHJ1ZSwgJ1Nob3VsZCBiZSBydW4gaW4gY3JlYXRpb24gbW9kZScpO1xuICBjb25zdCBjb21wb25lbnRWaWV3ID0gZ2V0Q29tcG9uZW50TFZpZXdCeUluZGV4KGNvbXBvbmVudEhvc3RJZHgsIGhvc3RMVmlldyk7XG4gIGNvbnN0IGNvbXBvbmVudFRWaWV3ID0gY29tcG9uZW50Vmlld1tUVklFV107XG4gIHN5bmNWaWV3V2l0aEJsdWVwcmludChjb21wb25lbnRUVmlldywgY29tcG9uZW50Vmlldyk7XG4gIGNvbnN0IGhvc3RSTm9kZSA9IGNvbXBvbmVudFZpZXdbSE9TVF07XG4gIGlmIChob3N0Uk5vZGUgIT09IG51bGwgJiYgY29tcG9uZW50Vmlld1tIWURSQVRJT05dID09PSBudWxsKSB7XG4gICAgY29tcG9uZW50Vmlld1tIWURSQVRJT05dID0gcmV0cmlldmVIeWRyYXRpb25JbmZvKGhvc3RSTm9kZSwgY29tcG9uZW50Vmlld1tJTkpFQ1RPUl0pO1xuICB9XG4gIHByb2ZpbGVyKFByb2ZpbGVyRXZlbnQuQ29tcG9uZW50U3RhcnQpO1xuICB0cnkge1xuICAgIHJlbmRlclZpZXcoY29tcG9uZW50VFZpZXcsIGNvbXBvbmVudFZpZXcsIGNvbXBvbmVudFZpZXdbQ09OVEVYVF0pO1xuICB9IGZpbmFsbHkge1xuICAgIHByb2ZpbGVyKFByb2ZpbGVyRXZlbnQuQ29tcG9uZW50RW5kLCBjb21wb25lbnRWaWV3W0NPTlRFWFRdKTtcbiAgfVxufVxuZnVuY3Rpb24gc3luY1ZpZXdXaXRoQmx1ZXByaW50KHRWaWV3LCBsVmlldykge1xuICBmb3IgKGxldCBpID0gbFZpZXcubGVuZ3RoOyBpIDwgdFZpZXcuYmx1ZXByaW50Lmxlbmd0aDsgaSsrKSB7XG4gICAgbFZpZXcucHVzaCh0Vmlldy5ibHVlcHJpbnRbaV0pO1xuICB9XG59XG5mdW5jdGlvbiByZW5kZXJWaWV3KHRWaWV3LCBsVmlldywgY29udGV4dCkge1xuICBuZ0Rldk1vZGUgJiYgYXNzZXJ0RXF1YWwoaXNDcmVhdGlvbk1vZGUobFZpZXcpLCB0cnVlLCAnU2hvdWxkIGJlIHJ1biBpbiBjcmVhdGlvbiBtb2RlJyk7XG4gIG5nRGV2TW9kZSAmJiBhc3NlcnROb3RSZWFjdGl2ZShyZW5kZXJWaWV3Lm5hbWUpO1xuICBlbnRlclZpZXcobFZpZXcpO1xuICB0cnkge1xuICAgIGNvbnN0IHZpZXdRdWVyeSA9IHRWaWV3LnZpZXdRdWVyeTtcbiAgICBpZiAodmlld1F1ZXJ5ICE9PSBudWxsKSB7XG4gICAgICBleGVjdXRlVmlld1F1ZXJ5Rm4oMSwgdmlld1F1ZXJ5LCBjb250ZXh0KTtcbiAgICB9XG4gICAgY29uc3QgdGVtcGxhdGVGbiA9IHRWaWV3LnRlbXBsYXRlO1xuICAgIGlmICh0ZW1wbGF0ZUZuICE9PSBudWxsKSB7XG4gICAgICBleGVjdXRlVGVtcGxhdGUodFZpZXcsIGxWaWV3LCB0ZW1wbGF0ZUZuLCAxLCBjb250ZXh0KTtcbiAgICB9XG4gICAgaWYgKHRWaWV3LmZpcnN0Q3JlYXRlUGFzcykge1xuICAgICAgdFZpZXcuZmlyc3RDcmVhdGVQYXNzID0gZmFsc2U7XG4gICAgfVxuICAgIGxWaWV3W1FVRVJJRVNdPy5maW5pc2hWaWV3Q3JlYXRpb24odFZpZXcpO1xuICAgIGlmICh0Vmlldy5zdGF0aWNDb250ZW50UXVlcmllcykge1xuICAgICAgcmVmcmVzaENvbnRlbnRRdWVyaWVzKHRWaWV3LCBsVmlldyk7XG4gICAgfVxuICAgIGlmICh0Vmlldy5zdGF0aWNWaWV3UXVlcmllcykge1xuICAgICAgZXhlY3V0ZVZpZXdRdWVyeUZuKDIsIHRWaWV3LnZpZXdRdWVyeSwgY29udGV4dCk7XG4gICAgfVxuICAgIGNvbnN0IGNvbXBvbmVudHMgPSB0Vmlldy5jb21wb25lbnRzO1xuICAgIGlmIChjb21wb25lbnRzICE9PSBudWxsKSB7XG4gICAgICByZW5kZXJDaGlsZENvbXBvbmVudHMobFZpZXcsIGNvbXBvbmVudHMpO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAodFZpZXcuZmlyc3RDcmVhdGVQYXNzKSB7XG4gICAgICB0Vmlldy5pbmNvbXBsZXRlRmlyc3RQYXNzID0gdHJ1ZTtcbiAgICAgIHRWaWV3LmZpcnN0Q3JlYXRlUGFzcyA9IGZhbHNlO1xuICAgIH1cbiAgICB0aHJvdyBlcnJvcjtcbiAgfSBmaW5hbGx5IHtcbiAgICBsVmlld1tGTEFHU10gJj0gfjQ7XG4gICAgbGVhdmVWaWV3KCk7XG4gIH1cbn1cbmZ1bmN0aW9uIHJlbmRlckNoaWxkQ29tcG9uZW50cyhob3N0TFZpZXcsIGNvbXBvbmVudHMpIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb21wb25lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgcmVuZGVyQ29tcG9uZW50KGhvc3RMVmlldywgY29tcG9uZW50c1tpXSk7XG4gIH1cbn1cbmZ1bmN0aW9uIGNyZWF0ZUFuZFJlbmRlckVtYmVkZGVkTFZpZXcoZGVjbGFyYXRpb25MVmlldywgdGVtcGxhdGVUTm9kZSwgY29udGV4dCwgb3B0aW9ucykge1xuICBjb25zdCBwcmV2Q29uc3VtZXIgPSBzZXRBY3RpdmVDb25zdW1lcihudWxsKTtcbiAgdHJ5IHtcbiAgICBjb25zdCBlbWJlZGRlZFRWaWV3ID0gdGVtcGxhdGVUTm9kZS50VmlldztcbiAgICBuZ0Rldk1vZGUgJiYgYXNzZXJ0RGVmaW5lZChlbWJlZGRlZFRWaWV3LCAnVFZpZXcgbXVzdCBiZSBkZWZpbmVkIGZvciBhIHRlbXBsYXRlIG5vZGUuJyk7XG4gICAgbmdEZXZNb2RlICYmIGFzc2VydFROb2RlRm9yTFZpZXcodGVtcGxhdGVUTm9kZSwgZGVjbGFyYXRpb25MVmlldyk7XG4gICAgY29uc3QgaXNTaWduYWxWaWV3ID0gZGVjbGFyYXRpb25MVmlld1tGTEFHU10gJiA0MDk2O1xuICAgIGNvbnN0IHZpZXdGbGFncyA9IGlzU2lnbmFsVmlldyA/IDQwOTYgOiAxNjtcbiAgICBjb25zdCBlbWJlZGRlZExWaWV3ID0gY3JlYXRlTFZpZXcoZGVjbGFyYXRpb25MVmlldywgZW1iZWRkZWRUVmlldywgY29udGV4dCwgdmlld0ZsYWdzLCBudWxsLCB0ZW1wbGF0ZVROb2RlLCBudWxsLCBudWxsLCBvcHRpb25zPy5pbmplY3RvciA/PyBudWxsLCBvcHRpb25zPy5lbWJlZGRlZFZpZXdJbmplY3RvciA/PyBudWxsLCBvcHRpb25zPy5kZWh5ZHJhdGVkVmlldyA/PyBudWxsKTtcbiAgICBjb25zdCBkZWNsYXJhdGlvbkxDb250YWluZXIgPSBkZWNsYXJhdGlvbkxWaWV3W3RlbXBsYXRlVE5vZGUuaW5kZXhdO1xuICAgIG5nRGV2TW9kZSAmJiBhc3NlcnRMQ29udGFpbmVyKGRlY2xhcmF0aW9uTENvbnRhaW5lcik7XG4gICAgZW1iZWRkZWRMVmlld1tERUNMQVJBVElPTl9MQ09OVEFJTkVSXSA9IGRlY2xhcmF0aW9uTENvbnRhaW5lcjtcbiAgICBjb25zdCBkZWNsYXJhdGlvblZpZXdMUXVlcmllcyA9IGRlY2xhcmF0aW9uTFZpZXdbUVVFUklFU107XG4gICAgaWYgKGRlY2xhcmF0aW9uVmlld0xRdWVyaWVzICE9PSBudWxsKSB7XG4gICAgICBlbWJlZGRlZExWaWV3W1FVRVJJRVNdID0gZGVjbGFyYXRpb25WaWV3TFF1ZXJpZXMuY3JlYXRlRW1iZWRkZWRWaWV3KGVtYmVkZGVkVFZpZXcpO1xuICAgIH1cbiAgICByZW5kZXJWaWV3KGVtYmVkZGVkVFZpZXcsIGVtYmVkZGVkTFZpZXcsIGNvbnRleHQpO1xuICAgIHJldHVybiBlbWJlZGRlZExWaWV3O1xuICB9IGZpbmFsbHkge1xuICAgIHNldEFjdGl2ZUNvbnN1bWVyKHByZXZDb25zdW1lcik7XG4gIH1cbn1cbmZ1bmN0aW9uIHNob3VsZEFkZFZpZXdUb0RvbSh0Tm9kZSwgZGVoeWRyYXRlZFZpZXcpIHtcbiAgcmV0dXJuICFkZWh5ZHJhdGVkVmlldyB8fCBkZWh5ZHJhdGVkVmlldy5maXJzdENoaWxkID09PSBudWxsIHx8IGhhc0luU2tpcEh5ZHJhdGlvbkJsb2NrRmxhZyh0Tm9kZSk7XG59XG5jb25zdCBVU0VfRVhIQVVTVElWRV9DSEVDS19OT19DSEFOR0VTX0RFRkFVTFQgPSBmYWxzZTtcbmNvbnN0IFVzZUV4aGF1c3RpdmVDaGVja05vQ2hhbmdlcyA9IC8qI19fUFVSRV9fKi9uZXcgSW5qZWN0aW9uVG9rZW4odHlwZW9mIG5nRGV2TW9kZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbmdEZXZNb2RlID8gJ2V4aGF1c3RpdmUgY2hlY2tOb0NoYW5nZXMnIDogJycpO1xuZnVuY3Rpb24gY29sbGVjdE5hdGl2ZU5vZGVzKHRWaWV3LCBsVmlldywgdE5vZGUsIHJlc3VsdCwgaXNQcm9qZWN0aW9uID0gZmFsc2UpIHtcbiAgd2hpbGUgKHROb2RlICE9PSBudWxsKSB7XG4gICAgaWYgKHROb2RlLnR5cGUgPT09IDEyOCkge1xuICAgICAgdE5vZGUgPSBpc1Byb2plY3Rpb24gPyB0Tm9kZS5wcm9qZWN0aW9uTmV4dCA6IHROb2RlLm5leHQ7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgbmdEZXZNb2RlICYmIGFzc2VydFROb2RlVHlwZSh0Tm9kZSwgMyB8IDEyIHwgMTYgfCAzMik7XG4gICAgY29uc3QgbE5vZGUgPSBsVmlld1t0Tm9kZS5pbmRleF07XG4gICAgaWYgKGxOb2RlICE9PSBudWxsKSB7XG4gICAgICByZXN1bHQucHVzaCh1bndyYXBSTm9kZShsTm9kZSkpO1xuICAgIH1cbiAgICBpZiAoaXNMQ29udGFpbmVyKGxOb2RlKSkge1xuICAgICAgY29sbGVjdE5hdGl2ZU5vZGVzSW5MQ29udGFpbmVyKGxOb2RlLCByZXN1bHQpO1xuICAgIH1cbiAgICBjb25zdCB0Tm9kZVR5cGUgPSB0Tm9kZS50eXBlO1xuICAgIGlmICh0Tm9kZVR5cGUgJiA4KSB7XG4gICAgICBjb2xsZWN0TmF0aXZlTm9kZXModFZpZXcsIGxWaWV3LCB0Tm9kZS5jaGlsZCwgcmVzdWx0KTtcbiAgICB9IGVsc2UgaWYgKHROb2RlVHlwZSAmIDMyKSB7XG4gICAgICBjb25zdCBuZXh0Uk5vZGUgPSBpY3VDb250YWluZXJJdGVyYXRlKHROb2RlLCBsVmlldyk7XG4gICAgICBsZXQgck5vZGU7XG4gICAgICB3aGlsZSAock5vZGUgPSBuZXh0Uk5vZGUoKSkge1xuICAgICAgICByZXN1bHQucHVzaChyTm9kZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0Tm9kZVR5cGUgJiAxNikge1xuICAgICAgY29uc3Qgbm9kZXNJblNsb3QgPSBnZXRQcm9qZWN0aW9uTm9kZXMobFZpZXcsIHROb2RlKTtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KG5vZGVzSW5TbG90KSkge1xuICAgICAgICByZXN1bHQucHVzaCguLi5ub2Rlc0luU2xvdCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBwYXJlbnRWaWV3ID0gZ2V0TFZpZXdQYXJlbnQobFZpZXdbREVDTEFSQVRJT05fQ09NUE9ORU5UX1ZJRVddKTtcbiAgICAgICAgbmdEZXZNb2RlICYmIGFzc2VydFBhcmVudFZpZXcocGFyZW50Vmlldyk7XG4gICAgICAgIGNvbGxlY3ROYXRpdmVOb2RlcyhwYXJlbnRWaWV3W1RWSUVXXSwgcGFyZW50Vmlldywgbm9kZXNJblNsb3QsIHJlc3VsdCwgdHJ1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHROb2RlID0gaXNQcm9qZWN0aW9uID8gdE5vZGUucHJvamVjdGlvbk5leHQgOiB0Tm9kZS5uZXh0O1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5mdW5jdGlvbiBjb2xsZWN0TmF0aXZlTm9kZXNJbkxDb250YWluZXIobENvbnRhaW5lciwgcmVzdWx0KSB7XG4gIGZvciAobGV0IGkgPSBDT05UQUlORVJfSEVBREVSX09GRlNFVDsgaSA8IGxDb250YWluZXIubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBsVmlld0luQUNvbnRhaW5lciA9IGxDb250YWluZXJbaV07XG4gICAgY29uc3QgbFZpZXdGaXJzdENoaWxkVE5vZGUgPSBsVmlld0luQUNvbnRhaW5lcltUVklFV10uZmlyc3RDaGlsZDtcbiAgICBpZiAobFZpZXdGaXJzdENoaWxkVE5vZGUgIT09IG51bGwpIHtcbiAgICAgIGNvbGxlY3ROYXRpdmVOb2RlcyhsVmlld0luQUNvbnRhaW5lcltUVklFV10sIGxWaWV3SW5BQ29udGFpbmVyLCBsVmlld0ZpcnN0Q2hpbGRUTm9kZSwgcmVzdWx0KTtcbiAgICB9XG4gIH1cbiAgaWYgKGxDb250YWluZXJbTkFUSVZFXSAhPT0gbENvbnRhaW5lcltIT1NUXSkge1xuICAgIHJlc3VsdC5wdXNoKGxDb250YWluZXJbTkFUSVZFXSk7XG4gIH1cbn1cbmZ1bmN0aW9uIGFkZEFmdGVyUmVuZGVyU2VxdWVuY2VzRm9yVmlldyhsVmlldykge1xuICBpZiAobFZpZXdbQUZURVJfUkVOREVSX1NFUVVFTkNFU19UT19BRERdICE9PSBudWxsKSB7XG4gICAgZm9yIChjb25zdCBzZXF1ZW5jZSBvZiBsVmlld1tBRlRFUl9SRU5ERVJfU0VRVUVOQ0VTX1RPX0FERF0pIHtcbiAgICAgIHNlcXVlbmNlLmltcGwuYWRkU2VxdWVuY2Uoc2VxdWVuY2UpO1xuICAgIH1cbiAgICBsVmlld1tBRlRFUl9SRU5ERVJfU0VRVUVOQ0VTX1RPX0FERF0ubGVuZ3RoID0gMDtcbiAgfVxufVxubGV0IGZyZWVDb25zdW1lcnMgPSBbXTtcbmZ1bmN0aW9uIGdldE9yQm9ycm93UmVhY3RpdmVMVmlld0NvbnN1bWVyKGxWaWV3KSB7XG4gIHJldHVybiBsVmlld1tSRUFDVElWRV9URU1QTEFURV9DT05TVU1FUl0gPz8gYm9ycm93UmVhY3RpdmVMVmlld0NvbnN1bWVyKGxWaWV3KTtcbn1cbmZ1bmN0aW9uIGJvcnJvd1JlYWN0aXZlTFZpZXdDb25zdW1lcihsVmlldykge1xuICBjb25zdCBjb25zdW1lciA9IGZyZWVDb25zdW1lcnMucG9wKCkgPz8gT2JqZWN0LmNyZWF0ZShSRUFDVElWRV9MVklFV19DT05TVU1FUl9OT0RFKTtcbiAgY29uc3VtZXIubFZpZXcgPSBsVmlldztcbiAgcmV0dXJuIGNvbnN1bWVyO1xufVxuZnVuY3Rpb24gbWF5YmVSZXR1cm5SZWFjdGl2ZUxWaWV3Q29uc3VtZXIoY29uc3VtZXIpIHtcbiAgaWYgKGNvbnN1bWVyLmxWaWV3W1JFQUNUSVZFX1RFTVBMQVRFX0NPTlNVTUVSXSA9PT0gY29uc3VtZXIpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3VtZXIubFZpZXcgPSBudWxsO1xuICBmcmVlQ29uc3VtZXJzLnB1c2goY29uc3VtZXIpO1xufVxuY29uc3QgUkVBQ1RJVkVfTFZJRVdfQ09OU1VNRVJfTk9ERSA9IHtcbiAgLi4uUkVBQ1RJVkVfTk9ERSxcbiAgY29uc3VtZXJJc0Fsd2F5c0xpdmU6IHRydWUsXG4gIGtpbmQ6ICd0ZW1wbGF0ZScsXG4gIGNvbnN1bWVyTWFya2VkRGlydHk6IG5vZGUgPT4ge1xuICAgIG1hcmtBbmNlc3RvcnNGb3JUcmF2ZXJzYWwobm9kZS5sVmlldyk7XG4gIH0sXG4gIGNvbnN1bWVyT25TaWduYWxSZWFkKCkge1xuICAgIHRoaXMubFZpZXdbUkVBQ1RJVkVfVEVNUExBVEVfQ09OU1VNRVJdID0gdGhpcztcbiAgfVxufTtcbmZ1bmN0aW9uIGdldE9yQ3JlYXRlVGVtcG9yYXJ5Q29uc3VtZXIobFZpZXcpIHtcbiAgY29uc3QgY29uc3VtZXIgPSBsVmlld1tSRUFDVElWRV9URU1QTEFURV9DT05TVU1FUl0gPz8gT2JqZWN0LmNyZWF0ZShURU1QT1JBUllfQ09OU1VNRVJfTk9ERSk7XG4gIGNvbnN1bWVyLmxWaWV3ID0gbFZpZXc7XG4gIHJldHVybiBjb25zdW1lcjtcbn1cbmNvbnN0IFRFTVBPUkFSWV9DT05TVU1FUl9OT0RFID0ge1xuICAuLi5SRUFDVElWRV9OT0RFLFxuICBjb25zdW1lcklzQWx3YXlzTGl2ZTogdHJ1ZSxcbiAga2luZDogJ3RlbXBsYXRlJyxcbiAgY29uc3VtZXJNYXJrZWREaXJ0eTogbm9kZSA9PiB7XG4gICAgbGV0IHBhcmVudCA9IGdldExWaWV3UGFyZW50KG5vZGUubFZpZXcpO1xuICAgIHdoaWxlIChwYXJlbnQgJiYgIXZpZXdTaG91bGRIYXZlUmVhY3RpdmVDb25zdW1lcihwYXJlbnRbVFZJRVddKSkge1xuICAgICAgcGFyZW50ID0gZ2V0TFZpZXdQYXJlbnQocGFyZW50KTtcbiAgICB9XG4gICAgaWYgKCFwYXJlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbWFya1ZpZXdGb3JSZWZyZXNoKHBhcmVudCk7XG4gIH0sXG4gIGNvbnN1bWVyT25TaWduYWxSZWFkKCkge1xuICAgIHRoaXMubFZpZXdbUkVBQ1RJVkVfVEVNUExBVEVfQ09OU1VNRVJdID0gdGhpcztcbiAgfVxufTtcbmZ1bmN0aW9uIHZpZXdTaG91bGRIYXZlUmVhY3RpdmVDb25zdW1lcih0Vmlldykge1xuICByZXR1cm4gdFZpZXcudHlwZSAhPT0gMjtcbn1cbmZ1bmN0aW9uIGlzUmVhY3RpdmVMVmlld0NvbnN1bWVyKG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUua2luZCA9PT0gJ3RlbXBsYXRlJztcbn1cbmZ1bmN0aW9uIHJ1bkVmZmVjdHNJblZpZXcodmlldykge1xuICBpZiAodmlld1tFRkZFQ1RTXSA9PT0gbnVsbCkge1xuICAgIHJldHVybjtcbiAgfVxuICBsZXQgdHJ5Rmx1c2hFZmZlY3RzID0gdHJ1ZTtcbiAgd2hpbGUgKHRyeUZsdXNoRWZmZWN0cykge1xuICAgIGxldCBmb3VuZERpcnR5RWZmZWN0ID0gZmFsc2U7XG4gICAgZm9yIChjb25zdCBlZmZlY3Qgb2Ygdmlld1tFRkZFQ1RTXSkge1xuICAgICAgaWYgKCFlZmZlY3QuZGlydHkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBmb3VuZERpcnR5RWZmZWN0ID0gdHJ1ZTtcbiAgICAgIGlmIChlZmZlY3Quem9uZSA9PT0gbnVsbCB8fCBab25lLmN1cnJlbnQgPT09IGVmZmVjdC56b25lKSB7XG4gICAgICAgIGVmZmVjdC5ydW4oKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVmZmVjdC56b25lLnJ1bigoKSA9PiBlZmZlY3QucnVuKCkpO1xuICAgICAgfVxuICAgIH1cbiAgICB0cnlGbHVzaEVmZmVjdHMgPSBmb3VuZERpcnR5RWZmZWN0ICYmICEhKHZpZXdbRkxBR1NdICYgODE5Mik7XG4gIH1cbn1cbmNvbnN0IE1BWElNVU1fUkVGUkVTSF9SRVJVTlMkMSA9IDEwMDtcbmZ1bmN0aW9uIGRldGVjdENoYW5nZXNJbnRlcm5hbChsVmlldywgbW9kZSA9IDApIHtcbiAgY29uc3QgZW52aXJvbm1lbnQgPSBsVmlld1tFTlZJUk9OTUVOVF07XG4gIGNvbnN0IHJlbmRlcmVyRmFjdG9yeSA9IGVudmlyb25tZW50LnJlbmRlcmVyRmFjdG9yeTtcbiAgY29uc3QgY2hlY2tOb0NoYW5nZXNNb2RlID0gISFuZ0Rldk1vZGUgJiYgaXNJbkNoZWNrTm9DaGFuZ2VzTW9kZSgpO1xuICBpZiAoIWNoZWNrTm9DaGFuZ2VzTW9kZSkge1xuICAgIHJlbmRlcmVyRmFjdG9yeS5iZWdpbj8uKCk7XG4gIH1cbiAgdHJ5IHtcbiAgICBkZXRlY3RDaGFuZ2VzSW5WaWV3V2hpbGVEaXJ0eShsVmlldywgbW9kZSk7XG4gIH0gZmluYWxseSB7XG4gICAgaWYgKCFjaGVja05vQ2hhbmdlc01vZGUpIHtcbiAgICAgIHJlbmRlcmVyRmFjdG9yeS5lbmQ/LigpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gZGV0ZWN0Q2hhbmdlc0luVmlld1doaWxlRGlydHkobFZpZXcsIG1vZGUpIHtcbiAgY29uc3QgbGFzdElzUmVmcmVzaGluZ1ZpZXdzVmFsdWUgPSBpc1JlZnJlc2hpbmdWaWV3cygpO1xuICB0cnkge1xuICAgIHNldElzUmVmcmVzaGluZ1ZpZXdzKHRydWUpO1xuICAgIGRldGVjdENoYW5nZXNJblZpZXcobFZpZXcsIG1vZGUpO1xuICAgIGlmIChuZ0Rldk1vZGUgJiYgaXNFeGhhdXN0aXZlQ2hlY2tOb0NoYW5nZXMoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgcmV0cmllcyA9IDA7XG4gICAgd2hpbGUgKHJlcXVpcmVzUmVmcmVzaE9yVHJhdmVyc2FsKGxWaWV3KSkge1xuICAgICAgaWYgKHJldHJpZXMgPT09IE1BWElNVU1fUkVGUkVTSF9SRVJVTlMkMSkge1xuICAgICAgICB0aHJvdyBuZXcgUnVudGltZUVycm9yKDEwMywgbmdEZXZNb2RlICYmICdJbmZpbml0ZSBjaGFuZ2UgZGV0ZWN0aW9uIHdoaWxlIHRyeWluZyB0byByZWZyZXNoIHZpZXdzLiAnICsgJ1RoZXJlIG1heSBiZSBjb21wb25lbnRzIHdoaWNoIGVhY2ggY2F1c2UgdGhlIG90aGVyIHRvIHJlcXVpcmUgYSByZWZyZXNoLCAnICsgJ2NhdXNpbmcgYW4gaW5maW5pdGUgbG9vcC4nKTtcbiAgICAgIH1cbiAgICAgIHJldHJpZXMrKztcbiAgICAgIGRldGVjdENoYW5nZXNJblZpZXcobFZpZXcsIDEpO1xuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICBzZXRJc1JlZnJlc2hpbmdWaWV3cyhsYXN0SXNSZWZyZXNoaW5nVmlld3NWYWx1ZSk7XG4gIH1cbn1cbmZ1bmN0aW9uIGNoZWNrTm9DaGFuZ2VzSW50ZXJuYWwobFZpZXcsIGV4aGF1c3RpdmUpIHtcbiAgc2V0SXNJbkNoZWNrTm9DaGFuZ2VzTW9kZShleGhhdXN0aXZlID8gQ2hlY2tOb0NoYW5nZXNNb2RlLkV4aGF1c3RpdmUgOiBDaGVja05vQ2hhbmdlc01vZGUuT25seURpcnR5Vmlld3MpO1xuICB0cnkge1xuICAgIGRldGVjdENoYW5nZXNJbnRlcm5hbChsVmlldyk7XG4gIH0gZmluYWxseSB7XG4gICAgc2V0SXNJbkNoZWNrTm9DaGFuZ2VzTW9kZShDaGVja05vQ2hhbmdlc01vZGUuT2ZmKTtcbiAgfVxufVxuZnVuY3Rpb24gcmVmcmVzaFZpZXcodFZpZXcsIGxWaWV3LCB0ZW1wbGF0ZUZuLCBjb250ZXh0KSB7XG4gIG5nRGV2TW9kZSAmJiBhc3NlcnRFcXVhbChpc0NyZWF0aW9uTW9kZShsVmlldyksIGZhbHNlLCAnU2hvdWxkIGJlIHJ1biBpbiB1cGRhdGUgbW9kZScpO1xuICBpZiAoaXNEZXN0cm95ZWQobFZpZXcpKSByZXR1cm47XG4gIGNvbnN0IGZsYWdzID0gbFZpZXdbRkxBR1NdO1xuICBjb25zdCBpc0luQ2hlY2tOb0NoYW5nZXNQYXNzID0gbmdEZXZNb2RlICYmIGlzSW5DaGVja05vQ2hhbmdlc01vZGUoKTtcbiAgY29uc3QgaXNJbkV4aGF1c3RpdmVDaGVja05vQ2hhbmdlc1Bhc3MgPSBuZ0Rldk1vZGUgJiYgaXNFeGhhdXN0aXZlQ2hlY2tOb0NoYW5nZXMoKTtcbiAgZW50ZXJWaWV3KGxWaWV3KTtcbiAgbGV0IHJldHVybkNvbnN1bWVyVG9Qb29sID0gdHJ1ZTtcbiAgbGV0IHByZXZDb25zdW1lciA9IG51bGw7XG4gIGxldCBjdXJyZW50Q29uc3VtZXIgPSBudWxsO1xuICBpZiAoIWlzSW5DaGVja05vQ2hhbmdlc1Bhc3MpIHtcbiAgICBpZiAodmlld1Nob3VsZEhhdmVSZWFjdGl2ZUNvbnN1bWVyKHRWaWV3KSkge1xuICAgICAgY3VycmVudENvbnN1bWVyID0gZ2V0T3JCb3Jyb3dSZWFjdGl2ZUxWaWV3Q29uc3VtZXIobFZpZXcpO1xuICAgICAgcHJldkNvbnN1bWVyID0gY29uc3VtZXJCZWZvcmVDb21wdXRhdGlvbihjdXJyZW50Q29uc3VtZXIpO1xuICAgIH0gZWxzZSBpZiAoZ2V0QWN0aXZlQ29uc3VtZXIoKSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuQ29uc3VtZXJUb1Bvb2wgPSBmYWxzZTtcbiAgICAgIGN1cnJlbnRDb25zdW1lciA9IGdldE9yQ3JlYXRlVGVtcG9yYXJ5Q29uc3VtZXIobFZpZXcpO1xuICAgICAgcHJldkNvbnN1bWVyID0gY29uc3VtZXJCZWZvcmVDb21wdXRhdGlvbihjdXJyZW50Q29uc3VtZXIpO1xuICAgIH0gZWxzZSBpZiAobFZpZXdbUkVBQ1RJVkVfVEVNUExBVEVfQ09OU1VNRVJdKSB7XG4gICAgICBjb25zdW1lckRlc3Ryb3kobFZpZXdbUkVBQ1RJVkVfVEVNUExBVEVfQ09OU1VNRVJdKTtcbiAgICAgIGxWaWV3W1JFQUNUSVZFX1RFTVBMQVRFX0NPTlNVTUVSXSA9IG51bGw7XG4gICAgfVxuICB9XG4gIHRyeSB7XG4gICAgcmVzZXRQcmVPcmRlckhvb2tGbGFncyhsVmlldyk7XG4gICAgc2V0QmluZGluZ0luZGV4KHRWaWV3LmJpbmRpbmdTdGFydEluZGV4KTtcbiAgICBpZiAodGVtcGxhdGVGbiAhPT0gbnVsbCkge1xuICAgICAgZXhlY3V0ZVRlbXBsYXRlKHRWaWV3LCBsVmlldywgdGVtcGxhdGVGbiwgMiwgY29udGV4dCk7XG4gICAgfVxuICAgIGNvbnN0IGhvb2tzSW5pdFBoYXNlQ29tcGxldGVkID0gKGZsYWdzICYgMykgPT09IDM7XG4gICAgaWYgKCFpc0luQ2hlY2tOb0NoYW5nZXNQYXNzKSB7XG4gICAgICBpZiAoaG9va3NJbml0UGhhc2VDb21wbGV0ZWQpIHtcbiAgICAgICAgY29uc3QgcHJlT3JkZXJDaGVja0hvb2tzID0gdFZpZXcucHJlT3JkZXJDaGVja0hvb2tzO1xuICAgICAgICBpZiAocHJlT3JkZXJDaGVja0hvb2tzICE9PSBudWxsKSB7XG4gICAgICAgICAgZXhlY3V0ZUNoZWNrSG9va3MobFZpZXcsIHByZU9yZGVyQ2hlY2tIb29rcywgbnVsbCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHByZU9yZGVySG9va3MgPSB0Vmlldy5wcmVPcmRlckhvb2tzO1xuICAgICAgICBpZiAocHJlT3JkZXJIb29rcyAhPT0gbnVsbCkge1xuICAgICAgICAgIGV4ZWN1dGVJbml0QW5kQ2hlY2tIb29rcyhsVmlldywgcHJlT3JkZXJIb29rcywgMCwgbnVsbCk7XG4gICAgICAgIH1cbiAgICAgICAgaW5jcmVtZW50SW5pdFBoYXNlRmxhZ3MobFZpZXcsIDApO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIWlzSW5FeGhhdXN0aXZlQ2hlY2tOb0NoYW5nZXNQYXNzKSB7XG4gICAgICBtYXJrVHJhbnNwbGFudGVkVmlld3NGb3JSZWZyZXNoKGxWaWV3KTtcbiAgICB9XG4gICAgcnVuRWZmZWN0c0luVmlldyhsVmlldyk7XG4gICAgZGV0ZWN0Q2hhbmdlc0luRW1iZWRkZWRWaWV3cyhsVmlldywgMCk7XG4gICAgaWYgKHRWaWV3LmNvbnRlbnRRdWVyaWVzICE9PSBudWxsKSB7XG4gICAgICByZWZyZXNoQ29udGVudFF1ZXJpZXModFZpZXcsIGxWaWV3KTtcbiAgICB9XG4gICAgaWYgKCFpc0luQ2hlY2tOb0NoYW5nZXNQYXNzKSB7XG4gICAgICBpZiAoaG9va3NJbml0UGhhc2VDb21wbGV0ZWQpIHtcbiAgICAgICAgY29uc3QgY29udGVudENoZWNrSG9va3MgPSB0Vmlldy5jb250ZW50Q2hlY2tIb29rcztcbiAgICAgICAgaWYgKGNvbnRlbnRDaGVja0hvb2tzICE9PSBudWxsKSB7XG4gICAgICAgICAgZXhlY3V0ZUNoZWNrSG9va3MobFZpZXcsIGNvbnRlbnRDaGVja0hvb2tzKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgY29udGVudEhvb2tzID0gdFZpZXcuY29udGVudEhvb2tzO1xuICAgICAgICBpZiAoY29udGVudEhvb2tzICE9PSBudWxsKSB7XG4gICAgICAgICAgZXhlY3V0ZUluaXRBbmRDaGVja0hvb2tzKGxWaWV3LCBjb250ZW50SG9va3MsIDEpO1xuICAgICAgICB9XG4gICAgICAgIGluY3JlbWVudEluaXRQaGFzZUZsYWdzKGxWaWV3LCAxKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcHJvY2Vzc0hvc3RCaW5kaW5nT3BDb2Rlcyh0VmlldywgbFZpZXcpO1xuICAgIGNvbnN0IGNvbXBvbmVudHMgPSB0Vmlldy5jb21wb25lbnRzO1xuICAgIGlmIChjb21wb25lbnRzICE9PSBudWxsKSB7XG4gICAgICBkZXRlY3RDaGFuZ2VzSW5DaGlsZENvbXBvbmVudHMobFZpZXcsIGNvbXBvbmVudHMsIDApO1xuICAgIH1cbiAgICBjb25zdCB2aWV3UXVlcnkgPSB0Vmlldy52aWV3UXVlcnk7XG4gICAgaWYgKHZpZXdRdWVyeSAhPT0gbnVsbCkge1xuICAgICAgZXhlY3V0ZVZpZXdRdWVyeUZuKDIsIHZpZXdRdWVyeSwgY29udGV4dCk7XG4gICAgfVxuICAgIGlmICghaXNJbkNoZWNrTm9DaGFuZ2VzUGFzcykge1xuICAgICAgaWYgKGhvb2tzSW5pdFBoYXNlQ29tcGxldGVkKSB7XG4gICAgICAgIGNvbnN0IHZpZXdDaGVja0hvb2tzID0gdFZpZXcudmlld0NoZWNrSG9va3M7XG4gICAgICAgIGlmICh2aWV3Q2hlY2tIb29rcyAhPT0gbnVsbCkge1xuICAgICAgICAgIGV4ZWN1dGVDaGVja0hvb2tzKGxWaWV3LCB2aWV3Q2hlY2tIb29rcyk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHZpZXdIb29rcyA9IHRWaWV3LnZpZXdIb29rcztcbiAgICAgICAgaWYgKHZpZXdIb29rcyAhPT0gbnVsbCkge1xuICAgICAgICAgIGV4ZWN1dGVJbml0QW5kQ2hlY2tIb29rcyhsVmlldywgdmlld0hvb2tzLCAyKTtcbiAgICAgICAgfVxuICAgICAgICBpbmNyZW1lbnRJbml0UGhhc2VGbGFncyhsVmlldywgMik7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0Vmlldy5maXJzdFVwZGF0ZVBhc3MgPT09IHRydWUpIHtcbiAgICAgIHRWaWV3LmZpcnN0VXBkYXRlUGFzcyA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAobFZpZXdbRUZGRUNUU19UT19TQ0hFRFVMRV0pIHtcbiAgICAgIGZvciAoY29uc3Qgbm90aWZ5RWZmZWN0IG9mIGxWaWV3W0VGRkVDVFNfVE9fU0NIRURVTEVdKSB7XG4gICAgICAgIG5vdGlmeUVmZmVjdCgpO1xuICAgICAgfVxuICAgICAgbFZpZXdbRUZGRUNUU19UT19TQ0hFRFVMRV0gPSBudWxsO1xuICAgIH1cbiAgICBpZiAoIWlzSW5DaGVja05vQ2hhbmdlc1Bhc3MpIHtcbiAgICAgIGFkZEFmdGVyUmVuZGVyU2VxdWVuY2VzRm9yVmlldyhsVmlldyk7XG4gICAgICBsVmlld1tGTEFHU10gJj0gfig2NCB8IDgpO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIGlmICghaXNJbkNoZWNrTm9DaGFuZ2VzUGFzcykge1xuICAgICAgbWFya0FuY2VzdG9yc0ZvclRyYXZlcnNhbChsVmlldyk7XG4gICAgfVxuICAgIHRocm93IGU7XG4gIH0gZmluYWxseSB7XG4gICAgaWYgKGN1cnJlbnRDb25zdW1lciAhPT0gbnVsbCkge1xuICAgICAgY29uc3VtZXJBZnRlckNvbXB1dGF0aW9uKGN1cnJlbnRDb25zdW1lciwgcHJldkNvbnN1bWVyKTtcbiAgICAgIGlmIChyZXR1cm5Db25zdW1lclRvUG9vbCkge1xuICAgICAgICBtYXliZVJldHVyblJlYWN0aXZlTFZpZXdDb25zdW1lcihjdXJyZW50Q29uc3VtZXIpO1xuICAgICAgfVxuICAgIH1cbiAgICBsZWF2ZVZpZXcoKTtcbiAgfVxufVxuZnVuY3Rpb24gZGV0ZWN0Q2hhbmdlc0luRW1iZWRkZWRWaWV3cyhsVmlldywgbW9kZSkge1xuICBmb3IgKGxldCBsQ29udGFpbmVyID0gZ2V0Rmlyc3RMQ29udGFpbmVyKGxWaWV3KTsgbENvbnRhaW5lciAhPT0gbnVsbDsgbENvbnRhaW5lciA9IGdldE5leHRMQ29udGFpbmVyKGxDb250YWluZXIpKSB7XG4gICAgZm9yIChsZXQgaSA9IENPTlRBSU5FUl9IRUFERVJfT0ZGU0VUOyBpIDwgbENvbnRhaW5lci5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgZW1iZWRkZWRMVmlldyA9IGxDb250YWluZXJbaV07XG4gICAgICBkZXRlY3RDaGFuZ2VzSW5WaWV3SWZBdHRhY2hlZChlbWJlZGRlZExWaWV3LCBtb2RlKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIG1hcmtUcmFuc3BsYW50ZWRWaWV3c0ZvclJlZnJlc2gobFZpZXcpIHtcbiAgZm9yIChsZXQgbENvbnRhaW5lciA9IGdldEZpcnN0TENvbnRhaW5lcihsVmlldyk7IGxDb250YWluZXIgIT09IG51bGw7IGxDb250YWluZXIgPSBnZXROZXh0TENvbnRhaW5lcihsQ29udGFpbmVyKSkge1xuICAgIGlmICghKGxDb250YWluZXJbRkxBR1NdICYgMikpIGNvbnRpbnVlO1xuICAgIGNvbnN0IG1vdmVkVmlld3MgPSBsQ29udGFpbmVyW01PVkVEX1ZJRVdTXTtcbiAgICBuZ0Rldk1vZGUgJiYgYXNzZXJ0RGVmaW5lZChtb3ZlZFZpZXdzLCAnVHJhbnNwbGFudGVkIFZpZXcgZmxhZ3Mgc2V0IGJ1dCBtaXNzaW5nIE1PVkVEX1ZJRVdTJyk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb3ZlZFZpZXdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBtb3ZlZExWaWV3ID0gbW92ZWRWaWV3c1tpXTtcbiAgICAgIG1hcmtWaWV3Rm9yUmVmcmVzaChtb3ZlZExWaWV3KTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGRldGVjdENoYW5nZXNJbkNvbXBvbmVudChob3N0TFZpZXcsIGNvbXBvbmVudEhvc3RJZHgsIG1vZGUpIHtcbiAgbmdEZXZNb2RlICYmIGFzc2VydEVxdWFsKGlzQ3JlYXRpb25Nb2RlKGhvc3RMVmlldyksIGZhbHNlLCAnU2hvdWxkIGJlIHJ1biBpbiB1cGRhdGUgbW9kZScpO1xuICBwcm9maWxlcihQcm9maWxlckV2ZW50LkNvbXBvbmVudFN0YXJ0KTtcbiAgY29uc3QgY29tcG9uZW50VmlldyA9IGdldENvbXBvbmVudExWaWV3QnlJbmRleChjb21wb25lbnRIb3N0SWR4LCBob3N0TFZpZXcpO1xuICB0cnkge1xuICAgIGRldGVjdENoYW5nZXNJblZpZXdJZkF0dGFjaGVkKGNvbXBvbmVudFZpZXcsIG1vZGUpO1xuICB9IGZpbmFsbHkge1xuICAgIHByb2ZpbGVyKFByb2ZpbGVyRXZlbnQuQ29tcG9uZW50RW5kLCBjb21wb25lbnRWaWV3W0NPTlRFWFRdKTtcbiAgfVxufVxuZnVuY3Rpb24gZGV0ZWN0Q2hhbmdlc0luVmlld0lmQXR0YWNoZWQobFZpZXcsIG1vZGUpIHtcbiAgaWYgKCF2aWV3QXR0YWNoZWRUb0NoYW5nZURldGVjdG9yKGxWaWV3KSkge1xuICAgIHJldHVybjtcbiAgfVxuICBkZXRlY3RDaGFuZ2VzSW5WaWV3KGxWaWV3LCBtb2RlKTtcbn1cbmZ1bmN0aW9uIGRldGVjdENoYW5nZXNJblZpZXcobFZpZXcsIG1vZGUpIHtcbiAgY29uc3QgaXNJbkNoZWNrTm9DaGFuZ2VzUGFzcyA9IG5nRGV2TW9kZSAmJiBpc0luQ2hlY2tOb0NoYW5nZXNNb2RlKCk7XG4gIGNvbnN0IHRWaWV3ID0gbFZpZXdbVFZJRVddO1xuICBjb25zdCBmbGFncyA9IGxWaWV3W0ZMQUdTXTtcbiAgY29uc3QgY29uc3VtZXIgPSBsVmlld1tSRUFDVElWRV9URU1QTEFURV9DT05TVU1FUl07XG4gIGxldCBzaG91bGRSZWZyZXNoVmlldyA9ICEhKG1vZGUgPT09IDAgJiYgZmxhZ3MgJiAxNik7XG4gIHNob3VsZFJlZnJlc2hWaWV3IHx8PSAhIShmbGFncyAmIDY0ICYmIG1vZGUgPT09IDAgJiYgIWlzSW5DaGVja05vQ2hhbmdlc1Bhc3MpO1xuICBzaG91bGRSZWZyZXNoVmlldyB8fD0gISEoZmxhZ3MgJiAxMDI0KTtcbiAgc2hvdWxkUmVmcmVzaFZpZXcgfHw9ICEhKGNvbnN1bWVyPy5kaXJ0eSAmJiBjb25zdW1lclBvbGxQcm9kdWNlcnNGb3JDaGFuZ2UoY29uc3VtZXIpKTtcbiAgc2hvdWxkUmVmcmVzaFZpZXcgfHw9ICEhKG5nRGV2TW9kZSAmJiBpc0V4aGF1c3RpdmVDaGVja05vQ2hhbmdlcygpKTtcbiAgaWYgKGNvbnN1bWVyKSB7XG4gICAgY29uc3VtZXIuZGlydHkgPSBmYWxzZTtcbiAgfVxuICBsVmlld1tGTEFHU10gJj0gfig4MTkyIHwgMTAyNCk7XG4gIGlmIChzaG91bGRSZWZyZXNoVmlldykge1xuICAgIHJlZnJlc2hWaWV3KHRWaWV3LCBsVmlldywgdFZpZXcudGVtcGxhdGUsIGxWaWV3W0NPTlRFWFRdKTtcbiAgfSBlbHNlIGlmIChmbGFncyAmIDgxOTIpIHtcbiAgICBjb25zdCBwcmV2Q29uc3VtZXIgPSBzZXRBY3RpdmVDb25zdW1lcihudWxsKTtcbiAgICB0cnkge1xuICAgICAgaWYgKCFpc0luQ2hlY2tOb0NoYW5nZXNQYXNzKSB7XG4gICAgICAgIHJ1bkVmZmVjdHNJblZpZXcobFZpZXcpO1xuICAgICAgfVxuICAgICAgZGV0ZWN0Q2hhbmdlc0luRW1iZWRkZWRWaWV3cyhsVmlldywgMSk7XG4gICAgICBjb25zdCBjb21wb25lbnRzID0gdFZpZXcuY29tcG9uZW50cztcbiAgICAgIGlmIChjb21wb25lbnRzICE9PSBudWxsKSB7XG4gICAgICAgIGRldGVjdENoYW5nZXNJbkNoaWxkQ29tcG9uZW50cyhsVmlldywgY29tcG9uZW50cywgMSk7XG4gICAgICB9XG4gICAgICBpZiAoIWlzSW5DaGVja05vQ2hhbmdlc1Bhc3MpIHtcbiAgICAgICAgYWRkQWZ0ZXJSZW5kZXJTZXF1ZW5jZXNGb3JWaWV3KGxWaWV3KTtcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2V0QWN0aXZlQ29uc3VtZXIocHJldkNvbnN1bWVyKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGRldGVjdENoYW5nZXNJbkNoaWxkQ29tcG9uZW50cyhob3N0TFZpZXcsIGNvbXBvbmVudHMsIG1vZGUpIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb21wb25lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgZGV0ZWN0Q2hhbmdlc0luQ29tcG9uZW50KGhvc3RMVmlldywgY29tcG9uZW50c1tpXSwgbW9kZSk7XG4gIH1cbn1cbmZ1bmN0aW9uIHByb2Nlc3NIb3N0QmluZGluZ09wQ29kZXModFZpZXcsIGxWaWV3KSB7XG4gIGNvbnN0IGhvc3RCaW5kaW5nT3BDb2RlcyA9IHRWaWV3Lmhvc3RCaW5kaW5nT3BDb2RlcztcbiAgaWYgKGhvc3RCaW5kaW5nT3BDb2RlcyA9PT0gbnVsbCkgcmV0dXJuO1xuICB0cnkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaG9zdEJpbmRpbmdPcENvZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBvcENvZGUgPSBob3N0QmluZGluZ09wQ29kZXNbaV07XG4gICAgICBpZiAob3BDb2RlIDwgMCkge1xuICAgICAgICBzZXRTZWxlY3RlZEluZGV4KH5vcENvZGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZGlyZWN0aXZlSWR4ID0gb3BDb2RlO1xuICAgICAgICBjb25zdCBiaW5kaW5nUm9vdEluZHggPSBob3N0QmluZGluZ09wQ29kZXNbKytpXTtcbiAgICAgICAgY29uc3QgaG9zdEJpbmRpbmdGbiA9IGhvc3RCaW5kaW5nT3BDb2Rlc1srK2ldO1xuICAgICAgICBzZXRCaW5kaW5nUm9vdEZvckhvc3RCaW5kaW5ncyhiaW5kaW5nUm9vdEluZHgsIGRpcmVjdGl2ZUlkeCk7XG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSBsVmlld1tkaXJlY3RpdmVJZHhdO1xuICAgICAgICBwcm9maWxlcihQcm9maWxlckV2ZW50Lkhvc3RCaW5kaW5nc1VwZGF0ZVN0YXJ0LCBjb250ZXh0KTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBob3N0QmluZGluZ0ZuKDIsIGNvbnRleHQpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHByb2ZpbGVyKFByb2ZpbGVyRXZlbnQuSG9zdEJpbmRpbmdzVXBkYXRlRW5kLCBjb250ZXh0KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICBzZXRTZWxlY3RlZEluZGV4KC0xKTtcbiAgfVxufVxuZnVuY3Rpb24gbWFya1ZpZXdEaXJ0eShsVmlldywgc291cmNlKSB7XG4gIGNvbnN0IGRpcnR5Qml0c1RvVXNlID0gaXNSZWZyZXNoaW5nVmlld3MoKSA/IDY0IDogMTAyNCB8IDY0O1xuICBsVmlld1tFTlZJUk9OTUVOVF0uY2hhbmdlRGV0ZWN0aW9uU2NoZWR1bGVyPy5ub3RpZnkoc291cmNlKTtcbiAgd2hpbGUgKGxWaWV3KSB7XG4gICAgbFZpZXdbRkxBR1NdIHw9IGRpcnR5Qml0c1RvVXNlO1xuICAgIGNvbnN0IHBhcmVudCA9IGdldExWaWV3UGFyZW50KGxWaWV3KTtcbiAgICBpZiAoaXNSb290VmlldyhsVmlldykgJiYgIXBhcmVudCkge1xuICAgICAgcmV0dXJuIGxWaWV3O1xuICAgIH1cbiAgICBsVmlldyA9IHBhcmVudDtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUxDb250YWluZXIoaG9zdE5hdGl2ZSwgY3VycmVudFZpZXcsIG5hdGl2ZSwgdE5vZGUpIHtcbiAgbmdEZXZNb2RlICYmIGFzc2VydExWaWV3KGN1cnJlbnRWaWV3KTtcbiAgY29uc3QgbENvbnRhaW5lciA9IFtob3N0TmF0aXZlLCB0cnVlLCAwLCBjdXJyZW50VmlldywgbnVsbCwgdE5vZGUsIG51bGwsIG5hdGl2ZSwgbnVsbCwgbnVsbF07XG4gIG5nRGV2TW9kZSAmJiBhc3NlcnRFcXVhbChsQ29udGFpbmVyLmxlbmd0aCwgQ09OVEFJTkVSX0hFQURFUl9PRkZTRVQsICdTaG91bGQgYWxsb2NhdGUgY29ycmVjdCBudW1iZXIgb2Ygc2xvdHMgZm9yIExDb250YWluZXIgaGVhZGVyLicpO1xuICByZXR1cm4gbENvbnRhaW5lcjtcbn1cbmZ1bmN0aW9uIGdldExWaWV3RnJvbUxDb250YWluZXIobENvbnRhaW5lciwgaW5kZXgpIHtcbiAgY29uc3QgYWRqdXN0ZWRJbmRleCA9IENPTlRBSU5FUl9IRUFERVJfT0ZGU0VUICsgaW5kZXg7XG4gIGlmIChhZGp1c3RlZEluZGV4IDwgbENvbnRhaW5lci5sZW5ndGgpIHtcbiAgICBjb25zdCBsVmlldyA9IGxDb250YWluZXJbYWRqdXN0ZWRJbmRleF07XG4gICAgbmdEZXZNb2RlICYmIGFzc2VydExWaWV3KGxWaWV3KTtcbiAgICByZXR1cm4gbFZpZXc7XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbmZ1bmN0aW9uIGFkZExWaWV3VG9MQ29udGFpbmVyKGxDb250YWluZXIsIGxWaWV3LCBpbmRleCwgYWRkVG9ET00gPSB0cnVlKSB7XG4gIGNvbnN0IHRWaWV3ID0gbFZpZXdbVFZJRVddO1xuICBpbnNlcnRWaWV3KHRWaWV3LCBsVmlldywgbENvbnRhaW5lciwgaW5kZXgpO1xuICBpZiAoYWRkVG9ET00pIHtcbiAgICBjb25zdCBiZWZvcmVOb2RlID0gZ2V0QmVmb3JlTm9kZUZvclZpZXcoaW5kZXgsIGxDb250YWluZXIpO1xuICAgIGNvbnN0IHJlbmRlcmVyID0gbFZpZXdbUkVOREVSRVJdO1xuICAgIGNvbnN0IHBhcmVudFJOb2RlID0gcmVuZGVyZXIucGFyZW50Tm9kZShsQ29udGFpbmVyW05BVElWRV0pO1xuICAgIGlmIChwYXJlbnRSTm9kZSAhPT0gbnVsbCkge1xuICAgICAgYWRkVmlld1RvRE9NKHRWaWV3LCBsQ29udGFpbmVyW1RfSE9TVF0sIHJlbmRlcmVyLCBsVmlldywgcGFyZW50Uk5vZGUsIGJlZm9yZU5vZGUpO1xuICAgIH1cbiAgfVxuICBjb25zdCBoeWRyYXRpb25JbmZvID0gbFZpZXdbSFlEUkFUSU9OXTtcbiAgaWYgKGh5ZHJhdGlvbkluZm8gIT09IG51bGwgJiYgaHlkcmF0aW9uSW5mby5maXJzdENoaWxkICE9PSBudWxsKSB7XG4gICAgaHlkcmF0aW9uSW5mby5maXJzdENoaWxkID0gbnVsbDtcbiAgfVxufVxuZnVuY3Rpb24gcmVtb3ZlTFZpZXdGcm9tTENvbnRhaW5lcihsQ29udGFpbmVyLCBpbmRleCkge1xuICBjb25zdCBsVmlldyA9IGRldGFjaFZpZXcobENvbnRhaW5lciwgaW5kZXgpO1xuICBpZiAobFZpZXcgIT09IHVuZGVmaW5lZCkge1xuICAgIGRlc3Ryb3lMVmlldyhsVmlld1tUVklFV10sIGxWaWV3KTtcbiAgfVxuICByZXR1cm4gbFZpZXc7XG59XG5mdW5jdGlvbiBkZXRhY2hWaWV3KGxDb250YWluZXIsIHJlbW92ZUluZGV4KSB7XG4gIGlmIChsQ29udGFpbmVyLmxlbmd0aCA8PSBDT05UQUlORVJfSEVBREVSX09GRlNFVCkgcmV0dXJuO1xuICBjb25zdCBpbmRleEluQ29udGFpbmVyID0gQ09OVEFJTkVSX0hFQURFUl9PRkZTRVQgKyByZW1vdmVJbmRleDtcbiAgY29uc3Qgdmlld1RvRGV0YWNoID0gbENvbnRhaW5lcltpbmRleEluQ29udGFpbmVyXTtcbiAgaWYgKHZpZXdUb0RldGFjaCkge1xuICAgIGNvbnN0IGRlY2xhcmF0aW9uTENvbnRhaW5lciA9IHZpZXdUb0RldGFjaFtERUNMQVJBVElPTl9MQ09OVEFJTkVSXTtcbiAgICBpZiAoZGVjbGFyYXRpb25MQ29udGFpbmVyICE9PSBudWxsICYmIGRlY2xhcmF0aW9uTENvbnRhaW5lciAhPT0gbENvbnRhaW5lcikge1xuICAgICAgZGV0YWNoTW92ZWRWaWV3KGRlY2xhcmF0aW9uTENvbnRhaW5lciwgdmlld1RvRGV0YWNoKTtcbiAgICB9XG4gICAgaWYgKHJlbW92ZUluZGV4ID4gMCkge1xuICAgICAgbENvbnRhaW5lcltpbmRleEluQ29udGFpbmVyIC0gMV1bTkVYVF0gPSB2aWV3VG9EZXRhY2hbTkVYVF07XG4gICAgfVxuICAgIGNvbnN0IHJlbW92ZWRMVmlldyA9IHJlbW92ZUZyb21BcnJheShsQ29udGFpbmVyLCBDT05UQUlORVJfSEVBREVSX09GRlNFVCArIHJlbW92ZUluZGV4KTtcbiAgICByZW1vdmVWaWV3RnJvbURPTSh2aWV3VG9EZXRhY2hbVFZJRVddLCB2aWV3VG9EZXRhY2gpO1xuICAgIGNvbnN0IGxRdWVyaWVzID0gcmVtb3ZlZExWaWV3W1FVRVJJRVNdO1xuICAgIGlmIChsUXVlcmllcyAhPT0gbnVsbCkge1xuICAgICAgbFF1ZXJpZXMuZGV0YWNoVmlldyhyZW1vdmVkTFZpZXdbVFZJRVddKTtcbiAgICB9XG4gICAgdmlld1RvRGV0YWNoW1BBUkVOVF0gPSBudWxsO1xuICAgIHZpZXdUb0RldGFjaFtORVhUXSA9IG51bGw7XG4gICAgdmlld1RvRGV0YWNoW0ZMQUdTXSAmPSB+MTI4O1xuICB9XG4gIHJldHVybiB2aWV3VG9EZXRhY2g7XG59XG5mdW5jdGlvbiBpbnNlcnRWaWV3KHRWaWV3LCBsVmlldywgbENvbnRhaW5lciwgaW5kZXgpIHtcbiAgbmdEZXZNb2RlICYmIGFzc2VydExWaWV3KGxWaWV3KTtcbiAgbmdEZXZNb2RlICYmIGFzc2VydExDb250YWluZXIobENvbnRhaW5lcik7XG4gIGNvbnN0IGluZGV4SW5Db250YWluZXIgPSBDT05UQUlORVJfSEVBREVSX09GRlNFVCArIGluZGV4O1xuICBjb25zdCBjb250YWluZXJMZW5ndGggPSBsQ29udGFpbmVyLmxlbmd0aDtcbiAgaWYgKGluZGV4ID4gMCkge1xuICAgIGxDb250YWluZXJbaW5kZXhJbkNvbnRhaW5lciAtIDFdW05FWFRdID0gbFZpZXc7XG4gIH1cbiAgaWYgKGluZGV4IDwgY29udGFpbmVyTGVuZ3RoIC0gQ09OVEFJTkVSX0hFQURFUl9PRkZTRVQpIHtcbiAgICBsVmlld1tORVhUXSA9IGxDb250YWluZXJbaW5kZXhJbkNvbnRhaW5lcl07XG4gICAgYWRkVG9BcnJheShsQ29udGFpbmVyLCBDT05UQUlORVJfSEVBREVSX09GRlNFVCArIGluZGV4LCBsVmlldyk7XG4gIH0gZWxzZSB7XG4gICAgbENvbnRhaW5lci5wdXNoKGxWaWV3KTtcbiAgICBsVmlld1tORVhUXSA9IG51bGw7XG4gIH1cbiAgbFZpZXdbUEFSRU5UXSA9IGxDb250YWluZXI7XG4gIGNvbnN0IGRlY2xhcmF0aW9uTENvbnRhaW5lciA9IGxWaWV3W0RFQ0xBUkFUSU9OX0xDT05UQUlORVJdO1xuICBpZiAoZGVjbGFyYXRpb25MQ29udGFpbmVyICE9PSBudWxsICYmIGxDb250YWluZXIgIT09IGRlY2xhcmF0aW9uTENvbnRhaW5lcikge1xuICAgIHRyYWNrTW92ZWRWaWV3KGRlY2xhcmF0aW9uTENvbnRhaW5lciwgbFZpZXcpO1xuICB9XG4gIGNvbnN0IGxRdWVyaWVzID0gbFZpZXdbUVVFUklFU107XG4gIGlmIChsUXVlcmllcyAhPT0gbnVsbCkge1xuICAgIGxRdWVyaWVzLmluc2VydFZpZXcodFZpZXcpO1xuICB9XG4gIHVwZGF0ZUFuY2VzdG9yVHJhdmVyc2FsRmxhZ3NPbkF0dGFjaChsVmlldyk7XG4gIGxWaWV3W0ZMQUdTXSB8PSAxMjg7XG59XG5mdW5jdGlvbiB0cmFja01vdmVkVmlldyhkZWNsYXJhdGlvbkNvbnRhaW5lciwgbFZpZXcpIHtcbiAgbmdEZXZNb2RlICYmIGFzc2VydERlZmluZWQobFZpZXcsICdMVmlldyByZXF1aXJlZCcpO1xuICBuZ0Rldk1vZGUgJiYgYXNzZXJ0TENvbnRhaW5lcihkZWNsYXJhdGlvbkNvbnRhaW5lcik7XG4gIGNvbnN0IG1vdmVkVmlld3MgPSBkZWNsYXJhdGlvbkNvbnRhaW5lcltNT1ZFRF9WSUVXU107XG4gIGNvbnN0IHBhcmVudCA9IGxWaWV3W1BBUkVOVF07XG4gIG5nRGV2TW9kZSAmJiBhc3NlcnREZWZpbmVkKHBhcmVudCwgJ21pc3NpbmcgcGFyZW50Jyk7XG4gIGlmIChpc0xWaWV3KHBhcmVudCkpIHtcbiAgICBkZWNsYXJhdGlvbkNvbnRhaW5lcltGTEFHU10gfD0gMjtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBpbnNlcnRlZENvbXBvbmVudExWaWV3ID0gcGFyZW50W1BBUkVOVF1bREVDTEFSQVRJT05fQ09NUE9ORU5UX1ZJRVddO1xuICAgIG5nRGV2TW9kZSAmJiBhc3NlcnREZWZpbmVkKGluc2VydGVkQ29tcG9uZW50TFZpZXcsICdNaXNzaW5nIGluc2VydGVkQ29tcG9uZW50TFZpZXcnKTtcbiAgICBjb25zdCBkZWNsYXJlZENvbXBvbmVudExWaWV3ID0gbFZpZXdbREVDTEFSQVRJT05fQ09NUE9ORU5UX1ZJRVddO1xuICAgIG5nRGV2TW9kZSAmJiBhc3NlcnREZWZpbmVkKGRlY2xhcmVkQ29tcG9uZW50TFZpZXcsICdNaXNzaW5nIGRlY2xhcmVkQ29tcG9uZW50TFZpZXcnKTtcbiAgICBpZiAoZGVjbGFyZWRDb21wb25lbnRMVmlldyAhPT0gaW5zZXJ0ZWRDb21wb25lbnRMVmlldykge1xuICAgICAgZGVjbGFyYXRpb25Db250YWluZXJbRkxBR1NdIHw9IDI7XG4gICAgfVxuICB9XG4gIGlmIChtb3ZlZFZpZXdzID09PSBudWxsKSB7XG4gICAgZGVjbGFyYXRpb25Db250YWluZXJbTU9WRURfVklFV1NdID0gW2xWaWV3XTtcbiAgfSBlbHNlIHtcbiAgICBtb3ZlZFZpZXdzLnB1c2gobFZpZXcpO1xuICB9XG59XG5jbGFzcyBWaWV3UmVmIHtcbiAgX2xWaWV3O1xuICBfY2RSZWZJbmplY3RpbmdWaWV3O1xuICBfYXBwUmVmID0gbnVsbDtcbiAgX2F0dGFjaGVkVG9WaWV3Q29udGFpbmVyID0gZmFsc2U7XG4gIGV4aGF1c3RpdmU7XG4gIGdldCByb290Tm9kZXMoKSB7XG4gICAgY29uc3QgbFZpZXcgPSB0aGlzLl9sVmlldztcbiAgICBjb25zdCB0VmlldyA9IGxWaWV3W1RWSUVXXTtcbiAgICByZXR1cm4gY29sbGVjdE5hdGl2ZU5vZGVzKHRWaWV3LCBsVmlldywgdFZpZXcuZmlyc3RDaGlsZCwgW10pO1xuICB9XG4gIGNvbnN0cnVjdG9yKF9sVmlldywgX2NkUmVmSW5qZWN0aW5nVmlldykge1xuICAgIHRoaXMuX2xWaWV3ID0gX2xWaWV3O1xuICAgIHRoaXMuX2NkUmVmSW5qZWN0aW5nVmlldyA9IF9jZFJlZkluamVjdGluZ1ZpZXc7XG4gIH1cbiAgZ2V0IGNvbnRleHQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2xWaWV3W0NPTlRFWFRdO1xuICB9XG4gIHNldCBjb250ZXh0KHZhbHVlKSB7XG4gICAgaWYgKG5nRGV2TW9kZSkge1xuICAgICAgY29uc29sZS53YXJuKCdBbmd1bGFyOiBSZXBsYWNpbmcgdGhlIGBjb250ZXh0YCBvYmplY3Qgb2YgYW4gYEVtYmVkZGVkVmlld1JlZmAgaXMgZGVwcmVjYXRlZC4nKTtcbiAgICB9XG4gICAgdGhpcy5fbFZpZXdbQ09OVEVYVF0gPSB2YWx1ZTtcbiAgfVxuICBnZXQgZGVzdHJveWVkKCkge1xuICAgIHJldHVybiBpc0Rlc3Ryb3llZCh0aGlzLl9sVmlldyk7XG4gIH1cbiAgZGVzdHJveSgpIHtcbiAgICBpZiAodGhpcy5fYXBwUmVmKSB7XG4gICAgICB0aGlzLl9hcHBSZWYuZGV0YWNoVmlldyh0aGlzKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuX2F0dGFjaGVkVG9WaWV3Q29udGFpbmVyKSB7XG4gICAgICBjb25zdCBwYXJlbnQgPSB0aGlzLl9sVmlld1tQQVJFTlRdO1xuICAgICAgaWYgKGlzTENvbnRhaW5lcihwYXJlbnQpKSB7XG4gICAgICAgIGNvbnN0IHZpZXdSZWZzID0gcGFyZW50W1ZJRVdfUkVGU107XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdmlld1JlZnMgPyB2aWV3UmVmcy5pbmRleE9mKHRoaXMpIDogLTE7XG4gICAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgICAgbmdEZXZNb2RlICYmIGFzc2VydEVxdWFsKGluZGV4LCBwYXJlbnQuaW5kZXhPZih0aGlzLl9sVmlldykgLSBDT05UQUlORVJfSEVBREVSX09GRlNFVCwgJ0FuIGF0dGFjaGVkIHZpZXcgc2hvdWxkIGJlIGluIHRoZSBzYW1lIHBvc2l0aW9uIHdpdGhpbiBpdHMgY29udGFpbmVyIGFzIGl0cyBWaWV3UmVmIGluIHRoZSBWSUVXX1JFRlMgYXJyYXkuJyk7XG4gICAgICAgICAgZGV0YWNoVmlldyhwYXJlbnQsIGluZGV4KTtcbiAgICAgICAgICByZW1vdmVGcm9tQXJyYXkodmlld1JlZnMsIGluZGV4KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5fYXR0YWNoZWRUb1ZpZXdDb250YWluZXIgPSBmYWxzZTtcbiAgICB9XG4gICAgZGVzdHJveUxWaWV3KHRoaXMuX2xWaWV3W1RWSUVXXSwgdGhpcy5fbFZpZXcpO1xuICB9XG4gIG9uRGVzdHJveShjYWxsYmFjaykge1xuICAgIHN0b3JlTFZpZXdPbkRlc3Ryb3kodGhpcy5fbFZpZXcsIGNhbGxiYWNrKTtcbiAgfVxuICBtYXJrRm9yQ2hlY2soKSB7XG4gICAgbWFya1ZpZXdEaXJ0eSh0aGlzLl9jZFJlZkluamVjdGluZ1ZpZXcgfHwgdGhpcy5fbFZpZXcsIDQpO1xuICB9XG4gIGRldGFjaCgpIHtcbiAgICB0aGlzLl9sVmlld1tGTEFHU10gJj0gfjEyODtcbiAgfVxuICByZWF0dGFjaCgpIHtcbiAgICB1cGRhdGVBbmNlc3RvclRyYXZlcnNhbEZsYWdzT25BdHRhY2godGhpcy5fbFZpZXcpO1xuICAgIHRoaXMuX2xWaWV3W0ZMQUdTXSB8PSAxMjg7XG4gIH1cbiAgZGV0ZWN0Q2hhbmdlcygpIHtcbiAgICB0aGlzLl9sVmlld1tGTEFHU10gfD0gMTAyNDtcbiAgICBkZXRlY3RDaGFuZ2VzSW50ZXJuYWwodGhpcy5fbFZpZXcpO1xuICB9XG4gIGNoZWNrTm9DaGFuZ2VzKCkge1xuICAgIGlmIChuZ0Rldk1vZGUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMuZXhoYXVzdGl2ZSA/Pz0gdGhpcy5fbFZpZXdbSU5KRUNUT1JdLmdldChVc2VFeGhhdXN0aXZlQ2hlY2tOb0NoYW5nZXMsIFVTRV9FWEhBVVNUSVZFX0NIRUNLX05PX0NIQU5HRVNfREVGQVVMVCk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgdGhpcy5leGhhdXN0aXZlID0gVVNFX0VYSEFVU1RJVkVfQ0hFQ0tfTk9fQ0hBTkdFU19ERUZBVUxUO1xuICAgICAgfVxuICAgICAgY2hlY2tOb0NoYW5nZXNJbnRlcm5hbCh0aGlzLl9sVmlldywgdGhpcy5leGhhdXN0aXZlKTtcbiAgICB9XG4gIH1cbiAgYXR0YWNoVG9WaWV3Q29udGFpbmVyUmVmKCkge1xuICAgIGlmICh0aGlzLl9hcHBSZWYpIHtcbiAgICAgIHRocm93IG5ldyBSdW50aW1lRXJyb3IoOTAyLCBuZ0Rldk1vZGUgJiYgJ1RoaXMgdmlldyBpcyBhbHJlYWR5IGF0dGFjaGVkIGRpcmVjdGx5IHRvIHRoZSBBcHBsaWNhdGlvblJlZiEnKTtcbiAgICB9XG4gICAgdGhpcy5fYXR0YWNoZWRUb1ZpZXdDb250YWluZXIgPSB0cnVlO1xuICB9XG4gIGRldGFjaEZyb21BcHBSZWYoKSB7XG4gICAgdGhpcy5fYXBwUmVmID0gbnVsbDtcbiAgICBjb25zdCBpc1Jvb3QgPSBpc1Jvb3RWaWV3KHRoaXMuX2xWaWV3KTtcbiAgICBjb25zdCBkZWNsYXJhdGlvbkNvbnRhaW5lciA9IHRoaXMuX2xWaWV3W0RFQ0xBUkFUSU9OX0xDT05UQUlORVJdO1xuICAgIGlmIChkZWNsYXJhdGlvbkNvbnRhaW5lciAhPT0gbnVsbCAmJiAhaXNSb290KSB7XG4gICAgICBkZXRhY2hNb3ZlZFZpZXcoZGVjbGFyYXRpb25Db250YWluZXIsIHRoaXMuX2xWaWV3KTtcbiAgICB9XG4gICAgZGV0YWNoVmlld0Zyb21ET00odGhpcy5fbFZpZXdbVFZJRVddLCB0aGlzLl9sVmlldyk7XG4gIH1cbiAgYXR0YWNoVG9BcHBSZWYoYXBwUmVmKSB7XG4gICAgaWYgKHRoaXMuX2F0dGFjaGVkVG9WaWV3Q29udGFpbmVyKSB7XG4gICAgICB0aHJvdyBuZXcgUnVudGltZUVycm9yKDkwMiwgbmdEZXZNb2RlICYmICdUaGlzIHZpZXcgaXMgYWxyZWFkeSBhdHRhY2hlZCB0byBhIFZpZXdDb250YWluZXIhJyk7XG4gICAgfVxuICAgIHRoaXMuX2FwcFJlZiA9IGFwcFJlZjtcbiAgICBjb25zdCBpc1Jvb3QgPSBpc1Jvb3RWaWV3KHRoaXMuX2xWaWV3KTtcbiAgICBjb25zdCBkZWNsYXJhdGlvbkNvbnRhaW5lciA9IHRoaXMuX2xWaWV3W0RFQ0xBUkFUSU9OX0xDT05UQUlORVJdO1xuICAgIGlmIChkZWNsYXJhdGlvbkNvbnRhaW5lciAhPT0gbnVsbCAmJiAhaXNSb290KSB7XG4gICAgICB0cmFja01vdmVkVmlldyhkZWNsYXJhdGlvbkNvbnRhaW5lciwgdGhpcy5fbFZpZXcpO1xuICAgIH1cbiAgICB1cGRhdGVBbmNlc3RvclRyYXZlcnNhbEZsYWdzT25BdHRhY2godGhpcy5fbFZpZXcpO1xuICB9XG59XG5mdW5jdGlvbiBpc1ZpZXdEaXJ0eSh2aWV3KSB7XG4gIHJldHVybiByZXF1aXJlc1JlZnJlc2hPclRyYXZlcnNhbCh2aWV3Ll9sVmlldykgfHwgISEodmlldy5fbFZpZXdbRkxBR1NdICYgNjQpO1xufVxuZnVuY3Rpb24gbWFya0ZvclJlZnJlc2godmlldykge1xuICBtYXJrVmlld0ZvclJlZnJlc2godmlldy5fbFZpZXcpO1xufVxubGV0IFRlbXBsYXRlUmVmID0gLyojX19QVVJFX18qLygoKSA9PiB7XG4gIGNsYXNzIFRlbXBsYXRlUmVmIHtcbiAgICBfZGVjbGFyYXRpb25MVmlldztcbiAgICBfZGVjbGFyYXRpb25UQ29udGFpbmVyO1xuICAgIGVsZW1lbnRSZWY7XG4gICAgc3RhdGljIF9fTkdfRUxFTUVOVF9JRF9fID0gaW5qZWN0VGVtcGxhdGVSZWY7XG4gICAgY29uc3RydWN0b3IoX2RlY2xhcmF0aW9uTFZpZXcsIF9kZWNsYXJhdGlvblRDb250YWluZXIsIGVsZW1lbnRSZWYpIHtcbiAgICAgIHRoaXMuX2RlY2xhcmF0aW9uTFZpZXcgPSBfZGVjbGFyYXRpb25MVmlldztcbiAgICAgIHRoaXMuX2RlY2xhcmF0aW9uVENvbnRhaW5lciA9IF9kZWNsYXJhdGlvblRDb250YWluZXI7XG4gICAgICB0aGlzLmVsZW1lbnRSZWYgPSBlbGVtZW50UmVmO1xuICAgIH1cbiAgICBnZXQgc3NySWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZGVjbGFyYXRpb25UQ29udGFpbmVyLnRWaWV3Py5zc3JJZCB8fCBudWxsO1xuICAgIH1cbiAgICBjcmVhdGVFbWJlZGRlZFZpZXcoY29udGV4dCwgaW5qZWN0b3IpIHtcbiAgICAgIHJldHVybiB0aGlzLmNyZWF0ZUVtYmVkZGVkVmlld0ltcGwoY29udGV4dCwgaW5qZWN0b3IpO1xuICAgIH1cbiAgICBjcmVhdGVFbWJlZGRlZFZpZXdJbXBsKGNvbnRleHQsIGluamVjdG9yLCBkZWh5ZHJhdGVkVmlldykge1xuICAgICAgY29uc3QgZW1iZWRkZWRMVmlldyA9IGNyZWF0ZUFuZFJlbmRlckVtYmVkZGVkTFZpZXcodGhpcy5fZGVjbGFyYXRpb25MVmlldywgdGhpcy5fZGVjbGFyYXRpb25UQ29udGFpbmVyLCBjb250ZXh0LCB7XG4gICAgICAgIGVtYmVkZGVkVmlld0luamVjdG9yOiBpbmplY3RvcixcbiAgICAgICAgZGVoeWRyYXRlZFZpZXdcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIG5ldyBWaWV3UmVmKGVtYmVkZGVkTFZpZXcpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gVGVtcGxhdGVSZWY7XG59KSgpO1xuZnVuY3Rpb24gaW5qZWN0VGVtcGxhdGVSZWYoKSB7XG4gIHJldHVybiBjcmVhdGVUZW1wbGF0ZVJlZihnZXRDdXJyZW50VE5vZGUoKSwgZ2V0TFZpZXcoKSk7XG59XG5mdW5jdGlvbiBjcmVhdGVUZW1wbGF0ZVJlZihob3N0VE5vZGUsIGhvc3RMVmlldykge1xuICBpZiAoaG9zdFROb2RlLnR5cGUgJiA0KSB7XG4gICAgbmdEZXZNb2RlICYmIGFzc2VydERlZmluZWQoaG9zdFROb2RlLnRWaWV3LCAnVFZpZXcgbXVzdCBiZSBhbGxvY2F0ZWQnKTtcbiAgICByZXR1cm4gbmV3IFRlbXBsYXRlUmVmKGhvc3RMVmlldywgaG9zdFROb2RlLCBjcmVhdGVFbGVtZW50UmVmKGhvc3RUTm9kZSwgaG9zdExWaWV3KSk7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5jb25zdCBBVF9USElTX0xPQ0FUSU9OID0gJzwtLSBBVCBUSElTIExPQ0FUSU9OJztcbmZ1bmN0aW9uIGdldEZyaWVuZGx5U3RyaW5nRnJvbVROb2RlVHlwZSh0Tm9kZVR5cGUpIHtcbiAgc3dpdGNoICh0Tm9kZVR5cGUpIHtcbiAgICBjYXNlIDQ6XG4gICAgICByZXR1cm4gJ3ZpZXcgY29udGFpbmVyJztcbiAgICBjYXNlIDI6XG4gICAgICByZXR1cm4gJ2VsZW1lbnQnO1xuICAgIGNhc2UgODpcbiAgICAgIHJldHVybiAnbmctY29udGFpbmVyJztcbiAgICBjYXNlIDMyOlxuICAgICAgcmV0dXJuICdpY3UnO1xuICAgIGNhc2UgNjQ6XG4gICAgICByZXR1cm4gJ2kxOG4nO1xuICAgIGNhc2UgMTY6XG4gICAgICByZXR1cm4gJ3Byb2plY3Rpb24nO1xuICAgIGNhc2UgMTpcbiAgICAgIHJldHVybiAndGV4dCc7XG4gICAgY2FzZSAxMjg6XG4gICAgICByZXR1cm4gJ0BsZXQnO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gJzx1bmtub3duPic7XG4gIH1cbn1cbmZ1bmN0aW9uIHZhbGlkYXRlTWF0Y2hpbmdOb2RlKG5vZGUsIG5vZGVUeXBlLCB0YWdOYW1lLCBsVmlldywgdE5vZGUsIGlzVmlld0NvbnRhaW5lckFuY2hvciA9IGZhbHNlKSB7XG4gIGlmICghbm9kZSB8fCBub2RlLm5vZGVUeXBlICE9PSBub2RlVHlwZSB8fCBub2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSAmJiBub2RlLnRhZ05hbWUudG9Mb3dlckNhc2UoKSAhPT0gdGFnTmFtZT8udG9Mb3dlckNhc2UoKSkge1xuICAgIGNvbnN0IGV4cGVjdGVkTm9kZSA9IHNob3J0Uk5vZGVEZXNjcmlwdGlvbihub2RlVHlwZSwgdGFnTmFtZSwgbnVsbCk7XG4gICAgbGV0IGhlYWRlciA9IGBEdXJpbmcgaHlkcmF0aW9uIEFuZ3VsYXIgZXhwZWN0ZWQgJHtleHBlY3RlZE5vZGV9IGJ1dCBgO1xuICAgIGNvbnN0IGhvc3RDb21wb25lbnREZWYgPSBnZXREZWNsYXJhdGlvbkNvbXBvbmVudERlZihsVmlldyk7XG4gICAgY29uc3QgY29tcG9uZW50Q2xhc3NOYW1lID0gaG9zdENvbXBvbmVudERlZj8udHlwZT8ubmFtZTtcbiAgICBjb25zdCBleHBlY3RlZERvbSA9IGRlc2NyaWJlRXhwZWN0ZWREb20obFZpZXcsIHROb2RlLCBpc1ZpZXdDb250YWluZXJBbmNob3IpO1xuICAgIGNvbnN0IGV4cGVjdGVkID0gYEFuZ3VsYXIgZXhwZWN0ZWQgdGhpcyBET006XFxuXFxuJHtleHBlY3RlZERvbX1cXG5cXG5gO1xuICAgIGxldCBhY3R1YWwgPSAnJztcbiAgICBjb25zdCBjb21wb25lbnRIb3N0RWxlbWVudCA9IHVud3JhcFJOb2RlKGxWaWV3W0hPU1RdKTtcbiAgICBpZiAoIW5vZGUpIHtcbiAgICAgIGhlYWRlciArPSBgdGhlIG5vZGUgd2FzIG5vdCBmb3VuZC5cXG5cXG5gO1xuICAgICAgbWFya1JOb2RlQXNIYXZpbmdIeWRyYXRpb25NaXNtYXRjaChjb21wb25lbnRIb3N0RWxlbWVudCwgZXhwZWN0ZWREb20pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBhY3R1YWxOb2RlID0gc2hvcnRSTm9kZURlc2NyaXB0aW9uKG5vZGUubm9kZVR5cGUsIG5vZGUudGFnTmFtZSA/PyBudWxsLCBub2RlLnRleHRDb250ZW50ID8/IG51bGwpO1xuICAgICAgaGVhZGVyICs9IGBmb3VuZCAke2FjdHVhbE5vZGV9LlxcblxcbmA7XG4gICAgICBjb25zdCBhY3R1YWxEb20gPSBkZXNjcmliZURvbUZyb21Ob2RlKG5vZGUpO1xuICAgICAgYWN0dWFsID0gYEFjdHVhbCBET00gaXM6XFxuXFxuJHthY3R1YWxEb219XFxuXFxuYDtcbiAgICAgIG1hcmtSTm9kZUFzSGF2aW5nSHlkcmF0aW9uTWlzbWF0Y2goY29tcG9uZW50SG9zdEVsZW1lbnQsIGV4cGVjdGVkRG9tLCBhY3R1YWxEb20pO1xuICAgIH1cbiAgICBjb25zdCBmb290ZXIgPSBnZXRIeWRyYXRpb25FcnJvckZvb3Rlcihjb21wb25lbnRDbGFzc05hbWUpO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBoZWFkZXIgKyBleHBlY3RlZCArIGFjdHVhbCArIGdldEh5ZHJhdGlvbkF0dHJpYnV0ZU5vdGUoKSArIGZvb3RlcjtcbiAgICB0aHJvdyBuZXcgUnVudGltZUVycm9yKC01MDAsIG1lc3NhZ2UpO1xuICB9XG59XG5mdW5jdGlvbiB2YWxpZGF0ZVNpYmxpbmdOb2RlRXhpc3RzKG5vZGUpIHtcbiAgdmFsaWRhdGVOb2RlRXhpc3RzKG5vZGUpO1xuICBpZiAoIW5vZGUubmV4dFNpYmxpbmcpIHtcbiAgICBjb25zdCBoZWFkZXIgPSAnRHVyaW5nIGh5ZHJhdGlvbiBBbmd1bGFyIGV4cGVjdGVkIG1vcmUgc2libGluZyBub2RlcyB0byBiZSBwcmVzZW50Llxcblxcbic7XG4gICAgY29uc3QgYWN0dWFsID0gYEFjdHVhbCBET00gaXM6XFxuXFxuJHtkZXNjcmliZURvbUZyb21Ob2RlKG5vZGUpfVxcblxcbmA7XG4gICAgY29uc3QgZm9vdGVyID0gZ2V0SHlkcmF0aW9uRXJyb3JGb290ZXIoKTtcbiAgICBjb25zdCBtZXNzYWdlID0gaGVhZGVyICsgYWN0dWFsICsgZm9vdGVyO1xuICAgIG1hcmtSTm9kZUFzSGF2aW5nSHlkcmF0aW9uTWlzbWF0Y2gobm9kZSwgJycsIGFjdHVhbCk7XG4gICAgdGhyb3cgbmV3IFJ1bnRpbWVFcnJvcigtNTAxLCBtZXNzYWdlKTtcbiAgfVxufVxuZnVuY3Rpb24gdmFsaWRhdGVOb2RlRXhpc3RzKG5vZGUsIGxWaWV3ID0gbnVsbCwgdE5vZGUgPSBudWxsKSB7XG4gIGlmICghbm9kZSkge1xuICAgIGNvbnN0IGhlYWRlciA9ICdEdXJpbmcgaHlkcmF0aW9uLCBBbmd1bGFyIGV4cGVjdGVkIGFuIGVsZW1lbnQgdG8gYmUgcHJlc2VudCBhdCB0aGlzIGxvY2F0aW9uLlxcblxcbic7XG4gICAgbGV0IGV4cGVjdGVkID0gJyc7XG4gICAgbGV0IGZvb3RlciA9ICcnO1xuICAgIGlmIChsVmlldyAhPT0gbnVsbCAmJiB0Tm9kZSAhPT0gbnVsbCkge1xuICAgICAgZXhwZWN0ZWQgPSBkZXNjcmliZUV4cGVjdGVkRG9tKGxWaWV3LCB0Tm9kZSwgZmFsc2UpO1xuICAgICAgZm9vdGVyID0gZ2V0SHlkcmF0aW9uRXJyb3JGb290ZXIoKTtcbiAgICAgIG1hcmtSTm9kZUFzSGF2aW5nSHlkcmF0aW9uTWlzbWF0Y2godW53cmFwUk5vZGUobFZpZXdbSE9TVF0pLCBleHBlY3RlZCwgJycpO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgUnVudGltZUVycm9yKC01MDIsIGAke2hlYWRlcn0ke2V4cGVjdGVkfVxcblxcbiR7Zm9vdGVyfWApO1xuICB9XG59XG5mdW5jdGlvbiBub2RlTm90Rm91bmRFcnJvcihsVmlldywgdE5vZGUpIHtcbiAgY29uc3QgaGVhZGVyID0gJ0R1cmluZyBzZXJpYWxpemF0aW9uLCBBbmd1bGFyIHdhcyB1bmFibGUgdG8gZmluZCBhbiBlbGVtZW50IGluIHRoZSBET006XFxuXFxuJztcbiAgY29uc3QgZXhwZWN0ZWQgPSBgJHtkZXNjcmliZUV4cGVjdGVkRG9tKGxWaWV3LCB0Tm9kZSwgZmFsc2UpfVxcblxcbmA7XG4gIGNvbnN0IGZvb3RlciA9IGdldEh5ZHJhdGlvbkVycm9yRm9vdGVyKCk7XG4gIHRocm93IG5ldyBSdW50aW1lRXJyb3IoLTUwMiwgaGVhZGVyICsgZXhwZWN0ZWQgKyBmb290ZXIpO1xufVxuZnVuY3Rpb24gbm9kZU5vdEZvdW5kQXRQYXRoRXJyb3IoaG9zdCwgcGF0aCkge1xuICBjb25zdCBoZWFkZXIgPSBgRHVyaW5nIGh5ZHJhdGlvbiBBbmd1bGFyIHdhcyB1bmFibGUgdG8gbG9jYXRlIGEgbm9kZSBgICsgYHVzaW5nIHRoZSBcIiR7cGF0aH1cIiBwYXRoLCBzdGFydGluZyBmcm9tIHRoZSAke2Rlc2NyaWJlUk5vZGUoaG9zdCl9IG5vZGUuXFxuXFxuYDtcbiAgY29uc3QgZm9vdGVyID0gZ2V0SHlkcmF0aW9uRXJyb3JGb290ZXIoKTtcbiAgbWFya1JOb2RlQXNIYXZpbmdIeWRyYXRpb25NaXNtYXRjaChob3N0KTtcbiAgdGhyb3cgbmV3IFJ1bnRpbWVFcnJvcigtNTAyLCBoZWFkZXIgKyBmb290ZXIpO1xufVxuZnVuY3Rpb24gdW5zdXBwb3J0ZWRQcm9qZWN0aW9uT2ZEb21Ob2RlcyhyTm9kZSkge1xuICBjb25zdCBoZWFkZXIgPSAnRHVyaW5nIHNlcmlhbGl6YXRpb24sIEFuZ3VsYXIgZGV0ZWN0ZWQgRE9NIG5vZGVzICcgKyAndGhhdCB3ZXJlIGNyZWF0ZWQgb3V0c2lkZSBvZiBBbmd1bGFyIGNvbnRleHQgYW5kIHByb3ZpZGVkIGFzIHByb2plY3RhYmxlIG5vZGVzICcgKyAnKGxpa2VseSB2aWEgYFZpZXdDb250YWluZXJSZWYuY3JlYXRlQ29tcG9uZW50YCBvciBgY3JlYXRlQ29tcG9uZW50YCBBUElzKS4gJyArICdIeWRyYXRpb24gaXMgbm90IHN1cHBvcnRlZCBmb3Igc3VjaCBjYXNlcywgY29uc2lkZXIgcmVmYWN0b3JpbmcgdGhlIGNvZGUgdG8gYXZvaWQgJyArICd0aGlzIHBhdHRlcm4gb3IgdXNpbmcgYG5nU2tpcEh5ZHJhdGlvbmAgb24gdGhlIGhvc3QgZWxlbWVudCBvZiB0aGUgY29tcG9uZW50Llxcblxcbic7XG4gIGNvbnN0IGFjdHVhbCA9IGAke2Rlc2NyaWJlRG9tRnJvbU5vZGUock5vZGUpfVxcblxcbmA7XG4gIGNvbnN0IG1lc3NhZ2UgPSBoZWFkZXIgKyBhY3R1YWwgKyBnZXRIeWRyYXRpb25BdHRyaWJ1dGVOb3RlKCk7XG4gIHJldHVybiBuZXcgUnVudGltZUVycm9yKC01MDMsIG1lc3NhZ2UpO1xufVxuZnVuY3Rpb24gaW52YWxpZFNraXBIeWRyYXRpb25Ib3N0KHJOb2RlKSB7XG4gIGNvbnN0IGhlYWRlciA9ICdUaGUgYG5nU2tpcEh5ZHJhdGlvbmAgZmxhZyBpcyBhcHBsaWVkIG9uIGEgbm9kZSAnICsgXCJ0aGF0IGRvZXNuJ3QgYWN0IGFzIGEgY29tcG9uZW50IGhvc3QuIEh5ZHJhdGlvbiBjYW4gYmUgXCIgKyAnc2tpcHBlZCBvbmx5IG9uIHBlci1jb21wb25lbnQgYmFzaXMuXFxuXFxuJztcbiAgY29uc3QgYWN0dWFsID0gYCR7ZGVzY3JpYmVEb21Gcm9tTm9kZShyTm9kZSl9XFxuXFxuYDtcbiAgY29uc3QgZm9vdGVyID0gJ1BsZWFzZSBtb3ZlIHRoZSBgbmdTa2lwSHlkcmF0aW9uYCBhdHRyaWJ1dGUgdG8gdGhlIGNvbXBvbmVudCBob3N0IGVsZW1lbnQuXFxuXFxuJztcbiAgY29uc3QgbWVzc2FnZSA9IGhlYWRlciArIGFjdHVhbCArIGZvb3RlcjtcbiAgcmV0dXJuIG5ldyBSdW50aW1lRXJyb3IoLTUwNCwgbWVzc2FnZSk7XG59XG5mdW5jdGlvbiBzdHJpbmdpZnlUTm9kZUF0dHJzKHROb2RlKSB7XG4gIGNvbnN0IHJlc3VsdHMgPSBbXTtcbiAgaWYgKHROb2RlLmF0dHJzKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0Tm9kZS5hdHRycy5sZW5ndGg7KSB7XG4gICAgICBjb25zdCBhdHRyTmFtZSA9IHROb2RlLmF0dHJzW2krK107XG4gICAgICBpZiAodHlwZW9mIGF0dHJOYW1lID09ICdudW1iZXInKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY29uc3QgYXR0clZhbHVlID0gdE5vZGUuYXR0cnNbaSsrXTtcbiAgICAgIHJlc3VsdHMucHVzaChgJHthdHRyTmFtZX09XCIke3Nob3J0ZW4oYXR0clZhbHVlKX1cImApO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0cy5qb2luKCcgJyk7XG59XG5jb25zdCBpbnRlcm5hbEF0dHJzID0gLyojX19QVVJFX18qL25ldyBTZXQoWyduZ2gnLCAnbmctdmVyc2lvbicsICduZy1zZXJ2ZXItY29udGV4dCddKTtcbmZ1bmN0aW9uIHN0cmluZ2lmeVJOb2RlQXR0cnMock5vZGUpIHtcbiAgY29uc3QgcmVzdWx0cyA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHJOb2RlLmF0dHJpYnV0ZXMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBhdHRyID0gck5vZGUuYXR0cmlidXRlc1tpXTtcbiAgICBpZiAoaW50ZXJuYWxBdHRycy5oYXMoYXR0ci5uYW1lKSkgY29udGludWU7XG4gICAgcmVzdWx0cy5wdXNoKGAke2F0dHIubmFtZX09XCIke3Nob3J0ZW4oYXR0ci52YWx1ZSl9XCJgKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0cy5qb2luKCcgJyk7XG59XG5mdW5jdGlvbiBkZXNjcmliZVROb2RlKHROb2RlLCBpbm5lckNvbnRlbnQgPSAn4oCmJykge1xuICBzd2l0Y2ggKHROb2RlLnR5cGUpIHtcbiAgICBjYXNlIDE6XG4gICAgICBjb25zdCBjb250ZW50ID0gdE5vZGUudmFsdWUgPyBgKCR7dE5vZGUudmFsdWV9KWAgOiAnJztcbiAgICAgIHJldHVybiBgI3RleHQke2NvbnRlbnR9YDtcbiAgICBjYXNlIDI6XG4gICAgICBjb25zdCBhdHRycyA9IHN0cmluZ2lmeVROb2RlQXR0cnModE5vZGUpO1xuICAgICAgY29uc3QgdGFnID0gdE5vZGUudmFsdWUudG9Mb3dlckNhc2UoKTtcbiAgICAgIHJldHVybiBgPCR7dGFnfSR7YXR0cnMgPyAnICcgKyBhdHRycyA6ICcnfT4ke2lubmVyQ29udGVudH08LyR7dGFnfT5gO1xuICAgIGNhc2UgODpcbiAgICAgIHJldHVybiAnPCEtLSBuZy1jb250YWluZXIgLS0+JztcbiAgICBjYXNlIDQ6XG4gICAgICByZXR1cm4gJzwhLS0gY29udGFpbmVyIC0tPic7XG4gICAgZGVmYXVsdDpcbiAgICAgIGNvbnN0IHR5cGVBc1N0cmluZyA9IGdldEZyaWVuZGx5U3RyaW5nRnJvbVROb2RlVHlwZSh0Tm9kZS50eXBlKTtcbiAgICAgIHJldHVybiBgI25vZGUoJHt0eXBlQXNTdHJpbmd9KWA7XG4gIH1cbn1cbmZ1bmN0aW9uIGRlc2NyaWJlUk5vZGUock5vZGUsIGlubmVyQ29udGVudCA9ICfigKYnKSB7XG4gIGNvbnN0IG5vZGUgPSByTm9kZTtcbiAgc3dpdGNoIChub2RlLm5vZGVUeXBlKSB7XG4gICAgY2FzZSBOb2RlLkVMRU1FTlRfTk9ERTpcbiAgICAgIGNvbnN0IHRhZyA9IG5vZGUudGFnTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgY29uc3QgYXR0cnMgPSBzdHJpbmdpZnlSTm9kZUF0dHJzKG5vZGUpO1xuICAgICAgcmV0dXJuIGA8JHt0YWd9JHthdHRycyA/ICcgJyArIGF0dHJzIDogJyd9PiR7aW5uZXJDb250ZW50fTwvJHt0YWd9PmA7XG4gICAgY2FzZSBOb2RlLlRFWFRfTk9ERTpcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSBub2RlLnRleHRDb250ZW50ID8gc2hvcnRlbihub2RlLnRleHRDb250ZW50KSA6ICcnO1xuICAgICAgcmV0dXJuIGAjdGV4dCR7Y29udGVudCA/IGAoJHtjb250ZW50fSlgIDogJyd9YDtcbiAgICBjYXNlIE5vZGUuQ09NTUVOVF9OT0RFOlxuICAgICAgcmV0dXJuIGA8IS0tICR7c2hvcnRlbihub2RlLnRleHRDb250ZW50ID8/ICcnKX0gLS0+YDtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGAjbm9kZSgke25vZGUubm9kZVR5cGV9KWA7XG4gIH1cbn1cbmZ1bmN0aW9uIGRlc2NyaWJlRXhwZWN0ZWREb20obFZpZXcsIHROb2RlLCBpc1ZpZXdDb250YWluZXJBbmNob3IpIHtcbiAgY29uc3Qgc3BhY2VyID0gJyAgJztcbiAgbGV0IGNvbnRlbnQgPSAnJztcbiAgaWYgKHROb2RlLnByZXYpIHtcbiAgICBjb250ZW50ICs9IHNwYWNlciArICfigKZcXG4nO1xuICAgIGNvbnRlbnQgKz0gc3BhY2VyICsgZGVzY3JpYmVUTm9kZSh0Tm9kZS5wcmV2KSArICdcXG4nO1xuICB9IGVsc2UgaWYgKHROb2RlLnR5cGUgJiYgdE5vZGUudHlwZSAmIDEyKSB7XG4gICAgY29udGVudCArPSBzcGFjZXIgKyAn4oCmXFxuJztcbiAgfVxuICBpZiAoaXNWaWV3Q29udGFpbmVyQW5jaG9yKSB7XG4gICAgY29udGVudCArPSBzcGFjZXIgKyBkZXNjcmliZVROb2RlKHROb2RlKSArICdcXG4nO1xuICAgIGNvbnRlbnQgKz0gc3BhY2VyICsgYDwhLS0gY29udGFpbmVyIC0tPiAgJHtBVF9USElTX0xPQ0FUSU9OfVxcbmA7XG4gIH0gZWxzZSB7XG4gICAgY29udGVudCArPSBzcGFjZXIgKyBkZXNjcmliZVROb2RlKHROb2RlKSArIGAgICR7QVRfVEhJU19MT0NBVElPTn1cXG5gO1xuICB9XG4gIGNvbnRlbnQgKz0gc3BhY2VyICsgJ+KAplxcbic7XG4gIGNvbnN0IHBhcmVudFJOb2RlID0gdE5vZGUudHlwZSA/IGdldFBhcmVudFJFbGVtZW50KGxWaWV3W1RWSUVXXSwgdE5vZGUsIGxWaWV3KSA6IG51bGw7XG4gIGlmIChwYXJlbnRSTm9kZSkge1xuICAgIGNvbnRlbnQgPSBkZXNjcmliZVJOb2RlKHBhcmVudFJOb2RlLCAnXFxuJyArIGNvbnRlbnQpO1xuICB9XG4gIHJldHVybiBjb250ZW50O1xufVxuZnVuY3Rpb24gZGVzY3JpYmVEb21Gcm9tTm9kZShub2RlKSB7XG4gIGNvbnN0IHNwYWNlciA9ICcgICc7XG4gIGxldCBjb250ZW50ID0gJyc7XG4gIGNvbnN0IGN1cnJlbnROb2RlID0gbm9kZTtcbiAgaWYgKGN1cnJlbnROb2RlLnByZXZpb3VzU2libGluZykge1xuICAgIGNvbnRlbnQgKz0gc3BhY2VyICsgJ+KAplxcbic7XG4gICAgY29udGVudCArPSBzcGFjZXIgKyBkZXNjcmliZVJOb2RlKGN1cnJlbnROb2RlLnByZXZpb3VzU2libGluZykgKyAnXFxuJztcbiAgfVxuICBjb250ZW50ICs9IHNwYWNlciArIGRlc2NyaWJlUk5vZGUoY3VycmVudE5vZGUpICsgYCAgJHtBVF9USElTX0xPQ0FUSU9OfVxcbmA7XG4gIGlmIChub2RlLm5leHRTaWJsaW5nKSB7XG4gICAgY29udGVudCArPSBzcGFjZXIgKyAn4oCmXFxuJztcbiAgfVxuICBpZiAobm9kZS5wYXJlbnROb2RlKSB7XG4gICAgY29udGVudCA9IGRlc2NyaWJlUk5vZGUoY3VycmVudE5vZGUucGFyZW50Tm9kZSwgJ1xcbicgKyBjb250ZW50KTtcbiAgfVxuICByZXR1cm4gY29udGVudDtcbn1cbmZ1bmN0aW9uIHNob3J0Uk5vZGVEZXNjcmlwdGlvbihub2RlVHlwZSwgdGFnTmFtZSwgdGV4dENvbnRlbnQpIHtcbiAgc3dpdGNoIChub2RlVHlwZSkge1xuICAgIGNhc2UgTm9kZS5FTEVNRU5UX05PREU6XG4gICAgICByZXR1cm4gYDwke3RhZ05hbWUudG9Mb3dlckNhc2UoKX0+YDtcbiAgICBjYXNlIE5vZGUuVEVYVF9OT0RFOlxuICAgICAgY29uc3QgY29udGVudCA9IHRleHRDb250ZW50ID8gYCAod2l0aCB0aGUgXCIke3Nob3J0ZW4odGV4dENvbnRlbnQpfVwiIGNvbnRlbnQpYCA6ICcnO1xuICAgICAgcmV0dXJuIGBhIHRleHQgbm9kZSR7Y29udGVudH1gO1xuICAgIGNhc2UgTm9kZS5DT01NRU5UX05PREU6XG4gICAgICByZXR1cm4gJ2EgY29tbWVudCBub2RlJztcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGAjbm9kZShub2RlVHlwZT0ke25vZGVUeXBlfSlgO1xuICB9XG59XG5mdW5jdGlvbiBnZXRIeWRyYXRpb25FcnJvckZvb3Rlcihjb21wb25lbnRDbGFzc05hbWUpIHtcbiAgY29uc3QgY29tcG9uZW50SW5mbyA9IGNvbXBvbmVudENsYXNzTmFtZSA/IGB0aGUgXCIke2NvbXBvbmVudENsYXNzTmFtZX1cImAgOiAnY29ycmVzcG9uZGluZyc7XG4gIHJldHVybiBgVG8gZml4IHRoaXMgcHJvYmxlbTpcXG5gICsgYCAgKiBjaGVjayAke2NvbXBvbmVudEluZm99IGNvbXBvbmVudCBmb3IgaHlkcmF0aW9uLXJlbGF0ZWQgaXNzdWVzXFxuYCArIGAgICogY2hlY2sgdG8gc2VlIGlmIHlvdXIgdGVtcGxhdGUgaGFzIHZhbGlkIEhUTUwgc3RydWN0dXJlXFxuYCArIGAgICogb3Igc2tpcCBoeWRyYXRpb24gYnkgYWRkaW5nIHRoZSBcXGBuZ1NraXBIeWRyYXRpb25cXGAgYXR0cmlidXRlIGAgKyBgdG8gaXRzIGhvc3Qgbm9kZSBpbiBhIHRlbXBsYXRlXFxuXFxuYDtcbn1cbmZ1bmN0aW9uIGdldEh5ZHJhdGlvbkF0dHJpYnV0ZU5vdGUoKSB7XG4gIHJldHVybiAnTm90ZTogYXR0cmlidXRlcyBhcmUgb25seSBkaXNwbGF5ZWQgdG8gYmV0dGVyIHJlcHJlc2VudCB0aGUgRE9NJyArICcgYnV0IGhhdmUgbm8gZWZmZWN0IG9uIGh5ZHJhdGlvbiBtaXNtYXRjaGVzLlxcblxcbic7XG59XG5mdW5jdGlvbiBzdHJpcE5ld2xpbmVzKGlucHV0KSB7XG4gIHJldHVybiBpbnB1dC5yZXBsYWNlKC9cXHMrL2dtLCAnJyk7XG59XG5mdW5jdGlvbiBzaG9ydGVuKGlucHV0LCBtYXhMZW5ndGggPSA1MCkge1xuICBpZiAoIWlucHV0KSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG4gIGlucHV0ID0gc3RyaXBOZXdsaW5lcyhpbnB1dCk7XG4gIHJldHVybiBpbnB1dC5sZW5ndGggPiBtYXhMZW5ndGggPyBgJHtpbnB1dC5zdWJzdHJpbmcoMCwgbWF4TGVuZ3RoIC0gMSl94oCmYCA6IGlucHV0O1xufVxuZnVuY3Rpb24gZ2V0SW5zZXJ0SW5Gcm9udE9mUk5vZGVXaXRoSTE4bihwYXJlbnRUTm9kZSwgY3VycmVudFROb2RlLCBsVmlldykge1xuICBjb25zdCB0Tm9kZUluc2VydEJlZm9yZUluZGV4ID0gY3VycmVudFROb2RlLmluc2VydEJlZm9yZUluZGV4O1xuICBjb25zdCBpbnNlcnRCZWZvcmVJbmRleCA9IEFycmF5LmlzQXJyYXkodE5vZGVJbnNlcnRCZWZvcmVJbmRleCkgPyB0Tm9kZUluc2VydEJlZm9yZUluZGV4WzBdIDogdE5vZGVJbnNlcnRCZWZvcmVJbmRleDtcbiAgaWYgKGluc2VydEJlZm9yZUluZGV4ID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGdldEluc2VydEluRnJvbnRPZlJOb2RlV2l0aE5vSTE4bihwYXJlbnRUTm9kZSwgY3VycmVudFROb2RlLCBsVmlldyk7XG4gIH0gZWxzZSB7XG4gICAgbmdEZXZNb2RlICYmIGFzc2VydEluZGV4SW5SYW5nZShsVmlldywgaW5zZXJ0QmVmb3JlSW5kZXgpO1xuICAgIHJldHVybiB1bndyYXBSTm9kZShsVmlld1tpbnNlcnRCZWZvcmVJbmRleF0pO1xuICB9XG59XG5mdW5jdGlvbiBwcm9jZXNzSTE4bkluc2VydEJlZm9yZShyZW5kZXJlciwgY2hpbGRUTm9kZSwgbFZpZXcsIGNoaWxkUk5vZGUsIHBhcmVudFJFbGVtZW50KSB7XG4gIGNvbnN0IHROb2RlSW5zZXJ0QmVmb3JlSW5kZXggPSBjaGlsZFROb2RlLmluc2VydEJlZm9yZUluZGV4O1xuICBpZiAoQXJyYXkuaXNBcnJheSh0Tm9kZUluc2VydEJlZm9yZUluZGV4KSkge1xuICAgIG5nRGV2TW9kZSAmJiBhc3NlcnREb21Ob2RlKGNoaWxkUk5vZGUpO1xuICAgIGxldCBpMThuUGFyZW50ID0gY2hpbGRSTm9kZTtcbiAgICBsZXQgYW5jaG9yUk5vZGUgPSBudWxsO1xuICAgIGlmICghKGNoaWxkVE5vZGUudHlwZSAmIDMpKSB7XG4gICAgICBhbmNob3JSTm9kZSA9IGkxOG5QYXJlbnQ7XG4gICAgICBpMThuUGFyZW50ID0gcGFyZW50UkVsZW1lbnQ7XG4gICAgfVxuICAgIGlmIChpMThuUGFyZW50ICE9PSBudWxsICYmIGNoaWxkVE5vZGUuY29tcG9uZW50T2Zmc2V0ID09PSAtMSkge1xuICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCB0Tm9kZUluc2VydEJlZm9yZUluZGV4Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGkxOG5DaGlsZCA9IGxWaWV3W3ROb2RlSW5zZXJ0QmVmb3JlSW5kZXhbaV1dO1xuICAgICAgICBuYXRpdmVJbnNlcnRCZWZvcmUocmVuZGVyZXIsIGkxOG5QYXJlbnQsIGkxOG5DaGlsZCwgYW5jaG9yUk5vZGUsIGZhbHNlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGdldE9yQ3JlYXRlVE5vZGUodFZpZXcsIGluZGV4LCB0eXBlLCBuYW1lLCBhdHRycykge1xuICBuZ0Rldk1vZGUgJiYgaW5kZXggIT09IDAgJiYgYXNzZXJ0R3JlYXRlclRoYW5PckVxdWFsKGluZGV4LCBIRUFERVJfT0ZGU0VULCBcIlROb2RlcyBjYW4ndCBiZSBpbiB0aGUgTFZpZXcgaGVhZGVyLlwiKTtcbiAgbmdEZXZNb2RlICYmIGFzc2VydFB1cmVUTm9kZVR5cGUodHlwZSk7XG4gIGxldCB0Tm9kZSA9IHRWaWV3LmRhdGFbaW5kZXhdO1xuICBpZiAodE5vZGUgPT09IG51bGwpIHtcbiAgICB0Tm9kZSA9IGNyZWF0ZVROb2RlQXRJbmRleCh0VmlldywgaW5kZXgsIHR5cGUsIG5hbWUsIGF0dHJzKTtcbiAgICBpZiAoaXNJbkkxOG5CbG9jaygpKSB7XG4gICAgICB0Tm9kZS5mbGFncyB8PSAzMjtcbiAgICB9XG4gIH0gZWxzZSBpZiAodE5vZGUudHlwZSAmIDY0KSB7XG4gICAgdE5vZGUudHlwZSA9IHR5cGU7XG4gICAgdE5vZGUudmFsdWUgPSBuYW1lO1xuICAgIHROb2RlLmF0dHJzID0gYXR0cnM7XG4gICAgY29uc3QgcGFyZW50ID0gZ2V0Q3VycmVudFBhcmVudFROb2RlKCk7XG4gICAgdE5vZGUuaW5qZWN0b3JJbmRleCA9IHBhcmVudCA9PT0gbnVsbCA/IC0xIDogcGFyZW50LmluamVjdG9ySW5kZXg7XG4gICAgbmdEZXZNb2RlICYmIGFzc2VydFROb2RlRm9yVFZpZXcodE5vZGUsIHRWaWV3KTtcbiAgICBuZ0Rldk1vZGUgJiYgYXNzZXJ0RXF1YWwoaW5kZXgsIHROb2RlLmluZGV4LCAnRXhwZWN0aW5nIHNhbWUgaW5kZXgnKTtcbiAgfVxuICBzZXRDdXJyZW50VE5vZGUodE5vZGUsIHRydWUpO1xuICByZXR1cm4gdE5vZGU7XG59XG5mdW5jdGlvbiBjcmVhdGVUTm9kZUF0SW5kZXgodFZpZXcsIGluZGV4LCB0eXBlLCBuYW1lLCBhdHRycykge1xuICBjb25zdCBjdXJyZW50VE5vZGUgPSBnZXRDdXJyZW50VE5vZGVQbGFjZWhvbGRlck9rKCk7XG4gIGNvbnN0IGlzUGFyZW50ID0gaXNDdXJyZW50VE5vZGVQYXJlbnQoKTtcbiAgY29uc3QgcGFyZW50ID0gaXNQYXJlbnQgPyBjdXJyZW50VE5vZGUgOiBjdXJyZW50VE5vZGUgJiYgY3VycmVudFROb2RlLnBhcmVudDtcbiAgY29uc3QgdE5vZGUgPSB0Vmlldy5kYXRhW2luZGV4XSA9IGNyZWF0ZVROb2RlKHRWaWV3LCBwYXJlbnQsIHR5cGUsIGluZGV4LCBuYW1lLCBhdHRycyk7XG4gIGxpbmtUTm9kZUluVFZpZXcodFZpZXcsIHROb2RlLCBjdXJyZW50VE5vZGUsIGlzUGFyZW50KTtcbiAgcmV0dXJuIHROb2RlO1xufVxuZnVuY3Rpb24gbGlua1ROb2RlSW5UVmlldyh0VmlldywgdE5vZGUsIGN1cnJlbnRUTm9kZSwgaXNQYXJlbnQpIHtcbiAgaWYgKHRWaWV3LmZpcnN0Q2hpbGQgPT09IG51bGwpIHtcbiAgICB0Vmlldy5maXJzdENoaWxkID0gdE5vZGU7XG4gIH1cbiAgaWYgKGN1cnJlbnRUTm9kZSAhPT0gbnVsbCkge1xuICAgIGlmIChpc1BhcmVudCkge1xuICAgICAgaWYgKGN1cnJlbnRUTm9kZS5jaGlsZCA9PSBudWxsICYmIHROb2RlLnBhcmVudCAhPT0gbnVsbCkge1xuICAgICAgICBjdXJyZW50VE5vZGUuY2hpbGQgPSB0Tm9kZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGN1cnJlbnRUTm9kZS5uZXh0ID09PSBudWxsKSB7XG4gICAgICAgIGN1cnJlbnRUTm9kZS5uZXh0ID0gdE5vZGU7XG4gICAgICAgIHROb2RlLnByZXYgPSBjdXJyZW50VE5vZGU7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBjcmVhdGVUTm9kZSh0VmlldywgdFBhcmVudCwgdHlwZSwgaW5kZXgsIHZhbHVlLCBhdHRycykge1xuICBuZ0Rldk1vZGUgJiYgaW5kZXggIT09IDAgJiYgYXNzZXJ0R3JlYXRlclRoYW5PckVxdWFsKGluZGV4LCBIRUFERVJfT0ZGU0VULCBcIlROb2RlcyBjYW4ndCBiZSBpbiB0aGUgTFZpZXcgaGVhZGVyLlwiKTtcbiAgbmdEZXZNb2RlICYmIGFzc2VydE5vdFNhbWUoYXR0cnMsIHVuZGVmaW5lZCwgXCIndW5kZWZpbmVkJyBpcyBub3QgdmFsaWQgdmFsdWUgZm9yICdhdHRycydcIik7XG4gIG5nRGV2TW9kZSAmJiB0UGFyZW50ICYmIGFzc2VydFROb2RlRm9yVFZpZXcodFBhcmVudCwgdFZpZXcpO1xuICBsZXQgaW5qZWN0b3JJbmRleCA9IHRQYXJlbnQgPyB0UGFyZW50LmluamVjdG9ySW5kZXggOiAtMTtcbiAgbGV0IGZsYWdzID0gMDtcbiAgaWYgKGlzSW5Ta2lwSHlkcmF0aW9uQmxvY2skMSgpKSB7XG4gICAgZmxhZ3MgfD0gMTI4O1xuICB9XG4gIGNvbnN0IHROb2RlID0ge1xuICAgIHR5cGUsXG4gICAgaW5kZXgsXG4gICAgaW5zZXJ0QmVmb3JlSW5kZXg6IG51bGwsXG4gICAgaW5qZWN0b3JJbmRleCxcbiAgICBkaXJlY3RpdmVTdGFydDogLTEsXG4gICAgZGlyZWN0aXZlRW5kOiAtMSxcbiAgICBkaXJlY3RpdmVTdHlsaW5nTGFzdDogLTEsXG4gICAgY29tcG9uZW50T2Zmc2V0OiAtMSxcbiAgICBjb250cm9sRGlyZWN0aXZlSW5kZXg6IC0xLFxuICAgIGN1c3RvbUNvbnRyb2xJbmRleDogLTEsXG4gICAgcHJvcGVydHlCaW5kaW5nczogbnVsbCxcbiAgICBmbGFncyxcbiAgICBwcm92aWRlckluZGV4ZXM6IDAsXG4gICAgdmFsdWU6IHZhbHVlLFxuICAgIGF0dHJzOiBhdHRycyxcbiAgICBtZXJnZWRBdHRyczogbnVsbCxcbiAgICBsb2NhbE5hbWVzOiBudWxsLFxuICAgIGluaXRpYWxJbnB1dHM6IG51bGwsXG4gICAgaW5wdXRzOiBudWxsLFxuICAgIGhvc3REaXJlY3RpdmVJbnB1dHM6IG51bGwsXG4gICAgb3V0cHV0czogbnVsbCxcbiAgICBob3N0RGlyZWN0aXZlT3V0cHV0czogbnVsbCxcbiAgICBkaXJlY3RpdmVUb0luZGV4OiBudWxsLFxuICAgIHRWaWV3OiBudWxsLFxuICAgIG5leHQ6IG51bGwsXG4gICAgcHJldjogbnVsbCxcbiAgICBwcm9qZWN0aW9uTmV4dDogbnVsbCxcbiAgICBjaGlsZDogbnVsbCxcbiAgICBwYXJlbnQ6IHRQYXJlbnQsXG4gICAgcHJvamVjdGlvbjogbnVsbCxcbiAgICBzdHlsZXM6IG51bGwsXG4gICAgc3R5bGVzV2l0aG91dEhvc3Q6IG51bGwsXG4gICAgcmVzaWR1YWxTdHlsZXM6IHVuZGVmaW5lZCxcbiAgICBjbGFzc2VzOiBudWxsLFxuICAgIGNsYXNzZXNXaXRob3V0SG9zdDogbnVsbCxcbiAgICByZXNpZHVhbENsYXNzZXM6IHVuZGVmaW5lZCxcbiAgICBjbGFzc0JpbmRpbmdzOiAwLFxuICAgIHN0eWxlQmluZGluZ3M6IDBcbiAgfTtcbiAgaWYgKG5nRGV2TW9kZSkge1xuICAgIE9iamVjdC5zZWFsKHROb2RlKTtcbiAgfVxuICByZXR1cm4gdE5vZGU7XG59XG5mdW5jdGlvbiBhZGRUTm9kZUFuZFVwZGF0ZUluc2VydEJlZm9yZUluZGV4KHByZXZpb3VzVE5vZGVzLCBuZXdUTm9kZSkge1xuICBuZ0Rldk1vZGUgJiYgYXNzZXJ0RXF1YWwobmV3VE5vZGUuaW5zZXJ0QmVmb3JlSW5kZXgsIG51bGwsICdXZSBleHBlY3QgdGhhdCBpbnNlcnRCZWZvcmVJbmRleCBpcyBub3Qgc2V0Jyk7XG4gIHByZXZpb3VzVE5vZGVzLnB1c2gobmV3VE5vZGUpO1xuICBpZiAocHJldmlvdXNUTm9kZXMubGVuZ3RoID4gMSkge1xuICAgIGZvciAobGV0IGkgPSBwcmV2aW91c1ROb2Rlcy5sZW5ndGggLSAyOyBpID49IDA7IGktLSkge1xuICAgICAgY29uc3QgZXhpc3RpbmdUTm9kZSA9IHByZXZpb3VzVE5vZGVzW2ldO1xuICAgICAgaWYgKCFpc0kxOG5UZXh0KGV4aXN0aW5nVE5vZGUpKSB7XG4gICAgICAgIGlmIChpc05ld1ROb2RlQ3JlYXRlZEJlZm9yZShleGlzdGluZ1ROb2RlLCBuZXdUTm9kZSkgJiYgZ2V0SW5zZXJ0QmVmb3JlSW5kZXgoZXhpc3RpbmdUTm9kZSkgPT09IG51bGwpIHtcbiAgICAgICAgICBzZXRJbnNlcnRCZWZvcmVJbmRleChleGlzdGluZ1ROb2RlLCBuZXdUTm9kZS5pbmRleCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGlzSTE4blRleHQodE5vZGUpIHtcbiAgcmV0dXJuICEodE5vZGUudHlwZSAmIDY0KTtcbn1cbmZ1bmN0aW9uIGlzTmV3VE5vZGVDcmVhdGVkQmVmb3JlKGV4aXN0aW5nVE5vZGUsIG5ld1ROb2RlKSB7XG4gIHJldHVybiBpc0kxOG5UZXh0KG5ld1ROb2RlKSB8fCBleGlzdGluZ1ROb2RlLmluZGV4ID4gbmV3VE5vZGUuaW5kZXg7XG59XG5mdW5jdGlvbiBnZXRJbnNlcnRCZWZvcmVJbmRleCh0Tm9kZSkge1xuICBjb25zdCBpbmRleCA9IHROb2RlLmluc2VydEJlZm9yZUluZGV4O1xuICByZXR1cm4gQXJyYXkuaXNBcnJheShpbmRleCkgPyBpbmRleFswXSA6IGluZGV4O1xufVxuZnVuY3Rpb24gc2V0SW5zZXJ0QmVmb3JlSW5kZXgodE5vZGUsIHZhbHVlKSB7XG4gIGNvbnN0IGluZGV4ID0gdE5vZGUuaW5zZXJ0QmVmb3JlSW5kZXg7XG4gIGlmIChBcnJheS5pc0FycmF5KGluZGV4KSkge1xuICAgIGluZGV4WzBdID0gdmFsdWU7XG4gIH0gZWxzZSB7XG4gICAgc2V0STE4bkhhbmRsaW5nKGdldEluc2VydEluRnJvbnRPZlJOb2RlV2l0aEkxOG4sIHByb2Nlc3NJMThuSW5zZXJ0QmVmb3JlKTtcbiAgICB0Tm9kZS5pbnNlcnRCZWZvcmVJbmRleCA9IHZhbHVlO1xuICB9XG59XG5mdW5jdGlvbiBnZXRUSWN1KHRWaWV3LCBpbmRleCkge1xuICBjb25zdCB2YWx1ZSA9IHRWaWV3LmRhdGFbaW5kZXhdO1xuICBpZiAodmFsdWUgPT09IG51bGwgfHwgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykgcmV0dXJuIG51bGw7XG4gIGlmIChuZ0Rldk1vZGUgJiYgISh2YWx1ZS5oYXNPd25Qcm9wZXJ0eSgndFZpZXcnKSB8fCB2YWx1ZS5oYXNPd25Qcm9wZXJ0eSgnY3VycmVudENhc2VMVmlld0luZGV4JykpKSB7XG4gICAgdGhyb3dFcnJvcihcIldlIGV4cGVjdCB0byBnZXQgJ251bGwnfCdUSWN1J3wnVEljdUNvbnRhaW5lcicsIGJ1dCBnb3Q6IFwiICsgdmFsdWUpO1xuICB9XG4gIGNvbnN0IHRJY3UgPSB2YWx1ZS5oYXNPd25Qcm9wZXJ0eSgnY3VycmVudENhc2VMVmlld0luZGV4JykgPyB2YWx1ZSA6IHZhbHVlLnZhbHVlO1xuICBuZ0Rldk1vZGUgJiYgYXNzZXJ0VEljdSh0SWN1KTtcbiAgcmV0dXJuIHRJY3U7XG59XG5mdW5jdGlvbiBzZXRUSWN1KHRWaWV3LCBpbmRleCwgdEljdSkge1xuICBjb25zdCB0Tm9kZSA9IHRWaWV3LmRhdGFbaW5kZXhdO1xuICBuZ0Rldk1vZGUgJiYgYXNzZXJ0RXF1YWwodE5vZGUgPT09IG51bGwgfHwgdE5vZGUuaGFzT3duUHJvcGVydHkoJ3RWaWV3JyksIHRydWUsIFwiV2UgZXhwZWN0IHRvIGdldCAnbnVsbCd8J1RJY3VDb250YWluZXInXCIpO1xuICBpZiAodE5vZGUgPT09IG51bGwpIHtcbiAgICB0Vmlldy5kYXRhW2luZGV4XSA9IHRJY3U7XG4gIH0gZWxzZSB7XG4gICAgbmdEZXZNb2RlICYmIGFzc2VydFROb2RlVHlwZSh0Tm9kZSwgMzIpO1xuICAgIHROb2RlLnZhbHVlID0gdEljdTtcbiAgfVxufVxuZnVuY3Rpb24gc2V0VE5vZGVJbnNlcnRCZWZvcmVJbmRleCh0Tm9kZSwgaW5kZXgpIHtcbiAgbmdEZXZNb2RlICYmIGFzc2VydFROb2RlKHROb2RlKTtcbiAgbGV0IGluc2VydEJlZm9yZUluZGV4ID0gdE5vZGUuaW5zZXJ0QmVmb3JlSW5kZXg7XG4gIGlmIChpbnNlcnRCZWZvcmVJbmRleCA9PT0gbnVsbCkge1xuICAgIHNldEkxOG5IYW5kbGluZyhnZXRJbnNlcnRJbkZyb250T2ZSTm9kZVdpdGhJMThuLCBwcm9jZXNzSTE4bkluc2VydEJlZm9yZSk7XG4gICAgaW5zZXJ0QmVmb3JlSW5kZXggPSB0Tm9kZS5pbnNlcnRCZWZvcmVJbmRleCA9IFtudWxsLCBpbmRleF07XG4gIH0gZWxzZSB7XG4gICAgYXNzZXJ0RXF1YWwoQXJyYXkuaXNBcnJheShpbnNlcnRCZWZvcmVJbmRleCksIHRydWUsICdFeHBlY3RpbmcgYXJyYXkgaGVyZScpO1xuICAgIGluc2VydEJlZm9yZUluZGV4LnB1c2goaW5kZXgpO1xuICB9XG59XG5mdW5jdGlvbiBjcmVhdGVUTm9kZVBsYWNlaG9sZGVyKHRWaWV3LCBwcmV2aW91c1ROb2RlcywgaW5kZXgpIHtcbiAgY29uc3QgdE5vZGUgPSBjcmVhdGVUTm9kZUF0SW5kZXgodFZpZXcsIGluZGV4LCA2NCwgbnVsbCwgbnVsbCk7XG4gIGFkZFROb2RlQW5kVXBkYXRlSW5zZXJ0QmVmb3JlSW5kZXgocHJldmlvdXNUTm9kZXMsIHROb2RlKTtcbiAgcmV0dXJuIHROb2RlO1xufVxuZnVuY3Rpb24gZ2V0Q3VycmVudElDVUNhc2VJbmRleCh0SWN1LCBsVmlldykge1xuICBjb25zdCBjdXJyZW50Q2FzZSA9IGxWaWV3W3RJY3UuY3VycmVudENhc2VMVmlld0luZGV4XTtcbiAgcmV0dXJuIGN1cnJlbnRDYXNlID09PSBudWxsID8gY3VycmVudENhc2UgOiBjdXJyZW50Q2FzZSA8IDAgPyB+Y3VycmVudENhc2UgOiBjdXJyZW50Q2FzZTtcbn1cbmZ1bmN0aW9uIGdldFBhcmVudEZyb21JY3VDcmVhdGVPcENvZGUobWVyZ2VkQ29kZSkge1xuICByZXR1cm4gbWVyZ2VkQ29kZSA+Pj4gMTc7XG59XG5mdW5jdGlvbiBnZXRSZWZGcm9tSWN1Q3JlYXRlT3BDb2RlKG1lcmdlZENvZGUpIHtcbiAgcmV0dXJuIChtZXJnZWRDb2RlICYgMTMxMDcwKSA+Pj4gMTtcbn1cbmZ1bmN0aW9uIGdldEluc3RydWN0aW9uRnJvbUljdUNyZWF0ZU9wQ29kZShtZXJnZWRDb2RlKSB7XG4gIHJldHVybiBtZXJnZWRDb2RlICYgMTtcbn1cbmZ1bmN0aW9uIGljdUNyZWF0ZU9wQ29kZShvcENvZGUsIHBhcmVudElkeCwgcmVmSWR4KSB7XG4gIG5nRGV2TW9kZSAmJiBhc3NlcnRHcmVhdGVyVGhhbk9yRXF1YWwocGFyZW50SWR4LCAwLCAnTWlzc2luZyBwYXJlbnQgaW5kZXgnKTtcbiAgbmdEZXZNb2RlICYmIGFzc2VydEdyZWF0ZXJUaGFuKHJlZklkeCwgMCwgJ01pc3NpbmcgcmVmIGluZGV4Jyk7XG4gIHJldHVybiBvcENvZGUgfCBwYXJlbnRJZHggPDwgMTcgfCByZWZJZHggPDwgMTtcbn1cbmZ1bmN0aW9uIGlzUm9vdFRlbXBsYXRlTWVzc2FnZShzdWJUZW1wbGF0ZUluZGV4KSB7XG4gIHJldHVybiBzdWJUZW1wbGF0ZUluZGV4ID09PSAtMTtcbn1cbmZ1bmN0aW9uIGVudGVySWN1KHN0YXRlLCB0SWN1LCBsVmlldykge1xuICBzdGF0ZS5pbmRleCA9IDA7XG4gIGNvbnN0IGN1cnJlbnRDYXNlID0gZ2V0Q3VycmVudElDVUNhc2VJbmRleCh0SWN1LCBsVmlldyk7XG4gIGlmIChjdXJyZW50Q2FzZSAhPT0gbnVsbCkge1xuICAgIG5nRGV2TW9kZSAmJiBhc3NlcnROdW1iZXJJblJhbmdlKGN1cnJlbnRDYXNlLCAwLCB0SWN1LmNhc2VzLmxlbmd0aCAtIDEpO1xuICAgIHN0YXRlLnJlbW92ZXMgPSB0SWN1LnJlbW92ZVtjdXJyZW50Q2FzZV07XG4gIH0gZWxzZSB7XG4gICAgc3RhdGUucmVtb3ZlcyA9IEVNUFRZX0FSUkFZO1xuICB9XG59XG5mdW5jdGlvbiBpY3VDb250YWluZXJJdGVyYXRvck5leHQoc3RhdGUpIHtcbiAgaWYgKHN0YXRlLmluZGV4IDwgc3RhdGUucmVtb3Zlcy5sZW5ndGgpIHtcbiAgICBjb25zdCByZW1vdmVPcENvZGUgPSBzdGF0ZS5yZW1vdmVzW3N0YXRlLmluZGV4KytdO1xuICAgIG5nRGV2TW9kZSAmJiBhc3NlcnROdW1iZXIocmVtb3ZlT3BDb2RlLCAnRXhwZWN0aW5nIE9wQ29kZSBudW1iZXInKTtcbiAgICBpZiAocmVtb3ZlT3BDb2RlID4gMCkge1xuICAgICAgY29uc3Qgck5vZGUgPSBzdGF0ZS5sVmlld1tyZW1vdmVPcENvZGVdO1xuICAgICAgbmdEZXZNb2RlICYmIGFzc2VydERvbU5vZGUock5vZGUpO1xuICAgICAgcmV0dXJuIHJOb2RlO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0ZS5zdGFjay5wdXNoKHN0YXRlLmluZGV4LCBzdGF0ZS5yZW1vdmVzKTtcbiAgICAgIGNvbnN0IHRJY3VJbmRleCA9IH5yZW1vdmVPcENvZGU7XG4gICAgICBjb25zdCB0SWN1ID0gc3RhdGUubFZpZXdbVFZJRVddLmRhdGFbdEljdUluZGV4XTtcbiAgICAgIG5nRGV2TW9kZSAmJiBhc3NlcnRUSWN1KHRJY3UpO1xuICAgICAgZW50ZXJJY3Uoc3RhdGUsIHRJY3UsIHN0YXRlLmxWaWV3KTtcbiAgICAgIHJldHVybiBpY3VDb250YWluZXJJdGVyYXRvck5leHQoc3RhdGUpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoc3RhdGUuc3RhY2subGVuZ3RoID09PSAwKSB7XG4gICAgICBzdGF0ZS5sVmlldyA9IHVuZGVmaW5lZDtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0ZS5yZW1vdmVzID0gc3RhdGUuc3RhY2sucG9wKCk7XG4gICAgICBzdGF0ZS5pbmRleCA9IHN0YXRlLnN0YWNrLnBvcCgpO1xuICAgICAgcmV0dXJuIGljdUNvbnRhaW5lckl0ZXJhdG9yTmV4dChzdGF0ZSk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBsb2FkSWN1Q29udGFpbmVyVmlzaXRvcigpIHtcbiAgY29uc3QgX3N0YXRlID0ge1xuICAgIHN0YWNrOiBbXSxcbiAgICBpbmRleDogLTFcbiAgfTtcbiAgZnVuY3Rpb24gaWN1Q29udGFpbmVySXRlcmF0b3JTdGFydCh0SWN1Q29udGFpbmVyTm9kZSwgbFZpZXcpIHtcbiAgICBfc3RhdGUubFZpZXcgPSBsVmlldztcbiAgICB3aGlsZSAoX3N0YXRlLnN0YWNrLmxlbmd0aCkgX3N0YXRlLnN0YWNrLnBvcCgpO1xuICAgIG5nRGV2TW9kZSAmJiBhc3NlcnRUTm9kZUZvckxWaWV3KHRJY3VDb250YWluZXJOb2RlLCBsVmlldyk7XG4gICAgZW50ZXJJY3UoX3N0YXRlLCB0SWN1Q29udGFpbmVyTm9kZS52YWx1ZSwgbFZpZXcpO1xuICAgIHJldHVybiBpY3VDb250YWluZXJJdGVyYXRvck5leHQuYmluZChudWxsLCBfc3RhdGUpO1xuICB9XG4gIHJldHVybiBpY3VDb250YWluZXJJdGVyYXRvclN0YXJ0O1xufVxuZnVuY3Rpb24gY3JlYXRlSWN1SXRlcmF0b3IodEljdSwgbFZpZXcpIHtcbiAgY29uc3Qgc3RhdGUgPSB7XG4gICAgc3RhY2s6IFtdLFxuICAgIGluZGV4OiAtMSxcbiAgICBsVmlld1xuICB9O1xuICBuZ0Rldk1vZGUgJiYgYXNzZXJ0VEljdSh0SWN1KTtcbiAgZW50ZXJJY3Uoc3RhdGUsIHRJY3UsIGxWaWV3KTtcbiAgcmV0dXJuIGljdUNvbnRhaW5lckl0ZXJhdG9yTmV4dC5iaW5kKG51bGwsIHN0YXRlKTtcbn1cbmNvbnN0IFJFRl9FWFRSQUNUT1JfUkVHRVhQID0gLyogQF9fUFVSRV9fICovKCgpID0+IHtcbiAgcmV0dXJuIG5ldyBSZWdFeHAoYF4oXFxcXGQrKSooJHtSRUZFUkVOQ0VfTk9ERV9CT0RZfXwke1JFRkVSRU5DRV9OT0RFX0hPU1R9KSooLiopYCk7XG59KSgpO1xuZnVuY3Rpb24gY29tcHJlc3NOb2RlTG9jYXRpb24ocmVmZXJlbmNlTm9kZSwgcGF0aCkge1xuICBjb25zdCByZXN1bHQgPSBbcmVmZXJlbmNlTm9kZV07XG4gIGZvciAoY29uc3Qgc2VnbWVudCBvZiBwYXRoKSB7XG4gICAgY29uc3QgbGFzdElkeCA9IHJlc3VsdC5sZW5ndGggLSAxO1xuICAgIGlmIChsYXN0SWR4ID4gMCAmJiByZXN1bHRbbGFzdElkeCAtIDFdID09PSBzZWdtZW50KSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHJlc3VsdFtsYXN0SWR4XSB8fCAxO1xuICAgICAgcmVzdWx0W2xhc3RJZHhdID0gdmFsdWUgKyAxO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQucHVzaChzZWdtZW50LCAnJyk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQuam9pbignJyk7XG59XG5mdW5jdGlvbiBkZWNvbXByZXNzTm9kZUxvY2F0aW9uKHBhdGgpIHtcbiAgY29uc3QgbWF0Y2hlcyA9IHBhdGgubWF0Y2goUkVGX0VYVFJBQ1RPUl9SRUdFWFApO1xuICBjb25zdCBbXywgcmVmTm9kZUlkLCByZWZOb2RlTmFtZSwgcmVzdF0gPSBtYXRjaGVzO1xuICBjb25zdCByZWYgPSByZWZOb2RlSWQgPyBwYXJzZUludChyZWZOb2RlSWQsIDEwKSA6IHJlZk5vZGVOYW1lO1xuICBjb25zdCBzdGVwcyA9IFtdO1xuICBmb3IgKGNvbnN0IFtfLCBzdGVwLCBjb3VudF0gb2YgcmVzdC5tYXRjaEFsbCgvKGZ8bikoXFxkKikvZykpIHtcbiAgICBjb25zdCByZXBlYXQgPSBwYXJzZUludChjb3VudCwgMTApIHx8IDE7XG4gICAgc3RlcHMucHVzaChzdGVwLCByZXBlYXQpO1xuICB9XG4gIHJldHVybiBbcmVmLCAuLi5zdGVwc107XG59XG5mdW5jdGlvbiBpc0ZpcnN0RWxlbWVudEluTmdDb250YWluZXIodE5vZGUpIHtcbiAgcmV0dXJuICF0Tm9kZS5wcmV2ICYmIHROb2RlLnBhcmVudD8udHlwZSA9PT0gODtcbn1cbmZ1bmN0aW9uIGdldE5vT2Zmc2V0SW5kZXgodE5vZGUpIHtcbiAgcmV0dXJuIHROb2RlLmluZGV4IC0gSEVBREVSX09GRlNFVDtcbn1cbmZ1bmN0aW9uIGlzRGlzY29ubmVjdGVkTm9kZSh0Tm9kZSwgbFZpZXcpIHtcbiAgcmV0dXJuICEodE5vZGUudHlwZSAmICgxNiB8IDEyOCkpICYmICEhbFZpZXdbdE5vZGUuaW5kZXhdICYmIGlzRGlzY29ubmVjdGVkUk5vZGUodW53cmFwUk5vZGUobFZpZXdbdE5vZGUuaW5kZXhdKSk7XG59XG5mdW5jdGlvbiBpc0Rpc2Nvbm5lY3RlZFJOb2RlKHJOb2RlKSB7XG4gIHJldHVybiAhIXJOb2RlICYmICFyTm9kZS5pc0Nvbm5lY3RlZDtcbn1cbmZ1bmN0aW9uIGxvY2F0ZUkxOG5STm9kZUJ5SW5kZXgoaHlkcmF0aW9uSW5mbywgbm9PZmZzZXRJbmRleCkge1xuICBjb25zdCBpMThuTm9kZXMgPSBoeWRyYXRpb25JbmZvLmkxOG5Ob2RlcztcbiAgaWYgKGkxOG5Ob2Rlcykge1xuICAgIHJldHVybiBpMThuTm9kZXMuZ2V0KG5vT2Zmc2V0SW5kZXgpO1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5mdW5jdGlvbiB0cnlMb2NhdGVSTm9kZUJ5UGF0aChoeWRyYXRpb25JbmZvLCBsVmlldywgbm9PZmZzZXRJbmRleCkge1xuICBjb25zdCBub2RlcyA9IGh5ZHJhdGlvbkluZm8uZGF0YVtOT0RFU107XG4gIGNvbnN0IHBhdGggPSBub2Rlcz8uW25vT2Zmc2V0SW5kZXhdO1xuICByZXR1cm4gcGF0aCA/IGxvY2F0ZVJOb2RlQnlQYXRoKHBhdGgsIGxWaWV3KSA6IG51bGw7XG59XG5mdW5jdGlvbiBsb2NhdGVOZXh0Uk5vZGUoaHlkcmF0aW9uSW5mbywgdFZpZXcsIGxWaWV3LCB0Tm9kZSkge1xuICBjb25zdCBub09mZnNldEluZGV4ID0gZ2V0Tm9PZmZzZXRJbmRleCh0Tm9kZSk7XG4gIGxldCBuYXRpdmUgPSBsb2NhdGVJMThuUk5vZGVCeUluZGV4KGh5ZHJhdGlvbkluZm8sIG5vT2Zmc2V0SW5kZXgpO1xuICBpZiAobmF0aXZlID09PSB1bmRlZmluZWQpIHtcbiAgICBjb25zdCBub2RlcyA9IGh5ZHJhdGlvbkluZm8uZGF0YVtOT0RFU107XG4gICAgaWYgKG5vZGVzPy5bbm9PZmZzZXRJbmRleF0pIHtcbiAgICAgIG5hdGl2ZSA9IGxvY2F0ZVJOb2RlQnlQYXRoKG5vZGVzW25vT2Zmc2V0SW5kZXhdLCBsVmlldyk7XG4gICAgfSBlbHNlIGlmICh0Vmlldy5maXJzdENoaWxkID09PSB0Tm9kZSkge1xuICAgICAgbmF0aXZlID0gaHlkcmF0aW9uSW5mby5maXJzdENoaWxkO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBwcmV2aW91c1ROb2RlUGFyZW50ID0gdE5vZGUucHJldiA9PT0gbnVsbDtcbiAgICAgIGNvbnN0IHByZXZpb3VzVE5vZGUgPSB0Tm9kZS5wcmV2ID8/IHROb2RlLnBhcmVudDtcbiAgICAgIG5nRGV2TW9kZSAmJiBhc3NlcnREZWZpbmVkKHByZXZpb3VzVE5vZGUsICdVbmV4cGVjdGVkIHN0YXRlOiBjdXJyZW50IFROb2RlIGRvZXMgbm90IGhhdmUgYSBjb25uZWN0aW9uICcgKyAndG8gdGhlIHByZXZpb3VzIG5vZGUgb3IgYSBwYXJlbnQgbm9kZS4nKTtcbiAgICAgIGlmIChpc0ZpcnN0RWxlbWVudEluTmdDb250YWluZXIodE5vZGUpKSB7XG4gICAgICAgIGNvbnN0IG5vT2Zmc2V0UGFyZW50SW5kZXggPSBnZXROb09mZnNldEluZGV4KHROb2RlLnBhcmVudCk7XG4gICAgICAgIG5hdGl2ZSA9IGdldFNlZ21lbnRIZWFkKGh5ZHJhdGlvbkluZm8sIG5vT2Zmc2V0UGFyZW50SW5kZXgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGV0IHByZXZpb3VzUkVsZW1lbnQgPSBnZXROYXRpdmVCeVROb2RlKHByZXZpb3VzVE5vZGUsIGxWaWV3KTtcbiAgICAgICAgaWYgKHByZXZpb3VzVE5vZGVQYXJlbnQpIHtcbiAgICAgICAgICBuYXRpdmUgPSBwcmV2aW91c1JFbGVtZW50LmZpcnN0Q2hpbGQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3Qgbm9PZmZzZXRQcmV2U2libGluZ0luZGV4ID0gZ2V0Tm9PZmZzZXRJbmRleChwcmV2aW91c1ROb2RlKTtcbiAgICAgICAgICBjb25zdCBzZWdtZW50SGVhZCA9IGdldFNlZ21lbnRIZWFkKGh5ZHJhdGlvbkluZm8sIG5vT2Zmc2V0UHJldlNpYmxpbmdJbmRleCk7XG4gICAgICAgICAgaWYgKHByZXZpb3VzVE5vZGUudHlwZSA9PT0gMiAmJiBzZWdtZW50SGVhZCkge1xuICAgICAgICAgICAgY29uc3QgbnVtUm9vdE5vZGVzVG9Ta2lwID0gY2FsY1NlcmlhbGl6ZWRDb250YWluZXJTaXplKGh5ZHJhdGlvbkluZm8sIG5vT2Zmc2V0UHJldlNpYmxpbmdJbmRleCk7XG4gICAgICAgICAgICBjb25zdCBub2Rlc1RvU2tpcCA9IG51bVJvb3ROb2Rlc1RvU2tpcCArIDE7XG4gICAgICAgICAgICBuYXRpdmUgPSBzaWJsaW5nQWZ0ZXIobm9kZXNUb1NraXAsIHNlZ21lbnRIZWFkKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmF0aXZlID0gcHJldmlvdXNSRWxlbWVudC5uZXh0U2libGluZztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5hdGl2ZTtcbn1cbmZ1bmN0aW9uIHNpYmxpbmdBZnRlcihza2lwLCBmcm9tKSB7XG4gIGxldCBjdXJyZW50Tm9kZSA9IGZyb207XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc2tpcDsgaSsrKSB7XG4gICAgbmdEZXZNb2RlICYmIHZhbGlkYXRlU2libGluZ05vZGVFeGlzdHMoY3VycmVudE5vZGUpO1xuICAgIGN1cnJlbnROb2RlID0gY3VycmVudE5vZGUubmV4dFNpYmxpbmc7XG4gIH1cbiAgcmV0dXJuIGN1cnJlbnROb2RlO1xufVxuZnVuY3Rpb24gc3RyaW5naWZ5TmF2aWdhdGlvbkluc3RydWN0aW9ucyhpbnN0cnVjdGlvbnMpIHtcbiAgY29uc3QgY29udGFpbmVyID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgaW5zdHJ1Y3Rpb25zLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgY29uc3Qgc3RlcCA9IGluc3RydWN0aW9uc1tpXTtcbiAgICBjb25zdCByZXBlYXQgPSBpbnN0cnVjdGlvbnNbaSArIDFdO1xuICAgIGZvciAobGV0IHIgPSAwOyByIDwgcmVwZWF0OyByKyspIHtcbiAgICAgIGNvbnRhaW5lci5wdXNoKHN0ZXAgPT09IE5PREVfTkFWSUdBVElPTl9TVEVQX0ZJUlNUX0NISUxEID8gJ2ZpcnN0Q2hpbGQnIDogJ25leHRTaWJsaW5nJyk7XG4gICAgfVxuICB9XG4gIHJldHVybiBjb250YWluZXIuam9pbignLicpO1xufVxuZnVuY3Rpb24gbmF2aWdhdGVUb05vZGUoZnJvbSwgaW5zdHJ1Y3Rpb25zKSB7XG4gIGxldCBub2RlID0gZnJvbTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnN0cnVjdGlvbnMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICBjb25zdCBzdGVwID0gaW5zdHJ1Y3Rpb25zW2ldO1xuICAgIGNvbnN0IHJlcGVhdCA9IGluc3RydWN0aW9uc1tpICsgMV07XG4gICAgZm9yIChsZXQgciA9IDA7IHIgPCByZXBlYXQ7IHIrKykge1xuICAgICAgaWYgKG5nRGV2TW9kZSAmJiAhbm9kZSkge1xuICAgICAgICB0aHJvdyBub2RlTm90Rm91bmRBdFBhdGhFcnJvcihmcm9tLCBzdHJpbmdpZnlOYXZpZ2F0aW9uSW5zdHJ1Y3Rpb25zKGluc3RydWN0aW9ucykpO1xuICAgICAgfVxuICAgICAgc3dpdGNoIChzdGVwKSB7XG4gICAgICAgIGNhc2UgTk9ERV9OQVZJR0FUSU9OX1NURVBfRklSU1RfQ0hJTEQ6XG4gICAgICAgICAgbm9kZSA9IG5vZGUuZmlyc3RDaGlsZDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBOT0RFX05BVklHQVRJT05fU1RFUF9ORVhUX1NJQkxJTkc6XG4gICAgICAgICAgbm9kZSA9IG5vZGUubmV4dFNpYmxpbmc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmIChuZ0Rldk1vZGUgJiYgIW5vZGUpIHtcbiAgICB0aHJvdyBub2RlTm90Rm91bmRBdFBhdGhFcnJvcihmcm9tLCBzdHJpbmdpZnlOYXZpZ2F0aW9uSW5zdHJ1Y3Rpb25zKGluc3RydWN0aW9ucykpO1xuICB9XG4gIHJldHVybiBub2RlO1xufVxuZnVuY3Rpb24gbG9jYXRlUk5vZGVCeVBhdGgocGF0aCwgbFZpZXcpIHtcbiAgY29uc3QgW3JlZmVyZW5jZU5vZGUsIC4uLm5hdmlnYXRpb25JbnN0cnVjdGlvbnNdID0gZGVjb21wcmVzc05vZGVMb2NhdGlvbihwYXRoKTtcbiAgbGV0IHJlZjtcbiAgaWYgKHJlZmVyZW5jZU5vZGUgPT09IFJFRkVSRU5DRV9OT0RFX0hPU1QpIHtcbiAgICByZWYgPSBsVmlld1tERUNMQVJBVElPTl9DT01QT05FTlRfVklFV11bSE9TVF07XG4gIH0gZWxzZSBpZiAocmVmZXJlbmNlTm9kZSA9PT0gUkVGRVJFTkNFX05PREVfQk9EWSkge1xuICAgIHJlZiA9IMm1ybVyZXNvbHZlQm9keShsVmlld1tERUNMQVJBVElPTl9DT01QT05FTlRfVklFV11bSE9TVF0pO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHBhcmVudEVsZW1lbnRJZCA9IE51bWJlcihyZWZlcmVuY2VOb2RlKTtcbiAgICByZWYgPSB1bndyYXBSTm9kZShsVmlld1twYXJlbnRFbGVtZW50SWQgKyBIRUFERVJfT0ZGU0VUXSk7XG4gIH1cbiAgcmV0dXJuIG5hdmlnYXRlVG9Ob2RlKHJlZiwgbmF2aWdhdGlvbkluc3RydWN0aW9ucyk7XG59XG5mdW5jdGlvbiBuYXZpZ2F0ZUJldHdlZW4oc3RhcnQsIGZpbmlzaCkge1xuICBpZiAoc3RhcnQgPT09IGZpbmlzaCkge1xuICAgIHJldHVybiBbXTtcbiAgfSBlbHNlIGlmIChzdGFydC5wYXJlbnRFbGVtZW50ID09IG51bGwgfHwgZmluaXNoLnBhcmVudEVsZW1lbnQgPT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsO1xuICB9IGVsc2UgaWYgKHN0YXJ0LnBhcmVudEVsZW1lbnQgPT09IGZpbmlzaC5wYXJlbnRFbGVtZW50KSB7XG4gICAgcmV0dXJuIG5hdmlnYXRlQmV0d2VlblNpYmxpbmdzKHN0YXJ0LCBmaW5pc2gpO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHBhcmVudCA9IGZpbmlzaC5wYXJlbnRFbGVtZW50O1xuICAgIGNvbnN0IHBhcmVudFBhdGggPSBuYXZpZ2F0ZUJldHdlZW4oc3RhcnQsIHBhcmVudCk7XG4gICAgY29uc3QgY2hpbGRQYXRoID0gbmF2aWdhdGVCZXR3ZWVuKHBhcmVudC5maXJzdENoaWxkLCBmaW5pc2gpO1xuICAgIGlmICghcGFyZW50UGF0aCB8fCAhY2hpbGRQYXRoKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gWy4uLnBhcmVudFBhdGgsIE5PREVfTkFWSUdBVElPTl9TVEVQX0ZJUlNUX0NISUxELCAuLi5jaGlsZFBhdGhdO1xuICB9XG59XG5mdW5jdGlvbiBuYXZpZ2F0ZUJldHdlZW5TaWJsaW5ncyhzdGFydCwgZmluaXNoKSB7XG4gIGNvbnN0IG5hdiA9IFtdO1xuICBsZXQgbm9kZSA9IG51bGw7XG4gIGZvciAobm9kZSA9IHN0YXJ0OyBub2RlICE9IG51bGwgJiYgbm9kZSAhPT0gZmluaXNoOyBub2RlID0gbm9kZS5uZXh0U2libGluZykge1xuICAgIG5hdi5wdXNoKE5PREVfTkFWSUdBVElPTl9TVEVQX05FWFRfU0lCTElORyk7XG4gIH1cbiAgcmV0dXJuIG5vZGUgPT0gbnVsbCA/IG51bGwgOiBuYXY7XG59XG5mdW5jdGlvbiBjYWxjUGF0aEJldHdlZW4oZnJvbSwgdG8sIGZyb21Ob2RlTmFtZSkge1xuICBjb25zdCBwYXRoID0gbmF2aWdhdGVCZXR3ZWVuKGZyb20sIHRvKTtcbiAgcmV0dXJuIHBhdGggPT09IG51bGwgPyBudWxsIDogY29tcHJlc3NOb2RlTG9jYXRpb24oZnJvbU5vZGVOYW1lLCBwYXRoKTtcbn1cbmZ1bmN0aW9uIGNhbGNQYXRoRm9yTm9kZSh0Tm9kZSwgbFZpZXcsIGV4Y2x1ZGVkUGFyZW50Tm9kZXMpIHtcbiAgbGV0IHBhcmVudFROb2RlID0gdE5vZGUucGFyZW50O1xuICBsZXQgcGFyZW50SW5kZXg7XG4gIGxldCBwYXJlbnRSTm9kZTtcbiAgbGV0IHJlZmVyZW5jZU5vZGVOYW1lO1xuICB3aGlsZSAocGFyZW50VE5vZGUgIT09IG51bGwgJiYgKGlzRGlzY29ubmVjdGVkTm9kZShwYXJlbnRUTm9kZSwgbFZpZXcpIHx8IGV4Y2x1ZGVkUGFyZW50Tm9kZXM/LmhhcyhwYXJlbnRUTm9kZS5pbmRleCkpKSB7XG4gICAgcGFyZW50VE5vZGUgPSBwYXJlbnRUTm9kZS5wYXJlbnQ7XG4gIH1cbiAgaWYgKHBhcmVudFROb2RlID09PSBudWxsIHx8ICEocGFyZW50VE5vZGUudHlwZSAmIDMpKSB7XG4gICAgcGFyZW50SW5kZXggPSByZWZlcmVuY2VOb2RlTmFtZSA9IFJFRkVSRU5DRV9OT0RFX0hPU1Q7XG4gICAgcGFyZW50Uk5vZGUgPSBsVmlld1tERUNMQVJBVElPTl9DT01QT05FTlRfVklFV11bSE9TVF07XG4gIH0gZWxzZSB7XG4gICAgcGFyZW50SW5kZXggPSBwYXJlbnRUTm9kZS5pbmRleDtcbiAgICBwYXJlbnRSTm9kZSA9IHVud3JhcFJOb2RlKGxWaWV3W3BhcmVudEluZGV4XSk7XG4gICAgcmVmZXJlbmNlTm9kZU5hbWUgPSByZW5kZXJTdHJpbmdpZnkocGFyZW50SW5kZXggLSBIRUFERVJfT0ZGU0VUKTtcbiAgfVxuICBsZXQgck5vZGUgPSB1bndyYXBSTm9kZShsVmlld1t0Tm9kZS5pbmRleF0pO1xuICBpZiAodE5vZGUudHlwZSAmICgxMiB8IDMyKSkge1xuICAgIGNvbnN0IGZpcnN0Uk5vZGUgPSBnZXRGaXJzdE5hdGl2ZU5vZGUobFZpZXcsIHROb2RlKTtcbiAgICBpZiAoZmlyc3RSTm9kZSkge1xuICAgICAgck5vZGUgPSBmaXJzdFJOb2RlO1xuICAgIH1cbiAgfVxuICBsZXQgcGF0aCA9IGNhbGNQYXRoQmV0d2VlbihwYXJlbnRSTm9kZSwgck5vZGUsIHJlZmVyZW5jZU5vZGVOYW1lKTtcbiAgaWYgKHBhdGggPT09IG51bGwgJiYgcGFyZW50Uk5vZGUgIT09IHJOb2RlKSB7XG4gICAgY29uc3QgYm9keSA9IHBhcmVudFJOb2RlLm93bmVyRG9jdW1lbnQuYm9keTtcbiAgICBwYXRoID0gY2FsY1BhdGhCZXR3ZWVuKGJvZHksIHJOb2RlLCBSRUZFUkVOQ0VfTk9ERV9CT0RZKTtcbiAgICBpZiAocGF0aCA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgbm9kZU5vdEZvdW5kRXJyb3IobFZpZXcsIHROb2RlKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHBhdGg7XG59XG5mdW5jdGlvbiBnYXRoZXJEZWZlckJsb2Nrc0NvbW1lbnROb2Rlcyhkb2MsIG5vZGUpIHtcbiAgY29uc3QgY29tbWVudE5vZGVzSXRlcmF0b3IgPSBkb2MuY3JlYXRlTm9kZUl0ZXJhdG9yKG5vZGUsIE5vZGVGaWx0ZXIuU0hPV19DT01NRU5ULCB7XG4gICAgYWNjZXB0Tm9kZVxuICB9KTtcbiAgbGV0IGN1cnJlbnROb2RlO1xuICBjb25zdCBub2Rlc0J5QmxvY2tJZCA9IG5ldyBNYXAoKTtcbiAgd2hpbGUgKGN1cnJlbnROb2RlID0gY29tbWVudE5vZGVzSXRlcmF0b3IubmV4dE5vZGUoKSkge1xuICAgIGNvbnN0IG5naFBhdHRlcm4gPSAnbmdoPSc7XG4gICAgY29uc3QgY29udGVudCA9IGN1cnJlbnROb2RlPy50ZXh0Q29udGVudDtcbiAgICBjb25zdCBuZ2hJZHggPSBjb250ZW50Py5pbmRleE9mKG5naFBhdHRlcm4pID8/IC0xO1xuICAgIGlmIChuZ2hJZHggPiAtMSkge1xuICAgICAgY29uc3QgbmdoVmFsdWUgPSBjb250ZW50LnN1YnN0cmluZyhuZ2hJZHggKyBuZ2hQYXR0ZXJuLmxlbmd0aCkudHJpbSgpO1xuICAgICAgbmdEZXZNb2RlICYmIGFzc2VydEVxdWFsKG5naFZhbHVlLnN0YXJ0c1dpdGgoJ2QnKSwgdHJ1ZSwgJ0ludmFsaWQgZGVmZXIgYmxvY2sgaWQgZm91bmQgaW4gYSBjb21tZW50IG5vZGUuJyk7XG4gICAgICBub2Rlc0J5QmxvY2tJZC5zZXQobmdoVmFsdWUsIGN1cnJlbnROb2RlKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5vZGVzQnlCbG9ja0lkO1xufVxuZnVuY3Rpb24gYWNjZXB0Tm9kZShub2RlKSB7XG4gIHJldHVybiBub2RlLnRleHRDb250ZW50Py50cmltU3RhcnQoKS5zdGFydHNXaXRoKCduZ2g9JykgPyBOb2RlRmlsdGVyLkZJTFRFUl9BQ0NFUFQgOiBOb2RlRmlsdGVyLkZJTFRFUl9SRUpFQ1Q7XG59XG5sZXQgX2lzSTE4bkh5ZHJhdGlvblN1cHBvcnRFbmFibGVkID0gZmFsc2U7XG5sZXQgX3ByZXBhcmVJMThuQmxvY2tGb3JIeWRyYXRpb25JbXBsID0gKCkgPT4ge307XG5mdW5jdGlvbiBzZXRJc0kxOG5IeWRyYXRpb25TdXBwb3J0RW5hYmxlZChlbmFibGVkKSB7XG4gIF9pc0kxOG5IeWRyYXRpb25TdXBwb3J0RW5hYmxlZCA9IGVuYWJsZWQ7XG59XG5mdW5jdGlvbiBpc0kxOG5IeWRyYXRpb25TdXBwb3J0RW5hYmxlZCgpIHtcbiAgcmV0dXJuIF9pc0kxOG5IeWRyYXRpb25TdXBwb3J0RW5hYmxlZDtcbn1cbmZ1bmN0aW9uIHByZXBhcmVJMThuQmxvY2tGb3JIeWRyYXRpb24obFZpZXcsIGluZGV4LCBwYXJlbnRUTm9kZSwgc3ViVGVtcGxhdGVJbmRleCkge1xuICBfcHJlcGFyZUkxOG5CbG9ja0Zvckh5ZHJhdGlvbkltcGwobFZpZXcsIGluZGV4LCBwYXJlbnRUTm9kZSwgc3ViVGVtcGxhdGVJbmRleCk7XG59XG5mdW5jdGlvbiBlbmFibGVQcmVwYXJlSTE4bkJsb2NrRm9ySHlkcmF0aW9uSW1wbCgpIHtcbiAgX3ByZXBhcmVJMThuQmxvY2tGb3JIeWRyYXRpb25JbXBsID0gcHJlcGFyZUkxOG5CbG9ja0Zvckh5ZHJhdGlvbkltcGw7XG59XG5mdW5jdGlvbiBpc0kxOG5IeWRyYXRpb25FbmFibGVkKGluamVjdG9yKSB7XG4gIGluamVjdG9yID0gaW5qZWN0b3IgPz8gaW5qZWN0KEluamVjdG9yKTtcbiAgcmV0dXJuIGluamVjdG9yLmdldChJU19JMThOX0hZRFJBVElPTl9FTkFCTEVELCBmYWxzZSk7XG59XG5mdW5jdGlvbiBnZXRPckNvbXB1dGVJMThuQ2hpbGRyZW4odFZpZXcsIGNvbnRleHQpIHtcbiAgbGV0IGkxOG5DaGlsZHJlbiA9IGNvbnRleHQuaTE4bkNoaWxkcmVuLmdldCh0Vmlldyk7XG4gIGlmIChpMThuQ2hpbGRyZW4gPT09IHVuZGVmaW5lZCkge1xuICAgIGkxOG5DaGlsZHJlbiA9IGNvbGxlY3RJMThuQ2hpbGRyZW4odFZpZXcpO1xuICAgIGNvbnRleHQuaTE4bkNoaWxkcmVuLnNldCh0VmlldywgaTE4bkNoaWxkcmVuKTtcbiAgfVxuICByZXR1cm4gaTE4bkNoaWxkcmVuO1xufVxuZnVuY3Rpb24gY29sbGVjdEkxOG5DaGlsZHJlbih0Vmlldykge1xuICBjb25zdCBjaGlsZHJlbiA9IG5ldyBTZXQoKTtcbiAgZnVuY3Rpb24gY29sbGVjdEkxOG5WaWV3cyhub2RlKSB7XG4gICAgY2hpbGRyZW4uYWRkKG5vZGUuaW5kZXgpO1xuICAgIHN3aXRjaCAobm9kZS5raW5kKSB7XG4gICAgICBjYXNlIDE6XG4gICAgICBjYXNlIDI6XG4gICAgICAgIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IGNoaWxkTm9kZSBvZiBub2RlLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICBjb2xsZWN0STE4blZpZXdzKGNoaWxkTm9kZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICBjYXNlIDM6XG4gICAgICAgIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IGNhc2VOb2RlcyBvZiBub2RlLmNhc2VzKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNhc2VOb2RlIG9mIGNhc2VOb2Rlcykge1xuICAgICAgICAgICAgICBjb2xsZWN0STE4blZpZXdzKGNhc2VOb2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG4gIH1cbiAgZm9yIChsZXQgaSA9IEhFQURFUl9PRkZTRVQ7IGkgPCB0Vmlldy5iaW5kaW5nU3RhcnRJbmRleDsgaSsrKSB7XG4gICAgY29uc3QgdEkxOG4gPSB0Vmlldy5kYXRhW2ldO1xuICAgIGlmICghdEkxOG4gfHwgIXRJMThuLmFzdCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGZvciAoY29uc3Qgbm9kZSBvZiB0STE4bi5hc3QpIHtcbiAgICAgIGNvbGxlY3RJMThuVmlld3Mobm9kZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBjaGlsZHJlbi5zaXplID09PSAwID8gbnVsbCA6IGNoaWxkcmVuO1xufVxuZnVuY3Rpb24gdHJ5U2VyaWFsaXplSTE4bkJsb2NrKGxWaWV3LCBpbmRleCwgY29udGV4dCkge1xuICBpZiAoIWNvbnRleHQuaXNJMThuSHlkcmF0aW9uRW5hYmxlZCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IHRWaWV3ID0gbFZpZXdbVFZJRVddO1xuICBjb25zdCB0STE4biA9IHRWaWV3LmRhdGFbaW5kZXhdO1xuICBpZiAoIXRJMThuIHx8ICF0STE4bi5hc3QpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCBwYXJlbnRUTm9kZSA9IHRWaWV3LmRhdGFbdEkxOG4ucGFyZW50VE5vZGVJbmRleF07XG4gIGlmIChwYXJlbnRUTm9kZSAmJiBpc0kxOG5JblNraXBIeWRyYXRpb25CbG9jayhwYXJlbnRUTm9kZSkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCBzZXJpYWxpemVkSTE4bkJsb2NrID0ge1xuICAgIGNhc2VRdWV1ZTogW10sXG4gICAgZGlzY29ubmVjdGVkTm9kZXM6IG5ldyBTZXQoKSxcbiAgICBkaXNqb2ludE5vZGVzOiBuZXcgU2V0KClcbiAgfTtcbiAgc2VyaWFsaXplSTE4bkJsb2NrKGxWaWV3LCBzZXJpYWxpemVkSTE4bkJsb2NrLCBjb250ZXh0LCB0STE4bi5hc3QpO1xuICByZXR1cm4gc2VyaWFsaXplZEkxOG5CbG9jay5jYXNlUXVldWUubGVuZ3RoID09PSAwICYmIHNlcmlhbGl6ZWRJMThuQmxvY2suZGlzY29ubmVjdGVkTm9kZXMuc2l6ZSA9PT0gMCAmJiBzZXJpYWxpemVkSTE4bkJsb2NrLmRpc2pvaW50Tm9kZXMuc2l6ZSA9PT0gMCA/IG51bGwgOiBzZXJpYWxpemVkSTE4bkJsb2NrO1xufVxuZnVuY3Rpb24gc2VyaWFsaXplSTE4bkJsb2NrKGxWaWV3LCBzZXJpYWxpemVkSTE4bkJsb2NrLCBjb250ZXh0LCBub2Rlcykge1xuICBsZXQgcHJldlJOb2RlID0gbnVsbDtcbiAgZm9yIChjb25zdCBub2RlIG9mIG5vZGVzKSB7XG4gICAgY29uc3QgbmV4dFJOb2RlID0gc2VyaWFsaXplSTE4bk5vZGUobFZpZXcsIHNlcmlhbGl6ZWRJMThuQmxvY2ssIGNvbnRleHQsIG5vZGUpO1xuICAgIGlmIChuZXh0Uk5vZGUpIHtcbiAgICAgIGlmIChpc0Rpc2pvaW50Tm9kZShwcmV2Uk5vZGUsIG5leHRSTm9kZSkpIHtcbiAgICAgICAgc2VyaWFsaXplZEkxOG5CbG9jay5kaXNqb2ludE5vZGVzLmFkZChub2RlLmluZGV4IC0gSEVBREVSX09GRlNFVCk7XG4gICAgICB9XG4gICAgICBwcmV2Uk5vZGUgPSBuZXh0Uk5vZGU7XG4gICAgfVxuICB9XG4gIHJldHVybiBwcmV2Uk5vZGU7XG59XG5mdW5jdGlvbiBpc0Rpc2pvaW50Tm9kZShwcmV2Tm9kZSwgbmV4dE5vZGUpIHtcbiAgcmV0dXJuIHByZXZOb2RlICYmIHByZXZOb2RlLm5leHRTaWJsaW5nICE9PSBuZXh0Tm9kZTtcbn1cbmZ1bmN0aW9uIHNlcmlhbGl6ZUkxOG5Ob2RlKGxWaWV3LCBzZXJpYWxpemVkSTE4bkJsb2NrLCBjb250ZXh0LCBub2RlKSB7XG4gIGNvbnN0IG1heWJlUk5vZGUgPSB1bndyYXBSTm9kZShsVmlld1tub2RlLmluZGV4XSk7XG4gIGlmICghbWF5YmVSTm9kZSB8fCBpc0Rpc2Nvbm5lY3RlZFJOb2RlKG1heWJlUk5vZGUpKSB7XG4gICAgc2VyaWFsaXplZEkxOG5CbG9jay5kaXNjb25uZWN0ZWROb2Rlcy5hZGQobm9kZS5pbmRleCAtIEhFQURFUl9PRkZTRVQpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IHJOb2RlID0gbWF5YmVSTm9kZTtcbiAgc3dpdGNoIChub2RlLmtpbmQpIHtcbiAgICBjYXNlIDA6XG4gICAgICB7XG4gICAgICAgIHByb2Nlc3NUZXh0Tm9kZUJlZm9yZVNlcmlhbGl6YXRpb24oY29udGV4dCwgck5vZGUpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICBjYXNlIDE6XG4gICAgY2FzZSAyOlxuICAgICAge1xuICAgICAgICBzZXJpYWxpemVJMThuQmxvY2sobFZpZXcsIHNlcmlhbGl6ZWRJMThuQmxvY2ssIGNvbnRleHQsIG5vZGUuY2hpbGRyZW4pO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICBjYXNlIDM6XG4gICAgICB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRDYXNlID0gbFZpZXdbbm9kZS5jdXJyZW50Q2FzZUxWaWV3SW5kZXhdO1xuICAgICAgICBpZiAoY3VycmVudENhc2UgIT0gbnVsbCkge1xuICAgICAgICAgIGNvbnN0IGNhc2VJZHggPSBjdXJyZW50Q2FzZSA8IDAgPyB+Y3VycmVudENhc2UgOiBjdXJyZW50Q2FzZTtcbiAgICAgICAgICBzZXJpYWxpemVkSTE4bkJsb2NrLmNhc2VRdWV1ZS5wdXNoKGNhc2VJZHgpO1xuICAgICAgICAgIHNlcmlhbGl6ZUkxOG5CbG9jayhsVmlldywgc2VyaWFsaXplZEkxOG5CbG9jaywgY29udGV4dCwgbm9kZS5jYXNlc1tjYXNlSWR4XSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gIH1cbiAgcmV0dXJuIGdldEZpcnN0TmF0aXZlTm9kZUZvckkxOG5Ob2RlKGxWaWV3LCBub2RlKTtcbn1cbmZ1bmN0aW9uIGdldEZpcnN0TmF0aXZlTm9kZUZvckkxOG5Ob2RlKGxWaWV3LCBub2RlKSB7XG4gIGNvbnN0IHRWaWV3ID0gbFZpZXdbVFZJRVddO1xuICBjb25zdCBtYXliZVROb2RlID0gdFZpZXcuZGF0YVtub2RlLmluZGV4XTtcbiAgaWYgKGlzVE5vZGVTaGFwZShtYXliZVROb2RlKSkge1xuICAgIHJldHVybiBnZXRGaXJzdE5hdGl2ZU5vZGUobFZpZXcsIG1heWJlVE5vZGUpO1xuICB9IGVsc2UgaWYgKG5vZGUua2luZCA9PT0gMykge1xuICAgIGNvbnN0IGljdUl0ZXJhdG9yID0gY3JlYXRlSWN1SXRlcmF0b3IobWF5YmVUTm9kZSwgbFZpZXcpO1xuICAgIGxldCByTm9kZSA9IGljdUl0ZXJhdG9yKCk7XG4gICAgcmV0dXJuIHJOb2RlID8/IHVud3JhcFJOb2RlKGxWaWV3W25vZGUuaW5kZXhdKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdW53cmFwUk5vZGUobFZpZXdbbm9kZS5pbmRleF0pID8/IG51bGw7XG4gIH1cbn1cbmZ1bmN0aW9uIHNldEN1cnJlbnROb2RlKHN0YXRlLCBub2RlKSB7XG4gIHN0YXRlLmN1cnJlbnROb2RlID0gbm9kZTtcbn1cbmZ1bmN0aW9uIGFwcGVuZEkxOG5Ob2RlVG9Db2xsZWN0aW9uKGNvbnRleHQsIHN0YXRlLCBhc3ROb2RlKSB7XG4gIGNvbnN0IG5vT2Zmc2V0SW5kZXggPSBhc3ROb2RlLmluZGV4IC0gSEVBREVSX09GRlNFVDtcbiAgY29uc3Qge1xuICAgIGRpc2Nvbm5lY3RlZE5vZGVzXG4gIH0gPSBjb250ZXh0O1xuICBjb25zdCBjdXJyZW50Tm9kZSA9IHN0YXRlLmN1cnJlbnROb2RlO1xuICBpZiAoc3RhdGUuaXNDb25uZWN0ZWQpIHtcbiAgICBjb250ZXh0LmkxOG5Ob2Rlcy5zZXQobm9PZmZzZXRJbmRleCwgY3VycmVudE5vZGUpO1xuICAgIGRpc2Nvbm5lY3RlZE5vZGVzLmRlbGV0ZShub09mZnNldEluZGV4KTtcbiAgfSBlbHNlIHtcbiAgICBkaXNjb25uZWN0ZWROb2Rlcy5hZGQobm9PZmZzZXRJbmRleCk7XG4gIH1cbiAgcmV0dXJuIGN1cnJlbnROb2RlO1xufVxuZnVuY3Rpb24gc2tpcFNpYmxpbmdOb2RlcyhzdGF0ZSwgc2tpcCkge1xuICBsZXQgY3VycmVudE5vZGUgPSBzdGF0ZS5jdXJyZW50Tm9kZTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBza2lwOyBpKyspIHtcbiAgICBpZiAoIWN1cnJlbnROb2RlKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY3VycmVudE5vZGUgPSBjdXJyZW50Tm9kZT8ubmV4dFNpYmxpbmcgPz8gbnVsbDtcbiAgfVxuICByZXR1cm4gY3VycmVudE5vZGU7XG59XG5mdW5jdGlvbiBmb3JrSHlkcmF0aW9uU3RhdGUoc3RhdGUsIG5leHROb2RlKSB7XG4gIHJldHVybiB7XG4gICAgY3VycmVudE5vZGU6IG5leHROb2RlLFxuICAgIGlzQ29ubmVjdGVkOiBzdGF0ZS5pc0Nvbm5lY3RlZFxuICB9O1xufVxuZnVuY3Rpb24gcHJlcGFyZUkxOG5CbG9ja0Zvckh5ZHJhdGlvbkltcGwobFZpZXcsIGluZGV4LCBwYXJlbnRUTm9kZSwgc3ViVGVtcGxhdGVJbmRleCkge1xuICBjb25zdCBoeWRyYXRpb25JbmZvID0gbFZpZXdbSFlEUkFUSU9OXTtcbiAgaWYgKCFoeWRyYXRpb25JbmZvKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmICghaXNJMThuSHlkcmF0aW9uU3VwcG9ydEVuYWJsZWQoKSB8fCBwYXJlbnRUTm9kZSAmJiAoaXNJMThuSW5Ta2lwSHlkcmF0aW9uQmxvY2socGFyZW50VE5vZGUpIHx8IGlzRGlzY29ubmVjdGVkTm9kZSQxKGh5ZHJhdGlvbkluZm8sIHBhcmVudFROb2RlLmluZGV4IC0gSEVBREVSX09GRlNFVCkpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IHRWaWV3ID0gbFZpZXdbVFZJRVddO1xuICBjb25zdCB0STE4biA9IHRWaWV3LmRhdGFbaW5kZXhdO1xuICBuZ0Rldk1vZGUgJiYgYXNzZXJ0RGVmaW5lZCh0STE4biwgJ0V4cGVjdGVkIGkxOG4gZGF0YSB0byBiZSBwcmVzZW50IGluIGEgZ2l2ZW4gVFZpZXcgc2xvdCBkdXJpbmcgaHlkcmF0aW9uJyk7XG4gIGZ1bmN0aW9uIGZpbmRIeWRyYXRpb25Sb290KCkge1xuICAgIGlmIChpc1Jvb3RUZW1wbGF0ZU1lc3NhZ2Uoc3ViVGVtcGxhdGVJbmRleCkpIHtcbiAgICAgIG5nRGV2TW9kZSAmJiBhc3NlcnREZWZpbmVkKHBhcmVudFROb2RlLCAnRXhwZWN0ZWQgcGFyZW50IFROb2RlIHdoaWxlIGh5ZHJhdGluZyBpMThuIHJvb3QnKTtcbiAgICAgIGNvbnN0IHJvb3ROb2RlID0gbG9jYXRlTmV4dFJOb2RlKGh5ZHJhdGlvbkluZm8sIHRWaWV3LCBsVmlldywgcGFyZW50VE5vZGUpO1xuICAgICAgcmV0dXJuIHBhcmVudFROb2RlLnR5cGUgJiA4ID8gcm9vdE5vZGUgOiByb290Tm9kZS5maXJzdENoaWxkO1xuICAgIH1cbiAgICByZXR1cm4gaHlkcmF0aW9uSW5mbz8uZmlyc3RDaGlsZDtcbiAgfVxuICBjb25zdCBjdXJyZW50Tm9kZSA9IGZpbmRIeWRyYXRpb25Sb290KCk7XG4gIG5nRGV2TW9kZSAmJiBhc3NlcnREZWZpbmVkKGN1cnJlbnROb2RlLCAnRXhwZWN0ZWQgcm9vdCBpMThuIG5vZGUgZHVyaW5nIGh5ZHJhdGlvbicpO1xuICBjb25zdCBkaXNjb25uZWN0ZWROb2RlcyA9IGluaXREaXNjb25uZWN0ZWROb2RlcyhoeWRyYXRpb25JbmZvKSA/PyBuZXcgU2V0KCk7XG4gIGNvbnN0IGkxOG5Ob2RlcyA9IGh5ZHJhdGlvbkluZm8uaTE4bk5vZGVzID8/PSBuZXcgTWFwKCk7XG4gIGNvbnN0IGNhc2VRdWV1ZSA9IGh5ZHJhdGlvbkluZm8uZGF0YVtJMThOX0RBVEFdPy5baW5kZXggLSBIRUFERVJfT0ZGU0VUXSA/PyBbXTtcbiAgY29uc3QgZGVoeWRyYXRlZEljdURhdGEgPSBoeWRyYXRpb25JbmZvLmRlaHlkcmF0ZWRJY3VEYXRhID8/PSBuZXcgTWFwKCk7XG4gIGNvbGxlY3RJMThuTm9kZXNGcm9tRG9tKHtcbiAgICBoeWRyYXRpb25JbmZvLFxuICAgIGxWaWV3LFxuICAgIGkxOG5Ob2RlcyxcbiAgICBkaXNjb25uZWN0ZWROb2RlcyxcbiAgICBjYXNlUXVldWUsXG4gICAgZGVoeWRyYXRlZEljdURhdGFcbiAgfSwge1xuICAgIGN1cnJlbnROb2RlLFxuICAgIGlzQ29ubmVjdGVkOiB0cnVlXG4gIH0sIHRJMThuLmFzdCk7XG4gIGh5ZHJhdGlvbkluZm8uZGlzY29ubmVjdGVkTm9kZXMgPSBkaXNjb25uZWN0ZWROb2Rlcy5zaXplID09PSAwID8gbnVsbCA6IGRpc2Nvbm5lY3RlZE5vZGVzO1xufVxuZnVuY3Rpb24gY29sbGVjdEkxOG5Ob2Rlc0Zyb21Eb20oY29udGV4dCwgc3RhdGUsIG5vZGVPck5vZGVzKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KG5vZGVPck5vZGVzKSkge1xuICAgIGxldCBuZXh0U3RhdGUgPSBzdGF0ZTtcbiAgICBmb3IgKGNvbnN0IG5vZGUgb2Ygbm9kZU9yTm9kZXMpIHtcbiAgICAgIGNvbnN0IHRhcmdldE5vZGUgPSB0cnlMb2NhdGVSTm9kZUJ5UGF0aChjb250ZXh0Lmh5ZHJhdGlvbkluZm8sIGNvbnRleHQubFZpZXcsIG5vZGUuaW5kZXggLSBIRUFERVJfT0ZGU0VUKTtcbiAgICAgIGlmICh0YXJnZXROb2RlKSB7XG4gICAgICAgIG5leHRTdGF0ZSA9IGZvcmtIeWRyYXRpb25TdGF0ZShzdGF0ZSwgdGFyZ2V0Tm9kZSk7XG4gICAgICB9XG4gICAgICBjb2xsZWN0STE4bk5vZGVzRnJvbURvbShjb250ZXh0LCBuZXh0U3RhdGUsIG5vZGUpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoY29udGV4dC5kaXNjb25uZWN0ZWROb2Rlcy5oYXMobm9kZU9yTm9kZXMuaW5kZXggLSBIRUFERVJfT0ZGU0VUKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzd2l0Y2ggKG5vZGVPck5vZGVzLmtpbmQpIHtcbiAgICAgIGNhc2UgMDpcbiAgICAgICAge1xuICAgICAgICAgIGNvbnN0IGN1cnJlbnROb2RlID0gYXBwZW5kSTE4bk5vZGVUb0NvbGxlY3Rpb24oY29udGV4dCwgc3RhdGUsIG5vZGVPck5vZGVzKTtcbiAgICAgICAgICBzZXRDdXJyZW50Tm9kZShzdGF0ZSwgY3VycmVudE5vZGU/Lm5leHRTaWJsaW5nID8/IG51bGwpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICBjYXNlIDE6XG4gICAgICAgIHtcbiAgICAgICAgICBjb2xsZWN0STE4bk5vZGVzRnJvbURvbShjb250ZXh0LCBmb3JrSHlkcmF0aW9uU3RhdGUoc3RhdGUsIHN0YXRlLmN1cnJlbnROb2RlPy5maXJzdENoaWxkID8/IG51bGwpLCBub2RlT3JOb2Rlcy5jaGlsZHJlbik7XG4gICAgICAgICAgY29uc3QgY3VycmVudE5vZGUgPSBhcHBlbmRJMThuTm9kZVRvQ29sbGVjdGlvbihjb250ZXh0LCBzdGF0ZSwgbm9kZU9yTm9kZXMpO1xuICAgICAgICAgIHNldEN1cnJlbnROb2RlKHN0YXRlLCBjdXJyZW50Tm9kZT8ubmV4dFNpYmxpbmcgPz8gbnVsbCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIGNhc2UgMjpcbiAgICAgICAge1xuICAgICAgICAgIGNvbnN0IG5vT2Zmc2V0SW5kZXggPSBub2RlT3JOb2Rlcy5pbmRleCAtIEhFQURFUl9PRkZTRVQ7XG4gICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgaHlkcmF0aW9uSW5mb1xuICAgICAgICAgIH0gPSBjb250ZXh0O1xuICAgICAgICAgIGNvbnN0IGNvbnRhaW5lclNpemUgPSBnZXROZ0NvbnRhaW5lclNpemUoaHlkcmF0aW9uSW5mbywgbm9PZmZzZXRJbmRleCk7XG4gICAgICAgICAgc3dpdGNoIChub2RlT3JOb2Rlcy50eXBlKSB7XG4gICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50Tm9kZSA9IGFwcGVuZEkxOG5Ob2RlVG9Db2xsZWN0aW9uKGNvbnRleHQsIHN0YXRlLCBub2RlT3JOb2Rlcyk7XG4gICAgICAgICAgICAgICAgaWYgKGlzU2VyaWFsaXplZEVsZW1lbnRDb250YWluZXIoaHlkcmF0aW9uSW5mbywgbm9PZmZzZXRJbmRleCkpIHtcbiAgICAgICAgICAgICAgICAgIGNvbGxlY3RJMThuTm9kZXNGcm9tRG9tKGNvbnRleHQsIHN0YXRlLCBub2RlT3JOb2Rlcy5jaGlsZHJlbik7XG4gICAgICAgICAgICAgICAgICBjb25zdCBuZXh0Tm9kZSA9IHNraXBTaWJsaW5nTm9kZXMoc3RhdGUsIDEpO1xuICAgICAgICAgICAgICAgICAgc2V0Q3VycmVudE5vZGUoc3RhdGUsIG5leHROb2RlKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgY29sbGVjdEkxOG5Ob2Rlc0Zyb21Eb20oY29udGV4dCwgZm9ya0h5ZHJhdGlvblN0YXRlKHN0YXRlLCBzdGF0ZS5jdXJyZW50Tm9kZT8uZmlyc3RDaGlsZCA/PyBudWxsKSwgbm9kZU9yTm9kZXMuY2hpbGRyZW4pO1xuICAgICAgICAgICAgICAgICAgc2V0Q3VycmVudE5vZGUoc3RhdGUsIGN1cnJlbnROb2RlPy5uZXh0U2libGluZyA/PyBudWxsKTtcbiAgICAgICAgICAgICAgICAgIGlmIChjb250YWluZXJTaXplICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5leHROb2RlID0gc2tpcFNpYmxpbmdOb2RlcyhzdGF0ZSwgY29udGFpbmVyU2l6ZSArIDEpO1xuICAgICAgICAgICAgICAgICAgICBzZXRDdXJyZW50Tm9kZShzdGF0ZSwgbmV4dE5vZGUpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmdEZXZNb2RlICYmIGFzc2VydE5vdEVxdWFsKGNvbnRhaW5lclNpemUsIG51bGwsICdFeHBlY3RlZCBhIGNvbnRhaW5lciBzaXplIHdoaWxlIGh5ZHJhdGluZyBpMThuIHN1YnRlbXBsYXRlJyk7XG4gICAgICAgICAgICAgICAgYXBwZW5kSTE4bk5vZGVUb0NvbGxlY3Rpb24oY29udGV4dCwgc3RhdGUsIG5vZGVPck5vZGVzKTtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXh0Tm9kZSA9IHNraXBTaWJsaW5nTm9kZXMoc3RhdGUsIGNvbnRhaW5lclNpemUgKyAxKTtcbiAgICAgICAgICAgICAgICBzZXRDdXJyZW50Tm9kZShzdGF0ZSwgbmV4dE5vZGUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICBjYXNlIDM6XG4gICAgICAgIHtcbiAgICAgICAgICBjb25zdCBzZWxlY3RlZENhc2UgPSBzdGF0ZS5pc0Nvbm5lY3RlZCA/IGNvbnRleHQuY2FzZVF1ZXVlLnNoaWZ0KCkgOiBudWxsO1xuICAgICAgICAgIGNvbnN0IGNoaWxkU3RhdGUgPSB7XG4gICAgICAgICAgICBjdXJyZW50Tm9kZTogbnVsbCxcbiAgICAgICAgICAgIGlzQ29ubmVjdGVkOiBmYWxzZVxuICAgICAgICAgIH07XG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBub2RlT3JOb2Rlcy5jYXNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29sbGVjdEkxOG5Ob2Rlc0Zyb21Eb20oY29udGV4dCwgaSA9PT0gc2VsZWN0ZWRDYXNlID8gc3RhdGUgOiBjaGlsZFN0YXRlLCBub2RlT3JOb2Rlcy5jYXNlc1tpXSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzZWxlY3RlZENhc2UgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnRleHQuZGVoeWRyYXRlZEljdURhdGEuc2V0KG5vZGVPck5vZGVzLmluZGV4LCB7XG4gICAgICAgICAgICAgIGNhc2U6IHNlbGVjdGVkQ2FzZSxcbiAgICAgICAgICAgICAgbm9kZTogbm9kZU9yTm9kZXNcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBjdXJyZW50Tm9kZSA9IGFwcGVuZEkxOG5Ob2RlVG9Db2xsZWN0aW9uKGNvbnRleHQsIHN0YXRlLCBub2RlT3JOb2Rlcyk7XG4gICAgICAgICAgc2V0Q3VycmVudE5vZGUoc3RhdGUsIGN1cnJlbnROb2RlPy5uZXh0U2libGluZyA/PyBudWxsKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbiAgfVxufVxubGV0IF9jbGFpbURlaHlkcmF0ZWRJY3VDYXNlSW1wbCA9ICgpID0+IHt9O1xuZnVuY3Rpb24gY2xhaW1EZWh5ZHJhdGVkSWN1Q2FzZShsVmlldywgaWN1SW5kZXgsIGNhc2VJbmRleCkge1xuICBfY2xhaW1EZWh5ZHJhdGVkSWN1Q2FzZUltcGwobFZpZXcsIGljdUluZGV4LCBjYXNlSW5kZXgpO1xufVxuZnVuY3Rpb24gZW5hYmxlQ2xhaW1EZWh5ZHJhdGVkSWN1Q2FzZUltcGwoKSB7XG4gIF9jbGFpbURlaHlkcmF0ZWRJY3VDYXNlSW1wbCA9IGNsYWltRGVoeWRyYXRlZEljdUNhc2VJbXBsO1xufVxuZnVuY3Rpb24gY2xhaW1EZWh5ZHJhdGVkSWN1Q2FzZUltcGwobFZpZXcsIGljdUluZGV4LCBjYXNlSW5kZXgpIHtcbiAgY29uc3QgZGVoeWRyYXRlZEljdURhdGFNYXAgPSBsVmlld1tIWURSQVRJT05dPy5kZWh5ZHJhdGVkSWN1RGF0YTtcbiAgaWYgKGRlaHlkcmF0ZWRJY3VEYXRhTWFwKSB7XG4gICAgY29uc3QgZGVoeWRyYXRlZEljdURhdGEgPSBkZWh5ZHJhdGVkSWN1RGF0YU1hcC5nZXQoaWN1SW5kZXgpO1xuICAgIGlmIChkZWh5ZHJhdGVkSWN1RGF0YT8uY2FzZSA9PT0gY2FzZUluZGV4KSB7XG4gICAgICBkZWh5ZHJhdGVkSWN1RGF0YU1hcC5kZWxldGUoaWN1SW5kZXgpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gY2xlYW51cEkxOG5IeWRyYXRpb25EYXRhKGxWaWV3KSB7XG4gIGNvbnN0IGh5ZHJhdGlvbkluZm8gPSBsVmlld1tIWURSQVRJT05dO1xuICBpZiAoaHlkcmF0aW9uSW5mbykge1xuICAgIGNvbnN0IHtcbiAgICAgIGkxOG5Ob2RlcyxcbiAgICAgIGRlaHlkcmF0ZWRJY3VEYXRhOiBkZWh5ZHJhdGVkSWN1RGF0YU1hcFxuICAgIH0gPSBoeWRyYXRpb25JbmZvO1xuICAgIGlmIChpMThuTm9kZXMgJiYgZGVoeWRyYXRlZEljdURhdGFNYXApIHtcbiAgICAgIGNvbnN0IHJlbmRlcmVyID0gbFZpZXdbUkVOREVSRVJdO1xuICAgICAgZm9yIChjb25zdCBkZWh5ZHJhdGVkSWN1RGF0YSBvZiBkZWh5ZHJhdGVkSWN1RGF0YU1hcC52YWx1ZXMoKSkge1xuICAgICAgICBjbGVhbnVwRGVoeWRyYXRlZEljdURhdGEocmVuZGVyZXIsIGkxOG5Ob2RlcywgZGVoeWRyYXRlZEljdURhdGEpO1xuICAgICAgfVxuICAgIH1cbiAgICBoeWRyYXRpb25JbmZvLmkxOG5Ob2RlcyA9IHVuZGVmaW5lZDtcbiAgICBoeWRyYXRpb25JbmZvLmRlaHlkcmF0ZWRJY3VEYXRhID0gdW5kZWZpbmVkO1xuICB9XG59XG5mdW5jdGlvbiBjbGVhbnVwRGVoeWRyYXRlZEljdURhdGEocmVuZGVyZXIsIGkxOG5Ob2RlcywgZGVoeWRyYXRlZEljdURhdGEpIHtcbiAgZm9yIChjb25zdCBub2RlIG9mIGRlaHlkcmF0ZWRJY3VEYXRhLm5vZGUuY2FzZXNbZGVoeWRyYXRlZEljdURhdGEuY2FzZV0pIHtcbiAgICBjb25zdCByTm9kZSA9IGkxOG5Ob2Rlcy5nZXQobm9kZS5pbmRleCAtIEhFQURFUl9PRkZTRVQpO1xuICAgIGlmIChyTm9kZSkge1xuICAgICAgbmF0aXZlUmVtb3ZlTm9kZShyZW5kZXJlciwgck5vZGUsIGZhbHNlKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIHJlbW92ZURlaHlkcmF0ZWRWaWV3cyhsQ29udGFpbmVyKSB7XG4gIGNvbnN0IHZpZXdzID0gbENvbnRhaW5lcltERUhZRFJBVEVEX1ZJRVdTXSA/PyBbXTtcbiAgY29uc3QgcGFyZW50TFZpZXcgPSBsQ29udGFpbmVyW1BBUkVOVF07XG4gIGNvbnN0IHJlbmRlcmVyID0gcGFyZW50TFZpZXdbUkVOREVSRVJdO1xuICBjb25zdCByZXRhaW5lZFZpZXdzID0gW107XG4gIGZvciAoY29uc3QgdmlldyBvZiB2aWV3cykge1xuICAgIGlmICh2aWV3LmRhdGFbREVGRVJfQkxPQ0tfSURdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldGFpbmVkVmlld3MucHVzaCh2aWV3KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVtb3ZlRGVoeWRyYXRlZFZpZXcodmlldywgcmVuZGVyZXIpO1xuICAgICAgbmdEZXZNb2RlICYmIG5nRGV2TW9kZS5kZWh5ZHJhdGVkVmlld3NSZW1vdmVkKys7XG4gICAgfVxuICB9XG4gIGxDb250YWluZXJbREVIWURSQVRFRF9WSUVXU10gPSByZXRhaW5lZFZpZXdzO1xufVxuZnVuY3Rpb24gcmVtb3ZlRGVoeWRyYXRlZFZpZXdMaXN0KGRlZmVyQmxvY2spIHtcbiAgY29uc3Qge1xuICAgIGxDb250YWluZXJcbiAgfSA9IGRlZmVyQmxvY2s7XG4gIGNvbnN0IGRlaHlkcmF0ZWRWaWV3cyA9IGxDb250YWluZXJbREVIWURSQVRFRF9WSUVXU107XG4gIGlmIChkZWh5ZHJhdGVkVmlld3MgPT09IG51bGwpIHJldHVybjtcbiAgY29uc3QgcGFyZW50TFZpZXcgPSBsQ29udGFpbmVyW1BBUkVOVF07XG4gIGNvbnN0IHJlbmRlcmVyID0gcGFyZW50TFZpZXdbUkVOREVSRVJdO1xuICBmb3IgKGNvbnN0IHZpZXcgb2YgZGVoeWRyYXRlZFZpZXdzKSB7XG4gICAgcmVtb3ZlRGVoeWRyYXRlZFZpZXcodmlldywgcmVuZGVyZXIpO1xuICAgIG5nRGV2TW9kZSAmJiBuZ0Rldk1vZGUuZGVoeWRyYXRlZFZpZXdzUmVtb3ZlZCsrO1xuICB9XG59XG5mdW5jdGlvbiByZW1vdmVEZWh5ZHJhdGVkVmlldyhkZWh5ZHJhdGVkVmlldywgcmVuZGVyZXIpIHtcbiAgbGV0IG5vZGVzUmVtb3ZlZCA9IDA7XG4gIGxldCBjdXJyZW50Uk5vZGUgPSBkZWh5ZHJhdGVkVmlldy5maXJzdENoaWxkO1xuICBpZiAoY3VycmVudFJOb2RlKSB7XG4gICAgY29uc3QgbnVtTm9kZXMgPSBkZWh5ZHJhdGVkVmlldy5kYXRhW05VTV9ST09UX05PREVTXTtcbiAgICB3aGlsZSAobm9kZXNSZW1vdmVkIDwgbnVtTm9kZXMpIHtcbiAgICAgIG5nRGV2TW9kZSAmJiB2YWxpZGF0ZVNpYmxpbmdOb2RlRXhpc3RzKGN1cnJlbnRSTm9kZSk7XG4gICAgICBjb25zdCBuZXh0U2libGluZyA9IGN1cnJlbnRSTm9kZS5uZXh0U2libGluZztcbiAgICAgIG5hdGl2ZVJlbW92ZU5vZGUocmVuZGVyZXIsIGN1cnJlbnRSTm9kZSwgZmFsc2UpO1xuICAgICAgY3VycmVudFJOb2RlID0gbmV4dFNpYmxpbmc7XG4gICAgICBub2Rlc1JlbW92ZWQrKztcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGNsZWFudXBMQ29udGFpbmVyKGxDb250YWluZXIpIHtcbiAgcmVtb3ZlRGVoeWRyYXRlZFZpZXdzKGxDb250YWluZXIpO1xuICBjb25zdCBob3N0TFZpZXcgPSBsQ29udGFpbmVyW0hPU1RdO1xuICBpZiAoaXNMVmlldyhob3N0TFZpZXcpKSB7XG4gICAgY2xlYW51cExWaWV3KGhvc3RMVmlldyk7XG4gIH1cbiAgZm9yIChsZXQgaSA9IENPTlRBSU5FUl9IRUFERVJfT0ZGU0VUOyBpIDwgbENvbnRhaW5lci5sZW5ndGg7IGkrKykge1xuICAgIGNsZWFudXBMVmlldyhsQ29udGFpbmVyW2ldKTtcbiAgfVxufVxuZnVuY3Rpb24gY2xlYW51cExWaWV3KGxWaWV3KSB7XG4gIGNsZWFudXBJMThuSHlkcmF0aW9uRGF0YShsVmlldyk7XG4gIGNvbnN0IHRWaWV3ID0gbFZpZXdbVFZJRVddO1xuICBmb3IgKGxldCBpID0gSEVBREVSX09GRlNFVDsgaSA8IHRWaWV3LmJpbmRpbmdTdGFydEluZGV4OyBpKyspIHtcbiAgICBpZiAoaXNMQ29udGFpbmVyKGxWaWV3W2ldKSkge1xuICAgICAgY29uc3QgbENvbnRhaW5lciA9IGxWaWV3W2ldO1xuICAgICAgY2xlYW51cExDb250YWluZXIobENvbnRhaW5lcik7XG4gICAgfSBlbHNlIGlmIChpc0xWaWV3KGxWaWV3W2ldKSkge1xuICAgICAgY2xlYW51cExWaWV3KGxWaWV3W2ldKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGNsZWFudXBEZWh5ZHJhdGVkVmlld3MoYXBwUmVmKSB7XG4gIGNvbnN0IHZpZXdSZWZzID0gYXBwUmVmLl92aWV3cztcbiAgZm9yIChjb25zdCB2aWV3UmVmIG9mIHZpZXdSZWZzKSB7XG4gICAgY29uc3QgbE5vZGUgPSBnZXRMTm9kZUZvckh5ZHJhdGlvbih2aWV3UmVmKTtcbiAgICBpZiAobE5vZGUgIT09IG51bGwgJiYgbE5vZGVbSE9TVF0gIT09IG51bGwpIHtcbiAgICAgIGlmIChpc0xWaWV3KGxOb2RlKSkge1xuICAgICAgICBjbGVhbnVwTFZpZXcobE5vZGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2xlYW51cExDb250YWluZXIobE5vZGUpO1xuICAgICAgfVxuICAgICAgbmdEZXZNb2RlICYmIG5nRGV2TW9kZS5kZWh5ZHJhdGVkVmlld3NDbGVhbnVwUnVucysrO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gY2xlYW51cEh5ZHJhdGVkRGVmZXJCbG9ja3MoZGVmZXJCbG9jaywgaHlkcmF0ZWRCbG9ja3MsIHJlZ2lzdHJ5LCBhcHBSZWYpIHtcbiAgaWYgKGRlZmVyQmxvY2sgIT09IG51bGwpIHtcbiAgICByZWdpc3RyeS5jbGVhbnVwKGh5ZHJhdGVkQmxvY2tzKTtcbiAgICBjbGVhbnVwTENvbnRhaW5lcihkZWZlckJsb2NrLmxDb250YWluZXIpO1xuICAgIGNsZWFudXBEZWh5ZHJhdGVkVmlld3MoYXBwUmVmKTtcbiAgfVxufVxuZnVuY3Rpb24gbG9jYXRlRGVoeWRyYXRlZFZpZXdzSW5Db250YWluZXIoY3VycmVudFJOb2RlLCBzZXJpYWxpemVkVmlld3MpIHtcbiAgY29uc3QgZGVoeWRyYXRlZFZpZXdzID0gW107XG4gIGZvciAoY29uc3Qgc2VyaWFsaXplZFZpZXcgb2Ygc2VyaWFsaXplZFZpZXdzKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCAoc2VyaWFsaXplZFZpZXdbTVVMVElQTElFUl0gPz8gMSk7IGkrKykge1xuICAgICAgY29uc3QgdmlldyA9IHtcbiAgICAgICAgZGF0YTogc2VyaWFsaXplZFZpZXcsXG4gICAgICAgIGZpcnN0Q2hpbGQ6IG51bGxcbiAgICAgIH07XG4gICAgICBpZiAoc2VyaWFsaXplZFZpZXdbTlVNX1JPT1RfTk9ERVNdID4gMCkge1xuICAgICAgICB2aWV3LmZpcnN0Q2hpbGQgPSBjdXJyZW50Uk5vZGU7XG4gICAgICAgIGN1cnJlbnRSTm9kZSA9IHNpYmxpbmdBZnRlcihzZXJpYWxpemVkVmlld1tOVU1fUk9PVF9OT0RFU10sIGN1cnJlbnRSTm9kZSk7XG4gICAgICB9XG4gICAgICBkZWh5ZHJhdGVkVmlld3MucHVzaCh2aWV3KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIFtjdXJyZW50Uk5vZGUsIGRlaHlkcmF0ZWRWaWV3c107XG59XG5sZXQgX2ZpbmRNYXRjaGluZ0RlaHlkcmF0ZWRWaWV3SW1wbCA9ICgpID0+IG51bGw7XG5sZXQgX2ZpbmRBbmRSZWNvbmNpbGVNYXRjaGluZ0RlaHlkcmF0ZWRWaWV3c0ltcGwgPSAoKSA9PiBudWxsO1xuZnVuY3Rpb24gZW5hYmxlRmluZE1hdGNoaW5nRGVoeWRyYXRlZFZpZXdJbXBsKCkge1xuICBfZmluZE1hdGNoaW5nRGVoeWRyYXRlZFZpZXdJbXBsID0gZmluZE1hdGNoaW5nRGVoeWRyYXRlZFZpZXdJbXBsO1xuICBfZmluZEFuZFJlY29uY2lsZU1hdGNoaW5nRGVoeWRyYXRlZFZpZXdzSW1wbCA9IGZpbmRBbmRSZWNvbmNpbGVNYXRjaGluZ0RlaHlkcmF0ZWRWaWV3c0ltcGw7XG59XG5mdW5jdGlvbiBmaW5kTWF0Y2hpbmdEZWh5ZHJhdGVkVmlld0ltcGwobENvbnRhaW5lciwgdGVtcGxhdGUpIHtcbiAgaWYgKGhhc01hdGNoaW5nRGVoeWRyYXRlZFZpZXcobENvbnRhaW5lciwgdGVtcGxhdGUpKSB7XG4gICAgcmV0dXJuIGxDb250YWluZXJbREVIWURSQVRFRF9WSUVXU10uc2hpZnQoKTtcbiAgfSBlbHNlIHtcbiAgICByZW1vdmVEZWh5ZHJhdGVkVmlld3MobENvbnRhaW5lcik7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cbmZ1bmN0aW9uIGZpbmRNYXRjaGluZ0RlaHlkcmF0ZWRWaWV3KGxDb250YWluZXIsIHRlbXBsYXRlKSB7XG4gIHJldHVybiBfZmluZE1hdGNoaW5nRGVoeWRyYXRlZFZpZXdJbXBsKGxDb250YWluZXIsIHRlbXBsYXRlKTtcbn1cbmZ1bmN0aW9uIGZpbmRBbmRSZWNvbmNpbGVNYXRjaGluZ0RlaHlkcmF0ZWRWaWV3c0ltcGwobENvbnRhaW5lciwgdGVtcGxhdGVUTm9kZSwgaG9zdExWaWV3KSB7XG4gIGlmICh0ZW1wbGF0ZVROb2RlLnRWaWV3LnNzcklkID09PSBudWxsKSByZXR1cm4gbnVsbDtcbiAgY29uc3QgZGVoeWRyYXRlZFZpZXcgPSBmaW5kTWF0Y2hpbmdEZWh5ZHJhdGVkVmlldyhsQ29udGFpbmVyLCB0ZW1wbGF0ZVROb2RlLnRWaWV3LnNzcklkKTtcbiAgaWYgKGhvc3RMVmlld1tUVklFV10uZmlyc3RVcGRhdGVQYXNzICYmIGRlaHlkcmF0ZWRWaWV3ID09PSBudWxsKSB7XG4gICAgcmVtb3ZlU3RhbGVEZWh5ZHJhdGVkQnJhbmNoKGhvc3RMVmlldywgdGVtcGxhdGVUTm9kZSk7XG4gIH1cbiAgcmV0dXJuIGRlaHlkcmF0ZWRWaWV3O1xufVxuZnVuY3Rpb24gZmluZEFuZFJlY29uY2lsZU1hdGNoaW5nRGVoeWRyYXRlZFZpZXdzKGxDb250YWluZXIsIHRlbXBsYXRlVE5vZGUsIGhvc3RMVmlldykge1xuICByZXR1cm4gX2ZpbmRBbmRSZWNvbmNpbGVNYXRjaGluZ0RlaHlkcmF0ZWRWaWV3c0ltcGwobENvbnRhaW5lciwgdGVtcGxhdGVUTm9kZSwgaG9zdExWaWV3KTtcbn1cbmZ1bmN0aW9uIHJlbW92ZVN0YWxlRGVoeWRyYXRlZEJyYW5jaChob3N0TFZpZXcsIHROb2RlKSB7XG4gIGxldCBjdXJyZW50VE5vZGUgPSB0Tm9kZTtcbiAgd2hpbGUgKGN1cnJlbnRUTm9kZSkge1xuICAgIGlmIChjbGVhbnVwTWF0Y2hpbmdEZWh5ZHJhdGVkVmlld3MoaG9zdExWaWV3LCBjdXJyZW50VE5vZGUpKSByZXR1cm47XG4gICAgaWYgKChjdXJyZW50VE5vZGUuZmxhZ3MgJiAyNTYpID09PSAyNTYpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjdXJyZW50VE5vZGUgPSBjdXJyZW50VE5vZGUucHJldjtcbiAgfVxuICBjdXJyZW50VE5vZGUgPSB0Tm9kZS5uZXh0O1xuICB3aGlsZSAoY3VycmVudFROb2RlKSB7XG4gICAgaWYgKChjdXJyZW50VE5vZGUuZmxhZ3MgJiA1MTIpICE9PSA1MTIpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBpZiAoY2xlYW51cE1hdGNoaW5nRGVoeWRyYXRlZFZpZXdzKGhvc3RMVmlldywgY3VycmVudFROb2RlKSkgcmV0dXJuO1xuICAgIGN1cnJlbnRUTm9kZSA9IGN1cnJlbnRUTm9kZS5uZXh0O1xuICB9XG59XG5mdW5jdGlvbiBoYXNNYXRjaGluZ0RlaHlkcmF0ZWRWaWV3KGxDb250YWluZXIsIHRlbXBsYXRlKSB7XG4gIGNvbnN0IHZpZXdzID0gbENvbnRhaW5lcltERUhZRFJBVEVEX1ZJRVdTXTtcbiAgaWYgKCF0ZW1wbGF0ZSB8fCB2aWV3cyA9PT0gbnVsbCB8fCB2aWV3cy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHZpZXdzWzBdLmRhdGFbVEVNUExBVEVfSURdID09PSB0ZW1wbGF0ZTtcbn1cbmZ1bmN0aW9uIGNsZWFudXBNYXRjaGluZ0RlaHlkcmF0ZWRWaWV3cyhob3N0TFZpZXcsIGN1cnJlbnRUTm9kZSkge1xuICBjb25zdCBzc3JJZCA9IGN1cnJlbnRUTm9kZS50Vmlldz8uc3NySWQ7XG4gIGlmIChzc3JJZCA9PSBudWxsKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IGNvbnRhaW5lciA9IGhvc3RMVmlld1tjdXJyZW50VE5vZGUuaW5kZXhdO1xuICBpZiAoaXNMQ29udGFpbmVyKGNvbnRhaW5lcikgJiYgaGFzTWF0Y2hpbmdEZWh5ZHJhdGVkVmlldyhjb250YWluZXIsIHNzcklkKSkge1xuICAgIHJlbW92ZURlaHlkcmF0ZWRWaWV3cyhjb250YWluZXIpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cbmxldCBDb21wb25lbnRSZWYkMSA9IGNsYXNzIENvbXBvbmVudFJlZiB7fTtcbmxldCBDb21wb25lbnRGYWN0b3J5JDEgPSBjbGFzcyBDb21wb25lbnRGYWN0b3J5IHt9O1xuY2xhc3MgX051bGxDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIge1xuICByZXNvbHZlQ29tcG9uZW50RmFjdG9yeShjb21wb25lbnQpIHtcbiAgICB0aHJvdyBuZXcgUnVudGltZUVycm9yKDkxNywgdHlwZW9mIG5nRGV2TW9kZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbmdEZXZNb2RlICYmIGBObyBjb21wb25lbnQgZmFjdG9yeSBmb3VuZCBmb3IgJHtzdHJpbmdpZnkoY29tcG9uZW50KX0uYCk7XG4gIH1cbn1cbmxldCBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIkMSA9IGNsYXNzIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlciB7XG4gIHN0YXRpYyBOVUxMID0gLyojX19QVVJFX18qL25ldyBfTnVsbENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcigpO1xufTtcbmNsYXNzIFJlbmRlcmVyRmFjdG9yeTIge31cbmxldCBSZW5kZXJlcjIgPSAvKiNfX1BVUkVfXyovKCgpID0+IHtcbiAgY2xhc3MgUmVuZGVyZXIyIHtcbiAgICBkZXN0cm95Tm9kZSA9IG51bGw7XG4gICAgc3RhdGljIF9fTkdfRUxFTUVOVF9JRF9fID0gKCkgPT4gaW5qZWN0UmVuZGVyZXIyKCk7XG4gIH1cbiAgcmV0dXJuIFJlbmRlcmVyMjtcbn0pKCk7XG5mdW5jdGlvbiBpbmplY3RSZW5kZXJlcjIoKSB7XG4gIGNvbnN0IGxWaWV3ID0gZ2V0TFZpZXcoKTtcbiAgY29uc3QgdE5vZGUgPSBnZXRDdXJyZW50VE5vZGUoKTtcbiAgY29uc3Qgbm9kZUF0SW5kZXggPSBnZXRDb21wb25lbnRMVmlld0J5SW5kZXgodE5vZGUuaW5kZXgsIGxWaWV3KTtcbiAgcmV0dXJuIChpc0xWaWV3KG5vZGVBdEluZGV4KSA/IG5vZGVBdEluZGV4IDogbFZpZXcpW1JFTkRFUkVSXTtcbn1cbmxldCBTYW5pdGl6ZXIgPSAvKiNfX1BVUkVfXyovKCgpID0+IHtcbiAgY2xhc3MgU2FuaXRpemVyIHtcbiAgICBzdGF0aWMgybVwcm92ID0gLyogQF9fUFVSRV9fICovXG4gICAgX19kZWZpbmVJbmplY3RhYmxlKHtcbiAgICAgIHRva2VuOiBTYW5pdGl6ZXIsXG4gICAgICBwcm92aWRlZEluOiAncm9vdCcsXG4gICAgICBmYWN0b3J5OiAoKSA9PiBudWxsXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIFNhbml0aXplcjtcbn0pKCk7XG5mdW5jdGlvbiBpc01vZHVsZVdpdGhQcm92aWRlcnModmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlLm5nTW9kdWxlICE9PSB1bmRlZmluZWQ7XG59XG5mdW5jdGlvbiBpc05nTW9kdWxlKHZhbHVlKSB7XG4gIHJldHVybiAhIWdldE5nTW9kdWxlRGVmKHZhbHVlKTtcbn1cbmZ1bmN0aW9uIGlzUGlwZSh2YWx1ZSkge1xuICByZXR1cm4gISFnZXRQaXBlRGVmJDEodmFsdWUpO1xufVxuZnVuY3Rpb24gaXNEaXJlY3RpdmUodmFsdWUpIHtcbiAgcmV0dXJuICEhZ2V0RGlyZWN0aXZlRGVmKHZhbHVlKTtcbn1cbmZ1bmN0aW9uIGlzQ29tcG9uZW50KHZhbHVlKSB7XG4gIHJldHVybiAhIWdldENvbXBvbmVudERlZih2YWx1ZSk7XG59XG5mdW5jdGlvbiBnZXREZXBlbmRlbmN5VHlwZUZvckVycm9yKHR5cGUpIHtcbiAgaWYgKGdldENvbXBvbmVudERlZih0eXBlKSkgcmV0dXJuICdjb21wb25lbnQnO1xuICBpZiAoZ2V0RGlyZWN0aXZlRGVmKHR5cGUpKSByZXR1cm4gJ2RpcmVjdGl2ZSc7XG4gIGlmIChnZXRQaXBlRGVmJDEodHlwZSkpIHJldHVybiAncGlwZSc7XG4gIHJldHVybiAndHlwZSc7XG59XG5mdW5jdGlvbiB2ZXJpZnlTdGFuZGFsb25lSW1wb3J0KGRlcFR5cGUsIGltcG9ydGluZ1R5cGUpIHtcbiAgaWYgKGlzRm9yd2FyZFJlZihkZXBUeXBlKSkge1xuICAgIGRlcFR5cGUgPSByZXNvbHZlRm9yd2FyZFJlZihkZXBUeXBlKTtcbiAgICBpZiAoIWRlcFR5cGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgZm9yd2FyZFJlZiBmdW5jdGlvbiwgaW1wb3J0ZWQgZnJvbSBcIiR7c3RyaW5naWZ5Rm9yRXJyb3IoaW1wb3J0aW5nVHlwZSl9XCIsIHRvIHJldHVybiBhIHN0YW5kYWxvbmUgZW50aXR5IG9yIE5nTW9kdWxlIGJ1dCBnb3QgXCIke3N0cmluZ2lmeUZvckVycm9yKGRlcFR5cGUpIHx8IGRlcFR5cGV9XCIuYCk7XG4gICAgfVxuICB9XG4gIGlmIChnZXROZ01vZHVsZURlZihkZXBUeXBlKSA9PSBudWxsKSB7XG4gICAgY29uc3QgZGVmID0gZ2V0Q29tcG9uZW50RGVmKGRlcFR5cGUpIHx8IGdldERpcmVjdGl2ZURlZihkZXBUeXBlKSB8fCBnZXRQaXBlRGVmJDEoZGVwVHlwZSk7XG4gICAgaWYgKGRlZiAhPSBudWxsKSB7XG4gICAgICBpZiAoIWRlZi5zdGFuZGFsb25lKSB7XG4gICAgICAgIGNvbnN0IHR5cGUgPSBnZXREZXBlbmRlbmN5VHlwZUZvckVycm9yKGRlcFR5cGUpO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBcIiR7c3RyaW5naWZ5Rm9yRXJyb3IoZGVwVHlwZSl9XCIgJHt0eXBlfSwgaW1wb3J0ZWQgZnJvbSBcIiR7c3RyaW5naWZ5Rm9yRXJyb3IoaW1wb3J0aW5nVHlwZSl9XCIsIGlzIG5vdCBzdGFuZGFsb25lLiBEb2VzIHRoZSAke3R5cGV9IGhhdmUgdGhlIHN0YW5kYWxvbmU6IGZhbHNlIGZsYWc/YCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChpc01vZHVsZVdpdGhQcm92aWRlcnMoZGVwVHlwZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBBIG1vZHVsZSB3aXRoIHByb3ZpZGVycyB3YXMgaW1wb3J0ZWQgZnJvbSBcIiR7c3RyaW5naWZ5Rm9yRXJyb3IoaW1wb3J0aW5nVHlwZSl9XCIuIE1vZHVsZXMgd2l0aCBwcm92aWRlcnMgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gc3RhbmRhbG9uZSBjb21wb25lbnRzIGltcG9ydHMuYCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBcIiR7c3RyaW5naWZ5Rm9yRXJyb3IoZGVwVHlwZSl9XCIgdHlwZSwgaW1wb3J0ZWQgZnJvbSBcIiR7c3RyaW5naWZ5Rm9yRXJyb3IoaW1wb3J0aW5nVHlwZSl9XCIsIG11c3QgYmUgYSBzdGFuZGFsb25lIGNvbXBvbmVudCAvIGRpcmVjdGl2ZSAvIHBpcGUgb3IgYW4gTmdNb2R1bGUuIERpZCB5b3UgZm9yZ2V0IHRvIGFkZCB0aGUgcmVxdWlyZWQgQENvbXBvbmVudCAvIEBEaXJlY3RpdmUgLyBAUGlwZSBvciBATmdNb2R1bGUgYW5ub3RhdGlvbj9gKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbmNsYXNzIERlcHNUcmFja2VyIHtcbiAgb3duZXJOZ01vZHVsZSA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha01hcCgpO1xuICBuZ01vZHVsZXNXaXRoU29tZVVucmVzb2x2ZWREZWNscyA9IC8qI19fUFVSRV9fKi9uZXcgU2V0KCk7XG4gIG5nTW9kdWxlc1Njb3BlQ2FjaGUgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbiAgc3RhbmRhbG9uZUNvbXBvbmVudHNTY29wZUNhY2hlID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG4gIHJlc29sdmVOZ01vZHVsZXNEZWNscygpIHtcbiAgICBpZiAodGhpcy5uZ01vZHVsZXNXaXRoU29tZVVucmVzb2x2ZWREZWNscy5zaXplID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGZvciAoY29uc3QgbW9kdWxlVHlwZSBvZiB0aGlzLm5nTW9kdWxlc1dpdGhTb21lVW5yZXNvbHZlZERlY2xzKSB7XG4gICAgICBjb25zdCBkZWYgPSBnZXROZ01vZHVsZURlZihtb2R1bGVUeXBlKTtcbiAgICAgIGlmIChkZWY/LmRlY2xhcmF0aW9ucykge1xuICAgICAgICBmb3IgKGNvbnN0IGRlY2wgb2YgbWF5YmVVbndyYXBGbihkZWYuZGVjbGFyYXRpb25zKSkge1xuICAgICAgICAgIGlmIChpc0NvbXBvbmVudChkZWNsKSkge1xuICAgICAgICAgICAgdGhpcy5vd25lck5nTW9kdWxlLnNldChkZWNsLCBtb2R1bGVUeXBlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5uZ01vZHVsZXNXaXRoU29tZVVucmVzb2x2ZWREZWNscy5jbGVhcigpO1xuICB9XG4gIGdldENvbXBvbmVudERlcGVuZGVuY2llcyh0eXBlLCByYXdJbXBvcnRzKSB7XG4gICAgdGhpcy5yZXNvbHZlTmdNb2R1bGVzRGVjbHMoKTtcbiAgICBjb25zdCBkZWYgPSBnZXRDb21wb25lbnREZWYodHlwZSk7XG4gICAgaWYgKGRlZiA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBBdHRlbXB0aW5nIHRvIGdldCBjb21wb25lbnQgZGVwZW5kZW5jaWVzIGZvciBhIHR5cGUgdGhhdCBpcyBub3QgYSBjb21wb25lbnQ6ICR7dHlwZX1gKTtcbiAgICB9XG4gICAgaWYgKGRlZi5zdGFuZGFsb25lKSB7XG4gICAgICBjb25zdCBzY29wZSA9IHRoaXMuZ2V0U3RhbmRhbG9uZUNvbXBvbmVudFNjb3BlKHR5cGUsIHJhd0ltcG9ydHMpO1xuICAgICAgaWYgKHNjb3BlLmNvbXBpbGF0aW9uLmlzUG9pc29uZWQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBkZXBlbmRlbmNpZXM6IFtdXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkZXBlbmRlbmNpZXM6IFsuLi5zY29wZS5jb21waWxhdGlvbi5kaXJlY3RpdmVzLCAuLi5zY29wZS5jb21waWxhdGlvbi5waXBlcywgLi4uc2NvcGUuY29tcGlsYXRpb24ubmdNb2R1bGVzXVxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCF0aGlzLm93bmVyTmdNb2R1bGUuaGFzKHR5cGUpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZGVwZW5kZW5jaWVzOiBbXVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgY29uc3Qgc2NvcGUgPSB0aGlzLmdldE5nTW9kdWxlU2NvcGUodGhpcy5vd25lck5nTW9kdWxlLmdldCh0eXBlKSk7XG4gICAgICBpZiAoc2NvcGUuY29tcGlsYXRpb24uaXNQb2lzb25lZCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGRlcGVuZGVuY2llczogW11cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRlcGVuZGVuY2llczogWy4uLnNjb3BlLmNvbXBpbGF0aW9uLmRpcmVjdGl2ZXMsIC4uLnNjb3BlLmNvbXBpbGF0aW9uLnBpcGVzXVxuICAgICAgfTtcbiAgICB9XG4gIH1cbiAgcmVnaXN0ZXJOZ01vZHVsZSh0eXBlLCBzY29wZUluZm8pIHtcbiAgICBpZiAoIWlzTmdNb2R1bGUodHlwZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQXR0ZW1wdGluZyB0byByZWdpc3RlciBhIFR5cGUgd2hpY2ggaXMgbm90IE5nTW9kdWxlIGFzIE5nTW9kdWxlOiAke3R5cGV9YCk7XG4gICAgfVxuICAgIHRoaXMubmdNb2R1bGVzV2l0aFNvbWVVbnJlc29sdmVkRGVjbHMuYWRkKHR5cGUpO1xuICB9XG4gIGNsZWFyU2NvcGVDYWNoZUZvcih0eXBlKSB7XG4gICAgdGhpcy5uZ01vZHVsZXNTY29wZUNhY2hlLmRlbGV0ZSh0eXBlKTtcbiAgICB0aGlzLnN0YW5kYWxvbmVDb21wb25lbnRzU2NvcGVDYWNoZS5kZWxldGUodHlwZSk7XG4gIH1cbiAgZ2V0TmdNb2R1bGVTY29wZSh0eXBlKSB7XG4gICAgaWYgKHRoaXMubmdNb2R1bGVzU2NvcGVDYWNoZS5oYXModHlwZSkpIHtcbiAgICAgIHJldHVybiB0aGlzLm5nTW9kdWxlc1Njb3BlQ2FjaGUuZ2V0KHR5cGUpO1xuICAgIH1cbiAgICBjb25zdCBzY29wZSA9IHRoaXMuY29tcHV0ZU5nTW9kdWxlU2NvcGUodHlwZSk7XG4gICAgdGhpcy5uZ01vZHVsZXNTY29wZUNhY2hlLnNldCh0eXBlLCBzY29wZSk7XG4gICAgcmV0dXJuIHNjb3BlO1xuICB9XG4gIGNvbXB1dGVOZ01vZHVsZVNjb3BlKHR5cGUpIHtcbiAgICBjb25zdCBkZWYgPSBnZXROZ01vZHVsZURlZk9yVGhyb3codHlwZSk7XG4gICAgY29uc3Qgc2NvcGUgPSB7XG4gICAgICBleHBvcnRlZDoge1xuICAgICAgICBkaXJlY3RpdmVzOiBuZXcgU2V0KCksXG4gICAgICAgIHBpcGVzOiBuZXcgU2V0KClcbiAgICAgIH0sXG4gICAgICBjb21waWxhdGlvbjoge1xuICAgICAgICBkaXJlY3RpdmVzOiBuZXcgU2V0KCksXG4gICAgICAgIHBpcGVzOiBuZXcgU2V0KClcbiAgICAgIH1cbiAgICB9O1xuICAgIGZvciAoY29uc3QgaW1wb3J0ZWQgb2YgbWF5YmVVbndyYXBGbihkZWYuaW1wb3J0cykpIHtcbiAgICAgIGlmIChpc05nTW9kdWxlKGltcG9ydGVkKSkge1xuICAgICAgICBjb25zdCBpbXBvcnRlZFNjb3BlID0gdGhpcy5nZXROZ01vZHVsZVNjb3BlKGltcG9ydGVkKTtcbiAgICAgICAgYWRkU2V0KGltcG9ydGVkU2NvcGUuZXhwb3J0ZWQuZGlyZWN0aXZlcywgc2NvcGUuY29tcGlsYXRpb24uZGlyZWN0aXZlcyk7XG4gICAgICAgIGFkZFNldChpbXBvcnRlZFNjb3BlLmV4cG9ydGVkLnBpcGVzLCBzY29wZS5jb21waWxhdGlvbi5waXBlcyk7XG4gICAgICB9IGVsc2UgaWYgKGlzU3RhbmRhbG9uZShpbXBvcnRlZCkpIHtcbiAgICAgICAgaWYgKGlzRGlyZWN0aXZlKGltcG9ydGVkKSB8fCBpc0NvbXBvbmVudChpbXBvcnRlZCkpIHtcbiAgICAgICAgICBzY29wZS5jb21waWxhdGlvbi5kaXJlY3RpdmVzLmFkZChpbXBvcnRlZCk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNQaXBlKGltcG9ydGVkKSkge1xuICAgICAgICAgIHNjb3BlLmNvbXBpbGF0aW9uLnBpcGVzLmFkZChpbXBvcnRlZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFcnJvcig5ODAsICdUaGUgc3RhbmRhbG9uZSBpbXBvcnRlZCB0eXBlIGlzIG5laXRoZXIgYSBjb21wb25lbnQgbm9yIGEgZGlyZWN0aXZlIG5vciBhIHBpcGUnKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2NvcGUuY29tcGlsYXRpb24uaXNQb2lzb25lZCA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIXNjb3BlLmNvbXBpbGF0aW9uLmlzUG9pc29uZWQpIHtcbiAgICAgIGZvciAoY29uc3QgZGVjbCBvZiBtYXliZVVud3JhcEZuKGRlZi5kZWNsYXJhdGlvbnMpKSB7XG4gICAgICAgIGlmIChpc05nTW9kdWxlKGRlY2wpIHx8IGlzU3RhbmRhbG9uZShkZWNsKSkge1xuICAgICAgICAgIHNjb3BlLmNvbXBpbGF0aW9uLmlzUG9pc29uZWQgPSB0cnVlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1BpcGUoZGVjbCkpIHtcbiAgICAgICAgICBzY29wZS5jb21waWxhdGlvbi5waXBlcy5hZGQoZGVjbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2NvcGUuY29tcGlsYXRpb24uZGlyZWN0aXZlcy5hZGQoZGVjbCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgZm9yIChjb25zdCBleHBvcnRlZCBvZiBtYXliZVVud3JhcEZuKGRlZi5leHBvcnRzKSkge1xuICAgICAgaWYgKGlzTmdNb2R1bGUoZXhwb3J0ZWQpKSB7XG4gICAgICAgIGNvbnN0IGV4cG9ydGVkU2NvcGUgPSB0aGlzLmdldE5nTW9kdWxlU2NvcGUoZXhwb3J0ZWQpO1xuICAgICAgICBhZGRTZXQoZXhwb3J0ZWRTY29wZS5leHBvcnRlZC5kaXJlY3RpdmVzLCBzY29wZS5leHBvcnRlZC5kaXJlY3RpdmVzKTtcbiAgICAgICAgYWRkU2V0KGV4cG9ydGVkU2NvcGUuZXhwb3J0ZWQucGlwZXMsIHNjb3BlLmV4cG9ydGVkLnBpcGVzKTtcbiAgICAgICAgYWRkU2V0KGV4cG9ydGVkU2NvcGUuZXhwb3J0ZWQuZGlyZWN0aXZlcywgc2NvcGUuY29tcGlsYXRpb24uZGlyZWN0aXZlcyk7XG4gICAgICAgIGFkZFNldChleHBvcnRlZFNjb3BlLmV4cG9ydGVkLnBpcGVzLCBzY29wZS5jb21waWxhdGlvbi5waXBlcyk7XG4gICAgICB9IGVsc2UgaWYgKGlzUGlwZShleHBvcnRlZCkpIHtcbiAgICAgICAgc2NvcGUuZXhwb3J0ZWQucGlwZXMuYWRkKGV4cG9ydGVkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNjb3BlLmV4cG9ydGVkLmRpcmVjdGl2ZXMuYWRkKGV4cG9ydGVkKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHNjb3BlO1xuICB9XG4gIGdldFN0YW5kYWxvbmVDb21wb25lbnRTY29wZSh0eXBlLCByYXdJbXBvcnRzKSB7XG4gICAgaWYgKHRoaXMuc3RhbmRhbG9uZUNvbXBvbmVudHNTY29wZUNhY2hlLmhhcyh0eXBlKSkge1xuICAgICAgcmV0dXJuIHRoaXMuc3RhbmRhbG9uZUNvbXBvbmVudHNTY29wZUNhY2hlLmdldCh0eXBlKTtcbiAgICB9XG4gICAgY29uc3QgYW5zID0gdGhpcy5jb21wdXRlU3RhbmRhbG9uZUNvbXBvbmVudFNjb3BlKHR5cGUsIHJhd0ltcG9ydHMpO1xuICAgIHRoaXMuc3RhbmRhbG9uZUNvbXBvbmVudHNTY29wZUNhY2hlLnNldCh0eXBlLCBhbnMpO1xuICAgIHJldHVybiBhbnM7XG4gIH1cbiAgY29tcHV0ZVN0YW5kYWxvbmVDb21wb25lbnRTY29wZSh0eXBlLCByYXdJbXBvcnRzKSB7XG4gICAgY29uc3QgYW5zID0ge1xuICAgICAgY29tcGlsYXRpb246IHtcbiAgICAgICAgZGlyZWN0aXZlczogbmV3IFNldChbdHlwZV0pLFxuICAgICAgICBwaXBlczogbmV3IFNldCgpLFxuICAgICAgICBuZ01vZHVsZXM6IG5ldyBTZXQoKVxuICAgICAgfVxuICAgIH07XG4gICAgZm9yIChjb25zdCByYXdJbXBvcnQgb2YgZmxhdHRlbihyYXdJbXBvcnRzID8/IFtdKSkge1xuICAgICAgY29uc3QgaW1wb3J0ZWQgPSByZXNvbHZlRm9yd2FyZFJlZihyYXdJbXBvcnQpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgdmVyaWZ5U3RhbmRhbG9uZUltcG9ydChpbXBvcnRlZCwgdHlwZSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGFucy5jb21waWxhdGlvbi5pc1BvaXNvbmVkID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIGFucztcbiAgICAgIH1cbiAgICAgIGlmIChpc05nTW9kdWxlKGltcG9ydGVkKSkge1xuICAgICAgICBhbnMuY29tcGlsYXRpb24ubmdNb2R1bGVzLmFkZChpbXBvcnRlZCk7XG4gICAgICAgIGNvbnN0IGltcG9ydGVkU2NvcGUgPSB0aGlzLmdldE5nTW9kdWxlU2NvcGUoaW1wb3J0ZWQpO1xuICAgICAgICBpZiAoaW1wb3J0ZWRTY29wZS5leHBvcnRlZC5pc1BvaXNvbmVkKSB7XG4gICAgICAgICAgYW5zLmNvbXBpbGF0aW9uLmlzUG9pc29uZWQgPSB0cnVlO1xuICAgICAgICAgIHJldHVybiBhbnM7XG4gICAgICAgIH1cbiAgICAgICAgYWRkU2V0KGltcG9ydGVkU2NvcGUuZXhwb3J0ZWQuZGlyZWN0aXZlcywgYW5zLmNvbXBpbGF0aW9uLmRpcmVjdGl2ZXMpO1xuICAgICAgICBhZGRTZXQoaW1wb3J0ZWRTY29wZS5leHBvcnRlZC5waXBlcywgYW5zLmNvbXBpbGF0aW9uLnBpcGVzKTtcbiAgICAgIH0gZWxzZSBpZiAoaXNQaXBlKGltcG9ydGVkKSkge1xuICAgICAgICBhbnMuY29tcGlsYXRpb24ucGlwZXMuYWRkKGltcG9ydGVkKTtcbiAgICAgIH0gZWxzZSBpZiAoaXNEaXJlY3RpdmUoaW1wb3J0ZWQpIHx8IGlzQ29tcG9uZW50KGltcG9ydGVkKSkge1xuICAgICAgICBhbnMuY29tcGlsYXRpb24uZGlyZWN0aXZlcy5hZGQoaW1wb3J0ZWQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYW5zLmNvbXBpbGF0aW9uLmlzUG9pc29uZWQgPSB0cnVlO1xuICAgICAgICByZXR1cm4gYW5zO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYW5zO1xuICB9XG4gIGlzT3JwaGFuQ29tcG9uZW50KGNtcCkge1xuICAgIGNvbnN0IGRlZiA9IGdldENvbXBvbmVudERlZihjbXApO1xuICAgIGlmICghZGVmIHx8IGRlZi5zdGFuZGFsb25lKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMucmVzb2x2ZU5nTW9kdWxlc0RlY2xzKCk7XG4gICAgcmV0dXJuICF0aGlzLm93bmVyTmdNb2R1bGUuaGFzKGNtcCk7XG4gIH1cbn1cbmZ1bmN0aW9uIGFkZFNldChzb3VyY2VTZXQsIHRhcmdldFNldCkge1xuICBmb3IgKGNvbnN0IG0gb2Ygc291cmNlU2V0KSB7XG4gICAgdGFyZ2V0U2V0LmFkZChtKTtcbiAgfVxufVxuY29uc3QgZGVwc1RyYWNrZXIgPSAvKiNfX1BVUkVfXyovbmV3IERlcHNUcmFja2VyKCk7XG5jb25zdCBOT1RfRk9VTkRfQ0hFQ0tfT05MWV9FTEVNRU5UX0lOSkVDVE9SID0ge307XG5jbGFzcyBDaGFpbmVkSW5qZWN0b3Ige1xuICBpbmplY3RvcjtcbiAgcGFyZW50SW5qZWN0b3I7XG4gIGNvbnN0cnVjdG9yKGluamVjdG9yLCBwYXJlbnRJbmplY3Rvcikge1xuICAgIHRoaXMuaW5qZWN0b3IgPSBpbmplY3RvcjtcbiAgICB0aGlzLnBhcmVudEluamVjdG9yID0gcGFyZW50SW5qZWN0b3I7XG4gIH1cbiAgZ2V0KHRva2VuLCBub3RGb3VuZFZhbHVlLCBvcHRpb25zKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmluamVjdG9yLmdldCh0b2tlbiwgTk9UX0ZPVU5EX0NIRUNLX09OTFlfRUxFTUVOVF9JTkpFQ1RPUiwgb3B0aW9ucyk7XG4gICAgaWYgKHZhbHVlICE9PSBOT1RfRk9VTkRfQ0hFQ0tfT05MWV9FTEVNRU5UX0lOSkVDVE9SIHx8IG5vdEZvdW5kVmFsdWUgPT09IE5PVF9GT1VORF9DSEVDS19PTkxZX0VMRU1FTlRfSU5KRUNUT1IpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMucGFyZW50SW5qZWN0b3IuZ2V0KHRva2VuLCBub3RGb3VuZFZhbHVlLCBvcHRpb25zKTtcbiAgfVxufVxuZnVuY3Rpb24gY29tcHV0ZVN0YXRpY1N0eWxpbmcodE5vZGUsIGF0dHJzLCB3cml0ZVRvSG9zdCkge1xuICBuZ0Rldk1vZGUgJiYgYXNzZXJ0Rmlyc3RDcmVhdGVQYXNzKGdldFRWaWV3KCksICdFeHBlY3RpbmcgdG8gYmUgY2FsbGVkIGluIGZpcnN0IHRlbXBsYXRlIHBhc3Mgb25seScpO1xuICBsZXQgc3R5bGVzID0gd3JpdGVUb0hvc3QgPyB0Tm9kZS5zdHlsZXMgOiBudWxsO1xuICBsZXQgY2xhc3NlcyA9IHdyaXRlVG9Ib3N0ID8gdE5vZGUuY2xhc3NlcyA6IG51bGw7XG4gIGxldCBtb2RlID0gMDtcbiAgaWYgKGF0dHJzICE9PSBudWxsKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhdHRycy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgdmFsdWUgPSBhdHRyc1tpXTtcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICAgIG1vZGUgPSB2YWx1ZTtcbiAgICAgIH0gZWxzZSBpZiAobW9kZSA9PSAxKSB7XG4gICAgICAgIGNsYXNzZXMgPSBjb25jYXRTdHJpbmdzV2l0aFNwYWNlKGNsYXNzZXMsIHZhbHVlKTtcbiAgICAgIH0gZWxzZSBpZiAobW9kZSA9PSAyKSB7XG4gICAgICAgIGNvbnN0IHN0eWxlID0gdmFsdWU7XG4gICAgICAgIGNvbnN0IHN0eWxlVmFsdWUgPSBhdHRyc1srK2ldO1xuICAgICAgICBzdHlsZXMgPSBjb25jYXRTdHJpbmdzV2l0aFNwYWNlKHN0eWxlcywgc3R5bGUgKyAnOiAnICsgc3R5bGVWYWx1ZSArICc7Jyk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHdyaXRlVG9Ib3N0ID8gdE5vZGUuc3R5bGVzID0gc3R5bGVzIDogdE5vZGUuc3R5bGVzV2l0aG91dEhvc3QgPSBzdHlsZXM7XG4gIHdyaXRlVG9Ib3N0ID8gdE5vZGUuY2xhc3NlcyA9IGNsYXNzZXMgOiB0Tm9kZS5jbGFzc2VzV2l0aG91dEhvc3QgPSBjbGFzc2VzO1xufVxuZnVuY3Rpb24gybXJtWRpcmVjdGl2ZUluamVjdCh0b2tlbiwgZmxhZ3MgPSAwKSB7XG4gIGNvbnN0IGxWaWV3ID0gZ2V0TFZpZXcoKTtcbiAgaWYgKGxWaWV3ID09PSBudWxsKSB7XG4gICAgbmdEZXZNb2RlICYmIGFzc2VydEluamVjdEltcGxlbWVudGF0aW9uTm90RXF1YWwoybXJtWRpcmVjdGl2ZUluamVjdCk7XG4gICAgcmV0dXJuIF9faW5qZWN0KHRva2VuLCBmbGFncyk7XG4gIH1cbiAgY29uc3QgdE5vZGUgPSBnZXRDdXJyZW50VE5vZGUoKTtcbiAgY29uc3QgdmFsdWUgPSBnZXRPckNyZWF0ZUluamVjdGFibGUodE5vZGUsIGxWaWV3LCByZXNvbHZlRm9yd2FyZFJlZih0b2tlbiksIGZsYWdzKTtcbiAgbmdEZXZNb2RlICYmIGVtaXRJbmplY3RFdmVudCh0b2tlbiwgdmFsdWUsIGZsYWdzKTtcbiAgcmV0dXJuIHZhbHVlO1xufVxuZnVuY3Rpb24gybXJtWludmFsaWRGYWN0b3J5KCkge1xuICBjb25zdCBtc2cgPSBuZ0Rldk1vZGUgPyBgVGhpcyBjb25zdHJ1Y3RvciB3YXMgbm90IGNvbXBhdGlibGUgd2l0aCBEZXBlbmRlbmN5IEluamVjdGlvbi5gIDogJ2ludmFsaWQnO1xuICB0aHJvdyBuZXcgRXJyb3IobXNnKTtcbn1cbmZ1bmN0aW9uIHJlc29sdmVEaXJlY3RpdmVzKHRWaWV3LCBsVmlldywgdE5vZGUsIGxvY2FsUmVmcywgZGlyZWN0aXZlTWF0Y2hlcikge1xuICBuZ0Rldk1vZGUgJiYgYXNzZXJ0Rmlyc3RDcmVhdGVQYXNzKHRWaWV3KTtcbiAgY29uc3QgZXhwb3J0c01hcCA9IGxvY2FsUmVmcyA9PT0gbnVsbCA/IG51bGwgOiB7XG4gICAgJyc6IC0xXG4gIH07XG4gIGNvbnN0IG1hdGNoZWREaXJlY3RpdmVEZWZzID0gZGlyZWN0aXZlTWF0Y2hlcih0VmlldywgdE5vZGUpO1xuICBpZiAobWF0Y2hlZERpcmVjdGl2ZURlZnMgIT09IG51bGwpIHtcbiAgICBsZXQgZGlyZWN0aXZlRGVmcyA9IG1hdGNoZWREaXJlY3RpdmVEZWZzO1xuICAgIGxldCBob3N0RGlyZWN0aXZlRGVmcyA9IG51bGw7XG4gICAgbGV0IGhvc3REaXJlY3RpdmVSYW5nZXMgPSBudWxsO1xuICAgIGZvciAoY29uc3QgZGVmIG9mIG1hdGNoZWREaXJlY3RpdmVEZWZzKSB7XG4gICAgICBpZiAoZGVmLnJlc29sdmVIb3N0RGlyZWN0aXZlcyAhPT0gbnVsbCkge1xuICAgICAgICBbZGlyZWN0aXZlRGVmcywgaG9zdERpcmVjdGl2ZURlZnMsIGhvc3REaXJlY3RpdmVSYW5nZXNdID0gZGVmLnJlc29sdmVIb3N0RGlyZWN0aXZlcyhtYXRjaGVkRGlyZWN0aXZlRGVmcyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICBuZ0Rldk1vZGUgJiYgYXNzZXJ0Tm9EdXBsaWNhdGVEaXJlY3RpdmVzKGRpcmVjdGl2ZURlZnMpO1xuICAgIGluaXRpYWxpemVEaXJlY3RpdmVzKHRWaWV3LCBsVmlldywgdE5vZGUsIGRpcmVjdGl2ZURlZnMsIGV4cG9ydHNNYXAsIGhvc3REaXJlY3RpdmVEZWZzLCBob3N0RGlyZWN0aXZlUmFuZ2VzKTtcbiAgfVxuICBpZiAoZXhwb3J0c01hcCAhPT0gbnVsbCAmJiBsb2NhbFJlZnMgIT09IG51bGwpIHtcbiAgICBjYWNoZU1hdGNoaW5nTG9jYWxOYW1lcyh0Tm9kZSwgbG9jYWxSZWZzLCBleHBvcnRzTWFwKTtcbiAgfVxufVxuZnVuY3Rpb24gY2FjaGVNYXRjaGluZ0xvY2FsTmFtZXModE5vZGUsIGxvY2FsUmVmcywgZXhwb3J0c01hcCkge1xuICBjb25zdCBsb2NhbE5hbWVzID0gdE5vZGUubG9jYWxOYW1lcyA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGxvY2FsUmVmcy5sZW5ndGg7IGkgKz0gMikge1xuICAgIGNvbnN0IGluZGV4ID0gZXhwb3J0c01hcFtsb2NhbFJlZnNbaSArIDFdXTtcbiAgICBpZiAoaW5kZXggPT0gbnVsbCkgdGhyb3cgbmV3IFJ1bnRpbWVFcnJvcigtMzAxLCBuZ0Rldk1vZGUgJiYgYEV4cG9ydCBvZiBuYW1lICcke2xvY2FsUmVmc1tpICsgMV19JyBub3QgZm91bmQhYCk7XG4gICAgbG9jYWxOYW1lcy5wdXNoKGxvY2FsUmVmc1tpXSwgaW5kZXgpO1xuICB9XG59XG5mdW5jdGlvbiBtYXJrQXNDb21wb25lbnRIb3N0KHRWaWV3LCBob3N0VE5vZGUsIGNvbXBvbmVudE9mZnNldCkge1xuICBuZ0Rldk1vZGUgJiYgYXNzZXJ0Rmlyc3RDcmVhdGVQYXNzKHRWaWV3KTtcbiAgbmdEZXZNb2RlICYmIGFzc2VydEdyZWF0ZXJUaGFuKGNvbXBvbmVudE9mZnNldCwgLTEsICdjb21wb25lbnRPZmZzZXQgbXVzdCBiZSBncmVhdCB0aGFuIC0xJyk7XG4gIGhvc3RUTm9kZS5jb21wb25lbnRPZmZzZXQgPSBjb21wb25lbnRPZmZzZXQ7XG4gICh0Vmlldy5jb21wb25lbnRzID8/PSBbXSkucHVzaChob3N0VE5vZGUuaW5kZXgpO1xufVxuZnVuY3Rpb24gaW5pdGlhbGl6ZURpcmVjdGl2ZXModFZpZXcsIGxWaWV3LCB0Tm9kZSwgZGlyZWN0aXZlcywgZXhwb3J0c01hcCwgaG9zdERpcmVjdGl2ZURlZnMsIGhvc3REaXJlY3RpdmVSYW5nZXMpIHtcbiAgbmdEZXZNb2RlICYmIGFzc2VydEZpcnN0Q3JlYXRlUGFzcyh0Vmlldyk7XG4gIGNvbnN0IGRpcmVjdGl2ZXNMZW5ndGggPSBkaXJlY3RpdmVzLmxlbmd0aDtcbiAgbGV0IGNvbXBvbmVudERlZiA9IG51bGw7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZGlyZWN0aXZlc0xlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgZGVmID0gZGlyZWN0aXZlc1tpXTtcbiAgICBpZiAoY29tcG9uZW50RGVmID09PSBudWxsICYmIGlzQ29tcG9uZW50RGVmKGRlZikpIHtcbiAgICAgIGNvbXBvbmVudERlZiA9IGRlZjtcbiAgICAgIG1hcmtBc0NvbXBvbmVudEhvc3QodFZpZXcsIHROb2RlLCBpKTtcbiAgICB9XG4gICAgZGlQdWJsaWNJbkluamVjdG9yKGdldE9yQ3JlYXRlTm9kZUluamVjdG9yRm9yTm9kZSh0Tm9kZSwgbFZpZXcpLCB0VmlldywgZGVmLnR5cGUpO1xuICB9XG4gIGluaXRUTm9kZUZsYWdzKHROb2RlLCB0Vmlldy5kYXRhLmxlbmd0aCwgZGlyZWN0aXZlc0xlbmd0aCk7XG4gIGlmIChjb21wb25lbnREZWY/LnZpZXdQcm92aWRlcnNSZXNvbHZlcikge1xuICAgIGNvbXBvbmVudERlZi52aWV3UHJvdmlkZXJzUmVzb2x2ZXIoY29tcG9uZW50RGVmKTtcbiAgfVxuICBmb3IgKGxldCBpID0gMDsgaSA8IGRpcmVjdGl2ZXNMZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGRlZiA9IGRpcmVjdGl2ZXNbaV07XG4gICAgaWYgKGRlZi5wcm92aWRlcnNSZXNvbHZlcikge1xuICAgICAgZGVmLnByb3ZpZGVyc1Jlc29sdmVyKGRlZik7XG4gICAgfVxuICB9XG4gIGxldCBwcmVPcmRlckhvb2tzRm91bmQgPSBmYWxzZTtcbiAgbGV0IHByZU9yZGVyQ2hlY2tIb29rc0ZvdW5kID0gZmFsc2U7XG4gIGxldCBkaXJlY3RpdmVJZHggPSBhbGxvY0V4cGFuZG8odFZpZXcsIGxWaWV3LCBkaXJlY3RpdmVzTGVuZ3RoLCBudWxsKTtcbiAgbmdEZXZNb2RlICYmIGFzc2VydFNhbWUoZGlyZWN0aXZlSWR4LCB0Tm9kZS5kaXJlY3RpdmVTdGFydCwgJ1ROb2RlLmRpcmVjdGl2ZVN0YXJ0IHNob3VsZCBwb2ludCB0byBqdXN0IGFsbG9jYXRlZCBzcGFjZScpO1xuICBpZiAoZGlyZWN0aXZlc0xlbmd0aCA+IDApIHtcbiAgICB0Tm9kZS5kaXJlY3RpdmVUb0luZGV4ID0gbmV3IE1hcCgpO1xuICB9XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZGlyZWN0aXZlc0xlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgZGVmID0gZGlyZWN0aXZlc1tpXTtcbiAgICB0Tm9kZS5tZXJnZWRBdHRycyA9IG1lcmdlSG9zdEF0dHJzKHROb2RlLm1lcmdlZEF0dHJzLCBkZWYuaG9zdEF0dHJzKTtcbiAgICBjb25maWd1cmVWaWV3V2l0aERpcmVjdGl2ZSh0VmlldywgdE5vZGUsIGxWaWV3LCBkaXJlY3RpdmVJZHgsIGRlZik7XG4gICAgc2F2ZU5hbWVUb0V4cG9ydE1hcChkaXJlY3RpdmVJZHgsIGRlZiwgZXhwb3J0c01hcCk7XG4gICAgaWYgKGhvc3REaXJlY3RpdmVSYW5nZXMgIT09IG51bGwgJiYgaG9zdERpcmVjdGl2ZVJhbmdlcy5oYXMoZGVmKSkge1xuICAgICAgY29uc3QgW3N0YXJ0LCBlbmRdID0gaG9zdERpcmVjdGl2ZVJhbmdlcy5nZXQoZGVmKTtcbiAgICAgIHROb2RlLmRpcmVjdGl2ZVRvSW5kZXguc2V0KGRlZi50eXBlLCBbZGlyZWN0aXZlSWR4LCBzdGFydCArIHROb2RlLmRpcmVjdGl2ZVN0YXJ0LCBlbmQgKyB0Tm9kZS5kaXJlY3RpdmVTdGFydF0pO1xuICAgIH0gZWxzZSBpZiAoaG9zdERpcmVjdGl2ZURlZnMgPT09IG51bGwgfHwgIWhvc3REaXJlY3RpdmVEZWZzLmhhcyhkZWYpKSB7XG4gICAgICB0Tm9kZS5kaXJlY3RpdmVUb0luZGV4LnNldChkZWYudHlwZSwgZGlyZWN0aXZlSWR4KTtcbiAgICB9XG4gICAgaWYgKGRlZi5jb250ZW50UXVlcmllcyAhPT0gbnVsbCkgdE5vZGUuZmxhZ3MgfD0gNDtcbiAgICBpZiAoZGVmLmhvc3RCaW5kaW5ncyAhPT0gbnVsbCB8fCBkZWYuaG9zdEF0dHJzICE9PSBudWxsIHx8IGRlZi5ob3N0VmFycyAhPT0gMCkgdE5vZGUuZmxhZ3MgfD0gNjQ7XG4gICAgY29uc3QgbGlmZUN5Y2xlSG9va3MgPSBkZWYudHlwZS5wcm90b3R5cGU7XG4gICAgaWYgKCFwcmVPcmRlckhvb2tzRm91bmQgJiYgKGxpZmVDeWNsZUhvb2tzLm5nT25DaGFuZ2VzIHx8IGxpZmVDeWNsZUhvb2tzLm5nT25Jbml0IHx8IGxpZmVDeWNsZUhvb2tzLm5nRG9DaGVjaykpIHtcbiAgICAgICh0Vmlldy5wcmVPcmRlckhvb2tzID8/PSBbXSkucHVzaCh0Tm9kZS5pbmRleCk7XG4gICAgICBwcmVPcmRlckhvb2tzRm91bmQgPSB0cnVlO1xuICAgIH1cbiAgICBpZiAoIXByZU9yZGVyQ2hlY2tIb29rc0ZvdW5kICYmIChsaWZlQ3ljbGVIb29rcy5uZ09uQ2hhbmdlcyB8fCBsaWZlQ3ljbGVIb29rcy5uZ0RvQ2hlY2spKSB7XG4gICAgICAodFZpZXcucHJlT3JkZXJDaGVja0hvb2tzID8/PSBbXSkucHVzaCh0Tm9kZS5pbmRleCk7XG4gICAgICBwcmVPcmRlckNoZWNrSG9va3NGb3VuZCA9IHRydWU7XG4gICAgfVxuICAgIGRpcmVjdGl2ZUlkeCsrO1xuICB9XG4gIGluaXRpYWxpemVJbnB1dEFuZE91dHB1dEFsaWFzZXModFZpZXcsIHROb2RlLCBob3N0RGlyZWN0aXZlRGVmcyk7XG59XG5mdW5jdGlvbiBpbml0aWFsaXplSW5wdXRBbmRPdXRwdXRBbGlhc2VzKHRWaWV3LCB0Tm9kZSwgaG9zdERpcmVjdGl2ZURlZnMpIHtcbiAgbmdEZXZNb2RlICYmIGFzc2VydEZpcnN0Q3JlYXRlUGFzcyh0Vmlldyk7XG4gIGZvciAobGV0IGluZGV4ID0gdE5vZGUuZGlyZWN0aXZlU3RhcnQ7IGluZGV4IDwgdE5vZGUuZGlyZWN0aXZlRW5kOyBpbmRleCsrKSB7XG4gICAgY29uc3QgZGlyZWN0aXZlRGVmID0gdFZpZXcuZGF0YVtpbmRleF07XG4gICAgaWYgKGhvc3REaXJlY3RpdmVEZWZzID09PSBudWxsIHx8ICFob3N0RGlyZWN0aXZlRGVmcy5oYXMoZGlyZWN0aXZlRGVmKSkge1xuICAgICAgc2V0dXBTZWxlY3Rvck1hdGNoZWRJbnB1dHNPck91dHB1dHMoMCwgdE5vZGUsIGRpcmVjdGl2ZURlZiwgaW5kZXgpO1xuICAgICAgc2V0dXBTZWxlY3Rvck1hdGNoZWRJbnB1dHNPck91dHB1dHMoMSwgdE5vZGUsIGRpcmVjdGl2ZURlZiwgaW5kZXgpO1xuICAgICAgc2V0dXBJbml0aWFsSW5wdXRzKHROb2RlLCBpbmRleCwgZmFsc2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBob3N0RGlyZWN0aXZlRGVmID0gaG9zdERpcmVjdGl2ZURlZnMuZ2V0KGRpcmVjdGl2ZURlZik7XG4gICAgICBzZXR1cEhvc3REaXJlY3RpdmVJbnB1dHNPck91dHB1dHMoMCwgdE5vZGUsIGhvc3REaXJlY3RpdmVEZWYsIGluZGV4KTtcbiAgICAgIHNldHVwSG9zdERpcmVjdGl2ZUlucHV0c09yT3V0cHV0cygxLCB0Tm9kZSwgaG9zdERpcmVjdGl2ZURlZiwgaW5kZXgpO1xuICAgICAgc2V0dXBJbml0aWFsSW5wdXRzKHROb2RlLCBpbmRleCwgdHJ1ZSk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBzZXR1cFNlbGVjdG9yTWF0Y2hlZElucHV0c09yT3V0cHV0cyhtb2RlLCB0Tm9kZSwgZGVmLCBkaXJlY3RpdmVJbmRleCkge1xuICBjb25zdCBhbGlhc01hcCA9IG1vZGUgPT09IDAgPyBkZWYuaW5wdXRzIDogZGVmLm91dHB1dHM7XG4gIGZvciAoY29uc3QgcHVibGljTmFtZSBpbiBhbGlhc01hcCkge1xuICAgIGlmIChhbGlhc01hcC5oYXNPd25Qcm9wZXJ0eShwdWJsaWNOYW1lKSkge1xuICAgICAgbGV0IGJpbmRpbmdzO1xuICAgICAgaWYgKG1vZGUgPT09IDApIHtcbiAgICAgICAgYmluZGluZ3MgPSB0Tm9kZS5pbnB1dHMgPz89IHt9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYmluZGluZ3MgPSB0Tm9kZS5vdXRwdXRzID8/PSB7fTtcbiAgICAgIH1cbiAgICAgIGJpbmRpbmdzW3B1YmxpY05hbWVdID8/PSBbXTtcbiAgICAgIGJpbmRpbmdzW3B1YmxpY05hbWVdLnB1c2goZGlyZWN0aXZlSW5kZXgpO1xuICAgICAgc2V0U2hhZG93U3R5bGluZ0lucHV0RmxhZ3ModE5vZGUsIHB1YmxpY05hbWUpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gc2V0dXBIb3N0RGlyZWN0aXZlSW5wdXRzT3JPdXRwdXRzKG1vZGUsIHROb2RlLCBjb25maWcsIGRpcmVjdGl2ZUluZGV4KSB7XG4gIGNvbnN0IGFsaWFzTWFwID0gbW9kZSA9PT0gMCA/IGNvbmZpZy5pbnB1dHMgOiBjb25maWcub3V0cHV0cztcbiAgZm9yIChjb25zdCBpbml0aWFsTmFtZSBpbiBhbGlhc01hcCkge1xuICAgIGlmIChhbGlhc01hcC5oYXNPd25Qcm9wZXJ0eShpbml0aWFsTmFtZSkpIHtcbiAgICAgIGNvbnN0IHB1YmxpY05hbWUgPSBhbGlhc01hcFtpbml0aWFsTmFtZV07XG4gICAgICBsZXQgYmluZGluZ3M7XG4gICAgICBpZiAobW9kZSA9PT0gMCkge1xuICAgICAgICBiaW5kaW5ncyA9IHROb2RlLmhvc3REaXJlY3RpdmVJbnB1dHMgPz89IHt9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYmluZGluZ3MgPSB0Tm9kZS5ob3N0RGlyZWN0aXZlT3V0cHV0cyA/Pz0ge307XG4gICAgICB9XG4gICAgICBiaW5kaW5nc1twdWJsaWNOYW1lXSA/Pz0gW107XG4gICAgICBiaW5kaW5nc1twdWJsaWNOYW1lXS5wdXNoKGRpcmVjdGl2ZUluZGV4LCBpbml0aWFsTmFtZSk7XG4gICAgICBzZXRTaGFkb3dTdHlsaW5nSW5wdXRGbGFncyh0Tm9kZSwgcHVibGljTmFtZSk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBzZXRTaGFkb3dTdHlsaW5nSW5wdXRGbGFncyh0Tm9kZSwgcHVibGljTmFtZSkge1xuICBpZiAocHVibGljTmFtZSA9PT0gJ2NsYXNzJykge1xuICAgIHROb2RlLmZsYWdzIHw9IDg7XG4gIH0gZWxzZSBpZiAocHVibGljTmFtZSA9PT0gJ3N0eWxlJykge1xuICAgIHROb2RlLmZsYWdzIHw9IDE2O1xuICB9XG59XG5mdW5jdGlvbiBzZXR1cEluaXRpYWxJbnB1dHModE5vZGUsIGRpcmVjdGl2ZUluZGV4LCBpc0hvc3REaXJlY3RpdmUpIHtcbiAgY29uc3Qge1xuICAgIGF0dHJzLFxuICAgIGlucHV0cyxcbiAgICBob3N0RGlyZWN0aXZlSW5wdXRzXG4gIH0gPSB0Tm9kZTtcbiAgaWYgKGF0dHJzID09PSBudWxsIHx8ICFpc0hvc3REaXJlY3RpdmUgJiYgaW5wdXRzID09PSBudWxsIHx8IGlzSG9zdERpcmVjdGl2ZSAmJiBob3N0RGlyZWN0aXZlSW5wdXRzID09PSBudWxsIHx8IGlzSW5saW5lVGVtcGxhdGUodE5vZGUpKSB7XG4gICAgdE5vZGUuaW5pdGlhbElucHV0cyA/Pz0gW107XG4gICAgdE5vZGUuaW5pdGlhbElucHV0cy5wdXNoKG51bGwpO1xuICAgIHJldHVybjtcbiAgfVxuICBsZXQgaW5wdXRzVG9TdG9yZSA9IG51bGw7XG4gIGxldCBpID0gMDtcbiAgd2hpbGUgKGkgPCBhdHRycy5sZW5ndGgpIHtcbiAgICBjb25zdCBhdHRyTmFtZSA9IGF0dHJzW2ldO1xuICAgIGlmIChhdHRyTmFtZSA9PT0gMCkge1xuICAgICAgaSArPSA0O1xuICAgICAgY29udGludWU7XG4gICAgfSBlbHNlIGlmIChhdHRyTmFtZSA9PT0gNSkge1xuICAgICAgaSArPSAyO1xuICAgICAgY29udGludWU7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgYXR0ck5hbWUgPT09ICdudW1iZXInKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgaWYgKCFpc0hvc3REaXJlY3RpdmUgJiYgaW5wdXRzLmhhc093blByb3BlcnR5KGF0dHJOYW1lKSkge1xuICAgICAgY29uc3QgaW5wdXRDb25maWcgPSBpbnB1dHNbYXR0ck5hbWVdO1xuICAgICAgZm9yIChjb25zdCBpbmRleCBvZiBpbnB1dENvbmZpZykge1xuICAgICAgICBpZiAoaW5kZXggPT09IGRpcmVjdGl2ZUluZGV4KSB7XG4gICAgICAgICAgaW5wdXRzVG9TdG9yZSA/Pz0gW107XG4gICAgICAgICAgaW5wdXRzVG9TdG9yZS5wdXNoKGF0dHJOYW1lLCBhdHRyc1tpICsgMV0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc0hvc3REaXJlY3RpdmUgJiYgaG9zdERpcmVjdGl2ZUlucHV0cy5oYXNPd25Qcm9wZXJ0eShhdHRyTmFtZSkpIHtcbiAgICAgIGNvbnN0IGNvbmZpZyA9IGhvc3REaXJlY3RpdmVJbnB1dHNbYXR0ck5hbWVdO1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBjb25maWcubGVuZ3RoOyBqICs9IDIpIHtcbiAgICAgICAgaWYgKGNvbmZpZ1tqXSA9PT0gZGlyZWN0aXZlSW5kZXgpIHtcbiAgICAgICAgICBpbnB1dHNUb1N0b3JlID8/PSBbXTtcbiAgICAgICAgICBpbnB1dHNUb1N0b3JlLnB1c2goY29uZmlnW2ogKyAxXSwgYXR0cnNbaSArIDFdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpICs9IDI7XG4gIH1cbiAgdE5vZGUuaW5pdGlhbElucHV0cyA/Pz0gW107XG4gIHROb2RlLmluaXRpYWxJbnB1dHMucHVzaChpbnB1dHNUb1N0b3JlKTtcbn1cbmZ1bmN0aW9uIGNvbmZpZ3VyZVZpZXdXaXRoRGlyZWN0aXZlKHRWaWV3LCB0Tm9kZSwgbFZpZXcsIGRpcmVjdGl2ZUluZGV4LCBkZWYpIHtcbiAgbmdEZXZNb2RlICYmIGFzc2VydEdyZWF0ZXJUaGFuT3JFcXVhbChkaXJlY3RpdmVJbmRleCwgSEVBREVSX09GRlNFVCwgJ011c3QgYmUgaW4gRXhwYW5kbyBzZWN0aW9uJyk7XG4gIHRWaWV3LmRhdGFbZGlyZWN0aXZlSW5kZXhdID0gZGVmO1xuICBjb25zdCBkaXJlY3RpdmVGYWN0b3J5ID0gZGVmLmZhY3RvcnkgfHwgKGRlZi5mYWN0b3J5ID0gZ2V0RmFjdG9yeURlZihkZWYudHlwZSwgdHJ1ZSkpO1xuICBjb25zdCBub2RlSW5qZWN0b3JGYWN0b3J5ID0gbmV3IE5vZGVJbmplY3RvckZhY3RvcnkoZGlyZWN0aXZlRmFjdG9yeSwgaXNDb21wb25lbnREZWYoZGVmKSwgybXJtWRpcmVjdGl2ZUluamVjdCwgbmdEZXZNb2RlID8gZGVmLnR5cGUubmFtZSA6IG51bGwpO1xuICB0Vmlldy5ibHVlcHJpbnRbZGlyZWN0aXZlSW5kZXhdID0gbm9kZUluamVjdG9yRmFjdG9yeTtcbiAgbFZpZXdbZGlyZWN0aXZlSW5kZXhdID0gbm9kZUluamVjdG9yRmFjdG9yeTtcbiAgcmVnaXN0ZXJIb3N0QmluZGluZ09wQ29kZXModFZpZXcsIHROb2RlLCBkaXJlY3RpdmVJbmRleCwgYWxsb2NFeHBhbmRvKHRWaWV3LCBsVmlldywgZGVmLmhvc3RWYXJzLCBOT19DSEFOR0UpLCBkZWYpO1xufVxuZnVuY3Rpb24gcmVnaXN0ZXJIb3N0QmluZGluZ09wQ29kZXModFZpZXcsIHROb2RlLCBkaXJlY3RpdmVJZHgsIGRpcmVjdGl2ZVZhcnNJZHgsIGRlZikge1xuICBuZ0Rldk1vZGUgJiYgYXNzZXJ0Rmlyc3RDcmVhdGVQYXNzKHRWaWV3KTtcbiAgY29uc3QgaG9zdEJpbmRpbmdzID0gZGVmLmhvc3RCaW5kaW5ncztcbiAgaWYgKGhvc3RCaW5kaW5ncykge1xuICAgIGxldCBob3N0QmluZGluZ09wQ29kZXMgPSB0Vmlldy5ob3N0QmluZGluZ09wQ29kZXM7XG4gICAgaWYgKGhvc3RCaW5kaW5nT3BDb2RlcyA9PT0gbnVsbCkge1xuICAgICAgaG9zdEJpbmRpbmdPcENvZGVzID0gdFZpZXcuaG9zdEJpbmRpbmdPcENvZGVzID0gW107XG4gICAgfVxuICAgIGNvbnN0IGVsZW1lbnRJbmR4ID0gfnROb2RlLmluZGV4O1xuICAgIGlmIChsYXN0U2VsZWN0ZWRFbGVtZW50SWR4KGhvc3RCaW5kaW5nT3BDb2RlcykgIT0gZWxlbWVudEluZHgpIHtcbiAgICAgIGhvc3RCaW5kaW5nT3BDb2Rlcy5wdXNoKGVsZW1lbnRJbmR4KTtcbiAgICB9XG4gICAgaG9zdEJpbmRpbmdPcENvZGVzLnB1c2goZGlyZWN0aXZlSWR4LCBkaXJlY3RpdmVWYXJzSWR4LCBob3N0QmluZGluZ3MpO1xuICB9XG59XG5mdW5jdGlvbiBsYXN0U2VsZWN0ZWRFbGVtZW50SWR4KGhvc3RCaW5kaW5nT3BDb2Rlcykge1xuICBsZXQgaSA9IGhvc3RCaW5kaW5nT3BDb2Rlcy5sZW5ndGg7XG4gIHdoaWxlIChpID4gMCkge1xuICAgIGNvbnN0IHZhbHVlID0gaG9zdEJpbmRpbmdPcENvZGVzWy0taV07XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgdmFsdWUgPCAwKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICB9XG4gIHJldHVybiAwO1xufVxuZnVuY3Rpb24gc2F2ZU5hbWVUb0V4cG9ydE1hcChkaXJlY3RpdmVJZHgsIGRlZiwgZXhwb3J0c01hcCkge1xuICBpZiAoZXhwb3J0c01hcCkge1xuICAgIGlmIChkZWYuZXhwb3J0QXMpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGVmLmV4cG9ydEFzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGV4cG9ydHNNYXBbZGVmLmV4cG9ydEFzW2ldXSA9IGRpcmVjdGl2ZUlkeDtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGlzQ29tcG9uZW50RGVmKGRlZikpIGV4cG9ydHNNYXBbJyddID0gZGlyZWN0aXZlSWR4O1xuICB9XG59XG5mdW5jdGlvbiBpbml0VE5vZGVGbGFncyh0Tm9kZSwgaW5kZXgsIG51bWJlck9mRGlyZWN0aXZlcykge1xuICBuZ0Rldk1vZGUgJiYgYXNzZXJ0Tm90RXF1YWwobnVtYmVyT2ZEaXJlY3RpdmVzLCB0Tm9kZS5kaXJlY3RpdmVFbmQgLSB0Tm9kZS5kaXJlY3RpdmVTdGFydCwgJ1JlYWNoZWQgdGhlIG1heCBudW1iZXIgb2YgZGlyZWN0aXZlcycpO1xuICB0Tm9kZS5mbGFncyB8PSAxO1xuICB0Tm9kZS5kaXJlY3RpdmVTdGFydCA9IGluZGV4O1xuICB0Tm9kZS5kaXJlY3RpdmVFbmQgPSBpbmRleCArIG51bWJlck9mRGlyZWN0aXZlcztcbiAgdE5vZGUucHJvdmlkZXJJbmRleGVzID0gaW5kZXg7XG59XG5mdW5jdGlvbiBhc3NlcnROb0R1cGxpY2F0ZURpcmVjdGl2ZXMoZGlyZWN0aXZlcykge1xuICBpZiAoZGlyZWN0aXZlcy5sZW5ndGggPCAyKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IHNlZW5EaXJlY3RpdmVzID0gbmV3IFNldCgpO1xuICBmb3IgKGNvbnN0IGN1cnJlbnQgb2YgZGlyZWN0aXZlcykge1xuICAgIGlmIChzZWVuRGlyZWN0aXZlcy5oYXMoY3VycmVudCkpIHtcbiAgICAgIHRocm93IG5ldyBSdW50aW1lRXJyb3IoMzA5LCBgRGlyZWN0aXZlICR7Y3VycmVudC50eXBlLm5hbWV9IG1hdGNoZXMgbXVsdGlwbGUgdGltZXMgb24gdGhlIHNhbWUgZWxlbWVudC4gYCArIGBEaXJlY3RpdmVzIGNhbiBvbmx5IG1hdGNoIGFuIGVsZW1lbnQgb25jZS5gKTtcbiAgICB9XG4gICAgc2VlbkRpcmVjdGl2ZXMuYWRkKGN1cnJlbnQpO1xuICB9XG59XG5mdW5jdGlvbiBkaXJlY3RpdmVIb3N0Rmlyc3RDcmVhdGVQYXNzKGluZGV4LCBsVmlldywgdHlwZSwgbmFtZSwgZGlyZWN0aXZlTWF0Y2hlciwgYmluZGluZ3NFbmFibGVkLCBhdHRyc0luZGV4LCBsb2NhbFJlZnNJbmRleCkge1xuICBjb25zdCB0VmlldyA9IGxWaWV3W1RWSUVXXTtcbiAgbmdEZXZNb2RlICYmIGFzc2VydEZpcnN0Q3JlYXRlUGFzcyh0Vmlldyk7XG4gIGNvbnN0IHRWaWV3Q29uc3RzID0gdFZpZXcuY29uc3RzO1xuICBjb25zdCBhdHRycyA9IGdldENvbnN0YW50KHRWaWV3Q29uc3RzLCBhdHRyc0luZGV4KTtcbiAgY29uc3QgdE5vZGUgPSBnZXRPckNyZWF0ZVROb2RlKHRWaWV3LCBpbmRleCwgdHlwZSwgbmFtZSwgYXR0cnMpO1xuICBpZiAoYmluZGluZ3NFbmFibGVkKSB7XG4gICAgcmVzb2x2ZURpcmVjdGl2ZXModFZpZXcsIGxWaWV3LCB0Tm9kZSwgZ2V0Q29uc3RhbnQodFZpZXdDb25zdHMsIGxvY2FsUmVmc0luZGV4KSwgZGlyZWN0aXZlTWF0Y2hlcik7XG4gIH1cbiAgdE5vZGUubWVyZ2VkQXR0cnMgPSBtZXJnZUhvc3RBdHRycyh0Tm9kZS5tZXJnZWRBdHRycywgdE5vZGUuYXR0cnMpO1xuICBpZiAodE5vZGUuYXR0cnMgIT09IG51bGwpIHtcbiAgICBjb21wdXRlU3RhdGljU3R5bGluZyh0Tm9kZSwgdE5vZGUuYXR0cnMsIGZhbHNlKTtcbiAgfVxuICBpZiAodE5vZGUubWVyZ2VkQXR0cnMgIT09IG51bGwpIHtcbiAgICBjb21wdXRlU3RhdGljU3R5bGluZyh0Tm9kZSwgdE5vZGUubWVyZ2VkQXR0cnMsIHRydWUpO1xuICB9XG4gIGlmICh0Vmlldy5xdWVyaWVzICE9PSBudWxsKSB7XG4gICAgdFZpZXcucXVlcmllcy5lbGVtZW50U3RhcnQodFZpZXcsIHROb2RlKTtcbiAgfVxuICByZXR1cm4gdE5vZGU7XG59XG5mdW5jdGlvbiBkaXJlY3RpdmVIb3N0RW5kRmlyc3RDcmVhdGVQYXNzKHRWaWV3LCB0Tm9kZSkge1xuICBuZ0Rldk1vZGUgJiYgYXNzZXJ0Rmlyc3RDcmVhdGVQYXNzKHRWaWV3KTtcbiAgcmVnaXN0ZXJQb3N0T3JkZXJIb29rcyh0VmlldywgdE5vZGUpO1xuICBpZiAoaXNDb250ZW50UXVlcnlIb3N0KHROb2RlKSkge1xuICAgIHRWaWV3LnF1ZXJpZXMuZWxlbWVudEVuZCh0Tm9kZSk7XG4gIH1cbn1cbmZ1bmN0aW9uIGRvbU9ubHlGaXJzdENyZWF0ZVBhc3MoaW5kZXgsIHRWaWV3LCB0eXBlLCBuYW1lLCBhdHRyc0luZGV4LCBsb2NhbFJlZnNJbmRleCkge1xuICBuZ0Rldk1vZGUgJiYgYXNzZXJ0Rmlyc3RDcmVhdGVQYXNzKHRWaWV3KTtcbiAgY29uc3QgdFZpZXdDb25zdHMgPSB0Vmlldy5jb25zdHM7XG4gIGNvbnN0IGF0dHJzID0gZ2V0Q29uc3RhbnQodFZpZXdDb25zdHMsIGF0dHJzSW5kZXgpO1xuICBjb25zdCB0Tm9kZSA9IGdldE9yQ3JlYXRlVE5vZGUodFZpZXcsIGluZGV4LCB0eXBlLCBuYW1lLCBhdHRycyk7XG4gIHROb2RlLm1lcmdlZEF0dHJzID0gbWVyZ2VIb3N0QXR0cnModE5vZGUubWVyZ2VkQXR0cnMsIHROb2RlLmF0dHJzKTtcbiAgaWYgKGxvY2FsUmVmc0luZGV4ICE9IG51bGwpIHtcbiAgICBjb25zdCByZWZzID0gZ2V0Q29uc3RhbnQodFZpZXdDb25zdHMsIGxvY2FsUmVmc0luZGV4KTtcbiAgICB0Tm9kZS5sb2NhbE5hbWVzID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZWZzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICB0Tm9kZS5sb2NhbE5hbWVzLnB1c2gocmVmc1tpXSwgLTEpO1xuICAgIH1cbiAgfVxuICBpZiAodE5vZGUuYXR0cnMgIT09IG51bGwpIHtcbiAgICBjb21wdXRlU3RhdGljU3R5bGluZyh0Tm9kZSwgdE5vZGUuYXR0cnMsIGZhbHNlKTtcbiAgfVxuICBpZiAodE5vZGUubWVyZ2VkQXR0cnMgIT09IG51bGwpIHtcbiAgICBjb21wdXRlU3RhdGljU3R5bGluZyh0Tm9kZSwgdE5vZGUubWVyZ2VkQXR0cnMsIHRydWUpO1xuICB9XG4gIGlmICh0Vmlldy5xdWVyaWVzICE9PSBudWxsKSB7XG4gICAgdFZpZXcucXVlcmllcy5lbGVtZW50U3RhcnQodFZpZXcsIHROb2RlKTtcbiAgfVxuICByZXR1cm4gdE5vZGU7XG59XG5mdW5jdGlvbiBpc0xpc3RMaWtlSXRlcmFibGUob2JqKSB7XG4gIGlmICghaXNKc09iamVjdChvYmopKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KG9iaikgfHwgIShvYmogaW5zdGFuY2VvZiBNYXApICYmIFN5bWJvbC5pdGVyYXRvciBpbiBvYmo7XG59XG5mdW5jdGlvbiBhcmVJdGVyYWJsZXNFcXVhbChhLCBiLCBjb21wYXJhdG9yKSB7XG4gIGNvbnN0IGl0ZXJhdG9yMSA9IGFbU3ltYm9sLml0ZXJhdG9yXSgpO1xuICBjb25zdCBpdGVyYXRvcjIgPSBiW1N5bWJvbC5pdGVyYXRvcl0oKTtcbiAgd2hpbGUgKHRydWUpIHtcbiAgICBjb25zdCBpdGVtMSA9IGl0ZXJhdG9yMS5uZXh0KCk7XG4gICAgY29uc3QgaXRlbTIgPSBpdGVyYXRvcjIubmV4dCgpO1xuICAgIGlmIChpdGVtMS5kb25lICYmIGl0ZW0yLmRvbmUpIHJldHVybiB0cnVlO1xuICAgIGlmIChpdGVtMS5kb25lIHx8IGl0ZW0yLmRvbmUpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoIWNvbXBhcmF0b3IoaXRlbTEudmFsdWUsIGl0ZW0yLnZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5mdW5jdGlvbiBpdGVyYXRlTGlzdExpa2Uob2JqLCBmbikge1xuICBpZiAoQXJyYXkuaXNBcnJheShvYmopKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvYmoubGVuZ3RoOyBpKyspIHtcbiAgICAgIGZuKG9ialtpXSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGNvbnN0IGl0ZXJhdG9yID0gb2JqW1N5bWJvbC5pdGVyYXRvcl0oKTtcbiAgICBsZXQgaXRlbTtcbiAgICB3aGlsZSAoIShpdGVtID0gaXRlcmF0b3IubmV4dCgpKS5kb25lKSB7XG4gICAgICBmbihpdGVtLnZhbHVlKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGlzSnNPYmplY3Qobykge1xuICByZXR1cm4gbyAhPT0gbnVsbCAmJiAodHlwZW9mIG8gPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIG8gPT09ICdvYmplY3QnKTtcbn1cbmZ1bmN0aW9uIGRldk1vZGVFcXVhbChhLCBiKSB7XG4gIGNvbnN0IGlzTGlzdExpa2VJdGVyYWJsZUEgPSBpc0xpc3RMaWtlSXRlcmFibGUoYSk7XG4gIGNvbnN0IGlzTGlzdExpa2VJdGVyYWJsZUIgPSBpc0xpc3RMaWtlSXRlcmFibGUoYik7XG4gIGlmIChpc0xpc3RMaWtlSXRlcmFibGVBICYmIGlzTGlzdExpa2VJdGVyYWJsZUIpIHtcbiAgICByZXR1cm4gYXJlSXRlcmFibGVzRXF1YWwoYSwgYiwgZGV2TW9kZUVxdWFsKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBpc0FPYmplY3QgPSBhICYmICh0eXBlb2YgYSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIGEgPT09ICdmdW5jdGlvbicpO1xuICAgIGNvbnN0IGlzQk9iamVjdCA9IGIgJiYgKHR5cGVvZiBiID09PSAnb2JqZWN0JyB8fCB0eXBlb2YgYiA9PT0gJ2Z1bmN0aW9uJyk7XG4gICAgaWYgKCFpc0xpc3RMaWtlSXRlcmFibGVBICYmIGlzQU9iamVjdCAmJiAhaXNMaXN0TGlrZUl0ZXJhYmxlQiAmJiBpc0JPYmplY3QpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gT2JqZWN0LmlzKGEsIGIpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gdXBkYXRlQmluZGluZyhsVmlldywgYmluZGluZ0luZGV4LCB2YWx1ZSkge1xuICByZXR1cm4gbFZpZXdbYmluZGluZ0luZGV4XSA9IHZhbHVlO1xufVxuZnVuY3Rpb24gZ2V0QmluZGluZyhsVmlldywgYmluZGluZ0luZGV4KSB7XG4gIG5nRGV2TW9kZSAmJiBhc3NlcnRJbmRleEluUmFuZ2UobFZpZXcsIGJpbmRpbmdJbmRleCk7XG4gIG5nRGV2TW9kZSAmJiBhc3NlcnROb3RTYW1lKGxWaWV3W2JpbmRpbmdJbmRleF0sIE5PX0NIQU5HRSwgJ1N0b3JlZCB2YWx1ZSBzaG91bGQgbmV2ZXIgYmUgTk9fQ0hBTkdFLicpO1xuICByZXR1cm4gbFZpZXdbYmluZGluZ0luZGV4XTtcbn1cbmZ1bmN0aW9uIGJpbmRpbmdVcGRhdGVkKGxWaWV3LCBiaW5kaW5nSW5kZXgsIHZhbHVlKSB7XG4gIG5nRGV2TW9kZSAmJiBhc3NlcnRMZXNzVGhhbihiaW5kaW5nSW5kZXgsIGxWaWV3Lmxlbmd0aCwgYFNsb3Qgc2hvdWxkIGhhdmUgYmVlbiBpbml0aWFsaXplZCB0byBOT19DSEFOR0VgKTtcbiAgaWYgKHZhbHVlID09PSBOT19DSEFOR0UpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgY29uc3Qgb2xkVmFsdWUgPSBsVmlld1tiaW5kaW5nSW5kZXhdO1xuICBpZiAoT2JqZWN0LmlzKG9sZFZhbHVlLCB2YWx1ZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gZWxzZSB7XG4gICAgaWYgKG5nRGV2TW9kZSAmJiBpc0luQ2hlY2tOb0NoYW5nZXNNb2RlKCkpIHtcbiAgICAgIGNvbnN0IG9sZFZhbHVlVG9Db21wYXJlID0gb2xkVmFsdWUgIT09IE5PX0NIQU5HRSA/IG9sZFZhbHVlIDogdW5kZWZpbmVkO1xuICAgICAgaWYgKCFkZXZNb2RlRXF1YWwob2xkVmFsdWVUb0NvbXBhcmUsIHZhbHVlKSkge1xuICAgICAgICBjb25zdCBkZXRhaWxzID0gZ2V0RXhwcmVzc2lvbkNoYW5nZWRFcnJvckRldGFpbHMobFZpZXcsIGJpbmRpbmdJbmRleCwgb2xkVmFsdWVUb0NvbXBhcmUsIHZhbHVlKTtcbiAgICAgICAgdGhyb3dFcnJvcklmTm9DaGFuZ2VzTW9kZShvbGRWYWx1ZSA9PT0gTk9fQ0hBTkdFLCBkZXRhaWxzLm9sZFZhbHVlLCBkZXRhaWxzLm5ld1ZhbHVlLCBkZXRhaWxzLnByb3BOYW1lLCBsVmlldyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGxWaWV3W2JpbmRpbmdJbmRleF0gPSB2YWx1ZTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuZnVuY3Rpb24gYmluZGluZ1VwZGF0ZWQyKGxWaWV3LCBiaW5kaW5nSW5kZXgsIGV4cDEsIGV4cDIpIHtcbiAgY29uc3QgZGlmZmVyZW50ID0gYmluZGluZ1VwZGF0ZWQobFZpZXcsIGJpbmRpbmdJbmRleCwgZXhwMSk7XG4gIHJldHVybiBiaW5kaW5nVXBkYXRlZChsVmlldywgYmluZGluZ0luZGV4ICsgMSwgZXhwMikgfHwgZGlmZmVyZW50O1xufVxuZnVuY3Rpb24gYmluZGluZ1VwZGF0ZWQzKGxWaWV3LCBiaW5kaW5nSW5kZXgsIGV4cDEsIGV4cDIsIGV4cDMpIHtcbiAgY29uc3QgZGlmZmVyZW50ID0gYmluZGluZ1VwZGF0ZWQyKGxWaWV3LCBiaW5kaW5nSW5kZXgsIGV4cDEsIGV4cDIpO1xuICByZXR1cm4gYmluZGluZ1VwZGF0ZWQobFZpZXcsIGJpbmRpbmdJbmRleCArIDIsIGV4cDMpIHx8IGRpZmZlcmVudDtcbn1cbmZ1bmN0aW9uIGJpbmRpbmdVcGRhdGVkNChsVmlldywgYmluZGluZ0luZGV4LCBleHAxLCBleHAyLCBleHAzLCBleHA0KSB7XG4gIGNvbnN0IGRpZmZlcmVudCA9IGJpbmRpbmdVcGRhdGVkMihsVmlldywgYmluZGluZ0luZGV4LCBleHAxLCBleHAyKTtcbiAgcmV0dXJuIGJpbmRpbmdVcGRhdGVkMihsVmlldywgYmluZGluZ0luZGV4ICsgMiwgZXhwMywgZXhwNCkgfHwgZGlmZmVyZW50O1xufVxuZnVuY3Rpb24gd3JhcExpc3RlbmVyKHROb2RlLCBsVmlldywgbGlzdGVuZXJGbikge1xuICByZXR1cm4gZnVuY3Rpb24gd3JhcExpc3RlbmVySW5fbWFya0RpcnR5QW5kUHJldmVudERlZmF1bHQoZXZlbnQpIHtcbiAgICBjb25zdCBzdGFydFZpZXcgPSBpc0NvbXBvbmVudEhvc3QodE5vZGUpID8gZ2V0Q29tcG9uZW50TFZpZXdCeUluZGV4KHROb2RlLmluZGV4LCBsVmlldykgOiBsVmlldztcbiAgICBtYXJrVmlld0RpcnR5KHN0YXJ0VmlldywgNSk7XG4gICAgY29uc3QgY29udGV4dCA9IGxWaWV3W0NPTlRFWFRdO1xuICAgIGxldCByZXN1bHQgPSBleGVjdXRlTGlzdGVuZXJXaXRoRXJyb3JIYW5kbGluZyhsVmlldywgY29udGV4dCwgbGlzdGVuZXJGbiwgZXZlbnQpO1xuICAgIGxldCBuZXh0TGlzdGVuZXJGbiA9IHdyYXBMaXN0ZW5lckluX21hcmtEaXJ0eUFuZFByZXZlbnREZWZhdWx0Ll9fbmdOZXh0TGlzdGVuZXJGbl9fO1xuICAgIHdoaWxlIChuZXh0TGlzdGVuZXJGbikge1xuICAgICAgcmVzdWx0ID0gZXhlY3V0ZUxpc3RlbmVyV2l0aEVycm9ySGFuZGxpbmcobFZpZXcsIGNvbnRleHQsIG5leHRMaXN0ZW5lckZuLCBldmVudCkgJiYgcmVzdWx0O1xuICAgICAgbmV4dExpc3RlbmVyRm4gPSBuZXh0TGlzdGVuZXJGbi5fX25nTmV4dExpc3RlbmVyRm5fXztcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbn1cbmZ1bmN0aW9uIGV4ZWN1dGVMaXN0ZW5lcldpdGhFcnJvckhhbmRsaW5nKGxWaWV3LCBjb250ZXh0LCBsaXN0ZW5lckZuLCBlKSB7XG4gIGNvbnN0IHByZXZDb25zdW1lciA9IHNldEFjdGl2ZUNvbnN1bWVyJDEobnVsbCk7XG4gIHRyeSB7XG4gICAgcHJvZmlsZXIoUHJvZmlsZXJFdmVudC5PdXRwdXRTdGFydCwgY29udGV4dCwgbGlzdGVuZXJGbik7XG4gICAgcmV0dXJuIGxpc3RlbmVyRm4oZSkgIT09IGZhbHNlO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGhhbmRsZVVuY2F1Z2h0RXJyb3IobFZpZXcsIGVycm9yKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gZmluYWxseSB7XG4gICAgcHJvZmlsZXIoUHJvZmlsZXJFdmVudC5PdXRwdXRFbmQsIGNvbnRleHQsIGxpc3RlbmVyRm4pO1xuICAgIHNldEFjdGl2ZUNvbnN1bWVyJDEocHJldkNvbnN1bWVyKTtcbiAgfVxufVxuZnVuY3Rpb24gbGlzdGVuVG9Eb21FdmVudCh0Tm9kZSwgdFZpZXcsIGxWaWV3LCBldmVudFRhcmdldFJlc29sdmVyLCByZW5kZXJlciwgZXZlbnROYW1lLCBvcmlnaW5hbExpc3RlbmVyLCB3cmFwcGVkTGlzdGVuZXIpIHtcbiAgbmdEZXZNb2RlICYmIGFzc2VydE5vdFNhbWUod3JhcHBlZExpc3RlbmVyLCBvcmlnaW5hbExpc3RlbmVyLCAnRXhwZWN0ZWQgd3JhcHBlZCBhbmQgb3JpZ2luYWwgbGlzdGVuZXJzIHRvIGJlIGRpZmZlcmVudC4nKTtcbiAgY29uc3QgaXNUTm9kZURpcmVjdGl2ZUhvc3QgPSBpc0RpcmVjdGl2ZUhvc3QodE5vZGUpO1xuICBsZXQgaGFzQ29hbGVzY2VkID0gZmFsc2U7XG4gIGxldCBleGlzdGluZ0xpc3RlbmVyID0gbnVsbDtcbiAgaWYgKCFldmVudFRhcmdldFJlc29sdmVyICYmIGlzVE5vZGVEaXJlY3RpdmVIb3N0KSB7XG4gICAgZXhpc3RpbmdMaXN0ZW5lciA9IGZpbmRFeGlzdGluZ0xpc3RlbmVyKHRWaWV3LCBsVmlldywgZXZlbnROYW1lLCB0Tm9kZS5pbmRleCk7XG4gIH1cbiAgaWYgKGV4aXN0aW5nTGlzdGVuZXIgIT09IG51bGwpIHtcbiAgICBjb25zdCBsYXN0TGlzdGVuZXJGbiA9IGV4aXN0aW5nTGlzdGVuZXIuX19uZ0xhc3RMaXN0ZW5lckZuX18gfHwgZXhpc3RpbmdMaXN0ZW5lcjtcbiAgICBsYXN0TGlzdGVuZXJGbi5fX25nTmV4dExpc3RlbmVyRm5fXyA9IG9yaWdpbmFsTGlzdGVuZXI7XG4gICAgZXhpc3RpbmdMaXN0ZW5lci5fX25nTGFzdExpc3RlbmVyRm5fXyA9IG9yaWdpbmFsTGlzdGVuZXI7XG4gICAgaGFzQ29hbGVzY2VkID0gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBuYXRpdmUgPSBnZXROYXRpdmVCeVROb2RlKHROb2RlLCBsVmlldyk7XG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnRUYXJnZXRSZXNvbHZlciA/IGV2ZW50VGFyZ2V0UmVzb2x2ZXIobmF0aXZlKSA6IG5hdGl2ZTtcbiAgICBzdGFzaEV2ZW50TGlzdGVuZXJJbXBsKGxWaWV3LCB0YXJnZXQsIGV2ZW50TmFtZSwgd3JhcHBlZExpc3RlbmVyKTtcbiAgICBjb25zdCBjbGVhbnVwRm4gPSByZW5kZXJlci5saXN0ZW4odGFyZ2V0LCBldmVudE5hbWUsIHdyYXBwZWRMaXN0ZW5lcik7XG4gICAgaWYgKCFpc0FuaW1hdGlvbkV2ZW50VHlwZShldmVudE5hbWUpKSB7XG4gICAgICBjb25zdCBpZHhPclRhcmdldEdldHRlciA9IGV2ZW50VGFyZ2V0UmVzb2x2ZXIgPyBfbFZpZXcgPT4gZXZlbnRUYXJnZXRSZXNvbHZlcih1bndyYXBSTm9kZShfbFZpZXdbdE5vZGUuaW5kZXhdKSkgOiB0Tm9kZS5pbmRleDtcbiAgICAgIHN0b3JlTGlzdGVuZXJDbGVhbnVwKGlkeE9yVGFyZ2V0R2V0dGVyLCB0VmlldywgbFZpZXcsIGV2ZW50TmFtZSwgd3JhcHBlZExpc3RlbmVyLCBjbGVhbnVwRm4sIGZhbHNlKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGhhc0NvYWxlc2NlZDtcbn1cbmZ1bmN0aW9uIGlzQW5pbWF0aW9uRXZlbnRUeXBlKGV2ZW50TmFtZSkge1xuICByZXR1cm4gZXZlbnROYW1lLnN0YXJ0c1dpdGgoJ2FuaW1hdGlvbicpIHx8IGV2ZW50TmFtZS5zdGFydHNXaXRoKCd0cmFuc2l0aW9uJyk7XG59XG5mdW5jdGlvbiBmaW5kRXhpc3RpbmdMaXN0ZW5lcih0VmlldywgbFZpZXcsIGV2ZW50TmFtZSwgdE5vZGVJbmRleCkge1xuICBjb25zdCB0Q2xlYW51cCA9IHRWaWV3LmNsZWFudXA7XG4gIGlmICh0Q2xlYW51cCAhPSBudWxsKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0Q2xlYW51cC5sZW5ndGggLSAxOyBpICs9IDIpIHtcbiAgICAgIGNvbnN0IGNsZWFudXBFdmVudE5hbWUgPSB0Q2xlYW51cFtpXTtcbiAgICAgIGlmIChjbGVhbnVwRXZlbnROYW1lID09PSBldmVudE5hbWUgJiYgdENsZWFudXBbaSArIDFdID09PSB0Tm9kZUluZGV4KSB7XG4gICAgICAgIGNvbnN0IGxDbGVhbnVwID0gbFZpZXdbQ0xFQU5VUF07XG4gICAgICAgIGNvbnN0IGxpc3RlbmVySWR4SW5MQ2xlYW51cCA9IHRDbGVhbnVwW2kgKyAyXTtcbiAgICAgICAgcmV0dXJuIGxDbGVhbnVwICYmIGxDbGVhbnVwLmxlbmd0aCA+IGxpc3RlbmVySWR4SW5MQ2xlYW51cCA/IGxDbGVhbnVwW2xpc3RlbmVySWR4SW5MQ2xlYW51cF0gOiBudWxsO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBjbGVhbnVwRXZlbnROYW1lID09PSAnc3RyaW5nJykge1xuICAgICAgICBpICs9IDI7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsO1xufVxuZnVuY3Rpb24gc3RvcmVMaXN0ZW5lckNsZWFudXAoaW5kZXhPclRhcmdldEdldHRlciwgdFZpZXcsIGxWaWV3LCBldmVudE5hbWUsIGxpc3RlbmVyRm4sIGNsZWFudXAsIGlzT3V0cHV0KSB7XG4gIGNvbnN0IHRDbGVhbnVwID0gdFZpZXcuZmlyc3RDcmVhdGVQYXNzID8gZ2V0T3JDcmVhdGVUVmlld0NsZWFudXAodFZpZXcpIDogbnVsbDtcbiAgY29uc3QgbENsZWFudXAgPSBnZXRPckNyZWF0ZUxWaWV3Q2xlYW51cChsVmlldyk7XG4gIGNvbnN0IGluZGV4ID0gbENsZWFudXAubGVuZ3RoO1xuICBsQ2xlYW51cC5wdXNoKGxpc3RlbmVyRm4sIGNsZWFudXApO1xuICB0Q2xlYW51cCAmJiB0Q2xlYW51cC5wdXNoKGV2ZW50TmFtZSwgaW5kZXhPclRhcmdldEdldHRlciwgaW5kZXgsIChpbmRleCArIDEpICogKGlzT3V0cHV0ID8gLTEgOiAxKSk7XG59XG5mdW5jdGlvbiBjcmVhdGVPdXRwdXRMaXN0ZW5lcih0Tm9kZSwgbFZpZXcsIGxpc3RlbmVyRm4sIHRhcmdldERlZiwgZXZlbnROYW1lKSB7XG4gIGNvbnN0IHdyYXBwZWRMaXN0ZW5lciA9IHdyYXBMaXN0ZW5lcih0Tm9kZSwgbFZpZXcsIGxpc3RlbmVyRm4pO1xuICBjb25zdCBoYXNCb3VuZCA9IGxpc3RlblRvRGlyZWN0aXZlT3V0cHV0KHROb2RlLCBsVmlldywgdGFyZ2V0RGVmLCBldmVudE5hbWUsIHdyYXBwZWRMaXN0ZW5lcik7XG4gIGlmICghaGFzQm91bmQgJiYgbmdEZXZNb2RlKSB7XG4gICAgdGhyb3cgbmV3IFJ1bnRpbWVFcnJvcigzMTYsIGAke3N0cmluZ2lmeUZvckVycm9yKHRhcmdldERlZi50eXBlKX0gZG9lcyBub3QgaGF2ZSBhbiBvdXRwdXQgd2l0aCBhIHB1YmxpYyBuYW1lIG9mIFwiJHtldmVudE5hbWV9XCIuYCk7XG4gIH1cbn1cbmZ1bmN0aW9uIGxpc3RlblRvRGlyZWN0aXZlT3V0cHV0KHROb2RlLCBsVmlldywgdGFyZ2V0LCBldmVudE5hbWUsIGxpc3RlbmVyRm4pIHtcbiAgbGV0IGhvc3RJbmRleCA9IG51bGw7XG4gIGxldCBob3N0RGlyZWN0aXZlc1N0YXJ0ID0gbnVsbDtcbiAgbGV0IGhvc3REaXJlY3RpdmVzRW5kID0gbnVsbDtcbiAgbGV0IGhhc091dHB1dCA9IGZhbHNlO1xuICBpZiAobmdEZXZNb2RlICYmICF0Tm9kZS5kaXJlY3RpdmVUb0luZGV4Py5oYXModGFyZ2V0LnR5cGUpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBOb2RlIGRvZXMgbm90IGhhdmUgYSBkaXJlY3RpdmUgd2l0aCB0eXBlICR7dGFyZ2V0LnR5cGUubmFtZX1gKTtcbiAgfVxuICBjb25zdCBkYXRhID0gdE5vZGUuZGlyZWN0aXZlVG9JbmRleC5nZXQodGFyZ2V0LnR5cGUpO1xuICBpZiAodHlwZW9mIGRhdGEgPT09ICdudW1iZXInKSB7XG4gICAgaG9zdEluZGV4ID0gZGF0YTtcbiAgfSBlbHNlIHtcbiAgICBbaG9zdEluZGV4LCBob3N0RGlyZWN0aXZlc1N0YXJ0LCBob3N0RGlyZWN0aXZlc0VuZF0gPSBkYXRhO1xuICB9XG4gIGlmIChob3N0RGlyZWN0aXZlc1N0YXJ0ICE9PSBudWxsICYmIGhvc3REaXJlY3RpdmVzRW5kICE9PSBudWxsICYmIHROb2RlLmhvc3REaXJlY3RpdmVPdXRwdXRzPy5oYXNPd25Qcm9wZXJ0eShldmVudE5hbWUpKSB7XG4gICAgY29uc3QgaG9zdERpcmVjdGl2ZU91dHB1dHMgPSB0Tm9kZS5ob3N0RGlyZWN0aXZlT3V0cHV0c1tldmVudE5hbWVdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaG9zdERpcmVjdGl2ZU91dHB1dHMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgIGNvbnN0IGluZGV4ID0gaG9zdERpcmVjdGl2ZU91dHB1dHNbaV07XG4gICAgICBpZiAoaW5kZXggPj0gaG9zdERpcmVjdGl2ZXNTdGFydCAmJiBpbmRleCA8PSBob3N0RGlyZWN0aXZlc0VuZCkge1xuICAgICAgICBuZ0Rldk1vZGUgJiYgYXNzZXJ0SW5kZXhJblJhbmdlKGxWaWV3LCBpbmRleCk7XG4gICAgICAgIGhhc091dHB1dCA9IHRydWU7XG4gICAgICAgIGxpc3RlblRvT3V0cHV0KHROb2RlLCBsVmlldywgaW5kZXgsIGhvc3REaXJlY3RpdmVPdXRwdXRzW2kgKyAxXSwgZXZlbnROYW1lLCBsaXN0ZW5lckZuKTtcbiAgICAgIH0gZWxzZSBpZiAoaW5kZXggPiBob3N0RGlyZWN0aXZlc0VuZCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKHRhcmdldC5vdXRwdXRzLmhhc093blByb3BlcnR5KGV2ZW50TmFtZSkpIHtcbiAgICBuZ0Rldk1vZGUgJiYgYXNzZXJ0SW5kZXhJblJhbmdlKGxWaWV3LCBob3N0SW5kZXgpO1xuICAgIGhhc091dHB1dCA9IHRydWU7XG4gICAgbGlzdGVuVG9PdXRwdXQodE5vZGUsIGxWaWV3LCBob3N0SW5kZXgsIGV2ZW50TmFtZSwgZXZlbnROYW1lLCBsaXN0ZW5lckZuKTtcbiAgfVxuICByZXR1cm4gaGFzT3V0cHV0O1xufVxuZnVuY3Rpb24gbGlzdGVuVG9PdXRwdXQodE5vZGUsIGxWaWV3LCBkaXJlY3RpdmVJbmRleCwgbG9va3VwTmFtZSwgZXZlbnROYW1lLCBsaXN0ZW5lckZuKSB7XG4gIG5nRGV2TW9kZSAmJiBhc3NlcnRJbmRleEluUmFuZ2UobFZpZXcsIGRpcmVjdGl2ZUluZGV4KTtcbiAgY29uc3QgaW5zdGFuY2UgPSBsVmlld1tkaXJlY3RpdmVJbmRleF07XG4gIGNvbnN0IHRWaWV3ID0gbFZpZXdbVFZJRVddO1xuICBjb25zdCBkZWYgPSB0Vmlldy5kYXRhW2RpcmVjdGl2ZUluZGV4XTtcbiAgY29uc3QgcHJvcGVydHlOYW1lID0gZGVmLm91dHB1dHNbbG9va3VwTmFtZV07XG4gIGNvbnN0IG91dHB1dCA9IGluc3RhbmNlW3Byb3BlcnR5TmFtZV07XG4gIGlmIChuZ0Rldk1vZGUgJiYgIWlzT3V0cHV0U3Vic2NyaWJhYmxlKG91dHB1dCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEBPdXRwdXQgJHtwcm9wZXJ0eU5hbWV9IG5vdCBpbml0aWFsaXplZCBpbiAnJHtpbnN0YW5jZS5jb25zdHJ1Y3Rvci5uYW1lfScuYCk7XG4gIH1cbiAgY29uc3Qgc3Vic2NyaXB0aW9uID0gb3V0cHV0LnN1YnNjcmliZShsaXN0ZW5lckZuKTtcbiAgc3RvcmVMaXN0ZW5lckNsZWFudXAodE5vZGUuaW5kZXgsIHRWaWV3LCBsVmlldywgZXZlbnROYW1lLCBsaXN0ZW5lckZuLCBzdWJzY3JpcHRpb24sIHRydWUpO1xufVxuZnVuY3Rpb24gaXNPdXRwdXRTdWJzY3JpYmFibGUodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgdHlwZW9mIHZhbHVlLnN1YnNjcmliZSA9PT0gJ2Z1bmN0aW9uJztcbn1cbmZ1bmN0aW9uIMm1ybVjb250cm9sQ3JlYXRlKCkge1xuICBjb250cm9sQ3JlYXRlSW50ZXJuYWwoKTtcbn1cbmZ1bmN0aW9uIGNvbnRyb2xDcmVhdGVJbnRlcm5hbCgpIHtcbiAgY29uc3QgbFZpZXcgPSBnZXRMVmlldygpO1xuICBjb25zdCB0VmlldyA9IGdldFRWaWV3KCk7XG4gIGNvbnN0IHROb2RlID0gZ2V0Q3VycmVudFROb2RlKCk7XG4gIGlmICh0Vmlldy5maXJzdENyZWF0ZVBhc3MpIHtcbiAgICBpbml0aWFsaXplQ29udHJvbEZpcnN0Q3JlYXRlUGFzcyh0VmlldywgdE5vZGUpO1xuICB9XG4gIGlmICh0Tm9kZS5jb250cm9sRGlyZWN0aXZlSW5kZXggPT09IC0xKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHBlcmZvcm1hbmNlTWFya0ZlYXR1cmUoJ05nU2lnbmFsRm9ybXMnKTtcbiAgY29uc3QgaW5zdGFuY2UgPSBsVmlld1t0Tm9kZS5jb250cm9sRGlyZWN0aXZlSW5kZXhdO1xuICBjb25zdCBjb250cm9sRGVmID0gdFZpZXcuZGF0YVt0Tm9kZS5jb250cm9sRGlyZWN0aXZlSW5kZXhdLmNvbnRyb2xEZWY7XG4gIGNvbnRyb2xEZWYuY3JlYXRlKGluc3RhbmNlLCBuZXcgQ29udHJvbERpcmVjdGl2ZUhvc3RJbXBsKGxWaWV3LCB0VmlldywgdE5vZGUpKTtcbn1cbmZ1bmN0aW9uIMm1ybVjb250cm9sKCkge1xuICBjb250cm9sVXBkYXRlSW50ZXJuYWwoKTtcbn1cbmZ1bmN0aW9uIGNvbnRyb2xVcGRhdGVJbnRlcm5hbCgpIHtcbiAgaWYgKG5nRGV2TW9kZSAmJiBpc0luQ2hlY2tOb0NoYW5nZXNNb2RlKCkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgbFZpZXcgPSBnZXRMVmlldygpO1xuICBjb25zdCB0VmlldyA9IGdldFRWaWV3KCk7XG4gIGNvbnN0IHROb2RlID0gZ2V0U2VsZWN0ZWRUTm9kZSgpO1xuICBpZiAodE5vZGUuY29udHJvbERpcmVjdGl2ZUluZGV4ID09PSAtMSkge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBjb250cm9sRGVmID0gdFZpZXcuZGF0YVt0Tm9kZS5jb250cm9sRGlyZWN0aXZlSW5kZXhdLmNvbnRyb2xEZWY7XG4gIGNvbnN0IGluc3RhbmNlID0gbFZpZXdbdE5vZGUuY29udHJvbERpcmVjdGl2ZUluZGV4XTtcbiAgY29udHJvbERlZi51cGRhdGUoaW5zdGFuY2UsIG5ldyBDb250cm9sRGlyZWN0aXZlSG9zdEltcGwobFZpZXcsIHRWaWV3LCB0Tm9kZSkpO1xufVxuY2xhc3MgQ29udHJvbERpcmVjdGl2ZUhvc3RJbXBsIHtcbiAgbFZpZXc7XG4gIHRWaWV3O1xuICB0Tm9kZTtcbiAgaGFzUGFzc1Rocm91Z2g7XG4gIGNvbnN0cnVjdG9yKGxWaWV3LCB0VmlldywgdE5vZGUpIHtcbiAgICB0aGlzLmxWaWV3ID0gbFZpZXc7XG4gICAgdGhpcy50VmlldyA9IHRWaWV3O1xuICAgIHRoaXMudE5vZGUgPSB0Tm9kZTtcbiAgICB0aGlzLmhhc1Bhc3NUaHJvdWdoID0gISEodE5vZGUuZmxhZ3MgJiA0MDk2KTtcbiAgfVxuICBnZXQgY3VzdG9tQ29udHJvbCgpIHtcbiAgICByZXR1cm4gdGhpcy50Tm9kZS5jdXN0b21Db250cm9sSW5kZXggIT09IC0xID8gdGhpcy5sVmlld1t0aGlzLnROb2RlLmN1c3RvbUNvbnRyb2xJbmRleF0gOiB1bmRlZmluZWQ7XG4gIH1cbiAgZ2V0IGRlc2NyaXB0b3IoKSB7XG4gICAgaWYgKG5nRGV2TW9kZSAmJiBpc0NvbXBvbmVudEhvc3QodGhpcy50Tm9kZSkpIHtcbiAgICAgIGNvbnN0IGNvbXBvbmVudEluZGV4ID0gdGhpcy50Tm9kZS5kaXJlY3RpdmVTdGFydCArIHRoaXMudE5vZGUuY29tcG9uZW50T2Zmc2V0O1xuICAgICAgY29uc3QgY29tcG9uZW50RGVmID0gdGhpcy50Vmlldy5kYXRhW2NvbXBvbmVudEluZGV4XTtcbiAgICAgIHJldHVybiBgQ29tcG9uZW50ICR7ZGVidWdTdHJpbmdpZnlUeXBlRm9yRXJyb3IoY29tcG9uZW50RGVmLnR5cGUpfWA7XG4gICAgfVxuICAgIHJldHVybiBgPCR7dGhpcy50Tm9kZS52YWx1ZX0+YDtcbiAgfVxuICBsaXN0ZW5Ub0N1c3RvbUNvbnRyb2xPdXRwdXQob3V0cHV0TmFtZSwgY2FsbGJhY2spIHtcbiAgICBpZiAoIWhhc091dHB1dCh0aGlzLnRWaWV3LmRhdGFbdGhpcy50Tm9kZS5jdXN0b21Db250cm9sSW5kZXhdLCBvdXRwdXROYW1lKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsaXN0ZW5Ub091dHB1dCh0aGlzLnROb2RlLCB0aGlzLmxWaWV3LCB0aGlzLnROb2RlLmN1c3RvbUNvbnRyb2xJbmRleCwgb3V0cHV0TmFtZSwgb3V0cHV0TmFtZSwgd3JhcExpc3RlbmVyKHRoaXMudE5vZGUsIHRoaXMubFZpZXcsIGNhbGxiYWNrKSk7XG4gIH1cbiAgbGlzdGVuVG9DdXN0b21Db250cm9sTW9kZWwobGlzdGVuZXIpIHtcbiAgICBjb25zdCBtb2RlbE5hbWUgPSB0aGlzLnROb2RlLmZsYWdzICYgMTAyNCA/ICd2YWx1ZUNoYW5nZScgOiAnY2hlY2tlZENoYW5nZSc7XG4gICAgbGlzdGVuVG9PdXRwdXQodGhpcy50Tm9kZSwgdGhpcy5sVmlldywgdGhpcy50Tm9kZS5jdXN0b21Db250cm9sSW5kZXgsIG1vZGVsTmFtZSwgbW9kZWxOYW1lLCB3cmFwTGlzdGVuZXIodGhpcy50Tm9kZSwgdGhpcy5sVmlldywgbGlzdGVuZXIpKTtcbiAgfVxuICBsaXN0ZW5Ub0RvbShldmVudE5hbWUsIGxpc3RlbmVyKSB7XG4gICAgbGlzdGVuVG9Eb21FdmVudCh0aGlzLnROb2RlLCB0aGlzLnRWaWV3LCB0aGlzLmxWaWV3LCB1bmRlZmluZWQsIHRoaXMubFZpZXdbUkVOREVSRVJdLCBldmVudE5hbWUsIGxpc3RlbmVyLCB3cmFwTGlzdGVuZXIodGhpcy50Tm9kZSwgdGhpcy5sVmlldywgbGlzdGVuZXIpKTtcbiAgfVxuICBzZXRJbnB1dE9uRGlyZWN0aXZlcyhpbnB1dE5hbWUsIHZhbHVlKSB7XG4gICAgY29uc3QgZGlyZWN0aXZlSW5kaWNlcyA9IHRoaXMudE5vZGUuaW5wdXRzPy5baW5wdXROYW1lXTtcbiAgICBjb25zdCBob3N0RGlyZWN0aXZlSW5wdXRzID0gdGhpcy50Tm9kZS5ob3N0RGlyZWN0aXZlSW5wdXRzPy5baW5wdXROYW1lXTtcbiAgICBpZiAoIWRpcmVjdGl2ZUluZGljZXMgJiYgIWhvc3REaXJlY3RpdmVJbnB1dHMpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGRpcmVjdGl2ZUluZGljZXMpIHtcbiAgICAgIGZvciAoY29uc3QgaW5kZXggb2YgZGlyZWN0aXZlSW5kaWNlcykge1xuICAgICAgICBjb25zdCBkaXJlY3RpdmVEZWYgPSB0aGlzLnRWaWV3LmRhdGFbaW5kZXhdO1xuICAgICAgICBjb25zdCBkaXJlY3RpdmUgPSB0aGlzLmxWaWV3W2luZGV4XTtcbiAgICAgICAgd3JpdGVUb0RpcmVjdGl2ZUlucHV0KGRpcmVjdGl2ZURlZiwgZGlyZWN0aXZlLCBpbnB1dE5hbWUsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGhvc3REaXJlY3RpdmVJbnB1dHMpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaG9zdERpcmVjdGl2ZUlucHV0cy5sZW5ndGg7IGkgKz0gMikge1xuICAgICAgICBjb25zdCBpbmRleCA9IGhvc3REaXJlY3RpdmVJbnB1dHNbaV07XG4gICAgICAgIGNvbnN0IGludGVybmFsTmFtZSA9IGhvc3REaXJlY3RpdmVJbnB1dHNbaSArIDFdO1xuICAgICAgICBjb25zdCBkaXJlY3RpdmVEZWYgPSB0aGlzLnRWaWV3LmRhdGFbaW5kZXhdO1xuICAgICAgICBjb25zdCBkaXJlY3RpdmUgPSB0aGlzLmxWaWV3W2luZGV4XTtcbiAgICAgICAgd3JpdGVUb0RpcmVjdGl2ZUlucHV0KGRpcmVjdGl2ZURlZiwgZGlyZWN0aXZlLCBpbnRlcm5hbE5hbWUsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgc2V0Q3VzdG9tQ29udHJvbE1vZGVsSW5wdXQodmFsdWUpIHtcbiAgICBjb25zdCBkaXJlY3RpdmUgPSB0aGlzLmxWaWV3W3RoaXMudE5vZGUuY3VzdG9tQ29udHJvbEluZGV4XTtcbiAgICBjb25zdCBkaXJlY3RpdmVEZWYgPSB0aGlzLnRWaWV3LmRhdGFbdGhpcy50Tm9kZS5jdXN0b21Db250cm9sSW5kZXhdO1xuICAgIGNvbnN0IG1vZGVsTmFtZSA9IHRoaXMudE5vZGUuZmxhZ3MgJiAxMDI0ID8gJ3ZhbHVlJyA6ICdjaGVja2VkJztcbiAgICB3cml0ZVRvRGlyZWN0aXZlSW5wdXQoZGlyZWN0aXZlRGVmLCBkaXJlY3RpdmUsIG1vZGVsTmFtZSwgdmFsdWUpO1xuICB9XG4gIGN1c3RvbUNvbnRyb2xIYXNJbnB1dChpbnB1dE5hbWUpIHtcbiAgICBpZiAodGhpcy50Tm9kZS5jdXN0b21Db250cm9sSW5kZXggPT09IC0xKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGRpcmVjdGl2ZURlZiA9IHRoaXMudFZpZXcuZGF0YVt0aGlzLnROb2RlLmN1c3RvbUNvbnRyb2xJbmRleF07XG4gICAgcmV0dXJuIGRpcmVjdGl2ZURlZi5pbnB1dHNbaW5wdXROYW1lXSAhPSB1bmRlZmluZWQ7XG4gIH1cbn1cbmZ1bmN0aW9uIGluaXRpYWxpemVDb250cm9sRmlyc3RDcmVhdGVQYXNzKHRWaWV3LCB0Tm9kZSwgbFZpZXcpIHtcbiAgbmdEZXZNb2RlICYmIGFzc2VydEZpcnN0Q3JlYXRlUGFzcyh0Vmlldyk7XG4gIGZvciAobGV0IGkgPSB0Tm9kZS5kaXJlY3RpdmVTdGFydDsgaSA8IHROb2RlLmRpcmVjdGl2ZUVuZDsgaSsrKSB7XG4gICAgY29uc3QgZGlyZWN0aXZlRGVmID0gdFZpZXcuZGF0YVtpXTtcbiAgICBpZiAoZGlyZWN0aXZlRGVmLmNvbnRyb2xEZWYpIHtcbiAgICAgIHROb2RlLmNvbnRyb2xEaXJlY3RpdmVJbmRleCA9IGk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgaWYgKHROb2RlLmNvbnRyb2xEaXJlY3RpdmVJbmRleCA9PT0gLTEpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgY29udHJvbERlZiA9IHRWaWV3LmRhdGFbdE5vZGUuY29udHJvbERpcmVjdGl2ZUluZGV4XS5jb250cm9sRGVmO1xuICBpZiAoY29udHJvbERlZi5wYXNzVGhyb3VnaElucHV0KSB7XG4gICAgaWYgKCh0Tm9kZS5pbnB1dHM/Lltjb250cm9sRGVmLnBhc3NUaHJvdWdoSW5wdXRdPy5sZW5ndGggPz8gMCkgPiAxKSB7XG4gICAgICB0Tm9kZS5mbGFncyB8PSA0MDk2O1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuICBpbml0aWFsaXplQ3VzdG9tQ29udHJvbFN0YXR1cyh0VmlldywgdE5vZGUpO1xufVxuZnVuY3Rpb24gaW5pdGlhbGl6ZUN1c3RvbUNvbnRyb2xTdGF0dXModFZpZXcsIHROb2RlKSB7XG4gIGZvciAobGV0IGkgPSB0Tm9kZS5kaXJlY3RpdmVTdGFydDsgaSA8IHROb2RlLmRpcmVjdGl2ZUVuZDsgaSsrKSB7XG4gICAgY29uc3QgZGlyZWN0aXZlRGVmID0gdFZpZXcuZGF0YVtpXTtcbiAgICBpZiAoaGFzTW9kZWxJbnB1dChkaXJlY3RpdmVEZWYsICd2YWx1ZScpKSB7XG4gICAgICB0Tm9kZS5mbGFncyB8PSAxMDI0O1xuICAgICAgdE5vZGUuY3VzdG9tQ29udHJvbEluZGV4ID0gaTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGhhc01vZGVsSW5wdXQoZGlyZWN0aXZlRGVmLCAnY2hlY2tlZCcpKSB7XG4gICAgICB0Tm9kZS5mbGFncyB8PSAyMDQ4O1xuICAgICAgdE5vZGUuY3VzdG9tQ29udHJvbEluZGV4ID0gaTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGhhc01vZGVsSW5wdXQoZGlyZWN0aXZlRGVmLCBuYW1lKSB7XG4gIHJldHVybiBoYXNJbnB1dChkaXJlY3RpdmVEZWYsIG5hbWUpICYmIGhhc091dHB1dChkaXJlY3RpdmVEZWYsIG5hbWUgKyAnQ2hhbmdlJyk7XG59XG5mdW5jdGlvbiBoYXNJbnB1dChkaXJlY3RpdmVEZWYsIG5hbWUpIHtcbiAgcmV0dXJuIG5hbWUgaW4gZGlyZWN0aXZlRGVmLmlucHV0cztcbn1cbmZ1bmN0aW9uIGhhc091dHB1dChkaXJlY3RpdmVEZWYsIG5hbWUpIHtcbiAgcmV0dXJuIG5hbWUgaW4gZGlyZWN0aXZlRGVmLm91dHB1dHM7XG59XG5jb25zdCBCSU5ESU5HID0gLyogQF9fUFVSRV9fICovU3ltYm9sKCdCSU5ESU5HJyk7XG5jb25zdCBJTlBVVF9CSU5ESU5HX01FVEFEQVRBID0ge1xuICBraW5kOiAnaW5wdXQnLFxuICByZXF1aXJlZFZhcnM6IDFcbn07XG5jb25zdCBPVVRQVVRfQklORElOR19NRVRBREFUQSA9IHtcbiAga2luZDogJ291dHB1dCcsXG4gIHJlcXVpcmVkVmFyczogMFxufTtcbmZ1bmN0aW9uIGlucHV0QmluZGluZ1VwZGF0ZSh0YXJnZXREaXJlY3RpdmVJZHgsIHB1YmxpY05hbWUsIHZhbHVlKSB7XG4gIGNvbnN0IGxWaWV3ID0gZ2V0TFZpZXcoKTtcbiAgY29uc3QgYmluZGluZ0luZGV4ID0gbmV4dEJpbmRpbmdJbmRleCgpO1xuICBpZiAoYmluZGluZ1VwZGF0ZWQobFZpZXcsIGJpbmRpbmdJbmRleCwgdmFsdWUpKSB7XG4gICAgY29uc3QgdFZpZXcgPSBsVmlld1tUVklFV107XG4gICAgY29uc3QgdE5vZGUgPSBnZXRTZWxlY3RlZFROb2RlKCk7XG4gICAgY29uc3QgY29tcG9uZW50TFZpZXcgPSBnZXRDb21wb25lbnRMVmlld0J5SW5kZXgodE5vZGUuaW5kZXgsIGxWaWV3KTtcbiAgICBtYXJrVmlld0RpcnR5KGNvbXBvbmVudExWaWV3LCAxKTtcbiAgICBjb25zdCB0YXJnZXREZWYgPSB0Vmlldy5kaXJlY3RpdmVSZWdpc3RyeVt0YXJnZXREaXJlY3RpdmVJZHhdO1xuICAgIGlmIChuZ0Rldk1vZGUgJiYgIXRhcmdldERlZikge1xuICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFcnJvcigzMTUsIGBJbnB1dCBiaW5kaW5nIHRvIHByb3BlcnR5IFwiJHtwdWJsaWNOYW1lfVwiIGRvZXMgbm90IGhhdmUgYSB0YXJnZXQuYCk7XG4gICAgfVxuICAgIGNvbnN0IGhhc1NldCA9IHNldERpcmVjdGl2ZUlucHV0KHROb2RlLCB0VmlldywgbFZpZXcsIHRhcmdldERlZiwgcHVibGljTmFtZSwgdmFsdWUpO1xuICAgIGlmIChuZ0Rldk1vZGUpIHtcbiAgICAgIGlmICghaGFzU2V0KSB7XG4gICAgICAgIHRocm93IG5ldyBSdW50aW1lRXJyb3IoMzE1LCBgJHtzdHJpbmdpZnlGb3JFcnJvcih0YXJnZXREZWYudHlwZSl9IGRvZXMgbm90IGhhdmUgYW4gaW5wdXQgd2l0aCBhIHB1YmxpYyBuYW1lIG9mIFwiJHtwdWJsaWNOYW1lfVwiLmApO1xuICAgICAgfVxuICAgICAgc3RvcmVQcm9wZXJ0eUJpbmRpbmdNZXRhZGF0YSh0Vmlldy5kYXRhLCB0Tm9kZSwgcHVibGljTmFtZSwgYmluZGluZ0luZGV4KTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGlucHV0QmluZGluZyhwdWJsaWNOYW1lLCB2YWx1ZSkge1xuICBpZiAocHVibGljTmFtZSA9PT0gJ2Zvcm1GaWVsZCcpIHtcbiAgICBjb25zdCBiaW5kaW5nID0ge1xuICAgICAgW0JJTkRJTkddOiBJTlBVVF9CSU5ESU5HX01FVEFEQVRBLFxuICAgICAgY3JlYXRlOiAoKSA9PiB7XG4gICAgICAgIGNvbnRyb2xDcmVhdGVJbnRlcm5hbCgpO1xuICAgICAgfSxcbiAgICAgIHVwZGF0ZTogKCkgPT4ge1xuICAgICAgICBpbnB1dEJpbmRpbmdVcGRhdGUoYmluZGluZy50YXJnZXRJZHgsIHB1YmxpY05hbWUsIHZhbHVlKCkpO1xuICAgICAgICBjb250cm9sVXBkYXRlSW50ZXJuYWwoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBiaW5kaW5nO1xuICB9XG4gIGNvbnN0IGJpbmRpbmcgPSB7XG4gICAgW0JJTkRJTkddOiBJTlBVVF9CSU5ESU5HX01FVEFEQVRBLFxuICAgIHVwZGF0ZTogKCkgPT4gaW5wdXRCaW5kaW5nVXBkYXRlKGJpbmRpbmcudGFyZ2V0SWR4LCBwdWJsaWNOYW1lLCB2YWx1ZSgpKVxuICB9O1xuICByZXR1cm4gYmluZGluZztcbn1cbmZ1bmN0aW9uIG91dHB1dEJpbmRpbmcoZXZlbnROYW1lLCBsaXN0ZW5lcikge1xuICBjb25zdCBiaW5kaW5nID0ge1xuICAgIFtCSU5ESU5HXTogT1VUUFVUX0JJTkRJTkdfTUVUQURBVEEsXG4gICAgY3JlYXRlOiAoKSA9PiB7XG4gICAgICBjb25zdCBsVmlldyA9IGdldExWaWV3KCk7XG4gICAgICBjb25zdCB0Tm9kZSA9IGdldEN1cnJlbnRUTm9kZSgpO1xuICAgICAgY29uc3QgdFZpZXcgPSBsVmlld1tUVklFV107XG4gICAgICBjb25zdCB0YXJnZXREZWYgPSB0Vmlldy5kaXJlY3RpdmVSZWdpc3RyeVtiaW5kaW5nLnRhcmdldElkeF07XG4gICAgICBjcmVhdGVPdXRwdXRMaXN0ZW5lcih0Tm9kZSwgbFZpZXcsIGxpc3RlbmVyLCB0YXJnZXREZWYsIGV2ZW50TmFtZSk7XG4gICAgfVxuICB9O1xuICByZXR1cm4gYmluZGluZztcbn1cbmZ1bmN0aW9uIHR3b1dheUJpbmRpbmcocHVibGljTmFtZSwgdmFsdWUpIHtcbiAgY29uc3QgaW5wdXQgPSBpbnB1dEJpbmRpbmcocHVibGljTmFtZSwgdmFsdWUpO1xuICBjb25zdCBvdXRwdXQgPSBvdXRwdXRCaW5kaW5nKHB1YmxpY05hbWUgKyAnQ2hhbmdlJywgZXZlbnRWYWx1ZSA9PiB2YWx1ZS5zZXQoZXZlbnRWYWx1ZSkpO1xuICBuZ0Rldk1vZGUgJiYgYXNzZXJ0Tm90RGVmaW5lZChpbnB1dC5jcmVhdGUsICdVbmV4cGVjdGVkIGBjcmVhdGVgIGNhbGxiYWNrIGluIGlucHV0QmluZGluZycpO1xuICBuZ0Rldk1vZGUgJiYgYXNzZXJ0Tm90RGVmaW5lZChvdXRwdXQudXBkYXRlLCAnVW5leHBlY3RlZCBgdXBkYXRlYCBjYWxsYmFjayBpbiBvdXRwdXRCaW5kaW5nJyk7XG4gIGNvbnN0IGJpbmRpbmcgPSB7XG4gICAgW0JJTkRJTkddOiB7XG4gICAgICBraW5kOiAndHdvV2F5JyxcbiAgICAgIHJlcXVpcmVkVmFyczogaW5wdXRbQklORElOR10ucmVxdWlyZWRWYXJzICsgb3V0cHV0W0JJTkRJTkddLnJlcXVpcmVkVmFyc1xuICAgIH0sXG4gICAgc2V0IHRhcmdldElkeChpZHgpIHtcbiAgICAgIGlucHV0LnRhcmdldElkeCA9IGlkeDtcbiAgICAgIG91dHB1dC50YXJnZXRJZHggPSBpZHg7XG4gICAgfSxcbiAgICBjcmVhdGU6IG91dHB1dC5jcmVhdGUsXG4gICAgdXBkYXRlOiBpbnB1dC51cGRhdGVcbiAgfTtcbiAgcmV0dXJuIGJpbmRpbmc7XG59XG5mdW5jdGlvbiBnZXRDbG9zZXN0Q29tcG9uZW50TmFtZShub2RlKSB7XG4gIGxldCBjdXJyZW50Tm9kZSA9IG5vZGU7XG4gIHdoaWxlIChjdXJyZW50Tm9kZSkge1xuICAgIGNvbnN0IGxWaWV3ID0gcmVhZFBhdGNoZWRMVmlldyhjdXJyZW50Tm9kZSk7XG4gICAgaWYgKGxWaWV3ICE9PSBudWxsKSB7XG4gICAgICBmb3IgKGxldCBpID0gSEVBREVSX09GRlNFVDsgaSA8IGxWaWV3Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnQgPSBsVmlld1tpXTtcbiAgICAgICAgaWYgKCFpc0xWaWV3KGN1cnJlbnQpICYmICFpc0xDb250YWluZXIoY3VycmVudCkgfHwgY3VycmVudFtIT1NUXSAhPT0gY3VycmVudE5vZGUpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0VmlldyA9IGxWaWV3W1RWSUVXXTtcbiAgICAgICAgY29uc3QgdE5vZGUgPSBnZXRUTm9kZSh0VmlldywgaSk7XG4gICAgICAgIGlmIChpc0NvbXBvbmVudEhvc3QodE5vZGUpKSB7XG4gICAgICAgICAgY29uc3QgZGVmID0gdFZpZXcuZGF0YVt0Tm9kZS5kaXJlY3RpdmVTdGFydCArIHROb2RlLmNvbXBvbmVudE9mZnNldF07XG4gICAgICAgICAgY29uc3QgbmFtZSA9IGdldENvbXBvbmVudE5hbWUoZGVmKTtcbiAgICAgICAgICBpZiAobmFtZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIG5hbWU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBjdXJyZW50Tm9kZSA9IGN1cnJlbnROb2RlLnBhcmVudE5vZGU7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5mdW5jdGlvbiBnZXRDb21wb25lbnROYW1lKGRlZikge1xuICByZXR1cm4gZGVmLmRlYnVnSW5mbz8uY2xhc3NOYW1lIHx8IGRlZi50eXBlLm5hbWUgfHwgbnVsbDtcbn1cbmNsYXNzIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlciBleHRlbmRzIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlciQxIHtcbiAgbmdNb2R1bGU7XG4gIGNvbnN0cnVjdG9yKG5nTW9kdWxlKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLm5nTW9kdWxlID0gbmdNb2R1bGU7XG4gIH1cbiAgcmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoY29tcG9uZW50KSB7XG4gICAgbmdEZXZNb2RlICYmIGFzc2VydENvbXBvbmVudFR5cGUoY29tcG9uZW50KTtcbiAgICBjb25zdCBjb21wb25lbnREZWYgPSBnZXRDb21wb25lbnREZWYoY29tcG9uZW50KTtcbiAgICByZXR1cm4gbmV3IENvbXBvbmVudEZhY3RvcnkoY29tcG9uZW50RGVmLCB0aGlzLm5nTW9kdWxlKTtcbiAgfVxufVxuZnVuY3Rpb24gdG9JbnB1dFJlZkFycmF5KG1hcCkge1xuICByZXR1cm4gT2JqZWN0LmtleXMobWFwKS5tYXAobmFtZSA9PiB7XG4gICAgY29uc3QgW3Byb3BOYW1lLCBmbGFncywgdHJhbnNmb3JtXSA9IG1hcFtuYW1lXTtcbiAgICBjb25zdCBpbnB1dERhdGEgPSB7XG4gICAgICBwcm9wTmFtZTogcHJvcE5hbWUsXG4gICAgICB0ZW1wbGF0ZU5hbWU6IG5hbWUsXG4gICAgICBpc1NpZ25hbDogKGZsYWdzICYgSW5wdXRGbGFncy5TaWduYWxCYXNlZCkgIT09IDBcbiAgICB9O1xuICAgIGlmICh0cmFuc2Zvcm0pIHtcbiAgICAgIGlucHV0RGF0YS50cmFuc2Zvcm0gPSB0cmFuc2Zvcm07XG4gICAgfVxuICAgIHJldHVybiBpbnB1dERhdGE7XG4gIH0pO1xufVxuZnVuY3Rpb24gdG9PdXRwdXRSZWZBcnJheShtYXApIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKG1hcCkubWFwKG5hbWUgPT4gKHtcbiAgICBwcm9wTmFtZTogbWFwW25hbWVdLFxuICAgIHRlbXBsYXRlTmFtZTogbmFtZVxuICB9KSk7XG59XG5mdW5jdGlvbiB2ZXJpZnlOb3RBbk9ycGhhbkNvbXBvbmVudChjb21wb25lbnREZWYpIHtcbiAgaWYgKCh0eXBlb2YgbmdKaXRNb2RlID09PSAndW5kZWZpbmVkJyB8fCBuZ0ppdE1vZGUpICYmIGNvbXBvbmVudERlZi5kZWJ1Z0luZm8/LmZvcmJpZE9ycGhhblJlbmRlcmluZykge1xuICAgIGlmIChkZXBzVHJhY2tlci5pc09ycGhhbkNvbXBvbmVudChjb21wb25lbnREZWYudHlwZSkpIHtcbiAgICAgIHRocm93IG5ldyBSdW50aW1lRXJyb3IoOTgxLCBgT3JwaGFuIGNvbXBvbmVudCBmb3VuZCEgVHJ5aW5nIHRvIHJlbmRlciB0aGUgY29tcG9uZW50ICR7ZGVidWdTdHJpbmdpZnlUeXBlRm9yRXJyb3IoY29tcG9uZW50RGVmLnR5cGUpfSB3aXRob3V0IGZpcnN0IGxvYWRpbmcgdGhlIE5nTW9kdWxlIHRoYXQgZGVjbGFyZXMgaXQuIEl0IGlzIHJlY29tbWVuZGVkIHRvIG1ha2UgdGhpcyBjb21wb25lbnQgc3RhbmRhbG9uZSBpbiBvcmRlciB0byBhdm9pZCB0aGlzIGVycm9yLiBJZiB0aGlzIGlzIG5vdCBwb3NzaWJsZSBub3csIGltcG9ydCB0aGUgY29tcG9uZW50J3MgTmdNb2R1bGUgaW4gdGhlIGFwcHJvcHJpYXRlIE5nTW9kdWxlLCBvciB0aGUgc3RhbmRhbG9uZSBjb21wb25lbnQgaW4gd2hpY2ggeW91IGFyZSB0cnlpbmcgdG8gcmVuZGVyIHRoaXMgY29tcG9uZW50LiBJZiB0aGlzIGlzIGEgbGF6eSBpbXBvcnQsIGxvYWQgdGhlIE5nTW9kdWxlIGxhemlseSBhcyB3ZWxsIGFuZCB1c2UgaXRzIG1vZHVsZSBpbmplY3Rvci5gKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGNyZWF0ZVJvb3RWaWV3SW5qZWN0b3IoY29tcG9uZW50RGVmLCBlbnZpcm9ubWVudEluamVjdG9yLCBpbmplY3Rvcikge1xuICBsZXQgcmVhbEVudmlyb25tZW50SW5qZWN0b3IgPSBlbnZpcm9ubWVudEluamVjdG9yIGluc3RhbmNlb2YgRW52aXJvbm1lbnRJbmplY3RvciA/IGVudmlyb25tZW50SW5qZWN0b3IgOiBlbnZpcm9ubWVudEluamVjdG9yPy5pbmplY3RvcjtcbiAgaWYgKHJlYWxFbnZpcm9ubWVudEluamVjdG9yICYmIGNvbXBvbmVudERlZi5nZXRTdGFuZGFsb25lSW5qZWN0b3IgIT09IG51bGwpIHtcbiAgICByZWFsRW52aXJvbm1lbnRJbmplY3RvciA9IGNvbXBvbmVudERlZi5nZXRTdGFuZGFsb25lSW5qZWN0b3IocmVhbEVudmlyb25tZW50SW5qZWN0b3IpIHx8IHJlYWxFbnZpcm9ubWVudEluamVjdG9yO1xuICB9XG4gIGNvbnN0IHJvb3RWaWV3SW5qZWN0b3IgPSByZWFsRW52aXJvbm1lbnRJbmplY3RvciA/IG5ldyBDaGFpbmVkSW5qZWN0b3IoaW5qZWN0b3IsIHJlYWxFbnZpcm9ubWVudEluamVjdG9yKSA6IGluamVjdG9yO1xuICByZXR1cm4gcm9vdFZpZXdJbmplY3Rvcjtcbn1cbmZ1bmN0aW9uIGNyZWF0ZVJvb3RMVmlld0Vudmlyb25tZW50KHJvb3RMVmlld0luamVjdG9yKSB7XG4gIGNvbnN0IHJlbmRlcmVyRmFjdG9yeSA9IHJvb3RMVmlld0luamVjdG9yLmdldChSZW5kZXJlckZhY3RvcnkyLCBudWxsKTtcbiAgaWYgKHJlbmRlcmVyRmFjdG9yeSA9PT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBSdW50aW1lRXJyb3IoNDA3LCBuZ0Rldk1vZGUgJiYgJ0FuZ3VsYXIgd2FzIG5vdCBhYmxlIHRvIGluamVjdCBhIHJlbmRlcmVyIChSZW5kZXJlckZhY3RvcnkyKS4gJyArICdMaWtlbHkgdGhpcyBpcyBkdWUgdG8gYSBicm9rZW4gREkgaGllcmFyY2h5LiAnICsgJ01ha2Ugc3VyZSB0aGF0IGFueSBpbmplY3RvciB1c2VkIHRvIGNyZWF0ZSB0aGlzIGNvbXBvbmVudCBoYXMgYSBjb3JyZWN0IHBhcmVudC4nKTtcbiAgfVxuICBjb25zdCBzYW5pdGl6ZXIgPSByb290TFZpZXdJbmplY3Rvci5nZXQoU2FuaXRpemVyLCBudWxsKTtcbiAgY29uc3QgY2hhbmdlRGV0ZWN0aW9uU2NoZWR1bGVyID0gcm9vdExWaWV3SW5qZWN0b3IuZ2V0KENoYW5nZURldGVjdGlvblNjaGVkdWxlciwgbnVsbCk7XG4gIGNvbnN0IHRyYWNpbmdTZXJ2aWNlID0gcm9vdExWaWV3SW5qZWN0b3IuZ2V0KFRyYWNpbmdTZXJ2aWNlLCBudWxsLCB7XG4gICAgb3B0aW9uYWw6IHRydWVcbiAgfSk7XG4gIGxldCBuZ1JlZmxlY3QgPSBmYWxzZTtcbiAgaWYgKHR5cGVvZiBuZ0Rldk1vZGUgPT09ICd1bmRlZmluZWQnIHx8IG5nRGV2TW9kZSkge1xuICAgIG5nUmVmbGVjdCA9IHJvb3RMVmlld0luamVjdG9yLmdldChOR19SRUZMRUNUX0FUVFJTX0ZMQUcsIE5HX1JFRkxFQ1RfQVRUUlNfRkxBR19ERUZBVUxUKTtcbiAgfVxuICByZXR1cm4ge1xuICAgIHJlbmRlcmVyRmFjdG9yeSxcbiAgICBzYW5pdGl6ZXIsXG4gICAgY2hhbmdlRGV0ZWN0aW9uU2NoZWR1bGVyLFxuICAgIG5nUmVmbGVjdCxcbiAgICB0cmFjaW5nU2VydmljZVxuICB9O1xufVxuZnVuY3Rpb24gY3JlYXRlSG9zdEVsZW1lbnQoY29tcG9uZW50RGVmLCByZW5kZXJlcikge1xuICBjb25zdCB0YWdOYW1lID0gaW5mZXJUYWdOYW1lRnJvbURlZmluaXRpb24oY29tcG9uZW50RGVmKTtcbiAgY29uc3QgbmFtZXNwYWNlID0gdGFnTmFtZSA9PT0gJ3N2ZycgPyBTVkdfTkFNRVNQQUNFIDogdGFnTmFtZSA9PT0gJ21hdGgnID8gTUFUSF9NTF9OQU1FU1BBQ0UgOiBudWxsO1xuICByZXR1cm4gY3JlYXRlRWxlbWVudE5vZGUocmVuZGVyZXIsIHRhZ05hbWUsIG5hbWVzcGFjZSk7XG59XG5mdW5jdGlvbiBpbmZlclRhZ05hbWVGcm9tRGVmaW5pdGlvbihjb21wb25lbnREZWYpIHtcbiAgcmV0dXJuIChjb21wb25lbnREZWYuc2VsZWN0b3JzWzBdWzBdIHx8ICdkaXYnKS50b0xvd2VyQ2FzZSgpO1xufVxuY2xhc3MgQ29tcG9uZW50RmFjdG9yeSBleHRlbmRzIENvbXBvbmVudEZhY3RvcnkkMSB7XG4gIGNvbXBvbmVudERlZjtcbiAgbmdNb2R1bGU7XG4gIHNlbGVjdG9yO1xuICBjb21wb25lbnRUeXBlO1xuICBuZ0NvbnRlbnRTZWxlY3RvcnM7XG4gIGlzQm91bmRUb01vZHVsZTtcbiAgY2FjaGVkSW5wdXRzID0gbnVsbDtcbiAgY2FjaGVkT3V0cHV0cyA9IG51bGw7XG4gIGdldCBpbnB1dHMoKSB7XG4gICAgdGhpcy5jYWNoZWRJbnB1dHMgPz89IHRvSW5wdXRSZWZBcnJheSh0aGlzLmNvbXBvbmVudERlZi5pbnB1dHMpO1xuICAgIHJldHVybiB0aGlzLmNhY2hlZElucHV0cztcbiAgfVxuICBnZXQgb3V0cHV0cygpIHtcbiAgICB0aGlzLmNhY2hlZE91dHB1dHMgPz89IHRvT3V0cHV0UmVmQXJyYXkodGhpcy5jb21wb25lbnREZWYub3V0cHV0cyk7XG4gICAgcmV0dXJuIHRoaXMuY2FjaGVkT3V0cHV0cztcbiAgfVxuICBjb25zdHJ1Y3Rvcihjb21wb25lbnREZWYsIG5nTW9kdWxlKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmNvbXBvbmVudERlZiA9IGNvbXBvbmVudERlZjtcbiAgICB0aGlzLm5nTW9kdWxlID0gbmdNb2R1bGU7XG4gICAgdGhpcy5jb21wb25lbnRUeXBlID0gY29tcG9uZW50RGVmLnR5cGU7XG4gICAgdGhpcy5zZWxlY3RvciA9IHN0cmluZ2lmeUNTU1NlbGVjdG9yTGlzdChjb21wb25lbnREZWYuc2VsZWN0b3JzKTtcbiAgICB0aGlzLm5nQ29udGVudFNlbGVjdG9ycyA9IGNvbXBvbmVudERlZi5uZ0NvbnRlbnRTZWxlY3RvcnMgPz8gW107XG4gICAgdGhpcy5pc0JvdW5kVG9Nb2R1bGUgPSAhIW5nTW9kdWxlO1xuICB9XG4gIGNyZWF0ZShpbmplY3RvciwgcHJvamVjdGFibGVOb2Rlcywgcm9vdFNlbGVjdG9yT3JOb2RlLCBlbnZpcm9ubWVudEluamVjdG9yLCBkaXJlY3RpdmVzLCBjb21wb25lbnRCaW5kaW5ncykge1xuICAgIHByb2ZpbGVyKFByb2ZpbGVyRXZlbnQuRHluYW1pY0NvbXBvbmVudFN0YXJ0KTtcbiAgICBjb25zdCBwcmV2Q29uc3VtZXIgPSBzZXRBY3RpdmVDb25zdW1lcihudWxsKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgY21wRGVmID0gdGhpcy5jb21wb25lbnREZWY7XG4gICAgICBuZ0Rldk1vZGUgJiYgdmVyaWZ5Tm90QW5PcnBoYW5Db21wb25lbnQoY21wRGVmKTtcbiAgICAgIGNvbnN0IHJvb3RWaWV3SW5qZWN0b3IgPSBjcmVhdGVSb290Vmlld0luamVjdG9yKGNtcERlZiwgZW52aXJvbm1lbnRJbmplY3RvciB8fCB0aGlzLm5nTW9kdWxlLCBpbmplY3Rvcik7XG4gICAgICBjb25zdCBlbnZpcm9ubWVudCA9IGNyZWF0ZVJvb3RMVmlld0Vudmlyb25tZW50KHJvb3RWaWV3SW5qZWN0b3IpO1xuICAgICAgY29uc3QgdHJhY2luZ1NlcnZpY2UgPSBlbnZpcm9ubWVudC50cmFjaW5nU2VydmljZTtcbiAgICAgIGlmICh0cmFjaW5nU2VydmljZSAmJiB0cmFjaW5nU2VydmljZS5jb21wb25lbnRDcmVhdGUpIHtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdTZXJ2aWNlLmNvbXBvbmVudENyZWF0ZShnZXRDb21wb25lbnROYW1lKGNtcERlZiksICgpID0+IHRoaXMuY3JlYXRlQ29tcG9uZW50UmVmKGVudmlyb25tZW50LCByb290Vmlld0luamVjdG9yLCBwcm9qZWN0YWJsZU5vZGVzLCByb290U2VsZWN0b3JPck5vZGUsIGRpcmVjdGl2ZXMsIGNvbXBvbmVudEJpbmRpbmdzKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVDb21wb25lbnRSZWYoZW52aXJvbm1lbnQsIHJvb3RWaWV3SW5qZWN0b3IsIHByb2plY3RhYmxlTm9kZXMsIHJvb3RTZWxlY3Rvck9yTm9kZSwgZGlyZWN0aXZlcywgY29tcG9uZW50QmluZGluZ3MpO1xuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICBzZXRBY3RpdmVDb25zdW1lcihwcmV2Q29uc3VtZXIpO1xuICAgIH1cbiAgfVxuICBjcmVhdGVDb21wb25lbnRSZWYoZW52aXJvbm1lbnQsIHJvb3RWaWV3SW5qZWN0b3IsIHByb2plY3RhYmxlTm9kZXMsIHJvb3RTZWxlY3Rvck9yTm9kZSwgZGlyZWN0aXZlcywgY29tcG9uZW50QmluZGluZ3MpIHtcbiAgICBjb25zdCBjbXBEZWYgPSB0aGlzLmNvbXBvbmVudERlZjtcbiAgICBjb25zdCByb290VFZpZXcgPSBjcmVhdGVSb290VFZpZXcocm9vdFNlbGVjdG9yT3JOb2RlLCBjbXBEZWYsIGNvbXBvbmVudEJpbmRpbmdzLCBkaXJlY3RpdmVzKTtcbiAgICBjb25zdCBob3N0UmVuZGVyZXIgPSBlbnZpcm9ubWVudC5yZW5kZXJlckZhY3RvcnkuY3JlYXRlUmVuZGVyZXIobnVsbCwgY21wRGVmKTtcbiAgICBjb25zdCBob3N0RWxlbWVudCA9IHJvb3RTZWxlY3Rvck9yTm9kZSA/IGxvY2F0ZUhvc3RFbGVtZW50KGhvc3RSZW5kZXJlciwgcm9vdFNlbGVjdG9yT3JOb2RlLCBjbXBEZWYuZW5jYXBzdWxhdGlvbiwgcm9vdFZpZXdJbmplY3RvcikgOiBjcmVhdGVIb3N0RWxlbWVudChjbXBEZWYsIGhvc3RSZW5kZXJlcik7XG4gICAgY29uc3QgaGFzSW5wdXRCaW5kaW5ncyA9IGNvbXBvbmVudEJpbmRpbmdzPy5zb21lKGlzSW5wdXRCaW5kaW5nKSB8fCBkaXJlY3RpdmVzPy5zb21lKGQgPT4gdHlwZW9mIGQgIT09ICdmdW5jdGlvbicgJiYgZC5iaW5kaW5ncy5zb21lKGlzSW5wdXRCaW5kaW5nKSk7XG4gICAgY29uc3Qgcm9vdExWaWV3ID0gY3JlYXRlTFZpZXcobnVsbCwgcm9vdFRWaWV3LCBudWxsLCA1MTIgfCBnZXRJbml0aWFsTFZpZXdGbGFnc0Zyb21EZWYoY21wRGVmKSwgbnVsbCwgbnVsbCwgZW52aXJvbm1lbnQsIGhvc3RSZW5kZXJlciwgcm9vdFZpZXdJbmplY3RvciwgbnVsbCwgcmV0cmlldmVIeWRyYXRpb25JbmZvKGhvc3RFbGVtZW50LCByb290Vmlld0luamVjdG9yLCB0cnVlKSk7XG4gICAgcm9vdExWaWV3W0hFQURFUl9PRkZTRVRdID0gaG9zdEVsZW1lbnQ7XG4gICAgZW50ZXJWaWV3KHJvb3RMVmlldyk7XG4gICAgbGV0IGNvbXBvbmVudFZpZXcgPSBudWxsO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBob3N0VE5vZGUgPSBkaXJlY3RpdmVIb3N0Rmlyc3RDcmVhdGVQYXNzKEhFQURFUl9PRkZTRVQsIHJvb3RMVmlldywgMiwgJyNob3N0JywgKCkgPT4gcm9vdFRWaWV3LmRpcmVjdGl2ZVJlZ2lzdHJ5LCB0cnVlLCAwKTtcbiAgICAgIHNldHVwU3RhdGljQXR0cmlidXRlcyhob3N0UmVuZGVyZXIsIGhvc3RFbGVtZW50LCBob3N0VE5vZGUpO1xuICAgICAgYXR0YWNoUGF0Y2hEYXRhKGhvc3RFbGVtZW50LCByb290TFZpZXcpO1xuICAgICAgY3JlYXRlRGlyZWN0aXZlc0luc3RhbmNlcyhyb290VFZpZXcsIHJvb3RMVmlldywgaG9zdFROb2RlKTtcbiAgICAgIGV4ZWN1dGVDb250ZW50UXVlcmllcyhyb290VFZpZXcsIGhvc3RUTm9kZSwgcm9vdExWaWV3KTtcbiAgICAgIGRpcmVjdGl2ZUhvc3RFbmRGaXJzdENyZWF0ZVBhc3Mocm9vdFRWaWV3LCBob3N0VE5vZGUpO1xuICAgICAgaWYgKHByb2plY3RhYmxlTm9kZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBwcm9qZWN0Tm9kZXMoaG9zdFROb2RlLCB0aGlzLm5nQ29udGVudFNlbGVjdG9ycywgcHJvamVjdGFibGVOb2Rlcyk7XG4gICAgICB9XG4gICAgICBjb21wb25lbnRWaWV3ID0gZ2V0Q29tcG9uZW50TFZpZXdCeUluZGV4KGhvc3RUTm9kZS5pbmRleCwgcm9vdExWaWV3KTtcbiAgICAgIHJvb3RMVmlld1tDT05URVhUXSA9IGNvbXBvbmVudFZpZXdbQ09OVEVYVF07XG4gICAgICByZW5kZXJWaWV3KHJvb3RUVmlldywgcm9vdExWaWV3LCBudWxsKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAoY29tcG9uZW50VmlldyAhPT0gbnVsbCkge1xuICAgICAgICB1bnJlZ2lzdGVyTFZpZXcoY29tcG9uZW50Vmlldyk7XG4gICAgICB9XG4gICAgICB1bnJlZ2lzdGVyTFZpZXcocm9vdExWaWV3KTtcbiAgICAgIHRocm93IGU7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHByb2ZpbGVyKFByb2ZpbGVyRXZlbnQuRHluYW1pY0NvbXBvbmVudEVuZCk7XG4gICAgICBsZWF2ZVZpZXcoKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBDb21wb25lbnRSZWYodGhpcy5jb21wb25lbnRUeXBlLCByb290TFZpZXcsICEhaGFzSW5wdXRCaW5kaW5ncyk7XG4gIH1cbn1cbmZ1bmN0aW9uIGNyZWF0ZVJvb3RUVmlldyhyb290U2VsZWN0b3JPck5vZGUsIGNvbXBvbmVudERlZiwgY29tcG9uZW50QmluZGluZ3MsIGRpcmVjdGl2ZXMpIHtcbiAgY29uc3QgdEF0dHJpYnV0ZXMgPSByb290U2VsZWN0b3JPck5vZGUgPyBbJ25nLXZlcnNpb24nLCAnMjEuMi40J10gOiBleHRyYWN0QXR0cnNBbmRDbGFzc2VzRnJvbVNlbGVjdG9yKGNvbXBvbmVudERlZi5zZWxlY3RvcnNbMF0pO1xuICBsZXQgY3JlYXRpb25CaW5kaW5ncyA9IG51bGw7XG4gIGxldCB1cGRhdGVCaW5kaW5ncyA9IG51bGw7XG4gIGxldCB2YXJzVG9BbGxvY2F0ZSA9IDA7XG4gIGlmIChjb21wb25lbnRCaW5kaW5ncykge1xuICAgIGZvciAoY29uc3QgYmluZGluZyBvZiBjb21wb25lbnRCaW5kaW5ncykge1xuICAgICAgdmFyc1RvQWxsb2NhdGUgKz0gYmluZGluZ1tCSU5ESU5HXS5yZXF1aXJlZFZhcnM7XG4gICAgICBpZiAoYmluZGluZy5jcmVhdGUpIHtcbiAgICAgICAgYmluZGluZy50YXJnZXRJZHggPSAwO1xuICAgICAgICAoY3JlYXRpb25CaW5kaW5ncyA/Pz0gW10pLnB1c2goYmluZGluZyk7XG4gICAgICB9XG4gICAgICBpZiAoYmluZGluZy51cGRhdGUpIHtcbiAgICAgICAgYmluZGluZy50YXJnZXRJZHggPSAwO1xuICAgICAgICAodXBkYXRlQmluZGluZ3MgPz89IFtdKS5wdXNoKGJpbmRpbmcpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAoZGlyZWN0aXZlcykge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGlyZWN0aXZlcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgZGlyZWN0aXZlID0gZGlyZWN0aXZlc1tpXTtcbiAgICAgIGlmICh0eXBlb2YgZGlyZWN0aXZlICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGZvciAoY29uc3QgYmluZGluZyBvZiBkaXJlY3RpdmUuYmluZGluZ3MpIHtcbiAgICAgICAgICB2YXJzVG9BbGxvY2F0ZSArPSBiaW5kaW5nW0JJTkRJTkddLnJlcXVpcmVkVmFycztcbiAgICAgICAgICBjb25zdCB0YXJnZXREaXJlY3RpdmVJZHggPSBpICsgMTtcbiAgICAgICAgICBpZiAoYmluZGluZy5jcmVhdGUpIHtcbiAgICAgICAgICAgIGJpbmRpbmcudGFyZ2V0SWR4ID0gdGFyZ2V0RGlyZWN0aXZlSWR4O1xuICAgICAgICAgICAgKGNyZWF0aW9uQmluZGluZ3MgPz89IFtdKS5wdXNoKGJpbmRpbmcpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoYmluZGluZy51cGRhdGUpIHtcbiAgICAgICAgICAgIGJpbmRpbmcudGFyZ2V0SWR4ID0gdGFyZ2V0RGlyZWN0aXZlSWR4O1xuICAgICAgICAgICAgKHVwZGF0ZUJpbmRpbmdzID8/PSBbXSkucHVzaChiaW5kaW5nKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgY29uc3QgZGlyZWN0aXZlc1RvQXBwbHkgPSBbY29tcG9uZW50RGVmXTtcbiAgaWYgKGRpcmVjdGl2ZXMpIHtcbiAgICBmb3IgKGNvbnN0IGRpcmVjdGl2ZSBvZiBkaXJlY3RpdmVzKSB7XG4gICAgICBjb25zdCBkaXJlY3RpdmVUeXBlID0gdHlwZW9mIGRpcmVjdGl2ZSA9PT0gJ2Z1bmN0aW9uJyA/IGRpcmVjdGl2ZSA6IGRpcmVjdGl2ZS50eXBlO1xuICAgICAgY29uc3QgZGlyZWN0aXZlRGVmID0gbmdEZXZNb2RlID8gZ2V0RGlyZWN0aXZlRGVmT3JUaHJvdyhkaXJlY3RpdmVUeXBlKSA6IGdldERpcmVjdGl2ZURlZihkaXJlY3RpdmVUeXBlKTtcbiAgICAgIGlmIChuZ0Rldk1vZGUgJiYgIWRpcmVjdGl2ZURlZi5zdGFuZGFsb25lKSB7XG4gICAgICAgIHRocm93IG5ldyBSdW50aW1lRXJyb3IoOTA3LCBgVGhlICR7c3RyaW5naWZ5Rm9yRXJyb3IoZGlyZWN0aXZlVHlwZSl9IGRpcmVjdGl2ZSBtdXN0IGJlIHN0YW5kYWxvbmUgaW4gYCArIGBvcmRlciB0byBiZSBhcHBsaWVkIHRvIGEgZHluYW1pY2FsbHktY3JlYXRlZCBjb21wb25lbnQuYCk7XG4gICAgICB9XG4gICAgICBkaXJlY3RpdmVzVG9BcHBseS5wdXNoKGRpcmVjdGl2ZURlZik7XG4gICAgfVxuICB9XG4gIGNvbnN0IHJvb3RUVmlldyA9IGNyZWF0ZVRWaWV3KDAsIG51bGwsIGdldFJvb3RUVmlld1RlbXBsYXRlKGNyZWF0aW9uQmluZGluZ3MsIHVwZGF0ZUJpbmRpbmdzKSwgMSwgdmFyc1RvQWxsb2NhdGUsIGRpcmVjdGl2ZXNUb0FwcGx5LCBudWxsLCBudWxsLCBudWxsLCBbdEF0dHJpYnV0ZXNdLCBudWxsKTtcbiAgcmV0dXJuIHJvb3RUVmlldztcbn1cbmZ1bmN0aW9uIGdldFJvb3RUVmlld1RlbXBsYXRlKGNyZWF0aW9uQmluZGluZ3MsIHVwZGF0ZUJpbmRpbmdzKSB7XG4gIGlmICghY3JlYXRpb25CaW5kaW5ncyAmJiAhdXBkYXRlQmluZGluZ3MpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4gZmxhZ3MgPT4ge1xuICAgIGlmIChmbGFncyAmIDEgJiYgY3JlYXRpb25CaW5kaW5ncykge1xuICAgICAgZm9yIChjb25zdCBiaW5kaW5nIG9mIGNyZWF0aW9uQmluZGluZ3MpIHtcbiAgICAgICAgYmluZGluZy5jcmVhdGUoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGZsYWdzICYgMiAmJiB1cGRhdGVCaW5kaW5ncykge1xuICAgICAgZm9yIChjb25zdCBiaW5kaW5nIG9mIHVwZGF0ZUJpbmRpbmdzKSB7XG4gICAgICAgIGJpbmRpbmcudXBkYXRlKCk7XG4gICAgICB9XG4gICAgfVxuICB9O1xufVxuZnVuY3Rpb24gaXNJbnB1dEJpbmRpbmcoYmluZGluZykge1xuICBjb25zdCBraW5kID0gYmluZGluZ1tCSU5ESU5HXS5raW5kO1xuICByZXR1cm4ga2luZCA9PT0gJ2lucHV0JyB8fCBraW5kID09PSAndHdvV2F5Jztcbn1cbmNsYXNzIENvbXBvbmVudFJlZiBleHRlbmRzIENvbXBvbmVudFJlZiQxIHtcbiAgX3Jvb3RMVmlldztcbiAgX2hhc0lucHV0QmluZGluZ3M7XG4gIGluc3RhbmNlO1xuICBob3N0VmlldztcbiAgY2hhbmdlRGV0ZWN0b3JSZWY7XG4gIGNvbXBvbmVudFR5cGU7XG4gIGxvY2F0aW9uO1xuICBwcmV2aW91c0lucHV0VmFsdWVzID0gbnVsbDtcbiAgX3ROb2RlO1xuICBjb25zdHJ1Y3Rvcihjb21wb25lbnRUeXBlLCBfcm9vdExWaWV3LCBfaGFzSW5wdXRCaW5kaW5ncykge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5fcm9vdExWaWV3ID0gX3Jvb3RMVmlldztcbiAgICB0aGlzLl9oYXNJbnB1dEJpbmRpbmdzID0gX2hhc0lucHV0QmluZGluZ3M7XG4gICAgdGhpcy5fdE5vZGUgPSBnZXRUTm9kZShfcm9vdExWaWV3W1RWSUVXXSwgSEVBREVSX09GRlNFVCk7XG4gICAgdGhpcy5sb2NhdGlvbiA9IGNyZWF0ZUVsZW1lbnRSZWYodGhpcy5fdE5vZGUsIF9yb290TFZpZXcpO1xuICAgIHRoaXMuaW5zdGFuY2UgPSBnZXRDb21wb25lbnRMVmlld0J5SW5kZXgodGhpcy5fdE5vZGUuaW5kZXgsIF9yb290TFZpZXcpW0NPTlRFWFRdO1xuICAgIHRoaXMuaG9zdFZpZXcgPSB0aGlzLmNoYW5nZURldGVjdG9yUmVmID0gbmV3IFZpZXdSZWYoX3Jvb3RMVmlldywgdW5kZWZpbmVkKTtcbiAgICB0aGlzLmNvbXBvbmVudFR5cGUgPSBjb21wb25lbnRUeXBlO1xuICB9XG4gIHNldElucHV0KG5hbWUsIHZhbHVlKSB7XG4gICAgaWYgKHRoaXMuX2hhc0lucHV0QmluZGluZ3MgJiYgbmdEZXZNb2RlKSB7XG4gICAgICB0aHJvdyBuZXcgUnVudGltZUVycm9yKDMxNywgJ0Nhbm5vdCBjYWxsIGBzZXRJbnB1dGAgb24gYSBjb21wb25lbnQgdGhhdCBpcyB1c2luZyB0aGUgYGlucHV0QmluZGluZ2Agb3IgYHR3b1dheUJpbmRpbmdgIGZ1bmN0aW9ucy4nKTtcbiAgICB9XG4gICAgY29uc3QgdE5vZGUgPSB0aGlzLl90Tm9kZTtcbiAgICB0aGlzLnByZXZpb3VzSW5wdXRWYWx1ZXMgPz89IG5ldyBNYXAoKTtcbiAgICBpZiAodGhpcy5wcmV2aW91c0lucHV0VmFsdWVzLmhhcyhuYW1lKSAmJiBPYmplY3QuaXModGhpcy5wcmV2aW91c0lucHV0VmFsdWVzLmdldChuYW1lKSwgdmFsdWUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGxWaWV3ID0gdGhpcy5fcm9vdExWaWV3O1xuICAgIGNvbnN0IGhhc1NldElucHV0ID0gc2V0QWxsSW5wdXRzRm9yUHJvcGVydHkodE5vZGUsIGxWaWV3W1RWSUVXXSwgbFZpZXcsIG5hbWUsIHZhbHVlKTtcbiAgICB0aGlzLnByZXZpb3VzSW5wdXRWYWx1ZXMuc2V0KG5hbWUsIHZhbHVlKTtcbiAgICBjb25zdCBjaGlsZENvbXBvbmVudExWaWV3ID0gZ2V0Q29tcG9uZW50TFZpZXdCeUluZGV4KHROb2RlLmluZGV4LCBsVmlldyk7XG4gICAgbWFya1ZpZXdEaXJ0eShjaGlsZENvbXBvbmVudExWaWV3LCAxKTtcbiAgICBpZiAobmdEZXZNb2RlICYmICFoYXNTZXRJbnB1dCkge1xuICAgICAgY29uc3QgY21wTmFtZUZvckVycm9yID0gc3RyaW5naWZ5Rm9yRXJyb3IodGhpcy5jb21wb25lbnRUeXBlKTtcbiAgICAgIGxldCBtZXNzYWdlID0gYENhbid0IHNldCB2YWx1ZSBvZiB0aGUgJyR7bmFtZX0nIGlucHV0IG9uIHRoZSAnJHtjbXBOYW1lRm9yRXJyb3J9JyBjb21wb25lbnQuIGA7XG4gICAgICBtZXNzYWdlICs9IGBNYWtlIHN1cmUgdGhhdCB0aGUgJyR7bmFtZX0nIHByb3BlcnR5IGlzIGRlY2xhcmVkIGFzIGFuIGlucHV0IHVzaW5nIHRoZSBpbnB1dCgpIG9yIG1vZGVsKCkgZnVuY3Rpb24gb3IgdGhlIEBJbnB1dCgpIGRlY29yYXRvci5gO1xuICAgICAgcmVwb3J0VW5rbm93blByb3BlcnR5RXJyb3IobWVzc2FnZSk7XG4gICAgfVxuICB9XG4gIGdldCBpbmplY3RvcigpIHtcbiAgICByZXR1cm4gbmV3IE5vZGVJbmplY3Rvcih0aGlzLl90Tm9kZSwgdGhpcy5fcm9vdExWaWV3KTtcbiAgfVxuICBkZXN0cm95KCkge1xuICAgIHRoaXMuaG9zdFZpZXcuZGVzdHJveSgpO1xuICB9XG4gIG9uRGVzdHJveShjYWxsYmFjaykge1xuICAgIHRoaXMuaG9zdFZpZXcub25EZXN0cm95KGNhbGxiYWNrKTtcbiAgfVxufVxuZnVuY3Rpb24gcHJvamVjdE5vZGVzKHROb2RlLCBuZ0NvbnRlbnRTZWxlY3RvcnMsIHByb2plY3RhYmxlTm9kZXMpIHtcbiAgY29uc3QgcHJvamVjdGlvbiA9IHROb2RlLnByb2plY3Rpb24gPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBuZ0NvbnRlbnRTZWxlY3RvcnMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBub2Rlc2ZvclNsb3QgPSBwcm9qZWN0YWJsZU5vZGVzW2ldO1xuICAgIHByb2plY3Rpb24ucHVzaChub2Rlc2ZvclNsb3QgIT0gbnVsbCAmJiBub2Rlc2ZvclNsb3QubGVuZ3RoID8gQXJyYXkuZnJvbShub2Rlc2ZvclNsb3QpIDogbnVsbCk7XG4gIH1cbn1cbmxldCBWaWV3Q29udGFpbmVyUmVmID0gLyojX19QVVJFX18qLygoKSA9PiB7XG4gIGNsYXNzIFZpZXdDb250YWluZXJSZWYge1xuICAgIHN0YXRpYyBfX05HX0VMRU1FTlRfSURfXyA9IGluamVjdFZpZXdDb250YWluZXJSZWY7XG4gIH1cbiAgcmV0dXJuIFZpZXdDb250YWluZXJSZWY7XG59KSgpO1xuZnVuY3Rpb24gaW5qZWN0Vmlld0NvbnRhaW5lclJlZigpIHtcbiAgY29uc3QgcHJldmlvdXNUTm9kZSA9IGdldEN1cnJlbnRUTm9kZSgpO1xuICByZXR1cm4gY3JlYXRlQ29udGFpbmVyUmVmKHByZXZpb3VzVE5vZGUsIGdldExWaWV3KCkpO1xufVxuY2xhc3MgUjNWaWV3Q29udGFpbmVyUmVmIGV4dGVuZHMgVmlld0NvbnRhaW5lclJlZiB7XG4gIF9sQ29udGFpbmVyO1xuICBfaG9zdFROb2RlO1xuICBfaG9zdExWaWV3O1xuICBjb25zdHJ1Y3RvcihfbENvbnRhaW5lciwgX2hvc3RUTm9kZSwgX2hvc3RMVmlldykge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5fbENvbnRhaW5lciA9IF9sQ29udGFpbmVyO1xuICAgIHRoaXMuX2hvc3RUTm9kZSA9IF9ob3N0VE5vZGU7XG4gICAgdGhpcy5faG9zdExWaWV3ID0gX2hvc3RMVmlldztcbiAgfVxuICBnZXQgZWxlbWVudCgpIHtcbiAgICByZXR1cm4gY3JlYXRlRWxlbWVudFJlZih0aGlzLl9ob3N0VE5vZGUsIHRoaXMuX2hvc3RMVmlldyk7XG4gIH1cbiAgZ2V0IGluamVjdG9yKCkge1xuICAgIHJldHVybiBuZXcgTm9kZUluamVjdG9yKHRoaXMuX2hvc3RUTm9kZSwgdGhpcy5faG9zdExWaWV3KTtcbiAgfVxuICBnZXQgcGFyZW50SW5qZWN0b3IoKSB7XG4gICAgY29uc3QgcGFyZW50TG9jYXRpb24gPSBnZXRQYXJlbnRJbmplY3RvckxvY2F0aW9uKHRoaXMuX2hvc3RUTm9kZSwgdGhpcy5faG9zdExWaWV3KTtcbiAgICBpZiAoaGFzUGFyZW50SW5qZWN0b3IocGFyZW50TG9jYXRpb24pKSB7XG4gICAgICBjb25zdCBwYXJlbnRWaWV3ID0gZ2V0UGFyZW50SW5qZWN0b3JWaWV3KHBhcmVudExvY2F0aW9uLCB0aGlzLl9ob3N0TFZpZXcpO1xuICAgICAgY29uc3QgaW5qZWN0b3JJbmRleCA9IGdldFBhcmVudEluamVjdG9ySW5kZXgocGFyZW50TG9jYXRpb24pO1xuICAgICAgbmdEZXZNb2RlICYmIGFzc2VydE5vZGVJbmplY3RvcihwYXJlbnRWaWV3LCBpbmplY3RvckluZGV4KTtcbiAgICAgIGNvbnN0IHBhcmVudFROb2RlID0gcGFyZW50Vmlld1tUVklFV10uZGF0YVtpbmplY3RvckluZGV4ICsgOF07XG4gICAgICByZXR1cm4gbmV3IE5vZGVJbmplY3RvcihwYXJlbnRUTm9kZSwgcGFyZW50Vmlldyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBuZXcgTm9kZUluamVjdG9yKG51bGwsIHRoaXMuX2hvc3RMVmlldyk7XG4gICAgfVxuICB9XG4gIGNsZWFyKCkge1xuICAgIHdoaWxlICh0aGlzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMucmVtb3ZlKHRoaXMubGVuZ3RoIC0gMSk7XG4gICAgfVxuICB9XG4gIGdldChpbmRleCkge1xuICAgIGNvbnN0IHZpZXdSZWZzID0gZ2V0Vmlld1JlZnModGhpcy5fbENvbnRhaW5lcik7XG4gICAgcmV0dXJuIHZpZXdSZWZzICE9PSBudWxsICYmIHZpZXdSZWZzW2luZGV4XSB8fCBudWxsO1xuICB9XG4gIGdldCBsZW5ndGgoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2xDb250YWluZXIubGVuZ3RoIC0gQ09OVEFJTkVSX0hFQURFUl9PRkZTRVQ7XG4gIH1cbiAgY3JlYXRlRW1iZWRkZWRWaWV3KHRlbXBsYXRlUmVmLCBjb250ZXh0LCBpbmRleE9yT3B0aW9ucykge1xuICAgIGxldCBpbmRleDtcbiAgICBsZXQgaW5qZWN0b3I7XG4gICAgaWYgKHR5cGVvZiBpbmRleE9yT3B0aW9ucyA9PT0gJ251bWJlcicpIHtcbiAgICAgIGluZGV4ID0gaW5kZXhPck9wdGlvbnM7XG4gICAgfSBlbHNlIGlmIChpbmRleE9yT3B0aW9ucyAhPSBudWxsKSB7XG4gICAgICBpbmRleCA9IGluZGV4T3JPcHRpb25zLmluZGV4O1xuICAgICAgaW5qZWN0b3IgPSBpbmRleE9yT3B0aW9ucy5pbmplY3RvcjtcbiAgICB9XG4gICAgY29uc3QgZGVoeWRyYXRlZFZpZXcgPSBmaW5kTWF0Y2hpbmdEZWh5ZHJhdGVkVmlldyh0aGlzLl9sQ29udGFpbmVyLCB0ZW1wbGF0ZVJlZi5zc3JJZCk7XG4gICAgY29uc3Qgdmlld1JlZiA9IHRlbXBsYXRlUmVmLmNyZWF0ZUVtYmVkZGVkVmlld0ltcGwoY29udGV4dCB8fCB7fSwgaW5qZWN0b3IsIGRlaHlkcmF0ZWRWaWV3KTtcbiAgICB0aGlzLmluc2VydEltcGwodmlld1JlZiwgaW5kZXgsIHNob3VsZEFkZFZpZXdUb0RvbSh0aGlzLl9ob3N0VE5vZGUsIGRlaHlkcmF0ZWRWaWV3KSk7XG4gICAgcmV0dXJuIHZpZXdSZWY7XG4gIH1cbiAgY3JlYXRlQ29tcG9uZW50KGNvbXBvbmVudEZhY3RvcnlPclR5cGUsIGluZGV4T3JPcHRpb25zLCBpbmplY3RvciwgcHJvamVjdGFibGVOb2RlcywgZW52aXJvbm1lbnRJbmplY3RvciwgZGlyZWN0aXZlcywgYmluZGluZ3MpIHtcbiAgICBjb25zdCBpc0NvbXBvbmVudEZhY3RvcnkgPSBjb21wb25lbnRGYWN0b3J5T3JUeXBlICYmICFpc1R5cGUoY29tcG9uZW50RmFjdG9yeU9yVHlwZSk7XG4gICAgbGV0IGluZGV4O1xuICAgIGlmIChpc0NvbXBvbmVudEZhY3RvcnkpIHtcbiAgICAgIGlmIChuZ0Rldk1vZGUpIHtcbiAgICAgICAgYXNzZXJ0RXF1YWwodHlwZW9mIGluZGV4T3JPcHRpb25zICE9PSAnb2JqZWN0JywgdHJ1ZSwgJ0l0IGxvb2tzIGxpa2UgQ29tcG9uZW50IGZhY3Rvcnkgd2FzIHByb3ZpZGVkIGFzIHRoZSBmaXJzdCBhcmd1bWVudCAnICsgJ2FuZCBhbiBvcHRpb25zIG9iamVjdCBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50LiBUaGlzIGNvbWJpbmF0aW9uIG9mIGFyZ3VtZW50cyAnICsgJ2lzIGluY29tcGF0aWJsZS4gWW91IGNhbiBlaXRoZXIgY2hhbmdlIHRoZSBmaXJzdCBhcmd1bWVudCB0byBwcm92aWRlIENvbXBvbmVudCAnICsgJ3R5cGUgb3IgY2hhbmdlIHRoZSBzZWNvbmQgYXJndW1lbnQgdG8gYmUgYSBudW1iZXIgKHJlcHJlc2VudGluZyBhbiBpbmRleCBhdCAnICsgXCJ3aGljaCB0byBpbnNlcnQgdGhlIG5ldyBjb21wb25lbnQncyBob3N0IHZpZXcgaW50byB0aGlzIGNvbnRhaW5lcilcIik7XG4gICAgICB9XG4gICAgICBpbmRleCA9IGluZGV4T3JPcHRpb25zO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAobmdEZXZNb2RlKSB7XG4gICAgICAgIGFzc2VydERlZmluZWQoZ2V0Q29tcG9uZW50RGVmKGNvbXBvbmVudEZhY3RvcnlPclR5cGUpLCBgUHJvdmlkZWQgQ29tcG9uZW50IGNsYXNzIGRvZXNuJ3QgY29udGFpbiBDb21wb25lbnQgZGVmaW5pdGlvbi4gYCArIGBQbGVhc2UgY2hlY2sgd2hldGhlciBwcm92aWRlZCBjbGFzcyBoYXMgQENvbXBvbmVudCBkZWNvcmF0b3IuYCk7XG4gICAgICAgIGFzc2VydEVxdWFsKHR5cGVvZiBpbmRleE9yT3B0aW9ucyAhPT0gJ251bWJlcicsIHRydWUsICdJdCBsb29rcyBsaWtlIENvbXBvbmVudCB0eXBlIHdhcyBwcm92aWRlZCBhcyB0aGUgZmlyc3QgYXJndW1lbnQgJyArIFwiYW5kIGEgbnVtYmVyIChyZXByZXNlbnRpbmcgYW4gaW5kZXggYXQgd2hpY2ggdG8gaW5zZXJ0IHRoZSBuZXcgY29tcG9uZW50J3MgXCIgKyAnaG9zdCB2aWV3IGludG8gdGhpcyBjb250YWluZXIgYXMgdGhlIHNlY29uZCBhcmd1bWVudC4gVGhpcyBjb21iaW5hdGlvbiBvZiBhcmd1bWVudHMgJyArICdpcyBpbmNvbXBhdGlibGUuIFBsZWFzZSB1c2UgYW4gb2JqZWN0IGFzIHRoZSBzZWNvbmQgYXJndW1lbnQgaW5zdGVhZC4nKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG9wdGlvbnMgPSBpbmRleE9yT3B0aW9ucyB8fCB7fTtcbiAgICAgIGlmIChuZ0Rldk1vZGUgJiYgb3B0aW9ucy5lbnZpcm9ubWVudEluamVjdG9yICYmIG9wdGlvbnMubmdNb2R1bGVSZWYpIHtcbiAgICAgICAgdGhyb3dFcnJvcihgQ2Fubm90IHBhc3MgYm90aCBlbnZpcm9ubWVudEluamVjdG9yIGFuZCBuZ01vZHVsZVJlZiBvcHRpb25zIHRvIGNyZWF0ZUNvbXBvbmVudCgpLmApO1xuICAgICAgfVxuICAgICAgaW5kZXggPSBvcHRpb25zLmluZGV4O1xuICAgICAgaW5qZWN0b3IgPSBvcHRpb25zLmluamVjdG9yO1xuICAgICAgcHJvamVjdGFibGVOb2RlcyA9IG9wdGlvbnMucHJvamVjdGFibGVOb2RlcztcbiAgICAgIGVudmlyb25tZW50SW5qZWN0b3IgPSBvcHRpb25zLmVudmlyb25tZW50SW5qZWN0b3IgfHwgb3B0aW9ucy5uZ01vZHVsZVJlZjtcbiAgICAgIGRpcmVjdGl2ZXMgPSBvcHRpb25zLmRpcmVjdGl2ZXM7XG4gICAgICBiaW5kaW5ncyA9IG9wdGlvbnMuYmluZGluZ3M7XG4gICAgfVxuICAgIGNvbnN0IGNvbXBvbmVudEZhY3RvcnkgPSBpc0NvbXBvbmVudEZhY3RvcnkgPyBjb21wb25lbnRGYWN0b3J5T3JUeXBlIDogbmV3IENvbXBvbmVudEZhY3RvcnkoZ2V0Q29tcG9uZW50RGVmKGNvbXBvbmVudEZhY3RvcnlPclR5cGUpKTtcbiAgICBjb25zdCBjb250ZXh0SW5qZWN0b3IgPSBpbmplY3RvciB8fCB0aGlzLnBhcmVudEluamVjdG9yO1xuICAgIGlmICghZW52aXJvbm1lbnRJbmplY3RvciAmJiBjb21wb25lbnRGYWN0b3J5Lm5nTW9kdWxlID09IG51bGwpIHtcbiAgICAgIGNvbnN0IF9pbmplY3RvciA9IGlzQ29tcG9uZW50RmFjdG9yeSA/IGNvbnRleHRJbmplY3RvciA6IHRoaXMucGFyZW50SW5qZWN0b3I7XG4gICAgICBjb25zdCByZXN1bHQgPSBfaW5qZWN0b3IuZ2V0KEVudmlyb25tZW50SW5qZWN0b3IsIG51bGwpO1xuICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICBlbnZpcm9ubWVudEluamVjdG9yID0gcmVzdWx0O1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBjb21wb25lbnREZWYgPSBnZXRDb21wb25lbnREZWYoY29tcG9uZW50RmFjdG9yeS5jb21wb25lbnRUeXBlID8/IHt9KTtcbiAgICBjb25zdCBkZWh5ZHJhdGVkVmlldyA9IGZpbmRNYXRjaGluZ0RlaHlkcmF0ZWRWaWV3KHRoaXMuX2xDb250YWluZXIsIGNvbXBvbmVudERlZj8uaWQgPz8gbnVsbCk7XG4gICAgY29uc3Qgck5vZGUgPSBkZWh5ZHJhdGVkVmlldz8uZmlyc3RDaGlsZCA/PyBudWxsO1xuICAgIGNvbnN0IGNvbXBvbmVudFJlZiA9IGNvbXBvbmVudEZhY3RvcnkuY3JlYXRlKGNvbnRleHRJbmplY3RvciwgcHJvamVjdGFibGVOb2Rlcywgck5vZGUsIGVudmlyb25tZW50SW5qZWN0b3IsIGRpcmVjdGl2ZXMsIGJpbmRpbmdzKTtcbiAgICB0aGlzLmluc2VydEltcGwoY29tcG9uZW50UmVmLmhvc3RWaWV3LCBpbmRleCwgc2hvdWxkQWRkVmlld1RvRG9tKHRoaXMuX2hvc3RUTm9kZSwgZGVoeWRyYXRlZFZpZXcpKTtcbiAgICByZXR1cm4gY29tcG9uZW50UmVmO1xuICB9XG4gIGluc2VydCh2aWV3UmVmLCBpbmRleCkge1xuICAgIHJldHVybiB0aGlzLmluc2VydEltcGwodmlld1JlZiwgaW5kZXgsIHRydWUpO1xuICB9XG4gIGluc2VydEltcGwodmlld1JlZiwgaW5kZXgsIGFkZFRvRE9NKSB7XG4gICAgY29uc3QgbFZpZXcgPSB2aWV3UmVmLl9sVmlldztcbiAgICBpZiAobmdEZXZNb2RlICYmIHZpZXdSZWYuZGVzdHJveWVkKSB7XG4gICAgICB0aHJvdyBuZXcgUnVudGltZUVycm9yKDkyMiwgbmdEZXZNb2RlICYmICdDYW5ub3QgaW5zZXJ0IGEgZGVzdHJveWVkIFZpZXcgaW4gYSBWaWV3Q29udGFpbmVyIScpO1xuICAgIH1cbiAgICBpZiAodmlld0F0dGFjaGVkVG9Db250YWluZXIobFZpZXcpKSB7XG4gICAgICBjb25zdCBwcmV2SWR4ID0gdGhpcy5pbmRleE9mKHZpZXdSZWYpO1xuICAgICAgaWYgKHByZXZJZHggIT09IC0xKSB7XG4gICAgICAgIHRoaXMuZGV0YWNoKHByZXZJZHgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgcHJldkxDb250YWluZXIgPSBsVmlld1tQQVJFTlRdO1xuICAgICAgICBuZ0Rldk1vZGUgJiYgYXNzZXJ0RXF1YWwoaXNMQ29udGFpbmVyKHByZXZMQ29udGFpbmVyKSwgdHJ1ZSwgJ0FuIGF0dGFjaGVkIHZpZXcgc2hvdWxkIGhhdmUgaXRzIFBBUkVOVCBwb2ludCB0byBhIGNvbnRhaW5lci4nKTtcbiAgICAgICAgY29uc3QgcHJldlZDUmVmID0gbmV3IFIzVmlld0NvbnRhaW5lclJlZihwcmV2TENvbnRhaW5lciwgcHJldkxDb250YWluZXJbVF9IT1NUXSwgcHJldkxDb250YWluZXJbUEFSRU5UXSk7XG4gICAgICAgIHByZXZWQ1JlZi5kZXRhY2gocHJldlZDUmVmLmluZGV4T2Yodmlld1JlZikpO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBhZGp1c3RlZElkeCA9IHRoaXMuX2FkanVzdEluZGV4KGluZGV4KTtcbiAgICBjb25zdCBsQ29udGFpbmVyID0gdGhpcy5fbENvbnRhaW5lcjtcbiAgICBhZGRMVmlld1RvTENvbnRhaW5lcihsQ29udGFpbmVyLCBsVmlldywgYWRqdXN0ZWRJZHgsIGFkZFRvRE9NKTtcbiAgICB2aWV3UmVmLmF0dGFjaFRvVmlld0NvbnRhaW5lclJlZigpO1xuICAgIGFkZFRvQXJyYXkoZ2V0T3JDcmVhdGVWaWV3UmVmcyhsQ29udGFpbmVyKSwgYWRqdXN0ZWRJZHgsIHZpZXdSZWYpO1xuICAgIHJldHVybiB2aWV3UmVmO1xuICB9XG4gIG1vdmUodmlld1JlZiwgbmV3SW5kZXgpIHtcbiAgICBpZiAobmdEZXZNb2RlICYmIHZpZXdSZWYuZGVzdHJveWVkKSB7XG4gICAgICB0aHJvdyBuZXcgUnVudGltZUVycm9yKDkyMywgbmdEZXZNb2RlICYmICdDYW5ub3QgbW92ZSBhIGRlc3Ryb3llZCBWaWV3IGluIGEgVmlld0NvbnRhaW5lciEnKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaW5zZXJ0KHZpZXdSZWYsIG5ld0luZGV4KTtcbiAgfVxuICBpbmRleE9mKHZpZXdSZWYpIHtcbiAgICBjb25zdCB2aWV3UmVmc0FyciA9IGdldFZpZXdSZWZzKHRoaXMuX2xDb250YWluZXIpO1xuICAgIHJldHVybiB2aWV3UmVmc0FyciAhPT0gbnVsbCA/IHZpZXdSZWZzQXJyLmluZGV4T2Yodmlld1JlZikgOiAtMTtcbiAgfVxuICByZW1vdmUoaW5kZXgpIHtcbiAgICBjb25zdCBhZGp1c3RlZElkeCA9IHRoaXMuX2FkanVzdEluZGV4KGluZGV4LCAtMSk7XG4gICAgY29uc3QgZGV0YWNoZWRWaWV3ID0gZGV0YWNoVmlldyh0aGlzLl9sQ29udGFpbmVyLCBhZGp1c3RlZElkeCk7XG4gICAgaWYgKGRldGFjaGVkVmlldykge1xuICAgICAgcmVtb3ZlRnJvbUFycmF5KGdldE9yQ3JlYXRlVmlld1JlZnModGhpcy5fbENvbnRhaW5lciksIGFkanVzdGVkSWR4KTtcbiAgICAgIGRlc3Ryb3lMVmlldyhkZXRhY2hlZFZpZXdbVFZJRVddLCBkZXRhY2hlZFZpZXcpO1xuICAgIH1cbiAgfVxuICBkZXRhY2goaW5kZXgpIHtcbiAgICBjb25zdCBhZGp1c3RlZElkeCA9IHRoaXMuX2FkanVzdEluZGV4KGluZGV4LCAtMSk7XG4gICAgY29uc3QgdmlldyA9IGRldGFjaFZpZXcodGhpcy5fbENvbnRhaW5lciwgYWRqdXN0ZWRJZHgpO1xuICAgIGNvbnN0IHdhc0RldGFjaGVkID0gdmlldyAmJiByZW1vdmVGcm9tQXJyYXkoZ2V0T3JDcmVhdGVWaWV3UmVmcyh0aGlzLl9sQ29udGFpbmVyKSwgYWRqdXN0ZWRJZHgpICE9IG51bGw7XG4gICAgcmV0dXJuIHdhc0RldGFjaGVkID8gbmV3IFZpZXdSZWYodmlldykgOiBudWxsO1xuICB9XG4gIF9hZGp1c3RJbmRleChpbmRleCwgc2hpZnQgPSAwKSB7XG4gICAgaWYgKGluZGV4ID09IG51bGwpIHtcbiAgICAgIHJldHVybiB0aGlzLmxlbmd0aCArIHNoaWZ0O1xuICAgIH1cbiAgICBpZiAobmdEZXZNb2RlKSB7XG4gICAgICBhc3NlcnRHcmVhdGVyVGhhbihpbmRleCwgLTEsIGBWaWV3UmVmIGluZGV4IG11c3QgYmUgcG9zaXRpdmUsIGdvdCAke2luZGV4fWApO1xuICAgICAgYXNzZXJ0TGVzc1RoYW4oaW5kZXgsIHRoaXMubGVuZ3RoICsgMSArIHNoaWZ0LCAnaW5kZXgnKTtcbiAgICB9XG4gICAgcmV0dXJuIGluZGV4O1xuICB9XG59XG5mdW5jdGlvbiBnZXRWaWV3UmVmcyhsQ29udGFpbmVyKSB7XG4gIHJldHVybiBsQ29udGFpbmVyW1ZJRVdfUkVGU107XG59XG5mdW5jdGlvbiBnZXRPckNyZWF0ZVZpZXdSZWZzKGxDb250YWluZXIpIHtcbiAgcmV0dXJuIGxDb250YWluZXJbVklFV19SRUZTXSB8fCAobENvbnRhaW5lcltWSUVXX1JFRlNdID0gW10pO1xufVxuZnVuY3Rpb24gY3JlYXRlQ29udGFpbmVyUmVmKGhvc3RUTm9kZSwgaG9zdExWaWV3KSB7XG4gIG5nRGV2TW9kZSAmJiBhc3NlcnRUTm9kZVR5cGUoaG9zdFROb2RlLCAxMiB8IDMpO1xuICBsZXQgbENvbnRhaW5lcjtcbiAgY29uc3Qgc2xvdFZhbHVlID0gaG9zdExWaWV3W2hvc3RUTm9kZS5pbmRleF07XG4gIGlmIChpc0xDb250YWluZXIoc2xvdFZhbHVlKSkge1xuICAgIGxDb250YWluZXIgPSBzbG90VmFsdWU7XG4gIH0gZWxzZSB7XG4gICAgbENvbnRhaW5lciA9IGNyZWF0ZUxDb250YWluZXIoc2xvdFZhbHVlLCBob3N0TFZpZXcsIG51bGwsIGhvc3RUTm9kZSk7XG4gICAgaG9zdExWaWV3W2hvc3RUTm9kZS5pbmRleF0gPSBsQ29udGFpbmVyO1xuICAgIGFkZFRvRW5kT2ZWaWV3VHJlZShob3N0TFZpZXcsIGxDb250YWluZXIpO1xuICB9XG4gIF9sb2NhdGVPckNyZWF0ZUFuY2hvck5vZGUobENvbnRhaW5lciwgaG9zdExWaWV3LCBob3N0VE5vZGUsIHNsb3RWYWx1ZSk7XG4gIHJldHVybiBuZXcgUjNWaWV3Q29udGFpbmVyUmVmKGxDb250YWluZXIsIGhvc3RUTm9kZSwgaG9zdExWaWV3KTtcbn1cbmZ1bmN0aW9uIGluc2VydEFuY2hvck5vZGUoaG9zdExWaWV3LCBob3N0VE5vZGUpIHtcbiAgY29uc3QgcmVuZGVyZXIgPSBob3N0TFZpZXdbUkVOREVSRVJdO1xuICBjb25zdCBjb21tZW50Tm9kZSA9IHJlbmRlcmVyLmNyZWF0ZUNvbW1lbnQobmdEZXZNb2RlID8gJ2NvbnRhaW5lcicgOiAnJyk7XG4gIGNvbnN0IGhvc3ROYXRpdmUgPSBnZXROYXRpdmVCeVROb2RlKGhvc3RUTm9kZSwgaG9zdExWaWV3KTtcbiAgY29uc3QgcGFyZW50T2ZIb3N0TmF0aXZlID0gcmVuZGVyZXIucGFyZW50Tm9kZShob3N0TmF0aXZlKTtcbiAgbmF0aXZlSW5zZXJ0QmVmb3JlKHJlbmRlcmVyLCBwYXJlbnRPZkhvc3ROYXRpdmUsIGNvbW1lbnROb2RlLCByZW5kZXJlci5uZXh0U2libGluZyhob3N0TmF0aXZlKSwgZmFsc2UpO1xuICByZXR1cm4gY29tbWVudE5vZGU7XG59XG5sZXQgX2xvY2F0ZU9yQ3JlYXRlQW5jaG9yTm9kZSA9IGNyZWF0ZUFuY2hvck5vZGU7XG5sZXQgX3BvcHVsYXRlRGVoeWRyYXRlZFZpZXdzSW5MQ29udGFpbmVyID0gKCkgPT4gZmFsc2U7XG5mdW5jdGlvbiBwb3B1bGF0ZURlaHlkcmF0ZWRWaWV3c0luTENvbnRhaW5lcihsQ29udGFpbmVyLCB0Tm9kZSwgaG9zdExWaWV3KSB7XG4gIHJldHVybiBfcG9wdWxhdGVEZWh5ZHJhdGVkVmlld3NJbkxDb250YWluZXIobENvbnRhaW5lciwgdE5vZGUsIGhvc3RMVmlldyk7XG59XG5mdW5jdGlvbiBjcmVhdGVBbmNob3JOb2RlKGxDb250YWluZXIsIGhvc3RMVmlldywgaG9zdFROb2RlLCBzbG90VmFsdWUpIHtcbiAgaWYgKGxDb250YWluZXJbTkFUSVZFXSkgcmV0dXJuO1xuICBsZXQgY29tbWVudE5vZGU7XG4gIGlmIChob3N0VE5vZGUudHlwZSAmIDgpIHtcbiAgICBjb21tZW50Tm9kZSA9IHVud3JhcFJOb2RlKHNsb3RWYWx1ZSk7XG4gIH0gZWxzZSB7XG4gICAgY29tbWVudE5vZGUgPSBpbnNlcnRBbmNob3JOb2RlKGhvc3RMVmlldywgaG9zdFROb2RlKTtcbiAgfVxuICBsQ29udGFpbmVyW05BVElWRV0gPSBjb21tZW50Tm9kZTtcbn1cbmZ1bmN0aW9uIHBvcHVsYXRlRGVoeWRyYXRlZFZpZXdzSW5MQ29udGFpbmVySW1wbChsQ29udGFpbmVyLCB0Tm9kZSwgaG9zdExWaWV3KSB7XG4gIGlmIChsQ29udGFpbmVyW05BVElWRV0gJiYgbENvbnRhaW5lcltERUhZRFJBVEVEX1ZJRVdTXSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGNvbnN0IGh5ZHJhdGlvbkluZm8gPSBob3N0TFZpZXdbSFlEUkFUSU9OXTtcbiAgY29uc3Qgbm9PZmZzZXRJbmRleCA9IHROb2RlLmluZGV4IC0gSEVBREVSX09GRlNFVDtcbiAgY29uc3QgaXNOb2RlQ3JlYXRpb25Nb2RlID0gIWh5ZHJhdGlvbkluZm8gfHwgaXNJblNraXBIeWRyYXRpb25CbG9jayh0Tm9kZSkgfHwgaXNEaXNjb25uZWN0ZWROb2RlJDEoaHlkcmF0aW9uSW5mbywgbm9PZmZzZXRJbmRleCk7XG4gIGlmIChpc05vZGVDcmVhdGlvbk1vZGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgY29uc3QgY3VycmVudFJOb2RlID0gZ2V0U2VnbWVudEhlYWQoaHlkcmF0aW9uSW5mbywgbm9PZmZzZXRJbmRleCk7XG4gIGNvbnN0IHNlcmlhbGl6ZWRWaWV3cyA9IGh5ZHJhdGlvbkluZm8uZGF0YVtDT05UQUlORVJTXT8uW25vT2Zmc2V0SW5kZXhdO1xuICBuZ0Rldk1vZGUgJiYgYXNzZXJ0RGVmaW5lZChzZXJpYWxpemVkVmlld3MsICdVbmV4cGVjdGVkIHN0YXRlOiBubyBoeWRyYXRpb24gaW5mbyBhdmFpbGFibGUgZm9yIGEgZ2l2ZW4gVE5vZGUsICcgKyAnd2hpY2ggcmVwcmVzZW50cyBhIHZpZXcgY29udGFpbmVyLicpO1xuICBjb25zdCBbY29tbWVudE5vZGUsIGRlaHlkcmF0ZWRWaWV3c10gPSBsb2NhdGVEZWh5ZHJhdGVkVmlld3NJbkNvbnRhaW5lcihjdXJyZW50Uk5vZGUsIHNlcmlhbGl6ZWRWaWV3cyk7XG4gIGlmIChuZ0Rldk1vZGUpIHtcbiAgICB2YWxpZGF0ZU1hdGNoaW5nTm9kZShjb21tZW50Tm9kZSwgTm9kZS5DT01NRU5UX05PREUsIG51bGwsIGhvc3RMVmlldywgdE5vZGUsIHRydWUpO1xuICAgIG1hcmtSTm9kZUFzQ2xhaW1lZEJ5SHlkcmF0aW9uKGNvbW1lbnROb2RlLCBmYWxzZSk7XG4gIH1cbiAgbENvbnRhaW5lcltOQVRJVkVdID0gY29tbWVudE5vZGU7XG4gIGxDb250YWluZXJbREVIWURSQVRFRF9WSUVXU10gPSBkZWh5ZHJhdGVkVmlld3M7XG4gIHJldHVybiB0cnVlO1xufVxuZnVuY3Rpb24gbG9jYXRlT3JDcmVhdGVBbmNob3JOb2RlKGxDb250YWluZXIsIGhvc3RMVmlldywgaG9zdFROb2RlLCBzbG90VmFsdWUpIHtcbiAgaWYgKCFfcG9wdWxhdGVEZWh5ZHJhdGVkVmlld3NJbkxDb250YWluZXIobENvbnRhaW5lciwgaG9zdFROb2RlLCBob3N0TFZpZXcpKSB7XG4gICAgY3JlYXRlQW5jaG9yTm9kZShsQ29udGFpbmVyLCBob3N0TFZpZXcsIGhvc3RUTm9kZSwgc2xvdFZhbHVlKTtcbiAgfVxufVxuZnVuY3Rpb24gZW5hYmxlTG9jYXRlT3JDcmVhdGVDb250YWluZXJSZWZJbXBsKCkge1xuICBfbG9jYXRlT3JDcmVhdGVBbmNob3JOb2RlID0gbG9jYXRlT3JDcmVhdGVBbmNob3JOb2RlO1xuICBfcG9wdWxhdGVEZWh5ZHJhdGVkVmlld3NJbkxDb250YWluZXIgPSBwb3B1bGF0ZURlaHlkcmF0ZWRWaWV3c0luTENvbnRhaW5lckltcGw7XG59XG5jbGFzcyBMUXVlcnlfIHtcbiAgcXVlcnlMaXN0O1xuICBtYXRjaGVzID0gbnVsbDtcbiAgY29uc3RydWN0b3IocXVlcnlMaXN0KSB7XG4gICAgdGhpcy5xdWVyeUxpc3QgPSBxdWVyeUxpc3Q7XG4gIH1cbiAgY2xvbmUoKSB7XG4gICAgcmV0dXJuIG5ldyBMUXVlcnlfKHRoaXMucXVlcnlMaXN0KTtcbiAgfVxuICBzZXREaXJ0eSgpIHtcbiAgICB0aGlzLnF1ZXJ5TGlzdC5zZXREaXJ0eSgpO1xuICB9XG59XG5jbGFzcyBMUXVlcmllc18ge1xuICBxdWVyaWVzO1xuICBjb25zdHJ1Y3RvcihxdWVyaWVzID0gW10pIHtcbiAgICB0aGlzLnF1ZXJpZXMgPSBxdWVyaWVzO1xuICB9XG4gIGNyZWF0ZUVtYmVkZGVkVmlldyh0Vmlldykge1xuICAgIGNvbnN0IHRRdWVyaWVzID0gdFZpZXcucXVlcmllcztcbiAgICBpZiAodFF1ZXJpZXMgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IG5vT2ZJbmhlcml0ZWRRdWVyaWVzID0gdFZpZXcuY29udGVudFF1ZXJpZXMgIT09IG51bGwgPyB0Vmlldy5jb250ZW50UXVlcmllc1swXSA6IHRRdWVyaWVzLmxlbmd0aDtcbiAgICAgIGNvbnN0IHZpZXdMUXVlcmllcyA9IFtdO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBub09mSW5oZXJpdGVkUXVlcmllczsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHRRdWVyeSA9IHRRdWVyaWVzLmdldEJ5SW5kZXgoaSk7XG4gICAgICAgIGNvbnN0IHBhcmVudExRdWVyeSA9IHRoaXMucXVlcmllc1t0UXVlcnkuaW5kZXhJbkRlY2xhcmF0aW9uVmlld107XG4gICAgICAgIHZpZXdMUXVlcmllcy5wdXNoKHBhcmVudExRdWVyeS5jbG9uZSgpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXcgTFF1ZXJpZXNfKHZpZXdMUXVlcmllcyk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGluc2VydFZpZXcodFZpZXcpIHtcbiAgICB0aGlzLmRpcnR5UXVlcmllc1dpdGhNYXRjaGVzKHRWaWV3KTtcbiAgfVxuICBkZXRhY2hWaWV3KHRWaWV3KSB7XG4gICAgdGhpcy5kaXJ0eVF1ZXJpZXNXaXRoTWF0Y2hlcyh0Vmlldyk7XG4gIH1cbiAgZmluaXNoVmlld0NyZWF0aW9uKHRWaWV3KSB7XG4gICAgdGhpcy5kaXJ0eVF1ZXJpZXNXaXRoTWF0Y2hlcyh0Vmlldyk7XG4gIH1cbiAgZGlydHlRdWVyaWVzV2l0aE1hdGNoZXModFZpZXcpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucXVlcmllcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGdldFRRdWVyeSh0VmlldywgaSkubWF0Y2hlcyAhPT0gbnVsbCkge1xuICAgICAgICB0aGlzLnF1ZXJpZXNbaV0uc2V0RGlydHkoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbmNsYXNzIFRRdWVyeU1ldGFkYXRhXyB7XG4gIGZsYWdzO1xuICByZWFkO1xuICBwcmVkaWNhdGU7XG4gIGNvbnN0cnVjdG9yKHByZWRpY2F0ZSwgZmxhZ3MsIHJlYWQgPSBudWxsKSB7XG4gICAgdGhpcy5mbGFncyA9IGZsYWdzO1xuICAgIHRoaXMucmVhZCA9IHJlYWQ7XG4gICAgaWYgKHR5cGVvZiBwcmVkaWNhdGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0aGlzLnByZWRpY2F0ZSA9IHNwbGl0UXVlcnlNdWx0aVNlbGVjdG9ycyhwcmVkaWNhdGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnByZWRpY2F0ZSA9IHByZWRpY2F0ZTtcbiAgICB9XG4gIH1cbn1cbmNsYXNzIFRRdWVyaWVzXyB7XG4gIHF1ZXJpZXM7XG4gIGNvbnN0cnVjdG9yKHF1ZXJpZXMgPSBbXSkge1xuICAgIHRoaXMucXVlcmllcyA9IHF1ZXJpZXM7XG4gIH1cbiAgZWxlbWVudFN0YXJ0KHRWaWV3LCB0Tm9kZSkge1xuICAgIG5nRGV2TW9kZSAmJiBhc3NlcnRGaXJzdENyZWF0ZVBhc3ModFZpZXcsICdRdWVyaWVzIHNob3VsZCBjb2xsZWN0IHJlc3VsdHMgb24gdGhlIGZpcnN0IHRlbXBsYXRlIHBhc3Mgb25seScpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5xdWVyaWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLnF1ZXJpZXNbaV0uZWxlbWVudFN0YXJ0KHRWaWV3LCB0Tm9kZSk7XG4gICAgfVxuICB9XG4gIGVsZW1lbnRFbmQodE5vZGUpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucXVlcmllcy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5xdWVyaWVzW2ldLmVsZW1lbnRFbmQodE5vZGUpO1xuICAgIH1cbiAgfVxuICBlbWJlZGRlZFRWaWV3KHROb2RlKSB7XG4gICAgbGV0IHF1ZXJpZXNGb3JUZW1wbGF0ZVJlZiA9IG51bGw7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBjaGlsZFF1ZXJ5SW5kZXggPSBxdWVyaWVzRm9yVGVtcGxhdGVSZWYgIT09IG51bGwgPyBxdWVyaWVzRm9yVGVtcGxhdGVSZWYubGVuZ3RoIDogMDtcbiAgICAgIGNvbnN0IHRxdWVyeUNsb25lID0gdGhpcy5nZXRCeUluZGV4KGkpLmVtYmVkZGVkVFZpZXcodE5vZGUsIGNoaWxkUXVlcnlJbmRleCk7XG4gICAgICBpZiAodHF1ZXJ5Q2xvbmUpIHtcbiAgICAgICAgdHF1ZXJ5Q2xvbmUuaW5kZXhJbkRlY2xhcmF0aW9uVmlldyA9IGk7XG4gICAgICAgIGlmIChxdWVyaWVzRm9yVGVtcGxhdGVSZWYgIT09IG51bGwpIHtcbiAgICAgICAgICBxdWVyaWVzRm9yVGVtcGxhdGVSZWYucHVzaCh0cXVlcnlDbG9uZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcXVlcmllc0ZvclRlbXBsYXRlUmVmID0gW3RxdWVyeUNsb25lXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcXVlcmllc0ZvclRlbXBsYXRlUmVmICE9PSBudWxsID8gbmV3IFRRdWVyaWVzXyhxdWVyaWVzRm9yVGVtcGxhdGVSZWYpIDogbnVsbDtcbiAgfVxuICB0ZW1wbGF0ZSh0VmlldywgdE5vZGUpIHtcbiAgICBuZ0Rldk1vZGUgJiYgYXNzZXJ0Rmlyc3RDcmVhdGVQYXNzKHRWaWV3LCAnUXVlcmllcyBzaG91bGQgY29sbGVjdCByZXN1bHRzIG9uIHRoZSBmaXJzdCB0ZW1wbGF0ZSBwYXNzIG9ubHknKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucXVlcmllcy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5xdWVyaWVzW2ldLnRlbXBsYXRlKHRWaWV3LCB0Tm9kZSk7XG4gICAgfVxuICB9XG4gIGdldEJ5SW5kZXgoaW5kZXgpIHtcbiAgICBuZ0Rldk1vZGUgJiYgYXNzZXJ0SW5kZXhJblJhbmdlKHRoaXMucXVlcmllcywgaW5kZXgpO1xuICAgIHJldHVybiB0aGlzLnF1ZXJpZXNbaW5kZXhdO1xuICB9XG4gIGdldCBsZW5ndGgoKSB7XG4gICAgcmV0dXJuIHRoaXMucXVlcmllcy5sZW5ndGg7XG4gIH1cbiAgdHJhY2sodHF1ZXJ5KSB7XG4gICAgdGhpcy5xdWVyaWVzLnB1c2godHF1ZXJ5KTtcbiAgfVxufVxuY2xhc3MgVFF1ZXJ5XyB7XG4gIG1ldGFkYXRhO1xuICBtYXRjaGVzID0gbnVsbDtcbiAgaW5kZXhJbkRlY2xhcmF0aW9uVmlldyA9IC0xO1xuICBjcm9zc2VzTmdUZW1wbGF0ZSA9IGZhbHNlO1xuICBfZGVjbGFyYXRpb25Ob2RlSW5kZXg7XG4gIF9hcHBsaWVzVG9OZXh0Tm9kZSA9IHRydWU7XG4gIGNvbnN0cnVjdG9yKG1ldGFkYXRhLCBub2RlSW5kZXggPSAtMSkge1xuICAgIHRoaXMubWV0YWRhdGEgPSBtZXRhZGF0YTtcbiAgICB0aGlzLl9kZWNsYXJhdGlvbk5vZGVJbmRleCA9IG5vZGVJbmRleDtcbiAgfVxuICBlbGVtZW50U3RhcnQodFZpZXcsIHROb2RlKSB7XG4gICAgaWYgKHRoaXMuaXNBcHBseWluZ1RvTm9kZSh0Tm9kZSkpIHtcbiAgICAgIHRoaXMubWF0Y2hUTm9kZSh0VmlldywgdE5vZGUpO1xuICAgIH1cbiAgfVxuICBlbGVtZW50RW5kKHROb2RlKSB7XG4gICAgaWYgKHRoaXMuX2RlY2xhcmF0aW9uTm9kZUluZGV4ID09PSB0Tm9kZS5pbmRleCkge1xuICAgICAgdGhpcy5fYXBwbGllc1RvTmV4dE5vZGUgPSBmYWxzZTtcbiAgICB9XG4gIH1cbiAgdGVtcGxhdGUodFZpZXcsIHROb2RlKSB7XG4gICAgdGhpcy5lbGVtZW50U3RhcnQodFZpZXcsIHROb2RlKTtcbiAgfVxuICBlbWJlZGRlZFRWaWV3KHROb2RlLCBjaGlsZFF1ZXJ5SW5kZXgpIHtcbiAgICBpZiAodGhpcy5pc0FwcGx5aW5nVG9Ob2RlKHROb2RlKSkge1xuICAgICAgdGhpcy5jcm9zc2VzTmdUZW1wbGF0ZSA9IHRydWU7XG4gICAgICB0aGlzLmFkZE1hdGNoKC10Tm9kZS5pbmRleCwgY2hpbGRRdWVyeUluZGV4KTtcbiAgICAgIHJldHVybiBuZXcgVFF1ZXJ5Xyh0aGlzLm1ldGFkYXRhKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgaXNBcHBseWluZ1RvTm9kZSh0Tm9kZSkge1xuICAgIGlmICh0aGlzLl9hcHBsaWVzVG9OZXh0Tm9kZSAmJiAodGhpcy5tZXRhZGF0YS5mbGFncyAmIDEpICE9PSAxKSB7XG4gICAgICBjb25zdCBkZWNsYXJhdGlvbk5vZGVJZHggPSB0aGlzLl9kZWNsYXJhdGlvbk5vZGVJbmRleDtcbiAgICAgIGxldCBwYXJlbnQgPSB0Tm9kZS5wYXJlbnQ7XG4gICAgICB3aGlsZSAocGFyZW50ICE9PSBudWxsICYmIHBhcmVudC50eXBlICYgOCAmJiBwYXJlbnQuaW5kZXggIT09IGRlY2xhcmF0aW9uTm9kZUlkeCkge1xuICAgICAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50O1xuICAgICAgfVxuICAgICAgcmV0dXJuIGRlY2xhcmF0aW9uTm9kZUlkeCA9PT0gKHBhcmVudCAhPT0gbnVsbCA/IHBhcmVudC5pbmRleCA6IC0xKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2FwcGxpZXNUb05leHROb2RlO1xuICB9XG4gIG1hdGNoVE5vZGUodFZpZXcsIHROb2RlKSB7XG4gICAgY29uc3QgcHJlZGljYXRlID0gdGhpcy5tZXRhZGF0YS5wcmVkaWNhdGU7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkocHJlZGljYXRlKSkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcmVkaWNhdGUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgbmFtZSA9IHByZWRpY2F0ZVtpXTtcbiAgICAgICAgdGhpcy5tYXRjaFROb2RlV2l0aFJlYWRPcHRpb24odFZpZXcsIHROb2RlLCBnZXRJZHhPZk1hdGNoaW5nU2VsZWN0b3IodE5vZGUsIG5hbWUpKTtcbiAgICAgICAgdGhpcy5tYXRjaFROb2RlV2l0aFJlYWRPcHRpb24odFZpZXcsIHROb2RlLCBsb2NhdGVEaXJlY3RpdmVPclByb3ZpZGVyKHROb2RlLCB0VmlldywgbmFtZSwgZmFsc2UsIGZhbHNlKSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChwcmVkaWNhdGUgPT09IFRlbXBsYXRlUmVmKSB7XG4gICAgICAgIGlmICh0Tm9kZS50eXBlICYgNCkge1xuICAgICAgICAgIHRoaXMubWF0Y2hUTm9kZVdpdGhSZWFkT3B0aW9uKHRWaWV3LCB0Tm9kZSwgLTEpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm1hdGNoVE5vZGVXaXRoUmVhZE9wdGlvbih0VmlldywgdE5vZGUsIGxvY2F0ZURpcmVjdGl2ZU9yUHJvdmlkZXIodE5vZGUsIHRWaWV3LCBwcmVkaWNhdGUsIGZhbHNlLCBmYWxzZSkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBtYXRjaFROb2RlV2l0aFJlYWRPcHRpb24odFZpZXcsIHROb2RlLCBub2RlTWF0Y2hJZHgpIHtcbiAgICBpZiAobm9kZU1hdGNoSWR4ICE9PSBudWxsKSB7XG4gICAgICBjb25zdCByZWFkID0gdGhpcy5tZXRhZGF0YS5yZWFkO1xuICAgICAgaWYgKHJlYWQgIT09IG51bGwpIHtcbiAgICAgICAgaWYgKHJlYWQgPT09IEVsZW1lbnRSZWYgfHwgcmVhZCA9PT0gVmlld0NvbnRhaW5lclJlZiB8fCByZWFkID09PSBUZW1wbGF0ZVJlZiAmJiB0Tm9kZS50eXBlICYgNCkge1xuICAgICAgICAgIHRoaXMuYWRkTWF0Y2godE5vZGUuaW5kZXgsIC0yKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBkaXJlY3RpdmVPclByb3ZpZGVySWR4ID0gbG9jYXRlRGlyZWN0aXZlT3JQcm92aWRlcih0Tm9kZSwgdFZpZXcsIHJlYWQsIGZhbHNlLCBmYWxzZSk7XG4gICAgICAgICAgaWYgKGRpcmVjdGl2ZU9yUHJvdmlkZXJJZHggIT09IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuYWRkTWF0Y2godE5vZGUuaW5kZXgsIGRpcmVjdGl2ZU9yUHJvdmlkZXJJZHgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5hZGRNYXRjaCh0Tm9kZS5pbmRleCwgbm9kZU1hdGNoSWR4KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgYWRkTWF0Y2godE5vZGVJZHgsIG1hdGNoSWR4KSB7XG4gICAgaWYgKHRoaXMubWF0Y2hlcyA9PT0gbnVsbCkge1xuICAgICAgdGhpcy5tYXRjaGVzID0gW3ROb2RlSWR4LCBtYXRjaElkeF07XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubWF0Y2hlcy5wdXNoKHROb2RlSWR4LCBtYXRjaElkeCk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBnZXRJZHhPZk1hdGNoaW5nU2VsZWN0b3IodE5vZGUsIHNlbGVjdG9yKSB7XG4gIGNvbnN0IGxvY2FsTmFtZXMgPSB0Tm9kZS5sb2NhbE5hbWVzO1xuICBpZiAobG9jYWxOYW1lcyAhPT0gbnVsbCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbG9jYWxOYW1lcy5sZW5ndGg7IGkgKz0gMikge1xuICAgICAgaWYgKGxvY2FsTmFtZXNbaV0gPT09IHNlbGVjdG9yKSB7XG4gICAgICAgIHJldHVybiBsb2NhbE5hbWVzW2kgKyAxXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5mdW5jdGlvbiBjcmVhdGVSZXN1bHRCeVROb2RlVHlwZSh0Tm9kZSwgY3VycmVudFZpZXcpIHtcbiAgaWYgKHROb2RlLnR5cGUgJiAoMyB8IDgpKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUVsZW1lbnRSZWYodE5vZGUsIGN1cnJlbnRWaWV3KTtcbiAgfSBlbHNlIGlmICh0Tm9kZS50eXBlICYgNCkge1xuICAgIHJldHVybiBjcmVhdGVUZW1wbGF0ZVJlZih0Tm9kZSwgY3VycmVudFZpZXcpO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuZnVuY3Rpb24gY3JlYXRlUmVzdWx0Rm9yTm9kZShsVmlldywgdE5vZGUsIG1hdGNoaW5nSWR4LCByZWFkKSB7XG4gIGlmIChtYXRjaGluZ0lkeCA9PT0gLTEpIHtcbiAgICByZXR1cm4gY3JlYXRlUmVzdWx0QnlUTm9kZVR5cGUodE5vZGUsIGxWaWV3KTtcbiAgfSBlbHNlIGlmIChtYXRjaGluZ0lkeCA9PT0gLTIpIHtcbiAgICByZXR1cm4gY3JlYXRlU3BlY2lhbFRva2VuKGxWaWV3LCB0Tm9kZSwgcmVhZCk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGdldE5vZGVJbmplY3RhYmxlKGxWaWV3LCBsVmlld1tUVklFV10sIG1hdGNoaW5nSWR4LCB0Tm9kZSk7XG4gIH1cbn1cbmZ1bmN0aW9uIGNyZWF0ZVNwZWNpYWxUb2tlbihsVmlldywgdE5vZGUsIHJlYWQpIHtcbiAgaWYgKHJlYWQgPT09IEVsZW1lbnRSZWYpIHtcbiAgICByZXR1cm4gY3JlYXRlRWxlbWVudFJlZih0Tm9kZSwgbFZpZXcpO1xuICB9IGVsc2UgaWYgKHJlYWQgPT09IFRlbXBsYXRlUmVmKSB7XG4gICAgcmV0dXJuIGNyZWF0ZVRlbXBsYXRlUmVmKHROb2RlLCBsVmlldyk7XG4gIH0gZWxzZSBpZiAocmVhZCA9PT0gVmlld0NvbnRhaW5lclJlZikge1xuICAgIG5nRGV2TW9kZSAmJiBhc3NlcnRUTm9kZVR5cGUodE5vZGUsIDMgfCAxMik7XG4gICAgcmV0dXJuIGNyZWF0ZUNvbnRhaW5lclJlZih0Tm9kZSwgbFZpZXcpO1xuICB9IGVsc2Uge1xuICAgIG5nRGV2TW9kZSAmJiB0aHJvd0Vycm9yKGBTcGVjaWFsIHRva2VuIHRvIHJlYWQgc2hvdWxkIGJlIG9uZSBvZiBFbGVtZW50UmVmLCBUZW1wbGF0ZVJlZiBvciBWaWV3Q29udGFpbmVyUmVmIGJ1dCBnb3QgJHtzdHJpbmdpZnkocmVhZCl9LmApO1xuICB9XG59XG5mdW5jdGlvbiBtYXRlcmlhbGl6ZVZpZXdSZXN1bHRzKHRWaWV3LCBsVmlldywgdFF1ZXJ5LCBxdWVyeUluZGV4KSB7XG4gIGNvbnN0IGxRdWVyeSA9IGxWaWV3W1FVRVJJRVNdLnF1ZXJpZXNbcXVlcnlJbmRleF07XG4gIGlmIChsUXVlcnkubWF0Y2hlcyA9PT0gbnVsbCkge1xuICAgIGNvbnN0IHRWaWV3RGF0YSA9IHRWaWV3LmRhdGE7XG4gICAgY29uc3QgdFF1ZXJ5TWF0Y2hlcyA9IHRRdWVyeS5tYXRjaGVzO1xuICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyB0UXVlcnlNYXRjaGVzICE9PSBudWxsICYmIGkgPCB0UXVlcnlNYXRjaGVzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICBjb25zdCBtYXRjaGVkTm9kZUlkeCA9IHRRdWVyeU1hdGNoZXNbaV07XG4gICAgICBpZiAobWF0Y2hlZE5vZGVJZHggPCAwKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKG51bGwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmdEZXZNb2RlICYmIGFzc2VydEluZGV4SW5SYW5nZSh0Vmlld0RhdGEsIG1hdGNoZWROb2RlSWR4KTtcbiAgICAgICAgY29uc3QgdE5vZGUgPSB0Vmlld0RhdGFbbWF0Y2hlZE5vZGVJZHhdO1xuICAgICAgICByZXN1bHQucHVzaChjcmVhdGVSZXN1bHRGb3JOb2RlKGxWaWV3LCB0Tm9kZSwgdFF1ZXJ5TWF0Y2hlc1tpICsgMV0sIHRRdWVyeS5tZXRhZGF0YS5yZWFkKSk7XG4gICAgICB9XG4gICAgfVxuICAgIGxRdWVyeS5tYXRjaGVzID0gcmVzdWx0O1xuICB9XG4gIHJldHVybiBsUXVlcnkubWF0Y2hlcztcbn1cbmZ1bmN0aW9uIGNvbGxlY3RRdWVyeVJlc3VsdHModFZpZXcsIGxWaWV3LCBxdWVyeUluZGV4LCByZXN1bHQpIHtcbiAgY29uc3QgdFF1ZXJ5ID0gdFZpZXcucXVlcmllcy5nZXRCeUluZGV4KHF1ZXJ5SW5kZXgpO1xuICBjb25zdCB0UXVlcnlNYXRjaGVzID0gdFF1ZXJ5Lm1hdGNoZXM7XG4gIGlmICh0UXVlcnlNYXRjaGVzICE9PSBudWxsKSB7XG4gICAgY29uc3QgbFZpZXdSZXN1bHRzID0gbWF0ZXJpYWxpemVWaWV3UmVzdWx0cyh0VmlldywgbFZpZXcsIHRRdWVyeSwgcXVlcnlJbmRleCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0UXVlcnlNYXRjaGVzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICBjb25zdCB0Tm9kZUlkeCA9IHRRdWVyeU1hdGNoZXNbaV07XG4gICAgICBpZiAodE5vZGVJZHggPiAwKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKGxWaWV3UmVzdWx0c1tpIC8gMl0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgY2hpbGRRdWVyeUluZGV4ID0gdFF1ZXJ5TWF0Y2hlc1tpICsgMV07XG4gICAgICAgIGNvbnN0IGRlY2xhcmF0aW9uTENvbnRhaW5lciA9IGxWaWV3Wy10Tm9kZUlkeF07XG4gICAgICAgIG5nRGV2TW9kZSAmJiBhc3NlcnRMQ29udGFpbmVyKGRlY2xhcmF0aW9uTENvbnRhaW5lcik7XG4gICAgICAgIGZvciAobGV0IGkgPSBDT05UQUlORVJfSEVBREVSX09GRlNFVDsgaSA8IGRlY2xhcmF0aW9uTENvbnRhaW5lci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGNvbnN0IGVtYmVkZGVkTFZpZXcgPSBkZWNsYXJhdGlvbkxDb250YWluZXJbaV07XG4gICAgICAgICAgaWYgKGVtYmVkZGVkTFZpZXdbREVDTEFSQVRJT05fTENPTlRBSU5FUl0gPT09IGVtYmVkZGVkTFZpZXdbUEFSRU5UXSkge1xuICAgICAgICAgICAgY29sbGVjdFF1ZXJ5UmVzdWx0cyhlbWJlZGRlZExWaWV3W1RWSUVXXSwgZW1iZWRkZWRMVmlldywgY2hpbGRRdWVyeUluZGV4LCByZXN1bHQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoZGVjbGFyYXRpb25MQ29udGFpbmVyW01PVkVEX1ZJRVdTXSAhPT0gbnVsbCkge1xuICAgICAgICAgIGNvbnN0IGVtYmVkZGVkTFZpZXdzID0gZGVjbGFyYXRpb25MQ29udGFpbmVyW01PVkVEX1ZJRVdTXTtcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVtYmVkZGVkTFZpZXdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBlbWJlZGRlZExWaWV3ID0gZW1iZWRkZWRMVmlld3NbaV07XG4gICAgICAgICAgICBjb2xsZWN0UXVlcnlSZXN1bHRzKGVtYmVkZGVkTFZpZXdbVFZJRVddLCBlbWJlZGRlZExWaWV3LCBjaGlsZFF1ZXJ5SW5kZXgsIHJlc3VsdCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5mdW5jdGlvbiBsb2FkUXVlcnlJbnRlcm5hbChsVmlldywgcXVlcnlJbmRleCkge1xuICBuZ0Rldk1vZGUgJiYgYXNzZXJ0RGVmaW5lZChsVmlld1tRVUVSSUVTXSwgJ0xRdWVyaWVzIHNob3VsZCBiZSBkZWZpbmVkIHdoZW4gdHJ5aW5nIHRvIGxvYWQgYSBxdWVyeScpO1xuICBuZ0Rldk1vZGUgJiYgYXNzZXJ0SW5kZXhJblJhbmdlKGxWaWV3W1FVRVJJRVNdLnF1ZXJpZXMsIHF1ZXJ5SW5kZXgpO1xuICByZXR1cm4gbFZpZXdbUVVFUklFU10ucXVlcmllc1txdWVyeUluZGV4XS5xdWVyeUxpc3Q7XG59XG5mdW5jdGlvbiBjcmVhdGVMUXVlcnkodFZpZXcsIGxWaWV3LCBmbGFncykge1xuICBjb25zdCBxdWVyeUxpc3QgPSBuZXcgUXVlcnlMaXN0KChmbGFncyAmIDQpID09PSA0KTtcbiAgc3RvcmVDbGVhbnVwV2l0aENvbnRleHQodFZpZXcsIGxWaWV3LCBxdWVyeUxpc3QsIHF1ZXJ5TGlzdC5kZXN0cm95KTtcbiAgY29uc3QgbFF1ZXJpZXMgPSAobFZpZXdbUVVFUklFU10gPz89IG5ldyBMUXVlcmllc18oKSkucXVlcmllcztcbiAgcmV0dXJuIGxRdWVyaWVzLnB1c2gobmV3IExRdWVyeV8ocXVlcnlMaXN0KSkgLSAxO1xufVxuZnVuY3Rpb24gY3JlYXRlVmlld1F1ZXJ5KHByZWRpY2F0ZSwgZmxhZ3MsIHJlYWQpIHtcbiAgbmdEZXZNb2RlICYmIGFzc2VydE51bWJlcihmbGFncywgJ0V4cGVjdGluZyBmbGFncycpO1xuICBjb25zdCB0VmlldyA9IGdldFRWaWV3KCk7XG4gIGlmICh0Vmlldy5maXJzdENyZWF0ZVBhc3MpIHtcbiAgICBjcmVhdGVUUXVlcnkodFZpZXcsIG5ldyBUUXVlcnlNZXRhZGF0YV8ocHJlZGljYXRlLCBmbGFncywgcmVhZCksIC0xKTtcbiAgICBpZiAoKGZsYWdzICYgMikgPT09IDIpIHtcbiAgICAgIHRWaWV3LnN0YXRpY1ZpZXdRdWVyaWVzID0gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNyZWF0ZUxRdWVyeSh0VmlldywgZ2V0TFZpZXcoKSwgZmxhZ3MpO1xufVxuZnVuY3Rpb24gY3JlYXRlQ29udGVudFF1ZXJ5KGRpcmVjdGl2ZUluZGV4LCBwcmVkaWNhdGUsIGZsYWdzLCByZWFkKSB7XG4gIG5nRGV2TW9kZSAmJiBhc3NlcnROdW1iZXIoZmxhZ3MsICdFeHBlY3RpbmcgZmxhZ3MnKTtcbiAgY29uc3QgdFZpZXcgPSBnZXRUVmlldygpO1xuICBpZiAodFZpZXcuZmlyc3RDcmVhdGVQYXNzKSB7XG4gICAgY29uc3QgdE5vZGUgPSBnZXRDdXJyZW50VE5vZGUoKTtcbiAgICBjcmVhdGVUUXVlcnkodFZpZXcsIG5ldyBUUXVlcnlNZXRhZGF0YV8ocHJlZGljYXRlLCBmbGFncywgcmVhZCksIHROb2RlLmluZGV4KTtcbiAgICBzYXZlQ29udGVudFF1ZXJ5QW5kRGlyZWN0aXZlSW5kZXgodFZpZXcsIGRpcmVjdGl2ZUluZGV4KTtcbiAgICBpZiAoKGZsYWdzICYgMikgPT09IDIpIHtcbiAgICAgIHRWaWV3LnN0YXRpY0NvbnRlbnRRdWVyaWVzID0gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNyZWF0ZUxRdWVyeSh0VmlldywgZ2V0TFZpZXcoKSwgZmxhZ3MpO1xufVxuZnVuY3Rpb24gc3BsaXRRdWVyeU11bHRpU2VsZWN0b3JzKGxvY2F0b3IpIHtcbiAgcmV0dXJuIGxvY2F0b3Iuc3BsaXQoJywnKS5tYXAocyA9PiBzLnRyaW0oKSk7XG59XG5mdW5jdGlvbiBjcmVhdGVUUXVlcnkodFZpZXcsIG1ldGFkYXRhLCBub2RlSW5kZXgpIHtcbiAgaWYgKHRWaWV3LnF1ZXJpZXMgPT09IG51bGwpIHRWaWV3LnF1ZXJpZXMgPSBuZXcgVFF1ZXJpZXNfKCk7XG4gIHRWaWV3LnF1ZXJpZXMudHJhY2sobmV3IFRRdWVyeV8obWV0YWRhdGEsIG5vZGVJbmRleCkpO1xufVxuZnVuY3Rpb24gc2F2ZUNvbnRlbnRRdWVyeUFuZERpcmVjdGl2ZUluZGV4KHRWaWV3LCBkaXJlY3RpdmVJbmRleCkge1xuICBjb25zdCB0Vmlld0NvbnRlbnRRdWVyaWVzID0gdFZpZXcuY29udGVudFF1ZXJpZXMgfHwgKHRWaWV3LmNvbnRlbnRRdWVyaWVzID0gW10pO1xuICBjb25zdCBsYXN0U2F2ZWREaXJlY3RpdmVJbmRleCA9IHRWaWV3Q29udGVudFF1ZXJpZXMubGVuZ3RoID8gdFZpZXdDb250ZW50UXVlcmllc1t0Vmlld0NvbnRlbnRRdWVyaWVzLmxlbmd0aCAtIDFdIDogLTE7XG4gIGlmIChkaXJlY3RpdmVJbmRleCAhPT0gbGFzdFNhdmVkRGlyZWN0aXZlSW5kZXgpIHtcbiAgICB0Vmlld0NvbnRlbnRRdWVyaWVzLnB1c2godFZpZXcucXVlcmllcy5sZW5ndGggLSAxLCBkaXJlY3RpdmVJbmRleCk7XG4gIH1cbn1cbmZ1bmN0aW9uIGdldFRRdWVyeSh0VmlldywgaW5kZXgpIHtcbiAgbmdEZXZNb2RlICYmIGFzc2VydERlZmluZWQodFZpZXcucXVlcmllcywgJ1RRdWVyaWVzIG11c3QgYmUgZGVmaW5lZCB0byByZXRyaWV2ZSBhIFRRdWVyeScpO1xuICByZXR1cm4gdFZpZXcucXVlcmllcy5nZXRCeUluZGV4KGluZGV4KTtcbn1cbmZ1bmN0aW9uIGdldFF1ZXJ5UmVzdWx0cyhsVmlldywgcXVlcnlJbmRleCkge1xuICBjb25zdCB0VmlldyA9IGxWaWV3W1RWSUVXXTtcbiAgY29uc3QgdFF1ZXJ5ID0gZ2V0VFF1ZXJ5KHRWaWV3LCBxdWVyeUluZGV4KTtcbiAgcmV0dXJuIHRRdWVyeS5jcm9zc2VzTmdUZW1wbGF0ZSA/IGNvbGxlY3RRdWVyeVJlc3VsdHModFZpZXcsIGxWaWV3LCBxdWVyeUluZGV4LCBbXSkgOiBtYXRlcmlhbGl6ZVZpZXdSZXN1bHRzKHRWaWV3LCBsVmlldywgdFF1ZXJ5LCBxdWVyeUluZGV4KTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZVF1ZXJ5U2lnbmFsRm4oZmlyc3RPbmx5LCByZXF1aXJlZCwgb3B0cykge1xuICBsZXQgbm9kZTtcbiAgY29uc3Qgc2lnbmFsRm4gPSBjcmVhdGVDb21wdXRlZCgoKSA9PiB7XG4gICAgbm9kZS5fZGlydHlDb3VudGVyKCk7XG4gICAgY29uc3QgdmFsdWUgPSByZWZyZXNoU2lnbmFsUXVlcnkobm9kZSwgZmlyc3RPbmx5KTtcbiAgICBpZiAocmVxdWlyZWQgJiYgdmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFcnJvcigtOTUxLCBuZ0Rldk1vZGUgJiYgJ0NoaWxkIHF1ZXJ5IHJlc3VsdCBpcyByZXF1aXJlZCBidXQgbm8gdmFsdWUgaXMgYXZhaWxhYmxlLicpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG4gIH0pO1xuICBub2RlID0gc2lnbmFsRm5bU0lHTkFMXTtcbiAgbm9kZS5fZGlydHlDb3VudGVyID0gc2lnbmFsKDApO1xuICBub2RlLl9mbGF0VmFsdWUgPSB1bmRlZmluZWQ7XG4gIGlmIChuZ0Rldk1vZGUpIHtcbiAgICBzaWduYWxGbi50b1N0cmluZyA9ICgpID0+IGBbUXVlcnkgU2lnbmFsXWA7XG4gICAgbm9kZS5kZWJ1Z05hbWUgPSBvcHRzPy5kZWJ1Z05hbWU7XG4gIH1cbiAgcmV0dXJuIHNpZ25hbEZuO1xufVxuZnVuY3Rpb24gY3JlYXRlU2luZ2xlUmVzdWx0T3B0aW9uYWxRdWVyeVNpZ25hbEZuKG9wdHMpIHtcbiAgcmV0dXJuIGNyZWF0ZVF1ZXJ5U2lnbmFsRm4odHJ1ZSwgZmFsc2UsIG9wdHMpO1xufVxuZnVuY3Rpb24gY3JlYXRlU2luZ2xlUmVzdWx0UmVxdWlyZWRRdWVyeVNpZ25hbEZuKG9wdHMpIHtcbiAgcmV0dXJuIGNyZWF0ZVF1ZXJ5U2lnbmFsRm4odHJ1ZSwgdHJ1ZSwgb3B0cyk7XG59XG5mdW5jdGlvbiBjcmVhdGVNdWx0aVJlc3VsdFF1ZXJ5U2lnbmFsRm4ob3B0cykge1xuICByZXR1cm4gY3JlYXRlUXVlcnlTaWduYWxGbihmYWxzZSwgZmFsc2UsIG9wdHMpO1xufVxuZnVuY3Rpb24gYmluZFF1ZXJ5VG9TaWduYWwodGFyZ2V0LCBxdWVyeUluZGV4KSB7XG4gIGNvbnN0IG5vZGUgPSB0YXJnZXRbU0lHTkFMXTtcbiAgbm9kZS5fbFZpZXcgPSBnZXRMVmlldygpO1xuICBub2RlLl9xdWVyeUluZGV4ID0gcXVlcnlJbmRleDtcbiAgbm9kZS5fcXVlcnlMaXN0ID0gbG9hZFF1ZXJ5SW50ZXJuYWwobm9kZS5fbFZpZXcsIHF1ZXJ5SW5kZXgpO1xuICBub2RlLl9xdWVyeUxpc3Qub25EaXJ0eSgoKSA9PiBub2RlLl9kaXJ0eUNvdW50ZXIudXBkYXRlKHYgPT4gdiArIDEpKTtcbn1cbmZ1bmN0aW9uIHJlZnJlc2hTaWduYWxRdWVyeShub2RlLCBmaXJzdE9ubHkpIHtcbiAgY29uc3QgbFZpZXcgPSBub2RlLl9sVmlldztcbiAgY29uc3QgcXVlcnlJbmRleCA9IG5vZGUuX3F1ZXJ5SW5kZXg7XG4gIGlmIChsVmlldyA9PT0gdW5kZWZpbmVkIHx8IHF1ZXJ5SW5kZXggPT09IHVuZGVmaW5lZCB8fCBsVmlld1tGTEFHU10gJiA0KSB7XG4gICAgcmV0dXJuIGZpcnN0T25seSA/IHVuZGVmaW5lZCA6IEVNUFRZX0FSUkFZO1xuICB9XG4gIGNvbnN0IHF1ZXJ5TGlzdCA9IGxvYWRRdWVyeUludGVybmFsKGxWaWV3LCBxdWVyeUluZGV4KTtcbiAgY29uc3QgcmVzdWx0cyA9IGdldFF1ZXJ5UmVzdWx0cyhsVmlldywgcXVlcnlJbmRleCk7XG4gIHF1ZXJ5TGlzdC5yZXNldChyZXN1bHRzLCB1bndyYXBFbGVtZW50UmVmKTtcbiAgaWYgKGZpcnN0T25seSkge1xuICAgIHJldHVybiBxdWVyeUxpc3QuZmlyc3Q7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgcmVzdWx0Q2hhbmdlZCA9IHF1ZXJ5TGlzdC5fY2hhbmdlc0RldGVjdGVkO1xuICAgIGlmIChyZXN1bHRDaGFuZ2VkIHx8IG5vZGUuX2ZsYXRWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gbm9kZS5fZmxhdFZhbHVlID0gcXVlcnlMaXN0LnRvQXJyYXkoKTtcbiAgICB9XG4gICAgcmV0dXJuIG5vZGUuX2ZsYXRWYWx1ZTtcbiAgfVxufVxubGV0IGNvbXBvbmVudFJlc291cmNlUmVzb2x1dGlvblF1ZXVlID0gLyojX19QVVJFX18qL25ldyBNYXAoKTtcbmNvbnN0IGNvbXBvbmVudERlZlBlbmRpbmdSZXNvbHV0aW9uID0gLyojX19QVVJFX18qL25ldyBTZXQoKTtcbmFzeW5jIGZ1bmN0aW9uIHJlc29sdmVDb21wb25lbnRSZXNvdXJjZXMocmVzb3VyY2VSZXNvbHZlcikge1xuICBjb25zdCBjdXJyZW50UXVldWUgPSBjb21wb25lbnRSZXNvdXJjZVJlc29sdXRpb25RdWV1ZTtcbiAgY29tcG9uZW50UmVzb3VyY2VSZXNvbHV0aW9uUXVldWUgPSBuZXcgTWFwKCk7XG4gIGNvbnN0IHVybENhY2hlID0gbmV3IE1hcCgpO1xuICBmdW5jdGlvbiBjYWNoZWRSZXNvdXJjZVJlc29sdmUodXJsKSB7XG4gICAgY29uc3QgcHJvbWlzZUNhY2hlZCA9IHVybENhY2hlLmdldCh1cmwpO1xuICAgIGlmIChwcm9taXNlQ2FjaGVkKSB7XG4gICAgICByZXR1cm4gcHJvbWlzZUNhY2hlZDtcbiAgICB9XG4gICAgY29uc3QgcHJvbWlzZSA9IHJlc291cmNlUmVzb2x2ZXIodXJsKS50aGVuKHJlc3BvbnNlID0+IHVud3JhcFJlc3BvbnNlKHVybCwgcmVzcG9uc2UpKTtcbiAgICB1cmxDYWNoZS5zZXQodXJsLCBwcm9taXNlKTtcbiAgICByZXR1cm4gcHJvbWlzZTtcbiAgfVxuICBjb25zdCByZXNvbHV0aW9uUHJvbWlzZXMgPSBBcnJheS5mcm9tKGN1cnJlbnRRdWV1ZSkubWFwKGFzeW5jIChbdHlwZSwgY29tcG9uZW50XSkgPT4ge1xuICAgIGlmIChjb21wb25lbnQuc3R5bGVVcmwgJiYgY29tcG9uZW50LnN0eWxlVXJscz8ubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0BDb21wb25lbnQgY2Fubm90IGRlZmluZSBib3RoIGBzdHlsZVVybGAgYW5kIGBzdHlsZVVybHNgLiAnICsgJ1VzZSBgc3R5bGVVcmxgIGlmIHRoZSBjb21wb25lbnQgaGFzIG9uZSBzdHlsZXNoZWV0LCBvciBgc3R5bGVVcmxzYCBpZiBpdCBoYXMgbXVsdGlwbGUnKTtcbiAgICB9XG4gICAgY29uc3QgY29tcG9uZW50VGFza3MgPSBbXTtcbiAgICBpZiAoY29tcG9uZW50LnRlbXBsYXRlVXJsKSB7XG4gICAgICBjb21wb25lbnRUYXNrcy5wdXNoKGNhY2hlZFJlc291cmNlUmVzb2x2ZShjb21wb25lbnQudGVtcGxhdGVVcmwpLnRoZW4odGVtcGxhdGUgPT4ge1xuICAgICAgICBjb21wb25lbnQudGVtcGxhdGUgPSB0ZW1wbGF0ZTtcbiAgICAgIH0pKTtcbiAgICB9XG4gICAgY29uc3Qgc3R5bGVzID0gdHlwZW9mIGNvbXBvbmVudC5zdHlsZXMgPT09ICdzdHJpbmcnID8gW2NvbXBvbmVudC5zdHlsZXNdIDogY29tcG9uZW50LnN0eWxlcyA/PyBbXTtcbiAgICBjb21wb25lbnQuc3R5bGVzID0gc3R5bGVzO1xuICAgIGxldCB7XG4gICAgICBzdHlsZVVybCxcbiAgICAgIHN0eWxlVXJsc1xuICAgIH0gPSBjb21wb25lbnQ7XG4gICAgaWYgKHN0eWxlVXJsKSB7XG4gICAgICBzdHlsZVVybHMgPSBbc3R5bGVVcmxdO1xuICAgICAgY29tcG9uZW50LnN0eWxlVXJsID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBpZiAoc3R5bGVVcmxzPy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IGFsbEZldGNoZWQgPSBQcm9taXNlLmFsbChzdHlsZVVybHMubWFwKHVybCA9PiBjYWNoZWRSZXNvdXJjZVJlc29sdmUodXJsKSkpLnRoZW4oZmV0Y2hlZFN0eWxlcyA9PiB7XG4gICAgICAgIHN0eWxlcy5wdXNoKC4uLmZldGNoZWRTdHlsZXMpO1xuICAgICAgICBjb21wb25lbnQuc3R5bGVVcmxzID0gdW5kZWZpbmVkO1xuICAgICAgfSk7XG4gICAgICBjb21wb25lbnRUYXNrcy5wdXNoKGFsbEZldGNoZWQpO1xuICAgIH1cbiAgICBhd2FpdCBQcm9taXNlLmFsbChjb21wb25lbnRUYXNrcyk7XG4gICAgY29tcG9uZW50RGVmUGVuZGluZ1Jlc29sdXRpb24uZGVsZXRlKHR5cGUpO1xuICB9KTtcbiAgYXdhaXQgUHJvbWlzZS5hbGwocmVzb2x1dGlvblByb21pc2VzKTtcbn1cbmZ1bmN0aW9uIG1heWJlUXVldWVSZXNvbHV0aW9uT2ZDb21wb25lbnRSZXNvdXJjZXModHlwZSwgbWV0YWRhdGEpIHtcbiAgaWYgKGNvbXBvbmVudE5lZWRzUmVzb2x1dGlvbihtZXRhZGF0YSkpIHtcbiAgICBjb21wb25lbnRSZXNvdXJjZVJlc29sdXRpb25RdWV1ZS5zZXQodHlwZSwgbWV0YWRhdGEpO1xuICAgIGNvbXBvbmVudERlZlBlbmRpbmdSZXNvbHV0aW9uLmFkZCh0eXBlKTtcbiAgfVxufVxuZnVuY3Rpb24gaXNDb21wb25lbnREZWZQZW5kaW5nUmVzb2x1dGlvbih0eXBlKSB7XG4gIHJldHVybiBjb21wb25lbnREZWZQZW5kaW5nUmVzb2x1dGlvbi5oYXModHlwZSk7XG59XG5mdW5jdGlvbiBjb21wb25lbnROZWVkc1Jlc29sdXRpb24oY29tcG9uZW50KSB7XG4gIHJldHVybiAhIShjb21wb25lbnQudGVtcGxhdGVVcmwgJiYgIWNvbXBvbmVudC5oYXNPd25Qcm9wZXJ0eSgndGVtcGxhdGUnKSB8fCBjb21wb25lbnQuc3R5bGVVcmxzPy5sZW5ndGggfHwgY29tcG9uZW50LnN0eWxlVXJsKTtcbn1cbmZ1bmN0aW9uIGNsZWFyUmVzb2x1dGlvbk9mQ29tcG9uZW50UmVzb3VyY2VzUXVldWUoKSB7XG4gIGNvbnN0IG9sZCA9IGNvbXBvbmVudFJlc291cmNlUmVzb2x1dGlvblF1ZXVlO1xuICBjb21wb25lbnRSZXNvdXJjZVJlc29sdXRpb25RdWV1ZSA9IG5ldyBNYXAoKTtcbiAgcmV0dXJuIG9sZDtcbn1cbmZ1bmN0aW9uIHJlc3RvcmVDb21wb25lbnRSZXNvbHV0aW9uUXVldWUocXVldWUpIHtcbiAgY29tcG9uZW50RGVmUGVuZGluZ1Jlc29sdXRpb24uY2xlYXIoKTtcbiAgZm9yIChjb25zdCB0eXBlIG9mIHF1ZXVlLmtleXMoKSkge1xuICAgIGNvbXBvbmVudERlZlBlbmRpbmdSZXNvbHV0aW9uLmFkZCh0eXBlKTtcbiAgfVxuICBjb21wb25lbnRSZXNvdXJjZVJlc29sdXRpb25RdWV1ZSA9IHF1ZXVlO1xufVxuZnVuY3Rpb24gaXNDb21wb25lbnRSZXNvdXJjZVJlc29sdXRpb25RdWV1ZUVtcHR5KCkge1xuICByZXR1cm4gY29tcG9uZW50UmVzb3VyY2VSZXNvbHV0aW9uUXVldWUuc2l6ZSA9PT0gMDtcbn1cbmFzeW5jIGZ1bmN0aW9uIHVud3JhcFJlc3BvbnNlKHVybCwgcmVzcG9uc2UpIHtcbiAgaWYgKHR5cGVvZiByZXNwb25zZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gcmVzcG9uc2U7XG4gIH1cbiAgaWYgKHJlc3BvbnNlLnN0YXR1cyAhPT0gdW5kZWZpbmVkICYmIHJlc3BvbnNlLnN0YXR1cyAhPT0gMjAwKSB7XG4gICAgdGhyb3cgbmV3IFJ1bnRpbWVFcnJvcig5MTgsIG5nRGV2TW9kZSAmJiBgQ291bGQgbm90IGxvYWQgcmVzb3VyY2U6ICR7dXJsfS4gUmVzcG9uc2Ugc3RhdHVzOiAke3Jlc3BvbnNlLnN0YXR1c31gKTtcbiAgfVxuICByZXR1cm4gcmVzcG9uc2UudGV4dCgpO1xufVxuY29uc3QgbW9kdWxlcyA9IC8qI19fUFVSRV9fKi9uZXcgTWFwKCk7XG5sZXQgY2hlY2tGb3JEdXBsaWNhdGVOZ01vZHVsZXMgPSB0cnVlO1xuZnVuY3Rpb24gYXNzZXJ0U2FtZU9yTm90RXhpc3RpbmcoaWQsIHR5cGUsIGluY29taW5nKSB7XG4gIGlmICh0eXBlICYmIHR5cGUgIT09IGluY29taW5nICYmIGNoZWNrRm9yRHVwbGljYXRlTmdNb2R1bGVzKSB7XG4gICAgdGhyb3cgbmV3IFJ1bnRpbWVFcnJvcig5MjEsIG5nRGV2TW9kZSAmJiBgRHVwbGljYXRlIG1vZHVsZSByZWdpc3RlcmVkIGZvciAke2lkfSAtICR7c3RyaW5naWZ5KHR5cGUpfSB2cyAke3N0cmluZ2lmeSh0eXBlLm5hbWUpfWApO1xuICB9XG59XG5mdW5jdGlvbiByZWdpc3Rlck5nTW9kdWxlVHlwZShuZ01vZHVsZVR5cGUsIGlkKSB7XG4gIGNvbnN0IGV4aXN0aW5nID0gbW9kdWxlcy5nZXQoaWQpIHx8IG51bGw7XG4gIGFzc2VydFNhbWVPck5vdEV4aXN0aW5nKGlkLCBleGlzdGluZywgbmdNb2R1bGVUeXBlKTtcbiAgbW9kdWxlcy5zZXQoaWQsIG5nTW9kdWxlVHlwZSk7XG59XG5mdW5jdGlvbiBnZXRSZWdpc3RlcmVkTmdNb2R1bGVUeXBlKGlkKSB7XG4gIHJldHVybiBtb2R1bGVzLmdldChpZCk7XG59XG5mdW5jdGlvbiBzZXRBbGxvd0R1cGxpY2F0ZU5nTW9kdWxlSWRzRm9yVGVzdChhbGxvd0R1cGxpY2F0ZXMpIHtcbiAgY2hlY2tGb3JEdXBsaWNhdGVOZ01vZHVsZXMgPSAhYWxsb3dEdXBsaWNhdGVzO1xufVxubGV0IE5nTW9kdWxlUmVmJDEgPSBjbGFzcyBOZ01vZHVsZVJlZiB7fTtcbmxldCBOZ01vZHVsZUZhY3RvcnkkMSA9IGNsYXNzIE5nTW9kdWxlRmFjdG9yeSB7fTtcbmZ1bmN0aW9uIGNyZWF0ZU5nTW9kdWxlKG5nTW9kdWxlLCBwYXJlbnRJbmplY3Rvcikge1xuICByZXR1cm4gbmV3IE5nTW9kdWxlUmVmKG5nTW9kdWxlLCBwYXJlbnRJbmplY3RvciA/PyBudWxsLCBbXSk7XG59XG5jb25zdCBjcmVhdGVOZ01vZHVsZVJlZiA9IGNyZWF0ZU5nTW9kdWxlO1xuY2xhc3MgTmdNb2R1bGVSZWYgZXh0ZW5kcyBOZ01vZHVsZVJlZiQxIHtcbiAgbmdNb2R1bGVUeXBlO1xuICBfcGFyZW50O1xuICBfYm9vdHN0cmFwQ29tcG9uZW50cyA9IFtdO1xuICBfcjNJbmplY3RvcjtcbiAgaW5zdGFuY2U7XG4gIGRlc3Ryb3lDYnMgPSBbXTtcbiAgY29tcG9uZW50RmFjdG9yeVJlc29sdmVyID0gLyojX19QVVJFX18qL25ldyBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIodGhpcyk7XG4gIGNvbnN0cnVjdG9yKG5nTW9kdWxlVHlwZSwgX3BhcmVudCwgYWRkaXRpb25hbFByb3ZpZGVycywgcnVuSW5qZWN0b3JJbml0aWFsaXplcnMgPSB0cnVlKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLm5nTW9kdWxlVHlwZSA9IG5nTW9kdWxlVHlwZTtcbiAgICB0aGlzLl9wYXJlbnQgPSBfcGFyZW50O1xuICAgIGNvbnN0IG5nTW9kdWxlRGVmID0gZ2V0TmdNb2R1bGVEZWYobmdNb2R1bGVUeXBlKTtcbiAgICBuZ0Rldk1vZGUgJiYgYXNzZXJ0RGVmaW5lZChuZ01vZHVsZURlZiwgYE5nTW9kdWxlICcke3N0cmluZ2lmeShuZ01vZHVsZVR5cGUpfScgaXMgbm90IGEgc3VidHlwZSBvZiAnTmdNb2R1bGVUeXBlJy5gKTtcbiAgICB0aGlzLl9ib290c3RyYXBDb21wb25lbnRzID0gbWF5YmVVbndyYXBGbihuZ01vZHVsZURlZi5ib290c3RyYXApO1xuICAgIHRoaXMuX3IzSW5qZWN0b3IgPSBjcmVhdGVJbmplY3RvcldpdGhvdXRJbmplY3Rvckluc3RhbmNlcyhuZ01vZHVsZVR5cGUsIF9wYXJlbnQsIFt7XG4gICAgICBwcm92aWRlOiBOZ01vZHVsZVJlZiQxLFxuICAgICAgdXNlVmFsdWU6IHRoaXNcbiAgICB9LCB7XG4gICAgICBwcm92aWRlOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIkMSxcbiAgICAgIHVzZVZhbHVlOiB0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlclxuICAgIH0sIC4uLmFkZGl0aW9uYWxQcm92aWRlcnNdLCBzdHJpbmdpZnkobmdNb2R1bGVUeXBlKSwgbmV3IFNldChbJ2Vudmlyb25tZW50J10pKTtcbiAgICBpZiAocnVuSW5qZWN0b3JJbml0aWFsaXplcnMpIHtcbiAgICAgIHRoaXMucmVzb2x2ZUluamVjdG9ySW5pdGlhbGl6ZXJzKCk7XG4gICAgfVxuICB9XG4gIHJlc29sdmVJbmplY3RvckluaXRpYWxpemVycygpIHtcbiAgICB0aGlzLl9yM0luamVjdG9yLnJlc29sdmVJbmplY3RvckluaXRpYWxpemVycygpO1xuICAgIHRoaXMuaW5zdGFuY2UgPSB0aGlzLl9yM0luamVjdG9yLmdldCh0aGlzLm5nTW9kdWxlVHlwZSk7XG4gIH1cbiAgZ2V0IGluamVjdG9yKCkge1xuICAgIHJldHVybiB0aGlzLl9yM0luamVjdG9yO1xuICB9XG4gIGRlc3Ryb3koKSB7XG4gICAgbmdEZXZNb2RlICYmIGFzc2VydERlZmluZWQodGhpcy5kZXN0cm95Q2JzLCAnTmdNb2R1bGUgYWxyZWFkeSBkZXN0cm95ZWQnKTtcbiAgICBjb25zdCBpbmplY3RvciA9IHRoaXMuX3IzSW5qZWN0b3I7XG4gICAgIWluamVjdG9yLmRlc3Ryb3llZCAmJiBpbmplY3Rvci5kZXN0cm95KCk7XG4gICAgdGhpcy5kZXN0cm95Q2JzLmZvckVhY2goZm4gPT4gZm4oKSk7XG4gICAgdGhpcy5kZXN0cm95Q2JzID0gbnVsbDtcbiAgfVxuICBvbkRlc3Ryb3koY2FsbGJhY2spIHtcbiAgICBuZ0Rldk1vZGUgJiYgYXNzZXJ0RGVmaW5lZCh0aGlzLmRlc3Ryb3lDYnMsICdOZ01vZHVsZSBhbHJlYWR5IGRlc3Ryb3llZCcpO1xuICAgIHRoaXMuZGVzdHJveUNicy5wdXNoKGNhbGxiYWNrKTtcbiAgfVxufVxuY2xhc3MgTmdNb2R1bGVGYWN0b3J5IGV4dGVuZHMgTmdNb2R1bGVGYWN0b3J5JDEge1xuICBtb2R1bGVUeXBlO1xuICBjb25zdHJ1Y3Rvcihtb2R1bGVUeXBlKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLm1vZHVsZVR5cGUgPSBtb2R1bGVUeXBlO1xuICB9XG4gIGNyZWF0ZShwYXJlbnRJbmplY3Rvcikge1xuICAgIHJldHVybiBuZXcgTmdNb2R1bGVSZWYodGhpcy5tb2R1bGVUeXBlLCBwYXJlbnRJbmplY3RvciwgW10pO1xuICB9XG59XG5mdW5jdGlvbiBjcmVhdGVOZ01vZHVsZVJlZldpdGhQcm92aWRlcnMobW9kdWxlVHlwZSwgcGFyZW50SW5qZWN0b3IsIGFkZGl0aW9uYWxQcm92aWRlcnMpIHtcbiAgcmV0dXJuIG5ldyBOZ01vZHVsZVJlZihtb2R1bGVUeXBlLCBwYXJlbnRJbmplY3RvciwgYWRkaXRpb25hbFByb3ZpZGVycywgZmFsc2UpO1xufVxuY2xhc3MgRW52aXJvbm1lbnROZ01vZHVsZVJlZkFkYXB0ZXIgZXh0ZW5kcyBOZ01vZHVsZVJlZiQxIHtcbiAgaW5qZWN0b3I7XG4gIGNvbXBvbmVudEZhY3RvcnlSZXNvbHZlciA9IC8qI19fUFVSRV9fKi9uZXcgQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyKHRoaXMpO1xuICBpbnN0YW5jZSA9IG51bGw7XG4gIGNvbnN0cnVjdG9yKGNvbmZpZykge1xuICAgIHN1cGVyKCk7XG4gICAgY29uc3QgaW5qZWN0b3IgPSBuZXcgUjNJbmplY3RvcihbLi4uY29uZmlnLnByb3ZpZGVycywge1xuICAgICAgcHJvdmlkZTogTmdNb2R1bGVSZWYkMSxcbiAgICAgIHVzZVZhbHVlOiB0aGlzXG4gICAgfSwge1xuICAgICAgcHJvdmlkZTogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyJDEsXG4gICAgICB1c2VWYWx1ZTogdGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXJcbiAgICB9XSwgY29uZmlnLnBhcmVudCB8fCBnZXROdWxsSW5qZWN0b3IoKSwgY29uZmlnLmRlYnVnTmFtZSwgbmV3IFNldChbJ2Vudmlyb25tZW50J10pKTtcbiAgICB0aGlzLmluamVjdG9yID0gaW5qZWN0b3I7XG4gICAgaWYgKGNvbmZpZy5ydW5FbnZpcm9ubWVudEluaXRpYWxpemVycykge1xuICAgICAgaW5qZWN0b3IucmVzb2x2ZUluamVjdG9ySW5pdGlhbGl6ZXJzKCk7XG4gICAgfVxuICB9XG4gIGRlc3Ryb3koKSB7XG4gICAgdGhpcy5pbmplY3Rvci5kZXN0cm95KCk7XG4gIH1cbiAgb25EZXN0cm95KGNhbGxiYWNrKSB7XG4gICAgdGhpcy5pbmplY3Rvci5vbkRlc3Ryb3koY2FsbGJhY2spO1xuICB9XG59XG5mdW5jdGlvbiBjcmVhdGVFbnZpcm9ubWVudEluamVjdG9yKHByb3ZpZGVycywgcGFyZW50LCBkZWJ1Z05hbWUgPSBudWxsKSB7XG4gIGNvbnN0IGFkYXB0ZXIgPSBuZXcgRW52aXJvbm1lbnROZ01vZHVsZVJlZkFkYXB0ZXIoe1xuICAgIHByb3ZpZGVycyxcbiAgICBwYXJlbnQsXG4gICAgZGVidWdOYW1lLFxuICAgIHJ1bkVudmlyb25tZW50SW5pdGlhbGl6ZXJzOiB0cnVlXG4gIH0pO1xuICByZXR1cm4gYWRhcHRlci5pbmplY3Rvcjtcbn1cbmxldCBTdGFuZGFsb25lU2VydmljZSA9IC8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICBjbGFzcyBTdGFuZGFsb25lU2VydmljZSB7XG4gICAgX2luamVjdG9yO1xuICAgIGNhY2hlZEluamVjdG9ycyA9IG5ldyBNYXAoKTtcbiAgICBjb25zdHJ1Y3RvcihfaW5qZWN0b3IpIHtcbiAgICAgIHRoaXMuX2luamVjdG9yID0gX2luamVjdG9yO1xuICAgIH1cbiAgICBnZXRPckNyZWF0ZVN0YW5kYWxvbmVJbmplY3Rvcihjb21wb25lbnREZWYpIHtcbiAgICAgIGlmICghY29tcG9uZW50RGVmLnN0YW5kYWxvbmUpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBpZiAoIXRoaXMuY2FjaGVkSW5qZWN0b3JzLmhhcyhjb21wb25lbnREZWYpKSB7XG4gICAgICAgIGNvbnN0IHByb3ZpZGVycyA9IGludGVybmFsSW1wb3J0UHJvdmlkZXJzRnJvbShmYWxzZSwgY29tcG9uZW50RGVmLnR5cGUpO1xuICAgICAgICBjb25zdCBzdGFuZGFsb25lSW5qZWN0b3IgPSBwcm92aWRlcnMubGVuZ3RoID4gMCA/IGNyZWF0ZUVudmlyb25tZW50SW5qZWN0b3IoW3Byb3ZpZGVyc10sIHRoaXMuX2luamVjdG9yLCB0eXBlb2YgbmdEZXZNb2RlICE9PSAndW5kZWZpbmVkJyAmJiBuZ0Rldk1vZGUgPyBgU3RhbmRhbG9uZVske2NvbXBvbmVudERlZi50eXBlLm5hbWV9XWAgOiAnJykgOiBudWxsO1xuICAgICAgICB0aGlzLmNhY2hlZEluamVjdG9ycy5zZXQoY29tcG9uZW50RGVmLCBzdGFuZGFsb25lSW5qZWN0b3IpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuY2FjaGVkSW5qZWN0b3JzLmdldChjb21wb25lbnREZWYpO1xuICAgIH1cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGZvciAoY29uc3QgaW5qZWN0b3Igb2YgdGhpcy5jYWNoZWRJbmplY3RvcnMudmFsdWVzKCkpIHtcbiAgICAgICAgICBpZiAoaW5qZWN0b3IgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGluamVjdG9yLmRlc3Ryb3koKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMuY2FjaGVkSW5qZWN0b3JzLmNsZWFyKCk7XG4gICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyDJtXByb3YgPSAvKiBAX19QVVJFX18gKi9cbiAgICBfX2RlZmluZUluamVjdGFibGUoe1xuICAgICAgdG9rZW46IFN0YW5kYWxvbmVTZXJ2aWNlLFxuICAgICAgcHJvdmlkZWRJbjogJ2Vudmlyb25tZW50JyxcbiAgICAgIGZhY3Rvcnk6ICgpID0+IG5ldyBTdGFuZGFsb25lU2VydmljZShfX2luamVjdChFbnZpcm9ubWVudEluamVjdG9yKSlcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gU3RhbmRhbG9uZVNlcnZpY2U7XG59KSgpO1xuZnVuY3Rpb24gybXJtWRlZmluZUNvbXBvbmVudChjb21wb25lbnREZWZpbml0aW9uKSB7XG4gIHJldHVybiBub1NpZGVFZmZlY3RzKCgpID0+IHtcbiAgICAodHlwZW9mIG5nRGV2TW9kZSA9PT0gJ3VuZGVmaW5lZCcgfHwgbmdEZXZNb2RlKSAmJiBpbml0TmdEZXZNb2RlKCk7XG4gICAgY29uc3QgYmFzZURlZiA9IGdldE5nRGlyZWN0aXZlRGVmKGNvbXBvbmVudERlZmluaXRpb24pO1xuICAgIGNvbnN0IGRlZiA9IHtcbiAgICAgIC4uLmJhc2VEZWYsXG4gICAgICBkZWNsczogY29tcG9uZW50RGVmaW5pdGlvbi5kZWNscyxcbiAgICAgIHZhcnM6IGNvbXBvbmVudERlZmluaXRpb24udmFycyxcbiAgICAgIHRlbXBsYXRlOiBjb21wb25lbnREZWZpbml0aW9uLnRlbXBsYXRlLFxuICAgICAgY29uc3RzOiBjb21wb25lbnREZWZpbml0aW9uLmNvbnN0cyB8fCBudWxsLFxuICAgICAgbmdDb250ZW50U2VsZWN0b3JzOiBjb21wb25lbnREZWZpbml0aW9uLm5nQ29udGVudFNlbGVjdG9ycyxcbiAgICAgIG9uUHVzaDogY29tcG9uZW50RGVmaW5pdGlvbi5jaGFuZ2VEZXRlY3Rpb24gPT09IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICAgIGRpcmVjdGl2ZURlZnM6IG51bGwsXG4gICAgICBwaXBlRGVmczogbnVsbCxcbiAgICAgIGRlcGVuZGVuY2llczogYmFzZURlZi5zdGFuZGFsb25lICYmIGNvbXBvbmVudERlZmluaXRpb24uZGVwZW5kZW5jaWVzIHx8IG51bGwsXG4gICAgICBnZXRTdGFuZGFsb25lSW5qZWN0b3I6IGJhc2VEZWYuc3RhbmRhbG9uZSA/IHBhcmVudEluamVjdG9yID0+IHtcbiAgICAgICAgcmV0dXJuIHBhcmVudEluamVjdG9yLmdldChTdGFuZGFsb25lU2VydmljZSkuZ2V0T3JDcmVhdGVTdGFuZGFsb25lSW5qZWN0b3IoZGVmKTtcbiAgICAgIH0gOiBudWxsLFxuICAgICAgZ2V0RXh0ZXJuYWxTdHlsZXM6IG51bGwsXG4gICAgICBzaWduYWxzOiBjb21wb25lbnREZWZpbml0aW9uLnNpZ25hbHMgPz8gZmFsc2UsXG4gICAgICBkYXRhOiBjb21wb25lbnREZWZpbml0aW9uLmRhdGEgfHwge30sXG4gICAgICBlbmNhcHN1bGF0aW9uOiBjb21wb25lbnREZWZpbml0aW9uLmVuY2Fwc3VsYXRpb24gfHwgVmlld0VuY2Fwc3VsYXRpb24uRW11bGF0ZWQsXG4gICAgICBzdHlsZXM6IGNvbXBvbmVudERlZmluaXRpb24uc3R5bGVzIHx8IEVNUFRZX0FSUkFZLFxuICAgICAgXzogbnVsbCxcbiAgICAgIHNjaGVtYXM6IGNvbXBvbmVudERlZmluaXRpb24uc2NoZW1hcyB8fCBudWxsLFxuICAgICAgdFZpZXc6IG51bGwsXG4gICAgICBpZDogJydcbiAgICB9O1xuICAgIGlmIChiYXNlRGVmLnN0YW5kYWxvbmUpIHtcbiAgICAgIHBlcmZvcm1hbmNlTWFya0ZlYXR1cmUoJ05nU3RhbmRhbG9uZScpO1xuICAgIH1cbiAgICBpbml0RmVhdHVyZXMoZGVmKTtcbiAgICBjb25zdCBkZXBlbmRlbmNpZXMgPSBjb21wb25lbnREZWZpbml0aW9uLmRlcGVuZGVuY2llcztcbiAgICBkZWYuZGlyZWN0aXZlRGVmcyA9IGV4dHJhY3REZWZMaXN0T3JGYWN0b3J5KGRlcGVuZGVuY2llcywgZXh0cmFjdERpcmVjdGl2ZURlZik7XG4gICAgZGVmLnBpcGVEZWZzID0gZXh0cmFjdERlZkxpc3RPckZhY3RvcnkoZGVwZW5kZW5jaWVzLCBnZXRQaXBlRGVmJDEpO1xuICAgIGRlZi5pZCA9IGdldENvbXBvbmVudElkKGRlZik7XG4gICAgcmV0dXJuIGRlZjtcbiAgfSk7XG59XG5mdW5jdGlvbiBleHRyYWN0RGlyZWN0aXZlRGVmKHR5cGUpIHtcbiAgcmV0dXJuIGdldENvbXBvbmVudERlZih0eXBlKSB8fCBnZXREaXJlY3RpdmVEZWYodHlwZSk7XG59XG5mdW5jdGlvbiDJtcm1ZGVmaW5lTmdNb2R1bGUoZGVmKSB7XG4gIHJldHVybiBub1NpZGVFZmZlY3RzKCgpID0+IHtcbiAgICBjb25zdCByZXMgPSB7XG4gICAgICB0eXBlOiBkZWYudHlwZSxcbiAgICAgIGJvb3RzdHJhcDogZGVmLmJvb3RzdHJhcCB8fCBFTVBUWV9BUlJBWSxcbiAgICAgIGRlY2xhcmF0aW9uczogZGVmLmRlY2xhcmF0aW9ucyB8fCBFTVBUWV9BUlJBWSxcbiAgICAgIGltcG9ydHM6IGRlZi5pbXBvcnRzIHx8IEVNUFRZX0FSUkFZLFxuICAgICAgZXhwb3J0czogZGVmLmV4cG9ydHMgfHwgRU1QVFlfQVJSQVksXG4gICAgICB0cmFuc2l0aXZlQ29tcGlsZVNjb3BlczogbnVsbCxcbiAgICAgIHNjaGVtYXM6IGRlZi5zY2hlbWFzIHx8IG51bGwsXG4gICAgICBpZDogZGVmLmlkIHx8IG51bGxcbiAgICB9O1xuICAgIHJldHVybiByZXM7XG4gIH0pO1xufVxuZnVuY3Rpb24gcGFyc2VBbmRDb252ZXJ0SW5wdXRzRm9yRGVmaW5pdGlvbihvYmosIGRlY2xhcmVkSW5wdXRzKSB7XG4gIGlmIChvYmogPT0gbnVsbCkgcmV0dXJuIEVNUFRZX09CSjtcbiAgY29uc3QgbmV3TG9va3VwID0ge307XG4gIGZvciAoY29uc3QgbWluaWZpZWRLZXkgaW4gb2JqKSB7XG4gICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShtaW5pZmllZEtleSkpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gb2JqW21pbmlmaWVkS2V5XTtcbiAgICAgIGxldCBwdWJsaWNOYW1lO1xuICAgICAgbGV0IGRlY2xhcmVkTmFtZTtcbiAgICAgIGxldCBpbnB1dEZsYWdzO1xuICAgICAgbGV0IHRyYW5zZm9ybTtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICBpbnB1dEZsYWdzID0gdmFsdWVbMF07XG4gICAgICAgIHB1YmxpY05hbWUgPSB2YWx1ZVsxXTtcbiAgICAgICAgZGVjbGFyZWROYW1lID0gdmFsdWVbMl0gPz8gcHVibGljTmFtZTtcbiAgICAgICAgdHJhbnNmb3JtID0gdmFsdWVbM10gfHwgbnVsbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHB1YmxpY05hbWUgPSB2YWx1ZTtcbiAgICAgICAgZGVjbGFyZWROYW1lID0gdmFsdWU7XG4gICAgICAgIGlucHV0RmxhZ3MgPSBJbnB1dEZsYWdzLk5vbmU7XG4gICAgICAgIHRyYW5zZm9ybSA9IG51bGw7XG4gICAgICB9XG4gICAgICBuZXdMb29rdXBbcHVibGljTmFtZV0gPSBbbWluaWZpZWRLZXksIGlucHV0RmxhZ3MsIHRyYW5zZm9ybV07XG4gICAgICBkZWNsYXJlZElucHV0c1twdWJsaWNOYW1lXSA9IGRlY2xhcmVkTmFtZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5ld0xvb2t1cDtcbn1cbmZ1bmN0aW9uIHBhcnNlQW5kQ29udmVydE91dHB1dHNGb3JEZWZpbml0aW9uKG9iaikge1xuICBpZiAob2JqID09IG51bGwpIHJldHVybiBFTVBUWV9PQko7XG4gIGNvbnN0IG5ld0xvb2t1cCA9IHt9O1xuICBmb3IgKGNvbnN0IG1pbmlmaWVkS2V5IGluIG9iaikge1xuICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkobWluaWZpZWRLZXkpKSB7XG4gICAgICBuZXdMb29rdXBbb2JqW21pbmlmaWVkS2V5XV0gPSBtaW5pZmllZEtleTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5ld0xvb2t1cDtcbn1cbmZ1bmN0aW9uIMm1ybVkZWZpbmVEaXJlY3RpdmUoZGlyZWN0aXZlRGVmaW5pdGlvbikge1xuICByZXR1cm4gbm9TaWRlRWZmZWN0cygoKSA9PiB7XG4gICAgY29uc3QgZGVmID0gZ2V0TmdEaXJlY3RpdmVEZWYoZGlyZWN0aXZlRGVmaW5pdGlvbik7XG4gICAgaW5pdEZlYXR1cmVzKGRlZik7XG4gICAgcmV0dXJuIGRlZjtcbiAgfSk7XG59XG5mdW5jdGlvbiDJtcm1ZGVmaW5lUGlwZShwaXBlRGVmKSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogcGlwZURlZi50eXBlLFxuICAgIG5hbWU6IHBpcGVEZWYubmFtZSxcbiAgICBmYWN0b3J5OiBudWxsLFxuICAgIHB1cmU6IHBpcGVEZWYucHVyZSAhPT0gZmFsc2UsXG4gICAgc3RhbmRhbG9uZTogcGlwZURlZi5zdGFuZGFsb25lID8/IHRydWUsXG4gICAgb25EZXN0cm95OiBwaXBlRGVmLnR5cGUucHJvdG90eXBlLm5nT25EZXN0cm95IHx8IG51bGxcbiAgfTtcbn1cbmZ1bmN0aW9uIGdldE5nRGlyZWN0aXZlRGVmKGRpcmVjdGl2ZURlZmluaXRpb24pIHtcbiAgY29uc3QgZGVjbGFyZWRJbnB1dHMgPSB7fTtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBkaXJlY3RpdmVEZWZpbml0aW9uLnR5cGUsXG4gICAgcHJvdmlkZXJzUmVzb2x2ZXI6IG51bGwsXG4gICAgdmlld1Byb3ZpZGVyc1Jlc29sdmVyOiBudWxsLFxuICAgIGZhY3Rvcnk6IG51bGwsXG4gICAgaG9zdEJpbmRpbmdzOiBkaXJlY3RpdmVEZWZpbml0aW9uLmhvc3RCaW5kaW5ncyB8fCBudWxsLFxuICAgIGhvc3RWYXJzOiBkaXJlY3RpdmVEZWZpbml0aW9uLmhvc3RWYXJzIHx8IDAsXG4gICAgaG9zdEF0dHJzOiBkaXJlY3RpdmVEZWZpbml0aW9uLmhvc3RBdHRycyB8fCBudWxsLFxuICAgIGNvbnRlbnRRdWVyaWVzOiBkaXJlY3RpdmVEZWZpbml0aW9uLmNvbnRlbnRRdWVyaWVzIHx8IG51bGwsXG4gICAgZGVjbGFyZWRJbnB1dHM6IGRlY2xhcmVkSW5wdXRzLFxuICAgIGlucHV0Q29uZmlnOiBkaXJlY3RpdmVEZWZpbml0aW9uLmlucHV0cyB8fCBFTVBUWV9PQkosXG4gICAgZXhwb3J0QXM6IGRpcmVjdGl2ZURlZmluaXRpb24uZXhwb3J0QXMgfHwgbnVsbCxcbiAgICBzdGFuZGFsb25lOiBkaXJlY3RpdmVEZWZpbml0aW9uLnN0YW5kYWxvbmUgPz8gdHJ1ZSxcbiAgICBzaWduYWxzOiBkaXJlY3RpdmVEZWZpbml0aW9uLnNpZ25hbHMgPT09IHRydWUsXG4gICAgc2VsZWN0b3JzOiBkaXJlY3RpdmVEZWZpbml0aW9uLnNlbGVjdG9ycyB8fCBFTVBUWV9BUlJBWSxcbiAgICB2aWV3UXVlcnk6IGRpcmVjdGl2ZURlZmluaXRpb24udmlld1F1ZXJ5IHx8IG51bGwsXG4gICAgZmVhdHVyZXM6IGRpcmVjdGl2ZURlZmluaXRpb24uZmVhdHVyZXMgfHwgbnVsbCxcbiAgICBzZXRJbnB1dDogbnVsbCxcbiAgICByZXNvbHZlSG9zdERpcmVjdGl2ZXM6IG51bGwsXG4gICAgaG9zdERpcmVjdGl2ZXM6IG51bGwsXG4gICAgY29udHJvbERlZjogbnVsbCxcbiAgICBpbnB1dHM6IHBhcnNlQW5kQ29udmVydElucHV0c0ZvckRlZmluaXRpb24oZGlyZWN0aXZlRGVmaW5pdGlvbi5pbnB1dHMsIGRlY2xhcmVkSW5wdXRzKSxcbiAgICBvdXRwdXRzOiBwYXJzZUFuZENvbnZlcnRPdXRwdXRzRm9yRGVmaW5pdGlvbihkaXJlY3RpdmVEZWZpbml0aW9uLm91dHB1dHMpLFxuICAgIGRlYnVnSW5mbzogbnVsbFxuICB9O1xufVxuZnVuY3Rpb24gaW5pdEZlYXR1cmVzKGRlZmluaXRpb24pIHtcbiAgZGVmaW5pdGlvbi5mZWF0dXJlcz8uZm9yRWFjaChmbiA9PiBmbihkZWZpbml0aW9uKSk7XG59XG5mdW5jdGlvbiBleHRyYWN0RGVmTGlzdE9yRmFjdG9yeShkZXBlbmRlbmNpZXMsIGRlZkV4dHJhY3Rvcikge1xuICBpZiAoIWRlcGVuZGVuY2llcykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiAoKSA9PiB7XG4gICAgY29uc3QgcmVzb2x2ZWREZXBlbmRlbmNpZXMgPSB0eXBlb2YgZGVwZW5kZW5jaWVzID09PSAnZnVuY3Rpb24nID8gZGVwZW5kZW5jaWVzKCkgOiBkZXBlbmRlbmNpZXM7XG4gICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgZm9yIChjb25zdCBkZXAgb2YgcmVzb2x2ZWREZXBlbmRlbmNpZXMpIHtcbiAgICAgIGNvbnN0IGRlZmluaXRpb24gPSBkZWZFeHRyYWN0b3IoZGVwKTtcbiAgICAgIGlmIChkZWZpbml0aW9uICE9PSBudWxsKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKGRlZmluaXRpb24pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xufVxuY29uc3QgR0VORVJBVEVEX0NPTVBfSURTID0gLyojX19QVVJFX18qL25ldyBNYXAoKTtcbmZ1bmN0aW9uIGdldENvbXBvbmVudElkKGNvbXBvbmVudERlZikge1xuICBsZXQgaGFzaCA9IDA7XG4gIGNvbnN0IGNvbXBvbmVudERlZkNvbnN0cyA9IHR5cGVvZiBjb21wb25lbnREZWYuY29uc3RzID09PSAnZnVuY3Rpb24nID8gJycgOiBjb21wb25lbnREZWYuY29uc3RzO1xuICBjb25zdCBoYXNoU2VsZWN0b3JzID0gW2NvbXBvbmVudERlZi5zZWxlY3RvcnMsIGNvbXBvbmVudERlZi5uZ0NvbnRlbnRTZWxlY3RvcnMsIGNvbXBvbmVudERlZi5ob3N0VmFycywgY29tcG9uZW50RGVmLmhvc3RBdHRycywgY29tcG9uZW50RGVmQ29uc3RzLCBjb21wb25lbnREZWYudmFycywgY29tcG9uZW50RGVmLmRlY2xzLCBjb21wb25lbnREZWYuZW5jYXBzdWxhdGlvbiwgY29tcG9uZW50RGVmLnN0YW5kYWxvbmUsIGNvbXBvbmVudERlZi5zaWduYWxzLCBjb21wb25lbnREZWYuZXhwb3J0QXMsIEpTT04uc3RyaW5naWZ5KGNvbXBvbmVudERlZi5pbnB1dHMpLCBKU09OLnN0cmluZ2lmeShjb21wb25lbnREZWYub3V0cHV0cyksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGNvbXBvbmVudERlZi50eXBlLnByb3RvdHlwZSksICEhY29tcG9uZW50RGVmLmNvbnRlbnRRdWVyaWVzLCAhIWNvbXBvbmVudERlZi52aWV3UXVlcnldO1xuICBpZiAodHlwZW9mIG5nRGV2TW9kZSA9PT0gJ3VuZGVmaW5lZCcgfHwgbmdEZXZNb2RlKSB7XG4gICAgZm9yIChjb25zdCBpdGVtIG9mIGhhc2hTZWxlY3RvcnMpIHtcbiAgICAgIGFzc2VydE5vdEVxdWFsKHR5cGVvZiBpdGVtLCAnZnVuY3Rpb24nLCAnSW50ZXJuYWwgZXJyb3I6IGF0dGVtcHRpbmcgdG8gdXNlIGEgZnVuY3Rpb24gaW4gY29tcG9uZW50IGlkIGNvbXB1dGF0aW9uIGxvZ2ljLicpO1xuICAgIH1cbiAgfVxuICBmb3IgKGNvbnN0IGNoYXIgb2YgaGFzaFNlbGVjdG9ycy5qb2luKCd8JykpIHtcbiAgICBoYXNoID0gTWF0aC5pbXVsKDMxLCBoYXNoKSArIGNoYXIuY2hhckNvZGVBdCgwKSA8PCAwO1xuICB9XG4gIGhhc2ggKz0gMjE0NzQ4MzY0NyArIDE7XG4gIGNvbnN0IGNvbXBJZCA9ICdjJyArIGhhc2g7XG4gIGlmICgodHlwZW9mIG5nRGV2TW9kZSA9PT0gJ3VuZGVmaW5lZCcgfHwgbmdEZXZNb2RlKSAmJiAodHlwZW9mIG5nU2VydmVyTW9kZSA9PT0gJ3VuZGVmaW5lZCcgfHwgIW5nU2VydmVyTW9kZSkpIHtcbiAgICBpZiAoR0VORVJBVEVEX0NPTVBfSURTLmhhcyhjb21wSWQpKSB7XG4gICAgICBjb25zdCBwcmV2aW91c0NvbXBEZWZUeXBlID0gR0VORVJBVEVEX0NPTVBfSURTLmdldChjb21wSWQpO1xuICAgICAgaWYgKHByZXZpb3VzQ29tcERlZlR5cGUgIT09IGNvbXBvbmVudERlZi50eXBlKSB7XG4gICAgICAgIGNvbnNvbGUud2Fybihmb3JtYXRSdW50aW1lRXJyb3IoLTkxMiwgYENvbXBvbmVudCBJRCBnZW5lcmF0aW9uIGNvbGxpc2lvbiBkZXRlY3RlZC4gQ29tcG9uZW50cyAnJHtwcmV2aW91c0NvbXBEZWZUeXBlLm5hbWV9JyBhbmQgJyR7Y29tcG9uZW50RGVmLnR5cGUubmFtZX0nIHdpdGggc2VsZWN0b3IgJyR7c3RyaW5naWZ5Q1NTU2VsZWN0b3JMaXN0KGNvbXBvbmVudERlZi5zZWxlY3RvcnMpfScgZ2VuZXJhdGVkIHRoZSBzYW1lIGNvbXBvbmVudCBJRC4gVG8gZml4IHRoaXMsIHlvdSBjYW4gY2hhbmdlIHRoZSBzZWxlY3RvciBvZiBvbmUgb2YgdGhvc2UgY29tcG9uZW50cyBvciBhZGQgYW4gZXh0cmEgaG9zdCBhdHRyaWJ1dGUgdG8gZm9yY2UgYSBkaWZmZXJlbnQgSUQuYCkpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBHRU5FUkFURURfQ09NUF9JRFMuc2V0KGNvbXBJZCwgY29tcG9uZW50RGVmLnR5cGUpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gY29tcElkO1xufVxuZnVuY3Rpb24gybXJtUNvbnRyb2xGZWF0dXJlKHBhc3NUaHJvdWdoSW5wdXQpIHtcbiAgcmV0dXJuIGRlZmluaXRpb24gPT4ge1xuICAgIGRlZmluaXRpb24uY29udHJvbERlZiA9IHtcbiAgICAgIGNyZWF0ZTogKGluc3QsIGhvc3QpID0+IHtcbiAgICAgICAgaW5zdD8uybVuZ0NvbnRyb2xDcmVhdGUoaG9zdCk7XG4gICAgICB9LFxuICAgICAgdXBkYXRlOiAoaW5zdCwgaG9zdCkgPT4ge1xuICAgICAgICBpbnN0Py7JtW5nQ29udHJvbFVwZGF0ZT8uKGhvc3QpO1xuICAgICAgfSxcbiAgICAgIHBhc3NUaHJvdWdoSW5wdXRcbiAgICB9O1xuICB9O1xufVxuZnVuY3Rpb24gybXJtUhvc3REaXJlY3RpdmVzRmVhdHVyZShyYXdIb3N0RGlyZWN0aXZlcykge1xuICBjb25zdCBmZWF0dXJlID0gZGVmaW5pdGlvbiA9PiB7XG4gICAgY29uc3QgaXNFYWdlciA9IEFycmF5LmlzQXJyYXkocmF3SG9zdERpcmVjdGl2ZXMpO1xuICAgIGlmIChkZWZpbml0aW9uLmhvc3REaXJlY3RpdmVzID09PSBudWxsKSB7XG4gICAgICBkZWZpbml0aW9uLnJlc29sdmVIb3N0RGlyZWN0aXZlcyA9IHJlc29sdmVIb3N0RGlyZWN0aXZlcztcbiAgICAgIGRlZmluaXRpb24uaG9zdERpcmVjdGl2ZXMgPSBpc0VhZ2VyID8gcmF3SG9zdERpcmVjdGl2ZXMubWFwKGNyZWF0ZUhvc3REaXJlY3RpdmVEZWYpIDogW3Jhd0hvc3REaXJlY3RpdmVzXTtcbiAgICB9IGVsc2UgaWYgKGlzRWFnZXIpIHtcbiAgICAgIGRlZmluaXRpb24uaG9zdERpcmVjdGl2ZXMudW5zaGlmdCguLi5yYXdIb3N0RGlyZWN0aXZlcy5tYXAoY3JlYXRlSG9zdERpcmVjdGl2ZURlZikpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWZpbml0aW9uLmhvc3REaXJlY3RpdmVzLnVuc2hpZnQocmF3SG9zdERpcmVjdGl2ZXMpO1xuICAgIH1cbiAgfTtcbiAgZmVhdHVyZS5uZ0luaGVyaXQgPSB0cnVlO1xuICByZXR1cm4gZmVhdHVyZTtcbn1cbmZ1bmN0aW9uIHJlc29sdmVIb3N0RGlyZWN0aXZlcyhtYXRjaGVzKSB7XG4gIGNvbnN0IGFsbERpcmVjdGl2ZURlZnMgPSBbXTtcbiAgbGV0IGhhc0NvbXBvbmVudCA9IGZhbHNlO1xuICBsZXQgaG9zdERpcmVjdGl2ZURlZnMgPSBudWxsO1xuICBsZXQgaG9zdERpcmVjdGl2ZVJhbmdlcyA9IG51bGw7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbWF0Y2hlcy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGRlZiA9IG1hdGNoZXNbaV07XG4gICAgaWYgKGRlZi5ob3N0RGlyZWN0aXZlcyAhPT0gbnVsbCkge1xuICAgICAgY29uc3Qgc3RhcnQgPSBhbGxEaXJlY3RpdmVEZWZzLmxlbmd0aDtcbiAgICAgIGhvc3REaXJlY3RpdmVEZWZzID8/PSBuZXcgTWFwKCk7XG4gICAgICBob3N0RGlyZWN0aXZlUmFuZ2VzID8/PSBuZXcgTWFwKCk7XG4gICAgICBmaW5kSG9zdERpcmVjdGl2ZURlZnMoZGVmLCBhbGxEaXJlY3RpdmVEZWZzLCBob3N0RGlyZWN0aXZlRGVmcyk7XG4gICAgICBob3N0RGlyZWN0aXZlUmFuZ2VzLnNldChkZWYsIFtzdGFydCwgYWxsRGlyZWN0aXZlRGVmcy5sZW5ndGggLSAxXSk7XG4gICAgfVxuICAgIGlmIChpID09PSAwICYmIGlzQ29tcG9uZW50RGVmKGRlZikpIHtcbiAgICAgIGhhc0NvbXBvbmVudCA9IHRydWU7XG4gICAgICBhbGxEaXJlY3RpdmVEZWZzLnB1c2goZGVmKTtcbiAgICB9XG4gIH1cbiAgZm9yIChsZXQgaSA9IGhhc0NvbXBvbmVudCA/IDEgOiAwOyBpIDwgbWF0Y2hlcy5sZW5ndGg7IGkrKykge1xuICAgIGFsbERpcmVjdGl2ZURlZnMucHVzaChtYXRjaGVzW2ldKTtcbiAgfVxuICByZXR1cm4gW2FsbERpcmVjdGl2ZURlZnMsIGhvc3REaXJlY3RpdmVEZWZzLCBob3N0RGlyZWN0aXZlUmFuZ2VzXTtcbn1cbmZ1bmN0aW9uIGZpbmRIb3N0RGlyZWN0aXZlRGVmcyhjdXJyZW50RGVmLCBtYXRjaGVkRGVmcywgaG9zdERpcmVjdGl2ZURlZnMpIHtcbiAgaWYgKGN1cnJlbnREZWYuaG9zdERpcmVjdGl2ZXMgIT09IG51bGwpIHtcbiAgICBmb3IgKGNvbnN0IGNvbmZpZ09yRm4gb2YgY3VycmVudERlZi5ob3N0RGlyZWN0aXZlcykge1xuICAgICAgaWYgKHR5cGVvZiBjb25maWdPckZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGNvbnN0IHJlc29sdmVkID0gY29uZmlnT3JGbigpO1xuICAgICAgICBmb3IgKGNvbnN0IGNvbmZpZyBvZiByZXNvbHZlZCkge1xuICAgICAgICAgIHRyYWNrSG9zdERpcmVjdGl2ZURlZihjcmVhdGVIb3N0RGlyZWN0aXZlRGVmKGNvbmZpZyksIG1hdGNoZWREZWZzLCBob3N0RGlyZWN0aXZlRGVmcyk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRyYWNrSG9zdERpcmVjdGl2ZURlZihjb25maWdPckZuLCBtYXRjaGVkRGVmcywgaG9zdERpcmVjdGl2ZURlZnMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gdHJhY2tIb3N0RGlyZWN0aXZlRGVmKGRlZiwgbWF0Y2hlZERlZnMsIGhvc3REaXJlY3RpdmVEZWZzKSB7XG4gIGNvbnN0IGhvc3REaXJlY3RpdmVEZWYgPSBnZXREaXJlY3RpdmVEZWYoZGVmLmRpcmVjdGl2ZSk7XG4gIGlmICh0eXBlb2YgbmdEZXZNb2RlID09PSAndW5kZWZpbmVkJyB8fCBuZ0Rldk1vZGUpIHtcbiAgICB2YWxpZGF0ZUhvc3REaXJlY3RpdmUoZGVmLCBob3N0RGlyZWN0aXZlRGVmKTtcbiAgfVxuICBwYXRjaERlY2xhcmVkSW5wdXRzKGhvc3REaXJlY3RpdmVEZWYuZGVjbGFyZWRJbnB1dHMsIGRlZi5pbnB1dHMpO1xuICBmaW5kSG9zdERpcmVjdGl2ZURlZnMoaG9zdERpcmVjdGl2ZURlZiwgbWF0Y2hlZERlZnMsIGhvc3REaXJlY3RpdmVEZWZzKTtcbiAgaG9zdERpcmVjdGl2ZURlZnMuc2V0KGhvc3REaXJlY3RpdmVEZWYsIGRlZik7XG4gIG1hdGNoZWREZWZzLnB1c2goaG9zdERpcmVjdGl2ZURlZik7XG59XG5mdW5jdGlvbiBjcmVhdGVIb3N0RGlyZWN0aXZlRGVmKGNvbmZpZykge1xuICByZXR1cm4gdHlwZW9mIGNvbmZpZyA9PT0gJ2Z1bmN0aW9uJyA/IHtcbiAgICBkaXJlY3RpdmU6IHJlc29sdmVGb3J3YXJkUmVmKGNvbmZpZyksXG4gICAgaW5wdXRzOiBFTVBUWV9PQkosXG4gICAgb3V0cHV0czogRU1QVFlfT0JKXG4gIH0gOiB7XG4gICAgZGlyZWN0aXZlOiByZXNvbHZlRm9yd2FyZFJlZihjb25maWcuZGlyZWN0aXZlKSxcbiAgICBpbnB1dHM6IGJpbmRpbmdBcnJheVRvTWFwKGNvbmZpZy5pbnB1dHMpLFxuICAgIG91dHB1dHM6IGJpbmRpbmdBcnJheVRvTWFwKGNvbmZpZy5vdXRwdXRzKVxuICB9O1xufVxuZnVuY3Rpb24gYmluZGluZ0FycmF5VG9NYXAoYmluZGluZ3MpIHtcbiAgaWYgKGJpbmRpbmdzID09PSB1bmRlZmluZWQgfHwgYmluZGluZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIEVNUFRZX09CSjtcbiAgfVxuICBjb25zdCByZXN1bHQgPSB7fTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBiaW5kaW5ncy5sZW5ndGg7IGkgKz0gMikge1xuICAgIHJlc3VsdFtiaW5kaW5nc1tpXV0gPSBiaW5kaW5nc1tpICsgMV07XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cbmZ1bmN0aW9uIHBhdGNoRGVjbGFyZWRJbnB1dHMoZGVjbGFyZWRJbnB1dHMsIGV4cG9zZWRJbnB1dHMpIHtcbiAgZm9yIChjb25zdCBwdWJsaWNOYW1lIGluIGV4cG9zZWRJbnB1dHMpIHtcbiAgICBpZiAoZXhwb3NlZElucHV0cy5oYXNPd25Qcm9wZXJ0eShwdWJsaWNOYW1lKSkge1xuICAgICAgY29uc3QgcmVtYXBwZWRQdWJsaWNOYW1lID0gZXhwb3NlZElucHV0c1twdWJsaWNOYW1lXTtcbiAgICAgIGNvbnN0IHByaXZhdGVOYW1lID0gZGVjbGFyZWRJbnB1dHNbcHVibGljTmFtZV07XG4gICAgICBpZiAoKHR5cGVvZiBuZ0Rldk1vZGUgPT09ICd1bmRlZmluZWQnIHx8IG5nRGV2TW9kZSkgJiYgZGVjbGFyZWRJbnB1dHMuaGFzT3duUHJvcGVydHkocmVtYXBwZWRQdWJsaWNOYW1lKSkge1xuICAgICAgICBhc3NlcnRFcXVhbChkZWNsYXJlZElucHV0c1tyZW1hcHBlZFB1YmxpY05hbWVdLCBkZWNsYXJlZElucHV0c1twdWJsaWNOYW1lXSwgYENvbmZsaWN0aW5nIGhvc3QgZGlyZWN0aXZlIGlucHV0IGFsaWFzICR7cHVibGljTmFtZX0uYCk7XG4gICAgICB9XG4gICAgICBkZWNsYXJlZElucHV0c1tyZW1hcHBlZFB1YmxpY05hbWVdID0gcHJpdmF0ZU5hbWU7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiB2YWxpZGF0ZUhvc3REaXJlY3RpdmUoaG9zdERpcmVjdGl2ZUNvbmZpZywgZGlyZWN0aXZlRGVmKSB7XG4gIGNvbnN0IHR5cGUgPSBob3N0RGlyZWN0aXZlQ29uZmlnLmRpcmVjdGl2ZTtcbiAgaWYgKGRpcmVjdGl2ZURlZiA9PT0gbnVsbCkge1xuICAgIGlmIChnZXRDb21wb25lbnREZWYodHlwZSkgIT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBSdW50aW1lRXJyb3IoMzEwLCBgSG9zdCBkaXJlY3RpdmUgJHt0eXBlLm5hbWV9IGNhbm5vdCBiZSBhIGNvbXBvbmVudC5gKTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IFJ1bnRpbWVFcnJvcigzMDcsIGBDb3VsZCBub3QgcmVzb2x2ZSBtZXRhZGF0YSBmb3IgaG9zdCBkaXJlY3RpdmUgJHt0eXBlLm5hbWV9LiBgICsgYE1ha2Ugc3VyZSB0aGF0IHRoZSAke3R5cGUubmFtZX0gY2xhc3MgaXMgYW5ub3RhdGVkIHdpdGggYW4gQERpcmVjdGl2ZSBkZWNvcmF0b3IuYCk7XG4gIH1cbiAgaWYgKCFkaXJlY3RpdmVEZWYuc3RhbmRhbG9uZSkge1xuICAgIHRocm93IG5ldyBSdW50aW1lRXJyb3IoMzA4LCBgSG9zdCBkaXJlY3RpdmUgJHtkaXJlY3RpdmVEZWYudHlwZS5uYW1lfSBtdXN0IGJlIHN0YW5kYWxvbmUuYCk7XG4gIH1cbiAgdmFsaWRhdGVNYXBwaW5ncygnaW5wdXQnLCBkaXJlY3RpdmVEZWYsIGhvc3REaXJlY3RpdmVDb25maWcuaW5wdXRzKTtcbiAgdmFsaWRhdGVNYXBwaW5ncygnb3V0cHV0JywgZGlyZWN0aXZlRGVmLCBob3N0RGlyZWN0aXZlQ29uZmlnLm91dHB1dHMpO1xufVxuZnVuY3Rpb24gdmFsaWRhdGVNYXBwaW5ncyhiaW5kaW5nVHlwZSwgZGVmLCBob3N0RGlyZWN0aXZlQmluZGluZ3MpIHtcbiAgY29uc3QgY2xhc3NOYW1lID0gZGVmLnR5cGUubmFtZTtcbiAgY29uc3QgYmluZGluZ3MgPSBiaW5kaW5nVHlwZSA9PT0gJ2lucHV0JyA/IGRlZi5pbnB1dHMgOiBkZWYub3V0cHV0cztcbiAgZm9yIChjb25zdCBwdWJsaWNOYW1lIGluIGhvc3REaXJlY3RpdmVCaW5kaW5ncykge1xuICAgIGlmIChob3N0RGlyZWN0aXZlQmluZGluZ3MuaGFzT3duUHJvcGVydHkocHVibGljTmFtZSkpIHtcbiAgICAgIGlmICghYmluZGluZ3MuaGFzT3duUHJvcGVydHkocHVibGljTmFtZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFcnJvcigzMTEsIGBEaXJlY3RpdmUgJHtjbGFzc05hbWV9IGRvZXMgbm90IGhhdmUgYW4gJHtiaW5kaW5nVHlwZX0gd2l0aCBhIHB1YmxpYyBuYW1lIG9mICR7cHVibGljTmFtZX0uYCk7XG4gICAgICB9XG4gICAgICBjb25zdCByZW1hcHBlZFB1YmxpY05hbWUgPSBob3N0RGlyZWN0aXZlQmluZGluZ3NbcHVibGljTmFtZV07XG4gICAgICBpZiAoYmluZGluZ3MuaGFzT3duUHJvcGVydHkocmVtYXBwZWRQdWJsaWNOYW1lKSAmJiByZW1hcHBlZFB1YmxpY05hbWUgIT09IHB1YmxpY05hbWUpIHtcbiAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFcnJvcigzMTIsIGBDYW5ub3QgYWxpYXMgJHtiaW5kaW5nVHlwZX0gJHtwdWJsaWNOYW1lfSBvZiBob3N0IGRpcmVjdGl2ZSAke2NsYXNzTmFtZX0gdG8gJHtyZW1hcHBlZFB1YmxpY05hbWV9LCBiZWNhdXNlIGl0IGFscmVhZHkgaGFzIGEgZGlmZmVyZW50ICR7YmluZGluZ1R5cGV9IHdpdGggdGhlIHNhbWUgcHVibGljIG5hbWUuYCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBnZXRTdXBlclR5cGUodHlwZSkge1xuICByZXR1cm4gT2JqZWN0LmdldFByb3RvdHlwZU9mKHR5cGUucHJvdG90eXBlKS5jb25zdHJ1Y3Rvcjtcbn1cbmZ1bmN0aW9uIMm1ybVJbmhlcml0RGVmaW5pdGlvbkZlYXR1cmUoZGVmaW5pdGlvbikge1xuICBsZXQgc3VwZXJUeXBlID0gZ2V0U3VwZXJUeXBlKGRlZmluaXRpb24udHlwZSk7XG4gIGxldCBzaG91bGRJbmhlcml0RmllbGRzID0gdHJ1ZTtcbiAgY29uc3QgaW5oZXJpdGFuY2VDaGFpbiA9IFtkZWZpbml0aW9uXTtcbiAgd2hpbGUgKHN1cGVyVHlwZSkge1xuICAgIGxldCBzdXBlckRlZiA9IHVuZGVmaW5lZDtcbiAgICBpZiAoaXNDb21wb25lbnREZWYoZGVmaW5pdGlvbikpIHtcbiAgICAgIHN1cGVyRGVmID0gc3VwZXJUeXBlLsm1Y21wIHx8IHN1cGVyVHlwZS7JtWRpcjtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHN1cGVyVHlwZS7JtWNtcCkge1xuICAgICAgICB0aHJvdyBuZXcgUnVudGltZUVycm9yKDkwMywgbmdEZXZNb2RlICYmIGBEaXJlY3RpdmVzIGNhbm5vdCBpbmhlcml0IENvbXBvbmVudHMuIERpcmVjdGl2ZSAke3N0cmluZ2lmeUZvckVycm9yKGRlZmluaXRpb24udHlwZSl9IGlzIGF0dGVtcHRpbmcgdG8gZXh0ZW5kIGNvbXBvbmVudCAke3N0cmluZ2lmeUZvckVycm9yKHN1cGVyVHlwZSl9YCk7XG4gICAgICB9XG4gICAgICBzdXBlckRlZiA9IHN1cGVyVHlwZS7JtWRpcjtcbiAgICB9XG4gICAgaWYgKHN1cGVyRGVmKSB7XG4gICAgICBpZiAoc2hvdWxkSW5oZXJpdEZpZWxkcykge1xuICAgICAgICBpbmhlcml0YW5jZUNoYWluLnB1c2goc3VwZXJEZWYpO1xuICAgICAgICBjb25zdCB3cml0ZWFibGVEZWYgPSBkZWZpbml0aW9uO1xuICAgICAgICB3cml0ZWFibGVEZWYuaW5wdXRzID0gbWF5YmVVbndyYXBFbXB0eShkZWZpbml0aW9uLmlucHV0cyk7XG4gICAgICAgIHdyaXRlYWJsZURlZi5kZWNsYXJlZElucHV0cyA9IG1heWJlVW53cmFwRW1wdHkoZGVmaW5pdGlvbi5kZWNsYXJlZElucHV0cyk7XG4gICAgICAgIHdyaXRlYWJsZURlZi5vdXRwdXRzID0gbWF5YmVVbndyYXBFbXB0eShkZWZpbml0aW9uLm91dHB1dHMpO1xuICAgICAgICBjb25zdCBzdXBlckhvc3RCaW5kaW5ncyA9IHN1cGVyRGVmLmhvc3RCaW5kaW5ncztcbiAgICAgICAgc3VwZXJIb3N0QmluZGluZ3MgJiYgaW5oZXJpdEhvc3RCaW5kaW5ncyhkZWZpbml0aW9uLCBzdXBlckhvc3RCaW5kaW5ncyk7XG4gICAgICAgIGNvbnN0IHN1cGVyVmlld1F1ZXJ5ID0gc3VwZXJEZWYudmlld1F1ZXJ5O1xuICAgICAgICBjb25zdCBzdXBlckNvbnRlbnRRdWVyaWVzID0gc3VwZXJEZWYuY29udGVudFF1ZXJpZXM7XG4gICAgICAgIHN1cGVyVmlld1F1ZXJ5ICYmIGluaGVyaXRWaWV3UXVlcnkoZGVmaW5pdGlvbiwgc3VwZXJWaWV3UXVlcnkpO1xuICAgICAgICBzdXBlckNvbnRlbnRRdWVyaWVzICYmIGluaGVyaXRDb250ZW50UXVlcmllcyhkZWZpbml0aW9uLCBzdXBlckNvbnRlbnRRdWVyaWVzKTtcbiAgICAgICAgbWVyZ2VJbnB1dHNXaXRoVHJhbnNmb3JtcyhkZWZpbml0aW9uLCBzdXBlckRlZik7XG4gICAgICAgIGZpbGxQcm9wZXJ0aWVzKGRlZmluaXRpb24ub3V0cHV0cywgc3VwZXJEZWYub3V0cHV0cyk7XG4gICAgICAgIGlmIChpc0NvbXBvbmVudERlZihzdXBlckRlZikgJiYgc3VwZXJEZWYuZGF0YS5hbmltYXRpb24pIHtcbiAgICAgICAgICBjb25zdCBkZWZEYXRhID0gZGVmaW5pdGlvbi5kYXRhO1xuICAgICAgICAgIGRlZkRhdGEuYW5pbWF0aW9uID0gKGRlZkRhdGEuYW5pbWF0aW9uIHx8IFtdKS5jb25jYXQoc3VwZXJEZWYuZGF0YS5hbmltYXRpb24pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb25zdCBmZWF0dXJlcyA9IHN1cGVyRGVmLmZlYXR1cmVzO1xuICAgICAgaWYgKGZlYXR1cmVzKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmVhdHVyZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBmZWF0dXJlID0gZmVhdHVyZXNbaV07XG4gICAgICAgICAgaWYgKGZlYXR1cmUgJiYgZmVhdHVyZS5uZ0luaGVyaXQpIHtcbiAgICAgICAgICAgIGZlYXR1cmUoZGVmaW5pdGlvbik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChmZWF0dXJlID09PSDJtcm1SW5oZXJpdERlZmluaXRpb25GZWF0dXJlKSB7XG4gICAgICAgICAgICBzaG91bGRJbmhlcml0RmllbGRzID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHN1cGVyVHlwZSA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihzdXBlclR5cGUpO1xuICB9XG4gIG1lcmdlSG9zdEF0dHJzQWNyb3NzSW5oZXJpdGFuY2UoaW5oZXJpdGFuY2VDaGFpbik7XG59XG5mdW5jdGlvbiBtZXJnZUlucHV0c1dpdGhUcmFuc2Zvcm1zKHRhcmdldCwgc291cmNlKSB7XG4gIGZvciAoY29uc3Qga2V5IGluIHNvdXJjZS5pbnB1dHMpIHtcbiAgICBpZiAoIXNvdXJjZS5pbnB1dHMuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmICh0YXJnZXQuaW5wdXRzLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCB2YWx1ZSA9IHNvdXJjZS5pbnB1dHNba2V5XTtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGFyZ2V0LmlucHV0c1trZXldID0gdmFsdWU7XG4gICAgICB0YXJnZXQuZGVjbGFyZWRJbnB1dHNba2V5XSA9IHNvdXJjZS5kZWNsYXJlZElucHV0c1trZXldO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gbWVyZ2VIb3N0QXR0cnNBY3Jvc3NJbmhlcml0YW5jZShpbmhlcml0YW5jZUNoYWluKSB7XG4gIGxldCBob3N0VmFycyA9IDA7XG4gIGxldCBob3N0QXR0cnMgPSBudWxsO1xuICBmb3IgKGxldCBpID0gaW5oZXJpdGFuY2VDaGFpbi5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGNvbnN0IGRlZiA9IGluaGVyaXRhbmNlQ2hhaW5baV07XG4gICAgZGVmLmhvc3RWYXJzID0gaG9zdFZhcnMgKz0gZGVmLmhvc3RWYXJzO1xuICAgIGRlZi5ob3N0QXR0cnMgPSBtZXJnZUhvc3RBdHRycyhkZWYuaG9zdEF0dHJzLCBob3N0QXR0cnMgPSBtZXJnZUhvc3RBdHRycyhob3N0QXR0cnMsIGRlZi5ob3N0QXR0cnMpKTtcbiAgfVxufVxuZnVuY3Rpb24gbWF5YmVVbndyYXBFbXB0eSh2YWx1ZSkge1xuICBpZiAodmFsdWUgPT09IEVNUFRZX09CSikge1xuICAgIHJldHVybiB7fTtcbiAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gRU1QVFlfQVJSQVkpIHtcbiAgICByZXR1cm4gW107XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG59XG5mdW5jdGlvbiBpbmhlcml0Vmlld1F1ZXJ5KGRlZmluaXRpb24sIHN1cGVyVmlld1F1ZXJ5KSB7XG4gIGNvbnN0IHByZXZWaWV3UXVlcnkgPSBkZWZpbml0aW9uLnZpZXdRdWVyeTtcbiAgaWYgKHByZXZWaWV3UXVlcnkpIHtcbiAgICBkZWZpbml0aW9uLnZpZXdRdWVyeSA9IChyZiwgY3R4KSA9PiB7XG4gICAgICBzdXBlclZpZXdRdWVyeShyZiwgY3R4KTtcbiAgICAgIHByZXZWaWV3UXVlcnkocmYsIGN0eCk7XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBkZWZpbml0aW9uLnZpZXdRdWVyeSA9IHN1cGVyVmlld1F1ZXJ5O1xuICB9XG59XG5mdW5jdGlvbiBpbmhlcml0Q29udGVudFF1ZXJpZXMoZGVmaW5pdGlvbiwgc3VwZXJDb250ZW50UXVlcmllcykge1xuICBjb25zdCBwcmV2Q29udGVudFF1ZXJpZXMgPSBkZWZpbml0aW9uLmNvbnRlbnRRdWVyaWVzO1xuICBpZiAocHJldkNvbnRlbnRRdWVyaWVzKSB7XG4gICAgZGVmaW5pdGlvbi5jb250ZW50UXVlcmllcyA9IChyZiwgY3R4LCBkaXJlY3RpdmVJbmRleCkgPT4ge1xuICAgICAgc3VwZXJDb250ZW50UXVlcmllcyhyZiwgY3R4LCBkaXJlY3RpdmVJbmRleCk7XG4gICAgICBwcmV2Q29udGVudFF1ZXJpZXMocmYsIGN0eCwgZGlyZWN0aXZlSW5kZXgpO1xuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgZGVmaW5pdGlvbi5jb250ZW50UXVlcmllcyA9IHN1cGVyQ29udGVudFF1ZXJpZXM7XG4gIH1cbn1cbmZ1bmN0aW9uIGluaGVyaXRIb3N0QmluZGluZ3MoZGVmaW5pdGlvbiwgc3VwZXJIb3N0QmluZGluZ3MpIHtcbiAgY29uc3QgcHJldkhvc3RCaW5kaW5ncyA9IGRlZmluaXRpb24uaG9zdEJpbmRpbmdzO1xuICBpZiAocHJldkhvc3RCaW5kaW5ncykge1xuICAgIGRlZmluaXRpb24uaG9zdEJpbmRpbmdzID0gKHJmLCBjdHgpID0+IHtcbiAgICAgIHN1cGVySG9zdEJpbmRpbmdzKHJmLCBjdHgpO1xuICAgICAgcHJldkhvc3RCaW5kaW5ncyhyZiwgY3R4KTtcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIGRlZmluaXRpb24uaG9zdEJpbmRpbmdzID0gc3VwZXJIb3N0QmluZGluZ3M7XG4gIH1cbn1cbmZ1bmN0aW9uIHRlbXBsYXRlQ3JlYXRlKHROb2RlLCBkZWNsYXJhdGlvbkxWaWV3LCBkZWNsYXJhdGlvblRWaWV3LCBpbmRleCwgdGVtcGxhdGVGbiwgZGVjbHMsIHZhcnMsIGZsYWdzKSB7XG4gIGlmIChkZWNsYXJhdGlvblRWaWV3LmZpcnN0Q3JlYXRlUGFzcykge1xuICAgIHROb2RlLm1lcmdlZEF0dHJzID0gbWVyZ2VIb3N0QXR0cnModE5vZGUubWVyZ2VkQXR0cnMsIHROb2RlLmF0dHJzKTtcbiAgICBjb25zdCBlbWJlZGRlZFRWaWV3ID0gdE5vZGUudFZpZXcgPSBjcmVhdGVUVmlldygyLCB0Tm9kZSwgdGVtcGxhdGVGbiwgZGVjbHMsIHZhcnMsIGRlY2xhcmF0aW9uVFZpZXcuZGlyZWN0aXZlUmVnaXN0cnksIGRlY2xhcmF0aW9uVFZpZXcucGlwZVJlZ2lzdHJ5LCBudWxsLCBkZWNsYXJhdGlvblRWaWV3LnNjaGVtYXMsIGRlY2xhcmF0aW9uVFZpZXcuY29uc3RzLCBudWxsKTtcbiAgICBpZiAoZGVjbGFyYXRpb25UVmlldy5xdWVyaWVzICE9PSBudWxsKSB7XG4gICAgICBkZWNsYXJhdGlvblRWaWV3LnF1ZXJpZXMudGVtcGxhdGUoZGVjbGFyYXRpb25UVmlldywgdE5vZGUpO1xuICAgICAgZW1iZWRkZWRUVmlldy5xdWVyaWVzID0gZGVjbGFyYXRpb25UVmlldy5xdWVyaWVzLmVtYmVkZGVkVFZpZXcodE5vZGUpO1xuICAgIH1cbiAgfVxuICBpZiAoZmxhZ3MpIHtcbiAgICB0Tm9kZS5mbGFncyB8PSBmbGFncztcbiAgfVxuICBzZXRDdXJyZW50VE5vZGUodE5vZGUsIGZhbHNlKTtcbiAgY29uc3QgY29tbWVudCA9IF9sb2NhdGVPckNyZWF0ZUNvbnRhaW5lckFuY2hvcihkZWNsYXJhdGlvblRWaWV3LCBkZWNsYXJhdGlvbkxWaWV3LCB0Tm9kZSwgaW5kZXgpO1xuICBpZiAod2FzTGFzdE5vZGVDcmVhdGVkKCkpIHtcbiAgICBhcHBlbmRDaGlsZChkZWNsYXJhdGlvblRWaWV3LCBkZWNsYXJhdGlvbkxWaWV3LCBjb21tZW50LCB0Tm9kZSk7XG4gIH1cbiAgYXR0YWNoUGF0Y2hEYXRhKGNvbW1lbnQsIGRlY2xhcmF0aW9uTFZpZXcpO1xuICBjb25zdCBsQ29udGFpbmVyID0gY3JlYXRlTENvbnRhaW5lcihjb21tZW50LCBkZWNsYXJhdGlvbkxWaWV3LCBjb21tZW50LCB0Tm9kZSk7XG4gIGRlY2xhcmF0aW9uTFZpZXdbaW5kZXggKyBIRUFERVJfT0ZGU0VUXSA9IGxDb250YWluZXI7XG4gIGFkZFRvRW5kT2ZWaWV3VHJlZShkZWNsYXJhdGlvbkxWaWV3LCBsQ29udGFpbmVyKTtcbiAgcG9wdWxhdGVEZWh5ZHJhdGVkVmlld3NJbkxDb250YWluZXIobENvbnRhaW5lciwgdE5vZGUsIGRlY2xhcmF0aW9uTFZpZXcpO1xufVxuZnVuY3Rpb24gZGVjbGFyZURpcmVjdGl2ZUhvc3RUZW1wbGF0ZShkZWNsYXJhdGlvbkxWaWV3LCBkZWNsYXJhdGlvblRWaWV3LCBpbmRleCwgdGVtcGxhdGVGbiwgZGVjbHMsIHZhcnMsIHRhZ05hbWUsIGF0dHJzLCBmbGFncywgbG9jYWxSZWZzSW5kZXgsIGxvY2FsUmVmRXh0cmFjdG9yKSB7XG4gIGNvbnN0IGFkanVzdGVkSW5kZXggPSBpbmRleCArIEhFQURFUl9PRkZTRVQ7XG4gIGxldCB0Tm9kZTtcbiAgaWYgKGRlY2xhcmF0aW9uVFZpZXcuZmlyc3RDcmVhdGVQYXNzKSB7XG4gICAgdE5vZGUgPSBnZXRPckNyZWF0ZVROb2RlKGRlY2xhcmF0aW9uVFZpZXcsIGFkanVzdGVkSW5kZXgsIDQsIHRhZ05hbWUgfHwgbnVsbCwgYXR0cnMgfHwgbnVsbCk7XG4gICAgaWYgKGdldEJpbmRpbmdzRW5hYmxlZCgpKSB7XG4gICAgICByZXNvbHZlRGlyZWN0aXZlcyhkZWNsYXJhdGlvblRWaWV3LCBkZWNsYXJhdGlvbkxWaWV3LCB0Tm9kZSwgZ2V0Q29uc3RhbnQoZGVjbGFyYXRpb25UVmlldy5jb25zdHMsIGxvY2FsUmVmc0luZGV4KSwgZmluZERpcmVjdGl2ZURlZk1hdGNoZXMpO1xuICAgIH1cbiAgICByZWdpc3RlclBvc3RPcmRlckhvb2tzKGRlY2xhcmF0aW9uVFZpZXcsIHROb2RlKTtcbiAgfSBlbHNlIHtcbiAgICB0Tm9kZSA9IGRlY2xhcmF0aW9uVFZpZXcuZGF0YVthZGp1c3RlZEluZGV4XTtcbiAgfVxuICB0ZW1wbGF0ZUNyZWF0ZSh0Tm9kZSwgZGVjbGFyYXRpb25MVmlldywgZGVjbGFyYXRpb25UVmlldywgaW5kZXgsIHRlbXBsYXRlRm4sIGRlY2xzLCB2YXJzLCBmbGFncyk7XG4gIGlmIChpc0RpcmVjdGl2ZUhvc3QodE5vZGUpKSB7XG4gICAgY3JlYXRlRGlyZWN0aXZlc0luc3RhbmNlcyhkZWNsYXJhdGlvblRWaWV3LCBkZWNsYXJhdGlvbkxWaWV3LCB0Tm9kZSk7XG4gIH1cbiAgaWYgKGxvY2FsUmVmc0luZGV4ICE9IG51bGwpIHtcbiAgICBzYXZlUmVzb2x2ZWRMb2NhbHNJbkRhdGEoZGVjbGFyYXRpb25MVmlldywgdE5vZGUsIGxvY2FsUmVmRXh0cmFjdG9yKTtcbiAgfVxuICByZXR1cm4gdE5vZGU7XG59XG5mdW5jdGlvbiBkZWNsYXJlTm9EaXJlY3RpdmVIb3N0VGVtcGxhdGUoZGVjbGFyYXRpb25MVmlldywgZGVjbGFyYXRpb25UVmlldywgaW5kZXgsIHRlbXBsYXRlRm4sIGRlY2xzLCB2YXJzLCB0YWdOYW1lLCBhdHRycywgZmxhZ3MsIGxvY2FsUmVmc0luZGV4LCBsb2NhbFJlZkV4dHJhY3Rvcikge1xuICBjb25zdCBhZGp1c3RlZEluZGV4ID0gaW5kZXggKyBIRUFERVJfT0ZGU0VUO1xuICBsZXQgdE5vZGU7XG4gIGlmIChkZWNsYXJhdGlvblRWaWV3LmZpcnN0Q3JlYXRlUGFzcykge1xuICAgIHROb2RlID0gZ2V0T3JDcmVhdGVUTm9kZShkZWNsYXJhdGlvblRWaWV3LCBhZGp1c3RlZEluZGV4LCA0LCB0YWdOYW1lIHx8IG51bGwsIGF0dHJzIHx8IG51bGwpO1xuICAgIGlmIChsb2NhbFJlZnNJbmRleCAhPSBudWxsKSB7XG4gICAgICBjb25zdCByZWZzID0gZ2V0Q29uc3RhbnQoZGVjbGFyYXRpb25UVmlldy5jb25zdHMsIGxvY2FsUmVmc0luZGV4KTtcbiAgICAgIHROb2RlLmxvY2FsTmFtZXMgPSBbXTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVmcy5sZW5ndGg7IGkgKz0gMikge1xuICAgICAgICB0Tm9kZS5sb2NhbE5hbWVzLnB1c2gocmVmc1tpXSwgLTEpO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0Tm9kZSA9IGRlY2xhcmF0aW9uVFZpZXcuZGF0YVthZGp1c3RlZEluZGV4XTtcbiAgfVxuICB0ZW1wbGF0ZUNyZWF0ZSh0Tm9kZSwgZGVjbGFyYXRpb25MVmlldywgZGVjbGFyYXRpb25UVmlldywgaW5kZXgsIHRlbXBsYXRlRm4sIGRlY2xzLCB2YXJzLCBmbGFncyk7XG4gIGlmIChsb2NhbFJlZnNJbmRleCAhPSBudWxsKSB7XG4gICAgc2F2ZVJlc29sdmVkTG9jYWxzSW5EYXRhKGRlY2xhcmF0aW9uTFZpZXcsIHROb2RlLCBsb2NhbFJlZkV4dHJhY3Rvcik7XG4gIH1cbiAgcmV0dXJuIHROb2RlO1xufVxuZnVuY3Rpb24gybXJtXRlbXBsYXRlKGluZGV4LCB0ZW1wbGF0ZUZuLCBkZWNscywgdmFycywgdGFnTmFtZSwgYXR0cnNJbmRleCwgbG9jYWxSZWZzSW5kZXgsIGxvY2FsUmVmRXh0cmFjdG9yKSB7XG4gIGNvbnN0IGxWaWV3ID0gZ2V0TFZpZXcoKTtcbiAgY29uc3QgdFZpZXcgPSBnZXRUVmlldygpO1xuICBjb25zdCBhdHRycyA9IGdldENvbnN0YW50KHRWaWV3LmNvbnN0cywgYXR0cnNJbmRleCk7XG4gIGRlY2xhcmVEaXJlY3RpdmVIb3N0VGVtcGxhdGUobFZpZXcsIHRWaWV3LCBpbmRleCwgdGVtcGxhdGVGbiwgZGVjbHMsIHZhcnMsIHRhZ05hbWUsIGF0dHJzLCB1bmRlZmluZWQsIGxvY2FsUmVmc0luZGV4LCBsb2NhbFJlZkV4dHJhY3Rvcik7XG4gIHJldHVybiDJtcm1dGVtcGxhdGU7XG59XG5mdW5jdGlvbiDJtcm1ZG9tVGVtcGxhdGUoaW5kZXgsIHRlbXBsYXRlRm4sIGRlY2xzLCB2YXJzLCB0YWdOYW1lLCBhdHRyc0luZGV4LCBsb2NhbFJlZnNJbmRleCwgbG9jYWxSZWZFeHRyYWN0b3IpIHtcbiAgY29uc3QgbFZpZXcgPSBnZXRMVmlldygpO1xuICBjb25zdCB0VmlldyA9IGdldFRWaWV3KCk7XG4gIGNvbnN0IGF0dHJzID0gZ2V0Q29uc3RhbnQodFZpZXcuY29uc3RzLCBhdHRyc0luZGV4KTtcbiAgZGVjbGFyZU5vRGlyZWN0aXZlSG9zdFRlbXBsYXRlKGxWaWV3LCB0VmlldywgaW5kZXgsIHRlbXBsYXRlRm4sIGRlY2xzLCB2YXJzLCB0YWdOYW1lLCBhdHRycywgdW5kZWZpbmVkLCBsb2NhbFJlZnNJbmRleCwgbG9jYWxSZWZFeHRyYWN0b3IpO1xuICByZXR1cm4gybXJtWRvbVRlbXBsYXRlO1xufVxubGV0IF9sb2NhdGVPckNyZWF0ZUNvbnRhaW5lckFuY2hvciA9IGNyZWF0ZUNvbnRhaW5lckFuY2hvckltcGw7XG5mdW5jdGlvbiBjcmVhdGVDb250YWluZXJBbmNob3JJbXBsKHRWaWV3LCBsVmlldywgdE5vZGUsIGluZGV4KSB7XG4gIGxhc3ROb2RlV2FzQ3JlYXRlZCh0cnVlKTtcbiAgcmV0dXJuIGxWaWV3W1JFTkRFUkVSXS5jcmVhdGVDb21tZW50KG5nRGV2TW9kZSA/ICdjb250YWluZXInIDogJycpO1xufVxuZnVuY3Rpb24gbG9jYXRlT3JDcmVhdGVDb250YWluZXJBbmNob3JJbXBsKHRWaWV3LCBsVmlldywgdE5vZGUsIGluZGV4KSB7XG4gIGNvbnN0IGlzTm9kZUNyZWF0aW9uTW9kZSA9ICFjYW5IeWRyYXRlTm9kZShsVmlldywgdE5vZGUpO1xuICBsYXN0Tm9kZVdhc0NyZWF0ZWQoaXNOb2RlQ3JlYXRpb25Nb2RlKTtcbiAgY29uc3Qgc3NySWQgPSBsVmlld1tIWURSQVRJT05dPy5kYXRhW1RFTVBMQVRFU10/LltpbmRleF0gPz8gbnVsbDtcbiAgaWYgKHNzcklkICE9PSBudWxsICYmIHROb2RlLnRWaWV3ICE9PSBudWxsKSB7XG4gICAgaWYgKHROb2RlLnRWaWV3LnNzcklkID09PSBudWxsKSB7XG4gICAgICB0Tm9kZS50Vmlldy5zc3JJZCA9IHNzcklkO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZ0Rldk1vZGUgJiYgYXNzZXJ0RXF1YWwodE5vZGUudFZpZXcuc3NySWQsIHNzcklkLCAnVW5leHBlY3RlZCB2YWx1ZSBvZiB0aGUgYHNzcklkYCBmb3IgdGhpcyBUVmlldycpO1xuICAgIH1cbiAgfVxuICBpZiAoaXNOb2RlQ3JlYXRpb25Nb2RlKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUNvbnRhaW5lckFuY2hvckltcGwodFZpZXcsIGxWaWV3KTtcbiAgfVxuICBjb25zdCBoeWRyYXRpb25JbmZvID0gbFZpZXdbSFlEUkFUSU9OXTtcbiAgY29uc3QgY3VycmVudFJOb2RlID0gbG9jYXRlTmV4dFJOb2RlKGh5ZHJhdGlvbkluZm8sIHRWaWV3LCBsVmlldywgdE5vZGUpO1xuICBuZ0Rldk1vZGUgJiYgdmFsaWRhdGVOb2RlRXhpc3RzKGN1cnJlbnRSTm9kZSwgbFZpZXcsIHROb2RlKTtcbiAgc2V0U2VnbWVudEhlYWQoaHlkcmF0aW9uSW5mbywgaW5kZXgsIGN1cnJlbnRSTm9kZSk7XG4gIGNvbnN0IHZpZXdDb250YWluZXJTaXplID0gY2FsY1NlcmlhbGl6ZWRDb250YWluZXJTaXplKGh5ZHJhdGlvbkluZm8sIGluZGV4KTtcbiAgY29uc3QgY29tbWVudCA9IHNpYmxpbmdBZnRlcih2aWV3Q29udGFpbmVyU2l6ZSwgY3VycmVudFJOb2RlKTtcbiAgaWYgKG5nRGV2TW9kZSkge1xuICAgIHZhbGlkYXRlTWF0Y2hpbmdOb2RlKGNvbW1lbnQsIE5vZGUuQ09NTUVOVF9OT0RFLCBudWxsLCBsVmlldywgdE5vZGUpO1xuICAgIG1hcmtSTm9kZUFzQ2xhaW1lZEJ5SHlkcmF0aW9uKGNvbW1lbnQpO1xuICB9XG4gIHJldHVybiBjb21tZW50O1xufVxuZnVuY3Rpb24gZW5hYmxlTG9jYXRlT3JDcmVhdGVDb250YWluZXJBbmNob3JJbXBsKCkge1xuICBfbG9jYXRlT3JDcmVhdGVDb250YWluZXJBbmNob3IgPSBsb2NhdGVPckNyZWF0ZUNvbnRhaW5lckFuY2hvckltcGw7XG59XG52YXIgRGVmZXJEZXBlbmRlbmNpZXNMb2FkaW5nU3RhdGUgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKERlZmVyRGVwZW5kZW5jaWVzTG9hZGluZ1N0YXRlKSB7XG4gIERlZmVyRGVwZW5kZW5jaWVzTG9hZGluZ1N0YXRlW0RlZmVyRGVwZW5kZW5jaWVzTG9hZGluZ1N0YXRlW1wiTk9UX1NUQVJURURcIl0gPSAwXSA9IFwiTk9UX1NUQVJURURcIjtcbiAgRGVmZXJEZXBlbmRlbmNpZXNMb2FkaW5nU3RhdGVbRGVmZXJEZXBlbmRlbmNpZXNMb2FkaW5nU3RhdGVbXCJJTl9QUk9HUkVTU1wiXSA9IDFdID0gXCJJTl9QUk9HUkVTU1wiO1xuICBEZWZlckRlcGVuZGVuY2llc0xvYWRpbmdTdGF0ZVtEZWZlckRlcGVuZGVuY2llc0xvYWRpbmdTdGF0ZVtcIkNPTVBMRVRFXCJdID0gMl0gPSBcIkNPTVBMRVRFXCI7XG4gIERlZmVyRGVwZW5kZW5jaWVzTG9hZGluZ1N0YXRlW0RlZmVyRGVwZW5kZW5jaWVzTG9hZGluZ1N0YXRlW1wiRkFJTEVEXCJdID0gM10gPSBcIkZBSUxFRFwiO1xuICByZXR1cm4gRGVmZXJEZXBlbmRlbmNpZXNMb2FkaW5nU3RhdGU7XG59KERlZmVyRGVwZW5kZW5jaWVzTG9hZGluZ1N0YXRlIHx8IHt9KTtcbmNvbnN0IE1JTklNVU1fU0xPVCA9IDA7XG5jb25zdCBMT0FESU5HX0FGVEVSX1NMT1QgPSAxO1xudmFyIERlZmVyQmxvY2tTdGF0ZSA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoRGVmZXJCbG9ja1N0YXRlKSB7XG4gIERlZmVyQmxvY2tTdGF0ZVtEZWZlckJsb2NrU3RhdGVbXCJQbGFjZWhvbGRlclwiXSA9IDBdID0gXCJQbGFjZWhvbGRlclwiO1xuICBEZWZlckJsb2NrU3RhdGVbRGVmZXJCbG9ja1N0YXRlW1wiTG9hZGluZ1wiXSA9IDFdID0gXCJMb2FkaW5nXCI7XG4gIERlZmVyQmxvY2tTdGF0ZVtEZWZlckJsb2NrU3RhdGVbXCJDb21wbGV0ZVwiXSA9IDJdID0gXCJDb21wbGV0ZVwiO1xuICBEZWZlckJsb2NrU3RhdGVbRGVmZXJCbG9ja1N0YXRlW1wiRXJyb3JcIl0gPSAzXSA9IFwiRXJyb3JcIjtcbiAgcmV0dXJuIERlZmVyQmxvY2tTdGF0ZTtcbn0oRGVmZXJCbG9ja1N0YXRlIHx8IHt9KTtcbnZhciBEZWZlckJsb2NrSW50ZXJuYWxTdGF0ZSA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoRGVmZXJCbG9ja0ludGVybmFsU3RhdGUpIHtcbiAgRGVmZXJCbG9ja0ludGVybmFsU3RhdGVbRGVmZXJCbG9ja0ludGVybmFsU3RhdGVbXCJJbml0aWFsXCJdID0gLTFdID0gXCJJbml0aWFsXCI7XG4gIHJldHVybiBEZWZlckJsb2NrSW50ZXJuYWxTdGF0ZTtcbn0oRGVmZXJCbG9ja0ludGVybmFsU3RhdGUgfHwge30pO1xuY29uc3QgTkVYVF9ERUZFUl9CTE9DS19TVEFURSA9IDA7XG5jb25zdCBERUZFUl9CTE9DS19TVEFURSA9IDE7XG5jb25zdCBTVEFURV9JU19GUk9aRU5fVU5USUwgPSAyO1xuY29uc3QgTE9BRElOR19BRlRFUl9DTEVBTlVQX0ZOID0gMztcbmNvbnN0IFRSSUdHRVJfQ0xFQU5VUF9GTlMgPSA0O1xuY29uc3QgUFJFRkVUQ0hfVFJJR0dFUl9DTEVBTlVQX0ZOUyA9IDU7XG5jb25zdCBTU1JfVU5JUVVFX0lEID0gNjtcbmNvbnN0IFNTUl9CTE9DS19TVEFURSA9IDc7XG5jb25zdCBPTl9DT01QTEVURV9GTlMgPSA4O1xuY29uc3QgSFlEUkFURV9UUklHR0VSX0NMRUFOVVBfRk5TID0gOTtcbnZhciBEZWZlckJsb2NrQmVoYXZpb3IgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKERlZmVyQmxvY2tCZWhhdmlvcikge1xuICBEZWZlckJsb2NrQmVoYXZpb3JbRGVmZXJCbG9ja0JlaGF2aW9yW1wiTWFudWFsXCJdID0gMF0gPSBcIk1hbnVhbFwiO1xuICBEZWZlckJsb2NrQmVoYXZpb3JbRGVmZXJCbG9ja0JlaGF2aW9yW1wiUGxheXRocm91Z2hcIl0gPSAxXSA9IFwiUGxheXRocm91Z2hcIjtcbiAgcmV0dXJuIERlZmVyQmxvY2tCZWhhdmlvcjtcbn0oRGVmZXJCbG9ja0JlaGF2aW9yIHx8IHt9KTtcbmZ1bmN0aW9uIHN0b3JlVHJpZ2dlckNsZWFudXBGbih0eXBlLCBsRGV0YWlscywgY2xlYW51cEZuKSB7XG4gIGNvbnN0IGtleSA9IGdldENsZWFudXBGbktleUJ5VHlwZSh0eXBlKTtcbiAgaWYgKGxEZXRhaWxzW2tleV0gPT09IG51bGwpIHtcbiAgICBsRGV0YWlsc1trZXldID0gW107XG4gIH1cbiAgbERldGFpbHNba2V5XS5wdXNoKGNsZWFudXBGbik7XG59XG5mdW5jdGlvbiBpbnZva2VUcmlnZ2VyQ2xlYW51cEZucyh0eXBlLCBsRGV0YWlscykge1xuICBjb25zdCBrZXkgPSBnZXRDbGVhbnVwRm5LZXlCeVR5cGUodHlwZSk7XG4gIGNvbnN0IGNsZWFudXBGbnMgPSBsRGV0YWlsc1trZXldO1xuICBpZiAoY2xlYW51cEZucyAhPT0gbnVsbCkge1xuICAgIGZvciAoY29uc3QgY2xlYW51cEZuIG9mIGNsZWFudXBGbnMpIHtcbiAgICAgIGNsZWFudXBGbigpO1xuICAgIH1cbiAgICBsRGV0YWlsc1trZXldID0gbnVsbDtcbiAgfVxufVxuZnVuY3Rpb24gaW52b2tlQWxsVHJpZ2dlckNsZWFudXBGbnMobERldGFpbHMpIHtcbiAgaW52b2tlVHJpZ2dlckNsZWFudXBGbnMoMSwgbERldGFpbHMpO1xuICBpbnZva2VUcmlnZ2VyQ2xlYW51cEZucygwLCBsRGV0YWlscyk7XG4gIGludm9rZVRyaWdnZXJDbGVhbnVwRm5zKDIsIGxEZXRhaWxzKTtcbn1cbmZ1bmN0aW9uIGdldENsZWFudXBGbktleUJ5VHlwZSh0eXBlKSB7XG4gIGxldCBrZXkgPSBUUklHR0VSX0NMRUFOVVBfRk5TO1xuICBpZiAodHlwZSA9PT0gMSkge1xuICAgIGtleSA9IFBSRUZFVENIX1RSSUdHRVJfQ0xFQU5VUF9GTlM7XG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gMikge1xuICAgIGtleSA9IEhZRFJBVEVfVFJJR0dFUl9DTEVBTlVQX0ZOUztcbiAgfVxuICByZXR1cm4ga2V5O1xufVxuZnVuY3Rpb24gZ2V0RGVmZXJCbG9ja0RhdGFJbmRleChkZWZlckJsb2NrSW5kZXgpIHtcbiAgcmV0dXJuIGRlZmVyQmxvY2tJbmRleCArIDE7XG59XG5mdW5jdGlvbiBnZXRMRGVmZXJCbG9ja0RldGFpbHMobFZpZXcsIHROb2RlKSB7XG4gIGNvbnN0IHRWaWV3ID0gbFZpZXdbVFZJRVddO1xuICBjb25zdCBzbG90SW5kZXggPSBnZXREZWZlckJsb2NrRGF0YUluZGV4KHROb2RlLmluZGV4KTtcbiAgbmdEZXZNb2RlICYmIGFzc2VydEluZGV4SW5EZWNsUmFuZ2UodFZpZXcsIHNsb3RJbmRleCk7XG4gIHJldHVybiBsVmlld1tzbG90SW5kZXhdO1xufVxuZnVuY3Rpb24gc2V0TERlZmVyQmxvY2tEZXRhaWxzKGxWaWV3LCBkZWZlckJsb2NrSW5kZXgsIGxEZXRhaWxzKSB7XG4gIGNvbnN0IHRWaWV3ID0gbFZpZXdbVFZJRVddO1xuICBjb25zdCBzbG90SW5kZXggPSBnZXREZWZlckJsb2NrRGF0YUluZGV4KGRlZmVyQmxvY2tJbmRleCk7XG4gIG5nRGV2TW9kZSAmJiBhc3NlcnRJbmRleEluRGVjbFJhbmdlKHRWaWV3LCBzbG90SW5kZXgpO1xuICBsVmlld1tzbG90SW5kZXhdID0gbERldGFpbHM7XG59XG5mdW5jdGlvbiBnZXRURGVmZXJCbG9ja0RldGFpbHModFZpZXcsIHROb2RlKSB7XG4gIGNvbnN0IHNsb3RJbmRleCA9IGdldERlZmVyQmxvY2tEYXRhSW5kZXgodE5vZGUuaW5kZXgpO1xuICBuZ0Rldk1vZGUgJiYgYXNzZXJ0SW5kZXhJbkRlY2xSYW5nZSh0Vmlldywgc2xvdEluZGV4KTtcbiAgcmV0dXJuIHRWaWV3LmRhdGFbc2xvdEluZGV4XTtcbn1cbmZ1bmN0aW9uIHNldFREZWZlckJsb2NrRGV0YWlscyh0VmlldywgZGVmZXJCbG9ja0luZGV4LCBkZWZlckJsb2NrQ29uZmlnKSB7XG4gIGNvbnN0IHNsb3RJbmRleCA9IGdldERlZmVyQmxvY2tEYXRhSW5kZXgoZGVmZXJCbG9ja0luZGV4KTtcbiAgbmdEZXZNb2RlICYmIGFzc2VydEluZGV4SW5EZWNsUmFuZ2UodFZpZXcsIHNsb3RJbmRleCk7XG4gIHRWaWV3LmRhdGFbc2xvdEluZGV4XSA9IGRlZmVyQmxvY2tDb25maWc7XG59XG5mdW5jdGlvbiBnZXRUZW1wbGF0ZUluZGV4Rm9yU3RhdGUobmV3U3RhdGUsIGhvc3RMVmlldywgdE5vZGUpIHtcbiAgY29uc3QgdFZpZXcgPSBob3N0TFZpZXdbVFZJRVddO1xuICBjb25zdCB0RGV0YWlscyA9IGdldFREZWZlckJsb2NrRGV0YWlscyh0VmlldywgdE5vZGUpO1xuICBzd2l0Y2ggKG5ld1N0YXRlKSB7XG4gICAgY2FzZSBEZWZlckJsb2NrU3RhdGUuQ29tcGxldGU6XG4gICAgICByZXR1cm4gdERldGFpbHMucHJpbWFyeVRtcGxJbmRleDtcbiAgICBjYXNlIERlZmVyQmxvY2tTdGF0ZS5Mb2FkaW5nOlxuICAgICAgcmV0dXJuIHREZXRhaWxzLmxvYWRpbmdUbXBsSW5kZXg7XG4gICAgY2FzZSBEZWZlckJsb2NrU3RhdGUuRXJyb3I6XG4gICAgICByZXR1cm4gdERldGFpbHMuZXJyb3JUbXBsSW5kZXg7XG4gICAgY2FzZSBEZWZlckJsb2NrU3RhdGUuUGxhY2Vob2xkZXI6XG4gICAgICByZXR1cm4gdERldGFpbHMucGxhY2Vob2xkZXJUbXBsSW5kZXg7XG4gICAgZGVmYXVsdDpcbiAgICAgIG5nRGV2TW9kZSAmJiB0aHJvd0Vycm9yKGBVbmV4cGVjdGVkIGRlZmVyIGJsb2NrIHN0YXRlOiAke25ld1N0YXRlfWApO1xuICAgICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cbmZ1bmN0aW9uIGdldE1pbmltdW1EdXJhdGlvbkZvclN0YXRlKHREZXRhaWxzLCBjdXJyZW50U3RhdGUpIHtcbiAgaWYgKGN1cnJlbnRTdGF0ZSA9PT0gRGVmZXJCbG9ja1N0YXRlLlBsYWNlaG9sZGVyKSB7XG4gICAgcmV0dXJuIHREZXRhaWxzLnBsYWNlaG9sZGVyQmxvY2tDb25maWc/LltNSU5JTVVNX1NMT1RdID8/IG51bGw7XG4gIH0gZWxzZSBpZiAoY3VycmVudFN0YXRlID09PSBEZWZlckJsb2NrU3RhdGUuTG9hZGluZykge1xuICAgIHJldHVybiB0RGV0YWlscy5sb2FkaW5nQmxvY2tDb25maWc/LltNSU5JTVVNX1NMT1RdID8/IG51bGw7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5mdW5jdGlvbiBnZXRMb2FkaW5nQmxvY2tBZnRlcih0RGV0YWlscykge1xuICByZXR1cm4gdERldGFpbHMubG9hZGluZ0Jsb2NrQ29uZmlnPy5bTE9BRElOR19BRlRFUl9TTE9UXSA/PyBudWxsO1xufVxuZnVuY3Rpb24gYWRkRGVwc1RvUmVnaXN0cnkoY3VycmVudERlcHMsIG5ld0RlcHMpIHtcbiAgaWYgKCFjdXJyZW50RGVwcyB8fCBjdXJyZW50RGVwcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gbmV3RGVwcztcbiAgfVxuICBjb25zdCBjdXJyZW50RGVwU2V0ID0gbmV3IFNldChjdXJyZW50RGVwcyk7XG4gIGZvciAoY29uc3QgZGVwIG9mIG5ld0RlcHMpIHtcbiAgICBjdXJyZW50RGVwU2V0LmFkZChkZXApO1xuICB9XG4gIHJldHVybiBjdXJyZW50RGVwcy5sZW5ndGggPT09IGN1cnJlbnREZXBTZXQuc2l6ZSA/IGN1cnJlbnREZXBzIDogQXJyYXkuZnJvbShjdXJyZW50RGVwU2V0KTtcbn1cbmZ1bmN0aW9uIGdldFByaW1hcnlCbG9ja1ROb2RlKHRWaWV3LCB0RGV0YWlscykge1xuICBjb25zdCBhZGp1c3RlZEluZGV4ID0gdERldGFpbHMucHJpbWFyeVRtcGxJbmRleCArIEhFQURFUl9PRkZTRVQ7XG4gIHJldHVybiBnZXRUTm9kZSh0VmlldywgYWRqdXN0ZWRJbmRleCk7XG59XG5mdW5jdGlvbiBhc3NlcnREZWZlcnJlZERlcGVuZGVuY2llc0xvYWRlZCh0RGV0YWlscykge1xuICBhc3NlcnRFcXVhbCh0RGV0YWlscy5sb2FkaW5nU3RhdGUsIERlZmVyRGVwZW5kZW5jaWVzTG9hZGluZ1N0YXRlLkNPTVBMRVRFLCAnRXhwZWN0aW5nIGFsbCBkZWZlcnJlZCBkZXBlbmRlbmNpZXMgdG8gYmUgbG9hZGVkLicpO1xufVxuZnVuY3Rpb24gaXNURGVmZXJCbG9ja0RldGFpbHModmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIHZhbHVlLnByaW1hcnlUbXBsSW5kZXggPT09ICdudW1iZXInO1xufVxuZnVuY3Rpb24gaXNEZWZlckJsb2NrKHRWaWV3LCB0Tm9kZSkge1xuICBsZXQgdERldGFpbHMgPSBudWxsO1xuICBjb25zdCBzbG90SW5kZXggPSBnZXREZWZlckJsb2NrRGF0YUluZGV4KHROb2RlLmluZGV4KTtcbiAgaWYgKEhFQURFUl9PRkZTRVQgPCBzbG90SW5kZXggJiYgc2xvdEluZGV4IDwgdFZpZXcuYmluZGluZ1N0YXJ0SW5kZXgpIHtcbiAgICB0RGV0YWlscyA9IGdldFREZWZlckJsb2NrRGV0YWlscyh0VmlldywgdE5vZGUpO1xuICB9XG4gIHJldHVybiAhIXREZXRhaWxzICYmIGlzVERlZmVyQmxvY2tEZXRhaWxzKHREZXRhaWxzKTtcbn1cbmZ1bmN0aW9uIHRyYWNrVHJpZ2dlckZvckRlYnVnZ2luZyh0VmlldywgdE5vZGUsIHRleHRSZXByZXNlbnRhdGlvbikge1xuICBjb25zdCB0RGV0YWlscyA9IGdldFREZWZlckJsb2NrRGV0YWlscyh0VmlldywgdE5vZGUpO1xuICB0RGV0YWlscy5kZWJ1ZyA/Pz0ge307XG4gIHREZXRhaWxzLmRlYnVnLnRyaWdnZXJzID8/PSBuZXcgU2V0KCk7XG4gIHREZXRhaWxzLmRlYnVnLnRyaWdnZXJzLmFkZCh0ZXh0UmVwcmVzZW50YXRpb24pO1xufVxuZnVuY3Rpb24gb25WaWV3cG9ydFdyYXBwZXIodHJpZ2dlciwgY2FsbGJhY2ssIGluamVjdG9yLCB3cmFwcGVyT3B0aW9ucykge1xuICBjb25zdCBuZ1pvbmUgPSBpbmplY3Rvci5nZXQoTmdab25lKTtcbiAgcmV0dXJuIG9uVmlld3BvcnQodHJpZ2dlciwgKCkgPT4gbmdab25lLnJ1bihjYWxsYmFjayksIG9wdGlvbnMgPT4gbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IGNyZWF0ZUludGVyc2VjdGlvbk9ic2VydmVyKG9wdGlvbnMpKSwgd3JhcHBlck9wdGlvbnMpO1xufVxuZnVuY3Rpb24gZ2V0VHJpZ2dlckxWaWV3KGRlZmVycmVkSG9zdExWaWV3LCBkZWZlcnJlZFROb2RlLCB3YWxrVXBUaW1lcykge1xuICBpZiAod2Fsa1VwVGltZXMgPT0gbnVsbCkge1xuICAgIHJldHVybiBkZWZlcnJlZEhvc3RMVmlldztcbiAgfVxuICBpZiAod2Fsa1VwVGltZXMgPj0gMCkge1xuICAgIHJldHVybiB3YWxrVXBWaWV3cyh3YWxrVXBUaW1lcywgZGVmZXJyZWRIb3N0TFZpZXcpO1xuICB9XG4gIGNvbnN0IGRlZmVycmVkQ29udGFpbmVyID0gZGVmZXJyZWRIb3N0TFZpZXdbZGVmZXJyZWRUTm9kZS5pbmRleF07XG4gIG5nRGV2TW9kZSAmJiBhc3NlcnRMQ29udGFpbmVyKGRlZmVycmVkQ29udGFpbmVyKTtcbiAgY29uc3QgdHJpZ2dlckxWaWV3ID0gZGVmZXJyZWRDb250YWluZXJbQ09OVEFJTkVSX0hFQURFUl9PRkZTRVRdID8/IG51bGw7XG4gIGlmIChuZ0Rldk1vZGUgJiYgdHJpZ2dlckxWaWV3ICE9PSBudWxsKSB7XG4gICAgY29uc3QgbERldGFpbHMgPSBnZXRMRGVmZXJCbG9ja0RldGFpbHMoZGVmZXJyZWRIb3N0TFZpZXcsIGRlZmVycmVkVE5vZGUpO1xuICAgIGNvbnN0IHJlbmRlcmVkU3RhdGUgPSBsRGV0YWlsc1tERUZFUl9CTE9DS19TVEFURV07XG4gICAgYXNzZXJ0RXF1YWwocmVuZGVyZWRTdGF0ZSwgRGVmZXJCbG9ja1N0YXRlLlBsYWNlaG9sZGVyLCAnRXhwZWN0ZWQgYSBwbGFjZWhvbGRlciB0byBiZSByZW5kZXJlZCBpbiB0aGlzIGRlZmVyIGJsb2NrLicpO1xuICAgIGFzc2VydExWaWV3KHRyaWdnZXJMVmlldyk7XG4gIH1cbiAgcmV0dXJuIHRyaWdnZXJMVmlldztcbn1cbmZ1bmN0aW9uIGdldFRyaWdnZXJFbGVtZW50KHRyaWdnZXJMVmlldywgdHJpZ2dlckluZGV4KSB7XG4gIGNvbnN0IGVsZW1lbnQgPSBnZXROYXRpdmVCeUluZGV4KEhFQURFUl9PRkZTRVQgKyB0cmlnZ2VySW5kZXgsIHRyaWdnZXJMVmlldyk7XG4gIG5nRGV2TW9kZSAmJiBhc3NlcnRFbGVtZW50KGVsZW1lbnQpO1xuICByZXR1cm4gZWxlbWVudDtcbn1cbmZ1bmN0aW9uIHJlZ2lzdGVyRG9tVHJpZ2dlcihpbml0aWFsTFZpZXcsIHROb2RlLCB0cmlnZ2VySW5kZXgsIHdhbGtVcFRpbWVzLCByZWdpc3RlckZuLCBjYWxsYmFjaywgdHlwZSwgb3B0aW9ucykge1xuICBjb25zdCBpbmplY3RvciA9IGluaXRpYWxMVmlld1tJTkpFQ1RPUl07XG4gIGNvbnN0IHpvbmUgPSBpbmplY3Rvci5nZXQoTmdab25lKTtcbiAgbGV0IHBvbGw7XG4gIGZ1bmN0aW9uIHBvbGxEb21UcmlnZ2VyKCkge1xuICAgIGlmIChpc0Rlc3Ryb3llZChpbml0aWFsTFZpZXcpKSB7XG4gICAgICBwb2xsLmRlc3Ryb3koKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgbERldGFpbHMgPSBnZXRMRGVmZXJCbG9ja0RldGFpbHMoaW5pdGlhbExWaWV3LCB0Tm9kZSk7XG4gICAgY29uc3QgcmVuZGVyZWRTdGF0ZSA9IGxEZXRhaWxzW0RFRkVSX0JMT0NLX1NUQVRFXTtcbiAgICBpZiAocmVuZGVyZWRTdGF0ZSAhPT0gRGVmZXJCbG9ja0ludGVybmFsU3RhdGUuSW5pdGlhbCAmJiByZW5kZXJlZFN0YXRlICE9PSBEZWZlckJsb2NrU3RhdGUuUGxhY2Vob2xkZXIpIHtcbiAgICAgIHBvbGwuZGVzdHJveSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB0cmlnZ2VyTFZpZXcgPSBnZXRUcmlnZ2VyTFZpZXcoaW5pdGlhbExWaWV3LCB0Tm9kZSwgd2Fsa1VwVGltZXMpO1xuICAgIGlmICghdHJpZ2dlckxWaWV3KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHBvbGwuZGVzdHJveSgpO1xuICAgIGlmIChpc0Rlc3Ryb3llZCh0cmlnZ2VyTFZpZXcpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGVsZW1lbnQgPSBnZXRUcmlnZ2VyRWxlbWVudCh0cmlnZ2VyTFZpZXcsIHRyaWdnZXJJbmRleCk7XG4gICAgY29uc3QgY2xlYW51cCA9IHJlZ2lzdGVyRm4oZWxlbWVudCwgKCkgPT4ge1xuICAgICAgem9uZS5ydW4oKCkgPT4ge1xuICAgICAgICBpZiAoaW5pdGlhbExWaWV3ICE9PSB0cmlnZ2VyTFZpZXcpIHtcbiAgICAgICAgICByZW1vdmVMVmlld09uRGVzdHJveSh0cmlnZ2VyTFZpZXcsIGNsZWFudXApO1xuICAgICAgICB9XG4gICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICB9KTtcbiAgICB9LCBpbmplY3Rvciwgb3B0aW9ucyk7XG4gICAgaWYgKGluaXRpYWxMVmlldyAhPT0gdHJpZ2dlckxWaWV3KSB7XG4gICAgICBzdG9yZUxWaWV3T25EZXN0cm95KHRyaWdnZXJMVmlldywgY2xlYW51cCk7XG4gICAgfVxuICAgIHN0b3JlVHJpZ2dlckNsZWFudXBGbih0eXBlLCBsRGV0YWlscywgY2xlYW51cCk7XG4gIH1cbiAgcG9sbCA9IGFmdGVyRXZlcnlSZW5kZXIoe1xuICAgIHJlYWQ6IHBvbGxEb21UcmlnZ2VyXG4gIH0sIHtcbiAgICBpbmplY3RvclxuICB9KTtcbn1cbmZ1bmN0aW9uIG9uSWRsZShjYWxsYmFjaywgaW5qZWN0b3IpIHtcbiAgY29uc3Qgc2NoZWR1bGVyID0gaW5qZWN0b3IuZ2V0KElkbGVTY2hlZHVsZXIpO1xuICBjb25zdCBjbGVhbnVwRm4gPSAoKSA9PiBzY2hlZHVsZXIucmVtb3ZlKGNhbGxiYWNrKTtcbiAgc2NoZWR1bGVyLmFkZChjYWxsYmFjayk7XG4gIHJldHVybiBjbGVhbnVwRm47XG59XG5jb25zdCBfcmVxdWVzdElkbGVDYWxsYmFjayA9ICgpID0+IHR5cGVvZiByZXF1ZXN0SWRsZUNhbGxiYWNrICE9PSAndW5kZWZpbmVkJyA/IHJlcXVlc3RJZGxlQ2FsbGJhY2sgOiBzZXRUaW1lb3V0O1xuY29uc3QgX2NhbmNlbElkbGVDYWxsYmFjayA9ICgpID0+IHR5cGVvZiByZXF1ZXN0SWRsZUNhbGxiYWNrICE9PSAndW5kZWZpbmVkJyA/IGNhbmNlbElkbGVDYWxsYmFjayA6IGNsZWFyVGltZW91dDtcbmxldCBJZGxlU2NoZWR1bGVyID0gLyojX19QVVJFX18qLygoKSA9PiB7XG4gIGNsYXNzIElkbGVTY2hlZHVsZXIge1xuICAgIGV4ZWN1dGluZ0NhbGxiYWNrcyA9IGZhbHNlO1xuICAgIGlkbGVJZCA9IG51bGw7XG4gICAgY3VycmVudCA9IG5ldyBTZXQoKTtcbiAgICBkZWZlcnJlZCA9IG5ldyBTZXQoKTtcbiAgICBuZ1pvbmUgPSBpbmplY3QoTmdab25lKTtcbiAgICByZXF1ZXN0SWRsZUNhbGxiYWNrRm4gPSBfcmVxdWVzdElkbGVDYWxsYmFjaygpLmJpbmQoZ2xvYmFsVGhpcyk7XG4gICAgY2FuY2VsSWRsZUNhbGxiYWNrRm4gPSBfY2FuY2VsSWRsZUNhbGxiYWNrKCkuYmluZChnbG9iYWxUaGlzKTtcbiAgICBhZGQoY2FsbGJhY2spIHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IHRoaXMuZXhlY3V0aW5nQ2FsbGJhY2tzID8gdGhpcy5kZWZlcnJlZCA6IHRoaXMuY3VycmVudDtcbiAgICAgIHRhcmdldC5hZGQoY2FsbGJhY2spO1xuICAgICAgaWYgKHRoaXMuaWRsZUlkID09PSBudWxsKSB7XG4gICAgICAgIHRoaXMuc2NoZWR1bGVJZGxlQ2FsbGJhY2soKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmVtb3ZlKGNhbGxiYWNrKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGN1cnJlbnQsXG4gICAgICAgIGRlZmVycmVkXG4gICAgICB9ID0gdGhpcztcbiAgICAgIGN1cnJlbnQuZGVsZXRlKGNhbGxiYWNrKTtcbiAgICAgIGRlZmVycmVkLmRlbGV0ZShjYWxsYmFjayk7XG4gICAgICBpZiAoY3VycmVudC5zaXplID09PSAwICYmIGRlZmVycmVkLnNpemUgPT09IDApIHtcbiAgICAgICAgdGhpcy5jYW5jZWxJZGxlQ2FsbGJhY2soKTtcbiAgICAgIH1cbiAgICB9XG4gICAgc2NoZWR1bGVJZGxlQ2FsbGJhY2soKSB7XG4gICAgICBjb25zdCBjYWxsYmFjayA9ICgpID0+IHtcbiAgICAgICAgdGhpcy5jYW5jZWxJZGxlQ2FsbGJhY2soKTtcbiAgICAgICAgdGhpcy5leGVjdXRpbmdDYWxsYmFja3MgPSB0cnVlO1xuICAgICAgICBmb3IgKGNvbnN0IGNhbGxiYWNrIG9mIHRoaXMuY3VycmVudCkge1xuICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jdXJyZW50LmNsZWFyKCk7XG4gICAgICAgIHRoaXMuZXhlY3V0aW5nQ2FsbGJhY2tzID0gZmFsc2U7XG4gICAgICAgIGlmICh0aGlzLmRlZmVycmVkLnNpemUgPiAwKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBjYWxsYmFjayBvZiB0aGlzLmRlZmVycmVkKSB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnQuYWRkKGNhbGxiYWNrKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5kZWZlcnJlZC5jbGVhcigpO1xuICAgICAgICAgIHRoaXMuc2NoZWR1bGVJZGxlQ2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHRoaXMuaWRsZUlkID0gdGhpcy5yZXF1ZXN0SWRsZUNhbGxiYWNrRm4oKCkgPT4gdGhpcy5uZ1pvbmUucnVuKGNhbGxiYWNrKSk7XG4gICAgfVxuICAgIGNhbmNlbElkbGVDYWxsYmFjaygpIHtcbiAgICAgIGlmICh0aGlzLmlkbGVJZCAhPT0gbnVsbCkge1xuICAgICAgICB0aGlzLmNhbmNlbElkbGVDYWxsYmFja0ZuKHRoaXMuaWRsZUlkKTtcbiAgICAgICAgdGhpcy5pZGxlSWQgPSBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgIHRoaXMuY2FuY2VsSWRsZUNhbGxiYWNrKCk7XG4gICAgICB0aGlzLmN1cnJlbnQuY2xlYXIoKTtcbiAgICAgIHRoaXMuZGVmZXJyZWQuY2xlYXIoKTtcbiAgICB9XG4gICAgc3RhdGljIMm1cHJvdiA9IC8qIEBfX1BVUkVfXyAqL1xuICAgIF9fZGVmaW5lSW5qZWN0YWJsZSh7XG4gICAgICB0b2tlbjogSWRsZVNjaGVkdWxlcixcbiAgICAgIHByb3ZpZGVkSW46ICdyb290JyxcbiAgICAgIGZhY3Rvcnk6ICgpID0+IG5ldyBJZGxlU2NoZWR1bGVyKClcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gSWRsZVNjaGVkdWxlcjtcbn0pKCk7XG5mdW5jdGlvbiBvblRpbWVyKGRlbGF5KSB7XG4gIHJldHVybiAoY2FsbGJhY2ssIGluamVjdG9yKSA9PiBzY2hlZHVsZVRpbWVyVHJpZ2dlcihkZWxheSwgY2FsbGJhY2ssIGluamVjdG9yKTtcbn1cbmZ1bmN0aW9uIHNjaGVkdWxlVGltZXJUcmlnZ2VyKGRlbGF5LCBjYWxsYmFjaywgaW5qZWN0b3IpIHtcbiAgY29uc3Qgc2NoZWR1bGVyID0gaW5qZWN0b3IuZ2V0KFRpbWVyU2NoZWR1bGVyKTtcbiAgY29uc3Qgbmdab25lID0gaW5qZWN0b3IuZ2V0KE5nWm9uZSk7XG4gIGNvbnN0IGNsZWFudXBGbiA9ICgpID0+IHNjaGVkdWxlci5yZW1vdmUoY2FsbGJhY2spO1xuICBzY2hlZHVsZXIuYWRkKGRlbGF5LCBjYWxsYmFjaywgbmdab25lKTtcbiAgcmV0dXJuIGNsZWFudXBGbjtcbn1cbmxldCBUaW1lclNjaGVkdWxlciA9IC8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICBjbGFzcyBUaW1lclNjaGVkdWxlciB7XG4gICAgZXhlY3V0aW5nQ2FsbGJhY2tzID0gZmFsc2U7XG4gICAgdGltZW91dElkID0gbnVsbDtcbiAgICBpbnZva2VUaW1lckF0ID0gbnVsbDtcbiAgICBjdXJyZW50ID0gW107XG4gICAgZGVmZXJyZWQgPSBbXTtcbiAgICBhZGQoZGVsYXksIGNhbGxiYWNrLCBuZ1pvbmUpIHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IHRoaXMuZXhlY3V0aW5nQ2FsbGJhY2tzID8gdGhpcy5kZWZlcnJlZCA6IHRoaXMuY3VycmVudDtcbiAgICAgIHRoaXMuYWRkVG9RdWV1ZSh0YXJnZXQsIERhdGUubm93KCkgKyBkZWxheSwgY2FsbGJhY2spO1xuICAgICAgdGhpcy5zY2hlZHVsZVRpbWVyKG5nWm9uZSk7XG4gICAgfVxuICAgIHJlbW92ZShjYWxsYmFjaykge1xuICAgICAgY29uc3Qge1xuICAgICAgICBjdXJyZW50LFxuICAgICAgICBkZWZlcnJlZFxuICAgICAgfSA9IHRoaXM7XG4gICAgICBjb25zdCBjYWxsYmFja0luZGV4ID0gdGhpcy5yZW1vdmVGcm9tUXVldWUoY3VycmVudCwgY2FsbGJhY2spO1xuICAgICAgaWYgKGNhbGxiYWNrSW5kZXggPT09IC0xKSB7XG4gICAgICAgIHRoaXMucmVtb3ZlRnJvbVF1ZXVlKGRlZmVycmVkLCBjYWxsYmFjayk7XG4gICAgICB9XG4gICAgICBpZiAoY3VycmVudC5sZW5ndGggPT09IDAgJiYgZGVmZXJyZWQubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRoaXMuY2xlYXJUaW1lb3V0KCk7XG4gICAgICB9XG4gICAgfVxuICAgIGFkZFRvUXVldWUodGFyZ2V0LCBpbnZva2VBdCwgY2FsbGJhY2spIHtcbiAgICAgIGxldCBpbnNlcnRBdEluZGV4ID0gdGFyZ2V0Lmxlbmd0aDtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGFyZ2V0Lmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICAgIGNvbnN0IGludm9rZVF1ZXVlZENhbGxiYWNrQXQgPSB0YXJnZXRbaV07XG4gICAgICAgIGlmIChpbnZva2VRdWV1ZWRDYWxsYmFja0F0ID4gaW52b2tlQXQpIHtcbiAgICAgICAgICBpbnNlcnRBdEluZGV4ID0gaTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYXJyYXlJbnNlcnQyKHRhcmdldCwgaW5zZXJ0QXRJbmRleCwgaW52b2tlQXQsIGNhbGxiYWNrKTtcbiAgICB9XG4gICAgcmVtb3ZlRnJvbVF1ZXVlKHRhcmdldCwgY2FsbGJhY2spIHtcbiAgICAgIGxldCBpbmRleCA9IC0xO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0YXJnZXQubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgICAgY29uc3QgcXVldWVkQ2FsbGJhY2sgPSB0YXJnZXRbaSArIDFdO1xuICAgICAgICBpZiAocXVldWVkQ2FsbGJhY2sgPT09IGNhbGxiYWNrKSB7XG4gICAgICAgICAgaW5kZXggPSBpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICBhcnJheVNwbGljZSh0YXJnZXQsIGluZGV4LCAyKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBpbmRleDtcbiAgICB9XG4gICAgc2NoZWR1bGVUaW1lcihuZ1pvbmUpIHtcbiAgICAgIGNvbnN0IGNhbGxiYWNrID0gKCkgPT4ge1xuICAgICAgICB0aGlzLmNsZWFyVGltZW91dCgpO1xuICAgICAgICB0aGlzLmV4ZWN1dGluZ0NhbGxiYWNrcyA9IHRydWU7XG4gICAgICAgIGNvbnN0IGN1cnJlbnQgPSBbLi4udGhpcy5jdXJyZW50XTtcbiAgICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjdXJyZW50Lmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICAgICAgY29uc3QgaW52b2tlQXQgPSBjdXJyZW50W2ldO1xuICAgICAgICAgIGNvbnN0IGNhbGxiYWNrID0gY3VycmVudFtpICsgMV07XG4gICAgICAgICAgaWYgKGludm9rZUF0IDw9IG5vdykge1xuICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxldCBsYXN0Q2FsbGJhY2tJbmRleCA9IC0xO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY3VycmVudC5sZW5ndGg7IGkgKz0gMikge1xuICAgICAgICAgIGNvbnN0IGludm9rZUF0ID0gdGhpcy5jdXJyZW50W2ldO1xuICAgICAgICAgIGlmIChpbnZva2VBdCA8PSBub3cpIHtcbiAgICAgICAgICAgIGxhc3RDYWxsYmFja0luZGV4ID0gaSArIDE7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobGFzdENhbGxiYWNrSW5kZXggPj0gMCkge1xuICAgICAgICAgIGFycmF5U3BsaWNlKHRoaXMuY3VycmVudCwgMCwgbGFzdENhbGxiYWNrSW5kZXggKyAxKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmV4ZWN1dGluZ0NhbGxiYWNrcyA9IGZhbHNlO1xuICAgICAgICBpZiAodGhpcy5kZWZlcnJlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmRlZmVycmVkLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICAgICAgICBjb25zdCBpbnZva2VBdCA9IHRoaXMuZGVmZXJyZWRbaV07XG4gICAgICAgICAgICBjb25zdCBjYWxsYmFjayA9IHRoaXMuZGVmZXJyZWRbaSArIDFdO1xuICAgICAgICAgICAgdGhpcy5hZGRUb1F1ZXVlKHRoaXMuY3VycmVudCwgaW52b2tlQXQsIGNhbGxiYWNrKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5kZWZlcnJlZC5sZW5ndGggPSAwO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2NoZWR1bGVUaW1lcihuZ1pvbmUpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IEZSQU1FX0RVUkFUSU9OX01TID0gMTY7XG4gICAgICBpZiAodGhpcy5jdXJyZW50Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgY29uc3QgaW52b2tlQXQgPSB0aGlzLmN1cnJlbnRbMF07XG4gICAgICAgIGlmICh0aGlzLnRpbWVvdXRJZCA9PT0gbnVsbCB8fCB0aGlzLmludm9rZVRpbWVyQXQgJiYgdGhpcy5pbnZva2VUaW1lckF0IC0gaW52b2tlQXQgPiBGUkFNRV9EVVJBVElPTl9NUykge1xuICAgICAgICAgIHRoaXMuY2xlYXJUaW1lb3V0KCk7XG4gICAgICAgICAgY29uc3QgdGltZW91dCA9IE1hdGgubWF4KGludm9rZUF0IC0gbm93LCBGUkFNRV9EVVJBVElPTl9NUyk7XG4gICAgICAgICAgdGhpcy5pbnZva2VUaW1lckF0ID0gaW52b2tlQXQ7XG4gICAgICAgICAgdGhpcy50aW1lb3V0SWQgPSBuZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoKCkgPT4gbmdab25lLnJ1bihjYWxsYmFjayksIHRpbWVvdXQpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGNsZWFyVGltZW91dCgpIHtcbiAgICAgIGlmICh0aGlzLnRpbWVvdXRJZCAhPT0gbnVsbCkge1xuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0SWQpO1xuICAgICAgICB0aGlzLnRpbWVvdXRJZCA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgdGhpcy5jbGVhclRpbWVvdXQoKTtcbiAgICAgIHRoaXMuY3VycmVudC5sZW5ndGggPSAwO1xuICAgICAgdGhpcy5kZWZlcnJlZC5sZW5ndGggPSAwO1xuICAgIH1cbiAgICBzdGF0aWMgybVwcm92ID0gLyogQF9fUFVSRV9fICovXG4gICAgX19kZWZpbmVJbmplY3RhYmxlKHtcbiAgICAgIHRva2VuOiBUaW1lclNjaGVkdWxlcixcbiAgICAgIHByb3ZpZGVkSW46ICdyb290JyxcbiAgICAgIGZhY3Rvcnk6ICgpID0+IG5ldyBUaW1lclNjaGVkdWxlcigpXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIFRpbWVyU2NoZWR1bGVyO1xufSkoKTtcbmxldCBDYWNoZWRJbmplY3RvclNlcnZpY2UgPSAvKiNfX1BVUkVfXyovKCgpID0+IHtcbiAgY2xhc3MgQ2FjaGVkSW5qZWN0b3JTZXJ2aWNlIHtcbiAgICBjYWNoZWRJbmplY3RvcnMgPSBuZXcgTWFwKCk7XG4gICAgZ2V0T3JDcmVhdGVJbmplY3RvcihrZXksIHBhcmVudEluamVjdG9yLCBwcm92aWRlcnMsIGRlYnVnTmFtZSkge1xuICAgICAgaWYgKCF0aGlzLmNhY2hlZEluamVjdG9ycy5oYXMoa2V5KSkge1xuICAgICAgICBjb25zdCBpbmplY3RvciA9IHByb3ZpZGVycy5sZW5ndGggPiAwID8gY3JlYXRlRW52aXJvbm1lbnRJbmplY3Rvcihwcm92aWRlcnMsIHBhcmVudEluamVjdG9yLCBkZWJ1Z05hbWUpIDogbnVsbDtcbiAgICAgICAgdGhpcy5jYWNoZWRJbmplY3RvcnMuc2V0KGtleSwgaW5qZWN0b3IpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuY2FjaGVkSW5qZWN0b3JzLmdldChrZXkpO1xuICAgIH1cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGZvciAoY29uc3QgaW5qZWN0b3Igb2YgdGhpcy5jYWNoZWRJbmplY3RvcnMudmFsdWVzKCkpIHtcbiAgICAgICAgICBpZiAoaW5qZWN0b3IgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGluamVjdG9yLmRlc3Ryb3koKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMuY2FjaGVkSW5qZWN0b3JzLmNsZWFyKCk7XG4gICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyDJtXByb3YgPSAvKiBAX19QVVJFX18gKi9cbiAgICBfX2RlZmluZUluamVjdGFibGUoe1xuICAgICAgdG9rZW46IENhY2hlZEluamVjdG9yU2VydmljZSxcbiAgICAgIHByb3ZpZGVkSW46ICdlbnZpcm9ubWVudCcsXG4gICAgICBmYWN0b3J5OiAoKSA9PiBuZXcgQ2FjaGVkSW5qZWN0b3JTZXJ2aWNlKClcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gQ2FjaGVkSW5qZWN0b3JTZXJ2aWNlO1xufSkoKTtcbmNvbnN0IERFRkVSX0JMT0NLX0RFUEVOREVOQ1lfSU5URVJDRVBUT1IgPSAvKiBAX19QVVJFX18gKi9uZXcgSW5qZWN0aW9uVG9rZW4oJ0RFRkVSX0JMT0NLX0RFUEVOREVOQ1lfSU5URVJDRVBUT1InKTtcbmNvbnN0IERFRkVSX0JMT0NLX0NPTkZJRyA9IC8qI19fUFVSRV9fKi9uZXcgSW5qZWN0aW9uVG9rZW4odHlwZW9mIG5nRGV2TW9kZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbmdEZXZNb2RlID8gJ0RFRkVSX0JMT0NLX0NPTkZJRycgOiAnJyk7XG5mdW5jdGlvbiBnZXRPckNyZWF0ZUVudmlyb25tZW50SW5qZWN0b3IocGFyZW50SW5qZWN0b3IsIHREZXRhaWxzLCBwcm92aWRlcnMpIHtcbiAgcmV0dXJuIHBhcmVudEluamVjdG9yLmdldChDYWNoZWRJbmplY3RvclNlcnZpY2UpLmdldE9yQ3JlYXRlSW5qZWN0b3IodERldGFpbHMsIHBhcmVudEluamVjdG9yLCBwcm92aWRlcnMsIG5nRGV2TW9kZSA/ICdEZWZlckJsb2NrIEluamVjdG9yJyA6ICcnKTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZURlZmVyQmxvY2tJbmplY3RvcihwYXJlbnRJbmplY3RvciwgdERldGFpbHMsIHByb3ZpZGVycykge1xuICBpZiAocGFyZW50SW5qZWN0b3IgaW5zdGFuY2VvZiBDaGFpbmVkSW5qZWN0b3IpIHtcbiAgICBjb25zdCBvcmlnSW5qZWN0b3IgPSBwYXJlbnRJbmplY3Rvci5pbmplY3RvcjtcbiAgICBjb25zdCBwYXJlbnRFbnZJbmplY3RvciA9IHBhcmVudEluamVjdG9yLnBhcmVudEluamVjdG9yO1xuICAgIGNvbnN0IGVudkluamVjdG9yID0gZ2V0T3JDcmVhdGVFbnZpcm9ubWVudEluamVjdG9yKHBhcmVudEVudkluamVjdG9yLCB0RGV0YWlscywgcHJvdmlkZXJzKTtcbiAgICByZXR1cm4gbmV3IENoYWluZWRJbmplY3RvcihvcmlnSW5qZWN0b3IsIGVudkluamVjdG9yKTtcbiAgfVxuICBjb25zdCBwYXJlbnRFbnZJbmplY3RvciA9IHBhcmVudEluamVjdG9yLmdldChFbnZpcm9ubWVudEluamVjdG9yKTtcbiAgaWYgKHBhcmVudEVudkluamVjdG9yICE9PSBwYXJlbnRJbmplY3Rvcikge1xuICAgIGNvbnN0IGVudkluamVjdG9yID0gZ2V0T3JDcmVhdGVFbnZpcm9ubWVudEluamVjdG9yKHBhcmVudEVudkluamVjdG9yLCB0RGV0YWlscywgcHJvdmlkZXJzKTtcbiAgICByZXR1cm4gbmV3IENoYWluZWRJbmplY3RvcihwYXJlbnRJbmplY3RvciwgZW52SW5qZWN0b3IpO1xuICB9XG4gIHJldHVybiBnZXRPckNyZWF0ZUVudmlyb25tZW50SW5qZWN0b3IocGFyZW50SW5qZWN0b3IsIHREZXRhaWxzLCBwcm92aWRlcnMpO1xufVxuZnVuY3Rpb24gcmVuZGVyRGVmZXJCbG9ja1N0YXRlKG5ld1N0YXRlLCB0Tm9kZSwgbENvbnRhaW5lciwgc2tpcFRpbWVyU2NoZWR1bGluZyA9IGZhbHNlKSB7XG4gIGNvbnN0IGhvc3RMVmlldyA9IGxDb250YWluZXJbUEFSRU5UXTtcbiAgY29uc3QgaG9zdFRWaWV3ID0gaG9zdExWaWV3W1RWSUVXXTtcbiAgaWYgKGlzRGVzdHJveWVkKGhvc3RMVmlldykpIHJldHVybjtcbiAgbmdEZXZNb2RlICYmIGFzc2VydFROb2RlRm9yTFZpZXcodE5vZGUsIGhvc3RMVmlldyk7XG4gIGNvbnN0IGxEZXRhaWxzID0gZ2V0TERlZmVyQmxvY2tEZXRhaWxzKGhvc3RMVmlldywgdE5vZGUpO1xuICBuZ0Rldk1vZGUgJiYgYXNzZXJ0RGVmaW5lZChsRGV0YWlscywgJ0V4cGVjdGVkIGEgZGVmZXIgYmxvY2sgc3RhdGUgZGVmaW5lZCcpO1xuICBjb25zdCBjdXJyZW50U3RhdGUgPSBsRGV0YWlsc1tERUZFUl9CTE9DS19TVEFURV07XG4gIGNvbnN0IHNzclN0YXRlID0gbERldGFpbHNbU1NSX0JMT0NLX1NUQVRFXTtcbiAgaWYgKHNzclN0YXRlICE9PSBudWxsICYmIG5ld1N0YXRlIDwgc3NyU3RhdGUpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKGlzVmFsaWRTdGF0ZUNoYW5nZShjdXJyZW50U3RhdGUsIG5ld1N0YXRlKSAmJiBpc1ZhbGlkU3RhdGVDaGFuZ2UobERldGFpbHNbTkVYVF9ERUZFUl9CTE9DS19TVEFURV0gPz8gLTEsIG5ld1N0YXRlKSkge1xuICAgIGNvbnN0IHREZXRhaWxzID0gZ2V0VERlZmVyQmxvY2tEZXRhaWxzKGhvc3RUVmlldywgdE5vZGUpO1xuICAgIGNvbnN0IG5lZWRzU2NoZWR1bGluZyA9ICFza2lwVGltZXJTY2hlZHVsaW5nICYmICh0eXBlb2YgbmdTZXJ2ZXJNb2RlID09PSAndW5kZWZpbmVkJyB8fCAhbmdTZXJ2ZXJNb2RlKSAmJiAoZ2V0TG9hZGluZ0Jsb2NrQWZ0ZXIodERldGFpbHMpICE9PSBudWxsIHx8IGdldE1pbmltdW1EdXJhdGlvbkZvclN0YXRlKHREZXRhaWxzLCBEZWZlckJsb2NrU3RhdGUuTG9hZGluZykgIT09IG51bGwgfHwgZ2V0TWluaW11bUR1cmF0aW9uRm9yU3RhdGUodERldGFpbHMsIERlZmVyQmxvY2tTdGF0ZS5QbGFjZWhvbGRlcikpO1xuICAgIGlmIChuZ0Rldk1vZGUgJiYgbmVlZHNTY2hlZHVsaW5nKSB7XG4gICAgICBhc3NlcnREZWZpbmVkKGFwcGx5RGVmZXJCbG9ja1N0YXRlV2l0aFNjaGVkdWxpbmdJbXBsLCAnRXhwZWN0ZWQgc2NoZWR1bGluZyBmdW5jdGlvbiB0byBiZSBkZWZpbmVkJyk7XG4gICAgfVxuICAgIGNvbnN0IGFwcGx5U3RhdGVGbiA9IG5lZWRzU2NoZWR1bGluZyA/IGFwcGx5RGVmZXJCbG9ja1N0YXRlV2l0aFNjaGVkdWxpbmdJbXBsIDogYXBwbHlEZWZlckJsb2NrU3RhdGU7XG4gICAgdHJ5IHtcbiAgICAgIGFwcGx5U3RhdGVGbihuZXdTdGF0ZSwgbERldGFpbHMsIGxDb250YWluZXIsIHROb2RlLCBob3N0TFZpZXcpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBoYW5kbGVVbmNhdWdodEVycm9yKGhvc3RMVmlldywgZXJyb3IpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gZmluZE1hdGNoaW5nRGVoeWRyYXRlZFZpZXdGb3JEZWZlckJsb2NrKGxDb250YWluZXIsIGxEZXRhaWxzKSB7XG4gIGNvbnN0IGRlaHlkcmF0ZWRWaWV3SXggPSBsQ29udGFpbmVyW0RFSFlEUkFURURfVklFV1NdPy5maW5kSW5kZXgodmlldyA9PiB2aWV3LmRhdGFbREVGRVJfQkxPQ0tfU1RBVEUkMV0gPT09IGxEZXRhaWxzW0RFRkVSX0JMT0NLX1NUQVRFXSkgPz8gLTE7XG4gIGNvbnN0IGRlaHlkcmF0ZWRWaWV3ID0gZGVoeWRyYXRlZFZpZXdJeCA+IC0xID8gbENvbnRhaW5lcltERUhZRFJBVEVEX1ZJRVdTXVtkZWh5ZHJhdGVkVmlld0l4XSA6IG51bGw7XG4gIHJldHVybiB7XG4gICAgZGVoeWRyYXRlZFZpZXcsXG4gICAgZGVoeWRyYXRlZFZpZXdJeFxuICB9O1xufVxuZnVuY3Rpb24gYXBwbHlEZWZlckJsb2NrU3RhdGUobmV3U3RhdGUsIGxEZXRhaWxzLCBsQ29udGFpbmVyLCB0Tm9kZSwgaG9zdExWaWV3KSB7XG4gIHByb2ZpbGVyKFByb2ZpbGVyRXZlbnQuRGVmZXJCbG9ja1N0YXRlU3RhcnQpO1xuICBjb25zdCBzdGF0ZVRtcGxJbmRleCA9IGdldFRlbXBsYXRlSW5kZXhGb3JTdGF0ZShuZXdTdGF0ZSwgaG9zdExWaWV3LCB0Tm9kZSk7XG4gIGlmIChzdGF0ZVRtcGxJbmRleCAhPT0gbnVsbCkge1xuICAgIGxEZXRhaWxzW0RFRkVSX0JMT0NLX1NUQVRFXSA9IG5ld1N0YXRlO1xuICAgIGNvbnN0IGhvc3RUVmlldyA9IGhvc3RMVmlld1tUVklFV107XG4gICAgY29uc3QgYWRqdXN0ZWRJbmRleCA9IHN0YXRlVG1wbEluZGV4ICsgSEVBREVSX09GRlNFVDtcbiAgICBjb25zdCBhY3RpdmVCbG9ja1ROb2RlID0gZ2V0VE5vZGUoaG9zdFRWaWV3LCBhZGp1c3RlZEluZGV4KTtcbiAgICBjb25zdCB2aWV3SW5kZXggPSAwO1xuICAgIHJlbW92ZUxWaWV3RnJvbUxDb250YWluZXIobENvbnRhaW5lciwgdmlld0luZGV4KTtcbiAgICBsZXQgaW5qZWN0b3I7XG4gICAgaWYgKG5ld1N0YXRlID09PSBEZWZlckJsb2NrU3RhdGUuQ29tcGxldGUpIHtcbiAgICAgIGNvbnN0IHREZXRhaWxzID0gZ2V0VERlZmVyQmxvY2tEZXRhaWxzKGhvc3RUVmlldywgdE5vZGUpO1xuICAgICAgY29uc3QgcHJvdmlkZXJzID0gdERldGFpbHMucHJvdmlkZXJzO1xuICAgICAgaWYgKHByb3ZpZGVycyAmJiBwcm92aWRlcnMubGVuZ3RoID4gMCkge1xuICAgICAgICBpbmplY3RvciA9IGNyZWF0ZURlZmVyQmxvY2tJbmplY3Rvcihob3N0TFZpZXdbSU5KRUNUT1JdLCB0RGV0YWlscywgcHJvdmlkZXJzKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3Qge1xuICAgICAgZGVoeWRyYXRlZFZpZXcsXG4gICAgICBkZWh5ZHJhdGVkVmlld0l4XG4gICAgfSA9IGZpbmRNYXRjaGluZ0RlaHlkcmF0ZWRWaWV3Rm9yRGVmZXJCbG9jayhsQ29udGFpbmVyLCBsRGV0YWlscyk7XG4gICAgY29uc3QgZW1iZWRkZWRMVmlldyA9IGNyZWF0ZUFuZFJlbmRlckVtYmVkZGVkTFZpZXcoaG9zdExWaWV3LCBhY3RpdmVCbG9ja1ROb2RlLCBudWxsLCB7XG4gICAgICBpbmplY3RvcixcbiAgICAgIGRlaHlkcmF0ZWRWaWV3XG4gICAgfSk7XG4gICAgYWRkTFZpZXdUb0xDb250YWluZXIobENvbnRhaW5lciwgZW1iZWRkZWRMVmlldywgdmlld0luZGV4LCBzaG91bGRBZGRWaWV3VG9Eb20oYWN0aXZlQmxvY2tUTm9kZSwgZGVoeWRyYXRlZFZpZXcpKTtcbiAgICBtYXJrVmlld0RpcnR5KGVtYmVkZGVkTFZpZXcsIDIpO1xuICAgIGlmIChkZWh5ZHJhdGVkVmlld0l4ID4gLTEpIHtcbiAgICAgIGxDb250YWluZXJbREVIWURSQVRFRF9WSUVXU10/LnNwbGljZShkZWh5ZHJhdGVkVmlld0l4LCAxKTtcbiAgICB9XG4gICAgaWYgKChuZXdTdGF0ZSA9PT0gRGVmZXJCbG9ja1N0YXRlLkNvbXBsZXRlIHx8IG5ld1N0YXRlID09PSBEZWZlckJsb2NrU3RhdGUuRXJyb3IpICYmIEFycmF5LmlzQXJyYXkobERldGFpbHNbT05fQ09NUExFVEVfRk5TXSkpIHtcbiAgICAgIGZvciAoY29uc3QgY2FsbGJhY2sgb2YgbERldGFpbHNbT05fQ09NUExFVEVfRk5TXSkge1xuICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgfVxuICAgICAgbERldGFpbHNbT05fQ09NUExFVEVfRk5TXSA9IG51bGw7XG4gICAgfVxuICB9XG4gIHByb2ZpbGVyKFByb2ZpbGVyRXZlbnQuRGVmZXJCbG9ja1N0YXRlRW5kKTtcbn1cbmZ1bmN0aW9uIGFwcGx5RGVmZXJCbG9ja1N0YXRlV2l0aFNjaGVkdWxpbmcobmV3U3RhdGUsIGxEZXRhaWxzLCBsQ29udGFpbmVyLCB0Tm9kZSwgaG9zdExWaWV3KSB7XG4gIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gIGNvbnN0IGhvc3RUVmlldyA9IGhvc3RMVmlld1tUVklFV107XG4gIGNvbnN0IHREZXRhaWxzID0gZ2V0VERlZmVyQmxvY2tEZXRhaWxzKGhvc3RUVmlldywgdE5vZGUpO1xuICBpZiAobERldGFpbHNbU1RBVEVfSVNfRlJPWkVOX1VOVElMXSA9PT0gbnVsbCB8fCBsRGV0YWlsc1tTVEFURV9JU19GUk9aRU5fVU5USUxdIDw9IG5vdykge1xuICAgIGxEZXRhaWxzW1NUQVRFX0lTX0ZST1pFTl9VTlRJTF0gPSBudWxsO1xuICAgIGNvbnN0IGxvYWRpbmdBZnRlciA9IGdldExvYWRpbmdCbG9ja0FmdGVyKHREZXRhaWxzKTtcbiAgICBjb25zdCBpbkxvYWRpbmdBZnRlclBoYXNlID0gbERldGFpbHNbTE9BRElOR19BRlRFUl9DTEVBTlVQX0ZOXSAhPT0gbnVsbDtcbiAgICBpZiAobmV3U3RhdGUgPT09IERlZmVyQmxvY2tTdGF0ZS5Mb2FkaW5nICYmIGxvYWRpbmdBZnRlciAhPT0gbnVsbCAmJiAhaW5Mb2FkaW5nQWZ0ZXJQaGFzZSkge1xuICAgICAgbERldGFpbHNbTkVYVF9ERUZFUl9CTE9DS19TVEFURV0gPSBuZXdTdGF0ZTtcbiAgICAgIGNvbnN0IGNsZWFudXBGbiA9IHNjaGVkdWxlRGVmZXJCbG9ja1VwZGF0ZShsb2FkaW5nQWZ0ZXIsIGxEZXRhaWxzLCB0Tm9kZSwgbENvbnRhaW5lciwgaG9zdExWaWV3KTtcbiAgICAgIGxEZXRhaWxzW0xPQURJTkdfQUZURVJfQ0xFQU5VUF9GTl0gPSBjbGVhbnVwRm47XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChuZXdTdGF0ZSA+IERlZmVyQmxvY2tTdGF0ZS5Mb2FkaW5nICYmIGluTG9hZGluZ0FmdGVyUGhhc2UpIHtcbiAgICAgICAgbERldGFpbHNbTE9BRElOR19BRlRFUl9DTEVBTlVQX0ZOXSgpO1xuICAgICAgICBsRGV0YWlsc1tMT0FESU5HX0FGVEVSX0NMRUFOVVBfRk5dID0gbnVsbDtcbiAgICAgICAgbERldGFpbHNbTkVYVF9ERUZFUl9CTE9DS19TVEFURV0gPSBudWxsO1xuICAgICAgfVxuICAgICAgYXBwbHlEZWZlckJsb2NrU3RhdGUobmV3U3RhdGUsIGxEZXRhaWxzLCBsQ29udGFpbmVyLCB0Tm9kZSwgaG9zdExWaWV3KTtcbiAgICAgIGNvbnN0IGR1cmF0aW9uID0gZ2V0TWluaW11bUR1cmF0aW9uRm9yU3RhdGUodERldGFpbHMsIG5ld1N0YXRlKTtcbiAgICAgIGlmIChkdXJhdGlvbiAhPT0gbnVsbCkge1xuICAgICAgICBsRGV0YWlsc1tTVEFURV9JU19GUk9aRU5fVU5USUxdID0gbm93ICsgZHVyYXRpb247XG4gICAgICAgIHNjaGVkdWxlRGVmZXJCbG9ja1VwZGF0ZShkdXJhdGlvbiwgbERldGFpbHMsIHROb2RlLCBsQ29udGFpbmVyLCBob3N0TFZpZXcpO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBsRGV0YWlsc1tORVhUX0RFRkVSX0JMT0NLX1NUQVRFXSA9IG5ld1N0YXRlO1xuICB9XG59XG5mdW5jdGlvbiBzY2hlZHVsZURlZmVyQmxvY2tVcGRhdGUodGltZW91dCwgbERldGFpbHMsIHROb2RlLCBsQ29udGFpbmVyLCBob3N0TFZpZXcpIHtcbiAgY29uc3QgY2FsbGJhY2sgPSAoKSA9PiB7XG4gICAgY29uc3QgbmV4dFN0YXRlID0gbERldGFpbHNbTkVYVF9ERUZFUl9CTE9DS19TVEFURV07XG4gICAgbERldGFpbHNbU1RBVEVfSVNfRlJPWkVOX1VOVElMXSA9IG51bGw7XG4gICAgbERldGFpbHNbTkVYVF9ERUZFUl9CTE9DS19TVEFURV0gPSBudWxsO1xuICAgIGlmIChuZXh0U3RhdGUgIT09IG51bGwpIHtcbiAgICAgIHJlbmRlckRlZmVyQmxvY2tTdGF0ZShuZXh0U3RhdGUsIHROb2RlLCBsQ29udGFpbmVyKTtcbiAgICB9XG4gIH07XG4gIHJldHVybiBzY2hlZHVsZVRpbWVyVHJpZ2dlcih0aW1lb3V0LCBjYWxsYmFjaywgaG9zdExWaWV3W0lOSkVDVE9SXSk7XG59XG5mdW5jdGlvbiBpc1ZhbGlkU3RhdGVDaGFuZ2UoY3VycmVudFN0YXRlLCBuZXdTdGF0ZSkge1xuICByZXR1cm4gY3VycmVudFN0YXRlIDwgbmV3U3RhdGU7XG59XG5mdW5jdGlvbiByZW5kZXJQbGFjZWhvbGRlcihsVmlldywgdE5vZGUpIHtcbiAgY29uc3QgbENvbnRhaW5lciA9IGxWaWV3W3ROb2RlLmluZGV4XTtcbiAgbmdEZXZNb2RlICYmIGFzc2VydExDb250YWluZXIobENvbnRhaW5lcik7XG4gIHJlbmRlckRlZmVyQmxvY2tTdGF0ZShEZWZlckJsb2NrU3RhdGUuUGxhY2Vob2xkZXIsIHROb2RlLCBsQ29udGFpbmVyKTtcbn1cbmZ1bmN0aW9uIHJlbmRlckRlZmVyU3RhdGVBZnRlclJlc291cmNlTG9hZGluZyh0RGV0YWlscywgdE5vZGUsIGxDb250YWluZXIpIHtcbiAgbmdEZXZNb2RlICYmIGFzc2VydERlZmluZWQodERldGFpbHMubG9hZGluZ1Byb21pc2UsICdFeHBlY3RlZCBsb2FkaW5nIFByb21pc2UgdG8gZXhpc3Qgb24gdGhpcyBkZWZlciBibG9jaycpO1xuICB0RGV0YWlscy5sb2FkaW5nUHJvbWlzZS50aGVuKCgpID0+IHtcbiAgICBpZiAodERldGFpbHMubG9hZGluZ1N0YXRlID09PSBEZWZlckRlcGVuZGVuY2llc0xvYWRpbmdTdGF0ZS5DT01QTEVURSkge1xuICAgICAgbmdEZXZNb2RlICYmIGFzc2VydERlZmVycmVkRGVwZW5kZW5jaWVzTG9hZGVkKHREZXRhaWxzKTtcbiAgICAgIHJlbmRlckRlZmVyQmxvY2tTdGF0ZShEZWZlckJsb2NrU3RhdGUuQ29tcGxldGUsIHROb2RlLCBsQ29udGFpbmVyKTtcbiAgICB9IGVsc2UgaWYgKHREZXRhaWxzLmxvYWRpbmdTdGF0ZSA9PT0gRGVmZXJEZXBlbmRlbmNpZXNMb2FkaW5nU3RhdGUuRkFJTEVEKSB7XG4gICAgICByZW5kZXJEZWZlckJsb2NrU3RhdGUoRGVmZXJCbG9ja1N0YXRlLkVycm9yLCB0Tm9kZSwgbENvbnRhaW5lcik7XG4gICAgfVxuICB9KTtcbn1cbmxldCBhcHBseURlZmVyQmxvY2tTdGF0ZVdpdGhTY2hlZHVsaW5nSW1wbCA9IG51bGw7XG5mdW5jdGlvbiDJtcm1ZGVmZXJFbmFibGVUaW1lclNjaGVkdWxpbmcodFZpZXcsIHREZXRhaWxzLCBwbGFjZWhvbGRlckNvbmZpZ0luZGV4LCBsb2FkaW5nQ29uZmlnSW5kZXgpIHtcbiAgY29uc3QgdFZpZXdDb25zdHMgPSB0Vmlldy5jb25zdHM7XG4gIGlmIChwbGFjZWhvbGRlckNvbmZpZ0luZGV4ICE9IG51bGwpIHtcbiAgICB0RGV0YWlscy5wbGFjZWhvbGRlckJsb2NrQ29uZmlnID0gZ2V0Q29uc3RhbnQodFZpZXdDb25zdHMsIHBsYWNlaG9sZGVyQ29uZmlnSW5kZXgpO1xuICB9XG4gIGlmIChsb2FkaW5nQ29uZmlnSW5kZXggIT0gbnVsbCkge1xuICAgIHREZXRhaWxzLmxvYWRpbmdCbG9ja0NvbmZpZyA9IGdldENvbnN0YW50KHRWaWV3Q29uc3RzLCBsb2FkaW5nQ29uZmlnSW5kZXgpO1xuICB9XG4gIGlmIChhcHBseURlZmVyQmxvY2tTdGF0ZVdpdGhTY2hlZHVsaW5nSW1wbCA9PT0gbnVsbCkge1xuICAgIGFwcGx5RGVmZXJCbG9ja1N0YXRlV2l0aFNjaGVkdWxpbmdJbXBsID0gYXBwbHlEZWZlckJsb2NrU3RhdGVXaXRoU2NoZWR1bGluZztcbiAgfVxufVxuY29uc3QgQVNZTkNfQ09NUE9ORU5UX01FVEFEQVRBX0ZOID0gJ19fbmdBc3luY0NvbXBvbmVudE1ldGFkYXRhRm5fXyc7XG5mdW5jdGlvbiBnZXRBc3luY0NsYXNzTWV0YWRhdGFGbih0eXBlKSB7XG4gIGNvbnN0IGNvbXBvbmVudENsYXNzID0gdHlwZTtcbiAgcmV0dXJuIGNvbXBvbmVudENsYXNzW0FTWU5DX0NPTVBPTkVOVF9NRVRBREFUQV9GTl0gPz8gbnVsbDtcbn1cbmZ1bmN0aW9uIHNldENsYXNzTWV0YWRhdGFBc3luYyh0eXBlLCBkZXBlbmRlbmN5TG9hZGVyRm4sIG1ldGFkYXRhU2V0dGVyRm4pIHtcbiAgY29uc3QgY29tcG9uZW50Q2xhc3MgPSB0eXBlO1xuICBjb21wb25lbnRDbGFzc1tBU1lOQ19DT01QT05FTlRfTUVUQURBVEFfRk5dID0gKCkgPT4gUHJvbWlzZS5hbGwoZGVwZW5kZW5jeUxvYWRlckZuKCkpLnRoZW4oZGVwZW5kZW5jaWVzID0+IHtcbiAgICBtZXRhZGF0YVNldHRlckZuKC4uLmRlcGVuZGVuY2llcyk7XG4gICAgY29tcG9uZW50Q2xhc3NbQVNZTkNfQ09NUE9ORU5UX01FVEFEQVRBX0ZOXSA9IG51bGw7XG4gICAgcmV0dXJuIGRlcGVuZGVuY2llcztcbiAgfSk7XG4gIHJldHVybiBjb21wb25lbnRDbGFzc1tBU1lOQ19DT01QT05FTlRfTUVUQURBVEFfRk5dO1xufVxuZnVuY3Rpb24gc2V0Q2xhc3NNZXRhZGF0YSh0eXBlLCBkZWNvcmF0b3JzLCBjdG9yUGFyYW1ldGVycywgcHJvcERlY29yYXRvcnMpIHtcbiAgcmV0dXJuIG5vU2lkZUVmZmVjdHMoKCkgPT4ge1xuICAgIGNvbnN0IGNsYXp6ID0gdHlwZTtcbiAgICBpZiAoZGVjb3JhdG9ycyAhPT0gbnVsbCkge1xuICAgICAgaWYgKGNsYXp6Lmhhc093blByb3BlcnR5KCdkZWNvcmF0b3JzJykgJiYgY2xhenouZGVjb3JhdG9ycyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNsYXp6LmRlY29yYXRvcnMucHVzaCguLi5kZWNvcmF0b3JzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNsYXp6LmRlY29yYXRvcnMgPSBkZWNvcmF0b3JzO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoY3RvclBhcmFtZXRlcnMgIT09IG51bGwpIHtcbiAgICAgIGNsYXp6LmN0b3JQYXJhbWV0ZXJzID0gY3RvclBhcmFtZXRlcnM7XG4gICAgfVxuICAgIGlmIChwcm9wRGVjb3JhdG9ycyAhPT0gbnVsbCkge1xuICAgICAgaWYgKGNsYXp6Lmhhc093blByb3BlcnR5KCdwcm9wRGVjb3JhdG9ycycpICYmIGNsYXp6LnByb3BEZWNvcmF0b3JzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY2xhenoucHJvcERlY29yYXRvcnMgPSB7XG4gICAgICAgICAgLi4uY2xhenoucHJvcERlY29yYXRvcnMsXG4gICAgICAgICAgLi4ucHJvcERlY29yYXRvcnNcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNsYXp6LnByb3BEZWNvcmF0b3JzID0gcHJvcERlY29yYXRvcnM7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn1cbmxldCBDb25zb2xlID0gLyojX19QVVJFX18qLygoKSA9PiB7XG4gIGNsYXNzIENvbnNvbGUge1xuICAgIGxvZyhtZXNzYWdlKSB7XG4gICAgICBjb25zb2xlLmxvZyhtZXNzYWdlKTtcbiAgICB9XG4gICAgd2FybihtZXNzYWdlKSB7XG4gICAgICBjb25zb2xlLndhcm4obWVzc2FnZSk7XG4gICAgfVxuICAgIHN0YXRpYyDJtWZhYyA9IGZ1bmN0aW9uIENvbnNvbGVfRmFjdG9yeShfX25nRmFjdG9yeVR5cGVfXykge1xuICAgICAgcmV0dXJuIG5ldyAoX19uZ0ZhY3RvcnlUeXBlX18gfHwgQ29uc29sZSkoKTtcbiAgICB9O1xuICAgIHN0YXRpYyDJtXByb3YgPSAvKkBfX1BVUkVfXyovX19kZWZpbmVJbmplY3RhYmxlKHtcbiAgICAgIHRva2VuOiBDb25zb2xlLFxuICAgICAgZmFjdG9yeTogQ29uc29sZS7JtWZhYyxcbiAgICAgIHByb3ZpZGVkSW46ICdwbGF0Zm9ybSdcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gQ29uc29sZTtcbn0pKCk7XG4vKiNfX1BVUkVfXyovKCgpID0+IHtcbiAgKHR5cGVvZiBuZ0Rldk1vZGUgPT09IFwidW5kZWZpbmVkXCIgfHwgbmdEZXZNb2RlKSAmJiBzZXRDbGFzc01ldGFkYXRhKENvbnNvbGUsIFt7XG4gICAgdHlwZTogSW5qZWN0YWJsZSxcbiAgICBhcmdzOiBbe1xuICAgICAgcHJvdmlkZWRJbjogJ3BsYXRmb3JtJ1xuICAgIH1dXG4gIH1dLCBudWxsLCBudWxsKTtcbn0pKCk7XG5jbGFzcyBESURlYnVnRGF0YSB7XG4gIHJlc29sdmVyVG9Ub2tlblRvRGVwZW5kZW5jaWVzID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG4gIHJlc29sdmVyVG9Qcm92aWRlcnMgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbiAgcmVzb2x2ZXJUb0VmZmVjdHMgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbiAgc3RhbmRhbG9uZUluamVjdG9yVG9Db21wb25lbnQgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbiAgcmVzZXQoKSB7XG4gICAgdGhpcy5yZXNvbHZlclRvVG9rZW5Ub0RlcGVuZGVuY2llcyA9IG5ldyBXZWFrTWFwKCk7XG4gICAgdGhpcy5yZXNvbHZlclRvUHJvdmlkZXJzID0gbmV3IFdlYWtNYXAoKTtcbiAgICB0aGlzLnN0YW5kYWxvbmVJbmplY3RvclRvQ29tcG9uZW50ID0gbmV3IFdlYWtNYXAoKTtcbiAgfVxufVxubGV0IGZyYW1ld29ya0RJRGVidWdEYXRhID0gLyojX19QVVJFX18qL25ldyBESURlYnVnRGF0YSgpO1xuZnVuY3Rpb24gZ2V0RnJhbWV3b3JrRElEZWJ1Z0RhdGEoKSB7XG4gIHJldHVybiBmcmFtZXdvcmtESURlYnVnRGF0YTtcbn1cbmZ1bmN0aW9uIHNldHVwRnJhbWV3b3JrSW5qZWN0b3JQcm9maWxlcigpIHtcbiAgZnJhbWV3b3JrRElEZWJ1Z0RhdGEucmVzZXQoKTtcbiAgc2V0SW5qZWN0b3JQcm9maWxlcihpbmplY3RvclByb2ZpbGVyRXZlbnRIYW5kbGVyKTtcbn1cbmZ1bmN0aW9uIGluamVjdG9yUHJvZmlsZXJFdmVudEhhbmRsZXIoaW5qZWN0b3JQcm9maWxlckV2ZW50KSB7XG4gIGNvbnN0IHtcbiAgICBjb250ZXh0LFxuICAgIHR5cGVcbiAgfSA9IGluamVjdG9yUHJvZmlsZXJFdmVudDtcbiAgaWYgKHR5cGUgPT09IDApIHtcbiAgICBoYW5kbGVJbmplY3RFdmVudChjb250ZXh0LCBpbmplY3RvclByb2ZpbGVyRXZlbnQuc2VydmljZSk7XG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gMSkge1xuICAgIGhhbmRsZUluc3RhbmNlQ3JlYXRlZEJ5SW5qZWN0b3JFdmVudChjb250ZXh0LCBpbmplY3RvclByb2ZpbGVyRXZlbnQuaW5zdGFuY2UpO1xuICB9IGVsc2UgaWYgKHR5cGUgPT09IDIpIHtcbiAgICBoYW5kbGVQcm92aWRlckNvbmZpZ3VyZWRFdmVudChjb250ZXh0LCBpbmplY3RvclByb2ZpbGVyRXZlbnQucHJvdmlkZXJSZWNvcmQpO1xuICB9IGVsc2UgaWYgKHR5cGUgPT09IDMpIHtcbiAgICBoYW5kbGVFZmZlY3RDcmVhdGVkRXZlbnQoY29udGV4dCwgaW5qZWN0b3JQcm9maWxlckV2ZW50LmVmZmVjdCk7XG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gNCkge1xuICAgIGhhbmRsZUVmZmVjdENyZWF0ZWRFdmVudChjb250ZXh0LCBpbmplY3RvclByb2ZpbGVyRXZlbnQuZWZmZWN0UGhhc2UpO1xuICB9XG59XG5mdW5jdGlvbiBoYW5kbGVFZmZlY3RDcmVhdGVkRXZlbnQoY29udGV4dCwgZWZmZWN0KSB7XG4gIGNvbnN0IGRpUmVzb2x2ZXIgPSBnZXRESVJlc29sdmVyKGNvbnRleHQuaW5qZWN0b3IpO1xuICBpZiAoZGlSZXNvbHZlciA9PT0gbnVsbCkge1xuICAgIHRocm93RXJyb3IoJ0FuIEVmZmVjdENyZWF0ZWQgZXZlbnQgbXVzdCBiZSBydW4gd2l0aGluIGFuIGluamVjdGlvbiBjb250ZXh0LicpO1xuICB9XG4gIGNvbnN0IHtcbiAgICByZXNvbHZlclRvRWZmZWN0c1xuICB9ID0gZnJhbWV3b3JrRElEZWJ1Z0RhdGE7XG4gIGNvbnN0IGNsZWFudXBDb250YWluZXIgPSBlZmZlY3QgaW5zdGFuY2VvZiBFZmZlY3RSZWZJbXBsID8gZWZmZWN0W1NJR05BTF0gOiBlZmZlY3Quc2VxdWVuY2U7XG4gIGxldCB0cmFja2VkRWZmZWN0cyA9IHJlc29sdmVyVG9FZmZlY3RzLmdldChkaVJlc29sdmVyKTtcbiAgaWYgKCF0cmFja2VkRWZmZWN0cykge1xuICAgIHRyYWNrZWRFZmZlY3RzID0gW107XG4gICAgcmVzb2x2ZXJUb0VmZmVjdHMuc2V0KGRpUmVzb2x2ZXIsIHRyYWNrZWRFZmZlY3RzKTtcbiAgfVxuICB0cmFja2VkRWZmZWN0cy5wdXNoKGVmZmVjdCk7XG4gIGNsZWFudXBDb250YWluZXIub25EZXN0cm95Rm5zID8/PSBbXTtcbiAgY2xlYW51cENvbnRhaW5lci5vbkRlc3Ryb3lGbnMucHVzaCgoKSA9PiB7XG4gICAgY29uc3QgaW5kZXggPSB0cmFja2VkRWZmZWN0cy5pbmRleE9mKGVmZmVjdCk7XG4gICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgIHRyYWNrZWRFZmZlY3RzLnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxuICB9KTtcbn1cbmZ1bmN0aW9uIGhhbmRsZUluamVjdEV2ZW50KGNvbnRleHQsIGRhdGEpIHtcbiAgY29uc3QgZGlSZXNvbHZlciA9IGdldERJUmVzb2x2ZXIoY29udGV4dC5pbmplY3Rvcik7XG4gIGlmIChkaVJlc29sdmVyID09PSBudWxsKSB7XG4gICAgdGhyb3dFcnJvcignQW4gSW5qZWN0IGV2ZW50IG11c3QgYmUgcnVuIHdpdGhpbiBhbiBpbmplY3Rpb24gY29udGV4dC4nKTtcbiAgfVxuICBjb25zdCBkaVJlc29sdmVyVG9JbnN0YW50aWF0ZWRUb2tlbiA9IGZyYW1ld29ya0RJRGVidWdEYXRhLnJlc29sdmVyVG9Ub2tlblRvRGVwZW5kZW5jaWVzO1xuICBpZiAoIWRpUmVzb2x2ZXJUb0luc3RhbnRpYXRlZFRva2VuLmhhcyhkaVJlc29sdmVyKSkge1xuICAgIGRpUmVzb2x2ZXJUb0luc3RhbnRpYXRlZFRva2VuLnNldChkaVJlc29sdmVyLCBuZXcgV2Vha01hcCgpKTtcbiAgfVxuICBpZiAoIWNhbkJlSGVsZFdlYWtseShjb250ZXh0LnRva2VuKSkge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBpbnN0YW50aWF0ZWRUb2tlblRvRGVwZW5kZW5jaWVzID0gZGlSZXNvbHZlclRvSW5zdGFudGlhdGVkVG9rZW4uZ2V0KGRpUmVzb2x2ZXIpO1xuICBpZiAoIWluc3RhbnRpYXRlZFRva2VuVG9EZXBlbmRlbmNpZXMuaGFzKGNvbnRleHQudG9rZW4pKSB7XG4gICAgaW5zdGFudGlhdGVkVG9rZW5Ub0RlcGVuZGVuY2llcy5zZXQoY29udGV4dC50b2tlbiwgW10pO1xuICB9XG4gIGNvbnN0IHtcbiAgICB0b2tlbixcbiAgICB2YWx1ZSxcbiAgICBmbGFnc1xuICB9ID0gZGF0YTtcbiAgYXNzZXJ0RGVmaW5lZChjb250ZXh0LnRva2VuLCAnSW5qZWN0b3IgcHJvZmlsZXIgY29udGV4dCB0b2tlbiBpcyB1bmRlZmluZWQuJyk7XG4gIGNvbnN0IGRlcGVuZGVuY2llcyA9IGluc3RhbnRpYXRlZFRva2VuVG9EZXBlbmRlbmNpZXMuZ2V0KGNvbnRleHQudG9rZW4pO1xuICBhc3NlcnREZWZpbmVkKGRlcGVuZGVuY2llcywgJ0NvdWxkIG5vdCByZXNvbHZlIGRlcGVuZGVuY2llcyBmb3IgdG9rZW4uJyk7XG4gIGlmIChjb250ZXh0LmluamVjdG9yIGluc3RhbmNlb2YgTm9kZUluamVjdG9yKSB7XG4gICAgZGVwZW5kZW5jaWVzLnB1c2goe1xuICAgICAgdG9rZW4sXG4gICAgICB2YWx1ZSxcbiAgICAgIGZsYWdzLFxuICAgICAgaW5qZWN0ZWRJbjogZ2V0Tm9kZUluamVjdG9yQ29udGV4dChjb250ZXh0LmluamVjdG9yKVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGRlcGVuZGVuY2llcy5wdXNoKHtcbiAgICAgIHRva2VuLFxuICAgICAgdmFsdWUsXG4gICAgICBmbGFnc1xuICAgIH0pO1xuICB9XG59XG5mdW5jdGlvbiBnZXROb2RlSW5qZWN0b3JDb250ZXh0KGluamVjdG9yKSB7XG4gIGlmICghKGluamVjdG9yIGluc3RhbmNlb2YgTm9kZUluamVjdG9yKSkge1xuICAgIHRocm93RXJyb3IoJ2dldE5vZGVJbmplY3RvckNvbnRleHQgbXVzdCBiZSBjYWxsZWQgd2l0aCBhIE5vZGVJbmplY3RvcicpO1xuICB9XG4gIGNvbnN0IGxWaWV3ID0gZ2V0Tm9kZUluamVjdG9yTFZpZXcoaW5qZWN0b3IpO1xuICBjb25zdCB0Tm9kZSA9IGdldE5vZGVJbmplY3RvclROb2RlKGluamVjdG9yKTtcbiAgaWYgKHROb2RlID09PSBudWxsKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGFzc2VydFROb2RlRm9yTFZpZXcodE5vZGUsIGxWaWV3KTtcbiAgcmV0dXJuIHtcbiAgICBsVmlldyxcbiAgICB0Tm9kZVxuICB9O1xufVxuZnVuY3Rpb24gaGFuZGxlSW5zdGFuY2VDcmVhdGVkQnlJbmplY3RvckV2ZW50KGNvbnRleHQsIGRhdGEpIHtcbiAgY29uc3Qge1xuICAgIHZhbHVlXG4gIH0gPSBkYXRhO1xuICBpZiAoZGF0YS52YWx1ZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChnZXRESVJlc29sdmVyKGNvbnRleHQuaW5qZWN0b3IpID09PSBudWxsKSB7XG4gICAgdGhyb3dFcnJvcignQW4gSW5qZWN0b3JDcmVhdGVkSW5zdGFuY2UgZXZlbnQgbXVzdCBiZSBydW4gd2l0aGluIGFuIGluamVjdGlvbiBjb250ZXh0LicpO1xuICB9XG4gIGxldCBzdGFuZGFsb25lQ29tcG9uZW50ID0gdW5kZWZpbmVkO1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgIHN0YW5kYWxvbmVDb21wb25lbnQgPSB2YWx1ZT8uY29uc3RydWN0b3I7XG4gIH1cbiAgaWYgKHN0YW5kYWxvbmVDb21wb25lbnQgPT0gdW5kZWZpbmVkIHx8ICFpc1N0YW5kYWxvbmVDb21wb25lbnQoc3RhbmRhbG9uZUNvbXBvbmVudCkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgZW52aXJvbm1lbnRJbmplY3RvciA9IGNvbnRleHQuaW5qZWN0b3IuZ2V0KEVudmlyb25tZW50SW5qZWN0b3IsIG51bGwsIHtcbiAgICBvcHRpb25hbDogdHJ1ZVxuICB9KTtcbiAgaWYgKGVudmlyb25tZW50SW5qZWN0b3IgPT09IG51bGwpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3Qge1xuICAgIHN0YW5kYWxvbmVJbmplY3RvclRvQ29tcG9uZW50XG4gIH0gPSBmcmFtZXdvcmtESURlYnVnRGF0YTtcbiAgaWYgKHN0YW5kYWxvbmVJbmplY3RvclRvQ29tcG9uZW50LmhhcyhlbnZpcm9ubWVudEluamVjdG9yKSkge1xuICAgIHJldHVybjtcbiAgfVxuICBzdGFuZGFsb25lSW5qZWN0b3JUb0NvbXBvbmVudC5zZXQoZW52aXJvbm1lbnRJbmplY3Rvciwgc3RhbmRhbG9uZUNvbXBvbmVudCk7XG59XG5mdW5jdGlvbiBpc1N0YW5kYWxvbmVDb21wb25lbnQodmFsdWUpIHtcbiAgY29uc3QgZGVmID0gZ2V0Q29tcG9uZW50RGVmKHZhbHVlKTtcbiAgcmV0dXJuICEhZGVmPy5zdGFuZGFsb25lO1xufVxuZnVuY3Rpb24gaGFuZGxlUHJvdmlkZXJDb25maWd1cmVkRXZlbnQoY29udGV4dCwgZGF0YSkge1xuICBjb25zdCB7XG4gICAgcmVzb2x2ZXJUb1Byb3ZpZGVyc1xuICB9ID0gZnJhbWV3b3JrRElEZWJ1Z0RhdGE7XG4gIGxldCBkaVJlc29sdmVyO1xuICBpZiAoY29udGV4dD8uaW5qZWN0b3IgaW5zdGFuY2VvZiBOb2RlSW5qZWN0b3IpIHtcbiAgICBkaVJlc29sdmVyID0gZ2V0Tm9kZUluamVjdG9yVE5vZGUoY29udGV4dC5pbmplY3Rvcik7XG4gIH0gZWxzZSB7XG4gICAgZGlSZXNvbHZlciA9IGNvbnRleHQuaW5qZWN0b3I7XG4gIH1cbiAgaWYgKGRpUmVzb2x2ZXIgPT09IG51bGwpIHtcbiAgICB0aHJvd0Vycm9yKCdBIFByb3ZpZGVyQ29uZmlndXJlZCBldmVudCBtdXN0IGJlIHJ1biB3aXRoaW4gYW4gaW5qZWN0aW9uIGNvbnRleHQuJyk7XG4gIH1cbiAgaWYgKCFyZXNvbHZlclRvUHJvdmlkZXJzLmhhcyhkaVJlc29sdmVyKSkge1xuICAgIHJlc29sdmVyVG9Qcm92aWRlcnMuc2V0KGRpUmVzb2x2ZXIsIFtdKTtcbiAgfVxuICByZXNvbHZlclRvUHJvdmlkZXJzLmdldChkaVJlc29sdmVyKS5wdXNoKGRhdGEpO1xufVxuZnVuY3Rpb24gZ2V0RElSZXNvbHZlcihpbmplY3Rvcikge1xuICBsZXQgZGlSZXNvbHZlciA9IG51bGw7XG4gIGlmIChpbmplY3RvciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGRpUmVzb2x2ZXI7XG4gIH1cbiAgaWYgKGluamVjdG9yIGluc3RhbmNlb2YgTm9kZUluamVjdG9yKSB7XG4gICAgZGlSZXNvbHZlciA9IGdldE5vZGVJbmplY3RvckxWaWV3KGluamVjdG9yKTtcbiAgfSBlbHNlIHtcbiAgICBkaVJlc29sdmVyID0gaW5qZWN0b3I7XG4gIH1cbiAgcmV0dXJuIGRpUmVzb2x2ZXI7XG59XG5mdW5jdGlvbiBjYW5CZUhlbGRXZWFrbHkodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9PSBudWxsICYmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgdmFsdWUgPT09ICdzeW1ib2wnKTtcbn1cbmZ1bmN0aW9uIGlzU2lnbmFsKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicgJiYgdmFsdWVbU0lHTkFMXSAhPT0gdW5kZWZpbmVkO1xufVxuZnVuY3Rpb24gaXNXcml0YWJsZVNpZ25hbCh2YWx1ZSkge1xuICByZXR1cm4gaXNTaWduYWwodmFsdWUpICYmIHR5cGVvZiB2YWx1ZS5zZXQgPT09ICdmdW5jdGlvbic7XG59XG5mdW5jdGlvbiBhcHBseUNoYW5nZXMoY29tcG9uZW50KSB7XG4gIG5nRGV2TW9kZSAmJiBhc3NlcnREZWZpbmVkKGNvbXBvbmVudCwgJ2NvbXBvbmVudCcpO1xuICBtYXJrVmlld0RpcnR5KGdldENvbXBvbmVudFZpZXdCeUluc3RhbmNlKGNvbXBvbmVudCksIDMpO1xuICBnZXRSb290Q29tcG9uZW50cyhjb21wb25lbnQpLmZvckVhY2gocm9vdENvbXBvbmVudCA9PiBkZXRlY3RDaGFuZ2VzKHJvb3RDb21wb25lbnQpKTtcbn1cbmZ1bmN0aW9uIGRldGVjdENoYW5nZXMoY29tcG9uZW50KSB7XG4gIGNvbnN0IHZpZXcgPSBnZXRDb21wb25lbnRWaWV3QnlJbnN0YW5jZShjb21wb25lbnQpO1xuICB2aWV3W0ZMQUdTXSB8PSAxMDI0O1xuICBkZXRlY3RDaGFuZ2VzSW50ZXJuYWwodmlldyk7XG59XG5mdW5jdGlvbiBnZXREZWZlckJsb2NrcyQxKGxWaWV3LCBkZWZlckJsb2Nrcykge1xuICBjb25zdCB0VmlldyA9IGxWaWV3W1RWSUVXXTtcbiAgZm9yIChsZXQgaSA9IEhFQURFUl9PRkZTRVQ7IGkgPCB0Vmlldy5iaW5kaW5nU3RhcnRJbmRleDsgaSsrKSB7XG4gICAgaWYgKGlzTENvbnRhaW5lcihsVmlld1tpXSkpIHtcbiAgICAgIGNvbnN0IGxDb250YWluZXIgPSBsVmlld1tpXTtcbiAgICAgIGNvbnN0IGlzTGFzdCA9IGkgPT09IHRWaWV3LmJpbmRpbmdTdGFydEluZGV4IC0gMTtcbiAgICAgIGlmICghaXNMYXN0KSB7XG4gICAgICAgIGNvbnN0IHROb2RlID0gdFZpZXcuZGF0YVtpXTtcbiAgICAgICAgY29uc3QgdERldGFpbHMgPSBnZXRURGVmZXJCbG9ja0RldGFpbHModFZpZXcsIHROb2RlKTtcbiAgICAgICAgaWYgKGlzVERlZmVyQmxvY2tEZXRhaWxzKHREZXRhaWxzKSkge1xuICAgICAgICAgIGRlZmVyQmxvY2tzLnB1c2goe1xuICAgICAgICAgICAgbENvbnRhaW5lcixcbiAgICAgICAgICAgIGxWaWV3LFxuICAgICAgICAgICAgdE5vZGUsXG4gICAgICAgICAgICB0RGV0YWlsc1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoaXNMVmlldyhsQ29udGFpbmVyW0hPU1RdKSkge1xuICAgICAgICBnZXREZWZlckJsb2NrcyQxKGxDb250YWluZXJbSE9TVF0sIGRlZmVyQmxvY2tzKTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGogPSBDT05UQUlORVJfSEVBREVSX09GRlNFVDsgaiA8IGxDb250YWluZXIubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgZ2V0RGVmZXJCbG9ja3MkMShsQ29udGFpbmVyW2pdLCBkZWZlckJsb2Nrcyk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc0xWaWV3KGxWaWV3W2ldKSkge1xuICAgICAgZ2V0RGVmZXJCbG9ja3MkMShsVmlld1tpXSwgZGVmZXJCbG9ja3MpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gZ2V0RGVmZXJCbG9ja3Mobm9kZSkge1xuICBjb25zdCByZXN1bHRzID0gW107XG4gIGNvbnN0IGxWaWV3ID0gZ2V0TENvbnRleHQobm9kZSk/LmxWaWV3O1xuICBpZiAobFZpZXcpIHtcbiAgICBmaW5kRGVmZXJCbG9ja3Mobm9kZSwgbFZpZXcsIHJlc3VsdHMpO1xuICB9XG4gIHJldHVybiByZXN1bHRzO1xufVxuZnVuY3Rpb24gZmluZERlZmVyQmxvY2tzKG5vZGUsIGxWaWV3LCByZXN1bHRzKSB7XG4gIGNvbnN0IHZpZXdJbmplY3RvciA9IGxWaWV3W0lOSkVDVE9SXTtcbiAgY29uc3QgcmVnaXN0cnkgPSB2aWV3SW5qZWN0b3IuZ2V0KERFSFlEUkFURURfQkxPQ0tfUkVHSVNUUlksIG51bGwsIHtcbiAgICBvcHRpb25hbDogdHJ1ZVxuICB9KTtcbiAgY29uc3QgYmxvY2tzID0gW107XG4gIGdldERlZmVyQmxvY2tzJDEobFZpZXcsIGJsb2Nrcyk7XG4gIGNvbnN0IHRyYW5zZmVyU3RhdGUgPSB2aWV3SW5qZWN0b3IuZ2V0KFRyYW5zZmVyU3RhdGUpO1xuICBjb25zdCBkZWZlckJsb2NrUGFyZW50cyA9IHRyYW5zZmVyU3RhdGUuZ2V0KE5HSF9ERUZFUl9CTE9DS1NfS0VZLCB7fSk7XG4gIGZvciAoY29uc3QgZGV0YWlscyBvZiBibG9ja3MpIHtcbiAgICBjb25zdCBuYXRpdmUgPSBnZXROYXRpdmVCeVROb2RlKGRldGFpbHMudE5vZGUsIGRldGFpbHMubFZpZXcpO1xuICAgIGNvbnN0IGxEZXRhaWxzID0gZ2V0TERlZmVyQmxvY2tEZXRhaWxzKGRldGFpbHMubFZpZXcsIGRldGFpbHMudE5vZGUpO1xuICAgIGlmICghbm9kZS5jb250YWlucyhuYXRpdmUpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3QgdERldGFpbHMgPSBkZXRhaWxzLnREZXRhaWxzO1xuICAgIGNvbnN0IHJlbmRlcmVkTFZpZXcgPSBnZXRSZW5kZXJlckxWaWV3KGRldGFpbHMpO1xuICAgIGNvbnN0IHJvb3ROb2RlcyA9IFtdO1xuICAgIGNvbnN0IGh5ZHJhdGlvblN0YXRlID0gaW5mZXJIeWRyYXRpb25TdGF0ZSh0RGV0YWlscywgbERldGFpbHMsIHJlZ2lzdHJ5KTtcbiAgICBpZiAocmVuZGVyZWRMVmlldyAhPT0gbnVsbCkge1xuICAgICAgY29sbGVjdE5hdGl2ZU5vZGVzKHJlbmRlcmVkTFZpZXdbVFZJRVddLCByZW5kZXJlZExWaWV3LCByZW5kZXJlZExWaWV3W1RWSUVXXS5maXJzdENoaWxkLCByb290Tm9kZXMpO1xuICAgIH0gZWxzZSBpZiAoaHlkcmF0aW9uU3RhdGUgPT09ICdkZWh5ZHJhdGVkJykge1xuICAgICAgY29uc3QgZGVmZXJJZCA9IGxEZXRhaWxzW1NTUl9VTklRVUVfSURdO1xuICAgICAgY29uc3QgZGVmZXJEYXRhID0gZGVmZXJCbG9ja1BhcmVudHNbZGVmZXJJZF07XG4gICAgICBjb25zdCBudW1iZXJPZlJvb3ROb2RlcyA9IGRlZmVyRGF0YVtOVU1fUk9PVF9OT0RFU107XG4gICAgICBsZXQgY29sbGVjdGVkTm9kZUNvdW50ID0gMDtcbiAgICAgIGNvbnN0IGRlZmVyQmxvY2tDb21tZW50Tm9kZSA9IGRldGFpbHMubENvbnRhaW5lcltOQVRJVkVdO1xuICAgICAgbGV0IGN1cnJlbnROb2RlID0gZGVmZXJCbG9ja0NvbW1lbnROb2RlLnByZXZpb3VzU2libGluZztcbiAgICAgIHdoaWxlIChjb2xsZWN0ZWROb2RlQ291bnQgPCBudW1iZXJPZlJvb3ROb2RlcyAmJiBjdXJyZW50Tm9kZSkge1xuICAgICAgICByb290Tm9kZXMudW5zaGlmdChjdXJyZW50Tm9kZSk7XG4gICAgICAgIGN1cnJlbnROb2RlID0gY3VycmVudE5vZGUucHJldmlvdXNTaWJsaW5nO1xuICAgICAgICBjb2xsZWN0ZWROb2RlQ291bnQrKztcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgZGF0YSA9IHtcbiAgICAgIHN0YXRlOiBzdHJpbmdpZnlTdGF0ZShsRGV0YWlsc1tERUZFUl9CTE9DS19TVEFURV0pLFxuICAgICAgaW5jcmVtZW50YWxIeWRyYXRpb25TdGF0ZTogaHlkcmF0aW9uU3RhdGUsXG4gICAgICBoYXNFcnJvckJsb2NrOiB0RGV0YWlscy5lcnJvclRtcGxJbmRleCAhPT0gbnVsbCxcbiAgICAgIGxvYWRpbmdCbG9jazoge1xuICAgICAgICBleGlzdHM6IHREZXRhaWxzLmxvYWRpbmdUbXBsSW5kZXggIT09IG51bGwsXG4gICAgICAgIG1pbmltdW1UaW1lOiB0RGV0YWlscy5sb2FkaW5nQmxvY2tDb25maWc/LltNSU5JTVVNX1NMT1RdID8/IG51bGwsXG4gICAgICAgIGFmdGVyVGltZTogdERldGFpbHMubG9hZGluZ0Jsb2NrQ29uZmlnPy5bTE9BRElOR19BRlRFUl9TTE9UXSA/PyBudWxsXG4gICAgICB9LFxuICAgICAgcGxhY2Vob2xkZXJCbG9jazoge1xuICAgICAgICBleGlzdHM6IHREZXRhaWxzLnBsYWNlaG9sZGVyVG1wbEluZGV4ICE9PSBudWxsLFxuICAgICAgICBtaW5pbXVtVGltZTogdERldGFpbHMucGxhY2Vob2xkZXJCbG9ja0NvbmZpZz8uW01JTklNVU1fU0xPVF0gPz8gbnVsbFxuICAgICAgfSxcbiAgICAgIHRyaWdnZXJzOiB0RGV0YWlscy5kZWJ1Zz8udHJpZ2dlcnMgPyBBcnJheS5mcm9tKHREZXRhaWxzLmRlYnVnLnRyaWdnZXJzKS5zb3J0KCkgOiBbXSxcbiAgICAgIGhvc3ROb2RlOiBkZXRhaWxzLmxDb250YWluZXJbSE9TVF0sXG4gICAgICByb290Tm9kZXNcbiAgICB9O1xuICAgIHJlc3VsdHMucHVzaChkYXRhKTtcbiAgICBpZiAocmVuZGVyZWRMVmlldyAhPT0gbnVsbCkge1xuICAgICAgZmluZERlZmVyQmxvY2tzKG5vZGUsIHJlbmRlcmVkTFZpZXcsIHJlc3VsdHMpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gc3RyaW5naWZ5U3RhdGUoc3RhdGUpIHtcbiAgc3dpdGNoIChzdGF0ZSkge1xuICAgIGNhc2UgRGVmZXJCbG9ja1N0YXRlLkNvbXBsZXRlOlxuICAgICAgcmV0dXJuICdjb21wbGV0ZSc7XG4gICAgY2FzZSBEZWZlckJsb2NrU3RhdGUuTG9hZGluZzpcbiAgICAgIHJldHVybiAnbG9hZGluZyc7XG4gICAgY2FzZSBEZWZlckJsb2NrU3RhdGUuUGxhY2Vob2xkZXI6XG4gICAgICByZXR1cm4gJ3BsYWNlaG9sZGVyJztcbiAgICBjYXNlIERlZmVyQmxvY2tTdGF0ZS5FcnJvcjpcbiAgICAgIHJldHVybiAnZXJyb3InO1xuICAgIGNhc2UgRGVmZXJCbG9ja0ludGVybmFsU3RhdGUuSW5pdGlhbDpcbiAgICAgIHJldHVybiAnaW5pdGlhbCc7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5yZWNvZ25pemVkIHN0YXRlICR7c3RhdGV9YCk7XG4gIH1cbn1cbmZ1bmN0aW9uIGluZmVySHlkcmF0aW9uU3RhdGUodERldGFpbHMsIGxEZXRhaWxzLCByZWdpc3RyeSkge1xuICBpZiAocmVnaXN0cnkgPT09IG51bGwgfHwgbERldGFpbHNbU1NSX1VOSVFVRV9JRF0gPT09IG51bGwgfHwgdERldGFpbHMuaHlkcmF0ZVRyaWdnZXJzID09PSBudWxsIHx8IHREZXRhaWxzLmh5ZHJhdGVUcmlnZ2Vycy5oYXMoNykpIHtcbiAgICByZXR1cm4gJ25vdC1jb25maWd1cmVkJztcbiAgfVxuICByZXR1cm4gcmVnaXN0cnkuaGFzKGxEZXRhaWxzW1NTUl9VTklRVUVfSURdKSA/ICdkZWh5ZHJhdGVkJyA6ICdoeWRyYXRlZCc7XG59XG5mdW5jdGlvbiBnZXRSZW5kZXJlckxWaWV3KGRldGFpbHMpIHtcbiAgaWYgKGRldGFpbHMubENvbnRhaW5lci5sZW5ndGggPD0gQ09OVEFJTkVSX0hFQURFUl9PRkZTRVQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCBsVmlldyA9IGRldGFpbHMubENvbnRhaW5lcltDT05UQUlORVJfSEVBREVSX09GRlNFVF07XG4gIG5nRGV2TW9kZSAmJiBhc3NlcnRMVmlldyhsVmlldyk7XG4gIHJldHVybiBsVmlldztcbn1cbmZ1bmN0aW9uIGdldERlcGVuZGVuY2llc0Zyb21JbmplY3RhYmxlKGluamVjdG9yLCB0b2tlbikge1xuICBjb25zdCBpbnN0YW5jZSA9IGluamVjdG9yLmdldCh0b2tlbiwgbnVsbCwge1xuICAgIHNlbGY6IHRydWUsXG4gICAgb3B0aW9uYWw6IHRydWVcbiAgfSk7XG4gIGlmIChpbnN0YW5jZSA9PT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIGRldGVybWluZSBpbnN0YW5jZSBvZiAke3Rva2VufSBpbiBnaXZlbiBpbmplY3RvcmApO1xuICB9XG4gIGNvbnN0IHVuZm9ybWF0dGVkRGVwZW5kZW5jaWVzID0gZ2V0RGVwZW5kZW5jaWVzRm9yVG9rZW5JbkluamVjdG9yKHRva2VuLCBpbmplY3Rvcik7XG4gIGNvbnN0IHJlc29sdXRpb25QYXRoID0gZ2V0SW5qZWN0b3JSZXNvbHV0aW9uUGF0aChpbmplY3Rvcik7XG4gIGNvbnN0IGRlcGVuZGVuY2llcyA9IHVuZm9ybWF0dGVkRGVwZW5kZW5jaWVzLm1hcChkZXAgPT4ge1xuICAgIGNvbnN0IGZvcm1hdHRlZERlcGVuZGVuY3kgPSB7XG4gICAgICB2YWx1ZTogZGVwLnZhbHVlXG4gICAgfTtcbiAgICBjb25zdCBmbGFncyA9IGRlcC5mbGFncztcbiAgICBmb3JtYXR0ZWREZXBlbmRlbmN5LmZsYWdzID0ge1xuICAgICAgb3B0aW9uYWw6ICg4ICYgZmxhZ3MpID09PSA4LFxuICAgICAgaG9zdDogKDEgJiBmbGFncykgPT09IDEsXG4gICAgICBzZWxmOiAoMiAmIGZsYWdzKSA9PT0gMixcbiAgICAgIHNraXBTZWxmOiAoNCAmIGZsYWdzKSA9PT0gNFxuICAgIH07XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXNvbHV0aW9uUGF0aC5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgaW5qZWN0b3JUb0NoZWNrID0gcmVzb2x1dGlvblBhdGhbaV07XG4gICAgICBpZiAoaSA9PT0gMCAmJiBmb3JtYXR0ZWREZXBlbmRlbmN5LmZsYWdzLnNraXBTZWxmKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKGZvcm1hdHRlZERlcGVuZGVuY3kuZmxhZ3MuaG9zdCAmJiBpbmplY3RvclRvQ2hlY2sgaW5zdGFuY2VvZiBFbnZpcm9ubWVudEluamVjdG9yKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY29uc3QgaW5zdGFuY2UgPSBpbmplY3RvclRvQ2hlY2suZ2V0KGRlcC50b2tlbiwgbnVsbCwge1xuICAgICAgICBzZWxmOiB0cnVlLFxuICAgICAgICBvcHRpb25hbDogdHJ1ZVxuICAgICAgfSk7XG4gICAgICBpZiAoaW5zdGFuY2UgIT09IG51bGwpIHtcbiAgICAgICAgaWYgKGZvcm1hdHRlZERlcGVuZGVuY3kuZmxhZ3MuaG9zdCkge1xuICAgICAgICAgIGNvbnN0IGZpcnN0SW5qZWN0b3IgPSByZXNvbHV0aW9uUGF0aFswXTtcbiAgICAgICAgICBjb25zdCBsb29rdXBGcm9tRmlyc3RJbmplY3RvciA9IGZpcnN0SW5qZWN0b3IuZ2V0KGRlcC50b2tlbiwgbnVsbCwge1xuICAgICAgICAgICAgLi4uZm9ybWF0dGVkRGVwZW5kZW5jeS5mbGFncyxcbiAgICAgICAgICAgIG9wdGlvbmFsOiB0cnVlXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaWYgKGxvb2t1cEZyb21GaXJzdEluamVjdG9yICE9PSBudWxsKSB7XG4gICAgICAgICAgICBmb3JtYXR0ZWREZXBlbmRlbmN5LnByb3ZpZGVkSW4gPSBpbmplY3RvclRvQ2hlY2s7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGZvcm1hdHRlZERlcGVuZGVuY3kucHJvdmlkZWRJbiA9IGluamVjdG9yVG9DaGVjaztcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBpZiAoaSA9PT0gMCAmJiBmb3JtYXR0ZWREZXBlbmRlbmN5LmZsYWdzLnNlbGYpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChkZXAudG9rZW4pIGZvcm1hdHRlZERlcGVuZGVuY3kudG9rZW4gPSBkZXAudG9rZW47XG4gICAgcmV0dXJuIGZvcm1hdHRlZERlcGVuZGVuY3k7XG4gIH0pO1xuICByZXR1cm4ge1xuICAgIGluc3RhbmNlLFxuICAgIGRlcGVuZGVuY2llc1xuICB9O1xufVxuZnVuY3Rpb24gZ2V0RGVwZW5kZW5jaWVzRm9yVG9rZW5JbkluamVjdG9yKHRva2VuLCBpbmplY3Rvcikge1xuICBjb25zdCB7XG4gICAgcmVzb2x2ZXJUb1Rva2VuVG9EZXBlbmRlbmNpZXNcbiAgfSA9IGdldEZyYW1ld29ya0RJRGVidWdEYXRhKCk7XG4gIGlmICghKGluamVjdG9yIGluc3RhbmNlb2YgTm9kZUluamVjdG9yKSkge1xuICAgIHJldHVybiByZXNvbHZlclRvVG9rZW5Ub0RlcGVuZGVuY2llcy5nZXQoaW5qZWN0b3IpPy5nZXQ/Lih0b2tlbikgPz8gW107XG4gIH1cbiAgY29uc3QgbFZpZXcgPSBnZXROb2RlSW5qZWN0b3JMVmlldyhpbmplY3Rvcik7XG4gIGNvbnN0IHRva2VuRGVwZW5kZW5jeU1hcCA9IHJlc29sdmVyVG9Ub2tlblRvRGVwZW5kZW5jaWVzLmdldChsVmlldyk7XG4gIGNvbnN0IGRlcGVuZGVuY2llcyA9IHRva2VuRGVwZW5kZW5jeU1hcD8uZ2V0KHRva2VuKSA/PyBbXTtcbiAgcmV0dXJuIGRlcGVuZGVuY2llcy5maWx0ZXIoZGVwZW5kZW5jeSA9PiB7XG4gICAgY29uc3QgZGVwZW5kZW5jeU5vZGUgPSBkZXBlbmRlbmN5LmluamVjdGVkSW4/LnROb2RlO1xuICAgIGlmIChkZXBlbmRlbmN5Tm9kZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGluc3RhbmNlTm9kZSA9IGdldE5vZGVJbmplY3RvclROb2RlKGluamVjdG9yKTtcbiAgICBhc3NlcnRUTm9kZShkZXBlbmRlbmN5Tm9kZSk7XG4gICAgYXNzZXJ0VE5vZGUoaW5zdGFuY2VOb2RlKTtcbiAgICByZXR1cm4gZGVwZW5kZW5jeU5vZGUgPT09IGluc3RhbmNlTm9kZTtcbiAgfSk7XG59XG5mdW5jdGlvbiBnZXRQcm92aWRlckltcG9ydHNDb250YWluZXIoaW5qZWN0b3IpIHtcbiAgY29uc3Qge1xuICAgIHN0YW5kYWxvbmVJbmplY3RvclRvQ29tcG9uZW50XG4gIH0gPSBnZXRGcmFtZXdvcmtESURlYnVnRGF0YSgpO1xuICBpZiAoc3RhbmRhbG9uZUluamVjdG9yVG9Db21wb25lbnQuaGFzKGluamVjdG9yKSkge1xuICAgIHJldHVybiBzdGFuZGFsb25lSW5qZWN0b3JUb0NvbXBvbmVudC5nZXQoaW5qZWN0b3IpO1xuICB9XG4gIGNvbnN0IGRlZlR5cGVSZWYgPSBpbmplY3Rvci5nZXQoTmdNb2R1bGVSZWYkMSwgbnVsbCwge1xuICAgIHNlbGY6IHRydWUsXG4gICAgb3B0aW9uYWw6IHRydWVcbiAgfSk7XG4gIGlmIChkZWZUeXBlUmVmID09PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgaWYgKGRlZlR5cGVSZWYuaW5zdGFuY2UgPT09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4gZGVmVHlwZVJlZi5pbnN0YW5jZS5jb25zdHJ1Y3Rvcjtcbn1cbmZ1bmN0aW9uIGdldE5vZGVJbmplY3RvclByb3ZpZGVycyhpbmplY3Rvcikge1xuICBjb25zdCBkaVJlc29sdmVyID0gZ2V0Tm9kZUluamVjdG9yVE5vZGUoaW5qZWN0b3IpO1xuICBjb25zdCB7XG4gICAgcmVzb2x2ZXJUb1Byb3ZpZGVyc1xuICB9ID0gZ2V0RnJhbWV3b3JrRElEZWJ1Z0RhdGEoKTtcbiAgcmV0dXJuIHJlc29sdmVyVG9Qcm92aWRlcnMuZ2V0KGRpUmVzb2x2ZXIpID8/IFtdO1xufVxuZnVuY3Rpb24gZ2V0UHJvdmlkZXJJbXBvcnRQYXRocyhwcm92aWRlckltcG9ydHNDb250YWluZXIpIHtcbiAgY29uc3QgcHJvdmlkZXJUb1BhdGggPSBuZXcgTWFwKCk7XG4gIGNvbnN0IHZpc2l0ZWRDb250YWluZXJzID0gbmV3IFNldCgpO1xuICBjb25zdCB2aXNpdG9yID0gd2Fsa1Byb3ZpZGVyVHJlZVRvRGlzY292ZXJJbXBvcnRQYXRocyhwcm92aWRlclRvUGF0aCwgdmlzaXRlZENvbnRhaW5lcnMpO1xuICB3YWxrUHJvdmlkZXJUcmVlKHByb3ZpZGVySW1wb3J0c0NvbnRhaW5lciwgdmlzaXRvciwgW10sIG5ldyBTZXQoKSk7XG4gIHJldHVybiBwcm92aWRlclRvUGF0aDtcbn1cbmZ1bmN0aW9uIHdhbGtQcm92aWRlclRyZWVUb0Rpc2NvdmVySW1wb3J0UGF0aHMocHJvdmlkZXJUb1BhdGgsIHZpc2l0ZWRDb250YWluZXJzKSB7XG4gIHJldHVybiAocHJvdmlkZXIsIGNvbnRhaW5lcikgPT4ge1xuICAgIGlmICghcHJvdmlkZXJUb1BhdGguaGFzKHByb3ZpZGVyKSkge1xuICAgICAgcHJvdmlkZXJUb1BhdGguc2V0KHByb3ZpZGVyLCBbY29udGFpbmVyXSk7XG4gICAgfVxuICAgIGlmICghdmlzaXRlZENvbnRhaW5lcnMuaGFzKGNvbnRhaW5lcikpIHtcbiAgICAgIGZvciAoY29uc3QgcHJvdiBvZiBwcm92aWRlclRvUGF0aC5rZXlzKCkpIHtcbiAgICAgICAgY29uc3QgZXhpc3RpbmdJbXBvcnRQYXRoID0gcHJvdmlkZXJUb1BhdGguZ2V0KHByb3YpO1xuICAgICAgICBsZXQgY29udGFpbmVyRGVmID0gZ2V0SW5qZWN0b3JEZWYoY29udGFpbmVyKTtcbiAgICAgICAgaWYgKCFjb250YWluZXJEZWYpIHtcbiAgICAgICAgICBjb25zdCBuZ01vZHVsZSA9IGNvbnRhaW5lci5uZ01vZHVsZTtcbiAgICAgICAgICBjb250YWluZXJEZWYgPSBnZXRJbmplY3RvckRlZihuZ01vZHVsZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFjb250YWluZXJEZWYpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbGFzdENvbnRhaW5lckFkZGVkVG9QYXRoID0gZXhpc3RpbmdJbXBvcnRQYXRoWzBdO1xuICAgICAgICBsZXQgaXNOZXh0U3RlcEluUGF0aCA9IGZhbHNlO1xuICAgICAgICBkZWVwRm9yRWFjaChjb250YWluZXJEZWYuaW1wb3J0cywgbW9kdWxlSW1wb3J0ID0+IHtcbiAgICAgICAgICBpZiAoaXNOZXh0U3RlcEluUGF0aCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpc05leHRTdGVwSW5QYXRoID0gbW9kdWxlSW1wb3J0Lm5nTW9kdWxlID09PSBsYXN0Q29udGFpbmVyQWRkZWRUb1BhdGggfHwgbW9kdWxlSW1wb3J0ID09PSBsYXN0Q29udGFpbmVyQWRkZWRUb1BhdGg7XG4gICAgICAgICAgaWYgKGlzTmV4dFN0ZXBJblBhdGgpIHtcbiAgICAgICAgICAgIHByb3ZpZGVyVG9QYXRoLmdldChwcm92KT8udW5zaGlmdChjb250YWluZXIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIHZpc2l0ZWRDb250YWluZXJzLmFkZChjb250YWluZXIpO1xuICB9O1xufVxuZnVuY3Rpb24gZ2V0RW52aXJvbm1lbnRJbmplY3RvclByb3ZpZGVycyhpbmplY3Rvcikge1xuICBjb25zdCBwcm92aWRlclJlY29yZHNXaXRob3V0SW1wb3J0UGF0aHMgPSBnZXRGcmFtZXdvcmtESURlYnVnRGF0YSgpLnJlc29sdmVyVG9Qcm92aWRlcnMuZ2V0KGluamVjdG9yKSA/PyBbXTtcbiAgaWYgKGlzUGxhdGZvcm1JbmplY3RvcihpbmplY3RvcikpIHtcbiAgICByZXR1cm4gcHJvdmlkZXJSZWNvcmRzV2l0aG91dEltcG9ydFBhdGhzO1xuICB9XG4gIGNvbnN0IHByb3ZpZGVySW1wb3J0c0NvbnRhaW5lciA9IGdldFByb3ZpZGVySW1wb3J0c0NvbnRhaW5lcihpbmplY3Rvcik7XG4gIGlmIChwcm92aWRlckltcG9ydHNDb250YWluZXIgPT09IG51bGwpIHtcbiAgICByZXR1cm4gcHJvdmlkZXJSZWNvcmRzV2l0aG91dEltcG9ydFBhdGhzO1xuICB9XG4gIGNvbnN0IHByb3ZpZGVyVG9QYXRoID0gZ2V0UHJvdmlkZXJJbXBvcnRQYXRocyhwcm92aWRlckltcG9ydHNDb250YWluZXIpO1xuICBjb25zdCBwcm92aWRlclJlY29yZHMgPSBbXTtcbiAgZm9yIChjb25zdCBwcm92aWRlclJlY29yZCBvZiBwcm92aWRlclJlY29yZHNXaXRob3V0SW1wb3J0UGF0aHMpIHtcbiAgICBjb25zdCBwcm92aWRlciA9IHByb3ZpZGVyUmVjb3JkLnByb3ZpZGVyO1xuICAgIGNvbnN0IHRva2VuID0gcHJvdmlkZXIucHJvdmlkZTtcbiAgICBpZiAodG9rZW4gPT09IEVOVklST05NRU5UX0lOSVRJQUxJWkVSIHx8IHRva2VuID09PSBJTkpFQ1RPUl9ERUZfVFlQRVMpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBsZXQgaW1wb3J0UGF0aCA9IHByb3ZpZGVyVG9QYXRoLmdldChwcm92aWRlcikgPz8gW107XG4gICAgY29uc3QgZGVmID0gZ2V0Q29tcG9uZW50RGVmKHByb3ZpZGVySW1wb3J0c0NvbnRhaW5lcik7XG4gICAgY29uc3QgaXNTdGFuZGFsb25lQ29tcG9uZW50ID0gISFkZWY/LnN0YW5kYWxvbmU7XG4gICAgaWYgKGlzU3RhbmRhbG9uZUNvbXBvbmVudCkge1xuICAgICAgaW1wb3J0UGF0aCA9IFtwcm92aWRlckltcG9ydHNDb250YWluZXIsIC4uLmltcG9ydFBhdGhdO1xuICAgIH1cbiAgICBwcm92aWRlclJlY29yZHMucHVzaCh7XG4gICAgICAuLi5wcm92aWRlclJlY29yZCxcbiAgICAgIGltcG9ydFBhdGhcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gcHJvdmlkZXJSZWNvcmRzO1xufVxuZnVuY3Rpb24gaXNQbGF0Zm9ybUluamVjdG9yKGluamVjdG9yKSB7XG4gIHJldHVybiBpbmplY3RvciBpbnN0YW5jZW9mIFIzSW5qZWN0b3IgJiYgaW5qZWN0b3Iuc2NvcGVzLmhhcygncGxhdGZvcm0nKTtcbn1cbmZ1bmN0aW9uIGdldEluamVjdG9yUHJvdmlkZXJzKGluamVjdG9yKSB7XG4gIGlmIChpbmplY3RvciBpbnN0YW5jZW9mIE5vZGVJbmplY3Rvcikge1xuICAgIHJldHVybiBnZXROb2RlSW5qZWN0b3JQcm92aWRlcnMoaW5qZWN0b3IpO1xuICB9IGVsc2UgaWYgKGluamVjdG9yIGluc3RhbmNlb2YgRW52aXJvbm1lbnRJbmplY3Rvcikge1xuICAgIHJldHVybiBnZXRFbnZpcm9ubWVudEluamVjdG9yUHJvdmlkZXJzKGluamVjdG9yKTtcbiAgfVxuICB0aHJvd0Vycm9yKCdnZXRJbmplY3RvclByb3ZpZGVycyBvbmx5IHN1cHBvcnRzIE5vZGVJbmplY3RvciBhbmQgRW52aXJvbm1lbnRJbmplY3RvcicpO1xufVxuZnVuY3Rpb24gZ2V0SW5qZWN0b3JNZXRhZGF0YShpbmplY3Rvcikge1xuICBpZiAoaW5qZWN0b3IgaW5zdGFuY2VvZiBOb2RlSW5qZWN0b3IpIHtcbiAgICBjb25zdCBsVmlldyA9IGdldE5vZGVJbmplY3RvckxWaWV3KGluamVjdG9yKTtcbiAgICBjb25zdCB0Tm9kZSA9IGdldE5vZGVJbmplY3RvclROb2RlKGluamVjdG9yKTtcbiAgICBhc3NlcnRUTm9kZUZvckxWaWV3KHROb2RlLCBsVmlldyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdlbGVtZW50JyxcbiAgICAgIHNvdXJjZTogZ2V0TmF0aXZlQnlUTm9kZSh0Tm9kZSwgbFZpZXcpXG4gICAgfTtcbiAgfVxuICBpZiAoaW5qZWN0b3IgaW5zdGFuY2VvZiBSM0luamVjdG9yKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdlbnZpcm9ubWVudCcsXG4gICAgICBzb3VyY2U6IGluamVjdG9yLnNvdXJjZSA/PyBudWxsXG4gICAgfTtcbiAgfVxuICBpZiAoaW5qZWN0b3IgaW5zdGFuY2VvZiBOdWxsSW5qZWN0b3IpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ251bGwnLFxuICAgICAgc291cmNlOiBudWxsXG4gICAgfTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIGdldEluamVjdG9yUmVzb2x1dGlvblBhdGgoaW5qZWN0b3IpIHtcbiAgY29uc3QgcmVzb2x1dGlvblBhdGggPSBbaW5qZWN0b3JdO1xuICBnZXRJbmplY3RvclJlc29sdXRpb25QYXRoSGVscGVyKGluamVjdG9yLCByZXNvbHV0aW9uUGF0aCk7XG4gIHJldHVybiByZXNvbHV0aW9uUGF0aDtcbn1cbmZ1bmN0aW9uIGdldEluamVjdG9yUmVzb2x1dGlvblBhdGhIZWxwZXIoaW5qZWN0b3IsIHJlc29sdXRpb25QYXRoKSB7XG4gIGNvbnN0IHBhcmVudCA9IGdldEluamVjdG9yUGFyZW50KGluamVjdG9yKTtcbiAgaWYgKHBhcmVudCA9PT0gbnVsbCkge1xuICAgIGlmIChpbmplY3RvciBpbnN0YW5jZW9mIE5vZGVJbmplY3Rvcikge1xuICAgICAgY29uc3QgZmlyc3RJbmplY3RvciA9IHJlc29sdXRpb25QYXRoWzBdO1xuICAgICAgaWYgKGZpcnN0SW5qZWN0b3IgaW5zdGFuY2VvZiBOb2RlSW5qZWN0b3IpIHtcbiAgICAgICAgY29uc3QgbW9kdWxlSW5qZWN0b3IgPSBnZXRNb2R1bGVJbmplY3Rvck9mTm9kZUluamVjdG9yKGZpcnN0SW5qZWN0b3IpO1xuICAgICAgICBpZiAobW9kdWxlSW5qZWN0b3IgPT09IG51bGwpIHtcbiAgICAgICAgICB0aHJvd0Vycm9yKCdOb2RlSW5qZWN0b3IgbXVzdCBoYXZlIHNvbWUgY29ubmVjdGlvbiB0byB0aGUgbW9kdWxlIGluamVjdG9yIHRyZWUnKTtcbiAgICAgICAgfVxuICAgICAgICByZXNvbHV0aW9uUGF0aC5wdXNoKG1vZHVsZUluamVjdG9yKTtcbiAgICAgICAgZ2V0SW5qZWN0b3JSZXNvbHV0aW9uUGF0aEhlbHBlcihtb2R1bGVJbmplY3RvciwgcmVzb2x1dGlvblBhdGgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc29sdXRpb25QYXRoO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICByZXNvbHV0aW9uUGF0aC5wdXNoKHBhcmVudCk7XG4gICAgZ2V0SW5qZWN0b3JSZXNvbHV0aW9uUGF0aEhlbHBlcihwYXJlbnQsIHJlc29sdXRpb25QYXRoKTtcbiAgfVxuICByZXR1cm4gcmVzb2x1dGlvblBhdGg7XG59XG5mdW5jdGlvbiBnZXRJbmplY3RvclBhcmVudChpbmplY3Rvcikge1xuICBpZiAoaW5qZWN0b3IgaW5zdGFuY2VvZiBSM0luamVjdG9yKSB7XG4gICAgcmV0dXJuIGluamVjdG9yLnBhcmVudDtcbiAgfVxuICBsZXQgdE5vZGU7XG4gIGxldCBsVmlldztcbiAgaWYgKGluamVjdG9yIGluc3RhbmNlb2YgTm9kZUluamVjdG9yKSB7XG4gICAgdE5vZGUgPSBnZXROb2RlSW5qZWN0b3JUTm9kZShpbmplY3Rvcik7XG4gICAgbFZpZXcgPSBnZXROb2RlSW5qZWN0b3JMVmlldyhpbmplY3Rvcik7XG4gIH0gZWxzZSBpZiAoaW5qZWN0b3IgaW5zdGFuY2VvZiBOdWxsSW5qZWN0b3IpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfSBlbHNlIGlmIChpbmplY3RvciBpbnN0YW5jZW9mIENoYWluZWRJbmplY3Rvcikge1xuICAgIHJldHVybiBpbmplY3Rvci5wYXJlbnRJbmplY3RvcjtcbiAgfSBlbHNlIHtcbiAgICB0aHJvd0Vycm9yKCdnZXRJbmplY3RvclBhcmVudCBvbmx5IHN1cHBvcnQgaW5qZWN0b3JzIG9mIHR5cGUgUjNJbmplY3RvciwgTm9kZUluamVjdG9yLCBOdWxsSW5qZWN0b3InKTtcbiAgfVxuICBjb25zdCBwYXJlbnRMb2NhdGlvbiA9IGdldFBhcmVudEluamVjdG9yTG9jYXRpb24odE5vZGUsIGxWaWV3KTtcbiAgaWYgKGhhc1BhcmVudEluamVjdG9yKHBhcmVudExvY2F0aW9uKSkge1xuICAgIGNvbnN0IHBhcmVudEluamVjdG9ySW5kZXggPSBnZXRQYXJlbnRJbmplY3RvckluZGV4KHBhcmVudExvY2F0aW9uKTtcbiAgICBjb25zdCBwYXJlbnRMVmlldyA9IGdldFBhcmVudEluamVjdG9yVmlldyhwYXJlbnRMb2NhdGlvbiwgbFZpZXcpO1xuICAgIGNvbnN0IHBhcmVudFRWaWV3ID0gcGFyZW50TFZpZXdbVFZJRVddO1xuICAgIGNvbnN0IHBhcmVudFROb2RlID0gcGFyZW50VFZpZXcuZGF0YVtwYXJlbnRJbmplY3RvckluZGV4ICsgOF07XG4gICAgcmV0dXJuIG5ldyBOb2RlSW5qZWN0b3IocGFyZW50VE5vZGUsIHBhcmVudExWaWV3KTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBjaGFpbmVkSW5qZWN0b3IgPSBsVmlld1tJTkpFQ1RPUl07XG4gICAgY29uc3QgaW5qZWN0b3JQYXJlbnQgPSBjaGFpbmVkSW5qZWN0b3IuaW5qZWN0b3I/LnBhcmVudDtcbiAgICBpZiAoaW5qZWN0b3JQYXJlbnQgaW5zdGFuY2VvZiBOb2RlSW5qZWN0b3IpIHtcbiAgICAgIHJldHVybiBpbmplY3RvclBhcmVudDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5mdW5jdGlvbiBnZXRNb2R1bGVJbmplY3Rvck9mTm9kZUluamVjdG9yKGluamVjdG9yKSB7XG4gIGxldCBsVmlldztcbiAgaWYgKGluamVjdG9yIGluc3RhbmNlb2YgTm9kZUluamVjdG9yKSB7XG4gICAgbFZpZXcgPSBnZXROb2RlSW5qZWN0b3JMVmlldyhpbmplY3Rvcik7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3dFcnJvcignZ2V0TW9kdWxlSW5qZWN0b3JPZk5vZGVJbmplY3RvciBtdXN0IGJlIGNhbGxlZCB3aXRoIGEgTm9kZUluamVjdG9yJyk7XG4gIH1cbiAgY29uc3QgaW5qID0gbFZpZXdbSU5KRUNUT1JdO1xuICBjb25zdCBtb2R1bGVJbmplY3RvciA9IGluaiBpbnN0YW5jZW9mIENoYWluZWRJbmplY3RvciA/IGluai5wYXJlbnRJbmplY3RvciA6IGluai5wYXJlbnQ7XG4gIGlmICghbW9kdWxlSW5qZWN0b3IpIHtcbiAgICB0aHJvd0Vycm9yKCdOb2RlSW5qZWN0b3IgbXVzdCBoYXZlIHNvbWUgY29ubmVjdGlvbiB0byB0aGUgbW9kdWxlIGluamVjdG9yIHRyZWUnKTtcbiAgfVxuICByZXR1cm4gbW9kdWxlSW5qZWN0b3I7XG59XG5mdW5jdGlvbiBpc0NvbXB1dGVkTm9kZShub2RlKSB7XG4gIHJldHVybiBub2RlLmtpbmQgPT09ICdjb21wdXRlZCc7XG59XG5mdW5jdGlvbiBpc1RlbXBsYXRlRWZmZWN0Tm9kZShub2RlKSB7XG4gIHJldHVybiBub2RlLmtpbmQgPT09ICd0ZW1wbGF0ZSc7XG59XG5mdW5jdGlvbiBpc1NpZ25hbE5vZGUobm9kZSkge1xuICByZXR1cm4gbm9kZS5raW5kID09PSAnc2lnbmFsJztcbn1cbmZ1bmN0aW9uIGdldFRlbXBsYXRlQ29uc3VtZXIoaW5qZWN0b3IpIHtcbiAgY29uc3QgdE5vZGUgPSBnZXROb2RlSW5qZWN0b3JUTm9kZShpbmplY3Rvcik7XG4gIGFzc2VydFROb2RlKHROb2RlKTtcbiAgY29uc3QgbFZpZXcgPSBnZXROb2RlSW5qZWN0b3JMVmlldyhpbmplY3Rvcik7XG4gIGFzc2VydExWaWV3KGxWaWV3KTtcbiAgY29uc3QgdGVtcGxhdGVMVmlldyA9IGxWaWV3W3ROb2RlLmluZGV4XTtcbiAgaWYgKGlzTFZpZXcodGVtcGxhdGVMVmlldykpIHtcbiAgICByZXR1cm4gdGVtcGxhdGVMVmlld1tSRUFDVElWRV9URU1QTEFURV9DT05TVU1FUl0gPz8gbnVsbDtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cbmNvbnN0IHNpZ25hbERlYnVnTWFwID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG5sZXQgY291bnRlciQxID0gMDtcbmZ1bmN0aW9uIGdldE5vZGVzQW5kRWRnZXNGcm9tU2lnbmFsTWFwKHNpZ25hbE1hcCkge1xuICBjb25zdCBub2RlcyA9IEFycmF5LmZyb20oc2lnbmFsTWFwLmtleXMoKSk7XG4gIGNvbnN0IGRlYnVnU2lnbmFsR3JhcGhOb2RlcyA9IFtdO1xuICBjb25zdCBlZGdlcyA9IFtdO1xuICBmb3IgKGNvbnN0IFtjb25zdW1lciwgcHJvZHVjZXJzXSBvZiBzaWduYWxNYXAuZW50cmllcygpKSB7XG4gICAgY29uc3QgY29uc3VtZXJJbmRleCA9IG5vZGVzLmluZGV4T2YoY29uc3VtZXIpO1xuICAgIGxldCBpZCA9IHNpZ25hbERlYnVnTWFwLmdldChjb25zdW1lcik7XG4gICAgaWYgKCFpZCkge1xuICAgICAgY291bnRlciQxKys7XG4gICAgICBpZCA9IGNvdW50ZXIkMS50b1N0cmluZygpO1xuICAgICAgc2lnbmFsRGVidWdNYXAuc2V0KGNvbnN1bWVyLCBpZCk7XG4gICAgfVxuICAgIGlmIChpc0NvbXB1dGVkTm9kZShjb25zdW1lcikpIHtcbiAgICAgIGRlYnVnU2lnbmFsR3JhcGhOb2Rlcy5wdXNoKHtcbiAgICAgICAgbGFiZWw6IGNvbnN1bWVyLmRlYnVnTmFtZSxcbiAgICAgICAgdmFsdWU6IGNvbnN1bWVyLnZhbHVlLFxuICAgICAgICBraW5kOiBjb25zdW1lci5raW5kLFxuICAgICAgICBlcG9jaDogY29uc3VtZXIudmVyc2lvbixcbiAgICAgICAgZGVidWdnYWJsZUZuOiBjb25zdW1lci5jb21wdXRhdGlvbixcbiAgICAgICAgaWRcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoaXNTaWduYWxOb2RlKGNvbnN1bWVyKSkge1xuICAgICAgZGVidWdTaWduYWxHcmFwaE5vZGVzLnB1c2goe1xuICAgICAgICBsYWJlbDogY29uc3VtZXIuZGVidWdOYW1lLFxuICAgICAgICB2YWx1ZTogY29uc3VtZXIudmFsdWUsXG4gICAgICAgIGtpbmQ6IGNvbnN1bWVyLmtpbmQsXG4gICAgICAgIGVwb2NoOiBjb25zdW1lci52ZXJzaW9uLFxuICAgICAgICBpZFxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChpc1RlbXBsYXRlRWZmZWN0Tm9kZShjb25zdW1lcikpIHtcbiAgICAgIGRlYnVnU2lnbmFsR3JhcGhOb2Rlcy5wdXNoKHtcbiAgICAgICAgbGFiZWw6IGNvbnN1bWVyLmRlYnVnTmFtZSA/PyBjb25zdW1lci5sVmlldz8uW0hPU1RdPy50YWdOYW1lPy50b0xvd2VyQ2FzZT8uKCksXG4gICAgICAgIGtpbmQ6IGNvbnN1bWVyLmtpbmQsXG4gICAgICAgIGVwb2NoOiBjb25zdW1lci52ZXJzaW9uLFxuICAgICAgICBkZWJ1Z2dhYmxlRm46IGNvbnN1bWVyLmxWaWV3Py5bQ09OVEVYVF0/LmNvbnN0cnVjdG9yLFxuICAgICAgICBpZFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlYnVnU2lnbmFsR3JhcGhOb2Rlcy5wdXNoKHtcbiAgICAgICAgbGFiZWw6IGNvbnN1bWVyLmRlYnVnTmFtZSxcbiAgICAgICAga2luZDogY29uc3VtZXIua2luZCxcbiAgICAgICAgZXBvY2g6IGNvbnN1bWVyLnZlcnNpb24sXG4gICAgICAgIGlkXG4gICAgICB9KTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBwcm9kdWNlciBvZiBwcm9kdWNlcnMpIHtcbiAgICAgIGVkZ2VzLnB1c2goe1xuICAgICAgICBjb25zdW1lcjogY29uc3VtZXJJbmRleCxcbiAgICAgICAgcHJvZHVjZXI6IG5vZGVzLmluZGV4T2YocHJvZHVjZXIpXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBub2RlczogZGVidWdTaWduYWxHcmFwaE5vZGVzLFxuICAgIGVkZ2VzXG4gIH07XG59XG5mdW5jdGlvbiBleHRyYWN0RWZmZWN0c0Zyb21JbmplY3RvcihpbmplY3Rvcikge1xuICBsZXQgZGlSZXNvbHZlciA9IGluamVjdG9yO1xuICBpZiAoaW5qZWN0b3IgaW5zdGFuY2VvZiBOb2RlSW5qZWN0b3IpIHtcbiAgICBjb25zdCBsVmlldyA9IGdldE5vZGVJbmplY3RvckxWaWV3KGluamVjdG9yKTtcbiAgICBkaVJlc29sdmVyID0gbFZpZXc7XG4gIH1cbiAgY29uc3QgcmVzb2x2ZXJUb0VmZmVjdHMgPSBnZXRGcmFtZXdvcmtESURlYnVnRGF0YSgpLnJlc29sdmVyVG9FZmZlY3RzO1xuICBjb25zdCBlZmZlY3RzID0gcmVzb2x2ZXJUb0VmZmVjdHMuZ2V0KGRpUmVzb2x2ZXIpID8/IFtdO1xuICByZXR1cm4gZWZmZWN0cy5tYXAoZWZmZWN0ID0+IHtcbiAgICBpZiAoZWZmZWN0IGluc3RhbmNlb2YgRWZmZWN0UmVmSW1wbCkge1xuICAgICAgcmV0dXJuIGVmZmVjdFtTSUdOQUxdO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZWZmZWN0LnNpZ25hbFtTSUdOQUxdO1xuICAgIH1cbiAgfSk7XG59XG5mdW5jdGlvbiBleHRyYWN0U2lnbmFsTm9kZXNBbmRFZGdlc0Zyb21Sb290cyhub2Rlcywgc2lnbmFsRGVwZW5kZW5jaWVzTWFwID0gbmV3IE1hcCgpKSB7XG4gIGZvciAoY29uc3Qgbm9kZSBvZiBub2Rlcykge1xuICAgIGlmIChzaWduYWxEZXBlbmRlbmNpZXNNYXAuaGFzKG5vZGUpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3QgcHJvZHVjZXJOb2RlcyA9IFtdO1xuICAgIGZvciAobGV0IGxpbmsgPSBub2RlLnByb2R1Y2VyczsgbGluayAhPT0gdW5kZWZpbmVkOyBsaW5rID0gbGluay5uZXh0UHJvZHVjZXIpIHtcbiAgICAgIGNvbnN0IHByb2R1Y2VyID0gbGluay5wcm9kdWNlcjtcbiAgICAgIHByb2R1Y2VyTm9kZXMucHVzaChwcm9kdWNlcik7XG4gICAgfVxuICAgIHNpZ25hbERlcGVuZGVuY2llc01hcC5zZXQobm9kZSwgcHJvZHVjZXJOb2Rlcyk7XG4gICAgZXh0cmFjdFNpZ25hbE5vZGVzQW5kRWRnZXNGcm9tUm9vdHMocHJvZHVjZXJOb2Rlcywgc2lnbmFsRGVwZW5kZW5jaWVzTWFwKTtcbiAgfVxuICByZXR1cm4gc2lnbmFsRGVwZW5kZW5jaWVzTWFwO1xufVxuZnVuY3Rpb24gZ2V0U2lnbmFsR3JhcGgoaW5qZWN0b3IpIHtcbiAgbGV0IHRlbXBsYXRlQ29uc3VtZXIgPSBudWxsO1xuICBpZiAoIShpbmplY3RvciBpbnN0YW5jZW9mIE5vZGVJbmplY3RvcikgJiYgIShpbmplY3RvciBpbnN0YW5jZW9mIFIzSW5qZWN0b3IpKSB7XG4gICAgcmV0dXJuIHRocm93RXJyb3IoJ2dldFNpZ25hbEdyYXBoIG11c3QgYmUgY2FsbGVkIHdpdGggYSBOb2RlSW5qZWN0b3Igb3IgUjNJbmplY3RvcicpO1xuICB9XG4gIGlmIChpbmplY3RvciBpbnN0YW5jZW9mIE5vZGVJbmplY3Rvcikge1xuICAgIHRlbXBsYXRlQ29uc3VtZXIgPSBnZXRUZW1wbGF0ZUNvbnN1bWVyKGluamVjdG9yKTtcbiAgfVxuICBjb25zdCBub25UZW1wbGF0ZUVmZmVjdE5vZGVzID0gZXh0cmFjdEVmZmVjdHNGcm9tSW5qZWN0b3IoaW5qZWN0b3IpO1xuICBjb25zdCBzaWduYWxOb2RlcyA9IHRlbXBsYXRlQ29uc3VtZXIgPyBbdGVtcGxhdGVDb25zdW1lciwgLi4ubm9uVGVtcGxhdGVFZmZlY3ROb2Rlc10gOiBub25UZW1wbGF0ZUVmZmVjdE5vZGVzO1xuICBjb25zdCBzaWduYWxEZXBlbmRlbmNpZXNNYXAgPSBleHRyYWN0U2lnbmFsTm9kZXNBbmRFZGdlc0Zyb21Sb290cyhzaWduYWxOb2Rlcyk7XG4gIHJldHVybiBnZXROb2Rlc0FuZEVkZ2VzRnJvbVNpZ25hbE1hcChzaWduYWxEZXBlbmRlbmNpZXNNYXApO1xufVxubGV0IGNoYW5nZURldGVjdGlvblJ1bnMgPSAwO1xubGV0IGNoYW5nZURldGVjdGlvblN5bmNSdW5zID0gMDtcbmxldCBjb3VudGVyID0gMDtcbmNvbnN0IGV2ZW50c1N0YWNrID0gW107XG5mdW5jdGlvbiBtZWFzdXJlU3RhcnQoc3RhcnRFdmVudCkge1xuICBldmVudHNTdGFjay5wdXNoKFtzdGFydEV2ZW50LCBjb3VudGVyXSk7XG4gIGNvbnNvbGUudGltZVN0YW1wKCdFdmVudF8nICsgc3RhcnRFdmVudCArICdfJyArIGNvdW50ZXIrKyk7XG59XG5mdW5jdGlvbiBtZWFzdXJlRW5kKHN0YXJ0RXZlbnQsIGVudHJ5TmFtZSwgY29sb3IpIHtcbiAgbGV0IHRvcDtcbiAgZG8ge1xuICAgIHRvcCA9IGV2ZW50c1N0YWNrLnBvcCgpO1xuICAgIGFzc2VydERlZmluZWQodG9wLCAnUHJvZmlsaW5nIGVycm9yOiBjb3VsZCBub3QgZmluZCBzdGFydCBldmVudCBlbnRyeSAnICsgc3RhcnRFdmVudCk7XG4gIH0gd2hpbGUgKHRvcFswXSAhPT0gc3RhcnRFdmVudCk7XG4gIGNvbnNvbGUudGltZVN0YW1wKGVudHJ5TmFtZSwgJ0V2ZW50XycgKyB0b3BbMF0gKyAnXycgKyB0b3BbMV0sIHVuZGVmaW5lZCwgJ1xcdXsxRjE3MH1cXHVGRTBGIEFuZ3VsYXInLCB1bmRlZmluZWQsIGNvbG9yKTtcbn1cbmNvbnN0IGNocm9tZURldlRvb2xzSW5qZWN0b3JQcm9maWxlciA9IGV2ZW50ID0+IHtcbiAgY29uc3QgZXZlbnRUeXBlID0gZXZlbnQudHlwZTtcbiAgaWYgKGV2ZW50VHlwZSA9PT0gNSkge1xuICAgIG1lYXN1cmVTdGFydCgxMDApO1xuICB9IGVsc2UgaWYgKGV2ZW50VHlwZSA9PT0gMSkge1xuICAgIGNvbnN0IHRva2VuID0gZXZlbnQuY29udGV4dC50b2tlbjtcbiAgICBtZWFzdXJlRW5kKDEwMCwgZ2V0UHJvdmlkZXJUb2tlbk1lYXN1cmVOYW1lKHRva2VuKSwgJ3RlcnRpYXJ5LWRhcmsnKTtcbiAgfVxufTtcbmNvbnN0IGRldlRvb2xzUHJvZmlsZXIgPSAoZXZlbnQsIGluc3RhbmNlLCBldmVudEZuKSA9PiB7XG4gIHN3aXRjaCAoZXZlbnQpIHtcbiAgICBjYXNlIFByb2ZpbGVyRXZlbnQuQm9vdHN0cmFwQXBwbGljYXRpb25TdGFydDpcbiAgICBjYXNlIFByb2ZpbGVyRXZlbnQuQm9vdHN0cmFwQ29tcG9uZW50U3RhcnQ6XG4gICAgY2FzZSBQcm9maWxlckV2ZW50LkNoYW5nZURldGVjdGlvblN0YXJ0OlxuICAgIGNhc2UgUHJvZmlsZXJFdmVudC5DaGFuZ2VEZXRlY3Rpb25TeW5jU3RhcnQ6XG4gICAgY2FzZSBQcm9maWxlckV2ZW50LkFmdGVyUmVuZGVySG9va3NTdGFydDpcbiAgICBjYXNlIFByb2ZpbGVyRXZlbnQuQ29tcG9uZW50U3RhcnQ6XG4gICAgY2FzZSBQcm9maWxlckV2ZW50LkRlZmVyQmxvY2tTdGF0ZVN0YXJ0OlxuICAgIGNhc2UgUHJvZmlsZXJFdmVudC5EeW5hbWljQ29tcG9uZW50U3RhcnQ6XG4gICAgY2FzZSBQcm9maWxlckV2ZW50LlRlbXBsYXRlQ3JlYXRlU3RhcnQ6XG4gICAgY2FzZSBQcm9maWxlckV2ZW50LkxpZmVjeWNsZUhvb2tTdGFydDpcbiAgICBjYXNlIFByb2ZpbGVyRXZlbnQuVGVtcGxhdGVVcGRhdGVTdGFydDpcbiAgICBjYXNlIFByb2ZpbGVyRXZlbnQuSG9zdEJpbmRpbmdzVXBkYXRlU3RhcnQ6XG4gICAgY2FzZSBQcm9maWxlckV2ZW50Lk91dHB1dFN0YXJ0OlxuICAgICAge1xuICAgICAgICBtZWFzdXJlU3RhcnQoZXZlbnQpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICBjYXNlIFByb2ZpbGVyRXZlbnQuQm9vdHN0cmFwQXBwbGljYXRpb25FbmQ6XG4gICAgICB7XG4gICAgICAgIG1lYXN1cmVFbmQoUHJvZmlsZXJFdmVudC5Cb290c3RyYXBBcHBsaWNhdGlvblN0YXJ0LCAnQm9vdHN0cmFwIGFwcGxpY2F0aW9uJywgJ3ByaW1hcnktZGFyaycpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICBjYXNlIFByb2ZpbGVyRXZlbnQuQm9vdHN0cmFwQ29tcG9uZW50RW5kOlxuICAgICAge1xuICAgICAgICBtZWFzdXJlRW5kKFByb2ZpbGVyRXZlbnQuQm9vdHN0cmFwQ29tcG9uZW50U3RhcnQsICdCb290c3RyYXAgY29tcG9uZW50JywgJ3ByaW1hcnktZGFyaycpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICBjYXNlIFByb2ZpbGVyRXZlbnQuQ2hhbmdlRGV0ZWN0aW9uRW5kOlxuICAgICAge1xuICAgICAgICBjaGFuZ2VEZXRlY3Rpb25TeW5jUnVucyA9IDA7XG4gICAgICAgIG1lYXN1cmVFbmQoUHJvZmlsZXJFdmVudC5DaGFuZ2VEZXRlY3Rpb25TdGFydCwgJ0NoYW5nZSBkZXRlY3Rpb24gJyArIGNoYW5nZURldGVjdGlvblJ1bnMrKywgJ3ByaW1hcnktZGFyaycpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICBjYXNlIFByb2ZpbGVyRXZlbnQuQ2hhbmdlRGV0ZWN0aW9uU3luY0VuZDpcbiAgICAgIHtcbiAgICAgICAgbWVhc3VyZUVuZChQcm9maWxlckV2ZW50LkNoYW5nZURldGVjdGlvblN5bmNTdGFydCwgJ1N5bmNocm9uaXphdGlvbiAnICsgY2hhbmdlRGV0ZWN0aW9uU3luY1J1bnMrKywgJ3ByaW1hcnknKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgY2FzZSBQcm9maWxlckV2ZW50LkFmdGVyUmVuZGVySG9va3NFbmQ6XG4gICAgICB7XG4gICAgICAgIG1lYXN1cmVFbmQoUHJvZmlsZXJFdmVudC5BZnRlclJlbmRlckhvb2tzU3RhcnQsICdBZnRlciByZW5kZXIgaG9va3MnLCAncHJpbWFyeScpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICBjYXNlIFByb2ZpbGVyRXZlbnQuQ29tcG9uZW50RW5kOlxuICAgICAge1xuICAgICAgICBjb25zdCB0eXBlTmFtZSA9IGdldENvbXBvbmVudE1lYXN1cmVOYW1lKGluc3RhbmNlKTtcbiAgICAgICAgbWVhc3VyZUVuZChQcm9maWxlckV2ZW50LkNvbXBvbmVudFN0YXJ0LCB0eXBlTmFtZSwgJ3ByaW1hcnktbGlnaHQnKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgY2FzZSBQcm9maWxlckV2ZW50LkRlZmVyQmxvY2tTdGF0ZUVuZDpcbiAgICAgIHtcbiAgICAgICAgbWVhc3VyZUVuZChQcm9maWxlckV2ZW50LkRlZmVyQmxvY2tTdGF0ZVN0YXJ0LCAnRGVmZXIgYmxvY2snLCAncHJpbWFyeS1kYXJrJyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIGNhc2UgUHJvZmlsZXJFdmVudC5EeW5hbWljQ29tcG9uZW50RW5kOlxuICAgICAge1xuICAgICAgICBtZWFzdXJlRW5kKFByb2ZpbGVyRXZlbnQuRHluYW1pY0NvbXBvbmVudFN0YXJ0LCAnRHluYW1pYyBjb21wb25lbnQgY3JlYXRpb24nLCAncHJpbWFyeS1kYXJrJyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIGNhc2UgUHJvZmlsZXJFdmVudC5UZW1wbGF0ZVVwZGF0ZUVuZDpcbiAgICAgIHtcbiAgICAgICAgbWVhc3VyZUVuZChQcm9maWxlckV2ZW50LlRlbXBsYXRlVXBkYXRlU3RhcnQsIHN0cmluZ2lmeUZvckVycm9yKGV2ZW50Rm4pICsgJyAodXBkYXRlKScsICdzZWNvbmRhcnktZGFyaycpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICBjYXNlIFByb2ZpbGVyRXZlbnQuVGVtcGxhdGVDcmVhdGVFbmQ6XG4gICAgICB7XG4gICAgICAgIG1lYXN1cmVFbmQoUHJvZmlsZXJFdmVudC5UZW1wbGF0ZUNyZWF0ZVN0YXJ0LCBzdHJpbmdpZnlGb3JFcnJvcihldmVudEZuKSArICcgKGNyZWF0ZSknLCAnc2Vjb25kYXJ5Jyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIGNhc2UgUHJvZmlsZXJFdmVudC5Ib3N0QmluZGluZ3NVcGRhdGVFbmQ6XG4gICAgICB7XG4gICAgICAgIG1lYXN1cmVFbmQoUHJvZmlsZXJFdmVudC5Ib3N0QmluZGluZ3NVcGRhdGVTdGFydCwgJ0hvc3RCaW5kaW5ncycsICdzZWNvbmRhcnktZGFyaycpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICBjYXNlIFByb2ZpbGVyRXZlbnQuTGlmZWN5Y2xlSG9va0VuZDpcbiAgICAgIHtcbiAgICAgICAgY29uc3QgdHlwZU5hbWUgPSBnZXRDb21wb25lbnRNZWFzdXJlTmFtZShpbnN0YW5jZSk7XG4gICAgICAgIG1lYXN1cmVFbmQoUHJvZmlsZXJFdmVudC5MaWZlY3ljbGVIb29rU3RhcnQsIGAke3R5cGVOYW1lfToke3N0cmluZ2lmeUZvckVycm9yKGV2ZW50Rm4pfWAsICd0ZXJ0aWFyeScpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICBjYXNlIFByb2ZpbGVyRXZlbnQuT3V0cHV0RW5kOlxuICAgICAge1xuICAgICAgICBtZWFzdXJlRW5kKFByb2ZpbGVyRXZlbnQuT3V0cHV0U3RhcnQsIHN0cmluZ2lmeUZvckVycm9yKGV2ZW50Rm4pLCAndGVydGlhcnktbGlnaHQnKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgZGVmYXVsdDpcbiAgICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmV4cGVjdGVkIHByb2ZpbGluZyBldmVudCB0eXBlOiAnICsgZXZlbnQpO1xuICAgICAgfVxuICB9XG59O1xuZnVuY3Rpb24gZ2V0Q29tcG9uZW50TWVhc3VyZU5hbWUoaW5zdGFuY2UpIHtcbiAgcmV0dXJuIGluc3RhbmNlLmNvbnN0cnVjdG9yLm5hbWU7XG59XG5mdW5jdGlvbiBnZXRQcm92aWRlclRva2VuTWVhc3VyZU5hbWUodG9rZW4pIHtcbiAgaWYgKGlzVHlwZVByb3ZpZGVyKHRva2VuKSkge1xuICAgIHJldHVybiB0b2tlbi5uYW1lO1xuICB9IGVsc2UgaWYgKHRva2VuLnByb3ZpZGUgIT0gbnVsbCkge1xuICAgIHJldHVybiBnZXRQcm92aWRlclRva2VuTWVhc3VyZU5hbWUodG9rZW4ucHJvdmlkZSk7XG4gIH1cbiAgcmV0dXJuIHRva2VuLnRvU3RyaW5nKCk7XG59XG5mdW5jdGlvbiBlbmFibGVQcm9maWxpbmcoKSB7XG4gIHBlcmZvcm1hbmNlTWFya0ZlYXR1cmUoJ0Nocm9tZSBEZXZUb29scyBwcm9maWxpbmcnKTtcbiAgaWYgKHR5cGVvZiBuZ0Rldk1vZGUgIT09ICd1bmRlZmluZWQnICYmIG5nRGV2TW9kZSkge1xuICAgIGNvbnN0IHJlbW92ZUluamVjdG9yUHJvZmlsZXIgPSBzZXRJbmplY3RvclByb2ZpbGVyKGNocm9tZURldlRvb2xzSW5qZWN0b3JQcm9maWxlcik7XG4gICAgY29uc3QgcmVtb3ZlUHJvZmlsZXIgPSBzZXRQcm9maWxlcihkZXZUb29sc1Byb2ZpbGVyKTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgcmVtb3ZlSW5qZWN0b3JQcm9maWxlcigpO1xuICAgICAgcmVtb3ZlUHJvZmlsZXIoKTtcbiAgICB9O1xuICB9XG4gIHJldHVybiAoKSA9PiB7fTtcbn1cbmZ1bmN0aW9uIGdldFRyYW5zZmVyU3RhdGUoaW5qZWN0b3IpIHtcbiAgY29uc3QgZG9jID0gaW5qZWN0b3IuZ2V0KERPQ1VNRU5UJDEpO1xuICBjb25zdCBhcHBJZCA9IGluamVjdG9yLmdldChBUFBfSUQpO1xuICBjb25zdCB0cmFuc2ZlclN0YXRlID0gcmV0cmlldmVUcmFuc2ZlcnJlZFN0YXRlKGRvYywgYXBwSWQpO1xuICBjb25zdCBmaWx0ZXJlZEVudHJpZXMgPSB7fTtcbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModHJhbnNmZXJTdGF0ZSkpIHtcbiAgICBpZiAoIWlzSW50ZXJuYWxIeWRyYXRpb25UcmFuc2ZlclN0YXRlS2V5KGtleSkpIHtcbiAgICAgIGZpbHRlcmVkRW50cmllc1trZXldID0gdmFsdWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBmaWx0ZXJlZEVudHJpZXM7XG59XG5jb25zdCBHTE9CQUxfUFVCTElTSF9FWFBBTkRPX0tFWSA9ICduZyc7XG5jb25zdCBnbG9iYWxVdGlsc0Z1bmN0aW9ucyA9IHtcbiAgJ8m1Z2V0RGVwZW5kZW5jaWVzRnJvbUluamVjdGFibGUnOiBnZXREZXBlbmRlbmNpZXNGcm9tSW5qZWN0YWJsZSxcbiAgJ8m1Z2V0SW5qZWN0b3JQcm92aWRlcnMnOiBnZXRJbmplY3RvclByb3ZpZGVycyxcbiAgJ8m1Z2V0SW5qZWN0b3JSZXNvbHV0aW9uUGF0aCc6IGdldEluamVjdG9yUmVzb2x1dGlvblBhdGgsXG4gICfJtWdldEluamVjdG9yTWV0YWRhdGEnOiBnZXRJbmplY3Rvck1ldGFkYXRhLFxuICAnybVzZXRQcm9maWxlcic6IHNldFByb2ZpbGVyLFxuICAnybVnZXRTaWduYWxHcmFwaCc6IGdldFNpZ25hbEdyYXBoLFxuICAnybVnZXREZWZlckJsb2Nrcyc6IGdldERlZmVyQmxvY2tzLFxuICAnybVnZXRUcmFuc2ZlclN0YXRlJzogZ2V0VHJhbnNmZXJTdGF0ZSxcbiAgJ2dldERpcmVjdGl2ZU1ldGFkYXRhJzogZ2V0RGlyZWN0aXZlTWV0YWRhdGEkMSxcbiAgJ2dldENvbXBvbmVudCc6IGdldENvbXBvbmVudCxcbiAgJ2dldENvbnRleHQnOiBnZXRDb250ZXh0LFxuICAnZ2V0TGlzdGVuZXJzJzogZ2V0TGlzdGVuZXJzLFxuICAnZ2V0T3duaW5nQ29tcG9uZW50JzogZ2V0T3duaW5nQ29tcG9uZW50LFxuICAnZ2V0SG9zdEVsZW1lbnQnOiBnZXRIb3N0RWxlbWVudCxcbiAgJ2dldEluamVjdG9yJzogZ2V0SW5qZWN0b3IsXG4gICdnZXRSb290Q29tcG9uZW50cyc6IGdldFJvb3RDb21wb25lbnRzLFxuICAnZ2V0RGlyZWN0aXZlcyc6IGdldERpcmVjdGl2ZXMsXG4gICdhcHBseUNoYW5nZXMnOiBhcHBseUNoYW5nZXMsXG4gICdpc1NpZ25hbCc6IGlzU2lnbmFsLFxuICAnZW5hYmxlUHJvZmlsaW5nJzogZW5hYmxlUHJvZmlsaW5nXG59O1xubGV0IF9wdWJsaXNoZWQgPSBmYWxzZTtcbmZ1bmN0aW9uIHB1Ymxpc2hEZWZhdWx0R2xvYmFsVXRpbHMkMSgpIHtcbiAgaWYgKCFfcHVibGlzaGVkKSB7XG4gICAgX3B1Ymxpc2hlZCA9IHRydWU7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBzZXR1cEZyYW1ld29ya0luamVjdG9yUHJvZmlsZXIoKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBbbWV0aG9kTmFtZSwgbWV0aG9kXSBvZiBPYmplY3QuZW50cmllcyhnbG9iYWxVdGlsc0Z1bmN0aW9ucykpIHtcbiAgICAgIHB1Ymxpc2hHbG9iYWxVdGlsKG1ldGhvZE5hbWUsIG1ldGhvZCk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBwdWJsaXNoR2xvYmFsVXRpbChuYW1lLCBmbikge1xuICBwdWJsaXNoVXRpbChuYW1lLCBmbik7XG59XG5mdW5jdGlvbiBwdWJsaXNoRXh0ZXJuYWxHbG9iYWxVdGlsKG5hbWUsIGZuKSB7XG4gIHB1Ymxpc2hVdGlsKG5hbWUsIGZuKTtcbn1cbmZ1bmN0aW9uIHB1Ymxpc2hVdGlsKG5hbWUsIGZuKSB7XG4gIGlmICh0eXBlb2YgQ09NUElMRUQgPT09ICd1bmRlZmluZWQnIHx8ICFDT01QSUxFRCkge1xuICAgIGNvbnN0IHcgPSBfZ2xvYmFsO1xuICAgIG5nRGV2TW9kZSAmJiBhc3NlcnREZWZpbmVkKGZuLCAnZnVuY3Rpb24gbm90IGRlZmluZWQnKTtcbiAgICB3W0dMT0JBTF9QVUJMSVNIX0VYUEFORE9fS0VZXSA/Pz0ge307XG4gICAgd1tHTE9CQUxfUFVCTElTSF9FWFBBTkRPX0tFWV1bbmFtZV0gPSBmbjtcbiAgfVxufVxuY29uc3QgVEVTVEFCSUxJVFkgPSAvKiNfX1BVUkVfXyovbmV3IEluamVjdGlvblRva2VuKCcnKTtcbmNvbnN0IFRFU1RBQklMSVRZX0dFVFRFUiA9IC8qI19fUFVSRV9fKi9uZXcgSW5qZWN0aW9uVG9rZW4oJycpO1xubGV0IFRlc3RhYmlsaXR5ID0gLyojX19QVVJFX18qLygoKSA9PiB7XG4gIGNsYXNzIFRlc3RhYmlsaXR5IHtcbiAgICBfbmdab25lO1xuICAgIHJlZ2lzdHJ5O1xuICAgIF9pc1pvbmVTdGFibGUgPSB0cnVlO1xuICAgIF9jYWxsYmFja3MgPSBbXTtcbiAgICBfdGFza1RyYWNraW5nWm9uZSA9IG51bGw7XG4gICAgX2Rlc3Ryb3lSZWY7XG4gICAgY29uc3RydWN0b3IoX25nWm9uZSwgcmVnaXN0cnksIHRlc3RhYmlsaXR5R2V0dGVyKSB7XG4gICAgICB0aGlzLl9uZ1pvbmUgPSBfbmdab25lO1xuICAgICAgdGhpcy5yZWdpc3RyeSA9IHJlZ2lzdHJ5O1xuICAgICAgaWYgKGlzSW5JbmplY3Rpb25Db250ZXh0KCkpIHtcbiAgICAgICAgdGhpcy5fZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmLCB7XG4gICAgICAgICAgb3B0aW9uYWw6IHRydWVcbiAgICAgICAgfSkgPz8gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgaWYgKCFfdGVzdGFiaWxpdHlHZXR0ZXIpIHtcbiAgICAgICAgc2V0VGVzdGFiaWxpdHlHZXR0ZXIodGVzdGFiaWxpdHlHZXR0ZXIpO1xuICAgICAgICB0ZXN0YWJpbGl0eUdldHRlci5hZGRUb1dpbmRvdyhyZWdpc3RyeSk7XG4gICAgICB9XG4gICAgICB0aGlzLl93YXRjaEFuZ3VsYXJFdmVudHMoKTtcbiAgICAgIF9uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgdGhpcy5fdGFza1RyYWNraW5nWm9uZSA9IHR5cGVvZiBab25lID09ICd1bmRlZmluZWQnID8gbnVsbCA6IFpvbmUuY3VycmVudC5nZXQoJ1Rhc2tUcmFja2luZ1pvbmUnKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBfd2F0Y2hBbmd1bGFyRXZlbnRzKCkge1xuICAgICAgY29uc3Qgb25VbnN0YWJsZVN1YnNjcmlwdGlvbiA9IHRoaXMuX25nWm9uZS5vblVuc3RhYmxlLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLl9pc1pvbmVTdGFibGUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBjb25zdCBvblN0YWJsZVN1YnNjcmlwdGlvbiA9IHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB0aGlzLl9uZ1pvbmUub25TdGFibGUuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICAgIE5nWm9uZS5hc3NlcnROb3RJbkFuZ3VsYXJab25lKCk7XG4gICAgICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5faXNab25lU3RhYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX3J1bkNhbGxiYWNrc0lmUmVhZHkoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSkpO1xuICAgICAgdGhpcy5fZGVzdHJveVJlZj8ub25EZXN0cm95KCgpID0+IHtcbiAgICAgICAgb25VbnN0YWJsZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICBvblN0YWJsZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIGlzU3RhYmxlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2lzWm9uZVN0YWJsZSAmJiAhdGhpcy5fbmdab25lLmhhc1BlbmRpbmdNYWNyb3Rhc2tzO1xuICAgIH1cbiAgICBfcnVuQ2FsbGJhY2tzSWZSZWFkeSgpIHtcbiAgICAgIGlmICh0aGlzLmlzU3RhYmxlKCkpIHtcbiAgICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICAgIHdoaWxlICh0aGlzLl9jYWxsYmFja3MubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgICAgICBsZXQgY2IgPSB0aGlzLl9jYWxsYmFja3MucG9wKCk7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQoY2IudGltZW91dElkKTtcbiAgICAgICAgICAgIGNiLmRvbmVDYigpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZXQgcGVuZGluZyA9IHRoaXMuZ2V0UGVuZGluZ1Rhc2tzKCk7XG4gICAgICAgIHRoaXMuX2NhbGxiYWNrcyA9IHRoaXMuX2NhbGxiYWNrcy5maWx0ZXIoY2IgPT4ge1xuICAgICAgICAgIGlmIChjYi51cGRhdGVDYiAmJiBjYi51cGRhdGVDYihwZW5kaW5nKSkge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGNiLnRpbWVvdXRJZCk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgZ2V0UGVuZGluZ1Rhc2tzKCkge1xuICAgICAgaWYgKCF0aGlzLl90YXNrVHJhY2tpbmdab25lKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLl90YXNrVHJhY2tpbmdab25lLm1hY3JvVGFza3MubWFwKHQgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHNvdXJjZTogdC5zb3VyY2UsXG4gICAgICAgICAgY3JlYXRpb25Mb2NhdGlvbjogdC5jcmVhdGlvbkxvY2F0aW9uLFxuICAgICAgICAgIGRhdGE6IHQuZGF0YVxuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgfVxuICAgIGFkZENhbGxiYWNrKGNiLCB0aW1lb3V0LCB1cGRhdGVDYikge1xuICAgICAgbGV0IHRpbWVvdXRJZCA9IC0xO1xuICAgICAgaWYgKHRpbWVvdXQgJiYgdGltZW91dCA+IDApIHtcbiAgICAgICAgdGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5fY2FsbGJhY2tzID0gdGhpcy5fY2FsbGJhY2tzLmZpbHRlcihjYiA9PiBjYi50aW1lb3V0SWQgIT09IHRpbWVvdXRJZCk7XG4gICAgICAgICAgY2IoKTtcbiAgICAgICAgfSwgdGltZW91dCk7XG4gICAgICB9XG4gICAgICB0aGlzLl9jYWxsYmFja3MucHVzaCh7XG4gICAgICAgIGRvbmVDYjogY2IsXG4gICAgICAgIHRpbWVvdXRJZDogdGltZW91dElkLFxuICAgICAgICB1cGRhdGVDYjogdXBkYXRlQ2JcbiAgICAgIH0pO1xuICAgIH1cbiAgICB3aGVuU3RhYmxlKGRvbmVDYiwgdGltZW91dCwgdXBkYXRlQ2IpIHtcbiAgICAgIGlmICh1cGRhdGVDYiAmJiAhdGhpcy5fdGFza1RyYWNraW5nWm9uZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Rhc2sgdHJhY2tpbmcgem9uZSBpcyByZXF1aXJlZCB3aGVuIHBhc3NpbmcgYW4gdXBkYXRlIGNhbGxiYWNrIHRvICcgKyAnd2hlblN0YWJsZSgpLiBJcyBcInpvbmUuanMvcGx1Z2lucy90YXNrLXRyYWNraW5nXCIgbG9hZGVkPycpO1xuICAgICAgfVxuICAgICAgdGhpcy5hZGRDYWxsYmFjayhkb25lQ2IsIHRpbWVvdXQsIHVwZGF0ZUNiKTtcbiAgICAgIHRoaXMuX3J1bkNhbGxiYWNrc0lmUmVhZHkoKTtcbiAgICB9XG4gICAgcmVnaXN0ZXJBcHBsaWNhdGlvbih0b2tlbikge1xuICAgICAgdGhpcy5yZWdpc3RyeS5yZWdpc3RlckFwcGxpY2F0aW9uKHRva2VuLCB0aGlzKTtcbiAgICB9XG4gICAgdW5yZWdpc3RlckFwcGxpY2F0aW9uKHRva2VuKSB7XG4gICAgICB0aGlzLnJlZ2lzdHJ5LnVucmVnaXN0ZXJBcHBsaWNhdGlvbih0b2tlbik7XG4gICAgfVxuICAgIGZpbmRQcm92aWRlcnModXNpbmcsIHByb3ZpZGVyLCBleGFjdE1hdGNoKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIHN0YXRpYyDJtWZhYyA9IGZ1bmN0aW9uIFRlc3RhYmlsaXR5X0ZhY3RvcnkoX19uZ0ZhY3RvcnlUeXBlX18pIHtcbiAgICAgIHJldHVybiBuZXcgKF9fbmdGYWN0b3J5VHlwZV9fIHx8IFRlc3RhYmlsaXR5KShfX2luamVjdChOZ1pvbmUpLCBfX2luamVjdChUZXN0YWJpbGl0eVJlZ2lzdHJ5KSwgX19pbmplY3QoVEVTVEFCSUxJVFlfR0VUVEVSKSk7XG4gICAgfTtcbiAgICBzdGF0aWMgybVwcm92ID0gLypAX19QVVJFX18qL19fZGVmaW5lSW5qZWN0YWJsZSh7XG4gICAgICB0b2tlbjogVGVzdGFiaWxpdHksXG4gICAgICBmYWN0b3J5OiBUZXN0YWJpbGl0eS7JtWZhY1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBUZXN0YWJpbGl0eTtcbn0pKCk7XG4vKiNfX1BVUkVfXyovKCgpID0+IHtcbiAgKHR5cGVvZiBuZ0Rldk1vZGUgPT09IFwidW5kZWZpbmVkXCIgfHwgbmdEZXZNb2RlKSAmJiBzZXRDbGFzc01ldGFkYXRhKFRlc3RhYmlsaXR5LCBbe1xuICAgIHR5cGU6IEluamVjdGFibGVcbiAgfV0sICgpID0+IFt7XG4gICAgdHlwZTogTmdab25lXG4gIH0sIHtcbiAgICB0eXBlOiBUZXN0YWJpbGl0eVJlZ2lzdHJ5XG4gIH0sIHtcbiAgICB0eXBlOiB1bmRlZmluZWQsXG4gICAgZGVjb3JhdG9yczogW3tcbiAgICAgIHR5cGU6IEluamVjdCxcbiAgICAgIGFyZ3M6IFtURVNUQUJJTElUWV9HRVRURVJdXG4gICAgfV1cbiAgfV0sIG51bGwpO1xufSkoKTtcbmxldCBUZXN0YWJpbGl0eVJlZ2lzdHJ5ID0gLyojX19QVVJFX18qLygoKSA9PiB7XG4gIGNsYXNzIFRlc3RhYmlsaXR5UmVnaXN0cnkge1xuICAgIF9hcHBsaWNhdGlvbnMgPSBuZXcgTWFwKCk7XG4gICAgcmVnaXN0ZXJBcHBsaWNhdGlvbih0b2tlbiwgdGVzdGFiaWxpdHkpIHtcbiAgICAgIHRoaXMuX2FwcGxpY2F0aW9ucy5zZXQodG9rZW4sIHRlc3RhYmlsaXR5KTtcbiAgICB9XG4gICAgdW5yZWdpc3RlckFwcGxpY2F0aW9uKHRva2VuKSB7XG4gICAgICB0aGlzLl9hcHBsaWNhdGlvbnMuZGVsZXRlKHRva2VuKTtcbiAgICB9XG4gICAgdW5yZWdpc3RlckFsbEFwcGxpY2F0aW9ucygpIHtcbiAgICAgIHRoaXMuX2FwcGxpY2F0aW9ucy5jbGVhcigpO1xuICAgIH1cbiAgICBnZXRUZXN0YWJpbGl0eShlbGVtKSB7XG4gICAgICByZXR1cm4gdGhpcy5fYXBwbGljYXRpb25zLmdldChlbGVtKSB8fCBudWxsO1xuICAgIH1cbiAgICBnZXRBbGxUZXN0YWJpbGl0aWVzKCkge1xuICAgICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5fYXBwbGljYXRpb25zLnZhbHVlcygpKTtcbiAgICB9XG4gICAgZ2V0QWxsUm9vdEVsZW1lbnRzKCkge1xuICAgICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5fYXBwbGljYXRpb25zLmtleXMoKSk7XG4gICAgfVxuICAgIGZpbmRUZXN0YWJpbGl0eUluVHJlZShlbGVtLCBmaW5kSW5BbmNlc3RvcnMgPSB0cnVlKSB7XG4gICAgICByZXR1cm4gX3Rlc3RhYmlsaXR5R2V0dGVyPy5maW5kVGVzdGFiaWxpdHlJblRyZWUodGhpcywgZWxlbSwgZmluZEluQW5jZXN0b3JzKSA/PyBudWxsO1xuICAgIH1cbiAgICBzdGF0aWMgybVmYWMgPSBmdW5jdGlvbiBUZXN0YWJpbGl0eVJlZ2lzdHJ5X0ZhY3RvcnkoX19uZ0ZhY3RvcnlUeXBlX18pIHtcbiAgICAgIHJldHVybiBuZXcgKF9fbmdGYWN0b3J5VHlwZV9fIHx8IFRlc3RhYmlsaXR5UmVnaXN0cnkpKCk7XG4gICAgfTtcbiAgICBzdGF0aWMgybVwcm92ID0gLypAX19QVVJFX18qL19fZGVmaW5lSW5qZWN0YWJsZSh7XG4gICAgICB0b2tlbjogVGVzdGFiaWxpdHlSZWdpc3RyeSxcbiAgICAgIGZhY3Rvcnk6IFRlc3RhYmlsaXR5UmVnaXN0cnkuybVmYWMsXG4gICAgICBwcm92aWRlZEluOiAncGxhdGZvcm0nXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIFRlc3RhYmlsaXR5UmVnaXN0cnk7XG59KSgpO1xuLyojX19QVVJFX18qLygoKSA9PiB7XG4gICh0eXBlb2YgbmdEZXZNb2RlID09PSBcInVuZGVmaW5lZFwiIHx8IG5nRGV2TW9kZSkgJiYgc2V0Q2xhc3NNZXRhZGF0YShUZXN0YWJpbGl0eVJlZ2lzdHJ5LCBbe1xuICAgIHR5cGU6IEluamVjdGFibGUsXG4gICAgYXJnczogW3tcbiAgICAgIHByb3ZpZGVkSW46ICdwbGF0Zm9ybSdcbiAgICB9XVxuICB9XSwgbnVsbCwgbnVsbCk7XG59KSgpO1xuZnVuY3Rpb24gc2V0VGVzdGFiaWxpdHlHZXR0ZXIoZ2V0dGVyKSB7XG4gIF90ZXN0YWJpbGl0eUdldHRlciA9IGdldHRlcjtcbn1cbmxldCBfdGVzdGFiaWxpdHlHZXR0ZXI7XG5mdW5jdGlvbiBpc1Byb21pc2Uob2JqKSB7XG4gIHJldHVybiAhIW9iaiAmJiB0eXBlb2Ygb2JqLnRoZW4gPT09ICdmdW5jdGlvbic7XG59XG5mdW5jdGlvbiBpc1N1YnNjcmliYWJsZShvYmopIHtcbiAgcmV0dXJuICEhb2JqICYmIHR5cGVvZiBvYmouc3Vic2NyaWJlID09PSAnZnVuY3Rpb24nO1xufVxuY29uc3QgQVBQX0lOSVRJQUxJWkVSID0gLyojX19QVVJFX18qL25ldyBJbmplY3Rpb25Ub2tlbihuZ0Rldk1vZGUgPyAnQXBwbGljYXRpb24gSW5pdGlhbGl6ZXInIDogJycpO1xuZnVuY3Rpb24gcHJvdmlkZUFwcEluaXRpYWxpemVyKGluaXRpYWxpemVyRm4pIHtcbiAgcmV0dXJuIG1ha2VFbnZpcm9ubWVudFByb3ZpZGVycyhbe1xuICAgIHByb3ZpZGU6IEFQUF9JTklUSUFMSVpFUixcbiAgICBtdWx0aTogdHJ1ZSxcbiAgICB1c2VWYWx1ZTogaW5pdGlhbGl6ZXJGblxuICB9XSk7XG59XG5sZXQgQXBwbGljYXRpb25Jbml0U3RhdHVzID0gLyojX19QVVJFX18qLygoKSA9PiB7XG4gIGNsYXNzIEFwcGxpY2F0aW9uSW5pdFN0YXR1cyB7XG4gICAgcmVzb2x2ZTtcbiAgICByZWplY3Q7XG4gICAgaW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgICBkb25lID0gZmFsc2U7XG4gICAgZG9uZVByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzLCByZWopID0+IHtcbiAgICAgIHRoaXMucmVzb2x2ZSA9IHJlcztcbiAgICAgIHRoaXMucmVqZWN0ID0gcmVqO1xuICAgIH0pO1xuICAgIGFwcEluaXRzID0gaW5qZWN0KEFQUF9JTklUSUFMSVpFUiwge1xuICAgICAgb3B0aW9uYWw6IHRydWVcbiAgICB9KSA/PyBbXTtcbiAgICBpbmplY3RvciA9IGluamVjdChJbmplY3Rvcik7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICBpZiAoKHR5cGVvZiBuZ0Rldk1vZGUgPT09ICd1bmRlZmluZWQnIHx8IG5nRGV2TW9kZSkgJiYgIUFycmF5LmlzQXJyYXkodGhpcy5hcHBJbml0cykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFcnJvcigtMjA5LCAnVW5leHBlY3RlZCB0eXBlIG9mIHRoZSBgQVBQX0lOSVRJQUxJWkVSYCB0b2tlbiB2YWx1ZSAnICsgYChleHBlY3RlZCBhbiBhcnJheSwgYnV0IGdvdCAke3R5cGVvZiB0aGlzLmFwcEluaXRzfSkuIGAgKyAnUGxlYXNlIGNoZWNrIHRoYXQgdGhlIGBBUFBfSU5JVElBTElaRVJgIHRva2VuIGlzIGNvbmZpZ3VyZWQgYXMgYSAnICsgJ2BtdWx0aTogdHJ1ZWAgcHJvdmlkZXIuJyk7XG4gICAgICB9XG4gICAgfVxuICAgIHJ1bkluaXRpYWxpemVycygpIHtcbiAgICAgIGlmICh0aGlzLmluaXRpYWxpemVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGFzeW5jSW5pdFByb21pc2VzID0gW107XG4gICAgICBmb3IgKGNvbnN0IGFwcEluaXRzIG9mIHRoaXMuYXBwSW5pdHMpIHtcbiAgICAgICAgY29uc3QgaW5pdFJlc3VsdCA9IHJ1bkluSW5qZWN0aW9uQ29udGV4dCh0aGlzLmluamVjdG9yLCBhcHBJbml0cyk7XG4gICAgICAgIGlmIChpc1Byb21pc2UoaW5pdFJlc3VsdCkpIHtcbiAgICAgICAgICBhc3luY0luaXRQcm9taXNlcy5wdXNoKGluaXRSZXN1bHQpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzU3Vic2NyaWJhYmxlKGluaXRSZXN1bHQpKSB7XG4gICAgICAgICAgY29uc3Qgb2JzZXJ2YWJsZUFzUHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGluaXRSZXN1bHQuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgY29tcGxldGU6IHJlc29sdmUsXG4gICAgICAgICAgICAgIGVycm9yOiByZWplY3RcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGFzeW5jSW5pdFByb21pc2VzLnB1c2gob2JzZXJ2YWJsZUFzUHJvbWlzZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbnN0IGNvbXBsZXRlID0gKCkgPT4ge1xuICAgICAgICB0aGlzLmRvbmUgPSB0cnVlO1xuICAgICAgICB0aGlzLnJlc29sdmUoKTtcbiAgICAgIH07XG4gICAgICBQcm9taXNlLmFsbChhc3luY0luaXRQcm9taXNlcykudGhlbigoKSA9PiB7XG4gICAgICAgIGNvbXBsZXRlKCk7XG4gICAgICB9KS5jYXRjaChlID0+IHtcbiAgICAgICAgdGhpcy5yZWplY3QoZSk7XG4gICAgICB9KTtcbiAgICAgIGlmIChhc3luY0luaXRQcm9taXNlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgY29tcGxldGUoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuaW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgIH1cbiAgICBzdGF0aWMgybVmYWMgPSBmdW5jdGlvbiBBcHBsaWNhdGlvbkluaXRTdGF0dXNfRmFjdG9yeShfX25nRmFjdG9yeVR5cGVfXykge1xuICAgICAgcmV0dXJuIG5ldyAoX19uZ0ZhY3RvcnlUeXBlX18gfHwgQXBwbGljYXRpb25Jbml0U3RhdHVzKSgpO1xuICAgIH07XG4gICAgc3RhdGljIMm1cHJvdiA9IC8qQF9fUFVSRV9fKi9fX2RlZmluZUluamVjdGFibGUoe1xuICAgICAgdG9rZW46IEFwcGxpY2F0aW9uSW5pdFN0YXR1cyxcbiAgICAgIGZhY3Rvcnk6IEFwcGxpY2F0aW9uSW5pdFN0YXR1cy7JtWZhYyxcbiAgICAgIHByb3ZpZGVkSW46ICdyb290J1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBBcHBsaWNhdGlvbkluaXRTdGF0dXM7XG59KSgpO1xuLyojX19QVVJFX18qLygoKSA9PiB7XG4gICh0eXBlb2YgbmdEZXZNb2RlID09PSBcInVuZGVmaW5lZFwiIHx8IG5nRGV2TW9kZSkgJiYgc2V0Q2xhc3NNZXRhZGF0YShBcHBsaWNhdGlvbkluaXRTdGF0dXMsIFt7XG4gICAgdHlwZTogSW5qZWN0YWJsZSxcbiAgICBhcmdzOiBbe1xuICAgICAgcHJvdmlkZWRJbjogJ3Jvb3QnXG4gICAgfV1cbiAgfV0sICgpID0+IFtdLCBudWxsKTtcbn0pKCk7XG5jb25zdCBBUFBfQk9PVFNUUkFQX0xJU1RFTkVSID0gLyojX19QVVJFX18qL25ldyBJbmplY3Rpb25Ub2tlbihuZ0Rldk1vZGUgPyAnYXBwQm9vdHN0cmFwTGlzdGVuZXInIDogJycpO1xuZnVuY3Rpb24gcHVibGlzaERlZmF1bHRHbG9iYWxVdGlscygpIHtcbiAgbmdEZXZNb2RlICYmIHB1Ymxpc2hEZWZhdWx0R2xvYmFsVXRpbHMkMSgpO1xufVxuZnVuY3Rpb24gcHVibGlzaFNpZ25hbENvbmZpZ3VyYXRpb24oKSB7XG4gIHNldFRocm93SW52YWxpZFdyaXRlVG9TaWduYWxFcnJvcigoKSA9PiB7XG4gICAgbGV0IGVycm9yTWVzc2FnZSA9ICcnO1xuICAgIGlmIChuZ0Rldk1vZGUpIHtcbiAgICAgIGNvbnN0IGFjdGl2ZUNvbnN1bWVyID0gZ2V0QWN0aXZlQ29uc3VtZXIoKTtcbiAgICAgIGVycm9yTWVzc2FnZSA9IGFjdGl2ZUNvbnN1bWVyICYmIGlzUmVhY3RpdmVMVmlld0NvbnN1bWVyKGFjdGl2ZUNvbnN1bWVyKSA/ICdXcml0aW5nIHRvIHNpZ25hbHMgaXMgbm90IGFsbG93ZWQgd2hpbGUgQW5ndWxhciByZW5kZXJzIHRoZSB0ZW1wbGF0ZSAoZWcuIGludGVycG9sYXRpb25zKScgOiAnV3JpdGluZyB0byBzaWduYWxzIGlzIG5vdCBhbGxvd2VkIGluIGEgYGNvbXB1dGVkYCc7XG4gICAgfVxuICAgIHRocm93IG5ldyBSdW50aW1lRXJyb3IoNjAwLCBlcnJvck1lc3NhZ2UpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIGlzQm91bmRUb01vZHVsZShjZikge1xuICByZXR1cm4gY2YuaXNCb3VuZFRvTW9kdWxlO1xufVxuY29uc3QgTUFYSU1VTV9SRUZSRVNIX1JFUlVOUyA9IDEwO1xuZnVuY3Rpb24gb3B0aW9uc1JlZHVjZXIoZHN0LCBvYmpzKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KG9ianMpKSB7XG4gICAgcmV0dXJuIG9ianMucmVkdWNlKG9wdGlvbnNSZWR1Y2VyLCBkc3QpO1xuICB9XG4gIHJldHVybiB7XG4gICAgLi4uZHN0LFxuICAgIC4uLm9ianNcbiAgfTtcbn1cbmxldCBBcHBsaWNhdGlvblJlZiA9IC8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICBjbGFzcyBBcHBsaWNhdGlvblJlZiB7XG4gICAgX3J1bm5pbmdUaWNrID0gZmFsc2U7XG4gICAgX2Rlc3Ryb3llZCA9IGZhbHNlO1xuICAgIF9kZXN0cm95TGlzdGVuZXJzID0gW107XG4gICAgX3ZpZXdzID0gW107XG4gICAgaW50ZXJuYWxFcnJvckhhbmRsZXIgPSBpbmplY3QoSU5URVJOQUxfQVBQTElDQVRJT05fRVJST1JfSEFORExFUik7XG4gICAgYWZ0ZXJSZW5kZXJNYW5hZ2VyID0gaW5qZWN0KEFmdGVyUmVuZGVyTWFuYWdlcik7XG4gICAgem9uZWxlc3NFbmFibGVkID0gaW5qZWN0KFpPTkVMRVNTX0VOQUJMRUQpO1xuICAgIHJvb3RFZmZlY3RTY2hlZHVsZXIgPSBpbmplY3QoRWZmZWN0U2NoZWR1bGVyKTtcbiAgICBkaXJ0eUZsYWdzID0gMDtcbiAgICB0cmFjaW5nU25hcHNob3QgPSBudWxsO1xuICAgIGFsbFRlc3RWaWV3cyA9IG5ldyBTZXQoKTtcbiAgICBhdXRvRGV0ZWN0VGVzdFZpZXdzID0gbmV3IFNldCgpO1xuICAgIGluY2x1ZGVBbGxUZXN0Vmlld3MgPSBmYWxzZTtcbiAgICBhZnRlclRpY2sgPSBuZXcgU3ViamVjdCgpO1xuICAgIGdldCBhbGxWaWV3cygpIHtcbiAgICAgIHJldHVybiBbLi4uKHRoaXMuaW5jbHVkZUFsbFRlc3RWaWV3cyA/IHRoaXMuYWxsVGVzdFZpZXdzIDogdGhpcy5hdXRvRGV0ZWN0VGVzdFZpZXdzKS5rZXlzKCksIC4uLnRoaXMuX3ZpZXdzXTtcbiAgICB9XG4gICAgZ2V0IGRlc3Ryb3llZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9kZXN0cm95ZWQ7XG4gICAgfVxuICAgIGNvbXBvbmVudFR5cGVzID0gW107XG4gICAgY29tcG9uZW50cyA9IFtdO1xuICAgIGludGVybmFsUGVuZGluZ1Rhc2sgPSBpbmplY3QoUGVuZGluZ1Rhc2tzSW50ZXJuYWwpO1xuICAgIGdldCBpc1N0YWJsZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmludGVybmFsUGVuZGluZ1Rhc2suaGFzUGVuZGluZ1Rhc2tzT2JzZXJ2YWJsZS5waXBlKG1hcChwZW5kaW5nID0+ICFwZW5kaW5nKSk7XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgaW5qZWN0KFRyYWNpbmdTZXJ2aWNlLCB7XG4gICAgICAgIG9wdGlvbmFsOiB0cnVlXG4gICAgICB9KTtcbiAgICB9XG4gICAgd2hlblN0YWJsZSgpIHtcbiAgICAgIGxldCBzdWJzY3JpcHRpb247XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgIHN1YnNjcmlwdGlvbiA9IHRoaXMuaXNTdGFibGUuc3Vic2NyaWJlKHtcbiAgICAgICAgICBuZXh0OiBzdGFibGUgPT4ge1xuICAgICAgICAgICAgaWYgKHN0YWJsZSkge1xuICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBfaW5qZWN0b3IgPSBpbmplY3QoRW52aXJvbm1lbnRJbmplY3Rvcik7XG4gICAgX3JlbmRlcmVyRmFjdG9yeSA9IG51bGw7XG4gICAgZ2V0IGluamVjdG9yKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2luamVjdG9yO1xuICAgIH1cbiAgICBib290c3RyYXAoY29tcG9uZW50T3JGYWN0b3J5LCByb290U2VsZWN0b3JPck5vZGUpIHtcbiAgICAgIHJldHVybiB0aGlzLmJvb3RzdHJhcEltcGwoY29tcG9uZW50T3JGYWN0b3J5LCByb290U2VsZWN0b3JPck5vZGUpO1xuICAgIH1cbiAgICBib290c3RyYXBJbXBsKGNvbXBvbmVudE9yRmFjdG9yeSwgcm9vdFNlbGVjdG9yT3JOb2RlLCBpbmplY3RvciA9IEluamVjdG9yLk5VTEwpIHtcbiAgICAgIGNvbnN0IG5nWm9uZSA9IHRoaXMuX2luamVjdG9yLmdldChOZ1pvbmUpO1xuICAgICAgcmV0dXJuIG5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICBwcm9maWxlcihQcm9maWxlckV2ZW50LkJvb3RzdHJhcENvbXBvbmVudFN0YXJ0KTtcbiAgICAgICAgKHR5cGVvZiBuZ0Rldk1vZGUgPT09ICd1bmRlZmluZWQnIHx8IG5nRGV2TW9kZSkgJiYgd2FybklmRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3llZCk7XG4gICAgICAgIGNvbnN0IGlzQ29tcG9uZW50RmFjdG9yeSA9IGNvbXBvbmVudE9yRmFjdG9yeSBpbnN0YW5jZW9mIENvbXBvbmVudEZhY3RvcnkkMTtcbiAgICAgICAgY29uc3QgaW5pdFN0YXR1cyA9IHRoaXMuX2luamVjdG9yLmdldChBcHBsaWNhdGlvbkluaXRTdGF0dXMpO1xuICAgICAgICBpZiAoIWluaXRTdGF0dXMuZG9uZSkge1xuICAgICAgICAgIGxldCBlcnJvck1lc3NhZ2UgPSAnJztcbiAgICAgICAgICBpZiAodHlwZW9mIG5nRGV2TW9kZSA9PT0gJ3VuZGVmaW5lZCcgfHwgbmdEZXZNb2RlKSB7XG4gICAgICAgICAgICBjb25zdCBzdGFuZGFsb25lID0gIWlzQ29tcG9uZW50RmFjdG9yeSAmJiBpc1N0YW5kYWxvbmUoY29tcG9uZW50T3JGYWN0b3J5KTtcbiAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9ICdDYW5ub3QgYm9vdHN0cmFwIGFzIHRoZXJlIGFyZSBzdGlsbCBhc3luY2hyb25vdXMgaW5pdGlhbGl6ZXJzIHJ1bm5pbmcuJyArIChzdGFuZGFsb25lID8gJycgOiAnIEJvb3RzdHJhcCBjb21wb25lbnRzIGluIHRoZSBgbmdEb0Jvb3RzdHJhcGAgbWV0aG9kIG9mIHRoZSByb290IG1vZHVsZS4nKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFcnJvcig0MDUsIGVycm9yTWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGNvbXBvbmVudEZhY3Rvcnk7XG4gICAgICAgIGlmIChpc0NvbXBvbmVudEZhY3RvcnkpIHtcbiAgICAgICAgICBjb21wb25lbnRGYWN0b3J5ID0gY29tcG9uZW50T3JGYWN0b3J5O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHJlc29sdmVyID0gdGhpcy5faW5qZWN0b3IuZ2V0KENvbXBvbmVudEZhY3RvcnlSZXNvbHZlciQxKTtcbiAgICAgICAgICBjb21wb25lbnRGYWN0b3J5ID0gcmVzb2x2ZXIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoY29tcG9uZW50T3JGYWN0b3J5KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNvbXBvbmVudFR5cGVzLnB1c2goY29tcG9uZW50RmFjdG9yeS5jb21wb25lbnRUeXBlKTtcbiAgICAgICAgY29uc3QgbmdNb2R1bGUgPSBpc0JvdW5kVG9Nb2R1bGUoY29tcG9uZW50RmFjdG9yeSkgPyB1bmRlZmluZWQgOiB0aGlzLl9pbmplY3Rvci5nZXQoTmdNb2R1bGVSZWYkMSk7XG4gICAgICAgIGNvbnN0IHNlbGVjdG9yT3JOb2RlID0gcm9vdFNlbGVjdG9yT3JOb2RlIHx8IGNvbXBvbmVudEZhY3Rvcnkuc2VsZWN0b3I7XG4gICAgICAgIGNvbnN0IGNvbXBSZWYgPSBjb21wb25lbnRGYWN0b3J5LmNyZWF0ZShpbmplY3RvciwgW10sIHNlbGVjdG9yT3JOb2RlLCBuZ01vZHVsZSk7XG4gICAgICAgIGNvbnN0IG5hdGl2ZUVsZW1lbnQgPSBjb21wUmVmLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IHRlc3RhYmlsaXR5ID0gY29tcFJlZi5pbmplY3Rvci5nZXQoVEVTVEFCSUxJVFksIG51bGwpO1xuICAgICAgICB0ZXN0YWJpbGl0eT8ucmVnaXN0ZXJBcHBsaWNhdGlvbihuYXRpdmVFbGVtZW50KTtcbiAgICAgICAgY29tcFJlZi5vbkRlc3Ryb3koKCkgPT4ge1xuICAgICAgICAgIHRoaXMuZGV0YWNoVmlldyhjb21wUmVmLmhvc3RWaWV3KTtcbiAgICAgICAgICByZW1vdmUodGhpcy5jb21wb25lbnRzLCBjb21wUmVmKTtcbiAgICAgICAgICB0ZXN0YWJpbGl0eT8udW5yZWdpc3RlckFwcGxpY2F0aW9uKG5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fbG9hZENvbXBvbmVudChjb21wUmVmKTtcbiAgICAgICAgaWYgKHR5cGVvZiBuZ0Rldk1vZGUgPT09ICd1bmRlZmluZWQnIHx8IG5nRGV2TW9kZSkge1xuICAgICAgICAgIGNvbnN0IF9jb25zb2xlID0gdGhpcy5faW5qZWN0b3IuZ2V0KENvbnNvbGUpO1xuICAgICAgICAgIF9jb25zb2xlLmxvZyhgQW5ndWxhciBpcyBydW5uaW5nIGluIGRldmVsb3BtZW50IG1vZGUuYCk7XG4gICAgICAgIH1cbiAgICAgICAgcHJvZmlsZXIoUHJvZmlsZXJFdmVudC5Cb290c3RyYXBDb21wb25lbnRFbmQsIGNvbXBSZWYpO1xuICAgICAgICByZXR1cm4gY29tcFJlZjtcbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aWNrKCkge1xuICAgICAgaWYgKCF0aGlzLnpvbmVsZXNzRW5hYmxlZCkge1xuICAgICAgICB0aGlzLmRpcnR5RmxhZ3MgfD0gMTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX3RpY2soKTtcbiAgICB9XG4gICAgX3RpY2soKSB7XG4gICAgICBwcm9maWxlcihQcm9maWxlckV2ZW50LkNoYW5nZURldGVjdGlvblN0YXJ0KTtcbiAgICAgIGlmICh0aGlzLnRyYWNpbmdTbmFwc2hvdCAhPT0gbnVsbCkge1xuICAgICAgICB0aGlzLnRyYWNpbmdTbmFwc2hvdC5ydW4oVHJhY2luZ0FjdGlvbi5DSEFOR0VfREVURUNUSU9OLCB0aGlzLnRpY2tJbXBsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudGlja0ltcGwoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGlja0ltcGwgPSAoKSA9PiB7XG4gICAgICAodHlwZW9mIG5nRGV2TW9kZSA9PT0gJ3VuZGVmaW5lZCcgfHwgbmdEZXZNb2RlKSAmJiB3YXJuSWZEZXN0cm95ZWQodGhpcy5fZGVzdHJveWVkKTtcbiAgICAgIGlmICh0aGlzLl9ydW5uaW5nVGljaykge1xuICAgICAgICBwcm9maWxlcihQcm9maWxlckV2ZW50LkNoYW5nZURldGVjdGlvbkVuZCk7XG4gICAgICAgIHRocm93IG5ldyBSdW50aW1lRXJyb3IoMTAxLCBuZ0Rldk1vZGUgJiYgJ0FwcGxpY2F0aW9uUmVmLnRpY2sgaXMgY2FsbGVkIHJlY3Vyc2l2ZWx5Jyk7XG4gICAgICB9XG4gICAgICBjb25zdCBwcmV2Q29uc3VtZXIgPSBzZXRBY3RpdmVDb25zdW1lcihudWxsKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMuX3J1bm5pbmdUaWNrID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zeW5jaHJvbml6ZSgpO1xuICAgICAgICBpZiAodHlwZW9mIG5nRGV2TW9kZSA9PT0gJ3VuZGVmaW5lZCcgfHwgbmdEZXZNb2RlKSB7XG4gICAgICAgICAgZm9yIChsZXQgdmlldyBvZiB0aGlzLmFsbFZpZXdzKSB7XG4gICAgICAgICAgICB2aWV3LmNoZWNrTm9DaGFuZ2VzKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB0aGlzLl9ydW5uaW5nVGljayA9IGZhbHNlO1xuICAgICAgICB0aGlzLnRyYWNpbmdTbmFwc2hvdD8uZGlzcG9zZSgpO1xuICAgICAgICB0aGlzLnRyYWNpbmdTbmFwc2hvdCA9IG51bGw7XG4gICAgICAgIHNldEFjdGl2ZUNvbnN1bWVyKHByZXZDb25zdW1lcik7XG4gICAgICAgIHRoaXMuYWZ0ZXJUaWNrLm5leHQoKTtcbiAgICAgICAgcHJvZmlsZXIoUHJvZmlsZXJFdmVudC5DaGFuZ2VEZXRlY3Rpb25FbmQpO1xuICAgICAgfVxuICAgIH07XG4gICAgc3luY2hyb25pemUoKSB7XG4gICAgICBpZiAodGhpcy5fcmVuZGVyZXJGYWN0b3J5ID09PSBudWxsICYmICF0aGlzLl9pbmplY3Rvci5kZXN0cm95ZWQpIHtcbiAgICAgICAgdGhpcy5fcmVuZGVyZXJGYWN0b3J5ID0gdGhpcy5faW5qZWN0b3IuZ2V0KFJlbmRlcmVyRmFjdG9yeTIsIG51bGwsIHtcbiAgICAgICAgICBvcHRpb25hbDogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGxldCBydW5zID0gMDtcbiAgICAgIHdoaWxlICh0aGlzLmRpcnR5RmxhZ3MgIT09IDAgJiYgcnVucysrIDwgTUFYSU1VTV9SRUZSRVNIX1JFUlVOUykge1xuICAgICAgICBwcm9maWxlcihQcm9maWxlckV2ZW50LkNoYW5nZURldGVjdGlvblN5bmNTdGFydCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGhpcy5zeW5jaHJvbml6ZU9uY2UoKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBwcm9maWxlcihQcm9maWxlckV2ZW50LkNoYW5nZURldGVjdGlvblN5bmNFbmQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoKHR5cGVvZiBuZ0Rldk1vZGUgPT09ICd1bmRlZmluZWQnIHx8IG5nRGV2TW9kZSkgJiYgcnVucyA+PSBNQVhJTVVNX1JFRlJFU0hfUkVSVU5TKSB7XG4gICAgICAgIHRocm93IG5ldyBSdW50aW1lRXJyb3IoMTAzLCBuZ0Rldk1vZGUgJiYgJ0luZmluaXRlIGNoYW5nZSBkZXRlY3Rpb24gd2hpbGUgcmVmcmVzaGluZyBhcHBsaWNhdGlvbiB2aWV3cy4gJyArICdFbnN1cmUgdmlld3MgYXJlIG5vdCBjYWxsaW5nIGBtYXJrRm9yQ2hlY2tgIG9uIGV2ZXJ5IHRlbXBsYXRlIGV4ZWN1dGlvbiBvciAnICsgJ3RoYXQgYWZ0ZXJSZW5kZXIgaG9va3MgYWx3YXlzIG1hcmsgdmlld3MgZm9yIGNoZWNrLicpO1xuICAgICAgfVxuICAgIH1cbiAgICBzeW5jaHJvbml6ZU9uY2UoKSB7XG4gICAgICBpZiAodGhpcy5kaXJ0eUZsYWdzICYgMTYpIHtcbiAgICAgICAgdGhpcy5kaXJ0eUZsYWdzICY9IH4xNjtcbiAgICAgICAgdGhpcy5yb290RWZmZWN0U2NoZWR1bGVyLmZsdXNoKCk7XG4gICAgICB9XG4gICAgICBsZXQgcmFuRGV0ZWN0Q2hhbmdlcyA9IGZhbHNlO1xuICAgICAgaWYgKHRoaXMuZGlydHlGbGFncyAmIDcpIHtcbiAgICAgICAgY29uc3QgdXNlR2xvYmFsQ2hlY2sgPSBCb29sZWFuKHRoaXMuZGlydHlGbGFncyAmIDEpO1xuICAgICAgICB0aGlzLmRpcnR5RmxhZ3MgJj0gfjc7XG4gICAgICAgIHRoaXMuZGlydHlGbGFncyB8PSA4O1xuICAgICAgICBmb3IgKGxldCB7XG4gICAgICAgICAgX2xWaWV3XG4gICAgICAgIH0gb2YgdGhpcy5hbGxWaWV3cykge1xuICAgICAgICAgIGlmICghdXNlR2xvYmFsQ2hlY2sgJiYgIXJlcXVpcmVzUmVmcmVzaE9yVHJhdmVyc2FsKF9sVmlldykpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBtb2RlID0gdXNlR2xvYmFsQ2hlY2sgJiYgIXRoaXMuem9uZWxlc3NFbmFibGVkID8gMCA6IDE7XG4gICAgICAgICAgZGV0ZWN0Q2hhbmdlc0ludGVybmFsKF9sVmlldywgbW9kZSk7XG4gICAgICAgICAgcmFuRGV0ZWN0Q2hhbmdlcyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kaXJ0eUZsYWdzICY9IH40O1xuICAgICAgICB0aGlzLnN5bmNEaXJ0eUZsYWdzV2l0aFZpZXdzKCk7XG4gICAgICAgIGlmICh0aGlzLmRpcnR5RmxhZ3MgJiAoNyB8IDE2KSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCFyYW5EZXRlY3RDaGFuZ2VzKSB7XG4gICAgICAgIHRoaXMuX3JlbmRlcmVyRmFjdG9yeT8uYmVnaW4/LigpO1xuICAgICAgICB0aGlzLl9yZW5kZXJlckZhY3Rvcnk/LmVuZD8uKCk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5kaXJ0eUZsYWdzICYgOCkge1xuICAgICAgICB0aGlzLmRpcnR5RmxhZ3MgJj0gfjg7XG4gICAgICAgIHRoaXMuYWZ0ZXJSZW5kZXJNYW5hZ2VyLmV4ZWN1dGUoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc3luY0RpcnR5RmxhZ3NXaXRoVmlld3MoKTtcbiAgICB9XG4gICAgc3luY0RpcnR5RmxhZ3NXaXRoVmlld3MoKSB7XG4gICAgICBpZiAodGhpcy5hbGxWaWV3cy5zb21lKCh7XG4gICAgICAgIF9sVmlld1xuICAgICAgfSkgPT4gcmVxdWlyZXNSZWZyZXNoT3JUcmF2ZXJzYWwoX2xWaWV3KSkpIHtcbiAgICAgICAgdGhpcy5kaXJ0eUZsYWdzIHw9IDI7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZGlydHlGbGFncyAmPSB+NztcbiAgICAgIH1cbiAgICB9XG4gICAgYXR0YWNoVmlldyh2aWV3UmVmKSB7XG4gICAgICAodHlwZW9mIG5nRGV2TW9kZSA9PT0gJ3VuZGVmaW5lZCcgfHwgbmdEZXZNb2RlKSAmJiB3YXJuSWZEZXN0cm95ZWQodGhpcy5fZGVzdHJveWVkKTtcbiAgICAgIGNvbnN0IHZpZXcgPSB2aWV3UmVmO1xuICAgICAgdGhpcy5fdmlld3MucHVzaCh2aWV3KTtcbiAgICAgIHZpZXcuYXR0YWNoVG9BcHBSZWYodGhpcyk7XG4gICAgfVxuICAgIGRldGFjaFZpZXcodmlld1JlZikge1xuICAgICAgKHR5cGVvZiBuZ0Rldk1vZGUgPT09ICd1bmRlZmluZWQnIHx8IG5nRGV2TW9kZSkgJiYgd2FybklmRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3llZCk7XG4gICAgICBjb25zdCB2aWV3ID0gdmlld1JlZjtcbiAgICAgIHJlbW92ZSh0aGlzLl92aWV3cywgdmlldyk7XG4gICAgICB2aWV3LmRldGFjaEZyb21BcHBSZWYoKTtcbiAgICB9XG4gICAgX2xvYWRDb21wb25lbnQoY29tcG9uZW50UmVmKSB7XG4gICAgICB0aGlzLmF0dGFjaFZpZXcoY29tcG9uZW50UmVmLmhvc3RWaWV3KTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMudGljaygpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0aGlzLmludGVybmFsRXJyb3JIYW5kbGVyKGUpO1xuICAgICAgfVxuICAgICAgdGhpcy5jb21wb25lbnRzLnB1c2goY29tcG9uZW50UmVmKTtcbiAgICAgIGNvbnN0IGxpc3RlbmVycyA9IHRoaXMuX2luamVjdG9yLmdldChBUFBfQk9PVFNUUkFQX0xJU1RFTkVSLCBbXSk7XG4gICAgICBpZiAobmdEZXZNb2RlICYmICFBcnJheS5pc0FycmF5KGxpc3RlbmVycykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFcnJvcigtMjA5LCAnVW5leHBlY3RlZCB0eXBlIG9mIHRoZSBgQVBQX0JPT1RTVFJBUF9MSVNURU5FUmAgdG9rZW4gdmFsdWUgJyArIGAoZXhwZWN0ZWQgYW4gYXJyYXksIGJ1dCBnb3QgJHt0eXBlb2YgbGlzdGVuZXJzfSkuIGAgKyAnUGxlYXNlIGNoZWNrIHRoYXQgdGhlIGBBUFBfQk9PVFNUUkFQX0xJU1RFTkVSYCB0b2tlbiBpcyBjb25maWd1cmVkIGFzIGEgJyArICdgbXVsdGk6IHRydWVgIHByb3ZpZGVyLicpO1xuICAgICAgfVxuICAgICAgbGlzdGVuZXJzLmZvckVhY2gobGlzdGVuZXIgPT4gbGlzdGVuZXIoY29tcG9uZW50UmVmKSk7XG4gICAgfVxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgaWYgKHRoaXMuX2Rlc3Ryb3llZCkgcmV0dXJuO1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5fZGVzdHJveUxpc3RlbmVycy5mb3JFYWNoKGxpc3RlbmVyID0+IGxpc3RlbmVyKCkpO1xuICAgICAgICB0aGlzLl92aWV3cy5zbGljZSgpLmZvckVhY2godmlldyA9PiB2aWV3LmRlc3Ryb3koKSk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB0aGlzLl9kZXN0cm95ZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLl92aWV3cyA9IFtdO1xuICAgICAgICB0aGlzLl9kZXN0cm95TGlzdGVuZXJzID0gW107XG4gICAgICB9XG4gICAgfVxuICAgIG9uRGVzdHJveShjYWxsYmFjaykge1xuICAgICAgKHR5cGVvZiBuZ0Rldk1vZGUgPT09ICd1bmRlZmluZWQnIHx8IG5nRGV2TW9kZSkgJiYgd2FybklmRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3llZCk7XG4gICAgICB0aGlzLl9kZXN0cm95TGlzdGVuZXJzLnB1c2goY2FsbGJhY2spO1xuICAgICAgcmV0dXJuICgpID0+IHJlbW92ZSh0aGlzLl9kZXN0cm95TGlzdGVuZXJzLCBjYWxsYmFjayk7XG4gICAgfVxuICAgIGRlc3Ryb3koKSB7XG4gICAgICBpZiAodGhpcy5fZGVzdHJveWVkKSB7XG4gICAgICAgIHRocm93IG5ldyBSdW50aW1lRXJyb3IoNDA2LCBuZ0Rldk1vZGUgJiYgJ1RoaXMgaW5zdGFuY2Ugb2YgdGhlIGBBcHBsaWNhdGlvblJlZmAgaGFzIGFscmVhZHkgYmVlbiBkZXN0cm95ZWQuJyk7XG4gICAgICB9XG4gICAgICBjb25zdCBpbmplY3RvciA9IHRoaXMuX2luamVjdG9yO1xuICAgICAgaWYgKGluamVjdG9yLmRlc3Ryb3kgJiYgIWluamVjdG9yLmRlc3Ryb3llZCkge1xuICAgICAgICBpbmplY3Rvci5kZXN0cm95KCk7XG4gICAgICB9XG4gICAgfVxuICAgIGdldCB2aWV3Q291bnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fdmlld3MubGVuZ3RoO1xuICAgIH1cbiAgICBzdGF0aWMgybVmYWMgPSBmdW5jdGlvbiBBcHBsaWNhdGlvblJlZl9GYWN0b3J5KF9fbmdGYWN0b3J5VHlwZV9fKSB7XG4gICAgICByZXR1cm4gbmV3IChfX25nRmFjdG9yeVR5cGVfXyB8fCBBcHBsaWNhdGlvblJlZikoKTtcbiAgICB9O1xuICAgIHN0YXRpYyDJtXByb3YgPSAvKkBfX1BVUkVfXyovX19kZWZpbmVJbmplY3RhYmxlKHtcbiAgICAgIHRva2VuOiBBcHBsaWNhdGlvblJlZixcbiAgICAgIGZhY3Rvcnk6IEFwcGxpY2F0aW9uUmVmLsm1ZmFjLFxuICAgICAgcHJvdmlkZWRJbjogJ3Jvb3QnXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIEFwcGxpY2F0aW9uUmVmO1xufSkoKTtcbi8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICAodHlwZW9mIG5nRGV2TW9kZSA9PT0gXCJ1bmRlZmluZWRcIiB8fCBuZ0Rldk1vZGUpICYmIHNldENsYXNzTWV0YWRhdGEoQXBwbGljYXRpb25SZWYsIFt7XG4gICAgdHlwZTogSW5qZWN0YWJsZSxcbiAgICBhcmdzOiBbe1xuICAgICAgcHJvdmlkZWRJbjogJ3Jvb3QnXG4gICAgfV1cbiAgfV0sICgpID0+IFtdLCBudWxsKTtcbn0pKCk7XG5mdW5jdGlvbiB3YXJuSWZEZXN0cm95ZWQoZGVzdHJveWVkKSB7XG4gIGlmIChkZXN0cm95ZWQpIHtcbiAgICBjb25zb2xlLndhcm4oZm9ybWF0UnVudGltZUVycm9yKDQwNiwgJ1RoaXMgaW5zdGFuY2Ugb2YgdGhlIGBBcHBsaWNhdGlvblJlZmAgaGFzIGFscmVhZHkgYmVlbiBkZXN0cm95ZWQuJykpO1xuICB9XG59XG5mdW5jdGlvbiByZW1vdmUobGlzdCwgZWwpIHtcbiAgY29uc3QgaW5kZXggPSBsaXN0LmluZGV4T2YoZWwpO1xuICBpZiAoaW5kZXggPiAtMSkge1xuICAgIGxpc3Quc3BsaWNlKGluZGV4LCAxKTtcbiAgfVxufVxuZnVuY3Rpb24gcHJvbWlzZVdpdGhSZXNvbHZlcnMoKSB7XG4gIGxldCByZXNvbHZlO1xuICBsZXQgcmVqZWN0O1xuICBjb25zdCBwcm9taXNlID0gbmV3IFByb21pc2UoKHJlcywgcmVqKSA9PiB7XG4gICAgcmVzb2x2ZSA9IHJlcztcbiAgICByZWplY3QgPSByZWo7XG4gIH0pO1xuICByZXR1cm4ge1xuICAgIHByb21pc2UsXG4gICAgcmVzb2x2ZSxcbiAgICByZWplY3RcbiAgfTtcbn1cbmZ1bmN0aW9uIHNjaGVkdWxlRGVsYXllZFRyaWdnZXIoc2NoZWR1bGVGbikge1xuICBjb25zdCBsVmlldyA9IGdldExWaWV3KCk7XG4gIGNvbnN0IHROb2RlID0gZ2V0Q3VycmVudFROb2RlKCk7XG4gIHJlbmRlclBsYWNlaG9sZGVyKGxWaWV3LCB0Tm9kZSk7XG4gIGlmICghc2hvdWxkVHJpZ2dlckRlZmVyQmxvY2soMCwgbFZpZXcpKSByZXR1cm47XG4gIGNvbnN0IGluamVjdG9yID0gbFZpZXdbSU5KRUNUT1JdO1xuICBjb25zdCBsRGV0YWlscyA9IGdldExEZWZlckJsb2NrRGV0YWlscyhsVmlldywgdE5vZGUpO1xuICBjb25zdCBjbGVhbnVwRm4gPSBzY2hlZHVsZUZuKCgpID0+IHRyaWdnZXJEZWZlckJsb2NrKDAsIGxWaWV3LCB0Tm9kZSksIGluamVjdG9yKTtcbiAgc3RvcmVUcmlnZ2VyQ2xlYW51cEZuKDAsIGxEZXRhaWxzLCBjbGVhbnVwRm4pO1xufVxuZnVuY3Rpb24gc2NoZWR1bGVEZWxheWVkUHJlZmV0Y2hpbmcoc2NoZWR1bGVGbikge1xuICBpZiAodHlwZW9mIG5nU2VydmVyTW9kZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbmdTZXJ2ZXJNb2RlKSByZXR1cm47XG4gIGNvbnN0IGxWaWV3ID0gZ2V0TFZpZXcoKTtcbiAgY29uc3QgaW5qZWN0b3IgPSBsVmlld1tJTkpFQ1RPUl07XG4gIGNvbnN0IHROb2RlID0gZ2V0Q3VycmVudFROb2RlKCk7XG4gIGNvbnN0IHRWaWV3ID0gbFZpZXdbVFZJRVddO1xuICBjb25zdCB0RGV0YWlscyA9IGdldFREZWZlckJsb2NrRGV0YWlscyh0VmlldywgdE5vZGUpO1xuICBpZiAodERldGFpbHMubG9hZGluZ1N0YXRlID09PSBEZWZlckRlcGVuZGVuY2llc0xvYWRpbmdTdGF0ZS5OT1RfU1RBUlRFRCkge1xuICAgIGNvbnN0IGxEZXRhaWxzID0gZ2V0TERlZmVyQmxvY2tEZXRhaWxzKGxWaWV3LCB0Tm9kZSk7XG4gICAgY29uc3QgcHJlZmV0Y2ggPSAoKSA9PiB0cmlnZ2VyUHJlZmV0Y2hpbmcodERldGFpbHMsIGxWaWV3LCB0Tm9kZSk7XG4gICAgY29uc3QgY2xlYW51cEZuID0gc2NoZWR1bGVGbihwcmVmZXRjaCwgaW5qZWN0b3IpO1xuICAgIHN0b3JlVHJpZ2dlckNsZWFudXBGbigxLCBsRGV0YWlscywgY2xlYW51cEZuKTtcbiAgfVxufVxuZnVuY3Rpb24gc2NoZWR1bGVEZWxheWVkSHlkcmF0aW5nKHNjaGVkdWxlRm4sIGxWaWV3LCB0Tm9kZSkge1xuICBpZiAodHlwZW9mIG5nU2VydmVyTW9kZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbmdTZXJ2ZXJNb2RlKSByZXR1cm47XG4gIGNvbnN0IGluamVjdG9yID0gbFZpZXdbSU5KRUNUT1JdO1xuICBjb25zdCBsRGV0YWlscyA9IGdldExEZWZlckJsb2NrRGV0YWlscyhsVmlldywgdE5vZGUpO1xuICBjb25zdCBzc3JVbmlxdWVJZCA9IGxEZXRhaWxzW1NTUl9VTklRVUVfSURdO1xuICBuZ0Rldk1vZGUgJiYgYXNzZXJ0U3NySWREZWZpbmVkKHNzclVuaXF1ZUlkKTtcbiAgY29uc3QgY2xlYW51cEZuID0gc2NoZWR1bGVGbigoKSA9PiB0cmlnZ2VySHlkcmF0aW9uRnJvbUJsb2NrTmFtZShpbmplY3Rvciwgc3NyVW5pcXVlSWQpLCBpbmplY3Rvcik7XG4gIHN0b3JlVHJpZ2dlckNsZWFudXBGbigyLCBsRGV0YWlscywgY2xlYW51cEZuKTtcbn1cbmZ1bmN0aW9uIHRyaWdnZXJQcmVmZXRjaGluZyh0RGV0YWlscywgbFZpZXcsIHROb2RlKSB7XG4gIHRyaWdnZXJSZXNvdXJjZUxvYWRpbmcodERldGFpbHMsIGxWaWV3LCB0Tm9kZSk7XG59XG5mdW5jdGlvbiB0cmlnZ2VyUmVzb3VyY2VMb2FkaW5nKHREZXRhaWxzLCBsVmlldywgdE5vZGUpIHtcbiAgY29uc3QgaW5qZWN0b3IgPSBsVmlld1tJTkpFQ1RPUl07XG4gIGNvbnN0IHRWaWV3ID0gbFZpZXdbVFZJRVddO1xuICBpZiAodERldGFpbHMubG9hZGluZ1N0YXRlICE9PSBEZWZlckRlcGVuZGVuY2llc0xvYWRpbmdTdGF0ZS5OT1RfU1RBUlRFRCkge1xuICAgIHJldHVybiB0RGV0YWlscy5sb2FkaW5nUHJvbWlzZSA/PyBQcm9taXNlLnJlc29sdmUoKTtcbiAgfVxuICBjb25zdCBsRGV0YWlscyA9IGdldExEZWZlckJsb2NrRGV0YWlscyhsVmlldywgdE5vZGUpO1xuICBjb25zdCBwcmltYXJ5QmxvY2tUTm9kZSA9IGdldFByaW1hcnlCbG9ja1ROb2RlKHRWaWV3LCB0RGV0YWlscyk7XG4gIHREZXRhaWxzLmxvYWRpbmdTdGF0ZSA9IERlZmVyRGVwZW5kZW5jaWVzTG9hZGluZ1N0YXRlLklOX1BST0dSRVNTO1xuICBpbnZva2VUcmlnZ2VyQ2xlYW51cEZucygxLCBsRGV0YWlscyk7XG4gIGxldCBkZXBlbmRlbmNpZXNGbiA9IHREZXRhaWxzLmRlcGVuZGVuY3lSZXNvbHZlckZuO1xuICBpZiAobmdEZXZNb2RlKSB7XG4gICAgY29uc3QgZGVmZXJEZXBlbmRlbmN5SW50ZXJjZXB0b3IgPSBpbmplY3Rvci5nZXQoREVGRVJfQkxPQ0tfREVQRU5ERU5DWV9JTlRFUkNFUFRPUiwgbnVsbCwge1xuICAgICAgb3B0aW9uYWw6IHRydWVcbiAgICB9KTtcbiAgICBpZiAoZGVmZXJEZXBlbmRlbmN5SW50ZXJjZXB0b3IpIHtcbiAgICAgIGRlcGVuZGVuY2llc0ZuID0gZGVmZXJEZXBlbmRlbmN5SW50ZXJjZXB0b3IuaW50ZXJjZXB0KGRlcGVuZGVuY2llc0ZuKTtcbiAgICB9XG4gIH1cbiAgY29uc3QgcmVtb3ZlVGFzayA9IGluamVjdG9yLmdldChQZW5kaW5nVGFza3MpLmFkZCgpO1xuICBpZiAoIWRlcGVuZGVuY2llc0ZuKSB7XG4gICAgdERldGFpbHMubG9hZGluZ1Byb21pc2UgPSBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHtcbiAgICAgIHREZXRhaWxzLmxvYWRpbmdQcm9taXNlID0gbnVsbDtcbiAgICAgIHREZXRhaWxzLmxvYWRpbmdTdGF0ZSA9IERlZmVyRGVwZW5kZW5jaWVzTG9hZGluZ1N0YXRlLkNPTVBMRVRFO1xuICAgICAgcmVtb3ZlVGFzaygpO1xuICAgIH0pO1xuICAgIHJldHVybiB0RGV0YWlscy5sb2FkaW5nUHJvbWlzZTtcbiAgfVxuICB0RGV0YWlscy5sb2FkaW5nUHJvbWlzZSA9IFByb21pc2UuYWxsU2V0dGxlZChkZXBlbmRlbmNpZXNGbigpKS50aGVuKHJlc3VsdHMgPT4ge1xuICAgIGxldCBmYWlsZWQgPSBmYWxzZTtcbiAgICBjb25zdCBkaXJlY3RpdmVEZWZzID0gW107XG4gICAgY29uc3QgcGlwZURlZnMgPSBbXTtcbiAgICBmb3IgKGNvbnN0IHJlc3VsdCBvZiByZXN1bHRzKSB7XG4gICAgICBpZiAocmVzdWx0LnN0YXR1cyA9PT0gJ2Z1bGZpbGxlZCcpIHtcbiAgICAgICAgY29uc3QgZGVwZW5kZW5jeSA9IHJlc3VsdC52YWx1ZTtcbiAgICAgICAgY29uc3QgZGlyZWN0aXZlRGVmID0gZ2V0Q29tcG9uZW50RGVmKGRlcGVuZGVuY3kpIHx8IGdldERpcmVjdGl2ZURlZihkZXBlbmRlbmN5KTtcbiAgICAgICAgaWYgKGRpcmVjdGl2ZURlZikge1xuICAgICAgICAgIGRpcmVjdGl2ZURlZnMucHVzaChkaXJlY3RpdmVEZWYpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHBpcGVEZWYgPSBnZXRQaXBlRGVmJDEoZGVwZW5kZW5jeSk7XG4gICAgICAgICAgaWYgKHBpcGVEZWYpIHtcbiAgICAgICAgICAgIHBpcGVEZWZzLnB1c2gocGlwZURlZik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmYWlsZWQgPSB0cnVlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGZhaWxlZCkge1xuICAgICAgdERldGFpbHMubG9hZGluZ1N0YXRlID0gRGVmZXJEZXBlbmRlbmNpZXNMb2FkaW5nU3RhdGUuRkFJTEVEO1xuICAgICAgaWYgKHREZXRhaWxzLmVycm9yVG1wbEluZGV4ID09PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHRlbXBsYXRlTG9jYXRpb24gPSBuZ0Rldk1vZGUgPyBnZXRUZW1wbGF0ZUxvY2F0aW9uRGV0YWlscyhsVmlldykgOiAnJztcbiAgICAgICAgY29uc3QgZXJyb3IgPSBuZXcgUnVudGltZUVycm9yKC03NTAsIG5nRGV2TW9kZSAmJiAnTG9hZGluZyBkZXBlbmRlbmNpZXMgZm9yIGBAZGVmZXJgIGJsb2NrIGZhaWxlZCwgJyArIGBidXQgbm8gXFxgQGVycm9yXFxgIGJsb2NrIHdhcyBjb25maWd1cmVkJHt0ZW1wbGF0ZUxvY2F0aW9ufS4gYCArICdDb25zaWRlciB1c2luZyB0aGUgYEBlcnJvcmAgYmxvY2sgdG8gcmVuZGVyIGFuIGVycm9yIHN0YXRlLicpO1xuICAgICAgICBoYW5kbGVVbmNhdWdodEVycm9yKGxWaWV3LCBlcnJvcik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHREZXRhaWxzLmxvYWRpbmdTdGF0ZSA9IERlZmVyRGVwZW5kZW5jaWVzTG9hZGluZ1N0YXRlLkNPTVBMRVRFO1xuICAgICAgY29uc3QgcHJpbWFyeUJsb2NrVFZpZXcgPSBwcmltYXJ5QmxvY2tUTm9kZS50VmlldztcbiAgICAgIGlmIChkaXJlY3RpdmVEZWZzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcHJpbWFyeUJsb2NrVFZpZXcuZGlyZWN0aXZlUmVnaXN0cnkgPSBhZGREZXBzVG9SZWdpc3RyeShwcmltYXJ5QmxvY2tUVmlldy5kaXJlY3RpdmVSZWdpc3RyeSwgZGlyZWN0aXZlRGVmcyk7XG4gICAgICAgIGNvbnN0IGRpcmVjdGl2ZVR5cGVzID0gZGlyZWN0aXZlRGVmcy5tYXAoZGVmID0+IGRlZi50eXBlKTtcbiAgICAgICAgY29uc3QgcHJvdmlkZXJzID0gaW50ZXJuYWxJbXBvcnRQcm92aWRlcnNGcm9tKGZhbHNlLCAuLi5kaXJlY3RpdmVUeXBlcyk7XG4gICAgICAgIHREZXRhaWxzLnByb3ZpZGVycyA9IHByb3ZpZGVycztcbiAgICAgIH1cbiAgICAgIGlmIChwaXBlRGVmcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHByaW1hcnlCbG9ja1RWaWV3LnBpcGVSZWdpc3RyeSA9IGFkZERlcHNUb1JlZ2lzdHJ5KHByaW1hcnlCbG9ja1RWaWV3LnBpcGVSZWdpc3RyeSwgcGlwZURlZnMpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHJldHVybiB0RGV0YWlscy5sb2FkaW5nUHJvbWlzZS5maW5hbGx5KCgpID0+IHtcbiAgICB0RGV0YWlscy5sb2FkaW5nUHJvbWlzZSA9IG51bGw7XG4gICAgcmVtb3ZlVGFzaygpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIHNob3VsZFRyaWdnZXJEZWZlckJsb2NrKHRyaWdnZXJUeXBlLCBsVmlldykge1xuICBpZiAodHJpZ2dlclR5cGUgPT09IDAgJiYgdHlwZW9mIG5nU2VydmVyTW9kZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbmdTZXJ2ZXJNb2RlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IGluamVjdG9yID0gbFZpZXdbSU5KRUNUT1JdO1xuICBjb25zdCBjb25maWcgPSBpbmplY3Rvci5nZXQoREVGRVJfQkxPQ0tfQ09ORklHLCBudWxsLCB7XG4gICAgb3B0aW9uYWw6IHRydWVcbiAgfSk7XG4gIGlmIChjb25maWc/LmJlaGF2aW9yID09PSBEZWZlckJsb2NrQmVoYXZpb3IuTWFudWFsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuZnVuY3Rpb24gdHJpZ2dlckRlZmVyQmxvY2sodHJpZ2dlclR5cGUsIGxWaWV3LCB0Tm9kZSkge1xuICBjb25zdCB0VmlldyA9IGxWaWV3W1RWSUVXXTtcbiAgY29uc3QgbENvbnRhaW5lciA9IGxWaWV3W3ROb2RlLmluZGV4XTtcbiAgbmdEZXZNb2RlICYmIGFzc2VydExDb250YWluZXIobENvbnRhaW5lcik7XG4gIGlmICghc2hvdWxkVHJpZ2dlckRlZmVyQmxvY2sodHJpZ2dlclR5cGUsIGxWaWV3KSkgcmV0dXJuO1xuICBjb25zdCBsRGV0YWlscyA9IGdldExEZWZlckJsb2NrRGV0YWlscyhsVmlldywgdE5vZGUpO1xuICBjb25zdCB0RGV0YWlscyA9IGdldFREZWZlckJsb2NrRGV0YWlscyh0VmlldywgdE5vZGUpO1xuICBpbnZva2VBbGxUcmlnZ2VyQ2xlYW51cEZucyhsRGV0YWlscyk7XG4gIHN3aXRjaCAodERldGFpbHMubG9hZGluZ1N0YXRlKSB7XG4gICAgY2FzZSBEZWZlckRlcGVuZGVuY2llc0xvYWRpbmdTdGF0ZS5OT1RfU1RBUlRFRDpcbiAgICAgIHJlbmRlckRlZmVyQmxvY2tTdGF0ZShEZWZlckJsb2NrU3RhdGUuTG9hZGluZywgdE5vZGUsIGxDb250YWluZXIpO1xuICAgICAgdHJpZ2dlclJlc291cmNlTG9hZGluZyh0RGV0YWlscywgbFZpZXcsIHROb2RlKTtcbiAgICAgIGlmICh0RGV0YWlscy5sb2FkaW5nU3RhdGUgPT09IERlZmVyRGVwZW5kZW5jaWVzTG9hZGluZ1N0YXRlLklOX1BST0dSRVNTKSB7XG4gICAgICAgIHJlbmRlckRlZmVyU3RhdGVBZnRlclJlc291cmNlTG9hZGluZyh0RGV0YWlscywgdE5vZGUsIGxDb250YWluZXIpO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSBEZWZlckRlcGVuZGVuY2llc0xvYWRpbmdTdGF0ZS5JTl9QUk9HUkVTUzpcbiAgICAgIHJlbmRlckRlZmVyQmxvY2tTdGF0ZShEZWZlckJsb2NrU3RhdGUuTG9hZGluZywgdE5vZGUsIGxDb250YWluZXIpO1xuICAgICAgcmVuZGVyRGVmZXJTdGF0ZUFmdGVyUmVzb3VyY2VMb2FkaW5nKHREZXRhaWxzLCB0Tm9kZSwgbENvbnRhaW5lcik7XG4gICAgICBicmVhaztcbiAgICBjYXNlIERlZmVyRGVwZW5kZW5jaWVzTG9hZGluZ1N0YXRlLkNPTVBMRVRFOlxuICAgICAgbmdEZXZNb2RlICYmIGFzc2VydERlZmVycmVkRGVwZW5kZW5jaWVzTG9hZGVkKHREZXRhaWxzKTtcbiAgICAgIHJlbmRlckRlZmVyQmxvY2tTdGF0ZShEZWZlckJsb2NrU3RhdGUuQ29tcGxldGUsIHROb2RlLCBsQ29udGFpbmVyKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgRGVmZXJEZXBlbmRlbmNpZXNMb2FkaW5nU3RhdGUuRkFJTEVEOlxuICAgICAgcmVuZGVyRGVmZXJCbG9ja1N0YXRlKERlZmVyQmxvY2tTdGF0ZS5FcnJvciwgdE5vZGUsIGxDb250YWluZXIpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIGlmIChuZ0Rldk1vZGUpIHtcbiAgICAgICAgdGhyb3dFcnJvcignVW5rbm93biBkZWZlciBibG9jayBzdGF0ZScpO1xuICAgICAgfVxuICB9XG59XG5hc3luYyBmdW5jdGlvbiB0cmlnZ2VySHlkcmF0aW9uRnJvbUJsb2NrTmFtZShpbmplY3RvciwgYmxvY2tOYW1lLCByZXBsYXlRdWV1ZWRFdmVudHNGbikge1xuICBjb25zdCBkZWh5ZHJhdGVkQmxvY2tSZWdpc3RyeSA9IGluamVjdG9yLmdldChERUhZRFJBVEVEX0JMT0NLX1JFR0lTVFJZKTtcbiAgY29uc3QgYmxvY2tzQmVpbmdIeWRyYXRlZCA9IGRlaHlkcmF0ZWRCbG9ja1JlZ2lzdHJ5Lmh5ZHJhdGluZztcbiAgaWYgKGJsb2Nrc0JlaW5nSHlkcmF0ZWQuaGFzKGJsb2NrTmFtZSkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3Qge1xuICAgIHBhcmVudEJsb2NrUHJvbWlzZSxcbiAgICBoeWRyYXRpb25RdWV1ZVxuICB9ID0gZ2V0UGFyZW50QmxvY2tIeWRyYXRpb25RdWV1ZShibG9ja05hbWUsIGluamVjdG9yKTtcbiAgaWYgKGh5ZHJhdGlvblF1ZXVlLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICBpZiAocGFyZW50QmxvY2tQcm9taXNlICE9PSBudWxsKSB7XG4gICAgaHlkcmF0aW9uUXVldWUuc2hpZnQoKTtcbiAgfVxuICBwb3B1bGF0ZUh5ZHJhdGluZ1N0YXRlRm9yUXVldWUoZGVoeWRyYXRlZEJsb2NrUmVnaXN0cnksIGh5ZHJhdGlvblF1ZXVlKTtcbiAgaWYgKHBhcmVudEJsb2NrUHJvbWlzZSAhPT0gbnVsbCkge1xuICAgIGF3YWl0IHBhcmVudEJsb2NrUHJvbWlzZTtcbiAgfVxuICBjb25zdCB0b3Btb3N0UGFyZW50QmxvY2sgPSBoeWRyYXRpb25RdWV1ZVswXTtcbiAgaWYgKGRlaHlkcmF0ZWRCbG9ja1JlZ2lzdHJ5Lmhhcyh0b3Btb3N0UGFyZW50QmxvY2spKSB7XG4gICAgYXdhaXQgdHJpZ2dlckh5ZHJhdGlvbkZvckJsb2NrUXVldWUoaW5qZWN0b3IsIGh5ZHJhdGlvblF1ZXVlLCByZXBsYXlRdWV1ZWRFdmVudHNGbik7XG4gIH0gZWxzZSB7XG4gICAgZGVoeWRyYXRlZEJsb2NrUmVnaXN0cnkuYXdhaXRQYXJlbnRCbG9jayh0b3Btb3N0UGFyZW50QmxvY2ssIGFzeW5jICgpID0+IGF3YWl0IHRyaWdnZXJIeWRyYXRpb25Gb3JCbG9ja1F1ZXVlKGluamVjdG9yLCBoeWRyYXRpb25RdWV1ZSwgcmVwbGF5UXVldWVkRXZlbnRzRm4pKTtcbiAgfVxufVxuYXN5bmMgZnVuY3Rpb24gdHJpZ2dlckh5ZHJhdGlvbkZvckJsb2NrUXVldWUoaW5qZWN0b3IsIGh5ZHJhdGlvblF1ZXVlLCByZXBsYXlRdWV1ZWRFdmVudHNGbikge1xuICBjb25zdCBkZWh5ZHJhdGVkQmxvY2tSZWdpc3RyeSA9IGluamVjdG9yLmdldChERUhZRFJBVEVEX0JMT0NLX1JFR0lTVFJZKTtcbiAgY29uc3QgYmxvY2tzQmVpbmdIeWRyYXRlZCA9IGRlaHlkcmF0ZWRCbG9ja1JlZ2lzdHJ5Lmh5ZHJhdGluZztcbiAgY29uc3QgcGVuZGluZ1Rhc2tzID0gaW5qZWN0b3IuZ2V0KFBlbmRpbmdUYXNrc0ludGVybmFsKTtcbiAgY29uc3QgdGFza0lkID0gcGVuZGluZ1Rhc2tzLmFkZCgpO1xuICBmb3IgKGxldCBibG9ja1F1ZXVlSWR4ID0gMDsgYmxvY2tRdWV1ZUlkeCA8IGh5ZHJhdGlvblF1ZXVlLmxlbmd0aDsgYmxvY2tRdWV1ZUlkeCsrKSB7XG4gICAgY29uc3QgZGVoeWRyYXRlZEJsb2NrSWQgPSBoeWRyYXRpb25RdWV1ZVtibG9ja1F1ZXVlSWR4XTtcbiAgICBjb25zdCBkZWh5ZHJhdGVkRGVmZXJCbG9jayA9IGRlaHlkcmF0ZWRCbG9ja1JlZ2lzdHJ5LmdldChkZWh5ZHJhdGVkQmxvY2tJZCk7XG4gICAgaWYgKGRlaHlkcmF0ZWREZWZlckJsb2NrICE9IG51bGwpIHtcbiAgICAgIGF3YWl0IHRyaWdnZXJSZXNvdXJjZUxvYWRpbmdGb3JIeWRyYXRpb24oZGVoeWRyYXRlZERlZmVyQmxvY2spO1xuICAgICAgYXdhaXQgbmV4dFJlbmRlcihpbmplY3Rvcik7XG4gICAgICBpZiAoZGVmZXJCbG9ja0hhc0Vycm9yZWQoZGVoeWRyYXRlZERlZmVyQmxvY2spKSB7XG4gICAgICAgIHJlbW92ZURlaHlkcmF0ZWRWaWV3TGlzdChkZWh5ZHJhdGVkRGVmZXJCbG9jayk7XG4gICAgICAgIGNsZWFudXBSZW1haW5pbmdIeWRyYXRpb25RdWV1ZShoeWRyYXRpb25RdWV1ZS5zbGljZShibG9ja1F1ZXVlSWR4KSwgZGVoeWRyYXRlZEJsb2NrUmVnaXN0cnkpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGJsb2Nrc0JlaW5nSHlkcmF0ZWQuZ2V0KGRlaHlkcmF0ZWRCbG9ja0lkKS5yZXNvbHZlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNsZWFudXBQYXJlbnRDb250YWluZXIoYmxvY2tRdWV1ZUlkeCwgaHlkcmF0aW9uUXVldWUsIGRlaHlkcmF0ZWRCbG9ja1JlZ2lzdHJ5KTtcbiAgICAgIGNsZWFudXBSZW1haW5pbmdIeWRyYXRpb25RdWV1ZShoeWRyYXRpb25RdWV1ZS5zbGljZShibG9ja1F1ZXVlSWR4KSwgZGVoeWRyYXRlZEJsb2NrUmVnaXN0cnkpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIGNvbnN0IGxhc3RCbG9ja05hbWUgPSBoeWRyYXRpb25RdWV1ZVtoeWRyYXRpb25RdWV1ZS5sZW5ndGggLSAxXTtcbiAgYXdhaXQgYmxvY2tzQmVpbmdIeWRyYXRlZC5nZXQobGFzdEJsb2NrTmFtZSk/LnByb21pc2U7XG4gIHBlbmRpbmdUYXNrcy5yZW1vdmUodGFza0lkKTtcbiAgaWYgKHJlcGxheVF1ZXVlZEV2ZW50c0ZuKSB7XG4gICAgcmVwbGF5UXVldWVkRXZlbnRzRm4oaHlkcmF0aW9uUXVldWUpO1xuICB9XG4gIGNsZWFudXBIeWRyYXRlZERlZmVyQmxvY2tzKGRlaHlkcmF0ZWRCbG9ja1JlZ2lzdHJ5LmdldChsYXN0QmxvY2tOYW1lKSwgaHlkcmF0aW9uUXVldWUsIGRlaHlkcmF0ZWRCbG9ja1JlZ2lzdHJ5LCBpbmplY3Rvci5nZXQoQXBwbGljYXRpb25SZWYpKTtcbn1cbmZ1bmN0aW9uIGRlZmVyQmxvY2tIYXNFcnJvcmVkKGRlZmVyQmxvY2spIHtcbiAgcmV0dXJuIGdldExEZWZlckJsb2NrRGV0YWlscyhkZWZlckJsb2NrLmxWaWV3LCBkZWZlckJsb2NrLnROb2RlKVtERUZFUl9CTE9DS19TVEFURV0gPT09IERlZmVyQmxvY2tTdGF0ZS5FcnJvcjtcbn1cbmZ1bmN0aW9uIGNsZWFudXBQYXJlbnRDb250YWluZXIoY3VycmVudEJsb2NrSWR4LCBoeWRyYXRpb25RdWV1ZSwgZGVoeWRyYXRlZEJsb2NrUmVnaXN0cnkpIHtcbiAgY29uc3QgcGFyZW50RGVmZXJCbG9ja0lkeCA9IGN1cnJlbnRCbG9ja0lkeCAtIDE7XG4gIGNvbnN0IHBhcmVudERlZmVyQmxvY2sgPSBwYXJlbnREZWZlckJsb2NrSWR4ID4gLTEgPyBkZWh5ZHJhdGVkQmxvY2tSZWdpc3RyeS5nZXQoaHlkcmF0aW9uUXVldWVbcGFyZW50RGVmZXJCbG9ja0lkeF0pIDogbnVsbDtcbiAgaWYgKHBhcmVudERlZmVyQmxvY2spIHtcbiAgICBjbGVhbnVwTENvbnRhaW5lcihwYXJlbnREZWZlckJsb2NrLmxDb250YWluZXIpO1xuICB9XG59XG5mdW5jdGlvbiBjbGVhbnVwUmVtYWluaW5nSHlkcmF0aW9uUXVldWUoaHlkcmF0aW9uUXVldWUsIGRlaHlkcmF0ZWRCbG9ja1JlZ2lzdHJ5KSB7XG4gIGNvbnN0IGJsb2Nrc0JlaW5nSHlkcmF0ZWQgPSBkZWh5ZHJhdGVkQmxvY2tSZWdpc3RyeS5oeWRyYXRpbmc7XG4gIGZvciAoY29uc3QgZGVoeWRyYXRlZEJsb2NrSWQgaW4gaHlkcmF0aW9uUXVldWUpIHtcbiAgICBibG9ja3NCZWluZ0h5ZHJhdGVkLmdldChkZWh5ZHJhdGVkQmxvY2tJZCk/LnJlamVjdCgpO1xuICB9XG4gIGRlaHlkcmF0ZWRCbG9ja1JlZ2lzdHJ5LmNsZWFudXAoaHlkcmF0aW9uUXVldWUpO1xufVxuZnVuY3Rpb24gcG9wdWxhdGVIeWRyYXRpbmdTdGF0ZUZvclF1ZXVlKHJlZ2lzdHJ5LCBxdWV1ZSkge1xuICBmb3IgKGxldCBibG9ja0lkIG9mIHF1ZXVlKSB7XG4gICAgcmVnaXN0cnkuaHlkcmF0aW5nLnNldChibG9ja0lkLCBwcm9taXNlV2l0aFJlc29sdmVycygpKTtcbiAgfVxufVxuZnVuY3Rpb24gbmV4dFJlbmRlcihpbmplY3Rvcikge1xuICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZUZuID0+IGFmdGVyTmV4dFJlbmRlcihyZXNvbHZlRm4sIHtcbiAgICBpbmplY3RvclxuICB9KSk7XG59XG5hc3luYyBmdW5jdGlvbiB0cmlnZ2VyUmVzb3VyY2VMb2FkaW5nRm9ySHlkcmF0aW9uKGRlaHlkcmF0ZWRCbG9jaykge1xuICBjb25zdCB7XG4gICAgdE5vZGUsXG4gICAgbFZpZXdcbiAgfSA9IGRlaHlkcmF0ZWRCbG9jaztcbiAgY29uc3QgbERldGFpbHMgPSBnZXRMRGVmZXJCbG9ja0RldGFpbHMobFZpZXcsIHROb2RlKTtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgIG9uRGVmZXJCbG9ja0NvbXBsZXRpb24obERldGFpbHMsIHJlc29sdmUpO1xuICAgIHRyaWdnZXJEZWZlckJsb2NrKDIsIGxWaWV3LCB0Tm9kZSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gb25EZWZlckJsb2NrQ29tcGxldGlvbihsRGV0YWlscywgY2FsbGJhY2spIHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KGxEZXRhaWxzW09OX0NPTVBMRVRFX0ZOU10pKSB7XG4gICAgbERldGFpbHNbT05fQ09NUExFVEVfRk5TXSA9IFtdO1xuICB9XG4gIGxEZXRhaWxzW09OX0NPTVBMRVRFX0ZOU10ucHVzaChjYWxsYmFjayk7XG59XG5mdW5jdGlvbiBzaG91bGRBdHRhY2hUcmlnZ2VyKHRyaWdnZXJUeXBlLCBsVmlldywgdE5vZGUpIHtcbiAgaWYgKHRyaWdnZXJUeXBlID09PSAwKSB7XG4gICAgcmV0dXJuIHNob3VsZEF0dGFjaFJlZ3VsYXJUcmlnZ2VyKGxWaWV3LCB0Tm9kZSk7XG4gIH0gZWxzZSBpZiAodHJpZ2dlclR5cGUgPT09IDIpIHtcbiAgICByZXR1cm4gIXNob3VsZEF0dGFjaFJlZ3VsYXJUcmlnZ2VyKGxWaWV3LCB0Tm9kZSk7XG4gIH1cbiAgcmV0dXJuICEodHlwZW9mIG5nU2VydmVyTW9kZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbmdTZXJ2ZXJNb2RlKTtcbn1cbmZ1bmN0aW9uIGhhc0h5ZHJhdGVUcmlnZ2VycyhmbGFncykge1xuICByZXR1cm4gZmxhZ3MgIT0gbnVsbCAmJiAoZmxhZ3MgJiAxKSA9PT0gMTtcbn1cbmZ1bmN0aW9uIHNob3VsZEF0dGFjaFJlZ3VsYXJUcmlnZ2VyKGxWaWV3LCB0Tm9kZSkge1xuICBjb25zdCBpbmplY3RvciA9IGxWaWV3W0lOSkVDVE9SXTtcbiAgY29uc3QgdERldGFpbHMgPSBnZXRURGVmZXJCbG9ja0RldGFpbHMobFZpZXdbVFZJRVddLCB0Tm9kZSk7XG4gIGNvbnN0IGluY3JlbWVudGFsSHlkcmF0aW9uRW5hYmxlZCA9IGlzSW5jcmVtZW50YWxIeWRyYXRpb25FbmFibGVkKGluamVjdG9yKTtcbiAgY29uc3QgX2hhc0h5ZHJhdGVUcmlnZ2VycyA9IGhhc0h5ZHJhdGVUcmlnZ2Vycyh0RGV0YWlscy5mbGFncyk7XG4gIGlmICh0eXBlb2YgbmdTZXJ2ZXJNb2RlICE9PSAndW5kZWZpbmVkJyAmJiBuZ1NlcnZlck1vZGUpIHtcbiAgICByZXR1cm4gIWluY3JlbWVudGFsSHlkcmF0aW9uRW5hYmxlZCB8fCAhX2hhc0h5ZHJhdGVUcmlnZ2VycztcbiAgfVxuICBjb25zdCBsRGV0YWlscyA9IGdldExEZWZlckJsb2NrRGV0YWlscyhsVmlldywgdE5vZGUpO1xuICBjb25zdCB3YXNTZXJ2ZXJTaWRlUmVuZGVyZWQgPSBsRGV0YWlsc1tTU1JfVU5JUVVFX0lEXSAhPT0gbnVsbDtcbiAgaWYgKF9oYXNIeWRyYXRlVHJpZ2dlcnMgJiYgd2FzU2VydmVyU2lkZVJlbmRlcmVkICYmIGluY3JlbWVudGFsSHlkcmF0aW9uRW5hYmxlZCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cbmZ1bmN0aW9uIGdldEh5ZHJhdGVUcmlnZ2Vycyh0VmlldywgdE5vZGUpIHtcbiAgY29uc3QgdERldGFpbHMgPSBnZXRURGVmZXJCbG9ja0RldGFpbHModFZpZXcsIHROb2RlKTtcbiAgcmV0dXJuIHREZXRhaWxzLmh5ZHJhdGVUcmlnZ2VycyA/Pz0gbmV3IE1hcCgpO1xufVxuZnVuY3Rpb24gcHJvY2Vzc0FuZEluaXRUcmlnZ2VycyhpbmplY3RvciwgYmxvY2tEYXRhLCBub2Rlcykge1xuICBjb25zdCBpZGxlRWxlbWVudHMgPSBbXTtcbiAgY29uc3QgdGltZXJFbGVtZW50cyA9IFtdO1xuICBjb25zdCB2aWV3cG9ydEVsZW1lbnRzID0gW107XG4gIGNvbnN0IGltbWVkaWF0ZUVsZW1lbnRzID0gW107XG4gIGZvciAobGV0IFtibG9ja0lkLCBibG9ja1N1bW1hcnldIG9mIGJsb2NrRGF0YSkge1xuICAgIGNvbnN0IGNvbW1lbnROb2RlID0gbm9kZXMuZ2V0KGJsb2NrSWQpO1xuICAgIGlmIChjb21tZW50Tm9kZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBudW1Sb290Tm9kZXMgPSBibG9ja1N1bW1hcnkuZGF0YVtOVU1fUk9PVF9OT0RFU107XG4gICAgICBsZXQgY3VycmVudE5vZGUgPSBjb21tZW50Tm9kZTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtUm9vdE5vZGVzOyBpKyspIHtcbiAgICAgICAgY3VycmVudE5vZGUgPSBjdXJyZW50Tm9kZS5wcmV2aW91c1NpYmxpbmc7XG4gICAgICAgIGlmIChjdXJyZW50Tm9kZS5ub2RlVHlwZSAhPT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBlbGVtZW50VHJpZ2dlciA9IHtcbiAgICAgICAgICBlbDogY3VycmVudE5vZGUsXG4gICAgICAgICAgYmxvY2tOYW1lOiBibG9ja0lkXG4gICAgICAgIH07XG4gICAgICAgIGlmIChibG9ja1N1bW1hcnkuaHlkcmF0ZS5pZGxlKSB7XG4gICAgICAgICAgaWRsZUVsZW1lbnRzLnB1c2goZWxlbWVudFRyaWdnZXIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChibG9ja1N1bW1hcnkuaHlkcmF0ZS5pbW1lZGlhdGUpIHtcbiAgICAgICAgICBpbW1lZGlhdGVFbGVtZW50cy5wdXNoKGVsZW1lbnRUcmlnZ2VyKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYmxvY2tTdW1tYXJ5Lmh5ZHJhdGUudGltZXIgIT09IG51bGwpIHtcbiAgICAgICAgICBlbGVtZW50VHJpZ2dlci5kZWxheSA9IGJsb2NrU3VtbWFyeS5oeWRyYXRlLnRpbWVyO1xuICAgICAgICAgIHRpbWVyRWxlbWVudHMucHVzaChlbGVtZW50VHJpZ2dlcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGJsb2NrU3VtbWFyeS5oeWRyYXRlLnZpZXdwb3J0KSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBibG9ja1N1bW1hcnkuaHlkcmF0ZS52aWV3cG9ydCAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICBlbGVtZW50VHJpZ2dlci5pbnRlcnNlY3Rpb25PYnNlcnZlck9wdGlvbnMgPSBibG9ja1N1bW1hcnkuaHlkcmF0ZS52aWV3cG9ydDtcbiAgICAgICAgICB9XG4gICAgICAgICAgdmlld3BvcnRFbGVtZW50cy5wdXNoKGVsZW1lbnRUcmlnZ2VyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBzZXRJZGxlVHJpZ2dlcnMoaW5qZWN0b3IsIGlkbGVFbGVtZW50cyk7XG4gIHNldEltbWVkaWF0ZVRyaWdnZXJzKGluamVjdG9yLCBpbW1lZGlhdGVFbGVtZW50cyk7XG4gIHNldFZpZXdwb3J0VHJpZ2dlcnMoaW5qZWN0b3IsIHZpZXdwb3J0RWxlbWVudHMpO1xuICBzZXRUaW1lclRyaWdnZXJzKGluamVjdG9yLCB0aW1lckVsZW1lbnRzKTtcbn1cbmZ1bmN0aW9uIHNldElkbGVUcmlnZ2VycyhpbmplY3RvciwgZWxlbWVudFRyaWdnZXJzKSB7XG4gIGZvciAoY29uc3QgZWxlbWVudFRyaWdnZXIgb2YgZWxlbWVudFRyaWdnZXJzKSB7XG4gICAgY29uc3QgcmVnaXN0cnkgPSBpbmplY3Rvci5nZXQoREVIWURSQVRFRF9CTE9DS19SRUdJU1RSWSk7XG4gICAgY29uc3Qgb25JbnZva2UgPSAoKSA9PiB0cmlnZ2VySHlkcmF0aW9uRnJvbUJsb2NrTmFtZShpbmplY3RvciwgZWxlbWVudFRyaWdnZXIuYmxvY2tOYW1lKTtcbiAgICBjb25zdCBjbGVhbnVwRm4gPSBvbklkbGUob25JbnZva2UsIGluamVjdG9yKTtcbiAgICByZWdpc3RyeS5hZGRDbGVhbnVwRm4oZWxlbWVudFRyaWdnZXIuYmxvY2tOYW1lLCBjbGVhbnVwRm4pO1xuICB9XG59XG5mdW5jdGlvbiBzZXRWaWV3cG9ydFRyaWdnZXJzKGluamVjdG9yLCBlbGVtZW50VHJpZ2dlcnMpIHtcbiAgaWYgKGVsZW1lbnRUcmlnZ2Vycy5sZW5ndGggPiAwKSB7XG4gICAgY29uc3QgcmVnaXN0cnkgPSBpbmplY3Rvci5nZXQoREVIWURSQVRFRF9CTE9DS19SRUdJU1RSWSk7XG4gICAgZm9yIChsZXQgZWxlbWVudFRyaWdnZXIgb2YgZWxlbWVudFRyaWdnZXJzKSB7XG4gICAgICBjb25zdCBjbGVhbnVwRm4gPSBvblZpZXdwb3J0V3JhcHBlcihlbGVtZW50VHJpZ2dlci5lbCwgKCkgPT4gdHJpZ2dlckh5ZHJhdGlvbkZyb21CbG9ja05hbWUoaW5qZWN0b3IsIGVsZW1lbnRUcmlnZ2VyLmJsb2NrTmFtZSksIGluamVjdG9yLCBlbGVtZW50VHJpZ2dlci5pbnRlcnNlY3Rpb25PYnNlcnZlck9wdGlvbnMpO1xuICAgICAgcmVnaXN0cnkuYWRkQ2xlYW51cEZuKGVsZW1lbnRUcmlnZ2VyLmJsb2NrTmFtZSwgY2xlYW51cEZuKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIHNldFRpbWVyVHJpZ2dlcnMoaW5qZWN0b3IsIGVsZW1lbnRUcmlnZ2Vycykge1xuICBmb3IgKGNvbnN0IGVsZW1lbnRUcmlnZ2VyIG9mIGVsZW1lbnRUcmlnZ2Vycykge1xuICAgIGNvbnN0IHJlZ2lzdHJ5ID0gaW5qZWN0b3IuZ2V0KERFSFlEUkFURURfQkxPQ0tfUkVHSVNUUlkpO1xuICAgIGNvbnN0IG9uSW52b2tlID0gKCkgPT4gdHJpZ2dlckh5ZHJhdGlvbkZyb21CbG9ja05hbWUoaW5qZWN0b3IsIGVsZW1lbnRUcmlnZ2VyLmJsb2NrTmFtZSk7XG4gICAgY29uc3QgdGltZXJGbiA9IG9uVGltZXIoZWxlbWVudFRyaWdnZXIuZGVsYXkpO1xuICAgIGNvbnN0IGNsZWFudXBGbiA9IHRpbWVyRm4ob25JbnZva2UsIGluamVjdG9yKTtcbiAgICByZWdpc3RyeS5hZGRDbGVhbnVwRm4oZWxlbWVudFRyaWdnZXIuYmxvY2tOYW1lLCBjbGVhbnVwRm4pO1xuICB9XG59XG5mdW5jdGlvbiBzZXRJbW1lZGlhdGVUcmlnZ2VycyhpbmplY3RvciwgZWxlbWVudFRyaWdnZXJzKSB7XG4gIGZvciAoY29uc3QgZWxlbWVudFRyaWdnZXIgb2YgZWxlbWVudFRyaWdnZXJzKSB7XG4gICAgdHJpZ2dlckh5ZHJhdGlvbkZyb21CbG9ja05hbWUoaW5qZWN0b3IsIGVsZW1lbnRUcmlnZ2VyLmJsb2NrTmFtZSk7XG4gIH1cbn1cbmxldCBfaG1yV2FybmluZ1Byb2R1Y2VkID0gZmFsc2U7XG5mdW5jdGlvbiBsb2dIbXJXYXJuaW5nKGluamVjdG9yKSB7XG4gIGlmICghX2htcldhcm5pbmdQcm9kdWNlZCkge1xuICAgIF9obXJXYXJuaW5nUHJvZHVjZWQgPSB0cnVlO1xuICAgIGNvbnN0IGNvbnNvbGUgPSBpbmplY3Rvci5nZXQoQ29uc29sZSk7XG4gICAgY29uc29sZS5sb2coZm9ybWF0UnVudGltZUVycm9yKC03NTEsICdBbmd1bGFyIGhhcyBkZXRlY3RlZCB0aGF0IHRoaXMgYXBwbGljYXRpb24gY29udGFpbnMgYEBkZWZlcmAgYmxvY2tzICcgKyAnYW5kIHRoZSBob3QgbW9kdWxlIHJlcGxhY2VtZW50IChITVIpIG1vZGUgaXMgZW5hYmxlZC4gQWxsIGBAZGVmZXJgICcgKyAnYmxvY2sgZGVwZW5kZW5jaWVzIHdpbGwgYmUgbG9hZGVkIGVhZ2VybHkuJykpO1xuICB9XG59XG5mdW5jdGlvbiDJtcm1ZGVmZXIoaW5kZXgsIHByaW1hcnlUbXBsSW5kZXgsIGRlcGVuZGVuY3lSZXNvbHZlckZuLCBsb2FkaW5nVG1wbEluZGV4LCBwbGFjZWhvbGRlclRtcGxJbmRleCwgZXJyb3JUbXBsSW5kZXgsIGxvYWRpbmdDb25maWdJbmRleCwgcGxhY2Vob2xkZXJDb25maWdJbmRleCwgZW5hYmxlVGltZXJTY2hlZHVsaW5nLCBmbGFncykge1xuICBjb25zdCBsVmlldyA9IGdldExWaWV3KCk7XG4gIGNvbnN0IHRWaWV3ID0gZ2V0VFZpZXcoKTtcbiAgY29uc3QgYWRqdXN0ZWRJbmRleCA9IGluZGV4ICsgSEVBREVSX09GRlNFVDtcbiAgY29uc3QgdE5vZGUgPSBkZWNsYXJlTm9EaXJlY3RpdmVIb3N0VGVtcGxhdGUobFZpZXcsIHRWaWV3LCBpbmRleCwgbnVsbCwgMCwgMCk7XG4gIGNvbnN0IGluamVjdG9yID0gbFZpZXdbSU5KRUNUT1JdO1xuICBjb25zdCBpbmNyZW1lbnRhbEh5ZHJhdGlvbkVuYWJsZWQgPSBpc0luY3JlbWVudGFsSHlkcmF0aW9uRW5hYmxlZChpbmplY3Rvcik7XG4gIGlmICh0Vmlldy5maXJzdENyZWF0ZVBhc3MpIHtcbiAgICBwZXJmb3JtYW5jZU1hcmtGZWF0dXJlKCdOZ0RlZmVyJyk7XG4gICAgaWYgKG5nRGV2TW9kZSkge1xuICAgICAgaWYgKHR5cGVvZiBuZ0htck1vZGUgIT09ICd1bmRlZmluZWQnICYmIG5nSG1yTW9kZSkge1xuICAgICAgICBsb2dIbXJXYXJuaW5nKGluamVjdG9yKTtcbiAgICAgIH1cbiAgICAgIGlmIChoYXNIeWRyYXRlVHJpZ2dlcnMoZmxhZ3MpICYmICFpbmNyZW1lbnRhbEh5ZHJhdGlvbkVuYWJsZWQpIHtcbiAgICAgICAgd2FybkluY3JlbWVudGFsSHlkcmF0aW9uTm90Q29uZmlndXJlZCgpO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCB0RGV0YWlscyA9IHtcbiAgICAgIHByaW1hcnlUbXBsSW5kZXgsXG4gICAgICBsb2FkaW5nVG1wbEluZGV4OiBsb2FkaW5nVG1wbEluZGV4ID8/IG51bGwsXG4gICAgICBwbGFjZWhvbGRlclRtcGxJbmRleDogcGxhY2Vob2xkZXJUbXBsSW5kZXggPz8gbnVsbCxcbiAgICAgIGVycm9yVG1wbEluZGV4OiBlcnJvclRtcGxJbmRleCA/PyBudWxsLFxuICAgICAgcGxhY2Vob2xkZXJCbG9ja0NvbmZpZzogbnVsbCxcbiAgICAgIGxvYWRpbmdCbG9ja0NvbmZpZzogbnVsbCxcbiAgICAgIGRlcGVuZGVuY3lSZXNvbHZlckZuOiBkZXBlbmRlbmN5UmVzb2x2ZXJGbiA/PyBudWxsLFxuICAgICAgbG9hZGluZ1N0YXRlOiBEZWZlckRlcGVuZGVuY2llc0xvYWRpbmdTdGF0ZS5OT1RfU1RBUlRFRCxcbiAgICAgIGxvYWRpbmdQcm9taXNlOiBudWxsLFxuICAgICAgcHJvdmlkZXJzOiBudWxsLFxuICAgICAgaHlkcmF0ZVRyaWdnZXJzOiBudWxsLFxuICAgICAgZGVidWc6IG51bGwsXG4gICAgICBmbGFnczogZmxhZ3MgPz8gMFxuICAgIH07XG4gICAgZW5hYmxlVGltZXJTY2hlZHVsaW5nPy4odFZpZXcsIHREZXRhaWxzLCBwbGFjZWhvbGRlckNvbmZpZ0luZGV4LCBsb2FkaW5nQ29uZmlnSW5kZXgpO1xuICAgIHNldFREZWZlckJsb2NrRGV0YWlscyh0VmlldywgYWRqdXN0ZWRJbmRleCwgdERldGFpbHMpO1xuICB9XG4gIGNvbnN0IGxDb250YWluZXIgPSBsVmlld1thZGp1c3RlZEluZGV4XTtcbiAgcG9wdWxhdGVEZWh5ZHJhdGVkVmlld3NJbkxDb250YWluZXIobENvbnRhaW5lciwgdE5vZGUsIGxWaWV3KTtcbiAgbGV0IHNzckJsb2NrU3RhdGUgPSBudWxsO1xuICBsZXQgc3NyVW5pcXVlSWQgPSBudWxsO1xuICBpZiAobENvbnRhaW5lcltERUhZRFJBVEVEX1ZJRVdTXT8ubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IGluZm8gPSBsQ29udGFpbmVyW0RFSFlEUkFURURfVklFV1NdWzBdLmRhdGE7XG4gICAgc3NyVW5pcXVlSWQgPSBpbmZvW0RFRkVSX0JMT0NLX0lEXSA/PyBudWxsO1xuICAgIHNzckJsb2NrU3RhdGUgPSBpbmZvW0RFRkVSX0JMT0NLX1NUQVRFJDFdO1xuICB9XG4gIGNvbnN0IGxEZXRhaWxzID0gW251bGwsIERlZmVyQmxvY2tJbnRlcm5hbFN0YXRlLkluaXRpYWwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIHNzclVuaXF1ZUlkLCBzc3JCbG9ja1N0YXRlLCBudWxsLCBudWxsXTtcbiAgc2V0TERlZmVyQmxvY2tEZXRhaWxzKGxWaWV3LCBhZGp1c3RlZEluZGV4LCBsRGV0YWlscyk7XG4gIGxldCByZWdpc3RyeSA9IG51bGw7XG4gIGlmIChzc3JVbmlxdWVJZCAhPT0gbnVsbCAmJiBpbmNyZW1lbnRhbEh5ZHJhdGlvbkVuYWJsZWQpIHtcbiAgICByZWdpc3RyeSA9IGluamVjdG9yLmdldChERUhZRFJBVEVEX0JMT0NLX1JFR0lTVFJZKTtcbiAgICByZWdpc3RyeS5hZGQoc3NyVW5pcXVlSWQsIHtcbiAgICAgIGxWaWV3LFxuICAgICAgdE5vZGUsXG4gICAgICBsQ29udGFpbmVyXG4gICAgfSk7XG4gIH1cbiAgY29uc3Qgb25MVmlld0Rlc3Ryb3kgPSAoKSA9PiB7XG4gICAgaW52b2tlQWxsVHJpZ2dlckNsZWFudXBGbnMobERldGFpbHMpO1xuICAgIGlmIChzc3JVbmlxdWVJZCAhPT0gbnVsbCkge1xuICAgICAgcmVnaXN0cnk/LmNsZWFudXAoW3NzclVuaXF1ZUlkXSk7XG4gICAgfVxuICB9O1xuICBzdG9yZVRyaWdnZXJDbGVhbnVwRm4oMCwgbERldGFpbHMsICgpID0+IHJlbW92ZUxWaWV3T25EZXN0cm95KGxWaWV3LCBvbkxWaWV3RGVzdHJveSkpO1xuICBzdG9yZUxWaWV3T25EZXN0cm95KGxWaWV3LCBvbkxWaWV3RGVzdHJveSk7XG59XG5mdW5jdGlvbiDJtcm1ZGVmZXJXaGVuKHJhd1ZhbHVlKSB7XG4gIGNvbnN0IGxWaWV3ID0gZ2V0TFZpZXcoKTtcbiAgY29uc3QgdE5vZGUgPSBnZXRTZWxlY3RlZFROb2RlKCk7XG4gIGlmIChuZ0Rldk1vZGUpIHtcbiAgICB0cmFja1RyaWdnZXJGb3JEZWJ1Z2dpbmcobFZpZXdbVFZJRVddLCB0Tm9kZSwgJ3doZW4gPGV4cHJlc3Npb24+Jyk7XG4gIH1cbiAgaWYgKCFzaG91bGRBdHRhY2hUcmlnZ2VyKDAsIGxWaWV3LCB0Tm9kZSkpIHJldHVybjtcbiAgY29uc3QgYmluZGluZ0luZGV4ID0gbmV4dEJpbmRpbmdJbmRleCgpO1xuICBpZiAoYmluZGluZ1VwZGF0ZWQobFZpZXcsIGJpbmRpbmdJbmRleCwgcmF3VmFsdWUpKSB7XG4gICAgY29uc3QgcHJldkNvbnN1bWVyID0gc2V0QWN0aXZlQ29uc3VtZXIobnVsbCk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gQm9vbGVhbihyYXdWYWx1ZSk7XG4gICAgICBjb25zdCBsRGV0YWlscyA9IGdldExEZWZlckJsb2NrRGV0YWlscyhsVmlldywgdE5vZGUpO1xuICAgICAgY29uc3QgcmVuZGVyZWRTdGF0ZSA9IGxEZXRhaWxzW0RFRkVSX0JMT0NLX1NUQVRFXTtcbiAgICAgIGlmICh2YWx1ZSA9PT0gZmFsc2UgJiYgcmVuZGVyZWRTdGF0ZSA9PT0gRGVmZXJCbG9ja0ludGVybmFsU3RhdGUuSW5pdGlhbCkge1xuICAgICAgICByZW5kZXJQbGFjZWhvbGRlcihsVmlldywgdE5vZGUpO1xuICAgICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gdHJ1ZSAmJiAocmVuZGVyZWRTdGF0ZSA9PT0gRGVmZXJCbG9ja0ludGVybmFsU3RhdGUuSW5pdGlhbCB8fCByZW5kZXJlZFN0YXRlID09PSBEZWZlckJsb2NrU3RhdGUuUGxhY2Vob2xkZXIpKSB7XG4gICAgICAgIHRyaWdnZXJEZWZlckJsb2NrKDAsIGxWaWV3LCB0Tm9kZSk7XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNldEFjdGl2ZUNvbnN1bWVyKHByZXZDb25zdW1lcik7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiDJtcm1ZGVmZXJQcmVmZXRjaFdoZW4ocmF3VmFsdWUpIHtcbiAgY29uc3QgbFZpZXcgPSBnZXRMVmlldygpO1xuICBjb25zdCB0Tm9kZSA9IGdldFNlbGVjdGVkVE5vZGUoKTtcbiAgaWYgKG5nRGV2TW9kZSkge1xuICAgIHRyYWNrVHJpZ2dlckZvckRlYnVnZ2luZyhsVmlld1tUVklFV10sIHROb2RlLCAncHJlZmV0Y2ggd2hlbiA8ZXhwcmVzc2lvbj4nKTtcbiAgfVxuICBpZiAoIXNob3VsZEF0dGFjaFRyaWdnZXIoMSwgbFZpZXcsIHROb2RlKSkgcmV0dXJuO1xuICBjb25zdCBiaW5kaW5nSW5kZXggPSBuZXh0QmluZGluZ0luZGV4KCk7XG4gIGlmIChiaW5kaW5nVXBkYXRlZChsVmlldywgYmluZGluZ0luZGV4LCByYXdWYWx1ZSkpIHtcbiAgICBjb25zdCBwcmV2Q29uc3VtZXIgPSBzZXRBY3RpdmVDb25zdW1lcihudWxsKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdmFsdWUgPSBCb29sZWFuKHJhd1ZhbHVlKTtcbiAgICAgIGNvbnN0IHRWaWV3ID0gbFZpZXdbVFZJRVddO1xuICAgICAgY29uc3QgdERldGFpbHMgPSBnZXRURGVmZXJCbG9ja0RldGFpbHModFZpZXcsIHROb2RlKTtcbiAgICAgIGlmICh2YWx1ZSA9PT0gdHJ1ZSAmJiB0RGV0YWlscy5sb2FkaW5nU3RhdGUgPT09IERlZmVyRGVwZW5kZW5jaWVzTG9hZGluZ1N0YXRlLk5PVF9TVEFSVEVEKSB7XG4gICAgICAgIHRyaWdnZXJQcmVmZXRjaGluZyh0RGV0YWlscywgbFZpZXcsIHROb2RlKTtcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2V0QWN0aXZlQ29uc3VtZXIocHJldkNvbnN1bWVyKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIMm1ybVkZWZlckh5ZHJhdGVXaGVuKHJhd1ZhbHVlKSB7XG4gIGNvbnN0IGxWaWV3ID0gZ2V0TFZpZXcoKTtcbiAgY29uc3QgdE5vZGUgPSBnZXRTZWxlY3RlZFROb2RlKCk7XG4gIGlmIChuZ0Rldk1vZGUpIHtcbiAgICB0cmFja1RyaWdnZXJGb3JEZWJ1Z2dpbmcobFZpZXdbVFZJRVddLCB0Tm9kZSwgJ2h5ZHJhdGUgd2hlbiA8ZXhwcmVzc2lvbj4nKTtcbiAgfVxuICBpZiAoIXNob3VsZEF0dGFjaFRyaWdnZXIoMiwgbFZpZXcsIHROb2RlKSkgcmV0dXJuO1xuICBjb25zdCBiaW5kaW5nSW5kZXggPSBuZXh0QmluZGluZ0luZGV4KCk7XG4gIGNvbnN0IHRWaWV3ID0gZ2V0VFZpZXcoKTtcbiAgY29uc3QgaHlkcmF0ZVRyaWdnZXJzID0gZ2V0SHlkcmF0ZVRyaWdnZXJzKHRWaWV3LCB0Tm9kZSk7XG4gIGh5ZHJhdGVUcmlnZ2Vycy5zZXQoNiwgbnVsbCk7XG4gIGlmIChiaW5kaW5nVXBkYXRlZChsVmlldywgYmluZGluZ0luZGV4LCByYXdWYWx1ZSkpIHtcbiAgICBpZiAodHlwZW9mIG5nU2VydmVyTW9kZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbmdTZXJ2ZXJNb2RlKSB7XG4gICAgICB0cmlnZ2VyRGVmZXJCbG9jaygyLCBsVmlldywgdE5vZGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBpbmplY3RvciA9IGxWaWV3W0lOSkVDVE9SXTtcbiAgICAgIGNvbnN0IHByZXZDb25zdW1lciA9IHNldEFjdGl2ZUNvbnN1bWVyKG51bGwpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBCb29sZWFuKHJhd1ZhbHVlKTtcbiAgICAgICAgaWYgKHZhbHVlID09PSB0cnVlKSB7XG4gICAgICAgICAgY29uc3QgbERldGFpbHMgPSBnZXRMRGVmZXJCbG9ja0RldGFpbHMobFZpZXcsIHROb2RlKTtcbiAgICAgICAgICBjb25zdCBzc3JVbmlxdWVJZCA9IGxEZXRhaWxzW1NTUl9VTklRVUVfSURdO1xuICAgICAgICAgIG5nRGV2TW9kZSAmJiBhc3NlcnRTc3JJZERlZmluZWQoc3NyVW5pcXVlSWQpO1xuICAgICAgICAgIHRyaWdnZXJIeWRyYXRpb25Gcm9tQmxvY2tOYW1lKGluamVjdG9yLCBzc3JVbmlxdWVJZCk7XG4gICAgICAgIH1cbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHNldEFjdGl2ZUNvbnN1bWVyKHByZXZDb25zdW1lcik7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiDJtcm1ZGVmZXJIeWRyYXRlTmV2ZXIoKSB7XG4gIGNvbnN0IGxWaWV3ID0gZ2V0TFZpZXcoKTtcbiAgY29uc3QgdE5vZGUgPSBnZXRDdXJyZW50VE5vZGUoKTtcbiAgaWYgKG5nRGV2TW9kZSkge1xuICAgIHRyYWNrVHJpZ2dlckZvckRlYnVnZ2luZyhsVmlld1tUVklFV10sIHROb2RlLCAnaHlkcmF0ZSBuZXZlcicpO1xuICB9XG4gIGlmICghc2hvdWxkQXR0YWNoVHJpZ2dlcigyLCBsVmlldywgdE5vZGUpKSByZXR1cm47XG4gIGNvbnN0IGh5ZHJhdGVUcmlnZ2VycyA9IGdldEh5ZHJhdGVUcmlnZ2VycyhnZXRUVmlldygpLCB0Tm9kZSk7XG4gIGh5ZHJhdGVUcmlnZ2Vycy5zZXQoNywgbnVsbCk7XG4gIGlmICh0eXBlb2YgbmdTZXJ2ZXJNb2RlICE9PSAndW5kZWZpbmVkJyAmJiBuZ1NlcnZlck1vZGUpIHtcbiAgICB0cmlnZ2VyRGVmZXJCbG9jaygyLCBsVmlldywgdE5vZGUpO1xuICB9XG59XG5mdW5jdGlvbiDJtcm1ZGVmZXJPbklkbGUoKSB7XG4gIGNvbnN0IGxWaWV3ID0gZ2V0TFZpZXcoKTtcbiAgY29uc3QgdE5vZGUgPSBnZXRDdXJyZW50VE5vZGUoKTtcbiAgaWYgKG5nRGV2TW9kZSkge1xuICAgIHRyYWNrVHJpZ2dlckZvckRlYnVnZ2luZyhsVmlld1tUVklFV10sIHROb2RlLCAnb24gaWRsZScpO1xuICB9XG4gIGlmICghc2hvdWxkQXR0YWNoVHJpZ2dlcigwLCBsVmlldywgdE5vZGUpKSByZXR1cm47XG4gIHNjaGVkdWxlRGVsYXllZFRyaWdnZXIob25JZGxlKTtcbn1cbmZ1bmN0aW9uIMm1ybVkZWZlclByZWZldGNoT25JZGxlKCkge1xuICBjb25zdCBsVmlldyA9IGdldExWaWV3KCk7XG4gIGNvbnN0IHROb2RlID0gZ2V0Q3VycmVudFROb2RlKCk7XG4gIGlmIChuZ0Rldk1vZGUpIHtcbiAgICB0cmFja1RyaWdnZXJGb3JEZWJ1Z2dpbmcobFZpZXdbVFZJRVddLCB0Tm9kZSwgJ3ByZWZldGNoIG9uIGlkbGUnKTtcbiAgfVxuICBpZiAoIXNob3VsZEF0dGFjaFRyaWdnZXIoMSwgbFZpZXcsIHROb2RlKSkgcmV0dXJuO1xuICBzY2hlZHVsZURlbGF5ZWRQcmVmZXRjaGluZyhvbklkbGUpO1xufVxuZnVuY3Rpb24gybXJtWRlZmVySHlkcmF0ZU9uSWRsZSgpIHtcbiAgY29uc3QgbFZpZXcgPSBnZXRMVmlldygpO1xuICBjb25zdCB0Tm9kZSA9IGdldEN1cnJlbnRUTm9kZSgpO1xuICBpZiAobmdEZXZNb2RlKSB7XG4gICAgdHJhY2tUcmlnZ2VyRm9yRGVidWdnaW5nKGxWaWV3W1RWSUVXXSwgdE5vZGUsICdoeWRyYXRlIG9uIGlkbGUnKTtcbiAgfVxuICBpZiAoIXNob3VsZEF0dGFjaFRyaWdnZXIoMiwgbFZpZXcsIHROb2RlKSkgcmV0dXJuO1xuICBjb25zdCBoeWRyYXRlVHJpZ2dlcnMgPSBnZXRIeWRyYXRlVHJpZ2dlcnMoZ2V0VFZpZXcoKSwgdE5vZGUpO1xuICBoeWRyYXRlVHJpZ2dlcnMuc2V0KDAsIG51bGwpO1xuICBpZiAodHlwZW9mIG5nU2VydmVyTW9kZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbmdTZXJ2ZXJNb2RlKSB7XG4gICAgdHJpZ2dlckRlZmVyQmxvY2soMiwgbFZpZXcsIHROb2RlKTtcbiAgfSBlbHNlIHtcbiAgICBzY2hlZHVsZURlbGF5ZWRIeWRyYXRpbmcob25JZGxlLCBsVmlldywgdE5vZGUpO1xuICB9XG59XG5mdW5jdGlvbiDJtcm1ZGVmZXJPbkltbWVkaWF0ZSgpIHtcbiAgY29uc3QgbFZpZXcgPSBnZXRMVmlldygpO1xuICBjb25zdCB0Tm9kZSA9IGdldEN1cnJlbnRUTm9kZSgpO1xuICBpZiAobmdEZXZNb2RlKSB7XG4gICAgdHJhY2tUcmlnZ2VyRm9yRGVidWdnaW5nKGxWaWV3W1RWSUVXXSwgdE5vZGUsICdvbiBpbW1lZGlhdGUnKTtcbiAgfVxuICBpZiAoIXNob3VsZEF0dGFjaFRyaWdnZXIoMCwgbFZpZXcsIHROb2RlKSkgcmV0dXJuO1xuICBjb25zdCB0RGV0YWlscyA9IGdldFREZWZlckJsb2NrRGV0YWlscyhsVmlld1tUVklFV10sIHROb2RlKTtcbiAgaWYgKHREZXRhaWxzLmxvYWRpbmdUbXBsSW5kZXggPT09IG51bGwpIHtcbiAgICByZW5kZXJQbGFjZWhvbGRlcihsVmlldywgdE5vZGUpO1xuICB9XG4gIHRyaWdnZXJEZWZlckJsb2NrKDAsIGxWaWV3LCB0Tm9kZSk7XG59XG5mdW5jdGlvbiDJtcm1ZGVmZXJQcmVmZXRjaE9uSW1tZWRpYXRlKCkge1xuICBjb25zdCBsVmlldyA9IGdldExWaWV3KCk7XG4gIGNvbnN0IHROb2RlID0gZ2V0Q3VycmVudFROb2RlKCk7XG4gIGlmIChuZ0Rldk1vZGUpIHtcbiAgICB0cmFja1RyaWdnZXJGb3JEZWJ1Z2dpbmcobFZpZXdbVFZJRVddLCB0Tm9kZSwgJ3ByZWZldGNoIG9uIGltbWVkaWF0ZScpO1xuICB9XG4gIGlmICghc2hvdWxkQXR0YWNoVHJpZ2dlcigxLCBsVmlldywgdE5vZGUpKSByZXR1cm47XG4gIGNvbnN0IHRWaWV3ID0gbFZpZXdbVFZJRVddO1xuICBjb25zdCB0RGV0YWlscyA9IGdldFREZWZlckJsb2NrRGV0YWlscyh0VmlldywgdE5vZGUpO1xuICBpZiAodERldGFpbHMubG9hZGluZ1N0YXRlID09PSBEZWZlckRlcGVuZGVuY2llc0xvYWRpbmdTdGF0ZS5OT1RfU1RBUlRFRCkge1xuICAgIHRyaWdnZXJSZXNvdXJjZUxvYWRpbmcodERldGFpbHMsIGxWaWV3LCB0Tm9kZSk7XG4gIH1cbn1cbmZ1bmN0aW9uIMm1ybVkZWZlckh5ZHJhdGVPbkltbWVkaWF0ZSgpIHtcbiAgY29uc3QgbFZpZXcgPSBnZXRMVmlldygpO1xuICBjb25zdCB0Tm9kZSA9IGdldEN1cnJlbnRUTm9kZSgpO1xuICBpZiAobmdEZXZNb2RlKSB7XG4gICAgdHJhY2tUcmlnZ2VyRm9yRGVidWdnaW5nKGxWaWV3W1RWSUVXXSwgdE5vZGUsICdoeWRyYXRlIG9uIGltbWVkaWF0ZScpO1xuICB9XG4gIGlmICghc2hvdWxkQXR0YWNoVHJpZ2dlcigyLCBsVmlldywgdE5vZGUpKSByZXR1cm47XG4gIGNvbnN0IGh5ZHJhdGVUcmlnZ2VycyA9IGdldEh5ZHJhdGVUcmlnZ2VycyhnZXRUVmlldygpLCB0Tm9kZSk7XG4gIGh5ZHJhdGVUcmlnZ2Vycy5zZXQoMSwgbnVsbCk7XG4gIGlmICh0eXBlb2YgbmdTZXJ2ZXJNb2RlICE9PSAndW5kZWZpbmVkJyAmJiBuZ1NlcnZlck1vZGUpIHtcbiAgICB0cmlnZ2VyRGVmZXJCbG9jaygyLCBsVmlldywgdE5vZGUpO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGluamVjdG9yID0gbFZpZXdbSU5KRUNUT1JdO1xuICAgIGNvbnN0IGxEZXRhaWxzID0gZ2V0TERlZmVyQmxvY2tEZXRhaWxzKGxWaWV3LCB0Tm9kZSk7XG4gICAgY29uc3Qgc3NyVW5pcXVlSWQgPSBsRGV0YWlsc1tTU1JfVU5JUVVFX0lEXTtcbiAgICBuZ0Rldk1vZGUgJiYgYXNzZXJ0U3NySWREZWZpbmVkKHNzclVuaXF1ZUlkKTtcbiAgICB0cmlnZ2VySHlkcmF0aW9uRnJvbUJsb2NrTmFtZShpbmplY3Rvciwgc3NyVW5pcXVlSWQpO1xuICB9XG59XG5mdW5jdGlvbiDJtcm1ZGVmZXJPblRpbWVyKGRlbGF5KSB7XG4gIGNvbnN0IGxWaWV3ID0gZ2V0TFZpZXcoKTtcbiAgY29uc3QgdE5vZGUgPSBnZXRDdXJyZW50VE5vZGUoKTtcbiAgaWYgKG5nRGV2TW9kZSkge1xuICAgIHRyYWNrVHJpZ2dlckZvckRlYnVnZ2luZyhsVmlld1tUVklFV10sIHROb2RlLCBgb24gdGltZXIoJHtkZWxheX1tcylgKTtcbiAgfVxuICBpZiAoIXNob3VsZEF0dGFjaFRyaWdnZXIoMCwgbFZpZXcsIHROb2RlKSkgcmV0dXJuO1xuICBzY2hlZHVsZURlbGF5ZWRUcmlnZ2VyKG9uVGltZXIoZGVsYXkpKTtcbn1cbmZ1bmN0aW9uIMm1ybVkZWZlclByZWZldGNoT25UaW1lcihkZWxheSkge1xuICBjb25zdCBsVmlldyA9IGdldExWaWV3KCk7XG4gIGNvbnN0IHROb2RlID0gZ2V0Q3VycmVudFROb2RlKCk7XG4gIGlmIChuZ0Rldk1vZGUpIHtcbiAgICB0cmFja1RyaWdnZXJGb3JEZWJ1Z2dpbmcobFZpZXdbVFZJRVddLCB0Tm9kZSwgYHByZWZldGNoIG9uIHRpbWVyKCR7ZGVsYXl9bXMpYCk7XG4gIH1cbiAgaWYgKCFzaG91bGRBdHRhY2hUcmlnZ2VyKDEsIGxWaWV3LCB0Tm9kZSkpIHJldHVybjtcbiAgc2NoZWR1bGVEZWxheWVkUHJlZmV0Y2hpbmcob25UaW1lcihkZWxheSkpO1xufVxuZnVuY3Rpb24gybXJtWRlZmVySHlkcmF0ZU9uVGltZXIoZGVsYXkpIHtcbiAgY29uc3QgbFZpZXcgPSBnZXRMVmlldygpO1xuICBjb25zdCB0Tm9kZSA9IGdldEN1cnJlbnRUTm9kZSgpO1xuICBpZiAobmdEZXZNb2RlKSB7XG4gICAgdHJhY2tUcmlnZ2VyRm9yRGVidWdnaW5nKGxWaWV3W1RWSUVXXSwgdE5vZGUsIGBoeWRyYXRlIG9uIHRpbWVyKCR7ZGVsYXl9bXMpYCk7XG4gIH1cbiAgaWYgKCFzaG91bGRBdHRhY2hUcmlnZ2VyKDIsIGxWaWV3LCB0Tm9kZSkpIHJldHVybjtcbiAgY29uc3QgaHlkcmF0ZVRyaWdnZXJzID0gZ2V0SHlkcmF0ZVRyaWdnZXJzKGdldFRWaWV3KCksIHROb2RlKTtcbiAgaHlkcmF0ZVRyaWdnZXJzLnNldCg1LCB7XG4gICAgdHlwZTogNSxcbiAgICBkZWxheVxuICB9KTtcbiAgaWYgKHR5cGVvZiBuZ1NlcnZlck1vZGUgIT09ICd1bmRlZmluZWQnICYmIG5nU2VydmVyTW9kZSkge1xuICAgIHRyaWdnZXJEZWZlckJsb2NrKDIsIGxWaWV3LCB0Tm9kZSk7XG4gIH0gZWxzZSB7XG4gICAgc2NoZWR1bGVEZWxheWVkSHlkcmF0aW5nKG9uVGltZXIoZGVsYXkpLCBsVmlldywgdE5vZGUpO1xuICB9XG59XG5mdW5jdGlvbiDJtcm1ZGVmZXJPbkhvdmVyKHRyaWdnZXJJbmRleCwgd2Fsa1VwVGltZXMpIHtcbiAgY29uc3QgbFZpZXcgPSBnZXRMVmlldygpO1xuICBjb25zdCB0Tm9kZSA9IGdldEN1cnJlbnRUTm9kZSgpO1xuICBpZiAobmdEZXZNb2RlKSB7XG4gICAgdHJhY2tUcmlnZ2VyRm9yRGVidWdnaW5nKGxWaWV3W1RWSUVXXSwgdE5vZGUsIGBvbiBob3ZlciR7d2Fsa1VwVGltZXMgPT09IC0xID8gJycgOiAnKDx0YXJnZXQ+KSd9YCk7XG4gIH1cbiAgaWYgKCFzaG91bGRBdHRhY2hUcmlnZ2VyKDAsIGxWaWV3LCB0Tm9kZSkpIHJldHVybjtcbiAgcmVuZGVyUGxhY2Vob2xkZXIobFZpZXcsIHROb2RlKTtcbiAgaWYgKCEodHlwZW9mIG5nU2VydmVyTW9kZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbmdTZXJ2ZXJNb2RlKSkge1xuICAgIHJlZ2lzdGVyRG9tVHJpZ2dlcihsVmlldywgdE5vZGUsIHRyaWdnZXJJbmRleCwgd2Fsa1VwVGltZXMsIG9uSG92ZXIsICgpID0+IHRyaWdnZXJEZWZlckJsb2NrKDAsIGxWaWV3LCB0Tm9kZSksIDApO1xuICB9XG59XG5mdW5jdGlvbiDJtcm1ZGVmZXJQcmVmZXRjaE9uSG92ZXIodHJpZ2dlckluZGV4LCB3YWxrVXBUaW1lcykge1xuICBjb25zdCBsVmlldyA9IGdldExWaWV3KCk7XG4gIGNvbnN0IHROb2RlID0gZ2V0Q3VycmVudFROb2RlKCk7XG4gIGlmIChuZ0Rldk1vZGUpIHtcbiAgICB0cmFja1RyaWdnZXJGb3JEZWJ1Z2dpbmcobFZpZXdbVFZJRVddLCB0Tm9kZSwgYHByZWZldGNoIG9uIGhvdmVyJHt3YWxrVXBUaW1lcyA9PT0gLTEgPyAnJyA6ICcoPHRhcmdldD4pJ31gKTtcbiAgfVxuICBpZiAoIXNob3VsZEF0dGFjaFRyaWdnZXIoMSwgbFZpZXcsIHROb2RlKSkgcmV0dXJuO1xuICBjb25zdCB0VmlldyA9IGxWaWV3W1RWSUVXXTtcbiAgY29uc3QgdERldGFpbHMgPSBnZXRURGVmZXJCbG9ja0RldGFpbHModFZpZXcsIHROb2RlKTtcbiAgaWYgKHREZXRhaWxzLmxvYWRpbmdTdGF0ZSA9PT0gRGVmZXJEZXBlbmRlbmNpZXNMb2FkaW5nU3RhdGUuTk9UX1NUQVJURUQpIHtcbiAgICByZWdpc3RlckRvbVRyaWdnZXIobFZpZXcsIHROb2RlLCB0cmlnZ2VySW5kZXgsIHdhbGtVcFRpbWVzLCBvbkhvdmVyLCAoKSA9PiB0cmlnZ2VyUHJlZmV0Y2hpbmcodERldGFpbHMsIGxWaWV3LCB0Tm9kZSksIDEpO1xuICB9XG59XG5mdW5jdGlvbiDJtcm1ZGVmZXJIeWRyYXRlT25Ib3ZlcigpIHtcbiAgY29uc3QgbFZpZXcgPSBnZXRMVmlldygpO1xuICBjb25zdCB0Tm9kZSA9IGdldEN1cnJlbnRUTm9kZSgpO1xuICBpZiAobmdEZXZNb2RlKSB7XG4gICAgdHJhY2tUcmlnZ2VyRm9yRGVidWdnaW5nKGxWaWV3W1RWSUVXXSwgdE5vZGUsICdoeWRyYXRlIG9uIGhvdmVyJyk7XG4gIH1cbiAgaWYgKCFzaG91bGRBdHRhY2hUcmlnZ2VyKDIsIGxWaWV3LCB0Tm9kZSkpIHJldHVybjtcbiAgY29uc3QgaHlkcmF0ZVRyaWdnZXJzID0gZ2V0SHlkcmF0ZVRyaWdnZXJzKGdldFRWaWV3KCksIHROb2RlKTtcbiAgaHlkcmF0ZVRyaWdnZXJzLnNldCg0LCBudWxsKTtcbiAgaWYgKHR5cGVvZiBuZ1NlcnZlck1vZGUgIT09ICd1bmRlZmluZWQnICYmIG5nU2VydmVyTW9kZSkge1xuICAgIHRyaWdnZXJEZWZlckJsb2NrKDIsIGxWaWV3LCB0Tm9kZSk7XG4gIH1cbn1cbmZ1bmN0aW9uIMm1ybVkZWZlck9uSW50ZXJhY3Rpb24odHJpZ2dlckluZGV4LCB3YWxrVXBUaW1lcykge1xuICBjb25zdCBsVmlldyA9IGdldExWaWV3KCk7XG4gIGNvbnN0IHROb2RlID0gZ2V0Q3VycmVudFROb2RlKCk7XG4gIGlmIChuZ0Rldk1vZGUpIHtcbiAgICB0cmFja1RyaWdnZXJGb3JEZWJ1Z2dpbmcobFZpZXdbVFZJRVddLCB0Tm9kZSwgYG9uIGludGVyYWN0aW9uJHt3YWxrVXBUaW1lcyA9PT0gLTEgPyAnJyA6ICcoPHRhcmdldD4pJ31gKTtcbiAgfVxuICBpZiAoIXNob3VsZEF0dGFjaFRyaWdnZXIoMCwgbFZpZXcsIHROb2RlKSkgcmV0dXJuO1xuICByZW5kZXJQbGFjZWhvbGRlcihsVmlldywgdE5vZGUpO1xuICBpZiAoISh0eXBlb2YgbmdTZXJ2ZXJNb2RlICE9PSAndW5kZWZpbmVkJyAmJiBuZ1NlcnZlck1vZGUpKSB7XG4gICAgcmVnaXN0ZXJEb21UcmlnZ2VyKGxWaWV3LCB0Tm9kZSwgdHJpZ2dlckluZGV4LCB3YWxrVXBUaW1lcywgb25JbnRlcmFjdGlvbiwgKCkgPT4gdHJpZ2dlckRlZmVyQmxvY2soMCwgbFZpZXcsIHROb2RlKSwgMCk7XG4gIH1cbn1cbmZ1bmN0aW9uIMm1ybVkZWZlclByZWZldGNoT25JbnRlcmFjdGlvbih0cmlnZ2VySW5kZXgsIHdhbGtVcFRpbWVzKSB7XG4gIGNvbnN0IGxWaWV3ID0gZ2V0TFZpZXcoKTtcbiAgY29uc3QgdE5vZGUgPSBnZXRDdXJyZW50VE5vZGUoKTtcbiAgaWYgKG5nRGV2TW9kZSkge1xuICAgIHRyYWNrVHJpZ2dlckZvckRlYnVnZ2luZyhsVmlld1tUVklFV10sIHROb2RlLCBgcHJlZmV0Y2ggb24gaW50ZXJhY3Rpb24ke3dhbGtVcFRpbWVzID09PSAtMSA/ICcnIDogJyg8dGFyZ2V0PiknfWApO1xuICB9XG4gIGlmICghc2hvdWxkQXR0YWNoVHJpZ2dlcigxLCBsVmlldywgdE5vZGUpKSByZXR1cm47XG4gIGNvbnN0IHRWaWV3ID0gbFZpZXdbVFZJRVddO1xuICBjb25zdCB0RGV0YWlscyA9IGdldFREZWZlckJsb2NrRGV0YWlscyh0VmlldywgdE5vZGUpO1xuICBpZiAodERldGFpbHMubG9hZGluZ1N0YXRlID09PSBEZWZlckRlcGVuZGVuY2llc0xvYWRpbmdTdGF0ZS5OT1RfU1RBUlRFRCkge1xuICAgIHJlZ2lzdGVyRG9tVHJpZ2dlcihsVmlldywgdE5vZGUsIHRyaWdnZXJJbmRleCwgd2Fsa1VwVGltZXMsIG9uSW50ZXJhY3Rpb24sICgpID0+IHRyaWdnZXJQcmVmZXRjaGluZyh0RGV0YWlscywgbFZpZXcsIHROb2RlKSwgMSk7XG4gIH1cbn1cbmZ1bmN0aW9uIMm1ybVkZWZlckh5ZHJhdGVPbkludGVyYWN0aW9uKCkge1xuICBjb25zdCBsVmlldyA9IGdldExWaWV3KCk7XG4gIGNvbnN0IHROb2RlID0gZ2V0Q3VycmVudFROb2RlKCk7XG4gIGlmIChuZ0Rldk1vZGUpIHtcbiAgICB0cmFja1RyaWdnZXJGb3JEZWJ1Z2dpbmcobFZpZXdbVFZJRVddLCB0Tm9kZSwgJ2h5ZHJhdGUgb24gaW50ZXJhY3Rpb24nKTtcbiAgfVxuICBpZiAoIXNob3VsZEF0dGFjaFRyaWdnZXIoMiwgbFZpZXcsIHROb2RlKSkgcmV0dXJuO1xuICBjb25zdCBoeWRyYXRlVHJpZ2dlcnMgPSBnZXRIeWRyYXRlVHJpZ2dlcnMoZ2V0VFZpZXcoKSwgdE5vZGUpO1xuICBoeWRyYXRlVHJpZ2dlcnMuc2V0KDMsIG51bGwpO1xuICBpZiAodHlwZW9mIG5nU2VydmVyTW9kZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbmdTZXJ2ZXJNb2RlKSB7XG4gICAgdHJpZ2dlckRlZmVyQmxvY2soMiwgbFZpZXcsIHROb2RlKTtcbiAgfVxufVxuZnVuY3Rpb24gybXJtWRlZmVyT25WaWV3cG9ydCh0cmlnZ2VySW5kZXgsIHdhbGtVcFRpbWVzLCBvcHRpb25zKSB7XG4gIGNvbnN0IGxWaWV3ID0gZ2V0TFZpZXcoKTtcbiAgY29uc3QgdE5vZGUgPSBnZXRDdXJyZW50VE5vZGUoKTtcbiAgaWYgKG5nRGV2TW9kZSkge1xuICAgIGNvbnN0IGFyZ3MgPSBbXTtcbiAgICBpZiAod2Fsa1VwVGltZXMgIT09IHVuZGVmaW5lZCAmJiB3YWxrVXBUaW1lcyAhPT0gLTEpIHtcbiAgICAgIGFyZ3MucHVzaCgnPHRhcmdldD4nKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgIGFyZ3MucHVzaChKU09OLnN0cmluZ2lmeShvcHRpb25zKSk7XG4gICAgfVxuICAgIHRyYWNrVHJpZ2dlckZvckRlYnVnZ2luZyhsVmlld1tUVklFV10sIHROb2RlLCBgb24gdmlld3BvcnQke2FyZ3MubGVuZ3RoID09PSAwID8gJycgOiBgKCR7YXJncy5qb2luKCcsICcpfSlgfWApO1xuICB9XG4gIGlmICghc2hvdWxkQXR0YWNoVHJpZ2dlcigwLCBsVmlldywgdE5vZGUpKSByZXR1cm47XG4gIHJlbmRlclBsYWNlaG9sZGVyKGxWaWV3LCB0Tm9kZSk7XG4gIGlmICghKHR5cGVvZiBuZ1NlcnZlck1vZGUgIT09ICd1bmRlZmluZWQnICYmIG5nU2VydmVyTW9kZSkpIHtcbiAgICByZWdpc3RlckRvbVRyaWdnZXIobFZpZXcsIHROb2RlLCB0cmlnZ2VySW5kZXgsIHdhbGtVcFRpbWVzLCBvblZpZXdwb3J0V3JhcHBlciwgKCkgPT4gdHJpZ2dlckRlZmVyQmxvY2soMCwgbFZpZXcsIHROb2RlKSwgMCwgb3B0aW9ucyk7XG4gIH1cbn1cbmZ1bmN0aW9uIMm1ybVkZWZlclByZWZldGNoT25WaWV3cG9ydCh0cmlnZ2VySW5kZXgsIHdhbGtVcFRpbWVzLCBvcHRpb25zKSB7XG4gIGNvbnN0IGxWaWV3ID0gZ2V0TFZpZXcoKTtcbiAgY29uc3QgdE5vZGUgPSBnZXRDdXJyZW50VE5vZGUoKTtcbiAgaWYgKG5nRGV2TW9kZSkge1xuICAgIGNvbnN0IGFyZ3MgPSBbXTtcbiAgICBpZiAod2Fsa1VwVGltZXMgIT09IHVuZGVmaW5lZCAmJiB3YWxrVXBUaW1lcyAhPT0gLTEpIHtcbiAgICAgIGFyZ3MucHVzaCgnPHRhcmdldD4nKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgIGFyZ3MucHVzaChKU09OLnN0cmluZ2lmeShvcHRpb25zKSk7XG4gICAgfVxuICAgIHRyYWNrVHJpZ2dlckZvckRlYnVnZ2luZyhsVmlld1tUVklFV10sIHROb2RlLCBgcHJlZmV0Y2ggb24gdmlld3BvcnQke2FyZ3MubGVuZ3RoID09PSAwID8gJycgOiBgKCR7YXJncy5qb2luKCcsICcpfSlgfWApO1xuICB9XG4gIGlmICghc2hvdWxkQXR0YWNoVHJpZ2dlcigxLCBsVmlldywgdE5vZGUpKSByZXR1cm47XG4gIGNvbnN0IHRWaWV3ID0gbFZpZXdbVFZJRVddO1xuICBjb25zdCB0RGV0YWlscyA9IGdldFREZWZlckJsb2NrRGV0YWlscyh0VmlldywgdE5vZGUpO1xuICBpZiAodERldGFpbHMubG9hZGluZ1N0YXRlID09PSBEZWZlckRlcGVuZGVuY2llc0xvYWRpbmdTdGF0ZS5OT1RfU1RBUlRFRCkge1xuICAgIHJlZ2lzdGVyRG9tVHJpZ2dlcihsVmlldywgdE5vZGUsIHRyaWdnZXJJbmRleCwgd2Fsa1VwVGltZXMsIG9uVmlld3BvcnRXcmFwcGVyLCAoKSA9PiB0cmlnZ2VyUHJlZmV0Y2hpbmcodERldGFpbHMsIGxWaWV3LCB0Tm9kZSksIDEsIG9wdGlvbnMpO1xuICB9XG59XG5mdW5jdGlvbiDJtcm1ZGVmZXJIeWRyYXRlT25WaWV3cG9ydChvcHRpb25zKSB7XG4gIGNvbnN0IGxWaWV3ID0gZ2V0TFZpZXcoKTtcbiAgY29uc3QgdE5vZGUgPSBnZXRDdXJyZW50VE5vZGUoKTtcbiAgaWYgKG5nRGV2TW9kZSkge1xuICAgIHRyYWNrVHJpZ2dlckZvckRlYnVnZ2luZyhsVmlld1tUVklFV10sIHROb2RlLCBgaHlkcmF0ZSBvbiB2aWV3cG9ydCR7b3B0aW9ucyA/IGAoJHtKU09OLnN0cmluZ2lmeShvcHRpb25zKX0pYCA6ICcnfWApO1xuICB9XG4gIGlmICghc2hvdWxkQXR0YWNoVHJpZ2dlcigyLCBsVmlldywgdE5vZGUpKSByZXR1cm47XG4gIGNvbnN0IGh5ZHJhdGVUcmlnZ2VycyA9IGdldEh5ZHJhdGVUcmlnZ2VycyhnZXRUVmlldygpLCB0Tm9kZSk7XG4gIGh5ZHJhdGVUcmlnZ2Vycy5zZXQoMiwgb3B0aW9ucyA/IHtcbiAgICB0eXBlOiAyLFxuICAgIGludGVyc2VjdGlvbk9ic2VydmVyT3B0aW9uczogb3B0aW9uc1xuICB9IDogbnVsbCk7XG4gIGlmICh0eXBlb2YgbmdTZXJ2ZXJNb2RlICE9PSAndW5kZWZpbmVkJyAmJiBuZ1NlcnZlck1vZGUpIHtcbiAgICB0cmlnZ2VyRGVmZXJCbG9jaygyLCBsVmlldywgdE5vZGUpO1xuICB9XG59XG5mdW5jdGlvbiDJtcm1YXJpYVByb3BlcnR5KG5hbWUsIHZhbHVlKSB7XG4gIGNvbnN0IGxWaWV3ID0gZ2V0TFZpZXcoKTtcbiAgY29uc3QgYmluZGluZ0luZGV4ID0gbmV4dEJpbmRpbmdJbmRleCgpO1xuICBpZiAoYmluZGluZ1VwZGF0ZWQobFZpZXcsIGJpbmRpbmdJbmRleCwgdmFsdWUpKSB7XG4gICAgY29uc3QgdFZpZXcgPSBnZXRUVmlldygpO1xuICAgIGNvbnN0IHROb2RlID0gZ2V0U2VsZWN0ZWRUTm9kZSgpO1xuICAgIGNvbnN0IGhhc1NldElucHV0ID0gc2V0QWxsSW5wdXRzRm9yUHJvcGVydHkodE5vZGUsIHRWaWV3LCBsVmlldywgbmFtZSwgdmFsdWUpO1xuICAgIGlmIChoYXNTZXRJbnB1dCkge1xuICAgICAgaXNDb21wb25lbnRIb3N0KHROb2RlKSAmJiBtYXJrRGlydHlJZk9uUHVzaChsVmlldywgdE5vZGUuaW5kZXgpO1xuICAgICAgbmdEZXZNb2RlICYmIHNldE5nUmVmbGVjdFByb3BlcnRpZXMobFZpZXcsIHRWaWV3LCB0Tm9kZSwgbmFtZSwgdmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZ0Rldk1vZGUgJiYgYXNzZXJ0VE5vZGVUeXBlKHROb2RlLCAyKTtcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSBnZXROYXRpdmVCeVROb2RlKHROb2RlLCBsVmlldyk7XG4gICAgICBzZXRFbGVtZW50QXR0cmlidXRlKGxWaWV3W1JFTkRFUkVSXSwgZWxlbWVudCwgbnVsbCwgdE5vZGUudmFsdWUsIG5hbWUsIHZhbHVlLCBudWxsKTtcbiAgICB9XG4gICAgbmdEZXZNb2RlICYmIHN0b3JlUHJvcGVydHlCaW5kaW5nTWV0YWRhdGEodFZpZXcuZGF0YSwgdE5vZGUsIG5hbWUsIGJpbmRpbmdJbmRleCk7XG4gIH1cbiAgcmV0dXJuIMm1ybVhcmlhUHJvcGVydHk7XG59XG5mdW5jdGlvbiDJtcm1YXR0cmlidXRlKG5hbWUsIHZhbHVlLCBzYW5pdGl6ZXIsIG5hbWVzcGFjZSkge1xuICBjb25zdCBsVmlldyA9IGdldExWaWV3KCk7XG4gIGNvbnN0IGJpbmRpbmdJbmRleCA9IG5leHRCaW5kaW5nSW5kZXgoKTtcbiAgaWYgKGJpbmRpbmdVcGRhdGVkKGxWaWV3LCBiaW5kaW5nSW5kZXgsIHZhbHVlKSkge1xuICAgIGNvbnN0IHRWaWV3ID0gZ2V0VFZpZXcoKTtcbiAgICBjb25zdCB0Tm9kZSA9IGdldFNlbGVjdGVkVE5vZGUoKTtcbiAgICBlbGVtZW50QXR0cmlidXRlSW50ZXJuYWwodE5vZGUsIGxWaWV3LCBuYW1lLCB2YWx1ZSwgc2FuaXRpemVyLCBuYW1lc3BhY2UpO1xuICAgIG5nRGV2TW9kZSAmJiBzdG9yZVByb3BlcnR5QmluZGluZ01ldGFkYXRhKHRWaWV3LmRhdGEsIHROb2RlLCAnYXR0ci4nICsgbmFtZSwgYmluZGluZ0luZGV4KTtcbiAgfVxuICByZXR1cm4gybXJtWF0dHJpYnV0ZTtcbn1cbmZ1bmN0aW9uIMm1ybVhbmltYXRlRW50ZXIodmFsdWUpIHtcbiAgcGVyZm9ybWFuY2VNYXJrRmVhdHVyZSgnTmdBbmltYXRlRW50ZXInKTtcbiAgaWYgKHR5cGVvZiBuZ1NlcnZlck1vZGUgIT09ICd1bmRlZmluZWQnICYmIG5nU2VydmVyTW9kZSB8fCAhYXJlQW5pbWF0aW9uU3VwcG9ydGVkKSB7XG4gICAgcmV0dXJuIMm1ybVhbmltYXRlRW50ZXI7XG4gIH1cbiAgbmdEZXZNb2RlICYmIGFzc2VydEFuaW1hdGlvblR5cGVzKHZhbHVlLCAnYW5pbWF0ZS5lbnRlcicpO1xuICBjb25zdCBsVmlldyA9IGdldExWaWV3KCk7XG4gIGlmIChhcmVBbmltYXRpb25zRGlzYWJsZWQobFZpZXcpKSB7XG4gICAgcmV0dXJuIMm1ybVhbmltYXRlRW50ZXI7XG4gIH1cbiAgY29uc3QgdE5vZGUgPSBnZXRDdXJyZW50VE5vZGUoKTtcbiAgY29uc3Qgbmdab25lID0gbFZpZXdbSU5KRUNUT1JdLmdldChOZ1pvbmUpO1xuICBhZGRBbmltYXRpb25Ub0xWaWV3KGdldExWaWV3RW50ZXJBbmltYXRpb25zKGxWaWV3KSwgdE5vZGUsICgpID0+IHJ1bkVudGVyQW5pbWF0aW9uKGxWaWV3LCB0Tm9kZSwgdmFsdWUsIG5nWm9uZSkpO1xuICBpbml0aWFsaXplQW5pbWF0aW9uUXVldWVTY2hlZHVsZXIobFZpZXdbSU5KRUNUT1JdKTtcbiAgcXVldWVFbnRlckFuaW1hdGlvbnMobFZpZXdbSU5KRUNUT1JdLCBnZXRMVmlld0VudGVyQW5pbWF0aW9ucyhsVmlldykpO1xuICByZXR1cm4gybXJtWFuaW1hdGVFbnRlcjtcbn1cbmZ1bmN0aW9uIHJ1bkVudGVyQW5pbWF0aW9uKGxWaWV3LCB0Tm9kZSwgdmFsdWUsIG5nWm9uZSkge1xuICBjb25zdCBuYXRpdmVFbGVtZW50ID0gZ2V0TmF0aXZlQnlUTm9kZSh0Tm9kZSwgbFZpZXcpO1xuICBuZ0Rldk1vZGUgJiYgYXNzZXJ0RWxlbWVudE5vZGVzKG5hdGl2ZUVsZW1lbnQsICdhbmltYXRlLmVudGVyJyk7XG4gIGNvbnN0IHJlbmRlcmVyID0gbFZpZXdbUkVOREVSRVJdO1xuICBjb25zdCBhY3RpdmVDbGFzc2VzID0gZ2V0Q2xhc3NMaXN0RnJvbVZhbHVlKHZhbHVlKTtcbiAgY29uc3QgY2xlYW51cEZucyA9IFtdO1xuICBsZXQgaGFzQ29tcGxldGVkID0gZmFsc2U7XG4gIGNvbnN0IGhhbmRsZUVudGVyQW5pbWF0aW9uU3RhcnQgPSBldmVudCA9PiB7XG4gICAgaWYgKGdldEV2ZW50VGFyZ2V0KGV2ZW50KSAhPT0gbmF0aXZlRWxlbWVudCkgcmV0dXJuO1xuICAgIGNvbnN0IGV2ZW50TmFtZSA9IGV2ZW50IGluc3RhbmNlb2YgQW5pbWF0aW9uRXZlbnQgPyAnYW5pbWF0aW9uZW5kJyA6ICd0cmFuc2l0aW9uZW5kJztcbiAgICBuZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgcmVuZGVyZXIubGlzdGVuKG5hdGl2ZUVsZW1lbnQsIGV2ZW50TmFtZSwgaGFuZGxlRW50ZXJBbmltYXRpb25FbmQpO1xuICAgIH0pO1xuICB9O1xuICBjb25zdCBoYW5kbGVFbnRlckFuaW1hdGlvbkVuZCA9IGV2ZW50ID0+IHtcbiAgICBpZiAoZ2V0RXZlbnRUYXJnZXQoZXZlbnQpICE9PSBuYXRpdmVFbGVtZW50KSByZXR1cm47XG4gICAgaWYgKGlzTG9uZ2VzdEFuaW1hdGlvbihldmVudCwgbmF0aXZlRWxlbWVudCkpIHtcbiAgICAgIGhhc0NvbXBsZXRlZCA9IHRydWU7XG4gICAgfVxuICAgIGVudGVyQW5pbWF0aW9uRW5kKGV2ZW50LCBuYXRpdmVFbGVtZW50LCByZW5kZXJlcik7XG4gIH07XG4gIGlmIChhY3RpdmVDbGFzc2VzICYmIGFjdGl2ZUNsYXNzZXMubGVuZ3RoID4gMCkge1xuICAgIG5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICBjbGVhbnVwRm5zLnB1c2gocmVuZGVyZXIubGlzdGVuKG5hdGl2ZUVsZW1lbnQsICdhbmltYXRpb25zdGFydCcsIGhhbmRsZUVudGVyQW5pbWF0aW9uU3RhcnQpKTtcbiAgICAgIGNsZWFudXBGbnMucHVzaChyZW5kZXJlci5saXN0ZW4obmF0aXZlRWxlbWVudCwgJ3RyYW5zaXRpb25zdGFydCcsIGhhbmRsZUVudGVyQW5pbWF0aW9uU3RhcnQpKTtcbiAgICB9KTtcbiAgICB0cmFja0VudGVyQ2xhc3NlcyhuYXRpdmVFbGVtZW50LCBhY3RpdmVDbGFzc2VzLCBjbGVhbnVwRm5zKTtcbiAgICBmb3IgKGNvbnN0IGtsYXNzIG9mIGFjdGl2ZUNsYXNzZXMpIHtcbiAgICAgIHJlbmRlcmVyLmFkZENsYXNzKG5hdGl2ZUVsZW1lbnQsIGtsYXNzKTtcbiAgICB9XG4gICAgbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgIGlmIChoYXNDb21wbGV0ZWQpIHJldHVybjtcbiAgICAgICAgZGV0ZXJtaW5lTG9uZ2VzdEFuaW1hdGlvbihuYXRpdmVFbGVtZW50LCBsb25nZXN0QW5pbWF0aW9ucywgYXJlQW5pbWF0aW9uU3VwcG9ydGVkKTtcbiAgICAgICAgaWYgKCFsb25nZXN0QW5pbWF0aW9ucy5oYXMobmF0aXZlRWxlbWVudCkpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IGtsYXNzIG9mIGFjdGl2ZUNsYXNzZXMpIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLnJlbW92ZUNsYXNzKG5hdGl2ZUVsZW1lbnQsIGtsYXNzKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2xlYW51cEVudGVyQ2xhc3NEYXRhKG5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxufVxuZnVuY3Rpb24gZW50ZXJBbmltYXRpb25FbmQoZXZlbnQsIG5hdGl2ZUVsZW1lbnQsIHJlbmRlcmVyKSB7XG4gIGNvbnN0IGVsZW1lbnREYXRhID0gZW50ZXJDbGFzc01hcC5nZXQobmF0aXZlRWxlbWVudCk7XG4gIGlmIChnZXRFdmVudFRhcmdldChldmVudCkgIT09IG5hdGl2ZUVsZW1lbnQgfHwgIWVsZW1lbnREYXRhKSByZXR1cm47XG4gIGlmIChpc0xvbmdlc3RBbmltYXRpb24oZXZlbnQsIG5hdGl2ZUVsZW1lbnQpKSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgZm9yIChjb25zdCBrbGFzcyBvZiBlbGVtZW50RGF0YS5jbGFzc0xpc3QpIHtcbiAgICAgIHJlbmRlcmVyLnJlbW92ZUNsYXNzKG5hdGl2ZUVsZW1lbnQsIGtsYXNzKTtcbiAgICB9XG4gICAgY2xlYW51cEVudGVyQ2xhc3NEYXRhKG5hdGl2ZUVsZW1lbnQpO1xuICB9XG59XG5mdW5jdGlvbiDJtcm1YW5pbWF0ZUVudGVyTGlzdGVuZXIodmFsdWUpIHtcbiAgcGVyZm9ybWFuY2VNYXJrRmVhdHVyZSgnTmdBbmltYXRlRW50ZXInKTtcbiAgaWYgKHR5cGVvZiBuZ1NlcnZlck1vZGUgIT09ICd1bmRlZmluZWQnICYmIG5nU2VydmVyTW9kZSB8fCAhYXJlQW5pbWF0aW9uU3VwcG9ydGVkKSB7XG4gICAgcmV0dXJuIMm1ybVhbmltYXRlRW50ZXJMaXN0ZW5lcjtcbiAgfVxuICBuZ0Rldk1vZGUgJiYgYXNzZXJ0QW5pbWF0aW9uVHlwZXModmFsdWUsICdhbmltYXRlLmVudGVyJyk7XG4gIGNvbnN0IGxWaWV3ID0gZ2V0TFZpZXcoKTtcbiAgaWYgKGFyZUFuaW1hdGlvbnNEaXNhYmxlZChsVmlldykpIHtcbiAgICByZXR1cm4gybXJtWFuaW1hdGVFbnRlckxpc3RlbmVyO1xuICB9XG4gIGNvbnN0IHROb2RlID0gZ2V0Q3VycmVudFROb2RlKCk7XG4gIGFkZEFuaW1hdGlvblRvTFZpZXcoZ2V0TFZpZXdFbnRlckFuaW1hdGlvbnMobFZpZXcpLCB0Tm9kZSwgKCkgPT4gcnVuRW50ZXJBbmltYXRpb25GdW5jdGlvbihsVmlldywgdE5vZGUsIHZhbHVlKSk7XG4gIGluaXRpYWxpemVBbmltYXRpb25RdWV1ZVNjaGVkdWxlcihsVmlld1tJTkpFQ1RPUl0pO1xuICBxdWV1ZUVudGVyQW5pbWF0aW9ucyhsVmlld1tJTkpFQ1RPUl0sIGdldExWaWV3RW50ZXJBbmltYXRpb25zKGxWaWV3KSk7XG4gIHJldHVybiDJtcm1YW5pbWF0ZUVudGVyTGlzdGVuZXI7XG59XG5mdW5jdGlvbiBydW5FbnRlckFuaW1hdGlvbkZ1bmN0aW9uKGxWaWV3LCB0Tm9kZSwgdmFsdWUpIHtcbiAgY29uc3QgbmF0aXZlRWxlbWVudCA9IGdldE5hdGl2ZUJ5VE5vZGUodE5vZGUsIGxWaWV3KTtcbiAgbmdEZXZNb2RlICYmIGFzc2VydEVsZW1lbnROb2RlcyhuYXRpdmVFbGVtZW50LCAnYW5pbWF0ZS5lbnRlcicpO1xuICB2YWx1ZS5jYWxsKGxWaWV3W0NPTlRFWFRdLCB7XG4gICAgdGFyZ2V0OiBuYXRpdmVFbGVtZW50LFxuICAgIGFuaW1hdGlvbkNvbXBsZXRlOiBub09wQW5pbWF0aW9uQ29tcGxldGVcbiAgfSk7XG59XG5mdW5jdGlvbiDJtcm1YW5pbWF0ZUxlYXZlKHZhbHVlKSB7XG4gIHBlcmZvcm1hbmNlTWFya0ZlYXR1cmUoJ05nQW5pbWF0ZUxlYXZlJyk7XG4gIGlmICh0eXBlb2YgbmdTZXJ2ZXJNb2RlICE9PSAndW5kZWZpbmVkJyAmJiBuZ1NlcnZlck1vZGUgfHwgIWFyZUFuaW1hdGlvblN1cHBvcnRlZCkge1xuICAgIHJldHVybiDJtcm1YW5pbWF0ZUxlYXZlO1xuICB9XG4gIG5nRGV2TW9kZSAmJiBhc3NlcnRBbmltYXRpb25UeXBlcyh2YWx1ZSwgJ2FuaW1hdGUubGVhdmUnKTtcbiAgY29uc3QgbFZpZXcgPSBnZXRMVmlldygpO1xuICBjb25zdCBhbmltYXRpb25zRGlzYWJsZWQgPSBhcmVBbmltYXRpb25zRGlzYWJsZWQobFZpZXcpO1xuICBpZiAoYW5pbWF0aW9uc0Rpc2FibGVkKSB7XG4gICAgcmV0dXJuIMm1ybVhbmltYXRlTGVhdmU7XG4gIH1cbiAgY29uc3QgdE5vZGUgPSBnZXRDdXJyZW50VE5vZGUoKTtcbiAgY29uc3Qgbmdab25lID0gbFZpZXdbSU5KRUNUT1JdLmdldChOZ1pvbmUpO1xuICBhZGRBbmltYXRpb25Ub0xWaWV3KGdldExWaWV3TGVhdmVBbmltYXRpb25zKGxWaWV3KSwgdE5vZGUsICgpID0+IHJ1bkxlYXZlQW5pbWF0aW9ucyhsVmlldywgdE5vZGUsIHZhbHVlLCBuZ1pvbmUpKTtcbiAgaW5pdGlhbGl6ZUFuaW1hdGlvblF1ZXVlU2NoZWR1bGVyKGxWaWV3W0lOSkVDVE9SXSk7XG4gIHJldHVybiDJtcm1YW5pbWF0ZUxlYXZlO1xufVxuZnVuY3Rpb24gcnVuTGVhdmVBbmltYXRpb25zKGxWaWV3LCB0Tm9kZSwgdmFsdWUsIG5nWm9uZSkge1xuICBjb25zdCB7XG4gICAgcHJvbWlzZSxcbiAgICByZXNvbHZlXG4gIH0gPSBwcm9taXNlV2l0aFJlc29sdmVycygpO1xuICBjb25zdCBuYXRpdmVFbGVtZW50ID0gZ2V0TmF0aXZlQnlUTm9kZSh0Tm9kZSwgbFZpZXcpO1xuICBuZ0Rldk1vZGUgJiYgYXNzZXJ0RWxlbWVudE5vZGVzKG5hdGl2ZUVsZW1lbnQsICdhbmltYXRlLmxlYXZlJyk7XG4gIGNvbnN0IHJlbmRlcmVyID0gbFZpZXdbUkVOREVSRVJdO1xuICBhbGxMZWF2aW5nQW5pbWF0aW9ucy5hZGQobFZpZXdbSURdKTtcbiAgKGdldExWaWV3TGVhdmVBbmltYXRpb25zKGxWaWV3KS5nZXQodE5vZGUuaW5kZXgpLnJlc29sdmVycyA/Pz0gW10pLnB1c2gocmVzb2x2ZSk7XG4gIGNvbnN0IGFjdGl2ZUNsYXNzZXMgPSBnZXRDbGFzc0xpc3RGcm9tVmFsdWUodmFsdWUpO1xuICBpZiAoYWN0aXZlQ2xhc3NlcyAmJiBhY3RpdmVDbGFzc2VzLmxlbmd0aCA+IDApIHtcbiAgICBhbmltYXRlTGVhdmVDbGFzc1J1bm5lcihuYXRpdmVFbGVtZW50LCB0Tm9kZSwgbFZpZXcsIGFjdGl2ZUNsYXNzZXMsIHJlbmRlcmVyLCBuZ1pvbmUpO1xuICB9IGVsc2Uge1xuICAgIHJlc29sdmUoKTtcbiAgfVxuICByZXR1cm4ge1xuICAgIHByb21pc2UsXG4gICAgcmVzb2x2ZVxuICB9O1xufVxuZnVuY3Rpb24gYW5pbWF0ZUxlYXZlQ2xhc3NSdW5uZXIoZWwsIHROb2RlLCBsVmlldywgY2xhc3NMaXN0LCByZW5kZXJlciwgbmdab25lKSB7XG4gIGNhbmNlbEFuaW1hdGlvbnNJZlJ1bm5pbmcoZWwsIHJlbmRlcmVyKTtcbiAgY29uc3QgY2xlYW51cEZucyA9IFtdO1xuICBjb25zdCBjb21wb25lbnRSZXNvbHZlcnMgPSBnZXRMVmlld0xlYXZlQW5pbWF0aW9ucyhsVmlldykuZ2V0KHROb2RlLmluZGV4KT8ucmVzb2x2ZXJzO1xuICBsZXQgZmFsbGJhY2tUaW1lb3V0SWQ7XG4gIGxldCBoYXNDb21wbGV0ZWQgPSBmYWxzZTtcbiAgY29uc3QgaGFuZGxlT3V0QW5pbWF0aW9uRW5kID0gZXZlbnQgPT4ge1xuICAgIGNvbnN0IHRhcmdldCA9IGdldEV2ZW50VGFyZ2V0KGV2ZW50KTtcbiAgICBpZiAodGFyZ2V0ICE9PSBlbCAmJiBldmVudC50eXBlICE9PSAnYW5pbWF0aW9uLWZhbGxiYWNrJykgcmV0dXJuO1xuICAgIGlmIChldmVudC50eXBlID09PSAnYW5pbWF0aW9uLWZhbGxiYWNrJyB8fCBpc0xvbmdlc3RBbmltYXRpb24oZXZlbnQsIGVsKSkge1xuICAgICAgaGFzQ29tcGxldGVkID0gdHJ1ZTtcbiAgICAgIGlmIChmYWxsYmFja1RpbWVvdXRJZCkgY2xlYXJUaW1lb3V0KGZhbGxiYWNrVGltZW91dElkKTtcbiAgICAgIGlmIChldmVudC50eXBlICE9PSAnYW5pbWF0aW9uLWZhbGxiYWNrJykgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBsb25nZXN0QW5pbWF0aW9ucy5kZWxldGUoZWwpO1xuICAgICAgY2xlYXJMZWF2aW5nTm9kZXModE5vZGUsIGVsKTtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHROb2RlLnByb2plY3Rpb24pKSB7XG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBjbGFzc0xpc3QpIHtcbiAgICAgICAgICByZW5kZXJlci5yZW1vdmVDbGFzcyhlbCwgaXRlbSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNsZWFudXBBZnRlckxlYXZlQW5pbWF0aW9ucyhjb21wb25lbnRSZXNvbHZlcnMsIGNsZWFudXBGbnMpO1xuICAgICAgY2xlYXJMVmlld05vZGVBbmltYXRpb25SZXNvbHZlcnMobFZpZXcsIHROb2RlKTtcbiAgICB9XG4gIH07XG4gIG5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgY2xlYW51cEZucy5wdXNoKHJlbmRlcmVyLmxpc3RlbihlbCwgJ2FuaW1hdGlvbmVuZCcsIGhhbmRsZU91dEFuaW1hdGlvbkVuZCkpO1xuICAgIGNsZWFudXBGbnMucHVzaChyZW5kZXJlci5saXN0ZW4oZWwsICd0cmFuc2l0aW9uZW5kJywgaGFuZGxlT3V0QW5pbWF0aW9uRW5kKSk7XG4gIH0pO1xuICB0cmFja0xlYXZpbmdOb2Rlcyh0Tm9kZSwgZWwpO1xuICBmb3IgKGNvbnN0IGl0ZW0gb2YgY2xhc3NMaXN0KSB7XG4gICAgcmVuZGVyZXIuYWRkQ2xhc3MoZWwsIGl0ZW0pO1xuICB9XG4gIG5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgIGlmIChoYXNDb21wbGV0ZWQpIHJldHVybjtcbiAgICAgIGRldGVybWluZUxvbmdlc3RBbmltYXRpb24oZWwsIGxvbmdlc3RBbmltYXRpb25zLCBhcmVBbmltYXRpb25TdXBwb3J0ZWQpO1xuICAgICAgY29uc3QgbG9uZ2VzdCA9IGxvbmdlc3RBbmltYXRpb25zLmdldChlbCk7XG4gICAgICBpZiAoIWxvbmdlc3QpIHtcbiAgICAgICAgY2xlYXJMZWF2aW5nTm9kZXModE5vZGUsIGVsKTtcbiAgICAgICAgY2xlYW51cEFmdGVyTGVhdmVBbmltYXRpb25zKGNvbXBvbmVudFJlc29sdmVycywgY2xlYW51cEZucyk7XG4gICAgICAgIGNsZWFyTFZpZXdOb2RlQW5pbWF0aW9uUmVzb2x2ZXJzKGxWaWV3LCB0Tm9kZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmYWxsYmFja1RpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIGhhbmRsZU91dEFuaW1hdGlvbkVuZChuZXcgQ3VzdG9tRXZlbnQoJ2FuaW1hdGlvbi1mYWxsYmFjaycpKTtcbiAgICAgICAgfSwgbG9uZ2VzdC5kdXJhdGlvbiArIDUwKTtcbiAgICAgICAgY2xlYW51cEZucy5wdXNoKCgpID0+IGNsZWFyVGltZW91dChmYWxsYmFja1RpbWVvdXRJZCkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cbmZ1bmN0aW9uIMm1ybVhbmltYXRlTGVhdmVMaXN0ZW5lcih2YWx1ZSkge1xuICBwZXJmb3JtYW5jZU1hcmtGZWF0dXJlKCdOZ0FuaW1hdGVMZWF2ZScpO1xuICBpZiAodHlwZW9mIG5nU2VydmVyTW9kZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbmdTZXJ2ZXJNb2RlIHx8ICFhcmVBbmltYXRpb25TdXBwb3J0ZWQpIHtcbiAgICByZXR1cm4gybXJtWFuaW1hdGVMZWF2ZUxpc3RlbmVyO1xuICB9XG4gIG5nRGV2TW9kZSAmJiBhc3NlcnRBbmltYXRpb25UeXBlcyh2YWx1ZSwgJ2FuaW1hdGUubGVhdmUnKTtcbiAgY29uc3QgbFZpZXcgPSBnZXRMVmlldygpO1xuICBjb25zdCB0Tm9kZSA9IGdldEN1cnJlbnRUTm9kZSgpO1xuICBhbGxMZWF2aW5nQW5pbWF0aW9ucy5hZGQobFZpZXdbSURdKTtcbiAgY29uc3Qgbmdab25lID0gbFZpZXdbSU5KRUNUT1JdLmdldChOZ1pvbmUpO1xuICBjb25zdCBtYXhBbmltYXRpb25UaW1lb3V0ID0gbFZpZXdbSU5KRUNUT1JdLmdldChNQVhfQU5JTUFUSU9OX1RJTUVPVVQpO1xuICBhZGRBbmltYXRpb25Ub0xWaWV3KGdldExWaWV3TGVhdmVBbmltYXRpb25zKGxWaWV3KSwgdE5vZGUsICgpID0+IHJ1bkxlYXZlQW5pbWF0aW9uRnVuY3Rpb24obFZpZXcsIHROb2RlLCB2YWx1ZSwgbmdab25lLCBtYXhBbmltYXRpb25UaW1lb3V0KSk7XG4gIGluaXRpYWxpemVBbmltYXRpb25RdWV1ZVNjaGVkdWxlcihsVmlld1tJTkpFQ1RPUl0pO1xuICByZXR1cm4gybXJtWFuaW1hdGVMZWF2ZUxpc3RlbmVyO1xufVxuZnVuY3Rpb24gcnVuTGVhdmVBbmltYXRpb25GdW5jdGlvbihsVmlldywgdE5vZGUsIHZhbHVlLCBuZ1pvbmUsIG1heEFuaW1hdGlvblRpbWVvdXQpIHtcbiAgY29uc3Qge1xuICAgIHByb21pc2UsXG4gICAgcmVzb2x2ZVxuICB9ID0gcHJvbWlzZVdpdGhSZXNvbHZlcnMoKTtcbiAgY29uc3QgbmF0aXZlRWxlbWVudCA9IGdldE5hdGl2ZUJ5VE5vZGUodE5vZGUsIGxWaWV3KTtcbiAgbmdEZXZNb2RlICYmIGFzc2VydEVsZW1lbnROb2RlcyhuYXRpdmVFbGVtZW50LCAnYW5pbWF0ZS5sZWF2ZScpO1xuICBjb25zdCBjbGVhbnVwRm5zID0gW107XG4gIGNvbnN0IHJlbmRlcmVyID0gbFZpZXdbUkVOREVSRVJdO1xuICBjb25zdCBhbmltYXRpb25zRGlzYWJsZWQgPSBhcmVBbmltYXRpb25zRGlzYWJsZWQobFZpZXcpO1xuICAoZ2V0TFZpZXdMZWF2ZUFuaW1hdGlvbnMobFZpZXcpLmdldCh0Tm9kZS5pbmRleCkucmVzb2x2ZXJzID8/PSBbXSkucHVzaChyZXNvbHZlKTtcbiAgY29uc3QgcmVzb2x2ZXJzID0gZ2V0TFZpZXdMZWF2ZUFuaW1hdGlvbnMobFZpZXcpLmdldCh0Tm9kZS5pbmRleCk/LnJlc29sdmVycztcbiAgaWYgKGFuaW1hdGlvbnNEaXNhYmxlZCkge1xuICAgIGxlYXZlQW5pbWF0aW9uRnVuY3Rpb25DbGVhbnVwKGxWaWV3LCB0Tm9kZSwgbmF0aXZlRWxlbWVudCwgcmVzb2x2ZXJzLCBjbGVhbnVwRm5zKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IGxlYXZlQW5pbWF0aW9uRnVuY3Rpb25DbGVhbnVwKGxWaWV3LCB0Tm9kZSwgbmF0aXZlRWxlbWVudCwgcmVzb2x2ZXJzLCBjbGVhbnVwRm5zKSwgbWF4QW5pbWF0aW9uVGltZW91dCk7XG4gICAgY29uc3QgZXZlbnQgPSB7XG4gICAgICB0YXJnZXQ6IG5hdGl2ZUVsZW1lbnQsXG4gICAgICBhbmltYXRpb25Db21wbGV0ZTogKCkgPT4ge1xuICAgICAgICBsZWF2ZUFuaW1hdGlvbkZ1bmN0aW9uQ2xlYW51cChsVmlldywgdE5vZGUsIG5hdGl2ZUVsZW1lbnQsIHJlc29sdmVycywgY2xlYW51cEZucyk7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgICAgfVxuICAgIH07XG4gICAgdHJhY2tMZWF2aW5nTm9kZXModE5vZGUsIG5hdGl2ZUVsZW1lbnQpO1xuICAgIG5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICBjbGVhbnVwRm5zLnB1c2gocmVuZGVyZXIubGlzdGVuKG5hdGl2ZUVsZW1lbnQsICdhbmltYXRpb25lbmQnLCAoKSA9PiB7XG4gICAgICAgIGxlYXZlQW5pbWF0aW9uRnVuY3Rpb25DbGVhbnVwKGxWaWV3LCB0Tm9kZSwgbmF0aXZlRWxlbWVudCwgcmVzb2x2ZXJzLCBjbGVhbnVwRm5zKTtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG4gICAgICB9LCB7XG4gICAgICAgIG9uY2U6IHRydWVcbiAgICAgIH0pKTtcbiAgICB9KTtcbiAgICB2YWx1ZS5jYWxsKGxWaWV3W0NPTlRFWFRdLCBldmVudCk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBwcm9taXNlLFxuICAgIHJlc29sdmVcbiAgfTtcbn1cbmZ1bmN0aW9uIMm1ybVjb21wb25lbnRJbnN0YW5jZSgpIHtcbiAgY29uc3QgaW5zdGFuY2UgPSBnZXRMVmlldygpW0RFQ0xBUkFUSU9OX0NPTVBPTkVOVF9WSUVXXVtDT05URVhUXTtcbiAgbmdEZXZNb2RlICYmIGFzc2VydERlZmluZWQoaW5zdGFuY2UsICdFeHBlY3RlZCBjb21wb25lbnQgaW5zdGFuY2UgdG8gYmUgZGVmaW5lZCcpO1xuICByZXR1cm4gaW5zdGFuY2U7XG59XG5jbGFzcyBMaXZlQ29sbGVjdGlvbiB7XG4gIGRlc3Ryb3koaXRlbSkge31cbiAgdXBkYXRlVmFsdWUoaW5kZXgsIHZhbHVlKSB7fVxuICBzd2FwKGluZGV4MSwgaW5kZXgyKSB7XG4gICAgY29uc3Qgc3RhcnRJZHggPSBNYXRoLm1pbihpbmRleDEsIGluZGV4Mik7XG4gICAgY29uc3QgZW5kSWR4ID0gTWF0aC5tYXgoaW5kZXgxLCBpbmRleDIpO1xuICAgIGNvbnN0IGVuZEl0ZW0gPSB0aGlzLmRldGFjaChlbmRJZHgpO1xuICAgIGlmIChlbmRJZHggLSBzdGFydElkeCA+IDEpIHtcbiAgICAgIGNvbnN0IHN0YXJ0SXRlbSA9IHRoaXMuZGV0YWNoKHN0YXJ0SWR4KTtcbiAgICAgIHRoaXMuYXR0YWNoKHN0YXJ0SWR4LCBlbmRJdGVtKTtcbiAgICAgIHRoaXMuYXR0YWNoKGVuZElkeCwgc3RhcnRJdGVtKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hdHRhY2goc3RhcnRJZHgsIGVuZEl0ZW0pO1xuICAgIH1cbiAgfVxuICBtb3ZlKHByZXZJbmRleCwgbmV3SWR4KSB7XG4gICAgdGhpcy5hdHRhY2gobmV3SWR4LCB0aGlzLmRldGFjaChwcmV2SW5kZXgpKTtcbiAgfVxufVxuZnVuY3Rpb24gdmFsdWVzTWF0Y2hpbmcobGl2ZUlkeCwgbGl2ZVZhbHVlLCBuZXdJZHgsIG5ld1ZhbHVlLCB0cmFja0J5KSB7XG4gIGlmIChsaXZlSWR4ID09PSBuZXdJZHggJiYgT2JqZWN0LmlzKGxpdmVWYWx1ZSwgbmV3VmFsdWUpKSB7XG4gICAgcmV0dXJuIDE7XG4gIH0gZWxzZSBpZiAoT2JqZWN0LmlzKHRyYWNrQnkobGl2ZUlkeCwgbGl2ZVZhbHVlKSwgdHJhY2tCeShuZXdJZHgsIG5ld1ZhbHVlKSkpIHtcbiAgICByZXR1cm4gLTE7XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5mdW5jdGlvbiByZWNvcmREdXBsaWNhdGVLZXlzKGtleVRvSWR4LCBrZXksIGlkeCkge1xuICBjb25zdCBpZHhTb0ZhciA9IGtleVRvSWR4LmdldChrZXkpO1xuICBpZiAoaWR4U29GYXIgIT09IHVuZGVmaW5lZCkge1xuICAgIGlkeFNvRmFyLmFkZChpZHgpO1xuICB9IGVsc2Uge1xuICAgIGtleVRvSWR4LnNldChrZXksIG5ldyBTZXQoW2lkeF0pKTtcbiAgfVxufVxuZnVuY3Rpb24gcmVjb25jaWxlKGxpdmVDb2xsZWN0aW9uLCBuZXdDb2xsZWN0aW9uLCB0cmFja0J5Rm4sIHJlYWN0aXZlQ29uc3VtZXIpIHtcbiAgbGV0IGRldGFjaGVkSXRlbXMgPSB1bmRlZmluZWQ7XG4gIGxldCBsaXZlS2V5c0luVGhlRnV0dXJlID0gdW5kZWZpbmVkO1xuICBsZXQgbGl2ZVN0YXJ0SWR4ID0gMDtcbiAgbGV0IGxpdmVFbmRJZHggPSBsaXZlQ29sbGVjdGlvbi5sZW5ndGggLSAxO1xuICBjb25zdCBkdXBsaWNhdGVLZXlzID0gbmdEZXZNb2RlID8gbmV3IE1hcCgpIDogdW5kZWZpbmVkO1xuICBpZiAoQXJyYXkuaXNBcnJheShuZXdDb2xsZWN0aW9uKSkge1xuICAgIHNldEFjdGl2ZUNvbnN1bWVyJDEocmVhY3RpdmVDb25zdW1lcik7XG4gICAgbGV0IG5ld0VuZElkeCA9IG5ld0NvbGxlY3Rpb24ubGVuZ3RoIC0gMTtcbiAgICBzZXRBY3RpdmVDb25zdW1lciQxKG51bGwpO1xuICAgIHdoaWxlIChsaXZlU3RhcnRJZHggPD0gbGl2ZUVuZElkeCAmJiBsaXZlU3RhcnRJZHggPD0gbmV3RW5kSWR4KSB7XG4gICAgICBjb25zdCBsaXZlU3RhcnRWYWx1ZSA9IGxpdmVDb2xsZWN0aW9uLmF0KGxpdmVTdGFydElkeCk7XG4gICAgICBjb25zdCBuZXdTdGFydFZhbHVlID0gbmV3Q29sbGVjdGlvbltsaXZlU3RhcnRJZHhdO1xuICAgICAgaWYgKG5nRGV2TW9kZSkge1xuICAgICAgICByZWNvcmREdXBsaWNhdGVLZXlzKGR1cGxpY2F0ZUtleXMsIHRyYWNrQnlGbihsaXZlU3RhcnRJZHgsIG5ld1N0YXJ0VmFsdWUpLCBsaXZlU3RhcnRJZHgpO1xuICAgICAgfVxuICAgICAgY29uc3QgaXNTdGFydE1hdGNoaW5nID0gdmFsdWVzTWF0Y2hpbmcobGl2ZVN0YXJ0SWR4LCBsaXZlU3RhcnRWYWx1ZSwgbGl2ZVN0YXJ0SWR4LCBuZXdTdGFydFZhbHVlLCB0cmFja0J5Rm4pO1xuICAgICAgaWYgKGlzU3RhcnRNYXRjaGluZyAhPT0gMCkge1xuICAgICAgICBpZiAoaXNTdGFydE1hdGNoaW5nIDwgMCkge1xuICAgICAgICAgIGxpdmVDb2xsZWN0aW9uLnVwZGF0ZVZhbHVlKGxpdmVTdGFydElkeCwgbmV3U3RhcnRWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgbGl2ZVN0YXJ0SWR4Kys7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgbGl2ZUVuZFZhbHVlID0gbGl2ZUNvbGxlY3Rpb24uYXQobGl2ZUVuZElkeCk7XG4gICAgICBjb25zdCBuZXdFbmRWYWx1ZSA9IG5ld0NvbGxlY3Rpb25bbmV3RW5kSWR4XTtcbiAgICAgIGlmIChuZ0Rldk1vZGUpIHtcbiAgICAgICAgcmVjb3JkRHVwbGljYXRlS2V5cyhkdXBsaWNhdGVLZXlzLCB0cmFja0J5Rm4obmV3RW5kSWR4LCBuZXdFbmRWYWx1ZSksIG5ld0VuZElkeCk7XG4gICAgICB9XG4gICAgICBjb25zdCBpc0VuZE1hdGNoaW5nID0gdmFsdWVzTWF0Y2hpbmcobGl2ZUVuZElkeCwgbGl2ZUVuZFZhbHVlLCBuZXdFbmRJZHgsIG5ld0VuZFZhbHVlLCB0cmFja0J5Rm4pO1xuICAgICAgaWYgKGlzRW5kTWF0Y2hpbmcgIT09IDApIHtcbiAgICAgICAgaWYgKGlzRW5kTWF0Y2hpbmcgPCAwKSB7XG4gICAgICAgICAgbGl2ZUNvbGxlY3Rpb24udXBkYXRlVmFsdWUobGl2ZUVuZElkeCwgbmV3RW5kVmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGxpdmVFbmRJZHgtLTtcbiAgICAgICAgbmV3RW5kSWR4LS07XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgbGl2ZVN0YXJ0S2V5ID0gdHJhY2tCeUZuKGxpdmVTdGFydElkeCwgbGl2ZVN0YXJ0VmFsdWUpO1xuICAgICAgY29uc3QgbGl2ZUVuZEtleSA9IHRyYWNrQnlGbihsaXZlRW5kSWR4LCBsaXZlRW5kVmFsdWUpO1xuICAgICAgY29uc3QgbmV3U3RhcnRLZXkgPSB0cmFja0J5Rm4obGl2ZVN0YXJ0SWR4LCBuZXdTdGFydFZhbHVlKTtcbiAgICAgIGlmIChPYmplY3QuaXMobmV3U3RhcnRLZXksIGxpdmVFbmRLZXkpKSB7XG4gICAgICAgIGNvbnN0IG5ld0VuZEtleSA9IHRyYWNrQnlGbihuZXdFbmRJZHgsIG5ld0VuZFZhbHVlKTtcbiAgICAgICAgaWYgKE9iamVjdC5pcyhuZXdFbmRLZXksIGxpdmVTdGFydEtleSkpIHtcbiAgICAgICAgICBsaXZlQ29sbGVjdGlvbi5zd2FwKGxpdmVTdGFydElkeCwgbGl2ZUVuZElkeCk7XG4gICAgICAgICAgbGl2ZUNvbGxlY3Rpb24udXBkYXRlVmFsdWUobGl2ZUVuZElkeCwgbmV3RW5kVmFsdWUpO1xuICAgICAgICAgIG5ld0VuZElkeC0tO1xuICAgICAgICAgIGxpdmVFbmRJZHgtLTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsaXZlQ29sbGVjdGlvbi5tb3ZlKGxpdmVFbmRJZHgsIGxpdmVTdGFydElkeCk7XG4gICAgICAgIH1cbiAgICAgICAgbGl2ZUNvbGxlY3Rpb24udXBkYXRlVmFsdWUobGl2ZVN0YXJ0SWR4LCBuZXdTdGFydFZhbHVlKTtcbiAgICAgICAgbGl2ZVN0YXJ0SWR4Kys7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgZGV0YWNoZWRJdGVtcyA/Pz0gbmV3IFVuaXF1ZVZhbHVlTXVsdGlLZXlNYXAoKTtcbiAgICAgIGxpdmVLZXlzSW5UaGVGdXR1cmUgPz89IGluaXRMaXZlSXRlbXNJblRoZUZ1dHVyZShsaXZlQ29sbGVjdGlvbiwgbGl2ZVN0YXJ0SWR4LCBsaXZlRW5kSWR4LCB0cmFja0J5Rm4pO1xuICAgICAgaWYgKGF0dGFjaFByZXZpb3VzbHlEZXRhY2hlZChsaXZlQ29sbGVjdGlvbiwgZGV0YWNoZWRJdGVtcywgbGl2ZVN0YXJ0SWR4LCBuZXdTdGFydEtleSkpIHtcbiAgICAgICAgbGl2ZUNvbGxlY3Rpb24udXBkYXRlVmFsdWUobGl2ZVN0YXJ0SWR4LCBuZXdTdGFydFZhbHVlKTtcbiAgICAgICAgbGl2ZVN0YXJ0SWR4Kys7XG4gICAgICAgIGxpdmVFbmRJZHgrKztcbiAgICAgIH0gZWxzZSBpZiAoIWxpdmVLZXlzSW5UaGVGdXR1cmUuaGFzKG5ld1N0YXJ0S2V5KSkge1xuICAgICAgICBjb25zdCBuZXdJdGVtID0gbGl2ZUNvbGxlY3Rpb24uY3JlYXRlKGxpdmVTdGFydElkeCwgbmV3Q29sbGVjdGlvbltsaXZlU3RhcnRJZHhdKTtcbiAgICAgICAgbGl2ZUNvbGxlY3Rpb24uYXR0YWNoKGxpdmVTdGFydElkeCwgbmV3SXRlbSk7XG4gICAgICAgIGxpdmVTdGFydElkeCsrO1xuICAgICAgICBsaXZlRW5kSWR4Kys7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZXRhY2hlZEl0ZW1zLnNldChsaXZlU3RhcnRLZXksIGxpdmVDb2xsZWN0aW9uLmRldGFjaChsaXZlU3RhcnRJZHgpKTtcbiAgICAgICAgbGl2ZUVuZElkeC0tO1xuICAgICAgfVxuICAgIH1cbiAgICB3aGlsZSAobGl2ZVN0YXJ0SWR4IDw9IG5ld0VuZElkeCkge1xuICAgICAgY3JlYXRlT3JBdHRhY2gobGl2ZUNvbGxlY3Rpb24sIGRldGFjaGVkSXRlbXMsIHRyYWNrQnlGbiwgbGl2ZVN0YXJ0SWR4LCBuZXdDb2xsZWN0aW9uW2xpdmVTdGFydElkeF0pO1xuICAgICAgbGl2ZVN0YXJ0SWR4Kys7XG4gICAgfVxuICB9IGVsc2UgaWYgKG5ld0NvbGxlY3Rpb24gIT0gbnVsbCkge1xuICAgIHNldEFjdGl2ZUNvbnN1bWVyJDEocmVhY3RpdmVDb25zdW1lcik7XG4gICAgY29uc3QgbmV3Q29sbGVjdGlvbkl0ZXJhdG9yID0gbmV3Q29sbGVjdGlvbltTeW1ib2wuaXRlcmF0b3JdKCk7XG4gICAgc2V0QWN0aXZlQ29uc3VtZXIkMShudWxsKTtcbiAgICBsZXQgbmV3SXRlcmF0aW9uUmVzdWx0ID0gbmV3Q29sbGVjdGlvbkl0ZXJhdG9yLm5leHQoKTtcbiAgICB3aGlsZSAoIW5ld0l0ZXJhdGlvblJlc3VsdC5kb25lICYmIGxpdmVTdGFydElkeCA8PSBsaXZlRW5kSWR4KSB7XG4gICAgICBjb25zdCBsaXZlVmFsdWUgPSBsaXZlQ29sbGVjdGlvbi5hdChsaXZlU3RhcnRJZHgpO1xuICAgICAgY29uc3QgbmV3VmFsdWUgPSBuZXdJdGVyYXRpb25SZXN1bHQudmFsdWU7XG4gICAgICBpZiAobmdEZXZNb2RlKSB7XG4gICAgICAgIHJlY29yZER1cGxpY2F0ZUtleXMoZHVwbGljYXRlS2V5cywgdHJhY2tCeUZuKGxpdmVTdGFydElkeCwgbmV3VmFsdWUpLCBsaXZlU3RhcnRJZHgpO1xuICAgICAgfVxuICAgICAgY29uc3QgaXNTdGFydE1hdGNoaW5nID0gdmFsdWVzTWF0Y2hpbmcobGl2ZVN0YXJ0SWR4LCBsaXZlVmFsdWUsIGxpdmVTdGFydElkeCwgbmV3VmFsdWUsIHRyYWNrQnlGbik7XG4gICAgICBpZiAoaXNTdGFydE1hdGNoaW5nICE9PSAwKSB7XG4gICAgICAgIGlmIChpc1N0YXJ0TWF0Y2hpbmcgPCAwKSB7XG4gICAgICAgICAgbGl2ZUNvbGxlY3Rpb24udXBkYXRlVmFsdWUobGl2ZVN0YXJ0SWR4LCBuZXdWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgbGl2ZVN0YXJ0SWR4Kys7XG4gICAgICAgIG5ld0l0ZXJhdGlvblJlc3VsdCA9IG5ld0NvbGxlY3Rpb25JdGVyYXRvci5uZXh0KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZXRhY2hlZEl0ZW1zID8/PSBuZXcgVW5pcXVlVmFsdWVNdWx0aUtleU1hcCgpO1xuICAgICAgICBsaXZlS2V5c0luVGhlRnV0dXJlID8/PSBpbml0TGl2ZUl0ZW1zSW5UaGVGdXR1cmUobGl2ZUNvbGxlY3Rpb24sIGxpdmVTdGFydElkeCwgbGl2ZUVuZElkeCwgdHJhY2tCeUZuKTtcbiAgICAgICAgY29uc3QgbmV3S2V5ID0gdHJhY2tCeUZuKGxpdmVTdGFydElkeCwgbmV3VmFsdWUpO1xuICAgICAgICBpZiAoYXR0YWNoUHJldmlvdXNseURldGFjaGVkKGxpdmVDb2xsZWN0aW9uLCBkZXRhY2hlZEl0ZW1zLCBsaXZlU3RhcnRJZHgsIG5ld0tleSkpIHtcbiAgICAgICAgICBsaXZlQ29sbGVjdGlvbi51cGRhdGVWYWx1ZShsaXZlU3RhcnRJZHgsIG5ld1ZhbHVlKTtcbiAgICAgICAgICBsaXZlU3RhcnRJZHgrKztcbiAgICAgICAgICBsaXZlRW5kSWR4Kys7XG4gICAgICAgICAgbmV3SXRlcmF0aW9uUmVzdWx0ID0gbmV3Q29sbGVjdGlvbkl0ZXJhdG9yLm5leHQoKTtcbiAgICAgICAgfSBlbHNlIGlmICghbGl2ZUtleXNJblRoZUZ1dHVyZS5oYXMobmV3S2V5KSkge1xuICAgICAgICAgIGxpdmVDb2xsZWN0aW9uLmF0dGFjaChsaXZlU3RhcnRJZHgsIGxpdmVDb2xsZWN0aW9uLmNyZWF0ZShsaXZlU3RhcnRJZHgsIG5ld1ZhbHVlKSk7XG4gICAgICAgICAgbGl2ZVN0YXJ0SWR4Kys7XG4gICAgICAgICAgbGl2ZUVuZElkeCsrO1xuICAgICAgICAgIG5ld0l0ZXJhdGlvblJlc3VsdCA9IG5ld0NvbGxlY3Rpb25JdGVyYXRvci5uZXh0KCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgbGl2ZUtleSA9IHRyYWNrQnlGbihsaXZlU3RhcnRJZHgsIGxpdmVWYWx1ZSk7XG4gICAgICAgICAgZGV0YWNoZWRJdGVtcy5zZXQobGl2ZUtleSwgbGl2ZUNvbGxlY3Rpb24uZGV0YWNoKGxpdmVTdGFydElkeCkpO1xuICAgICAgICAgIGxpdmVFbmRJZHgtLTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB3aGlsZSAoIW5ld0l0ZXJhdGlvblJlc3VsdC5kb25lKSB7XG4gICAgICBjcmVhdGVPckF0dGFjaChsaXZlQ29sbGVjdGlvbiwgZGV0YWNoZWRJdGVtcywgdHJhY2tCeUZuLCBsaXZlQ29sbGVjdGlvbi5sZW5ndGgsIG5ld0l0ZXJhdGlvblJlc3VsdC52YWx1ZSk7XG4gICAgICBuZXdJdGVyYXRpb25SZXN1bHQgPSBuZXdDb2xsZWN0aW9uSXRlcmF0b3IubmV4dCgpO1xuICAgIH1cbiAgfVxuICB3aGlsZSAobGl2ZVN0YXJ0SWR4IDw9IGxpdmVFbmRJZHgpIHtcbiAgICBsaXZlQ29sbGVjdGlvbi5kZXN0cm95KGxpdmVDb2xsZWN0aW9uLmRldGFjaChsaXZlRW5kSWR4LS0pKTtcbiAgfVxuICBkZXRhY2hlZEl0ZW1zPy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgIGxpdmVDb2xsZWN0aW9uLmRlc3Ryb3koaXRlbSk7XG4gIH0pO1xuICBpZiAobmdEZXZNb2RlKSB7XG4gICAgbGV0IGR1cGxpY2F0ZWRLZXlzTXNnID0gW107XG4gICAgZm9yIChjb25zdCBba2V5LCBpZHhTZXRdIG9mIGR1cGxpY2F0ZUtleXMpIHtcbiAgICAgIGlmIChpZHhTZXQuc2l6ZSA+IDEpIHtcbiAgICAgICAgY29uc3QgaWR4ID0gWy4uLmlkeFNldF0uc29ydCgoYSwgYikgPT4gYSAtIGIpO1xuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IGlkeC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGR1cGxpY2F0ZWRLZXlzTXNnLnB1c2goYGtleSBcIiR7c3RyaW5naWZ5Rm9yRXJyb3Ioa2V5KX1cIiBhdCBpbmRleCBcIiR7aWR4W2kgLSAxXX1cIiBhbmQgXCIke2lkeFtpXX1cImApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChkdXBsaWNhdGVkS2V5c01zZy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBtZXNzYWdlID0gZm9ybWF0UnVudGltZUVycm9yKC05NTUsICdUaGUgcHJvdmlkZWQgdHJhY2sgZXhwcmVzc2lvbiByZXN1bHRlZCBpbiBkdXBsaWNhdGVkIGtleXMgZm9yIGEgZ2l2ZW4gY29sbGVjdGlvbi4gJyArICdBZGp1c3QgdGhlIHRyYWNraW5nIGV4cHJlc3Npb24gc3VjaCB0aGF0IGl0IHVuaXF1ZWx5IGlkZW50aWZpZXMgYWxsIHRoZSBpdGVtcyBpbiB0aGUgY29sbGVjdGlvbi4gJyArICdEdXBsaWNhdGVkIGtleXMgd2VyZTogXFxuJyArIGR1cGxpY2F0ZWRLZXlzTXNnLmpvaW4oJywgXFxuJykgKyAnLicpO1xuICAgICAgY29uc29sZS53YXJuKG1lc3NhZ2UpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gYXR0YWNoUHJldmlvdXNseURldGFjaGVkKHByZXZDb2xsZWN0aW9uLCBkZXRhY2hlZEl0ZW1zLCBpbmRleCwga2V5KSB7XG4gIGlmIChkZXRhY2hlZEl0ZW1zICE9PSB1bmRlZmluZWQgJiYgZGV0YWNoZWRJdGVtcy5oYXMoa2V5KSkge1xuICAgIHByZXZDb2xsZWN0aW9uLmF0dGFjaChpbmRleCwgZGV0YWNoZWRJdGVtcy5nZXQoa2V5KSk7XG4gICAgZGV0YWNoZWRJdGVtcy5kZWxldGUoa2V5KTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiBjcmVhdGVPckF0dGFjaChsaXZlQ29sbGVjdGlvbiwgZGV0YWNoZWRJdGVtcywgdHJhY2tCeUZuLCBpbmRleCwgdmFsdWUpIHtcbiAgaWYgKCFhdHRhY2hQcmV2aW91c2x5RGV0YWNoZWQobGl2ZUNvbGxlY3Rpb24sIGRldGFjaGVkSXRlbXMsIGluZGV4LCB0cmFja0J5Rm4oaW5kZXgsIHZhbHVlKSkpIHtcbiAgICBjb25zdCBuZXdJdGVtID0gbGl2ZUNvbGxlY3Rpb24uY3JlYXRlKGluZGV4LCB2YWx1ZSk7XG4gICAgbGl2ZUNvbGxlY3Rpb24uYXR0YWNoKGluZGV4LCBuZXdJdGVtKTtcbiAgfSBlbHNlIHtcbiAgICBsaXZlQ29sbGVjdGlvbi51cGRhdGVWYWx1ZShpbmRleCwgdmFsdWUpO1xuICB9XG59XG5mdW5jdGlvbiBpbml0TGl2ZUl0ZW1zSW5UaGVGdXR1cmUobGl2ZUNvbGxlY3Rpb24sIHN0YXJ0LCBlbmQsIHRyYWNrQnlGbikge1xuICBjb25zdCBrZXlzID0gbmV3IFNldCgpO1xuICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPD0gZW5kOyBpKyspIHtcbiAgICBrZXlzLmFkZCh0cmFja0J5Rm4oaSwgbGl2ZUNvbGxlY3Rpb24uYXQoaSkpKTtcbiAgfVxuICByZXR1cm4ga2V5cztcbn1cbmNsYXNzIFVuaXF1ZVZhbHVlTXVsdGlLZXlNYXAge1xuICBrdk1hcCA9IC8qI19fUFVSRV9fKi9uZXcgTWFwKCk7XG4gIF92TWFwID0gdW5kZWZpbmVkO1xuICBoYXMoa2V5KSB7XG4gICAgcmV0dXJuIHRoaXMua3ZNYXAuaGFzKGtleSk7XG4gIH1cbiAgZGVsZXRlKGtleSkge1xuICAgIGlmICghdGhpcy5oYXMoa2V5KSkgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5rdk1hcC5nZXQoa2V5KTtcbiAgICBpZiAodGhpcy5fdk1hcCAhPT0gdW5kZWZpbmVkICYmIHRoaXMuX3ZNYXAuaGFzKHZhbHVlKSkge1xuICAgICAgdGhpcy5rdk1hcC5zZXQoa2V5LCB0aGlzLl92TWFwLmdldCh2YWx1ZSkpO1xuICAgICAgdGhpcy5fdk1hcC5kZWxldGUodmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmt2TWFwLmRlbGV0ZShrZXkpO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBnZXQoa2V5KSB7XG4gICAgcmV0dXJuIHRoaXMua3ZNYXAuZ2V0KGtleSk7XG4gIH1cbiAgc2V0KGtleSwgdmFsdWUpIHtcbiAgICBpZiAodGhpcy5rdk1hcC5oYXMoa2V5KSkge1xuICAgICAgbGV0IHByZXZWYWx1ZSA9IHRoaXMua3ZNYXAuZ2V0KGtleSk7XG4gICAgICBpZiAobmdEZXZNb2RlICYmIHByZXZWYWx1ZSA9PT0gdmFsdWUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBEZXRlY3RlZCBhIGR1cGxpY2F0ZWQgdmFsdWUgJHt2YWx1ZX0gZm9yIHRoZSBrZXkgJHtrZXl9YCk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5fdk1hcCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuX3ZNYXAgPSBuZXcgTWFwKCk7XG4gICAgICB9XG4gICAgICBjb25zdCB2TWFwID0gdGhpcy5fdk1hcDtcbiAgICAgIHdoaWxlICh2TWFwLmhhcyhwcmV2VmFsdWUpKSB7XG4gICAgICAgIHByZXZWYWx1ZSA9IHZNYXAuZ2V0KHByZXZWYWx1ZSk7XG4gICAgICB9XG4gICAgICB2TWFwLnNldChwcmV2VmFsdWUsIHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5rdk1hcC5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgfVxuICB9XG4gIGZvckVhY2goY2IpIHtcbiAgICBmb3IgKGxldCBba2V5LCB2YWx1ZV0gb2YgdGhpcy5rdk1hcCkge1xuICAgICAgY2IodmFsdWUsIGtleSk7XG4gICAgICBpZiAodGhpcy5fdk1hcCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IHZNYXAgPSB0aGlzLl92TWFwO1xuICAgICAgICB3aGlsZSAodk1hcC5oYXModmFsdWUpKSB7XG4gICAgICAgICAgdmFsdWUgPSB2TWFwLmdldCh2YWx1ZSk7XG4gICAgICAgICAgY2IodmFsdWUsIGtleSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIMm1ybVjb25kaXRpb25hbENyZWF0ZShpbmRleCwgdGVtcGxhdGVGbiwgZGVjbHMsIHZhcnMsIHRhZ05hbWUsIGF0dHJzSW5kZXgsIGxvY2FsUmVmc0luZGV4LCBsb2NhbFJlZkV4dHJhY3Rvcikge1xuICBwZXJmb3JtYW5jZU1hcmtGZWF0dXJlKCdOZ0NvbnRyb2xGbG93Jyk7XG4gIGNvbnN0IGxWaWV3ID0gZ2V0TFZpZXcoKTtcbiAgY29uc3QgdFZpZXcgPSBnZXRUVmlldygpO1xuICBjb25zdCBhdHRycyA9IGdldENvbnN0YW50KHRWaWV3LmNvbnN0cywgYXR0cnNJbmRleCk7XG4gIGRlY2xhcmVOb0RpcmVjdGl2ZUhvc3RUZW1wbGF0ZShsVmlldywgdFZpZXcsIGluZGV4LCB0ZW1wbGF0ZUZuLCBkZWNscywgdmFycywgdGFnTmFtZSwgYXR0cnMsIDI1NiwgbG9jYWxSZWZzSW5kZXgsIGxvY2FsUmVmRXh0cmFjdG9yKTtcbiAgcmV0dXJuIMm1ybVjb25kaXRpb25hbEJyYW5jaENyZWF0ZTtcbn1cbmZ1bmN0aW9uIMm1ybVjb25kaXRpb25hbEJyYW5jaENyZWF0ZShpbmRleCwgdGVtcGxhdGVGbiwgZGVjbHMsIHZhcnMsIHRhZ05hbWUsIGF0dHJzSW5kZXgsIGxvY2FsUmVmc0luZGV4LCBsb2NhbFJlZkV4dHJhY3Rvcikge1xuICBwZXJmb3JtYW5jZU1hcmtGZWF0dXJlKCdOZ0NvbnRyb2xGbG93Jyk7XG4gIGNvbnN0IGxWaWV3ID0gZ2V0TFZpZXcoKTtcbiAgY29uc3QgdFZpZXcgPSBnZXRUVmlldygpO1xuICBjb25zdCBhdHRycyA9IGdldENvbnN0YW50KHRWaWV3LmNvbnN0cywgYXR0cnNJbmRleCk7XG4gIGRlY2xhcmVOb0RpcmVjdGl2ZUhvc3RUZW1wbGF0ZShsVmlldywgdFZpZXcsIGluZGV4LCB0ZW1wbGF0ZUZuLCBkZWNscywgdmFycywgdGFnTmFtZSwgYXR0cnMsIDUxMiwgbG9jYWxSZWZzSW5kZXgsIGxvY2FsUmVmRXh0cmFjdG9yKTtcbiAgcmV0dXJuIMm1ybVjb25kaXRpb25hbEJyYW5jaENyZWF0ZTtcbn1cbmZ1bmN0aW9uIMm1ybVjb25kaXRpb25hbChtYXRjaGluZ1RlbXBsYXRlSW5kZXgsIGNvbnRleHRWYWx1ZSkge1xuICBwZXJmb3JtYW5jZU1hcmtGZWF0dXJlKCdOZ0NvbnRyb2xGbG93Jyk7XG4gIGNvbnN0IGhvc3RMVmlldyA9IGdldExWaWV3KCk7XG4gIGNvbnN0IGJpbmRpbmdJbmRleCA9IG5leHRCaW5kaW5nSW5kZXgoKTtcbiAgY29uc3QgcHJldk1hdGNoaW5nVGVtcGxhdGVJbmRleCA9IGhvc3RMVmlld1tiaW5kaW5nSW5kZXhdICE9PSBOT19DSEFOR0UgPyBob3N0TFZpZXdbYmluZGluZ0luZGV4XSA6IC0xO1xuICBjb25zdCBwcmV2Q29udGFpbmVyID0gcHJldk1hdGNoaW5nVGVtcGxhdGVJbmRleCAhPT0gLTEgPyBnZXRMQ29udGFpbmVyKGhvc3RMVmlldywgSEVBREVSX09GRlNFVCArIHByZXZNYXRjaGluZ1RlbXBsYXRlSW5kZXgpIDogdW5kZWZpbmVkO1xuICBjb25zdCB2aWV3SW5Db250YWluZXJJZHggPSAwO1xuICBpZiAoYmluZGluZ1VwZGF0ZWQoaG9zdExWaWV3LCBiaW5kaW5nSW5kZXgsIG1hdGNoaW5nVGVtcGxhdGVJbmRleCkpIHtcbiAgICBjb25zdCBwcmV2Q29uc3VtZXIgPSBzZXRBY3RpdmVDb25zdW1lcihudWxsKTtcbiAgICB0cnkge1xuICAgICAgaWYgKHByZXZDb250YWluZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZW1vdmVMVmlld0Zyb21MQ29udGFpbmVyKHByZXZDb250YWluZXIsIHZpZXdJbkNvbnRhaW5lcklkeCk7XG4gICAgICB9XG4gICAgICBpZiAobWF0Y2hpbmdUZW1wbGF0ZUluZGV4ICE9PSAtMSkge1xuICAgICAgICBjb25zdCBuZXh0TENvbnRhaW5lckluZGV4ID0gSEVBREVSX09GRlNFVCArIG1hdGNoaW5nVGVtcGxhdGVJbmRleDtcbiAgICAgICAgY29uc3QgbmV4dENvbnRhaW5lciA9IGdldExDb250YWluZXIoaG9zdExWaWV3LCBuZXh0TENvbnRhaW5lckluZGV4KTtcbiAgICAgICAgY29uc3QgdGVtcGxhdGVUTm9kZSA9IGdldEV4aXN0aW5nVE5vZGUoaG9zdExWaWV3W1RWSUVXXSwgbmV4dExDb250YWluZXJJbmRleCk7XG4gICAgICAgIGNvbnN0IGRlaHlkcmF0ZWRWaWV3ID0gZmluZEFuZFJlY29uY2lsZU1hdGNoaW5nRGVoeWRyYXRlZFZpZXdzKG5leHRDb250YWluZXIsIHRlbXBsYXRlVE5vZGUsIGhvc3RMVmlldyk7XG4gICAgICAgIGNvbnN0IGVtYmVkZGVkTFZpZXcgPSBjcmVhdGVBbmRSZW5kZXJFbWJlZGRlZExWaWV3KGhvc3RMVmlldywgdGVtcGxhdGVUTm9kZSwgY29udGV4dFZhbHVlLCB7XG4gICAgICAgICAgZGVoeWRyYXRlZFZpZXdcbiAgICAgICAgfSk7XG4gICAgICAgIGFkZExWaWV3VG9MQ29udGFpbmVyKG5leHRDb250YWluZXIsIGVtYmVkZGVkTFZpZXcsIHZpZXdJbkNvbnRhaW5lcklkeCwgc2hvdWxkQWRkVmlld1RvRG9tKHRlbXBsYXRlVE5vZGUsIGRlaHlkcmF0ZWRWaWV3KSk7XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNldEFjdGl2ZUNvbnN1bWVyKHByZXZDb25zdW1lcik7XG4gICAgfVxuICB9IGVsc2UgaWYgKHByZXZDb250YWluZXIgIT09IHVuZGVmaW5lZCkge1xuICAgIGNvbnN0IGxWaWV3ID0gZ2V0TFZpZXdGcm9tTENvbnRhaW5lcihwcmV2Q29udGFpbmVyLCB2aWV3SW5Db250YWluZXJJZHgpO1xuICAgIGlmIChsVmlldyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBsVmlld1tDT05URVhUXSA9IGNvbnRleHRWYWx1ZTtcbiAgICB9XG4gIH1cbn1cbmNsYXNzIFJlcGVhdGVyQ29udGV4dCB7XG4gIGxDb250YWluZXI7XG4gICRpbXBsaWNpdDtcbiAgJGluZGV4O1xuICBjb25zdHJ1Y3RvcihsQ29udGFpbmVyLCAkaW1wbGljaXQsICRpbmRleCkge1xuICAgIHRoaXMubENvbnRhaW5lciA9IGxDb250YWluZXI7XG4gICAgdGhpcy4kaW1wbGljaXQgPSAkaW1wbGljaXQ7XG4gICAgdGhpcy4kaW5kZXggPSAkaW5kZXg7XG4gIH1cbiAgZ2V0ICRjb3VudCgpIHtcbiAgICByZXR1cm4gdGhpcy5sQ29udGFpbmVyLmxlbmd0aCAtIENPTlRBSU5FUl9IRUFERVJfT0ZGU0VUO1xuICB9XG59XG5mdW5jdGlvbiDJtcm1cmVwZWF0ZXJUcmFja0J5SW5kZXgoaW5kZXgpIHtcbiAgcmV0dXJuIGluZGV4O1xufVxuZnVuY3Rpb24gybXJtXJlcGVhdGVyVHJhY2tCeUlkZW50aXR5KF8sIHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZTtcbn1cbmNsYXNzIFJlcGVhdGVyTWV0YWRhdGEge1xuICBoYXNFbXB0eUJsb2NrO1xuICB0cmFja0J5Rm47XG4gIGxpdmVDb2xsZWN0aW9uO1xuICBjb25zdHJ1Y3RvcihoYXNFbXB0eUJsb2NrLCB0cmFja0J5Rm4sIGxpdmVDb2xsZWN0aW9uKSB7XG4gICAgdGhpcy5oYXNFbXB0eUJsb2NrID0gaGFzRW1wdHlCbG9jaztcbiAgICB0aGlzLnRyYWNrQnlGbiA9IHRyYWNrQnlGbjtcbiAgICB0aGlzLmxpdmVDb2xsZWN0aW9uID0gbGl2ZUNvbGxlY3Rpb247XG4gIH1cbn1cbmZ1bmN0aW9uIMm1ybVyZXBlYXRlckNyZWF0ZShpbmRleCwgdGVtcGxhdGVGbiwgZGVjbHMsIHZhcnMsIHRhZ05hbWUsIGF0dHJzSW5kZXgsIHRyYWNrQnlGbiwgdHJhY2tCeVVzZXNDb21wb25lbnRJbnN0YW5jZSwgZW1wdHlUZW1wbGF0ZUZuLCBlbXB0eURlY2xzLCBlbXB0eVZhcnMsIGVtcHR5VGFnTmFtZSwgZW1wdHlBdHRyc0luZGV4KSB7XG4gIHBlcmZvcm1hbmNlTWFya0ZlYXR1cmUoJ05nQ29udHJvbEZsb3cnKTtcbiAgbmdEZXZNb2RlICYmIGFzc2VydEZ1bmN0aW9uKHRyYWNrQnlGbiwgYEEgdHJhY2sgZXhwcmVzc2lvbiBtdXN0IGJlIGEgZnVuY3Rpb24sIHdhcyAke3R5cGVvZiB0cmFja0J5Rm59IGluc3RlYWQuYCk7XG4gIGNvbnN0IGxWaWV3ID0gZ2V0TFZpZXcoKTtcbiAgY29uc3QgdFZpZXcgPSBnZXRUVmlldygpO1xuICBjb25zdCBoYXNFbXB0eUJsb2NrID0gZW1wdHlUZW1wbGF0ZUZuICE9PSB1bmRlZmluZWQ7XG4gIGNvbnN0IGhvc3RMVmlldyA9IGdldExWaWV3KCk7XG4gIGNvbnN0IGJvdW5kVHJhY2tCeSA9IHRyYWNrQnlVc2VzQ29tcG9uZW50SW5zdGFuY2UgPyB0cmFja0J5Rm4uYmluZChob3N0TFZpZXdbREVDTEFSQVRJT05fQ09NUE9ORU5UX1ZJRVddW0NPTlRFWFRdKSA6IHRyYWNrQnlGbjtcbiAgY29uc3QgbWV0YWRhdGEgPSBuZXcgUmVwZWF0ZXJNZXRhZGF0YShoYXNFbXB0eUJsb2NrLCBib3VuZFRyYWNrQnkpO1xuICBob3N0TFZpZXdbSEVBREVSX09GRlNFVCArIGluZGV4XSA9IG1ldGFkYXRhO1xuICBkZWNsYXJlTm9EaXJlY3RpdmVIb3N0VGVtcGxhdGUobFZpZXcsIHRWaWV3LCBpbmRleCArIDEsIHRlbXBsYXRlRm4sIGRlY2xzLCB2YXJzLCB0YWdOYW1lLCBnZXRDb25zdGFudCh0Vmlldy5jb25zdHMsIGF0dHJzSW5kZXgpLCAyNTYpO1xuICBpZiAoaGFzRW1wdHlCbG9jaykge1xuICAgIG5nRGV2TW9kZSAmJiBhc3NlcnREZWZpbmVkKGVtcHR5RGVjbHMsICdNaXNzaW5nIG51bWJlciBvZiBkZWNsYXJhdGlvbnMgZm9yIHRoZSBlbXB0eSByZXBlYXRlciBibG9jay4nKTtcbiAgICBuZ0Rldk1vZGUgJiYgYXNzZXJ0RGVmaW5lZChlbXB0eVZhcnMsICdNaXNzaW5nIG51bWJlciBvZiBiaW5kaW5ncyBmb3IgdGhlIGVtcHR5IHJlcGVhdGVyIGJsb2NrLicpO1xuICAgIGRlY2xhcmVOb0RpcmVjdGl2ZUhvc3RUZW1wbGF0ZShsVmlldywgdFZpZXcsIGluZGV4ICsgMiwgZW1wdHlUZW1wbGF0ZUZuLCBlbXB0eURlY2xzLCBlbXB0eVZhcnMsIGVtcHR5VGFnTmFtZSwgZ2V0Q29uc3RhbnQodFZpZXcuY29uc3RzLCBlbXB0eUF0dHJzSW5kZXgpLCA1MTIpO1xuICB9XG59XG5mdW5jdGlvbiBpc1ZpZXdFeHBlbnNpdmVUb1JlY3JlYXRlKGxWaWV3KSB7XG4gIHJldHVybiBsVmlldy5sZW5ndGggLSBIRUFERVJfT0ZGU0VUID4gMjtcbn1cbmNsYXNzIE9wZXJhdGlvbnNDb3VudGVyIHtcbiAgY3JlYXRlZCA9IDA7XG4gIGRlc3Ryb3llZCA9IDA7XG4gIHJlc2V0KCkge1xuICAgIHRoaXMuY3JlYXRlZCA9IDA7XG4gICAgdGhpcy5kZXN0cm95ZWQgPSAwO1xuICB9XG4gIHJlY29yZENyZWF0ZSgpIHtcbiAgICB0aGlzLmNyZWF0ZWQrKztcbiAgfVxuICByZWNvcmREZXN0cm95KCkge1xuICAgIHRoaXMuZGVzdHJveWVkKys7XG4gIH1cbiAgd2FzUmVDcmVhdGVkKGNvbGxlY3Rpb25MZW4pIHtcbiAgICByZXR1cm4gY29sbGVjdGlvbkxlbiA+IDAgJiYgdGhpcy5jcmVhdGVkID09PSB0aGlzLmRlc3Ryb3llZCAmJiB0aGlzLmNyZWF0ZWQgPT09IGNvbGxlY3Rpb25MZW47XG4gIH1cbn1cbmNsYXNzIExpdmVDb2xsZWN0aW9uTENvbnRhaW5lckltcGwgZXh0ZW5kcyBMaXZlQ29sbGVjdGlvbiB7XG4gIGxDb250YWluZXI7XG4gIGhvc3RMVmlldztcbiAgdGVtcGxhdGVUTm9kZTtcbiAgb3BlcmF0aW9uc0NvdW50ZXIgPSBuZ0Rldk1vZGUgPyAvKiNfX1BVUkVfXyovbmV3IE9wZXJhdGlvbnNDb3VudGVyKCkgOiB1bmRlZmluZWQ7XG4gIG5lZWRzSW5kZXhVcGRhdGUgPSBmYWxzZTtcbiAgY29uc3RydWN0b3IobENvbnRhaW5lciwgaG9zdExWaWV3LCB0ZW1wbGF0ZVROb2RlKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmxDb250YWluZXIgPSBsQ29udGFpbmVyO1xuICAgIHRoaXMuaG9zdExWaWV3ID0gaG9zdExWaWV3O1xuICAgIHRoaXMudGVtcGxhdGVUTm9kZSA9IHRlbXBsYXRlVE5vZGU7XG4gIH1cbiAgZ2V0IGxlbmd0aCgpIHtcbiAgICByZXR1cm4gdGhpcy5sQ29udGFpbmVyLmxlbmd0aCAtIENPTlRBSU5FUl9IRUFERVJfT0ZGU0VUO1xuICB9XG4gIGF0KGluZGV4KSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TFZpZXcoaW5kZXgpW0NPTlRFWFRdLiRpbXBsaWNpdDtcbiAgfVxuICBhdHRhY2goaW5kZXgsIGxWaWV3KSB7XG4gICAgY29uc3QgZGVoeWRyYXRlZFZpZXcgPSBsVmlld1tIWURSQVRJT05dO1xuICAgIHRoaXMubmVlZHNJbmRleFVwZGF0ZSB8fD0gaW5kZXggIT09IHRoaXMubGVuZ3RoO1xuICAgIGFkZExWaWV3VG9MQ29udGFpbmVyKHRoaXMubENvbnRhaW5lciwgbFZpZXcsIGluZGV4LCBzaG91bGRBZGRWaWV3VG9Eb20odGhpcy50ZW1wbGF0ZVROb2RlLCBkZWh5ZHJhdGVkVmlldykpO1xuICAgIGNsZWFyRGV0YWNoQW5pbWF0aW9uTGlzdCh0aGlzLmxDb250YWluZXIsIGluZGV4KTtcbiAgfVxuICBkZXRhY2goaW5kZXgpIHtcbiAgICB0aGlzLm5lZWRzSW5kZXhVcGRhdGUgfHw9IGluZGV4ICE9PSB0aGlzLmxlbmd0aCAtIDE7XG4gICAgbWF5YmVJbml0RGV0YWNoQW5pbWF0aW9uTGlzdCh0aGlzLmxDb250YWluZXIsIGluZGV4KTtcbiAgICByZXR1cm4gZGV0YWNoRXhpc3RpbmdWaWV3KHRoaXMubENvbnRhaW5lciwgaW5kZXgpO1xuICB9XG4gIGNyZWF0ZShpbmRleCwgdmFsdWUpIHtcbiAgICBjb25zdCBkZWh5ZHJhdGVkVmlldyA9IGZpbmRNYXRjaGluZ0RlaHlkcmF0ZWRWaWV3KHRoaXMubENvbnRhaW5lciwgdGhpcy50ZW1wbGF0ZVROb2RlLnRWaWV3LnNzcklkKTtcbiAgICBjb25zdCBlbWJlZGRlZExWaWV3ID0gY3JlYXRlQW5kUmVuZGVyRW1iZWRkZWRMVmlldyh0aGlzLmhvc3RMVmlldywgdGhpcy50ZW1wbGF0ZVROb2RlLCBuZXcgUmVwZWF0ZXJDb250ZXh0KHRoaXMubENvbnRhaW5lciwgdmFsdWUsIGluZGV4KSwge1xuICAgICAgZGVoeWRyYXRlZFZpZXdcbiAgICB9KTtcbiAgICBuZ0Rldk1vZGUgJiYgdGhpcy5vcGVyYXRpb25zQ291bnRlcj8ucmVjb3JkQ3JlYXRlKCk7XG4gICAgcmV0dXJuIGVtYmVkZGVkTFZpZXc7XG4gIH1cbiAgZGVzdHJveShsVmlldykge1xuICAgIGRlc3Ryb3lMVmlldyhsVmlld1tUVklFV10sIGxWaWV3KTtcbiAgICBuZ0Rldk1vZGUgJiYgdGhpcy5vcGVyYXRpb25zQ291bnRlcj8ucmVjb3JkRGVzdHJveSgpO1xuICB9XG4gIHVwZGF0ZVZhbHVlKGluZGV4LCB2YWx1ZSkge1xuICAgIHRoaXMuZ2V0TFZpZXcoaW5kZXgpW0NPTlRFWFRdLiRpbXBsaWNpdCA9IHZhbHVlO1xuICB9XG4gIHJlc2V0KCkge1xuICAgIHRoaXMubmVlZHNJbmRleFVwZGF0ZSA9IGZhbHNlO1xuICAgIG5nRGV2TW9kZSAmJiB0aGlzLm9wZXJhdGlvbnNDb3VudGVyPy5yZXNldCgpO1xuICB9XG4gIHVwZGF0ZUluZGV4ZXMoKSB7XG4gICAgaWYgKHRoaXMubmVlZHNJbmRleFVwZGF0ZSkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHRoaXMuZ2V0TFZpZXcoaSlbQ09OVEVYVF0uJGluZGV4ID0gaTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgZ2V0TFZpZXcoaW5kZXgpIHtcbiAgICByZXR1cm4gZ2V0RXhpc3RpbmdMVmlld0Zyb21MQ29udGFpbmVyKHRoaXMubENvbnRhaW5lciwgaW5kZXgpO1xuICB9XG59XG5mdW5jdGlvbiDJtcm1cmVwZWF0ZXIoY29sbGVjdGlvbikge1xuICBjb25zdCBwcmV2Q29uc3VtZXIgPSBzZXRBY3RpdmVDb25zdW1lcihudWxsKTtcbiAgY29uc3QgbWV0YWRhdGFTbG90SWR4ID0gZ2V0U2VsZWN0ZWRJbmRleCgpO1xuICB0cnkge1xuICAgIGNvbnN0IGhvc3RMVmlldyA9IGdldExWaWV3KCk7XG4gICAgY29uc3QgaG9zdFRWaWV3ID0gaG9zdExWaWV3W1RWSUVXXTtcbiAgICBjb25zdCBtZXRhZGF0YSA9IGhvc3RMVmlld1ttZXRhZGF0YVNsb3RJZHhdO1xuICAgIGNvbnN0IGNvbnRhaW5lckluZGV4ID0gbWV0YWRhdGFTbG90SWR4ICsgMTtcbiAgICBjb25zdCBsQ29udGFpbmVyID0gZ2V0TENvbnRhaW5lcihob3N0TFZpZXcsIGNvbnRhaW5lckluZGV4KTtcbiAgICBpZiAobWV0YWRhdGEubGl2ZUNvbGxlY3Rpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgaXRlbVRlbXBsYXRlVE5vZGUgPSBnZXRFeGlzdGluZ1ROb2RlKGhvc3RUVmlldywgY29udGFpbmVySW5kZXgpO1xuICAgICAgbWV0YWRhdGEubGl2ZUNvbGxlY3Rpb24gPSBuZXcgTGl2ZUNvbGxlY3Rpb25MQ29udGFpbmVySW1wbChsQ29udGFpbmVyLCBob3N0TFZpZXcsIGl0ZW1UZW1wbGF0ZVROb2RlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbWV0YWRhdGEubGl2ZUNvbGxlY3Rpb24ucmVzZXQoKTtcbiAgICB9XG4gICAgY29uc3QgbGl2ZUNvbGxlY3Rpb24gPSBtZXRhZGF0YS5saXZlQ29sbGVjdGlvbjtcbiAgICByZWNvbmNpbGUobGl2ZUNvbGxlY3Rpb24sIGNvbGxlY3Rpb24sIG1ldGFkYXRhLnRyYWNrQnlGbiwgcHJldkNvbnN1bWVyKTtcbiAgICBpZiAobmdEZXZNb2RlICYmIG1ldGFkYXRhLnRyYWNrQnlGbiA9PT0gybXJtXJlcGVhdGVyVHJhY2tCeUlkZW50aXR5ICYmIGxpdmVDb2xsZWN0aW9uLm9wZXJhdGlvbnNDb3VudGVyPy53YXNSZUNyZWF0ZWQobGl2ZUNvbGxlY3Rpb24ubGVuZ3RoKSAmJiBpc1ZpZXdFeHBlbnNpdmVUb1JlY3JlYXRlKGdldEV4aXN0aW5nTFZpZXdGcm9tTENvbnRhaW5lcihsQ29udGFpbmVyLCAwKSkpIHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBmb3JtYXRSdW50aW1lRXJyb3IoLTk1NiwgYFRoZSBjb25maWd1cmVkIHRyYWNraW5nIGV4cHJlc3Npb24gKHRyYWNrIGJ5IGlkZW50aXR5KSBjYXVzZWQgcmUtY3JlYXRpb24gb2YgdGhlIGVudGlyZSBjb2xsZWN0aW9uIG9mIHNpemUgJHtsaXZlQ29sbGVjdGlvbi5sZW5ndGh9LiBgICsgJ1RoaXMgaXMgYW4gZXhwZW5zaXZlIG9wZXJhdGlvbiByZXF1aXJpbmcgZGVzdHJ1Y3Rpb24gYW5kIHN1YnNlcXVlbnQgY3JlYXRpb24gb2YgRE9NIG5vZGVzLCBkaXJlY3RpdmVzLCBjb21wb25lbnRzIGV0Yy4gJyArICdQbGVhc2UgcmV2aWV3IHRoZSBcInRyYWNrIGV4cHJlc3Npb25cIiBhbmQgbWFrZSBzdXJlIHRoYXQgaXQgdW5pcXVlbHkgaWRlbnRpZmllcyBpdGVtcyBpbiBhIGNvbGxlY3Rpb24uJyk7XG4gICAgICBjb25zb2xlLndhcm4obWVzc2FnZSk7XG4gICAgfVxuICAgIGxpdmVDb2xsZWN0aW9uLnVwZGF0ZUluZGV4ZXMoKTtcbiAgICBpZiAobWV0YWRhdGEuaGFzRW1wdHlCbG9jaykge1xuICAgICAgY29uc3QgYmluZGluZ0luZGV4ID0gbmV4dEJpbmRpbmdJbmRleCgpO1xuICAgICAgY29uc3QgaXNDb2xsZWN0aW9uRW1wdHkgPSBsaXZlQ29sbGVjdGlvbi5sZW5ndGggPT09IDA7XG4gICAgICBpZiAoYmluZGluZ1VwZGF0ZWQoaG9zdExWaWV3LCBiaW5kaW5nSW5kZXgsIGlzQ29sbGVjdGlvbkVtcHR5KSkge1xuICAgICAgICBjb25zdCBlbXB0eVRlbXBsYXRlSW5kZXggPSBtZXRhZGF0YVNsb3RJZHggKyAyO1xuICAgICAgICBjb25zdCBsQ29udGFpbmVyRm9yRW1wdHkgPSBnZXRMQ29udGFpbmVyKGhvc3RMVmlldywgZW1wdHlUZW1wbGF0ZUluZGV4KTtcbiAgICAgICAgaWYgKGlzQ29sbGVjdGlvbkVtcHR5KSB7XG4gICAgICAgICAgY29uc3QgZW1wdHlUZW1wbGF0ZVROb2RlID0gZ2V0RXhpc3RpbmdUTm9kZShob3N0VFZpZXcsIGVtcHR5VGVtcGxhdGVJbmRleCk7XG4gICAgICAgICAgY29uc3QgZGVoeWRyYXRlZFZpZXcgPSBmaW5kQW5kUmVjb25jaWxlTWF0Y2hpbmdEZWh5ZHJhdGVkVmlld3MobENvbnRhaW5lckZvckVtcHR5LCBlbXB0eVRlbXBsYXRlVE5vZGUsIGhvc3RMVmlldyk7XG4gICAgICAgICAgY29uc3QgZW1iZWRkZWRMVmlldyA9IGNyZWF0ZUFuZFJlbmRlckVtYmVkZGVkTFZpZXcoaG9zdExWaWV3LCBlbXB0eVRlbXBsYXRlVE5vZGUsIHVuZGVmaW5lZCwge1xuICAgICAgICAgICAgZGVoeWRyYXRlZFZpZXdcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBhZGRMVmlld1RvTENvbnRhaW5lcihsQ29udGFpbmVyRm9yRW1wdHksIGVtYmVkZGVkTFZpZXcsIDAsIHNob3VsZEFkZFZpZXdUb0RvbShlbXB0eVRlbXBsYXRlVE5vZGUsIGRlaHlkcmF0ZWRWaWV3KSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKGhvc3RUVmlldy5maXJzdFVwZGF0ZVBhc3MpIHtcbiAgICAgICAgICAgIHJlbW92ZURlaHlkcmF0ZWRWaWV3cyhsQ29udGFpbmVyRm9yRW1wdHkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZW1vdmVMVmlld0Zyb21MQ29udGFpbmVyKGxDb250YWluZXJGb3JFbXB0eSwgMCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgc2V0QWN0aXZlQ29uc3VtZXIocHJldkNvbnN1bWVyKTtcbiAgfVxufVxuZnVuY3Rpb24gZ2V0TENvbnRhaW5lcihsVmlldywgaW5kZXgpIHtcbiAgY29uc3QgbENvbnRhaW5lciA9IGxWaWV3W2luZGV4XTtcbiAgbmdEZXZNb2RlICYmIGFzc2VydExDb250YWluZXIobENvbnRhaW5lcik7XG4gIHJldHVybiBsQ29udGFpbmVyO1xufVxuZnVuY3Rpb24gY2xlYXJEZXRhY2hBbmltYXRpb25MaXN0KGxDb250YWluZXIsIGluZGV4KSB7XG4gIGlmIChsQ29udGFpbmVyLmxlbmd0aCA8PSBDT05UQUlORVJfSEVBREVSX09GRlNFVCkgcmV0dXJuO1xuICBjb25zdCBpbmRleEluQ29udGFpbmVyID0gQ09OVEFJTkVSX0hFQURFUl9PRkZTRVQgKyBpbmRleDtcbiAgY29uc3Qgdmlld1RvRGV0YWNoID0gbENvbnRhaW5lcltpbmRleEluQ29udGFpbmVyXTtcbiAgY29uc3QgYW5pbWF0aW9ucyA9IHZpZXdUb0RldGFjaCA/IHZpZXdUb0RldGFjaFtBTklNQVRJT05TXSA6IHVuZGVmaW5lZDtcbiAgaWYgKHZpZXdUb0RldGFjaCAmJiBhbmltYXRpb25zICYmIGFuaW1hdGlvbnMuZGV0YWNoZWRMZWF2ZUFuaW1hdGlvbkZucyAmJiBhbmltYXRpb25zLmRldGFjaGVkTGVhdmVBbmltYXRpb25GbnMubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IGluamVjdG9yID0gdmlld1RvRGV0YWNoW0lOSkVDVE9SXTtcbiAgICByZW1vdmVGcm9tQW5pbWF0aW9uUXVldWUoaW5qZWN0b3IsIGFuaW1hdGlvbnMpO1xuICAgIGFsbExlYXZpbmdBbmltYXRpb25zLmRlbGV0ZSh2aWV3VG9EZXRhY2hbSURdKTtcbiAgICBhbmltYXRpb25zLmRldGFjaGVkTGVhdmVBbmltYXRpb25GbnMgPSB1bmRlZmluZWQ7XG4gIH1cbn1cbmZ1bmN0aW9uIG1heWJlSW5pdERldGFjaEFuaW1hdGlvbkxpc3QobENvbnRhaW5lciwgaW5kZXgpIHtcbiAgaWYgKGxDb250YWluZXIubGVuZ3RoIDw9IENPTlRBSU5FUl9IRUFERVJfT0ZGU0VUKSByZXR1cm47XG4gIGNvbnN0IGluZGV4SW5Db250YWluZXIgPSBDT05UQUlORVJfSEVBREVSX09GRlNFVCArIGluZGV4O1xuICBjb25zdCB2aWV3VG9EZXRhY2ggPSBsQ29udGFpbmVyW2luZGV4SW5Db250YWluZXJdO1xuICBjb25zdCBhbmltYXRpb25zID0gdmlld1RvRGV0YWNoID8gdmlld1RvRGV0YWNoW0FOSU1BVElPTlNdIDogdW5kZWZpbmVkO1xuICBpZiAoYW5pbWF0aW9ucyAmJiBhbmltYXRpb25zLmxlYXZlICYmIGFuaW1hdGlvbnMubGVhdmUuc2l6ZSA+IDApIHtcbiAgICBhbmltYXRpb25zLmRldGFjaGVkTGVhdmVBbmltYXRpb25GbnMgPSBbXTtcbiAgfVxufVxuZnVuY3Rpb24gZGV0YWNoRXhpc3RpbmdWaWV3KGxDb250YWluZXIsIGluZGV4KSB7XG4gIGNvbnN0IGV4aXN0aW5nTFZpZXcgPSBkZXRhY2hWaWV3KGxDb250YWluZXIsIGluZGV4KTtcbiAgbmdEZXZNb2RlICYmIGFzc2VydExWaWV3KGV4aXN0aW5nTFZpZXcpO1xuICByZXR1cm4gZXhpc3RpbmdMVmlldztcbn1cbmZ1bmN0aW9uIGdldEV4aXN0aW5nTFZpZXdGcm9tTENvbnRhaW5lcihsQ29udGFpbmVyLCBpbmRleCkge1xuICBjb25zdCBleGlzdGluZ0xWaWV3ID0gZ2V0TFZpZXdGcm9tTENvbnRhaW5lcihsQ29udGFpbmVyLCBpbmRleCk7XG4gIG5nRGV2TW9kZSAmJiBhc3NlcnRMVmlldyhleGlzdGluZ0xWaWV3KTtcbiAgcmV0dXJuIGV4aXN0aW5nTFZpZXc7XG59XG5mdW5jdGlvbiBnZXRFeGlzdGluZ1ROb2RlKHRWaWV3LCBpbmRleCkge1xuICBjb25zdCB0Tm9kZSA9IGdldFROb2RlKHRWaWV3LCBpbmRleCk7XG4gIG5nRGV2TW9kZSAmJiBhc3NlcnRUTm9kZSh0Tm9kZSk7XG4gIHJldHVybiB0Tm9kZTtcbn1cbmZ1bmN0aW9uIMm1ybVwcm9wZXJ0eShwcm9wTmFtZSwgdmFsdWUsIHNhbml0aXplcikge1xuICBjb25zdCBsVmlldyA9IGdldExWaWV3KCk7XG4gIGNvbnN0IGJpbmRpbmdJbmRleCA9IG5leHRCaW5kaW5nSW5kZXgoKTtcbiAgaWYgKGJpbmRpbmdVcGRhdGVkKGxWaWV3LCBiaW5kaW5nSW5kZXgsIHZhbHVlKSkge1xuICAgIGNvbnN0IHRWaWV3ID0gZ2V0VFZpZXcoKTtcbiAgICBjb25zdCB0Tm9kZSA9IGdldFNlbGVjdGVkVE5vZGUoKTtcbiAgICBzZXRQcm9wZXJ0eUFuZElucHV0cyh0Tm9kZSwgbFZpZXcsIHByb3BOYW1lLCB2YWx1ZSwgbFZpZXdbUkVOREVSRVJdLCBzYW5pdGl6ZXIpO1xuICAgIG5nRGV2TW9kZSAmJiBzdG9yZVByb3BlcnR5QmluZGluZ01ldGFkYXRhKHRWaWV3LmRhdGEsIHROb2RlLCBwcm9wTmFtZSwgYmluZGluZ0luZGV4KTtcbiAgfVxuICByZXR1cm4gybXJtXByb3BlcnR5O1xufVxuZnVuY3Rpb24gc2V0RGlyZWN0aXZlSW5wdXRzV2hpY2hTaGFkb3dzU3R5bGluZyh0VmlldywgdE5vZGUsIGxWaWV3LCB2YWx1ZSwgaXNDbGFzc0Jhc2VkKSB7XG4gIHNldEFsbElucHV0c0ZvclByb3BlcnR5KHROb2RlLCB0VmlldywgbFZpZXcsIGlzQ2xhc3NCYXNlZCA/ICdjbGFzcycgOiAnc3R5bGUnLCB2YWx1ZSk7XG59XG5mdW5jdGlvbiDJtcm1ZWxlbWVudFN0YXJ0KGluZGV4LCBuYW1lLCBhdHRyc0luZGV4LCBsb2NhbFJlZnNJbmRleCkge1xuICBjb25zdCBsVmlldyA9IGdldExWaWV3KCk7XG4gIG5nRGV2TW9kZSAmJiBhc3NlcnRUTm9kZUNyZWF0aW9uSW5kZXgobFZpZXcsIGluZGV4KTtcbiAgY29uc3QgdFZpZXcgPSBsVmlld1tUVklFV107XG4gIGNvbnN0IGFkanVzdGVkSW5kZXggPSBpbmRleCArIEhFQURFUl9PRkZTRVQ7XG4gIGNvbnN0IHROb2RlID0gdFZpZXcuZmlyc3RDcmVhdGVQYXNzID8gZGlyZWN0aXZlSG9zdEZpcnN0Q3JlYXRlUGFzcyhhZGp1c3RlZEluZGV4LCBsVmlldywgMiwgbmFtZSwgZmluZERpcmVjdGl2ZURlZk1hdGNoZXMsIGdldEJpbmRpbmdzRW5hYmxlZCgpLCBhdHRyc0luZGV4LCBsb2NhbFJlZnNJbmRleCkgOiB0Vmlldy5kYXRhW2FkanVzdGVkSW5kZXhdO1xuICBpZiAoaXNDb21wb25lbnRIb3N0KHROb2RlKSkge1xuICAgIGNvbnN0IHRyYWNpbmdTZXJ2aWNlID0gbFZpZXdbRU5WSVJPTk1FTlRdLnRyYWNpbmdTZXJ2aWNlO1xuICAgIGlmICh0cmFjaW5nU2VydmljZSAmJiB0cmFjaW5nU2VydmljZS5jb21wb25lbnRDcmVhdGUpIHtcbiAgICAgIGNvbnN0IGRlZiA9IHRWaWV3LmRhdGFbdE5vZGUuZGlyZWN0aXZlU3RhcnQgKyB0Tm9kZS5jb21wb25lbnRPZmZzZXRdO1xuICAgICAgcmV0dXJuIHRyYWNpbmdTZXJ2aWNlLmNvbXBvbmVudENyZWF0ZShnZXRDb21wb25lbnROYW1lKGRlZiksICgpID0+IHtcbiAgICAgICAgaW5pdGlhbGl6ZUVsZW1lbnQoaW5kZXgsIG5hbWUsIGxWaWV3LCB0Tm9kZSwgbG9jYWxSZWZzSW5kZXgpO1xuICAgICAgICByZXR1cm4gybXJtWVsZW1lbnRTdGFydDtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICBpbml0aWFsaXplRWxlbWVudChpbmRleCwgbmFtZSwgbFZpZXcsIHROb2RlLCBsb2NhbFJlZnNJbmRleCk7XG4gIHJldHVybiDJtcm1ZWxlbWVudFN0YXJ0O1xufVxuZnVuY3Rpb24gaW5pdGlhbGl6ZUVsZW1lbnQoaW5kZXgsIG5hbWUsIGxWaWV3LCB0Tm9kZSwgbG9jYWxSZWZzSW5kZXgpIHtcbiAgZWxlbWVudExpa2VTdGFydFNoYXJlZCh0Tm9kZSwgbFZpZXcsIGluZGV4LCBuYW1lLCBfbG9jYXRlT3JDcmVhdGVFbGVtZW50Tm9kZSk7XG4gIGlmIChpc0RpcmVjdGl2ZUhvc3QodE5vZGUpKSB7XG4gICAgY29uc3QgdFZpZXcgPSBsVmlld1tUVklFV107XG4gICAgY3JlYXRlRGlyZWN0aXZlc0luc3RhbmNlcyh0VmlldywgbFZpZXcsIHROb2RlKTtcbiAgICBleGVjdXRlQ29udGVudFF1ZXJpZXModFZpZXcsIHROb2RlLCBsVmlldyk7XG4gIH1cbiAgaWYgKGxvY2FsUmVmc0luZGV4ICE9IG51bGwpIHtcbiAgICBzYXZlUmVzb2x2ZWRMb2NhbHNJbkRhdGEobFZpZXcsIHROb2RlKTtcbiAgfVxuICBpZiAobmdEZXZNb2RlICYmIGxWaWV3W1RWSUVXXS5maXJzdENyZWF0ZVBhc3MpIHtcbiAgICB2YWxpZGF0ZUVsZW1lbnRJc0tub3duKGxWaWV3LCB0Tm9kZSk7XG4gIH1cbn1cbmZ1bmN0aW9uIMm1ybVlbGVtZW50RW5kKCkge1xuICBjb25zdCB0VmlldyA9IGdldFRWaWV3KCk7XG4gIGNvbnN0IGluaXRpYWxUTm9kZSA9IGdldEN1cnJlbnRUTm9kZSgpO1xuICBuZ0Rldk1vZGUgJiYgYXNzZXJ0RGVmaW5lZChpbml0aWFsVE5vZGUsICdObyBwYXJlbnQgbm9kZSB0byBjbG9zZS4nKTtcbiAgY29uc3QgY3VycmVudFROb2RlID0gZWxlbWVudExpa2VFbmRTaGFyZWQoaW5pdGlhbFROb2RlKTtcbiAgbmdEZXZNb2RlICYmIGFzc2VydFROb2RlVHlwZShjdXJyZW50VE5vZGUsIDMpO1xuICBpZiAodFZpZXcuZmlyc3RDcmVhdGVQYXNzKSB7XG4gICAgZGlyZWN0aXZlSG9zdEVuZEZpcnN0Q3JlYXRlUGFzcyh0VmlldywgY3VycmVudFROb2RlKTtcbiAgfVxuICBpZiAoaXNTa2lwSHlkcmF0aW9uUm9vdFROb2RlKGN1cnJlbnRUTm9kZSkpIHtcbiAgICBsZWF2ZVNraXBIeWRyYXRpb25CbG9jaygpO1xuICB9XG4gIGRlY3JlYXNlRWxlbWVudERlcHRoQ291bnQoKTtcbiAgaWYgKGN1cnJlbnRUTm9kZS5jbGFzc2VzV2l0aG91dEhvc3QgIT0gbnVsbCAmJiBoYXNDbGFzc0lucHV0KGN1cnJlbnRUTm9kZSkpIHtcbiAgICBzZXREaXJlY3RpdmVJbnB1dHNXaGljaFNoYWRvd3NTdHlsaW5nKHRWaWV3LCBjdXJyZW50VE5vZGUsIGdldExWaWV3KCksIGN1cnJlbnRUTm9kZS5jbGFzc2VzV2l0aG91dEhvc3QsIHRydWUpO1xuICB9XG4gIGlmIChjdXJyZW50VE5vZGUuc3R5bGVzV2l0aG91dEhvc3QgIT0gbnVsbCAmJiBoYXNTdHlsZUlucHV0KGN1cnJlbnRUTm9kZSkpIHtcbiAgICBzZXREaXJlY3RpdmVJbnB1dHNXaGljaFNoYWRvd3NTdHlsaW5nKHRWaWV3LCBjdXJyZW50VE5vZGUsIGdldExWaWV3KCksIGN1cnJlbnRUTm9kZS5zdHlsZXNXaXRob3V0SG9zdCwgZmFsc2UpO1xuICB9XG4gIHJldHVybiDJtcm1ZWxlbWVudEVuZDtcbn1cbmZ1bmN0aW9uIMm1ybVlbGVtZW50KGluZGV4LCBuYW1lLCBhdHRyc0luZGV4LCBsb2NhbFJlZnNJbmRleCkge1xuICDJtcm1ZWxlbWVudFN0YXJ0KGluZGV4LCBuYW1lLCBhdHRyc0luZGV4LCBsb2NhbFJlZnNJbmRleCk7XG4gIMm1ybVlbGVtZW50RW5kKCk7XG4gIHJldHVybiDJtcm1ZWxlbWVudDtcbn1cbmZ1bmN0aW9uIMm1ybVkb21FbGVtZW50U3RhcnQoaW5kZXgsIG5hbWUsIGF0dHJzSW5kZXgsIGxvY2FsUmVmc0luZGV4KSB7XG4gIGNvbnN0IGxWaWV3ID0gZ2V0TFZpZXcoKTtcbiAgbmdEZXZNb2RlICYmIGFzc2VydFROb2RlQ3JlYXRpb25JbmRleChsVmlldywgaW5kZXgpO1xuICBjb25zdCB0VmlldyA9IGxWaWV3W1RWSUVXXTtcbiAgY29uc3QgYWRqdXN0ZWRJbmRleCA9IGluZGV4ICsgSEVBREVSX09GRlNFVDtcbiAgY29uc3QgdE5vZGUgPSB0Vmlldy5maXJzdENyZWF0ZVBhc3MgPyBkb21Pbmx5Rmlyc3RDcmVhdGVQYXNzKGFkanVzdGVkSW5kZXgsIHRWaWV3LCAyLCBuYW1lLCBhdHRyc0luZGV4LCBsb2NhbFJlZnNJbmRleCkgOiB0Vmlldy5kYXRhW2FkanVzdGVkSW5kZXhdO1xuICBlbGVtZW50TGlrZVN0YXJ0U2hhcmVkKHROb2RlLCBsVmlldywgaW5kZXgsIG5hbWUsIF9sb2NhdGVPckNyZWF0ZUVsZW1lbnROb2RlKTtcbiAgaWYgKGxvY2FsUmVmc0luZGV4ICE9IG51bGwpIHtcbiAgICBzYXZlUmVzb2x2ZWRMb2NhbHNJbkRhdGEobFZpZXcsIHROb2RlKTtcbiAgfVxuICBpZiAobmdEZXZNb2RlICYmIGxWaWV3W1RWSUVXXS5maXJzdENyZWF0ZVBhc3MpIHtcbiAgICB2YWxpZGF0ZUVsZW1lbnRJc0tub3duKGxWaWV3LCB0Tm9kZSk7XG4gIH1cbiAgcmV0dXJuIMm1ybVkb21FbGVtZW50U3RhcnQ7XG59XG5mdW5jdGlvbiDJtcm1ZG9tRWxlbWVudEVuZCgpIHtcbiAgY29uc3QgaW5pdGlhbFROb2RlID0gZ2V0Q3VycmVudFROb2RlKCk7XG4gIG5nRGV2TW9kZSAmJiBhc3NlcnREZWZpbmVkKGluaXRpYWxUTm9kZSwgJ05vIHBhcmVudCBub2RlIHRvIGNsb3NlLicpO1xuICBjb25zdCBjdXJyZW50VE5vZGUgPSBlbGVtZW50TGlrZUVuZFNoYXJlZChpbml0aWFsVE5vZGUpO1xuICBuZ0Rldk1vZGUgJiYgYXNzZXJ0VE5vZGVUeXBlKGN1cnJlbnRUTm9kZSwgMyk7XG4gIGlmIChpc1NraXBIeWRyYXRpb25Sb290VE5vZGUoY3VycmVudFROb2RlKSkge1xuICAgIGxlYXZlU2tpcEh5ZHJhdGlvbkJsb2NrKCk7XG4gIH1cbiAgZGVjcmVhc2VFbGVtZW50RGVwdGhDb3VudCgpO1xuICByZXR1cm4gybXJtWRvbUVsZW1lbnRFbmQ7XG59XG5mdW5jdGlvbiDJtcm1ZG9tRWxlbWVudChpbmRleCwgbmFtZSwgYXR0cnNJbmRleCwgbG9jYWxSZWZzSW5kZXgpIHtcbiAgybXJtWRvbUVsZW1lbnRTdGFydChpbmRleCwgbmFtZSwgYXR0cnNJbmRleCwgbG9jYWxSZWZzSW5kZXgpO1xuICDJtcm1ZG9tRWxlbWVudEVuZCgpO1xuICByZXR1cm4gybXJtWRvbUVsZW1lbnQ7XG59XG5sZXQgX2xvY2F0ZU9yQ3JlYXRlRWxlbWVudE5vZGUgPSAodFZpZXcsIGxWaWV3LCB0Tm9kZSwgbmFtZSwgaW5kZXgpID0+IHtcbiAgbGFzdE5vZGVXYXNDcmVhdGVkKHRydWUpO1xuICByZXR1cm4gY3JlYXRlRWxlbWVudE5vZGUobFZpZXdbUkVOREVSRVJdLCBuYW1lLCBnZXROYW1lc3BhY2UoKSk7XG59O1xuZnVuY3Rpb24gbG9jYXRlT3JDcmVhdGVFbGVtZW50Tm9kZUltcGwodFZpZXcsIGxWaWV3LCB0Tm9kZSwgbmFtZSwgaW5kZXgpIHtcbiAgY29uc3QgaXNOb2RlQ3JlYXRpb25Nb2RlID0gIWNhbkh5ZHJhdGVOb2RlKGxWaWV3LCB0Tm9kZSk7XG4gIGxhc3ROb2RlV2FzQ3JlYXRlZChpc05vZGVDcmVhdGlvbk1vZGUpO1xuICBpZiAoaXNOb2RlQ3JlYXRpb25Nb2RlKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUVsZW1lbnROb2RlKGxWaWV3W1JFTkRFUkVSXSwgbmFtZSwgZ2V0TmFtZXNwYWNlKCkpO1xuICB9XG4gIGNvbnN0IGh5ZHJhdGlvbkluZm8gPSBsVmlld1tIWURSQVRJT05dO1xuICBjb25zdCBuYXRpdmUgPSBsb2NhdGVOZXh0Uk5vZGUoaHlkcmF0aW9uSW5mbywgdFZpZXcsIGxWaWV3LCB0Tm9kZSk7XG4gIG5nRGV2TW9kZSAmJiB2YWxpZGF0ZU1hdGNoaW5nTm9kZShuYXRpdmUsIE5vZGUuRUxFTUVOVF9OT0RFLCBuYW1lLCBsVmlldywgdE5vZGUpO1xuICBuZ0Rldk1vZGUgJiYgbWFya1JOb2RlQXNDbGFpbWVkQnlIeWRyYXRpb24obmF0aXZlKTtcbiAgaWYgKGdldFNlcmlhbGl6ZWRDb250YWluZXJWaWV3cyhoeWRyYXRpb25JbmZvLCBpbmRleCkpIHtcbiAgICBuZ0Rldk1vZGUgJiYgdmFsaWRhdGVOb2RlRXhpc3RzKG5hdGl2ZS5uZXh0U2libGluZywgbFZpZXcsIHROb2RlKTtcbiAgICBzZXRTZWdtZW50SGVhZChoeWRyYXRpb25JbmZvLCBpbmRleCwgbmF0aXZlLm5leHRTaWJsaW5nKTtcbiAgfVxuICBpZiAoaHlkcmF0aW9uSW5mbyAmJiAoaGFzU2tpcEh5ZHJhdGlvbkF0dHJPblROb2RlKHROb2RlKSB8fCBoYXNTa2lwSHlkcmF0aW9uQXR0ck9uUkVsZW1lbnQobmF0aXZlKSkpIHtcbiAgICBpZiAoaXNDb21wb25lbnRIb3N0KHROb2RlKSkge1xuICAgICAgZW50ZXJTa2lwSHlkcmF0aW9uQmxvY2sodE5vZGUpO1xuICAgICAgY2xlYXJFbGVtZW50Q29udGVudHMobmF0aXZlKTtcbiAgICAgIG5nRGV2TW9kZSAmJiBtYXJrUk5vZGVBc1NraXBwZWRCeUh5ZHJhdGlvbihuYXRpdmUpO1xuICAgIH0gZWxzZSBpZiAobmdEZXZNb2RlKSB7XG4gICAgICB0aHJvdyBpbnZhbGlkU2tpcEh5ZHJhdGlvbkhvc3QobmF0aXZlKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5hdGl2ZTtcbn1cbmZ1bmN0aW9uIGVuYWJsZUxvY2F0ZU9yQ3JlYXRlRWxlbWVudE5vZGVJbXBsKCkge1xuICBfbG9jYXRlT3JDcmVhdGVFbGVtZW50Tm9kZSA9IGxvY2F0ZU9yQ3JlYXRlRWxlbWVudE5vZGVJbXBsO1xufVxuZnVuY3Rpb24gybXJtWVsZW1lbnRDb250YWluZXJTdGFydChpbmRleCwgYXR0cnNJbmRleCwgbG9jYWxSZWZzSW5kZXgpIHtcbiAgY29uc3QgbFZpZXcgPSBnZXRMVmlldygpO1xuICBuZ0Rldk1vZGUgJiYgYXNzZXJ0VE5vZGVDcmVhdGlvbkluZGV4KGxWaWV3LCBpbmRleCk7XG4gIGNvbnN0IHRWaWV3ID0gbFZpZXdbVFZJRVddO1xuICBjb25zdCBhZGp1c3RlZEluZGV4ID0gaW5kZXggKyBIRUFERVJfT0ZGU0VUO1xuICBjb25zdCB0Tm9kZSA9IHRWaWV3LmZpcnN0Q3JlYXRlUGFzcyA/IGRpcmVjdGl2ZUhvc3RGaXJzdENyZWF0ZVBhc3MoYWRqdXN0ZWRJbmRleCwgbFZpZXcsIDgsICduZy1jb250YWluZXInLCBmaW5kRGlyZWN0aXZlRGVmTWF0Y2hlcywgZ2V0QmluZGluZ3NFbmFibGVkKCksIGF0dHJzSW5kZXgsIGxvY2FsUmVmc0luZGV4KSA6IHRWaWV3LmRhdGFbYWRqdXN0ZWRJbmRleF07XG4gIGVsZW1lbnRMaWtlU3RhcnRTaGFyZWQodE5vZGUsIGxWaWV3LCBpbmRleCwgJ25nLWNvbnRhaW5lcicsIF9sb2NhdGVPckNyZWF0ZUVsZW1lbnRDb250YWluZXJOb2RlKTtcbiAgaWYgKGlzRGlyZWN0aXZlSG9zdCh0Tm9kZSkpIHtcbiAgICBjb25zdCB0VmlldyA9IGxWaWV3W1RWSUVXXTtcbiAgICBjcmVhdGVEaXJlY3RpdmVzSW5zdGFuY2VzKHRWaWV3LCBsVmlldywgdE5vZGUpO1xuICAgIGV4ZWN1dGVDb250ZW50UXVlcmllcyh0VmlldywgdE5vZGUsIGxWaWV3KTtcbiAgfVxuICBpZiAobG9jYWxSZWZzSW5kZXggIT0gbnVsbCkge1xuICAgIHNhdmVSZXNvbHZlZExvY2Fsc0luRGF0YShsVmlldywgdE5vZGUpO1xuICB9XG4gIHJldHVybiDJtcm1ZWxlbWVudENvbnRhaW5lclN0YXJ0O1xufVxuZnVuY3Rpb24gybXJtWVsZW1lbnRDb250YWluZXJFbmQoKSB7XG4gIGNvbnN0IHRWaWV3ID0gZ2V0VFZpZXcoKTtcbiAgY29uc3QgaW5pdGlhbFROb2RlID0gZ2V0Q3VycmVudFROb2RlKCk7XG4gIG5nRGV2TW9kZSAmJiBhc3NlcnREZWZpbmVkKGluaXRpYWxUTm9kZSwgJ05vIHBhcmVudCBub2RlIHRvIGNsb3NlLicpO1xuICBjb25zdCBjdXJyZW50VE5vZGUgPSBlbGVtZW50TGlrZUVuZFNoYXJlZChpbml0aWFsVE5vZGUpO1xuICBpZiAodFZpZXcuZmlyc3RDcmVhdGVQYXNzKSB7XG4gICAgZGlyZWN0aXZlSG9zdEVuZEZpcnN0Q3JlYXRlUGFzcyh0VmlldywgY3VycmVudFROb2RlKTtcbiAgfVxuICBuZ0Rldk1vZGUgJiYgYXNzZXJ0VE5vZGVUeXBlKGN1cnJlbnRUTm9kZSwgOCk7XG4gIHJldHVybiDJtcm1ZWxlbWVudENvbnRhaW5lckVuZDtcbn1cbmZ1bmN0aW9uIMm1ybVlbGVtZW50Q29udGFpbmVyKGluZGV4LCBhdHRyc0luZGV4LCBsb2NhbFJlZnNJbmRleCkge1xuICDJtcm1ZWxlbWVudENvbnRhaW5lclN0YXJ0KGluZGV4LCBhdHRyc0luZGV4LCBsb2NhbFJlZnNJbmRleCk7XG4gIMm1ybVlbGVtZW50Q29udGFpbmVyRW5kKCk7XG4gIHJldHVybiDJtcm1ZWxlbWVudENvbnRhaW5lcjtcbn1cbmZ1bmN0aW9uIMm1ybVkb21FbGVtZW50Q29udGFpbmVyU3RhcnQoaW5kZXgsIGF0dHJzSW5kZXgsIGxvY2FsUmVmc0luZGV4KSB7XG4gIGNvbnN0IGxWaWV3ID0gZ2V0TFZpZXcoKTtcbiAgbmdEZXZNb2RlICYmIGFzc2VydFROb2RlQ3JlYXRpb25JbmRleChsVmlldywgaW5kZXgpO1xuICBjb25zdCB0VmlldyA9IGxWaWV3W1RWSUVXXTtcbiAgY29uc3QgYWRqdXN0ZWRJbmRleCA9IGluZGV4ICsgSEVBREVSX09GRlNFVDtcbiAgY29uc3QgdE5vZGUgPSB0Vmlldy5maXJzdENyZWF0ZVBhc3MgPyBkb21Pbmx5Rmlyc3RDcmVhdGVQYXNzKGFkanVzdGVkSW5kZXgsIHRWaWV3LCA4LCAnbmctY29udGFpbmVyJywgYXR0cnNJbmRleCwgbG9jYWxSZWZzSW5kZXgpIDogdFZpZXcuZGF0YVthZGp1c3RlZEluZGV4XTtcbiAgZWxlbWVudExpa2VTdGFydFNoYXJlZCh0Tm9kZSwgbFZpZXcsIGluZGV4LCAnbmctY29udGFpbmVyJywgX2xvY2F0ZU9yQ3JlYXRlRWxlbWVudENvbnRhaW5lck5vZGUpO1xuICBpZiAobG9jYWxSZWZzSW5kZXggIT0gbnVsbCkge1xuICAgIHNhdmVSZXNvbHZlZExvY2Fsc0luRGF0YShsVmlldywgdE5vZGUpO1xuICB9XG4gIHJldHVybiDJtcm1ZG9tRWxlbWVudENvbnRhaW5lclN0YXJ0O1xufVxuZnVuY3Rpb24gybXJtWRvbUVsZW1lbnRDb250YWluZXJFbmQoKSB7XG4gIGNvbnN0IGluaXRpYWxUTm9kZSA9IGdldEN1cnJlbnRUTm9kZSgpO1xuICBuZ0Rldk1vZGUgJiYgYXNzZXJ0RGVmaW5lZChpbml0aWFsVE5vZGUsICdObyBwYXJlbnQgbm9kZSB0byBjbG9zZS4nKTtcbiAgY29uc3QgY3VycmVudFROb2RlID0gZWxlbWVudExpa2VFbmRTaGFyZWQoaW5pdGlhbFROb2RlKTtcbiAgbmdEZXZNb2RlICYmIGFzc2VydFROb2RlVHlwZShjdXJyZW50VE5vZGUsIDgpO1xuICByZXR1cm4gybXJtWVsZW1lbnRDb250YWluZXJFbmQ7XG59XG5mdW5jdGlvbiDJtcm1ZG9tRWxlbWVudENvbnRhaW5lcihpbmRleCwgYXR0cnNJbmRleCwgbG9jYWxSZWZzSW5kZXgpIHtcbiAgybXJtWRvbUVsZW1lbnRDb250YWluZXJTdGFydChpbmRleCwgYXR0cnNJbmRleCwgbG9jYWxSZWZzSW5kZXgpO1xuICDJtcm1ZG9tRWxlbWVudENvbnRhaW5lckVuZCgpO1xuICByZXR1cm4gybXJtWRvbUVsZW1lbnRDb250YWluZXI7XG59XG5sZXQgX2xvY2F0ZU9yQ3JlYXRlRWxlbWVudENvbnRhaW5lck5vZGUgPSAodFZpZXcsIGxWaWV3LCB0Tm9kZSwgY29tbWVudFRleHQsIGluZGV4KSA9PiB7XG4gIGxhc3ROb2RlV2FzQ3JlYXRlZCh0cnVlKTtcbiAgcmV0dXJuIGNyZWF0ZUNvbW1lbnROb2RlKGxWaWV3W1JFTkRFUkVSXSwgbmdEZXZNb2RlID8gY29tbWVudFRleHQgOiAnJyk7XG59O1xuZnVuY3Rpb24gbG9jYXRlT3JDcmVhdGVFbGVtZW50Q29udGFpbmVyTm9kZSh0VmlldywgbFZpZXcsIHROb2RlLCBjb21tZW50VGV4dCwgaW5kZXgpIHtcbiAgbGV0IGNvbW1lbnQ7XG4gIGNvbnN0IGlzTm9kZUNyZWF0aW9uTW9kZSA9ICFjYW5IeWRyYXRlTm9kZShsVmlldywgdE5vZGUpO1xuICBsYXN0Tm9kZVdhc0NyZWF0ZWQoaXNOb2RlQ3JlYXRpb25Nb2RlKTtcbiAgaWYgKGlzTm9kZUNyZWF0aW9uTW9kZSkge1xuICAgIHJldHVybiBjcmVhdGVDb21tZW50Tm9kZShsVmlld1tSRU5ERVJFUl0sIG5nRGV2TW9kZSA/IGNvbW1lbnRUZXh0IDogJycpO1xuICB9XG4gIGNvbnN0IGh5ZHJhdGlvbkluZm8gPSBsVmlld1tIWURSQVRJT05dO1xuICBjb25zdCBjdXJyZW50Uk5vZGUgPSBsb2NhdGVOZXh0Uk5vZGUoaHlkcmF0aW9uSW5mbywgdFZpZXcsIGxWaWV3LCB0Tm9kZSk7XG4gIG5nRGV2TW9kZSAmJiB2YWxpZGF0ZU5vZGVFeGlzdHMoY3VycmVudFJOb2RlLCBsVmlldywgdE5vZGUpO1xuICBjb25zdCBuZ0NvbnRhaW5lclNpemUgPSBnZXROZ0NvbnRhaW5lclNpemUoaHlkcmF0aW9uSW5mbywgaW5kZXgpO1xuICBuZ0Rldk1vZGUgJiYgYXNzZXJ0TnVtYmVyKG5nQ29udGFpbmVyU2l6ZSwgJ1VuZXhwZWN0ZWQgc3RhdGU6IGh5ZHJhdGluZyBhbiA8bmctY29udGFpbmVyPiwgJyArICdidXQgbm8gaHlkcmF0aW9uIGluZm8gaXMgYXZhaWxhYmxlLicpO1xuICBzZXRTZWdtZW50SGVhZChoeWRyYXRpb25JbmZvLCBpbmRleCwgY3VycmVudFJOb2RlKTtcbiAgY29tbWVudCA9IHNpYmxpbmdBZnRlcihuZ0NvbnRhaW5lclNpemUsIGN1cnJlbnRSTm9kZSk7XG4gIGlmIChuZ0Rldk1vZGUpIHtcbiAgICB2YWxpZGF0ZU1hdGNoaW5nTm9kZShjb21tZW50LCBOb2RlLkNPTU1FTlRfTk9ERSwgbnVsbCwgbFZpZXcsIHROb2RlKTtcbiAgICBtYXJrUk5vZGVBc0NsYWltZWRCeUh5ZHJhdGlvbihjb21tZW50KTtcbiAgfVxuICByZXR1cm4gY29tbWVudDtcbn1cbmZ1bmN0aW9uIGVuYWJsZUxvY2F0ZU9yQ3JlYXRlRWxlbWVudENvbnRhaW5lck5vZGVJbXBsKCkge1xuICBfbG9jYXRlT3JDcmVhdGVFbGVtZW50Q29udGFpbmVyTm9kZSA9IGxvY2F0ZU9yQ3JlYXRlRWxlbWVudENvbnRhaW5lck5vZGU7XG59XG5mdW5jdGlvbiDJtcm1Z2V0Q3VycmVudFZpZXcoKSB7XG4gIHJldHVybiBnZXRMVmlldygpO1xufVxuZnVuY3Rpb24gybXJtWRvbVByb3BlcnR5KHByb3BOYW1lLCB2YWx1ZSwgc2FuaXRpemVyKSB7XG4gIGNvbnN0IGxWaWV3ID0gZ2V0TFZpZXcoKTtcbiAgY29uc3QgYmluZGluZ0luZGV4ID0gbmV4dEJpbmRpbmdJbmRleCgpO1xuICBpZiAoYmluZGluZ1VwZGF0ZWQobFZpZXcsIGJpbmRpbmdJbmRleCwgdmFsdWUpKSB7XG4gICAgY29uc3QgdFZpZXcgPSBnZXRUVmlldygpO1xuICAgIGNvbnN0IHROb2RlID0gZ2V0U2VsZWN0ZWRUTm9kZSgpO1xuICAgIHNldERvbVByb3BlcnR5KHROb2RlLCBsVmlldywgcHJvcE5hbWUsIHZhbHVlLCBsVmlld1tSRU5ERVJFUl0sIHNhbml0aXplcik7XG4gICAgbmdEZXZNb2RlICYmIHN0b3JlUHJvcGVydHlCaW5kaW5nTWV0YWRhdGEodFZpZXcuZGF0YSwgdE5vZGUsIHByb3BOYW1lLCBiaW5kaW5nSW5kZXgpO1xuICB9XG4gIHJldHVybiDJtcm1ZG9tUHJvcGVydHk7XG59XG5mdW5jdGlvbiDJtcm1c3ludGhldGljSG9zdFByb3BlcnR5KHByb3BOYW1lLCB2YWx1ZSwgc2FuaXRpemVyKSB7XG4gIGNvbnN0IGxWaWV3ID0gZ2V0TFZpZXcoKTtcbiAgY29uc3QgYmluZGluZ0luZGV4ID0gbmV4dEJpbmRpbmdJbmRleCgpO1xuICBpZiAoYmluZGluZ1VwZGF0ZWQobFZpZXcsIGJpbmRpbmdJbmRleCwgdmFsdWUpKSB7XG4gICAgY29uc3QgdFZpZXcgPSBnZXRUVmlldygpO1xuICAgIGNvbnN0IHROb2RlID0gZ2V0U2VsZWN0ZWRUTm9kZSgpO1xuICAgIGNvbnN0IGN1cnJlbnREZWYgPSBnZXRDdXJyZW50RGlyZWN0aXZlRGVmKHRWaWV3LmRhdGEpO1xuICAgIGNvbnN0IHJlbmRlcmVyID0gbG9hZENvbXBvbmVudFJlbmRlcmVyKGN1cnJlbnREZWYsIHROb2RlLCBsVmlldyk7XG4gICAgc2V0RG9tUHJvcGVydHkodE5vZGUsIGxWaWV3LCBwcm9wTmFtZSwgdmFsdWUsIHJlbmRlcmVyLCBzYW5pdGl6ZXIpO1xuICAgIG5nRGV2TW9kZSAmJiBzdG9yZVByb3BlcnR5QmluZGluZ01ldGFkYXRhKHRWaWV3LmRhdGEsIHROb2RlLCBwcm9wTmFtZSwgYmluZGluZ0luZGV4KTtcbiAgfVxuICByZXR1cm4gybXJtXN5bnRoZXRpY0hvc3RQcm9wZXJ0eTtcbn1cbmNvbnN0IHUgPSB1bmRlZmluZWQ7XG5mdW5jdGlvbiBwbHVyYWwodmFsKSB7XG4gIGNvbnN0IGkgPSBNYXRoLmZsb29yKE1hdGguYWJzKHZhbCkpLFxuICAgIHYgPSB2YWwudG9TdHJpbmcoKS5yZXBsYWNlKC9eW14uXSpcXC4/LywgJycpLmxlbmd0aDtcbiAgaWYgKGkgPT09IDEgJiYgdiA9PT0gMCkgcmV0dXJuIDE7XG4gIHJldHVybiA1O1xufVxudmFyIGxvY2FsZUVuID0gW1wiZW5cIiwgW1tcImFcIiwgXCJwXCJdLCBbXCJBTVwiLCBcIlBNXCJdXSwgW1tcIkFNXCIsIFwiUE1cIl1dLCBbW1wiU1wiLCBcIk1cIiwgXCJUXCIsIFwiV1wiLCBcIlRcIiwgXCJGXCIsIFwiU1wiXSwgW1wiU3VuXCIsIFwiTW9uXCIsIFwiVHVlXCIsIFwiV2VkXCIsIFwiVGh1XCIsIFwiRnJpXCIsIFwiU2F0XCJdLCBbXCJTdW5kYXlcIiwgXCJNb25kYXlcIiwgXCJUdWVzZGF5XCIsIFwiV2VkbmVzZGF5XCIsIFwiVGh1cnNkYXlcIiwgXCJGcmlkYXlcIiwgXCJTYXR1cmRheVwiXSwgW1wiU3VcIiwgXCJNb1wiLCBcIlR1XCIsIFwiV2VcIiwgXCJUaFwiLCBcIkZyXCIsIFwiU2FcIl1dLCB1LCBbW1wiSlwiLCBcIkZcIiwgXCJNXCIsIFwiQVwiLCBcIk1cIiwgXCJKXCIsIFwiSlwiLCBcIkFcIiwgXCJTXCIsIFwiT1wiLCBcIk5cIiwgXCJEXCJdLCBbXCJKYW5cIiwgXCJGZWJcIiwgXCJNYXJcIiwgXCJBcHJcIiwgXCJNYXlcIiwgXCJKdW5cIiwgXCJKdWxcIiwgXCJBdWdcIiwgXCJTZXBcIiwgXCJPY3RcIiwgXCJOb3ZcIiwgXCJEZWNcIl0sIFtcIkphbnVhcnlcIiwgXCJGZWJydWFyeVwiLCBcIk1hcmNoXCIsIFwiQXByaWxcIiwgXCJNYXlcIiwgXCJKdW5lXCIsIFwiSnVseVwiLCBcIkF1Z3VzdFwiLCBcIlNlcHRlbWJlclwiLCBcIk9jdG9iZXJcIiwgXCJOb3ZlbWJlclwiLCBcIkRlY2VtYmVyXCJdXSwgdSwgW1tcIkJcIiwgXCJBXCJdLCBbXCJCQ1wiLCBcIkFEXCJdLCBbXCJCZWZvcmUgQ2hyaXN0XCIsIFwiQW5ubyBEb21pbmlcIl1dLCAwLCBbNiwgMF0sIFtcIk0vZC95eVwiLCBcIk1NTSBkLCB5XCIsIFwiTU1NTSBkLCB5XCIsIFwiRUVFRSwgTU1NTSBkLCB5XCJdLCBbXCJoOm1t4oCvYVwiLCBcImg6bW06c3PigK9hXCIsIFwiaDptbTpzc+KAr2EgelwiLCBcImg6bW06c3PigK9hIHp6enpcIl0sIFtcInsxfSwgezB9XCIsIHUsIHUsIHVdLCBbXCIuXCIsIFwiLFwiLCBcIjtcIiwgXCIlXCIsIFwiK1wiLCBcIi1cIiwgXCJFXCIsIFwiw5dcIiwgXCLigLBcIiwgXCLiiJ5cIiwgXCJOYU5cIiwgXCI6XCJdLCBbXCIjLCMjMC4jIyNcIiwgXCIjLCMjMCVcIiwgXCLCpCMsIyMwLjAwXCIsIFwiI0UwXCJdLCBcIlVTRFwiLCBcIiRcIiwgXCJVUyBEb2xsYXJcIiwge30sIFwibHRyXCIsIHBsdXJhbF07XG5sZXQgTE9DQUxFX0RBVEEgPSB7fTtcbmZ1bmN0aW9uIHJlZ2lzdGVyTG9jYWxlRGF0YShkYXRhLCBsb2NhbGVJZCwgZXh0cmFEYXRhKSB7XG4gIGlmICh0eXBlb2YgbG9jYWxlSWQgIT09ICdzdHJpbmcnKSB7XG4gICAgZXh0cmFEYXRhID0gbG9jYWxlSWQ7XG4gICAgbG9jYWxlSWQgPSBkYXRhW0xvY2FsZURhdGFJbmRleC5Mb2NhbGVJZF07XG4gIH1cbiAgbG9jYWxlSWQgPSBsb2NhbGVJZC50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL18vZywgJy0nKTtcbiAgTE9DQUxFX0RBVEFbbG9jYWxlSWRdID0gZGF0YTtcbiAgaWYgKGV4dHJhRGF0YSkge1xuICAgIExPQ0FMRV9EQVRBW2xvY2FsZUlkXVtMb2NhbGVEYXRhSW5kZXguRXh0cmFEYXRhXSA9IGV4dHJhRGF0YTtcbiAgfVxufVxuZnVuY3Rpb24gZmluZExvY2FsZURhdGEobG9jYWxlKSB7XG4gIGNvbnN0IG5vcm1hbGl6ZWRMb2NhbGUgPSBub3JtYWxpemVMb2NhbGUobG9jYWxlKTtcbiAgbGV0IG1hdGNoID0gZ2V0TG9jYWxlRGF0YShub3JtYWxpemVkTG9jYWxlKTtcbiAgaWYgKG1hdGNoKSB7XG4gICAgcmV0dXJuIG1hdGNoO1xuICB9XG4gIGNvbnN0IHBhcmVudExvY2FsZSA9IG5vcm1hbGl6ZWRMb2NhbGUuc3BsaXQoJy0nKVswXTtcbiAgbWF0Y2ggPSBnZXRMb2NhbGVEYXRhKHBhcmVudExvY2FsZSk7XG4gIGlmIChtYXRjaCkge1xuICAgIHJldHVybiBtYXRjaDtcbiAgfVxuICBpZiAocGFyZW50TG9jYWxlID09PSAnZW4nKSB7XG4gICAgcmV0dXJuIGxvY2FsZUVuO1xuICB9XG4gIHRocm93IG5ldyBSdW50aW1lRXJyb3IoNzAxLCBuZ0Rldk1vZGUgJiYgYE1pc3NpbmcgbG9jYWxlIGRhdGEgZm9yIHRoZSBsb2NhbGUgXCIke2xvY2FsZX1cIi5gKTtcbn1cbmZ1bmN0aW9uIGdldExvY2FsZUN1cnJlbmN5Q29kZShsb2NhbGUpIHtcbiAgY29uc3QgZGF0YSA9IGZpbmRMb2NhbGVEYXRhKGxvY2FsZSk7XG4gIHJldHVybiBkYXRhW0xvY2FsZURhdGFJbmRleC5DdXJyZW5jeUNvZGVdIHx8IG51bGw7XG59XG5mdW5jdGlvbiBnZXRMb2NhbGVQbHVyYWxDYXNlKGxvY2FsZSkge1xuICBjb25zdCBkYXRhID0gZmluZExvY2FsZURhdGEobG9jYWxlKTtcbiAgcmV0dXJuIGRhdGFbTG9jYWxlRGF0YUluZGV4LlBsdXJhbENhc2VdO1xufVxuZnVuY3Rpb24gZ2V0TG9jYWxlRGF0YShub3JtYWxpemVkTG9jYWxlKSB7XG4gIGlmICghKG5vcm1hbGl6ZWRMb2NhbGUgaW4gTE9DQUxFX0RBVEEpKSB7XG4gICAgTE9DQUxFX0RBVEFbbm9ybWFsaXplZExvY2FsZV0gPSBfZ2xvYmFsLm5nICYmIF9nbG9iYWwubmcuY29tbW9uICYmIF9nbG9iYWwubmcuY29tbW9uLmxvY2FsZXMgJiYgX2dsb2JhbC5uZy5jb21tb24ubG9jYWxlc1tub3JtYWxpemVkTG9jYWxlXTtcbiAgfVxuICByZXR1cm4gTE9DQUxFX0RBVEFbbm9ybWFsaXplZExvY2FsZV07XG59XG5mdW5jdGlvbiB1bnJlZ2lzdGVyQWxsTG9jYWxlRGF0YSgpIHtcbiAgTE9DQUxFX0RBVEEgPSB7fTtcbn1cbnZhciBMb2NhbGVEYXRhSW5kZXggPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKExvY2FsZURhdGFJbmRleCkge1xuICBMb2NhbGVEYXRhSW5kZXhbTG9jYWxlRGF0YUluZGV4W1wiTG9jYWxlSWRcIl0gPSAwXSA9IFwiTG9jYWxlSWRcIjtcbiAgTG9jYWxlRGF0YUluZGV4W0xvY2FsZURhdGFJbmRleFtcIkRheVBlcmlvZHNGb3JtYXRcIl0gPSAxXSA9IFwiRGF5UGVyaW9kc0Zvcm1hdFwiO1xuICBMb2NhbGVEYXRhSW5kZXhbTG9jYWxlRGF0YUluZGV4W1wiRGF5UGVyaW9kc1N0YW5kYWxvbmVcIl0gPSAyXSA9IFwiRGF5UGVyaW9kc1N0YW5kYWxvbmVcIjtcbiAgTG9jYWxlRGF0YUluZGV4W0xvY2FsZURhdGFJbmRleFtcIkRheXNGb3JtYXRcIl0gPSAzXSA9IFwiRGF5c0Zvcm1hdFwiO1xuICBMb2NhbGVEYXRhSW5kZXhbTG9jYWxlRGF0YUluZGV4W1wiRGF5c1N0YW5kYWxvbmVcIl0gPSA0XSA9IFwiRGF5c1N0YW5kYWxvbmVcIjtcbiAgTG9jYWxlRGF0YUluZGV4W0xvY2FsZURhdGFJbmRleFtcIk1vbnRoc0Zvcm1hdFwiXSA9IDVdID0gXCJNb250aHNGb3JtYXRcIjtcbiAgTG9jYWxlRGF0YUluZGV4W0xvY2FsZURhdGFJbmRleFtcIk1vbnRoc1N0YW5kYWxvbmVcIl0gPSA2XSA9IFwiTW9udGhzU3RhbmRhbG9uZVwiO1xuICBMb2NhbGVEYXRhSW5kZXhbTG9jYWxlRGF0YUluZGV4W1wiRXJhc1wiXSA9IDddID0gXCJFcmFzXCI7XG4gIExvY2FsZURhdGFJbmRleFtMb2NhbGVEYXRhSW5kZXhbXCJGaXJzdERheU9mV2Vla1wiXSA9IDhdID0gXCJGaXJzdERheU9mV2Vla1wiO1xuICBMb2NhbGVEYXRhSW5kZXhbTG9jYWxlRGF0YUluZGV4W1wiV2Vla2VuZFJhbmdlXCJdID0gOV0gPSBcIldlZWtlbmRSYW5nZVwiO1xuICBMb2NhbGVEYXRhSW5kZXhbTG9jYWxlRGF0YUluZGV4W1wiRGF0ZUZvcm1hdFwiXSA9IDEwXSA9IFwiRGF0ZUZvcm1hdFwiO1xuICBMb2NhbGVEYXRhSW5kZXhbTG9jYWxlRGF0YUluZGV4W1wiVGltZUZvcm1hdFwiXSA9IDExXSA9IFwiVGltZUZvcm1hdFwiO1xuICBMb2NhbGVEYXRhSW5kZXhbTG9jYWxlRGF0YUluZGV4W1wiRGF0ZVRpbWVGb3JtYXRcIl0gPSAxMl0gPSBcIkRhdGVUaW1lRm9ybWF0XCI7XG4gIExvY2FsZURhdGFJbmRleFtMb2NhbGVEYXRhSW5kZXhbXCJOdW1iZXJTeW1ib2xzXCJdID0gMTNdID0gXCJOdW1iZXJTeW1ib2xzXCI7XG4gIExvY2FsZURhdGFJbmRleFtMb2NhbGVEYXRhSW5kZXhbXCJOdW1iZXJGb3JtYXRzXCJdID0gMTRdID0gXCJOdW1iZXJGb3JtYXRzXCI7XG4gIExvY2FsZURhdGFJbmRleFtMb2NhbGVEYXRhSW5kZXhbXCJDdXJyZW5jeUNvZGVcIl0gPSAxNV0gPSBcIkN1cnJlbmN5Q29kZVwiO1xuICBMb2NhbGVEYXRhSW5kZXhbTG9jYWxlRGF0YUluZGV4W1wiQ3VycmVuY3lTeW1ib2xcIl0gPSAxNl0gPSBcIkN1cnJlbmN5U3ltYm9sXCI7XG4gIExvY2FsZURhdGFJbmRleFtMb2NhbGVEYXRhSW5kZXhbXCJDdXJyZW5jeU5hbWVcIl0gPSAxN10gPSBcIkN1cnJlbmN5TmFtZVwiO1xuICBMb2NhbGVEYXRhSW5kZXhbTG9jYWxlRGF0YUluZGV4W1wiQ3VycmVuY2llc1wiXSA9IDE4XSA9IFwiQ3VycmVuY2llc1wiO1xuICBMb2NhbGVEYXRhSW5kZXhbTG9jYWxlRGF0YUluZGV4W1wiRGlyZWN0aW9uYWxpdHlcIl0gPSAxOV0gPSBcIkRpcmVjdGlvbmFsaXR5XCI7XG4gIExvY2FsZURhdGFJbmRleFtMb2NhbGVEYXRhSW5kZXhbXCJQbHVyYWxDYXNlXCJdID0gMjBdID0gXCJQbHVyYWxDYXNlXCI7XG4gIExvY2FsZURhdGFJbmRleFtMb2NhbGVEYXRhSW5kZXhbXCJFeHRyYURhdGFcIl0gPSAyMV0gPSBcIkV4dHJhRGF0YVwiO1xuICByZXR1cm4gTG9jYWxlRGF0YUluZGV4O1xufShMb2NhbGVEYXRhSW5kZXggfHwge30pO1xuZnVuY3Rpb24gbm9ybWFsaXplTG9jYWxlKGxvY2FsZSkge1xuICByZXR1cm4gbG9jYWxlLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXy9nLCAnLScpO1xufVxuY29uc3QgcGx1cmFsTWFwcGluZyA9IFsnemVybycsICdvbmUnLCAndHdvJywgJ2ZldycsICdtYW55J107XG5mdW5jdGlvbiBnZXRQbHVyYWxDYXNlKHZhbHVlLCBsb2NhbGUpIHtcbiAgY29uc3QgcGx1cmFsID0gZ2V0TG9jYWxlUGx1cmFsQ2FzZShsb2NhbGUpKHBhcnNlSW50KHZhbHVlLCAxMCkpO1xuICBjb25zdCByZXN1bHQgPSBwbHVyYWxNYXBwaW5nW3BsdXJhbF07XG4gIHJldHVybiByZXN1bHQgIT09IHVuZGVmaW5lZCA/IHJlc3VsdCA6ICdvdGhlcic7XG59XG5jb25zdCBERUZBVUxUX0xPQ0FMRV9JRCA9ICdlbi1VUyc7XG5jb25zdCBVU0RfQ1VSUkVOQ1lfQ09ERSA9ICdVU0QnO1xuY29uc3QgRUxFTUVOVF9NQVJLRVIgPSB7XG4gIG1hcmtlcjogJ2VsZW1lbnQnXG59O1xuY29uc3QgSUNVX01BUktFUiA9IHtcbiAgbWFya2VyOiAnSUNVJ1xufTtcbnZhciBJMThuQ3JlYXRlT3BDb2RlID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChJMThuQ3JlYXRlT3BDb2RlKSB7XG4gIEkxOG5DcmVhdGVPcENvZGVbSTE4bkNyZWF0ZU9wQ29kZVtcIlNISUZUXCJdID0gMl0gPSBcIlNISUZUXCI7XG4gIEkxOG5DcmVhdGVPcENvZGVbSTE4bkNyZWF0ZU9wQ29kZVtcIkFQUEVORF9FQUdFUkxZXCJdID0gMV0gPSBcIkFQUEVORF9FQUdFUkxZXCI7XG4gIEkxOG5DcmVhdGVPcENvZGVbSTE4bkNyZWF0ZU9wQ29kZVtcIkNPTU1FTlRcIl0gPSAyXSA9IFwiQ09NTUVOVFwiO1xuICByZXR1cm4gSTE4bkNyZWF0ZU9wQ29kZTtcbn0oSTE4bkNyZWF0ZU9wQ29kZSB8fCB7fSk7XG5sZXQgTE9DQUxFX0lEJDEgPSBERUZBVUxUX0xPQ0FMRV9JRDtcbmZ1bmN0aW9uIHNldExvY2FsZUlkKGxvY2FsZUlkKSB7XG4gIG5nRGV2TW9kZSAmJiBhc3NlcnREZWZpbmVkKGxvY2FsZUlkLCBgRXhwZWN0ZWQgbG9jYWxlSWQgdG8gYmUgZGVmaW5lZGApO1xuICBpZiAodHlwZW9mIGxvY2FsZUlkID09PSAnc3RyaW5nJykge1xuICAgIExPQ0FMRV9JRCQxID0gbG9jYWxlSWQudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9fL2csICctJyk7XG4gIH1cbn1cbmZ1bmN0aW9uIGdldExvY2FsZUlkKCkge1xuICByZXR1cm4gTE9DQUxFX0lEJDE7XG59XG5sZXQgY2hhbmdlTWFzayA9IDBiMDtcbmxldCBjaGFuZ2VNYXNrQ291bnRlciA9IDA7XG5mdW5jdGlvbiBzZXRNYXNrQml0KGhhc0NoYW5nZSkge1xuICBpZiAoaGFzQ2hhbmdlKSB7XG4gICAgY2hhbmdlTWFzayA9IGNoYW5nZU1hc2sgfCAxIDw8IE1hdGgubWluKGNoYW5nZU1hc2tDb3VudGVyLCAzMSk7XG4gIH1cbiAgY2hhbmdlTWFza0NvdW50ZXIrKztcbn1cbmZ1bmN0aW9uIGFwcGx5STE4bih0VmlldywgbFZpZXcsIGluZGV4KSB7XG4gIGlmIChjaGFuZ2VNYXNrQ291bnRlciA+IDApIHtcbiAgICBuZ0Rldk1vZGUgJiYgYXNzZXJ0RGVmaW5lZCh0VmlldywgYHRWaWV3IHNob3VsZCBiZSBkZWZpbmVkYCk7XG4gICAgY29uc3QgdEkxOG4gPSB0Vmlldy5kYXRhW2luZGV4XTtcbiAgICBjb25zdCB1cGRhdGVPcENvZGVzID0gQXJyYXkuaXNBcnJheSh0STE4bikgPyB0STE4biA6IHRJMThuLnVwZGF0ZTtcbiAgICBjb25zdCBiaW5kaW5nc1N0YXJ0SW5kZXggPSBnZXRCaW5kaW5nSW5kZXgoKSAtIGNoYW5nZU1hc2tDb3VudGVyIC0gMTtcbiAgICBhcHBseVVwZGF0ZU9wQ29kZXModFZpZXcsIGxWaWV3LCB1cGRhdGVPcENvZGVzLCBiaW5kaW5nc1N0YXJ0SW5kZXgsIGNoYW5nZU1hc2spO1xuICB9XG4gIGNoYW5nZU1hc2sgPSAwYjA7XG4gIGNoYW5nZU1hc2tDb3VudGVyID0gMDtcbn1cbmZ1bmN0aW9uIGNyZWF0ZU5vZGVXaXRob3V0SHlkcmF0aW9uKGxWaWV3LCB0ZXh0T3JOYW1lLCBub2RlVHlwZSkge1xuICBjb25zdCByZW5kZXJlciA9IGxWaWV3W1JFTkRFUkVSXTtcbiAgc3dpdGNoIChub2RlVHlwZSkge1xuICAgIGNhc2UgTm9kZS5DT01NRU5UX05PREU6XG4gICAgICByZXR1cm4gY3JlYXRlQ29tbWVudE5vZGUocmVuZGVyZXIsIHRleHRPck5hbWUpO1xuICAgIGNhc2UgTm9kZS5URVhUX05PREU6XG4gICAgICByZXR1cm4gY3JlYXRlVGV4dE5vZGUocmVuZGVyZXIsIHRleHRPck5hbWUpO1xuICAgIGNhc2UgTm9kZS5FTEVNRU5UX05PREU6XG4gICAgICByZXR1cm4gY3JlYXRlRWxlbWVudE5vZGUocmVuZGVyZXIsIHRleHRPck5hbWUsIG51bGwpO1xuICB9XG59XG5sZXQgX2xvY2F0ZU9yQ3JlYXRlTm9kZSA9IChsVmlldywgaW5kZXgsIHRleHRPck5hbWUsIG5vZGVUeXBlKSA9PiB7XG4gIGxhc3ROb2RlV2FzQ3JlYXRlZCh0cnVlKTtcbiAgcmV0dXJuIGNyZWF0ZU5vZGVXaXRob3V0SHlkcmF0aW9uKGxWaWV3LCB0ZXh0T3JOYW1lLCBub2RlVHlwZSk7XG59O1xuZnVuY3Rpb24gbG9jYXRlT3JDcmVhdGVOb2RlSW1wbChsVmlldywgaW5kZXgsIHRleHRPck5hbWUsIG5vZGVUeXBlKSB7XG4gIGNvbnN0IGh5ZHJhdGlvbkluZm8gPSBsVmlld1tIWURSQVRJT05dO1xuICBjb25zdCBub09mZnNldEluZGV4ID0gaW5kZXggLSBIRUFERVJfT0ZGU0VUO1xuICBjb25zdCBpc05vZGVDcmVhdGlvbk1vZGUgPSAhaXNJMThuSHlkcmF0aW9uU3VwcG9ydEVuYWJsZWQoKSB8fCAhaHlkcmF0aW9uSW5mbyB8fCBpc0luU2tpcEh5ZHJhdGlvbkJsb2NrJDEoKSB8fCBpc0Rpc2Nvbm5lY3RlZE5vZGUkMShoeWRyYXRpb25JbmZvLCBub09mZnNldEluZGV4KTtcbiAgbGFzdE5vZGVXYXNDcmVhdGVkKGlzTm9kZUNyZWF0aW9uTW9kZSk7XG4gIGlmIChpc05vZGVDcmVhdGlvbk1vZGUpIHtcbiAgICByZXR1cm4gY3JlYXRlTm9kZVdpdGhvdXRIeWRyYXRpb24obFZpZXcsIHRleHRPck5hbWUsIG5vZGVUeXBlKTtcbiAgfVxuICBjb25zdCBuYXRpdmUgPSBsb2NhdGVJMThuUk5vZGVCeUluZGV4KGh5ZHJhdGlvbkluZm8sIG5vT2Zmc2V0SW5kZXgpO1xuICBuZ0Rldk1vZGUgJiYgYXNzZXJ0RGVmaW5lZChuYXRpdmUsICdleHBlY3RlZCBuYXRpdmUgZWxlbWVudCcpO1xuICBuZ0Rldk1vZGUgJiYgYXNzZXJ0RXF1YWwobmF0aXZlLm5vZGVUeXBlLCBub2RlVHlwZSwgJ2V4cGVjdGVkIG1hdGNoaW5nIG5vZGVUeXBlJyk7XG4gIG5nRGV2TW9kZSAmJiBub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUgJiYgYXNzZXJ0RXF1YWwobmF0aXZlLnRhZ05hbWUudG9Mb3dlckNhc2UoKSwgdGV4dE9yTmFtZS50b0xvd2VyQ2FzZSgpLCAnZXhwZWN0aW5nIG1hdGNoaW5nIHRhZ05hbWUnKTtcbiAgbmdEZXZNb2RlICYmIG1hcmtSTm9kZUFzQ2xhaW1lZEJ5SHlkcmF0aW9uKG5hdGl2ZSk7XG4gIHJldHVybiBuYXRpdmU7XG59XG5mdW5jdGlvbiBlbmFibGVMb2NhdGVPckNyZWF0ZUkxOG5Ob2RlSW1wbCgpIHtcbiAgX2xvY2F0ZU9yQ3JlYXRlTm9kZSA9IGxvY2F0ZU9yQ3JlYXRlTm9kZUltcGw7XG59XG5mdW5jdGlvbiBhcHBseUNyZWF0ZU9wQ29kZXMobFZpZXcsIGNyZWF0ZU9wQ29kZXMsIHBhcmVudFJOb2RlLCBpbnNlcnRJbkZyb250T2YpIHtcbiAgY29uc3QgcmVuZGVyZXIgPSBsVmlld1tSRU5ERVJFUl07XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgY3JlYXRlT3BDb2Rlcy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IG9wQ29kZSA9IGNyZWF0ZU9wQ29kZXNbaSsrXTtcbiAgICBjb25zdCB0ZXh0ID0gY3JlYXRlT3BDb2Rlc1tpXTtcbiAgICBjb25zdCBpc0NvbW1lbnQgPSAob3BDb2RlICYgSTE4bkNyZWF0ZU9wQ29kZS5DT01NRU5UKSA9PT0gSTE4bkNyZWF0ZU9wQ29kZS5DT01NRU5UO1xuICAgIGNvbnN0IGFwcGVuZE5vdyA9IChvcENvZGUgJiBJMThuQ3JlYXRlT3BDb2RlLkFQUEVORF9FQUdFUkxZKSA9PT0gSTE4bkNyZWF0ZU9wQ29kZS5BUFBFTkRfRUFHRVJMWTtcbiAgICBjb25zdCBpbmRleCA9IG9wQ29kZSA+Pj4gSTE4bkNyZWF0ZU9wQ29kZS5TSElGVDtcbiAgICBsZXQgck5vZGUgPSBsVmlld1tpbmRleF07XG4gICAgbGV0IGxhc3ROb2RlV2FzQ3JlYXRlZCA9IGZhbHNlO1xuICAgIGlmIChyTm9kZSA9PT0gbnVsbCkge1xuICAgICAgck5vZGUgPSBsVmlld1tpbmRleF0gPSBfbG9jYXRlT3JDcmVhdGVOb2RlKGxWaWV3LCBpbmRleCwgdGV4dCwgaXNDb21tZW50ID8gTm9kZS5DT01NRU5UX05PREUgOiBOb2RlLlRFWFRfTk9ERSk7XG4gICAgICBsYXN0Tm9kZVdhc0NyZWF0ZWQgPSB3YXNMYXN0Tm9kZUNyZWF0ZWQoKTtcbiAgICB9XG4gICAgaWYgKGFwcGVuZE5vdyAmJiBwYXJlbnRSTm9kZSAhPT0gbnVsbCAmJiBsYXN0Tm9kZVdhc0NyZWF0ZWQpIHtcbiAgICAgIG5hdGl2ZUluc2VydEJlZm9yZShyZW5kZXJlciwgcGFyZW50Uk5vZGUsIHJOb2RlLCBpbnNlcnRJbkZyb250T2YsIGZhbHNlKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGFwcGx5TXV0YWJsZU9wQ29kZXModFZpZXcsIG11dGFibGVPcENvZGVzLCBsVmlldywgYW5jaG9yUk5vZGUpIHtcbiAgbmdEZXZNb2RlICYmIGFzc2VydERvbU5vZGUoYW5jaG9yUk5vZGUpO1xuICBjb25zdCByZW5kZXJlciA9IGxWaWV3W1JFTkRFUkVSXTtcbiAgbGV0IHJvb3RJZHggPSBudWxsO1xuICBsZXQgcm9vdFJOb2RlO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IG11dGFibGVPcENvZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3Qgb3BDb2RlID0gbXV0YWJsZU9wQ29kZXNbaV07XG4gICAgaWYgKHR5cGVvZiBvcENvZGUgPT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbnN0IHRleHROb2RlSW5kZXggPSBtdXRhYmxlT3BDb2Rlc1srK2ldO1xuICAgICAgaWYgKGxWaWV3W3RleHROb2RlSW5kZXhdID09PSBudWxsKSB7XG4gICAgICAgIG5nRGV2TW9kZSAmJiBhc3NlcnRJbmRleEluUmFuZ2UobFZpZXcsIHRleHROb2RlSW5kZXgpO1xuICAgICAgICBsVmlld1t0ZXh0Tm9kZUluZGV4XSA9IF9sb2NhdGVPckNyZWF0ZU5vZGUobFZpZXcsIHRleHROb2RlSW5kZXgsIG9wQ29kZSwgTm9kZS5URVhUX05PREUpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIG9wQ29kZSA9PSAnbnVtYmVyJykge1xuICAgICAgc3dpdGNoIChvcENvZGUgJiAxKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgICBjb25zdCBwYXJlbnRJZHggPSBnZXRQYXJlbnRGcm9tSWN1Q3JlYXRlT3BDb2RlKG9wQ29kZSk7XG4gICAgICAgICAgaWYgKHJvb3RJZHggPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJvb3RJZHggPSBwYXJlbnRJZHg7XG4gICAgICAgICAgICByb290Uk5vZGUgPSByZW5kZXJlci5wYXJlbnROb2RlKGFuY2hvclJOb2RlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbGV0IGluc2VydEluRnJvbnRPZjtcbiAgICAgICAgICBsZXQgcGFyZW50Uk5vZGU7XG4gICAgICAgICAgaWYgKHBhcmVudElkeCA9PT0gcm9vdElkeCkge1xuICAgICAgICAgICAgaW5zZXJ0SW5Gcm9udE9mID0gYW5jaG9yUk5vZGU7XG4gICAgICAgICAgICBwYXJlbnRSTm9kZSA9IHJvb3RSTm9kZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaW5zZXJ0SW5Gcm9udE9mID0gbnVsbDtcbiAgICAgICAgICAgIHBhcmVudFJOb2RlID0gdW53cmFwUk5vZGUobFZpZXdbcGFyZW50SWR4XSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChwYXJlbnRSTm9kZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgbmdEZXZNb2RlICYmIGFzc2VydERvbU5vZGUocGFyZW50Uk5vZGUpO1xuICAgICAgICAgICAgY29uc3QgcmVmSWR4ID0gZ2V0UmVmRnJvbUljdUNyZWF0ZU9wQ29kZShvcENvZGUpO1xuICAgICAgICAgICAgbmdEZXZNb2RlICYmIGFzc2VydEdyZWF0ZXJUaGFuKHJlZklkeCwgSEVBREVSX09GRlNFVCwgJ01pc3NpbmcgcmVmJyk7XG4gICAgICAgICAgICBjb25zdCBjaGlsZCA9IGxWaWV3W3JlZklkeF07XG4gICAgICAgICAgICBuZ0Rldk1vZGUgJiYgYXNzZXJ0RG9tTm9kZShjaGlsZCk7XG4gICAgICAgICAgICBuYXRpdmVJbnNlcnRCZWZvcmUocmVuZGVyZXIsIHBhcmVudFJOb2RlLCBjaGlsZCwgaW5zZXJ0SW5Gcm9udE9mLCBmYWxzZSk7XG4gICAgICAgICAgICBjb25zdCB0SWN1ID0gZ2V0VEljdSh0VmlldywgcmVmSWR4KTtcbiAgICAgICAgICAgIGlmICh0SWN1ICE9PSBudWxsICYmIHR5cGVvZiB0SWN1ID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICBuZ0Rldk1vZGUgJiYgYXNzZXJ0VEljdSh0SWN1KTtcbiAgICAgICAgICAgICAgY29uc3QgY2FzZUluZGV4ID0gZ2V0Q3VycmVudElDVUNhc2VJbmRleCh0SWN1LCBsVmlldyk7XG4gICAgICAgICAgICAgIGlmIChjYXNlSW5kZXggIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBhcHBseU11dGFibGVPcENvZGVzKHRWaWV3LCB0SWN1LmNyZWF0ZVtjYXNlSW5kZXhdLCBsVmlldywgbFZpZXdbdEljdS5hbmNob3JJZHhdKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIGNvbnN0IGVsZW1lbnROb2RlSW5kZXggPSBvcENvZGUgPj4+IDE7XG4gICAgICAgICAgY29uc3QgYXR0ck5hbWUgPSBtdXRhYmxlT3BDb2Rlc1srK2ldO1xuICAgICAgICAgIGNvbnN0IGF0dHJWYWx1ZSA9IG11dGFibGVPcENvZGVzWysraV07XG4gICAgICAgICAgc2V0RWxlbWVudEF0dHJpYnV0ZShyZW5kZXJlciwgZ2V0TmF0aXZlQnlJbmRleChlbGVtZW50Tm9kZUluZGV4LCBsVmlldyksIG51bGwsIG51bGwsIGF0dHJOYW1lLCBhdHRyVmFsdWUsIG51bGwpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGlmIChuZ0Rldk1vZGUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXJyb3IoNzAwLCBgVW5hYmxlIHRvIGRldGVybWluZSB0aGUgdHlwZSBvZiBtdXRhdGUgb3BlcmF0aW9uIGZvciBcIiR7b3BDb2RlfVwiYCk7XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzd2l0Y2ggKG9wQ29kZSkge1xuICAgICAgICBjYXNlIElDVV9NQVJLRVI6XG4gICAgICAgICAgY29uc3QgY29tbWVudFZhbHVlID0gbXV0YWJsZU9wQ29kZXNbKytpXTtcbiAgICAgICAgICBjb25zdCBjb21tZW50Tm9kZUluZGV4ID0gbXV0YWJsZU9wQ29kZXNbKytpXTtcbiAgICAgICAgICBpZiAobFZpZXdbY29tbWVudE5vZGVJbmRleF0gPT09IG51bGwpIHtcbiAgICAgICAgICAgIG5nRGV2TW9kZSAmJiBhc3NlcnRFcXVhbCh0eXBlb2YgY29tbWVudFZhbHVlLCAnc3RyaW5nJywgYEV4cGVjdGVkIFwiJHtjb21tZW50VmFsdWV9XCIgdG8gYmUgYSBjb21tZW50IG5vZGUgdmFsdWVgKTtcbiAgICAgICAgICAgIG5nRGV2TW9kZSAmJiBhc3NlcnRJbmRleEluRXhwYW5kb1JhbmdlKGxWaWV3LCBjb21tZW50Tm9kZUluZGV4KTtcbiAgICAgICAgICAgIGNvbnN0IGNvbW1lbnRSTm9kZSA9IGxWaWV3W2NvbW1lbnROb2RlSW5kZXhdID0gX2xvY2F0ZU9yQ3JlYXRlTm9kZShsVmlldywgY29tbWVudE5vZGVJbmRleCwgY29tbWVudFZhbHVlLCBOb2RlLkNPTU1FTlRfTk9ERSk7XG4gICAgICAgICAgICBhdHRhY2hQYXRjaERhdGEoY29tbWVudFJOb2RlLCBsVmlldyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIEVMRU1FTlRfTUFSS0VSOlxuICAgICAgICAgIGNvbnN0IHRhZ05hbWUgPSBtdXRhYmxlT3BDb2Rlc1srK2ldO1xuICAgICAgICAgIGNvbnN0IGVsZW1lbnROb2RlSW5kZXggPSBtdXRhYmxlT3BDb2Rlc1srK2ldO1xuICAgICAgICAgIGlmIChsVmlld1tlbGVtZW50Tm9kZUluZGV4XSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgbmdEZXZNb2RlICYmIGFzc2VydEVxdWFsKHR5cGVvZiB0YWdOYW1lLCAnc3RyaW5nJywgYEV4cGVjdGVkIFwiJHt0YWdOYW1lfVwiIHRvIGJlIGFuIGVsZW1lbnQgbm9kZSB0YWcgbmFtZWApO1xuICAgICAgICAgICAgbmdEZXZNb2RlICYmIGFzc2VydEluZGV4SW5FeHBhbmRvUmFuZ2UobFZpZXcsIGVsZW1lbnROb2RlSW5kZXgpO1xuICAgICAgICAgICAgY29uc3QgZWxlbWVudFJOb2RlID0gbFZpZXdbZWxlbWVudE5vZGVJbmRleF0gPSBfbG9jYXRlT3JDcmVhdGVOb2RlKGxWaWV3LCBlbGVtZW50Tm9kZUluZGV4LCB0YWdOYW1lLCBOb2RlLkVMRU1FTlRfTk9ERSk7XG4gICAgICAgICAgICBhdHRhY2hQYXRjaERhdGEoZWxlbWVudFJOb2RlLCBsVmlldyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIG5nRGV2TW9kZSAmJiB0aHJvd0Vycm9yKGBVbmFibGUgdG8gZGV0ZXJtaW5lIHRoZSB0eXBlIG9mIG11dGF0ZSBvcGVyYXRpb24gZm9yIFwiJHtvcENvZGV9XCJgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGFwcGx5VXBkYXRlT3BDb2Rlcyh0VmlldywgbFZpZXcsIHVwZGF0ZU9wQ29kZXMsIGJpbmRpbmdzU3RhcnRJbmRleCwgY2hhbmdlTWFzaykge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHVwZGF0ZU9wQ29kZXMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBjaGVja0JpdCA9IHVwZGF0ZU9wQ29kZXNbaV07XG4gICAgY29uc3Qgc2tpcENvZGVzID0gdXBkYXRlT3BDb2Rlc1srK2ldO1xuICAgIGlmIChjaGVja0JpdCAmIGNoYW5nZU1hc2spIHtcbiAgICAgIGxldCB2YWx1ZSA9ICcnO1xuICAgICAgZm9yIChsZXQgaiA9IGkgKyAxOyBqIDw9IGkgKyBza2lwQ29kZXM7IGorKykge1xuICAgICAgICBjb25zdCBvcENvZGUgPSB1cGRhdGVPcENvZGVzW2pdO1xuICAgICAgICBpZiAodHlwZW9mIG9wQ29kZSA9PSAnc3RyaW5nJykge1xuICAgICAgICAgIHZhbHVlICs9IG9wQ29kZTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygb3BDb2RlID09ICdudW1iZXInKSB7XG4gICAgICAgICAgaWYgKG9wQ29kZSA8IDApIHtcbiAgICAgICAgICAgIHZhbHVlICs9IHJlbmRlclN0cmluZ2lmeShsVmlld1tiaW5kaW5nc1N0YXJ0SW5kZXggLSBvcENvZGVdKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3Qgbm9kZUluZGV4ID0gb3BDb2RlID4+PiAyO1xuICAgICAgICAgICAgc3dpdGNoIChvcENvZGUgJiAzKSB7XG4gICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICBjb25zdCBwcm9wTmFtZSA9IHVwZGF0ZU9wQ29kZXNbKytqXTtcbiAgICAgICAgICAgICAgICBjb25zdCBzYW5pdGl6ZUZuID0gdXBkYXRlT3BDb2Rlc1srK2pdO1xuICAgICAgICAgICAgICAgIGNvbnN0IHROb2RlT3JUYWdOYW1lID0gdFZpZXcuZGF0YVtub2RlSW5kZXhdO1xuICAgICAgICAgICAgICAgIG5nRGV2TW9kZSAmJiBhc3NlcnREZWZpbmVkKHROb2RlT3JUYWdOYW1lLCAnRXhwZXJ0aW5nIFROb2RlIG9yIHN0cmluZycpO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdE5vZGVPclRhZ05hbWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICBzZXRFbGVtZW50QXR0cmlidXRlKGxWaWV3W1JFTkRFUkVSXSwgbFZpZXdbbm9kZUluZGV4XSwgbnVsbCwgdE5vZGVPclRhZ05hbWUsIHByb3BOYW1lLCB2YWx1ZSwgc2FuaXRpemVGbik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHNldFByb3BlcnR5QW5kSW5wdXRzKHROb2RlT3JUYWdOYW1lLCBsVmlldywgcHJvcE5hbWUsIHZhbHVlLCBsVmlld1tSRU5ERVJFUl0sIHNhbml0aXplRm4pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgIGNvbnN0IHJUZXh0ID0gbFZpZXdbbm9kZUluZGV4XTtcbiAgICAgICAgICAgICAgICByVGV4dCAhPT0gbnVsbCAmJiB1cGRhdGVUZXh0Tm9kZShsVmlld1tSRU5ERVJFUl0sIHJUZXh0LCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICBhcHBseUljdVN3aXRjaENhc2UodFZpZXcsIGdldFRJY3UodFZpZXcsIG5vZGVJbmRleCksIGxWaWV3LCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICBhcHBseUljdVVwZGF0ZUNhc2UodFZpZXcsIGdldFRJY3UodFZpZXcsIG5vZGVJbmRleCksIGJpbmRpbmdzU3RhcnRJbmRleCwgbFZpZXcpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBvcENvZGUgPSB1cGRhdGVPcENvZGVzW2kgKyAxXTtcbiAgICAgIGlmIChvcENvZGUgPiAwICYmIChvcENvZGUgJiAzKSA9PT0gMykge1xuICAgICAgICBjb25zdCBub2RlSW5kZXggPSBvcENvZGUgPj4+IDI7XG4gICAgICAgIGNvbnN0IHRJY3UgPSBnZXRUSWN1KHRWaWV3LCBub2RlSW5kZXgpO1xuICAgICAgICBjb25zdCBjdXJyZW50SW5kZXggPSBsVmlld1t0SWN1LmN1cnJlbnRDYXNlTFZpZXdJbmRleF07XG4gICAgICAgIGlmIChjdXJyZW50SW5kZXggPCAwKSB7XG4gICAgICAgICAgYXBwbHlJY3VVcGRhdGVDYXNlKHRWaWV3LCB0SWN1LCBiaW5kaW5nc1N0YXJ0SW5kZXgsIGxWaWV3KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpICs9IHNraXBDb2RlcztcbiAgfVxufVxuZnVuY3Rpb24gYXBwbHlJY3VVcGRhdGVDYXNlKHRWaWV3LCB0SWN1LCBiaW5kaW5nc1N0YXJ0SW5kZXgsIGxWaWV3KSB7XG4gIG5nRGV2TW9kZSAmJiBhc3NlcnRJbmRleEluUmFuZ2UobFZpZXcsIHRJY3UuY3VycmVudENhc2VMVmlld0luZGV4KTtcbiAgbGV0IGFjdGl2ZUNhc2VJbmRleCA9IGxWaWV3W3RJY3UuY3VycmVudENhc2VMVmlld0luZGV4XTtcbiAgaWYgKGFjdGl2ZUNhc2VJbmRleCAhPT0gbnVsbCkge1xuICAgIGxldCBtYXNrID0gY2hhbmdlTWFzaztcbiAgICBpZiAoYWN0aXZlQ2FzZUluZGV4IDwgMCkge1xuICAgICAgYWN0aXZlQ2FzZUluZGV4ID0gbFZpZXdbdEljdS5jdXJyZW50Q2FzZUxWaWV3SW5kZXhdID0gfmFjdGl2ZUNhc2VJbmRleDtcbiAgICAgIG1hc2sgPSAtMTtcbiAgICB9XG4gICAgYXBwbHlVcGRhdGVPcENvZGVzKHRWaWV3LCBsVmlldywgdEljdS51cGRhdGVbYWN0aXZlQ2FzZUluZGV4XSwgYmluZGluZ3NTdGFydEluZGV4LCBtYXNrKTtcbiAgfVxufVxuZnVuY3Rpb24gYXBwbHlJY3VTd2l0Y2hDYXNlKHRWaWV3LCB0SWN1LCBsVmlldywgdmFsdWUpIHtcbiAgY29uc3QgY2FzZUluZGV4ID0gZ2V0Q2FzZUluZGV4KHRJY3UsIHZhbHVlKTtcbiAgbGV0IGFjdGl2ZUNhc2VJbmRleCA9IGdldEN1cnJlbnRJQ1VDYXNlSW5kZXgodEljdSwgbFZpZXcpO1xuICBpZiAoYWN0aXZlQ2FzZUluZGV4ICE9PSBjYXNlSW5kZXgpIHtcbiAgICBhcHBseUljdVN3aXRjaENhc2VSZW1vdmUodFZpZXcsIHRJY3UsIGxWaWV3KTtcbiAgICBsVmlld1t0SWN1LmN1cnJlbnRDYXNlTFZpZXdJbmRleF0gPSBjYXNlSW5kZXggPT09IG51bGwgPyBudWxsIDogfmNhc2VJbmRleDtcbiAgICBpZiAoY2FzZUluZGV4ICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBhbmNob3JSTm9kZSA9IGxWaWV3W3RJY3UuYW5jaG9ySWR4XTtcbiAgICAgIGlmIChhbmNob3JSTm9kZSkge1xuICAgICAgICBuZ0Rldk1vZGUgJiYgYXNzZXJ0RG9tTm9kZShhbmNob3JSTm9kZSk7XG4gICAgICAgIGFwcGx5TXV0YWJsZU9wQ29kZXModFZpZXcsIHRJY3UuY3JlYXRlW2Nhc2VJbmRleF0sIGxWaWV3LCBhbmNob3JSTm9kZSk7XG4gICAgICB9XG4gICAgICBjbGFpbURlaHlkcmF0ZWRJY3VDYXNlKGxWaWV3LCB0SWN1LmFuY2hvcklkeCwgY2FzZUluZGV4KTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGFwcGx5SWN1U3dpdGNoQ2FzZVJlbW92ZSh0VmlldywgdEljdSwgbFZpZXcpIHtcbiAgbGV0IGFjdGl2ZUNhc2VJbmRleCA9IGdldEN1cnJlbnRJQ1VDYXNlSW5kZXgodEljdSwgbFZpZXcpO1xuICBpZiAoYWN0aXZlQ2FzZUluZGV4ICE9PSBudWxsKSB7XG4gICAgY29uc3QgcmVtb3ZlQ29kZXMgPSB0SWN1LnJlbW92ZVthY3RpdmVDYXNlSW5kZXhdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVtb3ZlQ29kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IG5vZGVPckljdUluZGV4ID0gcmVtb3ZlQ29kZXNbaV07XG4gICAgICBpZiAobm9kZU9ySWN1SW5kZXggPiAwKSB7XG4gICAgICAgIGNvbnN0IHJOb2RlID0gZ2V0TmF0aXZlQnlJbmRleChub2RlT3JJY3VJbmRleCwgbFZpZXcpO1xuICAgICAgICByTm9kZSAhPT0gbnVsbCAmJiBuYXRpdmVSZW1vdmVOb2RlKGxWaWV3W1JFTkRFUkVSXSwgck5vZGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXBwbHlJY3VTd2l0Y2hDYXNlUmVtb3ZlKHRWaWV3LCBnZXRUSWN1KHRWaWV3LCB+bm9kZU9ySWN1SW5kZXgpLCBsVmlldyk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBnZXRDYXNlSW5kZXgoaWN1RXhwcmVzc2lvbiwgYmluZGluZ1ZhbHVlKSB7XG4gIGxldCBpbmRleCA9IGljdUV4cHJlc3Npb24uY2FzZXMuaW5kZXhPZihiaW5kaW5nVmFsdWUpO1xuICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgc3dpdGNoIChpY3VFeHByZXNzaW9uLnR5cGUpIHtcbiAgICAgIGNhc2UgMTpcbiAgICAgICAge1xuICAgICAgICAgIGNvbnN0IHJlc29sdmVkQ2FzZSA9IGdldFBsdXJhbENhc2UoYmluZGluZ1ZhbHVlLCBnZXRMb2NhbGVJZCgpKTtcbiAgICAgICAgICBpbmRleCA9IGljdUV4cHJlc3Npb24uY2FzZXMuaW5kZXhPZihyZXNvbHZlZENhc2UpO1xuICAgICAgICAgIGlmIChpbmRleCA9PT0gLTEgJiYgcmVzb2x2ZWRDYXNlICE9PSAnb3RoZXInKSB7XG4gICAgICAgICAgICBpbmRleCA9IGljdUV4cHJlc3Npb24uY2FzZXMuaW5kZXhPZignb3RoZXInKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIGNhc2UgMDpcbiAgICAgICAge1xuICAgICAgICAgIGluZGV4ID0gaWN1RXhwcmVzc2lvbi5jYXNlcy5pbmRleE9mKCdvdGhlcicpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBpbmRleCA9PT0gLTEgPyBudWxsIDogaW5kZXg7XG59XG5mdW5jdGlvbiBpMThuQ3JlYXRlT3BDb2Rlc1RvU3RyaW5nKG9wY29kZXMpIHtcbiAgY29uc3QgY3JlYXRlT3BDb2RlcyA9IG9wY29kZXMgfHwgKEFycmF5LmlzQXJyYXkodGhpcykgPyB0aGlzIDogW10pO1xuICBsZXQgbGluZXMgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBjcmVhdGVPcENvZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3Qgb3BDb2RlID0gY3JlYXRlT3BDb2Rlc1tpKytdO1xuICAgIGNvbnN0IHRleHQgPSBjcmVhdGVPcENvZGVzW2ldO1xuICAgIGNvbnN0IGlzQ29tbWVudCA9IChvcENvZGUgJiBJMThuQ3JlYXRlT3BDb2RlLkNPTU1FTlQpID09PSBJMThuQ3JlYXRlT3BDb2RlLkNPTU1FTlQ7XG4gICAgY29uc3QgYXBwZW5kTm93ID0gKG9wQ29kZSAmIEkxOG5DcmVhdGVPcENvZGUuQVBQRU5EX0VBR0VSTFkpID09PSBJMThuQ3JlYXRlT3BDb2RlLkFQUEVORF9FQUdFUkxZO1xuICAgIGNvbnN0IGluZGV4ID0gb3BDb2RlID4+PiBJMThuQ3JlYXRlT3BDb2RlLlNISUZUO1xuICAgIGxpbmVzLnB1c2goYGxWaWV3WyR7aW5kZXh9XSA9IGRvY3VtZW50LiR7aXNDb21tZW50ID8gJ2NyZWF0ZUNvbW1lbnQnIDogJ2NyZWF0ZVRleHQnfSgke0pTT04uc3RyaW5naWZ5KHRleHQpfSk7YCk7XG4gICAgaWYgKGFwcGVuZE5vdykge1xuICAgICAgbGluZXMucHVzaChgcGFyZW50LmFwcGVuZENoaWxkKGxWaWV3WyR7aW5kZXh9XSk7YCk7XG4gICAgfVxuICB9XG4gIHJldHVybiBsaW5lcztcbn1cbmZ1bmN0aW9uIGkxOG5VcGRhdGVPcENvZGVzVG9TdHJpbmcob3Bjb2Rlcykge1xuICBjb25zdCBwYXJzZXIgPSBuZXcgT3BDb2RlUGFyc2VyKG9wY29kZXMgfHwgKEFycmF5LmlzQXJyYXkodGhpcykgPyB0aGlzIDogW10pKTtcbiAgbGV0IGxpbmVzID0gW107XG4gIGZ1bmN0aW9uIGNvbnN1bWVPcENvZGUodmFsdWUpIHtcbiAgICBjb25zdCByZWYgPSB2YWx1ZSA+Pj4gMjtcbiAgICBjb25zdCBvcENvZGUgPSB2YWx1ZSAmIDM7XG4gICAgc3dpdGNoIChvcENvZGUpIHtcbiAgICAgIGNhc2UgMDpcbiAgICAgICAgcmV0dXJuIGAobFZpZXdbJHtyZWZ9XSBhcyBUZXh0KS50ZXh0Q29udGVudCA9ICQkJGA7XG4gICAgICBjYXNlIDE6XG4gICAgICAgIGNvbnN0IGF0dHJOYW1lID0gcGFyc2VyLmNvbnN1bWVTdHJpbmcoKTtcbiAgICAgICAgY29uc3Qgc2FuaXRpemF0aW9uRm4gPSBwYXJzZXIuY29uc3VtZUZ1bmN0aW9uKCk7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gc2FuaXRpemF0aW9uRm4gPyBgKCR7c2FuaXRpemF0aW9uRm59KSgkJCQpYCA6ICckJCQnO1xuICAgICAgICByZXR1cm4gYChsVmlld1ske3JlZn1dIGFzIEVsZW1lbnQpLnNldEF0dHJpYnV0ZSgnJHthdHRyTmFtZX0nLCAke3ZhbHVlfSlgO1xuICAgICAgY2FzZSAyOlxuICAgICAgICByZXR1cm4gYGljdVN3aXRjaENhc2UoJHtyZWZ9LCAkJCQpYDtcbiAgICAgIGNhc2UgMzpcbiAgICAgICAgcmV0dXJuIGBpY3VVcGRhdGVDYXNlKCR7cmVmfSlgO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3VuZXhwZWN0ZWQgT3BDb2RlJyk7XG4gIH1cbiAgd2hpbGUgKHBhcnNlci5oYXNNb3JlKCkpIHtcbiAgICBsZXQgbWFzayA9IHBhcnNlci5jb25zdW1lTnVtYmVyKCk7XG4gICAgbGV0IHNpemUgPSBwYXJzZXIuY29uc3VtZU51bWJlcigpO1xuICAgIGNvbnN0IGVuZCA9IHBhcnNlci5pICsgc2l6ZTtcbiAgICBjb25zdCBzdGF0ZW1lbnRzID0gW107XG4gICAgbGV0IHN0YXRlbWVudCA9ICcnO1xuICAgIHdoaWxlIChwYXJzZXIuaSA8IGVuZCkge1xuICAgICAgbGV0IHZhbHVlID0gcGFyc2VyLmNvbnN1bWVOdW1iZXJPclN0cmluZygpO1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgc3RhdGVtZW50ICs9IHZhbHVlO1xuICAgICAgfSBlbHNlIGlmICh2YWx1ZSA8IDApIHtcbiAgICAgICAgc3RhdGVtZW50ICs9ICcke2xWaWV3W2knICsgdmFsdWUgKyAnXX0nO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qgb3BDb2RlVGV4dCA9IGNvbnN1bWVPcENvZGUodmFsdWUpO1xuICAgICAgICBzdGF0ZW1lbnRzLnB1c2gob3BDb2RlVGV4dC5yZXBsYWNlKCckJCQnLCAnYCcgKyBzdGF0ZW1lbnQgKyAnYCcpICsgJzsnKTtcbiAgICAgICAgc3RhdGVtZW50ID0gJyc7XG4gICAgICB9XG4gICAgfVxuICAgIGxpbmVzLnB1c2goYGlmIChtYXNrICYgMGIke21hc2sudG9TdHJpbmcoMil9KSB7ICR7c3RhdGVtZW50cy5qb2luKCcgJyl9IH1gKTtcbiAgfVxuICByZXR1cm4gbGluZXM7XG59XG5mdW5jdGlvbiBpY3VDcmVhdGVPcENvZGVzVG9TdHJpbmcob3Bjb2Rlcykge1xuICBjb25zdCBwYXJzZXIgPSBuZXcgT3BDb2RlUGFyc2VyKG9wY29kZXMgfHwgKEFycmF5LmlzQXJyYXkodGhpcykgPyB0aGlzIDogW10pKTtcbiAgbGV0IGxpbmVzID0gW107XG4gIGZ1bmN0aW9uIGNvbnN1bWVPcENvZGUob3BDb2RlKSB7XG4gICAgY29uc3QgcGFyZW50ID0gZ2V0UGFyZW50RnJvbUljdUNyZWF0ZU9wQ29kZShvcENvZGUpO1xuICAgIGNvbnN0IHJlZiA9IGdldFJlZkZyb21JY3VDcmVhdGVPcENvZGUob3BDb2RlKTtcbiAgICBzd2l0Y2ggKGdldEluc3RydWN0aW9uRnJvbUljdUNyZWF0ZU9wQ29kZShvcENvZGUpKSB7XG4gICAgICBjYXNlIDA6XG4gICAgICAgIHJldHVybiBgKGxWaWV3WyR7cGFyZW50fV0gYXMgRWxlbWVudCkuYXBwZW5kQ2hpbGQobFZpZXdbJHtsYXN0UmVmfV0pYDtcbiAgICAgIGNhc2UgMTpcbiAgICAgICAgcmV0dXJuIGAobFZpZXdbJHtyZWZ9XSBhcyBFbGVtZW50KS5zZXRBdHRyaWJ1dGUoXCIke3BhcnNlci5jb25zdW1lU3RyaW5nKCl9XCIsIFwiJHtwYXJzZXIuY29uc3VtZVN0cmluZygpfVwiKWA7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcignVW5leHBlY3RlZCBPcENvZGU6ICcgKyBnZXRJbnN0cnVjdGlvbkZyb21JY3VDcmVhdGVPcENvZGUob3BDb2RlKSk7XG4gIH1cbiAgbGV0IGxhc3RSZWYgPSAtMTtcbiAgd2hpbGUgKHBhcnNlci5oYXNNb3JlKCkpIHtcbiAgICBsZXQgdmFsdWUgPSBwYXJzZXIuY29uc3VtZU51bWJlclN0cmluZ09yTWFya2VyKCk7XG4gICAgaWYgKHZhbHVlID09PSBJQ1VfTUFSS0VSKSB7XG4gICAgICBjb25zdCB0ZXh0ID0gcGFyc2VyLmNvbnN1bWVTdHJpbmcoKTtcbiAgICAgIGxhc3RSZWYgPSBwYXJzZXIuY29uc3VtZU51bWJlcigpO1xuICAgICAgbGluZXMucHVzaChgbFZpZXdbJHtsYXN0UmVmfV0gPSBkb2N1bWVudC5jcmVhdGVDb21tZW50KFwiJHt0ZXh0fVwiKWApO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IEVMRU1FTlRfTUFSS0VSKSB7XG4gICAgICBjb25zdCB0ZXh0ID0gcGFyc2VyLmNvbnN1bWVTdHJpbmcoKTtcbiAgICAgIGxhc3RSZWYgPSBwYXJzZXIuY29uc3VtZU51bWJlcigpO1xuICAgICAgbGluZXMucHVzaChgbFZpZXdbJHtsYXN0UmVmfV0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiJHt0ZXh0fVwiKWApO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgbGFzdFJlZiA9IHBhcnNlci5jb25zdW1lTnVtYmVyKCk7XG4gICAgICBsaW5lcy5wdXNoKGBsVmlld1ske2xhc3RSZWZ9XSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKFwiJHt2YWx1ZX1cIilgKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgIGNvbnN0IGxpbmUgPSBjb25zdW1lT3BDb2RlKHZhbHVlKTtcbiAgICAgIGxpbmUgJiYgbGluZXMucHVzaChsaW5lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmV4cGVjdGVkIHZhbHVlJyk7XG4gICAgfVxuICB9XG4gIHJldHVybiBsaW5lcztcbn1cbmZ1bmN0aW9uIGkxOG5SZW1vdmVPcENvZGVzVG9TdHJpbmcob3Bjb2Rlcykge1xuICBjb25zdCByZW1vdmVDb2RlcyA9IG9wY29kZXMgfHwgKEFycmF5LmlzQXJyYXkodGhpcykgPyB0aGlzIDogW10pO1xuICBsZXQgbGluZXMgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByZW1vdmVDb2Rlcy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IG5vZGVPckljdUluZGV4ID0gcmVtb3ZlQ29kZXNbaV07XG4gICAgaWYgKG5vZGVPckljdUluZGV4ID4gMCkge1xuICAgICAgbGluZXMucHVzaChgcmVtb3ZlKGxWaWV3WyR7bm9kZU9ySWN1SW5kZXh9XSlgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGluZXMucHVzaChgcmVtb3ZlTmVzdGVkSUNVKCR7fm5vZGVPckljdUluZGV4fSlgKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGxpbmVzO1xufVxuY2xhc3MgT3BDb2RlUGFyc2VyIHtcbiAgaSA9IDA7XG4gIGNvZGVzO1xuICBjb25zdHJ1Y3Rvcihjb2Rlcykge1xuICAgIHRoaXMuY29kZXMgPSBjb2RlcztcbiAgfVxuICBoYXNNb3JlKCkge1xuICAgIHJldHVybiB0aGlzLmkgPCB0aGlzLmNvZGVzLmxlbmd0aDtcbiAgfVxuICBjb25zdW1lTnVtYmVyKCkge1xuICAgIGxldCB2YWx1ZSA9IHRoaXMuY29kZXNbdGhpcy5pKytdO1xuICAgIGFzc2VydE51bWJlcih2YWx1ZSwgJ2V4cGVjdGluZyBudW1iZXIgaW4gT3BDb2RlJyk7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIGNvbnN1bWVTdHJpbmcoKSB7XG4gICAgbGV0IHZhbHVlID0gdGhpcy5jb2Rlc1t0aGlzLmkrK107XG4gICAgYXNzZXJ0U3RyaW5nKHZhbHVlLCAnZXhwZWN0aW5nIHN0cmluZyBpbiBPcENvZGUnKTtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgY29uc3VtZUZ1bmN0aW9uKCkge1xuICAgIGxldCB2YWx1ZSA9IHRoaXMuY29kZXNbdGhpcy5pKytdO1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKCdleHBlY3RpbmcgZnVuY3Rpb24gaW4gT3BDb2RlJyk7XG4gIH1cbiAgY29uc3VtZU51bWJlck9yU3RyaW5nKCkge1xuICAgIGxldCB2YWx1ZSA9IHRoaXMuY29kZXNbdGhpcy5pKytdO1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIGFzc2VydE51bWJlcih2YWx1ZSwgJ2V4cGVjdGluZyBudW1iZXIgb3Igc3RyaW5nIGluIE9wQ29kZScpO1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICBjb25zdW1lTnVtYmVyU3RyaW5nT3JNYXJrZXIoKSB7XG4gICAgbGV0IHZhbHVlID0gdGhpcy5jb2Rlc1t0aGlzLmkrK107XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyB8fCB2YWx1ZSA9PSBJQ1VfTUFSS0VSIHx8IHZhbHVlID09IEVMRU1FTlRfTUFSS0VSKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIGFzc2VydE51bWJlcih2YWx1ZSwgJ2V4cGVjdGluZyBudW1iZXIsIHN0cmluZywgSUNVX01BUktFUiBvciBFTEVNRU5UX01BUktFUiBpbiBPcENvZGUnKTtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbn1cbmNvbnN0IEJJTkRJTkdfUkVHRVhQID0gL++/vShcXGQrKTo/XFxkKu+/vS9naTtcbmNvbnN0IElDVV9SRUdFWFAgPSAvKHtcXHMq77+9XFxkKzo/XFxkKu+/vVxccyosXFxzKlxcU3s2fVxccyosW1xcc1xcU10qfSkvZ2k7XG5jb25zdCBORVNURURfSUNVID0gL++/vShcXGQrKe+/vS87XG5jb25zdCBJQ1VfQkxPQ0tfUkVHRVhQID0gL15cXHMqKO+/vVxcZCs6P1xcZCrvv70pXFxzKixcXHMqKHNlbGVjdHxwbHVyYWwpXFxzKiwvO1xuY29uc3QgTUFSS0VSID0gYO+/vWA7XG5jb25zdCBTVUJURU1QTEFURV9SRUdFWFAgPSAv77+9XFwvP1xcKihcXGQrOlxcZCsp77+9L2dpO1xuY29uc3QgUEhfUkVHRVhQID0gL++/vShcXC8/WyMqXVxcZCspOj9cXGQq77+9L2dpO1xuY29uc3QgTkdTUF9VTklDT0RFX1JFR0VYUCA9IC9cXHVFNTAwL2c7XG5mdW5jdGlvbiByZXBsYWNlTmdzcCh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUucmVwbGFjZShOR1NQX1VOSUNPREVfUkVHRVhQLCAnICcpO1xufVxuZnVuY3Rpb24gYXR0YWNoRGVidWdHZXR0ZXIob2JqLCBkZWJ1Z0dldHRlcikge1xuICBpZiAobmdEZXZNb2RlKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwgJ2RlYnVnJywge1xuICAgICAgZ2V0OiBkZWJ1Z0dldHRlcixcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdUaGlzIG1ldGhvZCBzaG91bGQgYmUgZ3VhcmRlZCB3aXRoIGBuZ0Rldk1vZGVgIHNvIHRoYXQgaXQgY2FuIGJlIHRyZWUgc2hha2VuIGluIHByb2R1Y3Rpb24hJyk7XG4gIH1cbn1cbmZ1bmN0aW9uIGkxOG5TdGFydEZpcnN0Q3JlYXRlUGFzcyh0VmlldywgcGFyZW50VE5vZGVJbmRleCwgbFZpZXcsIGluZGV4LCBtZXNzYWdlLCBzdWJUZW1wbGF0ZUluZGV4KSB7XG4gIGNvbnN0IHJvb3RUTm9kZSA9IGdldEN1cnJlbnRQYXJlbnRUTm9kZSgpO1xuICBjb25zdCBjcmVhdGVPcENvZGVzID0gW107XG4gIGNvbnN0IHVwZGF0ZU9wQ29kZXMgPSBbXTtcbiAgY29uc3QgZXhpc3RpbmdUTm9kZVN0YWNrID0gW1tdXTtcbiAgY29uc3QgYXN0U3RhY2sgPSBbW11dO1xuICBpZiAobmdEZXZNb2RlKSB7XG4gICAgYXR0YWNoRGVidWdHZXR0ZXIoY3JlYXRlT3BDb2RlcywgaTE4bkNyZWF0ZU9wQ29kZXNUb1N0cmluZyk7XG4gICAgYXR0YWNoRGVidWdHZXR0ZXIodXBkYXRlT3BDb2RlcywgaTE4blVwZGF0ZU9wQ29kZXNUb1N0cmluZyk7XG4gIH1cbiAgbWVzc2FnZSA9IGdldFRyYW5zbGF0aW9uRm9yVGVtcGxhdGUobWVzc2FnZSwgc3ViVGVtcGxhdGVJbmRleCk7XG4gIGNvbnN0IG1zZ1BhcnRzID0gcmVwbGFjZU5nc3AobWVzc2FnZSkuc3BsaXQoUEhfUkVHRVhQKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBtc2dQYXJ0cy5sZW5ndGg7IGkrKykge1xuICAgIGxldCB2YWx1ZSA9IG1zZ1BhcnRzW2ldO1xuICAgIGlmICgoaSAmIDEpID09PSAwKSB7XG4gICAgICBjb25zdCBwYXJ0cyA9IGkxOG5QYXJzZVRleHRJbnRvUGFydHNBbmRJQ1UodmFsdWUpO1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBwYXJ0cy5sZW5ndGg7IGorKykge1xuICAgICAgICBsZXQgcGFydCA9IHBhcnRzW2pdO1xuICAgICAgICBpZiAoKGogJiAxKSA9PT0gMCkge1xuICAgICAgICAgIGNvbnN0IHRleHQgPSBwYXJ0O1xuICAgICAgICAgIG5nRGV2TW9kZSAmJiBhc3NlcnRTdHJpbmcodGV4dCwgJ1BhcnNlZCBJQ1UgcGFydCBzaG91bGQgYmUgc3RyaW5nJyk7XG4gICAgICAgICAgaWYgKHRleHQgIT09ICcnKSB7XG4gICAgICAgICAgICBpMThuU3RhcnRGaXJzdENyZWF0ZVBhc3NQcm9jZXNzVGV4dE5vZGUoYXN0U3RhY2tbMF0sIHRWaWV3LCByb290VE5vZGUsIGV4aXN0aW5nVE5vZGVTdGFja1swXSwgY3JlYXRlT3BDb2RlcywgdXBkYXRlT3BDb2RlcywgbFZpZXcsIHRleHQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBpY3VFeHByZXNzaW9uID0gcGFydDtcbiAgICAgICAgICBpZiAodHlwZW9mIGljdUV4cHJlc3Npb24gIT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBwYXJzZSBJQ1UgZXhwcmVzc2lvbiBpbiBcIiR7bWVzc2FnZX1cIiBtZXNzYWdlLmApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBpY3VDb250YWluZXJUTm9kZSA9IGNyZWF0ZVROb2RlQW5kQWRkT3BDb2RlKHRWaWV3LCByb290VE5vZGUsIGV4aXN0aW5nVE5vZGVTdGFja1swXSwgbFZpZXcsIGNyZWF0ZU9wQ29kZXMsIG5nRGV2TW9kZSA/IGBJQ1UgJHtpbmRleH06JHtpY3VFeHByZXNzaW9uLm1haW5CaW5kaW5nfWAgOiAnJywgdHJ1ZSk7XG4gICAgICAgICAgY29uc3QgaWN1Tm9kZUluZGV4ID0gaWN1Q29udGFpbmVyVE5vZGUuaW5kZXg7XG4gICAgICAgICAgbmdEZXZNb2RlICYmIGFzc2VydEdyZWF0ZXJUaGFuT3JFcXVhbChpY3VOb2RlSW5kZXgsIEhFQURFUl9PRkZTRVQsICdJbmRleCBtdXN0IGJlIGluIGFic29sdXRlIExWaWV3IG9mZnNldCcpO1xuICAgICAgICAgIGljdVN0YXJ0KGFzdFN0YWNrWzBdLCB0VmlldywgbFZpZXcsIHVwZGF0ZU9wQ29kZXMsIHBhcmVudFROb2RlSW5kZXgsIGljdUV4cHJlc3Npb24sIGljdU5vZGVJbmRleCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgaXNDbG9zaW5nID0gdmFsdWUuY2hhckNvZGVBdCgwKSA9PT0gNDc7XG4gICAgICBjb25zdCB0eXBlID0gdmFsdWUuY2hhckNvZGVBdChpc0Nsb3NpbmcgPyAxIDogMCk7XG4gICAgICBuZ0Rldk1vZGUgJiYgYXNzZXJ0T25lT2YodHlwZSwgNDIsIDM1KTtcbiAgICAgIGNvbnN0IGluZGV4ID0gSEVBREVSX09GRlNFVCArIE51bWJlci5wYXJzZUludCh2YWx1ZS5zdWJzdHJpbmcoaXNDbG9zaW5nID8gMiA6IDEpKTtcbiAgICAgIGlmIChpc0Nsb3NpbmcpIHtcbiAgICAgICAgZXhpc3RpbmdUTm9kZVN0YWNrLnNoaWZ0KCk7XG4gICAgICAgIGFzdFN0YWNrLnNoaWZ0KCk7XG4gICAgICAgIHNldEN1cnJlbnRUTm9kZShnZXRDdXJyZW50UGFyZW50VE5vZGUoKSwgZmFsc2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgdE5vZGUgPSBjcmVhdGVUTm9kZVBsYWNlaG9sZGVyKHRWaWV3LCBleGlzdGluZ1ROb2RlU3RhY2tbMF0sIGluZGV4KTtcbiAgICAgICAgZXhpc3RpbmdUTm9kZVN0YWNrLnVuc2hpZnQoW10pO1xuICAgICAgICBzZXRDdXJyZW50VE5vZGUodE5vZGUsIHRydWUpO1xuICAgICAgICBjb25zdCBwbGFjZWhvbGRlck5vZGUgPSB7XG4gICAgICAgICAga2luZDogMixcbiAgICAgICAgICBpbmRleCxcbiAgICAgICAgICBjaGlsZHJlbjogW10sXG4gICAgICAgICAgdHlwZTogdHlwZSA9PT0gMzUgPyAwIDogMVxuICAgICAgICB9O1xuICAgICAgICBhc3RTdGFja1swXS5wdXNoKHBsYWNlaG9sZGVyTm9kZSk7XG4gICAgICAgIGFzdFN0YWNrLnVuc2hpZnQocGxhY2Vob2xkZXJOb2RlLmNoaWxkcmVuKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgdFZpZXcuZGF0YVtpbmRleF0gPSB7XG4gICAgY3JlYXRlOiBjcmVhdGVPcENvZGVzLFxuICAgIHVwZGF0ZTogdXBkYXRlT3BDb2RlcyxcbiAgICBhc3Q6IGFzdFN0YWNrWzBdLFxuICAgIHBhcmVudFROb2RlSW5kZXhcbiAgfTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZVROb2RlQW5kQWRkT3BDb2RlKHRWaWV3LCByb290VE5vZGUsIGV4aXN0aW5nVE5vZGVzLCBsVmlldywgY3JlYXRlT3BDb2RlcywgdGV4dCwgaXNJQ1UpIHtcbiAgY29uc3QgaTE4bk5vZGVJZHggPSBhbGxvY0V4cGFuZG8odFZpZXcsIGxWaWV3LCAxLCBudWxsKTtcbiAgbGV0IG9wQ29kZSA9IGkxOG5Ob2RlSWR4IDw8IEkxOG5DcmVhdGVPcENvZGUuU0hJRlQ7XG4gIGxldCBwYXJlbnRUTm9kZSA9IGdldEN1cnJlbnRQYXJlbnRUTm9kZSgpO1xuICBpZiAocm9vdFROb2RlID09PSBwYXJlbnRUTm9kZSkge1xuICAgIHBhcmVudFROb2RlID0gbnVsbDtcbiAgfVxuICBpZiAocGFyZW50VE5vZGUgPT09IG51bGwpIHtcbiAgICBvcENvZGUgfD0gSTE4bkNyZWF0ZU9wQ29kZS5BUFBFTkRfRUFHRVJMWTtcbiAgfVxuICBpZiAoaXNJQ1UpIHtcbiAgICBvcENvZGUgfD0gSTE4bkNyZWF0ZU9wQ29kZS5DT01NRU5UO1xuICAgIGVuc3VyZUljdUNvbnRhaW5lclZpc2l0b3JMb2FkZWQobG9hZEljdUNvbnRhaW5lclZpc2l0b3IpO1xuICB9XG4gIGNyZWF0ZU9wQ29kZXMucHVzaChvcENvZGUsIHRleHQgPT09IG51bGwgPyAnJyA6IHRleHQpO1xuICBjb25zdCB0Tm9kZSA9IGNyZWF0ZVROb2RlQXRJbmRleCh0VmlldywgaTE4bk5vZGVJZHgsIGlzSUNVID8gMzIgOiAxLCB0ZXh0ID09PSBudWxsID8gbmdEZXZNb2RlID8gJ3t7P319JyA6ICcnIDogdGV4dCwgbnVsbCk7XG4gIGFkZFROb2RlQW5kVXBkYXRlSW5zZXJ0QmVmb3JlSW5kZXgoZXhpc3RpbmdUTm9kZXMsIHROb2RlKTtcbiAgY29uc3QgdE5vZGVJZHggPSB0Tm9kZS5pbmRleDtcbiAgc2V0Q3VycmVudFROb2RlKHROb2RlLCBmYWxzZSk7XG4gIGlmIChwYXJlbnRUTm9kZSAhPT0gbnVsbCAmJiByb290VE5vZGUgIT09IHBhcmVudFROb2RlKSB7XG4gICAgc2V0VE5vZGVJbnNlcnRCZWZvcmVJbmRleChwYXJlbnRUTm9kZSwgdE5vZGVJZHgpO1xuICB9XG4gIHJldHVybiB0Tm9kZTtcbn1cbmZ1bmN0aW9uIGkxOG5TdGFydEZpcnN0Q3JlYXRlUGFzc1Byb2Nlc3NUZXh0Tm9kZShhc3QsIHRWaWV3LCByb290VE5vZGUsIGV4aXN0aW5nVE5vZGVzLCBjcmVhdGVPcENvZGVzLCB1cGRhdGVPcENvZGVzLCBsVmlldywgdGV4dCkge1xuICBjb25zdCBoYXNCaW5kaW5nID0gdGV4dC5tYXRjaChCSU5ESU5HX1JFR0VYUCk7XG4gIGNvbnN0IHROb2RlID0gY3JlYXRlVE5vZGVBbmRBZGRPcENvZGUodFZpZXcsIHJvb3RUTm9kZSwgZXhpc3RpbmdUTm9kZXMsIGxWaWV3LCBjcmVhdGVPcENvZGVzLCBoYXNCaW5kaW5nID8gbnVsbCA6IHRleHQsIGZhbHNlKTtcbiAgY29uc3QgaW5kZXggPSB0Tm9kZS5pbmRleDtcbiAgaWYgKGhhc0JpbmRpbmcpIHtcbiAgICBnZW5lcmF0ZUJpbmRpbmdVcGRhdGVPcENvZGVzKHVwZGF0ZU9wQ29kZXMsIHRleHQsIGluZGV4LCBudWxsLCAwLCBudWxsKTtcbiAgfVxuICBhc3QucHVzaCh7XG4gICAga2luZDogMCxcbiAgICBpbmRleFxuICB9KTtcbn1cbmZ1bmN0aW9uIGkxOG5BdHRyaWJ1dGVzRmlyc3RQYXNzKHRWaWV3LCBpbmRleCwgdmFsdWVzKSB7XG4gIGNvbnN0IHByZXZpb3VzRWxlbWVudCA9IGdldEN1cnJlbnRUTm9kZSgpO1xuICBjb25zdCBwcmV2aW91c0VsZW1lbnRJbmRleCA9IHByZXZpb3VzRWxlbWVudC5pbmRleDtcbiAgY29uc3QgdXBkYXRlT3BDb2RlcyA9IFtdO1xuICBpZiAobmdEZXZNb2RlKSB7XG4gICAgYXR0YWNoRGVidWdHZXR0ZXIodXBkYXRlT3BDb2RlcywgaTE4blVwZGF0ZU9wQ29kZXNUb1N0cmluZyk7XG4gIH1cbiAgaWYgKHRWaWV3LmZpcnN0Q3JlYXRlUGFzcyAmJiB0Vmlldy5kYXRhW2luZGV4XSA9PT0gbnVsbCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICBjb25zdCBhdHRyTmFtZSA9IHZhbHVlc1tpXTtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSB2YWx1ZXNbaSArIDFdO1xuICAgICAgaWYgKG1lc3NhZ2UgIT09ICcnKSB7XG4gICAgICAgIGlmIChJQ1VfUkVHRVhQLnRlc3QobWVzc2FnZSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYElDVSBleHByZXNzaW9ucyBhcmUgbm90IHN1cHBvcnRlZCBpbiBhdHRyaWJ1dGVzLiBNZXNzYWdlOiBcIiR7bWVzc2FnZX1cIi5gKTtcbiAgICAgICAgfVxuICAgICAgICBnZW5lcmF0ZUJpbmRpbmdVcGRhdGVPcENvZGVzKHVwZGF0ZU9wQ29kZXMsIG1lc3NhZ2UsIHByZXZpb3VzRWxlbWVudEluZGV4LCBhdHRyTmFtZSwgY291bnRCaW5kaW5ncyh1cGRhdGVPcENvZGVzKSwgU0VOU0lUSVZFX0FUVFJTW2F0dHJOYW1lLnRvTG93ZXJDYXNlKCldID8gX3Nhbml0aXplVXJsIDogbnVsbCk7XG4gICAgICB9XG4gICAgfVxuICAgIHRWaWV3LmRhdGFbaW5kZXhdID0gdXBkYXRlT3BDb2RlcztcbiAgfVxufVxuZnVuY3Rpb24gZ2VuZXJhdGVCaW5kaW5nVXBkYXRlT3BDb2Rlcyh1cGRhdGVPcENvZGVzLCBzdHIsIGRlc3RpbmF0aW9uTm9kZSwgYXR0ck5hbWUsIGJpbmRpbmdTdGFydCwgc2FuaXRpemVGbikge1xuICBuZ0Rldk1vZGUgJiYgYXNzZXJ0R3JlYXRlclRoYW5PckVxdWFsKGRlc3RpbmF0aW9uTm9kZSwgSEVBREVSX09GRlNFVCwgJ0luZGV4IG11c3QgYmUgaW4gYWJzb2x1dGUgTFZpZXcgb2Zmc2V0Jyk7XG4gIGNvbnN0IG1hc2tJbmRleCA9IHVwZGF0ZU9wQ29kZXMubGVuZ3RoO1xuICBjb25zdCBzaXplSW5kZXggPSBtYXNrSW5kZXggKyAxO1xuICB1cGRhdGVPcENvZGVzLnB1c2gobnVsbCwgbnVsbCk7XG4gIGNvbnN0IHN0YXJ0SW5kZXggPSBtYXNrSW5kZXggKyAyO1xuICBpZiAobmdEZXZNb2RlKSB7XG4gICAgYXR0YWNoRGVidWdHZXR0ZXIodXBkYXRlT3BDb2RlcywgaTE4blVwZGF0ZU9wQ29kZXNUb1N0cmluZyk7XG4gIH1cbiAgY29uc3QgdGV4dFBhcnRzID0gc3RyLnNwbGl0KEJJTkRJTkdfUkVHRVhQKTtcbiAgbGV0IG1hc2sgPSAwO1xuICBmb3IgKGxldCBqID0gMDsgaiA8IHRleHRQYXJ0cy5sZW5ndGg7IGorKykge1xuICAgIGNvbnN0IHRleHRWYWx1ZSA9IHRleHRQYXJ0c1tqXTtcbiAgICBpZiAoaiAmIDEpIHtcbiAgICAgIGNvbnN0IGJpbmRpbmdJbmRleCA9IGJpbmRpbmdTdGFydCArIHBhcnNlSW50KHRleHRWYWx1ZSwgMTApO1xuICAgICAgdXBkYXRlT3BDb2Rlcy5wdXNoKC0xIC0gYmluZGluZ0luZGV4KTtcbiAgICAgIG1hc2sgPSBtYXNrIHwgdG9NYXNrQml0KGJpbmRpbmdJbmRleCk7XG4gICAgfSBlbHNlIGlmICh0ZXh0VmFsdWUgIT09ICcnKSB7XG4gICAgICB1cGRhdGVPcENvZGVzLnB1c2godGV4dFZhbHVlKTtcbiAgICB9XG4gIH1cbiAgdXBkYXRlT3BDb2Rlcy5wdXNoKGRlc3RpbmF0aW9uTm9kZSA8PCAyIHwgKGF0dHJOYW1lID8gMSA6IDApKTtcbiAgaWYgKGF0dHJOYW1lKSB7XG4gICAgdXBkYXRlT3BDb2Rlcy5wdXNoKGF0dHJOYW1lLCBzYW5pdGl6ZUZuKTtcbiAgfVxuICB1cGRhdGVPcENvZGVzW21hc2tJbmRleF0gPSBtYXNrO1xuICB1cGRhdGVPcENvZGVzW3NpemVJbmRleF0gPSB1cGRhdGVPcENvZGVzLmxlbmd0aCAtIHN0YXJ0SW5kZXg7XG4gIHJldHVybiBtYXNrO1xufVxuZnVuY3Rpb24gY291bnRCaW5kaW5ncyhvcENvZGVzKSB7XG4gIGxldCBjb3VudCA9IDA7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgb3BDb2Rlcy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IG9wQ29kZSA9IG9wQ29kZXNbaV07XG4gICAgaWYgKHR5cGVvZiBvcENvZGUgPT09ICdudW1iZXInICYmIG9wQ29kZSA8IDApIHtcbiAgICAgIGNvdW50Kys7XG4gICAgfVxuICB9XG4gIHJldHVybiBjb3VudDtcbn1cbmZ1bmN0aW9uIHRvTWFza0JpdChiaW5kaW5nSW5kZXgpIHtcbiAgcmV0dXJuIDEgPDwgTWF0aC5taW4oYmluZGluZ0luZGV4LCAzMSk7XG59XG5mdW5jdGlvbiByZW1vdmVJbm5lclRlbXBsYXRlVHJhbnNsYXRpb24obWVzc2FnZSkge1xuICBsZXQgbWF0Y2g7XG4gIGxldCByZXMgPSAnJztcbiAgbGV0IGluZGV4ID0gMDtcbiAgbGV0IGluVGVtcGxhdGUgPSBmYWxzZTtcbiAgbGV0IHRhZ01hdGNoZWQ7XG4gIHdoaWxlICgobWF0Y2ggPSBTVUJURU1QTEFURV9SRUdFWFAuZXhlYyhtZXNzYWdlKSkgIT09IG51bGwpIHtcbiAgICBpZiAoIWluVGVtcGxhdGUpIHtcbiAgICAgIHJlcyArPSBtZXNzYWdlLnN1YnN0cmluZyhpbmRleCwgbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGgpO1xuICAgICAgdGFnTWF0Y2hlZCA9IG1hdGNoWzFdO1xuICAgICAgaW5UZW1wbGF0ZSA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChtYXRjaFswXSA9PT0gYCR7TUFSS0VSfS8qJHt0YWdNYXRjaGVkfSR7TUFSS0VSfWApIHtcbiAgICAgICAgaW5kZXggPSBtYXRjaC5pbmRleDtcbiAgICAgICAgaW5UZW1wbGF0ZSA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBuZ0Rldk1vZGUgJiYgYXNzZXJ0RXF1YWwoaW5UZW1wbGF0ZSwgZmFsc2UsIGBUYWcgbWlzbWF0Y2g6IHVuYWJsZSB0byBmaW5kIHRoZSBlbmQgb2YgdGhlIHN1Yi10ZW1wbGF0ZSBpbiB0aGUgdHJhbnNsYXRpb24gXCIke21lc3NhZ2V9XCJgKTtcbiAgcmVzICs9IG1lc3NhZ2Uuc2xpY2UoaW5kZXgpO1xuICByZXR1cm4gcmVzO1xufVxuZnVuY3Rpb24gZ2V0VHJhbnNsYXRpb25Gb3JUZW1wbGF0ZShtZXNzYWdlLCBzdWJUZW1wbGF0ZUluZGV4KSB7XG4gIGlmIChpc1Jvb3RUZW1wbGF0ZU1lc3NhZ2Uoc3ViVGVtcGxhdGVJbmRleCkpIHtcbiAgICByZXR1cm4gcmVtb3ZlSW5uZXJUZW1wbGF0ZVRyYW5zbGF0aW9uKG1lc3NhZ2UpO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHN0YXJ0ID0gbWVzc2FnZS5pbmRleE9mKGA6JHtzdWJUZW1wbGF0ZUluZGV4fSR7TUFSS0VSfWApICsgMiArIHN1YlRlbXBsYXRlSW5kZXgudG9TdHJpbmcoKS5sZW5ndGg7XG4gICAgY29uc3QgZW5kID0gbWVzc2FnZS5zZWFyY2gobmV3IFJlZ0V4cChgJHtNQVJLRVJ9XFxcXC9cXFxcKlxcXFxkKzoke3N1YlRlbXBsYXRlSW5kZXh9JHtNQVJLRVJ9YCkpO1xuICAgIHJldHVybiByZW1vdmVJbm5lclRlbXBsYXRlVHJhbnNsYXRpb24obWVzc2FnZS5zdWJzdHJpbmcoc3RhcnQsIGVuZCkpO1xuICB9XG59XG5mdW5jdGlvbiBpY3VTdGFydChhc3QsIHRWaWV3LCBsVmlldywgdXBkYXRlT3BDb2RlcywgcGFyZW50SWR4LCBpY3VFeHByZXNzaW9uLCBhbmNob3JJZHgpIHtcbiAgbmdEZXZNb2RlICYmIGFzc2VydERlZmluZWQoaWN1RXhwcmVzc2lvbiwgJ0lDVSBleHByZXNzaW9uIG11c3QgYmUgZGVmaW5lZCcpO1xuICBsZXQgYmluZGluZ01hc2sgPSAwO1xuICBjb25zdCB0SWN1ID0ge1xuICAgIHR5cGU6IGljdUV4cHJlc3Npb24udHlwZSxcbiAgICBjdXJyZW50Q2FzZUxWaWV3SW5kZXg6IGFsbG9jRXhwYW5kbyh0VmlldywgbFZpZXcsIDEsIG51bGwpLFxuICAgIGFuY2hvcklkeCxcbiAgICBjYXNlczogW10sXG4gICAgY3JlYXRlOiBbXSxcbiAgICByZW1vdmU6IFtdLFxuICAgIHVwZGF0ZTogW11cbiAgfTtcbiAgYWRkVXBkYXRlSWN1U3dpdGNoKHVwZGF0ZU9wQ29kZXMsIGljdUV4cHJlc3Npb24sIGFuY2hvcklkeCk7XG4gIHNldFRJY3UodFZpZXcsIGFuY2hvcklkeCwgdEljdSk7XG4gIGNvbnN0IHZhbHVlcyA9IGljdUV4cHJlc3Npb24udmFsdWVzO1xuICBjb25zdCBjYXNlcyA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IHZhbHVlQXJyID0gdmFsdWVzW2ldO1xuICAgIGNvbnN0IG5lc3RlZEljdXMgPSBbXTtcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IHZhbHVlQXJyLmxlbmd0aDsgaisrKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHZhbHVlQXJyW2pdO1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgY29uc3QgaWN1SW5kZXggPSBuZXN0ZWRJY3VzLnB1c2godmFsdWUpIC0gMTtcbiAgICAgICAgdmFsdWVBcnJbal0gPSBgPCEtLe+/vSR7aWN1SW5kZXh977+9LS0+YDtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgY2FzZUFzdCA9IFtdO1xuICAgIGNhc2VzLnB1c2goY2FzZUFzdCk7XG4gICAgYmluZGluZ01hc2sgPSBwYXJzZUljdUNhc2UoY2FzZUFzdCwgdFZpZXcsIHRJY3UsIGxWaWV3LCB1cGRhdGVPcENvZGVzLCBwYXJlbnRJZHgsIGljdUV4cHJlc3Npb24uY2FzZXNbaV0sIHZhbHVlQXJyLmpvaW4oJycpLCBuZXN0ZWRJY3VzKSB8IGJpbmRpbmdNYXNrO1xuICB9XG4gIGlmIChiaW5kaW5nTWFzaykge1xuICAgIGFkZFVwZGF0ZUljdVVwZGF0ZSh1cGRhdGVPcENvZGVzLCBiaW5kaW5nTWFzaywgYW5jaG9ySWR4KTtcbiAgfVxuICBhc3QucHVzaCh7XG4gICAga2luZDogMyxcbiAgICBpbmRleDogYW5jaG9ySWR4LFxuICAgIGNhc2VzLFxuICAgIGN1cnJlbnRDYXNlTFZpZXdJbmRleDogdEljdS5jdXJyZW50Q2FzZUxWaWV3SW5kZXhcbiAgfSk7XG59XG5mdW5jdGlvbiBwYXJzZUlDVUJsb2NrKHBhdHRlcm4pIHtcbiAgY29uc3QgY2FzZXMgPSBbXTtcbiAgY29uc3QgdmFsdWVzID0gW107XG4gIGxldCBpY3VUeXBlID0gMTtcbiAgbGV0IG1haW5CaW5kaW5nID0gMDtcbiAgcGF0dGVybiA9IHBhdHRlcm4ucmVwbGFjZShJQ1VfQkxPQ0tfUkVHRVhQLCBmdW5jdGlvbiAoc3RyLCBiaW5kaW5nLCB0eXBlKSB7XG4gICAgaWYgKHR5cGUgPT09ICdzZWxlY3QnKSB7XG4gICAgICBpY3VUeXBlID0gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgaWN1VHlwZSA9IDE7XG4gICAgfVxuICAgIG1haW5CaW5kaW5nID0gcGFyc2VJbnQoYmluZGluZy5zbGljZSgxKSwgMTApO1xuICAgIHJldHVybiAnJztcbiAgfSk7XG4gIGNvbnN0IHBhcnRzID0gaTE4blBhcnNlVGV4dEludG9QYXJ0c0FuZElDVShwYXR0ZXJuKTtcbiAgZm9yIChsZXQgcG9zID0gMDsgcG9zIDwgcGFydHMubGVuZ3RoOykge1xuICAgIGxldCBrZXkgPSBwYXJ0c1twb3MrK10udHJpbSgpO1xuICAgIGlmIChpY3VUeXBlID09PSAxKSB7XG4gICAgICBrZXkgPSBrZXkucmVwbGFjZSgvXFxzKig/Oj0pPyhcXHcrKVxccyovLCAnJDEnKTtcbiAgICB9XG4gICAgaWYgKGtleS5sZW5ndGgpIHtcbiAgICAgIGNhc2VzLnB1c2goa2V5KTtcbiAgICB9XG4gICAgY29uc3QgYmxvY2tzID0gaTE4blBhcnNlVGV4dEludG9QYXJ0c0FuZElDVShwYXJ0c1twb3MrK10pO1xuICAgIGlmIChjYXNlcy5sZW5ndGggPiB2YWx1ZXMubGVuZ3RoKSB7XG4gICAgICB2YWx1ZXMucHVzaChibG9ja3MpO1xuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIHR5cGU6IGljdVR5cGUsXG4gICAgbWFpbkJpbmRpbmc6IG1haW5CaW5kaW5nLFxuICAgIGNhc2VzLFxuICAgIHZhbHVlc1xuICB9O1xufVxuZnVuY3Rpb24gaTE4blBhcnNlVGV4dEludG9QYXJ0c0FuZElDVShwYXR0ZXJuKSB7XG4gIGlmICghcGF0dGVybikge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICBsZXQgcHJldlBvcyA9IDA7XG4gIGNvbnN0IGJyYWNlU3RhY2sgPSBbXTtcbiAgY29uc3QgcmVzdWx0cyA9IFtdO1xuICBjb25zdCBicmFjZXMgPSAvW3t9XS9nO1xuICBicmFjZXMubGFzdEluZGV4ID0gMDtcbiAgbGV0IG1hdGNoO1xuICB3aGlsZSAobWF0Y2ggPSBicmFjZXMuZXhlYyhwYXR0ZXJuKSkge1xuICAgIGNvbnN0IHBvcyA9IG1hdGNoLmluZGV4O1xuICAgIGlmIChtYXRjaFswXSA9PSAnfScpIHtcbiAgICAgIGJyYWNlU3RhY2sucG9wKCk7XG4gICAgICBpZiAoYnJhY2VTdGFjay5sZW5ndGggPT0gMCkge1xuICAgICAgICBjb25zdCBibG9jayA9IHBhdHRlcm4uc3Vic3RyaW5nKHByZXZQb3MsIHBvcyk7XG4gICAgICAgIGlmIChJQ1VfQkxPQ0tfUkVHRVhQLnRlc3QoYmxvY2spKSB7XG4gICAgICAgICAgcmVzdWx0cy5wdXNoKHBhcnNlSUNVQmxvY2soYmxvY2spKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXN1bHRzLnB1c2goYmxvY2spO1xuICAgICAgICB9XG4gICAgICAgIHByZXZQb3MgPSBwb3MgKyAxO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoYnJhY2VTdGFjay5sZW5ndGggPT0gMCkge1xuICAgICAgICBjb25zdCBzdWJzdHJpbmcgPSBwYXR0ZXJuLnN1YnN0cmluZyhwcmV2UG9zLCBwb3MpO1xuICAgICAgICByZXN1bHRzLnB1c2goc3Vic3RyaW5nKTtcbiAgICAgICAgcHJldlBvcyA9IHBvcyArIDE7XG4gICAgICB9XG4gICAgICBicmFjZVN0YWNrLnB1c2goJ3snKTtcbiAgICB9XG4gIH1cbiAgY29uc3Qgc3Vic3RyaW5nID0gcGF0dGVybi5zdWJzdHJpbmcocHJldlBvcyk7XG4gIHJlc3VsdHMucHVzaChzdWJzdHJpbmcpO1xuICByZXR1cm4gcmVzdWx0cztcbn1cbmZ1bmN0aW9uIHBhcnNlSWN1Q2FzZShhc3QsIHRWaWV3LCB0SWN1LCBsVmlldywgdXBkYXRlT3BDb2RlcywgcGFyZW50SWR4LCBjYXNlTmFtZSwgdW5zYWZlQ2FzZUh0bWwsIG5lc3RlZEljdXMpIHtcbiAgY29uc3QgY3JlYXRlID0gW107XG4gIGNvbnN0IHJlbW92ZSA9IFtdO1xuICBjb25zdCB1cGRhdGUgPSBbXTtcbiAgaWYgKG5nRGV2TW9kZSkge1xuICAgIGF0dGFjaERlYnVnR2V0dGVyKGNyZWF0ZSwgaWN1Q3JlYXRlT3BDb2Rlc1RvU3RyaW5nKTtcbiAgICBhdHRhY2hEZWJ1Z0dldHRlcihyZW1vdmUsIGkxOG5SZW1vdmVPcENvZGVzVG9TdHJpbmcpO1xuICAgIGF0dGFjaERlYnVnR2V0dGVyKHVwZGF0ZSwgaTE4blVwZGF0ZU9wQ29kZXNUb1N0cmluZyk7XG4gIH1cbiAgdEljdS5jYXNlcy5wdXNoKGNhc2VOYW1lKTtcbiAgdEljdS5jcmVhdGUucHVzaChjcmVhdGUpO1xuICB0SWN1LnJlbW92ZS5wdXNoKHJlbW92ZSk7XG4gIHRJY3UudXBkYXRlLnB1c2godXBkYXRlKTtcbiAgY29uc3QgaW5lcnRCb2R5SGVscGVyID0gZ2V0SW5lcnRCb2R5SGVscGVyKGdldERvY3VtZW50KCkpO1xuICBjb25zdCBpbmVydEJvZHlFbGVtZW50ID0gaW5lcnRCb2R5SGVscGVyLmdldEluZXJ0Qm9keUVsZW1lbnQodW5zYWZlQ2FzZUh0bWwpO1xuICBuZ0Rldk1vZGUgJiYgYXNzZXJ0RGVmaW5lZChpbmVydEJvZHlFbGVtZW50LCAnVW5hYmxlIHRvIGdlbmVyYXRlIGluZXJ0IGJvZHkgZWxlbWVudCcpO1xuICBjb25zdCBpbmVydFJvb3ROb2RlID0gZ2V0VGVtcGxhdGVDb250ZW50KGluZXJ0Qm9keUVsZW1lbnQpIHx8IGluZXJ0Qm9keUVsZW1lbnQ7XG4gIGlmIChpbmVydFJvb3ROb2RlKSB7XG4gICAgcmV0dXJuIHdhbGtJY3VUcmVlKGFzdCwgdFZpZXcsIHRJY3UsIGxWaWV3LCB1cGRhdGVPcENvZGVzLCBjcmVhdGUsIHJlbW92ZSwgdXBkYXRlLCBpbmVydFJvb3ROb2RlLCBwYXJlbnRJZHgsIG5lc3RlZEljdXMsIDApO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAwO1xuICB9XG59XG5mdW5jdGlvbiB3YWxrSWN1VHJlZShhc3QsIHRWaWV3LCB0SWN1LCBsVmlldywgc2hhcmVkVXBkYXRlT3BDb2RlcywgY3JlYXRlLCByZW1vdmUsIHVwZGF0ZSwgcGFyZW50Tm9kZSwgcGFyZW50SWR4LCBuZXN0ZWRJY3VzLCBkZXB0aCkge1xuICBsZXQgYmluZGluZ01hc2sgPSAwO1xuICBsZXQgY3VycmVudE5vZGUgPSBwYXJlbnROb2RlLmZpcnN0Q2hpbGQ7XG4gIHdoaWxlIChjdXJyZW50Tm9kZSkge1xuICAgIGNvbnN0IG5ld0luZGV4ID0gYWxsb2NFeHBhbmRvKHRWaWV3LCBsVmlldywgMSwgbnVsbCk7XG4gICAgc3dpdGNoIChjdXJyZW50Tm9kZS5ub2RlVHlwZSkge1xuICAgICAgY2FzZSBOb2RlLkVMRU1FTlRfTk9ERTpcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IGN1cnJlbnROb2RlO1xuICAgICAgICBjb25zdCB0YWdOYW1lID0gZWxlbWVudC50YWdOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmIChWQUxJRF9FTEVNRU5UUy5oYXNPd25Qcm9wZXJ0eSh0YWdOYW1lKSkge1xuICAgICAgICAgIGFkZENyZWF0ZU5vZGVBbmRBcHBlbmQoY3JlYXRlLCBFTEVNRU5UX01BUktFUiwgdGFnTmFtZSwgcGFyZW50SWR4LCBuZXdJbmRleCk7XG4gICAgICAgICAgdFZpZXcuZGF0YVtuZXdJbmRleF0gPSB0YWdOYW1lO1xuICAgICAgICAgIGNvbnN0IGVsQXR0cnMgPSBlbGVtZW50LmF0dHJpYnV0ZXM7XG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlbEF0dHJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBhdHRyID0gZWxBdHRycy5pdGVtKGkpO1xuICAgICAgICAgICAgY29uc3QgbG93ZXJBdHRyTmFtZSA9IGF0dHIubmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgY29uc3QgaGFzQmluZGluZyA9ICEhYXR0ci52YWx1ZS5tYXRjaChCSU5ESU5HX1JFR0VYUCk7XG4gICAgICAgICAgICBpZiAoaGFzQmluZGluZykge1xuICAgICAgICAgICAgICBpZiAoVkFMSURfQVRUUlMuaGFzT3duUHJvcGVydHkobG93ZXJBdHRyTmFtZSkpIHtcbiAgICAgICAgICAgICAgICBnZW5lcmF0ZUJpbmRpbmdVcGRhdGVPcENvZGVzKHVwZGF0ZSwgYXR0ci52YWx1ZSwgbmV3SW5kZXgsIGF0dHIubmFtZSwgMCwgU0VOU0lUSVZFX0FUVFJTW2xvd2VyQXR0ck5hbWVdID8gX3Nhbml0aXplVXJsIDogbnVsbCk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbmdEZXZNb2RlICYmIGNvbnNvbGUud2FybihgV0FSTklORzogaWdub3JpbmcgdW5zYWZlIGF0dHJpYnV0ZSB2YWx1ZSBgICsgYCR7bG93ZXJBdHRyTmFtZX0gb24gZWxlbWVudCAke3RhZ05hbWV9IGAgKyBgKHNlZSAke1hTU19TRUNVUklUWV9VUkx9KWApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKFZBTElEX0FUVFJTW2xvd2VyQXR0ck5hbWVdKSB7XG4gICAgICAgICAgICAgIGlmIChTRU5TSVRJVkVfQVRUUlNbbG93ZXJBdHRyTmFtZV0pIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG5nRGV2TW9kZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbmdEZXZNb2RlKSB7XG4gICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oYFdBUk5JTkc6IGlnbm9yaW5nIHVuc2FmZSBhdHRyaWJ1dGUgYCArIGAke2xvd2VyQXR0ck5hbWV9IG9uIGVsZW1lbnQgJHt0YWdOYW1lfSBgICsgYChzZWUgJHtYU1NfU0VDVVJJVFlfVVJMfSlgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYWRkQ3JlYXRlQXR0cmlidXRlKGNyZWF0ZSwgbmV3SW5kZXgsIGF0dHIubmFtZSwgJ3Vuc2FmZTpibG9ja2VkJyk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYWRkQ3JlYXRlQXR0cmlidXRlKGNyZWF0ZSwgbmV3SW5kZXgsIGF0dHIubmFtZSwgYXR0ci52YWx1ZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGlmICh0eXBlb2YgbmdEZXZNb2RlICE9PSAndW5kZWZpbmVkJyAmJiBuZ0Rldk1vZGUpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oYFdBUk5JTkc6IGlnbm9yaW5nIHVua25vd24gYXR0cmlidXRlIG5hbWUgYCArIGAke2xvd2VyQXR0ck5hbWV9IG9uIGVsZW1lbnQgJHt0YWdOYW1lfSBgICsgYChzZWUgJHtYU1NfU0VDVVJJVFlfVVJMfSlgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBlbGVtZW50Tm9kZSA9IHtcbiAgICAgICAgICAgIGtpbmQ6IDEsXG4gICAgICAgICAgICBpbmRleDogbmV3SW5kZXgsXG4gICAgICAgICAgICBjaGlsZHJlbjogW11cbiAgICAgICAgICB9O1xuICAgICAgICAgIGFzdC5wdXNoKGVsZW1lbnROb2RlKTtcbiAgICAgICAgICBiaW5kaW5nTWFzayA9IHdhbGtJY3VUcmVlKGVsZW1lbnROb2RlLmNoaWxkcmVuLCB0VmlldywgdEljdSwgbFZpZXcsIHNoYXJlZFVwZGF0ZU9wQ29kZXMsIGNyZWF0ZSwgcmVtb3ZlLCB1cGRhdGUsIGN1cnJlbnROb2RlLCBuZXdJbmRleCwgbmVzdGVkSWN1cywgZGVwdGggKyAxKSB8IGJpbmRpbmdNYXNrO1xuICAgICAgICAgIGFkZFJlbW92ZU5vZGUocmVtb3ZlLCBuZXdJbmRleCwgZGVwdGgpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBOb2RlLlRFWFRfTk9ERTpcbiAgICAgICAgY29uc3QgdmFsdWUgPSBjdXJyZW50Tm9kZS50ZXh0Q29udGVudCB8fCAnJztcbiAgICAgICAgY29uc3QgaGFzQmluZGluZyA9IHZhbHVlLm1hdGNoKEJJTkRJTkdfUkVHRVhQKTtcbiAgICAgICAgYWRkQ3JlYXRlTm9kZUFuZEFwcGVuZChjcmVhdGUsIG51bGwsIGhhc0JpbmRpbmcgPyAnJyA6IHZhbHVlLCBwYXJlbnRJZHgsIG5ld0luZGV4KTtcbiAgICAgICAgYWRkUmVtb3ZlTm9kZShyZW1vdmUsIG5ld0luZGV4LCBkZXB0aCk7XG4gICAgICAgIGlmIChoYXNCaW5kaW5nKSB7XG4gICAgICAgICAgYmluZGluZ01hc2sgPSBnZW5lcmF0ZUJpbmRpbmdVcGRhdGVPcENvZGVzKHVwZGF0ZSwgdmFsdWUsIG5ld0luZGV4LCBudWxsLCAwLCBudWxsKSB8IGJpbmRpbmdNYXNrO1xuICAgICAgICB9XG4gICAgICAgIGFzdC5wdXNoKHtcbiAgICAgICAgICBraW5kOiAwLFxuICAgICAgICAgIGluZGV4OiBuZXdJbmRleFxuICAgICAgICB9KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIE5vZGUuQ09NTUVOVF9OT0RFOlxuICAgICAgICBjb25zdCBpc05lc3RlZEljdSA9IE5FU1RFRF9JQ1UuZXhlYyhjdXJyZW50Tm9kZS50ZXh0Q29udGVudCB8fCAnJyk7XG4gICAgICAgIGlmIChpc05lc3RlZEljdSkge1xuICAgICAgICAgIGNvbnN0IG5lc3RlZEljdUluZGV4ID0gcGFyc2VJbnQoaXNOZXN0ZWRJY3VbMV0sIDEwKTtcbiAgICAgICAgICBjb25zdCBpY3VFeHByZXNzaW9uID0gbmVzdGVkSWN1c1tuZXN0ZWRJY3VJbmRleF07XG4gICAgICAgICAgYWRkQ3JlYXRlTm9kZUFuZEFwcGVuZChjcmVhdGUsIElDVV9NQVJLRVIsIG5nRGV2TW9kZSA/IGBuZXN0ZWQgSUNVICR7bmVzdGVkSWN1SW5kZXh9YCA6ICcnLCBwYXJlbnRJZHgsIG5ld0luZGV4KTtcbiAgICAgICAgICBpY3VTdGFydChhc3QsIHRWaWV3LCBsVmlldywgc2hhcmVkVXBkYXRlT3BDb2RlcywgcGFyZW50SWR4LCBpY3VFeHByZXNzaW9uLCBuZXdJbmRleCk7XG4gICAgICAgICAgYWRkUmVtb3ZlTmVzdGVkSWN1KHJlbW92ZSwgbmV3SW5kZXgsIGRlcHRoKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgY3VycmVudE5vZGUgPSBjdXJyZW50Tm9kZS5uZXh0U2libGluZztcbiAgfVxuICByZXR1cm4gYmluZGluZ01hc2s7XG59XG5mdW5jdGlvbiBhZGRSZW1vdmVOb2RlKHJlbW92ZSwgaW5kZXgsIGRlcHRoKSB7XG4gIGlmIChkZXB0aCA9PT0gMCkge1xuICAgIHJlbW92ZS5wdXNoKGluZGV4KTtcbiAgfVxufVxuZnVuY3Rpb24gYWRkUmVtb3ZlTmVzdGVkSWN1KHJlbW92ZSwgaW5kZXgsIGRlcHRoKSB7XG4gIGlmIChkZXB0aCA9PT0gMCkge1xuICAgIHJlbW92ZS5wdXNoKH5pbmRleCk7XG4gICAgcmVtb3ZlLnB1c2goaW5kZXgpO1xuICB9XG59XG5mdW5jdGlvbiBhZGRVcGRhdGVJY3VTd2l0Y2godXBkYXRlLCBpY3VFeHByZXNzaW9uLCBpbmRleCkge1xuICB1cGRhdGUucHVzaCh0b01hc2tCaXQoaWN1RXhwcmVzc2lvbi5tYWluQmluZGluZyksIDIsIC0xIC0gaWN1RXhwcmVzc2lvbi5tYWluQmluZGluZywgaW5kZXggPDwgMiB8IDIpO1xufVxuZnVuY3Rpb24gYWRkVXBkYXRlSWN1VXBkYXRlKHVwZGF0ZSwgYmluZGluZ01hc2ssIGluZGV4KSB7XG4gIHVwZGF0ZS5wdXNoKGJpbmRpbmdNYXNrLCAxLCBpbmRleCA8PCAyIHwgMyk7XG59XG5mdW5jdGlvbiBhZGRDcmVhdGVOb2RlQW5kQXBwZW5kKGNyZWF0ZSwgbWFya2VyLCB0ZXh0LCBhcHBlbmRUb1BhcmVudElkeCwgY3JlYXRlQXRJZHgpIHtcbiAgaWYgKG1hcmtlciAhPT0gbnVsbCkge1xuICAgIGNyZWF0ZS5wdXNoKG1hcmtlcik7XG4gIH1cbiAgY3JlYXRlLnB1c2godGV4dCwgY3JlYXRlQXRJZHgsIGljdUNyZWF0ZU9wQ29kZSgwLCBhcHBlbmRUb1BhcmVudElkeCwgY3JlYXRlQXRJZHgpKTtcbn1cbmZ1bmN0aW9uIGFkZENyZWF0ZUF0dHJpYnV0ZShjcmVhdGUsIG5ld0luZGV4LCBhdHRyTmFtZSwgYXR0clZhbHVlKSB7XG4gIGNyZWF0ZS5wdXNoKG5ld0luZGV4IDw8IDEgfCAxLCBhdHRyTmFtZSwgYXR0clZhbHVlKTtcbn1cbmNvbnN0IFJPT1RfVEVNUExBVEVfSUQgPSAwO1xuY29uc3QgUFBfTVVMVElfVkFMVUVfUExBQ0VIT0xERVJTX1JFR0VYUCA9IC9cXFso77+9Lis/77+9PylcXF0vO1xuY29uc3QgUFBfUExBQ0VIT0xERVJTX1JFR0VYUCA9IC9cXFso77+9Lis/77+9PylcXF18KO+/vVxcLz9cXCpcXGQrOlxcZCvvv70pL2c7XG5jb25zdCBQUF9JQ1VfVkFSU19SRUdFWFAgPSAvKHtcXHMqKShWQVJfKFBMVVJBTHxTRUxFQ1QpKF9cXGQrKT8pKFxccyosKS9nO1xuY29uc3QgUFBfSUNVX1BMQUNFSE9MREVSU19SRUdFWFAgPSAveyhbQS1aMC05X10rKX0vZztcbmNvbnN0IFBQX0lDVVNfUkVHRVhQID0gL++/vUkxOE5fRVhQXyhJQ1UoX1xcZCspPynvv70vZztcbmNvbnN0IFBQX0NMT1NFX1RFTVBMQVRFX1JFR0VYUCA9IC9cXC9cXCovO1xuY29uc3QgUFBfVEVNUExBVEVfSURfUkVHRVhQID0gL1xcZCtcXDooXFxkKykvO1xuZnVuY3Rpb24gaTE4blBvc3Rwcm9jZXNzKG1lc3NhZ2UsIHJlcGxhY2VtZW50cyA9IHt9KSB7XG4gIGxldCByZXN1bHQgPSBtZXNzYWdlO1xuICBpZiAoUFBfTVVMVElfVkFMVUVfUExBQ0VIT0xERVJTX1JFR0VYUC50ZXN0KG1lc3NhZ2UpKSB7XG4gICAgY29uc3QgbWF0Y2hlcyA9IHt9O1xuICAgIGNvbnN0IHRlbXBsYXRlSWRzU3RhY2sgPSBbUk9PVF9URU1QTEFURV9JRF07XG4gICAgcmVzdWx0ID0gcmVzdWx0LnJlcGxhY2UoUFBfUExBQ0VIT0xERVJTX1JFR0VYUCwgKG0sIHBocywgdG1wbCkgPT4ge1xuICAgICAgY29uc3QgY29udGVudCA9IHBocyB8fCB0bXBsO1xuICAgICAgY29uc3QgcGxhY2Vob2xkZXJzID0gbWF0Y2hlc1tjb250ZW50XSB8fCBbXTtcbiAgICAgIGlmICghcGxhY2Vob2xkZXJzLmxlbmd0aCkge1xuICAgICAgICBjb250ZW50LnNwbGl0KCd8JykuZm9yRWFjaChwbGFjZWhvbGRlciA9PiB7XG4gICAgICAgICAgY29uc3QgbWF0Y2ggPSBwbGFjZWhvbGRlci5tYXRjaChQUF9URU1QTEFURV9JRF9SRUdFWFApO1xuICAgICAgICAgIGNvbnN0IHRlbXBsYXRlSWQgPSBtYXRjaCA/IHBhcnNlSW50KG1hdGNoWzFdLCAxMCkgOiBST09UX1RFTVBMQVRFX0lEO1xuICAgICAgICAgIGNvbnN0IGlzQ2xvc2VUZW1wbGF0ZVRhZyA9IFBQX0NMT1NFX1RFTVBMQVRFX1JFR0VYUC50ZXN0KHBsYWNlaG9sZGVyKTtcbiAgICAgICAgICBwbGFjZWhvbGRlcnMucHVzaChbdGVtcGxhdGVJZCwgaXNDbG9zZVRlbXBsYXRlVGFnLCBwbGFjZWhvbGRlcl0pO1xuICAgICAgICB9KTtcbiAgICAgICAgbWF0Y2hlc1tjb250ZW50XSA9IHBsYWNlaG9sZGVycztcbiAgICAgIH1cbiAgICAgIGlmICghcGxhY2Vob2xkZXJzLmxlbmd0aCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGkxOG4gcG9zdHByb2Nlc3M6IHVubWF0Y2hlZCBwbGFjZWhvbGRlciAtICR7Y29udGVudH1gKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGN1cnJlbnRUZW1wbGF0ZUlkID0gdGVtcGxhdGVJZHNTdGFja1t0ZW1wbGF0ZUlkc1N0YWNrLmxlbmd0aCAtIDFdO1xuICAgICAgbGV0IGlkeCA9IDA7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBsYWNlaG9sZGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAocGxhY2Vob2xkZXJzW2ldWzBdID09PSBjdXJyZW50VGVtcGxhdGVJZCkge1xuICAgICAgICAgIGlkeCA9IGk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbnN0IFt0ZW1wbGF0ZUlkLCBpc0Nsb3NlVGVtcGxhdGVUYWcsIHBsYWNlaG9sZGVyXSA9IHBsYWNlaG9sZGVyc1tpZHhdO1xuICAgICAgaWYgKGlzQ2xvc2VUZW1wbGF0ZVRhZykge1xuICAgICAgICB0ZW1wbGF0ZUlkc1N0YWNrLnBvcCgpO1xuICAgICAgfSBlbHNlIGlmIChjdXJyZW50VGVtcGxhdGVJZCAhPT0gdGVtcGxhdGVJZCkge1xuICAgICAgICB0ZW1wbGF0ZUlkc1N0YWNrLnB1c2godGVtcGxhdGVJZCk7XG4gICAgICB9XG4gICAgICBwbGFjZWhvbGRlcnMuc3BsaWNlKGlkeCwgMSk7XG4gICAgICByZXR1cm4gcGxhY2Vob2xkZXI7XG4gICAgfSk7XG4gIH1cbiAgaWYgKCFPYmplY3Qua2V5cyhyZXBsYWNlbWVudHMpLmxlbmd0aCkge1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgcmVzdWx0ID0gcmVzdWx0LnJlcGxhY2UoUFBfSUNVX1ZBUlNfUkVHRVhQLCAobWF0Y2gsIHN0YXJ0LCBrZXksIF90eXBlLCBfaWR4LCBlbmQpID0+IHtcbiAgICByZXR1cm4gcmVwbGFjZW1lbnRzLmhhc093blByb3BlcnR5KGtleSkgPyBgJHtzdGFydH0ke3JlcGxhY2VtZW50c1trZXldfSR7ZW5kfWAgOiBtYXRjaDtcbiAgfSk7XG4gIHJlc3VsdCA9IHJlc3VsdC5yZXBsYWNlKFBQX0lDVV9QTEFDRUhPTERFUlNfUkVHRVhQLCAobWF0Y2gsIGtleSkgPT4ge1xuICAgIHJldHVybiByZXBsYWNlbWVudHMuaGFzT3duUHJvcGVydHkoa2V5KSA/IHJlcGxhY2VtZW50c1trZXldIDogbWF0Y2g7XG4gIH0pO1xuICByZXN1bHQgPSByZXN1bHQucmVwbGFjZShQUF9JQ1VTX1JFR0VYUCwgKG1hdGNoLCBrZXkpID0+IHtcbiAgICBpZiAocmVwbGFjZW1lbnRzLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgIGNvbnN0IGxpc3QgPSByZXBsYWNlbWVudHNba2V5XTtcbiAgICAgIGlmICghbGlzdC5sZW5ndGgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBpMThuIHBvc3Rwcm9jZXNzOiB1bm1hdGNoZWQgSUNVIC0gJHttYXRjaH0gd2l0aCBrZXk6ICR7a2V5fWApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGxpc3Quc2hpZnQoKTtcbiAgICB9XG4gICAgcmV0dXJuIG1hdGNoO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cbmZ1bmN0aW9uIMm1ybVpMThuU3RhcnQoaW5kZXgsIG1lc3NhZ2VJbmRleCwgc3ViVGVtcGxhdGVJbmRleCA9IC0xKSB7XG4gIGNvbnN0IHRWaWV3ID0gZ2V0VFZpZXcoKTtcbiAgY29uc3QgbFZpZXcgPSBnZXRMVmlldygpO1xuICBjb25zdCBhZGp1c3RlZEluZGV4ID0gSEVBREVSX09GRlNFVCArIGluZGV4O1xuICBuZ0Rldk1vZGUgJiYgYXNzZXJ0RGVmaW5lZCh0VmlldywgYHRWaWV3IHNob3VsZCBiZSBkZWZpbmVkYCk7XG4gIGNvbnN0IG1lc3NhZ2UgPSBnZXRDb25zdGFudCh0Vmlldy5jb25zdHMsIG1lc3NhZ2VJbmRleCk7XG4gIGNvbnN0IHBhcmVudFROb2RlID0gZ2V0Q3VycmVudFBhcmVudFROb2RlKCk7XG4gIGlmICh0Vmlldy5maXJzdENyZWF0ZVBhc3MpIHtcbiAgICBpMThuU3RhcnRGaXJzdENyZWF0ZVBhc3ModFZpZXcsIHBhcmVudFROb2RlID09PSBudWxsID8gMCA6IHBhcmVudFROb2RlLmluZGV4LCBsVmlldywgYWRqdXN0ZWRJbmRleCwgbWVzc2FnZSwgc3ViVGVtcGxhdGVJbmRleCk7XG4gIH1cbiAgaWYgKHRWaWV3LnR5cGUgPT09IDIpIHtcbiAgICBjb25zdCBjb21wb25lbnRMVmlldyA9IGxWaWV3W0RFQ0xBUkFUSU9OX0NPTVBPTkVOVF9WSUVXXTtcbiAgICBjb21wb25lbnRMVmlld1tGTEFHU10gfD0gMzI7XG4gIH0gZWxzZSB7XG4gICAgbFZpZXdbRkxBR1NdIHw9IDMyO1xuICB9XG4gIGNvbnN0IHRJMThuID0gdFZpZXcuZGF0YVthZGp1c3RlZEluZGV4XTtcbiAgY29uc3Qgc2FtZVZpZXdQYXJlbnRUTm9kZSA9IHBhcmVudFROb2RlID09PSBsVmlld1tUX0hPU1RdID8gbnVsbCA6IHBhcmVudFROb2RlO1xuICBjb25zdCBwYXJlbnRSTm9kZSA9IGdldENsb3Nlc3RSRWxlbWVudCh0Vmlldywgc2FtZVZpZXdQYXJlbnRUTm9kZSwgbFZpZXcpO1xuICBjb25zdCBpbnNlcnRJbkZyb250T2YgPSBwYXJlbnRUTm9kZSAmJiBwYXJlbnRUTm9kZS50eXBlICYgOCA/IGxWaWV3W3BhcmVudFROb2RlLmluZGV4XSA6IG51bGw7XG4gIHByZXBhcmVJMThuQmxvY2tGb3JIeWRyYXRpb24obFZpZXcsIGFkanVzdGVkSW5kZXgsIHBhcmVudFROb2RlLCBzdWJUZW1wbGF0ZUluZGV4KTtcbiAgYXBwbHlDcmVhdGVPcENvZGVzKGxWaWV3LCB0STE4bi5jcmVhdGUsIHBhcmVudFJOb2RlLCBpbnNlcnRJbkZyb250T2YpO1xuICBzZXRJbkkxOG5CbG9jayh0cnVlKTtcbn1cbmZ1bmN0aW9uIMm1ybVpMThuRW5kKCkge1xuICBzZXRJbkkxOG5CbG9jayhmYWxzZSk7XG59XG5mdW5jdGlvbiDJtcm1aTE4bihpbmRleCwgbWVzc2FnZUluZGV4LCBzdWJUZW1wbGF0ZUluZGV4KSB7XG4gIMm1ybVpMThuU3RhcnQoaW5kZXgsIG1lc3NhZ2VJbmRleCwgc3ViVGVtcGxhdGVJbmRleCk7XG4gIMm1ybVpMThuRW5kKCk7XG59XG5mdW5jdGlvbiDJtcm1aTE4bkF0dHJpYnV0ZXMoaW5kZXgsIGF0dHJzSW5kZXgpIHtcbiAgY29uc3QgdFZpZXcgPSBnZXRUVmlldygpO1xuICBuZ0Rldk1vZGUgJiYgYXNzZXJ0RGVmaW5lZCh0VmlldywgYHRWaWV3IHNob3VsZCBiZSBkZWZpbmVkYCk7XG4gIGNvbnN0IGF0dHJzID0gZ2V0Q29uc3RhbnQodFZpZXcuY29uc3RzLCBhdHRyc0luZGV4KTtcbiAgaTE4bkF0dHJpYnV0ZXNGaXJzdFBhc3ModFZpZXcsIGluZGV4ICsgSEVBREVSX09GRlNFVCwgYXR0cnMpO1xufVxuZnVuY3Rpb24gybXJtWkxOG5FeHAodmFsdWUpIHtcbiAgY29uc3QgbFZpZXcgPSBnZXRMVmlldygpO1xuICBzZXRNYXNrQml0KGJpbmRpbmdVcGRhdGVkKGxWaWV3LCBuZXh0QmluZGluZ0luZGV4KCksIHZhbHVlKSk7XG4gIHJldHVybiDJtcm1aTE4bkV4cDtcbn1cbmZ1bmN0aW9uIMm1ybVpMThuQXBwbHkoaW5kZXgpIHtcbiAgYXBwbHlJMThuKGdldFRWaWV3KCksIGdldExWaWV3KCksIGluZGV4ICsgSEVBREVSX09GRlNFVCk7XG59XG5mdW5jdGlvbiDJtcm1aTE4blBvc3Rwcm9jZXNzKG1lc3NhZ2UsIHJlcGxhY2VtZW50cyA9IHt9KSB7XG4gIHJldHVybiBpMThuUG9zdHByb2Nlc3MobWVzc2FnZSwgcmVwbGFjZW1lbnRzKTtcbn1cbmZ1bmN0aW9uIMm1ybVsaXN0ZW5lcihldmVudE5hbWUsIGxpc3RlbmVyRm4sIGV2ZW50VGFyZ2V0UmVzb2x2ZXIpIHtcbiAgY29uc3QgbFZpZXcgPSBnZXRMVmlldygpO1xuICBjb25zdCB0VmlldyA9IGdldFRWaWV3KCk7XG4gIGNvbnN0IHROb2RlID0gZ2V0Q3VycmVudFROb2RlKCk7XG4gIGxpc3RlbmVySW50ZXJuYWwodFZpZXcsIGxWaWV3LCBsVmlld1tSRU5ERVJFUl0sIHROb2RlLCBldmVudE5hbWUsIGxpc3RlbmVyRm4sIGV2ZW50VGFyZ2V0UmVzb2x2ZXIpO1xuICByZXR1cm4gybXJtWxpc3RlbmVyO1xufVxuZnVuY3Rpb24gybXJtXN5bnRoZXRpY0hvc3RMaXN0ZW5lcihldmVudE5hbWUsIGxpc3RlbmVyRm4pIHtcbiAgY29uc3QgdE5vZGUgPSBnZXRDdXJyZW50VE5vZGUoKTtcbiAgY29uc3QgbFZpZXcgPSBnZXRMVmlldygpO1xuICBjb25zdCB0VmlldyA9IGdldFRWaWV3KCk7XG4gIGNvbnN0IGN1cnJlbnREZWYgPSBnZXRDdXJyZW50RGlyZWN0aXZlRGVmKHRWaWV3LmRhdGEpO1xuICBjb25zdCByZW5kZXJlciA9IGxvYWRDb21wb25lbnRSZW5kZXJlcihjdXJyZW50RGVmLCB0Tm9kZSwgbFZpZXcpO1xuICBsaXN0ZW5lckludGVybmFsKHRWaWV3LCBsVmlldywgcmVuZGVyZXIsIHROb2RlLCBldmVudE5hbWUsIGxpc3RlbmVyRm4pO1xuICByZXR1cm4gybXJtXN5bnRoZXRpY0hvc3RMaXN0ZW5lcjtcbn1cbmZ1bmN0aW9uIMm1ybVkb21MaXN0ZW5lcihldmVudE5hbWUsIGxpc3RlbmVyRm4sIGV2ZW50VGFyZ2V0UmVzb2x2ZXIpIHtcbiAgY29uc3QgbFZpZXcgPSBnZXRMVmlldygpO1xuICBjb25zdCB0VmlldyA9IGdldFRWaWV3KCk7XG4gIGNvbnN0IHROb2RlID0gZ2V0Q3VycmVudFROb2RlKCk7XG4gIGlmICh0Tm9kZS50eXBlICYgMyB8fCBldmVudFRhcmdldFJlc29sdmVyKSB7XG4gICAgbGlzdGVuVG9Eb21FdmVudCh0Tm9kZSwgdFZpZXcsIGxWaWV3LCBldmVudFRhcmdldFJlc29sdmVyLCBsVmlld1tSRU5ERVJFUl0sIGV2ZW50TmFtZSwgbGlzdGVuZXJGbiwgd3JhcExpc3RlbmVyKHROb2RlLCBsVmlldywgbGlzdGVuZXJGbikpO1xuICB9XG4gIHJldHVybiDJtcm1ZG9tTGlzdGVuZXI7XG59XG5mdW5jdGlvbiBsaXN0ZW5lckludGVybmFsKHRWaWV3LCBsVmlldywgcmVuZGVyZXIsIHROb2RlLCBldmVudE5hbWUsIGxpc3RlbmVyRm4sIGV2ZW50VGFyZ2V0UmVzb2x2ZXIpIHtcbiAgbmdEZXZNb2RlICYmIGFzc2VydFROb2RlVHlwZSh0Tm9kZSwgMyB8IDEyKTtcbiAgbGV0IHByb2Nlc3NPdXRwdXRzID0gdHJ1ZTtcbiAgbGV0IHdyYXBwZWRMaXN0ZW5lciA9IG51bGw7XG4gIGlmICh0Tm9kZS50eXBlICYgMyB8fCBldmVudFRhcmdldFJlc29sdmVyKSB7XG4gICAgd3JhcHBlZExpc3RlbmVyID8/PSB3cmFwTGlzdGVuZXIodE5vZGUsIGxWaWV3LCBsaXN0ZW5lckZuKTtcbiAgICBjb25zdCBoYXNDb2FsZXNjZWREb21FdmVudCA9IGxpc3RlblRvRG9tRXZlbnQodE5vZGUsIHRWaWV3LCBsVmlldywgZXZlbnRUYXJnZXRSZXNvbHZlciwgcmVuZGVyZXIsIGV2ZW50TmFtZSwgbGlzdGVuZXJGbiwgd3JhcHBlZExpc3RlbmVyKTtcbiAgICBpZiAoaGFzQ29hbGVzY2VkRG9tRXZlbnQpIHtcbiAgICAgIHByb2Nlc3NPdXRwdXRzID0gZmFsc2U7XG4gICAgfVxuICB9XG4gIGlmIChwcm9jZXNzT3V0cHV0cykge1xuICAgIGNvbnN0IG91dHB1dENvbmZpZyA9IHROb2RlLm91dHB1dHM/LltldmVudE5hbWVdO1xuICAgIGNvbnN0IGhvc3REaXJlY3RpdmVPdXRwdXRDb25maWcgPSB0Tm9kZS5ob3N0RGlyZWN0aXZlT3V0cHV0cz8uW2V2ZW50TmFtZV07XG4gICAgaWYgKGhvc3REaXJlY3RpdmVPdXRwdXRDb25maWcgJiYgaG9zdERpcmVjdGl2ZU91dHB1dENvbmZpZy5sZW5ndGgpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaG9zdERpcmVjdGl2ZU91dHB1dENvbmZpZy5sZW5ndGg7IGkgKz0gMikge1xuICAgICAgICBjb25zdCBpbmRleCA9IGhvc3REaXJlY3RpdmVPdXRwdXRDb25maWdbaV07XG4gICAgICAgIGNvbnN0IGxvb2t1cE5hbWUgPSBob3N0RGlyZWN0aXZlT3V0cHV0Q29uZmlnW2kgKyAxXTtcbiAgICAgICAgd3JhcHBlZExpc3RlbmVyID8/PSB3cmFwTGlzdGVuZXIodE5vZGUsIGxWaWV3LCBsaXN0ZW5lckZuKTtcbiAgICAgICAgbGlzdGVuVG9PdXRwdXQodE5vZGUsIGxWaWV3LCBpbmRleCwgbG9va3VwTmFtZSwgZXZlbnROYW1lLCB3cmFwcGVkTGlzdGVuZXIpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAob3V0cHV0Q29uZmlnICYmIG91dHB1dENvbmZpZy5sZW5ndGgpIHtcbiAgICAgIGZvciAoY29uc3QgaW5kZXggb2Ygb3V0cHV0Q29uZmlnKSB7XG4gICAgICAgIHdyYXBwZWRMaXN0ZW5lciA/Pz0gd3JhcExpc3RlbmVyKHROb2RlLCBsVmlldywgbGlzdGVuZXJGbik7XG4gICAgICAgIGxpc3RlblRvT3V0cHV0KHROb2RlLCBsVmlldywgaW5kZXgsIGV2ZW50TmFtZSwgZXZlbnROYW1lLCB3cmFwcGVkTGlzdGVuZXIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gybXJtW5leHRDb250ZXh0KGxldmVsID0gMSkge1xuICByZXR1cm4gbmV4dENvbnRleHRJbXBsKGxldmVsKTtcbn1cbmZ1bmN0aW9uIG1hdGNoaW5nUHJvamVjdGlvblNsb3RJbmRleCh0Tm9kZSwgcHJvamVjdGlvblNsb3RzKSB7XG4gIGxldCB3aWxkY2FyZE5nQ29udGVudEluZGV4ID0gbnVsbDtcbiAgY29uc3QgbmdQcm9qZWN0QXNBdHRyVmFsID0gZ2V0UHJvamVjdEFzQXR0clZhbHVlKHROb2RlKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcm9qZWN0aW9uU2xvdHMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBzbG90VmFsdWUgPSBwcm9qZWN0aW9uU2xvdHNbaV07XG4gICAgaWYgKHNsb3RWYWx1ZSA9PT0gJyonKSB7XG4gICAgICB3aWxkY2FyZE5nQ29udGVudEluZGV4ID0gaTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAobmdQcm9qZWN0QXNBdHRyVmFsID09PSBudWxsID8gaXNOb2RlTWF0Y2hpbmdTZWxlY3Rvckxpc3QodE5vZGUsIHNsb3RWYWx1ZSwgdHJ1ZSkgOiBpc1NlbGVjdG9ySW5TZWxlY3Rvckxpc3QobmdQcm9qZWN0QXNBdHRyVmFsLCBzbG90VmFsdWUpKSB7XG4gICAgICByZXR1cm4gaTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHdpbGRjYXJkTmdDb250ZW50SW5kZXg7XG59XG5mdW5jdGlvbiDJtcm1cHJvamVjdGlvbkRlZihwcm9qZWN0aW9uU2xvdHMpIHtcbiAgY29uc3QgY29tcG9uZW50Tm9kZSA9IGdldExWaWV3KClbREVDTEFSQVRJT05fQ09NUE9ORU5UX1ZJRVddW1RfSE9TVF07XG4gIGlmICghY29tcG9uZW50Tm9kZS5wcm9qZWN0aW9uKSB7XG4gICAgY29uc3QgbnVtUHJvamVjdGlvblNsb3RzID0gcHJvamVjdGlvblNsb3RzID8gcHJvamVjdGlvblNsb3RzLmxlbmd0aCA6IDE7XG4gICAgY29uc3QgcHJvamVjdGlvbkhlYWRzID0gY29tcG9uZW50Tm9kZS5wcm9qZWN0aW9uID0gbmV3QXJyYXkobnVtUHJvamVjdGlvblNsb3RzLCBudWxsKTtcbiAgICBjb25zdCB0YWlscyA9IHByb2plY3Rpb25IZWFkcy5zbGljZSgpO1xuICAgIGxldCBjb21wb25lbnRDaGlsZCA9IGNvbXBvbmVudE5vZGUuY2hpbGQ7XG4gICAgd2hpbGUgKGNvbXBvbmVudENoaWxkICE9PSBudWxsKSB7XG4gICAgICBpZiAoY29tcG9uZW50Q2hpbGQudHlwZSAhPT0gMTI4KSB7XG4gICAgICAgIGNvbnN0IHNsb3RJbmRleCA9IHByb2plY3Rpb25TbG90cyA/IG1hdGNoaW5nUHJvamVjdGlvblNsb3RJbmRleChjb21wb25lbnRDaGlsZCwgcHJvamVjdGlvblNsb3RzKSA6IDA7XG4gICAgICAgIGlmIChzbG90SW5kZXggIT09IG51bGwpIHtcbiAgICAgICAgICBpZiAodGFpbHNbc2xvdEluZGV4XSkge1xuICAgICAgICAgICAgdGFpbHNbc2xvdEluZGV4XS5wcm9qZWN0aW9uTmV4dCA9IGNvbXBvbmVudENoaWxkO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwcm9qZWN0aW9uSGVhZHNbc2xvdEluZGV4XSA9IGNvbXBvbmVudENoaWxkO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0YWlsc1tzbG90SW5kZXhdID0gY29tcG9uZW50Q2hpbGQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbXBvbmVudENoaWxkID0gY29tcG9uZW50Q2hpbGQubmV4dDtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIMm1ybVwcm9qZWN0aW9uKG5vZGVJbmRleCwgc2VsZWN0b3JJbmRleCA9IDAsIGF0dHJzLCBmYWxsYmFja1RlbXBsYXRlRm4sIGZhbGxiYWNrRGVjbHMsIGZhbGxiYWNrVmFycykge1xuICBjb25zdCBsVmlldyA9IGdldExWaWV3KCk7XG4gIGNvbnN0IHRWaWV3ID0gZ2V0VFZpZXcoKTtcbiAgY29uc3QgZmFsbGJhY2tJbmRleCA9IGZhbGxiYWNrVGVtcGxhdGVGbiA/IG5vZGVJbmRleCArIDEgOiBudWxsO1xuICBpZiAoZmFsbGJhY2tJbmRleCAhPT0gbnVsbCkge1xuICAgIGRlY2xhcmVOb0RpcmVjdGl2ZUhvc3RUZW1wbGF0ZShsVmlldywgdFZpZXcsIGZhbGxiYWNrSW5kZXgsIGZhbGxiYWNrVGVtcGxhdGVGbiwgZmFsbGJhY2tEZWNscywgZmFsbGJhY2tWYXJzLCBudWxsLCBhdHRycyk7XG4gIH1cbiAgY29uc3QgdFByb2plY3Rpb25Ob2RlID0gZ2V0T3JDcmVhdGVUTm9kZSh0VmlldywgSEVBREVSX09GRlNFVCArIG5vZGVJbmRleCwgMTYsIG51bGwsIGF0dHJzIHx8IG51bGwpO1xuICBpZiAodFByb2plY3Rpb25Ob2RlLnByb2plY3Rpb24gPT09IG51bGwpIHtcbiAgICB0UHJvamVjdGlvbk5vZGUucHJvamVjdGlvbiA9IHNlbGVjdG9ySW5kZXg7XG4gIH1cbiAgc2V0Q3VycmVudFROb2RlQXNOb3RQYXJlbnQoKTtcbiAgY29uc3QgaHlkcmF0aW9uSW5mbyA9IGxWaWV3W0hZRFJBVElPTl07XG4gIGNvbnN0IGlzTm9kZUNyZWF0aW9uTW9kZSA9ICFoeWRyYXRpb25JbmZvIHx8IGlzSW5Ta2lwSHlkcmF0aW9uQmxvY2skMSgpO1xuICBjb25zdCBjb21wb25lbnRIb3N0Tm9kZSA9IGxWaWV3W0RFQ0xBUkFUSU9OX0NPTVBPTkVOVF9WSUVXXVtUX0hPU1RdO1xuICBjb25zdCBpc0VtcHR5ID0gY29tcG9uZW50SG9zdE5vZGUucHJvamVjdGlvblt0UHJvamVjdGlvbk5vZGUucHJvamVjdGlvbl0gPT09IG51bGw7XG4gIGlmIChpc0VtcHR5ICYmIGZhbGxiYWNrSW5kZXggIT09IG51bGwpIHtcbiAgICBpbnNlcnRGYWxsYmFja0NvbnRlbnQobFZpZXcsIHRWaWV3LCBmYWxsYmFja0luZGV4KTtcbiAgfSBlbHNlIGlmIChpc05vZGVDcmVhdGlvbk1vZGUgJiYgIWlzRGV0YWNoZWRCeUkxOG4odFByb2plY3Rpb25Ob2RlKSkge1xuICAgIGFwcGx5UHJvamVjdGlvbih0VmlldywgbFZpZXcsIHRQcm9qZWN0aW9uTm9kZSk7XG4gIH1cbn1cbmZ1bmN0aW9uIGluc2VydEZhbGxiYWNrQ29udGVudChsVmlldywgdFZpZXcsIGZhbGxiYWNrSW5kZXgpIHtcbiAgY29uc3QgYWRqdXN0ZWRJbmRleCA9IEhFQURFUl9PRkZTRVQgKyBmYWxsYmFja0luZGV4O1xuICBjb25zdCBmYWxsYmFja1ROb2RlID0gdFZpZXcuZGF0YVthZGp1c3RlZEluZGV4XTtcbiAgY29uc3QgZmFsbGJhY2tMQ29udGFpbmVyID0gbFZpZXdbYWRqdXN0ZWRJbmRleF07XG4gIG5nRGV2TW9kZSAmJiBhc3NlcnRUTm9kZShmYWxsYmFja1ROb2RlKTtcbiAgbmdEZXZNb2RlICYmIGFzc2VydExDb250YWluZXIoZmFsbGJhY2tMQ29udGFpbmVyKTtcbiAgY29uc3QgZGVoeWRyYXRlZFZpZXcgPSBmaW5kTWF0Y2hpbmdEZWh5ZHJhdGVkVmlldyhmYWxsYmFja0xDb250YWluZXIsIGZhbGxiYWNrVE5vZGUudFZpZXcuc3NySWQpO1xuICBjb25zdCBmYWxsYmFja0xWaWV3ID0gY3JlYXRlQW5kUmVuZGVyRW1iZWRkZWRMVmlldyhsVmlldywgZmFsbGJhY2tUTm9kZSwgdW5kZWZpbmVkLCB7XG4gICAgZGVoeWRyYXRlZFZpZXdcbiAgfSk7XG4gIGFkZExWaWV3VG9MQ29udGFpbmVyKGZhbGxiYWNrTENvbnRhaW5lciwgZmFsbGJhY2tMVmlldywgMCwgc2hvdWxkQWRkVmlld1RvRG9tKGZhbGxiYWNrVE5vZGUsIGRlaHlkcmF0ZWRWaWV3KSk7XG59XG5mdW5jdGlvbiDJtcm1Y29udGVudFF1ZXJ5KGRpcmVjdGl2ZUluZGV4LCBwcmVkaWNhdGUsIGZsYWdzLCByZWFkKSB7XG4gIGNyZWF0ZUNvbnRlbnRRdWVyeShkaXJlY3RpdmVJbmRleCwgcHJlZGljYXRlLCBmbGFncywgcmVhZCk7XG4gIHJldHVybiDJtcm1Y29udGVudFF1ZXJ5O1xufVxuZnVuY3Rpb24gybXJtXZpZXdRdWVyeShwcmVkaWNhdGUsIGZsYWdzLCByZWFkKSB7XG4gIGNyZWF0ZVZpZXdRdWVyeShwcmVkaWNhdGUsIGZsYWdzLCByZWFkKTtcbiAgcmV0dXJuIMm1ybV2aWV3UXVlcnk7XG59XG5mdW5jdGlvbiDJtcm1cXVlcnlSZWZyZXNoKHF1ZXJ5TGlzdCkge1xuICBjb25zdCBsVmlldyA9IGdldExWaWV3KCk7XG4gIGNvbnN0IHRWaWV3ID0gZ2V0VFZpZXcoKTtcbiAgY29uc3QgcXVlcnlJbmRleCA9IGdldEN1cnJlbnRRdWVyeUluZGV4KCk7XG4gIHNldEN1cnJlbnRRdWVyeUluZGV4KHF1ZXJ5SW5kZXggKyAxKTtcbiAgY29uc3QgdFF1ZXJ5ID0gZ2V0VFF1ZXJ5KHRWaWV3LCBxdWVyeUluZGV4KTtcbiAgaWYgKHF1ZXJ5TGlzdC5kaXJ0eSAmJiBpc0NyZWF0aW9uTW9kZShsVmlldykgPT09ICgodFF1ZXJ5Lm1ldGFkYXRhLmZsYWdzICYgMikgPT09IDIpKSB7XG4gICAgaWYgKHRRdWVyeS5tYXRjaGVzID09PSBudWxsKSB7XG4gICAgICBxdWVyeUxpc3QucmVzZXQoW10pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBnZXRRdWVyeVJlc3VsdHMobFZpZXcsIHF1ZXJ5SW5kZXgpO1xuICAgICAgcXVlcnlMaXN0LnJlc2V0KHJlc3VsdCwgdW53cmFwRWxlbWVudFJlZik7XG4gICAgICBxdWVyeUxpc3Qubm90aWZ5T25DaGFuZ2VzKCk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIMm1ybVsb2FkUXVlcnkoKSB7XG4gIHJldHVybiBsb2FkUXVlcnlJbnRlcm5hbChnZXRMVmlldygpLCBnZXRDdXJyZW50UXVlcnlJbmRleCgpKTtcbn1cbmZ1bmN0aW9uIMm1ybVjb250ZW50UXVlcnlTaWduYWwoZGlyZWN0aXZlSW5kZXgsIHRhcmdldCwgcHJlZGljYXRlLCBmbGFncywgcmVhZCkge1xuICBiaW5kUXVlcnlUb1NpZ25hbCh0YXJnZXQsIGNyZWF0ZUNvbnRlbnRRdWVyeShkaXJlY3RpdmVJbmRleCwgcHJlZGljYXRlLCBmbGFncywgcmVhZCkpO1xuICByZXR1cm4gybXJtWNvbnRlbnRRdWVyeVNpZ25hbDtcbn1cbmZ1bmN0aW9uIMm1ybV2aWV3UXVlcnlTaWduYWwodGFyZ2V0LCBwcmVkaWNhdGUsIGZsYWdzLCByZWFkKSB7XG4gIGJpbmRRdWVyeVRvU2lnbmFsKHRhcmdldCwgY3JlYXRlVmlld1F1ZXJ5KHByZWRpY2F0ZSwgZmxhZ3MsIHJlYWQpKTtcbiAgcmV0dXJuIMm1ybV2aWV3UXVlcnlTaWduYWw7XG59XG5mdW5jdGlvbiDJtcm1cXVlcnlBZHZhbmNlKGluZGV4T2Zmc2V0ID0gMSkge1xuICBzZXRDdXJyZW50UXVlcnlJbmRleChnZXRDdXJyZW50UXVlcnlJbmRleCgpICsgaW5kZXhPZmZzZXQpO1xufVxuZnVuY3Rpb24gybXJtXJlZmVyZW5jZShpbmRleCkge1xuICBjb25zdCBjb250ZXh0TFZpZXcgPSBnZXRDb250ZXh0TFZpZXcoKTtcbiAgcmV0dXJuIGxvYWQoY29udGV4dExWaWV3LCBIRUFERVJfT0ZGU0VUICsgaW5kZXgpO1xufVxuZnVuY3Rpb24gdG9UU3R5bGluZ1JhbmdlKHByZXYsIG5leHQpIHtcbiAgbmdEZXZNb2RlICYmIGFzc2VydE51bWJlckluUmFuZ2UocHJldiwgMCwgMzI3NjcpO1xuICBuZ0Rldk1vZGUgJiYgYXNzZXJ0TnVtYmVySW5SYW5nZShuZXh0LCAwLCAzMjc2Nyk7XG4gIHJldHVybiBwcmV2IDw8IDE3IHwgbmV4dCA8PCAyO1xufVxuZnVuY3Rpb24gZ2V0VFN0eWxpbmdSYW5nZVByZXYodFN0eWxpbmdSYW5nZSkge1xuICBuZ0Rldk1vZGUgJiYgYXNzZXJ0TnVtYmVyKHRTdHlsaW5nUmFuZ2UsICdleHBlY3RlZCBudW1iZXInKTtcbiAgcmV0dXJuIHRTdHlsaW5nUmFuZ2UgPj4gMTcgJiAzMjc2Nztcbn1cbmZ1bmN0aW9uIGdldFRTdHlsaW5nUmFuZ2VQcmV2RHVwbGljYXRlKHRTdHlsaW5nUmFuZ2UpIHtcbiAgbmdEZXZNb2RlICYmIGFzc2VydE51bWJlcih0U3R5bGluZ1JhbmdlLCAnZXhwZWN0ZWQgbnVtYmVyJyk7XG4gIHJldHVybiAodFN0eWxpbmdSYW5nZSAmIDIpID09IDI7XG59XG5mdW5jdGlvbiBzZXRUU3R5bGluZ1JhbmdlUHJldih0U3R5bGluZ1JhbmdlLCBwcmV2aW91cykge1xuICBuZ0Rldk1vZGUgJiYgYXNzZXJ0TnVtYmVyKHRTdHlsaW5nUmFuZ2UsICdleHBlY3RlZCBudW1iZXInKTtcbiAgbmdEZXZNb2RlICYmIGFzc2VydE51bWJlckluUmFuZ2UocHJldmlvdXMsIDAsIDMyNzY3KTtcbiAgcmV0dXJuIHRTdHlsaW5nUmFuZ2UgJiB+NDI5NDgzNjIyNCB8IHByZXZpb3VzIDw8IDE3O1xufVxuZnVuY3Rpb24gc2V0VFN0eWxpbmdSYW5nZVByZXZEdXBsaWNhdGUodFN0eWxpbmdSYW5nZSkge1xuICBuZ0Rldk1vZGUgJiYgYXNzZXJ0TnVtYmVyKHRTdHlsaW5nUmFuZ2UsICdleHBlY3RlZCBudW1iZXInKTtcbiAgcmV0dXJuIHRTdHlsaW5nUmFuZ2UgfCAyO1xufVxuZnVuY3Rpb24gZ2V0VFN0eWxpbmdSYW5nZU5leHQodFN0eWxpbmdSYW5nZSkge1xuICBuZ0Rldk1vZGUgJiYgYXNzZXJ0TnVtYmVyKHRTdHlsaW5nUmFuZ2UsICdleHBlY3RlZCBudW1iZXInKTtcbiAgcmV0dXJuICh0U3R5bGluZ1JhbmdlICYgMTMxMDY4KSA+PiAyO1xufVxuZnVuY3Rpb24gc2V0VFN0eWxpbmdSYW5nZU5leHQodFN0eWxpbmdSYW5nZSwgbmV4dCkge1xuICBuZ0Rldk1vZGUgJiYgYXNzZXJ0TnVtYmVyKHRTdHlsaW5nUmFuZ2UsICdleHBlY3RlZCBudW1iZXInKTtcbiAgbmdEZXZNb2RlICYmIGFzc2VydE51bWJlckluUmFuZ2UobmV4dCwgMCwgMzI3NjcpO1xuICByZXR1cm4gdFN0eWxpbmdSYW5nZSAmIH4xMzEwNjggfCBuZXh0IDw8IDI7XG59XG5mdW5jdGlvbiBnZXRUU3R5bGluZ1JhbmdlTmV4dER1cGxpY2F0ZSh0U3R5bGluZ1JhbmdlKSB7XG4gIG5nRGV2TW9kZSAmJiBhc3NlcnROdW1iZXIodFN0eWxpbmdSYW5nZSwgJ2V4cGVjdGVkIG51bWJlcicpO1xuICByZXR1cm4gKHRTdHlsaW5nUmFuZ2UgJiAxKSA9PT0gMTtcbn1cbmZ1bmN0aW9uIHNldFRTdHlsaW5nUmFuZ2VOZXh0RHVwbGljYXRlKHRTdHlsaW5nUmFuZ2UpIHtcbiAgbmdEZXZNb2RlICYmIGFzc2VydE51bWJlcih0U3R5bGluZ1JhbmdlLCAnZXhwZWN0ZWQgbnVtYmVyJyk7XG4gIHJldHVybiB0U3R5bGluZ1JhbmdlIHwgMTtcbn1cbmZ1bmN0aW9uIGluc2VydFRTdHlsaW5nQmluZGluZyh0RGF0YSwgdE5vZGUsIHRTdHlsaW5nS2V5V2l0aFN0YXRpYywgaW5kZXgsIGlzSG9zdEJpbmRpbmcsIGlzQ2xhc3NCaW5kaW5nKSB7XG4gIG5nRGV2TW9kZSAmJiBhc3NlcnRGaXJzdFVwZGF0ZVBhc3MoZ2V0VFZpZXcoKSk7XG4gIGxldCB0QmluZGluZ3MgPSBpc0NsYXNzQmluZGluZyA/IHROb2RlLmNsYXNzQmluZGluZ3MgOiB0Tm9kZS5zdHlsZUJpbmRpbmdzO1xuICBsZXQgdG1wbEhlYWQgPSBnZXRUU3R5bGluZ1JhbmdlUHJldih0QmluZGluZ3MpO1xuICBsZXQgdG1wbFRhaWwgPSBnZXRUU3R5bGluZ1JhbmdlTmV4dCh0QmluZGluZ3MpO1xuICB0RGF0YVtpbmRleF0gPSB0U3R5bGluZ0tleVdpdGhTdGF0aWM7XG4gIGxldCBpc0tleUR1cGxpY2F0ZU9mU3RhdGljID0gZmFsc2U7XG4gIGxldCB0U3R5bGluZ0tleTtcbiAgaWYgKEFycmF5LmlzQXJyYXkodFN0eWxpbmdLZXlXaXRoU3RhdGljKSkge1xuICAgIGNvbnN0IHN0YXRpY0tleVZhbHVlQXJyYXkgPSB0U3R5bGluZ0tleVdpdGhTdGF0aWM7XG4gICAgdFN0eWxpbmdLZXkgPSBzdGF0aWNLZXlWYWx1ZUFycmF5WzFdO1xuICAgIGlmICh0U3R5bGluZ0tleSA9PT0gbnVsbCB8fCBrZXlWYWx1ZUFycmF5SW5kZXhPZihzdGF0aWNLZXlWYWx1ZUFycmF5LCB0U3R5bGluZ0tleSkgPiAwKSB7XG4gICAgICBpc0tleUR1cGxpY2F0ZU9mU3RhdGljID0gdHJ1ZTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdFN0eWxpbmdLZXkgPSB0U3R5bGluZ0tleVdpdGhTdGF0aWM7XG4gIH1cbiAgaWYgKGlzSG9zdEJpbmRpbmcpIHtcbiAgICBjb25zdCBoYXNUZW1wbGF0ZUJpbmRpbmdzID0gdG1wbFRhaWwgIT09IDA7XG4gICAgaWYgKGhhc1RlbXBsYXRlQmluZGluZ3MpIHtcbiAgICAgIGNvbnN0IHByZXZpb3VzTm9kZSA9IGdldFRTdHlsaW5nUmFuZ2VQcmV2KHREYXRhW3RtcGxIZWFkICsgMV0pO1xuICAgICAgdERhdGFbaW5kZXggKyAxXSA9IHRvVFN0eWxpbmdSYW5nZShwcmV2aW91c05vZGUsIHRtcGxIZWFkKTtcbiAgICAgIGlmIChwcmV2aW91c05vZGUgIT09IDApIHtcbiAgICAgICAgdERhdGFbcHJldmlvdXNOb2RlICsgMV0gPSBzZXRUU3R5bGluZ1JhbmdlTmV4dCh0RGF0YVtwcmV2aW91c05vZGUgKyAxXSwgaW5kZXgpO1xuICAgICAgfVxuICAgICAgdERhdGFbdG1wbEhlYWQgKyAxXSA9IHNldFRTdHlsaW5nUmFuZ2VQcmV2KHREYXRhW3RtcGxIZWFkICsgMV0sIGluZGV4KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdERhdGFbaW5kZXggKyAxXSA9IHRvVFN0eWxpbmdSYW5nZSh0bXBsSGVhZCwgMCk7XG4gICAgICBpZiAodG1wbEhlYWQgIT09IDApIHtcbiAgICAgICAgdERhdGFbdG1wbEhlYWQgKyAxXSA9IHNldFRTdHlsaW5nUmFuZ2VOZXh0KHREYXRhW3RtcGxIZWFkICsgMV0sIGluZGV4KTtcbiAgICAgIH1cbiAgICAgIHRtcGxIZWFkID0gaW5kZXg7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHREYXRhW2luZGV4ICsgMV0gPSB0b1RTdHlsaW5nUmFuZ2UodG1wbFRhaWwsIDApO1xuICAgIG5nRGV2TW9kZSAmJiBhc3NlcnRFcXVhbCh0bXBsSGVhZCAhPT0gMCAmJiB0bXBsVGFpbCA9PT0gMCwgZmFsc2UsICdBZGRpbmcgdGVtcGxhdGUgYmluZGluZ3MgYWZ0ZXIgaG9zdEJpbmRpbmdzIGlzIG5vdCBhbGxvd2VkLicpO1xuICAgIGlmICh0bXBsSGVhZCA9PT0gMCkge1xuICAgICAgdG1wbEhlYWQgPSBpbmRleDtcbiAgICB9IGVsc2Uge1xuICAgICAgdERhdGFbdG1wbFRhaWwgKyAxXSA9IHNldFRTdHlsaW5nUmFuZ2VOZXh0KHREYXRhW3RtcGxUYWlsICsgMV0sIGluZGV4KTtcbiAgICB9XG4gICAgdG1wbFRhaWwgPSBpbmRleDtcbiAgfVxuICBpZiAoaXNLZXlEdXBsaWNhdGVPZlN0YXRpYykge1xuICAgIHREYXRhW2luZGV4ICsgMV0gPSBzZXRUU3R5bGluZ1JhbmdlUHJldkR1cGxpY2F0ZSh0RGF0YVtpbmRleCArIDFdKTtcbiAgfVxuICBtYXJrRHVwbGljYXRlcyh0RGF0YSwgdFN0eWxpbmdLZXksIGluZGV4LCB0cnVlKTtcbiAgbWFya0R1cGxpY2F0ZXModERhdGEsIHRTdHlsaW5nS2V5LCBpbmRleCwgZmFsc2UpO1xuICBtYXJrRHVwbGljYXRlT2ZSZXNpZHVhbFN0eWxpbmcodE5vZGUsIHRTdHlsaW5nS2V5LCB0RGF0YSwgaW5kZXgsIGlzQ2xhc3NCaW5kaW5nKTtcbiAgdEJpbmRpbmdzID0gdG9UU3R5bGluZ1JhbmdlKHRtcGxIZWFkLCB0bXBsVGFpbCk7XG4gIGlmIChpc0NsYXNzQmluZGluZykge1xuICAgIHROb2RlLmNsYXNzQmluZGluZ3MgPSB0QmluZGluZ3M7XG4gIH0gZWxzZSB7XG4gICAgdE5vZGUuc3R5bGVCaW5kaW5ncyA9IHRCaW5kaW5ncztcbiAgfVxufVxuZnVuY3Rpb24gbWFya0R1cGxpY2F0ZU9mUmVzaWR1YWxTdHlsaW5nKHROb2RlLCB0U3R5bGluZ0tleSwgdERhdGEsIGluZGV4LCBpc0NsYXNzQmluZGluZykge1xuICBjb25zdCByZXNpZHVhbCA9IGlzQ2xhc3NCaW5kaW5nID8gdE5vZGUucmVzaWR1YWxDbGFzc2VzIDogdE5vZGUucmVzaWR1YWxTdHlsZXM7XG4gIGlmIChyZXNpZHVhbCAhPSBudWxsICYmIHR5cGVvZiB0U3R5bGluZ0tleSA9PSAnc3RyaW5nJyAmJiBrZXlWYWx1ZUFycmF5SW5kZXhPZihyZXNpZHVhbCwgdFN0eWxpbmdLZXkpID49IDApIHtcbiAgICB0RGF0YVtpbmRleCArIDFdID0gc2V0VFN0eWxpbmdSYW5nZU5leHREdXBsaWNhdGUodERhdGFbaW5kZXggKyAxXSk7XG4gIH1cbn1cbmZ1bmN0aW9uIG1hcmtEdXBsaWNhdGVzKHREYXRhLCB0U3R5bGluZ0tleSwgaW5kZXgsIGlzUHJldkRpcikge1xuICBjb25zdCB0U3R5bGluZ0F0SW5kZXggPSB0RGF0YVtpbmRleCArIDFdO1xuICBjb25zdCBpc01hcCA9IHRTdHlsaW5nS2V5ID09PSBudWxsO1xuICBsZXQgY3Vyc29yID0gaXNQcmV2RGlyID8gZ2V0VFN0eWxpbmdSYW5nZVByZXYodFN0eWxpbmdBdEluZGV4KSA6IGdldFRTdHlsaW5nUmFuZ2VOZXh0KHRTdHlsaW5nQXRJbmRleCk7XG4gIGxldCBmb3VuZER1cGxpY2F0ZSA9IGZhbHNlO1xuICB3aGlsZSAoY3Vyc29yICE9PSAwICYmIChmb3VuZER1cGxpY2F0ZSA9PT0gZmFsc2UgfHwgaXNNYXApKSB7XG4gICAgbmdEZXZNb2RlICYmIGFzc2VydEluZGV4SW5SYW5nZSh0RGF0YSwgY3Vyc29yKTtcbiAgICBjb25zdCB0U3R5bGluZ1ZhbHVlQXRDdXJzb3IgPSB0RGF0YVtjdXJzb3JdO1xuICAgIGNvbnN0IHRTdHlsZVJhbmdlQXRDdXJzb3IgPSB0RGF0YVtjdXJzb3IgKyAxXTtcbiAgICBpZiAoaXNTdHlsaW5nTWF0Y2godFN0eWxpbmdWYWx1ZUF0Q3Vyc29yLCB0U3R5bGluZ0tleSkpIHtcbiAgICAgIGZvdW5kRHVwbGljYXRlID0gdHJ1ZTtcbiAgICAgIHREYXRhW2N1cnNvciArIDFdID0gaXNQcmV2RGlyID8gc2V0VFN0eWxpbmdSYW5nZU5leHREdXBsaWNhdGUodFN0eWxlUmFuZ2VBdEN1cnNvcikgOiBzZXRUU3R5bGluZ1JhbmdlUHJldkR1cGxpY2F0ZSh0U3R5bGVSYW5nZUF0Q3Vyc29yKTtcbiAgICB9XG4gICAgY3Vyc29yID0gaXNQcmV2RGlyID8gZ2V0VFN0eWxpbmdSYW5nZVByZXYodFN0eWxlUmFuZ2VBdEN1cnNvcikgOiBnZXRUU3R5bGluZ1JhbmdlTmV4dCh0U3R5bGVSYW5nZUF0Q3Vyc29yKTtcbiAgfVxuICBpZiAoZm91bmREdXBsaWNhdGUpIHtcbiAgICB0RGF0YVtpbmRleCArIDFdID0gaXNQcmV2RGlyID8gc2V0VFN0eWxpbmdSYW5nZVByZXZEdXBsaWNhdGUodFN0eWxpbmdBdEluZGV4KSA6IHNldFRTdHlsaW5nUmFuZ2VOZXh0RHVwbGljYXRlKHRTdHlsaW5nQXRJbmRleCk7XG4gIH1cbn1cbmZ1bmN0aW9uIGlzU3R5bGluZ01hdGNoKHRTdHlsaW5nS2V5Q3Vyc29yLCB0U3R5bGluZ0tleSkge1xuICBuZ0Rldk1vZGUgJiYgYXNzZXJ0Tm90RXF1YWwoQXJyYXkuaXNBcnJheSh0U3R5bGluZ0tleSksIHRydWUsIFwiRXhwZWN0ZWQgdGhhdCAndFN0eWxpbmdLZXknIGhhcyBiZWVuIHVud3JhcHBlZFwiKTtcbiAgaWYgKHRTdHlsaW5nS2V5Q3Vyc29yID09PSBudWxsIHx8IHRTdHlsaW5nS2V5ID09IG51bGwgfHwgKEFycmF5LmlzQXJyYXkodFN0eWxpbmdLZXlDdXJzb3IpID8gdFN0eWxpbmdLZXlDdXJzb3JbMV0gOiB0U3R5bGluZ0tleUN1cnNvcikgPT09IHRTdHlsaW5nS2V5KSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh0U3R5bGluZ0tleUN1cnNvcikgJiYgdHlwZW9mIHRTdHlsaW5nS2V5ID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBrZXlWYWx1ZUFycmF5SW5kZXhPZih0U3R5bGluZ0tleUN1cnNvciwgdFN0eWxpbmdLZXkpID49IDA7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuY29uc3QgcGFyc2VyU3RhdGUgPSB7XG4gIHRleHRFbmQ6IDAsXG4gIGtleTogMCxcbiAga2V5RW5kOiAwLFxuICB2YWx1ZTogMCxcbiAgdmFsdWVFbmQ6IDBcbn07XG5mdW5jdGlvbiBnZXRMYXN0UGFyc2VkS2V5KHRleHQpIHtcbiAgcmV0dXJuIHRleHQuc3Vic3RyaW5nKHBhcnNlclN0YXRlLmtleSwgcGFyc2VyU3RhdGUua2V5RW5kKTtcbn1cbmZ1bmN0aW9uIGdldExhc3RQYXJzZWRWYWx1ZSh0ZXh0KSB7XG4gIHJldHVybiB0ZXh0LnN1YnN0cmluZyhwYXJzZXJTdGF0ZS52YWx1ZSwgcGFyc2VyU3RhdGUudmFsdWVFbmQpO1xufVxuZnVuY3Rpb24gcGFyc2VDbGFzc05hbWUodGV4dCkge1xuICByZXNldFBhcnNlclN0YXRlKHRleHQpO1xuICByZXR1cm4gcGFyc2VDbGFzc05hbWVOZXh0KHRleHQsIGNvbnN1bWVXaGl0ZXNwYWNlKHRleHQsIDAsIHBhcnNlclN0YXRlLnRleHRFbmQpKTtcbn1cbmZ1bmN0aW9uIHBhcnNlQ2xhc3NOYW1lTmV4dCh0ZXh0LCBpbmRleCkge1xuICBjb25zdCBlbmQgPSBwYXJzZXJTdGF0ZS50ZXh0RW5kO1xuICBpZiAoZW5kID09PSBpbmRleCkge1xuICAgIHJldHVybiAtMTtcbiAgfVxuICBpbmRleCA9IHBhcnNlclN0YXRlLmtleUVuZCA9IGNvbnN1bWVDbGFzc1Rva2VuKHRleHQsIHBhcnNlclN0YXRlLmtleSA9IGluZGV4LCBlbmQpO1xuICByZXR1cm4gY29uc3VtZVdoaXRlc3BhY2UodGV4dCwgaW5kZXgsIGVuZCk7XG59XG5mdW5jdGlvbiBwYXJzZVN0eWxlKHRleHQpIHtcbiAgcmVzZXRQYXJzZXJTdGF0ZSh0ZXh0KTtcbiAgcmV0dXJuIHBhcnNlU3R5bGVOZXh0KHRleHQsIGNvbnN1bWVXaGl0ZXNwYWNlKHRleHQsIDAsIHBhcnNlclN0YXRlLnRleHRFbmQpKTtcbn1cbmZ1bmN0aW9uIHBhcnNlU3R5bGVOZXh0KHRleHQsIHN0YXJ0SW5kZXgpIHtcbiAgY29uc3QgZW5kID0gcGFyc2VyU3RhdGUudGV4dEVuZDtcbiAgbGV0IGluZGV4ID0gcGFyc2VyU3RhdGUua2V5ID0gY29uc3VtZVdoaXRlc3BhY2UodGV4dCwgc3RhcnRJbmRleCwgZW5kKTtcbiAgaWYgKGVuZCA9PT0gaW5kZXgpIHtcbiAgICByZXR1cm4gLTE7XG4gIH1cbiAgaW5kZXggPSBwYXJzZXJTdGF0ZS5rZXlFbmQgPSBjb25zdW1lU3R5bGVLZXkodGV4dCwgaW5kZXgsIGVuZCk7XG4gIGluZGV4ID0gY29uc3VtZVNlcGFyYXRvcih0ZXh0LCBpbmRleCwgZW5kLCA1OCk7XG4gIGluZGV4ID0gcGFyc2VyU3RhdGUudmFsdWUgPSBjb25zdW1lV2hpdGVzcGFjZSh0ZXh0LCBpbmRleCwgZW5kKTtcbiAgaW5kZXggPSBwYXJzZXJTdGF0ZS52YWx1ZUVuZCA9IGNvbnN1bWVTdHlsZVZhbHVlKHRleHQsIGluZGV4LCBlbmQpO1xuICByZXR1cm4gY29uc3VtZVNlcGFyYXRvcih0ZXh0LCBpbmRleCwgZW5kLCA1OSk7XG59XG5mdW5jdGlvbiByZXNldFBhcnNlclN0YXRlKHRleHQpIHtcbiAgcGFyc2VyU3RhdGUua2V5ID0gMDtcbiAgcGFyc2VyU3RhdGUua2V5RW5kID0gMDtcbiAgcGFyc2VyU3RhdGUudmFsdWUgPSAwO1xuICBwYXJzZXJTdGF0ZS52YWx1ZUVuZCA9IDA7XG4gIHBhcnNlclN0YXRlLnRleHRFbmQgPSB0ZXh0Lmxlbmd0aDtcbn1cbmZ1bmN0aW9uIGNvbnN1bWVXaGl0ZXNwYWNlKHRleHQsIHN0YXJ0SW5kZXgsIGVuZEluZGV4KSB7XG4gIHdoaWxlIChzdGFydEluZGV4IDwgZW5kSW5kZXggJiYgdGV4dC5jaGFyQ29kZUF0KHN0YXJ0SW5kZXgpIDw9IDMyKSB7XG4gICAgc3RhcnRJbmRleCsrO1xuICB9XG4gIHJldHVybiBzdGFydEluZGV4O1xufVxuZnVuY3Rpb24gY29uc3VtZUNsYXNzVG9rZW4odGV4dCwgc3RhcnRJbmRleCwgZW5kSW5kZXgpIHtcbiAgd2hpbGUgKHN0YXJ0SW5kZXggPCBlbmRJbmRleCAmJiB0ZXh0LmNoYXJDb2RlQXQoc3RhcnRJbmRleCkgPiAzMikge1xuICAgIHN0YXJ0SW5kZXgrKztcbiAgfVxuICByZXR1cm4gc3RhcnRJbmRleDtcbn1cbmZ1bmN0aW9uIGNvbnN1bWVTdHlsZUtleSh0ZXh0LCBzdGFydEluZGV4LCBlbmRJbmRleCkge1xuICBsZXQgY2g7XG4gIHdoaWxlIChzdGFydEluZGV4IDwgZW5kSW5kZXggJiYgKChjaCA9IHRleHQuY2hhckNvZGVBdChzdGFydEluZGV4KSkgPT09IDQ1IHx8IGNoID09PSA5NSB8fCAoY2ggJiAtMzMpID49IDY1ICYmIChjaCAmIC0zMykgPD0gOTAgfHwgY2ggPj0gNDggJiYgY2ggPD0gNTcpKSB7XG4gICAgc3RhcnRJbmRleCsrO1xuICB9XG4gIHJldHVybiBzdGFydEluZGV4O1xufVxuZnVuY3Rpb24gY29uc3VtZVNlcGFyYXRvcih0ZXh0LCBzdGFydEluZGV4LCBlbmRJbmRleCwgc2VwYXJhdG9yKSB7XG4gIHN0YXJ0SW5kZXggPSBjb25zdW1lV2hpdGVzcGFjZSh0ZXh0LCBzdGFydEluZGV4LCBlbmRJbmRleCk7XG4gIGlmIChzdGFydEluZGV4IDwgZW5kSW5kZXgpIHtcbiAgICBpZiAobmdEZXZNb2RlICYmIHRleHQuY2hhckNvZGVBdChzdGFydEluZGV4KSAhPT0gc2VwYXJhdG9yKSB7XG4gICAgICBtYWxmb3JtZWRTdHlsZUVycm9yKHRleHQsIFN0cmluZy5mcm9tQ2hhckNvZGUoc2VwYXJhdG9yKSwgc3RhcnRJbmRleCk7XG4gICAgfVxuICAgIHN0YXJ0SW5kZXgrKztcbiAgfVxuICByZXR1cm4gc3RhcnRJbmRleDtcbn1cbmZ1bmN0aW9uIGNvbnN1bWVTdHlsZVZhbHVlKHRleHQsIHN0YXJ0SW5kZXgsIGVuZEluZGV4KSB7XG4gIGxldCBjaDEgPSAtMTtcbiAgbGV0IGNoMiA9IC0xO1xuICBsZXQgY2gzID0gLTE7XG4gIGxldCBpID0gc3RhcnRJbmRleDtcbiAgbGV0IGxhc3RDaEluZGV4ID0gaTtcbiAgd2hpbGUgKGkgPCBlbmRJbmRleCkge1xuICAgIGNvbnN0IGNoID0gdGV4dC5jaGFyQ29kZUF0KGkrKyk7XG4gICAgaWYgKGNoID09PSA1OSkge1xuICAgICAgcmV0dXJuIGxhc3RDaEluZGV4O1xuICAgIH0gZWxzZSBpZiAoY2ggPT09IDM0IHx8IGNoID09PSAzOSkge1xuICAgICAgbGFzdENoSW5kZXggPSBpID0gY29uc3VtZVF1b3RlZFRleHQodGV4dCwgY2gsIGksIGVuZEluZGV4KTtcbiAgICB9IGVsc2UgaWYgKHN0YXJ0SW5kZXggPT09IGkgLSA0ICYmIGNoMyA9PT0gODUgJiYgY2gyID09PSA4MiAmJiBjaDEgPT09IDc2ICYmIGNoID09PSA0MCkge1xuICAgICAgbGFzdENoSW5kZXggPSBpID0gY29uc3VtZVF1b3RlZFRleHQodGV4dCwgNDEsIGksIGVuZEluZGV4KTtcbiAgICB9IGVsc2UgaWYgKGNoID4gMzIpIHtcbiAgICAgIGxhc3RDaEluZGV4ID0gaTtcbiAgICB9XG4gICAgY2gzID0gY2gyO1xuICAgIGNoMiA9IGNoMTtcbiAgICBjaDEgPSBjaCAmIC0zMztcbiAgfVxuICByZXR1cm4gbGFzdENoSW5kZXg7XG59XG5mdW5jdGlvbiBjb25zdW1lUXVvdGVkVGV4dCh0ZXh0LCBxdW90ZUNoYXJDb2RlLCBzdGFydEluZGV4LCBlbmRJbmRleCkge1xuICBsZXQgY2gxID0gLTE7XG4gIGxldCBpbmRleCA9IHN0YXJ0SW5kZXg7XG4gIHdoaWxlIChpbmRleCA8IGVuZEluZGV4KSB7XG4gICAgY29uc3QgY2ggPSB0ZXh0LmNoYXJDb2RlQXQoaW5kZXgrKyk7XG4gICAgaWYgKGNoID09IHF1b3RlQ2hhckNvZGUgJiYgY2gxICE9PSA5Mikge1xuICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH1cbiAgICBpZiAoY2ggPT0gOTIgJiYgY2gxID09PSA5Mikge1xuICAgICAgY2gxID0gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgY2gxID0gY2g7XG4gICAgfVxuICB9XG4gIHRocm93IG5nRGV2TW9kZSA/IG1hbGZvcm1lZFN0eWxlRXJyb3IodGV4dCwgU3RyaW5nLmZyb21DaGFyQ29kZShxdW90ZUNoYXJDb2RlKSwgZW5kSW5kZXgpIDogbmV3IEVycm9yKCk7XG59XG5mdW5jdGlvbiBtYWxmb3JtZWRTdHlsZUVycm9yKHRleHQsIGV4cGVjdGluZywgaW5kZXgpIHtcbiAgbmdEZXZNb2RlICYmIGFzc2VydEVxdWFsKHR5cGVvZiB0ZXh0ID09PSAnc3RyaW5nJywgdHJ1ZSwgJ1N0cmluZyBleHBlY3RlZCBoZXJlJyk7XG4gIHRocm93IHRocm93RXJyb3IoYE1hbGZvcm1lZCBzdHlsZSBhdCBsb2NhdGlvbiAke2luZGV4fSBpbiBzdHJpbmcgJ2AgKyB0ZXh0LnN1YnN0cmluZygwLCBpbmRleCkgKyAnWz4+JyArIHRleHQuc3Vic3RyaW5nKGluZGV4LCBpbmRleCArIDEpICsgJzw8XScgKyB0ZXh0LnNsaWNlKGluZGV4ICsgMSkgKyBgJy4gRXhwZWN0aW5nICcke2V4cGVjdGluZ30nLmApO1xufVxuZnVuY3Rpb24gybXJtXN0eWxlUHJvcChwcm9wLCB2YWx1ZSwgc3VmZml4KSB7XG4gIGNoZWNrU3R5bGluZ1Byb3BlcnR5KHByb3AsIHZhbHVlLCBzdWZmaXgsIGZhbHNlKTtcbiAgcmV0dXJuIMm1ybVzdHlsZVByb3A7XG59XG5mdW5jdGlvbiDJtcm1Y2xhc3NQcm9wKGNsYXNzTmFtZSwgdmFsdWUpIHtcbiAgY2hlY2tTdHlsaW5nUHJvcGVydHkoY2xhc3NOYW1lLCB2YWx1ZSwgbnVsbCwgdHJ1ZSk7XG4gIHJldHVybiDJtcm1Y2xhc3NQcm9wO1xufVxuZnVuY3Rpb24gybXJtXN0eWxlTWFwKHN0eWxlcykge1xuICBjaGVja1N0eWxpbmdNYXAoc3R5bGVLZXlWYWx1ZUFycmF5U2V0LCBzdHlsZVN0cmluZ1BhcnNlciwgc3R5bGVzLCBmYWxzZSk7XG59XG5mdW5jdGlvbiBzdHlsZVN0cmluZ1BhcnNlcihrZXlWYWx1ZUFycmF5LCB0ZXh0KSB7XG4gIGZvciAobGV0IGkgPSBwYXJzZVN0eWxlKHRleHQpOyBpID49IDA7IGkgPSBwYXJzZVN0eWxlTmV4dCh0ZXh0LCBpKSkge1xuICAgIHN0eWxlS2V5VmFsdWVBcnJheVNldChrZXlWYWx1ZUFycmF5LCBnZXRMYXN0UGFyc2VkS2V5KHRleHQpLCBnZXRMYXN0UGFyc2VkVmFsdWUodGV4dCkpO1xuICB9XG59XG5mdW5jdGlvbiDJtcm1Y2xhc3NNYXAoY2xhc3Nlcykge1xuICBjaGVja1N0eWxpbmdNYXAoY2xhc3NLZXlWYWx1ZUFycmF5U2V0LCBjbGFzc1N0cmluZ1BhcnNlciwgY2xhc3NlcywgdHJ1ZSk7XG59XG5mdW5jdGlvbiBjbGFzc1N0cmluZ1BhcnNlcihrZXlWYWx1ZUFycmF5LCB0ZXh0KSB7XG4gIGZvciAobGV0IGkgPSBwYXJzZUNsYXNzTmFtZSh0ZXh0KTsgaSA+PSAwOyBpID0gcGFyc2VDbGFzc05hbWVOZXh0KHRleHQsIGkpKSB7XG4gICAga2V5VmFsdWVBcnJheVNldChrZXlWYWx1ZUFycmF5LCBnZXRMYXN0UGFyc2VkS2V5KHRleHQpLCB0cnVlKTtcbiAgfVxufVxuZnVuY3Rpb24gY2hlY2tTdHlsaW5nUHJvcGVydHkocHJvcCwgdmFsdWUsIHN1ZmZpeCwgaXNDbGFzc0Jhc2VkKSB7XG4gIGNvbnN0IGxWaWV3ID0gZ2V0TFZpZXcoKTtcbiAgY29uc3QgdFZpZXcgPSBnZXRUVmlldygpO1xuICBjb25zdCBiaW5kaW5nSW5kZXggPSBpbmNyZW1lbnRCaW5kaW5nSW5kZXgoMik7XG4gIGlmICh0Vmlldy5maXJzdFVwZGF0ZVBhc3MpIHtcbiAgICBzdHlsaW5nRmlyc3RVcGRhdGVQYXNzKHRWaWV3LCBwcm9wLCBiaW5kaW5nSW5kZXgsIGlzQ2xhc3NCYXNlZCk7XG4gIH1cbiAgaWYgKHZhbHVlICE9PSBOT19DSEFOR0UgJiYgYmluZGluZ1VwZGF0ZWQobFZpZXcsIGJpbmRpbmdJbmRleCwgdmFsdWUpKSB7XG4gICAgY29uc3QgdE5vZGUgPSB0Vmlldy5kYXRhW2dldFNlbGVjdGVkSW5kZXgoKV07XG4gICAgdXBkYXRlU3R5bGluZyh0VmlldywgdE5vZGUsIGxWaWV3LCBsVmlld1tSRU5ERVJFUl0sIHByb3AsIGxWaWV3W2JpbmRpbmdJbmRleCArIDFdID0gbm9ybWFsaXplU3VmZml4KHZhbHVlLCBzdWZmaXgpLCBpc0NsYXNzQmFzZWQsIGJpbmRpbmdJbmRleCk7XG4gIH1cbn1cbmZ1bmN0aW9uIGNoZWNrU3R5bGluZ01hcChrZXlWYWx1ZUFycmF5U2V0LCBzdHJpbmdQYXJzZXIsIHZhbHVlLCBpc0NsYXNzQmFzZWQpIHtcbiAgY29uc3QgdFZpZXcgPSBnZXRUVmlldygpO1xuICBjb25zdCBiaW5kaW5nSW5kZXggPSBpbmNyZW1lbnRCaW5kaW5nSW5kZXgoMik7XG4gIGlmICh0Vmlldy5maXJzdFVwZGF0ZVBhc3MpIHtcbiAgICBzdHlsaW5nRmlyc3RVcGRhdGVQYXNzKHRWaWV3LCBudWxsLCBiaW5kaW5nSW5kZXgsIGlzQ2xhc3NCYXNlZCk7XG4gIH1cbiAgY29uc3QgbFZpZXcgPSBnZXRMVmlldygpO1xuICBpZiAodmFsdWUgIT09IE5PX0NIQU5HRSAmJiBiaW5kaW5nVXBkYXRlZChsVmlldywgYmluZGluZ0luZGV4LCB2YWx1ZSkpIHtcbiAgICBjb25zdCB0Tm9kZSA9IHRWaWV3LmRhdGFbZ2V0U2VsZWN0ZWRJbmRleCgpXTtcbiAgICBpZiAoaGFzU3R5bGluZ0lucHV0U2hhZG93KHROb2RlLCBpc0NsYXNzQmFzZWQpICYmICFpc0luSG9zdEJpbmRpbmdzKHRWaWV3LCBiaW5kaW5nSW5kZXgpKSB7XG4gICAgICBpZiAobmdEZXZNb2RlKSB7XG4gICAgICAgIGNvbnN0IHRTdHlsaW5nS2V5ID0gdFZpZXcuZGF0YVtiaW5kaW5nSW5kZXhdO1xuICAgICAgICBhc3NlcnRFcXVhbChBcnJheS5pc0FycmF5KHRTdHlsaW5nS2V5KSA/IHRTdHlsaW5nS2V5WzFdIDogdFN0eWxpbmdLZXksIGZhbHNlLCBcIlN0eWxpbmcgbGlua2VkIGxpc3Qgc2hhZG93IGlucHV0IHNob3VsZCBiZSBtYXJrZWQgYXMgJ2ZhbHNlJ1wiKTtcbiAgICAgIH1cbiAgICAgIGxldCBzdGF0aWNQcmVmaXggPSBpc0NsYXNzQmFzZWQgPyB0Tm9kZS5jbGFzc2VzV2l0aG91dEhvc3QgOiB0Tm9kZS5zdHlsZXNXaXRob3V0SG9zdDtcbiAgICAgIG5nRGV2TW9kZSAmJiBpc0NsYXNzQmFzZWQgPT09IGZhbHNlICYmIHN0YXRpY1ByZWZpeCAhPT0gbnVsbCAmJiBhc3NlcnRFcXVhbChzdGF0aWNQcmVmaXguZW5kc1dpdGgoJzsnKSwgdHJ1ZSwgXCJFeHBlY3Rpbmcgc3RhdGljIHBvcnRpb24gdG8gZW5kIHdpdGggJzsnXCIpO1xuICAgICAgaWYgKHN0YXRpY1ByZWZpeCAhPT0gbnVsbCkge1xuICAgICAgICB2YWx1ZSA9IGNvbmNhdFN0cmluZ3NXaXRoU3BhY2Uoc3RhdGljUHJlZml4LCB2YWx1ZSA/IHZhbHVlIDogJycpO1xuICAgICAgfVxuICAgICAgc2V0RGlyZWN0aXZlSW5wdXRzV2hpY2hTaGFkb3dzU3R5bGluZyh0VmlldywgdE5vZGUsIGxWaWV3LCB2YWx1ZSwgaXNDbGFzc0Jhc2VkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdXBkYXRlU3R5bGluZ01hcCh0VmlldywgdE5vZGUsIGxWaWV3LCBsVmlld1tSRU5ERVJFUl0sIGxWaWV3W2JpbmRpbmdJbmRleCArIDFdLCBsVmlld1tiaW5kaW5nSW5kZXggKyAxXSA9IHRvU3R5bGluZ0tleVZhbHVlQXJyYXkoa2V5VmFsdWVBcnJheVNldCwgc3RyaW5nUGFyc2VyLCB2YWx1ZSksIGlzQ2xhc3NCYXNlZCwgYmluZGluZ0luZGV4KTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGlzSW5Ib3N0QmluZGluZ3ModFZpZXcsIGJpbmRpbmdJbmRleCkge1xuICByZXR1cm4gYmluZGluZ0luZGV4ID49IHRWaWV3LmV4cGFuZG9TdGFydEluZGV4O1xufVxuZnVuY3Rpb24gc3R5bGluZ0ZpcnN0VXBkYXRlUGFzcyh0VmlldywgdFN0eWxpbmdLZXksIGJpbmRpbmdJbmRleCwgaXNDbGFzc0Jhc2VkKSB7XG4gIG5nRGV2TW9kZSAmJiBhc3NlcnRGaXJzdFVwZGF0ZVBhc3ModFZpZXcpO1xuICBjb25zdCB0RGF0YSA9IHRWaWV3LmRhdGE7XG4gIGlmICh0RGF0YVtiaW5kaW5nSW5kZXggKyAxXSA9PT0gbnVsbCkge1xuICAgIGNvbnN0IHROb2RlID0gdERhdGFbZ2V0U2VsZWN0ZWRJbmRleCgpXTtcbiAgICBuZ0Rldk1vZGUgJiYgYXNzZXJ0RGVmaW5lZCh0Tm9kZSwgJ1ROb2RlIGV4cGVjdGVkJyk7XG4gICAgY29uc3QgaXNIb3N0QmluZGluZ3MgPSBpc0luSG9zdEJpbmRpbmdzKHRWaWV3LCBiaW5kaW5nSW5kZXgpO1xuICAgIGlmIChoYXNTdHlsaW5nSW5wdXRTaGFkb3codE5vZGUsIGlzQ2xhc3NCYXNlZCkgJiYgdFN0eWxpbmdLZXkgPT09IG51bGwgJiYgIWlzSG9zdEJpbmRpbmdzKSB7XG4gICAgICB0U3R5bGluZ0tleSA9IGZhbHNlO1xuICAgIH1cbiAgICB0U3R5bGluZ0tleSA9IHdyYXBJblN0YXRpY1N0eWxpbmdLZXkodERhdGEsIHROb2RlLCB0U3R5bGluZ0tleSwgaXNDbGFzc0Jhc2VkKTtcbiAgICBpbnNlcnRUU3R5bGluZ0JpbmRpbmcodERhdGEsIHROb2RlLCB0U3R5bGluZ0tleSwgYmluZGluZ0luZGV4LCBpc0hvc3RCaW5kaW5ncywgaXNDbGFzc0Jhc2VkKTtcbiAgfVxufVxuZnVuY3Rpb24gd3JhcEluU3RhdGljU3R5bGluZ0tleSh0RGF0YSwgdE5vZGUsIHN0eWxpbmdLZXksIGlzQ2xhc3NCYXNlZCkge1xuICBjb25zdCBob3N0RGlyZWN0aXZlRGVmID0gZ2V0Q3VycmVudERpcmVjdGl2ZURlZih0RGF0YSk7XG4gIGxldCByZXNpZHVhbCA9IGlzQ2xhc3NCYXNlZCA/IHROb2RlLnJlc2lkdWFsQ2xhc3NlcyA6IHROb2RlLnJlc2lkdWFsU3R5bGVzO1xuICBpZiAoaG9zdERpcmVjdGl2ZURlZiA9PT0gbnVsbCkge1xuICAgIGNvbnN0IGlzRmlyc3RTdHlsaW5nSW5zdHJ1Y3Rpb25JblRlbXBsYXRlID0gKGlzQ2xhc3NCYXNlZCA/IHROb2RlLmNsYXNzQmluZGluZ3MgOiB0Tm9kZS5zdHlsZUJpbmRpbmdzKSA9PT0gMDtcbiAgICBpZiAoaXNGaXJzdFN0eWxpbmdJbnN0cnVjdGlvbkluVGVtcGxhdGUpIHtcbiAgICAgIHN0eWxpbmdLZXkgPSBjb2xsZWN0U3R5bGluZ0Zyb21EaXJlY3RpdmVzKG51bGwsIHREYXRhLCB0Tm9kZSwgc3R5bGluZ0tleSwgaXNDbGFzc0Jhc2VkKTtcbiAgICAgIHN0eWxpbmdLZXkgPSBjb2xsZWN0U3R5bGluZ0Zyb21UQXR0cnMoc3R5bGluZ0tleSwgdE5vZGUuYXR0cnMsIGlzQ2xhc3NCYXNlZCk7XG4gICAgICByZXNpZHVhbCA9IG51bGw7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGNvbnN0IGRpcmVjdGl2ZVN0eWxpbmdMYXN0ID0gdE5vZGUuZGlyZWN0aXZlU3R5bGluZ0xhc3Q7XG4gICAgY29uc3QgaXNGaXJzdFN0eWxpbmdJbnN0cnVjdGlvbkluSG9zdEJpbmRpbmcgPSBkaXJlY3RpdmVTdHlsaW5nTGFzdCA9PT0gLTEgfHwgdERhdGFbZGlyZWN0aXZlU3R5bGluZ0xhc3RdICE9PSBob3N0RGlyZWN0aXZlRGVmO1xuICAgIGlmIChpc0ZpcnN0U3R5bGluZ0luc3RydWN0aW9uSW5Ib3N0QmluZGluZykge1xuICAgICAgc3R5bGluZ0tleSA9IGNvbGxlY3RTdHlsaW5nRnJvbURpcmVjdGl2ZXMoaG9zdERpcmVjdGl2ZURlZiwgdERhdGEsIHROb2RlLCBzdHlsaW5nS2V5LCBpc0NsYXNzQmFzZWQpO1xuICAgICAgaWYgKHJlc2lkdWFsID09PSBudWxsKSB7XG4gICAgICAgIGxldCB0ZW1wbGF0ZVN0eWxpbmdLZXkgPSBnZXRUZW1wbGF0ZUhlYWRUU3R5bGluZ0tleSh0RGF0YSwgdE5vZGUsIGlzQ2xhc3NCYXNlZCk7XG4gICAgICAgIGlmICh0ZW1wbGF0ZVN0eWxpbmdLZXkgIT09IHVuZGVmaW5lZCAmJiBBcnJheS5pc0FycmF5KHRlbXBsYXRlU3R5bGluZ0tleSkpIHtcbiAgICAgICAgICB0ZW1wbGF0ZVN0eWxpbmdLZXkgPSBjb2xsZWN0U3R5bGluZ0Zyb21EaXJlY3RpdmVzKG51bGwsIHREYXRhLCB0Tm9kZSwgdGVtcGxhdGVTdHlsaW5nS2V5WzFdLCBpc0NsYXNzQmFzZWQpO1xuICAgICAgICAgIHRlbXBsYXRlU3R5bGluZ0tleSA9IGNvbGxlY3RTdHlsaW5nRnJvbVRBdHRycyh0ZW1wbGF0ZVN0eWxpbmdLZXksIHROb2RlLmF0dHJzLCBpc0NsYXNzQmFzZWQpO1xuICAgICAgICAgIHNldFRlbXBsYXRlSGVhZFRTdHlsaW5nS2V5KHREYXRhLCB0Tm9kZSwgaXNDbGFzc0Jhc2VkLCB0ZW1wbGF0ZVN0eWxpbmdLZXkpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXNpZHVhbCA9IGNvbGxlY3RSZXNpZHVhbCh0RGF0YSwgdE5vZGUsIGlzQ2xhc3NCYXNlZCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmIChyZXNpZHVhbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaXNDbGFzc0Jhc2VkID8gdE5vZGUucmVzaWR1YWxDbGFzc2VzID0gcmVzaWR1YWwgOiB0Tm9kZS5yZXNpZHVhbFN0eWxlcyA9IHJlc2lkdWFsO1xuICB9XG4gIHJldHVybiBzdHlsaW5nS2V5O1xufVxuZnVuY3Rpb24gZ2V0VGVtcGxhdGVIZWFkVFN0eWxpbmdLZXkodERhdGEsIHROb2RlLCBpc0NsYXNzQmFzZWQpIHtcbiAgY29uc3QgYmluZGluZ3MgPSBpc0NsYXNzQmFzZWQgPyB0Tm9kZS5jbGFzc0JpbmRpbmdzIDogdE5vZGUuc3R5bGVCaW5kaW5ncztcbiAgaWYgKGdldFRTdHlsaW5nUmFuZ2VOZXh0KGJpbmRpbmdzKSA9PT0gMCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgcmV0dXJuIHREYXRhW2dldFRTdHlsaW5nUmFuZ2VQcmV2KGJpbmRpbmdzKV07XG59XG5mdW5jdGlvbiBzZXRUZW1wbGF0ZUhlYWRUU3R5bGluZ0tleSh0RGF0YSwgdE5vZGUsIGlzQ2xhc3NCYXNlZCwgdFN0eWxpbmdLZXkpIHtcbiAgY29uc3QgYmluZGluZ3MgPSBpc0NsYXNzQmFzZWQgPyB0Tm9kZS5jbGFzc0JpbmRpbmdzIDogdE5vZGUuc3R5bGVCaW5kaW5ncztcbiAgbmdEZXZNb2RlICYmIGFzc2VydE5vdEVxdWFsKGdldFRTdHlsaW5nUmFuZ2VOZXh0KGJpbmRpbmdzKSwgMCwgJ0V4cGVjdGluZyB0byBoYXZlIGF0IGxlYXN0IG9uZSB0ZW1wbGF0ZSBzdHlsaW5nIGJpbmRpbmcuJyk7XG4gIHREYXRhW2dldFRTdHlsaW5nUmFuZ2VQcmV2KGJpbmRpbmdzKV0gPSB0U3R5bGluZ0tleTtcbn1cbmZ1bmN0aW9uIGNvbGxlY3RSZXNpZHVhbCh0RGF0YSwgdE5vZGUsIGlzQ2xhc3NCYXNlZCkge1xuICBsZXQgcmVzaWR1YWwgPSB1bmRlZmluZWQ7XG4gIGNvbnN0IGRpcmVjdGl2ZUVuZCA9IHROb2RlLmRpcmVjdGl2ZUVuZDtcbiAgbmdEZXZNb2RlICYmIGFzc2VydE5vdEVxdWFsKHROb2RlLmRpcmVjdGl2ZVN0eWxpbmdMYXN0LCAtMSwgJ0J5IHRoZSB0aW1lIHRoaXMgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgYXQgbGVhc3Qgb25lIGhvc3RCaW5kaW5ncy1ub2RlIHN0eWxpbmcgaW5zdHJ1Y3Rpb24gbXVzdCBoYXZlIGV4ZWN1dGVkLicpO1xuICBmb3IgKGxldCBpID0gMSArIHROb2RlLmRpcmVjdGl2ZVN0eWxpbmdMYXN0OyBpIDwgZGlyZWN0aXZlRW5kOyBpKyspIHtcbiAgICBjb25zdCBhdHRycyA9IHREYXRhW2ldLmhvc3RBdHRycztcbiAgICByZXNpZHVhbCA9IGNvbGxlY3RTdHlsaW5nRnJvbVRBdHRycyhyZXNpZHVhbCwgYXR0cnMsIGlzQ2xhc3NCYXNlZCk7XG4gIH1cbiAgcmV0dXJuIGNvbGxlY3RTdHlsaW5nRnJvbVRBdHRycyhyZXNpZHVhbCwgdE5vZGUuYXR0cnMsIGlzQ2xhc3NCYXNlZCk7XG59XG5mdW5jdGlvbiBjb2xsZWN0U3R5bGluZ0Zyb21EaXJlY3RpdmVzKGhvc3REaXJlY3RpdmVEZWYsIHREYXRhLCB0Tm9kZSwgc3R5bGluZ0tleSwgaXNDbGFzc0Jhc2VkKSB7XG4gIGxldCBjdXJyZW50RGlyZWN0aXZlID0gbnVsbDtcbiAgY29uc3QgZGlyZWN0aXZlRW5kID0gdE5vZGUuZGlyZWN0aXZlRW5kO1xuICBsZXQgZGlyZWN0aXZlU3R5bGluZ0xhc3QgPSB0Tm9kZS5kaXJlY3RpdmVTdHlsaW5nTGFzdDtcbiAgaWYgKGRpcmVjdGl2ZVN0eWxpbmdMYXN0ID09PSAtMSkge1xuICAgIGRpcmVjdGl2ZVN0eWxpbmdMYXN0ID0gdE5vZGUuZGlyZWN0aXZlU3RhcnQ7XG4gIH0gZWxzZSB7XG4gICAgZGlyZWN0aXZlU3R5bGluZ0xhc3QrKztcbiAgfVxuICB3aGlsZSAoZGlyZWN0aXZlU3R5bGluZ0xhc3QgPCBkaXJlY3RpdmVFbmQpIHtcbiAgICBjdXJyZW50RGlyZWN0aXZlID0gdERhdGFbZGlyZWN0aXZlU3R5bGluZ0xhc3RdO1xuICAgIG5nRGV2TW9kZSAmJiBhc3NlcnREZWZpbmVkKGN1cnJlbnREaXJlY3RpdmUsICdleHBlY3RlZCB0byBiZSBkZWZpbmVkJyk7XG4gICAgc3R5bGluZ0tleSA9IGNvbGxlY3RTdHlsaW5nRnJvbVRBdHRycyhzdHlsaW5nS2V5LCBjdXJyZW50RGlyZWN0aXZlLmhvc3RBdHRycywgaXNDbGFzc0Jhc2VkKTtcbiAgICBpZiAoY3VycmVudERpcmVjdGl2ZSA9PT0gaG9zdERpcmVjdGl2ZURlZikgYnJlYWs7XG4gICAgZGlyZWN0aXZlU3R5bGluZ0xhc3QrKztcbiAgfVxuICBpZiAoaG9zdERpcmVjdGl2ZURlZiAhPT0gbnVsbCkge1xuICAgIHROb2RlLmRpcmVjdGl2ZVN0eWxpbmdMYXN0ID0gZGlyZWN0aXZlU3R5bGluZ0xhc3Q7XG4gIH1cbiAgcmV0dXJuIHN0eWxpbmdLZXk7XG59XG5mdW5jdGlvbiBjb2xsZWN0U3R5bGluZ0Zyb21UQXR0cnMoc3R5bGluZ0tleSwgYXR0cnMsIGlzQ2xhc3NCYXNlZCkge1xuICBjb25zdCBkZXNpcmVkTWFya2VyID0gaXNDbGFzc0Jhc2VkID8gMSA6IDI7XG4gIGxldCBjdXJyZW50TWFya2VyID0gLTE7XG4gIGlmIChhdHRycyAhPT0gbnVsbCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXR0cnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGl0ZW0gPSBhdHRyc1tpXTtcbiAgICAgIGlmICh0eXBlb2YgaXRlbSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgY3VycmVudE1hcmtlciA9IGl0ZW07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoY3VycmVudE1hcmtlciA9PT0gZGVzaXJlZE1hcmtlcikge1xuICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShzdHlsaW5nS2V5KSkge1xuICAgICAgICAgICAgc3R5bGluZ0tleSA9IHN0eWxpbmdLZXkgPT09IHVuZGVmaW5lZCA/IFtdIDogWycnLCBzdHlsaW5nS2V5XTtcbiAgICAgICAgICB9XG4gICAgICAgICAga2V5VmFsdWVBcnJheVNldChzdHlsaW5nS2V5LCBpdGVtLCBpc0NsYXNzQmFzZWQgPyB0cnVlIDogYXR0cnNbKytpXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHN0eWxpbmdLZXkgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBzdHlsaW5nS2V5O1xufVxuZnVuY3Rpb24gdG9TdHlsaW5nS2V5VmFsdWVBcnJheShrZXlWYWx1ZUFycmF5U2V0LCBzdHJpbmdQYXJzZXIsIHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PSBudWxsIHx8IHZhbHVlID09PSAnJykgcmV0dXJuIEVNUFRZX0FSUkFZO1xuICBjb25zdCBzdHlsZUtleVZhbHVlQXJyYXkgPSBbXTtcbiAgY29uc3QgdW53cmFwcGVkVmFsdWUgPSB1bndyYXBTYWZlVmFsdWUodmFsdWUpO1xuICBpZiAoQXJyYXkuaXNBcnJheSh1bndyYXBwZWRWYWx1ZSkpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHVud3JhcHBlZFZhbHVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICBrZXlWYWx1ZUFycmF5U2V0KHN0eWxlS2V5VmFsdWVBcnJheSwgdW53cmFwcGVkVmFsdWVbaV0sIHRydWUpO1xuICAgIH1cbiAgfSBlbHNlIGlmICh1bndyYXBwZWRWYWx1ZSBpbnN0YW5jZW9mIFNldCkge1xuICAgIGZvciAoY29uc3QgY3VycmVudCBvZiB1bndyYXBwZWRWYWx1ZSkge1xuICAgICAga2V5VmFsdWVBcnJheVNldChzdHlsZUtleVZhbHVlQXJyYXksIGN1cnJlbnQsIHRydWUpO1xuICAgIH1cbiAgfSBlbHNlIGlmICh0eXBlb2YgdW53cmFwcGVkVmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gdW53cmFwcGVkVmFsdWUpIHtcbiAgICAgIGlmICh1bndyYXBwZWRWYWx1ZS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgIGtleVZhbHVlQXJyYXlTZXQoc3R5bGVLZXlWYWx1ZUFycmF5LCBrZXksIHVud3JhcHBlZFZhbHVlW2tleV0pO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIGlmICh0eXBlb2YgdW53cmFwcGVkVmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgc3RyaW5nUGFyc2VyKHN0eWxlS2V5VmFsdWVBcnJheSwgdW53cmFwcGVkVmFsdWUpO1xuICB9IGVsc2Uge1xuICAgIG5nRGV2TW9kZSAmJiB0aHJvd0Vycm9yKCdVbnN1cHBvcnRlZCBzdHlsaW5nIHR5cGU6ICcgKyB0eXBlb2YgdW53cmFwcGVkVmFsdWUgKyAnICgnICsgdW53cmFwcGVkVmFsdWUgKyAnKScpO1xuICB9XG4gIHJldHVybiBzdHlsZUtleVZhbHVlQXJyYXk7XG59XG5mdW5jdGlvbiBzdHlsZUtleVZhbHVlQXJyYXlTZXQoa2V5VmFsdWVBcnJheSwga2V5LCB2YWx1ZSkge1xuICBrZXlWYWx1ZUFycmF5U2V0KGtleVZhbHVlQXJyYXksIGtleSwgdW53cmFwU2FmZVZhbHVlKHZhbHVlKSk7XG59XG5mdW5jdGlvbiBjbGFzc0tleVZhbHVlQXJyYXlTZXQoa2V5VmFsdWVBcnJheSwga2V5LCB2YWx1ZSkge1xuICBjb25zdCBzdHJpbmdLZXkgPSBTdHJpbmcoa2V5KTtcbiAgaWYgKHN0cmluZ0tleSAhPT0gJycgJiYgIXN0cmluZ0tleS5pbmNsdWRlcygnICcpKSB7XG4gICAga2V5VmFsdWVBcnJheVNldChrZXlWYWx1ZUFycmF5LCBzdHJpbmdLZXksIHZhbHVlKTtcbiAgfVxufVxuZnVuY3Rpb24gdXBkYXRlU3R5bGluZ01hcCh0VmlldywgdE5vZGUsIGxWaWV3LCByZW5kZXJlciwgb2xkS2V5VmFsdWVBcnJheSwgbmV3S2V5VmFsdWVBcnJheSwgaXNDbGFzc0Jhc2VkLCBiaW5kaW5nSW5kZXgpIHtcbiAgaWYgKG9sZEtleVZhbHVlQXJyYXkgPT09IE5PX0NIQU5HRSkge1xuICAgIG9sZEtleVZhbHVlQXJyYXkgPSBFTVBUWV9BUlJBWTtcbiAgfVxuICBsZXQgb2xkSW5kZXggPSAwO1xuICBsZXQgbmV3SW5kZXggPSAwO1xuICBsZXQgb2xkS2V5ID0gMCA8IG9sZEtleVZhbHVlQXJyYXkubGVuZ3RoID8gb2xkS2V5VmFsdWVBcnJheVswXSA6IG51bGw7XG4gIGxldCBuZXdLZXkgPSAwIDwgbmV3S2V5VmFsdWVBcnJheS5sZW5ndGggPyBuZXdLZXlWYWx1ZUFycmF5WzBdIDogbnVsbDtcbiAgd2hpbGUgKG9sZEtleSAhPT0gbnVsbCB8fCBuZXdLZXkgIT09IG51bGwpIHtcbiAgICBuZ0Rldk1vZGUgJiYgYXNzZXJ0TGVzc1RoYW4ob2xkSW5kZXgsIDk5OSwgJ0FyZSB3ZSBzdHVjayBpbiBpbmZpbml0ZSBsb29wPycpO1xuICAgIG5nRGV2TW9kZSAmJiBhc3NlcnRMZXNzVGhhbihuZXdJbmRleCwgOTk5LCAnQXJlIHdlIHN0dWNrIGluIGluZmluaXRlIGxvb3A/Jyk7XG4gICAgY29uc3Qgb2xkVmFsdWUgPSBvbGRJbmRleCA8IG9sZEtleVZhbHVlQXJyYXkubGVuZ3RoID8gb2xkS2V5VmFsdWVBcnJheVtvbGRJbmRleCArIDFdIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IG5ld1ZhbHVlID0gbmV3SW5kZXggPCBuZXdLZXlWYWx1ZUFycmF5Lmxlbmd0aCA/IG5ld0tleVZhbHVlQXJyYXlbbmV3SW5kZXggKyAxXSA6IHVuZGVmaW5lZDtcbiAgICBsZXQgc2V0S2V5ID0gbnVsbDtcbiAgICBsZXQgc2V0VmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgaWYgKG9sZEtleSA9PT0gbmV3S2V5KSB7XG4gICAgICBvbGRJbmRleCArPSAyO1xuICAgICAgbmV3SW5kZXggKz0gMjtcbiAgICAgIGlmIChvbGRWYWx1ZSAhPT0gbmV3VmFsdWUpIHtcbiAgICAgICAgc2V0S2V5ID0gbmV3S2V5O1xuICAgICAgICBzZXRWYWx1ZSA9IG5ld1ZhbHVlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAobmV3S2V5ID09PSBudWxsIHx8IG9sZEtleSAhPT0gbnVsbCAmJiBvbGRLZXkgPCBuZXdLZXkpIHtcbiAgICAgIG9sZEluZGV4ICs9IDI7XG4gICAgICBzZXRLZXkgPSBvbGRLZXk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5nRGV2TW9kZSAmJiBhc3NlcnREZWZpbmVkKG5ld0tleSwgJ0V4cGVjdGluZyB0byBoYXZlIGEgdmFsaWQga2V5Jyk7XG4gICAgICBuZXdJbmRleCArPSAyO1xuICAgICAgc2V0S2V5ID0gbmV3S2V5O1xuICAgICAgc2V0VmFsdWUgPSBuZXdWYWx1ZTtcbiAgICB9XG4gICAgaWYgKHNldEtleSAhPT0gbnVsbCkge1xuICAgICAgdXBkYXRlU3R5bGluZyh0VmlldywgdE5vZGUsIGxWaWV3LCByZW5kZXJlciwgc2V0S2V5LCBzZXRWYWx1ZSwgaXNDbGFzc0Jhc2VkLCBiaW5kaW5nSW5kZXgpO1xuICAgIH1cbiAgICBvbGRLZXkgPSBvbGRJbmRleCA8IG9sZEtleVZhbHVlQXJyYXkubGVuZ3RoID8gb2xkS2V5VmFsdWVBcnJheVtvbGRJbmRleF0gOiBudWxsO1xuICAgIG5ld0tleSA9IG5ld0luZGV4IDwgbmV3S2V5VmFsdWVBcnJheS5sZW5ndGggPyBuZXdLZXlWYWx1ZUFycmF5W25ld0luZGV4XSA6IG51bGw7XG4gIH1cbn1cbmZ1bmN0aW9uIHVwZGF0ZVN0eWxpbmcodFZpZXcsIHROb2RlLCBsVmlldywgcmVuZGVyZXIsIHByb3AsIHZhbHVlLCBpc0NsYXNzQmFzZWQsIGJpbmRpbmdJbmRleCkge1xuICBpZiAoISh0Tm9kZS50eXBlICYgMykpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgdERhdGEgPSB0Vmlldy5kYXRhO1xuICBjb25zdCB0UmFuZ2UgPSB0RGF0YVtiaW5kaW5nSW5kZXggKyAxXTtcbiAgY29uc3QgaGlnaGVyUHJpb3JpdHlWYWx1ZSA9IGdldFRTdHlsaW5nUmFuZ2VOZXh0RHVwbGljYXRlKHRSYW5nZSkgPyBmaW5kU3R5bGluZ1ZhbHVlKHREYXRhLCB0Tm9kZSwgbFZpZXcsIHByb3AsIGdldFRTdHlsaW5nUmFuZ2VOZXh0KHRSYW5nZSksIGlzQ2xhc3NCYXNlZCkgOiB1bmRlZmluZWQ7XG4gIGlmICghaXNTdHlsaW5nVmFsdWVQcmVzZW50KGhpZ2hlclByaW9yaXR5VmFsdWUpKSB7XG4gICAgaWYgKCFpc1N0eWxpbmdWYWx1ZVByZXNlbnQodmFsdWUpKSB7XG4gICAgICBpZiAoZ2V0VFN0eWxpbmdSYW5nZVByZXZEdXBsaWNhdGUodFJhbmdlKSkge1xuICAgICAgICB2YWx1ZSA9IGZpbmRTdHlsaW5nVmFsdWUodERhdGEsIG51bGwsIGxWaWV3LCBwcm9wLCBiaW5kaW5nSW5kZXgsIGlzQ2xhc3NCYXNlZCk7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHJOb2RlID0gZ2V0TmF0aXZlQnlJbmRleChnZXRTZWxlY3RlZEluZGV4KCksIGxWaWV3KTtcbiAgICBhcHBseVN0eWxpbmcocmVuZGVyZXIsIGlzQ2xhc3NCYXNlZCwgck5vZGUsIHByb3AsIHZhbHVlKTtcbiAgfVxufVxuZnVuY3Rpb24gZmluZFN0eWxpbmdWYWx1ZSh0RGF0YSwgdE5vZGUsIGxWaWV3LCBwcm9wLCBpbmRleCwgaXNDbGFzc0Jhc2VkKSB7XG4gIGNvbnN0IGlzUHJldkRpcmVjdGlvbiA9IHROb2RlID09PSBudWxsO1xuICBsZXQgdmFsdWUgPSB1bmRlZmluZWQ7XG4gIHdoaWxlIChpbmRleCA+IDApIHtcbiAgICBjb25zdCByYXdLZXkgPSB0RGF0YVtpbmRleF07XG4gICAgY29uc3QgY29udGFpbnNTdGF0aWNzID0gQXJyYXkuaXNBcnJheShyYXdLZXkpO1xuICAgIGNvbnN0IGtleSA9IGNvbnRhaW5zU3RhdGljcyA/IHJhd0tleVsxXSA6IHJhd0tleTtcbiAgICBjb25zdCBpc1N0eWxpbmdNYXAgPSBrZXkgPT09IG51bGw7XG4gICAgbGV0IHZhbHVlQXRMVmlld0luZGV4ID0gbFZpZXdbaW5kZXggKyAxXTtcbiAgICBpZiAodmFsdWVBdExWaWV3SW5kZXggPT09IE5PX0NIQU5HRSkge1xuICAgICAgdmFsdWVBdExWaWV3SW5kZXggPSBpc1N0eWxpbmdNYXAgPyBFTVBUWV9BUlJBWSA6IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgbGV0IGN1cnJlbnRWYWx1ZSA9IGlzU3R5bGluZ01hcCA/IGtleVZhbHVlQXJyYXlHZXQodmFsdWVBdExWaWV3SW5kZXgsIHByb3ApIDoga2V5ID09PSBwcm9wID8gdmFsdWVBdExWaWV3SW5kZXggOiB1bmRlZmluZWQ7XG4gICAgaWYgKGNvbnRhaW5zU3RhdGljcyAmJiAhaXNTdHlsaW5nVmFsdWVQcmVzZW50KGN1cnJlbnRWYWx1ZSkpIHtcbiAgICAgIGN1cnJlbnRWYWx1ZSA9IGtleVZhbHVlQXJyYXlHZXQocmF3S2V5LCBwcm9wKTtcbiAgICB9XG4gICAgaWYgKGlzU3R5bGluZ1ZhbHVlUHJlc2VudChjdXJyZW50VmFsdWUpKSB7XG4gICAgICB2YWx1ZSA9IGN1cnJlbnRWYWx1ZTtcbiAgICAgIGlmIChpc1ByZXZEaXJlY3Rpb24pIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCB0UmFuZ2UgPSB0RGF0YVtpbmRleCArIDFdO1xuICAgIGluZGV4ID0gaXNQcmV2RGlyZWN0aW9uID8gZ2V0VFN0eWxpbmdSYW5nZVByZXYodFJhbmdlKSA6IGdldFRTdHlsaW5nUmFuZ2VOZXh0KHRSYW5nZSk7XG4gIH1cbiAgaWYgKHROb2RlICE9PSBudWxsKSB7XG4gICAgbGV0IHJlc2lkdWFsID0gaXNDbGFzc0Jhc2VkID8gdE5vZGUucmVzaWR1YWxDbGFzc2VzIDogdE5vZGUucmVzaWR1YWxTdHlsZXM7XG4gICAgaWYgKHJlc2lkdWFsICE9IG51bGwpIHtcbiAgICAgIHZhbHVlID0ga2V5VmFsdWVBcnJheUdldChyZXNpZHVhbCwgcHJvcCk7XG4gICAgfVxuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cbmZ1bmN0aW9uIGlzU3R5bGluZ1ZhbHVlUHJlc2VudCh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT09IHVuZGVmaW5lZDtcbn1cbmZ1bmN0aW9uIG5vcm1hbGl6ZVN1ZmZpeCh2YWx1ZSwgc3VmZml4KSB7XG4gIGlmICh2YWx1ZSA9PSBudWxsIHx8IHZhbHVlID09PSAnJykgO2Vsc2UgaWYgKHR5cGVvZiBzdWZmaXggPT09ICdzdHJpbmcnKSB7XG4gICAgdmFsdWUgPSB2YWx1ZSArIHN1ZmZpeDtcbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgdmFsdWUgPSBzdHJpbmdpZnkodW53cmFwU2FmZVZhbHVlKHZhbHVlKSk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuZnVuY3Rpb24gaGFzU3R5bGluZ0lucHV0U2hhZG93KHROb2RlLCBpc0NsYXNzQmFzZWQpIHtcbiAgcmV0dXJuICh0Tm9kZS5mbGFncyAmIChpc0NsYXNzQmFzZWQgPyA4IDogMTYpKSAhPT0gMDtcbn1cbmZ1bmN0aW9uIMm1ybV0ZXh0KGluZGV4LCB2YWx1ZSA9ICcnKSB7XG4gIGNvbnN0IGxWaWV3ID0gZ2V0TFZpZXcoKTtcbiAgY29uc3QgdFZpZXcgPSBnZXRUVmlldygpO1xuICBjb25zdCBhZGp1c3RlZEluZGV4ID0gaW5kZXggKyBIRUFERVJfT0ZGU0VUO1xuICBuZ0Rldk1vZGUgJiYgYXNzZXJ0VE5vZGVDcmVhdGlvbkluZGV4KGxWaWV3LCBpbmRleCk7XG4gIGNvbnN0IHROb2RlID0gdFZpZXcuZmlyc3RDcmVhdGVQYXNzID8gZ2V0T3JDcmVhdGVUTm9kZSh0VmlldywgYWRqdXN0ZWRJbmRleCwgMSwgdmFsdWUsIG51bGwpIDogdFZpZXcuZGF0YVthZGp1c3RlZEluZGV4XTtcbiAgY29uc3QgdGV4dE5hdGl2ZSA9IF9sb2NhdGVPckNyZWF0ZVRleHROb2RlKHRWaWV3LCBsVmlldywgdE5vZGUsIHZhbHVlKTtcbiAgbFZpZXdbYWRqdXN0ZWRJbmRleF0gPSB0ZXh0TmF0aXZlO1xuICBpZiAod2FzTGFzdE5vZGVDcmVhdGVkKCkpIHtcbiAgICBhcHBlbmRDaGlsZCh0VmlldywgbFZpZXcsIHRleHROYXRpdmUsIHROb2RlKTtcbiAgfVxuICBzZXRDdXJyZW50VE5vZGUodE5vZGUsIGZhbHNlKTtcbn1cbmxldCBfbG9jYXRlT3JDcmVhdGVUZXh0Tm9kZSA9ICh0VmlldywgbFZpZXcsIHROb2RlLCB2YWx1ZSkgPT4ge1xuICBsYXN0Tm9kZVdhc0NyZWF0ZWQodHJ1ZSk7XG4gIHJldHVybiBjcmVhdGVUZXh0Tm9kZShsVmlld1tSRU5ERVJFUl0sIHZhbHVlKTtcbn07XG5mdW5jdGlvbiBsb2NhdGVPckNyZWF0ZVRleHROb2RlSW1wbCh0VmlldywgbFZpZXcsIHROb2RlLCB2YWx1ZSkge1xuICBjb25zdCBpc05vZGVDcmVhdGlvbk1vZGUgPSAhY2FuSHlkcmF0ZU5vZGUobFZpZXcsIHROb2RlKTtcbiAgbGFzdE5vZGVXYXNDcmVhdGVkKGlzTm9kZUNyZWF0aW9uTW9kZSk7XG4gIGlmIChpc05vZGVDcmVhdGlvbk1vZGUpIHtcbiAgICByZXR1cm4gY3JlYXRlVGV4dE5vZGUobFZpZXdbUkVOREVSRVJdLCB2YWx1ZSk7XG4gIH1cbiAgY29uc3QgaHlkcmF0aW9uSW5mbyA9IGxWaWV3W0hZRFJBVElPTl07XG4gIGNvbnN0IHRleHROYXRpdmUgPSBsb2NhdGVOZXh0Uk5vZGUoaHlkcmF0aW9uSW5mbywgdFZpZXcsIGxWaWV3LCB0Tm9kZSk7XG4gIG5nRGV2TW9kZSAmJiB2YWxpZGF0ZU1hdGNoaW5nTm9kZSh0ZXh0TmF0aXZlLCBOb2RlLlRFWFRfTk9ERSwgbnVsbCwgbFZpZXcsIHROb2RlKTtcbiAgbmdEZXZNb2RlICYmIG1hcmtSTm9kZUFzQ2xhaW1lZEJ5SHlkcmF0aW9uKHRleHROYXRpdmUpO1xuICByZXR1cm4gdGV4dE5hdGl2ZTtcbn1cbmZ1bmN0aW9uIGVuYWJsZUxvY2F0ZU9yQ3JlYXRlVGV4dE5vZGVJbXBsKCkge1xuICBfbG9jYXRlT3JDcmVhdGVUZXh0Tm9kZSA9IGxvY2F0ZU9yQ3JlYXRlVGV4dE5vZGVJbXBsO1xufVxuZnVuY3Rpb24gaW50ZXJwb2xhdGlvblYobFZpZXcsIHZhbHVlcykge1xuICBuZ0Rldk1vZGUgJiYgYXNzZXJ0TGVzc1RoYW4oMiwgdmFsdWVzLmxlbmd0aCwgJ3Nob3VsZCBoYXZlIGF0IGxlYXN0IDMgdmFsdWVzJyk7XG4gIGxldCBpc0JpbmRpbmdVcGRhdGVkID0gZmFsc2U7XG4gIGxldCBiaW5kaW5nSW5kZXggPSBnZXRCaW5kaW5nSW5kZXgoKTtcbiAgZm9yIChsZXQgaSA9IDE7IGkgPCB2YWx1ZXMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICBpc0JpbmRpbmdVcGRhdGVkID0gYmluZGluZ1VwZGF0ZWQobFZpZXcsIGJpbmRpbmdJbmRleCsrLCB2YWx1ZXNbaV0pIHx8IGlzQmluZGluZ1VwZGF0ZWQ7XG4gIH1cbiAgc2V0QmluZGluZ0luZGV4KGJpbmRpbmdJbmRleCk7XG4gIGlmICghaXNCaW5kaW5nVXBkYXRlZCkge1xuICAgIHJldHVybiBOT19DSEFOR0U7XG4gIH1cbiAgbGV0IGNvbnRlbnQgPSB2YWx1ZXNbMF07XG4gIGZvciAobGV0IGkgPSAxOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgY29udGVudCArPSByZW5kZXJTdHJpbmdpZnkodmFsdWVzW2ldKSArIChpICsgMSAhPT0gdmFsdWVzLmxlbmd0aCA/IHZhbHVlc1tpICsgMV0gOiAnJyk7XG4gIH1cbiAgcmV0dXJuIGNvbnRlbnQ7XG59XG5mdW5jdGlvbiBpbnRlcnBvbGF0aW9uMShsVmlldywgcHJlZml4LCB2MCwgc3VmZml4ID0gJycpIHtcbiAgY29uc3QgZGlmZmVyZW50ID0gYmluZGluZ1VwZGF0ZWQobFZpZXcsIG5leHRCaW5kaW5nSW5kZXgoKSwgdjApO1xuICByZXR1cm4gZGlmZmVyZW50ID8gcHJlZml4ICsgcmVuZGVyU3RyaW5naWZ5KHYwKSArIHN1ZmZpeCA6IE5PX0NIQU5HRTtcbn1cbmZ1bmN0aW9uIGludGVycG9sYXRpb24yKGxWaWV3LCBwcmVmaXgsIHYwLCBpMCwgdjEsIHN1ZmZpeCA9ICcnKSB7XG4gIGNvbnN0IGJpbmRpbmdJbmRleCA9IGdldEJpbmRpbmdJbmRleCgpO1xuICBjb25zdCBkaWZmZXJlbnQgPSBiaW5kaW5nVXBkYXRlZDIobFZpZXcsIGJpbmRpbmdJbmRleCwgdjAsIHYxKTtcbiAgaW5jcmVtZW50QmluZGluZ0luZGV4KDIpO1xuICByZXR1cm4gZGlmZmVyZW50ID8gcHJlZml4ICsgcmVuZGVyU3RyaW5naWZ5KHYwKSArIGkwICsgcmVuZGVyU3RyaW5naWZ5KHYxKSArIHN1ZmZpeCA6IE5PX0NIQU5HRTtcbn1cbmZ1bmN0aW9uIGludGVycG9sYXRpb24zKGxWaWV3LCBwcmVmaXgsIHYwLCBpMCwgdjEsIGkxLCB2Miwgc3VmZml4ID0gJycpIHtcbiAgY29uc3QgYmluZGluZ0luZGV4ID0gZ2V0QmluZGluZ0luZGV4KCk7XG4gIGNvbnN0IGRpZmZlcmVudCA9IGJpbmRpbmdVcGRhdGVkMyhsVmlldywgYmluZGluZ0luZGV4LCB2MCwgdjEsIHYyKTtcbiAgaW5jcmVtZW50QmluZGluZ0luZGV4KDMpO1xuICByZXR1cm4gZGlmZmVyZW50ID8gcHJlZml4ICsgcmVuZGVyU3RyaW5naWZ5KHYwKSArIGkwICsgcmVuZGVyU3RyaW5naWZ5KHYxKSArIGkxICsgcmVuZGVyU3RyaW5naWZ5KHYyKSArIHN1ZmZpeCA6IE5PX0NIQU5HRTtcbn1cbmZ1bmN0aW9uIGludGVycG9sYXRpb240KGxWaWV3LCBwcmVmaXgsIHYwLCBpMCwgdjEsIGkxLCB2MiwgaTIsIHYzLCBzdWZmaXggPSAnJykge1xuICBjb25zdCBiaW5kaW5nSW5kZXggPSBnZXRCaW5kaW5nSW5kZXgoKTtcbiAgY29uc3QgZGlmZmVyZW50ID0gYmluZGluZ1VwZGF0ZWQ0KGxWaWV3LCBiaW5kaW5nSW5kZXgsIHYwLCB2MSwgdjIsIHYzKTtcbiAgaW5jcmVtZW50QmluZGluZ0luZGV4KDQpO1xuICByZXR1cm4gZGlmZmVyZW50ID8gcHJlZml4ICsgcmVuZGVyU3RyaW5naWZ5KHYwKSArIGkwICsgcmVuZGVyU3RyaW5naWZ5KHYxKSArIGkxICsgcmVuZGVyU3RyaW5naWZ5KHYyKSArIGkyICsgcmVuZGVyU3RyaW5naWZ5KHYzKSArIHN1ZmZpeCA6IE5PX0NIQU5HRTtcbn1cbmZ1bmN0aW9uIGludGVycG9sYXRpb241KGxWaWV3LCBwcmVmaXgsIHYwLCBpMCwgdjEsIGkxLCB2MiwgaTIsIHYzLCBpMywgdjQsIHN1ZmZpeCA9ICcnKSB7XG4gIGNvbnN0IGJpbmRpbmdJbmRleCA9IGdldEJpbmRpbmdJbmRleCgpO1xuICBsZXQgZGlmZmVyZW50ID0gYmluZGluZ1VwZGF0ZWQ0KGxWaWV3LCBiaW5kaW5nSW5kZXgsIHYwLCB2MSwgdjIsIHYzKTtcbiAgZGlmZmVyZW50ID0gYmluZGluZ1VwZGF0ZWQobFZpZXcsIGJpbmRpbmdJbmRleCArIDQsIHY0KSB8fCBkaWZmZXJlbnQ7XG4gIGluY3JlbWVudEJpbmRpbmdJbmRleCg1KTtcbiAgcmV0dXJuIGRpZmZlcmVudCA/IHByZWZpeCArIHJlbmRlclN0cmluZ2lmeSh2MCkgKyBpMCArIHJlbmRlclN0cmluZ2lmeSh2MSkgKyBpMSArIHJlbmRlclN0cmluZ2lmeSh2MikgKyBpMiArIHJlbmRlclN0cmluZ2lmeSh2MykgKyBpMyArIHJlbmRlclN0cmluZ2lmeSh2NCkgKyBzdWZmaXggOiBOT19DSEFOR0U7XG59XG5mdW5jdGlvbiBpbnRlcnBvbGF0aW9uNihsVmlldywgcHJlZml4LCB2MCwgaTAsIHYxLCBpMSwgdjIsIGkyLCB2MywgaTMsIHY0LCBpNCwgdjUsIHN1ZmZpeCA9ICcnKSB7XG4gIGNvbnN0IGJpbmRpbmdJbmRleCA9IGdldEJpbmRpbmdJbmRleCgpO1xuICBsZXQgZGlmZmVyZW50ID0gYmluZGluZ1VwZGF0ZWQ0KGxWaWV3LCBiaW5kaW5nSW5kZXgsIHYwLCB2MSwgdjIsIHYzKTtcbiAgZGlmZmVyZW50ID0gYmluZGluZ1VwZGF0ZWQyKGxWaWV3LCBiaW5kaW5nSW5kZXggKyA0LCB2NCwgdjUpIHx8IGRpZmZlcmVudDtcbiAgaW5jcmVtZW50QmluZGluZ0luZGV4KDYpO1xuICByZXR1cm4gZGlmZmVyZW50ID8gcHJlZml4ICsgcmVuZGVyU3RyaW5naWZ5KHYwKSArIGkwICsgcmVuZGVyU3RyaW5naWZ5KHYxKSArIGkxICsgcmVuZGVyU3RyaW5naWZ5KHYyKSArIGkyICsgcmVuZGVyU3RyaW5naWZ5KHYzKSArIGkzICsgcmVuZGVyU3RyaW5naWZ5KHY0KSArIGk0ICsgcmVuZGVyU3RyaW5naWZ5KHY1KSArIHN1ZmZpeCA6IE5PX0NIQU5HRTtcbn1cbmZ1bmN0aW9uIGludGVycG9sYXRpb243KGxWaWV3LCBwcmVmaXgsIHYwLCBpMCwgdjEsIGkxLCB2MiwgaTIsIHYzLCBpMywgdjQsIGk0LCB2NSwgaTUsIHY2LCBzdWZmaXggPSAnJykge1xuICBjb25zdCBiaW5kaW5nSW5kZXggPSBnZXRCaW5kaW5nSW5kZXgoKTtcbiAgbGV0IGRpZmZlcmVudCA9IGJpbmRpbmdVcGRhdGVkNChsVmlldywgYmluZGluZ0luZGV4LCB2MCwgdjEsIHYyLCB2Myk7XG4gIGRpZmZlcmVudCA9IGJpbmRpbmdVcGRhdGVkMyhsVmlldywgYmluZGluZ0luZGV4ICsgNCwgdjQsIHY1LCB2NikgfHwgZGlmZmVyZW50O1xuICBpbmNyZW1lbnRCaW5kaW5nSW5kZXgoNyk7XG4gIHJldHVybiBkaWZmZXJlbnQgPyBwcmVmaXggKyByZW5kZXJTdHJpbmdpZnkodjApICsgaTAgKyByZW5kZXJTdHJpbmdpZnkodjEpICsgaTEgKyByZW5kZXJTdHJpbmdpZnkodjIpICsgaTIgKyByZW5kZXJTdHJpbmdpZnkodjMpICsgaTMgKyByZW5kZXJTdHJpbmdpZnkodjQpICsgaTQgKyByZW5kZXJTdHJpbmdpZnkodjUpICsgaTUgKyByZW5kZXJTdHJpbmdpZnkodjYpICsgc3VmZml4IDogTk9fQ0hBTkdFO1xufVxuZnVuY3Rpb24gaW50ZXJwb2xhdGlvbjgobFZpZXcsIHByZWZpeCwgdjAsIGkwLCB2MSwgaTEsIHYyLCBpMiwgdjMsIGkzLCB2NCwgaTQsIHY1LCBpNSwgdjYsIGk2LCB2Nywgc3VmZml4ID0gJycpIHtcbiAgY29uc3QgYmluZGluZ0luZGV4ID0gZ2V0QmluZGluZ0luZGV4KCk7XG4gIGxldCBkaWZmZXJlbnQgPSBiaW5kaW5nVXBkYXRlZDQobFZpZXcsIGJpbmRpbmdJbmRleCwgdjAsIHYxLCB2MiwgdjMpO1xuICBkaWZmZXJlbnQgPSBiaW5kaW5nVXBkYXRlZDQobFZpZXcsIGJpbmRpbmdJbmRleCArIDQsIHY0LCB2NSwgdjYsIHY3KSB8fCBkaWZmZXJlbnQ7XG4gIGluY3JlbWVudEJpbmRpbmdJbmRleCg4KTtcbiAgcmV0dXJuIGRpZmZlcmVudCA/IHByZWZpeCArIHJlbmRlclN0cmluZ2lmeSh2MCkgKyBpMCArIHJlbmRlclN0cmluZ2lmeSh2MSkgKyBpMSArIHJlbmRlclN0cmluZ2lmeSh2MikgKyBpMiArIHJlbmRlclN0cmluZ2lmeSh2MykgKyBpMyArIHJlbmRlclN0cmluZ2lmeSh2NCkgKyBpNCArIHJlbmRlclN0cmluZ2lmeSh2NSkgKyBpNSArIHJlbmRlclN0cmluZ2lmeSh2NikgKyBpNiArIHJlbmRlclN0cmluZ2lmeSh2NykgKyBzdWZmaXggOiBOT19DSEFOR0U7XG59XG5mdW5jdGlvbiDJtcm1dGV4dEludGVycG9sYXRlKHYwKSB7XG4gIMm1ybV0ZXh0SW50ZXJwb2xhdGUxKCcnLCB2MCk7XG4gIHJldHVybiDJtcm1dGV4dEludGVycG9sYXRlO1xufVxuZnVuY3Rpb24gybXJtXRleHRJbnRlcnBvbGF0ZTEocHJlZml4LCB2MCwgc3VmZml4KSB7XG4gIGNvbnN0IGxWaWV3ID0gZ2V0TFZpZXcoKTtcbiAgY29uc3QgaW50ZXJwb2xhdGVkID0gaW50ZXJwb2xhdGlvbjEobFZpZXcsIHByZWZpeCwgdjAsIHN1ZmZpeCk7XG4gIGlmIChpbnRlcnBvbGF0ZWQgIT09IE5PX0NIQU5HRSkge1xuICAgIHRleHRCaW5kaW5nSW50ZXJuYWwobFZpZXcsIGdldFNlbGVjdGVkSW5kZXgoKSwgaW50ZXJwb2xhdGVkKTtcbiAgfVxuICByZXR1cm4gybXJtXRleHRJbnRlcnBvbGF0ZTE7XG59XG5mdW5jdGlvbiDJtcm1dGV4dEludGVycG9sYXRlMihwcmVmaXgsIHYwLCBpMCwgdjEsIHN1ZmZpeCkge1xuICBjb25zdCBsVmlldyA9IGdldExWaWV3KCk7XG4gIGNvbnN0IGludGVycG9sYXRlZCA9IGludGVycG9sYXRpb24yKGxWaWV3LCBwcmVmaXgsIHYwLCBpMCwgdjEsIHN1ZmZpeCk7XG4gIGlmIChpbnRlcnBvbGF0ZWQgIT09IE5PX0NIQU5HRSkge1xuICAgIHRleHRCaW5kaW5nSW50ZXJuYWwobFZpZXcsIGdldFNlbGVjdGVkSW5kZXgoKSwgaW50ZXJwb2xhdGVkKTtcbiAgfVxuICByZXR1cm4gybXJtXRleHRJbnRlcnBvbGF0ZTI7XG59XG5mdW5jdGlvbiDJtcm1dGV4dEludGVycG9sYXRlMyhwcmVmaXgsIHYwLCBpMCwgdjEsIGkxLCB2Miwgc3VmZml4KSB7XG4gIGNvbnN0IGxWaWV3ID0gZ2V0TFZpZXcoKTtcbiAgY29uc3QgaW50ZXJwb2xhdGVkID0gaW50ZXJwb2xhdGlvbjMobFZpZXcsIHByZWZpeCwgdjAsIGkwLCB2MSwgaTEsIHYyLCBzdWZmaXgpO1xuICBpZiAoaW50ZXJwb2xhdGVkICE9PSBOT19DSEFOR0UpIHtcbiAgICB0ZXh0QmluZGluZ0ludGVybmFsKGxWaWV3LCBnZXRTZWxlY3RlZEluZGV4KCksIGludGVycG9sYXRlZCk7XG4gIH1cbiAgcmV0dXJuIMm1ybV0ZXh0SW50ZXJwb2xhdGUzO1xufVxuZnVuY3Rpb24gybXJtXRleHRJbnRlcnBvbGF0ZTQocHJlZml4LCB2MCwgaTAsIHYxLCBpMSwgdjIsIGkyLCB2Mywgc3VmZml4KSB7XG4gIGNvbnN0IGxWaWV3ID0gZ2V0TFZpZXcoKTtcbiAgY29uc3QgaW50ZXJwb2xhdGVkID0gaW50ZXJwb2xhdGlvbjQobFZpZXcsIHByZWZpeCwgdjAsIGkwLCB2MSwgaTEsIHYyLCBpMiwgdjMsIHN1ZmZpeCk7XG4gIGlmIChpbnRlcnBvbGF0ZWQgIT09IE5PX0NIQU5HRSkge1xuICAgIHRleHRCaW5kaW5nSW50ZXJuYWwobFZpZXcsIGdldFNlbGVjdGVkSW5kZXgoKSwgaW50ZXJwb2xhdGVkKTtcbiAgfVxuICByZXR1cm4gybXJtXRleHRJbnRlcnBvbGF0ZTQ7XG59XG5mdW5jdGlvbiDJtcm1dGV4dEludGVycG9sYXRlNShwcmVmaXgsIHYwLCBpMCwgdjEsIGkxLCB2MiwgaTIsIHYzLCBpMywgdjQsIHN1ZmZpeCkge1xuICBjb25zdCBsVmlldyA9IGdldExWaWV3KCk7XG4gIGNvbnN0IGludGVycG9sYXRlZCA9IGludGVycG9sYXRpb241KGxWaWV3LCBwcmVmaXgsIHYwLCBpMCwgdjEsIGkxLCB2MiwgaTIsIHYzLCBpMywgdjQsIHN1ZmZpeCk7XG4gIGlmIChpbnRlcnBvbGF0ZWQgIT09IE5PX0NIQU5HRSkge1xuICAgIHRleHRCaW5kaW5nSW50ZXJuYWwobFZpZXcsIGdldFNlbGVjdGVkSW5kZXgoKSwgaW50ZXJwb2xhdGVkKTtcbiAgfVxuICByZXR1cm4gybXJtXRleHRJbnRlcnBvbGF0ZTU7XG59XG5mdW5jdGlvbiDJtcm1dGV4dEludGVycG9sYXRlNihwcmVmaXgsIHYwLCBpMCwgdjEsIGkxLCB2MiwgaTIsIHYzLCBpMywgdjQsIGk0LCB2NSwgc3VmZml4KSB7XG4gIGNvbnN0IGxWaWV3ID0gZ2V0TFZpZXcoKTtcbiAgY29uc3QgaW50ZXJwb2xhdGVkID0gaW50ZXJwb2xhdGlvbjYobFZpZXcsIHByZWZpeCwgdjAsIGkwLCB2MSwgaTEsIHYyLCBpMiwgdjMsIGkzLCB2NCwgaTQsIHY1LCBzdWZmaXgpO1xuICBpZiAoaW50ZXJwb2xhdGVkICE9PSBOT19DSEFOR0UpIHtcbiAgICB0ZXh0QmluZGluZ0ludGVybmFsKGxWaWV3LCBnZXRTZWxlY3RlZEluZGV4KCksIGludGVycG9sYXRlZCk7XG4gIH1cbiAgcmV0dXJuIMm1ybV0ZXh0SW50ZXJwb2xhdGU2O1xufVxuZnVuY3Rpb24gybXJtXRleHRJbnRlcnBvbGF0ZTcocHJlZml4LCB2MCwgaTAsIHYxLCBpMSwgdjIsIGkyLCB2MywgaTMsIHY0LCBpNCwgdjUsIGk1LCB2Niwgc3VmZml4KSB7XG4gIGNvbnN0IGxWaWV3ID0gZ2V0TFZpZXcoKTtcbiAgY29uc3QgaW50ZXJwb2xhdGVkID0gaW50ZXJwb2xhdGlvbjcobFZpZXcsIHByZWZpeCwgdjAsIGkwLCB2MSwgaTEsIHYyLCBpMiwgdjMsIGkzLCB2NCwgaTQsIHY1LCBpNSwgdjYsIHN1ZmZpeCk7XG4gIGlmIChpbnRlcnBvbGF0ZWQgIT09IE5PX0NIQU5HRSkge1xuICAgIHRleHRCaW5kaW5nSW50ZXJuYWwobFZpZXcsIGdldFNlbGVjdGVkSW5kZXgoKSwgaW50ZXJwb2xhdGVkKTtcbiAgfVxuICByZXR1cm4gybXJtXRleHRJbnRlcnBvbGF0ZTc7XG59XG5mdW5jdGlvbiDJtcm1dGV4dEludGVycG9sYXRlOChwcmVmaXgsIHYwLCBpMCwgdjEsIGkxLCB2MiwgaTIsIHYzLCBpMywgdjQsIGk0LCB2NSwgaTUsIHY2LCBpNiwgdjcsIHN1ZmZpeCkge1xuICBjb25zdCBsVmlldyA9IGdldExWaWV3KCk7XG4gIGNvbnN0IGludGVycG9sYXRlZCA9IGludGVycG9sYXRpb244KGxWaWV3LCBwcmVmaXgsIHYwLCBpMCwgdjEsIGkxLCB2MiwgaTIsIHYzLCBpMywgdjQsIGk0LCB2NSwgaTUsIHY2LCBpNiwgdjcsIHN1ZmZpeCk7XG4gIGlmIChpbnRlcnBvbGF0ZWQgIT09IE5PX0NIQU5HRSkge1xuICAgIHRleHRCaW5kaW5nSW50ZXJuYWwobFZpZXcsIGdldFNlbGVjdGVkSW5kZXgoKSwgaW50ZXJwb2xhdGVkKTtcbiAgfVxuICByZXR1cm4gybXJtXRleHRJbnRlcnBvbGF0ZTg7XG59XG5mdW5jdGlvbiDJtcm1dGV4dEludGVycG9sYXRlVih2YWx1ZXMpIHtcbiAgY29uc3QgbFZpZXcgPSBnZXRMVmlldygpO1xuICBjb25zdCBpbnRlcnBvbGF0ZWQgPSBpbnRlcnBvbGF0aW9uVihsVmlldywgdmFsdWVzKTtcbiAgaWYgKGludGVycG9sYXRlZCAhPT0gTk9fQ0hBTkdFKSB7XG4gICAgdGV4dEJpbmRpbmdJbnRlcm5hbChsVmlldywgZ2V0U2VsZWN0ZWRJbmRleCgpLCBpbnRlcnBvbGF0ZWQpO1xuICB9XG4gIHJldHVybiDJtcm1dGV4dEludGVycG9sYXRlVjtcbn1cbmZ1bmN0aW9uIHRleHRCaW5kaW5nSW50ZXJuYWwobFZpZXcsIGluZGV4LCB2YWx1ZSkge1xuICBuZ0Rldk1vZGUgJiYgYXNzZXJ0U3RyaW5nKHZhbHVlLCAnVmFsdWUgc2hvdWxkIGJlIGEgc3RyaW5nJyk7XG4gIG5nRGV2TW9kZSAmJiBhc3NlcnROb3RTYW1lKHZhbHVlLCBOT19DSEFOR0UsICd2YWx1ZSBzaG91bGQgbm90IGJlIE5PX0NIQU5HRScpO1xuICBuZ0Rldk1vZGUgJiYgYXNzZXJ0SW5kZXhJblJhbmdlKGxWaWV3LCBpbmRleCk7XG4gIGNvbnN0IGVsZW1lbnQgPSBnZXROYXRpdmVCeUluZGV4KGluZGV4LCBsVmlldyk7XG4gIG5nRGV2TW9kZSAmJiBhc3NlcnREZWZpbmVkKGVsZW1lbnQsICduYXRpdmUgZWxlbWVudCBzaG91bGQgZXhpc3QnKTtcbiAgdXBkYXRlVGV4dE5vZGUobFZpZXdbUkVOREVSRVJdLCBlbGVtZW50LCB2YWx1ZSk7XG59XG5mdW5jdGlvbiDJtcm1dHdvV2F5UHJvcGVydHkocHJvcE5hbWUsIHZhbHVlLCBzYW5pdGl6ZXIpIHtcbiAgaWYgKGlzV3JpdGFibGVTaWduYWwodmFsdWUpKSB7XG4gICAgdmFsdWUgPSB2YWx1ZSgpO1xuICB9XG4gIGNvbnN0IGxWaWV3ID0gZ2V0TFZpZXcoKTtcbiAgY29uc3QgYmluZGluZ0luZGV4ID0gbmV4dEJpbmRpbmdJbmRleCgpO1xuICBpZiAoYmluZGluZ1VwZGF0ZWQobFZpZXcsIGJpbmRpbmdJbmRleCwgdmFsdWUpKSB7XG4gICAgY29uc3QgdFZpZXcgPSBnZXRUVmlldygpO1xuICAgIGNvbnN0IHROb2RlID0gZ2V0U2VsZWN0ZWRUTm9kZSgpO1xuICAgIHNldFByb3BlcnR5QW5kSW5wdXRzKHROb2RlLCBsVmlldywgcHJvcE5hbWUsIHZhbHVlLCBsVmlld1tSRU5ERVJFUl0sIHNhbml0aXplcik7XG4gICAgbmdEZXZNb2RlICYmIHN0b3JlUHJvcGVydHlCaW5kaW5nTWV0YWRhdGEodFZpZXcuZGF0YSwgdE5vZGUsIHByb3BOYW1lLCBiaW5kaW5nSW5kZXgpO1xuICB9XG4gIHJldHVybiDJtcm1dHdvV2F5UHJvcGVydHk7XG59XG5mdW5jdGlvbiDJtcm1dHdvV2F5QmluZGluZ1NldCh0YXJnZXQsIHZhbHVlKSB7XG4gIGNvbnN0IGNhbldyaXRlID0gaXNXcml0YWJsZVNpZ25hbCh0YXJnZXQpO1xuICBjYW5Xcml0ZSAmJiB0YXJnZXQuc2V0KHZhbHVlKTtcbiAgcmV0dXJuIGNhbldyaXRlO1xufVxuZnVuY3Rpb24gybXJtXR3b1dheUxpc3RlbmVyKGV2ZW50TmFtZSwgbGlzdGVuZXJGbikge1xuICBjb25zdCBsVmlldyA9IGdldExWaWV3KCk7XG4gIGNvbnN0IHRWaWV3ID0gZ2V0VFZpZXcoKTtcbiAgY29uc3QgdE5vZGUgPSBnZXRDdXJyZW50VE5vZGUoKTtcbiAgbGlzdGVuZXJJbnRlcm5hbCh0VmlldywgbFZpZXcsIGxWaWV3W1JFTkRFUkVSXSwgdE5vZGUsIGV2ZW50TmFtZSwgbGlzdGVuZXJGbik7XG4gIHJldHVybiDJtcm1dHdvV2F5TGlzdGVuZXI7XG59XG5jb25zdCBVTklOSVRJQUxJWkVEX0xFVCA9IHt9O1xuZnVuY3Rpb24gybXJtWRlY2xhcmVMZXQoaW5kZXgpIHtcbiAgcGVyZm9ybWFuY2VNYXJrRmVhdHVyZSgnTmdMZXQnKTtcbiAgY29uc3QgdFZpZXcgPSBnZXRUVmlldygpO1xuICBjb25zdCBsVmlldyA9IGdldExWaWV3KCk7XG4gIGNvbnN0IGFkanVzdGVkSW5kZXggPSBpbmRleCArIEhFQURFUl9PRkZTRVQ7XG4gIGNvbnN0IHROb2RlID0gZ2V0T3JDcmVhdGVUTm9kZSh0VmlldywgYWRqdXN0ZWRJbmRleCwgMTI4LCBudWxsLCBudWxsKTtcbiAgc2V0Q3VycmVudFROb2RlKHROb2RlLCBmYWxzZSk7XG4gIHN0b3JlKHRWaWV3LCBsVmlldywgYWRqdXN0ZWRJbmRleCwgVU5JTklUSUFMSVpFRF9MRVQpO1xuICByZXR1cm4gybXJtWRlY2xhcmVMZXQ7XG59XG5mdW5jdGlvbiDJtcm1c3RvcmVMZXQodmFsdWUpIHtcbiAgY29uc3QgdFZpZXcgPSBnZXRUVmlldygpO1xuICBjb25zdCBsVmlldyA9IGdldExWaWV3KCk7XG4gIGNvbnN0IGluZGV4ID0gZ2V0U2VsZWN0ZWRJbmRleCgpO1xuICBzdG9yZSh0VmlldywgbFZpZXcsIGluZGV4LCB2YWx1ZSk7XG4gIHJldHVybiB2YWx1ZTtcbn1cbmZ1bmN0aW9uIMm1ybVyZWFkQ29udGV4dExldChpbmRleCkge1xuICBjb25zdCBjb250ZXh0TFZpZXcgPSBnZXRDb250ZXh0TFZpZXcoKTtcbiAgY29uc3QgdmFsdWUgPSBsb2FkKGNvbnRleHRMVmlldywgSEVBREVSX09GRlNFVCArIGluZGV4KTtcbiAgaWYgKHZhbHVlID09PSBVTklOSVRJQUxJWkVEX0xFVCkge1xuICAgIHRocm93IG5ldyBSdW50aW1lRXJyb3IoMzE0LCBuZ0Rldk1vZGUgJiYgJ0F0dGVtcHRpbmcgdG8gYWNjZXNzIGEgQGxldCBkZWNsYXJhdGlvbiB3aG9zZSB2YWx1ZSBpcyBub3QgYXZhaWxhYmxlIHlldCcpO1xuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cbmZ1bmN0aW9uIMm1ybVhdHRhY2hTb3VyY2VMb2NhdGlvbnModGVtcGxhdGVQYXRoLCBsb2NhdGlvbnMpIHtcbiAgY29uc3QgdFZpZXcgPSBnZXRUVmlldygpO1xuICBjb25zdCBsVmlldyA9IGdldExWaWV3KCk7XG4gIGNvbnN0IHJlbmRlcmVyID0gbFZpZXdbUkVOREVSRVJdO1xuICBjb25zdCBhdHRyaWJ1dGVOYW1lID0gJ2RhdGEtbmctc291cmNlLWxvY2F0aW9uJztcbiAgZm9yIChjb25zdCBbaW5kZXgsIG9mZnNldCwgbGluZSwgY29sdW1uXSBvZiBsb2NhdGlvbnMpIHtcbiAgICBjb25zdCB0Tm9kZSA9IGdldFROb2RlKHRWaWV3LCBpbmRleCArIEhFQURFUl9PRkZTRVQpO1xuICAgIG5nRGV2TW9kZSAmJiBhc3NlcnRUTm9kZVR5cGUodE5vZGUsIDIpO1xuICAgIGNvbnN0IG5vZGUgPSBnZXROYXRpdmVCeUluZGV4KGluZGV4ICsgSEVBREVSX09GRlNFVCwgbFZpZXcpO1xuICAgIGlmICghbm9kZS5oYXNBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSkpIHtcbiAgICAgIGNvbnN0IGF0dHJpYnV0ZVZhbHVlID0gYCR7dGVtcGxhdGVQYXRofUBvOiR7b2Zmc2V0fSxsOiR7bGluZX0sYzoke2NvbHVtbn1gO1xuICAgICAgcmVuZGVyZXIuc2V0QXR0cmlidXRlKG5vZGUsIGF0dHJpYnV0ZU5hbWUsIGF0dHJpYnV0ZVZhbHVlKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIMm1ybVpbnRlcnBvbGF0ZSh2MCkge1xuICByZXR1cm4gYmluZGluZ1VwZGF0ZWQoZ2V0TFZpZXcoKSwgbmV4dEJpbmRpbmdJbmRleCgpLCB2MCkgPyByZW5kZXJTdHJpbmdpZnkodjApIDogTk9fQ0hBTkdFO1xufVxuZnVuY3Rpb24gybXJtWludGVycG9sYXRlMShwcmVmaXgsIHYwLCBzdWZmaXggPSAnJykge1xuICByZXR1cm4gaW50ZXJwb2xhdGlvbjEoZ2V0TFZpZXcoKSwgcHJlZml4LCB2MCwgc3VmZml4KTtcbn1cbmZ1bmN0aW9uIMm1ybVpbnRlcnBvbGF0ZTIocHJlZml4LCB2MCwgaTAsIHYxLCBzdWZmaXggPSAnJykge1xuICByZXR1cm4gaW50ZXJwb2xhdGlvbjIoZ2V0TFZpZXcoKSwgcHJlZml4LCB2MCwgaTAsIHYxLCBzdWZmaXgpO1xufVxuZnVuY3Rpb24gybXJtWludGVycG9sYXRlMyhwcmVmaXgsIHYwLCBpMCwgdjEsIGkxLCB2Miwgc3VmZml4ID0gJycpIHtcbiAgcmV0dXJuIGludGVycG9sYXRpb24zKGdldExWaWV3KCksIHByZWZpeCwgdjAsIGkwLCB2MSwgaTEsIHYyLCBzdWZmaXgpO1xufVxuZnVuY3Rpb24gybXJtWludGVycG9sYXRlNChwcmVmaXgsIHYwLCBpMCwgdjEsIGkxLCB2MiwgaTIsIHYzLCBzdWZmaXggPSAnJykge1xuICByZXR1cm4gaW50ZXJwb2xhdGlvbjQoZ2V0TFZpZXcoKSwgcHJlZml4LCB2MCwgaTAsIHYxLCBpMSwgdjIsIGkyLCB2Mywgc3VmZml4KTtcbn1cbmZ1bmN0aW9uIMm1ybVpbnRlcnBvbGF0ZTUocHJlZml4LCB2MCwgaTAsIHYxLCBpMSwgdjIsIGkyLCB2MywgaTMsIHY0LCBzdWZmaXggPSAnJykge1xuICByZXR1cm4gaW50ZXJwb2xhdGlvbjUoZ2V0TFZpZXcoKSwgcHJlZml4LCB2MCwgaTAsIHYxLCBpMSwgdjIsIGkyLCB2MywgaTMsIHY0LCBzdWZmaXgpO1xufVxuZnVuY3Rpb24gybXJtWludGVycG9sYXRlNihwcmVmaXgsIHYwLCBpMCwgdjEsIGkxLCB2MiwgaTIsIHYzLCBpMywgdjQsIGk0LCB2NSwgc3VmZml4ID0gJycpIHtcbiAgcmV0dXJuIGludGVycG9sYXRpb242KGdldExWaWV3KCksIHByZWZpeCwgdjAsIGkwLCB2MSwgaTEsIHYyLCBpMiwgdjMsIGkzLCB2NCwgaTQsIHY1LCBzdWZmaXgpO1xufVxuZnVuY3Rpb24gybXJtWludGVycG9sYXRlNyhwcmVmaXgsIHYwLCBpMCwgdjEsIGkxLCB2MiwgaTIsIHYzLCBpMywgdjQsIGk0LCB2NSwgaTUsIHY2LCBzdWZmaXggPSAnJykge1xuICByZXR1cm4gaW50ZXJwb2xhdGlvbjcoZ2V0TFZpZXcoKSwgcHJlZml4LCB2MCwgaTAsIHYxLCBpMSwgdjIsIGkyLCB2MywgaTMsIHY0LCBpNCwgdjUsIGk1LCB2Niwgc3VmZml4KTtcbn1cbmZ1bmN0aW9uIMm1ybVpbnRlcnBvbGF0ZTgocHJlZml4LCB2MCwgaTAsIHYxLCBpMSwgdjIsIGkyLCB2MywgaTMsIHY0LCBpNCwgdjUsIGk1LCB2NiwgaTYsIHY3LCBzdWZmaXggPSAnJykge1xuICByZXR1cm4gaW50ZXJwb2xhdGlvbjgoZ2V0TFZpZXcoKSwgcHJlZml4LCB2MCwgaTAsIHYxLCBpMSwgdjIsIGkyLCB2MywgaTMsIHY0LCBpNCwgdjUsIGk1LCB2NiwgaTYsIHY3LCBzdWZmaXgpO1xufVxuZnVuY3Rpb24gybXJtWludGVycG9sYXRlVih2YWx1ZXMpIHtcbiAgcmV0dXJuIGludGVycG9sYXRpb25WKGdldExWaWV3KCksIHZhbHVlcyk7XG59XG5mdW5jdGlvbiDJtcm1YXJyb3dGdW5jdGlvbihzbG90T2Zmc2V0LCBmYWN0b3J5LCBjb250ZXh0KSB7XG4gIGNvbnN0IGJpbmRpbmdJbmRleCA9IGdldEJpbmRpbmdSb290KCkgKyBzbG90T2Zmc2V0O1xuICBjb25zdCBsVmlldyA9IGdldExWaWV3KCk7XG4gIHJldHVybiBsVmlld1tiaW5kaW5nSW5kZXhdID09PSBOT19DSEFOR0UgPyB1cGRhdGVCaW5kaW5nKGxWaWV3LCBiaW5kaW5nSW5kZXgsIGZhY3RvcnkoY29udGV4dCwgbFZpZXcpKSA6IGdldEJpbmRpbmcobFZpZXcsIGJpbmRpbmdJbmRleCk7XG59XG5mdW5jdGlvbiBwcm92aWRlcnNSZXNvbHZlcihkZWYsIHByb3ZpZGVycywgaXNWaWV3UHJvdmlkZXJzKSB7XG4gIGNvbnN0IHRWaWV3ID0gZ2V0VFZpZXcoKTtcbiAgaWYgKHRWaWV3LmZpcnN0Q3JlYXRlUGFzcykge1xuICAgIHJlc29sdmVQcm92aWRlcihwcm92aWRlcnMsIHRWaWV3LmRhdGEsIHRWaWV3LmJsdWVwcmludCwgaXNDb21wb25lbnREZWYoZGVmKSwgaXNWaWV3UHJvdmlkZXJzKTtcbiAgfVxufVxuZnVuY3Rpb24gcmVzb2x2ZVByb3ZpZGVyKHByb3ZpZGVyLCB0SW5qZWN0YWJsZXMsIGxJbmplY3RhYmxlc0JsdWVwcmludCwgaXNDb21wb25lbnQsIGlzVmlld1Byb3ZpZGVyKSB7XG4gIHByb3ZpZGVyID0gcmVzb2x2ZUZvcndhcmRSZWYocHJvdmlkZXIpO1xuICBpZiAoQXJyYXkuaXNBcnJheShwcm92aWRlcikpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHByb3ZpZGVyLmxlbmd0aDsgaSsrKSB7XG4gICAgICByZXNvbHZlUHJvdmlkZXIocHJvdmlkZXJbaV0sIHRJbmplY3RhYmxlcywgbEluamVjdGFibGVzQmx1ZXByaW50LCBpc0NvbXBvbmVudCwgaXNWaWV3UHJvdmlkZXIpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBjb25zdCB0VmlldyA9IGdldFRWaWV3KCk7XG4gICAgY29uc3QgbFZpZXcgPSBnZXRMVmlldygpO1xuICAgIGNvbnN0IHROb2RlID0gZ2V0Q3VycmVudFROb2RlKCk7XG4gICAgbGV0IHRva2VuID0gaXNUeXBlUHJvdmlkZXIocHJvdmlkZXIpID8gcHJvdmlkZXIgOiByZXNvbHZlRm9yd2FyZFJlZihwcm92aWRlci5wcm92aWRlKTtcbiAgICBjb25zdCBwcm92aWRlckZhY3RvcnkgPSBwcm92aWRlclRvRmFjdG9yeShwcm92aWRlcik7XG4gICAgaWYgKG5nRGV2TW9kZSkge1xuICAgICAgY29uc3QgaW5qZWN0b3IgPSBuZXcgTm9kZUluamVjdG9yKHROb2RlLCBsVmlldyk7XG4gICAgICBydW5JbkluamVjdG9yUHJvZmlsZXJDb250ZXh0KGluamVjdG9yLCB0b2tlbiwgKCkgPT4ge1xuICAgICAgICBlbWl0UHJvdmlkZXJDb25maWd1cmVkRXZlbnQocHJvdmlkZXIsIGlzVmlld1Byb3ZpZGVyKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBjb25zdCBiZWdpbkluZGV4ID0gdE5vZGUucHJvdmlkZXJJbmRleGVzICYgMTA0ODU3NTtcbiAgICBjb25zdCBlbmRJbmRleCA9IHROb2RlLmRpcmVjdGl2ZVN0YXJ0O1xuICAgIGNvbnN0IGNwdFZpZXdQcm92aWRlcnNDb3VudCA9IHROb2RlLnByb3ZpZGVySW5kZXhlcyA+PiAyMDtcbiAgICBpZiAoaXNUeXBlUHJvdmlkZXIocHJvdmlkZXIpIHx8ICFwcm92aWRlci5tdWx0aSkge1xuICAgICAgY29uc3QgZmFjdG9yeSA9IG5ldyBOb2RlSW5qZWN0b3JGYWN0b3J5KHByb3ZpZGVyRmFjdG9yeSwgaXNWaWV3UHJvdmlkZXIsIMm1ybVkaXJlY3RpdmVJbmplY3QsIG5nRGV2TW9kZSA/IHByb3ZpZGVyTmFtZShwcm92aWRlcikgOiBudWxsKTtcbiAgICAgIGNvbnN0IGV4aXN0aW5nRmFjdG9yeUluZGV4ID0gaW5kZXhPZih0b2tlbiwgdEluamVjdGFibGVzLCBpc1ZpZXdQcm92aWRlciA/IGJlZ2luSW5kZXggOiBiZWdpbkluZGV4ICsgY3B0Vmlld1Byb3ZpZGVyc0NvdW50LCBlbmRJbmRleCk7XG4gICAgICBpZiAoZXhpc3RpbmdGYWN0b3J5SW5kZXggPT09IC0xKSB7XG4gICAgICAgIGRpUHVibGljSW5JbmplY3RvcihnZXRPckNyZWF0ZU5vZGVJbmplY3RvckZvck5vZGUodE5vZGUsIGxWaWV3KSwgdFZpZXcsIHRva2VuKTtcbiAgICAgICAgcmVnaXN0ZXJEZXN0cm95SG9va3NJZlN1cHBvcnRlZCh0VmlldywgcHJvdmlkZXIsIHRJbmplY3RhYmxlcy5sZW5ndGgpO1xuICAgICAgICB0SW5qZWN0YWJsZXMucHVzaCh0b2tlbik7XG4gICAgICAgIHROb2RlLmRpcmVjdGl2ZVN0YXJ0Kys7XG4gICAgICAgIHROb2RlLmRpcmVjdGl2ZUVuZCsrO1xuICAgICAgICBpZiAoaXNWaWV3UHJvdmlkZXIpIHtcbiAgICAgICAgICB0Tm9kZS5wcm92aWRlckluZGV4ZXMgKz0gMTA0ODU3NjtcbiAgICAgICAgfVxuICAgICAgICBsSW5qZWN0YWJsZXNCbHVlcHJpbnQucHVzaChmYWN0b3J5KTtcbiAgICAgICAgbFZpZXcucHVzaChmYWN0b3J5KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxJbmplY3RhYmxlc0JsdWVwcmludFtleGlzdGluZ0ZhY3RvcnlJbmRleF0gPSBmYWN0b3J5O1xuICAgICAgICBsVmlld1tleGlzdGluZ0ZhY3RvcnlJbmRleF0gPSBmYWN0b3J5O1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBleGlzdGluZ1Byb3ZpZGVyc0ZhY3RvcnlJbmRleCA9IGluZGV4T2YodG9rZW4sIHRJbmplY3RhYmxlcywgYmVnaW5JbmRleCArIGNwdFZpZXdQcm92aWRlcnNDb3VudCwgZW5kSW5kZXgpO1xuICAgICAgY29uc3QgZXhpc3RpbmdWaWV3UHJvdmlkZXJzRmFjdG9yeUluZGV4ID0gaW5kZXhPZih0b2tlbiwgdEluamVjdGFibGVzLCBiZWdpbkluZGV4LCBiZWdpbkluZGV4ICsgY3B0Vmlld1Byb3ZpZGVyc0NvdW50KTtcbiAgICAgIGNvbnN0IGRvZXNQcm92aWRlcnNGYWN0b3J5RXhpc3QgPSBleGlzdGluZ1Byb3ZpZGVyc0ZhY3RvcnlJbmRleCA+PSAwICYmIGxJbmplY3RhYmxlc0JsdWVwcmludFtleGlzdGluZ1Byb3ZpZGVyc0ZhY3RvcnlJbmRleF07XG4gICAgICBjb25zdCBkb2VzVmlld1Byb3ZpZGVyc0ZhY3RvcnlFeGlzdCA9IGV4aXN0aW5nVmlld1Byb3ZpZGVyc0ZhY3RvcnlJbmRleCA+PSAwICYmIGxJbmplY3RhYmxlc0JsdWVwcmludFtleGlzdGluZ1ZpZXdQcm92aWRlcnNGYWN0b3J5SW5kZXhdO1xuICAgICAgaWYgKGlzVmlld1Byb3ZpZGVyICYmICFkb2VzVmlld1Byb3ZpZGVyc0ZhY3RvcnlFeGlzdCB8fCAhaXNWaWV3UHJvdmlkZXIgJiYgIWRvZXNQcm92aWRlcnNGYWN0b3J5RXhpc3QpIHtcbiAgICAgICAgZGlQdWJsaWNJbkluamVjdG9yKGdldE9yQ3JlYXRlTm9kZUluamVjdG9yRm9yTm9kZSh0Tm9kZSwgbFZpZXcpLCB0VmlldywgdG9rZW4pO1xuICAgICAgICBjb25zdCBmYWN0b3J5ID0gbXVsdGlGYWN0b3J5KGlzVmlld1Byb3ZpZGVyID8gbXVsdGlWaWV3UHJvdmlkZXJzRmFjdG9yeVJlc29sdmVyIDogbXVsdGlQcm92aWRlcnNGYWN0b3J5UmVzb2x2ZXIsIGxJbmplY3RhYmxlc0JsdWVwcmludC5sZW5ndGgsIGlzVmlld1Byb3ZpZGVyLCBpc0NvbXBvbmVudCwgcHJvdmlkZXJGYWN0b3J5LCBwcm92aWRlcik7XG4gICAgICAgIGlmICghaXNWaWV3UHJvdmlkZXIgJiYgZG9lc1ZpZXdQcm92aWRlcnNGYWN0b3J5RXhpc3QpIHtcbiAgICAgICAgICBsSW5qZWN0YWJsZXNCbHVlcHJpbnRbZXhpc3RpbmdWaWV3UHJvdmlkZXJzRmFjdG9yeUluZGV4XS5wcm92aWRlckZhY3RvcnkgPSBmYWN0b3J5O1xuICAgICAgICB9XG4gICAgICAgIHJlZ2lzdGVyRGVzdHJveUhvb2tzSWZTdXBwb3J0ZWQodFZpZXcsIHByb3ZpZGVyLCB0SW5qZWN0YWJsZXMubGVuZ3RoLCAwKTtcbiAgICAgICAgdEluamVjdGFibGVzLnB1c2godG9rZW4pO1xuICAgICAgICB0Tm9kZS5kaXJlY3RpdmVTdGFydCsrO1xuICAgICAgICB0Tm9kZS5kaXJlY3RpdmVFbmQrKztcbiAgICAgICAgaWYgKGlzVmlld1Byb3ZpZGVyKSB7XG4gICAgICAgICAgdE5vZGUucHJvdmlkZXJJbmRleGVzICs9IDEwNDg1NzY7XG4gICAgICAgIH1cbiAgICAgICAgbEluamVjdGFibGVzQmx1ZXByaW50LnB1c2goZmFjdG9yeSk7XG4gICAgICAgIGxWaWV3LnB1c2goZmFjdG9yeSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBpbmRleEluRmFjdG9yeSA9IG11bHRpRmFjdG9yeUFkZChsSW5qZWN0YWJsZXNCbHVlcHJpbnRbaXNWaWV3UHJvdmlkZXIgPyBleGlzdGluZ1ZpZXdQcm92aWRlcnNGYWN0b3J5SW5kZXggOiBleGlzdGluZ1Byb3ZpZGVyc0ZhY3RvcnlJbmRleF0sIHByb3ZpZGVyRmFjdG9yeSwgIWlzVmlld1Byb3ZpZGVyICYmIGlzQ29tcG9uZW50KTtcbiAgICAgICAgcmVnaXN0ZXJEZXN0cm95SG9va3NJZlN1cHBvcnRlZCh0VmlldywgcHJvdmlkZXIsIGV4aXN0aW5nUHJvdmlkZXJzRmFjdG9yeUluZGV4ID4gLTEgPyBleGlzdGluZ1Byb3ZpZGVyc0ZhY3RvcnlJbmRleCA6IGV4aXN0aW5nVmlld1Byb3ZpZGVyc0ZhY3RvcnlJbmRleCwgaW5kZXhJbkZhY3RvcnkpO1xuICAgICAgfVxuICAgICAgaWYgKCFpc1ZpZXdQcm92aWRlciAmJiBpc0NvbXBvbmVudCAmJiBkb2VzVmlld1Byb3ZpZGVyc0ZhY3RvcnlFeGlzdCkge1xuICAgICAgICBsSW5qZWN0YWJsZXNCbHVlcHJpbnRbZXhpc3RpbmdWaWV3UHJvdmlkZXJzRmFjdG9yeUluZGV4XS5jb21wb25lbnRQcm92aWRlcnMrKztcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIHJlZ2lzdGVyRGVzdHJveUhvb2tzSWZTdXBwb3J0ZWQodFZpZXcsIHByb3ZpZGVyLCBjb250ZXh0SW5kZXgsIGluZGV4SW5GYWN0b3J5KSB7XG4gIGNvbnN0IHByb3ZpZGVySXNUeXBlUHJvdmlkZXIgPSBpc1R5cGVQcm92aWRlcihwcm92aWRlcik7XG4gIGNvbnN0IHByb3ZpZGVySXNDbGFzc1Byb3ZpZGVyID0gaXNDbGFzc1Byb3ZpZGVyKHByb3ZpZGVyKTtcbiAgaWYgKHByb3ZpZGVySXNUeXBlUHJvdmlkZXIgfHwgcHJvdmlkZXJJc0NsYXNzUHJvdmlkZXIpIHtcbiAgICBjb25zdCBjbGFzc1Rva2VuID0gcHJvdmlkZXJJc0NsYXNzUHJvdmlkZXIgPyByZXNvbHZlRm9yd2FyZFJlZihwcm92aWRlci51c2VDbGFzcykgOiBwcm92aWRlcjtcbiAgICBjb25zdCBwcm90b3R5cGUgPSBjbGFzc1Rva2VuLnByb3RvdHlwZTtcbiAgICBjb25zdCBuZ09uRGVzdHJveSA9IHByb3RvdHlwZS5uZ09uRGVzdHJveTtcbiAgICBpZiAobmdPbkRlc3Ryb3kpIHtcbiAgICAgIGNvbnN0IGhvb2tzID0gdFZpZXcuZGVzdHJveUhvb2tzIHx8ICh0Vmlldy5kZXN0cm95SG9va3MgPSBbXSk7XG4gICAgICBpZiAoIXByb3ZpZGVySXNUeXBlUHJvdmlkZXIgJiYgcHJvdmlkZXIubXVsdGkpIHtcbiAgICAgICAgbmdEZXZNb2RlICYmIGFzc2VydERlZmluZWQoaW5kZXhJbkZhY3RvcnksICdpbmRleEluRmFjdG9yeSB3aGVuIHJlZ2lzdGVyaW5nIG11bHRpIGZhY3RvcnkgZGVzdHJveSBob29rJyk7XG4gICAgICAgIGNvbnN0IGV4aXN0aW5nQ2FsbGJhY2tzSW5kZXggPSBob29rcy5pbmRleE9mKGNvbnRleHRJbmRleCk7XG4gICAgICAgIGlmIChleGlzdGluZ0NhbGxiYWNrc0luZGV4ID09PSAtMSkge1xuICAgICAgICAgIGhvb2tzLnB1c2goY29udGV4dEluZGV4LCBbaW5kZXhJbkZhY3RvcnksIG5nT25EZXN0cm95XSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaG9va3NbZXhpc3RpbmdDYWxsYmFja3NJbmRleCArIDFdLnB1c2goaW5kZXhJbkZhY3RvcnksIG5nT25EZXN0cm95KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaG9va3MucHVzaChjb250ZXh0SW5kZXgsIG5nT25EZXN0cm95KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIG11bHRpRmFjdG9yeUFkZChtdWx0aUZhY3RvcnksIGZhY3RvcnksIGlzQ29tcG9uZW50UHJvdmlkZXIpIHtcbiAgaWYgKGlzQ29tcG9uZW50UHJvdmlkZXIpIHtcbiAgICBtdWx0aUZhY3RvcnkuY29tcG9uZW50UHJvdmlkZXJzKys7XG4gIH1cbiAgcmV0dXJuIG11bHRpRmFjdG9yeS5tdWx0aS5wdXNoKGZhY3RvcnkpIC0gMTtcbn1cbmZ1bmN0aW9uIGluZGV4T2YoaXRlbSwgYXJyLCBiZWdpbiwgZW5kKSB7XG4gIGZvciAobGV0IGkgPSBiZWdpbjsgaSA8IGVuZDsgaSsrKSB7XG4gICAgaWYgKGFycltpXSA9PT0gaXRlbSkgcmV0dXJuIGk7XG4gIH1cbiAgcmV0dXJuIC0xO1xufVxuZnVuY3Rpb24gbXVsdGlQcm92aWRlcnNGYWN0b3J5UmVzb2x2ZXIoXywgZmxhZ3MsIHREYXRhLCBsRGF0YSwgdE5vZGUpIHtcbiAgcmV0dXJuIG11bHRpUmVzb2x2ZSh0aGlzLm11bHRpLCBbXSk7XG59XG5mdW5jdGlvbiBtdWx0aVZpZXdQcm92aWRlcnNGYWN0b3J5UmVzb2x2ZXIoXywgX2ZsYWdzLCBfdERhdGEsIGxWaWV3LCB0Tm9kZSkge1xuICBjb25zdCBmYWN0b3JpZXMgPSB0aGlzLm11bHRpO1xuICBsZXQgcmVzdWx0O1xuICBpZiAodGhpcy5wcm92aWRlckZhY3RvcnkpIHtcbiAgICBjb25zdCBjb21wb25lbnRDb3VudCA9IHRoaXMucHJvdmlkZXJGYWN0b3J5LmNvbXBvbmVudFByb3ZpZGVycztcbiAgICBjb25zdCBtdWx0aVByb3ZpZGVycyA9IGdldE5vZGVJbmplY3RhYmxlKGxWaWV3LCBsVmlld1tUVklFV10sIHRoaXMucHJvdmlkZXJGYWN0b3J5LmluZGV4LCB0Tm9kZSk7XG4gICAgcmVzdWx0ID0gbXVsdGlQcm92aWRlcnMuc2xpY2UoMCwgY29tcG9uZW50Q291bnQpO1xuICAgIG11bHRpUmVzb2x2ZShmYWN0b3JpZXMsIHJlc3VsdCk7XG4gICAgZm9yIChsZXQgaSA9IGNvbXBvbmVudENvdW50OyBpIDwgbXVsdGlQcm92aWRlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHJlc3VsdC5wdXNoKG11bHRpUHJvdmlkZXJzW2ldKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0ID0gW107XG4gICAgbXVsdGlSZXNvbHZlKGZhY3RvcmllcywgcmVzdWx0KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuZnVuY3Rpb24gbXVsdGlSZXNvbHZlKGZhY3RvcmllcywgcmVzdWx0KSB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZmFjdG9yaWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgZmFjdG9yeSA9IGZhY3Rvcmllc1tpXTtcbiAgICByZXN1bHQucHVzaChmYWN0b3J5KCkpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5mdW5jdGlvbiBtdWx0aUZhY3RvcnkoZmFjdG9yeUZuLCBpbmRleCwgaXNWaWV3UHJvdmlkZXIsIGlzQ29tcG9uZW50LCBmLCBwcm92aWRlcikge1xuICBjb25zdCBmYWN0b3J5ID0gbmV3IE5vZGVJbmplY3RvckZhY3RvcnkoZmFjdG9yeUZuLCBpc1ZpZXdQcm92aWRlciwgybXJtWRpcmVjdGl2ZUluamVjdCwgbmdEZXZNb2RlID8gcHJvdmlkZXJOYW1lKHByb3ZpZGVyKSA6IG51bGwpO1xuICBmYWN0b3J5Lm11bHRpID0gW107XG4gIGZhY3RvcnkuaW5kZXggPSBpbmRleDtcbiAgZmFjdG9yeS5jb21wb25lbnRQcm92aWRlcnMgPSAwO1xuICBtdWx0aUZhY3RvcnlBZGQoZmFjdG9yeSwgZiwgaXNDb21wb25lbnQgJiYgIWlzVmlld1Byb3ZpZGVyKTtcbiAgcmV0dXJuIGZhY3Rvcnk7XG59XG5mdW5jdGlvbiBwcm92aWRlck5hbWUocHJvdmlkZXIpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkocHJvdmlkZXIpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgaWYgKGlzVHlwZVByb3ZpZGVyKHByb3ZpZGVyKSkge1xuICAgIHJldHVybiBwcm92aWRlci5uYW1lO1xuICB9IGVsc2UgaWYgKGlzQ2xhc3NQcm92aWRlcihwcm92aWRlcikpIHtcbiAgICBpZiAocHJvdmlkZXIucHJvdmlkZSBpbnN0YW5jZW9mIEluamVjdGlvblRva2VuKSB7XG4gICAgICByZXR1cm4gYCgnJHtwcm92aWRlci5wcm92aWRlLnRvU3RyaW5nKCl9Jzoke3Byb3ZpZGVyLnVzZUNsYXNzLm5hbWV9KWA7XG4gICAgfVxuICAgIHJldHVybiBwcm92aWRlci51c2VDbGFzcy5uYW1lO1xuICB9IGVsc2UgaWYgKHByb3ZpZGVyLnByb3ZpZGUgaW5zdGFuY2VvZiBJbmplY3Rpb25Ub2tlbikge1xuICAgIHJldHVybiBwcm92aWRlci5wcm92aWRlLnRvU3RyaW5nKCk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIHByb3ZpZGVyLnByb3ZpZGUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHByb3ZpZGVyLnByb3ZpZGU7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cbmZ1bmN0aW9uIMm1ybVQcm92aWRlcnNGZWF0dXJlKHByb3ZpZGVycywgdmlld1Byb3ZpZGVycykge1xuICByZXR1cm4gZGVmaW5pdGlvbiA9PiB7XG4gICAgZGVmaW5pdGlvbi5wcm92aWRlcnNSZXNvbHZlciA9IChkZWYsIHByb2Nlc3NQcm92aWRlcnNGbikgPT4gcHJvdmlkZXJzUmVzb2x2ZXIoZGVmLCBwcm9jZXNzUHJvdmlkZXJzRm4gPyBwcm9jZXNzUHJvdmlkZXJzRm4ocHJvdmlkZXJzKSA6IHByb3ZpZGVycywgZmFsc2UpO1xuICAgIGlmICh2aWV3UHJvdmlkZXJzKSB7XG4gICAgICBkZWZpbml0aW9uLnZpZXdQcm92aWRlcnNSZXNvbHZlciA9IChkZWYsIHByb2Nlc3NQcm92aWRlcnNGbikgPT4gcHJvdmlkZXJzUmVzb2x2ZXIoZGVmLCBwcm9jZXNzUHJvdmlkZXJzRm4gPyBwcm9jZXNzUHJvdmlkZXJzRm4odmlld1Byb3ZpZGVycykgOiB2aWV3UHJvdmlkZXJzLCB0cnVlKTtcbiAgICB9XG4gIH07XG59XG5mdW5jdGlvbiDJtcm1RXh0ZXJuYWxTdHlsZXNGZWF0dXJlKHN0eWxlVXJscykge1xuICByZXR1cm4gZGVmaW5pdGlvbiA9PiB7XG4gICAgaWYgKHN0eWxlVXJscy5sZW5ndGggPCAxKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGRlZmluaXRpb24uZ2V0RXh0ZXJuYWxTdHlsZXMgPSBlbmNhcHN1bGF0aW9uSWQgPT4ge1xuICAgICAgY29uc3QgdXJscyA9IHN0eWxlVXJscy5tYXAodmFsdWUgPT4gdmFsdWUgKyAnP25nY29tcCcgKyAoZW5jYXBzdWxhdGlvbklkID8gJz0nICsgZW5jb2RlVVJJQ29tcG9uZW50KGVuY2Fwc3VsYXRpb25JZCkgOiAnJykgKyAnJmU9JyArIGRlZmluaXRpb24uZW5jYXBzdWxhdGlvbik7XG4gICAgICByZXR1cm4gdXJscztcbiAgICB9O1xuICB9O1xufVxuZnVuY3Rpb24gybXJtXNldENvbXBvbmVudFNjb3BlKHR5cGUsIGRpcmVjdGl2ZXMsIHBpcGVzKSB7XG4gIGNvbnN0IGRlZiA9IHR5cGUuybVjbXA7XG4gIGRlZi5kaXJlY3RpdmVEZWZzID0gZXh0cmFjdERlZkxpc3RPckZhY3RvcnkoZGlyZWN0aXZlcywgZXh0cmFjdERpcmVjdGl2ZURlZik7XG4gIGRlZi5waXBlRGVmcyA9IGV4dHJhY3REZWZMaXN0T3JGYWN0b3J5KHBpcGVzLCBnZXRQaXBlRGVmJDEpO1xufVxuZnVuY3Rpb24gybXJtXNldE5nTW9kdWxlU2NvcGUodHlwZSwgc2NvcGUpIHtcbiAgcmV0dXJuIG5vU2lkZUVmZmVjdHMoKCkgPT4ge1xuICAgIGNvbnN0IG5nTW9kdWxlRGVmID0gZ2V0TmdNb2R1bGVEZWZPclRocm93KHR5cGUpO1xuICAgIG5nTW9kdWxlRGVmLmRlY2xhcmF0aW9ucyA9IGNvbnZlcnRUb1R5cGVBcnJheShzY29wZS5kZWNsYXJhdGlvbnMgfHwgRU1QVFlfQVJSQVkpO1xuICAgIG5nTW9kdWxlRGVmLmltcG9ydHMgPSBjb252ZXJ0VG9UeXBlQXJyYXkoc2NvcGUuaW1wb3J0cyB8fCBFTVBUWV9BUlJBWSk7XG4gICAgbmdNb2R1bGVEZWYuZXhwb3J0cyA9IGNvbnZlcnRUb1R5cGVBcnJheShzY29wZS5leHBvcnRzIHx8IEVNUFRZX0FSUkFZKTtcbiAgICBpZiAoc2NvcGUuYm9vdHN0cmFwKSB7XG4gICAgICBuZ01vZHVsZURlZi5ib290c3RyYXAgPSBjb252ZXJ0VG9UeXBlQXJyYXkoc2NvcGUuYm9vdHN0cmFwKTtcbiAgICB9XG4gICAgZGVwc1RyYWNrZXIucmVnaXN0ZXJOZ01vZHVsZSh0eXBlLCBzY29wZSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gY29udmVydFRvVHlwZUFycmF5KHZhbHVlcykge1xuICBpZiAodHlwZW9mIHZhbHVlcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiB2YWx1ZXM7XG4gIH1cbiAgY29uc3QgZmxhdHRlblZhbHVlcyA9IGZsYXR0ZW4odmFsdWVzKTtcbiAgaWYgKGZsYXR0ZW5WYWx1ZXMuc29tZShpc0ZvcndhcmRSZWYpKSB7XG4gICAgcmV0dXJuICgpID0+IGZsYXR0ZW5WYWx1ZXMubWFwKHJlc29sdmVGb3J3YXJkUmVmKS5tYXAobWF5YmVVbndyYXBNb2R1bGVXaXRoUHJvdmlkZXJzKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZmxhdHRlblZhbHVlcy5tYXAobWF5YmVVbndyYXBNb2R1bGVXaXRoUHJvdmlkZXJzKTtcbiAgfVxufVxuZnVuY3Rpb24gbWF5YmVVbndyYXBNb2R1bGVXaXRoUHJvdmlkZXJzKHZhbHVlKSB7XG4gIHJldHVybiBpc01vZHVsZVdpdGhQcm92aWRlcnModmFsdWUpID8gdmFsdWUubmdNb2R1bGUgOiB2YWx1ZTtcbn1cbmZ1bmN0aW9uIMm1ybVwdXJlRnVuY3Rpb24wKHNsb3RPZmZzZXQsIHB1cmVGbikge1xuICBjb25zdCBiaW5kaW5nSW5kZXggPSBnZXRCaW5kaW5nUm9vdCgpICsgc2xvdE9mZnNldDtcbiAgY29uc3QgbFZpZXcgPSBnZXRMVmlldygpO1xuICByZXR1cm4gbFZpZXdbYmluZGluZ0luZGV4XSA9PT0gTk9fQ0hBTkdFID8gdXBkYXRlQmluZGluZyhsVmlldywgYmluZGluZ0luZGV4LCBwdXJlRm4oKSkgOiBnZXRCaW5kaW5nKGxWaWV3LCBiaW5kaW5nSW5kZXgpO1xufVxuZnVuY3Rpb24gybXJtXB1cmVGdW5jdGlvbjEoc2xvdE9mZnNldCwgcHVyZUZuLCBleHApIHtcbiAgcmV0dXJuIHB1cmVGdW5jdGlvbjFJbnRlcm5hbChnZXRMVmlldygpLCBnZXRCaW5kaW5nUm9vdCgpLCBzbG90T2Zmc2V0LCBwdXJlRm4sIGV4cCk7XG59XG5mdW5jdGlvbiDJtcm1cHVyZUZ1bmN0aW9uMihzbG90T2Zmc2V0LCBwdXJlRm4sIGV4cDEsIGV4cDIpIHtcbiAgcmV0dXJuIHB1cmVGdW5jdGlvbjJJbnRlcm5hbChnZXRMVmlldygpLCBnZXRCaW5kaW5nUm9vdCgpLCBzbG90T2Zmc2V0LCBwdXJlRm4sIGV4cDEsIGV4cDIpO1xufVxuZnVuY3Rpb24gybXJtXB1cmVGdW5jdGlvbjMoc2xvdE9mZnNldCwgcHVyZUZuLCBleHAxLCBleHAyLCBleHAzKSB7XG4gIHJldHVybiBwdXJlRnVuY3Rpb24zSW50ZXJuYWwoZ2V0TFZpZXcoKSwgZ2V0QmluZGluZ1Jvb3QoKSwgc2xvdE9mZnNldCwgcHVyZUZuLCBleHAxLCBleHAyLCBleHAzKTtcbn1cbmZ1bmN0aW9uIMm1ybVwdXJlRnVuY3Rpb240KHNsb3RPZmZzZXQsIHB1cmVGbiwgZXhwMSwgZXhwMiwgZXhwMywgZXhwNCwgdGhpc0FyZykge1xuICByZXR1cm4gcHVyZUZ1bmN0aW9uNEludGVybmFsKGdldExWaWV3KCksIGdldEJpbmRpbmdSb290KCksIHNsb3RPZmZzZXQsIHB1cmVGbiwgZXhwMSwgZXhwMiwgZXhwMywgZXhwNCk7XG59XG5mdW5jdGlvbiDJtcm1cHVyZUZ1bmN0aW9uNShzbG90T2Zmc2V0LCBwdXJlRm4sIGV4cDEsIGV4cDIsIGV4cDMsIGV4cDQsIGV4cDUpIHtcbiAgY29uc3QgYmluZGluZ0luZGV4ID0gZ2V0QmluZGluZ1Jvb3QoKSArIHNsb3RPZmZzZXQ7XG4gIGNvbnN0IGxWaWV3ID0gZ2V0TFZpZXcoKTtcbiAgY29uc3QgZGlmZmVyZW50ID0gYmluZGluZ1VwZGF0ZWQ0KGxWaWV3LCBiaW5kaW5nSW5kZXgsIGV4cDEsIGV4cDIsIGV4cDMsIGV4cDQpO1xuICByZXR1cm4gYmluZGluZ1VwZGF0ZWQobFZpZXcsIGJpbmRpbmdJbmRleCArIDQsIGV4cDUpIHx8IGRpZmZlcmVudCA/IHVwZGF0ZUJpbmRpbmcobFZpZXcsIGJpbmRpbmdJbmRleCArIDUsIHB1cmVGbihleHAxLCBleHAyLCBleHAzLCBleHA0LCBleHA1KSkgOiBnZXRCaW5kaW5nKGxWaWV3LCBiaW5kaW5nSW5kZXggKyA1KTtcbn1cbmZ1bmN0aW9uIMm1ybVwdXJlRnVuY3Rpb242KHNsb3RPZmZzZXQsIHB1cmVGbiwgZXhwMSwgZXhwMiwgZXhwMywgZXhwNCwgZXhwNSwgZXhwNikge1xuICBjb25zdCBiaW5kaW5nSW5kZXggPSBnZXRCaW5kaW5nUm9vdCgpICsgc2xvdE9mZnNldDtcbiAgY29uc3QgbFZpZXcgPSBnZXRMVmlldygpO1xuICBjb25zdCBkaWZmZXJlbnQgPSBiaW5kaW5nVXBkYXRlZDQobFZpZXcsIGJpbmRpbmdJbmRleCwgZXhwMSwgZXhwMiwgZXhwMywgZXhwNCk7XG4gIHJldHVybiBiaW5kaW5nVXBkYXRlZDIobFZpZXcsIGJpbmRpbmdJbmRleCArIDQsIGV4cDUsIGV4cDYpIHx8IGRpZmZlcmVudCA/IHVwZGF0ZUJpbmRpbmcobFZpZXcsIGJpbmRpbmdJbmRleCArIDYsIHB1cmVGbihleHAxLCBleHAyLCBleHAzLCBleHA0LCBleHA1LCBleHA2KSkgOiBnZXRCaW5kaW5nKGxWaWV3LCBiaW5kaW5nSW5kZXggKyA2KTtcbn1cbmZ1bmN0aW9uIMm1ybVwdXJlRnVuY3Rpb243KHNsb3RPZmZzZXQsIHB1cmVGbiwgZXhwMSwgZXhwMiwgZXhwMywgZXhwNCwgZXhwNSwgZXhwNiwgZXhwNykge1xuICBjb25zdCBiaW5kaW5nSW5kZXggPSBnZXRCaW5kaW5nUm9vdCgpICsgc2xvdE9mZnNldDtcbiAgY29uc3QgbFZpZXcgPSBnZXRMVmlldygpO1xuICBsZXQgZGlmZmVyZW50ID0gYmluZGluZ1VwZGF0ZWQ0KGxWaWV3LCBiaW5kaW5nSW5kZXgsIGV4cDEsIGV4cDIsIGV4cDMsIGV4cDQpO1xuICByZXR1cm4gYmluZGluZ1VwZGF0ZWQzKGxWaWV3LCBiaW5kaW5nSW5kZXggKyA0LCBleHA1LCBleHA2LCBleHA3KSB8fCBkaWZmZXJlbnQgPyB1cGRhdGVCaW5kaW5nKGxWaWV3LCBiaW5kaW5nSW5kZXggKyA3LCBwdXJlRm4oZXhwMSwgZXhwMiwgZXhwMywgZXhwNCwgZXhwNSwgZXhwNiwgZXhwNykpIDogZ2V0QmluZGluZyhsVmlldywgYmluZGluZ0luZGV4ICsgNyk7XG59XG5mdW5jdGlvbiDJtcm1cHVyZUZ1bmN0aW9uOChzbG90T2Zmc2V0LCBwdXJlRm4sIGV4cDEsIGV4cDIsIGV4cDMsIGV4cDQsIGV4cDUsIGV4cDYsIGV4cDcsIGV4cDgpIHtcbiAgY29uc3QgYmluZGluZ0luZGV4ID0gZ2V0QmluZGluZ1Jvb3QoKSArIHNsb3RPZmZzZXQ7XG4gIGNvbnN0IGxWaWV3ID0gZ2V0TFZpZXcoKTtcbiAgY29uc3QgZGlmZmVyZW50ID0gYmluZGluZ1VwZGF0ZWQ0KGxWaWV3LCBiaW5kaW5nSW5kZXgsIGV4cDEsIGV4cDIsIGV4cDMsIGV4cDQpO1xuICByZXR1cm4gYmluZGluZ1VwZGF0ZWQ0KGxWaWV3LCBiaW5kaW5nSW5kZXggKyA0LCBleHA1LCBleHA2LCBleHA3LCBleHA4KSB8fCBkaWZmZXJlbnQgPyB1cGRhdGVCaW5kaW5nKGxWaWV3LCBiaW5kaW5nSW5kZXggKyA4LCBwdXJlRm4oZXhwMSwgZXhwMiwgZXhwMywgZXhwNCwgZXhwNSwgZXhwNiwgZXhwNywgZXhwOCkpIDogZ2V0QmluZGluZyhsVmlldywgYmluZGluZ0luZGV4ICsgOCk7XG59XG5mdW5jdGlvbiDJtcm1cHVyZUZ1bmN0aW9uVihzbG90T2Zmc2V0LCBwdXJlRm4sIGV4cHMpIHtcbiAgcmV0dXJuIHB1cmVGdW5jdGlvblZJbnRlcm5hbChnZXRMVmlldygpLCBnZXRCaW5kaW5nUm9vdCgpLCBzbG90T2Zmc2V0LCBwdXJlRm4sIGV4cHMpO1xufVxuZnVuY3Rpb24gZ2V0UHVyZUZ1bmN0aW9uUmV0dXJuVmFsdWUobFZpZXcsIHJldHVyblZhbHVlSW5kZXgpIHtcbiAgbmdEZXZNb2RlICYmIGFzc2VydEluZGV4SW5SYW5nZShsVmlldywgcmV0dXJuVmFsdWVJbmRleCk7XG4gIGNvbnN0IGxhc3RSZXR1cm5WYWx1ZSA9IGxWaWV3W3JldHVyblZhbHVlSW5kZXhdO1xuICByZXR1cm4gbGFzdFJldHVyblZhbHVlID09PSBOT19DSEFOR0UgPyB1bmRlZmluZWQgOiBsYXN0UmV0dXJuVmFsdWU7XG59XG5mdW5jdGlvbiBwdXJlRnVuY3Rpb24xSW50ZXJuYWwobFZpZXcsIGJpbmRpbmdSb290LCBzbG90T2Zmc2V0LCBwdXJlRm4sIGV4cCwgdGhpc0FyZykge1xuICBjb25zdCBiaW5kaW5nSW5kZXggPSBiaW5kaW5nUm9vdCArIHNsb3RPZmZzZXQ7XG4gIHJldHVybiBiaW5kaW5nVXBkYXRlZChsVmlldywgYmluZGluZ0luZGV4LCBleHApID8gdXBkYXRlQmluZGluZyhsVmlldywgYmluZGluZ0luZGV4ICsgMSwgdGhpc0FyZyA/IHB1cmVGbi5jYWxsKHRoaXNBcmcsIGV4cCkgOiBwdXJlRm4oZXhwKSkgOiBnZXRQdXJlRnVuY3Rpb25SZXR1cm5WYWx1ZShsVmlldywgYmluZGluZ0luZGV4ICsgMSk7XG59XG5mdW5jdGlvbiBwdXJlRnVuY3Rpb24ySW50ZXJuYWwobFZpZXcsIGJpbmRpbmdSb290LCBzbG90T2Zmc2V0LCBwdXJlRm4sIGV4cDEsIGV4cDIsIHRoaXNBcmcpIHtcbiAgY29uc3QgYmluZGluZ0luZGV4ID0gYmluZGluZ1Jvb3QgKyBzbG90T2Zmc2V0O1xuICByZXR1cm4gYmluZGluZ1VwZGF0ZWQyKGxWaWV3LCBiaW5kaW5nSW5kZXgsIGV4cDEsIGV4cDIpID8gdXBkYXRlQmluZGluZyhsVmlldywgYmluZGluZ0luZGV4ICsgMiwgdGhpc0FyZyA/IHB1cmVGbi5jYWxsKHRoaXNBcmcsIGV4cDEsIGV4cDIpIDogcHVyZUZuKGV4cDEsIGV4cDIpKSA6IGdldFB1cmVGdW5jdGlvblJldHVyblZhbHVlKGxWaWV3LCBiaW5kaW5nSW5kZXggKyAyKTtcbn1cbmZ1bmN0aW9uIHB1cmVGdW5jdGlvbjNJbnRlcm5hbChsVmlldywgYmluZGluZ1Jvb3QsIHNsb3RPZmZzZXQsIHB1cmVGbiwgZXhwMSwgZXhwMiwgZXhwMywgdGhpc0FyZykge1xuICBjb25zdCBiaW5kaW5nSW5kZXggPSBiaW5kaW5nUm9vdCArIHNsb3RPZmZzZXQ7XG4gIHJldHVybiBiaW5kaW5nVXBkYXRlZDMobFZpZXcsIGJpbmRpbmdJbmRleCwgZXhwMSwgZXhwMiwgZXhwMykgPyB1cGRhdGVCaW5kaW5nKGxWaWV3LCBiaW5kaW5nSW5kZXggKyAzLCB0aGlzQXJnID8gcHVyZUZuLmNhbGwodGhpc0FyZywgZXhwMSwgZXhwMiwgZXhwMykgOiBwdXJlRm4oZXhwMSwgZXhwMiwgZXhwMykpIDogZ2V0UHVyZUZ1bmN0aW9uUmV0dXJuVmFsdWUobFZpZXcsIGJpbmRpbmdJbmRleCArIDMpO1xufVxuZnVuY3Rpb24gcHVyZUZ1bmN0aW9uNEludGVybmFsKGxWaWV3LCBiaW5kaW5nUm9vdCwgc2xvdE9mZnNldCwgcHVyZUZuLCBleHAxLCBleHAyLCBleHAzLCBleHA0LCB0aGlzQXJnKSB7XG4gIGNvbnN0IGJpbmRpbmdJbmRleCA9IGJpbmRpbmdSb290ICsgc2xvdE9mZnNldDtcbiAgcmV0dXJuIGJpbmRpbmdVcGRhdGVkNChsVmlldywgYmluZGluZ0luZGV4LCBleHAxLCBleHAyLCBleHAzLCBleHA0KSA/IHVwZGF0ZUJpbmRpbmcobFZpZXcsIGJpbmRpbmdJbmRleCArIDQsIHRoaXNBcmcgPyBwdXJlRm4uY2FsbCh0aGlzQXJnLCBleHAxLCBleHAyLCBleHAzLCBleHA0KSA6IHB1cmVGbihleHAxLCBleHAyLCBleHAzLCBleHA0KSkgOiBnZXRQdXJlRnVuY3Rpb25SZXR1cm5WYWx1ZShsVmlldywgYmluZGluZ0luZGV4ICsgNCk7XG59XG5mdW5jdGlvbiBwdXJlRnVuY3Rpb25WSW50ZXJuYWwobFZpZXcsIGJpbmRpbmdSb290LCBzbG90T2Zmc2V0LCBwdXJlRm4sIGV4cHMsIHRoaXNBcmcpIHtcbiAgbGV0IGJpbmRpbmdJbmRleCA9IGJpbmRpbmdSb290ICsgc2xvdE9mZnNldDtcbiAgbGV0IGRpZmZlcmVudCA9IGZhbHNlO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGV4cHMubGVuZ3RoOyBpKyspIHtcbiAgICBiaW5kaW5nVXBkYXRlZChsVmlldywgYmluZGluZ0luZGV4KyssIGV4cHNbaV0pICYmIChkaWZmZXJlbnQgPSB0cnVlKTtcbiAgfVxuICByZXR1cm4gZGlmZmVyZW50ID8gdXBkYXRlQmluZGluZyhsVmlldywgYmluZGluZ0luZGV4LCBwdXJlRm4uYXBwbHkodGhpc0FyZywgZXhwcykpIDogZ2V0UHVyZUZ1bmN0aW9uUmV0dXJuVmFsdWUobFZpZXcsIGJpbmRpbmdJbmRleCk7XG59XG5mdW5jdGlvbiDJtcm1cGlwZShpbmRleCwgcGlwZU5hbWUpIHtcbiAgY29uc3QgdFZpZXcgPSBnZXRUVmlldygpO1xuICBsZXQgcGlwZURlZjtcbiAgY29uc3QgYWRqdXN0ZWRJbmRleCA9IGluZGV4ICsgSEVBREVSX09GRlNFVDtcbiAgaWYgKHRWaWV3LmZpcnN0Q3JlYXRlUGFzcykge1xuICAgIHBpcGVEZWYgPSBnZXRQaXBlRGVmKHBpcGVOYW1lLCB0Vmlldy5waXBlUmVnaXN0cnkpO1xuICAgIHRWaWV3LmRhdGFbYWRqdXN0ZWRJbmRleF0gPSBwaXBlRGVmO1xuICAgIGlmIChwaXBlRGVmLm9uRGVzdHJveSkge1xuICAgICAgKHRWaWV3LmRlc3Ryb3lIb29rcyA/Pz0gW10pLnB1c2goYWRqdXN0ZWRJbmRleCwgcGlwZURlZi5vbkRlc3Ryb3kpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBwaXBlRGVmID0gdFZpZXcuZGF0YVthZGp1c3RlZEluZGV4XTtcbiAgfVxuICBjb25zdCBwaXBlRmFjdG9yeSA9IHBpcGVEZWYuZmFjdG9yeSB8fCAocGlwZURlZi5mYWN0b3J5ID0gZ2V0RmFjdG9yeURlZihwaXBlRGVmLnR5cGUsIHRydWUpKTtcbiAgbGV0IHByZXZpb3VzSW5qZWN0b3JQcm9maWxlckNvbnRleHQ7XG4gIGlmIChuZ0Rldk1vZGUpIHtcbiAgICBwcmV2aW91c0luamVjdG9yUHJvZmlsZXJDb250ZXh0ID0gc2V0SW5qZWN0b3JQcm9maWxlckNvbnRleHQoe1xuICAgICAgaW5qZWN0b3I6IG5ldyBOb2RlSW5qZWN0b3IoZ2V0Q3VycmVudFROb2RlKCksIGdldExWaWV3KCkpLFxuICAgICAgdG9rZW46IHBpcGVEZWYudHlwZVxuICAgIH0pO1xuICB9XG4gIGNvbnN0IHByZXZpb3VzSW5qZWN0SW1wbGVtZW50YXRpb24gPSBzZXRJbmplY3RJbXBsZW1lbnRhdGlvbijJtcm1ZGlyZWN0aXZlSW5qZWN0KTtcbiAgdHJ5IHtcbiAgICBjb25zdCBwcmV2aW91c0luY2x1ZGVWaWV3UHJvdmlkZXJzID0gc2V0SW5jbHVkZVZpZXdQcm92aWRlcnMoZmFsc2UpO1xuICAgIGNvbnN0IHBpcGVJbnN0YW5jZSA9IHBpcGVGYWN0b3J5KCk7XG4gICAgc2V0SW5jbHVkZVZpZXdQcm92aWRlcnMocHJldmlvdXNJbmNsdWRlVmlld1Byb3ZpZGVycyk7XG4gICAgc3RvcmUodFZpZXcsIGdldExWaWV3KCksIGFkanVzdGVkSW5kZXgsIHBpcGVJbnN0YW5jZSk7XG4gICAgcmV0dXJuIHBpcGVJbnN0YW5jZTtcbiAgfSBmaW5hbGx5IHtcbiAgICBzZXRJbmplY3RJbXBsZW1lbnRhdGlvbihwcmV2aW91c0luamVjdEltcGxlbWVudGF0aW9uKTtcbiAgICBuZ0Rldk1vZGUgJiYgc2V0SW5qZWN0b3JQcm9maWxlckNvbnRleHQocHJldmlvdXNJbmplY3RvclByb2ZpbGVyQ29udGV4dCk7XG4gIH1cbn1cbmZ1bmN0aW9uIGdldFBpcGVEZWYobmFtZSwgcmVnaXN0cnkpIHtcbiAgaWYgKHJlZ2lzdHJ5KSB7XG4gICAgaWYgKG5nRGV2TW9kZSkge1xuICAgICAgY29uc3QgcGlwZXMgPSByZWdpc3RyeS5maWx0ZXIocGlwZSA9PiBwaXBlLm5hbWUgPT09IG5hbWUpO1xuICAgICAgaWYgKHBpcGVzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgY29uc29sZS53YXJuKGZvcm1hdFJ1bnRpbWVFcnJvcigzMTMsIGdldE11bHRpcGxlTWF0Y2hpbmdQaXBlc01lc3NhZ2UobmFtZSkpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IHJlZ2lzdHJ5Lmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBjb25zdCBwaXBlRGVmID0gcmVnaXN0cnlbaV07XG4gICAgICBpZiAobmFtZSA9PT0gcGlwZURlZi5uYW1lKSB7XG4gICAgICAgIHJldHVybiBwaXBlRGVmO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAobmdEZXZNb2RlKSB7XG4gICAgdGhyb3cgbmV3IFJ1bnRpbWVFcnJvcigtMzAyLCBnZXRQaXBlTm90Rm91bmRFcnJvck1lc3NhZ2UobmFtZSkpO1xuICB9XG4gIHJldHVybjtcbn1cbmZ1bmN0aW9uIGdldE11bHRpcGxlTWF0Y2hpbmdQaXBlc01lc3NhZ2UobmFtZSkge1xuICBjb25zdCBsVmlldyA9IGdldExWaWV3KCk7XG4gIGNvbnN0IGRlY2xhcmF0aW9uTFZpZXcgPSBsVmlld1tERUNMQVJBVElPTl9DT01QT05FTlRfVklFV107XG4gIGNvbnN0IGNvbnRleHQgPSBkZWNsYXJhdGlvbkxWaWV3W0NPTlRFWFRdO1xuICBjb25zdCBob3N0SXNTdGFuZGFsb25lID0gaXNIb3N0Q29tcG9uZW50U3RhbmRhbG9uZShsVmlldyk7XG4gIGNvbnN0IGNvbXBvbmVudEluZm9NZXNzYWdlID0gY29udGV4dCA/IGAgaW4gdGhlICcke2NvbnRleHQuY29uc3RydWN0b3IubmFtZX0nIGNvbXBvbmVudGAgOiAnJztcbiAgY29uc3QgdmVyaWZ5TWVzc2FnZSA9IGBjaGVjayAke2hvc3RJc1N0YW5kYWxvbmUgPyBcIidAQ29tcG9uZW50LmltcG9ydHMnIG9mIHRoaXMgY29tcG9uZW50XCIgOiAndGhlIGltcG9ydHMgb2YgdGhpcyBtb2R1bGUnfWA7XG4gIGNvbnN0IGVycm9yTWVzc2FnZSA9IGBNdWx0aXBsZSBwaXBlcyBtYXRjaCB0aGUgbmFtZSBcXGAke25hbWV9XFxgJHtjb21wb25lbnRJbmZvTWVzc2FnZX0uICR7dmVyaWZ5TWVzc2FnZX1gO1xuICByZXR1cm4gZXJyb3JNZXNzYWdlO1xufVxuZnVuY3Rpb24gZ2V0UGlwZU5vdEZvdW5kRXJyb3JNZXNzYWdlKG5hbWUpIHtcbiAgY29uc3QgbFZpZXcgPSBnZXRMVmlldygpO1xuICBjb25zdCBkZWNsYXJhdGlvbkxWaWV3ID0gbFZpZXdbREVDTEFSQVRJT05fQ09NUE9ORU5UX1ZJRVddO1xuICBjb25zdCBjb250ZXh0ID0gZGVjbGFyYXRpb25MVmlld1tDT05URVhUXTtcbiAgY29uc3QgaG9zdElzU3RhbmRhbG9uZSA9IGlzSG9zdENvbXBvbmVudFN0YW5kYWxvbmUobFZpZXcpO1xuICBjb25zdCBjb21wb25lbnRJbmZvTWVzc2FnZSA9IGNvbnRleHQgPyBgIGluIHRoZSAnJHtjb250ZXh0LmNvbnN0cnVjdG9yLm5hbWV9JyBjb21wb25lbnRgIDogJyc7XG4gIGNvbnN0IHZlcmlmeU1lc3NhZ2UgPSBgVmVyaWZ5IHRoYXQgaXQgaXMgJHtob3N0SXNTdGFuZGFsb25lID8gXCJpbmNsdWRlZCBpbiB0aGUgJ0BDb21wb25lbnQuaW1wb3J0cycgb2YgdGhpcyBjb21wb25lbnRcIiA6ICdkZWNsYXJlZCBvciBpbXBvcnRlZCBpbiB0aGlzIG1vZHVsZSd9YDtcbiAgY29uc3QgZXJyb3JNZXNzYWdlID0gYFRoZSBwaXBlICcke25hbWV9JyBjb3VsZCBub3QgYmUgZm91bmQke2NvbXBvbmVudEluZm9NZXNzYWdlfS4gJHt2ZXJpZnlNZXNzYWdlfWA7XG4gIHJldHVybiBlcnJvck1lc3NhZ2U7XG59XG5mdW5jdGlvbiDJtcm1cGlwZUJpbmQxKGluZGV4LCBvZmZzZXQsIHYxKSB7XG4gIGNvbnN0IGFkanVzdGVkSW5kZXggPSBpbmRleCArIEhFQURFUl9PRkZTRVQ7XG4gIGNvbnN0IGxWaWV3ID0gZ2V0TFZpZXcoKTtcbiAgY29uc3QgcGlwZUluc3RhbmNlID0gbG9hZChsVmlldywgYWRqdXN0ZWRJbmRleCk7XG4gIHJldHVybiBpc1B1cmUobFZpZXcsIGFkanVzdGVkSW5kZXgpID8gcHVyZUZ1bmN0aW9uMUludGVybmFsKGxWaWV3LCBnZXRCaW5kaW5nUm9vdCgpLCBvZmZzZXQsIHBpcGVJbnN0YW5jZS50cmFuc2Zvcm0sIHYxLCBwaXBlSW5zdGFuY2UpIDogcGlwZUluc3RhbmNlLnRyYW5zZm9ybSh2MSk7XG59XG5mdW5jdGlvbiDJtcm1cGlwZUJpbmQyKGluZGV4LCBzbG90T2Zmc2V0LCB2MSwgdjIpIHtcbiAgY29uc3QgYWRqdXN0ZWRJbmRleCA9IGluZGV4ICsgSEVBREVSX09GRlNFVDtcbiAgY29uc3QgbFZpZXcgPSBnZXRMVmlldygpO1xuICBjb25zdCBwaXBlSW5zdGFuY2UgPSBsb2FkKGxWaWV3LCBhZGp1c3RlZEluZGV4KTtcbiAgcmV0dXJuIGlzUHVyZShsVmlldywgYWRqdXN0ZWRJbmRleCkgPyBwdXJlRnVuY3Rpb24ySW50ZXJuYWwobFZpZXcsIGdldEJpbmRpbmdSb290KCksIHNsb3RPZmZzZXQsIHBpcGVJbnN0YW5jZS50cmFuc2Zvcm0sIHYxLCB2MiwgcGlwZUluc3RhbmNlKSA6IHBpcGVJbnN0YW5jZS50cmFuc2Zvcm0odjEsIHYyKTtcbn1cbmZ1bmN0aW9uIMm1ybVwaXBlQmluZDMoaW5kZXgsIHNsb3RPZmZzZXQsIHYxLCB2MiwgdjMpIHtcbiAgY29uc3QgYWRqdXN0ZWRJbmRleCA9IGluZGV4ICsgSEVBREVSX09GRlNFVDtcbiAgY29uc3QgbFZpZXcgPSBnZXRMVmlldygpO1xuICBjb25zdCBwaXBlSW5zdGFuY2UgPSBsb2FkKGxWaWV3LCBhZGp1c3RlZEluZGV4KTtcbiAgcmV0dXJuIGlzUHVyZShsVmlldywgYWRqdXN0ZWRJbmRleCkgPyBwdXJlRnVuY3Rpb24zSW50ZXJuYWwobFZpZXcsIGdldEJpbmRpbmdSb290KCksIHNsb3RPZmZzZXQsIHBpcGVJbnN0YW5jZS50cmFuc2Zvcm0sIHYxLCB2MiwgdjMsIHBpcGVJbnN0YW5jZSkgOiBwaXBlSW5zdGFuY2UudHJhbnNmb3JtKHYxLCB2MiwgdjMpO1xufVxuZnVuY3Rpb24gybXJtXBpcGVCaW5kNChpbmRleCwgc2xvdE9mZnNldCwgdjEsIHYyLCB2MywgdjQpIHtcbiAgY29uc3QgYWRqdXN0ZWRJbmRleCA9IGluZGV4ICsgSEVBREVSX09GRlNFVDtcbiAgY29uc3QgbFZpZXcgPSBnZXRMVmlldygpO1xuICBjb25zdCBwaXBlSW5zdGFuY2UgPSBsb2FkKGxWaWV3LCBhZGp1c3RlZEluZGV4KTtcbiAgcmV0dXJuIGlzUHVyZShsVmlldywgYWRqdXN0ZWRJbmRleCkgPyBwdXJlRnVuY3Rpb240SW50ZXJuYWwobFZpZXcsIGdldEJpbmRpbmdSb290KCksIHNsb3RPZmZzZXQsIHBpcGVJbnN0YW5jZS50cmFuc2Zvcm0sIHYxLCB2MiwgdjMsIHY0LCBwaXBlSW5zdGFuY2UpIDogcGlwZUluc3RhbmNlLnRyYW5zZm9ybSh2MSwgdjIsIHYzLCB2NCk7XG59XG5mdW5jdGlvbiDJtcm1cGlwZUJpbmRWKGluZGV4LCBzbG90T2Zmc2V0LCB2YWx1ZXMpIHtcbiAgY29uc3QgYWRqdXN0ZWRJbmRleCA9IGluZGV4ICsgSEVBREVSX09GRlNFVDtcbiAgY29uc3QgbFZpZXcgPSBnZXRMVmlldygpO1xuICBjb25zdCBwaXBlSW5zdGFuY2UgPSBsb2FkKGxWaWV3LCBhZGp1c3RlZEluZGV4KTtcbiAgcmV0dXJuIGlzUHVyZShsVmlldywgYWRqdXN0ZWRJbmRleCkgPyBwdXJlRnVuY3Rpb25WSW50ZXJuYWwobFZpZXcsIGdldEJpbmRpbmdSb290KCksIHNsb3RPZmZzZXQsIHBpcGVJbnN0YW5jZS50cmFuc2Zvcm0sIHZhbHVlcywgcGlwZUluc3RhbmNlKSA6IHBpcGVJbnN0YW5jZS50cmFuc2Zvcm0uYXBwbHkocGlwZUluc3RhbmNlLCB2YWx1ZXMpO1xufVxuZnVuY3Rpb24gaXNQdXJlKGxWaWV3LCBpbmRleCkge1xuICByZXR1cm4gbFZpZXdbVFZJRVddLmRhdGFbaW5kZXhdLnB1cmU7XG59XG5mdW5jdGlvbiDJtcm1dGVtcGxhdGVSZWZFeHRyYWN0b3IodE5vZGUsIGxWaWV3KSB7XG4gIHJldHVybiBjcmVhdGVUZW1wbGF0ZVJlZih0Tm9kZSwgbFZpZXcpO1xufVxuZnVuY3Rpb24gybXJtWdldENvbXBvbmVudERlcHNGYWN0b3J5KHR5cGUsIHJhd0ltcG9ydHMpIHtcbiAgcmV0dXJuICgpID0+IHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGRlcHNUcmFja2VyLmdldENvbXBvbmVudERlcGVuZGVuY2llcyh0eXBlLCByYXdJbXBvcnRzKS5kZXBlbmRlbmNpZXM7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5lcnJvcihgQ29tcHV0aW5nIGRlcGVuZGVuY2llcyBpbiBsb2NhbCBjb21waWxhdGlvbiBtb2RlIGZvciB0aGUgY29tcG9uZW50IFwiJHt0eXBlLm5hbWV9XCIgZmFpbGVkIHdpdGggdGhlIGV4Y2VwdGlvbjpgLCBlKTtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuICB9O1xufVxuZnVuY3Rpb24gybVzZXRDbGFzc0RlYnVnSW5mbyh0eXBlLCBkZWJ1Z0luZm8pIHtcbiAgY29uc3QgZGVmID0gZ2V0Q29tcG9uZW50RGVmKHR5cGUpO1xuICBpZiAoZGVmICE9PSBudWxsKSB7XG4gICAgZGVmLmRlYnVnSW5mbyA9IGRlYnVnSW5mbztcbiAgfVxufVxuZnVuY3Rpb24gybXJtWdldFJlcGxhY2VNZXRhZGF0YVVSTChpZCwgdGltZXN0YW1wLCBiYXNlKSB7XG4gIGNvbnN0IHVybCA9IGAuL0BuZy9jb21wb25lbnQ/Yz0ke2lkfSZ0PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHRpbWVzdGFtcCl9YDtcbiAgcmV0dXJuIG5ldyBVUkwodXJsLCBiYXNlKS5ocmVmO1xufVxuZnVuY3Rpb24gybXJtXJlcGxhY2VNZXRhZGF0YSh0eXBlLCBhcHBseU1ldGFkYXRhLCBuYW1lc3BhY2VzLCBsb2NhbHMsIGltcG9ydE1ldGEgPSBudWxsLCBpZCA9IG51bGwpIHtcbiAgbmdEZXZNb2RlICYmIGFzc2VydENvbXBvbmVudERlZih0eXBlKTtcbiAgY29uc3QgY3VycmVudERlZiA9IGdldENvbXBvbmVudERlZih0eXBlKTtcbiAgYXBwbHlNZXRhZGF0YS5hcHBseShudWxsLCBbdHlwZSwgbmFtZXNwYWNlcywgLi4ubG9jYWxzXSk7XG4gIGNvbnN0IHtcbiAgICBuZXdEZWYsXG4gICAgb2xkRGVmXG4gIH0gPSBtZXJnZVdpdGhFeGlzdGluZ0RlZmluaXRpb24oY3VycmVudERlZiwgZ2V0Q29tcG9uZW50RGVmKHR5cGUpKTtcbiAgdHlwZVtOR19DT01QX0RFRl0gPSBuZXdEZWY7XG4gIGlmIChvbGREZWYudFZpZXcpIHtcbiAgICBjb25zdCB0cmFja2VkVmlld3MgPSBnZXRUcmFja2VkTFZpZXdzKCkudmFsdWVzKCk7XG4gICAgZm9yIChjb25zdCByb290IG9mIHRyYWNrZWRWaWV3cykge1xuICAgICAgaWYgKGlzUm9vdFZpZXcocm9vdCkgJiYgcm9vdFtQQVJFTlRdID09PSBudWxsKSB7XG4gICAgICAgIHJlY3JlYXRlTWF0Y2hpbmdMVmlld3MoaW1wb3J0TWV0YSwgaWQsIG5ld0RlZiwgb2xkRGVmLCByb290KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIG1lcmdlV2l0aEV4aXN0aW5nRGVmaW5pdGlvbihjdXJyZW50RGVmLCBuZXdEZWYpIHtcbiAgY29uc3QgY2xvbmUgPSB7XG4gICAgLi4uY3VycmVudERlZlxuICB9O1xuICBjb25zdCByZXBsYWNlbWVudCA9IE9iamVjdC5hc3NpZ24oY3VycmVudERlZiwgbmV3RGVmLCB7XG4gICAgZGlyZWN0aXZlRGVmczogY2xvbmUuZGlyZWN0aXZlRGVmcyxcbiAgICBwaXBlRGVmczogY2xvbmUucGlwZURlZnMsXG4gICAgc2V0SW5wdXQ6IGNsb25lLnNldElucHV0LFxuICAgIHR5cGU6IGNsb25lLnR5cGVcbiAgfSk7XG4gIG5nRGV2TW9kZSAmJiBhc3NlcnRFcXVhbChyZXBsYWNlbWVudCwgY3VycmVudERlZiwgJ0V4cGVjdGVkIGRlZmluaXRpb24gdG8gYmUgbWVyZ2VkIGluIHBsYWNlJyk7XG4gIHJldHVybiB7XG4gICAgbmV3RGVmOiByZXBsYWNlbWVudCxcbiAgICBvbGREZWY6IGNsb25lXG4gIH07XG59XG5mdW5jdGlvbiByZWNyZWF0ZU1hdGNoaW5nTFZpZXdzKGltcG9ydE1ldGEsIGlkLCBuZXdEZWYsIG9sZERlZiwgcm9vdExWaWV3KSB7XG4gIG5nRGV2TW9kZSAmJiBhc3NlcnREZWZpbmVkKG9sZERlZi50VmlldywgJ0V4cGVjdGVkIGEgY29tcG9uZW50IGRlZmluaXRpb24gdGhhdCBoYXMgYmVlbiBpbnN0YW50aWF0ZWQgYXQgbGVhc3Qgb25jZScpO1xuICBjb25zdCB0VmlldyA9IHJvb3RMVmlld1tUVklFV107XG4gIGlmICh0VmlldyA9PT0gb2xkRGVmLnRWaWV3KSB7XG4gICAgbmdEZXZNb2RlICYmIGFzc2VydENvbXBvbmVudERlZihvbGREZWYudHlwZSk7XG4gICAgcmVjcmVhdGVMVmlldyhpbXBvcnRNZXRhLCBpZCwgbmV3RGVmLCBvbGREZWYsIHJvb3RMVmlldyk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGZvciAobGV0IGkgPSBIRUFERVJfT0ZGU0VUOyBpIDwgdFZpZXcuYmluZGluZ1N0YXJ0SW5kZXg7IGkrKykge1xuICAgIGNvbnN0IGN1cnJlbnQgPSByb290TFZpZXdbaV07XG4gICAgaWYgKGlzTENvbnRhaW5lcihjdXJyZW50KSkge1xuICAgICAgaWYgKGlzTFZpZXcoY3VycmVudFtIT1NUXSkpIHtcbiAgICAgICAgcmVjcmVhdGVNYXRjaGluZ0xWaWV3cyhpbXBvcnRNZXRhLCBpZCwgbmV3RGVmLCBvbGREZWYsIGN1cnJlbnRbSE9TVF0pO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaiA9IENPTlRBSU5FUl9IRUFERVJfT0ZGU0VUOyBqIDwgY3VycmVudC5sZW5ndGg7IGorKykge1xuICAgICAgICByZWNyZWF0ZU1hdGNoaW5nTFZpZXdzKGltcG9ydE1ldGEsIGlkLCBuZXdEZWYsIG9sZERlZiwgY3VycmVudFtqXSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc0xWaWV3KGN1cnJlbnQpKSB7XG4gICAgICByZWNyZWF0ZU1hdGNoaW5nTFZpZXdzKGltcG9ydE1ldGEsIGlkLCBuZXdEZWYsIG9sZERlZiwgY3VycmVudCk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBjbGVhclJlbmRlcmVyQ2FjaGUoZmFjdG9yeSwgZGVmKSB7XG4gIGZhY3RvcnkuY29tcG9uZW50UmVwbGFjZWQ/LihkZWYuaWQpO1xufVxuZnVuY3Rpb24gcmVjcmVhdGVMVmlldyhpbXBvcnRNZXRhLCBpZCwgbmV3RGVmLCBvbGREZWYsIGxWaWV3KSB7XG4gIGNvbnN0IGluc3RhbmNlID0gbFZpZXdbQ09OVEVYVF07XG4gIGxldCBob3N0ID0gbFZpZXdbSE9TVF07XG4gIGNvbnN0IHBhcmVudExWaWV3ID0gbFZpZXdbUEFSRU5UXTtcbiAgbmdEZXZNb2RlICYmIGFzc2VydExWaWV3KHBhcmVudExWaWV3KTtcbiAgY29uc3QgdE5vZGUgPSBsVmlld1tUX0hPU1RdO1xuICBuZ0Rldk1vZGUgJiYgYXNzZXJ0VE5vZGVUeXBlKHROb2RlLCAyKTtcbiAgbmdEZXZNb2RlICYmIGFzc2VydE5vdEVxdWFsKG5ld0RlZiwgb2xkRGVmLCAnRXhwZWN0ZWQgZGlmZmVyZW50IGNvbXBvbmVudCBkZWZpbml0aW9uJyk7XG4gIGNvbnN0IHpvbmUgPSBsVmlld1tJTkpFQ1RPUl0uZ2V0KE5nWm9uZSwgbnVsbCk7XG4gIGNvbnN0IHJlY3JlYXRlID0gKCkgPT4ge1xuICAgIGlmIChvbGREZWYuZW5jYXBzdWxhdGlvbiA9PT0gVmlld0VuY2Fwc3VsYXRpb24uU2hhZG93RG9tIHx8IG9sZERlZi5lbmNhcHN1bGF0aW9uID09PSBWaWV3RW5jYXBzdWxhdGlvbi5FeHBlcmltZW50YWxJc29sYXRlZFNoYWRvd0RvbSkge1xuICAgICAgY29uc3QgbmV3SG9zdCA9IGhvc3QuY2xvbmVOb2RlKGZhbHNlKTtcbiAgICAgIGhvc3QucmVwbGFjZVdpdGgobmV3SG9zdCk7XG4gICAgICBob3N0ID0gbmV3SG9zdDtcbiAgICB9XG4gICAgY29uc3QgbmV3VFZpZXcgPSBnZXRPckNyZWF0ZUNvbXBvbmVudFRWaWV3KG5ld0RlZik7XG4gICAgY29uc3QgbmV3TFZpZXcgPSBjcmVhdGVMVmlldyhwYXJlbnRMVmlldywgbmV3VFZpZXcsIGluc3RhbmNlLCBnZXRJbml0aWFsTFZpZXdGbGFnc0Zyb21EZWYobmV3RGVmKSwgaG9zdCwgdE5vZGUsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwpO1xuICAgIHJlcGxhY2VMVmlld0luVHJlZShwYXJlbnRMVmlldywgbFZpZXcsIG5ld0xWaWV3LCB0Tm9kZS5pbmRleCk7XG4gICAgZGVzdHJveUxWaWV3KGxWaWV3W1RWSUVXXSwgbFZpZXcpO1xuICAgIGNvbnN0IHJlbmRlcmVyRmFjdG9yeSA9IGxWaWV3W0VOVklST05NRU5UXS5yZW5kZXJlckZhY3Rvcnk7XG4gICAgY2xlYXJSZW5kZXJlckNhY2hlKHJlbmRlcmVyRmFjdG9yeSwgb2xkRGVmKTtcbiAgICBuZXdMVmlld1tSRU5ERVJFUl0gPSByZW5kZXJlckZhY3RvcnkuY3JlYXRlUmVuZGVyZXIoaG9zdCwgbmV3RGVmKTtcbiAgICByZW1vdmVWaWV3RnJvbURPTShsVmlld1tUVklFV10sIGxWaWV3KTtcbiAgICByZXNldFByb2plY3Rpb25TdGF0ZSh0Tm9kZSk7XG4gICAgcmVuZGVyVmlldyhuZXdUVmlldywgbmV3TFZpZXcsIGluc3RhbmNlKTtcbiAgICByZWZyZXNoVmlldyhuZXdUVmlldywgbmV3TFZpZXcsIG5ld1RWaWV3LnRlbXBsYXRlLCBpbnN0YW5jZSk7XG4gIH07XG4gIGlmICh6b25lID09PSBudWxsKSB7XG4gICAgZXhlY3V0ZVdpdGhJbnZhbGlkYXRlRmFsbGJhY2soaW1wb3J0TWV0YSwgaWQsIHJlY3JlYXRlKTtcbiAgfSBlbHNlIHtcbiAgICB6b25lLnJ1bigoKSA9PiBleGVjdXRlV2l0aEludmFsaWRhdGVGYWxsYmFjayhpbXBvcnRNZXRhLCBpZCwgcmVjcmVhdGUpKTtcbiAgfVxufVxuZnVuY3Rpb24gZXhlY3V0ZVdpdGhJbnZhbGlkYXRlRmFsbGJhY2soaW1wb3J0TWV0YSwgaWQsIGNhbGxiYWNrKSB7XG4gIHRyeSB7XG4gICAgY2FsbGJhY2soKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGNvbnN0IGVycm9yID0gZTtcbiAgICBpZiAoaWQgIT09IG51bGwgJiYgZXJyb3IubWVzc2FnZSkge1xuICAgICAgY29uc3QgdG9Mb2cgPSBlcnJvci5tZXNzYWdlICsgKGVycm9yLnN0YWNrID8gJ1xcbicgKyBlcnJvci5zdGFjayA6ICcnKTtcbiAgICAgIGltcG9ydE1ldGE/LmhvdD8uc2VuZD8uKCdhbmd1bGFyOmludmFsaWRhdGUnLCB7XG4gICAgICAgIGlkLFxuICAgICAgICBtZXNzYWdlOiB0b0xvZyxcbiAgICAgICAgZXJyb3I6IHRydWVcbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aHJvdyBlO1xuICB9XG59XG5mdW5jdGlvbiByZXBsYWNlTFZpZXdJblRyZWUocGFyZW50TFZpZXcsIG9sZExWaWV3LCBuZXdMVmlldywgaW5kZXgpIHtcbiAgZm9yIChsZXQgaSA9IEhFQURFUl9PRkZTRVQ7IGkgPCBwYXJlbnRMVmlld1tUVklFV10uYmluZGluZ1N0YXJ0SW5kZXg7IGkrKykge1xuICAgIGNvbnN0IGN1cnJlbnQgPSBwYXJlbnRMVmlld1tpXTtcbiAgICBpZiAoKGlzTFZpZXcoY3VycmVudCkgfHwgaXNMQ29udGFpbmVyKGN1cnJlbnQpKSAmJiBjdXJyZW50W05FWFRdID09PSBvbGRMVmlldykge1xuICAgICAgY3VycmVudFtORVhUXSA9IG5ld0xWaWV3O1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIGlmIChwYXJlbnRMVmlld1tDSElMRF9IRUFEXSA9PT0gb2xkTFZpZXcpIHtcbiAgICBwYXJlbnRMVmlld1tDSElMRF9IRUFEXSA9IG5ld0xWaWV3O1xuICB9XG4gIGlmIChwYXJlbnRMVmlld1tDSElMRF9UQUlMXSA9PT0gb2xkTFZpZXcpIHtcbiAgICBwYXJlbnRMVmlld1tDSElMRF9UQUlMXSA9IG5ld0xWaWV3O1xuICB9XG4gIG5ld0xWaWV3W05FWFRdID0gb2xkTFZpZXdbTkVYVF07XG4gIG9sZExWaWV3W05FWFRdID0gbnVsbDtcbiAgcGFyZW50TFZpZXdbaW5kZXhdID0gbmV3TFZpZXc7XG59XG5mdW5jdGlvbiByZXNldFByb2plY3Rpb25TdGF0ZSh0Tm9kZSkge1xuICBpZiAodE5vZGUucHJvamVjdGlvbiAhPT0gbnVsbCkge1xuICAgIGZvciAoY29uc3QgY3VycmVudCBvZiB0Tm9kZS5wcm9qZWN0aW9uKSB7XG4gICAgICBpZiAoaXNUTm9kZVNoYXBlKGN1cnJlbnQpKSB7XG4gICAgICAgIGN1cnJlbnQucHJvamVjdGlvbk5leHQgPSBudWxsO1xuICAgICAgICBjdXJyZW50LmZsYWdzICY9IH4yO1xuICAgICAgfVxuICAgIH1cbiAgICB0Tm9kZS5wcm9qZWN0aW9uID0gbnVsbDtcbiAgfVxufVxuY29uc3QgYW5ndWxhckNvcmVFbnYgPSAvKiNfX1BVUkVfXyovKCgpID0+ICh7XG4gICfJtcm1YW5pbWF0ZUVudGVyJzogybXJtWFuaW1hdGVFbnRlcixcbiAgJ8m1ybVhbmltYXRlRW50ZXJMaXN0ZW5lcic6IMm1ybVhbmltYXRlRW50ZXJMaXN0ZW5lcixcbiAgJ8m1ybVhbmltYXRlTGVhdmUnOiDJtcm1YW5pbWF0ZUxlYXZlLFxuICAnybXJtWFuaW1hdGVMZWF2ZUxpc3RlbmVyJzogybXJtWFuaW1hdGVMZWF2ZUxpc3RlbmVyLFxuICAnybXJtWF0dHJpYnV0ZSc6IMm1ybVhdHRyaWJ1dGUsXG4gICfJtcm1ZGVmaW5lQ29tcG9uZW50JzogybXJtWRlZmluZUNvbXBvbmVudCxcbiAgJ8m1ybVkZWZpbmVEaXJlY3RpdmUnOiDJtcm1ZGVmaW5lRGlyZWN0aXZlLFxuICAnybXJtWRlZmluZUluamVjdGFibGUnOiBfX2RlZmluZUluamVjdGFibGUsXG4gICfJtcm1ZGVmaW5lSW5qZWN0b3InOiBfX2RlZmluZUluamVjdG9yLFxuICAnybXJtWRlZmluZU5nTW9kdWxlJzogybXJtWRlZmluZU5nTW9kdWxlLFxuICAnybXJtWRlZmluZVBpcGUnOiDJtcm1ZGVmaW5lUGlwZSxcbiAgJ8m1ybVkaXJlY3RpdmVJbmplY3QnOiDJtcm1ZGlyZWN0aXZlSW5qZWN0LFxuICAnybXJtWdldEluaGVyaXRlZEZhY3RvcnknOiDJtcm1Z2V0SW5oZXJpdGVkRmFjdG9yeSxcbiAgJ8m1ybVpbmplY3QnOiBfX2luamVjdCxcbiAgJ8m1ybVpbmplY3RBdHRyaWJ1dGUnOiDJtcm1aW5qZWN0QXR0cmlidXRlLFxuICAnybXJtWludmFsaWRGYWN0b3J5JzogybXJtWludmFsaWRGYWN0b3J5LFxuICAnybXJtWludmFsaWRGYWN0b3J5RGVwJzogX19pbnZhbGlkRmFjdG9yeURlcCxcbiAgJ8m1ybV0ZW1wbGF0ZVJlZkV4dHJhY3Rvcic6IMm1ybV0ZW1wbGF0ZVJlZkV4dHJhY3RvcixcbiAgJ8m1ybVyZXNldFZpZXcnOiBfX3Jlc2V0VmlldyxcbiAgJ8m1ybVIb3N0RGlyZWN0aXZlc0ZlYXR1cmUnOiDJtcm1SG9zdERpcmVjdGl2ZXNGZWF0dXJlLFxuICAnybXJtU5nT25DaGFuZ2VzRmVhdHVyZSc6IMm1ybVOZ09uQ2hhbmdlc0ZlYXR1cmUsXG4gICfJtcm1Q29udHJvbEZlYXR1cmUnOiDJtcm1Q29udHJvbEZlYXR1cmUsXG4gICfJtcm1UHJvdmlkZXJzRmVhdHVyZSc6IMm1ybVQcm92aWRlcnNGZWF0dXJlLFxuICAnybXJtUluaGVyaXREZWZpbml0aW9uRmVhdHVyZSc6IMm1ybVJbmhlcml0RGVmaW5pdGlvbkZlYXR1cmUsXG4gICfJtcm1RXh0ZXJuYWxTdHlsZXNGZWF0dXJlJzogybXJtUV4dGVybmFsU3R5bGVzRmVhdHVyZSxcbiAgJ8m1ybVuZXh0Q29udGV4dCc6IMm1ybVuZXh0Q29udGV4dCxcbiAgJ8m1ybVuYW1lc3BhY2VIVE1MJzogX19uYW1lc3BhY2VIVE1MLFxuICAnybXJtW5hbWVzcGFjZU1hdGhNTCc6IF9fbmFtZXNwYWNlTWF0aE1MLFxuICAnybXJtW5hbWVzcGFjZVNWRyc6IF9fbmFtZXNwYWNlU1ZHLFxuICAnybXJtWVuYWJsZUJpbmRpbmdzJzogX19lbmFibGVCaW5kaW5ncyxcbiAgJ8m1ybVkaXNhYmxlQmluZGluZ3MnOiBfX2Rpc2FibGVCaW5kaW5ncyxcbiAgJ8m1ybVlbGVtZW50U3RhcnQnOiDJtcm1ZWxlbWVudFN0YXJ0LFxuICAnybXJtWVsZW1lbnRFbmQnOiDJtcm1ZWxlbWVudEVuZCxcbiAgJ8m1ybVlbGVtZW50JzogybXJtWVsZW1lbnQsXG4gICfJtcm1ZWxlbWVudENvbnRhaW5lclN0YXJ0JzogybXJtWVsZW1lbnRDb250YWluZXJTdGFydCxcbiAgJ8m1ybVlbGVtZW50Q29udGFpbmVyRW5kJzogybXJtWVsZW1lbnRDb250YWluZXJFbmQsXG4gICfJtcm1ZG9tRWxlbWVudCc6IMm1ybVkb21FbGVtZW50LFxuICAnybXJtWRvbUVsZW1lbnRTdGFydCc6IMm1ybVkb21FbGVtZW50U3RhcnQsXG4gICfJtcm1ZG9tRWxlbWVudEVuZCc6IMm1ybVkb21FbGVtZW50RW5kLFxuICAnybXJtWRvbUVsZW1lbnRDb250YWluZXInOiDJtcm1ZG9tRWxlbWVudENvbnRhaW5lcixcbiAgJ8m1ybVkb21FbGVtZW50Q29udGFpbmVyU3RhcnQnOiDJtcm1ZG9tRWxlbWVudENvbnRhaW5lclN0YXJ0LFxuICAnybXJtWRvbUVsZW1lbnRDb250YWluZXJFbmQnOiDJtcm1ZG9tRWxlbWVudENvbnRhaW5lckVuZCxcbiAgJ8m1ybVkb21UZW1wbGF0ZSc6IMm1ybVkb21UZW1wbGF0ZSxcbiAgJ8m1ybVkb21MaXN0ZW5lcic6IMm1ybVkb21MaXN0ZW5lcixcbiAgJ8m1ybVlbGVtZW50Q29udGFpbmVyJzogybXJtWVsZW1lbnRDb250YWluZXIsXG4gICfJtcm1cHVyZUZ1bmN0aW9uMCc6IMm1ybVwdXJlRnVuY3Rpb24wLFxuICAnybXJtXB1cmVGdW5jdGlvbjEnOiDJtcm1cHVyZUZ1bmN0aW9uMSxcbiAgJ8m1ybVwdXJlRnVuY3Rpb24yJzogybXJtXB1cmVGdW5jdGlvbjIsXG4gICfJtcm1cHVyZUZ1bmN0aW9uMyc6IMm1ybVwdXJlRnVuY3Rpb24zLFxuICAnybXJtXB1cmVGdW5jdGlvbjQnOiDJtcm1cHVyZUZ1bmN0aW9uNCxcbiAgJ8m1ybVwdXJlRnVuY3Rpb241JzogybXJtXB1cmVGdW5jdGlvbjUsXG4gICfJtcm1cHVyZUZ1bmN0aW9uNic6IMm1ybVwdXJlRnVuY3Rpb242LFxuICAnybXJtXB1cmVGdW5jdGlvbjcnOiDJtcm1cHVyZUZ1bmN0aW9uNyxcbiAgJ8m1ybVwdXJlRnVuY3Rpb244JzogybXJtXB1cmVGdW5jdGlvbjgsXG4gICfJtcm1cHVyZUZ1bmN0aW9uVic6IMm1ybVwdXJlRnVuY3Rpb25WLFxuICAnybXJtWdldEN1cnJlbnRWaWV3JzogybXJtWdldEN1cnJlbnRWaWV3LFxuICAnybXJtXJlc3RvcmVWaWV3JzogX19yZXN0b3JlVmlldyxcbiAgJ8m1ybVsaXN0ZW5lcic6IMm1ybVsaXN0ZW5lcixcbiAgJ8m1ybVwcm9qZWN0aW9uJzogybXJtXByb2plY3Rpb24sXG4gICfJtcm1c3ludGhldGljSG9zdFByb3BlcnR5JzogybXJtXN5bnRoZXRpY0hvc3RQcm9wZXJ0eSxcbiAgJ8m1ybVzeW50aGV0aWNIb3N0TGlzdGVuZXInOiDJtcm1c3ludGhldGljSG9zdExpc3RlbmVyLFxuICAnybXJtXBpcGVCaW5kMSc6IMm1ybVwaXBlQmluZDEsXG4gICfJtcm1cGlwZUJpbmQyJzogybXJtXBpcGVCaW5kMixcbiAgJ8m1ybVwaXBlQmluZDMnOiDJtcm1cGlwZUJpbmQzLFxuICAnybXJtXBpcGVCaW5kNCc6IMm1ybVwaXBlQmluZDQsXG4gICfJtcm1cGlwZUJpbmRWJzogybXJtXBpcGVCaW5kVixcbiAgJ8m1ybVwcm9qZWN0aW9uRGVmJzogybXJtXByb2plY3Rpb25EZWYsXG4gICfJtcm1ZG9tUHJvcGVydHknOiDJtcm1ZG9tUHJvcGVydHksXG4gICfJtcm1YXJpYVByb3BlcnR5JzogybXJtWFyaWFQcm9wZXJ0eSxcbiAgJ8m1ybVwcm9wZXJ0eSc6IMm1ybVwcm9wZXJ0eSxcbiAgJ8m1ybVjb250cm9sJzogybXJtWNvbnRyb2wsXG4gICfJtcm1Y29udHJvbENyZWF0ZSc6IMm1ybVjb250cm9sQ3JlYXRlLFxuICAnybXJtXBpcGUnOiDJtcm1cGlwZSxcbiAgJ8m1ybVxdWVyeVJlZnJlc2gnOiDJtcm1cXVlcnlSZWZyZXNoLFxuICAnybXJtXF1ZXJ5QWR2YW5jZSc6IMm1ybVxdWVyeUFkdmFuY2UsXG4gICfJtcm1dmlld1F1ZXJ5JzogybXJtXZpZXdRdWVyeSxcbiAgJ8m1ybV2aWV3UXVlcnlTaWduYWwnOiDJtcm1dmlld1F1ZXJ5U2lnbmFsLFxuICAnybXJtWxvYWRRdWVyeSc6IMm1ybVsb2FkUXVlcnksXG4gICfJtcm1Y29udGVudFF1ZXJ5JzogybXJtWNvbnRlbnRRdWVyeSxcbiAgJ8m1ybVjb250ZW50UXVlcnlTaWduYWwnOiDJtcm1Y29udGVudFF1ZXJ5U2lnbmFsLFxuICAnybXJtXJlZmVyZW5jZSc6IMm1ybVyZWZlcmVuY2UsXG4gICfJtcm1Y2xhc3NNYXAnOiDJtcm1Y2xhc3NNYXAsXG4gICfJtcm1c3R5bGVNYXAnOiDJtcm1c3R5bGVNYXAsXG4gICfJtcm1c3R5bGVQcm9wJzogybXJtXN0eWxlUHJvcCxcbiAgJ8m1ybVjbGFzc1Byb3AnOiDJtcm1Y2xhc3NQcm9wLFxuICAnybXJtWFkdmFuY2UnOiDJtcm1YWR2YW5jZSxcbiAgJ8m1ybV0ZW1wbGF0ZSc6IMm1ybV0ZW1wbGF0ZSxcbiAgJ8m1ybVjb25kaXRpb25hbCc6IMm1ybVjb25kaXRpb25hbCxcbiAgJ8m1ybVjb25kaXRpb25hbENyZWF0ZSc6IMm1ybVjb25kaXRpb25hbENyZWF0ZSxcbiAgJ8m1ybVjb25kaXRpb25hbEJyYW5jaENyZWF0ZSc6IMm1ybVjb25kaXRpb25hbEJyYW5jaENyZWF0ZSxcbiAgJ8m1ybVkZWZlcic6IMm1ybVkZWZlcixcbiAgJ8m1ybVkZWZlcldoZW4nOiDJtcm1ZGVmZXJXaGVuLFxuICAnybXJtWRlZmVyT25JZGxlJzogybXJtWRlZmVyT25JZGxlLFxuICAnybXJtWRlZmVyT25JbW1lZGlhdGUnOiDJtcm1ZGVmZXJPbkltbWVkaWF0ZSxcbiAgJ8m1ybVkZWZlck9uVGltZXInOiDJtcm1ZGVmZXJPblRpbWVyLFxuICAnybXJtWRlZmVyT25Ib3Zlcic6IMm1ybVkZWZlck9uSG92ZXIsXG4gICfJtcm1ZGVmZXJPbkludGVyYWN0aW9uJzogybXJtWRlZmVyT25JbnRlcmFjdGlvbixcbiAgJ8m1ybVkZWZlck9uVmlld3BvcnQnOiDJtcm1ZGVmZXJPblZpZXdwb3J0LFxuICAnybXJtWRlZmVyUHJlZmV0Y2hXaGVuJzogybXJtWRlZmVyUHJlZmV0Y2hXaGVuLFxuICAnybXJtWRlZmVyUHJlZmV0Y2hPbklkbGUnOiDJtcm1ZGVmZXJQcmVmZXRjaE9uSWRsZSxcbiAgJ8m1ybVkZWZlclByZWZldGNoT25JbW1lZGlhdGUnOiDJtcm1ZGVmZXJQcmVmZXRjaE9uSW1tZWRpYXRlLFxuICAnybXJtWRlZmVyUHJlZmV0Y2hPblRpbWVyJzogybXJtWRlZmVyUHJlZmV0Y2hPblRpbWVyLFxuICAnybXJtWRlZmVyUHJlZmV0Y2hPbkhvdmVyJzogybXJtWRlZmVyUHJlZmV0Y2hPbkhvdmVyLFxuICAnybXJtWRlZmVyUHJlZmV0Y2hPbkludGVyYWN0aW9uJzogybXJtWRlZmVyUHJlZmV0Y2hPbkludGVyYWN0aW9uLFxuICAnybXJtWRlZmVyUHJlZmV0Y2hPblZpZXdwb3J0JzogybXJtWRlZmVyUHJlZmV0Y2hPblZpZXdwb3J0LFxuICAnybXJtWRlZmVySHlkcmF0ZVdoZW4nOiDJtcm1ZGVmZXJIeWRyYXRlV2hlbixcbiAgJ8m1ybVkZWZlckh5ZHJhdGVOZXZlcic6IMm1ybVkZWZlckh5ZHJhdGVOZXZlcixcbiAgJ8m1ybVkZWZlckh5ZHJhdGVPbklkbGUnOiDJtcm1ZGVmZXJIeWRyYXRlT25JZGxlLFxuICAnybXJtWRlZmVySHlkcmF0ZU9uSW1tZWRpYXRlJzogybXJtWRlZmVySHlkcmF0ZU9uSW1tZWRpYXRlLFxuICAnybXJtWRlZmVySHlkcmF0ZU9uVGltZXInOiDJtcm1ZGVmZXJIeWRyYXRlT25UaW1lcixcbiAgJ8m1ybVkZWZlckh5ZHJhdGVPbkhvdmVyJzogybXJtWRlZmVySHlkcmF0ZU9uSG92ZXIsXG4gICfJtcm1ZGVmZXJIeWRyYXRlT25JbnRlcmFjdGlvbic6IMm1ybVkZWZlckh5ZHJhdGVPbkludGVyYWN0aW9uLFxuICAnybXJtWRlZmVySHlkcmF0ZU9uVmlld3BvcnQnOiDJtcm1ZGVmZXJIeWRyYXRlT25WaWV3cG9ydCxcbiAgJ8m1ybVkZWZlckVuYWJsZVRpbWVyU2NoZWR1bGluZyc6IMm1ybVkZWZlckVuYWJsZVRpbWVyU2NoZWR1bGluZyxcbiAgJ8m1ybVyZXBlYXRlcic6IMm1ybVyZXBlYXRlcixcbiAgJ8m1ybVyZXBlYXRlckNyZWF0ZSc6IMm1ybVyZXBlYXRlckNyZWF0ZSxcbiAgJ8m1ybVyZXBlYXRlclRyYWNrQnlJbmRleCc6IMm1ybVyZXBlYXRlclRyYWNrQnlJbmRleCxcbiAgJ8m1ybVyZXBlYXRlclRyYWNrQnlJZGVudGl0eSc6IMm1ybVyZXBlYXRlclRyYWNrQnlJZGVudGl0eSxcbiAgJ8m1ybVjb21wb25lbnRJbnN0YW5jZSc6IMm1ybVjb21wb25lbnRJbnN0YW5jZSxcbiAgJ8m1ybV0ZXh0JzogybXJtXRleHQsXG4gICfJtcm1dGV4dEludGVycG9sYXRlJzogybXJtXRleHRJbnRlcnBvbGF0ZSxcbiAgJ8m1ybV0ZXh0SW50ZXJwb2xhdGUxJzogybXJtXRleHRJbnRlcnBvbGF0ZTEsXG4gICfJtcm1dGV4dEludGVycG9sYXRlMic6IMm1ybV0ZXh0SW50ZXJwb2xhdGUyLFxuICAnybXJtXRleHRJbnRlcnBvbGF0ZTMnOiDJtcm1dGV4dEludGVycG9sYXRlMyxcbiAgJ8m1ybV0ZXh0SW50ZXJwb2xhdGU0JzogybXJtXRleHRJbnRlcnBvbGF0ZTQsXG4gICfJtcm1dGV4dEludGVycG9sYXRlNSc6IMm1ybV0ZXh0SW50ZXJwb2xhdGU1LFxuICAnybXJtXRleHRJbnRlcnBvbGF0ZTYnOiDJtcm1dGV4dEludGVycG9sYXRlNixcbiAgJ8m1ybV0ZXh0SW50ZXJwb2xhdGU3JzogybXJtXRleHRJbnRlcnBvbGF0ZTcsXG4gICfJtcm1dGV4dEludGVycG9sYXRlOCc6IMm1ybV0ZXh0SW50ZXJwb2xhdGU4LFxuICAnybXJtXRleHRJbnRlcnBvbGF0ZVYnOiDJtcm1dGV4dEludGVycG9sYXRlVixcbiAgJ8m1ybVpMThuJzogybXJtWkxOG4sXG4gICfJtcm1aTE4bkF0dHJpYnV0ZXMnOiDJtcm1aTE4bkF0dHJpYnV0ZXMsXG4gICfJtcm1aTE4bkV4cCc6IMm1ybVpMThuRXhwLFxuICAnybXJtWkxOG5TdGFydCc6IMm1ybVpMThuU3RhcnQsXG4gICfJtcm1aTE4bkVuZCc6IMm1ybVpMThuRW5kLFxuICAnybXJtWkxOG5BcHBseSc6IMm1ybVpMThuQXBwbHksXG4gICfJtcm1aTE4blBvc3Rwcm9jZXNzJzogybXJtWkxOG5Qb3N0cHJvY2VzcyxcbiAgJ8m1ybVyZXNvbHZlV2luZG93JzogybXJtXJlc29sdmVXaW5kb3csXG4gICfJtcm1cmVzb2x2ZURvY3VtZW50JzogybXJtXJlc29sdmVEb2N1bWVudCxcbiAgJ8m1ybVyZXNvbHZlQm9keSc6IMm1ybVyZXNvbHZlQm9keSxcbiAgJ8m1ybVzZXRDb21wb25lbnRTY29wZSc6IMm1ybVzZXRDb21wb25lbnRTY29wZSxcbiAgJ8m1ybVzZXROZ01vZHVsZVNjb3BlJzogybXJtXNldE5nTW9kdWxlU2NvcGUsXG4gICfJtcm1cmVnaXN0ZXJOZ01vZHVsZVR5cGUnOiByZWdpc3Rlck5nTW9kdWxlVHlwZSxcbiAgJ8m1ybVnZXRDb21wb25lbnREZXBzRmFjdG9yeSc6IMm1ybVnZXRDb21wb25lbnREZXBzRmFjdG9yeSxcbiAgJ8m1c2V0Q2xhc3NEZWJ1Z0luZm8nOiDJtXNldENsYXNzRGVidWdJbmZvLFxuICAnybXJtWRlY2xhcmVMZXQnOiDJtcm1ZGVjbGFyZUxldCxcbiAgJ8m1ybVzdG9yZUxldCc6IMm1ybVzdG9yZUxldCxcbiAgJ8m1ybVhcnJvd0Z1bmN0aW9uJzogybXJtWFycm93RnVuY3Rpb24sXG4gICfJtcm1cmVhZENvbnRleHRMZXQnOiDJtcm1cmVhZENvbnRleHRMZXQsXG4gICfJtcm1YXR0YWNoU291cmNlTG9jYXRpb25zJzogybXJtWF0dGFjaFNvdXJjZUxvY2F0aW9ucyxcbiAgJ8m1ybVpbnRlcnBvbGF0ZSc6IMm1ybVpbnRlcnBvbGF0ZSxcbiAgJ8m1ybVpbnRlcnBvbGF0ZTEnOiDJtcm1aW50ZXJwb2xhdGUxLFxuICAnybXJtWludGVycG9sYXRlMic6IMm1ybVpbnRlcnBvbGF0ZTIsXG4gICfJtcm1aW50ZXJwb2xhdGUzJzogybXJtWludGVycG9sYXRlMyxcbiAgJ8m1ybVpbnRlcnBvbGF0ZTQnOiDJtcm1aW50ZXJwb2xhdGU0LFxuICAnybXJtWludGVycG9sYXRlNSc6IMm1ybVpbnRlcnBvbGF0ZTUsXG4gICfJtcm1aW50ZXJwb2xhdGU2JzogybXJtWludGVycG9sYXRlNixcbiAgJ8m1ybVpbnRlcnBvbGF0ZTcnOiDJtcm1aW50ZXJwb2xhdGU3LFxuICAnybXJtWludGVycG9sYXRlOCc6IMm1ybVpbnRlcnBvbGF0ZTgsXG4gICfJtcm1aW50ZXJwb2xhdGVWJzogybXJtWludGVycG9sYXRlVixcbiAgJ8m1ybVzYW5pdGl6ZUh0bWwnOiDJtcm1c2FuaXRpemVIdG1sLFxuICAnybXJtXNhbml0aXplU3R5bGUnOiDJtcm1c2FuaXRpemVTdHlsZSxcbiAgJ8m1ybVzYW5pdGl6ZVJlc291cmNlVXJsJzogybXJtXNhbml0aXplUmVzb3VyY2VVcmwsXG4gICfJtcm1c2FuaXRpemVTY3JpcHQnOiDJtcm1c2FuaXRpemVTY3JpcHQsXG4gICfJtcm1dmFsaWRhdGVBdHRyaWJ1dGUnOiDJtcm1dmFsaWRhdGVBdHRyaWJ1dGUsXG4gICfJtcm1c2FuaXRpemVVcmwnOiDJtcm1c2FuaXRpemVVcmwsXG4gICfJtcm1c2FuaXRpemVVcmxPclJlc291cmNlVXJsJzogybXJtXNhbml0aXplVXJsT3JSZXNvdXJjZVVybCxcbiAgJ8m1ybV0cnVzdENvbnN0YW50SHRtbCc6IMm1ybV0cnVzdENvbnN0YW50SHRtbCxcbiAgJ8m1ybV0cnVzdENvbnN0YW50UmVzb3VyY2VVcmwnOiDJtcm1dHJ1c3RDb25zdGFudFJlc291cmNlVXJsLFxuICAnZm9yd2FyZFJlZic6IGZvcndhcmRSZWYsXG4gICdyZXNvbHZlRm9yd2FyZFJlZic6IHJlc29sdmVGb3J3YXJkUmVmLFxuICAnybXJtXR3b1dheVByb3BlcnR5JzogybXJtXR3b1dheVByb3BlcnR5LFxuICAnybXJtXR3b1dheUJpbmRpbmdTZXQnOiDJtcm1dHdvV2F5QmluZGluZ1NldCxcbiAgJ8m1ybV0d29XYXlMaXN0ZW5lcic6IMm1ybV0d29XYXlMaXN0ZW5lcixcbiAgJ8m1ybVyZXBsYWNlTWV0YWRhdGEnOiDJtcm1cmVwbGFjZU1ldGFkYXRhLFxuICAnybXJtWdldFJlcGxhY2VNZXRhZGF0YVVSTCc6IMm1ybVnZXRSZXBsYWNlTWV0YWRhdGFVUkxcbn0pKSgpO1xubGV0IGppdE9wdGlvbnMgPSBudWxsO1xuZnVuY3Rpb24gc2V0Sml0T3B0aW9ucyhvcHRpb25zKSB7XG4gIGlmIChqaXRPcHRpb25zICE9PSBudWxsKSB7XG4gICAgaWYgKG9wdGlvbnMuZGVmYXVsdEVuY2Fwc3VsYXRpb24gIT09IGppdE9wdGlvbnMuZGVmYXVsdEVuY2Fwc3VsYXRpb24pIHtcbiAgICAgIG5nRGV2TW9kZSAmJiBjb25zb2xlLmVycm9yKCdQcm92aWRlZCB2YWx1ZSBmb3IgYGRlZmF1bHRFbmNhcHN1bGF0aW9uYCBjYW4gbm90IGJlIGNoYW5nZWQgb25jZSBpdCBoYXMgYmVlbiBzZXQuJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChvcHRpb25zLnByZXNlcnZlV2hpdGVzcGFjZXMgIT09IGppdE9wdGlvbnMucHJlc2VydmVXaGl0ZXNwYWNlcykge1xuICAgICAgbmdEZXZNb2RlICYmIGNvbnNvbGUuZXJyb3IoJ1Byb3ZpZGVkIHZhbHVlIGZvciBgcHJlc2VydmVXaGl0ZXNwYWNlc2AgY2FuIG5vdCBiZSBjaGFuZ2VkIG9uY2UgaXQgaGFzIGJlZW4gc2V0LicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuICBqaXRPcHRpb25zID0gb3B0aW9ucztcbn1cbmZ1bmN0aW9uIGdldEppdE9wdGlvbnMoKSB7XG4gIHJldHVybiBqaXRPcHRpb25zO1xufVxuZnVuY3Rpb24gcmVzZXRKaXRPcHRpb25zKCkge1xuICBqaXRPcHRpb25zID0gbnVsbDtcbn1cbmNvbnN0IG1vZHVsZVF1ZXVlID0gW107XG5mdW5jdGlvbiBlbnF1ZXVlTW9kdWxlRm9yRGVsYXllZFNjb3BpbmcobW9kdWxlVHlwZSwgbmdNb2R1bGUpIHtcbiAgbW9kdWxlUXVldWUucHVzaCh7XG4gICAgbW9kdWxlVHlwZSxcbiAgICBuZ01vZHVsZVxuICB9KTtcbn1cbmxldCBmbHVzaGluZ01vZHVsZVF1ZXVlID0gZmFsc2U7XG5mdW5jdGlvbiBmbHVzaE1vZHVsZVNjb3BpbmdRdWV1ZUFzTXVjaEFzUG9zc2libGUoKSB7XG4gIGlmICghZmx1c2hpbmdNb2R1bGVRdWV1ZSkge1xuICAgIGZsdXNoaW5nTW9kdWxlUXVldWUgPSB0cnVlO1xuICAgIHRyeSB7XG4gICAgICBmb3IgKGxldCBpID0gbW9kdWxlUXVldWUubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgIG1vZHVsZVR5cGUsXG4gICAgICAgICAgbmdNb2R1bGVcbiAgICAgICAgfSA9IG1vZHVsZVF1ZXVlW2ldO1xuICAgICAgICBpZiAobmdNb2R1bGUuZGVjbGFyYXRpb25zICYmIG5nTW9kdWxlLmRlY2xhcmF0aW9ucy5ldmVyeShpc1Jlc29sdmVkRGVjbGFyYXRpb24pKSB7XG4gICAgICAgICAgbW9kdWxlUXVldWUuc3BsaWNlKGksIDEpO1xuICAgICAgICAgIHNldFNjb3BlT25EZWNsYXJlZENvbXBvbmVudHMobW9kdWxlVHlwZSwgbmdNb2R1bGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGZsdXNoaW5nTW9kdWxlUXVldWUgPSBmYWxzZTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGlzUmVzb2x2ZWREZWNsYXJhdGlvbihkZWNsYXJhdGlvbikge1xuICBpZiAoQXJyYXkuaXNBcnJheShkZWNsYXJhdGlvbikpIHtcbiAgICByZXR1cm4gZGVjbGFyYXRpb24uZXZlcnkoaXNSZXNvbHZlZERlY2xhcmF0aW9uKTtcbiAgfVxuICByZXR1cm4gISFyZXNvbHZlRm9yd2FyZFJlZihkZWNsYXJhdGlvbik7XG59XG5mdW5jdGlvbiBjb21waWxlTmdNb2R1bGUobW9kdWxlVHlwZSwgbmdNb2R1bGUgPSB7fSkge1xuICBjb21waWxlTmdNb2R1bGVEZWZzKG1vZHVsZVR5cGUsIG5nTW9kdWxlKTtcbiAgaWYgKG5nTW9kdWxlLmlkICE9PSB1bmRlZmluZWQpIHtcbiAgICByZWdpc3Rlck5nTW9kdWxlVHlwZShtb2R1bGVUeXBlLCBuZ01vZHVsZS5pZCk7XG4gIH1cbiAgZW5xdWV1ZU1vZHVsZUZvckRlbGF5ZWRTY29waW5nKG1vZHVsZVR5cGUsIG5nTW9kdWxlKTtcbn1cbmZ1bmN0aW9uIGNvbXBpbGVOZ01vZHVsZURlZnMobW9kdWxlVHlwZSwgbmdNb2R1bGUsIGFsbG93RHVwbGljYXRlRGVjbGFyYXRpb25zSW5Sb290ID0gZmFsc2UpIHtcbiAgbmdEZXZNb2RlICYmIGFzc2VydERlZmluZWQobW9kdWxlVHlwZSwgJ1JlcXVpcmVkIHZhbHVlIG1vZHVsZVR5cGUnKTtcbiAgbmdEZXZNb2RlICYmIGFzc2VydERlZmluZWQobmdNb2R1bGUsICdSZXF1aXJlZCB2YWx1ZSBuZ01vZHVsZScpO1xuICBjb25zdCBkZWNsYXJhdGlvbnMgPSBmbGF0dGVuKG5nTW9kdWxlLmRlY2xhcmF0aW9ucyB8fCBFTVBUWV9BUlJBWSk7XG4gIGxldCBuZ01vZHVsZURlZiA9IG51bGw7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2R1bGVUeXBlLCBOR19NT0RfREVGLCB7XG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGdldDogKCkgPT4ge1xuICAgICAgaWYgKG5nTW9kdWxlRGVmID09PSBudWxsKSB7XG4gICAgICAgIGlmIChuZ0Rldk1vZGUgJiYgbmdNb2R1bGUuaW1wb3J0cyAmJiBuZ01vZHVsZS5pbXBvcnRzLmluZGV4T2YobW9kdWxlVHlwZSkgPiAtMSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJyR7c3RyaW5naWZ5Rm9yRXJyb3IobW9kdWxlVHlwZSl9JyBtb2R1bGUgY2FuJ3QgaW1wb3J0IGl0c2VsZmApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbXBpbGVyID0gZ2V0Q29tcGlsZXJGYWNhZGUoe1xuICAgICAgICAgIHVzYWdlOiAwLFxuICAgICAgICAgIGtpbmQ6ICdOZ01vZHVsZScsXG4gICAgICAgICAgdHlwZTogbW9kdWxlVHlwZVxuICAgICAgICB9KTtcbiAgICAgICAgbmdNb2R1bGVEZWYgPSBjb21waWxlci5jb21waWxlTmdNb2R1bGUoYW5ndWxhckNvcmVFbnYsIGBuZzovLy8ke21vZHVsZVR5cGUubmFtZX0vybVtb2QuanNgLCB7XG4gICAgICAgICAgdHlwZTogbW9kdWxlVHlwZSxcbiAgICAgICAgICBib290c3RyYXA6IGZsYXR0ZW4obmdNb2R1bGUuYm9vdHN0cmFwIHx8IEVNUFRZX0FSUkFZKS5tYXAocmVzb2x2ZUZvcndhcmRSZWYpLFxuICAgICAgICAgIGRlY2xhcmF0aW9uczogZGVjbGFyYXRpb25zLm1hcChyZXNvbHZlRm9yd2FyZFJlZiksXG4gICAgICAgICAgaW1wb3J0czogZmxhdHRlbihuZ01vZHVsZS5pbXBvcnRzIHx8IEVNUFRZX0FSUkFZKS5tYXAocmVzb2x2ZUZvcndhcmRSZWYpLm1hcChleHBhbmRNb2R1bGVXaXRoUHJvdmlkZXJzKSxcbiAgICAgICAgICBleHBvcnRzOiBmbGF0dGVuKG5nTW9kdWxlLmV4cG9ydHMgfHwgRU1QVFlfQVJSQVkpLm1hcChyZXNvbHZlRm9yd2FyZFJlZikubWFwKGV4cGFuZE1vZHVsZVdpdGhQcm92aWRlcnMpLFxuICAgICAgICAgIHNjaGVtYXM6IG5nTW9kdWxlLnNjaGVtYXMgPyBmbGF0dGVuKG5nTW9kdWxlLnNjaGVtYXMpIDogbnVsbCxcbiAgICAgICAgICBpZDogbmdNb2R1bGUuaWQgfHwgbnVsbFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCFuZ01vZHVsZURlZi5zY2hlbWFzKSB7XG4gICAgICAgICAgbmdNb2R1bGVEZWYuc2NoZW1hcyA9IFtdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbmdNb2R1bGVEZWY7XG4gICAgfVxuICB9KTtcbiAgbGV0IG5nRmFjdG9yeURlZiA9IG51bGw7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2R1bGVUeXBlLCBOR19GQUNUT1JZX0RFRiwge1xuICAgIGdldDogKCkgPT4ge1xuICAgICAgaWYgKG5nRmFjdG9yeURlZiA9PT0gbnVsbCkge1xuICAgICAgICBjb25zdCBjb21waWxlciA9IGdldENvbXBpbGVyRmFjYWRlKHtcbiAgICAgICAgICB1c2FnZTogMCxcbiAgICAgICAgICBraW5kOiAnTmdNb2R1bGUnLFxuICAgICAgICAgIHR5cGU6IG1vZHVsZVR5cGVcbiAgICAgICAgfSk7XG4gICAgICAgIG5nRmFjdG9yeURlZiA9IGNvbXBpbGVyLmNvbXBpbGVGYWN0b3J5KGFuZ3VsYXJDb3JlRW52LCBgbmc6Ly8vJHttb2R1bGVUeXBlLm5hbWV9L8m1ZmFjLmpzYCwge1xuICAgICAgICAgIG5hbWU6IG1vZHVsZVR5cGUubmFtZSxcbiAgICAgICAgICB0eXBlOiBtb2R1bGVUeXBlLFxuICAgICAgICAgIGRlcHM6IHJlZmxlY3REZXBlbmRlbmNpZXMobW9kdWxlVHlwZSksXG4gICAgICAgICAgdGFyZ2V0OiBjb21waWxlci5GYWN0b3J5VGFyZ2V0Lk5nTW9kdWxlLFxuICAgICAgICAgIHR5cGVBcmd1bWVudENvdW50OiAwXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5nRmFjdG9yeURlZjtcbiAgICB9LFxuICAgIGNvbmZpZ3VyYWJsZTogISFuZ0Rldk1vZGVcbiAgfSk7XG4gIGxldCBuZ0luamVjdG9yRGVmID0gbnVsbDtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZVR5cGUsIE5HX0lOSl9ERUYsIHtcbiAgICBnZXQ6ICgpID0+IHtcbiAgICAgIGlmIChuZ0luamVjdG9yRGVmID09PSBudWxsKSB7XG4gICAgICAgIG5nRGV2TW9kZSAmJiB2ZXJpZnlTZW1hbnRpY3NPZk5nTW9kdWxlRGVmKG1vZHVsZVR5cGUsIGFsbG93RHVwbGljYXRlRGVjbGFyYXRpb25zSW5Sb290KTtcbiAgICAgICAgY29uc3QgbWV0YSA9IHtcbiAgICAgICAgICBuYW1lOiBtb2R1bGVUeXBlLm5hbWUsXG4gICAgICAgICAgdHlwZTogbW9kdWxlVHlwZSxcbiAgICAgICAgICBwcm92aWRlcnM6IG5nTW9kdWxlLnByb3ZpZGVycyB8fCBFTVBUWV9BUlJBWSxcbiAgICAgICAgICBpbXBvcnRzOiBbKG5nTW9kdWxlLmltcG9ydHMgfHwgRU1QVFlfQVJSQVkpLm1hcChyZXNvbHZlRm9yd2FyZFJlZiksIChuZ01vZHVsZS5leHBvcnRzIHx8IEVNUFRZX0FSUkFZKS5tYXAocmVzb2x2ZUZvcndhcmRSZWYpXVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBjb21waWxlciA9IGdldENvbXBpbGVyRmFjYWRlKHtcbiAgICAgICAgICB1c2FnZTogMCxcbiAgICAgICAgICBraW5kOiAnTmdNb2R1bGUnLFxuICAgICAgICAgIHR5cGU6IG1vZHVsZVR5cGVcbiAgICAgICAgfSk7XG4gICAgICAgIG5nSW5qZWN0b3JEZWYgPSBjb21waWxlci5jb21waWxlSW5qZWN0b3IoYW5ndWxhckNvcmVFbnYsIGBuZzovLy8ke21vZHVsZVR5cGUubmFtZX0vybVpbmouanNgLCBtZXRhKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBuZ0luamVjdG9yRGVmO1xuICAgIH0sXG4gICAgY29uZmlndXJhYmxlOiAhIW5nRGV2TW9kZVxuICB9KTtcbn1cbmZ1bmN0aW9uIGdlbmVyYXRlU3RhbmRhbG9uZUluRGVjbGFyYXRpb25zRXJyb3IodHlwZSwgbG9jYXRpb24pIHtcbiAgY29uc3QgcHJlZml4ID0gYFVuZXhwZWN0ZWQgXCIke3N0cmluZ2lmeUZvckVycm9yKHR5cGUpfVwiIGZvdW5kIGluIHRoZSBcImRlY2xhcmF0aW9uc1wiIGFycmF5IG9mIHRoZWA7XG4gIGNvbnN0IHN1ZmZpeCA9IGBcIiR7c3RyaW5naWZ5Rm9yRXJyb3IodHlwZSl9XCIgaXMgbWFya2VkIGFzIHN0YW5kYWxvbmUgYW5kIGNhbid0IGJlIGRlY2xhcmVkIGAgKyAnaW4gYW55IE5nTW9kdWxlIC0gZGlkIHlvdSBpbnRlbmQgdG8gaW1wb3J0IGl0IGluc3RlYWQgKGJ5IGFkZGluZyBpdCB0byB0aGUgXCJpbXBvcnRzXCIgYXJyYXkpPyc7XG4gIHJldHVybiBgJHtwcmVmaXh9ICR7bG9jYXRpb259LCAke3N1ZmZpeH1gO1xufVxuZnVuY3Rpb24gdmVyaWZ5U2VtYW50aWNzT2ZOZ01vZHVsZURlZihtb2R1bGVUeXBlLCBhbGxvd0R1cGxpY2F0ZURlY2xhcmF0aW9uc0luUm9vdCwgaW1wb3J0aW5nTW9kdWxlKSB7XG4gIGlmICh2ZXJpZmllZE5nTW9kdWxlLmdldChtb2R1bGVUeXBlKSkgcmV0dXJuO1xuICBpZiAoaXNTdGFuZGFsb25lKG1vZHVsZVR5cGUpKSByZXR1cm47XG4gIHZlcmlmaWVkTmdNb2R1bGUuc2V0KG1vZHVsZVR5cGUsIHRydWUpO1xuICBtb2R1bGVUeXBlID0gcmVzb2x2ZUZvcndhcmRSZWYobW9kdWxlVHlwZSk7XG4gIGxldCBuZ01vZHVsZURlZjtcbiAgaWYgKGltcG9ydGluZ01vZHVsZSkge1xuICAgIG5nTW9kdWxlRGVmID0gZ2V0TmdNb2R1bGVEZWYobW9kdWxlVHlwZSk7XG4gICAgaWYgKCFuZ01vZHVsZURlZikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIHZhbHVlICcke21vZHVsZVR5cGUubmFtZX0nIGltcG9ydGVkIGJ5IHRoZSBtb2R1bGUgJyR7aW1wb3J0aW5nTW9kdWxlLm5hbWV9Jy4gUGxlYXNlIGFkZCBhbiBATmdNb2R1bGUgYW5ub3RhdGlvbi5gKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbmdNb2R1bGVEZWYgPSBnZXROZ01vZHVsZURlZk9yVGhyb3cobW9kdWxlVHlwZSk7XG4gIH1cbiAgY29uc3QgZXJyb3JzID0gW107XG4gIGNvbnN0IGRlY2xhcmF0aW9ucyA9IG1heWJlVW53cmFwRm4obmdNb2R1bGVEZWYuZGVjbGFyYXRpb25zKTtcbiAgY29uc3QgaW1wb3J0cyA9IG1heWJlVW53cmFwRm4obmdNb2R1bGVEZWYuaW1wb3J0cyk7XG4gIGZsYXR0ZW4oaW1wb3J0cykubWFwKHVud3JhcE1vZHVsZVdpdGhQcm92aWRlcnNJbXBvcnRzKS5mb3JFYWNoKG1vZE9yU3RhbmRhbG9uZUNtcHQgPT4ge1xuICAgIHZlcmlmeVNlbWFudGljc09mTmdNb2R1bGVJbXBvcnQobW9kT3JTdGFuZGFsb25lQ21wdCwgbW9kdWxlVHlwZSk7XG4gICAgdmVyaWZ5U2VtYW50aWNzT2ZOZ01vZHVsZURlZihtb2RPclN0YW5kYWxvbmVDbXB0LCBmYWxzZSwgbW9kdWxlVHlwZSk7XG4gIH0pO1xuICBjb25zdCBleHBvcnRzID0gbWF5YmVVbndyYXBGbihuZ01vZHVsZURlZi5leHBvcnRzKTtcbiAgZGVjbGFyYXRpb25zLmZvckVhY2godmVyaWZ5RGVjbGFyYXRpb25zSGF2ZURlZmluaXRpb25zKTtcbiAgZGVjbGFyYXRpb25zLmZvckVhY2godmVyaWZ5RGlyZWN0aXZlc0hhdmVTZWxlY3Rvcik7XG4gIGRlY2xhcmF0aW9ucy5mb3JFYWNoKGRlY2xhcmF0aW9uVHlwZSA9PiB2ZXJpZnlOb3RTdGFuZGFsb25lKGRlY2xhcmF0aW9uVHlwZSwgbW9kdWxlVHlwZSkpO1xuICBjb25zdCBjb21iaW5lZERlY2xhcmF0aW9ucyA9IFsuLi5kZWNsYXJhdGlvbnMubWFwKHJlc29sdmVGb3J3YXJkUmVmKSwgLi4uZmxhdHRlbihpbXBvcnRzLm1hcChjb21wdXRlQ29tYmluZWRFeHBvcnRzKSkubWFwKHJlc29sdmVGb3J3YXJkUmVmKV07XG4gIGV4cG9ydHMuZm9yRWFjaCh2ZXJpZnlFeHBvcnRzQXJlRGVjbGFyZWRPclJlRXhwb3J0ZWQpO1xuICBkZWNsYXJhdGlvbnMuZm9yRWFjaChkZWNsID0+IHZlcmlmeURlY2xhcmF0aW9uSXNVbmlxdWUoZGVjbCwgYWxsb3dEdXBsaWNhdGVEZWNsYXJhdGlvbnNJblJvb3QpKTtcbiAgY29uc3QgbmdNb2R1bGUgPSBnZXRBbm5vdGF0aW9uKG1vZHVsZVR5cGUsICdOZ01vZHVsZScpO1xuICBpZiAobmdNb2R1bGUpIHtcbiAgICBuZ01vZHVsZS5pbXBvcnRzICYmIGZsYXR0ZW4obmdNb2R1bGUuaW1wb3J0cykubWFwKHVud3JhcE1vZHVsZVdpdGhQcm92aWRlcnNJbXBvcnRzKS5mb3JFYWNoKG1vZCA9PiB7XG4gICAgICB2ZXJpZnlTZW1hbnRpY3NPZk5nTW9kdWxlSW1wb3J0KG1vZCwgbW9kdWxlVHlwZSk7XG4gICAgICB2ZXJpZnlTZW1hbnRpY3NPZk5nTW9kdWxlRGVmKG1vZCwgZmFsc2UsIG1vZHVsZVR5cGUpO1xuICAgIH0pO1xuICAgIG5nTW9kdWxlLmJvb3RzdHJhcCAmJiBkZWVwRm9yRWFjaChuZ01vZHVsZS5ib290c3RyYXAsIHZlcmlmeUNvcnJlY3RCb290c3RyYXBUeXBlKTtcbiAgICBuZ01vZHVsZS5ib290c3RyYXAgJiYgZGVlcEZvckVhY2gobmdNb2R1bGUuYm9vdHN0cmFwLCB2ZXJpZnlDb21wb25lbnRJc1BhcnRPZk5nTW9kdWxlKTtcbiAgfVxuICBpZiAoZXJyb3JzLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBFcnJvcihlcnJvcnMuam9pbignXFxuJykpO1xuICB9XG4gIGZ1bmN0aW9uIHZlcmlmeURlY2xhcmF0aW9uc0hhdmVEZWZpbml0aW9ucyh0eXBlKSB7XG4gICAgdHlwZSA9IHJlc29sdmVGb3J3YXJkUmVmKHR5cGUpO1xuICAgIGNvbnN0IGRlZiA9IGdldENvbXBvbmVudERlZih0eXBlKSB8fCBnZXREaXJlY3RpdmVEZWYodHlwZSkgfHwgZ2V0UGlwZURlZiQxKHR5cGUpO1xuICAgIGlmICghZGVmKSB7XG4gICAgICBlcnJvcnMucHVzaChgVW5leHBlY3RlZCB2YWx1ZSAnJHtzdHJpbmdpZnlGb3JFcnJvcih0eXBlKX0nIGRlY2xhcmVkIGJ5IHRoZSBtb2R1bGUgJyR7c3RyaW5naWZ5Rm9yRXJyb3IobW9kdWxlVHlwZSl9Jy4gUGxlYXNlIGFkZCBhIEBQaXBlL0BEaXJlY3RpdmUvQENvbXBvbmVudCBhbm5vdGF0aW9uLmApO1xuICAgIH1cbiAgfVxuICBmdW5jdGlvbiB2ZXJpZnlEaXJlY3RpdmVzSGF2ZVNlbGVjdG9yKHR5cGUpIHtcbiAgICB0eXBlID0gcmVzb2x2ZUZvcndhcmRSZWYodHlwZSk7XG4gICAgY29uc3QgZGVmID0gZ2V0RGlyZWN0aXZlRGVmKHR5cGUpO1xuICAgIGlmICghZ2V0Q29tcG9uZW50RGVmKHR5cGUpICYmIGRlZiAmJiBkZWYuc2VsZWN0b3JzLmxlbmd0aCA9PSAwKSB7XG4gICAgICBlcnJvcnMucHVzaChgRGlyZWN0aXZlICR7c3RyaW5naWZ5Rm9yRXJyb3IodHlwZSl9IGhhcyBubyBzZWxlY3RvciwgcGxlYXNlIGFkZCBpdCFgKTtcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gdmVyaWZ5Tm90U3RhbmRhbG9uZSh0eXBlLCBtb2R1bGVUeXBlKSB7XG4gICAgdHlwZSA9IHJlc29sdmVGb3J3YXJkUmVmKHR5cGUpO1xuICAgIGNvbnN0IGRlZiA9IGdldENvbXBvbmVudERlZih0eXBlKSB8fCBnZXREaXJlY3RpdmVEZWYodHlwZSkgfHwgZ2V0UGlwZURlZiQxKHR5cGUpO1xuICAgIGlmIChkZWY/LnN0YW5kYWxvbmUpIHtcbiAgICAgIGNvbnN0IGxvY2F0aW9uID0gYFwiJHtzdHJpbmdpZnlGb3JFcnJvcihtb2R1bGVUeXBlKX1cIiBOZ01vZHVsZWA7XG4gICAgICBlcnJvcnMucHVzaChnZW5lcmF0ZVN0YW5kYWxvbmVJbkRlY2xhcmF0aW9uc0Vycm9yKHR5cGUsIGxvY2F0aW9uKSk7XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIHZlcmlmeUV4cG9ydHNBcmVEZWNsYXJlZE9yUmVFeHBvcnRlZCh0eXBlKSB7XG4gICAgdHlwZSA9IHJlc29sdmVGb3J3YXJkUmVmKHR5cGUpO1xuICAgIGNvbnN0IGtpbmQgPSBnZXRDb21wb25lbnREZWYodHlwZSkgJiYgJ2NvbXBvbmVudCcgfHwgZ2V0RGlyZWN0aXZlRGVmKHR5cGUpICYmICdkaXJlY3RpdmUnIHx8IGdldFBpcGVEZWYkMSh0eXBlKSAmJiAncGlwZSc7XG4gICAgaWYgKGtpbmQpIHtcbiAgICAgIGlmIChjb21iaW5lZERlY2xhcmF0aW9ucy5sYXN0SW5kZXhPZih0eXBlKSA9PT0gLTEpIHtcbiAgICAgICAgZXJyb3JzLnB1c2goYENhbid0IGV4cG9ydCAke2tpbmR9ICR7c3RyaW5naWZ5Rm9yRXJyb3IodHlwZSl9IGZyb20gJHtzdHJpbmdpZnlGb3JFcnJvcihtb2R1bGVUeXBlKX0gYXMgaXQgd2FzIG5laXRoZXIgZGVjbGFyZWQgbm9yIGltcG9ydGVkIWApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBmdW5jdGlvbiB2ZXJpZnlEZWNsYXJhdGlvbklzVW5pcXVlKHR5cGUsIHN1cHByZXNzRXJyb3JzKSB7XG4gICAgdHlwZSA9IHJlc29sdmVGb3J3YXJkUmVmKHR5cGUpO1xuICAgIGNvbnN0IGV4aXN0aW5nTW9kdWxlID0gb3duZXJOZ01vZHVsZS5nZXQodHlwZSk7XG4gICAgaWYgKGV4aXN0aW5nTW9kdWxlICYmIGV4aXN0aW5nTW9kdWxlICE9PSBtb2R1bGVUeXBlKSB7XG4gICAgICBpZiAoIXN1cHByZXNzRXJyb3JzKSB7XG4gICAgICAgIGNvbnN0IG1vZHVsZXMgPSBbZXhpc3RpbmdNb2R1bGUsIG1vZHVsZVR5cGVdLm1hcChzdHJpbmdpZnlGb3JFcnJvcikuc29ydCgpO1xuICAgICAgICBlcnJvcnMucHVzaChgVHlwZSAke3N0cmluZ2lmeUZvckVycm9yKHR5cGUpfSBpcyBwYXJ0IG9mIHRoZSBkZWNsYXJhdGlvbnMgb2YgMiBtb2R1bGVzOiAke21vZHVsZXNbMF19IGFuZCAke21vZHVsZXNbMV19ISBgICsgYFBsZWFzZSBjb25zaWRlciBtb3ZpbmcgJHtzdHJpbmdpZnlGb3JFcnJvcih0eXBlKX0gdG8gYSBoaWdoZXIgbW9kdWxlIHRoYXQgaW1wb3J0cyAke21vZHVsZXNbMF19IGFuZCAke21vZHVsZXNbMV19LiBgICsgYFlvdSBjYW4gYWxzbyBjcmVhdGUgYSBuZXcgTmdNb2R1bGUgdGhhdCBleHBvcnRzIGFuZCBpbmNsdWRlcyAke3N0cmluZ2lmeUZvckVycm9yKHR5cGUpfSB0aGVuIGltcG9ydCB0aGF0IE5nTW9kdWxlIGluICR7bW9kdWxlc1swXX0gYW5kICR7bW9kdWxlc1sxXX0uYCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG93bmVyTmdNb2R1bGUuc2V0KHR5cGUsIG1vZHVsZVR5cGUpO1xuICAgIH1cbiAgfVxuICBmdW5jdGlvbiB2ZXJpZnlDb21wb25lbnRJc1BhcnRPZk5nTW9kdWxlKHR5cGUpIHtcbiAgICB0eXBlID0gcmVzb2x2ZUZvcndhcmRSZWYodHlwZSk7XG4gICAgY29uc3QgZXhpc3RpbmdNb2R1bGUgPSBvd25lck5nTW9kdWxlLmdldCh0eXBlKTtcbiAgICBpZiAoIWV4aXN0aW5nTW9kdWxlICYmICFpc1N0YW5kYWxvbmUodHlwZSkpIHtcbiAgICAgIGVycm9ycy5wdXNoKGBDb21wb25lbnQgJHtzdHJpbmdpZnlGb3JFcnJvcih0eXBlKX0gaXMgbm90IHBhcnQgb2YgYW55IE5nTW9kdWxlIG9yIHRoZSBtb2R1bGUgaGFzIG5vdCBiZWVuIGltcG9ydGVkIGludG8geW91ciBtb2R1bGUuYCk7XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIHZlcmlmeUNvcnJlY3RCb290c3RyYXBUeXBlKHR5cGUpIHtcbiAgICB0eXBlID0gcmVzb2x2ZUZvcndhcmRSZWYodHlwZSk7XG4gICAgaWYgKCFnZXRDb21wb25lbnREZWYodHlwZSkpIHtcbiAgICAgIGVycm9ycy5wdXNoKGAke3N0cmluZ2lmeUZvckVycm9yKHR5cGUpfSBjYW5ub3QgYmUgdXNlZCBhcyBhbiBlbnRyeSBjb21wb25lbnQuYCk7XG4gICAgfVxuICAgIGlmIChpc1N0YW5kYWxvbmUodHlwZSkpIHtcbiAgICAgIGVycm9ycy5wdXNoKGBUaGUgXFxgJHtzdHJpbmdpZnlGb3JFcnJvcih0eXBlKX1cXGAgY2xhc3MgaXMgYSBzdGFuZGFsb25lIGNvbXBvbmVudCwgd2hpY2ggY2FuIGAgKyBgbm90IGJlIHVzZWQgaW4gdGhlIFxcYEBOZ01vZHVsZS5ib290c3RyYXBcXGAgYXJyYXkuIFVzZSB0aGUgXFxgYm9vdHN0cmFwQXBwbGljYXRpb25cXGAgYCArIGBmdW5jdGlvbiBmb3IgYm9vdHN0cmFwIGluc3RlYWQuYCk7XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIHZlcmlmeVNlbWFudGljc09mTmdNb2R1bGVJbXBvcnQodHlwZSwgaW1wb3J0aW5nTW9kdWxlKSB7XG4gICAgdHlwZSA9IHJlc29sdmVGb3J3YXJkUmVmKHR5cGUpO1xuICAgIGNvbnN0IGRpcmVjdGl2ZURlZiA9IGdldENvbXBvbmVudERlZih0eXBlKSB8fCBnZXREaXJlY3RpdmVEZWYodHlwZSk7XG4gICAgaWYgKGRpcmVjdGl2ZURlZiAhPT0gbnVsbCAmJiAhZGlyZWN0aXZlRGVmLnN0YW5kYWxvbmUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5leHBlY3RlZCBkaXJlY3RpdmUgJyR7dHlwZS5uYW1lfScgaW1wb3J0ZWQgYnkgdGhlIG1vZHVsZSAnJHtpbXBvcnRpbmdNb2R1bGUubmFtZX0nLiBQbGVhc2UgYWRkIGFuIEBOZ01vZHVsZSBhbm5vdGF0aW9uLmApO1xuICAgIH1cbiAgICBjb25zdCBwaXBlRGVmID0gZ2V0UGlwZURlZiQxKHR5cGUpO1xuICAgIGlmIChwaXBlRGVmICE9PSBudWxsICYmICFwaXBlRGVmLnN0YW5kYWxvbmUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5leHBlY3RlZCBwaXBlICcke3R5cGUubmFtZX0nIGltcG9ydGVkIGJ5IHRoZSBtb2R1bGUgJyR7aW1wb3J0aW5nTW9kdWxlLm5hbWV9Jy4gUGxlYXNlIGFkZCBhbiBATmdNb2R1bGUgYW5ub3RhdGlvbi5gKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIHVud3JhcE1vZHVsZVdpdGhQcm92aWRlcnNJbXBvcnRzKHR5cGVPcldpdGhQcm92aWRlcnMpIHtcbiAgdHlwZU9yV2l0aFByb3ZpZGVycyA9IHJlc29sdmVGb3J3YXJkUmVmKHR5cGVPcldpdGhQcm92aWRlcnMpO1xuICByZXR1cm4gdHlwZU9yV2l0aFByb3ZpZGVycy5uZ01vZHVsZSB8fCB0eXBlT3JXaXRoUHJvdmlkZXJzO1xufVxuZnVuY3Rpb24gZ2V0QW5ub3RhdGlvbih0eXBlLCBuYW1lKSB7XG4gIGxldCBhbm5vdGF0aW9uID0gbnVsbDtcbiAgY29sbGVjdCh0eXBlLl9fYW5ub3RhdGlvbnNfXyk7XG4gIGNvbGxlY3QodHlwZS5kZWNvcmF0b3JzKTtcbiAgcmV0dXJuIGFubm90YXRpb247XG4gIGZ1bmN0aW9uIGNvbGxlY3QoYW5ub3RhdGlvbnMpIHtcbiAgICBpZiAoYW5ub3RhdGlvbnMpIHtcbiAgICAgIGFubm90YXRpb25zLmZvckVhY2gocmVhZEFubm90YXRpb24pO1xuICAgIH1cbiAgfVxuICBmdW5jdGlvbiByZWFkQW5ub3RhdGlvbihkZWNvcmF0b3IpIHtcbiAgICBpZiAoIWFubm90YXRpb24pIHtcbiAgICAgIGNvbnN0IHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKGRlY29yYXRvcik7XG4gICAgICBpZiAocHJvdG8ubmdNZXRhZGF0YU5hbWUgPT0gbmFtZSkge1xuICAgICAgICBhbm5vdGF0aW9uID0gZGVjb3JhdG9yO1xuICAgICAgfSBlbHNlIGlmIChkZWNvcmF0b3IudHlwZSkge1xuICAgICAgICBjb25zdCBwcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihkZWNvcmF0b3IudHlwZSk7XG4gICAgICAgIGlmIChwcm90by5uZ01ldGFkYXRhTmFtZSA9PSBuYW1lKSB7XG4gICAgICAgICAgYW5ub3RhdGlvbiA9IGRlY29yYXRvci5hcmdzWzBdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5sZXQgb3duZXJOZ01vZHVsZSA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha01hcCgpO1xubGV0IHZlcmlmaWVkTmdNb2R1bGUgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbmZ1bmN0aW9uIHJlc2V0Q29tcGlsZWRDb21wb25lbnRzKCkge1xuICBvd25lck5nTW9kdWxlID0gbmV3IFdlYWtNYXAoKTtcbiAgdmVyaWZpZWROZ01vZHVsZSA9IG5ldyBXZWFrTWFwKCk7XG4gIG1vZHVsZVF1ZXVlLmxlbmd0aCA9IDA7XG4gIEdFTkVSQVRFRF9DT01QX0lEUy5jbGVhcigpO1xufVxuZnVuY3Rpb24gY29tcHV0ZUNvbWJpbmVkRXhwb3J0cyh0eXBlKSB7XG4gIHR5cGUgPSByZXNvbHZlRm9yd2FyZFJlZih0eXBlKTtcbiAgY29uc3QgbmdNb2R1bGVEZWYgPSBnZXROZ01vZHVsZURlZih0eXBlKTtcbiAgaWYgKG5nTW9kdWxlRGVmID09PSBudWxsKSB7XG4gICAgcmV0dXJuIFt0eXBlXTtcbiAgfVxuICByZXR1cm4gZmxhdHRlbihtYXliZVVud3JhcEZuKG5nTW9kdWxlRGVmLmV4cG9ydHMpLm1hcCh0eXBlID0+IHtcbiAgICBjb25zdCBuZ01vZHVsZURlZiA9IGdldE5nTW9kdWxlRGVmKHR5cGUpO1xuICAgIGlmIChuZ01vZHVsZURlZikge1xuICAgICAgdmVyaWZ5U2VtYW50aWNzT2ZOZ01vZHVsZURlZih0eXBlLCBmYWxzZSk7XG4gICAgICByZXR1cm4gY29tcHV0ZUNvbWJpbmVkRXhwb3J0cyh0eXBlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHR5cGU7XG4gICAgfVxuICB9KSk7XG59XG5mdW5jdGlvbiBzZXRTY29wZU9uRGVjbGFyZWRDb21wb25lbnRzKG1vZHVsZVR5cGUsIG5nTW9kdWxlKSB7XG4gIGNvbnN0IGRlY2xhcmF0aW9ucyA9IGZsYXR0ZW4obmdNb2R1bGUuZGVjbGFyYXRpb25zIHx8IEVNUFRZX0FSUkFZKTtcbiAgY29uc3QgdHJhbnNpdGl2ZVNjb3BlcyA9IHRyYW5zaXRpdmVTY29wZXNGb3IobW9kdWxlVHlwZSk7XG4gIGRlY2xhcmF0aW9ucy5mb3JFYWNoKGRlY2xhcmF0aW9uID0+IHtcbiAgICBkZWNsYXJhdGlvbiA9IHJlc29sdmVGb3J3YXJkUmVmKGRlY2xhcmF0aW9uKTtcbiAgICBpZiAoZGVjbGFyYXRpb24uaGFzT3duUHJvcGVydHkoTkdfQ09NUF9ERUYpKSB7XG4gICAgICBjb25zdCBjb21wb25lbnQgPSBkZWNsYXJhdGlvbjtcbiAgICAgIGNvbnN0IGNvbXBvbmVudERlZiA9IGdldENvbXBvbmVudERlZihjb21wb25lbnQpO1xuICAgICAgcGF0Y2hDb21wb25lbnREZWZXaXRoU2NvcGUoY29tcG9uZW50RGVmLCB0cmFuc2l0aXZlU2NvcGVzKTtcbiAgICB9IGVsc2UgaWYgKCFkZWNsYXJhdGlvbi5oYXNPd25Qcm9wZXJ0eShOR19ESVJfREVGKSAmJiAhZGVjbGFyYXRpb24uaGFzT3duUHJvcGVydHkoTkdfUElQRV9ERUYpKSB7XG4gICAgICBkZWNsYXJhdGlvbi5uZ1NlbGVjdG9yU2NvcGUgPSBtb2R1bGVUeXBlO1xuICAgIH1cbiAgfSk7XG59XG5mdW5jdGlvbiBwYXRjaENvbXBvbmVudERlZldpdGhTY29wZShjb21wb25lbnREZWYsIHRyYW5zaXRpdmVTY29wZXMpIHtcbiAgY29tcG9uZW50RGVmLmRpcmVjdGl2ZURlZnMgPSAoKSA9PiBBcnJheS5mcm9tKHRyYW5zaXRpdmVTY29wZXMuY29tcGlsYXRpb24uZGlyZWN0aXZlcykubWFwKGRpciA9PiBkaXIuaGFzT3duUHJvcGVydHkoTkdfQ09NUF9ERUYpID8gZ2V0Q29tcG9uZW50RGVmKGRpcikgOiBnZXREaXJlY3RpdmVEZWYoZGlyKSkuZmlsdGVyKGRlZiA9PiAhIWRlZik7XG4gIGNvbXBvbmVudERlZi5waXBlRGVmcyA9ICgpID0+IEFycmF5LmZyb20odHJhbnNpdGl2ZVNjb3Blcy5jb21waWxhdGlvbi5waXBlcykubWFwKHBpcGUgPT4gZ2V0UGlwZURlZiQxKHBpcGUpKTtcbiAgY29tcG9uZW50RGVmLnNjaGVtYXMgPSB0cmFuc2l0aXZlU2NvcGVzLnNjaGVtYXM7XG4gIGNvbXBvbmVudERlZi50VmlldyA9IG51bGw7XG59XG5mdW5jdGlvbiB0cmFuc2l0aXZlU2NvcGVzRm9yKHR5cGUpIHtcbiAgaWYgKGlzTmdNb2R1bGUodHlwZSkpIHtcbiAgICBjb25zdCBzY29wZSA9IGRlcHNUcmFja2VyLmdldE5nTW9kdWxlU2NvcGUodHlwZSk7XG4gICAgY29uc3QgZGVmID0gZ2V0TmdNb2R1bGVEZWZPclRocm93KHR5cGUpO1xuICAgIHJldHVybiB7XG4gICAgICBzY2hlbWFzOiBkZWYuc2NoZW1hcyB8fCBudWxsLFxuICAgICAgLi4uc2NvcGVcbiAgICB9O1xuICB9IGVsc2UgaWYgKGlzU3RhbmRhbG9uZSh0eXBlKSkge1xuICAgIGNvbnN0IGRpcmVjdGl2ZURlZiA9IGdldENvbXBvbmVudERlZih0eXBlKSB8fCBnZXREaXJlY3RpdmVEZWYodHlwZSk7XG4gICAgaWYgKGRpcmVjdGl2ZURlZiAhPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc2NoZW1hczogbnVsbCxcbiAgICAgICAgY29tcGlsYXRpb246IHtcbiAgICAgICAgICBkaXJlY3RpdmVzOiBuZXcgU2V0KCksXG4gICAgICAgICAgcGlwZXM6IG5ldyBTZXQoKVxuICAgICAgICB9LFxuICAgICAgICBleHBvcnRlZDoge1xuICAgICAgICAgIGRpcmVjdGl2ZXM6IG5ldyBTZXQoW3R5cGVdKSxcbiAgICAgICAgICBwaXBlczogbmV3IFNldCgpXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IHBpcGVEZWYgPSBnZXRQaXBlRGVmJDEodHlwZSk7XG4gICAgaWYgKHBpcGVEZWYgIT09IG51bGwpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNjaGVtYXM6IG51bGwsXG4gICAgICAgIGNvbXBpbGF0aW9uOiB7XG4gICAgICAgICAgZGlyZWN0aXZlczogbmV3IFNldCgpLFxuICAgICAgICAgIHBpcGVzOiBuZXcgU2V0KClcbiAgICAgICAgfSxcbiAgICAgICAgZXhwb3J0ZWQ6IHtcbiAgICAgICAgICBkaXJlY3RpdmVzOiBuZXcgU2V0KCksXG4gICAgICAgICAgcGlwZXM6IG5ldyBTZXQoW3R5cGVdKVxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoYCR7dHlwZS5uYW1lfSBkb2VzIG5vdCBoYXZlIGEgbW9kdWxlIGRlZiAoybVtb2QgcHJvcGVydHkpYCk7XG59XG5mdW5jdGlvbiBleHBhbmRNb2R1bGVXaXRoUHJvdmlkZXJzKHZhbHVlKSB7XG4gIGlmIChpc01vZHVsZVdpdGhQcm92aWRlcnModmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlLm5nTW9kdWxlO1xuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cbmxldCBjb21waWxhdGlvbkRlcHRoID0gMDtcbmZ1bmN0aW9uIGNvbXBpbGVDb21wb25lbnQodHlwZSwgbWV0YWRhdGEpIHtcbiAgKHR5cGVvZiBuZ0Rldk1vZGUgPT09ICd1bmRlZmluZWQnIHx8IG5nRGV2TW9kZSkgJiYgaW5pdE5nRGV2TW9kZSgpO1xuICBsZXQgbmdDb21wb25lbnREZWYgPSBudWxsO1xuICBtYXliZVF1ZXVlUmVzb2x1dGlvbk9mQ29tcG9uZW50UmVzb3VyY2VzKHR5cGUsIG1ldGFkYXRhKTtcbiAgYWRkRGlyZWN0aXZlRmFjdG9yeURlZih0eXBlLCBtZXRhZGF0YSk7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0eXBlLCBOR19DT01QX0RFRiwge1xuICAgIGdldDogKCkgPT4ge1xuICAgICAgaWYgKG5nQ29tcG9uZW50RGVmID09PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IGNvbXBpbGVyID0gZ2V0Q29tcGlsZXJGYWNhZGUoe1xuICAgICAgICAgIHVzYWdlOiAwLFxuICAgICAgICAgIGtpbmQ6ICdjb21wb25lbnQnLFxuICAgICAgICAgIHR5cGU6IHR5cGVcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChjb21wb25lbnROZWVkc1Jlc29sdXRpb24obWV0YWRhdGEpKSB7XG4gICAgICAgICAgY29uc3QgZXJyb3IgPSBbYENvbXBvbmVudCAnJHt0eXBlLm5hbWV9JyBpcyBub3QgcmVzb2x2ZWQ6YF07XG4gICAgICAgICAgaWYgKG1ldGFkYXRhLnRlbXBsYXRlVXJsKSB7XG4gICAgICAgICAgICBlcnJvci5wdXNoKGAgLSB0ZW1wbGF0ZVVybDogJHttZXRhZGF0YS50ZW1wbGF0ZVVybH1gKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKG1ldGFkYXRhLnN0eWxlVXJscyAmJiBtZXRhZGF0YS5zdHlsZVVybHMubGVuZ3RoKSB7XG4gICAgICAgICAgICBlcnJvci5wdXNoKGAgLSBzdHlsZVVybHM6ICR7SlNPTi5zdHJpbmdpZnkobWV0YWRhdGEuc3R5bGVVcmxzKX1gKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKG1ldGFkYXRhLnN0eWxlVXJsKSB7XG4gICAgICAgICAgICBlcnJvci5wdXNoKGAgLSBzdHlsZVVybDogJHttZXRhZGF0YS5zdHlsZVVybH1gKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZXJyb3IucHVzaChgRGlkIHlvdSBydW4gYW5kIHdhaXQgZm9yICdyZXNvbHZlQ29tcG9uZW50UmVzb3VyY2VzKCknP2ApO1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvci5qb2luKCdcXG4nKSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IGdldEppdE9wdGlvbnMoKTtcbiAgICAgICAgbGV0IHByZXNlcnZlV2hpdGVzcGFjZXMgPSBtZXRhZGF0YS5wcmVzZXJ2ZVdoaXRlc3BhY2VzO1xuICAgICAgICBpZiAocHJlc2VydmVXaGl0ZXNwYWNlcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaWYgKG9wdGlvbnMgIT09IG51bGwgJiYgb3B0aW9ucy5wcmVzZXJ2ZVdoaXRlc3BhY2VzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHByZXNlcnZlV2hpdGVzcGFjZXMgPSBvcHRpb25zLnByZXNlcnZlV2hpdGVzcGFjZXM7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHByZXNlcnZlV2hpdGVzcGFjZXMgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGVuY2Fwc3VsYXRpb24gPSBtZXRhZGF0YS5lbmNhcHN1bGF0aW9uO1xuICAgICAgICBpZiAoZW5jYXBzdWxhdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaWYgKG9wdGlvbnMgIT09IG51bGwgJiYgb3B0aW9ucy5kZWZhdWx0RW5jYXBzdWxhdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBlbmNhcHN1bGF0aW9uID0gb3B0aW9ucy5kZWZhdWx0RW5jYXBzdWxhdGlvbjtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZW5jYXBzdWxhdGlvbiA9IFZpZXdFbmNhcHN1bGF0aW9uLkVtdWxhdGVkO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0ZW1wbGF0ZVVybCA9IG1ldGFkYXRhLnRlbXBsYXRlVXJsIHx8IGBuZzovLy8ke3R5cGUubmFtZX0vdGVtcGxhdGUuaHRtbGA7XG4gICAgICAgIGNvbnN0IGJhc2VNZXRhID0gZGlyZWN0aXZlTWV0YWRhdGEodHlwZSwgbWV0YWRhdGEpO1xuICAgICAgICBjb25zdCBtZXRhID0ge1xuICAgICAgICAgIC4uLmJhc2VNZXRhLFxuICAgICAgICAgIHR5cGVTb3VyY2VTcGFuOiBjb21waWxlci5jcmVhdGVQYXJzZVNvdXJjZVNwYW4oJ0NvbXBvbmVudCcsIHR5cGUubmFtZSwgdGVtcGxhdGVVcmwpLFxuICAgICAgICAgIHRlbXBsYXRlOiBtZXRhZGF0YS50ZW1wbGF0ZSB8fCAnJyxcbiAgICAgICAgICBwcmVzZXJ2ZVdoaXRlc3BhY2VzLFxuICAgICAgICAgIHN0eWxlczogdHlwZW9mIG1ldGFkYXRhLnN0eWxlcyA9PT0gJ3N0cmluZycgPyBbbWV0YWRhdGEuc3R5bGVzXSA6IG1ldGFkYXRhLnN0eWxlcyB8fCBFTVBUWV9BUlJBWSxcbiAgICAgICAgICBhbmltYXRpb25zOiBtZXRhZGF0YS5hbmltYXRpb25zLFxuICAgICAgICAgIGRlY2xhcmF0aW9uczogW10sXG4gICAgICAgICAgY2hhbmdlRGV0ZWN0aW9uOiBtZXRhZGF0YS5jaGFuZ2VEZXRlY3Rpb24sXG4gICAgICAgICAgZW5jYXBzdWxhdGlvbixcbiAgICAgICAgICB2aWV3UHJvdmlkZXJzOiBtZXRhZGF0YS52aWV3UHJvdmlkZXJzIHx8IG51bGwsXG4gICAgICAgICAgaGFzRGlyZWN0aXZlRGVwZW5kZW5jaWVzOiAhYmFzZU1ldGEuaXNTdGFuZGFsb25lIHx8IG1ldGFkYXRhLmltcG9ydHMgIT0gbnVsbCAmJiBtZXRhZGF0YS5pbXBvcnRzLmxlbmd0aCA+IDBcbiAgICAgICAgfTtcbiAgICAgICAgY29tcGlsYXRpb25EZXB0aCsrO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGlmIChtZXRhLnVzZXNJbmhlcml0YW5jZSkge1xuICAgICAgICAgICAgYWRkRGlyZWN0aXZlRGVmVG9VbmRlY29yYXRlZFBhcmVudHModHlwZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIG5nQ29tcG9uZW50RGVmID0gY29tcGlsZXIuY29tcGlsZUNvbXBvbmVudChhbmd1bGFyQ29yZUVudiwgdGVtcGxhdGVVcmwsIG1ldGEpO1xuICAgICAgICAgIGlmIChtZXRhLmlzU3RhbmRhbG9uZSkge1xuICAgICAgICAgICAgY29uc3QgaW1wb3J0cyA9IGZsYXR0ZW4obWV0YWRhdGEuaW1wb3J0cyB8fCBFTVBUWV9BUlJBWSk7XG4gICAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICAgIGRpcmVjdGl2ZURlZnMsXG4gICAgICAgICAgICAgIHBpcGVEZWZzXG4gICAgICAgICAgICB9ID0gZ2V0U3RhbmRhbG9uZURlZkZ1bmN0aW9ucyh0eXBlLCBpbXBvcnRzKTtcbiAgICAgICAgICAgIG5nQ29tcG9uZW50RGVmLmRpcmVjdGl2ZURlZnMgPSBkaXJlY3RpdmVEZWZzO1xuICAgICAgICAgICAgbmdDb21wb25lbnREZWYucGlwZURlZnMgPSBwaXBlRGVmcztcbiAgICAgICAgICAgIG5nQ29tcG9uZW50RGVmLmRlcGVuZGVuY2llcyA9ICgpID0+IGltcG9ydHMubWFwKHJlc29sdmVGb3J3YXJkUmVmKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgY29tcGlsYXRpb25EZXB0aC0tO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb21waWxhdGlvbkRlcHRoID09PSAwKSB7XG4gICAgICAgICAgZmx1c2hNb2R1bGVTY29waW5nUXVldWVBc011Y2hBc1Bvc3NpYmxlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhhc1NlbGVjdG9yU2NvcGUodHlwZSkpIHtcbiAgICAgICAgICBjb25zdCBzY29wZXMgPSB0cmFuc2l0aXZlU2NvcGVzRm9yKHR5cGUubmdTZWxlY3RvclNjb3BlKTtcbiAgICAgICAgICBwYXRjaENvbXBvbmVudERlZldpdGhTY29wZShuZ0NvbXBvbmVudERlZiwgc2NvcGVzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWV0YWRhdGEuc2NoZW1hcykge1xuICAgICAgICAgIGlmIChtZXRhLmlzU3RhbmRhbG9uZSkge1xuICAgICAgICAgICAgbmdDb21wb25lbnREZWYuc2NoZW1hcyA9IG1ldGFkYXRhLnNjaGVtYXM7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlICdzY2hlbWFzJyB3YXMgc3BlY2lmaWVkIGZvciB0aGUgJHtzdHJpbmdpZnlGb3JFcnJvcih0eXBlKX0gYnV0IGlzIG9ubHkgdmFsaWQgb24gYSBjb21wb25lbnQgdGhhdCBpcyBzdGFuZGFsb25lLmApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChtZXRhLmlzU3RhbmRhbG9uZSkge1xuICAgICAgICAgIG5nQ29tcG9uZW50RGVmLnNjaGVtYXMgPSBbXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG5nQ29tcG9uZW50RGVmO1xuICAgIH0sXG4gICAgc2V0OiBkZWYgPT4ge1xuICAgICAgbmdDb21wb25lbnREZWYgPSBkZWY7XG4gICAgfSxcbiAgICBjb25maWd1cmFibGU6ICEhbmdEZXZNb2RlXG4gIH0pO1xufVxuZnVuY3Rpb24gZ2V0U3RhbmRhbG9uZURlZkZ1bmN0aW9ucyh0eXBlLCBpbXBvcnRzKSB7XG4gIGNvbnN0IGRpcmVjdGl2ZURlZnMgPSAoKSA9PiB7XG4gICAgaWYgKG5nRGV2TW9kZSkge1xuICAgICAgZm9yIChjb25zdCByYXdEZXAgb2YgaW1wb3J0cykge1xuICAgICAgICB2ZXJpZnlTdGFuZGFsb25lSW1wb3J0KHJhd0RlcCwgdHlwZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghaXNDb21wb25lbnQodHlwZSkpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgY29uc3Qgc2NvcGUgPSBkZXBzVHJhY2tlci5nZXRTdGFuZGFsb25lQ29tcG9uZW50U2NvcGUodHlwZSwgaW1wb3J0cyk7XG4gICAgcmV0dXJuIFsuLi5zY29wZS5jb21waWxhdGlvbi5kaXJlY3RpdmVzXS5tYXAocCA9PiBnZXRDb21wb25lbnREZWYocCkgfHwgZ2V0RGlyZWN0aXZlRGVmKHApKS5maWx0ZXIoZCA9PiBkICE9PSBudWxsKTtcbiAgfTtcbiAgY29uc3QgcGlwZURlZnMgPSAoKSA9PiB7XG4gICAgaWYgKG5nRGV2TW9kZSkge1xuICAgICAgZm9yIChjb25zdCByYXdEZXAgb2YgaW1wb3J0cykge1xuICAgICAgICB2ZXJpZnlTdGFuZGFsb25lSW1wb3J0KHJhd0RlcCwgdHlwZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghaXNDb21wb25lbnQodHlwZSkpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgY29uc3Qgc2NvcGUgPSBkZXBzVHJhY2tlci5nZXRTdGFuZGFsb25lQ29tcG9uZW50U2NvcGUodHlwZSwgaW1wb3J0cyk7XG4gICAgcmV0dXJuIFsuLi5zY29wZS5jb21waWxhdGlvbi5waXBlc10ubWFwKHAgPT4gZ2V0UGlwZURlZiQxKHApKS5maWx0ZXIoZCA9PiBkICE9PSBudWxsKTtcbiAgfTtcbiAgcmV0dXJuIHtcbiAgICBkaXJlY3RpdmVEZWZzLFxuICAgIHBpcGVEZWZzXG4gIH07XG59XG5mdW5jdGlvbiBoYXNTZWxlY3RvclNjb3BlKGNvbXBvbmVudCkge1xuICByZXR1cm4gY29tcG9uZW50Lm5nU2VsZWN0b3JTY29wZSAhPT0gdW5kZWZpbmVkO1xufVxuZnVuY3Rpb24gY29tcGlsZURpcmVjdGl2ZSh0eXBlLCBkaXJlY3RpdmUpIHtcbiAgbGV0IG5nRGlyZWN0aXZlRGVmID0gbnVsbDtcbiAgYWRkRGlyZWN0aXZlRmFjdG9yeURlZih0eXBlLCBkaXJlY3RpdmUgfHwge30pO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkodHlwZSwgTkdfRElSX0RFRiwge1xuICAgIGdldDogKCkgPT4ge1xuICAgICAgaWYgKG5nRGlyZWN0aXZlRGVmID09PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IG1ldGEgPSBnZXREaXJlY3RpdmVNZXRhZGF0YSh0eXBlLCBkaXJlY3RpdmUgfHwge30pO1xuICAgICAgICBjb25zdCBjb21waWxlciA9IGdldENvbXBpbGVyRmFjYWRlKHtcbiAgICAgICAgICB1c2FnZTogMCxcbiAgICAgICAgICBraW5kOiAnZGlyZWN0aXZlJyxcbiAgICAgICAgICB0eXBlXG4gICAgICAgIH0pO1xuICAgICAgICBuZ0RpcmVjdGl2ZURlZiA9IGNvbXBpbGVyLmNvbXBpbGVEaXJlY3RpdmUoYW5ndWxhckNvcmVFbnYsIG1ldGEuc291cmNlTWFwVXJsLCBtZXRhLm1ldGFkYXRhKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBuZ0RpcmVjdGl2ZURlZjtcbiAgICB9LFxuICAgIGNvbmZpZ3VyYWJsZTogISFuZ0Rldk1vZGVcbiAgfSk7XG59XG5mdW5jdGlvbiBnZXREaXJlY3RpdmVNZXRhZGF0YSh0eXBlLCBtZXRhZGF0YSkge1xuICBjb25zdCBuYW1lID0gdHlwZSAmJiB0eXBlLm5hbWU7XG4gIGNvbnN0IHNvdXJjZU1hcFVybCA9IGBuZzovLy8ke25hbWV9L8m1ZGlyLmpzYDtcbiAgY29uc3QgY29tcGlsZXIgPSBnZXRDb21waWxlckZhY2FkZSh7XG4gICAgdXNhZ2U6IDAsXG4gICAga2luZDogJ2RpcmVjdGl2ZScsXG4gICAgdHlwZVxuICB9KTtcbiAgY29uc3QgZmFjYWRlID0gZGlyZWN0aXZlTWV0YWRhdGEodHlwZSwgbWV0YWRhdGEpO1xuICBmYWNhZGUudHlwZVNvdXJjZVNwYW4gPSBjb21waWxlci5jcmVhdGVQYXJzZVNvdXJjZVNwYW4oJ0RpcmVjdGl2ZScsIG5hbWUsIHNvdXJjZU1hcFVybCk7XG4gIGlmIChmYWNhZGUudXNlc0luaGVyaXRhbmNlKSB7XG4gICAgYWRkRGlyZWN0aXZlRGVmVG9VbmRlY29yYXRlZFBhcmVudHModHlwZSk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBtZXRhZGF0YTogZmFjYWRlLFxuICAgIHNvdXJjZU1hcFVybFxuICB9O1xufVxuZnVuY3Rpb24gYWRkRGlyZWN0aXZlRmFjdG9yeURlZih0eXBlLCBtZXRhZGF0YSkge1xuICBsZXQgbmdGYWN0b3J5RGVmID0gbnVsbDtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHR5cGUsIE5HX0ZBQ1RPUllfREVGLCB7XG4gICAgZ2V0OiAoKSA9PiB7XG4gICAgICBpZiAobmdGYWN0b3J5RGVmID09PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IG1ldGEgPSBnZXREaXJlY3RpdmVNZXRhZGF0YSh0eXBlLCBtZXRhZGF0YSk7XG4gICAgICAgIGNvbnN0IGNvbXBpbGVyID0gZ2V0Q29tcGlsZXJGYWNhZGUoe1xuICAgICAgICAgIHVzYWdlOiAwLFxuICAgICAgICAgIGtpbmQ6ICdkaXJlY3RpdmUnLFxuICAgICAgICAgIHR5cGVcbiAgICAgICAgfSk7XG4gICAgICAgIG5nRmFjdG9yeURlZiA9IGNvbXBpbGVyLmNvbXBpbGVGYWN0b3J5KGFuZ3VsYXJDb3JlRW52LCBgbmc6Ly8vJHt0eXBlLm5hbWV9L8m1ZmFjLmpzYCwge1xuICAgICAgICAgIG5hbWU6IG1ldGEubWV0YWRhdGEubmFtZSxcbiAgICAgICAgICB0eXBlOiBtZXRhLm1ldGFkYXRhLnR5cGUsXG4gICAgICAgICAgdHlwZUFyZ3VtZW50Q291bnQ6IDAsXG4gICAgICAgICAgZGVwczogcmVmbGVjdERlcGVuZGVuY2llcyh0eXBlKSxcbiAgICAgICAgICB0YXJnZXQ6IGNvbXBpbGVyLkZhY3RvcnlUYXJnZXQuRGlyZWN0aXZlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5nRmFjdG9yeURlZjtcbiAgICB9LFxuICAgIGNvbmZpZ3VyYWJsZTogISFuZ0Rldk1vZGVcbiAgfSk7XG59XG5mdW5jdGlvbiBleHRlbmRzRGlyZWN0bHlGcm9tT2JqZWN0KHR5cGUpIHtcbiAgcmV0dXJuIE9iamVjdC5nZXRQcm90b3R5cGVPZih0eXBlLnByb3RvdHlwZSkgPT09IE9iamVjdC5wcm90b3R5cGU7XG59XG5mdW5jdGlvbiBkaXJlY3RpdmVNZXRhZGF0YSh0eXBlLCBtZXRhZGF0YSkge1xuICBjb25zdCByZWZsZWN0ID0gZ2V0UmVmbGVjdCgpO1xuICBjb25zdCBwcm9wTWV0YWRhdGEgPSByZWZsZWN0Lm93blByb3BNZXRhZGF0YSh0eXBlKTtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiB0eXBlLm5hbWUsXG4gICAgdHlwZTogdHlwZSxcbiAgICBzZWxlY3RvcjogbWV0YWRhdGEuc2VsZWN0b3IgIT09IHVuZGVmaW5lZCA/IG1ldGFkYXRhLnNlbGVjdG9yIDogbnVsbCxcbiAgICBob3N0OiBtZXRhZGF0YS5ob3N0IHx8IEVNUFRZX09CSixcbiAgICBwcm9wTWV0YWRhdGE6IHByb3BNZXRhZGF0YSxcbiAgICBpbnB1dHM6IG1ldGFkYXRhLmlucHV0cyB8fCBFTVBUWV9BUlJBWSxcbiAgICBvdXRwdXRzOiBtZXRhZGF0YS5vdXRwdXRzIHx8IEVNUFRZX0FSUkFZLFxuICAgIHF1ZXJpZXM6IGV4dHJhY3RRdWVyaWVzTWV0YWRhdGEodHlwZSwgcHJvcE1ldGFkYXRhLCBpc0NvbnRlbnRRdWVyeSksXG4gICAgbGlmZWN5Y2xlOiB7XG4gICAgICB1c2VzT25DaGFuZ2VzOiByZWZsZWN0Lmhhc0xpZmVjeWNsZUhvb2sodHlwZSwgJ25nT25DaGFuZ2VzJylcbiAgICB9LFxuICAgIGNvbnRyb2xDcmVhdGU6IG51bGwsXG4gICAgdHlwZVNvdXJjZVNwYW46IG51bGwsXG4gICAgdXNlc0luaGVyaXRhbmNlOiAhZXh0ZW5kc0RpcmVjdGx5RnJvbU9iamVjdCh0eXBlKSxcbiAgICBleHBvcnRBczogZXh0cmFjdEV4cG9ydEFzKG1ldGFkYXRhLmV4cG9ydEFzKSxcbiAgICBwcm92aWRlcnM6IG1ldGFkYXRhLnByb3ZpZGVycyB8fCBudWxsLFxuICAgIHZpZXdRdWVyaWVzOiBleHRyYWN0UXVlcmllc01ldGFkYXRhKHR5cGUsIHByb3BNZXRhZGF0YSwgaXNWaWV3UXVlcnkpLFxuICAgIGlzU3RhbmRhbG9uZTogbWV0YWRhdGEuc3RhbmRhbG9uZSA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6ICEhbWV0YWRhdGEuc3RhbmRhbG9uZSxcbiAgICBpc1NpZ25hbDogISFtZXRhZGF0YS5zaWduYWxzLFxuICAgIGhvc3REaXJlY3RpdmVzOiBtZXRhZGF0YS5ob3N0RGlyZWN0aXZlcz8ubWFwKGRpcmVjdGl2ZSA9PiB0eXBlb2YgZGlyZWN0aXZlID09PSAnZnVuY3Rpb24nID8ge1xuICAgICAgZGlyZWN0aXZlXG4gICAgfSA6IGRpcmVjdGl2ZSkgfHwgbnVsbFxuICB9O1xufVxuZnVuY3Rpb24gYWRkRGlyZWN0aXZlRGVmVG9VbmRlY29yYXRlZFBhcmVudHModHlwZSkge1xuICBjb25zdCBvYmpQcm90b3R5cGUgPSBPYmplY3QucHJvdG90eXBlO1xuICBsZXQgcGFyZW50ID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHR5cGUucHJvdG90eXBlKS5jb25zdHJ1Y3RvcjtcbiAgd2hpbGUgKHBhcmVudCAmJiBwYXJlbnQgIT09IG9ialByb3RvdHlwZSkge1xuICAgIGlmICghZ2V0RGlyZWN0aXZlRGVmKHBhcmVudCkgJiYgIWdldENvbXBvbmVudERlZihwYXJlbnQpICYmIHNob3VsZEFkZEFic3RyYWN0RGlyZWN0aXZlKHBhcmVudCkpIHtcbiAgICAgIGNvbXBpbGVEaXJlY3RpdmUocGFyZW50LCBudWxsKTtcbiAgICB9XG4gICAgcGFyZW50ID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHBhcmVudCk7XG4gIH1cbn1cbmZ1bmN0aW9uIGNvbnZlcnRUb1IzUXVlcnlQcmVkaWNhdGUoc2VsZWN0b3IpIHtcbiAgcmV0dXJuIHR5cGVvZiBzZWxlY3RvciA9PT0gJ3N0cmluZycgPyBzcGxpdEJ5Q29tbWEoc2VsZWN0b3IpIDogcmVzb2x2ZUZvcndhcmRSZWYoc2VsZWN0b3IpO1xufVxuZnVuY3Rpb24gY29udmVydFRvUjNRdWVyeU1ldGFkYXRhKHByb3BlcnR5TmFtZSwgYW5uKSB7XG4gIHJldHVybiB7XG4gICAgcHJvcGVydHlOYW1lOiBwcm9wZXJ0eU5hbWUsXG4gICAgcHJlZGljYXRlOiBjb252ZXJ0VG9SM1F1ZXJ5UHJlZGljYXRlKGFubi5zZWxlY3RvciksXG4gICAgZGVzY2VuZGFudHM6IGFubi5kZXNjZW5kYW50cyxcbiAgICBmaXJzdDogYW5uLmZpcnN0LFxuICAgIHJlYWQ6IGFubi5yZWFkID8gYW5uLnJlYWQgOiBudWxsLFxuICAgIHN0YXRpYzogISFhbm4uc3RhdGljLFxuICAgIGVtaXREaXN0aW5jdENoYW5nZXNPbmx5OiAhIWFubi5lbWl0RGlzdGluY3RDaGFuZ2VzT25seSxcbiAgICBpc1NpZ25hbDogISFhbm4uaXNTaWduYWxcbiAgfTtcbn1cbmZ1bmN0aW9uIGV4dHJhY3RRdWVyaWVzTWV0YWRhdGEodHlwZSwgcHJvcE1ldGFkYXRhLCBpc1F1ZXJ5QW5uKSB7XG4gIGNvbnN0IHF1ZXJpZXNNZXRhID0gW107XG4gIGZvciAoY29uc3QgZmllbGQgaW4gcHJvcE1ldGFkYXRhKSB7XG4gICAgaWYgKHByb3BNZXRhZGF0YS5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpIHtcbiAgICAgIGNvbnN0IGFubm90YXRpb25zID0gcHJvcE1ldGFkYXRhW2ZpZWxkXTtcbiAgICAgIGFubm90YXRpb25zLmZvckVhY2goYW5uID0+IHtcbiAgICAgICAgaWYgKGlzUXVlcnlBbm4oYW5uKSkge1xuICAgICAgICAgIGlmICghYW5uLnNlbGVjdG9yKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbid0IGNvbnN0cnVjdCBhIHF1ZXJ5IGZvciB0aGUgcHJvcGVydHkgXCIke2ZpZWxkfVwiIG9mIGAgKyBgXCIke3N0cmluZ2lmeUZvckVycm9yKHR5cGUpfVwiIHNpbmNlIHRoZSBxdWVyeSBzZWxlY3RvciB3YXNuJ3QgZGVmaW5lZC5gKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGFubm90YXRpb25zLnNvbWUoaXNJbnB1dEFubm90YXRpb24pKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBjb21iaW5lIEBJbnB1dCBkZWNvcmF0b3JzIHdpdGggcXVlcnkgZGVjb3JhdG9yc2ApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBxdWVyaWVzTWV0YS5wdXNoKGNvbnZlcnRUb1IzUXVlcnlNZXRhZGF0YShmaWVsZCwgYW5uKSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcXVlcmllc01ldGE7XG59XG5mdW5jdGlvbiBleHRyYWN0RXhwb3J0QXMoZXhwb3J0QXMpIHtcbiAgcmV0dXJuIGV4cG9ydEFzID09PSB1bmRlZmluZWQgPyBudWxsIDogc3BsaXRCeUNvbW1hKGV4cG9ydEFzKTtcbn1cbmZ1bmN0aW9uIGlzQ29udGVudFF1ZXJ5KHZhbHVlKSB7XG4gIGNvbnN0IG5hbWUgPSB2YWx1ZS5uZ01ldGFkYXRhTmFtZTtcbiAgcmV0dXJuIG5hbWUgPT09ICdDb250ZW50Q2hpbGQnIHx8IG5hbWUgPT09ICdDb250ZW50Q2hpbGRyZW4nO1xufVxuZnVuY3Rpb24gaXNWaWV3UXVlcnkodmFsdWUpIHtcbiAgY29uc3QgbmFtZSA9IHZhbHVlLm5nTWV0YWRhdGFOYW1lO1xuICByZXR1cm4gbmFtZSA9PT0gJ1ZpZXdDaGlsZCcgfHwgbmFtZSA9PT0gJ1ZpZXdDaGlsZHJlbic7XG59XG5mdW5jdGlvbiBpc0lucHV0QW5ub3RhdGlvbih2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUubmdNZXRhZGF0YU5hbWUgPT09ICdJbnB1dCc7XG59XG5mdW5jdGlvbiBzcGxpdEJ5Q29tbWEodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlLnNwbGl0KCcsJykubWFwKHBpZWNlID0+IHBpZWNlLnRyaW0oKSk7XG59XG5jb25zdCBMSUZFQ1lDTEVfSE9PS1MgPSBbJ25nT25DaGFuZ2VzJywgJ25nT25Jbml0JywgJ25nT25EZXN0cm95JywgJ25nRG9DaGVjaycsICduZ0FmdGVyVmlld0luaXQnLCAnbmdBZnRlclZpZXdDaGVja2VkJywgJ25nQWZ0ZXJDb250ZW50SW5pdCcsICduZ0FmdGVyQ29udGVudENoZWNrZWQnXTtcbmZ1bmN0aW9uIHNob3VsZEFkZEFic3RyYWN0RGlyZWN0aXZlKHR5cGUpIHtcbiAgY29uc3QgcmVmbGVjdCA9IGdldFJlZmxlY3QoKTtcbiAgaWYgKExJRkVDWUNMRV9IT09LUy5zb21lKGhvb2tOYW1lID0+IHJlZmxlY3QuaGFzTGlmZWN5Y2xlSG9vayh0eXBlLCBob29rTmFtZSkpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgY29uc3QgcHJvcE1ldGFkYXRhID0gcmVmbGVjdC5wcm9wTWV0YWRhdGEodHlwZSk7XG4gIGZvciAoY29uc3QgZmllbGQgaW4gcHJvcE1ldGFkYXRhKSB7XG4gICAgY29uc3QgYW5ub3RhdGlvbnMgPSBwcm9wTWV0YWRhdGFbZmllbGRdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYW5ub3RhdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGN1cnJlbnQgPSBhbm5vdGF0aW9uc1tpXTtcbiAgICAgIGNvbnN0IG1ldGFkYXRhTmFtZSA9IGN1cnJlbnQubmdNZXRhZGF0YU5hbWU7XG4gICAgICBpZiAoaXNJbnB1dEFubm90YXRpb24oY3VycmVudCkgfHwgaXNDb250ZW50UXVlcnkoY3VycmVudCkgfHwgaXNWaWV3UXVlcnkoY3VycmVudCkgfHwgbWV0YWRhdGFOYW1lID09PSAnT3V0cHV0JyB8fCBtZXRhZGF0YU5hbWUgPT09ICdIb3N0QmluZGluZycgfHwgbWV0YWRhdGFOYW1lID09PSAnSG9zdExpc3RlbmVyJykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gY29tcGlsZVBpcGUodHlwZSwgbWV0YSkge1xuICBsZXQgbmdQaXBlRGVmID0gbnVsbDtcbiAgbGV0IG5nRmFjdG9yeURlZiA9IG51bGw7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0eXBlLCBOR19GQUNUT1JZX0RFRiwge1xuICAgIGdldDogKCkgPT4ge1xuICAgICAgaWYgKG5nRmFjdG9yeURlZiA9PT0gbnVsbCkge1xuICAgICAgICBjb25zdCBtZXRhZGF0YSA9IGdldFBpcGVNZXRhZGF0YSh0eXBlLCBtZXRhKTtcbiAgICAgICAgY29uc3QgY29tcGlsZXIgPSBnZXRDb21waWxlckZhY2FkZSh7XG4gICAgICAgICAgdXNhZ2U6IDAsXG4gICAgICAgICAga2luZDogJ3BpcGUnLFxuICAgICAgICAgIHR5cGU6IG1ldGFkYXRhLnR5cGVcbiAgICAgICAgfSk7XG4gICAgICAgIG5nRmFjdG9yeURlZiA9IGNvbXBpbGVyLmNvbXBpbGVGYWN0b3J5KGFuZ3VsYXJDb3JlRW52LCBgbmc6Ly8vJHttZXRhZGF0YS5uYW1lfS/JtWZhYy5qc2AsIHtcbiAgICAgICAgICBuYW1lOiBtZXRhZGF0YS5uYW1lLFxuICAgICAgICAgIHR5cGU6IG1ldGFkYXRhLnR5cGUsXG4gICAgICAgICAgdHlwZUFyZ3VtZW50Q291bnQ6IDAsXG4gICAgICAgICAgZGVwczogcmVmbGVjdERlcGVuZGVuY2llcyh0eXBlKSxcbiAgICAgICAgICB0YXJnZXQ6IGNvbXBpbGVyLkZhY3RvcnlUYXJnZXQuUGlwZVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBuZ0ZhY3RvcnlEZWY7XG4gICAgfSxcbiAgICBjb25maWd1cmFibGU6ICEhbmdEZXZNb2RlXG4gIH0pO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkodHlwZSwgTkdfUElQRV9ERUYsIHtcbiAgICBnZXQ6ICgpID0+IHtcbiAgICAgIGlmIChuZ1BpcGVEZWYgPT09IG51bGwpIHtcbiAgICAgICAgY29uc3QgbWV0YWRhdGEgPSBnZXRQaXBlTWV0YWRhdGEodHlwZSwgbWV0YSk7XG4gICAgICAgIGNvbnN0IGNvbXBpbGVyID0gZ2V0Q29tcGlsZXJGYWNhZGUoe1xuICAgICAgICAgIHVzYWdlOiAwLFxuICAgICAgICAgIGtpbmQ6ICdwaXBlJyxcbiAgICAgICAgICB0eXBlOiBtZXRhZGF0YS50eXBlXG4gICAgICAgIH0pO1xuICAgICAgICBuZ1BpcGVEZWYgPSBjb21waWxlci5jb21waWxlUGlwZShhbmd1bGFyQ29yZUVudiwgYG5nOi8vLyR7bWV0YWRhdGEubmFtZX0vybVwaXBlLmpzYCwgbWV0YWRhdGEpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5nUGlwZURlZjtcbiAgICB9LFxuICAgIGNvbmZpZ3VyYWJsZTogISFuZ0Rldk1vZGVcbiAgfSk7XG59XG5mdW5jdGlvbiBnZXRQaXBlTWV0YWRhdGEodHlwZSwgbWV0YSkge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IHR5cGUsXG4gICAgbmFtZTogdHlwZS5uYW1lLFxuICAgIHBpcGVOYW1lOiBtZXRhLm5hbWUsXG4gICAgcHVyZTogbWV0YS5wdXJlICE9PSB1bmRlZmluZWQgPyBtZXRhLnB1cmUgOiB0cnVlLFxuICAgIGlzU3RhbmRhbG9uZTogbWV0YS5zdGFuZGFsb25lID09PSB1bmRlZmluZWQgPyB0cnVlIDogISFtZXRhLnN0YW5kYWxvbmVcbiAgfTtcbn1cbmNvbnN0IERpcmVjdGl2ZSA9IC8qI19fUFVSRV9fKi9tYWtlRGVjb3JhdG9yKCdEaXJlY3RpdmUnLCAoZGlyID0ge30pID0+IGRpciwgdW5kZWZpbmVkLCB1bmRlZmluZWQsICh0eXBlLCBtZXRhKSA9PiBjb21waWxlRGlyZWN0aXZlKHR5cGUsIG1ldGEpKTtcbmNvbnN0IENvbXBvbmVudCA9IC8qI19fUFVSRV9fKi9tYWtlRGVjb3JhdG9yKCdDb21wb25lbnQnLCAoYyA9IHt9KSA9PiAoe1xuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LkVhZ2VyLFxuICAuLi5jXG59KSwgRGlyZWN0aXZlLCB1bmRlZmluZWQsICh0eXBlLCBtZXRhKSA9PiBjb21waWxlQ29tcG9uZW50KHR5cGUsIG1ldGEpKTtcbmNvbnN0IFBpcGUgPSAvKiNfX1BVUkVfXyovbWFrZURlY29yYXRvcignUGlwZScsIHAgPT4gKHtcbiAgcHVyZTogdHJ1ZSxcbiAgLi4ucFxufSksIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCAodHlwZSwgbWV0YSkgPT4gY29tcGlsZVBpcGUodHlwZSwgbWV0YSkpO1xuY29uc3QgSW5wdXQgPSAvKiNfX1BVUkVfXyovbWFrZVByb3BEZWNvcmF0b3IoJ0lucHV0JywgYXJnID0+IHtcbiAgaWYgKCFhcmcpIHtcbiAgICByZXR1cm4ge307XG4gIH1cbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdzdHJpbmcnID8ge1xuICAgIGFsaWFzOiBhcmdcbiAgfSA6IGFyZztcbn0pO1xuY29uc3QgT3V0cHV0ID0gLyojX19QVVJFX18qL21ha2VQcm9wRGVjb3JhdG9yKCdPdXRwdXQnLCBhbGlhcyA9PiAoe1xuICBhbGlhc1xufSkpO1xuY29uc3QgSG9zdEJpbmRpbmcgPSAvKiNfX1BVUkVfXyovbWFrZVByb3BEZWNvcmF0b3IoJ0hvc3RCaW5kaW5nJywgaG9zdFByb3BlcnR5TmFtZSA9PiAoe1xuICBob3N0UHJvcGVydHlOYW1lXG59KSk7XG5jb25zdCBIb3N0TGlzdGVuZXIgPSAvKiNfX1BVUkVfXyovbWFrZVByb3BEZWNvcmF0b3IoJ0hvc3RMaXN0ZW5lcicsIChldmVudE5hbWUsIGFyZ3MpID0+ICh7XG4gIGV2ZW50TmFtZSxcbiAgYXJnc1xufSkpO1xuY29uc3QgTmdNb2R1bGUgPSAvKiNfX1BVUkVfXyovbWFrZURlY29yYXRvcignTmdNb2R1bGUnLCBuZ01vZHVsZSA9PiBuZ01vZHVsZSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsICh0eXBlLCBtZXRhKSA9PiBjb21waWxlTmdNb2R1bGUodHlwZSwgbWV0YSkpO1xuY2xhc3MgTW9kdWxlV2l0aENvbXBvbmVudEZhY3RvcmllcyB7XG4gIG5nTW9kdWxlRmFjdG9yeTtcbiAgY29tcG9uZW50RmFjdG9yaWVzO1xuICBjb25zdHJ1Y3RvcihuZ01vZHVsZUZhY3RvcnksIGNvbXBvbmVudEZhY3Rvcmllcykge1xuICAgIHRoaXMubmdNb2R1bGVGYWN0b3J5ID0gbmdNb2R1bGVGYWN0b3J5O1xuICAgIHRoaXMuY29tcG9uZW50RmFjdG9yaWVzID0gY29tcG9uZW50RmFjdG9yaWVzO1xuICB9XG59XG5sZXQgQ29tcGlsZXIgPSAvKiNfX1BVUkVfXyovKCgpID0+IHtcbiAgY2xhc3MgQ29tcGlsZXIge1xuICAgIGNvbXBpbGVNb2R1bGVTeW5jKG1vZHVsZVR5cGUpIHtcbiAgICAgIHJldHVybiBuZXcgTmdNb2R1bGVGYWN0b3J5KG1vZHVsZVR5cGUpO1xuICAgIH1cbiAgICBjb21waWxlTW9kdWxlQXN5bmMobW9kdWxlVHlwZSkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLmNvbXBpbGVNb2R1bGVTeW5jKG1vZHVsZVR5cGUpKTtcbiAgICB9XG4gICAgY29tcGlsZU1vZHVsZUFuZEFsbENvbXBvbmVudHNTeW5jKG1vZHVsZVR5cGUpIHtcbiAgICAgIGNvbnN0IG5nTW9kdWxlRmFjdG9yeSA9IHRoaXMuY29tcGlsZU1vZHVsZVN5bmMobW9kdWxlVHlwZSk7XG4gICAgICBjb25zdCBtb2R1bGVEZWYgPSBnZXROZ01vZHVsZURlZihtb2R1bGVUeXBlKTtcbiAgICAgIGNvbnN0IGNvbXBvbmVudEZhY3RvcmllcyA9IG1heWJlVW53cmFwRm4obW9kdWxlRGVmLmRlY2xhcmF0aW9ucykucmVkdWNlKChmYWN0b3JpZXMsIGRlY2xhcmF0aW9uKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudERlZiA9IGdldENvbXBvbmVudERlZihkZWNsYXJhdGlvbik7XG4gICAgICAgIGNvbXBvbmVudERlZiAmJiBmYWN0b3JpZXMucHVzaChuZXcgQ29tcG9uZW50RmFjdG9yeShjb21wb25lbnREZWYpKTtcbiAgICAgICAgcmV0dXJuIGZhY3RvcmllcztcbiAgICAgIH0sIFtdKTtcbiAgICAgIHJldHVybiBuZXcgTW9kdWxlV2l0aENvbXBvbmVudEZhY3RvcmllcyhuZ01vZHVsZUZhY3RvcnksIGNvbXBvbmVudEZhY3Rvcmllcyk7XG4gICAgfVxuICAgIGNvbXBpbGVNb2R1bGVBbmRBbGxDb21wb25lbnRzQXN5bmMobW9kdWxlVHlwZSkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLmNvbXBpbGVNb2R1bGVBbmRBbGxDb21wb25lbnRzU3luYyhtb2R1bGVUeXBlKSk7XG4gICAgfVxuICAgIGNsZWFyQ2FjaGUoKSB7fVxuICAgIGNsZWFyQ2FjaGVGb3IodHlwZSkge31cbiAgICBnZXRNb2R1bGVJZChtb2R1bGVUeXBlKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBzdGF0aWMgybVmYWMgPSBmdW5jdGlvbiBDb21waWxlcl9GYWN0b3J5KF9fbmdGYWN0b3J5VHlwZV9fKSB7XG4gICAgICByZXR1cm4gbmV3IChfX25nRmFjdG9yeVR5cGVfXyB8fCBDb21waWxlcikoKTtcbiAgICB9O1xuICAgIHN0YXRpYyDJtXByb3YgPSAvKkBfX1BVUkVfXyovX19kZWZpbmVJbmplY3RhYmxlKHtcbiAgICAgIHRva2VuOiBDb21waWxlcixcbiAgICAgIGZhY3Rvcnk6IENvbXBpbGVyLsm1ZmFjLFxuICAgICAgcHJvdmlkZWRJbjogJ3Jvb3QnXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIENvbXBpbGVyO1xufSkoKTtcbi8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICAodHlwZW9mIG5nRGV2TW9kZSA9PT0gXCJ1bmRlZmluZWRcIiB8fCBuZ0Rldk1vZGUpICYmIHNldENsYXNzTWV0YWRhdGEoQ29tcGlsZXIsIFt7XG4gICAgdHlwZTogSW5qZWN0YWJsZSxcbiAgICBhcmdzOiBbe1xuICAgICAgcHJvdmlkZWRJbjogJ3Jvb3QnXG4gICAgfV1cbiAgfV0sIG51bGwsIG51bGwpO1xufSkoKTtcbmNvbnN0IENPTVBJTEVSX09QVElPTlMgPSAvKiNfX1BVUkVfXyovbmV3IEluamVjdGlvblRva2VuKHR5cGVvZiBuZ0Rldk1vZGUgIT09ICd1bmRlZmluZWQnICYmIG5nRGV2TW9kZSA/ICdjb21waWxlck9wdGlvbnMnIDogJycpO1xuY2xhc3MgQ29tcGlsZXJGYWN0b3J5IHt9XG5jb25zdCBDT05TRUNVVElWRV9NSUNST1RBU0tfTk9USUZJQ0FUSU9OX0xJTUlUID0gMTAwO1xubGV0IGNvbnNlY3V0aXZlTWljcm90YXNrTm90aWZpY2F0aW9ucyA9IDA7XG5sZXQgc3RhY2tGcm9tTGFzdEZld05vdGlmaWNhdGlvbnMgPSBbXTtcbmZ1bmN0aW9uIHRyYWNrTWljcm90YXNrTm90aWZpY2F0aW9uRm9yRGVidWdnaW5nKCkge1xuICBjb25zZWN1dGl2ZU1pY3JvdGFza05vdGlmaWNhdGlvbnMrKztcbiAgaWYgKENPTlNFQ1VUSVZFX01JQ1JPVEFTS19OT1RJRklDQVRJT05fTElNSVQgLSBjb25zZWN1dGl2ZU1pY3JvdGFza05vdGlmaWNhdGlvbnMgPCA1KSB7XG4gICAgY29uc3Qgc3RhY2sgPSBuZXcgRXJyb3IoKS5zdGFjaztcbiAgICBpZiAoc3RhY2spIHtcbiAgICAgIHN0YWNrRnJvbUxhc3RGZXdOb3RpZmljYXRpb25zLnB1c2goc3RhY2spO1xuICAgIH1cbiAgfVxuICBpZiAoY29uc2VjdXRpdmVNaWNyb3Rhc2tOb3RpZmljYXRpb25zID09PSBDT05TRUNVVElWRV9NSUNST1RBU0tfTk9USUZJQ0FUSU9OX0xJTUlUKSB7XG4gICAgdGhyb3cgbmV3IFJ1bnRpbWVFcnJvcigxMDMsICdBbmd1bGFyIGNvdWxkIG5vdCBzdGFiaWxpemUgYmVjYXVzZSB0aGVyZSB3ZXJlIGVuZGxlc3MgY2hhbmdlIG5vdGlmaWNhdGlvbnMgd2l0aGluIHRoZSBicm93c2VyIGV2ZW50IGxvb3AuICcgKyAnVGhlIHN0YWNrIGZyb20gdGhlIGxhc3Qgc2V2ZXJhbCBub3RpZmljYXRpb25zOiBcXG4nICsgc3RhY2tGcm9tTGFzdEZld05vdGlmaWNhdGlvbnMuam9pbignXFxuJykpO1xuICB9XG59XG5sZXQgQ2hhbmdlRGV0ZWN0aW9uU2NoZWR1bGVySW1wbCA9IC8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICBjbGFzcyBDaGFuZ2VEZXRlY3Rpb25TY2hlZHVsZXJJbXBsIHtcbiAgICBhcHBsaWNhdGlvbkVycm9ySGFuZGxlciA9IGluamVjdChJTlRFUk5BTF9BUFBMSUNBVElPTl9FUlJPUl9IQU5ETEVSKTtcbiAgICBhcHBSZWYgPSBpbmplY3QoQXBwbGljYXRpb25SZWYpO1xuICAgIHRhc2tTZXJ2aWNlID0gaW5qZWN0KFBlbmRpbmdUYXNrc0ludGVybmFsKTtcbiAgICBuZ1pvbmUgPSBpbmplY3QoTmdab25lKTtcbiAgICB6b25lbGVzc0VuYWJsZWQgPSBpbmplY3QoWk9ORUxFU1NfRU5BQkxFRCk7XG4gICAgdHJhY2luZyA9IGluamVjdChUcmFjaW5nU2VydmljZSwge1xuICAgICAgb3B0aW9uYWw6IHRydWVcbiAgICB9KTtcbiAgICB6b25lSXNEZWZpbmVkID0gdHlwZW9mIFpvbmUgIT09ICd1bmRlZmluZWQnICYmICEhWm9uZS5yb290LnJ1bjtcbiAgICBzY2hlZHVsZXJUaWNrQXBwbHlBcmdzID0gW3tcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgJ19fc2NoZWR1bGVyX3RpY2tfXyc6IHRydWVcbiAgICAgIH1cbiAgICB9XTtcbiAgICBzdWJzY3JpcHRpb25zID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICAgIGFuZ3VsYXJab25lSWQgPSB0aGlzLnpvbmVJc0RlZmluZWQgPyB0aGlzLm5nWm9uZS5faW5uZXI/LmdldChhbmd1bGFyWm9uZUluc3RhbmNlSWRQcm9wZXJ0eSkgOiBudWxsO1xuICAgIHNjaGVkdWxlSW5Sb290Wm9uZSA9ICF0aGlzLnpvbmVsZXNzRW5hYmxlZCAmJiB0aGlzLnpvbmVJc0RlZmluZWQgJiYgKGluamVjdChTQ0hFRFVMRV9JTl9ST09UX1pPTkUsIHtcbiAgICAgIG9wdGlvbmFsOiB0cnVlXG4gICAgfSkgPz8gZmFsc2UpO1xuICAgIGNhbmNlbFNjaGVkdWxlZENhbGxiYWNrID0gbnVsbDtcbiAgICB1c2VNaWNyb3Rhc2tTY2hlZHVsZXIgPSBmYWxzZTtcbiAgICBydW5uaW5nVGljayA9IGZhbHNlO1xuICAgIHBlbmRpbmdSZW5kZXJUYXNrSWQgPSBudWxsO1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZCh0aGlzLmFwcFJlZi5hZnRlclRpY2suc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgY29uc3QgdGFzayA9IHRoaXMudGFza1NlcnZpY2UuYWRkKCk7XG4gICAgICAgIGlmICghdGhpcy5ydW5uaW5nVGljaykge1xuICAgICAgICAgIHRoaXMuY2xlYW51cCgpO1xuICAgICAgICAgIGlmICghdGhpcy56b25lbGVzc0VuYWJsZWQgfHwgdGhpcy5hcHBSZWYuaW5jbHVkZUFsbFRlc3RWaWV3cykge1xuICAgICAgICAgICAgdGhpcy50YXNrU2VydmljZS5yZW1vdmUodGFzayk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3dpdGNoVG9NaWNyb3Rhc2tTY2hlZHVsZXIoKTtcbiAgICAgICAgdGhpcy50YXNrU2VydmljZS5yZW1vdmUodGFzayk7XG4gICAgICB9KSk7XG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKHRoaXMubmdab25lLm9uVW5zdGFibGUuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLnJ1bm5pbmdUaWNrKSB7XG4gICAgICAgICAgdGhpcy5jbGVhbnVwKCk7XG4gICAgICAgIH1cbiAgICAgIH0pKTtcbiAgICB9XG4gICAgc3dpdGNoVG9NaWNyb3Rhc2tTY2hlZHVsZXIoKSB7XG4gICAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgIGNvbnN0IHRhc2sgPSB0aGlzLnRhc2tTZXJ2aWNlLmFkZCgpO1xuICAgICAgICB0aGlzLnVzZU1pY3JvdGFza1NjaGVkdWxlciA9IHRydWU7XG4gICAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgICAgICB0aGlzLnVzZU1pY3JvdGFza1NjaGVkdWxlciA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMudGFza1NlcnZpY2UucmVtb3ZlKHRhc2spO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBub3RpZnkoc291cmNlKSB7XG4gICAgICBpZiAoIXRoaXMuem9uZWxlc3NFbmFibGVkICYmIHNvdXJjZSA9PT0gNSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBzd2l0Y2ggKHNvdXJjZSkge1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5hcHBSZWYuZGlydHlGbGFncyB8PSAyO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICBjYXNlIDM6XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICBjYXNlIDU6XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmFwcFJlZi5kaXJ0eUZsYWdzIHw9IDQ7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmFwcFJlZi5kaXJ0eUZsYWdzIHw9IDI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIGNhc2UgMTI6XG4gICAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5hcHBSZWYuZGlydHlGbGFncyB8PSAxNjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgY2FzZSAxMzpcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmFwcFJlZi5kaXJ0eUZsYWdzIHw9IDI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIGNhc2UgMTE6XG4gICAgICAgICAge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICBjYXNlIDk6XG4gICAgICAgIGNhc2UgODpcbiAgICAgICAgY2FzZSA3OlxuICAgICAgICBjYXNlIDEwOlxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYXBwUmVmLmRpcnR5RmxhZ3MgfD0gODtcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLmFwcFJlZi50cmFjaW5nU25hcHNob3QgPSB0aGlzLnRyYWNpbmc/LnNuYXBzaG90KHRoaXMuYXBwUmVmLnRyYWNpbmdTbmFwc2hvdCkgPz8gbnVsbDtcbiAgICAgIGlmICghdGhpcy5zaG91bGRTY2hlZHVsZVRpY2soKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIG5nRGV2TW9kZSA9PT0gJ3VuZGVmaW5lZCcgfHwgbmdEZXZNb2RlKSB7XG4gICAgICAgIGlmICh0aGlzLnVzZU1pY3JvdGFza1NjaGVkdWxlcikge1xuICAgICAgICAgIHRyYWNrTWljcm90YXNrTm90aWZpY2F0aW9uRm9yRGVidWdnaW5nKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc2VjdXRpdmVNaWNyb3Rhc2tOb3RpZmljYXRpb25zID0gMDtcbiAgICAgICAgICBzdGFja0Zyb21MYXN0RmV3Tm90aWZpY2F0aW9ucy5sZW5ndGggPSAwO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb25zdCBzY2hlZHVsZUNhbGxiYWNrID0gdGhpcy51c2VNaWNyb3Rhc2tTY2hlZHVsZXIgPyBzY2hlZHVsZUNhbGxiYWNrV2l0aE1pY3JvdGFzayA6IHNjaGVkdWxlQ2FsbGJhY2tXaXRoUmFmUmFjZTtcbiAgICAgIHRoaXMucGVuZGluZ1JlbmRlclRhc2tJZCA9IHRoaXMudGFza1NlcnZpY2UuYWRkKCk7XG4gICAgICBpZiAodGhpcy5zY2hlZHVsZUluUm9vdFpvbmUpIHtcbiAgICAgICAgdGhpcy5jYW5jZWxTY2hlZHVsZWRDYWxsYmFjayA9IFpvbmUucm9vdC5ydW4oKCkgPT4gc2NoZWR1bGVDYWxsYmFjaygoKSA9PiB0aGlzLnRpY2soKSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jYW5jZWxTY2hlZHVsZWRDYWxsYmFjayA9IHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHNjaGVkdWxlQ2FsbGJhY2soKCkgPT4gdGhpcy50aWNrKCkpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgc2hvdWxkU2NoZWR1bGVUaWNrKCkge1xuICAgICAgaWYgKHRoaXMuYXBwUmVmLmRlc3Ryb3llZCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5wZW5kaW5nUmVuZGVyVGFza0lkICE9PSBudWxsIHx8IHRoaXMucnVubmluZ1RpY2sgfHwgdGhpcy5hcHBSZWYuX3J1bm5pbmdUaWNrKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy56b25lbGVzc0VuYWJsZWQgJiYgdGhpcy56b25lSXNEZWZpbmVkICYmIFpvbmUuY3VycmVudC5nZXQoYW5ndWxhclpvbmVJbnN0YW5jZUlkUHJvcGVydHkgKyB0aGlzLmFuZ3VsYXJab25lSWQpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICB0aWNrKCkge1xuICAgICAgaWYgKHRoaXMucnVubmluZ1RpY2sgfHwgdGhpcy5hcHBSZWYuZGVzdHJveWVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmFwcFJlZi5kaXJ0eUZsYWdzID09PSAwKSB7XG4gICAgICAgIHRoaXMuY2xlYW51cCgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoIXRoaXMuem9uZWxlc3NFbmFibGVkICYmIHRoaXMuYXBwUmVmLmRpcnR5RmxhZ3MgJiA3KSB7XG4gICAgICAgIHRoaXMuYXBwUmVmLmRpcnR5RmxhZ3MgfD0gMTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHRhc2sgPSB0aGlzLnRhc2tTZXJ2aWNlLmFkZCgpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICB0aGlzLnJ1bm5pbmdUaWNrID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLmFwcFJlZi5fdGljaygpO1xuICAgICAgICB9LCB1bmRlZmluZWQsIHRoaXMuc2NoZWR1bGVyVGlja0FwcGx5QXJncyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRoaXMuYXBwbGljYXRpb25FcnJvckhhbmRsZXIoZSk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB0aGlzLnRhc2tTZXJ2aWNlLnJlbW92ZSh0YXNrKTtcbiAgICAgICAgdGhpcy5jbGVhbnVwKCk7XG4gICAgICB9XG4gICAgfVxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XG4gICAgICB0aGlzLmNsZWFudXAoKTtcbiAgICB9XG4gICAgY2xlYW51cCgpIHtcbiAgICAgIHRoaXMucnVubmluZ1RpY2sgPSBmYWxzZTtcbiAgICAgIHRoaXMuY2FuY2VsU2NoZWR1bGVkQ2FsbGJhY2s/LigpO1xuICAgICAgdGhpcy5jYW5jZWxTY2hlZHVsZWRDYWxsYmFjayA9IG51bGw7XG4gICAgICBpZiAodGhpcy5wZW5kaW5nUmVuZGVyVGFza0lkICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHRhc2tJZCA9IHRoaXMucGVuZGluZ1JlbmRlclRhc2tJZDtcbiAgICAgICAgdGhpcy5wZW5kaW5nUmVuZGVyVGFza0lkID0gbnVsbDtcbiAgICAgICAgdGhpcy50YXNrU2VydmljZS5yZW1vdmUodGFza0lkKTtcbiAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIMm1ZmFjID0gZnVuY3Rpb24gQ2hhbmdlRGV0ZWN0aW9uU2NoZWR1bGVySW1wbF9GYWN0b3J5KF9fbmdGYWN0b3J5VHlwZV9fKSB7XG4gICAgICByZXR1cm4gbmV3IChfX25nRmFjdG9yeVR5cGVfXyB8fCBDaGFuZ2VEZXRlY3Rpb25TY2hlZHVsZXJJbXBsKSgpO1xuICAgIH07XG4gICAgc3RhdGljIMm1cHJvdiA9IC8qQF9fUFVSRV9fKi9fX2RlZmluZUluamVjdGFibGUoe1xuICAgICAgdG9rZW46IENoYW5nZURldGVjdGlvblNjaGVkdWxlckltcGwsXG4gICAgICBmYWN0b3J5OiBDaGFuZ2VEZXRlY3Rpb25TY2hlZHVsZXJJbXBsLsm1ZmFjLFxuICAgICAgcHJvdmlkZWRJbjogJ3Jvb3QnXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIENoYW5nZURldGVjdGlvblNjaGVkdWxlckltcGw7XG59KSgpO1xuLyojX19QVVJFX18qLygoKSA9PiB7XG4gICh0eXBlb2YgbmdEZXZNb2RlID09PSBcInVuZGVmaW5lZFwiIHx8IG5nRGV2TW9kZSkgJiYgc2V0Q2xhc3NNZXRhZGF0YShDaGFuZ2VEZXRlY3Rpb25TY2hlZHVsZXJJbXBsLCBbe1xuICAgIHR5cGU6IEluamVjdGFibGUsXG4gICAgYXJnczogW3tcbiAgICAgIHByb3ZpZGVkSW46ICdyb290J1xuICAgIH1dXG4gIH1dLCAoKSA9PiBbXSwgbnVsbCk7XG59KSgpO1xuZnVuY3Rpb24gcHJvdmlkZVpvbmVsZXNzQ2hhbmdlRGV0ZWN0aW9uKCkge1xuICBwZXJmb3JtYW5jZU1hcmtGZWF0dXJlKCdOZ1pvbmVsZXNzJyk7XG4gIGlmICgodHlwZW9mIG5nRGV2TW9kZSA9PT0gJ3VuZGVmaW5lZCcgfHwgbmdEZXZNb2RlKSAmJiB0eXBlb2YgWm9uZSAhPT0gJ3VuZGVmaW5lZCcgJiYgWm9uZSkge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBmb3JtYXRSdW50aW1lRXJyb3IoOTE0LCBgVGhlIGFwcGxpY2F0aW9uIGlzIHVzaW5nIHpvbmVsZXNzIGNoYW5nZSBkZXRlY3Rpb24sIGJ1dCBpcyBzdGlsbCBsb2FkaW5nIFpvbmUuanMuIGAgKyBgQ29uc2lkZXIgcmVtb3ZpbmcgWm9uZS5qcyB0byBnZXQgdGhlIGZ1bGwgYmVuZWZpdHMgb2Ygem9uZWxlc3MuIGAgKyBgSW4gYXBwbGljYXRpb25zIHVzaW5nIHRoZSBBbmd1bGFyIENMSSwgWm9uZS5qcyBpcyB0eXBpY2FsbHkgaW5jbHVkZWQgaW4gdGhlIFwicG9seWZpbGxzXCIgc2VjdGlvbiBvZiB0aGUgYW5ndWxhci5qc29uIGZpbGUuYCk7XG4gICAgY29uc29sZS53YXJuKG1lc3NhZ2UpO1xuICB9XG4gIHJldHVybiBtYWtlRW52aXJvbm1lbnRQcm92aWRlcnMoWy4uLnByb3ZpZGVab25lbGVzc0NoYW5nZURldGVjdGlvbkludGVybmFsKCksIHR5cGVvZiBuZ0Rldk1vZGUgPT09ICd1bmRlZmluZWQnIHx8IG5nRGV2TW9kZSA/IFt7XG4gICAgcHJvdmlkZTogUFJPVklERURfWk9ORUxFU1MsXG4gICAgdXNlVmFsdWU6IHRydWVcbiAgfV0gOiBbXV0pO1xufVxuZnVuY3Rpb24gcHJvdmlkZVpvbmVsZXNzQ2hhbmdlRGV0ZWN0aW9uSW50ZXJuYWwoKSB7XG4gIHJldHVybiBbe1xuICAgIHByb3ZpZGU6IENoYW5nZURldGVjdGlvblNjaGVkdWxlcixcbiAgICB1c2VFeGlzdGluZzogQ2hhbmdlRGV0ZWN0aW9uU2NoZWR1bGVySW1wbFxuICB9LCB7XG4gICAgcHJvdmlkZTogTmdab25lLFxuICAgIHVzZUNsYXNzOiBOb29wTmdab25lXG4gIH0sIHtcbiAgICBwcm92aWRlOiBaT05FTEVTU19FTkFCTEVELFxuICAgIHVzZVZhbHVlOiB0cnVlXG4gIH1dO1xufVxuZnVuY3Rpb24gZ2V0R2xvYmFsTG9jYWxlKCkge1xuICBpZiAodHlwZW9mIG5nSTE4bkNsb3N1cmVNb2RlICE9PSAndW5kZWZpbmVkJyAmJiBuZ0kxOG5DbG9zdXJlTW9kZSAmJiB0eXBlb2YgZ29vZyAhPT0gJ3VuZGVmaW5lZCcgJiYgZ29vZy5MT0NBTEUgIT09ICdlbicpIHtcbiAgICByZXR1cm4gZ29vZy5MT0NBTEU7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHR5cGVvZiAkbG9jYWxpemUgIT09ICd1bmRlZmluZWQnICYmICRsb2NhbGl6ZS5sb2NhbGUgfHwgREVGQVVMVF9MT0NBTEVfSUQ7XG4gIH1cbn1cbmNvbnN0IExPQ0FMRV9JRCA9IC8qI19fUFVSRV9fKi9uZXcgSW5qZWN0aW9uVG9rZW4odHlwZW9mIG5nRGV2TW9kZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbmdEZXZNb2RlID8gJ0xvY2FsZUlkJyA6ICcnLCB7XG4gIGZhY3Rvcnk6ICgpID0+IGluamVjdChMT0NBTEVfSUQsIHtcbiAgICBvcHRpb25hbDogdHJ1ZSxcbiAgICBza2lwU2VsZjogdHJ1ZVxuICB9KSB8fCBnZXRHbG9iYWxMb2NhbGUoKVxufSk7XG5jb25zdCBERUZBVUxUX0NVUlJFTkNZX0NPREUgPSAvKiNfX1BVUkVfXyovbmV3IEluamVjdGlvblRva2VuKHR5cGVvZiBuZ0Rldk1vZGUgIT09ICd1bmRlZmluZWQnICYmIG5nRGV2TW9kZSA/ICdEZWZhdWx0Q3VycmVuY3lDb2RlJyA6ICcnLCB7XG4gIGZhY3Rvcnk6ICgpID0+IFVTRF9DVVJSRU5DWV9DT0RFXG59KTtcbmNvbnN0IFRSQU5TTEFUSU9OUyA9IC8qI19fUFVSRV9fKi9uZXcgSW5qZWN0aW9uVG9rZW4odHlwZW9mIG5nRGV2TW9kZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbmdEZXZNb2RlID8gJ1RyYW5zbGF0aW9ucycgOiAnJyk7XG5jb25zdCBUUkFOU0xBVElPTlNfRk9STUFUID0gLyojX19QVVJFX18qL25ldyBJbmplY3Rpb25Ub2tlbih0eXBlb2YgbmdEZXZNb2RlICE9PSAndW5kZWZpbmVkJyAmJiBuZ0Rldk1vZGUgPyAnVHJhbnNsYXRpb25zRm9ybWF0JyA6ICcnKTtcbnZhciBNaXNzaW5nVHJhbnNsYXRpb25TdHJhdGVneSA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoTWlzc2luZ1RyYW5zbGF0aW9uU3RyYXRlZ3kpIHtcbiAgTWlzc2luZ1RyYW5zbGF0aW9uU3RyYXRlZ3lbTWlzc2luZ1RyYW5zbGF0aW9uU3RyYXRlZ3lbXCJFcnJvclwiXSA9IDBdID0gXCJFcnJvclwiO1xuICBNaXNzaW5nVHJhbnNsYXRpb25TdHJhdGVneVtNaXNzaW5nVHJhbnNsYXRpb25TdHJhdGVneVtcIldhcm5pbmdcIl0gPSAxXSA9IFwiV2FybmluZ1wiO1xuICBNaXNzaW5nVHJhbnNsYXRpb25TdHJhdGVneVtNaXNzaW5nVHJhbnNsYXRpb25TdHJhdGVneVtcIklnbm9yZVwiXSA9IDJdID0gXCJJZ25vcmVcIjtcbiAgcmV0dXJuIE1pc3NpbmdUcmFuc2xhdGlvblN0cmF0ZWd5O1xufShNaXNzaW5nVHJhbnNsYXRpb25TdHJhdGVneSB8fCB7fSk7XG5jbGFzcyBEZWJ1Z0V2ZW50TGlzdGVuZXIge1xuICBuYW1lO1xuICBjYWxsYmFjaztcbiAgY29uc3RydWN0b3IobmFtZSwgY2FsbGJhY2spIHtcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgIHRoaXMuY2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgfVxufVxuZnVuY3Rpb24gYXNOYXRpdmVFbGVtZW50cyhkZWJ1Z0Vscykge1xuICByZXR1cm4gZGVidWdFbHMubWFwKGVsID0+IGVsLm5hdGl2ZUVsZW1lbnQpO1xufVxuY2xhc3MgRGVidWdOb2RlIHtcbiAgbmF0aXZlTm9kZTtcbiAgY29uc3RydWN0b3IobmF0aXZlTm9kZSkge1xuICAgIHRoaXMubmF0aXZlTm9kZSA9IG5hdGl2ZU5vZGU7XG4gIH1cbiAgZ2V0IHBhcmVudCgpIHtcbiAgICBjb25zdCBwYXJlbnQgPSB0aGlzLm5hdGl2ZU5vZGUucGFyZW50Tm9kZTtcbiAgICByZXR1cm4gcGFyZW50ID8gbmV3IERlYnVnRWxlbWVudChwYXJlbnQpIDogbnVsbDtcbiAgfVxuICBnZXQgaW5qZWN0b3IoKSB7XG4gICAgcmV0dXJuIGdldEluamVjdG9yKHRoaXMubmF0aXZlTm9kZSk7XG4gIH1cbiAgZ2V0IGNvbXBvbmVudEluc3RhbmNlKCkge1xuICAgIGNvbnN0IG5hdGl2ZUVsZW1lbnQgPSB0aGlzLm5hdGl2ZU5vZGU7XG4gICAgcmV0dXJuIG5hdGl2ZUVsZW1lbnQgJiYgKGdldENvbXBvbmVudChuYXRpdmVFbGVtZW50KSB8fCBnZXRPd25pbmdDb21wb25lbnQobmF0aXZlRWxlbWVudCkpO1xuICB9XG4gIGdldCBjb250ZXh0KCkge1xuICAgIHJldHVybiBnZXRDb21wb25lbnQodGhpcy5uYXRpdmVOb2RlKSB8fCBnZXRDb250ZXh0KHRoaXMubmF0aXZlTm9kZSk7XG4gIH1cbiAgZ2V0IGxpc3RlbmVycygpIHtcbiAgICByZXR1cm4gZ2V0TGlzdGVuZXJzKHRoaXMubmF0aXZlTm9kZSkuZmlsdGVyKGxpc3RlbmVyID0+IGxpc3RlbmVyLnR5cGUgPT09ICdkb20nKTtcbiAgfVxuICBnZXQgcmVmZXJlbmNlcygpIHtcbiAgICByZXR1cm4gZ2V0TG9jYWxSZWZzKHRoaXMubmF0aXZlTm9kZSk7XG4gIH1cbiAgZ2V0IHByb3ZpZGVyVG9rZW5zKCkge1xuICAgIHJldHVybiBnZXRJbmplY3Rpb25Ub2tlbnModGhpcy5uYXRpdmVOb2RlKTtcbiAgfVxufVxuY2xhc3MgRGVidWdFbGVtZW50IGV4dGVuZHMgRGVidWdOb2RlIHtcbiAgY29uc3RydWN0b3IobmF0aXZlTm9kZSkge1xuICAgIG5nRGV2TW9kZSAmJiBhc3NlcnREb21Ob2RlKG5hdGl2ZU5vZGUpO1xuICAgIHN1cGVyKG5hdGl2ZU5vZGUpO1xuICB9XG4gIGdldCBuYXRpdmVFbGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLm5hdGl2ZU5vZGUubm9kZVR5cGUgPT0gTm9kZS5FTEVNRU5UX05PREUgPyB0aGlzLm5hdGl2ZU5vZGUgOiBudWxsO1xuICB9XG4gIGdldCBuYW1lKCkge1xuICAgIGNvbnN0IGNvbnRleHQgPSBnZXRMQ29udGV4dCh0aGlzLm5hdGl2ZU5vZGUpO1xuICAgIGNvbnN0IGxWaWV3ID0gY29udGV4dCA/IGNvbnRleHQubFZpZXcgOiBudWxsO1xuICAgIGlmIChsVmlldyAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgdERhdGEgPSBsVmlld1tUVklFV10uZGF0YTtcbiAgICAgIGNvbnN0IHROb2RlID0gdERhdGFbY29udGV4dC5ub2RlSW5kZXhdO1xuICAgICAgcmV0dXJuIHROb2RlLnZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5uYXRpdmVOb2RlLm5vZGVOYW1lO1xuICAgIH1cbiAgfVxuICBnZXQgcHJvcGVydGllcygpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gZ2V0TENvbnRleHQodGhpcy5uYXRpdmVOb2RlKTtcbiAgICBjb25zdCBsVmlldyA9IGNvbnRleHQgPyBjb250ZXh0LmxWaWV3IDogbnVsbDtcbiAgICBpZiAobFZpZXcgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgY29uc3QgdERhdGEgPSBsVmlld1tUVklFV10uZGF0YTtcbiAgICBjb25zdCB0Tm9kZSA9IHREYXRhW2NvbnRleHQubm9kZUluZGV4XTtcbiAgICBjb25zdCBwcm9wZXJ0aWVzID0ge307XG4gICAgY29weURvbVByb3BlcnRpZXModGhpcy5uYXRpdmVFbGVtZW50LCBwcm9wZXJ0aWVzKTtcbiAgICBjb2xsZWN0UHJvcGVydHlCaW5kaW5ncyhwcm9wZXJ0aWVzLCB0Tm9kZSwgbFZpZXcsIHREYXRhKTtcbiAgICByZXR1cm4gcHJvcGVydGllcztcbiAgfVxuICBnZXQgYXR0cmlidXRlcygpIHtcbiAgICBjb25zdCBhdHRyaWJ1dGVzID0ge307XG4gICAgY29uc3QgZWxlbWVudCA9IHRoaXMubmF0aXZlRWxlbWVudDtcbiAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgIHJldHVybiBhdHRyaWJ1dGVzO1xuICAgIH1cbiAgICBjb25zdCBjb250ZXh0ID0gZ2V0TENvbnRleHQoZWxlbWVudCk7XG4gICAgY29uc3QgbFZpZXcgPSBjb250ZXh0ID8gY29udGV4dC5sVmlldyA6IG51bGw7XG4gICAgaWYgKGxWaWV3ID09PSBudWxsKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIGNvbnN0IHROb2RlQXR0cnMgPSBsVmlld1tUVklFV10uZGF0YVtjb250ZXh0Lm5vZGVJbmRleF0uYXR0cnM7XG4gICAgY29uc3QgbG93ZXJjYXNlVE5vZGVBdHRycyA9IFtdO1xuICAgIGlmICh0Tm9kZUF0dHJzKSB7XG4gICAgICBsZXQgaSA9IDA7XG4gICAgICB3aGlsZSAoaSA8IHROb2RlQXR0cnMubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IGF0dHJOYW1lID0gdE5vZGVBdHRyc1tpXTtcbiAgICAgICAgaWYgKHR5cGVvZiBhdHRyTmFtZSAhPT0gJ3N0cmluZycpIGJyZWFrO1xuICAgICAgICBjb25zdCBhdHRyVmFsdWUgPSB0Tm9kZUF0dHJzW2kgKyAxXTtcbiAgICAgICAgYXR0cmlidXRlc1thdHRyTmFtZV0gPSBhdHRyVmFsdWU7XG4gICAgICAgIGxvd2VyY2FzZVROb2RlQXR0cnMucHVzaChhdHRyTmFtZS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgaSArPSAyO1xuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKGNvbnN0IGF0dHIgb2YgZWxlbWVudC5hdHRyaWJ1dGVzKSB7XG4gICAgICBpZiAoIWxvd2VyY2FzZVROb2RlQXR0cnMuaW5jbHVkZXMoYXR0ci5uYW1lKSkge1xuICAgICAgICBhdHRyaWJ1dGVzW2F0dHIubmFtZV0gPSBhdHRyLnZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYXR0cmlidXRlcztcbiAgfVxuICBnZXQgc3R5bGVzKCkge1xuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLm5hdGl2ZUVsZW1lbnQ7XG4gICAgcmV0dXJuIGVsZW1lbnQ/LnN0eWxlID8/IHt9O1xuICB9XG4gIGdldCBjbGFzc2VzKCkge1xuICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLm5hdGl2ZUVsZW1lbnQ7XG4gICAgY29uc3QgY2xhc3NOYW1lID0gZWxlbWVudC5jbGFzc05hbWU7XG4gICAgY29uc3QgY2xhc3NlcyA9IHR5cGVvZiBjbGFzc05hbWUgIT09ICdzdHJpbmcnID8gY2xhc3NOYW1lLmJhc2VWYWwuc3BsaXQoJyAnKSA6IGNsYXNzTmFtZS5zcGxpdCgnICcpO1xuICAgIGNsYXNzZXMuZm9yRWFjaCh2YWx1ZSA9PiByZXN1bHRbdmFsdWVdID0gdHJ1ZSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBnZXQgY2hpbGROb2RlcygpIHtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gdGhpcy5uYXRpdmVOb2RlLmNoaWxkTm9kZXM7XG4gICAgY29uc3QgY2hpbGRyZW4gPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNoaWxkTm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSBjaGlsZE5vZGVzW2ldO1xuICAgICAgY2hpbGRyZW4ucHVzaChnZXREZWJ1Z05vZGUoZWxlbWVudCkpO1xuICAgIH1cbiAgICByZXR1cm4gY2hpbGRyZW47XG4gIH1cbiAgZ2V0IGNoaWxkcmVuKCkge1xuICAgIGNvbnN0IG5hdGl2ZUVsZW1lbnQgPSB0aGlzLm5hdGl2ZUVsZW1lbnQ7XG4gICAgaWYgKCFuYXRpdmVFbGVtZW50KSByZXR1cm4gW107XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IG5hdGl2ZUVsZW1lbnQuY2hpbGRyZW47XG4gICAgY29uc3QgY2hpbGRyZW4gPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNoaWxkTm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSBjaGlsZE5vZGVzW2ldO1xuICAgICAgY2hpbGRyZW4ucHVzaChnZXREZWJ1Z05vZGUoZWxlbWVudCkpO1xuICAgIH1cbiAgICByZXR1cm4gY2hpbGRyZW47XG4gIH1cbiAgcXVlcnkocHJlZGljYXRlKSB7XG4gICAgY29uc3QgcmVzdWx0cyA9IHRoaXMucXVlcnlBbGwocHJlZGljYXRlKTtcbiAgICByZXR1cm4gcmVzdWx0c1swXSB8fCBudWxsO1xuICB9XG4gIHF1ZXJ5QWxsKHByZWRpY2F0ZSkge1xuICAgIGNvbnN0IG1hdGNoZXMgPSBbXTtcbiAgICBfcXVlcnlBbGwodGhpcywgcHJlZGljYXRlLCBtYXRjaGVzLCB0cnVlKTtcbiAgICByZXR1cm4gbWF0Y2hlcztcbiAgfVxuICBxdWVyeUFsbE5vZGVzKHByZWRpY2F0ZSkge1xuICAgIGNvbnN0IG1hdGNoZXMgPSBbXTtcbiAgICBfcXVlcnlBbGwodGhpcywgcHJlZGljYXRlLCBtYXRjaGVzLCBmYWxzZSk7XG4gICAgcmV0dXJuIG1hdGNoZXM7XG4gIH1cbiAgdHJpZ2dlckV2ZW50SGFuZGxlcihldmVudE5hbWUsIGV2ZW50T2JqKSB7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMubmF0aXZlTm9kZTtcbiAgICBjb25zdCBpbnZva2VkTGlzdGVuZXJzID0gW107XG4gICAgdGhpcy5saXN0ZW5lcnMuZm9yRWFjaChsaXN0ZW5lciA9PiB7XG4gICAgICBpZiAobGlzdGVuZXIubmFtZSA9PT0gZXZlbnROYW1lKSB7XG4gICAgICAgIGNvbnN0IGNhbGxiYWNrID0gbGlzdGVuZXIuY2FsbGJhY2s7XG4gICAgICAgIGNhbGxiYWNrLmNhbGwobm9kZSwgZXZlbnRPYmopO1xuICAgICAgICBpbnZva2VkTGlzdGVuZXJzLnB1c2goY2FsbGJhY2spO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmICh0eXBlb2Ygbm9kZS5ldmVudExpc3RlbmVycyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgbm9kZS5ldmVudExpc3RlbmVycyhldmVudE5hbWUpLmZvckVhY2gobGlzdGVuZXIgPT4ge1xuICAgICAgICBpZiAobGlzdGVuZXIudG9TdHJpbmcoKS5pbmRleE9mKCdfX25nVW53cmFwX18nKSAhPT0gLTEpIHtcbiAgICAgICAgICBjb25zdCB1bndyYXBwZWRMaXN0ZW5lciA9IGxpc3RlbmVyKCdfX25nVW53cmFwX18nKTtcbiAgICAgICAgICByZXR1cm4gaW52b2tlZExpc3RlbmVycy5pbmRleE9mKHVud3JhcHBlZExpc3RlbmVyKSA9PT0gLTEgJiYgdW53cmFwcGVkTGlzdGVuZXIuY2FsbChub2RlLCBldmVudE9iaik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gY29weURvbVByb3BlcnRpZXMoZWxlbWVudCwgcHJvcGVydGllcykge1xuICBpZiAoZWxlbWVudCkge1xuICAgIGxldCBvYmogPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoZWxlbWVudCk7XG4gICAgY29uc3QgTm9kZVByb3RvdHlwZSA9IE5vZGUucHJvdG90eXBlO1xuICAgIHdoaWxlIChvYmogIT09IG51bGwgJiYgb2JqICE9PSBOb2RlUHJvdG90eXBlKSB7XG4gICAgICBjb25zdCBkZXNjcmlwdG9ycyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG9iaik7XG4gICAgICBmb3IgKGxldCBrZXkgaW4gZGVzY3JpcHRvcnMpIHtcbiAgICAgICAgaWYgKCFrZXkuc3RhcnRzV2l0aCgnX18nKSAmJiAha2V5LnN0YXJ0c1dpdGgoJ29uJykpIHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IGVsZW1lbnRba2V5XTtcbiAgICAgICAgICBpZiAoaXNQcmltaXRpdmVWYWx1ZSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHByb3BlcnRpZXNba2V5XSA9IHZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgb2JqID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iaik7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBpc1ByaW1pdGl2ZVZhbHVlKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgfHwgdmFsdWUgPT09IG51bGw7XG59XG5mdW5jdGlvbiBfcXVlcnlBbGwocGFyZW50RWxlbWVudCwgcHJlZGljYXRlLCBtYXRjaGVzLCBlbGVtZW50c09ubHkpIHtcbiAgY29uc3QgY29udGV4dCA9IGdldExDb250ZXh0KHBhcmVudEVsZW1lbnQubmF0aXZlTm9kZSk7XG4gIGNvbnN0IGxWaWV3ID0gY29udGV4dCA/IGNvbnRleHQubFZpZXcgOiBudWxsO1xuICBpZiAobFZpZXcgIT09IG51bGwpIHtcbiAgICBjb25zdCBwYXJlbnRUTm9kZSA9IGxWaWV3W1RWSUVXXS5kYXRhW2NvbnRleHQubm9kZUluZGV4XTtcbiAgICBfcXVlcnlOb2RlQ2hpbGRyZW4ocGFyZW50VE5vZGUsIGxWaWV3LCBwcmVkaWNhdGUsIG1hdGNoZXMsIGVsZW1lbnRzT25seSwgcGFyZW50RWxlbWVudC5uYXRpdmVOb2RlKTtcbiAgfSBlbHNlIHtcbiAgICBfcXVlcnlOYXRpdmVOb2RlRGVzY2VuZGFudHMocGFyZW50RWxlbWVudC5uYXRpdmVOb2RlLCBwcmVkaWNhdGUsIG1hdGNoZXMsIGVsZW1lbnRzT25seSk7XG4gIH1cbn1cbmZ1bmN0aW9uIF9xdWVyeU5vZGVDaGlsZHJlbih0Tm9kZSwgbFZpZXcsIHByZWRpY2F0ZSwgbWF0Y2hlcywgZWxlbWVudHNPbmx5LCByb290TmF0aXZlTm9kZSkge1xuICBuZ0Rldk1vZGUgJiYgYXNzZXJ0VE5vZGVGb3JMVmlldyh0Tm9kZSwgbFZpZXcpO1xuICBjb25zdCBuYXRpdmVOb2RlID0gZ2V0TmF0aXZlQnlUTm9kZU9yTnVsbCh0Tm9kZSwgbFZpZXcpO1xuICBpZiAodE5vZGUudHlwZSAmICgzIHwgOCkpIHtcbiAgICBfYWRkUXVlcnlNYXRjaChuYXRpdmVOb2RlLCBwcmVkaWNhdGUsIG1hdGNoZXMsIGVsZW1lbnRzT25seSwgcm9vdE5hdGl2ZU5vZGUpO1xuICAgIGlmIChpc0NvbXBvbmVudEhvc3QodE5vZGUpKSB7XG4gICAgICBjb25zdCBjb21wb25lbnRWaWV3ID0gZ2V0Q29tcG9uZW50TFZpZXdCeUluZGV4KHROb2RlLmluZGV4LCBsVmlldyk7XG4gICAgICBpZiAoY29tcG9uZW50VmlldyAmJiBjb21wb25lbnRWaWV3W1RWSUVXXS5maXJzdENoaWxkKSB7XG4gICAgICAgIF9xdWVyeU5vZGVDaGlsZHJlbihjb21wb25lbnRWaWV3W1RWSUVXXS5maXJzdENoaWxkLCBjb21wb25lbnRWaWV3LCBwcmVkaWNhdGUsIG1hdGNoZXMsIGVsZW1lbnRzT25seSwgcm9vdE5hdGl2ZU5vZGUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodE5vZGUuY2hpbGQpIHtcbiAgICAgICAgX3F1ZXJ5Tm9kZUNoaWxkcmVuKHROb2RlLmNoaWxkLCBsVmlldywgcHJlZGljYXRlLCBtYXRjaGVzLCBlbGVtZW50c09ubHksIHJvb3ROYXRpdmVOb2RlKTtcbiAgICAgIH1cbiAgICAgIG5hdGl2ZU5vZGUgJiYgX3F1ZXJ5TmF0aXZlTm9kZURlc2NlbmRhbnRzKG5hdGl2ZU5vZGUsIHByZWRpY2F0ZSwgbWF0Y2hlcywgZWxlbWVudHNPbmx5KTtcbiAgICB9XG4gICAgY29uc3Qgbm9kZU9yQ29udGFpbmVyID0gbFZpZXdbdE5vZGUuaW5kZXhdO1xuICAgIGlmIChpc0xDb250YWluZXIobm9kZU9yQ29udGFpbmVyKSkge1xuICAgICAgX3F1ZXJ5Tm9kZUNoaWxkcmVuSW5Db250YWluZXIobm9kZU9yQ29udGFpbmVyLCBwcmVkaWNhdGUsIG1hdGNoZXMsIGVsZW1lbnRzT25seSwgcm9vdE5hdGl2ZU5vZGUpO1xuICAgIH1cbiAgfSBlbHNlIGlmICh0Tm9kZS50eXBlICYgNCkge1xuICAgIGNvbnN0IGxDb250YWluZXIgPSBsVmlld1t0Tm9kZS5pbmRleF07XG4gICAgX2FkZFF1ZXJ5TWF0Y2gobENvbnRhaW5lcltOQVRJVkVdLCBwcmVkaWNhdGUsIG1hdGNoZXMsIGVsZW1lbnRzT25seSwgcm9vdE5hdGl2ZU5vZGUpO1xuICAgIF9xdWVyeU5vZGVDaGlsZHJlbkluQ29udGFpbmVyKGxDb250YWluZXIsIHByZWRpY2F0ZSwgbWF0Y2hlcywgZWxlbWVudHNPbmx5LCByb290TmF0aXZlTm9kZSk7XG4gIH0gZWxzZSBpZiAodE5vZGUudHlwZSAmIDE2KSB7XG4gICAgY29uc3QgY29tcG9uZW50VmlldyA9IGxWaWV3W0RFQ0xBUkFUSU9OX0NPTVBPTkVOVF9WSUVXXTtcbiAgICBjb25zdCBjb21wb25lbnRIb3N0ID0gY29tcG9uZW50Vmlld1tUX0hPU1RdO1xuICAgIGNvbnN0IGhlYWQgPSBjb21wb25lbnRIb3N0LnByb2plY3Rpb25bdE5vZGUucHJvamVjdGlvbl07XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoaGVhZCkpIHtcbiAgICAgIGZvciAobGV0IG5hdGl2ZU5vZGUgb2YgaGVhZCkge1xuICAgICAgICBfYWRkUXVlcnlNYXRjaChuYXRpdmVOb2RlLCBwcmVkaWNhdGUsIG1hdGNoZXMsIGVsZW1lbnRzT25seSwgcm9vdE5hdGl2ZU5vZGUpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaGVhZCkge1xuICAgICAgY29uc3QgbmV4dExWaWV3ID0gY29tcG9uZW50Vmlld1tQQVJFTlRdO1xuICAgICAgY29uc3QgbmV4dFROb2RlID0gbmV4dExWaWV3W1RWSUVXXS5kYXRhW2hlYWQuaW5kZXhdO1xuICAgICAgX3F1ZXJ5Tm9kZUNoaWxkcmVuKG5leHRUTm9kZSwgbmV4dExWaWV3LCBwcmVkaWNhdGUsIG1hdGNoZXMsIGVsZW1lbnRzT25seSwgcm9vdE5hdGl2ZU5vZGUpO1xuICAgIH1cbiAgfSBlbHNlIGlmICh0Tm9kZS5jaGlsZCkge1xuICAgIF9xdWVyeU5vZGVDaGlsZHJlbih0Tm9kZS5jaGlsZCwgbFZpZXcsIHByZWRpY2F0ZSwgbWF0Y2hlcywgZWxlbWVudHNPbmx5LCByb290TmF0aXZlTm9kZSk7XG4gIH1cbiAgaWYgKHJvb3ROYXRpdmVOb2RlICE9PSBuYXRpdmVOb2RlKSB7XG4gICAgY29uc3QgbmV4dFROb2RlID0gdE5vZGUuZmxhZ3MgJiAyID8gdE5vZGUucHJvamVjdGlvbk5leHQgOiB0Tm9kZS5uZXh0O1xuICAgIGlmIChuZXh0VE5vZGUpIHtcbiAgICAgIF9xdWVyeU5vZGVDaGlsZHJlbihuZXh0VE5vZGUsIGxWaWV3LCBwcmVkaWNhdGUsIG1hdGNoZXMsIGVsZW1lbnRzT25seSwgcm9vdE5hdGl2ZU5vZGUpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gX3F1ZXJ5Tm9kZUNoaWxkcmVuSW5Db250YWluZXIobENvbnRhaW5lciwgcHJlZGljYXRlLCBtYXRjaGVzLCBlbGVtZW50c09ubHksIHJvb3ROYXRpdmVOb2RlKSB7XG4gIGZvciAobGV0IGkgPSBDT05UQUlORVJfSEVBREVSX09GRlNFVDsgaSA8IGxDb250YWluZXIubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBjaGlsZFZpZXcgPSBsQ29udGFpbmVyW2ldO1xuICAgIGNvbnN0IGZpcnN0Q2hpbGQgPSBjaGlsZFZpZXdbVFZJRVddLmZpcnN0Q2hpbGQ7XG4gICAgaWYgKGZpcnN0Q2hpbGQpIHtcbiAgICAgIF9xdWVyeU5vZGVDaGlsZHJlbihmaXJzdENoaWxkLCBjaGlsZFZpZXcsIHByZWRpY2F0ZSwgbWF0Y2hlcywgZWxlbWVudHNPbmx5LCByb290TmF0aXZlTm9kZSk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBfYWRkUXVlcnlNYXRjaChuYXRpdmVOb2RlLCBwcmVkaWNhdGUsIG1hdGNoZXMsIGVsZW1lbnRzT25seSwgcm9vdE5hdGl2ZU5vZGUpIHtcbiAgaWYgKHJvb3ROYXRpdmVOb2RlICE9PSBuYXRpdmVOb2RlKSB7XG4gICAgY29uc3QgZGVidWdOb2RlID0gZ2V0RGVidWdOb2RlKG5hdGl2ZU5vZGUpO1xuICAgIGlmICghZGVidWdOb2RlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChlbGVtZW50c09ubHkgJiYgZGVidWdOb2RlIGluc3RhbmNlb2YgRGVidWdFbGVtZW50ICYmIHByZWRpY2F0ZShkZWJ1Z05vZGUpICYmIG1hdGNoZXMuaW5kZXhPZihkZWJ1Z05vZGUpID09PSAtMSkge1xuICAgICAgbWF0Y2hlcy5wdXNoKGRlYnVnTm9kZSk7XG4gICAgfSBlbHNlIGlmICghZWxlbWVudHNPbmx5ICYmIHByZWRpY2F0ZShkZWJ1Z05vZGUpICYmIG1hdGNoZXMuaW5kZXhPZihkZWJ1Z05vZGUpID09PSAtMSkge1xuICAgICAgbWF0Y2hlcy5wdXNoKGRlYnVnTm9kZSk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBfcXVlcnlOYXRpdmVOb2RlRGVzY2VuZGFudHMocGFyZW50Tm9kZSwgcHJlZGljYXRlLCBtYXRjaGVzLCBlbGVtZW50c09ubHkpIHtcbiAgY29uc3Qgbm9kZXMgPSBwYXJlbnROb2RlLmNoaWxkTm9kZXM7XG4gIGNvbnN0IGxlbmd0aCA9IG5vZGVzLmxlbmd0aDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IG5vZGUgPSBub2Rlc1tpXTtcbiAgICBjb25zdCBkZWJ1Z05vZGUgPSBnZXREZWJ1Z05vZGUobm9kZSk7XG4gICAgaWYgKGRlYnVnTm9kZSkge1xuICAgICAgaWYgKGVsZW1lbnRzT25seSAmJiBkZWJ1Z05vZGUgaW5zdGFuY2VvZiBEZWJ1Z0VsZW1lbnQgJiYgcHJlZGljYXRlKGRlYnVnTm9kZSkgJiYgbWF0Y2hlcy5pbmRleE9mKGRlYnVnTm9kZSkgPT09IC0xKSB7XG4gICAgICAgIG1hdGNoZXMucHVzaChkZWJ1Z05vZGUpO1xuICAgICAgfSBlbHNlIGlmICghZWxlbWVudHNPbmx5ICYmIHByZWRpY2F0ZShkZWJ1Z05vZGUpICYmIG1hdGNoZXMuaW5kZXhPZihkZWJ1Z05vZGUpID09PSAtMSkge1xuICAgICAgICBtYXRjaGVzLnB1c2goZGVidWdOb2RlKTtcbiAgICAgIH1cbiAgICAgIF9xdWVyeU5hdGl2ZU5vZGVEZXNjZW5kYW50cyhub2RlLCBwcmVkaWNhdGUsIG1hdGNoZXMsIGVsZW1lbnRzT25seSk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBjb2xsZWN0UHJvcGVydHlCaW5kaW5ncyhwcm9wZXJ0aWVzLCB0Tm9kZSwgbFZpZXcsIHREYXRhKSB7XG4gIGxldCBiaW5kaW5nSW5kZXhlcyA9IHROb2RlLnByb3BlcnR5QmluZGluZ3M7XG4gIGlmIChiaW5kaW5nSW5kZXhlcyAhPT0gbnVsbCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYmluZGluZ0luZGV4ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGJpbmRpbmdJbmRleCA9IGJpbmRpbmdJbmRleGVzW2ldO1xuICAgICAgY29uc3QgcHJvcE1ldGFkYXRhID0gdERhdGFbYmluZGluZ0luZGV4XTtcbiAgICAgIGNvbnN0IG1ldGFkYXRhUGFydHMgPSBwcm9wTWV0YWRhdGEuc3BsaXQoSU5URVJQT0xBVElPTl9ERUxJTUlURVIpO1xuICAgICAgY29uc3QgcHJvcGVydHlOYW1lID0gbWV0YWRhdGFQYXJ0c1swXTtcbiAgICAgIGlmIChtZXRhZGF0YVBhcnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgbGV0IHZhbHVlID0gbWV0YWRhdGFQYXJ0c1sxXTtcbiAgICAgICAgZm9yIChsZXQgaiA9IDE7IGogPCBtZXRhZGF0YVBhcnRzLmxlbmd0aCAtIDE7IGorKykge1xuICAgICAgICAgIHZhbHVlICs9IHJlbmRlclN0cmluZ2lmeShsVmlld1tiaW5kaW5nSW5kZXggKyBqIC0gMV0pICsgbWV0YWRhdGFQYXJ0c1tqICsgMV07XG4gICAgICAgIH1cbiAgICAgICAgcHJvcGVydGllc1twcm9wZXJ0eU5hbWVdID0gdmFsdWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV0gPSBsVmlld1tiaW5kaW5nSW5kZXhdO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuY29uc3QgTkdfREVCVUdfUFJPUEVSVFkgPSAnX19uZ19kZWJ1Z19fJztcbmZ1bmN0aW9uIGdldERlYnVnTm9kZShuYXRpdmVOb2RlKSB7XG4gIGlmIChuYXRpdmVOb2RlIGluc3RhbmNlb2YgTm9kZSkge1xuICAgIGlmICghbmF0aXZlTm9kZS5oYXNPd25Qcm9wZXJ0eShOR19ERUJVR19QUk9QRVJUWSkpIHtcbiAgICAgIG5hdGl2ZU5vZGVbTkdfREVCVUdfUFJPUEVSVFldID0gbmF0aXZlTm9kZS5ub2RlVHlwZSA9PSBOb2RlLkVMRU1FTlRfTk9ERSA/IG5ldyBEZWJ1Z0VsZW1lbnQobmF0aXZlTm9kZSkgOiBuZXcgRGVidWdOb2RlKG5hdGl2ZU5vZGUpO1xuICAgIH1cbiAgICByZXR1cm4gbmF0aXZlTm9kZVtOR19ERUJVR19QUk9QRVJUWV07XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5leHBvcnQgeyBBRlRFUl9SRU5ERVJfUEhBU0VTLCBBTklNQVRJT05TX0RJU0FCTEVELCBBTklNQVRJT05fTU9EVUxFX1RZUEUsIEFQUF9CT09UU1RSQVBfTElTVEVORVIsIEFQUF9JRCwgQVBQX0lOSVRJQUxJWkVSLCBBY3hDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQWN4Vmlld0VuY2Fwc3VsYXRpb24sIEFmdGVyUmVuZGVySW1wbCwgQWZ0ZXJSZW5kZXJNYW5hZ2VyLCBBZnRlclJlbmRlclNlcXVlbmNlLCBBcHBsaWNhdGlvbkluaXRTdGF0dXMsIEFwcGxpY2F0aW9uUmVmLCBBdHRyaWJ1dGUsIENPTVBJTEVSX09QVElPTlMsIENPTlRBSU5FUlMsIENTUF9OT05DRSwgQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQSwgQ2hhbmdlRGV0ZWN0aW9uU2NoZWR1bGVySW1wbCwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBpbGVyLCBDb21waWxlckZhY3RvcnksIENvbXBvbmVudCwgQ29tcG9uZW50RmFjdG9yeSwgQ29tcG9uZW50RmFjdG9yeSQxLCBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIkMSBhcyBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsIENvbXBvbmVudFJlZiQxIGFzIENvbXBvbmVudFJlZiwgQ29tcG9uZW50UmVmIGFzIENvbXBvbmVudFJlZiQxLCBDb25zb2xlLCBERUZBVUxUX0NVUlJFTkNZX0NPREUsIERFRkFVTFRfTE9DQUxFX0lELCBERUZFUl9CTE9DS19DT05GSUcsIERFRkVSX0JMT0NLX0RFUEVOREVOQ1lfSU5URVJDRVBUT1IsIERFRkVSX0JMT0NLX0lELCBERUZFUl9CTE9DS19TU1JfSURfQVRUUklCVVRFLCBERUZFUl9CTE9DS19TVEFURSQxIGFzIERFRkVSX0JMT0NLX1NUQVRFLCBERUZFUl9CTE9DS19TVEFURSBhcyBERUZFUl9CTE9DS19TVEFURSQxLCBERUZFUl9IWURSQVRFX1RSSUdHRVJTLCBERUZFUl9QQVJFTlRfQkxPQ0tfSUQsIERFSFlEUkFURURfQkxPQ0tfUkVHSVNUUlksIERJU0NPTk5FQ1RFRF9OT0RFUywgRGVidWdFbGVtZW50LCBEZWJ1Z0V2ZW50TGlzdGVuZXIsIERlYnVnTm9kZSwgRGVmZXJCbG9ja0JlaGF2aW9yLCBEZWZlckJsb2NrU3RhdGUsIERlaHlkcmF0ZWRCbG9ja1JlZ2lzdHJ5LCBEaXJlY3RpdmUsIEVMRU1FTlRfQ09OVEFJTkVSUywgRVZFTlRfUkVQTEFZX0VOQUJMRURfREVGQVVMVCwgRVZFTlRfUkVQTEFZX1FVRVVFLCBFbGVtZW50UmVmLCBFbnZpcm9ubWVudE5nTW9kdWxlUmVmQWRhcHRlciwgSG9zdCwgSG9zdEJpbmRpbmcsIEhvc3RMaXN0ZW5lciwgSHlkcmF0aW9uU3RhdHVzLCBJMThOX0RBVEEsIElNQUdFX0NPTkZJRywgSU1BR0VfQ09ORklHX0RFRkFVTFRTLCBJU19FTkFCTEVEX0JMT0NLSU5HX0lOSVRJQUxfTkFWSUdBVElPTiwgSVNfRVZFTlRfUkVQTEFZX0VOQUJMRUQsIElTX0hZRFJBVElPTl9ET01fUkVVU0VfRU5BQkxFRCwgSVNfSTE4Tl9IWURSQVRJT05fRU5BQkxFRCwgSVNfSU5DUkVNRU5UQUxfSFlEUkFUSU9OX0VOQUJMRUQsIEluamVjdCwgSW5qZWN0YWJsZSwgSW5wdXQsIEpTQUNUSU9OX0JMT0NLX0VMRU1FTlRfTUFQLCBKU0FDVElPTl9FVkVOVF9DT05UUkFDVCwgTENvbnRleHQsIExPQ0FMRV9JRCwgTG9jYWxlRGF0YUluZGV4LCBNQVhfQU5JTUFUSU9OX1RJTUVPVVQsIE1VTFRJUExJRVIsIE1pc3NpbmdUcmFuc2xhdGlvblN0cmF0ZWd5LCBNb2R1bGVXaXRoQ29tcG9uZW50RmFjdG9yaWVzLCBOR0hfQVRUUl9OQU1FLCBOR0hfREFUQV9LRVksIE5HSF9ERUZFUl9CTE9DS1NfS0VZLCBOT0RFUywgTk9PUF9BRlRFUl9SRU5ERVJfUkVGLCBOT1RfRk9VTkRfQ0hFQ0tfT05MWV9FTEVNRU5UX0lOSkVDVE9SLCBOT19DSEFOR0UsIE5PX0VSUk9SU19TQ0hFTUEsIE5VTV9ST09UX05PREVTLCBOZ01vZHVsZSwgTmdNb2R1bGVGYWN0b3J5LCBOZ01vZHVsZUZhY3RvcnkkMSwgTmdNb2R1bGVSZWYsIE5nTW9kdWxlUmVmJDEsIE9wdGlvbmFsLCBPdXRwdXQsIFBMQVRGT1JNX0lELCBQTEFURk9STV9JTklUSUFMSVpFUiwgUFJFU0VSVkVfSE9TVF9DT05URU5ULCBQaXBlLCBQcm9maWxlckV2ZW50LCBRdWVyeUxpc3QsIFJlZmxlY3Rpb25DYXBhYmlsaXRpZXMsIFJlbmRlcmVyMiwgUmVuZGVyZXJGYWN0b3J5MiwgUmVuZGVyZXJTdHlsZUZsYWdzMiwgU0tJUF9IWURSQVRJT05fQVRUUl9OQU1FLCBTU1JfQ09OVEVOVF9JTlRFR1JJVFlfTUFSS0VSLCBTYW5pdGl6ZXIsIFNlY3VyaXR5Q29udGV4dCwgU2VsZiwgU2ltcGxlQ2hhbmdlLCBTa2lwU2VsZiwgVEVNUExBVEVTLCBURU1QTEFURV9JRCwgVEVTVEFCSUxJVFksIFRFU1RBQklMSVRZX0dFVFRFUiwgVFJBTlNMQVRJT05TLCBUUkFOU0xBVElPTlNfRk9STUFULCBUZW1wbGF0ZVJlZiwgVGVzdGFiaWxpdHksIFRlc3RhYmlsaXR5UmVnaXN0cnksIFRpbWVyU2NoZWR1bGVyLCBUcmFjaW5nQWN0aW9uLCBUcmFjaW5nU2VydmljZSwgVHJhbnNmZXJTdGF0ZSwgVHlwZSwgVXNlRXhoYXVzdGl2ZUNoZWNrTm9DaGFuZ2VzLCBWaWV3Q29udGFpbmVyUmVmLCBWaWV3RW5jYXBzdWxhdGlvbiwgVmlld1JlZiwgX3Nhbml0aXplSHRtbCwgX3Nhbml0aXplVXJsLCBhZnRlckV2ZXJ5UmVuZGVyLCBhZnRlck5leHRSZW5kZXIsIGFsbExlYXZpbmdBbmltYXRpb25zLCBhbGxvd1Nhbml0aXphdGlvbkJ5cGFzc0FuZFRocm93LCBhbmd1bGFyQ29yZUVudiwgYXBwZW5kRGVmZXJCbG9ja3NUb0pTQWN0aW9uTWFwLCBhc05hdGl2ZUVsZW1lbnRzLCBhc3NlcnRDb21wb25lbnREZWYsIGFzc2VydFN0YW5kYWxvbmVDb21wb25lbnRUeXBlLCBieXBhc3NTYW5pdGl6YXRpb25UcnVzdEh0bWwsIGJ5cGFzc1Nhbml0aXphdGlvblRydXN0UmVzb3VyY2VVcmwsIGJ5cGFzc1Nhbml0aXphdGlvblRydXN0U2NyaXB0LCBieXBhc3NTYW5pdGl6YXRpb25UcnVzdFN0eWxlLCBieXBhc3NTYW5pdGl6YXRpb25UcnVzdFVybCwgY2FsY1BhdGhGb3JOb2RlLCBjaGVja05vQ2hhbmdlc0ludGVybmFsLCBjbGVhbnVwRGVoeWRyYXRlZFZpZXdzLCBjbGVhclJlc29sdXRpb25PZkNvbXBvbmVudFJlc291cmNlc1F1ZXVlLCBjb2xsZWN0TmF0aXZlTm9kZXMsIGNvbGxlY3ROYXRpdmVOb2Rlc0luTENvbnRhaW5lciwgY29tcGlsZUNvbXBvbmVudCwgY29tcGlsZURpcmVjdGl2ZSwgY29tcGlsZU5nTW9kdWxlLCBjb21waWxlTmdNb2R1bGVEZWZzLCBjb21waWxlUGlwZSwgY29udmVydEh5ZHJhdGVUcmlnZ2Vyc1RvSnNBY3Rpb24sIGNvdW50QmxvY2tzU2tpcHBlZEJ5SHlkcmF0aW9uLCBjcmVhdGVFbnZpcm9ubWVudEluamVjdG9yLCBjcmVhdGVNdWx0aVJlc3VsdFF1ZXJ5U2lnbmFsRm4sIGNyZWF0ZU5nTW9kdWxlLCBjcmVhdGVOZ01vZHVsZVJlZiwgY3JlYXRlTmdNb2R1bGVSZWZXaXRoUHJvdmlkZXJzLCBjcmVhdGVTaW5nbGVSZXN1bHRPcHRpb25hbFF1ZXJ5U2lnbmFsRm4sIGNyZWF0ZVNpbmdsZVJlc3VsdFJlcXVpcmVkUXVlcnlTaWduYWxGbiwgZGVwc1RyYWNrZXIsIGRldk1vZGVFcXVhbCwgZW5hYmxlQXBwbHlSb290RWxlbWVudFRyYW5zZm9ybUltcGwsIGVuYWJsZUNsYWltRGVoeWRyYXRlZEljdUNhc2VJbXBsLCBlbmFibGVGaW5kTWF0Y2hpbmdEZWh5ZHJhdGVkVmlld0ltcGwsIGVuYWJsZUxvY2F0ZU9yQ3JlYXRlQ29udGFpbmVyQW5jaG9ySW1wbCwgZW5hYmxlTG9jYXRlT3JDcmVhdGVDb250YWluZXJSZWZJbXBsLCBlbmFibGVMb2NhdGVPckNyZWF0ZUVsZW1lbnRDb250YWluZXJOb2RlSW1wbCwgZW5hYmxlTG9jYXRlT3JDcmVhdGVFbGVtZW50Tm9kZUltcGwsIGVuYWJsZUxvY2F0ZU9yQ3JlYXRlSTE4bk5vZGVJbXBsLCBlbmFibGVMb2NhdGVPckNyZWF0ZVRleHROb2RlSW1wbCwgZW5hYmxlUHJlcGFyZUkxOG5CbG9ja0Zvckh5ZHJhdGlvbkltcGwsIGVuYWJsZVByb2ZpbGluZywgZW5hYmxlUmV0cmlldmVEZWZlckJsb2NrRGF0YUltcGwsIGVuYWJsZVJldHJpZXZlSHlkcmF0aW9uSW5mb0ltcGwsIGVuYWJsZVN0YXNoRXZlbnRMaXN0ZW5lckltcGwsIGZpbmRMb2NhbGVEYXRhLCBmbHVzaE1vZHVsZVNjb3BpbmdRdWV1ZUFzTXVjaEFzUG9zc2libGUsIGdhdGhlckRlZmVyQmxvY2tzQ29tbWVudE5vZGVzLCBnZW5lcmF0ZVN0YW5kYWxvbmVJbkRlY2xhcmF0aW9uc0Vycm9yLCBnZXRBc3luY0NsYXNzTWV0YWRhdGFGbiwgZ2V0Q2xvc2VzdENvbXBvbmVudE5hbWUsIGdldENvbXBpbGVyRmFjYWRlLCBnZXREZWJ1Z05vZGUsIGdldERlZmVyQmxvY2tzJDEgYXMgZ2V0RGVmZXJCbG9ja3MsIGdldERpcmVjdGl2ZXMsIGdldERvY3VtZW50LCBnZXRIb3N0RWxlbWVudCwgZ2V0TENvbnRleHQsIGdldExEZWZlckJsb2NrRGV0YWlscywgZ2V0TE5vZGVGb3JIeWRyYXRpb24sIGdldExvY2FsZUN1cnJlbmN5Q29kZSwgZ2V0TG9jYWxlUGx1cmFsQ2FzZSwgZ2V0T3JDb21wdXRlSTE4bkNoaWxkcmVuLCBnZXRSZWdpc3RlcmVkTmdNb2R1bGVUeXBlLCBnZXRTYW5pdGl6YXRpb25CeXBhc3NUeXBlLCBnZXRURGVmZXJCbG9ja0RldGFpbHMsIGdldFRyYW5zZmVyU3RhdGUsIGluZmVyVGFnTmFtZUZyb21EZWZpbml0aW9uLCBpbnB1dEJpbmRpbmcsIGludm9rZUxpc3RlbmVycywgaXNCb3VuZFRvTW9kdWxlLCBpc0NvbXBvbmVudERlZlBlbmRpbmdSZXNvbHV0aW9uLCBpc0NvbXBvbmVudFJlc291cmNlUmVzb2x1dGlvblF1ZXVlRW1wdHksIGlzRGVmZXJCbG9jaywgaXNEZXRhY2hlZEJ5STE4biwgaXNEaXNjb25uZWN0ZWROb2RlLCBpc0kxOG5IeWRyYXRpb25FbmFibGVkLCBpc0kxOG5IeWRyYXRpb25TdXBwb3J0RW5hYmxlZCwgaXNJblNraXBIeWRyYXRpb25CbG9jaywgaXNJbmNyZW1lbnRhbEh5ZHJhdGlvbkVuYWJsZWQsIGlzSnNPYmplY3QsIGlzTGV0RGVjbGFyYXRpb24sIGlzTGlzdExpa2VJdGVyYWJsZSwgaXNOZ01vZHVsZSwgaXNQcm9taXNlLCBpc1NpZ25hbCwgaXNTdWJzY3JpYmFibGUsIGlzVE5vZGVTaGFwZSwgaXNWaWV3RGlydHksIGlzV3JpdGFibGVTaWduYWwsIGl0ZXJhdGVMaXN0TGlrZSwgbWFrZVByb3BEZWNvcmF0b3IsIG1ha2VTdGF0ZUtleSwgbWFya0ZvclJlZnJlc2gsIG5vU2lkZUVmZmVjdHMsIG9wdGlvbnNSZWR1Y2VyLCBvdXRwdXRCaW5kaW5nLCBwYXRjaENvbXBvbmVudERlZldpdGhTY29wZSwgcGVyZm9ybWFuY2VNYXJrRmVhdHVyZSwgcHJvY2Vzc0FuZEluaXRUcmlnZ2VycywgcHJvY2Vzc0Jsb2NrRGF0YSwgcHJvY2Vzc1RleHROb2RlQmVmb3JlU2VyaWFsaXphdGlvbiwgcHJvZmlsZXIsIHByb21pc2VXaXRoUmVzb2x2ZXJzLCBwcm92aWRlQXBwSW5pdGlhbGl6ZXIsIHByb3ZpZGVOZ1JlZmxlY3RBdHRyaWJ1dGVzLCBwcm92aWRlWm9uZWxlc3NDaGFuZ2VEZXRlY3Rpb24sIHByb3ZpZGVab25lbGVzc0NoYW5nZURldGVjdGlvbkludGVybmFsLCBwdWJsaXNoRGVmYXVsdEdsb2JhbFV0aWxzLCBwdWJsaXNoRXh0ZXJuYWxHbG9iYWxVdGlsLCBwdWJsaXNoU2lnbmFsQ29uZmlndXJhdGlvbiwgcmVhZEh5ZHJhdGlvbkluZm8sIHJlZ2lzdGVyTG9jYWxlRGF0YSwgcmVnaXN0ZXJOZ01vZHVsZVR5cGUsIHJlbW92ZSwgcmVtb3ZlTGlzdGVuZXJzLCByZW5kZXJEZWZlckJsb2NrU3RhdGUsIHJlc2V0Q29tcGlsZWRDb21wb25lbnRzLCByZXNldEluY3JlbWVudGFsSHlkcmF0aW9uRW5hYmxlZFdhcm5lZEZvclRlc3RzLCByZXNldEppdE9wdGlvbnMsIHJlc29sdmVDb21wb25lbnRSZXNvdXJjZXMsIHJlc3RvcmVDb21wb25lbnRSZXNvbHV0aW9uUXVldWUsIHNldEFsbG93RHVwbGljYXRlTmdNb2R1bGVJZHNGb3JUZXN0LCBzZXRDbGFzc01ldGFkYXRhLCBzZXRDbGFzc01ldGFkYXRhQXN5bmMsIHNldERvY3VtZW50LCBzZXRJc0kxOG5IeWRyYXRpb25TdXBwb3J0RW5hYmxlZCwgc2V0SlNBY3Rpb25BdHRyaWJ1dGVzLCBzZXRKaXRPcHRpb25zLCBzZXRMb2NhbGVJZCwgc2V0U3Rhc2hGbiwgc2V0VGVzdGFiaWxpdHlHZXR0ZXIsIHNoYXJlZE1hcEZ1bmN0aW9uLCBzaGFyZWRTdGFzaEZ1bmN0aW9uLCB0cmFuc2l0aXZlU2NvcGVzRm9yLCB0cmlnZ2VySHlkcmF0aW9uRnJvbUJsb2NrTmFtZSwgdHJpZ2dlclJlc291cmNlTG9hZGluZywgdHJ5U2VyaWFsaXplSTE4bkJsb2NrLCB0d29XYXlCaW5kaW5nLCB1bnJlZ2lzdGVyQWxsTG9jYWxlRGF0YSwgdW5zdXBwb3J0ZWRQcm9qZWN0aW9uT2ZEb21Ob2RlcywgdW53cmFwU2FmZVZhbHVlLCB2YWxpZEFwcElkSW5pdGlhbGl6ZXIsIHZhbGlkYXRlTWF0Y2hpbmdOb2RlLCB2YWxpZGF0ZU5vZGVFeGlzdHMsIHZlcmlmeVNzckNvbnRlbnRzSW50ZWdyaXR5LCDJtWdldFVua25vd25FbGVtZW50U3RyaWN0TW9kZSwgybVnZXRVbmtub3duUHJvcGVydHlTdHJpY3RNb2RlLCDJtXNldENsYXNzRGVidWdJbmZvLCDJtXNldFVua25vd25FbGVtZW50U3RyaWN0TW9kZSwgybVzZXRVbmtub3duUHJvcGVydHlTdHJpY3RNb2RlLCDJtcm1Q29udHJvbEZlYXR1cmUsIMm1ybVFeHRlcm5hbFN0eWxlc0ZlYXR1cmUsIMm1ybVIb3N0RGlyZWN0aXZlc0ZlYXR1cmUsIMm1ybVJbmhlcml0RGVmaW5pdGlvbkZlYXR1cmUsIMm1ybVOZ09uQ2hhbmdlc0ZlYXR1cmUsIMm1ybVQcm92aWRlcnNGZWF0dXJlLCDJtcm1YWR2YW5jZSwgybXJtWFuaW1hdGVFbnRlciwgybXJtWFuaW1hdGVFbnRlckxpc3RlbmVyLCDJtcm1YW5pbWF0ZUxlYXZlLCDJtcm1YW5pbWF0ZUxlYXZlTGlzdGVuZXIsIMm1ybVhcmlhUHJvcGVydHksIMm1ybVhcnJvd0Z1bmN0aW9uLCDJtcm1YXR0YWNoU291cmNlTG9jYXRpb25zLCDJtcm1YXR0cmlidXRlLCDJtcm1Y2xhc3NNYXAsIMm1ybVjbGFzc1Byb3AsIMm1ybVjb21wb25lbnRJbnN0YW5jZSwgybXJtWNvbmRpdGlvbmFsLCDJtcm1Y29uZGl0aW9uYWxCcmFuY2hDcmVhdGUsIMm1ybVjb25kaXRpb25hbENyZWF0ZSwgybXJtWNvbnRlbnRRdWVyeSwgybXJtWNvbnRlbnRRdWVyeVNpZ25hbCwgybXJtWNvbnRyb2wsIMm1ybVjb250cm9sQ3JlYXRlLCDJtcm1ZGVjbGFyZUxldCwgybXJtWRlZmVyLCDJtcm1ZGVmZXJFbmFibGVUaW1lclNjaGVkdWxpbmcsIMm1ybVkZWZlckh5ZHJhdGVOZXZlciwgybXJtWRlZmVySHlkcmF0ZU9uSG92ZXIsIMm1ybVkZWZlckh5ZHJhdGVPbklkbGUsIMm1ybVkZWZlckh5ZHJhdGVPbkltbWVkaWF0ZSwgybXJtWRlZmVySHlkcmF0ZU9uSW50ZXJhY3Rpb24sIMm1ybVkZWZlckh5ZHJhdGVPblRpbWVyLCDJtcm1ZGVmZXJIeWRyYXRlT25WaWV3cG9ydCwgybXJtWRlZmVySHlkcmF0ZVdoZW4sIMm1ybVkZWZlck9uSG92ZXIsIMm1ybVkZWZlck9uSWRsZSwgybXJtWRlZmVyT25JbW1lZGlhdGUsIMm1ybVkZWZlck9uSW50ZXJhY3Rpb24sIMm1ybVkZWZlck9uVGltZXIsIMm1ybVkZWZlck9uVmlld3BvcnQsIMm1ybVkZWZlclByZWZldGNoT25Ib3ZlciwgybXJtWRlZmVyUHJlZmV0Y2hPbklkbGUsIMm1ybVkZWZlclByZWZldGNoT25JbW1lZGlhdGUsIMm1ybVkZWZlclByZWZldGNoT25JbnRlcmFjdGlvbiwgybXJtWRlZmVyUHJlZmV0Y2hPblRpbWVyLCDJtcm1ZGVmZXJQcmVmZXRjaE9uVmlld3BvcnQsIMm1ybVkZWZlclByZWZldGNoV2hlbiwgybXJtWRlZmVyV2hlbiwgybXJtWRlZmluZUNvbXBvbmVudCwgybXJtWRlZmluZURpcmVjdGl2ZSwgybXJtWRlZmluZU5nTW9kdWxlLCDJtcm1ZGVmaW5lUGlwZSwgybXJtWRpcmVjdGl2ZUluamVjdCwgybXJtWRvbUVsZW1lbnQsIMm1ybVkb21FbGVtZW50Q29udGFpbmVyLCDJtcm1ZG9tRWxlbWVudENvbnRhaW5lckVuZCwgybXJtWRvbUVsZW1lbnRDb250YWluZXJTdGFydCwgybXJtWRvbUVsZW1lbnRFbmQsIMm1ybVkb21FbGVtZW50U3RhcnQsIMm1ybVkb21MaXN0ZW5lciwgybXJtWRvbVByb3BlcnR5LCDJtcm1ZG9tVGVtcGxhdGUsIMm1ybVlbGVtZW50LCDJtcm1ZWxlbWVudENvbnRhaW5lciwgybXJtWVsZW1lbnRDb250YWluZXJFbmQsIMm1ybVlbGVtZW50Q29udGFpbmVyU3RhcnQsIMm1ybVlbGVtZW50RW5kLCDJtcm1ZWxlbWVudFN0YXJ0LCDJtcm1Z2V0Q29tcG9uZW50RGVwc0ZhY3RvcnksIMm1ybVnZXRDdXJyZW50VmlldywgybXJtWdldEluaGVyaXRlZEZhY3RvcnksIMm1ybVnZXRSZXBsYWNlTWV0YWRhdGFVUkwsIMm1ybVpMThuLCDJtcm1aTE4bkFwcGx5LCDJtcm1aTE4bkF0dHJpYnV0ZXMsIMm1ybVpMThuRW5kLCDJtcm1aTE4bkV4cCwgybXJtWkxOG5Qb3N0cHJvY2VzcywgybXJtWkxOG5TdGFydCwgybXJtWluamVjdEF0dHJpYnV0ZSwgybXJtWludGVycG9sYXRlLCDJtcm1aW50ZXJwb2xhdGUxLCDJtcm1aW50ZXJwb2xhdGUyLCDJtcm1aW50ZXJwb2xhdGUzLCDJtcm1aW50ZXJwb2xhdGU0LCDJtcm1aW50ZXJwb2xhdGU1LCDJtcm1aW50ZXJwb2xhdGU2LCDJtcm1aW50ZXJwb2xhdGU3LCDJtcm1aW50ZXJwb2xhdGU4LCDJtcm1aW50ZXJwb2xhdGVWLCDJtcm1aW52YWxpZEZhY3RvcnksIMm1ybVsaXN0ZW5lciwgybXJtWxvYWRRdWVyeSwgybXJtW5leHRDb250ZXh0LCDJtcm1cGlwZSwgybXJtXBpcGVCaW5kMSwgybXJtXBpcGVCaW5kMiwgybXJtXBpcGVCaW5kMywgybXJtXBpcGVCaW5kNCwgybXJtXBpcGVCaW5kViwgybXJtXByb2plY3Rpb24sIMm1ybVwcm9qZWN0aW9uRGVmLCDJtcm1cHJvcGVydHksIMm1ybVwdXJlRnVuY3Rpb24wLCDJtcm1cHVyZUZ1bmN0aW9uMSwgybXJtXB1cmVGdW5jdGlvbjIsIMm1ybVwdXJlRnVuY3Rpb24zLCDJtcm1cHVyZUZ1bmN0aW9uNCwgybXJtXB1cmVGdW5jdGlvbjUsIMm1ybVwdXJlRnVuY3Rpb242LCDJtcm1cHVyZUZ1bmN0aW9uNywgybXJtXB1cmVGdW5jdGlvbjgsIMm1ybVwdXJlRnVuY3Rpb25WLCDJtcm1cXVlcnlBZHZhbmNlLCDJtcm1cXVlcnlSZWZyZXNoLCDJtcm1cmVhZENvbnRleHRMZXQsIMm1ybVyZWZlcmVuY2UsIMm1ybVyZXBlYXRlciwgybXJtXJlcGVhdGVyQ3JlYXRlLCDJtcm1cmVwZWF0ZXJUcmFja0J5SWRlbnRpdHksIMm1ybVyZXBlYXRlclRyYWNrQnlJbmRleCwgybXJtXJlcGxhY2VNZXRhZGF0YSwgybXJtXJlc29sdmVCb2R5LCDJtcm1cmVzb2x2ZURvY3VtZW50LCDJtcm1cmVzb2x2ZVdpbmRvdywgybXJtXNhbml0aXplSHRtbCwgybXJtXNhbml0aXplUmVzb3VyY2VVcmwsIMm1ybVzYW5pdGl6ZVNjcmlwdCwgybXJtXNhbml0aXplU3R5bGUsIMm1ybVzYW5pdGl6ZVVybCwgybXJtXNhbml0aXplVXJsT3JSZXNvdXJjZVVybCwgybXJtXNldENvbXBvbmVudFNjb3BlLCDJtcm1c2V0TmdNb2R1bGVTY29wZSwgybXJtXN0b3JlTGV0LCDJtcm1c3R5bGVNYXAsIMm1ybVzdHlsZVByb3AsIMm1ybVzeW50aGV0aWNIb3N0TGlzdGVuZXIsIMm1ybVzeW50aGV0aWNIb3N0UHJvcGVydHksIMm1ybV0ZW1wbGF0ZSwgybXJtXRlbXBsYXRlUmVmRXh0cmFjdG9yLCDJtcm1dGV4dCwgybXJtXRleHRJbnRlcnBvbGF0ZSwgybXJtXRleHRJbnRlcnBvbGF0ZTEsIMm1ybV0ZXh0SW50ZXJwb2xhdGUyLCDJtcm1dGV4dEludGVycG9sYXRlMywgybXJtXRleHRJbnRlcnBvbGF0ZTQsIMm1ybV0ZXh0SW50ZXJwb2xhdGU1LCDJtcm1dGV4dEludGVycG9sYXRlNiwgybXJtXRleHRJbnRlcnBvbGF0ZTcsIMm1ybV0ZXh0SW50ZXJwb2xhdGU4LCDJtcm1dGV4dEludGVycG9sYXRlViwgybXJtXRydXN0Q29uc3RhbnRIdG1sLCDJtcm1dHJ1c3RDb25zdGFudFJlc291cmNlVXJsLCDJtcm1dHdvV2F5QmluZGluZ1NldCwgybXJtXR3b1dheUxpc3RlbmVyLCDJtcm1dHdvV2F5UHJvcGVydHksIMm1ybV2YWxpZGF0ZUF0dHJpYnV0ZSwgybXJtXZpZXdRdWVyeSwgybXJtXZpZXdRdWVyeVNpZ25hbCB9O1xuIiwiLyoqXG4gKiBAbGljZW5zZSBBbmd1bGFyIHYyMS4yLjRcbiAqIChjKSAyMDEwLTIwMjYgR29vZ2xlIExMQy4gaHR0cHM6Ly9hbmd1bGFyLmRldi9cbiAqIExpY2Vuc2U6IE1JVFxuICovXG5cbmltcG9ydCB7IGluamVjdCwgRXJyb3JIYW5kbGVyLCBEZXN0cm95UmVmLCBSdW50aW1lRXJyb3IsIGZvcm1hdFJ1bnRpbWVFcnJvciwgc2lnbmFsQXNSZWFkb25seUZuLCBhc3NlcnRJbkluamVjdGlvbkNvbnRleHQsIEluamVjdG9yLCBlZmZlY3QsIFBlbmRpbmdUYXNrcywgc2lnbmFsIH0gZnJvbSAnLi9fZWZmZWN0LWNodW5rMi5tanMnO1xuaW1wb3J0IHsgc2V0QWN0aXZlQ29uc3VtZXIsIGNyZWF0ZUNvbXB1dGVkLCBTSUdOQUwgfSBmcm9tICcuL19lZmZlY3QtY2h1bmsubWpzJztcbmltcG9ydCB7IHVudHJhY2tlZCBhcyB1bnRyYWNrZWQkMSwgY3JlYXRlTGlua2VkU2lnbmFsLCBsaW5rZWRTaWduYWxTZXRGbiwgbGlua2VkU2lnbmFsVXBkYXRlRm4gfSBmcm9tICcuL191bnRyYWNrZWQtY2h1bmsubWpzJztcbmNsYXNzIE91dHB1dEVtaXR0ZXJSZWYge1xuICBkZXN0cm95ZWQgPSBmYWxzZTtcbiAgbGlzdGVuZXJzID0gbnVsbDtcbiAgZXJyb3JIYW5kbGVyID0gLyojX19QVVJFX18qL2luamVjdChFcnJvckhhbmRsZXIsIHtcbiAgICBvcHRpb25hbDogdHJ1ZVxuICB9KTtcbiAgZGVzdHJveVJlZiA9IC8qI19fUFVSRV9fKi9pbmplY3QoRGVzdHJveVJlZik7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuZGVzdHJveVJlZi5vbkRlc3Ryb3koKCkgPT4ge1xuICAgICAgdGhpcy5kZXN0cm95ZWQgPSB0cnVlO1xuICAgICAgdGhpcy5saXN0ZW5lcnMgPSBudWxsO1xuICAgIH0pO1xuICB9XG4gIHN1YnNjcmliZShjYWxsYmFjaykge1xuICAgIGlmICh0aGlzLmRlc3Ryb3llZCkge1xuICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFcnJvcig5NTMsIG5nRGV2TW9kZSAmJiAnVW5leHBlY3RlZCBzdWJzY3JpcHRpb24gdG8gZGVzdHJveWVkIGBPdXRwdXRSZWZgLiAnICsgJ1RoZSBvd25pbmcgZGlyZWN0aXZlL2NvbXBvbmVudCBpcyBkZXN0cm95ZWQuJyk7XG4gICAgfVxuICAgICh0aGlzLmxpc3RlbmVycyA/Pz0gW10pLnB1c2goY2FsbGJhY2spO1xuICAgIHJldHVybiB7XG4gICAgICB1bnN1YnNjcmliZTogKCkgPT4ge1xuICAgICAgICBjb25zdCBpZHggPSB0aGlzLmxpc3RlbmVycz8uaW5kZXhPZihjYWxsYmFjayk7XG4gICAgICAgIGlmIChpZHggIT09IHVuZGVmaW5lZCAmJiBpZHggIT09IC0xKSB7XG4gICAgICAgICAgdGhpcy5saXN0ZW5lcnM/LnNwbGljZShpZHgsIDEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfVxuICBlbWl0KHZhbHVlKSB7XG4gICAgaWYgKHRoaXMuZGVzdHJveWVkKSB7XG4gICAgICBjb25zb2xlLndhcm4oZm9ybWF0UnVudGltZUVycm9yKDk1MywgbmdEZXZNb2RlICYmICdVbmV4cGVjdGVkIGVtaXQgZm9yIGRlc3Ryb3llZCBgT3V0cHV0UmVmYC4gJyArICdUaGUgb3duaW5nIGRpcmVjdGl2ZS9jb21wb25lbnQgaXMgZGVzdHJveWVkLicpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMubGlzdGVuZXJzID09PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHByZXZpb3VzQ29uc3VtZXIgPSBzZXRBY3RpdmVDb25zdW1lcihudWxsKTtcbiAgICB0cnkge1xuICAgICAgZm9yIChjb25zdCBsaXN0ZW5lckZuIG9mIHRoaXMubGlzdGVuZXJzKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgbGlzdGVuZXJGbih2YWx1ZSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIHRoaXMuZXJyb3JIYW5kbGVyPy5oYW5kbGVFcnJvcihlcnIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNldEFjdGl2ZUNvbnN1bWVyKHByZXZpb3VzQ29uc3VtZXIpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gZ2V0T3V0cHV0RGVzdHJveVJlZihyZWYpIHtcbiAgcmV0dXJuIHJlZi5kZXN0cm95UmVmO1xufVxuZnVuY3Rpb24gdW50cmFja2VkKG5vblJlYWN0aXZlUmVhZHNGbikge1xuICByZXR1cm4gdW50cmFja2VkJDEobm9uUmVhY3RpdmVSZWFkc0ZuKTtcbn1cbmZ1bmN0aW9uIGNvbXB1dGVkKGNvbXB1dGF0aW9uLCBvcHRpb25zKSB7XG4gIGNvbnN0IGdldHRlciA9IGNyZWF0ZUNvbXB1dGVkKGNvbXB1dGF0aW9uLCBvcHRpb25zPy5lcXVhbCk7XG4gIGlmICh0eXBlb2YgbmdEZXZNb2RlICE9PSAndW5kZWZpbmVkJyAmJiBuZ0Rldk1vZGUpIHtcbiAgICBjb25zdCBkZWJ1Z05hbWUgPSBvcHRpb25zPy5kZWJ1Z05hbWU7XG4gICAgZ2V0dGVyW1NJR05BTF0uZGVidWdOYW1lID0gZGVidWdOYW1lO1xuICAgIGdldHRlci50b1N0cmluZyA9ICgpID0+IGBbQ29tcHV0ZWQke2RlYnVnTmFtZSA/ICcgKCcgKyBkZWJ1Z05hbWUgKyAnKScgOiAnJ306ICR7Z2V0dGVyKCl9XWA7XG4gIH1cbiAgcmV0dXJuIGdldHRlcjtcbn1cbmNvbnN0IGlkZW50aXR5Rm4gPSB2ID0+IHY7XG5mdW5jdGlvbiBsaW5rZWRTaWduYWwob3B0aW9uc09yQ29tcHV0YXRpb24sIG9wdGlvbnMpIHtcbiAgaWYgKHR5cGVvZiBvcHRpb25zT3JDb21wdXRhdGlvbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNvbnN0IGdldHRlciA9IGNyZWF0ZUxpbmtlZFNpZ25hbChvcHRpb25zT3JDb21wdXRhdGlvbiwgaWRlbnRpdHlGbiwgb3B0aW9ucz8uZXF1YWwpO1xuICAgIHJldHVybiB1cGdyYWRlTGlua2VkU2lnbmFsR2V0dGVyKGdldHRlciwgb3B0aW9ucz8uZGVidWdOYW1lKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBnZXR0ZXIgPSBjcmVhdGVMaW5rZWRTaWduYWwob3B0aW9uc09yQ29tcHV0YXRpb24uc291cmNlLCBvcHRpb25zT3JDb21wdXRhdGlvbi5jb21wdXRhdGlvbiwgb3B0aW9uc09yQ29tcHV0YXRpb24uZXF1YWwpO1xuICAgIHJldHVybiB1cGdyYWRlTGlua2VkU2lnbmFsR2V0dGVyKGdldHRlciwgb3B0aW9uc09yQ29tcHV0YXRpb24uZGVidWdOYW1lKTtcbiAgfVxufVxuZnVuY3Rpb24gdXBncmFkZUxpbmtlZFNpZ25hbEdldHRlcihnZXR0ZXIsIGRlYnVnTmFtZSkge1xuICBpZiAodHlwZW9mIG5nRGV2TW9kZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbmdEZXZNb2RlKSB7XG4gICAgZ2V0dGVyW1NJR05BTF0uZGVidWdOYW1lID0gZGVidWdOYW1lO1xuICAgIGdldHRlci50b1N0cmluZyA9ICgpID0+IGBbTGlua2VkU2lnbmFsJHtkZWJ1Z05hbWUgPyAnICgnICsgZGVidWdOYW1lICsgJyknIDogJyd9OiAke2dldHRlcigpfV1gO1xuICB9XG4gIGNvbnN0IG5vZGUgPSBnZXR0ZXJbU0lHTkFMXTtcbiAgY29uc3QgdXBncmFkZWRHZXR0ZXIgPSBnZXR0ZXI7XG4gIHVwZ3JhZGVkR2V0dGVyLnNldCA9IG5ld1ZhbHVlID0+IGxpbmtlZFNpZ25hbFNldEZuKG5vZGUsIG5ld1ZhbHVlKTtcbiAgdXBncmFkZWRHZXR0ZXIudXBkYXRlID0gdXBkYXRlRm4gPT4gbGlua2VkU2lnbmFsVXBkYXRlRm4obm9kZSwgdXBkYXRlRm4pO1xuICB1cGdyYWRlZEdldHRlci5hc1JlYWRvbmx5ID0gc2lnbmFsQXNSZWFkb25seUZuLmJpbmQoZ2V0dGVyKTtcbiAgcmV0dXJuIHVwZ3JhZGVkR2V0dGVyO1xufVxuZnVuY3Rpb24gcmVzb3VyY2Uob3B0aW9ucykge1xuICBpZiAobmdEZXZNb2RlICYmICFvcHRpb25zPy5pbmplY3Rvcikge1xuICAgIGFzc2VydEluSW5qZWN0aW9uQ29udGV4dChyZXNvdXJjZSk7XG4gIH1cbiAgY29uc3Qgb2xkTmFtZUZvclBhcmFtcyA9IG9wdGlvbnMucmVxdWVzdDtcbiAgY29uc3QgcGFyYW1zID0gb3B0aW9ucy5wYXJhbXMgPz8gb2xkTmFtZUZvclBhcmFtcyA/PyAoKCkgPT4gbnVsbCk7XG4gIHJldHVybiBuZXcgUmVzb3VyY2VJbXBsKHBhcmFtcywgZ2V0TG9hZGVyKG9wdGlvbnMpLCBvcHRpb25zLmRlZmF1bHRWYWx1ZSwgb3B0aW9ucy5lcXVhbCA/IHdyYXBFcXVhbGl0eUZuKG9wdGlvbnMuZXF1YWwpIDogdW5kZWZpbmVkLCBvcHRpb25zLmRlYnVnTmFtZSwgb3B0aW9ucy5pbmplY3RvciA/PyBpbmplY3QoSW5qZWN0b3IpKTtcbn1cbmNsYXNzIEJhc2VXcml0YWJsZVJlc291cmNlIHtcbiAgdmFsdWU7XG4gIGlzTG9hZGluZztcbiAgY29uc3RydWN0b3IodmFsdWUsIGRlYnVnTmFtZSkge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLnZhbHVlLnNldCA9IHRoaXMuc2V0LmJpbmQodGhpcyk7XG4gICAgdGhpcy52YWx1ZS51cGRhdGUgPSB0aGlzLnVwZGF0ZS5iaW5kKHRoaXMpO1xuICAgIHRoaXMudmFsdWUuYXNSZWFkb25seSA9IHNpZ25hbEFzUmVhZG9ubHlGbjtcbiAgICB0aGlzLmlzTG9hZGluZyA9IGNvbXB1dGVkKCgpID0+IHRoaXMuc3RhdHVzKCkgPT09ICdsb2FkaW5nJyB8fCB0aGlzLnN0YXR1cygpID09PSAncmVsb2FkaW5nJywgbmdEZXZNb2RlID8gY3JlYXRlRGVidWdOYW1lT2JqZWN0KGRlYnVnTmFtZSwgJ2lzTG9hZGluZycpIDogdW5kZWZpbmVkKTtcbiAgfVxuICBpc0Vycm9yID0gLyojX19QVVJFX18qL2NvbXB1dGVkKCgpID0+IHRoaXMuc3RhdHVzKCkgPT09ICdlcnJvcicpO1xuICB1cGRhdGUodXBkYXRlRm4pIHtcbiAgICB0aGlzLnNldCh1cGRhdGVGbih1bnRyYWNrZWQodGhpcy52YWx1ZSkpKTtcbiAgfVxuICBpc1ZhbHVlRGVmaW5lZCA9IC8qI19fUFVSRV9fKi9jb21wdXRlZCgoKSA9PiB7XG4gICAgaWYgKHRoaXMuaXNFcnJvcigpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnZhbHVlKCkgIT09IHVuZGVmaW5lZDtcbiAgfSk7XG4gIF9zbmFwc2hvdDtcbiAgZ2V0IHNuYXBzaG90KCkge1xuICAgIHJldHVybiB0aGlzLl9zbmFwc2hvdCA/Pz0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgY29uc3Qgc3RhdHVzID0gdGhpcy5zdGF0dXMoKTtcbiAgICAgIGlmIChzdGF0dXMgPT09ICdlcnJvcicpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzdGF0dXM6ICdlcnJvcicsXG4gICAgICAgICAgZXJyb3I6IHRoaXMuZXJyb3IoKVxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzdGF0dXMsXG4gICAgICAgICAgdmFsdWU6IHRoaXMudmFsdWUoKVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIGhhc1ZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsdWVEZWZpbmVkKCk7XG4gIH1cbiAgYXNSZWFkb25seSgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxufVxuY2xhc3MgUmVzb3VyY2VJbXBsIGV4dGVuZHMgQmFzZVdyaXRhYmxlUmVzb3VyY2Uge1xuICBsb2FkZXJGbjtcbiAgZXF1YWw7XG4gIGRlYnVnTmFtZTtcbiAgcGVuZGluZ1Rhc2tzO1xuICBzdGF0ZTtcbiAgZXh0UmVxdWVzdDtcbiAgZWZmZWN0UmVmO1xuICBwZW5kaW5nQ29udHJvbGxlcjtcbiAgcmVzb2x2ZVBlbmRpbmdUYXNrID0gdW5kZWZpbmVkO1xuICBkZXN0cm95ZWQgPSBmYWxzZTtcbiAgdW5yZWdpc3Rlck9uRGVzdHJveTtcbiAgc3RhdHVzO1xuICBlcnJvcjtcbiAgY29uc3RydWN0b3IocmVxdWVzdCwgbG9hZGVyRm4sIGRlZmF1bHRWYWx1ZSwgZXF1YWwsIGRlYnVnTmFtZSwgaW5qZWN0b3IsIGdldEluaXRpYWxTdHJlYW0pIHtcbiAgICBzdXBlcihjb21wdXRlZCgoKSA9PiB7XG4gICAgICBjb25zdCBzdHJlYW1WYWx1ZSA9IHRoaXMuc3RhdGUoKS5zdHJlYW0/LigpO1xuICAgICAgaWYgKCFzdHJlYW1WYWx1ZSkge1xuICAgICAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuc3RhdGUoKS5zdGF0dXMgPT09ICdsb2FkaW5nJyAmJiB0aGlzLmVycm9yKCkpIHtcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgICAgIH1cbiAgICAgIGlmICghaXNSZXNvbHZlZChzdHJlYW1WYWx1ZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlVmFsdWVFcnJvcih0aGlzLmVycm9yKCkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHN0cmVhbVZhbHVlLnZhbHVlO1xuICAgIH0sIHtcbiAgICAgIGVxdWFsLFxuICAgICAgLi4uKG5nRGV2TW9kZSA/IGNyZWF0ZURlYnVnTmFtZU9iamVjdChkZWJ1Z05hbWUsICd2YWx1ZScpIDogdW5kZWZpbmVkKVxuICAgIH0pLCBkZWJ1Z05hbWUpO1xuICAgIHRoaXMubG9hZGVyRm4gPSBsb2FkZXJGbjtcbiAgICB0aGlzLmVxdWFsID0gZXF1YWw7XG4gICAgdGhpcy5kZWJ1Z05hbWUgPSBkZWJ1Z05hbWU7XG4gICAgdGhpcy5leHRSZXF1ZXN0ID0gbGlua2VkU2lnbmFsKHtcbiAgICAgIHNvdXJjZTogcmVxdWVzdCxcbiAgICAgIGNvbXB1dGF0aW9uOiByZXF1ZXN0ID0+ICh7XG4gICAgICAgIHJlcXVlc3QsXG4gICAgICAgIHJlbG9hZDogMFxuICAgICAgfSksXG4gICAgICAuLi4obmdEZXZNb2RlID8gY3JlYXRlRGVidWdOYW1lT2JqZWN0KGRlYnVnTmFtZSwgJ2V4dFJlcXVlc3QnKSA6IHVuZGVmaW5lZClcbiAgICB9KTtcbiAgICB0aGlzLnN0YXRlID0gbGlua2VkU2lnbmFsKHtcbiAgICAgIHNvdXJjZTogdGhpcy5leHRSZXF1ZXN0LFxuICAgICAgY29tcHV0YXRpb246IChleHRSZXF1ZXN0LCBwcmV2aW91cykgPT4ge1xuICAgICAgICBpZiAoIXByZXZpb3VzKSB7XG4gICAgICAgICAgY29uc3QgaW5pdGlhbFN0cmVhbSA9IGdldEluaXRpYWxTdHJlYW0/LihleHRSZXF1ZXN0LnJlcXVlc3QpO1xuICAgICAgICAgIGdldEluaXRpYWxTdHJlYW0gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgY29uc3Qgc3RhdHVzID0gZXh0UmVxdWVzdC5yZXF1ZXN0ID09PSB1bmRlZmluZWQgPyAnaWRsZScgOiBpbml0aWFsU3RyZWFtID8gJ3Jlc29sdmVkJyA6ICdsb2FkaW5nJztcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZXh0UmVxdWVzdCxcbiAgICAgICAgICAgIHN0YXR1cyxcbiAgICAgICAgICAgIHByZXZpb3VzU3RhdHVzOiAnaWRsZScsXG4gICAgICAgICAgICBzdHJlYW06IGluaXRpYWxTdHJlYW1cbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHN0YXR1cyA9IGV4dFJlcXVlc3QucmVxdWVzdCA9PT0gdW5kZWZpbmVkID8gJ2lkbGUnIDogJ2xvYWRpbmcnO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBleHRSZXF1ZXN0LFxuICAgICAgICAgICAgc3RhdHVzLFxuICAgICAgICAgICAgcHJldmlvdXNTdGF0dXM6IHByb2plY3RTdGF0dXNPZlN0YXRlKHByZXZpb3VzLnZhbHVlKSxcbiAgICAgICAgICAgIHN0cmVhbTogcHJldmlvdXMudmFsdWUuZXh0UmVxdWVzdC5yZXF1ZXN0ID09PSBleHRSZXF1ZXN0LnJlcXVlc3QgPyBwcmV2aW91cy52YWx1ZS5zdHJlYW0gOiB1bmRlZmluZWRcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgLi4uKG5nRGV2TW9kZSA/IGNyZWF0ZURlYnVnTmFtZU9iamVjdChkZWJ1Z05hbWUsICdzdGF0ZScpIDogdW5kZWZpbmVkKVxuICAgIH0pO1xuICAgIHRoaXMuZWZmZWN0UmVmID0gZWZmZWN0KHRoaXMubG9hZEVmZmVjdC5iaW5kKHRoaXMpLCB7XG4gICAgICBpbmplY3RvcixcbiAgICAgIG1hbnVhbENsZWFudXA6IHRydWUsXG4gICAgICAuLi4obmdEZXZNb2RlID8gY3JlYXRlRGVidWdOYW1lT2JqZWN0KGRlYnVnTmFtZSwgJ2xvYWRFZmZlY3QnKSA6IHVuZGVmaW5lZClcbiAgICB9KTtcbiAgICB0aGlzLnBlbmRpbmdUYXNrcyA9IGluamVjdG9yLmdldChQZW5kaW5nVGFza3MpO1xuICAgIHRoaXMudW5yZWdpc3Rlck9uRGVzdHJveSA9IGluamVjdG9yLmdldChEZXN0cm95UmVmKS5vbkRlc3Ryb3koKCkgPT4gdGhpcy5kZXN0cm95KCkpO1xuICAgIHRoaXMuc3RhdHVzID0gY29tcHV0ZWQoKCkgPT4gcHJvamVjdFN0YXR1c09mU3RhdGUodGhpcy5zdGF0ZSgpKSwgbmdEZXZNb2RlID8gY3JlYXRlRGVidWdOYW1lT2JqZWN0KGRlYnVnTmFtZSwgJ3N0YXR1cycpIDogdW5kZWZpbmVkKTtcbiAgICB0aGlzLmVycm9yID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgY29uc3Qgc3RyZWFtID0gdGhpcy5zdGF0ZSgpLnN0cmVhbT8uKCk7XG4gICAgICByZXR1cm4gc3RyZWFtICYmICFpc1Jlc29sdmVkKHN0cmVhbSkgPyBzdHJlYW0uZXJyb3IgOiB1bmRlZmluZWQ7XG4gICAgfSwgbmdEZXZNb2RlID8gY3JlYXRlRGVidWdOYW1lT2JqZWN0KGRlYnVnTmFtZSwgJ2Vycm9yJykgOiB1bmRlZmluZWQpO1xuICB9XG4gIHNldCh2YWx1ZSkge1xuICAgIGlmICh0aGlzLmRlc3Ryb3llZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBlcnJvciA9IHVudHJhY2tlZCh0aGlzLmVycm9yKTtcbiAgICBjb25zdCBzdGF0ZSA9IHVudHJhY2tlZCh0aGlzLnN0YXRlKTtcbiAgICBpZiAoIWVycm9yKSB7XG4gICAgICBjb25zdCBjdXJyZW50ID0gdW50cmFja2VkKHRoaXMudmFsdWUpO1xuICAgICAgaWYgKHN0YXRlLnN0YXR1cyA9PT0gJ2xvY2FsJyAmJiAodGhpcy5lcXVhbCA/IHRoaXMuZXF1YWwoY3VycmVudCwgdmFsdWUpIDogY3VycmVudCA9PT0gdmFsdWUpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5zdGF0ZS5zZXQoe1xuICAgICAgZXh0UmVxdWVzdDogc3RhdGUuZXh0UmVxdWVzdCxcbiAgICAgIHN0YXR1czogJ2xvY2FsJyxcbiAgICAgIHByZXZpb3VzU3RhdHVzOiAnbG9jYWwnLFxuICAgICAgc3RyZWFtOiBzaWduYWwoe1xuICAgICAgICB2YWx1ZVxuICAgICAgfSwgbmdEZXZNb2RlID8gY3JlYXRlRGVidWdOYW1lT2JqZWN0KHRoaXMuZGVidWdOYW1lLCAnc3RyZWFtJykgOiB1bmRlZmluZWQpXG4gICAgfSk7XG4gICAgdGhpcy5hYm9ydEluUHJvZ3Jlc3NMb2FkKCk7XG4gIH1cbiAgcmVsb2FkKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIHN0YXR1c1xuICAgIH0gPSB1bnRyYWNrZWQodGhpcy5zdGF0ZSk7XG4gICAgaWYgKHN0YXR1cyA9PT0gJ2lkbGUnIHx8IHN0YXR1cyA9PT0gJ2xvYWRpbmcnKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMuZXh0UmVxdWVzdC51cGRhdGUoKHtcbiAgICAgIHJlcXVlc3QsXG4gICAgICByZWxvYWRcbiAgICB9KSA9PiAoe1xuICAgICAgcmVxdWVzdCxcbiAgICAgIHJlbG9hZDogcmVsb2FkICsgMVxuICAgIH0pKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBkZXN0cm95KCkge1xuICAgIHRoaXMuZGVzdHJveWVkID0gdHJ1ZTtcbiAgICB0aGlzLnVucmVnaXN0ZXJPbkRlc3Ryb3koKTtcbiAgICB0aGlzLmVmZmVjdFJlZi5kZXN0cm95KCk7XG4gICAgdGhpcy5hYm9ydEluUHJvZ3Jlc3NMb2FkKCk7XG4gICAgdGhpcy5zdGF0ZS5zZXQoe1xuICAgICAgZXh0UmVxdWVzdDoge1xuICAgICAgICByZXF1ZXN0OiB1bmRlZmluZWQsXG4gICAgICAgIHJlbG9hZDogMFxuICAgICAgfSxcbiAgICAgIHN0YXR1czogJ2lkbGUnLFxuICAgICAgcHJldmlvdXNTdGF0dXM6ICdpZGxlJyxcbiAgICAgIHN0cmVhbTogdW5kZWZpbmVkXG4gICAgfSk7XG4gIH1cbiAgYXN5bmMgbG9hZEVmZmVjdCgpIHtcbiAgICBjb25zdCBleHRSZXF1ZXN0ID0gdGhpcy5leHRSZXF1ZXN0KCk7XG4gICAgY29uc3Qge1xuICAgICAgc3RhdHVzOiBjdXJyZW50U3RhdHVzLFxuICAgICAgcHJldmlvdXNTdGF0dXNcbiAgICB9ID0gdW50cmFja2VkKHRoaXMuc3RhdGUpO1xuICAgIGlmIChleHRSZXF1ZXN0LnJlcXVlc3QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSBpZiAoY3VycmVudFN0YXR1cyAhPT0gJ2xvYWRpbmcnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuYWJvcnRJblByb2dyZXNzTG9hZCgpO1xuICAgIGxldCByZXNvbHZlUGVuZGluZ1Rhc2sgPSB0aGlzLnJlc29sdmVQZW5kaW5nVGFzayA9IHRoaXMucGVuZGluZ1Rhc2tzLmFkZCgpO1xuICAgIGNvbnN0IHtcbiAgICAgIHNpZ25hbDogYWJvcnRTaWduYWxcbiAgICB9ID0gdGhpcy5wZW5kaW5nQ29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3RyZWFtID0gYXdhaXQgdW50cmFja2VkKCgpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9hZGVyRm4oe1xuICAgICAgICAgIHBhcmFtczogZXh0UmVxdWVzdC5yZXF1ZXN0LFxuICAgICAgICAgIGFib3J0U2lnbmFsLFxuICAgICAgICAgIHByZXZpb3VzOiB7XG4gICAgICAgICAgICBzdGF0dXM6IHByZXZpb3VzU3RhdHVzXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgaWYgKGFib3J0U2lnbmFsLmFib3J0ZWQgfHwgdW50cmFja2VkKHRoaXMuZXh0UmVxdWVzdCkgIT09IGV4dFJlcXVlc3QpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5zdGF0ZS5zZXQoe1xuICAgICAgICBleHRSZXF1ZXN0LFxuICAgICAgICBzdGF0dXM6ICdyZXNvbHZlZCcsXG4gICAgICAgIHByZXZpb3VzU3RhdHVzOiAncmVzb2x2ZWQnLFxuICAgICAgICBzdHJlYW1cbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKGFib3J0U2lnbmFsLmFib3J0ZWQgfHwgdW50cmFja2VkKHRoaXMuZXh0UmVxdWVzdCkgIT09IGV4dFJlcXVlc3QpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5zdGF0ZS5zZXQoe1xuICAgICAgICBleHRSZXF1ZXN0LFxuICAgICAgICBzdGF0dXM6ICdyZXNvbHZlZCcsXG4gICAgICAgIHByZXZpb3VzU3RhdHVzOiAnZXJyb3InLFxuICAgICAgICBzdHJlYW06IHNpZ25hbCh7XG4gICAgICAgICAgZXJyb3I6IGVuY2Fwc3VsYXRlUmVzb3VyY2VFcnJvcihlcnIpXG4gICAgICAgIH0sIG5nRGV2TW9kZSA/IGNyZWF0ZURlYnVnTmFtZU9iamVjdCh0aGlzLmRlYnVnTmFtZSwgJ3N0cmVhbScpIDogdW5kZWZpbmVkKVxuICAgICAgfSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHJlc29sdmVQZW5kaW5nVGFzaz8uKCk7XG4gICAgICByZXNvbHZlUGVuZGluZ1Rhc2sgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG4gIGFib3J0SW5Qcm9ncmVzc0xvYWQoKSB7XG4gICAgdW50cmFja2VkKCgpID0+IHRoaXMucGVuZGluZ0NvbnRyb2xsZXI/LmFib3J0KCkpO1xuICAgIHRoaXMucGVuZGluZ0NvbnRyb2xsZXIgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5yZXNvbHZlUGVuZGluZ1Rhc2s/LigpO1xuICAgIHRoaXMucmVzb2x2ZVBlbmRpbmdUYXNrID0gdW5kZWZpbmVkO1xuICB9XG59XG5mdW5jdGlvbiB3cmFwRXF1YWxpdHlGbihlcXVhbCkge1xuICByZXR1cm4gKGEsIGIpID0+IGEgPT09IHVuZGVmaW5lZCB8fCBiID09PSB1bmRlZmluZWQgPyBhID09PSBiIDogZXF1YWwoYSwgYik7XG59XG5mdW5jdGlvbiBnZXRMb2FkZXIob3B0aW9ucykge1xuICBpZiAoaXNTdHJlYW1pbmdSZXNvdXJjZU9wdGlvbnMob3B0aW9ucykpIHtcbiAgICByZXR1cm4gb3B0aW9ucy5zdHJlYW07XG4gIH1cbiAgcmV0dXJuIGFzeW5jIHBhcmFtcyA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBzaWduYWwoe1xuICAgICAgICB2YWx1ZTogYXdhaXQgb3B0aW9ucy5sb2FkZXIocGFyYW1zKVxuICAgICAgfSwgbmdEZXZNb2RlID8gY3JlYXRlRGVidWdOYW1lT2JqZWN0KG9wdGlvbnMuZGVidWdOYW1lLCAnc3RyZWFtJykgOiB1bmRlZmluZWQpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmV0dXJuIHNpZ25hbCh7XG4gICAgICAgIGVycm9yOiBlbmNhcHN1bGF0ZVJlc291cmNlRXJyb3IoZXJyKVxuICAgICAgfSwgbmdEZXZNb2RlID8gY3JlYXRlRGVidWdOYW1lT2JqZWN0KG9wdGlvbnMuZGVidWdOYW1lLCAnc3RyZWFtJykgOiB1bmRlZmluZWQpO1xuICAgIH1cbiAgfTtcbn1cbmZ1bmN0aW9uIGlzU3RyZWFtaW5nUmVzb3VyY2VPcHRpb25zKG9wdGlvbnMpIHtcbiAgcmV0dXJuICEhb3B0aW9ucy5zdHJlYW07XG59XG5mdW5jdGlvbiBwcm9qZWN0U3RhdHVzT2ZTdGF0ZShzdGF0ZSkge1xuICBzd2l0Y2ggKHN0YXRlLnN0YXR1cykge1xuICAgIGNhc2UgJ2xvYWRpbmcnOlxuICAgICAgcmV0dXJuIHN0YXRlLmV4dFJlcXVlc3QucmVsb2FkID09PSAwID8gJ2xvYWRpbmcnIDogJ3JlbG9hZGluZyc7XG4gICAgY2FzZSAncmVzb2x2ZWQnOlxuICAgICAgcmV0dXJuIGlzUmVzb2x2ZWQoc3RhdGUuc3RyZWFtKCkpID8gJ3Jlc29sdmVkJyA6ICdlcnJvcic7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBzdGF0ZS5zdGF0dXM7XG4gIH1cbn1cbmZ1bmN0aW9uIGlzUmVzb2x2ZWQoc3RhdGUpIHtcbiAgcmV0dXJuIHN0YXRlLmVycm9yID09PSB1bmRlZmluZWQ7XG59XG5mdW5jdGlvbiBjcmVhdGVEZWJ1Z05hbWVPYmplY3QocmVzb3VyY2VEZWJ1Z05hbWUsIGludGVybmFsU2lnbmFsRGVidWdOYW1lKSB7XG4gIHJldHVybiB7XG4gICAgZGVidWdOYW1lOiBgUmVzb3VyY2Uke3Jlc291cmNlRGVidWdOYW1lID8gJyMnICsgcmVzb3VyY2VEZWJ1Z05hbWUgOiAnJ30uJHtpbnRlcm5hbFNpZ25hbERlYnVnTmFtZX1gXG4gIH07XG59XG5mdW5jdGlvbiBlbmNhcHN1bGF0ZVJlc291cmNlRXJyb3IoZXJyb3IpIHtcbiAgaWYgKGlzRXJyb3JMaWtlKGVycm9yKSkge1xuICAgIHJldHVybiBlcnJvcjtcbiAgfVxuICByZXR1cm4gbmV3IFJlc291cmNlV3JhcHBlZEVycm9yKGVycm9yKTtcbn1cbmZ1bmN0aW9uIGlzRXJyb3JMaWtlKGVycm9yKSB7XG4gIHJldHVybiBlcnJvciBpbnN0YW5jZW9mIEVycm9yIHx8IHR5cGVvZiBlcnJvciA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIGVycm9yLm5hbWUgPT09ICdzdHJpbmcnICYmIHR5cGVvZiBlcnJvci5tZXNzYWdlID09PSAnc3RyaW5nJztcbn1cbmNsYXNzIFJlc291cmNlVmFsdWVFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IoZXJyb3IpIHtcbiAgICBzdXBlcihuZ0Rldk1vZGUgPyBgUmVzb3VyY2UgaXMgY3VycmVudGx5IGluIGFuIGVycm9yIHN0YXRlIChzZWUgRXJyb3IuY2F1c2UgZm9yIGRldGFpbHMpOiAke2Vycm9yLm1lc3NhZ2V9YCA6IGVycm9yLm1lc3NhZ2UsIHtcbiAgICAgIGNhdXNlOiBlcnJvclxuICAgIH0pO1xuICB9XG59XG5jbGFzcyBSZXNvdXJjZVdyYXBwZWRFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IoZXJyb3IpIHtcbiAgICBzdXBlcihuZ0Rldk1vZGUgPyBgUmVzb3VyY2UgcmV0dXJuZWQgYW4gZXJyb3IgdGhhdCdzIG5vdCBhbiBFcnJvciBpbnN0YW5jZTogJHtTdHJpbmcoZXJyb3IpfS4gQ2hlY2sgdGhpcyBlcnJvcidzIC5jYXVzZSBmb3IgdGhlIGFjdHVhbCBlcnJvci5gIDogU3RyaW5nKGVycm9yKSwge1xuICAgICAgY2F1c2U6IGVycm9yXG4gICAgfSk7XG4gIH1cbn1cbmV4cG9ydCB7IE91dHB1dEVtaXR0ZXJSZWYsIFJlc291cmNlSW1wbCwgUmVzb3VyY2VWYWx1ZUVycm9yLCBjb21wdXRlZCwgZW5jYXBzdWxhdGVSZXNvdXJjZUVycm9yLCBnZXRPdXRwdXREZXN0cm95UmVmLCBsaW5rZWRTaWduYWwsIHJlc291cmNlLCB1bnRyYWNrZWQgfTtcbiIsIi8qKlxuICogQGxpY2Vuc2UgQW5ndWxhciB2MjEuMi40XG4gKiAoYykgMjAxMC0yMDI2IEdvb2dsZSBMTEMuIGh0dHBzOi8vYW5ndWxhci5kZXYvXG4gKiBMaWNlbnNlOiBNSVRcbiAqL1xuXG5pbXBvcnQgeyBSdW50aW1lRXJyb3IsIEluamVjdGlvblRva2VuLCBnZXRDdXJyZW50VE5vZGUsIGFzc2VydEluSW5qZWN0aW9uQ29udGV4dCwgc2lnbmFsQXNSZWFkb25seUZuLCBhc3NlcnROZ01vZHVsZVR5cGUsIEluamVjdG9yLCBpbmplY3QsIE5nWm9uZSwgQ2hhbmdlRGV0ZWN0aW9uU2NoZWR1bGVyLCBJTlRFUk5BTF9BUFBMSUNBVElPTl9FUlJPUl9IQU5ETEVSLCDJtcm1ZGVmaW5lSW5qZWN0YWJsZSBhcyBfX2RlZmluZUluamVjdGFibGUsIFpPTkVMRVNTX0VOQUJMRUQsIEVOVklST05NRU5UX0lOSVRJQUxJWkVSLCBTQ0hFRFVMRV9JTl9ST09UX1pPTkUsIFNDSEVEVUxFX0lOX1JPT1RfWk9ORV9ERUZBVUxULCBtYWtlRW52aXJvbm1lbnRQcm92aWRlcnMsIFBlbmRpbmdUYXNrc0ludGVybmFsLCBmb3JtYXRSdW50aW1lRXJyb3IsIEVSUk9SX0RFVEFJTFNfUEFHRV9CQVNFX1VSTCwgUFJPVklERURfWk9ORUxFU1MsIHN0cmluZ2lmeSwgybXJtWluamVjdCBhcyBfX2luamVjdCwgZXJyb3JIYW5kbGVyRW52aXJvbm1lbnRJbml0aWFsaXplciwgSU5KRUNUT1JfU0NPUEUsIHJ1bkluSW5qZWN0aW9uQ29udGV4dCwgcHJvdmlkZUVudmlyb25tZW50SW5pdGlhbGl6ZXIsIEVycm9ySGFuZGxlciwgX2dsb2JhbCwgdW53cmFwUk5vZGUsIENMRUFOVVAsIERPQ1VNRU5ULCBET0NfUEFHRV9CQVNFX1VSTCwgREVCVUdfVEFTS19UUkFDS0VSLCBpc0NvbXBvbmVudEhvc3QsIGdldENvbXBvbmVudExWaWV3QnlJbmRleCwgZ2V0TFZpZXcsIERFQ0xBUkFUSU9OX0NPTVBPTkVOVF9WSUVXLCDJtcm1ZGVmaW5lSW5qZWN0b3IgYXMgX19kZWZpbmVJbmplY3RvciwgaXNMQ29udGFpbmVyLCBIT1NULCBoYXNJMThuLCB1bndyYXBMVmlldywgUkVOREVSRVIsIGFzc2VydFROb2RlLCBpc1Byb2plY3Rpb25UTm9kZSwgZ2V0Q29tcG9uZW50RGVmLCBQQVJFTlQsIGlzUm9vdFZpZXcsIEhFQURFUl9PRkZTRVQsIFRWSUVXLCBDT05URVhULCBDT05UQUlORVJfSEVBREVSX09GRlNFVCwgYXNzZXJ0Tm90SW5SZWFjdGl2ZUNvbnRleHQsIFZpZXdDb250ZXh0LCBEZXN0cm95UmVmLCBzZXRJbmplY3RvclByb2ZpbGVyQ29udGV4dCwgZW1pdEFmdGVyUmVuZGVyRWZmZWN0UGhhc2VDcmVhdGVkRXZlbnQsIGdldE51bGxJbmplY3RvciB9IGZyb20gJy4vX2VmZmVjdC1jaHVuazIubWpzJztcbmV4cG9ydCB7IEVudmlyb25tZW50SW5qZWN0b3IsIEV2ZW50RW1pdHRlciwgSU5KRUNUT1IsIFBlbmRpbmdUYXNrcywgVkVSU0lPTiwgVmVyc2lvbiwgZWZmZWN0LCBmb3J3YXJkUmVmLCBpbXBvcnRQcm92aWRlcnNGcm9tLCBpc1N0YW5kYWxvbmUsIHByb3ZpZGVCcm93c2VyR2xvYmFsRXJyb3JMaXN0ZW5lcnMsIHJlc29sdmVGb3J3YXJkUmVmLCBzaWduYWwsIEVmZmVjdFNjaGVkdWxlciBhcyDJtUVmZmVjdFNjaGVkdWxlciwgTkdfQ09NUF9ERUYgYXMgybVOR19DT01QX0RFRiwgTkdfRElSX0RFRiBhcyDJtU5HX0RJUl9ERUYsIE5HX0VMRU1FTlRfSUQgYXMgybVOR19FTEVNRU5UX0lELCBOR19JTkpfREVGIGFzIMm1TkdfSU5KX0RFRiwgTkdfTU9EX0RFRiBhcyDJtU5HX01PRF9ERUYsIE5HX1BJUEVfREVGIGFzIMm1TkdfUElQRV9ERUYsIE5HX1BST1ZfREVGIGFzIMm1TkdfUFJPVl9ERUYsIE5vb3BOZ1pvbmUgYXMgybVOb29wTmdab25lLCBSM0luamVjdG9yIGFzIMm1UjNJbmplY3RvciwgWFNTX1NFQ1VSSVRZX1VSTCBhcyDJtVhTU19TRUNVUklUWV9VUkwsIGNvbnZlcnRUb0JpdEZsYWdzIGFzIMm1Y29udmVydFRvQml0RmxhZ3MsIGNyZWF0ZUluamVjdG9yIGFzIMm1Y3JlYXRlSW5qZWN0b3IsIGdldEluamVjdGFibGVEZWYgYXMgybVnZXRJbmplY3RhYmxlRGVmLCBpc0Vudmlyb25tZW50UHJvdmlkZXJzIGFzIMm1aXNFbnZpcm9ubWVudFByb3ZpZGVycywgaXNJbmplY3RhYmxlIGFzIMm1aXNJbmplY3RhYmxlLCBzdG9yZSBhcyDJtXN0b3JlLCB0cnVuY2F0ZU1pZGRsZSBhcyDJtXRydW5jYXRlTWlkZGxlLCDJtXVud3JhcFdyaXRhYmxlU2lnbmFsLCDJtcm1ZGlzYWJsZUJpbmRpbmdzLCDJtcm1ZW5hYmxlQmluZGluZ3MsIMm1ybVpbnZhbGlkRmFjdG9yeURlcCwgybXJtW5hbWVzcGFjZUhUTUwsIMm1ybVuYW1lc3BhY2VNYXRoTUwsIMm1ybVuYW1lc3BhY2VTVkcsIMm1ybVyZXNldFZpZXcsIMm1ybVyZXN0b3JlVmlldyB9IGZyb20gJy4vX2VmZmVjdC1jaHVuazIubWpzJztcbmltcG9ydCB7IFNJR05BTF9OT0RFLCBzaWduYWxTZXRGbiwgU0lHTkFMLCBwcm9kdWNlckFjY2Vzc2VkLCBjb25zdW1lckRlc3Ryb3ksIGNvbnN1bWVyUG9sbFByb2R1Y2Vyc0ZvckNoYW5nZSwgY29uc3VtZXJCZWZvcmVDb21wdXRhdGlvbiwgY29uc3VtZXJBZnRlckNvbXB1dGF0aW9uIH0gZnJvbSAnLi9fZWZmZWN0LWNodW5rLm1qcyc7XG5pbXBvcnQgeyDJtcm1aW5qZWN0QXR0cmlidXRlIGFzIF9faW5qZWN0QXR0cmlidXRlLCBjcmVhdGVNdWx0aVJlc3VsdFF1ZXJ5U2lnbmFsRm4sIGNyZWF0ZVNpbmdsZVJlc3VsdE9wdGlvbmFsUXVlcnlTaWduYWxGbiwgY3JlYXRlU2luZ2xlUmVzdWx0UmVxdWlyZWRRdWVyeVNpZ25hbEZuLCBtYWtlUHJvcERlY29yYXRvciwgTmdNb2R1bGVGYWN0b3J5LCBDT01QSUxFUl9PUFRJT05TLCBzZXRKaXRPcHRpb25zLCBpc0NvbXBvbmVudFJlc291cmNlUmVzb2x1dGlvblF1ZXVlRW1wdHksIGdldENvbXBpbGVyRmFjYWRlLCByZXNvbHZlQ29tcG9uZW50UmVzb3VyY2VzLCBBcHBsaWNhdGlvblJlZiwgc2V0Q2xhc3NNZXRhZGF0YSwgSW5qZWN0YWJsZSwgcGVyZm9ybWFuY2VNYXJrRmVhdHVyZSwgSU1BR0VfQ09ORklHLCBnZXREb2N1bWVudCwgcmVtb3ZlLCBpc1Byb21pc2UsIEFwcGxpY2F0aW9uSW5pdFN0YXR1cywgTE9DQUxFX0lELCBERUZBVUxUX0xPQ0FMRV9JRCwgc2V0TG9jYWxlSWQsIGNyZWF0ZU5nTW9kdWxlUmVmV2l0aFByb3ZpZGVycywgb3B0aW9uc1JlZHVjZXIsIHByb3ZpZGVab25lbGVzc0NoYW5nZURldGVjdGlvbkludGVybmFsLCB2YWxpZEFwcElkSW5pdGlhbGl6ZXIsIHB1Ymxpc2hEZWZhdWx0R2xvYmFsVXRpbHMsIFBMQVRGT1JNX0lOSVRJQUxJWkVSLCBwdWJsaXNoU2lnbmFsQ29uZmlndXJhdGlvbiwgQ2hhbmdlRGV0ZWN0aW9uU2NoZWR1bGVySW1wbCwgY2hlY2tOb0NoYW5nZXNJbnRlcm5hbCwgVXNlRXhoYXVzdGl2ZUNoZWNrTm9DaGFuZ2VzLCBKU0FDVElPTl9CTE9DS19FTEVNRU5UX01BUCwgQVBQX0lELCBzZXRTdGFzaEZuLCBBUFBfQk9PVFNUUkFQX0xJU1RFTkVSLCBKU0FDVElPTl9FVkVOVF9DT05UUkFDVCwgcmVtb3ZlTGlzdGVuZXJzLCBpc0luY3JlbWVudGFsSHlkcmF0aW9uRW5hYmxlZCwgREVGRVJfQkxPQ0tfU1NSX0lEX0FUVFJJQlVURSwgaW52b2tlTGlzdGVuZXJzLCBFVkVOVF9SRVBMQVlfUVVFVUUsIHRyaWdnZXJIeWRyYXRpb25Gcm9tQmxvY2tOYW1lLCBJU19FVkVOVF9SRVBMQVlfRU5BQkxFRCwgRVZFTlRfUkVQTEFZX0VOQUJMRURfREVGQVVMVCwgc2hhcmVkU3Rhc2hGdW5jdGlvbiwgc2hhcmVkTWFwRnVuY3Rpb24sIGVuYWJsZVN0YXNoRXZlbnRMaXN0ZW5lckltcGwsIElTX0kxOE5fSFlEUkFUSU9OX0VOQUJMRUQsIElTX0hZRFJBVElPTl9ET01fUkVVU0VfRU5BQkxFRCwgSVNfSU5DUkVNRU5UQUxfSFlEUkFUSU9OX0VOQUJMRUQsIERFSFlEUkFURURfQkxPQ0tfUkVHSVNUUlksIERlaHlkcmF0ZWRCbG9ja1JlZ2lzdHJ5LCBwcm9jZXNzQmxvY2tEYXRhLCBnYXRoZXJEZWZlckJsb2Nrc0NvbW1lbnROb2RlcywgcHJvY2Vzc0FuZEluaXRUcmlnZ2VycywgYXBwZW5kRGVmZXJCbG9ja3NUb0pTQWN0aW9uTWFwLCBUcmFuc2ZlclN0YXRlLCBOR0hfREFUQV9LRVksIHZlcmlmeVNzckNvbnRlbnRzSW50ZWdyaXR5LCBDb25zb2xlLCBQUkVTRVJWRV9IT1NUX0NPTlRFTlQsIGNsZWFudXBEZWh5ZHJhdGVkVmlld3MsIGNvdW50QmxvY2tzU2tpcHBlZEJ5SHlkcmF0aW9uLCBlbmFibGVSZXRyaWV2ZUh5ZHJhdGlvbkluZm9JbXBsLCBlbmFibGVMb2NhdGVPckNyZWF0ZUVsZW1lbnROb2RlSW1wbCwgZW5hYmxlTG9jYXRlT3JDcmVhdGVUZXh0Tm9kZUltcGwsIGVuYWJsZUxvY2F0ZU9yQ3JlYXRlRWxlbWVudENvbnRhaW5lck5vZGVJbXBsLCBlbmFibGVMb2NhdGVPckNyZWF0ZUNvbnRhaW5lckFuY2hvckltcGwsIGVuYWJsZUxvY2F0ZU9yQ3JlYXRlQ29udGFpbmVyUmVmSW1wbCwgZW5hYmxlRmluZE1hdGNoaW5nRGVoeWRyYXRlZFZpZXdJbXBsLCBlbmFibGVBcHBseVJvb3RFbGVtZW50VHJhbnNmb3JtSW1wbCwgZW5hYmxlTG9jYXRlT3JDcmVhdGVJMThuTm9kZUltcGwsIGVuYWJsZVByZXBhcmVJMThuQmxvY2tGb3JIeWRyYXRpb25JbXBsLCBzZXRJc0kxOG5IeWRyYXRpb25TdXBwb3J0RW5hYmxlZCwgZW5hYmxlQ2xhaW1EZWh5ZHJhdGVkSWN1Q2FzZUltcGwsIGVuYWJsZVJldHJpZXZlRGVmZXJCbG9ja0RhdGFJbXBsLCBwcm92aWRlQXBwSW5pdGlhbGl6ZXIsIGdldFJlZ2lzdGVyZWROZ01vZHVsZVR5cGUsIFZpZXdSZWYgYXMgVmlld1JlZiQxLCBpc0xpc3RMaWtlSXRlcmFibGUsIGl0ZXJhdGVMaXN0TGlrZSwgaXNKc09iamVjdCwgybXJtWRlZmluZU5nTW9kdWxlIGFzIF9fZGVmaW5lTmdNb2R1bGUsIE5nTW9kdWxlLCBwcm9maWxlciwgYXNzZXJ0U3RhbmRhbG9uZUNvbXBvbmVudFR5cGUsIEVudmlyb25tZW50TmdNb2R1bGVSZWZBZGFwdGVyLCBQcm9maWxlckV2ZW50LCBpc0kxOG5IeWRyYXRpb25FbmFibGVkLCBOR0hfREVGRVJfQkxPQ0tTX0tFWSwgU0tJUF9IWURSQVRJT05fQVRUUl9OQU1FLCBOR0hfQVRUUl9OQU1FLCBnZXRMTm9kZUZvckh5ZHJhdGlvbiwgaXNJMThuSHlkcmF0aW9uU3VwcG9ydEVuYWJsZWQsIGdldE9yQ29tcHV0ZUkxOG5DaGlsZHJlbiwgdHJ5U2VyaWFsaXplSTE4bkJsb2NrLCBJMThOX0RBVEEsIGlzVE5vZGVTaGFwZSwgaXNEZXRhY2hlZEJ5STE4biwgVEVNUExBVEVTLCBpc0Rpc2Nvbm5lY3RlZE5vZGUsIGlzSW5Ta2lwSHlkcmF0aW9uQmxvY2ssIHVuc3VwcG9ydGVkUHJvamVjdGlvbk9mRG9tTm9kZXMsIENPTlRBSU5FUlMsIGlzTGV0RGVjbGFyYXRpb24sIEVMRU1FTlRfQ09OVEFJTkVSUywgcHJvY2Vzc1RleHROb2RlQmVmb3JlU2VyaWFsaXphdGlvbiwgc2V0SlNBY3Rpb25BdHRyaWJ1dGVzLCBWaWV3RW5jYXBzdWxhdGlvbiBhcyBWaWV3RW5jYXBzdWxhdGlvbiQxLCBjb2xsZWN0TmF0aXZlTm9kZXMsIFRFTVBMQVRFX0lELCBOVU1fUk9PVF9OT0RFUywgaXNEZWZlckJsb2NrLCBnZXRMRGVmZXJCbG9ja0RldGFpbHMsIGdldFREZWZlckJsb2NrRGV0YWlscywgY29sbGVjdE5hdGl2ZU5vZGVzSW5MQ29udGFpbmVyLCB2YWxpZGF0ZU5vZGVFeGlzdHMsIHZhbGlkYXRlTWF0Y2hpbmdOb2RlLCBERUZFUl9CTE9DS19JRCwgREVGRVJfQkxPQ0tfU1RBVEUsIERFRkVSX0JMT0NLX1NUQVRFJDEsIE1VTFRJUExJRVIsIE5PREVTLCBjYWxjUGF0aEZvck5vZGUsIERJU0NPTk5FQ1RFRF9OT0RFUywgY29udmVydEh5ZHJhdGVUcmlnZ2Vyc1RvSnNBY3Rpb24sIERFRkVSX0hZRFJBVEVfVFJJR0dFUlMsIERFRkVSX1BBUkVOVF9CTE9DS19JRCwgYW5ndWxhckNvcmVFbnYsIHNldENsYXNzTWV0YWRhdGFBc3luYywgTk9PUF9BRlRFUl9SRU5ERVJfUkVGLCBBZnRlclJlbmRlck1hbmFnZXIsIFRyYWNpbmdTZXJ2aWNlLCBBZnRlclJlbmRlckltcGwsIEFmdGVyUmVuZGVyU2VxdWVuY2UsIEFGVEVSX1JFTkRFUl9QSEFTRVMsIGlzU2lnbmFsLCBhc3NlcnRDb21wb25lbnREZWYsIENvbXBvbmVudEZhY3RvcnkgfSBmcm9tICcuL19kZWJ1Z19ub2RlLWNodW5rLm1qcyc7XG5leHBvcnQgeyBBTklNQVRJT05fTU9EVUxFX1RZUEUsIEFQUF9JTklUSUFMSVpFUiwgQXR0cmlidXRlLCBDU1BfTk9OQ0UsIENVU1RPTV9FTEVNRU5UU19TQ0hFTUEsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21waWxlciwgQ29tcGlsZXJGYWN0b3J5LCBDb21wb25lbnQsIENvbXBvbmVudEZhY3RvcnkkMSBhcyBDb21wb25lbnRGYWN0b3J5LCBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsIENvbXBvbmVudFJlZiwgREVGQVVMVF9DVVJSRU5DWV9DT0RFLCBEZWJ1Z0VsZW1lbnQsIERlYnVnRXZlbnRMaXN0ZW5lciwgRGVidWdOb2RlLCBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIEhvc3QsIEhvc3RCaW5kaW5nLCBIb3N0TGlzdGVuZXIsIEluamVjdCwgSW5wdXQsIE1BWF9BTklNQVRJT05fVElNRU9VVCwgTWlzc2luZ1RyYW5zbGF0aW9uU3RyYXRlZ3ksIE1vZHVsZVdpdGhDb21wb25lbnRGYWN0b3JpZXMsIE5PX0VSUk9SU19TQ0hFTUEsIE5nTW9kdWxlRmFjdG9yeSQxIGFzIE5nTW9kdWxlRmFjdG9yeSwgTmdNb2R1bGVSZWYkMSBhcyBOZ01vZHVsZVJlZiwgT3B0aW9uYWwsIE91dHB1dCwgUExBVEZPUk1fSUQsIFBpcGUsIFF1ZXJ5TGlzdCwgUmVuZGVyZXIyLCBSZW5kZXJlckZhY3RvcnkyLCBSZW5kZXJlclN0eWxlRmxhZ3MyLCBTYW5pdGl6ZXIsIFNlY3VyaXR5Q29udGV4dCwgU2VsZiwgU2ltcGxlQ2hhbmdlLCBTa2lwU2VsZiwgVFJBTlNMQVRJT05TLCBUUkFOU0xBVElPTlNfRk9STUFULCBUZW1wbGF0ZVJlZiwgVGVzdGFiaWxpdHksIFRlc3RhYmlsaXR5UmVnaXN0cnksIFR5cGUsIFZpZXdDb250YWluZXJSZWYsIGFmdGVyRXZlcnlSZW5kZXIsIGFmdGVyTmV4dFJlbmRlciwgYXNOYXRpdmVFbGVtZW50cywgY3JlYXRlRW52aXJvbm1lbnRJbmplY3RvciwgY3JlYXRlTmdNb2R1bGUsIGNyZWF0ZU5nTW9kdWxlUmVmLCBlbmFibGVQcm9maWxpbmcsIGdldERlYnVnTm9kZSwgaW5wdXRCaW5kaW5nLCBpc1dyaXRhYmxlU2lnbmFsLCBtYWtlU3RhdGVLZXksIG91dHB1dEJpbmRpbmcsIHByb3ZpZGVOZ1JlZmxlY3RBdHRyaWJ1dGVzLCBwcm92aWRlWm9uZWxlc3NDaGFuZ2VEZXRlY3Rpb24sIHNldFRlc3RhYmlsaXR5R2V0dGVyLCB0d29XYXlCaW5kaW5nLCBBTklNQVRJT05TX0RJU0FCTEVEIGFzIMm1QU5JTUFUSU9OU19ESVNBQkxFRCwgQWN4Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kgYXMgybVBY3hDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQWN4Vmlld0VuY2Fwc3VsYXRpb24gYXMgybVBY3hWaWV3RW5jYXBzdWxhdGlvbiwgQ29tcG9uZW50RmFjdG9yeSQxIGFzIMm1Q29tcG9uZW50RmFjdG9yeSwgREVGRVJfQkxPQ0tfQ09ORklHIGFzIMm1REVGRVJfQkxPQ0tfQ09ORklHLCBERUZFUl9CTE9DS19ERVBFTkRFTkNZX0lOVEVSQ0VQVE9SIGFzIMm1REVGRVJfQkxPQ0tfREVQRU5ERU5DWV9JTlRFUkNFUFRPUiwgRGVmZXJCbG9ja0JlaGF2aW9yIGFzIMm1RGVmZXJCbG9ja0JlaGF2aW9yLCBEZWZlckJsb2NrU3RhdGUgYXMgybVEZWZlckJsb2NrU3RhdGUsIEh5ZHJhdGlvblN0YXR1cyBhcyDJtUh5ZHJhdGlvblN0YXR1cywgSU1BR0VfQ09ORklHX0RFRkFVTFRTIGFzIMm1SU1BR0VfQ09ORklHX0RFRkFVTFRTLCBJU19FTkFCTEVEX0JMT0NLSU5HX0lOSVRJQUxfTkFWSUdBVElPTiBhcyDJtUlTX0VOQUJMRURfQkxPQ0tJTkdfSU5JVElBTF9OQVZJR0FUSU9OLCBMQ29udGV4dCBhcyDJtUxDb250ZXh0LCBMb2NhbGVEYXRhSW5kZXggYXMgybVMb2NhbGVEYXRhSW5kZXgsIE5PVF9GT1VORF9DSEVDS19PTkxZX0VMRU1FTlRfSU5KRUNUT1IgYXMgybVOT1RfRk9VTkRfQ0hFQ0tfT05MWV9FTEVNRU5UX0lOSkVDVE9SLCBOT19DSEFOR0UgYXMgybVOT19DSEFOR0UsIFJlZmxlY3Rpb25DYXBhYmlsaXRpZXMgYXMgybVSZWZsZWN0aW9uQ2FwYWJpbGl0aWVzLCBDb21wb25lbnRSZWYkMSBhcyDJtVJlbmRlcjNDb21wb25lbnRSZWYsIE5nTW9kdWxlUmVmIGFzIMm1UmVuZGVyM05nTW9kdWxlUmVmLCBTU1JfQ09OVEVOVF9JTlRFR1JJVFlfTUFSS0VSIGFzIMm1U1NSX0NPTlRFTlRfSU5URUdSSVRZX01BUktFUiwgVEVTVEFCSUxJVFkgYXMgybVURVNUQUJJTElUWSwgVEVTVEFCSUxJVFlfR0VUVEVSIGFzIMm1VEVTVEFCSUxJVFlfR0VUVEVSLCBUaW1lclNjaGVkdWxlciBhcyDJtVRpbWVyU2NoZWR1bGVyLCBUcmFjaW5nQWN0aW9uIGFzIMm1VHJhY2luZ0FjdGlvbiwgX3Nhbml0aXplSHRtbCBhcyDJtV9zYW5pdGl6ZUh0bWwsIF9zYW5pdGl6ZVVybCBhcyDJtV9zYW5pdGl6ZVVybCwgYWxsTGVhdmluZ0FuaW1hdGlvbnMgYXMgybVhbGxMZWF2aW5nQW5pbWF0aW9ucywgYWxsb3dTYW5pdGl6YXRpb25CeXBhc3NBbmRUaHJvdyBhcyDJtWFsbG93U2FuaXRpemF0aW9uQnlwYXNzQW5kVGhyb3csIGJ5cGFzc1Nhbml0aXphdGlvblRydXN0SHRtbCBhcyDJtWJ5cGFzc1Nhbml0aXphdGlvblRydXN0SHRtbCwgYnlwYXNzU2FuaXRpemF0aW9uVHJ1c3RSZXNvdXJjZVVybCBhcyDJtWJ5cGFzc1Nhbml0aXphdGlvblRydXN0UmVzb3VyY2VVcmwsIGJ5cGFzc1Nhbml0aXphdGlvblRydXN0U2NyaXB0IGFzIMm1YnlwYXNzU2FuaXRpemF0aW9uVHJ1c3RTY3JpcHQsIGJ5cGFzc1Nhbml0aXphdGlvblRydXN0U3R5bGUgYXMgybVieXBhc3NTYW5pdGl6YXRpb25UcnVzdFN0eWxlLCBieXBhc3NTYW5pdGl6YXRpb25UcnVzdFVybCBhcyDJtWJ5cGFzc1Nhbml0aXphdGlvblRydXN0VXJsLCBjbGVhclJlc29sdXRpb25PZkNvbXBvbmVudFJlc291cmNlc1F1ZXVlIGFzIMm1Y2xlYXJSZXNvbHV0aW9uT2ZDb21wb25lbnRSZXNvdXJjZXNRdWV1ZSwgY29tcGlsZUNvbXBvbmVudCBhcyDJtWNvbXBpbGVDb21wb25lbnQsIGNvbXBpbGVEaXJlY3RpdmUgYXMgybVjb21waWxlRGlyZWN0aXZlLCBjb21waWxlTmdNb2R1bGUgYXMgybVjb21waWxlTmdNb2R1bGUsIGNvbXBpbGVOZ01vZHVsZURlZnMgYXMgybVjb21waWxlTmdNb2R1bGVEZWZzLCBjb21waWxlUGlwZSBhcyDJtWNvbXBpbGVQaXBlLCBkZXBzVHJhY2tlciBhcyDJtWRlcHNUcmFja2VyLCBkZXZNb2RlRXF1YWwgYXMgybVkZXZNb2RlRXF1YWwsIGZpbmRMb2NhbGVEYXRhIGFzIMm1ZmluZExvY2FsZURhdGEsIGZsdXNoTW9kdWxlU2NvcGluZ1F1ZXVlQXNNdWNoQXNQb3NzaWJsZSBhcyDJtWZsdXNoTW9kdWxlU2NvcGluZ1F1ZXVlQXNNdWNoQXNQb3NzaWJsZSwgZ2VuZXJhdGVTdGFuZGFsb25lSW5EZWNsYXJhdGlvbnNFcnJvciBhcyDJtWdlbmVyYXRlU3RhbmRhbG9uZUluRGVjbGFyYXRpb25zRXJyb3IsIGdldEFzeW5jQ2xhc3NNZXRhZGF0YUZuIGFzIMm1Z2V0QXN5bmNDbGFzc01ldGFkYXRhRm4sIGdldENsb3Nlc3RDb21wb25lbnROYW1lIGFzIMm1Z2V0Q2xvc2VzdENvbXBvbmVudE5hbWUsIGdldERlZmVyQmxvY2tzIGFzIMm1Z2V0RGVmZXJCbG9ja3MsIGdldERpcmVjdGl2ZXMgYXMgybVnZXREaXJlY3RpdmVzLCBnZXRIb3N0RWxlbWVudCBhcyDJtWdldEhvc3RFbGVtZW50LCBnZXRMQ29udGV4dCBhcyDJtWdldExDb250ZXh0LCBnZXRMb2NhbGVDdXJyZW5jeUNvZGUgYXMgybVnZXRMb2NhbGVDdXJyZW5jeUNvZGUsIGdldExvY2FsZVBsdXJhbENhc2UgYXMgybVnZXRMb2NhbGVQbHVyYWxDYXNlLCBnZXRTYW5pdGl6YXRpb25CeXBhc3NUeXBlIGFzIMm1Z2V0U2FuaXRpemF0aW9uQnlwYXNzVHlwZSwgZ2V0VHJhbnNmZXJTdGF0ZSBhcyDJtWdldFRyYW5zZmVyU3RhdGUsIMm1Z2V0VW5rbm93bkVsZW1lbnRTdHJpY3RNb2RlLCDJtWdldFVua25vd25Qcm9wZXJ0eVN0cmljdE1vZGUsIGluZmVyVGFnTmFtZUZyb21EZWZpbml0aW9uIGFzIMm1aW5mZXJUYWdOYW1lRnJvbURlZmluaXRpb24sIGlzQm91bmRUb01vZHVsZSBhcyDJtWlzQm91bmRUb01vZHVsZSwgaXNDb21wb25lbnREZWZQZW5kaW5nUmVzb2x1dGlvbiBhcyDJtWlzQ29tcG9uZW50RGVmUGVuZGluZ1Jlc29sdXRpb24sIGlzTmdNb2R1bGUgYXMgybVpc05nTW9kdWxlLCBpc1N1YnNjcmliYWJsZSBhcyDJtWlzU3Vic2NyaWJhYmxlLCBpc1ZpZXdEaXJ0eSBhcyDJtWlzVmlld0RpcnR5LCBtYXJrRm9yUmVmcmVzaCBhcyDJtW1hcmtGb3JSZWZyZXNoLCBub1NpZGVFZmZlY3RzIGFzIMm1bm9TaWRlRWZmZWN0cywgcGF0Y2hDb21wb25lbnREZWZXaXRoU2NvcGUgYXMgybVwYXRjaENvbXBvbmVudERlZldpdGhTY29wZSwgcHJvbWlzZVdpdGhSZXNvbHZlcnMgYXMgybVwcm9taXNlV2l0aFJlc29sdmVycywgcHVibGlzaEV4dGVybmFsR2xvYmFsVXRpbCBhcyDJtXB1Ymxpc2hFeHRlcm5hbEdsb2JhbFV0aWwsIHJlYWRIeWRyYXRpb25JbmZvIGFzIMm1cmVhZEh5ZHJhdGlvbkluZm8sIHJlZ2lzdGVyTG9jYWxlRGF0YSBhcyDJtXJlZ2lzdGVyTG9jYWxlRGF0YSwgcmVuZGVyRGVmZXJCbG9ja1N0YXRlIGFzIMm1cmVuZGVyRGVmZXJCbG9ja1N0YXRlLCByZXNldENvbXBpbGVkQ29tcG9uZW50cyBhcyDJtXJlc2V0Q29tcGlsZWRDb21wb25lbnRzLCByZXNldEluY3JlbWVudGFsSHlkcmF0aW9uRW5hYmxlZFdhcm5lZEZvclRlc3RzIGFzIMm1cmVzZXRJbmNyZW1lbnRhbEh5ZHJhdGlvbkVuYWJsZWRXYXJuZWRGb3JUZXN0cywgcmVzZXRKaXRPcHRpb25zIGFzIMm1cmVzZXRKaXRPcHRpb25zLCByZXN0b3JlQ29tcG9uZW50UmVzb2x1dGlvblF1ZXVlIGFzIMm1cmVzdG9yZUNvbXBvbmVudFJlc29sdXRpb25RdWV1ZSwgc2V0QWxsb3dEdXBsaWNhdGVOZ01vZHVsZUlkc0ZvclRlc3QgYXMgybVzZXRBbGxvd0R1cGxpY2F0ZU5nTW9kdWxlSWRzRm9yVGVzdCwgybVzZXRDbGFzc0RlYnVnSW5mbywgc2V0RG9jdW1lbnQgYXMgybVzZXREb2N1bWVudCwgybVzZXRVbmtub3duRWxlbWVudFN0cmljdE1vZGUsIMm1c2V0VW5rbm93blByb3BlcnR5U3RyaWN0TW9kZSwgdHJhbnNpdGl2ZVNjb3Blc0ZvciBhcyDJtXRyYW5zaXRpdmVTY29wZXNGb3IsIHRyaWdnZXJSZXNvdXJjZUxvYWRpbmcgYXMgybV0cmlnZ2VyUmVzb3VyY2VMb2FkaW5nLCB1bnJlZ2lzdGVyQWxsTG9jYWxlRGF0YSBhcyDJtXVucmVnaXN0ZXJMb2NhbGVEYXRhLCB1bndyYXBTYWZlVmFsdWUgYXMgybV1bndyYXBTYWZlVmFsdWUsIMm1ybVDb250cm9sRmVhdHVyZSwgybXJtUV4dGVybmFsU3R5bGVzRmVhdHVyZSwgybXJtUhvc3REaXJlY3RpdmVzRmVhdHVyZSwgybXJtUluaGVyaXREZWZpbml0aW9uRmVhdHVyZSwgybXJtU5nT25DaGFuZ2VzRmVhdHVyZSwgybXJtVByb3ZpZGVyc0ZlYXR1cmUsIMm1ybVhZHZhbmNlLCDJtcm1YW5pbWF0ZUVudGVyLCDJtcm1YW5pbWF0ZUVudGVyTGlzdGVuZXIsIMm1ybVhbmltYXRlTGVhdmUsIMm1ybVhbmltYXRlTGVhdmVMaXN0ZW5lciwgybXJtWFyaWFQcm9wZXJ0eSwgybXJtWFycm93RnVuY3Rpb24sIMm1ybVhdHRhY2hTb3VyY2VMb2NhdGlvbnMsIMm1ybVhdHRyaWJ1dGUsIMm1ybVjbGFzc01hcCwgybXJtWNsYXNzUHJvcCwgybXJtWNvbXBvbmVudEluc3RhbmNlLCDJtcm1Y29uZGl0aW9uYWwsIMm1ybVjb25kaXRpb25hbEJyYW5jaENyZWF0ZSwgybXJtWNvbmRpdGlvbmFsQ3JlYXRlLCDJtcm1Y29udGVudFF1ZXJ5LCDJtcm1Y29udGVudFF1ZXJ5U2lnbmFsLCDJtcm1Y29udHJvbCwgybXJtWNvbnRyb2xDcmVhdGUsIMm1ybVkZWNsYXJlTGV0LCDJtcm1ZGVmZXIsIMm1ybVkZWZlckVuYWJsZVRpbWVyU2NoZWR1bGluZywgybXJtWRlZmVySHlkcmF0ZU5ldmVyLCDJtcm1ZGVmZXJIeWRyYXRlT25Ib3ZlciwgybXJtWRlZmVySHlkcmF0ZU9uSWRsZSwgybXJtWRlZmVySHlkcmF0ZU9uSW1tZWRpYXRlLCDJtcm1ZGVmZXJIeWRyYXRlT25JbnRlcmFjdGlvbiwgybXJtWRlZmVySHlkcmF0ZU9uVGltZXIsIMm1ybVkZWZlckh5ZHJhdGVPblZpZXdwb3J0LCDJtcm1ZGVmZXJIeWRyYXRlV2hlbiwgybXJtWRlZmVyT25Ib3ZlciwgybXJtWRlZmVyT25JZGxlLCDJtcm1ZGVmZXJPbkltbWVkaWF0ZSwgybXJtWRlZmVyT25JbnRlcmFjdGlvbiwgybXJtWRlZmVyT25UaW1lciwgybXJtWRlZmVyT25WaWV3cG9ydCwgybXJtWRlZmVyUHJlZmV0Y2hPbkhvdmVyLCDJtcm1ZGVmZXJQcmVmZXRjaE9uSWRsZSwgybXJtWRlZmVyUHJlZmV0Y2hPbkltbWVkaWF0ZSwgybXJtWRlZmVyUHJlZmV0Y2hPbkludGVyYWN0aW9uLCDJtcm1ZGVmZXJQcmVmZXRjaE9uVGltZXIsIMm1ybVkZWZlclByZWZldGNoT25WaWV3cG9ydCwgybXJtWRlZmVyUHJlZmV0Y2hXaGVuLCDJtcm1ZGVmZXJXaGVuLCDJtcm1ZGVmaW5lQ29tcG9uZW50LCDJtcm1ZGVmaW5lRGlyZWN0aXZlLCDJtcm1ZGVmaW5lUGlwZSwgybXJtWRpcmVjdGl2ZUluamVjdCwgybXJtWRvbUVsZW1lbnQsIMm1ybVkb21FbGVtZW50Q29udGFpbmVyLCDJtcm1ZG9tRWxlbWVudENvbnRhaW5lckVuZCwgybXJtWRvbUVsZW1lbnRDb250YWluZXJTdGFydCwgybXJtWRvbUVsZW1lbnRFbmQsIMm1ybVkb21FbGVtZW50U3RhcnQsIMm1ybVkb21MaXN0ZW5lciwgybXJtWRvbVByb3BlcnR5LCDJtcm1ZG9tVGVtcGxhdGUsIMm1ybVlbGVtZW50LCDJtcm1ZWxlbWVudENvbnRhaW5lciwgybXJtWVsZW1lbnRDb250YWluZXJFbmQsIMm1ybVlbGVtZW50Q29udGFpbmVyU3RhcnQsIMm1ybVlbGVtZW50RW5kLCDJtcm1ZWxlbWVudFN0YXJ0LCDJtcm1Z2V0Q29tcG9uZW50RGVwc0ZhY3RvcnksIMm1ybVnZXRDdXJyZW50VmlldywgybXJtWdldEluaGVyaXRlZEZhY3RvcnksIMm1ybVnZXRSZXBsYWNlTWV0YWRhdGFVUkwsIMm1ybVpMThuLCDJtcm1aTE4bkFwcGx5LCDJtcm1aTE4bkF0dHJpYnV0ZXMsIMm1ybVpMThuRW5kLCDJtcm1aTE4bkV4cCwgybXJtWkxOG5Qb3N0cHJvY2VzcywgybXJtWkxOG5TdGFydCwgybXJtWludGVycG9sYXRlLCDJtcm1aW50ZXJwb2xhdGUxLCDJtcm1aW50ZXJwb2xhdGUyLCDJtcm1aW50ZXJwb2xhdGUzLCDJtcm1aW50ZXJwb2xhdGU0LCDJtcm1aW50ZXJwb2xhdGU1LCDJtcm1aW50ZXJwb2xhdGU2LCDJtcm1aW50ZXJwb2xhdGU3LCDJtcm1aW50ZXJwb2xhdGU4LCDJtcm1aW50ZXJwb2xhdGVWLCDJtcm1aW52YWxpZEZhY3RvcnksIMm1ybVsaXN0ZW5lciwgybXJtWxvYWRRdWVyeSwgybXJtW5leHRDb250ZXh0LCDJtcm1cGlwZSwgybXJtXBpcGVCaW5kMSwgybXJtXBpcGVCaW5kMiwgybXJtXBpcGVCaW5kMywgybXJtXBpcGVCaW5kNCwgybXJtXBpcGVCaW5kViwgybXJtXByb2plY3Rpb24sIMm1ybVwcm9qZWN0aW9uRGVmLCDJtcm1cHJvcGVydHksIMm1ybVwdXJlRnVuY3Rpb24wLCDJtcm1cHVyZUZ1bmN0aW9uMSwgybXJtXB1cmVGdW5jdGlvbjIsIMm1ybVwdXJlRnVuY3Rpb24zLCDJtcm1cHVyZUZ1bmN0aW9uNCwgybXJtXB1cmVGdW5jdGlvbjUsIMm1ybVwdXJlRnVuY3Rpb242LCDJtcm1cHVyZUZ1bmN0aW9uNywgybXJtXB1cmVGdW5jdGlvbjgsIMm1ybVwdXJlRnVuY3Rpb25WLCDJtcm1cXVlcnlBZHZhbmNlLCDJtcm1cXVlcnlSZWZyZXNoLCDJtcm1cmVhZENvbnRleHRMZXQsIMm1ybVyZWZlcmVuY2UsIHJlZ2lzdGVyTmdNb2R1bGVUeXBlIGFzIMm1ybVyZWdpc3Rlck5nTW9kdWxlVHlwZSwgybXJtXJlcGVhdGVyLCDJtcm1cmVwZWF0ZXJDcmVhdGUsIMm1ybVyZXBlYXRlclRyYWNrQnlJZGVudGl0eSwgybXJtXJlcGVhdGVyVHJhY2tCeUluZGV4LCDJtcm1cmVwbGFjZU1ldGFkYXRhLCDJtcm1cmVzb2x2ZUJvZHksIMm1ybVyZXNvbHZlRG9jdW1lbnQsIMm1ybVyZXNvbHZlV2luZG93LCDJtcm1c2FuaXRpemVIdG1sLCDJtcm1c2FuaXRpemVSZXNvdXJjZVVybCwgybXJtXNhbml0aXplU2NyaXB0LCDJtcm1c2FuaXRpemVTdHlsZSwgybXJtXNhbml0aXplVXJsLCDJtcm1c2FuaXRpemVVcmxPclJlc291cmNlVXJsLCDJtcm1c2V0Q29tcG9uZW50U2NvcGUsIMm1ybVzZXROZ01vZHVsZVNjb3BlLCDJtcm1c3RvcmVMZXQsIMm1ybVzdHlsZU1hcCwgybXJtXN0eWxlUHJvcCwgybXJtXN5bnRoZXRpY0hvc3RMaXN0ZW5lciwgybXJtXN5bnRoZXRpY0hvc3RQcm9wZXJ0eSwgybXJtXRlbXBsYXRlLCDJtcm1dGVtcGxhdGVSZWZFeHRyYWN0b3IsIMm1ybV0ZXh0LCDJtcm1dGV4dEludGVycG9sYXRlLCDJtcm1dGV4dEludGVycG9sYXRlMSwgybXJtXRleHRJbnRlcnBvbGF0ZTIsIMm1ybV0ZXh0SW50ZXJwb2xhdGUzLCDJtcm1dGV4dEludGVycG9sYXRlNCwgybXJtXRleHRJbnRlcnBvbGF0ZTUsIMm1ybV0ZXh0SW50ZXJwb2xhdGU2LCDJtcm1dGV4dEludGVycG9sYXRlNywgybXJtXRleHRJbnRlcnBvbGF0ZTgsIMm1ybV0ZXh0SW50ZXJwb2xhdGVWLCDJtcm1dHJ1c3RDb25zdGFudEh0bWwsIMm1ybV0cnVzdENvbnN0YW50UmVzb3VyY2VVcmwsIMm1ybV0d29XYXlCaW5kaW5nU2V0LCDJtcm1dHdvV2F5TGlzdGVuZXIsIMm1ybV0d29XYXlQcm9wZXJ0eSwgybXJtXZhbGlkYXRlQXR0cmlidXRlLCDJtcm1dmlld1F1ZXJ5LCDJtcm1dmlld1F1ZXJ5U2lnbmFsIH0gZnJvbSAnLi9fZGVidWdfbm9kZS1jaHVuay5tanMnO1xuaW1wb3J0IHsgT3V0cHV0RW1pdHRlclJlZiwgY29tcHV0ZWQsIFJlc291cmNlVmFsdWVFcnJvciB9IGZyb20gJy4vX3Jlc291cmNlLWNodW5rLm1qcyc7XG5leHBvcnQgeyBsaW5rZWRTaWduYWwsIHJlc291cmNlLCB1bnRyYWNrZWQsIFJlc291cmNlSW1wbCBhcyDJtVJlc291cmNlSW1wbCwgZW5jYXBzdWxhdGVSZXNvdXJjZUVycm9yIGFzIMm1ZW5jYXBzdWxhdGVSZXNvdXJjZUVycm9yLCBnZXRPdXRwdXREZXN0cm95UmVmIGFzIMm1Z2V0T3V0cHV0RGVzdHJveVJlZiB9IGZyb20gJy4vX3Jlc291cmNlLWNodW5rLm1qcyc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNsZWFyQXBwU2NvcGVkRWFybHlFdmVudENvbnRyYWN0LCBFdmVudENvbnRyYWN0LCBFdmVudENvbnRyYWN0Q29udGFpbmVyLCBFdmVudERpc3BhdGNoZXIsIHJlZ2lzdGVyRGlzcGF0Y2hlciwgRXZlbnRQaGFzZSwgZ2V0QXBwU2NvcGVkUXVldWVkRXZlbnRJbmZvcywgaXNFYXJseUV2ZW50VHlwZSwgaXNDYXB0dXJlRXZlbnRUeXBlIH0gZnJvbSAnLi9wcmltaXRpdmVzLWV2ZW50LWRpc3BhdGNoLm1qcyc7XG5leHBvcnQgeyBzZXRBbHRlcm5hdGVXZWFrUmVmSW1wbCBhcyDJtXNldEFsdGVybmF0ZVdlYWtSZWZJbXBsIH0gZnJvbSAnLi9fd2Vha19yZWYtY2h1bmsubWpzJztcbmV4cG9ydCB7IHNldEN1cnJlbnRJbmplY3RvciBhcyDJtXNldEN1cnJlbnRJbmplY3RvciB9IGZyb20gJy4vX25vdF9mb3VuZC1jaHVuay5tanMnO1xuaW1wb3J0ICdAYW5ndWxhci9jb3JlL3ByaW1pdGl2ZXMvc2lnbmFscyc7XG5pbXBvcnQgJ0Bhbmd1bGFyL2NvcmUvcHJpbWl0aXZlcy9kaSc7XG5pbXBvcnQgJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCAnLi9fYXR0cmlidXRlLWNodW5rLm1qcyc7XG5pbXBvcnQgJy4vX3VudHJhY2tlZC1jaHVuay5tanMnO1xuY29uc3QgUkVRVUlSRURfVU5TRVRfVkFMVUUgPSAvKiBAX19QVVJFX18gKi9TeW1ib2woJ0lucHV0U2lnbmFsTm9kZSNVTlNFVCcpO1xuY29uc3QgSU5QVVRfU0lHTkFMX05PREUgPSAvKiBAX19QVVJFX18gKi8oKCkgPT4ge1xuICByZXR1cm4ge1xuICAgIC4uLlNJR05BTF9OT0RFLFxuICAgIHRyYW5zZm9ybUZuOiB1bmRlZmluZWQsXG4gICAgYXBwbHlWYWx1ZVRvSW5wdXRTaWduYWwobm9kZSwgdmFsdWUpIHtcbiAgICAgIHNpZ25hbFNldEZuKG5vZGUsIHZhbHVlKTtcbiAgICB9XG4gIH07XG59KSgpO1xuY29uc3QgybVJTlBVVF9TSUdOQUxfQlJBTkRfV1JJVEVfVFlQRSA9IC8qIEBfX1BVUkVfXyAqL1N5bWJvbCgpO1xuZnVuY3Rpb24gY3JlYXRlSW5wdXRTaWduYWwoaW5pdGlhbFZhbHVlLCBvcHRpb25zKSB7XG4gIGNvbnN0IG5vZGUgPSBPYmplY3QuY3JlYXRlKElOUFVUX1NJR05BTF9OT0RFKTtcbiAgbm9kZS52YWx1ZSA9IGluaXRpYWxWYWx1ZTtcbiAgbm9kZS50cmFuc2Zvcm1GbiA9IG9wdGlvbnM/LnRyYW5zZm9ybTtcbiAgZnVuY3Rpb24gaW5wdXRWYWx1ZUZuKCkge1xuICAgIHByb2R1Y2VyQWNjZXNzZWQobm9kZSk7XG4gICAgaWYgKG5vZGUudmFsdWUgPT09IFJFUVVJUkVEX1VOU0VUX1ZBTFVFKSB7XG4gICAgICBsZXQgbWVzc2FnZSA9IG51bGw7XG4gICAgICBpZiAobmdEZXZNb2RlKSB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSBvcHRpb25zPy5kZWJ1Z05hbWUgPz8gb3B0aW9ucz8uYWxpYXM7XG4gICAgICAgIG1lc3NhZ2UgPSBgSW5wdXQke25hbWUgPyBgIFwiJHtuYW1lfVwiYCA6ICcnfSBpcyByZXF1aXJlZCBidXQgbm8gdmFsdWUgaXMgYXZhaWxhYmxlIHlldC5gO1xuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFcnJvcigtOTUwLCBtZXNzYWdlKTtcbiAgICB9XG4gICAgcmV0dXJuIG5vZGUudmFsdWU7XG4gIH1cbiAgaW5wdXRWYWx1ZUZuW1NJR05BTF0gPSBub2RlO1xuICBpZiAobmdEZXZNb2RlKSB7XG4gICAgaW5wdXRWYWx1ZUZuLnRvU3RyaW5nID0gKCkgPT4gYFtJbnB1dCBTaWduYWw6ICR7aW5wdXRWYWx1ZUZuKCl9XWA7XG4gICAgbm9kZS5kZWJ1Z05hbWUgPSBvcHRpb25zPy5kZWJ1Z05hbWU7XG4gIH1cbiAgcmV0dXJuIGlucHV0VmFsdWVGbjtcbn1cbnZhciBGYWN0b3J5VGFyZ2V0ID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChGYWN0b3J5VGFyZ2V0KSB7XG4gIEZhY3RvcnlUYXJnZXRbRmFjdG9yeVRhcmdldFtcIkRpcmVjdGl2ZVwiXSA9IDBdID0gXCJEaXJlY3RpdmVcIjtcbiAgRmFjdG9yeVRhcmdldFtGYWN0b3J5VGFyZ2V0W1wiQ29tcG9uZW50XCJdID0gMV0gPSBcIkNvbXBvbmVudFwiO1xuICBGYWN0b3J5VGFyZ2V0W0ZhY3RvcnlUYXJnZXRbXCJJbmplY3RhYmxlXCJdID0gMl0gPSBcIkluamVjdGFibGVcIjtcbiAgRmFjdG9yeVRhcmdldFtGYWN0b3J5VGFyZ2V0W1wiUGlwZVwiXSA9IDNdID0gXCJQaXBlXCI7XG4gIEZhY3RvcnlUYXJnZXRbRmFjdG9yeVRhcmdldFtcIk5nTW9kdWxlXCJdID0gNF0gPSBcIk5nTW9kdWxlXCI7XG4gIHJldHVybiBGYWN0b3J5VGFyZ2V0O1xufShGYWN0b3J5VGFyZ2V0IHx8IHt9KTtcbnZhciBSM1RlbXBsYXRlRGVwZW5kZW5jeUtpbmQgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKFIzVGVtcGxhdGVEZXBlbmRlbmN5S2luZCkge1xuICBSM1RlbXBsYXRlRGVwZW5kZW5jeUtpbmRbUjNUZW1wbGF0ZURlcGVuZGVuY3lLaW5kW1wiRGlyZWN0aXZlXCJdID0gMF0gPSBcIkRpcmVjdGl2ZVwiO1xuICBSM1RlbXBsYXRlRGVwZW5kZW5jeUtpbmRbUjNUZW1wbGF0ZURlcGVuZGVuY3lLaW5kW1wiUGlwZVwiXSA9IDFdID0gXCJQaXBlXCI7XG4gIFIzVGVtcGxhdGVEZXBlbmRlbmN5S2luZFtSM1RlbXBsYXRlRGVwZW5kZW5jeUtpbmRbXCJOZ01vZHVsZVwiXSA9IDJdID0gXCJOZ01vZHVsZVwiO1xuICByZXR1cm4gUjNUZW1wbGF0ZURlcGVuZGVuY3lLaW5kO1xufShSM1RlbXBsYXRlRGVwZW5kZW5jeUtpbmQgfHwge30pO1xudmFyIFZpZXdFbmNhcHN1bGF0aW9uID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChWaWV3RW5jYXBzdWxhdGlvbikge1xuICBWaWV3RW5jYXBzdWxhdGlvbltWaWV3RW5jYXBzdWxhdGlvbltcIkVtdWxhdGVkXCJdID0gMF0gPSBcIkVtdWxhdGVkXCI7XG4gIFZpZXdFbmNhcHN1bGF0aW9uW1ZpZXdFbmNhcHN1bGF0aW9uW1wiTm9uZVwiXSA9IDJdID0gXCJOb25lXCI7XG4gIFZpZXdFbmNhcHN1bGF0aW9uW1ZpZXdFbmNhcHN1bGF0aW9uW1wiU2hhZG93RG9tXCJdID0gM10gPSBcIlNoYWRvd0RvbVwiO1xuICBWaWV3RW5jYXBzdWxhdGlvbltWaWV3RW5jYXBzdWxhdGlvbltcIkV4cGVyaW1lbnRhbElzb2xhdGVkU2hhZG93RG9tXCJdID0gNF0gPSBcIkV4cGVyaW1lbnRhbElzb2xhdGVkU2hhZG93RG9tXCI7XG4gIHJldHVybiBWaWV3RW5jYXBzdWxhdGlvbjtcbn0oVmlld0VuY2Fwc3VsYXRpb24gfHwge30pO1xudmFyIEZyYW1ld29yayA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoRnJhbWV3b3JrKSB7XG4gIEZyYW1ld29ya1tcIkFuZ3VsYXJcIl0gPSBcImFuZ3VsYXJcIjtcbiAgRnJhbWV3b3JrW1wiQUNYXCJdID0gXCJhY3hcIjtcbiAgRnJhbWV3b3JrW1wiV2l6XCJdID0gXCJ3aXpcIjtcbiAgcmV0dXJuIEZyYW1ld29yaztcbn0oRnJhbWV3b3JrIHx8IHt9KTtcbmNsYXNzIEhvc3RBdHRyaWJ1dGVUb2tlbiB7XG4gIGF0dHJpYnV0ZU5hbWU7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZU5hbWUpIHtcbiAgICB0aGlzLmF0dHJpYnV0ZU5hbWUgPSBhdHRyaWJ1dGVOYW1lO1xuICB9XG4gIF9fTkdfRUxFTUVOVF9JRF9fID0gKCkgPT4gX19pbmplY3RBdHRyaWJ1dGUodGhpcy5hdHRyaWJ1dGVOYW1lKTtcbiAgdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIGBIb3N0QXR0cmlidXRlVG9rZW4gJHt0aGlzLmF0dHJpYnV0ZU5hbWV9YDtcbiAgfVxufVxuY29uc3QgSE9TVF9UQUdfTkFNRSA9IC8qIEBfX1BVUkVfXyAqLygoKSA9PiB7XG4gIGNvbnN0IEhPU1RfVEFHX05BTUVfVE9LRU4gPSBuZXcgSW5qZWN0aW9uVG9rZW4odHlwZW9mIG5nRGV2TW9kZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbmdEZXZNb2RlID8gJ0hPU1RfVEFHX05BTUUnIDogJycpO1xuICBIT1NUX1RBR19OQU1FX1RPS0VOLl9fTkdfRUxFTUVOVF9JRF9fID0gZmxhZ3MgPT4ge1xuICAgIGNvbnN0IHROb2RlID0gZ2V0Q3VycmVudFROb2RlKCk7XG4gICAgaWYgKHROb2RlID09PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgUnVudGltZUVycm9yKC0yMDQsIG5nRGV2TW9kZSAmJiAnSE9TVF9UQUdfTkFNRSBjYW4gb25seSBiZSBpbmplY3RlZCBpbiBkaXJlY3RpdmVzIGFuZCBjb21wb25lbnRzICcgKyAnZHVyaW5nIGNvbnN0cnVjdGlvbiB0aW1lIChpbiBhIGNsYXNzIGNvbnN0cnVjdG9yIG9yIGFzIGEgY2xhc3MgZmllbGQgaW5pdGlhbGl6ZXIpJyk7XG4gICAgfVxuICAgIGlmICh0Tm9kZS50eXBlICYgMikge1xuICAgICAgcmV0dXJuIHROb2RlLnZhbHVlO1xuICAgIH1cbiAgICBpZiAoZmxhZ3MgJiA4KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgdGhyb3cgbmV3IFJ1bnRpbWVFcnJvcigtMjA0LCBuZ0Rldk1vZGUgJiYgYEhPU1RfVEFHX05BTUUgd2FzIHVzZWQgb24gJHtnZXREZXZNb2RlTm9kZU5hbWUodE5vZGUpfSB3aGljaCBkb2Vzbid0IGhhdmUgYW4gdW5kZXJseWluZyBlbGVtZW50IGluIHRoZSBET00uIGAgKyBgVGhpcyBpcyBpbnZhbGlkLCBhbmQgc28gdGhlIGRlcGVuZGVuY3kgc2hvdWxkIGJlIG1hcmtlZCBhcyBvcHRpb25hbC5gKTtcbiAgfTtcbiAgcmV0dXJuIEhPU1RfVEFHX05BTUVfVE9LRU47XG59KSgpO1xuZnVuY3Rpb24gZ2V0RGV2TW9kZU5vZGVOYW1lKHROb2RlKSB7XG4gIGlmICh0Tm9kZS50eXBlICYgOCkge1xuICAgIHJldHVybiAnYW4gPG5nLWNvbnRhaW5lcj4nO1xuICB9IGVsc2UgaWYgKHROb2RlLnR5cGUgJiA0KSB7XG4gICAgcmV0dXJuICdhbiA8bmctdGVtcGxhdGU+JztcbiAgfSBlbHNlIGlmICh0Tm9kZS50eXBlICYgMTI4KSB7XG4gICAgcmV0dXJuICdhbiBAbGV0IGRlY2xhcmF0aW9uJztcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gJ2Egbm9kZSc7XG4gIH1cbn1cbmZ1bmN0aW9uIG91dHB1dChvcHRzKSB7XG4gIG5nRGV2TW9kZSAmJiBhc3NlcnRJbkluamVjdGlvbkNvbnRleHQob3V0cHV0KTtcbiAgcmV0dXJuIG5ldyBPdXRwdXRFbWl0dGVyUmVmKCk7XG59XG5mdW5jdGlvbiBpbnB1dEZ1bmN0aW9uKGluaXRpYWxWYWx1ZSwgb3B0cykge1xuICBuZ0Rldk1vZGUgJiYgYXNzZXJ0SW5JbmplY3Rpb25Db250ZXh0KGlucHV0KTtcbiAgcmV0dXJuIGNyZWF0ZUlucHV0U2lnbmFsKGluaXRpYWxWYWx1ZSwgb3B0cyk7XG59XG5mdW5jdGlvbiBpbnB1dFJlcXVpcmVkRnVuY3Rpb24ob3B0cykge1xuICBuZ0Rldk1vZGUgJiYgYXNzZXJ0SW5JbmplY3Rpb25Db250ZXh0KGlucHV0KTtcbiAgcmV0dXJuIGNyZWF0ZUlucHV0U2lnbmFsKFJFUVVJUkVEX1VOU0VUX1ZBTFVFLCBvcHRzKTtcbn1cbmNvbnN0IGlucHV0ID0gLyojX19QVVJFX18qLygoKSA9PiB7XG4gIGlucHV0RnVuY3Rpb24ucmVxdWlyZWQgPSBpbnB1dFJlcXVpcmVkRnVuY3Rpb247XG4gIHJldHVybiBpbnB1dEZ1bmN0aW9uO1xufSkoKTtcbmZ1bmN0aW9uIHZpZXdDaGlsZEZuKGxvY2F0b3IsIG9wdHMpIHtcbiAgbmdEZXZNb2RlICYmIGFzc2VydEluSW5qZWN0aW9uQ29udGV4dCh2aWV3Q2hpbGQpO1xuICByZXR1cm4gY3JlYXRlU2luZ2xlUmVzdWx0T3B0aW9uYWxRdWVyeVNpZ25hbEZuKG9wdHMpO1xufVxuZnVuY3Rpb24gdmlld0NoaWxkUmVxdWlyZWRGbihsb2NhdG9yLCBvcHRzKSB7XG4gIG5nRGV2TW9kZSAmJiBhc3NlcnRJbkluamVjdGlvbkNvbnRleHQodmlld0NoaWxkKTtcbiAgcmV0dXJuIGNyZWF0ZVNpbmdsZVJlc3VsdFJlcXVpcmVkUXVlcnlTaWduYWxGbihvcHRzKTtcbn1cbmNvbnN0IHZpZXdDaGlsZCA9IC8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICB2aWV3Q2hpbGRGbi5yZXF1aXJlZCA9IHZpZXdDaGlsZFJlcXVpcmVkRm47XG4gIHJldHVybiB2aWV3Q2hpbGRGbjtcbn0pKCk7XG5mdW5jdGlvbiB2aWV3Q2hpbGRyZW4obG9jYXRvciwgb3B0cykge1xuICBuZ0Rldk1vZGUgJiYgYXNzZXJ0SW5JbmplY3Rpb25Db250ZXh0KHZpZXdDaGlsZHJlbik7XG4gIHJldHVybiBjcmVhdGVNdWx0aVJlc3VsdFF1ZXJ5U2lnbmFsRm4ob3B0cyk7XG59XG5mdW5jdGlvbiBjb250ZW50Q2hpbGRGbihsb2NhdG9yLCBvcHRzKSB7XG4gIG5nRGV2TW9kZSAmJiBhc3NlcnRJbkluamVjdGlvbkNvbnRleHQoY29udGVudENoaWxkKTtcbiAgcmV0dXJuIGNyZWF0ZVNpbmdsZVJlc3VsdE9wdGlvbmFsUXVlcnlTaWduYWxGbihvcHRzKTtcbn1cbmZ1bmN0aW9uIGNvbnRlbnRDaGlsZFJlcXVpcmVkRm4obG9jYXRvciwgb3B0cykge1xuICBuZ0Rldk1vZGUgJiYgYXNzZXJ0SW5JbmplY3Rpb25Db250ZXh0KGNvbnRlbnRDaGlsZHJlbik7XG4gIHJldHVybiBjcmVhdGVTaW5nbGVSZXN1bHRSZXF1aXJlZFF1ZXJ5U2lnbmFsRm4ob3B0cyk7XG59XG5jb25zdCBjb250ZW50Q2hpbGQgPSAvKiNfX1BVUkVfXyovKCgpID0+IHtcbiAgY29udGVudENoaWxkRm4ucmVxdWlyZWQgPSBjb250ZW50Q2hpbGRSZXF1aXJlZEZuO1xuICByZXR1cm4gY29udGVudENoaWxkRm47XG59KSgpO1xuZnVuY3Rpb24gY29udGVudENoaWxkcmVuKGxvY2F0b3IsIG9wdHMpIHtcbiAgcmV0dXJuIGNyZWF0ZU11bHRpUmVzdWx0UXVlcnlTaWduYWxGbihvcHRzKTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZU1vZGVsU2lnbmFsKGluaXRpYWxWYWx1ZSwgb3B0cykge1xuICBjb25zdCBub2RlID0gT2JqZWN0LmNyZWF0ZShJTlBVVF9TSUdOQUxfTk9ERSk7XG4gIGNvbnN0IGVtaXR0ZXJSZWYgPSBuZXcgT3V0cHV0RW1pdHRlclJlZigpO1xuICBub2RlLnZhbHVlID0gaW5pdGlhbFZhbHVlO1xuICBmdW5jdGlvbiBnZXR0ZXIoKSB7XG4gICAgcHJvZHVjZXJBY2Nlc3NlZChub2RlKTtcbiAgICBhc3NlcnRNb2RlbFNldChub2RlLnZhbHVlKTtcbiAgICByZXR1cm4gbm9kZS52YWx1ZTtcbiAgfVxuICBnZXR0ZXJbU0lHTkFMXSA9IG5vZGU7XG4gIGdldHRlci5hc1JlYWRvbmx5ID0gc2lnbmFsQXNSZWFkb25seUZuLmJpbmQoZ2V0dGVyKTtcbiAgZ2V0dGVyLnNldCA9IG5ld1ZhbHVlID0+IHtcbiAgICBpZiAoIW5vZGUuZXF1YWwobm9kZS52YWx1ZSwgbmV3VmFsdWUpKSB7XG4gICAgICBzaWduYWxTZXRGbihub2RlLCBuZXdWYWx1ZSk7XG4gICAgICBlbWl0dGVyUmVmLmVtaXQobmV3VmFsdWUpO1xuICAgIH1cbiAgfTtcbiAgZ2V0dGVyLnVwZGF0ZSA9IHVwZGF0ZUZuID0+IHtcbiAgICBhc3NlcnRNb2RlbFNldChub2RlLnZhbHVlKTtcbiAgICBnZXR0ZXIuc2V0KHVwZGF0ZUZuKG5vZGUudmFsdWUpKTtcbiAgfTtcbiAgZ2V0dGVyLnN1YnNjcmliZSA9IGVtaXR0ZXJSZWYuc3Vic2NyaWJlLmJpbmQoZW1pdHRlclJlZik7XG4gIGdldHRlci5kZXN0cm95UmVmID0gZW1pdHRlclJlZi5kZXN0cm95UmVmO1xuICBpZiAobmdEZXZNb2RlKSB7XG4gICAgZ2V0dGVyLnRvU3RyaW5nID0gKCkgPT4gYFtNb2RlbCBTaWduYWw6ICR7Z2V0dGVyKCl9XWA7XG4gICAgbm9kZS5kZWJ1Z05hbWUgPSBvcHRzPy5kZWJ1Z05hbWU7XG4gIH1cbiAgcmV0dXJuIGdldHRlcjtcbn1cbmZ1bmN0aW9uIGFzc2VydE1vZGVsU2V0KHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PT0gUkVRVUlSRURfVU5TRVRfVkFMVUUpIHtcbiAgICB0aHJvdyBuZXcgUnVudGltZUVycm9yKDk1MiwgbmdEZXZNb2RlICYmICdNb2RlbCBpcyByZXF1aXJlZCBidXQgbm8gdmFsdWUgaXMgYXZhaWxhYmxlIHlldC4nKTtcbiAgfVxufVxuZnVuY3Rpb24gbW9kZWxGdW5jdGlvbihpbml0aWFsVmFsdWUsIG9wdHMpIHtcbiAgbmdEZXZNb2RlICYmIGFzc2VydEluSW5qZWN0aW9uQ29udGV4dChtb2RlbCk7XG4gIHJldHVybiBjcmVhdGVNb2RlbFNpZ25hbChpbml0aWFsVmFsdWUsIG9wdHMpO1xufVxuZnVuY3Rpb24gbW9kZWxSZXF1aXJlZEZ1bmN0aW9uKG9wdHMpIHtcbiAgbmdEZXZNb2RlICYmIGFzc2VydEluSW5qZWN0aW9uQ29udGV4dChtb2RlbCk7XG4gIHJldHVybiBjcmVhdGVNb2RlbFNpZ25hbChSRVFVSVJFRF9VTlNFVF9WQUxVRSwgb3B0cyk7XG59XG5jb25zdCBtb2RlbCA9IC8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICBtb2RlbEZ1bmN0aW9uLnJlcXVpcmVkID0gbW9kZWxSZXF1aXJlZEZ1bmN0aW9uO1xuICByZXR1cm4gbW9kZWxGdW5jdGlvbjtcbn0pKCk7XG5jb25zdCBlbWl0RGlzdGluY3RDaGFuZ2VzT25seURlZmF1bHRWYWx1ZSA9IHRydWU7XG5jbGFzcyBRdWVyeSB7fVxuY29uc3QgQ29udGVudENoaWxkcmVuID0gLyojX19QVVJFX18qL21ha2VQcm9wRGVjb3JhdG9yKCdDb250ZW50Q2hpbGRyZW4nLCAoc2VsZWN0b3IsIG9wdHMgPSB7fSkgPT4gKHtcbiAgc2VsZWN0b3IsXG4gIGZpcnN0OiBmYWxzZSxcbiAgaXNWaWV3UXVlcnk6IGZhbHNlLFxuICBkZXNjZW5kYW50czogZmFsc2UsXG4gIGVtaXREaXN0aW5jdENoYW5nZXNPbmx5OiBlbWl0RGlzdGluY3RDaGFuZ2VzT25seURlZmF1bHRWYWx1ZSxcbiAgLi4ub3B0c1xufSksIFF1ZXJ5KTtcbmNvbnN0IENvbnRlbnRDaGlsZCA9IC8qI19fUFVSRV9fKi9tYWtlUHJvcERlY29yYXRvcignQ29udGVudENoaWxkJywgKHNlbGVjdG9yLCBvcHRzID0ge30pID0+ICh7XG4gIHNlbGVjdG9yLFxuICBmaXJzdDogdHJ1ZSxcbiAgaXNWaWV3UXVlcnk6IGZhbHNlLFxuICBkZXNjZW5kYW50czogdHJ1ZSxcbiAgLi4ub3B0c1xufSksIFF1ZXJ5KTtcbmNvbnN0IFZpZXdDaGlsZHJlbiA9IC8qI19fUFVSRV9fKi9tYWtlUHJvcERlY29yYXRvcignVmlld0NoaWxkcmVuJywgKHNlbGVjdG9yLCBvcHRzID0ge30pID0+ICh7XG4gIHNlbGVjdG9yLFxuICBmaXJzdDogZmFsc2UsXG4gIGlzVmlld1F1ZXJ5OiB0cnVlLFxuICBkZXNjZW5kYW50czogdHJ1ZSxcbiAgZW1pdERpc3RpbmN0Q2hhbmdlc09ubHk6IGVtaXREaXN0aW5jdENoYW5nZXNPbmx5RGVmYXVsdFZhbHVlLFxuICAuLi5vcHRzXG59KSwgUXVlcnkpO1xuY29uc3QgVmlld0NoaWxkID0gLyojX19QVVJFX18qL21ha2VQcm9wRGVjb3JhdG9yKCdWaWV3Q2hpbGQnLCAoc2VsZWN0b3IsIG9wdHMpID0+ICh7XG4gIHNlbGVjdG9yLFxuICBmaXJzdDogdHJ1ZSxcbiAgaXNWaWV3UXVlcnk6IHRydWUsXG4gIGRlc2NlbmRhbnRzOiB0cnVlLFxuICAuLi5vcHRzXG59KSwgUXVlcnkpO1xuZnVuY3Rpb24gY29tcGlsZU5nTW9kdWxlRmFjdG9yeShpbmplY3Rvciwgb3B0aW9ucywgbW9kdWxlVHlwZSkge1xuICBuZ0Rldk1vZGUgJiYgYXNzZXJ0TmdNb2R1bGVUeXBlKG1vZHVsZVR5cGUpO1xuICBjb25zdCBtb2R1bGVGYWN0b3J5ID0gbmV3IE5nTW9kdWxlRmFjdG9yeShtb2R1bGVUeXBlKTtcbiAgaWYgKHR5cGVvZiBuZ0ppdE1vZGUgIT09ICd1bmRlZmluZWQnICYmICFuZ0ppdE1vZGUpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1vZHVsZUZhY3RvcnkpO1xuICB9XG4gIGNvbnN0IGNvbXBpbGVyT3B0aW9ucyA9IGluamVjdG9yLmdldChDT01QSUxFUl9PUFRJT05TLCBbXSkuY29uY2F0KG9wdGlvbnMpO1xuICBzZXRKaXRPcHRpb25zKHtcbiAgICBkZWZhdWx0RW5jYXBzdWxhdGlvbjogX2xhc3REZWZpbmVkKGNvbXBpbGVyT3B0aW9ucy5tYXAob3B0cyA9PiBvcHRzLmRlZmF1bHRFbmNhcHN1bGF0aW9uKSksXG4gICAgcHJlc2VydmVXaGl0ZXNwYWNlczogX2xhc3REZWZpbmVkKGNvbXBpbGVyT3B0aW9ucy5tYXAob3B0cyA9PiBvcHRzLnByZXNlcnZlV2hpdGVzcGFjZXMpKVxuICB9KTtcbiAgaWYgKGlzQ29tcG9uZW50UmVzb3VyY2VSZXNvbHV0aW9uUXVldWVFbXB0eSgpKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShtb2R1bGVGYWN0b3J5KTtcbiAgfVxuICBjb25zdCBjb21waWxlclByb3ZpZGVycyA9IGNvbXBpbGVyT3B0aW9ucy5mbGF0TWFwKG9wdGlvbiA9PiBvcHRpb24ucHJvdmlkZXJzID8/IFtdKTtcbiAgaWYgKGNvbXBpbGVyUHJvdmlkZXJzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobW9kdWxlRmFjdG9yeSk7XG4gIH1cbiAgY29uc3QgY29tcGlsZXIgPSBnZXRDb21waWxlckZhY2FkZSh7XG4gICAgdXNhZ2U6IDAsXG4gICAga2luZDogJ05nTW9kdWxlJyxcbiAgICB0eXBlOiBtb2R1bGVUeXBlXG4gIH0pO1xuICBjb25zdCBjb21waWxlckluamVjdG9yID0gSW5qZWN0b3IuY3JlYXRlKHtcbiAgICBwcm92aWRlcnM6IGNvbXBpbGVyUHJvdmlkZXJzXG4gIH0pO1xuICBjb25zdCByZXNvdXJjZUxvYWRlciA9IGNvbXBpbGVySW5qZWN0b3IuZ2V0KGNvbXBpbGVyLlJlc291cmNlTG9hZGVyKTtcbiAgcmV0dXJuIHJlc29sdmVDb21wb25lbnRSZXNvdXJjZXModXJsID0+IFByb21pc2UucmVzb2x2ZShyZXNvdXJjZUxvYWRlci5nZXQodXJsKSkpLnRoZW4oKCkgPT4gbW9kdWxlRmFjdG9yeSk7XG59XG5mdW5jdGlvbiBfbGFzdERlZmluZWQoYXJncykge1xuICBmb3IgKGxldCBpID0gYXJncy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGlmIChhcmdzW2ldICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBhcmdzW2ldO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxubGV0IE5nWm9uZUNoYW5nZURldGVjdGlvblNjaGVkdWxlciA9IC8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICBjbGFzcyBOZ1pvbmVDaGFuZ2VEZXRlY3Rpb25TY2hlZHVsZXIge1xuICAgIHpvbmUgPSBpbmplY3QoTmdab25lKTtcbiAgICBjaGFuZ2VEZXRlY3Rpb25TY2hlZHVsZXIgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0aW9uU2NoZWR1bGVyKTtcbiAgICBhcHBsaWNhdGlvblJlZiA9IGluamVjdChBcHBsaWNhdGlvblJlZik7XG4gICAgYXBwbGljYXRpb25FcnJvckhhbmRsZXIgPSBpbmplY3QoSU5URVJOQUxfQVBQTElDQVRJT05fRVJST1JfSEFORExFUik7XG4gICAgX29uTWljcm90YXNrRW1wdHlTdWJzY3JpcHRpb247XG4gICAgaW5pdGlhbGl6ZSgpIHtcbiAgICAgIGlmICh0aGlzLl9vbk1pY3JvdGFza0VtcHR5U3Vic2NyaXB0aW9uKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuX29uTWljcm90YXNrRW1wdHlTdWJzY3JpcHRpb24gPSB0aGlzLnpvbmUub25NaWNyb3Rhc2tFbXB0eS5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuY2hhbmdlRGV0ZWN0aW9uU2NoZWR1bGVyLnJ1bm5pbmdUaWNrKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuem9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgdGhpcy5hcHBsaWNhdGlvblJlZi5kaXJ0eUZsYWdzIHw9IDE7XG4gICAgICAgICAgICAgIHRoaXMuYXBwbGljYXRpb25SZWYuX3RpY2soKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgdGhpcy5hcHBsaWNhdGlvbkVycm9ySGFuZGxlcihlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgdGhpcy5fb25NaWNyb3Rhc2tFbXB0eVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgc3RhdGljIMm1ZmFjID0gZnVuY3Rpb24gTmdab25lQ2hhbmdlRGV0ZWN0aW9uU2NoZWR1bGVyX0ZhY3RvcnkoX19uZ0ZhY3RvcnlUeXBlX18pIHtcbiAgICAgIHJldHVybiBuZXcgKF9fbmdGYWN0b3J5VHlwZV9fIHx8IE5nWm9uZUNoYW5nZURldGVjdGlvblNjaGVkdWxlcikoKTtcbiAgICB9O1xuICAgIHN0YXRpYyDJtXByb3YgPSAvKkBfX1BVUkVfXyovX19kZWZpbmVJbmplY3RhYmxlKHtcbiAgICAgIHRva2VuOiBOZ1pvbmVDaGFuZ2VEZXRlY3Rpb25TY2hlZHVsZXIsXG4gICAgICBmYWN0b3J5OiBOZ1pvbmVDaGFuZ2VEZXRlY3Rpb25TY2hlZHVsZXIuybVmYWMsXG4gICAgICBwcm92aWRlZEluOiAncm9vdCdcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gTmdab25lQ2hhbmdlRGV0ZWN0aW9uU2NoZWR1bGVyO1xufSkoKTtcbi8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICAodHlwZW9mIG5nRGV2TW9kZSA9PT0gXCJ1bmRlZmluZWRcIiB8fCBuZ0Rldk1vZGUpICYmIHNldENsYXNzTWV0YWRhdGEoTmdab25lQ2hhbmdlRGV0ZWN0aW9uU2NoZWR1bGVyLCBbe1xuICAgIHR5cGU6IEluamVjdGFibGUsXG4gICAgYXJnczogW3tcbiAgICAgIHByb3ZpZGVkSW46ICdyb290J1xuICAgIH1dXG4gIH1dLCBudWxsLCBudWxsKTtcbn0pKCk7XG5jb25zdCBQUk9WSURFRF9OR19aT05FID0gLyojX19QVVJFX18qL25ldyBJbmplY3Rpb25Ub2tlbih0eXBlb2YgbmdEZXZNb2RlID09PSAndW5kZWZpbmVkJyB8fCBuZ0Rldk1vZGUgPyAncHJvdmlkZVpvbmVDaGFuZ2VEZXRlY3Rpb24gdG9rZW4nIDogJycsIHtcbiAgZmFjdG9yeTogKCkgPT4gZmFsc2Vcbn0pO1xuZnVuY3Rpb24gaW50ZXJuYWxQcm92aWRlWm9uZUNoYW5nZURldGVjdGlvbih7XG4gIG5nWm9uZUZhY3RvcnksXG4gIHNjaGVkdWxlSW5Sb290Wm9uZVxufSkge1xuICBuZ1pvbmVGYWN0b3J5ID8/PSAoKSA9PiBuZXcgTmdab25lKHtcbiAgICAuLi5nZXROZ1pvbmVPcHRpb25zKCksXG4gICAgc2NoZWR1bGVJblJvb3Rab25lXG4gIH0pO1xuICByZXR1cm4gW3tcbiAgICBwcm92aWRlOiBaT05FTEVTU19FTkFCTEVELFxuICAgIHVzZVZhbHVlOiBmYWxzZVxuICB9LCB7XG4gICAgcHJvdmlkZTogTmdab25lLFxuICAgIHVzZUZhY3Rvcnk6IG5nWm9uZUZhY3RvcnlcbiAgfSwge1xuICAgIHByb3ZpZGU6IEVOVklST05NRU5UX0lOSVRJQUxJWkVSLFxuICAgIG11bHRpOiB0cnVlLFxuICAgIHVzZUZhY3Rvcnk6ICgpID0+IHtcbiAgICAgIGNvbnN0IG5nWm9uZUNoYW5nZURldGVjdGlvblNjaGVkdWxlciA9IGluamVjdChOZ1pvbmVDaGFuZ2VEZXRlY3Rpb25TY2hlZHVsZXIsIHtcbiAgICAgICAgb3B0aW9uYWw6IHRydWVcbiAgICAgIH0pO1xuICAgICAgaWYgKCh0eXBlb2YgbmdEZXZNb2RlID09PSAndW5kZWZpbmVkJyB8fCBuZ0Rldk1vZGUpICYmIG5nWm9uZUNoYW5nZURldGVjdGlvblNjaGVkdWxlciA9PT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgUnVudGltZUVycm9yKDQwMiwgYEEgcmVxdWlyZWQgSW5qZWN0YWJsZSB3YXMgbm90IGZvdW5kIGluIHRoZSBkZXBlbmRlbmN5IGluamVjdGlvbiB0cmVlLiBgICsgJ0lmIHlvdSBhcmUgYm9vdHN0cmFwcGluZyBhbiBOZ01vZHVsZSwgbWFrZSBzdXJlIHRoYXQgdGhlIGBCcm93c2VyTW9kdWxlYCBpcyBpbXBvcnRlZC4nKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAoKSA9PiBuZ1pvbmVDaGFuZ2VEZXRlY3Rpb25TY2hlZHVsZXIuaW5pdGlhbGl6ZSgpO1xuICAgIH1cbiAgfSwge1xuICAgIHByb3ZpZGU6IEVOVklST05NRU5UX0lOSVRJQUxJWkVSLFxuICAgIG11bHRpOiB0cnVlLFxuICAgIHVzZUZhY3Rvcnk6ICgpID0+IHtcbiAgICAgIGNvbnN0IHNlcnZpY2UgPSBpbmplY3QoWm9uZVN0YWJsZVBlbmRpbmdUYXNrKTtcbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIHNlcnZpY2UuaW5pdGlhbGl6ZSgpO1xuICAgICAgfTtcbiAgICB9XG4gIH0sIHtcbiAgICBwcm92aWRlOiBTQ0hFRFVMRV9JTl9ST09UX1pPTkUsXG4gICAgdXNlVmFsdWU6IHNjaGVkdWxlSW5Sb290Wm9uZSA/PyBTQ0hFRFVMRV9JTl9ST09UX1pPTkVfREVGQVVMVFxuICB9XTtcbn1cbmZ1bmN0aW9uIHByb3ZpZGVab25lQ2hhbmdlRGV0ZWN0aW9uKG9wdGlvbnMpIHtcbiAgY29uc3Qgc2NoZWR1bGVJblJvb3Rab25lID0gb3B0aW9ucz8uc2NoZWR1bGVJblJvb3Rab25lO1xuICBjb25zdCB6b25lUHJvdmlkZXJzID0gaW50ZXJuYWxQcm92aWRlWm9uZUNoYW5nZURldGVjdGlvbih7XG4gICAgbmdab25lRmFjdG9yeTogKCkgPT4ge1xuICAgICAgY29uc3Qgbmdab25lT3B0aW9ucyA9IGdldE5nWm9uZU9wdGlvbnMob3B0aW9ucyk7XG4gICAgICBuZ1pvbmVPcHRpb25zLnNjaGVkdWxlSW5Sb290Wm9uZSA9IHNjaGVkdWxlSW5Sb290Wm9uZTtcbiAgICAgIGlmIChuZ1pvbmVPcHRpb25zLnNob3VsZENvYWxlc2NlRXZlbnRDaGFuZ2VEZXRlY3Rpb24pIHtcbiAgICAgICAgcGVyZm9ybWFuY2VNYXJrRmVhdHVyZSgnTmdab25lX0NvYWxlc2NlRXZlbnQnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXcgTmdab25lKG5nWm9uZU9wdGlvbnMpO1xuICAgIH0sXG4gICAgc2NoZWR1bGVJblJvb3Rab25lXG4gIH0pO1xuICByZXR1cm4gbWFrZUVudmlyb25tZW50UHJvdmlkZXJzKFt7XG4gICAgcHJvdmlkZTogUFJPVklERURfTkdfWk9ORSxcbiAgICB1c2VWYWx1ZTogdHJ1ZVxuICB9LCB6b25lUHJvdmlkZXJzXSk7XG59XG5mdW5jdGlvbiBnZXROZ1pvbmVPcHRpb25zKG9wdGlvbnMpIHtcbiAgcmV0dXJuIHtcbiAgICBlbmFibGVMb25nU3RhY2tUcmFjZTogdHlwZW9mIG5nRGV2TW9kZSA9PT0gJ3VuZGVmaW5lZCcgPyBmYWxzZSA6ICEhbmdEZXZNb2RlLFxuICAgIHNob3VsZENvYWxlc2NlRXZlbnRDaGFuZ2VEZXRlY3Rpb246IG9wdGlvbnM/LmV2ZW50Q29hbGVzY2luZyA/PyBmYWxzZSxcbiAgICBzaG91bGRDb2FsZXNjZVJ1bkNoYW5nZURldGVjdGlvbjogb3B0aW9ucz8ucnVuQ29hbGVzY2luZyA/PyBmYWxzZVxuICB9O1xufVxubGV0IFpvbmVTdGFibGVQZW5kaW5nVGFzayA9IC8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICBjbGFzcyBab25lU3RhYmxlUGVuZGluZ1Rhc2sge1xuICAgIHN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgICBpbml0aWFsaXplZCA9IGZhbHNlO1xuICAgIHpvbmUgPSBpbmplY3QoTmdab25lKTtcbiAgICBwZW5kaW5nVGFza3MgPSBpbmplY3QoUGVuZGluZ1Rhc2tzSW50ZXJuYWwpO1xuICAgIGluaXRpYWxpemUoKSB7XG4gICAgICBpZiAodGhpcy5pbml0aWFsaXplZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLmluaXRpYWxpemVkID0gdHJ1ZTtcbiAgICAgIGxldCB0YXNrID0gbnVsbDtcbiAgICAgIGlmICghdGhpcy56b25lLmlzU3RhYmxlICYmICF0aGlzLnpvbmUuaGFzUGVuZGluZ01hY3JvdGFza3MgJiYgIXRoaXMuem9uZS5oYXNQZW5kaW5nTWljcm90YXNrcykge1xuICAgICAgICB0YXNrID0gdGhpcy5wZW5kaW5nVGFza3MuYWRkKCk7XG4gICAgICB9XG4gICAgICB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbi5hZGQodGhpcy56b25lLm9uU3RhYmxlLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgTmdab25lLmFzc2VydE5vdEluQW5ndWxhclpvbmUoKTtcbiAgICAgICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGFzayAhPT0gbnVsbCAmJiAhdGhpcy56b25lLmhhc1BlbmRpbmdNYWNyb3Rhc2tzICYmICF0aGlzLnpvbmUuaGFzUGVuZGluZ01pY3JvdGFza3MpIHtcbiAgICAgICAgICAgICAgdGhpcy5wZW5kaW5nVGFza3MucmVtb3ZlKHRhc2spO1xuICAgICAgICAgICAgICB0YXNrID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSkpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbi5hZGQodGhpcy56b25lLm9uVW5zdGFibGUuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgTmdab25lLmFzc2VydEluQW5ndWxhclpvbmUoKTtcbiAgICAgICAgdGFzayA/Pz0gdGhpcy5wZW5kaW5nVGFza3MuYWRkKCk7XG4gICAgICB9KSk7XG4gICAgfVxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgc3RhdGljIMm1ZmFjID0gZnVuY3Rpb24gWm9uZVN0YWJsZVBlbmRpbmdUYXNrX0ZhY3RvcnkoX19uZ0ZhY3RvcnlUeXBlX18pIHtcbiAgICAgIHJldHVybiBuZXcgKF9fbmdGYWN0b3J5VHlwZV9fIHx8IFpvbmVTdGFibGVQZW5kaW5nVGFzaykoKTtcbiAgICB9O1xuICAgIHN0YXRpYyDJtXByb3YgPSAvKkBfX1BVUkVfXyovX19kZWZpbmVJbmplY3RhYmxlKHtcbiAgICAgIHRva2VuOiBab25lU3RhYmxlUGVuZGluZ1Rhc2ssXG4gICAgICBmYWN0b3J5OiBab25lU3RhYmxlUGVuZGluZ1Rhc2suybVmYWMsXG4gICAgICBwcm92aWRlZEluOiAncm9vdCdcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gWm9uZVN0YWJsZVBlbmRpbmdUYXNrO1xufSkoKTtcbi8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICAodHlwZW9mIG5nRGV2TW9kZSA9PT0gXCJ1bmRlZmluZWRcIiB8fCBuZ0Rldk1vZGUpICYmIHNldENsYXNzTWV0YWRhdGEoWm9uZVN0YWJsZVBlbmRpbmdUYXNrLCBbe1xuICAgIHR5cGU6IEluamVjdGFibGUsXG4gICAgYXJnczogW3tcbiAgICAgIHByb3ZpZGVkSW46ICdyb290J1xuICAgIH1dXG4gIH1dLCBudWxsLCBudWxsKTtcbn0pKCk7XG5jb25zdCBTQ0FOX0RFTEFZID0gMjAwO1xuY29uc3QgT1ZFUlNJWkVEX0lNQUdFX1RPTEVSQU5DRSA9IDEyMDA7XG5sZXQgSW1hZ2VQZXJmb3JtYW5jZVdhcm5pbmcgPSAvKiNfX1BVUkVfXyovKCgpID0+IHtcbiAgY2xhc3MgSW1hZ2VQZXJmb3JtYW5jZVdhcm5pbmcge1xuICAgIHdpbmRvdyA9IG51bGw7XG4gICAgb2JzZXJ2ZXIgPSBudWxsO1xuICAgIG9wdGlvbnMgPSBpbmplY3QoSU1BR0VfQ09ORklHKTtcbiAgICBsY3BJbWFnZVVybDtcbiAgICBzdGFydCgpIHtcbiAgICAgIGlmICh0eXBlb2YgbmdTZXJ2ZXJNb2RlICE9PSAndW5kZWZpbmVkJyAmJiBuZ1NlcnZlck1vZGUgfHwgdHlwZW9mIFBlcmZvcm1hbmNlT2JzZXJ2ZXIgPT09ICd1bmRlZmluZWQnIHx8IHRoaXMub3B0aW9ucz8uZGlzYWJsZUltYWdlU2l6ZVdhcm5pbmcgJiYgdGhpcy5vcHRpb25zPy5kaXNhYmxlSW1hZ2VMYXp5TG9hZFdhcm5pbmcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5vYnNlcnZlciA9IHRoaXMuaW5pdFBlcmZvcm1hbmNlT2JzZXJ2ZXIoKTtcbiAgICAgIGNvbnN0IGRvYyA9IGdldERvY3VtZW50KCk7XG4gICAgICBjb25zdCB3aW4gPSBkb2MuZGVmYXVsdFZpZXc7XG4gICAgICBpZiAod2luKSB7XG4gICAgICAgIHRoaXMud2luZG93ID0gd2luO1xuICAgICAgICBjb25zdCB3YWl0VG9TY2FuID0gKCkgPT4ge1xuICAgICAgICAgIHNldFRpbWVvdXQodGhpcy5zY2FuSW1hZ2VzLmJpbmQodGhpcyksIFNDQU5fREVMQVkpO1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBzZXR1cCA9ICgpID0+IHtcbiAgICAgICAgICBpZiAoZG9jLnJlYWR5U3RhdGUgPT09ICdjb21wbGV0ZScpIHtcbiAgICAgICAgICAgIHdhaXRUb1NjYW4oKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy53aW5kb3c/LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCB3YWl0VG9TY2FuLCB7XG4gICAgICAgICAgICAgIG9uY2U6IHRydWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHR5cGVvZiBab25lICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIFpvbmUucm9vdC5ydW4oKCkgPT4gc2V0dXAoKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2V0dXAoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgIHRoaXMub2JzZXJ2ZXI/LmRpc2Nvbm5lY3QoKTtcbiAgICB9XG4gICAgaW5pdFBlcmZvcm1hbmNlT2JzZXJ2ZXIoKSB7XG4gICAgICBpZiAodHlwZW9mIFBlcmZvcm1hbmNlT2JzZXJ2ZXIgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgUGVyZm9ybWFuY2VPYnNlcnZlcihlbnRyeUxpc3QgPT4ge1xuICAgICAgICBjb25zdCBlbnRyaWVzID0gZW50cnlMaXN0LmdldEVudHJpZXMoKTtcbiAgICAgICAgaWYgKGVudHJpZXMubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgICAgIGNvbnN0IGxjcEVsZW1lbnQgPSBlbnRyaWVzW2VudHJpZXMubGVuZ3RoIC0gMV07XG4gICAgICAgIGNvbnN0IGltZ1NyYyA9IGxjcEVsZW1lbnQuZWxlbWVudD8uc3JjID8/ICcnO1xuICAgICAgICBpZiAoaW1nU3JjLnN0YXJ0c1dpdGgoJ2RhdGE6JykgfHwgaW1nU3JjLnN0YXJ0c1dpdGgoJ2Jsb2I6JykpIHJldHVybjtcbiAgICAgICAgdGhpcy5sY3BJbWFnZVVybCA9IGltZ1NyYztcbiAgICAgIH0pO1xuICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZSh7XG4gICAgICAgIHR5cGU6ICdsYXJnZXN0LWNvbnRlbnRmdWwtcGFpbnQnLFxuICAgICAgICBidWZmZXJlZDogdHJ1ZVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gb2JzZXJ2ZXI7XG4gICAgfVxuICAgIHNjYW5JbWFnZXMoKSB7XG4gICAgICBjb25zdCBpbWFnZXMgPSBnZXREb2N1bWVudCgpLnF1ZXJ5U2VsZWN0b3JBbGwoJ2ltZycpO1xuICAgICAgbGV0IGxjcEVsZW1lbnRGb3VuZCxcbiAgICAgICAgbGNwRWxlbWVudExvYWRlZENvcnJlY3RseSA9IGZhbHNlO1xuICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGltYWdlcy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgY29uc3QgaW1hZ2UgPSBpbWFnZXNbaW5kZXhdO1xuICAgICAgICBpZiAoIWltYWdlKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLm9wdGlvbnM/LmRpc2FibGVJbWFnZVNpemVXYXJuaW5nKSB7XG4gICAgICAgICAgaWYgKCFpbWFnZS5nZXRBdHRyaWJ1dGUoJ25nLWltZycpICYmIHRoaXMuaXNPdmVyc2l6ZWQoaW1hZ2UpKSB7XG4gICAgICAgICAgICBsb2dPdmVyc2l6ZWRJbWFnZVdhcm5pbmcoaW1hZ2Uuc3JjKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLm9wdGlvbnM/LmRpc2FibGVJbWFnZUxhenlMb2FkV2FybmluZyAmJiB0aGlzLmxjcEltYWdlVXJsKSB7XG4gICAgICAgICAgaWYgKGltYWdlLnNyYyA9PT0gdGhpcy5sY3BJbWFnZVVybCkge1xuICAgICAgICAgICAgbGNwRWxlbWVudEZvdW5kID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChpbWFnZS5sb2FkaW5nICE9PSAnbGF6eScgfHwgaW1hZ2UuZ2V0QXR0cmlidXRlKCduZy1pbWcnKSkge1xuICAgICAgICAgICAgICBsY3BFbGVtZW50TG9hZGVkQ29ycmVjdGx5ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChsY3BFbGVtZW50Rm91bmQgJiYgIWxjcEVsZW1lbnRMb2FkZWRDb3JyZWN0bHkgJiYgdGhpcy5sY3BJbWFnZVVybCAmJiAhdGhpcy5vcHRpb25zPy5kaXNhYmxlSW1hZ2VMYXp5TG9hZFdhcm5pbmcpIHtcbiAgICAgICAgbG9nTGF6eUxDUFdhcm5pbmcodGhpcy5sY3BJbWFnZVVybCk7XG4gICAgICB9XG4gICAgfVxuICAgIGlzT3ZlcnNpemVkKGltYWdlKSB7XG4gICAgICBpZiAoIXRoaXMud2luZG93KSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG5vbk92ZXJzaXplZEltYWdlRXh0ZW50aW9ucyA9IFsnLnN2ZyddO1xuICAgICAgY29uc3QgaW1hZ2VTb3VyY2UgPSAoaW1hZ2Uuc3JjIHx8ICcnKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgaWYgKG5vbk92ZXJzaXplZEltYWdlRXh0ZW50aW9ucy5zb21lKGV4dGVuc2lvbiA9PiBpbWFnZVNvdXJjZS5lbmRzV2l0aChleHRlbnNpb24pKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBjb25zdCBjb21wdXRlZFN0eWxlID0gdGhpcy53aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShpbWFnZSk7XG4gICAgICBsZXQgcmVuZGVyZWRXaWR0aCA9IHBhcnNlRmxvYXQoY29tcHV0ZWRTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKCd3aWR0aCcpKTtcbiAgICAgIGxldCByZW5kZXJlZEhlaWdodCA9IHBhcnNlRmxvYXQoY29tcHV0ZWRTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKCdoZWlnaHQnKSk7XG4gICAgICBjb25zdCBib3hTaXppbmcgPSBjb21wdXRlZFN0eWxlLmdldFByb3BlcnR5VmFsdWUoJ2JveC1zaXppbmcnKTtcbiAgICAgIGNvbnN0IG9iamVjdEZpdCA9IGNvbXB1dGVkU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgnb2JqZWN0LWZpdCcpO1xuICAgICAgaWYgKG9iamVjdEZpdCA9PT0gYGNvdmVyYCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAoYm94U2l6aW5nID09PSAnYm9yZGVyLWJveCcpIHtcbiAgICAgICAgY29uc3QgcGFkZGluZ1RvcCA9IGNvbXB1dGVkU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgncGFkZGluZy10b3AnKTtcbiAgICAgICAgY29uc3QgcGFkZGluZ1JpZ2h0ID0gY29tcHV0ZWRTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKCdwYWRkaW5nLXJpZ2h0Jyk7XG4gICAgICAgIGNvbnN0IHBhZGRpbmdCb3R0b20gPSBjb21wdXRlZFN0eWxlLmdldFByb3BlcnR5VmFsdWUoJ3BhZGRpbmctYm90dG9tJyk7XG4gICAgICAgIGNvbnN0IHBhZGRpbmdMZWZ0ID0gY29tcHV0ZWRTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKCdwYWRkaW5nLWxlZnQnKTtcbiAgICAgICAgcmVuZGVyZWRXaWR0aCAtPSBwYXJzZUZsb2F0KHBhZGRpbmdSaWdodCkgKyBwYXJzZUZsb2F0KHBhZGRpbmdMZWZ0KTtcbiAgICAgICAgcmVuZGVyZWRIZWlnaHQgLT0gcGFyc2VGbG9hdChwYWRkaW5nVG9wKSArIHBhcnNlRmxvYXQocGFkZGluZ0JvdHRvbSk7XG4gICAgICB9XG4gICAgICBjb25zdCBpbnRyaW5zaWNXaWR0aCA9IGltYWdlLm5hdHVyYWxXaWR0aDtcbiAgICAgIGNvbnN0IGludHJpbnNpY0hlaWdodCA9IGltYWdlLm5hdHVyYWxIZWlnaHQ7XG4gICAgICBjb25zdCByZWNvbW1lbmRlZFdpZHRoID0gdGhpcy53aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyAqIHJlbmRlcmVkV2lkdGg7XG4gICAgICBjb25zdCByZWNvbW1lbmRlZEhlaWdodCA9IHRoaXMud2luZG93LmRldmljZVBpeGVsUmF0aW8gKiByZW5kZXJlZEhlaWdodDtcbiAgICAgIGNvbnN0IG92ZXJzaXplZFdpZHRoID0gaW50cmluc2ljV2lkdGggLSByZWNvbW1lbmRlZFdpZHRoID49IE9WRVJTSVpFRF9JTUFHRV9UT0xFUkFOQ0U7XG4gICAgICBjb25zdCBvdmVyc2l6ZWRIZWlnaHQgPSBpbnRyaW5zaWNIZWlnaHQgLSByZWNvbW1lbmRlZEhlaWdodCA+PSBPVkVSU0laRURfSU1BR0VfVE9MRVJBTkNFO1xuICAgICAgcmV0dXJuIG92ZXJzaXplZFdpZHRoIHx8IG92ZXJzaXplZEhlaWdodDtcbiAgICB9XG4gICAgc3RhdGljIMm1ZmFjID0gZnVuY3Rpb24gSW1hZ2VQZXJmb3JtYW5jZVdhcm5pbmdfRmFjdG9yeShfX25nRmFjdG9yeVR5cGVfXykge1xuICAgICAgcmV0dXJuIG5ldyAoX19uZ0ZhY3RvcnlUeXBlX18gfHwgSW1hZ2VQZXJmb3JtYW5jZVdhcm5pbmcpKCk7XG4gICAgfTtcbiAgICBzdGF0aWMgybVwcm92ID0gLypAX19QVVJFX18qL19fZGVmaW5lSW5qZWN0YWJsZSh7XG4gICAgICB0b2tlbjogSW1hZ2VQZXJmb3JtYW5jZVdhcm5pbmcsXG4gICAgICBmYWN0b3J5OiBJbWFnZVBlcmZvcm1hbmNlV2FybmluZy7JtWZhYyxcbiAgICAgIHByb3ZpZGVkSW46ICdyb290J1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBJbWFnZVBlcmZvcm1hbmNlV2FybmluZztcbn0pKCk7XG4vKiNfX1BVUkVfXyovKCgpID0+IHtcbiAgKHR5cGVvZiBuZ0Rldk1vZGUgPT09IFwidW5kZWZpbmVkXCIgfHwgbmdEZXZNb2RlKSAmJiBzZXRDbGFzc01ldGFkYXRhKEltYWdlUGVyZm9ybWFuY2VXYXJuaW5nLCBbe1xuICAgIHR5cGU6IEluamVjdGFibGUsXG4gICAgYXJnczogW3tcbiAgICAgIHByb3ZpZGVkSW46ICdyb290J1xuICAgIH1dXG4gIH1dLCBudWxsLCBudWxsKTtcbn0pKCk7XG5mdW5jdGlvbiBsb2dMYXp5TENQV2FybmluZyhzcmMpIHtcbiAgY29uc29sZS53YXJuKGZvcm1hdFJ1bnRpbWVFcnJvcigtOTEzLCBgQW4gaW1hZ2Ugd2l0aCBzcmMgJHtzcmN9IGlzIHRoZSBMYXJnZXN0IENvbnRlbnRmdWwgUGFpbnQgKExDUCkgZWxlbWVudCBgICsgYGJ1dCB3YXMgZ2l2ZW4gYSBcImxvYWRpbmdcIiB2YWx1ZSBvZiBcImxhenlcIiwgd2hpY2ggY2FuIG5lZ2F0aXZlbHkgaW1wYWN0IGAgKyBgYXBwbGljYXRpb24gbG9hZGluZyBwZXJmb3JtYW5jZS4gVGhpcyB3YXJuaW5nIGNhbiBiZSBhZGRyZXNzZWQgYnkgYCArIGBjaGFuZ2luZyB0aGUgbG9hZGluZyB2YWx1ZSBvZiB0aGUgTENQIGltYWdlIHRvIFwiZWFnZXJcIiwgb3IgYnkgdXNpbmcgdGhlIGAgKyBgTmdPcHRpbWl6ZWRJbWFnZSBkaXJlY3RpdmUncyBwcmlvcml0aXphdGlvbiB1dGlsaXRpZXMuIEZvciBtb3JlIGAgKyBgaW5mb3JtYXRpb24gYWJvdXQgYWRkcmVzc2luZyBvciBkaXNhYmxpbmcgdGhpcyB3YXJuaW5nLCBzZWUgYCArIGAke0VSUk9SX0RFVEFJTFNfUEFHRV9CQVNFX1VSTH0vTkcwOTEzYCkpO1xufVxuZnVuY3Rpb24gbG9nT3ZlcnNpemVkSW1hZ2VXYXJuaW5nKHNyYykge1xuICBjb25zb2xlLndhcm4oZm9ybWF0UnVudGltZUVycm9yKC05MTMsIGBBbiBpbWFnZSB3aXRoIHNyYyAke3NyY30gaGFzIGludHJpbnNpYyBmaWxlIGRpbWVuc2lvbnMgbXVjaCBsYXJnZXIgdGhhbiBpdHMgYCArIGByZW5kZXJlZCBzaXplLiBUaGlzIGNhbiBuZWdhdGl2ZWx5IGltcGFjdCBhcHBsaWNhdGlvbiBsb2FkaW5nIHBlcmZvcm1hbmNlLiBgICsgYEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGFkZHJlc3Npbmcgb3IgZGlzYWJsaW5nIHRoaXMgd2FybmluZywgc2VlIGAgKyBgJHtFUlJPUl9ERVRBSUxTX1BBR0VfQkFTRV9VUkx9L05HMDkxM2ApKTtcbn1cbmNvbnN0IFBMQVRGT1JNX0RFU1RST1lfTElTVEVORVJTID0gLyojX19QVVJFX18qL25ldyBJbmplY3Rpb25Ub2tlbih0eXBlb2YgbmdEZXZNb2RlICE9PSAndW5kZWZpbmVkJyAmJiBuZ0Rldk1vZGUgPyAnUGxhdGZvcm1EZXN0cm95TGlzdGVuZXJzJyA6ICcnKTtcbmNvbnN0IEVOQUJMRV9ST09UX0NPTVBPTkVOVF9CT09UU1RSQVAgPSAvKiNfX1BVUkVfXyovbmV3IEluamVjdGlvblRva2VuKHR5cGVvZiBuZ0Rldk1vZGUgIT09ICd1bmRlZmluZWQnICYmIG5nRGV2TW9kZSA/ICdFTkFCTEVfUk9PVF9DT01QT05FTlRfQk9PVFNUUkFQJyA6ICcnKTtcbmZ1bmN0aW9uIGlzQXBwbGljYXRpb25Cb290c3RyYXBDb25maWcoY29uZmlnKSB7XG4gIHJldHVybiAhY29uZmlnLm1vZHVsZVJlZjtcbn1cbmZ1bmN0aW9uIGJvb3RzdHJhcChjb25maWcpIHtcbiAgY29uc3QgZW52SW5qZWN0b3IgPSBpc0FwcGxpY2F0aW9uQm9vdHN0cmFwQ29uZmlnKGNvbmZpZykgPyBjb25maWcucjNJbmplY3RvciA6IGNvbmZpZy5tb2R1bGVSZWYuaW5qZWN0b3I7XG4gIGNvbnN0IG5nWm9uZSA9IGVudkluamVjdG9yLmdldChOZ1pvbmUpO1xuICByZXR1cm4gbmdab25lLnJ1bigoKSA9PiB7XG4gICAgaWYgKGlzQXBwbGljYXRpb25Cb290c3RyYXBDb25maWcoY29uZmlnKSkge1xuICAgICAgY29uZmlnLnIzSW5qZWN0b3IucmVzb2x2ZUluamVjdG9ySW5pdGlhbGl6ZXJzKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbmZpZy5tb2R1bGVSZWYucmVzb2x2ZUluamVjdG9ySW5pdGlhbGl6ZXJzKCk7XG4gICAgfVxuICAgIGNvbnN0IGV4Y2VwdGlvbkhhbmRsZXIgPSBlbnZJbmplY3Rvci5nZXQoSU5URVJOQUxfQVBQTElDQVRJT05fRVJST1JfSEFORExFUik7XG4gICAgaWYgKHR5cGVvZiBuZ0Rldk1vZGUgPT09ICd1bmRlZmluZWQnIHx8IG5nRGV2TW9kZSkge1xuICAgICAgaWYgKGVudkluamVjdG9yLmdldChQUk9WSURFRF9aT05FTEVTUykgJiYgZW52SW5qZWN0b3IuZ2V0KFBST1ZJREVEX05HX1pPTkUpKSB7XG4gICAgICAgIGNvbnNvbGUud2Fybihmb3JtYXRSdW50aW1lRXJyb3IoNDA4LCAnQm90aCBwcm92aWRlWm9uZUNoYW5nZURldGVjdGlvbiBhbmQgcHJvdmlkZVpvbmVsZXNzQ2hhbmdlRGV0ZWN0aW9uIGFyZSBwcm92aWRlZC4gJyArICdUaGlzIGlzIGxpa2VseSBhIG1pc3Rha2UuIFVwZGF0ZSB0aGUgYXBwbGljYXRpb24gcHJvdmlkZXJzIHRvIHVzZSBvbmx5IG9uZSBvZiB0aGUgdHdvLicpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgbGV0IG9uRXJyb3JTdWJzY3JpcHRpb247XG4gICAgbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgIG9uRXJyb3JTdWJzY3JpcHRpb24gPSBuZ1pvbmUub25FcnJvci5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiBleGNlcHRpb25IYW5kbGVyXG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBpZiAoaXNBcHBsaWNhdGlvbkJvb3RzdHJhcENvbmZpZyhjb25maWcpKSB7XG4gICAgICBjb25zdCBkZXN0cm95TGlzdGVuZXIgPSAoKSA9PiBlbnZJbmplY3Rvci5kZXN0cm95KCk7XG4gICAgICBjb25zdCBvblBsYXRmb3JtRGVzdHJveUxpc3RlbmVycyA9IGNvbmZpZy5wbGF0Zm9ybUluamVjdG9yLmdldChQTEFURk9STV9ERVNUUk9ZX0xJU1RFTkVSUyk7XG4gICAgICBvblBsYXRmb3JtRGVzdHJveUxpc3RlbmVycy5hZGQoZGVzdHJveUxpc3RlbmVyKTtcbiAgICAgIGVudkluamVjdG9yLm9uRGVzdHJveSgoKSA9PiB7XG4gICAgICAgIG9uRXJyb3JTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgb25QbGF0Zm9ybURlc3Ryb3lMaXN0ZW5lcnMuZGVsZXRlKGRlc3Ryb3lMaXN0ZW5lcik7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZGVzdHJveUxpc3RlbmVyID0gKCkgPT4gY29uZmlnLm1vZHVsZVJlZi5kZXN0cm95KCk7XG4gICAgICBjb25zdCBvblBsYXRmb3JtRGVzdHJveUxpc3RlbmVycyA9IGNvbmZpZy5wbGF0Zm9ybUluamVjdG9yLmdldChQTEFURk9STV9ERVNUUk9ZX0xJU1RFTkVSUyk7XG4gICAgICBvblBsYXRmb3JtRGVzdHJveUxpc3RlbmVycy5hZGQoZGVzdHJveUxpc3RlbmVyKTtcbiAgICAgIGNvbmZpZy5tb2R1bGVSZWYub25EZXN0cm95KCgpID0+IHtcbiAgICAgICAgcmVtb3ZlKGNvbmZpZy5hbGxQbGF0Zm9ybU1vZHVsZXMsIGNvbmZpZy5tb2R1bGVSZWYpO1xuICAgICAgICBvbkVycm9yU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIG9uUGxhdGZvcm1EZXN0cm95TGlzdGVuZXJzLmRlbGV0ZShkZXN0cm95TGlzdGVuZXIpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBfY2FsbEFuZFJlcG9ydFRvRXJyb3JIYW5kbGVyKGV4Y2VwdGlvbkhhbmRsZXIsIG5nWm9uZSwgKCkgPT4ge1xuICAgICAgY29uc3QgcGVuZGluZ1Rhc2tzID0gZW52SW5qZWN0b3IuZ2V0KFBlbmRpbmdUYXNrc0ludGVybmFsKTtcbiAgICAgIGNvbnN0IHRhc2tJZCA9IHBlbmRpbmdUYXNrcy5hZGQoKTtcbiAgICAgIGNvbnN0IGluaXRTdGF0dXMgPSBlbnZJbmplY3Rvci5nZXQoQXBwbGljYXRpb25Jbml0U3RhdHVzKTtcbiAgICAgIGluaXRTdGF0dXMucnVuSW5pdGlhbGl6ZXJzKCk7XG4gICAgICByZXR1cm4gaW5pdFN0YXR1cy5kb25lUHJvbWlzZS50aGVuKCgpID0+IHtcbiAgICAgICAgY29uc3QgbG9jYWxlSWQgPSBlbnZJbmplY3Rvci5nZXQoTE9DQUxFX0lELCBERUZBVUxUX0xPQ0FMRV9JRCk7XG4gICAgICAgIHNldExvY2FsZUlkKGxvY2FsZUlkIHx8IERFRkFVTFRfTE9DQUxFX0lEKTtcbiAgICAgICAgY29uc3QgZW5hYmxlUm9vdENvbXBvbmVudGJvb3RzdHJhcCA9IGVudkluamVjdG9yLmdldChFTkFCTEVfUk9PVF9DT01QT05FTlRfQk9PVFNUUkFQLCB0cnVlKTtcbiAgICAgICAgaWYgKCFlbmFibGVSb290Q29tcG9uZW50Ym9vdHN0cmFwKSB7XG4gICAgICAgICAgaWYgKGlzQXBwbGljYXRpb25Cb290c3RyYXBDb25maWcoY29uZmlnKSkge1xuICAgICAgICAgICAgcmV0dXJuIGVudkluamVjdG9yLmdldChBcHBsaWNhdGlvblJlZik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbmZpZy5hbGxQbGF0Zm9ybU1vZHVsZXMucHVzaChjb25maWcubW9kdWxlUmVmKTtcbiAgICAgICAgICByZXR1cm4gY29uZmlnLm1vZHVsZVJlZjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIG5nRGV2TW9kZSA9PT0gJ3VuZGVmaW5lZCcgfHwgbmdEZXZNb2RlKSB7XG4gICAgICAgICAgY29uc3QgaW1hZ2VQZXJmb3JtYW5jZVNlcnZpY2UgPSBlbnZJbmplY3Rvci5nZXQoSW1hZ2VQZXJmb3JtYW5jZVdhcm5pbmcpO1xuICAgICAgICAgIGltYWdlUGVyZm9ybWFuY2VTZXJ2aWNlLnN0YXJ0KCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzQXBwbGljYXRpb25Cb290c3RyYXBDb25maWcoY29uZmlnKSkge1xuICAgICAgICAgIGNvbnN0IGFwcFJlZiA9IGVudkluamVjdG9yLmdldChBcHBsaWNhdGlvblJlZik7XG4gICAgICAgICAgaWYgKGNvbmZpZy5yb290Q29tcG9uZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGFwcFJlZi5ib290c3RyYXAoY29uZmlnLnJvb3RDb21wb25lbnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gYXBwUmVmO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG1vZHVsZUJvb3RzdHJhcEltcGw/Lihjb25maWcubW9kdWxlUmVmLCBjb25maWcuYWxsUGxhdGZvcm1Nb2R1bGVzKTtcbiAgICAgICAgICByZXR1cm4gY29uZmlnLm1vZHVsZVJlZjtcbiAgICAgICAgfVxuICAgICAgfSkuZmluYWxseSgoKSA9PiB2b2lkIHBlbmRpbmdUYXNrcy5yZW1vdmUodGFza0lkKSk7XG4gICAgfSk7XG4gIH0pO1xufVxubGV0IG1vZHVsZUJvb3RzdHJhcEltcGw7XG5mdW5jdGlvbiBzZXRNb2R1bGVCb290c3RyYXBJbXBsKCkge1xuICBtb2R1bGVCb290c3RyYXBJbXBsID0gX21vZHVsZURvQm9vdHN0cmFwO1xufVxuZnVuY3Rpb24gX21vZHVsZURvQm9vdHN0cmFwKG1vZHVsZVJlZiwgYWxsUGxhdGZvcm1Nb2R1bGVzKSB7XG4gIGNvbnN0IGFwcFJlZiA9IG1vZHVsZVJlZi5pbmplY3Rvci5nZXQoQXBwbGljYXRpb25SZWYpO1xuICBpZiAobW9kdWxlUmVmLl9ib290c3RyYXBDb21wb25lbnRzLmxlbmd0aCA+IDApIHtcbiAgICBtb2R1bGVSZWYuX2Jvb3RzdHJhcENvbXBvbmVudHMuZm9yRWFjaChmID0+IGFwcFJlZi5ib290c3RyYXAoZikpO1xuICB9IGVsc2UgaWYgKG1vZHVsZVJlZi5pbnN0YW5jZS5uZ0RvQm9vdHN0cmFwKSB7XG4gICAgbW9kdWxlUmVmLmluc3RhbmNlLm5nRG9Cb290c3RyYXAoYXBwUmVmKTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgUnVudGltZUVycm9yKC00MDMsIG5nRGV2TW9kZSAmJiBgVGhlIG1vZHVsZSAke3N0cmluZ2lmeShtb2R1bGVSZWYuaW5zdGFuY2UuY29uc3RydWN0b3IpfSB3YXMgYm9vdHN0cmFwcGVkLCBgICsgYGJ1dCBpdCBkb2VzIG5vdCBkZWNsYXJlIFwiQE5nTW9kdWxlLmJvb3RzdHJhcFwiIGNvbXBvbmVudHMgbm9yIGEgXCJuZ0RvQm9vdHN0cmFwXCIgbWV0aG9kLiBgICsgYFBsZWFzZSBkZWZpbmUgb25lIG9mIHRoZXNlLmApO1xuICB9XG4gIGFsbFBsYXRmb3JtTW9kdWxlcy5wdXNoKG1vZHVsZVJlZik7XG59XG5mdW5jdGlvbiBfY2FsbEFuZFJlcG9ydFRvRXJyb3JIYW5kbGVyKGVycm9ySGFuZGxlciwgbmdab25lLCBjYWxsYmFjaykge1xuICB0cnkge1xuICAgIGNvbnN0IHJlc3VsdCA9IGNhbGxiYWNrKCk7XG4gICAgaWYgKGlzUHJvbWlzZShyZXN1bHQpKSB7XG4gICAgICByZXR1cm4gcmVzdWx0LmNhdGNoKGUgPT4ge1xuICAgICAgICBuZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4gZXJyb3JIYW5kbGVyKGUpKTtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9IGNhdGNoIChlKSB7XG4gICAgbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IGVycm9ySGFuZGxlcihlKSk7XG4gICAgdGhyb3cgZTtcbiAgfVxufVxubGV0IFBsYXRmb3JtUmVmID0gLyojX19QVVJFX18qLygoKSA9PiB7XG4gIGNsYXNzIFBsYXRmb3JtUmVmIHtcbiAgICBfaW5qZWN0b3I7XG4gICAgX21vZHVsZXMgPSBbXTtcbiAgICBfZGVzdHJveUxpc3RlbmVycyA9IFtdO1xuICAgIF9kZXN0cm95ZWQgPSBmYWxzZTtcbiAgICBjb25zdHJ1Y3RvcihfaW5qZWN0b3IpIHtcbiAgICAgIHRoaXMuX2luamVjdG9yID0gX2luamVjdG9yO1xuICAgIH1cbiAgICBib290c3RyYXBNb2R1bGVGYWN0b3J5KG1vZHVsZUZhY3RvcnksIG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IGFsbEFwcFByb3ZpZGVycyA9IFtwcm92aWRlWm9uZWxlc3NDaGFuZ2VEZXRlY3Rpb25JbnRlcm5hbCgpLCAuLi4ob3B0aW9ucz8uYXBwbGljYXRpb25Qcm92aWRlcnMgPz8gW10pLCBlcnJvckhhbmRsZXJFbnZpcm9ubWVudEluaXRpYWxpemVyLCAuLi4obmdEZXZNb2RlID8gW3ZhbGlkQXBwSWRJbml0aWFsaXplcl0gOiBbXSldO1xuICAgICAgY29uc3QgbW9kdWxlUmVmID0gY3JlYXRlTmdNb2R1bGVSZWZXaXRoUHJvdmlkZXJzKG1vZHVsZUZhY3RvcnkubW9kdWxlVHlwZSwgdGhpcy5pbmplY3RvciwgYWxsQXBwUHJvdmlkZXJzKTtcbiAgICAgIHNldE1vZHVsZUJvb3RzdHJhcEltcGwoKTtcbiAgICAgIHJldHVybiBib290c3RyYXAoe1xuICAgICAgICBtb2R1bGVSZWYsXG4gICAgICAgIGFsbFBsYXRmb3JtTW9kdWxlczogdGhpcy5fbW9kdWxlcyxcbiAgICAgICAgcGxhdGZvcm1JbmplY3RvcjogdGhpcy5pbmplY3RvclxuICAgICAgfSk7XG4gICAgfVxuICAgIGJvb3RzdHJhcE1vZHVsZShtb2R1bGVUeXBlLCBjb21waWxlck9wdGlvbnMgPSBbXSkge1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IG9wdGlvbnNSZWR1Y2VyKHt9LCBjb21waWxlck9wdGlvbnMpO1xuICAgICAgc2V0TW9kdWxlQm9vdHN0cmFwSW1wbCgpO1xuICAgICAgcmV0dXJuIGNvbXBpbGVOZ01vZHVsZUZhY3RvcnkodGhpcy5pbmplY3Rvciwgb3B0aW9ucywgbW9kdWxlVHlwZSkudGhlbihtb2R1bGVGYWN0b3J5ID0+IHRoaXMuYm9vdHN0cmFwTW9kdWxlRmFjdG9yeShtb2R1bGVGYWN0b3J5LCBvcHRpb25zKSk7XG4gICAgfVxuICAgIG9uRGVzdHJveShjYWxsYmFjaykge1xuICAgICAgdGhpcy5fZGVzdHJveUxpc3RlbmVycy5wdXNoKGNhbGxiYWNrKTtcbiAgICB9XG4gICAgZ2V0IGluamVjdG9yKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2luamVjdG9yO1xuICAgIH1cbiAgICBkZXN0cm95KCkge1xuICAgICAgaWYgKHRoaXMuX2Rlc3Ryb3llZCkge1xuICAgICAgICB0aHJvdyBuZXcgUnVudGltZUVycm9yKDQwNCwgbmdEZXZNb2RlICYmICdUaGUgcGxhdGZvcm0gaGFzIGFscmVhZHkgYmVlbiBkZXN0cm95ZWQhJyk7XG4gICAgICB9XG4gICAgICB0aGlzLl9tb2R1bGVzLnNsaWNlKCkuZm9yRWFjaChtb2R1bGUgPT4gbW9kdWxlLmRlc3Ryb3koKSk7XG4gICAgICB0aGlzLl9kZXN0cm95TGlzdGVuZXJzLmZvckVhY2gobGlzdGVuZXIgPT4gbGlzdGVuZXIoKSk7XG4gICAgICBjb25zdCBkZXN0cm95TGlzdGVuZXJzID0gdGhpcy5faW5qZWN0b3IuZ2V0KFBMQVRGT1JNX0RFU1RST1lfTElTVEVORVJTLCBudWxsKTtcbiAgICAgIGlmIChkZXN0cm95TGlzdGVuZXJzKSB7XG4gICAgICAgIGRlc3Ryb3lMaXN0ZW5lcnMuZm9yRWFjaChsaXN0ZW5lciA9PiBsaXN0ZW5lcigpKTtcbiAgICAgICAgZGVzdHJveUxpc3RlbmVycy5jbGVhcigpO1xuICAgICAgfVxuICAgICAgdGhpcy5fZGVzdHJveWVkID0gdHJ1ZTtcbiAgICB9XG4gICAgZ2V0IGRlc3Ryb3llZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9kZXN0cm95ZWQ7XG4gICAgfVxuICAgIHN0YXRpYyDJtWZhYyA9IGZ1bmN0aW9uIFBsYXRmb3JtUmVmX0ZhY3RvcnkoX19uZ0ZhY3RvcnlUeXBlX18pIHtcbiAgICAgIHJldHVybiBuZXcgKF9fbmdGYWN0b3J5VHlwZV9fIHx8IFBsYXRmb3JtUmVmKShfX2luamVjdChJbmplY3RvcikpO1xuICAgIH07XG4gICAgc3RhdGljIMm1cHJvdiA9IC8qQF9fUFVSRV9fKi9fX2RlZmluZUluamVjdGFibGUoe1xuICAgICAgdG9rZW46IFBsYXRmb3JtUmVmLFxuICAgICAgZmFjdG9yeTogUGxhdGZvcm1SZWYuybVmYWMsXG4gICAgICBwcm92aWRlZEluOiAncGxhdGZvcm0nXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIFBsYXRmb3JtUmVmO1xufSkoKTtcbi8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICAodHlwZW9mIG5nRGV2TW9kZSA9PT0gXCJ1bmRlZmluZWRcIiB8fCBuZ0Rldk1vZGUpICYmIHNldENsYXNzTWV0YWRhdGEoUGxhdGZvcm1SZWYsIFt7XG4gICAgdHlwZTogSW5qZWN0YWJsZSxcbiAgICBhcmdzOiBbe1xuICAgICAgcHJvdmlkZWRJbjogJ3BsYXRmb3JtJ1xuICAgIH1dXG4gIH1dLCAoKSA9PiBbe1xuICAgIHR5cGU6IEluamVjdG9yXG4gIH1dLCBudWxsKTtcbn0pKCk7XG5sZXQgX3BsYXRmb3JtSW5qZWN0b3IgPSBudWxsO1xuZnVuY3Rpb24gY3JlYXRlUGxhdGZvcm0oaW5qZWN0b3IpIHtcbiAgaWYgKGdldFBsYXRmb3JtKCkpIHtcbiAgICB0aHJvdyBuZXcgUnVudGltZUVycm9yKDQwMCwgbmdEZXZNb2RlICYmICdUaGVyZSBjYW4gYmUgb25seSBvbmUgcGxhdGZvcm0uIERlc3Ryb3kgdGhlIHByZXZpb3VzIG9uZSB0byBjcmVhdGUgYSBuZXcgb25lLicpO1xuICB9XG4gIHB1Ymxpc2hEZWZhdWx0R2xvYmFsVXRpbHMoKTtcbiAgcHVibGlzaFNpZ25hbENvbmZpZ3VyYXRpb24oKTtcbiAgX3BsYXRmb3JtSW5qZWN0b3IgPSB0eXBlb2YgbmdTZXJ2ZXJNb2RlID09PSAndW5kZWZpbmVkJyB8fCAhbmdTZXJ2ZXJNb2RlID8gaW5qZWN0b3IgOiBudWxsO1xuICBjb25zdCBwbGF0Zm9ybSA9IGluamVjdG9yLmdldChQbGF0Zm9ybVJlZik7XG4gIHJ1blBsYXRmb3JtSW5pdGlhbGl6ZXJzKGluamVjdG9yKTtcbiAgcmV0dXJuIHBsYXRmb3JtO1xufVxuZnVuY3Rpb24gY3JlYXRlUGxhdGZvcm1GYWN0b3J5KHBhcmVudFBsYXRmb3JtRmFjdG9yeSwgbmFtZSwgcHJvdmlkZXJzID0gW10pIHtcbiAgY29uc3QgZGVzYyA9IGBQbGF0Zm9ybTogJHtuYW1lfWA7XG4gIGNvbnN0IG1hcmtlciA9IG5ldyBJbmplY3Rpb25Ub2tlbihkZXNjKTtcbiAgcmV0dXJuIChleHRyYVByb3ZpZGVycyA9IFtdKSA9PiB7XG4gICAgbGV0IHBsYXRmb3JtID0gZ2V0UGxhdGZvcm0oKTtcbiAgICBpZiAoIXBsYXRmb3JtKSB7XG4gICAgICBjb25zdCBwbGF0Zm9ybVByb3ZpZGVycyA9IFsuLi5wcm92aWRlcnMsIC4uLmV4dHJhUHJvdmlkZXJzLCB7XG4gICAgICAgIHByb3ZpZGU6IG1hcmtlcixcbiAgICAgICAgdXNlVmFsdWU6IHRydWVcbiAgICAgIH1dO1xuICAgICAgcGxhdGZvcm0gPSBwYXJlbnRQbGF0Zm9ybUZhY3Rvcnk/LihwbGF0Zm9ybVByb3ZpZGVycykgPz8gY3JlYXRlUGxhdGZvcm0oY3JlYXRlUGxhdGZvcm1JbmplY3RvcihwbGF0Zm9ybVByb3ZpZGVycywgZGVzYykpO1xuICAgIH1cbiAgICByZXR1cm4gdHlwZW9mIG5nU2VydmVyTW9kZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbmdTZXJ2ZXJNb2RlID8gcGxhdGZvcm0gOiBhc3NlcnRQbGF0Zm9ybShtYXJrZXIpO1xuICB9O1xufVxuZnVuY3Rpb24gY3JlYXRlUGxhdGZvcm1JbmplY3Rvcihwcm92aWRlcnMgPSBbXSwgbmFtZSkge1xuICByZXR1cm4gSW5qZWN0b3IuY3JlYXRlKHtcbiAgICBuYW1lLFxuICAgIHByb3ZpZGVyczogW3tcbiAgICAgIHByb3ZpZGU6IElOSkVDVE9SX1NDT1BFLFxuICAgICAgdXNlVmFsdWU6ICdwbGF0Zm9ybSdcbiAgICB9LCB7XG4gICAgICBwcm92aWRlOiBQTEFURk9STV9ERVNUUk9ZX0xJU1RFTkVSUyxcbiAgICAgIHVzZVZhbHVlOiBuZXcgU2V0KFsoKSA9PiBfcGxhdGZvcm1JbmplY3RvciA9IG51bGxdKVxuICAgIH0sIC4uLnByb3ZpZGVyc11cbiAgfSk7XG59XG5mdW5jdGlvbiBhc3NlcnRQbGF0Zm9ybShyZXF1aXJlZFRva2VuKSB7XG4gIGNvbnN0IHBsYXRmb3JtID0gZ2V0UGxhdGZvcm0oKTtcbiAgaWYgKCFwbGF0Zm9ybSkge1xuICAgIHRocm93IG5ldyBSdW50aW1lRXJyb3IoLTQwMSwgbmdEZXZNb2RlICYmICdObyBwbGF0Zm9ybSBleGlzdHMhJyk7XG4gIH1cbiAgaWYgKCh0eXBlb2YgbmdEZXZNb2RlID09PSAndW5kZWZpbmVkJyB8fCBuZ0Rldk1vZGUpICYmICFwbGF0Zm9ybS5pbmplY3Rvci5nZXQocmVxdWlyZWRUb2tlbiwgbnVsbCkpIHtcbiAgICB0aHJvdyBuZXcgUnVudGltZUVycm9yKDQwMCwgJ0EgcGxhdGZvcm0gd2l0aCBhIGRpZmZlcmVudCBjb25maWd1cmF0aW9uIGhhcyBiZWVuIGNyZWF0ZWQuIFBsZWFzZSBkZXN0cm95IGl0IGZpcnN0LicpO1xuICB9XG4gIHJldHVybiBwbGF0Zm9ybTtcbn1cbmZ1bmN0aW9uIGdldFBsYXRmb3JtKCkge1xuICBpZiAodHlwZW9mIG5nU2VydmVyTW9kZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbmdTZXJ2ZXJNb2RlKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIF9wbGF0Zm9ybUluamVjdG9yPy5nZXQoUGxhdGZvcm1SZWYpID8/IG51bGw7XG59XG5mdW5jdGlvbiBkZXN0cm95UGxhdGZvcm0oKSB7XG4gIGdldFBsYXRmb3JtKCk/LmRlc3Ryb3koKTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZU9yUmV1c2VQbGF0Zm9ybUluamVjdG9yKHByb3ZpZGVycyA9IFtdKSB7XG4gIGlmIChfcGxhdGZvcm1JbmplY3RvcikgcmV0dXJuIF9wbGF0Zm9ybUluamVjdG9yO1xuICBwdWJsaXNoRGVmYXVsdEdsb2JhbFV0aWxzKCk7XG4gIGNvbnN0IGluamVjdG9yID0gY3JlYXRlUGxhdGZvcm1JbmplY3Rvcihwcm92aWRlcnMpO1xuICBpZiAodHlwZW9mIG5nU2VydmVyTW9kZSA9PT0gJ3VuZGVmaW5lZCcgfHwgIW5nU2VydmVyTW9kZSkge1xuICAgIF9wbGF0Zm9ybUluamVjdG9yID0gaW5qZWN0b3I7XG4gIH1cbiAgcHVibGlzaFNpZ25hbENvbmZpZ3VyYXRpb24oKTtcbiAgcnVuUGxhdGZvcm1Jbml0aWFsaXplcnMoaW5qZWN0b3IpO1xuICByZXR1cm4gaW5qZWN0b3I7XG59XG5mdW5jdGlvbiBwcm92aWRlUGxhdGZvcm1Jbml0aWFsaXplcihpbml0aWFsaXplckZuKSB7XG4gIHJldHVybiB7XG4gICAgcHJvdmlkZTogUExBVEZPUk1fSU5JVElBTElaRVIsXG4gICAgdXNlVmFsdWU6IGluaXRpYWxpemVyRm4sXG4gICAgbXVsdGk6IHRydWVcbiAgfTtcbn1cbmZ1bmN0aW9uIHJ1blBsYXRmb3JtSW5pdGlhbGl6ZXJzKGluamVjdG9yKSB7XG4gIGNvbnN0IGluaXRzID0gaW5qZWN0b3IuZ2V0KFBMQVRGT1JNX0lOSVRJQUxJWkVSLCBudWxsKTtcbiAgcnVuSW5JbmplY3Rpb25Db250ZXh0KGluamVjdG9yLCAoKSA9PiB7XG4gICAgaW5pdHM/LmZvckVhY2goaW5pdCA9PiBpbml0KCkpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIGV4aGF1c3RpdmVDaGVja05vQ2hhbmdlc0ludGVydmFsKGludGVydmFsKSB7XG4gIHJldHVybiBwcm92aWRlRW52aXJvbm1lbnRJbml0aWFsaXplcigoKSA9PiB7XG4gICAgY29uc3QgYXBwbGljYXRpb25SZWYgPSBpbmplY3QoQXBwbGljYXRpb25SZWYpO1xuICAgIGNvbnN0IGVycm9ySGFuZGxlciA9IGluamVjdChFcnJvckhhbmRsZXIpO1xuICAgIGNvbnN0IHNjaGVkdWxlciA9IGluamVjdChDaGFuZ2VEZXRlY3Rpb25TY2hlZHVsZXJJbXBsKTtcbiAgICBjb25zdCBuZ1pvbmUgPSBpbmplY3QoTmdab25lKTtcbiAgICBmdW5jdGlvbiBzY2hlZHVsZUNoZWNrTm9DaGFuZ2VzKCkge1xuICAgICAgbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgaWYgKGFwcGxpY2F0aW9uUmVmLmRlc3Ryb3llZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoc2NoZWR1bGVyLnBlbmRpbmdSZW5kZXJUYXNrSWQgfHwgc2NoZWR1bGVyLnJ1bm5pbmdUaWNrKSB7XG4gICAgICAgICAgICBzY2hlZHVsZUNoZWNrTm9DaGFuZ2VzKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGZvciAoY29uc3QgdmlldyBvZiBhcHBsaWNhdGlvblJlZi5hbGxWaWV3cykge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgY2hlY2tOb0NoYW5nZXNJbnRlcm5hbCh2aWV3Ll9sVmlldywgdHJ1ZSk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgIGVycm9ySGFuZGxlci5oYW5kbGVFcnJvcihlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgc2NoZWR1bGVDaGVja05vQ2hhbmdlcygpO1xuICAgICAgICB9LCBpbnRlcnZhbCk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgc2NoZWR1bGVDaGVja05vQ2hhbmdlcygpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIHByb3ZpZGVDaGVja05vQ2hhbmdlc0NvbmZpZyhvcHRpb25zKSB7XG4gIHJldHVybiBtYWtlRW52aXJvbm1lbnRQcm92aWRlcnModHlwZW9mIG5nRGV2TW9kZSA9PT0gJ3VuZGVmaW5lZCcgfHwgbmdEZXZNb2RlID8gW3tcbiAgICBwcm92aWRlOiBVc2VFeGhhdXN0aXZlQ2hlY2tOb0NoYW5nZXMsXG4gICAgdXNlVmFsdWU6IG9wdGlvbnMuZXhoYXVzdGl2ZVxuICB9LCBvcHRpb25zPy5pbnRlcnZhbCAhPT0gdW5kZWZpbmVkID8gZXhoYXVzdGl2ZUNoZWNrTm9DaGFuZ2VzSW50ZXJ2YWwob3B0aW9ucy5pbnRlcnZhbCkgOiBbXV0gOiBbXSk7XG59XG5mdW5jdGlvbiBpc0Rldk1vZGUoKSB7XG4gIHJldHVybiB0eXBlb2YgbmdEZXZNb2RlID09PSAndW5kZWZpbmVkJyB8fCAhIW5nRGV2TW9kZTtcbn1cbmZ1bmN0aW9uIGVuYWJsZVByb2RNb2RlKCkge1xuICBpZiAodHlwZW9mIG5nRGV2TW9kZSA9PT0gJ3VuZGVmaW5lZCcgfHwgbmdEZXZNb2RlKSB7XG4gICAgX2dsb2JhbFsnbmdEZXZNb2RlJ10gPSBmYWxzZTtcbiAgfVxufVxuY29uc3QgYXBwc1dpdGhFdmVudFJlcGxheSA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha1NldCgpO1xuY29uc3QgRUFHRVJfQ09OVEVOVF9MSVNURU5FUlNfS0VZID0gJyc7XG5mdW5jdGlvbiBzaG91bGRFbmFibGVFdmVudFJlcGxheShpbmplY3Rvcikge1xuICByZXR1cm4gaW5qZWN0b3IuZ2V0KElTX0VWRU5UX1JFUExBWV9FTkFCTEVELCBFVkVOVF9SRVBMQVlfRU5BQkxFRF9ERUZBVUxUKTtcbn1cbmZ1bmN0aW9uIHdpdGhFdmVudFJlcGxheSgpIHtcbiAgY29uc3QgcHJvdmlkZXJzID0gW3tcbiAgICBwcm92aWRlOiBJU19FVkVOVF9SRVBMQVlfRU5BQkxFRCxcbiAgICB1c2VGYWN0b3J5OiAoKSA9PiB7XG4gICAgICBsZXQgaXNFbmFibGVkID0gdHJ1ZTtcbiAgICAgIGlmICh0eXBlb2YgbmdTZXJ2ZXJNb2RlID09PSAndW5kZWZpbmVkJyB8fCAhbmdTZXJ2ZXJNb2RlKSB7XG4gICAgICAgIGNvbnN0IGFwcElkID0gaW5qZWN0KEFQUF9JRCk7XG4gICAgICAgIGlzRW5hYmxlZCA9ICEhd2luZG93Ll9lanNhcz8uW2FwcElkXTtcbiAgICAgIH1cbiAgICAgIGlmIChpc0VuYWJsZWQpIHtcbiAgICAgICAgcGVyZm9ybWFuY2VNYXJrRmVhdHVyZSgnTmdFdmVudFJlcGxheScpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGlzRW5hYmxlZDtcbiAgICB9XG4gIH1dO1xuICBpZiAodHlwZW9mIG5nU2VydmVyTW9kZSA9PT0gJ3VuZGVmaW5lZCcgfHwgIW5nU2VydmVyTW9kZSkge1xuICAgIHByb3ZpZGVycy5wdXNoKHtcbiAgICAgIHByb3ZpZGU6IEVOVklST05NRU5UX0lOSVRJQUxJWkVSLFxuICAgICAgdXNlVmFsdWU6ICgpID0+IHtcbiAgICAgICAgY29uc3QgYXBwUmVmID0gaW5qZWN0KEFwcGxpY2F0aW9uUmVmKTtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgIGluamVjdG9yXG4gICAgICAgIH0gPSBhcHBSZWY7XG4gICAgICAgIGlmICghYXBwc1dpdGhFdmVudFJlcGxheS5oYXMoYXBwUmVmKSkge1xuICAgICAgICAgIGNvbnN0IGpzQWN0aW9uTWFwID0gaW5qZWN0KEpTQUNUSU9OX0JMT0NLX0VMRU1FTlRfTUFQKTtcbiAgICAgICAgICBpZiAoc2hvdWxkRW5hYmxlRXZlbnRSZXBsYXkoaW5qZWN0b3IpKSB7XG4gICAgICAgICAgICBlbmFibGVTdGFzaEV2ZW50TGlzdGVuZXJJbXBsKCk7XG4gICAgICAgICAgICBjb25zdCBhcHBJZCA9IGluamVjdG9yLmdldChBUFBfSUQpO1xuICAgICAgICAgICAgY29uc3QgY2xlYXJTdGFzaEZuID0gc2V0U3Rhc2hGbihhcHBJZCwgKHJFbCwgZXZlbnROYW1lLCBsaXN0ZW5lckZuKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChyRWwubm9kZVR5cGUgIT09IE5vZGUuRUxFTUVOVF9OT0RFKSByZXR1cm47XG4gICAgICAgICAgICAgIHNoYXJlZFN0YXNoRnVuY3Rpb24ockVsLCBldmVudE5hbWUsIGxpc3RlbmVyRm4pO1xuICAgICAgICAgICAgICBzaGFyZWRNYXBGdW5jdGlvbihyRWwsIGpzQWN0aW9uTWFwKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYXBwUmVmLm9uRGVzdHJveShjbGVhclN0YXNoRm4pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIG11bHRpOiB0cnVlXG4gICAgfSwge1xuICAgICAgcHJvdmlkZTogQVBQX0JPT1RTVFJBUF9MSVNURU5FUixcbiAgICAgIHVzZUZhY3Rvcnk6ICgpID0+IHtcbiAgICAgICAgY29uc3QgYXBwUmVmID0gaW5qZWN0KEFwcGxpY2F0aW9uUmVmKTtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgIGluamVjdG9yXG4gICAgICAgIH0gPSBhcHBSZWY7XG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgaWYgKCFzaG91bGRFbmFibGVFdmVudFJlcGxheShpbmplY3RvcikgfHwgYXBwc1dpdGhFdmVudFJlcGxheS5oYXMoYXBwUmVmKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBhcHBzV2l0aEV2ZW50UmVwbGF5LmFkZChhcHBSZWYpO1xuICAgICAgICAgIGNvbnN0IGFwcElkID0gaW5qZWN0b3IuZ2V0KEFQUF9JRCk7XG4gICAgICAgICAgYXBwUmVmLm9uRGVzdHJveSgoKSA9PiB7XG4gICAgICAgICAgICBhcHBzV2l0aEV2ZW50UmVwbGF5LmRlbGV0ZShhcHBSZWYpO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBuZ1NlcnZlck1vZGUgIT09ICd1bmRlZmluZWQnICYmICFuZ1NlcnZlck1vZGUpIHtcbiAgICAgICAgICAgICAgY2xlYXJBcHBTY29wZWRFYXJseUV2ZW50Q29udHJhY3QoYXBwSWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGFwcFJlZi53aGVuU3RhYmxlKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBpZiAoYXBwUmVmLmRlc3Ryb3llZCkge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBldmVudENvbnRyYWN0RGV0YWlscyA9IGluamVjdG9yLmdldChKU0FDVElPTl9FVkVOVF9DT05UUkFDVCk7XG4gICAgICAgICAgICBpbml0RXZlbnRSZXBsYXkoZXZlbnRDb250cmFjdERldGFpbHMsIGluamVjdG9yKTtcbiAgICAgICAgICAgIGNvbnN0IGpzQWN0aW9uTWFwID0gaW5qZWN0b3IuZ2V0KEpTQUNUSU9OX0JMT0NLX0VMRU1FTlRfTUFQKTtcbiAgICAgICAgICAgIGpzQWN0aW9uTWFwLmdldChFQUdFUl9DT05URU5UX0xJU1RFTkVSU19LRVkpPy5mb3JFYWNoKHJlbW92ZUxpc3RlbmVycyk7XG4gICAgICAgICAgICBqc0FjdGlvbk1hcC5kZWxldGUoRUFHRVJfQ09OVEVOVF9MSVNURU5FUlNfS0VZKTtcbiAgICAgICAgICAgIGNvbnN0IGV2ZW50Q29udHJhY3QgPSBldmVudENvbnRyYWN0RGV0YWlscy5pbnN0YW5jZTtcbiAgICAgICAgICAgIGlmIChpc0luY3JlbWVudGFsSHlkcmF0aW9uRW5hYmxlZChpbmplY3RvcikpIHtcbiAgICAgICAgICAgICAgYXBwUmVmLm9uRGVzdHJveSgoKSA9PiBldmVudENvbnRyYWN0LmNsZWFuVXAoKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBldmVudENvbnRyYWN0LmNsZWFuVXAoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgIH0sXG4gICAgICBtdWx0aTogdHJ1ZVxuICAgIH0pO1xuICB9XG4gIHJldHVybiBwcm92aWRlcnM7XG59XG5jb25zdCBpbml0RXZlbnRSZXBsYXkgPSAoZXZlbnREZWxlZ2F0aW9uLCBpbmplY3RvcikgPT4ge1xuICBjb25zdCBhcHBJZCA9IGluamVjdG9yLmdldChBUFBfSUQpO1xuICBjb25zdCBlYXJseUpzYWN0aW9uRGF0YSA9IHdpbmRvdy5fZWpzYXNbYXBwSWRdO1xuICBjb25zdCBldmVudENvbnRyYWN0ID0gZXZlbnREZWxlZ2F0aW9uLmluc3RhbmNlID0gbmV3IEV2ZW50Q29udHJhY3QobmV3IEV2ZW50Q29udHJhY3RDb250YWluZXIoZWFybHlKc2FjdGlvbkRhdGEuYykpO1xuICBmb3IgKGNvbnN0IGV0IG9mIGVhcmx5SnNhY3Rpb25EYXRhLmV0KSB7XG4gICAgZXZlbnRDb250cmFjdC5hZGRFdmVudChldCk7XG4gIH1cbiAgZm9yIChjb25zdCBldCBvZiBlYXJseUpzYWN0aW9uRGF0YS5ldGMpIHtcbiAgICBldmVudENvbnRyYWN0LmFkZEV2ZW50KGV0KTtcbiAgfVxuICBjb25zdCBldmVudEluZm9zID0gZ2V0QXBwU2NvcGVkUXVldWVkRXZlbnRJbmZvcyhhcHBJZCk7XG4gIGV2ZW50Q29udHJhY3QucmVwbGF5RWFybHlFdmVudEluZm9zKGV2ZW50SW5mb3MpO1xuICBjbGVhckFwcFNjb3BlZEVhcmx5RXZlbnRDb250cmFjdChhcHBJZCk7XG4gIGNvbnN0IGRpc3BhdGNoZXIgPSBuZXcgRXZlbnREaXNwYXRjaGVyKGV2ZW50ID0+IHtcbiAgICBpbnZva2VSZWdpc3RlcmVkUmVwbGF5TGlzdGVuZXJzKGluamVjdG9yLCBldmVudCwgZXZlbnQuY3VycmVudFRhcmdldCk7XG4gIH0pO1xuICByZWdpc3RlckRpc3BhdGNoZXIoZXZlbnRDb250cmFjdCwgZGlzcGF0Y2hlcik7XG59O1xuZnVuY3Rpb24gY29sbGVjdERvbUV2ZW50c0luZm8odFZpZXcsIGxWaWV3LCBldmVudFR5cGVzVG9SZXBsYXkpIHtcbiAgY29uc3QgZG9tRXZlbnRzSW5mbyA9IG5ldyBNYXAoKTtcbiAgY29uc3QgbENsZWFudXAgPSBsVmlld1tDTEVBTlVQXTtcbiAgY29uc3QgdENsZWFudXAgPSB0Vmlldy5jbGVhbnVwO1xuICBpZiAoIXRDbGVhbnVwIHx8ICFsQ2xlYW51cCkge1xuICAgIHJldHVybiBkb21FdmVudHNJbmZvO1xuICB9XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdENsZWFudXAubGVuZ3RoOykge1xuICAgIGNvbnN0IGZpcnN0UGFyYW0gPSB0Q2xlYW51cFtpKytdO1xuICAgIGNvbnN0IHNlY29uZFBhcmFtID0gdENsZWFudXBbaSsrXTtcbiAgICBpZiAodHlwZW9mIGZpcnN0UGFyYW0gIT09ICdzdHJpbmcnKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3QgZXZlbnRUeXBlID0gZmlyc3RQYXJhbTtcbiAgICBpZiAoIWlzRWFybHlFdmVudFR5cGUoZXZlbnRUeXBlKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChpc0NhcHR1cmVFdmVudFR5cGUoZXZlbnRUeXBlKSkge1xuICAgICAgZXZlbnRUeXBlc1RvUmVwbGF5LmNhcHR1cmUuYWRkKGV2ZW50VHlwZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGV2ZW50VHlwZXNUb1JlcGxheS5yZWd1bGFyLmFkZChldmVudFR5cGUpO1xuICAgIH1cbiAgICBjb25zdCBsaXN0ZW5lckVsZW1lbnQgPSB1bndyYXBSTm9kZShsVmlld1tzZWNvbmRQYXJhbV0pO1xuICAgIGkrKztcbiAgICBjb25zdCB1c2VDYXB0dXJlT3JJbmR4ID0gdENsZWFudXBbaSsrXTtcbiAgICBjb25zdCBpc0RvbUV2ZW50ID0gdHlwZW9mIHVzZUNhcHR1cmVPckluZHggPT09ICdib29sZWFuJyB8fCB1c2VDYXB0dXJlT3JJbmR4ID49IDA7XG4gICAgaWYgKCFpc0RvbUV2ZW50KSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKCFkb21FdmVudHNJbmZvLmhhcyhsaXN0ZW5lckVsZW1lbnQpKSB7XG4gICAgICBkb21FdmVudHNJbmZvLnNldChsaXN0ZW5lckVsZW1lbnQsIFtldmVudFR5cGVdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZG9tRXZlbnRzSW5mby5nZXQobGlzdGVuZXJFbGVtZW50KS5wdXNoKGV2ZW50VHlwZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBkb21FdmVudHNJbmZvO1xufVxuZnVuY3Rpb24gaW52b2tlUmVnaXN0ZXJlZFJlcGxheUxpc3RlbmVycyhpbmplY3RvciwgZXZlbnQsIGN1cnJlbnRUYXJnZXQpIHtcbiAgY29uc3QgYmxvY2tOYW1lID0gKGN1cnJlbnRUYXJnZXQgJiYgY3VycmVudFRhcmdldC5nZXRBdHRyaWJ1dGUoREVGRVJfQkxPQ0tfU1NSX0lEX0FUVFJJQlVURSkpID8/ICcnO1xuICBpZiAoL2RcXGQrLy50ZXN0KGJsb2NrTmFtZSkpIHtcbiAgICBoeWRyYXRlQW5kSW52b2tlQmxvY2tMaXN0ZW5lcnMoYmxvY2tOYW1lLCBpbmplY3RvciwgZXZlbnQsIGN1cnJlbnRUYXJnZXQpO1xuICB9IGVsc2UgaWYgKGV2ZW50LmV2ZW50UGhhc2UgPT09IEV2ZW50UGhhc2UuUkVQTEFZKSB7XG4gICAgaW52b2tlTGlzdGVuZXJzKGV2ZW50LCBjdXJyZW50VGFyZ2V0KTtcbiAgfVxufVxuZnVuY3Rpb24gaHlkcmF0ZUFuZEludm9rZUJsb2NrTGlzdGVuZXJzKGJsb2NrTmFtZSwgaW5qZWN0b3IsIGV2ZW50LCBjdXJyZW50VGFyZ2V0KSB7XG4gIGNvbnN0IHF1ZXVlID0gaW5qZWN0b3IuZ2V0KEVWRU5UX1JFUExBWV9RVUVVRSk7XG4gIHF1ZXVlLnB1c2goe1xuICAgIGV2ZW50LFxuICAgIGN1cnJlbnRUYXJnZXRcbiAgfSk7XG4gIHRyaWdnZXJIeWRyYXRpb25Gcm9tQmxvY2tOYW1lKGluamVjdG9yLCBibG9ja05hbWUsIGNyZWF0ZVJlcGxheVF1ZXVlZEJsb2NrRXZlbnRzRm4ocXVldWUpKTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZVJlcGxheVF1ZXVlZEJsb2NrRXZlbnRzRm4ocXVldWUpIHtcbiAgcmV0dXJuIGh5ZHJhdGVkQmxvY2tzID0+IHtcbiAgICBjb25zdCBoeWRyYXRlZCA9IG5ldyBTZXQoaHlkcmF0ZWRCbG9ja3MpO1xuICAgIGNvbnN0IG5ld1F1ZXVlID0gW107XG4gICAgZm9yIChsZXQge1xuICAgICAgZXZlbnQsXG4gICAgICBjdXJyZW50VGFyZ2V0XG4gICAgfSBvZiBxdWV1ZSkge1xuICAgICAgY29uc3QgYmxvY2tOYW1lID0gY3VycmVudFRhcmdldC5nZXRBdHRyaWJ1dGUoREVGRVJfQkxPQ0tfU1NSX0lEX0FUVFJJQlVURSk7XG4gICAgICBpZiAoaHlkcmF0ZWQuaGFzKGJsb2NrTmFtZSkpIHtcbiAgICAgICAgaW52b2tlTGlzdGVuZXJzKGV2ZW50LCBjdXJyZW50VGFyZ2V0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5ld1F1ZXVlLnB1c2goe1xuICAgICAgICAgIGV2ZW50LFxuICAgICAgICAgIGN1cnJlbnRUYXJnZXRcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIHF1ZXVlLmxlbmd0aCA9IDA7XG4gICAgcXVldWUucHVzaCguLi5uZXdRdWV1ZSk7XG4gIH07XG59XG5sZXQgaXNIeWRyYXRpb25TdXBwb3J0RW5hYmxlZCA9IGZhbHNlO1xubGV0IGlzSTE4bkh5ZHJhdGlvblJ1bnRpbWVTdXBwb3J0RW5hYmxlZCA9IGZhbHNlO1xubGV0IGlzSW5jcmVtZW50YWxIeWRyYXRpb25SdW50aW1lU3VwcG9ydEVuYWJsZWQgPSBmYWxzZTtcbmNvbnN0IEFQUExJQ0FUSU9OX0lTX1NUQUJMRV9USU1FT1VUID0gMTBfMDAwO1xuZnVuY3Rpb24gZW5hYmxlSHlkcmF0aW9uUnVudGltZVN1cHBvcnQoKSB7XG4gIGlmICghaXNIeWRyYXRpb25TdXBwb3J0RW5hYmxlZCkge1xuICAgIGlzSHlkcmF0aW9uU3VwcG9ydEVuYWJsZWQgPSB0cnVlO1xuICAgIGVuYWJsZVJldHJpZXZlSHlkcmF0aW9uSW5mb0ltcGwoKTtcbiAgICBlbmFibGVMb2NhdGVPckNyZWF0ZUVsZW1lbnROb2RlSW1wbCgpO1xuICAgIGVuYWJsZUxvY2F0ZU9yQ3JlYXRlVGV4dE5vZGVJbXBsKCk7XG4gICAgZW5hYmxlTG9jYXRlT3JDcmVhdGVFbGVtZW50Q29udGFpbmVyTm9kZUltcGwoKTtcbiAgICBlbmFibGVMb2NhdGVPckNyZWF0ZUNvbnRhaW5lckFuY2hvckltcGwoKTtcbiAgICBlbmFibGVMb2NhdGVPckNyZWF0ZUNvbnRhaW5lclJlZkltcGwoKTtcbiAgICBlbmFibGVGaW5kTWF0Y2hpbmdEZWh5ZHJhdGVkVmlld0ltcGwoKTtcbiAgICBlbmFibGVBcHBseVJvb3RFbGVtZW50VHJhbnNmb3JtSW1wbCgpO1xuICB9XG59XG5mdW5jdGlvbiBlbmFibGVJMThuSHlkcmF0aW9uUnVudGltZVN1cHBvcnQoKSB7XG4gIGlmICghaXNJMThuSHlkcmF0aW9uUnVudGltZVN1cHBvcnRFbmFibGVkKSB7XG4gICAgaXNJMThuSHlkcmF0aW9uUnVudGltZVN1cHBvcnRFbmFibGVkID0gdHJ1ZTtcbiAgICBlbmFibGVMb2NhdGVPckNyZWF0ZUkxOG5Ob2RlSW1wbCgpO1xuICAgIGVuYWJsZVByZXBhcmVJMThuQmxvY2tGb3JIeWRyYXRpb25JbXBsKCk7XG4gICAgZW5hYmxlQ2xhaW1EZWh5ZHJhdGVkSWN1Q2FzZUltcGwoKTtcbiAgfVxufVxuZnVuY3Rpb24gZW5hYmxlSW5jcmVtZW50YWxIeWRyYXRpb25SdW50aW1lU3VwcG9ydCgpIHtcbiAgaWYgKCFpc0luY3JlbWVudGFsSHlkcmF0aW9uUnVudGltZVN1cHBvcnRFbmFibGVkKSB7XG4gICAgaXNJbmNyZW1lbnRhbEh5ZHJhdGlvblJ1bnRpbWVTdXBwb3J0RW5hYmxlZCA9IHRydWU7XG4gICAgZW5hYmxlUmV0cmlldmVEZWZlckJsb2NrRGF0YUltcGwoKTtcbiAgfVxufVxuZnVuY3Rpb24gcHJpbnRIeWRyYXRpb25TdGF0cyhpbmplY3Rvcikge1xuICBjb25zdCBjb25zb2xlID0gaW5qZWN0b3IuZ2V0KENvbnNvbGUpO1xuICBjb25zdCBtZXNzYWdlID0gYEFuZ3VsYXIgaHlkcmF0ZWQgJHtuZ0Rldk1vZGUuaHlkcmF0ZWRDb21wb25lbnRzfSBjb21wb25lbnQocykgYCArIGBhbmQgJHtuZ0Rldk1vZGUuaHlkcmF0ZWROb2Rlc30gbm9kZShzKSwgYCArIGAke25nRGV2TW9kZS5jb21wb25lbnRzU2tpcHBlZEh5ZHJhdGlvbn0gY29tcG9uZW50KHMpIHdlcmUgc2tpcHBlZC4gYCArIChpc0luY3JlbWVudGFsSHlkcmF0aW9uRW5hYmxlZChpbmplY3RvcikgPyBgJHtuZ0Rldk1vZGUuZGVmZXJCbG9ja3NXaXRoSW5jcmVtZW50YWxIeWRyYXRpb259IGRlZmVyIGJsb2NrKHMpIHdlcmUgY29uZmlndXJlZCB0byB1c2UgaW5jcmVtZW50YWwgaHlkcmF0aW9uLiBgIDogJycpICsgYExlYXJuIG1vcmUgYXQgJHtET0NfUEFHRV9CQVNFX1VSTH0vZ3VpZGUvaHlkcmF0aW9uLmA7XG4gIGNvbnNvbGUubG9nKG1lc3NhZ2UpO1xufVxuZnVuY3Rpb24gd2hlblN0YWJsZVdpdGhUaW1lb3V0KGFwcFJlZikge1xuICBjb25zdCB3aGVuU3RhYmxlUHJvbWlzZSA9IGFwcFJlZi53aGVuU3RhYmxlKCk7XG4gIGlmICh0eXBlb2YgbmdEZXZNb2RlICE9PSAndW5kZWZpbmVkJyAmJiBuZ0Rldk1vZGUpIHtcbiAgICBjb25zdCB0aW1lb3V0VGltZSA9IEFQUExJQ0FUSU9OX0lTX1NUQUJMRV9USU1FT1VUO1xuICAgIGNvbnN0IGNvbnNvbGUgPSBhcHBSZWYuaW5qZWN0b3IuZ2V0KENvbnNvbGUpO1xuICAgIGNvbnN0IG5nWm9uZSA9IGFwcFJlZi5pbmplY3Rvci5nZXQoTmdab25lKTtcbiAgICBjb25zdCB0aW1lb3V0SWQgPSBuZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgcmV0dXJuIHNldFRpbWVvdXQoKCkgPT4gbG9nV2FybmluZ09uU3RhYmxlVGltZWRvdXQodGltZW91dFRpbWUsIGNvbnNvbGUpLCB0aW1lb3V0VGltZSk7XG4gICAgfSk7XG4gICAgd2hlblN0YWJsZVByb21pc2UuZmluYWxseSgoKSA9PiBjbGVhclRpbWVvdXQodGltZW91dElkKSk7XG4gIH1cbiAgcmV0dXJuIHdoZW5TdGFibGVQcm9taXNlO1xufVxuY29uc3QgQ0xJRU5UX1JFTkRFUl9NT0RFX0ZMQUcgPSAnbmdjbSc7XG5mdW5jdGlvbiBpc0NsaWVudFJlbmRlck1vZGVFbmFibGVkKGRvYykge1xuICByZXR1cm4gKHR5cGVvZiBuZ1NlcnZlck1vZGUgPT09ICd1bmRlZmluZWQnIHx8ICFuZ1NlcnZlck1vZGUpICYmIGRvYy5ib2R5Lmhhc0F0dHJpYnV0ZShDTElFTlRfUkVOREVSX01PREVfRkxBRyk7XG59XG5mdW5jdGlvbiB3aXRoRG9tSHlkcmF0aW9uKCkge1xuICBjb25zdCBwcm92aWRlcnMgPSBbe1xuICAgIHByb3ZpZGU6IElTX0hZRFJBVElPTl9ET01fUkVVU0VfRU5BQkxFRCxcbiAgICB1c2VGYWN0b3J5OiAoKSA9PiB7XG4gICAgICBsZXQgaXNFbmFibGVkID0gdHJ1ZTtcbiAgICAgIGlmICh0eXBlb2YgbmdTZXJ2ZXJNb2RlID09PSAndW5kZWZpbmVkJyB8fCAhbmdTZXJ2ZXJNb2RlKSB7XG4gICAgICAgIGNvbnN0IHRyYW5zZmVyU3RhdGUgPSBpbmplY3QoVHJhbnNmZXJTdGF0ZSwge1xuICAgICAgICAgIG9wdGlvbmFsOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgICBpc0VuYWJsZWQgPSAhIXRyYW5zZmVyU3RhdGU/LmdldChOR0hfREFUQV9LRVksIG51bGwpO1xuICAgICAgfVxuICAgICAgaWYgKGlzRW5hYmxlZCkge1xuICAgICAgICBwZXJmb3JtYW5jZU1hcmtGZWF0dXJlKCdOZ0h5ZHJhdGlvbicpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGlzRW5hYmxlZDtcbiAgICB9XG4gIH0sIHtcbiAgICBwcm92aWRlOiBFTlZJUk9OTUVOVF9JTklUSUFMSVpFUixcbiAgICB1c2VWYWx1ZTogKCkgPT4ge1xuICAgICAgc2V0SXNJMThuSHlkcmF0aW9uU3VwcG9ydEVuYWJsZWQoZmFsc2UpO1xuICAgICAgaWYgKHR5cGVvZiBuZ1NlcnZlck1vZGUgIT09ICd1bmRlZmluZWQnICYmIG5nU2VydmVyTW9kZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBkb2MgPSBpbmplY3QoRE9DVU1FTlQpO1xuICAgICAgaWYgKGluamVjdChJU19IWURSQVRJT05fRE9NX1JFVVNFX0VOQUJMRUQpKSB7XG4gICAgICAgIHZlcmlmeVNzckNvbnRlbnRzSW50ZWdyaXR5KGRvYyk7XG4gICAgICAgIGVuYWJsZUh5ZHJhdGlvblJ1bnRpbWVTdXBwb3J0KCk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBuZ0Rldk1vZGUgIT09ICd1bmRlZmluZWQnICYmIG5nRGV2TW9kZSAmJiAhaXNDbGllbnRSZW5kZXJNb2RlRW5hYmxlZChkb2MpKSB7XG4gICAgICAgIGNvbnN0IGNvbnNvbGUgPSBpbmplY3QoQ29uc29sZSk7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBmb3JtYXRSdW50aW1lRXJyb3IoLTUwNSwgJ0FuZ3VsYXIgaHlkcmF0aW9uIHdhcyByZXF1ZXN0ZWQgb24gdGhlIGNsaWVudCwgYnV0IHRoZXJlIHdhcyBubyAnICsgJ3NlcmlhbGl6ZWQgaW5mb3JtYXRpb24gcHJlc2VudCBpbiB0aGUgc2VydmVyIHJlc3BvbnNlLCAnICsgJ3RodXMgaHlkcmF0aW9uIHdhcyBub3QgZW5hYmxlZC4gJyArICdNYWtlIHN1cmUgdGhlIGBwcm92aWRlQ2xpZW50SHlkcmF0aW9uKClgIGlzIGluY2x1ZGVkIGludG8gdGhlIGxpc3QgJyArICdvZiBwcm92aWRlcnMgaW4gdGhlIHNlcnZlciBwYXJ0IG9mIHRoZSBhcHBsaWNhdGlvbiBjb25maWd1cmF0aW9uLicpO1xuICAgICAgICBjb25zb2xlLndhcm4obWVzc2FnZSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBtdWx0aTogdHJ1ZVxuICB9XTtcbiAgaWYgKHR5cGVvZiBuZ1NlcnZlck1vZGUgPT09ICd1bmRlZmluZWQnIHx8ICFuZ1NlcnZlck1vZGUpIHtcbiAgICBwcm92aWRlcnMucHVzaCh7XG4gICAgICBwcm92aWRlOiBQUkVTRVJWRV9IT1NUX0NPTlRFTlQsXG4gICAgICB1c2VGYWN0b3J5OiAoKSA9PiB7XG4gICAgICAgIHJldHVybiBpbmplY3QoSVNfSFlEUkFUSU9OX0RPTV9SRVVTRV9FTkFCTEVEKTtcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBwcm92aWRlOiBBUFBfQk9PVFNUUkFQX0xJU1RFTkVSLFxuICAgICAgdXNlRmFjdG9yeTogKCkgPT4ge1xuICAgICAgICBjb25zdCBzY2hlZHVsZXIgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0aW9uU2NoZWR1bGVyKTtcbiAgICAgICAgaWYgKGluamVjdChJU19IWURSQVRJT05fRE9NX1JFVVNFX0VOQUJMRUQpKSB7XG4gICAgICAgICAgY29uc3QgYXBwUmVmID0gaW5qZWN0KEFwcGxpY2F0aW9uUmVmKTtcbiAgICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgd2hlblN0YWJsZVdpdGhUaW1lb3V0KGFwcFJlZikudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChhcHBSZWYuZGVzdHJveWVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNsZWFudXBEZWh5ZHJhdGVkVmlld3MoYXBwUmVmKTtcbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiBuZ0Rldk1vZGUgIT09ICd1bmRlZmluZWQnICYmIG5nRGV2TW9kZSkge1xuICAgICAgICAgICAgICAgIGNvdW50QmxvY2tzU2tpcHBlZEJ5SHlkcmF0aW9uKGFwcFJlZi5pbmplY3Rvcik7XG4gICAgICAgICAgICAgICAgcHJpbnRIeWRyYXRpb25TdGF0cyhhcHBSZWYuaW5qZWN0b3IpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHNjaGVkdWxlci5ub3RpZnkoNyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAoKSA9PiB7fTtcbiAgICAgIH0sXG4gICAgICBtdWx0aTogdHJ1ZVxuICAgIH0pO1xuICB9XG4gIHJldHVybiBtYWtlRW52aXJvbm1lbnRQcm92aWRlcnMocHJvdmlkZXJzKTtcbn1cbmZ1bmN0aW9uIHdpdGhJMThuU3VwcG9ydCgpIHtcbiAgcmV0dXJuIFt7XG4gICAgcHJvdmlkZTogSVNfSTE4Tl9IWURSQVRJT05fRU5BQkxFRCxcbiAgICB1c2VGYWN0b3J5OiAoKSA9PiBpbmplY3QoSVNfSFlEUkFUSU9OX0RPTV9SRVVTRV9FTkFCTEVEKVxuICB9LCB7XG4gICAgcHJvdmlkZTogRU5WSVJPTk1FTlRfSU5JVElBTElaRVIsXG4gICAgdXNlVmFsdWU6ICgpID0+IHtcbiAgICAgIGlmIChpbmplY3QoSVNfSFlEUkFUSU9OX0RPTV9SRVVTRV9FTkFCTEVEKSkge1xuICAgICAgICBlbmFibGVJMThuSHlkcmF0aW9uUnVudGltZVN1cHBvcnQoKTtcbiAgICAgICAgc2V0SXNJMThuSHlkcmF0aW9uU3VwcG9ydEVuYWJsZWQodHJ1ZSk7XG4gICAgICAgIHBlcmZvcm1hbmNlTWFya0ZlYXR1cmUoJ05nSTE4bkh5ZHJhdGlvbicpO1xuICAgICAgfVxuICAgIH0sXG4gICAgbXVsdGk6IHRydWVcbiAgfV07XG59XG5mdW5jdGlvbiB3aXRoSW5jcmVtZW50YWxIeWRyYXRpb24oKSB7XG4gIGNvbnN0IHByb3ZpZGVycyA9IFt3aXRoRXZlbnRSZXBsYXkoKSwge1xuICAgIHByb3ZpZGU6IElTX0lOQ1JFTUVOVEFMX0hZRFJBVElPTl9FTkFCTEVELFxuICAgIHVzZVZhbHVlOiB0cnVlXG4gIH0sIHtcbiAgICBwcm92aWRlOiBERUhZRFJBVEVEX0JMT0NLX1JFR0lTVFJZLFxuICAgIHVzZUNsYXNzOiBEZWh5ZHJhdGVkQmxvY2tSZWdpc3RyeVxuICB9LCB7XG4gICAgcHJvdmlkZTogRU5WSVJPTk1FTlRfSU5JVElBTElaRVIsXG4gICAgdXNlVmFsdWU6ICgpID0+IHtcbiAgICAgIGVuYWJsZUluY3JlbWVudGFsSHlkcmF0aW9uUnVudGltZVN1cHBvcnQoKTtcbiAgICAgIHBlcmZvcm1hbmNlTWFya0ZlYXR1cmUoJ05nSW5jcmVtZW50YWxIeWRyYXRpb24nKTtcbiAgICB9LFxuICAgIG11bHRpOiB0cnVlXG4gIH1dO1xuICBpZiAodHlwZW9mIG5nU2VydmVyTW9kZSA9PT0gJ3VuZGVmaW5lZCcgfHwgIW5nU2VydmVyTW9kZSkge1xuICAgIHByb3ZpZGVycy5wdXNoKHtcbiAgICAgIHByb3ZpZGU6IEFQUF9CT09UU1RSQVBfTElTVEVORVIsXG4gICAgICB1c2VGYWN0b3J5OiAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGluamVjdG9yID0gaW5qZWN0KEluamVjdG9yKTtcbiAgICAgICAgY29uc3QgZG9jID0gaW5qZWN0KERPQ1VNRU5UKTtcbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICBjb25zdCBkZWZlckJsb2NrRGF0YSA9IHByb2Nlc3NCbG9ja0RhdGEoaW5qZWN0b3IpO1xuICAgICAgICAgIGNvbnN0IGNvbW1lbnRzQnlCbG9ja0lkID0gZ2F0aGVyRGVmZXJCbG9ja3NDb21tZW50Tm9kZXMoZG9jLCBkb2MuYm9keSk7XG4gICAgICAgICAgcHJvY2Vzc0FuZEluaXRUcmlnZ2VycyhpbmplY3RvciwgZGVmZXJCbG9ja0RhdGEsIGNvbW1lbnRzQnlCbG9ja0lkKTtcbiAgICAgICAgICBhcHBlbmREZWZlckJsb2Nrc1RvSlNBY3Rpb25NYXAoZG9jLCBpbmplY3Rvcik7XG4gICAgICAgIH07XG4gICAgICB9LFxuICAgICAgbXVsdGk6IHRydWVcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gcHJvdmlkZXJzO1xufVxuZnVuY3Rpb24gbG9nV2FybmluZ09uU3RhYmxlVGltZWRvdXQodGltZSwgY29uc29sZSkge1xuICBjb25zdCBtZXNzYWdlID0gYEFuZ3VsYXIgaHlkcmF0aW9uIGV4cGVjdGVkIHRoZSBBcHBsaWNhdGlvblJlZi5pc1N0YWJsZSgpIHRvIGVtaXQgXFxgdHJ1ZVxcYCwgYnV0IGl0IGAgKyBgZGlkbid0IGhhcHBlbiB3aXRoaW4gJHt0aW1lfW1zLiBBbmd1bGFyIGh5ZHJhdGlvbiBsb2dpYyBkZXBlbmRzIG9uIHRoZSBhcHBsaWNhdGlvbiBiZWNvbWluZyBzdGFibGUgYCArIGBhcyBhIHNpZ25hbCB0byBjb21wbGV0ZSBoeWRyYXRpb24gcHJvY2Vzcy5gO1xuICBjb25zb2xlLndhcm4oZm9ybWF0UnVudGltZUVycm9yKC01MDYsIG1lc3NhZ2UpKTtcbn1cbmNvbnN0IFNUQUJJTElUWV9XQVJOSU5HX1RIUkVTSE9MRCA9IEFQUExJQ0FUSU9OX0lTX1NUQUJMRV9USU1FT1VUIC0gMV8wMDA7XG5jbGFzcyBEZWJ1Z1Rhc2tUcmFja2VySW1wbCB7XG4gIG9wZW5UYXNrcyA9IC8qI19fUFVSRV9fKi9uZXcgTWFwKCk7XG4gIGFkZCh0YXNrSWQpIHtcbiAgICB0aGlzLm9wZW5UYXNrcy5zZXQodGFza0lkLCBuZXcgRXJyb3IoJ1Rhc2sgc3RhY2sgdHJhY2tpbmcgZXJyb3InKSk7XG4gIH1cbiAgcmVtb3ZlKHRhc2tJZCkge1xuICAgIHRoaXMub3BlblRhc2tzLmRlbGV0ZSh0YXNrSWQpO1xuICB9XG59XG5mdW5jdGlvbiBwcm92aWRlU3RhYmlsaXR5RGVidWdnaW5nKCkge1xuICBjb25zdCB0YXNrVHJhY2tlciA9IG5ldyBEZWJ1Z1Rhc2tUcmFja2VySW1wbCgpO1xuICBjb25zdCB7XG4gICAgb3BlblRhc2tzXG4gIH0gPSB0YXNrVHJhY2tlcjtcbiAgcmV0dXJuIG1ha2VFbnZpcm9ubWVudFByb3ZpZGVycyhbe1xuICAgIHByb3ZpZGU6IERFQlVHX1RBU0tfVFJBQ0tFUixcbiAgICB1c2VWYWx1ZTogdGFza1RyYWNrZXJcbiAgfSwgcHJvdmlkZUFwcEluaXRpYWxpemVyKCgpID0+IHtcbiAgICBpZiAodHlwZW9mIG5nRGV2TW9kZSA9PT0gJ3VuZGVmaW5lZCcgfHwgIW5nRGV2TW9kZSkge1xuICAgICAgY29uc29sZS53YXJuKCdTdGFiaWxpdHkgZGVidWdnaW5nIHV0aWxpdHkgd2FzIHByb3ZpZGVkIGluIHByb2R1Y3Rpb24gbW9kZS4gJyArICdUaGlzIHdpbGwgY2F1c2UgZGVidWcgY29kZSB0byBiZSBpbmNsdWRlZCBpbiBwcm9kdWN0aW9uIGJ1bmRsZXMuICcgKyAnSWYgdGhpcyBpcyBpbnRlbnRpb25hbCBiZWNhdXNlIHlvdSBhcmUgZGVidWdnaW5nIHN0YWJpbGl0eSBpc3N1ZXMgaW4gYSBwcm9kdWN0aW9uIGVudmlyb25tZW50LCB5b3UgY2FuIGlnbm9yZSB0aGlzIHdhcm5pbmcuJyk7XG4gICAgfVxuICAgIGNvbnN0IG5nWm9uZSA9IGluamVjdChOZ1pvbmUpO1xuICAgIGNvbnN0IGFwcGxpY2F0aW9uUmVmID0gaW5qZWN0KEFwcGxpY2F0aW9uUmVmKTtcbiAgICBsZXQgX3Rhc2tUcmFja2luZ1pvbmUgPSBudWxsO1xuICAgIGlmICh0eXBlb2YgWm9uZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIG5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICBfdGFza1RyYWNraW5nWm9uZSA9IFpvbmUuY3VycmVudC5nZXQoJ1Rhc2tUcmFja2luZ1pvbmUnKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBuZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgY29uc3QgdGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZGVidWcoYC0tLS0gQXBwbGljYXRpb24gZGlkIG5vdCBzdGFiaWxpemUgd2l0aGluICR7U1RBQklMSVRZX1dBUk5JTkdfVEhSRVNIT0xEIC8gMTAwMH0gc2Vjb25kcyAtLS0tYCk7XG4gICAgICAgIGlmICh0eXBlb2YgWm9uZSAhPT0gJ3VuZGVmaW5lZCcgJiYgIV90YXNrVHJhY2tpbmdab25lKSB7XG4gICAgICAgICAgY29uc29sZS5pbmZvKCdab25lLmpzIGlzIHByZXNlbnQgYnV0IG5vIFRhc2tUcmFja2luZ1pvbmUgZm91bmQuIFRvIGVuYWJsZSBiZXR0ZXIgZGVidWdnaW5nIG9mIHRhc2tzIGluIHRoZSBBbmd1bGFyIFpvbmUsICcgKyAnaW1wb3J0IFwiem9uZS5qcy9wbHVnaW5zL3Rhc2stdHJhY2tpbmdcIiBpbiB5b3VyIGFwcGxpY2F0aW9uLicpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChfdGFza1RyYWNraW5nWm9uZT8ubWFjcm9UYXNrcz8ubGVuZ3RoKSB7XG4gICAgICAgICAgY29uc29sZS5ncm91cCgnTWFjcm90YXNrcyBrZWVwaW5nIEFuZ3VsYXIgWm9uZSB1bnN0YWJsZTonKTtcbiAgICAgICAgICBmb3IgKGNvbnN0IHQgb2YgX3Rhc2tUcmFja2luZ1pvbmU/Lm1hY3JvVGFza3MgPz8gW10pIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZGVidWcodC5jcmVhdGlvbkxvY2F0aW9uLnN0YWNrKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc29sZS5ncm91cEVuZCgpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnNvbGUuZ3JvdXAoJ1BlbmRpbmdUYXNrcyBrZWVwaW5nIGFwcGxpY2F0aW9uIHVuc3RhYmxlOicpO1xuICAgICAgICBmb3IgKGNvbnN0IGVycm9yIG9mIG9wZW5UYXNrcy52YWx1ZXMoKSkge1xuICAgICAgICAgIGNvbnNvbGUuZGVidWcoZXJyb3Iuc3RhY2spO1xuICAgICAgICB9XG4gICAgICAgIGNvbnNvbGUuZ3JvdXBFbmQoKTtcbiAgICAgIH0sIFNUQUJJTElUWV9XQVJOSU5HX1RIUkVTSE9MRCk7XG4gICAgICBhcHBsaWNhdGlvblJlZi53aGVuU3RhYmxlKCkudGhlbigoKSA9PiB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pXSk7XG59XG5mdW5jdGlvbiBnZXRNb2R1bGVGYWN0b3J5KGlkKSB7XG4gIGNvbnN0IHR5cGUgPSBnZXRSZWdpc3RlcmVkTmdNb2R1bGVUeXBlKGlkKTtcbiAgaWYgKCF0eXBlKSB0aHJvdyBub01vZHVsZUVycm9yKGlkKTtcbiAgcmV0dXJuIG5ldyBOZ01vZHVsZUZhY3RvcnkodHlwZSk7XG59XG5mdW5jdGlvbiBnZXROZ01vZHVsZUJ5SWQoaWQpIHtcbiAgY29uc3QgdHlwZSA9IGdldFJlZ2lzdGVyZWROZ01vZHVsZVR5cGUoaWQpO1xuICBpZiAoIXR5cGUpIHRocm93IG5vTW9kdWxlRXJyb3IoaWQpO1xuICByZXR1cm4gdHlwZTtcbn1cbmZ1bmN0aW9uIG5vTW9kdWxlRXJyb3IoaWQpIHtcbiAgcmV0dXJuIG5ldyBSdW50aW1lRXJyb3IoOTIwLCBuZ0Rldk1vZGUgJiYgYE5vIG1vZHVsZSB3aXRoIElEICR7aWR9IGxvYWRlZGApO1xufVxubGV0IENoYW5nZURldGVjdG9yUmVmID0gLyojX19QVVJFX18qLygoKSA9PiB7XG4gIGNsYXNzIENoYW5nZURldGVjdG9yUmVmIHtcbiAgICBzdGF0aWMgX19OR19FTEVNRU5UX0lEX18gPSBpbmplY3RDaGFuZ2VEZXRlY3RvclJlZjtcbiAgfVxuICByZXR1cm4gQ2hhbmdlRGV0ZWN0b3JSZWY7XG59KSgpO1xuZnVuY3Rpb24gaW5qZWN0Q2hhbmdlRGV0ZWN0b3JSZWYoZmxhZ3MpIHtcbiAgcmV0dXJuIGNyZWF0ZVZpZXdSZWYoZ2V0Q3VycmVudFROb2RlKCksIGdldExWaWV3KCksIChmbGFncyAmIDE2KSA9PT0gMTYpO1xufVxuZnVuY3Rpb24gY3JlYXRlVmlld1JlZih0Tm9kZSwgbFZpZXcsIGlzUGlwZSkge1xuICBpZiAoaXNDb21wb25lbnRIb3N0KHROb2RlKSAmJiAhaXNQaXBlKSB7XG4gICAgY29uc3QgY29tcG9uZW50VmlldyA9IGdldENvbXBvbmVudExWaWV3QnlJbmRleCh0Tm9kZS5pbmRleCwgbFZpZXcpO1xuICAgIHJldHVybiBuZXcgVmlld1JlZiQxKGNvbXBvbmVudFZpZXcsIGNvbXBvbmVudFZpZXcpO1xuICB9IGVsc2UgaWYgKHROb2RlLnR5cGUgJiAoMyB8IDEyIHwgMzIgfCAxMjgpKSB7XG4gICAgY29uc3QgaG9zdENvbXBvbmVudFZpZXcgPSBsVmlld1tERUNMQVJBVElPTl9DT01QT05FTlRfVklFV107XG4gICAgcmV0dXJuIG5ldyBWaWV3UmVmJDEoaG9zdENvbXBvbmVudFZpZXcsIGxWaWV3KTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cbmNsYXNzIFZpZXdSZWYgZXh0ZW5kcyBDaGFuZ2VEZXRlY3RvclJlZiB7fVxuY2xhc3MgRW1iZWRkZWRWaWV3UmVmIGV4dGVuZHMgVmlld1JlZiB7fVxuY2xhc3MgRGVmYXVsdEl0ZXJhYmxlRGlmZmVyRmFjdG9yeSB7XG4gIHN1cHBvcnRzKG9iaikge1xuICAgIHJldHVybiBpc0xpc3RMaWtlSXRlcmFibGUob2JqKTtcbiAgfVxuICBjcmVhdGUodHJhY2tCeUZuKSB7XG4gICAgcmV0dXJuIG5ldyBEZWZhdWx0SXRlcmFibGVEaWZmZXIodHJhY2tCeUZuKTtcbiAgfVxufVxuY29uc3QgdHJhY2tCeUlkZW50aXR5ID0gKGluZGV4LCBpdGVtKSA9PiBpdGVtO1xuY2xhc3MgRGVmYXVsdEl0ZXJhYmxlRGlmZmVyIHtcbiAgbGVuZ3RoID0gMDtcbiAgY29sbGVjdGlvbjtcbiAgX2xpbmtlZFJlY29yZHMgPSBudWxsO1xuICBfdW5saW5rZWRSZWNvcmRzID0gbnVsbDtcbiAgX3ByZXZpb3VzSXRIZWFkID0gbnVsbDtcbiAgX2l0SGVhZCA9IG51bGw7XG4gIF9pdFRhaWwgPSBudWxsO1xuICBfYWRkaXRpb25zSGVhZCA9IG51bGw7XG4gIF9hZGRpdGlvbnNUYWlsID0gbnVsbDtcbiAgX21vdmVzSGVhZCA9IG51bGw7XG4gIF9tb3Zlc1RhaWwgPSBudWxsO1xuICBfcmVtb3ZhbHNIZWFkID0gbnVsbDtcbiAgX3JlbW92YWxzVGFpbCA9IG51bGw7XG4gIF9pZGVudGl0eUNoYW5nZXNIZWFkID0gbnVsbDtcbiAgX2lkZW50aXR5Q2hhbmdlc1RhaWwgPSBudWxsO1xuICBfdHJhY2tCeUZuO1xuICBjb25zdHJ1Y3Rvcih0cmFja0J5Rm4pIHtcbiAgICB0aGlzLl90cmFja0J5Rm4gPSB0cmFja0J5Rm4gfHwgdHJhY2tCeUlkZW50aXR5O1xuICB9XG4gIGZvckVhY2hJdGVtKGZuKSB7XG4gICAgbGV0IHJlY29yZDtcbiAgICBmb3IgKHJlY29yZCA9IHRoaXMuX2l0SGVhZDsgcmVjb3JkICE9PSBudWxsOyByZWNvcmQgPSByZWNvcmQuX25leHQpIHtcbiAgICAgIGZuKHJlY29yZCk7XG4gICAgfVxuICB9XG4gIGZvckVhY2hPcGVyYXRpb24oZm4pIHtcbiAgICBsZXQgbmV4dEl0ID0gdGhpcy5faXRIZWFkO1xuICAgIGxldCBuZXh0UmVtb3ZlID0gdGhpcy5fcmVtb3ZhbHNIZWFkO1xuICAgIGxldCBhZGRSZW1vdmVPZmZzZXQgPSAwO1xuICAgIGxldCBtb3ZlT2Zmc2V0cyA9IG51bGw7XG4gICAgd2hpbGUgKG5leHRJdCB8fCBuZXh0UmVtb3ZlKSB7XG4gICAgICBjb25zdCByZWNvcmQgPSAhbmV4dFJlbW92ZSB8fCBuZXh0SXQgJiYgbmV4dEl0LmN1cnJlbnRJbmRleCA8IGdldFByZXZpb3VzSW5kZXgobmV4dFJlbW92ZSwgYWRkUmVtb3ZlT2Zmc2V0LCBtb3ZlT2Zmc2V0cykgPyBuZXh0SXQgOiBuZXh0UmVtb3ZlO1xuICAgICAgY29uc3QgYWRqUHJldmlvdXNJbmRleCA9IGdldFByZXZpb3VzSW5kZXgocmVjb3JkLCBhZGRSZW1vdmVPZmZzZXQsIG1vdmVPZmZzZXRzKTtcbiAgICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IHJlY29yZC5jdXJyZW50SW5kZXg7XG4gICAgICBpZiAocmVjb3JkID09PSBuZXh0UmVtb3ZlKSB7XG4gICAgICAgIGFkZFJlbW92ZU9mZnNldC0tO1xuICAgICAgICBuZXh0UmVtb3ZlID0gbmV4dFJlbW92ZS5fbmV4dFJlbW92ZWQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXh0SXQgPSBuZXh0SXQuX25leHQ7XG4gICAgICAgIGlmIChyZWNvcmQucHJldmlvdXNJbmRleCA9PSBudWxsKSB7XG4gICAgICAgICAgYWRkUmVtb3ZlT2Zmc2V0Kys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKCFtb3ZlT2Zmc2V0cykgbW92ZU9mZnNldHMgPSBbXTtcbiAgICAgICAgICBjb25zdCBsb2NhbE1vdmVQcmV2aW91c0luZGV4ID0gYWRqUHJldmlvdXNJbmRleCAtIGFkZFJlbW92ZU9mZnNldDtcbiAgICAgICAgICBjb25zdCBsb2NhbEN1cnJlbnRJbmRleCA9IGN1cnJlbnRJbmRleCAtIGFkZFJlbW92ZU9mZnNldDtcbiAgICAgICAgICBpZiAobG9jYWxNb3ZlUHJldmlvdXNJbmRleCAhPSBsb2NhbEN1cnJlbnRJbmRleCkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsb2NhbE1vdmVQcmV2aW91c0luZGV4OyBpKyspIHtcbiAgICAgICAgICAgICAgY29uc3Qgb2Zmc2V0ID0gaSA8IG1vdmVPZmZzZXRzLmxlbmd0aCA/IG1vdmVPZmZzZXRzW2ldIDogbW92ZU9mZnNldHNbaV0gPSAwO1xuICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IG9mZnNldCArIGk7XG4gICAgICAgICAgICAgIGlmIChsb2NhbEN1cnJlbnRJbmRleCA8PSBpbmRleCAmJiBpbmRleCA8IGxvY2FsTW92ZVByZXZpb3VzSW5kZXgpIHtcbiAgICAgICAgICAgICAgICBtb3ZlT2Zmc2V0c1tpXSA9IG9mZnNldCArIDE7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzSW5kZXggPSByZWNvcmQucHJldmlvdXNJbmRleDtcbiAgICAgICAgICAgIG1vdmVPZmZzZXRzW3ByZXZpb3VzSW5kZXhdID0gbG9jYWxDdXJyZW50SW5kZXggLSBsb2NhbE1vdmVQcmV2aW91c0luZGV4O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGFkalByZXZpb3VzSW5kZXggIT09IGN1cnJlbnRJbmRleCkge1xuICAgICAgICBmbihyZWNvcmQsIGFkalByZXZpb3VzSW5kZXgsIGN1cnJlbnRJbmRleCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGZvckVhY2hQcmV2aW91c0l0ZW0oZm4pIHtcbiAgICBsZXQgcmVjb3JkO1xuICAgIGZvciAocmVjb3JkID0gdGhpcy5fcHJldmlvdXNJdEhlYWQ7IHJlY29yZCAhPT0gbnVsbDsgcmVjb3JkID0gcmVjb3JkLl9uZXh0UHJldmlvdXMpIHtcbiAgICAgIGZuKHJlY29yZCk7XG4gICAgfVxuICB9XG4gIGZvckVhY2hBZGRlZEl0ZW0oZm4pIHtcbiAgICBsZXQgcmVjb3JkO1xuICAgIGZvciAocmVjb3JkID0gdGhpcy5fYWRkaXRpb25zSGVhZDsgcmVjb3JkICE9PSBudWxsOyByZWNvcmQgPSByZWNvcmQuX25leHRBZGRlZCkge1xuICAgICAgZm4ocmVjb3JkKTtcbiAgICB9XG4gIH1cbiAgZm9yRWFjaE1vdmVkSXRlbShmbikge1xuICAgIGxldCByZWNvcmQ7XG4gICAgZm9yIChyZWNvcmQgPSB0aGlzLl9tb3Zlc0hlYWQ7IHJlY29yZCAhPT0gbnVsbDsgcmVjb3JkID0gcmVjb3JkLl9uZXh0TW92ZWQpIHtcbiAgICAgIGZuKHJlY29yZCk7XG4gICAgfVxuICB9XG4gIGZvckVhY2hSZW1vdmVkSXRlbShmbikge1xuICAgIGxldCByZWNvcmQ7XG4gICAgZm9yIChyZWNvcmQgPSB0aGlzLl9yZW1vdmFsc0hlYWQ7IHJlY29yZCAhPT0gbnVsbDsgcmVjb3JkID0gcmVjb3JkLl9uZXh0UmVtb3ZlZCkge1xuICAgICAgZm4ocmVjb3JkKTtcbiAgICB9XG4gIH1cbiAgZm9yRWFjaElkZW50aXR5Q2hhbmdlKGZuKSB7XG4gICAgbGV0IHJlY29yZDtcbiAgICBmb3IgKHJlY29yZCA9IHRoaXMuX2lkZW50aXR5Q2hhbmdlc0hlYWQ7IHJlY29yZCAhPT0gbnVsbDsgcmVjb3JkID0gcmVjb3JkLl9uZXh0SWRlbnRpdHlDaGFuZ2UpIHtcbiAgICAgIGZuKHJlY29yZCk7XG4gICAgfVxuICB9XG4gIGRpZmYoY29sbGVjdGlvbikge1xuICAgIGlmIChjb2xsZWN0aW9uID09IG51bGwpIGNvbGxlY3Rpb24gPSBbXTtcbiAgICBpZiAoIWlzTGlzdExpa2VJdGVyYWJsZShjb2xsZWN0aW9uKSkge1xuICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFcnJvcig5MDAsIG5nRGV2TW9kZSAmJiBgRXJyb3IgdHJ5aW5nIHRvIGRpZmYgJyR7c3RyaW5naWZ5KGNvbGxlY3Rpb24pfScuIE9ubHkgYXJyYXlzIGFuZCBpdGVyYWJsZXMgYXJlIGFsbG93ZWRgKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuY2hlY2soY29sbGVjdGlvbikpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cbiAgb25EZXN0cm95KCkge31cbiAgY2hlY2soY29sbGVjdGlvbikge1xuICAgIHRoaXMuX3Jlc2V0KCk7XG4gICAgbGV0IHJlY29yZCA9IHRoaXMuX2l0SGVhZDtcbiAgICBsZXQgbWF5QmVEaXJ0eSA9IGZhbHNlO1xuICAgIGxldCBpbmRleDtcbiAgICBsZXQgaXRlbTtcbiAgICBsZXQgaXRlbVRyYWNrQnk7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoY29sbGVjdGlvbikpIHtcbiAgICAgIHRoaXMubGVuZ3RoID0gY29sbGVjdGlvbi5sZW5ndGg7XG4gICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgaXRlbSA9IGNvbGxlY3Rpb25baW5kZXhdO1xuICAgICAgICBpdGVtVHJhY2tCeSA9IHRoaXMuX3RyYWNrQnlGbihpbmRleCwgaXRlbSk7XG4gICAgICAgIGlmIChyZWNvcmQgPT09IG51bGwgfHwgIU9iamVjdC5pcyhyZWNvcmQudHJhY2tCeUlkLCBpdGVtVHJhY2tCeSkpIHtcbiAgICAgICAgICByZWNvcmQgPSB0aGlzLl9taXNtYXRjaChyZWNvcmQsIGl0ZW0sIGl0ZW1UcmFja0J5LCBpbmRleCk7XG4gICAgICAgICAgbWF5QmVEaXJ0eSA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKG1heUJlRGlydHkpIHtcbiAgICAgICAgICAgIHJlY29yZCA9IHRoaXMuX3ZlcmlmeVJlaW5zZXJ0aW9uKHJlY29yZCwgaXRlbSwgaXRlbVRyYWNrQnksIGluZGV4KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFPYmplY3QuaXMocmVjb3JkLml0ZW0sIGl0ZW0pKSB0aGlzLl9hZGRJZGVudGl0eUNoYW5nZShyZWNvcmQsIGl0ZW0pO1xuICAgICAgICB9XG4gICAgICAgIHJlY29yZCA9IHJlY29yZC5fbmV4dDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaW5kZXggPSAwO1xuICAgICAgaXRlcmF0ZUxpc3RMaWtlKGNvbGxlY3Rpb24sIGl0ZW0gPT4ge1xuICAgICAgICBpdGVtVHJhY2tCeSA9IHRoaXMuX3RyYWNrQnlGbihpbmRleCwgaXRlbSk7XG4gICAgICAgIGlmIChyZWNvcmQgPT09IG51bGwgfHwgIU9iamVjdC5pcyhyZWNvcmQudHJhY2tCeUlkLCBpdGVtVHJhY2tCeSkpIHtcbiAgICAgICAgICByZWNvcmQgPSB0aGlzLl9taXNtYXRjaChyZWNvcmQsIGl0ZW0sIGl0ZW1UcmFja0J5LCBpbmRleCk7XG4gICAgICAgICAgbWF5QmVEaXJ0eSA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKG1heUJlRGlydHkpIHtcbiAgICAgICAgICAgIHJlY29yZCA9IHRoaXMuX3ZlcmlmeVJlaW5zZXJ0aW9uKHJlY29yZCwgaXRlbSwgaXRlbVRyYWNrQnksIGluZGV4KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFPYmplY3QuaXMocmVjb3JkLml0ZW0sIGl0ZW0pKSB0aGlzLl9hZGRJZGVudGl0eUNoYW5nZShyZWNvcmQsIGl0ZW0pO1xuICAgICAgICB9XG4gICAgICAgIHJlY29yZCA9IHJlY29yZC5fbmV4dDtcbiAgICAgICAgaW5kZXgrKztcbiAgICAgIH0pO1xuICAgICAgdGhpcy5sZW5ndGggPSBpbmRleDtcbiAgICB9XG4gICAgdGhpcy5fdHJ1bmNhdGUocmVjb3JkKTtcbiAgICB0aGlzLmNvbGxlY3Rpb24gPSBjb2xsZWN0aW9uO1xuICAgIHJldHVybiB0aGlzLmlzRGlydHk7XG4gIH1cbiAgZ2V0IGlzRGlydHkoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2FkZGl0aW9uc0hlYWQgIT09IG51bGwgfHwgdGhpcy5fbW92ZXNIZWFkICE9PSBudWxsIHx8IHRoaXMuX3JlbW92YWxzSGVhZCAhPT0gbnVsbCB8fCB0aGlzLl9pZGVudGl0eUNoYW5nZXNIZWFkICE9PSBudWxsO1xuICB9XG4gIF9yZXNldCgpIHtcbiAgICBpZiAodGhpcy5pc0RpcnR5KSB7XG4gICAgICBsZXQgcmVjb3JkO1xuICAgICAgZm9yIChyZWNvcmQgPSB0aGlzLl9wcmV2aW91c0l0SGVhZCA9IHRoaXMuX2l0SGVhZDsgcmVjb3JkICE9PSBudWxsOyByZWNvcmQgPSByZWNvcmQuX25leHQpIHtcbiAgICAgICAgcmVjb3JkLl9uZXh0UHJldmlvdXMgPSByZWNvcmQuX25leHQ7XG4gICAgICB9XG4gICAgICBmb3IgKHJlY29yZCA9IHRoaXMuX2FkZGl0aW9uc0hlYWQ7IHJlY29yZCAhPT0gbnVsbDsgcmVjb3JkID0gcmVjb3JkLl9uZXh0QWRkZWQpIHtcbiAgICAgICAgcmVjb3JkLnByZXZpb3VzSW5kZXggPSByZWNvcmQuY3VycmVudEluZGV4O1xuICAgICAgfVxuICAgICAgdGhpcy5fYWRkaXRpb25zSGVhZCA9IHRoaXMuX2FkZGl0aW9uc1RhaWwgPSBudWxsO1xuICAgICAgZm9yIChyZWNvcmQgPSB0aGlzLl9tb3Zlc0hlYWQ7IHJlY29yZCAhPT0gbnVsbDsgcmVjb3JkID0gcmVjb3JkLl9uZXh0TW92ZWQpIHtcbiAgICAgICAgcmVjb3JkLnByZXZpb3VzSW5kZXggPSByZWNvcmQuY3VycmVudEluZGV4O1xuICAgICAgfVxuICAgICAgdGhpcy5fbW92ZXNIZWFkID0gdGhpcy5fbW92ZXNUYWlsID0gbnVsbDtcbiAgICAgIHRoaXMuX3JlbW92YWxzSGVhZCA9IHRoaXMuX3JlbW92YWxzVGFpbCA9IG51bGw7XG4gICAgICB0aGlzLl9pZGVudGl0eUNoYW5nZXNIZWFkID0gdGhpcy5faWRlbnRpdHlDaGFuZ2VzVGFpbCA9IG51bGw7XG4gICAgfVxuICB9XG4gIF9taXNtYXRjaChyZWNvcmQsIGl0ZW0sIGl0ZW1UcmFja0J5LCBpbmRleCkge1xuICAgIGxldCBwcmV2aW91c1JlY29yZDtcbiAgICBpZiAocmVjb3JkID09PSBudWxsKSB7XG4gICAgICBwcmV2aW91c1JlY29yZCA9IHRoaXMuX2l0VGFpbDtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJldmlvdXNSZWNvcmQgPSByZWNvcmQuX3ByZXY7XG4gICAgICB0aGlzLl9yZW1vdmUocmVjb3JkKTtcbiAgICB9XG4gICAgcmVjb3JkID0gdGhpcy5fdW5saW5rZWRSZWNvcmRzID09PSBudWxsID8gbnVsbCA6IHRoaXMuX3VubGlua2VkUmVjb3Jkcy5nZXQoaXRlbVRyYWNrQnksIG51bGwpO1xuICAgIGlmIChyZWNvcmQgIT09IG51bGwpIHtcbiAgICAgIGlmICghT2JqZWN0LmlzKHJlY29yZC5pdGVtLCBpdGVtKSkgdGhpcy5fYWRkSWRlbnRpdHlDaGFuZ2UocmVjb3JkLCBpdGVtKTtcbiAgICAgIHRoaXMuX3JlaW5zZXJ0QWZ0ZXIocmVjb3JkLCBwcmV2aW91c1JlY29yZCwgaW5kZXgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZWNvcmQgPSB0aGlzLl9saW5rZWRSZWNvcmRzID09PSBudWxsID8gbnVsbCA6IHRoaXMuX2xpbmtlZFJlY29yZHMuZ2V0KGl0ZW1UcmFja0J5LCBpbmRleCk7XG4gICAgICBpZiAocmVjb3JkICE9PSBudWxsKSB7XG4gICAgICAgIGlmICghT2JqZWN0LmlzKHJlY29yZC5pdGVtLCBpdGVtKSkgdGhpcy5fYWRkSWRlbnRpdHlDaGFuZ2UocmVjb3JkLCBpdGVtKTtcbiAgICAgICAgdGhpcy5fbW92ZUFmdGVyKHJlY29yZCwgcHJldmlvdXNSZWNvcmQsIGluZGV4KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlY29yZCA9IHRoaXMuX2FkZEFmdGVyKG5ldyBJdGVyYWJsZUNoYW5nZVJlY29yZF8oaXRlbSwgaXRlbVRyYWNrQnkpLCBwcmV2aW91c1JlY29yZCwgaW5kZXgpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVjb3JkO1xuICB9XG4gIF92ZXJpZnlSZWluc2VydGlvbihyZWNvcmQsIGl0ZW0sIGl0ZW1UcmFja0J5LCBpbmRleCkge1xuICAgIGxldCByZWluc2VydFJlY29yZCA9IHRoaXMuX3VubGlua2VkUmVjb3JkcyA9PT0gbnVsbCA/IG51bGwgOiB0aGlzLl91bmxpbmtlZFJlY29yZHMuZ2V0KGl0ZW1UcmFja0J5LCBudWxsKTtcbiAgICBpZiAocmVpbnNlcnRSZWNvcmQgIT09IG51bGwpIHtcbiAgICAgIHJlY29yZCA9IHRoaXMuX3JlaW5zZXJ0QWZ0ZXIocmVpbnNlcnRSZWNvcmQsIHJlY29yZC5fcHJldiwgaW5kZXgpO1xuICAgIH0gZWxzZSBpZiAocmVjb3JkLmN1cnJlbnRJbmRleCAhPSBpbmRleCkge1xuICAgICAgcmVjb3JkLmN1cnJlbnRJbmRleCA9IGluZGV4O1xuICAgICAgdGhpcy5fYWRkVG9Nb3ZlcyhyZWNvcmQsIGluZGV4KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlY29yZDtcbiAgfVxuICBfdHJ1bmNhdGUocmVjb3JkKSB7XG4gICAgd2hpbGUgKHJlY29yZCAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgbmV4dFJlY29yZCA9IHJlY29yZC5fbmV4dDtcbiAgICAgIHRoaXMuX2FkZFRvUmVtb3ZhbHModGhpcy5fdW5saW5rKHJlY29yZCkpO1xuICAgICAgcmVjb3JkID0gbmV4dFJlY29yZDtcbiAgICB9XG4gICAgaWYgKHRoaXMuX3VubGlua2VkUmVjb3JkcyAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5fdW5saW5rZWRSZWNvcmRzLmNsZWFyKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLl9hZGRpdGlvbnNUYWlsICE9PSBudWxsKSB7XG4gICAgICB0aGlzLl9hZGRpdGlvbnNUYWlsLl9uZXh0QWRkZWQgPSBudWxsO1xuICAgIH1cbiAgICBpZiAodGhpcy5fbW92ZXNUYWlsICE9PSBudWxsKSB7XG4gICAgICB0aGlzLl9tb3Zlc1RhaWwuX25leHRNb3ZlZCA9IG51bGw7XG4gICAgfVxuICAgIGlmICh0aGlzLl9pdFRhaWwgIT09IG51bGwpIHtcbiAgICAgIHRoaXMuX2l0VGFpbC5fbmV4dCA9IG51bGw7XG4gICAgfVxuICAgIGlmICh0aGlzLl9yZW1vdmFsc1RhaWwgIT09IG51bGwpIHtcbiAgICAgIHRoaXMuX3JlbW92YWxzVGFpbC5fbmV4dFJlbW92ZWQgPSBudWxsO1xuICAgIH1cbiAgICBpZiAodGhpcy5faWRlbnRpdHlDaGFuZ2VzVGFpbCAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5faWRlbnRpdHlDaGFuZ2VzVGFpbC5fbmV4dElkZW50aXR5Q2hhbmdlID0gbnVsbDtcbiAgICB9XG4gIH1cbiAgX3JlaW5zZXJ0QWZ0ZXIocmVjb3JkLCBwcmV2UmVjb3JkLCBpbmRleCkge1xuICAgIGlmICh0aGlzLl91bmxpbmtlZFJlY29yZHMgIT09IG51bGwpIHtcbiAgICAgIHRoaXMuX3VubGlua2VkUmVjb3Jkcy5yZW1vdmUocmVjb3JkKTtcbiAgICB9XG4gICAgY29uc3QgcHJldiA9IHJlY29yZC5fcHJldlJlbW92ZWQ7XG4gICAgY29uc3QgbmV4dCA9IHJlY29yZC5fbmV4dFJlbW92ZWQ7XG4gICAgaWYgKHByZXYgPT09IG51bGwpIHtcbiAgICAgIHRoaXMuX3JlbW92YWxzSGVhZCA9IG5leHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHByZXYuX25leHRSZW1vdmVkID0gbmV4dDtcbiAgICB9XG4gICAgaWYgKG5leHQgPT09IG51bGwpIHtcbiAgICAgIHRoaXMuX3JlbW92YWxzVGFpbCA9IHByZXY7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5leHQuX3ByZXZSZW1vdmVkID0gcHJldjtcbiAgICB9XG4gICAgdGhpcy5faW5zZXJ0QWZ0ZXIocmVjb3JkLCBwcmV2UmVjb3JkLCBpbmRleCk7XG4gICAgdGhpcy5fYWRkVG9Nb3ZlcyhyZWNvcmQsIGluZGV4KTtcbiAgICByZXR1cm4gcmVjb3JkO1xuICB9XG4gIF9tb3ZlQWZ0ZXIocmVjb3JkLCBwcmV2UmVjb3JkLCBpbmRleCkge1xuICAgIHRoaXMuX3VubGluayhyZWNvcmQpO1xuICAgIHRoaXMuX2luc2VydEFmdGVyKHJlY29yZCwgcHJldlJlY29yZCwgaW5kZXgpO1xuICAgIHRoaXMuX2FkZFRvTW92ZXMocmVjb3JkLCBpbmRleCk7XG4gICAgcmV0dXJuIHJlY29yZDtcbiAgfVxuICBfYWRkQWZ0ZXIocmVjb3JkLCBwcmV2UmVjb3JkLCBpbmRleCkge1xuICAgIHRoaXMuX2luc2VydEFmdGVyKHJlY29yZCwgcHJldlJlY29yZCwgaW5kZXgpO1xuICAgIGlmICh0aGlzLl9hZGRpdGlvbnNUYWlsID09PSBudWxsKSB7XG4gICAgICB0aGlzLl9hZGRpdGlvbnNUYWlsID0gdGhpcy5fYWRkaXRpb25zSGVhZCA9IHJlY29yZDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fYWRkaXRpb25zVGFpbCA9IHRoaXMuX2FkZGl0aW9uc1RhaWwuX25leHRBZGRlZCA9IHJlY29yZDtcbiAgICB9XG4gICAgcmV0dXJuIHJlY29yZDtcbiAgfVxuICBfaW5zZXJ0QWZ0ZXIocmVjb3JkLCBwcmV2UmVjb3JkLCBpbmRleCkge1xuICAgIGNvbnN0IG5leHQgPSBwcmV2UmVjb3JkID09PSBudWxsID8gdGhpcy5faXRIZWFkIDogcHJldlJlY29yZC5fbmV4dDtcbiAgICByZWNvcmQuX25leHQgPSBuZXh0O1xuICAgIHJlY29yZC5fcHJldiA9IHByZXZSZWNvcmQ7XG4gICAgaWYgKG5leHQgPT09IG51bGwpIHtcbiAgICAgIHRoaXMuX2l0VGFpbCA9IHJlY29yZDtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV4dC5fcHJldiA9IHJlY29yZDtcbiAgICB9XG4gICAgaWYgKHByZXZSZWNvcmQgPT09IG51bGwpIHtcbiAgICAgIHRoaXMuX2l0SGVhZCA9IHJlY29yZDtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJldlJlY29yZC5fbmV4dCA9IHJlY29yZDtcbiAgICB9XG4gICAgaWYgKHRoaXMuX2xpbmtlZFJlY29yZHMgPT09IG51bGwpIHtcbiAgICAgIHRoaXMuX2xpbmtlZFJlY29yZHMgPSBuZXcgX0R1cGxpY2F0ZU1hcCgpO1xuICAgIH1cbiAgICB0aGlzLl9saW5rZWRSZWNvcmRzLnB1dChyZWNvcmQpO1xuICAgIHJlY29yZC5jdXJyZW50SW5kZXggPSBpbmRleDtcbiAgICByZXR1cm4gcmVjb3JkO1xuICB9XG4gIF9yZW1vdmUocmVjb3JkKSB7XG4gICAgcmV0dXJuIHRoaXMuX2FkZFRvUmVtb3ZhbHModGhpcy5fdW5saW5rKHJlY29yZCkpO1xuICB9XG4gIF91bmxpbmsocmVjb3JkKSB7XG4gICAgaWYgKHRoaXMuX2xpbmtlZFJlY29yZHMgIT09IG51bGwpIHtcbiAgICAgIHRoaXMuX2xpbmtlZFJlY29yZHMucmVtb3ZlKHJlY29yZCk7XG4gICAgfVxuICAgIGNvbnN0IHByZXYgPSByZWNvcmQuX3ByZXY7XG4gICAgY29uc3QgbmV4dCA9IHJlY29yZC5fbmV4dDtcbiAgICBpZiAocHJldiA9PT0gbnVsbCkge1xuICAgICAgdGhpcy5faXRIZWFkID0gbmV4dDtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJldi5fbmV4dCA9IG5leHQ7XG4gICAgfVxuICAgIGlmIChuZXh0ID09PSBudWxsKSB7XG4gICAgICB0aGlzLl9pdFRhaWwgPSBwcmV2O1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXh0Ll9wcmV2ID0gcHJldjtcbiAgICB9XG4gICAgcmV0dXJuIHJlY29yZDtcbiAgfVxuICBfYWRkVG9Nb3ZlcyhyZWNvcmQsIHRvSW5kZXgpIHtcbiAgICBpZiAocmVjb3JkLnByZXZpb3VzSW5kZXggPT09IHRvSW5kZXgpIHtcbiAgICAgIHJldHVybiByZWNvcmQ7XG4gICAgfVxuICAgIGlmICh0aGlzLl9tb3Zlc1RhaWwgPT09IG51bGwpIHtcbiAgICAgIHRoaXMuX21vdmVzVGFpbCA9IHRoaXMuX21vdmVzSGVhZCA9IHJlY29yZDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fbW92ZXNUYWlsID0gdGhpcy5fbW92ZXNUYWlsLl9uZXh0TW92ZWQgPSByZWNvcmQ7XG4gICAgfVxuICAgIHJldHVybiByZWNvcmQ7XG4gIH1cbiAgX2FkZFRvUmVtb3ZhbHMocmVjb3JkKSB7XG4gICAgaWYgKHRoaXMuX3VubGlua2VkUmVjb3JkcyA9PT0gbnVsbCkge1xuICAgICAgdGhpcy5fdW5saW5rZWRSZWNvcmRzID0gbmV3IF9EdXBsaWNhdGVNYXAoKTtcbiAgICB9XG4gICAgdGhpcy5fdW5saW5rZWRSZWNvcmRzLnB1dChyZWNvcmQpO1xuICAgIHJlY29yZC5jdXJyZW50SW5kZXggPSBudWxsO1xuICAgIHJlY29yZC5fbmV4dFJlbW92ZWQgPSBudWxsO1xuICAgIGlmICh0aGlzLl9yZW1vdmFsc1RhaWwgPT09IG51bGwpIHtcbiAgICAgIHRoaXMuX3JlbW92YWxzVGFpbCA9IHRoaXMuX3JlbW92YWxzSGVhZCA9IHJlY29yZDtcbiAgICAgIHJlY29yZC5fcHJldlJlbW92ZWQgPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICByZWNvcmQuX3ByZXZSZW1vdmVkID0gdGhpcy5fcmVtb3ZhbHNUYWlsO1xuICAgICAgdGhpcy5fcmVtb3ZhbHNUYWlsID0gdGhpcy5fcmVtb3ZhbHNUYWlsLl9uZXh0UmVtb3ZlZCA9IHJlY29yZDtcbiAgICB9XG4gICAgcmV0dXJuIHJlY29yZDtcbiAgfVxuICBfYWRkSWRlbnRpdHlDaGFuZ2UocmVjb3JkLCBpdGVtKSB7XG4gICAgcmVjb3JkLml0ZW0gPSBpdGVtO1xuICAgIGlmICh0aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsID09PSBudWxsKSB7XG4gICAgICB0aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsID0gdGhpcy5faWRlbnRpdHlDaGFuZ2VzSGVhZCA9IHJlY29yZDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5faWRlbnRpdHlDaGFuZ2VzVGFpbCA9IHRoaXMuX2lkZW50aXR5Q2hhbmdlc1RhaWwuX25leHRJZGVudGl0eUNoYW5nZSA9IHJlY29yZDtcbiAgICB9XG4gICAgcmV0dXJuIHJlY29yZDtcbiAgfVxufVxuY2xhc3MgSXRlcmFibGVDaGFuZ2VSZWNvcmRfIHtcbiAgaXRlbTtcbiAgdHJhY2tCeUlkO1xuICBjdXJyZW50SW5kZXggPSBudWxsO1xuICBwcmV2aW91c0luZGV4ID0gbnVsbDtcbiAgX25leHRQcmV2aW91cyA9IG51bGw7XG4gIF9wcmV2ID0gbnVsbDtcbiAgX25leHQgPSBudWxsO1xuICBfcHJldkR1cCA9IG51bGw7XG4gIF9uZXh0RHVwID0gbnVsbDtcbiAgX3ByZXZSZW1vdmVkID0gbnVsbDtcbiAgX25leHRSZW1vdmVkID0gbnVsbDtcbiAgX25leHRBZGRlZCA9IG51bGw7XG4gIF9uZXh0TW92ZWQgPSBudWxsO1xuICBfbmV4dElkZW50aXR5Q2hhbmdlID0gbnVsbDtcbiAgY29uc3RydWN0b3IoaXRlbSwgdHJhY2tCeUlkKSB7XG4gICAgdGhpcy5pdGVtID0gaXRlbTtcbiAgICB0aGlzLnRyYWNrQnlJZCA9IHRyYWNrQnlJZDtcbiAgfVxufVxuY2xhc3MgX0R1cGxpY2F0ZUl0ZW1SZWNvcmRMaXN0IHtcbiAgX2hlYWQgPSBudWxsO1xuICBfdGFpbCA9IG51bGw7XG4gIGFkZChyZWNvcmQpIHtcbiAgICBpZiAodGhpcy5faGVhZCA9PT0gbnVsbCkge1xuICAgICAgdGhpcy5faGVhZCA9IHRoaXMuX3RhaWwgPSByZWNvcmQ7XG4gICAgICByZWNvcmQuX25leHREdXAgPSBudWxsO1xuICAgICAgcmVjb3JkLl9wcmV2RHVwID0gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fdGFpbC5fbmV4dER1cCA9IHJlY29yZDtcbiAgICAgIHJlY29yZC5fcHJldkR1cCA9IHRoaXMuX3RhaWw7XG4gICAgICByZWNvcmQuX25leHREdXAgPSBudWxsO1xuICAgICAgdGhpcy5fdGFpbCA9IHJlY29yZDtcbiAgICB9XG4gIH1cbiAgZ2V0KHRyYWNrQnlJZCwgYXRPckFmdGVySW5kZXgpIHtcbiAgICBsZXQgcmVjb3JkO1xuICAgIGZvciAocmVjb3JkID0gdGhpcy5faGVhZDsgcmVjb3JkICE9PSBudWxsOyByZWNvcmQgPSByZWNvcmQuX25leHREdXApIHtcbiAgICAgIGlmICgoYXRPckFmdGVySW5kZXggPT09IG51bGwgfHwgYXRPckFmdGVySW5kZXggPD0gcmVjb3JkLmN1cnJlbnRJbmRleCkgJiYgT2JqZWN0LmlzKHJlY29yZC50cmFja0J5SWQsIHRyYWNrQnlJZCkpIHtcbiAgICAgICAgcmV0dXJuIHJlY29yZDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmVtb3ZlKHJlY29yZCkge1xuICAgIGNvbnN0IHByZXYgPSByZWNvcmQuX3ByZXZEdXA7XG4gICAgY29uc3QgbmV4dCA9IHJlY29yZC5fbmV4dER1cDtcbiAgICBpZiAocHJldiA9PT0gbnVsbCkge1xuICAgICAgdGhpcy5faGVhZCA9IG5leHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHByZXYuX25leHREdXAgPSBuZXh0O1xuICAgIH1cbiAgICBpZiAobmV4dCA9PT0gbnVsbCkge1xuICAgICAgdGhpcy5fdGFpbCA9IHByZXY7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5leHQuX3ByZXZEdXAgPSBwcmV2O1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5faGVhZCA9PT0gbnVsbDtcbiAgfVxufVxuY2xhc3MgX0R1cGxpY2F0ZU1hcCB7XG4gIG1hcCA9IC8qI19fUFVSRV9fKi9uZXcgTWFwKCk7XG4gIHB1dChyZWNvcmQpIHtcbiAgICBjb25zdCBrZXkgPSByZWNvcmQudHJhY2tCeUlkO1xuICAgIGxldCBkdXBsaWNhdGVzID0gdGhpcy5tYXAuZ2V0KGtleSk7XG4gICAgaWYgKCFkdXBsaWNhdGVzKSB7XG4gICAgICBkdXBsaWNhdGVzID0gbmV3IF9EdXBsaWNhdGVJdGVtUmVjb3JkTGlzdCgpO1xuICAgICAgdGhpcy5tYXAuc2V0KGtleSwgZHVwbGljYXRlcyk7XG4gICAgfVxuICAgIGR1cGxpY2F0ZXMuYWRkKHJlY29yZCk7XG4gIH1cbiAgZ2V0KHRyYWNrQnlJZCwgYXRPckFmdGVySW5kZXgpIHtcbiAgICBjb25zdCBrZXkgPSB0cmFja0J5SWQ7XG4gICAgY29uc3QgcmVjb3JkTGlzdCA9IHRoaXMubWFwLmdldChrZXkpO1xuICAgIHJldHVybiByZWNvcmRMaXN0ID8gcmVjb3JkTGlzdC5nZXQodHJhY2tCeUlkLCBhdE9yQWZ0ZXJJbmRleCkgOiBudWxsO1xuICB9XG4gIHJlbW92ZShyZWNvcmQpIHtcbiAgICBjb25zdCBrZXkgPSByZWNvcmQudHJhY2tCeUlkO1xuICAgIGNvbnN0IHJlY29yZExpc3QgPSB0aGlzLm1hcC5nZXQoa2V5KTtcbiAgICBpZiAocmVjb3JkTGlzdC5yZW1vdmUocmVjb3JkKSkge1xuICAgICAgdGhpcy5tYXAuZGVsZXRlKGtleSk7XG4gICAgfVxuICAgIHJldHVybiByZWNvcmQ7XG4gIH1cbiAgZ2V0IGlzRW1wdHkoKSB7XG4gICAgcmV0dXJuIHRoaXMubWFwLnNpemUgPT09IDA7XG4gIH1cbiAgY2xlYXIoKSB7XG4gICAgdGhpcy5tYXAuY2xlYXIoKTtcbiAgfVxufVxuZnVuY3Rpb24gZ2V0UHJldmlvdXNJbmRleChpdGVtLCBhZGRSZW1vdmVPZmZzZXQsIG1vdmVPZmZzZXRzKSB7XG4gIGNvbnN0IHByZXZpb3VzSW5kZXggPSBpdGVtLnByZXZpb3VzSW5kZXg7XG4gIGlmIChwcmV2aW91c0luZGV4ID09PSBudWxsKSByZXR1cm4gcHJldmlvdXNJbmRleDtcbiAgbGV0IG1vdmVPZmZzZXQgPSAwO1xuICBpZiAobW92ZU9mZnNldHMgJiYgcHJldmlvdXNJbmRleCA8IG1vdmVPZmZzZXRzLmxlbmd0aCkge1xuICAgIG1vdmVPZmZzZXQgPSBtb3ZlT2Zmc2V0c1twcmV2aW91c0luZGV4XTtcbiAgfVxuICByZXR1cm4gcHJldmlvdXNJbmRleCArIGFkZFJlbW92ZU9mZnNldCArIG1vdmVPZmZzZXQ7XG59XG5jbGFzcyBEZWZhdWx0S2V5VmFsdWVEaWZmZXJGYWN0b3J5IHtcbiAgc3VwcG9ydHMob2JqKSB7XG4gICAgcmV0dXJuIG9iaiBpbnN0YW5jZW9mIE1hcCB8fCBpc0pzT2JqZWN0KG9iaik7XG4gIH1cbiAgY3JlYXRlKCkge1xuICAgIHJldHVybiBuZXcgRGVmYXVsdEtleVZhbHVlRGlmZmVyKCk7XG4gIH1cbn1cbmNsYXNzIERlZmF1bHRLZXlWYWx1ZURpZmZlciB7XG4gIF9yZWNvcmRzID0gLyojX19QVVJFX18qL25ldyBNYXAoKTtcbiAgX21hcEhlYWQgPSBudWxsO1xuICBfYXBwZW5kQWZ0ZXIgPSBudWxsO1xuICBfcHJldmlvdXNNYXBIZWFkID0gbnVsbDtcbiAgX2NoYW5nZXNIZWFkID0gbnVsbDtcbiAgX2NoYW5nZXNUYWlsID0gbnVsbDtcbiAgX2FkZGl0aW9uc0hlYWQgPSBudWxsO1xuICBfYWRkaXRpb25zVGFpbCA9IG51bGw7XG4gIF9yZW1vdmFsc0hlYWQgPSBudWxsO1xuICBnZXQgaXNEaXJ0eSgpIHtcbiAgICByZXR1cm4gdGhpcy5fYWRkaXRpb25zSGVhZCAhPT0gbnVsbCB8fCB0aGlzLl9jaGFuZ2VzSGVhZCAhPT0gbnVsbCB8fCB0aGlzLl9yZW1vdmFsc0hlYWQgIT09IG51bGw7XG4gIH1cbiAgZm9yRWFjaEl0ZW0oZm4pIHtcbiAgICBsZXQgcmVjb3JkO1xuICAgIGZvciAocmVjb3JkID0gdGhpcy5fbWFwSGVhZDsgcmVjb3JkICE9PSBudWxsOyByZWNvcmQgPSByZWNvcmQuX25leHQpIHtcbiAgICAgIGZuKHJlY29yZCk7XG4gICAgfVxuICB9XG4gIGZvckVhY2hQcmV2aW91c0l0ZW0oZm4pIHtcbiAgICBsZXQgcmVjb3JkO1xuICAgIGZvciAocmVjb3JkID0gdGhpcy5fcHJldmlvdXNNYXBIZWFkOyByZWNvcmQgIT09IG51bGw7IHJlY29yZCA9IHJlY29yZC5fbmV4dFByZXZpb3VzKSB7XG4gICAgICBmbihyZWNvcmQpO1xuICAgIH1cbiAgfVxuICBmb3JFYWNoQ2hhbmdlZEl0ZW0oZm4pIHtcbiAgICBsZXQgcmVjb3JkO1xuICAgIGZvciAocmVjb3JkID0gdGhpcy5fY2hhbmdlc0hlYWQ7IHJlY29yZCAhPT0gbnVsbDsgcmVjb3JkID0gcmVjb3JkLl9uZXh0Q2hhbmdlZCkge1xuICAgICAgZm4ocmVjb3JkKTtcbiAgICB9XG4gIH1cbiAgZm9yRWFjaEFkZGVkSXRlbShmbikge1xuICAgIGxldCByZWNvcmQ7XG4gICAgZm9yIChyZWNvcmQgPSB0aGlzLl9hZGRpdGlvbnNIZWFkOyByZWNvcmQgIT09IG51bGw7IHJlY29yZCA9IHJlY29yZC5fbmV4dEFkZGVkKSB7XG4gICAgICBmbihyZWNvcmQpO1xuICAgIH1cbiAgfVxuICBmb3JFYWNoUmVtb3ZlZEl0ZW0oZm4pIHtcbiAgICBsZXQgcmVjb3JkO1xuICAgIGZvciAocmVjb3JkID0gdGhpcy5fcmVtb3ZhbHNIZWFkOyByZWNvcmQgIT09IG51bGw7IHJlY29yZCA9IHJlY29yZC5fbmV4dFJlbW92ZWQpIHtcbiAgICAgIGZuKHJlY29yZCk7XG4gICAgfVxuICB9XG4gIGRpZmYobWFwKSB7XG4gICAgaWYgKCFtYXApIHtcbiAgICAgIG1hcCA9IG5ldyBNYXAoKTtcbiAgICB9IGVsc2UgaWYgKCEobWFwIGluc3RhbmNlb2YgTWFwIHx8IGlzSnNPYmplY3QobWFwKSkpIHtcbiAgICAgIHRocm93IG5ldyBSdW50aW1lRXJyb3IoOTAwLCBuZ0Rldk1vZGUgJiYgYEVycm9yIHRyeWluZyB0byBkaWZmICcke3N0cmluZ2lmeShtYXApfScuIE9ubHkgbWFwcyBhbmQgb2JqZWN0cyBhcmUgYWxsb3dlZGApO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jaGVjayhtYXApID8gdGhpcyA6IG51bGw7XG4gIH1cbiAgY2hlY2sobWFwKSB7XG4gICAgdGhpcy5fcmVzZXQoKTtcbiAgICBsZXQgaW5zZXJ0QmVmb3JlID0gdGhpcy5fbWFwSGVhZDtcbiAgICB0aGlzLl9hcHBlbmRBZnRlciA9IG51bGw7XG4gICAgdGhpcy5fZm9yRWFjaChtYXAsICh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICBpZiAoaW5zZXJ0QmVmb3JlICYmIGluc2VydEJlZm9yZS5rZXkgPT09IGtleSkge1xuICAgICAgICB0aGlzLl9tYXliZUFkZFRvQ2hhbmdlcyhpbnNlcnRCZWZvcmUsIHZhbHVlKTtcbiAgICAgICAgdGhpcy5fYXBwZW5kQWZ0ZXIgPSBpbnNlcnRCZWZvcmU7XG4gICAgICAgIGluc2VydEJlZm9yZSA9IGluc2VydEJlZm9yZS5fbmV4dDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHJlY29yZCA9IHRoaXMuX2dldE9yQ3JlYXRlUmVjb3JkRm9yS2V5KGtleSwgdmFsdWUpO1xuICAgICAgICBpbnNlcnRCZWZvcmUgPSB0aGlzLl9pbnNlcnRCZWZvcmVPckFwcGVuZChpbnNlcnRCZWZvcmUsIHJlY29yZCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKGluc2VydEJlZm9yZSkge1xuICAgICAgaWYgKGluc2VydEJlZm9yZS5fcHJldikge1xuICAgICAgICBpbnNlcnRCZWZvcmUuX3ByZXYuX25leHQgPSBudWxsO1xuICAgICAgfVxuICAgICAgdGhpcy5fcmVtb3ZhbHNIZWFkID0gaW5zZXJ0QmVmb3JlO1xuICAgICAgZm9yIChsZXQgcmVjb3JkID0gaW5zZXJ0QmVmb3JlOyByZWNvcmQgIT09IG51bGw7IHJlY29yZCA9IHJlY29yZC5fbmV4dFJlbW92ZWQpIHtcbiAgICAgICAgaWYgKHJlY29yZCA9PT0gdGhpcy5fbWFwSGVhZCkge1xuICAgICAgICAgIHRoaXMuX21hcEhlYWQgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3JlY29yZHMuZGVsZXRlKHJlY29yZC5rZXkpO1xuICAgICAgICByZWNvcmQuX25leHRSZW1vdmVkID0gcmVjb3JkLl9uZXh0O1xuICAgICAgICByZWNvcmQucHJldmlvdXNWYWx1ZSA9IHJlY29yZC5jdXJyZW50VmFsdWU7XG4gICAgICAgIHJlY29yZC5jdXJyZW50VmFsdWUgPSBudWxsO1xuICAgICAgICByZWNvcmQuX3ByZXYgPSBudWxsO1xuICAgICAgICByZWNvcmQuX25leHQgPSBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy5fY2hhbmdlc1RhaWwpIHRoaXMuX2NoYW5nZXNUYWlsLl9uZXh0Q2hhbmdlZCA9IG51bGw7XG4gICAgaWYgKHRoaXMuX2FkZGl0aW9uc1RhaWwpIHRoaXMuX2FkZGl0aW9uc1RhaWwuX25leHRBZGRlZCA9IG51bGw7XG4gICAgcmV0dXJuIHRoaXMuaXNEaXJ0eTtcbiAgfVxuICBfaW5zZXJ0QmVmb3JlT3JBcHBlbmQoYmVmb3JlLCByZWNvcmQpIHtcbiAgICBpZiAoYmVmb3JlKSB7XG4gICAgICBjb25zdCBwcmV2ID0gYmVmb3JlLl9wcmV2O1xuICAgICAgcmVjb3JkLl9uZXh0ID0gYmVmb3JlO1xuICAgICAgcmVjb3JkLl9wcmV2ID0gcHJldjtcbiAgICAgIGJlZm9yZS5fcHJldiA9IHJlY29yZDtcbiAgICAgIGlmIChwcmV2KSB7XG4gICAgICAgIHByZXYuX25leHQgPSByZWNvcmQ7XG4gICAgICB9XG4gICAgICBpZiAoYmVmb3JlID09PSB0aGlzLl9tYXBIZWFkKSB7XG4gICAgICAgIHRoaXMuX21hcEhlYWQgPSByZWNvcmQ7XG4gICAgICB9XG4gICAgICB0aGlzLl9hcHBlbmRBZnRlciA9IGJlZm9yZTtcbiAgICAgIHJldHVybiBiZWZvcmU7XG4gICAgfVxuICAgIGlmICh0aGlzLl9hcHBlbmRBZnRlcikge1xuICAgICAgdGhpcy5fYXBwZW5kQWZ0ZXIuX25leHQgPSByZWNvcmQ7XG4gICAgICByZWNvcmQuX3ByZXYgPSB0aGlzLl9hcHBlbmRBZnRlcjtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fbWFwSGVhZCA9IHJlY29yZDtcbiAgICB9XG4gICAgdGhpcy5fYXBwZW5kQWZ0ZXIgPSByZWNvcmQ7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgX2dldE9yQ3JlYXRlUmVjb3JkRm9yS2V5KGtleSwgdmFsdWUpIHtcbiAgICBpZiAodGhpcy5fcmVjb3Jkcy5oYXMoa2V5KSkge1xuICAgICAgY29uc3QgcmVjb3JkID0gdGhpcy5fcmVjb3Jkcy5nZXQoa2V5KTtcbiAgICAgIHRoaXMuX21heWJlQWRkVG9DaGFuZ2VzKHJlY29yZCwgdmFsdWUpO1xuICAgICAgY29uc3QgcHJldiA9IHJlY29yZC5fcHJldjtcbiAgICAgIGNvbnN0IG5leHQgPSByZWNvcmQuX25leHQ7XG4gICAgICBpZiAocHJldikge1xuICAgICAgICBwcmV2Ll9uZXh0ID0gbmV4dDtcbiAgICAgIH1cbiAgICAgIGlmIChuZXh0KSB7XG4gICAgICAgIG5leHQuX3ByZXYgPSBwcmV2O1xuICAgICAgfVxuICAgICAgcmVjb3JkLl9uZXh0ID0gbnVsbDtcbiAgICAgIHJlY29yZC5fcHJldiA9IG51bGw7XG4gICAgICByZXR1cm4gcmVjb3JkO1xuICAgIH1cbiAgICBjb25zdCByZWNvcmQgPSBuZXcgS2V5VmFsdWVDaGFuZ2VSZWNvcmRfKGtleSk7XG4gICAgdGhpcy5fcmVjb3Jkcy5zZXQoa2V5LCByZWNvcmQpO1xuICAgIHJlY29yZC5jdXJyZW50VmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLl9hZGRUb0FkZGl0aW9ucyhyZWNvcmQpO1xuICAgIHJldHVybiByZWNvcmQ7XG4gIH1cbiAgX3Jlc2V0KCkge1xuICAgIGlmICh0aGlzLmlzRGlydHkpIHtcbiAgICAgIGxldCByZWNvcmQ7XG4gICAgICB0aGlzLl9wcmV2aW91c01hcEhlYWQgPSB0aGlzLl9tYXBIZWFkO1xuICAgICAgZm9yIChyZWNvcmQgPSB0aGlzLl9wcmV2aW91c01hcEhlYWQ7IHJlY29yZCAhPT0gbnVsbDsgcmVjb3JkID0gcmVjb3JkLl9uZXh0KSB7XG4gICAgICAgIHJlY29yZC5fbmV4dFByZXZpb3VzID0gcmVjb3JkLl9uZXh0O1xuICAgICAgfVxuICAgICAgZm9yIChyZWNvcmQgPSB0aGlzLl9jaGFuZ2VzSGVhZDsgcmVjb3JkICE9PSBudWxsOyByZWNvcmQgPSByZWNvcmQuX25leHRDaGFuZ2VkKSB7XG4gICAgICAgIHJlY29yZC5wcmV2aW91c1ZhbHVlID0gcmVjb3JkLmN1cnJlbnRWYWx1ZTtcbiAgICAgIH1cbiAgICAgIGZvciAocmVjb3JkID0gdGhpcy5fYWRkaXRpb25zSGVhZDsgcmVjb3JkICE9IG51bGw7IHJlY29yZCA9IHJlY29yZC5fbmV4dEFkZGVkKSB7XG4gICAgICAgIHJlY29yZC5wcmV2aW91c1ZhbHVlID0gcmVjb3JkLmN1cnJlbnRWYWx1ZTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2NoYW5nZXNIZWFkID0gdGhpcy5fY2hhbmdlc1RhaWwgPSBudWxsO1xuICAgICAgdGhpcy5fYWRkaXRpb25zSGVhZCA9IHRoaXMuX2FkZGl0aW9uc1RhaWwgPSBudWxsO1xuICAgICAgdGhpcy5fcmVtb3ZhbHNIZWFkID0gbnVsbDtcbiAgICB9XG4gIH1cbiAgX21heWJlQWRkVG9DaGFuZ2VzKHJlY29yZCwgbmV3VmFsdWUpIHtcbiAgICBpZiAoIU9iamVjdC5pcyhuZXdWYWx1ZSwgcmVjb3JkLmN1cnJlbnRWYWx1ZSkpIHtcbiAgICAgIHJlY29yZC5wcmV2aW91c1ZhbHVlID0gcmVjb3JkLmN1cnJlbnRWYWx1ZTtcbiAgICAgIHJlY29yZC5jdXJyZW50VmFsdWUgPSBuZXdWYWx1ZTtcbiAgICAgIHRoaXMuX2FkZFRvQ2hhbmdlcyhyZWNvcmQpO1xuICAgIH1cbiAgfVxuICBfYWRkVG9BZGRpdGlvbnMocmVjb3JkKSB7XG4gICAgaWYgKHRoaXMuX2FkZGl0aW9uc0hlYWQgPT09IG51bGwpIHtcbiAgICAgIHRoaXMuX2FkZGl0aW9uc0hlYWQgPSB0aGlzLl9hZGRpdGlvbnNUYWlsID0gcmVjb3JkO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9hZGRpdGlvbnNUYWlsLl9uZXh0QWRkZWQgPSByZWNvcmQ7XG4gICAgICB0aGlzLl9hZGRpdGlvbnNUYWlsID0gcmVjb3JkO1xuICAgIH1cbiAgfVxuICBfYWRkVG9DaGFuZ2VzKHJlY29yZCkge1xuICAgIGlmICh0aGlzLl9jaGFuZ2VzSGVhZCA9PT0gbnVsbCkge1xuICAgICAgdGhpcy5fY2hhbmdlc0hlYWQgPSB0aGlzLl9jaGFuZ2VzVGFpbCA9IHJlY29yZDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fY2hhbmdlc1RhaWwuX25leHRDaGFuZ2VkID0gcmVjb3JkO1xuICAgICAgdGhpcy5fY2hhbmdlc1RhaWwgPSByZWNvcmQ7XG4gICAgfVxuICB9XG4gIF9mb3JFYWNoKG9iaiwgZm4pIHtcbiAgICBpZiAob2JqIGluc3RhbmNlb2YgTWFwKSB7XG4gICAgICBvYmouZm9yRWFjaChmbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIE9iamVjdC5rZXlzKG9iaikuZm9yRWFjaChrID0+IGZuKG9ialtrXSwgaykpO1xuICAgIH1cbiAgfVxufVxuY2xhc3MgS2V5VmFsdWVDaGFuZ2VSZWNvcmRfIHtcbiAga2V5O1xuICBwcmV2aW91c1ZhbHVlID0gbnVsbDtcbiAgY3VycmVudFZhbHVlID0gbnVsbDtcbiAgX25leHRQcmV2aW91cyA9IG51bGw7XG4gIF9uZXh0ID0gbnVsbDtcbiAgX3ByZXYgPSBudWxsO1xuICBfbmV4dEFkZGVkID0gbnVsbDtcbiAgX25leHRSZW1vdmVkID0gbnVsbDtcbiAgX25leHRDaGFuZ2VkID0gbnVsbDtcbiAgY29uc3RydWN0b3Ioa2V5KSB7XG4gICAgdGhpcy5rZXkgPSBrZXk7XG4gIH1cbn1cbmZ1bmN0aW9uIGRlZmF1bHRJdGVyYWJsZURpZmZlcnNGYWN0b3J5KCkge1xuICByZXR1cm4gbmV3IEl0ZXJhYmxlRGlmZmVycyhbbmV3IERlZmF1bHRJdGVyYWJsZURpZmZlckZhY3RvcnkoKV0pO1xufVxubGV0IEl0ZXJhYmxlRGlmZmVycyA9IC8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICBjbGFzcyBJdGVyYWJsZURpZmZlcnMge1xuICAgIGZhY3RvcmllcztcbiAgICBzdGF0aWMgybVwcm92ID0gLyogQF9fUFVSRV9fICovXG4gICAgX19kZWZpbmVJbmplY3RhYmxlKHtcbiAgICAgIHRva2VuOiBJdGVyYWJsZURpZmZlcnMsXG4gICAgICBwcm92aWRlZEluOiAncm9vdCcsXG4gICAgICBmYWN0b3J5OiBkZWZhdWx0SXRlcmFibGVEaWZmZXJzRmFjdG9yeVxuICAgIH0pO1xuICAgIGNvbnN0cnVjdG9yKGZhY3Rvcmllcykge1xuICAgICAgdGhpcy5mYWN0b3JpZXMgPSBmYWN0b3JpZXM7XG4gICAgfVxuICAgIHN0YXRpYyBjcmVhdGUoZmFjdG9yaWVzLCBwYXJlbnQpIHtcbiAgICAgIGlmIChwYXJlbnQgIT0gbnVsbCkge1xuICAgICAgICBjb25zdCBjb3BpZWQgPSBwYXJlbnQuZmFjdG9yaWVzLnNsaWNlKCk7XG4gICAgICAgIGZhY3RvcmllcyA9IGZhY3Rvcmllcy5jb25jYXQoY29waWVkKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXcgSXRlcmFibGVEaWZmZXJzKGZhY3Rvcmllcyk7XG4gICAgfVxuICAgIHN0YXRpYyBleHRlbmQoZmFjdG9yaWVzKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwcm92aWRlOiBJdGVyYWJsZURpZmZlcnMsXG4gICAgICAgIHVzZUZhY3Rvcnk6ICgpID0+IHtcbiAgICAgICAgICBjb25zdCBwYXJlbnQgPSBpbmplY3QoSXRlcmFibGVEaWZmZXJzLCB7XG4gICAgICAgICAgICBvcHRpb25hbDogdHJ1ZSxcbiAgICAgICAgICAgIHNraXBTZWxmOiB0cnVlXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIEl0ZXJhYmxlRGlmZmVycy5jcmVhdGUoZmFjdG9yaWVzLCBwYXJlbnQgfHwgZGVmYXVsdEl0ZXJhYmxlRGlmZmVyc0ZhY3RvcnkoKSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICAgIGZpbmQoaXRlcmFibGUpIHtcbiAgICAgIGNvbnN0IGZhY3RvcnkgPSB0aGlzLmZhY3Rvcmllcy5maW5kKGYgPT4gZi5zdXBwb3J0cyhpdGVyYWJsZSkpO1xuICAgICAgaWYgKGZhY3RvcnkgIT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gZmFjdG9yeTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBSdW50aW1lRXJyb3IoOTAxLCBuZ0Rldk1vZGUgJiYgYENhbm5vdCBmaW5kIGEgZGlmZmVyIHN1cHBvcnRpbmcgb2JqZWN0ICcke2l0ZXJhYmxlfScgb2YgdHlwZSAnJHtnZXRUeXBlTmFtZUZvckRlYnVnZ2luZyhpdGVyYWJsZSl9J2ApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gSXRlcmFibGVEaWZmZXJzO1xufSkoKTtcbmZ1bmN0aW9uIGdldFR5cGVOYW1lRm9yRGVidWdnaW5nKHR5cGUpIHtcbiAgcmV0dXJuIHR5cGVbJ25hbWUnXSB8fCB0eXBlb2YgdHlwZTtcbn1cbmZ1bmN0aW9uIGRlZmF1bHRLZXlWYWx1ZURpZmZlcnNGYWN0b3J5KCkge1xuICByZXR1cm4gbmV3IEtleVZhbHVlRGlmZmVycyhbbmV3IERlZmF1bHRLZXlWYWx1ZURpZmZlckZhY3RvcnkoKV0pO1xufVxubGV0IEtleVZhbHVlRGlmZmVycyA9IC8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICBjbGFzcyBLZXlWYWx1ZURpZmZlcnMge1xuICAgIHN0YXRpYyDJtXByb3YgPSAvKiBAX19QVVJFX18gKi9cbiAgICBfX2RlZmluZUluamVjdGFibGUoe1xuICAgICAgdG9rZW46IEtleVZhbHVlRGlmZmVycyxcbiAgICAgIHByb3ZpZGVkSW46ICdyb290JyxcbiAgICAgIGZhY3Rvcnk6IGRlZmF1bHRLZXlWYWx1ZURpZmZlcnNGYWN0b3J5XG4gICAgfSk7XG4gICAgZmFjdG9yaWVzO1xuICAgIGNvbnN0cnVjdG9yKGZhY3Rvcmllcykge1xuICAgICAgdGhpcy5mYWN0b3JpZXMgPSBmYWN0b3JpZXM7XG4gICAgfVxuICAgIHN0YXRpYyBjcmVhdGUoZmFjdG9yaWVzLCBwYXJlbnQpIHtcbiAgICAgIGlmIChwYXJlbnQpIHtcbiAgICAgICAgY29uc3QgY29waWVkID0gcGFyZW50LmZhY3Rvcmllcy5zbGljZSgpO1xuICAgICAgICBmYWN0b3JpZXMgPSBmYWN0b3JpZXMuY29uY2F0KGNvcGllZCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3IEtleVZhbHVlRGlmZmVycyhmYWN0b3JpZXMpO1xuICAgIH1cbiAgICBzdGF0aWMgZXh0ZW5kKGZhY3Rvcmllcykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcHJvdmlkZTogS2V5VmFsdWVEaWZmZXJzLFxuICAgICAgICB1c2VGYWN0b3J5OiAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgcGFyZW50ID0gaW5qZWN0KEtleVZhbHVlRGlmZmVycywge1xuICAgICAgICAgICAgb3B0aW9uYWw6IHRydWUsXG4gICAgICAgICAgICBza2lwU2VsZjogdHJ1ZVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiBLZXlWYWx1ZURpZmZlcnMuY3JlYXRlKGZhY3RvcmllcywgcGFyZW50IHx8IGRlZmF1bHRLZXlWYWx1ZURpZmZlcnNGYWN0b3J5KCkpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgICBmaW5kKGt2KSB7XG4gICAgICBjb25zdCBmYWN0b3J5ID0gdGhpcy5mYWN0b3JpZXMuZmluZChmID0+IGYuc3VwcG9ydHMoa3YpKTtcbiAgICAgIGlmIChmYWN0b3J5KSB7XG4gICAgICAgIHJldHVybiBmYWN0b3J5O1xuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFcnJvcig5MDEsIG5nRGV2TW9kZSAmJiBgQ2Fubm90IGZpbmQgYSBkaWZmZXIgc3VwcG9ydGluZyBvYmplY3QgJyR7a3Z9J2ApO1xuICAgIH1cbiAgfVxuICByZXR1cm4gS2V5VmFsdWVEaWZmZXJzO1xufSkoKTtcbmNvbnN0IGtleVZhbERpZmYgPSBbLyojX19QVVJFX18qL25ldyBEZWZhdWx0S2V5VmFsdWVEaWZmZXJGYWN0b3J5KCldO1xuY29uc3QgaXRlcmFibGVEaWZmID0gWy8qI19fUFVSRV9fKi9uZXcgRGVmYXVsdEl0ZXJhYmxlRGlmZmVyRmFjdG9yeSgpXTtcbmNvbnN0IGRlZmF1bHRJdGVyYWJsZURpZmZlcnMgPSAvKiNfX1BVUkVfXyovbmV3IEl0ZXJhYmxlRGlmZmVycyhpdGVyYWJsZURpZmYpO1xuY29uc3QgZGVmYXVsdEtleVZhbHVlRGlmZmVycyA9IC8qI19fUFVSRV9fKi9uZXcgS2V5VmFsdWVEaWZmZXJzKGtleVZhbERpZmYpO1xuY29uc3QgcGxhdGZvcm1Db3JlID0gLyojX19QVVJFX18qL2NyZWF0ZVBsYXRmb3JtRmFjdG9yeShudWxsLCAnY29yZScsIFtdKTtcbmxldCBBcHBsaWNhdGlvbk1vZHVsZSA9IC8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICBjbGFzcyBBcHBsaWNhdGlvbk1vZHVsZSB7XG4gICAgY29uc3RydWN0b3IoYXBwUmVmKSB7fVxuICAgIHN0YXRpYyDJtWZhYyA9IGZ1bmN0aW9uIEFwcGxpY2F0aW9uTW9kdWxlX0ZhY3RvcnkoX19uZ0ZhY3RvcnlUeXBlX18pIHtcbiAgICAgIHJldHVybiBuZXcgKF9fbmdGYWN0b3J5VHlwZV9fIHx8IEFwcGxpY2F0aW9uTW9kdWxlKShfX2luamVjdChBcHBsaWNhdGlvblJlZikpO1xuICAgIH07XG4gICAgc3RhdGljIMm1bW9kID0gLypAX19QVVJFX18qL19fZGVmaW5lTmdNb2R1bGUoe1xuICAgICAgdHlwZTogQXBwbGljYXRpb25Nb2R1bGVcbiAgICB9KTtcbiAgICBzdGF0aWMgybVpbmogPSAvKkBfX1BVUkVfXyovX19kZWZpbmVJbmplY3Rvcih7fSk7XG4gIH1cbiAgcmV0dXJuIEFwcGxpY2F0aW9uTW9kdWxlO1xufSkoKTtcbi8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICAodHlwZW9mIG5nRGV2TW9kZSA9PT0gXCJ1bmRlZmluZWRcIiB8fCBuZ0Rldk1vZGUpICYmIHNldENsYXNzTWV0YWRhdGEoQXBwbGljYXRpb25Nb2R1bGUsIFt7XG4gICAgdHlwZTogTmdNb2R1bGVcbiAgfV0sICgpID0+IFt7XG4gICAgdHlwZTogQXBwbGljYXRpb25SZWZcbiAgfV0sIG51bGwpO1xufSkoKTtcbmZ1bmN0aW9uIGludGVybmFsQ3JlYXRlQXBwbGljYXRpb24oY29uZmlnKSB7XG4gIGNvbnN0IHtcbiAgICByb290Q29tcG9uZW50LFxuICAgIGFwcFByb3ZpZGVycyxcbiAgICBwbGF0Zm9ybVByb3ZpZGVycyxcbiAgICBwbGF0Zm9ybVJlZlxuICB9ID0gY29uZmlnO1xuICBwcm9maWxlcihQcm9maWxlckV2ZW50LkJvb3RzdHJhcEFwcGxpY2F0aW9uU3RhcnQpO1xuICBpZiAodHlwZW9mIG5nU2VydmVyTW9kZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbmdTZXJ2ZXJNb2RlICYmICFwbGF0Zm9ybVJlZikge1xuICAgIHRocm93IG5ldyBSdW50aW1lRXJyb3IoLTQwMSwgbmdEZXZNb2RlICYmICdNaXNzaW5nIFBsYXRmb3JtOiBUaGlzIG1heSBiZSBkdWUgdG8gdXNpbmcgYGJvb3RzdHJhcEFwcGxpY2F0aW9uYCBvbiB0aGUgc2VydmVyIHdpdGhvdXQgcGFzc2luZyBhIGBCb290c3RyYXBDb250ZXh0YC4gJyArICdQbGVhc2UgbWFrZSBzdXJlIHRoYXQgYGJvb3RzdHJhcEFwcGxpY2F0aW9uYCBpcyBjYWxsZWQgd2l0aCBhIGBjb250ZXh0YCBhcmd1bWVudC4nKTtcbiAgfVxuICB0cnkge1xuICAgIGNvbnN0IHBsYXRmb3JtSW5qZWN0b3IgPSBwbGF0Zm9ybVJlZj8uaW5qZWN0b3IgPz8gY3JlYXRlT3JSZXVzZVBsYXRmb3JtSW5qZWN0b3IocGxhdGZvcm1Qcm92aWRlcnMpO1xuICAgIGlmICgodHlwZW9mIG5nRGV2TW9kZSA9PT0gJ3VuZGVmaW5lZCcgfHwgbmdEZXZNb2RlKSAmJiByb290Q29tcG9uZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGFzc2VydFN0YW5kYWxvbmVDb21wb25lbnRUeXBlKHJvb3RDb21wb25lbnQpO1xuICAgIH1cbiAgICBjb25zdCBhbGxBcHBQcm92aWRlcnMgPSBbcHJvdmlkZVpvbmVsZXNzQ2hhbmdlRGV0ZWN0aW9uSW50ZXJuYWwoKSwgZXJyb3JIYW5kbGVyRW52aXJvbm1lbnRJbml0aWFsaXplciwgLi4uKG5nRGV2TW9kZSA/IFt2YWxpZEFwcElkSW5pdGlhbGl6ZXJdIDogW10pLCAuLi4oYXBwUHJvdmlkZXJzIHx8IFtdKV07XG4gICAgY29uc3QgYWRhcHRlciA9IG5ldyBFbnZpcm9ubWVudE5nTW9kdWxlUmVmQWRhcHRlcih7XG4gICAgICBwcm92aWRlcnM6IGFsbEFwcFByb3ZpZGVycyxcbiAgICAgIHBhcmVudDogcGxhdGZvcm1JbmplY3RvcixcbiAgICAgIGRlYnVnTmFtZTogdHlwZW9mIG5nRGV2TW9kZSA9PT0gJ3VuZGVmaW5lZCcgfHwgbmdEZXZNb2RlID8gJ0Vudmlyb25tZW50IEluamVjdG9yJyA6ICcnLFxuICAgICAgcnVuRW52aXJvbm1lbnRJbml0aWFsaXplcnM6IGZhbHNlXG4gICAgfSk7XG4gICAgcmV0dXJuIGJvb3RzdHJhcCh7XG4gICAgICByM0luamVjdG9yOiBhZGFwdGVyLmluamVjdG9yLFxuICAgICAgcGxhdGZvcm1JbmplY3RvcixcbiAgICAgIHJvb3RDb21wb25lbnRcbiAgICB9KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBwcm9maWxlcihQcm9maWxlckV2ZW50LkJvb3RzdHJhcEFwcGxpY2F0aW9uRW5kKTtcbiAgfVxufVxuY2xhc3MgU2VyaWFsaXplZFZpZXdDb2xsZWN0aW9uIHtcbiAgdmlld3MgPSBbXTtcbiAgaW5kZXhCeUNvbnRlbnQgPSAvKiNfX1BVUkVfXyovbmV3IE1hcCgpO1xuICBhZGQoc2VyaWFsaXplZFZpZXcpIHtcbiAgICBjb25zdCB2aWV3QXNTdHJpbmcgPSBKU09OLnN0cmluZ2lmeShzZXJpYWxpemVkVmlldyk7XG4gICAgaWYgKCF0aGlzLmluZGV4QnlDb250ZW50Lmhhcyh2aWV3QXNTdHJpbmcpKSB7XG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMudmlld3MubGVuZ3RoO1xuICAgICAgdGhpcy52aWV3cy5wdXNoKHNlcmlhbGl6ZWRWaWV3KTtcbiAgICAgIHRoaXMuaW5kZXhCeUNvbnRlbnQuc2V0KHZpZXdBc1N0cmluZywgaW5kZXgpO1xuICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5pbmRleEJ5Q29udGVudC5nZXQodmlld0FzU3RyaW5nKTtcbiAgfVxuICBnZXRBbGwoKSB7XG4gICAgcmV0dXJuIHRoaXMudmlld3M7XG4gIH1cbn1cbmxldCB0Vmlld1NzcklkID0gMDtcbmZ1bmN0aW9uIGdldFNzcklkKHRWaWV3KSB7XG4gIGlmICghdFZpZXcuc3NySWQpIHtcbiAgICB0Vmlldy5zc3JJZCA9IGB0JHt0Vmlld1NzcklkKyt9YDtcbiAgfVxuICByZXR1cm4gdFZpZXcuc3NySWQ7XG59XG5mdW5jdGlvbiBjYWxjTnVtUm9vdE5vZGVzKHRWaWV3LCBsVmlldywgdE5vZGUpIHtcbiAgY29uc3Qgcm9vdE5vZGVzID0gW107XG4gIGNvbGxlY3ROYXRpdmVOb2Rlcyh0VmlldywgbFZpZXcsIHROb2RlLCByb290Tm9kZXMpO1xuICByZXR1cm4gcm9vdE5vZGVzLmxlbmd0aDtcbn1cbmZ1bmN0aW9uIGNhbGNOdW1Sb290Tm9kZXNJbkxDb250YWluZXIobENvbnRhaW5lcikge1xuICBjb25zdCByb290Tm9kZXMgPSBbXTtcbiAgY29sbGVjdE5hdGl2ZU5vZGVzSW5MQ29udGFpbmVyKGxDb250YWluZXIsIHJvb3ROb2Rlcyk7XG4gIHJldHVybiByb290Tm9kZXMubGVuZ3RoO1xufVxuZnVuY3Rpb24gYW5ub3RhdGVDb21wb25lbnRMVmlld0Zvckh5ZHJhdGlvbihsVmlldywgY29udGV4dCkge1xuICBjb25zdCBob3N0RWxlbWVudCA9IGxWaWV3W0hPU1RdO1xuICBpZiAoaG9zdEVsZW1lbnQgJiYgIWhvc3RFbGVtZW50Lmhhc0F0dHJpYnV0ZShTS0lQX0hZRFJBVElPTl9BVFRSX05BTUUpKSB7XG4gICAgcmV0dXJuIGFubm90YXRlSG9zdEVsZW1lbnRGb3JIeWRyYXRpb24oaG9zdEVsZW1lbnQsIGxWaWV3LCBudWxsLCBjb250ZXh0KTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIGFubm90YXRlTENvbnRhaW5lckZvckh5ZHJhdGlvbihsQ29udGFpbmVyLCBjb250ZXh0KSB7XG4gIGNvbnN0IGNvbXBvbmVudExWaWV3ID0gdW53cmFwTFZpZXcobENvbnRhaW5lcltIT1NUXSk7XG4gIGNvbnN0IGNvbXBvbmVudExWaWV3TmdoSW5kZXggPSBhbm5vdGF0ZUNvbXBvbmVudExWaWV3Rm9ySHlkcmF0aW9uKGNvbXBvbmVudExWaWV3LCBjb250ZXh0KTtcbiAgaWYgKGNvbXBvbmVudExWaWV3TmdoSW5kZXggPT09IG51bGwpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgaG9zdEVsZW1lbnQgPSB1bndyYXBSTm9kZShjb21wb25lbnRMVmlld1tIT1NUXSk7XG4gIGNvbnN0IHJvb3RMVmlldyA9IGxDb250YWluZXJbUEFSRU5UXTtcbiAgY29uc3Qgcm9vdExWaWV3TmdoSW5kZXggPSBhbm5vdGF0ZUhvc3RFbGVtZW50Rm9ySHlkcmF0aW9uKGhvc3RFbGVtZW50LCByb290TFZpZXcsIG51bGwsIGNvbnRleHQpO1xuICBjb25zdCByZW5kZXJlciA9IGNvbXBvbmVudExWaWV3W1JFTkRFUkVSXTtcbiAgY29uc3QgZmluYWxJbmRleCA9IGAke2NvbXBvbmVudExWaWV3TmdoSW5kZXh9fCR7cm9vdExWaWV3TmdoSW5kZXh9YDtcbiAgcmVuZGVyZXIuc2V0QXR0cmlidXRlKGhvc3RFbGVtZW50LCBOR0hfQVRUUl9OQU1FLCBmaW5hbEluZGV4KTtcbn1cbmZ1bmN0aW9uIGFubm90YXRlRm9ySHlkcmF0aW9uKGFwcFJlZiwgZG9jKSB7XG4gIGNvbnN0IGluamVjdG9yID0gYXBwUmVmLmluamVjdG9yO1xuICBjb25zdCBpc0kxOG5IeWRyYXRpb25FbmFibGVkVmFsID0gaXNJMThuSHlkcmF0aW9uRW5hYmxlZChpbmplY3Rvcik7XG4gIGNvbnN0IGlzSW5jcmVtZW50YWxIeWRyYXRpb25FbmFibGVkVmFsID0gaXNJbmNyZW1lbnRhbEh5ZHJhdGlvbkVuYWJsZWQoaW5qZWN0b3IpO1xuICBjb25zdCBzZXJpYWxpemVkVmlld0NvbGxlY3Rpb24gPSBuZXcgU2VyaWFsaXplZFZpZXdDb2xsZWN0aW9uKCk7XG4gIGNvbnN0IGNvcnJ1cHRlZFRleHROb2RlcyA9IG5ldyBNYXAoKTtcbiAgY29uc3Qgdmlld1JlZnMgPSBhcHBSZWYuX3ZpZXdzO1xuICBjb25zdCBzaG91bGRSZXBsYXlFdmVudHMgPSBpbmplY3Rvci5nZXQoSVNfRVZFTlRfUkVQTEFZX0VOQUJMRUQsIEVWRU5UX1JFUExBWV9FTkFCTEVEX0RFRkFVTFQpO1xuICBjb25zdCBldmVudFR5cGVzVG9SZXBsYXkgPSB7XG4gICAgcmVndWxhcjogbmV3IFNldCgpLFxuICAgIGNhcHR1cmU6IG5ldyBTZXQoKVxuICB9O1xuICBjb25zdCBkZWZlckJsb2NrcyA9IG5ldyBNYXAoKTtcbiAgY29uc3QgYXBwSWQgPSBhcHBSZWYuaW5qZWN0b3IuZ2V0KEFQUF9JRCk7XG4gIGZvciAoY29uc3Qgdmlld1JlZiBvZiB2aWV3UmVmcykge1xuICAgIGNvbnN0IGxOb2RlID0gZ2V0TE5vZGVGb3JIeWRyYXRpb24odmlld1JlZik7XG4gICAgaWYgKGxOb2RlICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBjb250ZXh0ID0ge1xuICAgICAgICBzZXJpYWxpemVkVmlld0NvbGxlY3Rpb24sXG4gICAgICAgIGNvcnJ1cHRlZFRleHROb2RlcyxcbiAgICAgICAgaXNJMThuSHlkcmF0aW9uRW5hYmxlZDogaXNJMThuSHlkcmF0aW9uRW5hYmxlZFZhbCxcbiAgICAgICAgaXNJbmNyZW1lbnRhbEh5ZHJhdGlvbkVuYWJsZWQ6IGlzSW5jcmVtZW50YWxIeWRyYXRpb25FbmFibGVkVmFsLFxuICAgICAgICBpMThuQ2hpbGRyZW46IG5ldyBNYXAoKSxcbiAgICAgICAgZXZlbnRUeXBlc1RvUmVwbGF5LFxuICAgICAgICBzaG91bGRSZXBsYXlFdmVudHMsXG4gICAgICAgIGFwcElkLFxuICAgICAgICBkZWZlckJsb2Nrc1xuICAgICAgfTtcbiAgICAgIGlmIChpc0xDb250YWluZXIobE5vZGUpKSB7XG4gICAgICAgIGFubm90YXRlTENvbnRhaW5lckZvckh5ZHJhdGlvbihsTm9kZSwgY29udGV4dCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhbm5vdGF0ZUNvbXBvbmVudExWaWV3Rm9ySHlkcmF0aW9uKGxOb2RlLCBjb250ZXh0KTtcbiAgICAgIH1cbiAgICAgIGluc2VydENvcnJ1cHRlZFRleHROb2RlTWFya2Vycyhjb3JydXB0ZWRUZXh0Tm9kZXMsIGRvYyk7XG4gICAgfVxuICB9XG4gIGNvbnN0IHNlcmlhbGl6ZWRWaWV3cyA9IHNlcmlhbGl6ZWRWaWV3Q29sbGVjdGlvbi5nZXRBbGwoKTtcbiAgY29uc3QgdHJhbnNmZXJTdGF0ZSA9IGluamVjdG9yLmdldChUcmFuc2ZlclN0YXRlKTtcbiAgdHJhbnNmZXJTdGF0ZS5zZXQoTkdIX0RBVEFfS0VZLCBzZXJpYWxpemVkVmlld3MpO1xuICBpZiAoZGVmZXJCbG9ja3Muc2l6ZSA+IDApIHtcbiAgICBjb25zdCBibG9ja3MgPSB7fTtcbiAgICBmb3IgKGNvbnN0IFtpZCwgaW5mb10gb2YgZGVmZXJCbG9ja3MuZW50cmllcygpKSB7XG4gICAgICBibG9ja3NbaWRdID0gaW5mbztcbiAgICB9XG4gICAgdHJhbnNmZXJTdGF0ZS5zZXQoTkdIX0RFRkVSX0JMT0NLU19LRVksIGJsb2Nrcyk7XG4gIH1cbiAgcmV0dXJuIGV2ZW50VHlwZXNUb1JlcGxheTtcbn1cbmZ1bmN0aW9uIHNlcmlhbGl6ZUxDb250YWluZXIobENvbnRhaW5lciwgdE5vZGUsIGxWaWV3LCBwYXJlbnREZWZlckJsb2NrSWQsIGNvbnRleHQpIHtcbiAgY29uc3Qgdmlld3MgPSBbXTtcbiAgbGV0IGxhc3RWaWV3QXNTdHJpbmcgPSAnJztcbiAgZm9yIChsZXQgaSA9IENPTlRBSU5FUl9IRUFERVJfT0ZGU0VUOyBpIDwgbENvbnRhaW5lci5sZW5ndGg7IGkrKykge1xuICAgIGxldCBjaGlsZExWaWV3ID0gbENvbnRhaW5lcltpXTtcbiAgICBsZXQgdGVtcGxhdGU7XG4gICAgbGV0IG51bVJvb3ROb2RlcztcbiAgICBsZXQgc2VyaWFsaXplZFZpZXc7XG4gICAgaWYgKGlzUm9vdFZpZXcoY2hpbGRMVmlldykpIHtcbiAgICAgIGNoaWxkTFZpZXcgPSBjaGlsZExWaWV3W0hFQURFUl9PRkZTRVRdO1xuICAgICAgaWYgKGlzTENvbnRhaW5lcihjaGlsZExWaWV3KSkge1xuICAgICAgICBudW1Sb290Tm9kZXMgPSBjYWxjTnVtUm9vdE5vZGVzSW5MQ29udGFpbmVyKGNoaWxkTFZpZXcpICsgMTtcbiAgICAgICAgYW5ub3RhdGVMQ29udGFpbmVyRm9ySHlkcmF0aW9uKGNoaWxkTFZpZXcsIGNvbnRleHQpO1xuICAgICAgICBjb25zdCBjb21wb25lbnRMVmlldyA9IHVud3JhcExWaWV3KGNoaWxkTFZpZXdbSE9TVF0pO1xuICAgICAgICBzZXJpYWxpemVkVmlldyA9IHtcbiAgICAgICAgICBbVEVNUExBVEVfSURdOiBjb21wb25lbnRMVmlld1tUVklFV10uc3NySWQsXG4gICAgICAgICAgW05VTV9ST09UX05PREVTXTogbnVtUm9vdE5vZGVzXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghc2VyaWFsaXplZFZpZXcpIHtcbiAgICAgIGNvbnN0IGNoaWxkVFZpZXcgPSBjaGlsZExWaWV3W1RWSUVXXTtcbiAgICAgIGlmIChjaGlsZFRWaWV3LnR5cGUgPT09IDEpIHtcbiAgICAgICAgdGVtcGxhdGUgPSBjaGlsZFRWaWV3LnNzcklkO1xuICAgICAgICBudW1Sb290Tm9kZXMgPSAxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGVtcGxhdGUgPSBnZXRTc3JJZChjaGlsZFRWaWV3KTtcbiAgICAgICAgbnVtUm9vdE5vZGVzID0gY2FsY051bVJvb3ROb2RlcyhjaGlsZFRWaWV3LCBjaGlsZExWaWV3LCBjaGlsZFRWaWV3LmZpcnN0Q2hpbGQpO1xuICAgICAgfVxuICAgICAgc2VyaWFsaXplZFZpZXcgPSB7XG4gICAgICAgIFtURU1QTEFURV9JRF06IHRlbXBsYXRlLFxuICAgICAgICBbTlVNX1JPT1RfTk9ERVNdOiBudW1Sb290Tm9kZXNcbiAgICAgIH07XG4gICAgICBsZXQgaXNIeWRyYXRlTmV2ZXJCbG9jayA9IGZhbHNlO1xuICAgICAgaWYgKGlzRGVmZXJCbG9jayhsVmlld1tUVklFV10sIHROb2RlKSkge1xuICAgICAgICBjb25zdCBsRGV0YWlscyA9IGdldExEZWZlckJsb2NrRGV0YWlscyhsVmlldywgdE5vZGUpO1xuICAgICAgICBjb25zdCB0RGV0YWlscyA9IGdldFREZWZlckJsb2NrRGV0YWlscyhsVmlld1tUVklFV10sIHROb2RlKTtcbiAgICAgICAgaWYgKGNvbnRleHQuaXNJbmNyZW1lbnRhbEh5ZHJhdGlvbkVuYWJsZWQgJiYgdERldGFpbHMuaHlkcmF0ZVRyaWdnZXJzICE9PSBudWxsKSB7XG4gICAgICAgICAgY29uc3QgZGVmZXJCbG9ja0lkID0gYGQke2NvbnRleHQuZGVmZXJCbG9ja3Muc2l6ZX1gO1xuICAgICAgICAgIGlmICh0RGV0YWlscy5oeWRyYXRlVHJpZ2dlcnMuaGFzKDcpKSB7XG4gICAgICAgICAgICBpc0h5ZHJhdGVOZXZlckJsb2NrID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbGV0IHJvb3ROb2RlcyA9IFtdO1xuICAgICAgICAgIGNvbGxlY3ROYXRpdmVOb2Rlc0luTENvbnRhaW5lcihsQ29udGFpbmVyLCByb290Tm9kZXMpO1xuICAgICAgICAgIGNvbnN0IGRlZmVyQmxvY2tJbmZvID0ge1xuICAgICAgICAgICAgW05VTV9ST09UX05PREVTXTogcm9vdE5vZGVzLmxlbmd0aCxcbiAgICAgICAgICAgIFtERUZFUl9CTE9DS19TVEFURV06IGxEZXRhaWxzW0RFRkVSX0JMT0NLX1NUQVRFJDFdXG4gICAgICAgICAgfTtcbiAgICAgICAgICBjb25zdCBzZXJpYWxpemVkVHJpZ2dlcnMgPSBzZXJpYWxpemVIeWRyYXRlVHJpZ2dlcnModERldGFpbHMuaHlkcmF0ZVRyaWdnZXJzKTtcbiAgICAgICAgICBpZiAoc2VyaWFsaXplZFRyaWdnZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGRlZmVyQmxvY2tJbmZvW0RFRkVSX0hZRFJBVEVfVFJJR0dFUlNdID0gc2VyaWFsaXplZFRyaWdnZXJzO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocGFyZW50RGVmZXJCbG9ja0lkICE9PSBudWxsKSB7XG4gICAgICAgICAgICBkZWZlckJsb2NrSW5mb1tERUZFUl9QQVJFTlRfQkxPQ0tfSURdID0gcGFyZW50RGVmZXJCbG9ja0lkO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb250ZXh0LmRlZmVyQmxvY2tzLnNldChkZWZlckJsb2NrSWQsIGRlZmVyQmxvY2tJbmZvKTtcbiAgICAgICAgICBjb25zdCBub2RlID0gdW53cmFwUk5vZGUobENvbnRhaW5lcik7XG4gICAgICAgICAgaWYgKG5vZGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaWYgKG5vZGUubm9kZVR5cGUgPT09IE5vZGUuQ09NTUVOVF9OT0RFKSB7XG4gICAgICAgICAgICAgIGFubm90YXRlRGVmZXJCbG9ja0FuY2hvckZvckh5ZHJhdGlvbihub2RlLCBkZWZlckJsb2NrSWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBuZ0Rldk1vZGUgJiYgdmFsaWRhdGVOb2RlRXhpc3RzKG5vZGUsIGNoaWxkTFZpZXcsIHROb2RlKTtcbiAgICAgICAgICAgIG5nRGV2TW9kZSAmJiB2YWxpZGF0ZU1hdGNoaW5nTm9kZShub2RlLCBOb2RlLkNPTU1FTlRfTk9ERSwgbnVsbCwgY2hpbGRMVmlldywgdE5vZGUsIHRydWUpO1xuICAgICAgICAgICAgYW5ub3RhdGVEZWZlckJsb2NrQW5jaG9yRm9ySHlkcmF0aW9uKG5vZGUsIGRlZmVyQmxvY2tJZCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghaXNIeWRyYXRlTmV2ZXJCbG9jaykge1xuICAgICAgICAgICAgYW5ub3RhdGVEZWZlckJsb2NrUm9vdE5vZGVzV2l0aEpzQWN0aW9uKHREZXRhaWxzLCByb290Tm9kZXMsIGRlZmVyQmxvY2tJZCwgY29udGV4dCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHBhcmVudERlZmVyQmxvY2tJZCA9IGRlZmVyQmxvY2tJZDtcbiAgICAgICAgICBzZXJpYWxpemVkVmlld1tERUZFUl9CTE9DS19JRF0gPSBkZWZlckJsb2NrSWQ7XG4gICAgICAgIH1cbiAgICAgICAgc2VyaWFsaXplZFZpZXdbREVGRVJfQkxPQ0tfU1RBVEVdID0gbERldGFpbHNbREVGRVJfQkxPQ0tfU1RBVEUkMV07XG4gICAgICB9XG4gICAgICBpZiAoIWlzSHlkcmF0ZU5ldmVyQmxvY2spIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihzZXJpYWxpemVkVmlldywgc2VyaWFsaXplTFZpZXcobENvbnRhaW5lcltpXSwgcGFyZW50RGVmZXJCbG9ja0lkLCBjb250ZXh0KSk7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGN1cnJlbnRWaWV3QXNTdHJpbmcgPSBKU09OLnN0cmluZ2lmeShzZXJpYWxpemVkVmlldyk7XG4gICAgaWYgKHZpZXdzLmxlbmd0aCA+IDAgJiYgY3VycmVudFZpZXdBc1N0cmluZyA9PT0gbGFzdFZpZXdBc1N0cmluZykge1xuICAgICAgY29uc3QgcHJldmlvdXNWaWV3ID0gdmlld3Nbdmlld3MubGVuZ3RoIC0gMV07XG4gICAgICBwcmV2aW91c1ZpZXdbTVVMVElQTElFUl0gPz89IDE7XG4gICAgICBwcmV2aW91c1ZpZXdbTVVMVElQTElFUl0rKztcbiAgICB9IGVsc2Uge1xuICAgICAgbGFzdFZpZXdBc1N0cmluZyA9IGN1cnJlbnRWaWV3QXNTdHJpbmc7XG4gICAgICB2aWV3cy5wdXNoKHNlcmlhbGl6ZWRWaWV3KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHZpZXdzO1xufVxuZnVuY3Rpb24gc2VyaWFsaXplSHlkcmF0ZVRyaWdnZXJzKHRyaWdnZXJNYXApIHtcbiAgY29uc3Qgc2VyaWFsaXphYmxlRGVmZXJCbG9ja1RyaWdnZXIgPSBuZXcgU2V0KFswLCAxLCAyLCA1XSk7XG4gIGxldCB0cmlnZ2VycyA9IFtdO1xuICBmb3IgKGxldCBbdHJpZ2dlciwgZGV0YWlsc10gb2YgdHJpZ2dlck1hcCkge1xuICAgIGlmIChzZXJpYWxpemFibGVEZWZlckJsb2NrVHJpZ2dlci5oYXModHJpZ2dlcikpIHtcbiAgICAgIGlmIChkZXRhaWxzID09PSBudWxsKSB7XG4gICAgICAgIHRyaWdnZXJzLnB1c2godHJpZ2dlcik7XG4gICAgICB9IGVsc2UgaWYgKGRldGFpbHMudHlwZSA9PT0gNSkge1xuICAgICAgICB0cmlnZ2Vycy5wdXNoKHtcbiAgICAgICAgICB0cmlnZ2VyLFxuICAgICAgICAgIGRlbGF5OiBkZXRhaWxzLmRlbGF5XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdHJpZ2dlcnMucHVzaCh7XG4gICAgICAgICAgdHJpZ2dlcixcbiAgICAgICAgICBpbnRlcnNlY3Rpb25PYnNlcnZlck9wdGlvbnM6IGRldGFpbHMuaW50ZXJzZWN0aW9uT2JzZXJ2ZXJPcHRpb25zXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gdHJpZ2dlcnM7XG59XG5mdW5jdGlvbiBhcHBlbmRTZXJpYWxpemVkTm9kZVBhdGgobmdoLCB0Tm9kZSwgbFZpZXcsIGV4Y2x1ZGVkUGFyZW50Tm9kZXMpIHtcbiAgY29uc3Qgbm9PZmZzZXRJbmRleCA9IHROb2RlLmluZGV4IC0gSEVBREVSX09GRlNFVDtcbiAgbmdoW05PREVTXSA/Pz0ge307XG4gIG5naFtOT0RFU11bbm9PZmZzZXRJbmRleF0gPz89IGNhbGNQYXRoRm9yTm9kZSh0Tm9kZSwgbFZpZXcsIGV4Y2x1ZGVkUGFyZW50Tm9kZXMpO1xufVxuZnVuY3Rpb24gYXBwZW5kRGlzY29ubmVjdGVkTm9kZUluZGV4KG5naCwgdE5vZGVPck5vT2Zmc2V0SW5kZXgpIHtcbiAgY29uc3Qgbm9PZmZzZXRJbmRleCA9IHR5cGVvZiB0Tm9kZU9yTm9PZmZzZXRJbmRleCA9PT0gJ251bWJlcicgPyB0Tm9kZU9yTm9PZmZzZXRJbmRleCA6IHROb2RlT3JOb09mZnNldEluZGV4LmluZGV4IC0gSEVBREVSX09GRlNFVDtcbiAgbmdoW0RJU0NPTk5FQ1RFRF9OT0RFU10gPz89IFtdO1xuICBpZiAoIW5naFtESVNDT05ORUNURURfTk9ERVNdLmluY2x1ZGVzKG5vT2Zmc2V0SW5kZXgpKSB7XG4gICAgbmdoW0RJU0NPTk5FQ1RFRF9OT0RFU10ucHVzaChub09mZnNldEluZGV4KTtcbiAgfVxufVxuZnVuY3Rpb24gc2VyaWFsaXplTFZpZXcobFZpZXcsIHBhcmVudERlZmVyQmxvY2tJZCA9IG51bGwsIGNvbnRleHQpIHtcbiAgY29uc3QgbmdoID0ge307XG4gIGNvbnN0IHRWaWV3ID0gbFZpZXdbVFZJRVddO1xuICBjb25zdCBpMThuQ2hpbGRyZW4gPSBnZXRPckNvbXB1dGVJMThuQ2hpbGRyZW4odFZpZXcsIGNvbnRleHQpO1xuICBjb25zdCBuYXRpdmVFbGVtZW50c1RvRXZlbnRUeXBlcyA9IGNvbnRleHQuc2hvdWxkUmVwbGF5RXZlbnRzID8gY29sbGVjdERvbUV2ZW50c0luZm8odFZpZXcsIGxWaWV3LCBjb250ZXh0LmV2ZW50VHlwZXNUb1JlcGxheSkgOiBudWxsO1xuICBmb3IgKGxldCBpID0gSEVBREVSX09GRlNFVDsgaSA8IHRWaWV3LmJpbmRpbmdTdGFydEluZGV4OyBpKyspIHtcbiAgICBjb25zdCB0Tm9kZSA9IHRWaWV3LmRhdGFbaV07XG4gICAgY29uc3Qgbm9PZmZzZXRJbmRleCA9IGkgLSBIRUFERVJfT0ZGU0VUO1xuICAgIGNvbnN0IGkxOG5EYXRhID0gdHJ5U2VyaWFsaXplSTE4bkJsb2NrKGxWaWV3LCBpLCBjb250ZXh0KTtcbiAgICBpZiAoaTE4bkRhdGEpIHtcbiAgICAgIG5naFtJMThOX0RBVEFdID8/PSB7fTtcbiAgICAgIG5naFtJMThOX0RBVEFdW25vT2Zmc2V0SW5kZXhdID0gaTE4bkRhdGEuY2FzZVF1ZXVlO1xuICAgICAgZm9yIChjb25zdCBub2RlTm9PZmZzZXRJbmRleCBvZiBpMThuRGF0YS5kaXNjb25uZWN0ZWROb2Rlcykge1xuICAgICAgICBhcHBlbmREaXNjb25uZWN0ZWROb2RlSW5kZXgobmdoLCBub2RlTm9PZmZzZXRJbmRleCk7XG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IG5vZGVOb09mZnNldEluZGV4IG9mIGkxOG5EYXRhLmRpc2pvaW50Tm9kZXMpIHtcbiAgICAgICAgY29uc3QgdE5vZGUgPSB0Vmlldy5kYXRhW25vZGVOb09mZnNldEluZGV4ICsgSEVBREVSX09GRlNFVF07XG4gICAgICAgIG5nRGV2TW9kZSAmJiBhc3NlcnRUTm9kZSh0Tm9kZSk7XG4gICAgICAgIGFwcGVuZFNlcmlhbGl6ZWROb2RlUGF0aChuZ2gsIHROb2RlLCBsVmlldywgaTE4bkNoaWxkcmVuKTtcbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoIWlzVE5vZGVTaGFwZSh0Tm9kZSkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoaXNEZXRhY2hlZEJ5STE4bih0Tm9kZSkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoaXNMQ29udGFpbmVyKGxWaWV3W2ldKSAmJiB0Tm9kZS50Vmlldykge1xuICAgICAgbmdoW1RFTVBMQVRFU10gPz89IHt9O1xuICAgICAgbmdoW1RFTVBMQVRFU11bbm9PZmZzZXRJbmRleF0gPSBnZXRTc3JJZCh0Tm9kZS50Vmlldyk7XG4gICAgfVxuICAgIGlmIChpc0Rpc2Nvbm5lY3RlZE5vZGUodE5vZGUsIGxWaWV3KSAmJiBpc0NvbnRlbnRQcm9qZWN0ZWROb2RlKHROb2RlKSkge1xuICAgICAgYXBwZW5kRGlzY29ubmVjdGVkTm9kZUluZGV4KG5naCwgdE5vZGUpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChBcnJheS5pc0FycmF5KHROb2RlLnByb2plY3Rpb24pKSB7XG4gICAgICBmb3IgKGNvbnN0IHByb2plY3Rpb25IZWFkVE5vZGUgb2YgdE5vZGUucHJvamVjdGlvbikge1xuICAgICAgICBpZiAoIXByb2plY3Rpb25IZWFkVE5vZGUpIGNvbnRpbnVlO1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkocHJvamVjdGlvbkhlYWRUTm9kZSkpIHtcbiAgICAgICAgICBpZiAoIWlzUHJvamVjdGlvblROb2RlKHByb2plY3Rpb25IZWFkVE5vZGUpICYmICFpc0luU2tpcEh5ZHJhdGlvbkJsb2NrKHByb2plY3Rpb25IZWFkVE5vZGUpKSB7XG4gICAgICAgICAgICBpZiAoaXNEaXNjb25uZWN0ZWROb2RlKHByb2plY3Rpb25IZWFkVE5vZGUsIGxWaWV3KSkge1xuICAgICAgICAgICAgICBhcHBlbmREaXNjb25uZWN0ZWROb2RlSW5kZXgobmdoLCBwcm9qZWN0aW9uSGVhZFROb2RlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGFwcGVuZFNlcmlhbGl6ZWROb2RlUGF0aChuZ2gsIHByb2plY3Rpb25IZWFkVE5vZGUsIGxWaWV3LCBpMThuQ2hpbGRyZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyB1bnN1cHBvcnRlZFByb2plY3Rpb25PZkRvbU5vZGVzKHVud3JhcFJOb2RlKGxWaWV3W2ldKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgY29uZGl0aW9uYWxseUFubm90YXRlTm9kZVBhdGgobmdoLCB0Tm9kZSwgbFZpZXcsIGkxOG5DaGlsZHJlbik7XG4gICAgaWYgKGlzTENvbnRhaW5lcihsVmlld1tpXSkpIHtcbiAgICAgIGNvbnN0IGhvc3ROb2RlID0gbFZpZXdbaV1bSE9TVF07XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShob3N0Tm9kZSkpIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0Tm9kZSA9IHVud3JhcFJOb2RlKGhvc3ROb2RlKTtcbiAgICAgICAgaWYgKCF0YXJnZXROb2RlLmhhc0F0dHJpYnV0ZShTS0lQX0hZRFJBVElPTl9BVFRSX05BTUUpKSB7XG4gICAgICAgICAgYW5ub3RhdGVIb3N0RWxlbWVudEZvckh5ZHJhdGlvbih0YXJnZXROb2RlLCBob3N0Tm9kZSwgcGFyZW50RGVmZXJCbG9ja0lkLCBjb250ZXh0KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbmdoW0NPTlRBSU5FUlNdID8/PSB7fTtcbiAgICAgIG5naFtDT05UQUlORVJTXVtub09mZnNldEluZGV4XSA9IHNlcmlhbGl6ZUxDb250YWluZXIobFZpZXdbaV0sIHROb2RlLCBsVmlldywgcGFyZW50RGVmZXJCbG9ja0lkLCBjb250ZXh0KTtcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkobFZpZXdbaV0pICYmICFpc0xldERlY2xhcmF0aW9uKHROb2RlKSkge1xuICAgICAgY29uc3QgdGFyZ2V0Tm9kZSA9IHVud3JhcFJOb2RlKGxWaWV3W2ldW0hPU1RdKTtcbiAgICAgIGlmICghdGFyZ2V0Tm9kZS5oYXNBdHRyaWJ1dGUoU0tJUF9IWURSQVRJT05fQVRUUl9OQU1FKSkge1xuICAgICAgICBhbm5vdGF0ZUhvc3RFbGVtZW50Rm9ySHlkcmF0aW9uKHRhcmdldE5vZGUsIGxWaWV3W2ldLCBwYXJlbnREZWZlckJsb2NrSWQsIGNvbnRleHQpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodE5vZGUudHlwZSAmIDgpIHtcbiAgICAgICAgbmdoW0VMRU1FTlRfQ09OVEFJTkVSU10gPz89IHt9O1xuICAgICAgICBuZ2hbRUxFTUVOVF9DT05UQUlORVJTXVtub09mZnNldEluZGV4XSA9IGNhbGNOdW1Sb290Tm9kZXModFZpZXcsIGxWaWV3LCB0Tm9kZS5jaGlsZCk7XG4gICAgICB9IGVsc2UgaWYgKHROb2RlLnR5cGUgJiAoMTYgfCAxMjgpKSB7XG4gICAgICAgIGxldCBuZXh0VE5vZGUgPSB0Tm9kZS5uZXh0O1xuICAgICAgICB3aGlsZSAobmV4dFROb2RlICE9PSBudWxsICYmIG5leHRUTm9kZS50eXBlICYgKDE2IHwgMTI4KSkge1xuICAgICAgICAgIG5leHRUTm9kZSA9IG5leHRUTm9kZS5uZXh0O1xuICAgICAgICB9XG4gICAgICAgIGlmIChuZXh0VE5vZGUgJiYgIWlzSW5Ta2lwSHlkcmF0aW9uQmxvY2sobmV4dFROb2RlKSkge1xuICAgICAgICAgIGFwcGVuZFNlcmlhbGl6ZWROb2RlUGF0aChuZ2gsIG5leHRUTm9kZSwgbFZpZXcsIGkxOG5DaGlsZHJlbik7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodE5vZGUudHlwZSAmIDEpIHtcbiAgICAgICAgY29uc3Qgck5vZGUgPSB1bndyYXBSTm9kZShsVmlld1tpXSk7XG4gICAgICAgIHByb2Nlc3NUZXh0Tm9kZUJlZm9yZVNlcmlhbGl6YXRpb24oY29udGV4dCwgck5vZGUpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAobmF0aXZlRWxlbWVudHNUb0V2ZW50VHlwZXMgJiYgdE5vZGUudHlwZSAmIDIpIHtcbiAgICAgIGNvbnN0IG5hdGl2ZUVsZW1lbnQgPSB1bndyYXBSTm9kZShsVmlld1tpXSk7XG4gICAgICBpZiAobmF0aXZlRWxlbWVudHNUb0V2ZW50VHlwZXMuaGFzKG5hdGl2ZUVsZW1lbnQpKSB7XG4gICAgICAgIHNldEpTQWN0aW9uQXR0cmlidXRlcyhuYXRpdmVFbGVtZW50LCBuYXRpdmVFbGVtZW50c1RvRXZlbnRUeXBlcy5nZXQobmF0aXZlRWxlbWVudCksIHBhcmVudERlZmVyQmxvY2tJZCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBuZ2g7XG59XG5mdW5jdGlvbiBjb25kaXRpb25hbGx5QW5ub3RhdGVOb2RlUGF0aChuZ2gsIHROb2RlLCBsVmlldywgZXhjbHVkZWRQYXJlbnROb2Rlcykge1xuICBpZiAoaXNQcm9qZWN0aW9uVE5vZGUodE5vZGUpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmICh0Tm9kZS5wcm9qZWN0aW9uTmV4dCAmJiB0Tm9kZS5wcm9qZWN0aW9uTmV4dCAhPT0gdE5vZGUubmV4dCAmJiAhaXNJblNraXBIeWRyYXRpb25CbG9jayh0Tm9kZS5wcm9qZWN0aW9uTmV4dCkpIHtcbiAgICBhcHBlbmRTZXJpYWxpemVkTm9kZVBhdGgobmdoLCB0Tm9kZS5wcm9qZWN0aW9uTmV4dCwgbFZpZXcsIGV4Y2x1ZGVkUGFyZW50Tm9kZXMpO1xuICB9XG4gIGlmICh0Tm9kZS5wcmV2ID09PSBudWxsICYmIHROb2RlLnBhcmVudCAhPT0gbnVsbCAmJiBpc0Rpc2Nvbm5lY3RlZE5vZGUodE5vZGUucGFyZW50LCBsVmlldykgJiYgIWlzRGlzY29ubmVjdGVkTm9kZSh0Tm9kZSwgbFZpZXcpKSB7XG4gICAgYXBwZW5kU2VyaWFsaXplZE5vZGVQYXRoKG5naCwgdE5vZGUsIGxWaWV3LCBleGNsdWRlZFBhcmVudE5vZGVzKTtcbiAgfVxufVxuZnVuY3Rpb24gY29tcG9uZW50VXNlc1NoYWRvd0RvbUVuY2Fwc3VsYXRpb24obFZpZXcpIHtcbiAgY29uc3QgaW5zdGFuY2UgPSBsVmlld1tDT05URVhUXTtcbiAgaWYgKCFpbnN0YW5jZT8uY29uc3RydWN0b3IpIHJldHVybiBmYWxzZTtcbiAgY29uc3QgZGVmID0gZ2V0Q29tcG9uZW50RGVmKGluc3RhbmNlLmNvbnN0cnVjdG9yKTtcbiAgcmV0dXJuIGRlZj8uZW5jYXBzdWxhdGlvbiA9PT0gVmlld0VuY2Fwc3VsYXRpb24kMS5TaGFkb3dEb20gfHwgZGVmPy5lbmNhcHN1bGF0aW9uID09PSBWaWV3RW5jYXBzdWxhdGlvbiQxLkV4cGVyaW1lbnRhbElzb2xhdGVkU2hhZG93RG9tO1xufVxuZnVuY3Rpb24gYW5ub3RhdGVIb3N0RWxlbWVudEZvckh5ZHJhdGlvbihlbGVtZW50LCBsVmlldywgcGFyZW50RGVmZXJCbG9ja0lkLCBjb250ZXh0KSB7XG4gIGNvbnN0IHJlbmRlcmVyID0gbFZpZXdbUkVOREVSRVJdO1xuICBpZiAoaGFzSTE4bihsVmlldykgJiYgIWlzSTE4bkh5ZHJhdGlvblN1cHBvcnRFbmFibGVkKCkgfHwgY29tcG9uZW50VXNlc1NoYWRvd0RvbUVuY2Fwc3VsYXRpb24obFZpZXcpKSB7XG4gICAgcmVuZGVyZXIuc2V0QXR0cmlidXRlKGVsZW1lbnQsIFNLSVBfSFlEUkFUSU9OX0FUVFJfTkFNRSwgJycpO1xuICAgIHJldHVybiBudWxsO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IG5naCA9IHNlcmlhbGl6ZUxWaWV3KGxWaWV3LCBwYXJlbnREZWZlckJsb2NrSWQsIGNvbnRleHQpO1xuICAgIGNvbnN0IGluZGV4ID0gY29udGV4dC5zZXJpYWxpemVkVmlld0NvbGxlY3Rpb24uYWRkKG5naCk7XG4gICAgcmVuZGVyZXIuc2V0QXR0cmlidXRlKGVsZW1lbnQsIE5HSF9BVFRSX05BTUUsIGluZGV4LnRvU3RyaW5nKCkpO1xuICAgIHJldHVybiBpbmRleDtcbiAgfVxufVxuZnVuY3Rpb24gYW5ub3RhdGVEZWZlckJsb2NrQW5jaG9yRm9ySHlkcmF0aW9uKGNvbW1lbnQsIGRlZmVyQmxvY2tJZCkge1xuICBjb21tZW50LnRleHRDb250ZW50ID0gYG5naD0ke2RlZmVyQmxvY2tJZH1gO1xufVxuZnVuY3Rpb24gaW5zZXJ0Q29ycnVwdGVkVGV4dE5vZGVNYXJrZXJzKGNvcnJ1cHRlZFRleHROb2RlcywgZG9jKSB7XG4gIGZvciAoY29uc3QgW3RleHROb2RlLCBtYXJrZXJdIG9mIGNvcnJ1cHRlZFRleHROb2Rlcykge1xuICAgIHRleHROb2RlLmFmdGVyKGRvYy5jcmVhdGVDb21tZW50KG1hcmtlcikpO1xuICB9XG59XG5mdW5jdGlvbiBpc0NvbnRlbnRQcm9qZWN0ZWROb2RlKHROb2RlKSB7XG4gIGxldCBjdXJyZW50VE5vZGUgPSB0Tm9kZTtcbiAgd2hpbGUgKGN1cnJlbnRUTm9kZSAhPSBudWxsKSB7XG4gICAgaWYgKGlzQ29tcG9uZW50SG9zdChjdXJyZW50VE5vZGUpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgY3VycmVudFROb2RlID0gY3VycmVudFROb2RlLnBhcmVudDtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiBhbm5vdGF0ZURlZmVyQmxvY2tSb290Tm9kZXNXaXRoSnNBY3Rpb24odERldGFpbHMsIHJvb3ROb2RlcywgcGFyZW50RGVmZXJCbG9ja0lkLCBjb250ZXh0KSB7XG4gIGNvbnN0IGFjdGlvbkxpc3QgPSBjb252ZXJ0SHlkcmF0ZVRyaWdnZXJzVG9Kc0FjdGlvbih0RGV0YWlscy5oeWRyYXRlVHJpZ2dlcnMpO1xuICBmb3IgKGxldCBldCBvZiBhY3Rpb25MaXN0KSB7XG4gICAgY29udGV4dC5ldmVudFR5cGVzVG9SZXBsYXkucmVndWxhci5hZGQoZXQpO1xuICB9XG4gIGlmIChhY3Rpb25MaXN0Lmxlbmd0aCA+IDApIHtcbiAgICBjb25zdCBlbGVtZW50Tm9kZXMgPSByb290Tm9kZXMuZmlsdGVyKHJuID0+IHJuLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSk7XG4gICAgZm9yIChsZXQgck5vZGUgb2YgZWxlbWVudE5vZGVzKSB7XG4gICAgICBzZXRKU0FjdGlvbkF0dHJpYnV0ZXMock5vZGUsIGFjdGlvbkxpc3QsIHBhcmVudERlZmVyQmxvY2tJZCk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBib29sZWFuQXR0cmlidXRlKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJyA/IHZhbHVlIDogdmFsdWUgIT0gbnVsbCAmJiB2YWx1ZSAhPT0gJ2ZhbHNlJztcbn1cbmZ1bmN0aW9uIG51bWJlckF0dHJpYnV0ZSh2YWx1ZSwgZmFsbGJhY2tWYWx1ZSA9IE5hTikge1xuICBjb25zdCBpc051bWJlclZhbHVlID0gIWlzTmFOKHBhcnNlRmxvYXQodmFsdWUpKSAmJiAhaXNOYU4oTnVtYmVyKHZhbHVlKSk7XG4gIHJldHVybiBpc051bWJlclZhbHVlID8gTnVtYmVyKHZhbHVlKSA6IGZhbGxiYWNrVmFsdWU7XG59XG5jb25zdCBQRVJGT1JNQU5DRV9NQVJLX1BSRUZJWCA9ICfwn4Ww77iPJztcbmxldCBlbmFibGVQZXJmTG9nZ2luZyA9IGZhbHNlO1xuZnVuY3Rpb24gc3RhcnRNZWFzdXJpbmcobGFiZWwpIHtcbiAgaWYgKCFlbmFibGVQZXJmTG9nZ2luZykge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCB7XG4gICAgc3RhcnRMYWJlbFxuICB9ID0gbGFiZWxzKGxhYmVsKTtcbiAgcGVyZm9ybWFuY2UubWFyayhzdGFydExhYmVsKTtcbn1cbmZ1bmN0aW9uIHN0b3BNZWFzdXJpbmcobGFiZWwpIHtcbiAgaWYgKCFlbmFibGVQZXJmTG9nZ2luZykge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCB7XG4gICAgc3RhcnRMYWJlbCxcbiAgICBsYWJlbE5hbWUsXG4gICAgZW5kTGFiZWxcbiAgfSA9IGxhYmVscyhsYWJlbCk7XG4gIHBlcmZvcm1hbmNlLm1hcmsoZW5kTGFiZWwpO1xuICBwZXJmb3JtYW5jZS5tZWFzdXJlKGxhYmVsTmFtZSwgc3RhcnRMYWJlbCwgZW5kTGFiZWwpO1xuICBwZXJmb3JtYW5jZS5jbGVhck1hcmtzKHN0YXJ0TGFiZWwpO1xuICBwZXJmb3JtYW5jZS5jbGVhck1hcmtzKGVuZExhYmVsKTtcbn1cbmZ1bmN0aW9uIGxhYmVscyhsYWJlbCkge1xuICBjb25zdCBsYWJlbE5hbWUgPSBgJHtQRVJGT1JNQU5DRV9NQVJLX1BSRUZJWH06JHtsYWJlbH1gO1xuICByZXR1cm4ge1xuICAgIGxhYmVsTmFtZSxcbiAgICBzdGFydExhYmVsOiBgc3RhcnQ6JHtsYWJlbE5hbWV9YCxcbiAgICBlbmRMYWJlbDogYGVuZDoke2xhYmVsTmFtZX1gXG4gIH07XG59XG5sZXQgd2FybmluZ0xvZ2dlZCA9IGZhbHNlO1xuZnVuY3Rpb24gZW5hYmxlUHJvZmlsaW5nKCkge1xuICBpZiAoIXdhcm5pbmdMb2dnZWQgJiYgKHR5cGVvZiBwZXJmb3JtYW5jZSA9PT0gJ3VuZGVmaW5lZCcgfHwgIXBlcmZvcm1hbmNlLm1hcmsgfHwgIXBlcmZvcm1hbmNlLm1lYXN1cmUpKSB7XG4gICAgd2FybmluZ0xvZ2dlZCA9IHRydWU7XG4gICAgY29uc29sZS53YXJuKCdQZXJmb3JtYW5jZSBBUEkgaXMgbm90IHN1cHBvcnRlZCBvbiB0aGlzIHBsYXRmb3JtJyk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGVuYWJsZVBlcmZMb2dnaW5nID0gdHJ1ZTtcbn1cbmZ1bmN0aW9uIGRpc2FibGVQcm9maWxpbmcoKSB7XG4gIGVuYWJsZVBlcmZMb2dnaW5nID0gZmFsc2U7XG59XG5mdW5jdGlvbiDJtWFzc2VydFR5cGUodmFsdWUpIHt9XG5mdW5jdGlvbiDJtcm1bmdEZWNsYXJlRGlyZWN0aXZlKGRlY2wpIHtcbiAgY29uc3QgY29tcGlsZXIgPSBnZXRDb21waWxlckZhY2FkZSh7XG4gICAgdXNhZ2U6IDEsXG4gICAga2luZDogJ2RpcmVjdGl2ZScsXG4gICAgdHlwZTogZGVjbC50eXBlXG4gIH0pO1xuICByZXR1cm4gY29tcGlsZXIuY29tcGlsZURpcmVjdGl2ZURlY2xhcmF0aW9uKGFuZ3VsYXJDb3JlRW52LCBgbmc6Ly8vJHtkZWNsLnR5cGUubmFtZX0vybVmYWMuanNgLCBkZWNsKTtcbn1cbmZ1bmN0aW9uIMm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKGRlY2wpIHtcbiAgc2V0Q2xhc3NNZXRhZGF0YShkZWNsLnR5cGUsIGRlY2wuZGVjb3JhdG9ycywgZGVjbC5jdG9yUGFyYW1ldGVycyA/PyBudWxsLCBkZWNsLnByb3BEZWNvcmF0b3JzID8/IG51bGwpO1xufVxuZnVuY3Rpb24gybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGFBc3luYyhkZWNsKSB7XG4gIHNldENsYXNzTWV0YWRhdGFBc3luYyhkZWNsLnR5cGUsIGRlY2wucmVzb2x2ZURlZmVycmVkRGVwcywgKC4uLnR5cGVzKSA9PiB7XG4gICAgY29uc3QgbWV0YSA9IGRlY2wucmVzb2x2ZU1ldGFkYXRhKC4uLnR5cGVzKTtcbiAgICBzZXRDbGFzc01ldGFkYXRhKGRlY2wudHlwZSwgbWV0YS5kZWNvcmF0b3JzLCBtZXRhLmN0b3JQYXJhbWV0ZXJzLCBtZXRhLnByb3BEZWNvcmF0b3JzKTtcbiAgfSk7XG59XG5mdW5jdGlvbiDJtcm1bmdEZWNsYXJlQ29tcG9uZW50KGRlY2wpIHtcbiAgY29uc3QgY29tcGlsZXIgPSBnZXRDb21waWxlckZhY2FkZSh7XG4gICAgdXNhZ2U6IDEsXG4gICAga2luZDogJ2NvbXBvbmVudCcsXG4gICAgdHlwZTogZGVjbC50eXBlXG4gIH0pO1xuICByZXR1cm4gY29tcGlsZXIuY29tcGlsZUNvbXBvbmVudERlY2xhcmF0aW9uKGFuZ3VsYXJDb3JlRW52LCBgbmc6Ly8vJHtkZWNsLnR5cGUubmFtZX0vybVjbXAuanNgLCBkZWNsKTtcbn1cbmZ1bmN0aW9uIMm1ybVuZ0RlY2xhcmVGYWN0b3J5KGRlY2wpIHtcbiAgY29uc3QgY29tcGlsZXIgPSBnZXRDb21waWxlckZhY2FkZSh7XG4gICAgdXNhZ2U6IDEsXG4gICAga2luZDogZ2V0RmFjdG9yeUtpbmQoZGVjbC50YXJnZXQpLFxuICAgIHR5cGU6IGRlY2wudHlwZVxuICB9KTtcbiAgcmV0dXJuIGNvbXBpbGVyLmNvbXBpbGVGYWN0b3J5RGVjbGFyYXRpb24oYW5ndWxhckNvcmVFbnYsIGBuZzovLy8ke2RlY2wudHlwZS5uYW1lfS/JtWZhYy5qc2AsIGRlY2wpO1xufVxuZnVuY3Rpb24gZ2V0RmFjdG9yeUtpbmQodGFyZ2V0KSB7XG4gIHN3aXRjaCAodGFyZ2V0KSB7XG4gICAgY2FzZSBGYWN0b3J5VGFyZ2V0LkRpcmVjdGl2ZTpcbiAgICAgIHJldHVybiAnZGlyZWN0aXZlJztcbiAgICBjYXNlIEZhY3RvcnlUYXJnZXQuQ29tcG9uZW50OlxuICAgICAgcmV0dXJuICdjb21wb25lbnQnO1xuICAgIGNhc2UgRmFjdG9yeVRhcmdldC5JbmplY3RhYmxlOlxuICAgICAgcmV0dXJuICdpbmplY3RhYmxlJztcbiAgICBjYXNlIEZhY3RvcnlUYXJnZXQuUGlwZTpcbiAgICAgIHJldHVybiAncGlwZSc7XG4gICAgY2FzZSBGYWN0b3J5VGFyZ2V0Lk5nTW9kdWxlOlxuICAgICAgcmV0dXJuICdOZ01vZHVsZSc7XG4gIH1cbn1cbmZ1bmN0aW9uIMm1ybVuZ0RlY2xhcmVJbmplY3RhYmxlKGRlY2wpIHtcbiAgY29uc3QgY29tcGlsZXIgPSBnZXRDb21waWxlckZhY2FkZSh7XG4gICAgdXNhZ2U6IDEsXG4gICAga2luZDogJ2luamVjdGFibGUnLFxuICAgIHR5cGU6IGRlY2wudHlwZVxuICB9KTtcbiAgcmV0dXJuIGNvbXBpbGVyLmNvbXBpbGVJbmplY3RhYmxlRGVjbGFyYXRpb24oYW5ndWxhckNvcmVFbnYsIGBuZzovLy8ke2RlY2wudHlwZS5uYW1lfS/JtXByb3YuanNgLCBkZWNsKTtcbn1cbmZ1bmN0aW9uIMm1ybVuZ0RlY2xhcmVJbmplY3RvcihkZWNsKSB7XG4gIGNvbnN0IGNvbXBpbGVyID0gZ2V0Q29tcGlsZXJGYWNhZGUoe1xuICAgIHVzYWdlOiAxLFxuICAgIGtpbmQ6ICdOZ01vZHVsZScsXG4gICAgdHlwZTogZGVjbC50eXBlXG4gIH0pO1xuICByZXR1cm4gY29tcGlsZXIuY29tcGlsZUluamVjdG9yRGVjbGFyYXRpb24oYW5ndWxhckNvcmVFbnYsIGBuZzovLy8ke2RlY2wudHlwZS5uYW1lfS/JtWluai5qc2AsIGRlY2wpO1xufVxuZnVuY3Rpb24gybXJtW5nRGVjbGFyZU5nTW9kdWxlKGRlY2wpIHtcbiAgY29uc3QgY29tcGlsZXIgPSBnZXRDb21waWxlckZhY2FkZSh7XG4gICAgdXNhZ2U6IDEsXG4gICAga2luZDogJ05nTW9kdWxlJyxcbiAgICB0eXBlOiBkZWNsLnR5cGVcbiAgfSk7XG4gIHJldHVybiBjb21waWxlci5jb21waWxlTmdNb2R1bGVEZWNsYXJhdGlvbihhbmd1bGFyQ29yZUVudiwgYG5nOi8vLyR7ZGVjbC50eXBlLm5hbWV9L8m1bW9kLmpzYCwgZGVjbCk7XG59XG5mdW5jdGlvbiDJtcm1bmdEZWNsYXJlUGlwZShkZWNsKSB7XG4gIGNvbnN0IGNvbXBpbGVyID0gZ2V0Q29tcGlsZXJGYWNhZGUoe1xuICAgIHVzYWdlOiAxLFxuICAgIGtpbmQ6ICdwaXBlJyxcbiAgICB0eXBlOiBkZWNsLnR5cGVcbiAgfSk7XG4gIHJldHVybiBjb21waWxlci5jb21waWxlUGlwZURlY2xhcmF0aW9uKGFuZ3VsYXJDb3JlRW52LCBgbmc6Ly8vJHtkZWNsLnR5cGUubmFtZX0vybVwaXBlLmpzYCwgZGVjbCk7XG59XG5jb25zdCBOT1RfU0VUID0gLyogQF9fUFVSRV9fICovU3ltYm9sKCdOT1RfU0VUJyk7XG5jb25zdCBFTVBUWV9DTEVBTlVQX1NFVCA9IC8qIEBfX1BVUkVfXyAqL25ldyBTZXQoKTtcbmNvbnN0IEFGVEVSX1JFTkRFUl9QSEFTRV9FRkZFQ1RfTk9ERSA9IC8qIEBfX1BVUkVfXyAqLygoKSA9PiAoe1xuICAuLi5TSUdOQUxfTk9ERSxcbiAga2luZDogJ2FmdGVyUmVuZGVyRWZmZWN0UGhhc2UnLFxuICBjb25zdW1lcklzQWx3YXlzTGl2ZTogdHJ1ZSxcbiAgY29uc3VtZXJBbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSxcbiAgdmFsdWU6IE5PVF9TRVQsXG4gIGNsZWFudXA6IG51bGwsXG4gIGNvbnN1bWVyTWFya2VkRGlydHkoKSB7XG4gICAgaWYgKHRoaXMuc2VxdWVuY2UuaW1wbC5leGVjdXRpbmcpIHtcbiAgICAgIGlmICh0aGlzLnNlcXVlbmNlLmxhc3RQaGFzZSA9PT0gbnVsbCB8fCB0aGlzLnNlcXVlbmNlLmxhc3RQaGFzZSA8IHRoaXMucGhhc2UpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5zZXF1ZW5jZS5lcnJvcmVkT3JEZXN0cm95ZWQgPSB0cnVlO1xuICAgIH1cbiAgICB0aGlzLnNlcXVlbmNlLnNjaGVkdWxlci5ub3RpZnkoNyk7XG4gIH0sXG4gIHBoYXNlRm4ocHJldmlvdXNWYWx1ZSkge1xuICAgIHRoaXMuc2VxdWVuY2UubGFzdFBoYXNlID0gdGhpcy5waGFzZTtcbiAgICBpZiAoIXRoaXMuZGlydHkpIHtcbiAgICAgIHJldHVybiB0aGlzLnNpZ25hbDtcbiAgICB9XG4gICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuICAgIGlmICh0aGlzLnZhbHVlICE9PSBOT1RfU0VUICYmICFjb25zdW1lclBvbGxQcm9kdWNlcnNGb3JDaGFuZ2UodGhpcykpIHtcbiAgICAgIHJldHVybiB0aGlzLnNpZ25hbDtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGZvciAoY29uc3QgY2xlYW51cEZuIG9mIHRoaXMuY2xlYW51cCA/PyBFTVBUWV9DTEVBTlVQX1NFVCkge1xuICAgICAgICBjbGVhbnVwRm4oKTtcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5jbGVhbnVwPy5jbGVhcigpO1xuICAgIH1cbiAgICBjb25zdCBhcmdzID0gW107XG4gICAgaWYgKHByZXZpb3VzVmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgYXJncy5wdXNoKHByZXZpb3VzVmFsdWUpO1xuICAgIH1cbiAgICBhcmdzLnB1c2godGhpcy5yZWdpc3RlckNsZWFudXBGbik7XG4gICAgY29uc3QgcHJldkNvbnN1bWVyID0gY29uc3VtZXJCZWZvcmVDb21wdXRhdGlvbih0aGlzKTtcbiAgICBsZXQgbmV3VmFsdWU7XG4gICAgdHJ5IHtcbiAgICAgIG5ld1ZhbHVlID0gdGhpcy51c2VyRm4uYXBwbHkobnVsbCwgYXJncyk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGNvbnN1bWVyQWZ0ZXJDb21wdXRhdGlvbih0aGlzLCBwcmV2Q29uc3VtZXIpO1xuICAgIH1cbiAgICBpZiAodGhpcy52YWx1ZSA9PT0gTk9UX1NFVCB8fCAhdGhpcy5lcXVhbCh0aGlzLnZhbHVlLCBuZXdWYWx1ZSkpIHtcbiAgICAgIHRoaXMudmFsdWUgPSBuZXdWYWx1ZTtcbiAgICAgIHRoaXMudmVyc2lvbisrO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zaWduYWw7XG4gIH1cbn0pKSgpO1xuY2xhc3MgQWZ0ZXJSZW5kZXJFZmZlY3RTZXF1ZW5jZSBleHRlbmRzIEFmdGVyUmVuZGVyU2VxdWVuY2Uge1xuICBzY2hlZHVsZXI7XG4gIGxhc3RQaGFzZSA9IG51bGw7XG4gIG5vZGVzID0gW3VuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZF07XG4gIG9uRGVzdHJveUZucyA9IG51bGw7XG4gIGNvbnN0cnVjdG9yKGltcGwsIGVmZmVjdEhvb2tzLCB2aWV3LCBzY2hlZHVsZXIsIGluamVjdG9yLCBzbmFwc2hvdCA9IG51bGwpIHtcbiAgICBzdXBlcihpbXBsLCBbdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkXSwgdmlldywgZmFsc2UsIGluamVjdG9yLmdldChEZXN0cm95UmVmKSwgc25hcHNob3QpO1xuICAgIHRoaXMuc2NoZWR1bGVyID0gc2NoZWR1bGVyO1xuICAgIGZvciAoY29uc3QgcGhhc2Ugb2YgQUZURVJfUkVOREVSX1BIQVNFUykge1xuICAgICAgY29uc3QgZWZmZWN0SG9vayA9IGVmZmVjdEhvb2tzW3BoYXNlXTtcbiAgICAgIGlmIChlZmZlY3RIb29rID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCBub2RlID0gT2JqZWN0LmNyZWF0ZShBRlRFUl9SRU5ERVJfUEhBU0VfRUZGRUNUX05PREUpO1xuICAgICAgbm9kZS5zZXF1ZW5jZSA9IHRoaXM7XG4gICAgICBub2RlLnBoYXNlID0gcGhhc2U7XG4gICAgICBub2RlLnVzZXJGbiA9IGVmZmVjdEhvb2s7XG4gICAgICBub2RlLmRpcnR5ID0gdHJ1ZTtcbiAgICAgIG5vZGUuc2lnbmFsID0gKCkgPT4ge1xuICAgICAgICBwcm9kdWNlckFjY2Vzc2VkKG5vZGUpO1xuICAgICAgICByZXR1cm4gbm9kZS52YWx1ZTtcbiAgICAgIH07XG4gICAgICBub2RlLnNpZ25hbFtTSUdOQUxdID0gbm9kZTtcbiAgICAgIG5vZGUucmVnaXN0ZXJDbGVhbnVwRm4gPSBmbiA9PiAobm9kZS5jbGVhbnVwID8/PSBuZXcgU2V0KCkpLmFkZChmbik7XG4gICAgICB0aGlzLm5vZGVzW3BoYXNlXSA9IG5vZGU7XG4gICAgICB0aGlzLmhvb2tzW3BoYXNlXSA9IHZhbHVlID0+IG5vZGUucGhhc2VGbih2YWx1ZSk7XG4gICAgICBpZiAobmdEZXZNb2RlKSB7XG4gICAgICAgIHNldHVwRGVidWdJbmZvKG5vZGUsIGluamVjdG9yKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgYWZ0ZXJSdW4oKSB7XG4gICAgc3VwZXIuYWZ0ZXJSdW4oKTtcbiAgICB0aGlzLmxhc3RQaGFzZSA9IG51bGw7XG4gIH1cbiAgZGVzdHJveSgpIHtcbiAgICBpZiAodGhpcy5vbkRlc3Ryb3lGbnMgIT09IG51bGwpIHtcbiAgICAgIGZvciAoY29uc3QgZm4gb2YgdGhpcy5vbkRlc3Ryb3lGbnMpIHtcbiAgICAgICAgZm4oKTtcbiAgICAgIH1cbiAgICB9XG4gICAgc3VwZXIuZGVzdHJveSgpO1xuICAgIGZvciAoY29uc3Qgbm9kZSBvZiB0aGlzLm5vZGVzKSB7XG4gICAgICBpZiAobm9kZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGZvciAoY29uc3QgZm4gb2Ygbm9kZS5jbGVhbnVwID8/IEVNUFRZX0NMRUFOVVBfU0VUKSB7XG4gICAgICAgICAgICBmbigpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBjb25zdW1lckRlc3Ryb3kobm9kZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGFmdGVyUmVuZGVyRWZmZWN0KGNhbGxiYWNrT3JTcGVjLCBvcHRpb25zKSB7XG4gIG5nRGV2TW9kZSAmJiBhc3NlcnROb3RJblJlYWN0aXZlQ29udGV4dChhZnRlclJlbmRlckVmZmVjdCwgJ0NhbGwgYGFmdGVyUmVuZGVyRWZmZWN0YCBvdXRzaWRlIG9mIGEgcmVhY3RpdmUgY29udGV4dC4gRm9yIGV4YW1wbGUsIGNyZWF0ZSB0aGUgcmVuZGVyICcgKyAnZWZmZWN0IGluc2lkZSB0aGUgY29tcG9uZW50IGNvbnN0cnVjdG9yYC4nKTtcbiAgaWYgKG5nRGV2TW9kZSAmJiAhb3B0aW9ucz8uaW5qZWN0b3IpIHtcbiAgICBhc3NlcnRJbkluamVjdGlvbkNvbnRleHQoYWZ0ZXJSZW5kZXJFZmZlY3QpO1xuICB9XG4gIGlmICh0eXBlb2YgbmdTZXJ2ZXJNb2RlICE9PSAndW5kZWZpbmVkJyAmJiBuZ1NlcnZlck1vZGUpIHtcbiAgICByZXR1cm4gTk9PUF9BRlRFUl9SRU5ERVJfUkVGO1xuICB9XG4gIGNvbnN0IGluamVjdG9yID0gb3B0aW9ucz8uaW5qZWN0b3IgPz8gaW5qZWN0KEluamVjdG9yKTtcbiAgY29uc3Qgc2NoZWR1bGVyID0gaW5qZWN0b3IuZ2V0KENoYW5nZURldGVjdGlvblNjaGVkdWxlcik7XG4gIGNvbnN0IG1hbmFnZXIgPSBpbmplY3Rvci5nZXQoQWZ0ZXJSZW5kZXJNYW5hZ2VyKTtcbiAgY29uc3QgdHJhY2luZyA9IGluamVjdG9yLmdldChUcmFjaW5nU2VydmljZSwgbnVsbCwge1xuICAgIG9wdGlvbmFsOiB0cnVlXG4gIH0pO1xuICBtYW5hZ2VyLmltcGwgPz89IGluamVjdG9yLmdldChBZnRlclJlbmRlckltcGwpO1xuICBsZXQgc3BlYyA9IGNhbGxiYWNrT3JTcGVjO1xuICBpZiAodHlwZW9mIHNwZWMgPT09ICdmdW5jdGlvbicpIHtcbiAgICBzcGVjID0ge1xuICAgICAgbWl4ZWRSZWFkV3JpdGU6IGNhbGxiYWNrT3JTcGVjXG4gICAgfTtcbiAgfVxuICBjb25zdCB2aWV3Q29udGV4dCA9IGluamVjdG9yLmdldChWaWV3Q29udGV4dCwgbnVsbCwge1xuICAgIG9wdGlvbmFsOiB0cnVlXG4gIH0pO1xuICBjb25zdCBzZXF1ZW5jZSA9IG5ldyBBZnRlclJlbmRlckVmZmVjdFNlcXVlbmNlKG1hbmFnZXIuaW1wbCwgW3NwZWMuZWFybHlSZWFkLCBzcGVjLndyaXRlLCBzcGVjLm1peGVkUmVhZFdyaXRlLCBzcGVjLnJlYWRdLCB2aWV3Q29udGV4dD8udmlldywgc2NoZWR1bGVyLCBpbmplY3RvciwgdHJhY2luZz8uc25hcHNob3QobnVsbCkpO1xuICBtYW5hZ2VyLmltcGwucmVnaXN0ZXIoc2VxdWVuY2UpO1xuICByZXR1cm4gc2VxdWVuY2U7XG59XG5mdW5jdGlvbiBzZXR1cERlYnVnSW5mbyhub2RlLCBpbmplY3Rvcikge1xuICBub2RlLmRlYnVnTmFtZSA9IGBhZnRlclJlbmRlckVmZmVjdCAtICR7cGhhc2VEZWJ1Z05hbWUobm9kZS5waGFzZSl9IHBoYXNlYDtcbiAgY29uc3QgcHJldkluamVjdG9yUHJvZmlsZXJDb250ZXh0ID0gc2V0SW5qZWN0b3JQcm9maWxlckNvbnRleHQoe1xuICAgIGluamVjdG9yLFxuICAgIHRva2VuOiBudWxsXG4gIH0pO1xuICB0cnkge1xuICAgIGVtaXRBZnRlclJlbmRlckVmZmVjdFBoYXNlQ3JlYXRlZEV2ZW50KG5vZGUpO1xuICB9IGZpbmFsbHkge1xuICAgIHNldEluamVjdG9yUHJvZmlsZXJDb250ZXh0KHByZXZJbmplY3RvclByb2ZpbGVyQ29udGV4dCk7XG4gIH1cbn1cbmZ1bmN0aW9uIHBoYXNlRGVidWdOYW1lKHBoYXNlKSB7XG4gIHN3aXRjaCAocGhhc2UpIHtcbiAgICBjYXNlIDA6XG4gICAgICByZXR1cm4gJ0Vhcmx5UmVhZCc7XG4gICAgY2FzZSAxOlxuICAgICAgcmV0dXJuICdXcml0ZSc7XG4gICAgY2FzZSAyOlxuICAgICAgcmV0dXJuICdNaXhlZFJlYWRXcml0ZSc7XG4gICAgY2FzZSAzOlxuICAgICAgcmV0dXJuICdSZWFkJztcbiAgfVxufVxuZnVuY3Rpb24gcmVzb3VyY2VGcm9tU25hcHNob3RzKHNvdXJjZSkge1xuICByZXR1cm4gbmV3IFNuYXBzaG90UmVzb3VyY2UoaXNTaWduYWwoc291cmNlKSA/IHNvdXJjZSA6IGNvbXB1dGVkKHNvdXJjZSkpO1xufVxuY2xhc3MgU25hcHNob3RSZXNvdXJjZSB7XG4gIHNuYXBzaG90O1xuICBjb25zdHJ1Y3RvcihzbmFwc2hvdCkge1xuICAgIHRoaXMuc25hcHNob3QgPSBzbmFwc2hvdDtcbiAgfVxuICBnZXQgc3RhdGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuc25hcHNob3QoKTtcbiAgfVxuICB2YWx1ZSA9IC8qI19fUFVSRV9fKi9jb21wdXRlZCgoKSA9PiB7XG4gICAgaWYgKHRoaXMuc3RhdGUuc3RhdHVzID09PSAnZXJyb3InKSB7XG4gICAgICB0aHJvdyBuZXcgUmVzb3VyY2VWYWx1ZUVycm9yKHRoaXMuc3RhdGUuZXJyb3IpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zdGF0ZS52YWx1ZTtcbiAgfSk7XG4gIHN0YXR1cyA9IC8qI19fUFVSRV9fKi9jb21wdXRlZCgoKSA9PiB0aGlzLnN0YXRlLnN0YXR1cyk7XG4gIGVycm9yID0gLyojX19QVVJFX18qL2NvbXB1dGVkKCgpID0+IHRoaXMuc3RhdGUuc3RhdHVzID09PSAnZXJyb3InID8gdGhpcy5zdGF0ZS5lcnJvciA6IHVuZGVmaW5lZCk7XG4gIGlzTG9hZGluZyA9IC8qI19fUFVSRV9fKi9jb21wdXRlZCgoKSA9PiB0aGlzLnN0YXRlLnN0YXR1cyA9PT0gJ2xvYWRpbmcnIHx8IHRoaXMuc3RhdGUuc3RhdHVzID09PSAncmVsb2FkaW5nJyk7XG4gIGlzVmFsdWVEZWZpbmVkID0gLyojX19QVVJFX18qL2NvbXB1dGVkKCgpID0+IHRoaXMuc3RhdGUuc3RhdHVzICE9PSAnZXJyb3InICYmIHRoaXMuc3RhdGUudmFsdWUgIT09IHVuZGVmaW5lZCk7XG4gIGhhc1ZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsdWVEZWZpbmVkKCk7XG4gIH1cbn1cbmZ1bmN0aW9uIGNyZWF0ZUNvbXBvbmVudChjb21wb25lbnQsIG9wdGlvbnMpIHtcbiAgbmdEZXZNb2RlICYmIGFzc2VydENvbXBvbmVudERlZihjb21wb25lbnQpO1xuICBjb25zdCBjb21wb25lbnREZWYgPSBnZXRDb21wb25lbnREZWYoY29tcG9uZW50KTtcbiAgY29uc3QgZWxlbWVudEluamVjdG9yID0gb3B0aW9ucy5lbGVtZW50SW5qZWN0b3IgfHwgZ2V0TnVsbEluamVjdG9yKCk7XG4gIGNvbnN0IGZhY3RvcnkgPSBuZXcgQ29tcG9uZW50RmFjdG9yeShjb21wb25lbnREZWYpO1xuICByZXR1cm4gZmFjdG9yeS5jcmVhdGUoZWxlbWVudEluamVjdG9yLCBvcHRpb25zLnByb2plY3RhYmxlTm9kZXMsIG9wdGlvbnMuaG9zdEVsZW1lbnQsIG9wdGlvbnMuZW52aXJvbm1lbnRJbmplY3Rvciwgb3B0aW9ucy5kaXJlY3RpdmVzLCBvcHRpb25zLmJpbmRpbmdzKTtcbn1cbmZ1bmN0aW9uIHJlZmxlY3RDb21wb25lbnRUeXBlKGNvbXBvbmVudCkge1xuICBjb25zdCBjb21wb25lbnREZWYgPSBnZXRDb21wb25lbnREZWYoY29tcG9uZW50KTtcbiAgaWYgKCFjb21wb25lbnREZWYpIHJldHVybiBudWxsO1xuICBjb25zdCBmYWN0b3J5ID0gbmV3IENvbXBvbmVudEZhY3RvcnkoY29tcG9uZW50RGVmKTtcbiAgcmV0dXJuIHtcbiAgICBnZXQgc2VsZWN0b3IoKSB7XG4gICAgICByZXR1cm4gZmFjdG9yeS5zZWxlY3RvcjtcbiAgICB9LFxuICAgIGdldCB0eXBlKCkge1xuICAgICAgcmV0dXJuIGZhY3RvcnkuY29tcG9uZW50VHlwZTtcbiAgICB9LFxuICAgIGdldCBpbnB1dHMoKSB7XG4gICAgICByZXR1cm4gZmFjdG9yeS5pbnB1dHM7XG4gICAgfSxcbiAgICBnZXQgb3V0cHV0cygpIHtcbiAgICAgIHJldHVybiBmYWN0b3J5Lm91dHB1dHM7XG4gICAgfSxcbiAgICBnZXQgbmdDb250ZW50U2VsZWN0b3JzKCkge1xuICAgICAgcmV0dXJuIGZhY3RvcnkubmdDb250ZW50U2VsZWN0b3JzO1xuICAgIH0sXG4gICAgZ2V0IGlzU3RhbmRhbG9uZSgpIHtcbiAgICAgIHJldHVybiBjb21wb25lbnREZWYuc3RhbmRhbG9uZTtcbiAgICB9LFxuICAgIGdldCBpc1NpZ25hbCgpIHtcbiAgICAgIHJldHVybiBjb21wb25lbnREZWYuc2lnbmFscztcbiAgICB9XG4gIH07XG59XG5mdW5jdGlvbiBtZXJnZUFwcGxpY2F0aW9uQ29uZmlnKC4uLmNvbmZpZ3MpIHtcbiAgcmV0dXJuIGNvbmZpZ3MucmVkdWNlKChwcmV2LCBjdXJyKSA9PiB7XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24ocHJldiwgY3Vyciwge1xuICAgICAgcHJvdmlkZXJzOiBbLi4ucHJldi5wcm92aWRlcnMsIC4uLmN1cnIucHJvdmlkZXJzXVxuICAgIH0pO1xuICB9LCB7XG4gICAgcHJvdmlkZXJzOiBbXVxuICB9KTtcbn1cbmNvbnN0IFJFUVVFU1QgPSAvKiNfX1BVUkVfXyovbmV3IEluamVjdGlvblRva2VuKHR5cGVvZiBuZ0Rldk1vZGUgPT09ICd1bmRlZmluZWQnIHx8IG5nRGV2TW9kZSA/ICdSRVFVRVNUJyA6ICcnLCB7XG4gIHByb3ZpZGVkSW46ICdwbGF0Zm9ybScsXG4gIGZhY3Rvcnk6ICgpID0+IG51bGxcbn0pO1xuY29uc3QgUkVTUE9OU0VfSU5JVCA9IC8qI19fUFVSRV9fKi9uZXcgSW5qZWN0aW9uVG9rZW4odHlwZW9mIG5nRGV2TW9kZSA9PT0gJ3VuZGVmaW5lZCcgfHwgbmdEZXZNb2RlID8gJ1JFU1BPTlNFX0lOSVQnIDogJycsIHtcbiAgcHJvdmlkZWRJbjogJ3BsYXRmb3JtJyxcbiAgZmFjdG9yeTogKCkgPT4gbnVsbFxufSk7XG5jb25zdCBSRVFVRVNUX0NPTlRFWFQgPSAvKiNfX1BVUkVfXyovbmV3IEluamVjdGlvblRva2VuKHR5cGVvZiBuZ0Rldk1vZGUgPT09ICd1bmRlZmluZWQnIHx8IG5nRGV2TW9kZSA/ICdSRVFVRVNUX0NPTlRFWFQnIDogJycsIHtcbiAgcHJvdmlkZWRJbjogJ3BsYXRmb3JtJyxcbiAgZmFjdG9yeTogKCkgPT4gbnVsbFxufSk7XG5leHBvcnQgeyBBUFBfQk9PVFNUUkFQX0xJU1RFTkVSLCBBUFBfSUQsIEFwcGxpY2F0aW9uSW5pdFN0YXR1cywgQXBwbGljYXRpb25Nb2R1bGUsIEFwcGxpY2F0aW9uUmVmLCBDT01QSUxFUl9PUFRJT05TLCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29udGVudENoaWxkLCBDb250ZW50Q2hpbGRyZW4sIERPQ1VNRU5ULCBEZWZhdWx0SXRlcmFibGVEaWZmZXIsIERlc3Ryb3lSZWYsIEVOVklST05NRU5UX0lOSVRJQUxJWkVSLCBFbWJlZGRlZFZpZXdSZWYsIEVycm9ySGFuZGxlciwgSE9TVF9UQUdfTkFNRSwgSG9zdEF0dHJpYnV0ZVRva2VuLCBJbmplY3RhYmxlLCBJbmplY3Rpb25Ub2tlbiwgSW5qZWN0b3IsIEl0ZXJhYmxlRGlmZmVycywgS2V5VmFsdWVEaWZmZXJzLCBMT0NBTEVfSUQsIE5nTW9kdWxlLCBOZ1pvbmUsIE91dHB1dEVtaXR0ZXJSZWYsIFBMQVRGT1JNX0lOSVRJQUxJWkVSLCBQbGF0Zm9ybVJlZiwgUXVlcnksIFJFUVVFU1QsIFJFUVVFU1RfQ09OVEVYVCwgUkVTUE9OU0VfSU5JVCwgVHJhbnNmZXJTdGF0ZSwgVmlld0NoaWxkLCBWaWV3Q2hpbGRyZW4sIFZpZXdFbmNhcHN1bGF0aW9uJDEgYXMgVmlld0VuY2Fwc3VsYXRpb24sIFZpZXdSZWYsIGFmdGVyUmVuZGVyRWZmZWN0LCBhc3NlcnRJbkluamVjdGlvbkNvbnRleHQsIGFzc2VydE5vdEluUmVhY3RpdmVDb250ZXh0LCBhc3NlcnRQbGF0Zm9ybSwgYm9vbGVhbkF0dHJpYnV0ZSwgY29tcHV0ZWQsIGNvbnRlbnRDaGlsZCwgY29udGVudENoaWxkcmVuLCBjcmVhdGVDb21wb25lbnQsIGNyZWF0ZVBsYXRmb3JtLCBjcmVhdGVQbGF0Zm9ybUZhY3RvcnksIGRlc3Ryb3lQbGF0Zm9ybSwgZW5hYmxlUHJvZE1vZGUsIGdldE1vZHVsZUZhY3RvcnksIGdldE5nTW9kdWxlQnlJZCwgZ2V0UGxhdGZvcm0sIGluamVjdCwgaW5wdXQsIGlzRGV2TW9kZSwgaXNTaWduYWwsIG1ha2VFbnZpcm9ubWVudFByb3ZpZGVycywgbWVyZ2VBcHBsaWNhdGlvbkNvbmZpZywgbW9kZWwsIG51bWJlckF0dHJpYnV0ZSwgb3V0cHV0LCBwbGF0Zm9ybUNvcmUsIHByb3ZpZGVBcHBJbml0aWFsaXplciwgcHJvdmlkZUNoZWNrTm9DaGFuZ2VzQ29uZmlnLCBwcm92aWRlRW52aXJvbm1lbnRJbml0aWFsaXplciwgcHJvdmlkZVBsYXRmb3JtSW5pdGlhbGl6ZXIsIHByb3ZpZGVTdGFiaWxpdHlEZWJ1Z2dpbmcsIHByb3ZpZGVab25lQ2hhbmdlRGV0ZWN0aW9uLCByZWZsZWN0Q29tcG9uZW50VHlwZSwgcmVzb3VyY2VGcm9tU25hcHNob3RzLCBydW5JbkluamVjdGlvbkNvbnRleHQsIHZpZXdDaGlsZCwgdmlld0NoaWxkcmVuLCBBZnRlclJlbmRlck1hbmFnZXIgYXMgybVBZnRlclJlbmRlck1hbmFnZXIsIENMSUVOVF9SRU5ERVJfTU9ERV9GTEFHIGFzIMm1Q0xJRU5UX1JFTkRFUl9NT0RFX0ZMQUcsIENPTlRBSU5FUl9IRUFERVJfT0ZGU0VUIGFzIMm1Q09OVEFJTkVSX0hFQURFUl9PRkZTRVQsIENoYW5nZURldGVjdGlvblNjaGVkdWxlciBhcyDJtUNoYW5nZURldGVjdGlvblNjaGVkdWxlciwgQ29uc29sZSBhcyDJtUNvbnNvbGUsIERFRkFVTFRfTE9DQUxFX0lEIGFzIMm1REVGQVVMVF9MT0NBTEVfSUQsIERFSFlEUkFURURfQkxPQ0tfUkVHSVNUUlkgYXMgybVERUhZRFJBVEVEX0JMT0NLX1JFR0lTVFJZLCBFTkFCTEVfUk9PVF9DT01QT05FTlRfQk9PVFNUUkFQIGFzIMm1RU5BQkxFX1JPT1RfQ09NUE9ORU5UX0JPT1RTVFJBUCwgRVZFTlRfUkVQTEFZX1FVRVVFIGFzIMm1RVZFTlRfUkVQTEFZX1FVRVVFLCBGcmFtZXdvcmsgYXMgybVGcmFtZXdvcmssIElNQUdFX0NPTkZJRyBhcyDJtUlNQUdFX0NPTkZJRywgSU5KRUNUT1JfU0NPUEUgYXMgybVJTkpFQ1RPUl9TQ09QRSwgybVJTlBVVF9TSUdOQUxfQlJBTkRfV1JJVEVfVFlQRSwgSU5URVJOQUxfQVBQTElDQVRJT05fRVJST1JfSEFORExFUiBhcyDJtUlOVEVSTkFMX0FQUExJQ0FUSU9OX0VSUk9SX0hBTkRMRVIsIElTX0hZRFJBVElPTl9ET01fUkVVU0VfRU5BQkxFRCBhcyDJtUlTX0hZRFJBVElPTl9ET01fUkVVU0VfRU5BQkxFRCwgSVNfSU5DUkVNRU5UQUxfSFlEUkFUSU9OX0VOQUJMRUQgYXMgybVJU19JTkNSRU1FTlRBTF9IWURSQVRJT05fRU5BQkxFRCwgSlNBQ1RJT05fQkxPQ0tfRUxFTUVOVF9NQVAgYXMgybVKU0FDVElPTl9CTE9DS19FTEVNRU5UX01BUCwgSlNBQ1RJT05fRVZFTlRfQ09OVFJBQ1QgYXMgybVKU0FDVElPTl9FVkVOVF9DT05UUkFDVCwgTmdNb2R1bGVGYWN0b3J5IGFzIMm1TmdNb2R1bGVGYWN0b3J5LCBQRVJGT1JNQU5DRV9NQVJLX1BSRUZJWCBhcyDJtVBFUkZPUk1BTkNFX01BUktfUFJFRklYLCBQUk9WSURFRF9OR19aT05FIGFzIMm1UFJPVklERURfTkdfWk9ORSwgUFJPVklERURfWk9ORUxFU1MgYXMgybVQUk9WSURFRF9aT05FTEVTUywgUGVuZGluZ1Rhc2tzSW50ZXJuYWwgYXMgybVQZW5kaW5nVGFza3NJbnRlcm5hbCwgUHJvZmlsZXJFdmVudCBhcyDJtVByb2ZpbGVyRXZlbnQsIENvbXBvbmVudEZhY3RvcnkgYXMgybVSZW5kZXIzQ29tcG9uZW50RmFjdG9yeSwgUnVudGltZUVycm9yIGFzIMm1UnVudGltZUVycm9yLCBTSUdOQUwgYXMgybVTSUdOQUwsIFRyYWNpbmdTZXJ2aWNlIGFzIMm1VHJhY2luZ1NlcnZpY2UsIFZpZXdSZWYkMSBhcyDJtVZpZXdSZWYsIFpPTkVMRVNTX0VOQUJMRUQgYXMgybVaT05FTEVTU19FTkFCTEVELCBhbm5vdGF0ZUZvckh5ZHJhdGlvbiBhcyDJtWFubm90YXRlRm9ySHlkcmF0aW9uLCDJtWFzc2VydFR5cGUsIGNvbXBpbGVOZ01vZHVsZUZhY3RvcnkgYXMgybVjb21waWxlTmdNb2R1bGVGYWN0b3J5LCBjcmVhdGVPclJldXNlUGxhdGZvcm1JbmplY3RvciBhcyDJtWNyZWF0ZU9yUmV1c2VQbGF0Zm9ybUluamVjdG9yLCBkZWZhdWx0SXRlcmFibGVEaWZmZXJzIGFzIMm1ZGVmYXVsdEl0ZXJhYmxlRGlmZmVycywgZGVmYXVsdEtleVZhbHVlRGlmZmVycyBhcyDJtWRlZmF1bHRLZXlWYWx1ZURpZmZlcnMsIGRpc2FibGVQcm9maWxpbmcgYXMgybVkaXNhYmxlUHJvZmlsaW5nLCBlbmFibGVQcm9maWxpbmcgYXMgybVlbmFibGVQcm9maWxpbmcsIGZvcm1hdFJ1bnRpbWVFcnJvciBhcyDJtWZvcm1hdFJ1bnRpbWVFcnJvciwgZ2V0Q29tcG9uZW50RGVmIGFzIMm1Z2V0Q29tcG9uZW50RGVmLCBnZXREb2N1bWVudCBhcyDJtWdldERvY3VtZW50LCBfZ2xvYmFsIGFzIMm1Z2xvYmFsLCBpbmplY3RDaGFuZ2VEZXRlY3RvclJlZiBhcyDJtWluamVjdENoYW5nZURldGVjdG9yUmVmLCBpbnRlcm5hbENyZWF0ZUFwcGxpY2F0aW9uIGFzIMm1aW50ZXJuYWxDcmVhdGVBcHBsaWNhdGlvbiwgaW50ZXJuYWxQcm92aWRlWm9uZUNoYW5nZURldGVjdGlvbiBhcyDJtWludGVybmFsUHJvdmlkZVpvbmVDaGFuZ2VEZXRlY3Rpb24sIGlzUHJvbWlzZSBhcyDJtWlzUHJvbWlzZSwgcGVyZm9ybWFuY2VNYXJrRmVhdHVyZSBhcyDJtXBlcmZvcm1hbmNlTWFya0ZlYXR1cmUsIHByb3ZpZGVab25lbGVzc0NoYW5nZURldGVjdGlvbkludGVybmFsIGFzIMm1cHJvdmlkZVpvbmVsZXNzQ2hhbmdlRGV0ZWN0aW9uSW50ZXJuYWwsIHJlc29sdmVDb21wb25lbnRSZXNvdXJjZXMgYXMgybVyZXNvbHZlQ29tcG9uZW50UmVzb3VyY2VzLCBzZXRDbGFzc01ldGFkYXRhIGFzIMm1c2V0Q2xhc3NNZXRhZGF0YSwgc2V0Q2xhc3NNZXRhZGF0YUFzeW5jIGFzIMm1c2V0Q2xhc3NNZXRhZGF0YUFzeW5jLCBzZXRJbmplY3RvclByb2ZpbGVyQ29udGV4dCBhcyDJtXNldEluamVjdG9yUHJvZmlsZXJDb250ZXh0LCBzZXRMb2NhbGVJZCBhcyDJtXNldExvY2FsZUlkLCBzdGFydE1lYXN1cmluZyBhcyDJtXN0YXJ0TWVhc3VyaW5nLCBzdG9wTWVhc3VyaW5nIGFzIMm1c3RvcE1lYXN1cmluZywgc3RyaW5naWZ5IGFzIMm1c3RyaW5naWZ5LCB3aXRoRG9tSHlkcmF0aW9uIGFzIMm1d2l0aERvbUh5ZHJhdGlvbiwgd2l0aEV2ZW50UmVwbGF5IGFzIMm1d2l0aEV2ZW50UmVwbGF5LCB3aXRoSTE4blN1cHBvcnQgYXMgybV3aXRoSTE4blN1cHBvcnQsIHdpdGhJbmNyZW1lbnRhbEh5ZHJhdGlvbiBhcyDJtXdpdGhJbmNyZW1lbnRhbEh5ZHJhdGlvbiwgRmFjdG9yeVRhcmdldCBhcyDJtcm1RmFjdG9yeVRhcmdldCwgX19kZWZpbmVJbmplY3RhYmxlIGFzIMm1ybVkZWZpbmVJbmplY3RhYmxlLCBfX2RlZmluZUluamVjdG9yIGFzIMm1ybVkZWZpbmVJbmplY3RvciwgX19kZWZpbmVOZ01vZHVsZSBhcyDJtcm1ZGVmaW5lTmdNb2R1bGUsIF9faW5qZWN0IGFzIMm1ybVpbmplY3QsIF9faW5qZWN0QXR0cmlidXRlIGFzIMm1ybVpbmplY3RBdHRyaWJ1dGUsIMm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhLCDJtcm1bmdEZWNsYXJlQ2xhc3NNZXRhZGF0YUFzeW5jLCDJtcm1bmdEZWNsYXJlQ29tcG9uZW50LCDJtcm1bmdEZWNsYXJlRGlyZWN0aXZlLCDJtcm1bmdEZWNsYXJlRmFjdG9yeSwgybXJtW5nRGVjbGFyZUluamVjdGFibGUsIMm1ybVuZ0RlY2xhcmVJbmplY3RvciwgybXJtW5nRGVjbGFyZU5nTW9kdWxlLCDJtcm1bmdEZWNsYXJlUGlwZSB9O1xuIiwiLyoqXG4gKiBAbGljZW5zZSBBbmd1bGFyIHYyMS4yLjRcbiAqIChjKSAyMDEwLTIwMjYgR29vZ2xlIExMQy4gaHR0cHM6Ly9hbmd1bGFyLmRldi9cbiAqIExpY2Vuc2U6IE1JVFxuICovXG5cbmltcG9ydCAqIGFzIGkwIGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlLCBJbmplY3Rpb25Ub2tlbiwgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmxldCBfRE9NID0gbnVsbDtcbmZ1bmN0aW9uIGdldERPTSgpIHtcbiAgcmV0dXJuIF9ET007XG59XG5mdW5jdGlvbiBzZXRSb290RG9tQWRhcHRlcihhZGFwdGVyKSB7XG4gIF9ET00gPz89IGFkYXB0ZXI7XG59XG5jbGFzcyBEb21BZGFwdGVyIHt9XG5sZXQgUGxhdGZvcm1Mb2NhdGlvbiA9IC8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICBjbGFzcyBQbGF0Zm9ybUxvY2F0aW9uIHtcbiAgICBoaXN0b3J5R28ocmVsYXRpdmVQb3NpdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKG5nRGV2TW9kZSA/ICdOb3QgaW1wbGVtZW50ZWQnIDogJycpO1xuICAgIH1cbiAgICBzdGF0aWMgybVmYWMgPSBmdW5jdGlvbiBQbGF0Zm9ybUxvY2F0aW9uX0ZhY3RvcnkoX19uZ0ZhY3RvcnlUeXBlX18pIHtcbiAgICAgIHJldHVybiBuZXcgKF9fbmdGYWN0b3J5VHlwZV9fIHx8IFBsYXRmb3JtTG9jYXRpb24pKCk7XG4gICAgfTtcbiAgICBzdGF0aWMgybVwcm92ID0gLyogQF9fUFVSRV9fICovaTAuybXJtWRlZmluZUluamVjdGFibGUoe1xuICAgICAgdG9rZW46IFBsYXRmb3JtTG9jYXRpb24sXG4gICAgICBmYWN0b3J5OiAoKSA9PiAoKCkgPT4gaW5qZWN0KEJyb3dzZXJQbGF0Zm9ybUxvY2F0aW9uKSkoKSxcbiAgICAgIHByb3ZpZGVkSW46ICdwbGF0Zm9ybSdcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gUGxhdGZvcm1Mb2NhdGlvbjtcbn0pKCk7XG4vKiNfX1BVUkVfXyovKCgpID0+IHtcbiAgKHR5cGVvZiBuZ0Rldk1vZGUgPT09IFwidW5kZWZpbmVkXCIgfHwgbmdEZXZNb2RlKSAmJiB2b2lkIDA7XG59KSgpO1xuY29uc3QgTE9DQVRJT05fSU5JVElBTElaRUQgPSAvKiNfX1BVUkVfXyovbmV3IEluamVjdGlvblRva2VuKHR5cGVvZiBuZ0Rldk1vZGUgIT09ICd1bmRlZmluZWQnICYmIG5nRGV2TW9kZSA/ICdMb2NhdGlvbiBJbml0aWFsaXplZCcgOiAnJyk7XG5sZXQgQnJvd3NlclBsYXRmb3JtTG9jYXRpb24gPSAvKiNfX1BVUkVfXyovKCgpID0+IHtcbiAgY2xhc3MgQnJvd3NlclBsYXRmb3JtTG9jYXRpb24gZXh0ZW5kcyBQbGF0Zm9ybUxvY2F0aW9uIHtcbiAgICBfbG9jYXRpb247XG4gICAgX2hpc3Rvcnk7XG4gICAgX2RvYyA9IGluamVjdChET0NVTUVOVCk7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICBzdXBlcigpO1xuICAgICAgdGhpcy5fbG9jYXRpb24gPSB3aW5kb3cubG9jYXRpb247XG4gICAgICB0aGlzLl9oaXN0b3J5ID0gd2luZG93Lmhpc3Rvcnk7XG4gICAgfVxuICAgIGdldEJhc2VIcmVmRnJvbURPTSgpIHtcbiAgICAgIHJldHVybiBnZXRET00oKS5nZXRCYXNlSHJlZih0aGlzLl9kb2MpO1xuICAgIH1cbiAgICBvblBvcFN0YXRlKGZuKSB7XG4gICAgICBjb25zdCB3aW5kb3cgPSBnZXRET00oKS5nZXRHbG9iYWxFdmVudFRhcmdldCh0aGlzLl9kb2MsICd3aW5kb3cnKTtcbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdwb3BzdGF0ZScsIGZuLCBmYWxzZSk7XG4gICAgICByZXR1cm4gKCkgPT4gd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BvcHN0YXRlJywgZm4pO1xuICAgIH1cbiAgICBvbkhhc2hDaGFuZ2UoZm4pIHtcbiAgICAgIGNvbnN0IHdpbmRvdyA9IGdldERPTSgpLmdldEdsb2JhbEV2ZW50VGFyZ2V0KHRoaXMuX2RvYywgJ3dpbmRvdycpO1xuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2hhc2hjaGFuZ2UnLCBmbiwgZmFsc2UpO1xuICAgICAgcmV0dXJuICgpID0+IHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdoYXNoY2hhbmdlJywgZm4pO1xuICAgIH1cbiAgICBnZXQgaHJlZigpIHtcbiAgICAgIHJldHVybiB0aGlzLl9sb2NhdGlvbi5ocmVmO1xuICAgIH1cbiAgICBnZXQgcHJvdG9jb2woKSB7XG4gICAgICByZXR1cm4gdGhpcy5fbG9jYXRpb24ucHJvdG9jb2w7XG4gICAgfVxuICAgIGdldCBob3N0bmFtZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9sb2NhdGlvbi5ob3N0bmFtZTtcbiAgICB9XG4gICAgZ2V0IHBvcnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fbG9jYXRpb24ucG9ydDtcbiAgICB9XG4gICAgZ2V0IHBhdGhuYW1lKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2xvY2F0aW9uLnBhdGhuYW1lO1xuICAgIH1cbiAgICBnZXQgc2VhcmNoKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2xvY2F0aW9uLnNlYXJjaDtcbiAgICB9XG4gICAgZ2V0IGhhc2goKSB7XG4gICAgICByZXR1cm4gdGhpcy5fbG9jYXRpb24uaGFzaDtcbiAgICB9XG4gICAgc2V0IHBhdGhuYW1lKG5ld1BhdGgpIHtcbiAgICAgIHRoaXMuX2xvY2F0aW9uLnBhdGhuYW1lID0gbmV3UGF0aDtcbiAgICB9XG4gICAgcHVzaFN0YXRlKHN0YXRlLCB0aXRsZSwgdXJsKSB7XG4gICAgICB0aGlzLl9oaXN0b3J5LnB1c2hTdGF0ZShzdGF0ZSwgdGl0bGUsIHVybCk7XG4gICAgfVxuICAgIHJlcGxhY2VTdGF0ZShzdGF0ZSwgdGl0bGUsIHVybCkge1xuICAgICAgdGhpcy5faGlzdG9yeS5yZXBsYWNlU3RhdGUoc3RhdGUsIHRpdGxlLCB1cmwpO1xuICAgIH1cbiAgICBmb3J3YXJkKCkge1xuICAgICAgdGhpcy5faGlzdG9yeS5mb3J3YXJkKCk7XG4gICAgfVxuICAgIGJhY2soKSB7XG4gICAgICB0aGlzLl9oaXN0b3J5LmJhY2soKTtcbiAgICB9XG4gICAgaGlzdG9yeUdvKHJlbGF0aXZlUG9zaXRpb24gPSAwKSB7XG4gICAgICB0aGlzLl9oaXN0b3J5LmdvKHJlbGF0aXZlUG9zaXRpb24pO1xuICAgIH1cbiAgICBnZXRTdGF0ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9oaXN0b3J5LnN0YXRlO1xuICAgIH1cbiAgICBzdGF0aWMgybVmYWMgPSBmdW5jdGlvbiBCcm93c2VyUGxhdGZvcm1Mb2NhdGlvbl9GYWN0b3J5KF9fbmdGYWN0b3J5VHlwZV9fKSB7XG4gICAgICByZXR1cm4gbmV3IChfX25nRmFjdG9yeVR5cGVfXyB8fCBCcm93c2VyUGxhdGZvcm1Mb2NhdGlvbikoKTtcbiAgICB9O1xuICAgIHN0YXRpYyDJtXByb3YgPSAvKiBAX19QVVJFX18gKi9pMC7Jtcm1ZGVmaW5lSW5qZWN0YWJsZSh7XG4gICAgICB0b2tlbjogQnJvd3NlclBsYXRmb3JtTG9jYXRpb24sXG4gICAgICBmYWN0b3J5OiAoKSA9PiAoKCkgPT4gbmV3IEJyb3dzZXJQbGF0Zm9ybUxvY2F0aW9uKCkpKCksXG4gICAgICBwcm92aWRlZEluOiAncGxhdGZvcm0nXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIEJyb3dzZXJQbGF0Zm9ybUxvY2F0aW9uO1xufSkoKTtcbi8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICAodHlwZW9mIG5nRGV2TW9kZSA9PT0gXCJ1bmRlZmluZWRcIiB8fCBuZ0Rldk1vZGUpICYmIHZvaWQgMDtcbn0pKCk7XG5leHBvcnQgeyBCcm93c2VyUGxhdGZvcm1Mb2NhdGlvbiwgRG9tQWRhcHRlciwgTE9DQVRJT05fSU5JVElBTElaRUQsIFBsYXRmb3JtTG9jYXRpb24sIGdldERPTSwgc2V0Um9vdERvbUFkYXB0ZXIgfTtcbiIsIi8qKlxuICogQGxpY2Vuc2UgQW5ndWxhciB2MjEuMi40XG4gKiAoYykgMjAxMC0yMDI2IEdvb2dsZSBMTEMuIGh0dHBzOi8vYW5ndWxhci5kZXYvXG4gKiBMaWNlbnNlOiBNSVRcbiAqL1xuXG5mdW5jdGlvbiBwYXJzZUNvb2tpZVZhbHVlKGNvb2tpZVN0ciwgbmFtZSkge1xuICBuYW1lID0gZW5jb2RlVVJJQ29tcG9uZW50KG5hbWUpO1xuICBmb3IgKGNvbnN0IGNvb2tpZSBvZiBjb29raWVTdHIuc3BsaXQoJzsnKSkge1xuICAgIGNvbnN0IGVxSW5kZXggPSBjb29raWUuaW5kZXhPZignPScpO1xuICAgIGNvbnN0IFtjb29raWVOYW1lLCBjb29raWVWYWx1ZV0gPSBlcUluZGV4ID09IC0xID8gW2Nvb2tpZSwgJyddIDogW2Nvb2tpZS5zbGljZSgwLCBlcUluZGV4KSwgY29va2llLnNsaWNlKGVxSW5kZXggKyAxKV07XG4gICAgaWYgKGNvb2tpZU5hbWUudHJpbSgpID09PSBuYW1lKSB7XG4gICAgICByZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGNvb2tpZVZhbHVlKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5jbGFzcyBYaHJGYWN0b3J5IHt9XG5leHBvcnQgeyBYaHJGYWN0b3J5LCBwYXJzZUNvb2tpZVZhbHVlIH07XG4iXSwibWFwcGluZ3MiOiI7MElBQU8sUUFBUyxDQUFBQSxFQUFXQyxDQUFBLENBQU8sQ0FBQUMsY0FBQSxHQUFBQyxDQUFBLEtBQUFELENBQUEsaUJBQUFFLENBQUEsTUFDaEMsTUFBTyxPQUFPLENBQUFILENBQUEsRUFBVSxVQUMxQixFQ0ZPLFFBQVMsQ0FBQUksR0FBaUJKLENBQUEsQ0FBWSxDQUFBQyxjQUFBLEdBQUFDLENBQUEsTUFLM0MsR0FBTSxDQUFBRyxDQUFBLEVBQUFKLGNBQUEsR0FBQUUsQ0FBQSxNQUFXSCxDQUFBLENBSkZNLENBQUEsRUFBWSxDQUFBTCxjQUFBLEdBQUFDLENBQUEsS0FBQUQsQ0FBQSxpQkFBQUUsQ0FBQSxNQUN6QkksS0FBQSxDQUFNQyxJQUFBLENBQUtGLENBQVEsRUFDbkJBLENBQUEsQ0FBU0csS0FBQSxDQUFRLEdBQUksQ0FBQUYsS0FBQSxDQUFNLEVBQUVFLEtBQy9CLEVBQ2tDLEdBQ2xDUixjQUFBLEdBQUFF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 \ No newline at end of file diff --git a/frontend/dist-instrumented/chunk-RYTNMYZW.js.map b/frontend/dist-instrumented/chunk-RYTNMYZW.js.map new file mode 100644 index 00000000..b5b0855f --- /dev/null +++ b/frontend/dist-instrumented/chunk-RYTNMYZW.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["node_modules/rxjs/dist/esm/internal/util/isFunction.js","node_modules/rxjs/dist/esm/internal/util/createErrorClass.js","node_modules/rxjs/dist/esm/internal/util/UnsubscriptionError.js","node_modules/rxjs/dist/esm/internal/util/arrRemove.js","node_modules/rxjs/dist/esm/internal/Subscription.js","node_modules/rxjs/dist/esm/internal/config.js","node_modules/rxjs/dist/esm/internal/scheduler/timeoutProvider.js","node_modules/rxjs/dist/esm/internal/util/reportUnhandledError.js","node_modules/rxjs/dist/esm/internal/util/noop.js","node_modules/rxjs/dist/esm/internal/NotificationFactories.js","node_modules/rxjs/dist/esm/internal/util/errorContext.js","node_modules/rxjs/dist/esm/internal/Subscriber.js","node_modules/rxjs/dist/esm/internal/symbol/observable.js","node_modules/rxjs/dist/esm/internal/util/identity.js","node_modules/rxjs/dist/esm/internal/util/pipe.js","node_modules/rxjs/dist/esm/internal/Observable.js","node_modules/rxjs/dist/esm/internal/util/ObjectUnsubscribedError.js","node_modules/rxjs/dist/esm/internal/Subject.js","node_modules/rxjs/dist/esm/internal/BehaviorSubject.js","node_modules/rxjs/dist/esm/internal/util/isScheduler.js","node_modules/rxjs/dist/esm/internal/util/args.js","node_modules/tslib/tslib.es6.mjs","node_modules/rxjs/dist/esm/internal/util/isArrayLike.js","node_modules/rxjs/dist/esm/internal/util/isPromise.js","node_modules/rxjs/dist/esm/internal/util/isInteropObservable.js","node_modules/rxjs/dist/esm/internal/util/isAsyncIterable.js","node_modules/rxjs/dist/esm/internal/util/throwUnobservableError.js","node_modules/rxjs/dist/esm/internal/symbol/iterator.js","node_modules/rxjs/dist/esm/internal/util/isIterable.js","node_modules/rxjs/dist/esm/internal/util/isReadableStreamLike.js","node_modules/rxjs/dist/esm/internal/observable/innerFrom.js","node_modules/rxjs/dist/esm/internal/util/executeSchedule.js","node_modules/rxjs/dist/esm/internal/util/lift.js","node_modules/rxjs/dist/esm/internal/operators/OperatorSubscriber.js","node_modules/rxjs/dist/esm/internal/operators/observeOn.js","node_modules/rxjs/dist/esm/internal/operators/subscribeOn.js","node_modules/rxjs/dist/esm/internal/scheduled/scheduleObservable.js","node_modules/rxjs/dist/esm/internal/scheduled/schedulePromise.js","node_modules/rxjs/dist/esm/internal/scheduled/scheduleArray.js","node_modules/rxjs/dist/esm/internal/scheduled/scheduleIterable.js","node_modules/rxjs/dist/esm/internal/scheduled/scheduleAsyncIterable.js","node_modules/rxjs/dist/esm/internal/scheduled/scheduleReadableStreamLike.js","node_modules/rxjs/dist/esm/internal/scheduled/scheduled.js","node_modules/rxjs/dist/esm/internal/observable/from.js","node_modules/rxjs/dist/esm/internal/observable/of.js","node_modules/rxjs/dist/esm/internal/operators/map.js","node_modules/rxjs/dist/esm/internal/operators/mergeInternals.js","node_modules/rxjs/dist/esm/internal/operators/mergeMap.js","node_modules/rxjs/dist/esm/internal/util/mapOneOrManyArgs.js","node_modules/rxjs/dist/esm/internal/observable/fromEvent.js","node_modules/rxjs/dist/esm/internal/operators/filter.js","node_modules/rxjs/dist/esm/internal/operators/catchError.js","node_modules/rxjs/dist/esm/internal/observable/empty.js","node_modules/rxjs/dist/esm/internal/operators/take.js","node_modules/rxjs/dist/esm/internal/operators/finalize.js","node_modules/rxjs/dist/esm/internal/operators/mergeAll.js","node_modules/rxjs/dist/esm/internal/operators/concatAll.js","node_modules/rxjs/dist/esm/internal/observable/concat.js","node_modules/rxjs/dist/esm/internal/operators/startWith.js","node_modules/rxjs/dist/esm/internal/operators/switchMap.js","node_modules/rxjs/dist/esm/internal/operators/takeUntil.js","node_modules/rxjs/dist/esm/internal/operators/tap.js","node_modules/rxjs/dist/esm/internal/scheduler/dateTimestampProvider.js","node_modules/rxjs/dist/esm/internal/ReplaySubject.js","node_modules/rxjs/dist/esm/internal/scheduler/Action.js","node_modules/rxjs/dist/esm/internal/scheduler/intervalProvider.js","node_modules/rxjs/dist/esm/internal/scheduler/AsyncAction.js","node_modules/rxjs/dist/esm/internal/Scheduler.js","node_modules/rxjs/dist/esm/internal/scheduler/AsyncScheduler.js","node_modules/rxjs/dist/esm/internal/scheduler/async.js","node_modules/rxjs/dist/esm/internal/observable/throwError.js","node_modules/rxjs/dist/esm/internal/util/isObservable.js","node_modules/rxjs/dist/esm/internal/util/EmptyError.js","node_modules/rxjs/dist/esm/internal/util/isDate.js","node_modules/rxjs/dist/esm/internal/operators/timeout.js","node_modules/rxjs/dist/esm/internal/util/argsArgArrayOrObject.js","node_modules/rxjs/dist/esm/internal/util/createObject.js","node_modules/rxjs/dist/esm/internal/observable/combineLatest.js","node_modules/rxjs/dist/esm/internal/observable/defer.js","node_modules/rxjs/dist/esm/internal/observable/forkJoin.js","node_modules/rxjs/dist/esm/internal/observable/timer.js","node_modules/rxjs/dist/esm/internal/observable/interval.js","node_modules/rxjs/dist/esm/internal/operators/concatMap.js","node_modules/rxjs/dist/esm/internal/operators/defaultIfEmpty.js","node_modules/rxjs/dist/esm/internal/operators/distinctUntilChanged.js","node_modules/rxjs/dist/esm/internal/operators/throwIfEmpty.js","node_modules/rxjs/dist/esm/internal/operators/first.js","node_modules/rxjs/dist/esm/internal/operators/takeLast.js","node_modules/rxjs/dist/esm/internal/operators/share.js","node_modules/rxjs/dist/esm/internal/operators/shareReplay.js","node_modules/@angular/core/fesm2022/_effect-chunk.mjs","node_modules/@angular/core/fesm2022/_not_found-chunk.mjs","node_modules/@angular/core/fesm2022/_untracked-chunk.mjs","node_modules/@angular/core/fesm2022/_effect-chunk2.mjs","node_modules/@angular/core/fesm2022/_debug_node-chunk.mjs","node_modules/@angular/core/fesm2022/_resource-chunk.mjs","node_modules/@angular/core/fesm2022/core.mjs","node_modules/@angular/common/fesm2022/_platform_location-chunk.mjs","node_modules/@angular/common/fesm2022/_xhr-chunk.mjs"],"sourcesContent":["export function isFunction(value) {\n return typeof value === 'function';\n}\n","export function createErrorClass(createImpl) {\n const _super = instance => {\n Error.call(instance);\n instance.stack = new Error().stack;\n };\n const ctorFunc = createImpl(_super);\n ctorFunc.prototype = Object.create(Error.prototype);\n ctorFunc.prototype.constructor = ctorFunc;\n return ctorFunc;\n}\n","import { createErrorClass } from './createErrorClass';\nexport const UnsubscriptionError = createErrorClass(_super => function UnsubscriptionErrorImpl(errors) {\n _super(this);\n this.message = errors ? `${errors.length} errors occurred during unsubscription:\n${errors.map((err, i) => `${i + 1}) ${err.toString()}`).join('\\n ')}` : '';\n this.name = 'UnsubscriptionError';\n this.errors = errors;\n});\n","export function arrRemove(arr, item) {\n if (arr) {\n const index = arr.indexOf(item);\n 0 <= index && arr.splice(index, 1);\n }\n}\n","import { isFunction } from './util/isFunction';\nimport { UnsubscriptionError } from './util/UnsubscriptionError';\nimport { arrRemove } from './util/arrRemove';\nexport class Subscription {\n constructor(initialTeardown) {\n this.initialTeardown = initialTeardown;\n this.closed = false;\n this._parentage = null;\n this._finalizers = null;\n }\n unsubscribe() {\n let errors;\n if (!this.closed) {\n this.closed = true;\n const {\n _parentage\n } = this;\n if (_parentage) {\n this._parentage = null;\n if (Array.isArray(_parentage)) {\n for (const parent of _parentage) {\n parent.remove(this);\n }\n } else {\n _parentage.remove(this);\n }\n }\n const {\n initialTeardown: initialFinalizer\n } = this;\n if (isFunction(initialFinalizer)) {\n try {\n initialFinalizer();\n } catch (e) {\n errors = e instanceof UnsubscriptionError ? e.errors : [e];\n }\n }\n const {\n _finalizers\n } = this;\n if (_finalizers) {\n this._finalizers = null;\n for (const finalizer of _finalizers) {\n try {\n execFinalizer(finalizer);\n } catch (err) {\n errors = errors !== null && errors !== void 0 ? errors : [];\n if (err instanceof UnsubscriptionError) {\n errors = [...errors, ...err.errors];\n } else {\n errors.push(err);\n }\n }\n }\n }\n if (errors) {\n throw new UnsubscriptionError(errors);\n }\n }\n }\n add(teardown) {\n var _a;\n if (teardown && teardown !== this) {\n if (this.closed) {\n execFinalizer(teardown);\n } else {\n if (teardown instanceof Subscription) {\n if (teardown.closed || teardown._hasParent(this)) {\n return;\n }\n teardown._addParent(this);\n }\n (this._finalizers = (_a = this._finalizers) !== null && _a !== void 0 ? _a : []).push(teardown);\n }\n }\n }\n _hasParent(parent) {\n const {\n _parentage\n } = this;\n return _parentage === parent || Array.isArray(_parentage) && _parentage.includes(parent);\n }\n _addParent(parent) {\n const {\n _parentage\n } = this;\n this._parentage = Array.isArray(_parentage) ? (_parentage.push(parent), _parentage) : _parentage ? [_parentage, parent] : parent;\n }\n _removeParent(parent) {\n const {\n _parentage\n } = this;\n if (_parentage === parent) {\n this._parentage = null;\n } else if (Array.isArray(_parentage)) {\n arrRemove(_parentage, parent);\n }\n }\n remove(teardown) {\n const {\n _finalizers\n } = this;\n _finalizers && arrRemove(_finalizers, teardown);\n if (teardown instanceof Subscription) {\n teardown._removeParent(this);\n }\n }\n}\nSubscription.EMPTY = (() => {\n const empty = new Subscription();\n empty.closed = true;\n return empty;\n})();\nexport const EMPTY_SUBSCRIPTION = Subscription.EMPTY;\nexport function isSubscription(value) {\n return value instanceof Subscription || value && 'closed' in value && isFunction(value.remove) && isFunction(value.add) && isFunction(value.unsubscribe);\n}\nfunction execFinalizer(finalizer) {\n if (isFunction(finalizer)) {\n finalizer();\n } else {\n finalizer.unsubscribe();\n }\n}\n","export const config = {\n onUnhandledError: null,\n onStoppedNotification: null,\n Promise: undefined,\n useDeprecatedSynchronousErrorHandling: false,\n useDeprecatedNextContext: false\n};\n","export const timeoutProvider = {\n setTimeout(handler, timeout, ...args) {\n const {\n delegate\n } = timeoutProvider;\n if (delegate === null || delegate === void 0 ? void 0 : delegate.setTimeout) {\n return delegate.setTimeout(handler, timeout, ...args);\n }\n return setTimeout(handler, timeout, ...args);\n },\n clearTimeout(handle) {\n const {\n delegate\n } = timeoutProvider;\n return ((delegate === null || delegate === void 0 ? void 0 : delegate.clearTimeout) || clearTimeout)(handle);\n },\n delegate: undefined\n};\n","import { config } from '../config';\nimport { timeoutProvider } from '../scheduler/timeoutProvider';\nexport function reportUnhandledError(err) {\n timeoutProvider.setTimeout(() => {\n const {\n onUnhandledError\n } = config;\n if (onUnhandledError) {\n onUnhandledError(err);\n } else {\n throw err;\n }\n });\n}\n","export function noop() {}\n","export const COMPLETE_NOTIFICATION = (() => createNotification('C', undefined, undefined))();\nexport function errorNotification(error) {\n return createNotification('E', undefined, error);\n}\nexport function nextNotification(value) {\n return createNotification('N', value, undefined);\n}\nexport function createNotification(kind, value, error) {\n return {\n kind,\n value,\n error\n };\n}\n","import { config } from '../config';\nlet context = null;\nexport function errorContext(cb) {\n if (config.useDeprecatedSynchronousErrorHandling) {\n const isRoot = !context;\n if (isRoot) {\n context = {\n errorThrown: false,\n error: null\n };\n }\n cb();\n if (isRoot) {\n const {\n errorThrown,\n error\n } = context;\n context = null;\n if (errorThrown) {\n throw error;\n }\n }\n } else {\n cb();\n }\n}\nexport function captureError(err) {\n if (config.useDeprecatedSynchronousErrorHandling && context) {\n context.errorThrown = true;\n context.error = err;\n }\n}\n","import { isFunction } from './util/isFunction';\nimport { isSubscription, Subscription } from './Subscription';\nimport { config } from './config';\nimport { reportUnhandledError } from './util/reportUnhandledError';\nimport { noop } from './util/noop';\nimport { nextNotification, errorNotification, COMPLETE_NOTIFICATION } from './NotificationFactories';\nimport { timeoutProvider } from './scheduler/timeoutProvider';\nimport { captureError } from './util/errorContext';\nexport class Subscriber extends Subscription {\n constructor(destination) {\n super();\n this.isStopped = false;\n if (destination) {\n this.destination = destination;\n if (isSubscription(destination)) {\n destination.add(this);\n }\n } else {\n this.destination = EMPTY_OBSERVER;\n }\n }\n static create(next, error, complete) {\n return new SafeSubscriber(next, error, complete);\n }\n next(value) {\n if (this.isStopped) {\n handleStoppedNotification(nextNotification(value), this);\n } else {\n this._next(value);\n }\n }\n error(err) {\n if (this.isStopped) {\n handleStoppedNotification(errorNotification(err), this);\n } else {\n this.isStopped = true;\n this._error(err);\n }\n }\n complete() {\n if (this.isStopped) {\n handleStoppedNotification(COMPLETE_NOTIFICATION, this);\n } else {\n this.isStopped = true;\n this._complete();\n }\n }\n unsubscribe() {\n if (!this.closed) {\n this.isStopped = true;\n super.unsubscribe();\n this.destination = null;\n }\n }\n _next(value) {\n this.destination.next(value);\n }\n _error(err) {\n try {\n this.destination.error(err);\n } finally {\n this.unsubscribe();\n }\n }\n _complete() {\n try {\n this.destination.complete();\n } finally {\n this.unsubscribe();\n }\n }\n}\nconst _bind = Function.prototype.bind;\nfunction bind(fn, thisArg) {\n return _bind.call(fn, thisArg);\n}\nclass ConsumerObserver {\n constructor(partialObserver) {\n this.partialObserver = partialObserver;\n }\n next(value) {\n const {\n partialObserver\n } = this;\n if (partialObserver.next) {\n try {\n partialObserver.next(value);\n } catch (error) {\n handleUnhandledError(error);\n }\n }\n }\n error(err) {\n const {\n partialObserver\n } = this;\n if (partialObserver.error) {\n try {\n partialObserver.error(err);\n } catch (error) {\n handleUnhandledError(error);\n }\n } else {\n handleUnhandledError(err);\n }\n }\n complete() {\n const {\n partialObserver\n } = this;\n if (partialObserver.complete) {\n try {\n partialObserver.complete();\n } catch (error) {\n handleUnhandledError(error);\n }\n }\n }\n}\nexport class SafeSubscriber extends Subscriber {\n constructor(observerOrNext, error, complete) {\n super();\n let partialObserver;\n if (isFunction(observerOrNext) || !observerOrNext) {\n partialObserver = {\n next: observerOrNext !== null && observerOrNext !== void 0 ? observerOrNext : undefined,\n error: error !== null && error !== void 0 ? error : undefined,\n complete: complete !== null && complete !== void 0 ? complete : undefined\n };\n } else {\n let context;\n if (this && config.useDeprecatedNextContext) {\n context = Object.create(observerOrNext);\n context.unsubscribe = () => this.unsubscribe();\n partialObserver = {\n next: observerOrNext.next && bind(observerOrNext.next, context),\n error: observerOrNext.error && bind(observerOrNext.error, context),\n complete: observerOrNext.complete && bind(observerOrNext.complete, context)\n };\n } else {\n partialObserver = observerOrNext;\n }\n }\n this.destination = new ConsumerObserver(partialObserver);\n }\n}\nfunction handleUnhandledError(error) {\n if (config.useDeprecatedSynchronousErrorHandling) {\n captureError(error);\n } else {\n reportUnhandledError(error);\n }\n}\nfunction defaultErrorHandler(err) {\n throw err;\n}\nfunction handleStoppedNotification(notification, subscriber) {\n const {\n onStoppedNotification\n } = config;\n onStoppedNotification && timeoutProvider.setTimeout(() => onStoppedNotification(notification, subscriber));\n}\nexport const EMPTY_OBSERVER = {\n closed: true,\n next: noop,\n error: defaultErrorHandler,\n complete: noop\n};\n","export const observable = (() => typeof Symbol === 'function' && Symbol.observable || '@@observable')();\n","export function identity(x) {\n return x;\n}\n","import { identity } from './identity';\nexport function pipe(...fns) {\n return pipeFromArray(fns);\n}\nexport function pipeFromArray(fns) {\n if (fns.length === 0) {\n return identity;\n }\n if (fns.length === 1) {\n return fns[0];\n }\n return function piped(input) {\n return fns.reduce((prev, fn) => fn(prev), input);\n };\n}\n","import { SafeSubscriber, Subscriber } from './Subscriber';\nimport { isSubscription } from './Subscription';\nimport { observable as Symbol_observable } from './symbol/observable';\nimport { pipeFromArray } from './util/pipe';\nimport { config } from './config';\nimport { isFunction } from './util/isFunction';\nimport { errorContext } from './util/errorContext';\nexport let Observable = /*#__PURE__*/(() => {\n class Observable {\n constructor(subscribe) {\n if (subscribe) {\n this._subscribe = subscribe;\n }\n }\n lift(operator) {\n const observable = new Observable();\n observable.source = this;\n observable.operator = operator;\n return observable;\n }\n subscribe(observerOrNext, error, complete) {\n const subscriber = isSubscriber(observerOrNext) ? observerOrNext : new SafeSubscriber(observerOrNext, error, complete);\n errorContext(() => {\n const {\n operator,\n source\n } = this;\n subscriber.add(operator ? operator.call(subscriber, source) : source ? this._subscribe(subscriber) : this._trySubscribe(subscriber));\n });\n return subscriber;\n }\n _trySubscribe(sink) {\n try {\n return this._subscribe(sink);\n } catch (err) {\n sink.error(err);\n }\n }\n forEach(next, promiseCtor) {\n promiseCtor = getPromiseCtor(promiseCtor);\n return new promiseCtor((resolve, reject) => {\n const subscriber = new SafeSubscriber({\n next: value => {\n try {\n next(value);\n } catch (err) {\n reject(err);\n subscriber.unsubscribe();\n }\n },\n error: reject,\n complete: resolve\n });\n this.subscribe(subscriber);\n });\n }\n _subscribe(subscriber) {\n var _a;\n return (_a = this.source) === null || _a === void 0 ? void 0 : _a.subscribe(subscriber);\n }\n [Symbol_observable]() {\n return this;\n }\n pipe(...operations) {\n return pipeFromArray(operations)(this);\n }\n toPromise(promiseCtor) {\n promiseCtor = getPromiseCtor(promiseCtor);\n return new promiseCtor((resolve, reject) => {\n let value;\n this.subscribe(x => value = x, err => reject(err), () => resolve(value));\n });\n }\n }\n Observable.create = subscribe => {\n return new Observable(subscribe);\n };\n return Observable;\n})();\nfunction getPromiseCtor(promiseCtor) {\n var _a;\n return (_a = promiseCtor !== null && promiseCtor !== void 0 ? promiseCtor : config.Promise) !== null && _a !== void 0 ? _a : Promise;\n}\nfunction isObserver(value) {\n return value && isFunction(value.next) && isFunction(value.error) && isFunction(value.complete);\n}\nfunction isSubscriber(value) {\n return value && value instanceof Subscriber || isObserver(value) && isSubscription(value);\n}\n","import { createErrorClass } from './createErrorClass';\nexport const ObjectUnsubscribedError = createErrorClass(_super => function ObjectUnsubscribedErrorImpl() {\n _super(this);\n this.name = 'ObjectUnsubscribedError';\n this.message = 'object unsubscribed';\n});\n","import { Observable } from './Observable';\nimport { Subscription, EMPTY_SUBSCRIPTION } from './Subscription';\nimport { ObjectUnsubscribedError } from './util/ObjectUnsubscribedError';\nimport { arrRemove } from './util/arrRemove';\nimport { errorContext } from './util/errorContext';\nexport let Subject = /*#__PURE__*/(() => {\n class Subject extends Observable {\n constructor() {\n super();\n this.closed = false;\n this.currentObservers = null;\n this.observers = [];\n this.isStopped = false;\n this.hasError = false;\n this.thrownError = null;\n }\n lift(operator) {\n const subject = new AnonymousSubject(this, this);\n subject.operator = operator;\n return subject;\n }\n _throwIfClosed() {\n if (this.closed) {\n throw new ObjectUnsubscribedError();\n }\n }\n next(value) {\n errorContext(() => {\n this._throwIfClosed();\n if (!this.isStopped) {\n if (!this.currentObservers) {\n this.currentObservers = Array.from(this.observers);\n }\n for (const observer of this.currentObservers) {\n observer.next(value);\n }\n }\n });\n }\n error(err) {\n errorContext(() => {\n this._throwIfClosed();\n if (!this.isStopped) {\n this.hasError = this.isStopped = true;\n this.thrownError = err;\n const {\n observers\n } = this;\n while (observers.length) {\n observers.shift().error(err);\n }\n }\n });\n }\n complete() {\n errorContext(() => {\n this._throwIfClosed();\n if (!this.isStopped) {\n this.isStopped = true;\n const {\n observers\n } = this;\n while (observers.length) {\n observers.shift().complete();\n }\n }\n });\n }\n unsubscribe() {\n this.isStopped = this.closed = true;\n this.observers = this.currentObservers = null;\n }\n get observed() {\n var _a;\n return ((_a = this.observers) === null || _a === void 0 ? void 0 : _a.length) > 0;\n }\n _trySubscribe(subscriber) {\n this._throwIfClosed();\n return super._trySubscribe(subscriber);\n }\n _subscribe(subscriber) {\n this._throwIfClosed();\n this._checkFinalizedStatuses(subscriber);\n return this._innerSubscribe(subscriber);\n }\n _innerSubscribe(subscriber) {\n const {\n hasError,\n isStopped,\n observers\n } = this;\n if (hasError || isStopped) {\n return EMPTY_SUBSCRIPTION;\n }\n this.currentObservers = null;\n observers.push(subscriber);\n return new Subscription(() => {\n this.currentObservers = null;\n arrRemove(observers, subscriber);\n });\n }\n _checkFinalizedStatuses(subscriber) {\n const {\n hasError,\n thrownError,\n isStopped\n } = this;\n if (hasError) {\n subscriber.error(thrownError);\n } else if (isStopped) {\n subscriber.complete();\n }\n }\n asObservable() {\n const observable = new Observable();\n observable.source = this;\n return observable;\n }\n }\n Subject.create = (destination, source) => {\n return new AnonymousSubject(destination, source);\n };\n return Subject;\n})();\nexport class AnonymousSubject extends Subject {\n constructor(destination, source) {\n super();\n this.destination = destination;\n this.source = source;\n }\n next(value) {\n var _a, _b;\n (_b = (_a = this.destination) === null || _a === void 0 ? void 0 : _a.next) === null || _b === void 0 ? void 0 : _b.call(_a, value);\n }\n error(err) {\n var _a, _b;\n (_b = (_a = this.destination) === null || _a === void 0 ? void 0 : _a.error) === null || _b === void 0 ? void 0 : _b.call(_a, err);\n }\n complete() {\n var _a, _b;\n (_b = (_a = this.destination) === null || _a === void 0 ? void 0 : _a.complete) === null || _b === void 0 ? void 0 : _b.call(_a);\n }\n _subscribe(subscriber) {\n var _a, _b;\n return (_b = (_a = this.source) === null || _a === void 0 ? void 0 : _a.subscribe(subscriber)) !== null && _b !== void 0 ? _b : EMPTY_SUBSCRIPTION;\n }\n}\n","import { Subject } from './Subject';\nexport class BehaviorSubject extends Subject {\n constructor(_value) {\n super();\n this._value = _value;\n }\n get value() {\n return this.getValue();\n }\n _subscribe(subscriber) {\n const subscription = super._subscribe(subscriber);\n !subscription.closed && subscriber.next(this._value);\n return subscription;\n }\n getValue() {\n const {\n hasError,\n thrownError,\n _value\n } = this;\n if (hasError) {\n throw thrownError;\n }\n this._throwIfClosed();\n return _value;\n }\n next(value) {\n super.next(this._value = value);\n }\n}\n","import { isFunction } from './isFunction';\nexport function isScheduler(value) {\n return value && isFunction(value.schedule);\n}\n","import { isFunction } from './isFunction';\nimport { isScheduler } from './isScheduler';\nfunction last(arr) {\n return arr[arr.length - 1];\n}\nexport function popResultSelector(args) {\n return isFunction(last(args)) ? args.pop() : undefined;\n}\nexport function popScheduler(args) {\n return isScheduler(last(args)) ? args.pop() : undefined;\n}\nexport function popNumber(args, defaultValue) {\n return typeof last(args) === 'number' ? args.pop() : defaultValue;\n}\n","/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\n\nvar extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf || {\n __proto__: []\n } instanceof Array && function (d, b) {\n d.__proto__ = b;\n } || function (d, b) {\n for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p];\n };\n return extendStatics(d, b);\n};\nexport function __extends(d, b) {\n if (typeof b !== \"function\" && b !== null) throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() {\n this.constructor = d;\n }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\nexport var __assign = function () {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nexport function __rest(s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n}\nexport function __decorate(decorators, target, key, desc) {\n var c = arguments.length,\n r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,\n d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\nexport function __param(paramIndex, decorator) {\n return function (target, key) {\n decorator(target, key, paramIndex);\n };\n}\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n function accept(f) {\n if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\");\n return f;\n }\n var kind = contextIn.kind,\n key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n var _,\n done = false;\n for (var i = decorators.length - 1; i >= 0; i--) {\n var context = {};\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n context.addInitializer = function (f) {\n if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\");\n extraInitializers.push(accept(f || null));\n };\n var result = (0, decorators[i])(kind === \"accessor\" ? {\n get: descriptor.get,\n set: descriptor.set\n } : descriptor[key], context);\n if (kind === \"accessor\") {\n if (result === void 0) continue;\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n if (_ = accept(result.get)) descriptor.get = _;\n if (_ = accept(result.set)) descriptor.set = _;\n if (_ = accept(result.init)) initializers.unshift(_);\n } else if (_ = accept(result)) {\n if (kind === \"field\") initializers.unshift(_);else descriptor[key] = _;\n }\n }\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\n done = true;\n}\n;\nexport function __runInitializers(thisArg, initializers, value) {\n var useValue = arguments.length > 2;\n for (var i = 0; i < initializers.length; i++) {\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n }\n return useValue ? value : void 0;\n}\n;\nexport function __propKey(x) {\n return typeof x === \"symbol\" ? x : \"\".concat(x);\n}\n;\nexport function __setFunctionName(f, name, prefix) {\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n return Object.defineProperty(f, \"name\", {\n configurable: true,\n value: prefix ? \"\".concat(prefix, \" \", name) : name\n });\n}\n;\nexport function __metadata(metadataKey, metadataValue) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\nexport function __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) {\n return value instanceof P ? value : new P(function (resolve) {\n resolve(value);\n });\n }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) {\n try {\n step(generator.next(value));\n } catch (e) {\n reject(e);\n }\n }\n function rejected(value) {\n try {\n step(generator[\"throw\"](value));\n } catch (e) {\n reject(e);\n }\n }\n function step(result) {\n result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);\n }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\nexport function __generator(thisArg, body) {\n var _ = {\n label: 0,\n sent: function () {\n if (t[0] & 1) throw t[1];\n return t[1];\n },\n trys: [],\n ops: []\n },\n f,\n y,\n t,\n g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function () {\n return this;\n }), g;\n function verb(n) {\n return function (v) {\n return step([n, v]);\n };\n }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0:\n case 1:\n t = op;\n break;\n case 4:\n _.label++;\n return {\n value: op[1],\n done: false\n };\n case 5:\n _.label++;\n y = op[1];\n op = [0];\n continue;\n case 7:\n op = _.ops.pop();\n _.trys.pop();\n continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {\n _ = 0;\n continue;\n }\n if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {\n _.label = op[1];\n break;\n }\n if (op[0] === 6 && _.label < t[1]) {\n _.label = t[1];\n t = op;\n break;\n }\n if (t && _.label < t[2]) {\n _.label = t[2];\n _.ops.push(op);\n break;\n }\n if (t[2]) _.ops.pop();\n _.trys.pop();\n continue;\n }\n op = body.call(thisArg, _);\n } catch (e) {\n op = [6, e];\n y = 0;\n } finally {\n f = t = 0;\n }\n if (op[0] & 5) throw op[1];\n return {\n value: op[0] ? op[1] : void 0,\n done: true\n };\n }\n}\nexport var __createBinding = Object.create ? function (o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = {\n enumerable: true,\n get: function () {\n return m[k];\n }\n };\n }\n Object.defineProperty(o, k2, desc);\n} : function (o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n};\nexport function __exportStar(m, o) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\nexport function __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator,\n m = s && o[s],\n i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return {\n value: o && o[i++],\n done: !o\n };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\nexport function __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o),\n r,\n ar = [],\n e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n } catch (error) {\n e = {\n error: error\n };\n } finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n } finally {\n if (e) throw e.error;\n }\n }\n return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i]));\n return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++) for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) r[k] = a[j];\n return r;\n}\nexport function __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n}\nexport function __await(v) {\n return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []),\n i,\n q = [];\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () {\n return this;\n }, i;\n function awaitReturn(f) {\n return function (v) {\n return Promise.resolve(v).then(f, reject);\n };\n }\n function verb(n, f) {\n if (g[n]) {\n i[n] = function (v) {\n return new Promise(function (a, b) {\n q.push([n, v, a, b]) > 1 || resume(n, v);\n });\n };\n if (f) i[n] = f(i[n]);\n }\n }\n function resume(n, v) {\n try {\n step(g[n](v));\n } catch (e) {\n settle(q[0][3], e);\n }\n }\n function step(r) {\n r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r);\n }\n function fulfill(value) {\n resume(\"next\", value);\n }\n function reject(value) {\n resume(\"throw\", value);\n }\n function settle(f, v) {\n if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]);\n }\n}\nexport function __asyncDelegator(o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) {\n throw e;\n }), verb(\"return\"), i[Symbol.iterator] = function () {\n return this;\n }, i;\n function verb(n, f) {\n i[n] = o[n] ? function (v) {\n return (p = !p) ? {\n value: __await(o[n](v)),\n done: false\n } : f ? f(v) : v;\n } : f;\n }\n}\nexport function __asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator],\n i;\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () {\n return this;\n }, i);\n function verb(n) {\n i[n] = o[n] && function (v) {\n return new Promise(function (resolve, reject) {\n v = o[n](v), settle(resolve, reject, v.done, v.value);\n });\n };\n }\n function settle(resolve, reject, d, v) {\n Promise.resolve(v).then(function (v) {\n resolve({\n value: v,\n done: d\n });\n }, reject);\n }\n}\nexport function __makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) {\n Object.defineProperty(cooked, \"raw\", {\n value: raw\n });\n } else {\n cooked.raw = raw;\n }\n return cooked;\n}\n;\nvar __setModuleDefault = Object.create ? function (o, v) {\n Object.defineProperty(o, \"default\", {\n enumerable: true,\n value: v\n });\n} : function (o, v) {\n o[\"default\"] = v;\n};\nvar ownKeys = function (o) {\n ownKeys = Object.getOwnPropertyNames || function (o) {\n var ar = [];\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n return ar;\n };\n return ownKeys(o);\n};\nexport function __importStar(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n __setModuleDefault(result, mod);\n return result;\n}\nexport function __importDefault(mod) {\n return mod && mod.__esModule ? mod : {\n default: mod\n };\n}\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value), value;\n}\nexport function __classPrivateFieldIn(state, receiver) {\n if (receiver === null || typeof receiver !== \"object\" && typeof receiver !== \"function\") throw new TypeError(\"Cannot use 'in' operator on non-object\");\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\nexport function __addDisposableResource(env, value, async) {\n if (value !== null && value !== void 0) {\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n var dispose, inner;\n if (async) {\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n dispose = value[Symbol.asyncDispose];\n }\n if (dispose === void 0) {\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n dispose = value[Symbol.dispose];\n if (async) inner = dispose;\n }\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n if (inner) dispose = function () {\n try {\n inner.call(this);\n } catch (e) {\n return Promise.reject(e);\n }\n };\n env.stack.push({\n value: value,\n dispose: dispose,\n async: async\n });\n } else if (async) {\n env.stack.push({\n async: true\n });\n }\n return value;\n}\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n var e = new Error(message);\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\nexport function __disposeResources(env) {\n function fail(e) {\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n env.hasError = true;\n }\n var r,\n s = 0;\n function next() {\n while (r = env.stack.pop()) {\n try {\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\n if (r.dispose) {\n var result = r.dispose.call(r.value);\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function (e) {\n fail(e);\n return next();\n });\n } else s |= 1;\n } catch (e) {\n fail(e);\n }\n }\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\n if (env.hasError) throw env.error;\n }\n return next();\n}\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : d + ext + \".\" + cm.toLowerCase() + \"js\";\n });\n }\n return path;\n}\nexport default {\n __extends,\n __assign,\n __rest,\n __decorate,\n __param,\n __esDecorate,\n __runInitializers,\n __propKey,\n __setFunctionName,\n __metadata,\n __awaiter,\n __generator,\n __createBinding,\n __exportStar,\n __values,\n __read,\n __spread,\n __spreadArrays,\n __spreadArray,\n __await,\n __asyncGenerator,\n __asyncDelegator,\n __asyncValues,\n __makeTemplateObject,\n __importStar,\n __importDefault,\n __classPrivateFieldGet,\n __classPrivateFieldSet,\n __classPrivateFieldIn,\n __addDisposableResource,\n __disposeResources,\n __rewriteRelativeImportExtension\n};","export const isArrayLike = x => x && typeof x.length === 'number' && typeof x !== 'function';\n","import { isFunction } from \"./isFunction\";\nexport function isPromise(value) {\n return isFunction(value === null || value === void 0 ? void 0 : value.then);\n}\n","import { observable as Symbol_observable } from '../symbol/observable';\nimport { isFunction } from './isFunction';\nexport function isInteropObservable(input) {\n return isFunction(input[Symbol_observable]);\n}\n","import { isFunction } from './isFunction';\nexport function isAsyncIterable(obj) {\n return Symbol.asyncIterator && isFunction(obj === null || obj === void 0 ? void 0 : obj[Symbol.asyncIterator]);\n}\n","export function createInvalidObservableTypeError(input) {\n return new TypeError(`You provided ${input !== null && typeof input === 'object' ? 'an invalid object' : `'${input}'`} where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.`);\n}\n","export function getSymbolIterator() {\n if (typeof Symbol !== 'function' || !Symbol.iterator) {\n return '@@iterator';\n }\n return Symbol.iterator;\n}\nexport const iterator = getSymbolIterator();\n","import { iterator as Symbol_iterator } from '../symbol/iterator';\nimport { isFunction } from './isFunction';\nexport function isIterable(input) {\n return isFunction(input === null || input === void 0 ? void 0 : input[Symbol_iterator]);\n}\n","import { __asyncGenerator, __await } from \"tslib\";\nimport { isFunction } from './isFunction';\nexport function readableStreamLikeToAsyncGenerator(readableStream) {\n return __asyncGenerator(this, arguments, function* readableStreamLikeToAsyncGenerator_1() {\n const reader = readableStream.getReader();\n try {\n while (true) {\n const {\n value,\n done\n } = yield __await(reader.read());\n if (done) {\n return yield __await(void 0);\n }\n yield yield __await(value);\n }\n } finally {\n reader.releaseLock();\n }\n });\n}\nexport function isReadableStreamLike(obj) {\n return isFunction(obj === null || obj === void 0 ? void 0 : obj.getReader);\n}\n","import { __asyncValues, __awaiter } from \"tslib\";\nimport { isArrayLike } from '../util/isArrayLike';\nimport { isPromise } from '../util/isPromise';\nimport { Observable } from '../Observable';\nimport { isInteropObservable } from '../util/isInteropObservable';\nimport { isAsyncIterable } from '../util/isAsyncIterable';\nimport { createInvalidObservableTypeError } from '../util/throwUnobservableError';\nimport { isIterable } from '../util/isIterable';\nimport { isReadableStreamLike, readableStreamLikeToAsyncGenerator } from '../util/isReadableStreamLike';\nimport { isFunction } from '../util/isFunction';\nimport { reportUnhandledError } from '../util/reportUnhandledError';\nimport { observable as Symbol_observable } from '../symbol/observable';\nexport function innerFrom(input) {\n if (input instanceof Observable) {\n return input;\n }\n if (input != null) {\n if (isInteropObservable(input)) {\n return fromInteropObservable(input);\n }\n if (isArrayLike(input)) {\n return fromArrayLike(input);\n }\n if (isPromise(input)) {\n return fromPromise(input);\n }\n if (isAsyncIterable(input)) {\n return fromAsyncIterable(input);\n }\n if (isIterable(input)) {\n return fromIterable(input);\n }\n if (isReadableStreamLike(input)) {\n return fromReadableStreamLike(input);\n }\n }\n throw createInvalidObservableTypeError(input);\n}\nexport function fromInteropObservable(obj) {\n return new Observable(subscriber => {\n const obs = obj[Symbol_observable]();\n if (isFunction(obs.subscribe)) {\n return obs.subscribe(subscriber);\n }\n throw new TypeError('Provided object does not correctly implement Symbol.observable');\n });\n}\nexport function fromArrayLike(array) {\n return new Observable(subscriber => {\n for (let i = 0; i < array.length && !subscriber.closed; i++) {\n subscriber.next(array[i]);\n }\n subscriber.complete();\n });\n}\nexport function fromPromise(promise) {\n return new Observable(subscriber => {\n promise.then(value => {\n if (!subscriber.closed) {\n subscriber.next(value);\n subscriber.complete();\n }\n }, err => subscriber.error(err)).then(null, reportUnhandledError);\n });\n}\nexport function fromIterable(iterable) {\n return new Observable(subscriber => {\n for (const value of iterable) {\n subscriber.next(value);\n if (subscriber.closed) {\n return;\n }\n }\n subscriber.complete();\n });\n}\nexport function fromAsyncIterable(asyncIterable) {\n return new Observable(subscriber => {\n process(asyncIterable, subscriber).catch(err => subscriber.error(err));\n });\n}\nexport function fromReadableStreamLike(readableStream) {\n return fromAsyncIterable(readableStreamLikeToAsyncGenerator(readableStream));\n}\nfunction process(asyncIterable, subscriber) {\n var asyncIterable_1, asyncIterable_1_1;\n var e_1, _a;\n return __awaiter(this, void 0, void 0, function* () {\n try {\n for (asyncIterable_1 = __asyncValues(asyncIterable); asyncIterable_1_1 = yield asyncIterable_1.next(), !asyncIterable_1_1.done;) {\n const value = asyncIterable_1_1.value;\n subscriber.next(value);\n if (subscriber.closed) {\n return;\n }\n }\n } catch (e_1_1) {\n e_1 = {\n error: e_1_1\n };\n } finally {\n try {\n if (asyncIterable_1_1 && !asyncIterable_1_1.done && (_a = asyncIterable_1.return)) yield _a.call(asyncIterable_1);\n } finally {\n if (e_1) throw e_1.error;\n }\n }\n subscriber.complete();\n });\n}\n","export function executeSchedule(parentSubscription, scheduler, work, delay = 0, repeat = false) {\n const scheduleSubscription = scheduler.schedule(function () {\n work();\n if (repeat) {\n parentSubscription.add(this.schedule(null, delay));\n } else {\n this.unsubscribe();\n }\n }, delay);\n parentSubscription.add(scheduleSubscription);\n if (!repeat) {\n return scheduleSubscription;\n }\n}\n","import { isFunction } from './isFunction';\nexport function hasLift(source) {\n return isFunction(source === null || source === void 0 ? void 0 : source.lift);\n}\nexport function operate(init) {\n return source => {\n if (hasLift(source)) {\n return source.lift(function (liftedSource) {\n try {\n return init(liftedSource, this);\n } catch (err) {\n this.error(err);\n }\n });\n }\n throw new TypeError('Unable to lift unknown Observable type');\n };\n}\n","import { Subscriber } from '../Subscriber';\nexport function createOperatorSubscriber(destination, onNext, onComplete, onError, onFinalize) {\n return new OperatorSubscriber(destination, onNext, onComplete, onError, onFinalize);\n}\nexport class OperatorSubscriber extends Subscriber {\n constructor(destination, onNext, onComplete, onError, onFinalize, shouldUnsubscribe) {\n super(destination);\n this.onFinalize = onFinalize;\n this.shouldUnsubscribe = shouldUnsubscribe;\n this._next = onNext ? function (value) {\n try {\n onNext(value);\n } catch (err) {\n destination.error(err);\n }\n } : super._next;\n this._error = onError ? function (err) {\n try {\n onError(err);\n } catch (err) {\n destination.error(err);\n } finally {\n this.unsubscribe();\n }\n } : super._error;\n this._complete = onComplete ? function () {\n try {\n onComplete();\n } catch (err) {\n destination.error(err);\n } finally {\n this.unsubscribe();\n }\n } : super._complete;\n }\n unsubscribe() {\n var _a;\n if (!this.shouldUnsubscribe || this.shouldUnsubscribe()) {\n const {\n closed\n } = this;\n super.unsubscribe();\n !closed && ((_a = this.onFinalize) === null || _a === void 0 ? void 0 : _a.call(this));\n }\n }\n}\n","import { executeSchedule } from '../util/executeSchedule';\nimport { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function observeOn(scheduler, delay = 0) {\n return operate((source, subscriber) => {\n source.subscribe(createOperatorSubscriber(subscriber, value => executeSchedule(subscriber, scheduler, () => subscriber.next(value), delay), () => executeSchedule(subscriber, scheduler, () => subscriber.complete(), delay), err => executeSchedule(subscriber, scheduler, () => subscriber.error(err), delay)));\n });\n}\n","import { operate } from '../util/lift';\nexport function subscribeOn(scheduler, delay = 0) {\n return operate((source, subscriber) => {\n subscriber.add(scheduler.schedule(() => source.subscribe(subscriber), delay));\n });\n}\n","import { innerFrom } from '../observable/innerFrom';\nimport { observeOn } from '../operators/observeOn';\nimport { subscribeOn } from '../operators/subscribeOn';\nexport function scheduleObservable(input, scheduler) {\n return innerFrom(input).pipe(subscribeOn(scheduler), observeOn(scheduler));\n}\n","import { innerFrom } from '../observable/innerFrom';\nimport { observeOn } from '../operators/observeOn';\nimport { subscribeOn } from '../operators/subscribeOn';\nexport function schedulePromise(input, scheduler) {\n return innerFrom(input).pipe(subscribeOn(scheduler), observeOn(scheduler));\n}\n","import { Observable } from '../Observable';\nexport function scheduleArray(input, scheduler) {\n return new Observable(subscriber => {\n let i = 0;\n return scheduler.schedule(function () {\n if (i === input.length) {\n subscriber.complete();\n } else {\n subscriber.next(input[i++]);\n if (!subscriber.closed) {\n this.schedule();\n }\n }\n });\n });\n}\n","import { Observable } from '../Observable';\nimport { iterator as Symbol_iterator } from '../symbol/iterator';\nimport { isFunction } from '../util/isFunction';\nimport { executeSchedule } from '../util/executeSchedule';\nexport function scheduleIterable(input, scheduler) {\n return new Observable(subscriber => {\n let iterator;\n executeSchedule(subscriber, scheduler, () => {\n iterator = input[Symbol_iterator]();\n executeSchedule(subscriber, scheduler, () => {\n let value;\n let done;\n try {\n ({\n value,\n done\n } = iterator.next());\n } catch (err) {\n subscriber.error(err);\n return;\n }\n if (done) {\n subscriber.complete();\n } else {\n subscriber.next(value);\n }\n }, 0, true);\n });\n return () => isFunction(iterator === null || iterator === void 0 ? void 0 : iterator.return) && iterator.return();\n });\n}\n","import { Observable } from '../Observable';\nimport { executeSchedule } from '../util/executeSchedule';\nexport function scheduleAsyncIterable(input, scheduler) {\n if (!input) {\n throw new Error('Iterable cannot be null');\n }\n return new Observable(subscriber => {\n executeSchedule(subscriber, scheduler, () => {\n const iterator = input[Symbol.asyncIterator]();\n executeSchedule(subscriber, scheduler, () => {\n iterator.next().then(result => {\n if (result.done) {\n subscriber.complete();\n } else {\n subscriber.next(result.value);\n }\n });\n }, 0, true);\n });\n });\n}\n","import { scheduleAsyncIterable } from './scheduleAsyncIterable';\nimport { readableStreamLikeToAsyncGenerator } from '../util/isReadableStreamLike';\nexport function scheduleReadableStreamLike(input, scheduler) {\n return scheduleAsyncIterable(readableStreamLikeToAsyncGenerator(input), scheduler);\n}\n","import { scheduleObservable } from './scheduleObservable';\nimport { schedulePromise } from './schedulePromise';\nimport { scheduleArray } from './scheduleArray';\nimport { scheduleIterable } from './scheduleIterable';\nimport { scheduleAsyncIterable } from './scheduleAsyncIterable';\nimport { isInteropObservable } from '../util/isInteropObservable';\nimport { isPromise } from '../util/isPromise';\nimport { isArrayLike } from '../util/isArrayLike';\nimport { isIterable } from '../util/isIterable';\nimport { isAsyncIterable } from '../util/isAsyncIterable';\nimport { createInvalidObservableTypeError } from '../util/throwUnobservableError';\nimport { isReadableStreamLike } from '../util/isReadableStreamLike';\nimport { scheduleReadableStreamLike } from './scheduleReadableStreamLike';\nexport function scheduled(input, scheduler) {\n if (input != null) {\n if (isInteropObservable(input)) {\n return scheduleObservable(input, scheduler);\n }\n if (isArrayLike(input)) {\n return scheduleArray(input, scheduler);\n }\n if (isPromise(input)) {\n return schedulePromise(input, scheduler);\n }\n if (isAsyncIterable(input)) {\n return scheduleAsyncIterable(input, scheduler);\n }\n if (isIterable(input)) {\n return scheduleIterable(input, scheduler);\n }\n if (isReadableStreamLike(input)) {\n return scheduleReadableStreamLike(input, scheduler);\n }\n }\n throw createInvalidObservableTypeError(input);\n}\n","import { scheduled } from '../scheduled/scheduled';\nimport { innerFrom } from './innerFrom';\nexport function from(input, scheduler) {\n return scheduler ? scheduled(input, scheduler) : innerFrom(input);\n}\n","import { popScheduler } from '../util/args';\nimport { from } from './from';\nexport function of(...args) {\n const scheduler = popScheduler(args);\n return from(args, scheduler);\n}\n","import { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function map(project, thisArg) {\n return operate((source, subscriber) => {\n let index = 0;\n source.subscribe(createOperatorSubscriber(subscriber, value => {\n subscriber.next(project.call(thisArg, value, index++));\n }));\n });\n}\n","import { innerFrom } from '../observable/innerFrom';\nimport { executeSchedule } from '../util/executeSchedule';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function mergeInternals(source, subscriber, project, concurrent, onBeforeNext, expand, innerSubScheduler, additionalFinalizer) {\n const buffer = [];\n let active = 0;\n let index = 0;\n let isComplete = false;\n const checkComplete = () => {\n if (isComplete && !buffer.length && !active) {\n subscriber.complete();\n }\n };\n const outerNext = value => active < concurrent ? doInnerSub(value) : buffer.push(value);\n const doInnerSub = value => {\n expand && subscriber.next(value);\n active++;\n let innerComplete = false;\n innerFrom(project(value, index++)).subscribe(createOperatorSubscriber(subscriber, innerValue => {\n onBeforeNext === null || onBeforeNext === void 0 ? void 0 : onBeforeNext(innerValue);\n if (expand) {\n outerNext(innerValue);\n } else {\n subscriber.next(innerValue);\n }\n }, () => {\n innerComplete = true;\n }, undefined, () => {\n if (innerComplete) {\n try {\n active--;\n while (buffer.length && active < concurrent) {\n const bufferedValue = buffer.shift();\n if (innerSubScheduler) {\n executeSchedule(subscriber, innerSubScheduler, () => doInnerSub(bufferedValue));\n } else {\n doInnerSub(bufferedValue);\n }\n }\n checkComplete();\n } catch (err) {\n subscriber.error(err);\n }\n }\n }));\n };\n source.subscribe(createOperatorSubscriber(subscriber, outerNext, () => {\n isComplete = true;\n checkComplete();\n }));\n return () => {\n additionalFinalizer === null || additionalFinalizer === void 0 ? void 0 : additionalFinalizer();\n };\n}\n","import { map } from './map';\nimport { innerFrom } from '../observable/innerFrom';\nimport { operate } from '../util/lift';\nimport { mergeInternals } from './mergeInternals';\nimport { isFunction } from '../util/isFunction';\nexport function mergeMap(project, resultSelector, concurrent = Infinity) {\n if (isFunction(resultSelector)) {\n return mergeMap((a, i) => map((b, ii) => resultSelector(a, b, i, ii))(innerFrom(project(a, i))), concurrent);\n } else if (typeof resultSelector === 'number') {\n concurrent = resultSelector;\n }\n return operate((source, subscriber) => mergeInternals(source, subscriber, project, concurrent));\n}\n","import { map } from \"../operators/map\";\nconst {\n isArray\n} = Array;\nfunction callOrApply(fn, args) {\n return isArray(args) ? fn(...args) : fn(args);\n}\nexport function mapOneOrManyArgs(fn) {\n return map(args => callOrApply(fn, args));\n}\n","import { innerFrom } from '../observable/innerFrom';\nimport { Observable } from '../Observable';\nimport { mergeMap } from '../operators/mergeMap';\nimport { isArrayLike } from '../util/isArrayLike';\nimport { isFunction } from '../util/isFunction';\nimport { mapOneOrManyArgs } from '../util/mapOneOrManyArgs';\nconst nodeEventEmitterMethods = ['addListener', 'removeListener'];\nconst eventTargetMethods = ['addEventListener', 'removeEventListener'];\nconst jqueryMethods = ['on', 'off'];\nexport function fromEvent(target, eventName, options, resultSelector) {\n if (isFunction(options)) {\n resultSelector = options;\n options = undefined;\n }\n if (resultSelector) {\n return fromEvent(target, eventName, options).pipe(mapOneOrManyArgs(resultSelector));\n }\n const [add, remove] = isEventTarget(target) ? eventTargetMethods.map(methodName => handler => target[methodName](eventName, handler, options)) : isNodeStyleEventEmitter(target) ? nodeEventEmitterMethods.map(toCommonHandlerRegistry(target, eventName)) : isJQueryStyleEventEmitter(target) ? jqueryMethods.map(toCommonHandlerRegistry(target, eventName)) : [];\n if (!add) {\n if (isArrayLike(target)) {\n return mergeMap(subTarget => fromEvent(subTarget, eventName, options))(innerFrom(target));\n }\n }\n if (!add) {\n throw new TypeError('Invalid event target');\n }\n return new Observable(subscriber => {\n const handler = (...args) => subscriber.next(1 < args.length ? args : args[0]);\n add(handler);\n return () => remove(handler);\n });\n}\nfunction toCommonHandlerRegistry(target, eventName) {\n return methodName => handler => target[methodName](eventName, handler);\n}\nfunction isNodeStyleEventEmitter(target) {\n return isFunction(target.addListener) && isFunction(target.removeListener);\n}\nfunction isJQueryStyleEventEmitter(target) {\n return isFunction(target.on) && isFunction(target.off);\n}\nfunction isEventTarget(target) {\n return isFunction(target.addEventListener) && isFunction(target.removeEventListener);\n}\n","import { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function filter(predicate, thisArg) {\n return operate((source, subscriber) => {\n let index = 0;\n source.subscribe(createOperatorSubscriber(subscriber, value => predicate.call(thisArg, value, index++) && subscriber.next(value)));\n });\n}\n","import { innerFrom } from '../observable/innerFrom';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nimport { operate } from '../util/lift';\nexport function catchError(selector) {\n return operate((source, subscriber) => {\n let innerSub = null;\n let syncUnsub = false;\n let handledResult;\n innerSub = source.subscribe(createOperatorSubscriber(subscriber, undefined, undefined, err => {\n handledResult = innerFrom(selector(err, catchError(selector)(source)));\n if (innerSub) {\n innerSub.unsubscribe();\n innerSub = null;\n handledResult.subscribe(subscriber);\n } else {\n syncUnsub = true;\n }\n }));\n if (syncUnsub) {\n innerSub.unsubscribe();\n innerSub = null;\n handledResult.subscribe(subscriber);\n }\n });\n}\n","import { Observable } from '../Observable';\nexport const EMPTY = new Observable(subscriber => subscriber.complete());\nexport function empty(scheduler) {\n return scheduler ? emptyScheduled(scheduler) : EMPTY;\n}\nfunction emptyScheduled(scheduler) {\n return new Observable(subscriber => scheduler.schedule(() => subscriber.complete()));\n}\n","import { EMPTY } from '../observable/empty';\nimport { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function take(count) {\n return count <= 0 ? () => EMPTY : operate((source, subscriber) => {\n let seen = 0;\n source.subscribe(createOperatorSubscriber(subscriber, value => {\n if (++seen <= count) {\n subscriber.next(value);\n if (count <= seen) {\n subscriber.complete();\n }\n }\n }));\n });\n}\n","import { operate } from '../util/lift';\nexport function finalize(callback) {\n return operate((source, subscriber) => {\n try {\n source.subscribe(subscriber);\n } finally {\n subscriber.add(callback);\n }\n });\n}\n","import { mergeMap } from './mergeMap';\nimport { identity } from '../util/identity';\nexport function mergeAll(concurrent = Infinity) {\n return mergeMap(identity, concurrent);\n}\n","import { mergeAll } from './mergeAll';\nexport function concatAll() {\n return mergeAll(1);\n}\n","import { concatAll } from '../operators/concatAll';\nimport { popScheduler } from '../util/args';\nimport { from } from './from';\nexport function concat(...args) {\n return concatAll()(from(args, popScheduler(args)));\n}\n","import { concat } from '../observable/concat';\nimport { popScheduler } from '../util/args';\nimport { operate } from '../util/lift';\nexport function startWith(...values) {\n const scheduler = popScheduler(values);\n return operate((source, subscriber) => {\n (scheduler ? concat(values, source, scheduler) : concat(values, source)).subscribe(subscriber);\n });\n}\n","import { innerFrom } from '../observable/innerFrom';\nimport { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function switchMap(project, resultSelector) {\n return operate((source, subscriber) => {\n let innerSubscriber = null;\n let index = 0;\n let isComplete = false;\n const checkComplete = () => isComplete && !innerSubscriber && subscriber.complete();\n source.subscribe(createOperatorSubscriber(subscriber, value => {\n innerSubscriber === null || innerSubscriber === void 0 ? void 0 : innerSubscriber.unsubscribe();\n let innerIndex = 0;\n const outerIndex = index++;\n innerFrom(project(value, outerIndex)).subscribe(innerSubscriber = createOperatorSubscriber(subscriber, innerValue => subscriber.next(resultSelector ? resultSelector(value, innerValue, outerIndex, innerIndex++) : innerValue), () => {\n innerSubscriber = null;\n checkComplete();\n }));\n }, () => {\n isComplete = true;\n checkComplete();\n }));\n });\n}\n","import { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nimport { innerFrom } from '../observable/innerFrom';\nimport { noop } from '../util/noop';\nexport function takeUntil(notifier) {\n return operate((source, subscriber) => {\n innerFrom(notifier).subscribe(createOperatorSubscriber(subscriber, () => subscriber.complete(), noop));\n !subscriber.closed && source.subscribe(subscriber);\n });\n}\n","import { isFunction } from '../util/isFunction';\nimport { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nimport { identity } from '../util/identity';\nexport function tap(observerOrNext, error, complete) {\n const tapObserver = isFunction(observerOrNext) || error || complete ? {\n next: observerOrNext,\n error,\n complete\n } : observerOrNext;\n return tapObserver ? operate((source, subscriber) => {\n var _a;\n (_a = tapObserver.subscribe) === null || _a === void 0 ? void 0 : _a.call(tapObserver);\n let isUnsub = true;\n source.subscribe(createOperatorSubscriber(subscriber, value => {\n var _a;\n (_a = tapObserver.next) === null || _a === void 0 ? void 0 : _a.call(tapObserver, value);\n subscriber.next(value);\n }, () => {\n var _a;\n isUnsub = false;\n (_a = tapObserver.complete) === null || _a === void 0 ? void 0 : _a.call(tapObserver);\n subscriber.complete();\n }, err => {\n var _a;\n isUnsub = false;\n (_a = tapObserver.error) === null || _a === void 0 ? void 0 : _a.call(tapObserver, err);\n subscriber.error(err);\n }, () => {\n var _a, _b;\n if (isUnsub) {\n (_a = tapObserver.unsubscribe) === null || _a === void 0 ? void 0 : _a.call(tapObserver);\n }\n (_b = tapObserver.finalize) === null || _b === void 0 ? void 0 : _b.call(tapObserver);\n }));\n }) : identity;\n}\n","export const dateTimestampProvider = {\n now() {\n return (dateTimestampProvider.delegate || Date).now();\n },\n delegate: undefined\n};\n","import { Subject } from './Subject';\nimport { dateTimestampProvider } from './scheduler/dateTimestampProvider';\nexport class ReplaySubject extends Subject {\n constructor(_bufferSize = Infinity, _windowTime = Infinity, _timestampProvider = dateTimestampProvider) {\n super();\n this._bufferSize = _bufferSize;\n this._windowTime = _windowTime;\n this._timestampProvider = _timestampProvider;\n this._buffer = [];\n this._infiniteTimeWindow = true;\n this._infiniteTimeWindow = _windowTime === Infinity;\n this._bufferSize = Math.max(1, _bufferSize);\n this._windowTime = Math.max(1, _windowTime);\n }\n next(value) {\n const {\n isStopped,\n _buffer,\n _infiniteTimeWindow,\n _timestampProvider,\n _windowTime\n } = this;\n if (!isStopped) {\n _buffer.push(value);\n !_infiniteTimeWindow && _buffer.push(_timestampProvider.now() + _windowTime);\n }\n this._trimBuffer();\n super.next(value);\n }\n _subscribe(subscriber) {\n this._throwIfClosed();\n this._trimBuffer();\n const subscription = this._innerSubscribe(subscriber);\n const {\n _infiniteTimeWindow,\n _buffer\n } = this;\n const copy = _buffer.slice();\n for (let i = 0; i < copy.length && !subscriber.closed; i += _infiniteTimeWindow ? 1 : 2) {\n subscriber.next(copy[i]);\n }\n this._checkFinalizedStatuses(subscriber);\n return subscription;\n }\n _trimBuffer() {\n const {\n _bufferSize,\n _timestampProvider,\n _buffer,\n _infiniteTimeWindow\n } = this;\n const adjustedBufferSize = (_infiniteTimeWindow ? 1 : 2) * _bufferSize;\n _bufferSize < Infinity && adjustedBufferSize < _buffer.length && _buffer.splice(0, _buffer.length - adjustedBufferSize);\n if (!_infiniteTimeWindow) {\n const now = _timestampProvider.now();\n let last = 0;\n for (let i = 1; i < _buffer.length && _buffer[i] <= now; i += 2) {\n last = i;\n }\n last && _buffer.splice(0, last + 1);\n }\n }\n}\n","import { Subscription } from '../Subscription';\nexport class Action extends Subscription {\n constructor(scheduler, work) {\n super();\n }\n schedule(state, delay = 0) {\n return this;\n }\n}\n","export const intervalProvider = {\n setInterval(handler, timeout, ...args) {\n const {\n delegate\n } = intervalProvider;\n if (delegate === null || delegate === void 0 ? void 0 : delegate.setInterval) {\n return delegate.setInterval(handler, timeout, ...args);\n }\n return setInterval(handler, timeout, ...args);\n },\n clearInterval(handle) {\n const {\n delegate\n } = intervalProvider;\n return ((delegate === null || delegate === void 0 ? void 0 : delegate.clearInterval) || clearInterval)(handle);\n },\n delegate: undefined\n};\n","import { Action } from './Action';\nimport { intervalProvider } from './intervalProvider';\nimport { arrRemove } from '../util/arrRemove';\nexport class AsyncAction extends Action {\n constructor(scheduler, work) {\n super(scheduler, work);\n this.scheduler = scheduler;\n this.work = work;\n this.pending = false;\n }\n schedule(state, delay = 0) {\n var _a;\n if (this.closed) {\n return this;\n }\n this.state = state;\n const id = this.id;\n const scheduler = this.scheduler;\n if (id != null) {\n this.id = this.recycleAsyncId(scheduler, id, delay);\n }\n this.pending = true;\n this.delay = delay;\n this.id = (_a = this.id) !== null && _a !== void 0 ? _a : this.requestAsyncId(scheduler, this.id, delay);\n return this;\n }\n requestAsyncId(scheduler, _id, delay = 0) {\n return intervalProvider.setInterval(scheduler.flush.bind(scheduler, this), delay);\n }\n recycleAsyncId(_scheduler, id, delay = 0) {\n if (delay != null && this.delay === delay && this.pending === false) {\n return id;\n }\n if (id != null) {\n intervalProvider.clearInterval(id);\n }\n return undefined;\n }\n execute(state, delay) {\n if (this.closed) {\n return new Error('executing a cancelled action');\n }\n this.pending = false;\n const error = this._execute(state, delay);\n if (error) {\n return error;\n } else if (this.pending === false && this.id != null) {\n this.id = this.recycleAsyncId(this.scheduler, this.id, null);\n }\n }\n _execute(state, _delay) {\n let errored = false;\n let errorValue;\n try {\n this.work(state);\n } catch (e) {\n errored = true;\n errorValue = e ? e : new Error('Scheduled action threw falsy error');\n }\n if (errored) {\n this.unsubscribe();\n return errorValue;\n }\n }\n unsubscribe() {\n if (!this.closed) {\n const {\n id,\n scheduler\n } = this;\n const {\n actions\n } = scheduler;\n this.work = this.state = this.scheduler = null;\n this.pending = false;\n arrRemove(actions, this);\n if (id != null) {\n this.id = this.recycleAsyncId(scheduler, id, null);\n }\n this.delay = null;\n super.unsubscribe();\n }\n }\n}\n","import { dateTimestampProvider } from './scheduler/dateTimestampProvider';\nexport class Scheduler {\n constructor(schedulerActionCtor, now = Scheduler.now) {\n this.schedulerActionCtor = schedulerActionCtor;\n this.now = now;\n }\n schedule(work, delay = 0, state) {\n return new this.schedulerActionCtor(this, work).schedule(state, delay);\n }\n}\nScheduler.now = dateTimestampProvider.now;\n","import { Scheduler } from '../Scheduler';\nexport class AsyncScheduler extends Scheduler {\n constructor(SchedulerAction, now = Scheduler.now) {\n super(SchedulerAction, now);\n this.actions = [];\n this._active = false;\n }\n flush(action) {\n const {\n actions\n } = this;\n if (this._active) {\n actions.push(action);\n return;\n }\n let error;\n this._active = true;\n do {\n if (error = action.execute(action.state, action.delay)) {\n break;\n }\n } while (action = actions.shift());\n this._active = false;\n if (error) {\n while (action = actions.shift()) {\n action.unsubscribe();\n }\n throw error;\n }\n }\n}\n","import { AsyncAction } from './AsyncAction';\nimport { AsyncScheduler } from './AsyncScheduler';\nexport const asyncScheduler = new AsyncScheduler(AsyncAction);\nexport const async = asyncScheduler;\n","import { Observable } from '../Observable';\nimport { isFunction } from '../util/isFunction';\nexport function throwError(errorOrErrorFactory, scheduler) {\n const errorFactory = isFunction(errorOrErrorFactory) ? errorOrErrorFactory : () => errorOrErrorFactory;\n const init = subscriber => subscriber.error(errorFactory());\n return new Observable(scheduler ? subscriber => scheduler.schedule(init, 0, subscriber) : init);\n}\n","import { Observable } from '../Observable';\nimport { isFunction } from './isFunction';\nexport function isObservable(obj) {\n return !!obj && (obj instanceof Observable || isFunction(obj.lift) && isFunction(obj.subscribe));\n}\n","import { createErrorClass } from './createErrorClass';\nexport const EmptyError = createErrorClass(_super => function EmptyErrorImpl() {\n _super(this);\n this.name = 'EmptyError';\n this.message = 'no elements in sequence';\n});\n","export function isValidDate(value) {\n return value instanceof Date && !isNaN(value);\n}\n","import { asyncScheduler } from '../scheduler/async';\nimport { isValidDate } from '../util/isDate';\nimport { operate } from '../util/lift';\nimport { innerFrom } from '../observable/innerFrom';\nimport { createErrorClass } from '../util/createErrorClass';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nimport { executeSchedule } from '../util/executeSchedule';\nexport const TimeoutError = createErrorClass(_super => function TimeoutErrorImpl(info = null) {\n _super(this);\n this.message = 'Timeout has occurred';\n this.name = 'TimeoutError';\n this.info = info;\n});\nexport function timeout(config, schedulerArg) {\n const {\n first,\n each,\n with: _with = timeoutErrorFactory,\n scheduler = schedulerArg !== null && schedulerArg !== void 0 ? schedulerArg : asyncScheduler,\n meta = null\n } = isValidDate(config) ? {\n first: config\n } : typeof config === 'number' ? {\n each: config\n } : config;\n if (first == null && each == null) {\n throw new TypeError('No timeout provided.');\n }\n return operate((source, subscriber) => {\n let originalSourceSubscription;\n let timerSubscription;\n let lastValue = null;\n let seen = 0;\n const startTimer = delay => {\n timerSubscription = executeSchedule(subscriber, scheduler, () => {\n try {\n originalSourceSubscription.unsubscribe();\n innerFrom(_with({\n meta,\n lastValue,\n seen\n })).subscribe(subscriber);\n } catch (err) {\n subscriber.error(err);\n }\n }, delay);\n };\n originalSourceSubscription = source.subscribe(createOperatorSubscriber(subscriber, value => {\n timerSubscription === null || timerSubscription === void 0 ? void 0 : timerSubscription.unsubscribe();\n seen++;\n subscriber.next(lastValue = value);\n each > 0 && startTimer(each);\n }, undefined, undefined, () => {\n if (!(timerSubscription === null || timerSubscription === void 0 ? void 0 : timerSubscription.closed)) {\n timerSubscription === null || timerSubscription === void 0 ? void 0 : timerSubscription.unsubscribe();\n }\n lastValue = null;\n }));\n !seen && startTimer(first != null ? typeof first === 'number' ? first : +first - scheduler.now() : each);\n });\n}\nfunction timeoutErrorFactory(info) {\n throw new TimeoutError(info);\n}\n","const {\n isArray\n} = Array;\nconst {\n getPrototypeOf,\n prototype: objectProto,\n keys: getKeys\n} = Object;\nexport function argsArgArrayOrObject(args) {\n if (args.length === 1) {\n const first = args[0];\n if (isArray(first)) {\n return {\n args: first,\n keys: null\n };\n }\n if (isPOJO(first)) {\n const keys = getKeys(first);\n return {\n args: keys.map(key => first[key]),\n keys\n };\n }\n }\n return {\n args: args,\n keys: null\n };\n}\nfunction isPOJO(obj) {\n return obj && typeof obj === 'object' && getPrototypeOf(obj) === objectProto;\n}\n","export function createObject(keys, values) {\n return keys.reduce((result, key, i) => (result[key] = values[i], result), {});\n}\n","import { Observable } from '../Observable';\nimport { argsArgArrayOrObject } from '../util/argsArgArrayOrObject';\nimport { from } from './from';\nimport { identity } from '../util/identity';\nimport { mapOneOrManyArgs } from '../util/mapOneOrManyArgs';\nimport { popResultSelector, popScheduler } from '../util/args';\nimport { createObject } from '../util/createObject';\nimport { createOperatorSubscriber } from '../operators/OperatorSubscriber';\nimport { executeSchedule } from '../util/executeSchedule';\nexport function combineLatest(...args) {\n const scheduler = popScheduler(args);\n const resultSelector = popResultSelector(args);\n const {\n args: observables,\n keys\n } = argsArgArrayOrObject(args);\n if (observables.length === 0) {\n return from([], scheduler);\n }\n const result = new Observable(combineLatestInit(observables, scheduler, keys ? values => createObject(keys, values) : identity));\n return resultSelector ? result.pipe(mapOneOrManyArgs(resultSelector)) : result;\n}\nexport function combineLatestInit(observables, scheduler, valueTransform = identity) {\n return subscriber => {\n maybeSchedule(scheduler, () => {\n const {\n length\n } = observables;\n const values = new Array(length);\n let active = length;\n let remainingFirstValues = length;\n for (let i = 0; i < length; i++) {\n maybeSchedule(scheduler, () => {\n const source = from(observables[i], scheduler);\n let hasFirstValue = false;\n source.subscribe(createOperatorSubscriber(subscriber, value => {\n values[i] = value;\n if (!hasFirstValue) {\n hasFirstValue = true;\n remainingFirstValues--;\n }\n if (!remainingFirstValues) {\n subscriber.next(valueTransform(values.slice()));\n }\n }, () => {\n if (! --active) {\n subscriber.complete();\n }\n }));\n }, subscriber);\n }\n }, subscriber);\n };\n}\nfunction maybeSchedule(scheduler, execute, subscription) {\n if (scheduler) {\n executeSchedule(subscription, scheduler, execute);\n } else {\n execute();\n }\n}\n","import { Observable } from '../Observable';\nimport { innerFrom } from './innerFrom';\nexport function defer(observableFactory) {\n return new Observable(subscriber => {\n innerFrom(observableFactory()).subscribe(subscriber);\n });\n}\n","import { Observable } from '../Observable';\nimport { argsArgArrayOrObject } from '../util/argsArgArrayOrObject';\nimport { innerFrom } from './innerFrom';\nimport { popResultSelector } from '../util/args';\nimport { createOperatorSubscriber } from '../operators/OperatorSubscriber';\nimport { mapOneOrManyArgs } from '../util/mapOneOrManyArgs';\nimport { createObject } from '../util/createObject';\nexport function forkJoin(...args) {\n const resultSelector = popResultSelector(args);\n const {\n args: sources,\n keys\n } = argsArgArrayOrObject(args);\n const result = new Observable(subscriber => {\n const {\n length\n } = sources;\n if (!length) {\n subscriber.complete();\n return;\n }\n const values = new Array(length);\n let remainingCompletions = length;\n let remainingEmissions = length;\n for (let sourceIndex = 0; sourceIndex < length; sourceIndex++) {\n let hasValue = false;\n innerFrom(sources[sourceIndex]).subscribe(createOperatorSubscriber(subscriber, value => {\n if (!hasValue) {\n hasValue = true;\n remainingEmissions--;\n }\n values[sourceIndex] = value;\n }, () => remainingCompletions--, undefined, () => {\n if (!remainingCompletions || !hasValue) {\n if (!remainingEmissions) {\n subscriber.next(keys ? createObject(keys, values) : values);\n }\n subscriber.complete();\n }\n }));\n }\n });\n return resultSelector ? result.pipe(mapOneOrManyArgs(resultSelector)) : result;\n}\n","import { Observable } from '../Observable';\nimport { async as asyncScheduler } from '../scheduler/async';\nimport { isScheduler } from '../util/isScheduler';\nimport { isValidDate } from '../util/isDate';\nexport function timer(dueTime = 0, intervalOrScheduler, scheduler = asyncScheduler) {\n let intervalDuration = -1;\n if (intervalOrScheduler != null) {\n if (isScheduler(intervalOrScheduler)) {\n scheduler = intervalOrScheduler;\n } else {\n intervalDuration = intervalOrScheduler;\n }\n }\n return new Observable(subscriber => {\n let due = isValidDate(dueTime) ? +dueTime - scheduler.now() : dueTime;\n if (due < 0) {\n due = 0;\n }\n let n = 0;\n return scheduler.schedule(function () {\n if (!subscriber.closed) {\n subscriber.next(n++);\n if (0 <= intervalDuration) {\n this.schedule(undefined, intervalDuration);\n } else {\n subscriber.complete();\n }\n }\n }, due);\n });\n}\n","import { asyncScheduler } from '../scheduler/async';\nimport { timer } from './timer';\nexport function interval(period = 0, scheduler = asyncScheduler) {\n if (period < 0) {\n period = 0;\n }\n return timer(period, period, scheduler);\n}\n","import { mergeMap } from './mergeMap';\nimport { isFunction } from '../util/isFunction';\nexport function concatMap(project, resultSelector) {\n return isFunction(resultSelector) ? mergeMap(project, resultSelector, 1) : mergeMap(project, 1);\n}\n","import { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function defaultIfEmpty(defaultValue) {\n return operate((source, subscriber) => {\n let hasValue = false;\n source.subscribe(createOperatorSubscriber(subscriber, value => {\n hasValue = true;\n subscriber.next(value);\n }, () => {\n if (!hasValue) {\n subscriber.next(defaultValue);\n }\n subscriber.complete();\n }));\n });\n}\n","import { identity } from '../util/identity';\nimport { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function distinctUntilChanged(comparator, keySelector = identity) {\n comparator = comparator !== null && comparator !== void 0 ? comparator : defaultCompare;\n return operate((source, subscriber) => {\n let previousKey;\n let first = true;\n source.subscribe(createOperatorSubscriber(subscriber, value => {\n const currentKey = keySelector(value);\n if (first || !comparator(previousKey, currentKey)) {\n first = false;\n previousKey = currentKey;\n subscriber.next(value);\n }\n }));\n });\n}\nfunction defaultCompare(a, b) {\n return a === b;\n}\n","import { EmptyError } from '../util/EmptyError';\nimport { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function throwIfEmpty(errorFactory = defaultErrorFactory) {\n return operate((source, subscriber) => {\n let hasValue = false;\n source.subscribe(createOperatorSubscriber(subscriber, value => {\n hasValue = true;\n subscriber.next(value);\n }, () => hasValue ? subscriber.complete() : subscriber.error(errorFactory())));\n });\n}\nfunction defaultErrorFactory() {\n return new EmptyError();\n}\n","import { EmptyError } from '../util/EmptyError';\nimport { filter } from './filter';\nimport { take } from './take';\nimport { defaultIfEmpty } from './defaultIfEmpty';\nimport { throwIfEmpty } from './throwIfEmpty';\nimport { identity } from '../util/identity';\nexport function first(predicate, defaultValue) {\n const hasDefaultValue = arguments.length >= 2;\n return source => source.pipe(predicate ? filter((v, i) => predicate(v, i, source)) : identity, take(1), hasDefaultValue ? defaultIfEmpty(defaultValue) : throwIfEmpty(() => new EmptyError()));\n}\n","import { EMPTY } from '../observable/empty';\nimport { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function takeLast(count) {\n return count <= 0 ? () => EMPTY : operate((source, subscriber) => {\n let buffer = [];\n source.subscribe(createOperatorSubscriber(subscriber, value => {\n buffer.push(value);\n count < buffer.length && buffer.shift();\n }, () => {\n for (const value of buffer) {\n subscriber.next(value);\n }\n subscriber.complete();\n }, undefined, () => {\n buffer = null;\n }));\n });\n}\n","import { innerFrom } from '../observable/innerFrom';\nimport { Subject } from '../Subject';\nimport { SafeSubscriber } from '../Subscriber';\nimport { operate } from '../util/lift';\nexport function share(options = {}) {\n const {\n connector = () => new Subject(),\n resetOnError = true,\n resetOnComplete = true,\n resetOnRefCountZero = true\n } = options;\n return wrapperSource => {\n let connection;\n let resetConnection;\n let subject;\n let refCount = 0;\n let hasCompleted = false;\n let hasErrored = false;\n const cancelReset = () => {\n resetConnection === null || resetConnection === void 0 ? void 0 : resetConnection.unsubscribe();\n resetConnection = undefined;\n };\n const reset = () => {\n cancelReset();\n connection = subject = undefined;\n hasCompleted = hasErrored = false;\n };\n const resetAndUnsubscribe = () => {\n const conn = connection;\n reset();\n conn === null || conn === void 0 ? void 0 : conn.unsubscribe();\n };\n return operate((source, subscriber) => {\n refCount++;\n if (!hasErrored && !hasCompleted) {\n cancelReset();\n }\n const dest = subject = subject !== null && subject !== void 0 ? subject : connector();\n subscriber.add(() => {\n refCount--;\n if (refCount === 0 && !hasErrored && !hasCompleted) {\n resetConnection = handleReset(resetAndUnsubscribe, resetOnRefCountZero);\n }\n });\n dest.subscribe(subscriber);\n if (!connection && refCount > 0) {\n connection = new SafeSubscriber({\n next: value => dest.next(value),\n error: err => {\n hasErrored = true;\n cancelReset();\n resetConnection = handleReset(reset, resetOnError, err);\n dest.error(err);\n },\n complete: () => {\n hasCompleted = true;\n cancelReset();\n resetConnection = handleReset(reset, resetOnComplete);\n dest.complete();\n }\n });\n innerFrom(source).subscribe(connection);\n }\n })(wrapperSource);\n };\n}\nfunction handleReset(reset, on, ...args) {\n if (on === true) {\n reset();\n return;\n }\n if (on === false) {\n return;\n }\n const onSubscriber = new SafeSubscriber({\n next: () => {\n onSubscriber.unsubscribe();\n reset();\n }\n });\n return innerFrom(on(...args)).subscribe(onSubscriber);\n}\n","import { ReplaySubject } from '../ReplaySubject';\nimport { share } from './share';\nexport function shareReplay(configOrBufferSize, windowTime, scheduler) {\n let bufferSize;\n let refCount = false;\n if (configOrBufferSize && typeof configOrBufferSize === 'object') {\n ({\n bufferSize = Infinity,\n windowTime = Infinity,\n refCount = false,\n scheduler\n } = configOrBufferSize);\n } else {\n bufferSize = configOrBufferSize !== null && configOrBufferSize !== void 0 ? configOrBufferSize : Infinity;\n }\n return share({\n connector: () => new ReplaySubject(bufferSize, windowTime, scheduler),\n resetOnError: true,\n resetOnComplete: false,\n resetOnRefCountZero: refCount\n });\n}\n","/**\n * @license Angular v21.2.4\n * (c) 2010-2026 Google LLC. https://angular.dev/\n * License: MIT\n */\n\nlet activeConsumer = null;\nlet inNotificationPhase = false;\nlet epoch = 1;\nlet postProducerCreatedFn = null;\nconst SIGNAL = /* @__PURE__ */Symbol('SIGNAL');\nfunction setActiveConsumer(consumer) {\n const prev = activeConsumer;\n activeConsumer = consumer;\n return prev;\n}\nfunction getActiveConsumer() {\n return activeConsumer;\n}\nfunction isInNotificationPhase() {\n return inNotificationPhase;\n}\nfunction isReactive(value) {\n return value[SIGNAL] !== undefined;\n}\nconst REACTIVE_NODE = {\n version: 0,\n lastCleanEpoch: 0,\n dirty: false,\n producers: undefined,\n producersTail: undefined,\n consumers: undefined,\n consumersTail: undefined,\n recomputing: false,\n consumerAllowSignalWrites: false,\n consumerIsAlwaysLive: false,\n kind: 'unknown',\n producerMustRecompute: () => false,\n producerRecomputeValue: () => {},\n consumerMarkedDirty: () => {},\n consumerOnSignalRead: () => {}\n};\nfunction producerAccessed(node) {\n if (inNotificationPhase) {\n throw new Error(typeof ngDevMode !== 'undefined' && ngDevMode ? `Assertion error: signal read during notification phase` : '');\n }\n if (activeConsumer === null) {\n return;\n }\n activeConsumer.consumerOnSignalRead(node);\n const prevProducerLink = activeConsumer.producersTail;\n if (prevProducerLink !== undefined && prevProducerLink.producer === node) {\n return;\n }\n let nextProducerLink = undefined;\n const isRecomputing = activeConsumer.recomputing;\n if (isRecomputing) {\n nextProducerLink = prevProducerLink !== undefined ? prevProducerLink.nextProducer : activeConsumer.producers;\n if (nextProducerLink !== undefined && nextProducerLink.producer === node) {\n activeConsumer.producersTail = nextProducerLink;\n nextProducerLink.lastReadVersion = node.version;\n return;\n }\n }\n const prevConsumerLink = node.consumersTail;\n if (prevConsumerLink !== undefined && prevConsumerLink.consumer === activeConsumer && (!isRecomputing || isValidLink(prevConsumerLink, activeConsumer))) {\n return;\n }\n const isLive = consumerIsLive(activeConsumer);\n const newLink = {\n producer: node,\n consumer: activeConsumer,\n nextProducer: nextProducerLink,\n prevConsumer: prevConsumerLink,\n lastReadVersion: node.version,\n nextConsumer: undefined\n };\n activeConsumer.producersTail = newLink;\n if (prevProducerLink !== undefined) {\n prevProducerLink.nextProducer = newLink;\n } else {\n activeConsumer.producers = newLink;\n }\n if (isLive) {\n producerAddLiveConsumer(node, newLink);\n }\n}\nfunction producerIncrementEpoch() {\n epoch++;\n}\nfunction producerUpdateValueVersion(node) {\n if (consumerIsLive(node) && !node.dirty) {\n return;\n }\n if (!node.dirty && node.lastCleanEpoch === epoch) {\n return;\n }\n if (!node.producerMustRecompute(node) && !consumerPollProducersForChange(node)) {\n producerMarkClean(node);\n return;\n }\n node.producerRecomputeValue(node);\n producerMarkClean(node);\n}\nfunction producerNotifyConsumers(node) {\n if (node.consumers === undefined) {\n return;\n }\n const prev = inNotificationPhase;\n inNotificationPhase = true;\n try {\n for (let link = node.consumers; link !== undefined; link = link.nextConsumer) {\n const consumer = link.consumer;\n if (!consumer.dirty) {\n consumerMarkDirty(consumer);\n }\n }\n } finally {\n inNotificationPhase = prev;\n }\n}\nfunction producerUpdatesAllowed() {\n return activeConsumer?.consumerAllowSignalWrites !== false;\n}\nfunction consumerMarkDirty(node) {\n node.dirty = true;\n producerNotifyConsumers(node);\n node.consumerMarkedDirty?.(node);\n}\nfunction producerMarkClean(node) {\n node.dirty = false;\n node.lastCleanEpoch = epoch;\n}\nfunction consumerBeforeComputation(node) {\n if (node) resetConsumerBeforeComputation(node);\n return setActiveConsumer(node);\n}\nfunction resetConsumerBeforeComputation(node) {\n node.producersTail = undefined;\n node.recomputing = true;\n}\nfunction consumerAfterComputation(node, prevConsumer) {\n setActiveConsumer(prevConsumer);\n if (node) finalizeConsumerAfterComputation(node);\n}\nfunction finalizeConsumerAfterComputation(node) {\n node.recomputing = false;\n const producersTail = node.producersTail;\n let toRemove = producersTail !== undefined ? producersTail.nextProducer : node.producers;\n if (toRemove !== undefined) {\n if (consumerIsLive(node)) {\n do {\n toRemove = producerRemoveLiveConsumerLink(toRemove);\n } while (toRemove !== undefined);\n }\n if (producersTail !== undefined) {\n producersTail.nextProducer = undefined;\n } else {\n node.producers = undefined;\n }\n }\n}\nfunction consumerPollProducersForChange(node) {\n for (let link = node.producers; link !== undefined; link = link.nextProducer) {\n const producer = link.producer;\n const seenVersion = link.lastReadVersion;\n if (seenVersion !== producer.version) {\n return true;\n }\n producerUpdateValueVersion(producer);\n if (seenVersion !== producer.version) {\n return true;\n }\n }\n return false;\n}\nfunction consumerDestroy(node) {\n if (consumerIsLive(node)) {\n let link = node.producers;\n while (link !== undefined) {\n link = producerRemoveLiveConsumerLink(link);\n }\n }\n node.producers = undefined;\n node.producersTail = undefined;\n node.consumers = undefined;\n node.consumersTail = undefined;\n}\nfunction producerAddLiveConsumer(node, link) {\n const consumersTail = node.consumersTail;\n const wasLive = consumerIsLive(node);\n if (consumersTail !== undefined) {\n link.nextConsumer = consumersTail.nextConsumer;\n consumersTail.nextConsumer = link;\n } else {\n link.nextConsumer = undefined;\n node.consumers = link;\n }\n link.prevConsumer = consumersTail;\n node.consumersTail = link;\n if (!wasLive) {\n for (let link = node.producers; link !== undefined; link = link.nextProducer) {\n producerAddLiveConsumer(link.producer, link);\n }\n }\n}\nfunction producerRemoveLiveConsumerLink(link) {\n const producer = link.producer;\n const nextProducer = link.nextProducer;\n const nextConsumer = link.nextConsumer;\n const prevConsumer = link.prevConsumer;\n link.nextConsumer = undefined;\n link.prevConsumer = undefined;\n if (nextConsumer !== undefined) {\n nextConsumer.prevConsumer = prevConsumer;\n } else {\n producer.consumersTail = prevConsumer;\n }\n if (prevConsumer !== undefined) {\n prevConsumer.nextConsumer = nextConsumer;\n } else {\n producer.consumers = nextConsumer;\n if (!consumerIsLive(producer)) {\n let producerLink = producer.producers;\n while (producerLink !== undefined) {\n producerLink = producerRemoveLiveConsumerLink(producerLink);\n }\n }\n }\n return nextProducer;\n}\nfunction consumerIsLive(node) {\n return node.consumerIsAlwaysLive || node.consumers !== undefined;\n}\nfunction runPostProducerCreatedFn(node) {\n postProducerCreatedFn?.(node);\n}\nfunction setPostProducerCreatedFn(fn) {\n const prev = postProducerCreatedFn;\n postProducerCreatedFn = fn;\n return prev;\n}\nfunction isValidLink(checkLink, consumer) {\n const producersTail = consumer.producersTail;\n if (producersTail !== undefined) {\n let link = consumer.producers;\n do {\n if (link === checkLink) {\n return true;\n }\n if (link === producersTail) {\n break;\n }\n link = link.nextProducer;\n } while (link !== undefined);\n }\n return false;\n}\nfunction defaultEquals(a, b) {\n return Object.is(a, b);\n}\nfunction createComputed(computation, equal) {\n const node = Object.create(COMPUTED_NODE);\n node.computation = computation;\n if (equal !== undefined) {\n node.equal = equal;\n }\n const computed = () => {\n producerUpdateValueVersion(node);\n producerAccessed(node);\n if (node.value === ERRORED) {\n throw node.error;\n }\n return node.value;\n };\n computed[SIGNAL] = node;\n if (typeof ngDevMode !== 'undefined' && ngDevMode) {\n computed.toString = () => `[Computed${node.debugName ? ' (' + node.debugName + ')' : ''}: ${String(node.value)}]`;\n }\n runPostProducerCreatedFn(node);\n return computed;\n}\nconst UNSET = /* @__PURE__ */Symbol('UNSET');\nconst COMPUTING = /* @__PURE__ */Symbol('COMPUTING');\nconst ERRORED = /* @__PURE__ */Symbol('ERRORED');\nconst COMPUTED_NODE = /* @__PURE__ */(() => {\n return {\n ...REACTIVE_NODE,\n value: UNSET,\n dirty: true,\n error: null,\n equal: defaultEquals,\n kind: 'computed',\n producerMustRecompute(node) {\n return node.value === UNSET || node.value === COMPUTING;\n },\n producerRecomputeValue(node) {\n if (node.value === COMPUTING) {\n throw new Error(typeof ngDevMode !== 'undefined' && ngDevMode ? 'Detected cycle in computations.' : '');\n }\n const oldValue = node.value;\n node.value = COMPUTING;\n const prevConsumer = consumerBeforeComputation(node);\n let newValue;\n let wasEqual = false;\n try {\n newValue = node.computation();\n setActiveConsumer(null);\n wasEqual = oldValue !== UNSET && oldValue !== ERRORED && newValue !== ERRORED && node.equal(oldValue, newValue);\n } catch (err) {\n newValue = ERRORED;\n node.error = err;\n } finally {\n consumerAfterComputation(node, prevConsumer);\n }\n if (wasEqual) {\n node.value = oldValue;\n return;\n }\n node.value = newValue;\n node.version++;\n }\n };\n})();\nfunction defaultThrowError() {\n throw new Error();\n}\nlet throwInvalidWriteToSignalErrorFn = defaultThrowError;\nfunction throwInvalidWriteToSignalError(node) {\n throwInvalidWriteToSignalErrorFn(node);\n}\nfunction setThrowInvalidWriteToSignalError(fn) {\n throwInvalidWriteToSignalErrorFn = fn;\n}\nlet postSignalSetFn = null;\nfunction createSignal(initialValue, equal) {\n const node = Object.create(SIGNAL_NODE);\n node.value = initialValue;\n if (equal !== undefined) {\n node.equal = equal;\n }\n const getter = () => signalGetFn(node);\n getter[SIGNAL] = node;\n if (typeof ngDevMode !== 'undefined' && ngDevMode) {\n getter.toString = () => `[Signal${node.debugName ? ' (' + node.debugName + ')' : ''}: ${String(node.value)}]`;\n }\n runPostProducerCreatedFn(node);\n const set = newValue => signalSetFn(node, newValue);\n const update = updateFn => signalUpdateFn(node, updateFn);\n return [getter, set, update];\n}\nfunction setPostSignalSetFn(fn) {\n const prev = postSignalSetFn;\n postSignalSetFn = fn;\n return prev;\n}\nfunction signalGetFn(node) {\n producerAccessed(node);\n return node.value;\n}\nfunction signalSetFn(node, newValue) {\n if (!producerUpdatesAllowed()) {\n throwInvalidWriteToSignalError(node);\n }\n if (!node.equal(node.value, newValue)) {\n node.value = newValue;\n signalValueChanged(node);\n }\n}\nfunction signalUpdateFn(node, updater) {\n if (!producerUpdatesAllowed()) {\n throwInvalidWriteToSignalError(node);\n }\n signalSetFn(node, updater(node.value));\n}\nfunction runPostSignalSetFn(node) {\n postSignalSetFn?.(node);\n}\nconst SIGNAL_NODE = /* @__PURE__ */(() => {\n return {\n ...REACTIVE_NODE,\n equal: defaultEquals,\n value: undefined,\n kind: 'signal'\n };\n})();\nfunction signalValueChanged(node) {\n node.version++;\n producerIncrementEpoch();\n producerNotifyConsumers(node);\n postSignalSetFn?.(node);\n}\nconst BASE_EFFECT_NODE = /* @__PURE__ */(() => ({\n ...REACTIVE_NODE,\n consumerIsAlwaysLive: true,\n consumerAllowSignalWrites: true,\n dirty: true,\n kind: 'effect'\n}))();\nfunction runEffect(node) {\n node.dirty = false;\n if (node.version > 0 && !consumerPollProducersForChange(node)) {\n return;\n }\n node.version++;\n const prevNode = consumerBeforeComputation(node);\n try {\n node.cleanup();\n node.fn();\n } finally {\n consumerAfterComputation(node, prevNode);\n }\n}\nexport { BASE_EFFECT_NODE, COMPUTING, ERRORED, REACTIVE_NODE, SIGNAL, SIGNAL_NODE, UNSET, consumerAfterComputation, consumerBeforeComputation, consumerDestroy, consumerMarkDirty, consumerPollProducersForChange, createComputed, createSignal, defaultEquals, finalizeConsumerAfterComputation, getActiveConsumer, isInNotificationPhase, isReactive, producerAccessed, producerIncrementEpoch, producerMarkClean, producerNotifyConsumers, producerUpdateValueVersion, producerUpdatesAllowed, resetConsumerBeforeComputation, runEffect, runPostProducerCreatedFn, runPostSignalSetFn, setActiveConsumer, setPostProducerCreatedFn, setPostSignalSetFn, setThrowInvalidWriteToSignalError, signalGetFn, signalSetFn, signalUpdateFn };\n","/**\n * @license Angular v21.2.4\n * (c) 2010-2026 Google LLC. https://angular.dev/\n * License: MIT\n */\n\nlet _currentInjector = undefined;\nfunction getCurrentInjector() {\n return _currentInjector;\n}\nfunction setCurrentInjector(injector) {\n const former = _currentInjector;\n _currentInjector = injector;\n return former;\n}\nfunction inject(token, options) {\n const currentInjector = getCurrentInjector();\n if (!currentInjector) {\n throw new Error('Current injector is not set.');\n }\n if (!token.ɵprov) {\n throw new Error('Token is not an injectable');\n }\n return currentInjector.retrieve(token, options);\n}\nconst NOT_FOUND = /*#__PURE__*/Symbol('NotFound');\nclass NotFoundError extends Error {\n name = 'ɵNotFound';\n constructor(message) {\n super(message);\n }\n}\nfunction isNotFound(e) {\n return e === NOT_FOUND || e?.name === 'ɵNotFound';\n}\nexport { NOT_FOUND, NotFoundError, getCurrentInjector, inject, isNotFound, setCurrentInjector };\n","/**\n * @license Angular v21.2.4\n * (c) 2010-2026 Google LLC. https://angular.dev/\n * License: MIT\n */\n\nimport { SIGNAL, runPostProducerCreatedFn, producerUpdateValueVersion, signalSetFn, producerMarkClean, ERRORED, signalUpdateFn, REACTIVE_NODE, UNSET, defaultEquals, COMPUTING, consumerBeforeComputation, consumerAfterComputation, producerAccessed, setActiveConsumer } from './_effect-chunk.mjs';\nfunction createLinkedSignal(sourceFn, computationFn, equalityFn) {\n const node = Object.create(LINKED_SIGNAL_NODE);\n node.source = sourceFn;\n node.computation = computationFn;\n if (equalityFn != undefined) {\n node.equal = equalityFn;\n }\n const linkedSignalGetter = () => {\n producerUpdateValueVersion(node);\n producerAccessed(node);\n if (node.value === ERRORED) {\n throw node.error;\n }\n return node.value;\n };\n const getter = linkedSignalGetter;\n getter[SIGNAL] = node;\n if (typeof ngDevMode !== 'undefined' && ngDevMode) {\n getter.toString = () => `[LinkedSignal${node.debugName ? ' (' + node.debugName + ')' : ''}: ${String(node.value)}]`;\n }\n runPostProducerCreatedFn(node);\n return getter;\n}\nfunction linkedSignalSetFn(node, newValue) {\n producerUpdateValueVersion(node);\n signalSetFn(node, newValue);\n producerMarkClean(node);\n}\nfunction linkedSignalUpdateFn(node, updater) {\n producerUpdateValueVersion(node);\n if (node.value === ERRORED) {\n throw node.error;\n }\n signalUpdateFn(node, updater);\n producerMarkClean(node);\n}\nconst LINKED_SIGNAL_NODE = /* @__PURE__ */(() => {\n return {\n ...REACTIVE_NODE,\n value: UNSET,\n dirty: true,\n error: null,\n equal: defaultEquals,\n kind: 'linkedSignal',\n producerMustRecompute(node) {\n return node.value === UNSET || node.value === COMPUTING;\n },\n producerRecomputeValue(node) {\n if (node.value === COMPUTING) {\n throw new Error(typeof ngDevMode !== 'undefined' && ngDevMode ? 'Detected cycle in computations.' : '');\n }\n const oldValue = node.value;\n node.value = COMPUTING;\n const prevConsumer = consumerBeforeComputation(node);\n let newValue;\n try {\n const newSourceValue = node.source();\n const prev = oldValue === UNSET || oldValue === ERRORED ? undefined : {\n source: node.sourceValue,\n value: oldValue\n };\n newValue = node.computation(newSourceValue, prev);\n node.sourceValue = newSourceValue;\n } catch (err) {\n newValue = ERRORED;\n node.error = err;\n } finally {\n consumerAfterComputation(node, prevConsumer);\n }\n if (oldValue !== UNSET && newValue !== ERRORED && node.equal(oldValue, newValue)) {\n node.value = oldValue;\n return;\n }\n node.value = newValue;\n node.version++;\n }\n };\n})();\nfunction untracked(nonReactiveReadsFn) {\n const prevConsumer = setActiveConsumer(null);\n try {\n return nonReactiveReadsFn();\n } finally {\n setActiveConsumer(prevConsumer);\n }\n}\nexport { createLinkedSignal, linkedSignalSetFn, linkedSignalUpdateFn, untracked };\n","/**\n * @license Angular v21.2.4\n * (c) 2010-2026 Google LLC. https://angular.dev/\n * License: MIT\n */\n\nimport { getActiveConsumer, setActiveConsumer as setActiveConsumer$1, createSignal, SIGNAL, consumerDestroy, BASE_EFFECT_NODE, isInNotificationPhase, runEffect } from './_effect-chunk.mjs';\nimport { BehaviorSubject, Observable, Subject, Subscription } from 'rxjs';\nimport { isNotFound, getCurrentInjector, setCurrentInjector } from './_not_found-chunk.mjs';\nimport { setActiveConsumer } from '@angular/core/primitives/signals';\nimport { isNotFound as isNotFound$1 } from '@angular/core/primitives/di';\nclass Version {\n full;\n major;\n minor;\n patch;\n constructor(full) {\n this.full = full;\n const parts = full.split('.');\n this.major = parts[0];\n this.minor = parts[1];\n this.patch = parts.slice(2).join('.');\n }\n}\nconst VERSION = /* @__PURE__ */new Version('21.2.4');\nconst DOC_PAGE_BASE_URL = /*#__PURE__*/(() => {\n const full = VERSION.full;\n const isPreRelease = full.includes('-next') || full.includes('-rc') || full === '0.0.0' + '-PLACEHOLDER';\n const prefix = isPreRelease ? 'next' : `v${VERSION.major}`;\n return `https://${prefix}.angular.dev`;\n})();\nconst ERROR_DETAILS_PAGE_BASE_URL = /*#__PURE__*/(() => {\n return `${DOC_PAGE_BASE_URL}/errors`;\n})();\nconst XSS_SECURITY_URL = 'https://angular.dev/best-practices/security#preventing-cross-site-scripting-xss';\nclass RuntimeError extends Error {\n code;\n constructor(code, message) {\n super(formatRuntimeError(code, message));\n this.code = code;\n }\n}\nfunction formatRuntimeErrorCode(code) {\n return `NG0${Math.abs(code)}`;\n}\nfunction formatRuntimeError(code, message) {\n const fullCode = formatRuntimeErrorCode(code);\n let errorMessage = `${fullCode}${message ? ': ' + message : ''}`;\n if (ngDevMode && code < 0) {\n const addPeriodSeparator = !errorMessage.match(/[.,;!?\\n]$/);\n const separator = addPeriodSeparator ? '.' : '';\n errorMessage = `${errorMessage}${separator} Find more at ${ERROR_DETAILS_PAGE_BASE_URL}/${fullCode}`;\n }\n return errorMessage;\n}\nconst _global = globalThis;\nfunction ngDevModeResetPerfCounters() {\n const locationString = typeof location !== 'undefined' ? location.toString() : '';\n const newCounters = {\n hydratedNodes: 0,\n hydratedComponents: 0,\n dehydratedViewsRemoved: 0,\n dehydratedViewsCleanupRuns: 0,\n componentsSkippedHydration: 0,\n deferBlocksWithIncrementalHydration: 0\n };\n const allowNgDevModeTrue = locationString.indexOf('ngDevMode=false') === -1;\n if (!allowNgDevModeTrue) {\n _global['ngDevMode'] = false;\n } else {\n if (typeof _global['ngDevMode'] !== 'object') {\n _global['ngDevMode'] = {};\n }\n Object.assign(_global['ngDevMode'], newCounters);\n }\n return newCounters;\n}\nfunction initNgDevMode() {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n if (typeof ngDevMode !== 'object' || Object.keys(ngDevMode).length === 0) {\n ngDevModeResetPerfCounters();\n }\n return typeof ngDevMode !== 'undefined' && !!ngDevMode;\n }\n return false;\n}\nfunction getClosureSafeProperty(objWithPropertyToExtract) {\n for (let key in objWithPropertyToExtract) {\n if (objWithPropertyToExtract[key] === getClosureSafeProperty) {\n return key;\n }\n }\n throw Error(typeof ngDevMode !== 'undefined' && ngDevMode ? 'Could not find renamed property on target object.' : '');\n}\nfunction fillProperties(target, source) {\n for (const key in source) {\n if (source.hasOwnProperty(key) && !target.hasOwnProperty(key)) {\n target[key] = source[key];\n }\n }\n}\nfunction stringify(token) {\n if (typeof token === 'string') {\n return token;\n }\n if (Array.isArray(token)) {\n return `[${token.map(stringify).join(', ')}]`;\n }\n if (token == null) {\n return '' + token;\n }\n const name = token.overriddenName || token.name;\n if (name) {\n return `${name}`;\n }\n const result = token.toString();\n if (result == null) {\n return '' + result;\n }\n const newLineIndex = result.indexOf('\\n');\n return newLineIndex >= 0 ? result.slice(0, newLineIndex) : result;\n}\nfunction concatStringsWithSpace(before, after) {\n if (!before) return after || '';\n if (!after) return before;\n return `${before} ${after}`;\n}\nfunction truncateMiddle(str, maxLength = 100) {\n if (!str || maxLength < 1 || str.length <= maxLength) return str;\n if (maxLength == 1) return str.substring(0, 1) + '...';\n const halfLimit = Math.round(maxLength / 2);\n return str.substring(0, halfLimit) + '...' + str.substring(str.length - halfLimit);\n}\nconst __forward_ref__ = /*#__PURE__*/getClosureSafeProperty({\n __forward_ref__: getClosureSafeProperty\n});\nfunction forwardRef(forwardRefFn) {\n forwardRefFn.__forward_ref__ = forwardRef;\n if (ngDevMode) {\n forwardRefFn.toString = function () {\n return stringify(this());\n };\n }\n return forwardRefFn;\n}\nfunction resolveForwardRef(type) {\n return isForwardRef(type) ? type() : type;\n}\nfunction isForwardRef(fn) {\n return typeof fn === 'function' && fn.hasOwnProperty(__forward_ref__) && fn.__forward_ref__ === forwardRef;\n}\nfunction assertNumber(actual, msg) {\n if (!(typeof actual === 'number')) {\n throwError(msg, typeof actual, 'number', '===');\n }\n}\nfunction assertNumberInRange(actual, minInclusive, maxInclusive) {\n assertNumber(actual, 'Expected a number');\n assertLessThanOrEqual(actual, maxInclusive, 'Expected number to be less than or equal to');\n assertGreaterThanOrEqual(actual, minInclusive, 'Expected number to be greater than or equal to');\n}\nfunction assertString(actual, msg) {\n if (!(typeof actual === 'string')) {\n throwError(msg, actual === null ? 'null' : typeof actual, 'string', '===');\n }\n}\nfunction assertFunction(actual, msg) {\n if (!(typeof actual === 'function')) {\n throwError(msg, actual === null ? 'null' : typeof actual, 'function', '===');\n }\n}\nfunction assertEqual(actual, expected, msg) {\n if (!(actual == expected)) {\n throwError(msg, actual, expected, '==');\n }\n}\nfunction assertNotEqual(actual, expected, msg) {\n if (!(actual != expected)) {\n throwError(msg, actual, expected, '!=');\n }\n}\nfunction assertSame(actual, expected, msg) {\n if (!(actual === expected)) {\n throwError(msg, actual, expected, '===');\n }\n}\nfunction assertNotSame(actual, expected, msg) {\n if (!(actual !== expected)) {\n throwError(msg, actual, expected, '!==');\n }\n}\nfunction assertLessThan(actual, expected, msg) {\n if (!(actual < expected)) {\n throwError(msg, actual, expected, '<');\n }\n}\nfunction assertLessThanOrEqual(actual, expected, msg) {\n if (!(actual <= expected)) {\n throwError(msg, actual, expected, '<=');\n }\n}\nfunction assertGreaterThan(actual, expected, msg) {\n if (!(actual > expected)) {\n throwError(msg, actual, expected, '>');\n }\n}\nfunction assertGreaterThanOrEqual(actual, expected, msg) {\n if (!(actual >= expected)) {\n throwError(msg, actual, expected, '>=');\n }\n}\nfunction assertNotDefined(actual, msg) {\n if (actual != null) {\n throwError(msg, actual, null, '==');\n }\n}\nfunction assertDefined(actual, msg) {\n if (actual == null) {\n throwError(msg, actual, null, '!=');\n }\n}\nfunction throwError(msg, actual, expected, comparison) {\n throw new Error(`ASSERTION ERROR: ${msg}` + (comparison == null ? '' : ` [Expected=> ${expected} ${comparison} ${actual} <=Actual]`));\n}\nfunction assertDomNode(node) {\n if (!(node instanceof Node)) {\n throwError(`The provided value must be an instance of a DOM Node but got ${stringify(node)}`);\n }\n}\nfunction assertElement(node) {\n if (!(node instanceof Element)) {\n throwError(`The provided value must be an element but got ${stringify(node)}`);\n }\n}\nfunction assertIndexInRange(arr, index) {\n assertDefined(arr, 'Array must be defined.');\n const maxLen = arr.length;\n if (index < 0 || index >= maxLen) {\n throwError(`Index expected to be less than ${maxLen} but got ${index}`);\n }\n}\nfunction assertOneOf(value, ...validValues) {\n if (validValues.indexOf(value) !== -1) return true;\n throwError(`Expected value to be one of ${JSON.stringify(validValues)} but was ${JSON.stringify(value)}.`);\n}\nfunction assertNotReactive(fn) {\n if (getActiveConsumer() !== null) {\n throwError(`${fn}() should never be called in a reactive context.`);\n }\n}\nfunction ɵɵdefineInjectable(opts) {\n return {\n token: opts.token,\n providedIn: opts.providedIn || null,\n factory: opts.factory,\n value: undefined\n };\n}\nfunction ɵɵdefineInjector(options) {\n return {\n providers: options.providers || [],\n imports: options.imports || []\n };\n}\nfunction getInjectableDef(type) {\n return getOwnDefinition(type, NG_PROV_DEF);\n}\nfunction isInjectable(type) {\n return getInjectableDef(type) !== null;\n}\nfunction getOwnDefinition(type, field) {\n return type.hasOwnProperty(field) && type[field] || null;\n}\nfunction getInheritedInjectableDef(type) {\n const def = type?.[NG_PROV_DEF] ?? null;\n if (def) {\n ngDevMode && console.warn(`DEPRECATED: DI is instantiating a token \"${type.name}\" that inherits its @Injectable decorator but does not provide one itself.\\n` + `This will become an error in a future version of Angular. Please add @Injectable() to the \"${type.name}\" class.`);\n return def;\n } else {\n return null;\n }\n}\nfunction getInjectorDef(type) {\n return type && type.hasOwnProperty(NG_INJ_DEF) ? type[NG_INJ_DEF] : null;\n}\nconst NG_PROV_DEF = /*#__PURE__*/getClosureSafeProperty({\n ɵprov: getClosureSafeProperty\n});\nconst NG_INJ_DEF = /*#__PURE__*/getClosureSafeProperty({\n ɵinj: getClosureSafeProperty\n});\nclass InjectionToken {\n _desc;\n ngMetadataName = 'InjectionToken';\n ɵprov;\n constructor(_desc, options) {\n this._desc = _desc;\n this.ɵprov = undefined;\n if (typeof options == 'number') {\n (typeof ngDevMode === 'undefined' || ngDevMode) && assertLessThan(options, 0, 'Only negative numbers are supported here');\n this.__NG_ELEMENT_ID__ = options;\n } else if (options !== undefined) {\n this.ɵprov = ɵɵdefineInjectable({\n token: this,\n providedIn: options.providedIn || 'root',\n factory: options.factory\n });\n }\n }\n get multi() {\n return this;\n }\n toString() {\n return `InjectionToken ${this._desc}`;\n }\n}\nlet _injectorProfilerContext;\nfunction getInjectorProfilerContext() {\n !ngDevMode && throwError('getInjectorProfilerContext should never be called in production mode');\n return _injectorProfilerContext;\n}\nfunction setInjectorProfilerContext(context) {\n !ngDevMode && throwError('setInjectorProfilerContext should never be called in production mode');\n const previous = _injectorProfilerContext;\n _injectorProfilerContext = context;\n return previous;\n}\nconst injectorProfilerCallbacks = [];\nconst NOOP_PROFILER_REMOVAL = () => {};\nfunction removeProfiler(profiler) {\n const profilerIdx = injectorProfilerCallbacks.indexOf(profiler);\n if (profilerIdx !== -1) {\n injectorProfilerCallbacks.splice(profilerIdx, 1);\n }\n}\nfunction setInjectorProfiler(injectorProfiler) {\n !ngDevMode && throwError('setInjectorProfiler should never be called in production mode');\n if (injectorProfiler !== null) {\n if (!injectorProfilerCallbacks.includes(injectorProfiler)) {\n injectorProfilerCallbacks.push(injectorProfiler);\n }\n return () => removeProfiler(injectorProfiler);\n } else {\n injectorProfilerCallbacks.length = 0;\n return NOOP_PROFILER_REMOVAL;\n }\n}\nfunction injectorProfiler(event) {\n !ngDevMode && throwError('Injector profiler should never be called in production mode');\n for (let i = 0; i < injectorProfilerCallbacks.length; i++) {\n const injectorProfilerCallback = injectorProfilerCallbacks[i];\n injectorProfilerCallback(event);\n }\n}\nfunction emitProviderConfiguredEvent(eventProvider, isViewProvider = false) {\n !ngDevMode && throwError('Injector profiler should never be called in production mode');\n let token;\n if (typeof eventProvider === 'function') {\n token = eventProvider;\n } else if (eventProvider instanceof InjectionToken) {\n token = eventProvider;\n } else {\n token = resolveForwardRef(eventProvider.provide);\n }\n let provider = eventProvider;\n if (eventProvider instanceof InjectionToken) {\n provider = eventProvider.ɵprov || eventProvider;\n }\n injectorProfiler({\n type: 2,\n context: getInjectorProfilerContext(),\n providerRecord: {\n token,\n provider,\n isViewProvider\n }\n });\n}\nfunction emitInjectorToCreateInstanceEvent(token) {\n !ngDevMode && throwError('Injector profiler should never be called in production mode');\n injectorProfiler({\n type: 5,\n context: getInjectorProfilerContext(),\n token: token\n });\n}\nfunction emitInstanceCreatedByInjectorEvent(instance) {\n !ngDevMode && throwError('Injector profiler should never be called in production mode');\n injectorProfiler({\n type: 1,\n context: getInjectorProfilerContext(),\n instance: {\n value: instance\n }\n });\n}\nfunction emitInjectEvent(token, value, flags) {\n !ngDevMode && throwError('Injector profiler should never be called in production mode');\n injectorProfiler({\n type: 0,\n context: getInjectorProfilerContext(),\n service: {\n token,\n value,\n flags\n }\n });\n}\nfunction emitEffectCreatedEvent(effect) {\n !ngDevMode && throwError('Injector profiler should never be called in production mode');\n injectorProfiler({\n type: 3,\n context: getInjectorProfilerContext(),\n effect\n });\n}\nfunction emitAfterRenderEffectPhaseCreatedEvent(effectPhase) {\n !ngDevMode && throwError('Injector profiler should never be called in production mode');\n injectorProfiler({\n type: 4,\n context: getInjectorProfilerContext(),\n effectPhase\n });\n}\nfunction runInInjectorProfilerContext(injector, token, callback) {\n !ngDevMode && throwError('runInInjectorProfilerContext should never be called in production mode');\n const prevInjectContext = setInjectorProfilerContext({\n injector,\n token\n });\n try {\n callback();\n } finally {\n setInjectorProfilerContext(prevInjectContext);\n }\n}\nfunction isEnvironmentProviders(value) {\n return value && !!value.ɵproviders;\n}\nconst NG_COMP_DEF = /*#__PURE__*/getClosureSafeProperty({\n ɵcmp: getClosureSafeProperty\n});\nconst NG_DIR_DEF = /*#__PURE__*/getClosureSafeProperty({\n ɵdir: getClosureSafeProperty\n});\nconst NG_PIPE_DEF = /*#__PURE__*/getClosureSafeProperty({\n ɵpipe: getClosureSafeProperty\n});\nconst NG_MOD_DEF = /*#__PURE__*/getClosureSafeProperty({\n ɵmod: getClosureSafeProperty\n});\nconst NG_FACTORY_DEF = /*#__PURE__*/getClosureSafeProperty({\n ɵfac: getClosureSafeProperty\n});\nconst NG_ELEMENT_ID = /*#__PURE__*/getClosureSafeProperty({\n __NG_ELEMENT_ID__: getClosureSafeProperty\n});\nconst NG_ENV_ID = /*#__PURE__*/getClosureSafeProperty({\n __NG_ENV_ID__: getClosureSafeProperty\n});\nfunction getNgModuleDef(type) {\n assertTypeDefined(type, '@NgModule');\n return type[NG_MOD_DEF] || null;\n}\nfunction getNgModuleDefOrThrow(type) {\n const ngModuleDef = getNgModuleDef(type);\n if (!ngModuleDef) {\n throw new RuntimeError(915, (typeof ngDevMode === 'undefined' || ngDevMode) && `Type ${stringify(type)} does not have 'ɵmod' property.`);\n }\n return ngModuleDef;\n}\nfunction getComponentDef(type) {\n assertTypeDefined(type, '@Component');\n return type[NG_COMP_DEF] || null;\n}\nfunction getDirectiveDefOrThrow(type) {\n const def = getDirectiveDef(type);\n if (!def) {\n throw new RuntimeError(916, (typeof ngDevMode === 'undefined' || ngDevMode) && `Type ${stringify(type)} does not have 'ɵdir' property.`);\n }\n return def;\n}\nfunction getDirectiveDef(type) {\n assertTypeDefined(type, '@Directive');\n return type[NG_DIR_DEF] || null;\n}\nfunction getPipeDef(type) {\n assertTypeDefined(type, '@Pipe');\n return type[NG_PIPE_DEF] || null;\n}\nfunction assertTypeDefined(type, symbolType) {\n if (type == null) {\n throw new RuntimeError(-919, (typeof ngDevMode === 'undefined' || ngDevMode) && `Cannot read ${symbolType} metadata. This can indicate a runtime ` + `circular dependency in your app that needs to be resolved.`);\n }\n}\nfunction isStandalone(type) {\n const def = getComponentDef(type) || getDirectiveDef(type) || getPipeDef(type);\n return def !== null && def.standalone;\n}\nfunction renderStringify(value) {\n if (typeof value === 'string') return value;\n if (value == null) return '';\n return String(value);\n}\nfunction stringifyForError(value) {\n if (typeof value === 'function') return value.name || value.toString();\n if (typeof value === 'object' && value != null && typeof value.type === 'function') {\n return value.type.name || value.type.toString();\n }\n return renderStringify(value);\n}\nfunction debugStringifyTypeForError(type) {\n const componentDef = getComponentDef(type);\n if (componentDef !== null && componentDef.debugInfo) {\n return stringifyTypeFromDebugInfo(componentDef.debugInfo);\n }\n return stringifyForError(type);\n}\nfunction stringifyTypeFromDebugInfo(debugInfo) {\n if (!debugInfo.filePath || !debugInfo.lineNumber) {\n return debugInfo.className;\n } else {\n return `${debugInfo.className} (at ${debugInfo.filePath}:${debugInfo.lineNumber})`;\n }\n}\nconst NG_RUNTIME_ERROR_CODE = /*#__PURE__*/getClosureSafeProperty({\n 'ngErrorCode': getClosureSafeProperty\n});\nconst NG_RUNTIME_ERROR_MESSAGE = /*#__PURE__*/getClosureSafeProperty({\n 'ngErrorMessage': getClosureSafeProperty\n});\nconst NG_TOKEN_PATH = /*#__PURE__*/getClosureSafeProperty({\n 'ngTokenPath': getClosureSafeProperty\n});\nfunction cyclicDependencyError(token, path) {\n const message = ngDevMode ? `Circular dependency detected for \\`${token}\\`.` : '';\n return createRuntimeError(message, -200, path);\n}\nfunction cyclicDependencyErrorWithDetails(token, path) {\n return augmentRuntimeError(cyclicDependencyError(token, path), null);\n}\nfunction throwMixedMultiProviderError() {\n throw new Error(`Cannot mix multi providers and regular providers`);\n}\nfunction throwInvalidProviderError(ngModuleType, providers, provider) {\n if (ngModuleType && providers) {\n const providerDetail = providers.map(v => v == provider ? '?' + provider + '?' : '...');\n throw new Error(`Invalid provider for the NgModule '${stringify(ngModuleType)}' - only instances of Provider and Type are allowed, got: [${providerDetail.join(', ')}]`);\n } else if (isEnvironmentProviders(provider)) {\n if (provider.ɵfromNgModule) {\n throw new RuntimeError(-207, `Invalid providers from 'importProvidersFrom' present in a non-environment injector. 'importProvidersFrom' can't be used for component providers.`);\n } else {\n throw new RuntimeError(-207, `Invalid providers present in a non-environment injector. 'EnvironmentProviders' can't be used for component providers.`);\n }\n } else {\n throw new Error('Invalid provider');\n }\n}\nfunction throwProviderNotFoundError(token, injectorName) {\n const errorMessage = ngDevMode && `No provider for ${stringifyForError(token)} found${injectorName ? ` in ${injectorName}` : ''}`;\n throw new RuntimeError(-201, errorMessage);\n}\nfunction prependTokenToDependencyPath(error, token) {\n error[NG_TOKEN_PATH] ??= [];\n const currentPath = error[NG_TOKEN_PATH];\n let pathStr;\n if (typeof token === 'object' && 'multi' in token && token?.multi === true) {\n assertDefined(token.provide, 'Token with multi: true should have a provide property');\n pathStr = stringifyForError(token.provide);\n } else {\n pathStr = stringifyForError(token);\n }\n if (currentPath[0] !== pathStr) {\n error[NG_TOKEN_PATH].unshift(pathStr);\n }\n}\nfunction augmentRuntimeError(error, source) {\n const tokenPath = error[NG_TOKEN_PATH];\n const errorCode = error[NG_RUNTIME_ERROR_CODE];\n const message = error[NG_RUNTIME_ERROR_MESSAGE] || error.message;\n error.message = formatErrorMessage(message, errorCode, tokenPath, source);\n return error;\n}\nfunction createRuntimeError(message, code, path) {\n const error = new RuntimeError(code, message);\n error[NG_RUNTIME_ERROR_CODE] = code;\n error[NG_RUNTIME_ERROR_MESSAGE] = message;\n if (path) {\n error[NG_TOKEN_PATH] = path;\n }\n return error;\n}\nfunction getRuntimeErrorCode(error) {\n return error[NG_RUNTIME_ERROR_CODE];\n}\nfunction formatErrorMessage(text, code, path = [], source = null) {\n let pathDetails = '';\n if (path && path.length > 1) {\n pathDetails = ` Path: ${path.join(' -> ')}.`;\n }\n const sourceDetails = source ? ` Source: ${source}.` : '';\n return formatRuntimeError(code, `${text}${sourceDetails}${pathDetails}`);\n}\nlet _injectImplementation;\nfunction getInjectImplementation() {\n return _injectImplementation;\n}\nfunction setInjectImplementation(impl) {\n const previous = _injectImplementation;\n _injectImplementation = impl;\n return previous;\n}\nfunction injectRootLimpMode(token, notFoundValue, flags) {\n const injectableDef = getInjectableDef(token);\n if (injectableDef && injectableDef.providedIn == 'root') {\n return injectableDef.value === undefined ? injectableDef.value = injectableDef.factory() : injectableDef.value;\n }\n if (flags & 8) return null;\n if (notFoundValue !== undefined) return notFoundValue;\n throwProviderNotFoundError(token, typeof ngDevMode !== 'undefined' && ngDevMode ? 'Injector' : '');\n}\nfunction assertInjectImplementationNotEqual(fn) {\n ngDevMode && assertNotEqual(_injectImplementation, fn, 'Calling ɵɵinject would cause infinite recursion');\n}\nconst _THROW_IF_NOT_FOUND = {};\nconst THROW_IF_NOT_FOUND = _THROW_IF_NOT_FOUND;\nconst DI_DECORATOR_FLAG = '__NG_DI_FLAG__';\nclass RetrievingInjector {\n injector;\n constructor(injector) {\n this.injector = injector;\n }\n retrieve(token, options) {\n const flags = convertToBitFlags(options) || 0;\n try {\n return this.injector.get(token, flags & 8 ? null : THROW_IF_NOT_FOUND, flags);\n } catch (e) {\n if (isNotFound(e)) {\n return e;\n }\n throw e;\n }\n }\n}\nfunction injectInjectorOnly(token, flags = 0) {\n const currentInjector = getCurrentInjector();\n if (currentInjector === undefined) {\n throw new RuntimeError(-203, ngDevMode && `The \\`${stringify(token)}\\` token injection failed. \\`inject()\\` function must be called from an injection context such as a constructor, a factory function, a field initializer, or a function used with \\`runInInjectionContext\\`.`);\n } else if (currentInjector === null) {\n return injectRootLimpMode(token, undefined, flags);\n } else {\n const options = convertToInjectOptions(flags);\n const value = currentInjector.retrieve(token, options);\n ngDevMode && emitInjectEvent(token, value, flags);\n if (isNotFound(value)) {\n if (options.optional) {\n return null;\n }\n throw value;\n }\n return value;\n }\n}\nfunction ɵɵinject(token, flags = 0) {\n return (getInjectImplementation() || injectInjectorOnly)(resolveForwardRef(token), flags);\n}\nfunction ɵɵinvalidFactoryDep(index) {\n throw new RuntimeError(202, ngDevMode && `This constructor is not compatible with Angular Dependency Injection because its dependency at index ${index} of the parameter list is invalid.\nThis can happen if the dependency type is a primitive like a string or if an ancestor of this class is missing an Angular decorator.\n\nPlease check that 1) the type for the parameter at index ${index} is correct and 2) the correct Angular decorators are defined for this class and its ancestors.`);\n}\nfunction inject(token, options) {\n return ɵɵinject(token, convertToBitFlags(options));\n}\nfunction convertToBitFlags(flags) {\n if (typeof flags === 'undefined' || typeof flags === 'number') {\n return flags;\n }\n return 0 | (flags.optional && 8) | (flags.host && 1) | (flags.self && 2) | (flags.skipSelf && 4);\n}\nfunction convertToInjectOptions(flags) {\n return {\n optional: !!(flags & 8),\n host: !!(flags & 1),\n self: !!(flags & 2),\n skipSelf: !!(flags & 4)\n };\n}\nfunction injectArgs(types) {\n const args = [];\n for (let i = 0; i < types.length; i++) {\n const arg = resolveForwardRef(types[i]);\n if (Array.isArray(arg)) {\n if (arg.length === 0) {\n throw new RuntimeError(900, ngDevMode && 'Arguments array must have arguments.');\n }\n let type = undefined;\n let flags = 0;\n for (let j = 0; j < arg.length; j++) {\n const meta = arg[j];\n const flag = getInjectFlag(meta);\n if (typeof flag === 'number') {\n if (flag === -1) {\n type = meta.token;\n } else {\n flags |= flag;\n }\n } else {\n type = meta;\n }\n }\n args.push(ɵɵinject(type, flags));\n } else {\n args.push(ɵɵinject(arg));\n }\n }\n return args;\n}\nfunction attachInjectFlag(decorator, flag) {\n decorator[DI_DECORATOR_FLAG] = flag;\n decorator.prototype[DI_DECORATOR_FLAG] = flag;\n return decorator;\n}\nfunction getInjectFlag(token) {\n return token[DI_DECORATOR_FLAG];\n}\nfunction getFactoryDef(type, throwNotFound) {\n const hasFactoryDef = type.hasOwnProperty(NG_FACTORY_DEF);\n if (!hasFactoryDef && throwNotFound === true && ngDevMode) {\n throw new Error(`Type ${stringify(type)} does not have 'ɵfac' property.`);\n }\n return hasFactoryDef ? type[NG_FACTORY_DEF] : null;\n}\nfunction arrayEquals(a, b, identityAccessor) {\n if (a.length !== b.length) return false;\n for (let i = 0; i < a.length; i++) {\n let valueA = a[i];\n let valueB = b[i];\n if (identityAccessor) {\n valueA = identityAccessor(valueA);\n valueB = identityAccessor(valueB);\n }\n if (valueB !== valueA) {\n return false;\n }\n }\n return true;\n}\nfunction flatten(list) {\n return list.flat(Number.POSITIVE_INFINITY);\n}\nfunction deepForEach(input, fn) {\n input.forEach(value => Array.isArray(value) ? deepForEach(value, fn) : fn(value));\n}\nfunction addToArray(arr, index, value) {\n if (index >= arr.length) {\n arr.push(value);\n } else {\n arr.splice(index, 0, value);\n }\n}\nfunction removeFromArray(arr, index) {\n if (index >= arr.length - 1) {\n return arr.pop();\n } else {\n return arr.splice(index, 1)[0];\n }\n}\nfunction newArray(size, value) {\n const list = [];\n for (let i = 0; i < size; i++) {\n list.push(value);\n }\n return list;\n}\nfunction arraySplice(array, index, count) {\n const length = array.length - count;\n while (index < length) {\n array[index] = array[index + count];\n index++;\n }\n while (count--) {\n array.pop();\n }\n}\nfunction arrayInsert2(array, index, value1, value2) {\n ngDevMode && assertLessThanOrEqual(index, array.length, \"Can't insert past array end.\");\n let end = array.length;\n if (end == index) {\n array.push(value1, value2);\n } else if (end === 1) {\n array.push(value2, array[0]);\n array[0] = value1;\n } else {\n end--;\n array.push(array[end - 1], array[end]);\n while (end > index) {\n const previousEnd = end - 2;\n array[end] = array[previousEnd];\n end--;\n }\n array[index] = value1;\n array[index + 1] = value2;\n }\n}\nfunction keyValueArraySet(keyValueArray, key, value) {\n let index = keyValueArrayIndexOf(keyValueArray, key);\n if (index >= 0) {\n keyValueArray[index | 1] = value;\n } else {\n index = ~index;\n arrayInsert2(keyValueArray, index, key, value);\n }\n return index;\n}\nfunction keyValueArrayGet(keyValueArray, key) {\n const index = keyValueArrayIndexOf(keyValueArray, key);\n if (index >= 0) {\n return keyValueArray[index | 1];\n }\n return undefined;\n}\nfunction keyValueArrayIndexOf(keyValueArray, key) {\n return _arrayIndexOfSorted(keyValueArray, key, 1);\n}\nfunction _arrayIndexOfSorted(array, value, shift) {\n ngDevMode && assertEqual(Array.isArray(array), true, 'Expecting an array');\n let start = 0;\n let end = array.length >> shift;\n while (end !== start) {\n const middle = start + (end - start >> 1);\n const current = array[middle << shift];\n if (value === current) {\n return middle << shift;\n } else if (current > value) {\n end = middle;\n } else {\n start = middle + 1;\n }\n }\n return ~(end << shift);\n}\nconst EMPTY_OBJ = {};\nconst EMPTY_ARRAY = [];\nif ((typeof ngDevMode === 'undefined' || ngDevMode) && /*#__PURE__*/initNgDevMode()) {\n /*#__PURE__*/Object.freeze(EMPTY_OBJ);\n /*#__PURE__*/Object.freeze(EMPTY_ARRAY);\n}\nconst ENVIRONMENT_INITIALIZER = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'ENVIRONMENT_INITIALIZER' : '');\nconst INJECTOR$1 = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'INJECTOR' : '', -1);\nconst INJECTOR_DEF_TYPES = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'INJECTOR_DEF_TYPES' : '');\nclass NullInjector {\n get(token, notFoundValue = THROW_IF_NOT_FOUND) {\n if (notFoundValue === THROW_IF_NOT_FOUND) {\n const message = ngDevMode ? `No provider found for \\`${stringify(token)}\\`.` : '';\n const error = createRuntimeError(message, -201);\n error.name = 'ɵNotFound';\n throw error;\n }\n return notFoundValue;\n }\n}\nfunction makeEnvironmentProviders(providers) {\n return {\n ɵproviders: providers\n };\n}\nfunction provideEnvironmentInitializer(initializerFn) {\n return makeEnvironmentProviders([{\n provide: ENVIRONMENT_INITIALIZER,\n multi: true,\n useValue: initializerFn\n }]);\n}\nfunction importProvidersFrom(...sources) {\n return {\n ɵproviders: internalImportProvidersFrom(true, sources),\n ɵfromNgModule: true\n };\n}\nfunction internalImportProvidersFrom(checkForStandaloneCmp, ...sources) {\n const providersOut = [];\n const dedup = new Set();\n let injectorTypesWithProviders;\n const collectProviders = provider => {\n providersOut.push(provider);\n };\n deepForEach(sources, source => {\n if ((typeof ngDevMode === 'undefined' || ngDevMode) && checkForStandaloneCmp) {\n const cmpDef = getComponentDef(source);\n if (cmpDef?.standalone) {\n throw new RuntimeError(800, `Importing providers supports NgModule or ModuleWithProviders but got a standalone component \"${stringifyForError(source)}\"`);\n }\n }\n const internalSource = source;\n if (walkProviderTree(internalSource, collectProviders, [], dedup)) {\n injectorTypesWithProviders ||= [];\n injectorTypesWithProviders.push(internalSource);\n }\n });\n if (injectorTypesWithProviders !== undefined) {\n processInjectorTypesWithProviders(injectorTypesWithProviders, collectProviders);\n }\n return providersOut;\n}\nfunction processInjectorTypesWithProviders(typesWithProviders, visitor) {\n for (let i = 0; i < typesWithProviders.length; i++) {\n const {\n ngModule,\n providers\n } = typesWithProviders[i];\n deepForEachProvider(providers, provider => {\n ngDevMode && validateProvider(provider, providers || EMPTY_ARRAY, ngModule);\n visitor(provider, ngModule);\n });\n }\n}\nfunction walkProviderTree(container, visitor, parents, dedup) {\n container = resolveForwardRef(container);\n if (!container) return false;\n let defType = null;\n let injDef = getInjectorDef(container);\n const cmpDef = !injDef && getComponentDef(container);\n if (!injDef && !cmpDef) {\n const ngModule = container.ngModule;\n injDef = getInjectorDef(ngModule);\n if (injDef) {\n defType = ngModule;\n } else {\n return false;\n }\n } else if (cmpDef && !cmpDef.standalone) {\n return false;\n } else {\n defType = container;\n }\n if (ngDevMode && parents.indexOf(defType) !== -1) {\n const defName = stringify(defType);\n const path = parents.map(stringify).concat(defName);\n throw cyclicDependencyErrorWithDetails(defName, path);\n }\n const isDuplicate = dedup.has(defType);\n if (cmpDef) {\n if (isDuplicate) {\n return false;\n }\n dedup.add(defType);\n if (cmpDef.dependencies) {\n const deps = typeof cmpDef.dependencies === 'function' ? cmpDef.dependencies() : cmpDef.dependencies;\n for (const dep of deps) {\n walkProviderTree(dep, visitor, parents, dedup);\n }\n }\n } else if (injDef) {\n if (injDef.imports != null && !isDuplicate) {\n ngDevMode && parents.push(defType);\n dedup.add(defType);\n let importTypesWithProviders;\n try {\n deepForEach(injDef.imports, imported => {\n if (walkProviderTree(imported, visitor, parents, dedup)) {\n importTypesWithProviders ||= [];\n importTypesWithProviders.push(imported);\n }\n });\n } finally {\n ngDevMode && parents.pop();\n }\n if (importTypesWithProviders !== undefined) {\n processInjectorTypesWithProviders(importTypesWithProviders, visitor);\n }\n }\n if (!isDuplicate) {\n const factory = getFactoryDef(defType) || (() => new defType());\n visitor({\n provide: defType,\n useFactory: factory,\n deps: EMPTY_ARRAY\n }, defType);\n visitor({\n provide: INJECTOR_DEF_TYPES,\n useValue: defType,\n multi: true\n }, defType);\n visitor({\n provide: ENVIRONMENT_INITIALIZER,\n useValue: () => ɵɵinject(defType),\n multi: true\n }, defType);\n }\n const defProviders = injDef.providers;\n if (defProviders != null && !isDuplicate) {\n const injectorType = container;\n deepForEachProvider(defProviders, provider => {\n ngDevMode && validateProvider(provider, defProviders, injectorType);\n visitor(provider, injectorType);\n });\n }\n } else {\n return false;\n }\n return defType !== container && container.providers !== undefined;\n}\nfunction validateProvider(provider, providers, containerType) {\n if (isTypeProvider(provider) || isValueProvider(provider) || isFactoryProvider(provider) || isExistingProvider(provider)) {\n return;\n }\n const classRef = resolveForwardRef(provider && (provider.useClass || provider.provide));\n if (!classRef) {\n throwInvalidProviderError(containerType, providers, provider);\n }\n}\nfunction deepForEachProvider(providers, fn) {\n for (let provider of providers) {\n if (isEnvironmentProviders(provider)) {\n provider = provider.ɵproviders;\n }\n if (Array.isArray(provider)) {\n deepForEachProvider(provider, fn);\n } else {\n fn(provider);\n }\n }\n}\nconst USE_VALUE = /*#__PURE__*/getClosureSafeProperty({\n provide: String,\n useValue: getClosureSafeProperty\n});\nfunction isValueProvider(value) {\n return value !== null && typeof value == 'object' && USE_VALUE in value;\n}\nfunction isExistingProvider(value) {\n return !!(value && value.useExisting);\n}\nfunction isFactoryProvider(value) {\n return !!(value && value.useFactory);\n}\nfunction isTypeProvider(value) {\n return typeof value === 'function';\n}\nfunction isClassProvider(value) {\n return !!value.useClass;\n}\nconst INJECTOR_SCOPE = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'Set Injector scope.' : '');\nconst NOT_YET = {};\nconst CIRCULAR = {};\nlet NULL_INJECTOR = undefined;\nfunction getNullInjector() {\n if (NULL_INJECTOR === undefined) {\n NULL_INJECTOR = new NullInjector();\n }\n return NULL_INJECTOR;\n}\nclass EnvironmentInjector {}\nclass R3Injector extends EnvironmentInjector {\n parent;\n source;\n scopes;\n records = /*#__PURE__*/new Map();\n _ngOnDestroyHooks = /*#__PURE__*/new Set();\n _onDestroyHooks = [];\n get destroyed() {\n return this._destroyed;\n }\n _destroyed = false;\n injectorDefTypes;\n constructor(providers, parent, source, scopes) {\n super();\n this.parent = parent;\n this.source = source;\n this.scopes = scopes;\n forEachSingleProvider(providers, provider => this.processProvider(provider));\n this.records.set(INJECTOR$1, makeRecord(undefined, this));\n if (scopes.has('environment')) {\n this.records.set(EnvironmentInjector, makeRecord(undefined, this));\n }\n const record = this.records.get(INJECTOR_SCOPE);\n if (record != null && typeof record.value === 'string') {\n this.scopes.add(record.value);\n }\n this.injectorDefTypes = new Set(this.get(INJECTOR_DEF_TYPES, EMPTY_ARRAY, {\n self: true\n }));\n }\n retrieve(token, options) {\n const flags = convertToBitFlags(options) || 0;\n try {\n return this.get(token, THROW_IF_NOT_FOUND, flags);\n } catch (e) {\n if (isNotFound$1(e)) {\n return e;\n }\n throw e;\n }\n }\n destroy() {\n assertNotDestroyed(this);\n this._destroyed = true;\n const prevConsumer = setActiveConsumer(null);\n try {\n for (const service of this._ngOnDestroyHooks) {\n service.ngOnDestroy();\n }\n const onDestroyHooks = this._onDestroyHooks;\n this._onDestroyHooks = [];\n for (const hook of onDestroyHooks) {\n hook();\n }\n } finally {\n this.records.clear();\n this._ngOnDestroyHooks.clear();\n this.injectorDefTypes.clear();\n setActiveConsumer(prevConsumer);\n }\n }\n onDestroy(callback) {\n assertNotDestroyed(this);\n this._onDestroyHooks.push(callback);\n return () => this.removeOnDestroy(callback);\n }\n runInContext(fn) {\n assertNotDestroyed(this);\n const previousInjector = setCurrentInjector(this);\n const previousInjectImplementation = setInjectImplementation(undefined);\n let prevInjectContext;\n if (ngDevMode) {\n prevInjectContext = setInjectorProfilerContext({\n injector: this,\n token: null\n });\n }\n try {\n return fn();\n } finally {\n setCurrentInjector(previousInjector);\n setInjectImplementation(previousInjectImplementation);\n ngDevMode && setInjectorProfilerContext(prevInjectContext);\n }\n }\n get(token, notFoundValue = THROW_IF_NOT_FOUND, options) {\n assertNotDestroyed(this);\n if (token.hasOwnProperty(NG_ENV_ID)) {\n return token[NG_ENV_ID](this);\n }\n const flags = convertToBitFlags(options);\n let prevInjectContext;\n if (ngDevMode) {\n prevInjectContext = setInjectorProfilerContext({\n injector: this,\n token: token\n });\n }\n const previousInjector = setCurrentInjector(this);\n const previousInjectImplementation = setInjectImplementation(undefined);\n try {\n if (!(flags & 4)) {\n let record = this.records.get(token);\n if (record === undefined) {\n const def = couldBeInjectableType(token) && getInjectableDef(token);\n if (def && this.injectableDefInScope(def)) {\n if (ngDevMode) {\n runInInjectorProfilerContext(this, token, () => {\n emitProviderConfiguredEvent(token);\n });\n }\n record = makeRecord(injectableDefOrInjectorDefFactory(token), NOT_YET);\n } else {\n record = null;\n }\n this.records.set(token, record);\n }\n if (record != null) {\n return this.hydrate(token, record, flags);\n }\n }\n const nextInjector = !(flags & 2) ? this.parent : getNullInjector();\n notFoundValue = flags & 8 && notFoundValue === THROW_IF_NOT_FOUND ? null : notFoundValue;\n return nextInjector.get(token, notFoundValue);\n } catch (error) {\n const errorCode = getRuntimeErrorCode(error);\n if (errorCode === -200 || errorCode === -201) {\n if (ngDevMode) {\n prependTokenToDependencyPath(error, token);\n if (previousInjector) {\n throw error;\n } else {\n throw augmentRuntimeError(error, this.source);\n }\n } else {\n throw new RuntimeError(errorCode, null);\n }\n } else {\n throw error;\n }\n } finally {\n setInjectImplementation(previousInjectImplementation);\n setCurrentInjector(previousInjector);\n ngDevMode && setInjectorProfilerContext(prevInjectContext);\n }\n }\n resolveInjectorInitializers() {\n const prevConsumer = setActiveConsumer(null);\n const previousInjector = setCurrentInjector(this);\n const previousInjectImplementation = setInjectImplementation(undefined);\n let prevInjectContext;\n if (ngDevMode) {\n prevInjectContext = setInjectorProfilerContext({\n injector: this,\n token: null\n });\n }\n try {\n const initializers = this.get(ENVIRONMENT_INITIALIZER, EMPTY_ARRAY, {\n self: true\n });\n if (ngDevMode && !Array.isArray(initializers)) {\n throw new RuntimeError(-209, 'Unexpected type of the `ENVIRONMENT_INITIALIZER` token value ' + `(expected an array, but got ${typeof initializers}). ` + 'Please check that the `ENVIRONMENT_INITIALIZER` token is configured as a ' + '`multi: true` provider.');\n }\n for (const initializer of initializers) {\n initializer();\n }\n } finally {\n setCurrentInjector(previousInjector);\n setInjectImplementation(previousInjectImplementation);\n ngDevMode && setInjectorProfilerContext(prevInjectContext);\n setActiveConsumer(prevConsumer);\n }\n }\n toString() {\n if (ngDevMode) {\n const tokens = [];\n const records = this.records;\n for (const token of records.keys()) {\n tokens.push(stringify(token));\n }\n return `R3Injector[${tokens.join(', ')}]`;\n }\n return 'R3Injector[...]';\n }\n processProvider(provider) {\n provider = resolveForwardRef(provider);\n let token = isTypeProvider(provider) ? provider : resolveForwardRef(provider && provider.provide);\n const record = providerToRecord(provider);\n if (ngDevMode) {\n runInInjectorProfilerContext(this, token, () => {\n if (isValueProvider(provider)) {\n emitInjectorToCreateInstanceEvent(token);\n emitInstanceCreatedByInjectorEvent(provider.useValue);\n }\n emitProviderConfiguredEvent(provider);\n });\n }\n if (!isTypeProvider(provider) && provider.multi === true) {\n let multiRecord = this.records.get(token);\n if (multiRecord) {\n if (ngDevMode && multiRecord.multi === undefined) {\n throwMixedMultiProviderError();\n }\n } else {\n multiRecord = makeRecord(undefined, NOT_YET, true);\n multiRecord.factory = () => injectArgs(multiRecord.multi);\n this.records.set(token, multiRecord);\n }\n token = provider;\n multiRecord.multi.push(provider);\n } else {\n if (ngDevMode) {\n const existing = this.records.get(token);\n if (existing && existing.multi !== undefined) {\n throwMixedMultiProviderError();\n }\n }\n }\n this.records.set(token, record);\n }\n hydrate(token, record, flags) {\n const prevConsumer = setActiveConsumer(null);\n try {\n if (record.value === CIRCULAR) {\n throw cyclicDependencyError(ngDevMode ? stringify(token) : '');\n } else if (record.value === NOT_YET) {\n record.value = CIRCULAR;\n if (ngDevMode) {\n runInInjectorProfilerContext(this, token, () => {\n emitInjectorToCreateInstanceEvent(token);\n record.value = record.factory(undefined, flags);\n emitInstanceCreatedByInjectorEvent(record.value);\n });\n } else {\n record.value = record.factory(undefined, flags);\n }\n }\n if (typeof record.value === 'object' && record.value && hasOnDestroy(record.value)) {\n this._ngOnDestroyHooks.add(record.value);\n }\n return record.value;\n } finally {\n setActiveConsumer(prevConsumer);\n }\n }\n injectableDefInScope(def) {\n if (!def.providedIn) {\n return false;\n }\n const providedIn = resolveForwardRef(def.providedIn);\n if (typeof providedIn === 'string') {\n return providedIn === 'any' || this.scopes.has(providedIn);\n } else {\n return this.injectorDefTypes.has(providedIn);\n }\n }\n removeOnDestroy(callback) {\n const destroyCBIdx = this._onDestroyHooks.indexOf(callback);\n if (destroyCBIdx !== -1) {\n this._onDestroyHooks.splice(destroyCBIdx, 1);\n }\n }\n}\nfunction injectableDefOrInjectorDefFactory(token) {\n const injectableDef = getInjectableDef(token);\n const factory = injectableDef !== null ? injectableDef.factory : getFactoryDef(token);\n if (factory !== null) {\n return factory;\n }\n if (token instanceof InjectionToken) {\n throw new RuntimeError(-204, ngDevMode && `Token ${stringify(token)} is missing a ɵprov definition.`);\n }\n if (token instanceof Function) {\n return getUndecoratedInjectableFactory(token);\n }\n throw new RuntimeError(-204, ngDevMode && 'unreachable');\n}\nfunction getUndecoratedInjectableFactory(token) {\n const paramLength = token.length;\n if (paramLength > 0) {\n throw new RuntimeError(-204, ngDevMode && `Can't resolve all parameters for ${stringify(token)}: (${newArray(paramLength, '?').join(', ')}).`);\n }\n const inheritedInjectableDef = getInheritedInjectableDef(token);\n if (inheritedInjectableDef !== null) {\n return () => inheritedInjectableDef.factory(token);\n } else {\n return () => new token();\n }\n}\nfunction providerToRecord(provider) {\n if (isValueProvider(provider)) {\n return makeRecord(undefined, provider.useValue);\n } else {\n const factory = providerToFactory(provider);\n return makeRecord(factory, NOT_YET);\n }\n}\nfunction providerToFactory(provider, ngModuleType, providers) {\n let factory = undefined;\n if (ngDevMode && isEnvironmentProviders(provider)) {\n throwInvalidProviderError(undefined, providers, provider);\n }\n if (isTypeProvider(provider)) {\n const unwrappedProvider = resolveForwardRef(provider);\n return getFactoryDef(unwrappedProvider) || injectableDefOrInjectorDefFactory(unwrappedProvider);\n } else {\n if (isValueProvider(provider)) {\n factory = () => resolveForwardRef(provider.useValue);\n } else if (isFactoryProvider(provider)) {\n factory = () => provider.useFactory(...injectArgs(provider.deps || []));\n } else if (isExistingProvider(provider)) {\n factory = (_, flags) => ɵɵinject(resolveForwardRef(provider.useExisting), flags !== undefined && flags & 8 ? 8 : undefined);\n } else {\n const classRef = resolveForwardRef(provider && (provider.useClass || provider.provide));\n if (ngDevMode && !classRef) {\n throwInvalidProviderError(ngModuleType, providers, provider);\n }\n if (hasDeps(provider)) {\n factory = () => new classRef(...injectArgs(provider.deps));\n } else {\n return getFactoryDef(classRef) || injectableDefOrInjectorDefFactory(classRef);\n }\n }\n }\n return factory;\n}\nfunction assertNotDestroyed(injector) {\n if (injector.destroyed) {\n throw new RuntimeError(-205, ngDevMode && 'Injector has already been destroyed.');\n }\n}\nfunction makeRecord(factory, value, multi = false) {\n return {\n factory: factory,\n value: value,\n multi: multi ? [] : undefined\n };\n}\nfunction hasDeps(value) {\n return !!value.deps;\n}\nfunction hasOnDestroy(value) {\n return value !== null && typeof value === 'object' && typeof value.ngOnDestroy === 'function';\n}\nfunction couldBeInjectableType(value) {\n return typeof value === 'function' || typeof value === 'object' && value.ngMetadataName === 'InjectionToken';\n}\nfunction forEachSingleProvider(providers, fn) {\n for (const provider of providers) {\n if (Array.isArray(provider)) {\n forEachSingleProvider(provider, fn);\n } else if (provider && isEnvironmentProviders(provider)) {\n forEachSingleProvider(provider.ɵproviders, fn);\n } else {\n fn(provider);\n }\n }\n}\nfunction runInInjectionContext(injector, fn) {\n let internalInjector;\n if (injector instanceof R3Injector) {\n assertNotDestroyed(injector);\n internalInjector = injector;\n } else {\n internalInjector = new RetrievingInjector(injector);\n }\n let prevInjectorProfilerContext;\n if (ngDevMode) {\n prevInjectorProfilerContext = setInjectorProfilerContext({\n injector,\n token: null\n });\n }\n const prevInjector = setCurrentInjector(internalInjector);\n const previousInjectImplementation = setInjectImplementation(undefined);\n try {\n return fn();\n } finally {\n setCurrentInjector(prevInjector);\n ngDevMode && setInjectorProfilerContext(prevInjectorProfilerContext);\n setInjectImplementation(previousInjectImplementation);\n }\n}\nfunction isInInjectionContext() {\n return getInjectImplementation() !== undefined || getCurrentInjector() != null;\n}\nfunction assertInInjectionContext(debugFn) {\n if (!isInInjectionContext()) {\n throw new RuntimeError(-203, ngDevMode && debugFn.name + '() can only be used within an injection context such as a constructor, a factory function, a field initializer, or a function used with `runInInjectionContext`');\n }\n}\nconst HOST = 0;\nconst TVIEW = 1;\nconst FLAGS = 2;\nconst PARENT = 3;\nconst NEXT = 4;\nconst T_HOST = 5;\nconst HYDRATION = 6;\nconst CLEANUP = 7;\nconst CONTEXT = 8;\nconst INJECTOR = 9;\nconst ENVIRONMENT = 10;\nconst RENDERER = 11;\nconst CHILD_HEAD = 12;\nconst CHILD_TAIL = 13;\nconst DECLARATION_VIEW = 14;\nconst DECLARATION_COMPONENT_VIEW = 15;\nconst DECLARATION_LCONTAINER = 16;\nconst PREORDER_HOOK_FLAGS = 17;\nconst QUERIES = 18;\nconst ID = 19;\nconst EMBEDDED_VIEW_INJECTOR = 20;\nconst ON_DESTROY_HOOKS = 21;\nconst EFFECTS_TO_SCHEDULE = 22;\nconst EFFECTS = 23;\nconst REACTIVE_TEMPLATE_CONSUMER = 24;\nconst AFTER_RENDER_SEQUENCES_TO_ADD = 25;\nconst ANIMATIONS = 26;\nconst HEADER_OFFSET = 27;\nconst TYPE = 1;\nconst DEHYDRATED_VIEWS = 6;\nconst NATIVE = 7;\nconst VIEW_REFS = 8;\nconst MOVED_VIEWS = 9;\nconst CONTAINER_HEADER_OFFSET = 10;\nfunction isLView(value) {\n return Array.isArray(value) && typeof value[TYPE] === 'object';\n}\nfunction isLContainer(value) {\n return Array.isArray(value) && value[TYPE] === true;\n}\nfunction isContentQueryHost(tNode) {\n return (tNode.flags & 4) !== 0;\n}\nfunction isComponentHost(tNode) {\n return tNode.componentOffset > -1;\n}\nfunction isDirectiveHost(tNode) {\n return (tNode.flags & 1) === 1;\n}\nfunction isComponentDef(def) {\n return !!def.template;\n}\nfunction isRootView(target) {\n return (target[FLAGS] & 512) !== 0;\n}\nfunction isProjectionTNode(tNode) {\n return (tNode.type & 16) === 16;\n}\nfunction hasI18n(lView) {\n return (lView[FLAGS] & 32) === 32;\n}\nfunction isDestroyed(lView) {\n return (lView[FLAGS] & 256) === 256;\n}\nfunction assertTNodeForLView(tNode, lView) {\n assertTNodeForTView(tNode, lView[TVIEW]);\n}\nfunction assertTNodeCreationIndex(lView, index) {\n const adjustedIndex = index + HEADER_OFFSET;\n assertIndexInRange(lView, adjustedIndex);\n assertLessThan(adjustedIndex, lView[TVIEW].bindingStartIndex, 'TNodes should be created before any bindings');\n}\nfunction assertTNodeForTView(tNode, tView) {\n assertTNode(tNode);\n const tData = tView.data;\n for (let i = HEADER_OFFSET; i < tData.length; i++) {\n if (tData[i] === tNode) {\n return;\n }\n }\n throwError('This TNode does not belong to this TView.');\n}\nfunction assertTNode(tNode) {\n assertDefined(tNode, 'TNode must be defined');\n if (!(tNode && typeof tNode === 'object' && tNode.hasOwnProperty('directiveStylingLast'))) {\n throwError('Not of type TNode, got: ' + tNode);\n }\n}\nfunction assertTIcu(tIcu) {\n assertDefined(tIcu, 'Expected TIcu to be defined');\n if (!(typeof tIcu.currentCaseLViewIndex === 'number')) {\n throwError('Object is not of TIcu type.');\n }\n}\nfunction assertComponentType(actual, msg = \"Type passed in is not ComponentType, it does not have 'ɵcmp' property.\") {\n if (!getComponentDef(actual)) {\n throwError(msg);\n }\n}\nfunction assertNgModuleType(actual, msg = \"Type passed in is not NgModuleType, it does not have 'ɵmod' property.\") {\n if (!getNgModuleDef(actual)) {\n throwError(msg);\n }\n}\nfunction assertHasParent(tNode) {\n assertDefined(tNode, 'currentTNode should exist!');\n assertDefined(tNode.parent, 'currentTNode should have a parent');\n}\nfunction assertLContainer(value) {\n assertDefined(value, 'LContainer must be defined');\n assertEqual(isLContainer(value), true, 'Expecting LContainer');\n}\nfunction assertLViewOrUndefined(value) {\n value && assertEqual(isLView(value), true, 'Expecting LView or undefined or null');\n}\nfunction assertLView(value) {\n assertDefined(value, 'LView must be defined');\n assertEqual(isLView(value), true, 'Expecting LView');\n}\nfunction assertFirstCreatePass(tView, errMessage) {\n assertEqual(tView.firstCreatePass, true, errMessage || 'Should only be called in first create pass.');\n}\nfunction assertFirstUpdatePass(tView, errMessage) {\n assertEqual(tView.firstUpdatePass, true, 'Should only be called in first update pass.');\n}\nfunction assertDirectiveDef(obj) {\n if (obj.type === undefined || obj.selectors == undefined || obj.inputs === undefined) {\n throwError(`Expected a DirectiveDef/ComponentDef and this object does not seem to have the expected shape.`);\n }\n}\nfunction assertIndexInDeclRange(tView, index) {\n assertBetween(HEADER_OFFSET, tView.bindingStartIndex, index);\n}\nfunction assertIndexInExpandoRange(lView, index) {\n const tView = lView[1];\n assertBetween(tView.expandoStartIndex, lView.length, index);\n}\nfunction assertBetween(lower, upper, index) {\n if (!(lower <= index && index < upper)) {\n throwError(`Index out of range (expecting ${lower} <= ${index} < ${upper})`);\n }\n}\nfunction assertProjectionSlots(lView, errMessage) {\n assertDefined(lView[DECLARATION_COMPONENT_VIEW], 'Component views should exist.');\n assertDefined(lView[DECLARATION_COMPONENT_VIEW][T_HOST].projection, 'Components with projection nodes () must have projection slots defined.');\n}\nfunction assertParentView(lView, errMessage) {\n assertDefined(lView, \"Component views should always have a parent view (component's host view)\");\n}\nfunction assertNodeInjector(lView, injectorIndex) {\n assertIndexInExpandoRange(lView, injectorIndex);\n assertIndexInExpandoRange(lView, injectorIndex + 8);\n assertNumber(lView[injectorIndex + 0], 'injectorIndex should point to a bloom filter');\n assertNumber(lView[injectorIndex + 1], 'injectorIndex should point to a bloom filter');\n assertNumber(lView[injectorIndex + 2], 'injectorIndex should point to a bloom filter');\n assertNumber(lView[injectorIndex + 3], 'injectorIndex should point to a bloom filter');\n assertNumber(lView[injectorIndex + 4], 'injectorIndex should point to a bloom filter');\n assertNumber(lView[injectorIndex + 5], 'injectorIndex should point to a bloom filter');\n assertNumber(lView[injectorIndex + 6], 'injectorIndex should point to a bloom filter');\n assertNumber(lView[injectorIndex + 7], 'injectorIndex should point to a bloom filter');\n assertNumber(lView[injectorIndex + 8], 'injectorIndex should point to parent injector');\n}\nconst SVG_NAMESPACE = 'svg';\nconst MATH_ML_NAMESPACE = 'math';\nfunction unwrapRNode(value) {\n while (Array.isArray(value)) {\n value = value[HOST];\n }\n return value;\n}\nfunction unwrapLView(value) {\n while (Array.isArray(value)) {\n if (typeof value[TYPE] === 'object') return value;\n value = value[HOST];\n }\n return null;\n}\nfunction getNativeByIndex(index, lView) {\n ngDevMode && assertIndexInRange(lView, index);\n ngDevMode && assertGreaterThanOrEqual(index, HEADER_OFFSET, 'Expected to be past HEADER_OFFSET');\n return unwrapRNode(lView[index]);\n}\nfunction getNativeByTNode(tNode, lView) {\n ngDevMode && assertTNodeForLView(tNode, lView);\n ngDevMode && assertIndexInRange(lView, tNode.index);\n const node = unwrapRNode(lView[tNode.index]);\n return node;\n}\nfunction getNativeByTNodeOrNull(tNode, lView) {\n const index = tNode === null ? -1 : tNode.index;\n if (index !== -1) {\n ngDevMode && assertTNodeForLView(tNode, lView);\n const node = unwrapRNode(lView[index]);\n return node;\n }\n return null;\n}\nfunction getTNode(tView, index) {\n ngDevMode && assertGreaterThan(index, -1, 'wrong index for TNode');\n ngDevMode && assertLessThan(index, tView.data.length, 'wrong index for TNode');\n const tNode = tView.data[index];\n ngDevMode && tNode !== null && assertTNode(tNode);\n return tNode;\n}\nfunction load(view, index) {\n ngDevMode && assertIndexInRange(view, index);\n return view[index];\n}\nfunction store(tView, lView, index, value) {\n if (index >= tView.data.length) {\n tView.data[index] = null;\n tView.blueprint[index] = null;\n }\n lView[index] = value;\n}\nfunction getComponentLViewByIndex(nodeIndex, hostView) {\n ngDevMode && assertIndexInRange(hostView, nodeIndex);\n const slotValue = hostView[nodeIndex];\n const lView = isLView(slotValue) ? slotValue : slotValue[HOST];\n return lView;\n}\nfunction isCreationMode(view) {\n return (view[FLAGS] & 4) === 4;\n}\nfunction viewAttachedToChangeDetector(view) {\n return (view[FLAGS] & 128) === 128;\n}\nfunction viewAttachedToContainer(view) {\n return isLContainer(view[PARENT]);\n}\nfunction getConstant(consts, index) {\n if (index === null || index === undefined) return null;\n ngDevMode && assertIndexInRange(consts, index);\n return consts[index];\n}\nfunction resetPreOrderHookFlags(lView) {\n lView[PREORDER_HOOK_FLAGS] = 0;\n}\nfunction markViewForRefresh(lView) {\n if (lView[FLAGS] & 1024) {\n return;\n }\n lView[FLAGS] |= 1024;\n if (viewAttachedToChangeDetector(lView)) {\n markAncestorsForTraversal(lView);\n }\n}\nfunction walkUpViews(nestingLevel, currentView) {\n while (nestingLevel > 0) {\n ngDevMode && assertDefined(currentView[DECLARATION_VIEW], 'Declaration view should be defined if nesting level is greater than 0.');\n currentView = currentView[DECLARATION_VIEW];\n nestingLevel--;\n }\n return currentView;\n}\nfunction requiresRefreshOrTraversal(lView) {\n return !!(lView[FLAGS] & (1024 | 8192) || lView[REACTIVE_TEMPLATE_CONSUMER]?.dirty);\n}\nfunction updateAncestorTraversalFlagsOnAttach(lView) {\n lView[ENVIRONMENT].changeDetectionScheduler?.notify(8);\n if (lView[FLAGS] & 64) {\n lView[FLAGS] |= 1024;\n }\n if (requiresRefreshOrTraversal(lView)) {\n markAncestorsForTraversal(lView);\n }\n}\nfunction markAncestorsForTraversal(lView) {\n lView[ENVIRONMENT].changeDetectionScheduler?.notify(0);\n let parent = getLViewParent(lView);\n while (parent !== null) {\n if (parent[FLAGS] & 8192) {\n break;\n }\n parent[FLAGS] |= 8192;\n if (!viewAttachedToChangeDetector(parent)) {\n break;\n }\n parent = getLViewParent(parent);\n }\n}\nfunction storeLViewOnDestroy(lView, onDestroyCallback) {\n if (isDestroyed(lView)) {\n throw new RuntimeError(911, ngDevMode && 'View has already been destroyed.');\n }\n if (lView[ON_DESTROY_HOOKS] === null) {\n lView[ON_DESTROY_HOOKS] = [];\n }\n lView[ON_DESTROY_HOOKS].push(onDestroyCallback);\n}\nfunction removeLViewOnDestroy(lView, onDestroyCallback) {\n if (lView[ON_DESTROY_HOOKS] === null) return;\n const destroyCBIdx = lView[ON_DESTROY_HOOKS].indexOf(onDestroyCallback);\n if (destroyCBIdx !== -1) {\n lView[ON_DESTROY_HOOKS].splice(destroyCBIdx, 1);\n }\n}\nfunction getLViewParent(lView) {\n ngDevMode && assertLView(lView);\n const parent = lView[PARENT];\n return isLContainer(parent) ? parent[PARENT] : parent;\n}\nfunction getOrCreateLViewCleanup(view) {\n return view[CLEANUP] ??= [];\n}\nfunction getOrCreateTViewCleanup(tView) {\n return tView.cleanup ??= [];\n}\nfunction storeCleanupWithContext(tView, lView, context, cleanupFn) {\n const lCleanup = getOrCreateLViewCleanup(lView);\n ngDevMode && assertDefined(context, 'Cleanup context is mandatory when registering framework-level destroy hooks');\n lCleanup.push(context);\n if (tView.firstCreatePass) {\n getOrCreateTViewCleanup(tView).push(cleanupFn, lCleanup.length - 1);\n } else {\n if (ngDevMode) {\n Object.freeze(getOrCreateTViewCleanup(tView));\n }\n }\n}\nconst instructionState = {\n lFrame: /*#__PURE__*/createLFrame(null),\n bindingsEnabled: true,\n skipHydrationRootTNode: null\n};\nvar CheckNoChangesMode = /*#__PURE__*/function (CheckNoChangesMode) {\n CheckNoChangesMode[CheckNoChangesMode[\"Off\"] = 0] = \"Off\";\n CheckNoChangesMode[CheckNoChangesMode[\"Exhaustive\"] = 1] = \"Exhaustive\";\n CheckNoChangesMode[CheckNoChangesMode[\"OnlyDirtyViews\"] = 2] = \"OnlyDirtyViews\";\n return CheckNoChangesMode;\n}(CheckNoChangesMode || {});\nlet _checkNoChangesMode = 0;\nlet _isRefreshingViews = false;\nfunction getElementDepthCount() {\n return instructionState.lFrame.elementDepthCount;\n}\nfunction increaseElementDepthCount() {\n instructionState.lFrame.elementDepthCount++;\n}\nfunction decreaseElementDepthCount() {\n instructionState.lFrame.elementDepthCount--;\n}\nfunction getBindingsEnabled() {\n return instructionState.bindingsEnabled;\n}\nfunction isInSkipHydrationBlock() {\n return instructionState.skipHydrationRootTNode !== null;\n}\nfunction isSkipHydrationRootTNode(tNode) {\n return instructionState.skipHydrationRootTNode === tNode;\n}\nfunction ɵɵenableBindings() {\n instructionState.bindingsEnabled = true;\n}\nfunction enterSkipHydrationBlock(tNode) {\n instructionState.skipHydrationRootTNode = tNode;\n}\nfunction ɵɵdisableBindings() {\n instructionState.bindingsEnabled = false;\n}\nfunction leaveSkipHydrationBlock() {\n instructionState.skipHydrationRootTNode = null;\n}\nfunction getLView() {\n return instructionState.lFrame.lView;\n}\nfunction getTView() {\n return instructionState.lFrame.tView;\n}\nfunction ɵɵrestoreView(viewToRestore) {\n instructionState.lFrame.contextLView = viewToRestore;\n return viewToRestore[CONTEXT];\n}\nfunction ɵɵresetView(value) {\n instructionState.lFrame.contextLView = null;\n return value;\n}\nfunction getCurrentTNode() {\n let currentTNode = getCurrentTNodePlaceholderOk();\n while (currentTNode !== null && currentTNode.type === 64) {\n currentTNode = currentTNode.parent;\n }\n return currentTNode;\n}\nfunction getCurrentTNodePlaceholderOk() {\n return instructionState.lFrame.currentTNode;\n}\nfunction getCurrentParentTNode() {\n const lFrame = instructionState.lFrame;\n const currentTNode = lFrame.currentTNode;\n return lFrame.isParent ? currentTNode : currentTNode.parent;\n}\nfunction setCurrentTNode(tNode, isParent) {\n ngDevMode && tNode && assertTNodeForTView(tNode, instructionState.lFrame.tView);\n const lFrame = instructionState.lFrame;\n lFrame.currentTNode = tNode;\n lFrame.isParent = isParent;\n}\nfunction isCurrentTNodeParent() {\n return instructionState.lFrame.isParent;\n}\nfunction setCurrentTNodeAsNotParent() {\n instructionState.lFrame.isParent = false;\n}\nfunction getContextLView() {\n const contextLView = instructionState.lFrame.contextLView;\n ngDevMode && assertDefined(contextLView, 'contextLView must be defined.');\n return contextLView;\n}\nfunction isInCheckNoChangesMode() {\n !ngDevMode && throwError('Must never be called in production mode');\n return _checkNoChangesMode !== CheckNoChangesMode.Off;\n}\nfunction isExhaustiveCheckNoChanges() {\n !ngDevMode && throwError('Must never be called in production mode');\n return _checkNoChangesMode === CheckNoChangesMode.Exhaustive;\n}\nfunction setIsInCheckNoChangesMode(mode) {\n !ngDevMode && throwError('Must never be called in production mode');\n _checkNoChangesMode = mode;\n}\nfunction isRefreshingViews() {\n return _isRefreshingViews;\n}\nfunction setIsRefreshingViews(mode) {\n const prev = _isRefreshingViews;\n _isRefreshingViews = mode;\n return prev;\n}\nfunction getBindingRoot() {\n const lFrame = instructionState.lFrame;\n let index = lFrame.bindingRootIndex;\n if (index === -1) {\n index = lFrame.bindingRootIndex = lFrame.tView.bindingStartIndex;\n }\n return index;\n}\nfunction getBindingIndex() {\n return instructionState.lFrame.bindingIndex;\n}\nfunction setBindingIndex(value) {\n return instructionState.lFrame.bindingIndex = value;\n}\nfunction nextBindingIndex() {\n return instructionState.lFrame.bindingIndex++;\n}\nfunction incrementBindingIndex(count) {\n const lFrame = instructionState.lFrame;\n const index = lFrame.bindingIndex;\n lFrame.bindingIndex = lFrame.bindingIndex + count;\n return index;\n}\nfunction isInI18nBlock() {\n return instructionState.lFrame.inI18n;\n}\nfunction setInI18nBlock(isInI18nBlock) {\n instructionState.lFrame.inI18n = isInI18nBlock;\n}\nfunction setBindingRootForHostBindings(bindingRootIndex, currentDirectiveIndex) {\n const lFrame = instructionState.lFrame;\n lFrame.bindingIndex = lFrame.bindingRootIndex = bindingRootIndex;\n setCurrentDirectiveIndex(currentDirectiveIndex);\n}\nfunction getCurrentDirectiveIndex() {\n return instructionState.lFrame.currentDirectiveIndex;\n}\nfunction setCurrentDirectiveIndex(currentDirectiveIndex) {\n instructionState.lFrame.currentDirectiveIndex = currentDirectiveIndex;\n}\nfunction getCurrentDirectiveDef(tData) {\n const currentDirectiveIndex = instructionState.lFrame.currentDirectiveIndex;\n return currentDirectiveIndex === -1 ? null : tData[currentDirectiveIndex];\n}\nfunction getCurrentQueryIndex() {\n return instructionState.lFrame.currentQueryIndex;\n}\nfunction setCurrentQueryIndex(value) {\n instructionState.lFrame.currentQueryIndex = value;\n}\nfunction getDeclarationTNode(lView) {\n const tView = lView[TVIEW];\n if (tView.type === 2) {\n ngDevMode && assertDefined(tView.declTNode, 'Embedded TNodes should have declaration parents.');\n return tView.declTNode;\n }\n if (tView.type === 1) {\n return lView[T_HOST];\n }\n return null;\n}\nfunction enterDI(lView, tNode, flags) {\n ngDevMode && assertLViewOrUndefined(lView);\n if (flags & 4) {\n ngDevMode && assertTNodeForTView(tNode, lView[TVIEW]);\n let parentTNode = tNode;\n let parentLView = lView;\n while (true) {\n ngDevMode && assertDefined(parentTNode, 'Parent TNode should be defined');\n parentTNode = parentTNode.parent;\n if (parentTNode === null && !(flags & 1)) {\n parentTNode = getDeclarationTNode(parentLView);\n if (parentTNode === null) break;\n ngDevMode && assertDefined(parentLView, 'Parent LView should be defined');\n parentLView = parentLView[DECLARATION_VIEW];\n if (parentTNode.type & (2 | 8)) {\n break;\n }\n } else {\n break;\n }\n }\n if (parentTNode === null) {\n return false;\n } else {\n tNode = parentTNode;\n lView = parentLView;\n }\n }\n ngDevMode && assertTNodeForLView(tNode, lView);\n const lFrame = instructionState.lFrame = allocLFrame();\n lFrame.currentTNode = tNode;\n lFrame.lView = lView;\n return true;\n}\nfunction enterView(newView) {\n ngDevMode && assertNotEqual(newView[0], newView[1], '????');\n ngDevMode && assertLViewOrUndefined(newView);\n const newLFrame = allocLFrame();\n if (ngDevMode) {\n assertEqual(newLFrame.isParent, true, 'Expected clean LFrame');\n assertEqual(newLFrame.lView, null, 'Expected clean LFrame');\n assertEqual(newLFrame.tView, null, 'Expected clean LFrame');\n assertEqual(newLFrame.selectedIndex, -1, 'Expected clean LFrame');\n assertEqual(newLFrame.elementDepthCount, 0, 'Expected clean LFrame');\n assertEqual(newLFrame.currentDirectiveIndex, -1, 'Expected clean LFrame');\n assertEqual(newLFrame.currentNamespace, null, 'Expected clean LFrame');\n assertEqual(newLFrame.bindingRootIndex, -1, 'Expected clean LFrame');\n assertEqual(newLFrame.currentQueryIndex, 0, 'Expected clean LFrame');\n }\n const tView = newView[TVIEW];\n instructionState.lFrame = newLFrame;\n ngDevMode && tView.firstChild && assertTNodeForTView(tView.firstChild, tView);\n newLFrame.currentTNode = tView.firstChild;\n newLFrame.lView = newView;\n newLFrame.tView = tView;\n newLFrame.contextLView = newView;\n newLFrame.bindingIndex = tView.bindingStartIndex;\n newLFrame.inI18n = false;\n}\nfunction allocLFrame() {\n const currentLFrame = instructionState.lFrame;\n const childLFrame = currentLFrame === null ? null : currentLFrame.child;\n const newLFrame = childLFrame === null ? createLFrame(currentLFrame) : childLFrame;\n return newLFrame;\n}\nfunction createLFrame(parent) {\n const lFrame = {\n currentTNode: null,\n isParent: true,\n lView: null,\n tView: null,\n selectedIndex: -1,\n contextLView: null,\n elementDepthCount: 0,\n currentNamespace: null,\n currentDirectiveIndex: -1,\n bindingRootIndex: -1,\n bindingIndex: -1,\n currentQueryIndex: 0,\n parent: parent,\n child: null,\n inI18n: false\n };\n parent !== null && (parent.child = lFrame);\n return lFrame;\n}\nfunction leaveViewLight() {\n const oldLFrame = instructionState.lFrame;\n instructionState.lFrame = oldLFrame.parent;\n oldLFrame.currentTNode = null;\n oldLFrame.lView = null;\n return oldLFrame;\n}\nconst leaveDI = leaveViewLight;\nfunction leaveView() {\n const oldLFrame = leaveViewLight();\n oldLFrame.isParent = true;\n oldLFrame.tView = null;\n oldLFrame.selectedIndex = -1;\n oldLFrame.contextLView = null;\n oldLFrame.elementDepthCount = 0;\n oldLFrame.currentDirectiveIndex = -1;\n oldLFrame.currentNamespace = null;\n oldLFrame.bindingRootIndex = -1;\n oldLFrame.bindingIndex = -1;\n oldLFrame.currentQueryIndex = 0;\n}\nfunction nextContextImpl(level) {\n const contextLView = instructionState.lFrame.contextLView = walkUpViews(level, instructionState.lFrame.contextLView);\n return contextLView[CONTEXT];\n}\nfunction getSelectedIndex() {\n return instructionState.lFrame.selectedIndex;\n}\nfunction setSelectedIndex(index) {\n ngDevMode && index !== -1 && assertGreaterThanOrEqual(index, HEADER_OFFSET, 'Index must be past HEADER_OFFSET (or -1).');\n ngDevMode && assertLessThan(index, instructionState.lFrame.lView.length, \"Can't set index passed end of LView\");\n instructionState.lFrame.selectedIndex = index;\n}\nfunction getSelectedTNode() {\n const lFrame = instructionState.lFrame;\n return getTNode(lFrame.tView, lFrame.selectedIndex);\n}\nfunction ɵɵnamespaceSVG() {\n instructionState.lFrame.currentNamespace = SVG_NAMESPACE;\n}\nfunction ɵɵnamespaceMathML() {\n instructionState.lFrame.currentNamespace = MATH_ML_NAMESPACE;\n}\nfunction ɵɵnamespaceHTML() {\n namespaceHTMLInternal();\n}\nfunction namespaceHTMLInternal() {\n instructionState.lFrame.currentNamespace = null;\n}\nfunction getNamespace() {\n return instructionState.lFrame.currentNamespace;\n}\nlet _wasLastNodeCreated = true;\nfunction wasLastNodeCreated() {\n return _wasLastNodeCreated;\n}\nfunction lastNodeWasCreated(flag) {\n _wasLastNodeCreated = flag;\n}\nfunction createInjector(defType, parent = null, additionalProviders = null, name) {\n const injector = createInjectorWithoutInjectorInstances(defType, parent, additionalProviders, name);\n injector.resolveInjectorInitializers();\n return injector;\n}\nfunction createInjectorWithoutInjectorInstances(defType, parent = null, additionalProviders = null, name, scopes = new Set()) {\n const providers = [additionalProviders || EMPTY_ARRAY, importProvidersFrom(defType)];\n let source = undefined;\n if (ngDevMode) {\n source = name || (typeof defType === 'object' ? undefined : stringify(defType));\n }\n return new R3Injector(providers, parent || getNullInjector(), source || null, scopes);\n}\nclass Injector {\n static THROW_IF_NOT_FOUND = THROW_IF_NOT_FOUND;\n static NULL = /*#__PURE__*/new NullInjector();\n static create(options, parent) {\n if (Array.isArray(options)) {\n return createInjector({\n name: ''\n }, parent, options, '');\n } else {\n const name = options.name ?? '';\n return createInjector({\n name\n }, options.parent, options.providers, name);\n }\n }\n static ɵprov = /* @__PURE__ */\n ɵɵdefineInjectable({\n token: Injector,\n providedIn: 'any',\n factory: () => ɵɵinject(INJECTOR$1)\n });\n static __NG_ELEMENT_ID__ = -1;\n}\nconst DOCUMENT = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'DocumentToken' : '');\nlet DestroyRef = /*#__PURE__*/(() => {\n class DestroyRef {\n static __NG_ELEMENT_ID__ = injectDestroyRef;\n static __NG_ENV_ID__ = injector => injector;\n }\n return DestroyRef;\n})();\nclass NodeInjectorDestroyRef extends DestroyRef {\n _lView;\n constructor(_lView) {\n super();\n this._lView = _lView;\n }\n get destroyed() {\n return isDestroyed(this._lView);\n }\n onDestroy(callback) {\n const lView = this._lView;\n storeLViewOnDestroy(lView, callback);\n return () => removeLViewOnDestroy(lView, callback);\n }\n}\nfunction injectDestroyRef() {\n return new NodeInjectorDestroyRef(getLView());\n}\nconst SCHEDULE_IN_ROOT_ZONE_DEFAULT = false;\nconst DEBUG_TASK_TRACKER = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'DEBUG_TASK_TRACKER' : '');\nlet PendingTasksInternal = /*#__PURE__*/(() => {\n class PendingTasksInternal {\n taskId = 0;\n pendingTasks = new Set();\n destroyed = false;\n pendingTask = new BehaviorSubject(false);\n debugTaskTracker = inject(DEBUG_TASK_TRACKER, {\n optional: true\n });\n get hasPendingTasks() {\n return this.destroyed ? false : this.pendingTask.value;\n }\n get hasPendingTasksObservable() {\n if (this.destroyed) {\n return new Observable(subscriber => {\n subscriber.next(false);\n subscriber.complete();\n });\n }\n return this.pendingTask;\n }\n add() {\n if (!this.hasPendingTasks && !this.destroyed) {\n this.pendingTask.next(true);\n }\n const taskId = this.taskId++;\n this.pendingTasks.add(taskId);\n this.debugTaskTracker?.add(taskId);\n return taskId;\n }\n has(taskId) {\n return this.pendingTasks.has(taskId);\n }\n remove(taskId) {\n this.pendingTasks.delete(taskId);\n this.debugTaskTracker?.remove(taskId);\n if (this.pendingTasks.size === 0 && this.hasPendingTasks) {\n this.pendingTask.next(false);\n }\n }\n ngOnDestroy() {\n this.pendingTasks.clear();\n if (this.hasPendingTasks) {\n this.pendingTask.next(false);\n }\n this.destroyed = true;\n this.pendingTask.unsubscribe();\n }\n static ɵprov = /* @__PURE__ */\n ɵɵdefineInjectable({\n token: PendingTasksInternal,\n providedIn: 'root',\n factory: () => new PendingTasksInternal()\n });\n }\n return PendingTasksInternal;\n})();\nclass EventEmitter_ extends Subject {\n __isAsync;\n destroyRef = undefined;\n pendingTasks = undefined;\n constructor(isAsync = false) {\n super();\n this.__isAsync = isAsync;\n if (isInInjectionContext()) {\n this.destroyRef = inject(DestroyRef, {\n optional: true\n }) ?? undefined;\n this.pendingTasks = inject(PendingTasksInternal, {\n optional: true\n }) ?? undefined;\n }\n }\n emit(value) {\n const prevConsumer = setActiveConsumer$1(null);\n try {\n super.next(value);\n } finally {\n setActiveConsumer$1(prevConsumer);\n }\n }\n subscribe(observerOrNext, error, complete) {\n let nextFn = observerOrNext;\n let errorFn = error || (() => null);\n let completeFn = complete;\n if (observerOrNext && typeof observerOrNext === 'object') {\n const observer = observerOrNext;\n nextFn = observer.next?.bind(observer);\n errorFn = observer.error?.bind(observer);\n completeFn = observer.complete?.bind(observer);\n }\n if (this.__isAsync) {\n errorFn = this.wrapInTimeout(errorFn);\n if (nextFn) {\n nextFn = this.wrapInTimeout(nextFn);\n }\n if (completeFn) {\n completeFn = this.wrapInTimeout(completeFn);\n }\n }\n const sink = super.subscribe({\n next: nextFn,\n error: errorFn,\n complete: completeFn\n });\n if (observerOrNext instanceof Subscription) {\n observerOrNext.add(sink);\n }\n return sink;\n }\n wrapInTimeout(fn) {\n return value => {\n const taskId = this.pendingTasks?.add();\n setTimeout(() => {\n try {\n fn(value);\n } finally {\n if (taskId !== undefined) {\n this.pendingTasks?.remove(taskId);\n }\n }\n });\n };\n }\n}\nconst EventEmitter = EventEmitter_;\nfunction noop(...args) {}\nfunction scheduleCallbackWithRafRace(callback) {\n let timeoutId;\n let animationFrameId;\n function cleanup() {\n callback = noop;\n try {\n if (animationFrameId !== undefined && typeof cancelAnimationFrame === 'function') {\n cancelAnimationFrame(animationFrameId);\n }\n if (timeoutId !== undefined) {\n clearTimeout(timeoutId);\n }\n } catch {}\n }\n timeoutId = setTimeout(() => {\n callback();\n cleanup();\n });\n if (typeof requestAnimationFrame === 'function') {\n animationFrameId = requestAnimationFrame(() => {\n callback();\n cleanup();\n });\n }\n return () => cleanup();\n}\nfunction scheduleCallbackWithMicrotask(callback) {\n queueMicrotask(() => callback());\n return () => {\n callback = noop;\n };\n}\nclass AsyncStackTaggingZoneSpec {\n createTask;\n constructor(namePrefix, consoleAsyncStackTaggingImpl = console) {\n this.name = 'asyncStackTagging for ' + namePrefix;\n this.createTask = consoleAsyncStackTaggingImpl?.createTask ?? (() => null);\n }\n name;\n onScheduleTask(delegate, _current, target, task) {\n task.consoleTask = this.createTask(`Zone - ${task.source || task.type}`);\n return delegate.scheduleTask(target, task);\n }\n onInvokeTask(delegate, _currentZone, targetZone, task, applyThis, applyArgs) {\n let ret;\n if (task.consoleTask) {\n ret = task.consoleTask.run(() => delegate.invokeTask(targetZone, task, applyThis, applyArgs));\n } else {\n ret = delegate.invokeTask(targetZone, task, applyThis, applyArgs);\n }\n return ret;\n }\n}\nconst isAngularZoneProperty = 'isAngularZone';\nconst angularZoneInstanceIdProperty = isAngularZoneProperty + '_ID';\nlet ngZoneInstanceId = 0;\nclass NgZone {\n hasPendingMacrotasks = false;\n hasPendingMicrotasks = false;\n isStable = true;\n onUnstable = /*#__PURE__*/new EventEmitter(false);\n onMicrotaskEmpty = /*#__PURE__*/new EventEmitter(false);\n onStable = /*#__PURE__*/new EventEmitter(false);\n onError = /*#__PURE__*/new EventEmitter(false);\n constructor(options) {\n const {\n enableLongStackTrace = false,\n shouldCoalesceEventChangeDetection = false,\n shouldCoalesceRunChangeDetection = false,\n scheduleInRootZone = SCHEDULE_IN_ROOT_ZONE_DEFAULT\n } = options;\n if (typeof Zone == 'undefined') {\n throw new RuntimeError(908, ngDevMode && `In this configuration Angular requires Zone.js`);\n }\n Zone.assertZonePatched();\n const self = this;\n self._nesting = 0;\n self._outer = self._inner = Zone.current;\n if (ngDevMode) {\n self._inner = self._inner.fork(new AsyncStackTaggingZoneSpec('Angular'));\n }\n if (Zone['TaskTrackingZoneSpec']) {\n self._inner = self._inner.fork(new Zone['TaskTrackingZoneSpec']());\n }\n if (enableLongStackTrace && Zone['longStackTraceZoneSpec']) {\n self._inner = self._inner.fork(Zone['longStackTraceZoneSpec']);\n }\n self.shouldCoalesceEventChangeDetection = !shouldCoalesceRunChangeDetection && shouldCoalesceEventChangeDetection;\n self.shouldCoalesceRunChangeDetection = shouldCoalesceRunChangeDetection;\n self.callbackScheduled = false;\n self.scheduleInRootZone = scheduleInRootZone;\n forkInnerZoneWithAngularBehavior(self);\n }\n static isInAngularZone() {\n return typeof Zone !== 'undefined' && Zone.current.get(isAngularZoneProperty) === true;\n }\n static assertInAngularZone() {\n if (!NgZone.isInAngularZone()) {\n throw new RuntimeError(909, ngDevMode && 'Expected to be in Angular Zone, but it is not!');\n }\n }\n static assertNotInAngularZone() {\n if (NgZone.isInAngularZone()) {\n throw new RuntimeError(909, ngDevMode && 'Expected to not be in Angular Zone, but it is!');\n }\n }\n run(fn, applyThis, applyArgs) {\n return this._inner.run(fn, applyThis, applyArgs);\n }\n runTask(fn, applyThis, applyArgs, name) {\n const zone = this._inner;\n const task = zone.scheduleEventTask('NgZoneEvent: ' + name, fn, EMPTY_PAYLOAD, noop, noop);\n try {\n return zone.runTask(task, applyThis, applyArgs);\n } finally {\n zone.cancelTask(task);\n }\n }\n runGuarded(fn, applyThis, applyArgs) {\n return this._inner.runGuarded(fn, applyThis, applyArgs);\n }\n runOutsideAngular(fn) {\n return this._outer.run(fn);\n }\n}\nconst EMPTY_PAYLOAD = {};\nfunction checkStable(zone) {\n if (zone._nesting == 0 && !zone.hasPendingMicrotasks && !zone.isStable) {\n try {\n zone._nesting++;\n zone.onMicrotaskEmpty.emit(null);\n } finally {\n zone._nesting--;\n if (!zone.hasPendingMicrotasks) {\n try {\n zone.runOutsideAngular(() => zone.onStable.emit(null));\n } finally {\n zone.isStable = true;\n }\n }\n }\n }\n}\nfunction delayChangeDetectionForEvents(zone) {\n if (zone.isCheckStableRunning || zone.callbackScheduled) {\n return;\n }\n zone.callbackScheduled = true;\n function scheduleCheckStable() {\n scheduleCallbackWithRafRace(() => {\n zone.callbackScheduled = false;\n updateMicroTaskStatus(zone);\n zone.isCheckStableRunning = true;\n checkStable(zone);\n zone.isCheckStableRunning = false;\n });\n }\n if (zone.scheduleInRootZone) {\n Zone.root.run(() => {\n scheduleCheckStable();\n });\n } else {\n zone._outer.run(() => {\n scheduleCheckStable();\n });\n }\n updateMicroTaskStatus(zone);\n}\nfunction forkInnerZoneWithAngularBehavior(zone) {\n const delayChangeDetectionForEventsDelegate = () => {\n delayChangeDetectionForEvents(zone);\n };\n const instanceId = ngZoneInstanceId++;\n zone._inner = zone._inner.fork({\n name: 'angular',\n properties: {\n [isAngularZoneProperty]: true,\n [angularZoneInstanceIdProperty]: instanceId,\n [angularZoneInstanceIdProperty + instanceId]: true\n },\n onInvokeTask: (delegate, current, target, task, applyThis, applyArgs) => {\n if (shouldBeIgnoredByZone(applyArgs)) {\n return delegate.invokeTask(target, task, applyThis, applyArgs);\n }\n try {\n onEnter(zone);\n return delegate.invokeTask(target, task, applyThis, applyArgs);\n } finally {\n if (zone.shouldCoalesceEventChangeDetection && task.type === 'eventTask' || zone.shouldCoalesceRunChangeDetection) {\n delayChangeDetectionForEventsDelegate();\n }\n onLeave(zone);\n }\n },\n onInvoke: (delegate, current, target, callback, applyThis, applyArgs, source) => {\n try {\n onEnter(zone);\n return delegate.invoke(target, callback, applyThis, applyArgs, source);\n } finally {\n if (zone.shouldCoalesceRunChangeDetection && !zone.callbackScheduled && !isSchedulerTick(applyArgs)) {\n delayChangeDetectionForEventsDelegate();\n }\n onLeave(zone);\n }\n },\n onHasTask: (delegate, current, target, hasTaskState) => {\n delegate.hasTask(target, hasTaskState);\n if (current === target) {\n if (hasTaskState.change == 'microTask') {\n zone._hasPendingMicrotasks = hasTaskState.microTask;\n updateMicroTaskStatus(zone);\n checkStable(zone);\n } else if (hasTaskState.change == 'macroTask') {\n zone.hasPendingMacrotasks = hasTaskState.macroTask;\n }\n }\n },\n onHandleError: (delegate, current, target, error) => {\n delegate.handleError(target, error);\n zone.runOutsideAngular(() => zone.onError.emit(error));\n return false;\n }\n });\n}\nfunction updateMicroTaskStatus(zone) {\n if (zone._hasPendingMicrotasks || (zone.shouldCoalesceEventChangeDetection || zone.shouldCoalesceRunChangeDetection) && zone.callbackScheduled === true) {\n zone.hasPendingMicrotasks = true;\n } else {\n zone.hasPendingMicrotasks = false;\n }\n}\nfunction onEnter(zone) {\n zone._nesting++;\n if (zone.isStable) {\n zone.isStable = false;\n zone.onUnstable.emit(null);\n }\n}\nfunction onLeave(zone) {\n zone._nesting--;\n checkStable(zone);\n}\nclass NoopNgZone {\n hasPendingMicrotasks = false;\n hasPendingMacrotasks = false;\n isStable = true;\n onUnstable = /*#__PURE__*/new EventEmitter();\n onMicrotaskEmpty = /*#__PURE__*/new EventEmitter();\n onStable = /*#__PURE__*/new EventEmitter();\n onError = /*#__PURE__*/new EventEmitter();\n run(fn, applyThis, applyArgs) {\n return fn.apply(applyThis, applyArgs);\n }\n runGuarded(fn, applyThis, applyArgs) {\n return fn.apply(applyThis, applyArgs);\n }\n runOutsideAngular(fn) {\n return fn();\n }\n runTask(fn, applyThis, applyArgs, name) {\n return fn.apply(applyThis, applyArgs);\n }\n}\nfunction shouldBeIgnoredByZone(applyArgs) {\n return hasApplyArgsData(applyArgs, '__ignore_ng_zone__');\n}\nfunction isSchedulerTick(applyArgs) {\n return hasApplyArgsData(applyArgs, '__scheduler_tick__');\n}\nfunction hasApplyArgsData(applyArgs, key) {\n if (!Array.isArray(applyArgs)) {\n return false;\n }\n if (applyArgs.length !== 1) {\n return false;\n }\n return applyArgs[0]?.data?.[key] === true;\n}\nclass ErrorHandler {\n _console = console;\n handleError(error) {\n this._console.error('ERROR', error);\n }\n}\nconst INTERNAL_APPLICATION_ERROR_HANDLER = /*#__PURE__*/new InjectionToken(typeof ngDevMode === 'undefined' || ngDevMode ? 'internal error handler' : '', {\n factory: () => {\n const zone = inject(NgZone);\n const injector = inject(EnvironmentInjector);\n let userErrorHandler;\n return e => {\n zone.runOutsideAngular(() => {\n if (injector.destroyed && !userErrorHandler) {\n setTimeout(() => {\n throw e;\n });\n } else {\n userErrorHandler ??= injector.get(ErrorHandler);\n userErrorHandler.handleError(e);\n }\n });\n };\n }\n});\nconst errorHandlerEnvironmentInitializer = {\n provide: ENVIRONMENT_INITIALIZER,\n useValue: () => {\n const handler = inject(ErrorHandler, {\n optional: true\n });\n if ((typeof ngDevMode === 'undefined' || ngDevMode) && handler === null) {\n throw new RuntimeError(402, `A required Injectable was not found in the dependency injection tree. ` + 'If you are bootstrapping an NgModule, make sure that the `BrowserModule` is imported.');\n }\n },\n multi: true\n};\nconst globalErrorListeners = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'GlobalErrorListeners' : '', {\n factory: () => {\n if (typeof ngServerMode !== 'undefined' && ngServerMode) {\n return;\n }\n const window = inject(DOCUMENT).defaultView;\n if (!window) {\n return;\n }\n const errorHandler = inject(INTERNAL_APPLICATION_ERROR_HANDLER);\n const rejectionListener = e => {\n errorHandler(e.reason);\n e.preventDefault();\n };\n const errorListener = e => {\n if (e.error) {\n errorHandler(e.error);\n } else {\n errorHandler(new Error(ngDevMode ? `An ErrorEvent with no error occurred. See Error.cause for details: ${e.message}` : e.message, {\n cause: e\n }));\n }\n e.preventDefault();\n };\n const setupEventListeners = () => {\n window.addEventListener('unhandledrejection', rejectionListener);\n window.addEventListener('error', errorListener);\n };\n if (typeof Zone !== 'undefined') {\n Zone.root.run(setupEventListeners);\n } else {\n setupEventListeners();\n }\n inject(DestroyRef).onDestroy(() => {\n window.removeEventListener('error', errorListener);\n window.removeEventListener('unhandledrejection', rejectionListener);\n });\n }\n});\nfunction provideBrowserGlobalErrorListeners() {\n return makeEnvironmentProviders([provideEnvironmentInitializer(() => void inject(globalErrorListeners))]);\n}\nfunction ɵunwrapWritableSignal(value) {\n return null;\n}\nfunction signal(initialValue, options) {\n const [get, set, update] = createSignal(initialValue, options?.equal);\n const signalFn = get;\n const node = signalFn[SIGNAL];\n signalFn.set = set;\n signalFn.update = update;\n signalFn.asReadonly = signalAsReadonlyFn.bind(signalFn);\n if (typeof ngDevMode !== 'undefined' && ngDevMode) {\n const debugName = options?.debugName;\n node.debugName = debugName;\n signalFn.toString = () => `[Signal${debugName ? ' (' + debugName + ')' : ''}: ${signalFn()}]`;\n }\n return signalFn;\n}\nfunction signalAsReadonlyFn() {\n const node = this[SIGNAL];\n if (node.readonlyFn === undefined) {\n const readonlyFn = () => this();\n readonlyFn[SIGNAL] = node;\n node.readonlyFn = readonlyFn;\n }\n return node.readonlyFn;\n}\nfunction assertNotInReactiveContext(debugFn, extraContext) {\n if (getActiveConsumer() !== null) {\n throw new RuntimeError(-602, ngDevMode && `${debugFn.name}() cannot be called from within a reactive context.${extraContext ? ` ${extraContext}` : ''}`);\n }\n}\nlet ViewContext = /*#__PURE__*/(() => {\n class ViewContext {\n view;\n node;\n constructor(view, node) {\n this.view = view;\n this.node = node;\n }\n static __NG_ELEMENT_ID__ = injectViewContext;\n }\n return ViewContext;\n})();\nfunction injectViewContext() {\n return new ViewContext(getLView(), getCurrentTNode());\n}\nclass ChangeDetectionScheduler {}\nconst ZONELESS_ENABLED = /*#__PURE__*/new InjectionToken(typeof ngDevMode === 'undefined' || ngDevMode ? 'Zoneless enabled' : '', {\n factory: () => true\n});\nconst PROVIDED_ZONELESS = /*#__PURE__*/new InjectionToken(typeof ngDevMode === 'undefined' || ngDevMode ? 'Zoneless provided' : '', {\n factory: () => false\n});\nconst SCHEDULE_IN_ROOT_ZONE = /*#__PURE__*/new InjectionToken(typeof ngDevMode === 'undefined' || ngDevMode ? 'run changes outside zone in root' : '');\nlet PendingTasks = /*#__PURE__*/(() => {\n class PendingTasks {\n internalPendingTasks = inject(PendingTasksInternal);\n scheduler = inject(ChangeDetectionScheduler);\n errorHandler = inject(INTERNAL_APPLICATION_ERROR_HANDLER);\n add() {\n const taskId = this.internalPendingTasks.add();\n return () => {\n if (!this.internalPendingTasks.has(taskId)) {\n return;\n }\n this.scheduler.notify(11);\n this.internalPendingTasks.remove(taskId);\n };\n }\n run(fn) {\n const removeTask = this.add();\n fn().catch(this.errorHandler).finally(removeTask);\n }\n static ɵprov = /* @__PURE__ */\n ɵɵdefineInjectable({\n token: PendingTasks,\n providedIn: 'root',\n factory: () => new PendingTasks()\n });\n }\n return PendingTasks;\n})();\nlet EffectScheduler = /*#__PURE__*/(() => {\n class EffectScheduler {\n static ɵprov = /* @__PURE__ */\n ɵɵdefineInjectable({\n token: EffectScheduler,\n providedIn: 'root',\n factory: () => new ZoneAwareEffectScheduler()\n });\n }\n return EffectScheduler;\n})();\nclass ZoneAwareEffectScheduler {\n dirtyEffectCount = 0;\n queues = /*#__PURE__*/new Map();\n add(handle) {\n this.enqueue(handle);\n this.schedule(handle);\n }\n schedule(handle) {\n if (!handle.dirty) {\n return;\n }\n this.dirtyEffectCount++;\n }\n remove(handle) {\n const zone = handle.zone;\n const queue = this.queues.get(zone);\n if (!queue.has(handle)) {\n return;\n }\n queue.delete(handle);\n if (handle.dirty) {\n this.dirtyEffectCount--;\n }\n }\n enqueue(handle) {\n const zone = handle.zone;\n if (!this.queues.has(zone)) {\n this.queues.set(zone, new Set());\n }\n const queue = this.queues.get(zone);\n if (queue.has(handle)) {\n return;\n }\n queue.add(handle);\n }\n flush() {\n while (this.dirtyEffectCount > 0) {\n let ranOneEffect = false;\n for (const [zone, queue] of this.queues) {\n if (zone === null) {\n ranOneEffect ||= this.flushQueue(queue);\n } else {\n ranOneEffect ||= zone.run(() => this.flushQueue(queue));\n }\n }\n if (!ranOneEffect) {\n this.dirtyEffectCount = 0;\n }\n }\n }\n flushQueue(queue) {\n let ranOneEffect = false;\n for (const handle of queue) {\n if (!handle.dirty) {\n continue;\n }\n this.dirtyEffectCount--;\n ranOneEffect = true;\n handle.run();\n }\n return ranOneEffect;\n }\n}\nclass EffectRefImpl {\n [SIGNAL];\n constructor(node) {\n this[SIGNAL] = node;\n }\n destroy() {\n this[SIGNAL].destroy();\n }\n}\nfunction effect(effectFn, options) {\n ngDevMode && assertNotInReactiveContext(effect, 'Call `effect` outside of a reactive context. For example, schedule the ' + 'effect inside the component constructor.');\n if (ngDevMode && !options?.injector) {\n assertInInjectionContext(effect);\n }\n if (ngDevMode && options?.allowSignalWrites !== undefined) {\n console.warn(`The 'allowSignalWrites' flag is deprecated and no longer impacts effect() (writes are always allowed)`);\n }\n const injector = options?.injector ?? inject(Injector);\n let destroyRef = options?.manualCleanup !== true ? injector.get(DestroyRef) : null;\n let node;\n const viewContext = injector.get(ViewContext, null, {\n optional: true\n });\n const notifier = injector.get(ChangeDetectionScheduler);\n if (viewContext !== null) {\n node = createViewEffect(viewContext.view, notifier, effectFn);\n if (destroyRef instanceof NodeInjectorDestroyRef && destroyRef._lView === viewContext.view) {\n destroyRef = null;\n }\n } else {\n node = createRootEffect(effectFn, injector.get(EffectScheduler), notifier);\n }\n node.injector = injector;\n if (destroyRef !== null) {\n node.onDestroyFns = [destroyRef.onDestroy(() => node.destroy())];\n }\n const effectRef = new EffectRefImpl(node);\n if (ngDevMode) {\n node.debugName = options?.debugName ?? '';\n const prevInjectorProfilerContext = setInjectorProfilerContext({\n injector,\n token: null\n });\n try {\n emitEffectCreatedEvent(effectRef);\n } finally {\n setInjectorProfilerContext(prevInjectorProfilerContext);\n }\n }\n return effectRef;\n}\nconst EFFECT_NODE = /* @__PURE__ */(() => ({\n ...BASE_EFFECT_NODE,\n cleanupFns: undefined,\n zone: null,\n onDestroyFns: null,\n run() {\n if (ngDevMode && isInNotificationPhase()) {\n throw new Error(`Schedulers cannot synchronously execute watches while scheduling.`);\n }\n const prevRefreshingViews = setIsRefreshingViews(false);\n try {\n runEffect(this);\n } finally {\n setIsRefreshingViews(prevRefreshingViews);\n }\n },\n cleanup() {\n if (!this.cleanupFns?.length) {\n return;\n }\n const prevConsumer = setActiveConsumer$1(null);\n try {\n while (this.cleanupFns.length) {\n this.cleanupFns.pop()();\n }\n } finally {\n this.cleanupFns = [];\n setActiveConsumer$1(prevConsumer);\n }\n }\n}))();\nconst ROOT_EFFECT_NODE = /* @__PURE__ */(() => ({\n ...EFFECT_NODE,\n consumerMarkedDirty() {\n this.scheduler.schedule(this);\n this.notifier.notify(12);\n },\n destroy() {\n consumerDestroy(this);\n if (this.onDestroyFns !== null) {\n for (const fn of this.onDestroyFns) {\n fn();\n }\n }\n this.cleanup();\n this.scheduler.remove(this);\n }\n}))();\nconst VIEW_EFFECT_NODE = /* @__PURE__ */(() => ({\n ...EFFECT_NODE,\n consumerMarkedDirty() {\n this.view[FLAGS] |= 8192;\n markAncestorsForTraversal(this.view);\n this.notifier.notify(13);\n },\n destroy() {\n consumerDestroy(this);\n if (this.onDestroyFns !== null) {\n for (const fn of this.onDestroyFns) {\n fn();\n }\n }\n this.cleanup();\n this.view[EFFECTS]?.delete(this);\n }\n}))();\nfunction createViewEffect(view, notifier, fn) {\n const node = Object.create(VIEW_EFFECT_NODE);\n node.view = view;\n node.zone = typeof Zone !== 'undefined' ? Zone.current : null;\n node.notifier = notifier;\n node.fn = createEffectFn(node, fn);\n view[EFFECTS] ??= new Set();\n view[EFFECTS].add(node);\n node.consumerMarkedDirty(node);\n return node;\n}\nfunction createRootEffect(fn, scheduler, notifier) {\n const node = Object.create(ROOT_EFFECT_NODE);\n node.fn = createEffectFn(node, fn);\n node.scheduler = scheduler;\n node.notifier = notifier;\n node.zone = typeof Zone !== 'undefined' ? Zone.current : null;\n node.scheduler.add(node);\n node.notifier.notify(12);\n return node;\n}\nfunction createEffectFn(node, fn) {\n return () => {\n fn(cleanupFn => (node.cleanupFns ??= []).push(cleanupFn));\n };\n}\nexport { AFTER_RENDER_SEQUENCES_TO_ADD, ANIMATIONS, CHILD_HEAD, CHILD_TAIL, CLEANUP, CONTAINER_HEADER_OFFSET, CONTEXT, ChangeDetectionScheduler, CheckNoChangesMode, DEBUG_TASK_TRACKER, DECLARATION_COMPONENT_VIEW, DECLARATION_LCONTAINER, DECLARATION_VIEW, DEHYDRATED_VIEWS, DOCUMENT, DOC_PAGE_BASE_URL, DestroyRef, EFFECTS, EFFECTS_TO_SCHEDULE, EMBEDDED_VIEW_INJECTOR, EMPTY_ARRAY, EMPTY_OBJ, ENVIRONMENT, ENVIRONMENT_INITIALIZER, ERROR_DETAILS_PAGE_BASE_URL, EffectRefImpl, EffectScheduler, EnvironmentInjector, ErrorHandler, EventEmitter, FLAGS, HEADER_OFFSET, HOST, HYDRATION, ID, INJECTOR$1 as INJECTOR, INJECTOR as INJECTOR$1, INJECTOR_DEF_TYPES, INJECTOR_SCOPE, INTERNAL_APPLICATION_ERROR_HANDLER, InjectionToken, Injector, MATH_ML_NAMESPACE, MOVED_VIEWS, NATIVE, NEXT, NG_COMP_DEF, NG_DIR_DEF, NG_ELEMENT_ID, NG_FACTORY_DEF, NG_INJ_DEF, NG_MOD_DEF, NG_PIPE_DEF, NG_PROV_DEF, NgZone, NoopNgZone, NullInjector, ON_DESTROY_HOOKS, PARENT, PREORDER_HOOK_FLAGS, PROVIDED_ZONELESS, PendingTasks, PendingTasksInternal, QUERIES, R3Injector, REACTIVE_TEMPLATE_CONSUMER, RENDERER, RuntimeError, SCHEDULE_IN_ROOT_ZONE, SCHEDULE_IN_ROOT_ZONE_DEFAULT, SVG_NAMESPACE, TVIEW, T_HOST, VERSION, VIEW_REFS, Version, ViewContext, XSS_SECURITY_URL, ZONELESS_ENABLED, _global, addToArray, angularZoneInstanceIdProperty, arrayEquals, arrayInsert2, arraySplice, assertComponentType, assertDefined, assertDirectiveDef, assertDomNode, assertElement, assertEqual, assertFirstCreatePass, assertFirstUpdatePass, assertFunction, assertGreaterThan, assertGreaterThanOrEqual, assertHasParent, assertInInjectionContext, assertIndexInDeclRange, assertIndexInExpandoRange, assertIndexInRange, assertInjectImplementationNotEqual, assertLContainer, assertLView, assertLessThan, assertNgModuleType, assertNodeInjector, assertNotDefined, assertNotEqual, assertNotInReactiveContext, assertNotReactive, assertNotSame, assertNumber, assertNumberInRange, assertOneOf, assertParentView, assertProjectionSlots, assertSame, assertString, assertTIcu, assertTNode, assertTNodeCreationIndex, assertTNodeForLView, assertTNodeForTView, attachInjectFlag, concatStringsWithSpace, convertToBitFlags, createInjector, createInjectorWithoutInjectorInstances, cyclicDependencyError, cyclicDependencyErrorWithDetails, debugStringifyTypeForError, decreaseElementDepthCount, deepForEach, effect, emitAfterRenderEffectPhaseCreatedEvent, emitInjectEvent, emitInjectorToCreateInstanceEvent, emitInstanceCreatedByInjectorEvent, emitProviderConfiguredEvent, enterDI, enterSkipHydrationBlock, enterView, errorHandlerEnvironmentInitializer, fillProperties, flatten, formatRuntimeError, forwardRef, getBindingIndex, getBindingRoot, getBindingsEnabled, getClosureSafeProperty, getComponentDef, getComponentLViewByIndex, getConstant, getContextLView, getCurrentDirectiveDef, getCurrentDirectiveIndex, getCurrentParentTNode, getCurrentQueryIndex, getCurrentTNode, getCurrentTNodePlaceholderOk, getDirectiveDef, getDirectiveDefOrThrow, getElementDepthCount, getFactoryDef, getInjectableDef, getInjectorDef, getLView, getLViewParent, getNamespace, getNativeByIndex, getNativeByTNode, getNativeByTNodeOrNull, getNgModuleDef, getNgModuleDefOrThrow, getNullInjector, getOrCreateLViewCleanup, getOrCreateTViewCleanup, getPipeDef, getSelectedIndex, getSelectedTNode, getTNode, getTView, hasI18n, importProvidersFrom, increaseElementDepthCount, incrementBindingIndex, initNgDevMode, inject, injectRootLimpMode, internalImportProvidersFrom, isClassProvider, isComponentDef, isComponentHost, isContentQueryHost, isCreationMode, isCurrentTNodeParent, isDestroyed, isDirectiveHost, isEnvironmentProviders, isExhaustiveCheckNoChanges, isForwardRef, isInCheckNoChangesMode, isInI18nBlock, isInInjectionContext, isInSkipHydrationBlock, isInjectable, isLContainer, isLView, isProjectionTNode, isRefreshingViews, isRootView, isSkipHydrationRootTNode, isStandalone, isTypeProvider, keyValueArrayGet, keyValueArrayIndexOf, keyValueArraySet, lastNodeWasCreated, leaveDI, leaveSkipHydrationBlock, leaveView, load, makeEnvironmentProviders, markAncestorsForTraversal, markViewForRefresh, newArray, nextBindingIndex, nextContextImpl, provideBrowserGlobalErrorListeners, provideEnvironmentInitializer, providerToFactory, removeFromArray, removeLViewOnDestroy, renderStringify, requiresRefreshOrTraversal, resetPreOrderHookFlags, resolveForwardRef, runInInjectionContext, runInInjectorProfilerContext, scheduleCallbackWithMicrotask, scheduleCallbackWithRafRace, setBindingIndex, setBindingRootForHostBindings, setCurrentDirectiveIndex, setCurrentQueryIndex, setCurrentTNode, setCurrentTNodeAsNotParent, setInI18nBlock, setInjectImplementation, setInjectorProfiler, setInjectorProfilerContext, setIsInCheckNoChangesMode, setIsRefreshingViews, setSelectedIndex, signal, signalAsReadonlyFn, store, storeCleanupWithContext, storeLViewOnDestroy, stringify, stringifyForError, throwError, throwProviderNotFoundError, truncateMiddle, unwrapLView, unwrapRNode, updateAncestorTraversalFlagsOnAttach, viewAttachedToChangeDetector, viewAttachedToContainer, walkProviderTree, walkUpViews, wasLastNodeCreated, ɵunwrapWritableSignal, ɵɵdefineInjectable, ɵɵdefineInjector, ɵɵdisableBindings, ɵɵenableBindings, ɵɵinject, ɵɵinvalidFactoryDep, ɵɵnamespaceHTML, ɵɵnamespaceMathML, ɵɵnamespaceSVG, ɵɵresetView, ɵɵrestoreView };\n","/**\n * @license Angular v21.2.4\n * (c) 2010-2026 Google LLC. https://angular.dev/\n * License: MIT\n */\n\nimport { attachInjectFlag, _global, ɵɵdefineInjectable as __defineInjectable, ɵɵdefineInjector as __defineInjector, ɵɵinject as __inject, ɵɵinvalidFactoryDep as __invalidFactoryDep, resolveForwardRef, newArray, EMPTY_OBJ, assertString, assertNotEqual, FLAGS, assertEqual, isInCheckNoChangesMode, PREORDER_HOOK_FLAGS, assertFirstCreatePass, assertDefined, throwError, assertNumber, assertGreaterThan, HEADER_OFFSET, DECLARATION_VIEW, NG_FACTORY_DEF, isForwardRef, getFactoryDef, assertIndexInRange, assertTNodeForLView, enterDI, runInInjectorProfilerContext, getCurrentTNode, getLView, emitInjectorToCreateInstanceEvent, emitInstanceCreatedByInjectorEvent, throwProviderNotFoundError, leaveDI, assertNodeInjector, stringifyForError, cyclicDependencyErrorWithDetails, cyclicDependencyError, setInjectorProfilerContext, setInjectImplementation, assertDirectiveDef, NG_ELEMENT_ID, convertToBitFlags, isRootView, T_HOST, TVIEW, injectRootLimpMode, isComponentDef, EMBEDDED_VIEW_INJECTOR, INJECTOR$1 as INJECTOR, DECLARATION_COMPONENT_VIEW, isComponentHost, RuntimeError, NG_PROV_DEF, getClosureSafeProperty, getNativeByTNode, flatten, arrayEquals, ID, isLView, assertDomNode, unwrapRNode, getComponentLViewByIndex, CONTEXT, EMPTY_ARRAY, assertLView, HOST, CHILD_HEAD, NEXT, isLContainer, getLViewParent, Injector, CLEANUP, getComponentDef, getDirectiveDef, InjectionToken, inject, DOCUMENT as DOCUMENT$1, ENVIRONMENT_INITIALIZER, formatRuntimeError, isInSkipHydrationBlock as isInSkipHydrationBlock$1, HYDRATION, isContentQueryHost, setCurrentQueryIndex, isDirectiveHost, XSS_SECURITY_URL, RENDERER, renderStringify, getSelectedTNode, ENVIRONMENT, makeEnvironmentProviders, resetPreOrderHookFlags, PARENT, CHILD_TAIL, assertSame, assertFirstUpdatePass, getSelectedIndex, getTView, assertIndexInDeclRange, setSelectedIndex, stringify, ANIMATIONS, NgZone, ChangeDetectionScheduler, ErrorHandler, AFTER_RENDER_SEQUENCES_TO_ADD, markAncestorsForTraversal, assertNotInReactiveContext, assertInInjectionContext, DestroyRef, ViewContext, EnvironmentInjector, assertLContainer, MOVED_VIEWS, isDestroyed, REACTIVE_TEMPLATE_CONSUMER, DECLARATION_LCONTAINER, QUERIES, assertNotReactive, ON_DESTROY_HOOKS, assertFunction, EFFECTS, assertProjectionSlots, NATIVE, assertParentView, CONTAINER_HEADER_OFFSET, assertNotSame, setCurrentDirectiveIndex, setCurrentTNode, getElementDepthCount, increaseElementDepthCount, wasLastNodeCreated, isCurrentTNodeParent, setCurrentTNodeAsNotParent, assertHasParent, INTERNAL_APPLICATION_ERROR_HANDLER, getCurrentDirectiveIndex, unwrapLView, isCreationMode, enterView, leaveView, markViewForRefresh, setIsRefreshingViews, isExhaustiveCheckNoChanges, requiresRefreshOrTraversal, setIsInCheckNoChangesMode, CheckNoChangesMode, setBindingIndex, EFFECTS_TO_SCHEDULE, viewAttachedToChangeDetector, setBindingRootForHostBindings, isRefreshingViews, removeFromArray, addToArray, updateAncestorTraversalFlagsOnAttach, storeLViewOnDestroy, VIEW_REFS, assertGreaterThanOrEqual, isInI18nBlock, assertTNodeForTView, getCurrentParentTNode, getCurrentTNodePlaceholderOk, assertTNode, assertTIcu, assertNumberInRange, DEHYDRATED_VIEWS, getNgModuleDef, getPipeDef as getPipeDef$1, getNgModuleDefOrThrow, isStandalone, concatStringsWithSpace, assertInjectImplementationNotEqual, emitInjectEvent, getConstant, assertLessThan, getOrCreateTViewCleanup, getOrCreateLViewCleanup, debugStringifyTypeForError, assertNotDefined, nextBindingIndex, getTNode, getDirectiveDefOrThrow, assertComponentType, SVG_NAMESPACE, MATH_ML_NAMESPACE, viewAttachedToContainer, storeCleanupWithContext, signal, createInjectorWithoutInjectorInstances, R3Injector, getNullInjector, internalImportProvidersFrom, initNgDevMode, fillProperties, getBindingsEnabled, lastNodeWasCreated, removeLViewOnDestroy, walkUpViews, getNativeByIndex, assertElement, arrayInsert2, arraySplice, setInjectorProfiler, EffectRefImpl, NullInjector, INJECTOR_DEF_TYPES, walkProviderTree, getInjectorDef, deepForEach, isTypeProvider, isInInjectionContext, runInInjectionContext, ZONELESS_ENABLED, EffectScheduler, PendingTasksInternal, PendingTasks, assertTNodeCreationIndex, decreaseElementDepthCount, isSkipHydrationRootTNode, leaveSkipHydrationBlock, getNamespace, enterSkipHydrationBlock, getCurrentDirectiveDef, assertIndexInExpandoRange, getBindingIndex, assertOneOf, setInI18nBlock, nextContextImpl, getCurrentQueryIndex, getContextLView, load, keyValueArrayIndexOf, incrementBindingIndex, keyValueArraySet, keyValueArrayGet, store, getBindingRoot, providerToFactory, emitProviderConfiguredEvent, isClassProvider, NG_COMP_DEF, ɵɵresetView as __resetView, ɵɵnamespaceHTML as __namespaceHTML, ɵɵnamespaceMathML as __namespaceMathML, ɵɵnamespaceSVG as __namespaceSVG, ɵɵenableBindings as __enableBindings, ɵɵdisableBindings as __disableBindings, ɵɵrestoreView as __restoreView, forwardRef, NG_MOD_DEF, NG_INJ_DEF, NG_DIR_DEF, NG_PIPE_DEF, angularZoneInstanceIdProperty, SCHEDULE_IN_ROOT_ZONE, PROVIDED_ZONELESS, NoopNgZone, scheduleCallbackWithMicrotask, scheduleCallbackWithRafRace, getNativeByTNodeOrNull } from './_effect-chunk2.mjs';\nimport { setActiveConsumer, SIGNAL, consumerDestroy, REACTIVE_NODE, consumerPollProducersForChange, consumerBeforeComputation, getActiveConsumer, consumerAfterComputation, createComputed, setThrowInvalidWriteToSignalError } from './_effect-chunk.mjs';\nimport { Subject, Subscription } from 'rxjs';\nimport { setActiveConsumer as setActiveConsumer$1 } from '@angular/core/primitives/signals';\nimport { map } from 'rxjs/operators';\nimport { Attribute as Attribute$1 } from './_attribute-chunk.mjs';\nfunction noSideEffects(fn) {\n return {\n toString: fn\n }.toString();\n}\nconst ANNOTATIONS = '__annotations__';\nconst PARAMETERS = '__parameters__';\nconst PROP_METADATA = '__prop__metadata__';\nfunction makeDecorator(name, props, parentClass, additionalProcessing, typeFn) {\n return noSideEffects(() => {\n const metaCtor = makeMetadataCtor(props);\n function DecoratorFactory(...args) {\n if (this instanceof DecoratorFactory) {\n metaCtor.call(this, ...args);\n return this;\n }\n const annotationInstance = new DecoratorFactory(...args);\n return function TypeDecorator(cls) {\n if (typeFn) typeFn(cls, ...args);\n const annotations = cls.hasOwnProperty(ANNOTATIONS) ? cls[ANNOTATIONS] : Object.defineProperty(cls, ANNOTATIONS, {\n value: []\n })[ANNOTATIONS];\n annotations.push(annotationInstance);\n return cls;\n };\n }\n if (parentClass) {\n DecoratorFactory.prototype = Object.create(parentClass.prototype);\n }\n DecoratorFactory.prototype.ngMetadataName = name;\n DecoratorFactory.annotationCls = DecoratorFactory;\n return DecoratorFactory;\n });\n}\nfunction makeMetadataCtor(props) {\n return function ctor(...args) {\n if (props) {\n const values = props(...args);\n for (const propName in values) {\n this[propName] = values[propName];\n }\n }\n };\n}\nfunction makeParamDecorator(name, props, parentClass) {\n return noSideEffects(() => {\n const metaCtor = makeMetadataCtor(props);\n function ParamDecoratorFactory(...args) {\n if (this instanceof ParamDecoratorFactory) {\n metaCtor.apply(this, args);\n return this;\n }\n const annotationInstance = new ParamDecoratorFactory(...args);\n ParamDecorator.annotation = annotationInstance;\n return ParamDecorator;\n function ParamDecorator(cls, unusedKey, index) {\n const parameters = cls.hasOwnProperty(PARAMETERS) ? cls[PARAMETERS] : Object.defineProperty(cls, PARAMETERS, {\n value: []\n })[PARAMETERS];\n while (parameters.length <= index) {\n parameters.push(null);\n }\n (parameters[index] = parameters[index] || []).push(annotationInstance);\n return cls;\n }\n }\n ParamDecoratorFactory.prototype.ngMetadataName = name;\n ParamDecoratorFactory.annotationCls = ParamDecoratorFactory;\n return ParamDecoratorFactory;\n });\n}\nfunction makePropDecorator(name, props, parentClass, additionalProcessing) {\n return noSideEffects(() => {\n const metaCtor = makeMetadataCtor(props);\n function PropDecoratorFactory(...args) {\n if (this instanceof PropDecoratorFactory) {\n metaCtor.apply(this, args);\n return this;\n }\n const decoratorInstance = new PropDecoratorFactory(...args);\n function PropDecorator(target, name) {\n if (target === undefined) {\n throw new Error('Standard Angular field decorators are not supported in JIT mode.');\n }\n const constructor = target.constructor;\n const meta = constructor.hasOwnProperty(PROP_METADATA) ? constructor[PROP_METADATA] : Object.defineProperty(constructor, PROP_METADATA, {\n value: {}\n })[PROP_METADATA];\n meta[name] = meta.hasOwnProperty(name) && meta[name] || [];\n meta[name].unshift(decoratorInstance);\n }\n return PropDecorator;\n }\n if (parentClass) {\n PropDecoratorFactory.prototype = Object.create(parentClass.prototype);\n }\n PropDecoratorFactory.prototype.ngMetadataName = name;\n PropDecoratorFactory.annotationCls = PropDecoratorFactory;\n return PropDecoratorFactory;\n });\n}\nconst Inject = /*#__PURE__*/attachInjectFlag(/*#__PURE__*/makeParamDecorator('Inject', token => ({\n token\n})), -1);\nconst Optional = /*#__PURE__*/attachInjectFlag(/*#__PURE__*/makeParamDecorator('Optional'), 8);\nconst Self = /*#__PURE__*/attachInjectFlag(/*#__PURE__*/makeParamDecorator('Self'), 2);\nconst SkipSelf = /*#__PURE__*/attachInjectFlag(/*#__PURE__*/makeParamDecorator('SkipSelf'), 4);\nconst Host = /*#__PURE__*/attachInjectFlag(/*#__PURE__*/makeParamDecorator('Host'), 1);\nfunction getCompilerFacade(request) {\n const globalNg = _global['ng'];\n if (globalNg && globalNg.ɵcompilerFacade) {\n return globalNg.ɵcompilerFacade;\n }\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n console.error(`JIT compilation failed for ${request.kind}`, request.type);\n let message = `The ${request.kind} '${request.type.name}' needs to be compiled using the JIT compiler, but '@angular/compiler' is not available.\\n\\n`;\n if (request.usage === 1) {\n message += `The ${request.kind} is part of a library that has been partially compiled.\\n`;\n message += `However, the Angular Linker has not processed the library such that JIT compilation is used as fallback.\\n`;\n message += '\\n';\n message += `Ideally, the library is processed using the Angular Linker to become fully AOT compiled.\\n`;\n } else {\n message += `JIT compilation is discouraged for production use-cases! Consider using AOT mode instead.\\n`;\n }\n message += `Alternatively, the JIT compiler should be loaded by bootstrapping using '@angular/platform-browser-dynamic' or '@angular/platform-server',\\n`;\n message += `or manually provide the compiler with 'import \"@angular/compiler\";' before bootstrapping.`;\n throw new Error(message);\n } else {\n throw new Error('JIT compiler unavailable');\n }\n}\nconst angularCoreDiEnv = {\n 'ɵɵdefineInjectable': __defineInjectable,\n 'ɵɵdefineInjector': __defineInjector,\n 'ɵɵinject': __inject,\n 'ɵɵinvalidFactoryDep': __invalidFactoryDep,\n 'resolveForwardRef': resolveForwardRef\n};\nconst Type = Function;\nfunction isType(v) {\n return typeof v === 'function';\n}\nconst ES5_DELEGATE_CTOR = /^function\\s+\\S+\\(\\)\\s*{[\\s\\S]+\\.apply\\(this,\\s*(arguments|(?:[^()]+\\(\\[\\],)?[^()]+\\(arguments\\).*)\\)/;\nconst ES2015_INHERITED_CLASS = /^class\\s+[A-Za-z\\d$_]*\\s*extends\\s+[^{]+{/;\nconst ES2015_INHERITED_CLASS_WITH_CTOR = /^class\\s+[A-Za-z\\d$_]*\\s*extends\\s+[^{]+{[\\s\\S]*constructor\\s*\\(/;\nconst ES2015_INHERITED_CLASS_WITH_DELEGATE_CTOR = /^class\\s+[A-Za-z\\d$_]*\\s*extends\\s+[^{]+{[\\s\\S]*constructor\\s*\\(\\)\\s*{[^}]*super\\(\\.\\.\\.arguments\\)/;\nfunction isDelegateCtor(typeStr) {\n return ES5_DELEGATE_CTOR.test(typeStr) || ES2015_INHERITED_CLASS_WITH_DELEGATE_CTOR.test(typeStr) || ES2015_INHERITED_CLASS.test(typeStr) && !ES2015_INHERITED_CLASS_WITH_CTOR.test(typeStr);\n}\nclass ReflectionCapabilities {\n _reflect;\n constructor(reflect) {\n this._reflect = reflect || _global['Reflect'];\n }\n factory(t) {\n return (...args) => new t(...args);\n }\n _zipTypesAndAnnotations(paramTypes, paramAnnotations) {\n let result;\n if (typeof paramTypes === 'undefined') {\n result = newArray(paramAnnotations.length);\n } else {\n result = newArray(paramTypes.length);\n }\n for (let i = 0; i < result.length; i++) {\n if (typeof paramTypes === 'undefined') {\n result[i] = [];\n } else if (paramTypes[i] && paramTypes[i] != Object) {\n result[i] = [paramTypes[i]];\n } else {\n result[i] = [];\n }\n if (paramAnnotations && paramAnnotations[i] != null) {\n result[i] = result[i].concat(paramAnnotations[i]);\n }\n }\n return result;\n }\n _ownParameters(type, parentCtor) {\n const typeStr = type.toString();\n if (isDelegateCtor(typeStr)) {\n return null;\n }\n if (type.parameters && type.parameters !== parentCtor.parameters) {\n return type.parameters;\n }\n const tsickleCtorParams = type.ctorParameters;\n if (tsickleCtorParams && tsickleCtorParams !== parentCtor.ctorParameters) {\n const ctorParameters = typeof tsickleCtorParams === 'function' ? tsickleCtorParams() : tsickleCtorParams;\n const paramTypes = ctorParameters.map(ctorParam => ctorParam && ctorParam.type);\n const paramAnnotations = ctorParameters.map(ctorParam => ctorParam && convertTsickleDecoratorIntoMetadata(ctorParam.decorators));\n return this._zipTypesAndAnnotations(paramTypes, paramAnnotations);\n }\n const paramAnnotations = type.hasOwnProperty(PARAMETERS) && type[PARAMETERS];\n const paramTypes = this._reflect && this._reflect.getOwnMetadata && this._reflect.getOwnMetadata('design:paramtypes', type);\n if (paramTypes || paramAnnotations) {\n return this._zipTypesAndAnnotations(paramTypes, paramAnnotations);\n }\n return newArray(type.length);\n }\n parameters(type) {\n if (!isType(type)) {\n return [];\n }\n const parentCtor = getParentCtor(type);\n let parameters = this._ownParameters(type, parentCtor);\n if (!parameters && parentCtor !== Object) {\n parameters = this.parameters(parentCtor);\n }\n return parameters || [];\n }\n _ownAnnotations(typeOrFunc, parentCtor) {\n if (typeOrFunc.annotations && typeOrFunc.annotations !== parentCtor.annotations) {\n let annotations = typeOrFunc.annotations;\n if (typeof annotations === 'function' && annotations.annotations) {\n annotations = annotations.annotations;\n }\n return annotations;\n }\n if (typeOrFunc.decorators && typeOrFunc.decorators !== parentCtor.decorators) {\n return convertTsickleDecoratorIntoMetadata(typeOrFunc.decorators);\n }\n if (typeOrFunc.hasOwnProperty(ANNOTATIONS)) {\n return typeOrFunc[ANNOTATIONS];\n }\n return null;\n }\n annotations(typeOrFunc) {\n if (!isType(typeOrFunc)) {\n return [];\n }\n const parentCtor = getParentCtor(typeOrFunc);\n const ownAnnotations = this._ownAnnotations(typeOrFunc, parentCtor) || [];\n const parentAnnotations = parentCtor !== Object ? this.annotations(parentCtor) : [];\n return parentAnnotations.concat(ownAnnotations);\n }\n _ownPropMetadata(typeOrFunc, parentCtor) {\n if (typeOrFunc.propMetadata && typeOrFunc.propMetadata !== parentCtor.propMetadata) {\n let propMetadata = typeOrFunc.propMetadata;\n if (typeof propMetadata === 'function' && propMetadata.propMetadata) {\n propMetadata = propMetadata.propMetadata;\n }\n return propMetadata;\n }\n if (typeOrFunc.propDecorators && typeOrFunc.propDecorators !== parentCtor.propDecorators) {\n const propDecorators = typeOrFunc.propDecorators;\n const propMetadata = {};\n Object.keys(propDecorators).forEach(prop => {\n propMetadata[prop] = convertTsickleDecoratorIntoMetadata(propDecorators[prop]);\n });\n return propMetadata;\n }\n if (typeOrFunc.hasOwnProperty(PROP_METADATA)) {\n return typeOrFunc[PROP_METADATA];\n }\n return null;\n }\n propMetadata(typeOrFunc) {\n if (!isType(typeOrFunc)) {\n return {};\n }\n const parentCtor = getParentCtor(typeOrFunc);\n const propMetadata = {};\n if (parentCtor !== Object) {\n const parentPropMetadata = this.propMetadata(parentCtor);\n Object.keys(parentPropMetadata).forEach(propName => {\n propMetadata[propName] = parentPropMetadata[propName];\n });\n }\n const ownPropMetadata = this._ownPropMetadata(typeOrFunc, parentCtor);\n if (ownPropMetadata) {\n Object.keys(ownPropMetadata).forEach(propName => {\n const decorators = [];\n if (propMetadata.hasOwnProperty(propName)) {\n decorators.push(...propMetadata[propName]);\n }\n decorators.push(...ownPropMetadata[propName]);\n propMetadata[propName] = decorators;\n });\n }\n return propMetadata;\n }\n ownPropMetadata(typeOrFunc) {\n if (!isType(typeOrFunc)) {\n return {};\n }\n return this._ownPropMetadata(typeOrFunc, getParentCtor(typeOrFunc)) || {};\n }\n hasLifecycleHook(type, lcProperty) {\n return type instanceof Type && lcProperty in type.prototype;\n }\n}\nfunction convertTsickleDecoratorIntoMetadata(decoratorInvocations) {\n if (!decoratorInvocations) {\n return [];\n }\n return decoratorInvocations.map(decoratorInvocation => {\n const decoratorType = decoratorInvocation.type;\n const annotationCls = decoratorType.annotationCls;\n const annotationArgs = decoratorInvocation.args ? decoratorInvocation.args : [];\n return new annotationCls(...annotationArgs);\n });\n}\nfunction getParentCtor(ctor) {\n const parentProto = ctor.prototype ? Object.getPrototypeOf(ctor.prototype) : null;\n const parentCtor = parentProto ? parentProto.constructor : null;\n return parentCtor || Object;\n}\nfunction applyValueToInputField(instance, inputSignalNode, privateName, value) {\n if (inputSignalNode !== null) {\n inputSignalNode.applyValueToInputSignal(inputSignalNode, value);\n } else {\n instance[privateName] = value;\n }\n}\nclass SimpleChange {\n previousValue;\n currentValue;\n firstChange;\n constructor(previousValue, currentValue, firstChange) {\n this.previousValue = previousValue;\n this.currentValue = currentValue;\n this.firstChange = firstChange;\n }\n isFirstChange() {\n return this.firstChange;\n }\n}\nconst ɵɵNgOnChangesFeature = /* @__PURE__ */(() => {\n const ɵɵNgOnChangesFeatureImpl = () => NgOnChangesFeatureImpl;\n ɵɵNgOnChangesFeatureImpl.ngInherit = true;\n return ɵɵNgOnChangesFeatureImpl;\n})();\nfunction NgOnChangesFeatureImpl(definition) {\n if (definition.type.prototype.ngOnChanges) {\n definition.setInput = ngOnChangesSetInput;\n }\n return rememberChangeHistoryAndInvokeOnChangesHook;\n}\nfunction rememberChangeHistoryAndInvokeOnChangesHook() {\n const simpleChangesStore = getSimpleChangesStore(this);\n const current = simpleChangesStore?.current;\n if (current) {\n const previous = simpleChangesStore.previous;\n if (previous === EMPTY_OBJ) {\n simpleChangesStore.previous = current;\n } else {\n for (let key in current) {\n previous[key] = current[key];\n }\n }\n simpleChangesStore.current = null;\n this.ngOnChanges(current);\n }\n}\nfunction ngOnChangesSetInput(instance, inputSignalNode, value, publicName, privateName) {\n const declaredName = this.declaredInputs[publicName];\n ngDevMode && assertString(declaredName, 'Name of input in ngOnChanges has to be a string');\n const simpleChangesStore = getSimpleChangesStore(instance) || setSimpleChangesStore(instance, {\n previous: EMPTY_OBJ,\n current: null\n });\n const current = simpleChangesStore.current || (simpleChangesStore.current = {});\n const previous = simpleChangesStore.previous;\n const previousChange = previous[declaredName];\n current[declaredName] = new SimpleChange(previousChange && previousChange.currentValue, value, previous === EMPTY_OBJ);\n applyValueToInputField(instance, inputSignalNode, privateName, value);\n}\nconst SIMPLE_CHANGES_STORE = '__ngSimpleChanges__';\nfunction getSimpleChangesStore(instance) {\n return instance[SIMPLE_CHANGES_STORE] || null;\n}\nfunction setSimpleChangesStore(instance, store) {\n return instance[SIMPLE_CHANGES_STORE] = store;\n}\nconst profilerCallbacks = [];\nconst NOOP_PROFILER_REMOVAL = () => {};\nfunction removeProfiler(profiler) {\n const profilerIdx = profilerCallbacks.indexOf(profiler);\n if (profilerIdx !== -1) {\n profilerCallbacks.splice(profilerIdx, 1);\n }\n}\nfunction setProfiler(profiler) {\n if (profiler !== null) {\n if (!profilerCallbacks.includes(profiler)) {\n profilerCallbacks.push(profiler);\n }\n return () => removeProfiler(profiler);\n } else {\n profilerCallbacks.length = 0;\n return NOOP_PROFILER_REMOVAL;\n }\n}\nconst profiler = function (event, instance = null, eventFn) {\n for (let i = 0; i < profilerCallbacks.length; i++) {\n const profilerCallback = profilerCallbacks[i];\n profilerCallback(event, instance, eventFn);\n }\n};\nvar ProfilerEvent = /*#__PURE__*/function (ProfilerEvent) {\n ProfilerEvent[ProfilerEvent[\"TemplateCreateStart\"] = 0] = \"TemplateCreateStart\";\n ProfilerEvent[ProfilerEvent[\"TemplateCreateEnd\"] = 1] = \"TemplateCreateEnd\";\n ProfilerEvent[ProfilerEvent[\"TemplateUpdateStart\"] = 2] = \"TemplateUpdateStart\";\n ProfilerEvent[ProfilerEvent[\"TemplateUpdateEnd\"] = 3] = \"TemplateUpdateEnd\";\n ProfilerEvent[ProfilerEvent[\"LifecycleHookStart\"] = 4] = \"LifecycleHookStart\";\n ProfilerEvent[ProfilerEvent[\"LifecycleHookEnd\"] = 5] = \"LifecycleHookEnd\";\n ProfilerEvent[ProfilerEvent[\"OutputStart\"] = 6] = \"OutputStart\";\n ProfilerEvent[ProfilerEvent[\"OutputEnd\"] = 7] = \"OutputEnd\";\n ProfilerEvent[ProfilerEvent[\"BootstrapApplicationStart\"] = 8] = \"BootstrapApplicationStart\";\n ProfilerEvent[ProfilerEvent[\"BootstrapApplicationEnd\"] = 9] = \"BootstrapApplicationEnd\";\n ProfilerEvent[ProfilerEvent[\"BootstrapComponentStart\"] = 10] = \"BootstrapComponentStart\";\n ProfilerEvent[ProfilerEvent[\"BootstrapComponentEnd\"] = 11] = \"BootstrapComponentEnd\";\n ProfilerEvent[ProfilerEvent[\"ChangeDetectionStart\"] = 12] = \"ChangeDetectionStart\";\n ProfilerEvent[ProfilerEvent[\"ChangeDetectionEnd\"] = 13] = \"ChangeDetectionEnd\";\n ProfilerEvent[ProfilerEvent[\"ChangeDetectionSyncStart\"] = 14] = \"ChangeDetectionSyncStart\";\n ProfilerEvent[ProfilerEvent[\"ChangeDetectionSyncEnd\"] = 15] = \"ChangeDetectionSyncEnd\";\n ProfilerEvent[ProfilerEvent[\"AfterRenderHooksStart\"] = 16] = \"AfterRenderHooksStart\";\n ProfilerEvent[ProfilerEvent[\"AfterRenderHooksEnd\"] = 17] = \"AfterRenderHooksEnd\";\n ProfilerEvent[ProfilerEvent[\"ComponentStart\"] = 18] = \"ComponentStart\";\n ProfilerEvent[ProfilerEvent[\"ComponentEnd\"] = 19] = \"ComponentEnd\";\n ProfilerEvent[ProfilerEvent[\"DeferBlockStateStart\"] = 20] = \"DeferBlockStateStart\";\n ProfilerEvent[ProfilerEvent[\"DeferBlockStateEnd\"] = 21] = \"DeferBlockStateEnd\";\n ProfilerEvent[ProfilerEvent[\"DynamicComponentStart\"] = 22] = \"DynamicComponentStart\";\n ProfilerEvent[ProfilerEvent[\"DynamicComponentEnd\"] = 23] = \"DynamicComponentEnd\";\n ProfilerEvent[ProfilerEvent[\"HostBindingsUpdateStart\"] = 24] = \"HostBindingsUpdateStart\";\n ProfilerEvent[ProfilerEvent[\"HostBindingsUpdateEnd\"] = 25] = \"HostBindingsUpdateEnd\";\n return ProfilerEvent;\n}(ProfilerEvent || {});\nfunction registerPreOrderHooks(directiveIndex, directiveDef, tView) {\n ngDevMode && assertFirstCreatePass(tView);\n const {\n ngOnChanges,\n ngOnInit,\n ngDoCheck\n } = directiveDef.type.prototype;\n if (ngOnChanges) {\n const wrappedOnChanges = NgOnChangesFeatureImpl(directiveDef);\n (tView.preOrderHooks ??= []).push(directiveIndex, wrappedOnChanges);\n (tView.preOrderCheckHooks ??= []).push(directiveIndex, wrappedOnChanges);\n }\n if (ngOnInit) {\n (tView.preOrderHooks ??= []).push(0 - directiveIndex, ngOnInit);\n }\n if (ngDoCheck) {\n (tView.preOrderHooks ??= []).push(directiveIndex, ngDoCheck);\n (tView.preOrderCheckHooks ??= []).push(directiveIndex, ngDoCheck);\n }\n}\nfunction registerPostOrderHooks(tView, tNode) {\n ngDevMode && assertFirstCreatePass(tView);\n for (let i = tNode.directiveStart, end = tNode.directiveEnd; i < end; i++) {\n const directiveDef = tView.data[i];\n ngDevMode && assertDefined(directiveDef, 'Expecting DirectiveDef');\n const lifecycleHooks = directiveDef.type.prototype;\n const {\n ngAfterContentInit,\n ngAfterContentChecked,\n ngAfterViewInit,\n ngAfterViewChecked,\n ngOnDestroy\n } = lifecycleHooks;\n if (ngAfterContentInit) {\n (tView.contentHooks ??= []).push(-i, ngAfterContentInit);\n }\n if (ngAfterContentChecked) {\n (tView.contentHooks ??= []).push(i, ngAfterContentChecked);\n (tView.contentCheckHooks ??= []).push(i, ngAfterContentChecked);\n }\n if (ngAfterViewInit) {\n (tView.viewHooks ??= []).push(-i, ngAfterViewInit);\n }\n if (ngAfterViewChecked) {\n (tView.viewHooks ??= []).push(i, ngAfterViewChecked);\n (tView.viewCheckHooks ??= []).push(i, ngAfterViewChecked);\n }\n if (ngOnDestroy != null) {\n (tView.destroyHooks ??= []).push(i, ngOnDestroy);\n }\n }\n}\nfunction executeCheckHooks(lView, hooks, nodeIndex) {\n callHooks(lView, hooks, 3, nodeIndex);\n}\nfunction executeInitAndCheckHooks(lView, hooks, initPhase, nodeIndex) {\n ngDevMode && assertNotEqual(initPhase, 3, 'Init pre-order hooks should not be called more than once');\n if ((lView[FLAGS] & 3) === initPhase) {\n callHooks(lView, hooks, initPhase, nodeIndex);\n }\n}\nfunction incrementInitPhaseFlags(lView, initPhase) {\n ngDevMode && assertNotEqual(initPhase, 3, 'Init hooks phase should not be incremented after all init hooks have been run.');\n let flags = lView[FLAGS];\n if ((flags & 3) === initPhase) {\n flags &= 16383;\n flags += 1;\n lView[FLAGS] = flags;\n }\n}\nfunction callHooks(currentView, arr, initPhase, currentNodeIndex) {\n ngDevMode && assertEqual(isInCheckNoChangesMode(), false, 'Hooks should never be run when in check no changes mode.');\n const startIndex = currentNodeIndex !== undefined ? currentView[PREORDER_HOOK_FLAGS] & 65535 : 0;\n const nodeIndexLimit = currentNodeIndex != null ? currentNodeIndex : -1;\n const max = arr.length - 1;\n let lastNodeIndexFound = 0;\n for (let i = startIndex; i < max; i++) {\n const hook = arr[i + 1];\n if (typeof hook === 'number') {\n lastNodeIndexFound = arr[i];\n if (currentNodeIndex != null && lastNodeIndexFound >= currentNodeIndex) {\n break;\n }\n } else {\n const isInitHook = arr[i] < 0;\n if (isInitHook) {\n currentView[PREORDER_HOOK_FLAGS] += 65536;\n }\n if (lastNodeIndexFound < nodeIndexLimit || nodeIndexLimit == -1) {\n callHook(currentView, initPhase, arr, i);\n currentView[PREORDER_HOOK_FLAGS] = (currentView[PREORDER_HOOK_FLAGS] & 4294901760) + i + 2;\n }\n i++;\n }\n }\n}\nfunction callHookInternal(directive, hook) {\n profiler(ProfilerEvent.LifecycleHookStart, directive, hook);\n const prevConsumer = setActiveConsumer(null);\n try {\n hook.call(directive);\n } finally {\n setActiveConsumer(prevConsumer);\n profiler(ProfilerEvent.LifecycleHookEnd, directive, hook);\n }\n}\nfunction callHook(currentView, initPhase, arr, i) {\n const isInitHook = arr[i] < 0;\n const hook = arr[i + 1];\n const directiveIndex = isInitHook ? -arr[i] : arr[i];\n const directive = currentView[directiveIndex];\n if (isInitHook) {\n const indexWithintInitPhase = currentView[FLAGS] >> 14;\n if (indexWithintInitPhase < currentView[PREORDER_HOOK_FLAGS] >> 16 && (currentView[FLAGS] & 3) === initPhase) {\n currentView[FLAGS] += 16384;\n callHookInternal(directive, hook);\n }\n } else {\n callHookInternal(directive, hook);\n }\n}\nconst NO_PARENT_INJECTOR = -1;\nclass NodeInjectorFactory {\n factory;\n name;\n injectImpl;\n resolving = false;\n canSeeViewProviders;\n multi;\n componentProviders;\n index;\n providerFactory;\n constructor(factory, isViewProvider, injectImplementation, name) {\n this.factory = factory;\n this.name = name;\n ngDevMode && assertDefined(factory, 'Factory not specified');\n ngDevMode && assertEqual(typeof factory, 'function', 'Expected factory function.');\n this.canSeeViewProviders = isViewProvider;\n this.injectImpl = injectImplementation;\n }\n}\nfunction toTNodeTypeAsString(tNodeType) {\n let text = '';\n tNodeType & 1 && (text += '|Text');\n tNodeType & 2 && (text += '|Element');\n tNodeType & 4 && (text += '|Container');\n tNodeType & 8 && (text += '|ElementContainer');\n tNodeType & 16 && (text += '|Projection');\n tNodeType & 32 && (text += '|IcuContainer');\n tNodeType & 64 && (text += '|Placeholder');\n tNodeType & 128 && (text += '|LetDeclaration');\n return text.length > 0 ? text.substring(1) : text;\n}\nfunction isTNodeShape(value) {\n return value != null && typeof value === 'object' && (value.insertBeforeIndex === null || typeof value.insertBeforeIndex === 'number' || Array.isArray(value.insertBeforeIndex));\n}\nfunction isLetDeclaration(tNode) {\n return !!(tNode.type & 128);\n}\nfunction hasClassInput(tNode) {\n return (tNode.flags & 8) !== 0;\n}\nfunction hasStyleInput(tNode) {\n return (tNode.flags & 16) !== 0;\n}\nfunction assertTNodeType(tNode, expectedTypes, message) {\n assertDefined(tNode, 'should be called with a TNode');\n if ((tNode.type & expectedTypes) === 0) {\n throwError(message || `Expected [${toTNodeTypeAsString(expectedTypes)}] but got ${toTNodeTypeAsString(tNode.type)}.`);\n }\n}\nfunction assertPureTNodeType(type) {\n if (!(type === 2 || type === 1 || type === 4 || type === 8 || type === 32 || type === 16 || type === 64 || type === 128)) {\n throwError(`Expected TNodeType to have only a single type selected, but got ${toTNodeTypeAsString(type)}.`);\n }\n}\nfunction setUpAttributes(renderer, native, attrs) {\n let i = 0;\n while (i < attrs.length) {\n const value = attrs[i];\n if (typeof value === 'number') {\n if (value !== 0) {\n break;\n }\n i++;\n const namespaceURI = attrs[i++];\n const attrName = attrs[i++];\n const attrVal = attrs[i++];\n renderer.setAttribute(native, attrName, attrVal, namespaceURI);\n } else {\n const attrName = value;\n const attrVal = attrs[++i];\n if (isAnimationProp(attrName)) {\n renderer.setProperty(native, attrName, attrVal);\n } else {\n renderer.setAttribute(native, attrName, attrVal);\n }\n i++;\n }\n }\n return i;\n}\nfunction isNameOnlyAttributeMarker(marker) {\n return marker === 3 || marker === 4 || marker === 6;\n}\nfunction isAnimationProp(name) {\n return name.charCodeAt(0) === 64;\n}\nfunction mergeHostAttrs(dst, src) {\n if (src === null || src.length === 0) ;else if (dst === null || dst.length === 0) {\n dst = src.slice();\n } else {\n let srcMarker = -1;\n for (let i = 0; i < src.length; i++) {\n const item = src[i];\n if (typeof item === 'number') {\n srcMarker = item;\n } else {\n if (srcMarker === 0) ;else if (srcMarker === -1 || srcMarker === 2) {\n mergeHostAttribute(dst, srcMarker, item, null, src[++i]);\n } else {\n mergeHostAttribute(dst, srcMarker, item, null, null);\n }\n }\n }\n }\n return dst;\n}\nfunction mergeHostAttribute(dst, marker, key1, key2, value) {\n let i = 0;\n let markerInsertPosition = dst.length;\n if (marker === -1) {\n markerInsertPosition = -1;\n } else {\n while (i < dst.length) {\n const dstValue = dst[i++];\n if (typeof dstValue === 'number') {\n if (dstValue === marker) {\n markerInsertPosition = -1;\n break;\n } else if (dstValue > marker) {\n markerInsertPosition = i - 1;\n break;\n }\n }\n }\n }\n while (i < dst.length) {\n const item = dst[i];\n if (typeof item === 'number') {\n break;\n } else if (item === key1) {\n {\n if (value !== null) {\n dst[i + 1] = value;\n }\n return;\n }\n }\n i++;\n if (value !== null) i++;\n }\n if (markerInsertPosition !== -1) {\n dst.splice(markerInsertPosition, 0, marker);\n i = markerInsertPosition + 1;\n }\n dst.splice(i++, 0, key1);\n if (value !== null) {\n dst.splice(i++, 0, value);\n }\n}\nfunction hasParentInjector(parentLocation) {\n return parentLocation !== NO_PARENT_INJECTOR;\n}\nfunction getParentInjectorIndex(parentLocation) {\n if (ngDevMode) {\n assertNumber(parentLocation, 'Number expected');\n assertNotEqual(parentLocation, -1, 'Not a valid state.');\n const parentInjectorIndex = parentLocation & 32767;\n assertGreaterThan(parentInjectorIndex, HEADER_OFFSET, 'Parent injector must be pointing past HEADER_OFFSET.');\n }\n return parentLocation & 32767;\n}\nfunction getParentInjectorViewOffset(parentLocation) {\n return parentLocation >> 16;\n}\nfunction getParentInjectorView(location, startView) {\n let viewOffset = getParentInjectorViewOffset(location);\n let parentView = startView;\n while (viewOffset > 0) {\n parentView = parentView[DECLARATION_VIEW];\n viewOffset--;\n }\n return parentView;\n}\nlet includeViewProviders = true;\nfunction setIncludeViewProviders(v) {\n const oldValue = includeViewProviders;\n includeViewProviders = v;\n return oldValue;\n}\nconst BLOOM_SIZE = 256;\nconst BLOOM_MASK = BLOOM_SIZE - 1;\nconst BLOOM_BUCKET_BITS = 5;\nlet nextNgElementId = 0;\nconst NOT_FOUND = {};\nfunction bloomAdd(injectorIndex, tView, type) {\n ngDevMode && assertEqual(tView.firstCreatePass, true, 'expected firstCreatePass to be true');\n let id;\n if (typeof type === 'string') {\n id = type.charCodeAt(0) || 0;\n } else if (type.hasOwnProperty(NG_ELEMENT_ID)) {\n id = type[NG_ELEMENT_ID];\n }\n if (id == null) {\n id = type[NG_ELEMENT_ID] = nextNgElementId++;\n }\n const bloomHash = id & BLOOM_MASK;\n const mask = 1 << bloomHash;\n tView.data[injectorIndex + (bloomHash >> BLOOM_BUCKET_BITS)] |= mask;\n}\nfunction getOrCreateNodeInjectorForNode(tNode, lView) {\n const existingInjectorIndex = getInjectorIndex(tNode, lView);\n if (existingInjectorIndex !== -1) {\n return existingInjectorIndex;\n }\n const tView = lView[TVIEW];\n if (tView.firstCreatePass) {\n tNode.injectorIndex = lView.length;\n insertBloom(tView.data, tNode);\n insertBloom(lView, null);\n insertBloom(tView.blueprint, null);\n }\n const parentLoc = getParentInjectorLocation(tNode, lView);\n const injectorIndex = tNode.injectorIndex;\n if (hasParentInjector(parentLoc)) {\n const parentIndex = getParentInjectorIndex(parentLoc);\n const parentLView = getParentInjectorView(parentLoc, lView);\n const parentData = parentLView[TVIEW].data;\n for (let i = 0; i < 8; i++) {\n lView[injectorIndex + i] = parentLView[parentIndex + i] | parentData[parentIndex + i];\n }\n }\n lView[injectorIndex + 8] = parentLoc;\n return injectorIndex;\n}\nfunction insertBloom(arr, footer) {\n arr.push(0, 0, 0, 0, 0, 0, 0, 0, footer);\n}\nfunction getInjectorIndex(tNode, lView) {\n if (tNode.injectorIndex === -1 || tNode.parent && tNode.parent.injectorIndex === tNode.injectorIndex || lView[tNode.injectorIndex + 8] === null) {\n return -1;\n } else {\n ngDevMode && assertIndexInRange(lView, tNode.injectorIndex);\n return tNode.injectorIndex;\n }\n}\nfunction getParentInjectorLocation(tNode, lView) {\n if (tNode.parent && tNode.parent.injectorIndex !== -1) {\n return tNode.parent.injectorIndex;\n }\n let declarationViewOffset = 0;\n let parentTNode = null;\n let lViewCursor = lView;\n while (lViewCursor !== null) {\n parentTNode = getTNodeFromLView(lViewCursor);\n if (parentTNode === null) {\n return NO_PARENT_INJECTOR;\n }\n ngDevMode && parentTNode && assertTNodeForLView(parentTNode, lViewCursor[DECLARATION_VIEW]);\n declarationViewOffset++;\n lViewCursor = lViewCursor[DECLARATION_VIEW];\n if (parentTNode.injectorIndex !== -1) {\n return parentTNode.injectorIndex | declarationViewOffset << 16;\n }\n }\n return NO_PARENT_INJECTOR;\n}\nfunction diPublicInInjector(injectorIndex, tView, token) {\n bloomAdd(injectorIndex, tView, token);\n}\nfunction injectAttributeImpl(tNode, attrNameToInject) {\n ngDevMode && assertTNodeType(tNode, 12 | 3);\n ngDevMode && assertDefined(tNode, 'expecting tNode');\n if (attrNameToInject === 'class') {\n return tNode.classes;\n }\n if (attrNameToInject === 'style') {\n return tNode.styles;\n }\n const attrs = tNode.attrs;\n if (attrs) {\n const attrsLength = attrs.length;\n let i = 0;\n while (i < attrsLength) {\n const value = attrs[i];\n if (isNameOnlyAttributeMarker(value)) break;\n if (value === 0) {\n i = i + 2;\n } else if (typeof value === 'number') {\n i++;\n while (i < attrsLength && typeof attrs[i] === 'string') {\n i++;\n }\n } else if (value === attrNameToInject) {\n return attrs[i + 1];\n } else {\n i = i + 2;\n }\n }\n }\n return null;\n}\nfunction notFoundValueOrThrow(notFoundValue, token, flags) {\n if (flags & 8 || notFoundValue !== undefined) {\n return notFoundValue;\n } else {\n throwProviderNotFoundError(token, 'NodeInjector');\n }\n}\nfunction lookupTokenUsingModuleInjector(lView, token, flags, notFoundValue) {\n if (flags & 8 && notFoundValue === undefined) {\n notFoundValue = null;\n }\n if ((flags & (2 | 1)) === 0) {\n const moduleInjector = lView[INJECTOR];\n const previousInjectImplementation = setInjectImplementation(undefined);\n try {\n if (moduleInjector) {\n return moduleInjector.get(token, notFoundValue, flags & 8);\n } else {\n return injectRootLimpMode(token, notFoundValue, flags & 8);\n }\n } finally {\n setInjectImplementation(previousInjectImplementation);\n }\n }\n return notFoundValueOrThrow(notFoundValue, token, flags);\n}\nfunction getOrCreateInjectable(tNode, lView, token, flags = 0, notFoundValue) {\n if (tNode !== null) {\n if (lView[FLAGS] & 2048 && !(flags & 2)) {\n const embeddedInjectorValue = lookupTokenUsingEmbeddedInjector(tNode, lView, token, flags, NOT_FOUND);\n if (embeddedInjectorValue !== NOT_FOUND) {\n return embeddedInjectorValue;\n }\n }\n const value = lookupTokenUsingNodeInjector(tNode, lView, token, flags, NOT_FOUND);\n if (value !== NOT_FOUND) {\n return value;\n }\n }\n return lookupTokenUsingModuleInjector(lView, token, flags, notFoundValue);\n}\nfunction lookupTokenUsingNodeInjector(tNode, lView, token, flags, notFoundValue) {\n const bloomHash = bloomHashBitOrFactory(token);\n if (typeof bloomHash === 'function') {\n if (!enterDI(lView, tNode, flags)) {\n return flags & 1 ? notFoundValueOrThrow(notFoundValue, token, flags) : lookupTokenUsingModuleInjector(lView, token, flags, notFoundValue);\n }\n try {\n let value;\n if (ngDevMode) {\n runInInjectorProfilerContext(new NodeInjector(getCurrentTNode(), getLView()), token, () => {\n emitInjectorToCreateInstanceEvent(token);\n value = bloomHash(flags);\n emitInstanceCreatedByInjectorEvent(value);\n });\n } else {\n value = bloomHash(flags);\n }\n if (value == null && !(flags & 8)) {\n throwProviderNotFoundError(token);\n } else {\n return value;\n }\n } finally {\n leaveDI();\n }\n } else if (typeof bloomHash === 'number') {\n let previousTView = null;\n let injectorIndex = getInjectorIndex(tNode, lView);\n let parentLocation = NO_PARENT_INJECTOR;\n let hostTElementNode = flags & 1 ? lView[DECLARATION_COMPONENT_VIEW][T_HOST] : null;\n if (injectorIndex === -1 || flags & 4) {\n parentLocation = injectorIndex === -1 ? getParentInjectorLocation(tNode, lView) : lView[injectorIndex + 8];\n if (parentLocation === NO_PARENT_INJECTOR || !shouldSearchParent(flags, false)) {\n injectorIndex = -1;\n } else {\n previousTView = lView[TVIEW];\n injectorIndex = getParentInjectorIndex(parentLocation);\n lView = getParentInjectorView(parentLocation, lView);\n }\n }\n while (injectorIndex !== -1) {\n ngDevMode && assertNodeInjector(lView, injectorIndex);\n const tView = lView[TVIEW];\n ngDevMode && assertTNodeForLView(tView.data[injectorIndex + 8], lView);\n if (bloomHasToken(bloomHash, injectorIndex, tView.data)) {\n const instance = searchTokensOnInjector(injectorIndex, lView, token, previousTView, flags, hostTElementNode);\n if (instance !== NOT_FOUND) {\n return instance;\n }\n }\n parentLocation = lView[injectorIndex + 8];\n if (parentLocation !== NO_PARENT_INJECTOR && shouldSearchParent(flags, lView[TVIEW].data[injectorIndex + 8] === hostTElementNode) && bloomHasToken(bloomHash, injectorIndex, lView)) {\n previousTView = tView;\n injectorIndex = getParentInjectorIndex(parentLocation);\n lView = getParentInjectorView(parentLocation, lView);\n } else {\n injectorIndex = -1;\n }\n }\n }\n return notFoundValue;\n}\nfunction searchTokensOnInjector(injectorIndex, lView, token, previousTView, flags, hostTElementNode) {\n const currentTView = lView[TVIEW];\n const tNode = currentTView.data[injectorIndex + 8];\n const canAccessViewProviders = previousTView == null ? isComponentHost(tNode) && includeViewProviders : previousTView != currentTView && (tNode.type & 3) !== 0;\n const isHostSpecialCase = flags & 1 && hostTElementNode === tNode;\n const injectableIdx = locateDirectiveOrProvider(tNode, currentTView, token, canAccessViewProviders, isHostSpecialCase);\n if (injectableIdx !== null) {\n return getNodeInjectable(lView, currentTView, injectableIdx, tNode, flags);\n } else {\n return NOT_FOUND;\n }\n}\nfunction locateDirectiveOrProvider(tNode, tView, token, canAccessViewProviders, isHostSpecialCase) {\n const nodeProviderIndexes = tNode.providerIndexes;\n const tInjectables = tView.data;\n const injectablesStart = nodeProviderIndexes & 1048575;\n const directivesStart = tNode.directiveStart;\n const directiveEnd = tNode.directiveEnd;\n const cptViewProvidersCount = nodeProviderIndexes >> 20;\n const startingIndex = canAccessViewProviders ? injectablesStart : injectablesStart + cptViewProvidersCount;\n const endIndex = isHostSpecialCase ? injectablesStart + cptViewProvidersCount : directiveEnd;\n for (let i = startingIndex; i < endIndex; i++) {\n const providerTokenOrDef = tInjectables[i];\n if (i < directivesStart && token === providerTokenOrDef || i >= directivesStart && providerTokenOrDef.type === token) {\n return i;\n }\n }\n if (isHostSpecialCase) {\n const dirDef = tInjectables[directivesStart];\n if (dirDef && isComponentDef(dirDef) && dirDef.type === token) {\n return directivesStart;\n }\n }\n return null;\n}\nlet injectionPath = [];\nfunction getNodeInjectable(lView, tView, index, tNode, flags) {\n let value = lView[index];\n const tData = tView.data;\n if (value instanceof NodeInjectorFactory) {\n const factory = value;\n ngDevMode && injectionPath.push(factory.name ?? 'unknown');\n if (factory.resolving) {\n let token = '';\n if (ngDevMode) {\n token = stringifyForError(tData[index]);\n throw cyclicDependencyErrorWithDetails(token, injectionPath);\n } else {\n throw cyclicDependencyError(token);\n }\n }\n const previousIncludeViewProviders = setIncludeViewProviders(factory.canSeeViewProviders);\n factory.resolving = true;\n const token = tData[index].type || tData[index];\n let prevInjectContext;\n if (ngDevMode) {\n const injector = new NodeInjector(tNode, lView);\n prevInjectContext = setInjectorProfilerContext({\n injector,\n token\n });\n }\n const previousInjectImplementation = factory.injectImpl ? setInjectImplementation(factory.injectImpl) : null;\n const success = enterDI(lView, tNode, 0);\n ngDevMode && assertEqual(success, true, \"Because flags do not contain `SkipSelf' we expect this to always succeed.\");\n try {\n ngDevMode && emitInjectorToCreateInstanceEvent(token);\n value = lView[index] = factory.factory(undefined, flags, tData, lView, tNode);\n ngDevMode && emitInstanceCreatedByInjectorEvent(value);\n if (tView.firstCreatePass && index >= tNode.directiveStart) {\n ngDevMode && assertDirectiveDef(tData[index]);\n registerPreOrderHooks(index, tData[index], tView);\n }\n } finally {\n ngDevMode && setInjectorProfilerContext(prevInjectContext);\n previousInjectImplementation !== null && setInjectImplementation(previousInjectImplementation);\n setIncludeViewProviders(previousIncludeViewProviders);\n factory.resolving = false;\n leaveDI();\n ngDevMode && (injectionPath = []);\n }\n }\n return value;\n}\nfunction bloomHashBitOrFactory(token) {\n ngDevMode && assertDefined(token, 'token must be defined');\n if (typeof token === 'string') {\n return token.charCodeAt(0) || 0;\n }\n const tokenId = token.hasOwnProperty(NG_ELEMENT_ID) ? token[NG_ELEMENT_ID] : undefined;\n if (typeof tokenId === 'number') {\n if (tokenId >= 0) {\n return tokenId & BLOOM_MASK;\n } else {\n ngDevMode && assertEqual(tokenId, -1, 'Expecting to get Special Injector Id');\n return createNodeInjector;\n }\n } else {\n return tokenId;\n }\n}\nfunction bloomHasToken(bloomHash, injectorIndex, injectorView) {\n const mask = 1 << bloomHash;\n const value = injectorView[injectorIndex + (bloomHash >> BLOOM_BUCKET_BITS)];\n return !!(value & mask);\n}\nfunction shouldSearchParent(flags, isFirstHostTNode) {\n return !(flags & 2) && !(flags & 1 && isFirstHostTNode);\n}\nfunction getNodeInjectorLView(nodeInjector) {\n return nodeInjector._lView;\n}\nfunction getNodeInjectorTNode(nodeInjector) {\n return nodeInjector._tNode;\n}\nclass NodeInjector {\n _tNode;\n _lView;\n constructor(_tNode, _lView) {\n this._tNode = _tNode;\n this._lView = _lView;\n }\n get(token, notFoundValue, flags) {\n return getOrCreateInjectable(this._tNode, this._lView, token, convertToBitFlags(flags), notFoundValue);\n }\n}\nfunction createNodeInjector() {\n return new NodeInjector(getCurrentTNode(), getLView());\n}\nfunction ɵɵgetInheritedFactory(type) {\n return noSideEffects(() => {\n const ownConstructor = type.prototype.constructor;\n const ownFactory = ownConstructor[NG_FACTORY_DEF] || getFactoryOf(ownConstructor);\n const objectPrototype = Object.prototype;\n let parent = Object.getPrototypeOf(type.prototype).constructor;\n while (parent && parent !== objectPrototype) {\n const factory = parent[NG_FACTORY_DEF] || getFactoryOf(parent);\n if (factory && factory !== ownFactory) {\n return factory;\n }\n parent = Object.getPrototypeOf(parent);\n }\n return t => new t();\n });\n}\nfunction getFactoryOf(type) {\n if (isForwardRef(type)) {\n return () => {\n const factory = getFactoryOf(resolveForwardRef(type));\n return factory && factory();\n };\n }\n return getFactoryDef(type);\n}\nfunction lookupTokenUsingEmbeddedInjector(tNode, lView, token, flags, notFoundValue) {\n let currentTNode = tNode;\n let currentLView = lView;\n while (currentTNode !== null && currentLView !== null && currentLView[FLAGS] & 2048 && !isRootView(currentLView)) {\n ngDevMode && assertTNodeForLView(currentTNode, currentLView);\n const nodeInjectorValue = lookupTokenUsingNodeInjector(currentTNode, currentLView, token, flags | 2, NOT_FOUND);\n if (nodeInjectorValue !== NOT_FOUND) {\n return nodeInjectorValue;\n }\n let parentTNode = currentTNode.parent;\n if (!parentTNode) {\n const embeddedViewInjector = currentLView[EMBEDDED_VIEW_INJECTOR];\n if (embeddedViewInjector) {\n const embeddedViewInjectorValue = embeddedViewInjector.get(token, NOT_FOUND, flags & ~4);\n if (embeddedViewInjectorValue !== NOT_FOUND) {\n return embeddedViewInjectorValue;\n }\n }\n parentTNode = getTNodeFromLView(currentLView);\n currentLView = currentLView[DECLARATION_VIEW];\n }\n currentTNode = parentTNode;\n }\n return notFoundValue;\n}\nfunction getTNodeFromLView(lView) {\n const tView = lView[TVIEW];\n const tViewType = tView.type;\n if (tViewType === 2) {\n ngDevMode && assertDefined(tView.declTNode, 'Embedded TNodes should have declaration parents.');\n return tView.declTNode;\n } else if (tViewType === 1) {\n return lView[T_HOST];\n }\n return null;\n}\nfunction ɵɵinjectAttribute(attrNameToInject) {\n return injectAttributeImpl(getCurrentTNode(), attrNameToInject);\n}\nconst Attribute = /*#__PURE__*/makeParamDecorator('Attribute', attributeName => ({\n attributeName,\n __NG_ELEMENT_ID__: () => ɵɵinjectAttribute(attributeName)\n}));\nlet _reflect = null;\nfunction getReflect() {\n return _reflect = _reflect || new ReflectionCapabilities();\n}\nfunction reflectDependencies(type) {\n return convertDependencies(getReflect().parameters(type));\n}\nfunction convertDependencies(deps) {\n return deps.map(dep => reflectDependency(dep));\n}\nfunction reflectDependency(dep) {\n const meta = {\n token: null,\n attribute: null,\n host: false,\n optional: false,\n self: false,\n skipSelf: false\n };\n if (Array.isArray(dep) && dep.length > 0) {\n for (let j = 0; j < dep.length; j++) {\n const param = dep[j];\n if (param === undefined) {\n continue;\n }\n const proto = Object.getPrototypeOf(param);\n if (param instanceof Optional || proto.ngMetadataName === 'Optional') {\n meta.optional = true;\n } else if (param instanceof SkipSelf || proto.ngMetadataName === 'SkipSelf') {\n meta.skipSelf = true;\n } else if (param instanceof Self || proto.ngMetadataName === 'Self') {\n meta.self = true;\n } else if (param instanceof Host || proto.ngMetadataName === 'Host') {\n meta.host = true;\n } else if (param instanceof Inject) {\n meta.token = param.token;\n } else if (param instanceof Attribute) {\n if (param.attributeName === undefined) {\n throw new RuntimeError(-204, ngDevMode && `Attribute name must be defined.`);\n }\n meta.attribute = param.attributeName;\n } else {\n meta.token = param;\n }\n }\n } else if (dep === undefined || Array.isArray(dep) && dep.length === 0) {\n meta.token = null;\n } else {\n meta.token = dep;\n }\n return meta;\n}\nfunction compileInjectable(type, meta) {\n let ngInjectableDef = null;\n let ngFactoryDef = null;\n if (!type.hasOwnProperty(NG_PROV_DEF)) {\n Object.defineProperty(type, NG_PROV_DEF, {\n get: () => {\n if (ngInjectableDef === null) {\n const compiler = getCompilerFacade({\n usage: 0,\n kind: 'injectable',\n type\n });\n ngInjectableDef = compiler.compileInjectable(angularCoreDiEnv, `ng:///${type.name}/ɵprov.js`, getInjectableMetadata(type, meta));\n }\n return ngInjectableDef;\n }\n });\n }\n if (!type.hasOwnProperty(NG_FACTORY_DEF)) {\n Object.defineProperty(type, NG_FACTORY_DEF, {\n get: () => {\n if (ngFactoryDef === null) {\n const compiler = getCompilerFacade({\n usage: 0,\n kind: 'injectable',\n type\n });\n ngFactoryDef = compiler.compileFactory(angularCoreDiEnv, `ng:///${type.name}/ɵfac.js`, {\n name: type.name,\n type,\n typeArgumentCount: 0,\n deps: reflectDependencies(type),\n target: compiler.FactoryTarget.Injectable\n });\n }\n return ngFactoryDef;\n },\n configurable: true\n });\n }\n}\nconst USE_VALUE = /*#__PURE__*/getClosureSafeProperty({\n provide: String,\n useValue: getClosureSafeProperty\n});\nfunction isUseClassProvider(meta) {\n return meta.useClass !== undefined;\n}\nfunction isUseValueProvider(meta) {\n return USE_VALUE in meta;\n}\nfunction isUseFactoryProvider(meta) {\n return meta.useFactory !== undefined;\n}\nfunction isUseExistingProvider(meta) {\n return meta.useExisting !== undefined;\n}\nfunction getInjectableMetadata(type, srcMeta) {\n const meta = srcMeta || {\n providedIn: null\n };\n const compilerMeta = {\n name: type.name,\n type: type,\n typeArgumentCount: 0,\n providedIn: meta.providedIn\n };\n if ((isUseClassProvider(meta) || isUseFactoryProvider(meta)) && meta.deps !== undefined) {\n compilerMeta.deps = convertDependencies(meta.deps);\n }\n if (isUseClassProvider(meta)) {\n compilerMeta.useClass = meta.useClass;\n } else if (isUseValueProvider(meta)) {\n compilerMeta.useValue = meta.useValue;\n } else if (isUseFactoryProvider(meta)) {\n compilerMeta.useFactory = meta.useFactory;\n } else if (isUseExistingProvider(meta)) {\n compilerMeta.useExisting = meta.useExisting;\n }\n return compilerMeta;\n}\nconst Injectable = /*#__PURE__*/makeDecorator('Injectable', undefined, undefined, undefined, (type, meta) => compileInjectable(type, meta));\nfunction injectElementRef() {\n return createElementRef(getCurrentTNode(), getLView());\n}\nfunction createElementRef(tNode, lView) {\n return new ElementRef(getNativeByTNode(tNode, lView));\n}\nlet ElementRef = /*#__PURE__*/(() => {\n class ElementRef {\n nativeElement;\n constructor(nativeElement) {\n this.nativeElement = nativeElement;\n }\n static __NG_ELEMENT_ID__ = injectElementRef;\n }\n return ElementRef;\n})();\nfunction unwrapElementRef(value) {\n return value instanceof ElementRef ? value.nativeElement : value;\n}\nfunction symbolIterator() {\n return this._results[Symbol.iterator]();\n}\nclass QueryList {\n _emitDistinctChangesOnly;\n dirty = true;\n _onDirty = undefined;\n _results = [];\n _changesDetected = false;\n _changes = undefined;\n length = 0;\n first = undefined;\n last = undefined;\n get changes() {\n return this._changes ??= new Subject();\n }\n constructor(_emitDistinctChangesOnly = false) {\n this._emitDistinctChangesOnly = _emitDistinctChangesOnly;\n }\n get(index) {\n return this._results[index];\n }\n map(fn) {\n return this._results.map(fn);\n }\n filter(fn) {\n return this._results.filter(fn);\n }\n find(fn) {\n return this._results.find(fn);\n }\n reduce(fn, init) {\n return this._results.reduce(fn, init);\n }\n forEach(fn) {\n this._results.forEach(fn);\n }\n some(fn) {\n return this._results.some(fn);\n }\n toArray() {\n return this._results.slice();\n }\n toString() {\n return this._results.toString();\n }\n reset(resultsTree, identityAccessor) {\n this.dirty = false;\n const newResultFlat = flatten(resultsTree);\n if (this._changesDetected = !arrayEquals(this._results, newResultFlat, identityAccessor)) {\n this._results = newResultFlat;\n this.length = newResultFlat.length;\n this.last = newResultFlat[this.length - 1];\n this.first = newResultFlat[0];\n }\n }\n notifyOnChanges() {\n if (this._changes !== undefined && (this._changesDetected || !this._emitDistinctChangesOnly)) this._changes.next(this);\n }\n onDirty(cb) {\n this._onDirty = cb;\n }\n setDirty() {\n this.dirty = true;\n this._onDirty?.();\n }\n destroy() {\n if (this._changes !== undefined) {\n this._changes.complete();\n this._changes.unsubscribe();\n }\n }\n [Symbol.iterator] = /*#__PURE__*/(() => symbolIterator)();\n}\nconst SKIP_HYDRATION_ATTR_NAME = 'ngSkipHydration';\nconst SKIP_HYDRATION_ATTR_NAME_LOWER_CASE = 'ngskiphydration';\nfunction hasSkipHydrationAttrOnTNode(tNode) {\n const attrs = tNode.mergedAttrs;\n if (attrs === null) return false;\n for (let i = 0; i < attrs.length; i += 2) {\n const value = attrs[i];\n if (typeof value === 'number') return false;\n if (typeof value === 'string' && value.toLowerCase() === SKIP_HYDRATION_ATTR_NAME_LOWER_CASE) {\n return true;\n }\n }\n return false;\n}\nfunction hasSkipHydrationAttrOnRElement(rNode) {\n return rNode.hasAttribute(SKIP_HYDRATION_ATTR_NAME);\n}\nfunction hasInSkipHydrationBlockFlag(tNode) {\n return (tNode.flags & 128) === 128;\n}\nfunction isInSkipHydrationBlock(tNode) {\n if (hasInSkipHydrationBlockFlag(tNode)) {\n return true;\n }\n let currentTNode = tNode.parent;\n while (currentTNode) {\n if (hasInSkipHydrationBlockFlag(tNode) || hasSkipHydrationAttrOnTNode(currentTNode)) {\n return true;\n }\n currentTNode = currentTNode.parent;\n }\n return false;\n}\nfunction isI18nInSkipHydrationBlock(parentTNode) {\n return hasInSkipHydrationBlockFlag(parentTNode) || hasSkipHydrationAttrOnTNode(parentTNode) || isInSkipHydrationBlock(parentTNode);\n}\nvar ChangeDetectionStrategy = /*#__PURE__*/function (ChangeDetectionStrategy) {\n ChangeDetectionStrategy[ChangeDetectionStrategy[\"OnPush\"] = 0] = \"OnPush\";\n ChangeDetectionStrategy[ChangeDetectionStrategy[\"Eager\"] = 1] = \"Eager\";\n ChangeDetectionStrategy[ChangeDetectionStrategy[\"Default\"] = 1] = \"Default\";\n return ChangeDetectionStrategy;\n}(ChangeDetectionStrategy || {});\nconst TRACKED_LVIEWS = /*#__PURE__*/new Map();\nlet uniqueIdCounter = 0;\nfunction getUniqueLViewId() {\n return uniqueIdCounter++;\n}\nfunction registerLView(lView) {\n ngDevMode && assertNumber(lView[ID], 'LView must have an ID in order to be registered');\n TRACKED_LVIEWS.set(lView[ID], lView);\n}\nfunction getLViewById(id) {\n ngDevMode && assertNumber(id, 'ID used for LView lookup must be a number');\n return TRACKED_LVIEWS.get(id) || null;\n}\nfunction unregisterLView(lView) {\n ngDevMode && assertNumber(lView[ID], 'Cannot stop tracking an LView that does not have an ID');\n TRACKED_LVIEWS.delete(lView[ID]);\n}\nfunction getTrackedLViews() {\n return TRACKED_LVIEWS;\n}\nclass LContext {\n lViewId;\n nodeIndex;\n native;\n component;\n directives;\n localRefs;\n get lView() {\n return getLViewById(this.lViewId);\n }\n constructor(lViewId, nodeIndex, native) {\n this.lViewId = lViewId;\n this.nodeIndex = nodeIndex;\n this.native = native;\n }\n}\nfunction getLContext(target) {\n let mpValue = readPatchedData(target);\n if (mpValue) {\n if (isLView(mpValue)) {\n const lView = mpValue;\n let nodeIndex;\n let component = undefined;\n let directives = undefined;\n if (isComponentInstance(target)) {\n nodeIndex = findViaComponent(lView, target);\n if (nodeIndex == -1) {\n throw new Error('The provided component was not found in the application');\n }\n component = target;\n } else if (isDirectiveInstance(target)) {\n nodeIndex = findViaDirective(lView, target);\n if (nodeIndex == -1) {\n throw new Error('The provided directive was not found in the application');\n }\n directives = getDirectivesAtNodeIndex(nodeIndex, lView);\n } else {\n nodeIndex = findViaNativeElement(lView, target);\n if (nodeIndex == -1) {\n return null;\n }\n }\n const native = unwrapRNode(lView[nodeIndex]);\n const existingCtx = readPatchedData(native);\n const context = existingCtx && !Array.isArray(existingCtx) ? existingCtx : createLContext(lView, nodeIndex, native);\n if (component && context.component === undefined) {\n context.component = component;\n attachPatchData(context.component, context);\n }\n if (directives && context.directives === undefined) {\n context.directives = directives;\n for (let i = 0; i < directives.length; i++) {\n attachPatchData(directives[i], context);\n }\n }\n attachPatchData(context.native, context);\n mpValue = context;\n }\n } else {\n const rElement = target;\n ngDevMode && assertDomNode(rElement);\n let parent = rElement;\n while (parent = parent.parentNode) {\n const parentContext = readPatchedData(parent);\n if (parentContext) {\n const lView = Array.isArray(parentContext) ? parentContext : parentContext.lView;\n if (!lView) {\n return null;\n }\n const index = findViaNativeElement(lView, rElement);\n if (index >= 0) {\n const native = unwrapRNode(lView[index]);\n const context = createLContext(lView, index, native);\n attachPatchData(native, context);\n mpValue = context;\n break;\n }\n }\n }\n }\n return mpValue || null;\n}\nfunction createLContext(lView, nodeIndex, native) {\n return new LContext(lView[ID], nodeIndex, native);\n}\nfunction getComponentViewByInstance(componentInstance) {\n let patchedData = readPatchedData(componentInstance);\n let lView;\n if (isLView(patchedData)) {\n const contextLView = patchedData;\n const nodeIndex = findViaComponent(contextLView, componentInstance);\n lView = getComponentLViewByIndex(nodeIndex, contextLView);\n const context = createLContext(contextLView, nodeIndex, lView[HOST]);\n context.component = componentInstance;\n attachPatchData(componentInstance, context);\n attachPatchData(context.native, context);\n } else {\n const context = patchedData;\n const contextLView = context.lView;\n ngDevMode && assertLView(contextLView);\n lView = getComponentLViewByIndex(context.nodeIndex, contextLView);\n }\n return lView;\n}\nconst MONKEY_PATCH_KEY_NAME = '__ngContext__';\nfunction attachPatchData(target, data) {\n ngDevMode && assertDefined(target, 'Target expected');\n if (isLView(data)) {\n target[MONKEY_PATCH_KEY_NAME] = data[ID];\n registerLView(data);\n } else {\n target[MONKEY_PATCH_KEY_NAME] = data;\n }\n}\nfunction readPatchedData(target) {\n ngDevMode && assertDefined(target, 'Target expected');\n const data = target[MONKEY_PATCH_KEY_NAME];\n return typeof data === 'number' ? getLViewById(data) : data || null;\n}\nfunction readPatchedLView(target) {\n const value = readPatchedData(target);\n if (value) {\n return isLView(value) ? value : value.lView;\n }\n return null;\n}\nfunction isComponentInstance(instance) {\n return instance && instance.constructor && instance.constructor.ɵcmp;\n}\nfunction isDirectiveInstance(instance) {\n return instance && instance.constructor && instance.constructor.ɵdir;\n}\nfunction findViaNativeElement(lView, target) {\n const tView = lView[TVIEW];\n for (let i = HEADER_OFFSET; i < tView.bindingStartIndex; i++) {\n if (unwrapRNode(lView[i]) === target) {\n return i;\n }\n }\n return -1;\n}\nfunction traverseNextElement(tNode) {\n if (tNode.child) {\n return tNode.child;\n } else if (tNode.next) {\n return tNode.next;\n } else {\n while (tNode.parent && !tNode.parent.next) {\n tNode = tNode.parent;\n }\n return tNode.parent && tNode.parent.next;\n }\n}\nfunction findViaComponent(lView, componentInstance) {\n const componentIndices = lView[TVIEW].components;\n if (componentIndices) {\n for (let i = 0; i < componentIndices.length; i++) {\n const elementComponentIndex = componentIndices[i];\n const componentView = getComponentLViewByIndex(elementComponentIndex, lView);\n if (componentView[CONTEXT] === componentInstance) {\n return elementComponentIndex;\n }\n }\n } else {\n const rootComponentView = getComponentLViewByIndex(HEADER_OFFSET, lView);\n const rootComponent = rootComponentView[CONTEXT];\n if (rootComponent === componentInstance) {\n return HEADER_OFFSET;\n }\n }\n return -1;\n}\nfunction findViaDirective(lView, directiveInstance) {\n let tNode = lView[TVIEW].firstChild;\n while (tNode) {\n const directiveIndexStart = tNode.directiveStart;\n const directiveIndexEnd = tNode.directiveEnd;\n for (let i = directiveIndexStart; i < directiveIndexEnd; i++) {\n if (lView[i] === directiveInstance) {\n return tNode.index;\n }\n }\n tNode = traverseNextElement(tNode);\n }\n return -1;\n}\nfunction getDirectivesAtNodeIndex(nodeIndex, lView) {\n const tNode = lView[TVIEW].data[nodeIndex];\n if (tNode.directiveStart === 0) return EMPTY_ARRAY;\n const results = [];\n for (let i = tNode.directiveStart; i < tNode.directiveEnd; i++) {\n const directiveInstance = lView[i];\n if (!isComponentInstance(directiveInstance)) {\n results.push(directiveInstance);\n }\n }\n return results;\n}\nfunction getComponentAtNodeIndex(nodeIndex, lView) {\n const tNode = lView[TVIEW].data[nodeIndex];\n return isComponentHost(tNode) ? lView[tNode.directiveStart + tNode.componentOffset] : null;\n}\nfunction discoverLocalRefs(lView, nodeIndex) {\n const tNode = lView[TVIEW].data[nodeIndex];\n if (tNode && tNode.localNames) {\n const result = {};\n let localIndex = tNode.index + 1;\n for (let i = 0; i < tNode.localNames.length; i += 2) {\n result[tNode.localNames[i]] = lView[localIndex];\n localIndex++;\n }\n return result;\n }\n return null;\n}\nfunction getRootView(componentOrLView) {\n ngDevMode && assertDefined(componentOrLView, 'component');\n let lView = isLView(componentOrLView) ? componentOrLView : readPatchedLView(componentOrLView);\n while (lView && !isRootView(lView)) {\n lView = getLViewParent(lView);\n }\n ngDevMode && assertLView(lView);\n return lView;\n}\nfunction getRootContext(viewOrComponent) {\n const rootView = getRootView(viewOrComponent);\n ngDevMode && assertDefined(rootView[CONTEXT], 'Root view has no context. Perhaps it is disconnected?');\n return rootView[CONTEXT];\n}\nfunction getFirstLContainer(lView) {\n return getNearestLContainer(lView[CHILD_HEAD]);\n}\nfunction getNextLContainer(container) {\n return getNearestLContainer(container[NEXT]);\n}\nfunction getNearestLContainer(viewOrContainer) {\n while (viewOrContainer !== null && !isLContainer(viewOrContainer)) {\n viewOrContainer = viewOrContainer[NEXT];\n }\n return viewOrContainer;\n}\nfunction getComponent(element) {\n ngDevMode && assertDomElement(element);\n const context = getLContext(element);\n if (context === null) return null;\n if (context.component === undefined) {\n const lView = context.lView;\n if (lView === null) {\n return null;\n }\n context.component = getComponentAtNodeIndex(context.nodeIndex, lView);\n }\n return context.component;\n}\nfunction getContext(element) {\n assertDomElement(element);\n const context = getLContext(element);\n const lView = context ? context.lView : null;\n return lView === null ? null : lView[CONTEXT];\n}\nfunction getOwningComponent(elementOrDir) {\n const context = getLContext(elementOrDir);\n let lView = context ? context.lView : null;\n if (lView === null) return null;\n let parent;\n while (lView[TVIEW].type === 2 && (parent = getLViewParent(lView))) {\n lView = parent;\n }\n return isRootView(lView) ? null : lView[CONTEXT];\n}\nfunction getRootComponents(elementOrDir) {\n const lView = readPatchedLView(elementOrDir);\n return lView !== null ? [getRootContext(lView)] : [];\n}\nfunction getInjector(elementOrDir) {\n const context = getLContext(elementOrDir);\n const lView = context ? context.lView : null;\n if (lView === null) return Injector.NULL;\n const tNode = lView[TVIEW].data[context.nodeIndex];\n return new NodeInjector(tNode, lView);\n}\nfunction getInjectionTokens(element) {\n const context = getLContext(element);\n const lView = context ? context.lView : null;\n if (lView === null) return [];\n const tView = lView[TVIEW];\n const tNode = tView.data[context.nodeIndex];\n const providerTokens = [];\n const startIndex = tNode.providerIndexes & 1048575;\n const endIndex = tNode.directiveEnd;\n for (let i = startIndex; i < endIndex; i++) {\n let value = tView.data[i];\n if (isDirectiveDefHack(value)) {\n value = value.type;\n }\n providerTokens.push(value);\n }\n return providerTokens;\n}\nfunction getDirectives(node) {\n if (node instanceof Text) {\n return [];\n }\n const context = getLContext(node);\n const lView = context ? context.lView : null;\n if (lView === null) {\n return [];\n }\n const tView = lView[TVIEW];\n const nodeIndex = context.nodeIndex;\n if (!tView?.data[nodeIndex]) {\n return [];\n }\n if (context.directives === undefined) {\n context.directives = getDirectivesAtNodeIndex(nodeIndex, lView);\n }\n return context.directives === null ? [] : [...context.directives];\n}\nvar AcxChangeDetectionStrategy = /*#__PURE__*/function (AcxChangeDetectionStrategy) {\n AcxChangeDetectionStrategy[AcxChangeDetectionStrategy[\"Default\"] = 0] = \"Default\";\n AcxChangeDetectionStrategy[AcxChangeDetectionStrategy[\"OnPush\"] = 1] = \"OnPush\";\n return AcxChangeDetectionStrategy;\n}(AcxChangeDetectionStrategy || {});\nvar AcxViewEncapsulation = /*#__PURE__*/function (AcxViewEncapsulation) {\n AcxViewEncapsulation[AcxViewEncapsulation[\"Emulated\"] = 0] = \"Emulated\";\n AcxViewEncapsulation[AcxViewEncapsulation[\"None\"] = 1] = \"None\";\n return AcxViewEncapsulation;\n}(AcxViewEncapsulation || {});\nfunction getDirectiveMetadata$1(directiveOrComponentInstance) {\n const {\n constructor\n } = directiveOrComponentInstance;\n if (!constructor) {\n throw new Error('Unable to find the instance constructor');\n }\n const componentDef = getComponentDef(constructor);\n if (componentDef) {\n const inputs = extractInputDebugMetadata(componentDef.inputs);\n return {\n inputs,\n outputs: componentDef.outputs,\n encapsulation: componentDef.encapsulation,\n changeDetection: componentDef.onPush ? ChangeDetectionStrategy.OnPush : ChangeDetectionStrategy.Eager\n };\n }\n const directiveDef = getDirectiveDef(constructor);\n if (directiveDef) {\n const inputs = extractInputDebugMetadata(directiveDef.inputs);\n return {\n inputs,\n outputs: directiveDef.outputs\n };\n }\n return null;\n}\nfunction getLocalRefs(target) {\n const context = getLContext(target);\n if (context === null) return {};\n if (context.localRefs === undefined) {\n const lView = context.lView;\n if (lView === null) {\n return {};\n }\n context.localRefs = discoverLocalRefs(lView, context.nodeIndex);\n }\n return context.localRefs || {};\n}\nfunction getHostElement(componentOrDirective) {\n return getLContext(componentOrDirective).native;\n}\nfunction getListeners(element) {\n ngDevMode && assertDomElement(element);\n const lContext = getLContext(element);\n const lView = lContext === null ? null : lContext.lView;\n if (lView === null) return [];\n const tView = lView[TVIEW];\n const lCleanup = lView[CLEANUP];\n const tCleanup = tView.cleanup;\n const listeners = [];\n if (tCleanup && lCleanup) {\n for (let i = 0; i < tCleanup.length;) {\n const firstParam = tCleanup[i++];\n const secondParam = tCleanup[i++];\n if (typeof firstParam === 'string') {\n const name = firstParam;\n const listenerElement = unwrapRNode(lView[secondParam]);\n const callback = lCleanup[tCleanup[i++]];\n const useCaptureOrIndx = tCleanup[i++];\n const type = typeof useCaptureOrIndx === 'boolean' || useCaptureOrIndx >= 0 ? 'dom' : 'output';\n const useCapture = typeof useCaptureOrIndx === 'boolean' ? useCaptureOrIndx : false;\n if (element == listenerElement) {\n listeners.push({\n element,\n name,\n callback,\n useCapture,\n type\n });\n }\n }\n }\n }\n listeners.sort(sortListeners);\n return listeners;\n}\nfunction sortListeners(a, b) {\n if (a.name == b.name) return 0;\n return a.name < b.name ? -1 : 1;\n}\nfunction isDirectiveDefHack(obj) {\n return obj.type !== undefined && obj.declaredInputs !== undefined && obj.resolveHostDirectives !== undefined;\n}\nfunction assertDomElement(value) {\n if (typeof Element !== 'undefined' && !(value instanceof Element)) {\n throw new Error('Expecting instance of DOM Element');\n }\n}\nfunction extractInputDebugMetadata(inputs) {\n const res = {};\n for (const key in inputs) {\n if (inputs.hasOwnProperty(key)) {\n const value = inputs[key];\n if (value !== undefined) {\n res[key] = value[0];\n }\n }\n }\n return res;\n}\nlet DOCUMENT = undefined;\nfunction setDocument(document) {\n DOCUMENT = document;\n}\nfunction getDocument() {\n if (DOCUMENT !== undefined) {\n return DOCUMENT;\n } else if (typeof document !== 'undefined') {\n return document;\n }\n throw new RuntimeError(210, (typeof ngDevMode === 'undefined' || ngDevMode) && `The document object is not available in this context. Make sure the DOCUMENT injection token is provided.`);\n}\nconst APP_ID = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'AppId' : '', {\n factory: () => DEFAULT_APP_ID\n});\nconst DEFAULT_APP_ID = 'ng';\nconst validAppIdInitializer = {\n provide: ENVIRONMENT_INITIALIZER,\n multi: true,\n useValue: () => {\n const appId = inject(APP_ID);\n const isAlphanumeric = /^[a-zA-Z0-9\\-_]+$/.test(appId);\n if (!isAlphanumeric) {\n throw new RuntimeError(211, `APP_ID value \"${appId}\" is not alphanumeric. ` + `The APP_ID must be a string of alphanumeric characters. (a-zA-Z0-9), hyphens (-) and underscores (_) are allowed.`);\n }\n }\n};\nconst PLATFORM_INITIALIZER = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'Platform Initializer' : '');\nconst PLATFORM_ID = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'Platform ID' : '', {\n providedIn: 'platform',\n factory: () => 'unknown'\n});\nconst ANIMATION_MODULE_TYPE = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'AnimationModuleType' : '');\nconst CSP_NONCE = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'CSP nonce' : '', {\n factory: () => {\n return inject(DOCUMENT$1).body?.querySelector('[ngCspNonce]')?.getAttribute('ngCspNonce') || null;\n }\n});\nconst IMAGE_CONFIG_DEFAULTS = {\n breakpoints: [16, 32, 48, 64, 96, 128, 256, 384, 640, 750, 828, 1080, 1200, 1920, 2048, 3840],\n placeholderResolution: 30,\n disableImageSizeWarning: false,\n disableImageLazyLoadWarning: false\n};\nconst IMAGE_CONFIG = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'ImageConfig' : '', {\n factory: () => IMAGE_CONFIG_DEFAULTS\n});\nfunction makeStateKey(key) {\n return key;\n}\nlet TransferState = /*#__PURE__*/(() => {\n class TransferState {\n static ɵprov = /* @__PURE__ */\n __defineInjectable({\n token: TransferState,\n providedIn: 'root',\n factory: () => {\n const transferState = new TransferState();\n if (typeof ngServerMode === 'undefined' || !ngServerMode) {\n transferState.store = retrieveTransferredState(inject(DOCUMENT$1), inject(APP_ID));\n }\n return transferState;\n }\n });\n store = {};\n onSerializeCallbacks = {};\n get(key, defaultValue) {\n return this.store[key] !== undefined ? this.store[key] : defaultValue;\n }\n set(key, value) {\n this.store[key] = value;\n }\n remove(key) {\n delete this.store[key];\n }\n hasKey(key) {\n return this.store.hasOwnProperty(key);\n }\n get isEmpty() {\n return Object.keys(this.store).length === 0;\n }\n onSerialize(key, callback) {\n this.onSerializeCallbacks[key] = callback;\n }\n toJson() {\n for (const key in this.onSerializeCallbacks) {\n if (this.onSerializeCallbacks.hasOwnProperty(key)) {\n try {\n this.store[key] = this.onSerializeCallbacks[key]();\n } catch (e) {\n console.warn('Exception in onSerialize callback: ', e);\n }\n }\n }\n return JSON.stringify(this.store).replace(/ PRESERVE_HOST_CONTENT_DEFAULT\n});\nconst IS_I18N_HYDRATION_ENABLED = /*#__PURE__*/new InjectionToken(typeof ngDevMode === 'undefined' || ngDevMode ? 'IS_I18N_HYDRATION_ENABLED' : '');\nconst IS_EVENT_REPLAY_ENABLED = /*#__PURE__*/new InjectionToken(typeof ngDevMode === 'undefined' || ngDevMode ? 'IS_EVENT_REPLAY_ENABLED' : '');\nconst EVENT_REPLAY_ENABLED_DEFAULT = false;\nconst EVENT_REPLAY_QUEUE = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'EVENT_REPLAY_QUEUE' : '', {\n factory: () => []\n});\nconst IS_INCREMENTAL_HYDRATION_ENABLED = /*#__PURE__*/new InjectionToken(typeof ngDevMode === 'undefined' || ngDevMode ? 'IS_INCREMENTAL_HYDRATION_ENABLED' : '');\nconst JSACTION_BLOCK_ELEMENT_MAP = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'JSACTION_BLOCK_ELEMENT_MAP' : '', {\n factory: () => new Map()\n});\nconst IS_ENABLED_BLOCKING_INITIAL_NAVIGATION = /*#__PURE__*/new InjectionToken(typeof ngDevMode === 'undefined' || ngDevMode ? 'IS_ENABLED_BLOCKING_INITIAL_NAVIGATION' : '');\nconst eventListenerOptions = {\n passive: true,\n capture: true\n};\nconst hoverTriggers = /*#__PURE__*/new WeakMap();\nconst interactionTriggers = /*#__PURE__*/new WeakMap();\nconst viewportTriggers = /*#__PURE__*/new WeakMap();\nconst interactionEventNames = ['click', 'keydown'];\nconst hoverEventNames = ['mouseenter', 'mouseover', 'focusin'];\nconst intersectionObservers = /*#__PURE__*/new Map();\nclass DeferEventEntry {\n callbacks = /*#__PURE__*/new Set();\n listener = () => {\n for (const callback of this.callbacks) {\n callback();\n }\n };\n}\nfunction onInteraction(trigger, callback) {\n let entry = interactionTriggers.get(trigger);\n if (!entry) {\n entry = new DeferEventEntry();\n interactionTriggers.set(trigger, entry);\n for (const name of interactionEventNames) {\n trigger.addEventListener(name, entry.listener, eventListenerOptions);\n }\n }\n entry.callbacks.add(callback);\n return () => {\n const {\n callbacks,\n listener\n } = entry;\n callbacks.delete(callback);\n if (callbacks.size === 0) {\n interactionTriggers.delete(trigger);\n for (const name of interactionEventNames) {\n trigger.removeEventListener(name, listener, eventListenerOptions);\n }\n }\n };\n}\nfunction onHover(trigger, callback) {\n let entry = hoverTriggers.get(trigger);\n if (!entry) {\n entry = new DeferEventEntry();\n hoverTriggers.set(trigger, entry);\n for (const name of hoverEventNames) {\n trigger.addEventListener(name, entry.listener, eventListenerOptions);\n }\n }\n entry.callbacks.add(callback);\n return () => {\n const {\n callbacks,\n listener\n } = entry;\n callbacks.delete(callback);\n if (callbacks.size === 0) {\n for (const name of hoverEventNames) {\n trigger.removeEventListener(name, listener, eventListenerOptions);\n }\n hoverTriggers.delete(trigger);\n }\n };\n}\nfunction createIntersectionObserver(options) {\n const key = getIntersectionObserverKey(options);\n return new IntersectionObserver(entries => {\n for (const current of entries) {\n if (current.isIntersecting && viewportTriggers.has(current.target)) {\n viewportTriggers.get(current.target)?.get(key)?.listener();\n }\n }\n }, options);\n}\nfunction onViewport(trigger, callback, observerFactoryFn, options) {\n const key = getIntersectionObserverKey(options);\n let entry = viewportTriggers.get(trigger)?.get(key);\n if (!intersectionObservers.has(key)) {\n intersectionObservers.set(key, {\n observer: observerFactoryFn(options),\n count: 0\n });\n }\n const config = intersectionObservers.get(key);\n if (!entry) {\n entry = new DeferEventEntry();\n config.observer.observe(trigger);\n let triggerConfig = viewportTriggers.get(trigger);\n if (triggerConfig) {\n triggerConfig.set(key, entry);\n } else {\n triggerConfig = new Map();\n viewportTriggers.set(trigger, triggerConfig);\n }\n triggerConfig.set(key, entry);\n config.count++;\n }\n entry.callbacks.add(callback);\n return () => {\n if (!viewportTriggers.get(trigger)?.has(key)) {\n return;\n }\n entry.callbacks.delete(callback);\n if (entry.callbacks.size === 0) {\n config.observer.unobserve(trigger);\n config.count--;\n const triggerConfig = viewportTriggers.get(trigger);\n if (triggerConfig) {\n triggerConfig.delete(key);\n if (triggerConfig.size === 0) {\n viewportTriggers.delete(trigger);\n }\n }\n }\n if (config.count === 0) {\n config.observer.disconnect();\n intersectionObservers.delete(key);\n }\n };\n}\nfunction getIntersectionObserverKey(options) {\n if (!options) {\n return '';\n }\n return `${options.rootMargin}/${typeof options.threshold === 'number' ? options.threshold : options.threshold?.join('\\n')}`;\n}\nconst DEFER_BLOCK_SSR_ID_ATTRIBUTE = 'ngb';\nfunction setJSActionAttributes(nativeElement, eventTypes, parentDeferBlockId = null) {\n if (eventTypes.length === 0 || nativeElement.nodeType !== Node.ELEMENT_NODE) {\n return;\n }\n const existingAttr = nativeElement.getAttribute(Attribute$1.JSACTION);\n const parts = eventTypes.reduce((prev, curr) => {\n return (existingAttr?.indexOf(curr) ?? -1) === -1 ? prev + curr + ':;' : prev;\n }, '');\n nativeElement.setAttribute(Attribute$1.JSACTION, `${existingAttr ?? ''}${parts}`);\n const blockName = parentDeferBlockId ?? '';\n if (blockName !== '' && parts.length > 0) {\n nativeElement.setAttribute(DEFER_BLOCK_SSR_ID_ATTRIBUTE, blockName);\n }\n}\nconst sharedStashFunction = (rEl, eventType, listenerFn) => {\n const el = rEl;\n const eventListenerMap = el.__jsaction_fns ?? new Map();\n const eventListeners = eventListenerMap.get(eventType) ?? [];\n eventListeners.push(listenerFn);\n eventListenerMap.set(eventType, eventListeners);\n el.__jsaction_fns = eventListenerMap;\n};\nconst sharedMapFunction = (rEl, jsActionMap) => {\n const el = rEl;\n let blockName = el.getAttribute(DEFER_BLOCK_SSR_ID_ATTRIBUTE) ?? '';\n const blockSet = jsActionMap.get(blockName) ?? new Set();\n if (!blockSet.has(el)) {\n blockSet.add(el);\n }\n jsActionMap.set(blockName, blockSet);\n};\nfunction removeListenersFromBlocks(blockNames, jsActionMap) {\n if (blockNames.length > 0) {\n let blockList = [];\n for (let blockName of blockNames) {\n if (jsActionMap.has(blockName)) {\n blockList = [...blockList, ...jsActionMap.get(blockName)];\n }\n }\n const replayList = new Set(blockList);\n replayList.forEach(removeListeners);\n }\n}\nconst removeListeners = el => {\n el.removeAttribute(Attribute$1.JSACTION);\n el.removeAttribute(DEFER_BLOCK_SSR_ID_ATTRIBUTE);\n el.__jsaction_fns = undefined;\n};\nconst JSACTION_EVENT_CONTRACT = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'EVENT_CONTRACT_DETAILS' : '', {\n factory: () => ({})\n});\nfunction invokeListeners(event, currentTarget) {\n const handlerFns = currentTarget?.__jsaction_fns?.get(event.type);\n if (!handlerFns || !currentTarget?.isConnected) {\n return;\n }\n for (const handler of handlerFns) {\n handler(event);\n }\n}\nconst stashEventListeners = /*#__PURE__*/new Map();\nfunction setStashFn(appId, fn) {\n stashEventListeners.set(appId, fn);\n return () => stashEventListeners.delete(appId);\n}\nlet isStashEventListenerImplEnabled = false;\nlet _stashEventListenerImpl = (lView, target, eventName, wrappedListener) => {};\nfunction stashEventListenerImpl(lView, target, eventName, wrappedListener) {\n _stashEventListenerImpl(lView, target, eventName, wrappedListener);\n}\nfunction enableStashEventListenerImpl() {\n if (!isStashEventListenerImplEnabled) {\n _stashEventListenerImpl = (lView, target, eventName, wrappedListener) => {\n const appId = lView[INJECTOR].get(APP_ID);\n const stashEventListener = stashEventListeners.get(appId);\n stashEventListener?.(target, eventName, wrappedListener);\n };\n isStashEventListenerImplEnabled = true;\n }\n}\nconst DEHYDRATED_BLOCK_REGISTRY = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'DEHYDRATED_BLOCK_REGISTRY' : '');\nlet DehydratedBlockRegistry = /*#__PURE__*/(() => {\n class DehydratedBlockRegistry {\n registry = new Map();\n cleanupFns = new Map();\n jsActionMap = inject(JSACTION_BLOCK_ELEMENT_MAP);\n contract = inject(JSACTION_EVENT_CONTRACT);\n add(blockId, info) {\n this.registry.set(blockId, info);\n if (this.awaitingCallbacks.has(blockId)) {\n const awaitingCallbacks = this.awaitingCallbacks.get(blockId);\n for (const cb of awaitingCallbacks) {\n cb();\n }\n }\n }\n get(blockId) {\n return this.registry.get(blockId) ?? null;\n }\n has(blockId) {\n return this.registry.has(blockId);\n }\n cleanup(hydratedBlocks) {\n removeListenersFromBlocks(hydratedBlocks, this.jsActionMap);\n for (let blockId of hydratedBlocks) {\n this.registry.delete(blockId);\n this.jsActionMap.delete(blockId);\n this.invokeTriggerCleanupFns(blockId);\n this.hydrating.delete(blockId);\n this.awaitingCallbacks.delete(blockId);\n }\n if (this.size === 0) {\n this.contract.instance?.cleanUp();\n }\n }\n get size() {\n return this.registry.size;\n }\n addCleanupFn(blockId, fn) {\n let cleanupFunctions = [];\n if (this.cleanupFns.has(blockId)) {\n cleanupFunctions = this.cleanupFns.get(blockId);\n }\n cleanupFunctions.push(fn);\n this.cleanupFns.set(blockId, cleanupFunctions);\n }\n invokeTriggerCleanupFns(blockId) {\n const fns = this.cleanupFns.get(blockId) ?? [];\n for (let fn of fns) {\n fn();\n }\n this.cleanupFns.delete(blockId);\n }\n hydrating = new Map();\n awaitingCallbacks = new Map();\n awaitParentBlock(topmostParentBlock, callback) {\n const parentBlockAwaitCallbacks = this.awaitingCallbacks.get(topmostParentBlock) ?? [];\n parentBlockAwaitCallbacks.push(callback);\n this.awaitingCallbacks.set(topmostParentBlock, parentBlockAwaitCallbacks);\n }\n static ɵprov = /* @__PURE__ */\n __defineInjectable({\n token: DehydratedBlockRegistry,\n providedIn: null,\n factory: () => new DehydratedBlockRegistry()\n });\n }\n return DehydratedBlockRegistry;\n})();\nfunction isDetachedByI18n(tNode) {\n return (tNode.flags & 32) === 32;\n}\nconst TRANSFER_STATE_TOKEN_ID = '__nghData__';\nconst NGH_DATA_KEY = /*#__PURE__*/makeStateKey(TRANSFER_STATE_TOKEN_ID);\nconst TRANSFER_STATE_DEFER_BLOCKS_INFO = '__nghDeferData__';\nconst NGH_DEFER_BLOCKS_KEY = /*#__PURE__*/makeStateKey(TRANSFER_STATE_DEFER_BLOCKS_INFO);\nfunction isInternalHydrationTransferStateKey(key) {\n return key === TRANSFER_STATE_TOKEN_ID || key === TRANSFER_STATE_DEFER_BLOCKS_INFO;\n}\nconst NGH_ATTR_NAME = 'ngh';\nconst SSR_CONTENT_INTEGRITY_MARKER = 'nghm';\nlet _retrieveHydrationInfoImpl = () => null;\nfunction retrieveHydrationInfoImpl(rNode, injector, isRootView = false) {\n let nghAttrValue = rNode.getAttribute(NGH_ATTR_NAME);\n if (nghAttrValue == null) return null;\n const [componentViewNgh, rootViewNgh] = nghAttrValue.split('|');\n nghAttrValue = isRootView ? rootViewNgh : componentViewNgh;\n if (!nghAttrValue) return null;\n const rootNgh = rootViewNgh ? `|${rootViewNgh}` : '';\n const remainingNgh = isRootView ? componentViewNgh : rootNgh;\n let data = {};\n if (nghAttrValue !== '') {\n const transferState = injector.get(TransferState, null, {\n optional: true\n });\n if (transferState !== null) {\n const nghData = transferState.get(NGH_DATA_KEY, []);\n data = nghData[Number(nghAttrValue)];\n ngDevMode && assertDefined(data, 'Unable to retrieve hydration info from the TransferState.');\n }\n }\n const dehydratedView = {\n data,\n firstChild: rNode.firstChild ?? null\n };\n if (isRootView) {\n dehydratedView.firstChild = rNode;\n setSegmentHead(dehydratedView, 0, rNode.nextSibling);\n }\n if (remainingNgh) {\n rNode.setAttribute(NGH_ATTR_NAME, remainingNgh);\n } else {\n rNode.removeAttribute(NGH_ATTR_NAME);\n }\n ngDevMode && markRNodeAsClaimedByHydration(rNode, false);\n ngDevMode && ngDevMode.hydratedComponents++;\n return dehydratedView;\n}\nfunction enableRetrieveHydrationInfoImpl() {\n _retrieveHydrationInfoImpl = retrieveHydrationInfoImpl;\n}\nfunction retrieveHydrationInfo(rNode, injector, isRootView = false) {\n return _retrieveHydrationInfoImpl(rNode, injector, isRootView);\n}\nfunction getLNodeForHydration(viewRef) {\n let lView = viewRef._lView;\n const tView = lView[TVIEW];\n if (tView.type === 2) {\n return null;\n }\n if (isRootView(lView)) {\n lView = lView[HEADER_OFFSET];\n }\n return lView;\n}\nfunction getTextNodeContent(node) {\n return node.textContent?.replace(/\\s/gm, '');\n}\nfunction processTextNodeMarkersBeforeHydration(node) {\n const doc = getDocument();\n const commentNodesIterator = doc.createNodeIterator(node, NodeFilter.SHOW_COMMENT, {\n acceptNode(node) {\n const content = getTextNodeContent(node);\n const isTextNodeMarker = content === \"ngetn\" || content === \"ngtns\";\n return isTextNodeMarker ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_REJECT;\n }\n });\n let currentNode;\n const nodes = [];\n while (currentNode = commentNodesIterator.nextNode()) {\n nodes.push(currentNode);\n }\n for (const node of nodes) {\n if (node.textContent === \"ngetn\") {\n node.replaceWith(doc.createTextNode(''));\n } else {\n node.remove();\n }\n }\n}\nvar HydrationStatus = /*#__PURE__*/function (HydrationStatus) {\n HydrationStatus[\"Hydrated\"] = \"hydrated\";\n HydrationStatus[\"Skipped\"] = \"skipped\";\n HydrationStatus[\"Mismatched\"] = \"mismatched\";\n return HydrationStatus;\n}(HydrationStatus || {});\nconst HYDRATION_INFO_KEY = '__ngDebugHydrationInfo__';\nfunction patchHydrationInfo(node, info) {\n node[HYDRATION_INFO_KEY] = info;\n}\nfunction readHydrationInfo(node) {\n return node[HYDRATION_INFO_KEY] ?? null;\n}\nfunction markRNodeAsClaimedByHydration(node, checkIfAlreadyClaimed = true) {\n if (!ngDevMode) {\n throw new Error('Calling `markRNodeAsClaimedByHydration` in prod mode ' + 'is not supported and likely a mistake.');\n }\n if (checkIfAlreadyClaimed && isRNodeClaimedForHydration(node)) {\n throw new Error('Trying to claim a node, which was claimed already.');\n }\n patchHydrationInfo(node, {\n status: HydrationStatus.Hydrated\n });\n ngDevMode.hydratedNodes++;\n}\nfunction markRNodeAsSkippedByHydration(node) {\n if (!ngDevMode) {\n throw new Error('Calling `markRNodeAsSkippedByHydration` in prod mode ' + 'is not supported and likely a mistake.');\n }\n patchHydrationInfo(node, {\n status: HydrationStatus.Skipped\n });\n ngDevMode.componentsSkippedHydration++;\n}\nfunction countBlocksSkippedByHydration(injector) {\n const transferState = injector.get(TransferState);\n const nghDeferData = transferState.get(NGH_DEFER_BLOCKS_KEY, {});\n if (ngDevMode) {\n ngDevMode.deferBlocksWithIncrementalHydration = Object.keys(nghDeferData).length;\n }\n}\nfunction markRNodeAsHavingHydrationMismatch(node, expectedNodeDetails = null, actualNodeDetails = null) {\n if (!ngDevMode) {\n throw new Error('Calling `markRNodeAsMismatchedByHydration` in prod mode ' + 'is not supported and likely a mistake.');\n }\n while (node && !getComponent(node)) {\n node = node?.parentNode;\n }\n if (node) {\n patchHydrationInfo(node, {\n status: HydrationStatus.Mismatched,\n expectedNodeDetails,\n actualNodeDetails\n });\n }\n}\nfunction isRNodeClaimedForHydration(node) {\n return readHydrationInfo(node)?.status === HydrationStatus.Hydrated;\n}\nfunction setSegmentHead(hydrationInfo, index, node) {\n hydrationInfo.segmentHeads ??= {};\n hydrationInfo.segmentHeads[index] = node;\n}\nfunction getSegmentHead(hydrationInfo, index) {\n return hydrationInfo.segmentHeads?.[index] ?? null;\n}\nfunction isIncrementalHydrationEnabled(injector) {\n return injector.get(IS_INCREMENTAL_HYDRATION_ENABLED, false, {\n optional: true\n });\n}\nlet incrementalHydrationEnabledWarned = false;\nfunction resetIncrementalHydrationEnabledWarnedForTests() {\n incrementalHydrationEnabledWarned = false;\n}\nfunction warnIncrementalHydrationNotConfigured() {\n if (!incrementalHydrationEnabledWarned) {\n incrementalHydrationEnabledWarned = true;\n console.warn(formatRuntimeError(508, 'Angular has detected that some `@defer` blocks use `hydrate` triggers, ' + 'but incremental hydration was not enabled. Please ensure that the `withIncrementalHydration()` ' + 'call is added as an argument for the `provideClientHydration()` function call ' + 'in your application config.'));\n }\n}\nfunction assertSsrIdDefined(ssrUniqueId) {\n assertDefined(ssrUniqueId, 'Internal error: expecting an SSR id for a defer block that should be hydrated, but the id is not present');\n}\nfunction getNgContainerSize(hydrationInfo, index) {\n const data = hydrationInfo.data;\n let size = data[ELEMENT_CONTAINERS]?.[index] ?? null;\n if (size === null && data[CONTAINERS]?.[index]) {\n size = calcSerializedContainerSize(hydrationInfo, index);\n }\n return size;\n}\nfunction isSerializedElementContainer(hydrationInfo, index) {\n return hydrationInfo.data[ELEMENT_CONTAINERS]?.[index] !== undefined;\n}\nfunction getSerializedContainerViews(hydrationInfo, index) {\n return hydrationInfo.data[CONTAINERS]?.[index] ?? null;\n}\nfunction calcSerializedContainerSize(hydrationInfo, index) {\n const views = getSerializedContainerViews(hydrationInfo, index) ?? [];\n let numNodes = 0;\n for (let view of views) {\n numNodes += view[NUM_ROOT_NODES] * (view[MULTIPLIER] ?? 1);\n }\n return numNodes;\n}\nfunction initDisconnectedNodes(hydrationInfo) {\n if (typeof hydrationInfo.disconnectedNodes === 'undefined') {\n const nodeIds = hydrationInfo.data[DISCONNECTED_NODES];\n hydrationInfo.disconnectedNodes = nodeIds ? new Set(nodeIds) : null;\n }\n return hydrationInfo.disconnectedNodes;\n}\nfunction isDisconnectedNode$1(hydrationInfo, index) {\n if (typeof hydrationInfo.disconnectedNodes === 'undefined') {\n const nodeIds = hydrationInfo.data[DISCONNECTED_NODES];\n hydrationInfo.disconnectedNodes = nodeIds ? new Set(nodeIds) : null;\n }\n return !!initDisconnectedNodes(hydrationInfo)?.has(index);\n}\nfunction canHydrateNode(lView, tNode) {\n const hydrationInfo = lView[HYDRATION];\n return hydrationInfo !== null && !isInSkipHydrationBlock$1() && !isDetachedByI18n(tNode) && !isDisconnectedNode$1(hydrationInfo, tNode.index - HEADER_OFFSET);\n}\nfunction processTextNodeBeforeSerialization(context, node) {\n const el = node;\n const corruptedTextNodes = context.corruptedTextNodes;\n if (el.textContent === '') {\n corruptedTextNodes.set(el, \"ngetn\");\n } else if (el.nextSibling?.nodeType === Node.TEXT_NODE) {\n corruptedTextNodes.set(el, \"ngtns\");\n }\n}\nfunction convertHydrateTriggersToJsAction(triggers) {\n let actionList = [];\n if (triggers !== null) {\n if (triggers.has(4)) {\n actionList.push(...hoverEventNames);\n }\n if (triggers.has(3)) {\n actionList.push(...interactionEventNames);\n }\n }\n return actionList;\n}\nfunction getParentBlockHydrationQueue(deferBlockId, injector) {\n const dehydratedBlockRegistry = injector.get(DEHYDRATED_BLOCK_REGISTRY);\n const transferState = injector.get(TransferState);\n const deferBlockParents = transferState.get(NGH_DEFER_BLOCKS_KEY, {});\n let isTopMostDeferBlock = false;\n let currentBlockId = deferBlockId;\n let parentBlockPromise = null;\n const hydrationQueue = [];\n while (!isTopMostDeferBlock && currentBlockId) {\n ngDevMode && assertEqual(hydrationQueue.indexOf(currentBlockId), -1, 'Internal error: defer block hierarchy has a cycle.');\n isTopMostDeferBlock = dehydratedBlockRegistry.has(currentBlockId);\n const hydratingParentBlock = dehydratedBlockRegistry.hydrating.get(currentBlockId);\n if (parentBlockPromise === null && hydratingParentBlock != null) {\n parentBlockPromise = hydratingParentBlock.promise;\n break;\n }\n hydrationQueue.unshift(currentBlockId);\n currentBlockId = deferBlockParents[currentBlockId][DEFER_PARENT_BLOCK_ID];\n }\n return {\n parentBlockPromise,\n hydrationQueue\n };\n}\nfunction gatherDeferBlocksByJSActionAttribute(doc) {\n const jsactionNodes = doc.body.querySelectorAll('[jsaction]');\n const blockMap = new Set();\n const eventTypes = [hoverEventNames.join(':;'), interactionEventNames.join(':;')].join('|');\n for (let node of jsactionNodes) {\n const attr = node.getAttribute('jsaction');\n const blockId = node.getAttribute('ngb');\n if (attr?.match(eventTypes) && blockId !== null) {\n blockMap.add(node);\n }\n }\n return blockMap;\n}\nfunction appendDeferBlocksToJSActionMap(doc, injector) {\n const blockMap = gatherDeferBlocksByJSActionAttribute(doc);\n const jsActionMap = injector.get(JSACTION_BLOCK_ELEMENT_MAP);\n for (let rNode of blockMap) {\n sharedMapFunction(rNode, jsActionMap);\n }\n}\nlet _retrieveDeferBlockDataImpl = () => {\n return {};\n};\nfunction retrieveDeferBlockDataImpl(injector) {\n const transferState = injector.get(TransferState, null, {\n optional: true\n });\n if (transferState !== null) {\n const nghDeferData = transferState.get(NGH_DEFER_BLOCKS_KEY, {});\n ngDevMode && assertDefined(nghDeferData, 'Unable to retrieve defer block info from the TransferState.');\n return nghDeferData;\n }\n return {};\n}\nfunction enableRetrieveDeferBlockDataImpl() {\n _retrieveDeferBlockDataImpl = retrieveDeferBlockDataImpl;\n}\nfunction retrieveDeferBlockData(injector) {\n return _retrieveDeferBlockDataImpl(injector);\n}\nfunction isTimerTrigger(triggerInfo) {\n return typeof triggerInfo === 'object' && triggerInfo.trigger === 5;\n}\nfunction getHydrateTimerTrigger(blockData) {\n const trigger = blockData[DEFER_HYDRATE_TRIGGERS]?.find(t => isTimerTrigger(t));\n return trigger?.delay ?? null;\n}\nfunction getHydrateViewportTrigger(blockData) {\n const details = blockData[DEFER_HYDRATE_TRIGGERS];\n if (details) {\n for (const current of details) {\n if (current === 2) {\n return true;\n } else if (typeof current === 'object' && current.trigger === 2) {\n return current.intersectionObserverOptions || true;\n }\n }\n }\n return null;\n}\nfunction hasHydrateTrigger(blockData, trigger) {\n return blockData[DEFER_HYDRATE_TRIGGERS]?.includes(trigger) ?? false;\n}\nfunction createBlockSummary(blockInfo) {\n return {\n data: blockInfo,\n hydrate: {\n idle: hasHydrateTrigger(blockInfo, 0),\n immediate: hasHydrateTrigger(blockInfo, 1),\n timer: getHydrateTimerTrigger(blockInfo),\n viewport: getHydrateViewportTrigger(blockInfo)\n }\n };\n}\nfunction processBlockData(injector) {\n const blockData = retrieveDeferBlockData(injector);\n let blockDetails = new Map();\n for (let blockId in blockData) {\n blockDetails.set(blockId, createBlockSummary(blockData[blockId]));\n }\n return blockDetails;\n}\nfunction isSsrContentsIntegrity(node) {\n return !!node && node.nodeType === Node.COMMENT_NODE && node.textContent?.trim() === SSR_CONTENT_INTEGRITY_MARKER;\n}\nfunction skipTextNodes(node) {\n while (node && node.nodeType === Node.TEXT_NODE) {\n node = node.previousSibling;\n }\n return node;\n}\nfunction verifySsrContentsIntegrity(doc) {\n for (const node of doc.body.childNodes) {\n if (isSsrContentsIntegrity(node)) {\n return;\n }\n }\n const beforeBody = skipTextNodes(doc.body.previousSibling);\n if (isSsrContentsIntegrity(beforeBody)) {\n return;\n }\n let endOfHead = skipTextNodes(doc.head.lastChild);\n if (isSsrContentsIntegrity(endOfHead)) {\n return;\n }\n throw new RuntimeError(-507, typeof ngDevMode !== 'undefined' && ngDevMode && 'Angular hydration logic detected that HTML content of this page was modified after it ' + 'was produced during server side rendering. Make sure that there are no optimizations ' + 'that remove comment nodes from HTML enabled on your CDN. Angular hydration ' + 'relies on HTML produced by the server, including whitespaces and comment nodes.');\n}\nfunction refreshContentQueries(tView, lView) {\n const contentQueries = tView.contentQueries;\n if (contentQueries !== null) {\n const prevConsumer = setActiveConsumer(null);\n try {\n for (let i = 0; i < contentQueries.length; i += 2) {\n const queryStartIdx = contentQueries[i];\n const directiveDefIdx = contentQueries[i + 1];\n if (directiveDefIdx !== -1) {\n const directiveDef = tView.data[directiveDefIdx];\n ngDevMode && assertDefined(directiveDef, 'DirectiveDef not found.');\n ngDevMode && assertDefined(directiveDef.contentQueries, 'contentQueries function should be defined');\n setCurrentQueryIndex(queryStartIdx);\n directiveDef.contentQueries(2, lView[directiveDefIdx], directiveDefIdx);\n }\n }\n } finally {\n setActiveConsumer(prevConsumer);\n }\n }\n}\nfunction executeViewQueryFn(flags, viewQueryFn, component) {\n ngDevMode && assertDefined(viewQueryFn, 'View queries function to execute must be defined.');\n setCurrentQueryIndex(0);\n const prevConsumer = setActiveConsumer(null);\n try {\n viewQueryFn(flags, component);\n } finally {\n setActiveConsumer(prevConsumer);\n }\n}\nfunction executeContentQueries(tView, tNode, lView) {\n if (isContentQueryHost(tNode)) {\n const prevConsumer = setActiveConsumer(null);\n try {\n const start = tNode.directiveStart;\n const end = tNode.directiveEnd;\n for (let directiveIndex = start; directiveIndex < end; directiveIndex++) {\n const def = tView.data[directiveIndex];\n if (def.contentQueries) {\n const directiveInstance = lView[directiveIndex];\n ngDevMode && assertDefined(directiveIndex, 'Incorrect reference to a directive defining a content query');\n def.contentQueries(1, directiveInstance, directiveIndex);\n }\n }\n } finally {\n setActiveConsumer(prevConsumer);\n }\n }\n}\nvar ViewEncapsulation = /*#__PURE__*/function (ViewEncapsulation) {\n ViewEncapsulation[ViewEncapsulation[\"Emulated\"] = 0] = \"Emulated\";\n ViewEncapsulation[ViewEncapsulation[\"None\"] = 2] = \"None\";\n ViewEncapsulation[ViewEncapsulation[\"ShadowDom\"] = 3] = \"ShadowDom\";\n ViewEncapsulation[ViewEncapsulation[\"ExperimentalIsolatedShadowDom\"] = 4] = \"ExperimentalIsolatedShadowDom\";\n return ViewEncapsulation;\n}(ViewEncapsulation || {});\nconst CUSTOM_ELEMENTS_SCHEMA = {\n name: 'custom-elements'\n};\nconst NO_ERRORS_SCHEMA = {\n name: 'no-errors-schema'\n};\nlet shouldThrowErrorOnUnknownElement = false;\nfunction ɵsetUnknownElementStrictMode(shouldThrow) {\n shouldThrowErrorOnUnknownElement = shouldThrow;\n}\nfunction ɵgetUnknownElementStrictMode() {\n return shouldThrowErrorOnUnknownElement;\n}\nlet shouldThrowErrorOnUnknownProperty = false;\nfunction ɵsetUnknownPropertyStrictMode(shouldThrow) {\n shouldThrowErrorOnUnknownProperty = shouldThrow;\n}\nfunction ɵgetUnknownPropertyStrictMode() {\n return shouldThrowErrorOnUnknownProperty;\n}\nfunction validateElementIsKnown(lView, tNode) {\n const tView = lView[TVIEW];\n if (tView.schemas === null) return;\n const tagName = tNode.value;\n if (!isDirectiveHost(tNode) && tagName !== null) {\n const isUnknown = typeof HTMLUnknownElement !== 'undefined' && HTMLUnknownElement && getNativeByTNode(tNode, lView) instanceof HTMLUnknownElement || typeof customElements !== 'undefined' && tagName.indexOf('-') > -1 && !customElements.get(tagName);\n if (isUnknown && !matchingSchemas(tView.schemas, tagName)) {\n const isHostStandalone = isHostComponentStandalone(lView);\n const templateLocation = getTemplateLocationDetails(lView);\n const schemas = `'${isHostStandalone ? '@Component' : '@NgModule'}.schemas'`;\n let message = `'${tagName}' is not a known element${templateLocation}:\\n`;\n message += `1. If '${tagName}' is an Angular component, then verify that it is ${isHostStandalone ? \"included in the '@Component.imports' of this component\" : 'a part of an @NgModule where this component is declared'}.\\n`;\n if (tagName && tagName.indexOf('-') > -1) {\n message += `2. If '${tagName}' is a Web Component then add 'CUSTOM_ELEMENTS_SCHEMA' to the ${schemas} of this component to suppress this message.`;\n } else {\n message += `2. To allow any element add 'NO_ERRORS_SCHEMA' to the ${schemas} of this component.`;\n }\n if (shouldThrowErrorOnUnknownElement) {\n throw new RuntimeError(304, message);\n } else {\n console.error(formatRuntimeError(304, message));\n }\n }\n }\n}\nfunction isPropertyValid(element, propName, tagName, schemas) {\n if (schemas === null) return true;\n if (matchingSchemas(schemas, tagName) || propName in element || isAnimationProp(propName)) {\n return true;\n }\n return typeof Node === 'undefined' || Node === null || !(element instanceof Node);\n}\nfunction handleUnknownPropertyError(propName, tagName, nodeType, lView) {\n if (!tagName && nodeType === 4) {\n tagName = 'ng-template';\n }\n const isHostStandalone = isHostComponentStandalone(lView);\n const templateLocation = getTemplateLocationDetails(lView);\n let message = `Can't bind to '${propName}' since it isn't a known property of '${tagName}'${templateLocation}.`;\n const schemas = `'${isHostStandalone ? '@Component' : '@NgModule'}.schemas'`;\n const importLocation = isHostStandalone ? \"included in the '@Component.imports' of this component\" : 'a part of an @NgModule where this component is declared';\n if (KNOWN_CONTROL_FLOW_DIRECTIVES.has(propName)) {\n const correspondingImport = KNOWN_CONTROL_FLOW_DIRECTIVES.get(propName);\n message += `\\nIf the '${propName}' is an Angular control flow directive, ` + `please make sure that either the '${correspondingImport}' directive or the 'CommonModule' is ${importLocation}.`;\n } else {\n message += `\\n1. If '${tagName}' is an Angular component and it has the ` + `'${propName}' input, then verify that it is ${importLocation}.`;\n if (tagName && tagName.indexOf('-') > -1) {\n message += `\\n2. If '${tagName}' is a Web Component then add 'CUSTOM_ELEMENTS_SCHEMA' ` + `to the ${schemas} of this component to suppress this message.`;\n message += `\\n3. To allow any property add 'NO_ERRORS_SCHEMA' to ` + `the ${schemas} of this component.`;\n } else {\n message += `\\n2. To allow any property add 'NO_ERRORS_SCHEMA' to ` + `the ${schemas} of this component.`;\n }\n }\n reportUnknownPropertyError(message);\n}\nfunction reportUnknownPropertyError(message) {\n if (shouldThrowErrorOnUnknownProperty) {\n throw new RuntimeError(303, message);\n } else {\n console.error(formatRuntimeError(303, message));\n }\n}\nfunction getDeclarationComponentDef(lView) {\n !ngDevMode && throwError('Must never be called in production mode');\n const declarationLView = lView[DECLARATION_COMPONENT_VIEW];\n const context = declarationLView[CONTEXT];\n if (!context) return null;\n return context.constructor ? getComponentDef(context.constructor) : null;\n}\nfunction isHostComponentStandalone(lView) {\n !ngDevMode && throwError('Must never be called in production mode');\n const componentDef = getDeclarationComponentDef(lView);\n return !!componentDef?.standalone;\n}\nfunction getTemplateLocationDetails(lView) {\n !ngDevMode && throwError('Must never be called in production mode');\n const hostComponentDef = getDeclarationComponentDef(lView);\n const componentClassName = hostComponentDef?.type?.name;\n return componentClassName ? ` (used in the '${componentClassName}' component template)` : '';\n}\nconst KNOWN_CONTROL_FLOW_DIRECTIVES = /*#__PURE__*/new Map([['ngIf', 'NgIf'], ['ngFor', 'NgFor'], ['ngSwitchCase', 'NgSwitchCase'], ['ngSwitchDefault', 'NgSwitchDefault']]);\nfunction matchingSchemas(schemas, tagName) {\n if (schemas !== null) {\n for (let i = 0; i < schemas.length; i++) {\n const schema = schemas[i];\n if (schema === NO_ERRORS_SCHEMA || schema === CUSTOM_ELEMENTS_SCHEMA && tagName && tagName.indexOf('-') > -1) {\n return true;\n }\n }\n }\n return false;\n}\nlet policy$1;\nfunction getPolicy$1() {\n if (policy$1 === undefined) {\n policy$1 = null;\n if (_global.trustedTypes) {\n try {\n policy$1 = _global.trustedTypes.createPolicy('angular', {\n createHTML: s => s,\n createScript: s => s,\n createScriptURL: s => s\n });\n } catch {}\n }\n }\n return policy$1;\n}\nfunction trustedHTMLFromString(html) {\n return getPolicy$1()?.createHTML(html) || html;\n}\nfunction trustedScriptURLFromString(url) {\n return getPolicy$1()?.createScriptURL(url) || url;\n}\nlet policy;\nfunction getPolicy() {\n if (policy === undefined) {\n policy = null;\n if (_global.trustedTypes) {\n try {\n policy = _global.trustedTypes.createPolicy('angular#unsafe-bypass', {\n createHTML: s => s,\n createScript: s => s,\n createScriptURL: s => s\n });\n } catch {}\n }\n }\n return policy;\n}\nfunction trustedHTMLFromStringBypass(html) {\n return getPolicy()?.createHTML(html) || html;\n}\nfunction trustedScriptFromStringBypass(script) {\n return getPolicy()?.createScript(script) || script;\n}\nfunction trustedScriptURLFromStringBypass(url) {\n return getPolicy()?.createScriptURL(url) || url;\n}\nclass SafeValueImpl {\n changingThisBreaksApplicationSecurity;\n constructor(changingThisBreaksApplicationSecurity) {\n this.changingThisBreaksApplicationSecurity = changingThisBreaksApplicationSecurity;\n }\n toString() {\n return `SafeValue must use [property]=binding: ${this.changingThisBreaksApplicationSecurity}` + ` (see ${XSS_SECURITY_URL})`;\n }\n}\nclass SafeHtmlImpl extends SafeValueImpl {\n getTypeName() {\n return \"HTML\";\n }\n}\nclass SafeStyleImpl extends SafeValueImpl {\n getTypeName() {\n return \"Style\";\n }\n}\nclass SafeScriptImpl extends SafeValueImpl {\n getTypeName() {\n return \"Script\";\n }\n}\nclass SafeUrlImpl extends SafeValueImpl {\n getTypeName() {\n return \"URL\";\n }\n}\nclass SafeResourceUrlImpl extends SafeValueImpl {\n getTypeName() {\n return \"ResourceURL\";\n }\n}\nfunction unwrapSafeValue(value) {\n return value instanceof SafeValueImpl ? value.changingThisBreaksApplicationSecurity : value;\n}\nfunction allowSanitizationBypassAndThrow(value, type) {\n const actualType = getSanitizationBypassType(value);\n if (actualType != null && actualType !== type) {\n if (actualType === \"ResourceURL\" && type === \"URL\") return true;\n throw new Error(`Required a safe ${type}, got a ${actualType} (see ${XSS_SECURITY_URL})`);\n }\n return actualType === type;\n}\nfunction getSanitizationBypassType(value) {\n return value instanceof SafeValueImpl && value.getTypeName() || null;\n}\nfunction bypassSanitizationTrustHtml(trustedHtml) {\n return new SafeHtmlImpl(trustedHtml);\n}\nfunction bypassSanitizationTrustStyle(trustedStyle) {\n return new SafeStyleImpl(trustedStyle);\n}\nfunction bypassSanitizationTrustScript(trustedScript) {\n return new SafeScriptImpl(trustedScript);\n}\nfunction bypassSanitizationTrustUrl(trustedUrl) {\n return new SafeUrlImpl(trustedUrl);\n}\nfunction bypassSanitizationTrustResourceUrl(trustedResourceUrl) {\n return new SafeResourceUrlImpl(trustedResourceUrl);\n}\nfunction getInertBodyHelper(defaultDoc) {\n const inertDocumentHelper = new InertDocumentHelper(defaultDoc);\n return isDOMParserAvailable() ? new DOMParserHelper(inertDocumentHelper) : inertDocumentHelper;\n}\nclass DOMParserHelper {\n inertDocumentHelper;\n constructor(inertDocumentHelper) {\n this.inertDocumentHelper = inertDocumentHelper;\n }\n getInertBodyElement(html) {\n html = '' + html;\n try {\n const body = new window.DOMParser().parseFromString(trustedHTMLFromString(html), 'text/html').body;\n if (body === null) {\n return this.inertDocumentHelper.getInertBodyElement(html);\n }\n body.firstChild?.remove();\n return body;\n } catch {\n return null;\n }\n }\n}\nclass InertDocumentHelper {\n defaultDoc;\n inertDocument;\n constructor(defaultDoc) {\n this.defaultDoc = defaultDoc;\n this.inertDocument = this.defaultDoc.implementation.createHTMLDocument('sanitization-inert');\n }\n getInertBodyElement(html) {\n const templateEl = this.inertDocument.createElement('template');\n templateEl.innerHTML = trustedHTMLFromString(html);\n return templateEl;\n }\n}\nfunction isDOMParserAvailable() {\n try {\n return !!new window.DOMParser().parseFromString(trustedHTMLFromString(''), 'text/html');\n } catch {\n return false;\n }\n}\nconst SAFE_URL_PATTERN = /^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:\\/?#]*(?:[\\/?#]|$))/i;\nfunction _sanitizeUrl(url) {\n url = String(url);\n if (url.match(SAFE_URL_PATTERN)) return url;\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n console.warn(`WARNING: sanitizing unsafe URL value ${url} (see ${XSS_SECURITY_URL})`);\n }\n return 'unsafe:' + url;\n}\nfunction tagSet(tags) {\n const res = {};\n for (const t of tags.split(',')) res[t] = true;\n return res;\n}\nfunction merge(...sets) {\n const res = {};\n for (const s of sets) {\n for (const v in s) {\n if (s.hasOwnProperty(v)) res[v] = true;\n }\n }\n return res;\n}\nconst VOID_ELEMENTS = /*#__PURE__*/tagSet('area,br,col,hr,img,wbr');\nconst OPTIONAL_END_TAG_BLOCK_ELEMENTS = /*#__PURE__*/tagSet('colgroup,dd,dt,li,p,tbody,td,tfoot,th,thead,tr');\nconst OPTIONAL_END_TAG_INLINE_ELEMENTS = /*#__PURE__*/tagSet('rp,rt');\nconst OPTIONAL_END_TAG_ELEMENTS = /*#__PURE__*/merge(OPTIONAL_END_TAG_INLINE_ELEMENTS, OPTIONAL_END_TAG_BLOCK_ELEMENTS);\nconst BLOCK_ELEMENTS = /*#__PURE__*/merge(OPTIONAL_END_TAG_BLOCK_ELEMENTS, /*#__PURE__*/tagSet('address,article,' + 'aside,blockquote,caption,center,del,details,dialog,dir,div,dl,figure,figcaption,footer,h1,h2,h3,h4,h5,' + 'h6,header,hgroup,hr,ins,main,map,menu,nav,ol,pre,section,summary,table,ul'));\nconst INLINE_ELEMENTS = /*#__PURE__*/merge(OPTIONAL_END_TAG_INLINE_ELEMENTS, /*#__PURE__*/tagSet('a,abbr,acronym,audio,b,' + 'bdi,bdo,big,br,cite,code,del,dfn,em,font,i,img,ins,kbd,label,map,mark,picture,q,ruby,rp,rt,s,' + 'samp,small,source,span,strike,strong,sub,sup,time,track,tt,u,var,video'));\nconst VALID_ELEMENTS = /*#__PURE__*/merge(VOID_ELEMENTS, BLOCK_ELEMENTS, INLINE_ELEMENTS, OPTIONAL_END_TAG_ELEMENTS);\nconst URI_ATTRS = /*#__PURE__*/tagSet('background,cite,href,itemtype,longdesc,poster,src,xlink:href');\nconst HTML_ATTRS = /*#__PURE__*/tagSet('abbr,accesskey,align,alt,autoplay,axis,bgcolor,border,cellpadding,cellspacing,class,clear,color,cols,colspan,' + 'compact,controls,coords,datetime,default,dir,download,face,headers,height,hidden,hreflang,hspace,' + 'ismap,itemscope,itemprop,kind,label,lang,language,loop,media,muted,nohref,nowrap,open,preload,rel,rev,role,rows,rowspan,rules,' + 'scope,scrolling,shape,size,sizes,span,srclang,srcset,start,summary,tabindex,target,title,translate,type,usemap,' + 'valign,value,vspace,width');\nconst ARIA_ATTRS = /*#__PURE__*/tagSet('aria-activedescendant,aria-atomic,aria-autocomplete,aria-busy,aria-checked,aria-colcount,aria-colindex,' + 'aria-colspan,aria-controls,aria-current,aria-describedby,aria-details,aria-disabled,aria-dropeffect,' + 'aria-errormessage,aria-expanded,aria-flowto,aria-grabbed,aria-haspopup,aria-hidden,aria-invalid,' + 'aria-keyshortcuts,aria-label,aria-labelledby,aria-level,aria-live,aria-modal,aria-multiline,' + 'aria-multiselectable,aria-orientation,aria-owns,aria-placeholder,aria-posinset,aria-pressed,aria-readonly,' + 'aria-relevant,aria-required,aria-roledescription,aria-rowcount,aria-rowindex,aria-rowspan,aria-selected,' + 'aria-setsize,aria-sort,aria-valuemax,aria-valuemin,aria-valuenow,aria-valuetext');\nconst VALID_ATTRS = /*#__PURE__*/merge(URI_ATTRS, HTML_ATTRS, ARIA_ATTRS);\nconst SKIP_TRAVERSING_CONTENT_IF_INVALID_ELEMENTS = /*#__PURE__*/tagSet('script,style,template');\nconst SENSITIVE_ATTRS = /*#__PURE__*/merge(URI_ATTRS, /*#__PURE__*/tagSet('action,formaction,data,codebase'));\nclass SanitizingHtmlSerializer {\n sanitizedSomething = false;\n buf = [];\n sanitizeChildren(el) {\n let current = el.firstChild;\n let traverseContent = true;\n let parentNodes = [];\n while (current) {\n if (current.nodeType === Node.ELEMENT_NODE) {\n traverseContent = this.startElement(current);\n } else if (current.nodeType === Node.TEXT_NODE) {\n this.chars(current.nodeValue);\n } else {\n this.sanitizedSomething = true;\n }\n if (traverseContent && current.firstChild) {\n parentNodes.push(current);\n current = getFirstChild(current);\n continue;\n }\n while (current) {\n if (current.nodeType === Node.ELEMENT_NODE) {\n this.endElement(current);\n }\n let next = getNextSibling(current);\n if (next) {\n current = next;\n break;\n }\n current = parentNodes.pop();\n }\n }\n return this.buf.join('');\n }\n startElement(element) {\n const tagName = getNodeName(element).toLowerCase();\n if (!VALID_ELEMENTS.hasOwnProperty(tagName)) {\n this.sanitizedSomething = true;\n return !SKIP_TRAVERSING_CONTENT_IF_INVALID_ELEMENTS.hasOwnProperty(tagName);\n }\n this.buf.push('<');\n this.buf.push(tagName);\n const elAttrs = element.attributes;\n for (let i = 0; i < elAttrs.length; i++) {\n const elAttr = elAttrs.item(i);\n const attrName = elAttr.name;\n const lower = attrName.toLowerCase();\n if (!VALID_ATTRS.hasOwnProperty(lower)) {\n this.sanitizedSomething = true;\n continue;\n }\n let value = elAttr.value;\n if (URI_ATTRS[lower]) value = _sanitizeUrl(value);\n this.buf.push(' ', attrName, '=\"', encodeEntities(value), '\"');\n }\n this.buf.push('>');\n return true;\n }\n endElement(current) {\n const tagName = getNodeName(current).toLowerCase();\n if (VALID_ELEMENTS.hasOwnProperty(tagName) && !VOID_ELEMENTS.hasOwnProperty(tagName)) {\n this.buf.push('');\n }\n }\n chars(chars) {\n this.buf.push(encodeEntities(chars));\n }\n}\nfunction isClobberedElement(parentNode, childNode) {\n return (parentNode.compareDocumentPosition(childNode) & Node.DOCUMENT_POSITION_CONTAINED_BY) !== Node.DOCUMENT_POSITION_CONTAINED_BY;\n}\nfunction getNextSibling(node) {\n const nextSibling = node.nextSibling;\n if (nextSibling && node !== nextSibling.previousSibling) {\n throw clobberedElementError(nextSibling);\n }\n return nextSibling;\n}\nfunction getFirstChild(node) {\n const firstChild = node.firstChild;\n if (firstChild && isClobberedElement(node, firstChild)) {\n throw clobberedElementError(firstChild);\n }\n return firstChild;\n}\nfunction getNodeName(node) {\n const nodeName = node.nodeName;\n return typeof nodeName === 'string' ? nodeName : 'FORM';\n}\nfunction clobberedElementError(node) {\n return new Error(`Failed to sanitize html because the element is clobbered: ${node.outerHTML}`);\n}\nconst SURROGATE_PAIR_REGEXP = /[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g;\nconst NON_ALPHANUMERIC_REGEXP = /([^\\#-~ |!])/g;\nfunction encodeEntities(value) {\n return value.replace(/&/g, '&').replace(SURROGATE_PAIR_REGEXP, function (match) {\n const hi = match.charCodeAt(0);\n const low = match.charCodeAt(1);\n return '&#' + ((hi - 0xd800) * 0x400 + (low - 0xdc00) + 0x10000) + ';';\n }).replace(NON_ALPHANUMERIC_REGEXP, function (match) {\n return '&#' + match.charCodeAt(0) + ';';\n }).replace(//g, '>');\n}\nlet inertBodyHelper;\nfunction _sanitizeHtml(defaultDoc, unsafeHtmlInput) {\n let inertBodyElement = null;\n try {\n inertBodyHelper = inertBodyHelper || getInertBodyHelper(defaultDoc);\n let unsafeHtml = unsafeHtmlInput ? String(unsafeHtmlInput) : '';\n inertBodyElement = inertBodyHelper.getInertBodyElement(unsafeHtml);\n let mXSSAttempts = 5;\n let parsedHtml = unsafeHtml;\n do {\n if (mXSSAttempts === 0) {\n throw new Error('Failed to sanitize html because the input is unstable');\n }\n mXSSAttempts--;\n unsafeHtml = parsedHtml;\n parsedHtml = inertBodyElement.innerHTML;\n inertBodyElement = inertBodyHelper.getInertBodyElement(unsafeHtml);\n } while (unsafeHtml !== parsedHtml);\n const sanitizer = new SanitizingHtmlSerializer();\n const safeHtml = sanitizer.sanitizeChildren(getTemplateContent(inertBodyElement) || inertBodyElement);\n if ((typeof ngDevMode === 'undefined' || ngDevMode) && sanitizer.sanitizedSomething) {\n console.warn(`WARNING: sanitizing HTML stripped some content, see ${XSS_SECURITY_URL}`);\n }\n return trustedHTMLFromString(safeHtml);\n } finally {\n if (inertBodyElement) {\n const parent = getTemplateContent(inertBodyElement) || inertBodyElement;\n while (parent.firstChild) {\n parent.firstChild.remove();\n }\n }\n }\n}\nfunction getTemplateContent(el) {\n return 'content' in el && isTemplateElement(el) ? el.content : null;\n}\nfunction isTemplateElement(el) {\n return el.nodeType === Node.ELEMENT_NODE && el.nodeName === 'TEMPLATE';\n}\nconst COMMENT_DISALLOWED = /^>|^->||--!>|)/g;\nconst COMMENT_DELIMITER_ESCAPED = '\\u200B$1\\u200B';\nfunction escapeCommentText(value) {\n return value.replace(COMMENT_DISALLOWED, text => text.replace(COMMENT_DELIMITER, COMMENT_DELIMITER_ESCAPED));\n}\nfunction createTextNode(renderer, value) {\n return renderer.createText(value);\n}\nfunction updateTextNode(renderer, rNode, value) {\n renderer.setValue(rNode, value);\n}\nfunction createCommentNode(renderer, value) {\n return renderer.createComment(escapeCommentText(value));\n}\nfunction createElementNode(renderer, name, namespace) {\n return renderer.createElement(name, namespace);\n}\nfunction nativeInsertBefore(renderer, parent, child, beforeNode, isMove) {\n renderer.insertBefore(parent, child, beforeNode, isMove);\n}\nfunction nativeAppendChild(renderer, parent, child) {\n ngDevMode && assertDefined(parent, 'parent node must be defined');\n renderer.appendChild(parent, child);\n}\nfunction nativeAppendOrInsertBefore(renderer, parent, child, beforeNode, isMove) {\n if (beforeNode !== null) {\n nativeInsertBefore(renderer, parent, child, beforeNode, isMove);\n } else {\n nativeAppendChild(renderer, parent, child);\n }\n}\nfunction nativeRemoveNode(renderer, rNode, isHostElement, requireSynchronousElementRemoval) {\n renderer.removeChild(null, rNode, isHostElement, requireSynchronousElementRemoval);\n}\nfunction clearElementContents(rElement) {\n rElement.textContent = '';\n}\nfunction writeDirectStyle(renderer, element, newValue) {\n ngDevMode && assertString(newValue, \"'newValue' should be a string\");\n renderer.setAttribute(element, 'style', newValue);\n}\nfunction writeDirectClass(renderer, element, newValue) {\n ngDevMode && assertString(newValue, \"'newValue' should be a string\");\n if (newValue === '') {\n renderer.removeAttribute(element, 'class');\n } else {\n renderer.setAttribute(element, 'class', newValue);\n }\n}\nfunction setupStaticAttributes(renderer, element, tNode) {\n const {\n mergedAttrs,\n classes,\n styles\n } = tNode;\n if (mergedAttrs !== null) {\n setUpAttributes(renderer, element, mergedAttrs);\n }\n if (classes !== null) {\n writeDirectClass(renderer, element, classes);\n }\n if (styles !== null) {\n writeDirectStyle(renderer, element, styles);\n }\n}\nfunction enforceIframeSecurity(iframe) {\n const lView = getLView();\n iframe.src = '';\n iframe.srcdoc = trustedHTMLFromString('');\n nativeRemoveNode(lView[RENDERER], iframe);\n}\nvar SecurityContext = /*#__PURE__*/function (SecurityContext) {\n SecurityContext[SecurityContext[\"NONE\"] = 0] = \"NONE\";\n SecurityContext[SecurityContext[\"HTML\"] = 1] = \"HTML\";\n SecurityContext[SecurityContext[\"STYLE\"] = 2] = \"STYLE\";\n SecurityContext[SecurityContext[\"SCRIPT\"] = 3] = \"SCRIPT\";\n SecurityContext[SecurityContext[\"URL\"] = 4] = \"URL\";\n SecurityContext[SecurityContext[\"RESOURCE_URL\"] = 5] = \"RESOURCE_URL\";\n return SecurityContext;\n}(SecurityContext || {});\nfunction ɵɵsanitizeHtml(unsafeHtml) {\n const sanitizer = getSanitizer();\n if (sanitizer) {\n return trustedHTMLFromStringBypass(sanitizer.sanitize(SecurityContext.HTML, unsafeHtml) || '');\n }\n if (allowSanitizationBypassAndThrow(unsafeHtml, \"HTML\")) {\n return trustedHTMLFromStringBypass(unwrapSafeValue(unsafeHtml));\n }\n return _sanitizeHtml(getDocument(), renderStringify(unsafeHtml));\n}\nfunction ɵɵsanitizeStyle(unsafeStyle) {\n const sanitizer = getSanitizer();\n if (sanitizer) {\n return sanitizer.sanitize(SecurityContext.STYLE, unsafeStyle) || '';\n }\n if (allowSanitizationBypassAndThrow(unsafeStyle, \"Style\")) {\n return unwrapSafeValue(unsafeStyle);\n }\n return renderStringify(unsafeStyle);\n}\nfunction ɵɵsanitizeUrl(unsafeUrl) {\n const sanitizer = getSanitizer();\n if (sanitizer) {\n return sanitizer.sanitize(SecurityContext.URL, unsafeUrl) || '';\n }\n if (allowSanitizationBypassAndThrow(unsafeUrl, \"URL\")) {\n return unwrapSafeValue(unsafeUrl);\n }\n return _sanitizeUrl(renderStringify(unsafeUrl));\n}\nfunction ɵɵsanitizeResourceUrl(unsafeResourceUrl) {\n const sanitizer = getSanitizer();\n if (sanitizer) {\n return trustedScriptURLFromStringBypass(sanitizer.sanitize(SecurityContext.RESOURCE_URL, unsafeResourceUrl) || '');\n }\n if (allowSanitizationBypassAndThrow(unsafeResourceUrl, \"ResourceURL\")) {\n return trustedScriptURLFromStringBypass(unwrapSafeValue(unsafeResourceUrl));\n }\n throw new RuntimeError(904, ngDevMode && `unsafe value used in a resource URL context (see ${XSS_SECURITY_URL})`);\n}\nfunction ɵɵsanitizeScript(unsafeScript) {\n const sanitizer = getSanitizer();\n if (sanitizer) {\n return trustedScriptFromStringBypass(sanitizer.sanitize(SecurityContext.SCRIPT, unsafeScript) || '');\n }\n if (allowSanitizationBypassAndThrow(unsafeScript, \"Script\")) {\n return trustedScriptFromStringBypass(unwrapSafeValue(unsafeScript));\n }\n throw new RuntimeError(905, ngDevMode && 'unsafe value used in a script context');\n}\nfunction ɵɵtrustConstantHtml(html) {\n if (ngDevMode && (!Array.isArray(html) || !Array.isArray(html.raw) || html.length !== 1)) {\n throw new Error(`Unexpected interpolation in trusted HTML constant: ${html.join('?')}`);\n }\n return trustedHTMLFromString(html[0]);\n}\nfunction ɵɵtrustConstantResourceUrl(url) {\n if (ngDevMode && (!Array.isArray(url) || !Array.isArray(url.raw) || url.length !== 1)) {\n throw new Error(`Unexpected interpolation in trusted URL constant: ${url.join('?')}`);\n }\n return trustedScriptURLFromString(url[0]);\n}\nconst SRC_RESOURCE_TAGS = /*#__PURE__*/new Set(['embed', 'frame', 'iframe', 'media', 'script']);\nconst HREF_RESOURCE_TAGS = /*#__PURE__*/new Set(['base', 'link', 'script']);\nfunction getUrlSanitizer(tag, prop) {\n const isResource = prop === 'src' && SRC_RESOURCE_TAGS.has(tag) || prop === 'href' && HREF_RESOURCE_TAGS.has(tag) || prop === 'xlink:href' && tag === 'script';\n return isResource ? ɵɵsanitizeResourceUrl : ɵɵsanitizeUrl;\n}\nfunction ɵɵsanitizeUrlOrResourceUrl(unsafeUrl, tag, prop) {\n return getUrlSanitizer(tag, prop)(unsafeUrl);\n}\nfunction validateAgainstEventProperties(name) {\n if (name.toLowerCase().startsWith('on')) {\n const errorMessage = `Binding to event property '${name}' is disallowed for security reasons, ` + `please use (${name.slice(2)})=...` + `\\nIf '${name}' is a directive input, make sure the directive is imported by the` + ` current module.`;\n throw new RuntimeError(306, errorMessage);\n }\n}\nfunction validateAgainstEventAttributes(name) {\n if (name.toLowerCase().startsWith('on')) {\n const errorMessage = `Binding to event attribute '${name}' is disallowed for security reasons, ` + `please use (${name.slice(2)})=...`;\n throw new RuntimeError(306, errorMessage);\n }\n}\nfunction getSanitizer() {\n const lView = getLView();\n return lView && lView[ENVIRONMENT].sanitizer;\n}\nconst attributeName = /*#__PURE__*/new Set(['attributename']);\nconst SECURITY_SENSITIVE_ELEMENTS = {\n 'iframe': /*#__PURE__*/new Set(['sandbox', 'allow', 'allowfullscreen', 'referrerpolicy', 'csp', 'fetchpriority']),\n 'animate': attributeName,\n 'set': attributeName,\n 'animatemotion': attributeName,\n 'animatetransform': attributeName\n};\nfunction ɵɵvalidateAttribute(value, tagName, attributeName) {\n const lowerCaseTagName = tagName.toLowerCase();\n const lowerCaseAttrName = attributeName.toLowerCase();\n if (!SECURITY_SENSITIVE_ELEMENTS[lowerCaseTagName]?.has(lowerCaseAttrName)) {\n return value;\n }\n const tNode = getSelectedTNode();\n if (tNode.type !== 2) {\n return value;\n }\n const lView = getLView();\n if (lowerCaseTagName === 'iframe') {\n const element = getNativeByTNode(tNode, lView);\n enforceIframeSecurity(element);\n }\n const errorMessage = ngDevMode && `Angular has detected that the \\`${attributeName}\\` was applied ` + `as a binding to the <${tagName}> element${getTemplateLocationDetails(lView)}. ` + `For security reasons, the \\`${attributeName}\\` can be set on the <${tagName}> element ` + `as a static attribute only. \\n` + `To fix this, switch the \\`${attributeName}\\` binding to a static attribute ` + `in a template or in host bindings section.`;\n throw new RuntimeError(-910, errorMessage);\n}\nconst NG_REFLECT_ATTRS_FLAG_DEFAULT = false;\nconst NG_REFLECT_ATTRS_FLAG = /*#__PURE__*/new InjectionToken(typeof ngDevMode === 'undefined' || ngDevMode ? 'NG_REFLECT_FLAG' : '', {\n factory: () => NG_REFLECT_ATTRS_FLAG_DEFAULT\n});\nfunction provideNgReflectAttributes() {\n const providers = typeof ngDevMode === 'undefined' || ngDevMode ? [{\n provide: NG_REFLECT_ATTRS_FLAG,\n useValue: true\n }] : [];\n return makeEnvironmentProviders(providers);\n}\nfunction normalizeDebugBindingName(name) {\n name = camelCaseToDashCase(name.replace(/[$@]/g, '_'));\n return `ng-reflect-${name}`;\n}\nconst CAMEL_CASE_REGEXP = /([A-Z])/g;\nfunction camelCaseToDashCase(input) {\n return input.replace(CAMEL_CASE_REGEXP, (...m) => '-' + m[1].toLowerCase());\n}\nfunction normalizeDebugBindingValue(value) {\n try {\n return value != null ? value.toString().slice(0, 30) : value;\n } catch (e) {\n return '[ERROR] Exception while trying to serialize the value';\n }\n}\nfunction ɵɵresolveWindow(element) {\n return element.ownerDocument.defaultView;\n}\nfunction ɵɵresolveDocument(element) {\n return element.ownerDocument;\n}\nfunction ɵɵresolveBody(element) {\n return element.ownerDocument.body;\n}\nconst INTERPOLATION_DELIMITER = `�`;\nfunction maybeUnwrapFn(value) {\n if (value instanceof Function) {\n return value();\n } else {\n return value;\n }\n}\nconst VALUE_STRING_LENGTH_LIMIT = 200;\nfunction assertStandaloneComponentType(type) {\n assertComponentDef(type);\n const componentDef = getComponentDef(type);\n if (!componentDef.standalone) {\n throw new RuntimeError(907, `The ${stringifyForError(type)} component is not marked as standalone, ` + `but Angular expects to have a standalone component here. ` + `Please make sure the ${stringifyForError(type)} component does not have ` + `the \\`standalone: false\\` flag in the decorator.`);\n }\n}\nfunction assertComponentDef(type) {\n if (!getComponentDef(type)) {\n throw new RuntimeError(906, `The ${stringifyForError(type)} is not an Angular component, ` + `make sure it has the \\`@Component\\` decorator.`);\n }\n}\nfunction throwMultipleComponentError(tNode, first, second) {\n throw new RuntimeError(-300, `Multiple components match node with tagname ${tNode.value}: ` + `${stringifyForError(first)} and ` + `${stringifyForError(second)}`);\n}\nfunction throwErrorIfNoChangesMode(creationMode, oldValue, currValue, propName, lView) {\n const hostComponentDef = getDeclarationComponentDef(lView);\n const componentClassName = hostComponentDef?.type?.name;\n const field = propName ? ` for '${propName}'` : '';\n let msg = `ExpressionChangedAfterItHasBeenCheckedError: Expression has changed after it was checked. Previous value${field}: '${formatValue(oldValue)}'. Current value: '${formatValue(currValue)}'.${componentClassName ? ` Expression location: ${componentClassName} component` : ''}`;\n if (creationMode) {\n msg += ` It seems like the view has been created after its parent and its children have been dirty checked.` + ` Has it been created in a change detection hook?`;\n }\n throw new RuntimeError(-100, msg);\n}\nfunction formatValue(value) {\n let strValue = String(value);\n try {\n if (Array.isArray(value) || strValue === '[object Object]') {\n strValue = JSON.stringify(value);\n }\n } catch (error) {}\n return strValue.length > VALUE_STRING_LENGTH_LIMIT ? strValue.substring(0, VALUE_STRING_LENGTH_LIMIT) + '…' : strValue;\n}\nfunction constructDetailsForInterpolation(lView, rootIndex, expressionIndex, meta, changedValue) {\n const [propName, prefix, ...chunks] = meta.split(INTERPOLATION_DELIMITER);\n let oldValue = prefix,\n newValue = prefix;\n for (let i = 0; i < chunks.length; i++) {\n const slotIdx = rootIndex + i;\n oldValue += `${lView[slotIdx]}${chunks[i]}`;\n newValue += `${slotIdx === expressionIndex ? changedValue : lView[slotIdx]}${chunks[i]}`;\n }\n return {\n propName,\n oldValue,\n newValue\n };\n}\nfunction getExpressionChangedErrorDetails(lView, bindingIndex, oldValue, newValue) {\n const tData = lView[TVIEW].data;\n const metadata = tData[bindingIndex];\n if (typeof metadata === 'string') {\n if (metadata.indexOf(INTERPOLATION_DELIMITER) > -1) {\n return constructDetailsForInterpolation(lView, bindingIndex, bindingIndex, metadata, newValue);\n }\n return {\n propName: metadata,\n oldValue,\n newValue\n };\n }\n if (metadata === null) {\n let idx = bindingIndex - 1;\n while (typeof tData[idx] !== 'string' && tData[idx + 1] === null) {\n idx--;\n }\n const meta = tData[idx];\n if (typeof meta === 'string') {\n const matches = meta.match(new RegExp(INTERPOLATION_DELIMITER, 'g'));\n if (matches && matches.length - 1 > bindingIndex - idx) {\n return constructDetailsForInterpolation(lView, idx, bindingIndex, meta, newValue);\n }\n }\n }\n return {\n propName: undefined,\n oldValue,\n newValue\n };\n}\nfunction classIndexOf(className, classToSearch, startingIndex) {\n ngDevMode && assertNotEqual(classToSearch, '', 'can not look for \"\" string.');\n let end = className.length;\n while (true) {\n const foundIndex = className.indexOf(classToSearch, startingIndex);\n if (foundIndex === -1) return foundIndex;\n if (foundIndex === 0 || className.charCodeAt(foundIndex - 1) <= 32) {\n const length = classToSearch.length;\n if (foundIndex + length === end || className.charCodeAt(foundIndex + length) <= 32) {\n return foundIndex;\n }\n }\n startingIndex = foundIndex + 1;\n }\n}\nconst NG_TEMPLATE_SELECTOR = 'ng-template';\nfunction isCssClassMatching(tNode, attrs, cssClassToMatch, isProjectionMode) {\n ngDevMode && assertEqual(cssClassToMatch, cssClassToMatch.toLowerCase(), 'Class name expected to be lowercase.');\n let i = 0;\n if (isProjectionMode) {\n for (; i < attrs.length && typeof attrs[i] === 'string'; i += 2) {\n if (attrs[i] === 'class' && classIndexOf(attrs[i + 1].toLowerCase(), cssClassToMatch, 0) !== -1) {\n return true;\n }\n }\n } else if (isInlineTemplate(tNode)) {\n return false;\n }\n i = attrs.indexOf(1, i);\n if (i > -1) {\n let item;\n while (++i < attrs.length && typeof (item = attrs[i]) === 'string') {\n if (item.toLowerCase() === cssClassToMatch) {\n return true;\n }\n }\n }\n return false;\n}\nfunction isInlineTemplate(tNode) {\n return tNode.type === 4 && tNode.value !== NG_TEMPLATE_SELECTOR;\n}\nfunction hasTagAndTypeMatch(tNode, currentSelector, isProjectionMode) {\n const tagNameToCompare = tNode.type === 4 && !isProjectionMode ? NG_TEMPLATE_SELECTOR : tNode.value;\n return currentSelector === tagNameToCompare;\n}\nfunction isNodeMatchingSelector(tNode, selector, isProjectionMode) {\n ngDevMode && assertDefined(selector[0], 'Selector should have a tag name');\n let mode = 4;\n const nodeAttrs = tNode.attrs;\n const nameOnlyMarkerIdx = nodeAttrs !== null ? getNameOnlyMarkerIndex(nodeAttrs) : 0;\n let skipToNextSelector = false;\n for (let i = 0; i < selector.length; i++) {\n const current = selector[i];\n if (typeof current === 'number') {\n if (!skipToNextSelector && !isPositive(mode) && !isPositive(current)) {\n return false;\n }\n if (skipToNextSelector && isPositive(current)) continue;\n skipToNextSelector = false;\n mode = current | mode & 1;\n continue;\n }\n if (skipToNextSelector) continue;\n if (mode & 4) {\n mode = 2 | mode & 1;\n if (current !== '' && !hasTagAndTypeMatch(tNode, current, isProjectionMode) || current === '' && selector.length === 1) {\n if (isPositive(mode)) return false;\n skipToNextSelector = true;\n }\n } else if (mode & 8) {\n if (nodeAttrs === null || !isCssClassMatching(tNode, nodeAttrs, current, isProjectionMode)) {\n if (isPositive(mode)) return false;\n skipToNextSelector = true;\n }\n } else {\n const selectorAttrValue = selector[++i];\n const attrIndexInNode = findAttrIndexInNode(current, nodeAttrs, isInlineTemplate(tNode), isProjectionMode);\n if (attrIndexInNode === -1) {\n if (isPositive(mode)) return false;\n skipToNextSelector = true;\n continue;\n }\n if (selectorAttrValue !== '') {\n let nodeAttrValue;\n if (attrIndexInNode > nameOnlyMarkerIdx) {\n nodeAttrValue = '';\n } else {\n ngDevMode && assertNotEqual(nodeAttrs[attrIndexInNode], 0, 'We do not match directives on namespaced attributes');\n nodeAttrValue = nodeAttrs[attrIndexInNode + 1].toLowerCase();\n }\n if (mode & 2 && selectorAttrValue !== nodeAttrValue) {\n if (isPositive(mode)) return false;\n skipToNextSelector = true;\n }\n }\n }\n }\n return isPositive(mode) || skipToNextSelector;\n}\nfunction isPositive(mode) {\n return (mode & 1) === 0;\n}\nfunction findAttrIndexInNode(name, attrs, isInlineTemplate, isProjectionMode) {\n if (attrs === null) return -1;\n let i = 0;\n if (isProjectionMode || !isInlineTemplate) {\n let bindingsMode = false;\n while (i < attrs.length) {\n const maybeAttrName = attrs[i];\n if (maybeAttrName === name) {\n return i;\n } else if (maybeAttrName === 3 || maybeAttrName === 6) {\n bindingsMode = true;\n } else if (maybeAttrName === 1 || maybeAttrName === 2) {\n let value = attrs[++i];\n while (typeof value === 'string') {\n value = attrs[++i];\n }\n continue;\n } else if (maybeAttrName === 4) {\n break;\n } else if (maybeAttrName === 0) {\n i += 4;\n continue;\n }\n i += bindingsMode ? 1 : 2;\n }\n return -1;\n } else {\n return matchTemplateAttribute(attrs, name);\n }\n}\nfunction isNodeMatchingSelectorList(tNode, selector, isProjectionMode = false) {\n for (let i = 0; i < selector.length; i++) {\n if (isNodeMatchingSelector(tNode, selector[i], isProjectionMode)) {\n return true;\n }\n }\n return false;\n}\nfunction getProjectAsAttrValue(tNode) {\n const nodeAttrs = tNode.attrs;\n if (nodeAttrs != null) {\n const ngProjectAsAttrIdx = nodeAttrs.indexOf(5);\n if ((ngProjectAsAttrIdx & 1) === 0) {\n return nodeAttrs[ngProjectAsAttrIdx + 1];\n }\n }\n return null;\n}\nfunction getNameOnlyMarkerIndex(nodeAttrs) {\n for (let i = 0; i < nodeAttrs.length; i++) {\n const nodeAttr = nodeAttrs[i];\n if (isNameOnlyAttributeMarker(nodeAttr)) {\n return i;\n }\n }\n return nodeAttrs.length;\n}\nfunction matchTemplateAttribute(attrs, name) {\n let i = attrs.indexOf(4);\n if (i > -1) {\n i++;\n while (i < attrs.length) {\n const attr = attrs[i];\n if (typeof attr === 'number') return -1;\n if (attr === name) return i;\n i++;\n }\n }\n return -1;\n}\nfunction isSelectorInSelectorList(selector, list) {\n selectorListLoop: for (let i = 0; i < list.length; i++) {\n const currentSelectorInList = list[i];\n if (selector.length !== currentSelectorInList.length) {\n continue;\n }\n for (let j = 0; j < selector.length; j++) {\n if (selector[j] !== currentSelectorInList[j]) {\n continue selectorListLoop;\n }\n }\n return true;\n }\n return false;\n}\nfunction maybeWrapInNotSelector(isNegativeMode, chunk) {\n return isNegativeMode ? ':not(' + chunk.trim() + ')' : chunk;\n}\nfunction stringifyCSSSelector(selector) {\n let result = selector[0];\n let i = 1;\n let mode = 2;\n let currentChunk = '';\n let isNegativeMode = false;\n while (i < selector.length) {\n let valueOrMarker = selector[i];\n if (typeof valueOrMarker === 'string') {\n if (mode & 2) {\n const attrValue = selector[++i];\n currentChunk += '[' + valueOrMarker + (attrValue.length > 0 ? '=\"' + attrValue + '\"' : '') + ']';\n } else if (mode & 8) {\n currentChunk += '.' + valueOrMarker;\n } else if (mode & 4) {\n currentChunk += ' ' + valueOrMarker;\n }\n } else {\n if (currentChunk !== '' && !isPositive(valueOrMarker)) {\n result += maybeWrapInNotSelector(isNegativeMode, currentChunk);\n currentChunk = '';\n }\n mode = valueOrMarker;\n isNegativeMode = isNegativeMode || !isPositive(mode);\n }\n i++;\n }\n if (currentChunk !== '') {\n result += maybeWrapInNotSelector(isNegativeMode, currentChunk);\n }\n return result;\n}\nfunction stringifyCSSSelectorList(selectorList) {\n return selectorList.map(stringifyCSSSelector).join(',');\n}\nfunction extractAttrsAndClassesFromSelector(selector) {\n const attrs = [];\n const classes = [];\n let i = 1;\n let mode = 2;\n while (i < selector.length) {\n let valueOrMarker = selector[i];\n if (typeof valueOrMarker === 'string') {\n if (mode === 2) {\n if (valueOrMarker !== '') {\n attrs.push(valueOrMarker, selector[++i]);\n }\n } else if (mode === 8) {\n classes.push(valueOrMarker);\n }\n } else {\n if (!isPositive(mode)) break;\n mode = valueOrMarker;\n }\n i++;\n }\n if (classes.length) {\n attrs.push(1, ...classes);\n }\n return attrs;\n}\nconst NO_CHANGE = typeof ngDevMode === 'undefined' || ngDevMode ? {\n __brand__: 'NO_CHANGE'\n} : {};\nfunction createTView(type, declTNode, templateFn, decls, vars, directives, pipes, viewQuery, schemas, constsOrFactory, ssrId) {\n const bindingStartIndex = HEADER_OFFSET + decls;\n const initialViewLength = bindingStartIndex + vars;\n const blueprint = createViewBlueprint(bindingStartIndex, initialViewLength);\n const consts = typeof constsOrFactory === 'function' ? constsOrFactory() : constsOrFactory;\n const tView = blueprint[TVIEW] = {\n type: type,\n blueprint: blueprint,\n template: templateFn,\n queries: null,\n viewQuery: viewQuery,\n declTNode: declTNode,\n data: blueprint.slice().fill(null, bindingStartIndex),\n bindingStartIndex: bindingStartIndex,\n expandoStartIndex: initialViewLength,\n hostBindingOpCodes: null,\n firstCreatePass: true,\n firstUpdatePass: true,\n staticViewQueries: false,\n staticContentQueries: false,\n preOrderHooks: null,\n preOrderCheckHooks: null,\n contentHooks: null,\n contentCheckHooks: null,\n viewHooks: null,\n viewCheckHooks: null,\n destroyHooks: null,\n cleanup: null,\n contentQueries: null,\n components: null,\n directiveRegistry: typeof directives === 'function' ? directives() : directives,\n pipeRegistry: typeof pipes === 'function' ? pipes() : pipes,\n firstChild: null,\n schemas: schemas,\n consts: consts,\n incompleteFirstPass: false,\n ssrId\n };\n if (ngDevMode) {\n Object.seal(tView);\n }\n return tView;\n}\nfunction createViewBlueprint(bindingStartIndex, initialViewLength) {\n const blueprint = [];\n for (let i = 0; i < initialViewLength; i++) {\n blueprint.push(i < bindingStartIndex ? null : NO_CHANGE);\n }\n return blueprint;\n}\nfunction getOrCreateComponentTView(def) {\n const tView = def.tView;\n if (tView === null || tView.incompleteFirstPass) {\n const declTNode = null;\n return def.tView = createTView(1, declTNode, def.template, def.decls, def.vars, def.directiveDefs, def.pipeDefs, def.viewQuery, def.schemas, def.consts, def.id);\n }\n return tView;\n}\nfunction createLView(parentLView, tView, context, flags, host, tHostNode, environment, renderer, injector, embeddedViewInjector, hydrationInfo) {\n const lView = tView.blueprint.slice();\n lView[HOST] = host;\n lView[FLAGS] = flags | 4 | 128 | 8 | 64 | 1024;\n if (embeddedViewInjector !== null || parentLView && parentLView[FLAGS] & 2048) {\n lView[FLAGS] |= 2048;\n }\n resetPreOrderHookFlags(lView);\n ngDevMode && tView.declTNode && parentLView && assertTNodeForLView(tView.declTNode, parentLView);\n lView[PARENT] = lView[DECLARATION_VIEW] = parentLView;\n lView[CONTEXT] = context;\n lView[ENVIRONMENT] = environment || parentLView && parentLView[ENVIRONMENT];\n ngDevMode && assertDefined(lView[ENVIRONMENT], 'LViewEnvironment is required');\n lView[RENDERER] = renderer || parentLView && parentLView[RENDERER];\n ngDevMode && assertDefined(lView[RENDERER], 'Renderer is required');\n lView[INJECTOR] = injector || parentLView && parentLView[INJECTOR] || null;\n lView[T_HOST] = tHostNode;\n lView[ID] = getUniqueLViewId();\n lView[HYDRATION] = hydrationInfo;\n lView[EMBEDDED_VIEW_INJECTOR] = embeddedViewInjector;\n ngDevMode && assertEqual(tView.type == 2 ? parentLView !== null : true, true, 'Embedded views must have parentLView');\n lView[DECLARATION_COMPONENT_VIEW] = tView.type == 2 ? parentLView[DECLARATION_COMPONENT_VIEW] : lView;\n return lView;\n}\nfunction createComponentLView(lView, hostTNode, def) {\n const native = getNativeByTNode(hostTNode, lView);\n const tView = getOrCreateComponentTView(def);\n const rendererFactory = lView[ENVIRONMENT].rendererFactory;\n const componentView = addToEndOfViewTree(lView, createLView(lView, tView, null, getInitialLViewFlagsFromDef(def), native, hostTNode, null, rendererFactory.createRenderer(native, def), null, null, null));\n return lView[hostTNode.index] = componentView;\n}\nfunction getInitialLViewFlagsFromDef(def) {\n let flags = 16;\n if (def.signals) {\n flags = 4096;\n } else if (def.onPush) {\n flags = 64;\n }\n return flags;\n}\nfunction allocExpando(tView, lView, numSlotsToAlloc, initialValue) {\n if (numSlotsToAlloc === 0) return -1;\n if (ngDevMode) {\n assertFirstCreatePass(tView);\n assertSame(tView, lView[TVIEW], '`LView` must be associated with `TView`!');\n assertEqual(tView.data.length, lView.length, 'Expecting LView to be same size as TView');\n assertEqual(tView.data.length, tView.blueprint.length, 'Expecting Blueprint to be same size as TView');\n assertFirstUpdatePass(tView);\n }\n const allocIdx = lView.length;\n for (let i = 0; i < numSlotsToAlloc; i++) {\n lView.push(initialValue);\n tView.blueprint.push(initialValue);\n tView.data.push(null);\n }\n return allocIdx;\n}\nfunction addToEndOfViewTree(lView, lViewOrLContainer) {\n if (lView[CHILD_HEAD]) {\n lView[CHILD_TAIL][NEXT] = lViewOrLContainer;\n } else {\n lView[CHILD_HEAD] = lViewOrLContainer;\n }\n lView[CHILD_TAIL] = lViewOrLContainer;\n return lViewOrLContainer;\n}\nfunction ɵɵadvance(delta = 1) {\n ngDevMode && assertGreaterThan(delta, 0, 'Can only advance forward');\n selectIndexInternal(getTView(), getLView(), getSelectedIndex() + delta, !!ngDevMode && isInCheckNoChangesMode());\n}\nfunction selectIndexInternal(tView, lView, index, checkNoChangesMode) {\n ngDevMode && assertIndexInDeclRange(lView[TVIEW], index);\n if (!checkNoChangesMode) {\n const hooksInitPhaseCompleted = (lView[FLAGS] & 3) === 3;\n if (hooksInitPhaseCompleted) {\n const preOrderCheckHooks = tView.preOrderCheckHooks;\n if (preOrderCheckHooks !== null) {\n executeCheckHooks(lView, preOrderCheckHooks, index);\n }\n } else {\n const preOrderHooks = tView.preOrderHooks;\n if (preOrderHooks !== null) {\n executeInitAndCheckHooks(lView, preOrderHooks, 0, index);\n }\n }\n }\n setSelectedIndex(index);\n}\nvar InputFlags = /*#__PURE__*/function (InputFlags) {\n InputFlags[InputFlags[\"None\"] = 0] = \"None\";\n InputFlags[InputFlags[\"SignalBased\"] = 1] = \"SignalBased\";\n InputFlags[InputFlags[\"HasDecoratorInputTransform\"] = 2] = \"HasDecoratorInputTransform\";\n return InputFlags;\n}(InputFlags || {});\nfunction writeToDirectiveInput(def, instance, publicName, value) {\n const prevConsumer = setActiveConsumer(null);\n try {\n if (ngDevMode) {\n if (!def.inputs.hasOwnProperty(publicName)) {\n throw new Error(`ASSERTION ERROR: Directive ${def.type.name} does not have an input with a public name of \"${publicName}\"`);\n }\n if (instance instanceof NodeInjectorFactory) {\n throw new Error(`ASSERTION ERROR: Cannot write input to factory for type ${def.type.name}. Directive has not been created yet.`);\n }\n }\n const [privateName, flags, transform] = def.inputs[publicName];\n let inputSignalNode = null;\n if ((flags & InputFlags.SignalBased) !== 0) {\n const field = instance[privateName];\n inputSignalNode = field[SIGNAL];\n }\n if (inputSignalNode !== null && inputSignalNode.transformFn !== undefined) {\n value = inputSignalNode.transformFn(value);\n } else if (transform !== null) {\n value = transform.call(instance, value);\n }\n if (def.setInput !== null) {\n def.setInput(instance, inputSignalNode, value, publicName, privateName);\n } else {\n applyValueToInputField(instance, inputSignalNode, privateName, value);\n }\n } finally {\n setActiveConsumer(prevConsumer);\n }\n}\nvar RendererStyleFlags2 = /*#__PURE__*/function (RendererStyleFlags2) {\n RendererStyleFlags2[RendererStyleFlags2[\"Important\"] = 1] = \"Important\";\n RendererStyleFlags2[RendererStyleFlags2[\"DashCase\"] = 2] = \"DashCase\";\n return RendererStyleFlags2;\n}(RendererStyleFlags2 || {});\nlet _icuContainerIterate;\nfunction icuContainerIterate(tIcuContainerNode, lView) {\n return _icuContainerIterate(tIcuContainerNode, lView);\n}\nfunction ensureIcuContainerVisitorLoaded(loader) {\n if (_icuContainerIterate === undefined) {\n _icuContainerIterate = loader();\n }\n}\nconst ANIMATIONS_DISABLED = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'AnimationsDisabled' : '', {\n factory: () => false\n});\nconst MAX_ANIMATION_TIMEOUT = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'MaxAnimationTimeout' : '', {\n factory: () => MAX_ANIMATION_TIMEOUT_DEFAULT\n});\nconst MAX_ANIMATION_TIMEOUT_DEFAULT = 4000;\nconst DEFAULT_ANIMATIONS_DISABLED = false;\nconst areAnimationSupported = (typeof ngServerMode === 'undefined' || !ngServerMode) && typeof document !== 'undefined' && typeof document?.documentElement?.getAnimations === 'function';\nfunction areAnimationsDisabled(lView) {\n const injector = lView[INJECTOR];\n return injector.get(ANIMATIONS_DISABLED, DEFAULT_ANIMATIONS_DISABLED);\n}\nfunction assertAnimationTypes(value, instruction) {\n if (value == null || typeof value !== 'string' && typeof value !== 'function') {\n throw new RuntimeError(650, `'${instruction}' value must be a string of CSS classes or an animation function, got ${stringify(value)}`);\n }\n}\nfunction assertElementNodes(nativeElement, instruction) {\n if (nativeElement.nodeType !== Node.ELEMENT_NODE) {\n throw new RuntimeError(650, `'${instruction}' can only be used on an element node, got ${stringify(nativeElement.nodeType)}`);\n }\n}\nfunction trackEnterClasses(el, classList, cleanupFns) {\n const elementData = enterClassMap.get(el);\n if (elementData) {\n for (const klass of classList) {\n elementData.classList.push(klass);\n }\n for (const fn of cleanupFns) {\n elementData.cleanupFns.push(fn);\n }\n } else {\n enterClassMap.set(el, {\n classList,\n cleanupFns\n });\n }\n}\nfunction cleanupEnterClassData(element) {\n const elementData = enterClassMap.get(element);\n if (elementData) {\n for (const fn of elementData.cleanupFns) {\n fn();\n }\n enterClassMap.delete(element);\n }\n longestAnimations.delete(element);\n}\nconst noOpAnimationComplete = () => {};\nconst enterClassMap = /*#__PURE__*/new WeakMap();\nconst longestAnimations = /*#__PURE__*/new WeakMap();\nconst leavingNodes = /*#__PURE__*/new WeakMap();\nconst reusedNodes = /*#__PURE__*/new WeakSet();\nfunction clearLeavingNodes(tNode, el) {\n const nodes = leavingNodes.get(tNode);\n if (nodes && nodes.length > 0) {\n const ix = nodes.findIndex(node => node === el);\n if (ix > -1) nodes.splice(ix, 1);\n }\n if (nodes?.length === 0) {\n leavingNodes.delete(tNode);\n }\n}\nfunction cancelLeavingNodes(tNode, newElement) {\n const nodes = leavingNodes.get(tNode);\n if (!nodes || nodes.length === 0) return;\n const newParent = newElement.parentNode;\n const prevSibling = newElement.previousSibling;\n for (let i = nodes.length - 1; i >= 0; i--) {\n const leavingEl = nodes[i];\n const leavingParent = leavingEl.parentNode;\n if (leavingEl === newElement) {\n nodes.splice(i, 1);\n reusedNodes.add(leavingEl);\n leavingEl.dispatchEvent(new CustomEvent('animationend', {\n detail: {\n cancel: true\n }\n }));\n } else if (prevSibling && leavingEl === prevSibling || leavingParent && newParent && leavingParent !== newParent) {\n nodes.splice(i, 1);\n leavingEl.dispatchEvent(new CustomEvent('animationend', {\n detail: {\n cancel: true\n }\n }));\n leavingEl.parentNode?.removeChild(leavingEl);\n }\n }\n}\nfunction trackLeavingNodes(tNode, el) {\n const nodes = leavingNodes.get(tNode);\n if (nodes) {\n if (!nodes.includes(el)) {\n nodes.push(el);\n }\n } else {\n leavingNodes.set(tNode, [el]);\n }\n}\nfunction getLViewEnterAnimations(lView) {\n const animationData = lView[ANIMATIONS] ??= {};\n return animationData.enter ??= new Map();\n}\nfunction getLViewLeaveAnimations(lView) {\n const animationData = lView[ANIMATIONS] ??= {};\n return animationData.leave ??= new Map();\n}\nfunction getClassListFromValue(value) {\n const classes = typeof value === 'function' ? value() : value;\n let classList = Array.isArray(classes) ? classes : null;\n if (typeof classes === 'string') {\n classList = classes.trim().split(/\\s+/).filter(k => k);\n }\n return classList;\n}\nfunction cancelAnimationsIfRunning(element, renderer) {\n if (!areAnimationSupported) return;\n const elementData = enterClassMap.get(element);\n if (elementData && elementData.classList.length > 0 && elementHasClassList(element, elementData.classList)) {\n for (const klass of elementData.classList) {\n renderer.removeClass(element, klass);\n }\n }\n cleanupEnterClassData(element);\n}\nfunction elementHasClassList(element, classList) {\n for (const className of classList) {\n if (element.classList.contains(className)) return true;\n }\n return false;\n}\nfunction getEventTarget(event) {\n return event.composedPath ? event.composedPath()[0] : event.target;\n}\nfunction isLongestAnimation(event, nativeElement) {\n const longestAnimation = longestAnimations.get(nativeElement);\n if (longestAnimation === undefined) return true;\n return nativeElement === getEventTarget(event) && (longestAnimation.animationName !== undefined && event.animationName === longestAnimation.animationName || longestAnimation.propertyName !== undefined && (longestAnimation.propertyName === 'all' || event.propertyName === longestAnimation.propertyName));\n}\nfunction addAnimationToLView(animations, tNode, fn) {\n const nodeAnimations = animations.get(tNode.index) ?? {\n animateFns: []\n };\n nodeAnimations.animateFns.push(fn);\n animations.set(tNode.index, nodeAnimations);\n}\nfunction cleanupAfterLeaveAnimations(resolvers, cleanupFns) {\n if (resolvers) {\n for (const fn of resolvers) {\n fn();\n }\n }\n for (const fn of cleanupFns) {\n fn();\n }\n}\nfunction clearLViewNodeAnimationResolvers(lView, tNode) {\n const nodeAnimations = getLViewLeaveAnimations(lView).get(tNode.index);\n if (nodeAnimations) nodeAnimations.resolvers = undefined;\n}\nfunction leaveAnimationFunctionCleanup(lView, tNode, nativeElement, resolvers, cleanupFns) {\n clearLeavingNodes(tNode, nativeElement);\n cleanupAfterLeaveAnimations(resolvers, cleanupFns);\n clearLViewNodeAnimationResolvers(lView, tNode);\n}\nfunction parseCssTimeUnitsToMs(value) {\n if (!value) return 0;\n const multiplier = value.toLowerCase().indexOf('ms') > -1 ? 1 : 1000;\n return parseFloat(value) * multiplier;\n}\nfunction parseCssPropertyValue(computedStyle, name) {\n const value = computedStyle.getPropertyValue(name);\n return value.split(',').map(part => part.trim());\n}\nfunction getLongestComputedTransition(computedStyle) {\n const transitionedProperties = parseCssPropertyValue(computedStyle, 'transition-property');\n const rawDurations = parseCssPropertyValue(computedStyle, 'transition-duration');\n const rawDelays = parseCssPropertyValue(computedStyle, 'transition-delay');\n const longest = {\n propertyName: '',\n duration: 0,\n animationName: undefined\n };\n for (let i = 0; i < transitionedProperties.length; i++) {\n const duration = parseCssTimeUnitsToMs(rawDelays[i]) + parseCssTimeUnitsToMs(rawDurations[i]);\n if (duration > longest.duration) {\n longest.propertyName = transitionedProperties[i];\n longest.duration = duration;\n }\n }\n return longest;\n}\nfunction getLongestComputedAnimation(computedStyle) {\n const rawNames = parseCssPropertyValue(computedStyle, 'animation-name');\n const rawDelays = parseCssPropertyValue(computedStyle, 'animation-delay');\n const rawDurations = parseCssPropertyValue(computedStyle, 'animation-duration');\n const rawIterationCounts = parseCssPropertyValue(computedStyle, 'animation-iteration-count');\n const longest = {\n animationName: '',\n propertyName: undefined,\n duration: 0\n };\n for (let i = 0; i < rawNames.length; i++) {\n const duration = parseCssTimeUnitsToMs(rawDelays[i]) + parseCssTimeUnitsToMs(rawDurations[i]);\n const iterationCount = rawIterationCounts[i];\n if (duration > longest.duration && iterationCount !== 'infinite') {\n longest.animationName = rawNames[i];\n longest.duration = duration;\n }\n }\n return longest;\n}\nfunction isShorterThanExistingAnimation(existing, longest) {\n return existing !== undefined && existing.duration > longest.duration;\n}\nfunction longestExists(longest) {\n return (longest.animationName != undefined || longest.propertyName != undefined) && longest.duration > 0;\n}\nfunction determineLongestAnimationFromComputedStyles(el, animationsMap) {\n const computedStyle = getComputedStyle(el);\n const longestAnimation = getLongestComputedAnimation(computedStyle);\n const longestTransition = getLongestComputedTransition(computedStyle);\n const longest = longestAnimation.duration > longestTransition.duration ? longestAnimation : longestTransition;\n if (isShorterThanExistingAnimation(animationsMap.get(el), longest)) return;\n if (longestExists(longest)) {\n animationsMap.set(el, longest);\n }\n}\nfunction determineLongestAnimation(el, animationsMap, areAnimationSupported) {\n if (!areAnimationSupported) return;\n const animations = el.getAnimations();\n return animations.length === 0 ? determineLongestAnimationFromComputedStyles(el, animationsMap) : determineLongestAnimationFromElementAnimations(el, animationsMap, animations);\n}\nfunction determineLongestAnimationFromElementAnimations(el, animationsMap, animations) {\n let longest = {\n animationName: undefined,\n propertyName: undefined,\n duration: 0\n };\n for (const animation of animations) {\n const timing = animation.effect?.getTiming();\n if (timing?.iterations === Infinity) {\n continue;\n }\n const animDuration = typeof timing?.duration === 'number' ? timing.duration : 0;\n let duration = (timing?.delay ?? 0) + animDuration;\n let propertyName;\n let animationName;\n if (animation.animationName) {\n animationName = animation.animationName;\n } else {\n propertyName = animation.transitionProperty;\n }\n if (duration >= longest.duration) {\n longest = {\n animationName,\n propertyName,\n duration\n };\n }\n }\n if (isShorterThanExistingAnimation(animationsMap.get(el), longest)) return;\n if (longestExists(longest)) {\n animationsMap.set(el, longest);\n }\n}\nconst allLeavingAnimations = /*#__PURE__*/new Set();\nvar TracingAction = /*#__PURE__*/function (TracingAction) {\n TracingAction[TracingAction[\"CHANGE_DETECTION\"] = 0] = \"CHANGE_DETECTION\";\n TracingAction[TracingAction[\"AFTER_NEXT_RENDER\"] = 1] = \"AFTER_NEXT_RENDER\";\n return TracingAction;\n}(TracingAction || {});\nconst TracingService = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'TracingService' : '');\nconst markedFeatures = /*#__PURE__*/new Set();\nfunction performanceMarkFeature(feature) {\n if (markedFeatures.has(feature)) {\n return;\n }\n markedFeatures.add(feature);\n performance?.mark?.('mark_feature_usage', {\n detail: {\n feature\n }\n });\n}\nlet AfterRenderManager = /*#__PURE__*/(() => {\n class AfterRenderManager {\n impl = null;\n execute() {\n this.impl?.execute();\n }\n static ɵprov = /* @__PURE__ */\n __defineInjectable({\n token: AfterRenderManager,\n providedIn: 'root',\n factory: () => new AfterRenderManager()\n });\n }\n return AfterRenderManager;\n})();\nconst AFTER_RENDER_PHASES = /* @__PURE__ **/(() => [0, 1, 2, 3])();\nlet AfterRenderImpl = /*#__PURE__*/(() => {\n class AfterRenderImpl {\n ngZone = inject(NgZone);\n scheduler = inject(ChangeDetectionScheduler);\n errorHandler = inject(ErrorHandler, {\n optional: true\n });\n sequences = new Set();\n deferredRegistrations = new Set();\n executing = false;\n constructor() {\n inject(TracingService, {\n optional: true\n });\n }\n execute() {\n const hasSequencesToExecute = this.sequences.size > 0;\n if (hasSequencesToExecute) {\n profiler(ProfilerEvent.AfterRenderHooksStart);\n }\n this.executing = true;\n for (const phase of AFTER_RENDER_PHASES) {\n for (const sequence of this.sequences) {\n if (sequence.erroredOrDestroyed || !sequence.hooks[phase]) {\n continue;\n }\n try {\n sequence.pipelinedValue = this.ngZone.runOutsideAngular(() => this.maybeTrace(() => {\n const hookFn = sequence.hooks[phase];\n const value = hookFn(sequence.pipelinedValue);\n return value;\n }, sequence.snapshot));\n } catch (err) {\n sequence.erroredOrDestroyed = true;\n this.errorHandler?.handleError(err);\n }\n }\n }\n this.executing = false;\n for (const sequence of this.sequences) {\n sequence.afterRun();\n if (sequence.once) {\n this.sequences.delete(sequence);\n sequence.destroy();\n }\n }\n for (const sequence of this.deferredRegistrations) {\n this.sequences.add(sequence);\n }\n if (this.deferredRegistrations.size > 0) {\n this.scheduler.notify(7);\n }\n this.deferredRegistrations.clear();\n if (hasSequencesToExecute) {\n profiler(ProfilerEvent.AfterRenderHooksEnd);\n }\n }\n register(sequence) {\n const {\n view\n } = sequence;\n if (view !== undefined) {\n (view[AFTER_RENDER_SEQUENCES_TO_ADD] ??= []).push(sequence);\n markAncestorsForTraversal(view);\n view[FLAGS] |= 8192;\n } else if (!this.executing) {\n this.addSequence(sequence);\n } else {\n this.deferredRegistrations.add(sequence);\n }\n }\n addSequence(sequence) {\n this.sequences.add(sequence);\n this.scheduler.notify(7);\n }\n unregister(sequence) {\n if (this.executing && this.sequences.has(sequence)) {\n sequence.erroredOrDestroyed = true;\n sequence.pipelinedValue = undefined;\n sequence.once = true;\n } else {\n this.sequences.delete(sequence);\n this.deferredRegistrations.delete(sequence);\n }\n }\n maybeTrace(fn, snapshot) {\n return snapshot ? snapshot.run(TracingAction.AFTER_NEXT_RENDER, fn) : fn();\n }\n static ɵprov = /* @__PURE__ */\n __defineInjectable({\n token: AfterRenderImpl,\n providedIn: 'root',\n factory: () => new AfterRenderImpl()\n });\n }\n return AfterRenderImpl;\n})();\nclass AfterRenderSequence {\n impl;\n hooks;\n view;\n once;\n snapshot;\n erroredOrDestroyed = false;\n pipelinedValue = undefined;\n unregisterOnDestroy;\n constructor(impl, hooks, view, once, destroyRef, snapshot = null) {\n this.impl = impl;\n this.hooks = hooks;\n this.view = view;\n this.once = once;\n this.snapshot = snapshot;\n this.unregisterOnDestroy = destroyRef?.onDestroy(() => this.destroy());\n }\n afterRun() {\n this.erroredOrDestroyed = false;\n this.pipelinedValue = undefined;\n this.snapshot?.dispose();\n this.snapshot = null;\n }\n destroy() {\n this.impl.unregister(this);\n this.unregisterOnDestroy?.();\n const scheduled = this.view?.[AFTER_RENDER_SEQUENCES_TO_ADD];\n if (scheduled) {\n this.view[AFTER_RENDER_SEQUENCES_TO_ADD] = scheduled.filter(s => s !== this);\n }\n }\n}\nfunction afterEveryRender(callbackOrSpec, options) {\n ngDevMode && assertNotInReactiveContext(afterEveryRender, 'Call `afterEveryRender` outside of a reactive context. For example, schedule the render ' + 'callback inside the component constructor`.');\n if (ngDevMode && !options?.injector) {\n assertInInjectionContext(afterEveryRender);\n }\n const injector = options?.injector ?? inject(Injector);\n if (typeof ngServerMode !== 'undefined' && ngServerMode) {\n return NOOP_AFTER_RENDER_REF;\n }\n performanceMarkFeature('NgAfterRender');\n return afterEveryRenderImpl(callbackOrSpec, injector, options, false);\n}\nfunction afterNextRender(callbackOrSpec, options) {\n if (ngDevMode && !options?.injector) {\n assertInInjectionContext(afterNextRender);\n }\n const injector = options?.injector ?? inject(Injector);\n if (typeof ngServerMode !== 'undefined' && ngServerMode) {\n return NOOP_AFTER_RENDER_REF;\n }\n performanceMarkFeature('NgAfterNextRender');\n return afterEveryRenderImpl(callbackOrSpec, injector, options, true);\n}\nfunction getHooks(callbackOrSpec) {\n if (callbackOrSpec instanceof Function) {\n return [undefined, undefined, callbackOrSpec, undefined];\n } else {\n return [callbackOrSpec.earlyRead, callbackOrSpec.write, callbackOrSpec.mixedReadWrite, callbackOrSpec.read];\n }\n}\nfunction afterEveryRenderImpl(callbackOrSpec, injector, options, once) {\n const manager = injector.get(AfterRenderManager);\n manager.impl ??= injector.get(AfterRenderImpl);\n const tracing = injector.get(TracingService, null, {\n optional: true\n });\n const destroyRef = options?.manualCleanup !== true ? injector.get(DestroyRef) : null;\n const viewContext = injector.get(ViewContext, null, {\n optional: true\n });\n const sequence = new AfterRenderSequence(manager.impl, getHooks(callbackOrSpec), viewContext?.view, once, destroyRef, tracing?.snapshot(null));\n manager.impl.register(sequence);\n return sequence;\n}\nconst NOOP_AFTER_RENDER_REF = {\n destroy() {}\n};\nconst ANIMATION_QUEUE = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'AnimationQueue' : '', {\n factory: () => {\n return {\n queue: new Set(),\n isScheduled: false,\n scheduler: null,\n injector: inject(EnvironmentInjector)\n };\n }\n});\nfunction addToAnimationQueue(injector, animationFns, animationData) {\n const animationQueue = injector.get(ANIMATION_QUEUE);\n if (Array.isArray(animationFns)) {\n for (const animateFn of animationFns) {\n animationQueue.queue.add(animateFn);\n animationData?.detachedLeaveAnimationFns?.push(animateFn);\n }\n } else {\n animationQueue.queue.add(animationFns);\n animationData?.detachedLeaveAnimationFns?.push(animationFns);\n }\n animationQueue.scheduler && animationQueue.scheduler(injector);\n}\nfunction removeFromAnimationQueue(injector, animationData) {\n const animationQueue = injector.get(ANIMATION_QUEUE);\n if (animationData.detachedLeaveAnimationFns) {\n for (const animationFn of animationData.detachedLeaveAnimationFns) {\n animationQueue.queue.delete(animationFn);\n }\n animationData.detachedLeaveAnimationFns = undefined;\n }\n}\nfunction scheduleAnimationQueue(injector) {\n const animationQueue = injector.get(ANIMATION_QUEUE);\n if (!animationQueue.isScheduled) {\n afterNextRender(() => {\n animationQueue.isScheduled = false;\n for (let animateFn of animationQueue.queue) {\n animateFn();\n }\n animationQueue.queue.clear();\n }, {\n injector: animationQueue.injector\n });\n animationQueue.isScheduled = true;\n }\n}\nfunction initializeAnimationQueueScheduler(injector) {\n const animationQueue = injector.get(ANIMATION_QUEUE);\n animationQueue.scheduler = scheduleAnimationQueue;\n animationQueue.scheduler(injector);\n}\nfunction queueEnterAnimations(injector, enterAnimations) {\n for (const [_, nodeAnimations] of enterAnimations) {\n addToAnimationQueue(injector, nodeAnimations.animateFns);\n }\n}\nfunction maybeQueueEnterAnimation(parentLView, parent, tNode, injector) {\n const enterAnimations = parentLView?.[ANIMATIONS]?.enter;\n if (parent !== null && enterAnimations && enterAnimations.has(tNode.index)) {\n queueEnterAnimations(injector, enterAnimations);\n }\n}\nfunction applyToElementOrContainer(action, renderer, injector, parent, lNodeToHandle, tNode, beforeNode, parentLView) {\n if (lNodeToHandle != null) {\n let lContainer;\n let isComponent = false;\n if (isLContainer(lNodeToHandle)) {\n lContainer = lNodeToHandle;\n } else if (isLView(lNodeToHandle)) {\n isComponent = true;\n ngDevMode && assertDefined(lNodeToHandle[HOST], 'HOST must be defined for a component LView');\n lNodeToHandle = lNodeToHandle[HOST];\n }\n const rNode = unwrapRNode(lNodeToHandle);\n if (action === 0 && parent !== null) {\n maybeQueueEnterAnimation(parentLView, parent, tNode, injector);\n if (beforeNode == null) {\n nativeAppendChild(renderer, parent, rNode);\n } else {\n nativeInsertBefore(renderer, parent, rNode, beforeNode || null, true);\n }\n } else if (action === 1 && parent !== null) {\n maybeQueueEnterAnimation(parentLView, parent, tNode, injector);\n nativeInsertBefore(renderer, parent, rNode, beforeNode || null, true);\n cancelLeavingNodes(tNode, rNode);\n } else if (action === 2) {\n if (parentLView?.[ANIMATIONS]?.leave?.has(tNode.index)) {\n trackLeavingNodes(tNode, rNode);\n }\n runLeaveAnimationsWithCallback(parentLView, tNode, injector, nodeHasLeaveAnimations => {\n if (reusedNodes.has(rNode)) {\n reusedNodes.delete(rNode);\n return;\n }\n nativeRemoveNode(renderer, rNode, isComponent, nodeHasLeaveAnimations);\n });\n } else if (action === 3) {\n runLeaveAnimationsWithCallback(parentLView, tNode, injector, () => {\n renderer.destroyNode(rNode);\n });\n }\n if (lContainer != null) {\n applyContainer(renderer, action, injector, lContainer, tNode, parent, beforeNode);\n }\n }\n}\nfunction removeViewFromDOM(tView, lView) {\n detachViewFromDOM(tView, lView);\n lView[HOST] = null;\n lView[T_HOST] = null;\n}\nfunction addViewToDOM(tView, parentTNode, renderer, lView, parentNativeNode, beforeNode) {\n lView[HOST] = parentNativeNode;\n lView[T_HOST] = parentTNode;\n applyView(tView, lView, renderer, 1, parentNativeNode, beforeNode);\n}\nfunction detachViewFromDOM(tView, lView) {\n lView[ENVIRONMENT].changeDetectionScheduler?.notify(9);\n applyView(tView, lView, lView[RENDERER], 2, null, null);\n}\nfunction destroyViewTree(rootView) {\n let lViewOrLContainer = rootView[CHILD_HEAD];\n if (!lViewOrLContainer) {\n return cleanUpView(rootView[TVIEW], rootView);\n }\n while (lViewOrLContainer) {\n let next = null;\n if (isLView(lViewOrLContainer)) {\n next = lViewOrLContainer[CHILD_HEAD];\n } else {\n ngDevMode && assertLContainer(lViewOrLContainer);\n const firstView = lViewOrLContainer[CONTAINER_HEADER_OFFSET];\n if (firstView) next = firstView;\n }\n if (!next) {\n while (lViewOrLContainer && !lViewOrLContainer[NEXT] && lViewOrLContainer !== rootView) {\n if (isLView(lViewOrLContainer)) {\n cleanUpView(lViewOrLContainer[TVIEW], lViewOrLContainer);\n }\n lViewOrLContainer = lViewOrLContainer[PARENT];\n }\n if (lViewOrLContainer === null) lViewOrLContainer = rootView;\n if (isLView(lViewOrLContainer)) {\n cleanUpView(lViewOrLContainer[TVIEW], lViewOrLContainer);\n }\n next = lViewOrLContainer && lViewOrLContainer[NEXT];\n }\n lViewOrLContainer = next;\n }\n}\nfunction detachMovedView(declarationContainer, lView) {\n ngDevMode && assertLContainer(declarationContainer);\n ngDevMode && assertDefined(declarationContainer[MOVED_VIEWS], 'A projected view should belong to a non-empty projected views collection');\n const movedViews = declarationContainer[MOVED_VIEWS];\n const declarationViewIndex = movedViews.indexOf(lView);\n movedViews.splice(declarationViewIndex, 1);\n}\nfunction destroyLView(tView, lView) {\n if (isDestroyed(lView)) {\n return;\n }\n const renderer = lView[RENDERER];\n if (renderer.destroyNode) {\n applyView(tView, lView, renderer, 3, null, null);\n }\n destroyViewTree(lView);\n}\nfunction cleanUpView(tView, lView) {\n if (isDestroyed(lView)) {\n return;\n }\n const prevConsumer = setActiveConsumer(null);\n try {\n lView[FLAGS] &= ~128;\n lView[FLAGS] |= 256;\n lView[REACTIVE_TEMPLATE_CONSUMER] && consumerDestroy(lView[REACTIVE_TEMPLATE_CONSUMER]);\n executeOnDestroys(tView, lView);\n processCleanups(tView, lView);\n if (lView[TVIEW].type === 1) {\n lView[RENDERER].destroy();\n }\n const declarationContainer = lView[DECLARATION_LCONTAINER];\n if (declarationContainer !== null && isLContainer(lView[PARENT])) {\n if (declarationContainer !== lView[PARENT]) {\n detachMovedView(declarationContainer, lView);\n }\n const lQueries = lView[QUERIES];\n if (lQueries !== null) {\n lQueries.detachView(tView);\n }\n }\n unregisterLView(lView);\n } finally {\n setActiveConsumer(prevConsumer);\n }\n}\nfunction runLeaveAnimationsWithCallback(lView, tNode, injector, callback) {\n const animations = lView?.[ANIMATIONS];\n if (animations == null || animations.leave == undefined || !animations.leave.has(tNode.index)) return callback(false);\n if (lView) allLeavingAnimations.add(lView[ID]);\n addToAnimationQueue(injector, () => {\n if (animations.leave && animations.leave.has(tNode.index)) {\n const leaveAnimationMap = animations.leave;\n const leaveAnimations = leaveAnimationMap.get(tNode.index);\n const runningAnimations = [];\n if (leaveAnimations) {\n for (let index = 0; index < leaveAnimations.animateFns.length; index++) {\n const animationFn = leaveAnimations.animateFns[index];\n const {\n promise\n } = animationFn();\n runningAnimations.push(promise);\n }\n animations.detachedLeaveAnimationFns = undefined;\n }\n animations.running = Promise.allSettled(runningAnimations);\n runAfterLeaveAnimations(lView, callback);\n } else {\n if (lView) allLeavingAnimations.delete(lView[ID]);\n callback(false);\n }\n }, animations);\n}\nfunction runAfterLeaveAnimations(lView, callback) {\n const runningAnimations = lView[ANIMATIONS]?.running;\n if (runningAnimations) {\n runningAnimations.then(() => {\n lView[ANIMATIONS].running = undefined;\n allLeavingAnimations.delete(lView[ID]);\n callback(true);\n });\n return;\n }\n callback(false);\n}\nfunction processCleanups(tView, lView) {\n ngDevMode && assertNotReactive(processCleanups.name);\n const tCleanup = tView.cleanup;\n const lCleanup = lView[CLEANUP];\n if (tCleanup !== null) {\n for (let i = 0; i < tCleanup.length - 1; i += 2) {\n if (typeof tCleanup[i] === 'string') {\n const targetIdx = tCleanup[i + 3];\n ngDevMode && assertNumber(targetIdx, 'cleanup target must be a number');\n if (targetIdx >= 0) {\n lCleanup[targetIdx]();\n } else {\n lCleanup[-targetIdx].unsubscribe();\n }\n i += 2;\n } else {\n const context = lCleanup[tCleanup[i + 1]];\n tCleanup[i].call(context);\n }\n }\n }\n if (lCleanup !== null) {\n lView[CLEANUP] = null;\n }\n const destroyHooks = lView[ON_DESTROY_HOOKS];\n if (destroyHooks !== null) {\n lView[ON_DESTROY_HOOKS] = null;\n for (let i = 0; i < destroyHooks.length; i++) {\n const destroyHooksFn = destroyHooks[i];\n ngDevMode && assertFunction(destroyHooksFn, 'Expecting destroy hook to be a function.');\n destroyHooksFn();\n }\n }\n const effects = lView[EFFECTS];\n if (effects !== null) {\n lView[EFFECTS] = null;\n for (const effect of effects) {\n effect.destroy();\n }\n }\n}\nfunction executeOnDestroys(tView, lView) {\n ngDevMode && assertNotReactive(executeOnDestroys.name);\n let destroyHooks;\n if (tView != null && (destroyHooks = tView.destroyHooks) != null) {\n for (let i = 0; i < destroyHooks.length; i += 2) {\n const context = lView[destroyHooks[i]];\n if (!(context instanceof NodeInjectorFactory)) {\n const toCall = destroyHooks[i + 1];\n if (Array.isArray(toCall)) {\n for (let j = 0; j < toCall.length; j += 2) {\n const callContext = context[toCall[j]];\n const hook = toCall[j + 1];\n profiler(ProfilerEvent.LifecycleHookStart, callContext, hook);\n try {\n hook.call(callContext);\n } finally {\n profiler(ProfilerEvent.LifecycleHookEnd, callContext, hook);\n }\n }\n } else {\n profiler(ProfilerEvent.LifecycleHookStart, context, toCall);\n try {\n toCall.call(context);\n } finally {\n profiler(ProfilerEvent.LifecycleHookEnd, context, toCall);\n }\n }\n }\n }\n }\n}\nfunction getParentRElement(tView, tNode, lView) {\n return getClosestRElement(tView, tNode.parent, lView);\n}\nfunction getClosestRElement(tView, tNode, lView) {\n let parentTNode = tNode;\n while (parentTNode !== null && parentTNode.type & (8 | 32 | 128)) {\n tNode = parentTNode;\n parentTNode = tNode.parent;\n }\n if (parentTNode === null) {\n return lView[HOST];\n } else {\n ngDevMode && assertTNodeType(parentTNode, 3 | 4);\n if (isComponentHost(parentTNode)) {\n ngDevMode && assertTNodeForLView(parentTNode, lView);\n const {\n encapsulation\n } = tView.data[parentTNode.directiveStart + parentTNode.componentOffset];\n if (encapsulation === ViewEncapsulation.None || encapsulation === ViewEncapsulation.Emulated) {\n return null;\n }\n }\n return getNativeByTNode(parentTNode, lView);\n }\n}\nfunction getInsertInFrontOfRNode(parentTNode, currentTNode, lView) {\n return _getInsertInFrontOfRNodeWithI18n(parentTNode, currentTNode, lView);\n}\nfunction getInsertInFrontOfRNodeWithNoI18n(parentTNode, currentTNode, lView) {\n if (parentTNode.type & (8 | 32)) {\n return getNativeByTNode(parentTNode, lView);\n }\n return null;\n}\nlet _getInsertInFrontOfRNodeWithI18n = getInsertInFrontOfRNodeWithNoI18n;\nlet _processI18nInsertBefore;\nfunction setI18nHandling(getInsertInFrontOfRNodeWithI18n, processI18nInsertBefore) {\n _getInsertInFrontOfRNodeWithI18n = getInsertInFrontOfRNodeWithI18n;\n _processI18nInsertBefore = processI18nInsertBefore;\n}\nfunction appendChild(tView, lView, childRNode, childTNode) {\n const parentRNode = getParentRElement(tView, childTNode, lView);\n const renderer = lView[RENDERER];\n const parentTNode = childTNode.parent || lView[T_HOST];\n const anchorNode = getInsertInFrontOfRNode(parentTNode, childTNode, lView);\n if (parentRNode != null) {\n if (Array.isArray(childRNode)) {\n for (let i = 0; i < childRNode.length; i++) {\n nativeAppendOrInsertBefore(renderer, parentRNode, childRNode[i], anchorNode, false);\n }\n } else {\n nativeAppendOrInsertBefore(renderer, parentRNode, childRNode, anchorNode, false);\n }\n }\n _processI18nInsertBefore !== undefined && _processI18nInsertBefore(renderer, childTNode, lView, childRNode, parentRNode);\n}\nfunction getFirstNativeNode(lView, tNode) {\n if (tNode !== null) {\n ngDevMode && assertTNodeType(tNode, 3 | 12 | 32 | 16 | 128);\n const tNodeType = tNode.type;\n if (tNodeType & 3) {\n return getNativeByTNode(tNode, lView);\n } else if (tNodeType & 4) {\n return getBeforeNodeForView(-1, lView[tNode.index]);\n } else if (tNodeType & 8) {\n const elIcuContainerChild = tNode.child;\n if (elIcuContainerChild !== null) {\n return getFirstNativeNode(lView, elIcuContainerChild);\n } else {\n const rNodeOrLContainer = lView[tNode.index];\n if (isLContainer(rNodeOrLContainer)) {\n return getBeforeNodeForView(-1, rNodeOrLContainer);\n } else {\n return unwrapRNode(rNodeOrLContainer);\n }\n }\n } else if (tNodeType & 128) {\n return getFirstNativeNode(lView, tNode.next);\n } else if (tNodeType & 32) {\n let nextRNode = icuContainerIterate(tNode, lView);\n let rNode = nextRNode();\n return rNode || unwrapRNode(lView[tNode.index]);\n } else {\n const projectionNodes = getProjectionNodes(lView, tNode);\n if (projectionNodes !== null) {\n if (Array.isArray(projectionNodes)) {\n return projectionNodes[0];\n }\n const parentView = getLViewParent(lView[DECLARATION_COMPONENT_VIEW]);\n ngDevMode && assertParentView(parentView);\n return getFirstNativeNode(parentView, projectionNodes);\n } else {\n return getFirstNativeNode(lView, tNode.next);\n }\n }\n }\n return null;\n}\nfunction getProjectionNodes(lView, tNode) {\n if (tNode !== null) {\n const componentView = lView[DECLARATION_COMPONENT_VIEW];\n const componentHost = componentView[T_HOST];\n const slotIdx = tNode.projection;\n ngDevMode && assertProjectionSlots(lView);\n return componentHost.projection[slotIdx];\n }\n return null;\n}\nfunction getBeforeNodeForView(viewIndexInContainer, lContainer) {\n const nextViewIndex = CONTAINER_HEADER_OFFSET + viewIndexInContainer + 1;\n if (nextViewIndex < lContainer.length) {\n const lView = lContainer[nextViewIndex];\n const firstTNodeOfView = lView[TVIEW].firstChild;\n if (firstTNodeOfView !== null) {\n return getFirstNativeNode(lView, firstTNodeOfView);\n }\n }\n return lContainer[NATIVE];\n}\nfunction applyNodes(renderer, action, tNode, lView, parentRElement, beforeNode, isProjection) {\n while (tNode != null) {\n ngDevMode && assertTNodeForLView(tNode, lView);\n const injector = lView[INJECTOR];\n if (tNode.type === 128) {\n tNode = tNode.next;\n continue;\n }\n ngDevMode && assertTNodeType(tNode, 3 | 12 | 16 | 32);\n const rawSlotValue = lView[tNode.index];\n const tNodeType = tNode.type;\n if (isProjection) {\n if (action === 0) {\n rawSlotValue && attachPatchData(unwrapRNode(rawSlotValue), lView);\n tNode.flags |= 2;\n }\n }\n if (!isDetachedByI18n(tNode)) {\n if (tNodeType & 8) {\n applyNodes(renderer, action, tNode.child, lView, parentRElement, beforeNode, false);\n applyToElementOrContainer(action, renderer, injector, parentRElement, rawSlotValue, tNode, beforeNode, lView);\n } else if (tNodeType & 32) {\n const nextRNode = icuContainerIterate(tNode, lView);\n let rNode;\n while (rNode = nextRNode()) {\n applyToElementOrContainer(action, renderer, injector, parentRElement, rNode, tNode, beforeNode, lView);\n }\n applyToElementOrContainer(action, renderer, injector, parentRElement, rawSlotValue, tNode, beforeNode, lView);\n } else if (tNodeType & 16) {\n applyProjectionRecursive(renderer, action, lView, tNode, parentRElement, beforeNode);\n } else {\n ngDevMode && assertTNodeType(tNode, 3 | 4);\n applyToElementOrContainer(action, renderer, injector, parentRElement, rawSlotValue, tNode, beforeNode, lView);\n }\n }\n tNode = isProjection ? tNode.projectionNext : tNode.next;\n }\n}\nfunction applyView(tView, lView, renderer, action, parentRElement, beforeNode) {\n applyNodes(renderer, action, tView.firstChild, lView, parentRElement, beforeNode, false);\n}\nfunction applyProjection(tView, lView, tProjectionNode) {\n const renderer = lView[RENDERER];\n const parentRNode = getParentRElement(tView, tProjectionNode, lView);\n const parentTNode = tProjectionNode.parent || lView[T_HOST];\n let beforeNode = getInsertInFrontOfRNode(parentTNode, tProjectionNode, lView);\n applyProjectionRecursive(renderer, 0, lView, tProjectionNode, parentRNode, beforeNode);\n}\nfunction applyProjectionRecursive(renderer, action, lView, tProjectionNode, parentRElement, beforeNode) {\n const componentLView = lView[DECLARATION_COMPONENT_VIEW];\n const componentNode = componentLView[T_HOST];\n ngDevMode && assertEqual(typeof tProjectionNode.projection, 'number', 'expecting projection index');\n const nodeToProjectOrRNodes = componentNode.projection[tProjectionNode.projection];\n if (Array.isArray(nodeToProjectOrRNodes)) {\n for (let i = 0; i < nodeToProjectOrRNodes.length; i++) {\n const rNode = nodeToProjectOrRNodes[i];\n applyToElementOrContainer(action, renderer, lView[INJECTOR], parentRElement, rNode, tProjectionNode, beforeNode, lView);\n }\n } else {\n let nodeToProject = nodeToProjectOrRNodes;\n const projectedComponentLView = componentLView[PARENT];\n if (hasInSkipHydrationBlockFlag(tProjectionNode)) {\n nodeToProject.flags |= 128;\n }\n applyNodes(renderer, action, nodeToProject, projectedComponentLView, parentRElement, beforeNode, true);\n }\n}\nfunction applyContainer(renderer, action, injector, lContainer, tNode, parentRElement, beforeNode) {\n ngDevMode && assertLContainer(lContainer);\n const anchor = lContainer[NATIVE];\n const native = unwrapRNode(lContainer);\n if (anchor !== native) {\n applyToElementOrContainer(action, renderer, injector, parentRElement, anchor, tNode, beforeNode);\n }\n for (let i = CONTAINER_HEADER_OFFSET; i < lContainer.length; i++) {\n const lView = lContainer[i];\n applyView(lView[TVIEW], lView, renderer, action, parentRElement, anchor);\n }\n}\nfunction applyStyling(renderer, isClassBased, rNode, prop, value) {\n if (isClassBased) {\n if (!value) {\n renderer.removeClass(rNode, prop);\n } else {\n renderer.addClass(rNode, prop);\n }\n } else {\n let flags = prop.indexOf('-') === -1 ? undefined : RendererStyleFlags2.DashCase;\n if (value == null) {\n renderer.removeStyle(rNode, prop, flags);\n } else {\n const isImportant = typeof value === 'string' ? value.endsWith('!important') : false;\n if (isImportant) {\n value = value.slice(0, -10);\n flags |= RendererStyleFlags2.Important;\n }\n renderer.setStyle(rNode, prop, value, flags);\n }\n }\n}\nfunction executeTemplate(tView, lView, templateFn, rf, context) {\n const prevSelectedIndex = getSelectedIndex();\n const isUpdatePhase = rf & 2;\n try {\n setSelectedIndex(-1);\n if (isUpdatePhase && lView.length > HEADER_OFFSET) {\n selectIndexInternal(tView, lView, HEADER_OFFSET, !!ngDevMode && isInCheckNoChangesMode());\n }\n const preHookType = isUpdatePhase ? ProfilerEvent.TemplateUpdateStart : ProfilerEvent.TemplateCreateStart;\n profiler(preHookType, context, templateFn);\n templateFn(rf, context);\n } finally {\n setSelectedIndex(prevSelectedIndex);\n const postHookType = isUpdatePhase ? ProfilerEvent.TemplateUpdateEnd : ProfilerEvent.TemplateCreateEnd;\n profiler(postHookType, context, templateFn);\n }\n}\nfunction createDirectivesInstances(tView, lView, tNode) {\n instantiateAllDirectives(tView, lView, tNode);\n if ((tNode.flags & 64) === 64) {\n invokeDirectivesHostBindings(tView, lView, tNode);\n }\n}\nfunction saveResolvedLocalsInData(viewData, tNode, localRefExtractor = getNativeByTNode) {\n const localNames = tNode.localNames;\n if (localNames !== null) {\n let localIndex = tNode.index + 1;\n for (let i = 0; i < localNames.length; i += 2) {\n const index = localNames[i + 1];\n const value = index === -1 ? localRefExtractor(tNode, viewData) : viewData[index];\n viewData[localIndex++] = value;\n }\n }\n}\nfunction locateHostElement(renderer, elementOrSelector, encapsulation, injector) {\n const preserveHostContent = injector.get(PRESERVE_HOST_CONTENT, PRESERVE_HOST_CONTENT_DEFAULT);\n const preserveContent = preserveHostContent || encapsulation === ViewEncapsulation.ShadowDom || encapsulation === ViewEncapsulation.ExperimentalIsolatedShadowDom;\n const rootElement = renderer.selectRootElement(elementOrSelector, preserveContent);\n applyRootElementTransform(rootElement);\n return rootElement;\n}\nfunction applyRootElementTransform(rootElement) {\n _applyRootElementTransformImpl(rootElement);\n}\nlet _applyRootElementTransformImpl = () => null;\nfunction applyRootElementTransformImpl(rootElement) {\n if (hasSkipHydrationAttrOnRElement(rootElement)) {\n clearElementContents(rootElement);\n } else {\n processTextNodeMarkersBeforeHydration(rootElement);\n }\n}\nfunction enableApplyRootElementTransformImpl() {\n _applyRootElementTransformImpl = applyRootElementTransformImpl;\n}\nfunction mapPropName(name) {\n if (name === 'class') return 'className';\n if (name === 'for') return 'htmlFor';\n if (name === 'formaction') return 'formAction';\n if (name === 'innerHtml') return 'innerHTML';\n if (name === 'readonly') return 'readOnly';\n if (name === 'tabindex') return 'tabIndex';\n return name;\n}\nfunction setPropertyAndInputs(tNode, lView, propName, value, renderer, sanitizer) {\n ngDevMode && assertNotSame(value, NO_CHANGE, 'Incoming value should never be NO_CHANGE.');\n const tView = lView[TVIEW];\n const hasSetInput = setAllInputsForProperty(tNode, tView, lView, propName, value);\n if (hasSetInput) {\n isComponentHost(tNode) && markDirtyIfOnPush(lView, tNode.index);\n ngDevMode && setNgReflectProperties(lView, tView, tNode, propName, value);\n return;\n }\n if (tNode.type & 3) {\n propName = mapPropName(propName);\n }\n setDomProperty(tNode, lView, propName, value, renderer, sanitizer);\n}\nfunction setDomProperty(tNode, lView, propName, value, renderer, sanitizer) {\n if (tNode.type & 3) {\n const element = getNativeByTNode(tNode, lView);\n if (ngDevMode) {\n validateAgainstEventProperties(propName);\n if (!isPropertyValid(element, propName, tNode.value, lView[TVIEW].schemas)) {\n handleUnknownPropertyError(propName, tNode.value, tNode.type, lView);\n }\n }\n value = sanitizer != null ? sanitizer(value, tNode.value || '', propName) : value;\n renderer.setProperty(element, propName, value);\n } else if (tNode.type & 12) {\n if (ngDevMode && !matchingSchemas(lView[TVIEW].schemas, tNode.value)) {\n handleUnknownPropertyError(propName, tNode.value, tNode.type, lView);\n }\n }\n}\nfunction markDirtyIfOnPush(lView, viewIndex) {\n ngDevMode && assertLView(lView);\n const childComponentLView = getComponentLViewByIndex(viewIndex, lView);\n if (!(childComponentLView[FLAGS] & 16)) {\n childComponentLView[FLAGS] |= 64;\n }\n}\nfunction setNgReflectProperty(lView, tNode, attrName, value) {\n const environment = lView[ENVIRONMENT];\n if (!environment.ngReflect) {\n return;\n }\n const element = getNativeByTNode(tNode, lView);\n const renderer = lView[RENDERER];\n attrName = normalizeDebugBindingName(attrName);\n const debugValue = normalizeDebugBindingValue(value);\n if (tNode.type & 3) {\n if (value == null) {\n renderer.removeAttribute(element, attrName);\n } else {\n renderer.setAttribute(element, attrName, debugValue);\n }\n } else {\n const textContent = escapeCommentText(`bindings=${JSON.stringify({\n [attrName]: debugValue\n }, null, 2)}`);\n renderer.setValue(element, textContent);\n }\n}\nfunction setNgReflectProperties(lView, tView, tNode, publicName, value) {\n const environment = lView[ENVIRONMENT];\n if (!environment.ngReflect || !(tNode.type & (3 | 4))) {\n return;\n }\n const inputConfig = tNode.inputs?.[publicName];\n const hostInputConfig = tNode.hostDirectiveInputs?.[publicName];\n if (hostInputConfig) {\n for (let i = 0; i < hostInputConfig.length; i += 2) {\n const index = hostInputConfig[i];\n const publicName = hostInputConfig[i + 1];\n const def = tView.data[index];\n setNgReflectProperty(lView, tNode, def.inputs[publicName][0], value);\n }\n }\n if (inputConfig) {\n for (const index of inputConfig) {\n const def = tView.data[index];\n setNgReflectProperty(lView, tNode, def.inputs[publicName][0], value);\n }\n }\n}\nfunction instantiateAllDirectives(tView, lView, tNode) {\n const start = tNode.directiveStart;\n const end = tNode.directiveEnd;\n if (isComponentHost(tNode)) {\n ngDevMode && assertTNodeType(tNode, 3);\n createComponentLView(lView, tNode, tView.data[start + tNode.componentOffset]);\n }\n if (!tView.firstCreatePass) {\n getOrCreateNodeInjectorForNode(tNode, lView);\n }\n const initialInputs = tNode.initialInputs;\n for (let i = start; i < end; i++) {\n const def = tView.data[i];\n const directive = getNodeInjectable(lView, tView, i, tNode);\n attachPatchData(directive, lView);\n if (initialInputs !== null) {\n setInputsFromAttrs(lView, i - start, directive, def, tNode, initialInputs);\n }\n if (isComponentDef(def)) {\n const componentView = getComponentLViewByIndex(tNode.index, lView);\n componentView[CONTEXT] = getNodeInjectable(lView, tView, i, tNode);\n }\n }\n}\nfunction invokeDirectivesHostBindings(tView, lView, tNode) {\n const start = tNode.directiveStart;\n const end = tNode.directiveEnd;\n const elementIndex = tNode.index;\n const currentDirectiveIndex = getCurrentDirectiveIndex();\n try {\n setSelectedIndex(elementIndex);\n for (let dirIndex = start; dirIndex < end; dirIndex++) {\n const def = tView.data[dirIndex];\n const directive = lView[dirIndex];\n setCurrentDirectiveIndex(dirIndex);\n if (def.hostBindings !== null || def.hostVars !== 0 || def.hostAttrs !== null) {\n invokeHostBindingsInCreationMode(def, directive);\n }\n }\n } finally {\n setSelectedIndex(-1);\n setCurrentDirectiveIndex(currentDirectiveIndex);\n }\n}\nfunction invokeHostBindingsInCreationMode(def, directive) {\n if (def.hostBindings !== null) {\n def.hostBindings(1, directive);\n }\n}\nfunction findDirectiveDefMatches(tView, tNode) {\n ngDevMode && assertFirstCreatePass(tView);\n ngDevMode && assertTNodeType(tNode, 3 | 12);\n const registry = tView.directiveRegistry;\n let matches = null;\n if (registry) {\n for (let i = 0; i < registry.length; i++) {\n const def = registry[i];\n if (isNodeMatchingSelectorList(tNode, def.selectors, false)) {\n matches ??= [];\n if (isComponentDef(def)) {\n if (ngDevMode) {\n assertTNodeType(tNode, 2, `\"${tNode.value}\" tags cannot be used as component hosts. ` + `Please use a different tag to activate the ${stringify(def.type)} component.`);\n if (matches.length && isComponentDef(matches[0])) {\n throwMultipleComponentError(tNode, matches.find(isComponentDef).type, def.type);\n }\n }\n matches.unshift(def);\n } else {\n matches.push(def);\n }\n }\n }\n }\n return matches;\n}\nfunction elementAttributeInternal(tNode, lView, name, value, sanitizer, namespace) {\n if (ngDevMode) {\n assertNotSame(value, NO_CHANGE, 'Incoming value should never be NO_CHANGE.');\n validateAgainstEventAttributes(name);\n assertTNodeType(tNode, 2, `Attempted to set attribute \\`${name}\\` on a container node. ` + `Host bindings are not valid on ng-container or ng-template.`);\n }\n const element = getNativeByTNode(tNode, lView);\n setElementAttribute(lView[RENDERER], element, namespace, tNode.value, name, value, sanitizer);\n}\nfunction setElementAttribute(renderer, element, namespace, tagName, name, value, sanitizer) {\n if (value == null) {\n renderer.removeAttribute(element, name, namespace);\n } else {\n const strValue = sanitizer == null ? renderStringify(value) : sanitizer(value, tagName || '', name);\n renderer.setAttribute(element, name, strValue, namespace);\n }\n}\nfunction setInputsFromAttrs(lView, directiveIndex, instance, def, tNode, initialInputData) {\n const initialInputs = initialInputData[directiveIndex];\n if (initialInputs !== null) {\n for (let i = 0; i < initialInputs.length; i += 2) {\n const lookupName = initialInputs[i];\n const value = initialInputs[i + 1];\n writeToDirectiveInput(def, instance, lookupName, value);\n if (ngDevMode) {\n setNgReflectProperty(lView, tNode, def.inputs[lookupName][0], value);\n }\n }\n }\n}\nfunction elementLikeStartShared(tNode, lView, index, name, locateOrCreateNativeNode) {\n const adjustedIndex = HEADER_OFFSET + index;\n const tView = lView[TVIEW];\n const native = locateOrCreateNativeNode(tView, lView, tNode, name, index);\n lView[adjustedIndex] = native;\n setCurrentTNode(tNode, true);\n const isElement = tNode.type === 2;\n if (isElement) {\n setupStaticAttributes(lView[RENDERER], native, tNode);\n if (getElementDepthCount() === 0 || isDirectiveHost(tNode)) {\n attachPatchData(native, lView);\n }\n increaseElementDepthCount();\n } else {\n attachPatchData(native, lView);\n }\n if (wasLastNodeCreated() && (!isElement || !isDetachedByI18n(tNode))) {\n appendChild(tView, lView, native, tNode);\n }\n return tNode;\n}\nfunction elementLikeEndShared(tNode) {\n let currentTNode = tNode;\n if (isCurrentTNodeParent()) {\n setCurrentTNodeAsNotParent();\n } else {\n ngDevMode && assertHasParent(getCurrentTNode());\n currentTNode = currentTNode.parent;\n setCurrentTNode(currentTNode, false);\n }\n return currentTNode;\n}\nfunction storePropertyBindingMetadata(tData, tNode, propertyName, bindingIndex, ...interpolationParts) {\n if (tData[bindingIndex] === null) {\n if (!tNode.inputs?.[propertyName] && !tNode.hostDirectiveInputs?.[propertyName]) {\n const propBindingIdxs = tNode.propertyBindings || (tNode.propertyBindings = []);\n propBindingIdxs.push(bindingIndex);\n let bindingMetadata = propertyName;\n if (interpolationParts.length > 0) {\n bindingMetadata += INTERPOLATION_DELIMITER + interpolationParts.join(INTERPOLATION_DELIMITER);\n }\n tData[bindingIndex] = bindingMetadata;\n }\n }\n}\nfunction loadComponentRenderer(currentDef, tNode, lView) {\n if (currentDef === null || isComponentDef(currentDef)) {\n lView = unwrapLView(lView[tNode.index]);\n }\n return lView[RENDERER];\n}\nfunction handleUncaughtError(lView, error) {\n const injector = lView[INJECTOR];\n if (!injector) {\n return;\n }\n let errorHandler;\n try {\n errorHandler = injector.get(INTERNAL_APPLICATION_ERROR_HANDLER, null);\n } catch {\n errorHandler = null;\n }\n errorHandler?.(error);\n}\nfunction setAllInputsForProperty(tNode, tView, lView, publicName, value) {\n const inputs = tNode.inputs?.[publicName];\n const hostDirectiveInputs = tNode.hostDirectiveInputs?.[publicName];\n let hasMatch = false;\n if (hostDirectiveInputs) {\n for (let i = 0; i < hostDirectiveInputs.length; i += 2) {\n const index = hostDirectiveInputs[i];\n ngDevMode && assertIndexInRange(lView, index);\n const publicName = hostDirectiveInputs[i + 1];\n const def = tView.data[index];\n writeToDirectiveInput(def, lView[index], publicName, value);\n hasMatch = true;\n }\n }\n if (inputs) {\n for (const index of inputs) {\n ngDevMode && assertIndexInRange(lView, index);\n const instance = lView[index];\n const def = tView.data[index];\n writeToDirectiveInput(def, instance, publicName, value);\n hasMatch = true;\n }\n }\n return hasMatch;\n}\nfunction setDirectiveInput(tNode, tView, lView, target, publicName, value) {\n let hostIndex = null;\n let hostDirectivesStart = null;\n let hostDirectivesEnd = null;\n let hasSet = false;\n if (ngDevMode && !tNode.directiveToIndex?.has(target.type)) {\n throw new Error(`Node does not have a directive with type ${target.type.name}`);\n }\n const data = tNode.directiveToIndex.get(target.type);\n if (typeof data === 'number') {\n hostIndex = data;\n } else {\n [hostIndex, hostDirectivesStart, hostDirectivesEnd] = data;\n }\n if (hostDirectivesStart !== null && hostDirectivesEnd !== null && tNode.hostDirectiveInputs?.hasOwnProperty(publicName)) {\n const hostDirectiveInputs = tNode.hostDirectiveInputs[publicName];\n for (let i = 0; i < hostDirectiveInputs.length; i += 2) {\n const index = hostDirectiveInputs[i];\n if (index >= hostDirectivesStart && index <= hostDirectivesEnd) {\n ngDevMode && assertIndexInRange(lView, index);\n const def = tView.data[index];\n const hostDirectivePublicName = hostDirectiveInputs[i + 1];\n writeToDirectiveInput(def, lView[index], hostDirectivePublicName, value);\n hasSet = true;\n } else if (index > hostDirectivesEnd) {\n break;\n }\n }\n }\n if (hostIndex !== null && target.inputs.hasOwnProperty(publicName)) {\n ngDevMode && assertIndexInRange(lView, hostIndex);\n writeToDirectiveInput(target, lView[hostIndex], publicName, value);\n hasSet = true;\n }\n return hasSet;\n}\nfunction renderComponent(hostLView, componentHostIdx) {\n ngDevMode && assertEqual(isCreationMode(hostLView), true, 'Should be run in creation mode');\n const componentView = getComponentLViewByIndex(componentHostIdx, hostLView);\n const componentTView = componentView[TVIEW];\n syncViewWithBlueprint(componentTView, componentView);\n const hostRNode = componentView[HOST];\n if (hostRNode !== null && componentView[HYDRATION] === null) {\n componentView[HYDRATION] = retrieveHydrationInfo(hostRNode, componentView[INJECTOR]);\n }\n profiler(ProfilerEvent.ComponentStart);\n try {\n renderView(componentTView, componentView, componentView[CONTEXT]);\n } finally {\n profiler(ProfilerEvent.ComponentEnd, componentView[CONTEXT]);\n }\n}\nfunction syncViewWithBlueprint(tView, lView) {\n for (let i = lView.length; i < tView.blueprint.length; i++) {\n lView.push(tView.blueprint[i]);\n }\n}\nfunction renderView(tView, lView, context) {\n ngDevMode && assertEqual(isCreationMode(lView), true, 'Should be run in creation mode');\n ngDevMode && assertNotReactive(renderView.name);\n enterView(lView);\n try {\n const viewQuery = tView.viewQuery;\n if (viewQuery !== null) {\n executeViewQueryFn(1, viewQuery, context);\n }\n const templateFn = tView.template;\n if (templateFn !== null) {\n executeTemplate(tView, lView, templateFn, 1, context);\n }\n if (tView.firstCreatePass) {\n tView.firstCreatePass = false;\n }\n lView[QUERIES]?.finishViewCreation(tView);\n if (tView.staticContentQueries) {\n refreshContentQueries(tView, lView);\n }\n if (tView.staticViewQueries) {\n executeViewQueryFn(2, tView.viewQuery, context);\n }\n const components = tView.components;\n if (components !== null) {\n renderChildComponents(lView, components);\n }\n } catch (error) {\n if (tView.firstCreatePass) {\n tView.incompleteFirstPass = true;\n tView.firstCreatePass = false;\n }\n throw error;\n } finally {\n lView[FLAGS] &= ~4;\n leaveView();\n }\n}\nfunction renderChildComponents(hostLView, components) {\n for (let i = 0; i < components.length; i++) {\n renderComponent(hostLView, components[i]);\n }\n}\nfunction createAndRenderEmbeddedLView(declarationLView, templateTNode, context, options) {\n const prevConsumer = setActiveConsumer(null);\n try {\n const embeddedTView = templateTNode.tView;\n ngDevMode && assertDefined(embeddedTView, 'TView must be defined for a template node.');\n ngDevMode && assertTNodeForLView(templateTNode, declarationLView);\n const isSignalView = declarationLView[FLAGS] & 4096;\n const viewFlags = isSignalView ? 4096 : 16;\n const embeddedLView = createLView(declarationLView, embeddedTView, context, viewFlags, null, templateTNode, null, null, options?.injector ?? null, options?.embeddedViewInjector ?? null, options?.dehydratedView ?? null);\n const declarationLContainer = declarationLView[templateTNode.index];\n ngDevMode && assertLContainer(declarationLContainer);\n embeddedLView[DECLARATION_LCONTAINER] = declarationLContainer;\n const declarationViewLQueries = declarationLView[QUERIES];\n if (declarationViewLQueries !== null) {\n embeddedLView[QUERIES] = declarationViewLQueries.createEmbeddedView(embeddedTView);\n }\n renderView(embeddedTView, embeddedLView, context);\n return embeddedLView;\n } finally {\n setActiveConsumer(prevConsumer);\n }\n}\nfunction shouldAddViewToDom(tNode, dehydratedView) {\n return !dehydratedView || dehydratedView.firstChild === null || hasInSkipHydrationBlockFlag(tNode);\n}\nconst USE_EXHAUSTIVE_CHECK_NO_CHANGES_DEFAULT = false;\nconst UseExhaustiveCheckNoChanges = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'exhaustive checkNoChanges' : '');\nfunction collectNativeNodes(tView, lView, tNode, result, isProjection = false) {\n while (tNode !== null) {\n if (tNode.type === 128) {\n tNode = isProjection ? tNode.projectionNext : tNode.next;\n continue;\n }\n ngDevMode && assertTNodeType(tNode, 3 | 12 | 16 | 32);\n const lNode = lView[tNode.index];\n if (lNode !== null) {\n result.push(unwrapRNode(lNode));\n }\n if (isLContainer(lNode)) {\n collectNativeNodesInLContainer(lNode, result);\n }\n const tNodeType = tNode.type;\n if (tNodeType & 8) {\n collectNativeNodes(tView, lView, tNode.child, result);\n } else if (tNodeType & 32) {\n const nextRNode = icuContainerIterate(tNode, lView);\n let rNode;\n while (rNode = nextRNode()) {\n result.push(rNode);\n }\n } else if (tNodeType & 16) {\n const nodesInSlot = getProjectionNodes(lView, tNode);\n if (Array.isArray(nodesInSlot)) {\n result.push(...nodesInSlot);\n } else {\n const parentView = getLViewParent(lView[DECLARATION_COMPONENT_VIEW]);\n ngDevMode && assertParentView(parentView);\n collectNativeNodes(parentView[TVIEW], parentView, nodesInSlot, result, true);\n }\n }\n tNode = isProjection ? tNode.projectionNext : tNode.next;\n }\n return result;\n}\nfunction collectNativeNodesInLContainer(lContainer, result) {\n for (let i = CONTAINER_HEADER_OFFSET; i < lContainer.length; i++) {\n const lViewInAContainer = lContainer[i];\n const lViewFirstChildTNode = lViewInAContainer[TVIEW].firstChild;\n if (lViewFirstChildTNode !== null) {\n collectNativeNodes(lViewInAContainer[TVIEW], lViewInAContainer, lViewFirstChildTNode, result);\n }\n }\n if (lContainer[NATIVE] !== lContainer[HOST]) {\n result.push(lContainer[NATIVE]);\n }\n}\nfunction addAfterRenderSequencesForView(lView) {\n if (lView[AFTER_RENDER_SEQUENCES_TO_ADD] !== null) {\n for (const sequence of lView[AFTER_RENDER_SEQUENCES_TO_ADD]) {\n sequence.impl.addSequence(sequence);\n }\n lView[AFTER_RENDER_SEQUENCES_TO_ADD].length = 0;\n }\n}\nlet freeConsumers = [];\nfunction getOrBorrowReactiveLViewConsumer(lView) {\n return lView[REACTIVE_TEMPLATE_CONSUMER] ?? borrowReactiveLViewConsumer(lView);\n}\nfunction borrowReactiveLViewConsumer(lView) {\n const consumer = freeConsumers.pop() ?? Object.create(REACTIVE_LVIEW_CONSUMER_NODE);\n consumer.lView = lView;\n return consumer;\n}\nfunction maybeReturnReactiveLViewConsumer(consumer) {\n if (consumer.lView[REACTIVE_TEMPLATE_CONSUMER] === consumer) {\n return;\n }\n consumer.lView = null;\n freeConsumers.push(consumer);\n}\nconst REACTIVE_LVIEW_CONSUMER_NODE = {\n ...REACTIVE_NODE,\n consumerIsAlwaysLive: true,\n kind: 'template',\n consumerMarkedDirty: node => {\n markAncestorsForTraversal(node.lView);\n },\n consumerOnSignalRead() {\n this.lView[REACTIVE_TEMPLATE_CONSUMER] = this;\n }\n};\nfunction getOrCreateTemporaryConsumer(lView) {\n const consumer = lView[REACTIVE_TEMPLATE_CONSUMER] ?? Object.create(TEMPORARY_CONSUMER_NODE);\n consumer.lView = lView;\n return consumer;\n}\nconst TEMPORARY_CONSUMER_NODE = {\n ...REACTIVE_NODE,\n consumerIsAlwaysLive: true,\n kind: 'template',\n consumerMarkedDirty: node => {\n let parent = getLViewParent(node.lView);\n while (parent && !viewShouldHaveReactiveConsumer(parent[TVIEW])) {\n parent = getLViewParent(parent);\n }\n if (!parent) {\n return;\n }\n markViewForRefresh(parent);\n },\n consumerOnSignalRead() {\n this.lView[REACTIVE_TEMPLATE_CONSUMER] = this;\n }\n};\nfunction viewShouldHaveReactiveConsumer(tView) {\n return tView.type !== 2;\n}\nfunction isReactiveLViewConsumer(node) {\n return node.kind === 'template';\n}\nfunction runEffectsInView(view) {\n if (view[EFFECTS] === null) {\n return;\n }\n let tryFlushEffects = true;\n while (tryFlushEffects) {\n let foundDirtyEffect = false;\n for (const effect of view[EFFECTS]) {\n if (!effect.dirty) {\n continue;\n }\n foundDirtyEffect = true;\n if (effect.zone === null || Zone.current === effect.zone) {\n effect.run();\n } else {\n effect.zone.run(() => effect.run());\n }\n }\n tryFlushEffects = foundDirtyEffect && !!(view[FLAGS] & 8192);\n }\n}\nconst MAXIMUM_REFRESH_RERUNS$1 = 100;\nfunction detectChangesInternal(lView, mode = 0) {\n const environment = lView[ENVIRONMENT];\n const rendererFactory = environment.rendererFactory;\n const checkNoChangesMode = !!ngDevMode && isInCheckNoChangesMode();\n if (!checkNoChangesMode) {\n rendererFactory.begin?.();\n }\n try {\n detectChangesInViewWhileDirty(lView, mode);\n } finally {\n if (!checkNoChangesMode) {\n rendererFactory.end?.();\n }\n }\n}\nfunction detectChangesInViewWhileDirty(lView, mode) {\n const lastIsRefreshingViewsValue = isRefreshingViews();\n try {\n setIsRefreshingViews(true);\n detectChangesInView(lView, mode);\n if (ngDevMode && isExhaustiveCheckNoChanges()) {\n return;\n }\n let retries = 0;\n while (requiresRefreshOrTraversal(lView)) {\n if (retries === MAXIMUM_REFRESH_RERUNS$1) {\n throw new RuntimeError(103, ngDevMode && 'Infinite change detection while trying to refresh views. ' + 'There may be components which each cause the other to require a refresh, ' + 'causing an infinite loop.');\n }\n retries++;\n detectChangesInView(lView, 1);\n }\n } finally {\n setIsRefreshingViews(lastIsRefreshingViewsValue);\n }\n}\nfunction checkNoChangesInternal(lView, exhaustive) {\n setIsInCheckNoChangesMode(exhaustive ? CheckNoChangesMode.Exhaustive : CheckNoChangesMode.OnlyDirtyViews);\n try {\n detectChangesInternal(lView);\n } finally {\n setIsInCheckNoChangesMode(CheckNoChangesMode.Off);\n }\n}\nfunction refreshView(tView, lView, templateFn, context) {\n ngDevMode && assertEqual(isCreationMode(lView), false, 'Should be run in update mode');\n if (isDestroyed(lView)) return;\n const flags = lView[FLAGS];\n const isInCheckNoChangesPass = ngDevMode && isInCheckNoChangesMode();\n const isInExhaustiveCheckNoChangesPass = ngDevMode && isExhaustiveCheckNoChanges();\n enterView(lView);\n let returnConsumerToPool = true;\n let prevConsumer = null;\n let currentConsumer = null;\n if (!isInCheckNoChangesPass) {\n if (viewShouldHaveReactiveConsumer(tView)) {\n currentConsumer = getOrBorrowReactiveLViewConsumer(lView);\n prevConsumer = consumerBeforeComputation(currentConsumer);\n } else if (getActiveConsumer() === null) {\n returnConsumerToPool = false;\n currentConsumer = getOrCreateTemporaryConsumer(lView);\n prevConsumer = consumerBeforeComputation(currentConsumer);\n } else if (lView[REACTIVE_TEMPLATE_CONSUMER]) {\n consumerDestroy(lView[REACTIVE_TEMPLATE_CONSUMER]);\n lView[REACTIVE_TEMPLATE_CONSUMER] = null;\n }\n }\n try {\n resetPreOrderHookFlags(lView);\n setBindingIndex(tView.bindingStartIndex);\n if (templateFn !== null) {\n executeTemplate(tView, lView, templateFn, 2, context);\n }\n const hooksInitPhaseCompleted = (flags & 3) === 3;\n if (!isInCheckNoChangesPass) {\n if (hooksInitPhaseCompleted) {\n const preOrderCheckHooks = tView.preOrderCheckHooks;\n if (preOrderCheckHooks !== null) {\n executeCheckHooks(lView, preOrderCheckHooks, null);\n }\n } else {\n const preOrderHooks = tView.preOrderHooks;\n if (preOrderHooks !== null) {\n executeInitAndCheckHooks(lView, preOrderHooks, 0, null);\n }\n incrementInitPhaseFlags(lView, 0);\n }\n }\n if (!isInExhaustiveCheckNoChangesPass) {\n markTransplantedViewsForRefresh(lView);\n }\n runEffectsInView(lView);\n detectChangesInEmbeddedViews(lView, 0);\n if (tView.contentQueries !== null) {\n refreshContentQueries(tView, lView);\n }\n if (!isInCheckNoChangesPass) {\n if (hooksInitPhaseCompleted) {\n const contentCheckHooks = tView.contentCheckHooks;\n if (contentCheckHooks !== null) {\n executeCheckHooks(lView, contentCheckHooks);\n }\n } else {\n const contentHooks = tView.contentHooks;\n if (contentHooks !== null) {\n executeInitAndCheckHooks(lView, contentHooks, 1);\n }\n incrementInitPhaseFlags(lView, 1);\n }\n }\n processHostBindingOpCodes(tView, lView);\n const components = tView.components;\n if (components !== null) {\n detectChangesInChildComponents(lView, components, 0);\n }\n const viewQuery = tView.viewQuery;\n if (viewQuery !== null) {\n executeViewQueryFn(2, viewQuery, context);\n }\n if (!isInCheckNoChangesPass) {\n if (hooksInitPhaseCompleted) {\n const viewCheckHooks = tView.viewCheckHooks;\n if (viewCheckHooks !== null) {\n executeCheckHooks(lView, viewCheckHooks);\n }\n } else {\n const viewHooks = tView.viewHooks;\n if (viewHooks !== null) {\n executeInitAndCheckHooks(lView, viewHooks, 2);\n }\n incrementInitPhaseFlags(lView, 2);\n }\n }\n if (tView.firstUpdatePass === true) {\n tView.firstUpdatePass = false;\n }\n if (lView[EFFECTS_TO_SCHEDULE]) {\n for (const notifyEffect of lView[EFFECTS_TO_SCHEDULE]) {\n notifyEffect();\n }\n lView[EFFECTS_TO_SCHEDULE] = null;\n }\n if (!isInCheckNoChangesPass) {\n addAfterRenderSequencesForView(lView);\n lView[FLAGS] &= ~(64 | 8);\n }\n } catch (e) {\n if (!isInCheckNoChangesPass) {\n markAncestorsForTraversal(lView);\n }\n throw e;\n } finally {\n if (currentConsumer !== null) {\n consumerAfterComputation(currentConsumer, prevConsumer);\n if (returnConsumerToPool) {\n maybeReturnReactiveLViewConsumer(currentConsumer);\n }\n }\n leaveView();\n }\n}\nfunction detectChangesInEmbeddedViews(lView, mode) {\n for (let lContainer = getFirstLContainer(lView); lContainer !== null; lContainer = getNextLContainer(lContainer)) {\n for (let i = CONTAINER_HEADER_OFFSET; i < lContainer.length; i++) {\n const embeddedLView = lContainer[i];\n detectChangesInViewIfAttached(embeddedLView, mode);\n }\n }\n}\nfunction markTransplantedViewsForRefresh(lView) {\n for (let lContainer = getFirstLContainer(lView); lContainer !== null; lContainer = getNextLContainer(lContainer)) {\n if (!(lContainer[FLAGS] & 2)) continue;\n const movedViews = lContainer[MOVED_VIEWS];\n ngDevMode && assertDefined(movedViews, 'Transplanted View flags set but missing MOVED_VIEWS');\n for (let i = 0; i < movedViews.length; i++) {\n const movedLView = movedViews[i];\n markViewForRefresh(movedLView);\n }\n }\n}\nfunction detectChangesInComponent(hostLView, componentHostIdx, mode) {\n ngDevMode && assertEqual(isCreationMode(hostLView), false, 'Should be run in update mode');\n profiler(ProfilerEvent.ComponentStart);\n const componentView = getComponentLViewByIndex(componentHostIdx, hostLView);\n try {\n detectChangesInViewIfAttached(componentView, mode);\n } finally {\n profiler(ProfilerEvent.ComponentEnd, componentView[CONTEXT]);\n }\n}\nfunction detectChangesInViewIfAttached(lView, mode) {\n if (!viewAttachedToChangeDetector(lView)) {\n return;\n }\n detectChangesInView(lView, mode);\n}\nfunction detectChangesInView(lView, mode) {\n const isInCheckNoChangesPass = ngDevMode && isInCheckNoChangesMode();\n const tView = lView[TVIEW];\n const flags = lView[FLAGS];\n const consumer = lView[REACTIVE_TEMPLATE_CONSUMER];\n let shouldRefreshView = !!(mode === 0 && flags & 16);\n shouldRefreshView ||= !!(flags & 64 && mode === 0 && !isInCheckNoChangesPass);\n shouldRefreshView ||= !!(flags & 1024);\n shouldRefreshView ||= !!(consumer?.dirty && consumerPollProducersForChange(consumer));\n shouldRefreshView ||= !!(ngDevMode && isExhaustiveCheckNoChanges());\n if (consumer) {\n consumer.dirty = false;\n }\n lView[FLAGS] &= ~(8192 | 1024);\n if (shouldRefreshView) {\n refreshView(tView, lView, tView.template, lView[CONTEXT]);\n } else if (flags & 8192) {\n const prevConsumer = setActiveConsumer(null);\n try {\n if (!isInCheckNoChangesPass) {\n runEffectsInView(lView);\n }\n detectChangesInEmbeddedViews(lView, 1);\n const components = tView.components;\n if (components !== null) {\n detectChangesInChildComponents(lView, components, 1);\n }\n if (!isInCheckNoChangesPass) {\n addAfterRenderSequencesForView(lView);\n }\n } finally {\n setActiveConsumer(prevConsumer);\n }\n }\n}\nfunction detectChangesInChildComponents(hostLView, components, mode) {\n for (let i = 0; i < components.length; i++) {\n detectChangesInComponent(hostLView, components[i], mode);\n }\n}\nfunction processHostBindingOpCodes(tView, lView) {\n const hostBindingOpCodes = tView.hostBindingOpCodes;\n if (hostBindingOpCodes === null) return;\n try {\n for (let i = 0; i < hostBindingOpCodes.length; i++) {\n const opCode = hostBindingOpCodes[i];\n if (opCode < 0) {\n setSelectedIndex(~opCode);\n } else {\n const directiveIdx = opCode;\n const bindingRootIndx = hostBindingOpCodes[++i];\n const hostBindingFn = hostBindingOpCodes[++i];\n setBindingRootForHostBindings(bindingRootIndx, directiveIdx);\n const context = lView[directiveIdx];\n profiler(ProfilerEvent.HostBindingsUpdateStart, context);\n try {\n hostBindingFn(2, context);\n } finally {\n profiler(ProfilerEvent.HostBindingsUpdateEnd, context);\n }\n }\n }\n } finally {\n setSelectedIndex(-1);\n }\n}\nfunction markViewDirty(lView, source) {\n const dirtyBitsToUse = isRefreshingViews() ? 64 : 1024 | 64;\n lView[ENVIRONMENT].changeDetectionScheduler?.notify(source);\n while (lView) {\n lView[FLAGS] |= dirtyBitsToUse;\n const parent = getLViewParent(lView);\n if (isRootView(lView) && !parent) {\n return lView;\n }\n lView = parent;\n }\n return null;\n}\nfunction createLContainer(hostNative, currentView, native, tNode) {\n ngDevMode && assertLView(currentView);\n const lContainer = [hostNative, true, 0, currentView, null, tNode, null, native, null, null];\n ngDevMode && assertEqual(lContainer.length, CONTAINER_HEADER_OFFSET, 'Should allocate correct number of slots for LContainer header.');\n return lContainer;\n}\nfunction getLViewFromLContainer(lContainer, index) {\n const adjustedIndex = CONTAINER_HEADER_OFFSET + index;\n if (adjustedIndex < lContainer.length) {\n const lView = lContainer[adjustedIndex];\n ngDevMode && assertLView(lView);\n return lView;\n }\n return undefined;\n}\nfunction addLViewToLContainer(lContainer, lView, index, addToDOM = true) {\n const tView = lView[TVIEW];\n insertView(tView, lView, lContainer, index);\n if (addToDOM) {\n const beforeNode = getBeforeNodeForView(index, lContainer);\n const renderer = lView[RENDERER];\n const parentRNode = renderer.parentNode(lContainer[NATIVE]);\n if (parentRNode !== null) {\n addViewToDOM(tView, lContainer[T_HOST], renderer, lView, parentRNode, beforeNode);\n }\n }\n const hydrationInfo = lView[HYDRATION];\n if (hydrationInfo !== null && hydrationInfo.firstChild !== null) {\n hydrationInfo.firstChild = null;\n }\n}\nfunction removeLViewFromLContainer(lContainer, index) {\n const lView = detachView(lContainer, index);\n if (lView !== undefined) {\n destroyLView(lView[TVIEW], lView);\n }\n return lView;\n}\nfunction detachView(lContainer, removeIndex) {\n if (lContainer.length <= CONTAINER_HEADER_OFFSET) return;\n const indexInContainer = CONTAINER_HEADER_OFFSET + removeIndex;\n const viewToDetach = lContainer[indexInContainer];\n if (viewToDetach) {\n const declarationLContainer = viewToDetach[DECLARATION_LCONTAINER];\n if (declarationLContainer !== null && declarationLContainer !== lContainer) {\n detachMovedView(declarationLContainer, viewToDetach);\n }\n if (removeIndex > 0) {\n lContainer[indexInContainer - 1][NEXT] = viewToDetach[NEXT];\n }\n const removedLView = removeFromArray(lContainer, CONTAINER_HEADER_OFFSET + removeIndex);\n removeViewFromDOM(viewToDetach[TVIEW], viewToDetach);\n const lQueries = removedLView[QUERIES];\n if (lQueries !== null) {\n lQueries.detachView(removedLView[TVIEW]);\n }\n viewToDetach[PARENT] = null;\n viewToDetach[NEXT] = null;\n viewToDetach[FLAGS] &= ~128;\n }\n return viewToDetach;\n}\nfunction insertView(tView, lView, lContainer, index) {\n ngDevMode && assertLView(lView);\n ngDevMode && assertLContainer(lContainer);\n const indexInContainer = CONTAINER_HEADER_OFFSET + index;\n const containerLength = lContainer.length;\n if (index > 0) {\n lContainer[indexInContainer - 1][NEXT] = lView;\n }\n if (index < containerLength - CONTAINER_HEADER_OFFSET) {\n lView[NEXT] = lContainer[indexInContainer];\n addToArray(lContainer, CONTAINER_HEADER_OFFSET + index, lView);\n } else {\n lContainer.push(lView);\n lView[NEXT] = null;\n }\n lView[PARENT] = lContainer;\n const declarationLContainer = lView[DECLARATION_LCONTAINER];\n if (declarationLContainer !== null && lContainer !== declarationLContainer) {\n trackMovedView(declarationLContainer, lView);\n }\n const lQueries = lView[QUERIES];\n if (lQueries !== null) {\n lQueries.insertView(tView);\n }\n updateAncestorTraversalFlagsOnAttach(lView);\n lView[FLAGS] |= 128;\n}\nfunction trackMovedView(declarationContainer, lView) {\n ngDevMode && assertDefined(lView, 'LView required');\n ngDevMode && assertLContainer(declarationContainer);\n const movedViews = declarationContainer[MOVED_VIEWS];\n const parent = lView[PARENT];\n ngDevMode && assertDefined(parent, 'missing parent');\n if (isLView(parent)) {\n declarationContainer[FLAGS] |= 2;\n } else {\n const insertedComponentLView = parent[PARENT][DECLARATION_COMPONENT_VIEW];\n ngDevMode && assertDefined(insertedComponentLView, 'Missing insertedComponentLView');\n const declaredComponentLView = lView[DECLARATION_COMPONENT_VIEW];\n ngDevMode && assertDefined(declaredComponentLView, 'Missing declaredComponentLView');\n if (declaredComponentLView !== insertedComponentLView) {\n declarationContainer[FLAGS] |= 2;\n }\n }\n if (movedViews === null) {\n declarationContainer[MOVED_VIEWS] = [lView];\n } else {\n movedViews.push(lView);\n }\n}\nclass ViewRef {\n _lView;\n _cdRefInjectingView;\n _appRef = null;\n _attachedToViewContainer = false;\n exhaustive;\n get rootNodes() {\n const lView = this._lView;\n const tView = lView[TVIEW];\n return collectNativeNodes(tView, lView, tView.firstChild, []);\n }\n constructor(_lView, _cdRefInjectingView) {\n this._lView = _lView;\n this._cdRefInjectingView = _cdRefInjectingView;\n }\n get context() {\n return this._lView[CONTEXT];\n }\n set context(value) {\n if (ngDevMode) {\n console.warn('Angular: Replacing the `context` object of an `EmbeddedViewRef` is deprecated.');\n }\n this._lView[CONTEXT] = value;\n }\n get destroyed() {\n return isDestroyed(this._lView);\n }\n destroy() {\n if (this._appRef) {\n this._appRef.detachView(this);\n } else if (this._attachedToViewContainer) {\n const parent = this._lView[PARENT];\n if (isLContainer(parent)) {\n const viewRefs = parent[VIEW_REFS];\n const index = viewRefs ? viewRefs.indexOf(this) : -1;\n if (index > -1) {\n ngDevMode && assertEqual(index, parent.indexOf(this._lView) - CONTAINER_HEADER_OFFSET, 'An attached view should be in the same position within its container as its ViewRef in the VIEW_REFS array.');\n detachView(parent, index);\n removeFromArray(viewRefs, index);\n }\n }\n this._attachedToViewContainer = false;\n }\n destroyLView(this._lView[TVIEW], this._lView);\n }\n onDestroy(callback) {\n storeLViewOnDestroy(this._lView, callback);\n }\n markForCheck() {\n markViewDirty(this._cdRefInjectingView || this._lView, 4);\n }\n detach() {\n this._lView[FLAGS] &= ~128;\n }\n reattach() {\n updateAncestorTraversalFlagsOnAttach(this._lView);\n this._lView[FLAGS] |= 128;\n }\n detectChanges() {\n this._lView[FLAGS] |= 1024;\n detectChangesInternal(this._lView);\n }\n checkNoChanges() {\n if (ngDevMode) {\n try {\n this.exhaustive ??= this._lView[INJECTOR].get(UseExhaustiveCheckNoChanges, USE_EXHAUSTIVE_CHECK_NO_CHANGES_DEFAULT);\n } catch {\n this.exhaustive = USE_EXHAUSTIVE_CHECK_NO_CHANGES_DEFAULT;\n }\n checkNoChangesInternal(this._lView, this.exhaustive);\n }\n }\n attachToViewContainerRef() {\n if (this._appRef) {\n throw new RuntimeError(902, ngDevMode && 'This view is already attached directly to the ApplicationRef!');\n }\n this._attachedToViewContainer = true;\n }\n detachFromAppRef() {\n this._appRef = null;\n const isRoot = isRootView(this._lView);\n const declarationContainer = this._lView[DECLARATION_LCONTAINER];\n if (declarationContainer !== null && !isRoot) {\n detachMovedView(declarationContainer, this._lView);\n }\n detachViewFromDOM(this._lView[TVIEW], this._lView);\n }\n attachToAppRef(appRef) {\n if (this._attachedToViewContainer) {\n throw new RuntimeError(902, ngDevMode && 'This view is already attached to a ViewContainer!');\n }\n this._appRef = appRef;\n const isRoot = isRootView(this._lView);\n const declarationContainer = this._lView[DECLARATION_LCONTAINER];\n if (declarationContainer !== null && !isRoot) {\n trackMovedView(declarationContainer, this._lView);\n }\n updateAncestorTraversalFlagsOnAttach(this._lView);\n }\n}\nfunction isViewDirty(view) {\n return requiresRefreshOrTraversal(view._lView) || !!(view._lView[FLAGS] & 64);\n}\nfunction markForRefresh(view) {\n markViewForRefresh(view._lView);\n}\nlet TemplateRef = /*#__PURE__*/(() => {\n class TemplateRef {\n _declarationLView;\n _declarationTContainer;\n elementRef;\n static __NG_ELEMENT_ID__ = injectTemplateRef;\n constructor(_declarationLView, _declarationTContainer, elementRef) {\n this._declarationLView = _declarationLView;\n this._declarationTContainer = _declarationTContainer;\n this.elementRef = elementRef;\n }\n get ssrId() {\n return this._declarationTContainer.tView?.ssrId || null;\n }\n createEmbeddedView(context, injector) {\n return this.createEmbeddedViewImpl(context, injector);\n }\n createEmbeddedViewImpl(context, injector, dehydratedView) {\n const embeddedLView = createAndRenderEmbeddedLView(this._declarationLView, this._declarationTContainer, context, {\n embeddedViewInjector: injector,\n dehydratedView\n });\n return new ViewRef(embeddedLView);\n }\n }\n return TemplateRef;\n})();\nfunction injectTemplateRef() {\n return createTemplateRef(getCurrentTNode(), getLView());\n}\nfunction createTemplateRef(hostTNode, hostLView) {\n if (hostTNode.type & 4) {\n ngDevMode && assertDefined(hostTNode.tView, 'TView must be allocated');\n return new TemplateRef(hostLView, hostTNode, createElementRef(hostTNode, hostLView));\n }\n return null;\n}\nconst AT_THIS_LOCATION = '<-- AT THIS LOCATION';\nfunction getFriendlyStringFromTNodeType(tNodeType) {\n switch (tNodeType) {\n case 4:\n return 'view container';\n case 2:\n return 'element';\n case 8:\n return 'ng-container';\n case 32:\n return 'icu';\n case 64:\n return 'i18n';\n case 16:\n return 'projection';\n case 1:\n return 'text';\n case 128:\n return '@let';\n default:\n return '';\n }\n}\nfunction validateMatchingNode(node, nodeType, tagName, lView, tNode, isViewContainerAnchor = false) {\n if (!node || node.nodeType !== nodeType || node.nodeType === Node.ELEMENT_NODE && node.tagName.toLowerCase() !== tagName?.toLowerCase()) {\n const expectedNode = shortRNodeDescription(nodeType, tagName, null);\n let header = `During hydration Angular expected ${expectedNode} but `;\n const hostComponentDef = getDeclarationComponentDef(lView);\n const componentClassName = hostComponentDef?.type?.name;\n const expectedDom = describeExpectedDom(lView, tNode, isViewContainerAnchor);\n const expected = `Angular expected this DOM:\\n\\n${expectedDom}\\n\\n`;\n let actual = '';\n const componentHostElement = unwrapRNode(lView[HOST]);\n if (!node) {\n header += `the node was not found.\\n\\n`;\n markRNodeAsHavingHydrationMismatch(componentHostElement, expectedDom);\n } else {\n const actualNode = shortRNodeDescription(node.nodeType, node.tagName ?? null, node.textContent ?? null);\n header += `found ${actualNode}.\\n\\n`;\n const actualDom = describeDomFromNode(node);\n actual = `Actual DOM is:\\n\\n${actualDom}\\n\\n`;\n markRNodeAsHavingHydrationMismatch(componentHostElement, expectedDom, actualDom);\n }\n const footer = getHydrationErrorFooter(componentClassName);\n const message = header + expected + actual + getHydrationAttributeNote() + footer;\n throw new RuntimeError(-500, message);\n }\n}\nfunction validateSiblingNodeExists(node) {\n validateNodeExists(node);\n if (!node.nextSibling) {\n const header = 'During hydration Angular expected more sibling nodes to be present.\\n\\n';\n const actual = `Actual DOM is:\\n\\n${describeDomFromNode(node)}\\n\\n`;\n const footer = getHydrationErrorFooter();\n const message = header + actual + footer;\n markRNodeAsHavingHydrationMismatch(node, '', actual);\n throw new RuntimeError(-501, message);\n }\n}\nfunction validateNodeExists(node, lView = null, tNode = null) {\n if (!node) {\n const header = 'During hydration, Angular expected an element to be present at this location.\\n\\n';\n let expected = '';\n let footer = '';\n if (lView !== null && tNode !== null) {\n expected = describeExpectedDom(lView, tNode, false);\n footer = getHydrationErrorFooter();\n markRNodeAsHavingHydrationMismatch(unwrapRNode(lView[HOST]), expected, '');\n }\n throw new RuntimeError(-502, `${header}${expected}\\n\\n${footer}`);\n }\n}\nfunction nodeNotFoundError(lView, tNode) {\n const header = 'During serialization, Angular was unable to find an element in the DOM:\\n\\n';\n const expected = `${describeExpectedDom(lView, tNode, false)}\\n\\n`;\n const footer = getHydrationErrorFooter();\n throw new RuntimeError(-502, header + expected + footer);\n}\nfunction nodeNotFoundAtPathError(host, path) {\n const header = `During hydration Angular was unable to locate a node ` + `using the \"${path}\" path, starting from the ${describeRNode(host)} node.\\n\\n`;\n const footer = getHydrationErrorFooter();\n markRNodeAsHavingHydrationMismatch(host);\n throw new RuntimeError(-502, header + footer);\n}\nfunction unsupportedProjectionOfDomNodes(rNode) {\n const header = 'During serialization, Angular detected DOM nodes ' + 'that were created outside of Angular context and provided as projectable nodes ' + '(likely via `ViewContainerRef.createComponent` or `createComponent` APIs). ' + 'Hydration is not supported for such cases, consider refactoring the code to avoid ' + 'this pattern or using `ngSkipHydration` on the host element of the component.\\n\\n';\n const actual = `${describeDomFromNode(rNode)}\\n\\n`;\n const message = header + actual + getHydrationAttributeNote();\n return new RuntimeError(-503, message);\n}\nfunction invalidSkipHydrationHost(rNode) {\n const header = 'The `ngSkipHydration` flag is applied on a node ' + \"that doesn't act as a component host. Hydration can be \" + 'skipped only on per-component basis.\\n\\n';\n const actual = `${describeDomFromNode(rNode)}\\n\\n`;\n const footer = 'Please move the `ngSkipHydration` attribute to the component host element.\\n\\n';\n const message = header + actual + footer;\n return new RuntimeError(-504, message);\n}\nfunction stringifyTNodeAttrs(tNode) {\n const results = [];\n if (tNode.attrs) {\n for (let i = 0; i < tNode.attrs.length;) {\n const attrName = tNode.attrs[i++];\n if (typeof attrName == 'number') {\n break;\n }\n const attrValue = tNode.attrs[i++];\n results.push(`${attrName}=\"${shorten(attrValue)}\"`);\n }\n }\n return results.join(' ');\n}\nconst internalAttrs = /*#__PURE__*/new Set(['ngh', 'ng-version', 'ng-server-context']);\nfunction stringifyRNodeAttrs(rNode) {\n const results = [];\n for (let i = 0; i < rNode.attributes.length; i++) {\n const attr = rNode.attributes[i];\n if (internalAttrs.has(attr.name)) continue;\n results.push(`${attr.name}=\"${shorten(attr.value)}\"`);\n }\n return results.join(' ');\n}\nfunction describeTNode(tNode, innerContent = '…') {\n switch (tNode.type) {\n case 1:\n const content = tNode.value ? `(${tNode.value})` : '';\n return `#text${content}`;\n case 2:\n const attrs = stringifyTNodeAttrs(tNode);\n const tag = tNode.value.toLowerCase();\n return `<${tag}${attrs ? ' ' + attrs : ''}>${innerContent}`;\n case 8:\n return '';\n case 4:\n return '';\n default:\n const typeAsString = getFriendlyStringFromTNodeType(tNode.type);\n return `#node(${typeAsString})`;\n }\n}\nfunction describeRNode(rNode, innerContent = '…') {\n const node = rNode;\n switch (node.nodeType) {\n case Node.ELEMENT_NODE:\n const tag = node.tagName.toLowerCase();\n const attrs = stringifyRNodeAttrs(node);\n return `<${tag}${attrs ? ' ' + attrs : ''}>${innerContent}`;\n case Node.TEXT_NODE:\n const content = node.textContent ? shorten(node.textContent) : '';\n return `#text${content ? `(${content})` : ''}`;\n case Node.COMMENT_NODE:\n return ``;\n default:\n return `#node(${node.nodeType})`;\n }\n}\nfunction describeExpectedDom(lView, tNode, isViewContainerAnchor) {\n const spacer = ' ';\n let content = '';\n if (tNode.prev) {\n content += spacer + '…\\n';\n content += spacer + describeTNode(tNode.prev) + '\\n';\n } else if (tNode.type && tNode.type & 12) {\n content += spacer + '…\\n';\n }\n if (isViewContainerAnchor) {\n content += spacer + describeTNode(tNode) + '\\n';\n content += spacer + ` ${AT_THIS_LOCATION}\\n`;\n } else {\n content += spacer + describeTNode(tNode) + ` ${AT_THIS_LOCATION}\\n`;\n }\n content += spacer + '…\\n';\n const parentRNode = tNode.type ? getParentRElement(lView[TVIEW], tNode, lView) : null;\n if (parentRNode) {\n content = describeRNode(parentRNode, '\\n' + content);\n }\n return content;\n}\nfunction describeDomFromNode(node) {\n const spacer = ' ';\n let content = '';\n const currentNode = node;\n if (currentNode.previousSibling) {\n content += spacer + '…\\n';\n content += spacer + describeRNode(currentNode.previousSibling) + '\\n';\n }\n content += spacer + describeRNode(currentNode) + ` ${AT_THIS_LOCATION}\\n`;\n if (node.nextSibling) {\n content += spacer + '…\\n';\n }\n if (node.parentNode) {\n content = describeRNode(currentNode.parentNode, '\\n' + content);\n }\n return content;\n}\nfunction shortRNodeDescription(nodeType, tagName, textContent) {\n switch (nodeType) {\n case Node.ELEMENT_NODE:\n return `<${tagName.toLowerCase()}>`;\n case Node.TEXT_NODE:\n const content = textContent ? ` (with the \"${shorten(textContent)}\" content)` : '';\n return `a text node${content}`;\n case Node.COMMENT_NODE:\n return 'a comment node';\n default:\n return `#node(nodeType=${nodeType})`;\n }\n}\nfunction getHydrationErrorFooter(componentClassName) {\n const componentInfo = componentClassName ? `the \"${componentClassName}\"` : 'corresponding';\n return `To fix this problem:\\n` + ` * check ${componentInfo} component for hydration-related issues\\n` + ` * check to see if your template has valid HTML structure\\n` + ` * or skip hydration by adding the \\`ngSkipHydration\\` attribute ` + `to its host node in a template\\n\\n`;\n}\nfunction getHydrationAttributeNote() {\n return 'Note: attributes are only displayed to better represent the DOM' + ' but have no effect on hydration mismatches.\\n\\n';\n}\nfunction stripNewlines(input) {\n return input.replace(/\\s+/gm, '');\n}\nfunction shorten(input, maxLength = 50) {\n if (!input) {\n return '';\n }\n input = stripNewlines(input);\n return input.length > maxLength ? `${input.substring(0, maxLength - 1)}…` : input;\n}\nfunction getInsertInFrontOfRNodeWithI18n(parentTNode, currentTNode, lView) {\n const tNodeInsertBeforeIndex = currentTNode.insertBeforeIndex;\n const insertBeforeIndex = Array.isArray(tNodeInsertBeforeIndex) ? tNodeInsertBeforeIndex[0] : tNodeInsertBeforeIndex;\n if (insertBeforeIndex === null) {\n return getInsertInFrontOfRNodeWithNoI18n(parentTNode, currentTNode, lView);\n } else {\n ngDevMode && assertIndexInRange(lView, insertBeforeIndex);\n return unwrapRNode(lView[insertBeforeIndex]);\n }\n}\nfunction processI18nInsertBefore(renderer, childTNode, lView, childRNode, parentRElement) {\n const tNodeInsertBeforeIndex = childTNode.insertBeforeIndex;\n if (Array.isArray(tNodeInsertBeforeIndex)) {\n ngDevMode && assertDomNode(childRNode);\n let i18nParent = childRNode;\n let anchorRNode = null;\n if (!(childTNode.type & 3)) {\n anchorRNode = i18nParent;\n i18nParent = parentRElement;\n }\n if (i18nParent !== null && childTNode.componentOffset === -1) {\n for (let i = 1; i < tNodeInsertBeforeIndex.length; i++) {\n const i18nChild = lView[tNodeInsertBeforeIndex[i]];\n nativeInsertBefore(renderer, i18nParent, i18nChild, anchorRNode, false);\n }\n }\n }\n}\nfunction getOrCreateTNode(tView, index, type, name, attrs) {\n ngDevMode && index !== 0 && assertGreaterThanOrEqual(index, HEADER_OFFSET, \"TNodes can't be in the LView header.\");\n ngDevMode && assertPureTNodeType(type);\n let tNode = tView.data[index];\n if (tNode === null) {\n tNode = createTNodeAtIndex(tView, index, type, name, attrs);\n if (isInI18nBlock()) {\n tNode.flags |= 32;\n }\n } else if (tNode.type & 64) {\n tNode.type = type;\n tNode.value = name;\n tNode.attrs = attrs;\n const parent = getCurrentParentTNode();\n tNode.injectorIndex = parent === null ? -1 : parent.injectorIndex;\n ngDevMode && assertTNodeForTView(tNode, tView);\n ngDevMode && assertEqual(index, tNode.index, 'Expecting same index');\n }\n setCurrentTNode(tNode, true);\n return tNode;\n}\nfunction createTNodeAtIndex(tView, index, type, name, attrs) {\n const currentTNode = getCurrentTNodePlaceholderOk();\n const isParent = isCurrentTNodeParent();\n const parent = isParent ? currentTNode : currentTNode && currentTNode.parent;\n const tNode = tView.data[index] = createTNode(tView, parent, type, index, name, attrs);\n linkTNodeInTView(tView, tNode, currentTNode, isParent);\n return tNode;\n}\nfunction linkTNodeInTView(tView, tNode, currentTNode, isParent) {\n if (tView.firstChild === null) {\n tView.firstChild = tNode;\n }\n if (currentTNode !== null) {\n if (isParent) {\n if (currentTNode.child == null && tNode.parent !== null) {\n currentTNode.child = tNode;\n }\n } else {\n if (currentTNode.next === null) {\n currentTNode.next = tNode;\n tNode.prev = currentTNode;\n }\n }\n }\n}\nfunction createTNode(tView, tParent, type, index, value, attrs) {\n ngDevMode && index !== 0 && assertGreaterThanOrEqual(index, HEADER_OFFSET, \"TNodes can't be in the LView header.\");\n ngDevMode && assertNotSame(attrs, undefined, \"'undefined' is not valid value for 'attrs'\");\n ngDevMode && tParent && assertTNodeForTView(tParent, tView);\n let injectorIndex = tParent ? tParent.injectorIndex : -1;\n let flags = 0;\n if (isInSkipHydrationBlock$1()) {\n flags |= 128;\n }\n const tNode = {\n type,\n index,\n insertBeforeIndex: null,\n injectorIndex,\n directiveStart: -1,\n directiveEnd: -1,\n directiveStylingLast: -1,\n componentOffset: -1,\n controlDirectiveIndex: -1,\n customControlIndex: -1,\n propertyBindings: null,\n flags,\n providerIndexes: 0,\n value: value,\n attrs: attrs,\n mergedAttrs: null,\n localNames: null,\n initialInputs: null,\n inputs: null,\n hostDirectiveInputs: null,\n outputs: null,\n hostDirectiveOutputs: null,\n directiveToIndex: null,\n tView: null,\n next: null,\n prev: null,\n projectionNext: null,\n child: null,\n parent: tParent,\n projection: null,\n styles: null,\n stylesWithoutHost: null,\n residualStyles: undefined,\n classes: null,\n classesWithoutHost: null,\n residualClasses: undefined,\n classBindings: 0,\n styleBindings: 0\n };\n if (ngDevMode) {\n Object.seal(tNode);\n }\n return tNode;\n}\nfunction addTNodeAndUpdateInsertBeforeIndex(previousTNodes, newTNode) {\n ngDevMode && assertEqual(newTNode.insertBeforeIndex, null, 'We expect that insertBeforeIndex is not set');\n previousTNodes.push(newTNode);\n if (previousTNodes.length > 1) {\n for (let i = previousTNodes.length - 2; i >= 0; i--) {\n const existingTNode = previousTNodes[i];\n if (!isI18nText(existingTNode)) {\n if (isNewTNodeCreatedBefore(existingTNode, newTNode) && getInsertBeforeIndex(existingTNode) === null) {\n setInsertBeforeIndex(existingTNode, newTNode.index);\n }\n }\n }\n }\n}\nfunction isI18nText(tNode) {\n return !(tNode.type & 64);\n}\nfunction isNewTNodeCreatedBefore(existingTNode, newTNode) {\n return isI18nText(newTNode) || existingTNode.index > newTNode.index;\n}\nfunction getInsertBeforeIndex(tNode) {\n const index = tNode.insertBeforeIndex;\n return Array.isArray(index) ? index[0] : index;\n}\nfunction setInsertBeforeIndex(tNode, value) {\n const index = tNode.insertBeforeIndex;\n if (Array.isArray(index)) {\n index[0] = value;\n } else {\n setI18nHandling(getInsertInFrontOfRNodeWithI18n, processI18nInsertBefore);\n tNode.insertBeforeIndex = value;\n }\n}\nfunction getTIcu(tView, index) {\n const value = tView.data[index];\n if (value === null || typeof value === 'string') return null;\n if (ngDevMode && !(value.hasOwnProperty('tView') || value.hasOwnProperty('currentCaseLViewIndex'))) {\n throwError(\"We expect to get 'null'|'TIcu'|'TIcuContainer', but got: \" + value);\n }\n const tIcu = value.hasOwnProperty('currentCaseLViewIndex') ? value : value.value;\n ngDevMode && assertTIcu(tIcu);\n return tIcu;\n}\nfunction setTIcu(tView, index, tIcu) {\n const tNode = tView.data[index];\n ngDevMode && assertEqual(tNode === null || tNode.hasOwnProperty('tView'), true, \"We expect to get 'null'|'TIcuContainer'\");\n if (tNode === null) {\n tView.data[index] = tIcu;\n } else {\n ngDevMode && assertTNodeType(tNode, 32);\n tNode.value = tIcu;\n }\n}\nfunction setTNodeInsertBeforeIndex(tNode, index) {\n ngDevMode && assertTNode(tNode);\n let insertBeforeIndex = tNode.insertBeforeIndex;\n if (insertBeforeIndex === null) {\n setI18nHandling(getInsertInFrontOfRNodeWithI18n, processI18nInsertBefore);\n insertBeforeIndex = tNode.insertBeforeIndex = [null, index];\n } else {\n assertEqual(Array.isArray(insertBeforeIndex), true, 'Expecting array here');\n insertBeforeIndex.push(index);\n }\n}\nfunction createTNodePlaceholder(tView, previousTNodes, index) {\n const tNode = createTNodeAtIndex(tView, index, 64, null, null);\n addTNodeAndUpdateInsertBeforeIndex(previousTNodes, tNode);\n return tNode;\n}\nfunction getCurrentICUCaseIndex(tIcu, lView) {\n const currentCase = lView[tIcu.currentCaseLViewIndex];\n return currentCase === null ? currentCase : currentCase < 0 ? ~currentCase : currentCase;\n}\nfunction getParentFromIcuCreateOpCode(mergedCode) {\n return mergedCode >>> 17;\n}\nfunction getRefFromIcuCreateOpCode(mergedCode) {\n return (mergedCode & 131070) >>> 1;\n}\nfunction getInstructionFromIcuCreateOpCode(mergedCode) {\n return mergedCode & 1;\n}\nfunction icuCreateOpCode(opCode, parentIdx, refIdx) {\n ngDevMode && assertGreaterThanOrEqual(parentIdx, 0, 'Missing parent index');\n ngDevMode && assertGreaterThan(refIdx, 0, 'Missing ref index');\n return opCode | parentIdx << 17 | refIdx << 1;\n}\nfunction isRootTemplateMessage(subTemplateIndex) {\n return subTemplateIndex === -1;\n}\nfunction enterIcu(state, tIcu, lView) {\n state.index = 0;\n const currentCase = getCurrentICUCaseIndex(tIcu, lView);\n if (currentCase !== null) {\n ngDevMode && assertNumberInRange(currentCase, 0, tIcu.cases.length - 1);\n state.removes = tIcu.remove[currentCase];\n } else {\n state.removes = EMPTY_ARRAY;\n }\n}\nfunction icuContainerIteratorNext(state) {\n if (state.index < state.removes.length) {\n const removeOpCode = state.removes[state.index++];\n ngDevMode && assertNumber(removeOpCode, 'Expecting OpCode number');\n if (removeOpCode > 0) {\n const rNode = state.lView[removeOpCode];\n ngDevMode && assertDomNode(rNode);\n return rNode;\n } else {\n state.stack.push(state.index, state.removes);\n const tIcuIndex = ~removeOpCode;\n const tIcu = state.lView[TVIEW].data[tIcuIndex];\n ngDevMode && assertTIcu(tIcu);\n enterIcu(state, tIcu, state.lView);\n return icuContainerIteratorNext(state);\n }\n } else {\n if (state.stack.length === 0) {\n state.lView = undefined;\n return null;\n } else {\n state.removes = state.stack.pop();\n state.index = state.stack.pop();\n return icuContainerIteratorNext(state);\n }\n }\n}\nfunction loadIcuContainerVisitor() {\n const _state = {\n stack: [],\n index: -1\n };\n function icuContainerIteratorStart(tIcuContainerNode, lView) {\n _state.lView = lView;\n while (_state.stack.length) _state.stack.pop();\n ngDevMode && assertTNodeForLView(tIcuContainerNode, lView);\n enterIcu(_state, tIcuContainerNode.value, lView);\n return icuContainerIteratorNext.bind(null, _state);\n }\n return icuContainerIteratorStart;\n}\nfunction createIcuIterator(tIcu, lView) {\n const state = {\n stack: [],\n index: -1,\n lView\n };\n ngDevMode && assertTIcu(tIcu);\n enterIcu(state, tIcu, lView);\n return icuContainerIteratorNext.bind(null, state);\n}\nconst REF_EXTRACTOR_REGEXP = /* @__PURE__ */(() => {\n return new RegExp(`^(\\\\d+)*(${REFERENCE_NODE_BODY}|${REFERENCE_NODE_HOST})*(.*)`);\n})();\nfunction compressNodeLocation(referenceNode, path) {\n const result = [referenceNode];\n for (const segment of path) {\n const lastIdx = result.length - 1;\n if (lastIdx > 0 && result[lastIdx - 1] === segment) {\n const value = result[lastIdx] || 1;\n result[lastIdx] = value + 1;\n } else {\n result.push(segment, '');\n }\n }\n return result.join('');\n}\nfunction decompressNodeLocation(path) {\n const matches = path.match(REF_EXTRACTOR_REGEXP);\n const [_, refNodeId, refNodeName, rest] = matches;\n const ref = refNodeId ? parseInt(refNodeId, 10) : refNodeName;\n const steps = [];\n for (const [_, step, count] of rest.matchAll(/(f|n)(\\d*)/g)) {\n const repeat = parseInt(count, 10) || 1;\n steps.push(step, repeat);\n }\n return [ref, ...steps];\n}\nfunction isFirstElementInNgContainer(tNode) {\n return !tNode.prev && tNode.parent?.type === 8;\n}\nfunction getNoOffsetIndex(tNode) {\n return tNode.index - HEADER_OFFSET;\n}\nfunction isDisconnectedNode(tNode, lView) {\n return !(tNode.type & (16 | 128)) && !!lView[tNode.index] && isDisconnectedRNode(unwrapRNode(lView[tNode.index]));\n}\nfunction isDisconnectedRNode(rNode) {\n return !!rNode && !rNode.isConnected;\n}\nfunction locateI18nRNodeByIndex(hydrationInfo, noOffsetIndex) {\n const i18nNodes = hydrationInfo.i18nNodes;\n if (i18nNodes) {\n return i18nNodes.get(noOffsetIndex);\n }\n return undefined;\n}\nfunction tryLocateRNodeByPath(hydrationInfo, lView, noOffsetIndex) {\n const nodes = hydrationInfo.data[NODES];\n const path = nodes?.[noOffsetIndex];\n return path ? locateRNodeByPath(path, lView) : null;\n}\nfunction locateNextRNode(hydrationInfo, tView, lView, tNode) {\n const noOffsetIndex = getNoOffsetIndex(tNode);\n let native = locateI18nRNodeByIndex(hydrationInfo, noOffsetIndex);\n if (native === undefined) {\n const nodes = hydrationInfo.data[NODES];\n if (nodes?.[noOffsetIndex]) {\n native = locateRNodeByPath(nodes[noOffsetIndex], lView);\n } else if (tView.firstChild === tNode) {\n native = hydrationInfo.firstChild;\n } else {\n const previousTNodeParent = tNode.prev === null;\n const previousTNode = tNode.prev ?? tNode.parent;\n ngDevMode && assertDefined(previousTNode, 'Unexpected state: current TNode does not have a connection ' + 'to the previous node or a parent node.');\n if (isFirstElementInNgContainer(tNode)) {\n const noOffsetParentIndex = getNoOffsetIndex(tNode.parent);\n native = getSegmentHead(hydrationInfo, noOffsetParentIndex);\n } else {\n let previousRElement = getNativeByTNode(previousTNode, lView);\n if (previousTNodeParent) {\n native = previousRElement.firstChild;\n } else {\n const noOffsetPrevSiblingIndex = getNoOffsetIndex(previousTNode);\n const segmentHead = getSegmentHead(hydrationInfo, noOffsetPrevSiblingIndex);\n if (previousTNode.type === 2 && segmentHead) {\n const numRootNodesToSkip = calcSerializedContainerSize(hydrationInfo, noOffsetPrevSiblingIndex);\n const nodesToSkip = numRootNodesToSkip + 1;\n native = siblingAfter(nodesToSkip, segmentHead);\n } else {\n native = previousRElement.nextSibling;\n }\n }\n }\n }\n }\n return native;\n}\nfunction siblingAfter(skip, from) {\n let currentNode = from;\n for (let i = 0; i < skip; i++) {\n ngDevMode && validateSiblingNodeExists(currentNode);\n currentNode = currentNode.nextSibling;\n }\n return currentNode;\n}\nfunction stringifyNavigationInstructions(instructions) {\n const container = [];\n for (let i = 0; i < instructions.length; i += 2) {\n const step = instructions[i];\n const repeat = instructions[i + 1];\n for (let r = 0; r < repeat; r++) {\n container.push(step === NODE_NAVIGATION_STEP_FIRST_CHILD ? 'firstChild' : 'nextSibling');\n }\n }\n return container.join('.');\n}\nfunction navigateToNode(from, instructions) {\n let node = from;\n for (let i = 0; i < instructions.length; i += 2) {\n const step = instructions[i];\n const repeat = instructions[i + 1];\n for (let r = 0; r < repeat; r++) {\n if (ngDevMode && !node) {\n throw nodeNotFoundAtPathError(from, stringifyNavigationInstructions(instructions));\n }\n switch (step) {\n case NODE_NAVIGATION_STEP_FIRST_CHILD:\n node = node.firstChild;\n break;\n case NODE_NAVIGATION_STEP_NEXT_SIBLING:\n node = node.nextSibling;\n break;\n }\n }\n }\n if (ngDevMode && !node) {\n throw nodeNotFoundAtPathError(from, stringifyNavigationInstructions(instructions));\n }\n return node;\n}\nfunction locateRNodeByPath(path, lView) {\n const [referenceNode, ...navigationInstructions] = decompressNodeLocation(path);\n let ref;\n if (referenceNode === REFERENCE_NODE_HOST) {\n ref = lView[DECLARATION_COMPONENT_VIEW][HOST];\n } else if (referenceNode === REFERENCE_NODE_BODY) {\n ref = ɵɵresolveBody(lView[DECLARATION_COMPONENT_VIEW][HOST]);\n } else {\n const parentElementId = Number(referenceNode);\n ref = unwrapRNode(lView[parentElementId + HEADER_OFFSET]);\n }\n return navigateToNode(ref, navigationInstructions);\n}\nfunction navigateBetween(start, finish) {\n if (start === finish) {\n return [];\n } else if (start.parentElement == null || finish.parentElement == null) {\n return null;\n } else if (start.parentElement === finish.parentElement) {\n return navigateBetweenSiblings(start, finish);\n } else {\n const parent = finish.parentElement;\n const parentPath = navigateBetween(start, parent);\n const childPath = navigateBetween(parent.firstChild, finish);\n if (!parentPath || !childPath) return null;\n return [...parentPath, NODE_NAVIGATION_STEP_FIRST_CHILD, ...childPath];\n }\n}\nfunction navigateBetweenSiblings(start, finish) {\n const nav = [];\n let node = null;\n for (node = start; node != null && node !== finish; node = node.nextSibling) {\n nav.push(NODE_NAVIGATION_STEP_NEXT_SIBLING);\n }\n return node == null ? null : nav;\n}\nfunction calcPathBetween(from, to, fromNodeName) {\n const path = navigateBetween(from, to);\n return path === null ? null : compressNodeLocation(fromNodeName, path);\n}\nfunction calcPathForNode(tNode, lView, excludedParentNodes) {\n let parentTNode = tNode.parent;\n let parentIndex;\n let parentRNode;\n let referenceNodeName;\n while (parentTNode !== null && (isDisconnectedNode(parentTNode, lView) || excludedParentNodes?.has(parentTNode.index))) {\n parentTNode = parentTNode.parent;\n }\n if (parentTNode === null || !(parentTNode.type & 3)) {\n parentIndex = referenceNodeName = REFERENCE_NODE_HOST;\n parentRNode = lView[DECLARATION_COMPONENT_VIEW][HOST];\n } else {\n parentIndex = parentTNode.index;\n parentRNode = unwrapRNode(lView[parentIndex]);\n referenceNodeName = renderStringify(parentIndex - HEADER_OFFSET);\n }\n let rNode = unwrapRNode(lView[tNode.index]);\n if (tNode.type & (12 | 32)) {\n const firstRNode = getFirstNativeNode(lView, tNode);\n if (firstRNode) {\n rNode = firstRNode;\n }\n }\n let path = calcPathBetween(parentRNode, rNode, referenceNodeName);\n if (path === null && parentRNode !== rNode) {\n const body = parentRNode.ownerDocument.body;\n path = calcPathBetween(body, rNode, REFERENCE_NODE_BODY);\n if (path === null) {\n throw nodeNotFoundError(lView, tNode);\n }\n }\n return path;\n}\nfunction gatherDeferBlocksCommentNodes(doc, node) {\n const commentNodesIterator = doc.createNodeIterator(node, NodeFilter.SHOW_COMMENT, {\n acceptNode\n });\n let currentNode;\n const nodesByBlockId = new Map();\n while (currentNode = commentNodesIterator.nextNode()) {\n const nghPattern = 'ngh=';\n const content = currentNode?.textContent;\n const nghIdx = content?.indexOf(nghPattern) ?? -1;\n if (nghIdx > -1) {\n const nghValue = content.substring(nghIdx + nghPattern.length).trim();\n ngDevMode && assertEqual(nghValue.startsWith('d'), true, 'Invalid defer block id found in a comment node.');\n nodesByBlockId.set(nghValue, currentNode);\n }\n }\n return nodesByBlockId;\n}\nfunction acceptNode(node) {\n return node.textContent?.trimStart().startsWith('ngh=') ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_REJECT;\n}\nlet _isI18nHydrationSupportEnabled = false;\nlet _prepareI18nBlockForHydrationImpl = () => {};\nfunction setIsI18nHydrationSupportEnabled(enabled) {\n _isI18nHydrationSupportEnabled = enabled;\n}\nfunction isI18nHydrationSupportEnabled() {\n return _isI18nHydrationSupportEnabled;\n}\nfunction prepareI18nBlockForHydration(lView, index, parentTNode, subTemplateIndex) {\n _prepareI18nBlockForHydrationImpl(lView, index, parentTNode, subTemplateIndex);\n}\nfunction enablePrepareI18nBlockForHydrationImpl() {\n _prepareI18nBlockForHydrationImpl = prepareI18nBlockForHydrationImpl;\n}\nfunction isI18nHydrationEnabled(injector) {\n injector = injector ?? inject(Injector);\n return injector.get(IS_I18N_HYDRATION_ENABLED, false);\n}\nfunction getOrComputeI18nChildren(tView, context) {\n let i18nChildren = context.i18nChildren.get(tView);\n if (i18nChildren === undefined) {\n i18nChildren = collectI18nChildren(tView);\n context.i18nChildren.set(tView, i18nChildren);\n }\n return i18nChildren;\n}\nfunction collectI18nChildren(tView) {\n const children = new Set();\n function collectI18nViews(node) {\n children.add(node.index);\n switch (node.kind) {\n case 1:\n case 2:\n {\n for (const childNode of node.children) {\n collectI18nViews(childNode);\n }\n break;\n }\n case 3:\n {\n for (const caseNodes of node.cases) {\n for (const caseNode of caseNodes) {\n collectI18nViews(caseNode);\n }\n }\n break;\n }\n }\n }\n for (let i = HEADER_OFFSET; i < tView.bindingStartIndex; i++) {\n const tI18n = tView.data[i];\n if (!tI18n || !tI18n.ast) {\n continue;\n }\n for (const node of tI18n.ast) {\n collectI18nViews(node);\n }\n }\n return children.size === 0 ? null : children;\n}\nfunction trySerializeI18nBlock(lView, index, context) {\n if (!context.isI18nHydrationEnabled) {\n return null;\n }\n const tView = lView[TVIEW];\n const tI18n = tView.data[index];\n if (!tI18n || !tI18n.ast) {\n return null;\n }\n const parentTNode = tView.data[tI18n.parentTNodeIndex];\n if (parentTNode && isI18nInSkipHydrationBlock(parentTNode)) {\n return null;\n }\n const serializedI18nBlock = {\n caseQueue: [],\n disconnectedNodes: new Set(),\n disjointNodes: new Set()\n };\n serializeI18nBlock(lView, serializedI18nBlock, context, tI18n.ast);\n return serializedI18nBlock.caseQueue.length === 0 && serializedI18nBlock.disconnectedNodes.size === 0 && serializedI18nBlock.disjointNodes.size === 0 ? null : serializedI18nBlock;\n}\nfunction serializeI18nBlock(lView, serializedI18nBlock, context, nodes) {\n let prevRNode = null;\n for (const node of nodes) {\n const nextRNode = serializeI18nNode(lView, serializedI18nBlock, context, node);\n if (nextRNode) {\n if (isDisjointNode(prevRNode, nextRNode)) {\n serializedI18nBlock.disjointNodes.add(node.index - HEADER_OFFSET);\n }\n prevRNode = nextRNode;\n }\n }\n return prevRNode;\n}\nfunction isDisjointNode(prevNode, nextNode) {\n return prevNode && prevNode.nextSibling !== nextNode;\n}\nfunction serializeI18nNode(lView, serializedI18nBlock, context, node) {\n const maybeRNode = unwrapRNode(lView[node.index]);\n if (!maybeRNode || isDisconnectedRNode(maybeRNode)) {\n serializedI18nBlock.disconnectedNodes.add(node.index - HEADER_OFFSET);\n return null;\n }\n const rNode = maybeRNode;\n switch (node.kind) {\n case 0:\n {\n processTextNodeBeforeSerialization(context, rNode);\n break;\n }\n case 1:\n case 2:\n {\n serializeI18nBlock(lView, serializedI18nBlock, context, node.children);\n break;\n }\n case 3:\n {\n const currentCase = lView[node.currentCaseLViewIndex];\n if (currentCase != null) {\n const caseIdx = currentCase < 0 ? ~currentCase : currentCase;\n serializedI18nBlock.caseQueue.push(caseIdx);\n serializeI18nBlock(lView, serializedI18nBlock, context, node.cases[caseIdx]);\n }\n break;\n }\n }\n return getFirstNativeNodeForI18nNode(lView, node);\n}\nfunction getFirstNativeNodeForI18nNode(lView, node) {\n const tView = lView[TVIEW];\n const maybeTNode = tView.data[node.index];\n if (isTNodeShape(maybeTNode)) {\n return getFirstNativeNode(lView, maybeTNode);\n } else if (node.kind === 3) {\n const icuIterator = createIcuIterator(maybeTNode, lView);\n let rNode = icuIterator();\n return rNode ?? unwrapRNode(lView[node.index]);\n } else {\n return unwrapRNode(lView[node.index]) ?? null;\n }\n}\nfunction setCurrentNode(state, node) {\n state.currentNode = node;\n}\nfunction appendI18nNodeToCollection(context, state, astNode) {\n const noOffsetIndex = astNode.index - HEADER_OFFSET;\n const {\n disconnectedNodes\n } = context;\n const currentNode = state.currentNode;\n if (state.isConnected) {\n context.i18nNodes.set(noOffsetIndex, currentNode);\n disconnectedNodes.delete(noOffsetIndex);\n } else {\n disconnectedNodes.add(noOffsetIndex);\n }\n return currentNode;\n}\nfunction skipSiblingNodes(state, skip) {\n let currentNode = state.currentNode;\n for (let i = 0; i < skip; i++) {\n if (!currentNode) {\n break;\n }\n currentNode = currentNode?.nextSibling ?? null;\n }\n return currentNode;\n}\nfunction forkHydrationState(state, nextNode) {\n return {\n currentNode: nextNode,\n isConnected: state.isConnected\n };\n}\nfunction prepareI18nBlockForHydrationImpl(lView, index, parentTNode, subTemplateIndex) {\n const hydrationInfo = lView[HYDRATION];\n if (!hydrationInfo) {\n return;\n }\n if (!isI18nHydrationSupportEnabled() || parentTNode && (isI18nInSkipHydrationBlock(parentTNode) || isDisconnectedNode$1(hydrationInfo, parentTNode.index - HEADER_OFFSET))) {\n return;\n }\n const tView = lView[TVIEW];\n const tI18n = tView.data[index];\n ngDevMode && assertDefined(tI18n, 'Expected i18n data to be present in a given TView slot during hydration');\n function findHydrationRoot() {\n if (isRootTemplateMessage(subTemplateIndex)) {\n ngDevMode && assertDefined(parentTNode, 'Expected parent TNode while hydrating i18n root');\n const rootNode = locateNextRNode(hydrationInfo, tView, lView, parentTNode);\n return parentTNode.type & 8 ? rootNode : rootNode.firstChild;\n }\n return hydrationInfo?.firstChild;\n }\n const currentNode = findHydrationRoot();\n ngDevMode && assertDefined(currentNode, 'Expected root i18n node during hydration');\n const disconnectedNodes = initDisconnectedNodes(hydrationInfo) ?? new Set();\n const i18nNodes = hydrationInfo.i18nNodes ??= new Map();\n const caseQueue = hydrationInfo.data[I18N_DATA]?.[index - HEADER_OFFSET] ?? [];\n const dehydratedIcuData = hydrationInfo.dehydratedIcuData ??= new Map();\n collectI18nNodesFromDom({\n hydrationInfo,\n lView,\n i18nNodes,\n disconnectedNodes,\n caseQueue,\n dehydratedIcuData\n }, {\n currentNode,\n isConnected: true\n }, tI18n.ast);\n hydrationInfo.disconnectedNodes = disconnectedNodes.size === 0 ? null : disconnectedNodes;\n}\nfunction collectI18nNodesFromDom(context, state, nodeOrNodes) {\n if (Array.isArray(nodeOrNodes)) {\n let nextState = state;\n for (const node of nodeOrNodes) {\n const targetNode = tryLocateRNodeByPath(context.hydrationInfo, context.lView, node.index - HEADER_OFFSET);\n if (targetNode) {\n nextState = forkHydrationState(state, targetNode);\n }\n collectI18nNodesFromDom(context, nextState, node);\n }\n } else {\n if (context.disconnectedNodes.has(nodeOrNodes.index - HEADER_OFFSET)) {\n return;\n }\n switch (nodeOrNodes.kind) {\n case 0:\n {\n const currentNode = appendI18nNodeToCollection(context, state, nodeOrNodes);\n setCurrentNode(state, currentNode?.nextSibling ?? null);\n break;\n }\n case 1:\n {\n collectI18nNodesFromDom(context, forkHydrationState(state, state.currentNode?.firstChild ?? null), nodeOrNodes.children);\n const currentNode = appendI18nNodeToCollection(context, state, nodeOrNodes);\n setCurrentNode(state, currentNode?.nextSibling ?? null);\n break;\n }\n case 2:\n {\n const noOffsetIndex = nodeOrNodes.index - HEADER_OFFSET;\n const {\n hydrationInfo\n } = context;\n const containerSize = getNgContainerSize(hydrationInfo, noOffsetIndex);\n switch (nodeOrNodes.type) {\n case 0:\n {\n const currentNode = appendI18nNodeToCollection(context, state, nodeOrNodes);\n if (isSerializedElementContainer(hydrationInfo, noOffsetIndex)) {\n collectI18nNodesFromDom(context, state, nodeOrNodes.children);\n const nextNode = skipSiblingNodes(state, 1);\n setCurrentNode(state, nextNode);\n } else {\n collectI18nNodesFromDom(context, forkHydrationState(state, state.currentNode?.firstChild ?? null), nodeOrNodes.children);\n setCurrentNode(state, currentNode?.nextSibling ?? null);\n if (containerSize !== null) {\n const nextNode = skipSiblingNodes(state, containerSize + 1);\n setCurrentNode(state, nextNode);\n }\n }\n break;\n }\n case 1:\n {\n ngDevMode && assertNotEqual(containerSize, null, 'Expected a container size while hydrating i18n subtemplate');\n appendI18nNodeToCollection(context, state, nodeOrNodes);\n const nextNode = skipSiblingNodes(state, containerSize + 1);\n setCurrentNode(state, nextNode);\n break;\n }\n }\n break;\n }\n case 3:\n {\n const selectedCase = state.isConnected ? context.caseQueue.shift() : null;\n const childState = {\n currentNode: null,\n isConnected: false\n };\n for (let i = 0; i < nodeOrNodes.cases.length; i++) {\n collectI18nNodesFromDom(context, i === selectedCase ? state : childState, nodeOrNodes.cases[i]);\n }\n if (selectedCase !== null) {\n context.dehydratedIcuData.set(nodeOrNodes.index, {\n case: selectedCase,\n node: nodeOrNodes\n });\n }\n const currentNode = appendI18nNodeToCollection(context, state, nodeOrNodes);\n setCurrentNode(state, currentNode?.nextSibling ?? null);\n break;\n }\n }\n }\n}\nlet _claimDehydratedIcuCaseImpl = () => {};\nfunction claimDehydratedIcuCase(lView, icuIndex, caseIndex) {\n _claimDehydratedIcuCaseImpl(lView, icuIndex, caseIndex);\n}\nfunction enableClaimDehydratedIcuCaseImpl() {\n _claimDehydratedIcuCaseImpl = claimDehydratedIcuCaseImpl;\n}\nfunction claimDehydratedIcuCaseImpl(lView, icuIndex, caseIndex) {\n const dehydratedIcuDataMap = lView[HYDRATION]?.dehydratedIcuData;\n if (dehydratedIcuDataMap) {\n const dehydratedIcuData = dehydratedIcuDataMap.get(icuIndex);\n if (dehydratedIcuData?.case === caseIndex) {\n dehydratedIcuDataMap.delete(icuIndex);\n }\n }\n}\nfunction cleanupI18nHydrationData(lView) {\n const hydrationInfo = lView[HYDRATION];\n if (hydrationInfo) {\n const {\n i18nNodes,\n dehydratedIcuData: dehydratedIcuDataMap\n } = hydrationInfo;\n if (i18nNodes && dehydratedIcuDataMap) {\n const renderer = lView[RENDERER];\n for (const dehydratedIcuData of dehydratedIcuDataMap.values()) {\n cleanupDehydratedIcuData(renderer, i18nNodes, dehydratedIcuData);\n }\n }\n hydrationInfo.i18nNodes = undefined;\n hydrationInfo.dehydratedIcuData = undefined;\n }\n}\nfunction cleanupDehydratedIcuData(renderer, i18nNodes, dehydratedIcuData) {\n for (const node of dehydratedIcuData.node.cases[dehydratedIcuData.case]) {\n const rNode = i18nNodes.get(node.index - HEADER_OFFSET);\n if (rNode) {\n nativeRemoveNode(renderer, rNode, false);\n }\n }\n}\nfunction removeDehydratedViews(lContainer) {\n const views = lContainer[DEHYDRATED_VIEWS] ?? [];\n const parentLView = lContainer[PARENT];\n const renderer = parentLView[RENDERER];\n const retainedViews = [];\n for (const view of views) {\n if (view.data[DEFER_BLOCK_ID] !== undefined) {\n retainedViews.push(view);\n } else {\n removeDehydratedView(view, renderer);\n ngDevMode && ngDevMode.dehydratedViewsRemoved++;\n }\n }\n lContainer[DEHYDRATED_VIEWS] = retainedViews;\n}\nfunction removeDehydratedViewList(deferBlock) {\n const {\n lContainer\n } = deferBlock;\n const dehydratedViews = lContainer[DEHYDRATED_VIEWS];\n if (dehydratedViews === null) return;\n const parentLView = lContainer[PARENT];\n const renderer = parentLView[RENDERER];\n for (const view of dehydratedViews) {\n removeDehydratedView(view, renderer);\n ngDevMode && ngDevMode.dehydratedViewsRemoved++;\n }\n}\nfunction removeDehydratedView(dehydratedView, renderer) {\n let nodesRemoved = 0;\n let currentRNode = dehydratedView.firstChild;\n if (currentRNode) {\n const numNodes = dehydratedView.data[NUM_ROOT_NODES];\n while (nodesRemoved < numNodes) {\n ngDevMode && validateSiblingNodeExists(currentRNode);\n const nextSibling = currentRNode.nextSibling;\n nativeRemoveNode(renderer, currentRNode, false);\n currentRNode = nextSibling;\n nodesRemoved++;\n }\n }\n}\nfunction cleanupLContainer(lContainer) {\n removeDehydratedViews(lContainer);\n const hostLView = lContainer[HOST];\n if (isLView(hostLView)) {\n cleanupLView(hostLView);\n }\n for (let i = CONTAINER_HEADER_OFFSET; i < lContainer.length; i++) {\n cleanupLView(lContainer[i]);\n }\n}\nfunction cleanupLView(lView) {\n cleanupI18nHydrationData(lView);\n const tView = lView[TVIEW];\n for (let i = HEADER_OFFSET; i < tView.bindingStartIndex; i++) {\n if (isLContainer(lView[i])) {\n const lContainer = lView[i];\n cleanupLContainer(lContainer);\n } else if (isLView(lView[i])) {\n cleanupLView(lView[i]);\n }\n }\n}\nfunction cleanupDehydratedViews(appRef) {\n const viewRefs = appRef._views;\n for (const viewRef of viewRefs) {\n const lNode = getLNodeForHydration(viewRef);\n if (lNode !== null && lNode[HOST] !== null) {\n if (isLView(lNode)) {\n cleanupLView(lNode);\n } else {\n cleanupLContainer(lNode);\n }\n ngDevMode && ngDevMode.dehydratedViewsCleanupRuns++;\n }\n }\n}\nfunction cleanupHydratedDeferBlocks(deferBlock, hydratedBlocks, registry, appRef) {\n if (deferBlock !== null) {\n registry.cleanup(hydratedBlocks);\n cleanupLContainer(deferBlock.lContainer);\n cleanupDehydratedViews(appRef);\n }\n}\nfunction locateDehydratedViewsInContainer(currentRNode, serializedViews) {\n const dehydratedViews = [];\n for (const serializedView of serializedViews) {\n for (let i = 0; i < (serializedView[MULTIPLIER] ?? 1); i++) {\n const view = {\n data: serializedView,\n firstChild: null\n };\n if (serializedView[NUM_ROOT_NODES] > 0) {\n view.firstChild = currentRNode;\n currentRNode = siblingAfter(serializedView[NUM_ROOT_NODES], currentRNode);\n }\n dehydratedViews.push(view);\n }\n }\n return [currentRNode, dehydratedViews];\n}\nlet _findMatchingDehydratedViewImpl = () => null;\nlet _findAndReconcileMatchingDehydratedViewsImpl = () => null;\nfunction enableFindMatchingDehydratedViewImpl() {\n _findMatchingDehydratedViewImpl = findMatchingDehydratedViewImpl;\n _findAndReconcileMatchingDehydratedViewsImpl = findAndReconcileMatchingDehydratedViewsImpl;\n}\nfunction findMatchingDehydratedViewImpl(lContainer, template) {\n if (hasMatchingDehydratedView(lContainer, template)) {\n return lContainer[DEHYDRATED_VIEWS].shift();\n } else {\n removeDehydratedViews(lContainer);\n return null;\n }\n}\nfunction findMatchingDehydratedView(lContainer, template) {\n return _findMatchingDehydratedViewImpl(lContainer, template);\n}\nfunction findAndReconcileMatchingDehydratedViewsImpl(lContainer, templateTNode, hostLView) {\n if (templateTNode.tView.ssrId === null) return null;\n const dehydratedView = findMatchingDehydratedView(lContainer, templateTNode.tView.ssrId);\n if (hostLView[TVIEW].firstUpdatePass && dehydratedView === null) {\n removeStaleDehydratedBranch(hostLView, templateTNode);\n }\n return dehydratedView;\n}\nfunction findAndReconcileMatchingDehydratedViews(lContainer, templateTNode, hostLView) {\n return _findAndReconcileMatchingDehydratedViewsImpl(lContainer, templateTNode, hostLView);\n}\nfunction removeStaleDehydratedBranch(hostLView, tNode) {\n let currentTNode = tNode;\n while (currentTNode) {\n if (cleanupMatchingDehydratedViews(hostLView, currentTNode)) return;\n if ((currentTNode.flags & 256) === 256) {\n break;\n }\n currentTNode = currentTNode.prev;\n }\n currentTNode = tNode.next;\n while (currentTNode) {\n if ((currentTNode.flags & 512) !== 512) {\n break;\n }\n if (cleanupMatchingDehydratedViews(hostLView, currentTNode)) return;\n currentTNode = currentTNode.next;\n }\n}\nfunction hasMatchingDehydratedView(lContainer, template) {\n const views = lContainer[DEHYDRATED_VIEWS];\n if (!template || views === null || views.length === 0) {\n return false;\n }\n return views[0].data[TEMPLATE_ID] === template;\n}\nfunction cleanupMatchingDehydratedViews(hostLView, currentTNode) {\n const ssrId = currentTNode.tView?.ssrId;\n if (ssrId == null) return false;\n const container = hostLView[currentTNode.index];\n if (isLContainer(container) && hasMatchingDehydratedView(container, ssrId)) {\n removeDehydratedViews(container);\n return true;\n }\n return false;\n}\nlet ComponentRef$1 = class ComponentRef {};\nlet ComponentFactory$1 = class ComponentFactory {};\nclass _NullComponentFactoryResolver {\n resolveComponentFactory(component) {\n throw new RuntimeError(917, typeof ngDevMode !== 'undefined' && ngDevMode && `No component factory found for ${stringify(component)}.`);\n }\n}\nlet ComponentFactoryResolver$1 = class ComponentFactoryResolver {\n static NULL = /*#__PURE__*/new _NullComponentFactoryResolver();\n};\nclass RendererFactory2 {}\nlet Renderer2 = /*#__PURE__*/(() => {\n class Renderer2 {\n destroyNode = null;\n static __NG_ELEMENT_ID__ = () => injectRenderer2();\n }\n return Renderer2;\n})();\nfunction injectRenderer2() {\n const lView = getLView();\n const tNode = getCurrentTNode();\n const nodeAtIndex = getComponentLViewByIndex(tNode.index, lView);\n return (isLView(nodeAtIndex) ? nodeAtIndex : lView)[RENDERER];\n}\nlet Sanitizer = /*#__PURE__*/(() => {\n class Sanitizer {\n static ɵprov = /* @__PURE__ */\n __defineInjectable({\n token: Sanitizer,\n providedIn: 'root',\n factory: () => null\n });\n }\n return Sanitizer;\n})();\nfunction isModuleWithProviders(value) {\n return value.ngModule !== undefined;\n}\nfunction isNgModule(value) {\n return !!getNgModuleDef(value);\n}\nfunction isPipe(value) {\n return !!getPipeDef$1(value);\n}\nfunction isDirective(value) {\n return !!getDirectiveDef(value);\n}\nfunction isComponent(value) {\n return !!getComponentDef(value);\n}\nfunction getDependencyTypeForError(type) {\n if (getComponentDef(type)) return 'component';\n if (getDirectiveDef(type)) return 'directive';\n if (getPipeDef$1(type)) return 'pipe';\n return 'type';\n}\nfunction verifyStandaloneImport(depType, importingType) {\n if (isForwardRef(depType)) {\n depType = resolveForwardRef(depType);\n if (!depType) {\n throw new Error(`Expected forwardRef function, imported from \"${stringifyForError(importingType)}\", to return a standalone entity or NgModule but got \"${stringifyForError(depType) || depType}\".`);\n }\n }\n if (getNgModuleDef(depType) == null) {\n const def = getComponentDef(depType) || getDirectiveDef(depType) || getPipeDef$1(depType);\n if (def != null) {\n if (!def.standalone) {\n const type = getDependencyTypeForError(depType);\n throw new Error(`The \"${stringifyForError(depType)}\" ${type}, imported from \"${stringifyForError(importingType)}\", is not standalone. Does the ${type} have the standalone: false flag?`);\n }\n } else {\n if (isModuleWithProviders(depType)) {\n throw new Error(`A module with providers was imported from \"${stringifyForError(importingType)}\". Modules with providers are not supported in standalone components imports.`);\n } else {\n throw new Error(`The \"${stringifyForError(depType)}\" type, imported from \"${stringifyForError(importingType)}\", must be a standalone component / directive / pipe or an NgModule. Did you forget to add the required @Component / @Directive / @Pipe or @NgModule annotation?`);\n }\n }\n }\n}\nclass DepsTracker {\n ownerNgModule = /*#__PURE__*/new WeakMap();\n ngModulesWithSomeUnresolvedDecls = /*#__PURE__*/new Set();\n ngModulesScopeCache = /*#__PURE__*/new WeakMap();\n standaloneComponentsScopeCache = /*#__PURE__*/new WeakMap();\n resolveNgModulesDecls() {\n if (this.ngModulesWithSomeUnresolvedDecls.size === 0) {\n return;\n }\n for (const moduleType of this.ngModulesWithSomeUnresolvedDecls) {\n const def = getNgModuleDef(moduleType);\n if (def?.declarations) {\n for (const decl of maybeUnwrapFn(def.declarations)) {\n if (isComponent(decl)) {\n this.ownerNgModule.set(decl, moduleType);\n }\n }\n }\n }\n this.ngModulesWithSomeUnresolvedDecls.clear();\n }\n getComponentDependencies(type, rawImports) {\n this.resolveNgModulesDecls();\n const def = getComponentDef(type);\n if (def === null) {\n throw new Error(`Attempting to get component dependencies for a type that is not a component: ${type}`);\n }\n if (def.standalone) {\n const scope = this.getStandaloneComponentScope(type, rawImports);\n if (scope.compilation.isPoisoned) {\n return {\n dependencies: []\n };\n }\n return {\n dependencies: [...scope.compilation.directives, ...scope.compilation.pipes, ...scope.compilation.ngModules]\n };\n } else {\n if (!this.ownerNgModule.has(type)) {\n return {\n dependencies: []\n };\n }\n const scope = this.getNgModuleScope(this.ownerNgModule.get(type));\n if (scope.compilation.isPoisoned) {\n return {\n dependencies: []\n };\n }\n return {\n dependencies: [...scope.compilation.directives, ...scope.compilation.pipes]\n };\n }\n }\n registerNgModule(type, scopeInfo) {\n if (!isNgModule(type)) {\n throw new Error(`Attempting to register a Type which is not NgModule as NgModule: ${type}`);\n }\n this.ngModulesWithSomeUnresolvedDecls.add(type);\n }\n clearScopeCacheFor(type) {\n this.ngModulesScopeCache.delete(type);\n this.standaloneComponentsScopeCache.delete(type);\n }\n getNgModuleScope(type) {\n if (this.ngModulesScopeCache.has(type)) {\n return this.ngModulesScopeCache.get(type);\n }\n const scope = this.computeNgModuleScope(type);\n this.ngModulesScopeCache.set(type, scope);\n return scope;\n }\n computeNgModuleScope(type) {\n const def = getNgModuleDefOrThrow(type);\n const scope = {\n exported: {\n directives: new Set(),\n pipes: new Set()\n },\n compilation: {\n directives: new Set(),\n pipes: new Set()\n }\n };\n for (const imported of maybeUnwrapFn(def.imports)) {\n if (isNgModule(imported)) {\n const importedScope = this.getNgModuleScope(imported);\n addSet(importedScope.exported.directives, scope.compilation.directives);\n addSet(importedScope.exported.pipes, scope.compilation.pipes);\n } else if (isStandalone(imported)) {\n if (isDirective(imported) || isComponent(imported)) {\n scope.compilation.directives.add(imported);\n } else if (isPipe(imported)) {\n scope.compilation.pipes.add(imported);\n } else {\n throw new RuntimeError(980, 'The standalone imported type is neither a component nor a directive nor a pipe');\n }\n } else {\n scope.compilation.isPoisoned = true;\n break;\n }\n }\n if (!scope.compilation.isPoisoned) {\n for (const decl of maybeUnwrapFn(def.declarations)) {\n if (isNgModule(decl) || isStandalone(decl)) {\n scope.compilation.isPoisoned = true;\n break;\n }\n if (isPipe(decl)) {\n scope.compilation.pipes.add(decl);\n } else {\n scope.compilation.directives.add(decl);\n }\n }\n }\n for (const exported of maybeUnwrapFn(def.exports)) {\n if (isNgModule(exported)) {\n const exportedScope = this.getNgModuleScope(exported);\n addSet(exportedScope.exported.directives, scope.exported.directives);\n addSet(exportedScope.exported.pipes, scope.exported.pipes);\n addSet(exportedScope.exported.directives, scope.compilation.directives);\n addSet(exportedScope.exported.pipes, scope.compilation.pipes);\n } else if (isPipe(exported)) {\n scope.exported.pipes.add(exported);\n } else {\n scope.exported.directives.add(exported);\n }\n }\n return scope;\n }\n getStandaloneComponentScope(type, rawImports) {\n if (this.standaloneComponentsScopeCache.has(type)) {\n return this.standaloneComponentsScopeCache.get(type);\n }\n const ans = this.computeStandaloneComponentScope(type, rawImports);\n this.standaloneComponentsScopeCache.set(type, ans);\n return ans;\n }\n computeStandaloneComponentScope(type, rawImports) {\n const ans = {\n compilation: {\n directives: new Set([type]),\n pipes: new Set(),\n ngModules: new Set()\n }\n };\n for (const rawImport of flatten(rawImports ?? [])) {\n const imported = resolveForwardRef(rawImport);\n try {\n verifyStandaloneImport(imported, type);\n } catch (e) {\n ans.compilation.isPoisoned = true;\n return ans;\n }\n if (isNgModule(imported)) {\n ans.compilation.ngModules.add(imported);\n const importedScope = this.getNgModuleScope(imported);\n if (importedScope.exported.isPoisoned) {\n ans.compilation.isPoisoned = true;\n return ans;\n }\n addSet(importedScope.exported.directives, ans.compilation.directives);\n addSet(importedScope.exported.pipes, ans.compilation.pipes);\n } else if (isPipe(imported)) {\n ans.compilation.pipes.add(imported);\n } else if (isDirective(imported) || isComponent(imported)) {\n ans.compilation.directives.add(imported);\n } else {\n ans.compilation.isPoisoned = true;\n return ans;\n }\n }\n return ans;\n }\n isOrphanComponent(cmp) {\n const def = getComponentDef(cmp);\n if (!def || def.standalone) {\n return false;\n }\n this.resolveNgModulesDecls();\n return !this.ownerNgModule.has(cmp);\n }\n}\nfunction addSet(sourceSet, targetSet) {\n for (const m of sourceSet) {\n targetSet.add(m);\n }\n}\nconst depsTracker = /*#__PURE__*/new DepsTracker();\nconst NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR = {};\nclass ChainedInjector {\n injector;\n parentInjector;\n constructor(injector, parentInjector) {\n this.injector = injector;\n this.parentInjector = parentInjector;\n }\n get(token, notFoundValue, options) {\n const value = this.injector.get(token, NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR, options);\n if (value !== NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR || notFoundValue === NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR) {\n return value;\n }\n return this.parentInjector.get(token, notFoundValue, options);\n }\n}\nfunction computeStaticStyling(tNode, attrs, writeToHost) {\n ngDevMode && assertFirstCreatePass(getTView(), 'Expecting to be called in first template pass only');\n let styles = writeToHost ? tNode.styles : null;\n let classes = writeToHost ? tNode.classes : null;\n let mode = 0;\n if (attrs !== null) {\n for (let i = 0; i < attrs.length; i++) {\n const value = attrs[i];\n if (typeof value === 'number') {\n mode = value;\n } else if (mode == 1) {\n classes = concatStringsWithSpace(classes, value);\n } else if (mode == 2) {\n const style = value;\n const styleValue = attrs[++i];\n styles = concatStringsWithSpace(styles, style + ': ' + styleValue + ';');\n }\n }\n }\n writeToHost ? tNode.styles = styles : tNode.stylesWithoutHost = styles;\n writeToHost ? tNode.classes = classes : tNode.classesWithoutHost = classes;\n}\nfunction ɵɵdirectiveInject(token, flags = 0) {\n const lView = getLView();\n if (lView === null) {\n ngDevMode && assertInjectImplementationNotEqual(ɵɵdirectiveInject);\n return __inject(token, flags);\n }\n const tNode = getCurrentTNode();\n const value = getOrCreateInjectable(tNode, lView, resolveForwardRef(token), flags);\n ngDevMode && emitInjectEvent(token, value, flags);\n return value;\n}\nfunction ɵɵinvalidFactory() {\n const msg = ngDevMode ? `This constructor was not compatible with Dependency Injection.` : 'invalid';\n throw new Error(msg);\n}\nfunction resolveDirectives(tView, lView, tNode, localRefs, directiveMatcher) {\n ngDevMode && assertFirstCreatePass(tView);\n const exportsMap = localRefs === null ? null : {\n '': -1\n };\n const matchedDirectiveDefs = directiveMatcher(tView, tNode);\n if (matchedDirectiveDefs !== null) {\n let directiveDefs = matchedDirectiveDefs;\n let hostDirectiveDefs = null;\n let hostDirectiveRanges = null;\n for (const def of matchedDirectiveDefs) {\n if (def.resolveHostDirectives !== null) {\n [directiveDefs, hostDirectiveDefs, hostDirectiveRanges] = def.resolveHostDirectives(matchedDirectiveDefs);\n break;\n }\n }\n ngDevMode && assertNoDuplicateDirectives(directiveDefs);\n initializeDirectives(tView, lView, tNode, directiveDefs, exportsMap, hostDirectiveDefs, hostDirectiveRanges);\n }\n if (exportsMap !== null && localRefs !== null) {\n cacheMatchingLocalNames(tNode, localRefs, exportsMap);\n }\n}\nfunction cacheMatchingLocalNames(tNode, localRefs, exportsMap) {\n const localNames = tNode.localNames = [];\n for (let i = 0; i < localRefs.length; i += 2) {\n const index = exportsMap[localRefs[i + 1]];\n if (index == null) throw new RuntimeError(-301, ngDevMode && `Export of name '${localRefs[i + 1]}' not found!`);\n localNames.push(localRefs[i], index);\n }\n}\nfunction markAsComponentHost(tView, hostTNode, componentOffset) {\n ngDevMode && assertFirstCreatePass(tView);\n ngDevMode && assertGreaterThan(componentOffset, -1, 'componentOffset must be great than -1');\n hostTNode.componentOffset = componentOffset;\n (tView.components ??= []).push(hostTNode.index);\n}\nfunction initializeDirectives(tView, lView, tNode, directives, exportsMap, hostDirectiveDefs, hostDirectiveRanges) {\n ngDevMode && assertFirstCreatePass(tView);\n const directivesLength = directives.length;\n let componentDef = null;\n for (let i = 0; i < directivesLength; i++) {\n const def = directives[i];\n if (componentDef === null && isComponentDef(def)) {\n componentDef = def;\n markAsComponentHost(tView, tNode, i);\n }\n diPublicInInjector(getOrCreateNodeInjectorForNode(tNode, lView), tView, def.type);\n }\n initTNodeFlags(tNode, tView.data.length, directivesLength);\n if (componentDef?.viewProvidersResolver) {\n componentDef.viewProvidersResolver(componentDef);\n }\n for (let i = 0; i < directivesLength; i++) {\n const def = directives[i];\n if (def.providersResolver) {\n def.providersResolver(def);\n }\n }\n let preOrderHooksFound = false;\n let preOrderCheckHooksFound = false;\n let directiveIdx = allocExpando(tView, lView, directivesLength, null);\n ngDevMode && assertSame(directiveIdx, tNode.directiveStart, 'TNode.directiveStart should point to just allocated space');\n if (directivesLength > 0) {\n tNode.directiveToIndex = new Map();\n }\n for (let i = 0; i < directivesLength; i++) {\n const def = directives[i];\n tNode.mergedAttrs = mergeHostAttrs(tNode.mergedAttrs, def.hostAttrs);\n configureViewWithDirective(tView, tNode, lView, directiveIdx, def);\n saveNameToExportMap(directiveIdx, def, exportsMap);\n if (hostDirectiveRanges !== null && hostDirectiveRanges.has(def)) {\n const [start, end] = hostDirectiveRanges.get(def);\n tNode.directiveToIndex.set(def.type, [directiveIdx, start + tNode.directiveStart, end + tNode.directiveStart]);\n } else if (hostDirectiveDefs === null || !hostDirectiveDefs.has(def)) {\n tNode.directiveToIndex.set(def.type, directiveIdx);\n }\n if (def.contentQueries !== null) tNode.flags |= 4;\n if (def.hostBindings !== null || def.hostAttrs !== null || def.hostVars !== 0) tNode.flags |= 64;\n const lifeCycleHooks = def.type.prototype;\n if (!preOrderHooksFound && (lifeCycleHooks.ngOnChanges || lifeCycleHooks.ngOnInit || lifeCycleHooks.ngDoCheck)) {\n (tView.preOrderHooks ??= []).push(tNode.index);\n preOrderHooksFound = true;\n }\n if (!preOrderCheckHooksFound && (lifeCycleHooks.ngOnChanges || lifeCycleHooks.ngDoCheck)) {\n (tView.preOrderCheckHooks ??= []).push(tNode.index);\n preOrderCheckHooksFound = true;\n }\n directiveIdx++;\n }\n initializeInputAndOutputAliases(tView, tNode, hostDirectiveDefs);\n}\nfunction initializeInputAndOutputAliases(tView, tNode, hostDirectiveDefs) {\n ngDevMode && assertFirstCreatePass(tView);\n for (let index = tNode.directiveStart; index < tNode.directiveEnd; index++) {\n const directiveDef = tView.data[index];\n if (hostDirectiveDefs === null || !hostDirectiveDefs.has(directiveDef)) {\n setupSelectorMatchedInputsOrOutputs(0, tNode, directiveDef, index);\n setupSelectorMatchedInputsOrOutputs(1, tNode, directiveDef, index);\n setupInitialInputs(tNode, index, false);\n } else {\n const hostDirectiveDef = hostDirectiveDefs.get(directiveDef);\n setupHostDirectiveInputsOrOutputs(0, tNode, hostDirectiveDef, index);\n setupHostDirectiveInputsOrOutputs(1, tNode, hostDirectiveDef, index);\n setupInitialInputs(tNode, index, true);\n }\n }\n}\nfunction setupSelectorMatchedInputsOrOutputs(mode, tNode, def, directiveIndex) {\n const aliasMap = mode === 0 ? def.inputs : def.outputs;\n for (const publicName in aliasMap) {\n if (aliasMap.hasOwnProperty(publicName)) {\n let bindings;\n if (mode === 0) {\n bindings = tNode.inputs ??= {};\n } else {\n bindings = tNode.outputs ??= {};\n }\n bindings[publicName] ??= [];\n bindings[publicName].push(directiveIndex);\n setShadowStylingInputFlags(tNode, publicName);\n }\n }\n}\nfunction setupHostDirectiveInputsOrOutputs(mode, tNode, config, directiveIndex) {\n const aliasMap = mode === 0 ? config.inputs : config.outputs;\n for (const initialName in aliasMap) {\n if (aliasMap.hasOwnProperty(initialName)) {\n const publicName = aliasMap[initialName];\n let bindings;\n if (mode === 0) {\n bindings = tNode.hostDirectiveInputs ??= {};\n } else {\n bindings = tNode.hostDirectiveOutputs ??= {};\n }\n bindings[publicName] ??= [];\n bindings[publicName].push(directiveIndex, initialName);\n setShadowStylingInputFlags(tNode, publicName);\n }\n }\n}\nfunction setShadowStylingInputFlags(tNode, publicName) {\n if (publicName === 'class') {\n tNode.flags |= 8;\n } else if (publicName === 'style') {\n tNode.flags |= 16;\n }\n}\nfunction setupInitialInputs(tNode, directiveIndex, isHostDirective) {\n const {\n attrs,\n inputs,\n hostDirectiveInputs\n } = tNode;\n if (attrs === null || !isHostDirective && inputs === null || isHostDirective && hostDirectiveInputs === null || isInlineTemplate(tNode)) {\n tNode.initialInputs ??= [];\n tNode.initialInputs.push(null);\n return;\n }\n let inputsToStore = null;\n let i = 0;\n while (i < attrs.length) {\n const attrName = attrs[i];\n if (attrName === 0) {\n i += 4;\n continue;\n } else if (attrName === 5) {\n i += 2;\n continue;\n } else if (typeof attrName === 'number') {\n break;\n }\n if (!isHostDirective && inputs.hasOwnProperty(attrName)) {\n const inputConfig = inputs[attrName];\n for (const index of inputConfig) {\n if (index === directiveIndex) {\n inputsToStore ??= [];\n inputsToStore.push(attrName, attrs[i + 1]);\n break;\n }\n }\n } else if (isHostDirective && hostDirectiveInputs.hasOwnProperty(attrName)) {\n const config = hostDirectiveInputs[attrName];\n for (let j = 0; j < config.length; j += 2) {\n if (config[j] === directiveIndex) {\n inputsToStore ??= [];\n inputsToStore.push(config[j + 1], attrs[i + 1]);\n break;\n }\n }\n }\n i += 2;\n }\n tNode.initialInputs ??= [];\n tNode.initialInputs.push(inputsToStore);\n}\nfunction configureViewWithDirective(tView, tNode, lView, directiveIndex, def) {\n ngDevMode && assertGreaterThanOrEqual(directiveIndex, HEADER_OFFSET, 'Must be in Expando section');\n tView.data[directiveIndex] = def;\n const directiveFactory = def.factory || (def.factory = getFactoryDef(def.type, true));\n const nodeInjectorFactory = new NodeInjectorFactory(directiveFactory, isComponentDef(def), ɵɵdirectiveInject, ngDevMode ? def.type.name : null);\n tView.blueprint[directiveIndex] = nodeInjectorFactory;\n lView[directiveIndex] = nodeInjectorFactory;\n registerHostBindingOpCodes(tView, tNode, directiveIndex, allocExpando(tView, lView, def.hostVars, NO_CHANGE), def);\n}\nfunction registerHostBindingOpCodes(tView, tNode, directiveIdx, directiveVarsIdx, def) {\n ngDevMode && assertFirstCreatePass(tView);\n const hostBindings = def.hostBindings;\n if (hostBindings) {\n let hostBindingOpCodes = tView.hostBindingOpCodes;\n if (hostBindingOpCodes === null) {\n hostBindingOpCodes = tView.hostBindingOpCodes = [];\n }\n const elementIndx = ~tNode.index;\n if (lastSelectedElementIdx(hostBindingOpCodes) != elementIndx) {\n hostBindingOpCodes.push(elementIndx);\n }\n hostBindingOpCodes.push(directiveIdx, directiveVarsIdx, hostBindings);\n }\n}\nfunction lastSelectedElementIdx(hostBindingOpCodes) {\n let i = hostBindingOpCodes.length;\n while (i > 0) {\n const value = hostBindingOpCodes[--i];\n if (typeof value === 'number' && value < 0) {\n return value;\n }\n }\n return 0;\n}\nfunction saveNameToExportMap(directiveIdx, def, exportsMap) {\n if (exportsMap) {\n if (def.exportAs) {\n for (let i = 0; i < def.exportAs.length; i++) {\n exportsMap[def.exportAs[i]] = directiveIdx;\n }\n }\n if (isComponentDef(def)) exportsMap[''] = directiveIdx;\n }\n}\nfunction initTNodeFlags(tNode, index, numberOfDirectives) {\n ngDevMode && assertNotEqual(numberOfDirectives, tNode.directiveEnd - tNode.directiveStart, 'Reached the max number of directives');\n tNode.flags |= 1;\n tNode.directiveStart = index;\n tNode.directiveEnd = index + numberOfDirectives;\n tNode.providerIndexes = index;\n}\nfunction assertNoDuplicateDirectives(directives) {\n if (directives.length < 2) {\n return;\n }\n const seenDirectives = new Set();\n for (const current of directives) {\n if (seenDirectives.has(current)) {\n throw new RuntimeError(309, `Directive ${current.type.name} matches multiple times on the same element. ` + `Directives can only match an element once.`);\n }\n seenDirectives.add(current);\n }\n}\nfunction directiveHostFirstCreatePass(index, lView, type, name, directiveMatcher, bindingsEnabled, attrsIndex, localRefsIndex) {\n const tView = lView[TVIEW];\n ngDevMode && assertFirstCreatePass(tView);\n const tViewConsts = tView.consts;\n const attrs = getConstant(tViewConsts, attrsIndex);\n const tNode = getOrCreateTNode(tView, index, type, name, attrs);\n if (bindingsEnabled) {\n resolveDirectives(tView, lView, tNode, getConstant(tViewConsts, localRefsIndex), directiveMatcher);\n }\n tNode.mergedAttrs = mergeHostAttrs(tNode.mergedAttrs, tNode.attrs);\n if (tNode.attrs !== null) {\n computeStaticStyling(tNode, tNode.attrs, false);\n }\n if (tNode.mergedAttrs !== null) {\n computeStaticStyling(tNode, tNode.mergedAttrs, true);\n }\n if (tView.queries !== null) {\n tView.queries.elementStart(tView, tNode);\n }\n return tNode;\n}\nfunction directiveHostEndFirstCreatePass(tView, tNode) {\n ngDevMode && assertFirstCreatePass(tView);\n registerPostOrderHooks(tView, tNode);\n if (isContentQueryHost(tNode)) {\n tView.queries.elementEnd(tNode);\n }\n}\nfunction domOnlyFirstCreatePass(index, tView, type, name, attrsIndex, localRefsIndex) {\n ngDevMode && assertFirstCreatePass(tView);\n const tViewConsts = tView.consts;\n const attrs = getConstant(tViewConsts, attrsIndex);\n const tNode = getOrCreateTNode(tView, index, type, name, attrs);\n tNode.mergedAttrs = mergeHostAttrs(tNode.mergedAttrs, tNode.attrs);\n if (localRefsIndex != null) {\n const refs = getConstant(tViewConsts, localRefsIndex);\n tNode.localNames = [];\n for (let i = 0; i < refs.length; i += 2) {\n tNode.localNames.push(refs[i], -1);\n }\n }\n if (tNode.attrs !== null) {\n computeStaticStyling(tNode, tNode.attrs, false);\n }\n if (tNode.mergedAttrs !== null) {\n computeStaticStyling(tNode, tNode.mergedAttrs, true);\n }\n if (tView.queries !== null) {\n tView.queries.elementStart(tView, tNode);\n }\n return tNode;\n}\nfunction isListLikeIterable(obj) {\n if (!isJsObject(obj)) return false;\n return Array.isArray(obj) || !(obj instanceof Map) && Symbol.iterator in obj;\n}\nfunction areIterablesEqual(a, b, comparator) {\n const iterator1 = a[Symbol.iterator]();\n const iterator2 = b[Symbol.iterator]();\n while (true) {\n const item1 = iterator1.next();\n const item2 = iterator2.next();\n if (item1.done && item2.done) return true;\n if (item1.done || item2.done) return false;\n if (!comparator(item1.value, item2.value)) return false;\n }\n}\nfunction iterateListLike(obj, fn) {\n if (Array.isArray(obj)) {\n for (let i = 0; i < obj.length; i++) {\n fn(obj[i]);\n }\n } else {\n const iterator = obj[Symbol.iterator]();\n let item;\n while (!(item = iterator.next()).done) {\n fn(item.value);\n }\n }\n}\nfunction isJsObject(o) {\n return o !== null && (typeof o === 'function' || typeof o === 'object');\n}\nfunction devModeEqual(a, b) {\n const isListLikeIterableA = isListLikeIterable(a);\n const isListLikeIterableB = isListLikeIterable(b);\n if (isListLikeIterableA && isListLikeIterableB) {\n return areIterablesEqual(a, b, devModeEqual);\n } else {\n const isAObject = a && (typeof a === 'object' || typeof a === 'function');\n const isBObject = b && (typeof b === 'object' || typeof b === 'function');\n if (!isListLikeIterableA && isAObject && !isListLikeIterableB && isBObject) {\n return true;\n } else {\n return Object.is(a, b);\n }\n }\n}\nfunction updateBinding(lView, bindingIndex, value) {\n return lView[bindingIndex] = value;\n}\nfunction getBinding(lView, bindingIndex) {\n ngDevMode && assertIndexInRange(lView, bindingIndex);\n ngDevMode && assertNotSame(lView[bindingIndex], NO_CHANGE, 'Stored value should never be NO_CHANGE.');\n return lView[bindingIndex];\n}\nfunction bindingUpdated(lView, bindingIndex, value) {\n ngDevMode && assertLessThan(bindingIndex, lView.length, `Slot should have been initialized to NO_CHANGE`);\n if (value === NO_CHANGE) {\n return false;\n }\n const oldValue = lView[bindingIndex];\n if (Object.is(oldValue, value)) {\n return false;\n } else {\n if (ngDevMode && isInCheckNoChangesMode()) {\n const oldValueToCompare = oldValue !== NO_CHANGE ? oldValue : undefined;\n if (!devModeEqual(oldValueToCompare, value)) {\n const details = getExpressionChangedErrorDetails(lView, bindingIndex, oldValueToCompare, value);\n throwErrorIfNoChangesMode(oldValue === NO_CHANGE, details.oldValue, details.newValue, details.propName, lView);\n }\n return false;\n }\n lView[bindingIndex] = value;\n return true;\n }\n}\nfunction bindingUpdated2(lView, bindingIndex, exp1, exp2) {\n const different = bindingUpdated(lView, bindingIndex, exp1);\n return bindingUpdated(lView, bindingIndex + 1, exp2) || different;\n}\nfunction bindingUpdated3(lView, bindingIndex, exp1, exp2, exp3) {\n const different = bindingUpdated2(lView, bindingIndex, exp1, exp2);\n return bindingUpdated(lView, bindingIndex + 2, exp3) || different;\n}\nfunction bindingUpdated4(lView, bindingIndex, exp1, exp2, exp3, exp4) {\n const different = bindingUpdated2(lView, bindingIndex, exp1, exp2);\n return bindingUpdated2(lView, bindingIndex + 2, exp3, exp4) || different;\n}\nfunction wrapListener(tNode, lView, listenerFn) {\n return function wrapListenerIn_markDirtyAndPreventDefault(event) {\n const startView = isComponentHost(tNode) ? getComponentLViewByIndex(tNode.index, lView) : lView;\n markViewDirty(startView, 5);\n const context = lView[CONTEXT];\n let result = executeListenerWithErrorHandling(lView, context, listenerFn, event);\n let nextListenerFn = wrapListenerIn_markDirtyAndPreventDefault.__ngNextListenerFn__;\n while (nextListenerFn) {\n result = executeListenerWithErrorHandling(lView, context, nextListenerFn, event) && result;\n nextListenerFn = nextListenerFn.__ngNextListenerFn__;\n }\n return result;\n };\n}\nfunction executeListenerWithErrorHandling(lView, context, listenerFn, e) {\n const prevConsumer = setActiveConsumer$1(null);\n try {\n profiler(ProfilerEvent.OutputStart, context, listenerFn);\n return listenerFn(e) !== false;\n } catch (error) {\n handleUncaughtError(lView, error);\n return false;\n } finally {\n profiler(ProfilerEvent.OutputEnd, context, listenerFn);\n setActiveConsumer$1(prevConsumer);\n }\n}\nfunction listenToDomEvent(tNode, tView, lView, eventTargetResolver, renderer, eventName, originalListener, wrappedListener) {\n ngDevMode && assertNotSame(wrappedListener, originalListener, 'Expected wrapped and original listeners to be different.');\n const isTNodeDirectiveHost = isDirectiveHost(tNode);\n let hasCoalesced = false;\n let existingListener = null;\n if (!eventTargetResolver && isTNodeDirectiveHost) {\n existingListener = findExistingListener(tView, lView, eventName, tNode.index);\n }\n if (existingListener !== null) {\n const lastListenerFn = existingListener.__ngLastListenerFn__ || existingListener;\n lastListenerFn.__ngNextListenerFn__ = originalListener;\n existingListener.__ngLastListenerFn__ = originalListener;\n hasCoalesced = true;\n } else {\n const native = getNativeByTNode(tNode, lView);\n const target = eventTargetResolver ? eventTargetResolver(native) : native;\n stashEventListenerImpl(lView, target, eventName, wrappedListener);\n const cleanupFn = renderer.listen(target, eventName, wrappedListener);\n if (!isAnimationEventType(eventName)) {\n const idxOrTargetGetter = eventTargetResolver ? _lView => eventTargetResolver(unwrapRNode(_lView[tNode.index])) : tNode.index;\n storeListenerCleanup(idxOrTargetGetter, tView, lView, eventName, wrappedListener, cleanupFn, false);\n }\n }\n return hasCoalesced;\n}\nfunction isAnimationEventType(eventName) {\n return eventName.startsWith('animation') || eventName.startsWith('transition');\n}\nfunction findExistingListener(tView, lView, eventName, tNodeIndex) {\n const tCleanup = tView.cleanup;\n if (tCleanup != null) {\n for (let i = 0; i < tCleanup.length - 1; i += 2) {\n const cleanupEventName = tCleanup[i];\n if (cleanupEventName === eventName && tCleanup[i + 1] === tNodeIndex) {\n const lCleanup = lView[CLEANUP];\n const listenerIdxInLCleanup = tCleanup[i + 2];\n return lCleanup && lCleanup.length > listenerIdxInLCleanup ? lCleanup[listenerIdxInLCleanup] : null;\n }\n if (typeof cleanupEventName === 'string') {\n i += 2;\n }\n }\n }\n return null;\n}\nfunction storeListenerCleanup(indexOrTargetGetter, tView, lView, eventName, listenerFn, cleanup, isOutput) {\n const tCleanup = tView.firstCreatePass ? getOrCreateTViewCleanup(tView) : null;\n const lCleanup = getOrCreateLViewCleanup(lView);\n const index = lCleanup.length;\n lCleanup.push(listenerFn, cleanup);\n tCleanup && tCleanup.push(eventName, indexOrTargetGetter, index, (index + 1) * (isOutput ? -1 : 1));\n}\nfunction createOutputListener(tNode, lView, listenerFn, targetDef, eventName) {\n const wrappedListener = wrapListener(tNode, lView, listenerFn);\n const hasBound = listenToDirectiveOutput(tNode, lView, targetDef, eventName, wrappedListener);\n if (!hasBound && ngDevMode) {\n throw new RuntimeError(316, `${stringifyForError(targetDef.type)} does not have an output with a public name of \"${eventName}\".`);\n }\n}\nfunction listenToDirectiveOutput(tNode, lView, target, eventName, listenerFn) {\n let hostIndex = null;\n let hostDirectivesStart = null;\n let hostDirectivesEnd = null;\n let hasOutput = false;\n if (ngDevMode && !tNode.directiveToIndex?.has(target.type)) {\n throw new Error(`Node does not have a directive with type ${target.type.name}`);\n }\n const data = tNode.directiveToIndex.get(target.type);\n if (typeof data === 'number') {\n hostIndex = data;\n } else {\n [hostIndex, hostDirectivesStart, hostDirectivesEnd] = data;\n }\n if (hostDirectivesStart !== null && hostDirectivesEnd !== null && tNode.hostDirectiveOutputs?.hasOwnProperty(eventName)) {\n const hostDirectiveOutputs = tNode.hostDirectiveOutputs[eventName];\n for (let i = 0; i < hostDirectiveOutputs.length; i += 2) {\n const index = hostDirectiveOutputs[i];\n if (index >= hostDirectivesStart && index <= hostDirectivesEnd) {\n ngDevMode && assertIndexInRange(lView, index);\n hasOutput = true;\n listenToOutput(tNode, lView, index, hostDirectiveOutputs[i + 1], eventName, listenerFn);\n } else if (index > hostDirectivesEnd) {\n break;\n }\n }\n }\n if (target.outputs.hasOwnProperty(eventName)) {\n ngDevMode && assertIndexInRange(lView, hostIndex);\n hasOutput = true;\n listenToOutput(tNode, lView, hostIndex, eventName, eventName, listenerFn);\n }\n return hasOutput;\n}\nfunction listenToOutput(tNode, lView, directiveIndex, lookupName, eventName, listenerFn) {\n ngDevMode && assertIndexInRange(lView, directiveIndex);\n const instance = lView[directiveIndex];\n const tView = lView[TVIEW];\n const def = tView.data[directiveIndex];\n const propertyName = def.outputs[lookupName];\n const output = instance[propertyName];\n if (ngDevMode && !isOutputSubscribable(output)) {\n throw new Error(`@Output ${propertyName} not initialized in '${instance.constructor.name}'.`);\n }\n const subscription = output.subscribe(listenerFn);\n storeListenerCleanup(tNode.index, tView, lView, eventName, listenerFn, subscription, true);\n}\nfunction isOutputSubscribable(value) {\n return value != null && typeof value.subscribe === 'function';\n}\nfunction ɵɵcontrolCreate() {\n controlCreateInternal();\n}\nfunction controlCreateInternal() {\n const lView = getLView();\n const tView = getTView();\n const tNode = getCurrentTNode();\n if (tView.firstCreatePass) {\n initializeControlFirstCreatePass(tView, tNode);\n }\n if (tNode.controlDirectiveIndex === -1) {\n return;\n }\n performanceMarkFeature('NgSignalForms');\n const instance = lView[tNode.controlDirectiveIndex];\n const controlDef = tView.data[tNode.controlDirectiveIndex].controlDef;\n controlDef.create(instance, new ControlDirectiveHostImpl(lView, tView, tNode));\n}\nfunction ɵɵcontrol() {\n controlUpdateInternal();\n}\nfunction controlUpdateInternal() {\n if (ngDevMode && isInCheckNoChangesMode()) {\n return;\n }\n const lView = getLView();\n const tView = getTView();\n const tNode = getSelectedTNode();\n if (tNode.controlDirectiveIndex === -1) {\n return;\n }\n const controlDef = tView.data[tNode.controlDirectiveIndex].controlDef;\n const instance = lView[tNode.controlDirectiveIndex];\n controlDef.update(instance, new ControlDirectiveHostImpl(lView, tView, tNode));\n}\nclass ControlDirectiveHostImpl {\n lView;\n tView;\n tNode;\n hasPassThrough;\n constructor(lView, tView, tNode) {\n this.lView = lView;\n this.tView = tView;\n this.tNode = tNode;\n this.hasPassThrough = !!(tNode.flags & 4096);\n }\n get customControl() {\n return this.tNode.customControlIndex !== -1 ? this.lView[this.tNode.customControlIndex] : undefined;\n }\n get descriptor() {\n if (ngDevMode && isComponentHost(this.tNode)) {\n const componentIndex = this.tNode.directiveStart + this.tNode.componentOffset;\n const componentDef = this.tView.data[componentIndex];\n return `Component ${debugStringifyTypeForError(componentDef.type)}`;\n }\n return `<${this.tNode.value}>`;\n }\n listenToCustomControlOutput(outputName, callback) {\n if (!hasOutput(this.tView.data[this.tNode.customControlIndex], outputName)) {\n return;\n }\n listenToOutput(this.tNode, this.lView, this.tNode.customControlIndex, outputName, outputName, wrapListener(this.tNode, this.lView, callback));\n }\n listenToCustomControlModel(listener) {\n const modelName = this.tNode.flags & 1024 ? 'valueChange' : 'checkedChange';\n listenToOutput(this.tNode, this.lView, this.tNode.customControlIndex, modelName, modelName, wrapListener(this.tNode, this.lView, listener));\n }\n listenToDom(eventName, listener) {\n listenToDomEvent(this.tNode, this.tView, this.lView, undefined, this.lView[RENDERER], eventName, listener, wrapListener(this.tNode, this.lView, listener));\n }\n setInputOnDirectives(inputName, value) {\n const directiveIndices = this.tNode.inputs?.[inputName];\n const hostDirectiveInputs = this.tNode.hostDirectiveInputs?.[inputName];\n if (!directiveIndices && !hostDirectiveInputs) {\n return false;\n }\n if (directiveIndices) {\n for (const index of directiveIndices) {\n const directiveDef = this.tView.data[index];\n const directive = this.lView[index];\n writeToDirectiveInput(directiveDef, directive, inputName, value);\n }\n }\n if (hostDirectiveInputs) {\n for (let i = 0; i < hostDirectiveInputs.length; i += 2) {\n const index = hostDirectiveInputs[i];\n const internalName = hostDirectiveInputs[i + 1];\n const directiveDef = this.tView.data[index];\n const directive = this.lView[index];\n writeToDirectiveInput(directiveDef, directive, internalName, value);\n }\n }\n return true;\n }\n setCustomControlModelInput(value) {\n const directive = this.lView[this.tNode.customControlIndex];\n const directiveDef = this.tView.data[this.tNode.customControlIndex];\n const modelName = this.tNode.flags & 1024 ? 'value' : 'checked';\n writeToDirectiveInput(directiveDef, directive, modelName, value);\n }\n customControlHasInput(inputName) {\n if (this.tNode.customControlIndex === -1) {\n return false;\n }\n const directiveDef = this.tView.data[this.tNode.customControlIndex];\n return directiveDef.inputs[inputName] != undefined;\n }\n}\nfunction initializeControlFirstCreatePass(tView, tNode, lView) {\n ngDevMode && assertFirstCreatePass(tView);\n for (let i = tNode.directiveStart; i < tNode.directiveEnd; i++) {\n const directiveDef = tView.data[i];\n if (directiveDef.controlDef) {\n tNode.controlDirectiveIndex = i;\n break;\n }\n }\n if (tNode.controlDirectiveIndex === -1) {\n return;\n }\n const controlDef = tView.data[tNode.controlDirectiveIndex].controlDef;\n if (controlDef.passThroughInput) {\n if ((tNode.inputs?.[controlDef.passThroughInput]?.length ?? 0) > 1) {\n tNode.flags |= 4096;\n return;\n }\n }\n initializeCustomControlStatus(tView, tNode);\n}\nfunction initializeCustomControlStatus(tView, tNode) {\n for (let i = tNode.directiveStart; i < tNode.directiveEnd; i++) {\n const directiveDef = tView.data[i];\n if (hasModelInput(directiveDef, 'value')) {\n tNode.flags |= 1024;\n tNode.customControlIndex = i;\n return;\n }\n if (hasModelInput(directiveDef, 'checked')) {\n tNode.flags |= 2048;\n tNode.customControlIndex = i;\n return;\n }\n }\n}\nfunction hasModelInput(directiveDef, name) {\n return hasInput(directiveDef, name) && hasOutput(directiveDef, name + 'Change');\n}\nfunction hasInput(directiveDef, name) {\n return name in directiveDef.inputs;\n}\nfunction hasOutput(directiveDef, name) {\n return name in directiveDef.outputs;\n}\nconst BINDING = /* @__PURE__ */Symbol('BINDING');\nconst INPUT_BINDING_METADATA = {\n kind: 'input',\n requiredVars: 1\n};\nconst OUTPUT_BINDING_METADATA = {\n kind: 'output',\n requiredVars: 0\n};\nfunction inputBindingUpdate(targetDirectiveIdx, publicName, value) {\n const lView = getLView();\n const bindingIndex = nextBindingIndex();\n if (bindingUpdated(lView, bindingIndex, value)) {\n const tView = lView[TVIEW];\n const tNode = getSelectedTNode();\n const componentLView = getComponentLViewByIndex(tNode.index, lView);\n markViewDirty(componentLView, 1);\n const targetDef = tView.directiveRegistry[targetDirectiveIdx];\n if (ngDevMode && !targetDef) {\n throw new RuntimeError(315, `Input binding to property \"${publicName}\" does not have a target.`);\n }\n const hasSet = setDirectiveInput(tNode, tView, lView, targetDef, publicName, value);\n if (ngDevMode) {\n if (!hasSet) {\n throw new RuntimeError(315, `${stringifyForError(targetDef.type)} does not have an input with a public name of \"${publicName}\".`);\n }\n storePropertyBindingMetadata(tView.data, tNode, publicName, bindingIndex);\n }\n }\n}\nfunction inputBinding(publicName, value) {\n if (publicName === 'formField') {\n const binding = {\n [BINDING]: INPUT_BINDING_METADATA,\n create: () => {\n controlCreateInternal();\n },\n update: () => {\n inputBindingUpdate(binding.targetIdx, publicName, value());\n controlUpdateInternal();\n }\n };\n return binding;\n }\n const binding = {\n [BINDING]: INPUT_BINDING_METADATA,\n update: () => inputBindingUpdate(binding.targetIdx, publicName, value())\n };\n return binding;\n}\nfunction outputBinding(eventName, listener) {\n const binding = {\n [BINDING]: OUTPUT_BINDING_METADATA,\n create: () => {\n const lView = getLView();\n const tNode = getCurrentTNode();\n const tView = lView[TVIEW];\n const targetDef = tView.directiveRegistry[binding.targetIdx];\n createOutputListener(tNode, lView, listener, targetDef, eventName);\n }\n };\n return binding;\n}\nfunction twoWayBinding(publicName, value) {\n const input = inputBinding(publicName, value);\n const output = outputBinding(publicName + 'Change', eventValue => value.set(eventValue));\n ngDevMode && assertNotDefined(input.create, 'Unexpected `create` callback in inputBinding');\n ngDevMode && assertNotDefined(output.update, 'Unexpected `update` callback in outputBinding');\n const binding = {\n [BINDING]: {\n kind: 'twoWay',\n requiredVars: input[BINDING].requiredVars + output[BINDING].requiredVars\n },\n set targetIdx(idx) {\n input.targetIdx = idx;\n output.targetIdx = idx;\n },\n create: output.create,\n update: input.update\n };\n return binding;\n}\nfunction getClosestComponentName(node) {\n let currentNode = node;\n while (currentNode) {\n const lView = readPatchedLView(currentNode);\n if (lView !== null) {\n for (let i = HEADER_OFFSET; i < lView.length; i++) {\n const current = lView[i];\n if (!isLView(current) && !isLContainer(current) || current[HOST] !== currentNode) {\n continue;\n }\n const tView = lView[TVIEW];\n const tNode = getTNode(tView, i);\n if (isComponentHost(tNode)) {\n const def = tView.data[tNode.directiveStart + tNode.componentOffset];\n const name = getComponentName(def);\n if (name !== null) {\n return name;\n } else {\n break;\n }\n }\n }\n }\n currentNode = currentNode.parentNode;\n }\n return null;\n}\nfunction getComponentName(def) {\n return def.debugInfo?.className || def.type.name || null;\n}\nclass ComponentFactoryResolver extends ComponentFactoryResolver$1 {\n ngModule;\n constructor(ngModule) {\n super();\n this.ngModule = ngModule;\n }\n resolveComponentFactory(component) {\n ngDevMode && assertComponentType(component);\n const componentDef = getComponentDef(component);\n return new ComponentFactory(componentDef, this.ngModule);\n }\n}\nfunction toInputRefArray(map) {\n return Object.keys(map).map(name => {\n const [propName, flags, transform] = map[name];\n const inputData = {\n propName: propName,\n templateName: name,\n isSignal: (flags & InputFlags.SignalBased) !== 0\n };\n if (transform) {\n inputData.transform = transform;\n }\n return inputData;\n });\n}\nfunction toOutputRefArray(map) {\n return Object.keys(map).map(name => ({\n propName: map[name],\n templateName: name\n }));\n}\nfunction verifyNotAnOrphanComponent(componentDef) {\n if ((typeof ngJitMode === 'undefined' || ngJitMode) && componentDef.debugInfo?.forbidOrphanRendering) {\n if (depsTracker.isOrphanComponent(componentDef.type)) {\n throw new RuntimeError(981, `Orphan component found! Trying to render the component ${debugStringifyTypeForError(componentDef.type)} without first loading the NgModule that declares it. It is recommended to make this component standalone in order to avoid this error. If this is not possible now, import the component's NgModule in the appropriate NgModule, or the standalone component in which you are trying to render this component. If this is a lazy import, load the NgModule lazily as well and use its module injector.`);\n }\n }\n}\nfunction createRootViewInjector(componentDef, environmentInjector, injector) {\n let realEnvironmentInjector = environmentInjector instanceof EnvironmentInjector ? environmentInjector : environmentInjector?.injector;\n if (realEnvironmentInjector && componentDef.getStandaloneInjector !== null) {\n realEnvironmentInjector = componentDef.getStandaloneInjector(realEnvironmentInjector) || realEnvironmentInjector;\n }\n const rootViewInjector = realEnvironmentInjector ? new ChainedInjector(injector, realEnvironmentInjector) : injector;\n return rootViewInjector;\n}\nfunction createRootLViewEnvironment(rootLViewInjector) {\n const rendererFactory = rootLViewInjector.get(RendererFactory2, null);\n if (rendererFactory === null) {\n throw new RuntimeError(407, ngDevMode && 'Angular was not able to inject a renderer (RendererFactory2). ' + 'Likely this is due to a broken DI hierarchy. ' + 'Make sure that any injector used to create this component has a correct parent.');\n }\n const sanitizer = rootLViewInjector.get(Sanitizer, null);\n const changeDetectionScheduler = rootLViewInjector.get(ChangeDetectionScheduler, null);\n const tracingService = rootLViewInjector.get(TracingService, null, {\n optional: true\n });\n let ngReflect = false;\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n ngReflect = rootLViewInjector.get(NG_REFLECT_ATTRS_FLAG, NG_REFLECT_ATTRS_FLAG_DEFAULT);\n }\n return {\n rendererFactory,\n sanitizer,\n changeDetectionScheduler,\n ngReflect,\n tracingService\n };\n}\nfunction createHostElement(componentDef, renderer) {\n const tagName = inferTagNameFromDefinition(componentDef);\n const namespace = tagName === 'svg' ? SVG_NAMESPACE : tagName === 'math' ? MATH_ML_NAMESPACE : null;\n return createElementNode(renderer, tagName, namespace);\n}\nfunction inferTagNameFromDefinition(componentDef) {\n return (componentDef.selectors[0][0] || 'div').toLowerCase();\n}\nclass ComponentFactory extends ComponentFactory$1 {\n componentDef;\n ngModule;\n selector;\n componentType;\n ngContentSelectors;\n isBoundToModule;\n cachedInputs = null;\n cachedOutputs = null;\n get inputs() {\n this.cachedInputs ??= toInputRefArray(this.componentDef.inputs);\n return this.cachedInputs;\n }\n get outputs() {\n this.cachedOutputs ??= toOutputRefArray(this.componentDef.outputs);\n return this.cachedOutputs;\n }\n constructor(componentDef, ngModule) {\n super();\n this.componentDef = componentDef;\n this.ngModule = ngModule;\n this.componentType = componentDef.type;\n this.selector = stringifyCSSSelectorList(componentDef.selectors);\n this.ngContentSelectors = componentDef.ngContentSelectors ?? [];\n this.isBoundToModule = !!ngModule;\n }\n create(injector, projectableNodes, rootSelectorOrNode, environmentInjector, directives, componentBindings) {\n profiler(ProfilerEvent.DynamicComponentStart);\n const prevConsumer = setActiveConsumer(null);\n try {\n const cmpDef = this.componentDef;\n ngDevMode && verifyNotAnOrphanComponent(cmpDef);\n const rootViewInjector = createRootViewInjector(cmpDef, environmentInjector || this.ngModule, injector);\n const environment = createRootLViewEnvironment(rootViewInjector);\n const tracingService = environment.tracingService;\n if (tracingService && tracingService.componentCreate) {\n return tracingService.componentCreate(getComponentName(cmpDef), () => this.createComponentRef(environment, rootViewInjector, projectableNodes, rootSelectorOrNode, directives, componentBindings));\n } else {\n return this.createComponentRef(environment, rootViewInjector, projectableNodes, rootSelectorOrNode, directives, componentBindings);\n }\n } finally {\n setActiveConsumer(prevConsumer);\n }\n }\n createComponentRef(environment, rootViewInjector, projectableNodes, rootSelectorOrNode, directives, componentBindings) {\n const cmpDef = this.componentDef;\n const rootTView = createRootTView(rootSelectorOrNode, cmpDef, componentBindings, directives);\n const hostRenderer = environment.rendererFactory.createRenderer(null, cmpDef);\n const hostElement = rootSelectorOrNode ? locateHostElement(hostRenderer, rootSelectorOrNode, cmpDef.encapsulation, rootViewInjector) : createHostElement(cmpDef, hostRenderer);\n const hasInputBindings = componentBindings?.some(isInputBinding) || directives?.some(d => typeof d !== 'function' && d.bindings.some(isInputBinding));\n const rootLView = createLView(null, rootTView, null, 512 | getInitialLViewFlagsFromDef(cmpDef), null, null, environment, hostRenderer, rootViewInjector, null, retrieveHydrationInfo(hostElement, rootViewInjector, true));\n rootLView[HEADER_OFFSET] = hostElement;\n enterView(rootLView);\n let componentView = null;\n try {\n const hostTNode = directiveHostFirstCreatePass(HEADER_OFFSET, rootLView, 2, '#host', () => rootTView.directiveRegistry, true, 0);\n setupStaticAttributes(hostRenderer, hostElement, hostTNode);\n attachPatchData(hostElement, rootLView);\n createDirectivesInstances(rootTView, rootLView, hostTNode);\n executeContentQueries(rootTView, hostTNode, rootLView);\n directiveHostEndFirstCreatePass(rootTView, hostTNode);\n if (projectableNodes !== undefined) {\n projectNodes(hostTNode, this.ngContentSelectors, projectableNodes);\n }\n componentView = getComponentLViewByIndex(hostTNode.index, rootLView);\n rootLView[CONTEXT] = componentView[CONTEXT];\n renderView(rootTView, rootLView, null);\n } catch (e) {\n if (componentView !== null) {\n unregisterLView(componentView);\n }\n unregisterLView(rootLView);\n throw e;\n } finally {\n profiler(ProfilerEvent.DynamicComponentEnd);\n leaveView();\n }\n return new ComponentRef(this.componentType, rootLView, !!hasInputBindings);\n }\n}\nfunction createRootTView(rootSelectorOrNode, componentDef, componentBindings, directives) {\n const tAttributes = rootSelectorOrNode ? ['ng-version', '21.2.4'] : extractAttrsAndClassesFromSelector(componentDef.selectors[0]);\n let creationBindings = null;\n let updateBindings = null;\n let varsToAllocate = 0;\n if (componentBindings) {\n for (const binding of componentBindings) {\n varsToAllocate += binding[BINDING].requiredVars;\n if (binding.create) {\n binding.targetIdx = 0;\n (creationBindings ??= []).push(binding);\n }\n if (binding.update) {\n binding.targetIdx = 0;\n (updateBindings ??= []).push(binding);\n }\n }\n }\n if (directives) {\n for (let i = 0; i < directives.length; i++) {\n const directive = directives[i];\n if (typeof directive !== 'function') {\n for (const binding of directive.bindings) {\n varsToAllocate += binding[BINDING].requiredVars;\n const targetDirectiveIdx = i + 1;\n if (binding.create) {\n binding.targetIdx = targetDirectiveIdx;\n (creationBindings ??= []).push(binding);\n }\n if (binding.update) {\n binding.targetIdx = targetDirectiveIdx;\n (updateBindings ??= []).push(binding);\n }\n }\n }\n }\n }\n const directivesToApply = [componentDef];\n if (directives) {\n for (const directive of directives) {\n const directiveType = typeof directive === 'function' ? directive : directive.type;\n const directiveDef = ngDevMode ? getDirectiveDefOrThrow(directiveType) : getDirectiveDef(directiveType);\n if (ngDevMode && !directiveDef.standalone) {\n throw new RuntimeError(907, `The ${stringifyForError(directiveType)} directive must be standalone in ` + `order to be applied to a dynamically-created component.`);\n }\n directivesToApply.push(directiveDef);\n }\n }\n const rootTView = createTView(0, null, getRootTViewTemplate(creationBindings, updateBindings), 1, varsToAllocate, directivesToApply, null, null, null, [tAttributes], null);\n return rootTView;\n}\nfunction getRootTViewTemplate(creationBindings, updateBindings) {\n if (!creationBindings && !updateBindings) {\n return null;\n }\n return flags => {\n if (flags & 1 && creationBindings) {\n for (const binding of creationBindings) {\n binding.create();\n }\n }\n if (flags & 2 && updateBindings) {\n for (const binding of updateBindings) {\n binding.update();\n }\n }\n };\n}\nfunction isInputBinding(binding) {\n const kind = binding[BINDING].kind;\n return kind === 'input' || kind === 'twoWay';\n}\nclass ComponentRef extends ComponentRef$1 {\n _rootLView;\n _hasInputBindings;\n instance;\n hostView;\n changeDetectorRef;\n componentType;\n location;\n previousInputValues = null;\n _tNode;\n constructor(componentType, _rootLView, _hasInputBindings) {\n super();\n this._rootLView = _rootLView;\n this._hasInputBindings = _hasInputBindings;\n this._tNode = getTNode(_rootLView[TVIEW], HEADER_OFFSET);\n this.location = createElementRef(this._tNode, _rootLView);\n this.instance = getComponentLViewByIndex(this._tNode.index, _rootLView)[CONTEXT];\n this.hostView = this.changeDetectorRef = new ViewRef(_rootLView, undefined);\n this.componentType = componentType;\n }\n setInput(name, value) {\n if (this._hasInputBindings && ngDevMode) {\n throw new RuntimeError(317, 'Cannot call `setInput` on a component that is using the `inputBinding` or `twoWayBinding` functions.');\n }\n const tNode = this._tNode;\n this.previousInputValues ??= new Map();\n if (this.previousInputValues.has(name) && Object.is(this.previousInputValues.get(name), value)) {\n return;\n }\n const lView = this._rootLView;\n const hasSetInput = setAllInputsForProperty(tNode, lView[TVIEW], lView, name, value);\n this.previousInputValues.set(name, value);\n const childComponentLView = getComponentLViewByIndex(tNode.index, lView);\n markViewDirty(childComponentLView, 1);\n if (ngDevMode && !hasSetInput) {\n const cmpNameForError = stringifyForError(this.componentType);\n let message = `Can't set value of the '${name}' input on the '${cmpNameForError}' component. `;\n message += `Make sure that the '${name}' property is declared as an input using the input() or model() function or the @Input() decorator.`;\n reportUnknownPropertyError(message);\n }\n }\n get injector() {\n return new NodeInjector(this._tNode, this._rootLView);\n }\n destroy() {\n this.hostView.destroy();\n }\n onDestroy(callback) {\n this.hostView.onDestroy(callback);\n }\n}\nfunction projectNodes(tNode, ngContentSelectors, projectableNodes) {\n const projection = tNode.projection = [];\n for (let i = 0; i < ngContentSelectors.length; i++) {\n const nodesforSlot = projectableNodes[i];\n projection.push(nodesforSlot != null && nodesforSlot.length ? Array.from(nodesforSlot) : null);\n }\n}\nlet ViewContainerRef = /*#__PURE__*/(() => {\n class ViewContainerRef {\n static __NG_ELEMENT_ID__ = injectViewContainerRef;\n }\n return ViewContainerRef;\n})();\nfunction injectViewContainerRef() {\n const previousTNode = getCurrentTNode();\n return createContainerRef(previousTNode, getLView());\n}\nclass R3ViewContainerRef extends ViewContainerRef {\n _lContainer;\n _hostTNode;\n _hostLView;\n constructor(_lContainer, _hostTNode, _hostLView) {\n super();\n this._lContainer = _lContainer;\n this._hostTNode = _hostTNode;\n this._hostLView = _hostLView;\n }\n get element() {\n return createElementRef(this._hostTNode, this._hostLView);\n }\n get injector() {\n return new NodeInjector(this._hostTNode, this._hostLView);\n }\n get parentInjector() {\n const parentLocation = getParentInjectorLocation(this._hostTNode, this._hostLView);\n if (hasParentInjector(parentLocation)) {\n const parentView = getParentInjectorView(parentLocation, this._hostLView);\n const injectorIndex = getParentInjectorIndex(parentLocation);\n ngDevMode && assertNodeInjector(parentView, injectorIndex);\n const parentTNode = parentView[TVIEW].data[injectorIndex + 8];\n return new NodeInjector(parentTNode, parentView);\n } else {\n return new NodeInjector(null, this._hostLView);\n }\n }\n clear() {\n while (this.length > 0) {\n this.remove(this.length - 1);\n }\n }\n get(index) {\n const viewRefs = getViewRefs(this._lContainer);\n return viewRefs !== null && viewRefs[index] || null;\n }\n get length() {\n return this._lContainer.length - CONTAINER_HEADER_OFFSET;\n }\n createEmbeddedView(templateRef, context, indexOrOptions) {\n let index;\n let injector;\n if (typeof indexOrOptions === 'number') {\n index = indexOrOptions;\n } else if (indexOrOptions != null) {\n index = indexOrOptions.index;\n injector = indexOrOptions.injector;\n }\n const dehydratedView = findMatchingDehydratedView(this._lContainer, templateRef.ssrId);\n const viewRef = templateRef.createEmbeddedViewImpl(context || {}, injector, dehydratedView);\n this.insertImpl(viewRef, index, shouldAddViewToDom(this._hostTNode, dehydratedView));\n return viewRef;\n }\n createComponent(componentFactoryOrType, indexOrOptions, injector, projectableNodes, environmentInjector, directives, bindings) {\n const isComponentFactory = componentFactoryOrType && !isType(componentFactoryOrType);\n let index;\n if (isComponentFactory) {\n if (ngDevMode) {\n assertEqual(typeof indexOrOptions !== 'object', true, 'It looks like Component factory was provided as the first argument ' + 'and an options object as the second argument. This combination of arguments ' + 'is incompatible. You can either change the first argument to provide Component ' + 'type or change the second argument to be a number (representing an index at ' + \"which to insert the new component's host view into this container)\");\n }\n index = indexOrOptions;\n } else {\n if (ngDevMode) {\n assertDefined(getComponentDef(componentFactoryOrType), `Provided Component class doesn't contain Component definition. ` + `Please check whether provided class has @Component decorator.`);\n assertEqual(typeof indexOrOptions !== 'number', true, 'It looks like Component type was provided as the first argument ' + \"and a number (representing an index at which to insert the new component's \" + 'host view into this container as the second argument. This combination of arguments ' + 'is incompatible. Please use an object as the second argument instead.');\n }\n const options = indexOrOptions || {};\n if (ngDevMode && options.environmentInjector && options.ngModuleRef) {\n throwError(`Cannot pass both environmentInjector and ngModuleRef options to createComponent().`);\n }\n index = options.index;\n injector = options.injector;\n projectableNodes = options.projectableNodes;\n environmentInjector = options.environmentInjector || options.ngModuleRef;\n directives = options.directives;\n bindings = options.bindings;\n }\n const componentFactory = isComponentFactory ? componentFactoryOrType : new ComponentFactory(getComponentDef(componentFactoryOrType));\n const contextInjector = injector || this.parentInjector;\n if (!environmentInjector && componentFactory.ngModule == null) {\n const _injector = isComponentFactory ? contextInjector : this.parentInjector;\n const result = _injector.get(EnvironmentInjector, null);\n if (result) {\n environmentInjector = result;\n }\n }\n const componentDef = getComponentDef(componentFactory.componentType ?? {});\n const dehydratedView = findMatchingDehydratedView(this._lContainer, componentDef?.id ?? null);\n const rNode = dehydratedView?.firstChild ?? null;\n const componentRef = componentFactory.create(contextInjector, projectableNodes, rNode, environmentInjector, directives, bindings);\n this.insertImpl(componentRef.hostView, index, shouldAddViewToDom(this._hostTNode, dehydratedView));\n return componentRef;\n }\n insert(viewRef, index) {\n return this.insertImpl(viewRef, index, true);\n }\n insertImpl(viewRef, index, addToDOM) {\n const lView = viewRef._lView;\n if (ngDevMode && viewRef.destroyed) {\n throw new RuntimeError(922, ngDevMode && 'Cannot insert a destroyed View in a ViewContainer!');\n }\n if (viewAttachedToContainer(lView)) {\n const prevIdx = this.indexOf(viewRef);\n if (prevIdx !== -1) {\n this.detach(prevIdx);\n } else {\n const prevLContainer = lView[PARENT];\n ngDevMode && assertEqual(isLContainer(prevLContainer), true, 'An attached view should have its PARENT point to a container.');\n const prevVCRef = new R3ViewContainerRef(prevLContainer, prevLContainer[T_HOST], prevLContainer[PARENT]);\n prevVCRef.detach(prevVCRef.indexOf(viewRef));\n }\n }\n const adjustedIdx = this._adjustIndex(index);\n const lContainer = this._lContainer;\n addLViewToLContainer(lContainer, lView, adjustedIdx, addToDOM);\n viewRef.attachToViewContainerRef();\n addToArray(getOrCreateViewRefs(lContainer), adjustedIdx, viewRef);\n return viewRef;\n }\n move(viewRef, newIndex) {\n if (ngDevMode && viewRef.destroyed) {\n throw new RuntimeError(923, ngDevMode && 'Cannot move a destroyed View in a ViewContainer!');\n }\n return this.insert(viewRef, newIndex);\n }\n indexOf(viewRef) {\n const viewRefsArr = getViewRefs(this._lContainer);\n return viewRefsArr !== null ? viewRefsArr.indexOf(viewRef) : -1;\n }\n remove(index) {\n const adjustedIdx = this._adjustIndex(index, -1);\n const detachedView = detachView(this._lContainer, adjustedIdx);\n if (detachedView) {\n removeFromArray(getOrCreateViewRefs(this._lContainer), adjustedIdx);\n destroyLView(detachedView[TVIEW], detachedView);\n }\n }\n detach(index) {\n const adjustedIdx = this._adjustIndex(index, -1);\n const view = detachView(this._lContainer, adjustedIdx);\n const wasDetached = view && removeFromArray(getOrCreateViewRefs(this._lContainer), adjustedIdx) != null;\n return wasDetached ? new ViewRef(view) : null;\n }\n _adjustIndex(index, shift = 0) {\n if (index == null) {\n return this.length + shift;\n }\n if (ngDevMode) {\n assertGreaterThan(index, -1, `ViewRef index must be positive, got ${index}`);\n assertLessThan(index, this.length + 1 + shift, 'index');\n }\n return index;\n }\n}\nfunction getViewRefs(lContainer) {\n return lContainer[VIEW_REFS];\n}\nfunction getOrCreateViewRefs(lContainer) {\n return lContainer[VIEW_REFS] || (lContainer[VIEW_REFS] = []);\n}\nfunction createContainerRef(hostTNode, hostLView) {\n ngDevMode && assertTNodeType(hostTNode, 12 | 3);\n let lContainer;\n const slotValue = hostLView[hostTNode.index];\n if (isLContainer(slotValue)) {\n lContainer = slotValue;\n } else {\n lContainer = createLContainer(slotValue, hostLView, null, hostTNode);\n hostLView[hostTNode.index] = lContainer;\n addToEndOfViewTree(hostLView, lContainer);\n }\n _locateOrCreateAnchorNode(lContainer, hostLView, hostTNode, slotValue);\n return new R3ViewContainerRef(lContainer, hostTNode, hostLView);\n}\nfunction insertAnchorNode(hostLView, hostTNode) {\n const renderer = hostLView[RENDERER];\n const commentNode = renderer.createComment(ngDevMode ? 'container' : '');\n const hostNative = getNativeByTNode(hostTNode, hostLView);\n const parentOfHostNative = renderer.parentNode(hostNative);\n nativeInsertBefore(renderer, parentOfHostNative, commentNode, renderer.nextSibling(hostNative), false);\n return commentNode;\n}\nlet _locateOrCreateAnchorNode = createAnchorNode;\nlet _populateDehydratedViewsInLContainer = () => false;\nfunction populateDehydratedViewsInLContainer(lContainer, tNode, hostLView) {\n return _populateDehydratedViewsInLContainer(lContainer, tNode, hostLView);\n}\nfunction createAnchorNode(lContainer, hostLView, hostTNode, slotValue) {\n if (lContainer[NATIVE]) return;\n let commentNode;\n if (hostTNode.type & 8) {\n commentNode = unwrapRNode(slotValue);\n } else {\n commentNode = insertAnchorNode(hostLView, hostTNode);\n }\n lContainer[NATIVE] = commentNode;\n}\nfunction populateDehydratedViewsInLContainerImpl(lContainer, tNode, hostLView) {\n if (lContainer[NATIVE] && lContainer[DEHYDRATED_VIEWS]) {\n return true;\n }\n const hydrationInfo = hostLView[HYDRATION];\n const noOffsetIndex = tNode.index - HEADER_OFFSET;\n const isNodeCreationMode = !hydrationInfo || isInSkipHydrationBlock(tNode) || isDisconnectedNode$1(hydrationInfo, noOffsetIndex);\n if (isNodeCreationMode) {\n return false;\n }\n const currentRNode = getSegmentHead(hydrationInfo, noOffsetIndex);\n const serializedViews = hydrationInfo.data[CONTAINERS]?.[noOffsetIndex];\n ngDevMode && assertDefined(serializedViews, 'Unexpected state: no hydration info available for a given TNode, ' + 'which represents a view container.');\n const [commentNode, dehydratedViews] = locateDehydratedViewsInContainer(currentRNode, serializedViews);\n if (ngDevMode) {\n validateMatchingNode(commentNode, Node.COMMENT_NODE, null, hostLView, tNode, true);\n markRNodeAsClaimedByHydration(commentNode, false);\n }\n lContainer[NATIVE] = commentNode;\n lContainer[DEHYDRATED_VIEWS] = dehydratedViews;\n return true;\n}\nfunction locateOrCreateAnchorNode(lContainer, hostLView, hostTNode, slotValue) {\n if (!_populateDehydratedViewsInLContainer(lContainer, hostTNode, hostLView)) {\n createAnchorNode(lContainer, hostLView, hostTNode, slotValue);\n }\n}\nfunction enableLocateOrCreateContainerRefImpl() {\n _locateOrCreateAnchorNode = locateOrCreateAnchorNode;\n _populateDehydratedViewsInLContainer = populateDehydratedViewsInLContainerImpl;\n}\nclass LQuery_ {\n queryList;\n matches = null;\n constructor(queryList) {\n this.queryList = queryList;\n }\n clone() {\n return new LQuery_(this.queryList);\n }\n setDirty() {\n this.queryList.setDirty();\n }\n}\nclass LQueries_ {\n queries;\n constructor(queries = []) {\n this.queries = queries;\n }\n createEmbeddedView(tView) {\n const tQueries = tView.queries;\n if (tQueries !== null) {\n const noOfInheritedQueries = tView.contentQueries !== null ? tView.contentQueries[0] : tQueries.length;\n const viewLQueries = [];\n for (let i = 0; i < noOfInheritedQueries; i++) {\n const tQuery = tQueries.getByIndex(i);\n const parentLQuery = this.queries[tQuery.indexInDeclarationView];\n viewLQueries.push(parentLQuery.clone());\n }\n return new LQueries_(viewLQueries);\n }\n return null;\n }\n insertView(tView) {\n this.dirtyQueriesWithMatches(tView);\n }\n detachView(tView) {\n this.dirtyQueriesWithMatches(tView);\n }\n finishViewCreation(tView) {\n this.dirtyQueriesWithMatches(tView);\n }\n dirtyQueriesWithMatches(tView) {\n for (let i = 0; i < this.queries.length; i++) {\n if (getTQuery(tView, i).matches !== null) {\n this.queries[i].setDirty();\n }\n }\n }\n}\nclass TQueryMetadata_ {\n flags;\n read;\n predicate;\n constructor(predicate, flags, read = null) {\n this.flags = flags;\n this.read = read;\n if (typeof predicate === 'string') {\n this.predicate = splitQueryMultiSelectors(predicate);\n } else {\n this.predicate = predicate;\n }\n }\n}\nclass TQueries_ {\n queries;\n constructor(queries = []) {\n this.queries = queries;\n }\n elementStart(tView, tNode) {\n ngDevMode && assertFirstCreatePass(tView, 'Queries should collect results on the first template pass only');\n for (let i = 0; i < this.queries.length; i++) {\n this.queries[i].elementStart(tView, tNode);\n }\n }\n elementEnd(tNode) {\n for (let i = 0; i < this.queries.length; i++) {\n this.queries[i].elementEnd(tNode);\n }\n }\n embeddedTView(tNode) {\n let queriesForTemplateRef = null;\n for (let i = 0; i < this.length; i++) {\n const childQueryIndex = queriesForTemplateRef !== null ? queriesForTemplateRef.length : 0;\n const tqueryClone = this.getByIndex(i).embeddedTView(tNode, childQueryIndex);\n if (tqueryClone) {\n tqueryClone.indexInDeclarationView = i;\n if (queriesForTemplateRef !== null) {\n queriesForTemplateRef.push(tqueryClone);\n } else {\n queriesForTemplateRef = [tqueryClone];\n }\n }\n }\n return queriesForTemplateRef !== null ? new TQueries_(queriesForTemplateRef) : null;\n }\n template(tView, tNode) {\n ngDevMode && assertFirstCreatePass(tView, 'Queries should collect results on the first template pass only');\n for (let i = 0; i < this.queries.length; i++) {\n this.queries[i].template(tView, tNode);\n }\n }\n getByIndex(index) {\n ngDevMode && assertIndexInRange(this.queries, index);\n return this.queries[index];\n }\n get length() {\n return this.queries.length;\n }\n track(tquery) {\n this.queries.push(tquery);\n }\n}\nclass TQuery_ {\n metadata;\n matches = null;\n indexInDeclarationView = -1;\n crossesNgTemplate = false;\n _declarationNodeIndex;\n _appliesToNextNode = true;\n constructor(metadata, nodeIndex = -1) {\n this.metadata = metadata;\n this._declarationNodeIndex = nodeIndex;\n }\n elementStart(tView, tNode) {\n if (this.isApplyingToNode(tNode)) {\n this.matchTNode(tView, tNode);\n }\n }\n elementEnd(tNode) {\n if (this._declarationNodeIndex === tNode.index) {\n this._appliesToNextNode = false;\n }\n }\n template(tView, tNode) {\n this.elementStart(tView, tNode);\n }\n embeddedTView(tNode, childQueryIndex) {\n if (this.isApplyingToNode(tNode)) {\n this.crossesNgTemplate = true;\n this.addMatch(-tNode.index, childQueryIndex);\n return new TQuery_(this.metadata);\n }\n return null;\n }\n isApplyingToNode(tNode) {\n if (this._appliesToNextNode && (this.metadata.flags & 1) !== 1) {\n const declarationNodeIdx = this._declarationNodeIndex;\n let parent = tNode.parent;\n while (parent !== null && parent.type & 8 && parent.index !== declarationNodeIdx) {\n parent = parent.parent;\n }\n return declarationNodeIdx === (parent !== null ? parent.index : -1);\n }\n return this._appliesToNextNode;\n }\n matchTNode(tView, tNode) {\n const predicate = this.metadata.predicate;\n if (Array.isArray(predicate)) {\n for (let i = 0; i < predicate.length; i++) {\n const name = predicate[i];\n this.matchTNodeWithReadOption(tView, tNode, getIdxOfMatchingSelector(tNode, name));\n this.matchTNodeWithReadOption(tView, tNode, locateDirectiveOrProvider(tNode, tView, name, false, false));\n }\n } else {\n if (predicate === TemplateRef) {\n if (tNode.type & 4) {\n this.matchTNodeWithReadOption(tView, tNode, -1);\n }\n } else {\n this.matchTNodeWithReadOption(tView, tNode, locateDirectiveOrProvider(tNode, tView, predicate, false, false));\n }\n }\n }\n matchTNodeWithReadOption(tView, tNode, nodeMatchIdx) {\n if (nodeMatchIdx !== null) {\n const read = this.metadata.read;\n if (read !== null) {\n if (read === ElementRef || read === ViewContainerRef || read === TemplateRef && tNode.type & 4) {\n this.addMatch(tNode.index, -2);\n } else {\n const directiveOrProviderIdx = locateDirectiveOrProvider(tNode, tView, read, false, false);\n if (directiveOrProviderIdx !== null) {\n this.addMatch(tNode.index, directiveOrProviderIdx);\n }\n }\n } else {\n this.addMatch(tNode.index, nodeMatchIdx);\n }\n }\n }\n addMatch(tNodeIdx, matchIdx) {\n if (this.matches === null) {\n this.matches = [tNodeIdx, matchIdx];\n } else {\n this.matches.push(tNodeIdx, matchIdx);\n }\n }\n}\nfunction getIdxOfMatchingSelector(tNode, selector) {\n const localNames = tNode.localNames;\n if (localNames !== null) {\n for (let i = 0; i < localNames.length; i += 2) {\n if (localNames[i] === selector) {\n return localNames[i + 1];\n }\n }\n }\n return null;\n}\nfunction createResultByTNodeType(tNode, currentView) {\n if (tNode.type & (3 | 8)) {\n return createElementRef(tNode, currentView);\n } else if (tNode.type & 4) {\n return createTemplateRef(tNode, currentView);\n }\n return null;\n}\nfunction createResultForNode(lView, tNode, matchingIdx, read) {\n if (matchingIdx === -1) {\n return createResultByTNodeType(tNode, lView);\n } else if (matchingIdx === -2) {\n return createSpecialToken(lView, tNode, read);\n } else {\n return getNodeInjectable(lView, lView[TVIEW], matchingIdx, tNode);\n }\n}\nfunction createSpecialToken(lView, tNode, read) {\n if (read === ElementRef) {\n return createElementRef(tNode, lView);\n } else if (read === TemplateRef) {\n return createTemplateRef(tNode, lView);\n } else if (read === ViewContainerRef) {\n ngDevMode && assertTNodeType(tNode, 3 | 12);\n return createContainerRef(tNode, lView);\n } else {\n ngDevMode && throwError(`Special token to read should be one of ElementRef, TemplateRef or ViewContainerRef but got ${stringify(read)}.`);\n }\n}\nfunction materializeViewResults(tView, lView, tQuery, queryIndex) {\n const lQuery = lView[QUERIES].queries[queryIndex];\n if (lQuery.matches === null) {\n const tViewData = tView.data;\n const tQueryMatches = tQuery.matches;\n const result = [];\n for (let i = 0; tQueryMatches !== null && i < tQueryMatches.length; i += 2) {\n const matchedNodeIdx = tQueryMatches[i];\n if (matchedNodeIdx < 0) {\n result.push(null);\n } else {\n ngDevMode && assertIndexInRange(tViewData, matchedNodeIdx);\n const tNode = tViewData[matchedNodeIdx];\n result.push(createResultForNode(lView, tNode, tQueryMatches[i + 1], tQuery.metadata.read));\n }\n }\n lQuery.matches = result;\n }\n return lQuery.matches;\n}\nfunction collectQueryResults(tView, lView, queryIndex, result) {\n const tQuery = tView.queries.getByIndex(queryIndex);\n const tQueryMatches = tQuery.matches;\n if (tQueryMatches !== null) {\n const lViewResults = materializeViewResults(tView, lView, tQuery, queryIndex);\n for (let i = 0; i < tQueryMatches.length; i += 2) {\n const tNodeIdx = tQueryMatches[i];\n if (tNodeIdx > 0) {\n result.push(lViewResults[i / 2]);\n } else {\n const childQueryIndex = tQueryMatches[i + 1];\n const declarationLContainer = lView[-tNodeIdx];\n ngDevMode && assertLContainer(declarationLContainer);\n for (let i = CONTAINER_HEADER_OFFSET; i < declarationLContainer.length; i++) {\n const embeddedLView = declarationLContainer[i];\n if (embeddedLView[DECLARATION_LCONTAINER] === embeddedLView[PARENT]) {\n collectQueryResults(embeddedLView[TVIEW], embeddedLView, childQueryIndex, result);\n }\n }\n if (declarationLContainer[MOVED_VIEWS] !== null) {\n const embeddedLViews = declarationLContainer[MOVED_VIEWS];\n for (let i = 0; i < embeddedLViews.length; i++) {\n const embeddedLView = embeddedLViews[i];\n collectQueryResults(embeddedLView[TVIEW], embeddedLView, childQueryIndex, result);\n }\n }\n }\n }\n }\n return result;\n}\nfunction loadQueryInternal(lView, queryIndex) {\n ngDevMode && assertDefined(lView[QUERIES], 'LQueries should be defined when trying to load a query');\n ngDevMode && assertIndexInRange(lView[QUERIES].queries, queryIndex);\n return lView[QUERIES].queries[queryIndex].queryList;\n}\nfunction createLQuery(tView, lView, flags) {\n const queryList = new QueryList((flags & 4) === 4);\n storeCleanupWithContext(tView, lView, queryList, queryList.destroy);\n const lQueries = (lView[QUERIES] ??= new LQueries_()).queries;\n return lQueries.push(new LQuery_(queryList)) - 1;\n}\nfunction createViewQuery(predicate, flags, read) {\n ngDevMode && assertNumber(flags, 'Expecting flags');\n const tView = getTView();\n if (tView.firstCreatePass) {\n createTQuery(tView, new TQueryMetadata_(predicate, flags, read), -1);\n if ((flags & 2) === 2) {\n tView.staticViewQueries = true;\n }\n }\n return createLQuery(tView, getLView(), flags);\n}\nfunction createContentQuery(directiveIndex, predicate, flags, read) {\n ngDevMode && assertNumber(flags, 'Expecting flags');\n const tView = getTView();\n if (tView.firstCreatePass) {\n const tNode = getCurrentTNode();\n createTQuery(tView, new TQueryMetadata_(predicate, flags, read), tNode.index);\n saveContentQueryAndDirectiveIndex(tView, directiveIndex);\n if ((flags & 2) === 2) {\n tView.staticContentQueries = true;\n }\n }\n return createLQuery(tView, getLView(), flags);\n}\nfunction splitQueryMultiSelectors(locator) {\n return locator.split(',').map(s => s.trim());\n}\nfunction createTQuery(tView, metadata, nodeIndex) {\n if (tView.queries === null) tView.queries = new TQueries_();\n tView.queries.track(new TQuery_(metadata, nodeIndex));\n}\nfunction saveContentQueryAndDirectiveIndex(tView, directiveIndex) {\n const tViewContentQueries = tView.contentQueries || (tView.contentQueries = []);\n const lastSavedDirectiveIndex = tViewContentQueries.length ? tViewContentQueries[tViewContentQueries.length - 1] : -1;\n if (directiveIndex !== lastSavedDirectiveIndex) {\n tViewContentQueries.push(tView.queries.length - 1, directiveIndex);\n }\n}\nfunction getTQuery(tView, index) {\n ngDevMode && assertDefined(tView.queries, 'TQueries must be defined to retrieve a TQuery');\n return tView.queries.getByIndex(index);\n}\nfunction getQueryResults(lView, queryIndex) {\n const tView = lView[TVIEW];\n const tQuery = getTQuery(tView, queryIndex);\n return tQuery.crossesNgTemplate ? collectQueryResults(tView, lView, queryIndex, []) : materializeViewResults(tView, lView, tQuery, queryIndex);\n}\nfunction createQuerySignalFn(firstOnly, required, opts) {\n let node;\n const signalFn = createComputed(() => {\n node._dirtyCounter();\n const value = refreshSignalQuery(node, firstOnly);\n if (required && value === undefined) {\n throw new RuntimeError(-951, ngDevMode && 'Child query result is required but no value is available.');\n }\n return value;\n });\n node = signalFn[SIGNAL];\n node._dirtyCounter = signal(0);\n node._flatValue = undefined;\n if (ngDevMode) {\n signalFn.toString = () => `[Query Signal]`;\n node.debugName = opts?.debugName;\n }\n return signalFn;\n}\nfunction createSingleResultOptionalQuerySignalFn(opts) {\n return createQuerySignalFn(true, false, opts);\n}\nfunction createSingleResultRequiredQuerySignalFn(opts) {\n return createQuerySignalFn(true, true, opts);\n}\nfunction createMultiResultQuerySignalFn(opts) {\n return createQuerySignalFn(false, false, opts);\n}\nfunction bindQueryToSignal(target, queryIndex) {\n const node = target[SIGNAL];\n node._lView = getLView();\n node._queryIndex = queryIndex;\n node._queryList = loadQueryInternal(node._lView, queryIndex);\n node._queryList.onDirty(() => node._dirtyCounter.update(v => v + 1));\n}\nfunction refreshSignalQuery(node, firstOnly) {\n const lView = node._lView;\n const queryIndex = node._queryIndex;\n if (lView === undefined || queryIndex === undefined || lView[FLAGS] & 4) {\n return firstOnly ? undefined : EMPTY_ARRAY;\n }\n const queryList = loadQueryInternal(lView, queryIndex);\n const results = getQueryResults(lView, queryIndex);\n queryList.reset(results, unwrapElementRef);\n if (firstOnly) {\n return queryList.first;\n } else {\n const resultChanged = queryList._changesDetected;\n if (resultChanged || node._flatValue === undefined) {\n return node._flatValue = queryList.toArray();\n }\n return node._flatValue;\n }\n}\nlet componentResourceResolutionQueue = /*#__PURE__*/new Map();\nconst componentDefPendingResolution = /*#__PURE__*/new Set();\nasync function resolveComponentResources(resourceResolver) {\n const currentQueue = componentResourceResolutionQueue;\n componentResourceResolutionQueue = new Map();\n const urlCache = new Map();\n function cachedResourceResolve(url) {\n const promiseCached = urlCache.get(url);\n if (promiseCached) {\n return promiseCached;\n }\n const promise = resourceResolver(url).then(response => unwrapResponse(url, response));\n urlCache.set(url, promise);\n return promise;\n }\n const resolutionPromises = Array.from(currentQueue).map(async ([type, component]) => {\n if (component.styleUrl && component.styleUrls?.length) {\n throw new Error('@Component cannot define both `styleUrl` and `styleUrls`. ' + 'Use `styleUrl` if the component has one stylesheet, or `styleUrls` if it has multiple');\n }\n const componentTasks = [];\n if (component.templateUrl) {\n componentTasks.push(cachedResourceResolve(component.templateUrl).then(template => {\n component.template = template;\n }));\n }\n const styles = typeof component.styles === 'string' ? [component.styles] : component.styles ?? [];\n component.styles = styles;\n let {\n styleUrl,\n styleUrls\n } = component;\n if (styleUrl) {\n styleUrls = [styleUrl];\n component.styleUrl = undefined;\n }\n if (styleUrls?.length) {\n const allFetched = Promise.all(styleUrls.map(url => cachedResourceResolve(url))).then(fetchedStyles => {\n styles.push(...fetchedStyles);\n component.styleUrls = undefined;\n });\n componentTasks.push(allFetched);\n }\n await Promise.all(componentTasks);\n componentDefPendingResolution.delete(type);\n });\n await Promise.all(resolutionPromises);\n}\nfunction maybeQueueResolutionOfComponentResources(type, metadata) {\n if (componentNeedsResolution(metadata)) {\n componentResourceResolutionQueue.set(type, metadata);\n componentDefPendingResolution.add(type);\n }\n}\nfunction isComponentDefPendingResolution(type) {\n return componentDefPendingResolution.has(type);\n}\nfunction componentNeedsResolution(component) {\n return !!(component.templateUrl && !component.hasOwnProperty('template') || component.styleUrls?.length || component.styleUrl);\n}\nfunction clearResolutionOfComponentResourcesQueue() {\n const old = componentResourceResolutionQueue;\n componentResourceResolutionQueue = new Map();\n return old;\n}\nfunction restoreComponentResolutionQueue(queue) {\n componentDefPendingResolution.clear();\n for (const type of queue.keys()) {\n componentDefPendingResolution.add(type);\n }\n componentResourceResolutionQueue = queue;\n}\nfunction isComponentResourceResolutionQueueEmpty() {\n return componentResourceResolutionQueue.size === 0;\n}\nasync function unwrapResponse(url, response) {\n if (typeof response === 'string') {\n return response;\n }\n if (response.status !== undefined && response.status !== 200) {\n throw new RuntimeError(918, ngDevMode && `Could not load resource: ${url}. Response status: ${response.status}`);\n }\n return response.text();\n}\nconst modules = /*#__PURE__*/new Map();\nlet checkForDuplicateNgModules = true;\nfunction assertSameOrNotExisting(id, type, incoming) {\n if (type && type !== incoming && checkForDuplicateNgModules) {\n throw new RuntimeError(921, ngDevMode && `Duplicate module registered for ${id} - ${stringify(type)} vs ${stringify(type.name)}`);\n }\n}\nfunction registerNgModuleType(ngModuleType, id) {\n const existing = modules.get(id) || null;\n assertSameOrNotExisting(id, existing, ngModuleType);\n modules.set(id, ngModuleType);\n}\nfunction getRegisteredNgModuleType(id) {\n return modules.get(id);\n}\nfunction setAllowDuplicateNgModuleIdsForTest(allowDuplicates) {\n checkForDuplicateNgModules = !allowDuplicates;\n}\nlet NgModuleRef$1 = class NgModuleRef {};\nlet NgModuleFactory$1 = class NgModuleFactory {};\nfunction createNgModule(ngModule, parentInjector) {\n return new NgModuleRef(ngModule, parentInjector ?? null, []);\n}\nconst createNgModuleRef = createNgModule;\nclass NgModuleRef extends NgModuleRef$1 {\n ngModuleType;\n _parent;\n _bootstrapComponents = [];\n _r3Injector;\n instance;\n destroyCbs = [];\n componentFactoryResolver = /*#__PURE__*/new ComponentFactoryResolver(this);\n constructor(ngModuleType, _parent, additionalProviders, runInjectorInitializers = true) {\n super();\n this.ngModuleType = ngModuleType;\n this._parent = _parent;\n const ngModuleDef = getNgModuleDef(ngModuleType);\n ngDevMode && assertDefined(ngModuleDef, `NgModule '${stringify(ngModuleType)}' is not a subtype of 'NgModuleType'.`);\n this._bootstrapComponents = maybeUnwrapFn(ngModuleDef.bootstrap);\n this._r3Injector = createInjectorWithoutInjectorInstances(ngModuleType, _parent, [{\n provide: NgModuleRef$1,\n useValue: this\n }, {\n provide: ComponentFactoryResolver$1,\n useValue: this.componentFactoryResolver\n }, ...additionalProviders], stringify(ngModuleType), new Set(['environment']));\n if (runInjectorInitializers) {\n this.resolveInjectorInitializers();\n }\n }\n resolveInjectorInitializers() {\n this._r3Injector.resolveInjectorInitializers();\n this.instance = this._r3Injector.get(this.ngModuleType);\n }\n get injector() {\n return this._r3Injector;\n }\n destroy() {\n ngDevMode && assertDefined(this.destroyCbs, 'NgModule already destroyed');\n const injector = this._r3Injector;\n !injector.destroyed && injector.destroy();\n this.destroyCbs.forEach(fn => fn());\n this.destroyCbs = null;\n }\n onDestroy(callback) {\n ngDevMode && assertDefined(this.destroyCbs, 'NgModule already destroyed');\n this.destroyCbs.push(callback);\n }\n}\nclass NgModuleFactory extends NgModuleFactory$1 {\n moduleType;\n constructor(moduleType) {\n super();\n this.moduleType = moduleType;\n }\n create(parentInjector) {\n return new NgModuleRef(this.moduleType, parentInjector, []);\n }\n}\nfunction createNgModuleRefWithProviders(moduleType, parentInjector, additionalProviders) {\n return new NgModuleRef(moduleType, parentInjector, additionalProviders, false);\n}\nclass EnvironmentNgModuleRefAdapter extends NgModuleRef$1 {\n injector;\n componentFactoryResolver = /*#__PURE__*/new ComponentFactoryResolver(this);\n instance = null;\n constructor(config) {\n super();\n const injector = new R3Injector([...config.providers, {\n provide: NgModuleRef$1,\n useValue: this\n }, {\n provide: ComponentFactoryResolver$1,\n useValue: this.componentFactoryResolver\n }], config.parent || getNullInjector(), config.debugName, new Set(['environment']));\n this.injector = injector;\n if (config.runEnvironmentInitializers) {\n injector.resolveInjectorInitializers();\n }\n }\n destroy() {\n this.injector.destroy();\n }\n onDestroy(callback) {\n this.injector.onDestroy(callback);\n }\n}\nfunction createEnvironmentInjector(providers, parent, debugName = null) {\n const adapter = new EnvironmentNgModuleRefAdapter({\n providers,\n parent,\n debugName,\n runEnvironmentInitializers: true\n });\n return adapter.injector;\n}\nlet StandaloneService = /*#__PURE__*/(() => {\n class StandaloneService {\n _injector;\n cachedInjectors = new Map();\n constructor(_injector) {\n this._injector = _injector;\n }\n getOrCreateStandaloneInjector(componentDef) {\n if (!componentDef.standalone) {\n return null;\n }\n if (!this.cachedInjectors.has(componentDef)) {\n const providers = internalImportProvidersFrom(false, componentDef.type);\n const standaloneInjector = providers.length > 0 ? createEnvironmentInjector([providers], this._injector, typeof ngDevMode !== 'undefined' && ngDevMode ? `Standalone[${componentDef.type.name}]` : '') : null;\n this.cachedInjectors.set(componentDef, standaloneInjector);\n }\n return this.cachedInjectors.get(componentDef);\n }\n ngOnDestroy() {\n try {\n for (const injector of this.cachedInjectors.values()) {\n if (injector !== null) {\n injector.destroy();\n }\n }\n } finally {\n this.cachedInjectors.clear();\n }\n }\n static ɵprov = /* @__PURE__ */\n __defineInjectable({\n token: StandaloneService,\n providedIn: 'environment',\n factory: () => new StandaloneService(__inject(EnvironmentInjector))\n });\n }\n return StandaloneService;\n})();\nfunction ɵɵdefineComponent(componentDefinition) {\n return noSideEffects(() => {\n (typeof ngDevMode === 'undefined' || ngDevMode) && initNgDevMode();\n const baseDef = getNgDirectiveDef(componentDefinition);\n const def = {\n ...baseDef,\n decls: componentDefinition.decls,\n vars: componentDefinition.vars,\n template: componentDefinition.template,\n consts: componentDefinition.consts || null,\n ngContentSelectors: componentDefinition.ngContentSelectors,\n onPush: componentDefinition.changeDetection === ChangeDetectionStrategy.OnPush,\n directiveDefs: null,\n pipeDefs: null,\n dependencies: baseDef.standalone && componentDefinition.dependencies || null,\n getStandaloneInjector: baseDef.standalone ? parentInjector => {\n return parentInjector.get(StandaloneService).getOrCreateStandaloneInjector(def);\n } : null,\n getExternalStyles: null,\n signals: componentDefinition.signals ?? false,\n data: componentDefinition.data || {},\n encapsulation: componentDefinition.encapsulation || ViewEncapsulation.Emulated,\n styles: componentDefinition.styles || EMPTY_ARRAY,\n _: null,\n schemas: componentDefinition.schemas || null,\n tView: null,\n id: ''\n };\n if (baseDef.standalone) {\n performanceMarkFeature('NgStandalone');\n }\n initFeatures(def);\n const dependencies = componentDefinition.dependencies;\n def.directiveDefs = extractDefListOrFactory(dependencies, extractDirectiveDef);\n def.pipeDefs = extractDefListOrFactory(dependencies, getPipeDef$1);\n def.id = getComponentId(def);\n return def;\n });\n}\nfunction extractDirectiveDef(type) {\n return getComponentDef(type) || getDirectiveDef(type);\n}\nfunction ɵɵdefineNgModule(def) {\n return noSideEffects(() => {\n const res = {\n type: def.type,\n bootstrap: def.bootstrap || EMPTY_ARRAY,\n declarations: def.declarations || EMPTY_ARRAY,\n imports: def.imports || EMPTY_ARRAY,\n exports: def.exports || EMPTY_ARRAY,\n transitiveCompileScopes: null,\n schemas: def.schemas || null,\n id: def.id || null\n };\n return res;\n });\n}\nfunction parseAndConvertInputsForDefinition(obj, declaredInputs) {\n if (obj == null) return EMPTY_OBJ;\n const newLookup = {};\n for (const minifiedKey in obj) {\n if (obj.hasOwnProperty(minifiedKey)) {\n const value = obj[minifiedKey];\n let publicName;\n let declaredName;\n let inputFlags;\n let transform;\n if (Array.isArray(value)) {\n inputFlags = value[0];\n publicName = value[1];\n declaredName = value[2] ?? publicName;\n transform = value[3] || null;\n } else {\n publicName = value;\n declaredName = value;\n inputFlags = InputFlags.None;\n transform = null;\n }\n newLookup[publicName] = [minifiedKey, inputFlags, transform];\n declaredInputs[publicName] = declaredName;\n }\n }\n return newLookup;\n}\nfunction parseAndConvertOutputsForDefinition(obj) {\n if (obj == null) return EMPTY_OBJ;\n const newLookup = {};\n for (const minifiedKey in obj) {\n if (obj.hasOwnProperty(minifiedKey)) {\n newLookup[obj[minifiedKey]] = minifiedKey;\n }\n }\n return newLookup;\n}\nfunction ɵɵdefineDirective(directiveDefinition) {\n return noSideEffects(() => {\n const def = getNgDirectiveDef(directiveDefinition);\n initFeatures(def);\n return def;\n });\n}\nfunction ɵɵdefinePipe(pipeDef) {\n return {\n type: pipeDef.type,\n name: pipeDef.name,\n factory: null,\n pure: pipeDef.pure !== false,\n standalone: pipeDef.standalone ?? true,\n onDestroy: pipeDef.type.prototype.ngOnDestroy || null\n };\n}\nfunction getNgDirectiveDef(directiveDefinition) {\n const declaredInputs = {};\n return {\n type: directiveDefinition.type,\n providersResolver: null,\n viewProvidersResolver: null,\n factory: null,\n hostBindings: directiveDefinition.hostBindings || null,\n hostVars: directiveDefinition.hostVars || 0,\n hostAttrs: directiveDefinition.hostAttrs || null,\n contentQueries: directiveDefinition.contentQueries || null,\n declaredInputs: declaredInputs,\n inputConfig: directiveDefinition.inputs || EMPTY_OBJ,\n exportAs: directiveDefinition.exportAs || null,\n standalone: directiveDefinition.standalone ?? true,\n signals: directiveDefinition.signals === true,\n selectors: directiveDefinition.selectors || EMPTY_ARRAY,\n viewQuery: directiveDefinition.viewQuery || null,\n features: directiveDefinition.features || null,\n setInput: null,\n resolveHostDirectives: null,\n hostDirectives: null,\n controlDef: null,\n inputs: parseAndConvertInputsForDefinition(directiveDefinition.inputs, declaredInputs),\n outputs: parseAndConvertOutputsForDefinition(directiveDefinition.outputs),\n debugInfo: null\n };\n}\nfunction initFeatures(definition) {\n definition.features?.forEach(fn => fn(definition));\n}\nfunction extractDefListOrFactory(dependencies, defExtractor) {\n if (!dependencies) {\n return null;\n }\n return () => {\n const resolvedDependencies = typeof dependencies === 'function' ? dependencies() : dependencies;\n const result = [];\n for (const dep of resolvedDependencies) {\n const definition = defExtractor(dep);\n if (definition !== null) {\n result.push(definition);\n }\n }\n return result;\n };\n}\nconst GENERATED_COMP_IDS = /*#__PURE__*/new Map();\nfunction getComponentId(componentDef) {\n let hash = 0;\n const componentDefConsts = typeof componentDef.consts === 'function' ? '' : componentDef.consts;\n const hashSelectors = [componentDef.selectors, componentDef.ngContentSelectors, componentDef.hostVars, componentDef.hostAttrs, componentDefConsts, componentDef.vars, componentDef.decls, componentDef.encapsulation, componentDef.standalone, componentDef.signals, componentDef.exportAs, JSON.stringify(componentDef.inputs), JSON.stringify(componentDef.outputs), Object.getOwnPropertyNames(componentDef.type.prototype), !!componentDef.contentQueries, !!componentDef.viewQuery];\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n for (const item of hashSelectors) {\n assertNotEqual(typeof item, 'function', 'Internal error: attempting to use a function in component id computation logic.');\n }\n }\n for (const char of hashSelectors.join('|')) {\n hash = Math.imul(31, hash) + char.charCodeAt(0) << 0;\n }\n hash += 2147483647 + 1;\n const compId = 'c' + hash;\n if ((typeof ngDevMode === 'undefined' || ngDevMode) && (typeof ngServerMode === 'undefined' || !ngServerMode)) {\n if (GENERATED_COMP_IDS.has(compId)) {\n const previousCompDefType = GENERATED_COMP_IDS.get(compId);\n if (previousCompDefType !== componentDef.type) {\n console.warn(formatRuntimeError(-912, `Component ID generation collision detected. Components '${previousCompDefType.name}' and '${componentDef.type.name}' with selector '${stringifyCSSSelectorList(componentDef.selectors)}' generated the same component ID. To fix this, you can change the selector of one of those components or add an extra host attribute to force a different ID.`));\n }\n } else {\n GENERATED_COMP_IDS.set(compId, componentDef.type);\n }\n }\n return compId;\n}\nfunction ɵɵControlFeature(passThroughInput) {\n return definition => {\n definition.controlDef = {\n create: (inst, host) => {\n inst?.ɵngControlCreate(host);\n },\n update: (inst, host) => {\n inst?.ɵngControlUpdate?.(host);\n },\n passThroughInput\n };\n };\n}\nfunction ɵɵHostDirectivesFeature(rawHostDirectives) {\n const feature = definition => {\n const isEager = Array.isArray(rawHostDirectives);\n if (definition.hostDirectives === null) {\n definition.resolveHostDirectives = resolveHostDirectives;\n definition.hostDirectives = isEager ? rawHostDirectives.map(createHostDirectiveDef) : [rawHostDirectives];\n } else if (isEager) {\n definition.hostDirectives.unshift(...rawHostDirectives.map(createHostDirectiveDef));\n } else {\n definition.hostDirectives.unshift(rawHostDirectives);\n }\n };\n feature.ngInherit = true;\n return feature;\n}\nfunction resolveHostDirectives(matches) {\n const allDirectiveDefs = [];\n let hasComponent = false;\n let hostDirectiveDefs = null;\n let hostDirectiveRanges = null;\n for (let i = 0; i < matches.length; i++) {\n const def = matches[i];\n if (def.hostDirectives !== null) {\n const start = allDirectiveDefs.length;\n hostDirectiveDefs ??= new Map();\n hostDirectiveRanges ??= new Map();\n findHostDirectiveDefs(def, allDirectiveDefs, hostDirectiveDefs);\n hostDirectiveRanges.set(def, [start, allDirectiveDefs.length - 1]);\n }\n if (i === 0 && isComponentDef(def)) {\n hasComponent = true;\n allDirectiveDefs.push(def);\n }\n }\n for (let i = hasComponent ? 1 : 0; i < matches.length; i++) {\n allDirectiveDefs.push(matches[i]);\n }\n return [allDirectiveDefs, hostDirectiveDefs, hostDirectiveRanges];\n}\nfunction findHostDirectiveDefs(currentDef, matchedDefs, hostDirectiveDefs) {\n if (currentDef.hostDirectives !== null) {\n for (const configOrFn of currentDef.hostDirectives) {\n if (typeof configOrFn === 'function') {\n const resolved = configOrFn();\n for (const config of resolved) {\n trackHostDirectiveDef(createHostDirectiveDef(config), matchedDefs, hostDirectiveDefs);\n }\n } else {\n trackHostDirectiveDef(configOrFn, matchedDefs, hostDirectiveDefs);\n }\n }\n }\n}\nfunction trackHostDirectiveDef(def, matchedDefs, hostDirectiveDefs) {\n const hostDirectiveDef = getDirectiveDef(def.directive);\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n validateHostDirective(def, hostDirectiveDef);\n }\n patchDeclaredInputs(hostDirectiveDef.declaredInputs, def.inputs);\n findHostDirectiveDefs(hostDirectiveDef, matchedDefs, hostDirectiveDefs);\n hostDirectiveDefs.set(hostDirectiveDef, def);\n matchedDefs.push(hostDirectiveDef);\n}\nfunction createHostDirectiveDef(config) {\n return typeof config === 'function' ? {\n directive: resolveForwardRef(config),\n inputs: EMPTY_OBJ,\n outputs: EMPTY_OBJ\n } : {\n directive: resolveForwardRef(config.directive),\n inputs: bindingArrayToMap(config.inputs),\n outputs: bindingArrayToMap(config.outputs)\n };\n}\nfunction bindingArrayToMap(bindings) {\n if (bindings === undefined || bindings.length === 0) {\n return EMPTY_OBJ;\n }\n const result = {};\n for (let i = 0; i < bindings.length; i += 2) {\n result[bindings[i]] = bindings[i + 1];\n }\n return result;\n}\nfunction patchDeclaredInputs(declaredInputs, exposedInputs) {\n for (const publicName in exposedInputs) {\n if (exposedInputs.hasOwnProperty(publicName)) {\n const remappedPublicName = exposedInputs[publicName];\n const privateName = declaredInputs[publicName];\n if ((typeof ngDevMode === 'undefined' || ngDevMode) && declaredInputs.hasOwnProperty(remappedPublicName)) {\n assertEqual(declaredInputs[remappedPublicName], declaredInputs[publicName], `Conflicting host directive input alias ${publicName}.`);\n }\n declaredInputs[remappedPublicName] = privateName;\n }\n }\n}\nfunction validateHostDirective(hostDirectiveConfig, directiveDef) {\n const type = hostDirectiveConfig.directive;\n if (directiveDef === null) {\n if (getComponentDef(type) !== null) {\n throw new RuntimeError(310, `Host directive ${type.name} cannot be a component.`);\n }\n throw new RuntimeError(307, `Could not resolve metadata for host directive ${type.name}. ` + `Make sure that the ${type.name} class is annotated with an @Directive decorator.`);\n }\n if (!directiveDef.standalone) {\n throw new RuntimeError(308, `Host directive ${directiveDef.type.name} must be standalone.`);\n }\n validateMappings('input', directiveDef, hostDirectiveConfig.inputs);\n validateMappings('output', directiveDef, hostDirectiveConfig.outputs);\n}\nfunction validateMappings(bindingType, def, hostDirectiveBindings) {\n const className = def.type.name;\n const bindings = bindingType === 'input' ? def.inputs : def.outputs;\n for (const publicName in hostDirectiveBindings) {\n if (hostDirectiveBindings.hasOwnProperty(publicName)) {\n if (!bindings.hasOwnProperty(publicName)) {\n throw new RuntimeError(311, `Directive ${className} does not have an ${bindingType} with a public name of ${publicName}.`);\n }\n const remappedPublicName = hostDirectiveBindings[publicName];\n if (bindings.hasOwnProperty(remappedPublicName) && remappedPublicName !== publicName) {\n throw new RuntimeError(312, `Cannot alias ${bindingType} ${publicName} of host directive ${className} to ${remappedPublicName}, because it already has a different ${bindingType} with the same public name.`);\n }\n }\n }\n}\nfunction getSuperType(type) {\n return Object.getPrototypeOf(type.prototype).constructor;\n}\nfunction ɵɵInheritDefinitionFeature(definition) {\n let superType = getSuperType(definition.type);\n let shouldInheritFields = true;\n const inheritanceChain = [definition];\n while (superType) {\n let superDef = undefined;\n if (isComponentDef(definition)) {\n superDef = superType.ɵcmp || superType.ɵdir;\n } else {\n if (superType.ɵcmp) {\n throw new RuntimeError(903, ngDevMode && `Directives cannot inherit Components. Directive ${stringifyForError(definition.type)} is attempting to extend component ${stringifyForError(superType)}`);\n }\n superDef = superType.ɵdir;\n }\n if (superDef) {\n if (shouldInheritFields) {\n inheritanceChain.push(superDef);\n const writeableDef = definition;\n writeableDef.inputs = maybeUnwrapEmpty(definition.inputs);\n writeableDef.declaredInputs = maybeUnwrapEmpty(definition.declaredInputs);\n writeableDef.outputs = maybeUnwrapEmpty(definition.outputs);\n const superHostBindings = superDef.hostBindings;\n superHostBindings && inheritHostBindings(definition, superHostBindings);\n const superViewQuery = superDef.viewQuery;\n const superContentQueries = superDef.contentQueries;\n superViewQuery && inheritViewQuery(definition, superViewQuery);\n superContentQueries && inheritContentQueries(definition, superContentQueries);\n mergeInputsWithTransforms(definition, superDef);\n fillProperties(definition.outputs, superDef.outputs);\n if (isComponentDef(superDef) && superDef.data.animation) {\n const defData = definition.data;\n defData.animation = (defData.animation || []).concat(superDef.data.animation);\n }\n }\n const features = superDef.features;\n if (features) {\n for (let i = 0; i < features.length; i++) {\n const feature = features[i];\n if (feature && feature.ngInherit) {\n feature(definition);\n }\n if (feature === ɵɵInheritDefinitionFeature) {\n shouldInheritFields = false;\n }\n }\n }\n }\n superType = Object.getPrototypeOf(superType);\n }\n mergeHostAttrsAcrossInheritance(inheritanceChain);\n}\nfunction mergeInputsWithTransforms(target, source) {\n for (const key in source.inputs) {\n if (!source.inputs.hasOwnProperty(key)) {\n continue;\n }\n if (target.inputs.hasOwnProperty(key)) {\n continue;\n }\n const value = source.inputs[key];\n if (value !== undefined) {\n target.inputs[key] = value;\n target.declaredInputs[key] = source.declaredInputs[key];\n }\n }\n}\nfunction mergeHostAttrsAcrossInheritance(inheritanceChain) {\n let hostVars = 0;\n let hostAttrs = null;\n for (let i = inheritanceChain.length - 1; i >= 0; i--) {\n const def = inheritanceChain[i];\n def.hostVars = hostVars += def.hostVars;\n def.hostAttrs = mergeHostAttrs(def.hostAttrs, hostAttrs = mergeHostAttrs(hostAttrs, def.hostAttrs));\n }\n}\nfunction maybeUnwrapEmpty(value) {\n if (value === EMPTY_OBJ) {\n return {};\n } else if (value === EMPTY_ARRAY) {\n return [];\n } else {\n return value;\n }\n}\nfunction inheritViewQuery(definition, superViewQuery) {\n const prevViewQuery = definition.viewQuery;\n if (prevViewQuery) {\n definition.viewQuery = (rf, ctx) => {\n superViewQuery(rf, ctx);\n prevViewQuery(rf, ctx);\n };\n } else {\n definition.viewQuery = superViewQuery;\n }\n}\nfunction inheritContentQueries(definition, superContentQueries) {\n const prevContentQueries = definition.contentQueries;\n if (prevContentQueries) {\n definition.contentQueries = (rf, ctx, directiveIndex) => {\n superContentQueries(rf, ctx, directiveIndex);\n prevContentQueries(rf, ctx, directiveIndex);\n };\n } else {\n definition.contentQueries = superContentQueries;\n }\n}\nfunction inheritHostBindings(definition, superHostBindings) {\n const prevHostBindings = definition.hostBindings;\n if (prevHostBindings) {\n definition.hostBindings = (rf, ctx) => {\n superHostBindings(rf, ctx);\n prevHostBindings(rf, ctx);\n };\n } else {\n definition.hostBindings = superHostBindings;\n }\n}\nfunction templateCreate(tNode, declarationLView, declarationTView, index, templateFn, decls, vars, flags) {\n if (declarationTView.firstCreatePass) {\n tNode.mergedAttrs = mergeHostAttrs(tNode.mergedAttrs, tNode.attrs);\n const embeddedTView = tNode.tView = createTView(2, tNode, templateFn, decls, vars, declarationTView.directiveRegistry, declarationTView.pipeRegistry, null, declarationTView.schemas, declarationTView.consts, null);\n if (declarationTView.queries !== null) {\n declarationTView.queries.template(declarationTView, tNode);\n embeddedTView.queries = declarationTView.queries.embeddedTView(tNode);\n }\n }\n if (flags) {\n tNode.flags |= flags;\n }\n setCurrentTNode(tNode, false);\n const comment = _locateOrCreateContainerAnchor(declarationTView, declarationLView, tNode, index);\n if (wasLastNodeCreated()) {\n appendChild(declarationTView, declarationLView, comment, tNode);\n }\n attachPatchData(comment, declarationLView);\n const lContainer = createLContainer(comment, declarationLView, comment, tNode);\n declarationLView[index + HEADER_OFFSET] = lContainer;\n addToEndOfViewTree(declarationLView, lContainer);\n populateDehydratedViewsInLContainer(lContainer, tNode, declarationLView);\n}\nfunction declareDirectiveHostTemplate(declarationLView, declarationTView, index, templateFn, decls, vars, tagName, attrs, flags, localRefsIndex, localRefExtractor) {\n const adjustedIndex = index + HEADER_OFFSET;\n let tNode;\n if (declarationTView.firstCreatePass) {\n tNode = getOrCreateTNode(declarationTView, adjustedIndex, 4, tagName || null, attrs || null);\n if (getBindingsEnabled()) {\n resolveDirectives(declarationTView, declarationLView, tNode, getConstant(declarationTView.consts, localRefsIndex), findDirectiveDefMatches);\n }\n registerPostOrderHooks(declarationTView, tNode);\n } else {\n tNode = declarationTView.data[adjustedIndex];\n }\n templateCreate(tNode, declarationLView, declarationTView, index, templateFn, decls, vars, flags);\n if (isDirectiveHost(tNode)) {\n createDirectivesInstances(declarationTView, declarationLView, tNode);\n }\n if (localRefsIndex != null) {\n saveResolvedLocalsInData(declarationLView, tNode, localRefExtractor);\n }\n return tNode;\n}\nfunction declareNoDirectiveHostTemplate(declarationLView, declarationTView, index, templateFn, decls, vars, tagName, attrs, flags, localRefsIndex, localRefExtractor) {\n const adjustedIndex = index + HEADER_OFFSET;\n let tNode;\n if (declarationTView.firstCreatePass) {\n tNode = getOrCreateTNode(declarationTView, adjustedIndex, 4, tagName || null, attrs || null);\n if (localRefsIndex != null) {\n const refs = getConstant(declarationTView.consts, localRefsIndex);\n tNode.localNames = [];\n for (let i = 0; i < refs.length; i += 2) {\n tNode.localNames.push(refs[i], -1);\n }\n }\n } else {\n tNode = declarationTView.data[adjustedIndex];\n }\n templateCreate(tNode, declarationLView, declarationTView, index, templateFn, decls, vars, flags);\n if (localRefsIndex != null) {\n saveResolvedLocalsInData(declarationLView, tNode, localRefExtractor);\n }\n return tNode;\n}\nfunction ɵɵtemplate(index, templateFn, decls, vars, tagName, attrsIndex, localRefsIndex, localRefExtractor) {\n const lView = getLView();\n const tView = getTView();\n const attrs = getConstant(tView.consts, attrsIndex);\n declareDirectiveHostTemplate(lView, tView, index, templateFn, decls, vars, tagName, attrs, undefined, localRefsIndex, localRefExtractor);\n return ɵɵtemplate;\n}\nfunction ɵɵdomTemplate(index, templateFn, decls, vars, tagName, attrsIndex, localRefsIndex, localRefExtractor) {\n const lView = getLView();\n const tView = getTView();\n const attrs = getConstant(tView.consts, attrsIndex);\n declareNoDirectiveHostTemplate(lView, tView, index, templateFn, decls, vars, tagName, attrs, undefined, localRefsIndex, localRefExtractor);\n return ɵɵdomTemplate;\n}\nlet _locateOrCreateContainerAnchor = createContainerAnchorImpl;\nfunction createContainerAnchorImpl(tView, lView, tNode, index) {\n lastNodeWasCreated(true);\n return lView[RENDERER].createComment(ngDevMode ? 'container' : '');\n}\nfunction locateOrCreateContainerAnchorImpl(tView, lView, tNode, index) {\n const isNodeCreationMode = !canHydrateNode(lView, tNode);\n lastNodeWasCreated(isNodeCreationMode);\n const ssrId = lView[HYDRATION]?.data[TEMPLATES]?.[index] ?? null;\n if (ssrId !== null && tNode.tView !== null) {\n if (tNode.tView.ssrId === null) {\n tNode.tView.ssrId = ssrId;\n } else {\n ngDevMode && assertEqual(tNode.tView.ssrId, ssrId, 'Unexpected value of the `ssrId` for this TView');\n }\n }\n if (isNodeCreationMode) {\n return createContainerAnchorImpl(tView, lView);\n }\n const hydrationInfo = lView[HYDRATION];\n const currentRNode = locateNextRNode(hydrationInfo, tView, lView, tNode);\n ngDevMode && validateNodeExists(currentRNode, lView, tNode);\n setSegmentHead(hydrationInfo, index, currentRNode);\n const viewContainerSize = calcSerializedContainerSize(hydrationInfo, index);\n const comment = siblingAfter(viewContainerSize, currentRNode);\n if (ngDevMode) {\n validateMatchingNode(comment, Node.COMMENT_NODE, null, lView, tNode);\n markRNodeAsClaimedByHydration(comment);\n }\n return comment;\n}\nfunction enableLocateOrCreateContainerAnchorImpl() {\n _locateOrCreateContainerAnchor = locateOrCreateContainerAnchorImpl;\n}\nvar DeferDependenciesLoadingState = /*#__PURE__*/function (DeferDependenciesLoadingState) {\n DeferDependenciesLoadingState[DeferDependenciesLoadingState[\"NOT_STARTED\"] = 0] = \"NOT_STARTED\";\n DeferDependenciesLoadingState[DeferDependenciesLoadingState[\"IN_PROGRESS\"] = 1] = \"IN_PROGRESS\";\n DeferDependenciesLoadingState[DeferDependenciesLoadingState[\"COMPLETE\"] = 2] = \"COMPLETE\";\n DeferDependenciesLoadingState[DeferDependenciesLoadingState[\"FAILED\"] = 3] = \"FAILED\";\n return DeferDependenciesLoadingState;\n}(DeferDependenciesLoadingState || {});\nconst MINIMUM_SLOT = 0;\nconst LOADING_AFTER_SLOT = 1;\nvar DeferBlockState = /*#__PURE__*/function (DeferBlockState) {\n DeferBlockState[DeferBlockState[\"Placeholder\"] = 0] = \"Placeholder\";\n DeferBlockState[DeferBlockState[\"Loading\"] = 1] = \"Loading\";\n DeferBlockState[DeferBlockState[\"Complete\"] = 2] = \"Complete\";\n DeferBlockState[DeferBlockState[\"Error\"] = 3] = \"Error\";\n return DeferBlockState;\n}(DeferBlockState || {});\nvar DeferBlockInternalState = /*#__PURE__*/function (DeferBlockInternalState) {\n DeferBlockInternalState[DeferBlockInternalState[\"Initial\"] = -1] = \"Initial\";\n return DeferBlockInternalState;\n}(DeferBlockInternalState || {});\nconst NEXT_DEFER_BLOCK_STATE = 0;\nconst DEFER_BLOCK_STATE = 1;\nconst STATE_IS_FROZEN_UNTIL = 2;\nconst LOADING_AFTER_CLEANUP_FN = 3;\nconst TRIGGER_CLEANUP_FNS = 4;\nconst PREFETCH_TRIGGER_CLEANUP_FNS = 5;\nconst SSR_UNIQUE_ID = 6;\nconst SSR_BLOCK_STATE = 7;\nconst ON_COMPLETE_FNS = 8;\nconst HYDRATE_TRIGGER_CLEANUP_FNS = 9;\nvar DeferBlockBehavior = /*#__PURE__*/function (DeferBlockBehavior) {\n DeferBlockBehavior[DeferBlockBehavior[\"Manual\"] = 0] = \"Manual\";\n DeferBlockBehavior[DeferBlockBehavior[\"Playthrough\"] = 1] = \"Playthrough\";\n return DeferBlockBehavior;\n}(DeferBlockBehavior || {});\nfunction storeTriggerCleanupFn(type, lDetails, cleanupFn) {\n const key = getCleanupFnKeyByType(type);\n if (lDetails[key] === null) {\n lDetails[key] = [];\n }\n lDetails[key].push(cleanupFn);\n}\nfunction invokeTriggerCleanupFns(type, lDetails) {\n const key = getCleanupFnKeyByType(type);\n const cleanupFns = lDetails[key];\n if (cleanupFns !== null) {\n for (const cleanupFn of cleanupFns) {\n cleanupFn();\n }\n lDetails[key] = null;\n }\n}\nfunction invokeAllTriggerCleanupFns(lDetails) {\n invokeTriggerCleanupFns(1, lDetails);\n invokeTriggerCleanupFns(0, lDetails);\n invokeTriggerCleanupFns(2, lDetails);\n}\nfunction getCleanupFnKeyByType(type) {\n let key = TRIGGER_CLEANUP_FNS;\n if (type === 1) {\n key = PREFETCH_TRIGGER_CLEANUP_FNS;\n } else if (type === 2) {\n key = HYDRATE_TRIGGER_CLEANUP_FNS;\n }\n return key;\n}\nfunction getDeferBlockDataIndex(deferBlockIndex) {\n return deferBlockIndex + 1;\n}\nfunction getLDeferBlockDetails(lView, tNode) {\n const tView = lView[TVIEW];\n const slotIndex = getDeferBlockDataIndex(tNode.index);\n ngDevMode && assertIndexInDeclRange(tView, slotIndex);\n return lView[slotIndex];\n}\nfunction setLDeferBlockDetails(lView, deferBlockIndex, lDetails) {\n const tView = lView[TVIEW];\n const slotIndex = getDeferBlockDataIndex(deferBlockIndex);\n ngDevMode && assertIndexInDeclRange(tView, slotIndex);\n lView[slotIndex] = lDetails;\n}\nfunction getTDeferBlockDetails(tView, tNode) {\n const slotIndex = getDeferBlockDataIndex(tNode.index);\n ngDevMode && assertIndexInDeclRange(tView, slotIndex);\n return tView.data[slotIndex];\n}\nfunction setTDeferBlockDetails(tView, deferBlockIndex, deferBlockConfig) {\n const slotIndex = getDeferBlockDataIndex(deferBlockIndex);\n ngDevMode && assertIndexInDeclRange(tView, slotIndex);\n tView.data[slotIndex] = deferBlockConfig;\n}\nfunction getTemplateIndexForState(newState, hostLView, tNode) {\n const tView = hostLView[TVIEW];\n const tDetails = getTDeferBlockDetails(tView, tNode);\n switch (newState) {\n case DeferBlockState.Complete:\n return tDetails.primaryTmplIndex;\n case DeferBlockState.Loading:\n return tDetails.loadingTmplIndex;\n case DeferBlockState.Error:\n return tDetails.errorTmplIndex;\n case DeferBlockState.Placeholder:\n return tDetails.placeholderTmplIndex;\n default:\n ngDevMode && throwError(`Unexpected defer block state: ${newState}`);\n return null;\n }\n}\nfunction getMinimumDurationForState(tDetails, currentState) {\n if (currentState === DeferBlockState.Placeholder) {\n return tDetails.placeholderBlockConfig?.[MINIMUM_SLOT] ?? null;\n } else if (currentState === DeferBlockState.Loading) {\n return tDetails.loadingBlockConfig?.[MINIMUM_SLOT] ?? null;\n }\n return null;\n}\nfunction getLoadingBlockAfter(tDetails) {\n return tDetails.loadingBlockConfig?.[LOADING_AFTER_SLOT] ?? null;\n}\nfunction addDepsToRegistry(currentDeps, newDeps) {\n if (!currentDeps || currentDeps.length === 0) {\n return newDeps;\n }\n const currentDepSet = new Set(currentDeps);\n for (const dep of newDeps) {\n currentDepSet.add(dep);\n }\n return currentDeps.length === currentDepSet.size ? currentDeps : Array.from(currentDepSet);\n}\nfunction getPrimaryBlockTNode(tView, tDetails) {\n const adjustedIndex = tDetails.primaryTmplIndex + HEADER_OFFSET;\n return getTNode(tView, adjustedIndex);\n}\nfunction assertDeferredDependenciesLoaded(tDetails) {\n assertEqual(tDetails.loadingState, DeferDependenciesLoadingState.COMPLETE, 'Expecting all deferred dependencies to be loaded.');\n}\nfunction isTDeferBlockDetails(value) {\n return value !== null && typeof value === 'object' && typeof value.primaryTmplIndex === 'number';\n}\nfunction isDeferBlock(tView, tNode) {\n let tDetails = null;\n const slotIndex = getDeferBlockDataIndex(tNode.index);\n if (HEADER_OFFSET < slotIndex && slotIndex < tView.bindingStartIndex) {\n tDetails = getTDeferBlockDetails(tView, tNode);\n }\n return !!tDetails && isTDeferBlockDetails(tDetails);\n}\nfunction trackTriggerForDebugging(tView, tNode, textRepresentation) {\n const tDetails = getTDeferBlockDetails(tView, tNode);\n tDetails.debug ??= {};\n tDetails.debug.triggers ??= new Set();\n tDetails.debug.triggers.add(textRepresentation);\n}\nfunction onViewportWrapper(trigger, callback, injector, wrapperOptions) {\n const ngZone = injector.get(NgZone);\n return onViewport(trigger, () => ngZone.run(callback), options => ngZone.runOutsideAngular(() => createIntersectionObserver(options)), wrapperOptions);\n}\nfunction getTriggerLView(deferredHostLView, deferredTNode, walkUpTimes) {\n if (walkUpTimes == null) {\n return deferredHostLView;\n }\n if (walkUpTimes >= 0) {\n return walkUpViews(walkUpTimes, deferredHostLView);\n }\n const deferredContainer = deferredHostLView[deferredTNode.index];\n ngDevMode && assertLContainer(deferredContainer);\n const triggerLView = deferredContainer[CONTAINER_HEADER_OFFSET] ?? null;\n if (ngDevMode && triggerLView !== null) {\n const lDetails = getLDeferBlockDetails(deferredHostLView, deferredTNode);\n const renderedState = lDetails[DEFER_BLOCK_STATE];\n assertEqual(renderedState, DeferBlockState.Placeholder, 'Expected a placeholder to be rendered in this defer block.');\n assertLView(triggerLView);\n }\n return triggerLView;\n}\nfunction getTriggerElement(triggerLView, triggerIndex) {\n const element = getNativeByIndex(HEADER_OFFSET + triggerIndex, triggerLView);\n ngDevMode && assertElement(element);\n return element;\n}\nfunction registerDomTrigger(initialLView, tNode, triggerIndex, walkUpTimes, registerFn, callback, type, options) {\n const injector = initialLView[INJECTOR];\n const zone = injector.get(NgZone);\n let poll;\n function pollDomTrigger() {\n if (isDestroyed(initialLView)) {\n poll.destroy();\n return;\n }\n const lDetails = getLDeferBlockDetails(initialLView, tNode);\n const renderedState = lDetails[DEFER_BLOCK_STATE];\n if (renderedState !== DeferBlockInternalState.Initial && renderedState !== DeferBlockState.Placeholder) {\n poll.destroy();\n return;\n }\n const triggerLView = getTriggerLView(initialLView, tNode, walkUpTimes);\n if (!triggerLView) {\n return;\n }\n poll.destroy();\n if (isDestroyed(triggerLView)) {\n return;\n }\n const element = getTriggerElement(triggerLView, triggerIndex);\n const cleanup = registerFn(element, () => {\n zone.run(() => {\n if (initialLView !== triggerLView) {\n removeLViewOnDestroy(triggerLView, cleanup);\n }\n callback();\n });\n }, injector, options);\n if (initialLView !== triggerLView) {\n storeLViewOnDestroy(triggerLView, cleanup);\n }\n storeTriggerCleanupFn(type, lDetails, cleanup);\n }\n poll = afterEveryRender({\n read: pollDomTrigger\n }, {\n injector\n });\n}\nfunction onIdle(callback, injector) {\n const scheduler = injector.get(IdleScheduler);\n const cleanupFn = () => scheduler.remove(callback);\n scheduler.add(callback);\n return cleanupFn;\n}\nconst _requestIdleCallback = () => typeof requestIdleCallback !== 'undefined' ? requestIdleCallback : setTimeout;\nconst _cancelIdleCallback = () => typeof requestIdleCallback !== 'undefined' ? cancelIdleCallback : clearTimeout;\nlet IdleScheduler = /*#__PURE__*/(() => {\n class IdleScheduler {\n executingCallbacks = false;\n idleId = null;\n current = new Set();\n deferred = new Set();\n ngZone = inject(NgZone);\n requestIdleCallbackFn = _requestIdleCallback().bind(globalThis);\n cancelIdleCallbackFn = _cancelIdleCallback().bind(globalThis);\n add(callback) {\n const target = this.executingCallbacks ? this.deferred : this.current;\n target.add(callback);\n if (this.idleId === null) {\n this.scheduleIdleCallback();\n }\n }\n remove(callback) {\n const {\n current,\n deferred\n } = this;\n current.delete(callback);\n deferred.delete(callback);\n if (current.size === 0 && deferred.size === 0) {\n this.cancelIdleCallback();\n }\n }\n scheduleIdleCallback() {\n const callback = () => {\n this.cancelIdleCallback();\n this.executingCallbacks = true;\n for (const callback of this.current) {\n callback();\n }\n this.current.clear();\n this.executingCallbacks = false;\n if (this.deferred.size > 0) {\n for (const callback of this.deferred) {\n this.current.add(callback);\n }\n this.deferred.clear();\n this.scheduleIdleCallback();\n }\n };\n this.idleId = this.requestIdleCallbackFn(() => this.ngZone.run(callback));\n }\n cancelIdleCallback() {\n if (this.idleId !== null) {\n this.cancelIdleCallbackFn(this.idleId);\n this.idleId = null;\n }\n }\n ngOnDestroy() {\n this.cancelIdleCallback();\n this.current.clear();\n this.deferred.clear();\n }\n static ɵprov = /* @__PURE__ */\n __defineInjectable({\n token: IdleScheduler,\n providedIn: 'root',\n factory: () => new IdleScheduler()\n });\n }\n return IdleScheduler;\n})();\nfunction onTimer(delay) {\n return (callback, injector) => scheduleTimerTrigger(delay, callback, injector);\n}\nfunction scheduleTimerTrigger(delay, callback, injector) {\n const scheduler = injector.get(TimerScheduler);\n const ngZone = injector.get(NgZone);\n const cleanupFn = () => scheduler.remove(callback);\n scheduler.add(delay, callback, ngZone);\n return cleanupFn;\n}\nlet TimerScheduler = /*#__PURE__*/(() => {\n class TimerScheduler {\n executingCallbacks = false;\n timeoutId = null;\n invokeTimerAt = null;\n current = [];\n deferred = [];\n add(delay, callback, ngZone) {\n const target = this.executingCallbacks ? this.deferred : this.current;\n this.addToQueue(target, Date.now() + delay, callback);\n this.scheduleTimer(ngZone);\n }\n remove(callback) {\n const {\n current,\n deferred\n } = this;\n const callbackIndex = this.removeFromQueue(current, callback);\n if (callbackIndex === -1) {\n this.removeFromQueue(deferred, callback);\n }\n if (current.length === 0 && deferred.length === 0) {\n this.clearTimeout();\n }\n }\n addToQueue(target, invokeAt, callback) {\n let insertAtIndex = target.length;\n for (let i = 0; i < target.length; i += 2) {\n const invokeQueuedCallbackAt = target[i];\n if (invokeQueuedCallbackAt > invokeAt) {\n insertAtIndex = i;\n break;\n }\n }\n arrayInsert2(target, insertAtIndex, invokeAt, callback);\n }\n removeFromQueue(target, callback) {\n let index = -1;\n for (let i = 0; i < target.length; i += 2) {\n const queuedCallback = target[i + 1];\n if (queuedCallback === callback) {\n index = i;\n break;\n }\n }\n if (index > -1) {\n arraySplice(target, index, 2);\n }\n return index;\n }\n scheduleTimer(ngZone) {\n const callback = () => {\n this.clearTimeout();\n this.executingCallbacks = true;\n const current = [...this.current];\n const now = Date.now();\n for (let i = 0; i < current.length; i += 2) {\n const invokeAt = current[i];\n const callback = current[i + 1];\n if (invokeAt <= now) {\n callback();\n } else {\n break;\n }\n }\n let lastCallbackIndex = -1;\n for (let i = 0; i < this.current.length; i += 2) {\n const invokeAt = this.current[i];\n if (invokeAt <= now) {\n lastCallbackIndex = i + 1;\n } else {\n break;\n }\n }\n if (lastCallbackIndex >= 0) {\n arraySplice(this.current, 0, lastCallbackIndex + 1);\n }\n this.executingCallbacks = false;\n if (this.deferred.length > 0) {\n for (let i = 0; i < this.deferred.length; i += 2) {\n const invokeAt = this.deferred[i];\n const callback = this.deferred[i + 1];\n this.addToQueue(this.current, invokeAt, callback);\n }\n this.deferred.length = 0;\n }\n this.scheduleTimer(ngZone);\n };\n const FRAME_DURATION_MS = 16;\n if (this.current.length > 0) {\n const now = Date.now();\n const invokeAt = this.current[0];\n if (this.timeoutId === null || this.invokeTimerAt && this.invokeTimerAt - invokeAt > FRAME_DURATION_MS) {\n this.clearTimeout();\n const timeout = Math.max(invokeAt - now, FRAME_DURATION_MS);\n this.invokeTimerAt = invokeAt;\n this.timeoutId = ngZone.runOutsideAngular(() => {\n return setTimeout(() => ngZone.run(callback), timeout);\n });\n }\n }\n }\n clearTimeout() {\n if (this.timeoutId !== null) {\n clearTimeout(this.timeoutId);\n this.timeoutId = null;\n }\n }\n ngOnDestroy() {\n this.clearTimeout();\n this.current.length = 0;\n this.deferred.length = 0;\n }\n static ɵprov = /* @__PURE__ */\n __defineInjectable({\n token: TimerScheduler,\n providedIn: 'root',\n factory: () => new TimerScheduler()\n });\n }\n return TimerScheduler;\n})();\nlet CachedInjectorService = /*#__PURE__*/(() => {\n class CachedInjectorService {\n cachedInjectors = new Map();\n getOrCreateInjector(key, parentInjector, providers, debugName) {\n if (!this.cachedInjectors.has(key)) {\n const injector = providers.length > 0 ? createEnvironmentInjector(providers, parentInjector, debugName) : null;\n this.cachedInjectors.set(key, injector);\n }\n return this.cachedInjectors.get(key);\n }\n ngOnDestroy() {\n try {\n for (const injector of this.cachedInjectors.values()) {\n if (injector !== null) {\n injector.destroy();\n }\n }\n } finally {\n this.cachedInjectors.clear();\n }\n }\n static ɵprov = /* @__PURE__ */\n __defineInjectable({\n token: CachedInjectorService,\n providedIn: 'environment',\n factory: () => new CachedInjectorService()\n });\n }\n return CachedInjectorService;\n})();\nconst DEFER_BLOCK_DEPENDENCY_INTERCEPTOR = /* @__PURE__ */new InjectionToken('DEFER_BLOCK_DEPENDENCY_INTERCEPTOR');\nconst DEFER_BLOCK_CONFIG = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'DEFER_BLOCK_CONFIG' : '');\nfunction getOrCreateEnvironmentInjector(parentInjector, tDetails, providers) {\n return parentInjector.get(CachedInjectorService).getOrCreateInjector(tDetails, parentInjector, providers, ngDevMode ? 'DeferBlock Injector' : '');\n}\nfunction createDeferBlockInjector(parentInjector, tDetails, providers) {\n if (parentInjector instanceof ChainedInjector) {\n const origInjector = parentInjector.injector;\n const parentEnvInjector = parentInjector.parentInjector;\n const envInjector = getOrCreateEnvironmentInjector(parentEnvInjector, tDetails, providers);\n return new ChainedInjector(origInjector, envInjector);\n }\n const parentEnvInjector = parentInjector.get(EnvironmentInjector);\n if (parentEnvInjector !== parentInjector) {\n const envInjector = getOrCreateEnvironmentInjector(parentEnvInjector, tDetails, providers);\n return new ChainedInjector(parentInjector, envInjector);\n }\n return getOrCreateEnvironmentInjector(parentInjector, tDetails, providers);\n}\nfunction renderDeferBlockState(newState, tNode, lContainer, skipTimerScheduling = false) {\n const hostLView = lContainer[PARENT];\n const hostTView = hostLView[TVIEW];\n if (isDestroyed(hostLView)) return;\n ngDevMode && assertTNodeForLView(tNode, hostLView);\n const lDetails = getLDeferBlockDetails(hostLView, tNode);\n ngDevMode && assertDefined(lDetails, 'Expected a defer block state defined');\n const currentState = lDetails[DEFER_BLOCK_STATE];\n const ssrState = lDetails[SSR_BLOCK_STATE];\n if (ssrState !== null && newState < ssrState) {\n return;\n }\n if (isValidStateChange(currentState, newState) && isValidStateChange(lDetails[NEXT_DEFER_BLOCK_STATE] ?? -1, newState)) {\n const tDetails = getTDeferBlockDetails(hostTView, tNode);\n const needsScheduling = !skipTimerScheduling && (typeof ngServerMode === 'undefined' || !ngServerMode) && (getLoadingBlockAfter(tDetails) !== null || getMinimumDurationForState(tDetails, DeferBlockState.Loading) !== null || getMinimumDurationForState(tDetails, DeferBlockState.Placeholder));\n if (ngDevMode && needsScheduling) {\n assertDefined(applyDeferBlockStateWithSchedulingImpl, 'Expected scheduling function to be defined');\n }\n const applyStateFn = needsScheduling ? applyDeferBlockStateWithSchedulingImpl : applyDeferBlockState;\n try {\n applyStateFn(newState, lDetails, lContainer, tNode, hostLView);\n } catch (error) {\n handleUncaughtError(hostLView, error);\n }\n }\n}\nfunction findMatchingDehydratedViewForDeferBlock(lContainer, lDetails) {\n const dehydratedViewIx = lContainer[DEHYDRATED_VIEWS]?.findIndex(view => view.data[DEFER_BLOCK_STATE$1] === lDetails[DEFER_BLOCK_STATE]) ?? -1;\n const dehydratedView = dehydratedViewIx > -1 ? lContainer[DEHYDRATED_VIEWS][dehydratedViewIx] : null;\n return {\n dehydratedView,\n dehydratedViewIx\n };\n}\nfunction applyDeferBlockState(newState, lDetails, lContainer, tNode, hostLView) {\n profiler(ProfilerEvent.DeferBlockStateStart);\n const stateTmplIndex = getTemplateIndexForState(newState, hostLView, tNode);\n if (stateTmplIndex !== null) {\n lDetails[DEFER_BLOCK_STATE] = newState;\n const hostTView = hostLView[TVIEW];\n const adjustedIndex = stateTmplIndex + HEADER_OFFSET;\n const activeBlockTNode = getTNode(hostTView, adjustedIndex);\n const viewIndex = 0;\n removeLViewFromLContainer(lContainer, viewIndex);\n let injector;\n if (newState === DeferBlockState.Complete) {\n const tDetails = getTDeferBlockDetails(hostTView, tNode);\n const providers = tDetails.providers;\n if (providers && providers.length > 0) {\n injector = createDeferBlockInjector(hostLView[INJECTOR], tDetails, providers);\n }\n }\n const {\n dehydratedView,\n dehydratedViewIx\n } = findMatchingDehydratedViewForDeferBlock(lContainer, lDetails);\n const embeddedLView = createAndRenderEmbeddedLView(hostLView, activeBlockTNode, null, {\n injector,\n dehydratedView\n });\n addLViewToLContainer(lContainer, embeddedLView, viewIndex, shouldAddViewToDom(activeBlockTNode, dehydratedView));\n markViewDirty(embeddedLView, 2);\n if (dehydratedViewIx > -1) {\n lContainer[DEHYDRATED_VIEWS]?.splice(dehydratedViewIx, 1);\n }\n if ((newState === DeferBlockState.Complete || newState === DeferBlockState.Error) && Array.isArray(lDetails[ON_COMPLETE_FNS])) {\n for (const callback of lDetails[ON_COMPLETE_FNS]) {\n callback();\n }\n lDetails[ON_COMPLETE_FNS] = null;\n }\n }\n profiler(ProfilerEvent.DeferBlockStateEnd);\n}\nfunction applyDeferBlockStateWithScheduling(newState, lDetails, lContainer, tNode, hostLView) {\n const now = Date.now();\n const hostTView = hostLView[TVIEW];\n const tDetails = getTDeferBlockDetails(hostTView, tNode);\n if (lDetails[STATE_IS_FROZEN_UNTIL] === null || lDetails[STATE_IS_FROZEN_UNTIL] <= now) {\n lDetails[STATE_IS_FROZEN_UNTIL] = null;\n const loadingAfter = getLoadingBlockAfter(tDetails);\n const inLoadingAfterPhase = lDetails[LOADING_AFTER_CLEANUP_FN] !== null;\n if (newState === DeferBlockState.Loading && loadingAfter !== null && !inLoadingAfterPhase) {\n lDetails[NEXT_DEFER_BLOCK_STATE] = newState;\n const cleanupFn = scheduleDeferBlockUpdate(loadingAfter, lDetails, tNode, lContainer, hostLView);\n lDetails[LOADING_AFTER_CLEANUP_FN] = cleanupFn;\n } else {\n if (newState > DeferBlockState.Loading && inLoadingAfterPhase) {\n lDetails[LOADING_AFTER_CLEANUP_FN]();\n lDetails[LOADING_AFTER_CLEANUP_FN] = null;\n lDetails[NEXT_DEFER_BLOCK_STATE] = null;\n }\n applyDeferBlockState(newState, lDetails, lContainer, tNode, hostLView);\n const duration = getMinimumDurationForState(tDetails, newState);\n if (duration !== null) {\n lDetails[STATE_IS_FROZEN_UNTIL] = now + duration;\n scheduleDeferBlockUpdate(duration, lDetails, tNode, lContainer, hostLView);\n }\n }\n } else {\n lDetails[NEXT_DEFER_BLOCK_STATE] = newState;\n }\n}\nfunction scheduleDeferBlockUpdate(timeout, lDetails, tNode, lContainer, hostLView) {\n const callback = () => {\n const nextState = lDetails[NEXT_DEFER_BLOCK_STATE];\n lDetails[STATE_IS_FROZEN_UNTIL] = null;\n lDetails[NEXT_DEFER_BLOCK_STATE] = null;\n if (nextState !== null) {\n renderDeferBlockState(nextState, tNode, lContainer);\n }\n };\n return scheduleTimerTrigger(timeout, callback, hostLView[INJECTOR]);\n}\nfunction isValidStateChange(currentState, newState) {\n return currentState < newState;\n}\nfunction renderPlaceholder(lView, tNode) {\n const lContainer = lView[tNode.index];\n ngDevMode && assertLContainer(lContainer);\n renderDeferBlockState(DeferBlockState.Placeholder, tNode, lContainer);\n}\nfunction renderDeferStateAfterResourceLoading(tDetails, tNode, lContainer) {\n ngDevMode && assertDefined(tDetails.loadingPromise, 'Expected loading Promise to exist on this defer block');\n tDetails.loadingPromise.then(() => {\n if (tDetails.loadingState === DeferDependenciesLoadingState.COMPLETE) {\n ngDevMode && assertDeferredDependenciesLoaded(tDetails);\n renderDeferBlockState(DeferBlockState.Complete, tNode, lContainer);\n } else if (tDetails.loadingState === DeferDependenciesLoadingState.FAILED) {\n renderDeferBlockState(DeferBlockState.Error, tNode, lContainer);\n }\n });\n}\nlet applyDeferBlockStateWithSchedulingImpl = null;\nfunction ɵɵdeferEnableTimerScheduling(tView, tDetails, placeholderConfigIndex, loadingConfigIndex) {\n const tViewConsts = tView.consts;\n if (placeholderConfigIndex != null) {\n tDetails.placeholderBlockConfig = getConstant(tViewConsts, placeholderConfigIndex);\n }\n if (loadingConfigIndex != null) {\n tDetails.loadingBlockConfig = getConstant(tViewConsts, loadingConfigIndex);\n }\n if (applyDeferBlockStateWithSchedulingImpl === null) {\n applyDeferBlockStateWithSchedulingImpl = applyDeferBlockStateWithScheduling;\n }\n}\nconst ASYNC_COMPONENT_METADATA_FN = '__ngAsyncComponentMetadataFn__';\nfunction getAsyncClassMetadataFn(type) {\n const componentClass = type;\n return componentClass[ASYNC_COMPONENT_METADATA_FN] ?? null;\n}\nfunction setClassMetadataAsync(type, dependencyLoaderFn, metadataSetterFn) {\n const componentClass = type;\n componentClass[ASYNC_COMPONENT_METADATA_FN] = () => Promise.all(dependencyLoaderFn()).then(dependencies => {\n metadataSetterFn(...dependencies);\n componentClass[ASYNC_COMPONENT_METADATA_FN] = null;\n return dependencies;\n });\n return componentClass[ASYNC_COMPONENT_METADATA_FN];\n}\nfunction setClassMetadata(type, decorators, ctorParameters, propDecorators) {\n return noSideEffects(() => {\n const clazz = type;\n if (decorators !== null) {\n if (clazz.hasOwnProperty('decorators') && clazz.decorators !== undefined) {\n clazz.decorators.push(...decorators);\n } else {\n clazz.decorators = decorators;\n }\n }\n if (ctorParameters !== null) {\n clazz.ctorParameters = ctorParameters;\n }\n if (propDecorators !== null) {\n if (clazz.hasOwnProperty('propDecorators') && clazz.propDecorators !== undefined) {\n clazz.propDecorators = {\n ...clazz.propDecorators,\n ...propDecorators\n };\n } else {\n clazz.propDecorators = propDecorators;\n }\n }\n });\n}\nlet Console = /*#__PURE__*/(() => {\n class Console {\n log(message) {\n console.log(message);\n }\n warn(message) {\n console.warn(message);\n }\n static ɵfac = function Console_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || Console)();\n };\n static ɵprov = /*@__PURE__*/__defineInjectable({\n token: Console,\n factory: Console.ɵfac,\n providedIn: 'platform'\n });\n }\n return Console;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && setClassMetadata(Console, [{\n type: Injectable,\n args: [{\n providedIn: 'platform'\n }]\n }], null, null);\n})();\nclass DIDebugData {\n resolverToTokenToDependencies = /*#__PURE__*/new WeakMap();\n resolverToProviders = /*#__PURE__*/new WeakMap();\n resolverToEffects = /*#__PURE__*/new WeakMap();\n standaloneInjectorToComponent = /*#__PURE__*/new WeakMap();\n reset() {\n this.resolverToTokenToDependencies = new WeakMap();\n this.resolverToProviders = new WeakMap();\n this.standaloneInjectorToComponent = new WeakMap();\n }\n}\nlet frameworkDIDebugData = /*#__PURE__*/new DIDebugData();\nfunction getFrameworkDIDebugData() {\n return frameworkDIDebugData;\n}\nfunction setupFrameworkInjectorProfiler() {\n frameworkDIDebugData.reset();\n setInjectorProfiler(injectorProfilerEventHandler);\n}\nfunction injectorProfilerEventHandler(injectorProfilerEvent) {\n const {\n context,\n type\n } = injectorProfilerEvent;\n if (type === 0) {\n handleInjectEvent(context, injectorProfilerEvent.service);\n } else if (type === 1) {\n handleInstanceCreatedByInjectorEvent(context, injectorProfilerEvent.instance);\n } else if (type === 2) {\n handleProviderConfiguredEvent(context, injectorProfilerEvent.providerRecord);\n } else if (type === 3) {\n handleEffectCreatedEvent(context, injectorProfilerEvent.effect);\n } else if (type === 4) {\n handleEffectCreatedEvent(context, injectorProfilerEvent.effectPhase);\n }\n}\nfunction handleEffectCreatedEvent(context, effect) {\n const diResolver = getDIResolver(context.injector);\n if (diResolver === null) {\n throwError('An EffectCreated event must be run within an injection context.');\n }\n const {\n resolverToEffects\n } = frameworkDIDebugData;\n const cleanupContainer = effect instanceof EffectRefImpl ? effect[SIGNAL] : effect.sequence;\n let trackedEffects = resolverToEffects.get(diResolver);\n if (!trackedEffects) {\n trackedEffects = [];\n resolverToEffects.set(diResolver, trackedEffects);\n }\n trackedEffects.push(effect);\n cleanupContainer.onDestroyFns ??= [];\n cleanupContainer.onDestroyFns.push(() => {\n const index = trackedEffects.indexOf(effect);\n if (index > -1) {\n trackedEffects.splice(index, 1);\n }\n });\n}\nfunction handleInjectEvent(context, data) {\n const diResolver = getDIResolver(context.injector);\n if (diResolver === null) {\n throwError('An Inject event must be run within an injection context.');\n }\n const diResolverToInstantiatedToken = frameworkDIDebugData.resolverToTokenToDependencies;\n if (!diResolverToInstantiatedToken.has(diResolver)) {\n diResolverToInstantiatedToken.set(diResolver, new WeakMap());\n }\n if (!canBeHeldWeakly(context.token)) {\n return;\n }\n const instantiatedTokenToDependencies = diResolverToInstantiatedToken.get(diResolver);\n if (!instantiatedTokenToDependencies.has(context.token)) {\n instantiatedTokenToDependencies.set(context.token, []);\n }\n const {\n token,\n value,\n flags\n } = data;\n assertDefined(context.token, 'Injector profiler context token is undefined.');\n const dependencies = instantiatedTokenToDependencies.get(context.token);\n assertDefined(dependencies, 'Could not resolve dependencies for token.');\n if (context.injector instanceof NodeInjector) {\n dependencies.push({\n token,\n value,\n flags,\n injectedIn: getNodeInjectorContext(context.injector)\n });\n } else {\n dependencies.push({\n token,\n value,\n flags\n });\n }\n}\nfunction getNodeInjectorContext(injector) {\n if (!(injector instanceof NodeInjector)) {\n throwError('getNodeInjectorContext must be called with a NodeInjector');\n }\n const lView = getNodeInjectorLView(injector);\n const tNode = getNodeInjectorTNode(injector);\n if (tNode === null) {\n return;\n }\n assertTNodeForLView(tNode, lView);\n return {\n lView,\n tNode\n };\n}\nfunction handleInstanceCreatedByInjectorEvent(context, data) {\n const {\n value\n } = data;\n if (data.value == null) {\n return;\n }\n if (getDIResolver(context.injector) === null) {\n throwError('An InjectorCreatedInstance event must be run within an injection context.');\n }\n let standaloneComponent = undefined;\n if (typeof value === 'object') {\n standaloneComponent = value?.constructor;\n }\n if (standaloneComponent == undefined || !isStandaloneComponent(standaloneComponent)) {\n return;\n }\n const environmentInjector = context.injector.get(EnvironmentInjector, null, {\n optional: true\n });\n if (environmentInjector === null) {\n return;\n }\n const {\n standaloneInjectorToComponent\n } = frameworkDIDebugData;\n if (standaloneInjectorToComponent.has(environmentInjector)) {\n return;\n }\n standaloneInjectorToComponent.set(environmentInjector, standaloneComponent);\n}\nfunction isStandaloneComponent(value) {\n const def = getComponentDef(value);\n return !!def?.standalone;\n}\nfunction handleProviderConfiguredEvent(context, data) {\n const {\n resolverToProviders\n } = frameworkDIDebugData;\n let diResolver;\n if (context?.injector instanceof NodeInjector) {\n diResolver = getNodeInjectorTNode(context.injector);\n } else {\n diResolver = context.injector;\n }\n if (diResolver === null) {\n throwError('A ProviderConfigured event must be run within an injection context.');\n }\n if (!resolverToProviders.has(diResolver)) {\n resolverToProviders.set(diResolver, []);\n }\n resolverToProviders.get(diResolver).push(data);\n}\nfunction getDIResolver(injector) {\n let diResolver = null;\n if (injector === undefined) {\n return diResolver;\n }\n if (injector instanceof NodeInjector) {\n diResolver = getNodeInjectorLView(injector);\n } else {\n diResolver = injector;\n }\n return diResolver;\n}\nfunction canBeHeldWeakly(value) {\n return value !== null && (typeof value === 'object' || typeof value === 'function' || typeof value === 'symbol');\n}\nfunction isSignal(value) {\n return typeof value === 'function' && value[SIGNAL] !== undefined;\n}\nfunction isWritableSignal(value) {\n return isSignal(value) && typeof value.set === 'function';\n}\nfunction applyChanges(component) {\n ngDevMode && assertDefined(component, 'component');\n markViewDirty(getComponentViewByInstance(component), 3);\n getRootComponents(component).forEach(rootComponent => detectChanges(rootComponent));\n}\nfunction detectChanges(component) {\n const view = getComponentViewByInstance(component);\n view[FLAGS] |= 1024;\n detectChangesInternal(view);\n}\nfunction getDeferBlocks$1(lView, deferBlocks) {\n const tView = lView[TVIEW];\n for (let i = HEADER_OFFSET; i < tView.bindingStartIndex; i++) {\n if (isLContainer(lView[i])) {\n const lContainer = lView[i];\n const isLast = i === tView.bindingStartIndex - 1;\n if (!isLast) {\n const tNode = tView.data[i];\n const tDetails = getTDeferBlockDetails(tView, tNode);\n if (isTDeferBlockDetails(tDetails)) {\n deferBlocks.push({\n lContainer,\n lView,\n tNode,\n tDetails\n });\n continue;\n }\n }\n if (isLView(lContainer[HOST])) {\n getDeferBlocks$1(lContainer[HOST], deferBlocks);\n }\n for (let j = CONTAINER_HEADER_OFFSET; j < lContainer.length; j++) {\n getDeferBlocks$1(lContainer[j], deferBlocks);\n }\n } else if (isLView(lView[i])) {\n getDeferBlocks$1(lView[i], deferBlocks);\n }\n }\n}\nfunction getDeferBlocks(node) {\n const results = [];\n const lView = getLContext(node)?.lView;\n if (lView) {\n findDeferBlocks(node, lView, results);\n }\n return results;\n}\nfunction findDeferBlocks(node, lView, results) {\n const viewInjector = lView[INJECTOR];\n const registry = viewInjector.get(DEHYDRATED_BLOCK_REGISTRY, null, {\n optional: true\n });\n const blocks = [];\n getDeferBlocks$1(lView, blocks);\n const transferState = viewInjector.get(TransferState);\n const deferBlockParents = transferState.get(NGH_DEFER_BLOCKS_KEY, {});\n for (const details of blocks) {\n const native = getNativeByTNode(details.tNode, details.lView);\n const lDetails = getLDeferBlockDetails(details.lView, details.tNode);\n if (!node.contains(native)) {\n continue;\n }\n const tDetails = details.tDetails;\n const renderedLView = getRendererLView(details);\n const rootNodes = [];\n const hydrationState = inferHydrationState(tDetails, lDetails, registry);\n if (renderedLView !== null) {\n collectNativeNodes(renderedLView[TVIEW], renderedLView, renderedLView[TVIEW].firstChild, rootNodes);\n } else if (hydrationState === 'dehydrated') {\n const deferId = lDetails[SSR_UNIQUE_ID];\n const deferData = deferBlockParents[deferId];\n const numberOfRootNodes = deferData[NUM_ROOT_NODES];\n let collectedNodeCount = 0;\n const deferBlockCommentNode = details.lContainer[NATIVE];\n let currentNode = deferBlockCommentNode.previousSibling;\n while (collectedNodeCount < numberOfRootNodes && currentNode) {\n rootNodes.unshift(currentNode);\n currentNode = currentNode.previousSibling;\n collectedNodeCount++;\n }\n }\n const data = {\n state: stringifyState(lDetails[DEFER_BLOCK_STATE]),\n incrementalHydrationState: hydrationState,\n hasErrorBlock: tDetails.errorTmplIndex !== null,\n loadingBlock: {\n exists: tDetails.loadingTmplIndex !== null,\n minimumTime: tDetails.loadingBlockConfig?.[MINIMUM_SLOT] ?? null,\n afterTime: tDetails.loadingBlockConfig?.[LOADING_AFTER_SLOT] ?? null\n },\n placeholderBlock: {\n exists: tDetails.placeholderTmplIndex !== null,\n minimumTime: tDetails.placeholderBlockConfig?.[MINIMUM_SLOT] ?? null\n },\n triggers: tDetails.debug?.triggers ? Array.from(tDetails.debug.triggers).sort() : [],\n hostNode: details.lContainer[HOST],\n rootNodes\n };\n results.push(data);\n if (renderedLView !== null) {\n findDeferBlocks(node, renderedLView, results);\n }\n }\n}\nfunction stringifyState(state) {\n switch (state) {\n case DeferBlockState.Complete:\n return 'complete';\n case DeferBlockState.Loading:\n return 'loading';\n case DeferBlockState.Placeholder:\n return 'placeholder';\n case DeferBlockState.Error:\n return 'error';\n case DeferBlockInternalState.Initial:\n return 'initial';\n default:\n throw new Error(`Unrecognized state ${state}`);\n }\n}\nfunction inferHydrationState(tDetails, lDetails, registry) {\n if (registry === null || lDetails[SSR_UNIQUE_ID] === null || tDetails.hydrateTriggers === null || tDetails.hydrateTriggers.has(7)) {\n return 'not-configured';\n }\n return registry.has(lDetails[SSR_UNIQUE_ID]) ? 'dehydrated' : 'hydrated';\n}\nfunction getRendererLView(details) {\n if (details.lContainer.length <= CONTAINER_HEADER_OFFSET) {\n return null;\n }\n const lView = details.lContainer[CONTAINER_HEADER_OFFSET];\n ngDevMode && assertLView(lView);\n return lView;\n}\nfunction getDependenciesFromInjectable(injector, token) {\n const instance = injector.get(token, null, {\n self: true,\n optional: true\n });\n if (instance === null) {\n throw new Error(`Unable to determine instance of ${token} in given injector`);\n }\n const unformattedDependencies = getDependenciesForTokenInInjector(token, injector);\n const resolutionPath = getInjectorResolutionPath(injector);\n const dependencies = unformattedDependencies.map(dep => {\n const formattedDependency = {\n value: dep.value\n };\n const flags = dep.flags;\n formattedDependency.flags = {\n optional: (8 & flags) === 8,\n host: (1 & flags) === 1,\n self: (2 & flags) === 2,\n skipSelf: (4 & flags) === 4\n };\n for (let i = 0; i < resolutionPath.length; i++) {\n const injectorToCheck = resolutionPath[i];\n if (i === 0 && formattedDependency.flags.skipSelf) {\n continue;\n }\n if (formattedDependency.flags.host && injectorToCheck instanceof EnvironmentInjector) {\n break;\n }\n const instance = injectorToCheck.get(dep.token, null, {\n self: true,\n optional: true\n });\n if (instance !== null) {\n if (formattedDependency.flags.host) {\n const firstInjector = resolutionPath[0];\n const lookupFromFirstInjector = firstInjector.get(dep.token, null, {\n ...formattedDependency.flags,\n optional: true\n });\n if (lookupFromFirstInjector !== null) {\n formattedDependency.providedIn = injectorToCheck;\n }\n break;\n }\n formattedDependency.providedIn = injectorToCheck;\n break;\n }\n if (i === 0 && formattedDependency.flags.self) {\n break;\n }\n }\n if (dep.token) formattedDependency.token = dep.token;\n return formattedDependency;\n });\n return {\n instance,\n dependencies\n };\n}\nfunction getDependenciesForTokenInInjector(token, injector) {\n const {\n resolverToTokenToDependencies\n } = getFrameworkDIDebugData();\n if (!(injector instanceof NodeInjector)) {\n return resolverToTokenToDependencies.get(injector)?.get?.(token) ?? [];\n }\n const lView = getNodeInjectorLView(injector);\n const tokenDependencyMap = resolverToTokenToDependencies.get(lView);\n const dependencies = tokenDependencyMap?.get(token) ?? [];\n return dependencies.filter(dependency => {\n const dependencyNode = dependency.injectedIn?.tNode;\n if (dependencyNode === undefined) {\n return false;\n }\n const instanceNode = getNodeInjectorTNode(injector);\n assertTNode(dependencyNode);\n assertTNode(instanceNode);\n return dependencyNode === instanceNode;\n });\n}\nfunction getProviderImportsContainer(injector) {\n const {\n standaloneInjectorToComponent\n } = getFrameworkDIDebugData();\n if (standaloneInjectorToComponent.has(injector)) {\n return standaloneInjectorToComponent.get(injector);\n }\n const defTypeRef = injector.get(NgModuleRef$1, null, {\n self: true,\n optional: true\n });\n if (defTypeRef === null) {\n return null;\n }\n if (defTypeRef.instance === null) {\n return null;\n }\n return defTypeRef.instance.constructor;\n}\nfunction getNodeInjectorProviders(injector) {\n const diResolver = getNodeInjectorTNode(injector);\n const {\n resolverToProviders\n } = getFrameworkDIDebugData();\n return resolverToProviders.get(diResolver) ?? [];\n}\nfunction getProviderImportPaths(providerImportsContainer) {\n const providerToPath = new Map();\n const visitedContainers = new Set();\n const visitor = walkProviderTreeToDiscoverImportPaths(providerToPath, visitedContainers);\n walkProviderTree(providerImportsContainer, visitor, [], new Set());\n return providerToPath;\n}\nfunction walkProviderTreeToDiscoverImportPaths(providerToPath, visitedContainers) {\n return (provider, container) => {\n if (!providerToPath.has(provider)) {\n providerToPath.set(provider, [container]);\n }\n if (!visitedContainers.has(container)) {\n for (const prov of providerToPath.keys()) {\n const existingImportPath = providerToPath.get(prov);\n let containerDef = getInjectorDef(container);\n if (!containerDef) {\n const ngModule = container.ngModule;\n containerDef = getInjectorDef(ngModule);\n }\n if (!containerDef) {\n return;\n }\n const lastContainerAddedToPath = existingImportPath[0];\n let isNextStepInPath = false;\n deepForEach(containerDef.imports, moduleImport => {\n if (isNextStepInPath) {\n return;\n }\n isNextStepInPath = moduleImport.ngModule === lastContainerAddedToPath || moduleImport === lastContainerAddedToPath;\n if (isNextStepInPath) {\n providerToPath.get(prov)?.unshift(container);\n }\n });\n }\n }\n visitedContainers.add(container);\n };\n}\nfunction getEnvironmentInjectorProviders(injector) {\n const providerRecordsWithoutImportPaths = getFrameworkDIDebugData().resolverToProviders.get(injector) ?? [];\n if (isPlatformInjector(injector)) {\n return providerRecordsWithoutImportPaths;\n }\n const providerImportsContainer = getProviderImportsContainer(injector);\n if (providerImportsContainer === null) {\n return providerRecordsWithoutImportPaths;\n }\n const providerToPath = getProviderImportPaths(providerImportsContainer);\n const providerRecords = [];\n for (const providerRecord of providerRecordsWithoutImportPaths) {\n const provider = providerRecord.provider;\n const token = provider.provide;\n if (token === ENVIRONMENT_INITIALIZER || token === INJECTOR_DEF_TYPES) {\n continue;\n }\n let importPath = providerToPath.get(provider) ?? [];\n const def = getComponentDef(providerImportsContainer);\n const isStandaloneComponent = !!def?.standalone;\n if (isStandaloneComponent) {\n importPath = [providerImportsContainer, ...importPath];\n }\n providerRecords.push({\n ...providerRecord,\n importPath\n });\n }\n return providerRecords;\n}\nfunction isPlatformInjector(injector) {\n return injector instanceof R3Injector && injector.scopes.has('platform');\n}\nfunction getInjectorProviders(injector) {\n if (injector instanceof NodeInjector) {\n return getNodeInjectorProviders(injector);\n } else if (injector instanceof EnvironmentInjector) {\n return getEnvironmentInjectorProviders(injector);\n }\n throwError('getInjectorProviders only supports NodeInjector and EnvironmentInjector');\n}\nfunction getInjectorMetadata(injector) {\n if (injector instanceof NodeInjector) {\n const lView = getNodeInjectorLView(injector);\n const tNode = getNodeInjectorTNode(injector);\n assertTNodeForLView(tNode, lView);\n return {\n type: 'element',\n source: getNativeByTNode(tNode, lView)\n };\n }\n if (injector instanceof R3Injector) {\n return {\n type: 'environment',\n source: injector.source ?? null\n };\n }\n if (injector instanceof NullInjector) {\n return {\n type: 'null',\n source: null\n };\n }\n return null;\n}\nfunction getInjectorResolutionPath(injector) {\n const resolutionPath = [injector];\n getInjectorResolutionPathHelper(injector, resolutionPath);\n return resolutionPath;\n}\nfunction getInjectorResolutionPathHelper(injector, resolutionPath) {\n const parent = getInjectorParent(injector);\n if (parent === null) {\n if (injector instanceof NodeInjector) {\n const firstInjector = resolutionPath[0];\n if (firstInjector instanceof NodeInjector) {\n const moduleInjector = getModuleInjectorOfNodeInjector(firstInjector);\n if (moduleInjector === null) {\n throwError('NodeInjector must have some connection to the module injector tree');\n }\n resolutionPath.push(moduleInjector);\n getInjectorResolutionPathHelper(moduleInjector, resolutionPath);\n }\n return resolutionPath;\n }\n } else {\n resolutionPath.push(parent);\n getInjectorResolutionPathHelper(parent, resolutionPath);\n }\n return resolutionPath;\n}\nfunction getInjectorParent(injector) {\n if (injector instanceof R3Injector) {\n return injector.parent;\n }\n let tNode;\n let lView;\n if (injector instanceof NodeInjector) {\n tNode = getNodeInjectorTNode(injector);\n lView = getNodeInjectorLView(injector);\n } else if (injector instanceof NullInjector) {\n return null;\n } else if (injector instanceof ChainedInjector) {\n return injector.parentInjector;\n } else {\n throwError('getInjectorParent only support injectors of type R3Injector, NodeInjector, NullInjector');\n }\n const parentLocation = getParentInjectorLocation(tNode, lView);\n if (hasParentInjector(parentLocation)) {\n const parentInjectorIndex = getParentInjectorIndex(parentLocation);\n const parentLView = getParentInjectorView(parentLocation, lView);\n const parentTView = parentLView[TVIEW];\n const parentTNode = parentTView.data[parentInjectorIndex + 8];\n return new NodeInjector(parentTNode, parentLView);\n } else {\n const chainedInjector = lView[INJECTOR];\n const injectorParent = chainedInjector.injector?.parent;\n if (injectorParent instanceof NodeInjector) {\n return injectorParent;\n }\n }\n return null;\n}\nfunction getModuleInjectorOfNodeInjector(injector) {\n let lView;\n if (injector instanceof NodeInjector) {\n lView = getNodeInjectorLView(injector);\n } else {\n throwError('getModuleInjectorOfNodeInjector must be called with a NodeInjector');\n }\n const inj = lView[INJECTOR];\n const moduleInjector = inj instanceof ChainedInjector ? inj.parentInjector : inj.parent;\n if (!moduleInjector) {\n throwError('NodeInjector must have some connection to the module injector tree');\n }\n return moduleInjector;\n}\nfunction isComputedNode(node) {\n return node.kind === 'computed';\n}\nfunction isTemplateEffectNode(node) {\n return node.kind === 'template';\n}\nfunction isSignalNode(node) {\n return node.kind === 'signal';\n}\nfunction getTemplateConsumer(injector) {\n const tNode = getNodeInjectorTNode(injector);\n assertTNode(tNode);\n const lView = getNodeInjectorLView(injector);\n assertLView(lView);\n const templateLView = lView[tNode.index];\n if (isLView(templateLView)) {\n return templateLView[REACTIVE_TEMPLATE_CONSUMER] ?? null;\n }\n return null;\n}\nconst signalDebugMap = /*#__PURE__*/new WeakMap();\nlet counter$1 = 0;\nfunction getNodesAndEdgesFromSignalMap(signalMap) {\n const nodes = Array.from(signalMap.keys());\n const debugSignalGraphNodes = [];\n const edges = [];\n for (const [consumer, producers] of signalMap.entries()) {\n const consumerIndex = nodes.indexOf(consumer);\n let id = signalDebugMap.get(consumer);\n if (!id) {\n counter$1++;\n id = counter$1.toString();\n signalDebugMap.set(consumer, id);\n }\n if (isComputedNode(consumer)) {\n debugSignalGraphNodes.push({\n label: consumer.debugName,\n value: consumer.value,\n kind: consumer.kind,\n epoch: consumer.version,\n debuggableFn: consumer.computation,\n id\n });\n } else if (isSignalNode(consumer)) {\n debugSignalGraphNodes.push({\n label: consumer.debugName,\n value: consumer.value,\n kind: consumer.kind,\n epoch: consumer.version,\n id\n });\n } else if (isTemplateEffectNode(consumer)) {\n debugSignalGraphNodes.push({\n label: consumer.debugName ?? consumer.lView?.[HOST]?.tagName?.toLowerCase?.(),\n kind: consumer.kind,\n epoch: consumer.version,\n debuggableFn: consumer.lView?.[CONTEXT]?.constructor,\n id\n });\n } else {\n debugSignalGraphNodes.push({\n label: consumer.debugName,\n kind: consumer.kind,\n epoch: consumer.version,\n id\n });\n }\n for (const producer of producers) {\n edges.push({\n consumer: consumerIndex,\n producer: nodes.indexOf(producer)\n });\n }\n }\n return {\n nodes: debugSignalGraphNodes,\n edges\n };\n}\nfunction extractEffectsFromInjector(injector) {\n let diResolver = injector;\n if (injector instanceof NodeInjector) {\n const lView = getNodeInjectorLView(injector);\n diResolver = lView;\n }\n const resolverToEffects = getFrameworkDIDebugData().resolverToEffects;\n const effects = resolverToEffects.get(diResolver) ?? [];\n return effects.map(effect => {\n if (effect instanceof EffectRefImpl) {\n return effect[SIGNAL];\n } else {\n return effect.signal[SIGNAL];\n }\n });\n}\nfunction extractSignalNodesAndEdgesFromRoots(nodes, signalDependenciesMap = new Map()) {\n for (const node of nodes) {\n if (signalDependenciesMap.has(node)) {\n continue;\n }\n const producerNodes = [];\n for (let link = node.producers; link !== undefined; link = link.nextProducer) {\n const producer = link.producer;\n producerNodes.push(producer);\n }\n signalDependenciesMap.set(node, producerNodes);\n extractSignalNodesAndEdgesFromRoots(producerNodes, signalDependenciesMap);\n }\n return signalDependenciesMap;\n}\nfunction getSignalGraph(injector) {\n let templateConsumer = null;\n if (!(injector instanceof NodeInjector) && !(injector instanceof R3Injector)) {\n return throwError('getSignalGraph must be called with a NodeInjector or R3Injector');\n }\n if (injector instanceof NodeInjector) {\n templateConsumer = getTemplateConsumer(injector);\n }\n const nonTemplateEffectNodes = extractEffectsFromInjector(injector);\n const signalNodes = templateConsumer ? [templateConsumer, ...nonTemplateEffectNodes] : nonTemplateEffectNodes;\n const signalDependenciesMap = extractSignalNodesAndEdgesFromRoots(signalNodes);\n return getNodesAndEdgesFromSignalMap(signalDependenciesMap);\n}\nlet changeDetectionRuns = 0;\nlet changeDetectionSyncRuns = 0;\nlet counter = 0;\nconst eventsStack = [];\nfunction measureStart(startEvent) {\n eventsStack.push([startEvent, counter]);\n console.timeStamp('Event_' + startEvent + '_' + counter++);\n}\nfunction measureEnd(startEvent, entryName, color) {\n let top;\n do {\n top = eventsStack.pop();\n assertDefined(top, 'Profiling error: could not find start event entry ' + startEvent);\n } while (top[0] !== startEvent);\n console.timeStamp(entryName, 'Event_' + top[0] + '_' + top[1], undefined, '\\u{1F170}\\uFE0F Angular', undefined, color);\n}\nconst chromeDevToolsInjectorProfiler = event => {\n const eventType = event.type;\n if (eventType === 5) {\n measureStart(100);\n } else if (eventType === 1) {\n const token = event.context.token;\n measureEnd(100, getProviderTokenMeasureName(token), 'tertiary-dark');\n }\n};\nconst devToolsProfiler = (event, instance, eventFn) => {\n switch (event) {\n case ProfilerEvent.BootstrapApplicationStart:\n case ProfilerEvent.BootstrapComponentStart:\n case ProfilerEvent.ChangeDetectionStart:\n case ProfilerEvent.ChangeDetectionSyncStart:\n case ProfilerEvent.AfterRenderHooksStart:\n case ProfilerEvent.ComponentStart:\n case ProfilerEvent.DeferBlockStateStart:\n case ProfilerEvent.DynamicComponentStart:\n case ProfilerEvent.TemplateCreateStart:\n case ProfilerEvent.LifecycleHookStart:\n case ProfilerEvent.TemplateUpdateStart:\n case ProfilerEvent.HostBindingsUpdateStart:\n case ProfilerEvent.OutputStart:\n {\n measureStart(event);\n break;\n }\n case ProfilerEvent.BootstrapApplicationEnd:\n {\n measureEnd(ProfilerEvent.BootstrapApplicationStart, 'Bootstrap application', 'primary-dark');\n break;\n }\n case ProfilerEvent.BootstrapComponentEnd:\n {\n measureEnd(ProfilerEvent.BootstrapComponentStart, 'Bootstrap component', 'primary-dark');\n break;\n }\n case ProfilerEvent.ChangeDetectionEnd:\n {\n changeDetectionSyncRuns = 0;\n measureEnd(ProfilerEvent.ChangeDetectionStart, 'Change detection ' + changeDetectionRuns++, 'primary-dark');\n break;\n }\n case ProfilerEvent.ChangeDetectionSyncEnd:\n {\n measureEnd(ProfilerEvent.ChangeDetectionSyncStart, 'Synchronization ' + changeDetectionSyncRuns++, 'primary');\n break;\n }\n case ProfilerEvent.AfterRenderHooksEnd:\n {\n measureEnd(ProfilerEvent.AfterRenderHooksStart, 'After render hooks', 'primary');\n break;\n }\n case ProfilerEvent.ComponentEnd:\n {\n const typeName = getComponentMeasureName(instance);\n measureEnd(ProfilerEvent.ComponentStart, typeName, 'primary-light');\n break;\n }\n case ProfilerEvent.DeferBlockStateEnd:\n {\n measureEnd(ProfilerEvent.DeferBlockStateStart, 'Defer block', 'primary-dark');\n break;\n }\n case ProfilerEvent.DynamicComponentEnd:\n {\n measureEnd(ProfilerEvent.DynamicComponentStart, 'Dynamic component creation', 'primary-dark');\n break;\n }\n case ProfilerEvent.TemplateUpdateEnd:\n {\n measureEnd(ProfilerEvent.TemplateUpdateStart, stringifyForError(eventFn) + ' (update)', 'secondary-dark');\n break;\n }\n case ProfilerEvent.TemplateCreateEnd:\n {\n measureEnd(ProfilerEvent.TemplateCreateStart, stringifyForError(eventFn) + ' (create)', 'secondary');\n break;\n }\n case ProfilerEvent.HostBindingsUpdateEnd:\n {\n measureEnd(ProfilerEvent.HostBindingsUpdateStart, 'HostBindings', 'secondary-dark');\n break;\n }\n case ProfilerEvent.LifecycleHookEnd:\n {\n const typeName = getComponentMeasureName(instance);\n measureEnd(ProfilerEvent.LifecycleHookStart, `${typeName}:${stringifyForError(eventFn)}`, 'tertiary');\n break;\n }\n case ProfilerEvent.OutputEnd:\n {\n measureEnd(ProfilerEvent.OutputStart, stringifyForError(eventFn), 'tertiary-light');\n break;\n }\n default:\n {\n throw new Error('Unexpected profiling event type: ' + event);\n }\n }\n};\nfunction getComponentMeasureName(instance) {\n return instance.constructor.name;\n}\nfunction getProviderTokenMeasureName(token) {\n if (isTypeProvider(token)) {\n return token.name;\n } else if (token.provide != null) {\n return getProviderTokenMeasureName(token.provide);\n }\n return token.toString();\n}\nfunction enableProfiling() {\n performanceMarkFeature('Chrome DevTools profiling');\n if (typeof ngDevMode !== 'undefined' && ngDevMode) {\n const removeInjectorProfiler = setInjectorProfiler(chromeDevToolsInjectorProfiler);\n const removeProfiler = setProfiler(devToolsProfiler);\n return () => {\n removeInjectorProfiler();\n removeProfiler();\n };\n }\n return () => {};\n}\nfunction getTransferState(injector) {\n const doc = injector.get(DOCUMENT$1);\n const appId = injector.get(APP_ID);\n const transferState = retrieveTransferredState(doc, appId);\n const filteredEntries = {};\n for (const [key, value] of Object.entries(transferState)) {\n if (!isInternalHydrationTransferStateKey(key)) {\n filteredEntries[key] = value;\n }\n }\n return filteredEntries;\n}\nconst GLOBAL_PUBLISH_EXPANDO_KEY = 'ng';\nconst globalUtilsFunctions = {\n 'ɵgetDependenciesFromInjectable': getDependenciesFromInjectable,\n 'ɵgetInjectorProviders': getInjectorProviders,\n 'ɵgetInjectorResolutionPath': getInjectorResolutionPath,\n 'ɵgetInjectorMetadata': getInjectorMetadata,\n 'ɵsetProfiler': setProfiler,\n 'ɵgetSignalGraph': getSignalGraph,\n 'ɵgetDeferBlocks': getDeferBlocks,\n 'ɵgetTransferState': getTransferState,\n 'getDirectiveMetadata': getDirectiveMetadata$1,\n 'getComponent': getComponent,\n 'getContext': getContext,\n 'getListeners': getListeners,\n 'getOwningComponent': getOwningComponent,\n 'getHostElement': getHostElement,\n 'getInjector': getInjector,\n 'getRootComponents': getRootComponents,\n 'getDirectives': getDirectives,\n 'applyChanges': applyChanges,\n 'isSignal': isSignal,\n 'enableProfiling': enableProfiling\n};\nlet _published = false;\nfunction publishDefaultGlobalUtils$1() {\n if (!_published) {\n _published = true;\n if (typeof window !== 'undefined') {\n setupFrameworkInjectorProfiler();\n }\n for (const [methodName, method] of Object.entries(globalUtilsFunctions)) {\n publishGlobalUtil(methodName, method);\n }\n }\n}\nfunction publishGlobalUtil(name, fn) {\n publishUtil(name, fn);\n}\nfunction publishExternalGlobalUtil(name, fn) {\n publishUtil(name, fn);\n}\nfunction publishUtil(name, fn) {\n if (typeof COMPILED === 'undefined' || !COMPILED) {\n const w = _global;\n ngDevMode && assertDefined(fn, 'function not defined');\n w[GLOBAL_PUBLISH_EXPANDO_KEY] ??= {};\n w[GLOBAL_PUBLISH_EXPANDO_KEY][name] = fn;\n }\n}\nconst TESTABILITY = /*#__PURE__*/new InjectionToken('');\nconst TESTABILITY_GETTER = /*#__PURE__*/new InjectionToken('');\nlet Testability = /*#__PURE__*/(() => {\n class Testability {\n _ngZone;\n registry;\n _isZoneStable = true;\n _callbacks = [];\n _taskTrackingZone = null;\n _destroyRef;\n constructor(_ngZone, registry, testabilityGetter) {\n this._ngZone = _ngZone;\n this.registry = registry;\n if (isInInjectionContext()) {\n this._destroyRef = inject(DestroyRef, {\n optional: true\n }) ?? undefined;\n }\n if (!_testabilityGetter) {\n setTestabilityGetter(testabilityGetter);\n testabilityGetter.addToWindow(registry);\n }\n this._watchAngularEvents();\n _ngZone.run(() => {\n this._taskTrackingZone = typeof Zone == 'undefined' ? null : Zone.current.get('TaskTrackingZone');\n });\n }\n _watchAngularEvents() {\n const onUnstableSubscription = this._ngZone.onUnstable.subscribe({\n next: () => {\n this._isZoneStable = false;\n }\n });\n const onStableSubscription = this._ngZone.runOutsideAngular(() => this._ngZone.onStable.subscribe({\n next: () => {\n NgZone.assertNotInAngularZone();\n queueMicrotask(() => {\n this._isZoneStable = true;\n this._runCallbacksIfReady();\n });\n }\n }));\n this._destroyRef?.onDestroy(() => {\n onUnstableSubscription.unsubscribe();\n onStableSubscription.unsubscribe();\n });\n }\n isStable() {\n return this._isZoneStable && !this._ngZone.hasPendingMacrotasks;\n }\n _runCallbacksIfReady() {\n if (this.isStable()) {\n queueMicrotask(() => {\n while (this._callbacks.length !== 0) {\n let cb = this._callbacks.pop();\n clearTimeout(cb.timeoutId);\n cb.doneCb();\n }\n });\n } else {\n let pending = this.getPendingTasks();\n this._callbacks = this._callbacks.filter(cb => {\n if (cb.updateCb && cb.updateCb(pending)) {\n clearTimeout(cb.timeoutId);\n return false;\n }\n return true;\n });\n }\n }\n getPendingTasks() {\n if (!this._taskTrackingZone) {\n return [];\n }\n return this._taskTrackingZone.macroTasks.map(t => {\n return {\n source: t.source,\n creationLocation: t.creationLocation,\n data: t.data\n };\n });\n }\n addCallback(cb, timeout, updateCb) {\n let timeoutId = -1;\n if (timeout && timeout > 0) {\n timeoutId = setTimeout(() => {\n this._callbacks = this._callbacks.filter(cb => cb.timeoutId !== timeoutId);\n cb();\n }, timeout);\n }\n this._callbacks.push({\n doneCb: cb,\n timeoutId: timeoutId,\n updateCb: updateCb\n });\n }\n whenStable(doneCb, timeout, updateCb) {\n if (updateCb && !this._taskTrackingZone) {\n throw new Error('Task tracking zone is required when passing an update callback to ' + 'whenStable(). Is \"zone.js/plugins/task-tracking\" loaded?');\n }\n this.addCallback(doneCb, timeout, updateCb);\n this._runCallbacksIfReady();\n }\n registerApplication(token) {\n this.registry.registerApplication(token, this);\n }\n unregisterApplication(token) {\n this.registry.unregisterApplication(token);\n }\n findProviders(using, provider, exactMatch) {\n return [];\n }\n static ɵfac = function Testability_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || Testability)(__inject(NgZone), __inject(TestabilityRegistry), __inject(TESTABILITY_GETTER));\n };\n static ɵprov = /*@__PURE__*/__defineInjectable({\n token: Testability,\n factory: Testability.ɵfac\n });\n }\n return Testability;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && setClassMetadata(Testability, [{\n type: Injectable\n }], () => [{\n type: NgZone\n }, {\n type: TestabilityRegistry\n }, {\n type: undefined,\n decorators: [{\n type: Inject,\n args: [TESTABILITY_GETTER]\n }]\n }], null);\n})();\nlet TestabilityRegistry = /*#__PURE__*/(() => {\n class TestabilityRegistry {\n _applications = new Map();\n registerApplication(token, testability) {\n this._applications.set(token, testability);\n }\n unregisterApplication(token) {\n this._applications.delete(token);\n }\n unregisterAllApplications() {\n this._applications.clear();\n }\n getTestability(elem) {\n return this._applications.get(elem) || null;\n }\n getAllTestabilities() {\n return Array.from(this._applications.values());\n }\n getAllRootElements() {\n return Array.from(this._applications.keys());\n }\n findTestabilityInTree(elem, findInAncestors = true) {\n return _testabilityGetter?.findTestabilityInTree(this, elem, findInAncestors) ?? null;\n }\n static ɵfac = function TestabilityRegistry_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || TestabilityRegistry)();\n };\n static ɵprov = /*@__PURE__*/__defineInjectable({\n token: TestabilityRegistry,\n factory: TestabilityRegistry.ɵfac,\n providedIn: 'platform'\n });\n }\n return TestabilityRegistry;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && setClassMetadata(TestabilityRegistry, [{\n type: Injectable,\n args: [{\n providedIn: 'platform'\n }]\n }], null, null);\n})();\nfunction setTestabilityGetter(getter) {\n _testabilityGetter = getter;\n}\nlet _testabilityGetter;\nfunction isPromise(obj) {\n return !!obj && typeof obj.then === 'function';\n}\nfunction isSubscribable(obj) {\n return !!obj && typeof obj.subscribe === 'function';\n}\nconst APP_INITIALIZER = /*#__PURE__*/new InjectionToken(ngDevMode ? 'Application Initializer' : '');\nfunction provideAppInitializer(initializerFn) {\n return makeEnvironmentProviders([{\n provide: APP_INITIALIZER,\n multi: true,\n useValue: initializerFn\n }]);\n}\nlet ApplicationInitStatus = /*#__PURE__*/(() => {\n class ApplicationInitStatus {\n resolve;\n reject;\n initialized = false;\n done = false;\n donePromise = new Promise((res, rej) => {\n this.resolve = res;\n this.reject = rej;\n });\n appInits = inject(APP_INITIALIZER, {\n optional: true\n }) ?? [];\n injector = inject(Injector);\n constructor() {\n if ((typeof ngDevMode === 'undefined' || ngDevMode) && !Array.isArray(this.appInits)) {\n throw new RuntimeError(-209, 'Unexpected type of the `APP_INITIALIZER` token value ' + `(expected an array, but got ${typeof this.appInits}). ` + 'Please check that the `APP_INITIALIZER` token is configured as a ' + '`multi: true` provider.');\n }\n }\n runInitializers() {\n if (this.initialized) {\n return;\n }\n const asyncInitPromises = [];\n for (const appInits of this.appInits) {\n const initResult = runInInjectionContext(this.injector, appInits);\n if (isPromise(initResult)) {\n asyncInitPromises.push(initResult);\n } else if (isSubscribable(initResult)) {\n const observableAsPromise = new Promise((resolve, reject) => {\n initResult.subscribe({\n complete: resolve,\n error: reject\n });\n });\n asyncInitPromises.push(observableAsPromise);\n }\n }\n const complete = () => {\n this.done = true;\n this.resolve();\n };\n Promise.all(asyncInitPromises).then(() => {\n complete();\n }).catch(e => {\n this.reject(e);\n });\n if (asyncInitPromises.length === 0) {\n complete();\n }\n this.initialized = true;\n }\n static ɵfac = function ApplicationInitStatus_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || ApplicationInitStatus)();\n };\n static ɵprov = /*@__PURE__*/__defineInjectable({\n token: ApplicationInitStatus,\n factory: ApplicationInitStatus.ɵfac,\n providedIn: 'root'\n });\n }\n return ApplicationInitStatus;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && setClassMetadata(ApplicationInitStatus, [{\n type: Injectable,\n args: [{\n providedIn: 'root'\n }]\n }], () => [], null);\n})();\nconst APP_BOOTSTRAP_LISTENER = /*#__PURE__*/new InjectionToken(ngDevMode ? 'appBootstrapListener' : '');\nfunction publishDefaultGlobalUtils() {\n ngDevMode && publishDefaultGlobalUtils$1();\n}\nfunction publishSignalConfiguration() {\n setThrowInvalidWriteToSignalError(() => {\n let errorMessage = '';\n if (ngDevMode) {\n const activeConsumer = getActiveConsumer();\n errorMessage = activeConsumer && isReactiveLViewConsumer(activeConsumer) ? 'Writing to signals is not allowed while Angular renders the template (eg. interpolations)' : 'Writing to signals is not allowed in a `computed`';\n }\n throw new RuntimeError(600, errorMessage);\n });\n}\nfunction isBoundToModule(cf) {\n return cf.isBoundToModule;\n}\nconst MAXIMUM_REFRESH_RERUNS = 10;\nfunction optionsReducer(dst, objs) {\n if (Array.isArray(objs)) {\n return objs.reduce(optionsReducer, dst);\n }\n return {\n ...dst,\n ...objs\n };\n}\nlet ApplicationRef = /*#__PURE__*/(() => {\n class ApplicationRef {\n _runningTick = false;\n _destroyed = false;\n _destroyListeners = [];\n _views = [];\n internalErrorHandler = inject(INTERNAL_APPLICATION_ERROR_HANDLER);\n afterRenderManager = inject(AfterRenderManager);\n zonelessEnabled = inject(ZONELESS_ENABLED);\n rootEffectScheduler = inject(EffectScheduler);\n dirtyFlags = 0;\n tracingSnapshot = null;\n allTestViews = new Set();\n autoDetectTestViews = new Set();\n includeAllTestViews = false;\n afterTick = new Subject();\n get allViews() {\n return [...(this.includeAllTestViews ? this.allTestViews : this.autoDetectTestViews).keys(), ...this._views];\n }\n get destroyed() {\n return this._destroyed;\n }\n componentTypes = [];\n components = [];\n internalPendingTask = inject(PendingTasksInternal);\n get isStable() {\n return this.internalPendingTask.hasPendingTasksObservable.pipe(map(pending => !pending));\n }\n constructor() {\n inject(TracingService, {\n optional: true\n });\n }\n whenStable() {\n let subscription;\n return new Promise(resolve => {\n subscription = this.isStable.subscribe({\n next: stable => {\n if (stable) {\n resolve();\n }\n }\n });\n }).finally(() => {\n subscription.unsubscribe();\n });\n }\n _injector = inject(EnvironmentInjector);\n _rendererFactory = null;\n get injector() {\n return this._injector;\n }\n bootstrap(componentOrFactory, rootSelectorOrNode) {\n return this.bootstrapImpl(componentOrFactory, rootSelectorOrNode);\n }\n bootstrapImpl(componentOrFactory, rootSelectorOrNode, injector = Injector.NULL) {\n const ngZone = this._injector.get(NgZone);\n return ngZone.run(() => {\n profiler(ProfilerEvent.BootstrapComponentStart);\n (typeof ngDevMode === 'undefined' || ngDevMode) && warnIfDestroyed(this._destroyed);\n const isComponentFactory = componentOrFactory instanceof ComponentFactory$1;\n const initStatus = this._injector.get(ApplicationInitStatus);\n if (!initStatus.done) {\n let errorMessage = '';\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n const standalone = !isComponentFactory && isStandalone(componentOrFactory);\n errorMessage = 'Cannot bootstrap as there are still asynchronous initializers running.' + (standalone ? '' : ' Bootstrap components in the `ngDoBootstrap` method of the root module.');\n }\n throw new RuntimeError(405, errorMessage);\n }\n let componentFactory;\n if (isComponentFactory) {\n componentFactory = componentOrFactory;\n } else {\n const resolver = this._injector.get(ComponentFactoryResolver$1);\n componentFactory = resolver.resolveComponentFactory(componentOrFactory);\n }\n this.componentTypes.push(componentFactory.componentType);\n const ngModule = isBoundToModule(componentFactory) ? undefined : this._injector.get(NgModuleRef$1);\n const selectorOrNode = rootSelectorOrNode || componentFactory.selector;\n const compRef = componentFactory.create(injector, [], selectorOrNode, ngModule);\n const nativeElement = compRef.location.nativeElement;\n const testability = compRef.injector.get(TESTABILITY, null);\n testability?.registerApplication(nativeElement);\n compRef.onDestroy(() => {\n this.detachView(compRef.hostView);\n remove(this.components, compRef);\n testability?.unregisterApplication(nativeElement);\n });\n this._loadComponent(compRef);\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n const _console = this._injector.get(Console);\n _console.log(`Angular is running in development mode.`);\n }\n profiler(ProfilerEvent.BootstrapComponentEnd, compRef);\n return compRef;\n });\n }\n tick() {\n if (!this.zonelessEnabled) {\n this.dirtyFlags |= 1;\n }\n this._tick();\n }\n _tick() {\n profiler(ProfilerEvent.ChangeDetectionStart);\n if (this.tracingSnapshot !== null) {\n this.tracingSnapshot.run(TracingAction.CHANGE_DETECTION, this.tickImpl);\n } else {\n this.tickImpl();\n }\n }\n tickImpl = () => {\n (typeof ngDevMode === 'undefined' || ngDevMode) && warnIfDestroyed(this._destroyed);\n if (this._runningTick) {\n profiler(ProfilerEvent.ChangeDetectionEnd);\n throw new RuntimeError(101, ngDevMode && 'ApplicationRef.tick is called recursively');\n }\n const prevConsumer = setActiveConsumer(null);\n try {\n this._runningTick = true;\n this.synchronize();\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n for (let view of this.allViews) {\n view.checkNoChanges();\n }\n }\n } finally {\n this._runningTick = false;\n this.tracingSnapshot?.dispose();\n this.tracingSnapshot = null;\n setActiveConsumer(prevConsumer);\n this.afterTick.next();\n profiler(ProfilerEvent.ChangeDetectionEnd);\n }\n };\n synchronize() {\n if (this._rendererFactory === null && !this._injector.destroyed) {\n this._rendererFactory = this._injector.get(RendererFactory2, null, {\n optional: true\n });\n }\n let runs = 0;\n while (this.dirtyFlags !== 0 && runs++ < MAXIMUM_REFRESH_RERUNS) {\n profiler(ProfilerEvent.ChangeDetectionSyncStart);\n try {\n this.synchronizeOnce();\n } finally {\n profiler(ProfilerEvent.ChangeDetectionSyncEnd);\n }\n }\n if ((typeof ngDevMode === 'undefined' || ngDevMode) && runs >= MAXIMUM_REFRESH_RERUNS) {\n throw new RuntimeError(103, ngDevMode && 'Infinite change detection while refreshing application views. ' + 'Ensure views are not calling `markForCheck` on every template execution or ' + 'that afterRender hooks always mark views for check.');\n }\n }\n synchronizeOnce() {\n if (this.dirtyFlags & 16) {\n this.dirtyFlags &= ~16;\n this.rootEffectScheduler.flush();\n }\n let ranDetectChanges = false;\n if (this.dirtyFlags & 7) {\n const useGlobalCheck = Boolean(this.dirtyFlags & 1);\n this.dirtyFlags &= ~7;\n this.dirtyFlags |= 8;\n for (let {\n _lView\n } of this.allViews) {\n if (!useGlobalCheck && !requiresRefreshOrTraversal(_lView)) {\n continue;\n }\n const mode = useGlobalCheck && !this.zonelessEnabled ? 0 : 1;\n detectChangesInternal(_lView, mode);\n ranDetectChanges = true;\n }\n this.dirtyFlags &= ~4;\n this.syncDirtyFlagsWithViews();\n if (this.dirtyFlags & (7 | 16)) {\n return;\n }\n }\n if (!ranDetectChanges) {\n this._rendererFactory?.begin?.();\n this._rendererFactory?.end?.();\n }\n if (this.dirtyFlags & 8) {\n this.dirtyFlags &= ~8;\n this.afterRenderManager.execute();\n }\n this.syncDirtyFlagsWithViews();\n }\n syncDirtyFlagsWithViews() {\n if (this.allViews.some(({\n _lView\n }) => requiresRefreshOrTraversal(_lView))) {\n this.dirtyFlags |= 2;\n return;\n } else {\n this.dirtyFlags &= ~7;\n }\n }\n attachView(viewRef) {\n (typeof ngDevMode === 'undefined' || ngDevMode) && warnIfDestroyed(this._destroyed);\n const view = viewRef;\n this._views.push(view);\n view.attachToAppRef(this);\n }\n detachView(viewRef) {\n (typeof ngDevMode === 'undefined' || ngDevMode) && warnIfDestroyed(this._destroyed);\n const view = viewRef;\n remove(this._views, view);\n view.detachFromAppRef();\n }\n _loadComponent(componentRef) {\n this.attachView(componentRef.hostView);\n try {\n this.tick();\n } catch (e) {\n this.internalErrorHandler(e);\n }\n this.components.push(componentRef);\n const listeners = this._injector.get(APP_BOOTSTRAP_LISTENER, []);\n if (ngDevMode && !Array.isArray(listeners)) {\n throw new RuntimeError(-209, 'Unexpected type of the `APP_BOOTSTRAP_LISTENER` token value ' + `(expected an array, but got ${typeof listeners}). ` + 'Please check that the `APP_BOOTSTRAP_LISTENER` token is configured as a ' + '`multi: true` provider.');\n }\n listeners.forEach(listener => listener(componentRef));\n }\n ngOnDestroy() {\n if (this._destroyed) return;\n try {\n this._destroyListeners.forEach(listener => listener());\n this._views.slice().forEach(view => view.destroy());\n } finally {\n this._destroyed = true;\n this._views = [];\n this._destroyListeners = [];\n }\n }\n onDestroy(callback) {\n (typeof ngDevMode === 'undefined' || ngDevMode) && warnIfDestroyed(this._destroyed);\n this._destroyListeners.push(callback);\n return () => remove(this._destroyListeners, callback);\n }\n destroy() {\n if (this._destroyed) {\n throw new RuntimeError(406, ngDevMode && 'This instance of the `ApplicationRef` has already been destroyed.');\n }\n const injector = this._injector;\n if (injector.destroy && !injector.destroyed) {\n injector.destroy();\n }\n }\n get viewCount() {\n return this._views.length;\n }\n static ɵfac = function ApplicationRef_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || ApplicationRef)();\n };\n static ɵprov = /*@__PURE__*/__defineInjectable({\n token: ApplicationRef,\n factory: ApplicationRef.ɵfac,\n providedIn: 'root'\n });\n }\n return ApplicationRef;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && setClassMetadata(ApplicationRef, [{\n type: Injectable,\n args: [{\n providedIn: 'root'\n }]\n }], () => [], null);\n})();\nfunction warnIfDestroyed(destroyed) {\n if (destroyed) {\n console.warn(formatRuntimeError(406, 'This instance of the `ApplicationRef` has already been destroyed.'));\n }\n}\nfunction remove(list, el) {\n const index = list.indexOf(el);\n if (index > -1) {\n list.splice(index, 1);\n }\n}\nfunction promiseWithResolvers() {\n let resolve;\n let reject;\n const promise = new Promise((res, rej) => {\n resolve = res;\n reject = rej;\n });\n return {\n promise,\n resolve,\n reject\n };\n}\nfunction scheduleDelayedTrigger(scheduleFn) {\n const lView = getLView();\n const tNode = getCurrentTNode();\n renderPlaceholder(lView, tNode);\n if (!shouldTriggerDeferBlock(0, lView)) return;\n const injector = lView[INJECTOR];\n const lDetails = getLDeferBlockDetails(lView, tNode);\n const cleanupFn = scheduleFn(() => triggerDeferBlock(0, lView, tNode), injector);\n storeTriggerCleanupFn(0, lDetails, cleanupFn);\n}\nfunction scheduleDelayedPrefetching(scheduleFn) {\n if (typeof ngServerMode !== 'undefined' && ngServerMode) return;\n const lView = getLView();\n const injector = lView[INJECTOR];\n const tNode = getCurrentTNode();\n const tView = lView[TVIEW];\n const tDetails = getTDeferBlockDetails(tView, tNode);\n if (tDetails.loadingState === DeferDependenciesLoadingState.NOT_STARTED) {\n const lDetails = getLDeferBlockDetails(lView, tNode);\n const prefetch = () => triggerPrefetching(tDetails, lView, tNode);\n const cleanupFn = scheduleFn(prefetch, injector);\n storeTriggerCleanupFn(1, lDetails, cleanupFn);\n }\n}\nfunction scheduleDelayedHydrating(scheduleFn, lView, tNode) {\n if (typeof ngServerMode !== 'undefined' && ngServerMode) return;\n const injector = lView[INJECTOR];\n const lDetails = getLDeferBlockDetails(lView, tNode);\n const ssrUniqueId = lDetails[SSR_UNIQUE_ID];\n ngDevMode && assertSsrIdDefined(ssrUniqueId);\n const cleanupFn = scheduleFn(() => triggerHydrationFromBlockName(injector, ssrUniqueId), injector);\n storeTriggerCleanupFn(2, lDetails, cleanupFn);\n}\nfunction triggerPrefetching(tDetails, lView, tNode) {\n triggerResourceLoading(tDetails, lView, tNode);\n}\nfunction triggerResourceLoading(tDetails, lView, tNode) {\n const injector = lView[INJECTOR];\n const tView = lView[TVIEW];\n if (tDetails.loadingState !== DeferDependenciesLoadingState.NOT_STARTED) {\n return tDetails.loadingPromise ?? Promise.resolve();\n }\n const lDetails = getLDeferBlockDetails(lView, tNode);\n const primaryBlockTNode = getPrimaryBlockTNode(tView, tDetails);\n tDetails.loadingState = DeferDependenciesLoadingState.IN_PROGRESS;\n invokeTriggerCleanupFns(1, lDetails);\n let dependenciesFn = tDetails.dependencyResolverFn;\n if (ngDevMode) {\n const deferDependencyInterceptor = injector.get(DEFER_BLOCK_DEPENDENCY_INTERCEPTOR, null, {\n optional: true\n });\n if (deferDependencyInterceptor) {\n dependenciesFn = deferDependencyInterceptor.intercept(dependenciesFn);\n }\n }\n const removeTask = injector.get(PendingTasks).add();\n if (!dependenciesFn) {\n tDetails.loadingPromise = Promise.resolve().then(() => {\n tDetails.loadingPromise = null;\n tDetails.loadingState = DeferDependenciesLoadingState.COMPLETE;\n removeTask();\n });\n return tDetails.loadingPromise;\n }\n tDetails.loadingPromise = Promise.allSettled(dependenciesFn()).then(results => {\n let failed = false;\n const directiveDefs = [];\n const pipeDefs = [];\n for (const result of results) {\n if (result.status === 'fulfilled') {\n const dependency = result.value;\n const directiveDef = getComponentDef(dependency) || getDirectiveDef(dependency);\n if (directiveDef) {\n directiveDefs.push(directiveDef);\n } else {\n const pipeDef = getPipeDef$1(dependency);\n if (pipeDef) {\n pipeDefs.push(pipeDef);\n }\n }\n } else {\n failed = true;\n break;\n }\n }\n if (failed) {\n tDetails.loadingState = DeferDependenciesLoadingState.FAILED;\n if (tDetails.errorTmplIndex === null) {\n const templateLocation = ngDevMode ? getTemplateLocationDetails(lView) : '';\n const error = new RuntimeError(-750, ngDevMode && 'Loading dependencies for `@defer` block failed, ' + `but no \\`@error\\` block was configured${templateLocation}. ` + 'Consider using the `@error` block to render an error state.');\n handleUncaughtError(lView, error);\n }\n } else {\n tDetails.loadingState = DeferDependenciesLoadingState.COMPLETE;\n const primaryBlockTView = primaryBlockTNode.tView;\n if (directiveDefs.length > 0) {\n primaryBlockTView.directiveRegistry = addDepsToRegistry(primaryBlockTView.directiveRegistry, directiveDefs);\n const directiveTypes = directiveDefs.map(def => def.type);\n const providers = internalImportProvidersFrom(false, ...directiveTypes);\n tDetails.providers = providers;\n }\n if (pipeDefs.length > 0) {\n primaryBlockTView.pipeRegistry = addDepsToRegistry(primaryBlockTView.pipeRegistry, pipeDefs);\n }\n }\n });\n return tDetails.loadingPromise.finally(() => {\n tDetails.loadingPromise = null;\n removeTask();\n });\n}\nfunction shouldTriggerDeferBlock(triggerType, lView) {\n if (triggerType === 0 && typeof ngServerMode !== 'undefined' && ngServerMode) {\n return false;\n }\n const injector = lView[INJECTOR];\n const config = injector.get(DEFER_BLOCK_CONFIG, null, {\n optional: true\n });\n if (config?.behavior === DeferBlockBehavior.Manual) {\n return false;\n }\n return true;\n}\nfunction triggerDeferBlock(triggerType, lView, tNode) {\n const tView = lView[TVIEW];\n const lContainer = lView[tNode.index];\n ngDevMode && assertLContainer(lContainer);\n if (!shouldTriggerDeferBlock(triggerType, lView)) return;\n const lDetails = getLDeferBlockDetails(lView, tNode);\n const tDetails = getTDeferBlockDetails(tView, tNode);\n invokeAllTriggerCleanupFns(lDetails);\n switch (tDetails.loadingState) {\n case DeferDependenciesLoadingState.NOT_STARTED:\n renderDeferBlockState(DeferBlockState.Loading, tNode, lContainer);\n triggerResourceLoading(tDetails, lView, tNode);\n if (tDetails.loadingState === DeferDependenciesLoadingState.IN_PROGRESS) {\n renderDeferStateAfterResourceLoading(tDetails, tNode, lContainer);\n }\n break;\n case DeferDependenciesLoadingState.IN_PROGRESS:\n renderDeferBlockState(DeferBlockState.Loading, tNode, lContainer);\n renderDeferStateAfterResourceLoading(tDetails, tNode, lContainer);\n break;\n case DeferDependenciesLoadingState.COMPLETE:\n ngDevMode && assertDeferredDependenciesLoaded(tDetails);\n renderDeferBlockState(DeferBlockState.Complete, tNode, lContainer);\n break;\n case DeferDependenciesLoadingState.FAILED:\n renderDeferBlockState(DeferBlockState.Error, tNode, lContainer);\n break;\n default:\n if (ngDevMode) {\n throwError('Unknown defer block state');\n }\n }\n}\nasync function triggerHydrationFromBlockName(injector, blockName, replayQueuedEventsFn) {\n const dehydratedBlockRegistry = injector.get(DEHYDRATED_BLOCK_REGISTRY);\n const blocksBeingHydrated = dehydratedBlockRegistry.hydrating;\n if (blocksBeingHydrated.has(blockName)) {\n return;\n }\n const {\n parentBlockPromise,\n hydrationQueue\n } = getParentBlockHydrationQueue(blockName, injector);\n if (hydrationQueue.length === 0) return;\n if (parentBlockPromise !== null) {\n hydrationQueue.shift();\n }\n populateHydratingStateForQueue(dehydratedBlockRegistry, hydrationQueue);\n if (parentBlockPromise !== null) {\n await parentBlockPromise;\n }\n const topmostParentBlock = hydrationQueue[0];\n if (dehydratedBlockRegistry.has(topmostParentBlock)) {\n await triggerHydrationForBlockQueue(injector, hydrationQueue, replayQueuedEventsFn);\n } else {\n dehydratedBlockRegistry.awaitParentBlock(topmostParentBlock, async () => await triggerHydrationForBlockQueue(injector, hydrationQueue, replayQueuedEventsFn));\n }\n}\nasync function triggerHydrationForBlockQueue(injector, hydrationQueue, replayQueuedEventsFn) {\n const dehydratedBlockRegistry = injector.get(DEHYDRATED_BLOCK_REGISTRY);\n const blocksBeingHydrated = dehydratedBlockRegistry.hydrating;\n const pendingTasks = injector.get(PendingTasksInternal);\n const taskId = pendingTasks.add();\n for (let blockQueueIdx = 0; blockQueueIdx < hydrationQueue.length; blockQueueIdx++) {\n const dehydratedBlockId = hydrationQueue[blockQueueIdx];\n const dehydratedDeferBlock = dehydratedBlockRegistry.get(dehydratedBlockId);\n if (dehydratedDeferBlock != null) {\n await triggerResourceLoadingForHydration(dehydratedDeferBlock);\n await nextRender(injector);\n if (deferBlockHasErrored(dehydratedDeferBlock)) {\n removeDehydratedViewList(dehydratedDeferBlock);\n cleanupRemainingHydrationQueue(hydrationQueue.slice(blockQueueIdx), dehydratedBlockRegistry);\n break;\n }\n blocksBeingHydrated.get(dehydratedBlockId).resolve();\n } else {\n cleanupParentContainer(blockQueueIdx, hydrationQueue, dehydratedBlockRegistry);\n cleanupRemainingHydrationQueue(hydrationQueue.slice(blockQueueIdx), dehydratedBlockRegistry);\n break;\n }\n }\n const lastBlockName = hydrationQueue[hydrationQueue.length - 1];\n await blocksBeingHydrated.get(lastBlockName)?.promise;\n pendingTasks.remove(taskId);\n if (replayQueuedEventsFn) {\n replayQueuedEventsFn(hydrationQueue);\n }\n cleanupHydratedDeferBlocks(dehydratedBlockRegistry.get(lastBlockName), hydrationQueue, dehydratedBlockRegistry, injector.get(ApplicationRef));\n}\nfunction deferBlockHasErrored(deferBlock) {\n return getLDeferBlockDetails(deferBlock.lView, deferBlock.tNode)[DEFER_BLOCK_STATE] === DeferBlockState.Error;\n}\nfunction cleanupParentContainer(currentBlockIdx, hydrationQueue, dehydratedBlockRegistry) {\n const parentDeferBlockIdx = currentBlockIdx - 1;\n const parentDeferBlock = parentDeferBlockIdx > -1 ? dehydratedBlockRegistry.get(hydrationQueue[parentDeferBlockIdx]) : null;\n if (parentDeferBlock) {\n cleanupLContainer(parentDeferBlock.lContainer);\n }\n}\nfunction cleanupRemainingHydrationQueue(hydrationQueue, dehydratedBlockRegistry) {\n const blocksBeingHydrated = dehydratedBlockRegistry.hydrating;\n for (const dehydratedBlockId in hydrationQueue) {\n blocksBeingHydrated.get(dehydratedBlockId)?.reject();\n }\n dehydratedBlockRegistry.cleanup(hydrationQueue);\n}\nfunction populateHydratingStateForQueue(registry, queue) {\n for (let blockId of queue) {\n registry.hydrating.set(blockId, promiseWithResolvers());\n }\n}\nfunction nextRender(injector) {\n return new Promise(resolveFn => afterNextRender(resolveFn, {\n injector\n }));\n}\nasync function triggerResourceLoadingForHydration(dehydratedBlock) {\n const {\n tNode,\n lView\n } = dehydratedBlock;\n const lDetails = getLDeferBlockDetails(lView, tNode);\n return new Promise(resolve => {\n onDeferBlockCompletion(lDetails, resolve);\n triggerDeferBlock(2, lView, tNode);\n });\n}\nfunction onDeferBlockCompletion(lDetails, callback) {\n if (!Array.isArray(lDetails[ON_COMPLETE_FNS])) {\n lDetails[ON_COMPLETE_FNS] = [];\n }\n lDetails[ON_COMPLETE_FNS].push(callback);\n}\nfunction shouldAttachTrigger(triggerType, lView, tNode) {\n if (triggerType === 0) {\n return shouldAttachRegularTrigger(lView, tNode);\n } else if (triggerType === 2) {\n return !shouldAttachRegularTrigger(lView, tNode);\n }\n return !(typeof ngServerMode !== 'undefined' && ngServerMode);\n}\nfunction hasHydrateTriggers(flags) {\n return flags != null && (flags & 1) === 1;\n}\nfunction shouldAttachRegularTrigger(lView, tNode) {\n const injector = lView[INJECTOR];\n const tDetails = getTDeferBlockDetails(lView[TVIEW], tNode);\n const incrementalHydrationEnabled = isIncrementalHydrationEnabled(injector);\n const _hasHydrateTriggers = hasHydrateTriggers(tDetails.flags);\n if (typeof ngServerMode !== 'undefined' && ngServerMode) {\n return !incrementalHydrationEnabled || !_hasHydrateTriggers;\n }\n const lDetails = getLDeferBlockDetails(lView, tNode);\n const wasServerSideRendered = lDetails[SSR_UNIQUE_ID] !== null;\n if (_hasHydrateTriggers && wasServerSideRendered && incrementalHydrationEnabled) {\n return false;\n }\n return true;\n}\nfunction getHydrateTriggers(tView, tNode) {\n const tDetails = getTDeferBlockDetails(tView, tNode);\n return tDetails.hydrateTriggers ??= new Map();\n}\nfunction processAndInitTriggers(injector, blockData, nodes) {\n const idleElements = [];\n const timerElements = [];\n const viewportElements = [];\n const immediateElements = [];\n for (let [blockId, blockSummary] of blockData) {\n const commentNode = nodes.get(blockId);\n if (commentNode !== undefined) {\n const numRootNodes = blockSummary.data[NUM_ROOT_NODES];\n let currentNode = commentNode;\n for (let i = 0; i < numRootNodes; i++) {\n currentNode = currentNode.previousSibling;\n if (currentNode.nodeType !== Node.ELEMENT_NODE) {\n continue;\n }\n const elementTrigger = {\n el: currentNode,\n blockName: blockId\n };\n if (blockSummary.hydrate.idle) {\n idleElements.push(elementTrigger);\n }\n if (blockSummary.hydrate.immediate) {\n immediateElements.push(elementTrigger);\n }\n if (blockSummary.hydrate.timer !== null) {\n elementTrigger.delay = blockSummary.hydrate.timer;\n timerElements.push(elementTrigger);\n }\n if (blockSummary.hydrate.viewport) {\n if (typeof blockSummary.hydrate.viewport !== 'boolean') {\n elementTrigger.intersectionObserverOptions = blockSummary.hydrate.viewport;\n }\n viewportElements.push(elementTrigger);\n }\n }\n }\n }\n setIdleTriggers(injector, idleElements);\n setImmediateTriggers(injector, immediateElements);\n setViewportTriggers(injector, viewportElements);\n setTimerTriggers(injector, timerElements);\n}\nfunction setIdleTriggers(injector, elementTriggers) {\n for (const elementTrigger of elementTriggers) {\n const registry = injector.get(DEHYDRATED_BLOCK_REGISTRY);\n const onInvoke = () => triggerHydrationFromBlockName(injector, elementTrigger.blockName);\n const cleanupFn = onIdle(onInvoke, injector);\n registry.addCleanupFn(elementTrigger.blockName, cleanupFn);\n }\n}\nfunction setViewportTriggers(injector, elementTriggers) {\n if (elementTriggers.length > 0) {\n const registry = injector.get(DEHYDRATED_BLOCK_REGISTRY);\n for (let elementTrigger of elementTriggers) {\n const cleanupFn = onViewportWrapper(elementTrigger.el, () => triggerHydrationFromBlockName(injector, elementTrigger.blockName), injector, elementTrigger.intersectionObserverOptions);\n registry.addCleanupFn(elementTrigger.blockName, cleanupFn);\n }\n }\n}\nfunction setTimerTriggers(injector, elementTriggers) {\n for (const elementTrigger of elementTriggers) {\n const registry = injector.get(DEHYDRATED_BLOCK_REGISTRY);\n const onInvoke = () => triggerHydrationFromBlockName(injector, elementTrigger.blockName);\n const timerFn = onTimer(elementTrigger.delay);\n const cleanupFn = timerFn(onInvoke, injector);\n registry.addCleanupFn(elementTrigger.blockName, cleanupFn);\n }\n}\nfunction setImmediateTriggers(injector, elementTriggers) {\n for (const elementTrigger of elementTriggers) {\n triggerHydrationFromBlockName(injector, elementTrigger.blockName);\n }\n}\nlet _hmrWarningProduced = false;\nfunction logHmrWarning(injector) {\n if (!_hmrWarningProduced) {\n _hmrWarningProduced = true;\n const console = injector.get(Console);\n console.log(formatRuntimeError(-751, 'Angular has detected that this application contains `@defer` blocks ' + 'and the hot module replacement (HMR) mode is enabled. All `@defer` ' + 'block dependencies will be loaded eagerly.'));\n }\n}\nfunction ɵɵdefer(index, primaryTmplIndex, dependencyResolverFn, loadingTmplIndex, placeholderTmplIndex, errorTmplIndex, loadingConfigIndex, placeholderConfigIndex, enableTimerScheduling, flags) {\n const lView = getLView();\n const tView = getTView();\n const adjustedIndex = index + HEADER_OFFSET;\n const tNode = declareNoDirectiveHostTemplate(lView, tView, index, null, 0, 0);\n const injector = lView[INJECTOR];\n const incrementalHydrationEnabled = isIncrementalHydrationEnabled(injector);\n if (tView.firstCreatePass) {\n performanceMarkFeature('NgDefer');\n if (ngDevMode) {\n if (typeof ngHmrMode !== 'undefined' && ngHmrMode) {\n logHmrWarning(injector);\n }\n if (hasHydrateTriggers(flags) && !incrementalHydrationEnabled) {\n warnIncrementalHydrationNotConfigured();\n }\n }\n const tDetails = {\n primaryTmplIndex,\n loadingTmplIndex: loadingTmplIndex ?? null,\n placeholderTmplIndex: placeholderTmplIndex ?? null,\n errorTmplIndex: errorTmplIndex ?? null,\n placeholderBlockConfig: null,\n loadingBlockConfig: null,\n dependencyResolverFn: dependencyResolverFn ?? null,\n loadingState: DeferDependenciesLoadingState.NOT_STARTED,\n loadingPromise: null,\n providers: null,\n hydrateTriggers: null,\n debug: null,\n flags: flags ?? 0\n };\n enableTimerScheduling?.(tView, tDetails, placeholderConfigIndex, loadingConfigIndex);\n setTDeferBlockDetails(tView, adjustedIndex, tDetails);\n }\n const lContainer = lView[adjustedIndex];\n populateDehydratedViewsInLContainer(lContainer, tNode, lView);\n let ssrBlockState = null;\n let ssrUniqueId = null;\n if (lContainer[DEHYDRATED_VIEWS]?.length > 0) {\n const info = lContainer[DEHYDRATED_VIEWS][0].data;\n ssrUniqueId = info[DEFER_BLOCK_ID] ?? null;\n ssrBlockState = info[DEFER_BLOCK_STATE$1];\n }\n const lDetails = [null, DeferBlockInternalState.Initial, null, null, null, null, ssrUniqueId, ssrBlockState, null, null];\n setLDeferBlockDetails(lView, adjustedIndex, lDetails);\n let registry = null;\n if (ssrUniqueId !== null && incrementalHydrationEnabled) {\n registry = injector.get(DEHYDRATED_BLOCK_REGISTRY);\n registry.add(ssrUniqueId, {\n lView,\n tNode,\n lContainer\n });\n }\n const onLViewDestroy = () => {\n invokeAllTriggerCleanupFns(lDetails);\n if (ssrUniqueId !== null) {\n registry?.cleanup([ssrUniqueId]);\n }\n };\n storeTriggerCleanupFn(0, lDetails, () => removeLViewOnDestroy(lView, onLViewDestroy));\n storeLViewOnDestroy(lView, onLViewDestroy);\n}\nfunction ɵɵdeferWhen(rawValue) {\n const lView = getLView();\n const tNode = getSelectedTNode();\n if (ngDevMode) {\n trackTriggerForDebugging(lView[TVIEW], tNode, 'when ');\n }\n if (!shouldAttachTrigger(0, lView, tNode)) return;\n const bindingIndex = nextBindingIndex();\n if (bindingUpdated(lView, bindingIndex, rawValue)) {\n const prevConsumer = setActiveConsumer(null);\n try {\n const value = Boolean(rawValue);\n const lDetails = getLDeferBlockDetails(lView, tNode);\n const renderedState = lDetails[DEFER_BLOCK_STATE];\n if (value === false && renderedState === DeferBlockInternalState.Initial) {\n renderPlaceholder(lView, tNode);\n } else if (value === true && (renderedState === DeferBlockInternalState.Initial || renderedState === DeferBlockState.Placeholder)) {\n triggerDeferBlock(0, lView, tNode);\n }\n } finally {\n setActiveConsumer(prevConsumer);\n }\n }\n}\nfunction ɵɵdeferPrefetchWhen(rawValue) {\n const lView = getLView();\n const tNode = getSelectedTNode();\n if (ngDevMode) {\n trackTriggerForDebugging(lView[TVIEW], tNode, 'prefetch when ');\n }\n if (!shouldAttachTrigger(1, lView, tNode)) return;\n const bindingIndex = nextBindingIndex();\n if (bindingUpdated(lView, bindingIndex, rawValue)) {\n const prevConsumer = setActiveConsumer(null);\n try {\n const value = Boolean(rawValue);\n const tView = lView[TVIEW];\n const tDetails = getTDeferBlockDetails(tView, tNode);\n if (value === true && tDetails.loadingState === DeferDependenciesLoadingState.NOT_STARTED) {\n triggerPrefetching(tDetails, lView, tNode);\n }\n } finally {\n setActiveConsumer(prevConsumer);\n }\n }\n}\nfunction ɵɵdeferHydrateWhen(rawValue) {\n const lView = getLView();\n const tNode = getSelectedTNode();\n if (ngDevMode) {\n trackTriggerForDebugging(lView[TVIEW], tNode, 'hydrate when ');\n }\n if (!shouldAttachTrigger(2, lView, tNode)) return;\n const bindingIndex = nextBindingIndex();\n const tView = getTView();\n const hydrateTriggers = getHydrateTriggers(tView, tNode);\n hydrateTriggers.set(6, null);\n if (bindingUpdated(lView, bindingIndex, rawValue)) {\n if (typeof ngServerMode !== 'undefined' && ngServerMode) {\n triggerDeferBlock(2, lView, tNode);\n } else {\n const injector = lView[INJECTOR];\n const prevConsumer = setActiveConsumer(null);\n try {\n const value = Boolean(rawValue);\n if (value === true) {\n const lDetails = getLDeferBlockDetails(lView, tNode);\n const ssrUniqueId = lDetails[SSR_UNIQUE_ID];\n ngDevMode && assertSsrIdDefined(ssrUniqueId);\n triggerHydrationFromBlockName(injector, ssrUniqueId);\n }\n } finally {\n setActiveConsumer(prevConsumer);\n }\n }\n }\n}\nfunction ɵɵdeferHydrateNever() {\n const lView = getLView();\n const tNode = getCurrentTNode();\n if (ngDevMode) {\n trackTriggerForDebugging(lView[TVIEW], tNode, 'hydrate never');\n }\n if (!shouldAttachTrigger(2, lView, tNode)) return;\n const hydrateTriggers = getHydrateTriggers(getTView(), tNode);\n hydrateTriggers.set(7, null);\n if (typeof ngServerMode !== 'undefined' && ngServerMode) {\n triggerDeferBlock(2, lView, tNode);\n }\n}\nfunction ɵɵdeferOnIdle() {\n const lView = getLView();\n const tNode = getCurrentTNode();\n if (ngDevMode) {\n trackTriggerForDebugging(lView[TVIEW], tNode, 'on idle');\n }\n if (!shouldAttachTrigger(0, lView, tNode)) return;\n scheduleDelayedTrigger(onIdle);\n}\nfunction ɵɵdeferPrefetchOnIdle() {\n const lView = getLView();\n const tNode = getCurrentTNode();\n if (ngDevMode) {\n trackTriggerForDebugging(lView[TVIEW], tNode, 'prefetch on idle');\n }\n if (!shouldAttachTrigger(1, lView, tNode)) return;\n scheduleDelayedPrefetching(onIdle);\n}\nfunction ɵɵdeferHydrateOnIdle() {\n const lView = getLView();\n const tNode = getCurrentTNode();\n if (ngDevMode) {\n trackTriggerForDebugging(lView[TVIEW], tNode, 'hydrate on idle');\n }\n if (!shouldAttachTrigger(2, lView, tNode)) return;\n const hydrateTriggers = getHydrateTriggers(getTView(), tNode);\n hydrateTriggers.set(0, null);\n if (typeof ngServerMode !== 'undefined' && ngServerMode) {\n triggerDeferBlock(2, lView, tNode);\n } else {\n scheduleDelayedHydrating(onIdle, lView, tNode);\n }\n}\nfunction ɵɵdeferOnImmediate() {\n const lView = getLView();\n const tNode = getCurrentTNode();\n if (ngDevMode) {\n trackTriggerForDebugging(lView[TVIEW], tNode, 'on immediate');\n }\n if (!shouldAttachTrigger(0, lView, tNode)) return;\n const tDetails = getTDeferBlockDetails(lView[TVIEW], tNode);\n if (tDetails.loadingTmplIndex === null) {\n renderPlaceholder(lView, tNode);\n }\n triggerDeferBlock(0, lView, tNode);\n}\nfunction ɵɵdeferPrefetchOnImmediate() {\n const lView = getLView();\n const tNode = getCurrentTNode();\n if (ngDevMode) {\n trackTriggerForDebugging(lView[TVIEW], tNode, 'prefetch on immediate');\n }\n if (!shouldAttachTrigger(1, lView, tNode)) return;\n const tView = lView[TVIEW];\n const tDetails = getTDeferBlockDetails(tView, tNode);\n if (tDetails.loadingState === DeferDependenciesLoadingState.NOT_STARTED) {\n triggerResourceLoading(tDetails, lView, tNode);\n }\n}\nfunction ɵɵdeferHydrateOnImmediate() {\n const lView = getLView();\n const tNode = getCurrentTNode();\n if (ngDevMode) {\n trackTriggerForDebugging(lView[TVIEW], tNode, 'hydrate on immediate');\n }\n if (!shouldAttachTrigger(2, lView, tNode)) return;\n const hydrateTriggers = getHydrateTriggers(getTView(), tNode);\n hydrateTriggers.set(1, null);\n if (typeof ngServerMode !== 'undefined' && ngServerMode) {\n triggerDeferBlock(2, lView, tNode);\n } else {\n const injector = lView[INJECTOR];\n const lDetails = getLDeferBlockDetails(lView, tNode);\n const ssrUniqueId = lDetails[SSR_UNIQUE_ID];\n ngDevMode && assertSsrIdDefined(ssrUniqueId);\n triggerHydrationFromBlockName(injector, ssrUniqueId);\n }\n}\nfunction ɵɵdeferOnTimer(delay) {\n const lView = getLView();\n const tNode = getCurrentTNode();\n if (ngDevMode) {\n trackTriggerForDebugging(lView[TVIEW], tNode, `on timer(${delay}ms)`);\n }\n if (!shouldAttachTrigger(0, lView, tNode)) return;\n scheduleDelayedTrigger(onTimer(delay));\n}\nfunction ɵɵdeferPrefetchOnTimer(delay) {\n const lView = getLView();\n const tNode = getCurrentTNode();\n if (ngDevMode) {\n trackTriggerForDebugging(lView[TVIEW], tNode, `prefetch on timer(${delay}ms)`);\n }\n if (!shouldAttachTrigger(1, lView, tNode)) return;\n scheduleDelayedPrefetching(onTimer(delay));\n}\nfunction ɵɵdeferHydrateOnTimer(delay) {\n const lView = getLView();\n const tNode = getCurrentTNode();\n if (ngDevMode) {\n trackTriggerForDebugging(lView[TVIEW], tNode, `hydrate on timer(${delay}ms)`);\n }\n if (!shouldAttachTrigger(2, lView, tNode)) return;\n const hydrateTriggers = getHydrateTriggers(getTView(), tNode);\n hydrateTriggers.set(5, {\n type: 5,\n delay\n });\n if (typeof ngServerMode !== 'undefined' && ngServerMode) {\n triggerDeferBlock(2, lView, tNode);\n } else {\n scheduleDelayedHydrating(onTimer(delay), lView, tNode);\n }\n}\nfunction ɵɵdeferOnHover(triggerIndex, walkUpTimes) {\n const lView = getLView();\n const tNode = getCurrentTNode();\n if (ngDevMode) {\n trackTriggerForDebugging(lView[TVIEW], tNode, `on hover${walkUpTimes === -1 ? '' : '()'}`);\n }\n if (!shouldAttachTrigger(0, lView, tNode)) return;\n renderPlaceholder(lView, tNode);\n if (!(typeof ngServerMode !== 'undefined' && ngServerMode)) {\n registerDomTrigger(lView, tNode, triggerIndex, walkUpTimes, onHover, () => triggerDeferBlock(0, lView, tNode), 0);\n }\n}\nfunction ɵɵdeferPrefetchOnHover(triggerIndex, walkUpTimes) {\n const lView = getLView();\n const tNode = getCurrentTNode();\n if (ngDevMode) {\n trackTriggerForDebugging(lView[TVIEW], tNode, `prefetch on hover${walkUpTimes === -1 ? '' : '()'}`);\n }\n if (!shouldAttachTrigger(1, lView, tNode)) return;\n const tView = lView[TVIEW];\n const tDetails = getTDeferBlockDetails(tView, tNode);\n if (tDetails.loadingState === DeferDependenciesLoadingState.NOT_STARTED) {\n registerDomTrigger(lView, tNode, triggerIndex, walkUpTimes, onHover, () => triggerPrefetching(tDetails, lView, tNode), 1);\n }\n}\nfunction ɵɵdeferHydrateOnHover() {\n const lView = getLView();\n const tNode = getCurrentTNode();\n if (ngDevMode) {\n trackTriggerForDebugging(lView[TVIEW], tNode, 'hydrate on hover');\n }\n if (!shouldAttachTrigger(2, lView, tNode)) return;\n const hydrateTriggers = getHydrateTriggers(getTView(), tNode);\n hydrateTriggers.set(4, null);\n if (typeof ngServerMode !== 'undefined' && ngServerMode) {\n triggerDeferBlock(2, lView, tNode);\n }\n}\nfunction ɵɵdeferOnInteraction(triggerIndex, walkUpTimes) {\n const lView = getLView();\n const tNode = getCurrentTNode();\n if (ngDevMode) {\n trackTriggerForDebugging(lView[TVIEW], tNode, `on interaction${walkUpTimes === -1 ? '' : '()'}`);\n }\n if (!shouldAttachTrigger(0, lView, tNode)) return;\n renderPlaceholder(lView, tNode);\n if (!(typeof ngServerMode !== 'undefined' && ngServerMode)) {\n registerDomTrigger(lView, tNode, triggerIndex, walkUpTimes, onInteraction, () => triggerDeferBlock(0, lView, tNode), 0);\n }\n}\nfunction ɵɵdeferPrefetchOnInteraction(triggerIndex, walkUpTimes) {\n const lView = getLView();\n const tNode = getCurrentTNode();\n if (ngDevMode) {\n trackTriggerForDebugging(lView[TVIEW], tNode, `prefetch on interaction${walkUpTimes === -1 ? '' : '()'}`);\n }\n if (!shouldAttachTrigger(1, lView, tNode)) return;\n const tView = lView[TVIEW];\n const tDetails = getTDeferBlockDetails(tView, tNode);\n if (tDetails.loadingState === DeferDependenciesLoadingState.NOT_STARTED) {\n registerDomTrigger(lView, tNode, triggerIndex, walkUpTimes, onInteraction, () => triggerPrefetching(tDetails, lView, tNode), 1);\n }\n}\nfunction ɵɵdeferHydrateOnInteraction() {\n const lView = getLView();\n const tNode = getCurrentTNode();\n if (ngDevMode) {\n trackTriggerForDebugging(lView[TVIEW], tNode, 'hydrate on interaction');\n }\n if (!shouldAttachTrigger(2, lView, tNode)) return;\n const hydrateTriggers = getHydrateTriggers(getTView(), tNode);\n hydrateTriggers.set(3, null);\n if (typeof ngServerMode !== 'undefined' && ngServerMode) {\n triggerDeferBlock(2, lView, tNode);\n }\n}\nfunction ɵɵdeferOnViewport(triggerIndex, walkUpTimes, options) {\n const lView = getLView();\n const tNode = getCurrentTNode();\n if (ngDevMode) {\n const args = [];\n if (walkUpTimes !== undefined && walkUpTimes !== -1) {\n args.push('');\n }\n if (options) {\n args.push(JSON.stringify(options));\n }\n trackTriggerForDebugging(lView[TVIEW], tNode, `on viewport${args.length === 0 ? '' : `(${args.join(', ')})`}`);\n }\n if (!shouldAttachTrigger(0, lView, tNode)) return;\n renderPlaceholder(lView, tNode);\n if (!(typeof ngServerMode !== 'undefined' && ngServerMode)) {\n registerDomTrigger(lView, tNode, triggerIndex, walkUpTimes, onViewportWrapper, () => triggerDeferBlock(0, lView, tNode), 0, options);\n }\n}\nfunction ɵɵdeferPrefetchOnViewport(triggerIndex, walkUpTimes, options) {\n const lView = getLView();\n const tNode = getCurrentTNode();\n if (ngDevMode) {\n const args = [];\n if (walkUpTimes !== undefined && walkUpTimes !== -1) {\n args.push('');\n }\n if (options) {\n args.push(JSON.stringify(options));\n }\n trackTriggerForDebugging(lView[TVIEW], tNode, `prefetch on viewport${args.length === 0 ? '' : `(${args.join(', ')})`}`);\n }\n if (!shouldAttachTrigger(1, lView, tNode)) return;\n const tView = lView[TVIEW];\n const tDetails = getTDeferBlockDetails(tView, tNode);\n if (tDetails.loadingState === DeferDependenciesLoadingState.NOT_STARTED) {\n registerDomTrigger(lView, tNode, triggerIndex, walkUpTimes, onViewportWrapper, () => triggerPrefetching(tDetails, lView, tNode), 1, options);\n }\n}\nfunction ɵɵdeferHydrateOnViewport(options) {\n const lView = getLView();\n const tNode = getCurrentTNode();\n if (ngDevMode) {\n trackTriggerForDebugging(lView[TVIEW], tNode, `hydrate on viewport${options ? `(${JSON.stringify(options)})` : ''}`);\n }\n if (!shouldAttachTrigger(2, lView, tNode)) return;\n const hydrateTriggers = getHydrateTriggers(getTView(), tNode);\n hydrateTriggers.set(2, options ? {\n type: 2,\n intersectionObserverOptions: options\n } : null);\n if (typeof ngServerMode !== 'undefined' && ngServerMode) {\n triggerDeferBlock(2, lView, tNode);\n }\n}\nfunction ɵɵariaProperty(name, value) {\n const lView = getLView();\n const bindingIndex = nextBindingIndex();\n if (bindingUpdated(lView, bindingIndex, value)) {\n const tView = getTView();\n const tNode = getSelectedTNode();\n const hasSetInput = setAllInputsForProperty(tNode, tView, lView, name, value);\n if (hasSetInput) {\n isComponentHost(tNode) && markDirtyIfOnPush(lView, tNode.index);\n ngDevMode && setNgReflectProperties(lView, tView, tNode, name, value);\n } else {\n ngDevMode && assertTNodeType(tNode, 2);\n const element = getNativeByTNode(tNode, lView);\n setElementAttribute(lView[RENDERER], element, null, tNode.value, name, value, null);\n }\n ngDevMode && storePropertyBindingMetadata(tView.data, tNode, name, bindingIndex);\n }\n return ɵɵariaProperty;\n}\nfunction ɵɵattribute(name, value, sanitizer, namespace) {\n const lView = getLView();\n const bindingIndex = nextBindingIndex();\n if (bindingUpdated(lView, bindingIndex, value)) {\n const tView = getTView();\n const tNode = getSelectedTNode();\n elementAttributeInternal(tNode, lView, name, value, sanitizer, namespace);\n ngDevMode && storePropertyBindingMetadata(tView.data, tNode, 'attr.' + name, bindingIndex);\n }\n return ɵɵattribute;\n}\nfunction ɵɵanimateEnter(value) {\n performanceMarkFeature('NgAnimateEnter');\n if (typeof ngServerMode !== 'undefined' && ngServerMode || !areAnimationSupported) {\n return ɵɵanimateEnter;\n }\n ngDevMode && assertAnimationTypes(value, 'animate.enter');\n const lView = getLView();\n if (areAnimationsDisabled(lView)) {\n return ɵɵanimateEnter;\n }\n const tNode = getCurrentTNode();\n const ngZone = lView[INJECTOR].get(NgZone);\n addAnimationToLView(getLViewEnterAnimations(lView), tNode, () => runEnterAnimation(lView, tNode, value, ngZone));\n initializeAnimationQueueScheduler(lView[INJECTOR]);\n queueEnterAnimations(lView[INJECTOR], getLViewEnterAnimations(lView));\n return ɵɵanimateEnter;\n}\nfunction runEnterAnimation(lView, tNode, value, ngZone) {\n const nativeElement = getNativeByTNode(tNode, lView);\n ngDevMode && assertElementNodes(nativeElement, 'animate.enter');\n const renderer = lView[RENDERER];\n const activeClasses = getClassListFromValue(value);\n const cleanupFns = [];\n let hasCompleted = false;\n const handleEnterAnimationStart = event => {\n if (getEventTarget(event) !== nativeElement) return;\n const eventName = event instanceof AnimationEvent ? 'animationend' : 'transitionend';\n ngZone.runOutsideAngular(() => {\n renderer.listen(nativeElement, eventName, handleEnterAnimationEnd);\n });\n };\n const handleEnterAnimationEnd = event => {\n if (getEventTarget(event) !== nativeElement) return;\n if (isLongestAnimation(event, nativeElement)) {\n hasCompleted = true;\n }\n enterAnimationEnd(event, nativeElement, renderer);\n };\n if (activeClasses && activeClasses.length > 0) {\n ngZone.runOutsideAngular(() => {\n cleanupFns.push(renderer.listen(nativeElement, 'animationstart', handleEnterAnimationStart));\n cleanupFns.push(renderer.listen(nativeElement, 'transitionstart', handleEnterAnimationStart));\n });\n trackEnterClasses(nativeElement, activeClasses, cleanupFns);\n for (const klass of activeClasses) {\n renderer.addClass(nativeElement, klass);\n }\n ngZone.runOutsideAngular(() => {\n requestAnimationFrame(() => {\n if (hasCompleted) return;\n determineLongestAnimation(nativeElement, longestAnimations, areAnimationSupported);\n if (!longestAnimations.has(nativeElement)) {\n for (const klass of activeClasses) {\n renderer.removeClass(nativeElement, klass);\n }\n cleanupEnterClassData(nativeElement);\n }\n });\n });\n }\n}\nfunction enterAnimationEnd(event, nativeElement, renderer) {\n const elementData = enterClassMap.get(nativeElement);\n if (getEventTarget(event) !== nativeElement || !elementData) return;\n if (isLongestAnimation(event, nativeElement)) {\n event.stopPropagation();\n for (const klass of elementData.classList) {\n renderer.removeClass(nativeElement, klass);\n }\n cleanupEnterClassData(nativeElement);\n }\n}\nfunction ɵɵanimateEnterListener(value) {\n performanceMarkFeature('NgAnimateEnter');\n if (typeof ngServerMode !== 'undefined' && ngServerMode || !areAnimationSupported) {\n return ɵɵanimateEnterListener;\n }\n ngDevMode && assertAnimationTypes(value, 'animate.enter');\n const lView = getLView();\n if (areAnimationsDisabled(lView)) {\n return ɵɵanimateEnterListener;\n }\n const tNode = getCurrentTNode();\n addAnimationToLView(getLViewEnterAnimations(lView), tNode, () => runEnterAnimationFunction(lView, tNode, value));\n initializeAnimationQueueScheduler(lView[INJECTOR]);\n queueEnterAnimations(lView[INJECTOR], getLViewEnterAnimations(lView));\n return ɵɵanimateEnterListener;\n}\nfunction runEnterAnimationFunction(lView, tNode, value) {\n const nativeElement = getNativeByTNode(tNode, lView);\n ngDevMode && assertElementNodes(nativeElement, 'animate.enter');\n value.call(lView[CONTEXT], {\n target: nativeElement,\n animationComplete: noOpAnimationComplete\n });\n}\nfunction ɵɵanimateLeave(value) {\n performanceMarkFeature('NgAnimateLeave');\n if (typeof ngServerMode !== 'undefined' && ngServerMode || !areAnimationSupported) {\n return ɵɵanimateLeave;\n }\n ngDevMode && assertAnimationTypes(value, 'animate.leave');\n const lView = getLView();\n const animationsDisabled = areAnimationsDisabled(lView);\n if (animationsDisabled) {\n return ɵɵanimateLeave;\n }\n const tNode = getCurrentTNode();\n const ngZone = lView[INJECTOR].get(NgZone);\n addAnimationToLView(getLViewLeaveAnimations(lView), tNode, () => runLeaveAnimations(lView, tNode, value, ngZone));\n initializeAnimationQueueScheduler(lView[INJECTOR]);\n return ɵɵanimateLeave;\n}\nfunction runLeaveAnimations(lView, tNode, value, ngZone) {\n const {\n promise,\n resolve\n } = promiseWithResolvers();\n const nativeElement = getNativeByTNode(tNode, lView);\n ngDevMode && assertElementNodes(nativeElement, 'animate.leave');\n const renderer = lView[RENDERER];\n allLeavingAnimations.add(lView[ID]);\n (getLViewLeaveAnimations(lView).get(tNode.index).resolvers ??= []).push(resolve);\n const activeClasses = getClassListFromValue(value);\n if (activeClasses && activeClasses.length > 0) {\n animateLeaveClassRunner(nativeElement, tNode, lView, activeClasses, renderer, ngZone);\n } else {\n resolve();\n }\n return {\n promise,\n resolve\n };\n}\nfunction animateLeaveClassRunner(el, tNode, lView, classList, renderer, ngZone) {\n cancelAnimationsIfRunning(el, renderer);\n const cleanupFns = [];\n const componentResolvers = getLViewLeaveAnimations(lView).get(tNode.index)?.resolvers;\n let fallbackTimeoutId;\n let hasCompleted = false;\n const handleOutAnimationEnd = event => {\n const target = getEventTarget(event);\n if (target !== el && event.type !== 'animation-fallback') return;\n if (event.type === 'animation-fallback' || isLongestAnimation(event, el)) {\n hasCompleted = true;\n if (fallbackTimeoutId) clearTimeout(fallbackTimeoutId);\n if (event.type !== 'animation-fallback') event.stopPropagation();\n longestAnimations.delete(el);\n clearLeavingNodes(tNode, el);\n if (Array.isArray(tNode.projection)) {\n for (const item of classList) {\n renderer.removeClass(el, item);\n }\n }\n cleanupAfterLeaveAnimations(componentResolvers, cleanupFns);\n clearLViewNodeAnimationResolvers(lView, tNode);\n }\n };\n ngZone.runOutsideAngular(() => {\n cleanupFns.push(renderer.listen(el, 'animationend', handleOutAnimationEnd));\n cleanupFns.push(renderer.listen(el, 'transitionend', handleOutAnimationEnd));\n });\n trackLeavingNodes(tNode, el);\n for (const item of classList) {\n renderer.addClass(el, item);\n }\n ngZone.runOutsideAngular(() => {\n requestAnimationFrame(() => {\n if (hasCompleted) return;\n determineLongestAnimation(el, longestAnimations, areAnimationSupported);\n const longest = longestAnimations.get(el);\n if (!longest) {\n clearLeavingNodes(tNode, el);\n cleanupAfterLeaveAnimations(componentResolvers, cleanupFns);\n clearLViewNodeAnimationResolvers(lView, tNode);\n } else {\n fallbackTimeoutId = setTimeout(() => {\n handleOutAnimationEnd(new CustomEvent('animation-fallback'));\n }, longest.duration + 50);\n cleanupFns.push(() => clearTimeout(fallbackTimeoutId));\n }\n });\n });\n}\nfunction ɵɵanimateLeaveListener(value) {\n performanceMarkFeature('NgAnimateLeave');\n if (typeof ngServerMode !== 'undefined' && ngServerMode || !areAnimationSupported) {\n return ɵɵanimateLeaveListener;\n }\n ngDevMode && assertAnimationTypes(value, 'animate.leave');\n const lView = getLView();\n const tNode = getCurrentTNode();\n allLeavingAnimations.add(lView[ID]);\n const ngZone = lView[INJECTOR].get(NgZone);\n const maxAnimationTimeout = lView[INJECTOR].get(MAX_ANIMATION_TIMEOUT);\n addAnimationToLView(getLViewLeaveAnimations(lView), tNode, () => runLeaveAnimationFunction(lView, tNode, value, ngZone, maxAnimationTimeout));\n initializeAnimationQueueScheduler(lView[INJECTOR]);\n return ɵɵanimateLeaveListener;\n}\nfunction runLeaveAnimationFunction(lView, tNode, value, ngZone, maxAnimationTimeout) {\n const {\n promise,\n resolve\n } = promiseWithResolvers();\n const nativeElement = getNativeByTNode(tNode, lView);\n ngDevMode && assertElementNodes(nativeElement, 'animate.leave');\n const cleanupFns = [];\n const renderer = lView[RENDERER];\n const animationsDisabled = areAnimationsDisabled(lView);\n (getLViewLeaveAnimations(lView).get(tNode.index).resolvers ??= []).push(resolve);\n const resolvers = getLViewLeaveAnimations(lView).get(tNode.index)?.resolvers;\n if (animationsDisabled) {\n leaveAnimationFunctionCleanup(lView, tNode, nativeElement, resolvers, cleanupFns);\n } else {\n const timeoutId = setTimeout(() => leaveAnimationFunctionCleanup(lView, tNode, nativeElement, resolvers, cleanupFns), maxAnimationTimeout);\n const event = {\n target: nativeElement,\n animationComplete: () => {\n leaveAnimationFunctionCleanup(lView, tNode, nativeElement, resolvers, cleanupFns);\n clearTimeout(timeoutId);\n }\n };\n trackLeavingNodes(tNode, nativeElement);\n ngZone.runOutsideAngular(() => {\n cleanupFns.push(renderer.listen(nativeElement, 'animationend', () => {\n leaveAnimationFunctionCleanup(lView, tNode, nativeElement, resolvers, cleanupFns);\n clearTimeout(timeoutId);\n }, {\n once: true\n }));\n });\n value.call(lView[CONTEXT], event);\n }\n return {\n promise,\n resolve\n };\n}\nfunction ɵɵcomponentInstance() {\n const instance = getLView()[DECLARATION_COMPONENT_VIEW][CONTEXT];\n ngDevMode && assertDefined(instance, 'Expected component instance to be defined');\n return instance;\n}\nclass LiveCollection {\n destroy(item) {}\n updateValue(index, value) {}\n swap(index1, index2) {\n const startIdx = Math.min(index1, index2);\n const endIdx = Math.max(index1, index2);\n const endItem = this.detach(endIdx);\n if (endIdx - startIdx > 1) {\n const startItem = this.detach(startIdx);\n this.attach(startIdx, endItem);\n this.attach(endIdx, startItem);\n } else {\n this.attach(startIdx, endItem);\n }\n }\n move(prevIndex, newIdx) {\n this.attach(newIdx, this.detach(prevIndex));\n }\n}\nfunction valuesMatching(liveIdx, liveValue, newIdx, newValue, trackBy) {\n if (liveIdx === newIdx && Object.is(liveValue, newValue)) {\n return 1;\n } else if (Object.is(trackBy(liveIdx, liveValue), trackBy(newIdx, newValue))) {\n return -1;\n }\n return 0;\n}\nfunction recordDuplicateKeys(keyToIdx, key, idx) {\n const idxSoFar = keyToIdx.get(key);\n if (idxSoFar !== undefined) {\n idxSoFar.add(idx);\n } else {\n keyToIdx.set(key, new Set([idx]));\n }\n}\nfunction reconcile(liveCollection, newCollection, trackByFn, reactiveConsumer) {\n let detachedItems = undefined;\n let liveKeysInTheFuture = undefined;\n let liveStartIdx = 0;\n let liveEndIdx = liveCollection.length - 1;\n const duplicateKeys = ngDevMode ? new Map() : undefined;\n if (Array.isArray(newCollection)) {\n setActiveConsumer$1(reactiveConsumer);\n let newEndIdx = newCollection.length - 1;\n setActiveConsumer$1(null);\n while (liveStartIdx <= liveEndIdx && liveStartIdx <= newEndIdx) {\n const liveStartValue = liveCollection.at(liveStartIdx);\n const newStartValue = newCollection[liveStartIdx];\n if (ngDevMode) {\n recordDuplicateKeys(duplicateKeys, trackByFn(liveStartIdx, newStartValue), liveStartIdx);\n }\n const isStartMatching = valuesMatching(liveStartIdx, liveStartValue, liveStartIdx, newStartValue, trackByFn);\n if (isStartMatching !== 0) {\n if (isStartMatching < 0) {\n liveCollection.updateValue(liveStartIdx, newStartValue);\n }\n liveStartIdx++;\n continue;\n }\n const liveEndValue = liveCollection.at(liveEndIdx);\n const newEndValue = newCollection[newEndIdx];\n if (ngDevMode) {\n recordDuplicateKeys(duplicateKeys, trackByFn(newEndIdx, newEndValue), newEndIdx);\n }\n const isEndMatching = valuesMatching(liveEndIdx, liveEndValue, newEndIdx, newEndValue, trackByFn);\n if (isEndMatching !== 0) {\n if (isEndMatching < 0) {\n liveCollection.updateValue(liveEndIdx, newEndValue);\n }\n liveEndIdx--;\n newEndIdx--;\n continue;\n }\n const liveStartKey = trackByFn(liveStartIdx, liveStartValue);\n const liveEndKey = trackByFn(liveEndIdx, liveEndValue);\n const newStartKey = trackByFn(liveStartIdx, newStartValue);\n if (Object.is(newStartKey, liveEndKey)) {\n const newEndKey = trackByFn(newEndIdx, newEndValue);\n if (Object.is(newEndKey, liveStartKey)) {\n liveCollection.swap(liveStartIdx, liveEndIdx);\n liveCollection.updateValue(liveEndIdx, newEndValue);\n newEndIdx--;\n liveEndIdx--;\n } else {\n liveCollection.move(liveEndIdx, liveStartIdx);\n }\n liveCollection.updateValue(liveStartIdx, newStartValue);\n liveStartIdx++;\n continue;\n }\n detachedItems ??= new UniqueValueMultiKeyMap();\n liveKeysInTheFuture ??= initLiveItemsInTheFuture(liveCollection, liveStartIdx, liveEndIdx, trackByFn);\n if (attachPreviouslyDetached(liveCollection, detachedItems, liveStartIdx, newStartKey)) {\n liveCollection.updateValue(liveStartIdx, newStartValue);\n liveStartIdx++;\n liveEndIdx++;\n } else if (!liveKeysInTheFuture.has(newStartKey)) {\n const newItem = liveCollection.create(liveStartIdx, newCollection[liveStartIdx]);\n liveCollection.attach(liveStartIdx, newItem);\n liveStartIdx++;\n liveEndIdx++;\n } else {\n detachedItems.set(liveStartKey, liveCollection.detach(liveStartIdx));\n liveEndIdx--;\n }\n }\n while (liveStartIdx <= newEndIdx) {\n createOrAttach(liveCollection, detachedItems, trackByFn, liveStartIdx, newCollection[liveStartIdx]);\n liveStartIdx++;\n }\n } else if (newCollection != null) {\n setActiveConsumer$1(reactiveConsumer);\n const newCollectionIterator = newCollection[Symbol.iterator]();\n setActiveConsumer$1(null);\n let newIterationResult = newCollectionIterator.next();\n while (!newIterationResult.done && liveStartIdx <= liveEndIdx) {\n const liveValue = liveCollection.at(liveStartIdx);\n const newValue = newIterationResult.value;\n if (ngDevMode) {\n recordDuplicateKeys(duplicateKeys, trackByFn(liveStartIdx, newValue), liveStartIdx);\n }\n const isStartMatching = valuesMatching(liveStartIdx, liveValue, liveStartIdx, newValue, trackByFn);\n if (isStartMatching !== 0) {\n if (isStartMatching < 0) {\n liveCollection.updateValue(liveStartIdx, newValue);\n }\n liveStartIdx++;\n newIterationResult = newCollectionIterator.next();\n } else {\n detachedItems ??= new UniqueValueMultiKeyMap();\n liveKeysInTheFuture ??= initLiveItemsInTheFuture(liveCollection, liveStartIdx, liveEndIdx, trackByFn);\n const newKey = trackByFn(liveStartIdx, newValue);\n if (attachPreviouslyDetached(liveCollection, detachedItems, liveStartIdx, newKey)) {\n liveCollection.updateValue(liveStartIdx, newValue);\n liveStartIdx++;\n liveEndIdx++;\n newIterationResult = newCollectionIterator.next();\n } else if (!liveKeysInTheFuture.has(newKey)) {\n liveCollection.attach(liveStartIdx, liveCollection.create(liveStartIdx, newValue));\n liveStartIdx++;\n liveEndIdx++;\n newIterationResult = newCollectionIterator.next();\n } else {\n const liveKey = trackByFn(liveStartIdx, liveValue);\n detachedItems.set(liveKey, liveCollection.detach(liveStartIdx));\n liveEndIdx--;\n }\n }\n }\n while (!newIterationResult.done) {\n createOrAttach(liveCollection, detachedItems, trackByFn, liveCollection.length, newIterationResult.value);\n newIterationResult = newCollectionIterator.next();\n }\n }\n while (liveStartIdx <= liveEndIdx) {\n liveCollection.destroy(liveCollection.detach(liveEndIdx--));\n }\n detachedItems?.forEach(item => {\n liveCollection.destroy(item);\n });\n if (ngDevMode) {\n let duplicatedKeysMsg = [];\n for (const [key, idxSet] of duplicateKeys) {\n if (idxSet.size > 1) {\n const idx = [...idxSet].sort((a, b) => a - b);\n for (let i = 1; i < idx.length; i++) {\n duplicatedKeysMsg.push(`key \"${stringifyForError(key)}\" at index \"${idx[i - 1]}\" and \"${idx[i]}\"`);\n }\n }\n }\n if (duplicatedKeysMsg.length > 0) {\n const message = formatRuntimeError(-955, 'The provided track expression resulted in duplicated keys for a given collection. ' + 'Adjust the tracking expression such that it uniquely identifies all the items in the collection. ' + 'Duplicated keys were: \\n' + duplicatedKeysMsg.join(', \\n') + '.');\n console.warn(message);\n }\n }\n}\nfunction attachPreviouslyDetached(prevCollection, detachedItems, index, key) {\n if (detachedItems !== undefined && detachedItems.has(key)) {\n prevCollection.attach(index, detachedItems.get(key));\n detachedItems.delete(key);\n return true;\n }\n return false;\n}\nfunction createOrAttach(liveCollection, detachedItems, trackByFn, index, value) {\n if (!attachPreviouslyDetached(liveCollection, detachedItems, index, trackByFn(index, value))) {\n const newItem = liveCollection.create(index, value);\n liveCollection.attach(index, newItem);\n } else {\n liveCollection.updateValue(index, value);\n }\n}\nfunction initLiveItemsInTheFuture(liveCollection, start, end, trackByFn) {\n const keys = new Set();\n for (let i = start; i <= end; i++) {\n keys.add(trackByFn(i, liveCollection.at(i)));\n }\n return keys;\n}\nclass UniqueValueMultiKeyMap {\n kvMap = /*#__PURE__*/new Map();\n _vMap = undefined;\n has(key) {\n return this.kvMap.has(key);\n }\n delete(key) {\n if (!this.has(key)) return false;\n const value = this.kvMap.get(key);\n if (this._vMap !== undefined && this._vMap.has(value)) {\n this.kvMap.set(key, this._vMap.get(value));\n this._vMap.delete(value);\n } else {\n this.kvMap.delete(key);\n }\n return true;\n }\n get(key) {\n return this.kvMap.get(key);\n }\n set(key, value) {\n if (this.kvMap.has(key)) {\n let prevValue = this.kvMap.get(key);\n if (ngDevMode && prevValue === value) {\n throw new Error(`Detected a duplicated value ${value} for the key ${key}`);\n }\n if (this._vMap === undefined) {\n this._vMap = new Map();\n }\n const vMap = this._vMap;\n while (vMap.has(prevValue)) {\n prevValue = vMap.get(prevValue);\n }\n vMap.set(prevValue, value);\n } else {\n this.kvMap.set(key, value);\n }\n }\n forEach(cb) {\n for (let [key, value] of this.kvMap) {\n cb(value, key);\n if (this._vMap !== undefined) {\n const vMap = this._vMap;\n while (vMap.has(value)) {\n value = vMap.get(value);\n cb(value, key);\n }\n }\n }\n }\n}\nfunction ɵɵconditionalCreate(index, templateFn, decls, vars, tagName, attrsIndex, localRefsIndex, localRefExtractor) {\n performanceMarkFeature('NgControlFlow');\n const lView = getLView();\n const tView = getTView();\n const attrs = getConstant(tView.consts, attrsIndex);\n declareNoDirectiveHostTemplate(lView, tView, index, templateFn, decls, vars, tagName, attrs, 256, localRefsIndex, localRefExtractor);\n return ɵɵconditionalBranchCreate;\n}\nfunction ɵɵconditionalBranchCreate(index, templateFn, decls, vars, tagName, attrsIndex, localRefsIndex, localRefExtractor) {\n performanceMarkFeature('NgControlFlow');\n const lView = getLView();\n const tView = getTView();\n const attrs = getConstant(tView.consts, attrsIndex);\n declareNoDirectiveHostTemplate(lView, tView, index, templateFn, decls, vars, tagName, attrs, 512, localRefsIndex, localRefExtractor);\n return ɵɵconditionalBranchCreate;\n}\nfunction ɵɵconditional(matchingTemplateIndex, contextValue) {\n performanceMarkFeature('NgControlFlow');\n const hostLView = getLView();\n const bindingIndex = nextBindingIndex();\n const prevMatchingTemplateIndex = hostLView[bindingIndex] !== NO_CHANGE ? hostLView[bindingIndex] : -1;\n const prevContainer = prevMatchingTemplateIndex !== -1 ? getLContainer(hostLView, HEADER_OFFSET + prevMatchingTemplateIndex) : undefined;\n const viewInContainerIdx = 0;\n if (bindingUpdated(hostLView, bindingIndex, matchingTemplateIndex)) {\n const prevConsumer = setActiveConsumer(null);\n try {\n if (prevContainer !== undefined) {\n removeLViewFromLContainer(prevContainer, viewInContainerIdx);\n }\n if (matchingTemplateIndex !== -1) {\n const nextLContainerIndex = HEADER_OFFSET + matchingTemplateIndex;\n const nextContainer = getLContainer(hostLView, nextLContainerIndex);\n const templateTNode = getExistingTNode(hostLView[TVIEW], nextLContainerIndex);\n const dehydratedView = findAndReconcileMatchingDehydratedViews(nextContainer, templateTNode, hostLView);\n const embeddedLView = createAndRenderEmbeddedLView(hostLView, templateTNode, contextValue, {\n dehydratedView\n });\n addLViewToLContainer(nextContainer, embeddedLView, viewInContainerIdx, shouldAddViewToDom(templateTNode, dehydratedView));\n }\n } finally {\n setActiveConsumer(prevConsumer);\n }\n } else if (prevContainer !== undefined) {\n const lView = getLViewFromLContainer(prevContainer, viewInContainerIdx);\n if (lView !== undefined) {\n lView[CONTEXT] = contextValue;\n }\n }\n}\nclass RepeaterContext {\n lContainer;\n $implicit;\n $index;\n constructor(lContainer, $implicit, $index) {\n this.lContainer = lContainer;\n this.$implicit = $implicit;\n this.$index = $index;\n }\n get $count() {\n return this.lContainer.length - CONTAINER_HEADER_OFFSET;\n }\n}\nfunction ɵɵrepeaterTrackByIndex(index) {\n return index;\n}\nfunction ɵɵrepeaterTrackByIdentity(_, value) {\n return value;\n}\nclass RepeaterMetadata {\n hasEmptyBlock;\n trackByFn;\n liveCollection;\n constructor(hasEmptyBlock, trackByFn, liveCollection) {\n this.hasEmptyBlock = hasEmptyBlock;\n this.trackByFn = trackByFn;\n this.liveCollection = liveCollection;\n }\n}\nfunction ɵɵrepeaterCreate(index, templateFn, decls, vars, tagName, attrsIndex, trackByFn, trackByUsesComponentInstance, emptyTemplateFn, emptyDecls, emptyVars, emptyTagName, emptyAttrsIndex) {\n performanceMarkFeature('NgControlFlow');\n ngDevMode && assertFunction(trackByFn, `A track expression must be a function, was ${typeof trackByFn} instead.`);\n const lView = getLView();\n const tView = getTView();\n const hasEmptyBlock = emptyTemplateFn !== undefined;\n const hostLView = getLView();\n const boundTrackBy = trackByUsesComponentInstance ? trackByFn.bind(hostLView[DECLARATION_COMPONENT_VIEW][CONTEXT]) : trackByFn;\n const metadata = new RepeaterMetadata(hasEmptyBlock, boundTrackBy);\n hostLView[HEADER_OFFSET + index] = metadata;\n declareNoDirectiveHostTemplate(lView, tView, index + 1, templateFn, decls, vars, tagName, getConstant(tView.consts, attrsIndex), 256);\n if (hasEmptyBlock) {\n ngDevMode && assertDefined(emptyDecls, 'Missing number of declarations for the empty repeater block.');\n ngDevMode && assertDefined(emptyVars, 'Missing number of bindings for the empty repeater block.');\n declareNoDirectiveHostTemplate(lView, tView, index + 2, emptyTemplateFn, emptyDecls, emptyVars, emptyTagName, getConstant(tView.consts, emptyAttrsIndex), 512);\n }\n}\nfunction isViewExpensiveToRecreate(lView) {\n return lView.length - HEADER_OFFSET > 2;\n}\nclass OperationsCounter {\n created = 0;\n destroyed = 0;\n reset() {\n this.created = 0;\n this.destroyed = 0;\n }\n recordCreate() {\n this.created++;\n }\n recordDestroy() {\n this.destroyed++;\n }\n wasReCreated(collectionLen) {\n return collectionLen > 0 && this.created === this.destroyed && this.created === collectionLen;\n }\n}\nclass LiveCollectionLContainerImpl extends LiveCollection {\n lContainer;\n hostLView;\n templateTNode;\n operationsCounter = ngDevMode ? /*#__PURE__*/new OperationsCounter() : undefined;\n needsIndexUpdate = false;\n constructor(lContainer, hostLView, templateTNode) {\n super();\n this.lContainer = lContainer;\n this.hostLView = hostLView;\n this.templateTNode = templateTNode;\n }\n get length() {\n return this.lContainer.length - CONTAINER_HEADER_OFFSET;\n }\n at(index) {\n return this.getLView(index)[CONTEXT].$implicit;\n }\n attach(index, lView) {\n const dehydratedView = lView[HYDRATION];\n this.needsIndexUpdate ||= index !== this.length;\n addLViewToLContainer(this.lContainer, lView, index, shouldAddViewToDom(this.templateTNode, dehydratedView));\n clearDetachAnimationList(this.lContainer, index);\n }\n detach(index) {\n this.needsIndexUpdate ||= index !== this.length - 1;\n maybeInitDetachAnimationList(this.lContainer, index);\n return detachExistingView(this.lContainer, index);\n }\n create(index, value) {\n const dehydratedView = findMatchingDehydratedView(this.lContainer, this.templateTNode.tView.ssrId);\n const embeddedLView = createAndRenderEmbeddedLView(this.hostLView, this.templateTNode, new RepeaterContext(this.lContainer, value, index), {\n dehydratedView\n });\n ngDevMode && this.operationsCounter?.recordCreate();\n return embeddedLView;\n }\n destroy(lView) {\n destroyLView(lView[TVIEW], lView);\n ngDevMode && this.operationsCounter?.recordDestroy();\n }\n updateValue(index, value) {\n this.getLView(index)[CONTEXT].$implicit = value;\n }\n reset() {\n this.needsIndexUpdate = false;\n ngDevMode && this.operationsCounter?.reset();\n }\n updateIndexes() {\n if (this.needsIndexUpdate) {\n for (let i = 0; i < this.length; i++) {\n this.getLView(i)[CONTEXT].$index = i;\n }\n }\n }\n getLView(index) {\n return getExistingLViewFromLContainer(this.lContainer, index);\n }\n}\nfunction ɵɵrepeater(collection) {\n const prevConsumer = setActiveConsumer(null);\n const metadataSlotIdx = getSelectedIndex();\n try {\n const hostLView = getLView();\n const hostTView = hostLView[TVIEW];\n const metadata = hostLView[metadataSlotIdx];\n const containerIndex = metadataSlotIdx + 1;\n const lContainer = getLContainer(hostLView, containerIndex);\n if (metadata.liveCollection === undefined) {\n const itemTemplateTNode = getExistingTNode(hostTView, containerIndex);\n metadata.liveCollection = new LiveCollectionLContainerImpl(lContainer, hostLView, itemTemplateTNode);\n } else {\n metadata.liveCollection.reset();\n }\n const liveCollection = metadata.liveCollection;\n reconcile(liveCollection, collection, metadata.trackByFn, prevConsumer);\n if (ngDevMode && metadata.trackByFn === ɵɵrepeaterTrackByIdentity && liveCollection.operationsCounter?.wasReCreated(liveCollection.length) && isViewExpensiveToRecreate(getExistingLViewFromLContainer(lContainer, 0))) {\n const message = formatRuntimeError(-956, `The configured tracking expression (track by identity) caused re-creation of the entire collection of size ${liveCollection.length}. ` + 'This is an expensive operation requiring destruction and subsequent creation of DOM nodes, directives, components etc. ' + 'Please review the \"track expression\" and make sure that it uniquely identifies items in a collection.');\n console.warn(message);\n }\n liveCollection.updateIndexes();\n if (metadata.hasEmptyBlock) {\n const bindingIndex = nextBindingIndex();\n const isCollectionEmpty = liveCollection.length === 0;\n if (bindingUpdated(hostLView, bindingIndex, isCollectionEmpty)) {\n const emptyTemplateIndex = metadataSlotIdx + 2;\n const lContainerForEmpty = getLContainer(hostLView, emptyTemplateIndex);\n if (isCollectionEmpty) {\n const emptyTemplateTNode = getExistingTNode(hostTView, emptyTemplateIndex);\n const dehydratedView = findAndReconcileMatchingDehydratedViews(lContainerForEmpty, emptyTemplateTNode, hostLView);\n const embeddedLView = createAndRenderEmbeddedLView(hostLView, emptyTemplateTNode, undefined, {\n dehydratedView\n });\n addLViewToLContainer(lContainerForEmpty, embeddedLView, 0, shouldAddViewToDom(emptyTemplateTNode, dehydratedView));\n } else {\n if (hostTView.firstUpdatePass) {\n removeDehydratedViews(lContainerForEmpty);\n }\n removeLViewFromLContainer(lContainerForEmpty, 0);\n }\n }\n }\n } finally {\n setActiveConsumer(prevConsumer);\n }\n}\nfunction getLContainer(lView, index) {\n const lContainer = lView[index];\n ngDevMode && assertLContainer(lContainer);\n return lContainer;\n}\nfunction clearDetachAnimationList(lContainer, index) {\n if (lContainer.length <= CONTAINER_HEADER_OFFSET) return;\n const indexInContainer = CONTAINER_HEADER_OFFSET + index;\n const viewToDetach = lContainer[indexInContainer];\n const animations = viewToDetach ? viewToDetach[ANIMATIONS] : undefined;\n if (viewToDetach && animations && animations.detachedLeaveAnimationFns && animations.detachedLeaveAnimationFns.length > 0) {\n const injector = viewToDetach[INJECTOR];\n removeFromAnimationQueue(injector, animations);\n allLeavingAnimations.delete(viewToDetach[ID]);\n animations.detachedLeaveAnimationFns = undefined;\n }\n}\nfunction maybeInitDetachAnimationList(lContainer, index) {\n if (lContainer.length <= CONTAINER_HEADER_OFFSET) return;\n const indexInContainer = CONTAINER_HEADER_OFFSET + index;\n const viewToDetach = lContainer[indexInContainer];\n const animations = viewToDetach ? viewToDetach[ANIMATIONS] : undefined;\n if (animations && animations.leave && animations.leave.size > 0) {\n animations.detachedLeaveAnimationFns = [];\n }\n}\nfunction detachExistingView(lContainer, index) {\n const existingLView = detachView(lContainer, index);\n ngDevMode && assertLView(existingLView);\n return existingLView;\n}\nfunction getExistingLViewFromLContainer(lContainer, index) {\n const existingLView = getLViewFromLContainer(lContainer, index);\n ngDevMode && assertLView(existingLView);\n return existingLView;\n}\nfunction getExistingTNode(tView, index) {\n const tNode = getTNode(tView, index);\n ngDevMode && assertTNode(tNode);\n return tNode;\n}\nfunction ɵɵproperty(propName, value, sanitizer) {\n const lView = getLView();\n const bindingIndex = nextBindingIndex();\n if (bindingUpdated(lView, bindingIndex, value)) {\n const tView = getTView();\n const tNode = getSelectedTNode();\n setPropertyAndInputs(tNode, lView, propName, value, lView[RENDERER], sanitizer);\n ngDevMode && storePropertyBindingMetadata(tView.data, tNode, propName, bindingIndex);\n }\n return ɵɵproperty;\n}\nfunction setDirectiveInputsWhichShadowsStyling(tView, tNode, lView, value, isClassBased) {\n setAllInputsForProperty(tNode, tView, lView, isClassBased ? 'class' : 'style', value);\n}\nfunction ɵɵelementStart(index, name, attrsIndex, localRefsIndex) {\n const lView = getLView();\n ngDevMode && assertTNodeCreationIndex(lView, index);\n const tView = lView[TVIEW];\n const adjustedIndex = index + HEADER_OFFSET;\n const tNode = tView.firstCreatePass ? directiveHostFirstCreatePass(adjustedIndex, lView, 2, name, findDirectiveDefMatches, getBindingsEnabled(), attrsIndex, localRefsIndex) : tView.data[adjustedIndex];\n if (isComponentHost(tNode)) {\n const tracingService = lView[ENVIRONMENT].tracingService;\n if (tracingService && tracingService.componentCreate) {\n const def = tView.data[tNode.directiveStart + tNode.componentOffset];\n return tracingService.componentCreate(getComponentName(def), () => {\n initializeElement(index, name, lView, tNode, localRefsIndex);\n return ɵɵelementStart;\n });\n }\n }\n initializeElement(index, name, lView, tNode, localRefsIndex);\n return ɵɵelementStart;\n}\nfunction initializeElement(index, name, lView, tNode, localRefsIndex) {\n elementLikeStartShared(tNode, lView, index, name, _locateOrCreateElementNode);\n if (isDirectiveHost(tNode)) {\n const tView = lView[TVIEW];\n createDirectivesInstances(tView, lView, tNode);\n executeContentQueries(tView, tNode, lView);\n }\n if (localRefsIndex != null) {\n saveResolvedLocalsInData(lView, tNode);\n }\n if (ngDevMode && lView[TVIEW].firstCreatePass) {\n validateElementIsKnown(lView, tNode);\n }\n}\nfunction ɵɵelementEnd() {\n const tView = getTView();\n const initialTNode = getCurrentTNode();\n ngDevMode && assertDefined(initialTNode, 'No parent node to close.');\n const currentTNode = elementLikeEndShared(initialTNode);\n ngDevMode && assertTNodeType(currentTNode, 3);\n if (tView.firstCreatePass) {\n directiveHostEndFirstCreatePass(tView, currentTNode);\n }\n if (isSkipHydrationRootTNode(currentTNode)) {\n leaveSkipHydrationBlock();\n }\n decreaseElementDepthCount();\n if (currentTNode.classesWithoutHost != null && hasClassInput(currentTNode)) {\n setDirectiveInputsWhichShadowsStyling(tView, currentTNode, getLView(), currentTNode.classesWithoutHost, true);\n }\n if (currentTNode.stylesWithoutHost != null && hasStyleInput(currentTNode)) {\n setDirectiveInputsWhichShadowsStyling(tView, currentTNode, getLView(), currentTNode.stylesWithoutHost, false);\n }\n return ɵɵelementEnd;\n}\nfunction ɵɵelement(index, name, attrsIndex, localRefsIndex) {\n ɵɵelementStart(index, name, attrsIndex, localRefsIndex);\n ɵɵelementEnd();\n return ɵɵelement;\n}\nfunction ɵɵdomElementStart(index, name, attrsIndex, localRefsIndex) {\n const lView = getLView();\n ngDevMode && assertTNodeCreationIndex(lView, index);\n const tView = lView[TVIEW];\n const adjustedIndex = index + HEADER_OFFSET;\n const tNode = tView.firstCreatePass ? domOnlyFirstCreatePass(adjustedIndex, tView, 2, name, attrsIndex, localRefsIndex) : tView.data[adjustedIndex];\n elementLikeStartShared(tNode, lView, index, name, _locateOrCreateElementNode);\n if (localRefsIndex != null) {\n saveResolvedLocalsInData(lView, tNode);\n }\n if (ngDevMode && lView[TVIEW].firstCreatePass) {\n validateElementIsKnown(lView, tNode);\n }\n return ɵɵdomElementStart;\n}\nfunction ɵɵdomElementEnd() {\n const initialTNode = getCurrentTNode();\n ngDevMode && assertDefined(initialTNode, 'No parent node to close.');\n const currentTNode = elementLikeEndShared(initialTNode);\n ngDevMode && assertTNodeType(currentTNode, 3);\n if (isSkipHydrationRootTNode(currentTNode)) {\n leaveSkipHydrationBlock();\n }\n decreaseElementDepthCount();\n return ɵɵdomElementEnd;\n}\nfunction ɵɵdomElement(index, name, attrsIndex, localRefsIndex) {\n ɵɵdomElementStart(index, name, attrsIndex, localRefsIndex);\n ɵɵdomElementEnd();\n return ɵɵdomElement;\n}\nlet _locateOrCreateElementNode = (tView, lView, tNode, name, index) => {\n lastNodeWasCreated(true);\n return createElementNode(lView[RENDERER], name, getNamespace());\n};\nfunction locateOrCreateElementNodeImpl(tView, lView, tNode, name, index) {\n const isNodeCreationMode = !canHydrateNode(lView, tNode);\n lastNodeWasCreated(isNodeCreationMode);\n if (isNodeCreationMode) {\n return createElementNode(lView[RENDERER], name, getNamespace());\n }\n const hydrationInfo = lView[HYDRATION];\n const native = locateNextRNode(hydrationInfo, tView, lView, tNode);\n ngDevMode && validateMatchingNode(native, Node.ELEMENT_NODE, name, lView, tNode);\n ngDevMode && markRNodeAsClaimedByHydration(native);\n if (getSerializedContainerViews(hydrationInfo, index)) {\n ngDevMode && validateNodeExists(native.nextSibling, lView, tNode);\n setSegmentHead(hydrationInfo, index, native.nextSibling);\n }\n if (hydrationInfo && (hasSkipHydrationAttrOnTNode(tNode) || hasSkipHydrationAttrOnRElement(native))) {\n if (isComponentHost(tNode)) {\n enterSkipHydrationBlock(tNode);\n clearElementContents(native);\n ngDevMode && markRNodeAsSkippedByHydration(native);\n } else if (ngDevMode) {\n throw invalidSkipHydrationHost(native);\n }\n }\n return native;\n}\nfunction enableLocateOrCreateElementNodeImpl() {\n _locateOrCreateElementNode = locateOrCreateElementNodeImpl;\n}\nfunction ɵɵelementContainerStart(index, attrsIndex, localRefsIndex) {\n const lView = getLView();\n ngDevMode && assertTNodeCreationIndex(lView, index);\n const tView = lView[TVIEW];\n const adjustedIndex = index + HEADER_OFFSET;\n const tNode = tView.firstCreatePass ? directiveHostFirstCreatePass(adjustedIndex, lView, 8, 'ng-container', findDirectiveDefMatches, getBindingsEnabled(), attrsIndex, localRefsIndex) : tView.data[adjustedIndex];\n elementLikeStartShared(tNode, lView, index, 'ng-container', _locateOrCreateElementContainerNode);\n if (isDirectiveHost(tNode)) {\n const tView = lView[TVIEW];\n createDirectivesInstances(tView, lView, tNode);\n executeContentQueries(tView, tNode, lView);\n }\n if (localRefsIndex != null) {\n saveResolvedLocalsInData(lView, tNode);\n }\n return ɵɵelementContainerStart;\n}\nfunction ɵɵelementContainerEnd() {\n const tView = getTView();\n const initialTNode = getCurrentTNode();\n ngDevMode && assertDefined(initialTNode, 'No parent node to close.');\n const currentTNode = elementLikeEndShared(initialTNode);\n if (tView.firstCreatePass) {\n directiveHostEndFirstCreatePass(tView, currentTNode);\n }\n ngDevMode && assertTNodeType(currentTNode, 8);\n return ɵɵelementContainerEnd;\n}\nfunction ɵɵelementContainer(index, attrsIndex, localRefsIndex) {\n ɵɵelementContainerStart(index, attrsIndex, localRefsIndex);\n ɵɵelementContainerEnd();\n return ɵɵelementContainer;\n}\nfunction ɵɵdomElementContainerStart(index, attrsIndex, localRefsIndex) {\n const lView = getLView();\n ngDevMode && assertTNodeCreationIndex(lView, index);\n const tView = lView[TVIEW];\n const adjustedIndex = index + HEADER_OFFSET;\n const tNode = tView.firstCreatePass ? domOnlyFirstCreatePass(adjustedIndex, tView, 8, 'ng-container', attrsIndex, localRefsIndex) : tView.data[adjustedIndex];\n elementLikeStartShared(tNode, lView, index, 'ng-container', _locateOrCreateElementContainerNode);\n if (localRefsIndex != null) {\n saveResolvedLocalsInData(lView, tNode);\n }\n return ɵɵdomElementContainerStart;\n}\nfunction ɵɵdomElementContainerEnd() {\n const initialTNode = getCurrentTNode();\n ngDevMode && assertDefined(initialTNode, 'No parent node to close.');\n const currentTNode = elementLikeEndShared(initialTNode);\n ngDevMode && assertTNodeType(currentTNode, 8);\n return ɵɵelementContainerEnd;\n}\nfunction ɵɵdomElementContainer(index, attrsIndex, localRefsIndex) {\n ɵɵdomElementContainerStart(index, attrsIndex, localRefsIndex);\n ɵɵdomElementContainerEnd();\n return ɵɵdomElementContainer;\n}\nlet _locateOrCreateElementContainerNode = (tView, lView, tNode, commentText, index) => {\n lastNodeWasCreated(true);\n return createCommentNode(lView[RENDERER], ngDevMode ? commentText : '');\n};\nfunction locateOrCreateElementContainerNode(tView, lView, tNode, commentText, index) {\n let comment;\n const isNodeCreationMode = !canHydrateNode(lView, tNode);\n lastNodeWasCreated(isNodeCreationMode);\n if (isNodeCreationMode) {\n return createCommentNode(lView[RENDERER], ngDevMode ? commentText : '');\n }\n const hydrationInfo = lView[HYDRATION];\n const currentRNode = locateNextRNode(hydrationInfo, tView, lView, tNode);\n ngDevMode && validateNodeExists(currentRNode, lView, tNode);\n const ngContainerSize = getNgContainerSize(hydrationInfo, index);\n ngDevMode && assertNumber(ngContainerSize, 'Unexpected state: hydrating an , ' + 'but no hydration info is available.');\n setSegmentHead(hydrationInfo, index, currentRNode);\n comment = siblingAfter(ngContainerSize, currentRNode);\n if (ngDevMode) {\n validateMatchingNode(comment, Node.COMMENT_NODE, null, lView, tNode);\n markRNodeAsClaimedByHydration(comment);\n }\n return comment;\n}\nfunction enableLocateOrCreateElementContainerNodeImpl() {\n _locateOrCreateElementContainerNode = locateOrCreateElementContainerNode;\n}\nfunction ɵɵgetCurrentView() {\n return getLView();\n}\nfunction ɵɵdomProperty(propName, value, sanitizer) {\n const lView = getLView();\n const bindingIndex = nextBindingIndex();\n if (bindingUpdated(lView, bindingIndex, value)) {\n const tView = getTView();\n const tNode = getSelectedTNode();\n setDomProperty(tNode, lView, propName, value, lView[RENDERER], sanitizer);\n ngDevMode && storePropertyBindingMetadata(tView.data, tNode, propName, bindingIndex);\n }\n return ɵɵdomProperty;\n}\nfunction ɵɵsyntheticHostProperty(propName, value, sanitizer) {\n const lView = getLView();\n const bindingIndex = nextBindingIndex();\n if (bindingUpdated(lView, bindingIndex, value)) {\n const tView = getTView();\n const tNode = getSelectedTNode();\n const currentDef = getCurrentDirectiveDef(tView.data);\n const renderer = loadComponentRenderer(currentDef, tNode, lView);\n setDomProperty(tNode, lView, propName, value, renderer, sanitizer);\n ngDevMode && storePropertyBindingMetadata(tView.data, tNode, propName, bindingIndex);\n }\n return ɵɵsyntheticHostProperty;\n}\nconst u = undefined;\nfunction plural(val) {\n const i = Math.floor(Math.abs(val)),\n v = val.toString().replace(/^[^.]*\\.?/, '').length;\n if (i === 1 && v === 0) return 1;\n return 5;\n}\nvar localeEn = [\"en\", [[\"a\", \"p\"], [\"AM\", \"PM\"]], [[\"AM\", \"PM\"]], [[\"S\", \"M\", \"T\", \"W\", \"T\", \"F\", \"S\"], [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"], [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"], [\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]], u, [[\"J\", \"F\", \"M\", \"A\", \"M\", \"J\", \"J\", \"A\", \"S\", \"O\", \"N\", \"D\"], [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"], [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]], u, [[\"B\", \"A\"], [\"BC\", \"AD\"], [\"Before Christ\", \"Anno Domini\"]], 0, [6, 0], [\"M/d/yy\", \"MMM d, y\", \"MMMM d, y\", \"EEEE, MMMM d, y\"], [\"h:mm a\", \"h:mm:ss a\", \"h:mm:ss a z\", \"h:mm:ss a zzzz\"], [\"{1}, {0}\", u, u, u], [\".\", \",\", \";\", \"%\", \"+\", \"-\", \"E\", \"×\", \"‰\", \"∞\", \"NaN\", \":\"], [\"#,##0.###\", \"#,##0%\", \"¤#,##0.00\", \"#E0\"], \"USD\", \"$\", \"US Dollar\", {}, \"ltr\", plural];\nlet LOCALE_DATA = {};\nfunction registerLocaleData(data, localeId, extraData) {\n if (typeof localeId !== 'string') {\n extraData = localeId;\n localeId = data[LocaleDataIndex.LocaleId];\n }\n localeId = localeId.toLowerCase().replace(/_/g, '-');\n LOCALE_DATA[localeId] = data;\n if (extraData) {\n LOCALE_DATA[localeId][LocaleDataIndex.ExtraData] = extraData;\n }\n}\nfunction findLocaleData(locale) {\n const normalizedLocale = normalizeLocale(locale);\n let match = getLocaleData(normalizedLocale);\n if (match) {\n return match;\n }\n const parentLocale = normalizedLocale.split('-')[0];\n match = getLocaleData(parentLocale);\n if (match) {\n return match;\n }\n if (parentLocale === 'en') {\n return localeEn;\n }\n throw new RuntimeError(701, ngDevMode && `Missing locale data for the locale \"${locale}\".`);\n}\nfunction getLocaleCurrencyCode(locale) {\n const data = findLocaleData(locale);\n return data[LocaleDataIndex.CurrencyCode] || null;\n}\nfunction getLocalePluralCase(locale) {\n const data = findLocaleData(locale);\n return data[LocaleDataIndex.PluralCase];\n}\nfunction getLocaleData(normalizedLocale) {\n if (!(normalizedLocale in LOCALE_DATA)) {\n LOCALE_DATA[normalizedLocale] = _global.ng && _global.ng.common && _global.ng.common.locales && _global.ng.common.locales[normalizedLocale];\n }\n return LOCALE_DATA[normalizedLocale];\n}\nfunction unregisterAllLocaleData() {\n LOCALE_DATA = {};\n}\nvar LocaleDataIndex = /*#__PURE__*/function (LocaleDataIndex) {\n LocaleDataIndex[LocaleDataIndex[\"LocaleId\"] = 0] = \"LocaleId\";\n LocaleDataIndex[LocaleDataIndex[\"DayPeriodsFormat\"] = 1] = \"DayPeriodsFormat\";\n LocaleDataIndex[LocaleDataIndex[\"DayPeriodsStandalone\"] = 2] = \"DayPeriodsStandalone\";\n LocaleDataIndex[LocaleDataIndex[\"DaysFormat\"] = 3] = \"DaysFormat\";\n LocaleDataIndex[LocaleDataIndex[\"DaysStandalone\"] = 4] = \"DaysStandalone\";\n LocaleDataIndex[LocaleDataIndex[\"MonthsFormat\"] = 5] = \"MonthsFormat\";\n LocaleDataIndex[LocaleDataIndex[\"MonthsStandalone\"] = 6] = \"MonthsStandalone\";\n LocaleDataIndex[LocaleDataIndex[\"Eras\"] = 7] = \"Eras\";\n LocaleDataIndex[LocaleDataIndex[\"FirstDayOfWeek\"] = 8] = \"FirstDayOfWeek\";\n LocaleDataIndex[LocaleDataIndex[\"WeekendRange\"] = 9] = \"WeekendRange\";\n LocaleDataIndex[LocaleDataIndex[\"DateFormat\"] = 10] = \"DateFormat\";\n LocaleDataIndex[LocaleDataIndex[\"TimeFormat\"] = 11] = \"TimeFormat\";\n LocaleDataIndex[LocaleDataIndex[\"DateTimeFormat\"] = 12] = \"DateTimeFormat\";\n LocaleDataIndex[LocaleDataIndex[\"NumberSymbols\"] = 13] = \"NumberSymbols\";\n LocaleDataIndex[LocaleDataIndex[\"NumberFormats\"] = 14] = \"NumberFormats\";\n LocaleDataIndex[LocaleDataIndex[\"CurrencyCode\"] = 15] = \"CurrencyCode\";\n LocaleDataIndex[LocaleDataIndex[\"CurrencySymbol\"] = 16] = \"CurrencySymbol\";\n LocaleDataIndex[LocaleDataIndex[\"CurrencyName\"] = 17] = \"CurrencyName\";\n LocaleDataIndex[LocaleDataIndex[\"Currencies\"] = 18] = \"Currencies\";\n LocaleDataIndex[LocaleDataIndex[\"Directionality\"] = 19] = \"Directionality\";\n LocaleDataIndex[LocaleDataIndex[\"PluralCase\"] = 20] = \"PluralCase\";\n LocaleDataIndex[LocaleDataIndex[\"ExtraData\"] = 21] = \"ExtraData\";\n return LocaleDataIndex;\n}(LocaleDataIndex || {});\nfunction normalizeLocale(locale) {\n return locale.toLowerCase().replace(/_/g, '-');\n}\nconst pluralMapping = ['zero', 'one', 'two', 'few', 'many'];\nfunction getPluralCase(value, locale) {\n const plural = getLocalePluralCase(locale)(parseInt(value, 10));\n const result = pluralMapping[plural];\n return result !== undefined ? result : 'other';\n}\nconst DEFAULT_LOCALE_ID = 'en-US';\nconst USD_CURRENCY_CODE = 'USD';\nconst ELEMENT_MARKER = {\n marker: 'element'\n};\nconst ICU_MARKER = {\n marker: 'ICU'\n};\nvar I18nCreateOpCode = /*#__PURE__*/function (I18nCreateOpCode) {\n I18nCreateOpCode[I18nCreateOpCode[\"SHIFT\"] = 2] = \"SHIFT\";\n I18nCreateOpCode[I18nCreateOpCode[\"APPEND_EAGERLY\"] = 1] = \"APPEND_EAGERLY\";\n I18nCreateOpCode[I18nCreateOpCode[\"COMMENT\"] = 2] = \"COMMENT\";\n return I18nCreateOpCode;\n}(I18nCreateOpCode || {});\nlet LOCALE_ID$1 = DEFAULT_LOCALE_ID;\nfunction setLocaleId(localeId) {\n ngDevMode && assertDefined(localeId, `Expected localeId to be defined`);\n if (typeof localeId === 'string') {\n LOCALE_ID$1 = localeId.toLowerCase().replace(/_/g, '-');\n }\n}\nfunction getLocaleId() {\n return LOCALE_ID$1;\n}\nlet changeMask = 0b0;\nlet changeMaskCounter = 0;\nfunction setMaskBit(hasChange) {\n if (hasChange) {\n changeMask = changeMask | 1 << Math.min(changeMaskCounter, 31);\n }\n changeMaskCounter++;\n}\nfunction applyI18n(tView, lView, index) {\n if (changeMaskCounter > 0) {\n ngDevMode && assertDefined(tView, `tView should be defined`);\n const tI18n = tView.data[index];\n const updateOpCodes = Array.isArray(tI18n) ? tI18n : tI18n.update;\n const bindingsStartIndex = getBindingIndex() - changeMaskCounter - 1;\n applyUpdateOpCodes(tView, lView, updateOpCodes, bindingsStartIndex, changeMask);\n }\n changeMask = 0b0;\n changeMaskCounter = 0;\n}\nfunction createNodeWithoutHydration(lView, textOrName, nodeType) {\n const renderer = lView[RENDERER];\n switch (nodeType) {\n case Node.COMMENT_NODE:\n return createCommentNode(renderer, textOrName);\n case Node.TEXT_NODE:\n return createTextNode(renderer, textOrName);\n case Node.ELEMENT_NODE:\n return createElementNode(renderer, textOrName, null);\n }\n}\nlet _locateOrCreateNode = (lView, index, textOrName, nodeType) => {\n lastNodeWasCreated(true);\n return createNodeWithoutHydration(lView, textOrName, nodeType);\n};\nfunction locateOrCreateNodeImpl(lView, index, textOrName, nodeType) {\n const hydrationInfo = lView[HYDRATION];\n const noOffsetIndex = index - HEADER_OFFSET;\n const isNodeCreationMode = !isI18nHydrationSupportEnabled() || !hydrationInfo || isInSkipHydrationBlock$1() || isDisconnectedNode$1(hydrationInfo, noOffsetIndex);\n lastNodeWasCreated(isNodeCreationMode);\n if (isNodeCreationMode) {\n return createNodeWithoutHydration(lView, textOrName, nodeType);\n }\n const native = locateI18nRNodeByIndex(hydrationInfo, noOffsetIndex);\n ngDevMode && assertDefined(native, 'expected native element');\n ngDevMode && assertEqual(native.nodeType, nodeType, 'expected matching nodeType');\n ngDevMode && nodeType === Node.ELEMENT_NODE && assertEqual(native.tagName.toLowerCase(), textOrName.toLowerCase(), 'expecting matching tagName');\n ngDevMode && markRNodeAsClaimedByHydration(native);\n return native;\n}\nfunction enableLocateOrCreateI18nNodeImpl() {\n _locateOrCreateNode = locateOrCreateNodeImpl;\n}\nfunction applyCreateOpCodes(lView, createOpCodes, parentRNode, insertInFrontOf) {\n const renderer = lView[RENDERER];\n for (let i = 0; i < createOpCodes.length; i++) {\n const opCode = createOpCodes[i++];\n const text = createOpCodes[i];\n const isComment = (opCode & I18nCreateOpCode.COMMENT) === I18nCreateOpCode.COMMENT;\n const appendNow = (opCode & I18nCreateOpCode.APPEND_EAGERLY) === I18nCreateOpCode.APPEND_EAGERLY;\n const index = opCode >>> I18nCreateOpCode.SHIFT;\n let rNode = lView[index];\n let lastNodeWasCreated = false;\n if (rNode === null) {\n rNode = lView[index] = _locateOrCreateNode(lView, index, text, isComment ? Node.COMMENT_NODE : Node.TEXT_NODE);\n lastNodeWasCreated = wasLastNodeCreated();\n }\n if (appendNow && parentRNode !== null && lastNodeWasCreated) {\n nativeInsertBefore(renderer, parentRNode, rNode, insertInFrontOf, false);\n }\n }\n}\nfunction applyMutableOpCodes(tView, mutableOpCodes, lView, anchorRNode) {\n ngDevMode && assertDomNode(anchorRNode);\n const renderer = lView[RENDERER];\n let rootIdx = null;\n let rootRNode;\n for (let i = 0; i < mutableOpCodes.length; i++) {\n const opCode = mutableOpCodes[i];\n if (typeof opCode == 'string') {\n const textNodeIndex = mutableOpCodes[++i];\n if (lView[textNodeIndex] === null) {\n ngDevMode && assertIndexInRange(lView, textNodeIndex);\n lView[textNodeIndex] = _locateOrCreateNode(lView, textNodeIndex, opCode, Node.TEXT_NODE);\n }\n } else if (typeof opCode == 'number') {\n switch (opCode & 1) {\n case 0:\n const parentIdx = getParentFromIcuCreateOpCode(opCode);\n if (rootIdx === null) {\n rootIdx = parentIdx;\n rootRNode = renderer.parentNode(anchorRNode);\n }\n let insertInFrontOf;\n let parentRNode;\n if (parentIdx === rootIdx) {\n insertInFrontOf = anchorRNode;\n parentRNode = rootRNode;\n } else {\n insertInFrontOf = null;\n parentRNode = unwrapRNode(lView[parentIdx]);\n }\n if (parentRNode !== null) {\n ngDevMode && assertDomNode(parentRNode);\n const refIdx = getRefFromIcuCreateOpCode(opCode);\n ngDevMode && assertGreaterThan(refIdx, HEADER_OFFSET, 'Missing ref');\n const child = lView[refIdx];\n ngDevMode && assertDomNode(child);\n nativeInsertBefore(renderer, parentRNode, child, insertInFrontOf, false);\n const tIcu = getTIcu(tView, refIdx);\n if (tIcu !== null && typeof tIcu === 'object') {\n ngDevMode && assertTIcu(tIcu);\n const caseIndex = getCurrentICUCaseIndex(tIcu, lView);\n if (caseIndex !== null) {\n applyMutableOpCodes(tView, tIcu.create[caseIndex], lView, lView[tIcu.anchorIdx]);\n }\n }\n }\n break;\n case 1:\n const elementNodeIndex = opCode >>> 1;\n const attrName = mutableOpCodes[++i];\n const attrValue = mutableOpCodes[++i];\n setElementAttribute(renderer, getNativeByIndex(elementNodeIndex, lView), null, null, attrName, attrValue, null);\n break;\n default:\n if (ngDevMode) {\n throw new RuntimeError(700, `Unable to determine the type of mutate operation for \"${opCode}\"`);\n }\n }\n } else {\n switch (opCode) {\n case ICU_MARKER:\n const commentValue = mutableOpCodes[++i];\n const commentNodeIndex = mutableOpCodes[++i];\n if (lView[commentNodeIndex] === null) {\n ngDevMode && assertEqual(typeof commentValue, 'string', `Expected \"${commentValue}\" to be a comment node value`);\n ngDevMode && assertIndexInExpandoRange(lView, commentNodeIndex);\n const commentRNode = lView[commentNodeIndex] = _locateOrCreateNode(lView, commentNodeIndex, commentValue, Node.COMMENT_NODE);\n attachPatchData(commentRNode, lView);\n }\n break;\n case ELEMENT_MARKER:\n const tagName = mutableOpCodes[++i];\n const elementNodeIndex = mutableOpCodes[++i];\n if (lView[elementNodeIndex] === null) {\n ngDevMode && assertEqual(typeof tagName, 'string', `Expected \"${tagName}\" to be an element node tag name`);\n ngDevMode && assertIndexInExpandoRange(lView, elementNodeIndex);\n const elementRNode = lView[elementNodeIndex] = _locateOrCreateNode(lView, elementNodeIndex, tagName, Node.ELEMENT_NODE);\n attachPatchData(elementRNode, lView);\n }\n break;\n default:\n ngDevMode && throwError(`Unable to determine the type of mutate operation for \"${opCode}\"`);\n }\n }\n }\n}\nfunction applyUpdateOpCodes(tView, lView, updateOpCodes, bindingsStartIndex, changeMask) {\n for (let i = 0; i < updateOpCodes.length; i++) {\n const checkBit = updateOpCodes[i];\n const skipCodes = updateOpCodes[++i];\n if (checkBit & changeMask) {\n let value = '';\n for (let j = i + 1; j <= i + skipCodes; j++) {\n const opCode = updateOpCodes[j];\n if (typeof opCode == 'string') {\n value += opCode;\n } else if (typeof opCode == 'number') {\n if (opCode < 0) {\n value += renderStringify(lView[bindingsStartIndex - opCode]);\n } else {\n const nodeIndex = opCode >>> 2;\n switch (opCode & 3) {\n case 1:\n const propName = updateOpCodes[++j];\n const sanitizeFn = updateOpCodes[++j];\n const tNodeOrTagName = tView.data[nodeIndex];\n ngDevMode && assertDefined(tNodeOrTagName, 'Experting TNode or string');\n if (typeof tNodeOrTagName === 'string') {\n setElementAttribute(lView[RENDERER], lView[nodeIndex], null, tNodeOrTagName, propName, value, sanitizeFn);\n } else {\n setPropertyAndInputs(tNodeOrTagName, lView, propName, value, lView[RENDERER], sanitizeFn);\n }\n break;\n case 0:\n const rText = lView[nodeIndex];\n rText !== null && updateTextNode(lView[RENDERER], rText, value);\n break;\n case 2:\n applyIcuSwitchCase(tView, getTIcu(tView, nodeIndex), lView, value);\n break;\n case 3:\n applyIcuUpdateCase(tView, getTIcu(tView, nodeIndex), bindingsStartIndex, lView);\n break;\n }\n }\n }\n }\n } else {\n const opCode = updateOpCodes[i + 1];\n if (opCode > 0 && (opCode & 3) === 3) {\n const nodeIndex = opCode >>> 2;\n const tIcu = getTIcu(tView, nodeIndex);\n const currentIndex = lView[tIcu.currentCaseLViewIndex];\n if (currentIndex < 0) {\n applyIcuUpdateCase(tView, tIcu, bindingsStartIndex, lView);\n }\n }\n }\n i += skipCodes;\n }\n}\nfunction applyIcuUpdateCase(tView, tIcu, bindingsStartIndex, lView) {\n ngDevMode && assertIndexInRange(lView, tIcu.currentCaseLViewIndex);\n let activeCaseIndex = lView[tIcu.currentCaseLViewIndex];\n if (activeCaseIndex !== null) {\n let mask = changeMask;\n if (activeCaseIndex < 0) {\n activeCaseIndex = lView[tIcu.currentCaseLViewIndex] = ~activeCaseIndex;\n mask = -1;\n }\n applyUpdateOpCodes(tView, lView, tIcu.update[activeCaseIndex], bindingsStartIndex, mask);\n }\n}\nfunction applyIcuSwitchCase(tView, tIcu, lView, value) {\n const caseIndex = getCaseIndex(tIcu, value);\n let activeCaseIndex = getCurrentICUCaseIndex(tIcu, lView);\n if (activeCaseIndex !== caseIndex) {\n applyIcuSwitchCaseRemove(tView, tIcu, lView);\n lView[tIcu.currentCaseLViewIndex] = caseIndex === null ? null : ~caseIndex;\n if (caseIndex !== null) {\n const anchorRNode = lView[tIcu.anchorIdx];\n if (anchorRNode) {\n ngDevMode && assertDomNode(anchorRNode);\n applyMutableOpCodes(tView, tIcu.create[caseIndex], lView, anchorRNode);\n }\n claimDehydratedIcuCase(lView, tIcu.anchorIdx, caseIndex);\n }\n }\n}\nfunction applyIcuSwitchCaseRemove(tView, tIcu, lView) {\n let activeCaseIndex = getCurrentICUCaseIndex(tIcu, lView);\n if (activeCaseIndex !== null) {\n const removeCodes = tIcu.remove[activeCaseIndex];\n for (let i = 0; i < removeCodes.length; i++) {\n const nodeOrIcuIndex = removeCodes[i];\n if (nodeOrIcuIndex > 0) {\n const rNode = getNativeByIndex(nodeOrIcuIndex, lView);\n rNode !== null && nativeRemoveNode(lView[RENDERER], rNode);\n } else {\n applyIcuSwitchCaseRemove(tView, getTIcu(tView, ~nodeOrIcuIndex), lView);\n }\n }\n }\n}\nfunction getCaseIndex(icuExpression, bindingValue) {\n let index = icuExpression.cases.indexOf(bindingValue);\n if (index === -1) {\n switch (icuExpression.type) {\n case 1:\n {\n const resolvedCase = getPluralCase(bindingValue, getLocaleId());\n index = icuExpression.cases.indexOf(resolvedCase);\n if (index === -1 && resolvedCase !== 'other') {\n index = icuExpression.cases.indexOf('other');\n }\n break;\n }\n case 0:\n {\n index = icuExpression.cases.indexOf('other');\n break;\n }\n }\n }\n return index === -1 ? null : index;\n}\nfunction i18nCreateOpCodesToString(opcodes) {\n const createOpCodes = opcodes || (Array.isArray(this) ? this : []);\n let lines = [];\n for (let i = 0; i < createOpCodes.length; i++) {\n const opCode = createOpCodes[i++];\n const text = createOpCodes[i];\n const isComment = (opCode & I18nCreateOpCode.COMMENT) === I18nCreateOpCode.COMMENT;\n const appendNow = (opCode & I18nCreateOpCode.APPEND_EAGERLY) === I18nCreateOpCode.APPEND_EAGERLY;\n const index = opCode >>> I18nCreateOpCode.SHIFT;\n lines.push(`lView[${index}] = document.${isComment ? 'createComment' : 'createText'}(${JSON.stringify(text)});`);\n if (appendNow) {\n lines.push(`parent.appendChild(lView[${index}]);`);\n }\n }\n return lines;\n}\nfunction i18nUpdateOpCodesToString(opcodes) {\n const parser = new OpCodeParser(opcodes || (Array.isArray(this) ? this : []));\n let lines = [];\n function consumeOpCode(value) {\n const ref = value >>> 2;\n const opCode = value & 3;\n switch (opCode) {\n case 0:\n return `(lView[${ref}] as Text).textContent = $$$`;\n case 1:\n const attrName = parser.consumeString();\n const sanitizationFn = parser.consumeFunction();\n const value = sanitizationFn ? `(${sanitizationFn})($$$)` : '$$$';\n return `(lView[${ref}] as Element).setAttribute('${attrName}', ${value})`;\n case 2:\n return `icuSwitchCase(${ref}, $$$)`;\n case 3:\n return `icuUpdateCase(${ref})`;\n }\n throw new Error('unexpected OpCode');\n }\n while (parser.hasMore()) {\n let mask = parser.consumeNumber();\n let size = parser.consumeNumber();\n const end = parser.i + size;\n const statements = [];\n let statement = '';\n while (parser.i < end) {\n let value = parser.consumeNumberOrString();\n if (typeof value === 'string') {\n statement += value;\n } else if (value < 0) {\n statement += '${lView[i' + value + ']}';\n } else {\n const opCodeText = consumeOpCode(value);\n statements.push(opCodeText.replace('$$$', '`' + statement + '`') + ';');\n statement = '';\n }\n }\n lines.push(`if (mask & 0b${mask.toString(2)}) { ${statements.join(' ')} }`);\n }\n return lines;\n}\nfunction icuCreateOpCodesToString(opcodes) {\n const parser = new OpCodeParser(opcodes || (Array.isArray(this) ? this : []));\n let lines = [];\n function consumeOpCode(opCode) {\n const parent = getParentFromIcuCreateOpCode(opCode);\n const ref = getRefFromIcuCreateOpCode(opCode);\n switch (getInstructionFromIcuCreateOpCode(opCode)) {\n case 0:\n return `(lView[${parent}] as Element).appendChild(lView[${lastRef}])`;\n case 1:\n return `(lView[${ref}] as Element).setAttribute(\"${parser.consumeString()}\", \"${parser.consumeString()}\")`;\n }\n throw new Error('Unexpected OpCode: ' + getInstructionFromIcuCreateOpCode(opCode));\n }\n let lastRef = -1;\n while (parser.hasMore()) {\n let value = parser.consumeNumberStringOrMarker();\n if (value === ICU_MARKER) {\n const text = parser.consumeString();\n lastRef = parser.consumeNumber();\n lines.push(`lView[${lastRef}] = document.createComment(\"${text}\")`);\n } else if (value === ELEMENT_MARKER) {\n const text = parser.consumeString();\n lastRef = parser.consumeNumber();\n lines.push(`lView[${lastRef}] = document.createElement(\"${text}\")`);\n } else if (typeof value === 'string') {\n lastRef = parser.consumeNumber();\n lines.push(`lView[${lastRef}] = document.createTextNode(\"${value}\")`);\n } else if (typeof value === 'number') {\n const line = consumeOpCode(value);\n line && lines.push(line);\n } else {\n throw new Error('Unexpected value');\n }\n }\n return lines;\n}\nfunction i18nRemoveOpCodesToString(opcodes) {\n const removeCodes = opcodes || (Array.isArray(this) ? this : []);\n let lines = [];\n for (let i = 0; i < removeCodes.length; i++) {\n const nodeOrIcuIndex = removeCodes[i];\n if (nodeOrIcuIndex > 0) {\n lines.push(`remove(lView[${nodeOrIcuIndex}])`);\n } else {\n lines.push(`removeNestedICU(${~nodeOrIcuIndex})`);\n }\n }\n return lines;\n}\nclass OpCodeParser {\n i = 0;\n codes;\n constructor(codes) {\n this.codes = codes;\n }\n hasMore() {\n return this.i < this.codes.length;\n }\n consumeNumber() {\n let value = this.codes[this.i++];\n assertNumber(value, 'expecting number in OpCode');\n return value;\n }\n consumeString() {\n let value = this.codes[this.i++];\n assertString(value, 'expecting string in OpCode');\n return value;\n }\n consumeFunction() {\n let value = this.codes[this.i++];\n if (value === null || typeof value === 'function') {\n return value;\n }\n throw new Error('expecting function in OpCode');\n }\n consumeNumberOrString() {\n let value = this.codes[this.i++];\n if (typeof value === 'string') {\n return value;\n }\n assertNumber(value, 'expecting number or string in OpCode');\n return value;\n }\n consumeNumberStringOrMarker() {\n let value = this.codes[this.i++];\n if (typeof value === 'string' || typeof value === 'number' || value == ICU_MARKER || value == ELEMENT_MARKER) {\n return value;\n }\n assertNumber(value, 'expecting number, string, ICU_MARKER or ELEMENT_MARKER in OpCode');\n return value;\n }\n}\nconst BINDING_REGEXP = /�(\\d+):?\\d*�/gi;\nconst ICU_REGEXP = /({\\s*�\\d+:?\\d*�\\s*,\\s*\\S{6}\\s*,[\\s\\S]*})/gi;\nconst NESTED_ICU = /�(\\d+)�/;\nconst ICU_BLOCK_REGEXP = /^\\s*(�\\d+:?\\d*�)\\s*,\\s*(select|plural)\\s*,/;\nconst MARKER = `�`;\nconst SUBTEMPLATE_REGEXP = /�\\/?\\*(\\d+:\\d+)�/gi;\nconst PH_REGEXP = /�(\\/?[#*]\\d+):?\\d*�/gi;\nconst NGSP_UNICODE_REGEXP = /\\uE500/g;\nfunction replaceNgsp(value) {\n return value.replace(NGSP_UNICODE_REGEXP, ' ');\n}\nfunction attachDebugGetter(obj, debugGetter) {\n if (ngDevMode) {\n Object.defineProperty(obj, 'debug', {\n get: debugGetter,\n enumerable: false\n });\n } else {\n throw new Error('This method should be guarded with `ngDevMode` so that it can be tree shaken in production!');\n }\n}\nfunction i18nStartFirstCreatePass(tView, parentTNodeIndex, lView, index, message, subTemplateIndex) {\n const rootTNode = getCurrentParentTNode();\n const createOpCodes = [];\n const updateOpCodes = [];\n const existingTNodeStack = [[]];\n const astStack = [[]];\n if (ngDevMode) {\n attachDebugGetter(createOpCodes, i18nCreateOpCodesToString);\n attachDebugGetter(updateOpCodes, i18nUpdateOpCodesToString);\n }\n message = getTranslationForTemplate(message, subTemplateIndex);\n const msgParts = replaceNgsp(message).split(PH_REGEXP);\n for (let i = 0; i < msgParts.length; i++) {\n let value = msgParts[i];\n if ((i & 1) === 0) {\n const parts = i18nParseTextIntoPartsAndICU(value);\n for (let j = 0; j < parts.length; j++) {\n let part = parts[j];\n if ((j & 1) === 0) {\n const text = part;\n ngDevMode && assertString(text, 'Parsed ICU part should be string');\n if (text !== '') {\n i18nStartFirstCreatePassProcessTextNode(astStack[0], tView, rootTNode, existingTNodeStack[0], createOpCodes, updateOpCodes, lView, text);\n }\n } else {\n const icuExpression = part;\n if (typeof icuExpression !== 'object') {\n throw new Error(`Unable to parse ICU expression in \"${message}\" message.`);\n }\n const icuContainerTNode = createTNodeAndAddOpCode(tView, rootTNode, existingTNodeStack[0], lView, createOpCodes, ngDevMode ? `ICU ${index}:${icuExpression.mainBinding}` : '', true);\n const icuNodeIndex = icuContainerTNode.index;\n ngDevMode && assertGreaterThanOrEqual(icuNodeIndex, HEADER_OFFSET, 'Index must be in absolute LView offset');\n icuStart(astStack[0], tView, lView, updateOpCodes, parentTNodeIndex, icuExpression, icuNodeIndex);\n }\n }\n } else {\n const isClosing = value.charCodeAt(0) === 47;\n const type = value.charCodeAt(isClosing ? 1 : 0);\n ngDevMode && assertOneOf(type, 42, 35);\n const index = HEADER_OFFSET + Number.parseInt(value.substring(isClosing ? 2 : 1));\n if (isClosing) {\n existingTNodeStack.shift();\n astStack.shift();\n setCurrentTNode(getCurrentParentTNode(), false);\n } else {\n const tNode = createTNodePlaceholder(tView, existingTNodeStack[0], index);\n existingTNodeStack.unshift([]);\n setCurrentTNode(tNode, true);\n const placeholderNode = {\n kind: 2,\n index,\n children: [],\n type: type === 35 ? 0 : 1\n };\n astStack[0].push(placeholderNode);\n astStack.unshift(placeholderNode.children);\n }\n }\n }\n tView.data[index] = {\n create: createOpCodes,\n update: updateOpCodes,\n ast: astStack[0],\n parentTNodeIndex\n };\n}\nfunction createTNodeAndAddOpCode(tView, rootTNode, existingTNodes, lView, createOpCodes, text, isICU) {\n const i18nNodeIdx = allocExpando(tView, lView, 1, null);\n let opCode = i18nNodeIdx << I18nCreateOpCode.SHIFT;\n let parentTNode = getCurrentParentTNode();\n if (rootTNode === parentTNode) {\n parentTNode = null;\n }\n if (parentTNode === null) {\n opCode |= I18nCreateOpCode.APPEND_EAGERLY;\n }\n if (isICU) {\n opCode |= I18nCreateOpCode.COMMENT;\n ensureIcuContainerVisitorLoaded(loadIcuContainerVisitor);\n }\n createOpCodes.push(opCode, text === null ? '' : text);\n const tNode = createTNodeAtIndex(tView, i18nNodeIdx, isICU ? 32 : 1, text === null ? ngDevMode ? '{{?}}' : '' : text, null);\n addTNodeAndUpdateInsertBeforeIndex(existingTNodes, tNode);\n const tNodeIdx = tNode.index;\n setCurrentTNode(tNode, false);\n if (parentTNode !== null && rootTNode !== parentTNode) {\n setTNodeInsertBeforeIndex(parentTNode, tNodeIdx);\n }\n return tNode;\n}\nfunction i18nStartFirstCreatePassProcessTextNode(ast, tView, rootTNode, existingTNodes, createOpCodes, updateOpCodes, lView, text) {\n const hasBinding = text.match(BINDING_REGEXP);\n const tNode = createTNodeAndAddOpCode(tView, rootTNode, existingTNodes, lView, createOpCodes, hasBinding ? null : text, false);\n const index = tNode.index;\n if (hasBinding) {\n generateBindingUpdateOpCodes(updateOpCodes, text, index, null, 0, null);\n }\n ast.push({\n kind: 0,\n index\n });\n}\nfunction i18nAttributesFirstPass(tView, index, values) {\n const previousElement = getCurrentTNode();\n const previousElementIndex = previousElement.index;\n const updateOpCodes = [];\n if (ngDevMode) {\n attachDebugGetter(updateOpCodes, i18nUpdateOpCodesToString);\n }\n if (tView.firstCreatePass && tView.data[index] === null) {\n for (let i = 0; i < values.length; i += 2) {\n const attrName = values[i];\n const message = values[i + 1];\n if (message !== '') {\n if (ICU_REGEXP.test(message)) {\n throw new Error(`ICU expressions are not supported in attributes. Message: \"${message}\".`);\n }\n generateBindingUpdateOpCodes(updateOpCodes, message, previousElementIndex, attrName, countBindings(updateOpCodes), SENSITIVE_ATTRS[attrName.toLowerCase()] ? _sanitizeUrl : null);\n }\n }\n tView.data[index] = updateOpCodes;\n }\n}\nfunction generateBindingUpdateOpCodes(updateOpCodes, str, destinationNode, attrName, bindingStart, sanitizeFn) {\n ngDevMode && assertGreaterThanOrEqual(destinationNode, HEADER_OFFSET, 'Index must be in absolute LView offset');\n const maskIndex = updateOpCodes.length;\n const sizeIndex = maskIndex + 1;\n updateOpCodes.push(null, null);\n const startIndex = maskIndex + 2;\n if (ngDevMode) {\n attachDebugGetter(updateOpCodes, i18nUpdateOpCodesToString);\n }\n const textParts = str.split(BINDING_REGEXP);\n let mask = 0;\n for (let j = 0; j < textParts.length; j++) {\n const textValue = textParts[j];\n if (j & 1) {\n const bindingIndex = bindingStart + parseInt(textValue, 10);\n updateOpCodes.push(-1 - bindingIndex);\n mask = mask | toMaskBit(bindingIndex);\n } else if (textValue !== '') {\n updateOpCodes.push(textValue);\n }\n }\n updateOpCodes.push(destinationNode << 2 | (attrName ? 1 : 0));\n if (attrName) {\n updateOpCodes.push(attrName, sanitizeFn);\n }\n updateOpCodes[maskIndex] = mask;\n updateOpCodes[sizeIndex] = updateOpCodes.length - startIndex;\n return mask;\n}\nfunction countBindings(opCodes) {\n let count = 0;\n for (let i = 0; i < opCodes.length; i++) {\n const opCode = opCodes[i];\n if (typeof opCode === 'number' && opCode < 0) {\n count++;\n }\n }\n return count;\n}\nfunction toMaskBit(bindingIndex) {\n return 1 << Math.min(bindingIndex, 31);\n}\nfunction removeInnerTemplateTranslation(message) {\n let match;\n let res = '';\n let index = 0;\n let inTemplate = false;\n let tagMatched;\n while ((match = SUBTEMPLATE_REGEXP.exec(message)) !== null) {\n if (!inTemplate) {\n res += message.substring(index, match.index + match[0].length);\n tagMatched = match[1];\n inTemplate = true;\n } else {\n if (match[0] === `${MARKER}/*${tagMatched}${MARKER}`) {\n index = match.index;\n inTemplate = false;\n }\n }\n }\n ngDevMode && assertEqual(inTemplate, false, `Tag mismatch: unable to find the end of the sub-template in the translation \"${message}\"`);\n res += message.slice(index);\n return res;\n}\nfunction getTranslationForTemplate(message, subTemplateIndex) {\n if (isRootTemplateMessage(subTemplateIndex)) {\n return removeInnerTemplateTranslation(message);\n } else {\n const start = message.indexOf(`:${subTemplateIndex}${MARKER}`) + 2 + subTemplateIndex.toString().length;\n const end = message.search(new RegExp(`${MARKER}\\\\/\\\\*\\\\d+:${subTemplateIndex}${MARKER}`));\n return removeInnerTemplateTranslation(message.substring(start, end));\n }\n}\nfunction icuStart(ast, tView, lView, updateOpCodes, parentIdx, icuExpression, anchorIdx) {\n ngDevMode && assertDefined(icuExpression, 'ICU expression must be defined');\n let bindingMask = 0;\n const tIcu = {\n type: icuExpression.type,\n currentCaseLViewIndex: allocExpando(tView, lView, 1, null),\n anchorIdx,\n cases: [],\n create: [],\n remove: [],\n update: []\n };\n addUpdateIcuSwitch(updateOpCodes, icuExpression, anchorIdx);\n setTIcu(tView, anchorIdx, tIcu);\n const values = icuExpression.values;\n const cases = [];\n for (let i = 0; i < values.length; i++) {\n const valueArr = values[i];\n const nestedIcus = [];\n for (let j = 0; j < valueArr.length; j++) {\n const value = valueArr[j];\n if (typeof value !== 'string') {\n const icuIndex = nestedIcus.push(value) - 1;\n valueArr[j] = ``;\n }\n }\n const caseAst = [];\n cases.push(caseAst);\n bindingMask = parseIcuCase(caseAst, tView, tIcu, lView, updateOpCodes, parentIdx, icuExpression.cases[i], valueArr.join(''), nestedIcus) | bindingMask;\n }\n if (bindingMask) {\n addUpdateIcuUpdate(updateOpCodes, bindingMask, anchorIdx);\n }\n ast.push({\n kind: 3,\n index: anchorIdx,\n cases,\n currentCaseLViewIndex: tIcu.currentCaseLViewIndex\n });\n}\nfunction parseICUBlock(pattern) {\n const cases = [];\n const values = [];\n let icuType = 1;\n let mainBinding = 0;\n pattern = pattern.replace(ICU_BLOCK_REGEXP, function (str, binding, type) {\n if (type === 'select') {\n icuType = 0;\n } else {\n icuType = 1;\n }\n mainBinding = parseInt(binding.slice(1), 10);\n return '';\n });\n const parts = i18nParseTextIntoPartsAndICU(pattern);\n for (let pos = 0; pos < parts.length;) {\n let key = parts[pos++].trim();\n if (icuType === 1) {\n key = key.replace(/\\s*(?:=)?(\\w+)\\s*/, '$1');\n }\n if (key.length) {\n cases.push(key);\n }\n const blocks = i18nParseTextIntoPartsAndICU(parts[pos++]);\n if (cases.length > values.length) {\n values.push(blocks);\n }\n }\n return {\n type: icuType,\n mainBinding: mainBinding,\n cases,\n values\n };\n}\nfunction i18nParseTextIntoPartsAndICU(pattern) {\n if (!pattern) {\n return [];\n }\n let prevPos = 0;\n const braceStack = [];\n const results = [];\n const braces = /[{}]/g;\n braces.lastIndex = 0;\n let match;\n while (match = braces.exec(pattern)) {\n const pos = match.index;\n if (match[0] == '}') {\n braceStack.pop();\n if (braceStack.length == 0) {\n const block = pattern.substring(prevPos, pos);\n if (ICU_BLOCK_REGEXP.test(block)) {\n results.push(parseICUBlock(block));\n } else {\n results.push(block);\n }\n prevPos = pos + 1;\n }\n } else {\n if (braceStack.length == 0) {\n const substring = pattern.substring(prevPos, pos);\n results.push(substring);\n prevPos = pos + 1;\n }\n braceStack.push('{');\n }\n }\n const substring = pattern.substring(prevPos);\n results.push(substring);\n return results;\n}\nfunction parseIcuCase(ast, tView, tIcu, lView, updateOpCodes, parentIdx, caseName, unsafeCaseHtml, nestedIcus) {\n const create = [];\n const remove = [];\n const update = [];\n if (ngDevMode) {\n attachDebugGetter(create, icuCreateOpCodesToString);\n attachDebugGetter(remove, i18nRemoveOpCodesToString);\n attachDebugGetter(update, i18nUpdateOpCodesToString);\n }\n tIcu.cases.push(caseName);\n tIcu.create.push(create);\n tIcu.remove.push(remove);\n tIcu.update.push(update);\n const inertBodyHelper = getInertBodyHelper(getDocument());\n const inertBodyElement = inertBodyHelper.getInertBodyElement(unsafeCaseHtml);\n ngDevMode && assertDefined(inertBodyElement, 'Unable to generate inert body element');\n const inertRootNode = getTemplateContent(inertBodyElement) || inertBodyElement;\n if (inertRootNode) {\n return walkIcuTree(ast, tView, tIcu, lView, updateOpCodes, create, remove, update, inertRootNode, parentIdx, nestedIcus, 0);\n } else {\n return 0;\n }\n}\nfunction walkIcuTree(ast, tView, tIcu, lView, sharedUpdateOpCodes, create, remove, update, parentNode, parentIdx, nestedIcus, depth) {\n let bindingMask = 0;\n let currentNode = parentNode.firstChild;\n while (currentNode) {\n const newIndex = allocExpando(tView, lView, 1, null);\n switch (currentNode.nodeType) {\n case Node.ELEMENT_NODE:\n const element = currentNode;\n const tagName = element.tagName.toLowerCase();\n if (VALID_ELEMENTS.hasOwnProperty(tagName)) {\n addCreateNodeAndAppend(create, ELEMENT_MARKER, tagName, parentIdx, newIndex);\n tView.data[newIndex] = tagName;\n const elAttrs = element.attributes;\n for (let i = 0; i < elAttrs.length; i++) {\n const attr = elAttrs.item(i);\n const lowerAttrName = attr.name.toLowerCase();\n const hasBinding = !!attr.value.match(BINDING_REGEXP);\n if (hasBinding) {\n if (VALID_ATTRS.hasOwnProperty(lowerAttrName)) {\n generateBindingUpdateOpCodes(update, attr.value, newIndex, attr.name, 0, SENSITIVE_ATTRS[lowerAttrName] ? _sanitizeUrl : null);\n } else {\n ngDevMode && console.warn(`WARNING: ignoring unsafe attribute value ` + `${lowerAttrName} on element ${tagName} ` + `(see ${XSS_SECURITY_URL})`);\n }\n } else if (VALID_ATTRS[lowerAttrName]) {\n if (SENSITIVE_ATTRS[lowerAttrName]) {\n if (typeof ngDevMode !== 'undefined' && ngDevMode) {\n console.warn(`WARNING: ignoring unsafe attribute ` + `${lowerAttrName} on element ${tagName} ` + `(see ${XSS_SECURITY_URL})`);\n }\n addCreateAttribute(create, newIndex, attr.name, 'unsafe:blocked');\n } else {\n addCreateAttribute(create, newIndex, attr.name, attr.value);\n }\n } else {\n if (typeof ngDevMode !== 'undefined' && ngDevMode) {\n console.warn(`WARNING: ignoring unknown attribute name ` + `${lowerAttrName} on element ${tagName} ` + `(see ${XSS_SECURITY_URL})`);\n }\n }\n }\n const elementNode = {\n kind: 1,\n index: newIndex,\n children: []\n };\n ast.push(elementNode);\n bindingMask = walkIcuTree(elementNode.children, tView, tIcu, lView, sharedUpdateOpCodes, create, remove, update, currentNode, newIndex, nestedIcus, depth + 1) | bindingMask;\n addRemoveNode(remove, newIndex, depth);\n }\n break;\n case Node.TEXT_NODE:\n const value = currentNode.textContent || '';\n const hasBinding = value.match(BINDING_REGEXP);\n addCreateNodeAndAppend(create, null, hasBinding ? '' : value, parentIdx, newIndex);\n addRemoveNode(remove, newIndex, depth);\n if (hasBinding) {\n bindingMask = generateBindingUpdateOpCodes(update, value, newIndex, null, 0, null) | bindingMask;\n }\n ast.push({\n kind: 0,\n index: newIndex\n });\n break;\n case Node.COMMENT_NODE:\n const isNestedIcu = NESTED_ICU.exec(currentNode.textContent || '');\n if (isNestedIcu) {\n const nestedIcuIndex = parseInt(isNestedIcu[1], 10);\n const icuExpression = nestedIcus[nestedIcuIndex];\n addCreateNodeAndAppend(create, ICU_MARKER, ngDevMode ? `nested ICU ${nestedIcuIndex}` : '', parentIdx, newIndex);\n icuStart(ast, tView, lView, sharedUpdateOpCodes, parentIdx, icuExpression, newIndex);\n addRemoveNestedIcu(remove, newIndex, depth);\n }\n break;\n }\n currentNode = currentNode.nextSibling;\n }\n return bindingMask;\n}\nfunction addRemoveNode(remove, index, depth) {\n if (depth === 0) {\n remove.push(index);\n }\n}\nfunction addRemoveNestedIcu(remove, index, depth) {\n if (depth === 0) {\n remove.push(~index);\n remove.push(index);\n }\n}\nfunction addUpdateIcuSwitch(update, icuExpression, index) {\n update.push(toMaskBit(icuExpression.mainBinding), 2, -1 - icuExpression.mainBinding, index << 2 | 2);\n}\nfunction addUpdateIcuUpdate(update, bindingMask, index) {\n update.push(bindingMask, 1, index << 2 | 3);\n}\nfunction addCreateNodeAndAppend(create, marker, text, appendToParentIdx, createAtIdx) {\n if (marker !== null) {\n create.push(marker);\n }\n create.push(text, createAtIdx, icuCreateOpCode(0, appendToParentIdx, createAtIdx));\n}\nfunction addCreateAttribute(create, newIndex, attrName, attrValue) {\n create.push(newIndex << 1 | 1, attrName, attrValue);\n}\nconst ROOT_TEMPLATE_ID = 0;\nconst PP_MULTI_VALUE_PLACEHOLDERS_REGEXP = /\\[(�.+?�?)\\]/;\nconst PP_PLACEHOLDERS_REGEXP = /\\[(�.+?�?)\\]|(�\\/?\\*\\d+:\\d+�)/g;\nconst PP_ICU_VARS_REGEXP = /({\\s*)(VAR_(PLURAL|SELECT)(_\\d+)?)(\\s*,)/g;\nconst PP_ICU_PLACEHOLDERS_REGEXP = /{([A-Z0-9_]+)}/g;\nconst PP_ICUS_REGEXP = /�I18N_EXP_(ICU(_\\d+)?)�/g;\nconst PP_CLOSE_TEMPLATE_REGEXP = /\\/\\*/;\nconst PP_TEMPLATE_ID_REGEXP = /\\d+\\:(\\d+)/;\nfunction i18nPostprocess(message, replacements = {}) {\n let result = message;\n if (PP_MULTI_VALUE_PLACEHOLDERS_REGEXP.test(message)) {\n const matches = {};\n const templateIdsStack = [ROOT_TEMPLATE_ID];\n result = result.replace(PP_PLACEHOLDERS_REGEXP, (m, phs, tmpl) => {\n const content = phs || tmpl;\n const placeholders = matches[content] || [];\n if (!placeholders.length) {\n content.split('|').forEach(placeholder => {\n const match = placeholder.match(PP_TEMPLATE_ID_REGEXP);\n const templateId = match ? parseInt(match[1], 10) : ROOT_TEMPLATE_ID;\n const isCloseTemplateTag = PP_CLOSE_TEMPLATE_REGEXP.test(placeholder);\n placeholders.push([templateId, isCloseTemplateTag, placeholder]);\n });\n matches[content] = placeholders;\n }\n if (!placeholders.length) {\n throw new Error(`i18n postprocess: unmatched placeholder - ${content}`);\n }\n const currentTemplateId = templateIdsStack[templateIdsStack.length - 1];\n let idx = 0;\n for (let i = 0; i < placeholders.length; i++) {\n if (placeholders[i][0] === currentTemplateId) {\n idx = i;\n break;\n }\n }\n const [templateId, isCloseTemplateTag, placeholder] = placeholders[idx];\n if (isCloseTemplateTag) {\n templateIdsStack.pop();\n } else if (currentTemplateId !== templateId) {\n templateIdsStack.push(templateId);\n }\n placeholders.splice(idx, 1);\n return placeholder;\n });\n }\n if (!Object.keys(replacements).length) {\n return result;\n }\n result = result.replace(PP_ICU_VARS_REGEXP, (match, start, key, _type, _idx, end) => {\n return replacements.hasOwnProperty(key) ? `${start}${replacements[key]}${end}` : match;\n });\n result = result.replace(PP_ICU_PLACEHOLDERS_REGEXP, (match, key) => {\n return replacements.hasOwnProperty(key) ? replacements[key] : match;\n });\n result = result.replace(PP_ICUS_REGEXP, (match, key) => {\n if (replacements.hasOwnProperty(key)) {\n const list = replacements[key];\n if (!list.length) {\n throw new Error(`i18n postprocess: unmatched ICU - ${match} with key: ${key}`);\n }\n return list.shift();\n }\n return match;\n });\n return result;\n}\nfunction ɵɵi18nStart(index, messageIndex, subTemplateIndex = -1) {\n const tView = getTView();\n const lView = getLView();\n const adjustedIndex = HEADER_OFFSET + index;\n ngDevMode && assertDefined(tView, `tView should be defined`);\n const message = getConstant(tView.consts, messageIndex);\n const parentTNode = getCurrentParentTNode();\n if (tView.firstCreatePass) {\n i18nStartFirstCreatePass(tView, parentTNode === null ? 0 : parentTNode.index, lView, adjustedIndex, message, subTemplateIndex);\n }\n if (tView.type === 2) {\n const componentLView = lView[DECLARATION_COMPONENT_VIEW];\n componentLView[FLAGS] |= 32;\n } else {\n lView[FLAGS] |= 32;\n }\n const tI18n = tView.data[adjustedIndex];\n const sameViewParentTNode = parentTNode === lView[T_HOST] ? null : parentTNode;\n const parentRNode = getClosestRElement(tView, sameViewParentTNode, lView);\n const insertInFrontOf = parentTNode && parentTNode.type & 8 ? lView[parentTNode.index] : null;\n prepareI18nBlockForHydration(lView, adjustedIndex, parentTNode, subTemplateIndex);\n applyCreateOpCodes(lView, tI18n.create, parentRNode, insertInFrontOf);\n setInI18nBlock(true);\n}\nfunction ɵɵi18nEnd() {\n setInI18nBlock(false);\n}\nfunction ɵɵi18n(index, messageIndex, subTemplateIndex) {\n ɵɵi18nStart(index, messageIndex, subTemplateIndex);\n ɵɵi18nEnd();\n}\nfunction ɵɵi18nAttributes(index, attrsIndex) {\n const tView = getTView();\n ngDevMode && assertDefined(tView, `tView should be defined`);\n const attrs = getConstant(tView.consts, attrsIndex);\n i18nAttributesFirstPass(tView, index + HEADER_OFFSET, attrs);\n}\nfunction ɵɵi18nExp(value) {\n const lView = getLView();\n setMaskBit(bindingUpdated(lView, nextBindingIndex(), value));\n return ɵɵi18nExp;\n}\nfunction ɵɵi18nApply(index) {\n applyI18n(getTView(), getLView(), index + HEADER_OFFSET);\n}\nfunction ɵɵi18nPostprocess(message, replacements = {}) {\n return i18nPostprocess(message, replacements);\n}\nfunction ɵɵlistener(eventName, listenerFn, eventTargetResolver) {\n const lView = getLView();\n const tView = getTView();\n const tNode = getCurrentTNode();\n listenerInternal(tView, lView, lView[RENDERER], tNode, eventName, listenerFn, eventTargetResolver);\n return ɵɵlistener;\n}\nfunction ɵɵsyntheticHostListener(eventName, listenerFn) {\n const tNode = getCurrentTNode();\n const lView = getLView();\n const tView = getTView();\n const currentDef = getCurrentDirectiveDef(tView.data);\n const renderer = loadComponentRenderer(currentDef, tNode, lView);\n listenerInternal(tView, lView, renderer, tNode, eventName, listenerFn);\n return ɵɵsyntheticHostListener;\n}\nfunction ɵɵdomListener(eventName, listenerFn, eventTargetResolver) {\n const lView = getLView();\n const tView = getTView();\n const tNode = getCurrentTNode();\n if (tNode.type & 3 || eventTargetResolver) {\n listenToDomEvent(tNode, tView, lView, eventTargetResolver, lView[RENDERER], eventName, listenerFn, wrapListener(tNode, lView, listenerFn));\n }\n return ɵɵdomListener;\n}\nfunction listenerInternal(tView, lView, renderer, tNode, eventName, listenerFn, eventTargetResolver) {\n ngDevMode && assertTNodeType(tNode, 3 | 12);\n let processOutputs = true;\n let wrappedListener = null;\n if (tNode.type & 3 || eventTargetResolver) {\n wrappedListener ??= wrapListener(tNode, lView, listenerFn);\n const hasCoalescedDomEvent = listenToDomEvent(tNode, tView, lView, eventTargetResolver, renderer, eventName, listenerFn, wrappedListener);\n if (hasCoalescedDomEvent) {\n processOutputs = false;\n }\n }\n if (processOutputs) {\n const outputConfig = tNode.outputs?.[eventName];\n const hostDirectiveOutputConfig = tNode.hostDirectiveOutputs?.[eventName];\n if (hostDirectiveOutputConfig && hostDirectiveOutputConfig.length) {\n for (let i = 0; i < hostDirectiveOutputConfig.length; i += 2) {\n const index = hostDirectiveOutputConfig[i];\n const lookupName = hostDirectiveOutputConfig[i + 1];\n wrappedListener ??= wrapListener(tNode, lView, listenerFn);\n listenToOutput(tNode, lView, index, lookupName, eventName, wrappedListener);\n }\n }\n if (outputConfig && outputConfig.length) {\n for (const index of outputConfig) {\n wrappedListener ??= wrapListener(tNode, lView, listenerFn);\n listenToOutput(tNode, lView, index, eventName, eventName, wrappedListener);\n }\n }\n }\n}\nfunction ɵɵnextContext(level = 1) {\n return nextContextImpl(level);\n}\nfunction matchingProjectionSlotIndex(tNode, projectionSlots) {\n let wildcardNgContentIndex = null;\n const ngProjectAsAttrVal = getProjectAsAttrValue(tNode);\n for (let i = 0; i < projectionSlots.length; i++) {\n const slotValue = projectionSlots[i];\n if (slotValue === '*') {\n wildcardNgContentIndex = i;\n continue;\n }\n if (ngProjectAsAttrVal === null ? isNodeMatchingSelectorList(tNode, slotValue, true) : isSelectorInSelectorList(ngProjectAsAttrVal, slotValue)) {\n return i;\n }\n }\n return wildcardNgContentIndex;\n}\nfunction ɵɵprojectionDef(projectionSlots) {\n const componentNode = getLView()[DECLARATION_COMPONENT_VIEW][T_HOST];\n if (!componentNode.projection) {\n const numProjectionSlots = projectionSlots ? projectionSlots.length : 1;\n const projectionHeads = componentNode.projection = newArray(numProjectionSlots, null);\n const tails = projectionHeads.slice();\n let componentChild = componentNode.child;\n while (componentChild !== null) {\n if (componentChild.type !== 128) {\n const slotIndex = projectionSlots ? matchingProjectionSlotIndex(componentChild, projectionSlots) : 0;\n if (slotIndex !== null) {\n if (tails[slotIndex]) {\n tails[slotIndex].projectionNext = componentChild;\n } else {\n projectionHeads[slotIndex] = componentChild;\n }\n tails[slotIndex] = componentChild;\n }\n }\n componentChild = componentChild.next;\n }\n }\n}\nfunction ɵɵprojection(nodeIndex, selectorIndex = 0, attrs, fallbackTemplateFn, fallbackDecls, fallbackVars) {\n const lView = getLView();\n const tView = getTView();\n const fallbackIndex = fallbackTemplateFn ? nodeIndex + 1 : null;\n if (fallbackIndex !== null) {\n declareNoDirectiveHostTemplate(lView, tView, fallbackIndex, fallbackTemplateFn, fallbackDecls, fallbackVars, null, attrs);\n }\n const tProjectionNode = getOrCreateTNode(tView, HEADER_OFFSET + nodeIndex, 16, null, attrs || null);\n if (tProjectionNode.projection === null) {\n tProjectionNode.projection = selectorIndex;\n }\n setCurrentTNodeAsNotParent();\n const hydrationInfo = lView[HYDRATION];\n const isNodeCreationMode = !hydrationInfo || isInSkipHydrationBlock$1();\n const componentHostNode = lView[DECLARATION_COMPONENT_VIEW][T_HOST];\n const isEmpty = componentHostNode.projection[tProjectionNode.projection] === null;\n if (isEmpty && fallbackIndex !== null) {\n insertFallbackContent(lView, tView, fallbackIndex);\n } else if (isNodeCreationMode && !isDetachedByI18n(tProjectionNode)) {\n applyProjection(tView, lView, tProjectionNode);\n }\n}\nfunction insertFallbackContent(lView, tView, fallbackIndex) {\n const adjustedIndex = HEADER_OFFSET + fallbackIndex;\n const fallbackTNode = tView.data[adjustedIndex];\n const fallbackLContainer = lView[adjustedIndex];\n ngDevMode && assertTNode(fallbackTNode);\n ngDevMode && assertLContainer(fallbackLContainer);\n const dehydratedView = findMatchingDehydratedView(fallbackLContainer, fallbackTNode.tView.ssrId);\n const fallbackLView = createAndRenderEmbeddedLView(lView, fallbackTNode, undefined, {\n dehydratedView\n });\n addLViewToLContainer(fallbackLContainer, fallbackLView, 0, shouldAddViewToDom(fallbackTNode, dehydratedView));\n}\nfunction ɵɵcontentQuery(directiveIndex, predicate, flags, read) {\n createContentQuery(directiveIndex, predicate, flags, read);\n return ɵɵcontentQuery;\n}\nfunction ɵɵviewQuery(predicate, flags, read) {\n createViewQuery(predicate, flags, read);\n return ɵɵviewQuery;\n}\nfunction ɵɵqueryRefresh(queryList) {\n const lView = getLView();\n const tView = getTView();\n const queryIndex = getCurrentQueryIndex();\n setCurrentQueryIndex(queryIndex + 1);\n const tQuery = getTQuery(tView, queryIndex);\n if (queryList.dirty && isCreationMode(lView) === ((tQuery.metadata.flags & 2) === 2)) {\n if (tQuery.matches === null) {\n queryList.reset([]);\n } else {\n const result = getQueryResults(lView, queryIndex);\n queryList.reset(result, unwrapElementRef);\n queryList.notifyOnChanges();\n }\n return true;\n }\n return false;\n}\nfunction ɵɵloadQuery() {\n return loadQueryInternal(getLView(), getCurrentQueryIndex());\n}\nfunction ɵɵcontentQuerySignal(directiveIndex, target, predicate, flags, read) {\n bindQueryToSignal(target, createContentQuery(directiveIndex, predicate, flags, read));\n return ɵɵcontentQuerySignal;\n}\nfunction ɵɵviewQuerySignal(target, predicate, flags, read) {\n bindQueryToSignal(target, createViewQuery(predicate, flags, read));\n return ɵɵviewQuerySignal;\n}\nfunction ɵɵqueryAdvance(indexOffset = 1) {\n setCurrentQueryIndex(getCurrentQueryIndex() + indexOffset);\n}\nfunction ɵɵreference(index) {\n const contextLView = getContextLView();\n return load(contextLView, HEADER_OFFSET + index);\n}\nfunction toTStylingRange(prev, next) {\n ngDevMode && assertNumberInRange(prev, 0, 32767);\n ngDevMode && assertNumberInRange(next, 0, 32767);\n return prev << 17 | next << 2;\n}\nfunction getTStylingRangePrev(tStylingRange) {\n ngDevMode && assertNumber(tStylingRange, 'expected number');\n return tStylingRange >> 17 & 32767;\n}\nfunction getTStylingRangePrevDuplicate(tStylingRange) {\n ngDevMode && assertNumber(tStylingRange, 'expected number');\n return (tStylingRange & 2) == 2;\n}\nfunction setTStylingRangePrev(tStylingRange, previous) {\n ngDevMode && assertNumber(tStylingRange, 'expected number');\n ngDevMode && assertNumberInRange(previous, 0, 32767);\n return tStylingRange & ~4294836224 | previous << 17;\n}\nfunction setTStylingRangePrevDuplicate(tStylingRange) {\n ngDevMode && assertNumber(tStylingRange, 'expected number');\n return tStylingRange | 2;\n}\nfunction getTStylingRangeNext(tStylingRange) {\n ngDevMode && assertNumber(tStylingRange, 'expected number');\n return (tStylingRange & 131068) >> 2;\n}\nfunction setTStylingRangeNext(tStylingRange, next) {\n ngDevMode && assertNumber(tStylingRange, 'expected number');\n ngDevMode && assertNumberInRange(next, 0, 32767);\n return tStylingRange & ~131068 | next << 2;\n}\nfunction getTStylingRangeNextDuplicate(tStylingRange) {\n ngDevMode && assertNumber(tStylingRange, 'expected number');\n return (tStylingRange & 1) === 1;\n}\nfunction setTStylingRangeNextDuplicate(tStylingRange) {\n ngDevMode && assertNumber(tStylingRange, 'expected number');\n return tStylingRange | 1;\n}\nfunction insertTStylingBinding(tData, tNode, tStylingKeyWithStatic, index, isHostBinding, isClassBinding) {\n ngDevMode && assertFirstUpdatePass(getTView());\n let tBindings = isClassBinding ? tNode.classBindings : tNode.styleBindings;\n let tmplHead = getTStylingRangePrev(tBindings);\n let tmplTail = getTStylingRangeNext(tBindings);\n tData[index] = tStylingKeyWithStatic;\n let isKeyDuplicateOfStatic = false;\n let tStylingKey;\n if (Array.isArray(tStylingKeyWithStatic)) {\n const staticKeyValueArray = tStylingKeyWithStatic;\n tStylingKey = staticKeyValueArray[1];\n if (tStylingKey === null || keyValueArrayIndexOf(staticKeyValueArray, tStylingKey) > 0) {\n isKeyDuplicateOfStatic = true;\n }\n } else {\n tStylingKey = tStylingKeyWithStatic;\n }\n if (isHostBinding) {\n const hasTemplateBindings = tmplTail !== 0;\n if (hasTemplateBindings) {\n const previousNode = getTStylingRangePrev(tData[tmplHead + 1]);\n tData[index + 1] = toTStylingRange(previousNode, tmplHead);\n if (previousNode !== 0) {\n tData[previousNode + 1] = setTStylingRangeNext(tData[previousNode + 1], index);\n }\n tData[tmplHead + 1] = setTStylingRangePrev(tData[tmplHead + 1], index);\n } else {\n tData[index + 1] = toTStylingRange(tmplHead, 0);\n if (tmplHead !== 0) {\n tData[tmplHead + 1] = setTStylingRangeNext(tData[tmplHead + 1], index);\n }\n tmplHead = index;\n }\n } else {\n tData[index + 1] = toTStylingRange(tmplTail, 0);\n ngDevMode && assertEqual(tmplHead !== 0 && tmplTail === 0, false, 'Adding template bindings after hostBindings is not allowed.');\n if (tmplHead === 0) {\n tmplHead = index;\n } else {\n tData[tmplTail + 1] = setTStylingRangeNext(tData[tmplTail + 1], index);\n }\n tmplTail = index;\n }\n if (isKeyDuplicateOfStatic) {\n tData[index + 1] = setTStylingRangePrevDuplicate(tData[index + 1]);\n }\n markDuplicates(tData, tStylingKey, index, true);\n markDuplicates(tData, tStylingKey, index, false);\n markDuplicateOfResidualStyling(tNode, tStylingKey, tData, index, isClassBinding);\n tBindings = toTStylingRange(tmplHead, tmplTail);\n if (isClassBinding) {\n tNode.classBindings = tBindings;\n } else {\n tNode.styleBindings = tBindings;\n }\n}\nfunction markDuplicateOfResidualStyling(tNode, tStylingKey, tData, index, isClassBinding) {\n const residual = isClassBinding ? tNode.residualClasses : tNode.residualStyles;\n if (residual != null && typeof tStylingKey == 'string' && keyValueArrayIndexOf(residual, tStylingKey) >= 0) {\n tData[index + 1] = setTStylingRangeNextDuplicate(tData[index + 1]);\n }\n}\nfunction markDuplicates(tData, tStylingKey, index, isPrevDir) {\n const tStylingAtIndex = tData[index + 1];\n const isMap = tStylingKey === null;\n let cursor = isPrevDir ? getTStylingRangePrev(tStylingAtIndex) : getTStylingRangeNext(tStylingAtIndex);\n let foundDuplicate = false;\n while (cursor !== 0 && (foundDuplicate === false || isMap)) {\n ngDevMode && assertIndexInRange(tData, cursor);\n const tStylingValueAtCursor = tData[cursor];\n const tStyleRangeAtCursor = tData[cursor + 1];\n if (isStylingMatch(tStylingValueAtCursor, tStylingKey)) {\n foundDuplicate = true;\n tData[cursor + 1] = isPrevDir ? setTStylingRangeNextDuplicate(tStyleRangeAtCursor) : setTStylingRangePrevDuplicate(tStyleRangeAtCursor);\n }\n cursor = isPrevDir ? getTStylingRangePrev(tStyleRangeAtCursor) : getTStylingRangeNext(tStyleRangeAtCursor);\n }\n if (foundDuplicate) {\n tData[index + 1] = isPrevDir ? setTStylingRangePrevDuplicate(tStylingAtIndex) : setTStylingRangeNextDuplicate(tStylingAtIndex);\n }\n}\nfunction isStylingMatch(tStylingKeyCursor, tStylingKey) {\n ngDevMode && assertNotEqual(Array.isArray(tStylingKey), true, \"Expected that 'tStylingKey' has been unwrapped\");\n if (tStylingKeyCursor === null || tStylingKey == null || (Array.isArray(tStylingKeyCursor) ? tStylingKeyCursor[1] : tStylingKeyCursor) === tStylingKey) {\n return true;\n } else if (Array.isArray(tStylingKeyCursor) && typeof tStylingKey === 'string') {\n return keyValueArrayIndexOf(tStylingKeyCursor, tStylingKey) >= 0;\n }\n return false;\n}\nconst parserState = {\n textEnd: 0,\n key: 0,\n keyEnd: 0,\n value: 0,\n valueEnd: 0\n};\nfunction getLastParsedKey(text) {\n return text.substring(parserState.key, parserState.keyEnd);\n}\nfunction getLastParsedValue(text) {\n return text.substring(parserState.value, parserState.valueEnd);\n}\nfunction parseClassName(text) {\n resetParserState(text);\n return parseClassNameNext(text, consumeWhitespace(text, 0, parserState.textEnd));\n}\nfunction parseClassNameNext(text, index) {\n const end = parserState.textEnd;\n if (end === index) {\n return -1;\n }\n index = parserState.keyEnd = consumeClassToken(text, parserState.key = index, end);\n return consumeWhitespace(text, index, end);\n}\nfunction parseStyle(text) {\n resetParserState(text);\n return parseStyleNext(text, consumeWhitespace(text, 0, parserState.textEnd));\n}\nfunction parseStyleNext(text, startIndex) {\n const end = parserState.textEnd;\n let index = parserState.key = consumeWhitespace(text, startIndex, end);\n if (end === index) {\n return -1;\n }\n index = parserState.keyEnd = consumeStyleKey(text, index, end);\n index = consumeSeparator(text, index, end, 58);\n index = parserState.value = consumeWhitespace(text, index, end);\n index = parserState.valueEnd = consumeStyleValue(text, index, end);\n return consumeSeparator(text, index, end, 59);\n}\nfunction resetParserState(text) {\n parserState.key = 0;\n parserState.keyEnd = 0;\n parserState.value = 0;\n parserState.valueEnd = 0;\n parserState.textEnd = text.length;\n}\nfunction consumeWhitespace(text, startIndex, endIndex) {\n while (startIndex < endIndex && text.charCodeAt(startIndex) <= 32) {\n startIndex++;\n }\n return startIndex;\n}\nfunction consumeClassToken(text, startIndex, endIndex) {\n while (startIndex < endIndex && text.charCodeAt(startIndex) > 32) {\n startIndex++;\n }\n return startIndex;\n}\nfunction consumeStyleKey(text, startIndex, endIndex) {\n let ch;\n while (startIndex < endIndex && ((ch = text.charCodeAt(startIndex)) === 45 || ch === 95 || (ch & -33) >= 65 && (ch & -33) <= 90 || ch >= 48 && ch <= 57)) {\n startIndex++;\n }\n return startIndex;\n}\nfunction consumeSeparator(text, startIndex, endIndex, separator) {\n startIndex = consumeWhitespace(text, startIndex, endIndex);\n if (startIndex < endIndex) {\n if (ngDevMode && text.charCodeAt(startIndex) !== separator) {\n malformedStyleError(text, String.fromCharCode(separator), startIndex);\n }\n startIndex++;\n }\n return startIndex;\n}\nfunction consumeStyleValue(text, startIndex, endIndex) {\n let ch1 = -1;\n let ch2 = -1;\n let ch3 = -1;\n let i = startIndex;\n let lastChIndex = i;\n while (i < endIndex) {\n const ch = text.charCodeAt(i++);\n if (ch === 59) {\n return lastChIndex;\n } else if (ch === 34 || ch === 39) {\n lastChIndex = i = consumeQuotedText(text, ch, i, endIndex);\n } else if (startIndex === i - 4 && ch3 === 85 && ch2 === 82 && ch1 === 76 && ch === 40) {\n lastChIndex = i = consumeQuotedText(text, 41, i, endIndex);\n } else if (ch > 32) {\n lastChIndex = i;\n }\n ch3 = ch2;\n ch2 = ch1;\n ch1 = ch & -33;\n }\n return lastChIndex;\n}\nfunction consumeQuotedText(text, quoteCharCode, startIndex, endIndex) {\n let ch1 = -1;\n let index = startIndex;\n while (index < endIndex) {\n const ch = text.charCodeAt(index++);\n if (ch == quoteCharCode && ch1 !== 92) {\n return index;\n }\n if (ch == 92 && ch1 === 92) {\n ch1 = 0;\n } else {\n ch1 = ch;\n }\n }\n throw ngDevMode ? malformedStyleError(text, String.fromCharCode(quoteCharCode), endIndex) : new Error();\n}\nfunction malformedStyleError(text, expecting, index) {\n ngDevMode && assertEqual(typeof text === 'string', true, 'String expected here');\n throw throwError(`Malformed style at location ${index} in string '` + text.substring(0, index) + '[>>' + text.substring(index, index + 1) + '<<]' + text.slice(index + 1) + `'. Expecting '${expecting}'.`);\n}\nfunction ɵɵstyleProp(prop, value, suffix) {\n checkStylingProperty(prop, value, suffix, false);\n return ɵɵstyleProp;\n}\nfunction ɵɵclassProp(className, value) {\n checkStylingProperty(className, value, null, true);\n return ɵɵclassProp;\n}\nfunction ɵɵstyleMap(styles) {\n checkStylingMap(styleKeyValueArraySet, styleStringParser, styles, false);\n}\nfunction styleStringParser(keyValueArray, text) {\n for (let i = parseStyle(text); i >= 0; i = parseStyleNext(text, i)) {\n styleKeyValueArraySet(keyValueArray, getLastParsedKey(text), getLastParsedValue(text));\n }\n}\nfunction ɵɵclassMap(classes) {\n checkStylingMap(classKeyValueArraySet, classStringParser, classes, true);\n}\nfunction classStringParser(keyValueArray, text) {\n for (let i = parseClassName(text); i >= 0; i = parseClassNameNext(text, i)) {\n keyValueArraySet(keyValueArray, getLastParsedKey(text), true);\n }\n}\nfunction checkStylingProperty(prop, value, suffix, isClassBased) {\n const lView = getLView();\n const tView = getTView();\n const bindingIndex = incrementBindingIndex(2);\n if (tView.firstUpdatePass) {\n stylingFirstUpdatePass(tView, prop, bindingIndex, isClassBased);\n }\n if (value !== NO_CHANGE && bindingUpdated(lView, bindingIndex, value)) {\n const tNode = tView.data[getSelectedIndex()];\n updateStyling(tView, tNode, lView, lView[RENDERER], prop, lView[bindingIndex + 1] = normalizeSuffix(value, suffix), isClassBased, bindingIndex);\n }\n}\nfunction checkStylingMap(keyValueArraySet, stringParser, value, isClassBased) {\n const tView = getTView();\n const bindingIndex = incrementBindingIndex(2);\n if (tView.firstUpdatePass) {\n stylingFirstUpdatePass(tView, null, bindingIndex, isClassBased);\n }\n const lView = getLView();\n if (value !== NO_CHANGE && bindingUpdated(lView, bindingIndex, value)) {\n const tNode = tView.data[getSelectedIndex()];\n if (hasStylingInputShadow(tNode, isClassBased) && !isInHostBindings(tView, bindingIndex)) {\n if (ngDevMode) {\n const tStylingKey = tView.data[bindingIndex];\n assertEqual(Array.isArray(tStylingKey) ? tStylingKey[1] : tStylingKey, false, \"Styling linked list shadow input should be marked as 'false'\");\n }\n let staticPrefix = isClassBased ? tNode.classesWithoutHost : tNode.stylesWithoutHost;\n ngDevMode && isClassBased === false && staticPrefix !== null && assertEqual(staticPrefix.endsWith(';'), true, \"Expecting static portion to end with ';'\");\n if (staticPrefix !== null) {\n value = concatStringsWithSpace(staticPrefix, value ? value : '');\n }\n setDirectiveInputsWhichShadowsStyling(tView, tNode, lView, value, isClassBased);\n } else {\n updateStylingMap(tView, tNode, lView, lView[RENDERER], lView[bindingIndex + 1], lView[bindingIndex + 1] = toStylingKeyValueArray(keyValueArraySet, stringParser, value), isClassBased, bindingIndex);\n }\n }\n}\nfunction isInHostBindings(tView, bindingIndex) {\n return bindingIndex >= tView.expandoStartIndex;\n}\nfunction stylingFirstUpdatePass(tView, tStylingKey, bindingIndex, isClassBased) {\n ngDevMode && assertFirstUpdatePass(tView);\n const tData = tView.data;\n if (tData[bindingIndex + 1] === null) {\n const tNode = tData[getSelectedIndex()];\n ngDevMode && assertDefined(tNode, 'TNode expected');\n const isHostBindings = isInHostBindings(tView, bindingIndex);\n if (hasStylingInputShadow(tNode, isClassBased) && tStylingKey === null && !isHostBindings) {\n tStylingKey = false;\n }\n tStylingKey = wrapInStaticStylingKey(tData, tNode, tStylingKey, isClassBased);\n insertTStylingBinding(tData, tNode, tStylingKey, bindingIndex, isHostBindings, isClassBased);\n }\n}\nfunction wrapInStaticStylingKey(tData, tNode, stylingKey, isClassBased) {\n const hostDirectiveDef = getCurrentDirectiveDef(tData);\n let residual = isClassBased ? tNode.residualClasses : tNode.residualStyles;\n if (hostDirectiveDef === null) {\n const isFirstStylingInstructionInTemplate = (isClassBased ? tNode.classBindings : tNode.styleBindings) === 0;\n if (isFirstStylingInstructionInTemplate) {\n stylingKey = collectStylingFromDirectives(null, tData, tNode, stylingKey, isClassBased);\n stylingKey = collectStylingFromTAttrs(stylingKey, tNode.attrs, isClassBased);\n residual = null;\n }\n } else {\n const directiveStylingLast = tNode.directiveStylingLast;\n const isFirstStylingInstructionInHostBinding = directiveStylingLast === -1 || tData[directiveStylingLast] !== hostDirectiveDef;\n if (isFirstStylingInstructionInHostBinding) {\n stylingKey = collectStylingFromDirectives(hostDirectiveDef, tData, tNode, stylingKey, isClassBased);\n if (residual === null) {\n let templateStylingKey = getTemplateHeadTStylingKey(tData, tNode, isClassBased);\n if (templateStylingKey !== undefined && Array.isArray(templateStylingKey)) {\n templateStylingKey = collectStylingFromDirectives(null, tData, tNode, templateStylingKey[1], isClassBased);\n templateStylingKey = collectStylingFromTAttrs(templateStylingKey, tNode.attrs, isClassBased);\n setTemplateHeadTStylingKey(tData, tNode, isClassBased, templateStylingKey);\n }\n } else {\n residual = collectResidual(tData, tNode, isClassBased);\n }\n }\n }\n if (residual !== undefined) {\n isClassBased ? tNode.residualClasses = residual : tNode.residualStyles = residual;\n }\n return stylingKey;\n}\nfunction getTemplateHeadTStylingKey(tData, tNode, isClassBased) {\n const bindings = isClassBased ? tNode.classBindings : tNode.styleBindings;\n if (getTStylingRangeNext(bindings) === 0) {\n return undefined;\n }\n return tData[getTStylingRangePrev(bindings)];\n}\nfunction setTemplateHeadTStylingKey(tData, tNode, isClassBased, tStylingKey) {\n const bindings = isClassBased ? tNode.classBindings : tNode.styleBindings;\n ngDevMode && assertNotEqual(getTStylingRangeNext(bindings), 0, 'Expecting to have at least one template styling binding.');\n tData[getTStylingRangePrev(bindings)] = tStylingKey;\n}\nfunction collectResidual(tData, tNode, isClassBased) {\n let residual = undefined;\n const directiveEnd = tNode.directiveEnd;\n ngDevMode && assertNotEqual(tNode.directiveStylingLast, -1, 'By the time this function gets called at least one hostBindings-node styling instruction must have executed.');\n for (let i = 1 + tNode.directiveStylingLast; i < directiveEnd; i++) {\n const attrs = tData[i].hostAttrs;\n residual = collectStylingFromTAttrs(residual, attrs, isClassBased);\n }\n return collectStylingFromTAttrs(residual, tNode.attrs, isClassBased);\n}\nfunction collectStylingFromDirectives(hostDirectiveDef, tData, tNode, stylingKey, isClassBased) {\n let currentDirective = null;\n const directiveEnd = tNode.directiveEnd;\n let directiveStylingLast = tNode.directiveStylingLast;\n if (directiveStylingLast === -1) {\n directiveStylingLast = tNode.directiveStart;\n } else {\n directiveStylingLast++;\n }\n while (directiveStylingLast < directiveEnd) {\n currentDirective = tData[directiveStylingLast];\n ngDevMode && assertDefined(currentDirective, 'expected to be defined');\n stylingKey = collectStylingFromTAttrs(stylingKey, currentDirective.hostAttrs, isClassBased);\n if (currentDirective === hostDirectiveDef) break;\n directiveStylingLast++;\n }\n if (hostDirectiveDef !== null) {\n tNode.directiveStylingLast = directiveStylingLast;\n }\n return stylingKey;\n}\nfunction collectStylingFromTAttrs(stylingKey, attrs, isClassBased) {\n const desiredMarker = isClassBased ? 1 : 2;\n let currentMarker = -1;\n if (attrs !== null) {\n for (let i = 0; i < attrs.length; i++) {\n const item = attrs[i];\n if (typeof item === 'number') {\n currentMarker = item;\n } else {\n if (currentMarker === desiredMarker) {\n if (!Array.isArray(stylingKey)) {\n stylingKey = stylingKey === undefined ? [] : ['', stylingKey];\n }\n keyValueArraySet(stylingKey, item, isClassBased ? true : attrs[++i]);\n }\n }\n }\n }\n return stylingKey === undefined ? null : stylingKey;\n}\nfunction toStylingKeyValueArray(keyValueArraySet, stringParser, value) {\n if (value == null || value === '') return EMPTY_ARRAY;\n const styleKeyValueArray = [];\n const unwrappedValue = unwrapSafeValue(value);\n if (Array.isArray(unwrappedValue)) {\n for (let i = 0; i < unwrappedValue.length; i++) {\n keyValueArraySet(styleKeyValueArray, unwrappedValue[i], true);\n }\n } else if (unwrappedValue instanceof Set) {\n for (const current of unwrappedValue) {\n keyValueArraySet(styleKeyValueArray, current, true);\n }\n } else if (typeof unwrappedValue === 'object') {\n for (const key in unwrappedValue) {\n if (unwrappedValue.hasOwnProperty(key)) {\n keyValueArraySet(styleKeyValueArray, key, unwrappedValue[key]);\n }\n }\n } else if (typeof unwrappedValue === 'string') {\n stringParser(styleKeyValueArray, unwrappedValue);\n } else {\n ngDevMode && throwError('Unsupported styling type: ' + typeof unwrappedValue + ' (' + unwrappedValue + ')');\n }\n return styleKeyValueArray;\n}\nfunction styleKeyValueArraySet(keyValueArray, key, value) {\n keyValueArraySet(keyValueArray, key, unwrapSafeValue(value));\n}\nfunction classKeyValueArraySet(keyValueArray, key, value) {\n const stringKey = String(key);\n if (stringKey !== '' && !stringKey.includes(' ')) {\n keyValueArraySet(keyValueArray, stringKey, value);\n }\n}\nfunction updateStylingMap(tView, tNode, lView, renderer, oldKeyValueArray, newKeyValueArray, isClassBased, bindingIndex) {\n if (oldKeyValueArray === NO_CHANGE) {\n oldKeyValueArray = EMPTY_ARRAY;\n }\n let oldIndex = 0;\n let newIndex = 0;\n let oldKey = 0 < oldKeyValueArray.length ? oldKeyValueArray[0] : null;\n let newKey = 0 < newKeyValueArray.length ? newKeyValueArray[0] : null;\n while (oldKey !== null || newKey !== null) {\n ngDevMode && assertLessThan(oldIndex, 999, 'Are we stuck in infinite loop?');\n ngDevMode && assertLessThan(newIndex, 999, 'Are we stuck in infinite loop?');\n const oldValue = oldIndex < oldKeyValueArray.length ? oldKeyValueArray[oldIndex + 1] : undefined;\n const newValue = newIndex < newKeyValueArray.length ? newKeyValueArray[newIndex + 1] : undefined;\n let setKey = null;\n let setValue = undefined;\n if (oldKey === newKey) {\n oldIndex += 2;\n newIndex += 2;\n if (oldValue !== newValue) {\n setKey = newKey;\n setValue = newValue;\n }\n } else if (newKey === null || oldKey !== null && oldKey < newKey) {\n oldIndex += 2;\n setKey = oldKey;\n } else {\n ngDevMode && assertDefined(newKey, 'Expecting to have a valid key');\n newIndex += 2;\n setKey = newKey;\n setValue = newValue;\n }\n if (setKey !== null) {\n updateStyling(tView, tNode, lView, renderer, setKey, setValue, isClassBased, bindingIndex);\n }\n oldKey = oldIndex < oldKeyValueArray.length ? oldKeyValueArray[oldIndex] : null;\n newKey = newIndex < newKeyValueArray.length ? newKeyValueArray[newIndex] : null;\n }\n}\nfunction updateStyling(tView, tNode, lView, renderer, prop, value, isClassBased, bindingIndex) {\n if (!(tNode.type & 3)) {\n return;\n }\n const tData = tView.data;\n const tRange = tData[bindingIndex + 1];\n const higherPriorityValue = getTStylingRangeNextDuplicate(tRange) ? findStylingValue(tData, tNode, lView, prop, getTStylingRangeNext(tRange), isClassBased) : undefined;\n if (!isStylingValuePresent(higherPriorityValue)) {\n if (!isStylingValuePresent(value)) {\n if (getTStylingRangePrevDuplicate(tRange)) {\n value = findStylingValue(tData, null, lView, prop, bindingIndex, isClassBased);\n }\n }\n const rNode = getNativeByIndex(getSelectedIndex(), lView);\n applyStyling(renderer, isClassBased, rNode, prop, value);\n }\n}\nfunction findStylingValue(tData, tNode, lView, prop, index, isClassBased) {\n const isPrevDirection = tNode === null;\n let value = undefined;\n while (index > 0) {\n const rawKey = tData[index];\n const containsStatics = Array.isArray(rawKey);\n const key = containsStatics ? rawKey[1] : rawKey;\n const isStylingMap = key === null;\n let valueAtLViewIndex = lView[index + 1];\n if (valueAtLViewIndex === NO_CHANGE) {\n valueAtLViewIndex = isStylingMap ? EMPTY_ARRAY : undefined;\n }\n let currentValue = isStylingMap ? keyValueArrayGet(valueAtLViewIndex, prop) : key === prop ? valueAtLViewIndex : undefined;\n if (containsStatics && !isStylingValuePresent(currentValue)) {\n currentValue = keyValueArrayGet(rawKey, prop);\n }\n if (isStylingValuePresent(currentValue)) {\n value = currentValue;\n if (isPrevDirection) {\n return value;\n }\n }\n const tRange = tData[index + 1];\n index = isPrevDirection ? getTStylingRangePrev(tRange) : getTStylingRangeNext(tRange);\n }\n if (tNode !== null) {\n let residual = isClassBased ? tNode.residualClasses : tNode.residualStyles;\n if (residual != null) {\n value = keyValueArrayGet(residual, prop);\n }\n }\n return value;\n}\nfunction isStylingValuePresent(value) {\n return value !== undefined;\n}\nfunction normalizeSuffix(value, suffix) {\n if (value == null || value === '') ;else if (typeof suffix === 'string') {\n value = value + suffix;\n } else if (typeof value === 'object') {\n value = stringify(unwrapSafeValue(value));\n }\n return value;\n}\nfunction hasStylingInputShadow(tNode, isClassBased) {\n return (tNode.flags & (isClassBased ? 8 : 16)) !== 0;\n}\nfunction ɵɵtext(index, value = '') {\n const lView = getLView();\n const tView = getTView();\n const adjustedIndex = index + HEADER_OFFSET;\n ngDevMode && assertTNodeCreationIndex(lView, index);\n const tNode = tView.firstCreatePass ? getOrCreateTNode(tView, adjustedIndex, 1, value, null) : tView.data[adjustedIndex];\n const textNative = _locateOrCreateTextNode(tView, lView, tNode, value);\n lView[adjustedIndex] = textNative;\n if (wasLastNodeCreated()) {\n appendChild(tView, lView, textNative, tNode);\n }\n setCurrentTNode(tNode, false);\n}\nlet _locateOrCreateTextNode = (tView, lView, tNode, value) => {\n lastNodeWasCreated(true);\n return createTextNode(lView[RENDERER], value);\n};\nfunction locateOrCreateTextNodeImpl(tView, lView, tNode, value) {\n const isNodeCreationMode = !canHydrateNode(lView, tNode);\n lastNodeWasCreated(isNodeCreationMode);\n if (isNodeCreationMode) {\n return createTextNode(lView[RENDERER], value);\n }\n const hydrationInfo = lView[HYDRATION];\n const textNative = locateNextRNode(hydrationInfo, tView, lView, tNode);\n ngDevMode && validateMatchingNode(textNative, Node.TEXT_NODE, null, lView, tNode);\n ngDevMode && markRNodeAsClaimedByHydration(textNative);\n return textNative;\n}\nfunction enableLocateOrCreateTextNodeImpl() {\n _locateOrCreateTextNode = locateOrCreateTextNodeImpl;\n}\nfunction interpolationV(lView, values) {\n ngDevMode && assertLessThan(2, values.length, 'should have at least 3 values');\n let isBindingUpdated = false;\n let bindingIndex = getBindingIndex();\n for (let i = 1; i < values.length; i += 2) {\n isBindingUpdated = bindingUpdated(lView, bindingIndex++, values[i]) || isBindingUpdated;\n }\n setBindingIndex(bindingIndex);\n if (!isBindingUpdated) {\n return NO_CHANGE;\n }\n let content = values[0];\n for (let i = 1; i < values.length; i += 2) {\n content += renderStringify(values[i]) + (i + 1 !== values.length ? values[i + 1] : '');\n }\n return content;\n}\nfunction interpolation1(lView, prefix, v0, suffix = '') {\n const different = bindingUpdated(lView, nextBindingIndex(), v0);\n return different ? prefix + renderStringify(v0) + suffix : NO_CHANGE;\n}\nfunction interpolation2(lView, prefix, v0, i0, v1, suffix = '') {\n const bindingIndex = getBindingIndex();\n const different = bindingUpdated2(lView, bindingIndex, v0, v1);\n incrementBindingIndex(2);\n return different ? prefix + renderStringify(v0) + i0 + renderStringify(v1) + suffix : NO_CHANGE;\n}\nfunction interpolation3(lView, prefix, v0, i0, v1, i1, v2, suffix = '') {\n const bindingIndex = getBindingIndex();\n const different = bindingUpdated3(lView, bindingIndex, v0, v1, v2);\n incrementBindingIndex(3);\n return different ? prefix + renderStringify(v0) + i0 + renderStringify(v1) + i1 + renderStringify(v2) + suffix : NO_CHANGE;\n}\nfunction interpolation4(lView, prefix, v0, i0, v1, i1, v2, i2, v3, suffix = '') {\n const bindingIndex = getBindingIndex();\n const different = bindingUpdated4(lView, bindingIndex, v0, v1, v2, v3);\n incrementBindingIndex(4);\n return different ? prefix + renderStringify(v0) + i0 + renderStringify(v1) + i1 + renderStringify(v2) + i2 + renderStringify(v3) + suffix : NO_CHANGE;\n}\nfunction interpolation5(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, suffix = '') {\n const bindingIndex = getBindingIndex();\n let different = bindingUpdated4(lView, bindingIndex, v0, v1, v2, v3);\n different = bindingUpdated(lView, bindingIndex + 4, v4) || different;\n incrementBindingIndex(5);\n return different ? prefix + renderStringify(v0) + i0 + renderStringify(v1) + i1 + renderStringify(v2) + i2 + renderStringify(v3) + i3 + renderStringify(v4) + suffix : NO_CHANGE;\n}\nfunction interpolation6(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, suffix = '') {\n const bindingIndex = getBindingIndex();\n let different = bindingUpdated4(lView, bindingIndex, v0, v1, v2, v3);\n different = bindingUpdated2(lView, bindingIndex + 4, v4, v5) || different;\n incrementBindingIndex(6);\n return different ? prefix + renderStringify(v0) + i0 + renderStringify(v1) + i1 + renderStringify(v2) + i2 + renderStringify(v3) + i3 + renderStringify(v4) + i4 + renderStringify(v5) + suffix : NO_CHANGE;\n}\nfunction interpolation7(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, suffix = '') {\n const bindingIndex = getBindingIndex();\n let different = bindingUpdated4(lView, bindingIndex, v0, v1, v2, v3);\n different = bindingUpdated3(lView, bindingIndex + 4, v4, v5, v6) || different;\n incrementBindingIndex(7);\n return different ? prefix + renderStringify(v0) + i0 + renderStringify(v1) + i1 + renderStringify(v2) + i2 + renderStringify(v3) + i3 + renderStringify(v4) + i4 + renderStringify(v5) + i5 + renderStringify(v6) + suffix : NO_CHANGE;\n}\nfunction interpolation8(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, i6, v7, suffix = '') {\n const bindingIndex = getBindingIndex();\n let different = bindingUpdated4(lView, bindingIndex, v0, v1, v2, v3);\n different = bindingUpdated4(lView, bindingIndex + 4, v4, v5, v6, v7) || different;\n incrementBindingIndex(8);\n return different ? prefix + renderStringify(v0) + i0 + renderStringify(v1) + i1 + renderStringify(v2) + i2 + renderStringify(v3) + i3 + renderStringify(v4) + i4 + renderStringify(v5) + i5 + renderStringify(v6) + i6 + renderStringify(v7) + suffix : NO_CHANGE;\n}\nfunction ɵɵtextInterpolate(v0) {\n ɵɵtextInterpolate1('', v0);\n return ɵɵtextInterpolate;\n}\nfunction ɵɵtextInterpolate1(prefix, v0, suffix) {\n const lView = getLView();\n const interpolated = interpolation1(lView, prefix, v0, suffix);\n if (interpolated !== NO_CHANGE) {\n textBindingInternal(lView, getSelectedIndex(), interpolated);\n }\n return ɵɵtextInterpolate1;\n}\nfunction ɵɵtextInterpolate2(prefix, v0, i0, v1, suffix) {\n const lView = getLView();\n const interpolated = interpolation2(lView, prefix, v0, i0, v1, suffix);\n if (interpolated !== NO_CHANGE) {\n textBindingInternal(lView, getSelectedIndex(), interpolated);\n }\n return ɵɵtextInterpolate2;\n}\nfunction ɵɵtextInterpolate3(prefix, v0, i0, v1, i1, v2, suffix) {\n const lView = getLView();\n const interpolated = interpolation3(lView, prefix, v0, i0, v1, i1, v2, suffix);\n if (interpolated !== NO_CHANGE) {\n textBindingInternal(lView, getSelectedIndex(), interpolated);\n }\n return ɵɵtextInterpolate3;\n}\nfunction ɵɵtextInterpolate4(prefix, v0, i0, v1, i1, v2, i2, v3, suffix) {\n const lView = getLView();\n const interpolated = interpolation4(lView, prefix, v0, i0, v1, i1, v2, i2, v3, suffix);\n if (interpolated !== NO_CHANGE) {\n textBindingInternal(lView, getSelectedIndex(), interpolated);\n }\n return ɵɵtextInterpolate4;\n}\nfunction ɵɵtextInterpolate5(prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, suffix) {\n const lView = getLView();\n const interpolated = interpolation5(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, suffix);\n if (interpolated !== NO_CHANGE) {\n textBindingInternal(lView, getSelectedIndex(), interpolated);\n }\n return ɵɵtextInterpolate5;\n}\nfunction ɵɵtextInterpolate6(prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, suffix) {\n const lView = getLView();\n const interpolated = interpolation6(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, suffix);\n if (interpolated !== NO_CHANGE) {\n textBindingInternal(lView, getSelectedIndex(), interpolated);\n }\n return ɵɵtextInterpolate6;\n}\nfunction ɵɵtextInterpolate7(prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, suffix) {\n const lView = getLView();\n const interpolated = interpolation7(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, suffix);\n if (interpolated !== NO_CHANGE) {\n textBindingInternal(lView, getSelectedIndex(), interpolated);\n }\n return ɵɵtextInterpolate7;\n}\nfunction ɵɵtextInterpolate8(prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, i6, v7, suffix) {\n const lView = getLView();\n const interpolated = interpolation8(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, i6, v7, suffix);\n if (interpolated !== NO_CHANGE) {\n textBindingInternal(lView, getSelectedIndex(), interpolated);\n }\n return ɵɵtextInterpolate8;\n}\nfunction ɵɵtextInterpolateV(values) {\n const lView = getLView();\n const interpolated = interpolationV(lView, values);\n if (interpolated !== NO_CHANGE) {\n textBindingInternal(lView, getSelectedIndex(), interpolated);\n }\n return ɵɵtextInterpolateV;\n}\nfunction textBindingInternal(lView, index, value) {\n ngDevMode && assertString(value, 'Value should be a string');\n ngDevMode && assertNotSame(value, NO_CHANGE, 'value should not be NO_CHANGE');\n ngDevMode && assertIndexInRange(lView, index);\n const element = getNativeByIndex(index, lView);\n ngDevMode && assertDefined(element, 'native element should exist');\n updateTextNode(lView[RENDERER], element, value);\n}\nfunction ɵɵtwoWayProperty(propName, value, sanitizer) {\n if (isWritableSignal(value)) {\n value = value();\n }\n const lView = getLView();\n const bindingIndex = nextBindingIndex();\n if (bindingUpdated(lView, bindingIndex, value)) {\n const tView = getTView();\n const tNode = getSelectedTNode();\n setPropertyAndInputs(tNode, lView, propName, value, lView[RENDERER], sanitizer);\n ngDevMode && storePropertyBindingMetadata(tView.data, tNode, propName, bindingIndex);\n }\n return ɵɵtwoWayProperty;\n}\nfunction ɵɵtwoWayBindingSet(target, value) {\n const canWrite = isWritableSignal(target);\n canWrite && target.set(value);\n return canWrite;\n}\nfunction ɵɵtwoWayListener(eventName, listenerFn) {\n const lView = getLView();\n const tView = getTView();\n const tNode = getCurrentTNode();\n listenerInternal(tView, lView, lView[RENDERER], tNode, eventName, listenerFn);\n return ɵɵtwoWayListener;\n}\nconst UNINITIALIZED_LET = {};\nfunction ɵɵdeclareLet(index) {\n performanceMarkFeature('NgLet');\n const tView = getTView();\n const lView = getLView();\n const adjustedIndex = index + HEADER_OFFSET;\n const tNode = getOrCreateTNode(tView, adjustedIndex, 128, null, null);\n setCurrentTNode(tNode, false);\n store(tView, lView, adjustedIndex, UNINITIALIZED_LET);\n return ɵɵdeclareLet;\n}\nfunction ɵɵstoreLet(value) {\n const tView = getTView();\n const lView = getLView();\n const index = getSelectedIndex();\n store(tView, lView, index, value);\n return value;\n}\nfunction ɵɵreadContextLet(index) {\n const contextLView = getContextLView();\n const value = load(contextLView, HEADER_OFFSET + index);\n if (value === UNINITIALIZED_LET) {\n throw new RuntimeError(314, ngDevMode && 'Attempting to access a @let declaration whose value is not available yet');\n }\n return value;\n}\nfunction ɵɵattachSourceLocations(templatePath, locations) {\n const tView = getTView();\n const lView = getLView();\n const renderer = lView[RENDERER];\n const attributeName = 'data-ng-source-location';\n for (const [index, offset, line, column] of locations) {\n const tNode = getTNode(tView, index + HEADER_OFFSET);\n ngDevMode && assertTNodeType(tNode, 2);\n const node = getNativeByIndex(index + HEADER_OFFSET, lView);\n if (!node.hasAttribute(attributeName)) {\n const attributeValue = `${templatePath}@o:${offset},l:${line},c:${column}`;\n renderer.setAttribute(node, attributeName, attributeValue);\n }\n }\n}\nfunction ɵɵinterpolate(v0) {\n return bindingUpdated(getLView(), nextBindingIndex(), v0) ? renderStringify(v0) : NO_CHANGE;\n}\nfunction ɵɵinterpolate1(prefix, v0, suffix = '') {\n return interpolation1(getLView(), prefix, v0, suffix);\n}\nfunction ɵɵinterpolate2(prefix, v0, i0, v1, suffix = '') {\n return interpolation2(getLView(), prefix, v0, i0, v1, suffix);\n}\nfunction ɵɵinterpolate3(prefix, v0, i0, v1, i1, v2, suffix = '') {\n return interpolation3(getLView(), prefix, v0, i0, v1, i1, v2, suffix);\n}\nfunction ɵɵinterpolate4(prefix, v0, i0, v1, i1, v2, i2, v3, suffix = '') {\n return interpolation4(getLView(), prefix, v0, i0, v1, i1, v2, i2, v3, suffix);\n}\nfunction ɵɵinterpolate5(prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, suffix = '') {\n return interpolation5(getLView(), prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, suffix);\n}\nfunction ɵɵinterpolate6(prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, suffix = '') {\n return interpolation6(getLView(), prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, suffix);\n}\nfunction ɵɵinterpolate7(prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, suffix = '') {\n return interpolation7(getLView(), prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, suffix);\n}\nfunction ɵɵinterpolate8(prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, i6, v7, suffix = '') {\n return interpolation8(getLView(), prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, i6, v7, suffix);\n}\nfunction ɵɵinterpolateV(values) {\n return interpolationV(getLView(), values);\n}\nfunction ɵɵarrowFunction(slotOffset, factory, context) {\n const bindingIndex = getBindingRoot() + slotOffset;\n const lView = getLView();\n return lView[bindingIndex] === NO_CHANGE ? updateBinding(lView, bindingIndex, factory(context, lView)) : getBinding(lView, bindingIndex);\n}\nfunction providersResolver(def, providers, isViewProviders) {\n const tView = getTView();\n if (tView.firstCreatePass) {\n resolveProvider(providers, tView.data, tView.blueprint, isComponentDef(def), isViewProviders);\n }\n}\nfunction resolveProvider(provider, tInjectables, lInjectablesBlueprint, isComponent, isViewProvider) {\n provider = resolveForwardRef(provider);\n if (Array.isArray(provider)) {\n for (let i = 0; i < provider.length; i++) {\n resolveProvider(provider[i], tInjectables, lInjectablesBlueprint, isComponent, isViewProvider);\n }\n } else {\n const tView = getTView();\n const lView = getLView();\n const tNode = getCurrentTNode();\n let token = isTypeProvider(provider) ? provider : resolveForwardRef(provider.provide);\n const providerFactory = providerToFactory(provider);\n if (ngDevMode) {\n const injector = new NodeInjector(tNode, lView);\n runInInjectorProfilerContext(injector, token, () => {\n emitProviderConfiguredEvent(provider, isViewProvider);\n });\n }\n const beginIndex = tNode.providerIndexes & 1048575;\n const endIndex = tNode.directiveStart;\n const cptViewProvidersCount = tNode.providerIndexes >> 20;\n if (isTypeProvider(provider) || !provider.multi) {\n const factory = new NodeInjectorFactory(providerFactory, isViewProvider, ɵɵdirectiveInject, ngDevMode ? providerName(provider) : null);\n const existingFactoryIndex = indexOf(token, tInjectables, isViewProvider ? beginIndex : beginIndex + cptViewProvidersCount, endIndex);\n if (existingFactoryIndex === -1) {\n diPublicInInjector(getOrCreateNodeInjectorForNode(tNode, lView), tView, token);\n registerDestroyHooksIfSupported(tView, provider, tInjectables.length);\n tInjectables.push(token);\n tNode.directiveStart++;\n tNode.directiveEnd++;\n if (isViewProvider) {\n tNode.providerIndexes += 1048576;\n }\n lInjectablesBlueprint.push(factory);\n lView.push(factory);\n } else {\n lInjectablesBlueprint[existingFactoryIndex] = factory;\n lView[existingFactoryIndex] = factory;\n }\n } else {\n const existingProvidersFactoryIndex = indexOf(token, tInjectables, beginIndex + cptViewProvidersCount, endIndex);\n const existingViewProvidersFactoryIndex = indexOf(token, tInjectables, beginIndex, beginIndex + cptViewProvidersCount);\n const doesProvidersFactoryExist = existingProvidersFactoryIndex >= 0 && lInjectablesBlueprint[existingProvidersFactoryIndex];\n const doesViewProvidersFactoryExist = existingViewProvidersFactoryIndex >= 0 && lInjectablesBlueprint[existingViewProvidersFactoryIndex];\n if (isViewProvider && !doesViewProvidersFactoryExist || !isViewProvider && !doesProvidersFactoryExist) {\n diPublicInInjector(getOrCreateNodeInjectorForNode(tNode, lView), tView, token);\n const factory = multiFactory(isViewProvider ? multiViewProvidersFactoryResolver : multiProvidersFactoryResolver, lInjectablesBlueprint.length, isViewProvider, isComponent, providerFactory, provider);\n if (!isViewProvider && doesViewProvidersFactoryExist) {\n lInjectablesBlueprint[existingViewProvidersFactoryIndex].providerFactory = factory;\n }\n registerDestroyHooksIfSupported(tView, provider, tInjectables.length, 0);\n tInjectables.push(token);\n tNode.directiveStart++;\n tNode.directiveEnd++;\n if (isViewProvider) {\n tNode.providerIndexes += 1048576;\n }\n lInjectablesBlueprint.push(factory);\n lView.push(factory);\n } else {\n const indexInFactory = multiFactoryAdd(lInjectablesBlueprint[isViewProvider ? existingViewProvidersFactoryIndex : existingProvidersFactoryIndex], providerFactory, !isViewProvider && isComponent);\n registerDestroyHooksIfSupported(tView, provider, existingProvidersFactoryIndex > -1 ? existingProvidersFactoryIndex : existingViewProvidersFactoryIndex, indexInFactory);\n }\n if (!isViewProvider && isComponent && doesViewProvidersFactoryExist) {\n lInjectablesBlueprint[existingViewProvidersFactoryIndex].componentProviders++;\n }\n }\n }\n}\nfunction registerDestroyHooksIfSupported(tView, provider, contextIndex, indexInFactory) {\n const providerIsTypeProvider = isTypeProvider(provider);\n const providerIsClassProvider = isClassProvider(provider);\n if (providerIsTypeProvider || providerIsClassProvider) {\n const classToken = providerIsClassProvider ? resolveForwardRef(provider.useClass) : provider;\n const prototype = classToken.prototype;\n const ngOnDestroy = prototype.ngOnDestroy;\n if (ngOnDestroy) {\n const hooks = tView.destroyHooks || (tView.destroyHooks = []);\n if (!providerIsTypeProvider && provider.multi) {\n ngDevMode && assertDefined(indexInFactory, 'indexInFactory when registering multi factory destroy hook');\n const existingCallbacksIndex = hooks.indexOf(contextIndex);\n if (existingCallbacksIndex === -1) {\n hooks.push(contextIndex, [indexInFactory, ngOnDestroy]);\n } else {\n hooks[existingCallbacksIndex + 1].push(indexInFactory, ngOnDestroy);\n }\n } else {\n hooks.push(contextIndex, ngOnDestroy);\n }\n }\n }\n}\nfunction multiFactoryAdd(multiFactory, factory, isComponentProvider) {\n if (isComponentProvider) {\n multiFactory.componentProviders++;\n }\n return multiFactory.multi.push(factory) - 1;\n}\nfunction indexOf(item, arr, begin, end) {\n for (let i = begin; i < end; i++) {\n if (arr[i] === item) return i;\n }\n return -1;\n}\nfunction multiProvidersFactoryResolver(_, flags, tData, lData, tNode) {\n return multiResolve(this.multi, []);\n}\nfunction multiViewProvidersFactoryResolver(_, _flags, _tData, lView, tNode) {\n const factories = this.multi;\n let result;\n if (this.providerFactory) {\n const componentCount = this.providerFactory.componentProviders;\n const multiProviders = getNodeInjectable(lView, lView[TVIEW], this.providerFactory.index, tNode);\n result = multiProviders.slice(0, componentCount);\n multiResolve(factories, result);\n for (let i = componentCount; i < multiProviders.length; i++) {\n result.push(multiProviders[i]);\n }\n } else {\n result = [];\n multiResolve(factories, result);\n }\n return result;\n}\nfunction multiResolve(factories, result) {\n for (let i = 0; i < factories.length; i++) {\n const factory = factories[i];\n result.push(factory());\n }\n return result;\n}\nfunction multiFactory(factoryFn, index, isViewProvider, isComponent, f, provider) {\n const factory = new NodeInjectorFactory(factoryFn, isViewProvider, ɵɵdirectiveInject, ngDevMode ? providerName(provider) : null);\n factory.multi = [];\n factory.index = index;\n factory.componentProviders = 0;\n multiFactoryAdd(factory, f, isComponent && !isViewProvider);\n return factory;\n}\nfunction providerName(provider) {\n if (Array.isArray(provider)) {\n return null;\n }\n if (isTypeProvider(provider)) {\n return provider.name;\n } else if (isClassProvider(provider)) {\n if (provider.provide instanceof InjectionToken) {\n return `('${provider.provide.toString()}':${provider.useClass.name})`;\n }\n return provider.useClass.name;\n } else if (provider.provide instanceof InjectionToken) {\n return provider.provide.toString();\n } else if (typeof provider.provide === 'string') {\n return provider.provide;\n } else {\n return null;\n }\n}\nfunction ɵɵProvidersFeature(providers, viewProviders) {\n return definition => {\n definition.providersResolver = (def, processProvidersFn) => providersResolver(def, processProvidersFn ? processProvidersFn(providers) : providers, false);\n if (viewProviders) {\n definition.viewProvidersResolver = (def, processProvidersFn) => providersResolver(def, processProvidersFn ? processProvidersFn(viewProviders) : viewProviders, true);\n }\n };\n}\nfunction ɵɵExternalStylesFeature(styleUrls) {\n return definition => {\n if (styleUrls.length < 1) {\n return;\n }\n definition.getExternalStyles = encapsulationId => {\n const urls = styleUrls.map(value => value + '?ngcomp' + (encapsulationId ? '=' + encodeURIComponent(encapsulationId) : '') + '&e=' + definition.encapsulation);\n return urls;\n };\n };\n}\nfunction ɵɵsetComponentScope(type, directives, pipes) {\n const def = type.ɵcmp;\n def.directiveDefs = extractDefListOrFactory(directives, extractDirectiveDef);\n def.pipeDefs = extractDefListOrFactory(pipes, getPipeDef$1);\n}\nfunction ɵɵsetNgModuleScope(type, scope) {\n return noSideEffects(() => {\n const ngModuleDef = getNgModuleDefOrThrow(type);\n ngModuleDef.declarations = convertToTypeArray(scope.declarations || EMPTY_ARRAY);\n ngModuleDef.imports = convertToTypeArray(scope.imports || EMPTY_ARRAY);\n ngModuleDef.exports = convertToTypeArray(scope.exports || EMPTY_ARRAY);\n if (scope.bootstrap) {\n ngModuleDef.bootstrap = convertToTypeArray(scope.bootstrap);\n }\n depsTracker.registerNgModule(type, scope);\n });\n}\nfunction convertToTypeArray(values) {\n if (typeof values === 'function') {\n return values;\n }\n const flattenValues = flatten(values);\n if (flattenValues.some(isForwardRef)) {\n return () => flattenValues.map(resolveForwardRef).map(maybeUnwrapModuleWithProviders);\n } else {\n return flattenValues.map(maybeUnwrapModuleWithProviders);\n }\n}\nfunction maybeUnwrapModuleWithProviders(value) {\n return isModuleWithProviders(value) ? value.ngModule : value;\n}\nfunction ɵɵpureFunction0(slotOffset, pureFn) {\n const bindingIndex = getBindingRoot() + slotOffset;\n const lView = getLView();\n return lView[bindingIndex] === NO_CHANGE ? updateBinding(lView, bindingIndex, pureFn()) : getBinding(lView, bindingIndex);\n}\nfunction ɵɵpureFunction1(slotOffset, pureFn, exp) {\n return pureFunction1Internal(getLView(), getBindingRoot(), slotOffset, pureFn, exp);\n}\nfunction ɵɵpureFunction2(slotOffset, pureFn, exp1, exp2) {\n return pureFunction2Internal(getLView(), getBindingRoot(), slotOffset, pureFn, exp1, exp2);\n}\nfunction ɵɵpureFunction3(slotOffset, pureFn, exp1, exp2, exp3) {\n return pureFunction3Internal(getLView(), getBindingRoot(), slotOffset, pureFn, exp1, exp2, exp3);\n}\nfunction ɵɵpureFunction4(slotOffset, pureFn, exp1, exp2, exp3, exp4, thisArg) {\n return pureFunction4Internal(getLView(), getBindingRoot(), slotOffset, pureFn, exp1, exp2, exp3, exp4);\n}\nfunction ɵɵpureFunction5(slotOffset, pureFn, exp1, exp2, exp3, exp4, exp5) {\n const bindingIndex = getBindingRoot() + slotOffset;\n const lView = getLView();\n const different = bindingUpdated4(lView, bindingIndex, exp1, exp2, exp3, exp4);\n return bindingUpdated(lView, bindingIndex + 4, exp5) || different ? updateBinding(lView, bindingIndex + 5, pureFn(exp1, exp2, exp3, exp4, exp5)) : getBinding(lView, bindingIndex + 5);\n}\nfunction ɵɵpureFunction6(slotOffset, pureFn, exp1, exp2, exp3, exp4, exp5, exp6) {\n const bindingIndex = getBindingRoot() + slotOffset;\n const lView = getLView();\n const different = bindingUpdated4(lView, bindingIndex, exp1, exp2, exp3, exp4);\n return bindingUpdated2(lView, bindingIndex + 4, exp5, exp6) || different ? updateBinding(lView, bindingIndex + 6, pureFn(exp1, exp2, exp3, exp4, exp5, exp6)) : getBinding(lView, bindingIndex + 6);\n}\nfunction ɵɵpureFunction7(slotOffset, pureFn, exp1, exp2, exp3, exp4, exp5, exp6, exp7) {\n const bindingIndex = getBindingRoot() + slotOffset;\n const lView = getLView();\n let different = bindingUpdated4(lView, bindingIndex, exp1, exp2, exp3, exp4);\n return bindingUpdated3(lView, bindingIndex + 4, exp5, exp6, exp7) || different ? updateBinding(lView, bindingIndex + 7, pureFn(exp1, exp2, exp3, exp4, exp5, exp6, exp7)) : getBinding(lView, bindingIndex + 7);\n}\nfunction ɵɵpureFunction8(slotOffset, pureFn, exp1, exp2, exp3, exp4, exp5, exp6, exp7, exp8) {\n const bindingIndex = getBindingRoot() + slotOffset;\n const lView = getLView();\n const different = bindingUpdated4(lView, bindingIndex, exp1, exp2, exp3, exp4);\n return bindingUpdated4(lView, bindingIndex + 4, exp5, exp6, exp7, exp8) || different ? updateBinding(lView, bindingIndex + 8, pureFn(exp1, exp2, exp3, exp4, exp5, exp6, exp7, exp8)) : getBinding(lView, bindingIndex + 8);\n}\nfunction ɵɵpureFunctionV(slotOffset, pureFn, exps) {\n return pureFunctionVInternal(getLView(), getBindingRoot(), slotOffset, pureFn, exps);\n}\nfunction getPureFunctionReturnValue(lView, returnValueIndex) {\n ngDevMode && assertIndexInRange(lView, returnValueIndex);\n const lastReturnValue = lView[returnValueIndex];\n return lastReturnValue === NO_CHANGE ? undefined : lastReturnValue;\n}\nfunction pureFunction1Internal(lView, bindingRoot, slotOffset, pureFn, exp, thisArg) {\n const bindingIndex = bindingRoot + slotOffset;\n return bindingUpdated(lView, bindingIndex, exp) ? updateBinding(lView, bindingIndex + 1, thisArg ? pureFn.call(thisArg, exp) : pureFn(exp)) : getPureFunctionReturnValue(lView, bindingIndex + 1);\n}\nfunction pureFunction2Internal(lView, bindingRoot, slotOffset, pureFn, exp1, exp2, thisArg) {\n const bindingIndex = bindingRoot + slotOffset;\n return bindingUpdated2(lView, bindingIndex, exp1, exp2) ? updateBinding(lView, bindingIndex + 2, thisArg ? pureFn.call(thisArg, exp1, exp2) : pureFn(exp1, exp2)) : getPureFunctionReturnValue(lView, bindingIndex + 2);\n}\nfunction pureFunction3Internal(lView, bindingRoot, slotOffset, pureFn, exp1, exp2, exp3, thisArg) {\n const bindingIndex = bindingRoot + slotOffset;\n return bindingUpdated3(lView, bindingIndex, exp1, exp2, exp3) ? updateBinding(lView, bindingIndex + 3, thisArg ? pureFn.call(thisArg, exp1, exp2, exp3) : pureFn(exp1, exp2, exp3)) : getPureFunctionReturnValue(lView, bindingIndex + 3);\n}\nfunction pureFunction4Internal(lView, bindingRoot, slotOffset, pureFn, exp1, exp2, exp3, exp4, thisArg) {\n const bindingIndex = bindingRoot + slotOffset;\n return bindingUpdated4(lView, bindingIndex, exp1, exp2, exp3, exp4) ? updateBinding(lView, bindingIndex + 4, thisArg ? pureFn.call(thisArg, exp1, exp2, exp3, exp4) : pureFn(exp1, exp2, exp3, exp4)) : getPureFunctionReturnValue(lView, bindingIndex + 4);\n}\nfunction pureFunctionVInternal(lView, bindingRoot, slotOffset, pureFn, exps, thisArg) {\n let bindingIndex = bindingRoot + slotOffset;\n let different = false;\n for (let i = 0; i < exps.length; i++) {\n bindingUpdated(lView, bindingIndex++, exps[i]) && (different = true);\n }\n return different ? updateBinding(lView, bindingIndex, pureFn.apply(thisArg, exps)) : getPureFunctionReturnValue(lView, bindingIndex);\n}\nfunction ɵɵpipe(index, pipeName) {\n const tView = getTView();\n let pipeDef;\n const adjustedIndex = index + HEADER_OFFSET;\n if (tView.firstCreatePass) {\n pipeDef = getPipeDef(pipeName, tView.pipeRegistry);\n tView.data[adjustedIndex] = pipeDef;\n if (pipeDef.onDestroy) {\n (tView.destroyHooks ??= []).push(adjustedIndex, pipeDef.onDestroy);\n }\n } else {\n pipeDef = tView.data[adjustedIndex];\n }\n const pipeFactory = pipeDef.factory || (pipeDef.factory = getFactoryDef(pipeDef.type, true));\n let previousInjectorProfilerContext;\n if (ngDevMode) {\n previousInjectorProfilerContext = setInjectorProfilerContext({\n injector: new NodeInjector(getCurrentTNode(), getLView()),\n token: pipeDef.type\n });\n }\n const previousInjectImplementation = setInjectImplementation(ɵɵdirectiveInject);\n try {\n const previousIncludeViewProviders = setIncludeViewProviders(false);\n const pipeInstance = pipeFactory();\n setIncludeViewProviders(previousIncludeViewProviders);\n store(tView, getLView(), adjustedIndex, pipeInstance);\n return pipeInstance;\n } finally {\n setInjectImplementation(previousInjectImplementation);\n ngDevMode && setInjectorProfilerContext(previousInjectorProfilerContext);\n }\n}\nfunction getPipeDef(name, registry) {\n if (registry) {\n if (ngDevMode) {\n const pipes = registry.filter(pipe => pipe.name === name);\n if (pipes.length > 1) {\n console.warn(formatRuntimeError(313, getMultipleMatchingPipesMessage(name)));\n }\n }\n for (let i = registry.length - 1; i >= 0; i--) {\n const pipeDef = registry[i];\n if (name === pipeDef.name) {\n return pipeDef;\n }\n }\n }\n if (ngDevMode) {\n throw new RuntimeError(-302, getPipeNotFoundErrorMessage(name));\n }\n return;\n}\nfunction getMultipleMatchingPipesMessage(name) {\n const lView = getLView();\n const declarationLView = lView[DECLARATION_COMPONENT_VIEW];\n const context = declarationLView[CONTEXT];\n const hostIsStandalone = isHostComponentStandalone(lView);\n const componentInfoMessage = context ? ` in the '${context.constructor.name}' component` : '';\n const verifyMessage = `check ${hostIsStandalone ? \"'@Component.imports' of this component\" : 'the imports of this module'}`;\n const errorMessage = `Multiple pipes match the name \\`${name}\\`${componentInfoMessage}. ${verifyMessage}`;\n return errorMessage;\n}\nfunction getPipeNotFoundErrorMessage(name) {\n const lView = getLView();\n const declarationLView = lView[DECLARATION_COMPONENT_VIEW];\n const context = declarationLView[CONTEXT];\n const hostIsStandalone = isHostComponentStandalone(lView);\n const componentInfoMessage = context ? ` in the '${context.constructor.name}' component` : '';\n const verifyMessage = `Verify that it is ${hostIsStandalone ? \"included in the '@Component.imports' of this component\" : 'declared or imported in this module'}`;\n const errorMessage = `The pipe '${name}' could not be found${componentInfoMessage}. ${verifyMessage}`;\n return errorMessage;\n}\nfunction ɵɵpipeBind1(index, offset, v1) {\n const adjustedIndex = index + HEADER_OFFSET;\n const lView = getLView();\n const pipeInstance = load(lView, adjustedIndex);\n return isPure(lView, adjustedIndex) ? pureFunction1Internal(lView, getBindingRoot(), offset, pipeInstance.transform, v1, pipeInstance) : pipeInstance.transform(v1);\n}\nfunction ɵɵpipeBind2(index, slotOffset, v1, v2) {\n const adjustedIndex = index + HEADER_OFFSET;\n const lView = getLView();\n const pipeInstance = load(lView, adjustedIndex);\n return isPure(lView, adjustedIndex) ? pureFunction2Internal(lView, getBindingRoot(), slotOffset, pipeInstance.transform, v1, v2, pipeInstance) : pipeInstance.transform(v1, v2);\n}\nfunction ɵɵpipeBind3(index, slotOffset, v1, v2, v3) {\n const adjustedIndex = index + HEADER_OFFSET;\n const lView = getLView();\n const pipeInstance = load(lView, adjustedIndex);\n return isPure(lView, adjustedIndex) ? pureFunction3Internal(lView, getBindingRoot(), slotOffset, pipeInstance.transform, v1, v2, v3, pipeInstance) : pipeInstance.transform(v1, v2, v3);\n}\nfunction ɵɵpipeBind4(index, slotOffset, v1, v2, v3, v4) {\n const adjustedIndex = index + HEADER_OFFSET;\n const lView = getLView();\n const pipeInstance = load(lView, adjustedIndex);\n return isPure(lView, adjustedIndex) ? pureFunction4Internal(lView, getBindingRoot(), slotOffset, pipeInstance.transform, v1, v2, v3, v4, pipeInstance) : pipeInstance.transform(v1, v2, v3, v4);\n}\nfunction ɵɵpipeBindV(index, slotOffset, values) {\n const adjustedIndex = index + HEADER_OFFSET;\n const lView = getLView();\n const pipeInstance = load(lView, adjustedIndex);\n return isPure(lView, adjustedIndex) ? pureFunctionVInternal(lView, getBindingRoot(), slotOffset, pipeInstance.transform, values, pipeInstance) : pipeInstance.transform.apply(pipeInstance, values);\n}\nfunction isPure(lView, index) {\n return lView[TVIEW].data[index].pure;\n}\nfunction ɵɵtemplateRefExtractor(tNode, lView) {\n return createTemplateRef(tNode, lView);\n}\nfunction ɵɵgetComponentDepsFactory(type, rawImports) {\n return () => {\n try {\n return depsTracker.getComponentDependencies(type, rawImports).dependencies;\n } catch (e) {\n console.error(`Computing dependencies in local compilation mode for the component \"${type.name}\" failed with the exception:`, e);\n throw e;\n }\n };\n}\nfunction ɵsetClassDebugInfo(type, debugInfo) {\n const def = getComponentDef(type);\n if (def !== null) {\n def.debugInfo = debugInfo;\n }\n}\nfunction ɵɵgetReplaceMetadataURL(id, timestamp, base) {\n const url = `./@ng/component?c=${id}&t=${encodeURIComponent(timestamp)}`;\n return new URL(url, base).href;\n}\nfunction ɵɵreplaceMetadata(type, applyMetadata, namespaces, locals, importMeta = null, id = null) {\n ngDevMode && assertComponentDef(type);\n const currentDef = getComponentDef(type);\n applyMetadata.apply(null, [type, namespaces, ...locals]);\n const {\n newDef,\n oldDef\n } = mergeWithExistingDefinition(currentDef, getComponentDef(type));\n type[NG_COMP_DEF] = newDef;\n if (oldDef.tView) {\n const trackedViews = getTrackedLViews().values();\n for (const root of trackedViews) {\n if (isRootView(root) && root[PARENT] === null) {\n recreateMatchingLViews(importMeta, id, newDef, oldDef, root);\n }\n }\n }\n}\nfunction mergeWithExistingDefinition(currentDef, newDef) {\n const clone = {\n ...currentDef\n };\n const replacement = Object.assign(currentDef, newDef, {\n directiveDefs: clone.directiveDefs,\n pipeDefs: clone.pipeDefs,\n setInput: clone.setInput,\n type: clone.type\n });\n ngDevMode && assertEqual(replacement, currentDef, 'Expected definition to be merged in place');\n return {\n newDef: replacement,\n oldDef: clone\n };\n}\nfunction recreateMatchingLViews(importMeta, id, newDef, oldDef, rootLView) {\n ngDevMode && assertDefined(oldDef.tView, 'Expected a component definition that has been instantiated at least once');\n const tView = rootLView[TVIEW];\n if (tView === oldDef.tView) {\n ngDevMode && assertComponentDef(oldDef.type);\n recreateLView(importMeta, id, newDef, oldDef, rootLView);\n return;\n }\n for (let i = HEADER_OFFSET; i < tView.bindingStartIndex; i++) {\n const current = rootLView[i];\n if (isLContainer(current)) {\n if (isLView(current[HOST])) {\n recreateMatchingLViews(importMeta, id, newDef, oldDef, current[HOST]);\n }\n for (let j = CONTAINER_HEADER_OFFSET; j < current.length; j++) {\n recreateMatchingLViews(importMeta, id, newDef, oldDef, current[j]);\n }\n } else if (isLView(current)) {\n recreateMatchingLViews(importMeta, id, newDef, oldDef, current);\n }\n }\n}\nfunction clearRendererCache(factory, def) {\n factory.componentReplaced?.(def.id);\n}\nfunction recreateLView(importMeta, id, newDef, oldDef, lView) {\n const instance = lView[CONTEXT];\n let host = lView[HOST];\n const parentLView = lView[PARENT];\n ngDevMode && assertLView(parentLView);\n const tNode = lView[T_HOST];\n ngDevMode && assertTNodeType(tNode, 2);\n ngDevMode && assertNotEqual(newDef, oldDef, 'Expected different component definition');\n const zone = lView[INJECTOR].get(NgZone, null);\n const recreate = () => {\n if (oldDef.encapsulation === ViewEncapsulation.ShadowDom || oldDef.encapsulation === ViewEncapsulation.ExperimentalIsolatedShadowDom) {\n const newHost = host.cloneNode(false);\n host.replaceWith(newHost);\n host = newHost;\n }\n const newTView = getOrCreateComponentTView(newDef);\n const newLView = createLView(parentLView, newTView, instance, getInitialLViewFlagsFromDef(newDef), host, tNode, null, null, null, null, null);\n replaceLViewInTree(parentLView, lView, newLView, tNode.index);\n destroyLView(lView[TVIEW], lView);\n const rendererFactory = lView[ENVIRONMENT].rendererFactory;\n clearRendererCache(rendererFactory, oldDef);\n newLView[RENDERER] = rendererFactory.createRenderer(host, newDef);\n removeViewFromDOM(lView[TVIEW], lView);\n resetProjectionState(tNode);\n renderView(newTView, newLView, instance);\n refreshView(newTView, newLView, newTView.template, instance);\n };\n if (zone === null) {\n executeWithInvalidateFallback(importMeta, id, recreate);\n } else {\n zone.run(() => executeWithInvalidateFallback(importMeta, id, recreate));\n }\n}\nfunction executeWithInvalidateFallback(importMeta, id, callback) {\n try {\n callback();\n } catch (e) {\n const error = e;\n if (id !== null && error.message) {\n const toLog = error.message + (error.stack ? '\\n' + error.stack : '');\n importMeta?.hot?.send?.('angular:invalidate', {\n id,\n message: toLog,\n error: true\n });\n }\n throw e;\n }\n}\nfunction replaceLViewInTree(parentLView, oldLView, newLView, index) {\n for (let i = HEADER_OFFSET; i < parentLView[TVIEW].bindingStartIndex; i++) {\n const current = parentLView[i];\n if ((isLView(current) || isLContainer(current)) && current[NEXT] === oldLView) {\n current[NEXT] = newLView;\n break;\n }\n }\n if (parentLView[CHILD_HEAD] === oldLView) {\n parentLView[CHILD_HEAD] = newLView;\n }\n if (parentLView[CHILD_TAIL] === oldLView) {\n parentLView[CHILD_TAIL] = newLView;\n }\n newLView[NEXT] = oldLView[NEXT];\n oldLView[NEXT] = null;\n parentLView[index] = newLView;\n}\nfunction resetProjectionState(tNode) {\n if (tNode.projection !== null) {\n for (const current of tNode.projection) {\n if (isTNodeShape(current)) {\n current.projectionNext = null;\n current.flags &= ~2;\n }\n }\n tNode.projection = null;\n }\n}\nconst angularCoreEnv = /*#__PURE__*/(() => ({\n 'ɵɵanimateEnter': ɵɵanimateEnter,\n 'ɵɵanimateEnterListener': ɵɵanimateEnterListener,\n 'ɵɵanimateLeave': ɵɵanimateLeave,\n 'ɵɵanimateLeaveListener': ɵɵanimateLeaveListener,\n 'ɵɵattribute': ɵɵattribute,\n 'ɵɵdefineComponent': ɵɵdefineComponent,\n 'ɵɵdefineDirective': ɵɵdefineDirective,\n 'ɵɵdefineInjectable': __defineInjectable,\n 'ɵɵdefineInjector': __defineInjector,\n 'ɵɵdefineNgModule': ɵɵdefineNgModule,\n 'ɵɵdefinePipe': ɵɵdefinePipe,\n 'ɵɵdirectiveInject': ɵɵdirectiveInject,\n 'ɵɵgetInheritedFactory': ɵɵgetInheritedFactory,\n 'ɵɵinject': __inject,\n 'ɵɵinjectAttribute': ɵɵinjectAttribute,\n 'ɵɵinvalidFactory': ɵɵinvalidFactory,\n 'ɵɵinvalidFactoryDep': __invalidFactoryDep,\n 'ɵɵtemplateRefExtractor': ɵɵtemplateRefExtractor,\n 'ɵɵresetView': __resetView,\n 'ɵɵHostDirectivesFeature': ɵɵHostDirectivesFeature,\n 'ɵɵNgOnChangesFeature': ɵɵNgOnChangesFeature,\n 'ɵɵControlFeature': ɵɵControlFeature,\n 'ɵɵProvidersFeature': ɵɵProvidersFeature,\n 'ɵɵInheritDefinitionFeature': ɵɵInheritDefinitionFeature,\n 'ɵɵExternalStylesFeature': ɵɵExternalStylesFeature,\n 'ɵɵnextContext': ɵɵnextContext,\n 'ɵɵnamespaceHTML': __namespaceHTML,\n 'ɵɵnamespaceMathML': __namespaceMathML,\n 'ɵɵnamespaceSVG': __namespaceSVG,\n 'ɵɵenableBindings': __enableBindings,\n 'ɵɵdisableBindings': __disableBindings,\n 'ɵɵelementStart': ɵɵelementStart,\n 'ɵɵelementEnd': ɵɵelementEnd,\n 'ɵɵelement': ɵɵelement,\n 'ɵɵelementContainerStart': ɵɵelementContainerStart,\n 'ɵɵelementContainerEnd': ɵɵelementContainerEnd,\n 'ɵɵdomElement': ɵɵdomElement,\n 'ɵɵdomElementStart': ɵɵdomElementStart,\n 'ɵɵdomElementEnd': ɵɵdomElementEnd,\n 'ɵɵdomElementContainer': ɵɵdomElementContainer,\n 'ɵɵdomElementContainerStart': ɵɵdomElementContainerStart,\n 'ɵɵdomElementContainerEnd': ɵɵdomElementContainerEnd,\n 'ɵɵdomTemplate': ɵɵdomTemplate,\n 'ɵɵdomListener': ɵɵdomListener,\n 'ɵɵelementContainer': ɵɵelementContainer,\n 'ɵɵpureFunction0': ɵɵpureFunction0,\n 'ɵɵpureFunction1': ɵɵpureFunction1,\n 'ɵɵpureFunction2': ɵɵpureFunction2,\n 'ɵɵpureFunction3': ɵɵpureFunction3,\n 'ɵɵpureFunction4': ɵɵpureFunction4,\n 'ɵɵpureFunction5': ɵɵpureFunction5,\n 'ɵɵpureFunction6': ɵɵpureFunction6,\n 'ɵɵpureFunction7': ɵɵpureFunction7,\n 'ɵɵpureFunction8': ɵɵpureFunction8,\n 'ɵɵpureFunctionV': ɵɵpureFunctionV,\n 'ɵɵgetCurrentView': ɵɵgetCurrentView,\n 'ɵɵrestoreView': __restoreView,\n 'ɵɵlistener': ɵɵlistener,\n 'ɵɵprojection': ɵɵprojection,\n 'ɵɵsyntheticHostProperty': ɵɵsyntheticHostProperty,\n 'ɵɵsyntheticHostListener': ɵɵsyntheticHostListener,\n 'ɵɵpipeBind1': ɵɵpipeBind1,\n 'ɵɵpipeBind2': ɵɵpipeBind2,\n 'ɵɵpipeBind3': ɵɵpipeBind3,\n 'ɵɵpipeBind4': ɵɵpipeBind4,\n 'ɵɵpipeBindV': ɵɵpipeBindV,\n 'ɵɵprojectionDef': ɵɵprojectionDef,\n 'ɵɵdomProperty': ɵɵdomProperty,\n 'ɵɵariaProperty': ɵɵariaProperty,\n 'ɵɵproperty': ɵɵproperty,\n 'ɵɵcontrol': ɵɵcontrol,\n 'ɵɵcontrolCreate': ɵɵcontrolCreate,\n 'ɵɵpipe': ɵɵpipe,\n 'ɵɵqueryRefresh': ɵɵqueryRefresh,\n 'ɵɵqueryAdvance': ɵɵqueryAdvance,\n 'ɵɵviewQuery': ɵɵviewQuery,\n 'ɵɵviewQuerySignal': ɵɵviewQuerySignal,\n 'ɵɵloadQuery': ɵɵloadQuery,\n 'ɵɵcontentQuery': ɵɵcontentQuery,\n 'ɵɵcontentQuerySignal': ɵɵcontentQuerySignal,\n 'ɵɵreference': ɵɵreference,\n 'ɵɵclassMap': ɵɵclassMap,\n 'ɵɵstyleMap': ɵɵstyleMap,\n 'ɵɵstyleProp': ɵɵstyleProp,\n 'ɵɵclassProp': ɵɵclassProp,\n 'ɵɵadvance': ɵɵadvance,\n 'ɵɵtemplate': ɵɵtemplate,\n 'ɵɵconditional': ɵɵconditional,\n 'ɵɵconditionalCreate': ɵɵconditionalCreate,\n 'ɵɵconditionalBranchCreate': ɵɵconditionalBranchCreate,\n 'ɵɵdefer': ɵɵdefer,\n 'ɵɵdeferWhen': ɵɵdeferWhen,\n 'ɵɵdeferOnIdle': ɵɵdeferOnIdle,\n 'ɵɵdeferOnImmediate': ɵɵdeferOnImmediate,\n 'ɵɵdeferOnTimer': ɵɵdeferOnTimer,\n 'ɵɵdeferOnHover': ɵɵdeferOnHover,\n 'ɵɵdeferOnInteraction': ɵɵdeferOnInteraction,\n 'ɵɵdeferOnViewport': ɵɵdeferOnViewport,\n 'ɵɵdeferPrefetchWhen': ɵɵdeferPrefetchWhen,\n 'ɵɵdeferPrefetchOnIdle': ɵɵdeferPrefetchOnIdle,\n 'ɵɵdeferPrefetchOnImmediate': ɵɵdeferPrefetchOnImmediate,\n 'ɵɵdeferPrefetchOnTimer': ɵɵdeferPrefetchOnTimer,\n 'ɵɵdeferPrefetchOnHover': ɵɵdeferPrefetchOnHover,\n 'ɵɵdeferPrefetchOnInteraction': ɵɵdeferPrefetchOnInteraction,\n 'ɵɵdeferPrefetchOnViewport': ɵɵdeferPrefetchOnViewport,\n 'ɵɵdeferHydrateWhen': ɵɵdeferHydrateWhen,\n 'ɵɵdeferHydrateNever': ɵɵdeferHydrateNever,\n 'ɵɵdeferHydrateOnIdle': ɵɵdeferHydrateOnIdle,\n 'ɵɵdeferHydrateOnImmediate': ɵɵdeferHydrateOnImmediate,\n 'ɵɵdeferHydrateOnTimer': ɵɵdeferHydrateOnTimer,\n 'ɵɵdeferHydrateOnHover': ɵɵdeferHydrateOnHover,\n 'ɵɵdeferHydrateOnInteraction': ɵɵdeferHydrateOnInteraction,\n 'ɵɵdeferHydrateOnViewport': ɵɵdeferHydrateOnViewport,\n 'ɵɵdeferEnableTimerScheduling': ɵɵdeferEnableTimerScheduling,\n 'ɵɵrepeater': ɵɵrepeater,\n 'ɵɵrepeaterCreate': ɵɵrepeaterCreate,\n 'ɵɵrepeaterTrackByIndex': ɵɵrepeaterTrackByIndex,\n 'ɵɵrepeaterTrackByIdentity': ɵɵrepeaterTrackByIdentity,\n 'ɵɵcomponentInstance': ɵɵcomponentInstance,\n 'ɵɵtext': ɵɵtext,\n 'ɵɵtextInterpolate': ɵɵtextInterpolate,\n 'ɵɵtextInterpolate1': ɵɵtextInterpolate1,\n 'ɵɵtextInterpolate2': ɵɵtextInterpolate2,\n 'ɵɵtextInterpolate3': ɵɵtextInterpolate3,\n 'ɵɵtextInterpolate4': ɵɵtextInterpolate4,\n 'ɵɵtextInterpolate5': ɵɵtextInterpolate5,\n 'ɵɵtextInterpolate6': ɵɵtextInterpolate6,\n 'ɵɵtextInterpolate7': ɵɵtextInterpolate7,\n 'ɵɵtextInterpolate8': ɵɵtextInterpolate8,\n 'ɵɵtextInterpolateV': ɵɵtextInterpolateV,\n 'ɵɵi18n': ɵɵi18n,\n 'ɵɵi18nAttributes': ɵɵi18nAttributes,\n 'ɵɵi18nExp': ɵɵi18nExp,\n 'ɵɵi18nStart': ɵɵi18nStart,\n 'ɵɵi18nEnd': ɵɵi18nEnd,\n 'ɵɵi18nApply': ɵɵi18nApply,\n 'ɵɵi18nPostprocess': ɵɵi18nPostprocess,\n 'ɵɵresolveWindow': ɵɵresolveWindow,\n 'ɵɵresolveDocument': ɵɵresolveDocument,\n 'ɵɵresolveBody': ɵɵresolveBody,\n 'ɵɵsetComponentScope': ɵɵsetComponentScope,\n 'ɵɵsetNgModuleScope': ɵɵsetNgModuleScope,\n 'ɵɵregisterNgModuleType': registerNgModuleType,\n 'ɵɵgetComponentDepsFactory': ɵɵgetComponentDepsFactory,\n 'ɵsetClassDebugInfo': ɵsetClassDebugInfo,\n 'ɵɵdeclareLet': ɵɵdeclareLet,\n 'ɵɵstoreLet': ɵɵstoreLet,\n 'ɵɵarrowFunction': ɵɵarrowFunction,\n 'ɵɵreadContextLet': ɵɵreadContextLet,\n 'ɵɵattachSourceLocations': ɵɵattachSourceLocations,\n 'ɵɵinterpolate': ɵɵinterpolate,\n 'ɵɵinterpolate1': ɵɵinterpolate1,\n 'ɵɵinterpolate2': ɵɵinterpolate2,\n 'ɵɵinterpolate3': ɵɵinterpolate3,\n 'ɵɵinterpolate4': ɵɵinterpolate4,\n 'ɵɵinterpolate5': ɵɵinterpolate5,\n 'ɵɵinterpolate6': ɵɵinterpolate6,\n 'ɵɵinterpolate7': ɵɵinterpolate7,\n 'ɵɵinterpolate8': ɵɵinterpolate8,\n 'ɵɵinterpolateV': ɵɵinterpolateV,\n 'ɵɵsanitizeHtml': ɵɵsanitizeHtml,\n 'ɵɵsanitizeStyle': ɵɵsanitizeStyle,\n 'ɵɵsanitizeResourceUrl': ɵɵsanitizeResourceUrl,\n 'ɵɵsanitizeScript': ɵɵsanitizeScript,\n 'ɵɵvalidateAttribute': ɵɵvalidateAttribute,\n 'ɵɵsanitizeUrl': ɵɵsanitizeUrl,\n 'ɵɵsanitizeUrlOrResourceUrl': ɵɵsanitizeUrlOrResourceUrl,\n 'ɵɵtrustConstantHtml': ɵɵtrustConstantHtml,\n 'ɵɵtrustConstantResourceUrl': ɵɵtrustConstantResourceUrl,\n 'forwardRef': forwardRef,\n 'resolveForwardRef': resolveForwardRef,\n 'ɵɵtwoWayProperty': ɵɵtwoWayProperty,\n 'ɵɵtwoWayBindingSet': ɵɵtwoWayBindingSet,\n 'ɵɵtwoWayListener': ɵɵtwoWayListener,\n 'ɵɵreplaceMetadata': ɵɵreplaceMetadata,\n 'ɵɵgetReplaceMetadataURL': ɵɵgetReplaceMetadataURL\n}))();\nlet jitOptions = null;\nfunction setJitOptions(options) {\n if (jitOptions !== null) {\n if (options.defaultEncapsulation !== jitOptions.defaultEncapsulation) {\n ngDevMode && console.error('Provided value for `defaultEncapsulation` can not be changed once it has been set.');\n return;\n }\n if (options.preserveWhitespaces !== jitOptions.preserveWhitespaces) {\n ngDevMode && console.error('Provided value for `preserveWhitespaces` can not be changed once it has been set.');\n return;\n }\n }\n jitOptions = options;\n}\nfunction getJitOptions() {\n return jitOptions;\n}\nfunction resetJitOptions() {\n jitOptions = null;\n}\nconst moduleQueue = [];\nfunction enqueueModuleForDelayedScoping(moduleType, ngModule) {\n moduleQueue.push({\n moduleType,\n ngModule\n });\n}\nlet flushingModuleQueue = false;\nfunction flushModuleScopingQueueAsMuchAsPossible() {\n if (!flushingModuleQueue) {\n flushingModuleQueue = true;\n try {\n for (let i = moduleQueue.length - 1; i >= 0; i--) {\n const {\n moduleType,\n ngModule\n } = moduleQueue[i];\n if (ngModule.declarations && ngModule.declarations.every(isResolvedDeclaration)) {\n moduleQueue.splice(i, 1);\n setScopeOnDeclaredComponents(moduleType, ngModule);\n }\n }\n } finally {\n flushingModuleQueue = false;\n }\n }\n}\nfunction isResolvedDeclaration(declaration) {\n if (Array.isArray(declaration)) {\n return declaration.every(isResolvedDeclaration);\n }\n return !!resolveForwardRef(declaration);\n}\nfunction compileNgModule(moduleType, ngModule = {}) {\n compileNgModuleDefs(moduleType, ngModule);\n if (ngModule.id !== undefined) {\n registerNgModuleType(moduleType, ngModule.id);\n }\n enqueueModuleForDelayedScoping(moduleType, ngModule);\n}\nfunction compileNgModuleDefs(moduleType, ngModule, allowDuplicateDeclarationsInRoot = false) {\n ngDevMode && assertDefined(moduleType, 'Required value moduleType');\n ngDevMode && assertDefined(ngModule, 'Required value ngModule');\n const declarations = flatten(ngModule.declarations || EMPTY_ARRAY);\n let ngModuleDef = null;\n Object.defineProperty(moduleType, NG_MOD_DEF, {\n configurable: true,\n get: () => {\n if (ngModuleDef === null) {\n if (ngDevMode && ngModule.imports && ngModule.imports.indexOf(moduleType) > -1) {\n throw new Error(`'${stringifyForError(moduleType)}' module can't import itself`);\n }\n const compiler = getCompilerFacade({\n usage: 0,\n kind: 'NgModule',\n type: moduleType\n });\n ngModuleDef = compiler.compileNgModule(angularCoreEnv, `ng:///${moduleType.name}/ɵmod.js`, {\n type: moduleType,\n bootstrap: flatten(ngModule.bootstrap || EMPTY_ARRAY).map(resolveForwardRef),\n declarations: declarations.map(resolveForwardRef),\n imports: flatten(ngModule.imports || EMPTY_ARRAY).map(resolveForwardRef).map(expandModuleWithProviders),\n exports: flatten(ngModule.exports || EMPTY_ARRAY).map(resolveForwardRef).map(expandModuleWithProviders),\n schemas: ngModule.schemas ? flatten(ngModule.schemas) : null,\n id: ngModule.id || null\n });\n if (!ngModuleDef.schemas) {\n ngModuleDef.schemas = [];\n }\n }\n return ngModuleDef;\n }\n });\n let ngFactoryDef = null;\n Object.defineProperty(moduleType, NG_FACTORY_DEF, {\n get: () => {\n if (ngFactoryDef === null) {\n const compiler = getCompilerFacade({\n usage: 0,\n kind: 'NgModule',\n type: moduleType\n });\n ngFactoryDef = compiler.compileFactory(angularCoreEnv, `ng:///${moduleType.name}/ɵfac.js`, {\n name: moduleType.name,\n type: moduleType,\n deps: reflectDependencies(moduleType),\n target: compiler.FactoryTarget.NgModule,\n typeArgumentCount: 0\n });\n }\n return ngFactoryDef;\n },\n configurable: !!ngDevMode\n });\n let ngInjectorDef = null;\n Object.defineProperty(moduleType, NG_INJ_DEF, {\n get: () => {\n if (ngInjectorDef === null) {\n ngDevMode && verifySemanticsOfNgModuleDef(moduleType, allowDuplicateDeclarationsInRoot);\n const meta = {\n name: moduleType.name,\n type: moduleType,\n providers: ngModule.providers || EMPTY_ARRAY,\n imports: [(ngModule.imports || EMPTY_ARRAY).map(resolveForwardRef), (ngModule.exports || EMPTY_ARRAY).map(resolveForwardRef)]\n };\n const compiler = getCompilerFacade({\n usage: 0,\n kind: 'NgModule',\n type: moduleType\n });\n ngInjectorDef = compiler.compileInjector(angularCoreEnv, `ng:///${moduleType.name}/ɵinj.js`, meta);\n }\n return ngInjectorDef;\n },\n configurable: !!ngDevMode\n });\n}\nfunction generateStandaloneInDeclarationsError(type, location) {\n const prefix = `Unexpected \"${stringifyForError(type)}\" found in the \"declarations\" array of the`;\n const suffix = `\"${stringifyForError(type)}\" is marked as standalone and can't be declared ` + 'in any NgModule - did you intend to import it instead (by adding it to the \"imports\" array)?';\n return `${prefix} ${location}, ${suffix}`;\n}\nfunction verifySemanticsOfNgModuleDef(moduleType, allowDuplicateDeclarationsInRoot, importingModule) {\n if (verifiedNgModule.get(moduleType)) return;\n if (isStandalone(moduleType)) return;\n verifiedNgModule.set(moduleType, true);\n moduleType = resolveForwardRef(moduleType);\n let ngModuleDef;\n if (importingModule) {\n ngModuleDef = getNgModuleDef(moduleType);\n if (!ngModuleDef) {\n throw new Error(`Unexpected value '${moduleType.name}' imported by the module '${importingModule.name}'. Please add an @NgModule annotation.`);\n }\n } else {\n ngModuleDef = getNgModuleDefOrThrow(moduleType);\n }\n const errors = [];\n const declarations = maybeUnwrapFn(ngModuleDef.declarations);\n const imports = maybeUnwrapFn(ngModuleDef.imports);\n flatten(imports).map(unwrapModuleWithProvidersImports).forEach(modOrStandaloneCmpt => {\n verifySemanticsOfNgModuleImport(modOrStandaloneCmpt, moduleType);\n verifySemanticsOfNgModuleDef(modOrStandaloneCmpt, false, moduleType);\n });\n const exports = maybeUnwrapFn(ngModuleDef.exports);\n declarations.forEach(verifyDeclarationsHaveDefinitions);\n declarations.forEach(verifyDirectivesHaveSelector);\n declarations.forEach(declarationType => verifyNotStandalone(declarationType, moduleType));\n const combinedDeclarations = [...declarations.map(resolveForwardRef), ...flatten(imports.map(computeCombinedExports)).map(resolveForwardRef)];\n exports.forEach(verifyExportsAreDeclaredOrReExported);\n declarations.forEach(decl => verifyDeclarationIsUnique(decl, allowDuplicateDeclarationsInRoot));\n const ngModule = getAnnotation(moduleType, 'NgModule');\n if (ngModule) {\n ngModule.imports && flatten(ngModule.imports).map(unwrapModuleWithProvidersImports).forEach(mod => {\n verifySemanticsOfNgModuleImport(mod, moduleType);\n verifySemanticsOfNgModuleDef(mod, false, moduleType);\n });\n ngModule.bootstrap && deepForEach(ngModule.bootstrap, verifyCorrectBootstrapType);\n ngModule.bootstrap && deepForEach(ngModule.bootstrap, verifyComponentIsPartOfNgModule);\n }\n if (errors.length) {\n throw new Error(errors.join('\\n'));\n }\n function verifyDeclarationsHaveDefinitions(type) {\n type = resolveForwardRef(type);\n const def = getComponentDef(type) || getDirectiveDef(type) || getPipeDef$1(type);\n if (!def) {\n errors.push(`Unexpected value '${stringifyForError(type)}' declared by the module '${stringifyForError(moduleType)}'. Please add a @Pipe/@Directive/@Component annotation.`);\n }\n }\n function verifyDirectivesHaveSelector(type) {\n type = resolveForwardRef(type);\n const def = getDirectiveDef(type);\n if (!getComponentDef(type) && def && def.selectors.length == 0) {\n errors.push(`Directive ${stringifyForError(type)} has no selector, please add it!`);\n }\n }\n function verifyNotStandalone(type, moduleType) {\n type = resolveForwardRef(type);\n const def = getComponentDef(type) || getDirectiveDef(type) || getPipeDef$1(type);\n if (def?.standalone) {\n const location = `\"${stringifyForError(moduleType)}\" NgModule`;\n errors.push(generateStandaloneInDeclarationsError(type, location));\n }\n }\n function verifyExportsAreDeclaredOrReExported(type) {\n type = resolveForwardRef(type);\n const kind = getComponentDef(type) && 'component' || getDirectiveDef(type) && 'directive' || getPipeDef$1(type) && 'pipe';\n if (kind) {\n if (combinedDeclarations.lastIndexOf(type) === -1) {\n errors.push(`Can't export ${kind} ${stringifyForError(type)} from ${stringifyForError(moduleType)} as it was neither declared nor imported!`);\n }\n }\n }\n function verifyDeclarationIsUnique(type, suppressErrors) {\n type = resolveForwardRef(type);\n const existingModule = ownerNgModule.get(type);\n if (existingModule && existingModule !== moduleType) {\n if (!suppressErrors) {\n const modules = [existingModule, moduleType].map(stringifyForError).sort();\n errors.push(`Type ${stringifyForError(type)} is part of the declarations of 2 modules: ${modules[0]} and ${modules[1]}! ` + `Please consider moving ${stringifyForError(type)} to a higher module that imports ${modules[0]} and ${modules[1]}. ` + `You can also create a new NgModule that exports and includes ${stringifyForError(type)} then import that NgModule in ${modules[0]} and ${modules[1]}.`);\n }\n } else {\n ownerNgModule.set(type, moduleType);\n }\n }\n function verifyComponentIsPartOfNgModule(type) {\n type = resolveForwardRef(type);\n const existingModule = ownerNgModule.get(type);\n if (!existingModule && !isStandalone(type)) {\n errors.push(`Component ${stringifyForError(type)} is not part of any NgModule or the module has not been imported into your module.`);\n }\n }\n function verifyCorrectBootstrapType(type) {\n type = resolveForwardRef(type);\n if (!getComponentDef(type)) {\n errors.push(`${stringifyForError(type)} cannot be used as an entry component.`);\n }\n if (isStandalone(type)) {\n errors.push(`The \\`${stringifyForError(type)}\\` class is a standalone component, which can ` + `not be used in the \\`@NgModule.bootstrap\\` array. Use the \\`bootstrapApplication\\` ` + `function for bootstrap instead.`);\n }\n }\n function verifySemanticsOfNgModuleImport(type, importingModule) {\n type = resolveForwardRef(type);\n const directiveDef = getComponentDef(type) || getDirectiveDef(type);\n if (directiveDef !== null && !directiveDef.standalone) {\n throw new Error(`Unexpected directive '${type.name}' imported by the module '${importingModule.name}'. Please add an @NgModule annotation.`);\n }\n const pipeDef = getPipeDef$1(type);\n if (pipeDef !== null && !pipeDef.standalone) {\n throw new Error(`Unexpected pipe '${type.name}' imported by the module '${importingModule.name}'. Please add an @NgModule annotation.`);\n }\n }\n}\nfunction unwrapModuleWithProvidersImports(typeOrWithProviders) {\n typeOrWithProviders = resolveForwardRef(typeOrWithProviders);\n return typeOrWithProviders.ngModule || typeOrWithProviders;\n}\nfunction getAnnotation(type, name) {\n let annotation = null;\n collect(type.__annotations__);\n collect(type.decorators);\n return annotation;\n function collect(annotations) {\n if (annotations) {\n annotations.forEach(readAnnotation);\n }\n }\n function readAnnotation(decorator) {\n if (!annotation) {\n const proto = Object.getPrototypeOf(decorator);\n if (proto.ngMetadataName == name) {\n annotation = decorator;\n } else if (decorator.type) {\n const proto = Object.getPrototypeOf(decorator.type);\n if (proto.ngMetadataName == name) {\n annotation = decorator.args[0];\n }\n }\n }\n }\n}\nlet ownerNgModule = /*#__PURE__*/new WeakMap();\nlet verifiedNgModule = /*#__PURE__*/new WeakMap();\nfunction resetCompiledComponents() {\n ownerNgModule = new WeakMap();\n verifiedNgModule = new WeakMap();\n moduleQueue.length = 0;\n GENERATED_COMP_IDS.clear();\n}\nfunction computeCombinedExports(type) {\n type = resolveForwardRef(type);\n const ngModuleDef = getNgModuleDef(type);\n if (ngModuleDef === null) {\n return [type];\n }\n return flatten(maybeUnwrapFn(ngModuleDef.exports).map(type => {\n const ngModuleDef = getNgModuleDef(type);\n if (ngModuleDef) {\n verifySemanticsOfNgModuleDef(type, false);\n return computeCombinedExports(type);\n } else {\n return type;\n }\n }));\n}\nfunction setScopeOnDeclaredComponents(moduleType, ngModule) {\n const declarations = flatten(ngModule.declarations || EMPTY_ARRAY);\n const transitiveScopes = transitiveScopesFor(moduleType);\n declarations.forEach(declaration => {\n declaration = resolveForwardRef(declaration);\n if (declaration.hasOwnProperty(NG_COMP_DEF)) {\n const component = declaration;\n const componentDef = getComponentDef(component);\n patchComponentDefWithScope(componentDef, transitiveScopes);\n } else if (!declaration.hasOwnProperty(NG_DIR_DEF) && !declaration.hasOwnProperty(NG_PIPE_DEF)) {\n declaration.ngSelectorScope = moduleType;\n }\n });\n}\nfunction patchComponentDefWithScope(componentDef, transitiveScopes) {\n componentDef.directiveDefs = () => Array.from(transitiveScopes.compilation.directives).map(dir => dir.hasOwnProperty(NG_COMP_DEF) ? getComponentDef(dir) : getDirectiveDef(dir)).filter(def => !!def);\n componentDef.pipeDefs = () => Array.from(transitiveScopes.compilation.pipes).map(pipe => getPipeDef$1(pipe));\n componentDef.schemas = transitiveScopes.schemas;\n componentDef.tView = null;\n}\nfunction transitiveScopesFor(type) {\n if (isNgModule(type)) {\n const scope = depsTracker.getNgModuleScope(type);\n const def = getNgModuleDefOrThrow(type);\n return {\n schemas: def.schemas || null,\n ...scope\n };\n } else if (isStandalone(type)) {\n const directiveDef = getComponentDef(type) || getDirectiveDef(type);\n if (directiveDef !== null) {\n return {\n schemas: null,\n compilation: {\n directives: new Set(),\n pipes: new Set()\n },\n exported: {\n directives: new Set([type]),\n pipes: new Set()\n }\n };\n }\n const pipeDef = getPipeDef$1(type);\n if (pipeDef !== null) {\n return {\n schemas: null,\n compilation: {\n directives: new Set(),\n pipes: new Set()\n },\n exported: {\n directives: new Set(),\n pipes: new Set([type])\n }\n };\n }\n }\n throw new Error(`${type.name} does not have a module def (ɵmod property)`);\n}\nfunction expandModuleWithProviders(value) {\n if (isModuleWithProviders(value)) {\n return value.ngModule;\n }\n return value;\n}\nlet compilationDepth = 0;\nfunction compileComponent(type, metadata) {\n (typeof ngDevMode === 'undefined' || ngDevMode) && initNgDevMode();\n let ngComponentDef = null;\n maybeQueueResolutionOfComponentResources(type, metadata);\n addDirectiveFactoryDef(type, metadata);\n Object.defineProperty(type, NG_COMP_DEF, {\n get: () => {\n if (ngComponentDef === null) {\n const compiler = getCompilerFacade({\n usage: 0,\n kind: 'component',\n type: type\n });\n if (componentNeedsResolution(metadata)) {\n const error = [`Component '${type.name}' is not resolved:`];\n if (metadata.templateUrl) {\n error.push(` - templateUrl: ${metadata.templateUrl}`);\n }\n if (metadata.styleUrls && metadata.styleUrls.length) {\n error.push(` - styleUrls: ${JSON.stringify(metadata.styleUrls)}`);\n }\n if (metadata.styleUrl) {\n error.push(` - styleUrl: ${metadata.styleUrl}`);\n }\n error.push(`Did you run and wait for 'resolveComponentResources()'?`);\n throw new Error(error.join('\\n'));\n }\n const options = getJitOptions();\n let preserveWhitespaces = metadata.preserveWhitespaces;\n if (preserveWhitespaces === undefined) {\n if (options !== null && options.preserveWhitespaces !== undefined) {\n preserveWhitespaces = options.preserveWhitespaces;\n } else {\n preserveWhitespaces = false;\n }\n }\n let encapsulation = metadata.encapsulation;\n if (encapsulation === undefined) {\n if (options !== null && options.defaultEncapsulation !== undefined) {\n encapsulation = options.defaultEncapsulation;\n } else {\n encapsulation = ViewEncapsulation.Emulated;\n }\n }\n const templateUrl = metadata.templateUrl || `ng:///${type.name}/template.html`;\n const baseMeta = directiveMetadata(type, metadata);\n const meta = {\n ...baseMeta,\n typeSourceSpan: compiler.createParseSourceSpan('Component', type.name, templateUrl),\n template: metadata.template || '',\n preserveWhitespaces,\n styles: typeof metadata.styles === 'string' ? [metadata.styles] : metadata.styles || EMPTY_ARRAY,\n animations: metadata.animations,\n declarations: [],\n changeDetection: metadata.changeDetection,\n encapsulation,\n viewProviders: metadata.viewProviders || null,\n hasDirectiveDependencies: !baseMeta.isStandalone || metadata.imports != null && metadata.imports.length > 0\n };\n compilationDepth++;\n try {\n if (meta.usesInheritance) {\n addDirectiveDefToUndecoratedParents(type);\n }\n ngComponentDef = compiler.compileComponent(angularCoreEnv, templateUrl, meta);\n if (meta.isStandalone) {\n const imports = flatten(metadata.imports || EMPTY_ARRAY);\n const {\n directiveDefs,\n pipeDefs\n } = getStandaloneDefFunctions(type, imports);\n ngComponentDef.directiveDefs = directiveDefs;\n ngComponentDef.pipeDefs = pipeDefs;\n ngComponentDef.dependencies = () => imports.map(resolveForwardRef);\n }\n } finally {\n compilationDepth--;\n }\n if (compilationDepth === 0) {\n flushModuleScopingQueueAsMuchAsPossible();\n }\n if (hasSelectorScope(type)) {\n const scopes = transitiveScopesFor(type.ngSelectorScope);\n patchComponentDefWithScope(ngComponentDef, scopes);\n }\n if (metadata.schemas) {\n if (meta.isStandalone) {\n ngComponentDef.schemas = metadata.schemas;\n } else {\n throw new Error(`The 'schemas' was specified for the ${stringifyForError(type)} but is only valid on a component that is standalone.`);\n }\n } else if (meta.isStandalone) {\n ngComponentDef.schemas = [];\n }\n }\n return ngComponentDef;\n },\n set: def => {\n ngComponentDef = def;\n },\n configurable: !!ngDevMode\n });\n}\nfunction getStandaloneDefFunctions(type, imports) {\n const directiveDefs = () => {\n if (ngDevMode) {\n for (const rawDep of imports) {\n verifyStandaloneImport(rawDep, type);\n }\n }\n if (!isComponent(type)) {\n return [];\n }\n const scope = depsTracker.getStandaloneComponentScope(type, imports);\n return [...scope.compilation.directives].map(p => getComponentDef(p) || getDirectiveDef(p)).filter(d => d !== null);\n };\n const pipeDefs = () => {\n if (ngDevMode) {\n for (const rawDep of imports) {\n verifyStandaloneImport(rawDep, type);\n }\n }\n if (!isComponent(type)) {\n return [];\n }\n const scope = depsTracker.getStandaloneComponentScope(type, imports);\n return [...scope.compilation.pipes].map(p => getPipeDef$1(p)).filter(d => d !== null);\n };\n return {\n directiveDefs,\n pipeDefs\n };\n}\nfunction hasSelectorScope(component) {\n return component.ngSelectorScope !== undefined;\n}\nfunction compileDirective(type, directive) {\n let ngDirectiveDef = null;\n addDirectiveFactoryDef(type, directive || {});\n Object.defineProperty(type, NG_DIR_DEF, {\n get: () => {\n if (ngDirectiveDef === null) {\n const meta = getDirectiveMetadata(type, directive || {});\n const compiler = getCompilerFacade({\n usage: 0,\n kind: 'directive',\n type\n });\n ngDirectiveDef = compiler.compileDirective(angularCoreEnv, meta.sourceMapUrl, meta.metadata);\n }\n return ngDirectiveDef;\n },\n configurable: !!ngDevMode\n });\n}\nfunction getDirectiveMetadata(type, metadata) {\n const name = type && type.name;\n const sourceMapUrl = `ng:///${name}/ɵdir.js`;\n const compiler = getCompilerFacade({\n usage: 0,\n kind: 'directive',\n type\n });\n const facade = directiveMetadata(type, metadata);\n facade.typeSourceSpan = compiler.createParseSourceSpan('Directive', name, sourceMapUrl);\n if (facade.usesInheritance) {\n addDirectiveDefToUndecoratedParents(type);\n }\n return {\n metadata: facade,\n sourceMapUrl\n };\n}\nfunction addDirectiveFactoryDef(type, metadata) {\n let ngFactoryDef = null;\n Object.defineProperty(type, NG_FACTORY_DEF, {\n get: () => {\n if (ngFactoryDef === null) {\n const meta = getDirectiveMetadata(type, metadata);\n const compiler = getCompilerFacade({\n usage: 0,\n kind: 'directive',\n type\n });\n ngFactoryDef = compiler.compileFactory(angularCoreEnv, `ng:///${type.name}/ɵfac.js`, {\n name: meta.metadata.name,\n type: meta.metadata.type,\n typeArgumentCount: 0,\n deps: reflectDependencies(type),\n target: compiler.FactoryTarget.Directive\n });\n }\n return ngFactoryDef;\n },\n configurable: !!ngDevMode\n });\n}\nfunction extendsDirectlyFromObject(type) {\n return Object.getPrototypeOf(type.prototype) === Object.prototype;\n}\nfunction directiveMetadata(type, metadata) {\n const reflect = getReflect();\n const propMetadata = reflect.ownPropMetadata(type);\n return {\n name: type.name,\n type: type,\n selector: metadata.selector !== undefined ? metadata.selector : null,\n host: metadata.host || EMPTY_OBJ,\n propMetadata: propMetadata,\n inputs: metadata.inputs || EMPTY_ARRAY,\n outputs: metadata.outputs || EMPTY_ARRAY,\n queries: extractQueriesMetadata(type, propMetadata, isContentQuery),\n lifecycle: {\n usesOnChanges: reflect.hasLifecycleHook(type, 'ngOnChanges')\n },\n controlCreate: null,\n typeSourceSpan: null,\n usesInheritance: !extendsDirectlyFromObject(type),\n exportAs: extractExportAs(metadata.exportAs),\n providers: metadata.providers || null,\n viewQueries: extractQueriesMetadata(type, propMetadata, isViewQuery),\n isStandalone: metadata.standalone === undefined ? true : !!metadata.standalone,\n isSignal: !!metadata.signals,\n hostDirectives: metadata.hostDirectives?.map(directive => typeof directive === 'function' ? {\n directive\n } : directive) || null\n };\n}\nfunction addDirectiveDefToUndecoratedParents(type) {\n const objPrototype = Object.prototype;\n let parent = Object.getPrototypeOf(type.prototype).constructor;\n while (parent && parent !== objPrototype) {\n if (!getDirectiveDef(parent) && !getComponentDef(parent) && shouldAddAbstractDirective(parent)) {\n compileDirective(parent, null);\n }\n parent = Object.getPrototypeOf(parent);\n }\n}\nfunction convertToR3QueryPredicate(selector) {\n return typeof selector === 'string' ? splitByComma(selector) : resolveForwardRef(selector);\n}\nfunction convertToR3QueryMetadata(propertyName, ann) {\n return {\n propertyName: propertyName,\n predicate: convertToR3QueryPredicate(ann.selector),\n descendants: ann.descendants,\n first: ann.first,\n read: ann.read ? ann.read : null,\n static: !!ann.static,\n emitDistinctChangesOnly: !!ann.emitDistinctChangesOnly,\n isSignal: !!ann.isSignal\n };\n}\nfunction extractQueriesMetadata(type, propMetadata, isQueryAnn) {\n const queriesMeta = [];\n for (const field in propMetadata) {\n if (propMetadata.hasOwnProperty(field)) {\n const annotations = propMetadata[field];\n annotations.forEach(ann => {\n if (isQueryAnn(ann)) {\n if (!ann.selector) {\n throw new Error(`Can't construct a query for the property \"${field}\" of ` + `\"${stringifyForError(type)}\" since the query selector wasn't defined.`);\n }\n if (annotations.some(isInputAnnotation)) {\n throw new Error(`Cannot combine @Input decorators with query decorators`);\n }\n queriesMeta.push(convertToR3QueryMetadata(field, ann));\n }\n });\n }\n }\n return queriesMeta;\n}\nfunction extractExportAs(exportAs) {\n return exportAs === undefined ? null : splitByComma(exportAs);\n}\nfunction isContentQuery(value) {\n const name = value.ngMetadataName;\n return name === 'ContentChild' || name === 'ContentChildren';\n}\nfunction isViewQuery(value) {\n const name = value.ngMetadataName;\n return name === 'ViewChild' || name === 'ViewChildren';\n}\nfunction isInputAnnotation(value) {\n return value.ngMetadataName === 'Input';\n}\nfunction splitByComma(value) {\n return value.split(',').map(piece => piece.trim());\n}\nconst LIFECYCLE_HOOKS = ['ngOnChanges', 'ngOnInit', 'ngOnDestroy', 'ngDoCheck', 'ngAfterViewInit', 'ngAfterViewChecked', 'ngAfterContentInit', 'ngAfterContentChecked'];\nfunction shouldAddAbstractDirective(type) {\n const reflect = getReflect();\n if (LIFECYCLE_HOOKS.some(hookName => reflect.hasLifecycleHook(type, hookName))) {\n return true;\n }\n const propMetadata = reflect.propMetadata(type);\n for (const field in propMetadata) {\n const annotations = propMetadata[field];\n for (let i = 0; i < annotations.length; i++) {\n const current = annotations[i];\n const metadataName = current.ngMetadataName;\n if (isInputAnnotation(current) || isContentQuery(current) || isViewQuery(current) || metadataName === 'Output' || metadataName === 'HostBinding' || metadataName === 'HostListener') {\n return true;\n }\n }\n }\n return false;\n}\nfunction compilePipe(type, meta) {\n let ngPipeDef = null;\n let ngFactoryDef = null;\n Object.defineProperty(type, NG_FACTORY_DEF, {\n get: () => {\n if (ngFactoryDef === null) {\n const metadata = getPipeMetadata(type, meta);\n const compiler = getCompilerFacade({\n usage: 0,\n kind: 'pipe',\n type: metadata.type\n });\n ngFactoryDef = compiler.compileFactory(angularCoreEnv, `ng:///${metadata.name}/ɵfac.js`, {\n name: metadata.name,\n type: metadata.type,\n typeArgumentCount: 0,\n deps: reflectDependencies(type),\n target: compiler.FactoryTarget.Pipe\n });\n }\n return ngFactoryDef;\n },\n configurable: !!ngDevMode\n });\n Object.defineProperty(type, NG_PIPE_DEF, {\n get: () => {\n if (ngPipeDef === null) {\n const metadata = getPipeMetadata(type, meta);\n const compiler = getCompilerFacade({\n usage: 0,\n kind: 'pipe',\n type: metadata.type\n });\n ngPipeDef = compiler.compilePipe(angularCoreEnv, `ng:///${metadata.name}/ɵpipe.js`, metadata);\n }\n return ngPipeDef;\n },\n configurable: !!ngDevMode\n });\n}\nfunction getPipeMetadata(type, meta) {\n return {\n type: type,\n name: type.name,\n pipeName: meta.name,\n pure: meta.pure !== undefined ? meta.pure : true,\n isStandalone: meta.standalone === undefined ? true : !!meta.standalone\n };\n}\nconst Directive = /*#__PURE__*/makeDecorator('Directive', (dir = {}) => dir, undefined, undefined, (type, meta) => compileDirective(type, meta));\nconst Component = /*#__PURE__*/makeDecorator('Component', (c = {}) => ({\n changeDetection: ChangeDetectionStrategy.Eager,\n ...c\n}), Directive, undefined, (type, meta) => compileComponent(type, meta));\nconst Pipe = /*#__PURE__*/makeDecorator('Pipe', p => ({\n pure: true,\n ...p\n}), undefined, undefined, (type, meta) => compilePipe(type, meta));\nconst Input = /*#__PURE__*/makePropDecorator('Input', arg => {\n if (!arg) {\n return {};\n }\n return typeof arg === 'string' ? {\n alias: arg\n } : arg;\n});\nconst Output = /*#__PURE__*/makePropDecorator('Output', alias => ({\n alias\n}));\nconst HostBinding = /*#__PURE__*/makePropDecorator('HostBinding', hostPropertyName => ({\n hostPropertyName\n}));\nconst HostListener = /*#__PURE__*/makePropDecorator('HostListener', (eventName, args) => ({\n eventName,\n args\n}));\nconst NgModule = /*#__PURE__*/makeDecorator('NgModule', ngModule => ngModule, undefined, undefined, (type, meta) => compileNgModule(type, meta));\nclass ModuleWithComponentFactories {\n ngModuleFactory;\n componentFactories;\n constructor(ngModuleFactory, componentFactories) {\n this.ngModuleFactory = ngModuleFactory;\n this.componentFactories = componentFactories;\n }\n}\nlet Compiler = /*#__PURE__*/(() => {\n class Compiler {\n compileModuleSync(moduleType) {\n return new NgModuleFactory(moduleType);\n }\n compileModuleAsync(moduleType) {\n return Promise.resolve(this.compileModuleSync(moduleType));\n }\n compileModuleAndAllComponentsSync(moduleType) {\n const ngModuleFactory = this.compileModuleSync(moduleType);\n const moduleDef = getNgModuleDef(moduleType);\n const componentFactories = maybeUnwrapFn(moduleDef.declarations).reduce((factories, declaration) => {\n const componentDef = getComponentDef(declaration);\n componentDef && factories.push(new ComponentFactory(componentDef));\n return factories;\n }, []);\n return new ModuleWithComponentFactories(ngModuleFactory, componentFactories);\n }\n compileModuleAndAllComponentsAsync(moduleType) {\n return Promise.resolve(this.compileModuleAndAllComponentsSync(moduleType));\n }\n clearCache() {}\n clearCacheFor(type) {}\n getModuleId(moduleType) {\n return undefined;\n }\n static ɵfac = function Compiler_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || Compiler)();\n };\n static ɵprov = /*@__PURE__*/__defineInjectable({\n token: Compiler,\n factory: Compiler.ɵfac,\n providedIn: 'root'\n });\n }\n return Compiler;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && setClassMetadata(Compiler, [{\n type: Injectable,\n args: [{\n providedIn: 'root'\n }]\n }], null, null);\n})();\nconst COMPILER_OPTIONS = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'compilerOptions' : '');\nclass CompilerFactory {}\nconst CONSECUTIVE_MICROTASK_NOTIFICATION_LIMIT = 100;\nlet consecutiveMicrotaskNotifications = 0;\nlet stackFromLastFewNotifications = [];\nfunction trackMicrotaskNotificationForDebugging() {\n consecutiveMicrotaskNotifications++;\n if (CONSECUTIVE_MICROTASK_NOTIFICATION_LIMIT - consecutiveMicrotaskNotifications < 5) {\n const stack = new Error().stack;\n if (stack) {\n stackFromLastFewNotifications.push(stack);\n }\n }\n if (consecutiveMicrotaskNotifications === CONSECUTIVE_MICROTASK_NOTIFICATION_LIMIT) {\n throw new RuntimeError(103, 'Angular could not stabilize because there were endless change notifications within the browser event loop. ' + 'The stack from the last several notifications: \\n' + stackFromLastFewNotifications.join('\\n'));\n }\n}\nlet ChangeDetectionSchedulerImpl = /*#__PURE__*/(() => {\n class ChangeDetectionSchedulerImpl {\n applicationErrorHandler = inject(INTERNAL_APPLICATION_ERROR_HANDLER);\n appRef = inject(ApplicationRef);\n taskService = inject(PendingTasksInternal);\n ngZone = inject(NgZone);\n zonelessEnabled = inject(ZONELESS_ENABLED);\n tracing = inject(TracingService, {\n optional: true\n });\n zoneIsDefined = typeof Zone !== 'undefined' && !!Zone.root.run;\n schedulerTickApplyArgs = [{\n data: {\n '__scheduler_tick__': true\n }\n }];\n subscriptions = new Subscription();\n angularZoneId = this.zoneIsDefined ? this.ngZone._inner?.get(angularZoneInstanceIdProperty) : null;\n scheduleInRootZone = !this.zonelessEnabled && this.zoneIsDefined && (inject(SCHEDULE_IN_ROOT_ZONE, {\n optional: true\n }) ?? false);\n cancelScheduledCallback = null;\n useMicrotaskScheduler = false;\n runningTick = false;\n pendingRenderTaskId = null;\n constructor() {\n this.subscriptions.add(this.appRef.afterTick.subscribe(() => {\n const task = this.taskService.add();\n if (!this.runningTick) {\n this.cleanup();\n if (!this.zonelessEnabled || this.appRef.includeAllTestViews) {\n this.taskService.remove(task);\n return;\n }\n }\n this.switchToMicrotaskScheduler();\n this.taskService.remove(task);\n }));\n this.subscriptions.add(this.ngZone.onUnstable.subscribe(() => {\n if (!this.runningTick) {\n this.cleanup();\n }\n }));\n }\n switchToMicrotaskScheduler() {\n this.ngZone.runOutsideAngular(() => {\n const task = this.taskService.add();\n this.useMicrotaskScheduler = true;\n queueMicrotask(() => {\n this.useMicrotaskScheduler = false;\n this.taskService.remove(task);\n });\n });\n }\n notify(source) {\n if (!this.zonelessEnabled && source === 5) {\n return;\n }\n switch (source) {\n case 0:\n {\n this.appRef.dirtyFlags |= 2;\n break;\n }\n case 3:\n case 2:\n case 4:\n case 5:\n case 1:\n {\n this.appRef.dirtyFlags |= 4;\n break;\n }\n case 6:\n {\n this.appRef.dirtyFlags |= 2;\n break;\n }\n case 12:\n {\n this.appRef.dirtyFlags |= 16;\n break;\n }\n case 13:\n {\n this.appRef.dirtyFlags |= 2;\n break;\n }\n case 11:\n {\n break;\n }\n case 9:\n case 8:\n case 7:\n case 10:\n default:\n {\n this.appRef.dirtyFlags |= 8;\n }\n }\n this.appRef.tracingSnapshot = this.tracing?.snapshot(this.appRef.tracingSnapshot) ?? null;\n if (!this.shouldScheduleTick()) {\n return;\n }\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n if (this.useMicrotaskScheduler) {\n trackMicrotaskNotificationForDebugging();\n } else {\n consecutiveMicrotaskNotifications = 0;\n stackFromLastFewNotifications.length = 0;\n }\n }\n const scheduleCallback = this.useMicrotaskScheduler ? scheduleCallbackWithMicrotask : scheduleCallbackWithRafRace;\n this.pendingRenderTaskId = this.taskService.add();\n if (this.scheduleInRootZone) {\n this.cancelScheduledCallback = Zone.root.run(() => scheduleCallback(() => this.tick()));\n } else {\n this.cancelScheduledCallback = this.ngZone.runOutsideAngular(() => scheduleCallback(() => this.tick()));\n }\n }\n shouldScheduleTick() {\n if (this.appRef.destroyed) {\n return false;\n }\n if (this.pendingRenderTaskId !== null || this.runningTick || this.appRef._runningTick) {\n return false;\n }\n if (!this.zonelessEnabled && this.zoneIsDefined && Zone.current.get(angularZoneInstanceIdProperty + this.angularZoneId)) {\n return false;\n }\n return true;\n }\n tick() {\n if (this.runningTick || this.appRef.destroyed) {\n return;\n }\n if (this.appRef.dirtyFlags === 0) {\n this.cleanup();\n return;\n }\n if (!this.zonelessEnabled && this.appRef.dirtyFlags & 7) {\n this.appRef.dirtyFlags |= 1;\n }\n const task = this.taskService.add();\n try {\n this.ngZone.run(() => {\n this.runningTick = true;\n this.appRef._tick();\n }, undefined, this.schedulerTickApplyArgs);\n } catch (e) {\n this.applicationErrorHandler(e);\n } finally {\n this.taskService.remove(task);\n this.cleanup();\n }\n }\n ngOnDestroy() {\n this.subscriptions.unsubscribe();\n this.cleanup();\n }\n cleanup() {\n this.runningTick = false;\n this.cancelScheduledCallback?.();\n this.cancelScheduledCallback = null;\n if (this.pendingRenderTaskId !== null) {\n const taskId = this.pendingRenderTaskId;\n this.pendingRenderTaskId = null;\n this.taskService.remove(taskId);\n }\n }\n static ɵfac = function ChangeDetectionSchedulerImpl_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || ChangeDetectionSchedulerImpl)();\n };\n static ɵprov = /*@__PURE__*/__defineInjectable({\n token: ChangeDetectionSchedulerImpl,\n factory: ChangeDetectionSchedulerImpl.ɵfac,\n providedIn: 'root'\n });\n }\n return ChangeDetectionSchedulerImpl;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && setClassMetadata(ChangeDetectionSchedulerImpl, [{\n type: Injectable,\n args: [{\n providedIn: 'root'\n }]\n }], () => [], null);\n})();\nfunction provideZonelessChangeDetection() {\n performanceMarkFeature('NgZoneless');\n if ((typeof ngDevMode === 'undefined' || ngDevMode) && typeof Zone !== 'undefined' && Zone) {\n const message = formatRuntimeError(914, `The application is using zoneless change detection, but is still loading Zone.js. ` + `Consider removing Zone.js to get the full benefits of zoneless. ` + `In applications using the Angular CLI, Zone.js is typically included in the \"polyfills\" section of the angular.json file.`);\n console.warn(message);\n }\n return makeEnvironmentProviders([...provideZonelessChangeDetectionInternal(), typeof ngDevMode === 'undefined' || ngDevMode ? [{\n provide: PROVIDED_ZONELESS,\n useValue: true\n }] : []]);\n}\nfunction provideZonelessChangeDetectionInternal() {\n return [{\n provide: ChangeDetectionScheduler,\n useExisting: ChangeDetectionSchedulerImpl\n }, {\n provide: NgZone,\n useClass: NoopNgZone\n }, {\n provide: ZONELESS_ENABLED,\n useValue: true\n }];\n}\nfunction getGlobalLocale() {\n if (typeof ngI18nClosureMode !== 'undefined' && ngI18nClosureMode && typeof goog !== 'undefined' && goog.LOCALE !== 'en') {\n return goog.LOCALE;\n } else {\n return typeof $localize !== 'undefined' && $localize.locale || DEFAULT_LOCALE_ID;\n }\n}\nconst LOCALE_ID = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'LocaleId' : '', {\n factory: () => inject(LOCALE_ID, {\n optional: true,\n skipSelf: true\n }) || getGlobalLocale()\n});\nconst DEFAULT_CURRENCY_CODE = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'DefaultCurrencyCode' : '', {\n factory: () => USD_CURRENCY_CODE\n});\nconst TRANSLATIONS = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'Translations' : '');\nconst TRANSLATIONS_FORMAT = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'TranslationsFormat' : '');\nvar MissingTranslationStrategy = /*#__PURE__*/function (MissingTranslationStrategy) {\n MissingTranslationStrategy[MissingTranslationStrategy[\"Error\"] = 0] = \"Error\";\n MissingTranslationStrategy[MissingTranslationStrategy[\"Warning\"] = 1] = \"Warning\";\n MissingTranslationStrategy[MissingTranslationStrategy[\"Ignore\"] = 2] = \"Ignore\";\n return MissingTranslationStrategy;\n}(MissingTranslationStrategy || {});\nclass DebugEventListener {\n name;\n callback;\n constructor(name, callback) {\n this.name = name;\n this.callback = callback;\n }\n}\nfunction asNativeElements(debugEls) {\n return debugEls.map(el => el.nativeElement);\n}\nclass DebugNode {\n nativeNode;\n constructor(nativeNode) {\n this.nativeNode = nativeNode;\n }\n get parent() {\n const parent = this.nativeNode.parentNode;\n return parent ? new DebugElement(parent) : null;\n }\n get injector() {\n return getInjector(this.nativeNode);\n }\n get componentInstance() {\n const nativeElement = this.nativeNode;\n return nativeElement && (getComponent(nativeElement) || getOwningComponent(nativeElement));\n }\n get context() {\n return getComponent(this.nativeNode) || getContext(this.nativeNode);\n }\n get listeners() {\n return getListeners(this.nativeNode).filter(listener => listener.type === 'dom');\n }\n get references() {\n return getLocalRefs(this.nativeNode);\n }\n get providerTokens() {\n return getInjectionTokens(this.nativeNode);\n }\n}\nclass DebugElement extends DebugNode {\n constructor(nativeNode) {\n ngDevMode && assertDomNode(nativeNode);\n super(nativeNode);\n }\n get nativeElement() {\n return this.nativeNode.nodeType == Node.ELEMENT_NODE ? this.nativeNode : null;\n }\n get name() {\n const context = getLContext(this.nativeNode);\n const lView = context ? context.lView : null;\n if (lView !== null) {\n const tData = lView[TVIEW].data;\n const tNode = tData[context.nodeIndex];\n return tNode.value;\n } else {\n return this.nativeNode.nodeName;\n }\n }\n get properties() {\n const context = getLContext(this.nativeNode);\n const lView = context ? context.lView : null;\n if (lView === null) {\n return {};\n }\n const tData = lView[TVIEW].data;\n const tNode = tData[context.nodeIndex];\n const properties = {};\n copyDomProperties(this.nativeElement, properties);\n collectPropertyBindings(properties, tNode, lView, tData);\n return properties;\n }\n get attributes() {\n const attributes = {};\n const element = this.nativeElement;\n if (!element) {\n return attributes;\n }\n const context = getLContext(element);\n const lView = context ? context.lView : null;\n if (lView === null) {\n return {};\n }\n const tNodeAttrs = lView[TVIEW].data[context.nodeIndex].attrs;\n const lowercaseTNodeAttrs = [];\n if (tNodeAttrs) {\n let i = 0;\n while (i < tNodeAttrs.length) {\n const attrName = tNodeAttrs[i];\n if (typeof attrName !== 'string') break;\n const attrValue = tNodeAttrs[i + 1];\n attributes[attrName] = attrValue;\n lowercaseTNodeAttrs.push(attrName.toLowerCase());\n i += 2;\n }\n }\n for (const attr of element.attributes) {\n if (!lowercaseTNodeAttrs.includes(attr.name)) {\n attributes[attr.name] = attr.value;\n }\n }\n return attributes;\n }\n get styles() {\n const element = this.nativeElement;\n return element?.style ?? {};\n }\n get classes() {\n const result = {};\n const element = this.nativeElement;\n const className = element.className;\n const classes = typeof className !== 'string' ? className.baseVal.split(' ') : className.split(' ');\n classes.forEach(value => result[value] = true);\n return result;\n }\n get childNodes() {\n const childNodes = this.nativeNode.childNodes;\n const children = [];\n for (let i = 0; i < childNodes.length; i++) {\n const element = childNodes[i];\n children.push(getDebugNode(element));\n }\n return children;\n }\n get children() {\n const nativeElement = this.nativeElement;\n if (!nativeElement) return [];\n const childNodes = nativeElement.children;\n const children = [];\n for (let i = 0; i < childNodes.length; i++) {\n const element = childNodes[i];\n children.push(getDebugNode(element));\n }\n return children;\n }\n query(predicate) {\n const results = this.queryAll(predicate);\n return results[0] || null;\n }\n queryAll(predicate) {\n const matches = [];\n _queryAll(this, predicate, matches, true);\n return matches;\n }\n queryAllNodes(predicate) {\n const matches = [];\n _queryAll(this, predicate, matches, false);\n return matches;\n }\n triggerEventHandler(eventName, eventObj) {\n const node = this.nativeNode;\n const invokedListeners = [];\n this.listeners.forEach(listener => {\n if (listener.name === eventName) {\n const callback = listener.callback;\n callback.call(node, eventObj);\n invokedListeners.push(callback);\n }\n });\n if (typeof node.eventListeners === 'function') {\n node.eventListeners(eventName).forEach(listener => {\n if (listener.toString().indexOf('__ngUnwrap__') !== -1) {\n const unwrappedListener = listener('__ngUnwrap__');\n return invokedListeners.indexOf(unwrappedListener) === -1 && unwrappedListener.call(node, eventObj);\n }\n });\n }\n }\n}\nfunction copyDomProperties(element, properties) {\n if (element) {\n let obj = Object.getPrototypeOf(element);\n const NodePrototype = Node.prototype;\n while (obj !== null && obj !== NodePrototype) {\n const descriptors = Object.getOwnPropertyDescriptors(obj);\n for (let key in descriptors) {\n if (!key.startsWith('__') && !key.startsWith('on')) {\n const value = element[key];\n if (isPrimitiveValue(value)) {\n properties[key] = value;\n }\n }\n }\n obj = Object.getPrototypeOf(obj);\n }\n }\n}\nfunction isPrimitiveValue(value) {\n return typeof value === 'string' || typeof value === 'boolean' || typeof value === 'number' || value === null;\n}\nfunction _queryAll(parentElement, predicate, matches, elementsOnly) {\n const context = getLContext(parentElement.nativeNode);\n const lView = context ? context.lView : null;\n if (lView !== null) {\n const parentTNode = lView[TVIEW].data[context.nodeIndex];\n _queryNodeChildren(parentTNode, lView, predicate, matches, elementsOnly, parentElement.nativeNode);\n } else {\n _queryNativeNodeDescendants(parentElement.nativeNode, predicate, matches, elementsOnly);\n }\n}\nfunction _queryNodeChildren(tNode, lView, predicate, matches, elementsOnly, rootNativeNode) {\n ngDevMode && assertTNodeForLView(tNode, lView);\n const nativeNode = getNativeByTNodeOrNull(tNode, lView);\n if (tNode.type & (3 | 8)) {\n _addQueryMatch(nativeNode, predicate, matches, elementsOnly, rootNativeNode);\n if (isComponentHost(tNode)) {\n const componentView = getComponentLViewByIndex(tNode.index, lView);\n if (componentView && componentView[TVIEW].firstChild) {\n _queryNodeChildren(componentView[TVIEW].firstChild, componentView, predicate, matches, elementsOnly, rootNativeNode);\n }\n } else {\n if (tNode.child) {\n _queryNodeChildren(tNode.child, lView, predicate, matches, elementsOnly, rootNativeNode);\n }\n nativeNode && _queryNativeNodeDescendants(nativeNode, predicate, matches, elementsOnly);\n }\n const nodeOrContainer = lView[tNode.index];\n if (isLContainer(nodeOrContainer)) {\n _queryNodeChildrenInContainer(nodeOrContainer, predicate, matches, elementsOnly, rootNativeNode);\n }\n } else if (tNode.type & 4) {\n const lContainer = lView[tNode.index];\n _addQueryMatch(lContainer[NATIVE], predicate, matches, elementsOnly, rootNativeNode);\n _queryNodeChildrenInContainer(lContainer, predicate, matches, elementsOnly, rootNativeNode);\n } else if (tNode.type & 16) {\n const componentView = lView[DECLARATION_COMPONENT_VIEW];\n const componentHost = componentView[T_HOST];\n const head = componentHost.projection[tNode.projection];\n if (Array.isArray(head)) {\n for (let nativeNode of head) {\n _addQueryMatch(nativeNode, predicate, matches, elementsOnly, rootNativeNode);\n }\n } else if (head) {\n const nextLView = componentView[PARENT];\n const nextTNode = nextLView[TVIEW].data[head.index];\n _queryNodeChildren(nextTNode, nextLView, predicate, matches, elementsOnly, rootNativeNode);\n }\n } else if (tNode.child) {\n _queryNodeChildren(tNode.child, lView, predicate, matches, elementsOnly, rootNativeNode);\n }\n if (rootNativeNode !== nativeNode) {\n const nextTNode = tNode.flags & 2 ? tNode.projectionNext : tNode.next;\n if (nextTNode) {\n _queryNodeChildren(nextTNode, lView, predicate, matches, elementsOnly, rootNativeNode);\n }\n }\n}\nfunction _queryNodeChildrenInContainer(lContainer, predicate, matches, elementsOnly, rootNativeNode) {\n for (let i = CONTAINER_HEADER_OFFSET; i < lContainer.length; i++) {\n const childView = lContainer[i];\n const firstChild = childView[TVIEW].firstChild;\n if (firstChild) {\n _queryNodeChildren(firstChild, childView, predicate, matches, elementsOnly, rootNativeNode);\n }\n }\n}\nfunction _addQueryMatch(nativeNode, predicate, matches, elementsOnly, rootNativeNode) {\n if (rootNativeNode !== nativeNode) {\n const debugNode = getDebugNode(nativeNode);\n if (!debugNode) {\n return;\n }\n if (elementsOnly && debugNode instanceof DebugElement && predicate(debugNode) && matches.indexOf(debugNode) === -1) {\n matches.push(debugNode);\n } else if (!elementsOnly && predicate(debugNode) && matches.indexOf(debugNode) === -1) {\n matches.push(debugNode);\n }\n }\n}\nfunction _queryNativeNodeDescendants(parentNode, predicate, matches, elementsOnly) {\n const nodes = parentNode.childNodes;\n const length = nodes.length;\n for (let i = 0; i < length; i++) {\n const node = nodes[i];\n const debugNode = getDebugNode(node);\n if (debugNode) {\n if (elementsOnly && debugNode instanceof DebugElement && predicate(debugNode) && matches.indexOf(debugNode) === -1) {\n matches.push(debugNode);\n } else if (!elementsOnly && predicate(debugNode) && matches.indexOf(debugNode) === -1) {\n matches.push(debugNode);\n }\n _queryNativeNodeDescendants(node, predicate, matches, elementsOnly);\n }\n }\n}\nfunction collectPropertyBindings(properties, tNode, lView, tData) {\n let bindingIndexes = tNode.propertyBindings;\n if (bindingIndexes !== null) {\n for (let i = 0; i < bindingIndexes.length; i++) {\n const bindingIndex = bindingIndexes[i];\n const propMetadata = tData[bindingIndex];\n const metadataParts = propMetadata.split(INTERPOLATION_DELIMITER);\n const propertyName = metadataParts[0];\n if (metadataParts.length > 1) {\n let value = metadataParts[1];\n for (let j = 1; j < metadataParts.length - 1; j++) {\n value += renderStringify(lView[bindingIndex + j - 1]) + metadataParts[j + 1];\n }\n properties[propertyName] = value;\n } else {\n properties[propertyName] = lView[bindingIndex];\n }\n }\n }\n}\nconst NG_DEBUG_PROPERTY = '__ng_debug__';\nfunction getDebugNode(nativeNode) {\n if (nativeNode instanceof Node) {\n if (!nativeNode.hasOwnProperty(NG_DEBUG_PROPERTY)) {\n nativeNode[NG_DEBUG_PROPERTY] = nativeNode.nodeType == Node.ELEMENT_NODE ? new DebugElement(nativeNode) : new DebugNode(nativeNode);\n }\n return nativeNode[NG_DEBUG_PROPERTY];\n }\n return null;\n}\nexport { AFTER_RENDER_PHASES, ANIMATIONS_DISABLED, ANIMATION_MODULE_TYPE, APP_BOOTSTRAP_LISTENER, APP_ID, APP_INITIALIZER, AcxChangeDetectionStrategy, AcxViewEncapsulation, AfterRenderImpl, AfterRenderManager, AfterRenderSequence, ApplicationInitStatus, ApplicationRef, Attribute, COMPILER_OPTIONS, CONTAINERS, CSP_NONCE, CUSTOM_ELEMENTS_SCHEMA, ChangeDetectionSchedulerImpl, ChangeDetectionStrategy, Compiler, CompilerFactory, Component, ComponentFactory, ComponentFactory$1, ComponentFactoryResolver$1 as ComponentFactoryResolver, ComponentRef$1 as ComponentRef, ComponentRef as ComponentRef$1, Console, DEFAULT_CURRENCY_CODE, DEFAULT_LOCALE_ID, DEFER_BLOCK_CONFIG, DEFER_BLOCK_DEPENDENCY_INTERCEPTOR, DEFER_BLOCK_ID, DEFER_BLOCK_SSR_ID_ATTRIBUTE, DEFER_BLOCK_STATE$1 as DEFER_BLOCK_STATE, DEFER_BLOCK_STATE as DEFER_BLOCK_STATE$1, DEFER_HYDRATE_TRIGGERS, DEFER_PARENT_BLOCK_ID, DEHYDRATED_BLOCK_REGISTRY, DISCONNECTED_NODES, DebugElement, DebugEventListener, DebugNode, DeferBlockBehavior, DeferBlockState, DehydratedBlockRegistry, Directive, ELEMENT_CONTAINERS, EVENT_REPLAY_ENABLED_DEFAULT, EVENT_REPLAY_QUEUE, ElementRef, EnvironmentNgModuleRefAdapter, Host, HostBinding, HostListener, HydrationStatus, I18N_DATA, IMAGE_CONFIG, IMAGE_CONFIG_DEFAULTS, IS_ENABLED_BLOCKING_INITIAL_NAVIGATION, IS_EVENT_REPLAY_ENABLED, IS_HYDRATION_DOM_REUSE_ENABLED, IS_I18N_HYDRATION_ENABLED, IS_INCREMENTAL_HYDRATION_ENABLED, Inject, Injectable, Input, JSACTION_BLOCK_ELEMENT_MAP, JSACTION_EVENT_CONTRACT, LContext, LOCALE_ID, LocaleDataIndex, MAX_ANIMATION_TIMEOUT, MULTIPLIER, MissingTranslationStrategy, ModuleWithComponentFactories, NGH_ATTR_NAME, NGH_DATA_KEY, NGH_DEFER_BLOCKS_KEY, NODES, NOOP_AFTER_RENDER_REF, NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR, NO_CHANGE, NO_ERRORS_SCHEMA, NUM_ROOT_NODES, NgModule, NgModuleFactory, NgModuleFactory$1, NgModuleRef, NgModuleRef$1, Optional, Output, PLATFORM_ID, PLATFORM_INITIALIZER, PRESERVE_HOST_CONTENT, Pipe, ProfilerEvent, QueryList, ReflectionCapabilities, Renderer2, RendererFactory2, RendererStyleFlags2, SKIP_HYDRATION_ATTR_NAME, SSR_CONTENT_INTEGRITY_MARKER, Sanitizer, SecurityContext, Self, SimpleChange, SkipSelf, TEMPLATES, TEMPLATE_ID, TESTABILITY, TESTABILITY_GETTER, TRANSLATIONS, TRANSLATIONS_FORMAT, TemplateRef, Testability, TestabilityRegistry, TimerScheduler, TracingAction, TracingService, TransferState, Type, UseExhaustiveCheckNoChanges, ViewContainerRef, ViewEncapsulation, ViewRef, _sanitizeHtml, _sanitizeUrl, afterEveryRender, afterNextRender, allLeavingAnimations, allowSanitizationBypassAndThrow, angularCoreEnv, appendDeferBlocksToJSActionMap, asNativeElements, assertComponentDef, assertStandaloneComponentType, bypassSanitizationTrustHtml, bypassSanitizationTrustResourceUrl, bypassSanitizationTrustScript, bypassSanitizationTrustStyle, bypassSanitizationTrustUrl, calcPathForNode, checkNoChangesInternal, cleanupDehydratedViews, clearResolutionOfComponentResourcesQueue, collectNativeNodes, collectNativeNodesInLContainer, compileComponent, compileDirective, compileNgModule, compileNgModuleDefs, compilePipe, convertHydrateTriggersToJsAction, countBlocksSkippedByHydration, createEnvironmentInjector, createMultiResultQuerySignalFn, createNgModule, createNgModuleRef, createNgModuleRefWithProviders, createSingleResultOptionalQuerySignalFn, createSingleResultRequiredQuerySignalFn, depsTracker, devModeEqual, enableApplyRootElementTransformImpl, enableClaimDehydratedIcuCaseImpl, enableFindMatchingDehydratedViewImpl, enableLocateOrCreateContainerAnchorImpl, enableLocateOrCreateContainerRefImpl, enableLocateOrCreateElementContainerNodeImpl, enableLocateOrCreateElementNodeImpl, enableLocateOrCreateI18nNodeImpl, enableLocateOrCreateTextNodeImpl, enablePrepareI18nBlockForHydrationImpl, enableProfiling, enableRetrieveDeferBlockDataImpl, enableRetrieveHydrationInfoImpl, enableStashEventListenerImpl, findLocaleData, flushModuleScopingQueueAsMuchAsPossible, gatherDeferBlocksCommentNodes, generateStandaloneInDeclarationsError, getAsyncClassMetadataFn, getClosestComponentName, getCompilerFacade, getDebugNode, getDeferBlocks$1 as getDeferBlocks, getDirectives, getDocument, getHostElement, getLContext, getLDeferBlockDetails, getLNodeForHydration, getLocaleCurrencyCode, getLocalePluralCase, getOrComputeI18nChildren, getRegisteredNgModuleType, getSanitizationBypassType, getTDeferBlockDetails, getTransferState, inferTagNameFromDefinition, inputBinding, invokeListeners, isBoundToModule, isComponentDefPendingResolution, isComponentResourceResolutionQueueEmpty, isDeferBlock, isDetachedByI18n, isDisconnectedNode, isI18nHydrationEnabled, isI18nHydrationSupportEnabled, isInSkipHydrationBlock, isIncrementalHydrationEnabled, isJsObject, isLetDeclaration, isListLikeIterable, isNgModule, isPromise, isSignal, isSubscribable, isTNodeShape, isViewDirty, isWritableSignal, iterateListLike, makePropDecorator, makeStateKey, markForRefresh, noSideEffects, optionsReducer, outputBinding, patchComponentDefWithScope, performanceMarkFeature, processAndInitTriggers, processBlockData, processTextNodeBeforeSerialization, profiler, promiseWithResolvers, provideAppInitializer, provideNgReflectAttributes, provideZonelessChangeDetection, provideZonelessChangeDetectionInternal, publishDefaultGlobalUtils, publishExternalGlobalUtil, publishSignalConfiguration, readHydrationInfo, registerLocaleData, registerNgModuleType, remove, removeListeners, renderDeferBlockState, resetCompiledComponents, resetIncrementalHydrationEnabledWarnedForTests, resetJitOptions, resolveComponentResources, restoreComponentResolutionQueue, setAllowDuplicateNgModuleIdsForTest, setClassMetadata, setClassMetadataAsync, setDocument, setIsI18nHydrationSupportEnabled, setJSActionAttributes, setJitOptions, setLocaleId, setStashFn, setTestabilityGetter, sharedMapFunction, sharedStashFunction, transitiveScopesFor, triggerHydrationFromBlockName, triggerResourceLoading, trySerializeI18nBlock, twoWayBinding, unregisterAllLocaleData, unsupportedProjectionOfDomNodes, unwrapSafeValue, validAppIdInitializer, validateMatchingNode, validateNodeExists, verifySsrContentsIntegrity, ɵgetUnknownElementStrictMode, ɵgetUnknownPropertyStrictMode, ɵsetClassDebugInfo, ɵsetUnknownElementStrictMode, ɵsetUnknownPropertyStrictMode, ɵɵControlFeature, ɵɵExternalStylesFeature, ɵɵHostDirectivesFeature, ɵɵInheritDefinitionFeature, ɵɵNgOnChangesFeature, ɵɵProvidersFeature, ɵɵadvance, ɵɵanimateEnter, ɵɵanimateEnterListener, ɵɵanimateLeave, ɵɵanimateLeaveListener, ɵɵariaProperty, ɵɵarrowFunction, ɵɵattachSourceLocations, ɵɵattribute, ɵɵclassMap, ɵɵclassProp, ɵɵcomponentInstance, ɵɵconditional, ɵɵconditionalBranchCreate, ɵɵconditionalCreate, ɵɵcontentQuery, ɵɵcontentQuerySignal, ɵɵcontrol, ɵɵcontrolCreate, ɵɵdeclareLet, ɵɵdefer, ɵɵdeferEnableTimerScheduling, ɵɵdeferHydrateNever, ɵɵdeferHydrateOnHover, ɵɵdeferHydrateOnIdle, ɵɵdeferHydrateOnImmediate, ɵɵdeferHydrateOnInteraction, ɵɵdeferHydrateOnTimer, ɵɵdeferHydrateOnViewport, ɵɵdeferHydrateWhen, ɵɵdeferOnHover, ɵɵdeferOnIdle, ɵɵdeferOnImmediate, ɵɵdeferOnInteraction, ɵɵdeferOnTimer, ɵɵdeferOnViewport, ɵɵdeferPrefetchOnHover, ɵɵdeferPrefetchOnIdle, ɵɵdeferPrefetchOnImmediate, ɵɵdeferPrefetchOnInteraction, ɵɵdeferPrefetchOnTimer, ɵɵdeferPrefetchOnViewport, ɵɵdeferPrefetchWhen, ɵɵdeferWhen, ɵɵdefineComponent, ɵɵdefineDirective, ɵɵdefineNgModule, ɵɵdefinePipe, ɵɵdirectiveInject, ɵɵdomElement, ɵɵdomElementContainer, ɵɵdomElementContainerEnd, ɵɵdomElementContainerStart, ɵɵdomElementEnd, ɵɵdomElementStart, ɵɵdomListener, ɵɵdomProperty, ɵɵdomTemplate, ɵɵelement, ɵɵelementContainer, ɵɵelementContainerEnd, ɵɵelementContainerStart, ɵɵelementEnd, ɵɵelementStart, ɵɵgetComponentDepsFactory, ɵɵgetCurrentView, ɵɵgetInheritedFactory, ɵɵgetReplaceMetadataURL, ɵɵi18n, ɵɵi18nApply, ɵɵi18nAttributes, ɵɵi18nEnd, ɵɵi18nExp, ɵɵi18nPostprocess, ɵɵi18nStart, ɵɵinjectAttribute, ɵɵinterpolate, ɵɵinterpolate1, ɵɵinterpolate2, ɵɵinterpolate3, ɵɵinterpolate4, ɵɵinterpolate5, ɵɵinterpolate6, ɵɵinterpolate7, ɵɵinterpolate8, ɵɵinterpolateV, ɵɵinvalidFactory, ɵɵlistener, ɵɵloadQuery, ɵɵnextContext, ɵɵpipe, ɵɵpipeBind1, ɵɵpipeBind2, ɵɵpipeBind3, ɵɵpipeBind4, ɵɵpipeBindV, ɵɵprojection, ɵɵprojectionDef, ɵɵproperty, ɵɵpureFunction0, ɵɵpureFunction1, ɵɵpureFunction2, ɵɵpureFunction3, ɵɵpureFunction4, ɵɵpureFunction5, ɵɵpureFunction6, ɵɵpureFunction7, ɵɵpureFunction8, ɵɵpureFunctionV, ɵɵqueryAdvance, ɵɵqueryRefresh, ɵɵreadContextLet, ɵɵreference, ɵɵrepeater, ɵɵrepeaterCreate, ɵɵrepeaterTrackByIdentity, ɵɵrepeaterTrackByIndex, ɵɵreplaceMetadata, ɵɵresolveBody, ɵɵresolveDocument, ɵɵresolveWindow, ɵɵsanitizeHtml, ɵɵsanitizeResourceUrl, ɵɵsanitizeScript, ɵɵsanitizeStyle, ɵɵsanitizeUrl, ɵɵsanitizeUrlOrResourceUrl, ɵɵsetComponentScope, ɵɵsetNgModuleScope, ɵɵstoreLet, ɵɵstyleMap, ɵɵstyleProp, ɵɵsyntheticHostListener, ɵɵsyntheticHostProperty, ɵɵtemplate, ɵɵtemplateRefExtractor, ɵɵtext, ɵɵtextInterpolate, ɵɵtextInterpolate1, ɵɵtextInterpolate2, ɵɵtextInterpolate3, ɵɵtextInterpolate4, ɵɵtextInterpolate5, ɵɵtextInterpolate6, ɵɵtextInterpolate7, ɵɵtextInterpolate8, ɵɵtextInterpolateV, ɵɵtrustConstantHtml, ɵɵtrustConstantResourceUrl, ɵɵtwoWayBindingSet, ɵɵtwoWayListener, ɵɵtwoWayProperty, ɵɵvalidateAttribute, ɵɵviewQuery, ɵɵviewQuerySignal };\n","/**\n * @license Angular v21.2.4\n * (c) 2010-2026 Google LLC. https://angular.dev/\n * License: MIT\n */\n\nimport { inject, ErrorHandler, DestroyRef, RuntimeError, formatRuntimeError, signalAsReadonlyFn, assertInInjectionContext, Injector, effect, PendingTasks, signal } from './_effect-chunk2.mjs';\nimport { setActiveConsumer, createComputed, SIGNAL } from './_effect-chunk.mjs';\nimport { untracked as untracked$1, createLinkedSignal, linkedSignalSetFn, linkedSignalUpdateFn } from './_untracked-chunk.mjs';\nclass OutputEmitterRef {\n destroyed = false;\n listeners = null;\n errorHandler = /*#__PURE__*/inject(ErrorHandler, {\n optional: true\n });\n destroyRef = /*#__PURE__*/inject(DestroyRef);\n constructor() {\n this.destroyRef.onDestroy(() => {\n this.destroyed = true;\n this.listeners = null;\n });\n }\n subscribe(callback) {\n if (this.destroyed) {\n throw new RuntimeError(953, ngDevMode && 'Unexpected subscription to destroyed `OutputRef`. ' + 'The owning directive/component is destroyed.');\n }\n (this.listeners ??= []).push(callback);\n return {\n unsubscribe: () => {\n const idx = this.listeners?.indexOf(callback);\n if (idx !== undefined && idx !== -1) {\n this.listeners?.splice(idx, 1);\n }\n }\n };\n }\n emit(value) {\n if (this.destroyed) {\n console.warn(formatRuntimeError(953, ngDevMode && 'Unexpected emit for destroyed `OutputRef`. ' + 'The owning directive/component is destroyed.'));\n return;\n }\n if (this.listeners === null) {\n return;\n }\n const previousConsumer = setActiveConsumer(null);\n try {\n for (const listenerFn of this.listeners) {\n try {\n listenerFn(value);\n } catch (err) {\n this.errorHandler?.handleError(err);\n }\n }\n } finally {\n setActiveConsumer(previousConsumer);\n }\n }\n}\nfunction getOutputDestroyRef(ref) {\n return ref.destroyRef;\n}\nfunction untracked(nonReactiveReadsFn) {\n return untracked$1(nonReactiveReadsFn);\n}\nfunction computed(computation, options) {\n const getter = createComputed(computation, options?.equal);\n if (typeof ngDevMode !== 'undefined' && ngDevMode) {\n const debugName = options?.debugName;\n getter[SIGNAL].debugName = debugName;\n getter.toString = () => `[Computed${debugName ? ' (' + debugName + ')' : ''}: ${getter()}]`;\n }\n return getter;\n}\nconst identityFn = v => v;\nfunction linkedSignal(optionsOrComputation, options) {\n if (typeof optionsOrComputation === 'function') {\n const getter = createLinkedSignal(optionsOrComputation, identityFn, options?.equal);\n return upgradeLinkedSignalGetter(getter, options?.debugName);\n } else {\n const getter = createLinkedSignal(optionsOrComputation.source, optionsOrComputation.computation, optionsOrComputation.equal);\n return upgradeLinkedSignalGetter(getter, optionsOrComputation.debugName);\n }\n}\nfunction upgradeLinkedSignalGetter(getter, debugName) {\n if (typeof ngDevMode !== 'undefined' && ngDevMode) {\n getter[SIGNAL].debugName = debugName;\n getter.toString = () => `[LinkedSignal${debugName ? ' (' + debugName + ')' : ''}: ${getter()}]`;\n }\n const node = getter[SIGNAL];\n const upgradedGetter = getter;\n upgradedGetter.set = newValue => linkedSignalSetFn(node, newValue);\n upgradedGetter.update = updateFn => linkedSignalUpdateFn(node, updateFn);\n upgradedGetter.asReadonly = signalAsReadonlyFn.bind(getter);\n return upgradedGetter;\n}\nfunction resource(options) {\n if (ngDevMode && !options?.injector) {\n assertInInjectionContext(resource);\n }\n const oldNameForParams = options.request;\n const params = options.params ?? oldNameForParams ?? (() => null);\n return new ResourceImpl(params, getLoader(options), options.defaultValue, options.equal ? wrapEqualityFn(options.equal) : undefined, options.debugName, options.injector ?? inject(Injector));\n}\nclass BaseWritableResource {\n value;\n isLoading;\n constructor(value, debugName) {\n this.value = value;\n this.value.set = this.set.bind(this);\n this.value.update = this.update.bind(this);\n this.value.asReadonly = signalAsReadonlyFn;\n this.isLoading = computed(() => this.status() === 'loading' || this.status() === 'reloading', ngDevMode ? createDebugNameObject(debugName, 'isLoading') : undefined);\n }\n isError = /*#__PURE__*/computed(() => this.status() === 'error');\n update(updateFn) {\n this.set(updateFn(untracked(this.value)));\n }\n isValueDefined = /*#__PURE__*/computed(() => {\n if (this.isError()) {\n return false;\n }\n return this.value() !== undefined;\n });\n _snapshot;\n get snapshot() {\n return this._snapshot ??= computed(() => {\n const status = this.status();\n if (status === 'error') {\n return {\n status: 'error',\n error: this.error()\n };\n } else {\n return {\n status,\n value: this.value()\n };\n }\n });\n }\n hasValue() {\n return this.isValueDefined();\n }\n asReadonly() {\n return this;\n }\n}\nclass ResourceImpl extends BaseWritableResource {\n loaderFn;\n equal;\n debugName;\n pendingTasks;\n state;\n extRequest;\n effectRef;\n pendingController;\n resolvePendingTask = undefined;\n destroyed = false;\n unregisterOnDestroy;\n status;\n error;\n constructor(request, loaderFn, defaultValue, equal, debugName, injector, getInitialStream) {\n super(computed(() => {\n const streamValue = this.state().stream?.();\n if (!streamValue) {\n return defaultValue;\n }\n if (this.state().status === 'loading' && this.error()) {\n return defaultValue;\n }\n if (!isResolved(streamValue)) {\n throw new ResourceValueError(this.error());\n }\n return streamValue.value;\n }, {\n equal,\n ...(ngDevMode ? createDebugNameObject(debugName, 'value') : undefined)\n }), debugName);\n this.loaderFn = loaderFn;\n this.equal = equal;\n this.debugName = debugName;\n this.extRequest = linkedSignal({\n source: request,\n computation: request => ({\n request,\n reload: 0\n }),\n ...(ngDevMode ? createDebugNameObject(debugName, 'extRequest') : undefined)\n });\n this.state = linkedSignal({\n source: this.extRequest,\n computation: (extRequest, previous) => {\n if (!previous) {\n const initialStream = getInitialStream?.(extRequest.request);\n getInitialStream = undefined;\n const status = extRequest.request === undefined ? 'idle' : initialStream ? 'resolved' : 'loading';\n return {\n extRequest,\n status,\n previousStatus: 'idle',\n stream: initialStream\n };\n } else {\n const status = extRequest.request === undefined ? 'idle' : 'loading';\n return {\n extRequest,\n status,\n previousStatus: projectStatusOfState(previous.value),\n stream: previous.value.extRequest.request === extRequest.request ? previous.value.stream : undefined\n };\n }\n },\n ...(ngDevMode ? createDebugNameObject(debugName, 'state') : undefined)\n });\n this.effectRef = effect(this.loadEffect.bind(this), {\n injector,\n manualCleanup: true,\n ...(ngDevMode ? createDebugNameObject(debugName, 'loadEffect') : undefined)\n });\n this.pendingTasks = injector.get(PendingTasks);\n this.unregisterOnDestroy = injector.get(DestroyRef).onDestroy(() => this.destroy());\n this.status = computed(() => projectStatusOfState(this.state()), ngDevMode ? createDebugNameObject(debugName, 'status') : undefined);\n this.error = computed(() => {\n const stream = this.state().stream?.();\n return stream && !isResolved(stream) ? stream.error : undefined;\n }, ngDevMode ? createDebugNameObject(debugName, 'error') : undefined);\n }\n set(value) {\n if (this.destroyed) {\n return;\n }\n const error = untracked(this.error);\n const state = untracked(this.state);\n if (!error) {\n const current = untracked(this.value);\n if (state.status === 'local' && (this.equal ? this.equal(current, value) : current === value)) {\n return;\n }\n }\n this.state.set({\n extRequest: state.extRequest,\n status: 'local',\n previousStatus: 'local',\n stream: signal({\n value\n }, ngDevMode ? createDebugNameObject(this.debugName, 'stream') : undefined)\n });\n this.abortInProgressLoad();\n }\n reload() {\n const {\n status\n } = untracked(this.state);\n if (status === 'idle' || status === 'loading') {\n return false;\n }\n this.extRequest.update(({\n request,\n reload\n }) => ({\n request,\n reload: reload + 1\n }));\n return true;\n }\n destroy() {\n this.destroyed = true;\n this.unregisterOnDestroy();\n this.effectRef.destroy();\n this.abortInProgressLoad();\n this.state.set({\n extRequest: {\n request: undefined,\n reload: 0\n },\n status: 'idle',\n previousStatus: 'idle',\n stream: undefined\n });\n }\n async loadEffect() {\n const extRequest = this.extRequest();\n const {\n status: currentStatus,\n previousStatus\n } = untracked(this.state);\n if (extRequest.request === undefined) {\n return;\n } else if (currentStatus !== 'loading') {\n return;\n }\n this.abortInProgressLoad();\n let resolvePendingTask = this.resolvePendingTask = this.pendingTasks.add();\n const {\n signal: abortSignal\n } = this.pendingController = new AbortController();\n try {\n const stream = await untracked(() => {\n return this.loaderFn({\n params: extRequest.request,\n abortSignal,\n previous: {\n status: previousStatus\n }\n });\n });\n if (abortSignal.aborted || untracked(this.extRequest) !== extRequest) {\n return;\n }\n this.state.set({\n extRequest,\n status: 'resolved',\n previousStatus: 'resolved',\n stream\n });\n } catch (err) {\n if (abortSignal.aborted || untracked(this.extRequest) !== extRequest) {\n return;\n }\n this.state.set({\n extRequest,\n status: 'resolved',\n previousStatus: 'error',\n stream: signal({\n error: encapsulateResourceError(err)\n }, ngDevMode ? createDebugNameObject(this.debugName, 'stream') : undefined)\n });\n } finally {\n resolvePendingTask?.();\n resolvePendingTask = undefined;\n }\n }\n abortInProgressLoad() {\n untracked(() => this.pendingController?.abort());\n this.pendingController = undefined;\n this.resolvePendingTask?.();\n this.resolvePendingTask = undefined;\n }\n}\nfunction wrapEqualityFn(equal) {\n return (a, b) => a === undefined || b === undefined ? a === b : equal(a, b);\n}\nfunction getLoader(options) {\n if (isStreamingResourceOptions(options)) {\n return options.stream;\n }\n return async params => {\n try {\n return signal({\n value: await options.loader(params)\n }, ngDevMode ? createDebugNameObject(options.debugName, 'stream') : undefined);\n } catch (err) {\n return signal({\n error: encapsulateResourceError(err)\n }, ngDevMode ? createDebugNameObject(options.debugName, 'stream') : undefined);\n }\n };\n}\nfunction isStreamingResourceOptions(options) {\n return !!options.stream;\n}\nfunction projectStatusOfState(state) {\n switch (state.status) {\n case 'loading':\n return state.extRequest.reload === 0 ? 'loading' : 'reloading';\n case 'resolved':\n return isResolved(state.stream()) ? 'resolved' : 'error';\n default:\n return state.status;\n }\n}\nfunction isResolved(state) {\n return state.error === undefined;\n}\nfunction createDebugNameObject(resourceDebugName, internalSignalDebugName) {\n return {\n debugName: `Resource${resourceDebugName ? '#' + resourceDebugName : ''}.${internalSignalDebugName}`\n };\n}\nfunction encapsulateResourceError(error) {\n if (isErrorLike(error)) {\n return error;\n }\n return new ResourceWrappedError(error);\n}\nfunction isErrorLike(error) {\n return error instanceof Error || typeof error === 'object' && typeof error.name === 'string' && typeof error.message === 'string';\n}\nclass ResourceValueError extends Error {\n constructor(error) {\n super(ngDevMode ? `Resource is currently in an error state (see Error.cause for details): ${error.message}` : error.message, {\n cause: error\n });\n }\n}\nclass ResourceWrappedError extends Error {\n constructor(error) {\n super(ngDevMode ? `Resource returned an error that's not an Error instance: ${String(error)}. Check this error's .cause for the actual error.` : String(error), {\n cause: error\n });\n }\n}\nexport { OutputEmitterRef, ResourceImpl, ResourceValueError, computed, encapsulateResourceError, getOutputDestroyRef, linkedSignal, resource, untracked };\n","/**\n * @license Angular v21.2.4\n * (c) 2010-2026 Google LLC. https://angular.dev/\n * License: MIT\n */\n\nimport { RuntimeError, InjectionToken, getCurrentTNode, assertInInjectionContext, signalAsReadonlyFn, assertNgModuleType, Injector, inject, NgZone, ChangeDetectionScheduler, INTERNAL_APPLICATION_ERROR_HANDLER, ɵɵdefineInjectable as __defineInjectable, ZONELESS_ENABLED, ENVIRONMENT_INITIALIZER, SCHEDULE_IN_ROOT_ZONE, SCHEDULE_IN_ROOT_ZONE_DEFAULT, makeEnvironmentProviders, PendingTasksInternal, formatRuntimeError, ERROR_DETAILS_PAGE_BASE_URL, PROVIDED_ZONELESS, stringify, ɵɵinject as __inject, errorHandlerEnvironmentInitializer, INJECTOR_SCOPE, runInInjectionContext, provideEnvironmentInitializer, ErrorHandler, _global, unwrapRNode, CLEANUP, DOCUMENT, DOC_PAGE_BASE_URL, DEBUG_TASK_TRACKER, isComponentHost, getComponentLViewByIndex, getLView, DECLARATION_COMPONENT_VIEW, ɵɵdefineInjector as __defineInjector, isLContainer, HOST, hasI18n, unwrapLView, RENDERER, assertTNode, isProjectionTNode, getComponentDef, PARENT, isRootView, HEADER_OFFSET, TVIEW, CONTEXT, CONTAINER_HEADER_OFFSET, assertNotInReactiveContext, ViewContext, DestroyRef, setInjectorProfilerContext, emitAfterRenderEffectPhaseCreatedEvent, getNullInjector } from './_effect-chunk2.mjs';\nexport { EnvironmentInjector, EventEmitter, INJECTOR, PendingTasks, VERSION, Version, effect, forwardRef, importProvidersFrom, isStandalone, provideBrowserGlobalErrorListeners, resolveForwardRef, signal, EffectScheduler as ɵEffectScheduler, NG_COMP_DEF as ɵNG_COMP_DEF, NG_DIR_DEF as ɵNG_DIR_DEF, NG_ELEMENT_ID as ɵNG_ELEMENT_ID, NG_INJ_DEF as ɵNG_INJ_DEF, NG_MOD_DEF as ɵNG_MOD_DEF, NG_PIPE_DEF as ɵNG_PIPE_DEF, NG_PROV_DEF as ɵNG_PROV_DEF, NoopNgZone as ɵNoopNgZone, R3Injector as ɵR3Injector, XSS_SECURITY_URL as ɵXSS_SECURITY_URL, convertToBitFlags as ɵconvertToBitFlags, createInjector as ɵcreateInjector, getInjectableDef as ɵgetInjectableDef, isEnvironmentProviders as ɵisEnvironmentProviders, isInjectable as ɵisInjectable, store as ɵstore, truncateMiddle as ɵtruncateMiddle, ɵunwrapWritableSignal, ɵɵdisableBindings, ɵɵenableBindings, ɵɵinvalidFactoryDep, ɵɵnamespaceHTML, ɵɵnamespaceMathML, ɵɵnamespaceSVG, ɵɵresetView, ɵɵrestoreView } from './_effect-chunk2.mjs';\nimport { SIGNAL_NODE, signalSetFn, SIGNAL, producerAccessed, consumerDestroy, consumerPollProducersForChange, consumerBeforeComputation, consumerAfterComputation } from './_effect-chunk.mjs';\nimport { ɵɵinjectAttribute as __injectAttribute, createMultiResultQuerySignalFn, createSingleResultOptionalQuerySignalFn, createSingleResultRequiredQuerySignalFn, makePropDecorator, NgModuleFactory, COMPILER_OPTIONS, setJitOptions, isComponentResourceResolutionQueueEmpty, getCompilerFacade, resolveComponentResources, ApplicationRef, setClassMetadata, Injectable, performanceMarkFeature, IMAGE_CONFIG, getDocument, remove, isPromise, ApplicationInitStatus, LOCALE_ID, DEFAULT_LOCALE_ID, setLocaleId, createNgModuleRefWithProviders, optionsReducer, provideZonelessChangeDetectionInternal, validAppIdInitializer, publishDefaultGlobalUtils, PLATFORM_INITIALIZER, publishSignalConfiguration, ChangeDetectionSchedulerImpl, checkNoChangesInternal, UseExhaustiveCheckNoChanges, JSACTION_BLOCK_ELEMENT_MAP, APP_ID, setStashFn, APP_BOOTSTRAP_LISTENER, JSACTION_EVENT_CONTRACT, removeListeners, isIncrementalHydrationEnabled, DEFER_BLOCK_SSR_ID_ATTRIBUTE, invokeListeners, EVENT_REPLAY_QUEUE, triggerHydrationFromBlockName, IS_EVENT_REPLAY_ENABLED, EVENT_REPLAY_ENABLED_DEFAULT, sharedStashFunction, sharedMapFunction, enableStashEventListenerImpl, IS_I18N_HYDRATION_ENABLED, IS_HYDRATION_DOM_REUSE_ENABLED, IS_INCREMENTAL_HYDRATION_ENABLED, DEHYDRATED_BLOCK_REGISTRY, DehydratedBlockRegistry, processBlockData, gatherDeferBlocksCommentNodes, processAndInitTriggers, appendDeferBlocksToJSActionMap, TransferState, NGH_DATA_KEY, verifySsrContentsIntegrity, Console, PRESERVE_HOST_CONTENT, cleanupDehydratedViews, countBlocksSkippedByHydration, enableRetrieveHydrationInfoImpl, enableLocateOrCreateElementNodeImpl, enableLocateOrCreateTextNodeImpl, enableLocateOrCreateElementContainerNodeImpl, enableLocateOrCreateContainerAnchorImpl, enableLocateOrCreateContainerRefImpl, enableFindMatchingDehydratedViewImpl, enableApplyRootElementTransformImpl, enableLocateOrCreateI18nNodeImpl, enablePrepareI18nBlockForHydrationImpl, setIsI18nHydrationSupportEnabled, enableClaimDehydratedIcuCaseImpl, enableRetrieveDeferBlockDataImpl, provideAppInitializer, getRegisteredNgModuleType, ViewRef as ViewRef$1, isListLikeIterable, iterateListLike, isJsObject, ɵɵdefineNgModule as __defineNgModule, NgModule, profiler, assertStandaloneComponentType, EnvironmentNgModuleRefAdapter, ProfilerEvent, isI18nHydrationEnabled, NGH_DEFER_BLOCKS_KEY, SKIP_HYDRATION_ATTR_NAME, NGH_ATTR_NAME, getLNodeForHydration, isI18nHydrationSupportEnabled, getOrComputeI18nChildren, trySerializeI18nBlock, I18N_DATA, isTNodeShape, isDetachedByI18n, TEMPLATES, isDisconnectedNode, isInSkipHydrationBlock, unsupportedProjectionOfDomNodes, CONTAINERS, isLetDeclaration, ELEMENT_CONTAINERS, processTextNodeBeforeSerialization, setJSActionAttributes, ViewEncapsulation as ViewEncapsulation$1, collectNativeNodes, TEMPLATE_ID, NUM_ROOT_NODES, isDeferBlock, getLDeferBlockDetails, getTDeferBlockDetails, collectNativeNodesInLContainer, validateNodeExists, validateMatchingNode, DEFER_BLOCK_ID, DEFER_BLOCK_STATE, DEFER_BLOCK_STATE$1, MULTIPLIER, NODES, calcPathForNode, DISCONNECTED_NODES, convertHydrateTriggersToJsAction, DEFER_HYDRATE_TRIGGERS, DEFER_PARENT_BLOCK_ID, angularCoreEnv, setClassMetadataAsync, NOOP_AFTER_RENDER_REF, AfterRenderManager, TracingService, AfterRenderImpl, AfterRenderSequence, AFTER_RENDER_PHASES, isSignal, assertComponentDef, ComponentFactory } from './_debug_node-chunk.mjs';\nexport { ANIMATION_MODULE_TYPE, APP_INITIALIZER, Attribute, CSP_NONCE, CUSTOM_ELEMENTS_SCHEMA, ChangeDetectionStrategy, Compiler, CompilerFactory, Component, ComponentFactory$1 as ComponentFactory, ComponentFactoryResolver, ComponentRef, DEFAULT_CURRENCY_CODE, DebugElement, DebugEventListener, DebugNode, Directive, ElementRef, Host, HostBinding, HostListener, Inject, Input, MAX_ANIMATION_TIMEOUT, MissingTranslationStrategy, ModuleWithComponentFactories, NO_ERRORS_SCHEMA, NgModuleFactory$1 as NgModuleFactory, NgModuleRef$1 as NgModuleRef, Optional, Output, PLATFORM_ID, Pipe, QueryList, Renderer2, RendererFactory2, RendererStyleFlags2, Sanitizer, SecurityContext, Self, SimpleChange, SkipSelf, TRANSLATIONS, TRANSLATIONS_FORMAT, TemplateRef, Testability, TestabilityRegistry, Type, ViewContainerRef, afterEveryRender, afterNextRender, asNativeElements, createEnvironmentInjector, createNgModule, createNgModuleRef, enableProfiling, getDebugNode, inputBinding, isWritableSignal, makeStateKey, outputBinding, provideNgReflectAttributes, provideZonelessChangeDetection, setTestabilityGetter, twoWayBinding, ANIMATIONS_DISABLED as ɵANIMATIONS_DISABLED, AcxChangeDetectionStrategy as ɵAcxChangeDetectionStrategy, AcxViewEncapsulation as ɵAcxViewEncapsulation, ComponentFactory$1 as ɵComponentFactory, DEFER_BLOCK_CONFIG as ɵDEFER_BLOCK_CONFIG, DEFER_BLOCK_DEPENDENCY_INTERCEPTOR as ɵDEFER_BLOCK_DEPENDENCY_INTERCEPTOR, DeferBlockBehavior as ɵDeferBlockBehavior, DeferBlockState as ɵDeferBlockState, HydrationStatus as ɵHydrationStatus, IMAGE_CONFIG_DEFAULTS as ɵIMAGE_CONFIG_DEFAULTS, IS_ENABLED_BLOCKING_INITIAL_NAVIGATION as ɵIS_ENABLED_BLOCKING_INITIAL_NAVIGATION, LContext as ɵLContext, LocaleDataIndex as ɵLocaleDataIndex, NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR as ɵNOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR, NO_CHANGE as ɵNO_CHANGE, ReflectionCapabilities as ɵReflectionCapabilities, ComponentRef$1 as ɵRender3ComponentRef, NgModuleRef as ɵRender3NgModuleRef, SSR_CONTENT_INTEGRITY_MARKER as ɵSSR_CONTENT_INTEGRITY_MARKER, TESTABILITY as ɵTESTABILITY, TESTABILITY_GETTER as ɵTESTABILITY_GETTER, TimerScheduler as ɵTimerScheduler, TracingAction as ɵTracingAction, _sanitizeHtml as ɵ_sanitizeHtml, _sanitizeUrl as ɵ_sanitizeUrl, allLeavingAnimations as ɵallLeavingAnimations, allowSanitizationBypassAndThrow as ɵallowSanitizationBypassAndThrow, bypassSanitizationTrustHtml as ɵbypassSanitizationTrustHtml, bypassSanitizationTrustResourceUrl as ɵbypassSanitizationTrustResourceUrl, bypassSanitizationTrustScript as ɵbypassSanitizationTrustScript, bypassSanitizationTrustStyle as ɵbypassSanitizationTrustStyle, bypassSanitizationTrustUrl as ɵbypassSanitizationTrustUrl, clearResolutionOfComponentResourcesQueue as ɵclearResolutionOfComponentResourcesQueue, compileComponent as ɵcompileComponent, compileDirective as ɵcompileDirective, compileNgModule as ɵcompileNgModule, compileNgModuleDefs as ɵcompileNgModuleDefs, compilePipe as ɵcompilePipe, depsTracker as ɵdepsTracker, devModeEqual as ɵdevModeEqual, findLocaleData as ɵfindLocaleData, flushModuleScopingQueueAsMuchAsPossible as ɵflushModuleScopingQueueAsMuchAsPossible, generateStandaloneInDeclarationsError as ɵgenerateStandaloneInDeclarationsError, getAsyncClassMetadataFn as ɵgetAsyncClassMetadataFn, getClosestComponentName as ɵgetClosestComponentName, getDeferBlocks as ɵgetDeferBlocks, getDirectives as ɵgetDirectives, getHostElement as ɵgetHostElement, getLContext as ɵgetLContext, getLocaleCurrencyCode as ɵgetLocaleCurrencyCode, getLocalePluralCase as ɵgetLocalePluralCase, getSanitizationBypassType as ɵgetSanitizationBypassType, getTransferState as ɵgetTransferState, ɵgetUnknownElementStrictMode, ɵgetUnknownPropertyStrictMode, inferTagNameFromDefinition as ɵinferTagNameFromDefinition, isBoundToModule as ɵisBoundToModule, isComponentDefPendingResolution as ɵisComponentDefPendingResolution, isNgModule as ɵisNgModule, isSubscribable as ɵisSubscribable, isViewDirty as ɵisViewDirty, markForRefresh as ɵmarkForRefresh, noSideEffects as ɵnoSideEffects, patchComponentDefWithScope as ɵpatchComponentDefWithScope, promiseWithResolvers as ɵpromiseWithResolvers, publishExternalGlobalUtil as ɵpublishExternalGlobalUtil, readHydrationInfo as ɵreadHydrationInfo, registerLocaleData as ɵregisterLocaleData, renderDeferBlockState as ɵrenderDeferBlockState, resetCompiledComponents as ɵresetCompiledComponents, resetIncrementalHydrationEnabledWarnedForTests as ɵresetIncrementalHydrationEnabledWarnedForTests, resetJitOptions as ɵresetJitOptions, restoreComponentResolutionQueue as ɵrestoreComponentResolutionQueue, setAllowDuplicateNgModuleIdsForTest as ɵsetAllowDuplicateNgModuleIdsForTest, ɵsetClassDebugInfo, setDocument as ɵsetDocument, ɵsetUnknownElementStrictMode, ɵsetUnknownPropertyStrictMode, transitiveScopesFor as ɵtransitiveScopesFor, triggerResourceLoading as ɵtriggerResourceLoading, unregisterAllLocaleData as ɵunregisterLocaleData, unwrapSafeValue as ɵunwrapSafeValue, ɵɵControlFeature, ɵɵExternalStylesFeature, ɵɵHostDirectivesFeature, ɵɵInheritDefinitionFeature, ɵɵNgOnChangesFeature, ɵɵProvidersFeature, ɵɵadvance, ɵɵanimateEnter, ɵɵanimateEnterListener, ɵɵanimateLeave, ɵɵanimateLeaveListener, ɵɵariaProperty, ɵɵarrowFunction, ɵɵattachSourceLocations, ɵɵattribute, ɵɵclassMap, ɵɵclassProp, ɵɵcomponentInstance, ɵɵconditional, ɵɵconditionalBranchCreate, ɵɵconditionalCreate, ɵɵcontentQuery, ɵɵcontentQuerySignal, ɵɵcontrol, ɵɵcontrolCreate, ɵɵdeclareLet, ɵɵdefer, ɵɵdeferEnableTimerScheduling, ɵɵdeferHydrateNever, ɵɵdeferHydrateOnHover, ɵɵdeferHydrateOnIdle, ɵɵdeferHydrateOnImmediate, ɵɵdeferHydrateOnInteraction, ɵɵdeferHydrateOnTimer, ɵɵdeferHydrateOnViewport, ɵɵdeferHydrateWhen, ɵɵdeferOnHover, ɵɵdeferOnIdle, ɵɵdeferOnImmediate, ɵɵdeferOnInteraction, ɵɵdeferOnTimer, ɵɵdeferOnViewport, ɵɵdeferPrefetchOnHover, ɵɵdeferPrefetchOnIdle, ɵɵdeferPrefetchOnImmediate, ɵɵdeferPrefetchOnInteraction, ɵɵdeferPrefetchOnTimer, ɵɵdeferPrefetchOnViewport, ɵɵdeferPrefetchWhen, ɵɵdeferWhen, ɵɵdefineComponent, ɵɵdefineDirective, ɵɵdefinePipe, ɵɵdirectiveInject, ɵɵdomElement, ɵɵdomElementContainer, ɵɵdomElementContainerEnd, ɵɵdomElementContainerStart, ɵɵdomElementEnd, ɵɵdomElementStart, ɵɵdomListener, ɵɵdomProperty, ɵɵdomTemplate, ɵɵelement, ɵɵelementContainer, ɵɵelementContainerEnd, ɵɵelementContainerStart, ɵɵelementEnd, ɵɵelementStart, ɵɵgetComponentDepsFactory, ɵɵgetCurrentView, ɵɵgetInheritedFactory, ɵɵgetReplaceMetadataURL, ɵɵi18n, ɵɵi18nApply, ɵɵi18nAttributes, ɵɵi18nEnd, ɵɵi18nExp, ɵɵi18nPostprocess, ɵɵi18nStart, ɵɵinterpolate, ɵɵinterpolate1, ɵɵinterpolate2, ɵɵinterpolate3, ɵɵinterpolate4, ɵɵinterpolate5, ɵɵinterpolate6, ɵɵinterpolate7, ɵɵinterpolate8, ɵɵinterpolateV, ɵɵinvalidFactory, ɵɵlistener, ɵɵloadQuery, ɵɵnextContext, ɵɵpipe, ɵɵpipeBind1, ɵɵpipeBind2, ɵɵpipeBind3, ɵɵpipeBind4, ɵɵpipeBindV, ɵɵprojection, ɵɵprojectionDef, ɵɵproperty, ɵɵpureFunction0, ɵɵpureFunction1, ɵɵpureFunction2, ɵɵpureFunction3, ɵɵpureFunction4, ɵɵpureFunction5, ɵɵpureFunction6, ɵɵpureFunction7, ɵɵpureFunction8, ɵɵpureFunctionV, ɵɵqueryAdvance, ɵɵqueryRefresh, ɵɵreadContextLet, ɵɵreference, registerNgModuleType as ɵɵregisterNgModuleType, ɵɵrepeater, ɵɵrepeaterCreate, ɵɵrepeaterTrackByIdentity, ɵɵrepeaterTrackByIndex, ɵɵreplaceMetadata, ɵɵresolveBody, ɵɵresolveDocument, ɵɵresolveWindow, ɵɵsanitizeHtml, ɵɵsanitizeResourceUrl, ɵɵsanitizeScript, ɵɵsanitizeStyle, ɵɵsanitizeUrl, ɵɵsanitizeUrlOrResourceUrl, ɵɵsetComponentScope, ɵɵsetNgModuleScope, ɵɵstoreLet, ɵɵstyleMap, ɵɵstyleProp, ɵɵsyntheticHostListener, ɵɵsyntheticHostProperty, ɵɵtemplate, ɵɵtemplateRefExtractor, ɵɵtext, ɵɵtextInterpolate, ɵɵtextInterpolate1, ɵɵtextInterpolate2, ɵɵtextInterpolate3, ɵɵtextInterpolate4, ɵɵtextInterpolate5, ɵɵtextInterpolate6, ɵɵtextInterpolate7, ɵɵtextInterpolate8, ɵɵtextInterpolateV, ɵɵtrustConstantHtml, ɵɵtrustConstantResourceUrl, ɵɵtwoWayBindingSet, ɵɵtwoWayListener, ɵɵtwoWayProperty, ɵɵvalidateAttribute, ɵɵviewQuery, ɵɵviewQuerySignal } from './_debug_node-chunk.mjs';\nimport { OutputEmitterRef, computed, ResourceValueError } from './_resource-chunk.mjs';\nexport { linkedSignal, resource, untracked, ResourceImpl as ɵResourceImpl, encapsulateResourceError as ɵencapsulateResourceError, getOutputDestroyRef as ɵgetOutputDestroyRef } from './_resource-chunk.mjs';\nimport { Subscription } from 'rxjs';\nimport { clearAppScopedEarlyEventContract, EventContract, EventContractContainer, EventDispatcher, registerDispatcher, EventPhase, getAppScopedQueuedEventInfos, isEarlyEventType, isCaptureEventType } from './primitives-event-dispatch.mjs';\nexport { setAlternateWeakRefImpl as ɵsetAlternateWeakRefImpl } from './_weak_ref-chunk.mjs';\nexport { setCurrentInjector as ɵsetCurrentInjector } from './_not_found-chunk.mjs';\nimport '@angular/core/primitives/signals';\nimport '@angular/core/primitives/di';\nimport 'rxjs/operators';\nimport './_attribute-chunk.mjs';\nimport './_untracked-chunk.mjs';\nconst REQUIRED_UNSET_VALUE = /* @__PURE__ */Symbol('InputSignalNode#UNSET');\nconst INPUT_SIGNAL_NODE = /* @__PURE__ */(() => {\n return {\n ...SIGNAL_NODE,\n transformFn: undefined,\n applyValueToInputSignal(node, value) {\n signalSetFn(node, value);\n }\n };\n})();\nconst ɵINPUT_SIGNAL_BRAND_WRITE_TYPE = /* @__PURE__ */Symbol();\nfunction createInputSignal(initialValue, options) {\n const node = Object.create(INPUT_SIGNAL_NODE);\n node.value = initialValue;\n node.transformFn = options?.transform;\n function inputValueFn() {\n producerAccessed(node);\n if (node.value === REQUIRED_UNSET_VALUE) {\n let message = null;\n if (ngDevMode) {\n const name = options?.debugName ?? options?.alias;\n message = `Input${name ? ` \"${name}\"` : ''} is required but no value is available yet.`;\n }\n throw new RuntimeError(-950, message);\n }\n return node.value;\n }\n inputValueFn[SIGNAL] = node;\n if (ngDevMode) {\n inputValueFn.toString = () => `[Input Signal: ${inputValueFn()}]`;\n node.debugName = options?.debugName;\n }\n return inputValueFn;\n}\nvar FactoryTarget = /*#__PURE__*/function (FactoryTarget) {\n FactoryTarget[FactoryTarget[\"Directive\"] = 0] = \"Directive\";\n FactoryTarget[FactoryTarget[\"Component\"] = 1] = \"Component\";\n FactoryTarget[FactoryTarget[\"Injectable\"] = 2] = \"Injectable\";\n FactoryTarget[FactoryTarget[\"Pipe\"] = 3] = \"Pipe\";\n FactoryTarget[FactoryTarget[\"NgModule\"] = 4] = \"NgModule\";\n return FactoryTarget;\n}(FactoryTarget || {});\nvar R3TemplateDependencyKind = /*#__PURE__*/function (R3TemplateDependencyKind) {\n R3TemplateDependencyKind[R3TemplateDependencyKind[\"Directive\"] = 0] = \"Directive\";\n R3TemplateDependencyKind[R3TemplateDependencyKind[\"Pipe\"] = 1] = \"Pipe\";\n R3TemplateDependencyKind[R3TemplateDependencyKind[\"NgModule\"] = 2] = \"NgModule\";\n return R3TemplateDependencyKind;\n}(R3TemplateDependencyKind || {});\nvar ViewEncapsulation = /*#__PURE__*/function (ViewEncapsulation) {\n ViewEncapsulation[ViewEncapsulation[\"Emulated\"] = 0] = \"Emulated\";\n ViewEncapsulation[ViewEncapsulation[\"None\"] = 2] = \"None\";\n ViewEncapsulation[ViewEncapsulation[\"ShadowDom\"] = 3] = \"ShadowDom\";\n ViewEncapsulation[ViewEncapsulation[\"ExperimentalIsolatedShadowDom\"] = 4] = \"ExperimentalIsolatedShadowDom\";\n return ViewEncapsulation;\n}(ViewEncapsulation || {});\nvar Framework = /*#__PURE__*/function (Framework) {\n Framework[\"Angular\"] = \"angular\";\n Framework[\"ACX\"] = \"acx\";\n Framework[\"Wiz\"] = \"wiz\";\n return Framework;\n}(Framework || {});\nclass HostAttributeToken {\n attributeName;\n constructor(attributeName) {\n this.attributeName = attributeName;\n }\n __NG_ELEMENT_ID__ = () => __injectAttribute(this.attributeName);\n toString() {\n return `HostAttributeToken ${this.attributeName}`;\n }\n}\nconst HOST_TAG_NAME = /* @__PURE__ */(() => {\n const HOST_TAG_NAME_TOKEN = new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'HOST_TAG_NAME' : '');\n HOST_TAG_NAME_TOKEN.__NG_ELEMENT_ID__ = flags => {\n const tNode = getCurrentTNode();\n if (tNode === null) {\n throw new RuntimeError(-204, ngDevMode && 'HOST_TAG_NAME can only be injected in directives and components ' + 'during construction time (in a class constructor or as a class field initializer)');\n }\n if (tNode.type & 2) {\n return tNode.value;\n }\n if (flags & 8) {\n return null;\n }\n throw new RuntimeError(-204, ngDevMode && `HOST_TAG_NAME was used on ${getDevModeNodeName(tNode)} which doesn't have an underlying element in the DOM. ` + `This is invalid, and so the dependency should be marked as optional.`);\n };\n return HOST_TAG_NAME_TOKEN;\n})();\nfunction getDevModeNodeName(tNode) {\n if (tNode.type & 8) {\n return 'an ';\n } else if (tNode.type & 4) {\n return 'an ';\n } else if (tNode.type & 128) {\n return 'an @let declaration';\n } else {\n return 'a node';\n }\n}\nfunction output(opts) {\n ngDevMode && assertInInjectionContext(output);\n return new OutputEmitterRef();\n}\nfunction inputFunction(initialValue, opts) {\n ngDevMode && assertInInjectionContext(input);\n return createInputSignal(initialValue, opts);\n}\nfunction inputRequiredFunction(opts) {\n ngDevMode && assertInInjectionContext(input);\n return createInputSignal(REQUIRED_UNSET_VALUE, opts);\n}\nconst input = /*#__PURE__*/(() => {\n inputFunction.required = inputRequiredFunction;\n return inputFunction;\n})();\nfunction viewChildFn(locator, opts) {\n ngDevMode && assertInInjectionContext(viewChild);\n return createSingleResultOptionalQuerySignalFn(opts);\n}\nfunction viewChildRequiredFn(locator, opts) {\n ngDevMode && assertInInjectionContext(viewChild);\n return createSingleResultRequiredQuerySignalFn(opts);\n}\nconst viewChild = /*#__PURE__*/(() => {\n viewChildFn.required = viewChildRequiredFn;\n return viewChildFn;\n})();\nfunction viewChildren(locator, opts) {\n ngDevMode && assertInInjectionContext(viewChildren);\n return createMultiResultQuerySignalFn(opts);\n}\nfunction contentChildFn(locator, opts) {\n ngDevMode && assertInInjectionContext(contentChild);\n return createSingleResultOptionalQuerySignalFn(opts);\n}\nfunction contentChildRequiredFn(locator, opts) {\n ngDevMode && assertInInjectionContext(contentChildren);\n return createSingleResultRequiredQuerySignalFn(opts);\n}\nconst contentChild = /*#__PURE__*/(() => {\n contentChildFn.required = contentChildRequiredFn;\n return contentChildFn;\n})();\nfunction contentChildren(locator, opts) {\n return createMultiResultQuerySignalFn(opts);\n}\nfunction createModelSignal(initialValue, opts) {\n const node = Object.create(INPUT_SIGNAL_NODE);\n const emitterRef = new OutputEmitterRef();\n node.value = initialValue;\n function getter() {\n producerAccessed(node);\n assertModelSet(node.value);\n return node.value;\n }\n getter[SIGNAL] = node;\n getter.asReadonly = signalAsReadonlyFn.bind(getter);\n getter.set = newValue => {\n if (!node.equal(node.value, newValue)) {\n signalSetFn(node, newValue);\n emitterRef.emit(newValue);\n }\n };\n getter.update = updateFn => {\n assertModelSet(node.value);\n getter.set(updateFn(node.value));\n };\n getter.subscribe = emitterRef.subscribe.bind(emitterRef);\n getter.destroyRef = emitterRef.destroyRef;\n if (ngDevMode) {\n getter.toString = () => `[Model Signal: ${getter()}]`;\n node.debugName = opts?.debugName;\n }\n return getter;\n}\nfunction assertModelSet(value) {\n if (value === REQUIRED_UNSET_VALUE) {\n throw new RuntimeError(952, ngDevMode && 'Model is required but no value is available yet.');\n }\n}\nfunction modelFunction(initialValue, opts) {\n ngDevMode && assertInInjectionContext(model);\n return createModelSignal(initialValue, opts);\n}\nfunction modelRequiredFunction(opts) {\n ngDevMode && assertInInjectionContext(model);\n return createModelSignal(REQUIRED_UNSET_VALUE, opts);\n}\nconst model = /*#__PURE__*/(() => {\n modelFunction.required = modelRequiredFunction;\n return modelFunction;\n})();\nconst emitDistinctChangesOnlyDefaultValue = true;\nclass Query {}\nconst ContentChildren = /*#__PURE__*/makePropDecorator('ContentChildren', (selector, opts = {}) => ({\n selector,\n first: false,\n isViewQuery: false,\n descendants: false,\n emitDistinctChangesOnly: emitDistinctChangesOnlyDefaultValue,\n ...opts\n}), Query);\nconst ContentChild = /*#__PURE__*/makePropDecorator('ContentChild', (selector, opts = {}) => ({\n selector,\n first: true,\n isViewQuery: false,\n descendants: true,\n ...opts\n}), Query);\nconst ViewChildren = /*#__PURE__*/makePropDecorator('ViewChildren', (selector, opts = {}) => ({\n selector,\n first: false,\n isViewQuery: true,\n descendants: true,\n emitDistinctChangesOnly: emitDistinctChangesOnlyDefaultValue,\n ...opts\n}), Query);\nconst ViewChild = /*#__PURE__*/makePropDecorator('ViewChild', (selector, opts) => ({\n selector,\n first: true,\n isViewQuery: true,\n descendants: true,\n ...opts\n}), Query);\nfunction compileNgModuleFactory(injector, options, moduleType) {\n ngDevMode && assertNgModuleType(moduleType);\n const moduleFactory = new NgModuleFactory(moduleType);\n if (typeof ngJitMode !== 'undefined' && !ngJitMode) {\n return Promise.resolve(moduleFactory);\n }\n const compilerOptions = injector.get(COMPILER_OPTIONS, []).concat(options);\n setJitOptions({\n defaultEncapsulation: _lastDefined(compilerOptions.map(opts => opts.defaultEncapsulation)),\n preserveWhitespaces: _lastDefined(compilerOptions.map(opts => opts.preserveWhitespaces))\n });\n if (isComponentResourceResolutionQueueEmpty()) {\n return Promise.resolve(moduleFactory);\n }\n const compilerProviders = compilerOptions.flatMap(option => option.providers ?? []);\n if (compilerProviders.length === 0) {\n return Promise.resolve(moduleFactory);\n }\n const compiler = getCompilerFacade({\n usage: 0,\n kind: 'NgModule',\n type: moduleType\n });\n const compilerInjector = Injector.create({\n providers: compilerProviders\n });\n const resourceLoader = compilerInjector.get(compiler.ResourceLoader);\n return resolveComponentResources(url => Promise.resolve(resourceLoader.get(url))).then(() => moduleFactory);\n}\nfunction _lastDefined(args) {\n for (let i = args.length - 1; i >= 0; i--) {\n if (args[i] !== undefined) {\n return args[i];\n }\n }\n return undefined;\n}\nlet NgZoneChangeDetectionScheduler = /*#__PURE__*/(() => {\n class NgZoneChangeDetectionScheduler {\n zone = inject(NgZone);\n changeDetectionScheduler = inject(ChangeDetectionScheduler);\n applicationRef = inject(ApplicationRef);\n applicationErrorHandler = inject(INTERNAL_APPLICATION_ERROR_HANDLER);\n _onMicrotaskEmptySubscription;\n initialize() {\n if (this._onMicrotaskEmptySubscription) {\n return;\n }\n this._onMicrotaskEmptySubscription = this.zone.onMicrotaskEmpty.subscribe({\n next: () => {\n if (this.changeDetectionScheduler.runningTick) {\n return;\n }\n this.zone.run(() => {\n try {\n this.applicationRef.dirtyFlags |= 1;\n this.applicationRef._tick();\n } catch (e) {\n this.applicationErrorHandler(e);\n }\n });\n }\n });\n }\n ngOnDestroy() {\n this._onMicrotaskEmptySubscription?.unsubscribe();\n }\n static ɵfac = function NgZoneChangeDetectionScheduler_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || NgZoneChangeDetectionScheduler)();\n };\n static ɵprov = /*@__PURE__*/__defineInjectable({\n token: NgZoneChangeDetectionScheduler,\n factory: NgZoneChangeDetectionScheduler.ɵfac,\n providedIn: 'root'\n });\n }\n return NgZoneChangeDetectionScheduler;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && setClassMetadata(NgZoneChangeDetectionScheduler, [{\n type: Injectable,\n args: [{\n providedIn: 'root'\n }]\n }], null, null);\n})();\nconst PROVIDED_NG_ZONE = /*#__PURE__*/new InjectionToken(typeof ngDevMode === 'undefined' || ngDevMode ? 'provideZoneChangeDetection token' : '', {\n factory: () => false\n});\nfunction internalProvideZoneChangeDetection({\n ngZoneFactory,\n scheduleInRootZone\n}) {\n ngZoneFactory ??= () => new NgZone({\n ...getNgZoneOptions(),\n scheduleInRootZone\n });\n return [{\n provide: ZONELESS_ENABLED,\n useValue: false\n }, {\n provide: NgZone,\n useFactory: ngZoneFactory\n }, {\n provide: ENVIRONMENT_INITIALIZER,\n multi: true,\n useFactory: () => {\n const ngZoneChangeDetectionScheduler = inject(NgZoneChangeDetectionScheduler, {\n optional: true\n });\n if ((typeof ngDevMode === 'undefined' || ngDevMode) && ngZoneChangeDetectionScheduler === null) {\n throw new RuntimeError(402, `A required Injectable was not found in the dependency injection tree. ` + 'If you are bootstrapping an NgModule, make sure that the `BrowserModule` is imported.');\n }\n return () => ngZoneChangeDetectionScheduler.initialize();\n }\n }, {\n provide: ENVIRONMENT_INITIALIZER,\n multi: true,\n useFactory: () => {\n const service = inject(ZoneStablePendingTask);\n return () => {\n service.initialize();\n };\n }\n }, {\n provide: SCHEDULE_IN_ROOT_ZONE,\n useValue: scheduleInRootZone ?? SCHEDULE_IN_ROOT_ZONE_DEFAULT\n }];\n}\nfunction provideZoneChangeDetection(options) {\n const scheduleInRootZone = options?.scheduleInRootZone;\n const zoneProviders = internalProvideZoneChangeDetection({\n ngZoneFactory: () => {\n const ngZoneOptions = getNgZoneOptions(options);\n ngZoneOptions.scheduleInRootZone = scheduleInRootZone;\n if (ngZoneOptions.shouldCoalesceEventChangeDetection) {\n performanceMarkFeature('NgZone_CoalesceEvent');\n }\n return new NgZone(ngZoneOptions);\n },\n scheduleInRootZone\n });\n return makeEnvironmentProviders([{\n provide: PROVIDED_NG_ZONE,\n useValue: true\n }, zoneProviders]);\n}\nfunction getNgZoneOptions(options) {\n return {\n enableLongStackTrace: typeof ngDevMode === 'undefined' ? false : !!ngDevMode,\n shouldCoalesceEventChangeDetection: options?.eventCoalescing ?? false,\n shouldCoalesceRunChangeDetection: options?.runCoalescing ?? false\n };\n}\nlet ZoneStablePendingTask = /*#__PURE__*/(() => {\n class ZoneStablePendingTask {\n subscription = new Subscription();\n initialized = false;\n zone = inject(NgZone);\n pendingTasks = inject(PendingTasksInternal);\n initialize() {\n if (this.initialized) {\n return;\n }\n this.initialized = true;\n let task = null;\n if (!this.zone.isStable && !this.zone.hasPendingMacrotasks && !this.zone.hasPendingMicrotasks) {\n task = this.pendingTasks.add();\n }\n this.zone.runOutsideAngular(() => {\n this.subscription.add(this.zone.onStable.subscribe(() => {\n NgZone.assertNotInAngularZone();\n queueMicrotask(() => {\n if (task !== null && !this.zone.hasPendingMacrotasks && !this.zone.hasPendingMicrotasks) {\n this.pendingTasks.remove(task);\n task = null;\n }\n });\n }));\n });\n this.subscription.add(this.zone.onUnstable.subscribe(() => {\n NgZone.assertInAngularZone();\n task ??= this.pendingTasks.add();\n }));\n }\n ngOnDestroy() {\n this.subscription.unsubscribe();\n }\n static ɵfac = function ZoneStablePendingTask_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || ZoneStablePendingTask)();\n };\n static ɵprov = /*@__PURE__*/__defineInjectable({\n token: ZoneStablePendingTask,\n factory: ZoneStablePendingTask.ɵfac,\n providedIn: 'root'\n });\n }\n return ZoneStablePendingTask;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && setClassMetadata(ZoneStablePendingTask, [{\n type: Injectable,\n args: [{\n providedIn: 'root'\n }]\n }], null, null);\n})();\nconst SCAN_DELAY = 200;\nconst OVERSIZED_IMAGE_TOLERANCE = 1200;\nlet ImagePerformanceWarning = /*#__PURE__*/(() => {\n class ImagePerformanceWarning {\n window = null;\n observer = null;\n options = inject(IMAGE_CONFIG);\n lcpImageUrl;\n start() {\n if (typeof ngServerMode !== 'undefined' && ngServerMode || typeof PerformanceObserver === 'undefined' || this.options?.disableImageSizeWarning && this.options?.disableImageLazyLoadWarning) {\n return;\n }\n this.observer = this.initPerformanceObserver();\n const doc = getDocument();\n const win = doc.defaultView;\n if (win) {\n this.window = win;\n const waitToScan = () => {\n setTimeout(this.scanImages.bind(this), SCAN_DELAY);\n };\n const setup = () => {\n if (doc.readyState === 'complete') {\n waitToScan();\n } else {\n this.window?.addEventListener('load', waitToScan, {\n once: true\n });\n }\n };\n if (typeof Zone !== 'undefined') {\n Zone.root.run(() => setup());\n } else {\n setup();\n }\n }\n }\n ngOnDestroy() {\n this.observer?.disconnect();\n }\n initPerformanceObserver() {\n if (typeof PerformanceObserver === 'undefined') {\n return null;\n }\n const observer = new PerformanceObserver(entryList => {\n const entries = entryList.getEntries();\n if (entries.length === 0) return;\n const lcpElement = entries[entries.length - 1];\n const imgSrc = lcpElement.element?.src ?? '';\n if (imgSrc.startsWith('data:') || imgSrc.startsWith('blob:')) return;\n this.lcpImageUrl = imgSrc;\n });\n observer.observe({\n type: 'largest-contentful-paint',\n buffered: true\n });\n return observer;\n }\n scanImages() {\n const images = getDocument().querySelectorAll('img');\n let lcpElementFound,\n lcpElementLoadedCorrectly = false;\n for (let index = 0; index < images.length; index++) {\n const image = images[index];\n if (!image) {\n continue;\n }\n if (!this.options?.disableImageSizeWarning) {\n if (!image.getAttribute('ng-img') && this.isOversized(image)) {\n logOversizedImageWarning(image.src);\n }\n }\n if (!this.options?.disableImageLazyLoadWarning && this.lcpImageUrl) {\n if (image.src === this.lcpImageUrl) {\n lcpElementFound = true;\n if (image.loading !== 'lazy' || image.getAttribute('ng-img')) {\n lcpElementLoadedCorrectly = true;\n }\n }\n }\n }\n if (lcpElementFound && !lcpElementLoadedCorrectly && this.lcpImageUrl && !this.options?.disableImageLazyLoadWarning) {\n logLazyLCPWarning(this.lcpImageUrl);\n }\n }\n isOversized(image) {\n if (!this.window) {\n return false;\n }\n const nonOversizedImageExtentions = ['.svg'];\n const imageSource = (image.src || '').toLowerCase();\n if (nonOversizedImageExtentions.some(extension => imageSource.endsWith(extension))) {\n return false;\n }\n const computedStyle = this.window.getComputedStyle(image);\n let renderedWidth = parseFloat(computedStyle.getPropertyValue('width'));\n let renderedHeight = parseFloat(computedStyle.getPropertyValue('height'));\n const boxSizing = computedStyle.getPropertyValue('box-sizing');\n const objectFit = computedStyle.getPropertyValue('object-fit');\n if (objectFit === `cover`) {\n return false;\n }\n if (boxSizing === 'border-box') {\n const paddingTop = computedStyle.getPropertyValue('padding-top');\n const paddingRight = computedStyle.getPropertyValue('padding-right');\n const paddingBottom = computedStyle.getPropertyValue('padding-bottom');\n const paddingLeft = computedStyle.getPropertyValue('padding-left');\n renderedWidth -= parseFloat(paddingRight) + parseFloat(paddingLeft);\n renderedHeight -= parseFloat(paddingTop) + parseFloat(paddingBottom);\n }\n const intrinsicWidth = image.naturalWidth;\n const intrinsicHeight = image.naturalHeight;\n const recommendedWidth = this.window.devicePixelRatio * renderedWidth;\n const recommendedHeight = this.window.devicePixelRatio * renderedHeight;\n const oversizedWidth = intrinsicWidth - recommendedWidth >= OVERSIZED_IMAGE_TOLERANCE;\n const oversizedHeight = intrinsicHeight - recommendedHeight >= OVERSIZED_IMAGE_TOLERANCE;\n return oversizedWidth || oversizedHeight;\n }\n static ɵfac = function ImagePerformanceWarning_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || ImagePerformanceWarning)();\n };\n static ɵprov = /*@__PURE__*/__defineInjectable({\n token: ImagePerformanceWarning,\n factory: ImagePerformanceWarning.ɵfac,\n providedIn: 'root'\n });\n }\n return ImagePerformanceWarning;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && setClassMetadata(ImagePerformanceWarning, [{\n type: Injectable,\n args: [{\n providedIn: 'root'\n }]\n }], null, null);\n})();\nfunction logLazyLCPWarning(src) {\n console.warn(formatRuntimeError(-913, `An image with src ${src} is the Largest Contentful Paint (LCP) element ` + `but was given a \"loading\" value of \"lazy\", which can negatively impact ` + `application loading performance. This warning can be addressed by ` + `changing the loading value of the LCP image to \"eager\", or by using the ` + `NgOptimizedImage directive's prioritization utilities. For more ` + `information about addressing or disabling this warning, see ` + `${ERROR_DETAILS_PAGE_BASE_URL}/NG0913`));\n}\nfunction logOversizedImageWarning(src) {\n console.warn(formatRuntimeError(-913, `An image with src ${src} has intrinsic file dimensions much larger than its ` + `rendered size. This can negatively impact application loading performance. ` + `For more information about addressing or disabling this warning, see ` + `${ERROR_DETAILS_PAGE_BASE_URL}/NG0913`));\n}\nconst PLATFORM_DESTROY_LISTENERS = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'PlatformDestroyListeners' : '');\nconst ENABLE_ROOT_COMPONENT_BOOTSTRAP = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'ENABLE_ROOT_COMPONENT_BOOTSTRAP' : '');\nfunction isApplicationBootstrapConfig(config) {\n return !config.moduleRef;\n}\nfunction bootstrap(config) {\n const envInjector = isApplicationBootstrapConfig(config) ? config.r3Injector : config.moduleRef.injector;\n const ngZone = envInjector.get(NgZone);\n return ngZone.run(() => {\n if (isApplicationBootstrapConfig(config)) {\n config.r3Injector.resolveInjectorInitializers();\n } else {\n config.moduleRef.resolveInjectorInitializers();\n }\n const exceptionHandler = envInjector.get(INTERNAL_APPLICATION_ERROR_HANDLER);\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n if (envInjector.get(PROVIDED_ZONELESS) && envInjector.get(PROVIDED_NG_ZONE)) {\n console.warn(formatRuntimeError(408, 'Both provideZoneChangeDetection and provideZonelessChangeDetection are provided. ' + 'This is likely a mistake. Update the application providers to use only one of the two.'));\n }\n }\n let onErrorSubscription;\n ngZone.runOutsideAngular(() => {\n onErrorSubscription = ngZone.onError.subscribe({\n next: exceptionHandler\n });\n });\n if (isApplicationBootstrapConfig(config)) {\n const destroyListener = () => envInjector.destroy();\n const onPlatformDestroyListeners = config.platformInjector.get(PLATFORM_DESTROY_LISTENERS);\n onPlatformDestroyListeners.add(destroyListener);\n envInjector.onDestroy(() => {\n onErrorSubscription.unsubscribe();\n onPlatformDestroyListeners.delete(destroyListener);\n });\n } else {\n const destroyListener = () => config.moduleRef.destroy();\n const onPlatformDestroyListeners = config.platformInjector.get(PLATFORM_DESTROY_LISTENERS);\n onPlatformDestroyListeners.add(destroyListener);\n config.moduleRef.onDestroy(() => {\n remove(config.allPlatformModules, config.moduleRef);\n onErrorSubscription.unsubscribe();\n onPlatformDestroyListeners.delete(destroyListener);\n });\n }\n return _callAndReportToErrorHandler(exceptionHandler, ngZone, () => {\n const pendingTasks = envInjector.get(PendingTasksInternal);\n const taskId = pendingTasks.add();\n const initStatus = envInjector.get(ApplicationInitStatus);\n initStatus.runInitializers();\n return initStatus.donePromise.then(() => {\n const localeId = envInjector.get(LOCALE_ID, DEFAULT_LOCALE_ID);\n setLocaleId(localeId || DEFAULT_LOCALE_ID);\n const enableRootComponentbootstrap = envInjector.get(ENABLE_ROOT_COMPONENT_BOOTSTRAP, true);\n if (!enableRootComponentbootstrap) {\n if (isApplicationBootstrapConfig(config)) {\n return envInjector.get(ApplicationRef);\n }\n config.allPlatformModules.push(config.moduleRef);\n return config.moduleRef;\n }\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n const imagePerformanceService = envInjector.get(ImagePerformanceWarning);\n imagePerformanceService.start();\n }\n if (isApplicationBootstrapConfig(config)) {\n const appRef = envInjector.get(ApplicationRef);\n if (config.rootComponent !== undefined) {\n appRef.bootstrap(config.rootComponent);\n }\n return appRef;\n } else {\n moduleBootstrapImpl?.(config.moduleRef, config.allPlatformModules);\n return config.moduleRef;\n }\n }).finally(() => void pendingTasks.remove(taskId));\n });\n });\n}\nlet moduleBootstrapImpl;\nfunction setModuleBootstrapImpl() {\n moduleBootstrapImpl = _moduleDoBootstrap;\n}\nfunction _moduleDoBootstrap(moduleRef, allPlatformModules) {\n const appRef = moduleRef.injector.get(ApplicationRef);\n if (moduleRef._bootstrapComponents.length > 0) {\n moduleRef._bootstrapComponents.forEach(f => appRef.bootstrap(f));\n } else if (moduleRef.instance.ngDoBootstrap) {\n moduleRef.instance.ngDoBootstrap(appRef);\n } else {\n throw new RuntimeError(-403, ngDevMode && `The module ${stringify(moduleRef.instance.constructor)} was bootstrapped, ` + `but it does not declare \"@NgModule.bootstrap\" components nor a \"ngDoBootstrap\" method. ` + `Please define one of these.`);\n }\n allPlatformModules.push(moduleRef);\n}\nfunction _callAndReportToErrorHandler(errorHandler, ngZone, callback) {\n try {\n const result = callback();\n if (isPromise(result)) {\n return result.catch(e => {\n ngZone.runOutsideAngular(() => errorHandler(e));\n throw e;\n });\n }\n return result;\n } catch (e) {\n ngZone.runOutsideAngular(() => errorHandler(e));\n throw e;\n }\n}\nlet PlatformRef = /*#__PURE__*/(() => {\n class PlatformRef {\n _injector;\n _modules = [];\n _destroyListeners = [];\n _destroyed = false;\n constructor(_injector) {\n this._injector = _injector;\n }\n bootstrapModuleFactory(moduleFactory, options) {\n const allAppProviders = [provideZonelessChangeDetectionInternal(), ...(options?.applicationProviders ?? []), errorHandlerEnvironmentInitializer, ...(ngDevMode ? [validAppIdInitializer] : [])];\n const moduleRef = createNgModuleRefWithProviders(moduleFactory.moduleType, this.injector, allAppProviders);\n setModuleBootstrapImpl();\n return bootstrap({\n moduleRef,\n allPlatformModules: this._modules,\n platformInjector: this.injector\n });\n }\n bootstrapModule(moduleType, compilerOptions = []) {\n const options = optionsReducer({}, compilerOptions);\n setModuleBootstrapImpl();\n return compileNgModuleFactory(this.injector, options, moduleType).then(moduleFactory => this.bootstrapModuleFactory(moduleFactory, options));\n }\n onDestroy(callback) {\n this._destroyListeners.push(callback);\n }\n get injector() {\n return this._injector;\n }\n destroy() {\n if (this._destroyed) {\n throw new RuntimeError(404, ngDevMode && 'The platform has already been destroyed!');\n }\n this._modules.slice().forEach(module => module.destroy());\n this._destroyListeners.forEach(listener => listener());\n const destroyListeners = this._injector.get(PLATFORM_DESTROY_LISTENERS, null);\n if (destroyListeners) {\n destroyListeners.forEach(listener => listener());\n destroyListeners.clear();\n }\n this._destroyed = true;\n }\n get destroyed() {\n return this._destroyed;\n }\n static ɵfac = function PlatformRef_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || PlatformRef)(__inject(Injector));\n };\n static ɵprov = /*@__PURE__*/__defineInjectable({\n token: PlatformRef,\n factory: PlatformRef.ɵfac,\n providedIn: 'platform'\n });\n }\n return PlatformRef;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && setClassMetadata(PlatformRef, [{\n type: Injectable,\n args: [{\n providedIn: 'platform'\n }]\n }], () => [{\n type: Injector\n }], null);\n})();\nlet _platformInjector = null;\nfunction createPlatform(injector) {\n if (getPlatform()) {\n throw new RuntimeError(400, ngDevMode && 'There can be only one platform. Destroy the previous one to create a new one.');\n }\n publishDefaultGlobalUtils();\n publishSignalConfiguration();\n _platformInjector = typeof ngServerMode === 'undefined' || !ngServerMode ? injector : null;\n const platform = injector.get(PlatformRef);\n runPlatformInitializers(injector);\n return platform;\n}\nfunction createPlatformFactory(parentPlatformFactory, name, providers = []) {\n const desc = `Platform: ${name}`;\n const marker = new InjectionToken(desc);\n return (extraProviders = []) => {\n let platform = getPlatform();\n if (!platform) {\n const platformProviders = [...providers, ...extraProviders, {\n provide: marker,\n useValue: true\n }];\n platform = parentPlatformFactory?.(platformProviders) ?? createPlatform(createPlatformInjector(platformProviders, desc));\n }\n return typeof ngServerMode !== 'undefined' && ngServerMode ? platform : assertPlatform(marker);\n };\n}\nfunction createPlatformInjector(providers = [], name) {\n return Injector.create({\n name,\n providers: [{\n provide: INJECTOR_SCOPE,\n useValue: 'platform'\n }, {\n provide: PLATFORM_DESTROY_LISTENERS,\n useValue: new Set([() => _platformInjector = null])\n }, ...providers]\n });\n}\nfunction assertPlatform(requiredToken) {\n const platform = getPlatform();\n if (!platform) {\n throw new RuntimeError(-401, ngDevMode && 'No platform exists!');\n }\n if ((typeof ngDevMode === 'undefined' || ngDevMode) && !platform.injector.get(requiredToken, null)) {\n throw new RuntimeError(400, 'A platform with a different configuration has been created. Please destroy it first.');\n }\n return platform;\n}\nfunction getPlatform() {\n if (typeof ngServerMode !== 'undefined' && ngServerMode) {\n return null;\n }\n return _platformInjector?.get(PlatformRef) ?? null;\n}\nfunction destroyPlatform() {\n getPlatform()?.destroy();\n}\nfunction createOrReusePlatformInjector(providers = []) {\n if (_platformInjector) return _platformInjector;\n publishDefaultGlobalUtils();\n const injector = createPlatformInjector(providers);\n if (typeof ngServerMode === 'undefined' || !ngServerMode) {\n _platformInjector = injector;\n }\n publishSignalConfiguration();\n runPlatformInitializers(injector);\n return injector;\n}\nfunction providePlatformInitializer(initializerFn) {\n return {\n provide: PLATFORM_INITIALIZER,\n useValue: initializerFn,\n multi: true\n };\n}\nfunction runPlatformInitializers(injector) {\n const inits = injector.get(PLATFORM_INITIALIZER, null);\n runInInjectionContext(injector, () => {\n inits?.forEach(init => init());\n });\n}\nfunction exhaustiveCheckNoChangesInterval(interval) {\n return provideEnvironmentInitializer(() => {\n const applicationRef = inject(ApplicationRef);\n const errorHandler = inject(ErrorHandler);\n const scheduler = inject(ChangeDetectionSchedulerImpl);\n const ngZone = inject(NgZone);\n function scheduleCheckNoChanges() {\n ngZone.runOutsideAngular(() => {\n setTimeout(() => {\n if (applicationRef.destroyed) {\n return;\n }\n if (scheduler.pendingRenderTaskId || scheduler.runningTick) {\n scheduleCheckNoChanges();\n return;\n }\n for (const view of applicationRef.allViews) {\n try {\n checkNoChangesInternal(view._lView, true);\n } catch (e) {\n errorHandler.handleError(e);\n }\n }\n scheduleCheckNoChanges();\n }, interval);\n });\n }\n scheduleCheckNoChanges();\n });\n}\nfunction provideCheckNoChangesConfig(options) {\n return makeEnvironmentProviders(typeof ngDevMode === 'undefined' || ngDevMode ? [{\n provide: UseExhaustiveCheckNoChanges,\n useValue: options.exhaustive\n }, options?.interval !== undefined ? exhaustiveCheckNoChangesInterval(options.interval) : []] : []);\n}\nfunction isDevMode() {\n return typeof ngDevMode === 'undefined' || !!ngDevMode;\n}\nfunction enableProdMode() {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n _global['ngDevMode'] = false;\n }\n}\nconst appsWithEventReplay = /*#__PURE__*/new WeakSet();\nconst EAGER_CONTENT_LISTENERS_KEY = '';\nfunction shouldEnableEventReplay(injector) {\n return injector.get(IS_EVENT_REPLAY_ENABLED, EVENT_REPLAY_ENABLED_DEFAULT);\n}\nfunction withEventReplay() {\n const providers = [{\n provide: IS_EVENT_REPLAY_ENABLED,\n useFactory: () => {\n let isEnabled = true;\n if (typeof ngServerMode === 'undefined' || !ngServerMode) {\n const appId = inject(APP_ID);\n isEnabled = !!window._ejsas?.[appId];\n }\n if (isEnabled) {\n performanceMarkFeature('NgEventReplay');\n }\n return isEnabled;\n }\n }];\n if (typeof ngServerMode === 'undefined' || !ngServerMode) {\n providers.push({\n provide: ENVIRONMENT_INITIALIZER,\n useValue: () => {\n const appRef = inject(ApplicationRef);\n const {\n injector\n } = appRef;\n if (!appsWithEventReplay.has(appRef)) {\n const jsActionMap = inject(JSACTION_BLOCK_ELEMENT_MAP);\n if (shouldEnableEventReplay(injector)) {\n enableStashEventListenerImpl();\n const appId = injector.get(APP_ID);\n const clearStashFn = setStashFn(appId, (rEl, eventName, listenerFn) => {\n if (rEl.nodeType !== Node.ELEMENT_NODE) return;\n sharedStashFunction(rEl, eventName, listenerFn);\n sharedMapFunction(rEl, jsActionMap);\n });\n appRef.onDestroy(clearStashFn);\n }\n }\n },\n multi: true\n }, {\n provide: APP_BOOTSTRAP_LISTENER,\n useFactory: () => {\n const appRef = inject(ApplicationRef);\n const {\n injector\n } = appRef;\n return () => {\n if (!shouldEnableEventReplay(injector) || appsWithEventReplay.has(appRef)) {\n return;\n }\n appsWithEventReplay.add(appRef);\n const appId = injector.get(APP_ID);\n appRef.onDestroy(() => {\n appsWithEventReplay.delete(appRef);\n if (typeof ngServerMode !== 'undefined' && !ngServerMode) {\n clearAppScopedEarlyEventContract(appId);\n }\n });\n appRef.whenStable().then(() => {\n if (appRef.destroyed) {\n return;\n }\n const eventContractDetails = injector.get(JSACTION_EVENT_CONTRACT);\n initEventReplay(eventContractDetails, injector);\n const jsActionMap = injector.get(JSACTION_BLOCK_ELEMENT_MAP);\n jsActionMap.get(EAGER_CONTENT_LISTENERS_KEY)?.forEach(removeListeners);\n jsActionMap.delete(EAGER_CONTENT_LISTENERS_KEY);\n const eventContract = eventContractDetails.instance;\n if (isIncrementalHydrationEnabled(injector)) {\n appRef.onDestroy(() => eventContract.cleanUp());\n } else {\n eventContract.cleanUp();\n }\n });\n };\n },\n multi: true\n });\n }\n return providers;\n}\nconst initEventReplay = (eventDelegation, injector) => {\n const appId = injector.get(APP_ID);\n const earlyJsactionData = window._ejsas[appId];\n const eventContract = eventDelegation.instance = new EventContract(new EventContractContainer(earlyJsactionData.c));\n for (const et of earlyJsactionData.et) {\n eventContract.addEvent(et);\n }\n for (const et of earlyJsactionData.etc) {\n eventContract.addEvent(et);\n }\n const eventInfos = getAppScopedQueuedEventInfos(appId);\n eventContract.replayEarlyEventInfos(eventInfos);\n clearAppScopedEarlyEventContract(appId);\n const dispatcher = new EventDispatcher(event => {\n invokeRegisteredReplayListeners(injector, event, event.currentTarget);\n });\n registerDispatcher(eventContract, dispatcher);\n};\nfunction collectDomEventsInfo(tView, lView, eventTypesToReplay) {\n const domEventsInfo = new Map();\n const lCleanup = lView[CLEANUP];\n const tCleanup = tView.cleanup;\n if (!tCleanup || !lCleanup) {\n return domEventsInfo;\n }\n for (let i = 0; i < tCleanup.length;) {\n const firstParam = tCleanup[i++];\n const secondParam = tCleanup[i++];\n if (typeof firstParam !== 'string') {\n continue;\n }\n const eventType = firstParam;\n if (!isEarlyEventType(eventType)) {\n continue;\n }\n if (isCaptureEventType(eventType)) {\n eventTypesToReplay.capture.add(eventType);\n } else {\n eventTypesToReplay.regular.add(eventType);\n }\n const listenerElement = unwrapRNode(lView[secondParam]);\n i++;\n const useCaptureOrIndx = tCleanup[i++];\n const isDomEvent = typeof useCaptureOrIndx === 'boolean' || useCaptureOrIndx >= 0;\n if (!isDomEvent) {\n continue;\n }\n if (!domEventsInfo.has(listenerElement)) {\n domEventsInfo.set(listenerElement, [eventType]);\n } else {\n domEventsInfo.get(listenerElement).push(eventType);\n }\n }\n return domEventsInfo;\n}\nfunction invokeRegisteredReplayListeners(injector, event, currentTarget) {\n const blockName = (currentTarget && currentTarget.getAttribute(DEFER_BLOCK_SSR_ID_ATTRIBUTE)) ?? '';\n if (/d\\d+/.test(blockName)) {\n hydrateAndInvokeBlockListeners(blockName, injector, event, currentTarget);\n } else if (event.eventPhase === EventPhase.REPLAY) {\n invokeListeners(event, currentTarget);\n }\n}\nfunction hydrateAndInvokeBlockListeners(blockName, injector, event, currentTarget) {\n const queue = injector.get(EVENT_REPLAY_QUEUE);\n queue.push({\n event,\n currentTarget\n });\n triggerHydrationFromBlockName(injector, blockName, createReplayQueuedBlockEventsFn(queue));\n}\nfunction createReplayQueuedBlockEventsFn(queue) {\n return hydratedBlocks => {\n const hydrated = new Set(hydratedBlocks);\n const newQueue = [];\n for (let {\n event,\n currentTarget\n } of queue) {\n const blockName = currentTarget.getAttribute(DEFER_BLOCK_SSR_ID_ATTRIBUTE);\n if (hydrated.has(blockName)) {\n invokeListeners(event, currentTarget);\n } else {\n newQueue.push({\n event,\n currentTarget\n });\n }\n }\n queue.length = 0;\n queue.push(...newQueue);\n };\n}\nlet isHydrationSupportEnabled = false;\nlet isI18nHydrationRuntimeSupportEnabled = false;\nlet isIncrementalHydrationRuntimeSupportEnabled = false;\nconst APPLICATION_IS_STABLE_TIMEOUT = 10_000;\nfunction enableHydrationRuntimeSupport() {\n if (!isHydrationSupportEnabled) {\n isHydrationSupportEnabled = true;\n enableRetrieveHydrationInfoImpl();\n enableLocateOrCreateElementNodeImpl();\n enableLocateOrCreateTextNodeImpl();\n enableLocateOrCreateElementContainerNodeImpl();\n enableLocateOrCreateContainerAnchorImpl();\n enableLocateOrCreateContainerRefImpl();\n enableFindMatchingDehydratedViewImpl();\n enableApplyRootElementTransformImpl();\n }\n}\nfunction enableI18nHydrationRuntimeSupport() {\n if (!isI18nHydrationRuntimeSupportEnabled) {\n isI18nHydrationRuntimeSupportEnabled = true;\n enableLocateOrCreateI18nNodeImpl();\n enablePrepareI18nBlockForHydrationImpl();\n enableClaimDehydratedIcuCaseImpl();\n }\n}\nfunction enableIncrementalHydrationRuntimeSupport() {\n if (!isIncrementalHydrationRuntimeSupportEnabled) {\n isIncrementalHydrationRuntimeSupportEnabled = true;\n enableRetrieveDeferBlockDataImpl();\n }\n}\nfunction printHydrationStats(injector) {\n const console = injector.get(Console);\n const message = `Angular hydrated ${ngDevMode.hydratedComponents} component(s) ` + `and ${ngDevMode.hydratedNodes} node(s), ` + `${ngDevMode.componentsSkippedHydration} component(s) were skipped. ` + (isIncrementalHydrationEnabled(injector) ? `${ngDevMode.deferBlocksWithIncrementalHydration} defer block(s) were configured to use incremental hydration. ` : '') + `Learn more at ${DOC_PAGE_BASE_URL}/guide/hydration.`;\n console.log(message);\n}\nfunction whenStableWithTimeout(appRef) {\n const whenStablePromise = appRef.whenStable();\n if (typeof ngDevMode !== 'undefined' && ngDevMode) {\n const timeoutTime = APPLICATION_IS_STABLE_TIMEOUT;\n const console = appRef.injector.get(Console);\n const ngZone = appRef.injector.get(NgZone);\n const timeoutId = ngZone.runOutsideAngular(() => {\n return setTimeout(() => logWarningOnStableTimedout(timeoutTime, console), timeoutTime);\n });\n whenStablePromise.finally(() => clearTimeout(timeoutId));\n }\n return whenStablePromise;\n}\nconst CLIENT_RENDER_MODE_FLAG = 'ngcm';\nfunction isClientRenderModeEnabled(doc) {\n return (typeof ngServerMode === 'undefined' || !ngServerMode) && doc.body.hasAttribute(CLIENT_RENDER_MODE_FLAG);\n}\nfunction withDomHydration() {\n const providers = [{\n provide: IS_HYDRATION_DOM_REUSE_ENABLED,\n useFactory: () => {\n let isEnabled = true;\n if (typeof ngServerMode === 'undefined' || !ngServerMode) {\n const transferState = inject(TransferState, {\n optional: true\n });\n isEnabled = !!transferState?.get(NGH_DATA_KEY, null);\n }\n if (isEnabled) {\n performanceMarkFeature('NgHydration');\n }\n return isEnabled;\n }\n }, {\n provide: ENVIRONMENT_INITIALIZER,\n useValue: () => {\n setIsI18nHydrationSupportEnabled(false);\n if (typeof ngServerMode !== 'undefined' && ngServerMode) {\n return;\n }\n const doc = inject(DOCUMENT);\n if (inject(IS_HYDRATION_DOM_REUSE_ENABLED)) {\n verifySsrContentsIntegrity(doc);\n enableHydrationRuntimeSupport();\n } else if (typeof ngDevMode !== 'undefined' && ngDevMode && !isClientRenderModeEnabled(doc)) {\n const console = inject(Console);\n const message = formatRuntimeError(-505, 'Angular hydration was requested on the client, but there was no ' + 'serialized information present in the server response, ' + 'thus hydration was not enabled. ' + 'Make sure the `provideClientHydration()` is included into the list ' + 'of providers in the server part of the application configuration.');\n console.warn(message);\n }\n },\n multi: true\n }];\n if (typeof ngServerMode === 'undefined' || !ngServerMode) {\n providers.push({\n provide: PRESERVE_HOST_CONTENT,\n useFactory: () => {\n return inject(IS_HYDRATION_DOM_REUSE_ENABLED);\n }\n }, {\n provide: APP_BOOTSTRAP_LISTENER,\n useFactory: () => {\n const scheduler = inject(ChangeDetectionScheduler);\n if (inject(IS_HYDRATION_DOM_REUSE_ENABLED)) {\n const appRef = inject(ApplicationRef);\n return () => {\n whenStableWithTimeout(appRef).then(() => {\n if (appRef.destroyed) {\n return;\n }\n cleanupDehydratedViews(appRef);\n if (typeof ngDevMode !== 'undefined' && ngDevMode) {\n countBlocksSkippedByHydration(appRef.injector);\n printHydrationStats(appRef.injector);\n }\n scheduler.notify(7);\n });\n };\n }\n return () => {};\n },\n multi: true\n });\n }\n return makeEnvironmentProviders(providers);\n}\nfunction withI18nSupport() {\n return [{\n provide: IS_I18N_HYDRATION_ENABLED,\n useFactory: () => inject(IS_HYDRATION_DOM_REUSE_ENABLED)\n }, {\n provide: ENVIRONMENT_INITIALIZER,\n useValue: () => {\n if (inject(IS_HYDRATION_DOM_REUSE_ENABLED)) {\n enableI18nHydrationRuntimeSupport();\n setIsI18nHydrationSupportEnabled(true);\n performanceMarkFeature('NgI18nHydration');\n }\n },\n multi: true\n }];\n}\nfunction withIncrementalHydration() {\n const providers = [withEventReplay(), {\n provide: IS_INCREMENTAL_HYDRATION_ENABLED,\n useValue: true\n }, {\n provide: DEHYDRATED_BLOCK_REGISTRY,\n useClass: DehydratedBlockRegistry\n }, {\n provide: ENVIRONMENT_INITIALIZER,\n useValue: () => {\n enableIncrementalHydrationRuntimeSupport();\n performanceMarkFeature('NgIncrementalHydration');\n },\n multi: true\n }];\n if (typeof ngServerMode === 'undefined' || !ngServerMode) {\n providers.push({\n provide: APP_BOOTSTRAP_LISTENER,\n useFactory: () => {\n const injector = inject(Injector);\n const doc = inject(DOCUMENT);\n return () => {\n const deferBlockData = processBlockData(injector);\n const commentsByBlockId = gatherDeferBlocksCommentNodes(doc, doc.body);\n processAndInitTriggers(injector, deferBlockData, commentsByBlockId);\n appendDeferBlocksToJSActionMap(doc, injector);\n };\n },\n multi: true\n });\n }\n return providers;\n}\nfunction logWarningOnStableTimedout(time, console) {\n const message = `Angular hydration expected the ApplicationRef.isStable() to emit \\`true\\`, but it ` + `didn't happen within ${time}ms. Angular hydration logic depends on the application becoming stable ` + `as a signal to complete hydration process.`;\n console.warn(formatRuntimeError(-506, message));\n}\nconst STABILITY_WARNING_THRESHOLD = APPLICATION_IS_STABLE_TIMEOUT - 1_000;\nclass DebugTaskTrackerImpl {\n openTasks = /*#__PURE__*/new Map();\n add(taskId) {\n this.openTasks.set(taskId, new Error('Task stack tracking error'));\n }\n remove(taskId) {\n this.openTasks.delete(taskId);\n }\n}\nfunction provideStabilityDebugging() {\n const taskTracker = new DebugTaskTrackerImpl();\n const {\n openTasks\n } = taskTracker;\n return makeEnvironmentProviders([{\n provide: DEBUG_TASK_TRACKER,\n useValue: taskTracker\n }, provideAppInitializer(() => {\n if (typeof ngDevMode === 'undefined' || !ngDevMode) {\n console.warn('Stability debugging utility was provided in production mode. ' + 'This will cause debug code to be included in production bundles. ' + 'If this is intentional because you are debugging stability issues in a production environment, you can ignore this warning.');\n }\n const ngZone = inject(NgZone);\n const applicationRef = inject(ApplicationRef);\n let _taskTrackingZone = null;\n if (typeof Zone !== 'undefined') {\n ngZone.run(() => {\n _taskTrackingZone = Zone.current.get('TaskTrackingZone');\n });\n }\n ngZone.runOutsideAngular(() => {\n const timeoutId = setTimeout(() => {\n console.debug(`---- Application did not stabilize within ${STABILITY_WARNING_THRESHOLD / 1000} seconds ----`);\n if (typeof Zone !== 'undefined' && !_taskTrackingZone) {\n console.info('Zone.js is present but no TaskTrackingZone found. To enable better debugging of tasks in the Angular Zone, ' + 'import \"zone.js/plugins/task-tracking\" in your application.');\n }\n if (_taskTrackingZone?.macroTasks?.length) {\n console.group('Macrotasks keeping Angular Zone unstable:');\n for (const t of _taskTrackingZone?.macroTasks ?? []) {\n console.debug(t.creationLocation.stack);\n }\n console.groupEnd();\n }\n console.group('PendingTasks keeping application unstable:');\n for (const error of openTasks.values()) {\n console.debug(error.stack);\n }\n console.groupEnd();\n }, STABILITY_WARNING_THRESHOLD);\n applicationRef.whenStable().then(() => {\n clearTimeout(timeoutId);\n });\n });\n })]);\n}\nfunction getModuleFactory(id) {\n const type = getRegisteredNgModuleType(id);\n if (!type) throw noModuleError(id);\n return new NgModuleFactory(type);\n}\nfunction getNgModuleById(id) {\n const type = getRegisteredNgModuleType(id);\n if (!type) throw noModuleError(id);\n return type;\n}\nfunction noModuleError(id) {\n return new RuntimeError(920, ngDevMode && `No module with ID ${id} loaded`);\n}\nlet ChangeDetectorRef = /*#__PURE__*/(() => {\n class ChangeDetectorRef {\n static __NG_ELEMENT_ID__ = injectChangeDetectorRef;\n }\n return ChangeDetectorRef;\n})();\nfunction injectChangeDetectorRef(flags) {\n return createViewRef(getCurrentTNode(), getLView(), (flags & 16) === 16);\n}\nfunction createViewRef(tNode, lView, isPipe) {\n if (isComponentHost(tNode) && !isPipe) {\n const componentView = getComponentLViewByIndex(tNode.index, lView);\n return new ViewRef$1(componentView, componentView);\n } else if (tNode.type & (3 | 12 | 32 | 128)) {\n const hostComponentView = lView[DECLARATION_COMPONENT_VIEW];\n return new ViewRef$1(hostComponentView, lView);\n }\n return null;\n}\nclass ViewRef extends ChangeDetectorRef {}\nclass EmbeddedViewRef extends ViewRef {}\nclass DefaultIterableDifferFactory {\n supports(obj) {\n return isListLikeIterable(obj);\n }\n create(trackByFn) {\n return new DefaultIterableDiffer(trackByFn);\n }\n}\nconst trackByIdentity = (index, item) => item;\nclass DefaultIterableDiffer {\n length = 0;\n collection;\n _linkedRecords = null;\n _unlinkedRecords = null;\n _previousItHead = null;\n _itHead = null;\n _itTail = null;\n _additionsHead = null;\n _additionsTail = null;\n _movesHead = null;\n _movesTail = null;\n _removalsHead = null;\n _removalsTail = null;\n _identityChangesHead = null;\n _identityChangesTail = null;\n _trackByFn;\n constructor(trackByFn) {\n this._trackByFn = trackByFn || trackByIdentity;\n }\n forEachItem(fn) {\n let record;\n for (record = this._itHead; record !== null; record = record._next) {\n fn(record);\n }\n }\n forEachOperation(fn) {\n let nextIt = this._itHead;\n let nextRemove = this._removalsHead;\n let addRemoveOffset = 0;\n let moveOffsets = null;\n while (nextIt || nextRemove) {\n const record = !nextRemove || nextIt && nextIt.currentIndex < getPreviousIndex(nextRemove, addRemoveOffset, moveOffsets) ? nextIt : nextRemove;\n const adjPreviousIndex = getPreviousIndex(record, addRemoveOffset, moveOffsets);\n const currentIndex = record.currentIndex;\n if (record === nextRemove) {\n addRemoveOffset--;\n nextRemove = nextRemove._nextRemoved;\n } else {\n nextIt = nextIt._next;\n if (record.previousIndex == null) {\n addRemoveOffset++;\n } else {\n if (!moveOffsets) moveOffsets = [];\n const localMovePreviousIndex = adjPreviousIndex - addRemoveOffset;\n const localCurrentIndex = currentIndex - addRemoveOffset;\n if (localMovePreviousIndex != localCurrentIndex) {\n for (let i = 0; i < localMovePreviousIndex; i++) {\n const offset = i < moveOffsets.length ? moveOffsets[i] : moveOffsets[i] = 0;\n const index = offset + i;\n if (localCurrentIndex <= index && index < localMovePreviousIndex) {\n moveOffsets[i] = offset + 1;\n }\n }\n const previousIndex = record.previousIndex;\n moveOffsets[previousIndex] = localCurrentIndex - localMovePreviousIndex;\n }\n }\n }\n if (adjPreviousIndex !== currentIndex) {\n fn(record, adjPreviousIndex, currentIndex);\n }\n }\n }\n forEachPreviousItem(fn) {\n let record;\n for (record = this._previousItHead; record !== null; record = record._nextPrevious) {\n fn(record);\n }\n }\n forEachAddedItem(fn) {\n let record;\n for (record = this._additionsHead; record !== null; record = record._nextAdded) {\n fn(record);\n }\n }\n forEachMovedItem(fn) {\n let record;\n for (record = this._movesHead; record !== null; record = record._nextMoved) {\n fn(record);\n }\n }\n forEachRemovedItem(fn) {\n let record;\n for (record = this._removalsHead; record !== null; record = record._nextRemoved) {\n fn(record);\n }\n }\n forEachIdentityChange(fn) {\n let record;\n for (record = this._identityChangesHead; record !== null; record = record._nextIdentityChange) {\n fn(record);\n }\n }\n diff(collection) {\n if (collection == null) collection = [];\n if (!isListLikeIterable(collection)) {\n throw new RuntimeError(900, ngDevMode && `Error trying to diff '${stringify(collection)}'. Only arrays and iterables are allowed`);\n }\n if (this.check(collection)) {\n return this;\n } else {\n return null;\n }\n }\n onDestroy() {}\n check(collection) {\n this._reset();\n let record = this._itHead;\n let mayBeDirty = false;\n let index;\n let item;\n let itemTrackBy;\n if (Array.isArray(collection)) {\n this.length = collection.length;\n for (let index = 0; index < this.length; index++) {\n item = collection[index];\n itemTrackBy = this._trackByFn(index, item);\n if (record === null || !Object.is(record.trackById, itemTrackBy)) {\n record = this._mismatch(record, item, itemTrackBy, index);\n mayBeDirty = true;\n } else {\n if (mayBeDirty) {\n record = this._verifyReinsertion(record, item, itemTrackBy, index);\n }\n if (!Object.is(record.item, item)) this._addIdentityChange(record, item);\n }\n record = record._next;\n }\n } else {\n index = 0;\n iterateListLike(collection, item => {\n itemTrackBy = this._trackByFn(index, item);\n if (record === null || !Object.is(record.trackById, itemTrackBy)) {\n record = this._mismatch(record, item, itemTrackBy, index);\n mayBeDirty = true;\n } else {\n if (mayBeDirty) {\n record = this._verifyReinsertion(record, item, itemTrackBy, index);\n }\n if (!Object.is(record.item, item)) this._addIdentityChange(record, item);\n }\n record = record._next;\n index++;\n });\n this.length = index;\n }\n this._truncate(record);\n this.collection = collection;\n return this.isDirty;\n }\n get isDirty() {\n return this._additionsHead !== null || this._movesHead !== null || this._removalsHead !== null || this._identityChangesHead !== null;\n }\n _reset() {\n if (this.isDirty) {\n let record;\n for (record = this._previousItHead = this._itHead; record !== null; record = record._next) {\n record._nextPrevious = record._next;\n }\n for (record = this._additionsHead; record !== null; record = record._nextAdded) {\n record.previousIndex = record.currentIndex;\n }\n this._additionsHead = this._additionsTail = null;\n for (record = this._movesHead; record !== null; record = record._nextMoved) {\n record.previousIndex = record.currentIndex;\n }\n this._movesHead = this._movesTail = null;\n this._removalsHead = this._removalsTail = null;\n this._identityChangesHead = this._identityChangesTail = null;\n }\n }\n _mismatch(record, item, itemTrackBy, index) {\n let previousRecord;\n if (record === null) {\n previousRecord = this._itTail;\n } else {\n previousRecord = record._prev;\n this._remove(record);\n }\n record = this._unlinkedRecords === null ? null : this._unlinkedRecords.get(itemTrackBy, null);\n if (record !== null) {\n if (!Object.is(record.item, item)) this._addIdentityChange(record, item);\n this._reinsertAfter(record, previousRecord, index);\n } else {\n record = this._linkedRecords === null ? null : this._linkedRecords.get(itemTrackBy, index);\n if (record !== null) {\n if (!Object.is(record.item, item)) this._addIdentityChange(record, item);\n this._moveAfter(record, previousRecord, index);\n } else {\n record = this._addAfter(new IterableChangeRecord_(item, itemTrackBy), previousRecord, index);\n }\n }\n return record;\n }\n _verifyReinsertion(record, item, itemTrackBy, index) {\n let reinsertRecord = this._unlinkedRecords === null ? null : this._unlinkedRecords.get(itemTrackBy, null);\n if (reinsertRecord !== null) {\n record = this._reinsertAfter(reinsertRecord, record._prev, index);\n } else if (record.currentIndex != index) {\n record.currentIndex = index;\n this._addToMoves(record, index);\n }\n return record;\n }\n _truncate(record) {\n while (record !== null) {\n const nextRecord = record._next;\n this._addToRemovals(this._unlink(record));\n record = nextRecord;\n }\n if (this._unlinkedRecords !== null) {\n this._unlinkedRecords.clear();\n }\n if (this._additionsTail !== null) {\n this._additionsTail._nextAdded = null;\n }\n if (this._movesTail !== null) {\n this._movesTail._nextMoved = null;\n }\n if (this._itTail !== null) {\n this._itTail._next = null;\n }\n if (this._removalsTail !== null) {\n this._removalsTail._nextRemoved = null;\n }\n if (this._identityChangesTail !== null) {\n this._identityChangesTail._nextIdentityChange = null;\n }\n }\n _reinsertAfter(record, prevRecord, index) {\n if (this._unlinkedRecords !== null) {\n this._unlinkedRecords.remove(record);\n }\n const prev = record._prevRemoved;\n const next = record._nextRemoved;\n if (prev === null) {\n this._removalsHead = next;\n } else {\n prev._nextRemoved = next;\n }\n if (next === null) {\n this._removalsTail = prev;\n } else {\n next._prevRemoved = prev;\n }\n this._insertAfter(record, prevRecord, index);\n this._addToMoves(record, index);\n return record;\n }\n _moveAfter(record, prevRecord, index) {\n this._unlink(record);\n this._insertAfter(record, prevRecord, index);\n this._addToMoves(record, index);\n return record;\n }\n _addAfter(record, prevRecord, index) {\n this._insertAfter(record, prevRecord, index);\n if (this._additionsTail === null) {\n this._additionsTail = this._additionsHead = record;\n } else {\n this._additionsTail = this._additionsTail._nextAdded = record;\n }\n return record;\n }\n _insertAfter(record, prevRecord, index) {\n const next = prevRecord === null ? this._itHead : prevRecord._next;\n record._next = next;\n record._prev = prevRecord;\n if (next === null) {\n this._itTail = record;\n } else {\n next._prev = record;\n }\n if (prevRecord === null) {\n this._itHead = record;\n } else {\n prevRecord._next = record;\n }\n if (this._linkedRecords === null) {\n this._linkedRecords = new _DuplicateMap();\n }\n this._linkedRecords.put(record);\n record.currentIndex = index;\n return record;\n }\n _remove(record) {\n return this._addToRemovals(this._unlink(record));\n }\n _unlink(record) {\n if (this._linkedRecords !== null) {\n this._linkedRecords.remove(record);\n }\n const prev = record._prev;\n const next = record._next;\n if (prev === null) {\n this._itHead = next;\n } else {\n prev._next = next;\n }\n if (next === null) {\n this._itTail = prev;\n } else {\n next._prev = prev;\n }\n return record;\n }\n _addToMoves(record, toIndex) {\n if (record.previousIndex === toIndex) {\n return record;\n }\n if (this._movesTail === null) {\n this._movesTail = this._movesHead = record;\n } else {\n this._movesTail = this._movesTail._nextMoved = record;\n }\n return record;\n }\n _addToRemovals(record) {\n if (this._unlinkedRecords === null) {\n this._unlinkedRecords = new _DuplicateMap();\n }\n this._unlinkedRecords.put(record);\n record.currentIndex = null;\n record._nextRemoved = null;\n if (this._removalsTail === null) {\n this._removalsTail = this._removalsHead = record;\n record._prevRemoved = null;\n } else {\n record._prevRemoved = this._removalsTail;\n this._removalsTail = this._removalsTail._nextRemoved = record;\n }\n return record;\n }\n _addIdentityChange(record, item) {\n record.item = item;\n if (this._identityChangesTail === null) {\n this._identityChangesTail = this._identityChangesHead = record;\n } else {\n this._identityChangesTail = this._identityChangesTail._nextIdentityChange = record;\n }\n return record;\n }\n}\nclass IterableChangeRecord_ {\n item;\n trackById;\n currentIndex = null;\n previousIndex = null;\n _nextPrevious = null;\n _prev = null;\n _next = null;\n _prevDup = null;\n _nextDup = null;\n _prevRemoved = null;\n _nextRemoved = null;\n _nextAdded = null;\n _nextMoved = null;\n _nextIdentityChange = null;\n constructor(item, trackById) {\n this.item = item;\n this.trackById = trackById;\n }\n}\nclass _DuplicateItemRecordList {\n _head = null;\n _tail = null;\n add(record) {\n if (this._head === null) {\n this._head = this._tail = record;\n record._nextDup = null;\n record._prevDup = null;\n } else {\n this._tail._nextDup = record;\n record._prevDup = this._tail;\n record._nextDup = null;\n this._tail = record;\n }\n }\n get(trackById, atOrAfterIndex) {\n let record;\n for (record = this._head; record !== null; record = record._nextDup) {\n if ((atOrAfterIndex === null || atOrAfterIndex <= record.currentIndex) && Object.is(record.trackById, trackById)) {\n return record;\n }\n }\n return null;\n }\n remove(record) {\n const prev = record._prevDup;\n const next = record._nextDup;\n if (prev === null) {\n this._head = next;\n } else {\n prev._nextDup = next;\n }\n if (next === null) {\n this._tail = prev;\n } else {\n next._prevDup = prev;\n }\n return this._head === null;\n }\n}\nclass _DuplicateMap {\n map = /*#__PURE__*/new Map();\n put(record) {\n const key = record.trackById;\n let duplicates = this.map.get(key);\n if (!duplicates) {\n duplicates = new _DuplicateItemRecordList();\n this.map.set(key, duplicates);\n }\n duplicates.add(record);\n }\n get(trackById, atOrAfterIndex) {\n const key = trackById;\n const recordList = this.map.get(key);\n return recordList ? recordList.get(trackById, atOrAfterIndex) : null;\n }\n remove(record) {\n const key = record.trackById;\n const recordList = this.map.get(key);\n if (recordList.remove(record)) {\n this.map.delete(key);\n }\n return record;\n }\n get isEmpty() {\n return this.map.size === 0;\n }\n clear() {\n this.map.clear();\n }\n}\nfunction getPreviousIndex(item, addRemoveOffset, moveOffsets) {\n const previousIndex = item.previousIndex;\n if (previousIndex === null) return previousIndex;\n let moveOffset = 0;\n if (moveOffsets && previousIndex < moveOffsets.length) {\n moveOffset = moveOffsets[previousIndex];\n }\n return previousIndex + addRemoveOffset + moveOffset;\n}\nclass DefaultKeyValueDifferFactory {\n supports(obj) {\n return obj instanceof Map || isJsObject(obj);\n }\n create() {\n return new DefaultKeyValueDiffer();\n }\n}\nclass DefaultKeyValueDiffer {\n _records = /*#__PURE__*/new Map();\n _mapHead = null;\n _appendAfter = null;\n _previousMapHead = null;\n _changesHead = null;\n _changesTail = null;\n _additionsHead = null;\n _additionsTail = null;\n _removalsHead = null;\n get isDirty() {\n return this._additionsHead !== null || this._changesHead !== null || this._removalsHead !== null;\n }\n forEachItem(fn) {\n let record;\n for (record = this._mapHead; record !== null; record = record._next) {\n fn(record);\n }\n }\n forEachPreviousItem(fn) {\n let record;\n for (record = this._previousMapHead; record !== null; record = record._nextPrevious) {\n fn(record);\n }\n }\n forEachChangedItem(fn) {\n let record;\n for (record = this._changesHead; record !== null; record = record._nextChanged) {\n fn(record);\n }\n }\n forEachAddedItem(fn) {\n let record;\n for (record = this._additionsHead; record !== null; record = record._nextAdded) {\n fn(record);\n }\n }\n forEachRemovedItem(fn) {\n let record;\n for (record = this._removalsHead; record !== null; record = record._nextRemoved) {\n fn(record);\n }\n }\n diff(map) {\n if (!map) {\n map = new Map();\n } else if (!(map instanceof Map || isJsObject(map))) {\n throw new RuntimeError(900, ngDevMode && `Error trying to diff '${stringify(map)}'. Only maps and objects are allowed`);\n }\n return this.check(map) ? this : null;\n }\n check(map) {\n this._reset();\n let insertBefore = this._mapHead;\n this._appendAfter = null;\n this._forEach(map, (value, key) => {\n if (insertBefore && insertBefore.key === key) {\n this._maybeAddToChanges(insertBefore, value);\n this._appendAfter = insertBefore;\n insertBefore = insertBefore._next;\n } else {\n const record = this._getOrCreateRecordForKey(key, value);\n insertBefore = this._insertBeforeOrAppend(insertBefore, record);\n }\n });\n if (insertBefore) {\n if (insertBefore._prev) {\n insertBefore._prev._next = null;\n }\n this._removalsHead = insertBefore;\n for (let record = insertBefore; record !== null; record = record._nextRemoved) {\n if (record === this._mapHead) {\n this._mapHead = null;\n }\n this._records.delete(record.key);\n record._nextRemoved = record._next;\n record.previousValue = record.currentValue;\n record.currentValue = null;\n record._prev = null;\n record._next = null;\n }\n }\n if (this._changesTail) this._changesTail._nextChanged = null;\n if (this._additionsTail) this._additionsTail._nextAdded = null;\n return this.isDirty;\n }\n _insertBeforeOrAppend(before, record) {\n if (before) {\n const prev = before._prev;\n record._next = before;\n record._prev = prev;\n before._prev = record;\n if (prev) {\n prev._next = record;\n }\n if (before === this._mapHead) {\n this._mapHead = record;\n }\n this._appendAfter = before;\n return before;\n }\n if (this._appendAfter) {\n this._appendAfter._next = record;\n record._prev = this._appendAfter;\n } else {\n this._mapHead = record;\n }\n this._appendAfter = record;\n return null;\n }\n _getOrCreateRecordForKey(key, value) {\n if (this._records.has(key)) {\n const record = this._records.get(key);\n this._maybeAddToChanges(record, value);\n const prev = record._prev;\n const next = record._next;\n if (prev) {\n prev._next = next;\n }\n if (next) {\n next._prev = prev;\n }\n record._next = null;\n record._prev = null;\n return record;\n }\n const record = new KeyValueChangeRecord_(key);\n this._records.set(key, record);\n record.currentValue = value;\n this._addToAdditions(record);\n return record;\n }\n _reset() {\n if (this.isDirty) {\n let record;\n this._previousMapHead = this._mapHead;\n for (record = this._previousMapHead; record !== null; record = record._next) {\n record._nextPrevious = record._next;\n }\n for (record = this._changesHead; record !== null; record = record._nextChanged) {\n record.previousValue = record.currentValue;\n }\n for (record = this._additionsHead; record != null; record = record._nextAdded) {\n record.previousValue = record.currentValue;\n }\n this._changesHead = this._changesTail = null;\n this._additionsHead = this._additionsTail = null;\n this._removalsHead = null;\n }\n }\n _maybeAddToChanges(record, newValue) {\n if (!Object.is(newValue, record.currentValue)) {\n record.previousValue = record.currentValue;\n record.currentValue = newValue;\n this._addToChanges(record);\n }\n }\n _addToAdditions(record) {\n if (this._additionsHead === null) {\n this._additionsHead = this._additionsTail = record;\n } else {\n this._additionsTail._nextAdded = record;\n this._additionsTail = record;\n }\n }\n _addToChanges(record) {\n if (this._changesHead === null) {\n this._changesHead = this._changesTail = record;\n } else {\n this._changesTail._nextChanged = record;\n this._changesTail = record;\n }\n }\n _forEach(obj, fn) {\n if (obj instanceof Map) {\n obj.forEach(fn);\n } else {\n Object.keys(obj).forEach(k => fn(obj[k], k));\n }\n }\n}\nclass KeyValueChangeRecord_ {\n key;\n previousValue = null;\n currentValue = null;\n _nextPrevious = null;\n _next = null;\n _prev = null;\n _nextAdded = null;\n _nextRemoved = null;\n _nextChanged = null;\n constructor(key) {\n this.key = key;\n }\n}\nfunction defaultIterableDiffersFactory() {\n return new IterableDiffers([new DefaultIterableDifferFactory()]);\n}\nlet IterableDiffers = /*#__PURE__*/(() => {\n class IterableDiffers {\n factories;\n static ɵprov = /* @__PURE__ */\n __defineInjectable({\n token: IterableDiffers,\n providedIn: 'root',\n factory: defaultIterableDiffersFactory\n });\n constructor(factories) {\n this.factories = factories;\n }\n static create(factories, parent) {\n if (parent != null) {\n const copied = parent.factories.slice();\n factories = factories.concat(copied);\n }\n return new IterableDiffers(factories);\n }\n static extend(factories) {\n return {\n provide: IterableDiffers,\n useFactory: () => {\n const parent = inject(IterableDiffers, {\n optional: true,\n skipSelf: true\n });\n return IterableDiffers.create(factories, parent || defaultIterableDiffersFactory());\n }\n };\n }\n find(iterable) {\n const factory = this.factories.find(f => f.supports(iterable));\n if (factory != null) {\n return factory;\n } else {\n throw new RuntimeError(901, ngDevMode && `Cannot find a differ supporting object '${iterable}' of type '${getTypeNameForDebugging(iterable)}'`);\n }\n }\n }\n return IterableDiffers;\n})();\nfunction getTypeNameForDebugging(type) {\n return type['name'] || typeof type;\n}\nfunction defaultKeyValueDiffersFactory() {\n return new KeyValueDiffers([new DefaultKeyValueDifferFactory()]);\n}\nlet KeyValueDiffers = /*#__PURE__*/(() => {\n class KeyValueDiffers {\n static ɵprov = /* @__PURE__ */\n __defineInjectable({\n token: KeyValueDiffers,\n providedIn: 'root',\n factory: defaultKeyValueDiffersFactory\n });\n factories;\n constructor(factories) {\n this.factories = factories;\n }\n static create(factories, parent) {\n if (parent) {\n const copied = parent.factories.slice();\n factories = factories.concat(copied);\n }\n return new KeyValueDiffers(factories);\n }\n static extend(factories) {\n return {\n provide: KeyValueDiffers,\n useFactory: () => {\n const parent = inject(KeyValueDiffers, {\n optional: true,\n skipSelf: true\n });\n return KeyValueDiffers.create(factories, parent || defaultKeyValueDiffersFactory());\n }\n };\n }\n find(kv) {\n const factory = this.factories.find(f => f.supports(kv));\n if (factory) {\n return factory;\n }\n throw new RuntimeError(901, ngDevMode && `Cannot find a differ supporting object '${kv}'`);\n }\n }\n return KeyValueDiffers;\n})();\nconst keyValDiff = [/*#__PURE__*/new DefaultKeyValueDifferFactory()];\nconst iterableDiff = [/*#__PURE__*/new DefaultIterableDifferFactory()];\nconst defaultIterableDiffers = /*#__PURE__*/new IterableDiffers(iterableDiff);\nconst defaultKeyValueDiffers = /*#__PURE__*/new KeyValueDiffers(keyValDiff);\nconst platformCore = /*#__PURE__*/createPlatformFactory(null, 'core', []);\nlet ApplicationModule = /*#__PURE__*/(() => {\n class ApplicationModule {\n constructor(appRef) {}\n static ɵfac = function ApplicationModule_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || ApplicationModule)(__inject(ApplicationRef));\n };\n static ɵmod = /*@__PURE__*/__defineNgModule({\n type: ApplicationModule\n });\n static ɵinj = /*@__PURE__*/__defineInjector({});\n }\n return ApplicationModule;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && setClassMetadata(ApplicationModule, [{\n type: NgModule\n }], () => [{\n type: ApplicationRef\n }], null);\n})();\nfunction internalCreateApplication(config) {\n const {\n rootComponent,\n appProviders,\n platformProviders,\n platformRef\n } = config;\n profiler(ProfilerEvent.BootstrapApplicationStart);\n if (typeof ngServerMode !== 'undefined' && ngServerMode && !platformRef) {\n throw new RuntimeError(-401, ngDevMode && 'Missing Platform: This may be due to using `bootstrapApplication` on the server without passing a `BootstrapContext`. ' + 'Please make sure that `bootstrapApplication` is called with a `context` argument.');\n }\n try {\n const platformInjector = platformRef?.injector ?? createOrReusePlatformInjector(platformProviders);\n if ((typeof ngDevMode === 'undefined' || ngDevMode) && rootComponent !== undefined) {\n assertStandaloneComponentType(rootComponent);\n }\n const allAppProviders = [provideZonelessChangeDetectionInternal(), errorHandlerEnvironmentInitializer, ...(ngDevMode ? [validAppIdInitializer] : []), ...(appProviders || [])];\n const adapter = new EnvironmentNgModuleRefAdapter({\n providers: allAppProviders,\n parent: platformInjector,\n debugName: typeof ngDevMode === 'undefined' || ngDevMode ? 'Environment Injector' : '',\n runEnvironmentInitializers: false\n });\n return bootstrap({\n r3Injector: adapter.injector,\n platformInjector,\n rootComponent\n });\n } catch (e) {\n return Promise.reject(e);\n } finally {\n profiler(ProfilerEvent.BootstrapApplicationEnd);\n }\n}\nclass SerializedViewCollection {\n views = [];\n indexByContent = /*#__PURE__*/new Map();\n add(serializedView) {\n const viewAsString = JSON.stringify(serializedView);\n if (!this.indexByContent.has(viewAsString)) {\n const index = this.views.length;\n this.views.push(serializedView);\n this.indexByContent.set(viewAsString, index);\n return index;\n }\n return this.indexByContent.get(viewAsString);\n }\n getAll() {\n return this.views;\n }\n}\nlet tViewSsrId = 0;\nfunction getSsrId(tView) {\n if (!tView.ssrId) {\n tView.ssrId = `t${tViewSsrId++}`;\n }\n return tView.ssrId;\n}\nfunction calcNumRootNodes(tView, lView, tNode) {\n const rootNodes = [];\n collectNativeNodes(tView, lView, tNode, rootNodes);\n return rootNodes.length;\n}\nfunction calcNumRootNodesInLContainer(lContainer) {\n const rootNodes = [];\n collectNativeNodesInLContainer(lContainer, rootNodes);\n return rootNodes.length;\n}\nfunction annotateComponentLViewForHydration(lView, context) {\n const hostElement = lView[HOST];\n if (hostElement && !hostElement.hasAttribute(SKIP_HYDRATION_ATTR_NAME)) {\n return annotateHostElementForHydration(hostElement, lView, null, context);\n }\n return null;\n}\nfunction annotateLContainerForHydration(lContainer, context) {\n const componentLView = unwrapLView(lContainer[HOST]);\n const componentLViewNghIndex = annotateComponentLViewForHydration(componentLView, context);\n if (componentLViewNghIndex === null) {\n return;\n }\n const hostElement = unwrapRNode(componentLView[HOST]);\n const rootLView = lContainer[PARENT];\n const rootLViewNghIndex = annotateHostElementForHydration(hostElement, rootLView, null, context);\n const renderer = componentLView[RENDERER];\n const finalIndex = `${componentLViewNghIndex}|${rootLViewNghIndex}`;\n renderer.setAttribute(hostElement, NGH_ATTR_NAME, finalIndex);\n}\nfunction annotateForHydration(appRef, doc) {\n const injector = appRef.injector;\n const isI18nHydrationEnabledVal = isI18nHydrationEnabled(injector);\n const isIncrementalHydrationEnabledVal = isIncrementalHydrationEnabled(injector);\n const serializedViewCollection = new SerializedViewCollection();\n const corruptedTextNodes = new Map();\n const viewRefs = appRef._views;\n const shouldReplayEvents = injector.get(IS_EVENT_REPLAY_ENABLED, EVENT_REPLAY_ENABLED_DEFAULT);\n const eventTypesToReplay = {\n regular: new Set(),\n capture: new Set()\n };\n const deferBlocks = new Map();\n const appId = appRef.injector.get(APP_ID);\n for (const viewRef of viewRefs) {\n const lNode = getLNodeForHydration(viewRef);\n if (lNode !== null) {\n const context = {\n serializedViewCollection,\n corruptedTextNodes,\n isI18nHydrationEnabled: isI18nHydrationEnabledVal,\n isIncrementalHydrationEnabled: isIncrementalHydrationEnabledVal,\n i18nChildren: new Map(),\n eventTypesToReplay,\n shouldReplayEvents,\n appId,\n deferBlocks\n };\n if (isLContainer(lNode)) {\n annotateLContainerForHydration(lNode, context);\n } else {\n annotateComponentLViewForHydration(lNode, context);\n }\n insertCorruptedTextNodeMarkers(corruptedTextNodes, doc);\n }\n }\n const serializedViews = serializedViewCollection.getAll();\n const transferState = injector.get(TransferState);\n transferState.set(NGH_DATA_KEY, serializedViews);\n if (deferBlocks.size > 0) {\n const blocks = {};\n for (const [id, info] of deferBlocks.entries()) {\n blocks[id] = info;\n }\n transferState.set(NGH_DEFER_BLOCKS_KEY, blocks);\n }\n return eventTypesToReplay;\n}\nfunction serializeLContainer(lContainer, tNode, lView, parentDeferBlockId, context) {\n const views = [];\n let lastViewAsString = '';\n for (let i = CONTAINER_HEADER_OFFSET; i < lContainer.length; i++) {\n let childLView = lContainer[i];\n let template;\n let numRootNodes;\n let serializedView;\n if (isRootView(childLView)) {\n childLView = childLView[HEADER_OFFSET];\n if (isLContainer(childLView)) {\n numRootNodes = calcNumRootNodesInLContainer(childLView) + 1;\n annotateLContainerForHydration(childLView, context);\n const componentLView = unwrapLView(childLView[HOST]);\n serializedView = {\n [TEMPLATE_ID]: componentLView[TVIEW].ssrId,\n [NUM_ROOT_NODES]: numRootNodes\n };\n }\n }\n if (!serializedView) {\n const childTView = childLView[TVIEW];\n if (childTView.type === 1) {\n template = childTView.ssrId;\n numRootNodes = 1;\n } else {\n template = getSsrId(childTView);\n numRootNodes = calcNumRootNodes(childTView, childLView, childTView.firstChild);\n }\n serializedView = {\n [TEMPLATE_ID]: template,\n [NUM_ROOT_NODES]: numRootNodes\n };\n let isHydrateNeverBlock = false;\n if (isDeferBlock(lView[TVIEW], tNode)) {\n const lDetails = getLDeferBlockDetails(lView, tNode);\n const tDetails = getTDeferBlockDetails(lView[TVIEW], tNode);\n if (context.isIncrementalHydrationEnabled && tDetails.hydrateTriggers !== null) {\n const deferBlockId = `d${context.deferBlocks.size}`;\n if (tDetails.hydrateTriggers.has(7)) {\n isHydrateNeverBlock = true;\n }\n let rootNodes = [];\n collectNativeNodesInLContainer(lContainer, rootNodes);\n const deferBlockInfo = {\n [NUM_ROOT_NODES]: rootNodes.length,\n [DEFER_BLOCK_STATE]: lDetails[DEFER_BLOCK_STATE$1]\n };\n const serializedTriggers = serializeHydrateTriggers(tDetails.hydrateTriggers);\n if (serializedTriggers.length > 0) {\n deferBlockInfo[DEFER_HYDRATE_TRIGGERS] = serializedTriggers;\n }\n if (parentDeferBlockId !== null) {\n deferBlockInfo[DEFER_PARENT_BLOCK_ID] = parentDeferBlockId;\n }\n context.deferBlocks.set(deferBlockId, deferBlockInfo);\n const node = unwrapRNode(lContainer);\n if (node !== undefined) {\n if (node.nodeType === Node.COMMENT_NODE) {\n annotateDeferBlockAnchorForHydration(node, deferBlockId);\n }\n } else {\n ngDevMode && validateNodeExists(node, childLView, tNode);\n ngDevMode && validateMatchingNode(node, Node.COMMENT_NODE, null, childLView, tNode, true);\n annotateDeferBlockAnchorForHydration(node, deferBlockId);\n }\n if (!isHydrateNeverBlock) {\n annotateDeferBlockRootNodesWithJsAction(tDetails, rootNodes, deferBlockId, context);\n }\n parentDeferBlockId = deferBlockId;\n serializedView[DEFER_BLOCK_ID] = deferBlockId;\n }\n serializedView[DEFER_BLOCK_STATE] = lDetails[DEFER_BLOCK_STATE$1];\n }\n if (!isHydrateNeverBlock) {\n Object.assign(serializedView, serializeLView(lContainer[i], parentDeferBlockId, context));\n }\n }\n const currentViewAsString = JSON.stringify(serializedView);\n if (views.length > 0 && currentViewAsString === lastViewAsString) {\n const previousView = views[views.length - 1];\n previousView[MULTIPLIER] ??= 1;\n previousView[MULTIPLIER]++;\n } else {\n lastViewAsString = currentViewAsString;\n views.push(serializedView);\n }\n }\n return views;\n}\nfunction serializeHydrateTriggers(triggerMap) {\n const serializableDeferBlockTrigger = new Set([0, 1, 2, 5]);\n let triggers = [];\n for (let [trigger, details] of triggerMap) {\n if (serializableDeferBlockTrigger.has(trigger)) {\n if (details === null) {\n triggers.push(trigger);\n } else if (details.type === 5) {\n triggers.push({\n trigger,\n delay: details.delay\n });\n } else {\n triggers.push({\n trigger,\n intersectionObserverOptions: details.intersectionObserverOptions\n });\n }\n }\n }\n return triggers;\n}\nfunction appendSerializedNodePath(ngh, tNode, lView, excludedParentNodes) {\n const noOffsetIndex = tNode.index - HEADER_OFFSET;\n ngh[NODES] ??= {};\n ngh[NODES][noOffsetIndex] ??= calcPathForNode(tNode, lView, excludedParentNodes);\n}\nfunction appendDisconnectedNodeIndex(ngh, tNodeOrNoOffsetIndex) {\n const noOffsetIndex = typeof tNodeOrNoOffsetIndex === 'number' ? tNodeOrNoOffsetIndex : tNodeOrNoOffsetIndex.index - HEADER_OFFSET;\n ngh[DISCONNECTED_NODES] ??= [];\n if (!ngh[DISCONNECTED_NODES].includes(noOffsetIndex)) {\n ngh[DISCONNECTED_NODES].push(noOffsetIndex);\n }\n}\nfunction serializeLView(lView, parentDeferBlockId = null, context) {\n const ngh = {};\n const tView = lView[TVIEW];\n const i18nChildren = getOrComputeI18nChildren(tView, context);\n const nativeElementsToEventTypes = context.shouldReplayEvents ? collectDomEventsInfo(tView, lView, context.eventTypesToReplay) : null;\n for (let i = HEADER_OFFSET; i < tView.bindingStartIndex; i++) {\n const tNode = tView.data[i];\n const noOffsetIndex = i - HEADER_OFFSET;\n const i18nData = trySerializeI18nBlock(lView, i, context);\n if (i18nData) {\n ngh[I18N_DATA] ??= {};\n ngh[I18N_DATA][noOffsetIndex] = i18nData.caseQueue;\n for (const nodeNoOffsetIndex of i18nData.disconnectedNodes) {\n appendDisconnectedNodeIndex(ngh, nodeNoOffsetIndex);\n }\n for (const nodeNoOffsetIndex of i18nData.disjointNodes) {\n const tNode = tView.data[nodeNoOffsetIndex + HEADER_OFFSET];\n ngDevMode && assertTNode(tNode);\n appendSerializedNodePath(ngh, tNode, lView, i18nChildren);\n }\n continue;\n }\n if (!isTNodeShape(tNode)) {\n continue;\n }\n if (isDetachedByI18n(tNode)) {\n continue;\n }\n if (isLContainer(lView[i]) && tNode.tView) {\n ngh[TEMPLATES] ??= {};\n ngh[TEMPLATES][noOffsetIndex] = getSsrId(tNode.tView);\n }\n if (isDisconnectedNode(tNode, lView) && isContentProjectedNode(tNode)) {\n appendDisconnectedNodeIndex(ngh, tNode);\n continue;\n }\n if (Array.isArray(tNode.projection)) {\n for (const projectionHeadTNode of tNode.projection) {\n if (!projectionHeadTNode) continue;\n if (!Array.isArray(projectionHeadTNode)) {\n if (!isProjectionTNode(projectionHeadTNode) && !isInSkipHydrationBlock(projectionHeadTNode)) {\n if (isDisconnectedNode(projectionHeadTNode, lView)) {\n appendDisconnectedNodeIndex(ngh, projectionHeadTNode);\n } else {\n appendSerializedNodePath(ngh, projectionHeadTNode, lView, i18nChildren);\n }\n }\n } else {\n throw unsupportedProjectionOfDomNodes(unwrapRNode(lView[i]));\n }\n }\n }\n conditionallyAnnotateNodePath(ngh, tNode, lView, i18nChildren);\n if (isLContainer(lView[i])) {\n const hostNode = lView[i][HOST];\n if (Array.isArray(hostNode)) {\n const targetNode = unwrapRNode(hostNode);\n if (!targetNode.hasAttribute(SKIP_HYDRATION_ATTR_NAME)) {\n annotateHostElementForHydration(targetNode, hostNode, parentDeferBlockId, context);\n }\n }\n ngh[CONTAINERS] ??= {};\n ngh[CONTAINERS][noOffsetIndex] = serializeLContainer(lView[i], tNode, lView, parentDeferBlockId, context);\n } else if (Array.isArray(lView[i]) && !isLetDeclaration(tNode)) {\n const targetNode = unwrapRNode(lView[i][HOST]);\n if (!targetNode.hasAttribute(SKIP_HYDRATION_ATTR_NAME)) {\n annotateHostElementForHydration(targetNode, lView[i], parentDeferBlockId, context);\n }\n } else {\n if (tNode.type & 8) {\n ngh[ELEMENT_CONTAINERS] ??= {};\n ngh[ELEMENT_CONTAINERS][noOffsetIndex] = calcNumRootNodes(tView, lView, tNode.child);\n } else if (tNode.type & (16 | 128)) {\n let nextTNode = tNode.next;\n while (nextTNode !== null && nextTNode.type & (16 | 128)) {\n nextTNode = nextTNode.next;\n }\n if (nextTNode && !isInSkipHydrationBlock(nextTNode)) {\n appendSerializedNodePath(ngh, nextTNode, lView, i18nChildren);\n }\n } else if (tNode.type & 1) {\n const rNode = unwrapRNode(lView[i]);\n processTextNodeBeforeSerialization(context, rNode);\n }\n }\n if (nativeElementsToEventTypes && tNode.type & 2) {\n const nativeElement = unwrapRNode(lView[i]);\n if (nativeElementsToEventTypes.has(nativeElement)) {\n setJSActionAttributes(nativeElement, nativeElementsToEventTypes.get(nativeElement), parentDeferBlockId);\n }\n }\n }\n return ngh;\n}\nfunction conditionallyAnnotateNodePath(ngh, tNode, lView, excludedParentNodes) {\n if (isProjectionTNode(tNode)) {\n return;\n }\n if (tNode.projectionNext && tNode.projectionNext !== tNode.next && !isInSkipHydrationBlock(tNode.projectionNext)) {\n appendSerializedNodePath(ngh, tNode.projectionNext, lView, excludedParentNodes);\n }\n if (tNode.prev === null && tNode.parent !== null && isDisconnectedNode(tNode.parent, lView) && !isDisconnectedNode(tNode, lView)) {\n appendSerializedNodePath(ngh, tNode, lView, excludedParentNodes);\n }\n}\nfunction componentUsesShadowDomEncapsulation(lView) {\n const instance = lView[CONTEXT];\n if (!instance?.constructor) return false;\n const def = getComponentDef(instance.constructor);\n return def?.encapsulation === ViewEncapsulation$1.ShadowDom || def?.encapsulation === ViewEncapsulation$1.ExperimentalIsolatedShadowDom;\n}\nfunction annotateHostElementForHydration(element, lView, parentDeferBlockId, context) {\n const renderer = lView[RENDERER];\n if (hasI18n(lView) && !isI18nHydrationSupportEnabled() || componentUsesShadowDomEncapsulation(lView)) {\n renderer.setAttribute(element, SKIP_HYDRATION_ATTR_NAME, '');\n return null;\n } else {\n const ngh = serializeLView(lView, parentDeferBlockId, context);\n const index = context.serializedViewCollection.add(ngh);\n renderer.setAttribute(element, NGH_ATTR_NAME, index.toString());\n return index;\n }\n}\nfunction annotateDeferBlockAnchorForHydration(comment, deferBlockId) {\n comment.textContent = `ngh=${deferBlockId}`;\n}\nfunction insertCorruptedTextNodeMarkers(corruptedTextNodes, doc) {\n for (const [textNode, marker] of corruptedTextNodes) {\n textNode.after(doc.createComment(marker));\n }\n}\nfunction isContentProjectedNode(tNode) {\n let currentTNode = tNode;\n while (currentTNode != null) {\n if (isComponentHost(currentTNode)) {\n return true;\n }\n currentTNode = currentTNode.parent;\n }\n return false;\n}\nfunction annotateDeferBlockRootNodesWithJsAction(tDetails, rootNodes, parentDeferBlockId, context) {\n const actionList = convertHydrateTriggersToJsAction(tDetails.hydrateTriggers);\n for (let et of actionList) {\n context.eventTypesToReplay.regular.add(et);\n }\n if (actionList.length > 0) {\n const elementNodes = rootNodes.filter(rn => rn.nodeType === Node.ELEMENT_NODE);\n for (let rNode of elementNodes) {\n setJSActionAttributes(rNode, actionList, parentDeferBlockId);\n }\n }\n}\nfunction booleanAttribute(value) {\n return typeof value === 'boolean' ? value : value != null && value !== 'false';\n}\nfunction numberAttribute(value, fallbackValue = NaN) {\n const isNumberValue = !isNaN(parseFloat(value)) && !isNaN(Number(value));\n return isNumberValue ? Number(value) : fallbackValue;\n}\nconst PERFORMANCE_MARK_PREFIX = '🅰️';\nlet enablePerfLogging = false;\nfunction startMeasuring(label) {\n if (!enablePerfLogging) {\n return;\n }\n const {\n startLabel\n } = labels(label);\n performance.mark(startLabel);\n}\nfunction stopMeasuring(label) {\n if (!enablePerfLogging) {\n return;\n }\n const {\n startLabel,\n labelName,\n endLabel\n } = labels(label);\n performance.mark(endLabel);\n performance.measure(labelName, startLabel, endLabel);\n performance.clearMarks(startLabel);\n performance.clearMarks(endLabel);\n}\nfunction labels(label) {\n const labelName = `${PERFORMANCE_MARK_PREFIX}:${label}`;\n return {\n labelName,\n startLabel: `start:${labelName}`,\n endLabel: `end:${labelName}`\n };\n}\nlet warningLogged = false;\nfunction enableProfiling() {\n if (!warningLogged && (typeof performance === 'undefined' || !performance.mark || !performance.measure)) {\n warningLogged = true;\n console.warn('Performance API is not supported on this platform');\n return;\n }\n enablePerfLogging = true;\n}\nfunction disableProfiling() {\n enablePerfLogging = false;\n}\nfunction ɵassertType(value) {}\nfunction ɵɵngDeclareDirective(decl) {\n const compiler = getCompilerFacade({\n usage: 1,\n kind: 'directive',\n type: decl.type\n });\n return compiler.compileDirectiveDeclaration(angularCoreEnv, `ng:///${decl.type.name}/ɵfac.js`, decl);\n}\nfunction ɵɵngDeclareClassMetadata(decl) {\n setClassMetadata(decl.type, decl.decorators, decl.ctorParameters ?? null, decl.propDecorators ?? null);\n}\nfunction ɵɵngDeclareClassMetadataAsync(decl) {\n setClassMetadataAsync(decl.type, decl.resolveDeferredDeps, (...types) => {\n const meta = decl.resolveMetadata(...types);\n setClassMetadata(decl.type, meta.decorators, meta.ctorParameters, meta.propDecorators);\n });\n}\nfunction ɵɵngDeclareComponent(decl) {\n const compiler = getCompilerFacade({\n usage: 1,\n kind: 'component',\n type: decl.type\n });\n return compiler.compileComponentDeclaration(angularCoreEnv, `ng:///${decl.type.name}/ɵcmp.js`, decl);\n}\nfunction ɵɵngDeclareFactory(decl) {\n const compiler = getCompilerFacade({\n usage: 1,\n kind: getFactoryKind(decl.target),\n type: decl.type\n });\n return compiler.compileFactoryDeclaration(angularCoreEnv, `ng:///${decl.type.name}/ɵfac.js`, decl);\n}\nfunction getFactoryKind(target) {\n switch (target) {\n case FactoryTarget.Directive:\n return 'directive';\n case FactoryTarget.Component:\n return 'component';\n case FactoryTarget.Injectable:\n return 'injectable';\n case FactoryTarget.Pipe:\n return 'pipe';\n case FactoryTarget.NgModule:\n return 'NgModule';\n }\n}\nfunction ɵɵngDeclareInjectable(decl) {\n const compiler = getCompilerFacade({\n usage: 1,\n kind: 'injectable',\n type: decl.type\n });\n return compiler.compileInjectableDeclaration(angularCoreEnv, `ng:///${decl.type.name}/ɵprov.js`, decl);\n}\nfunction ɵɵngDeclareInjector(decl) {\n const compiler = getCompilerFacade({\n usage: 1,\n kind: 'NgModule',\n type: decl.type\n });\n return compiler.compileInjectorDeclaration(angularCoreEnv, `ng:///${decl.type.name}/ɵinj.js`, decl);\n}\nfunction ɵɵngDeclareNgModule(decl) {\n const compiler = getCompilerFacade({\n usage: 1,\n kind: 'NgModule',\n type: decl.type\n });\n return compiler.compileNgModuleDeclaration(angularCoreEnv, `ng:///${decl.type.name}/ɵmod.js`, decl);\n}\nfunction ɵɵngDeclarePipe(decl) {\n const compiler = getCompilerFacade({\n usage: 1,\n kind: 'pipe',\n type: decl.type\n });\n return compiler.compilePipeDeclaration(angularCoreEnv, `ng:///${decl.type.name}/ɵpipe.js`, decl);\n}\nconst NOT_SET = /* @__PURE__ */Symbol('NOT_SET');\nconst EMPTY_CLEANUP_SET = /* @__PURE__ */new Set();\nconst AFTER_RENDER_PHASE_EFFECT_NODE = /* @__PURE__ */(() => ({\n ...SIGNAL_NODE,\n kind: 'afterRenderEffectPhase',\n consumerIsAlwaysLive: true,\n consumerAllowSignalWrites: true,\n value: NOT_SET,\n cleanup: null,\n consumerMarkedDirty() {\n if (this.sequence.impl.executing) {\n if (this.sequence.lastPhase === null || this.sequence.lastPhase < this.phase) {\n return;\n }\n this.sequence.erroredOrDestroyed = true;\n }\n this.sequence.scheduler.notify(7);\n },\n phaseFn(previousValue) {\n this.sequence.lastPhase = this.phase;\n if (!this.dirty) {\n return this.signal;\n }\n this.dirty = false;\n if (this.value !== NOT_SET && !consumerPollProducersForChange(this)) {\n return this.signal;\n }\n try {\n for (const cleanupFn of this.cleanup ?? EMPTY_CLEANUP_SET) {\n cleanupFn();\n }\n } finally {\n this.cleanup?.clear();\n }\n const args = [];\n if (previousValue !== undefined) {\n args.push(previousValue);\n }\n args.push(this.registerCleanupFn);\n const prevConsumer = consumerBeforeComputation(this);\n let newValue;\n try {\n newValue = this.userFn.apply(null, args);\n } finally {\n consumerAfterComputation(this, prevConsumer);\n }\n if (this.value === NOT_SET || !this.equal(this.value, newValue)) {\n this.value = newValue;\n this.version++;\n }\n return this.signal;\n }\n}))();\nclass AfterRenderEffectSequence extends AfterRenderSequence {\n scheduler;\n lastPhase = null;\n nodes = [undefined, undefined, undefined, undefined];\n onDestroyFns = null;\n constructor(impl, effectHooks, view, scheduler, injector, snapshot = null) {\n super(impl, [undefined, undefined, undefined, undefined], view, false, injector.get(DestroyRef), snapshot);\n this.scheduler = scheduler;\n for (const phase of AFTER_RENDER_PHASES) {\n const effectHook = effectHooks[phase];\n if (effectHook === undefined) {\n continue;\n }\n const node = Object.create(AFTER_RENDER_PHASE_EFFECT_NODE);\n node.sequence = this;\n node.phase = phase;\n node.userFn = effectHook;\n node.dirty = true;\n node.signal = () => {\n producerAccessed(node);\n return node.value;\n };\n node.signal[SIGNAL] = node;\n node.registerCleanupFn = fn => (node.cleanup ??= new Set()).add(fn);\n this.nodes[phase] = node;\n this.hooks[phase] = value => node.phaseFn(value);\n if (ngDevMode) {\n setupDebugInfo(node, injector);\n }\n }\n }\n afterRun() {\n super.afterRun();\n this.lastPhase = null;\n }\n destroy() {\n if (this.onDestroyFns !== null) {\n for (const fn of this.onDestroyFns) {\n fn();\n }\n }\n super.destroy();\n for (const node of this.nodes) {\n if (node) {\n try {\n for (const fn of node.cleanup ?? EMPTY_CLEANUP_SET) {\n fn();\n }\n } finally {\n consumerDestroy(node);\n }\n }\n }\n }\n}\nfunction afterRenderEffect(callbackOrSpec, options) {\n ngDevMode && assertNotInReactiveContext(afterRenderEffect, 'Call `afterRenderEffect` outside of a reactive context. For example, create the render ' + 'effect inside the component constructor`.');\n if (ngDevMode && !options?.injector) {\n assertInInjectionContext(afterRenderEffect);\n }\n if (typeof ngServerMode !== 'undefined' && ngServerMode) {\n return NOOP_AFTER_RENDER_REF;\n }\n const injector = options?.injector ?? inject(Injector);\n const scheduler = injector.get(ChangeDetectionScheduler);\n const manager = injector.get(AfterRenderManager);\n const tracing = injector.get(TracingService, null, {\n optional: true\n });\n manager.impl ??= injector.get(AfterRenderImpl);\n let spec = callbackOrSpec;\n if (typeof spec === 'function') {\n spec = {\n mixedReadWrite: callbackOrSpec\n };\n }\n const viewContext = injector.get(ViewContext, null, {\n optional: true\n });\n const sequence = new AfterRenderEffectSequence(manager.impl, [spec.earlyRead, spec.write, spec.mixedReadWrite, spec.read], viewContext?.view, scheduler, injector, tracing?.snapshot(null));\n manager.impl.register(sequence);\n return sequence;\n}\nfunction setupDebugInfo(node, injector) {\n node.debugName = `afterRenderEffect - ${phaseDebugName(node.phase)} phase`;\n const prevInjectorProfilerContext = setInjectorProfilerContext({\n injector,\n token: null\n });\n try {\n emitAfterRenderEffectPhaseCreatedEvent(node);\n } finally {\n setInjectorProfilerContext(prevInjectorProfilerContext);\n }\n}\nfunction phaseDebugName(phase) {\n switch (phase) {\n case 0:\n return 'EarlyRead';\n case 1:\n return 'Write';\n case 2:\n return 'MixedReadWrite';\n case 3:\n return 'Read';\n }\n}\nfunction resourceFromSnapshots(source) {\n return new SnapshotResource(isSignal(source) ? source : computed(source));\n}\nclass SnapshotResource {\n snapshot;\n constructor(snapshot) {\n this.snapshot = snapshot;\n }\n get state() {\n return this.snapshot();\n }\n value = /*#__PURE__*/computed(() => {\n if (this.state.status === 'error') {\n throw new ResourceValueError(this.state.error);\n }\n return this.state.value;\n });\n status = /*#__PURE__*/computed(() => this.state.status);\n error = /*#__PURE__*/computed(() => this.state.status === 'error' ? this.state.error : undefined);\n isLoading = /*#__PURE__*/computed(() => this.state.status === 'loading' || this.state.status === 'reloading');\n isValueDefined = /*#__PURE__*/computed(() => this.state.status !== 'error' && this.state.value !== undefined);\n hasValue() {\n return this.isValueDefined();\n }\n}\nfunction createComponent(component, options) {\n ngDevMode && assertComponentDef(component);\n const componentDef = getComponentDef(component);\n const elementInjector = options.elementInjector || getNullInjector();\n const factory = new ComponentFactory(componentDef);\n return factory.create(elementInjector, options.projectableNodes, options.hostElement, options.environmentInjector, options.directives, options.bindings);\n}\nfunction reflectComponentType(component) {\n const componentDef = getComponentDef(component);\n if (!componentDef) return null;\n const factory = new ComponentFactory(componentDef);\n return {\n get selector() {\n return factory.selector;\n },\n get type() {\n return factory.componentType;\n },\n get inputs() {\n return factory.inputs;\n },\n get outputs() {\n return factory.outputs;\n },\n get ngContentSelectors() {\n return factory.ngContentSelectors;\n },\n get isStandalone() {\n return componentDef.standalone;\n },\n get isSignal() {\n return componentDef.signals;\n }\n };\n}\nfunction mergeApplicationConfig(...configs) {\n return configs.reduce((prev, curr) => {\n return Object.assign(prev, curr, {\n providers: [...prev.providers, ...curr.providers]\n });\n }, {\n providers: []\n });\n}\nconst REQUEST = /*#__PURE__*/new InjectionToken(typeof ngDevMode === 'undefined' || ngDevMode ? 'REQUEST' : '', {\n providedIn: 'platform',\n factory: () => null\n});\nconst RESPONSE_INIT = /*#__PURE__*/new InjectionToken(typeof ngDevMode === 'undefined' || ngDevMode ? 'RESPONSE_INIT' : '', {\n providedIn: 'platform',\n factory: () => null\n});\nconst REQUEST_CONTEXT = /*#__PURE__*/new InjectionToken(typeof ngDevMode === 'undefined' || ngDevMode ? 'REQUEST_CONTEXT' : '', {\n providedIn: 'platform',\n factory: () => null\n});\nexport { APP_BOOTSTRAP_LISTENER, APP_ID, ApplicationInitStatus, ApplicationModule, ApplicationRef, COMPILER_OPTIONS, ChangeDetectorRef, ContentChild, ContentChildren, DOCUMENT, DefaultIterableDiffer, DestroyRef, ENVIRONMENT_INITIALIZER, EmbeddedViewRef, ErrorHandler, HOST_TAG_NAME, HostAttributeToken, Injectable, InjectionToken, Injector, IterableDiffers, KeyValueDiffers, LOCALE_ID, NgModule, NgZone, OutputEmitterRef, PLATFORM_INITIALIZER, PlatformRef, Query, REQUEST, REQUEST_CONTEXT, RESPONSE_INIT, TransferState, ViewChild, ViewChildren, ViewEncapsulation$1 as ViewEncapsulation, ViewRef, afterRenderEffect, assertInInjectionContext, assertNotInReactiveContext, assertPlatform, booleanAttribute, computed, contentChild, contentChildren, createComponent, createPlatform, createPlatformFactory, destroyPlatform, enableProdMode, getModuleFactory, getNgModuleById, getPlatform, inject, input, isDevMode, isSignal, makeEnvironmentProviders, mergeApplicationConfig, model, numberAttribute, output, platformCore, provideAppInitializer, provideCheckNoChangesConfig, provideEnvironmentInitializer, providePlatformInitializer, provideStabilityDebugging, provideZoneChangeDetection, reflectComponentType, resourceFromSnapshots, runInInjectionContext, viewChild, viewChildren, AfterRenderManager as ɵAfterRenderManager, CLIENT_RENDER_MODE_FLAG as ɵCLIENT_RENDER_MODE_FLAG, CONTAINER_HEADER_OFFSET as ɵCONTAINER_HEADER_OFFSET, ChangeDetectionScheduler as ɵChangeDetectionScheduler, Console as ɵConsole, DEFAULT_LOCALE_ID as ɵDEFAULT_LOCALE_ID, DEHYDRATED_BLOCK_REGISTRY as ɵDEHYDRATED_BLOCK_REGISTRY, ENABLE_ROOT_COMPONENT_BOOTSTRAP as ɵENABLE_ROOT_COMPONENT_BOOTSTRAP, EVENT_REPLAY_QUEUE as ɵEVENT_REPLAY_QUEUE, Framework as ɵFramework, IMAGE_CONFIG as ɵIMAGE_CONFIG, INJECTOR_SCOPE as ɵINJECTOR_SCOPE, ɵINPUT_SIGNAL_BRAND_WRITE_TYPE, INTERNAL_APPLICATION_ERROR_HANDLER as ɵINTERNAL_APPLICATION_ERROR_HANDLER, IS_HYDRATION_DOM_REUSE_ENABLED as ɵIS_HYDRATION_DOM_REUSE_ENABLED, IS_INCREMENTAL_HYDRATION_ENABLED as ɵIS_INCREMENTAL_HYDRATION_ENABLED, JSACTION_BLOCK_ELEMENT_MAP as ɵJSACTION_BLOCK_ELEMENT_MAP, JSACTION_EVENT_CONTRACT as ɵJSACTION_EVENT_CONTRACT, NgModuleFactory as ɵNgModuleFactory, PERFORMANCE_MARK_PREFIX as ɵPERFORMANCE_MARK_PREFIX, PROVIDED_NG_ZONE as ɵPROVIDED_NG_ZONE, PROVIDED_ZONELESS as ɵPROVIDED_ZONELESS, PendingTasksInternal as ɵPendingTasksInternal, ProfilerEvent as ɵProfilerEvent, ComponentFactory as ɵRender3ComponentFactory, RuntimeError as ɵRuntimeError, SIGNAL as ɵSIGNAL, TracingService as ɵTracingService, ViewRef$1 as ɵViewRef, ZONELESS_ENABLED as ɵZONELESS_ENABLED, annotateForHydration as ɵannotateForHydration, ɵassertType, compileNgModuleFactory as ɵcompileNgModuleFactory, createOrReusePlatformInjector as ɵcreateOrReusePlatformInjector, defaultIterableDiffers as ɵdefaultIterableDiffers, defaultKeyValueDiffers as ɵdefaultKeyValueDiffers, disableProfiling as ɵdisableProfiling, enableProfiling as ɵenableProfiling, formatRuntimeError as ɵformatRuntimeError, getComponentDef as ɵgetComponentDef, getDocument as ɵgetDocument, _global as ɵglobal, injectChangeDetectorRef as ɵinjectChangeDetectorRef, internalCreateApplication as ɵinternalCreateApplication, internalProvideZoneChangeDetection as ɵinternalProvideZoneChangeDetection, isPromise as ɵisPromise, performanceMarkFeature as ɵperformanceMarkFeature, provideZonelessChangeDetectionInternal as ɵprovideZonelessChangeDetectionInternal, resolveComponentResources as ɵresolveComponentResources, setClassMetadata as ɵsetClassMetadata, setClassMetadataAsync as ɵsetClassMetadataAsync, setInjectorProfilerContext as ɵsetInjectorProfilerContext, setLocaleId as ɵsetLocaleId, startMeasuring as ɵstartMeasuring, stopMeasuring as ɵstopMeasuring, stringify as ɵstringify, withDomHydration as ɵwithDomHydration, withEventReplay as ɵwithEventReplay, withI18nSupport as ɵwithI18nSupport, withIncrementalHydration as ɵwithIncrementalHydration, FactoryTarget as ɵɵFactoryTarget, __defineInjectable as ɵɵdefineInjectable, __defineInjector as ɵɵdefineInjector, __defineNgModule as ɵɵdefineNgModule, __inject as ɵɵinject, __injectAttribute as ɵɵinjectAttribute, ɵɵngDeclareClassMetadata, ɵɵngDeclareClassMetadataAsync, ɵɵngDeclareComponent, ɵɵngDeclareDirective, ɵɵngDeclareFactory, ɵɵngDeclareInjectable, ɵɵngDeclareInjector, ɵɵngDeclareNgModule, ɵɵngDeclarePipe };\n","/**\n * @license Angular v21.2.4\n * (c) 2010-2026 Google LLC. https://angular.dev/\n * License: MIT\n */\n\nimport * as i0 from '@angular/core';\nimport { inject, Injectable, InjectionToken, DOCUMENT } from '@angular/core';\nlet _DOM = null;\nfunction getDOM() {\n return _DOM;\n}\nfunction setRootDomAdapter(adapter) {\n _DOM ??= adapter;\n}\nclass DomAdapter {}\nlet PlatformLocation = /*#__PURE__*/(() => {\n class PlatformLocation {\n historyGo(relativePosition) {\n throw new Error(ngDevMode ? 'Not implemented' : '');\n }\n static ɵfac = function PlatformLocation_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || PlatformLocation)();\n };\n static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: PlatformLocation,\n factory: () => (() => inject(BrowserPlatformLocation))(),\n providedIn: 'platform'\n });\n }\n return PlatformLocation;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst LOCATION_INITIALIZED = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'Location Initialized' : '');\nlet BrowserPlatformLocation = /*#__PURE__*/(() => {\n class BrowserPlatformLocation extends PlatformLocation {\n _location;\n _history;\n _doc = inject(DOCUMENT);\n constructor() {\n super();\n this._location = window.location;\n this._history = window.history;\n }\n getBaseHrefFromDOM() {\n return getDOM().getBaseHref(this._doc);\n }\n onPopState(fn) {\n const window = getDOM().getGlobalEventTarget(this._doc, 'window');\n window.addEventListener('popstate', fn, false);\n return () => window.removeEventListener('popstate', fn);\n }\n onHashChange(fn) {\n const window = getDOM().getGlobalEventTarget(this._doc, 'window');\n window.addEventListener('hashchange', fn, false);\n return () => window.removeEventListener('hashchange', fn);\n }\n get href() {\n return this._location.href;\n }\n get protocol() {\n return this._location.protocol;\n }\n get hostname() {\n return this._location.hostname;\n }\n get port() {\n return this._location.port;\n }\n get pathname() {\n return this._location.pathname;\n }\n get search() {\n return this._location.search;\n }\n get hash() {\n return this._location.hash;\n }\n set pathname(newPath) {\n this._location.pathname = newPath;\n }\n pushState(state, title, url) {\n this._history.pushState(state, title, url);\n }\n replaceState(state, title, url) {\n this._history.replaceState(state, title, url);\n }\n forward() {\n this._history.forward();\n }\n back() {\n this._history.back();\n }\n historyGo(relativePosition = 0) {\n this._history.go(relativePosition);\n }\n getState() {\n return this._history.state;\n }\n static ɵfac = function BrowserPlatformLocation_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || BrowserPlatformLocation)();\n };\n static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: BrowserPlatformLocation,\n factory: () => (() => new BrowserPlatformLocation())(),\n providedIn: 'platform'\n });\n }\n return BrowserPlatformLocation;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nexport { BrowserPlatformLocation, DomAdapter, LOCATION_INITIALIZED, PlatformLocation, getDOM, setRootDomAdapter };\n","/**\n * @license Angular v21.2.4\n * (c) 2010-2026 Google LLC. https://angular.dev/\n * License: MIT\n */\n\nfunction parseCookieValue(cookieStr, name) {\n name = encodeURIComponent(name);\n for (const cookie of cookieStr.split(';')) {\n const eqIndex = cookie.indexOf('=');\n const [cookieName, cookieValue] = eqIndex == -1 ? [cookie, ''] : [cookie.slice(0, eqIndex), cookie.slice(eqIndex + 1)];\n if (cookieName.trim() === name) {\n return decodeURIComponent(cookieValue);\n }\n }\n return null;\n}\nclass XhrFactory {}\nexport { XhrFactory, parseCookieValue };\n"],"mappings":"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","names":["isFunction","value","createErrorClass","createImpl","ctorFunc","instance","UnsubscriptionError","createErrorClass","_super","errors","err","i","arrRemove","arr","item","index","Subscription","_Subscription","initialTeardown","errors","_parentage","parent","initialFinalizer","isFunction","e","UnsubscriptionError","_finalizers","finalizer","execFinalizer","err","teardown","_a","arrRemove","empty","EMPTY_SUBSCRIPTION","isSubscription","value","config","timeoutProvider","handler","timeout","args","delegate","handle","reportUnhandledError","err","timeoutProvider","onUnhandledError","config","noop","COMPLETE_NOTIFICATION","createNotification","errorNotification","error","nextNotification","value","kind","context","errorContext","cb","config","isRoot","errorThrown","error","captureError","err","Subscriber","Subscription","destination","isSubscription","EMPTY_OBSERVER","next","error","complete","SafeSubscriber","value","handleStoppedNotification","nextNotification","err","errorNotification","COMPLETE_NOTIFICATION","_bind","bind","fn","thisArg","ConsumerObserver","partialObserver","handleUnhandledError","observerOrNext","isFunction","context","config","captureError","reportUnhandledError","defaultErrorHandler","notification","subscriber","onStoppedNotification","timeoutProvider","noop","observable","identity","x","pipe","fns","pipeFromArray","identity","input","prev","fn","Observable","subscribe","operator","observable","observerOrNext","error","complete","subscriber","isSubscriber","SafeSubscriber","errorContext","source","sink","err","next","promiseCtor","getPromiseCtor","resolve","reject","value","_a","operations","pipeFromArray","x","config","isObserver","isFunction","Subscriber","isSubscription","ObjectUnsubscribedError","createErrorClass","_super","Subject","Observable","operator","subject","AnonymousSubject","ObjectUnsubscribedError","value","errorContext","observer","err","observers","_a","subscriber","hasError","isStopped","EMPTY_SUBSCRIPTION","Subscription","arrRemove","thrownError","observable","destination","source","_b","BehaviorSubject","Subject","_value","subscriber","subscription","hasError","thrownError","value","isScheduler","value","isFunction","last","arr","popResultSelector","args","isFunction","popScheduler","isScheduler","__awaiter","thisArg","_arguments","P","generator","adopt","value","resolve","reject","fulfilled","step","e","rejected","result","__values","o","s","m","i","__await","v","__asyncGenerator","thisArg","_arguments","generator","g","i","q","verb","awaitReturn","reject","n","f","a","b","resume","step","e","settle","r","fulfill","value","__asyncValues","o","m","i","__values","verb","n","v","resolve","reject","settle","d","isArrayLike","x","isPromise","value","isFunction","isInteropObservable","input","isFunction","observable","isAsyncIterable","obj","isFunction","createInvalidObservableTypeError","input","getSymbolIterator","iterator","isIterable","input","isFunction","iterator","readableStreamLikeToAsyncGenerator","readableStream","__asyncGenerator","reader","value","done","__await","isReadableStreamLike","obj","isFunction","innerFrom","input","Observable","isInteropObservable","fromInteropObservable","isArrayLike","fromArrayLike","isPromise","fromPromise","isAsyncIterable","fromAsyncIterable","isIterable","fromIterable","isReadableStreamLike","fromReadableStreamLike","createInvalidObservableTypeError","obj","subscriber","obs","observable","isFunction","array","i","promise","value","err","reportUnhandledError","iterable","asyncIterable","process","readableStream","readableStreamLikeToAsyncGenerator","asyncIterable_1","asyncIterable_1_1","e_1","_a","__awaiter","__asyncValues","e_1_1","executeSchedule","parentSubscription","scheduler","work","delay","repeat","scheduleSubscription","hasLift","source","isFunction","operate","init","liftedSource","err","createOperatorSubscriber","destination","onNext","onComplete","onError","onFinalize","OperatorSubscriber","Subscriber","shouldUnsubscribe","value","err","_a","closed","observeOn","scheduler","delay","operate","source","subscriber","createOperatorSubscriber","value","executeSchedule","err","subscribeOn","scheduler","delay","operate","source","subscriber","scheduleObservable","input","scheduler","innerFrom","subscribeOn","observeOn","schedulePromise","input","scheduler","innerFrom","subscribeOn","observeOn","scheduleArray","input","scheduler","Observable","subscriber","i","scheduleIterable","input","scheduler","Observable","subscriber","iterator","executeSchedule","value","done","err","isFunction","scheduleAsyncIterable","input","scheduler","Observable","subscriber","executeSchedule","iterator","result","scheduleReadableStreamLike","input","scheduler","scheduleAsyncIterable","readableStreamLikeToAsyncGenerator","scheduled","input","scheduler","isInteropObservable","scheduleObservable","isArrayLike","scheduleArray","isPromise","schedulePromise","isAsyncIterable","scheduleAsyncIterable","isIterable","scheduleIterable","isReadableStreamLike","scheduleReadableStreamLike","createInvalidObservableTypeError","from","input","scheduler","scheduled","innerFrom","of","args","scheduler","popScheduler","from","map","project","thisArg","operate","source","subscriber","index","createOperatorSubscriber","value","mergeInternals","source","subscriber","project","concurrent","onBeforeNext","expand","innerSubScheduler","additionalFinalizer","buffer","active","index","isComplete","checkComplete","outerNext","value","doInnerSub","innerComplete","innerFrom","createOperatorSubscriber","innerValue","bufferedValue","executeSchedule","err","mergeMap","project","resultSelector","concurrent","isFunction","a","i","map","b","ii","innerFrom","operate","source","subscriber","mergeInternals","isArray","callOrApply","fn","args","mapOneOrManyArgs","map","nodeEventEmitterMethods","eventTargetMethods","jqueryMethods","fromEvent","target","eventName","options","resultSelector","isFunction","mapOneOrManyArgs","add","remove","isEventTarget","methodName","handler","isNodeStyleEventEmitter","toCommonHandlerRegistry","isJQueryStyleEventEmitter","isArrayLike","mergeMap","subTarget","innerFrom","Observable","subscriber","args","filter","predicate","thisArg","operate","source","subscriber","index","createOperatorSubscriber","value","catchError","selector","operate","source","subscriber","innerSub","syncUnsub","handledResult","createOperatorSubscriber","err","innerFrom","EMPTY","Observable","subscriber","take","count","EMPTY","operate","source","subscriber","seen","createOperatorSubscriber","value","finalize","callback","operate","source","subscriber","mergeAll","concurrent","mergeMap","identity","concatAll","mergeAll","concat","args","concatAll","from","popScheduler","startWith","values","scheduler","popScheduler","operate","source","subscriber","concat","switchMap","project","resultSelector","operate","source","subscriber","innerSubscriber","index","isComplete","checkComplete","createOperatorSubscriber","value","innerIndex","outerIndex","innerFrom","innerValue","takeUntil","notifier","operate","source","subscriber","innerFrom","createOperatorSubscriber","noop","tap","observerOrNext","error","complete","tapObserver","isFunction","operate","source","subscriber","_a","isUnsub","createOperatorSubscriber","value","err","_b","identity","dateTimestampProvider","ReplaySubject","Subject","_bufferSize","_windowTime","_timestampProvider","dateTimestampProvider","value","isStopped","_buffer","_infiniteTimeWindow","subscriber","subscription","copy","i","adjustedBufferSize","now","last","Action","Subscription","scheduler","work","state","delay","intervalProvider","handler","timeout","args","delegate","handle","AsyncAction","Action","scheduler","work","state","delay","_a","id","_id","intervalProvider","_scheduler","error","_delay","errored","errorValue","e","actions","arrRemove","Scheduler","_Scheduler","schedulerActionCtor","now","work","delay","state","dateTimestampProvider","AsyncScheduler","Scheduler","SchedulerAction","now","action","actions","error","asyncScheduler","AsyncScheduler","AsyncAction","async","throwError","errorOrErrorFactory","scheduler","errorFactory","isFunction","init","subscriber","Observable","isObservable","obj","Observable","isFunction","EmptyError","createErrorClass","_super","isValidDate","value","TimeoutError","createErrorClass","_super","info","timeout","config","schedulerArg","first","each","_with","timeoutErrorFactory","scheduler","asyncScheduler","meta","isValidDate","operate","source","subscriber","originalSourceSubscription","timerSubscription","lastValue","seen","startTimer","delay","executeSchedule","innerFrom","err","createOperatorSubscriber","value","isArray","getPrototypeOf","objectProto","getKeys","argsArgArrayOrObject","args","first","isPOJO","keys","key","obj","createObject","keys","values","result","key","i","combineLatest","args","scheduler","popScheduler","resultSelector","popResultSelector","observables","keys","argsArgArrayOrObject","from","result","Observable","combineLatestInit","values","createObject","identity","mapOneOrManyArgs","valueTransform","subscriber","maybeSchedule","length","active","remainingFirstValues","i","source","hasFirstValue","createOperatorSubscriber","value","execute","subscription","executeSchedule","defer","observableFactory","Observable","subscriber","innerFrom","forkJoin","args","resultSelector","popResultSelector","sources","keys","argsArgArrayOrObject","result","Observable","subscriber","length","values","remainingCompletions","remainingEmissions","sourceIndex","hasValue","innerFrom","createOperatorSubscriber","value","createObject","mapOneOrManyArgs","timer","dueTime","intervalOrScheduler","scheduler","async","intervalDuration","isScheduler","Observable","subscriber","due","isValidDate","n","interval","period","scheduler","asyncScheduler","timer","concatMap","project","resultSelector","isFunction","mergeMap","defaultIfEmpty","defaultValue","operate","source","subscriber","hasValue","createOperatorSubscriber","value","distinctUntilChanged","comparator","keySelector","identity","defaultCompare","operate","source","subscriber","previousKey","first","createOperatorSubscriber","value","currentKey","a","b","throwIfEmpty","errorFactory","defaultErrorFactory","operate","source","subscriber","hasValue","createOperatorSubscriber","value","EmptyError","first","predicate","defaultValue","hasDefaultValue","source","filter","v","identity","take","defaultIfEmpty","throwIfEmpty","EmptyError","takeLast","count","EMPTY","operate","source","subscriber","buffer","createOperatorSubscriber","value","share","options","connector","Subject","resetOnError","resetOnComplete","resetOnRefCountZero","wrapperSource","connection","resetConnection","subject","refCount","hasCompleted","hasErrored","cancelReset","reset","resetAndUnsubscribe","conn","operate","source","subscriber","dest","handleReset","SafeSubscriber","value","err","innerFrom","on","args","onSubscriber","shareReplay","configOrBufferSize","windowTime","scheduler","bufferSize","refCount","share","ReplaySubject","activeConsumer","inNotificationPhase","epoch","postProducerCreatedFn","SIGNAL","setActiveConsumer","consumer","prev","getActiveConsumer","REACTIVE_NODE","producerAccessed","node","inNotificationPhase","activeConsumer","prevProducerLink","nextProducerLink","isRecomputing","prevConsumerLink","isValidLink","isLive","consumerIsLive","newLink","producerAddLiveConsumer","producerIncrementEpoch","epoch","producerUpdateValueVersion","consumerPollProducersForChange","producerMarkClean","producerNotifyConsumers","prev","link","consumer","consumerMarkDirty","producerUpdatesAllowed","consumerBeforeComputation","resetConsumerBeforeComputation","setActiveConsumer","consumerAfterComputation","prevConsumer","finalizeConsumerAfterComputation","producersTail","toRemove","producerRemoveLiveConsumerLink","producer","seenVersion","consumerDestroy","consumersTail","wasLive","nextProducer","nextConsumer","producerLink","runPostProducerCreatedFn","postProducerCreatedFn","isValidLink","checkLink","consumer","producersTail","link","defaultEquals","a","b","createComputed","computation","equal","node","COMPUTED_NODE","computed","producerUpdateValueVersion","producerAccessed","ERRORED","SIGNAL","runPostProducerCreatedFn","UNSET","COMPUTING","__spreadProps","__spreadValues","REACTIVE_NODE","oldValue","prevConsumer","consumerBeforeComputation","newValue","wasEqual","setActiveConsumer","err","consumerAfterComputation","defaultThrowError","throwInvalidWriteToSignalErrorFn","throwInvalidWriteToSignalError","setThrowInvalidWriteToSignalError","fn","postSignalSetFn","createSignal","initialValue","SIGNAL_NODE","getter","signalGetFn","signalSetFn","updateFn","signalUpdateFn","signalGetFn","node","producerAccessed","signalSetFn","newValue","producerUpdatesAllowed","throwInvalidWriteToSignalError","signalValueChanged","signalUpdateFn","updater","SIGNAL_NODE","__spreadProps","__spreadValues","REACTIVE_NODE","defaultEquals","signalValueChanged","node","producerIncrementEpoch","producerNotifyConsumers","postSignalSetFn","BASE_EFFECT_NODE","runEffect","consumerPollProducersForChange","prevNode","consumerBeforeComputation","consumerAfterComputation","_currentInjector","getCurrentInjector","setCurrentInjector","injector","former","NOT_FOUND","isNotFound","NOT_FOUND","createLinkedSignal","sourceFn","computationFn","equalityFn","node","LINKED_SIGNAL_NODE","getter","producerUpdateValueVersion","producerAccessed","ERRORED","SIGNAL","runPostProducerCreatedFn","linkedSignalSetFn","newValue","signalSetFn","producerMarkClean","linkedSignalUpdateFn","updater","signalUpdateFn","__spreadProps","__spreadValues","REACTIVE_NODE","UNSET","defaultEquals","COMPUTING","oldValue","prevConsumer","consumerBeforeComputation","newSourceValue","prev","err","consumerAfterComputation","untracked","nonReactiveReadsFn","setActiveConsumer","XSS_SECURITY_URL","RuntimeError","code","message","formatRuntimeError","formatRuntimeErrorCode","_global","getClosureSafeProperty","objWithPropertyToExtract","key","fillProperties","target","source","stringify","token","name","result","newLineIndex","concatStringsWithSpace","before","after","__forward_ref__","getClosureSafeProperty","forwardRef","forwardRefFn","resolveForwardRef","type","isForwardRef","fn","ɵɵdefineInjectable","opts","ɵɵdefineInjector","options","getInjectableDef","type","getOwnDefinition","NG_PROV_DEF","isInjectable","field","getInheritedInjectableDef","def","getInjectorDef","NG_INJ_DEF","getClosureSafeProperty","InjectionToken","_desc","isEnvironmentProviders","value","NG_COMP_DEF","getClosureSafeProperty","NG_DIR_DEF","NG_PIPE_DEF","NG_MOD_DEF","NG_FACTORY_DEF","NG_ELEMENT_ID","NG_ENV_ID","getNgModuleDef","type","assertTypeDefined","getComponentDef","type","assertTypeDefined","NG_COMP_DEF","getDirectiveDef","type","assertTypeDefined","NG_DIR_DEF","getPipeDef","NG_PIPE_DEF","symbolType","RuntimeError","renderStringify","value","NG_RUNTIME_ERROR_CODE","getClosureSafeProperty","NG_RUNTIME_ERROR_MESSAGE","NG_TOKEN_PATH","cyclicDependencyError","token","path","createRuntimeError","throwProviderNotFoundError","token","injectorName","RuntimeError","createRuntimeError","message","code","path","error","RuntimeError","NG_RUNTIME_ERROR_CODE","NG_RUNTIME_ERROR_MESSAGE","NG_TOKEN_PATH","getRuntimeErrorCode","_injectImplementation","getInjectImplementation","setInjectImplementation","impl","previous","injectRootLimpMode","token","notFoundValue","flags","injectableDef","getInjectableDef","throwProviderNotFoundError","_THROW_IF_NOT_FOUND","THROW_IF_NOT_FOUND","DI_DECORATOR_FLAG","RetrievingInjector","injector","token","options","flags","convertToBitFlags","e","isNotFound","injectInjectorOnly","currentInjector","getCurrentInjector","RuntimeError","injectRootLimpMode","convertToInjectOptions","value","ɵɵinject","getInjectImplementation","resolveForwardRef","inject","token","options","ɵɵinject","convertToBitFlags","flags","convertToInjectOptions","injectArgs","types","args","i","arg","resolveForwardRef","RuntimeError","type","j","meta","flag","getInjectFlag","getInjectFlag","token","DI_DECORATOR_FLAG","getFactoryDef","type","throwNotFound","hasFactoryDef","NG_FACTORY_DEF","arrayEquals","a","b","identityAccessor","i","valueA","valueB","flatten","list","deepForEach","input","fn","value","addToArray","arr","index","removeFromArray","newArray","size","arrayInsert2","array","index","value1","value2","end","previousEnd","keyValueArraySet","keyValueArray","key","value","keyValueArrayIndexOf","keyValueArrayGet","_arrayIndexOfSorted","shift","start","middle","current","EMPTY_OBJ","EMPTY_ARRAY","ENVIRONMENT_INITIALIZER","InjectionToken","INJECTOR$1","INJECTOR_DEF_TYPES","NullInjector","token","notFoundValue","THROW_IF_NOT_FOUND","error","createRuntimeError","makeEnvironmentProviders","providers","provideEnvironmentInitializer","initializerFn","importProvidersFrom","sources","internalImportProvidersFrom","checkForStandaloneCmp","providersOut","dedup","injectorTypesWithProviders","collectProviders","provider","deepForEach","source","internalSource","walkProviderTree","processInjectorTypesWithProviders","typesWithProviders","visitor","i","ngModule","deepForEachProvider","container","parents","resolveForwardRef","defType","injDef","getInjectorDef","cmpDef","getComponentDef","isDuplicate","deps","dep","importTypesWithProviders","imported","factory","getFactoryDef","ɵɵinject","defProviders","injectorType","deepForEachProvider","providers","fn","provider","isEnvironmentProviders","USE_VALUE","getClosureSafeProperty","isValueProvider","value","isExistingProvider","isFactoryProvider","isTypeProvider","isClassProvider","INJECTOR_SCOPE","InjectionToken","NOT_YET","CIRCULAR","NULL_INJECTOR","getNullInjector","NullInjector","EnvironmentInjector","R3Injector","parent","source","scopes","forEachSingleProvider","INJECTOR$1","makeRecord","record","INJECTOR_DEF_TYPES","EMPTY_ARRAY","token","options","flags","convertToBitFlags","THROW_IF_NOT_FOUND","e","isNotFound","assertNotDestroyed","prevConsumer","setActiveConsumer","service","onDestroyHooks","hook","callback","previousInjector","setCurrentInjector","previousInjectImplementation","setInjectImplementation","prevInjectContext","notFoundValue","NG_ENV_ID","def","couldBeInjectableType","getInjectableDef","injectableDefOrInjectorDefFactory","nextInjector","error","errorCode","getRuntimeErrorCode","RuntimeError","initializers","ENVIRONMENT_INITIALIZER","initializer","resolveForwardRef","providerToRecord","multiRecord","injectArgs","cyclicDependencyError","hasOnDestroy","providedIn","destroyCBIdx","injectableDef","factory","getFactoryDef","getUndecoratedInjectableFactory","inheritedInjectableDef","getInheritedInjectableDef","providerToFactory","ngModuleType","unwrappedProvider","_","ɵɵinject","classRef","hasDeps","injector","multi","runInInjectionContext","internalInjector","RetrievingInjector","prevInjectorProfilerContext","prevInjector","isInInjectionContext","getInjectImplementation","getCurrentInjector","HOST","TVIEW","FLAGS","PARENT","NEXT","T_HOST","HYDRATION","CLEANUP","CONTEXT","INJECTOR","ENVIRONMENT","RENDERER","CHILD_HEAD","CHILD_TAIL","DECLARATION_VIEW","DECLARATION_COMPONENT_VIEW","DECLARATION_LCONTAINER","PREORDER_HOOK_FLAGS","QUERIES","ID","EMBEDDED_VIEW_INJECTOR","ON_DESTROY_HOOKS","EFFECTS_TO_SCHEDULE","EFFECTS","REACTIVE_TEMPLATE_CONSUMER","AFTER_RENDER_SEQUENCES_TO_ADD","ANIMATIONS","HEADER_OFFSET","TYPE","DEHYDRATED_VIEWS","NATIVE","VIEW_REFS","MOVED_VIEWS","CONTAINER_HEADER_OFFSET","isLView","value","isLContainer","isContentQueryHost","tNode","isComponentHost","isDirectiveHost","isComponentDef","def","isRootView","target","isDestroyed","lView","FLAGS","SVG_NAMESPACE","MATH_ML_NAMESPACE","unwrapRNode","value","HOST","getNativeByIndex","index","lView","unwrapRNode","getNativeByTNode","tNode","getTNode","tView","index","load","view","store","lView","value","getComponentLViewByIndex","nodeIndex","hostView","slotValue","isLView","HOST","isCreationMode","FLAGS","viewAttachedToChangeDetector","viewAttachedToContainer","isLContainer","PARENT","getConstant","consts","resetPreOrderHookFlags","PREORDER_HOOK_FLAGS","markViewForRefresh","markAncestorsForTraversal","walkUpViews","nestingLevel","currentView","DECLARATION_VIEW","requiresRefreshOrTraversal","REACTIVE_TEMPLATE_CONSUMER","updateAncestorTraversalFlagsOnAttach","ENVIRONMENT","parent","getLViewParent","storeLViewOnDestroy","onDestroyCallback","isDestroyed","RuntimeError","ON_DESTROY_HOOKS","removeLViewOnDestroy","destroyCBIdx","getOrCreateLViewCleanup","CLEANUP","getOrCreateTViewCleanup","storeCleanupWithContext","context","cleanupFn","lCleanup","instructionState","createLFrame","_isRefreshingViews","getElementDepthCount","instructionState","increaseElementDepthCount","decreaseElementDepthCount","getBindingsEnabled","isInSkipHydrationBlock","isSkipHydrationRootTNode","tNode","leaveSkipHydrationBlock","instructionState","getLView","getTView","ɵɵrestoreView","viewToRestore","CONTEXT","ɵɵresetView","value","getCurrentTNode","currentTNode","getCurrentTNodePlaceholderOk","getCurrentParentTNode","lFrame","setCurrentTNode","tNode","isParent","isCurrentTNodeParent","setCurrentTNodeAsNotParent","getContextLView","isRefreshingViews","_isRefreshingViews","setIsRefreshingViews","mode","prev","getBindingRoot","lFrame","instructionState","index","getBindingIndex","setBindingIndex","value","nextBindingIndex","incrementBindingIndex","count","isInI18nBlock","setBindingRootForHostBindings","bindingRootIndex","currentDirectiveIndex","lFrame","instructionState","setCurrentDirectiveIndex","getCurrentDirectiveIndex","getCurrentDirectiveDef","tData","getCurrentQueryIndex","setCurrentQueryIndex","value","getDeclarationTNode","lView","tView","TVIEW","T_HOST","enterDI","tNode","flags","parentTNode","parentLView","DECLARATION_VIEW","allocLFrame","enterView","newView","newLFrame","currentLFrame","childLFrame","createLFrame","parent","leaveViewLight","oldLFrame","leaveDI","leaveView","nextContextImpl","level","walkUpViews","CONTEXT","getSelectedIndex","setSelectedIndex","index","getSelectedTNode","getTNode","ɵɵnamespaceSVG","SVG_NAMESPACE","ɵɵnamespaceHTML","namespaceHTMLInternal","instructionState","getNamespace","_wasLastNodeCreated","wasLastNodeCreated","lastNodeWasCreated","flag","createInjector","defType","parent","additionalProviders","name","injector","createInjectorWithoutInjectorInstances","scopes","providers","EMPTY_ARRAY","importProvidersFrom","source","R3Injector","getNullInjector","Injector","_Injector","THROW_IF_NOT_FOUND","NullInjector","options","ɵɵdefineInjectable","ɵɵinject","INJECTOR$1","DOCUMENT","InjectionToken","DestroyRef","injectDestroyRef","NodeInjectorDestroyRef","_lView","isDestroyed","callback","lView","storeLViewOnDestroy","removeLViewOnDestroy","getLView","SCHEDULE_IN_ROOT_ZONE_DEFAULT","DEBUG_TASK_TRACKER","PendingTasksInternal","BehaviorSubject","inject","Observable","subscriber","taskId","EventEmitter_","Subject","isAsync","isInInjectionContext","value","prevConsumer","setActiveConsumer","observerOrNext","error","complete","nextFn","errorFn","completeFn","observer","sink","Subscription","fn","EventEmitter","noop","args","scheduleCallbackWithRafRace","timeoutId","animationFrameId","cleanup","scheduleCallbackWithMicrotask","isAngularZoneProperty","angularZoneInstanceIdProperty","ngZoneInstanceId","NgZone","_NgZone","EventEmitter","options","enableLongStackTrace","shouldCoalesceEventChangeDetection","shouldCoalesceRunChangeDetection","scheduleInRootZone","SCHEDULE_IN_ROOT_ZONE_DEFAULT","RuntimeError","self","forkInnerZoneWithAngularBehavior","fn","applyThis","applyArgs","name","zone","task","EMPTY_PAYLOAD","noop","checkStable","delayChangeDetectionForEvents","scheduleCheckStable","scheduleCallbackWithRafRace","updateMicroTaskStatus","delayChangeDetectionForEventsDelegate","instanceId","delegate","current","target","shouldBeIgnoredByZone","onEnter","onLeave","callback","source","isSchedulerTick","hasTaskState","error","NoopNgZone","hasApplyArgsData","key","ErrorHandler","INTERNAL_APPLICATION_ERROR_HANDLER","InjectionToken","inject","injector","EnvironmentInjector","userErrorHandler","e","errorHandlerEnvironmentInitializer","ENVIRONMENT_INITIALIZER","handler","globalErrorListeners","window","DOCUMENT","errorHandler","rejectionListener","errorListener","setupEventListeners","DestroyRef","provideBrowserGlobalErrorListeners","makeEnvironmentProviders","provideEnvironmentInitializer","signal","initialValue","options","get","set","update","createSignal","signalFn","node","SIGNAL","signalAsReadonlyFn","readonlyFn","ViewContext","view","node","injectViewContext","getLView","getCurrentTNode","ChangeDetectionScheduler","ZONELESS_ENABLED","InjectionToken","SCHEDULE_IN_ROOT_ZONE","InjectionToken","PendingTasks","inject","PendingTasksInternal","ChangeDetectionScheduler","INTERNAL_APPLICATION_ERROR_HANDLER","taskId","fn","removeTask","ɵɵdefineInjectable","EffectScheduler","ZoneAwareEffectScheduler","handle","zone","queue","ranOneEffect","EffectRefImpl","SIGNAL","node","effect","effectFn","options","injector","Injector","destroyRef","DestroyRef","viewContext","ViewContext","notifier","createViewEffect","NodeInjectorDestroyRef","createRootEffect","EFFECT_NODE","__spreadProps","__spreadValues","BASE_EFFECT_NODE","prevRefreshingViews","setIsRefreshingViews","runEffect","prevConsumer","setActiveConsumer","ROOT_EFFECT_NODE","consumerDestroy","VIEW_EFFECT_NODE","FLAGS","markAncestorsForTraversal","EFFECTS","view","createEffectFn","scheduler","cleanupFn","noSideEffects","fn","isType","v","applyValueToInputField","instance","inputSignalNode","privateName","value","SimpleChange","previousValue","currentValue","firstChange","ɵɵNgOnChangesFeature","ɵɵNgOnChangesFeatureImpl","NgOnChangesFeatureImpl","definition","ngOnChangesSetInput","rememberChangeHistoryAndInvokeOnChangesHook","simpleChangesStore","getSimpleChangesStore","current","previous","EMPTY_OBJ","key","publicName","declaredName","setSimpleChangesStore","previousChange","SIMPLE_CHANGES_STORE","store","profilerCallbacks","profiler","event","instance","eventFn","i","profilerCallbacks","profilerCallback","ProfilerEvent","registerPreOrderHooks","directiveIndex","directiveDef","tView","ngOnChanges","ngOnInit","ngDoCheck","wrappedOnChanges","NgOnChangesFeatureImpl","registerPostOrderHooks","tNode","end","lifecycleHooks","ngAfterContentInit","ngAfterContentChecked","ngAfterViewInit","ngAfterViewChecked","ngOnDestroy","executeCheckHooks","lView","hooks","nodeIndex","callHooks","executeInitAndCheckHooks","initPhase","FLAGS","incrementInitPhaseFlags","flags","currentView","arr","currentNodeIndex","startIndex","PREORDER_HOOK_FLAGS","nodeIndexLimit","max","lastNodeIndexFound","callHook","callHookInternal","directive","hook","prevConsumer","setActiveConsumer","isInitHook","NO_PARENT_INJECTOR","NodeInjectorFactory","factory","isViewProvider","injectImplementation","name","hasClassInput","tNode","hasStyleInput","setUpAttributes","renderer","native","attrs","i","value","namespaceURI","attrName","attrVal","isAnimationProp","isNameOnlyAttributeMarker","marker","name","mergeHostAttrs","dst","src","srcMarker","item","mergeHostAttribute","key1","key2","markerInsertPosition","dstValue","hasParentInjector","parentLocation","NO_PARENT_INJECTOR","getParentInjectorIndex","getParentInjectorViewOffset","getParentInjectorView","location","startView","viewOffset","parentView","DECLARATION_VIEW","includeViewProviders","setIncludeViewProviders","v","oldValue","BLOOM_SIZE","BLOOM_MASK","BLOOM_BUCKET_BITS","nextNgElementId","NOT_FOUND","bloomAdd","injectorIndex","tView","type","id","NG_ELEMENT_ID","bloomHash","mask","getOrCreateNodeInjectorForNode","tNode","lView","existingInjectorIndex","getInjectorIndex","TVIEW","insertBloom","parentLoc","getParentInjectorLocation","parentIndex","parentLView","parentData","arr","footer","declarationViewOffset","parentTNode","lViewCursor","getTNodeFromLView","diPublicInInjector","token","injectAttributeImpl","attrNameToInject","attrsLength","notFoundValueOrThrow","notFoundValue","flags","throwProviderNotFoundError","lookupTokenUsingModuleInjector","moduleInjector","INJECTOR","previousInjectImplementation","setInjectImplementation","injectRootLimpMode","getOrCreateInjectable","FLAGS","embeddedInjectorValue","lookupTokenUsingEmbeddedInjector","lookupTokenUsingNodeInjector","bloomHashBitOrFactory","enterDI","leaveDI","previousTView","hostTElementNode","DECLARATION_COMPONENT_VIEW","T_HOST","shouldSearchParent","bloomHasToken","instance","searchTokensOnInjector","currentTView","canAccessViewProviders","isComponentHost","isHostSpecialCase","injectableIdx","locateDirectiveOrProvider","getNodeInjectable","nodeProviderIndexes","tInjectables","injectablesStart","directivesStart","directiveEnd","cptViewProvidersCount","startingIndex","endIndex","providerTokenOrDef","dirDef","isComponentDef","getNodeInjectable","lView","tView","index","tNode","flags","value","tData","NodeInjectorFactory","factory","cyclicDependencyError","previousIncludeViewProviders","setIncludeViewProviders","token","prevInjectContext","previousInjectImplementation","setInjectImplementation","success","enterDI","registerPreOrderHooks","leaveDI","bloomHashBitOrFactory","tokenId","NG_ELEMENT_ID","BLOOM_MASK","createNodeInjector","bloomHasToken","bloomHash","injectorIndex","injectorView","mask","BLOOM_BUCKET_BITS","shouldSearchParent","isFirstHostTNode","NodeInjector","_tNode","_lView","token","notFoundValue","flags","getOrCreateInjectable","convertToBitFlags","createNodeInjector","getCurrentTNode","getLView","ɵɵgetInheritedFactory","type","noSideEffects","ownConstructor","ownFactory","NG_FACTORY_DEF","getFactoryOf","objectPrototype","parent","factory","t","isForwardRef","resolveForwardRef","getFactoryDef","lookupTokenUsingEmbeddedInjector","tNode","lView","currentTNode","currentLView","FLAGS","isRootView","nodeInjectorValue","lookupTokenUsingNodeInjector","NOT_FOUND","parentTNode","embeddedViewInjector","EMBEDDED_VIEW_INJECTOR","embeddedViewInjectorValue","getTNodeFromLView","DECLARATION_VIEW","tView","TVIEW","tViewType","T_HOST","ɵɵinjectAttribute","attrNameToInject","injectAttributeImpl","injectElementRef","createElementRef","getCurrentTNode","getLView","tNode","lView","ElementRef","getNativeByTNode","nativeElement","unwrapElementRef","value","symbolIterator","QueryList","Subject","_emitDistinctChangesOnly","index","fn","init","resultsTree","identityAccessor","newResultFlat","flatten","arrayEquals","cb","hasInSkipHydrationBlockFlag","tNode","ChangeDetectionStrategy","TRACKED_LVIEWS","uniqueIdCounter","getUniqueLViewId","registerLView","lView","ID","unregisterLView","lView","TRACKED_LVIEWS","ID","MONKEY_PATCH_KEY_NAME","attachPatchData","target","data","isLView","ID","registerLView","getFirstLContainer","lView","getNearestLContainer","CHILD_HEAD","getNextLContainer","container","NEXT","viewOrContainer","isLContainer","DOCUMENT","setDocument","document","APP_ID","InjectionToken","DEFAULT_APP_ID","PLATFORM_INITIALIZER","InjectionToken","PLATFORM_ID","CSP_NONCE","InjectionToken","inject","DOCUMENT","NUM_ROOT_NODES","DEFER_BLOCK_ID","PRESERVE_HOST_CONTENT_DEFAULT","PRESERVE_HOST_CONTENT","InjectionToken","IS_ENABLED_BLOCKING_INITIAL_NAVIGATION","InjectionToken","_stashEventListenerImpl","lView","target","eventName","wrappedListener","stashEventListenerImpl","isDetachedByI18n","tNode","_retrieveHydrationInfoImpl","retrieveHydrationInfo","rNode","injector","isRootView","_retrieveHydrationInfoImpl","refreshContentQueries","tView","lView","contentQueries","prevConsumer","setActiveConsumer","i","queryStartIdx","directiveDefIdx","directiveDef","setCurrentQueryIndex","executeViewQueryFn","flags","viewQueryFn","component","executeContentQueries","tNode","isContentQueryHost","start","end","directiveIndex","def","directiveInstance","ViewEncapsulation","policy","getPolicy","_global","s","trustedScriptURLFromStringBypass","url","getPolicy","SafeValueImpl","changingThisBreaksApplicationSecurity","XSS_SECURITY_URL","unwrapSafeValue","value","SafeValueImpl","allowSanitizationBypassAndThrow","type","actualType","getSanitizationBypassType","XSS_SECURITY_URL","SAFE_URL_PATTERN","_sanitizeUrl","url","createTextNode","renderer","value","updateTextNode","rNode","createElementNode","renderer","name","namespace","nativeInsertBefore","parent","child","beforeNode","isMove","nativeAppendChild","nativeAppendOrInsertBefore","nativeRemoveNode","rNode","isHostElement","requireSynchronousElementRemoval","writeDirectStyle","renderer","element","newValue","writeDirectClass","setupStaticAttributes","tNode","mergedAttrs","classes","styles","setUpAttributes","SecurityContext","ɵɵsanitizeUrl","unsafeUrl","sanitizer","getSanitizer","SecurityContext","allowSanitizationBypassAndThrow","unwrapSafeValue","_sanitizeUrl","renderStringify","ɵɵsanitizeResourceUrl","unsafeResourceUrl","trustedScriptURLFromStringBypass","RuntimeError","SRC_RESOURCE_TAGS","HREF_RESOURCE_TAGS","getUrlSanitizer","tag","prop","ɵɵsanitizeResourceUrl","ɵɵsanitizeUrl","ɵɵsanitizeUrlOrResourceUrl","unsafeUrl","getSanitizer","lView","getLView","ENVIRONMENT","maybeUnwrapFn","value","classIndexOf","className","classToSearch","startingIndex","end","foundIndex","length","NG_TEMPLATE_SELECTOR","isCssClassMatching","tNode","attrs","cssClassToMatch","isProjectionMode","i","isInlineTemplate","item","hasTagAndTypeMatch","currentSelector","tagNameToCompare","isNodeMatchingSelector","selector","mode","nodeAttrs","nameOnlyMarkerIdx","getNameOnlyMarkerIndex","skipToNextSelector","current","isPositive","selectorAttrValue","attrIndexInNode","findAttrIndexInNode","nodeAttrValue","name","bindingsMode","maybeAttrName","value","matchTemplateAttribute","isNodeMatchingSelectorList","getProjectAsAttrValue","ngProjectAsAttrIdx","nodeAttr","isNameOnlyAttributeMarker","attr","isSelectorInSelectorList","list","selectorListLoop","currentSelectorInList","j","maybeWrapInNotSelector","isNegativeMode","chunk","stringifyCSSSelector","result","currentChunk","valueOrMarker","attrValue","stringifyCSSSelectorList","selectorList","extractAttrsAndClassesFromSelector","classes","NO_CHANGE","createTView","type","declTNode","templateFn","decls","vars","directives","pipes","viewQuery","schemas","constsOrFactory","ssrId","bindingStartIndex","HEADER_OFFSET","initialViewLength","blueprint","createViewBlueprint","consts","TVIEW","getOrCreateComponentTView","def","tView","createLView","parentLView","context","flags","host","tHostNode","environment","renderer","injector","embeddedViewInjector","hydrationInfo","lView","HOST","FLAGS","resetPreOrderHookFlags","PARENT","DECLARATION_VIEW","CONTEXT","ENVIRONMENT","RENDERER","INJECTOR","T_HOST","ID","getUniqueLViewId","HYDRATION","EMBEDDED_VIEW_INJECTOR","DECLARATION_COMPONENT_VIEW","createComponentLView","hostTNode","native","getNativeByTNode","rendererFactory","componentView","addToEndOfViewTree","getInitialLViewFlagsFromDef","allocExpando","numSlotsToAlloc","initialValue","allocIdx","lViewOrLContainer","CHILD_HEAD","CHILD_TAIL","NEXT","ɵɵadvance","delta","selectIndexInternal","getTView","getLView","getSelectedIndex","index","checkNoChangesMode","preOrderCheckHooks","executeCheckHooks","preOrderHooks","executeInitAndCheckHooks","setSelectedIndex","InputFlags","writeToDirectiveInput","instance","publicName","prevConsumer","setActiveConsumer","privateName","transform","inputSignalNode","SIGNAL","applyValueToInputField","RendererStyleFlags2","_icuContainerIterate","icuContainerIterate","tIcuContainerNode","areAnimationSupported","leavingNodes","reusedNodes","cancelLeavingNodes","tNode","newElement","nodes","leavingNodes","newParent","prevSibling","leavingEl","leavingParent","reusedNodes","trackLeavingNodes","el","allLeavingAnimations","TracingAction","TracingService","InjectionToken","markedFeatures","performanceMarkFeature","feature","AfterRenderManager","ɵɵdefineInjectable","AFTER_RENDER_PHASES","AfterRenderImpl","inject","NgZone","ChangeDetectionScheduler","ErrorHandler","hasSequencesToExecute","profiler","ProfilerEvent","phase","sequence","hookFn","err","view","AFTER_RENDER_SEQUENCES_TO_ADD","markAncestorsForTraversal","FLAGS","fn","snapshot","AfterRenderSequence","impl","hooks","once","destroyRef","scheduled","s","afterNextRender","callbackOrSpec","options","injector","inject","Injector","performanceMarkFeature","afterEveryRenderImpl","getHooks","once","manager","AfterRenderManager","AfterRenderImpl","tracing","TracingService","destroyRef","DestroyRef","viewContext","ViewContext","sequence","AfterRenderSequence","ANIMATION_QUEUE","InjectionToken","inject","EnvironmentInjector","addToAnimationQueue","injector","animationFns","animationData","animationQueue","animateFn","removeFromAnimationQueue","animationFn","queueEnterAnimations","injector","enterAnimations","_","nodeAnimations","addToAnimationQueue","maybeQueueEnterAnimation","parentLView","parent","tNode","ANIMATIONS","applyToElementOrContainer","action","renderer","lNodeToHandle","beforeNode","lContainer","isComponent","isLContainer","isLView","HOST","rNode","unwrapRNode","nativeAppendChild","nativeInsertBefore","cancelLeavingNodes","trackLeavingNodes","runLeaveAnimationsWithCallback","nodeHasLeaveAnimations","reusedNodes","nativeRemoveNode","applyContainer","removeViewFromDOM","tView","lView","detachViewFromDOM","T_HOST","addViewToDOM","parentTNode","parentNativeNode","applyView","ENVIRONMENT","RENDERER","destroyViewTree","rootView","lViewOrLContainer","CHILD_HEAD","cleanUpView","TVIEW","next","firstView","CONTAINER_HEADER_OFFSET","NEXT","PARENT","detachMovedView","declarationContainer","movedViews","MOVED_VIEWS","declarationViewIndex","destroyLView","isDestroyed","prevConsumer","setActiveConsumer","FLAGS","REACTIVE_TEMPLATE_CONSUMER","consumerDestroy","executeOnDestroys","processCleanups","DECLARATION_LCONTAINER","lQueries","QUERIES","unregisterLView","callback","animations","allLeavingAnimations","ID","leaveAnimations","runningAnimations","index","animationFn","promise","runAfterLeaveAnimations","tCleanup","lCleanup","CLEANUP","i","targetIdx","context","destroyHooks","ON_DESTROY_HOOKS","destroyHooksFn","effects","EFFECTS","effect","NodeInjectorFactory","toCall","j","callContext","hook","profiler","ProfilerEvent","getParentRElement","getClosestRElement","isComponentHost","encapsulation","ViewEncapsulation","getNativeByTNode","getInsertInFrontOfRNode","currentTNode","_getInsertInFrontOfRNodeWithI18n","getInsertInFrontOfRNodeWithNoI18n","_processI18nInsertBefore","appendChild","tView","lView","childRNode","childTNode","parentRNode","getParentRElement","renderer","RENDERER","parentTNode","T_HOST","anchorNode","getInsertInFrontOfRNode","i","nativeAppendOrInsertBefore","_processI18nInsertBefore","getFirstNativeNode","tNode","tNodeType","getNativeByTNode","getBeforeNodeForView","elIcuContainerChild","rNodeOrLContainer","isLContainer","unwrapRNode","icuContainerIterate","projectionNodes","getProjectionNodes","parentView","getLViewParent","DECLARATION_COMPONENT_VIEW","componentHost","slotIdx","viewIndexInContainer","lContainer","nextViewIndex","CONTAINER_HEADER_OFFSET","firstTNodeOfView","TVIEW","NATIVE","applyNodes","action","parentRElement","beforeNode","isProjection","injector","INJECTOR","rawSlotValue","attachPatchData","isDetachedByI18n","applyToElementOrContainer","nextRNode","rNode","applyProjectionRecursive","applyView","applyProjection","tProjectionNode","componentLView","nodeToProjectOrRNodes","nodeToProject","projectedComponentLView","PARENT","hasInSkipHydrationBlockFlag","applyContainer","anchor","native","applyStyling","isClassBased","prop","value","flags","RendererStyleFlags2","executeTemplate","templateFn","rf","context","prevSelectedIndex","getSelectedIndex","isUpdatePhase","setSelectedIndex","HEADER_OFFSET","selectIndexInternal","preHookType","ProfilerEvent","profiler","postHookType","createDirectivesInstances","instantiateAllDirectives","invokeDirectivesHostBindings","saveResolvedLocalsInData","viewData","localRefExtractor","localNames","localIndex","index","locateHostElement","elementOrSelector","encapsulation","preserveContent","PRESERVE_HOST_CONTENT","PRESERVE_HOST_CONTENT_DEFAULT","ViewEncapsulation","rootElement","applyRootElementTransform","_applyRootElementTransformImpl","mapPropName","name","setPropertyAndInputs","tNode","lView","propName","value","renderer","sanitizer","tView","TVIEW","setAllInputsForProperty","isComponentHost","markDirtyIfOnPush","setDomProperty","element","getNativeByTNode","viewIndex","childComponentLView","getComponentLViewByIndex","FLAGS","instantiateAllDirectives","tView","lView","tNode","start","end","isComponentHost","createComponentLView","getOrCreateNodeInjectorForNode","initialInputs","i","def","directive","getNodeInjectable","attachPatchData","setInputsFromAttrs","isComponentDef","componentView","getComponentLViewByIndex","CONTEXT","invokeDirectivesHostBindings","elementIndex","currentDirectiveIndex","getCurrentDirectiveIndex","setSelectedIndex","dirIndex","setCurrentDirectiveIndex","invokeHostBindingsInCreationMode","findDirectiveDefMatches","registry","matches","isNodeMatchingSelectorList","elementAttributeInternal","name","value","sanitizer","namespace","element","getNativeByTNode","setElementAttribute","RENDERER","renderer","tagName","strValue","renderStringify","directiveIndex","instance","initialInputData","lookupName","writeToDirectiveInput","elementLikeStartShared","index","locateOrCreateNativeNode","adjustedIndex","HEADER_OFFSET","TVIEW","native","setCurrentTNode","isElement","setupStaticAttributes","getElementDepthCount","isDirectiveHost","increaseElementDepthCount","wasLastNodeCreated","isDetachedByI18n","appendChild","elementLikeEndShared","currentTNode","isCurrentTNodeParent","setCurrentTNodeAsNotParent","handleUncaughtError","lView","error","injector","INJECTOR","errorHandler","INTERNAL_APPLICATION_ERROR_HANDLER","setAllInputsForProperty","tNode","tView","publicName","value","inputs","hostDirectiveInputs","hasMatch","i","index","def","writeToDirectiveInput","instance","renderComponent","hostLView","componentHostIdx","componentView","getComponentLViewByIndex","componentTView","TVIEW","syncViewWithBlueprint","hostRNode","HOST","HYDRATION","retrieveHydrationInfo","INJECTOR","profiler","ProfilerEvent","renderView","CONTEXT","tView","lView","i","context","enterView","viewQuery","executeViewQueryFn","templateFn","executeTemplate","QUERIES","refreshContentQueries","components","renderChildComponents","error","FLAGS","leaveView","createAndRenderEmbeddedLView","declarationLView","templateTNode","options","prevConsumer","setActiveConsumer","embeddedTView","viewFlags","embeddedLView","createLView","declarationLContainer","DECLARATION_LCONTAINER","declarationViewLQueries","shouldAddViewToDom","tNode","dehydratedView","hasInSkipHydrationBlockFlag","collectNativeNodes","tView","lView","tNode","result","isProjection","lNode","unwrapRNode","isLContainer","collectNativeNodesInLContainer","tNodeType","nextRNode","icuContainerIterate","rNode","nodesInSlot","getProjectionNodes","parentView","getLViewParent","DECLARATION_COMPONENT_VIEW","TVIEW","lContainer","i","CONTAINER_HEADER_OFFSET","lViewInAContainer","lViewFirstChildTNode","NATIVE","HOST","addAfterRenderSequencesForView","AFTER_RENDER_SEQUENCES_TO_ADD","sequence","freeConsumers","getOrBorrowReactiveLViewConsumer","REACTIVE_TEMPLATE_CONSUMER","borrowReactiveLViewConsumer","consumer","REACTIVE_LVIEW_CONSUMER_NODE","maybeReturnReactiveLViewConsumer","__spreadProps","__spreadValues","REACTIVE_NODE","node","markAncestorsForTraversal","getOrCreateTemporaryConsumer","TEMPORARY_CONSUMER_NODE","parent","viewShouldHaveReactiveConsumer","markViewForRefresh","runEffectsInView","view","EFFECTS","tryFlushEffects","foundDirtyEffect","effect","FLAGS","MAXIMUM_REFRESH_RERUNS$1","detectChangesInternal","lView","mode","rendererFactory","ENVIRONMENT","checkNoChangesMode","detectChangesInViewWhileDirty","lastIsRefreshingViewsValue","isRefreshingViews","setIsRefreshingViews","detectChangesInView","retries","requiresRefreshOrTraversal","RuntimeError","refreshView","tView","lView","templateFn","context","isDestroyed","flags","FLAGS","isInCheckNoChangesPass","isInExhaustiveCheckNoChangesPass","enterView","returnConsumerToPool","prevConsumer","currentConsumer","viewShouldHaveReactiveConsumer","getOrBorrowReactiveLViewConsumer","consumerBeforeComputation","getActiveConsumer","getOrCreateTemporaryConsumer","REACTIVE_TEMPLATE_CONSUMER","consumerDestroy","resetPreOrderHookFlags","setBindingIndex","executeTemplate","hooksInitPhaseCompleted","preOrderCheckHooks","executeCheckHooks","preOrderHooks","executeInitAndCheckHooks","incrementInitPhaseFlags","markTransplantedViewsForRefresh","runEffectsInView","detectChangesInEmbeddedViews","refreshContentQueries","contentCheckHooks","contentHooks","processHostBindingOpCodes","components","detectChangesInChildComponents","viewQuery","executeViewQueryFn","viewCheckHooks","viewHooks","EFFECTS_TO_SCHEDULE","notifyEffect","addAfterRenderSequencesForView","e","markAncestorsForTraversal","consumerAfterComputation","maybeReturnReactiveLViewConsumer","leaveView","mode","lContainer","getFirstLContainer","getNextLContainer","i","CONTAINER_HEADER_OFFSET","embeddedLView","detectChangesInViewIfAttached","movedViews","MOVED_VIEWS","movedLView","markViewForRefresh","detectChangesInComponent","hostLView","componentHostIdx","profiler","ProfilerEvent","componentView","getComponentLViewByIndex","CONTEXT","viewAttachedToChangeDetector","detectChangesInView","TVIEW","consumer","shouldRefreshView","consumerPollProducersForChange","setActiveConsumer","hostBindingOpCodes","opCode","setSelectedIndex","directiveIdx","bindingRootIndx","hostBindingFn","setBindingRootForHostBindings","markViewDirty","source","dirtyBitsToUse","isRefreshingViews","ENVIRONMENT","parent","getLViewParent","isRootView","createLContainer","hostNative","currentView","native","tNode","getLViewFromLContainer","index","adjustedIndex","addLViewToLContainer","addToDOM","insertView","beforeNode","getBeforeNodeForView","renderer","RENDERER","parentRNode","NATIVE","addViewToDOM","T_HOST","hydrationInfo","HYDRATION","removeLViewFromLContainer","detachView","destroyLView","removeIndex","indexInContainer","viewToDetach","declarationLContainer","DECLARATION_LCONTAINER","detachMovedView","NEXT","removedLView","removeFromArray","removeViewFromDOM","lQueries","QUERIES","PARENT","containerLength","addToArray","trackMovedView","updateAncestorTraversalFlagsOnAttach","declarationContainer","isLView","insertedComponentLView","DECLARATION_COMPONENT_VIEW","ViewRef","collectNativeNodes","_lView","_cdRefInjectingView","value","isLContainer","viewRefs","VIEW_REFS","callback","storeLViewOnDestroy","detectChangesInternal","RuntimeError","isRoot","detachViewFromDOM","appRef","TemplateRef","injectTemplateRef","_declarationLView","_declarationTContainer","elementRef","context","injector","dehydratedView","embeddedLView","createAndRenderEmbeddedLView","ViewRef","createTemplateRef","getCurrentTNode","getLView","hostTNode","hostLView","createElementRef","getOrCreateTNode","tView","index","type","name","attrs","tNode","createTNodeAtIndex","isInI18nBlock","parent","getCurrentParentTNode","setCurrentTNode","currentTNode","getCurrentTNodePlaceholderOk","isParent","isCurrentTNodeParent","createTNode","linkTNodeInTView","tParent","value","injectorIndex","flags","isInSkipHydrationBlock","removeDehydratedViews","lContainer","views","DEHYDRATED_VIEWS","renderer","PARENT","RENDERER","retainedViews","view","DEFER_BLOCK_ID","removeDehydratedView","removeDehydratedView","dehydratedView","renderer","nodesRemoved","currentRNode","numNodes","NUM_ROOT_NODES","nextSibling","nativeRemoveNode","_findMatchingDehydratedViewImpl","_findAndReconcileMatchingDehydratedViewsImpl","findMatchingDehydratedView","lContainer","template","_findMatchingDehydratedViewImpl","findAndReconcileMatchingDehydratedViews","lContainer","templateTNode","hostLView","_findAndReconcileMatchingDehydratedViewsImpl","ComponentRef$1","ComponentFactory$1","_NullComponentFactoryResolver","component","RuntimeError","ComponentFactoryResolver$1","RendererFactory2","Renderer2","injectRenderer2","lView","getLView","tNode","getCurrentTNode","nodeAtIndex","getComponentLViewByIndex","isLView","RENDERER","Sanitizer","ɵɵdefineInjectable","NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR","ChainedInjector","injector","parentInjector","token","notFoundValue","options","value","computeStaticStyling","tNode","attrs","writeToHost","styles","classes","mode","i","concatStringsWithSpace","style","styleValue","ɵɵdirectiveInject","flags","lView","getLView","ɵɵinject","getCurrentTNode","getOrCreateInjectable","resolveForwardRef","ɵɵinvalidFactory","msg","resolveDirectives","tView","localRefs","directiveMatcher","exportsMap","matchedDirectiveDefs","directiveDefs","hostDirectiveDefs","hostDirectiveRanges","def","initializeDirectives","cacheMatchingLocalNames","localNames","index","RuntimeError","markAsComponentHost","hostTNode","componentOffset","directives","directivesLength","componentDef","isComponentDef","diPublicInInjector","getOrCreateNodeInjectorForNode","initTNodeFlags","preOrderHooksFound","preOrderCheckHooksFound","directiveIdx","allocExpando","mergeHostAttrs","configureViewWithDirective","saveNameToExportMap","start","end","lifeCycleHooks","initializeInputAndOutputAliases","directiveDef","setupSelectorMatchedInputsOrOutputs","setupInitialInputs","hostDirectiveDef","setupHostDirectiveInputsOrOutputs","directiveIndex","aliasMap","publicName","bindings","setShadowStylingInputFlags","config","initialName","isHostDirective","inputs","hostDirectiveInputs","isInlineTemplate","inputsToStore","attrName","inputConfig","j","directiveFactory","getFactoryDef","nodeInjectorFactory","NodeInjectorFactory","registerHostBindingOpCodes","NO_CHANGE","directiveVarsIdx","hostBindings","hostBindingOpCodes","elementIndx","lastSelectedElementIdx","numberOfDirectives","directiveHostFirstCreatePass","index","lView","type","name","directiveMatcher","bindingsEnabled","attrsIndex","localRefsIndex","tView","TVIEW","tViewConsts","attrs","getConstant","tNode","getOrCreateTNode","resolveDirectives","mergeHostAttrs","computeStaticStyling","directiveHostEndFirstCreatePass","registerPostOrderHooks","isContentQueryHost","domOnlyFirstCreatePass","refs","i","isListLikeIterable","obj","isJsObject","iterateListLike","obj","fn","i","iterator","item","isJsObject","o","updateBinding","lView","bindingIndex","value","getBinding","bindingUpdated","NO_CHANGE","oldValue","bindingUpdated2","exp1","exp2","different","wrapListener","tNode","lView","listenerFn","wrapListenerIn_markDirtyAndPreventDefault","event","startView","isComponentHost","getComponentLViewByIndex","markViewDirty","context","CONTEXT","result","executeListenerWithErrorHandling","nextListenerFn","e","prevConsumer","setActiveConsumer","profiler","ProfilerEvent","error","handleUncaughtError","listenToDomEvent","tView","eventTargetResolver","renderer","eventName","originalListener","wrappedListener","isTNodeDirectiveHost","isDirectiveHost","hasCoalesced","existingListener","findExistingListener","lastListenerFn","native","getNativeByTNode","target","stashEventListenerImpl","cleanupFn","isAnimationEventType","idxOrTargetGetter","_lView","unwrapRNode","storeListenerCleanup","tNodeIndex","tCleanup","cleanupEventName","lCleanup","CLEANUP","listenerIdxInLCleanup","indexOrTargetGetter","cleanup","isOutput","getOrCreateTViewCleanup","getOrCreateLViewCleanup","index","listenToOutput","tNode","lView","directiveIndex","lookupName","eventName","listenerFn","instance","tView","TVIEW","propertyName","subscription","storeListenerCleanup","BINDING","getComponentName","def","ComponentFactoryResolver","ComponentFactoryResolver$1","ngModule","component","componentDef","getComponentDef","ComponentFactory","toInputRefArray","map","name","propName","flags","transform","inputData","InputFlags","toOutputRefArray","createRootViewInjector","componentDef","environmentInjector","injector","realEnvironmentInjector","EnvironmentInjector","ChainedInjector","createRootLViewEnvironment","rootLViewInjector","rendererFactory","RendererFactory2","RuntimeError","sanitizer","Sanitizer","changeDetectionScheduler","ChangeDetectionScheduler","tracingService","TracingService","createHostElement","renderer","tagName","inferTagNameFromDefinition","createElementNode","SVG_NAMESPACE","MATH_ML_NAMESPACE","ComponentFactory","ComponentFactory$1","toInputRefArray","toOutputRefArray","ngModule","stringifyCSSSelectorList","projectableNodes","rootSelectorOrNode","directives","componentBindings","profiler","ProfilerEvent","prevConsumer","setActiveConsumer","cmpDef","rootViewInjector","environment","getComponentName","rootTView","createRootTView","hostRenderer","hostElement","locateHostElement","hasInputBindings","isInputBinding","d","rootLView","createLView","getInitialLViewFlagsFromDef","retrieveHydrationInfo","HEADER_OFFSET","enterView","componentView","hostTNode","directiveHostFirstCreatePass","setupStaticAttributes","attachPatchData","createDirectivesInstances","executeContentQueries","directiveHostEndFirstCreatePass","projectNodes","getComponentLViewByIndex","CONTEXT","renderView","e","unregisterLView","leaveView","ComponentRef","tAttributes","extractAttrsAndClassesFromSelector","creationBindings","updateBindings","varsToAllocate","binding","BINDING","i","directive","targetDirectiveIdx","directivesToApply","directiveType","directiveDef","getDirectiveDef","createTView","getRootTViewTemplate","flags","kind","ComponentRef$1","componentType","_rootLView","_hasInputBindings","getTNode","TVIEW","createElementRef","ViewRef","name","value","tNode","lView","hasSetInput","setAllInputsForProperty","childComponentLView","markViewDirty","NodeInjector","callback","ngContentSelectors","projection","nodesforSlot","ViewContainerRef","injectViewContainerRef","previousTNode","getCurrentTNode","createContainerRef","getLView","R3ViewContainerRef","_R3ViewContainerRef","_lContainer","_hostTNode","_hostLView","parentLocation","getParentInjectorLocation","hasParentInjector","parentView","getParentInjectorView","injectorIndex","getParentInjectorIndex","parentTNode","index","viewRefs","getViewRefs","CONTAINER_HEADER_OFFSET","templateRef","context","indexOrOptions","dehydratedView","findMatchingDehydratedView","viewRef","shouldAddViewToDom","componentFactoryOrType","bindings","isComponentFactory","isType","options","componentFactory","getComponentDef","contextInjector","result","rNode","componentRef","addToDOM","viewAttachedToContainer","prevIdx","prevLContainer","PARENT","prevVCRef","T_HOST","adjustedIdx","lContainer","addLViewToLContainer","addToArray","getOrCreateViewRefs","newIndex","viewRefsArr","detachedView","detachView","removeFromArray","destroyLView","view","shift","VIEW_REFS","hostLView","slotValue","isLContainer","createLContainer","addToEndOfViewTree","_locateOrCreateAnchorNode","insertAnchorNode","RENDERER","commentNode","hostNative","getNativeByTNode","parentOfHostNative","nativeInsertBefore","createAnchorNode","_populateDehydratedViewsInLContainer","populateDehydratedViewsInLContainer","NATIVE","unwrapRNode","LQuery_","_LQuery_","queryList","LQueries_","_LQueries_","queries","tView","tQueries","noOfInheritedQueries","viewLQueries","tQuery","parentLQuery","i","getTQuery","TQueryMetadata_","predicate","flags","read","splitQueryMultiSelectors","TQueries_","_TQueries_","tNode","queriesForTemplateRef","childQueryIndex","tqueryClone","index","tquery","TQuery_","_TQuery_","metadata","nodeIndex","declarationNodeIdx","parent","name","getIdxOfMatchingSelector","locateDirectiveOrProvider","TemplateRef","nodeMatchIdx","ElementRef","ViewContainerRef","directiveOrProviderIdx","tNodeIdx","matchIdx","selector","localNames","createResultByTNodeType","currentView","createElementRef","createTemplateRef","createResultForNode","lView","matchingIdx","createSpecialToken","getNodeInjectable","TVIEW","createContainerRef","materializeViewResults","queryIndex","lQuery","QUERIES","tViewData","tQueryMatches","result","matchedNodeIdx","collectQueryResults","lViewResults","declarationLContainer","CONTAINER_HEADER_OFFSET","embeddedLView","DECLARATION_LCONTAINER","PARENT","MOVED_VIEWS","embeddedLViews","loadQueryInternal","createLQuery","QueryList","storeCleanupWithContext","createViewQuery","getTView","createTQuery","getLView","createContentQuery","directiveIndex","getCurrentTNode","saveContentQueryAndDirectiveIndex","locator","s","tViewContentQueries","lastSavedDirectiveIndex","getQueryResults","NgModuleRef$1","NgModuleFactory$1","NgModuleRef","NgModuleRef$1","ComponentFactoryResolver","ngModuleType","_parent","additionalProviders","runInjectorInitializers","ngModuleDef","getNgModuleDef","maybeUnwrapFn","createInjectorWithoutInjectorInstances","ComponentFactoryResolver$1","stringify","injector","fn","callback","NgModuleFactory","NgModuleFactory$1","moduleType","parentInjector","EnvironmentNgModuleRefAdapter","NgModuleRef$1","ComponentFactoryResolver","config","injector","R3Injector","ComponentFactoryResolver$1","getNullInjector","callback","createEnvironmentInjector","providers","parent","debugName","StandaloneService","_injector","componentDef","internalImportProvidersFrom","standaloneInjector","ɵɵdefineInjectable","ɵɵinject","EnvironmentInjector","ɵɵdefineComponent","componentDefinition","noSideEffects","baseDef","getNgDirectiveDef","def","__spreadProps","__spreadValues","ChangeDetectionStrategy","parentInjector","ViewEncapsulation","EMPTY_ARRAY","performanceMarkFeature","initFeatures","dependencies","extractDefListOrFactory","extractDirectiveDef","getPipeDef","getComponentId","type","getComponentDef","getDirectiveDef","ɵɵdefineNgModule","parseAndConvertInputsForDefinition","obj","declaredInputs","EMPTY_OBJ","newLookup","minifiedKey","value","publicName","declaredName","inputFlags","transform","InputFlags","parseAndConvertOutputsForDefinition","ɵɵdefineDirective","directiveDefinition","ɵɵdefinePipe","pipeDef","definition","fn","defExtractor","resolvedDependencies","result","dep","getComponentId","componentDef","hash","componentDefConsts","hashSelectors","char","getSuperType","type","ɵɵInheritDefinitionFeature","definition","superType","shouldInheritFields","inheritanceChain","superDef","isComponentDef","RuntimeError","writeableDef","maybeUnwrapEmpty","superHostBindings","inheritHostBindings","superViewQuery","superContentQueries","inheritViewQuery","inheritContentQueries","mergeInputsWithTransforms","fillProperties","defData","features","i","feature","mergeHostAttrsAcrossInheritance","target","source","key","value","hostVars","hostAttrs","def","mergeHostAttrs","EMPTY_OBJ","EMPTY_ARRAY","prevViewQuery","rf","ctx","prevContentQueries","directiveIndex","prevHostBindings","templateCreate","tNode","declarationLView","declarationTView","index","templateFn","decls","vars","flags","embeddedTView","createTView","setCurrentTNode","comment","_locateOrCreateContainerAnchor","wasLastNodeCreated","appendChild","attachPatchData","lContainer","createLContainer","HEADER_OFFSET","addToEndOfViewTree","populateDehydratedViewsInLContainer","declareDirectiveHostTemplate","tagName","attrs","localRefsIndex","localRefExtractor","adjustedIndex","getOrCreateTNode","getBindingsEnabled","resolveDirectives","getConstant","findDirectiveDefMatches","registerPostOrderHooks","isDirectiveHost","createDirectivesInstances","saveResolvedLocalsInData","declareNoDirectiveHostTemplate","refs","ɵɵtemplate","attrsIndex","lView","getLView","tView","getTView","_locateOrCreateContainerAnchor","createContainerAnchorImpl","tView","lView","tNode","index","lastNodeWasCreated","RENDERER","Console","message","__ngFactoryType__","ɵɵdefineInjectable","TESTABILITY","InjectionToken","isPromise","obj","isSubscribable","APP_INITIALIZER","InjectionToken","provideAppInitializer","initializerFn","makeEnvironmentProviders","ApplicationInitStatus","res","rej","inject","Injector","asyncInitPromises","appInits","initResult","runInInjectionContext","observableAsPromise","resolve","reject","complete","e","__ngFactoryType__","ɵɵdefineInjectable","APP_BOOTSTRAP_LISTENER","publishSignalConfiguration","setThrowInvalidWriteToSignalError","errorMessage","RuntimeError","isBoundToModule","cf","MAXIMUM_REFRESH_RERUNS","ApplicationRef","inject","INTERNAL_APPLICATION_ERROR_HANDLER","AfterRenderManager","ZONELESS_ENABLED","EffectScheduler","Subject","PendingTasksInternal","map","pending","TracingService","subscription","resolve","stable","EnvironmentInjector","componentOrFactory","rootSelectorOrNode","injector","Injector","NgZone","profiler","ProfilerEvent","isComponentFactory","ComponentFactory$1","ApplicationInitStatus","errorMessage","RuntimeError","componentFactory","ComponentFactoryResolver$1","ngModule","isBoundToModule","NgModuleRef$1","selectorOrNode","compRef","nativeElement","testability","TESTABILITY","remove","TracingAction","prevConsumer","setActiveConsumer","RendererFactory2","runs","MAXIMUM_REFRESH_RERUNS","ranDetectChanges","useGlobalCheck","_lView","requiresRefreshOrTraversal","mode","detectChangesInternal","viewRef","view","componentRef","e","APP_BOOTSTRAP_LISTENER","listener","callback","__ngFactoryType__","ɵɵdefineInjectable","remove","list","el","index","ɵɵattribute","name","value","sanitizer","namespace","lView","getLView","bindingIndex","nextBindingIndex","bindingUpdated","tView","getTView","tNode","getSelectedTNode","elementAttributeInternal","ɵɵcomponentInstance","getLView","DECLARATION_COMPONENT_VIEW","CONTEXT","LiveCollection","item","index","value","index1","index2","startIdx","endIdx","endItem","startItem","prevIndex","newIdx","valuesMatching","liveIdx","liveValue","newValue","trackBy","reconcile","liveCollection","newCollection","trackByFn","reactiveConsumer","detachedItems","liveKeysInTheFuture","liveStartIdx","liveEndIdx","duplicateKeys","setActiveConsumer","newEndIdx","liveStartValue","newStartValue","isStartMatching","valuesMatching","liveEndValue","newEndValue","isEndMatching","liveStartKey","liveEndKey","newStartKey","newEndKey","UniqueValueMultiKeyMap","initLiveItemsInTheFuture","attachPreviouslyDetached","newItem","createOrAttach","newCollectionIterator","newIterationResult","liveValue","newValue","newKey","liveKey","item","prevCollection","index","key","value","start","end","keys","prevValue","vMap","cb","ɵɵconditionalCreate","templateFn","decls","vars","tagName","attrsIndex","localRefsIndex","localRefExtractor","performanceMarkFeature","lView","getLView","tView","getTView","attrs","getConstant","declareNoDirectiveHostTemplate","ɵɵconditionalBranchCreate","ɵɵconditional","matchingTemplateIndex","contextValue","hostLView","bindingIndex","nextBindingIndex","prevMatchingTemplateIndex","NO_CHANGE","prevContainer","getLContainer","HEADER_OFFSET","viewInContainerIdx","bindingUpdated","prevConsumer","removeLViewFromLContainer","nextLContainerIndex","nextContainer","templateTNode","getExistingTNode","TVIEW","dehydratedView","findAndReconcileMatchingDehydratedViews","embeddedLView","createAndRenderEmbeddedLView","addLViewToLContainer","shouldAddViewToDom","getLViewFromLContainer","CONTEXT","RepeaterContext","lContainer","$implicit","$index","CONTAINER_HEADER_OFFSET","ɵɵrepeaterTrackByIdentity","_","value","RepeaterMetadata","hasEmptyBlock","trackByFn","liveCollection","ɵɵrepeaterCreate","index","templateFn","decls","vars","tagName","attrsIndex","trackByUsesComponentInstance","emptyTemplateFn","emptyDecls","emptyVars","emptyTagName","emptyAttrsIndex","performanceMarkFeature","lView","getLView","tView","getTView","hostLView","boundTrackBy","DECLARATION_COMPONENT_VIEW","CONTEXT","metadata","HEADER_OFFSET","declareNoDirectiveHostTemplate","getConstant","LiveCollectionLContainerImpl","LiveCollection","lContainer","hostLView","templateTNode","CONTAINER_HEADER_OFFSET","index","CONTEXT","lView","dehydratedView","HYDRATION","addLViewToLContainer","shouldAddViewToDom","clearDetachAnimationList","maybeInitDetachAnimationList","detachExistingView","value","findMatchingDehydratedView","createAndRenderEmbeddedLView","RepeaterContext","destroyLView","TVIEW","i","getExistingLViewFromLContainer","ɵɵrepeater","collection","prevConsumer","setActiveConsumer","metadataSlotIdx","getSelectedIndex","getLView","hostTView","metadata","containerIndex","getLContainer","itemTemplateTNode","getExistingTNode","liveCollection","reconcile","bindingIndex","nextBindingIndex","isCollectionEmpty","bindingUpdated","emptyTemplateIndex","lContainerForEmpty","emptyTemplateTNode","findAndReconcileMatchingDehydratedViews","embeddedLView","removeDehydratedViews","removeLViewFromLContainer","indexInContainer","viewToDetach","animations","ANIMATIONS","injector","INJECTOR","removeFromAnimationQueue","allLeavingAnimations","ID","detachView","getLViewFromLContainer","tView","getTNode","ɵɵproperty","propName","sanitizer","getTView","tNode","getSelectedTNode","setPropertyAndInputs","RENDERER","setDirectiveInputsWhichShadowsStyling","isClassBased","setAllInputsForProperty","ɵɵelementStart","name","attrsIndex","localRefsIndex","adjustedIndex","HEADER_OFFSET","directiveHostFirstCreatePass","findDirectiveDefMatches","getBindingsEnabled","isComponentHost","tracingService","ENVIRONMENT","def","getComponentName","initializeElement","elementLikeStartShared","_locateOrCreateElementNode","isDirectiveHost","createDirectivesInstances","executeContentQueries","saveResolvedLocalsInData","ɵɵelementEnd","initialTNode","getCurrentTNode","currentTNode","elementLikeEndShared","directiveHostEndFirstCreatePass","isSkipHydrationRootTNode","leaveSkipHydrationBlock","decreaseElementDepthCount","hasClassInput","hasStyleInput","ɵɵelement","ɵɵdomElementStart","domOnlyFirstCreatePass","ɵɵdomElementEnd","ɵɵdomElement","lastNodeWasCreated","createElementNode","getNamespace","ɵɵgetCurrentView","getLView","ɵɵdomProperty","propName","value","sanitizer","lView","bindingIndex","nextBindingIndex","bindingUpdated","tView","getTView","tNode","getSelectedTNode","setDomProperty","RENDERER","u","plural","val","i","v","localeEn","LOCALE_DATA","findLocaleData","locale","normalizedLocale","normalizeLocale","match","getLocaleData","parentLocale","localeEn","RuntimeError","getLocaleData","normalizedLocale","LOCALE_DATA","_global","LocaleDataIndex","normalizeLocale","locale","DEFAULT_LOCALE_ID","LOCALE_ID$1","DEFAULT_LOCALE_ID","setLocaleId","localeId","ɵɵlistener","eventName","listenerFn","eventTargetResolver","lView","getLView","tView","getTView","tNode","getCurrentTNode","listenerInternal","RENDERER","ɵɵdomListener","eventName","listenerFn","eventTargetResolver","lView","getLView","tView","getTView","tNode","getCurrentTNode","listenToDomEvent","RENDERER","wrapListener","listenerInternal","renderer","processOutputs","wrappedListener","outputConfig","hostDirectiveOutputConfig","i","index","lookupName","listenToOutput","ɵɵnextContext","level","nextContextImpl","matchingProjectionSlotIndex","projectionSlots","wildcardNgContentIndex","ngProjectAsAttrVal","getProjectAsAttrValue","slotValue","isNodeMatchingSelectorList","isSelectorInSelectorList","ɵɵprojectionDef","componentNode","DECLARATION_COMPONENT_VIEW","T_HOST","numProjectionSlots","projectionHeads","newArray","tails","componentChild","slotIndex","ɵɵprojection","nodeIndex","selectorIndex","attrs","fallbackTemplateFn","fallbackDecls","fallbackVars","fallbackIndex","declareNoDirectiveHostTemplate","tProjectionNode","getOrCreateTNode","HEADER_OFFSET","setCurrentTNodeAsNotParent","isNodeCreationMode","HYDRATION","isInSkipHydrationBlock","insertFallbackContent","isDetachedByI18n","applyProjection","adjustedIndex","fallbackTNode","fallbackLContainer","dehydratedView","findMatchingDehydratedView","fallbackLView","createAndRenderEmbeddedLView","addLViewToLContainer","shouldAddViewToDom","ɵɵcontentQuery","directiveIndex","predicate","flags","read","createContentQuery","ɵɵviewQuery","createViewQuery","ɵɵqueryRefresh","queryList","queryIndex","getCurrentQueryIndex","setCurrentQueryIndex","tQuery","getTQuery","isCreationMode","result","getQueryResults","unwrapElementRef","ɵɵloadQuery","loadQueryInternal","ɵɵreference","index","contextLView","getContextLView","load","HEADER_OFFSET","toTStylingRange","prev","next","getTStylingRangePrev","tStylingRange","getTStylingRangePrevDuplicate","setTStylingRangePrev","previous","setTStylingRangePrevDuplicate","getTStylingRangeNext","setTStylingRangeNext","getTStylingRangeNextDuplicate","setTStylingRangeNextDuplicate","insertTStylingBinding","tData","tNode","tStylingKeyWithStatic","isHostBinding","isClassBinding","tBindings","tmplHead","tmplTail","isKeyDuplicateOfStatic","tStylingKey","staticKeyValueArray","keyValueArrayIndexOf","previousNode","markDuplicates","markDuplicateOfResidualStyling","residual","isPrevDir","tStylingAtIndex","isMap","cursor","foundDuplicate","tStylingValueAtCursor","tStyleRangeAtCursor","isStylingMatch","tStylingKeyCursor","parserState","getLastParsedKey","text","parseClassName","text","resetParserState","parseClassNameNext","consumeWhitespace","parserState","index","end","consumeClassToken","resetParserState","text","parserState","consumeWhitespace","startIndex","endIndex","consumeClassToken","ɵɵstyleProp","prop","value","suffix","checkStylingProperty","ɵɵclassProp","className","ɵɵclassMap","classes","checkStylingMap","classKeyValueArraySet","classStringParser","keyValueArray","text","i","parseClassName","parseClassNameNext","keyValueArraySet","getLastParsedKey","checkStylingProperty","prop","value","suffix","isClassBased","lView","getLView","tView","getTView","bindingIndex","incrementBindingIndex","stylingFirstUpdatePass","NO_CHANGE","bindingUpdated","tNode","getSelectedIndex","updateStyling","RENDERER","normalizeSuffix","stringParser","hasStylingInputShadow","isInHostBindings","staticPrefix","concatStringsWithSpace","setDirectiveInputsWhichShadowsStyling","updateStylingMap","toStylingKeyValueArray","tStylingKey","tData","isHostBindings","wrapInStaticStylingKey","insertTStylingBinding","stylingKey","hostDirectiveDef","getCurrentDirectiveDef","residual","collectStylingFromDirectives","collectStylingFromTAttrs","directiveStylingLast","templateStylingKey","getTemplateHeadTStylingKey","setTemplateHeadTStylingKey","collectResidual","bindings","getTStylingRangeNext","getTStylingRangePrev","directiveEnd","attrs","currentDirective","desiredMarker","currentMarker","item","EMPTY_ARRAY","styleKeyValueArray","unwrappedValue","unwrapSafeValue","current","key","classKeyValueArraySet","keyValueArray","key","value","stringKey","keyValueArraySet","updateStylingMap","tView","tNode","lView","renderer","oldKeyValueArray","newKeyValueArray","isClassBased","bindingIndex","NO_CHANGE","EMPTY_ARRAY","oldIndex","newIndex","oldKey","newKey","oldValue","newValue","setKey","setValue","updateStyling","prop","tData","tRange","higherPriorityValue","getTStylingRangeNextDuplicate","findStylingValue","getTStylingRangeNext","isStylingValuePresent","getTStylingRangePrevDuplicate","rNode","getNativeByIndex","getSelectedIndex","applyStyling","index","isPrevDirection","rawKey","containsStatics","isStylingMap","valueAtLViewIndex","currentValue","keyValueArrayGet","getTStylingRangePrev","residual","normalizeSuffix","suffix","stringify","unwrapSafeValue","hasStylingInputShadow","ɵɵtext","getLView","getTView","adjustedIndex","HEADER_OFFSET","getOrCreateTNode","textNative","_locateOrCreateTextNode","wasLastNodeCreated","appendChild","setCurrentTNode","lastNodeWasCreated","createTextNode","RENDERER","interpolation1","lView","prefix","v0","suffix","bindingUpdated","nextBindingIndex","renderStringify","NO_CHANGE","interpolation2","i0","v1","bindingIndex","getBindingIndex","different","bindingUpdated2","incrementBindingIndex","ɵɵtextInterpolate","v0","ɵɵtextInterpolate1","prefix","suffix","lView","getLView","interpolated","interpolation1","NO_CHANGE","textBindingInternal","getSelectedIndex","ɵɵtextInterpolate2","i0","v1","interpolation2","textBindingInternal","lView","index","value","element","getNativeByIndex","updateTextNode","RENDERER","ɵɵinterpolate1","prefix","v0","suffix","interpolation1","getLView","providersResolver","def","providers","isViewProviders","tView","getTView","resolveProvider","isComponentDef","provider","tInjectables","lInjectablesBlueprint","isComponent","isViewProvider","resolveForwardRef","lView","getLView","tNode","getCurrentTNode","token","isTypeProvider","providerFactory","providerToFactory","beginIndex","endIndex","cptViewProvidersCount","factory","NodeInjectorFactory","ɵɵdirectiveInject","existingFactoryIndex","indexOf","diPublicInInjector","getOrCreateNodeInjectorForNode","registerDestroyHooksIfSupported","existingProvidersFactoryIndex","existingViewProvidersFactoryIndex","doesProvidersFactoryExist","doesViewProvidersFactoryExist","multiFactory","multiViewProvidersFactoryResolver","multiProvidersFactoryResolver","indexInFactory","multiFactoryAdd","contextIndex","providerIsTypeProvider","providerIsClassProvider","isClassProvider","ngOnDestroy","hooks","existingCallbacksIndex","isComponentProvider","item","arr","begin","end","i","_","flags","tData","lData","multiResolve","_flags","_tData","factories","result","componentCount","multiProviders","getNodeInjectable","TVIEW","factoryFn","index","f","ɵɵProvidersFeature","providers","viewProviders","definition","def","processProvidersFn","providersResolver","ɵɵpureFunction0","slotOffset","pureFn","bindingIndex","getBindingRoot","lView","getLView","NO_CHANGE","updateBinding","getBinding","ɵɵpureFunction2","slotOffset","pureFn","exp1","exp2","pureFunction2Internal","getLView","getBindingRoot","getPureFunctionReturnValue","lView","returnValueIndex","lastReturnValue","NO_CHANGE","pureFunction1Internal","bindingRoot","slotOffset","pureFn","exp","thisArg","bindingIndex","bindingUpdated","updateBinding","pureFunction2Internal","exp1","exp2","bindingUpdated2","ɵɵpipe","index","pipeName","tView","getTView","pipeDef","adjustedIndex","HEADER_OFFSET","getPipeDef","pipeFactory","getFactoryDef","previousInjectorProfilerContext","previousInjectImplementation","setInjectImplementation","ɵɵdirectiveInject","previousIncludeViewProviders","setIncludeViewProviders","pipeInstance","store","getLView","name","registry","i","ɵɵpipeBind1","index","offset","v1","adjustedIndex","HEADER_OFFSET","lView","getLView","pipeInstance","load","isPure","pureFunction1Internal","getBindingRoot","ɵɵpipeBind2","slotOffset","v2","pureFunction2Internal","isPure","lView","index","TVIEW","ɵɵtemplateRefExtractor","tNode","createTemplateRef","ModuleWithComponentFactories","ngModuleFactory","componentFactories","Compiler","moduleType","NgModuleFactory","moduleDef","getNgModuleDef","maybeUnwrapFn","factories","declaration","componentDef","getComponentDef","ComponentFactory","type","__ngFactoryType__","ɵɵdefineInjectable","ChangeDetectionSchedulerImpl","inject","INTERNAL_APPLICATION_ERROR_HANDLER","ApplicationRef","PendingTasksInternal","NgZone","ZONELESS_ENABLED","TracingService","Subscription","angularZoneInstanceIdProperty","SCHEDULE_IN_ROOT_ZONE","task","source","scheduleCallback","scheduleCallbackWithMicrotask","scheduleCallbackWithRafRace","e","taskId","__ngFactoryType__","ɵɵdefineInjectable","provideZonelessChangeDetectionInternal","ChangeDetectionScheduler","ChangeDetectionSchedulerImpl","NgZone","NoopNgZone","ZONELESS_ENABLED","getGlobalLocale","DEFAULT_LOCALE_ID","LOCALE_ID","InjectionToken","inject","OutputEmitterRef","inject","ErrorHandler","DestroyRef","callback","RuntimeError","idx","value","formatRuntimeError","previousConsumer","setActiveConsumer","listenerFn","err","untracked","nonReactiveReadsFn","computed","computation","options","createComputed","identityFn","v","linkedSignal","optionsOrComputation","getter","createLinkedSignal","upgradeLinkedSignalGetter","debugName","node","SIGNAL","upgradedGetter","newValue","linkedSignalSetFn","updateFn","linkedSignalUpdateFn","signalAsReadonlyFn","REQUIRED_UNSET_VALUE","INPUT_SIGNAL_NODE","__spreadProps","__spreadValues","SIGNAL_NODE","node","value","signalSetFn","createInputSignal","initialValue","options","node","INPUT_SIGNAL_NODE","inputValueFn","producerAccessed","REQUIRED_UNSET_VALUE","message","RuntimeError","SIGNAL","HostAttributeToken","attributeName","ɵɵinjectAttribute","output","opts","OutputEmitterRef","inputFunction","initialValue","createInputSignal","inputRequiredFunction","REQUIRED_UNSET_VALUE","input","PLATFORM_DESTROY_LISTENERS","InjectionToken","ENABLE_ROOT_COMPONENT_BOOTSTRAP","isApplicationBootstrapConfig","config","bootstrap","envInjector","ngZone","NgZone","exceptionHandler","INTERNAL_APPLICATION_ERROR_HANDLER","onErrorSubscription","destroyListener","onPlatformDestroyListeners","remove","_callAndReportToErrorHandler","pendingTasks","PendingTasksInternal","taskId","initStatus","ApplicationInitStatus","localeId","LOCALE_ID","DEFAULT_LOCALE_ID","setLocaleId","ApplicationRef","appRef","moduleBootstrapImpl","_callAndReportToErrorHandler","errorHandler","ngZone","callback","result","isPromise","e","_platformInjector","createPlatformInjector","providers","name","Injector","INJECTOR_SCOPE","PLATFORM_DESTROY_LISTENERS","_platformInjector","createOrReusePlatformInjector","providers","_platformInjector","injector","createPlatformInjector","publishSignalConfiguration","runPlatformInitializers","runPlatformInitializers","injector","inits","PLATFORM_INITIALIZER","runInInjectionContext","init","APPLICATION_IS_STABLE_TIMEOUT","STABILITY_WARNING_THRESHOLD","APPLICATION_IS_STABLE_TIMEOUT","ChangeDetectorRef","injectChangeDetectorRef","flags","createViewRef","getCurrentTNode","getLView","tNode","lView","isPipe","isComponentHost","componentView","getComponentLViewByIndex","ViewRef","hostComponentView","DECLARATION_COMPONENT_VIEW","DefaultIterableDifferFactory","obj","isListLikeIterable","trackByFn","DefaultIterableDiffer","trackByIdentity","index","item","fn","record","nextIt","nextRemove","addRemoveOffset","moveOffsets","getPreviousIndex","adjPreviousIndex","currentIndex","localMovePreviousIndex","localCurrentIndex","i","offset","previousIndex","collection","RuntimeError","mayBeDirty","itemTrackBy","iterateListLike","previousRecord","IterableChangeRecord_","reinsertRecord","nextRecord","prevRecord","prev","next","_DuplicateMap","toIndex","trackById","_DuplicateItemRecordList","atOrAfterIndex","key","duplicates","recordList","moveOffset","defaultIterableDiffersFactory","IterableDiffers","DefaultIterableDifferFactory","ɵɵdefineInjectable","factories","parent","copied","inject","iterable","factory","f","RuntimeError","internalCreateApplication","config","rootComponent","appProviders","platformProviders","platformRef","profiler","ProfilerEvent","platformInjector","createOrReusePlatformInjector","allAppProviders","provideZonelessChangeDetectionInternal","errorHandlerEnvironmentInitializer","adapter","EnvironmentNgModuleRefAdapter","bootstrap","e","booleanAttribute","value","reflectComponentType","component","componentDef","getComponentDef","factory","ComponentFactory","_DOM","getDOM","setRootDomAdapter","adapter","DomAdapter","PlatformLocation","relativePosition","__ngFactoryType__","ɵɵdefineInjectable","inject","BrowserPlatformLocation","LOCATION_INITIALIZED","InjectionToken","DOCUMENT","fn","window","newPath","state","title","url","parseCookieValue","cookieStr","name","cookie","eqIndex","cookieName","cookieValue","XhrFactory"],"x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98]} \ No newline at end of file diff --git a/frontend/dist-instrumented/chunk-S6DDTQ2X.js b/frontend/dist-instrumented/chunk-S6DDTQ2X.js new file mode 100644 index 00000000..84339541 --- /dev/null +++ b/frontend/dist-instrumented/chunk-S6DDTQ2X.js @@ -0,0 +1,5 @@ +function cov_28xog0fcdb(){var path="/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-S6DDTQ2X.js";var hash="1107daec80f7ee3b6d5b97a330f6413fe0115124";var global=new Function("return this")();var gcv="__coverage__";var coverageData={path:"/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-S6DDTQ2X.js",statementMap:{"0":{start:{line:1,column:452},end:{line:1,column:522}},"1":{start:{line:1,column:493},end:{line:1,column:496}},"2":{start:{line:1,column:497},end:{line:1,column:521}},"3":{start:{line:1,column:539},end:{line:1,column:574}},"4":{start:{line:1,column:591},end:{line:1,column:620}},"5":{start:{line:1,column:637},end:{line:1,column:896}},"6":{start:{line:1,column:651},end:{line:1,column:654}},"7":{start:{line:1,column:655},end:{line:1,column:895}},"8":{start:{line:1,column:822},end:{line:1,column:827}},"9":{start:{line:1,column:833},end:{line:1,column:836}},"10":{start:{line:1,column:837},end:{line:1,column:866}},"11":{start:{line:1,column:896},end:{line:1,column:998}},"12":{start:{line:1,column:910},end:{line:1,column:913}},"13":{start:{line:1,column:914},end:{line:1,column:997}},"14":{start:{line:1,column:1015},end:{line:1,column:1281}},"15":{start:{line:1,column:1029},end:{line:1,column:1032}},"16":{start:{line:1,column:1033},end:{line:1,column:1280}},"17":{start:{line:1,column:1197},end:{line:1,column:1202}},"18":{start:{line:1,column:1208},end:{line:1,column:1211}},"19":{start:{line:1,column:1212},end:{line:1,column:1239}},"20":{start:{line:1,column:1281},end:{line:1,column:1332}},"21":{start:{line:1,column:1295},end:{line:1,column:1298}},"22":{start:{line:1,column:1299},end:{line:1,column:1331}},"23":{start:{line:1,column:1339},end:{line:2,column:91}},"24":{start:{line:1,column:1361},end:{line:1,column:1373}},"25":{start:{line:1,column:1384},end:{line:1,column:1389}},"26":{start:{line:1,column:1396},end:{line:1,column:1401}},"27":{start:{line:1,column:1414},end:{line:1,column:1417}},"28":{start:{line:1,column:1432},end:{line:1,column:1435}},"29":{start:{line:1,column:1452},end:{line:1,column:1475}},"30":{start:{line:1,column:1494},end:{line:1,column:1519}},"31":{start:{line:1,column:1537},end:{line:1,column:1566}},"32":{start:{line:1,column:1549},end:{line:1,column:1565}},"33":{start:{line:1,column:1584},end:{line:2,column:78}},"34":{start:{line:1,column:2786},end:{line:1,column:2928}},"35":{start:{line:2,column:79},end:{line:2,column:87}},"36":{start:{line:2,column:108},end:{line:2,column:314}},"37":{start:{line:2,column:122},end:{line:2,column:125}},"38":{start:{line:2,column:126},end:{line:2,column:313}},"39":{start:{line:2,column:191},end:{line:2,column:196}},"40":{start:{line:2,column:202},end:{line:2,column:205}},"41":{start:{line:2,column:206},end:{line:2,column:233}},"42":{start:{line:2,column:263},end:{line:2,column:268}},"43":{start:{line:2,column:274},end:{line:2,column:277}},"44":{start:{line:2,column:278},end:{line:2,column:307}},"45":{start:{line:2,column:314},end:{line:2,column:389}},"46":{start:{line:2,column:328},end:{line:2,column:331}},"47":{start:{line:2,column:332},end:{line:2,column:388}},"48":{start:{line:2,column:406},end:{line:2,column:477}},"49":{start:{line:2,column:485},end:{line:3,column:81}},"50":{start:{line:2,column:518},end:{line:2,column:522}},"51":{start:{line:2,column:532},end:{line:2,column:537}},"52":{start:{line:2,column:557},end:{line:2,column:559}},"53":{start:{line:2,column:566},end:{line:2,column:568}},"54":{start:{line:2,column:584},end:{line:2,column:598}},"55":{start:{line:2,column:610},end:{line:2,column:890}},"56":{start:{line:2,column:659},end:{line:2,column:888}},"57":{start:{line:2,column:702},end:{line:2,column:885}},"58":{start:{line:2,column:907},end:{line:2,column:949}},"59":{start:{line:2,column:968},end:{line:2,column:1272}},"60":{start:{line:2,column:1075},end:{line:2,column:1113}},"61":{start:{line:2,column:1125},end:{line:2,column:1269}},"62":{start:{line:2,column:1290},end:{line:2,column:1325}},"63":{start:{line:2,column:1302},end:{line:2,column:1324}},"64":{start:{line:2,column:1343},end:{line:3,column:68}},"65":{start:{line:2,column:3036},end:{line:2,column:3502}},"66":{start:{line:2,column:3462},end:{line:2,column:3501}},"67":{start:{line:3,column:69},end:{line:3,column:77}}},fnMap:{"0":{name:"q",decl:{start:{line:1,column:445},end:{line:1,column:446}},loc:{start:{line:1,column:451},end:{line:1,column:523}},line:1},"1":{name:"K",decl:{start:{line:1,column:532},end:{line:1,column:533}},loc:{start:{line:1,column:538},end:{line:1,column:575}},line:1},"2":{name:"G",decl:{start:{line:1,column:584},end:{line:1,column:585}},loc:{start:{line:1,column:590},end:{line:1,column:621}},line:1},"3":{name:"J",decl:{start:{line:1,column:630},end:{line:1,column:631}},loc:{start:{line:1,column:636},end:{line:1,column:999}},line:1},"4":{name:"(anonymous_4)",decl:{start:{line:1,column:811},end:{line:1,column:812}},loc:{start:{line:1,column:821},end:{line:1,column:867}},line:1},"5":{name:"W",decl:{start:{line:1,column:1008},end:{line:1,column:1009}},loc:{start:{line:1,column:1014},end:{line:1,column:1333}},line:1},"6":{name:"(anonymous_6)",decl:{start:{line:1,column:1186},end:{line:1,column:1187}},loc:{start:{line:1,column:1196},end:{line:1,column:1240}},line:1},"7":{name:"(anonymous_7)",decl:{start:{line:1,column:1340},end:{line:1,column:1341}},loc:{start:{line:1,column:1344},end:{line:2,column:88}},line:1},"8":{name:"(anonymous_8)",decl:{start:{line:1,column:1436},end:{line:1,column:1437}},loc:{start:{line:1,column:1451},end:{line:1,column:1476}},line:1},"9":{name:"(anonymous_9)",decl:{start:{line:1,column:1476},end:{line:1,column:1477}},loc:{start:{line:1,column:1493},end:{line:1,column:1520}},line:1},"10":{name:"(anonymous_10)",decl:{start:{line:1,column:1537},end:{line:1,column:1538}},loc:{start:{line:1,column:1548},end:{line:1,column:1566}},line:1},"11":{name:"(anonymous_11)",decl:{start:{line:1,column:2772},end:{line:1,column:2773}},loc:{start:{line:1,column:2785},end:{line:1,column:2929}},line:1},"12":{name:"H",decl:{start:{line:2,column:101},end:{line:2,column:102}},loc:{start:{line:2,column:107},end:{line:2,column:390}},line:2},"13":{name:"(anonymous_13)",decl:{start:{line:2,column:180},end:{line:2,column:181}},loc:{start:{line:2,column:190},end:{line:2,column:234}},line:2},"14":{name:"(anonymous_14)",decl:{start:{line:2,column:252},end:{line:2,column:253}},loc:{start:{line:2,column:262},end:{line:2,column:308}},line:2},"15":{name:"Q",decl:{start:{line:2,column:399},end:{line:2,column:400}},loc:{start:{line:2,column:405},end:{line:2,column:478}},line:2},"16":{name:"(anonymous_16)",decl:{start:{line:2,column:486},end:{line:2,column:487}},loc:{start:{line:2,column:490},end:{line:3,column:78}},line:2},"17":{name:"(anonymous_17)",decl:{start:{line:2,column:569},end:{line:2,column:570}},loc:{start:{line:2,column:583},end:{line:2,column:599}},line:2},"18":{name:"(anonymous_18)",decl:{start:{line:2,column:599},end:{line:2,column:600}},loc:{start:{line:2,column:609},end:{line:2,column:891}},line:2},"19":{name:"(anonymous_19)",decl:{start:{line:2,column:655},end:{line:2,column:656}},loc:{start:{line:2,column:659},end:{line:2,column:888}},line:2},"20":{name:"(anonymous_20)",decl:{start:{line:2,column:698},end:{line:2,column:699}},loc:{start:{line:2,column:702},end:{line:2,column:885}},line:2},"21":{name:"(anonymous_21)",decl:{start:{line:2,column:891},end:{line:2,column:892}},loc:{start:{line:2,column:906},end:{line:2,column:950}},line:2},"22":{name:"(anonymous_22)",decl:{start:{line:2,column:950},end:{line:2,column:951}},loc:{start:{line:2,column:967},end:{line:2,column:1273}},line:2},"23":{name:"(anonymous_23)",decl:{start:{line:2,column:1070},end:{line:2,column:1071}},loc:{start:{line:2,column:1074},end:{line:2,column:1114}},line:2},"24":{name:"(anonymous_24)",decl:{start:{line:2,column:1121},end:{line:2,column:1122}},loc:{start:{line:2,column:1124},end:{line:2,column:1270}},line:2},"25":{name:"(anonymous_25)",decl:{start:{line:2,column:1290},end:{line:2,column:1291}},loc:{start:{line:2,column:1301},end:{line:2,column:1325}},line:2},"26":{name:"(anonymous_26)",decl:{start:{line:2,column:3022},end:{line:2,column:3023}},loc:{start:{line:2,column:3035},end:{line:2,column:3503}},line:2}},branchMap:{"0":{loc:{start:{line:1,column:452},end:{line:1,column:522}},type:"if",locations:[{start:{line:1,column:452},end:{line:1,column:522}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1":{loc:{start:{line:1,column:455},end:{line:1,column:481}},type:"binary-expr",locations:[{start:{line:1,column:455},end:{line:1,column:458}},{start:{line:1,column:461},end:{line:1,column:480}}],line:1},"2":{loc:{start:{line:1,column:539},end:{line:1,column:574}},type:"binary-expr",locations:[{start:{line:1,column:539},end:{line:1,column:542}},{start:{line:1,column:544},end:{line:1,column:574}}],line:1},"3":{loc:{start:{line:1,column:591},end:{line:1,column:620}},type:"binary-expr",locations:[{start:{line:1,column:591},end:{line:1,column:594}},{start:{line:1,column:596},end:{line:1,column:620}}],line:1},"4":{loc:{start:{line:1,column:637},end:{line:1,column:896}},type:"if",locations:[{start:{line:1,column:637},end:{line:1,column:896}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"5":{loc:{start:{line:1,column:896},end:{line:1,column:998}},type:"if",locations:[{start:{line:1,column:896},end:{line:1,column:998}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"6":{loc:{start:{line:1,column:978},end:{line:1,column:996}},type:"cond-expr",locations:[{start:{line:1,column:992},end:{line:1,column:993}},{start:{line:1,column:994},end:{line:1,column:996}}],line:1},"7":{loc:{start:{line:1,column:1015},end:{line:1,column:1281}},type:"if",locations:[{start:{line:1,column:1015},end:{line:1,column:1281}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"8":{loc:{start:{line:1,column:1281},end:{line:1,column:1332}},type:"if",locations:[{start:{line:1,column:1281},end:{line:1,column:1332}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"9":{loc:{start:{line:1,column:1560},end:{line:1,column:1564}},type:"binary-expr",locations:[{start:{line:1,column:1560},end:{line:1,column:1561}},{start:{line:1,column:1563},end:{line:1,column:1564}}],line:1},"10":{loc:{start:{line:1,column:2786},end:{line:1,column:2867}},type:"binary-expr",locations:[{start:{line:1,column:2786},end:{line:1,column:2789}},{start:{line:1,column:2792},end:{line:1,column:2866}}],line:1},"11":{loc:{start:{line:1,column:2868},end:{line:1,column:2928}},type:"binary-expr",locations:[{start:{line:1,column:2868},end:{line:1,column:2871}},{start:{line:1,column:2874},end:{line:1,column:2927}}],line:1},"12":{loc:{start:{line:1,column:2880},end:{line:1,column:2894}},type:"cond-expr",locations:[{start:{line:1,column:2890},end:{line:1,column:2891}},{start:{line:1,column:2892},end:{line:1,column:2894}}],line:1},"13":{loc:{start:{line:1,column:2902},end:{line:1,column:2926}},type:"cond-expr",locations:[{start:{line:1,column:2923},end:{line:1,column:2924}},{start:{line:1,column:2925},end:{line:1,column:2926}}],line:1},"14":{loc:{start:{line:2,column:108},end:{line:2,column:314}},type:"if",locations:[{start:{line:2,column:108},end:{line:2,column:314}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:2},"15":{loc:{start:{line:2,column:314},end:{line:2,column:389}},type:"if",locations:[{start:{line:2,column:314},end:{line:2,column:389}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:2},"16":{loc:{start:{line:2,column:406},end:{line:2,column:477}},type:"binary-expr",locations:[{start:{line:2,column:406},end:{line:2,column:409}},{start:{line:2,column:412},end:{line:2,column:476}}],line:2},"17":{loc:{start:{line:2,column:1313},end:{line:2,column:1317}},type:"binary-expr",locations:[{start:{line:2,column:1313},end:{line:2,column:1314}},{start:{line:2,column:1316},end:{line:2,column:1317}}],line:2},"18":{loc:{start:{line:2,column:3036},end:{line:2,column:3502}},type:"if",locations:[{start:{line:2,column:3036},end:{line:2,column:3502}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:2},"19":{loc:{start:{line:2,column:3039},end:{line:2,column:3450}},type:"binary-expr",locations:[{start:{line:2,column:3039},end:{line:2,column:3042}},{start:{line:2,column:3045},end:{line:2,column:3449}}],line:2},"20":{loc:{start:{line:2,column:3470},end:{line:2,column:3498}},type:"cond-expr",locations:[{start:{line:2,column:3493},end:{line:2,column:3495}},{start:{line:2,column:3496},end:{line:2,column:3498}}],line:2}},s:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0},f:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0},b:{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0],"9":[0,0],"10":[0,0],"11":[0,0],"12":[0,0],"13":[0,0],"14":[0,0],"15":[0,0],"16":[0,0],"17":[0,0],"18":[0,0],"19":[0,0],"20":[0,0]},inputSourceMap:{version:3,sources:["src/app/features/my-vimar-integration/components/my-vimar-account-status/my-vimar-account-status.component.ts","src/app/features/my-vimar-integration/components/my-vimar-account-status/my-vimar-account-status.component.html","src/app/features/my-vimar-integration/pages/my-vimar/my-vimar-page.component.ts","src/app/features/my-vimar-integration/pages/my-vimar/my-vimar-page.component.html"],sourcesContent:["import { Component, input, output } from '@angular/core';\nimport { MyVimarAccount } from '../../models/my-vimar-account.model';\n\n@Component({\n\tselector: 'app-my-vimar-account-status',\n\tstandalone: true,\n\ttemplateUrl: './my-vimar-account-status.component.html',\n\tstyleUrl: './my-vimar-account-status.component.css'\n})\nexport class MyVimarAccountStatusComponent {\n\tpublic readonly account = input.required();\n\tpublic readonly isLoading = input(false);\n\tpublic readonly error = input('');\n\n\tpublic readonly linkClicked = output();\n\tpublic readonly unlinkClicked = output();\n\n\tpublic onLinkAccount(): void {\n\t\tthis.linkClicked.emit();\n\t}\n\n\tpublic onUnlinkAccount(): void {\n\t\tthis.unlinkClicked.emit();\n\t}\n}\n","
\n @if (error()) {\n

\n {{ error() }}\n

\n }\n\n @if (account().isLinked) {\n
\n
\n

Account collegato

\n

\n Account collegato: {{ account().email }}\n

\n
\n\n \n
\n } @else {\n
\n \n

Nessun account collegato

\n

Nessun account MyVimar collegato.

\n
\n\n \n \n }\n
","import { AsyncPipe } from '@angular/common';\nimport { Component, DestroyRef, Inject, OnInit, inject } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { catchError, Observable, of, startWith, Subject, switchMap } from 'rxjs';\nimport { VIMAR_CLOUD_API_SERVICE, type IVimarCloudApiService } from '../../../../core/services/vimar-cloud-api.service.interface';\nimport { MyVimarAccountStatusComponent } from '../../components/my-vimar-account-status/my-vimar-account-status.component';\nimport { MyVimarAccount } from '../../models/my-vimar-account.model';\n\n@Component({\n\tselector: 'app-my-vimar-page',\n\tstandalone: true,\n\timports: [AsyncPipe, MyVimarAccountStatusComponent],\n\ttemplateUrl: './my-vimar-page.component.html',\n\tstyleUrl: './my-vimar-page.component.css'\n})\nexport class MyVimarPageComponent implements OnInit {\n\tprivate readonly destroyRef = inject(DestroyRef);\n\tprivate readonly refresh$ = new Subject();\n\n\tpublic account$!: Observable;\n\tpublic isLoading = false;\n\tpublic error = '';\n\n\tconstructor(@Inject(VIMAR_CLOUD_API_SERVICE) private readonly service: IVimarCloudApiService) {}\n\n\tpublic ngOnInit(): void {\n\t\tthis.account$ = this.refresh$.pipe(\n\t\t\tstartWith(void 0),\n\t\t\tswitchMap(() =>\n\t\t\t\tthis.service.getLinkedAccount().pipe(\n\t\t\t\t\tcatchError((err) => {\n\t\t\t\t\t\tconsole.error('Errore durante il recupero dello stato account MyVimar:', err);\n\t\t\t\t\t\tthis.error = 'Impossibile recuperare lo stato MyVimar. Riprova tra qualche istante.';\n\t\t\t\t\t\treturn of({ email: '', isLinked: false });\n\t\t\t\t\t})\n\t\t\t\t)\n\t\t\t)\n\t\t);\n\t}\n\n\tpublic onLinkAccount(): void {\n\t\tthis.error = '';\n\t\tthis.service.initiateOAuth();\n\t}\n\n\tpublic onUnlinkAccount(): void {\n\t\tthis.error = '';\n\t\tthis.isLoading = true;\n\n\t\tthis.service\n\t\t\t.unlinkAccount()\n\t\t\t.pipe(takeUntilDestroyed(this.destroyRef))\n\t\t\t.subscribe({\n\t\t\t\tnext: () => {\n\t\t\t\t\tthis.isLoading = false;\n\t\t\t\t\tthis.refresh$.next();\n\t\t\t\t},\n\t\t\t\terror: (err) => {\n\t\t\t\t\tconsole.error('Errore durante la rimozione account MyVimar:', err);\n\t\t\t\t\tthis.error = 'Errore durante la rimozione dell\\'account MyVimar.';\n\t\t\t\t\tthis.isLoading = false;\n\t\t\t\t}\n\t\t\t});\n\t}\n}\n","\n \n \n\n
\n \n

Integrazione

\n\n \n
\n

Integrazione MyVimar

\n

\n Collega o rimuovi l'account MyVimar associato al sistema.\n

\n
\n\n \n Stato account\n
\n \n\n
\n @if (account$ | async; as account) {\n \n } @else {\n \n Caricamento stato account in corso...\n
\n }\n \n \n \n"],mappings:"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",names:["\u0275\u0275domElementStart","\u0275\u0275text","\u0275\u0275domElementEnd","\u0275\u0275advance","\u0275\u0275textInterpolate1","ctx_r0","error","\u0275\u0275domListener","\u0275\u0275restoreView","_r2","\u0275\u0275nextContext","\u0275\u0275resetView","onUnlinkAccount","\u0275\u0275conditionalCreate","MyVimarAccountStatusComponent_Conditional_2_Conditional_9_Template","MyVimarAccountStatusComponent_Conditional_2_Conditional_10_Template","\u0275\u0275textInterpolate","account","email","\u0275\u0275domProperty","isLoading","\u0275\u0275conditional","_r3","onLinkAccount","MyVimarAccountStatusComponent","input","required","linkClicked","output","unlinkClicked","emit","selectors","inputs","outputs","decls","vars","consts","template","rf","ctx","MyVimarAccountStatusComponent_Conditional_1_Template","MyVimarAccountStatusComponent_Conditional_2_Template","MyVimarAccountStatusComponent_Conditional_3_Template","isLinked","\u0275\u0275elementStart","\u0275\u0275listener","\u0275\u0275restoreView","_r1","ctx_r1","\u0275\u0275nextContext","\u0275\u0275resetView","onLinkAccount","onUnlinkAccount","\u0275\u0275elementEnd","\u0275\u0275property","ctx","isLoading","error","\u0275\u0275text","MyVimarPageComponent","service","destroyRef","inject","DestroyRef","refresh$","Subject","account$","constructor","ngOnInit","pipe","startWith","switchMap","getLinkedAccount","catchError","err","console","of","email","isLinked","initiateOAuth","unlinkAccount","takeUntilDestroyed","subscribe","next","\u0275\u0275directiveInject","VIMAR_CLOUD_API_SERVICE","selectors","decls","vars","consts","template","rf","\u0275\u0275element","\u0275\u0275conditionalCreate","MyVimarPageComponent_Conditional_16_Template","\u0275\u0275conditionalBranchCreate","MyVimarPageComponent_Conditional_18_Template","\u0275\u0275advance","\u0275\u0275conditional","tmp_0_0","\u0275\u0275pipeBind1","MyVimarAccountStatusComponent","AsyncPipe","styles"]},_coverageSchema:"1a1c01bbd47fc00a2c39e90264f33305004495a9",hash:"1107daec80f7ee3b6d5b97a330f6413fe0115124"};var coverage=global[gcv]||(global[gcv]={});if(!coverage[path]||coverage[path].hash!==hash){coverage[path]=coverageData;}var actualCoverage=coverage[path];{// @ts-ignore +cov_28xog0fcdb=function(){return actualCoverage;};}return actualCoverage;}cov_28xog0fcdb();import{a as N}from"./chunk-6V7HPFWL.js";import{a as O}from"./chunk-NAQGW5AE.js";import{h as $}from"./chunk-F6OGAIBI.js";import{$ as L,Ab as i,Bb as D,Cb as U,E as V,F as w,Fa as A,Ib as j,Jb as z,Ka as g,Q as S,Sb as v,Tb as C,V as u,W as p,Ya as f,Za as P,_a as x,cb as T,d as h,db as d,eb as s,fb as I,gb as a,h as E,hb as l,jb as _,kb as b,nb as R,ob as y,pb as c,w as M,wa as r}from"./chunk-RYTNMYZW.js";import"./chunk-VCZGUBMY.js";function q(e,m){cov_28xog0fcdb().f[0]++;cov_28xog0fcdb().s[0]++;if((cov_28xog0fcdb().b[1][0]++,e&1)&&(cov_28xog0fcdb().b[1][1]++,a(0,"p",1),i(1),l()),e&2){cov_28xog0fcdb().b[0][0]++;let t=(cov_28xog0fcdb().s[1]++,c());cov_28xog0fcdb().s[2]++;r(),U(" ",t.error()," ");}else{cov_28xog0fcdb().b[0][1]++;}}function K(e,m){cov_28xog0fcdb().f[1]++;cov_28xog0fcdb().s[3]++;(cov_28xog0fcdb().b[2][0]++,e&1)&&(cov_28xog0fcdb().b[2][1]++,i(0," Rimozione in corso... "));}function G(e,m){cov_28xog0fcdb().f[2]++;cov_28xog0fcdb().s[4]++;(cov_28xog0fcdb().b[3][0]++,e&1)&&(cov_28xog0fcdb().b[3][1]++,i(0," Rimuovi account "));}function J(e,m){cov_28xog0fcdb().f[3]++;cov_28xog0fcdb().s[5]++;if(e&1){cov_28xog0fcdb().b[4][0]++;let t=(cov_28xog0fcdb().s[6]++,_());cov_28xog0fcdb().s[7]++;a(0,"div",2)(1,"div",3)(2,"p",4),i(3,"Account collegato"),l(),a(4,"p",5),i(5," Account collegato: "),a(6,"strong",6),i(7),l()()(),a(8,"button",7),y("click",function(){cov_28xog0fcdb().f[4]++;cov_28xog0fcdb().s[8]++;u(t);let o=(cov_28xog0fcdb().s[9]++,c());cov_28xog0fcdb().s[10]++;return p(o.onUnlinkAccount());}),f(9,K,1,0)(10,G,1,0),l()();}else{cov_28xog0fcdb().b[4][1]++;}cov_28xog0fcdb().s[11]++;if(e&2){cov_28xog0fcdb().b[5][0]++;let t=(cov_28xog0fcdb().s[12]++,c());cov_28xog0fcdb().s[13]++;r(7),D(t.account().email),r(),b("disabled",t.isLoading()),r(),x(t.isLoading()?(cov_28xog0fcdb().b[6][0]++,9):(cov_28xog0fcdb().b[6][1]++,10));}else{cov_28xog0fcdb().b[5][1]++;}}function W(e,m){cov_28xog0fcdb().f[5]++;cov_28xog0fcdb().s[14]++;if(e&1){cov_28xog0fcdb().b[7][0]++;let t=(cov_28xog0fcdb().s[15]++,_());cov_28xog0fcdb().s[16]++;a(0,"div",2)(1,"div",8)(2,"p",4),i(3,"Nessun account collegato"),l(),a(4,"p",5),i(5,"Nessun account MyVimar collegato."),l()(),a(6,"button",7),y("click",function(){cov_28xog0fcdb().f[6]++;cov_28xog0fcdb().s[17]++;u(t);let o=(cov_28xog0fcdb().s[18]++,c());cov_28xog0fcdb().s[19]++;return p(o.onLinkAccount());}),i(7," Collega account MyVimar "),l()();}else{cov_28xog0fcdb().b[7][1]++;}cov_28xog0fcdb().s[20]++;if(e&2){cov_28xog0fcdb().b[8][0]++;let t=(cov_28xog0fcdb().s[21]++,c());cov_28xog0fcdb().s[22]++;r(6),b("disabled",t.isLoading());}else{cov_28xog0fcdb().b[8][1]++;}}var B=(cov_28xog0fcdb().s[23]++,(()=>{cov_28xog0fcdb().f[7]++;class e{account=(cov_28xog0fcdb().s[24]++,C.required());isLoading=(cov_28xog0fcdb().s[25]++,C(!1));error=(cov_28xog0fcdb().s[26]++,C(""));linkClicked=(cov_28xog0fcdb().s[27]++,v());unlinkClicked=(cov_28xog0fcdb().s[28]++,v());onLinkAccount(){cov_28xog0fcdb().f[8]++;cov_28xog0fcdb().s[29]++;this.linkClicked.emit();}onUnlinkAccount(){cov_28xog0fcdb().f[9]++;cov_28xog0fcdb().s[30]++;this.unlinkClicked.emit();}static ɵfac=(cov_28xog0fcdb().s[31]++,function(n){cov_28xog0fcdb().f[10]++;cov_28xog0fcdb().s[32]++;return new((cov_28xog0fcdb().b[9][0]++,n)||(cov_28xog0fcdb().b[9][1]++,e))();});static ɵcmp=(cov_28xog0fcdb().s[33]++,g({type:e,selectors:[["app-my-vimar-account-status"]],inputs:{account:[1,"account"],isLoading:[1,"isLoading"],error:[1,"error"]},outputs:{linkClicked:"linkClicked",unlinkClicked:"unlinkClicked"},decls:4,vars:2,consts:[[1,"grid","gap-4","rounded-2xl","border","border-[#1f2933]/10","bg-[#fffdf8]/95","p-5","shadow-sm","sm:p-6"],["role","alert",1,"rounded-xl","border","border-[#fecaca]","bg-[#fef2f2]","px-4","py-3","text-sm","font-semibold","text-[#b91c1c]"],[1,"grid","gap-4"],[1,"rounded-xl","border","border-[#fcd34d]/35","bg-[#fff7d1]","px-4","py-4","text-sm","leading-6","text-[#5c6470]"],[1,"text-xs","font-semibold","uppercase","tracking-[0.12em]","text-[#7c5d00]"],[1,"mt-2"],[1,"text-[#1f2933]"],["type","button",1,"cursor-pointer","inline-flex","w-fit","items-center","justify-center","rounded-xl","bg-gradient-to-r","from-[#fcd34d]","to-[#fcd34d]","px-4","py-3","text-sm","font-bold","text-[#1f2933]","transition","hover:-translate-y-px","hover:brightness-105","disabled:cursor-not-allowed","disabled:opacity-70",3,"click","disabled"],[1,"rounded-xl","border","border-dashed","border-[#fcd34d]/70","bg-[#fff7d1]","px-4","py-4","text-sm","leading-6","text-[#5c6470]"]],template:function(n,o){cov_28xog0fcdb().f[11]++;cov_28xog0fcdb().s[34]++;(cov_28xog0fcdb().b[10][0]++,n&1)&&(cov_28xog0fcdb().b[10][1]++,a(0,"section",0),f(1,q,2,1,"p",1),f(2,J,11,3,"div",2)(3,W,8,1,"div",2),l()),(cov_28xog0fcdb().b[11][0]++,n&2)&&(cov_28xog0fcdb().b[11][1]++,r(),x(o.error()?(cov_28xog0fcdb().b[12][0]++,1):(cov_28xog0fcdb().b[12][1]++,-1)),r(),x(o.account().isLinked?(cov_28xog0fcdb().b[13][0]++,2):(cov_28xog0fcdb().b[13][1]++,3)));},styles:[`[_nghost-%COMP%]{display:block} +/*# sourceMappingURL=my-vimar-account-status.component-K4C5LFKP.css.map */`]}));}cov_28xog0fcdb().s[35]++;return e;})());function H(e,m){cov_28xog0fcdb().f[12]++;cov_28xog0fcdb().s[36]++;if(e&1){cov_28xog0fcdb().b[14][0]++;let t=(cov_28xog0fcdb().s[37]++,_());cov_28xog0fcdb().s[38]++;d(0,"app-my-vimar-account-status",14),R("linkClicked",function(){cov_28xog0fcdb().f[13]++;cov_28xog0fcdb().s[39]++;u(t);let o=(cov_28xog0fcdb().s[40]++,c());cov_28xog0fcdb().s[41]++;return p(o.onLinkAccount());})("unlinkClicked",function(){cov_28xog0fcdb().f[14]++;cov_28xog0fcdb().s[42]++;u(t);let o=(cov_28xog0fcdb().s[43]++,c());cov_28xog0fcdb().s[44]++;return p(o.onUnlinkAccount());}),s();}else{cov_28xog0fcdb().b[14][1]++;}cov_28xog0fcdb().s[45]++;if(e&2){cov_28xog0fcdb().b[15][0]++;let t=(cov_28xog0fcdb().s[46]++,c());cov_28xog0fcdb().s[47]++;T("account",m)("isLoading",t.isLoading)("error",t.error);}else{cov_28xog0fcdb().b[15][1]++;}}function Q(e,m){cov_28xog0fcdb().f[15]++;cov_28xog0fcdb().s[48]++;(cov_28xog0fcdb().b[16][0]++,e&1)&&(cov_28xog0fcdb().b[16][1]++,d(0,"div",13),i(1," Caricamento stato account in corso... "),s());}var de=(cov_28xog0fcdb().s[49]++,(()=>{cov_28xog0fcdb().f[16]++;class e{service;destroyRef=(cov_28xog0fcdb().s[50]++,S(L));refresh$=(cov_28xog0fcdb().s[51]++,new h());account$;isLoading=(cov_28xog0fcdb().s[52]++,!1);error=(cov_28xog0fcdb().s[53]++,"");constructor(t){cov_28xog0fcdb().f[17]++;cov_28xog0fcdb().s[54]++;this.service=t;}ngOnInit(){cov_28xog0fcdb().f[18]++;cov_28xog0fcdb().s[55]++;this.account$=this.refresh$.pipe(V(void 0),w(()=>{cov_28xog0fcdb().f[19]++;cov_28xog0fcdb().s[56]++;return this.service.getLinkedAccount().pipe(M(t=>{cov_28xog0fcdb().f[20]++;cov_28xog0fcdb().s[57]++;return console.error("Errore durante il recupero dello stato account MyVimar:",t),this.error="Impossibile recuperare lo stato MyVimar. Riprova tra qualche istante.",E({email:"",isLinked:!1});}));}));}onLinkAccount(){cov_28xog0fcdb().f[21]++;cov_28xog0fcdb().s[58]++;this.error="",this.service.initiateOAuth();}onUnlinkAccount(){cov_28xog0fcdb().f[22]++;cov_28xog0fcdb().s[59]++;this.error="",this.isLoading=!0,this.service.unlinkAccount().pipe(O(this.destroyRef)).subscribe({next:()=>{cov_28xog0fcdb().f[23]++;cov_28xog0fcdb().s[60]++;this.isLoading=!1,this.refresh$.next();},error:t=>{cov_28xog0fcdb().f[24]++;cov_28xog0fcdb().s[61]++;console.error("Errore durante la rimozione account MyVimar:",t),this.error="Errore durante la rimozione dell'account MyVimar.",this.isLoading=!1;}});}static ɵfac=(cov_28xog0fcdb().s[62]++,function(n){cov_28xog0fcdb().f[25]++;cov_28xog0fcdb().s[63]++;return new((cov_28xog0fcdb().b[17][0]++,n)||(cov_28xog0fcdb().b[17][1]++,e))(A(N));});static ɵcmp=(cov_28xog0fcdb().s[64]++,g({type:e,selectors:[["app-my-vimar-page"]],decls:19,vars:3,consts:[[1,"relative","grid","min-h-[100dvh]","place-items-center","overflow-hidden","bg-[radial-gradient(circle_at_12%_18%,#fde68a_0_8%,transparent_45%),radial-gradient(circle_at_82%_12%,#fcd34d_0_10%,transparent_48%),linear-gradient(140deg,#fff7d1_0%,#fef3c7_46%,#fef3c7_100%)]","px-4","py-6","text-[#1f2933]"],["aria-hidden","true",1,"pointer-events-none","absolute","-left-36","bottom-[-8rem]","h-[28rem]","w-[28rem]","rounded-full","bg-[#fcd34d]/25","blur-3xl"],["aria-hidden","true",1,"pointer-events-none","absolute","-right-40","top-[-8rem]","h-[28rem]","w-[28rem]","rounded-full","bg-[#fcd34d]/25","blur-3xl"],[1,"relative","z-10","w-full","max-w-3xl"],[1,"rounded-[1.25rem]","border","border-[#1f2933]/10","bg-[#fffdf8]","p-6","shadow-[0_24px_54px_rgba(17,24,39,0.18),0_3px_12px_rgba(252,211,77,0.4)]","sm:p-8"],[1,"text-[0.72rem]","font-bold","uppercase","tracking-[0.13em]","text-[#fcd34d]"],[1,"mt-2","flex","flex-col","gap-3","border-b","border-[#1f2933]/10","pb-5","sm:flex-row","sm:items-end","sm:justify-between"],[1,"space-y-2"],[1,"text-[clamp(1.55rem,2.7vw,2rem)]","font-bold","leading-tight","text-[#1f2933]"],[1,"max-w-2xl","text-sm","font-medium","leading-6","text-[#5c6470]"],[1,"inline-flex","w-fit","items-center","rounded-full","border","border-[#fcd34d]/50","bg-[#fff7d1]","px-3","py-1","text-xs","font-semibold","text-[#7c5d00]","shadow-sm"],[1,"mt-6"],[3,"account","isLoading","error"],[1,"rounded-xl","border","border-[#b7c3d1]/70","bg-white/80","px-4","py-4","text-sm","font-medium","text-[#5c6470]","shadow-sm"],[3,"linkClicked","unlinkClicked","account","isLoading","error"]],template:function(n,o){cov_28xog0fcdb().f[26]++;cov_28xog0fcdb().s[65]++;if((cov_28xog0fcdb().b[19][0]++,n&1)&&(cov_28xog0fcdb().b[19][1]++,d(0,"section",0),I(1,"div",1)(2,"div",2),d(3,"div",3)(4,"article",4)(5,"p",5),i(6,"Integrazione"),s(),d(7,"div",6)(8,"div",7)(9,"h1",8),i(10,"Integrazione MyVimar"),s(),d(11,"p",9),i(12," Collega o rimuovi l'account MyVimar associato al sistema. "),s()(),d(13,"div",10),i(14," Stato account "),s()(),d(15,"div",11),f(16,H,1,3,"app-my-vimar-account-status",12),j(17,"async"),P(18,Q,2,0,"div",13),s()()()()),n&2){cov_28xog0fcdb().b[18][0]++;let k;cov_28xog0fcdb().s[66]++;r(16),x((k=z(17,1,o.account$))?(cov_28xog0fcdb().b[20][0]++,16):(cov_28xog0fcdb().b[20][1]++,18),k);}else{cov_28xog0fcdb().b[18][1]++;}},dependencies:[B,$],styles:[`[_nghost-%COMP%]{display:block} +/*# sourceMappingURL=my-vimar-page.component-B2RGEUUJ.css.map */`]}));}cov_28xog0fcdb().s[67]++;return e;})());export{de as MyVimarPageComponent};//# sourceMappingURL=chunk-S6DDTQ2X.js.map +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJhIiwiaSIsImwiLCJlIiwiY292XzI4eG9nMGZjZGIiLCJiIiwidCIsInMiLCJjIiwiciIsIlUiLCJlcnJvciIsIksiLCJtIiwiZiIsIkciLCJKIiwiXyIsInkiLCJ1IiwibyIsInAiLCJvblVubGlua0FjY291bnQiLCJEIiwiYWNjb3VudCIsImVtYWlsIiwiaXNMb2FkaW5nIiwieCIsIlciLCJvbkxpbmtBY2NvdW50IiwiQiIsIkMiLCJyZXF1aXJlZCIsImxpbmtDbGlja2VkIiwidiIsInVubGlua0NsaWNrZWQiLCJlbWl0IiwiybVmYWMiLCJuIiwiybVjbXAiLCJnIiwidHlwZSIsInNlbGVjdG9ycyIsImlucHV0cyIsIm91dHB1dHMiLCJkZWNscyIsInZhcnMiLCJjb25zdHMiLCJ0ZW1wbGF0ZSIsInEiLCJpc0xpbmtlZCIsInN0eWxlcyIsIkgiLCJkIiwiUiIsIlQiLCJRIiwiZGUiLCJzZXJ2aWNlIiwiZGVzdHJveVJlZiIsIlMiLCJMIiwicmVmcmVzaCQiLCJoIiwiYWNjb3VudCQiLCJjb25zdHJ1Y3RvciIsIm5nT25Jbml0IiwicGlwZSIsIlYiLCJ3IiwiZ2V0TGlua2VkQWNjb3VudCIsIk0iLCJjb25zb2xlIiwiRSIsImluaXRpYXRlT0F1dGgiLCJ1bmxpbmtBY2NvdW50IiwiTyIsInN1YnNjcmliZSIsIm5leHQiLCJBIiwiTiIsIkkiLCJqIiwiUCIsImsiLCJ6IiwiZGVwZW5kZW5jaWVzIiwiJCIsIk15VmltYXJQYWdlQ29tcG9uZW50Il0sInNvdXJjZXMiOlsic3JjL2FwcC9mZWF0dXJlcy9teS12aW1hci1pbnRlZ3JhdGlvbi9jb21wb25lbnRzL215LXZpbWFyLWFjY291bnQtc3RhdHVzL215LXZpbWFyLWFjY291bnQtc3RhdHVzLmNvbXBvbmVudC50cyIsInNyYy9hcHAvZmVhdHVyZXMvbXktdmltYXItaW50ZWdyYXRpb24vY29tcG9uZW50cy9teS12aW1hci1hY2NvdW50LXN0YXR1cy9teS12aW1hci1hY2NvdW50LXN0YXR1cy5jb21wb25lbnQuaHRtbCIsInNyYy9hcHAvZmVhdHVyZXMvbXktdmltYXItaW50ZWdyYXRpb24vcGFnZXMvbXktdmltYXIvbXktdmltYXItcGFnZS5jb21wb25lbnQudHMiLCJzcmMvYXBwL2ZlYXR1cmVzL215LXZpbWFyLWludGVncmF0aW9uL3BhZ2VzL215LXZpbWFyL215LXZpbWFyLXBhZ2UuY29tcG9uZW50Lmh0bWwiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBpbnB1dCwgb3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNeVZpbWFyQWNjb3VudCB9IGZyb20gJy4uLy4uL21vZGVscy9teS12aW1hci1hY2NvdW50Lm1vZGVsJztcblxuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiAnYXBwLW15LXZpbWFyLWFjY291bnQtc3RhdHVzJyxcblx0c3RhbmRhbG9uZTogdHJ1ZSxcblx0dGVtcGxhdGVVcmw6ICcuL215LXZpbWFyLWFjY291bnQtc3RhdHVzLmNvbXBvbmVudC5odG1sJyxcblx0c3R5bGVVcmw6ICcuL215LXZpbWFyLWFjY291bnQtc3RhdHVzLmNvbXBvbmVudC5jc3MnXG59KVxuZXhwb3J0IGNsYXNzIE15VmltYXJBY2NvdW50U3RhdHVzQ29tcG9uZW50IHtcblx0cHVibGljIHJlYWRvbmx5IGFjY291bnQgPSBpbnB1dC5yZXF1aXJlZDxNeVZpbWFyQWNjb3VudD4oKTtcblx0cHVibGljIHJlYWRvbmx5IGlzTG9hZGluZyA9IGlucHV0KGZhbHNlKTtcblx0cHVibGljIHJlYWRvbmx5IGVycm9yID0gaW5wdXQoJycpO1xuXG5cdHB1YmxpYyByZWFkb25seSBsaW5rQ2xpY2tlZCA9IG91dHB1dDx2b2lkPigpO1xuXHRwdWJsaWMgcmVhZG9ubHkgdW5saW5rQ2xpY2tlZCA9IG91dHB1dDx2b2lkPigpO1xuXG5cdHB1YmxpYyBvbkxpbmtBY2NvdW50KCk6IHZvaWQge1xuXHRcdHRoaXMubGlua0NsaWNrZWQuZW1pdCgpO1xuXHR9XG5cblx0cHVibGljIG9uVW5saW5rQWNjb3VudCgpOiB2b2lkIHtcblx0XHR0aGlzLnVubGlua0NsaWNrZWQuZW1pdCgpO1xuXHR9XG59XG4iLCI8c2VjdGlvbiBjbGFzcz1cImdyaWQgZ2FwLTQgcm91bmRlZC0yeGwgYm9yZGVyIGJvcmRlci1bIzFmMjkzM10vMTAgYmctWyNmZmZkZjhdLzk1IHAtNSBzaGFkb3ctc20gc206cC02XCI+XG4gIEBpZiAoZXJyb3IoKSkge1xuICA8cCBjbGFzcz1cInJvdW5kZWQteGwgYm9yZGVyIGJvcmRlci1bI2ZlY2FjYV0gYmctWyNmZWYyZjJdIHB4LTQgcHktMyB0ZXh0LXNtIGZvbnQtc2VtaWJvbGQgdGV4dC1bI2I5MWMxY11cIlxuICAgIHJvbGU9XCJhbGVydFwiPlxuICAgIHt7IGVycm9yKCkgfX1cbiAgPC9wPlxuICB9XG5cbiAgQGlmIChhY2NvdW50KCkuaXNMaW5rZWQpIHtcbiAgPGRpdiBjbGFzcz1cImdyaWQgZ2FwLTRcIj5cbiAgICA8ZGl2IGNsYXNzPVwicm91bmRlZC14bCBib3JkZXIgYm9yZGVyLVsjZmNkMzRkXS8zNSBiZy1bI2ZmZjdkMV0gcHgtNCBweS00IHRleHQtc20gbGVhZGluZy02IHRleHQtWyM1YzY0NzBdXCI+XG4gICAgICA8cCBjbGFzcz1cInRleHQteHMgZm9udC1zZW1pYm9sZCB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMTJlbV0gdGV4dC1bIzdjNWQwMF1cIj5BY2NvdW50IGNvbGxlZ2F0bzwvcD5cbiAgICAgIDxwIGNsYXNzPVwibXQtMlwiPlxuICAgICAgICBBY2NvdW50IGNvbGxlZ2F0bzogPHN0cm9uZyBjbGFzcz1cInRleHQtWyMxZjI5MzNdXCI+e3sgYWNjb3VudCgpLmVtYWlsIH19PC9zdHJvbmc+XG4gICAgICA8L3A+XG4gICAgPC9kaXY+XG5cbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBbZGlzYWJsZWRdPVwiaXNMb2FkaW5nKClcIiAoY2xpY2spPVwib25VbmxpbmtBY2NvdW50KClcIlxuICAgICAgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBpbmxpbmUtZmxleCB3LWZpdCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZC14bCBiZy1ncmFkaWVudC10by1yIGZyb20tWyNmY2QzNGRdIHRvLVsjZmNkMzRkXSBweC00IHB5LTMgdGV4dC1zbSBmb250LWJvbGQgdGV4dC1bIzFmMjkzM10gdHJhbnNpdGlvbiBob3ZlcjotdHJhbnNsYXRlLXktcHggaG92ZXI6YnJpZ2h0bmVzcy0xMDUgZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkIGRpc2FibGVkOm9wYWNpdHktNzBcIj5cbiAgICAgIEBpZiAoaXNMb2FkaW5nKCkpIHtcbiAgICAgIFJpbW96aW9uZSBpbiBjb3Jzby4uLlxuICAgICAgfSBAZWxzZSB7XG4gICAgICBSaW11b3ZpIGFjY291bnRcbiAgICAgIH1cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG4gIH0gQGVsc2Uge1xuICA8ZGl2IGNsYXNzPVwiZ3JpZCBnYXAtNFwiPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwicm91bmRlZC14bCBib3JkZXIgYm9yZGVyLWRhc2hlZCBib3JkZXItWyNmY2QzNGRdLzcwIGJnLVsjZmZmN2QxXSBweC00IHB5LTQgdGV4dC1zbSBsZWFkaW5nLTYgdGV4dC1bIzVjNjQ3MF1cIj5cbiAgICAgIDxwIGNsYXNzPVwidGV4dC14cyBmb250LXNlbWlib2xkIHVwcGVyY2FzZSB0cmFja2luZy1bMC4xMmVtXSB0ZXh0LVsjN2M1ZDAwXVwiPk5lc3N1biBhY2NvdW50IGNvbGxlZ2F0bzwvcD5cbiAgICAgIDxwIGNsYXNzPVwibXQtMlwiPk5lc3N1biBhY2NvdW50IE15VmltYXIgY29sbGVnYXRvLjwvcD5cbiAgICA8L2Rpdj5cblxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIFtkaXNhYmxlZF09XCJpc0xvYWRpbmcoKVwiIChjbGljayk9XCJvbkxpbmtBY2NvdW50KClcIlxuICAgICAgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBpbmxpbmUtZmxleCB3LWZpdCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZC14bCBiZy1ncmFkaWVudC10by1yIGZyb20tWyNmY2QzNGRdIHRvLVsjZmNkMzRkXSBweC00IHB5LTMgdGV4dC1zbSBmb250LWJvbGQgdGV4dC1bIzFmMjkzM10gdHJhbnNpdGlvbiBob3ZlcjotdHJhbnNsYXRlLXktcHggaG92ZXI6YnJpZ2h0bmVzcy0xMDUgZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkIGRpc2FibGVkOm9wYWNpdHktNzBcIj5cbiAgICAgIENvbGxlZ2EgYWNjb3VudCBNeVZpbWFyXG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuICB9XG48L3NlY3Rpb24+IiwiaW1wb3J0IHsgQXN5bmNQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgRGVzdHJveVJlZiwgSW5qZWN0LCBPbkluaXQsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgT2JzZXJ2YWJsZSwgb2YsIHN0YXJ0V2l0aCwgU3ViamVjdCwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBWSU1BUl9DTE9VRF9BUElfU0VSVklDRSwgdHlwZSBJVmltYXJDbG91ZEFwaVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL3NlcnZpY2VzL3ZpbWFyLWNsb3VkLWFwaS5zZXJ2aWNlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBNeVZpbWFyQWNjb3VudFN0YXR1c0NvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvbXktdmltYXItYWNjb3VudC1zdGF0dXMvbXktdmltYXItYWNjb3VudC1zdGF0dXMuY29tcG9uZW50JztcbmltcG9ydCB7IE15VmltYXJBY2NvdW50IH0gZnJvbSAnLi4vLi4vbW9kZWxzL215LXZpbWFyLWFjY291bnQubW9kZWwnO1xuXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6ICdhcHAtbXktdmltYXItcGFnZScsXG5cdHN0YW5kYWxvbmU6IHRydWUsXG5cdGltcG9ydHM6IFtBc3luY1BpcGUsIE15VmltYXJBY2NvdW50U3RhdHVzQ29tcG9uZW50XSxcblx0dGVtcGxhdGVVcmw6ICcuL215LXZpbWFyLXBhZ2UuY29tcG9uZW50Lmh0bWwnLFxuXHRzdHlsZVVybDogJy4vbXktdmltYXItcGFnZS5jb21wb25lbnQuY3NzJ1xufSlcbmV4cG9ydCBjbGFzcyBNeVZpbWFyUGFnZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cdHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcblx0cHJpdmF0ZSByZWFkb25seSByZWZyZXNoJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cblx0cHVibGljIGFjY291bnQkITogT2JzZXJ2YWJsZTxNeVZpbWFyQWNjb3VudD47XG5cdHB1YmxpYyBpc0xvYWRpbmcgPSBmYWxzZTtcblx0cHVibGljIGVycm9yID0gJyc7XG5cblx0Y29uc3RydWN0b3IoQEluamVjdChWSU1BUl9DTE9VRF9BUElfU0VSVklDRSkgcHJpdmF0ZSByZWFkb25seSBzZXJ2aWNlOiBJVmltYXJDbG91ZEFwaVNlcnZpY2UpIHt9XG5cblx0cHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuXHRcdHRoaXMuYWNjb3VudCQgPSB0aGlzLnJlZnJlc2gkLnBpcGUoXG5cdFx0XHRzdGFydFdpdGgodm9pZCAwKSxcblx0XHRcdHN3aXRjaE1hcCgoKSA9PlxuXHRcdFx0XHR0aGlzLnNlcnZpY2UuZ2V0TGlua2VkQWNjb3VudCgpLnBpcGUoXG5cdFx0XHRcdFx0Y2F0Y2hFcnJvcigoZXJyKSA9PiB7XG5cdFx0XHRcdFx0XHRjb25zb2xlLmVycm9yKCdFcnJvcmUgZHVyYW50ZSBpbCByZWN1cGVybyBkZWxsbyBzdGF0byBhY2NvdW50IE15VmltYXI6JywgZXJyKTtcblx0XHRcdFx0XHRcdHRoaXMuZXJyb3IgPSAnSW1wb3NzaWJpbGUgcmVjdXBlcmFyZSBsbyBzdGF0byBNeVZpbWFyLiBSaXByb3ZhIHRyYSBxdWFsY2hlIGlzdGFudGUuJztcblx0XHRcdFx0XHRcdHJldHVybiBvZih7IGVtYWlsOiAnJywgaXNMaW5rZWQ6IGZhbHNlIH0pO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdClcblx0XHRcdClcblx0XHQpO1xuXHR9XG5cblx0cHVibGljIG9uTGlua0FjY291bnQoKTogdm9pZCB7XG5cdFx0dGhpcy5lcnJvciA9ICcnO1xuXHRcdHRoaXMuc2VydmljZS5pbml0aWF0ZU9BdXRoKCk7XG5cdH1cblxuXHRwdWJsaWMgb25VbmxpbmtBY2NvdW50KCk6IHZvaWQge1xuXHRcdHRoaXMuZXJyb3IgPSAnJztcblx0XHR0aGlzLmlzTG9hZGluZyA9IHRydWU7XG5cblx0XHR0aGlzLnNlcnZpY2Vcblx0XHRcdC51bmxpbmtBY2NvdW50KClcblx0XHRcdC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxuXHRcdFx0LnN1YnNjcmliZSh7XG5cdFx0XHRcdG5leHQ6ICgpID0+IHtcblx0XHRcdFx0XHR0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuXHRcdFx0XHRcdHRoaXMucmVmcmVzaCQubmV4dCgpO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRlcnJvcjogKGVycikgPT4ge1xuXHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoJ0Vycm9yZSBkdXJhbnRlIGxhIHJpbW96aW9uZSBhY2NvdW50IE15VmltYXI6JywgZXJyKTtcblx0XHRcdFx0XHR0aGlzLmVycm9yID0gJ0Vycm9yZSBkdXJhbnRlIGxhIHJpbW96aW9uZSBkZWxsXFwnYWNjb3VudCBNeVZpbWFyLic7XG5cdFx0XHRcdFx0dGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdH1cbn1cbiIsIjxzZWN0aW9uXG4gIGNsYXNzPVwicmVsYXRpdmUgZ3JpZCBtaW4taC1bMTAwZHZoXSBwbGFjZS1pdGVtcy1jZW50ZXIgb3ZlcmZsb3ctaGlkZGVuIGJnLVtyYWRpYWwtZ3JhZGllbnQoY2lyY2xlX2F0XzEyJV8xOCUsI2ZkZTY4YV8wXzglLHRyYW5zcGFyZW50XzQ1JSkscmFkaWFsLWdyYWRpZW50KGNpcmNsZV9hdF84MiVfMTIlLCNmY2QzNGRfMF8xMCUsdHJhbnNwYXJlbnRfNDglKSxsaW5lYXItZ3JhZGllbnQoMTQwZGVnLCNmZmY3ZDFfMCUsI2ZlZjNjN180NiUsI2ZlZjNjN18xMDAlKV0gcHgtNCBweS02IHRleHQtWyMxZjI5MzNdXCI+XG4gIDxkaXZcbiAgICBjbGFzcz1cInBvaW50ZXItZXZlbnRzLW5vbmUgYWJzb2x1dGUgLWxlZnQtMzYgYm90dG9tLVstOHJlbV0gaC1bMjhyZW1dIHctWzI4cmVtXSByb3VuZGVkLWZ1bGwgYmctWyNmY2QzNGRdLzI1IGJsdXItM3hsXCJcbiAgICBhcmlhLWhpZGRlbj1cInRydWVcIj48L2Rpdj5cbiAgPGRpdlxuICAgIGNsYXNzPVwicG9pbnRlci1ldmVudHMtbm9uZSBhYnNvbHV0ZSAtcmlnaHQtNDAgdG9wLVstOHJlbV0gaC1bMjhyZW1dIHctWzI4cmVtXSByb3VuZGVkLWZ1bGwgYmctWyNmY2QzNGRdLzI1IGJsdXItM3hsXCJcbiAgICBhcmlhLWhpZGRlbj1cInRydWVcIj48L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwicmVsYXRpdmUgei0xMCB3LWZ1bGwgbWF4LXctM3hsXCI+XG4gICAgPGFydGljbGVcbiAgICAgIGNsYXNzPVwicm91bmRlZC1bMS4yNXJlbV0gYm9yZGVyIGJvcmRlci1bIzFmMjkzM10vMTAgYmctWyNmZmZkZjhdIHAtNiBzaGFkb3ctWzBfMjRweF81NHB4X3JnYmEoMTcsMjQsMzksMC4xOCksMF8zcHhfMTJweF9yZ2JhKDI1MiwyMTEsNzcsMC40KV0gc206cC04XCI+XG4gICAgICA8cCBjbGFzcz1cInRleHQtWzAuNzJyZW1dIGZvbnQtYm9sZCB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMTNlbV0gdGV4dC1bI2ZjZDM0ZF1cIj5JbnRlZ3JhemlvbmU8L3A+XG5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJtdC0yIGZsZXggZmxleC1jb2wgZ2FwLTMgYm9yZGVyLWIgYm9yZGVyLVsjMWYyOTMzXS8xMCBwYi01IHNtOmZsZXgtcm93IHNtOml0ZW1zLWVuZCBzbTpqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNwYWNlLXktMlwiPlxuICAgICAgICAgIDxoMSBjbGFzcz1cInRleHQtW2NsYW1wKDEuNTVyZW0sMi43dncsMnJlbSldIGZvbnQtYm9sZCBsZWFkaW5nLXRpZ2h0IHRleHQtWyMxZjI5MzNdXCI+SW50ZWdyYXppb25lIE15VmltYXI8L2gxPlxuICAgICAgICAgIDxwIGNsYXNzPVwibWF4LXctMnhsIHRleHQtc20gZm9udC1tZWRpdW0gbGVhZGluZy02IHRleHQtWyM1YzY0NzBdXCI+XG4gICAgICAgICAgICBDb2xsZWdhIG8gcmltdW92aSBsJ2FjY291bnQgTXlWaW1hciBhc3NvY2lhdG8gYWwgc2lzdGVtYS5cbiAgICAgICAgICA8L3A+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImlubGluZS1mbGV4IHctZml0IGl0ZW1zLWNlbnRlciByb3VuZGVkLWZ1bGwgYm9yZGVyIGJvcmRlci1bI2ZjZDM0ZF0vNTAgYmctWyNmZmY3ZDFdIHB4LTMgcHktMSB0ZXh0LXhzIGZvbnQtc2VtaWJvbGQgdGV4dC1bIzdjNWQwMF0gc2hhZG93LXNtXCI+XG4gICAgICAgICAgU3RhdG8gYWNjb3VudFxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwibXQtNlwiPlxuICAgICAgICBAaWYgKGFjY291bnQkIHwgYXN5bmM7IGFzIGFjY291bnQpIHtcbiAgICAgICAgPGFwcC1teS12aW1hci1hY2NvdW50LXN0YXR1cyBbYWNjb3VudF09XCJhY2NvdW50XCIgW2lzTG9hZGluZ109XCJpc0xvYWRpbmdcIiBbZXJyb3JdPVwiZXJyb3JcIlxuICAgICAgICAgIChsaW5rQ2xpY2tlZCk9XCJvbkxpbmtBY2NvdW50KClcIiAodW5saW5rQ2xpY2tlZCk9XCJvblVubGlua0FjY291bnQoKVwiIC8+XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJyb3VuZGVkLXhsIGJvcmRlciBib3JkZXItWyNiN2MzZDFdLzcwIGJnLXdoaXRlLzgwIHB4LTQgcHktNCB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtWyM1YzY0NzBdIHNoYWRvdy1zbVwiPlxuICAgICAgICAgIENhcmljYW1lbnRvIHN0YXRvIGFjY291bnQgaW4gY29yc28uLi5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgIDwvYXJ0aWNsZT5cbiAgPC9kaXY+XG48L3NlY3Rpb24+Il0sIm1hcHBpbmdzIjoiO2dwQkNFRUEsQ0FBQSxVQUVFQyxDQUFBLElBQ0ZDLENBQUEsSUFBQUMsQ0FBQSxJQUFBQyxjQUFBLEdBQUFDLENBQUEsYUFBQUMsQ0FBQSxFQUFBRixjQUFBLEdBQUFHLENBQUEsTUFBQUMsQ0FBQSxJQURFSixjQUFBLEdBQUFHLENBQUEsTUFBQUUsQ0FBQSxHQUFBQyxDQUFBLEtBQUFKLENBQUEsQ0FBQUssS0FBQSxjQUFBUCxjQUFBLEdBQUFDLENBQUEsb0JBQUFPLEVBQUFULENBQUEsQ0FBQVUsQ0FBQSxFQUFBVCxjQUFBLEdBQUFVLENBQUEsS0FBQVYsQ0FBQSxpQkFBQUcsQ0FBQSxPQUFBSCxjQUFBLEdBQUFDLENBQUEsU0FBQUYsQ0FBQSxNQUFBQyxjQUFBLEdBQUFDLENBQUEsU0FnQkVKLENBQUEseUNBQUFjLEVBQUFaLENBQUEsQ0FBQVUsQ0FBQSxFQUFBVCxjQUFBLEdBQUFVLENBQUEsS0FBQVYsQ0FBQSxpQkFBQUcsQ0FBQSxPQUFBSCxjQUFBLEdBQUFDLENBQUEsU0FBQUYsQ0FBQSxNQUFBQyxjQUFBLEdBQUFDLENBQUEsU0FFQUosQ0FBQSxtQ0FBQWUsRUFBQWIsQ0FBQSxDQUFBVSxDQUFBLEVBQUFU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 \ No newline at end of file diff --git a/frontend/dist-instrumented/chunk-S6DDTQ2X.js.map b/frontend/dist-instrumented/chunk-S6DDTQ2X.js.map new file mode 100644 index 00000000..9c8ca124 --- /dev/null +++ b/frontend/dist-instrumented/chunk-S6DDTQ2X.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["src/app/features/my-vimar-integration/components/my-vimar-account-status/my-vimar-account-status.component.ts", "src/app/features/my-vimar-integration/components/my-vimar-account-status/my-vimar-account-status.component.html", "src/app/features/my-vimar-integration/pages/my-vimar/my-vimar-page.component.ts", "src/app/features/my-vimar-integration/pages/my-vimar/my-vimar-page.component.html"], + "sourcesContent": ["import { Component, input, output } from '@angular/core';\nimport { MyVimarAccount } from '../../models/my-vimar-account.model';\n\n@Component({\n\tselector: 'app-my-vimar-account-status',\n\tstandalone: true,\n\ttemplateUrl: './my-vimar-account-status.component.html',\n\tstyleUrl: './my-vimar-account-status.component.css'\n})\nexport class MyVimarAccountStatusComponent {\n\tpublic readonly account = input.required();\n\tpublic readonly isLoading = input(false);\n\tpublic readonly error = input('');\n\n\tpublic readonly linkClicked = output();\n\tpublic readonly unlinkClicked = output();\n\n\tpublic onLinkAccount(): void {\n\t\tthis.linkClicked.emit();\n\t}\n\n\tpublic onUnlinkAccount(): void {\n\t\tthis.unlinkClicked.emit();\n\t}\n}\n", "
\n @if (error()) {\n

\n {{ error() }}\n

\n }\n\n @if (account().isLinked) {\n
\n
\n

Account collegato

\n

\n Account collegato: {{ account().email }}\n

\n
\n\n \n
\n } @else {\n
\n \n

Nessun account collegato

\n

Nessun account MyVimar collegato.

\n
\n\n \n \n }\n
", "import { AsyncPipe } from '@angular/common';\nimport { Component, DestroyRef, Inject, OnInit, inject } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { catchError, Observable, of, startWith, Subject, switchMap } from 'rxjs';\nimport { VIMAR_CLOUD_API_SERVICE, type IVimarCloudApiService } from '../../../../core/services/vimar-cloud-api.service.interface';\nimport { MyVimarAccountStatusComponent } from '../../components/my-vimar-account-status/my-vimar-account-status.component';\nimport { MyVimarAccount } from '../../models/my-vimar-account.model';\n\n@Component({\n\tselector: 'app-my-vimar-page',\n\tstandalone: true,\n\timports: [AsyncPipe, MyVimarAccountStatusComponent],\n\ttemplateUrl: './my-vimar-page.component.html',\n\tstyleUrl: './my-vimar-page.component.css'\n})\nexport class MyVimarPageComponent implements OnInit {\n\tprivate readonly destroyRef = inject(DestroyRef);\n\tprivate readonly refresh$ = new Subject();\n\n\tpublic account$!: Observable;\n\tpublic isLoading = false;\n\tpublic error = '';\n\n\tconstructor(@Inject(VIMAR_CLOUD_API_SERVICE) private readonly service: IVimarCloudApiService) {}\n\n\tpublic ngOnInit(): void {\n\t\tthis.account$ = this.refresh$.pipe(\n\t\t\tstartWith(void 0),\n\t\t\tswitchMap(() =>\n\t\t\t\tthis.service.getLinkedAccount().pipe(\n\t\t\t\t\tcatchError((err) => {\n\t\t\t\t\t\tconsole.error('Errore durante il recupero dello stato account MyVimar:', err);\n\t\t\t\t\t\tthis.error = 'Impossibile recuperare lo stato MyVimar. Riprova tra qualche istante.';\n\t\t\t\t\t\treturn of({ email: '', isLinked: false });\n\t\t\t\t\t})\n\t\t\t\t)\n\t\t\t)\n\t\t);\n\t}\n\n\tpublic onLinkAccount(): void {\n\t\tthis.error = '';\n\t\tthis.service.initiateOAuth();\n\t}\n\n\tpublic onUnlinkAccount(): void {\n\t\tthis.error = '';\n\t\tthis.isLoading = true;\n\n\t\tthis.service\n\t\t\t.unlinkAccount()\n\t\t\t.pipe(takeUntilDestroyed(this.destroyRef))\n\t\t\t.subscribe({\n\t\t\t\tnext: () => {\n\t\t\t\t\tthis.isLoading = false;\n\t\t\t\t\tthis.refresh$.next();\n\t\t\t\t},\n\t\t\t\terror: (err) => {\n\t\t\t\t\tconsole.error('Errore durante la rimozione account MyVimar:', err);\n\t\t\t\t\tthis.error = 'Errore durante la rimozione dell\\'account MyVimar.';\n\t\t\t\t\tthis.isLoading = false;\n\t\t\t\t}\n\t\t\t});\n\t}\n}\n", "\n \n \n\n
\n \n

Integrazione

\n\n \n
\n

Integrazione MyVimar

\n

\n Collega o rimuovi l'account MyVimar associato al sistema.\n

\n
\n\n \n Stato account\n
\n \n\n
\n @if (account$ | async; as account) {\n \n } @else {\n \n Caricamento stato account in corso...\n
\n }\n \n \n \n"], + "mappings": "6cCEEA,EAAA,EAAA,IAAA,CAAA,EAEEC,EAAA,CAAA,EACFC,EAAA,kBADEC,EAAA,EAAAC,EAAA,IAAAC,EAAAC,MAAA,EAAA,GAAA,wBAgBEL,EAAA,EAAA,yBAAA,uBAEAA,EAAA,EAAA,mBAAA,oCAbJD,EAAA,EAAA,MAAA,CAAA,EAAwB,EAAA,MAAA,CAAA,EACqF,EAAA,IAAA,CAAA,EAC7BC,EAAA,EAAA,mBAAA,EAAiBC,EAAA,EAC7FF,EAAA,EAAA,IAAA,CAAA,EACEC,EAAA,EAAA,sBAAA,EAAmBD,EAAA,EAAA,SAAA,CAAA,EAA+BC,EAAA,CAAA,EAAqBC,EAAA,EAAS,EAC9E,EAGNF,EAAA,EAAA,SAAA,CAAA,EAA+CO,EAAA,QAAA,UAAA,CAAAC,EAAAC,CAAA,EAAA,IAAAJ,EAAAK,EAAA,EAAA,OAAAC,EAASN,EAAAO,gBAAA,CAAiB,CAAA,CAAA,EAEvEC,EAAA,EAAAC,EAAA,EAAA,CAAA,EAAmB,GAAAC,EAAA,EAAA,CAAA,EAKrBb,EAAA,EAAS,oBAX6CC,EAAA,CAAA,EAAAa,EAAAX,EAAAY,QAAA,EAAAC,KAAA,EAIhCf,EAAA,EAAAgB,EAAA,WAAAd,EAAAe,UAAA,CAAA,EAEpBjB,EAAA,EAAAkB,EAAAhB,EAAAe,UAAA,EAAA,EAAA,EAAA,qCAQJpB,EAAA,EAAA,MAAA,CAAA,EAAwB,EAAA,MAAA,CAAA,EAEgG,EAAA,IAAA,CAAA,EACxCC,EAAA,EAAA,0BAAA,EAAwBC,EAAA,EACpGF,EAAA,EAAA,IAAA,CAAA,EAAgBC,EAAA,EAAA,mCAAA,EAAiCC,EAAA,EAAI,EAGvDF,EAAA,EAAA,SAAA,CAAA,EAA+CO,EAAA,QAAA,UAAA,CAAAC,EAAAc,CAAA,EAAA,IAAAjB,EAAAK,EAAA,EAAA,OAAAC,EAASN,EAAAkB,cAAA,CAAe,CAAA,CAAA,EAErEtB,EAAA,EAAA,2BAAA,EACFC,EAAA,EAAS,oBAHaC,EAAA,CAAA,EAAAgB,EAAA,WAAAd,EAAAe,UAAA,CAAA,GDzB1B,IAAaI,GAA6B,IAAA,CAApC,MAAOA,CAA6B,CACzBP,QAAUQ,EAAMC,SAAQ,EACxBN,UAAYK,EAAM,EAAK,EACvBnB,MAAQmB,EAAM,EAAE,EAEhBE,YAAcC,EAAM,EACpBC,cAAgBD,EAAM,EAE/BL,eAAa,CACnB,KAAKI,YAAYG,KAAI,CACtB,CAEOlB,iBAAe,CACrB,KAAKiB,cAAcC,KAAI,CACxB,4CAdYN,EAA6B,2BAA7BA,EAA6BO,UAAA,CAAA,CAAA,6BAAA,CAAA,EAAAC,OAAA,CAAAf,QAAA,CAAA,EAAA,SAAA,EAAAG,UAAA,CAAA,EAAA,WAAA,EAAAd,MAAA,CAAA,EAAA,OAAA,CAAA,EAAA2B,QAAA,CAAAN,YAAA,cAAAE,cAAA,eAAA,EAAAK,MAAA,EAAAC,KAAA,EAAAC,OAAA,CAAA,CAAA,EAAA,OAAA,QAAA,cAAA,SAAA,sBAAA,kBAAA,MAAA,YAAA,QAAA,EAAA,CAAA,OAAA,QAAA,EAAA,aAAA,SAAA,mBAAA,eAAA,OAAA,OAAA,UAAA,gBAAA,gBAAA,EAAA,CAAA,EAAA,OAAA,OAAA,EAAA,CAAA,EAAA,aAAA,SAAA,sBAAA,eAAA,OAAA,OAAA,UAAA,YAAA,gBAAA,EAAA,CAAA,EAAA,UAAA,gBAAA,YAAA,oBAAA,gBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,EAAA,gBAAA,EAAA,CAAA,OAAA,SAAA,EAAA,iBAAA,cAAA,QAAA,eAAA,iBAAA,aAAA,mBAAA,iBAAA,eAAA,OAAA,OAAA,UAAA,YAAA,iBAAA,aAAA,wBAAA,uBAAA,8BAAA,sBAAA,EAAA,QAAA,UAAA,EAAA,CAAA,EAAA,aAAA,SAAA,gBAAA,sBAAA,eAAA,OAAA,OAAA,UAAA,YAAA,gBAAA,CAAA,EAAAC,SAAA,SAAAC,EAAAC,EAAA,CAAAD,EAAA,ICT1CtC,EAAA,EAAA,UAAA,CAAA,EACEa,EAAA,EAAA2B,EAAA,EAAA,EAAA,IAAA,CAAA,EAOA3B,EAAA,EAAA4B,EAAA,GAAA,EAAA,MAAA,CAAA,EAA0B,EAAAC,EAAA,EAAA,EAAA,MAAA,CAAA,EAgC5BxC,EAAA,SAvCEC,EAAA,EAAAkB,EAAAkB,EAAAjC,MAAA,EAAA,EAAA,EAAA,EAOAH,EAAA,EAAAkB,EAAAkB,EAAAtB,QAAA,EAAA0B,SAAA,EAAA,CAAA;sFDCWnB,CAA6B,GAAA,oCGsBlCoB,EAAA,EAAA,8BAAA,EAAA,EACEC,EAAA,cAAA,UAAA,CAAAC,EAAAC,CAAA,EAAA,IAAAC,EAAAC,EAAA,EAAA,OAAAC,EAAeF,EAAAG,cAAA,CAAe,CAAA,CAAA,EAAC,gBAAA,UAAA,CAAAL,EAAAC,CAAA,EAAA,IAAAC,EAAAC,EAAA,EAAA,OAAAC,EAAkBF,EAAAI,gBAAA,CAAiB,CAAA,CAAA,EADpEC,EAAA,oBAA6BC,EAAA,UAAAC,CAAA,EAAmB,YAAAP,EAAAQ,SAAA,EAAwB,QAAAR,EAAAS,KAAA,yBAGxEb,EAAA,EAAA,MAAA,EAAA,EAEEc,EAAA,EAAA,yCAAA,EACFL,EAAA,GDtBR,IAAaM,IAAoB,IAAA,CAA3B,MAAOA,CAAoB,CAQ8BC,QAP7CC,WAAaC,EAAOC,CAAU,EAC9BC,SAAW,IAAIC,EAEzBC,SACAV,UAAY,GACZC,MAAQ,GAEfU,YAA8DP,EAA8B,CAA9B,KAAAA,QAAAA,CAAiC,CAExFQ,UAAQ,CACd,KAAKF,SAAW,KAAKF,SAASK,KAC7BC,EAAU,MAAM,EAChBC,EAAU,IACT,KAAKX,QAAQY,iBAAgB,EAAGH,KAC/BI,EAAYC,IACXC,QAAQlB,MAAM,0DAA2DiB,CAAG,EAC5E,KAAKjB,MAAQ,wEACNmB,EAAG,CAAEC,MAAO,GAAIC,SAAU,EAAK,CAAE,EACxC,CAAC,CACF,CACD,CAEH,CAEO3B,eAAa,CACnB,KAAKM,MAAQ,GACb,KAAKG,QAAQmB,cAAa,CAC3B,CAEO3B,iBAAe,CACrB,KAAKK,MAAQ,GACb,KAAKD,UAAY,GAEjB,KAAKI,QACHoB,cAAa,EACbX,KAAKY,EAAmB,KAAKpB,UAAU,CAAC,EACxCqB,UAAU,CACVC,KAAMA,IAAK,CACV,KAAK3B,UAAY,GACjB,KAAKQ,SAASmB,KAAI,CACnB,EACA1B,MAAQiB,GAAO,CACdC,QAAQlB,MAAM,+CAAgDiB,CAAG,EACjE,KAAKjB,MAAQ,oDACb,KAAKD,UAAY,EAClB,EACA,CACH,4CAhDYG,GAAoByB,EAQZC,CAAuB,CAAA,CAAA,2BAR/B1B,EAAoB2B,UAAA,CAAA,CAAA,mBAAA,CAAA,EAAAC,MAAA,GAAAC,KAAA,EAAAC,OAAA,CAAA,CAAA,EAAA,WAAA,OAAA,iBAAA,qBAAA,kBAAA,oMAAA,OAAA,OAAA,gBAAA,EAAA,CAAA,cAAA,OAAA,EAAA,sBAAA,WAAA,WAAA,iBAAA,YAAA,YAAA,eAAA,kBAAA,UAAA,EAAA,CAAA,cAAA,OAAA,EAAA,sBAAA,WAAA,YAAA,cAAA,YAAA,YAAA,eAAA,kBAAA,UAAA,EAAA,CAAA,EAAA,WAAA,OAAA,SAAA,WAAA,EAAA,CAAA,EAAA,oBAAA,SAAA,sBAAA,eAAA,MAAA,2EAAA,QAAA,EAAA,CAAA,EAAA,iBAAA,YAAA,YAAA,oBAAA,gBAAA,EAAA,CAAA,EAAA,OAAA,OAAA,WAAA,QAAA,WAAA,sBAAA,OAAA,cAAA,eAAA,oBAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,mCAAA,YAAA,gBAAA,gBAAA,EAAA,CAAA,EAAA,YAAA,UAAA,cAAA,YAAA,gBAAA,EAAA,CAAA,EAAA,cAAA,QAAA,eAAA,eAAA,SAAA,sBAAA,eAAA,OAAA,OAAA,UAAA,gBAAA,iBAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,EAAA,UAAA,YAAA,OAAA,EAAA,CAAA,EAAA,aAAA,SAAA,sBAAA,cAAA,OAAA,OAAA,UAAA,cAAA,iBAAA,WAAA,EAAA,CAAA,EAAA,cAAA,gBAAA,UAAA,YAAA,OAAA,CAAA,EAAAC,SAAA,SAAAC,EAAApC,EAAA,IAAAoC,EAAA,ICfjC/C,EAAA,EAAA,UAAA,CAAA,EAEEgD,EAAA,EAAA,MAAA,CAAA,EAE2B,EAAA,MAAA,CAAA,EAK3BhD,EAAA,EAAA,MAAA,CAAA,EAA4C,EAAA,UAAA,CAAA,EAE8G,EAAA,IAAA,CAAA,EACvEc,EAAA,EAAA,cAAA,EAAYL,EAAA,EAE3FT,EAAA,EAAA,MAAA,CAAA,EACiH,EAAA,MAAA,CAAA,EACxF,EAAA,KAAA,CAAA,EAC+Dc,EAAA,GAAA,sBAAA,EAAoBL,EAAA,EACxGT,EAAA,GAAA,IAAA,CAAA,EACEc,EAAA,GAAA,6DAAA,EACFL,EAAA,EAAI,EAGNT,EAAA,GAAA,MAAA,EAAA,EAEEc,EAAA,GAAA,iBAAA,EACFL,EAAA,EAAM,EAGRT,EAAA,GAAA,MAAA,EAAA,EACEiD,EAAA,GAAAC,EAAA,EAAA,EAAA,8BAAA,EAAA,gBAGEC,EAAA,GAAAC,EAAA,EAAA,EAAA,MAAA,EAAA,EAMJ3C,EAAA,EAAM,EACE,EACN,cAXA4C,EAAA,EAAA,EAAAC,GAAAC,EAAAC,EAAA,GAAA,EAAA7C,EAAAW,QAAA,GAAA,GAAA,GAAAiC,CAAA,kBDnBcE,EAAXC,CAAS,EAAAC,OAAA,CAAA;iEAAA,CAAA,CAAA,SAIP5C,CAAoB,GAAA", + "names": ["\u0275\u0275domElementStart", "\u0275\u0275text", "\u0275\u0275domElementEnd", "\u0275\u0275advance", "\u0275\u0275textInterpolate1", "ctx_r0", "error", "\u0275\u0275domListener", "\u0275\u0275restoreView", "_r2", "\u0275\u0275nextContext", "\u0275\u0275resetView", "onUnlinkAccount", "\u0275\u0275conditionalCreate", "MyVimarAccountStatusComponent_Conditional_2_Conditional_9_Template", "MyVimarAccountStatusComponent_Conditional_2_Conditional_10_Template", "\u0275\u0275textInterpolate", "account", "email", "\u0275\u0275domProperty", "isLoading", "\u0275\u0275conditional", "_r3", "onLinkAccount", "MyVimarAccountStatusComponent", "input", "required", "linkClicked", "output", "unlinkClicked", "emit", "selectors", "inputs", "outputs", "decls", "vars", "consts", "template", "rf", "ctx", "MyVimarAccountStatusComponent_Conditional_1_Template", "MyVimarAccountStatusComponent_Conditional_2_Template", "MyVimarAccountStatusComponent_Conditional_3_Template", "isLinked", "\u0275\u0275elementStart", "\u0275\u0275listener", "\u0275\u0275restoreView", "_r1", "ctx_r1", "\u0275\u0275nextContext", "\u0275\u0275resetView", "onLinkAccount", "onUnlinkAccount", "\u0275\u0275elementEnd", "\u0275\u0275property", "ctx", "isLoading", "error", "\u0275\u0275text", "MyVimarPageComponent", "service", "destroyRef", "inject", "DestroyRef", "refresh$", "Subject", "account$", "constructor", "ngOnInit", "pipe", "startWith", "switchMap", "getLinkedAccount", "catchError", "err", "console", "of", "email", "isLinked", "initiateOAuth", "unlinkAccount", "takeUntilDestroyed", "subscribe", "next", "\u0275\u0275directiveInject", "VIMAR_CLOUD_API_SERVICE", "selectors", "decls", "vars", "consts", "template", "rf", "\u0275\u0275element", "\u0275\u0275conditionalCreate", "MyVimarPageComponent_Conditional_16_Template", "\u0275\u0275conditionalBranchCreate", "MyVimarPageComponent_Conditional_18_Template", "\u0275\u0275advance", "\u0275\u0275conditional", "tmp_0_0", "\u0275\u0275pipeBind1", "MyVimarAccountStatusComponent", "AsyncPipe", "styles"] +} diff --git a/frontend/dist-instrumented/chunk-SEVJ5JBD.js b/frontend/dist-instrumented/chunk-SEVJ5JBD.js new file mode 100644 index 00000000..36562ec1 --- /dev/null +++ b/frontend/dist-instrumented/chunk-SEVJ5JBD.js @@ -0,0 +1,3 @@ +function cov_1kbk829oen(){var path="/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-SEVJ5JBD.js";var hash="b1b66ad84462feb3fccd976c6cada3d849178984";var global=new Function("return this")();var gcv="__coverage__";var coverageData={path:"/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-SEVJ5JBD.js",statementMap:{"0":{start:{line:1,column:322},end:{line:1,column:490}},"1":{start:{line:1,column:425},end:{line:1,column:486}},"2":{start:{line:1,column:463},end:{line:1,column:485}}},fnMap:{"0":{name:"(anonymous_0)",decl:{start:{line:1,column:421},end:{line:1,column:422}},loc:{start:{line:1,column:425},end:{line:1,column:486}},line:1},"1":{name:"(anonymous_1)",decl:{start:{line:1,column:460},end:{line:1,column:461}},loc:{start:{line:1,column:463},end:{line:1,column:485}},line:1}},branchMap:{},s:{"0":0,"1":0,"2":0},f:{"0":0,"1":0},b:{},inputSourceMap:{version:3,sources:["src/app/features/my-vimar-integration/my-vimar-integration.routes.ts"],sourcesContent:["import { Routes } from '@angular/router';\nimport { authGuard } from '../../core/guards/auth.guard';\nimport { VIMAR_CLOUD_API_SERVICE } from '../../core/services/vimar-cloud-api.service.interface';\nimport { MyVimarCloudApiFeatureService } from './services/my-vimar-cloud-api-feature.service';\n\nexport const MY_VIMAR_INTEGRATION_ROUTES: Routes = [\n {\n path: '',\n providers: [\n MyVimarCloudApiFeatureService,\n {\n provide: VIMAR_CLOUD_API_SERVICE,\n useExisting: MyVimarCloudApiFeatureService,\n },\n ],\n children: [\n {\n path: '',\n canActivate: [authGuard],\n loadComponent: () => import('./pages/my-vimar/my-vimar-page.component').then((m) => m.MyVimarPageComponent),\n },\n ],\n }\n];\n"],mappings:"4TAKO,IAAMA,EAAsC,CACjD,CACEC,KAAM,GACNC,UAAW,CACTC,EACA,CACEC,QAASC,EACTC,YAAaH,EACd,EAEHI,SAAU,CACR,CACEN,KAAM,GACNO,YAAa,CAACC,CAAS,EACvBC,cAAeA,IAAM,OAAO,qBAA0C,EAAEC,KAAMC,GAAMA,EAAEC,oBAAoB,EAC3G,EAEJ",names:["MY_VIMAR_INTEGRATION_ROUTES","path","providers","MyVimarCloudApiFeatureService","provide","VIMAR_CLOUD_API_SERVICE","useExisting","children","canActivate","authGuard","loadComponent","then","m","MyVimarPageComponent"]},_coverageSchema:"1a1c01bbd47fc00a2c39e90264f33305004495a9",hash:"b1b66ad84462feb3fccd976c6cada3d849178984"};var coverage=global[gcv]||(global[gcv]={});if(!coverage[path]||coverage[path].hash!==hash){coverage[path]=coverageData;}var actualCoverage=coverage[path];{// @ts-ignore +cov_1kbk829oen=function(){return actualCoverage;};}return actualCoverage;}cov_1kbk829oen();import{a as o}from"./chunk-4BPWJDJR.js";import{a as r}from"./chunk-K2WBT5ZC.js";import"./chunk-FYGTVJAL.js";import{a as t}from"./chunk-6V7HPFWL.js";import"./chunk-VIBKONAW.js";import"./chunk-65RKWSY3.js";import"./chunk-2S5V5XEE.js";import"./chunk-F6OGAIBI.js";import"./chunk-RYTNMYZW.js";import"./chunk-VCZGUBMY.js";var m=(cov_1kbk829oen().s[0]++,[{path:"",providers:[o,{provide:t,useExisting:o}],children:[{path:"",canActivate:[r],loadComponent:()=>{cov_1kbk829oen().f[0]++;cov_1kbk829oen().s[1]++;return import("./chunk-S6DDTQ2X.js").then(e=>{cov_1kbk829oen().f[1]++;cov_1kbk829oen().s[2]++;return e.MyVimarPageComponent;});}}]}]);export{m as MY_VIMAR_INTEGRATION_ROUTES};//# sourceMappingURL=chunk-SEVJ5JBD.js.map +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJtIiwiY292XzFrYms4MjlvZW4iLCJzIiwicGF0aCIsInByb3ZpZGVycyIsIm8iLCJwcm92aWRlIiwidCIsInVzZUV4aXN0aW5nIiwiY2hpbGRyZW4iLCJjYW5BY3RpdmF0ZSIsInIiLCJsb2FkQ29tcG9uZW50IiwiZiIsInRoZW4iLCJlIiwiTXlWaW1hclBhZ2VDb21wb25lbnQiLCJNWV9WSU1BUl9JTlRFR1JBVElPTl9ST1VURVMiXSwic291cmNlcyI6WyJzcmMvYXBwL2ZlYXR1cmVzL215LXZpbWFyLWludGVncmF0aW9uL215LXZpbWFyLWludGVncmF0aW9uLnJvdXRlcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSb3V0ZXMgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgYXV0aEd1YXJkIH0gZnJvbSAnLi4vLi4vY29yZS9ndWFyZHMvYXV0aC5ndWFyZCc7XG5pbXBvcnQgeyBWSU1BUl9DTE9VRF9BUElfU0VSVklDRSB9IGZyb20gJy4uLy4uL2NvcmUvc2VydmljZXMvdmltYXItY2xvdWQtYXBpLnNlcnZpY2UuaW50ZXJmYWNlJztcbmltcG9ydCB7IE15VmltYXJDbG91ZEFwaUZlYXR1cmVTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9teS12aW1hci1jbG91ZC1hcGktZmVhdHVyZS5zZXJ2aWNlJztcblxuZXhwb3J0IGNvbnN0IE1ZX1ZJTUFSX0lOVEVHUkFUSU9OX1JPVVRFUzogUm91dGVzID0gW1xuICB7XG4gICAgcGF0aDogJycsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICBNeVZpbWFyQ2xvdWRBcGlGZWF0dXJlU2VydmljZSxcbiAgICAgIHtcbiAgICAgICAgcHJvdmlkZTogVklNQVJfQ0xPVURfQVBJX1NFUlZJQ0UsXG4gICAgICAgIHVzZUV4aXN0aW5nOiBNeVZpbWFyQ2xvdWRBcGlGZWF0dXJlU2VydmljZSxcbiAgICAgIH0sXG4gICAgXSxcbiAgICBjaGlsZHJlbjogW1xuICAgICAge1xuICAgICAgICBwYXRoOiAnJyxcbiAgICAgICAgY2FuQWN0aXZhdGU6IFthdXRoR3VhcmRdLFxuICAgICAgICBsb2FkQ29tcG9uZW50OiAoKSA9PiBpbXBvcnQoJy4vcGFnZXMvbXktdmltYXIvbXktdmltYXItcGFnZS5jb21wb25lbnQnKS50aGVuKChtKSA9PiBtLk15VmltYXJQYWdlQ29tcG9uZW50KSxcbiAgICAgIH0sXG4gICAgXSxcbiAgfVxuXTtcbiJdLCJtYXBwaW5ncyI6Ijt1WkFLTyxHQUFNLENBQUFBLENBQUEsRUFBQUMsY0FBQSxHQUFBQyxDQUFBLE1BQXNDLENBQ2pELENBQ0VDLElBQUEsQ0FBTSxHQUNOQyxTQUFBLENBQVcsQ0FDVEMsQ0FBQSxDQUNBLENBQ0VDLE9BQUEsQ0FBU0MsQ0FBQSxDQUNUQyxXQUFBLENBQWFILENBQUEsQ0FDZCxFQUVISSxRQUFBLENBQVUsQ0FDUixDQUNFTixJQUFBLENBQU0sR0FDTk8sV0FBQSxDQUFhLENBQUNDLENBQVMsRUFDdkJDLGFBQUEsQ0FBZUEsQ0FBQSxHQUFNLENBQUFYLGNBQUEsR0FBQVksQ0FBQSxLQUFBWixDQUFBLGlCQUFBQyxDQUFBLG9CQUFPLHFCQUEwQyxFQUFFWSxJQUFBLENBQU1DLENBQUEsRUFBTSxDQUFBZCxjQUFBLEdBQUFZLENBQUEsS0FBQVosQ0FBQSxpQkFBQUMsQ0FBQSxhQUFBYSxDQUFBLENBQUVDLG9CQUFvQixDQUFwQixDQUFvQixJQUMzRyxFQUVKLFVBQUFoQixDQUFBLElBQUFpQiwyQkFBQSxFIiwiaWdub3JlTGlzdCI6W119 \ No newline at end of file diff --git a/frontend/dist-instrumented/chunk-SEVJ5JBD.js.map b/frontend/dist-instrumented/chunk-SEVJ5JBD.js.map new file mode 100644 index 00000000..583a1cff --- /dev/null +++ b/frontend/dist-instrumented/chunk-SEVJ5JBD.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["src/app/features/my-vimar-integration/my-vimar-integration.routes.ts"], + "sourcesContent": ["import { Routes } from '@angular/router';\nimport { authGuard } from '../../core/guards/auth.guard';\nimport { VIMAR_CLOUD_API_SERVICE } from '../../core/services/vimar-cloud-api.service.interface';\nimport { MyVimarCloudApiFeatureService } from './services/my-vimar-cloud-api-feature.service';\n\nexport const MY_VIMAR_INTEGRATION_ROUTES: Routes = [\n {\n path: '',\n providers: [\n MyVimarCloudApiFeatureService,\n {\n provide: VIMAR_CLOUD_API_SERVICE,\n useExisting: MyVimarCloudApiFeatureService,\n },\n ],\n children: [\n {\n path: '',\n canActivate: [authGuard],\n loadComponent: () => import('./pages/my-vimar/my-vimar-page.component').then((m) => m.MyVimarPageComponent),\n },\n ],\n }\n];\n"], + "mappings": "4TAKO,IAAMA,EAAsC,CACjD,CACEC,KAAM,GACNC,UAAW,CACTC,EACA,CACEC,QAASC,EACTC,YAAaH,EACd,EAEHI,SAAU,CACR,CACEN,KAAM,GACNO,YAAa,CAACC,CAAS,EACvBC,cAAeA,IAAM,OAAO,qBAA0C,EAAEC,KAAMC,GAAMA,EAAEC,oBAAoB,EAC3G,EAEJ", + "names": ["MY_VIMAR_INTEGRATION_ROUTES", "path", "providers", "MyVimarCloudApiFeatureService", "provide", "VIMAR_CLOUD_API_SERVICE", "useExisting", "children", "canActivate", "authGuard", "loadComponent", "then", "m", "MyVimarPageComponent"] +} diff --git a/frontend/dist-instrumented/chunk-SM2XKLUA.js b/frontend/dist-instrumented/chunk-SM2XKLUA.js new file mode 100644 index 00000000..1256c5f8 --- /dev/null +++ b/frontend/dist-instrumented/chunk-SM2XKLUA.js @@ -0,0 +1,3 @@ +function cov_29rs3rmmvb(){var path="/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-SM2XKLUA.js";var hash="ff7b88d9157b1d1c1f8c362b5391bfcad9945efb";var global=new Function("return this")();var gcv="__coverage__";var coverageData={path:"/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-SM2XKLUA.js",statementMap:{"0":{start:{line:1,column:273},end:{line:1,column:3345}},"1":{start:{line:1,column:305},end:{line:1,column:309}},"2":{start:{line:1,column:326},end:{line:1,column:330}},"3":{start:{line:1,column:343},end:{line:1,column:347}},"4":{start:{line:1,column:371},end:{line:1,column:375}},"5":{start:{line:1,column:386},end:{line:1,column:387}},"6":{start:{line:1,column:401},end:{line:1,column:412}},"7":{start:{line:1,column:427},end:{line:1,column:438}},"8":{start:{line:1,column:451},end:{line:1,column:459}},"9":{start:{line:1,column:471},end:{line:1,column:480}},"10":{start:{line:1,column:504},end:{line:1,column:505}},"11":{start:{line:1,column:510},end:{line:1,column:935}},"12":{start:{line:1,column:710},end:{line:1,column:902}},"13":{start:{line:1,column:949},end:{line:1,column:1015}},"14":{start:{line:1,column:1027},end:{line:1,column:1065}},"15":{start:{line:1,column:1058},end:{line:1,column:1065}},"16":{start:{line:1,column:1071},end:{line:1,column:1113}},"17":{start:{line:1,column:1114},end:{line:1,column:1130}},"18":{start:{line:1,column:1152},end:{line:1,column:1179}},"19":{start:{line:1,column:1180},end:{line:1,column:1196}},"20":{start:{line:1,column:1189},end:{line:1,column:1196}},"21":{start:{line:1,column:1202},end:{line:1,column:1230}},"22":{start:{line:1,column:1231},end:{line:1,column:1247}},"23":{start:{line:1,column:1264},end:{line:1,column:2042}},"24":{start:{line:1,column:1408},end:{line:1,column:1425}},"25":{start:{line:1,column:1426},end:{line:1,column:1525}},"26":{start:{line:1,column:1450},end:{line:1,column:1525}},"27":{start:{line:1,column:1525},end:{line:1,column:1570}},"28":{start:{line:1,column:1580},end:{line:1,column:1667}},"29":{start:{line:1,column:1676},end:{line:1,column:1886}},"30":{start:{line:1,column:1896},end:{line:1,column:2027}},"31":{start:{line:1,column:2060},end:{line:1,column:2541}},"32":{start:{line:1,column:2140},end:{line:1,column:2166}},"33":{start:{line:1,column:2210},end:{line:1,column:2310}},"34":{start:{line:1,column:2319},end:{line:1,column:2526}},"35":{start:{line:1,column:2580},end:{line:1,column:2597}},"36":{start:{line:1,column:2598},end:{line:1,column:2705}},"37":{start:{line:1,column:2622},end:{line:1,column:2705}},"38":{start:{line:1,column:2705},end:{line:1,column:2768}},"39":{start:{line:1,column:2794},end:{line:1,column:3216}},"40":{start:{line:1,column:2854},end:{line:1,column:3091}},"41":{start:{line:1,column:2885},end:{line:1,column:2913}},"42":{start:{line:1,column:2914},end:{line:1,column:3090}},"43":{start:{line:1,column:2973},end:{line:1,column:3088}},"44":{start:{line:1,column:3041},end:{line:1,column:3085}},"45":{start:{line:1,column:3091},end:{line:1,column:3213}},"46":{start:{line:1,column:3166},end:{line:1,column:3210}},"47":{start:{line:1,column:3234},end:{line:1,column:3263}},"48":{start:{line:1,column:3246},end:{line:1,column:3262}},"49":{start:{line:1,column:3282},end:{line:1,column:3332}},"50":{start:{line:1,column:3333},end:{line:1,column:3341}},"51":{start:{line:1,column:3352},end:{line:1,column:4276}},"52":{start:{line:1,column:3378},end:{line:1,column:3797}},"53":{start:{line:1,column:3401},end:{line:1,column:3424}},"54":{start:{line:1,column:3427},end:{line:1,column:3429}},"55":{start:{line:1,column:3432},end:{line:1,column:3440}},"56":{start:{line:1,column:3443},end:{line:1,column:3477}},"57":{start:{line:1,column:3478},end:{line:1,column:3795}},"58":{start:{line:1,column:3821},end:{line:1,column:3835}},"59":{start:{line:1,column:3836},end:{line:1,column:3859}},"60":{start:{line:1,column:3880},end:{line:1,column:3925}},"61":{start:{line:1,column:3950},end:{line:1,column:4009}},"62":{start:{line:1,column:4036},end:{line:1,column:4050}},"63":{start:{line:1,column:4051},end:{line:1,column:4083}},"64":{start:{line:1,column:4109},end:{line:1,column:4123}},"65":{start:{line:1,column:4124},end:{line:1,column:4147}},"66":{start:{line:1,column:4165},end:{line:1,column:4194}},"67":{start:{line:1,column:4177},end:{line:1,column:4193}},"68":{start:{line:1,column:4213},end:{line:1,column:4263}},"69":{start:{line:1,column:4264},end:{line:1,column:4272}}},fnMap:{"0":{name:"(anonymous_0)",decl:{start:{line:1,column:274},end:{line:1,column:275}},loc:{start:{line:1,column:278},end:{line:1,column:3342}},line:1},"1":{name:"(anonymous_1)",decl:{start:{line:1,column:694},end:{line:1,column:695}},loc:{start:{line:1,column:710},end:{line:1,column:902}},line:1},"2":{name:"(anonymous_2)",decl:{start:{line:1,column:936},end:{line:1,column:937}},loc:{start:{line:1,column:948},end:{line:1,column:1016}},line:1},"3":{name:"(anonymous_3)",decl:{start:{line:1,column:1016},end:{line:1,column:1017}},loc:{start:{line:1,column:1026},end:{line:1,column:1131}},line:1},"4":{name:"(anonymous_4)",decl:{start:{line:1,column:1131},end:{line:1,column:1132}},loc:{start:{line:1,column:1145},end:{line:1,column:1248}},line:1},"5":{name:"(anonymous_5)",decl:{start:{line:1,column:1248},end:{line:1,column:1249}},loc:{start:{line:1,column:1263},end:{line:1,column:2043}},line:1},"6":{name:"(anonymous_6)",decl:{start:{line:1,column:1398},end:{line:1,column:1399}},loc:{start:{line:1,column:1401},end:{line:1,column:1571}},line:1},"7":{name:"(anonymous_7)",decl:{start:{line:1,column:1575},end:{line:1,column:1576}},loc:{start:{line:1,column:1579},end:{line:1,column:1668}},line:1},"8":{name:"(anonymous_8)",decl:{start:{line:1,column:1672},end:{line:1,column:1673}},loc:{start:{line:1,column:1676},end:{line:1,column:1886}},line:1},"9":{name:"(anonymous_9)",decl:{start:{line:1,column:1891},end:{line:1,column:1892}},loc:{start:{line:1,column:1895},end:{line:1,column:2028}},line:1},"10":{name:"(anonymous_10)",decl:{start:{line:1,column:2043},end:{line:1,column:2044}},loc:{start:{line:1,column:2059},end:{line:1,column:2542}},line:1},"11":{name:"(anonymous_11)",decl:{start:{line:1,column:2137},end:{line:1,column:2138}},loc:{start:{line:1,column:2140},end:{line:1,column:2166}},line:1},"12":{name:"(anonymous_12)",decl:{start:{line:1,column:2170},end:{line:1,column:2171}},loc:{start:{line:1,column:2209},end:{line:1,column:2311}},line:1},"13":{name:"(anonymous_13)",decl:{start:{line:1,column:2315},end:{line:1,column:2316}},loc:{start:{line:1,column:2319},end:{line:1,column:2526}},line:1},"14":{name:"(anonymous_14)",decl:{start:{line:1,column:2542},end:{line:1,column:2543}},loc:{start:{line:1,column:2573},end:{line:1,column:2769}},line:1},"15":{name:"(anonymous_15)",decl:{start:{line:1,column:2769},end:{line:1,column:2770}},loc:{start:{line:1,column:2793},end:{line:1,column:3217}},line:1},"16":{name:"(anonymous_16)",decl:{start:{line:1,column:2850},end:{line:1,column:2851}},loc:{start:{line:1,column:2853},end:{line:1,column:3214}},line:1},"17":{name:"(anonymous_17)",decl:{start:{line:1,column:2970},end:{line:1,column:2971}},loc:{start:{line:1,column:2973},end:{line:1,column:3088}},line:1},"18":{name:"(anonymous_18)",decl:{start:{line:1,column:3037},end:{line:1,column:3038}},loc:{start:{line:1,column:3041},end:{line:1,column:3085}},line:1},"19":{name:"(anonymous_19)",decl:{start:{line:1,column:3162},end:{line:1,column:3163}},loc:{start:{line:1,column:3166},end:{line:1,column:3210}},line:1},"20":{name:"(anonymous_20)",decl:{start:{line:1,column:3234},end:{line:1,column:3235}},loc:{start:{line:1,column:3245},end:{line:1,column:3263}},line:1},"21":{name:"(anonymous_21)",decl:{start:{line:1,column:3353},end:{line:1,column:3354}},loc:{start:{line:1,column:3357},end:{line:1,column:4273}},line:1},"22":{name:"(anonymous_22)",decl:{start:{line:1,column:3366},end:{line:1,column:3367}},loc:{start:{line:1,column:3377},end:{line:1,column:3798}},line:1},"23":{name:"(anonymous_23)",decl:{start:{line:1,column:3391},end:{line:1,column:3392}},loc:{start:{line:1,column:3394},end:{line:1,column:3796}},line:1},"24":{name:"(anonymous_24)",decl:{start:{line:1,column:3798},end:{line:1,column:3799}},loc:{start:{line:1,column:3814},end:{line:1,column:3860}},line:1},"25":{name:"(anonymous_25)",decl:{start:{line:1,column:3860},end:{line:1,column:3861}},loc:{start:{line:1,column:3879},end:{line:1,column:3926}},line:1},"26":{name:"(anonymous_26)",decl:{start:{line:1,column:3926},end:{line:1,column:3927}},loc:{start:{line:1,column:3949},end:{line:1,column:4010}},line:1},"27":{name:"(anonymous_27)",decl:{start:{line:1,column:4010},end:{line:1,column:4011}},loc:{start:{line:1,column:4029},end:{line:1,column:4084}},line:1},"28":{name:"(anonymous_28)",decl:{start:{line:1,column:4084},end:{line:1,column:4085}},loc:{start:{line:1,column:4102},end:{line:1,column:4148}},line:1},"29":{name:"(anonymous_29)",decl:{start:{line:1,column:4165},end:{line:1,column:4166}},loc:{start:{line:1,column:4176},end:{line:1,column:4194}},line:1}},branchMap:{"0":{loc:{start:{line:1,column:1027},end:{line:1,column:1065}},type:"if",locations:[{start:{line:1,column:1027},end:{line:1,column:1065}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1":{loc:{start:{line:1,column:1180},end:{line:1,column:1196}},type:"if",locations:[{start:{line:1,column:1180},end:{line:1,column:1196}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"2":{loc:{start:{line:1,column:1426},end:{line:1,column:1525}},type:"if",locations:[{start:{line:1,column:1426},end:{line:1,column:1525}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"3":{loc:{start:{line:1,column:1966},end:{line:1,column:2027}},type:"binary-expr",locations:[{start:{line:1,column:1966},end:{line:1,column:1997}},{start:{line:1,column:1999},end:{line:1,column:2027}}],line:1},"4":{loc:{start:{line:1,column:2054},end:{line:1,column:2058}},type:"default-arg",locations:[{start:{line:1,column:2056},end:{line:1,column:2058}}],line:1},"5":{loc:{start:{line:1,column:2598},end:{line:1,column:2705}},type:"if",locations:[{start:{line:1,column:2598},end:{line:1,column:2705}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"6":{loc:{start:{line:1,column:2788},end:{line:1,column:2792}},type:"default-arg",locations:[{start:{line:1,column:2790},end:{line:1,column:2792}}],line:1},"7":{loc:{start:{line:1,column:2854},end:{line:1,column:3091}},type:"if",locations:[{start:{line:1,column:2854},end:{line:1,column:3091}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"8":{loc:{start:{line:1,column:2857},end:{line:1,column:2877}},type:"binary-expr",locations:[{start:{line:1,column:2857},end:{line:1,column:2858}},{start:{line:1,column:2860},end:{line:1,column:2863}},{start:{line:1,column:2865},end:{line:1,column:2877}}],line:1},"9":{loc:{start:{line:1,column:3257},end:{line:1,column:3261}},type:"binary-expr",locations:[{start:{line:1,column:3257},end:{line:1,column:3258}},{start:{line:1,column:3260},end:{line:1,column:3261}}],line:1},"10":{loc:{start:{line:1,column:3619},end:{line:1,column:3650}},type:"cond-expr",locations:[{start:{line:1,column:3621},end:{line:1,column:3633}},{start:{line:1,column:3634},end:{line:1,column:3650}}],line:1},"11":{loc:{start:{line:1,column:3708},end:{line:1,column:3712}},type:"binary-expr",locations:[{start:{line:1,column:3708},end:{line:1,column:3709}},{start:{line:1,column:3711},end:{line:1,column:3712}}],line:1},"12":{loc:{start:{line:1,column:3822},end:{line:1,column:3827}},type:"binary-expr",locations:[{start:{line:1,column:3822},end:{line:1,column:3823}},{start:{line:1,column:3825},end:{line:1,column:3827}}],line:1},"13":{loc:{start:{line:1,column:3843},end:{line:1,column:3859}},type:"cond-expr",locations:[{start:{line:1,column:3854},end:{line:1,column:3855}},{start:{line:1,column:3856},end:{line:1,column:3859}}],line:1},"14":{loc:{start:{line:1,column:3887},end:{line:1,column:3925}},type:"cond-expr",locations:[{start:{line:1,column:3889},end:{line:1,column:3902}},{start:{line:1,column:3903},end:{line:1,column:3925}}],line:1},"15":{loc:{start:{line:1,column:3903},end:{line:1,column:3925}},type:"cond-expr",locations:[{start:{line:1,column:3905},end:{line:1,column:3914}},{start:{line:1,column:3915},end:{line:1,column:3925}}],line:1},"16":{loc:{start:{line:1,column:3957},end:{line:1,column:4009}},type:"cond-expr",locations:[{start:{line:1,column:3959},end:{line:1,column:3985}},{start:{line:1,column:3986},end:{line:1,column:4009}}],line:1},"17":{loc:{start:{line:1,column:4037},end:{line:1,column:4042}},type:"binary-expr",locations:[{start:{line:1,column:4037},end:{line:1,column:4038}},{start:{line:1,column:4040},end:{line:1,column:4042}}],line:1},"18":{loc:{start:{line:1,column:4058},end:{line:1,column:4083}},type:"cond-expr",locations:[{start:{line:1,column:4069},end:{line:1,column:4070}},{start:{line:1,column:4071},end:{line:1,column:4083}}],line:1},"19":{loc:{start:{line:1,column:4110},end:{line:1,column:4115}},type:"binary-expr",locations:[{start:{line:1,column:4110},end:{line:1,column:4111}},{start:{line:1,column:4113},end:{line:1,column:4115}}],line:1},"20":{loc:{start:{line:1,column:4131},end:{line:1,column:4147}},type:"cond-expr",locations:[{start:{line:1,column:4142},end:{line:1,column:4143}},{start:{line:1,column:4144},end:{line:1,column:4147}}],line:1},"21":{loc:{start:{line:1,column:4188},end:{line:1,column:4192}},type:"binary-expr",locations:[{start:{line:1,column:4188},end:{line:1,column:4189}},{start:{line:1,column:4191},end:{line:1,column:4192}}],line:1}},s:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0},f:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0},b:{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0],"5":[0,0],"6":[0],"7":[0,0],"8":[0,0,0],"9":[0,0],"10":[0,0],"11":[0,0],"12":[0,0],"13":[0,0],"14":[0,0],"15":[0,0],"16":[0,0],"17":[0,0],"18":[0,0],"19":[0,0],"20":[0,0],"21":[0,0]},inputSourceMap:{version:3,sources:["src/app/features/alarm-management/services/alarm-management.service.ts","src/app/features/alarm-management/services/alarm-management-table-presenter.service.ts"],sourcesContent:["import { Injectable, inject } from '@angular/core';\nimport {\n BehaviorSubject,\n EMPTY,\n Observable,\n catchError,\n combineLatest,\n finalize,\n map,\n shareReplay,\n switchMap,\n take,\n tap,\n} from 'rxjs';\nimport { ActiveAlarm } from '../../../core/alarm/models/active-alarm.model';\nimport { AlarmApiService } from '../../../core/alarm/services/alarm-api.service';\nimport { AlarmStateService } from '../../../core/alarm/services/alarm-state.service';\nimport { InternalAuthService } from '../../../core/services/internal-auth.service';\nimport { ApiErrorDisplayService } from '../../../core/services/api-error-display.service';\nimport { AlarmListVm } from '../models/alarm-list-vm.model';\nimport type { UserSession } from '../../user-auth/models/user-session.model';\n\n@Injectable({ providedIn: 'root' })\nexport class AlarmManagementService {\n private readonly alarmStateService = inject(AlarmStateService);\n private readonly alarmApiService = inject(AlarmApiService);\n private readonly authService = inject(InternalAuthService);\n private readonly apiErrorDisplayService = inject(ApiErrorDisplayService);\n private readonly pageLimit = 6;\n\n private readonly resolvingId$ = new BehaviorSubject(null);\n private readonly resolveError$ = new BehaviorSubject(null);\n private readonly pageOffset$ = new BehaviorSubject(0);\n private readonly canGoNext$ = new BehaviorSubject(false);\n private pendingResolveRequests = 0;\n\n public readonly vm$ = combineLatest([\n this.alarmStateService.getActiveAlarms$(),\n this.resolvingId$.asObservable(),\n this.resolveError$.asObservable(),\n this.pageOffset$.asObservable(),\n this.canGoNext$.asObservable(),\n ]).pipe(\n map(([alarms, resolvingId, resolveError, pageOffset, canGoNext]): AlarmListVm => {\n return {\n alarms,\n currentPage: Math.floor(pageOffset / this.pageLimit) + 1,\n pageLimit: this.pageLimit,\n pageOffset,\n canGoPrevious: pageOffset > 0,\n canGoNext,\n isResolving: this.pendingResolveRequests > 0,\n resolvingId,\n resolveError,\n };\n }),\n shareReplay({ bufferSize: 1, refCount: true })\n );\n\n public initialize(): void {\n this.pageOffset$.next(0);\n this.canGoNext$.next(false);\n this.loadPage(0);\n }\n\n public nextPage(): void {\n if (!this.canGoNext$.getValue()) {\n return;\n }\n\n const nextOffset = this.pageOffset$.getValue() + this.pageLimit;\n this.loadPage(nextOffset);\n }\n\n public previousPage(): void {\n const currentOffset = this.pageOffset$.getValue();\n if (currentOffset === 0) {\n return;\n }\n\n const previousOffset = Math.max(0, currentOffset - this.pageLimit);\n this.loadPage(previousOffset);\n }\n\n public resolveAlarm(activeAlarmId: string): void {\n this.pendingResolveRequests += 1;\n this.resolvingId$.next(activeAlarmId);\n this.resolveError$.next(null);\n\n this.authService\n .getCurrentUser$()\n .pipe(\n take(1),\n switchMap((session) => {\n const numericUserId = Number(session?.userId);\n if (!Number.isInteger(numericUserId)) {\n throw new TypeError('Utente corrente non valido per risolvere l\\'allarme.');\n }\n\n return this.alarmApiService.resolveAlarm(activeAlarmId, numericUserId);\n }),\n tap(() => {\n this.alarmStateService.onAlarmResolved(activeAlarmId);\n this.loadPage(this.pageOffset$.getValue(), true);\n }),\n catchError((error: unknown) => {\n this.resolveError$.next(\n this.apiErrorDisplayService.toMessage(error, {\n actionLabel: \"completare la risoluzione dell'allarme\",\n fallbackMessage: \"Errore durante la risoluzione dell'allarme.\",\n nonHttpStrategy: 'message',\n }),\n );\n return EMPTY;\n }),\n finalize(() => {\n this.pendingResolveRequests = Math.max(0, this.pendingResolveRequests - 1);\n if (this.pendingResolveRequests === 0) {\n this.resolvingId$.next(null);\n }\n })\n )\n .subscribe();\n }\n\n private loadPage(offset: number, fallbackToPreviousIfEmpty = false): void {\n this.resolveError$.next(null);\n\n this.authService\n .getCurrentUser$()\n .pipe(\n take(1),\n switchMap((session) => this.loadPageState$(session, offset, fallbackToPreviousIfEmpty)),\n tap(({ alarms, pageOffset, canGoNext }) => {\n this.alarmStateService.setActiveAlarms(alarms, 'replace');\n this.pageOffset$.next(pageOffset);\n this.canGoNext$.next(canGoNext);\n }),\n catchError((error: unknown) => {\n this.resolveError$.next(\n this.apiErrorDisplayService.toMessage(error, {\n actionLabel: 'caricare gli allarmi attivi',\n fallbackMessage: 'Errore durante il caricamento degli allarmi attivi.',\n nonHttpStrategy: 'message',\n }),\n );\n return EMPTY;\n })\n )\n .subscribe();\n }\n\n private getActiveAlarmsForSession$(session: UserSession | null, offset: number): Observable {\n const numericUserId = Number(session?.userId);\n if (!Number.isInteger(numericUserId)) {\n throw new TypeError('Utente corrente non valido per caricare gli allarmi attivi.');\n }\n\n return this.alarmApiService.getActiveAlarms(numericUserId, this.pageLimit, offset);\n }\n\n private loadPageState$(\n session: UserSession | null,\n offset: number,\n fallbackToPreviousIfEmpty = false,\n ): Observable<{ alarms: ActiveAlarm[]; pageOffset: number; canGoNext: boolean }> {\n return this.getActiveAlarmsForSession$(session, offset).pipe(\n take(1),\n switchMap((alarms) => {\n if (fallbackToPreviousIfEmpty && offset > 0 && alarms.length === 0) {\n const previousOffset = Math.max(0, offset - this.pageLimit);\n\n return this.getActiveAlarmsForSession$(session, previousOffset).pipe(\n take(1),\n switchMap((previousAlarms) =>\n this.getActiveAlarmsForSession$(session, previousOffset + this.pageLimit).pipe(\n take(1),\n map((nextAlarms) => ({\n alarms: previousAlarms,\n pageOffset: previousOffset,\n canGoNext: nextAlarms.length > 0,\n })),\n ),\n ),\n );\n }\n\n return this.getActiveAlarmsForSession$(session, offset + this.pageLimit).pipe(\n take(1),\n map((nextAlarms) => ({\n alarms,\n pageOffset: offset,\n canGoNext: nextAlarms.length > 0,\n })),\n );\n }),\n );\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ActiveAlarm } from '../../../core/alarm/models/active-alarm.model';\nimport { ActiveAlarmTableRow } from '../models/active-alarm-table-row.model';\n\n@Injectable({ providedIn: 'root' })\nexport class AlarmManagementTablePresenterService {\n public toRows(alarms: ActiveAlarm[], resolvingId: string | null): ActiveAlarmTableRow[] {\n return alarms.map((alarm) => {\n const isOpen = alarm.resolutionTime === null;\n const isManaged = !isOpen;\n const isResolving = resolvingId === alarm.id;\n const safeAlarmName = this.getSafeAlarmName(alarm.alarmName);\n\n return {\n isManaged,\n id: alarm.id,\n priority: alarm.priority,\n name: safeAlarmName,\n device: this.getSafeDevice(alarm.deviceId),\n location: this.getSafeLocation(alarm.position),\n status: isOpen ? 'Da gestire' : 'Non da gestire',\n openedAt: alarm.activationTime,\n isResolving,\n isActionDisabled: isManaged || isResolving,\n actionLabel: this.getActionLabel(isResolving, isManaged),\n actionAriaLabel: this.getActionAriaLabel(safeAlarmName, isManaged),\n };\n });\n }\n\n private getSafeDevice(deviceId: string | undefined): string {\n const normalizedDeviceId = (deviceId ?? '').trim();\n if (normalizedDeviceId.length > 0) {\n return normalizedDeviceId;\n }\n\n return '-';\n }\n\n private getActionLabel(isResolving: boolean, isManaged: boolean): string {\n if (isResolving) {\n return 'GESTIONE...';\n }\n\n if (isManaged) {\n return 'GESTITO';\n }\n\n return 'GESTISCI';\n }\n\n private getActionAriaLabel(alarmName: string, isManaged: boolean): string {\n if (isManaged) {\n return `Allarme gia gestito ${alarmName}`;\n }\n\n return `Gestisci allarme ${alarmName}`;\n }\n\n private getSafeAlarmName(alarmName: string | null | undefined): string {\n const normalizedAlarmName = (alarmName ?? '').trim();\n if (normalizedAlarmName.length > 0) {\n return normalizedAlarmName;\n }\n\n return 'senza nome';\n }\n\n private getSafeLocation(position: string | null | undefined): string {\n const normalizedPosition = (position ?? '').trim();\n if (normalizedPosition.length > 0) {\n return normalizedPosition;\n }\n\n return '-';\n }\n}\n"],mappings:"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",names:["AlarmManagementService","alarmStateService","inject","AlarmStateService","alarmApiService","AlarmApiService","authService","InternalAuthService","apiErrorDisplayService","ApiErrorDisplayService","pageLimit","resolvingId$","BehaviorSubject","resolveError$","pageOffset$","canGoNext$","pendingResolveRequests","vm$","combineLatest","getActiveAlarms$","asObservable","pipe","map","alarms","resolvingId","resolveError","pageOffset","canGoNext","currentPage","Math","floor","canGoPrevious","isResolving","shareReplay","bufferSize","refCount","initialize","next","loadPage","nextPage","getValue","nextOffset","previousPage","currentOffset","previousOffset","max","resolveAlarm","activeAlarmId","getCurrentUser$","take","switchMap","session","numericUserId","Number","userId","isInteger","TypeError","tap","onAlarmResolved","catchError","error","toMessage","actionLabel","fallbackMessage","nonHttpStrategy","EMPTY","finalize","subscribe","offset","fallbackToPreviousIfEmpty","loadPageState$","setActiveAlarms","getActiveAlarmsForSession$","getActiveAlarms","length","previousAlarms","nextAlarms","factory","\u0275fac","providedIn","AlarmManagementTablePresenterService","toRows","alarms","resolvingId","map","alarm","isOpen","resolutionTime","isManaged","isResolving","id","safeAlarmName","getSafeAlarmName","alarmName","priority","name","device","getSafeDevice","deviceId","location","getSafeLocation","position","status","openedAt","activationTime","isActionDisabled","actionLabel","getActionLabel","actionAriaLabel","getActionAriaLabel","normalizedDeviceId","trim","length","normalizedAlarmName","normalizedPosition","factory","\u0275fac","providedIn"]},_coverageSchema:"1a1c01bbd47fc00a2c39e90264f33305004495a9",hash:"ff7b88d9157b1d1c1f8c362b5391bfcad9945efb"};var coverage=global[gcv]||(global[gcv]={});if(!coverage[path]||coverage[path].hash!==hash){coverage[path]=coverageData;}var actualCoverage=coverage[path];{// @ts-ignore +cov_29rs3rmmvb=function(){return actualCoverage;};}return actualCoverage;}cov_29rs3rmmvb();import{a as x}from"./chunk-CFHT7CZE.js";import{a as I}from"./chunk-VIBKONAW.js";import{a as $}from"./chunk-CX4DL26R.js";import{b}from"./chunk-65RKWSY3.js";import{A as S,D as A,F as c,H as f,L as u,Q as g,e as l,f as h,m,n as d,w as v,y as n}from"./chunk-RYTNMYZW.js";var G=(cov_29rs3rmmvb().s[0]++,(()=>{cov_29rs3rmmvb().f[0]++;class a{alarmStateService=(cov_29rs3rmmvb().s[1]++,g($));alarmApiService=(cov_29rs3rmmvb().s[2]++,g(x));authService=(cov_29rs3rmmvb().s[3]++,g(b));apiErrorDisplayService=(cov_29rs3rmmvb().s[4]++,g(I));pageLimit=(cov_29rs3rmmvb().s[5]++,6);resolvingId$=(cov_29rs3rmmvb().s[6]++,new l(null));resolveError$=(cov_29rs3rmmvb().s[7]++,new l(null));pageOffset$=(cov_29rs3rmmvb().s[8]++,new l(0));canGoNext$=(cov_29rs3rmmvb().s[9]++,new l(!1));pendingResolveRequests=(cov_29rs3rmmvb().s[10]++,0);vm$=(cov_29rs3rmmvb().s[11]++,d([this.alarmStateService.getActiveAlarms$(),this.resolvingId$.asObservable(),this.resolveError$.asObservable(),this.pageOffset$.asObservable(),this.canGoNext$.asObservable()]).pipe(m(([t,e,r,s,i])=>{cov_29rs3rmmvb().f[1]++;cov_29rs3rmmvb().s[12]++;return{alarms:t,currentPage:Math.floor(s/this.pageLimit)+1,pageLimit:this.pageLimit,pageOffset:s,canGoPrevious:s>0,canGoNext:i,isResolving:this.pendingResolveRequests>0,resolvingId:e,resolveError:r};}),A({bufferSize:1,refCount:!0})));initialize(){cov_29rs3rmmvb().f[2]++;cov_29rs3rmmvb().s[13]++;this.pageOffset$.next(0),this.canGoNext$.next(!1),this.loadPage(0);}nextPage(){cov_29rs3rmmvb().f[3]++;cov_29rs3rmmvb().s[14]++;if(!this.canGoNext$.getValue()){cov_29rs3rmmvb().b[0][0]++;cov_29rs3rmmvb().s[15]++;return;}else{cov_29rs3rmmvb().b[0][1]++;}let t=(cov_29rs3rmmvb().s[16]++,this.pageOffset$.getValue()+this.pageLimit);cov_29rs3rmmvb().s[17]++;this.loadPage(t);}previousPage(){cov_29rs3rmmvb().f[4]++;let t=(cov_29rs3rmmvb().s[18]++,this.pageOffset$.getValue());cov_29rs3rmmvb().s[19]++;if(t===0){cov_29rs3rmmvb().b[1][0]++;cov_29rs3rmmvb().s[20]++;return;}else{cov_29rs3rmmvb().b[1][1]++;}let e=(cov_29rs3rmmvb().s[21]++,Math.max(0,t-this.pageLimit));cov_29rs3rmmvb().s[22]++;this.loadPage(e);}resolveAlarm(t){cov_29rs3rmmvb().f[5]++;cov_29rs3rmmvb().s[23]++;this.pendingResolveRequests+=1,this.resolvingId$.next(t),this.resolveError$.next(null),this.authService.getCurrentUser$().pipe(n(1),c(e=>{cov_29rs3rmmvb().f[6]++;let r=(cov_29rs3rmmvb().s[24]++,Number(e?.userId));cov_29rs3rmmvb().s[25]++;if(!Number.isInteger(r)){cov_29rs3rmmvb().b[2][0]++;cov_29rs3rmmvb().s[26]++;throw new TypeError("Utente corrente non valido per risolvere l'allarme.");}else{cov_29rs3rmmvb().b[2][1]++;}cov_29rs3rmmvb().s[27]++;return this.alarmApiService.resolveAlarm(t,r);}),f(()=>{cov_29rs3rmmvb().f[7]++;cov_29rs3rmmvb().s[28]++;this.alarmStateService.onAlarmResolved(t),this.loadPage(this.pageOffset$.getValue(),!0);}),v(e=>{cov_29rs3rmmvb().f[8]++;cov_29rs3rmmvb().s[29]++;return this.resolveError$.next(this.apiErrorDisplayService.toMessage(e,{actionLabel:"completare la risoluzione dell'allarme",fallbackMessage:"Errore durante la risoluzione dell'allarme.",nonHttpStrategy:"message"})),h;}),S(()=>{cov_29rs3rmmvb().f[9]++;cov_29rs3rmmvb().s[30]++;this.pendingResolveRequests=Math.max(0,this.pendingResolveRequests-1),(cov_29rs3rmmvb().b[3][0]++,this.pendingResolveRequests===0)&&(cov_29rs3rmmvb().b[3][1]++,this.resolvingId$.next(null));})).subscribe();}loadPage(t,e=(cov_29rs3rmmvb().b[4][0]++,!1)){cov_29rs3rmmvb().f[10]++;cov_29rs3rmmvb().s[31]++;this.resolveError$.next(null),this.authService.getCurrentUser$().pipe(n(1),c(r=>{cov_29rs3rmmvb().f[11]++;cov_29rs3rmmvb().s[32]++;return this.loadPageState$(r,t,e);}),f(({alarms:r,pageOffset:s,canGoNext:i})=>{cov_29rs3rmmvb().f[12]++;cov_29rs3rmmvb().s[33]++;this.alarmStateService.setActiveAlarms(r,"replace"),this.pageOffset$.next(s),this.canGoNext$.next(i);}),v(r=>{cov_29rs3rmmvb().f[13]++;cov_29rs3rmmvb().s[34]++;return this.resolveError$.next(this.apiErrorDisplayService.toMessage(r,{actionLabel:"caricare gli allarmi attivi",fallbackMessage:"Errore durante il caricamento degli allarmi attivi.",nonHttpStrategy:"message"})),h;})).subscribe();}getActiveAlarmsForSession$(t,e){cov_29rs3rmmvb().f[14]++;let r=(cov_29rs3rmmvb().s[35]++,Number(t?.userId));cov_29rs3rmmvb().s[36]++;if(!Number.isInteger(r)){cov_29rs3rmmvb().b[5][0]++;cov_29rs3rmmvb().s[37]++;throw new TypeError("Utente corrente non valido per caricare gli allarmi attivi.");}else{cov_29rs3rmmvb().b[5][1]++;}cov_29rs3rmmvb().s[38]++;return this.alarmApiService.getActiveAlarms(r,this.pageLimit,e);}loadPageState$(t,e,r=(cov_29rs3rmmvb().b[6][0]++,!1)){cov_29rs3rmmvb().f[15]++;cov_29rs3rmmvb().s[39]++;return this.getActiveAlarmsForSession$(t,e).pipe(n(1),c(s=>{cov_29rs3rmmvb().f[16]++;cov_29rs3rmmvb().s[40]++;if((cov_29rs3rmmvb().b[8][0]++,r)&&(cov_29rs3rmmvb().b[8][1]++,e>0)&&(cov_29rs3rmmvb().b[8][2]++,s.length===0)){cov_29rs3rmmvb().b[7][0]++;let i=(cov_29rs3rmmvb().s[41]++,Math.max(0,e-this.pageLimit));cov_29rs3rmmvb().s[42]++;return this.getActiveAlarmsForSession$(t,i).pipe(n(1),c(o=>{cov_29rs3rmmvb().f[17]++;cov_29rs3rmmvb().s[43]++;return this.getActiveAlarmsForSession$(t,i+this.pageLimit).pipe(n(1),m(p=>{cov_29rs3rmmvb().f[18]++;cov_29rs3rmmvb().s[44]++;return{alarms:o,pageOffset:i,canGoNext:p.length>0};}));}));}else{cov_29rs3rmmvb().b[7][1]++;}cov_29rs3rmmvb().s[45]++;return this.getActiveAlarmsForSession$(t,e+this.pageLimit).pipe(n(1),m(i=>{cov_29rs3rmmvb().f[19]++;cov_29rs3rmmvb().s[46]++;return{alarms:s,pageOffset:e,canGoNext:i.length>0};}));}));}static ɵfac=(cov_29rs3rmmvb().s[47]++,function(e){cov_29rs3rmmvb().f[20]++;cov_29rs3rmmvb().s[48]++;return new((cov_29rs3rmmvb().b[9][0]++,e)||(cov_29rs3rmmvb().b[9][1]++,a))();});static ɵprov=(cov_29rs3rmmvb().s[49]++,u({token:a,factory:a.ɵfac,providedIn:"root"}));}cov_29rs3rmmvb().s[50]++;return a;})());var z=(cov_29rs3rmmvb().s[51]++,(()=>{cov_29rs3rmmvb().f[21]++;class a{toRows(t,e){cov_29rs3rmmvb().f[22]++;cov_29rs3rmmvb().s[52]++;return t.map(r=>{cov_29rs3rmmvb().f[23]++;let s=(cov_29rs3rmmvb().s[53]++,r.resolutionTime===null),i=(cov_29rs3rmmvb().s[54]++,!s),o=(cov_29rs3rmmvb().s[55]++,e===r.id),p=(cov_29rs3rmmvb().s[56]++,this.getSafeAlarmName(r.alarmName));cov_29rs3rmmvb().s[57]++;return{isManaged:i,id:r.id,priority:r.priority,name:p,device:this.getSafeDevice(r.deviceId),location:this.getSafeLocation(r.position),status:s?(cov_29rs3rmmvb().b[10][0]++,"Da gestire"):(cov_29rs3rmmvb().b[10][1]++,"Non da gestire"),openedAt:r.activationTime,isResolving:o,isActionDisabled:(cov_29rs3rmmvb().b[11][0]++,i)||(cov_29rs3rmmvb().b[11][1]++,o),actionLabel:this.getActionLabel(o,i),actionAriaLabel:this.getActionAriaLabel(p,i)};});}getSafeDevice(t){cov_29rs3rmmvb().f[24]++;let e=(cov_29rs3rmmvb().s[58]++,((cov_29rs3rmmvb().b[12][0]++,t)??(cov_29rs3rmmvb().b[12][1]++,"")).trim());cov_29rs3rmmvb().s[59]++;return e.length>0?(cov_29rs3rmmvb().b[13][0]++,e):(cov_29rs3rmmvb().b[13][1]++,"-");}getActionLabel(t,e){cov_29rs3rmmvb().f[25]++;cov_29rs3rmmvb().s[60]++;return t?(cov_29rs3rmmvb().b[14][0]++,"GESTIONE..."):(cov_29rs3rmmvb().b[14][1]++,e?(cov_29rs3rmmvb().b[15][0]++,"GESTITO"):(cov_29rs3rmmvb().b[15][1]++,"GESTISCI"));}getActionAriaLabel(t,e){cov_29rs3rmmvb().f[26]++;cov_29rs3rmmvb().s[61]++;return e?(cov_29rs3rmmvb().b[16][0]++,`Allarme gia gestito ${t}`):(cov_29rs3rmmvb().b[16][1]++,`Gestisci allarme ${t}`);}getSafeAlarmName(t){cov_29rs3rmmvb().f[27]++;let e=(cov_29rs3rmmvb().s[62]++,((cov_29rs3rmmvb().b[17][0]++,t)??(cov_29rs3rmmvb().b[17][1]++,"")).trim());cov_29rs3rmmvb().s[63]++;return e.length>0?(cov_29rs3rmmvb().b[18][0]++,e):(cov_29rs3rmmvb().b[18][1]++,"senza nome");}getSafeLocation(t){cov_29rs3rmmvb().f[28]++;let e=(cov_29rs3rmmvb().s[64]++,((cov_29rs3rmmvb().b[19][0]++,t)??(cov_29rs3rmmvb().b[19][1]++,"")).trim());cov_29rs3rmmvb().s[65]++;return e.length>0?(cov_29rs3rmmvb().b[20][0]++,e):(cov_29rs3rmmvb().b[20][1]++,"-");}static ɵfac=(cov_29rs3rmmvb().s[66]++,function(e){cov_29rs3rmmvb().f[29]++;cov_29rs3rmmvb().s[67]++;return new((cov_29rs3rmmvb().b[21][0]++,e)||(cov_29rs3rmmvb().b[21][1]++,a))();});static ɵprov=(cov_29rs3rmmvb().s[68]++,u({token:a,factory:a.ɵfac,providedIn:"root"}));}cov_29rs3rmmvb().s[69]++;return a;})());export{G as a,z as b};//# sourceMappingURL=chunk-SM2XKLUA.js.map +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJHIiwiY292XzI5cnMzcm1tdmIiLCJzIiwiZiIsImEiLCJhbGFybVN0YXRlU2VydmljZSIsImciLCIkIiwiYWxhcm1BcGlTZXJ2aWNlIiwieCIsImF1dGhTZXJ2aWNlIiwiYiIsImFwaUVycm9yRGlzcGxheVNlcnZpY2UiLCJJIiwicGFnZUxpbWl0IiwicmVzb2x2aW5nSWQkIiwibCIsInJlc29sdmVFcnJvciQiLCJwYWdlT2Zmc2V0JCIsImNhbkdvTmV4dCQiLCJwZW5kaW5nUmVzb2x2ZVJlcXVlc3RzIiwidm0kIiwiZCIsImdldEFjdGl2ZUFsYXJtcyQiLCJhc09ic2VydmFibGUiLCJwaXBlIiwibSIsInQiLCJlIiwiciIsImkiLCJhbGFybXMiLCJjdXJyZW50UGFnZSIsIk1hdGgiLCJmbG9vciIsInBhZ2VPZmZzZXQiLCJjYW5Hb1ByZXZpb3VzIiwiY2FuR29OZXh0IiwiaXNSZXNvbHZpbmciLCJyZXNvbHZpbmdJZCIsInJlc29sdmVFcnJvciIsIkEiLCJidWZmZXJTaXplIiwicmVmQ291bnQiLCJpbml0aWFsaXplIiwibmV4dCIsImxvYWRQYWdlIiwibmV4dFBhZ2UiLCJnZXRWYWx1ZSIsInByZXZpb3VzUGFnZSIsIm1heCIsInJlc29sdmVBbGFybSIsImdldEN1cnJlbnRVc2VyJCIsIm4iLCJjIiwiTnVtYmVyIiwidXNlcklkIiwiaXNJbnRlZ2VyIiwiVHlwZUVycm9yIiwib25BbGFybVJlc29sdmVkIiwidiIsInRvTWVzc2FnZSIsImFjdGlvbkxhYmVsIiwiZmFsbGJhY2tNZXNzYWdlIiwibm9uSHR0cFN0cmF0ZWd5IiwiaCIsIlMiLCJzdWJzY3JpYmUiLCJsb2FkUGFnZVN0YXRlJCIsInNldEFjdGl2ZUFsYXJtcyIsImdldEFjdGl2ZUFsYXJtc0ZvclNlc3Npb24kIiwiZ2V0QWN0aXZlQWxhcm1zIiwibGVuZ3RoIiwibyIsInAiLCLJtWZhYyIsIsm1cHJvdiIsInUiLCJ0b2tlbiIsImZhY3RvcnkiLCJwcm92aWRlZEluIiwieiIsInRvUm93cyIsIm1hcCIsInJlc29sdXRpb25UaW1lIiwiaWQiLCJnZXRTYWZlQWxhcm1OYW1lIiwiYWxhcm1OYW1lIiwiaXNNYW5hZ2VkIiwicHJpb3JpdHkiLCJuYW1lIiwiZGV2aWNlIiwiZ2V0U2FmZURldmljZSIsImRldmljZUlkIiwibG9jYXRpb24iLCJnZXRTYWZlTG9jYXRpb24iLCJwb3NpdGlvbiIsInN0YXR1cyIsIm9wZW5lZEF0IiwiYWN0aXZhdGlvblRpbWUiLCJpc0FjdGlvbkRpc2FibGVkIiwiZ2V0QWN0aW9uTGFiZWwiLCJhY3Rpb25BcmlhTGFiZWwiLCJnZXRBY3Rpb25BcmlhTGFiZWwiLCJ0cmltIl0sInNvdXJjZXMiOlsic3JjL2FwcC9mZWF0dXJlcy9hbGFybS1tYW5hZ2VtZW50L3NlcnZpY2VzL2FsYXJtLW1hbmFnZW1lbnQuc2VydmljZS50cyIsInNyYy9hcHAvZmVhdHVyZXMvYWxhcm0tbWFuYWdlbWVudC9zZXJ2aWNlcy9hbGFybS1tYW5hZ2VtZW50LXRhYmxlLXByZXNlbnRlci5zZXJ2aWNlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBCZWhhdmlvclN1YmplY3QsXG4gICAgRU1QVFksXG4gICAgT2JzZXJ2YWJsZSxcbiAgICBjYXRjaEVycm9yLFxuICAgIGNvbWJpbmVMYXRlc3QsXG4gICAgZmluYWxpemUsXG4gICAgbWFwLFxuICAgIHNoYXJlUmVwbGF5LFxuICAgIHN3aXRjaE1hcCxcbiAgICB0YWtlLFxuICAgIHRhcCxcbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBY3RpdmVBbGFybSB9IGZyb20gJy4uLy4uLy4uL2NvcmUvYWxhcm0vbW9kZWxzL2FjdGl2ZS1hbGFybS5tb2RlbCc7XG5pbXBvcnQgeyBBbGFybUFwaVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9jb3JlL2FsYXJtL3NlcnZpY2VzL2FsYXJtLWFwaS5zZXJ2aWNlJztcbmltcG9ydCB7IEFsYXJtU3RhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9hbGFybS9zZXJ2aWNlcy9hbGFybS1zdGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IEludGVybmFsQXV0aFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NlcnZpY2VzL2ludGVybmFsLWF1dGguc2VydmljZSc7XG5pbXBvcnQgeyBBcGlFcnJvckRpc3BsYXlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlcy9hcGktZXJyb3ItZGlzcGxheS5zZXJ2aWNlJztcbmltcG9ydCB7IEFsYXJtTGlzdFZtIH0gZnJvbSAnLi4vbW9kZWxzL2FsYXJtLWxpc3Qtdm0ubW9kZWwnO1xuaW1wb3J0IHR5cGUgeyBVc2VyU2Vzc2lvbiB9IGZyb20gJy4uLy4uL3VzZXItYXV0aC9tb2RlbHMvdXNlci1zZXNzaW9uLm1vZGVsJztcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBBbGFybU1hbmFnZW1lbnRTZXJ2aWNlIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGFsYXJtU3RhdGVTZXJ2aWNlID0gaW5qZWN0KEFsYXJtU3RhdGVTZXJ2aWNlKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGFsYXJtQXBpU2VydmljZSA9IGluamVjdChBbGFybUFwaVNlcnZpY2UpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgYXV0aFNlcnZpY2UgPSBpbmplY3QoSW50ZXJuYWxBdXRoU2VydmljZSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBhcGlFcnJvckRpc3BsYXlTZXJ2aWNlID0gaW5qZWN0KEFwaUVycm9yRGlzcGxheVNlcnZpY2UpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcGFnZUxpbWl0ID0gNjtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgcmVzb2x2aW5nSWQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmcgfCBudWxsPihudWxsKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJlc29sdmVFcnJvciQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZyB8IG51bGw+KG51bGwpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcGFnZU9mZnNldCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBjYW5Hb05leHQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgcHJpdmF0ZSBwZW5kaW5nUmVzb2x2ZVJlcXVlc3RzID0gMDtcblxuICAgIHB1YmxpYyByZWFkb25seSB2bSQgPSBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgdGhpcy5hbGFybVN0YXRlU2VydmljZS5nZXRBY3RpdmVBbGFybXMkKCksXG4gICAgICAgIHRoaXMucmVzb2x2aW5nSWQkLmFzT2JzZXJ2YWJsZSgpLFxuICAgICAgICB0aGlzLnJlc29sdmVFcnJvciQuYXNPYnNlcnZhYmxlKCksXG4gICAgICAgIHRoaXMucGFnZU9mZnNldCQuYXNPYnNlcnZhYmxlKCksXG4gICAgICAgIHRoaXMuY2FuR29OZXh0JC5hc09ic2VydmFibGUoKSxcbiAgICBdKS5waXBlKFxuICAgICAgICBtYXAoKFthbGFybXMsIHJlc29sdmluZ0lkLCByZXNvbHZlRXJyb3IsIHBhZ2VPZmZzZXQsIGNhbkdvTmV4dF0pOiBBbGFybUxpc3RWbSA9PiB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGFsYXJtcyxcbiAgICAgICAgICAgICAgICBjdXJyZW50UGFnZTogTWF0aC5mbG9vcihwYWdlT2Zmc2V0IC8gdGhpcy5wYWdlTGltaXQpICsgMSxcbiAgICAgICAgICAgICAgICBwYWdlTGltaXQ6IHRoaXMucGFnZUxpbWl0LFxuICAgICAgICAgICAgICAgIHBhZ2VPZmZzZXQsXG4gICAgICAgICAgICAgICAgY2FuR29QcmV2aW91czogcGFnZU9mZnNldCA+IDAsXG4gICAgICAgICAgICAgICAgY2FuR29OZXh0LFxuICAgICAgICAgICAgICAgIGlzUmVzb2x2aW5nOiB0aGlzLnBlbmRpbmdSZXNvbHZlUmVxdWVzdHMgPiAwLFxuICAgICAgICAgICAgICAgIHJlc29sdmluZ0lkLFxuICAgICAgICAgICAgICAgIHJlc29sdmVFcnJvcixcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pLFxuICAgICAgICBzaGFyZVJlcGxheSh7IGJ1ZmZlclNpemU6IDEsIHJlZkNvdW50OiB0cnVlIH0pXG4gICAgKTtcblxuICAgIHB1YmxpYyBpbml0aWFsaXplKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnBhZ2VPZmZzZXQkLm5leHQoMCk7XG4gICAgICAgIHRoaXMuY2FuR29OZXh0JC5uZXh0KGZhbHNlKTtcbiAgICAgICAgdGhpcy5sb2FkUGFnZSgwKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmV4dFBhZ2UoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5jYW5Hb05leHQkLmdldFZhbHVlKCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG5leHRPZmZzZXQgPSB0aGlzLnBhZ2VPZmZzZXQkLmdldFZhbHVlKCkgKyB0aGlzLnBhZ2VMaW1pdDtcbiAgICAgICAgdGhpcy5sb2FkUGFnZShuZXh0T2Zmc2V0KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcHJldmlvdXNQYWdlKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBjdXJyZW50T2Zmc2V0ID0gdGhpcy5wYWdlT2Zmc2V0JC5nZXRWYWx1ZSgpO1xuICAgICAgICBpZiAoY3VycmVudE9mZnNldCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcHJldmlvdXNPZmZzZXQgPSBNYXRoLm1heCgwLCBjdXJyZW50T2Zmc2V0IC0gdGhpcy5wYWdlTGltaXQpO1xuICAgICAgICB0aGlzLmxvYWRQYWdlKHByZXZpb3VzT2Zmc2V0KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVzb2x2ZUFsYXJtKGFjdGl2ZUFsYXJtSWQ6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB0aGlzLnBlbmRpbmdSZXNvbHZlUmVxdWVzdHMgKz0gMTtcbiAgICAgICAgdGhpcy5yZXNvbHZpbmdJZCQubmV4dChhY3RpdmVBbGFybUlkKTtcbiAgICAgICAgdGhpcy5yZXNvbHZlRXJyb3IkLm5leHQobnVsbCk7XG5cbiAgICAgICAgdGhpcy5hdXRoU2VydmljZVxuICAgICAgICAgICAgLmdldEN1cnJlbnRVc2VyJCgpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICB0YWtlKDEpLFxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgoc2Vzc2lvbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBudW1lcmljVXNlcklkID0gTnVtYmVyKHNlc3Npb24/LnVzZXJJZCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihudW1lcmljVXNlcklkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVXRlbnRlIGNvcnJlbnRlIG5vbiB2YWxpZG8gcGVyIHJpc29sdmVyZSBsXFwnYWxsYXJtZS4nKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmFsYXJtQXBpU2VydmljZS5yZXNvbHZlQWxhcm0oYWN0aXZlQWxhcm1JZCwgbnVtZXJpY1VzZXJJZCk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hbGFybVN0YXRlU2VydmljZS5vbkFsYXJtUmVzb2x2ZWQoYWN0aXZlQWxhcm1JZCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZFBhZ2UodGhpcy5wYWdlT2Zmc2V0JC5nZXRWYWx1ZSgpLCB0cnVlKTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogdW5rbm93bikgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc29sdmVFcnJvciQubmV4dChcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXBpRXJyb3JEaXNwbGF5U2VydmljZS50b01lc3NhZ2UoZXJyb3IsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb25MYWJlbDogXCJjb21wbGV0YXJlIGxhIHJpc29sdXppb25lIGRlbGwnYWxsYXJtZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbGxiYWNrTWVzc2FnZTogXCJFcnJvcmUgZHVyYW50ZSBsYSByaXNvbHV6aW9uZSBkZWxsJ2FsbGFybWUuXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9uSHR0cFN0cmF0ZWd5OiAnbWVzc2FnZScsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEVNUFRZO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIGZpbmFsaXplKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wZW5kaW5nUmVzb2x2ZVJlcXVlc3RzID0gTWF0aC5tYXgoMCwgdGhpcy5wZW5kaW5nUmVzb2x2ZVJlcXVlc3RzIC0gMSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnBlbmRpbmdSZXNvbHZlUmVxdWVzdHMgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVzb2x2aW5nSWQkLm5leHQobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgbG9hZFBhZ2Uob2Zmc2V0OiBudW1iZXIsIGZhbGxiYWNrVG9QcmV2aW91c0lmRW1wdHkgPSBmYWxzZSk6IHZvaWQge1xuICAgICAgICB0aGlzLnJlc29sdmVFcnJvciQubmV4dChudWxsKTtcblxuICAgICAgICB0aGlzLmF1dGhTZXJ2aWNlXG4gICAgICAgICAgICAuZ2V0Q3VycmVudFVzZXIkKClcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRha2UoMSksXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKChzZXNzaW9uKSA9PiB0aGlzLmxvYWRQYWdlU3RhdGUkKHNlc3Npb24sIG9mZnNldCwgZmFsbGJhY2tUb1ByZXZpb3VzSWZFbXB0eSkpLFxuICAgICAgICAgICAgICAgIHRhcCgoeyBhbGFybXMsIHBhZ2VPZmZzZXQsIGNhbkdvTmV4dCB9KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWxhcm1TdGF0ZVNlcnZpY2Uuc2V0QWN0aXZlQWxhcm1zKGFsYXJtcywgJ3JlcGxhY2UnKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wYWdlT2Zmc2V0JC5uZXh0KHBhZ2VPZmZzZXQpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbkdvTmV4dCQubmV4dChjYW5Hb05leHQpO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiB1bmtub3duKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVzb2x2ZUVycm9yJC5uZXh0KFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hcGlFcnJvckRpc3BsYXlTZXJ2aWNlLnRvTWVzc2FnZShlcnJvciwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbkxhYmVsOiAnY2FyaWNhcmUgZ2xpIGFsbGFybWkgYXR0aXZpJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxsYmFja01lc3NhZ2U6ICdFcnJvcmUgZHVyYW50ZSBpbCBjYXJpY2FtZW50byBkZWdsaSBhbGxhcm1pIGF0dGl2aS4nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vbkh0dHBTdHJhdGVneTogJ21lc3NhZ2UnLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBFTVBUWTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0QWN0aXZlQWxhcm1zRm9yU2Vzc2lvbiQoc2Vzc2lvbjogVXNlclNlc3Npb24gfCBudWxsLCBvZmZzZXQ6IG51bWJlcik6IE9ic2VydmFibGU8QWN0aXZlQWxhcm1bXT4ge1xuICAgICAgICBjb25zdCBudW1lcmljVXNlcklkID0gTnVtYmVyKHNlc3Npb24/LnVzZXJJZCk7XG4gICAgICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihudW1lcmljVXNlcklkKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVXRlbnRlIGNvcnJlbnRlIG5vbiB2YWxpZG8gcGVyIGNhcmljYXJlIGdsaSBhbGxhcm1pIGF0dGl2aS4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmFsYXJtQXBpU2VydmljZS5nZXRBY3RpdmVBbGFybXMobnVtZXJpY1VzZXJJZCwgdGhpcy5wYWdlTGltaXQsIG9mZnNldCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBsb2FkUGFnZVN0YXRlJChcbiAgICAgICAgc2Vzc2lvbjogVXNlclNlc3Npb24gfCBudWxsLFxuICAgICAgICBvZmZzZXQ6IG51bWJlcixcbiAgICAgICAgZmFsbGJhY2tUb1ByZXZpb3VzSWZFbXB0eSA9IGZhbHNlLFxuICAgICk6IE9ic2VydmFibGU8eyBhbGFybXM6IEFjdGl2ZUFsYXJtW107IHBhZ2VPZmZzZXQ6IG51bWJlcjsgY2FuR29OZXh0OiBib29sZWFuIH0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QWN0aXZlQWxhcm1zRm9yU2Vzc2lvbiQoc2Vzc2lvbiwgb2Zmc2V0KS5waXBlKFxuICAgICAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgICAgIHN3aXRjaE1hcCgoYWxhcm1zKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGZhbGxiYWNrVG9QcmV2aW91c0lmRW1wdHkgJiYgb2Zmc2V0ID4gMCAmJiBhbGFybXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzT2Zmc2V0ID0gTWF0aC5tYXgoMCwgb2Zmc2V0IC0gdGhpcy5wYWdlTGltaXQpO1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldEFjdGl2ZUFsYXJtc0ZvclNlc3Npb24kKHNlc3Npb24sIHByZXZpb3VzT2Zmc2V0KS5waXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgocHJldmlvdXNBbGFybXMpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRBY3RpdmVBbGFybXNGb3JTZXNzaW9uJChzZXNzaW9uLCBwcmV2aW91c09mZnNldCArIHRoaXMucGFnZUxpbWl0KS5waXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWtlKDEpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXAoKG5leHRBbGFybXMpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGFybXM6IHByZXZpb3VzQWxhcm1zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZU9mZnNldDogcHJldmlvdXNPZmZzZXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW5Hb05leHQ6IG5leHRBbGFybXMubGVuZ3RoID4gMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldEFjdGl2ZUFsYXJtc0ZvclNlc3Npb24kKHNlc3Npb24sIG9mZnNldCArIHRoaXMucGFnZUxpbWl0KS5waXBlKFxuICAgICAgICAgICAgICAgICAgICB0YWtlKDEpLFxuICAgICAgICAgICAgICAgICAgICBtYXAoKG5leHRBbGFybXMpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICBhbGFybXMsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWdlT2Zmc2V0OiBvZmZzZXQsXG4gICAgICAgICAgICAgICAgICAgICAgICBjYW5Hb05leHQ6IG5leHRBbGFybXMubGVuZ3RoID4gMCxcbiAgICAgICAgICAgICAgICAgICAgfSkpLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgKTtcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3RpdmVBbGFybSB9IGZyb20gJy4uLy4uLy4uL2NvcmUvYWxhcm0vbW9kZWxzL2FjdGl2ZS1hbGFybS5tb2RlbCc7XG5pbXBvcnQgeyBBY3RpdmVBbGFybVRhYmxlUm93IH0gZnJvbSAnLi4vbW9kZWxzL2FjdGl2ZS1hbGFybS10YWJsZS1yb3cubW9kZWwnO1xuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIEFsYXJtTWFuYWdlbWVudFRhYmxlUHJlc2VudGVyU2VydmljZSB7XG4gICAgcHVibGljIHRvUm93cyhhbGFybXM6IEFjdGl2ZUFsYXJtW10sIHJlc29sdmluZ0lkOiBzdHJpbmcgfCBudWxsKTogQWN0aXZlQWxhcm1UYWJsZVJvd1tdIHtcbiAgICAgICAgcmV0dXJuIGFsYXJtcy5tYXAoKGFsYXJtKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpc09wZW4gPSBhbGFybS5yZXNvbHV0aW9uVGltZSA9PT0gbnVsbDtcbiAgICAgICAgICAgIGNvbnN0IGlzTWFuYWdlZCA9ICFpc09wZW47XG4gICAgICAgICAgICBjb25zdCBpc1Jlc29sdmluZyA9IHJlc29sdmluZ0lkID09PSBhbGFybS5pZDtcbiAgICAgICAgICAgIGNvbnN0IHNhZmVBbGFybU5hbWUgPSB0aGlzLmdldFNhZmVBbGFybU5hbWUoYWxhcm0uYWxhcm1OYW1lKTtcblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBpc01hbmFnZWQsXG4gICAgICAgICAgICAgICAgaWQ6IGFsYXJtLmlkLFxuICAgICAgICAgICAgICAgIHByaW9yaXR5OiBhbGFybS5wcmlvcml0eSxcbiAgICAgICAgICAgICAgICBuYW1lOiBzYWZlQWxhcm1OYW1lLFxuICAgICAgICAgICAgICAgIGRldmljZTogdGhpcy5nZXRTYWZlRGV2aWNlKGFsYXJtLmRldmljZUlkKSxcbiAgICAgICAgICAgICAgICBsb2NhdGlvbjogdGhpcy5nZXRTYWZlTG9jYXRpb24oYWxhcm0ucG9zaXRpb24pLFxuICAgICAgICAgICAgICAgIHN0YXR1czogaXNPcGVuID8gJ0RhIGdlc3RpcmUnIDogJ05vbiBkYSBnZXN0aXJlJyxcbiAgICAgICAgICAgICAgICBvcGVuZWRBdDogYWxhcm0uYWN0aXZhdGlvblRpbWUsXG4gICAgICAgICAgICAgICAgaXNSZXNvbHZpbmcsXG4gICAgICAgICAgICAgICAgaXNBY3Rpb25EaXNhYmxlZDogaXNNYW5hZ2VkIHx8IGlzUmVzb2x2aW5nLFxuICAgICAgICAgICAgICAgIGFjdGlvbkxhYmVsOiB0aGlzLmdldEFjdGlvbkxhYmVsKGlzUmVzb2x2aW5nLCBpc01hbmFnZWQpLFxuICAgICAgICAgICAgICAgIGFjdGlvbkFyaWFMYWJlbDogdGhpcy5nZXRBY3Rpb25BcmlhTGFiZWwoc2FmZUFsYXJtTmFtZSwgaXNNYW5hZ2VkKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0U2FmZURldmljZShkZXZpY2VJZDogc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZERldmljZUlkID0gKGRldmljZUlkID8/ICcnKS50cmltKCk7XG4gICAgICAgIGlmIChub3JtYWxpemVkRGV2aWNlSWQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZWREZXZpY2VJZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAnLSc7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRBY3Rpb25MYWJlbChpc1Jlc29sdmluZzogYm9vbGVhbiwgaXNNYW5hZ2VkOiBib29sZWFuKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKGlzUmVzb2x2aW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gJ0dFU1RJT05FLi4uJztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc01hbmFnZWQpIHtcbiAgICAgICAgICAgIHJldHVybiAnR0VTVElUTyc7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gJ0dFU1RJU0NJJztcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEFjdGlvbkFyaWFMYWJlbChhbGFybU5hbWU6IHN0cmluZywgaXNNYW5hZ2VkOiBib29sZWFuKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKGlzTWFuYWdlZCkge1xuICAgICAgICAgICAgcmV0dXJuIGBBbGxhcm1lIGdpYSBnZXN0aXRvICR7YWxhcm1OYW1lfWA7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYEdlc3Rpc2NpIGFsbGFybWUgJHthbGFybU5hbWV9YDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFNhZmVBbGFybU5hbWUoYWxhcm1OYW1lOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZEFsYXJtTmFtZSA9IChhbGFybU5hbWUgPz8gJycpLnRyaW0oKTtcbiAgICAgICAgaWYgKG5vcm1hbGl6ZWRBbGFybU5hbWUubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZWRBbGFybU5hbWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gJ3NlbnphIG5vbWUnO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0U2FmZUxvY2F0aW9uKHBvc2l0aW9uOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZFBvc2l0aW9uID0gKHBvc2l0aW9uID8/ICcnKS50cmltKCk7XG4gICAgICAgIGlmIChub3JtYWxpemVkUG9zaXRpb24ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZWRQb3NpdGlvbjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAnLSc7XG4gICAgfVxufVxuIl0sIm1hcHBpbmdzIjoiO3NXQXVCQSxHQUFhLENBQUFBLENBQUEsRUFBQUMsY0FBQSxHQUFBQyxDQUFBLE9BQXNCLEtBQUFELGNBQUEsR0FBQUUsQ0FBQSxNQUE3QixLQUFPLENBQUFDLENBQXNCLENBQ2RDLGlCQUFBLEVBQUFKLGNBQUEsR0FBQUMsQ0FBQSxNQUFvQkksQ0FBQSxDQUFPQyxDQUFpQixHQUM1Q0MsZUFBQSxFQUFBUCxjQUFBLEdBQUFDLENBQUEsTUFBa0JJLENBQUEsQ0FBT0csQ0FBZSxHQUN4Q0MsV0FBQSxFQUFBVCxjQUFBLEdBQUFDLENBQUEsTUFBY0ksQ0FBQSxDQUFPSyxDQUFtQixHQUN4Q0Msc0JBQUEsRUFBQVgsY0FBQSxHQUFBQyxDQUFBLE1BQXlCSSxDQUFBLENBQU9PLENBQXNCLEdBQ3REQyxTQUFBLEVBQUFiLGNBQUEsR0FBQUMsQ0FBQSxNQUFZLEdBRVphLFlBQUEsRUFBQWQsY0FBQSxHQUFBQyxDQUFBLE1BQWUsR0FBSSxDQUFBYyxDQUFBLENBQStCLElBQUksR0FDdERDLGFBQUEsRUFBQWhCLGNBQUEsR0FBQUMsQ0FBQSxNQUFnQixHQUFJ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 \ No newline at end of file diff --git a/frontend/dist-instrumented/chunk-SM2XKLUA.js.map b/frontend/dist-instrumented/chunk-SM2XKLUA.js.map new file mode 100644 index 00000000..36af9176 --- /dev/null +++ b/frontend/dist-instrumented/chunk-SM2XKLUA.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["src/app/features/alarm-management/services/alarm-management.service.ts", "src/app/features/alarm-management/services/alarm-management-table-presenter.service.ts"], + "sourcesContent": ["import { Injectable, inject } from '@angular/core';\nimport {\n BehaviorSubject,\n EMPTY,\n Observable,\n catchError,\n combineLatest,\n finalize,\n map,\n shareReplay,\n switchMap,\n take,\n tap,\n} from 'rxjs';\nimport { ActiveAlarm } from '../../../core/alarm/models/active-alarm.model';\nimport { AlarmApiService } from '../../../core/alarm/services/alarm-api.service';\nimport { AlarmStateService } from '../../../core/alarm/services/alarm-state.service';\nimport { InternalAuthService } from '../../../core/services/internal-auth.service';\nimport { ApiErrorDisplayService } from '../../../core/services/api-error-display.service';\nimport { AlarmListVm } from '../models/alarm-list-vm.model';\nimport type { UserSession } from '../../user-auth/models/user-session.model';\n\n@Injectable({ providedIn: 'root' })\nexport class AlarmManagementService {\n private readonly alarmStateService = inject(AlarmStateService);\n private readonly alarmApiService = inject(AlarmApiService);\n private readonly authService = inject(InternalAuthService);\n private readonly apiErrorDisplayService = inject(ApiErrorDisplayService);\n private readonly pageLimit = 6;\n\n private readonly resolvingId$ = new BehaviorSubject(null);\n private readonly resolveError$ = new BehaviorSubject(null);\n private readonly pageOffset$ = new BehaviorSubject(0);\n private readonly canGoNext$ = new BehaviorSubject(false);\n private pendingResolveRequests = 0;\n\n public readonly vm$ = combineLatest([\n this.alarmStateService.getActiveAlarms$(),\n this.resolvingId$.asObservable(),\n this.resolveError$.asObservable(),\n this.pageOffset$.asObservable(),\n this.canGoNext$.asObservable(),\n ]).pipe(\n map(([alarms, resolvingId, resolveError, pageOffset, canGoNext]): AlarmListVm => {\n return {\n alarms,\n currentPage: Math.floor(pageOffset / this.pageLimit) + 1,\n pageLimit: this.pageLimit,\n pageOffset,\n canGoPrevious: pageOffset > 0,\n canGoNext,\n isResolving: this.pendingResolveRequests > 0,\n resolvingId,\n resolveError,\n };\n }),\n shareReplay({ bufferSize: 1, refCount: true })\n );\n\n public initialize(): void {\n this.pageOffset$.next(0);\n this.canGoNext$.next(false);\n this.loadPage(0);\n }\n\n public nextPage(): void {\n if (!this.canGoNext$.getValue()) {\n return;\n }\n\n const nextOffset = this.pageOffset$.getValue() + this.pageLimit;\n this.loadPage(nextOffset);\n }\n\n public previousPage(): void {\n const currentOffset = this.pageOffset$.getValue();\n if (currentOffset === 0) {\n return;\n }\n\n const previousOffset = Math.max(0, currentOffset - this.pageLimit);\n this.loadPage(previousOffset);\n }\n\n public resolveAlarm(activeAlarmId: string): void {\n this.pendingResolveRequests += 1;\n this.resolvingId$.next(activeAlarmId);\n this.resolveError$.next(null);\n\n this.authService\n .getCurrentUser$()\n .pipe(\n take(1),\n switchMap((session) => {\n const numericUserId = Number(session?.userId);\n if (!Number.isInteger(numericUserId)) {\n throw new TypeError('Utente corrente non valido per risolvere l\\'allarme.');\n }\n\n return this.alarmApiService.resolveAlarm(activeAlarmId, numericUserId);\n }),\n tap(() => {\n this.alarmStateService.onAlarmResolved(activeAlarmId);\n this.loadPage(this.pageOffset$.getValue(), true);\n }),\n catchError((error: unknown) => {\n this.resolveError$.next(\n this.apiErrorDisplayService.toMessage(error, {\n actionLabel: \"completare la risoluzione dell'allarme\",\n fallbackMessage: \"Errore durante la risoluzione dell'allarme.\",\n nonHttpStrategy: 'message',\n }),\n );\n return EMPTY;\n }),\n finalize(() => {\n this.pendingResolveRequests = Math.max(0, this.pendingResolveRequests - 1);\n if (this.pendingResolveRequests === 0) {\n this.resolvingId$.next(null);\n }\n })\n )\n .subscribe();\n }\n\n private loadPage(offset: number, fallbackToPreviousIfEmpty = false): void {\n this.resolveError$.next(null);\n\n this.authService\n .getCurrentUser$()\n .pipe(\n take(1),\n switchMap((session) => this.loadPageState$(session, offset, fallbackToPreviousIfEmpty)),\n tap(({ alarms, pageOffset, canGoNext }) => {\n this.alarmStateService.setActiveAlarms(alarms, 'replace');\n this.pageOffset$.next(pageOffset);\n this.canGoNext$.next(canGoNext);\n }),\n catchError((error: unknown) => {\n this.resolveError$.next(\n this.apiErrorDisplayService.toMessage(error, {\n actionLabel: 'caricare gli allarmi attivi',\n fallbackMessage: 'Errore durante il caricamento degli allarmi attivi.',\n nonHttpStrategy: 'message',\n }),\n );\n return EMPTY;\n })\n )\n .subscribe();\n }\n\n private getActiveAlarmsForSession$(session: UserSession | null, offset: number): Observable {\n const numericUserId = Number(session?.userId);\n if (!Number.isInteger(numericUserId)) {\n throw new TypeError('Utente corrente non valido per caricare gli allarmi attivi.');\n }\n\n return this.alarmApiService.getActiveAlarms(numericUserId, this.pageLimit, offset);\n }\n\n private loadPageState$(\n session: UserSession | null,\n offset: number,\n fallbackToPreviousIfEmpty = false,\n ): Observable<{ alarms: ActiveAlarm[]; pageOffset: number; canGoNext: boolean }> {\n return this.getActiveAlarmsForSession$(session, offset).pipe(\n take(1),\n switchMap((alarms) => {\n if (fallbackToPreviousIfEmpty && offset > 0 && alarms.length === 0) {\n const previousOffset = Math.max(0, offset - this.pageLimit);\n\n return this.getActiveAlarmsForSession$(session, previousOffset).pipe(\n take(1),\n switchMap((previousAlarms) =>\n this.getActiveAlarmsForSession$(session, previousOffset + this.pageLimit).pipe(\n take(1),\n map((nextAlarms) => ({\n alarms: previousAlarms,\n pageOffset: previousOffset,\n canGoNext: nextAlarms.length > 0,\n })),\n ),\n ),\n );\n }\n\n return this.getActiveAlarmsForSession$(session, offset + this.pageLimit).pipe(\n take(1),\n map((nextAlarms) => ({\n alarms,\n pageOffset: offset,\n canGoNext: nextAlarms.length > 0,\n })),\n );\n }),\n );\n }\n}\n", "import { Injectable } from '@angular/core';\nimport { ActiveAlarm } from '../../../core/alarm/models/active-alarm.model';\nimport { ActiveAlarmTableRow } from '../models/active-alarm-table-row.model';\n\n@Injectable({ providedIn: 'root' })\nexport class AlarmManagementTablePresenterService {\n public toRows(alarms: ActiveAlarm[], resolvingId: string | null): ActiveAlarmTableRow[] {\n return alarms.map((alarm) => {\n const isOpen = alarm.resolutionTime === null;\n const isManaged = !isOpen;\n const isResolving = resolvingId === alarm.id;\n const safeAlarmName = this.getSafeAlarmName(alarm.alarmName);\n\n return {\n isManaged,\n id: alarm.id,\n priority: alarm.priority,\n name: safeAlarmName,\n device: this.getSafeDevice(alarm.deviceId),\n location: this.getSafeLocation(alarm.position),\n status: isOpen ? 'Da gestire' : 'Non da gestire',\n openedAt: alarm.activationTime,\n isResolving,\n isActionDisabled: isManaged || isResolving,\n actionLabel: this.getActionLabel(isResolving, isManaged),\n actionAriaLabel: this.getActionAriaLabel(safeAlarmName, isManaged),\n };\n });\n }\n\n private getSafeDevice(deviceId: string | undefined): string {\n const normalizedDeviceId = (deviceId ?? '').trim();\n if (normalizedDeviceId.length > 0) {\n return normalizedDeviceId;\n }\n\n return '-';\n }\n\n private getActionLabel(isResolving: boolean, isManaged: boolean): string {\n if (isResolving) {\n return 'GESTIONE...';\n }\n\n if (isManaged) {\n return 'GESTITO';\n }\n\n return 'GESTISCI';\n }\n\n private getActionAriaLabel(alarmName: string, isManaged: boolean): string {\n if (isManaged) {\n return `Allarme gia gestito ${alarmName}`;\n }\n\n return `Gestisci allarme ${alarmName}`;\n }\n\n private getSafeAlarmName(alarmName: string | null | undefined): string {\n const normalizedAlarmName = (alarmName ?? '').trim();\n if (normalizedAlarmName.length > 0) {\n return normalizedAlarmName;\n }\n\n return 'senza nome';\n }\n\n private getSafeLocation(position: string | null | undefined): string {\n const normalizedPosition = (position ?? '').trim();\n if (normalizedPosition.length > 0) {\n return normalizedPosition;\n }\n\n return '-';\n }\n}\n"], + "mappings": "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", + "names": ["AlarmManagementService", "alarmStateService", "inject", "AlarmStateService", "alarmApiService", "AlarmApiService", "authService", "InternalAuthService", "apiErrorDisplayService", "ApiErrorDisplayService", "pageLimit", "resolvingId$", "BehaviorSubject", "resolveError$", "pageOffset$", "canGoNext$", "pendingResolveRequests", "vm$", "combineLatest", "getActiveAlarms$", "asObservable", "pipe", "map", "alarms", "resolvingId", "resolveError", "pageOffset", "canGoNext", "currentPage", "Math", "floor", "canGoPrevious", "isResolving", "shareReplay", "bufferSize", "refCount", "initialize", "next", "loadPage", "nextPage", "getValue", "nextOffset", "previousPage", "currentOffset", "previousOffset", "max", "resolveAlarm", "activeAlarmId", "getCurrentUser$", "take", "switchMap", "session", "numericUserId", "Number", "userId", "isInteger", "TypeError", "tap", "onAlarmResolved", "catchError", "error", "toMessage", "actionLabel", "fallbackMessage", "nonHttpStrategy", "EMPTY", "finalize", "subscribe", "offset", "fallbackToPreviousIfEmpty", "loadPageState$", "setActiveAlarms", "getActiveAlarmsForSession$", "getActiveAlarms", "length", "previousAlarms", "nextAlarms", "factory", "\u0275fac", "providedIn", "AlarmManagementTablePresenterService", "toRows", "alarms", "resolvingId", "map", "alarm", "isOpen", "resolutionTime", "isManaged", "isResolving", "id", "safeAlarmName", "getSafeAlarmName", "alarmName", "priority", "name", "device", "getSafeDevice", "deviceId", "location", "getSafeLocation", "position", "status", "openedAt", "activationTime", "isActionDisabled", "actionLabel", "getActionLabel", "actionAriaLabel", "getActionAriaLabel", "normalizedDeviceId", "trim", "length", "normalizedAlarmName", "normalizedPosition", "factory", "\u0275fac", "providedIn"] +} diff --git a/frontend/dist-instrumented/chunk-SNRTUDXT.js b/frontend/dist-instrumented/chunk-SNRTUDXT.js new file mode 100644 index 00000000..707d8dca --- /dev/null +++ b/frontend/dist-instrumented/chunk-SNRTUDXT.js @@ -0,0 +1,3 @@ +function cov_27iju6ntki(){var path="/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-SNRTUDXT.js";var hash="2d858b98d554bc3595664bfb0cbf4b349a3aa8a4";var global=new Function("return this")();var gcv="__coverage__";var coverageData={path:"/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-SNRTUDXT.js",statementMap:{"0":{start:{line:1,column:205},end:{line:1,column:210}},"1":{start:{line:1,column:213},end:{line:1,column:224}},"2":{start:{line:1,column:220},end:{line:1,column:224}},"3":{start:{line:1,column:241},end:{line:1,column:359}},"4":{start:{line:1,column:255},end:{line:1,column:258}},"5":{start:{line:1,column:259},end:{line:1,column:358}},"6":{start:{line:1,column:297},end:{line:1,column:302}},"7":{start:{line:1,column:308},end:{line:1,column:311}},"8":{start:{line:1,column:312},end:{line:1,column:341}},"9":{start:{line:1,column:359},end:{line:1,column:419}},"10":{start:{line:1,column:373},end:{line:1,column:376}},"11":{start:{line:1,column:377},end:{line:1,column:418}},"12":{start:{line:1,column:436},end:{line:1,column:509}},"13":{start:{line:1,column:478},end:{line:1,column:489}},"14":{start:{line:1,column:490},end:{line:1,column:508}},"15":{start:{line:1,column:516},end:{line:1,column:2458}},"16":{start:{line:1,column:536},end:{line:1,column:548}},"17":{start:{line:1,column:557},end:{line:1,column:577}},"18":{start:{line:1,column:586},end:{line:1,column:598}},"19":{start:{line:1,column:616},end:{line:1,column:621}},"20":{start:{line:1,column:644},end:{line:1,column:672}},"21":{start:{line:1,column:689},end:{line:1,column:692}},"22":{start:{line:1,column:711},end:{line:1,column:738}},"23":{start:{line:1,column:756},end:{line:1,column:785}},"24":{start:{line:1,column:768},end:{line:1,column:784}},"25":{start:{line:1,column:803},end:{line:1,column:2445}},"26":{start:{line:1,column:2058},end:{line:1,column:2408}},"27":{start:{line:1,column:2446},end:{line:1,column:2454}}},fnMap:{"0":{name:"(anonymous_0)",decl:{start:{line:1,column:213},end:{line:1,column:214}},loc:{start:{line:1,column:220},end:{line:1,column:224}},line:1},"1":{name:"B",decl:{start:{line:1,column:234},end:{line:1,column:235}},loc:{start:{line:1,column:240},end:{line:1,column:420}},line:1},"2":{name:"(anonymous_2)",decl:{start:{line:1,column:286},end:{line:1,column:287}},loc:{start:{line:1,column:296},end:{line:1,column:342}},line:1},"3":{name:"D",decl:{start:{line:1,column:429},end:{line:1,column:430}},loc:{start:{line:1,column:435},end:{line:1,column:510}},line:1},"4":{name:"(anonymous_4)",decl:{start:{line:1,column:517},end:{line:1,column:518}},loc:{start:{line:1,column:521},end:{line:1,column:2455}},line:1},"5":{name:"(anonymous_5)",decl:{start:{line:1,column:693},end:{line:1,column:694}},loc:{start:{line:1,column:710},end:{line:1,column:739}},line:1},"6":{name:"(anonymous_6)",decl:{start:{line:1,column:756},end:{line:1,column:757}},loc:{start:{line:1,column:767},end:{line:1,column:785}},line:1},"7":{name:"(anonymous_7)",decl:{start:{line:1,column:2044},end:{line:1,column:2045}},loc:{start:{line:1,column:2057},end:{line:1,column:2409}},line:1}},branchMap:{"0":{loc:{start:{line:1,column:241},end:{line:1,column:359}},type:"if",locations:[{start:{line:1,column:241},end:{line:1,column:359}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1":{loc:{start:{line:1,column:359},end:{line:1,column:419}},type:"if",locations:[{start:{line:1,column:359},end:{line:1,column:419}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"2":{loc:{start:{line:1,column:436},end:{line:1,column:509}},type:"if",locations:[{start:{line:1,column:436},end:{line:1,column:509}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"3":{loc:{start:{line:1,column:439},end:{line:1,column:466}},type:"binary-expr",locations:[{start:{line:1,column:439},end:{line:1,column:442}},{start:{line:1,column:445},end:{line:1,column:465}}],line:1},"4":{loc:{start:{line:1,column:779},end:{line:1,column:783}},type:"binary-expr",locations:[{start:{line:1,column:779},end:{line:1,column:780}},{start:{line:1,column:782},end:{line:1,column:783}}],line:1},"5":{loc:{start:{line:1,column:2058},end:{line:1,column:2277}},type:"binary-expr",locations:[{start:{line:1,column:2058},end:{line:1,column:2061}},{start:{line:1,column:2064},end:{line:1,column:2276}}],line:1},"6":{loc:{start:{line:1,column:2278},end:{line:1,column:2408}},type:"binary-expr",locations:[{start:{line:1,column:2278},end:{line:1,column:2281}},{start:{line:1,column:2284},end:{line:1,column:2407}}],line:1},"7":{loc:{start:{line:1,column:2308},end:{line:1,column:2333}},type:"cond-expr",locations:[{start:{line:1,column:2329},end:{line:1,column:2330}},{start:{line:1,column:2331},end:{line:1,column:2333}}],line:1}},s:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0},f:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0},b:{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0]},inputSourceMap:{version:3,sources:["src/app/shared/components/alarm-table/alarm-table-shell.component.ts","src/app/shared/components/alarm-table/alarm-table-shell.component.html"],sourcesContent:["import { ChangeDetectionStrategy, Component, input, output } from '@angular/core';\nimport { AlarmTableColumn } from '../../models/alarm-table.model';\n\n@Component({\n selector: 'app-alarm-table-shell',\n templateUrl: './alarm-table-shell.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AlarmTableShellComponent {\n public readonly title = input.required();\n public readonly caption = input('Tabella allarmi');\n public readonly columns = input.required();\n public readonly showCreateButton = input(false);\n public readonly createButtonAriaLabel = input('Aggiungi nuovo elemento');\n\n public readonly createRequested = output();\n\n public onCreateRequest(): void {\n this.createRequested.emit();\n }\n}\n","
\n
\n

{{ title() }}

\n\n @if (showCreateButton()) {\n \n }\n
\n\n
\n \n \n \n \n @for (column of columns(); track column.id) {\n \n }\n \n \n \n \n \n
{{ caption() }}
\n {{\n column.label }}
\n
\n
"],mappings:"mQCKQA,EAAA,EAAA,SAAA,EAAA,EAAsBC,EAAA,QAAA,UAAA,CAAAC,EAAAC,CAAA,EAAA,IAAAC,EAAAC,EAAA,EAAA,OAAAC,EAASF,EAAAG,gBAAA,CAAiB,CAAA,CAAA,EAE5CC,EAAA,EAAA,KAAA,EACJC,EAAA,wFAUYT,EAAA,EAAA,KAAA,CAAA,EACIQ,EAAA,CAAA,EACeC,EAAA,0BADfC,EAAA,EAAAC,EAAA,IAAAC,EAAAC,KAAA,GDXxB,IAAaC,GAAwB,IAAA,CAA/B,MAAOA,CAAwB,CACjBC,MAAQC,EAAMC,SAAQ,EACtBC,QAAUF,EAAc,iBAAiB,EACzCG,QAAUH,EAAMC,SAAQ,EACxBG,iBAAmBJ,EAAe,EAAK,EACvCK,sBAAwBL,EAAc,yBAAyB,EAE/DM,gBAAkBC,EAAM,EAEjChB,iBAAe,CAClB,KAAKe,gBAAgBE,KAAI,CAC7B,4CAXSV,EAAwB,2BAAxBA,EAAwBW,UAAA,CAAA,CAAA,uBAAA,CAAA,EAAAC,OAAA,CAAAX,MAAA,CAAA,EAAA,OAAA,EAAAG,QAAA,CAAA,EAAA,SAAA,EAAAC,QAAA,CAAA,EAAA,SAAA,EAAAC,iBAAA,CAAA,EAAA,kBAAA,EAAAC,sBAAA,CAAA,EAAA,uBAAA,CAAA,EAAAM,QAAA,CAAAL,gBAAA,iBAAA,EAAAM,mBAAAC,EAAAC,MAAA,GAAAC,KAAA,EAAAC,OAAA,CAAA,CAAA,EAAA,kBAAA,cAAA,SAAA,mBAAA,WAAA,WAAA,EAAA,CAAA,EAAA,OAAA,eAAA,kBAAA,QAAA,WAAA,mBAAA,cAAA,OAAA,MAAA,EAAA,CAAA,EAAA,UAAA,YAAA,iBAAA,gBAAA,EAAA,CAAA,OAAA,SAAA,EAAA,WAAA,oBAAA,iBAAA,oBAAA,YAAA,eAAA,0BAAA,iCAAA,iCAAA,EAAA,CAAA,EAAA,iBAAA,EAAA,CAAA,EAAA,aAAA,YAAA,SAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,WAAA,kBAAA,EAAA,CAAA,QAAA,MAAA,EAAA,OAAA,OAAA,cAAA,gBAAA,YAAA,iBAAA,gBAAA,EAAA,CAAA,EAAA,WAAA,iBAAA,EAAA,CAAA,OAAA,SAAA,EAAA,WAAA,oBAAA,iBAAA,oBAAA,YAAA,eAAA,0BAAA,iCAAA,kCAAA,EAAA,OAAA,CAAA,EAAAC,SAAA,SAAAC,EAAAC,EAAA,CAAAD,EAAA,QCRrClC,EAAA,EAAA,UAAA,CAAA,EAAwF,EAAA,SAAA,CAAA,EACoB,EAAA,KAAA,CAAA,EACxCQ,EAAA,CAAA,EAAaC,EAAA,EAEzE2B,EAAA,EAAAC,EAAA,EAAA,EAAA,SAAA,CAAA,EAMJ5B,EAAA,EAEAT,EAAA,EAAA,MAAA,CAAA,EAA6B,EAAA,QAAA,CAAA,EACiD,EAAA,UAAA,CAAA,EAC7CQ,EAAA,CAAA,EAAeC,EAAA,EACxCT,EAAA,EAAA,OAAA,EAAO,GAAA,KAAA,CAAA,EAECsC,EAAA,GAAAC,EAAA,EAAA,EAAA,KAAA,EAAAC,CAAA,EAKJ/B,EAAA,EAAK,EAETT,EAAA,GAAA,QAAA,CAAA,EACIyC,EAAA,EAAA,EACJhC,EAAA,EAAQ,EACJ,EACN,SA1B0DC,EAAA,CAAA,EAAAgC,EAAAP,EAAApB,MAAA,CAAA,EAE5DL,EAAA,EAAAiC,EAAAR,EAAAf,iBAAA,EAAA,EAAA,EAAA,EAS4CV,EAAA,CAAA,8BACfA,EAAA,CAAA,EAAAgC,EAAAP,EAAAjB,QAAA,CAAA,EAGjBR,EAAA,CAAA,EAAAkC,EAAAT,EAAAhB,QAAA,CAAS,+CDThBL,CAAwB,GAAA",names:["\u0275\u0275domElementStart","\u0275\u0275domListener","\u0275\u0275restoreView","_r1","ctx_r1","\u0275\u0275nextContext","\u0275\u0275resetView","onCreateRequest","\u0275\u0275text","\u0275\u0275domElementEnd","\u0275\u0275advance","\u0275\u0275textInterpolate1","column_r3","label","AlarmTableShellComponent","title","input","required","caption","columns","showCreateButton","createButtonAriaLabel","createRequested","output","emit","selectors","inputs","outputs","ngContentSelectors","_c0","decls","vars","consts","template","rf","ctx","\u0275\u0275conditionalCreate","AlarmTableShellComponent_Conditional_4_Template","\u0275\u0275repeaterCreate","AlarmTableShellComponent_For_12_Template","_forTrack0","\u0275\u0275projection","\u0275\u0275textInterpolate","\u0275\u0275conditional","\u0275\u0275repeater"]},_coverageSchema:"1a1c01bbd47fc00a2c39e90264f33305004495a9",hash:"2d858b98d554bc3595664bfb0cbf4b349a3aa8a4"};var coverage=global[gcv]||(global[gcv]={});if(!coverage[path]||coverage[path].hash!==hash){coverage[path]=coverageData;}var actualCoverage=coverage[path];{// @ts-ignore +cov_27iju6ntki=function(){return actualCoverage;};}return actualCoverage;}cov_27iju6ntki();import{Ab as c,Bb as u,Cb as y,Ka as f,Sb as S,Tb as l,V as b,W as p,Wa as s,Ya as g,_a as v,ab as x,bb as h,gb as a,hb as t,jb as C,ob as E,pb as m,qb as _,rb as w,wa as i}from"./chunk-RYTNMYZW.js";cov_27iju6ntki().s[1]++;var A=(cov_27iju6ntki().s[0]++,["*"]),T=(e,d)=>{cov_27iju6ntki().f[0]++;cov_27iju6ntki().s[2]++;return d.id;};function B(e,d){cov_27iju6ntki().f[1]++;cov_27iju6ntki().s[3]++;if(e&1){cov_27iju6ntki().b[0][0]++;let n=(cov_27iju6ntki().s[4]++,C());cov_27iju6ntki().s[5]++;a(0,"button",10),E("click",function(){cov_27iju6ntki().f[2]++;cov_27iju6ntki().s[6]++;b(n);let o=(cov_27iju6ntki().s[7]++,m());cov_27iju6ntki().s[8]++;return p(o.onCreateRequest());}),c(1," + "),t();}else{cov_27iju6ntki().b[0][1]++;}cov_27iju6ntki().s[9]++;if(e&2){cov_27iju6ntki().b[1][0]++;let n=(cov_27iju6ntki().s[10]++,m());cov_27iju6ntki().s[11]++;s("aria-label",n.createButtonAriaLabel());}else{cov_27iju6ntki().b[1][1]++;}}function D(e,d){cov_27iju6ntki().f[3]++;cov_27iju6ntki().s[12]++;if((cov_27iju6ntki().b[3][0]++,e&1)&&(cov_27iju6ntki().b[3][1]++,a(0,"th",8),c(1),t()),e&2){cov_27iju6ntki().b[2][0]++;let n=(cov_27iju6ntki().s[13]++,d.$implicit);cov_27iju6ntki().s[14]++;i(),y(" ",n.label);}else{cov_27iju6ntki().b[2][1]++;}}var R=(cov_27iju6ntki().s[15]++,(()=>{cov_27iju6ntki().f[4]++;class e{title=(cov_27iju6ntki().s[16]++,l.required());caption=(cov_27iju6ntki().s[17]++,l("Tabella allarmi"));columns=(cov_27iju6ntki().s[18]++,l.required());showCreateButton=(cov_27iju6ntki().s[19]++,l(!1));createButtonAriaLabel=(cov_27iju6ntki().s[20]++,l("Aggiungi nuovo elemento"));createRequested=(cov_27iju6ntki().s[21]++,S());onCreateRequest(){cov_27iju6ntki().f[5]++;cov_27iju6ntki().s[22]++;this.createRequested.emit();}static ɵfac=(cov_27iju6ntki().s[23]++,function(r){cov_27iju6ntki().f[6]++;cov_27iju6ntki().s[24]++;return new((cov_27iju6ntki().b[4][0]++,r)||(cov_27iju6ntki().b[4][1]++,e))();});static ɵcmp=(cov_27iju6ntki().s[25]++,f({type:e,selectors:[["app-alarm-table-shell"]],inputs:{title:[1,"title"],caption:[1,"caption"],columns:[1,"columns"],showCreateButton:[1,"showCreateButton"],createButtonAriaLabel:[1,"createButtonAriaLabel"]},outputs:{createRequested:"createRequested"},ngContentSelectors:A,decls:15,vars:4,consts:[[1,"overflow-hidden","rounded-2xl","border","border-slate-200","bg-white","shadow-sm"],[1,"flex","items-center","justify-between","gap-3","border-b","border-slate-100","bg-slate-50","px-5","py-4"],[1,"text-sm","font-bold","tracking-tight","text-slate-900"],["type","button",1,"care-btn","care-btn--primary","care-btn--icon","care-btn--compact","text-base","leading-none","focus-visible:outline-2","focus-visible:outline-offset-2","focus-visible:outline-amber-400"],[1,"overflow-x-auto"],[1,"min-w-full","text-left","text-sm"],[1,"sr-only"],[1,"border-b","border-slate-100"],["scope","col",1,"px-5","py-3","text-[11px]","font-semibold","uppercase","tracking-wider","text-slate-400"],[1,"divide-y","divide-slate-50"],["type","button",1,"care-btn","care-btn--primary","care-btn--icon","care-btn--compact","text-base","leading-none","focus-visible:outline-2","focus-visible:outline-offset-2","focus-visible:outline-amber-400",3,"click"]],template:function(r,o){cov_27iju6ntki().f[7]++;cov_27iju6ntki().s[26]++;(cov_27iju6ntki().b[5][0]++,r&1)&&(cov_27iju6ntki().b[5][1]++,_(),a(0,"section",0)(1,"header",1)(2,"h2",2),c(3),t(),g(4,B,2,1,"button",3),t(),a(5,"div",4)(6,"table",5)(7,"caption",6),c(8),t(),a(9,"thead")(10,"tr",7),x(11,D,2,1,"th",8,T),t()(),a(13,"tbody",9),w(14),t()()()()),(cov_27iju6ntki().b[6][0]++,r&2)&&(cov_27iju6ntki().b[6][1]++,i(3),u(o.title()),i(),v(o.showCreateButton()?(cov_27iju6ntki().b[7][0]++,4):(cov_27iju6ntki().b[7][1]++,-1)),i(2),s("aria-label",o.caption()),i(2),u(o.caption()),i(3),h(o.columns()));},encapsulation:2,changeDetection:0}));}cov_27iju6ntki().s[27]++;return e;})());export{R as a};//# sourceMappingURL=chunk-SNRTUDXT.js.map +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb3ZfMjdpanU2bnRraSIsInMiLCJhIiwiRSIsImYiLCJiIiwibiIsIm8iLCJtIiwicCIsIm9uQ3JlYXRlUmVxdWVzdCIsImMiLCJ0IiwiZSIsImNyZWF0ZUJ1dHRvbkFyaWFMYWJlbCIsIkQiLCJkIiwiJGltcGxpY2l0IiwiaSIsInkiLCJsYWJlbCIsIlIiLCJ0aXRsZSIsImwiLCJyZXF1aXJlZCIsImNhcHRpb24iLCJjb2x1bW5zIiwic2hvd0NyZWF0ZUJ1dHRvbiIsImNyZWF0ZVJlcXVlc3RlZCIsIlMiLCJlbWl0IiwiybVmYWMiLCJyIiwiybVjbXAiLCJ0eXBlIiwic2VsZWN0b3JzIiwiaW5wdXRzIiwib3V0cHV0cyIsIm5nQ29udGVudFNlbGVjdG9ycyIsIkEiLCJkZWNscyIsInZhcnMiLCJjb25zdHMiLCJ0ZW1wbGF0ZSIsIl8iLCJnIiwiQiIsIngiLCJUIiwidyIsInUiLCJ2IiwiaCIsImVuY2Fwc3VsYXRpb24iLCJjaGFuZ2VEZXRlY3Rpb24iXSwic291cmNlcyI6WyJzcmMvYXBwL3NoYXJlZC9jb21wb25lbnRzL2FsYXJtLXRhYmxlL2FsYXJtLXRhYmxlLXNoZWxsLmNvbXBvbmVudC50cyIsInNyYy9hcHAvc2hhcmVkL2NvbXBvbmVudHMvYWxhcm0tdGFibGUvYWxhcm0tdGFibGUtc2hlbGwuY29tcG9uZW50Lmh0bWwiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgaW5wdXQsIG91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWxhcm1UYWJsZUNvbHVtbiB9IGZyb20gJy4uLy4uL21vZGVscy9hbGFybS10YWJsZS5tb2RlbCc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnYXBwLWFsYXJtLXRhYmxlLXNoZWxsJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vYWxhcm0tdGFibGUtc2hlbGwuY29tcG9uZW50Lmh0bWwnLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBBbGFybVRhYmxlU2hlbGxDb21wb25lbnQge1xuICAgIHB1YmxpYyByZWFkb25seSB0aXRsZSA9IGlucHV0LnJlcXVpcmVkPHN0cmluZz4oKTtcbiAgICBwdWJsaWMgcmVhZG9ubHkgY2FwdGlvbiA9IGlucHV0PHN0cmluZz4oJ1RhYmVsbGEgYWxsYXJtaScpO1xuICAgIHB1YmxpYyByZWFkb25seSBjb2x1bW5zID0gaW5wdXQucmVxdWlyZWQ8cmVhZG9ubHkgQWxhcm1UYWJsZUNvbHVtbltdPigpO1xuICAgIHB1YmxpYyByZWFkb25seSBzaG93Q3JlYXRlQnV0dG9uID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHB1YmxpYyByZWFkb25seSBjcmVhdGVCdXR0b25BcmlhTGFiZWwgPSBpbnB1dDxzdHJpbmc+KCdBZ2dpdW5naSBudW92byBlbGVtZW50bycpO1xuXG4gICAgcHVibGljIHJlYWRvbmx5IGNyZWF0ZVJlcXVlc3RlZCA9IG91dHB1dDx2b2lkPigpO1xuXG4gICAgcHVibGljIG9uQ3JlYXRlUmVxdWVzdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jcmVhdGVSZXF1ZXN0ZWQuZW1pdCgpO1xuICAgIH1cbn1cbiIsIjxzZWN0aW9uIGNsYXNzPVwib3ZlcmZsb3ctaGlkZGVuIHJvdW5kZWQtMnhsIGJvcmRlciBib3JkZXItc2xhdGUtMjAwIGJnLXdoaXRlIHNoYWRvdy1zbVwiPlxuICAgIDxoZWFkZXIgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gZ2FwLTMgYm9yZGVyLWIgYm9yZGVyLXNsYXRlLTEwMCBiZy1zbGF0ZS01MCBweC01IHB5LTRcIj5cbiAgICAgICAgPGgyIGNsYXNzPVwidGV4dC1zbSBmb250LWJvbGQgdHJhY2tpbmctdGlnaHQgdGV4dC1zbGF0ZS05MDBcIj57eyB0aXRsZSgpIH19PC9oMj5cblxuICAgICAgICBAaWYgKHNob3dDcmVhdGVCdXR0b24oKSkge1xuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwib25DcmVhdGVSZXF1ZXN0KClcIiBbYXR0ci5hcmlhLWxhYmVsXT1cImNyZWF0ZUJ1dHRvbkFyaWFMYWJlbCgpXCJcbiAgICAgICAgICAgIGNsYXNzPVwiY2FyZS1idG4gY2FyZS1idG4tLXByaW1hcnkgY2FyZS1idG4tLWljb24gY2FyZS1idG4tLWNvbXBhY3QgdGV4dC1iYXNlIGxlYWRpbmctbm9uZSBmb2N1cy12aXNpYmxlOm91dGxpbmUtMiBmb2N1cy12aXNpYmxlOm91dGxpbmUtb2Zmc2V0LTIgZm9jdXMtdmlzaWJsZTpvdXRsaW5lLWFtYmVyLTQwMFwiPlxuICAgICAgICAgICAgK1xuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgfVxuICAgIDwvaGVhZGVyPlxuXG4gICAgPGRpdiBjbGFzcz1cIm92ZXJmbG93LXgtYXV0b1wiPlxuICAgICAgICA8dGFibGUgY2xhc3M9XCJtaW4tdy1mdWxsIHRleHQtbGVmdCB0ZXh0LXNtXCIgW2F0dHIuYXJpYS1sYWJlbF09XCJjYXB0aW9uKClcIj5cbiAgICAgICAgICAgIDxjYXB0aW9uIGNsYXNzPVwic3Itb25seVwiPnt7IGNhcHRpb24oKSB9fTwvY2FwdGlvbj5cbiAgICAgICAgICAgIDx0aGVhZD5cbiAgICAgICAgICAgICAgICA8dHIgY2xhc3M9XCJib3JkZXItYiBib3JkZXItc2xhdGUtMTAwXCI+XG4gICAgICAgICAgICAgICAgICAgIEBmb3IgKGNvbHVtbiBvZiBjb2x1bW5zKCk7IHRyYWNrIGNvbHVtbi5pZCkge1xuICAgICAgICAgICAgICAgICAgICA8dGggc2NvcGU9XCJjb2xcIiBjbGFzcz1cInB4LTUgcHktMyB0ZXh0LVsxMXB4XSBmb250LXNlbWlib2xkIHVwcGVyY2FzZSB0cmFja2luZy13aWRlciB0ZXh0LXNsYXRlLTQwMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbi5sYWJlbCB9fTwvdGg+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgPC90aGVhZD5cbiAgICAgICAgICAgIDx0Ym9keSBjbGFzcz1cImRpdmlkZS15IGRpdmlkZS1zbGF0ZS01MFwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250ZW50IC8+XG4gICAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICA8L3RhYmxlPlxuICAgIDwvZGl2PlxuPC9zZWN0aW9uPiJdLCJtYXBwaW5ncyI6IjsraUJDS1FBLGNBQUEsR0FBQUMsQ0FBQSxNQUFBQyxDQUFBLGdCQUFzQkMsQ0FBQSxvQkFBQUgsY0FBQSxHQUFBSSxDQUFBLEtBQUFKLENBQUEsaUJBQUFDLENBQUEsTUFBQUksQ0FBQSxDQUFBQyxDQUFBLE1BQUFDLENBQUEsRUFBQVAsY0FBQSxHQUFBQyxDQUFBLE1BQUFPLENBQUEsSUFBQVIsY0FBQSxHQUFBQyxDQUFBLGFBQUFRLENBQUEsQ0FBU0YsQ0FBQSxDQUFBRyxlQUFBLEVBQWlCLEtBRTVDQyxDQUFBLFVBQ0pDLENBQUEsU0FBQVosY0FBQSxHQUFBSyxDQUFBLFVBQUFMLGNBQUEsR0FBQUMsQ0FBQSxTQUFBWSxDQUFBLElBQUFiLGNBQUEsR0FBQUssQ0FBQSxhQUFBQyxDQUFBLEVBQUFOLGNBQUEsR0FBQUMsQ0FBQSxPQUFBTyxDQUFBLElBQUFSLGNBQUEsR0FBQUMsQ0FBQSxPQUFBQSxDQUFBLGNBQUFLLENBQUEsQ0FBQVEscUJBQUEsVUFBQWQsY0FBQSxHQUFBSyxDQUFBLG9CQUFBVSxFQUFBRixDQUFBLENBQUFHLENBQUEsRUFBQWhCLGNBQUEsR0FBQUksQ0FBQSxLQUFBSixDQUFBLGlCQUFBQyxDQUFBLFdBQUFELGNBQUEsR0FBQUssQ0FBQSxTQUFBUSxDQUFBLE1BQUFiLGNBQUEsR0FBQUssQ0FBQSxTQVVZSCxDQUFBLFdBQ0lTLENBQUEsSUFDZUMsQ0FBQSxJQUFBQyxDQUFBLElBQUFiLGNBQUEsR0FBQUssQ0FBQSxhQUFBQyxDQUFBLEVBQUFOLGNBQUEsR0FBQUMsQ0FBQSxPQUFBZSxDQUFBLENBQUFDLFNBQUEsRUFEZmpCLGNBQUEsR0FBQUMsQ0FBQSxPQUFBaUIsQ0FBQSxHQUFBQyxDQUFBLEtBQUFiLENBQUEsQ0FBQWMsS0FBQSxRQUFBcEIsY0FBQSxHQUFBSyxDQUFBLFdEWHhCLEdBQWEsQ0FBQWdCLENBQUEsRUFBQXJCLGNBQUEsR0FBQUMsQ0FBQSxRQUF3QixLQUFBRCxjQUFBLEdBQUFJLENBQUEsTUFBL0IsS0FBTyxDQUFBUyxDQUF3QixDQUNqQlMsS0FBQSxFQUFBdEIsY0FBQSxHQUFBQyxDQUFBLE9BQVFzQixDQUFBLENBQU1DLFFBQUEsQ0FBUSxHQUN0QkMsT0FBQSxFQUFBekIsY0FBQSxHQUFBQyxDQUFBLE9BQVVzQixDQUFBLENBQWMsaUJBQWlCLEdBQ3pDRyxPQUFBLEVBQUExQixjQUFBLEdBQUFDLENBQUEsT0FBVXNCLENBQUEsQ0FBTUMsUUFBQSxDQUFRLEdBQ3hCRyxnQkFBQSxFQUFBM0IsY0FBQSxHQUFBQyxDQUFBLE9BQW1Cc0IsQ0FBQSxDQUFlLEVBQUssR0FDdkNULHFCQUFBLEVBQUFkLGNBQUEsR0FBQUMsQ0FBQSxPQUF3QnNCLENBQUEsQ0FBYyx5QkFBeUIsR0FFL0RLLGVBQUEsRUFBQTVCLGNBQUEsR0FBQUMsQ0FBQSxPQUFrQjRCLENBQUEsQ0FBTSxHQUVqQ25CLGdCQUFBLENBQWUsQ0FBQVYsY0FBQSxHQUFBSSxDQUFBLEtBQUFKLENBQUEsaUJBQUFDLENBQUEsT0FDbEIsS0FBSzJCLGVBQUEsQ0FBZ0JFLElBQUEsQ0FBSSxDQUM3QixTQUFBQyxJQUFBLEVBQUEvQixjQUFBLEdBQUFDLENBQUEsZ0JBQUErQixDQUFBLEVBQUFoQyxjQUFBLEdBQUFJLENBQUEsS0FBQUosQ0FBQSxpQkFBQUMsQ0FBQSxtQkFBQUQsY0FBQSxHQUFBSyxDQUFBLFNBQUEyQixDQUFBLElBQUFoQyxjQUFBLEdBQUFLLENBQUEsU0FYU1EsQ0FBQSxJQUF3QixXQUFBb0IsSUFBQSxFQUFBakMsY0FBQSxHQUFBQyxDQUFBLE9BQUFHLENBQUEsRUFBQThCLElBQUEsQ0FBeEJyQixDQUFBLENBQXdCc0IsU0FBQSw2QkFBQUMsTUFBQSxFQUFBZCxLQUFBLGFBQUFHLE9BQUEsZUFBQUMsT0FBQSxlQUFBQyxnQkFBQSx3QkFBQWIscUJBQUEsOEJBQUF1QixPQUFBLEVBQUFULGVBQUEsb0JBQUFVLGtCQUFBLENBQUFDLENBQUEsQ0FBQUMsS0FBQSxJQUFBQyxJQUFBLEdBQUFDLE1BQUEsdzZCQUFBQyxRQUFBLFNBQUFBLENBQUFYLENBQUEsQ0FBQXpCLENBQUEsRUFBQVAsY0FBQSxHQUFBSSxDQUFBLEtBQUFKLENBQUEsaUJBQUFDLENBQUEsUUFBQUQsY0FBQSxHQUFBSyxDQUFBLFNBQUEyQixDQUFBLE1BQUFoQyxjQUFBLEdBQUFLLENBQUEsU0FBQXVDLENBQUEsR0NSckMxQyxDQUFBLGdCQUF3RixjQUNvQixVQUN4Q1MsQ0FBQSxJQUFhQyxDQUFBLEdBRXpFaUMsQ0FBQSxHQUFBQyxDQUFBLGlCQU1KbEMsQ0FBQSxHQUVBVixDQUFBLFlBQTZCLGFBQ2lELGVBQzdDUyxDQUFBLElBQWVDLENBQUEsR0FDeENWLENBQUEsWUFBTyxXQUVDNkMsQ0FBQSxJQUFBaEMsQ0FBQSxZQUFBaUMsQ0FBQSxFQUtKcEMsQ0FBQSxHQUFLLEVBRVRWLENBQUEsZUFDSStDLENBQUEsS0FDSnJDLENBQUEsR0FBUSxFQUNKLEVBQ04sSUFBQVosY0FBQSxHQUFBSyxDQUFBLFNBQUEyQixDQUFBLE1BQUFoQyxjQUFBLEdBQUFLLENBQUEsU0ExQjBEYSxDQUFBLElBQUFnQyxDQUFBLENBQUEzQyxDQUFBLENBQUFlLEtBQUEsSUFFNURKLENBQUEsR0FBQWlDLENBQUEsQ0FBQTVDLENBQUEsQ0FBQW9CLGdCQUFBLElBQUEzQixjQUFBLEdBQUFLLENBQUEsYUFBQUwsY0FBQSxHQUFBSyxDQUFBLGNBUzRDYSxDQUFBLElBQUFqQixDQUFBLGNBQUFNLENBQUEsQ0FBQWtCLE9BQUEsSUFDZlAsQ0FBQSxJQUFBZ0MsQ0FBQSxDQUFBM0MsQ0FBQSxDQUFBa0IsT0FBQSxJQUdqQlAsQ0FBQSxJQUFBa0MsQ0FBQSxDQUFBN0MsQ0FBQSxDQUFBbUIsT0FBQSxFQUFTLEtBQUEyQixhQUFBLEdBQUFDLGVBQUEsT0FBQXRELGNBQUEsR0FBQUMsQ0FBQSxhRFRoQixDQUFBWSxDQUF3QixjQUFBUSxDQUFBLElBQUFuQixDQUFBLEUiLCJpZ25vcmVMaXN0IjpbXX0= \ No newline at end of file diff --git a/frontend/dist-instrumented/chunk-SNRTUDXT.js.map b/frontend/dist-instrumented/chunk-SNRTUDXT.js.map new file mode 100644 index 00000000..d33e0122 --- /dev/null +++ b/frontend/dist-instrumented/chunk-SNRTUDXT.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["src/app/shared/components/alarm-table/alarm-table-shell.component.ts", "src/app/shared/components/alarm-table/alarm-table-shell.component.html"], + "sourcesContent": ["import { ChangeDetectionStrategy, Component, input, output } from '@angular/core';\nimport { AlarmTableColumn } from '../../models/alarm-table.model';\n\n@Component({\n selector: 'app-alarm-table-shell',\n templateUrl: './alarm-table-shell.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AlarmTableShellComponent {\n public readonly title = input.required();\n public readonly caption = input('Tabella allarmi');\n public readonly columns = input.required();\n public readonly showCreateButton = input(false);\n public readonly createButtonAriaLabel = input('Aggiungi nuovo elemento');\n\n public readonly createRequested = output();\n\n public onCreateRequest(): void {\n this.createRequested.emit();\n }\n}\n", "
\n
\n

{{ title() }}

\n\n @if (showCreateButton()) {\n \n }\n
\n\n
\n \n \n \n \n @for (column of columns(); track column.id) {\n \n }\n \n \n \n \n \n
{{ caption() }}
\n {{\n column.label }}
\n
\n
"], + "mappings": "mQCKQA,EAAA,EAAA,SAAA,EAAA,EAAsBC,EAAA,QAAA,UAAA,CAAAC,EAAAC,CAAA,EAAA,IAAAC,EAAAC,EAAA,EAAA,OAAAC,EAASF,EAAAG,gBAAA,CAAiB,CAAA,CAAA,EAE5CC,EAAA,EAAA,KAAA,EACJC,EAAA,wFAUYT,EAAA,EAAA,KAAA,CAAA,EACIQ,EAAA,CAAA,EACeC,EAAA,0BADfC,EAAA,EAAAC,EAAA,IAAAC,EAAAC,KAAA,GDXxB,IAAaC,GAAwB,IAAA,CAA/B,MAAOA,CAAwB,CACjBC,MAAQC,EAAMC,SAAQ,EACtBC,QAAUF,EAAc,iBAAiB,EACzCG,QAAUH,EAAMC,SAAQ,EACxBG,iBAAmBJ,EAAe,EAAK,EACvCK,sBAAwBL,EAAc,yBAAyB,EAE/DM,gBAAkBC,EAAM,EAEjChB,iBAAe,CAClB,KAAKe,gBAAgBE,KAAI,CAC7B,4CAXSV,EAAwB,2BAAxBA,EAAwBW,UAAA,CAAA,CAAA,uBAAA,CAAA,EAAAC,OAAA,CAAAX,MAAA,CAAA,EAAA,OAAA,EAAAG,QAAA,CAAA,EAAA,SAAA,EAAAC,QAAA,CAAA,EAAA,SAAA,EAAAC,iBAAA,CAAA,EAAA,kBAAA,EAAAC,sBAAA,CAAA,EAAA,uBAAA,CAAA,EAAAM,QAAA,CAAAL,gBAAA,iBAAA,EAAAM,mBAAAC,EAAAC,MAAA,GAAAC,KAAA,EAAAC,OAAA,CAAA,CAAA,EAAA,kBAAA,cAAA,SAAA,mBAAA,WAAA,WAAA,EAAA,CAAA,EAAA,OAAA,eAAA,kBAAA,QAAA,WAAA,mBAAA,cAAA,OAAA,MAAA,EAAA,CAAA,EAAA,UAAA,YAAA,iBAAA,gBAAA,EAAA,CAAA,OAAA,SAAA,EAAA,WAAA,oBAAA,iBAAA,oBAAA,YAAA,eAAA,0BAAA,iCAAA,iCAAA,EAAA,CAAA,EAAA,iBAAA,EAAA,CAAA,EAAA,aAAA,YAAA,SAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,WAAA,kBAAA,EAAA,CAAA,QAAA,MAAA,EAAA,OAAA,OAAA,cAAA,gBAAA,YAAA,iBAAA,gBAAA,EAAA,CAAA,EAAA,WAAA,iBAAA,EAAA,CAAA,OAAA,SAAA,EAAA,WAAA,oBAAA,iBAAA,oBAAA,YAAA,eAAA,0BAAA,iCAAA,kCAAA,EAAA,OAAA,CAAA,EAAAC,SAAA,SAAAC,EAAAC,EAAA,CAAAD,EAAA,QCRrClC,EAAA,EAAA,UAAA,CAAA,EAAwF,EAAA,SAAA,CAAA,EACoB,EAAA,KAAA,CAAA,EACxCQ,EAAA,CAAA,EAAaC,EAAA,EAEzE2B,EAAA,EAAAC,EAAA,EAAA,EAAA,SAAA,CAAA,EAMJ5B,EAAA,EAEAT,EAAA,EAAA,MAAA,CAAA,EAA6B,EAAA,QAAA,CAAA,EACiD,EAAA,UAAA,CAAA,EAC7CQ,EAAA,CAAA,EAAeC,EAAA,EACxCT,EAAA,EAAA,OAAA,EAAO,GAAA,KAAA,CAAA,EAECsC,EAAA,GAAAC,EAAA,EAAA,EAAA,KAAA,EAAAC,CAAA,EAKJ/B,EAAA,EAAK,EAETT,EAAA,GAAA,QAAA,CAAA,EACIyC,EAAA,EAAA,EACJhC,EAAA,EAAQ,EACJ,EACN,SA1B0DC,EAAA,CAAA,EAAAgC,EAAAP,EAAApB,MAAA,CAAA,EAE5DL,EAAA,EAAAiC,EAAAR,EAAAf,iBAAA,EAAA,EAAA,EAAA,EAS4CV,EAAA,CAAA,8BACfA,EAAA,CAAA,EAAAgC,EAAAP,EAAAjB,QAAA,CAAA,EAGjBR,EAAA,CAAA,EAAAkC,EAAAT,EAAAhB,QAAA,CAAS,+CDThBL,CAAwB,GAAA", + "names": ["\u0275\u0275domElementStart", "\u0275\u0275domListener", "\u0275\u0275restoreView", "_r1", "ctx_r1", "\u0275\u0275nextContext", "\u0275\u0275resetView", "onCreateRequest", "\u0275\u0275text", "\u0275\u0275domElementEnd", "\u0275\u0275advance", "\u0275\u0275textInterpolate1", "column_r3", "label", "AlarmTableShellComponent", "title", "input", "required", "caption", "columns", "showCreateButton", "createButtonAriaLabel", "createRequested", "output", "emit", "selectors", "inputs", "outputs", "ngContentSelectors", "_c0", "decls", "vars", "consts", "template", "rf", "ctx", "\u0275\u0275conditionalCreate", "AlarmTableShellComponent_Conditional_4_Template", "\u0275\u0275repeaterCreate", "AlarmTableShellComponent_For_12_Template", "_forTrack0", "\u0275\u0275projection", "\u0275\u0275textInterpolate", "\u0275\u0275conditional", "\u0275\u0275repeater"] +} diff --git a/frontend/dist-instrumented/chunk-TSF4KDM2.js b/frontend/dist-instrumented/chunk-TSF4KDM2.js new file mode 100644 index 00000000..332471df --- /dev/null +++ b/frontend/dist-instrumented/chunk-TSF4KDM2.js @@ -0,0 +1,4 @@ +function cov_12jtwdk2fl(){var path="/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-TSF4KDM2.js";var hash="8847c94c95253345d7d8e7229a3a220004fa02cc";var global=new Function("return this")();var gcv="__coverage__";var coverageData={path:"/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-TSF4KDM2.js",statementMap:{"0":{start:{line:1,column:981},end:{line:1,column:992}},"1":{start:{line:1,column:988},end:{line:1,column:992}},"2":{start:{line:1,column:1010},end:{line:1,column:1095}},"3":{start:{line:1,column:1068},end:{line:1,column:1079}},"4":{start:{line:1,column:1080},end:{line:1,column:1094}},"5":{start:{line:1,column:1113},end:{line:1,column:1174}},"6":{start:{line:1,column:1192},end:{line:1,column:1452}},"7":{start:{line:1,column:1354},end:{line:1,column:1365}},"8":{start:{line:1,column:1366},end:{line:1,column:1451}},"9":{start:{line:1,column:1470},end:{line:1,column:1683}},"10":{start:{line:1,column:1628},end:{line:1,column:1631}},"11":{start:{line:1,column:1632},end:{line:1,column:1682}},"12":{start:{line:1,column:1691},end:{line:1,column:2830}},"13":{start:{line:1,column:1732},end:{line:1,column:1761}},"14":{start:{line:1,column:1744},end:{line:1,column:1760}},"15":{start:{line:1,column:1779},end:{line:1,column:2817}},"16":{start:{line:1,column:2732},end:{line:1,column:2781}},"17":{start:{line:1,column:2818},end:{line:1,column:2826}},"18":{start:{line:1,column:2848},end:{line:1,column:2956}},"19":{start:{line:1,column:2895},end:{line:1,column:2906}},"20":{start:{line:1,column:2907},end:{line:1,column:2955}},"21":{start:{line:1,column:2974},end:{line:1,column:3186}},"22":{start:{line:1,column:2988},end:{line:1,column:2991}},"23":{start:{line:1,column:2992},end:{line:1,column:3185}},"24":{start:{line:1,column:3042},end:{line:1,column:3047}},"25":{start:{line:1,column:3053},end:{line:1,column:3056}},"26":{start:{line:1,column:3057},end:{line:1,column:3089}},"27":{start:{line:1,column:3186},end:{line:1,column:3268}},"28":{start:{line:1,column:3200},end:{line:1,column:3206}},"29":{start:{line:1,column:3209},end:{line:1,column:3212}},"30":{start:{line:1,column:3213},end:{line:1,column:3267}},"31":{start:{line:1,column:3286},end:{line:1,column:3390}},"32":{start:{line:1,column:3344},end:{line:1,column:3350}},"33":{start:{line:1,column:3351},end:{line:1,column:3389}},"34":{start:{line:1,column:3408},end:{line:1,column:3514}},"35":{start:{line:1,column:3468},end:{line:1,column:3474}},"36":{start:{line:1,column:3475},end:{line:1,column:3513}},"37":{start:{line:1,column:3532},end:{line:1,column:3624}},"38":{start:{line:1,column:3596},end:{line:1,column:3602}},"39":{start:{line:1,column:3603},end:{line:1,column:3623}},"40":{start:{line:1,column:3642},end:{line:1,column:3974}},"41":{start:{line:1,column:3805},end:{line:1,column:3811}},"42":{start:{line:1,column:3814},end:{line:1,column:3817}},"43":{start:{line:1,column:3818},end:{line:1,column:3973}},"44":{start:{line:1,column:3992},end:{line:1,column:4064}},"45":{start:{line:1,column:4072},end:{line:1,column:7063}},"46":{start:{line:1,column:4102},end:{line:1,column:4111}},"47":{start:{line:1,column:4131},end:{line:1,column:4135}},"48":{start:{line:1,column:4156},end:{line:1,column:4160}},"49":{start:{line:1,column:4174},end:{line:1,column:4185}},"50":{start:{line:1,column:4207},end:{line:1,column:4218}},"51":{start:{line:1,column:4231},end:{line:1,column:4235}},"52":{start:{line:1,column:4246},end:{line:1,column:4250}},"53":{start:{line:1,column:4262},end:{line:1,column:4695}},"54":{start:{line:1,column:4354},end:{line:1,column:4455}},"55":{start:{line:1,column:4546},end:{line:1,column:4565}},"56":{start:{line:1,column:4556},end:{line:1,column:4564}},"57":{start:{line:1,column:4611},end:{line:1,column:4619}},"58":{start:{line:1,column:4626},end:{line:1,column:4693}},"59":{start:{line:1,column:4718},end:{line:1,column:4764}},"60":{start:{line:1,column:4751},end:{line:1,column:4763}},"61":{start:{line:1,column:4792},end:{line:1,column:4806}},"62":{start:{line:1,column:4807},end:{line:1,column:4882}},"63":{start:{line:1,column:4901},end:{line:1,column:4932}},"64":{start:{line:1,column:4933},end:{line:1,column:4977}},"65":{start:{line:1,column:4995},end:{line:1,column:5024}},"66":{start:{line:1,column:5007},end:{line:1,column:5023}},"67":{start:{line:1,column:5042},end:{line:1,column:7050}},"68":{start:{line:1,column:6697},end:{line:1,column:6999}},"69":{start:{line:1,column:6901},end:{line:1,column:6905}},"70":{start:{line:1,column:6906},end:{line:1,column:6998}},"71":{start:{line:1,column:7051},end:{line:1,column:7059}},"72":{start:{line:1,column:7071},end:{line:1,column:7082}},"73":{start:{line:1,column:7078},end:{line:1,column:7082}},"74":{start:{line:1,column:7100},end:{line:1,column:7223}},"75":{start:{line:1,column:7196},end:{line:1,column:7199}},"76":{start:{line:1,column:7200},end:{line:1,column:7222}},"77":{start:{line:1,column:7241},end:{line:1,column:7330}},"78":{start:{line:1,column:7348},end:{line:1,column:7561}},"79":{start:{line:1,column:7579},end:{line:1,column:7922}},"80":{start:{line:1,column:7593},end:{line:1,column:7596}},"81":{start:{line:1,column:7597},end:{line:1,column:7921}},"82":{start:{line:1,column:7862},end:{line:1,column:7876}},"83":{start:{line:1,column:7879},end:{line:1,column:7883}},"84":{start:{line:1,column:7884},end:{line:1,column:7911}},"85":{start:{line:1,column:7922},end:{line:1,column:8499}},"86":{start:{line:1,column:7936},end:{line:1,column:7947}},"87":{start:{line:1,column:7948},end:{line:1,column:8498}},"88":{start:{line:1,column:8517},end:{line:1,column:8715}},"89":{start:{line:1,column:8598},end:{line:1,column:8602}},"90":{start:{line:1,column:8603},end:{line:1,column:8714}},"91":{start:{line:1,column:8733},end:{line:1,column:8955}},"92":{start:{line:1,column:8850},end:{line:1,column:8851}},"93":{start:{line:1,column:8854},end:{line:1,column:8857}},"94":{start:{line:1,column:8858},end:{line:1,column:8954}},"95":{start:{line:1,column:8973},end:{line:1,column:9051}},"96":{start:{line:1,column:9059},end:{line:1,column:12661}},"97":{start:{line:1,column:9096},end:{line:1,column:9101}},"98":{start:{line:1,column:9117},end:{line:1,column:9122}},"99":{start:{line:1,column:9153},end:{line:1,column:9157}},"100":{start:{line:1,column:9169},end:{line:1,column:9173}},"101":{start:{line:1,column:9182},end:{line:1,column:9365}},"102":{start:{line:1,column:9369},end:{line:1,column:9423}},"103":{start:{line:1,column:9429},end:{line:1,column:9516}},"104":{start:{line:1,column:9442},end:{line:1,column:9451}},"105":{start:{line:1,column:9452},end:{line:1,column:9514}},"106":{start:{line:1,column:9531},end:{line:1,column:9566}},"107":{start:{line:1,column:9537},end:{line:1,column:9565}},"108":{start:{line:1,column:9577},end:{line:1,column:9608}},"109":{start:{line:1,column:9583},end:{line:1,column:9607}},"110":{start:{line:1,column:9621},end:{line:1,column:9653}},"111":{start:{line:1,column:9627},end:{line:1,column:9652}},"112":{start:{line:1,column:9665},end:{line:1,column:9846}},"113":{start:{line:1,column:9804},end:{line:1,column:9844}},"114":{start:{line:1,column:9860},end:{line:1,column:9903}},"115":{start:{line:1,column:9921},end:{line:1,column:9950}},"116":{start:{line:1,column:9933},end:{line:1,column:9949}},"117":{start:{line:1,column:9968},end:{line:1,column:12648}},"118":{start:{line:1,column:12446},end:{line:1,column:12584}},"119":{start:{line:1,column:12559},end:{line:1,column:12583}},"120":{start:{line:1,column:12649},end:{line:1,column:12657}},"121":{start:{line:1,column:12669},end:{line:2,column:82}},"122":{start:{line:1,column:12700},end:{line:1,column:12729}},"123":{start:{line:1,column:12712},end:{line:1,column:12728}},"124":{start:{line:1,column:12747},end:{line:2,column:69}},"125":{start:{line:1,column:13260},end:{line:1,column:13880}},"126":{start:{line:2,column:70},end:{line:2,column:78}}},fnMap:{"0":{name:"(anonymous_0)",decl:{start:{line:1,column:981},end:{line:1,column:982}},loc:{start:{line:1,column:988},end:{line:1,column:992}},line:1},"1":{name:"ce",decl:{start:{line:1,column:1002},end:{line:1,column:1004}},loc:{start:{line:1,column:1009},end:{line:1,column:1096}},line:1},"2":{name:"fe",decl:{start:{line:1,column:1105},end:{line:1,column:1107}},loc:{start:{line:1,column:1112},end:{line:1,column:1175}},line:1},"3":{name:"ge",decl:{start:{line:1,column:1184},end:{line:1,column:1186}},loc:{start:{line:1,column:1191},end:{line:1,column:1453}},line:1},"4":{name:"ue",decl:{start:{line:1,column:1462},end:{line:1,column:1464}},loc:{start:{line:1,column:1469},end:{line:1,column:1684}},line:1},"5":{name:"(anonymous_5)",decl:{start:{line:1,column:1692},end:{line:1,column:1693}},loc:{start:{line:1,column:1696},end:{line:1,column:2827}},line:1},"6":{name:"(anonymous_6)",decl:{start:{line:1,column:1732},end:{line:1,column:1733}},loc:{start:{line:1,column:1743},end:{line:1,column:1761}},line:1},"7":{name:"(anonymous_7)",decl:{start:{line:1,column:2718},end:{line:1,column:2719}},loc:{start:{line:1,column:2731},end:{line:1,column:2782}},line:1},"8":{name:"ve",decl:{start:{line:1,column:2840},end:{line:1,column:2842}},loc:{start:{line:1,column:2847},end:{line:1,column:2957}},line:1},"9":{name:"xe",decl:{start:{line:1,column:2966},end:{line:1,column:2968}},loc:{start:{line:1,column:2973},end:{line:1,column:3269}},line:1},"10":{name:"(anonymous_10)",decl:{start:{line:1,column:3030},end:{line:1,column:3031}},loc:{start:{line:1,column:3041},end:{line:1,column:3090}},line:1},"11":{name:"_e",decl:{start:{line:1,column:3278},end:{line:1,column:3280}},loc:{start:{line:1,column:3285},end:{line:1,column:3391}},line:1},"12":{name:"be",decl:{start:{line:1,column:3400},end:{line:1,column:3402}},loc:{start:{line:1,column:3407},end:{line:1,column:3515}},line:1},"13":{name:"he",decl:{start:{line:1,column:3524},end:{line:1,column:3526}},loc:{start:{line:1,column:3531},end:{line:1,column:3625}},line:1},"14":{name:"Ce",decl:{start:{line:1,column:3634},end:{line:1,column:3636}},loc:{start:{line:1,column:3641},end:{line:1,column:3975}},line:1},"15":{name:"ye",decl:{start:{line:1,column:3984},end:{line:1,column:3986}},loc:{start:{line:1,column:3991},end:{line:1,column:4065}},line:1},"16":{name:"(anonymous_16)",decl:{start:{line:1,column:4073},end:{line:1,column:4074}},loc:{start:{line:1,column:4077},end:{line:1,column:7060}},line:1},"17":{name:"(anonymous_17)",decl:{start:{line:1,column:4251},end:{line:1,column:4252}},loc:{start:{line:1,column:4261},end:{line:1,column:4696}},line:1},"18":{name:"(anonymous_18)",decl:{start:{line:1,column:4350},end:{line:1,column:4351}},loc:{start:{line:1,column:4353},end:{line:1,column:4456}},line:1},"19":{name:"(anonymous_19)",decl:{start:{line:1,column:4537},end:{line:1,column:4538}},loc:{start:{line:1,column:4546},end:{line:1,column:4565}},line:1},"20":{name:"(anonymous_20)",decl:{start:{line:1,column:4553},end:{line:1,column:4554}},loc:{start:{line:1,column:4556},end:{line:1,column:4564}},line:1},"21":{name:"(anonymous_21)",decl:{start:{line:1,column:4608},end:{line:1,column:4609}},loc:{start:{line:1,column:4611},end:{line:1,column:4619}},line:1},"22":{name:"(anonymous_22)",decl:{start:{line:1,column:4623},end:{line:1,column:4624}},loc:{start:{line:1,column:4626},end:{line:1,column:4693}},line:1},"23":{name:"(anonymous_23)",decl:{start:{line:1,column:4696},end:{line:1,column:4697}},loc:{start:{line:1,column:4717},end:{line:1,column:4765}},line:1},"24":{name:"(anonymous_24)",decl:{start:{line:1,column:4748},end:{line:1,column:4749}},loc:{start:{line:1,column:4751},end:{line:1,column:4763}},line:1},"25":{name:"(anonymous_25)",decl:{start:{line:1,column:4765},end:{line:1,column:4766}},loc:{start:{line:1,column:4785},end:{line:1,column:4883}},line:1},"26":{name:"(anonymous_26)",decl:{start:{line:1,column:4883},end:{line:1,column:4884}},loc:{start:{line:1,column:4894},end:{line:1,column:4978}},line:1},"27":{name:"(anonymous_27)",decl:{start:{line:1,column:4995},end:{line:1,column:4996}},loc:{start:{line:1,column:5006},end:{line:1,column:5024}},line:1},"28":{name:"(anonymous_28)",decl:{start:{line:1,column:6683},end:{line:1,column:6684}},loc:{start:{line:1,column:6696},end:{line:1,column:7000}},line:1},"29":{name:"(anonymous_29)",decl:{start:{line:1,column:7071},end:{line:1,column:7072}},loc:{start:{line:1,column:7078},end:{line:1,column:7082}},line:1},"30":{name:"Se",decl:{start:{line:1,column:7092},end:{line:1,column:7094}},loc:{start:{line:1,column:7099},end:{line:1,column:7224}},line:1},"31":{name:"Ee",decl:{start:{line:1,column:7233},end:{line:1,column:7235}},loc:{start:{line:1,column:7240},end:{line:1,column:7331}},line:1},"32":{name:"Ae",decl:{start:{line:1,column:7340},end:{line:1,column:7342}},loc:{start:{line:1,column:7347},end:{line:1,column:7562}},line:1},"33":{name:"Ie",decl:{start:{line:1,column:7571},end:{line:1,column:7573}},loc:{start:{line:1,column:7578},end:{line:1,column:8500}},line:1},"34":{name:"(anonymous_34)",decl:{start:{line:1,column:7845},end:{line:1,column:7846}},loc:{start:{line:1,column:7855},end:{line:1,column:7912}},line:1},"35":{name:"Me",decl:{start:{line:1,column:8509},end:{line:1,column:8511}},loc:{start:{line:1,column:8516},end:{line:1,column:8716}},line:1},"36":{name:"Te",decl:{start:{line:1,column:8725},end:{line:1,column:8727}},loc:{start:{line:1,column:8732},end:{line:1,column:8956}},line:1},"37":{name:"$e",decl:{start:{line:1,column:8965},end:{line:1,column:8967}},loc:{start:{line:1,column:8972},end:{line:1,column:9052}},line:1},"38":{name:"(anonymous_38)",decl:{start:{line:1,column:9060},end:{line:1,column:9061}},loc:{start:{line:1,column:9064},end:{line:1,column:12658}},line:1},"39":{name:"(anonymous_39)",decl:{start:{line:1,column:9431},end:{line:1,column:9432}},loc:{start:{line:1,column:9435},end:{line:1,column:9515}},line:1},"40":{name:"(anonymous_40)",decl:{start:{line:1,column:9533},end:{line:1,column:9534}},loc:{start:{line:1,column:9537},end:{line:1,column:9565}},line:1},"41":{name:"(anonymous_41)",decl:{start:{line:1,column:9579},end:{line:1,column:9580}},loc:{start:{line:1,column:9583},end:{line:1,column:9607}},line:1},"42":{name:"(anonymous_42)",decl:{start:{line:1,column:9623},end:{line:1,column:9624}},loc:{start:{line:1,column:9627},end:{line:1,column:9652}},line:1},"43":{name:"(anonymous_43)",decl:{start:{line:1,column:9654},end:{line:1,column:9655}},loc:{start:{line:1,column:9664},end:{line:1,column:9847}},line:1},"44":{name:"(anonymous_44)",decl:{start:{line:1,column:9799},end:{line:1,column:9800}},loc:{start:{line:1,column:9803},end:{line:1,column:9845}},line:1},"45":{name:"(anonymous_45)",decl:{start:{line:1,column:9847},end:{line:1,column:9848}},loc:{start:{line:1,column:9859},end:{line:1,column:9904}},line:1},"46":{name:"(anonymous_46)",decl:{start:{line:1,column:9921},end:{line:1,column:9922}},loc:{start:{line:1,column:9932},end:{line:1,column:9950}},line:1},"47":{name:"(anonymous_47)",decl:{start:{line:1,column:12432},end:{line:1,column:12433}},loc:{start:{line:1,column:12445},end:{line:1,column:12585}},line:1},"48":{name:"(anonymous_48)",decl:{start:{line:1,column:12670},end:{line:1,column:12671}},loc:{start:{line:1,column:12674},end:{line:2,column:79}},line:1},"49":{name:"(anonymous_49)",decl:{start:{line:1,column:12700},end:{line:1,column:12701}},loc:{start:{line:1,column:12711},end:{line:1,column:12729}},line:1},"50":{name:"(anonymous_50)",decl:{start:{line:1,column:13246},end:{line:1,column:13247}},loc:{start:{line:1,column:13259},end:{line:1,column:13881}},line:1}},branchMap:{"0":{loc:{start:{line:1,column:1010},end:{line:1,column:1095}},type:"if",locations:[{start:{line:1,column:1010},end:{line:1,column:1095}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1":{loc:{start:{line:1,column:1013},end:{line:1,column:1056}},type:"binary-expr",locations:[{start:{line:1,column:1013},end:{line:1,column:1016}},{start:{line:1,column:1019},end:{line:1,column:1055}}],line:1},"2":{loc:{start:{line:1,column:1113},end:{line:1,column:1174}},type:"binary-expr",locations:[{start:{line:1,column:1113},end:{line:1,column:1116}},{start:{line:1,column:1119},end:{line:1,column:1173}}],line:1},"3":{loc:{start:{line:1,column:1192},end:{line:1,column:1452}},type:"if",locations:[{start:{line:1,column:1192},end:{line:1,column:1452}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"4":{loc:{start:{line:1,column:1195},end:{line:1,column:1342}},type:"binary-expr",locations:[{start:{line:1,column:1195},end:{line:1,column:1198}},{start:{line:1,column:1201},end:{line:1,column:1341}}],line:1},"5":{loc:{start:{line:1,column:1470},end:{line:1,column:1683}},type:"if",locations:[{start:{line:1,column:1470},end:{line:1,column:1683}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"6":{loc:{start:{line:1,column:1473},end:{line:1,column:1616}},type:"binary-expr",locations:[{start:{line:1,column:1473},end:{line:1,column:1476}},{start:{line:1,column:1479},end:{line:1,column:1615}}],line:1},"7":{loc:{start:{line:1,column:1755},end:{line:1,column:1759}},type:"binary-expr",locations:[{start:{line:1,column:1755},end:{line:1,column:1756}},{start:{line:1,column:1758},end:{line:1,column:1759}}],line:1},"8":{loc:{start:{line:1,column:2732},end:{line:1,column:2756}},type:"binary-expr",locations:[{start:{line:1,column:2732},end:{line:1,column:2735}},{start:{line:1,column:2737},end:{line:1,column:2756}}],line:1},"9":{loc:{start:{line:1,column:2757},end:{line:1,column:2781}},type:"binary-expr",locations:[{start:{line:1,column:2757},end:{line:1,column:2760}},{start:{line:1,column:2762},end:{line:1,column:2781}}],line:1},"10":{loc:{start:{line:1,column:2764},end:{line:1,column:2780}},type:"cond-expr",locations:[{start:{line:1,column:2776},end:{line:1,column:2777}},{start:{line:1,column:2778},end:{line:1,column:2780}}],line:1},"11":{loc:{start:{line:1,column:2848},end:{line:1,column:2956}},type:"if",locations:[{start:{line:1,column:2848},end:{line:1,column:2956}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"12":{loc:{start:{line:1,column:2851},end:{line:1,column:2883}},type:"binary-expr",locations:[{start:{line:1,column:2851},end:{line:1,column:2854}},{start:{line:1,column:2857},end:{line:1,column:2882}}],line:1},"13":{loc:{start:{line:1,column:2974},end:{line:1,column:3186}},type:"if",locations:[{start:{line:1,column:2974},end:{line:1,column:3186}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"14":{loc:{start:{line:1,column:3186},end:{line:1,column:3268}},type:"if",locations:[{start:{line:1,column:3186},end:{line:1,column:3268}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"15":{loc:{start:{line:1,column:3286},end:{line:1,column:3390}},type:"if",locations:[{start:{line:1,column:3286},end:{line:1,column:3390}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"16":{loc:{start:{line:1,column:3289},end:{line:1,column:3332}},type:"binary-expr",locations:[{start:{line:1,column:3289},end:{line:1,column:3292}},{start:{line:1,column:3294},end:{line:1,column:3332}}],line:1},"17":{loc:{start:{line:1,column:3408},end:{line:1,column:3514}},type:"if",locations:[{start:{line:1,column:3408},end:{line:1,column:3514}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"18":{loc:{start:{line:1,column:3411},end:{line:1,column:3456}},type:"binary-expr",locations:[{start:{line:1,column:3411},end:{line:1,column:3414}},{start:{line:1,column:3416},end:{line:1,column:3456}}],line:1},"19":{loc:{start:{line:1,column:3532},end:{line:1,column:3624}},type:"if",locations:[{start:{line:1,column:3532},end:{line:1,column:3624}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"20":{loc:{start:{line:1,column:3535},end:{line:1,column:3584}},type:"binary-expr",locations:[{start:{line:1,column:3535},end:{line:1,column:3538}},{start:{line:1,column:3541},end:{line:1,column:3583}}],line:1},"21":{loc:{start:{line:1,column:3642},end:{line:1,column:3974}},type:"if",locations:[{start:{line:1,column:3642},end:{line:1,column:3974}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"22":{loc:{start:{line:1,column:3645},end:{line:1,column:3793}},type:"binary-expr",locations:[{start:{line:1,column:3645},end:{line:1,column:3648}},{start:{line:1,column:3651},end:{line:1,column:3792}}],line:1},"23":{loc:{start:{line:1,column:3992},end:{line:1,column:4064}},type:"binary-expr",locations:[{start:{line:1,column:3992},end:{line:1,column:3995}},{start:{line:1,column:3998},end:{line:1,column:4063}}],line:1},"24":{loc:{start:{line:1,column:4354},end:{line:1,column:4455}},type:"binary-expr",locations:[{start:{line:1,column:4354},end:{line:1,column:4364}},{start:{line:1,column:4367},end:{line:1,column:4454}}],line:1},"25":{loc:{start:{line:1,column:4933},end:{line:1,column:4977}},type:"binary-expr",locations:[{start:{line:1,column:4933},end:{line:1,column:4934}},{start:{line:1,column:4936},end:{line:1,column:4977}}],line:1},"26":{loc:{start:{line:1,column:5018},end:{line:1,column:5022}},type:"binary-expr",locations:[{start:{line:1,column:5018},end:{line:1,column:5019}},{start:{line:1,column:5021},end:{line:1,column:5022}}],line:1},"27":{loc:{start:{line:1,column:6697},end:{line:1,column:6999}},type:"if",locations:[{start:{line:1,column:6697},end:{line:1,column:6999}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"28":{loc:{start:{line:1,column:6700},end:{line:1,column:6889}},type:"binary-expr",locations:[{start:{line:1,column:6700},end:{line:1,column:6703}},{start:{line:1,column:6706},end:{line:1,column:6888}}],line:1},"29":{loc:{start:{line:1,column:7100},end:{line:1,column:7223}},type:"if",locations:[{start:{line:1,column:7100},end:{line:1,column:7223}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"30":{loc:{start:{line:1,column:7103},end:{line:1,column:7184}},type:"binary-expr",locations:[{start:{line:1,column:7103},end:{line:1,column:7106}},{start:{line:1,column:7109},end:{line:1,column:7183}}],line:1},"31":{loc:{start:{line:1,column:7241},end:{line:1,column:7330}},type:"binary-expr",locations:[{start:{line:1,column:7241},end:{line:1,column:7244}},{start:{line:1,column:7247},end:{line:1,column:7329}}],line:1},"32":{loc:{start:{line:1,column:7348},end:{line:1,column:7561}},type:"binary-expr",locations:[{start:{line:1,column:7348},end:{line:1,column:7351}},{start:{line:1,column:7354},end:{line:1,column:7560}}],line:1},"33":{loc:{start:{line:1,column:7579},end:{line:1,column:7922}},type:"if",locations:[{start:{line:1,column:7579},end:{line:1,column:7922}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"34":{loc:{start:{line:1,column:7922},end:{line:1,column:8499}},type:"if",locations:[{start:{line:1,column:7922},end:{line:1,column:8499}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"35":{loc:{start:{line:1,column:8054},end:{line:1,column:8313}},type:"cond-expr",locations:[{start:{line:1,column:8066},end:{line:1,column:8191}},{start:{line:1,column:8192},end:{line:1,column:8313}}],line:1},"36":{loc:{start:{line:1,column:8404},end:{line:1,column:8435}},type:"cond-expr",locations:[{start:{line:1,column:8416},end:{line:1,column:8425}},{start:{line:1,column:8426},end:{line:1,column:8435}}],line:1},"37":{loc:{start:{line:1,column:8517},end:{line:1,column:8715}},type:"if",locations:[{start:{line:1,column:8517},end:{line:1,column:8715}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"38":{loc:{start:{line:1,column:8520},end:{line:1,column:8586}},type:"binary-expr",locations:[{start:{line:1,column:8520},end:{line:1,column:8523}},{start:{line:1,column:8526},end:{line:1,column:8585}}],line:1},"39":{loc:{start:{line:1,column:8733},end:{line:1,column:8955}},type:"if",locations:[{start:{line:1,column:8733},end:{line:1,column:8955}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"40":{loc:{start:{line:1,column:8736},end:{line:1,column:8838}},type:"binary-expr",locations:[{start:{line:1,column:8736},end:{line:1,column:8739}},{start:{line:1,column:8742},end:{line:1,column:8837}}],line:1},"41":{loc:{start:{line:1,column:8860},end:{line:1,column:8879}},type:"cond-expr",locations:[{start:{line:1,column:8875},end:{line:1,column:8876}},{start:{line:1,column:8877},end:{line:1,column:8879}}],line:1},"42":{loc:{start:{line:1,column:8887},end:{line:1,column:8905}},type:"cond-expr",locations:[{start:{line:1,column:8901},end:{line:1,column:8902}},{start:{line:1,column:8903},end:{line:1,column:8905}}],line:1},"43":{loc:{start:{line:1,column:8913},end:{line:1,column:8953}},type:"cond-expr",locations:[{start:{line:1,column:8950},end:{line:1,column:8951}},{start:{line:1,column:8952},end:{line:1,column:8953}}],line:1},"44":{loc:{start:{line:1,column:8913},end:{line:1,column:8949}},type:"binary-expr",locations:[{start:{line:1,column:8913},end:{line:1,column:8932}},{start:{line:1,column:8934},end:{line:1,column:8949}}],line:1},"45":{loc:{start:{line:1,column:8973},end:{line:1,column:9051}},type:"binary-expr",locations:[{start:{line:1,column:8973},end:{line:1,column:8976}},{start:{line:1,column:8979},end:{line:1,column:9050}}],line:1},"46":{loc:{start:{line:1,column:9459},end:{line:1,column:9514}},type:"cond-expr",locations:[{start:{line:1,column:9461},end:{line:1,column:9511}},{start:{line:1,column:9512},end:{line:1,column:9514}}],line:1},"47":{loc:{start:{line:1,column:9537},end:{line:1,column:9565}},type:"binary-expr",locations:[{start:{line:1,column:9537},end:{line:1,column:9561}},{start:{line:1,column:9563},end:{line:1,column:9565}}],line:1},"48":{loc:{start:{line:1,column:9583},end:{line:1,column:9607}},type:"binary-expr",locations:[{start:{line:1,column:9583},end:{line:1,column:9603}},{start:{line:1,column:9605},end:{line:1,column:9607}}],line:1},"49":{loc:{start:{line:1,column:9627},end:{line:1,column:9652}},type:"binary-expr",locations:[{start:{line:1,column:9627},end:{line:1,column:9649}},{start:{line:1,column:9651},end:{line:1,column:9652}}],line:1},"50":{loc:{start:{line:1,column:9944},end:{line:1,column:9948}},type:"binary-expr",locations:[{start:{line:1,column:9944},end:{line:1,column:9945}},{start:{line:1,column:9947},end:{line:1,column:9948}}],line:1},"51":{loc:{start:{line:1,column:12446},end:{line:1,column:12584}},type:"if",locations:[{start:{line:1,column:12446},end:{line:1,column:12584}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"52":{loc:{start:{line:1,column:12449},end:{line:1,column:12547}},type:"binary-expr",locations:[{start:{line:1,column:12449},end:{line:1,column:12452}},{start:{line:1,column:12455},end:{line:1,column:12546}}],line:1},"53":{loc:{start:{line:1,column:12566},end:{line:1,column:12580}},type:"cond-expr",locations:[{start:{line:1,column:12577},end:{line:1,column:12578}},{start:{line:1,column:12579},end:{line:1,column:12580}}],line:1},"54":{loc:{start:{line:1,column:12723},end:{line:1,column:12727}},type:"binary-expr",locations:[{start:{line:1,column:12723},end:{line:1,column:12724}},{start:{line:1,column:12726},end:{line:1,column:12727}}],line:1},"55":{loc:{start:{line:1,column:13260},end:{line:1,column:13880}},type:"binary-expr",locations:[{start:{line:1,column:13260},end:{line:1,column:13263}},{start:{line:1,column:13266},end:{line:1,column:13879}}],line:1}},s:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"116":0,"117":0,"118":0,"119":0,"120":0,"121":0,"122":0,"123":0,"124":0,"125":0,"126":0},f:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0},b:{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0],"9":[0,0],"10":[0,0],"11":[0,0],"12":[0,0],"13":[0,0],"14":[0,0],"15":[0,0],"16":[0,0],"17":[0,0],"18":[0,0],"19":[0,0],"20":[0,0],"21":[0,0],"22":[0,0],"23":[0,0],"24":[0,0],"25":[0,0],"26":[0,0],"27":[0,0],"28":[0,0],"29":[0,0],"30":[0,0],"31":[0,0],"32":[0,0],"33":[0,0],"34":[0,0],"35":[0,0],"36":[0,0],"37":[0,0],"38":[0,0],"39":[0,0],"40":[0,0],"41":[0,0],"42":[0,0],"43":[0,0],"44":[0,0],"45":[0,0],"46":[0,0],"47":[0,0],"48":[0,0],"49":[0,0],"50":[0,0],"51":[0,0],"52":[0,0],"53":[0,0],"54":[0,0],"55":[0,0]},inputSourceMap:{version:3,sources:["src/app/features/dashboard/components/plant-overview/plant-overview.component.ts","src/app/features/dashboard/components/plant-overview/plant-overview.component.html","src/app/features/dashboard/components/analytics-widget/analytics-widget.component.ts","src/app/features/dashboard/components/analytics-widget/analytics-widget.component.html","src/app/features/dashboard/components/alarms-widget/alarms-widget.component.ts","src/app/features/dashboard/components/alarms-widget/alarms-widget.component.html","src/app/features/dashboard/components/dashboard-page/dashboard-page.component.ts","src/app/features/dashboard/components/dashboard-page/dashboard-page.component.html"],sourcesContent:["import { Component, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { PlantDto } from '../../../apartment-monitor/models/plant-response.model';\n\n@Component({ \n selector: 'plant-overview', \n standalone: true, \n imports: [\n CommonModule,\n ],\n templateUrl: './plant-overview.component.html' })\nexport class PlantOverviewComponent{\n @Input() apartment!: PlantDto | null ;\n} ","@if (apartment) {\n
\n
\n

\n Panoramica impianto: {{ apartment.name }}\n

\n
\n\n
\n @for (room of apartment.rooms; track room.id) {\n
\n
\n

\n {{ room.name }}\n

\n \n {{ room.devices.length }} DISPOSITIVI\n \n
\n\n
\n
    \n @for (device of room.devices; track device.id) {\n
  • \n {{ device.name }}\n
  • \n } @empty {\n
  • Nessun dispositivo configurato
  • \n }\n
\n
\n
\n }\n
\n
\n}","import { Component, inject } from '@angular/core';\nimport { AnalyticsApiService } from '../../../analytics/services/analytics-api.service';\nimport { AnalyticsDto } from '../../../analytics/models/analytics.model';\nimport { ChartInfoDto } from '../../../analytics/models/chart-info.model';\nimport { AlarmsSentResolvedChartComponent } from '../../../analytics/components/alarms-sent-resolved-chart/alarms-sent-resolved-chart.component';\nimport { EnergyConsumptionChartComponent } from '../../../analytics/components/energy-consumption-chart/energy-consumption-chart.component';\nimport { Observable, switchMap, filter, BehaviorSubject, startWith } from 'rxjs';\nimport { CommonModule } from '@angular/common';\nimport { PlantDto } from '../../../apartment-monitor/models/plant-response.model';\nimport { combineLatest, map } from 'rxjs';\nimport { PlantOverviewComponent } from '../plant-overview/plant-overview.component';\nimport { OnInit } from '@angular/core';\n\n@Component({ \n selector: 'app-analytics-widget', \n standalone: true, \n imports: [\n CommonModule,\n AlarmsSentResolvedChartComponent,\n EnergyConsumptionChartComponent,\n PlantOverviewComponent\n ],\n templateUrl: './analytics-widget.component.html' })\n\n\n\nexport class AnalyticsWidgetComponent implements OnInit {\n private readonly refreshTrigger$ = new BehaviorSubject(false);\n\n public selectedApartment$: Observable | null = null;\n\n private readonly analyticsApiService = inject(AnalyticsApiService);\n private readonly loadTrigger$ = new BehaviorSubject<{ id: string; refresh: boolean } | null>(null);\n\n public selectedApartmentId$ = new BehaviorSubject(null);\n \n public apartments$: Observable | null = null;\n public analytics: Observable | null = null;\n\n public ngOnInit(): void {\n this.apartments$ = this.analyticsApiService.getAllApartments();\n this.apartments$.subscribe(apartments => {\n if (apartments.length > 0) {\n this.selectedApartmentId$.next(apartments[0].id);\n this.loadTrigger$.next({ id: apartments[0].id, refresh: false });\n }\n });\n\n \n this.selectedApartment$ = combineLatest([\n this.apartments$,\n this.selectedApartmentId$\n ]).pipe(\n map(([apartments, id]) => apartments.find(a => a.id === id))\n );\n\n this.analytics = this.loadTrigger$.pipe(\n filter(trigger => trigger !== null),\n switchMap(trigger =>\n this.analyticsApiService\n .getAnalytics(trigger.id, trigger.refresh)\n .pipe(startWith(null))\n )\n );\n }\n\n public getChartByMetric(data: AnalyticsDto | null, metric: string): ChartInfoDto | undefined {\n return data?.analyticsInfo?.find(chart => chart.metric === metric);\n }\n\n public onApartmentChange(event: Event): void {\n const id = (event.target as HTMLSelectElement).value;\n this.selectedApartmentId$.next(id);\n this.loadTrigger$.next({ id, refresh: false });\n }\n\n public onRefresh(): void {\n const currentId = this.selectedApartmentId$.value;\n if (!currentId) return;\n this.loadTrigger$.next({ id: currentId, refresh: true });\n }\n\n}\n\n","\n
\n \n
\n \n \n \n
\n \n \n
\n \n \n \n
\n
\n
\n\n
\n\n \n \n\n \n \n\n
\n \n \n
\n\n
\n
\n\n\n\n
\n

Caricamento dati in corso...

\n
\n
","import { ChangeDetectionStrategy, Component, DestroyRef, computed, OnInit, inject } from '@angular/core';\nimport { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';\nimport { AlarmListVm } from '../../../alarm-management/models/alarm-list-vm.model';\nimport { AlarmManagementService } from '../../../alarm-management/services/alarm-management.service';\nimport { AlarmManagementTablePresenterService } from '../../../alarm-management/services/alarm-management-table-presenter.service';\nimport { AlarmManagementRefreshService } from '../../../../core/alarm/services/alarm-management-refresh.service';\nimport { AlarmTableShellComponent } from '../../../../shared/components/alarm-table/alarm-table-shell.component';\nimport { AlarmPriorityIndicatorComponent } from '../../../../shared/components/alarm-table/alarm-priority-indicator.component';\nimport { AlarmActionButtonComponent } from '../../../../shared/components/alarm-table/alarm-action-button.component';\nimport { ElapsedTimePipe } from '../../../../shared/pipes/elapsed-time.pipe';\nimport { AlarmTableColumn } from '../../../../shared/models/alarm-table.model';\n\n@Component({\n selector: 'app-alarms-widget',\n imports: [AlarmTableShellComponent, AlarmPriorityIndicatorComponent, AlarmActionButtonComponent, ElapsedTimePipe],\n templateUrl: './alarms-widget.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AlarmWidgetComponent implements OnInit {\n private readonly alarmManagementService = inject(AlarmManagementService);\n private readonly tablePresenter = inject(AlarmManagementTablePresenterService);\n private readonly alarmManagementRefreshService = inject(AlarmManagementRefreshService);\n private readonly destroyRef = inject(DestroyRef);\n\n public readonly columns: readonly AlarmTableColumn[] = [\n { id: 'priority', label: 'Priorit\xE0' },\n { id: 'name', label: 'Nome' },\n { id: 'location', label: 'Luogo' },\n { id: 'status', label: 'Stato' },\n { id: 'openedAt', label: 'Scattato' },\n { id: 'actions', label: 'Azioni' },\n ];\n\n public readonly vm = toSignal(this.alarmManagementService.vm$, {\n initialValue: null,\n });\n\n public readonly rows = computed(() => {\n const vmState = this.vm();\n if (!vmState) {\n return [];\n }\n\n return this.tablePresenter.toRows(vmState.alarms, vmState.resolvingId);\n });\n\n public readonly canGoPrevious = computed(() => this.vm()?.canGoPrevious ?? false);\n public readonly canGoNext = computed(() => this.vm()?.canGoNext ?? false);\n public readonly currentPage = computed(() => this.vm()?.currentPage ?? 1);\n\n public ngOnInit(): void {\n this.alarmManagementService.initialize();\n\n this.alarmManagementRefreshService\n .getRefreshRequested$()\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n this.alarmManagementService.initialize();\n });\n }\n\n public onResolve(activeAlarmId: string): void {\n this.alarmManagementService.resolveAlarm(activeAlarmId);\n }\n}\n","
\n

\n Allarmi importanti

\n\n @if (vm(); as vmState) {\n @if (vmState.resolveError) {\n
\n \n \n \n {{ vmState.resolveError }}\n
\n }\n\n @if (vmState.isResolving) {\n
\n
\n Risoluzione allarme in corso...\n
\n }\n\n @if (rows().length === 0 && !vmState.resolveError) {\n
\n
\n \n \n \n
\n

Nessun allarme attivo al momento.

\n

Quando verranno rilevati nuovi eventi, compariranno qui.

\n
\n } @else {\n \n @for (row of rows().slice(0, 4); track row.id) {\n \n \n \n \n {{ row.name }}\n {{ row.location }}\n \n \n {{ row.status }}\n \n \n {{ row.openedAt | elapsedTime }}\n \n \n \n \n }\n \n }\n } @else {\n
\n
\n Caricamento allarmi in corso...\n
\n }\n
","import { Component} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { AnalyticsWidgetComponent } from '../analytics-widget/analytics-widget.component';\nimport { AlarmWidgetComponent } from '../alarms-widget/alarms-widget.component';\n\n@Component({ \n selector: 'app-dashboard', \n standalone: true, \n imports: [\n CommonModule,\n AnalyticsWidgetComponent,\n AlarmWidgetComponent\n ],\n templateUrl: './dashboard-page.component.html', \n styleUrl: './dashboard-page.component.css'})\nexport class DashboardComponent{}\n\n\n\n","
\n\t
\n\t\t
\n\t\t\t

Dashboard

\n\t\t\t

Controlla in un colpo d'occhio stato appartamenti, allarmi e utenti del turno.

\n\t\t
\n\n\t\t

\n\t\t\t\n\t\t\tSupervisione attiva\n\t\t

\n\t
\n\n\t
\n\t\t
\n\t\t\t

Gestione allarmi

\n\t\t\t

Verifica gli eventi aperti e le regole di notifica configurate.

\n\t \t\t\n\t\t
\n\n\t\t
\n\t\t\t

Monitor dispositivi

\n\t\t\t

Accedi allo stato live delle stanze e alla telemetria principale.

\n\t\t\t\n\t\t
\n\t
\n
"],mappings:"2/BCuBgBA,EAAA,EAAA,KAAA,EAAA,EAAmD,EAAA,OAAA,EAAA,EACfC,EAAA,CAAA,EAAiBC,EAAA,EAAO,0BAAxBC,EAAA,CAAA,EAAAC,EAAAC,EAAAC,IAAA,0BAGpCN,EAAA,EAAA,KAAA,EAAA,EAA0CC,EAAA,EAAA,gCAAA,EAA8BC,EAAA,6BAjBhFF,EAAA,EAAA,MAAA,CAAA,EAAqH,EAAA,MAAA,CAAA,EACpB,EAAA,KAAA,CAAA,EAE3FC,EAAA,CAAA,EACFC,EAAA,EACAF,EAAA,EAAA,OAAA,CAAA,EACEC,EAAA,CAAA,EACFC,EAAA,EAAO,EAGTF,EAAA,EAAA,MAAA,CAAA,EAAiB,EAAA,KAAA,EAAA,EAEbO,EAAA,EAAAC,GAAA,EAAA,EAAA,KAAA,GAAAC,GAAA,GAAAC,GAAA,EAAA,EAAA,KAAA,EAAA,EAOFR,EAAA,EAAK,EACD,0BAjBFC,EAAA,CAAA,EAAAQ,EAAA,IAAAC,EAAAN,KAAA,GAAA,EAGAH,EAAA,CAAA,EAAAQ,EAAA,IAAAC,EAAAC,QAAAC,OAAA,eAAA,EAMAX,EAAA,CAAA,EAAAY,EAAAH,EAAAC,OAAA,6BArBZb,EAAA,EAAA,MAAA,CAAA,EAAuF,EAAA,SAAA,CAAA,EACjC,EAAA,KAAA,CAAA,EAEhDC,EAAA,EAAA,wBAAA,EAAqBD,EAAA,EAAA,OAAA,CAAA,EAA6BC,EAAA,CAAA,EAAoBC,EAAA,EAAO,EAC1E,EAGPF,EAAA,EAAA,MAAA,CAAA,EACEO,EAAA,EAAAS,GAAA,GAAA,EAAA,MAAA,EAAAP,EAAA,EAwBFP,EAAA,EAAM,kBA7BgDC,EAAA,CAAA,EAAAC,EAAAa,EAAAC,UAAAZ,IAAA,EAKpDH,EAAA,CAAA,EAAAY,EAAAE,EAAAC,UAAAC,KAAA,GDEN,IAAaC,IAAsB,IAAA,CAA7B,MAAOA,CAAsB,CACtBF,qDADAE,EAAsB,2BAAtBA,EAAsBC,UAAA,CAAA,CAAA,gBAAA,CAAA,EAAAC,OAAA,CAAAJ,UAAA,WAAA,EAAAK,MAAA,EAAAC,KAAA,EAAAC,OAAA,CAAA,CAAA,EAAA,MAAA,SAAA,mBAAA,WAAA,YAAA,cAAA,SAAA,QAAA,EAAA,CAAA,EAAA,OAAA,WAAA,mBAAA,MAAA,EAAA,CAAA,EAAA,YAAA,iBAAA,SAAA,EAAA,CAAA,EAAA,gBAAA,EAAA,CAAA,EAAA,OAAA,cAAA,iBAAA,OAAA,EAAA,CAAA,EAAA,WAAA,aAAA,YAAA,SAAA,mBAAA,kBAAA,kBAAA,mBAAA,EAAA,CAAA,EAAA,cAAA,OAAA,OAAA,WAAA,mBAAA,OAAA,kBAAA,cAAA,EAAA,CAAA,EAAA,YAAA,iBAAA,YAAA,gBAAA,SAAA,EAAA,CAAA,EAAA,2BAAA,SAAA,mBAAA,iBAAA,cAAA,OAAA,SAAA,eAAA,eAAA,EAAA,CAAA,EAAA,KAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,OAAA,eAAA,iBAAA,OAAA,EAAA,CAAA,EAAA,iBAAA,UAAA,QAAA,EAAA,CAAA,EAAA,UAAA,aAAA,CAAA,EAAAC,SAAA,SAAAC,EAAAC,EAAA,CAAAD,EAAA,GCXnCE,EAAA,EAAAC,GAAA,EAAA,EAAA,MAAA,CAAA,OAAAC,EAAAH,EAAAV,UAAA,EAAA,EAAA,iBDQQc,CAAY,EAAAC,cAAA,CAAA,CAAA,SAGPb,CAAsB,GAAA,4BGMvBc,EAAA,EAAA,SAAA,EAAA,EACIC,EAAA,CAAA,EACJC,EAAA,0BAFgDC,EAAA,QAAAC,EAAAC,EAAA,EAC5CC,EAAA,EAAAC,EAAA,IAAAH,EAAAI,KAAA,MAAAJ,EAAAC,GAAA,GAAA,sCARZL,EAAA,EAAA,MAAA,CAAA,EAA+E,EAAA,SAAA,CAAA,EAIvES,EAAA,SAAA,SAAAC,EAAA,CAAAC,EAAAC,CAAA,EAAA,IAAAC,EAAAC,EAAA,EAAA,OAAAC,EAAUF,EAAAG,kBAAAN,CAAA,CAAyB,CAAA,CAAA,EAGnCO,EAAA,EAAAC,GAAA,EAAA,EAAA,SAAA,CAAA,eAIJhB,EAAA,EAEAF,EAAA,EAAA,MAAA,CAAA,MACIA,EAAA,EAAA,MAAA,EAAA,EACImB,EAAA,EAAA,OAAA,EAAA,EACJjB,EAAA,EAAM,EACJ,6BAfFI,EAAA,EAAAH,EAAA,QAAAiB,CAAA,EAKwBd,EAAA,EAAAH,EAAA,UAAAkB,EAAA,EAAA,EAAAR,EAAAS,WAAA,CAAA,4BAiBhCH,EAAA,EAAA,+BAAA,EAAA,oBAGIhB,EAAA,YAAAoB,CAAA,EAAkB,kBAAA,EAAA,4BAItBJ,EAAA,EAAA,iCAAA,EAAA,oBAGIhB,EAAA,YAAAqB,CAAA,EAAkB,kBAAA,EAAA,6BAItBxB,EAAA,EAAA,MAAA,EAAA,EAEImB,EAAA,EAAA,iBAAA,EAAA,EAGJjB,EAAA,qBAFII,EAAA,EAAAH,EAAA,YAAAsB,CAAA,6BApBRzB,EAAA,EAAA,MAAA,EAAA,EAGIiB,EAAA,EAAAS,GAAA,EAAA,EAAA,+BAAA,EAAA,EAI8B,EAAAC,GAAA,EAAA,EAAA,iCAAA,EAAA,EAOA,EAAAC,GAAA,EAAA,EAAA,MAAA,EAAA,eAUlC1B,EAAA,2BApBSI,EAAA,EAAAH,EAAA,OAAAU,EAAAgB,iBAAAC,EAAA,mBAAA,CAAA,EAOAxB,EAAA,EAAAH,EAAA,OAAAU,EAAAgB,iBAAAC,EAAA,qBAAA,CAAA,EAMCxB,EAAA,EAAAH,EAAA,OAAAkB,EAAA,EAAA,EAAAR,EAAAkB,kBAAA,CAAA,0BAYN/B,EAAA,EAAA,MAAA,EAAA,EAAmE,EAAA,IAAA,EAAA,EACHC,EAAA,EAAA,8BAAA,EAA4BC,EAAA,EAAI,GDnCpG,IAAa8B,IAAwB,IAAA,CAA/B,MAAOA,CAAwB,CAChBC,gBAAkB,IAAIC,EAAyB,EAAK,EAE9DH,mBAA8D,KAEpDI,oBAAsBC,EAAOC,CAAmB,EAChDC,aAAe,IAAIJ,EAAyD,IAAI,EAE1FK,qBAAuB,IAAIL,EAA+B,IAAI,EAE9DZ,YAA6C,KAC7CkB,UAAoD,KAEpDC,UAAQ,CACX,KAAKnB,YAAc,KAAKa,oBAAoBO,iBAAgB,EAC5D,KAAKpB,YAAYqB,UAAUC,GAAa,CAChCA,EAAWC,OAAS,IACpB,KAAKN,qBAAqBO,KAAKF,EAAW,CAAC,EAAEvC,EAAE,EAC/C,KAAKiC,aAAaQ,KAAK,CAAEzC,GAAIuC,EAAW,CAAC,EAAEvC,GAAI0C,QAAS,EAAK,CAAE,EAEvE,CAAC,EAGD,KAAKhB,mBAAqBiB,EAAc,CACpC,KAAK1B,YACL,KAAKiB,oBAAoB,CAC5B,EAAEU,KACCC,EAAI,CAAC,CAACN,EAAYvC,CAAE,IAAMuC,EAAWO,KAAKC,GAAKA,EAAE/C,KAAOA,CAAE,CAAC,CAAC,EAGhE,KAAKmC,UAAY,KAAKF,aAAaW,KAC/BI,EAAOC,GAAWA,IAAY,IAAI,EAClCC,EAAUD,GACN,KAAKnB,oBACAqB,aAAaF,EAAQjD,GAAIiD,EAAQP,OAAO,EACxCE,KAAKQ,EAAU,IAAI,CAAC,CAAC,CAC7B,CAET,CAEO5B,iBAAiB6B,EAA2BC,EAAc,CAC7D,OAAOD,GAAME,eAAeT,KAAKU,GAASA,EAAMF,SAAWA,CAAM,CACrE,CAEO3C,kBAAkB8C,EAAY,CACjC,IAAMzD,EAAMyD,EAAMC,OAA6BC,MAC/C,KAAKzB,qBAAqBO,KAAKzC,CAAE,EACjC,KAAKiC,aAAaQ,KAAK,CAAEzC,GAAAA,EAAI0C,QAAS,EAAK,CAAE,CACjD,CAEOkB,WAAS,CACZ,IAAMC,EAAY,KAAK3B,qBAAqByB,MACvCE,GACL,KAAK5B,aAAaQ,KAAK,CAAEzC,GAAI6D,EAAWnB,QAAS,EAAI,CAAE,CAC3D,4CAtDSf,EAAwB,2BAAxBA,EAAwBmC,UAAA,CAAA,CAAA,sBAAA,CAAA,EAAAC,MAAA,GAAAC,KAAA,EAAAC,OAAA,CAAA,CAAA,UAAA,EAAA,EAAA,CAAA,EAAA,MAAA,iBAAA,aAAA,EAAA,CAAA,EAAA,WAAA,KAAA,EAAA,CAAA,MAAA,mBAAA,EAAA,QAAA,OAAA,UAAA,YAAA,gBAAA,EAAA,CAAA,QAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,0DAAA,EAAA,OAAA,UAAA,EAAA,CAAA,EAAA,WAAA,OAAA,EAAA,CAAA,KAAA,mBAAA,EAAA,QAAA,SAAA,iBAAA,kBAAA,aAAA,SAAA,mBAAA,cAAA,OAAA,OAAA,YAAA,UAAA,cAAA,iBAAA,YAAA,mBAAA,iBAAA,yBAAA,qBAAA,eAAA,0BAAA,+BAAA,EAAA,SAAA,OAAA,EAAA,CAAA,QAAA,0BAAA,EAAA,QAAA,EAAA,QAAA,SAAA,EAAA,CAAA,EAAA,sBAAA,WAAA,YAAA,UAAA,OAAA,eAAA,OAAA,gBAAA,EAAA,CAAA,OAAA,OAAA,UAAA,YAAA,SAAA,eAAA,EAAA,MAAA,MAAA,YAAA,EAAA,CAAA,iBAAA,QAAA,kBAAA,QAAA,IAAA,6BAAA,EAAA,CAAA,EAAA,WAAA,iBAAA,EAAA,OAAA,EAAA,CAAA,EAAA,OAAA,cAAA,QAAA,SAAA,iBAAA,SAAA,KAAA,EAAA,CAAA,QAAA,4BAAA,EAAA,YAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,0CAAA,EAAA,MAAA,EAAA,CAAA,EAAA,aAAA,iBAAA,EAAA,YAAA,iBAAA,EAAA,CAAA,EAAA,aAAA,iBAAA,SAAA,QAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,OAAA,eAAA,iBAAA,WAAA,aAAA,EAAA,CAAA,EAAA,iBAAA,gBAAA,cAAA,SAAA,CAAA,EAAAC,SAAA,SAAAC,EAAAC,EAAA,IAAAD,EAAA,ICzBrCxE,EAAA,EAAA,MAAA,CAAA,EAA4C,EAAA,MAAA,CAAA,EAElB,EAAA,QAAA,CAAA,EAGlBC,EAAA,EAAA,2BAAA,EACJC,EAAA,EAGAe,EAAA,EAAAyD,GAAA,EAAA,EAAA,MAAA,CAAA,eAmBJxE,EAAA,EAEAe,EAAA,EAAA0D,GAAA,EAAA,EAAA,MAAA,CAAA,eAyBAzE,EAAA,EAGAe,EAAA,EAAA2D,GAAA,EAAA,EAAA,cAAA,KAAA,EAAAC,CAAA,mBAjDiCvE,EAAA,CAAA,EAAAH,EAAA,OAAAkB,EAAA,EAAA,EAAAoD,EAAAlC,oBAAA,CAAA,EAqB3BjC,EAAA,CAAA,EAAAH,EAAA,OAAAkB,EAAA,EAAA,EAAAoD,EAAAjC,SAAA,CAAA,EAAwB,WAAAsC,CAAA,kBDdtBC,EAAYC,EAAAC,EACZC,GACAC,GACAC,GAAsBC,CAAA,EAAAC,cAAA,CAAA,CAAA,SAMjBtD,CAAwB,GAAA,+CGpBjCuD,EAAA,EAAA,MAAA,CAAA,MAEIA,EAAA,EAAA,MAAA,CAAA,EACIC,EAAA,EAAA,OAAA,CAAA,EAGJC,EAAA,MACAF,EAAA,EAAA,MAAA,EAAMG,EAAA,CAAA,EAA0BD,EAAA,EAAO,kBAAjCE,EAAA,CAAA,EAAAC,EAAAC,EAAAC,YAAA,0BAKVP,EAAA,EAAA,MAAA,CAAA,EAEIC,EAAA,EAAA,MAAA,CAAA,EACAD,EAAA,EAAA,MAAA,EAAMG,EAAA,EAAA,iCAAA,EAA+BD,EAAA,EAAO,0BAKhDF,EAAA,EAAA,MAAA,CAAA,EAAgL,EAAA,MAAA,EAAA,MAExKA,EAAA,EAAA,MAAA,EAAA,EAEIC,EAAA,EAAA,OAAA,EAAA,EAEJC,EAAA,EAAM,MAEVF,EAAA,EAAA,IAAA,EAAA,EAAqDG,EAAA,EAAA,mCAAA,EAAiCD,EAAA,EACtFF,EAAA,EAAA,IAAA,EAAA,EAAuCG,EAAA,EAAA,0DAAA,EAAwDD,EAAA,EAAI,sCAKnGF,EAAA,EAAA,KAAA,EAAA,EAAoG,EAAA,KAAA,EAAA,EAE5FC,EAAA,EAAA,+BAAA,EAAA,EACJC,EAAA,EACAF,EAAA,EAAA,KAAA,EAAA,EAA0EG,EAAA,CAAA,EAAcD,EAAA,EACxFF,EAAA,EAAA,KAAA,EAAA,EAA4DG,EAAA,CAAA,EAAkBD,EAAA,EAC9EF,EAAA,EAAA,KAAA,EAAA,EAAqC,EAAA,MAAA,EAK7BG,EAAA,CAAA,EACJD,EAAA,EAAO,EAEXF,EAAA,GAAA,KAAA,EAAA,EAA4DG,EAAA,EAAA,sBAAgCD,EAAA,EAC5FF,EAAA,GAAA,KAAA,EAAA,EAAqC,GAAA,0BAAA,EAAA,EAEuCQ,EAAA,UAAA,UAAA,CAAA,IAAAC,EAAAC,EAAAC,CAAA,EAAAC,UAAAC,EAAAC,EAAA,CAAA,EAAA,OAAAC,EAAWF,EAAAG,UAAAP,EAAAQ,EAAA,CAAiB,CAAA,CAAA,EADpGf,EAAA,EACwG,EACvG,+DAhB6BE,EAAA,CAAA,EAAAc,EAAA,WAAAT,EAAAU,QAAA,EAEwCf,EAAA,CAAA,EAAAC,EAAAI,EAAAW,IAAA,EACdhB,EAAA,CAAA,EAAAC,EAAAI,EAAAY,QAAA,EAGpDjB,EAAA,CAAA,EAAAkB,EAAAb,EAAAc,UAAA,8HAAA,yHAAA,EAGAnB,EAAA,EAAAoB,EAAA,IAAAf,EAAAgB,OAAA,GAAA,EAGoDrB,EAAA,CAAA,EAAAC,EAAAqB,EAAA,GAAA,GAAAjB,EAAAkB,QAAA,CAAA,EAE/BvB,EAAA,CAAA,EAAAc,EAAA,QAAAT,EAAAmB,WAAA,EAAyB,OAAAnB,EAAAc,UAAA,UAAA,SAAA,EAA+C,WAAAd,EAAAoB,gBAAA,EAC5D,YAAApB,EAAAqB,eAAA,6BAnBjD9B,EAAA,EAAA,wBAAA,CAAA,EACI+B,EAAA,EAAAC,GAAA,GAAA,GAAA,KAAA,GAAAC,EAAA,EAsBJ/B,EAAA,mBAvBuBgB,EAAA,QAAA,gBAAA,EAA0B,UAAA,wBAAA,EAAqC,UAAAL,EAAAqB,OAAA,EAClF9B,EAAA,EAAA+B,EAAAtB,EAAAuB,KAAA,EAAMC,MAAO,EAAG,CAAC,CAAC,6BAlCtBC,EAAA,EAAAC,GAAA,EAAA,EAAA,MAAA,CAAA,EAYAD,EAAA,EAAAE,GAAA,EAAA,EAAA,MAAA,CAAA,EAQAF,EAAA,EAAAG,GAAA,EAAA,EAAA,MAAA,CAAA,EAAoD,EAAAC,GAAA,EAAA,EAAA,wBAAA,CAAA,sBApBpDC,EAAArC,EAAAC,aAAA,EAAA,EAAA,EAYAH,EAAA,EAAAuC,EAAArC,EAAAsC,YAAA,EAAA,EAAA,EAQAxC,EAAA,EAAAuC,EAAA9B,EAAAuB,KAAA,EAAAS,SAAA,GAAA,CAAAvC,EAAAC,aAAA,EAAA,CAAA,0BAuCAP,EAAA,EAAA,MAAA,CAAA,EAEIC,EAAA,EAAA,MAAA,EAAA,EACAE,EAAA,EAAA,mCAAA,EACJD,EAAA,GDlDJ,IAAa4C,IAAoB,IAAA,CAA3B,MAAOA,CAAoB,CACdC,uBAAyBC,EAAOC,EAAsB,EACtDC,eAAiBF,EAAOG,EAAoC,EAC5DC,8BAAgCJ,EAAOK,CAA6B,EACpEC,WAAaN,EAAOO,CAAU,EAE/BrB,QAAuC,CACrD,CAAEjB,GAAI,WAAYuC,MAAO,aAAU,EACnC,CAAEvC,GAAI,OAAQuC,MAAO,MAAM,EAC3B,CAAEvC,GAAI,WAAYuC,MAAO,OAAO,EAChC,CAAEvC,GAAI,SAAUuC,MAAO,OAAO,EAC9B,CAAEvC,GAAI,WAAYuC,MAAO,UAAU,EACnC,CAAEvC,GAAI,UAAWuC,MAAO,QAAQ,CAAE,EAGpBC,GAAKC,EAA6B,KAAKX,uBAAuBY,IAAK,CACjFC,aAAc,KACf,EAEexB,KAAOyB,EAAS,IAAK,CACnC,IAAMC,EAAU,KAAKL,GAAE,EACvB,OAAKK,EAIE,KAAKZ,eAAea,OAAOD,EAAQE,OAAQF,EAAQG,WAAW,EAH5D,CAAA,CAIX,CAAC,EAEeC,cAAgBL,EAAS,IAAM,KAAKJ,GAAE,GAAIS,eAAiB,EAAK,EAChEC,UAAYN,EAAS,IAAM,KAAKJ,GAAE,GAAIU,WAAa,EAAK,EACxDC,YAAcP,EAAS,IAAM,KAAKJ,GAAE,GAAIW,aAAe,CAAC,EAEjEC,UAAQ,CACb,KAAKtB,uBAAuBuB,WAAU,EAEtC,KAAKlB,8BACFmB,qBAAoB,EACpBC,KAAKC,EAAmB,KAAKnB,UAAU,CAAC,EACxCoB,UAAU,IAAK,CACd,KAAK3B,uBAAuBuB,WAAU,CACxC,CAAC,CACL,CAEOtD,UAAU2D,EAAqB,CACpC,KAAK5B,uBAAuB6B,aAAaD,CAAa,CACxD,4CA7CW7B,EAAoB,2BAApBA,EAAoB+B,UAAA,CAAA,CAAA,mBAAA,CAAA,EAAAC,MAAA,EAAAC,KAAA,EAAAC,OAAA,CAAA,CAAA,aAAA,mBAAA,EAAA,iBAAA,cAAA,KAAA,EAAA,CAAA,EAAA,QAAA,OAAA,UAAA,YAAA,gBAAA,EAAA,CAAA,YAAA,SAAA,EAAA,aAAA,SAAA,mBAAA,WAAA,OAAA,OAAA,UAAA,iBAAA,WAAA,EAAA,CAAA,OAAA,QAAA,YAAA,YAAA,EAAA,0BAAA,OAAA,eAAA,QAAA,aAAA,SAAA,iBAAA,YAAA,OAAA,OAAA,UAAA,eAAA,WAAA,EAAA,CAAA,YAAA,SAAA,EAAA,2BAAA,OAAA,eAAA,QAAA,aAAA,SAAA,iBAAA,YAAA,OAAA,OAAA,UAAA,cAAA,eAAA,WAAA,EAAA,CAAA,EAAA,0BAAA,OAAA,OAAA,WAAA,eAAA,iBAAA,cAAA,SAAA,mBAAA,cAAA,OAAA,cAAA,YAAA,kBAAA,EAAA,CAAA,EAAA,QAAA,UAAA,SAAA,EAAA,CAAA,OAAA,eAAA,UAAA,YAAA,cAAA,OAAA,EAAA,MAAA,MAAA,gBAAA,cAAA,EAAA,CAAA,YAAA,UAAA,IAAA,oHAAA,YAAA,SAAA,EAAA,CAAA,EAAA,MAAA,MAAA,eAAA,eAAA,WAAA,iBAAA,kBAAA,EAAA,CAAA,EAAA,OAAA,OAAA,OAAA,eAAA,iBAAA,cAAA,cAAA,EAAA,CAAA,OAAA,OAAA,UAAA,YAAA,eAAA,MAAA,SAAA,eAAA,cAAA,OAAA,EAAA,MAAA,MAAA,gBAAA,EAAA,CAAA,iBAAA,QAAA,kBAAA,QAAA,IAAA,4WAAA,EAAA,CAAA,EAAA,OAAA,UAAA,gBAAA,gBAAA,EAAA,CAAA,EAAA,OAAA,UAAA,gBAAA,EAAA,CAAA,EAAA,QAAA,oBAAA,sBAAA,EAAA,CAAA,EAAA,OAAA,SAAA,cAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,OAAA,SAAA,eAAA,UAAA,gBAAA,gBAAA,EAAA,CAAA,EAAA,OAAA,SAAA,eAAA,UAAA,gBAAA,EAAA,CAAA,EAAA,UAAA,QAAA,OAAA,WAAA,WAAA,EAAA,CAAA,EAAA,MAAA,MAAA,eAAA,eAAA,WAAA,mBAAA,oBAAA,CAAA,EAAAC,SAAA,SAAAC,EAAAC,EAAA,IAAAD,EAAA,IClBjClF,EAAA,EAAA,UAAA,CAAA,EAA+E,EAAA,KAAA,CAAA,EAEvEG,EAAA,EAAA,qBAAA,EAAkBD,EAAA,EAEtBoC,EAAA,EAAA8C,GAAA,EAAA,CAAA,EAAwB,EAAAC,GAAA,EAAA,EAAA,MAAA,CAAA,EAkE5BnF,EAAA,cAlEIE,EAAA,CAAA,EAAAuC,GAAA2C,EAAAH,EAAA1B,GAAA,GAAA,EAAA,EAAA6B,CAAA,kBDUQC,GAA0BC,GAAiCC,GAA4BC,EAAe,EAAAC,cAAA,EAAAC,gBAAA,CAAA,CAAA,SAIrG9C,CAAoB,GAAA,EEHjC,IAAa+C,IAAkB,IAAA,CAAzB,MAAOA,CAAkB,4CAAlBA,EAAkB,2BAAlBA,EAAkBC,UAAA,CAAA,CAAA,eAAA,CAAA,EAAAC,MAAA,GAAAC,KAAA,EAAAC,OAAA,CAAA,CAAA,aAAA,uBAAA,EAAA,YAAA,gBAAA,cAAA,EAAA,CAAA,EAAA,iBAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,eAAA,EAAA,CAAA,EAAA,yBAAA,EAAA,CAAA,cAAA,OAAA,EAAA,6BAAA,EAAA,CAAA,aAAA,0BAAA,EAAA,wBAAA,OAAA,WAAA,OAAA,EAAA,CAAA,EAAA,aAAA,sBAAA,EAAA,CAAA,EAAA,4BAAA,EAAA,CAAA,EAAA,2BAAA,CAAA,EAAAC,SAAA,SAAAC,EAAAC,EAAA,CAAAD,EAAA,ICf/BE,EAAA,EAAA,UAAA,CAAA,EAAwF,EAAA,SAAA,CAAA,EACvD,EAAA,KAAA,EAC1B,EAAA,KAAA,CAAA,EACmBC,EAAA,EAAA,WAAA,EAASC,EAAA,EAChCF,EAAA,EAAA,IAAA,CAAA,EAAyBC,EAAA,EAAA,gFAAA,EAA8EC,EAAA,EAAI,EAG5GF,EAAA,EAAA,IAAA,CAAA,EACCG,EAAA,EAAA,OAAA,CAAA,EACAF,EAAA,EAAA,uBAAA,EACDC,EAAA,EAAI,EAGLF,EAAA,GAAA,UAAA,CAAA,EAAgG,GAAA,UAAA,CAAA,EAC9C,GAAA,KAAA,CAAA,EACTC,EAAA,GAAA,kBAAA,EAAgBC,EAAA,EACvDF,EAAA,GAAA,IAAA,CAAA,EAAqCC,EAAA,GAAA,iEAAA,EAA+DC,EAAA,EAClGC,EAAA,GAAA,mBAAA,EACHD,EAAA,EAEAF,EAAA,GAAA,UAAA,CAAA,EAAiD,GAAA,KAAA,CAAA,EACTC,EAAA,GAAA,qBAAA,EAAmBC,EAAA,EAC1DF,EAAA,GAAA,IAAA,CAAA,EAAqCC,EAAA,GAAA,mEAAA,EAAiEC,EAAA,EACtGC,EAAA,GAAA,sBAAA,EACDD,EAAA,EAAU,EACD,kBDhBHE,EACAC,GACAC,EAAoB,EAAAC,OAAA,CAAA;kEAAA,CAAA,CAAA,SAIff,CAAkB,GAAA",names:["\u0275\u0275domElementStart","\u0275\u0275text","\u0275\u0275domElementEnd","\u0275\u0275advance","\u0275\u0275textInterpolate","device_r1","name","\u0275\u0275repeaterCreate","PlantOverviewComponent_Conditional_0_For_8_For_9_Template","_forTrack0","PlantOverviewComponent_Conditional_0_For_8_ForEmpty_10_Template","\u0275\u0275textInterpolate1","room_r2","devices","length","\u0275\u0275repeater","PlantOverviewComponent_Conditional_0_For_8_Template","ctx_r2","apartment","rooms","PlantOverviewComponent","selectors","inputs","decls","vars","consts","template","rf","ctx","\u0275\u0275conditionalCreate","PlantOverviewComponent_Conditional_0_Template","\u0275\u0275conditional","CommonModule","encapsulation","\u0275\u0275elementStart","\u0275\u0275text","\u0275\u0275elementEnd","\u0275\u0275property","apt_r3","id","\u0275\u0275advance","\u0275\u0275textInterpolate2","name","\u0275\u0275listener","$event","\u0275\u0275restoreView","_r1","ctx_r1","\u0275\u0275nextContext","\u0275\u0275resetView","onApartmentChange","\u0275\u0275template","AnalyticsWidgetComponent_div_4_option_2_Template","\u0275\u0275element","selectedId_r4","\u0275\u0275pipeBind1","apartments$","info_r5","info_r6","currentApt_r7","AnalyticsWidgetComponent_div_6_app_energy_consumption_chart_1_Template","AnalyticsWidgetComponent_div_6_app_alarms_sent_resolved_chart_2_Template","AnalyticsWidgetComponent_div_6_div_3_Template","getChartByMetric","data_r8","selectedApartment$","AnalyticsWidgetComponent","refreshTrigger$","BehaviorSubject","analyticsApiService","inject","AnalyticsApiService","loadTrigger$","selectedApartmentId$","analytics","ngOnInit","getAllApartments","subscribe","apartments","length","next","refresh","combineLatest","pipe","map","find","a","filter","trigger","switchMap","getAnalytics","startWith","data","metric","analyticsInfo","chart","event","target","value","onRefresh","currentId","selectors","decls","vars","consts","template","rf","ctx","AnalyticsWidgetComponent_div_4_Template","AnalyticsWidgetComponent_div_6_Template","AnalyticsWidgetComponent_ng_template_8_Template","\u0275\u0275templateRefExtractor","loading_r9","CommonModule","NgForOf","NgIf","AlarmsSentResolvedChartComponent","EnergyConsumptionChartComponent","PlantOverviewComponent","AsyncPipe","encapsulation","\u0275\u0275elementStart","\u0275\u0275element","\u0275\u0275elementEnd","\u0275\u0275text","\u0275\u0275advance","\u0275\u0275textInterpolate","vmState_r1","resolveError","\u0275\u0275listener","row_r3","\u0275\u0275restoreView","_r2","$implicit","ctx_r3","\u0275\u0275nextContext","\u0275\u0275resetView","onResolve","id","\u0275\u0275property","priority","name","location","\u0275\u0275classMap","isManaged","\u0275\u0275textInterpolate1","status","\u0275\u0275pipeBind1","openedAt","actionLabel","isActionDisabled","actionAriaLabel","\u0275\u0275repeaterCreate","AlarmWidgetComponent_Conditional_3_Conditional_3_For_2_Template","_forTrack0","columns","\u0275\u0275repeater","rows","slice","\u0275\u0275conditionalCreate","AlarmWidgetComponent_Conditional_3_Conditional_0_Template","AlarmWidgetComponent_Conditional_3_Conditional_1_Template","AlarmWidgetComponent_Conditional_3_Conditional_2_Template","AlarmWidgetComponent_Conditional_3_Conditional_3_Template","\u0275\u0275conditional","isResolving","length","AlarmWidgetComponent","alarmManagementService","inject","AlarmManagementService","tablePresenter","AlarmManagementTablePresenterService","alarmManagementRefreshService","AlarmManagementRefreshService","destroyRef","DestroyRef","label","vm","toSignal","vm$","initialValue","computed","vmState","toRows","alarms","resolvingId","canGoPrevious","canGoNext","currentPage","ngOnInit","initialize","getRefreshRequested$","pipe","takeUntilDestroyed","subscribe","activeAlarmId","resolveAlarm","selectors","decls","vars","consts","template","rf","ctx","AlarmWidgetComponent_Conditional_3_Template","AlarmWidgetComponent_Conditional_4_Template","tmp_0_0","AlarmTableShellComponent","AlarmPriorityIndicatorComponent","AlarmActionButtonComponent","ElapsedTimePipe","encapsulation","changeDetection","DashboardComponent","selectors","decls","vars","consts","template","rf","ctx","\u0275\u0275elementStart","\u0275\u0275text","\u0275\u0275elementEnd","\u0275\u0275element","CommonModule","AnalyticsWidgetComponent","AlarmWidgetComponent","styles"]},_coverageSchema:"1a1c01bbd47fc00a2c39e90264f33305004495a9",hash:"8847c94c95253345d7d8e7229a3a220004fa02cc"};var coverage=global[gcv]||(global[gcv]={});if(!coverage[path]||coverage[path].hash!==hash){coverage[path]=coverageData;}var actualCoverage=coverage[path];{// @ts-ignore +cov_12jtwdk2fl=function(){return actualCoverage;};}return actualCoverage;}cov_12jtwdk2fl();import{a as ie,b as ne}from"./chunk-SM2XKLUA.js";import{a as le}from"./chunk-O5PEFBSV.js";import{a as oe}from"./chunk-GNETQW7L.js";import{a as ae}from"./chunk-SNRTUDXT.js";import{a as re}from"./chunk-V5PG7NSI.js";import{a as Z,c as ee,d as te}from"./chunk-BZP772JM.js";import"./chunk-CFHT7CZE.js";import"./chunk-UE5BCHDC.js";import{a as J,b as K}from"./chunk-NAQGW5AE.js";import"./chunk-VIBKONAW.js";import{a as X}from"./chunk-JOEDXNZS.js";import"./chunk-CX4DL26R.js";import"./chunk-ZZLQRDHJ.js";import"./chunk-65RKWSY3.js";import"./chunk-2S5V5XEE.js";import{f as H,g as Y,h as Q,j as w}from"./chunk-F6OGAIBI.js";import{$ as N,Ab as l,Bb as v,Cb as I,Db as U,E as B,F as V,Ib as h,Jb as C,Ka as g,Lb as q,Pa as y,Pb as M,Q as x,V as $,W as P,Wa as G,X as S,Y as D,Ya as _,_a as b,ab as E,bb as A,cb as d,db as n,e as T,eb as i,fb as s,gb as c,hb as u,jb as k,m as R,n as F,nb as W,pb as p,v as z,wa as o,wb as j,zb as L}from"./chunk-RYTNMYZW.js";import"./chunk-VCZGUBMY.js";cov_12jtwdk2fl().s[0]++;var de=(t,r)=>{cov_12jtwdk2fl().f[0]++;cov_12jtwdk2fl().s[1]++;return r.id;};function ce(t,r){cov_12jtwdk2fl().f[1]++;cov_12jtwdk2fl().s[2]++;if((cov_12jtwdk2fl().b[1][0]++,t&1)&&(cov_12jtwdk2fl().b[1][1]++,c(0,"li",11)(1,"span",13),l(2),u()()),t&2){cov_12jtwdk2fl().b[0][0]++;let e=(cov_12jtwdk2fl().s[3]++,r.$implicit);cov_12jtwdk2fl().s[4]++;o(2),v(e.name);}else{cov_12jtwdk2fl().b[0][1]++;}}function fe(t,r){cov_12jtwdk2fl().f[2]++;cov_12jtwdk2fl().s[5]++;(cov_12jtwdk2fl().b[2][0]++,t&1)&&(cov_12jtwdk2fl().b[2][1]++,c(0,"li",12),l(1,"Nessun dispositivo configurato"),u());}function ge(t,r){cov_12jtwdk2fl().f[3]++;cov_12jtwdk2fl().s[6]++;if((cov_12jtwdk2fl().b[4][0]++,t&1)&&(cov_12jtwdk2fl().b[4][1]++,c(0,"div",5)(1,"div",6)(2,"h2",7),l(3),u(),c(4,"span",8),l(5),u()(),c(6,"div",9)(7,"ul",10),E(8,ce,3,1,"li",11,de,!1,fe,2,0,"li",12),u()()()),t&2){cov_12jtwdk2fl().b[3][0]++;let e=(cov_12jtwdk2fl().s[7]++,r.$implicit);cov_12jtwdk2fl().s[8]++;o(3),I(" ",e.name," "),o(2),I(" ",e.devices.length," DISPOSITIVI "),o(3),A(e.devices);}else{cov_12jtwdk2fl().b[3][1]++;}}function ue(t,r){cov_12jtwdk2fl().f[4]++;cov_12jtwdk2fl().s[9]++;if((cov_12jtwdk2fl().b[6][0]++,t&1)&&(cov_12jtwdk2fl().b[6][1]++,c(0,"div",0)(1,"header",1)(2,"h1",2),l(3," Panoramica impianto: "),c(4,"span",3),l(5),u()()(),c(6,"div",4),E(7,ge,11,3,"div",5,de),u()()),t&2){cov_12jtwdk2fl().b[5][0]++;let e=(cov_12jtwdk2fl().s[10]++,p());cov_12jtwdk2fl().s[11]++;o(5),v(e.apartment.name),o(2),A(e.apartment.rooms);}else{cov_12jtwdk2fl().b[5][1]++;}}var me=(cov_12jtwdk2fl().s[12]++,(()=>{cov_12jtwdk2fl().f[5]++;class t{apartment;static ɵfac=(cov_12jtwdk2fl().s[13]++,function(a){cov_12jtwdk2fl().f[6]++;cov_12jtwdk2fl().s[14]++;return new((cov_12jtwdk2fl().b[7][0]++,a)||(cov_12jtwdk2fl().b[7][1]++,t))();});static ɵcmp=(cov_12jtwdk2fl().s[15]++,g({type:t,selectors:[["plant-overview"]],inputs:{apartment:"apartment"},decls:1,vars:1,consts:[[1,"p-6","border","border-slate-200","bg-white","shadow-sm","rounded-3xl","w-full","h-full"],[1,"mb-8","border-b","border-slate-200","pb-4"],[1,"font-bold","text-slate-700","text-xl"],[1,"text-slate-700"],[1,"grid","grid-cols-1","md:grid-cols-2","gap-6"],[1,"bg-white","rounded-xl","shadow-sm","border","border-slate-200","overflow-hidden","hover:shadow-md","transition-shadow"],[1,"bg-slate-50","px-5","py-3","border-b","border-slate-200","flex","justify-between","items-center"],[1,"font-bold","text-slate-700","uppercase","tracking-wide","text-xs"],[1,"bg-[rgba(255,212,0,0.8)]","border","border-amber-400","text-slate-700","text-[10px]","px-2","py-0.5","rounded-full","font-semibold"],[1,"p-5"],[1,"space-y-2"],[1,"flex","items-center","text-slate-600","group"],[1,"text-slate-400","text-sm","italic"],[1,"text-sm","font-medium"]],template:function(a,m){cov_12jtwdk2fl().f[7]++;cov_12jtwdk2fl().s[16]++;(cov_12jtwdk2fl().b[8][0]++,a&1)&&(cov_12jtwdk2fl().b[8][1]++,_(0,ue,9,1,"div",0)),(cov_12jtwdk2fl().b[9][0]++,a&2)&&(cov_12jtwdk2fl().b[9][1]++,b(m.apartment?(cov_12jtwdk2fl().b[10][0]++,0):(cov_12jtwdk2fl().b[10][1]++,-1)));},dependencies:[w],encapsulation:2}));}cov_12jtwdk2fl().s[17]++;return t;})());function ve(t,r){cov_12jtwdk2fl().f[8]++;cov_12jtwdk2fl().s[18]++;if((cov_12jtwdk2fl().b[12][0]++,t&1)&&(cov_12jtwdk2fl().b[12][1]++,n(0,"option",12),l(1),i()),t&2){cov_12jtwdk2fl().b[11][0]++;let e=(cov_12jtwdk2fl().s[19]++,r.$implicit);cov_12jtwdk2fl().s[20]++;d("value",e.id),o(),U(" ",e.name," - ",e.id," ");}else{cov_12jtwdk2fl().b[11][1]++;}}function xe(t,r){cov_12jtwdk2fl().f[9]++;cov_12jtwdk2fl().s[21]++;if(t&1){cov_12jtwdk2fl().b[13][0]++;let e=(cov_12jtwdk2fl().s[22]++,k());cov_12jtwdk2fl().s[23]++;n(0,"div",6)(1,"select",7),W("change",function(m){cov_12jtwdk2fl().f[10]++;cov_12jtwdk2fl().s[24]++;$(e);let f=(cov_12jtwdk2fl().s[25]++,p());cov_12jtwdk2fl().s[26]++;return P(f.onApartmentChange(m));}),y(2,ve,2,3,"option",8),h(3,"async"),i(),n(4,"div",9),S(),n(5,"svg",10),s(6,"path",11),i()()();}else{cov_12jtwdk2fl().b[13][1]++;}cov_12jtwdk2fl().s[27]++;if(t&2){cov_12jtwdk2fl().b[14][0]++;let e=(cov_12jtwdk2fl().s[28]++,r.ngIf),a=(cov_12jtwdk2fl().s[29]++,p());cov_12jtwdk2fl().s[30]++;o(),d("value",e),o(),d("ngForOf",C(3,2,a.apartments$));}else{cov_12jtwdk2fl().b[14][1]++;}}function _e(t,r){cov_12jtwdk2fl().f[11]++;cov_12jtwdk2fl().s[31]++;if((cov_12jtwdk2fl().b[16][0]++,t&1)&&(cov_12jtwdk2fl().b[16][1]++,s(0,"app-energy-consumption-chart",16)),t&2){cov_12jtwdk2fl().b[15][0]++;let e=(cov_12jtwdk2fl().s[32]++,r.ngIf);cov_12jtwdk2fl().s[33]++;d("chartInfo",e)("showSuggestions",!1);}else{cov_12jtwdk2fl().b[15][1]++;}}function be(t,r){cov_12jtwdk2fl().f[12]++;cov_12jtwdk2fl().s[34]++;if((cov_12jtwdk2fl().b[18][0]++,t&1)&&(cov_12jtwdk2fl().b[18][1]++,s(0,"app-alarms-sent-resolved-chart",16)),t&2){cov_12jtwdk2fl().b[17][0]++;let e=(cov_12jtwdk2fl().s[35]++,r.ngIf);cov_12jtwdk2fl().s[36]++;d("chartInfo",e)("showSuggestions",!1);}else{cov_12jtwdk2fl().b[17][1]++;}}function he(t,r){cov_12jtwdk2fl().f[13]++;cov_12jtwdk2fl().s[37]++;if((cov_12jtwdk2fl().b[20][0]++,t&1)&&(cov_12jtwdk2fl().b[20][1]++,n(0,"div",17),s(1,"plant-overview",18),i()),t&2){cov_12jtwdk2fl().b[19][0]++;let e=(cov_12jtwdk2fl().s[38]++,r.ngIf);cov_12jtwdk2fl().s[39]++;o(),d("apartment",e);}else{cov_12jtwdk2fl().b[19][1]++;}}function Ce(t,r){cov_12jtwdk2fl().f[14]++;cov_12jtwdk2fl().s[40]++;if((cov_12jtwdk2fl().b[22][0]++,t&1)&&(cov_12jtwdk2fl().b[22][1]++,n(0,"div",13),y(1,_e,1,2,"app-energy-consumption-chart",14)(2,be,1,2,"app-alarms-sent-resolved-chart",14)(3,he,2,1,"div",15),h(4,"async"),i()),t&2){cov_12jtwdk2fl().b[21][0]++;let e=(cov_12jtwdk2fl().s[41]++,r.ngIf),a=(cov_12jtwdk2fl().s[42]++,p());cov_12jtwdk2fl().s[43]++;o(),d("ngIf",a.getChartByMetric(e,"plant-consumption")),o(),d("ngIf",a.getChartByMetric(e,"ward-resolved-alarm")),o(),d("ngIf",C(4,3,a.selectedApartment$));}else{cov_12jtwdk2fl().b[21][1]++;}}function ye(t,r){cov_12jtwdk2fl().f[15]++;cov_12jtwdk2fl().s[44]++;(cov_12jtwdk2fl().b[23][0]++,t&1)&&(cov_12jtwdk2fl().b[23][1]++,n(0,"div",19)(1,"p",20),l(2,"Caricamento dati in corso..."),i()());}var se=(cov_12jtwdk2fl().s[45]++,(()=>{cov_12jtwdk2fl().f[16]++;class t{refreshTrigger$=(cov_12jtwdk2fl().s[46]++,new T(!1));selectedApartment$=(cov_12jtwdk2fl().s[47]++,null);analyticsApiService=(cov_12jtwdk2fl().s[48]++,x(Z));loadTrigger$=(cov_12jtwdk2fl().s[49]++,new T(null));selectedApartmentId$=(cov_12jtwdk2fl().s[50]++,new T(null));apartments$=(cov_12jtwdk2fl().s[51]++,null);analytics=(cov_12jtwdk2fl().s[52]++,null);ngOnInit(){cov_12jtwdk2fl().f[17]++;cov_12jtwdk2fl().s[53]++;this.apartments$=this.analyticsApiService.getAllApartments(),this.apartments$.subscribe(e=>{cov_12jtwdk2fl().f[18]++;cov_12jtwdk2fl().s[54]++;(cov_12jtwdk2fl().b[24][0]++,e.length>0)&&(cov_12jtwdk2fl().b[24][1]++,this.selectedApartmentId$.next(e[0].id),this.loadTrigger$.next({id:e[0].id,refresh:!1}));}),this.selectedApartment$=F([this.apartments$,this.selectedApartmentId$]).pipe(R(([e,a])=>{cov_12jtwdk2fl().f[19]++;cov_12jtwdk2fl().s[55]++;return e.find(m=>{cov_12jtwdk2fl().f[20]++;cov_12jtwdk2fl().s[56]++;return m.id===a;});})),this.analytics=this.loadTrigger$.pipe(z(e=>{cov_12jtwdk2fl().f[21]++;cov_12jtwdk2fl().s[57]++;return e!==null;}),V(e=>{cov_12jtwdk2fl().f[22]++;cov_12jtwdk2fl().s[58]++;return this.analyticsApiService.getAnalytics(e.id,e.refresh).pipe(B(null));}));}getChartByMetric(e,a){cov_12jtwdk2fl().f[23]++;cov_12jtwdk2fl().s[59]++;return e?.analyticsInfo?.find(m=>{cov_12jtwdk2fl().f[24]++;cov_12jtwdk2fl().s[60]++;return m.metric===a;});}onApartmentChange(e){cov_12jtwdk2fl().f[25]++;let a=(cov_12jtwdk2fl().s[61]++,e.target.value);cov_12jtwdk2fl().s[62]++;this.selectedApartmentId$.next(a),this.loadTrigger$.next({id:a,refresh:!1});}onRefresh(){cov_12jtwdk2fl().f[26]++;let e=(cov_12jtwdk2fl().s[63]++,this.selectedApartmentId$.value);cov_12jtwdk2fl().s[64]++;(cov_12jtwdk2fl().b[25][0]++,e)&&(cov_12jtwdk2fl().b[25][1]++,this.loadTrigger$.next({id:e,refresh:!0}));}static ɵfac=(cov_12jtwdk2fl().s[65]++,function(a){cov_12jtwdk2fl().f[27]++;cov_12jtwdk2fl().s[66]++;return new((cov_12jtwdk2fl().b[26][0]++,a)||(cov_12jtwdk2fl().b[26][1]++,t))();});static ɵcmp=(cov_12jtwdk2fl().s[67]++,g({type:t,selectors:[["app-analytics-widget"]],decls:10,vars:7,consts:[["loading",""],[1,"p-4","bg-transparent","rounded-3xl"],[1,"max-w-md","p-4"],["for","apartment-select",1,"block","mb-2","text-xl","font-bold","text-slate-700"],["class","relative group",4,"ngIf"],["class","grid grid-cols-6 gap-4 w-full bg-transparent gap-10 p-4",4,"ngIf","ngIfElse"],[1,"relative","group"],["id","apartment-select",1,"block","w-full","cursor-pointer","appearance-none","rounded-xl","border","border-slate-200","bg-white/70","px-4","py-3","font-body","text-sm","font-medium","text-slate-700","shadow-sm","backdrop-blur-sm","transition-all","focus:border-amber-400","focus:outline-none","focus:ring-2","focus:ring-amber-400/20","group-hover:border-slate-300",3,"change","value"],["class","bg-white text-slate-700",3,"value",4,"ngFor","ngForOf"],[1,"pointer-events-none","absolute","inset-y-0","right-0","flex","items-center","px-3","text-amber-500"],["fill","none","viewBox","0 0 24 24","stroke","currentColor",1,"h-4","w-4","stroke-[3]"],["stroke-linecap","round","stroke-linejoin","round","d","M19.5 8.25l-7.5 7.5-7.5-7.5"],[1,"bg-white","text-slate-700",3,"value"],[1,"grid","grid-cols-6","gap-4","w-full","bg-transparent","gap-10","p-4"],["class","col-span-6 2xl:col-span-2",3,"chartInfo","showSuggestions",4,"ngIf"],["class","col-span-6 2xl:col-span-2 w-full h-full",4,"ngIf"],[1,"col-span-6","2xl:col-span-2",3,"chartInfo","showSuggestions"],[1,"col-span-6","2xl:col-span-2","w-full","h-full"],[3,"apartment"],[1,"flex","items-center","justify-center","h-screen","bg-slate-50"],[1,"text-slate-500","animate-pulse","font-medium","text-lg"]],template:function(a,m){cov_12jtwdk2fl().f[28]++;cov_12jtwdk2fl().s[68]++;if((cov_12jtwdk2fl().b[28][0]++,a&1)&&(cov_12jtwdk2fl().b[28][1]++,n(0,"div",1)(1,"div",2)(2,"label",3),l(3," Appartamento Monitorato "),i(),y(4,xe,7,4,"div",4),h(5,"async"),i(),y(6,Ce,5,5,"div",5),h(7,"async"),i(),y(8,ye,3,0,"ng-template",null,0,q)),a&2){cov_12jtwdk2fl().b[27][0]++;let f=(cov_12jtwdk2fl().s[69]++,j(9));cov_12jtwdk2fl().s[70]++;o(4),d("ngIf",C(5,3,m.selectedApartmentId$)),o(2),d("ngIf",C(7,5,m.analytics))("ngIfElse",f);}else{cov_12jtwdk2fl().b[27][1]++;}},dependencies:[w,H,Y,ee,te,me,Q],encapsulation:2}));}cov_12jtwdk2fl().s[71]++;return t;})());cov_12jtwdk2fl().s[72]++;var we=(t,r)=>{cov_12jtwdk2fl().f[29]++;cov_12jtwdk2fl().s[73]++;return r.id;};function Se(t,r){cov_12jtwdk2fl().f[30]++;cov_12jtwdk2fl().s[74]++;if((cov_12jtwdk2fl().b[30][0]++,t&1)&&(cov_12jtwdk2fl().b[30][1]++,n(0,"div",3),S(),n(1,"svg",7),s(2,"path",8),i(),D(),n(3,"span"),l(4),i()()),t&2){cov_12jtwdk2fl().b[29][0]++;let e=(cov_12jtwdk2fl().s[75]++,p());cov_12jtwdk2fl().s[76]++;o(4),v(e.resolveError);}else{cov_12jtwdk2fl().b[29][1]++;}}function Ee(t,r){cov_12jtwdk2fl().f[31]++;cov_12jtwdk2fl().s[77]++;(cov_12jtwdk2fl().b[31][0]++,t&1)&&(cov_12jtwdk2fl().b[31][1]++,n(0,"div",4),s(1,"div",9),n(2,"span"),l(3,"Risoluzione allarme in corso..."),i()());}function Ae(t,r){cov_12jtwdk2fl().f[32]++;cov_12jtwdk2fl().s[78]++;(cov_12jtwdk2fl().b[32][0]++,t&1)&&(cov_12jtwdk2fl().b[32][1]++,n(0,"div",5)(1,"div",10),S(),n(2,"svg",11),s(3,"path",12),i()(),D(),n(4,"p",13),l(5,"Nessun allarme attivo al momento."),i(),n(6,"p",14),l(7,"Quando verranno rilevati nuovi eventi, compariranno qui."),i()());}function Ie(t,r){cov_12jtwdk2fl().f[33]++;cov_12jtwdk2fl().s[79]++;if(t&1){cov_12jtwdk2fl().b[33][0]++;let e=(cov_12jtwdk2fl().s[80]++,k());cov_12jtwdk2fl().s[81]++;n(0,"tr",15)(1,"td",16),s(2,"app-alarm-priority-indicator",17),i(),n(3,"td",18),l(4),i(),n(5,"td",19),l(6),i(),n(7,"td",16)(8,"span"),l(9),i()(),n(10,"td",19),l(11),h(12,"elapsedTime"),i(),n(13,"td",16)(14,"app-alarm-action-button",20),W("pressed",function(){cov_12jtwdk2fl().f[34]++;let m=(cov_12jtwdk2fl().s[82]++,$(e).$implicit),f=(cov_12jtwdk2fl().s[83]++,p(3));cov_12jtwdk2fl().s[84]++;return P(f.onResolve(m.id));}),i()()();}else{cov_12jtwdk2fl().b[33][1]++;}cov_12jtwdk2fl().s[85]++;if(t&2){cov_12jtwdk2fl().b[34][0]++;let e=(cov_12jtwdk2fl().s[86]++,r.$implicit);cov_12jtwdk2fl().s[87]++;G("data-testid","alarm-row-"+e.id),o(2),d("priority",e.priority),o(2),v(e.name),o(2),v(e.location),o(2),L(e.isManaged?(cov_12jtwdk2fl().b[35][0]++,"inline-flex items-center rounded-full border border-slate-200 bg-slate-100 px-2.5 py-1 text-xs font-semibold text-slate-600"):(cov_12jtwdk2fl().b[35][1]++,"inline-flex items-center rounded-full border border-rose-200 bg-rose-50 px-2.5 py-1 text-xs font-semibold text-rose-700")),o(),I(" ",e.status," "),o(2),v(C(12,12,e.openedAt)),o(3),d("label",e.actionLabel)("tone",e.isManaged?(cov_12jtwdk2fl().b[36][0]++,"neutral"):(cov_12jtwdk2fl().b[36][1]++,"primary"))("disabled",e.isActionDisabled)("ariaLabel",e.actionAriaLabel);}else{cov_12jtwdk2fl().b[34][1]++;}}function Me(t,r){cov_12jtwdk2fl().f[35]++;cov_12jtwdk2fl().s[88]++;if((cov_12jtwdk2fl().b[38][0]++,t&1)&&(cov_12jtwdk2fl().b[38][1]++,n(0,"app-alarm-table-shell",6),E(1,Ie,15,14,"tr",15,we),i()),t&2){cov_12jtwdk2fl().b[37][0]++;let e=(cov_12jtwdk2fl().s[89]++,p(2));cov_12jtwdk2fl().s[90]++;d("title","Allarmi attivi")("caption","Tabella allarmi attivi")("columns",e.columns),o(),A(e.rows().slice(0,4));}else{cov_12jtwdk2fl().b[37][1]++;}}function Te(t,r){cov_12jtwdk2fl().f[36]++;cov_12jtwdk2fl().s[91]++;if((cov_12jtwdk2fl().b[40][0]++,t&1)&&(cov_12jtwdk2fl().b[40][1]++,_(0,Se,5,1,"div",3),_(1,Ee,4,0,"div",4),_(2,Ae,8,0,"div",5)(3,Me,3,3,"app-alarm-table-shell",6)),t&2){cov_12jtwdk2fl().b[39][0]++;let e=(cov_12jtwdk2fl().s[92]++,r),a=(cov_12jtwdk2fl().s[93]++,p());cov_12jtwdk2fl().s[94]++;b(e.resolveError?(cov_12jtwdk2fl().b[41][0]++,0):(cov_12jtwdk2fl().b[41][1]++,-1)),o(),b(e.isResolving?(cov_12jtwdk2fl().b[42][0]++,1):(cov_12jtwdk2fl().b[42][1]++,-1)),o(),b((cov_12jtwdk2fl().b[44][0]++,a.rows().length===0)&&(cov_12jtwdk2fl().b[44][1]++,!e.resolveError)?(cov_12jtwdk2fl().b[43][0]++,2):(cov_12jtwdk2fl().b[43][1]++,3));}else{cov_12jtwdk2fl().b[39][1]++;}}function $e(t,r){cov_12jtwdk2fl().f[37]++;cov_12jtwdk2fl().s[95]++;(cov_12jtwdk2fl().b[45][0]++,t&1)&&(cov_12jtwdk2fl().b[45][1]++,n(0,"div",2),s(1,"div",21),l(2," Caricamento allarmi in corso... "),i());}var pe=(cov_12jtwdk2fl().s[96]++,(()=>{cov_12jtwdk2fl().f[38]++;class t{alarmManagementService=(cov_12jtwdk2fl().s[97]++,x(ie));tablePresenter=(cov_12jtwdk2fl().s[98]++,x(ne));alarmManagementRefreshService=(cov_12jtwdk2fl().s[99]++,x(X));destroyRef=(cov_12jtwdk2fl().s[100]++,x(N));columns=(cov_12jtwdk2fl().s[101]++,[{id:"priority",label:"Priorit\xE0"},{id:"name",label:"Nome"},{id:"location",label:"Luogo"},{id:"status",label:"Stato"},{id:"openedAt",label:"Scattato"},{id:"actions",label:"Azioni"}]);vm=(cov_12jtwdk2fl().s[102]++,K(this.alarmManagementService.vm$,{initialValue:null}));rows=(cov_12jtwdk2fl().s[103]++,M(()=>{cov_12jtwdk2fl().f[39]++;let e=(cov_12jtwdk2fl().s[104]++,this.vm());cov_12jtwdk2fl().s[105]++;return e?(cov_12jtwdk2fl().b[46][0]++,this.tablePresenter.toRows(e.alarms,e.resolvingId)):(cov_12jtwdk2fl().b[46][1]++,[]);}));canGoPrevious=(cov_12jtwdk2fl().s[106]++,M(()=>{cov_12jtwdk2fl().f[40]++;cov_12jtwdk2fl().s[107]++;return(cov_12jtwdk2fl().b[47][0]++,this.vm()?.canGoPrevious)??(cov_12jtwdk2fl().b[47][1]++,!1);}));canGoNext=(cov_12jtwdk2fl().s[108]++,M(()=>{cov_12jtwdk2fl().f[41]++;cov_12jtwdk2fl().s[109]++;return(cov_12jtwdk2fl().b[48][0]++,this.vm()?.canGoNext)??(cov_12jtwdk2fl().b[48][1]++,!1);}));currentPage=(cov_12jtwdk2fl().s[110]++,M(()=>{cov_12jtwdk2fl().f[42]++;cov_12jtwdk2fl().s[111]++;return(cov_12jtwdk2fl().b[49][0]++,this.vm()?.currentPage)??(cov_12jtwdk2fl().b[49][1]++,1);}));ngOnInit(){cov_12jtwdk2fl().f[43]++;cov_12jtwdk2fl().s[112]++;this.alarmManagementService.initialize(),this.alarmManagementRefreshService.getRefreshRequested$().pipe(J(this.destroyRef)).subscribe(()=>{cov_12jtwdk2fl().f[44]++;cov_12jtwdk2fl().s[113]++;this.alarmManagementService.initialize();});}onResolve(e){cov_12jtwdk2fl().f[45]++;cov_12jtwdk2fl().s[114]++;this.alarmManagementService.resolveAlarm(e);}static ɵfac=(cov_12jtwdk2fl().s[115]++,function(a){cov_12jtwdk2fl().f[46]++;cov_12jtwdk2fl().s[116]++;return new((cov_12jtwdk2fl().b[50][0]++,a)||(cov_12jtwdk2fl().b[50][1]++,t))();});static ɵcmp=(cov_12jtwdk2fl().s[117]++,g({type:t,selectors:[["app-alarms-widget"]],decls:5,vars:1,consts:[["aria-label","Gestione allarmi",1,"bg-transparent","rounded-3xl","p-8"],[1,"block","mb-2","text-xl","font-bold","text-slate-700"],["aria-live","polite",1,"rounded-xl","border","border-slate-200","bg-white","px-4","py-3","text-sm","text-slate-600","shadow-sm"],["role","alert","aria-live","assertive",1,"alarm-management__error","flex","items-center","gap-3","rounded-xl","border","border-red-200","bg-red-50","px-4","py-3","text-sm","text-red-700","shadow-sm"],["aria-live","polite",1,"alarm-management__status","flex","items-center","gap-3","rounded-xl","border","border-sky-200","bg-sky-50","px-4","py-3","text-sm","font-medium","text-sky-700","shadow-sm"],[1,"alarm-management__empty","mt-3","flex","flex-col","items-center","justify-center","rounded-2xl","border","border-slate-200","bg-white/70","p-14","text-center","shadow-sm","backdrop-blur-sm"],[3,"title","caption","columns"],["fill","currentColor","viewBox","0 0 20 20","aria-hidden","true",1,"h-4","w-4","flex-shrink-0","text-red-500"],["fill-rule","evenodd","d","M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7 4a1 1 0 11-2 0 1 1 0 012 0zm-1-9a1 1 0 00-1 1v4a1 1 0 102 0V6a1 1 0 00-1-1z","clip-rule","evenodd"],[1,"h-4","w-4","animate-spin","rounded-full","border-2","border-sky-200","border-t-sky-600"],[1,"flex","h-14","w-14","items-center","justify-center","rounded-2xl","bg-slate-100"],["fill","none","viewBox","0 0 24 24","stroke-width","1.5","stroke","currentColor","aria-hidden","true",1,"h-7","w-7","text-slate-400"],["stroke-linecap","round","stroke-linejoin","round","d","M15 19.128a9.38 9.38 0 002.625.372 9.337 9.337 0 004.121-.952 4.125 4.125 0 00-7.533-2.493M15 19.128v-.003c0-1.113-.285-2.16-.786-3.07M15 19.128v.106A12.318 12.318 0 018.624 21c-2.331 0-4.512-.645-6.374-1.766l-.001-.109a6.375 6.375 0 0111.964-3.07M12 6.375a3.375 3.375 0 11-6.75 0 3.375 3.375 0 016.75 0zm8.25 2.25a2.625 2.625 0 11-5.25 0 2.625 2.625 0 015.25 0z"],[1,"mt-4","text-sm","font-semibold","text-slate-700"],[1,"mt-1","text-xs","text-slate-500"],[1,"group","transition-colors","hover:bg-slate-50/80"],[1,"px-5","py-3.5","align-middle"],[3,"priority"],[1,"px-5","py-3.5","align-middle","text-sm","font-semibold","text-slate-900"],[1,"px-5","py-3.5","align-middle","text-sm","text-slate-700"],[3,"pressed","label","tone","disabled","ariaLabel"],[1,"h-4","w-4","animate-spin","rounded-full","border-2","border-slate-200","border-t-slate-500"]],template:function(a,m){cov_12jtwdk2fl().f[47]++;cov_12jtwdk2fl().s[118]++;if((cov_12jtwdk2fl().b[52][0]++,a&1)&&(cov_12jtwdk2fl().b[52][1]++,n(0,"section",0)(1,"h1",1),l(2," Allarmi importanti"),i(),_(3,Te,4,3)(4,$e,3,0,"div",2),i()),a&2){cov_12jtwdk2fl().b[51][0]++;let f;cov_12jtwdk2fl().s[119]++;o(3),b((f=m.vm())?(cov_12jtwdk2fl().b[53][0]++,3):(cov_12jtwdk2fl().b[53][1]++,4),f);}else{cov_12jtwdk2fl().b[51][1]++;}},dependencies:[ae,re,oe,le],encapsulation:2,changeDetection:0}));}cov_12jtwdk2fl().s[120]++;return t;})());var rt=(cov_12jtwdk2fl().s[121]++,(()=>{cov_12jtwdk2fl().f[48]++;class t{static ɵfac=(cov_12jtwdk2fl().s[122]++,function(a){cov_12jtwdk2fl().f[49]++;cov_12jtwdk2fl().s[123]++;return new((cov_12jtwdk2fl().b[54][0]++,a)||(cov_12jtwdk2fl().b[54][1]++,t))();});static ɵcmp=(cov_12jtwdk2fl().s[124]++,g({type:t,selectors:[["app-dashboard"]],decls:23,vars:0,consts:[["aria-label","Dashboard principale",1,"care-page","care-dot-grid","sidebar-page"],[1,"care-page__hero"],[1,"care-title"],[1,"care-subtitle"],[1,"care-page__header-badge"],["aria-hidden","true",1,"care-page__header-badge-dot"],["aria-label","Azioni rapide dashboard",1,"dashboard-page__cards","flex","flex-col","gap-5"],[1,"care-panel","dashboard-page__card"],[1,"dashboard-page__card-title"],[1,"dashboard-page__card-text"]],template:function(a,m){cov_12jtwdk2fl().f[50]++;cov_12jtwdk2fl().s[125]++;(cov_12jtwdk2fl().b[55][0]++,a&1)&&(cov_12jtwdk2fl().b[55][1]++,n(0,"section",0)(1,"header",1)(2,"div")(3,"h1",2),l(4,"Dashboard"),i(),n(5,"p",3),l(6,"Controlla in un colpo d'occhio stato appartamenti, allarmi e utenti del turno."),i()(),n(7,"p",4),s(8,"span",5),l(9," Supervisione attiva "),i()(),n(10,"section",6)(11,"article",7)(12,"h2",8),l(13,"Gestione allarmi"),i(),n(14,"p",9),l(15,"Verifica gli eventi aperti e le regole di notifica configurate."),i(),s(16,"app-alarms-widget"),i(),n(17,"article",7)(18,"h2",8),l(19,"Monitor dispositivi"),i(),n(20,"p",9),l(21,"Accedi allo stato live delle stanze e alla telemetria principale."),i(),s(22,"app-analytics-widget"),i()()());},dependencies:[w,se,pe],styles:[`.dashboard-page__cards[_ngcontent-%COMP%]{grid-template-columns:repeat(auto-fit,minmax(16rem,1fr));gap:1rem}.dashboard-page__card[_ngcontent-%COMP%]{min-height:9.5rem}.dashboard-page__card-title[_ngcontent-%COMP%]{margin:0;font-family:var(--care-font-display);font-size:1.03rem;color:var(--care-primary-strong)}.dashboard-page__card-text[_ngcontent-%COMP%]{margin:.55rem 0 0;color:var(--care-muted);font-size:.94rem} +/*# sourceMappingURL=dashboard-page.component-EU5YOTYM.css.map */`]}));}cov_12jtwdk2fl().s[126]++;return t;})());export{rt as DashboardComponent};//# sourceMappingURL=chunk-TSF4KDM2.js.map +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjIiwibCIsInUiLCJ0IiwiY292XzEyanR3ZGsyZmwiLCJiIiwiZSIsInMiLCJyIiwiJGltcGxpY2l0IiwibyIsInYiLCJuYW1lIiwiZmUiLCJmIiwiZ2UiLCJFIiwiY2UiLCJkZSIsIkkiLCJkZXZpY2VzIiwibGVuZ3RoIiwiQSIsInVlIiwicCIsImFwYXJ0bWVudCIsInJvb21zIiwibWUiLCLJtWZhYyIsImEiLCLJtWNtcCIsImciLCJ0eXBlIiwic2VsZWN0b3JzIiwiaW5wdXRzIiwiZGVjbHMiLCJ2YXJzIiwiY29uc3RzIiwidGVtcGxhdGUiLCJtIiwiXyIsImRlcGVuZGVuY2llcyIsInciLCJlbmNhcHN1bGF0aW9uIiwidmUiLCJuIiwiaSIsImQiLCJpZCIsIlUiLCJ4ZSIsImsiLCJXIiwiJCIsIlAiLCJvbkFwYXJ0bWVudENoYW5nZSIsInkiLCJoIiwiUyIsIm5nSWYiLCJDIiwiYXBhcnRtZW50cyQiLCJfZSIsImJlIiwiaGUiLCJDZSIsImdldENoYXJ0QnlNZXRyaWMiLCJzZWxlY3RlZEFwYXJ0bWVudCQiLCJ5ZSIsInNlIiwicmVmcmVzaFRyaWdnZXIkIiwiVCIsImFuYWx5dGljc0FwaVNlcnZpY2UiLCJ4IiwiWiIsImxvYWRUcmlnZ2VyJCIsInNlbGVjdGVkQXBhcnRtZW50SWQkIiwiYW5hbHl0aWNzIiwibmdPbkluaXQiLCJnZXRBbGxBcGFydG1lbnRzIiwic3Vic2NyaWJlIiwibmV4dCIsInJlZnJlc2giLCJGIiwicGlwZSIsIlIiLCJmaW5kIiwieiIsIlYiLCJnZXRBbmFseXRpY3MiLCJCIiwiYW5hbHl0aWNzSW5mbyIsIm1ldHJpYyIsInRhcmdldCIsInZhbHVlIiwib25SZWZyZXNoIiwicSIsImoiLCJIIiwiWSIsImVlIiwidGUiLCJRIiwid2UiLCJTZSIsIkQiLCJyZXNvbHZlRXJyb3IiLCJFZSIsIkFlIiwiSWUiLCJvblJlc29sdmUiLCJHIiwicHJpb3JpdHkiLCJsb2NhdGlvbiIsIkwiLCJpc01hbmFnZWQiLCJzdGF0dXMiLCJvcGVuZWRBdCIsImFjdGlvbkxhYmVsIiwiaXNBY3Rpb25EaXNhYmxlZCIsImFjdGlvbkFyaWFMYWJlbCIsIk1lIiwiY29sdW1ucyIsInJvd3MiLCJzbGljZSIsIlRlIiwiaXNSZXNvbHZpbmciLCIkZSIsInBlIiwiYWxhcm1NYW5hZ2VtZW50U2VydmljZSIsImllIiwidGFibGVQcmVzZW50ZXIiLCJuZSIsImFsYXJtTWFuYWdlbWVudFJlZnJlc2hTZXJ2aWNlIiwiWCIsImRlc3Ryb3lSZWYiLCJOIiwibGFiZWwiLCJ2bSIsIksiLCJ2bSQiLCJpbml0aWFsVmFsdWUiLCJNIiwidG9Sb3dzIiwiYWxhcm1zIiwicmVzb2x2aW5nSWQiLCJjYW5Hb1ByZXZpb3VzIiwiY2FuR29OZXh0IiwiY3VycmVudFBhZ2UiLCJpbml0aWFsaXplIiwiZ2V0UmVmcmVzaFJlcXVlc3RlZCQiLCJKIiwicmVzb2x2ZUFsYXJtIiwiYWUiLCJyZSIsIm9lIiwibGUiLCJjaGFuZ2VEZXRlY3Rpb24iLCJydCIsInN0eWxlcyIsIkRhc2hib2FyZENvbXBvbmVudCJdLCJzb3VyY2VzIjpbInNyYy9hcHAvZmVhdHVyZXMvZGFzaGJvYXJkL2NvbXBvbmVudHMvcGxhbnQtb3ZlcnZpZXcvcGxhbnQtb3ZlcnZpZXcuY29tcG9uZW50LnRzIiwic3JjL2FwcC9mZWF0dXJlcy9kYXNoYm9hcmQvY29tcG9uZW50cy9wbGFudC1vdmVydmlldy9wbGFudC1vdmVydmlldy5jb21wb25lbnQuaHRtbCIsInNyYy9hcHAvZmVhdHVyZXMvZGFzaGJvYXJkL2NvbXBvbmVudHMvYW5hbHl0aWNzLXdpZGdldC9hbmFseXRpY3Mtd2lkZ2V0LmNvbXBvbmVudC50cyIsInNyYy9hcHAvZmVhdHVyZXMvZGFzaGJvYXJkL2NvbXBvbmVudHMvYW5hbHl0aWNzLXdpZGdldC9hbmFseXRpY3Mtd2lkZ2V0LmNvbXBvbmVudC5odG1sIiwic3JjL2FwcC9mZWF0dXJlcy9kYXNoYm9hcmQvY29tcG9uZW50cy9hbGFybXMtd2lkZ2V0L2FsYXJtcy13aWRnZXQuY29tcG9uZW50LnRzIiwic3JjL2FwcC9mZWF0dXJlcy9kYXNoYm9hcmQvY29tcG9uZW50cy9hbGFybXMtd2lkZ2V0L2FsYXJtcy13aWRnZXQuY29tcG9uZW50Lmh0bWwiLCJzcmMvYXBwL2ZlYXR1cmVzL2Rhc2hib2FyZC9jb21wb25lbnRzL2Rhc2hib2FyZC1wYWdlL2Rhc2hib2FyZC1wYWdlLmNvbXBvbmVudC50cyIsInNyYy9hcHAvZmVhdHVyZXMvZGFzaGJvYXJkL2NvbXBvbmVudHMvZGFzaGJvYXJkLXBhZ2UvZGFzaGJvYXJkLXBhZ2UuY29tcG9uZW50Lmh0bWwiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCAgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBQbGFudER0byB9IGZyb20gJy4uLy4uLy4uL2FwYXJ0bWVudC1tb25pdG9yL21vZGVscy9wbGFudC1yZXNwb25zZS5tb2RlbCc7XG5cbkBDb21wb25lbnQoeyBcbiAgICBzZWxlY3RvcjogJ3BsYW50LW92ZXJ2aWV3JywgXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSwgXG4gICAgaW1wb3J0czogW1xuICAgICAgICBDb21tb25Nb2R1bGUsXG4gICAgXSxcbiAgICB0ZW1wbGF0ZVVybDogJy4vcGxhbnQtb3ZlcnZpZXcuY29tcG9uZW50Lmh0bWwnIH0pXG5leHBvcnQgY2xhc3MgUGxhbnRPdmVydmlld0NvbXBvbmVudHtcbiAgICBASW5wdXQoKSBhcGFydG1lbnQhOiBQbGFudER0byB8IG51bGwgO1xufSAgICAiLCJAaWYgKGFwYXJ0bWVudCkge1xuICA8ZGl2IGNsYXNzPVwiIHAtNiBib3JkZXIgYm9yZGVyLXNsYXRlLTIwMCBiZy13aGl0ZSBzaGFkb3ctc20gcm91bmRlZC0zeGwgdy1mdWxsIGgtZnVsbFwiPlxuICAgIDxoZWFkZXIgY2xhc3M9XCJtYi04IGJvcmRlci1iIGJvcmRlci1zbGF0ZS0yMDAgcGItNFwiPlxuICAgICAgPGgxIGNsYXNzPVwiZm9udC1ib2xkIHRleHQtc2xhdGUtNzAwIHRleHQteGxcIj5cbiAgICAgICAgUGFub3JhbWljYSBpbXBpYW50bzogPHNwYW4gY2xhc3M9XCJ0ZXh0LXNsYXRlLTcwMFwiPnt7IGFwYXJ0bWVudC5uYW1lIH19PC9zcGFuPlxuICAgICAgPC9oMT5cbiAgICA8L2hlYWRlcj5cblxuICAgIDxkaXYgY2xhc3M9XCJncmlkIGdyaWQtY29scy0xIG1kOmdyaWQtY29scy0yIGdhcC02XCI+XG4gICAgICBAZm9yIChyb29tIG9mIGFwYXJ0bWVudC5yb29tczsgdHJhY2sgcm9vbS5pZCkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwiYmctd2hpdGUgcm91bmRlZC14bCBzaGFkb3ctc20gYm9yZGVyIGJvcmRlci1zbGF0ZS0yMDAgb3ZlcmZsb3ctaGlkZGVuIGhvdmVyOnNoYWRvdy1tZCB0cmFuc2l0aW9uLXNoYWRvd1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJiZy1zbGF0ZS01MCBweC01IHB5LTMgYm9yZGVyLWIgYm9yZGVyLXNsYXRlLTIwMCBmbGV4IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgIDxoMiBjbGFzcz1cImZvbnQtYm9sZCB0ZXh0LXNsYXRlLTcwMCB1cHBlcmNhc2UgdHJhY2tpbmctd2lkZSB0ZXh0LXhzXCI+XG4gICAgICAgICAgICAgIHt7IHJvb20ubmFtZSB9fVxuICAgICAgICAgICAgPC9oMj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYmctW3JnYmEoMjU1LDIxMiwwLDAuOCldIGJvcmRlciBib3JkZXItYW1iZXItNDAwIHRleHQtc2xhdGUtNzAwIHRleHQtWzEwcHhdIHB4LTIgcHktMC41IHJvdW5kZWQtZnVsbCBmb250LXNlbWlib2xkXCI+XG4gICAgICAgICAgICAgIHt7IHJvb20uZGV2aWNlcy5sZW5ndGggfX0gRElTUE9TSVRJVklcbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLTVcIj5cbiAgICAgICAgICAgIDx1bCBjbGFzcz1cInNwYWNlLXktMlwiPlxuICAgICAgICAgICAgICBAZm9yIChkZXZpY2Ugb2Ygcm9vbS5kZXZpY2VzOyB0cmFjayBkZXZpY2UuaWQpIHtcbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciB0ZXh0LXNsYXRlLTYwMCBncm91cFwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXNtIGZvbnQtbWVkaXVtXCI+e3sgZGV2aWNlLm5hbWUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgfSBAZW1wdHkge1xuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtc2xhdGUtNDAwIHRleHQtc20gaXRhbGljXCI+TmVzc3VuIGRpc3Bvc2l0aXZvIGNvbmZpZ3VyYXRvPC9saT5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxufSIsImltcG9ydCB7IENvbXBvbmVudCwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBbmFseXRpY3NBcGlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vYW5hbHl0aWNzL3NlcnZpY2VzL2FuYWx5dGljcy1hcGkuc2VydmljZSc7XG5pbXBvcnQgeyBBbmFseXRpY3NEdG8gfSBmcm9tICcuLi8uLi8uLi9hbmFseXRpY3MvbW9kZWxzL2FuYWx5dGljcy5tb2RlbCc7XG5pbXBvcnQgeyBDaGFydEluZm9EdG8gfSBmcm9tICcuLi8uLi8uLi9hbmFseXRpY3MvbW9kZWxzL2NoYXJ0LWluZm8ubW9kZWwnO1xuaW1wb3J0IHsgQWxhcm1zU2VudFJlc29sdmVkQ2hhcnRDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9hbmFseXRpY3MvY29tcG9uZW50cy9hbGFybXMtc2VudC1yZXNvbHZlZC1jaGFydC9hbGFybXMtc2VudC1yZXNvbHZlZC1jaGFydC5jb21wb25lbnQnO1xuaW1wb3J0IHsgRW5lcmd5Q29uc3VtcHRpb25DaGFydENvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2FuYWx5dGljcy9jb21wb25lbnRzL2VuZXJneS1jb25zdW1wdGlvbi1jaGFydC9lbmVyZ3ktY29uc3VtcHRpb24tY2hhcnQuY29tcG9uZW50JztcbmltcG9ydCB7IE9ic2VydmFibGUsICBzd2l0Y2hNYXAsIGZpbHRlciwgQmVoYXZpb3JTdWJqZWN0LCBzdGFydFdpdGggfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBQbGFudER0byB9IGZyb20gJy4uLy4uLy4uL2FwYXJ0bWVudC1tb25pdG9yL21vZGVscy9wbGFudC1yZXNwb25zZS5tb2RlbCc7XG5pbXBvcnQgeyBjb21iaW5lTGF0ZXN0LCBtYXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFBsYW50T3ZlcnZpZXdDb21wb25lbnQgfSBmcm9tICcuLi9wbGFudC1vdmVydmlldy9wbGFudC1vdmVydmlldy5jb21wb25lbnQnO1xuaW1wb3J0IHsgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBDb21wb25lbnQoeyBcbiAgICBzZWxlY3RvcjogJ2FwcC1hbmFseXRpY3Mtd2lkZ2V0JywgXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSwgXG4gICAgaW1wb3J0czogW1xuICAgICAgICBDb21tb25Nb2R1bGUsXG4gICAgICAgIEFsYXJtc1NlbnRSZXNvbHZlZENoYXJ0Q29tcG9uZW50LFxuICAgICAgICBFbmVyZ3lDb25zdW1wdGlvbkNoYXJ0Q29tcG9uZW50LFxuICAgICAgICBQbGFudE92ZXJ2aWV3Q29tcG9uZW50XG4gICAgXSxcbiAgICB0ZW1wbGF0ZVVybDogJy4vYW5hbHl0aWNzLXdpZGdldC5jb21wb25lbnQuaHRtbCcgfSlcblxuXG5cbmV4cG9ydCBjbGFzcyBBbmFseXRpY3NXaWRnZXRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcmVmcmVzaFRyaWdnZXIkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG5cbiAgICBwdWJsaWMgc2VsZWN0ZWRBcGFydG1lbnQkOiBPYnNlcnZhYmxlPFBsYW50RHRvIHwgdW5kZWZpbmVkPiB8IG51bGwgPSBudWxsO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBhbmFseXRpY3NBcGlTZXJ2aWNlID0gaW5qZWN0KEFuYWx5dGljc0FwaVNlcnZpY2UpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgbG9hZFRyaWdnZXIkID0gbmV3IEJlaGF2aW9yU3ViamVjdDx7IGlkOiBzdHJpbmc7IHJlZnJlc2g6IGJvb2xlYW4gfSB8IG51bGw+KG51bGwpO1xuXG4gICAgcHVibGljIHNlbGVjdGVkQXBhcnRtZW50SWQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmcgfCBudWxsPihudWxsKTtcbiAgICBcbiAgICBwdWJsaWMgYXBhcnRtZW50cyQ6IE9ic2VydmFibGU8UGxhbnREdG9bXT4gfCBudWxsID0gbnVsbDtcbiAgICBwdWJsaWMgYW5hbHl0aWNzOiBPYnNlcnZhYmxlPEFuYWx5dGljc0R0byB8IG51bGw+IHwgbnVsbCA9IG51bGw7XG5cbiAgICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuYXBhcnRtZW50cyQgPSB0aGlzLmFuYWx5dGljc0FwaVNlcnZpY2UuZ2V0QWxsQXBhcnRtZW50cygpO1xuICAgICAgICB0aGlzLmFwYXJ0bWVudHMkLnN1YnNjcmliZShhcGFydG1lbnRzID0+IHtcbiAgICAgICAgICAgIGlmIChhcGFydG1lbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkQXBhcnRtZW50SWQkLm5leHQoYXBhcnRtZW50c1swXS5pZCk7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkVHJpZ2dlciQubmV4dCh7IGlkOiBhcGFydG1lbnRzWzBdLmlkLCByZWZyZXNoOiBmYWxzZSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRBcGFydG1lbnQkID0gY29tYmluZUxhdGVzdChbXG4gICAgICAgICAgICB0aGlzLmFwYXJ0bWVudHMkLFxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEFwYXJ0bWVudElkJFxuICAgICAgICBdKS5waXBlKFxuICAgICAgICAgICAgbWFwKChbYXBhcnRtZW50cywgaWRdKSA9PiBhcGFydG1lbnRzLmZpbmQoYSA9PiBhLmlkID09PSBpZCkpXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5hbmFseXRpY3MgPSB0aGlzLmxvYWRUcmlnZ2VyJC5waXBlKFxuICAgICAgICAgICAgZmlsdGVyKHRyaWdnZXIgPT4gdHJpZ2dlciAhPT0gbnVsbCksXG4gICAgICAgICAgICBzd2l0Y2hNYXAodHJpZ2dlciA9PlxuICAgICAgICAgICAgICAgIHRoaXMuYW5hbHl0aWNzQXBpU2VydmljZVxuICAgICAgICAgICAgICAgICAgICAuZ2V0QW5hbHl0aWNzKHRyaWdnZXIuaWQsIHRyaWdnZXIucmVmcmVzaClcbiAgICAgICAgICAgICAgICAgICAgLnBpcGUoc3RhcnRXaXRoKG51bGwpKVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRDaGFydEJ5TWV0cmljKGRhdGE6IEFuYWx5dGljc0R0byB8IG51bGwsIG1ldHJpYzogc3RyaW5nKTogQ2hhcnRJbmZvRHRvIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIGRhdGE/LmFuYWx5dGljc0luZm8/LmZpbmQoY2hhcnQgPT4gY2hhcnQubWV0cmljID09PSBtZXRyaWMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkFwYXJ0bWVudENoYW5nZShldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaWQgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxTZWxlY3RFbGVtZW50KS52YWx1ZTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEFwYXJ0bWVudElkJC5uZXh0KGlkKTtcbiAgICAgICAgdGhpcy5sb2FkVHJpZ2dlciQubmV4dCh7IGlkLCByZWZyZXNoOiBmYWxzZSB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25SZWZyZXNoKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBjdXJyZW50SWQgPSB0aGlzLnNlbGVjdGVkQXBhcnRtZW50SWQkLnZhbHVlO1xuICAgICAgICBpZiAoIWN1cnJlbnRJZCkgcmV0dXJuO1xuICAgICAgICB0aGlzLmxvYWRUcmlnZ2VyJC5uZXh0KHsgaWQ6IGN1cnJlbnRJZCwgcmVmcmVzaDogdHJ1ZSB9KTtcbiAgICB9XG5cbn1cblxuIiwiXG48ZGl2IGNsYXNzPVwicC00IGJnLXRyYW5zcGFyZW50IHJvdW5kZWQtM3hsXCI+XG4gICAgXG48ZGl2IGNsYXNzPVwibWF4LXctbWQgcC00XCI+XG4gICAgPGxhYmVsIGZvcj1cImFwYXJ0bWVudC1zZWxlY3RcIiBcbiAgICAgICAgICAgY2xhc3M9XCJibG9jayBtYi0yIHRleHQteGwgZm9udC1ib2xkIHRleHQtc2xhdGUtNzAwXCI+XG4gICAgICAgIEFwcGFydGFtZW50byBNb25pdG9yYXRvXG4gICAgPC9sYWJlbD5cbiAgICBcbiAgICBcbiAgICA8ZGl2IGNsYXNzPVwicmVsYXRpdmUgZ3JvdXBcIiAqbmdJZj1cInNlbGVjdGVkQXBhcnRtZW50SWQkIHwgYXN5bmMgYXMgc2VsZWN0ZWRJZFwiPlxuICAgICAgICA8c2VsZWN0IFxuICAgICAgICAgICAgW3ZhbHVlXT1cInNlbGVjdGVkSWRcIlxuICAgICAgICAgICAgaWQ9XCJhcGFydG1lbnQtc2VsZWN0XCIgXG4gICAgICAgICAgICAoY2hhbmdlKT1cIm9uQXBhcnRtZW50Q2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgY2xhc3M9XCJibG9jayB3LWZ1bGwgY3Vyc29yLXBvaW50ZXIgYXBwZWFyYW5jZS1ub25lIHJvdW5kZWQteGwgYm9yZGVyIGJvcmRlci1zbGF0ZS0yMDAgYmctd2hpdGUvNzAgcHgtNCBweS0zIGZvbnQtYm9keSB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtc2xhdGUtNzAwIHNoYWRvdy1zbSBiYWNrZHJvcC1ibHVyLXNtIHRyYW5zaXRpb24tYWxsIGZvY3VzOmJvcmRlci1hbWJlci00MDAgZm9jdXM6b3V0bGluZS1ub25lIGZvY3VzOnJpbmctMiBmb2N1czpyaW5nLWFtYmVyLTQwMC8yMCBncm91cC1ob3Zlcjpib3JkZXItc2xhdGUtMzAwXCI+XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IGFwdCBvZiBhcGFydG1lbnRzJCB8IGFzeW5jXCIgW3ZhbHVlXT1cImFwdC5pZFwiIGNsYXNzPVwiYmctd2hpdGUgdGV4dC1zbGF0ZS03MDBcIj5cbiAgICAgICAgICAgICAgICB7eyBhcHQubmFtZSB9fSAtIHt7IGFwdC5pZCB9fVxuICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICBcbiAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgIFxuICAgICAgICA8ZGl2IGNsYXNzPVwicG9pbnRlci1ldmVudHMtbm9uZSBhYnNvbHV0ZSBpbnNldC15LTAgcmlnaHQtMCBmbGV4IGl0ZW1zLWNlbnRlciBweC0zIHRleHQtYW1iZXItNTAwXCI+XG4gICAgICAgICAgICA8c3ZnIGNsYXNzPVwiaC00IHctNCBzdHJva2UtWzNdXCIgZmlsbD1cIm5vbmVcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCI+XG4gICAgICAgICAgICAgICAgPHBhdGggc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgZD1cIk0xOS41IDguMjVsLTcuNSA3LjUtNy41LTcuNVwiIC8+XG4gICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L2Rpdj5cblxuPGRpdiAqbmdJZj1cImFuYWx5dGljcyB8IGFzeW5jIGFzIGRhdGE7IGVsc2UgbG9hZGluZ1wiIFxuY2xhc3M9XCJncmlkIGdyaWQtY29scy02IGdhcC00IHctZnVsbCBiZy10cmFuc3BhcmVudCBnYXAtMTAgcC00XCI+XG5cbiAgICA8YXBwLWVuZXJneS1jb25zdW1wdGlvbi1jaGFydCBcbiAgICAgICAgKm5nSWY9XCJnZXRDaGFydEJ5TWV0cmljKGRhdGEsICdwbGFudC1jb25zdW1wdGlvbicpIGFzIGluZm9cIlxuICAgICAgICBjbGFzcz1cImNvbC1zcGFuLTYgMnhsOmNvbC1zcGFuLTJcIlxuICAgICAgICBbY2hhcnRJbmZvXT1cImluZm9cIlxuICAgICAgICBbc2hvd1N1Z2dlc3Rpb25zXT1cImZhbHNlXCI+XG4gICAgPC9hcHAtZW5lcmd5LWNvbnN1bXB0aW9uLWNoYXJ0PlxuXG4gICAgPGFwcC1hbGFybXMtc2VudC1yZXNvbHZlZC1jaGFydCBcbiAgICAgICAgKm5nSWY9XCJnZXRDaGFydEJ5TWV0cmljKGRhdGEsICd3YXJkLXJlc29sdmVkLWFsYXJtJykgYXMgaW5mb1wiXG4gICAgICAgIGNsYXNzPVwiY29sLXNwYW4tNiAyeGw6Y29sLXNwYW4tMlwiXG4gICAgICAgIFtjaGFydEluZm9dPVwiaW5mb1wiXG4gICAgICAgIFtzaG93U3VnZ2VzdGlvbnNdPVwiZmFsc2VcIj5cbiAgICA8L2FwcC1hbGFybXMtc2VudC1yZXNvbHZlZC1jaGFydD5cblxuICAgIDxkaXYgKm5nSWY9XCJzZWxlY3RlZEFwYXJ0bWVudCQgfCBhc3luYyBhcyBjdXJyZW50QXB0XCJcbiAgICAgY2xhc3M9XCJjb2wtc3Bhbi02IDJ4bDpjb2wtc3Bhbi0yIHctZnVsbCBoLWZ1bGxcIj5cbiAgICAgICAgPHBsYW50LW92ZXJ2aWV3XG4gICAgICAgIFthcGFydG1lbnRdPVwiY3VycmVudEFwdFwiPlxuICAgICAgICA8L3BsYW50LW92ZXJ2aWV3PlxuICAgIDwvZGl2PlxuXG48L2Rpdj5cbjwvZGl2PlxuXG5cbjxuZy10ZW1wbGF0ZSAjbG9hZGluZz5cbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgaC1zY3JlZW4gYmctc2xhdGUtNTBcIj5cbiAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LXNsYXRlLTUwMCBhbmltYXRlLXB1bHNlIGZvbnQtbWVkaXVtIHRleHQtbGdcIj5DYXJpY2FtZW50byBkYXRpIGluIGNvcnNvLi4uPC9wPlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT4iLCJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBEZXN0cm95UmVmLCBjb21wdXRlZCwgT25Jbml0LCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCwgdG9TaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBBbGFybUxpc3RWbSB9IGZyb20gJy4uLy4uLy4uL2FsYXJtLW1hbmFnZW1lbnQvbW9kZWxzL2FsYXJtLWxpc3Qtdm0ubW9kZWwnO1xuaW1wb3J0IHsgQWxhcm1NYW5hZ2VtZW50U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2FsYXJtLW1hbmFnZW1lbnQvc2VydmljZXMvYWxhcm0tbWFuYWdlbWVudC5zZXJ2aWNlJztcbmltcG9ydCB7IEFsYXJtTWFuYWdlbWVudFRhYmxlUHJlc2VudGVyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2FsYXJtLW1hbmFnZW1lbnQvc2VydmljZXMvYWxhcm0tbWFuYWdlbWVudC10YWJsZS1wcmVzZW50ZXIuc2VydmljZSc7XG5pbXBvcnQgeyBBbGFybU1hbmFnZW1lbnRSZWZyZXNoU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUvYWxhcm0vc2VydmljZXMvYWxhcm0tbWFuYWdlbWVudC1yZWZyZXNoLnNlcnZpY2UnO1xuaW1wb3J0IHsgQWxhcm1UYWJsZVNoZWxsQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vLi4vc2hhcmVkL2NvbXBvbmVudHMvYWxhcm0tdGFibGUvYWxhcm0tdGFibGUtc2hlbGwuY29tcG9uZW50JztcbmltcG9ydCB7IEFsYXJtUHJpb3JpdHlJbmRpY2F0b3JDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi8uLi9zaGFyZWQvY29tcG9uZW50cy9hbGFybS10YWJsZS9hbGFybS1wcmlvcml0eS1pbmRpY2F0b3IuY29tcG9uZW50JztcbmltcG9ydCB7IEFsYXJtQWN0aW9uQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vLi4vc2hhcmVkL2NvbXBvbmVudHMvYWxhcm0tdGFibGUvYWxhcm0tYWN0aW9uLWJ1dHRvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgRWxhcHNlZFRpbWVQaXBlIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2hhcmVkL3BpcGVzL2VsYXBzZWQtdGltZS5waXBlJztcbmltcG9ydCB7IEFsYXJtVGFibGVDb2x1bW4gfSBmcm9tICcuLi8uLi8uLi8uLi9zaGFyZWQvbW9kZWxzL2FsYXJtLXRhYmxlLm1vZGVsJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWFsYXJtcy13aWRnZXQnLFxuICBpbXBvcnRzOiBbQWxhcm1UYWJsZVNoZWxsQ29tcG9uZW50LCBBbGFybVByaW9yaXR5SW5kaWNhdG9yQ29tcG9uZW50LCBBbGFybUFjdGlvbkJ1dHRvbkNvbXBvbmVudCwgRWxhcHNlZFRpbWVQaXBlXSxcbiAgdGVtcGxhdGVVcmw6ICcuL2FsYXJtcy13aWRnZXQuY29tcG9uZW50Lmh0bWwnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgQWxhcm1XaWRnZXRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBwcml2YXRlIHJlYWRvbmx5IGFsYXJtTWFuYWdlbWVudFNlcnZpY2UgPSBpbmplY3QoQWxhcm1NYW5hZ2VtZW50U2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgdGFibGVQcmVzZW50ZXIgPSBpbmplY3QoQWxhcm1NYW5hZ2VtZW50VGFibGVQcmVzZW50ZXJTZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBhbGFybU1hbmFnZW1lbnRSZWZyZXNoU2VydmljZSA9IGluamVjdChBbGFybU1hbmFnZW1lbnRSZWZyZXNoU2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgY29sdW1uczogcmVhZG9ubHkgQWxhcm1UYWJsZUNvbHVtbltdID0gW1xuICAgIHsgaWQ6ICdwcmlvcml0eScsIGxhYmVsOiAnUHJpb3JpdMOgJyB9LFxuICAgIHsgaWQ6ICduYW1lJywgbGFiZWw6ICdOb21lJyB9LFxuICAgIHsgaWQ6ICdsb2NhdGlvbicsIGxhYmVsOiAnTHVvZ28nIH0sXG4gICAgeyBpZDogJ3N0YXR1cycsIGxhYmVsOiAnU3RhdG8nIH0sXG4gICAgeyBpZDogJ29wZW5lZEF0JywgbGFiZWw6ICdTY2F0dGF0bycgfSxcbiAgICB7IGlkOiAnYWN0aW9ucycsIGxhYmVsOiAnQXppb25pJyB9LFxuICBdO1xuXG4gIHB1YmxpYyByZWFkb25seSB2bSA9IHRvU2lnbmFsPEFsYXJtTGlzdFZtIHwgbnVsbD4odGhpcy5hbGFybU1hbmFnZW1lbnRTZXJ2aWNlLnZtJCwge1xuICAgIGluaXRpYWxWYWx1ZTogbnVsbCxcbiAgfSk7XG5cbiAgcHVibGljIHJlYWRvbmx5IHJvd3MgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3Qgdm1TdGF0ZSA9IHRoaXMudm0oKTtcbiAgICBpZiAoIXZtU3RhdGUpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy50YWJsZVByZXNlbnRlci50b1Jvd3Modm1TdGF0ZS5hbGFybXMsIHZtU3RhdGUucmVzb2x2aW5nSWQpO1xuICB9KTtcblxuICBwdWJsaWMgcmVhZG9ubHkgY2FuR29QcmV2aW91cyA9IGNvbXB1dGVkKCgpID0+IHRoaXMudm0oKT8uY2FuR29QcmV2aW91cyA/PyBmYWxzZSk7XG4gIHB1YmxpYyByZWFkb25seSBjYW5Hb05leHQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnZtKCk/LmNhbkdvTmV4dCA/PyBmYWxzZSk7XG4gIHB1YmxpYyByZWFkb25seSBjdXJyZW50UGFnZSA9IGNvbXB1dGVkKCgpID0+IHRoaXMudm0oKT8uY3VycmVudFBhZ2UgPz8gMSk7XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuYWxhcm1NYW5hZ2VtZW50U2VydmljZS5pbml0aWFsaXplKCk7XG5cbiAgICB0aGlzLmFsYXJtTWFuYWdlbWVudFJlZnJlc2hTZXJ2aWNlXG4gICAgICAuZ2V0UmVmcmVzaFJlcXVlc3RlZCQoKVxuICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5hbGFybU1hbmFnZW1lbnRTZXJ2aWNlLmluaXRpYWxpemUoKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG9uUmVzb2x2ZShhY3RpdmVBbGFybUlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmFsYXJtTWFuYWdlbWVudFNlcnZpY2UucmVzb2x2ZUFsYXJtKGFjdGl2ZUFsYXJtSWQpO1xuICB9XG59XG4iLCI8c2VjdGlvbiBhcmlhLWxhYmVsPVwiR2VzdGlvbmUgYWxsYXJtaVwiIGNsYXNzPVwiIGJnLXRyYW5zcGFyZW50IHJvdW5kZWQtM3hsIHAtOFwiPlxuICAgIDxoMSBjbGFzcz1cImJsb2NrIG1iLTIgdGV4dC14bCBmb250LWJvbGQgdGV4dC1zbGF0ZS03MDBcIj5cbiAgICAgICAgQWxsYXJtaSBpbXBvcnRhbnRpPC9oMT5cblxuICAgIEBpZiAodm0oKTsgYXMgdm1TdGF0ZSkge1xuICAgIEBpZiAodm1TdGF0ZS5yZXNvbHZlRXJyb3IpIHtcbiAgICA8ZGl2IGNsYXNzPVwiYWxhcm0tbWFuYWdlbWVudF9fZXJyb3IgZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTMgcm91bmRlZC14bCBib3JkZXIgYm9yZGVyLXJlZC0yMDAgYmctcmVkLTUwIHB4LTQgcHktMyB0ZXh0LXNtIHRleHQtcmVkLTcwMCBzaGFkb3ctc21cIlxuICAgICAgICByb2xlPVwiYWxlcnRcIiBhcmlhLWxpdmU9XCJhc3NlcnRpdmVcIj5cbiAgICAgICAgPHN2ZyBjbGFzcz1cImgtNCB3LTQgZmxleC1zaHJpbmstMCB0ZXh0LXJlZC01MDBcIiBmaWxsPVwiY3VycmVudENvbG9yXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgICAgICAgICAgPHBhdGggZmlsbC1ydWxlPVwiZXZlbm9kZFwiXG4gICAgICAgICAgICAgICAgZD1cIk0xOCAxMGE4IDggMCAxMS0xNiAwIDggOCAwIDAxMTYgMHptLTcgNGExIDEgMCAxMS0yIDAgMSAxIDAgMDEyIDB6bS0xLTlhMSAxIDAgMDAtMSAxdjRhMSAxIDAgMTAyIDBWNmExIDEgMCAwMC0xLTF6XCJcbiAgICAgICAgICAgICAgICBjbGlwLXJ1bGU9XCJldmVub2RkXCIgLz5cbiAgICAgICAgPC9zdmc+XG4gICAgICAgIDxzcGFuPnt7IHZtU3RhdGUucmVzb2x2ZUVycm9yIH19PC9zcGFuPlxuICAgIDwvZGl2PlxuICAgIH1cblxuICAgIEBpZiAodm1TdGF0ZS5pc1Jlc29sdmluZykge1xuICAgIDxkaXYgY2xhc3M9XCJhbGFybS1tYW5hZ2VtZW50X19zdGF0dXMgZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTMgcm91bmRlZC14bCBib3JkZXIgYm9yZGVyLXNreS0yMDAgYmctc2t5LTUwIHB4LTQgcHktMyB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtc2t5LTcwMCBzaGFkb3ctc21cIlxuICAgICAgICBhcmlhLWxpdmU9XCJwb2xpdGVcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImgtNCB3LTQgYW5pbWF0ZS1zcGluIHJvdW5kZWQtZnVsbCBib3JkZXItMiBib3JkZXItc2t5LTIwMCBib3JkZXItdC1za3ktNjAwXCI+PC9kaXY+XG4gICAgICAgIDxzcGFuPlJpc29sdXppb25lIGFsbGFybWUgaW4gY29yc28uLi48L3NwYW4+XG4gICAgPC9kaXY+XG4gICAgfVxuXG4gICAgQGlmIChyb3dzKCkubGVuZ3RoID09PSAwICYmICF2bVN0YXRlLnJlc29sdmVFcnJvcikge1xuICAgIDxkaXYgY2xhc3M9XCJhbGFybS1tYW5hZ2VtZW50X19lbXB0eSBtdC0zIGZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHJvdW5kZWQtMnhsIGJvcmRlciBib3JkZXItc2xhdGUtMjAwIGJnLXdoaXRlLzcwIHAtMTQgdGV4dC1jZW50ZXIgc2hhZG93LXNtIGJhY2tkcm9wLWJsdXItc21cIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaC0xNCB3LTE0IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkLTJ4bCBiZy1zbGF0ZS0xMDBcIj5cbiAgICAgICAgICAgIDxzdmcgY2xhc3M9XCJoLTcgdy03IHRleHQtc2xhdGUtNDAwXCIgZmlsbD1cIm5vbmVcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCJcbiAgICAgICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIlxuICAgICAgICAgICAgICAgICAgICBkPVwiTTE1IDE5LjEyOGE5LjM4IDkuMzggMCAwMDIuNjI1LjM3MiA5LjMzNyA5LjMzNyAwIDAwNC4xMjEtLjk1MiA0LjEyNSA0LjEyNSAwIDAwLTcuNTMzLTIuNDkzTTE1IDE5LjEyOHYtLjAwM2MwLTEuMTEzLS4yODUtMi4xNi0uNzg2LTMuMDdNMTUgMTkuMTI4di4xMDZBMTIuMzE4IDEyLjMxOCAwIDAxOC42MjQgMjFjLTIuMzMxIDAtNC41MTItLjY0NS02LjM3NC0xLjc2NmwtLjAwMS0uMTA5YTYuMzc1IDYuMzc1IDAgMDExMS45NjQtMy4wN00xMiA2LjM3NWEzLjM3NSAzLjM3NSAwIDExLTYuNzUgMCAzLjM3NSAzLjM3NSAwIDAxNi43NSAwem04LjI1IDIuMjVhMi42MjUgMi42MjUgMCAxMS01LjI1IDAgMi42MjUgMi42MjUgMCAwMTUuMjUgMHpcIiAvPlxuICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8cCBjbGFzcz1cIm10LTQgdGV4dC1zbSBmb250LXNlbWlib2xkIHRleHQtc2xhdGUtNzAwXCI+TmVzc3VuIGFsbGFybWUgYXR0aXZvIGFsIG1vbWVudG8uPC9wPlxuICAgICAgICA8cCBjbGFzcz1cIm10LTEgdGV4dC14cyB0ZXh0LXNsYXRlLTUwMFwiPlF1YW5kbyB2ZXJyYW5ubyByaWxldmF0aSBudW92aSBldmVudGksIGNvbXBhcmlyYW5ubyBxdWkuPC9wPlxuICAgIDwvZGl2PlxuICAgIH0gQGVsc2Uge1xuICAgIDxhcHAtYWxhcm0tdGFibGUtc2hlbGwgW3RpdGxlXT1cIidBbGxhcm1pIGF0dGl2aSdcIiBbY2FwdGlvbl09XCInVGFiZWxsYSBhbGxhcm1pIGF0dGl2aSdcIiBbY29sdW1uc109XCJjb2x1bW5zXCI+XG4gICAgICAgIEBmb3IgKHJvdyBvZiByb3dzKCkuc2xpY2UoMCwgNCk7IHRyYWNrIHJvdy5pZCkge1xuICAgICAgICA8dHIgY2xhc3M9XCJncm91cCB0cmFuc2l0aW9uLWNvbG9ycyBob3ZlcjpiZy1zbGF0ZS01MC84MFwiIFthdHRyLmRhdGEtdGVzdGlkXT1cIidhbGFybS1yb3ctJyArIHJvdy5pZFwiPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwicHgtNSBweS0zLjUgYWxpZ24tbWlkZGxlXCI+XG4gICAgICAgICAgICAgICAgPGFwcC1hbGFybS1wcmlvcml0eS1pbmRpY2F0b3IgW3ByaW9yaXR5XT1cInJvdy5wcmlvcml0eVwiIC8+XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwicHgtNSBweS0zLjUgYWxpZ24tbWlkZGxlIHRleHQtc20gZm9udC1zZW1pYm9sZCB0ZXh0LXNsYXRlLTkwMFwiPnt7IHJvdy5uYW1lIH19PC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cInB4LTUgcHktMy41IGFsaWduLW1pZGRsZSB0ZXh0LXNtIHRleHQtc2xhdGUtNzAwXCI+e3sgcm93LmxvY2F0aW9uIH19PC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cInB4LTUgcHktMy41IGFsaWduLW1pZGRsZVwiPlxuICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJyb3cuaXNNYW5hZ2VkXG4gICAgICAgICAgICAgICAgICAgID8gJ2lubGluZS1mbGV4IGl0ZW1zLWNlbnRlciByb3VuZGVkLWZ1bGwgYm9yZGVyIGJvcmRlci1zbGF0ZS0yMDAgYmctc2xhdGUtMTAwIHB4LTIuNSBweS0xIHRleHQteHMgZm9udC1zZW1pYm9sZCB0ZXh0LXNsYXRlLTYwMCdcbiAgICAgICAgICAgICAgICAgICAgOiAnaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIHJvdW5kZWQtZnVsbCBib3JkZXIgYm9yZGVyLXJvc2UtMjAwIGJnLXJvc2UtNTAgcHgtMi41IHB5LTEgdGV4dC14cyBmb250LXNlbWlib2xkIHRleHQtcm9zZS03MDAnXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IHJvdy5zdGF0dXMgfX1cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwicHgtNSBweS0zLjUgYWxpZ24tbWlkZGxlIHRleHQtc20gdGV4dC1zbGF0ZS03MDBcIj57eyByb3cub3BlbmVkQXQgfCBlbGFwc2VkVGltZSB9fTwvdGQ+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJweC01IHB5LTMuNSBhbGlnbi1taWRkbGVcIj5cbiAgICAgICAgICAgICAgICA8YXBwLWFsYXJtLWFjdGlvbi1idXR0b24gW2xhYmVsXT1cInJvdy5hY3Rpb25MYWJlbFwiIFt0b25lXT1cInJvdy5pc01hbmFnZWQgPyAnbmV1dHJhbCcgOiAncHJpbWFyeSdcIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwicm93LmlzQWN0aW9uRGlzYWJsZWRcIiBbYXJpYUxhYmVsXT1cInJvdy5hY3Rpb25BcmlhTGFiZWxcIiAocHJlc3NlZCk9XCJvblJlc29sdmUocm93LmlkKVwiIC8+XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICA8L3RyPlxuICAgICAgICB9XG4gICAgPC9hcHAtYWxhcm0tdGFibGUtc2hlbGw+XG4gICAgfVxuICAgIH0gQGVsc2Uge1xuICAgIDxkaXYgY2xhc3M9XCJyb3VuZGVkLXhsIGJvcmRlciBib3JkZXItc2xhdGUtMjAwIGJnLXdoaXRlIHB4LTQgcHktMyB0ZXh0LXNtIHRleHQtc2xhdGUtNjAwIHNoYWRvdy1zbVwiXG4gICAgICAgIGFyaWEtbGl2ZT1cInBvbGl0ZVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaC00IHctNCBhbmltYXRlLXNwaW4gcm91bmRlZC1mdWxsIGJvcmRlci0yIGJvcmRlci1zbGF0ZS0yMDAgYm9yZGVyLXQtc2xhdGUtNTAwXCI+PC9kaXY+XG4gICAgICAgIENhcmljYW1lbnRvIGFsbGFybWkgaW4gY29yc28uLi5cbiAgICA8L2Rpdj5cbiAgICB9XG48L3NlY3Rpb24+IiwiaW1wb3J0IHsgQ29tcG9uZW50fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBBbmFseXRpY3NXaWRnZXRDb21wb25lbnQgfSBmcm9tICcuLi9hbmFseXRpY3Mtd2lkZ2V0L2FuYWx5dGljcy13aWRnZXQuY29tcG9uZW50JztcbmltcG9ydCB7IEFsYXJtV2lkZ2V0Q29tcG9uZW50IH0gZnJvbSAnLi4vYWxhcm1zLXdpZGdldC9hbGFybXMtd2lkZ2V0LmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoeyBcbiAgICBzZWxlY3RvcjogJ2FwcC1kYXNoYm9hcmQnLCBcbiAgICBzdGFuZGFsb25lOiB0cnVlLCBcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIENvbW1vbk1vZHVsZSxcbiAgICAgICAgQW5hbHl0aWNzV2lkZ2V0Q29tcG9uZW50LFxuICAgICAgICBBbGFybVdpZGdldENvbXBvbmVudFxuICAgIF0sXG4gICAgdGVtcGxhdGVVcmw6ICcuL2Rhc2hib2FyZC1wYWdlLmNvbXBvbmVudC5odG1sJywgXG4gICAgc3R5bGVVcmw6ICcuL2Rhc2hib2FyZC1wYWdlLmNvbXBvbmVudC5jc3MnfSlcbmV4cG9ydCBjbGFzcyBEYXNoYm9hcmRDb21wb25lbnR7fVxuXG5cblxuIiwiPHNlY3Rpb24gY2xhc3M9XCJjYXJlLXBhZ2UgY2FyZS1kb3QtZ3JpZCBzaWRlYmFyLXBhZ2VcIiBhcmlhLWxhYmVsPVwiRGFzaGJvYXJkIHByaW5jaXBhbGVcIj5cblx0PGhlYWRlciBjbGFzcz1cImNhcmUtcGFnZV9faGVyb1wiPlxuXHRcdDxkaXY+XG5cdFx0XHQ8aDEgY2xhc3M9XCJjYXJlLXRpdGxlXCI+RGFzaGJvYXJkPC9oMT5cblx0XHRcdDxwIGNsYXNzPVwiY2FyZS1zdWJ0aXRsZVwiPkNvbnRyb2xsYSBpbiB1biBjb2xwbyBkJ29jY2hpbyBzdGF0byBhcHBhcnRhbWVudGksIGFsbGFybWkgZSB1dGVudGkgZGVsIHR1cm5vLjwvcD5cblx0XHQ8L2Rpdj5cblxuXHRcdDxwIGNsYXNzPVwiY2FyZS1wYWdlX19oZWFkZXItYmFkZ2VcIj5cblx0XHRcdDxzcGFuIGNsYXNzPVwiY2FyZS1wYWdlX19oZWFkZXItYmFkZ2UtZG90XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9zcGFuPlxuXHRcdFx0U3VwZXJ2aXNpb25lIGF0dGl2YVxuXHRcdDwvcD5cblx0PC9oZWFkZXI+XG5cblx0PHNlY3Rpb24gY2xhc3M9XCJkYXNoYm9hcmQtcGFnZV9fY2FyZHMgZmxleCBmbGV4LWNvbCBnYXAtNVwiIGFyaWEtbGFiZWw9XCJBemlvbmkgcmFwaWRlIGRhc2hib2FyZFwiPlxuXHRcdDxhcnRpY2xlIGNsYXNzPVwiY2FyZS1wYW5lbCBkYXNoYm9hcmQtcGFnZV9fY2FyZFwiPlxuXHRcdFx0PGgyIGNsYXNzPVwiZGFzaGJvYXJkLXBhZ2VfX2NhcmQtdGl0bGVcIj5HZXN0aW9uZSBhbGxhcm1pPC9oMj5cblx0XHRcdDxwIGNsYXNzPVwiZGFzaGJvYXJkLXBhZ2VfX2NhcmQtdGV4dFwiPlZlcmlmaWNhIGdsaSBldmVudGkgYXBlcnRpIGUgbGUgcmVnb2xlIGRpIG5vdGlmaWNhIGNvbmZpZ3VyYXRlLjwvcD5cblx0ICBcdFx0PGFwcC1hbGFybXMtd2lkZ2V0PjwvYXBwLWFsYXJtcy13aWRnZXQ+XG5cdFx0PC9hcnRpY2xlPlxuXG5cdFx0PGFydGljbGUgY2xhc3M9XCJjYXJlLXBhbmVsIGRhc2hib2FyZC1wYWdlX19jYXJkXCI+XG5cdFx0XHQ8aDIgY2xhc3M9XCJkYXNoYm9hcmQtcGFnZV9fY2FyZC10aXRsZVwiPk1vbml0b3IgZGlzcG9zaXRpdmk8L2gyPlxuXHRcdFx0PHAgY2xhc3M9XCJkYXNoYm9hcmQtcGFnZV9fY2FyZC10ZXh0XCI+QWNjZWRpIGFsbG8gc3RhdG8gbGl2ZSBkZWxsZSBzdGFuemUgZSBhbGxhIHRlbGVtZXRyaWEgcHJpbmNpcGFsZS48L3A+XG5cdFx0XHQ8YXBwLWFuYWx5dGljcy13aWRnZXQ+PC9hcHAtYW5hbHl0aWNzLXdpZGdldD5cblx0XHQ8L2FydGljbGU+XG5cdDwvc2VjdGlvbj5cbjwvc2VjdGlvbj4iXSwibWFwcGluZ3MiOiI7Z3hDQ3VCZ0JBLENBQUEsWUFBbUQsYUFDZkMsQ0FBQSxJQUFpQkMsQ0FBQSxHQUFPLEdBQUFDLENBQUEsSUFBQUMsY0FBQSxHQUFBQyxDQUFBLGFBQUFDLENBQUEsRUFBQUYsY0FBQSxHQUFBRyxDQUFBLE1BQUFDLENBQUEsQ0FBQUMsU0FBQSxFQUF4QkwsY0FBQSxHQUFBRyxDQUFBLE1BQUFHLENBQUEsSUFBQUMsQ0FBQSxDQUFBTCxDQUFBLENB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LEdBQUFrSCxlQUFBLE9BQUF6SixjQUFBLEdBQUFHLENBQUEsY0FJckcsQ0FBQUosQ0FBb0IsT0VIakMsR0FBYSxDQUFBMkosRUFBQSxFQUFBMUosY0FBQSxHQUFBRyxDQUFBLFNBQWtCLEtBQUFILGNBQUEsR0FBQVUsQ0FBQSxPQUF6QixLQUFPLENBQUFYLENBQWtCLFFBQUF5QixJQUFBLEVBQUF4QixjQUFBLEdBQUFHLENBQUEsaUJBQUFzQixDQUFBLEVBQUF6QixjQUFBLEdBQUFVLENBQUEsTUFBQVYsQ0FBQSxpQkFBQUcsQ0FBQSxvQkFBQUgsY0FBQSxHQUFBQyxDQUFBLFVBQUF3QixDQUFBLElBQUF6QixjQUFBLEdBQUFDLENBQUEsVUFBbEJGLENBQUEsSUFBa0IsV0FBQTJCLElBQUEsRUFBQTFCLGNBQUEsR0FBQUcsQ0FBQSxRQUFBd0IsQ0FBQSxFQUFBQyxJQUFBLENBQWxCN0IsQ0FBQSxDQUFrQjhCLFNBQUEscUJBQUFFLEtBQUEsSUFBQUMsSUFBQSxHQUFBQyxNQUFBLDRhQUFBQyxRQUFBLFNBQUFBLENBQUFULENBQUEsQ0FBQVUsQ0FBQSxFQUFBbkMsY0FBQSxHQUFBVSxDQUFBLE1BQUFWLENBQUEsaUJBQUFHLENBQUEsU0FBQUgsY0FBQSxHQUFBQyxDQUFBLFVBQUF3QixDQUFBLE1BQUF6QixjQUFBLEdBQUFDLENBQUEsVUNmL0J3QyxDQUFBLGdCQUF3RixjQUN2RCxTQUMxQixVQUNtQjVDLENBQUEsZ0JBQVM2QyxDQUFBLEdBQ2hDRCxDQUFBLFVBQXlCNUMsQ0FBQSxxRkFBOEU2QyxDQUFBLEdBQUksRUFHNUdELENBQUEsVUFDQ3RDLENBQUEsYUFDQU4sQ0FBQSw0QkFDRDZDLENBQUEsR0FBSSxFQUdMRCxDQUFBLGlCQUFnRyxnQkFDOUMsV0FDVDVDLENBQUEsd0JBQWdCNkMsQ0FBQSxHQUN2REQsQ0FBQSxXQUFxQzVDLENBQUEsdUVBQStENkMsQ0FBQSxHQUNsR3ZDLENBQUEseUJBQ0h1QyxDQUFBLEdBRUFELENBQUEsaUJBQWlELFdBQ1Q1QyxDQUFBLDJCQUFtQjZDLENBQUEsR0FDMURELENBQUEsV0FBcUM1QyxDQUFBLHlFQUFpRTZDLENBQUEsR0FDdEd2QyxDQUFBLDRCQUNEdUMsQ0FBQSxHQUFVLEVBQ0QsS0FBQUwsWUFBQSxFRGhCSEMsQ0FBQSxDQUNBMkIsRUFBQSxDQUNBMkQsRUFBb0IsRUFBQStCLE1BQUE7a0VBQUEsTUFBQTNKLGNBQUEsR0FBQUcsQ0FBQSxjQUlmLENBQUFKLENBQWtCLGNBQUEySixFQUFBLElBQUFFLGtCQUFBLEUiLCJpZ25vcmVMaXN0IjpbXX0= \ No newline at end of file diff --git a/frontend/dist-instrumented/chunk-TSF4KDM2.js.map b/frontend/dist-instrumented/chunk-TSF4KDM2.js.map new file mode 100644 index 00000000..9da29b37 --- /dev/null +++ b/frontend/dist-instrumented/chunk-TSF4KDM2.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["src/app/features/dashboard/components/plant-overview/plant-overview.component.ts", "src/app/features/dashboard/components/plant-overview/plant-overview.component.html", "src/app/features/dashboard/components/analytics-widget/analytics-widget.component.ts", "src/app/features/dashboard/components/analytics-widget/analytics-widget.component.html", "src/app/features/dashboard/components/alarms-widget/alarms-widget.component.ts", "src/app/features/dashboard/components/alarms-widget/alarms-widget.component.html", "src/app/features/dashboard/components/dashboard-page/dashboard-page.component.ts", "src/app/features/dashboard/components/dashboard-page/dashboard-page.component.html"], + "sourcesContent": ["import { Component, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { PlantDto } from '../../../apartment-monitor/models/plant-response.model';\n\n@Component({ \n selector: 'plant-overview', \n standalone: true, \n imports: [\n CommonModule,\n ],\n templateUrl: './plant-overview.component.html' })\nexport class PlantOverviewComponent{\n @Input() apartment!: PlantDto | null ;\n} ", "@if (apartment) {\n
\n
\n

\n Panoramica impianto: {{ apartment.name }}\n

\n
\n\n
\n @for (room of apartment.rooms; track room.id) {\n
\n
\n

\n {{ room.name }}\n

\n \n {{ room.devices.length }} DISPOSITIVI\n \n
\n\n
\n
    \n @for (device of room.devices; track device.id) {\n
  • \n {{ device.name }}\n
  • \n } @empty {\n
  • Nessun dispositivo configurato
  • \n }\n
\n
\n
\n }\n
\n
\n}", "import { Component, inject } from '@angular/core';\nimport { AnalyticsApiService } from '../../../analytics/services/analytics-api.service';\nimport { AnalyticsDto } from '../../../analytics/models/analytics.model';\nimport { ChartInfoDto } from '../../../analytics/models/chart-info.model';\nimport { AlarmsSentResolvedChartComponent } from '../../../analytics/components/alarms-sent-resolved-chart/alarms-sent-resolved-chart.component';\nimport { EnergyConsumptionChartComponent } from '../../../analytics/components/energy-consumption-chart/energy-consumption-chart.component';\nimport { Observable, switchMap, filter, BehaviorSubject, startWith } from 'rxjs';\nimport { CommonModule } from '@angular/common';\nimport { PlantDto } from '../../../apartment-monitor/models/plant-response.model';\nimport { combineLatest, map } from 'rxjs';\nimport { PlantOverviewComponent } from '../plant-overview/plant-overview.component';\nimport { OnInit } from '@angular/core';\n\n@Component({ \n selector: 'app-analytics-widget', \n standalone: true, \n imports: [\n CommonModule,\n AlarmsSentResolvedChartComponent,\n EnergyConsumptionChartComponent,\n PlantOverviewComponent\n ],\n templateUrl: './analytics-widget.component.html' })\n\n\n\nexport class AnalyticsWidgetComponent implements OnInit {\n private readonly refreshTrigger$ = new BehaviorSubject(false);\n\n public selectedApartment$: Observable | null = null;\n\n private readonly analyticsApiService = inject(AnalyticsApiService);\n private readonly loadTrigger$ = new BehaviorSubject<{ id: string; refresh: boolean } | null>(null);\n\n public selectedApartmentId$ = new BehaviorSubject(null);\n \n public apartments$: Observable | null = null;\n public analytics: Observable | null = null;\n\n public ngOnInit(): void {\n this.apartments$ = this.analyticsApiService.getAllApartments();\n this.apartments$.subscribe(apartments => {\n if (apartments.length > 0) {\n this.selectedApartmentId$.next(apartments[0].id);\n this.loadTrigger$.next({ id: apartments[0].id, refresh: false });\n }\n });\n\n \n this.selectedApartment$ = combineLatest([\n this.apartments$,\n this.selectedApartmentId$\n ]).pipe(\n map(([apartments, id]) => apartments.find(a => a.id === id))\n );\n\n this.analytics = this.loadTrigger$.pipe(\n filter(trigger => trigger !== null),\n switchMap(trigger =>\n this.analyticsApiService\n .getAnalytics(trigger.id, trigger.refresh)\n .pipe(startWith(null))\n )\n );\n }\n\n public getChartByMetric(data: AnalyticsDto | null, metric: string): ChartInfoDto | undefined {\n return data?.analyticsInfo?.find(chart => chart.metric === metric);\n }\n\n public onApartmentChange(event: Event): void {\n const id = (event.target as HTMLSelectElement).value;\n this.selectedApartmentId$.next(id);\n this.loadTrigger$.next({ id, refresh: false });\n }\n\n public onRefresh(): void {\n const currentId = this.selectedApartmentId$.value;\n if (!currentId) return;\n this.loadTrigger$.next({ id: currentId, refresh: true });\n }\n\n}\n\n", "\n
\n \n
\n \n \n \n
\n \n \n
\n \n \n \n
\n
\n
\n\n
\n\n \n \n\n \n \n\n
\n \n \n
\n\n
\n
\n\n\n\n
\n

Caricamento dati in corso...

\n
\n
", "import { ChangeDetectionStrategy, Component, DestroyRef, computed, OnInit, inject } from '@angular/core';\nimport { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';\nimport { AlarmListVm } from '../../../alarm-management/models/alarm-list-vm.model';\nimport { AlarmManagementService } from '../../../alarm-management/services/alarm-management.service';\nimport { AlarmManagementTablePresenterService } from '../../../alarm-management/services/alarm-management-table-presenter.service';\nimport { AlarmManagementRefreshService } from '../../../../core/alarm/services/alarm-management-refresh.service';\nimport { AlarmTableShellComponent } from '../../../../shared/components/alarm-table/alarm-table-shell.component';\nimport { AlarmPriorityIndicatorComponent } from '../../../../shared/components/alarm-table/alarm-priority-indicator.component';\nimport { AlarmActionButtonComponent } from '../../../../shared/components/alarm-table/alarm-action-button.component';\nimport { ElapsedTimePipe } from '../../../../shared/pipes/elapsed-time.pipe';\nimport { AlarmTableColumn } from '../../../../shared/models/alarm-table.model';\n\n@Component({\n selector: 'app-alarms-widget',\n imports: [AlarmTableShellComponent, AlarmPriorityIndicatorComponent, AlarmActionButtonComponent, ElapsedTimePipe],\n templateUrl: './alarms-widget.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AlarmWidgetComponent implements OnInit {\n private readonly alarmManagementService = inject(AlarmManagementService);\n private readonly tablePresenter = inject(AlarmManagementTablePresenterService);\n private readonly alarmManagementRefreshService = inject(AlarmManagementRefreshService);\n private readonly destroyRef = inject(DestroyRef);\n\n public readonly columns: readonly AlarmTableColumn[] = [\n { id: 'priority', label: 'Priorità' },\n { id: 'name', label: 'Nome' },\n { id: 'location', label: 'Luogo' },\n { id: 'status', label: 'Stato' },\n { id: 'openedAt', label: 'Scattato' },\n { id: 'actions', label: 'Azioni' },\n ];\n\n public readonly vm = toSignal(this.alarmManagementService.vm$, {\n initialValue: null,\n });\n\n public readonly rows = computed(() => {\n const vmState = this.vm();\n if (!vmState) {\n return [];\n }\n\n return this.tablePresenter.toRows(vmState.alarms, vmState.resolvingId);\n });\n\n public readonly canGoPrevious = computed(() => this.vm()?.canGoPrevious ?? false);\n public readonly canGoNext = computed(() => this.vm()?.canGoNext ?? false);\n public readonly currentPage = computed(() => this.vm()?.currentPage ?? 1);\n\n public ngOnInit(): void {\n this.alarmManagementService.initialize();\n\n this.alarmManagementRefreshService\n .getRefreshRequested$()\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n this.alarmManagementService.initialize();\n });\n }\n\n public onResolve(activeAlarmId: string): void {\n this.alarmManagementService.resolveAlarm(activeAlarmId);\n }\n}\n", "
\n

\n Allarmi importanti

\n\n @if (vm(); as vmState) {\n @if (vmState.resolveError) {\n
\n \n \n \n {{ vmState.resolveError }}\n
\n }\n\n @if (vmState.isResolving) {\n
\n
\n Risoluzione allarme in corso...\n
\n }\n\n @if (rows().length === 0 && !vmState.resolveError) {\n
\n
\n \n \n \n
\n

Nessun allarme attivo al momento.

\n

Quando verranno rilevati nuovi eventi, compariranno qui.

\n
\n } @else {\n \n @for (row of rows().slice(0, 4); track row.id) {\n \n \n \n \n {{ row.name }}\n {{ row.location }}\n \n \n {{ row.status }}\n \n \n {{ row.openedAt | elapsedTime }}\n \n \n \n \n }\n \n }\n } @else {\n
\n
\n Caricamento allarmi in corso...\n
\n }\n
", "import { Component} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { AnalyticsWidgetComponent } from '../analytics-widget/analytics-widget.component';\nimport { AlarmWidgetComponent } from '../alarms-widget/alarms-widget.component';\n\n@Component({ \n selector: 'app-dashboard', \n standalone: true, \n imports: [\n CommonModule,\n AnalyticsWidgetComponent,\n AlarmWidgetComponent\n ],\n templateUrl: './dashboard-page.component.html', \n styleUrl: './dashboard-page.component.css'})\nexport class DashboardComponent{}\n\n\n\n", "
\n\t
\n\t\t
\n\t\t\t

Dashboard

\n\t\t\t

Controlla in un colpo d'occhio stato appartamenti, allarmi e utenti del turno.

\n\t\t
\n\n\t\t

\n\t\t\t\n\t\t\tSupervisione attiva\n\t\t

\n\t
\n\n\t
\n\t\t
\n\t\t\t

Gestione allarmi

\n\t\t\t

Verifica gli eventi aperti e le regole di notifica configurate.

\n\t \t\t\n\t\t
\n\n\t\t
\n\t\t\t

Monitor dispositivi

\n\t\t\t

Accedi allo stato live delle stanze e alla telemetria principale.

\n\t\t\t\n\t\t
\n\t
\n
"], + "mappings": "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", + "names": ["\u0275\u0275domElementStart", "\u0275\u0275text", "\u0275\u0275domElementEnd", "\u0275\u0275advance", "\u0275\u0275textInterpolate", "device_r1", "name", "\u0275\u0275repeaterCreate", "PlantOverviewComponent_Conditional_0_For_8_For_9_Template", "_forTrack0", "PlantOverviewComponent_Conditional_0_For_8_ForEmpty_10_Template", "\u0275\u0275textInterpolate1", "room_r2", "devices", "length", "\u0275\u0275repeater", "PlantOverviewComponent_Conditional_0_For_8_Template", "ctx_r2", "apartment", "rooms", "PlantOverviewComponent", "selectors", "inputs", "decls", "vars", "consts", "template", "rf", "ctx", "\u0275\u0275conditionalCreate", "PlantOverviewComponent_Conditional_0_Template", "\u0275\u0275conditional", "CommonModule", "encapsulation", "\u0275\u0275elementStart", "\u0275\u0275text", "\u0275\u0275elementEnd", "\u0275\u0275property", "apt_r3", "id", "\u0275\u0275advance", "\u0275\u0275textInterpolate2", "name", "\u0275\u0275listener", "$event", "\u0275\u0275restoreView", "_r1", "ctx_r1", "\u0275\u0275nextContext", "\u0275\u0275resetView", "onApartmentChange", "\u0275\u0275template", "AnalyticsWidgetComponent_div_4_option_2_Template", "\u0275\u0275element", "selectedId_r4", "\u0275\u0275pipeBind1", "apartments$", "info_r5", "info_r6", "currentApt_r7", "AnalyticsWidgetComponent_div_6_app_energy_consumption_chart_1_Template", "AnalyticsWidgetComponent_div_6_app_alarms_sent_resolved_chart_2_Template", "AnalyticsWidgetComponent_div_6_div_3_Template", "getChartByMetric", "data_r8", "selectedApartment$", "AnalyticsWidgetComponent", "refreshTrigger$", "BehaviorSubject", "analyticsApiService", "inject", "AnalyticsApiService", "loadTrigger$", "selectedApartmentId$", "analytics", "ngOnInit", "getAllApartments", "subscribe", "apartments", "length", "next", "refresh", "combineLatest", "pipe", "map", "find", "a", "filter", "trigger", "switchMap", "getAnalytics", "startWith", "data", "metric", "analyticsInfo", "chart", "event", "target", "value", "onRefresh", "currentId", "selectors", "decls", "vars", "consts", "template", "rf", "ctx", "AnalyticsWidgetComponent_div_4_Template", "AnalyticsWidgetComponent_div_6_Template", "AnalyticsWidgetComponent_ng_template_8_Template", "\u0275\u0275templateRefExtractor", "loading_r9", "CommonModule", "NgForOf", "NgIf", "AlarmsSentResolvedChartComponent", "EnergyConsumptionChartComponent", "PlantOverviewComponent", "AsyncPipe", "encapsulation", "\u0275\u0275elementStart", "\u0275\u0275element", "\u0275\u0275elementEnd", "\u0275\u0275text", "\u0275\u0275advance", "\u0275\u0275textInterpolate", "vmState_r1", "resolveError", "\u0275\u0275listener", "row_r3", "\u0275\u0275restoreView", "_r2", "$implicit", "ctx_r3", "\u0275\u0275nextContext", "\u0275\u0275resetView", "onResolve", "id", "\u0275\u0275property", "priority", "name", "location", "\u0275\u0275classMap", "isManaged", "\u0275\u0275textInterpolate1", "status", "\u0275\u0275pipeBind1", "openedAt", "actionLabel", "isActionDisabled", "actionAriaLabel", "\u0275\u0275repeaterCreate", "AlarmWidgetComponent_Conditional_3_Conditional_3_For_2_Template", "_forTrack0", "columns", "\u0275\u0275repeater", "rows", "slice", "\u0275\u0275conditionalCreate", "AlarmWidgetComponent_Conditional_3_Conditional_0_Template", "AlarmWidgetComponent_Conditional_3_Conditional_1_Template", "AlarmWidgetComponent_Conditional_3_Conditional_2_Template", "AlarmWidgetComponent_Conditional_3_Conditional_3_Template", "\u0275\u0275conditional", "isResolving", "length", "AlarmWidgetComponent", "alarmManagementService", "inject", "AlarmManagementService", "tablePresenter", "AlarmManagementTablePresenterService", "alarmManagementRefreshService", "AlarmManagementRefreshService", "destroyRef", "DestroyRef", "label", "vm", "toSignal", "vm$", "initialValue", "computed", "vmState", "toRows", "alarms", "resolvingId", "canGoPrevious", "canGoNext", "currentPage", "ngOnInit", "initialize", "getRefreshRequested$", "pipe", "takeUntilDestroyed", "subscribe", "activeAlarmId", "resolveAlarm", "selectors", "decls", "vars", "consts", "template", "rf", "ctx", "AlarmWidgetComponent_Conditional_3_Template", "AlarmWidgetComponent_Conditional_4_Template", "tmp_0_0", "AlarmTableShellComponent", "AlarmPriorityIndicatorComponent", "AlarmActionButtonComponent", "ElapsedTimePipe", "encapsulation", "changeDetection", "DashboardComponent", "selectors", "decls", "vars", "consts", "template", "rf", "ctx", "\u0275\u0275elementStart", "\u0275\u0275text", "\u0275\u0275elementEnd", "\u0275\u0275element", "CommonModule", "AnalyticsWidgetComponent", "AlarmWidgetComponent", "styles"] +} diff --git a/frontend/dist-instrumented/chunk-UE5BCHDC.js b/frontend/dist-instrumented/chunk-UE5BCHDC.js new file mode 100644 index 00000000..cc0297c9 --- /dev/null +++ b/frontend/dist-instrumented/chunk-UE5BCHDC.js @@ -0,0 +1,5 @@ +function cov_2dj4df7l8y(){var path="/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-UE5BCHDC.js";var hash="21d9902e1ec33cad2206cb4e38e210b3e332785a";var global=new Function("return this")();var gcv="__coverage__";var coverageData={path:"/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-UE5BCHDC.js",statementMap:{"0":{start:{line:1,column:232},end:{line:1,column:245}},"1":{start:{line:1,column:253},end:{line:1,column:287}},"2":{start:{line:1,column:262},end:{line:1,column:287}},"3":{start:{line:1,column:303},end:{line:1,column:330}},"4":{start:{line:1,column:346},end:{line:1,column:372}},"5":{start:{line:1,column:388},end:{line:1,column:417}},"6":{start:{line:1,column:433},end:{line:1,column:459}},"7":{start:{line:1,column:467},end:{line:1,column:568}},"8":{start:{line:1,column:572},end:{line:1,column:595}},"9":{start:{line:1,column:599},end:{line:1,column:610}},"10":{start:{line:1,column:602},end:{line:1,column:610}},"11":{start:{line:1,column:614},end:{line:1,column:640}},"12":{start:{line:1,column:617},end:{line:1,column:640}},"13":{start:{line:1,column:644},end:{line:1,column:666}},"14":{start:{line:1,column:647},end:{line:1,column:666}},"15":{start:{line:1,column:670},end:{line:1,column:707}},"16":{start:{line:1,column:673},end:{line:1,column:707}},"17":{start:{line:1,column:729},end:{line:1,column:737}},"18":{start:{line:1,column:740},end:{line:1,column:981}},"19":{start:{line:1,column:989},end:{line:1,column:1009}},"20":{start:{line:1,column:996},end:{line:1,column:1009}},"21":{start:{line:1,column:1031},end:{line:1,column:1042}},"22":{start:{line:1,column:1043},end:{line:1,column:1093}},"23":{start:{line:1,column:1101},end:{line:1,column:1211}},"24":{start:{line:1,column:1237},end:{line:1,column:1254}},"25":{start:{line:1,column:1257},end:{line:1,column:1312}},"26":{start:{line:1,column:1276},end:{line:1,column:1312}},"27":{start:{line:1,column:1313},end:{line:1,column:1335}},"28":{start:{line:1,column:1361},end:{line:1,column:1414}},"29":{start:{line:1,column:1379},end:{line:1,column:1414}},"30":{start:{line:1,column:1415},end:{line:1,column:1437}},"31":{start:{line:1,column:1463},end:{line:1,column:1473}},"32":{start:{line:1,column:1476},end:{line:1,column:1541}},"33":{start:{line:1,column:1521},end:{line:1,column:1541}},"34":{start:{line:1,column:1541},end:{line:1,column:1549}},"35":{start:{line:1,column:1573},end:{line:1,column:1629}},"36":{start:{line:1,column:1651},end:{line:1,column:1658}},"37":{start:{line:1,column:1661},end:{line:1,column:1668}},"38":{start:{line:1,column:1671},end:{line:1,column:1678}},"39":{start:{line:1,column:1681},end:{line:1,column:1696}},"40":{start:{line:1,column:1699},end:{line:1,column:1714}},"41":{start:{line:1,column:1717},end:{line:1,column:1724}},"42":{start:{line:1,column:1731},end:{line:1,column:1816}},"43":{start:{line:1,column:1838},end:{line:1,column:1897}},"44":{start:{line:1,column:1917},end:{line:1,column:1936}},"45":{start:{line:1,column:1956},end:{line:1,column:1975}},"46":{start:{line:1,column:1995},end:{line:1,column:2014}},"47":{start:{line:1,column:2030},end:{line:1,column:2051}},"48":{start:{line:1,column:2073},end:{line:1,column:2083}},"49":{start:{line:1,column:2086},end:{line:1,column:2089}},"50":{start:{line:1,column:2092},end:{line:1,column:2105}},"51":{start:{line:1,column:2098},end:{line:1,column:2105}},"52":{start:{line:1,column:2105},end:{line:1,column:2144}},"53":{start:{line:1,column:2150},end:{line:1,column:2159}},"54":{start:{line:1,column:2162},end:{line:1,column:2171}},"55":{start:{line:1,column:2174},end:{line:1,column:2183}},"56":{start:{line:1,column:2184},end:{line:1,column:2279}},"57":{start:{line:1,column:2303},end:{line:1,column:2308}},"58":{start:{line:1,column:2309},end:{line:1,column:2359}},"59":{start:{line:1,column:2375},end:{line:1,column:2388}},"60":{start:{line:1,column:2381},end:{line:1,column:2388}},"61":{start:{line:1,column:2394},end:{line:1,column:2399}},"62":{start:{line:1,column:2402},end:{line:1,column:2406}},"63":{start:{line:1,column:2409},end:{line:1,column:2417}},"64":{start:{line:1,column:2420},end:{line:1,column:2428}},"65":{start:{line:1,column:2429},end:{line:1,column:2508}},"66":{start:{line:1,column:2516},end:{line:1,column:2739}},"67":{start:{line:1,column:2743},end:{line:1,column:5039}},"68":{start:{line:1,column:5060},end:{line:1,column:5062}},"69":{start:{line:1,column:5065},end:{line:1,column:5080}},"70":{start:{line:1,column:5083},end:{line:1,column:5098}},"71":{start:{line:1,column:5109},end:{line:1,column:5246}},"72":{start:{line:1,column:5133},end:{line:1,column:5193}},"73":{start:{line:1,column:5165},end:{line:1,column:5193}},"74":{start:{line:1,column:5193},end:{line:1,column:5245}},"75":{start:{line:1,column:5246},end:{line:1,column:5254}},"76":{start:{line:1,column:5277},end:{line:1,column:5316}},"77":{start:{line:1,column:5322},end:{line:1,column:5341}},"78":{start:{line:1,column:5342},end:{line:1,column:5398}},"79":{start:{line:1,column:5406},end:{line:1,column:5508}},"80":{start:{line:1,column:5530},end:{line:1,column:5540}},"81":{start:{line:1,column:5543},end:{line:1,column:5546}},"82":{start:{line:1,column:5553},end:{line:1,column:5755}},"83":{start:{line:1,column:5559},end:{line:1,column:5613}},"84":{start:{line:1,column:5578},end:{line:1,column:5583}},"85":{start:{line:1,column:5584},end:{line:1,column:5612}},"86":{start:{line:1,column:5613},end:{line:1,column:5754}},"87":{start:{line:1,column:5771},end:{line:1,column:5863}},"88":{start:{line:1,column:5871},end:{line:1,column:5922}},"89":{start:{line:1,column:5874},end:{line:1,column:5922}},"90":{start:{line:1,column:5926},end:{line:1,column:5975}},"91":{start:{line:1,column:5929},end:{line:1,column:5975}},"92":{start:{line:1,column:6001},end:{line:1,column:6012}},"93":{start:{line:1,column:6015},end:{line:1,column:6026}},"94":{start:{line:1,column:6029},end:{line:1,column:6040}},"95":{start:{line:1,column:6041},end:{line:1,column:6156}},"96":{start:{line:1,column:6176},end:{line:1,column:6280}},"97":{start:{line:1,column:6188},end:{line:1,column:6193}},"98":{start:{line:1,column:6194},end:{line:1,column:6279}},"99":{start:{line:1,column:6298},end:{line:1,column:6330}},"100":{start:{line:1,column:6352},end:{line:1,column:6371}},"101":{start:{line:1,column:6372},end:{line:1,column:6510}},"102":{start:{line:1,column:6526},end:{line:1,column:6562}},"103":{start:{line:1,column:6570},end:{line:1,column:7815}},"104":{start:{line:1,column:6593},end:{line:1,column:6620}},"105":{start:{line:1,column:6611},end:{line:1,column:6620}},"106":{start:{line:1,column:6626},end:{line:1,column:6634}},"107":{start:{line:1,column:6637},end:{line:1,column:6723}},"108":{start:{line:1,column:6736},end:{line:1,column:6754}},"109":{start:{line:1,column:6771},end:{line:1,column:6784}},"110":{start:{line:1,column:6785},end:{line:1,column:6810}},"111":{start:{line:1,column:6822},end:{line:1,column:6837}},"112":{start:{line:1,column:6850},end:{line:1,column:6889}},"113":{start:{line:1,column:6902},end:{line:1,column:6941}},"114":{start:{line:1,column:6954},end:{line:1,column:6993}},"115":{start:{line:1,column:7003},end:{line:1,column:7206}},"116":{start:{line:1,column:7015},end:{line:1,column:7023}},"117":{start:{line:1,column:7026},end:{line:1,column:7031}},"118":{start:{line:1,column:7036},end:{line:1,column:7046}},"119":{start:{line:1,column:7049},end:{line:1,column:7054}},"120":{start:{line:1,column:7057},end:{line:1,column:7064}},"121":{start:{line:1,column:7067},end:{line:1,column:7099}},"122":{start:{line:1,column:7100},end:{line:1,column:7205}},"123":{start:{line:1,column:7206},end:{line:1,column:7217}},"124":{start:{line:1,column:7235},end:{line:1,column:7284}},"125":{start:{line:1,column:7293},end:{line:1,column:7315}},"126":{start:{line:1,column:7325},end:{line:1,column:7354}},"127":{start:{line:1,column:7372},end:{line:1,column:7381}},"128":{start:{line:1,column:7382},end:{line:1,column:7402}},"129":{start:{line:1,column:7421},end:{line:1,column:7430}},"130":{start:{line:1,column:7433},end:{line:1,column:7459}},"131":{start:{line:1,column:7460},end:{line:1,column:7485}},"132":{start:{line:1,column:7503},end:{line:1,column:7512}},"133":{start:{line:1,column:7513},end:{line:1,column:7533}},"134":{start:{line:1,column:7549},end:{line:1,column:7558}},"135":{start:{line:1,column:7559},end:{line:1,column:7606}},"136":{start:{line:1,column:7618},end:{line:1,column:7647}},"137":{start:{line:1,column:7658},end:{line:1,column:7688}},"138":{start:{line:1,column:7701},end:{line:1,column:7730}},"139":{start:{line:1,column:7745},end:{line:1,column:7775}},"140":{start:{line:1,column:7786},end:{line:1,column:7813}},"141":{start:{line:1,column:7838},end:{line:1,column:7869}},"142":{start:{line:1,column:7850},end:{line:1,column:7851}},"143":{start:{line:1,column:7852},end:{line:1,column:7865}},"144":{start:{line:1,column:7862},end:{line:1,column:7865}},"145":{start:{line:1,column:7884},end:{line:1,column:7898}},"146":{start:{line:1,column:7913},end:{line:1,column:7957}},"147":{start:{line:1,column:7948},end:{line:1,column:7957}},"148":{start:{line:1,column:7963},end:{line:1,column:7996}},"149":{start:{line:1,column:7997},end:{line:1,column:8052}},"150":{start:{line:1,column:8067},end:{line:1,column:8137}},"151":{start:{line:1,column:8152},end:{line:1,column:8213}},"152":{start:{line:1,column:8230},end:{line:1,column:8245}},"153":{start:{line:1,column:8262},end:{line:1,column:8285}},"154":{start:{line:1,column:8293},end:{line:1,column:8358}},"155":{start:{line:1,column:8300},end:{line:1,column:8358}},"156":{start:{line:1,column:8362},end:{line:1,column:8427}},"157":{start:{line:1,column:8369},end:{line:1,column:8427}},"158":{start:{line:1,column:8446},end:{line:1,column:8497}},"159":{start:{line:1,column:8478},end:{line:1,column:8497}},"160":{start:{line:1,column:8528},end:{line:1,column:8705}},"161":{start:{line:1,column:8536},end:{line:1,column:8626}},"162":{start:{line:1,column:8552},end:{line:1,column:8588}},"163":{start:{line:1,column:8571},end:{line:1,column:8588}},"164":{start:{line:1,column:8593},end:{line:1,column:8626}},"165":{start:{line:1,column:8609},end:{line:1,column:8626}},"166":{start:{line:1,column:8631},end:{line:1,column:8705}},"167":{start:{line:1,column:8639},end:{line:1,column:8705}},"168":{start:{line:1,column:8683},end:{line:1,column:8705}},"169":{start:{line:1,column:8735},end:{line:1,column:8775}},"170":{start:{line:1,column:8766},end:{line:1,column:8775}},"171":{start:{line:1,column:8775},end:{line:1,column:8879}},"172":{start:{line:1,column:8802},end:{line:1,column:8879}},"173":{start:{line:1,column:8870},end:{line:1,column:8879}},"174":{start:{line:1,column:8879},end:{line:1,column:8887}},"175":{start:{line:1,column:8903},end:{line:1,column:8928}},"176":{start:{line:1,column:8911},end:{line:1,column:8928}},"177":{start:{line:1,column:8928},end:{line:1,column:9037}},"178":{start:{line:1,column:8943},end:{line:1,column:8962}},"179":{start:{line:1,column:8965},end:{line:1,column:8979}},"180":{start:{line:1,column:8982},end:{line:1,column:8990}},"181":{start:{line:1,column:8993},end:{line:1,column:8994}},"182":{start:{line:1,column:8995},end:{line:1,column:9028}},"183":{start:{line:1,column:9008},end:{line:1,column:9028}},"184":{start:{line:1,column:9028},end:{line:1,column:9036}},"185":{start:{line:1,column:9037},end:{line:1,column:9045}},"186":{start:{line:1,column:9061},end:{line:1,column:9122}},"187":{start:{line:1,column:9144},end:{line:1,column:9161}},"188":{start:{line:1,column:9154},end:{line:1,column:9161}},"189":{start:{line:1,column:9167},end:{line:1,column:9171}},"190":{start:{line:1,column:9174},end:{line:1,column:9178}},"191":{start:{line:1,column:9179},end:{line:1,column:9210}},"192":{start:{line:1,column:9236},end:{line:1,column:9246}},"193":{start:{line:1,column:9249},end:{line:1,column:9257}},"194":{start:{line:1,column:9258},end:{line:1,column:9276}},"195":{start:{line:1,column:9267},end:{line:1,column:9276}},"196":{start:{line:1,column:9276},end:{line:1,column:9284}},"197":{start:{line:1,column:9290},end:{line:1,column:9302}},"198":{start:{line:1,column:9305},end:{line:1,column:9417}},"199":{start:{line:1,column:9315},end:{line:1,column:9316}},"200":{start:{line:1,column:9326},end:{line:1,column:9351}},"201":{start:{line:1,column:9342},end:{line:1,column:9351}},"202":{start:{line:1,column:9357},end:{line:1,column:9371}},"203":{start:{line:1,column:9372},end:{line:1,column:9416}},"204":{start:{line:1,column:9382},end:{line:1,column:9383}},"205":{start:{line:1,column:9386},end:{line:1,column:9394}},"206":{start:{line:1,column:9403},end:{line:1,column:9416}},"207":{start:{line:1,column:9417},end:{line:1,column:9425}},"208":{start:{line:1,column:9443},end:{line:1,column:9469}},"209":{start:{line:1,column:9489},end:{line:1,column:9506}},"210":{start:{line:1,column:9499},end:{line:1,column:9506}},"211":{start:{line:1,column:9512},end:{line:1,column:9516}},"212":{start:{line:1,column:9519},end:{line:1,column:9523}},"213":{start:{line:1,column:9524},end:{line:1,column:9598}},"214":{start:{line:1,column:9606},end:{line:1,column:9633}},"215":{start:{line:1,column:9613},end:{line:1,column:9614}},"216":{start:{line:1,column:9620},end:{line:1,column:9623}},"217":{start:{line:1,column:9629},end:{line:1,column:9632}},"218":{start:{line:1,column:9655},end:{line:1,column:9667}},"219":{start:{line:1,column:9670},end:{line:1,column:9672}},"220":{start:{line:1,column:9675},end:{line:1,column:9677}},"221":{start:{line:1,column:9678},end:{line:1,column:9752}},"222":{start:{line:1,column:9693},end:{line:1,column:9752}},"223":{start:{line:1,column:9752},end:{line:1,column:9760}},"224":{start:{line:1,column:9782},end:{line:1,column:9787}},"225":{start:{line:1,column:9788},end:{line:1,column:9850}},"226":{start:{line:1,column:9799},end:{line:1,column:9841}},"227":{start:{line:1,column:9815},end:{line:1,column:9831}},"228":{start:{line:1,column:9825},end:{line:1,column:9831}},"229":{start:{line:1,column:9831},end:{line:1,column:9840}},"230":{start:{line:1,column:9841},end:{line:1,column:9849}},"231":{start:{line:1,column:9868},end:{line:1,column:9899}},"232":{start:{line:1,column:9915},end:{line:1,column:9958}},"233":{start:{line:1,column:9966},end:{line:1,column:9981}},"234":{start:{line:1,column:9969},end:{line:1,column:9981}},"235":{start:{line:1,column:9985},end:{line:1,column:10008}},"236":{start:{line:1,column:9988},end:{line:1,column:10008}},"237":{start:{line:1,column:10012},end:{line:1,column:10094}},"238":{start:{line:1,column:10020},end:{line:1,column:10048}},"239":{start:{line:1,column:10039},end:{line:1,column:10048}},"240":{start:{line:1,column:10048},end:{line:1,column:10085}},"241":{start:{line:1,column:10063},end:{line:1,column:10085}},"242":{start:{line:1,column:10076},end:{line:1,column:10085}},"243":{start:{line:1,column:10085},end:{line:1,column:10093}},"244":{start:{line:1,column:10110},end:{line:1,column:10177}},"245":{start:{line:1,column:10184},end:{line:1,column:10191}},"246":{start:{line:1,column:10194},end:{line:1,column:10197}},"247":{start:{line:1,column:10201},end:{line:1,column:10204}},"248":{start:{line:1,column:10208},end:{line:1,column:10232}},"249":{start:{line:1,column:10236},end:{line:1,column:10241}},"250":{start:{line:1,column:10244},end:{line:1,column:10247}},"251":{start:{line:1,column:10251},end:{line:1,column:10254}},"252":{start:{line:1,column:10258},end:{line:1,column:10263}},"253":{start:{line:1,column:10267},end:{line:1,column:10277}},"254":{start:{line:1,column:10281},end:{line:1,column:10290}},"255":{start:{line:1,column:10310},end:{line:1,column:10332}},"256":{start:{line:1,column:10354},end:{line:1,column:10367}},"257":{start:{line:1,column:10368},end:{line:1,column:10388}},"258":{start:{line:1,column:10394},end:{line:1,column:10424}},"259":{start:{line:1,column:10427},end:{line:1,column:10430}},"260":{start:{line:1,column:10431},end:{line:1,column:10464}},"261":{start:{line:1,column:10486},end:{line:1,column:10488}},"262":{start:{line:1,column:10491},end:{line:1,column:10503}},"263":{start:{line:1,column:10506},end:{line:1,column:10555}},"264":{start:{line:1,column:10522},end:{line:1,column:10555}},"265":{start:{line:1,column:10555},end:{line:1,column:10609}},"266":{start:{line:1,column:10597},end:{line:1,column:10600}},"267":{start:{line:1,column:10625},end:{line:1,column:10739}},"268":{start:{line:1,column:10755},end:{line:1,column:10803}},"269":{start:{line:1,column:10827},end:{line:1,column:10840}},"270":{start:{line:1,column:10841},end:{line:1,column:10862}},"271":{start:{line:1,column:10892},end:{line:1,column:10988}},"272":{start:{line:1,column:10919},end:{line:1,column:10988}},"273":{start:{line:1,column:11004},end:{line:1,column:11020}},"274":{start:{line:1,column:11036},end:{line:1,column:11052}},"275":{start:{line:1,column:11068},end:{line:1,column:11084}},"276":{start:{line:1,column:11077},end:{line:1,column:11084}},"277":{start:{line:1,column:11090},end:{line:1,column:11091}},"278":{start:{line:1,column:11094},end:{line:1,column:11095}},"279":{start:{line:1,column:11096},end:{line:1,column:11134}},"280":{start:{line:1,column:11124},end:{line:1,column:11134}},"281":{start:{line:1,column:11134},end:{line:1,column:11142}},"282":{start:{line:1,column:11166},end:{line:1,column:11173}},"283":{start:{line:1,column:11176},end:{line:1,column:11183}},"284":{start:{line:1,column:11186},end:{line:1,column:11204}},"285":{start:{line:1,column:11207},end:{line:1,column:11222}},"286":{start:{line:1,column:11223},end:{line:1,column:11266}},"287":{start:{line:1,column:11284},end:{line:1,column:11341}},"288":{start:{line:1,column:11359},end:{line:1,column:11377}},"289":{start:{line:1,column:11392},end:{line:1,column:11407}},"290":{start:{line:1,column:11435},end:{line:1,column:11439}},"291":{start:{line:1,column:11442},end:{line:1,column:11446}},"292":{start:{line:1,column:11449},end:{line:1,column:11453}},"293":{start:{line:1,column:11456},end:{line:1,column:11462}},"294":{start:{line:1,column:11465},end:{line:1,column:11471}},"295":{start:{line:1,column:11474},end:{line:1,column:11480}},"296":{start:{line:1,column:11483},end:{line:1,column:11489}},"297":{start:{line:1,column:11490},end:{line:1,column:11529}},"298":{start:{line:1,column:11548},end:{line:1,column:11580}},"299":{start:{line:1,column:11596},end:{line:1,column:11620}},"300":{start:{line:1,column:11647},end:{line:1,column:11692}},"301":{start:{line:1,column:11712},end:{line:1,column:11729}},"302":{start:{line:1,column:11721},end:{line:1,column:11727}},"303":{start:{line:1,column:11735},end:{line:1,column:11745}},"304":{start:{line:1,column:11748},end:{line:1,column:11749}},"305":{start:{line:1,column:11752},end:{line:1,column:11786}},"306":{start:{line:1,column:11764},end:{line:1,column:11786}},"307":{start:{line:1,column:11786},end:{line:1,column:11803}},"308":{start:{line:1,column:11811},end:{line:1,column:11896}},"309":{start:{line:1,column:11822},end:{line:1,column:11896}},"310":{start:{line:1,column:11841},end:{line:1,column:11848}},"311":{start:{line:1,column:11849},end:{line:1,column:11881}},"312":{start:{line:1,column:11886},end:{line:1,column:11895}},"313":{start:{line:1,column:11900},end:{line:1,column:11930}},"314":{start:{line:1,column:11909},end:{line:1,column:11930}},"315":{start:{line:1,column:11919},end:{line:1,column:11929}},"316":{start:{line:1,column:11956},end:{line:1,column:11957}},"317":{start:{line:1,column:11960},end:{line:1,column:11968}},"318":{start:{line:1,column:11969},end:{line:1,column:11991}},"319":{start:{line:1,column:11987},end:{line:1,column:11991}},"320":{start:{line:1,column:11991},end:{line:1,column:12015}},"321":{start:{line:1,column:12011},end:{line:1,column:12015}},"322":{start:{line:1,column:12015},end:{line:1,column:12052}},"323":{start:{line:1,column:12060},end:{line:1,column:12101}},"324":{start:{line:1,column:12119},end:{line:1,column:12170}},"325":{start:{line:1,column:12134},end:{line:1,column:12163}},"326":{start:{line:1,column:12163},end:{line:1,column:12169}},"327":{start:{line:1,column:12170},end:{line:1,column:12479}},"328":{start:{line:1,column:12281},end:{line:1,column:12296}},"329":{start:{line:1,column:12299},end:{line:1,column:12303}},"330":{start:{line:1,column:12304},end:{line:1,column:12477}},"331":{start:{line:1,column:12379},end:{line:1,column:12394}},"332":{start:{line:1,column:12395},end:{line:1,column:12474}},"333":{start:{line:1,column:12435},end:{line:1,column:12470}},"334":{start:{line:1,column:12503},end:{line:1,column:12513}},"335":{start:{line:1,column:12514},end:{line:1,column:12527}},"336":{start:{line:1,column:12520},end:{line:1,column:12527}},"337":{start:{line:1,column:12533},end:{line:1,column:12544}},"338":{start:{line:1,column:12547},end:{line:1,column:12559}},"339":{start:{line:1,column:12560},end:{line:1,column:12645}},"340":{start:{line:1,column:12613},end:{line:1,column:12624}},"341":{start:{line:1,column:12667},end:{line:1,column:12677}},"342":{start:{line:1,column:12678},end:{line:1,column:12718}},"343":{start:{line:1,column:12726},end:{line:1,column:12819}},"344":{start:{line:1,column:12738},end:{line:1,column:12815}},"345":{start:{line:1,column:12775},end:{line:1,column:12785}},"346":{start:{line:1,column:12843},end:{line:1,column:12845}},"347":{start:{line:1,column:12848},end:{line:1,column:12850}},"348":{start:{line:1,column:12851},end:{line:1,column:12927}},"349":{start:{line:1,column:12873},end:{line:1,column:12926}},"350":{start:{line:1,column:12906},end:{line:1,column:12923}},"351":{start:{line:1,column:12951},end:{line:1,column:13038}},"352":{start:{line:1,column:12973},end:{line:1,column:13037}},"353":{start:{line:1,column:13046},end:{line:1,column:13094}},"354":{start:{line:1,column:13049},end:{line:1,column:13094}},"355":{start:{line:1,column:13097},end:{line:1,column:13139}},"356":{start:{line:1,column:13106},end:{line:1,column:13139}},"357":{start:{line:1,column:13143},end:{line:1,column:13201}},"358":{start:{line:1,column:13154},end:{line:1,column:13201}},"359":{start:{line:1,column:13227},end:{line:1,column:13235}},"360":{start:{line:1,column:13238},end:{line:1,column:13239}},"361":{start:{line:1,column:13242},end:{line:1,column:13243}},"362":{start:{line:1,column:13244},end:{line:1,column:13767}},"363":{start:{line:1,column:13291},end:{line:1,column:13292}},"364":{start:{line:1,column:13295},end:{line:1,column:13355}},"365":{start:{line:1,column:13358},end:{line:1,column:13364}},"366":{start:{line:1,column:13405},end:{line:1,column:13422}},"367":{start:{line:1,column:13423},end:{line:1,column:13586}},"368":{start:{line:1,column:13429},end:{line:1,column:13573}},"369":{start:{line:1,column:13503},end:{line:1,column:13555}},"370":{start:{line:1,column:13541},end:{line:1,column:13554}},"371":{start:{line:1,column:13556},end:{line:1,column:13572}},"372":{start:{line:1,column:13573},end:{line:1,column:13585}},"373":{start:{line:1,column:13586},end:{line:1,column:13766}},"374":{start:{line:1,column:13598},end:{line:1,column:13672}},"375":{start:{line:1,column:13673},end:{line:1,column:13743}},"376":{start:{line:1,column:13685},end:{line:1,column:13725}},"377":{start:{line:1,column:13711},end:{line:1,column:13724}},"378":{start:{line:1,column:13726},end:{line:1,column:13742}},"379":{start:{line:1,column:13743},end:{line:1,column:13755}},"380":{start:{line:1,column:13761},end:{line:1,column:13766}},"381":{start:{line:1,column:13767},end:{line:1,column:13790}},"382":{start:{line:1,column:13844},end:{line:1,column:13845}},"383":{start:{line:1,column:13848},end:{line:1,column:13893}},"384":{start:{line:1,column:13894},end:{line:1,column:13927}},"385":{start:{line:1,column:13900},end:{line:1,column:13927}},"386":{start:{line:1,column:13933},end:{line:1,column:13995}},"387":{start:{line:1,column:13996},end:{line:1,column:14023}},"388":{start:{line:1,column:14031},end:{line:1,column:14046}},"389":{start:{line:1,column:14034},end:{line:1,column:14046}},"390":{start:{line:1,column:14050},end:{line:1,column:14103}},"391":{start:{line:1,column:14059},end:{line:1,column:14103}},"392":{start:{line:1,column:14107},end:{line:1,column:14155}},"393":{start:{line:1,column:14116},end:{line:1,column:14155}},"394":{start:{line:1,column:14159},end:{line:1,column:15706}},"395":{start:{line:1,column:14170},end:{line:1,column:14171}},"396":{start:{line:1,column:14186},end:{line:1,column:14189}},"397":{start:{line:1,column:14205},end:{line:1,column:14213}},"398":{start:{line:1,column:14231},end:{line:1,column:14265}},"399":{start:{line:1,column:14281},end:{line:1,column:14286}},"400":{start:{line:1,column:14303},end:{line:1,column:14315}},"401":{start:{line:1,column:14334},end:{line:1,column:14370}},"402":{start:{line:1,column:14386},end:{line:1,column:14393}},"403":{start:{line:1,column:14410},end:{line:1,column:14427}},"404":{start:{line:1,column:14446},end:{line:1,column:14487}},"405":{start:{line:1,column:14503},end:{line:1,column:14512}},"406":{start:{line:1,column:14529},end:{line:1,column:14545}},"407":{start:{line:1,column:14564},end:{line:1,column:14608}},"408":{start:{line:1,column:14623},end:{line:1,column:14639}},"409":{start:{line:1,column:14655},end:{line:1,column:14668}},"410":{start:{line:1,column:14686},end:{line:1,column:14707}},"411":{start:{line:1,column:14722},end:{line:1,column:14750}},"412":{start:{line:1,column:14766},end:{line:1,column:14794}},"413":{start:{line:1,column:14812},end:{line:1,column:14882}},"414":{start:{line:1,column:14897},end:{line:1,column:14925}},"415":{start:{line:1,column:14941},end:{line:1,column:14962}},"416":{start:{line:1,column:14980},end:{line:1,column:15043}},"417":{start:{line:1,column:15061},end:{line:1,column:15082}},"418":{start:{line:1,column:15101},end:{line:1,column:15122}},"419":{start:{line:1,column:15143},end:{line:1,column:15209}},"420":{start:{line:1,column:15225},end:{line:1,column:15259}},"421":{start:{line:1,column:15276},end:{line:1,column:15316}},"422":{start:{line:1,column:15341},end:{line:1,column:15348}},"423":{start:{line:1,column:15349},end:{line:1,column:15431}},"424":{start:{line:1,column:15449},end:{line:1,column:15472}},"425":{start:{line:1,column:15490},end:{line:1,column:15626}},"426":{start:{line:1,column:15647},end:{line:1,column:15705}},"427":{start:{line:1,column:15722},end:{line:1,column:15834}},"428":{start:{line:1,column:15754},end:{line:1,column:15766}},"429":{start:{line:1,column:15767},end:{line:1,column:15833}},"430":{start:{line:1,column:15834},end:{line:1,column:15842}},"431":{start:{line:1,column:15858},end:{line:1,column:15882}},"432":{start:{line:1,column:15898},end:{line:1,column:15958}},"433":{start:{line:1,column:15966},end:{line:1,column:16008}},"434":{start:{line:1,column:16012},end:{line:1,column:16053}},"435":{start:{line:1,column:16069},end:{line:1,column:16721}},"436":{start:{line:1,column:16260},end:{line:1,column:16304}},"437":{start:{line:1,column:16713},end:{line:1,column:16716}},"438":{start:{line:1,column:16737},end:{line:1,column:16809}},"439":{start:{line:1,column:16817},end:{line:1,column:16824}},"440":{start:{line:1,column:16842},end:{line:1,column:16850}},"441":{start:{line:1,column:16856},end:{line:1,column:16875}},"442":{start:{line:1,column:16878},end:{line:1,column:16887}},"443":{start:{line:1,column:16888},end:{line:1,column:16942}},"444":{start:{line:1,column:16962},end:{line:1,column:16986}},"445":{start:{line:1,column:16994},end:{line:1,column:17601}},"446":{start:{line:1,column:17005},end:{line:1,column:17023}},"447":{start:{line:1,column:17040},end:{line:1,column:17059}},"448":{start:{line:1,column:17049},end:{line:1,column:17059}},"449":{start:{line:1,column:17065},end:{line:1,column:17090}},"450":{start:{line:1,column:17095},end:{line:1,column:17096}},"451":{start:{line:1,column:17097},end:{line:1,column:17224}},"452":{start:{line:1,column:17118},end:{line:1,column:17178}},"453":{start:{line:1,column:17179},end:{line:1,column:17223}},"454":{start:{line:1,column:17230},end:{line:1,column:17245}},"455":{start:{line:1,column:17248},end:{line:1,column:17300}},"456":{start:{line:1,column:17303},end:{line:1,column:17363}},"457":{start:{line:1,column:17364},end:{line:1,column:17423}},"458":{start:{line:1,column:17444},end:{line:1,column:17463}},"459":{start:{line:1,column:17453},end:{line:1,column:17463}},"460":{start:{line:1,column:17469},end:{line:1,column:17519}},"461":{start:{line:1,column:17520},end:{line:1,column:17599}},"462":{start:{line:1,column:17625},end:{line:1,column:17679}},"463":{start:{line:1,column:17680},end:{line:1,column:17743}},"464":{start:{line:1,column:17751},end:{line:1,column:17766}},"465":{start:{line:1,column:17782},end:{line:1,column:18958}},"466":{start:{line:1,column:17966},end:{line:1,column:17977}},"467":{start:{line:1,column:17995},end:{line:1,column:18002}},"468":{start:{line:1,column:18656},end:{line:1,column:18733}},"469":{start:{line:1,column:18748},end:{line:1,column:18798}},"470":{start:{line:1,column:18883},end:{line:1,column:18920}},"471":{start:{line:1,column:18935},end:{line:1,column:18956}},"472":{start:{line:1,column:18966},end:{line:1,column:18985}},"473":{start:{line:1,column:18989},end:{line:1,column:19008}},"474":{start:{line:1,column:19026},end:{line:1,column:19041}},"475":{start:{line:1,column:19032},end:{line:1,column:19041}},"476":{start:{line:1,column:19047},end:{line:1,column:19059}},"477":{start:{line:1,column:19060},end:{line:1,column:19138}},"478":{start:{line:1,column:19070},end:{line:1,column:19071}},"479":{start:{line:1,column:19074},end:{line:1,column:19082}},"480":{start:{line:1,column:19098},end:{line:1,column:19102}},"481":{start:{line:1,column:19103},end:{line:1,column:19137}},"482":{start:{line:1,column:19138},end:{line:1,column:19146}},"483":{start:{line:1,column:19166},end:{line:1,column:19220}},"484":{start:{line:1,column:19228},end:{line:1,column:20488}},"485":{start:{line:1,column:19251},end:{line:1,column:20119}},"486":{start:{line:1,column:19407},end:{line:1,column:19445}},"487":{start:{line:1,column:19702},end:{line:1,column:19723}},"488":{start:{line:1,column:19753},end:{line:1,column:19770}},"489":{start:{line:1,column:19794},end:{line:1,column:19805}},"490":{start:{line:1,column:20129},end:{line:1,column:20148}},"491":{start:{line:1,column:20156},end:{line:1,column:20173}},"492":{start:{line:1,column:20188},end:{line:1,column:20205}},"493":{start:{line:1,column:20220},end:{line:1,column:20237}},"494":{start:{line:1,column:20259},end:{line:1,column:20269}},"495":{start:{line:1,column:20272},end:{line:1,column:20282}},"496":{start:{line:1,column:20285},end:{line:1,column:20290}},"497":{start:{line:1,column:20291},end:{line:1,column:20455}},"498":{start:{line:1,column:20378},end:{line:1,column:20385}},"499":{start:{line:1,column:20388},end:{line:1,column:20392}},"500":{start:{line:1,column:20393},end:{line:1,column:20433}},"501":{start:{line:1,column:20442},end:{line:1,column:20451}},"502":{start:{line:1,column:20465},end:{line:1,column:20486}},"503":{start:{line:1,column:20478},end:{line:1,column:20485}},"504":{start:{line:1,column:20491},end:{line:1,column:20648}},"505":{start:{line:1,column:20514},end:{line:1,column:20533}},"506":{start:{line:1,column:20548},end:{line:1,column:20560}},"507":{start:{line:1,column:20664},end:{line:1,column:20775}},"508":{start:{line:1,column:20805},end:{line:1,column:20809}},"509":{start:{line:1,column:20810},end:{line:1,column:20874}},"510":{start:{line:1,column:20896},end:{line:1,column:20904}},"511":{start:{line:1,column:20910},end:{line:1,column:20927}},"512":{start:{line:1,column:20930},end:{line:1,column:20967}},"513":{start:{line:1,column:20968},end:{line:1,column:21043}},"514":{start:{line:1,column:21049},end:{line:1,column:21050}},"515":{start:{line:1,column:21053},end:{line:1,column:21061}},"516":{start:{line:1,column:21072},end:{line:1,column:21210}},"517":{start:{line:1,column:21088},end:{line:1,column:21210}},"518":{start:{line:1,column:21113},end:{line:1,column:21129}},"519":{start:{line:1,column:21134},end:{line:1,column:21210}},"520":{start:{line:1,column:21142},end:{line:1,column:21210}},"521":{start:{line:1,column:21169},end:{line:1,column:21210}},"522":{start:{line:1,column:21210},end:{line:1,column:21222}},"523":{start:{line:1,column:21228},end:{line:1,column:21238}},"524":{start:{line:1,column:21239},end:{line:1,column:21299}},"525":{start:{line:1,column:21254},end:{line:1,column:21285}},"526":{start:{line:1,column:21270},end:{line:1,column:21285}},"527":{start:{line:1,column:21285},end:{line:1,column:21298}},"528":{start:{line:1,column:21299},end:{line:1,column:21307}},"529":{start:{line:1,column:21333},end:{line:1,column:21358}},"530":{start:{line:1,column:21361},end:{line:1,column:21385}},"531":{start:{line:1,column:21386},end:{line:1,column:21416}},"532":{start:{line:1,column:21434},end:{line:1,column:21541}},"533":{start:{line:1,column:21563},end:{line:1,column:21579}},"534":{start:{line:1,column:21625},end:{line:1,column:21637}},"535":{start:{line:1,column:21640},end:{line:1,column:21650}},"536":{start:{line:1,column:21653},end:{line:1,column:21661}},"537":{start:{line:1,column:21664},end:{line:1,column:21673}},"538":{start:{line:1,column:21674},end:{line:1,column:21896}},"539":{start:{line:1,column:21784},end:{line:1,column:21889}},"540":{start:{line:1,column:21889},end:{line:1,column:21895}},"541":{start:{line:1,column:21896},end:{line:1,column:23465}},"542":{start:{line:1,column:21918},end:{line:1,column:23428}},"543":{start:{line:1,column:21950},end:{line:1,column:22010}},"544":{start:{line:1,column:22010},end:{line:1,column:22016}},"545":{start:{line:1,column:22031},end:{line:1,column:22193}},"546":{start:{line:1,column:22193},end:{line:1,column:22199}},"547":{start:{line:1,column:22217},end:{line:1,column:22438}},"548":{start:{line:1,column:22438},end:{line:1,column:22444}},"549":{start:{line:1,column:22455},end:{line:1,column:22519}},"550":{start:{line:1,column:22462},end:{line:1,column:22513}},"551":{start:{line:1,column:22513},end:{line:1,column:22518}},"552":{start:{line:1,column:22519},end:{line:1,column:22525}},"553":{start:{line:1,column:22539},end:{line:1,column:22705}},"554":{start:{line:1,column:22705},end:{line:1,column:22711}},"555":{start:{line:1,column:22726},end:{line:1,column:22732}},"556":{start:{line:1,column:22744},end:{line:1,column:22896}},"557":{start:{line:1,column:22896},end:{line:1,column:22902}},"558":{start:{line:1,column:22913},end:{line:1,column:23223}},"559":{start:{line:1,column:23223},end:{line:1,column:23229}},"560":{start:{line:1,column:23240},end:{line:1,column:23314}},"561":{start:{line:1,column:23314},end:{line:1,column:23320}},"562":{start:{line:1,column:23331},end:{line:1,column:23395}},"563":{start:{line:1,column:23395},end:{line:1,column:23401}},"564":{start:{line:1,column:23408},end:{line:1,column:23422}},"565":{start:{line:1,column:23422},end:{line:1,column:23427}},"566":{start:{line:1,column:23428},end:{line:1,column:23464}},"567":{start:{line:1,column:23485},end:{line:1,column:23563}},"568":{start:{line:1,column:23581},end:{line:1,column:23663}},"569":{start:{line:1,column:23679},end:{line:1,column:23690}},"570":{start:{line:1,column:23714},end:{line:1,column:23745}},"571":{start:{line:1,column:23720},end:{line:1,column:23745}},"572":{start:{line:1,column:23745},end:{line:1,column:23870}},"573":{start:{line:1,column:23768},end:{line:1,column:23779}},"574":{start:{line:1,column:23780},end:{line:1,column:23811}},"575":{start:{line:1,column:23817},end:{line:1,column:23870}},"576":{start:{line:1,column:23870},end:{line:1,column:23887}},"577":{start:{line:1,column:23909},end:{line:1,column:23940}},"578":{start:{line:1,column:23915},end:{line:1,column:23940}},"579":{start:{line:1,column:23940},end:{line:1,column:24028}},"580":{start:{line:1,column:24046},end:{line:1,column:24261}},"581":{start:{line:1,column:24285},end:{line:1,column:24599}},"582":{start:{line:1,column:24324},end:{line:1,column:24340}},"583":{start:{line:1,column:24343},end:{line:1,column:24368}},"584":{start:{line:1,column:24371},end:{line:1,column:24397}},"585":{start:{line:1,column:24400},end:{line:1,column:24427}},"586":{start:{line:1,column:24430},end:{line:1,column:24458}},"587":{start:{line:1,column:24461},end:{line:1,column:24486}},"588":{start:{line:1,column:24487},end:{line:1,column:24598}},"589":{start:{line:1,column:24623},end:{line:1,column:24634}},"590":{start:{line:1,column:24635},end:{line:1,column:24710}},"591":{start:{line:1,column:24745},end:{line:1,column:24755}},"592":{start:{line:1,column:24758},end:{line:1,column:24793}},"593":{start:{line:1,column:24798},end:{line:1,column:25084}},"594":{start:{line:1,column:24854},end:{line:1,column:25084}},"595":{start:{line:1,column:25084},end:{line:1,column:25095}},"596":{start:{line:1,column:25143},end:{line:1,column:25144}},"597":{start:{line:1,column:25145},end:{line:1,column:25485}},"598":{start:{line:1,column:25493},end:{line:1,column:25531}},"599":{start:{line:1,column:25535},end:{line:1,column:25606}},"600":{start:{line:1,column:25630},end:{line:1,column:25646}},"601":{start:{line:1,column:25647},end:{line:1,column:25683}},"602":{start:{line:1,column:25670},end:{line:1,column:25683}},"603":{start:{line:1,column:25683},end:{line:1,column:25743}},"604":{start:{line:1,column:25713},end:{line:1,column:25722}},"605":{start:{line:1,column:25730},end:{line:1,column:25737}},"606":{start:{line:1,column:25737},end:{line:1,column:25742}},"607":{start:{line:1,column:25743},end:{line:1,column:25753}},"608":{start:{line:1,column:25761},end:{line:1,column:25769}},"609":{start:{line:1,column:25764},end:{line:1,column:25769}},"610":{start:{line:1,column:25793},end:{line:1,column:25795}},"611":{start:{line:1,column:25798},end:{line:1,column:25802}},"612":{start:{line:1,column:25805},end:{line:1,column:25823}},"613":{start:{line:1,column:25826},end:{line:1,column:25865}},"614":{start:{line:1,column:25836},end:{line:1,column:25851}},"615":{start:{line:1,column:25855},end:{line:1,column:25859}},"616":{start:{line:1,column:25864},end:{line:1,column:25865}},"617":{start:{line:1,column:25866},end:{line:1,column:25895}},"618":{start:{line:1,column:25881},end:{line:1,column:25895}},"619":{start:{line:1,column:25895},end:{line:1,column:25903}},"620":{start:{line:1,column:25919},end:{line:1,column:25971}},"621":{start:{line:1,column:25987},end:{line:1,column:26049}},"622":{start:{line:1,column:26070},end:{line:1,column:26075}},"623":{start:{line:1,column:26076},end:{line:1,column:26131}},"624":{start:{line:1,column:26148},end:{line:1,column:26168}},"625":{start:{line:1,column:26174},end:{line:1,column:26190}},"626":{start:{line:1,column:26191},end:{line:1,column:26230}},"627":{start:{line:1,column:26236},end:{line:1,column:26254}},"628":{start:{line:1,column:26255},end:{line:1,column:26342}},"629":{start:{line:1,column:26348},end:{line:1,column:26476}},"630":{start:{line:1,column:26477},end:{line:1,column:26500}},"631":{start:{line:1,column:26528},end:{line:1,column:26530}},"632":{start:{line:1,column:26537},end:{line:1,column:26720}},"633":{start:{line:1,column:26564},end:{line:1,column:26720}},"634":{start:{line:1,column:26688},end:{line:1,column:26720}},"635":{start:{line:1,column:26757},end:{line:1,column:26758}},"636":{start:{line:1,column:26761},end:{line:1,column:26774}},"637":{start:{line:1,column:26777},end:{line:1,column:26798}},"638":{start:{line:1,column:26784},end:{line:1,column:26798}},"639":{start:{line:1,column:26799},end:{line:1,column:26839}},"640":{start:{line:1,column:26857},end:{line:1,column:26897}},"641":{start:{line:1,column:26929},end:{line:1,column:26933}},"642":{start:{line:1,column:26941},end:{line:1,column:26945}},"643":{start:{line:1,column:26946},end:{line:1,column:26982}},"644":{start:{line:1,column:26988},end:{line:1,column:27113}},"645":{start:{line:1,column:27094},end:{line:1,column:27112}},"646":{start:{line:1,column:27114},end:{line:1,column:27534}},"647":{start:{line:1,column:27154},end:{line:1,column:27205}},"648":{start:{line:1,column:27216},end:{line:1,column:27246}},"649":{start:{line:1,column:27234},end:{line:1,column:27245}},"650":{start:{line:1,column:27278},end:{line:1,column:27333}},"651":{start:{line:1,column:27352},end:{line:1,column:27387}},"652":{start:{line:1,column:27398},end:{line:1,column:27422}},"653":{start:{line:1,column:27435},end:{line:1,column:27447}},"654":{start:{line:1,column:27466},end:{line:1,column:27494}},"655":{start:{line:1,column:27495},end:{line:1,column:27531}},"656":{start:{line:1,column:27562},end:{line:1,column:27707}},"657":{start:{line:1,column:27659},end:{line:1,column:27670}},"658":{start:{line:1,column:27683},end:{line:1,column:27706}},"659":{start:{line:1,column:27708},end:{line:1,column:28143}},"660":{start:{line:1,column:27748},end:{line:1,column:27781}},"661":{start:{line:1,column:27794},end:{line:1,column:27822}},"662":{start:{line:1,column:27812},end:{line:1,column:27821}},"663":{start:{line:1,column:27854},end:{line:1,column:27977}},"664":{start:{line:1,column:27996},end:{line:1,column:28028}},"665":{start:{line:1,column:28039},end:{line:1,column:28062}},"666":{start:{line:1,column:28074},end:{line:1,column:28099}},"667":{start:{line:1,column:28112},end:{line:1,column:28140}},"668":{start:{line:1,column:28268},end:{line:1,column:28269}},"669":{start:{line:1,column:28270},end:{line:1,column:28365}},"670":{start:{line:1,column:28337},end:{line:1,column:28338}},"671":{start:{line:1,column:28363},end:{line:1,column:28364}},"672":{start:{line:1,column:28373},end:{line:1,column:28391}},"673":{start:{line:1,column:28380},end:{line:1,column:28391}},"674":{start:{line:1,column:28395},end:{line:1,column:28481}},"675":{start:{line:1,column:28402},end:{line:1,column:28481}},"676":{start:{line:1,column:28501},end:{line:1,column:28577}},"677":{start:{line:1,column:28565},end:{line:1,column:28577}},"678":{start:{line:1,column:28583},end:{line:1,column:28586}},"679":{start:{line:1,column:28587},end:{line:1,column:28602}},"680":{start:{line:1,column:28674},end:{line:1,column:28675}},"681":{start:{line:1,column:28678},end:{line:1,column:28682}},"682":{start:{line:1,column:28683},end:{line:1,column:28808}},"683":{start:{line:1,column:28876},end:{line:1,column:28877}},"684":{start:{line:1,column:28878},end:{line:1,column:28962}},"685":{start:{line:1,column:28890},end:{line:1,column:28962}},"686":{start:{line:1,column:28962},end:{line:1,column:28971}},"687":{start:{line:1,column:28977},end:{line:1,column:28986}},"688":{start:{line:1,column:28987},end:{line:1,column:29040}},"689":{start:{line:1,column:29114},end:{line:1,column:29115}},"690":{start:{line:1,column:29116},end:{line:1,column:29171}},"691":{start:{line:1,column:29144},end:{line:1,column:29171}},"692":{start:{line:1,column:29171},end:{line:1,column:29286}},"693":{start:{line:1,column:29189},end:{line:1,column:29190}},"694":{start:{line:1,column:29193},end:{line:1,column:29219}},"695":{start:{line:1,column:29213},end:{line:1,column:29218}},"696":{start:{line:1,column:29220},end:{line:1,column:29225}},"697":{start:{line:1,column:29225},end:{line:1,column:29285}},"698":{start:{line:1,column:29247},end:{line:1,column:29258}},"699":{start:{line:1,column:29259},end:{line:1,column:29284}},"700":{start:{line:1,column:29286},end:{line:1,column:29294}},"701":{start:{line:1,column:29314},end:{line:1,column:29335}},"702":{start:{line:1,column:29343},end:{line:1,column:29392}},"703":{start:{line:1,column:29350},end:{line:1,column:29392}},"704":{start:{line:1,column:29416},end:{line:1,column:29574}},"705":{start:{line:1,column:29438},end:{line:1,column:29445}},"706":{start:{line:1,column:29446},end:{line:1,column:29573}},"707":{start:{line:1,column:29452},end:{line:1,column:29461}},"708":{start:{line:1,column:29467},end:{line:1,column:29486}},"709":{start:{line:1,column:29487},end:{line:1,column:29525}},"710":{start:{line:1,column:29517},end:{line:1,column:29525}},"711":{start:{line:1,column:29531},end:{line:1,column:29573}},"712":{start:{line:1,column:29562},end:{line:1,column:29573}},"713":{start:{line:1,column:29574},end:{line:1,column:29582}},"714":{start:{line:1,column:29610},end:{line:1,column:29623}},"715":{start:{line:1,column:29626},end:{line:1,column:29645}},"716":{start:{line:1,column:29648},end:{line:1,column:29659}},"717":{start:{line:1,column:29662},end:{line:1,column:29669}},"718":{start:{line:1,column:29670},end:{line:1,column:29679}},"719":{start:{line:1,column:29685},end:{line:1,column:29701}},"720":{start:{line:1,column:29702},end:{line:1,column:29810}},"721":{start:{line:1,column:29800},end:{line:1,column:29809}},"722":{start:{line:1,column:29834},end:{line:1,column:29858}},"723":{start:{line:1,column:29842},end:{line:1,column:29858}},"724":{start:{line:1,column:29858},end:{line:1,column:29866}},"725":{start:{line:1,column:29892},end:{line:1,column:29906}},"726":{start:{line:1,column:29907},end:{line:1,column:29925}},"727":{start:{line:1,column:29931},end:{line:1,column:29935}},"728":{start:{line:1,column:29936},end:{line:1,column:29961}},"729":{start:{line:1,column:29989},end:{line:1,column:30064}},"730":{start:{line:1,column:30004},end:{line:1,column:30064}},"731":{start:{line:1,column:30036},end:{line:1,column:30064}},"732":{start:{line:1,column:30082},end:{line:1,column:30149}},"733":{start:{line:1,column:30098},end:{line:1,column:30113}},"734":{start:{line:1,column:30104},end:{line:1,column:30113}},"735":{start:{line:1,column:30119},end:{line:1,column:30123}},"736":{start:{line:1,column:30124},end:{line:1,column:30148}},"737":{start:{line:1,column:30140},end:{line:1,column:30148}},"738":{start:{line:1,column:30171},end:{line:1,column:30178}},"739":{start:{line:1,column:30179},end:{line:1,column:30216}},"740":{start:{line:1,column:30238},end:{line:1,column:30245}},"741":{start:{line:1,column:30246},end:{line:1,column:30328}},"742":{start:{line:1,column:30261},end:{line:1,column:30328}},"743":{start:{line:1,column:30299},end:{line:1,column:30317}},"744":{start:{line:1,column:30319},end:{line:1,column:30328}},"745":{start:{line:1,column:30328},end:{line:1,column:30348}},"746":{start:{line:1,column:30384},end:{line:1,column:30385}},"747":{start:{line:1,column:30398},end:{line:1,column:30411}},"748":{start:{line:1,column:30414},end:{line:1,column:30426}},"749":{start:{line:1,column:30435},end:{line:1,column:30496}},"750":{start:{line:1,column:30455},end:{line:1,column:30496}},"751":{start:{line:1,column:30496},end:{line:1,column:30504}},"752":{start:{line:1,column:30512},end:{line:1,column:30533}},"753":{start:{line:1,column:30537},end:{line:1,column:30572}},"754":{start:{line:1,column:30544},end:{line:1,column:30572}},"755":{start:{line:1,column:30576},end:{line:1,column:30594}},"756":{start:{line:1,column:30579},end:{line:1,column:30594}},"757":{start:{line:1,column:30622},end:{line:1,column:30632}},"758":{start:{line:1,column:30635},end:{line:1,column:30636}},"759":{start:{line:1,column:30639},end:{line:1,column:30649}},"760":{start:{line:1,column:30652},end:{line:1,column:30659}},"761":{start:{line:1,column:30662},end:{line:1,column:30669}},"762":{start:{line:1,column:30672},end:{line:1,column:30679}},"763":{start:{line:1,column:30682},end:{line:1,column:30689}},"764":{start:{line:1,column:30690},end:{line:1,column:30720}},"765":{start:{line:1,column:30726},end:{line:1,column:30729}},"766":{start:{line:1,column:30732},end:{line:1,column:30735}},"767":{start:{line:1,column:30736},end:{line:1,column:30833}},"768":{start:{line:1,column:30859},end:{line:1,column:30867}},"769":{start:{line:1,column:30880},end:{line:1,column:30887}},"770":{start:{line:1,column:30888},end:{line:1,column:31095}},"771":{start:{line:1,column:30898},end:{line:1,column:30899}},"772":{start:{line:1,column:30910},end:{line:1,column:31095}},"773":{start:{line:1,column:30940},end:{line:1,column:30981}},"774":{start:{line:1,column:30958},end:{line:1,column:30972}},"775":{start:{line:1,column:30972},end:{line:1,column:30980}},"776":{start:{line:1,column:30981},end:{line:1,column:31094}},"777":{start:{line:1,column:31125},end:{line:1,column:31130}},"778":{start:{line:1,column:31133},end:{line:1,column:31141}},"779":{start:{line:1,column:31150},end:{line:1,column:31157}},"780":{start:{line:1,column:31158},end:{line:1,column:31346}},"781":{start:{line:1,column:31168},end:{line:1,column:31169}},"782":{start:{line:1,column:31179},end:{line:1,column:31214}},"783":{start:{line:1,column:31205},end:{line:1,column:31214}},"784":{start:{line:1,column:31220},end:{line:1,column:31224}},"785":{start:{line:1,column:31227},end:{line:1,column:31231}},"786":{start:{line:1,column:31232},end:{line:1,column:31345}},"787":{start:{line:1,column:31374},end:{line:1,column:31379}},"788":{start:{line:1,column:31382},end:{line:1,column:31390}},"789":{start:{line:1,column:31393},end:{line:1,column:31409}},"790":{start:{line:1,column:31412},end:{line:1,column:31420}},"791":{start:{line:1,column:31429},end:{line:1,column:31436}},"792":{start:{line:1,column:31437},end:{line:1,column:31591}},"793":{start:{line:1,column:31453},end:{line:1,column:31591}},"794":{start:{line:1,column:31481},end:{line:1,column:31530}},"795":{start:{line:1,column:31493},end:{line:1,column:31502}},"796":{start:{line:1,column:31503},end:{line:1,column:31529}},"797":{start:{line:1,column:31530},end:{line:1,column:31590}},"798":{start:{line:1,column:31591},end:{line:1,column:31610}},"799":{start:{line:1,column:31630},end:{line:1,column:31662}},"800":{start:{line:1,column:31696},end:{line:1,column:31706}},"801":{start:{line:1,column:31707},end:{line:1,column:31917}},"802":{start:{line:1,column:31734},end:{line:1,column:31917}},"803":{start:{line:1,column:31953},end:{line:1,column:32230}},"804":{start:{line:1,column:31983},end:{line:1,column:31990}},"805":{start:{line:1,column:32031},end:{line:1,column:32039}},"806":{start:{line:1,column:32050},end:{line:1,column:32070}},"807":{start:{line:1,column:32071},end:{line:1,column:32229}},"808":{start:{line:1,column:32098},end:{line:1,column:32229}},"809":{start:{line:1,column:32230},end:{line:1,column:32256}},"810":{start:{line:1,column:32271},end:{line:1,column:32316}},"811":{start:{line:1,column:32338},end:{line:1,column:32350}},"812":{start:{line:1,column:32351},end:{line:1,column:32411}},"813":{start:{line:1,column:32437},end:{line:1,column:32534}},"814":{start:{line:1,column:32542},end:{line:1,column:32597}},"815":{start:{line:1,column:32545},end:{line:1,column:32597}},"816":{start:{line:1,column:32615},end:{line:1,column:32647}},"817":{start:{line:1,column:32655},end:{line:1,column:32686}},"818":{start:{line:1,column:32712},end:{line:1,column:32714}},"819":{start:{line:1,column:32715},end:{line:1,column:32728}},"820":{start:{line:1,column:32728},end:{line:1,column:32794}},"821":{start:{line:1,column:32738},end:{line:1,column:32739}},"822":{start:{line:1,column:32755},end:{line:1,column:32760}},"823":{start:{line:1,column:32761},end:{line:1,column:32793}},"824":{start:{line:1,column:32794},end:{line:1,column:32849}},"825":{start:{line:1,column:32857},end:{line:1,column:32897}},"826":{start:{line:1,column:32866},end:{line:1,column:32897}},"827":{start:{line:1,column:32921},end:{line:1,column:32930}},"828":{start:{line:1,column:32933},end:{line:1,column:32951}},"829":{start:{line:1,column:32974},end:{line:1,column:32975}},"830":{start:{line:1,column:32978},end:{line:1,column:32980}},"831":{start:{line:1,column:32985},end:{line:1,column:33092}},"832":{start:{line:1,column:33005},end:{line:1,column:33013}},"833":{start:{line:1,column:33024},end:{line:1,column:33049}},"834":{start:{line:1,column:33050},end:{line:1,column:33091}},"835":{start:{line:1,column:33092},end:{line:1,column:33113}},"836":{start:{line:1,column:33131},end:{line:1,column:33156}},"837":{start:{line:1,column:33147},end:{line:1,column:33156}},"838":{start:{line:1,column:33196},end:{line:1,column:33197}},"839":{start:{line:1,column:33200},end:{line:1,column:33205}},"840":{start:{line:1,column:33208},end:{line:1,column:33234}},"841":{start:{line:1,column:33237},end:{line:1,column:33252}},"842":{start:{line:1,column:33255},end:{line:1,column:33277}},"843":{start:{line:1,column:33294},end:{line:1,column:33301}},"844":{start:{line:1,column:33304},end:{line:1,column:33322}},"845":{start:{line:1,column:33325},end:{line:1,column:33341}},"846":{start:{line:1,column:33361},end:{line:1,column:33362}},"847":{start:{line:1,column:33363},end:{line:1,column:33481}},"848":{start:{line:1,column:33509},end:{line:1,column:33802}},"849":{start:{line:1,column:33542},end:{line:1,column:33550}},"850":{start:{line:1,column:33551},end:{line:1,column:33801}},"851":{start:{line:1,column:33557},end:{line:1,column:33590}},"852":{start:{line:1,column:33601},end:{line:1,column:33626}},"853":{start:{line:1,column:33629},end:{line:1,column:33634}},"854":{start:{line:1,column:33637},end:{line:1,column:33659}},"855":{start:{line:1,column:33662},end:{line:1,column:33677}},"856":{start:{line:1,column:33678},end:{line:1,column:33800}},"857":{start:{line:1,column:33802},end:{line:1,column:33857}},"858":{start:{line:1,column:33865},end:{line:1,column:33887}},"859":{start:{line:1,column:33868},end:{line:1,column:33887}},"860":{start:{line:1,column:33915},end:{line:1,column:33920}},"861":{start:{line:1,column:33923},end:{line:1,column:33937}},"862":{start:{line:1,column:33940},end:{line:1,column:33974}},"863":{start:{line:1,column:33977},end:{line:1,column:34013}},"864":{start:{line:1,column:34016},end:{line:1,column:34025}},"865":{start:{line:1,column:34045},end:{line:1,column:34046}},"866":{start:{line:1,column:34047},end:{line:1,column:34166}},"867":{start:{line:1,column:34085},end:{line:1,column:34107}},"868":{start:{line:1,column:34110},end:{line:1,column:34125}},"869":{start:{line:1,column:34126},end:{line:1,column:34165}},"870":{start:{line:1,column:34166},end:{line:1,column:34414}},"871":{start:{line:1,column:34440},end:{line:1,column:34444}},"872":{start:{line:1,column:34447},end:{line:1,column:34461}},"873":{start:{line:1,column:34464},end:{line:1,column:34477}},"874":{start:{line:1,column:34478},end:{line:1,column:34520}},"875":{start:{line:1,column:34526},end:{line:1,column:34534}},"876":{start:{line:1,column:34535},end:{line:1,column:34796}},"877":{start:{line:1,column:34804},end:{line:1,column:34975}},"878":{start:{line:1,column:34822},end:{line:1,column:34824}},"879":{start:{line:1,column:34825},end:{line:1,column:34963}},"880":{start:{line:1,column:34835},end:{line:1,column:34866}},"881":{start:{line:1,column:34850},end:{line:1,column:34864}},"882":{start:{line:1,column:34867},end:{line:1,column:34955}},"883":{start:{line:1,column:34963},end:{line:1,column:34971}},"884":{start:{line:1,column:34999},end:{line:1,column:35006}},"885":{start:{line:1,column:35009},end:{line:1,column:35040}},"886":{start:{line:1,column:35041},end:{line:1,column:35062}},"887":{start:{line:1,column:35084},end:{line:1,column:35127}},"888":{start:{line:1,column:35149},end:{line:1,column:35238}},"889":{start:{line:1,column:35266},end:{line:1,column:35285}},"890":{start:{line:1,column:35288},end:{line:1,column:35307}},"891":{start:{line:1,column:35310},end:{line:1,column:35319}},"892":{start:{line:1,column:35322},end:{line:1,column:35331}},"893":{start:{line:1,column:35334},end:{line:1,column:35343}},"894":{start:{line:1,column:35346},end:{line:1,column:35355}},"895":{start:{line:1,column:35358},end:{line:1,column:35367}},"896":{start:{line:1,column:35368},end:{line:1,column:35384}},"897":{start:{line:1,column:35392},end:{line:1,column:35566}},"898":{start:{line:1,column:35406},end:{line:1,column:35565}},"899":{start:{line:1,column:35418},end:{line:1,column:35432}},"900":{start:{line:1,column:35446},end:{line:1,column:35449}},"901":{start:{line:1,column:35464},end:{line:1,column:35512}},"902":{start:{line:1,column:35525},end:{line:1,column:35535}},"903":{start:{line:1,column:35553},end:{line:1,column:35563}},"904":{start:{line:1,column:35570},end:{line:1,column:35690}},"905":{start:{line:1,column:35581},end:{line:1,column:35689}},"906":{start:{line:1,column:35593},end:{line:1,column:35601}},"907":{start:{line:1,column:35630},end:{line:1,column:35638}},"908":{start:{line:1,column:35651},end:{line:1,column:35661}},"909":{start:{line:1,column:35679},end:{line:1,column:35687}},"910":{start:{line:1,column:35710},end:{line:1,column:35731}},"911":{start:{line:1,column:35757},end:{line:1,column:35933}},"912":{start:{line:1,column:35951},end:{line:1,column:36041}},"913":{start:{line:1,column:36057},end:{line:1,column:36158}},"914":{start:{line:1,column:36139},end:{line:1,column:36142}},"915":{start:{line:1,column:36156},end:{line:1,column:36157}},"916":{start:{line:1,column:36211},end:{line:1,column:36266}},"917":{start:{line:1,column:36316},end:{line:1,column:36317}},"918":{start:{line:1,column:36342},end:{line:1,column:36347}},"919":{start:{line:1,column:36350},end:{line:1,column:36358}},"920":{start:{line:1,column:36382},end:{line:1,column:36383}},"921":{start:{line:1,column:36388},end:{line:1,column:36463}},"922":{start:{line:1,column:36394},end:{line:1,column:36453}},"923":{start:{line:1,column:36445},end:{line:1,column:36453}},"924":{start:{line:1,column:36453},end:{line:1,column:36462}},"925":{start:{line:1,column:36463},end:{line:1,column:36518}},"926":{start:{line:1,column:36538},end:{line:1,column:36554}},"927":{start:{line:1,column:36544},end:{line:1,column:36554}},"928":{start:{line:1,column:36584},end:{line:1,column:36585}},"929":{start:{line:1,column:36588},end:{line:1,column:36596}},"930":{start:{line:1,column:36631},end:{line:1,column:36636}},"931":{start:{line:1,column:36668},end:{line:1,column:36677}},"932":{start:{line:1,column:36680},end:{line:1,column:36682}},"933":{start:{line:1,column:36685},end:{line:1,column:36687}},"934":{start:{line:1,column:36690},end:{line:1,column:36694}},"935":{start:{line:1,column:36703},end:{line:1,column:36727}},"936":{start:{line:1,column:36707},end:{line:1,column:36727}},"937":{start:{line:1,column:36730},end:{line:1,column:36754}},"938":{start:{line:1,column:36734},end:{line:1,column:36754}},"939":{start:{line:1,column:36757},end:{line:1,column:36767}},"940":{start:{line:1,column:36761},end:{line:1,column:36767}},"941":{start:{line:1,column:36770},end:{line:1,column:36781}},"942":{start:{line:1,column:36774},end:{line:1,column:36781}},"943":{start:{line:1,column:36782},end:{line:1,column:36974}},"944":{start:{line:1,column:36792},end:{line:1,column:36793}},"945":{start:{line:1,column:36796},end:{line:1,column:36797}},"946":{start:{line:1,column:36807},end:{line:1,column:36974}},"947":{start:{line:1,column:36974},end:{line:1,column:37043}},"948":{start:{line:1,column:37067},end:{line:1,column:37069}},"949":{start:{line:1,column:37072},end:{line:1,column:37082}},"950":{start:{line:1,column:37083},end:{line:1,column:37160}},"951":{start:{line:1,column:37093},end:{line:1,column:37094}},"952":{start:{line:1,column:37117},end:{line:1,column:37136}},"953":{start:{line:1,column:37137},end:{line:1,column:37159}},"954":{start:{line:1,column:37160},end:{line:1,column:37168}},"955":{start:{line:1,column:37196},end:{line:1,column:37197}},"956":{start:{line:1,column:37200},end:{line:1,column:37203}},"957":{start:{line:1,column:37204},end:{line:1,column:37239}},"958":{start:{line:1,column:37213},end:{line:1,column:37239}},"959":{start:{line:1,column:37235},end:{line:1,column:37239}},"960":{start:{line:1,column:37239},end:{line:1,column:37264}},"961":{start:{line:1,column:37260},end:{line:1,column:37264}},"962":{start:{line:1,column:37264},end:{line:1,column:37305}},"963":{start:{line:1,column:37301},end:{line:1,column:37305}},"964":{start:{line:1,column:37305},end:{line:1,column:37332}},"965":{start:{line:1,column:37360},end:{line:1,column:37368}},"966":{start:{line:1,column:37371},end:{line:1,column:37373}},"967":{start:{line:1,column:37376},end:{line:1,column:37377}},"968":{start:{line:1,column:37380},end:{line:1,column:37384}},"969":{start:{line:1,column:37387},end:{line:1,column:37531}},"970":{start:{line:1,column:37413},end:{line:1,column:37419}},"971":{start:{line:1,column:37420},end:{line:1,column:37530}},"972":{start:{line:1,column:37531},end:{line:1,column:37584}},"973":{start:{line:1,column:37608},end:{line:1,column:37616}},"974":{start:{line:1,column:37619},end:{line:1,column:37637}},"975":{start:{line:1,column:37640},end:{line:1,column:37648}},"976":{start:{line:1,column:37649},end:{line:1,column:37664}},"977":{start:{line:1,column:37655},end:{line:1,column:37664}},"978":{start:{line:1,column:37670},end:{line:1,column:37679}},"979":{start:{line:1,column:37696},end:{line:1,column:37707}},"980":{start:{line:1,column:37708},end:{line:1,column:37760}},"981":{start:{line:1,column:37718},end:{line:1,column:37760}},"982":{start:{line:1,column:37766},end:{line:1,column:37775}},"983":{start:{line:1,column:37778},end:{line:1,column:37807}},"984":{start:{line:1,column:37808},end:{line:1,column:37836}},"985":{start:{line:1,column:37858},end:{line:1,column:37899}},"986":{start:{line:1,column:37927},end:{line:1,column:37948}},"987":{start:{line:1,column:37951},end:{line:1,column:37964}},"988":{start:{line:1,column:38004},end:{line:1,column:38005}},"989":{start:{line:1,column:38008},end:{line:1,column:38016}},"990":{start:{line:1,column:38019},end:{line:1,column:38021}},"991":{start:{line:1,column:38024},end:{line:1,column:38025}},"992":{start:{line:1,column:38028},end:{line:1,column:38038}},"993":{start:{line:1,column:38041},end:{line:1,column:38042}},"994":{start:{line:1,column:38069},end:{line:1,column:38075}},"995":{start:{line:1,column:38076},end:{line:1,column:38202}},"996":{start:{line:1,column:38086},end:{line:1,column:38113}},"997":{start:{line:1,column:38108},end:{line:1,column:38113}},"998":{start:{line:1,column:38113},end:{line:1,column:38136}},"999":{start:{line:1,column:38131},end:{line:1,column:38136}},"1000":{start:{line:1,column:38136},end:{line:1,column:38201}},"1001":{start:{line:1,column:38203},end:{line:1,column:38449}},"1002":{start:{line:1,column:38219},end:{line:1,column:38233}},"1003":{start:{line:1,column:38239},end:{line:1,column:38245}},"1004":{start:{line:1,column:38248},end:{line:1,column:38424}},"1005":{start:{line:1,column:38278},end:{line:1,column:38284}},"1006":{start:{line:1,column:38285},end:{line:1,column:38423}},"1007":{start:{line:1,column:38424},end:{line:1,column:38448}},"1008":{start:{line:1,column:38449},end:{line:1,column:38457}},"1009":{start:{line:1,column:38473},end:{line:1,column:38692}},"1010":{start:{line:1,column:38710},end:{line:1,column:38725}},"1011":{start:{line:1,column:38716},end:{line:1,column:38725}},"1012":{start:{line:1,column:38731},end:{line:1,column:38733}},"1013":{start:{line:1,column:38736},end:{line:1,column:38805}},"1014":{start:{line:1,column:38750},end:{line:1,column:38804}},"1015":{start:{line:1,column:38806},end:{line:1,column:38854}},"1016":{start:{line:1,column:38874},end:{line:1,column:38905}},"1017":{start:{line:1,column:38946},end:{line:1,column:38947}},"1018":{start:{line:1,column:38948},end:{line:1,column:39047}},"1019":{start:{line:1,column:39071},end:{line:1,column:39078}},"1020":{start:{line:1,column:39079},end:{line:1,column:39102}},"1021":{start:{line:1,column:39093},end:{line:1,column:39102}},"1022":{start:{line:1,column:39108},end:{line:1,column:39125}},"1023":{start:{line:1,column:39126},end:{line:1,column:39352}},"1024":{start:{line:1,column:39360},end:{line:1,column:40930}},"1025":{start:{line:1,column:39380},end:{line:1,column:39458}},"1026":{start:{line:1,column:39482},end:{line:1,column:39496}},"1027":{start:{line:1,column:39499},end:{line:1,column:39509}},"1028":{start:{line:1,column:39510},end:{line:1,column:39599}},"1029":{start:{line:1,column:39523},end:{line:1,column:39598}},"1030":{start:{line:1,column:39611},end:{line:1,column:39745}},"1031":{start:{line:1,column:39678},end:{line:1,column:39742}},"1032":{start:{line:1,column:39774},end:{line:1,column:39775}},"1033":{start:{line:1,column:39776},end:{line:1,column:40167}},"1034":{start:{line:1,column:39805},end:{line:1,column:39843}},"1035":{start:{line:1,column:39836},end:{line:1,column:39843}},"1036":{start:{line:1,column:39849},end:{line:1,column:39856}},"1037":{start:{line:1,column:39859},end:{line:1,column:39869}},"1038":{start:{line:1,column:39872},end:{line:1,column:39874}},"1039":{start:{line:1,column:39877},end:{line:1,column:39997}},"1040":{start:{line:1,column:39891},end:{line:1,column:39997}},"1041":{start:{line:1,column:39997},end:{line:1,column:40122}},"1042":{start:{line:1,column:40187},end:{line:1,column:40199}},"1043":{start:{line:1,column:40202},end:{line:1,column:40210}},"1044":{start:{line:1,column:40211},end:{line:1,column:40306}},"1045":{start:{line:1,column:40321},end:{line:1,column:40359}},"1046":{start:{line:1,column:40369},end:{line:1,column:40418}},"1047":{start:{line:1,column:40426},end:{line:1,column:40465}},"1048":{start:{line:1,column:40481},end:{line:1,column:40500}},"1049":{start:{line:1,column:40501},end:{line:1,column:40613}},"1050":{start:{line:1,column:40570},end:{line:1,column:40593}},"1051":{start:{line:1,column:40625},end:{line:1,column:40652}},"1052":{start:{line:1,column:40643},end:{line:1,column:40652}},"1053":{start:{line:1,column:40658},end:{line:1,column:40677}},"1054":{start:{line:1,column:40678},end:{line:1,column:40718}},"1055":{start:{line:1,column:40733},end:{line:1,column:40752}},"1056":{start:{line:1,column:40753},end:{line:1,column:40783}},"1057":{start:{line:1,column:40776},end:{line:1,column:40783}},"1058":{start:{line:1,column:40789},end:{line:1,column:40796}},"1059":{start:{line:1,column:40799},end:{line:1,column:40809}},"1060":{start:{line:1,column:40810},end:{line:1,column:40838}},"1061":{start:{line:1,column:40824},end:{line:1,column:40838}},"1062":{start:{line:1,column:40838},end:{line:1,column:40888}},"1063":{start:{line:1,column:40899},end:{line:1,column:40928}},"1064":{start:{line:1,column:40934},end:{line:1,column:40940}},"1065":{start:{line:1,column:40944},end:{line:1,column:40957}},"1066":{start:{line:1,column:40961},end:{line:1,column:41120}},"1067":{start:{line:1,column:40977},end:{line:1,column:40992}},"1068":{start:{line:1,column:41013},end:{line:1,column:41022}},"1069":{start:{line:1,column:41025},end:{line:1,column:41043}},"1070":{start:{line:1,column:41044},end:{line:1,column:41086}},"1071":{start:{line:1,column:41102},end:{line:1,column:41118}},"1072":{start:{line:1,column:41124},end:{line:1,column:42378}},"1073":{start:{line:1,column:41157},end:{line:1,column:41161}},"1074":{start:{line:1,column:41162},end:{line:1,column:41186}},"1075":{start:{line:1,column:41192},end:{line:1,column:41208}},"1076":{start:{line:1,column:41209},end:{line:1,column:41489}},"1077":{start:{line:1,column:41499},end:{line:1,column:41518}},"1078":{start:{line:1,column:41533},end:{line:1,column:41791}},"1079":{start:{line:1,column:41550},end:{line:1,column:41567}},"1080":{start:{line:1,column:41573},end:{line:1,column:41597}},"1081":{start:{line:1,column:41600},end:{line:1,column:41613}},"1082":{start:{line:1,column:41616},end:{line:1,column:41632}},"1083":{start:{line:1,column:41633},end:{line:1,column:41790}},"1084":{start:{line:1,column:41801},end:{line:1,column:41871}},"1085":{start:{line:1,column:41886},end:{line:1,column:41899}},"1086":{start:{line:1,column:41902},end:{line:1,column:41916}},"1087":{start:{line:1,column:41919},end:{line:1,column:41929}},"1088":{start:{line:1,column:41932},end:{line:1,column:41942}},"1089":{start:{line:1,column:41945},end:{line:1,column:41955}},"1090":{start:{line:1,column:41958},end:{line:1,column:41966}},"1091":{start:{line:1,column:41969},end:{line:1,column:42058}},"1092":{start:{line:1,column:42016},end:{line:1,column:42051}},"1093":{start:{line:1,column:42051},end:{line:1,column:42057}},"1094":{start:{line:1,column:42058},end:{line:1,column:42091}},"1095":{start:{line:1,column:42066},end:{line:1,column:42084}},"1096":{start:{line:1,column:42084},end:{line:1,column:42090}},"1097":{start:{line:1,column:42091},end:{line:1,column:42187}},"1098":{start:{line:1,column:42201},end:{line:1,column:42236}},"1099":{start:{line:1,column:42237},end:{line:1,column:42287}},"1100":{start:{line:1,column:42264},end:{line:1,column:42285}},"1101":{start:{line:1,column:42305},end:{line:1,column:42318}},"1102":{start:{line:1,column:42321},end:{line:1,column:42339}},"1103":{start:{line:1,column:42340},end:{line:1,column:42376}},"1104":{start:{line:1,column:42350},end:{line:1,column:42351}},"1105":{start:{line:1,column:42367},end:{line:1,column:42376}},"1106":{start:{line:1,column:42382},end:{line:1,column:43472}},"1107":{start:{line:1,column:42405},end:{line:1,column:42461}},"1108":{start:{line:1,column:42475},end:{line:1,column:42491}},"1109":{start:{line:1,column:42484},end:{line:1,column:42491}},"1110":{start:{line:1,column:42497},end:{line:1,column:42521}},"1111":{start:{line:1,column:42524},end:{line:1,column:42540}},"1112":{start:{line:1,column:42541},end:{line:1,column:42727}},"1113":{start:{line:1,column:42589},end:{line:1,column:42593}},"1114":{start:{line:1,column:42594},end:{line:1,column:42610}},"1115":{start:{line:1,column:42603},end:{line:1,column:42610}},"1116":{start:{line:1,column:42616},end:{line:1,column:42618}},"1117":{start:{line:1,column:42619},end:{line:1,column:42644}},"1118":{start:{line:1,column:42634},end:{line:1,column:42644}},"1119":{start:{line:1,column:42644},end:{line:1,column:42725}},"1120":{start:{line:1,column:42693},end:{line:1,column:42723}},"1121":{start:{line:1,column:42755},end:{line:1,column:42764}},"1122":{start:{line:1,column:42767},end:{line:1,column:42774}},"1123":{start:{line:1,column:42775},end:{line:1,column:42790}},"1124":{start:{line:1,column:42781},end:{line:1,column:42790}},"1125":{start:{line:1,column:42796},end:{line:1,column:42823}},"1126":{start:{line:1,column:42824},end:{line:1,column:42902}},"1127":{start:{line:1,column:42880},end:{line:1,column:42891}},"1128":{start:{line:1,column:42932},end:{line:1,column:42948}},"1129":{start:{line:1,column:42951},end:{line:1,column:42953}},"1130":{start:{line:1,column:42956},end:{line:1,column:42989}},"1131":{start:{line:1,column:42992},end:{line:1,column:43006}},"1132":{start:{line:1,column:43009},end:{line:1,column:43019}},"1133":{start:{line:1,column:43022},end:{line:1,column:43316}},"1134":{start:{line:1,column:43055},end:{line:1,column:43059}},"1135":{start:{line:1,column:43060},end:{line:1,column:43090}},"1136":{start:{line:1,column:43081},end:{line:1,column:43090}},"1137":{start:{line:1,column:43090},end:{line:1,column:43154}},"1138":{start:{line:1,column:43108},end:{line:1,column:43145}},"1139":{start:{line:1,column:43145},end:{line:1,column:43153}},"1140":{start:{line:1,column:43160},end:{line:1,column:43164}},"1141":{start:{line:1,column:43167},end:{line:1,column:43171}},"1142":{start:{line:1,column:43174},end:{line:1,column:43182}},"1143":{start:{line:1,column:43183},end:{line:1,column:43247}},"1144":{start:{line:1,column:43188},end:{line:1,column:43247}},"1145":{start:{line:1,column:43206},end:{line:1,column:43222}},"1146":{start:{line:1,column:43222},end:{line:1,column:43230}},"1147":{start:{line:1,column:43236},end:{line:1,column:43247}},"1148":{start:{line:1,column:43247},end:{line:1,column:43283}},"1149":{start:{line:1,column:43267},end:{line:1,column:43274}},"1150":{start:{line:1,column:43274},end:{line:1,column:43282}},"1151":{start:{line:1,column:43283},end:{line:1,column:43315}},"1152":{start:{line:1,column:43316},end:{line:1,column:43324}},"1153":{start:{line:1,column:43337},end:{line:1,column:43393}},"1154":{start:{line:1,column:43367},end:{line:1,column:43386}},"1155":{start:{line:1,column:43386},end:{line:1,column:43392}},"1156":{start:{line:1,column:43399},end:{line:1,column:43426}},"1157":{start:{line:1,column:43427},end:{line:1,column:43470}},"1158":{start:{line:1,column:43439},end:{line:1,column:43470}},"1159":{start:{line:1,column:43496},end:{line:1,column:43498}},"1160":{start:{line:1,column:43501},end:{line:1,column:43515}},"1161":{start:{line:1,column:43516},end:{line:1,column:43590}},"1162":{start:{line:1,column:43526},end:{line:1,column:43527}},"1163":{start:{line:1,column:43550},end:{line:1,column:43557}},"1164":{start:{line:1,column:43558},end:{line:1,column:43589}},"1165":{start:{line:1,column:43590},end:{line:1,column:43611}},"1166":{start:{line:1,column:43629},end:{line:1,column:43642}},"1167":{start:{line:1,column:43635},end:{line:1,column:43642}},"1168":{start:{line:1,column:43648},end:{line:1,column:43657}},"1169":{start:{line:1,column:43658},end:{line:1,column:43684}},"1170":{start:{line:1,column:43665},end:{line:1,column:43677}},"1171":{start:{line:1,column:43677},end:{line:1,column:43683}},"1172":{start:{line:1,column:43684},end:{line:1,column:43765}},"1173":{start:{line:1,column:43789},end:{line:1,column:43805}},"1174":{start:{line:1,column:43808},end:{line:1,column:43817}},"1175":{start:{line:1,column:43820},end:{line:1,column:43838}},"1176":{start:{line:1,column:43841},end:{line:1,column:43859}},"1177":{start:{line:1,column:43860},end:{line:1,column:43889}},"1178":{start:{line:1,column:43909},end:{line:1,column:43928}},"1179":{start:{line:1,column:43919},end:{line:1,column:43928}},"1180":{start:{line:1,column:43934},end:{line:1,column:43941}},"1181":{start:{line:1,column:43944},end:{line:1,column:43951}},"1182":{start:{line:1,column:43952},end:{line:1,column:44009}},"1183":{start:{line:1,column:44037},end:{line:1,column:44146}},"1184":{start:{line:1,column:44170},end:{line:1,column:44172}},"1185":{start:{line:1,column:44175},end:{line:1,column:44202}},"1186":{start:{line:1,column:44207},end:{line:1,column:44253}},"1187":{start:{line:1,column:44234},end:{line:1,column:44253}},"1188":{start:{line:1,column:44253},end:{line:1,column:44261}},"1189":{start:{line:1,column:44292},end:{line:1,column:44298}},"1190":{start:{line:1,column:44301},end:{line:1,column:44318}},"1191":{start:{line:1,column:44327},end:{line:1,column:44346}},"1192":{start:{line:1,column:44339},end:{line:1,column:44346}},"1193":{start:{line:1,column:44352},end:{line:1,column:44354}},"1194":{start:{line:1,column:44355},end:{line:1,column:44484}},"1195":{start:{line:1,column:44383},end:{line:1,column:44430}},"1196":{start:{line:1,column:44401},end:{line:1,column:44424}},"1197":{start:{line:1,column:44415},end:{line:1,column:44424}},"1198":{start:{line:1,column:44424},end:{line:1,column:44429}},"1199":{start:{line:1,column:44430},end:{line:1,column:44483}},"1200":{start:{line:1,column:44484},end:{line:1,column:44504}},"1201":{start:{line:1,column:44545},end:{line:1,column:44546}},"1202":{start:{line:1,column:44549},end:{line:1,column:44569}},"1203":{start:{line:1,column:44572},end:{line:1,column:44592}},"1204":{start:{line:1,column:44595},end:{line:1,column:44609}},"1205":{start:{line:1,column:44612},end:{line:1,column:44631}},"1206":{start:{line:1,column:44638},end:{line:1,column:44694}},"1207":{start:{line:1,column:44665},end:{line:1,column:44694}},"1208":{start:{line:1,column:44694},end:{line:1,column:44702}},"1209":{start:{line:1,column:44726},end:{line:1,column:44746}},"1210":{start:{line:1,column:44747},end:{line:1,column:44785}},"1211":{start:{line:1,column:44805},end:{line:1,column:44847}},"1212":{start:{line:1,column:44906},end:{line:1,column:44923}},"1213":{start:{line:1,column:44924},end:{line:1,column:44997}},"1214":{start:{line:1,column:45023},end:{line:1,column:45038}},"1215":{start:{line:1,column:45039},end:{line:1,column:45061}},"1216":{start:{line:1,column:45083},end:{line:1,column:45187}},"1217":{start:{line:1,column:45142},end:{line:1,column:45152}},"1218":{start:{line:1,column:45153},end:{line:1,column:45186}},"1219":{start:{line:1,column:45172},end:{line:1,column:45186}},"1220":{start:{line:1,column:45187},end:{line:1,column:45198}},"1221":{start:{line:1,column:45243},end:{line:1,column:45244}},"1222":{start:{line:1,column:45247},end:{line:1,column:45272}},"1223":{start:{line:1,column:45301},end:{line:1,column:45302}},"1224":{start:{line:1,column:45305},end:{line:1,column:45311}},"1225":{start:{line:1,column:45314},end:{line:1,column:45320}},"1226":{start:{line:1,column:45323},end:{line:1,column:45332}},"1227":{start:{line:1,column:45335},end:{line:1,column:45343}},"1228":{start:{line:1,column:45346},end:{line:1,column:45550}},"1229":{start:{line:1,column:45356},end:{line:1,column:45357}},"1230":{start:{line:1,column:45373},end:{line:1,column:45377}},"1231":{start:{line:1,column:45392},end:{line:1,column:45393}},"1232":{start:{line:1,column:45396},end:{line:1,column:45421}},"1233":{start:{line:1,column:45422},end:{line:1,column:45499}},"1234":{start:{line:1,column:45505},end:{line:1,column:45542}},"1235":{start:{line:1,column:45543},end:{line:1,column:45549}},"1236":{start:{line:1,column:45574},end:{line:1,column:45582}},"1237":{start:{line:1,column:45583},end:{line:1,column:45637}},"1238":{start:{line:1,column:45615},end:{line:1,column:45628}},"1239":{start:{line:1,column:45655},end:{line:1,column:45747}},"1240":{start:{line:1,column:45767},end:{line:1,column:45873}},"1241":{start:{line:1,column:45897},end:{line:1,column:45915}},"1242":{start:{line:1,column:45918},end:{line:1,column:45941}},"1243":{start:{line:1,column:45942},end:{line:1,column:46147}},"1244":{start:{line:1,column:45948},end:{line:1,column:45963}},"1245":{start:{line:1,column:45963},end:{line:1,column:46146}},"1246":{start:{line:1,column:45985},end:{line:1,column:45994}},"1247":{start:{line:1,column:45995},end:{line:1,column:46041}},"1248":{start:{line:1,column:46034},end:{line:1,column:46041}},"1249":{start:{line:1,column:46041},end:{line:1,column:46145}},"1250":{start:{line:1,column:46155},end:{line:1,column:46181}},"1251":{start:{line:1,column:46158},end:{line:1,column:46181}},"1252":{start:{line:1,column:46185},end:{line:1,column:46215}},"1253":{start:{line:1,column:46192},end:{line:1,column:46215}},"1254":{start:{line:1,column:46219},end:{line:1,column:46281}},"1255":{start:{line:1,column:46228},end:{line:1,column:46281}},"1256":{start:{line:1,column:46285},end:{line:1,column:55456}},"1257":{start:{line:1,column:46315},end:{line:1,column:46317}},"1258":{start:{line:1,column:46344},end:{line:1,column:46348}},"1259":{start:{line:1,column:46372},end:{line:1,column:46376}},"1260":{start:{line:1,column:46394},end:{line:1,column:46890}},"1261":{start:{line:1,column:46910},end:{line:1,column:46926}},"1262":{start:{line:1,column:46927},end:{line:1,column:47243}},"1263":{start:{line:1,column:47259},end:{line:1,column:47308}},"1264":{start:{line:1,column:47328},end:{line:1,column:47338}},"1265":{start:{line:1,column:47341},end:{line:1,column:47357}},"1266":{start:{line:1,column:47360},end:{line:1,column:47377}},"1267":{start:{line:1,column:47380},end:{line:1,column:47412}},"1268":{start:{line:1,column:47391},end:{line:1,column:47412}},"1269":{start:{line:1,column:47415},end:{line:1,column:47447}},"1270":{start:{line:1,column:47450},end:{line:1,column:47482}},"1271":{start:{line:1,column:47485},end:{line:1,column:47517}},"1272":{start:{line:1,column:47520},end:{line:1,column:47531}},"1273":{start:{line:1,column:47534},end:{line:1,column:47554}},"1274":{start:{line:1,column:47557},end:{line:1,column:47577}},"1275":{start:{line:1,column:47578},end:{line:1,column:47732}},"1276":{start:{line:1,column:47746},end:{line:1,column:47789}},"1277":{start:{line:1,column:47800},end:{line:1,column:47844}},"1278":{start:{line:1,column:47862},end:{line:1,column:47889}},"1279":{start:{line:1,column:47914},end:{line:1,column:47930}},"1280":{start:{line:1,column:47931},end:{line:1,column:47968}},"1281":{start:{line:1,column:47977},end:{line:1,column:47998}},"1282":{start:{line:1,column:48016},end:{line:1,column:48032}},"1283":{start:{line:1,column:48033},end:{line:1,column:48082}},"1284":{start:{line:1,column:48102},end:{line:1,column:48119}},"1285":{start:{line:1,column:48122},end:{line:1,column:48141}},"1286":{start:{line:1,column:48144},end:{line:1,column:48154}},"1287":{start:{line:1,column:48155},end:{line:1,column:48349}},"1288":{start:{line:1,column:48170},end:{line:1,column:48186}},"1289":{start:{line:1,column:48187},end:{line:1,column:48205}},"1290":{start:{line:1,column:48211},end:{line:1,column:48349}},"1291":{start:{line:1,column:48221},end:{line:1,column:48280}},"1292":{start:{line:1,column:48227},end:{line:1,column:48238}},"1293":{start:{line:1,column:48244},end:{line:1,column:48260}},"1294":{start:{line:1,column:48261},end:{line:1,column:48279}},"1295":{start:{line:1,column:48280},end:{line:1,column:48348}},"1296":{start:{line:1,column:48370},end:{line:1,column:48386}},"1297":{start:{line:1,column:48387},end:{line:1,column:48469}},"1298":{start:{line:1,column:48501},end:{line:1,column:48517}},"1299":{start:{line:1,column:48520},end:{line:1,column:48537}},"1300":{start:{line:1,column:48540},end:{line:1,column:48542}},"1301":{start:{line:1,column:48543},end:{line:1,column:48561}},"1302":{start:{line:1,column:48567},end:{line:1,column:48577}},"1303":{start:{line:1,column:48578},end:{line:1,column:48743}},"1304":{start:{line:1,column:48762},end:{line:1,column:48779}},"1305":{start:{line:1,column:48782},end:{line:1,column:48812}},"1306":{start:{line:1,column:48815},end:{line:1,column:48856}},"1307":{start:{line:1,column:48857},end:{line:1,column:48966}},"1308":{start:{line:1,column:49005},end:{line:1,column:49009}},"1309":{start:{line:1,column:49032},end:{line:1,column:49033}},"1310":{start:{line:1,column:49036},end:{line:1,column:49042}},"1311":{start:{line:1,column:49045},end:{line:1,column:49077}},"1312":{start:{line:1,column:49080},end:{line:1,column:49099}},"1313":{start:{line:1,column:49106},end:{line:1,column:49383}},"1314":{start:{line:1,column:49128},end:{line:1,column:49157}},"1315":{start:{line:1,column:49162},end:{line:1,column:49276}},"1316":{start:{line:1,column:49282},end:{line:1,column:49311}},"1317":{start:{line:1,column:49286},end:{line:1,column:49311}},"1318":{start:{line:1,column:49312},end:{line:1,column:49371}},"1319":{start:{line:1,column:49328},end:{line:1,column:49371}},"1320":{start:{line:1,column:49371},end:{line:1,column:49382}},"1321":{start:{line:1,column:49383},end:{line:1,column:49396}},"1322":{start:{line:1,column:49448},end:{line:1,column:49449}},"1323":{start:{line:1,column:49452},end:{line:1,column:49458}},"1324":{start:{line:1,column:49461},end:{line:1,column:49467}},"1325":{start:{line:1,column:49470},end:{line:1,column:49483}},"1326":{start:{line:1,column:49486},end:{line:1,column:49491}},"1327":{start:{line:1,column:49494},end:{line:1,column:49506}},"1328":{start:{line:1,column:49513},end:{line:1,column:49589}},"1329":{start:{line:1,column:49533},end:{line:1,column:49589}},"1330":{start:{line:1,column:49589},end:{line:1,column:49597}},"1331":{start:{line:1,column:49645},end:{line:1,column:49646}},"1332":{start:{line:1,column:49649},end:{line:1,column:49661}},"1333":{start:{line:1,column:49670},end:{line:1,column:49746}},"1334":{start:{line:1,column:49690},end:{line:1,column:49746}},"1335":{start:{line:1,column:49746},end:{line:1,column:49754}},"1336":{start:{line:1,column:49803},end:{line:1,column:49804}},"1337":{start:{line:1,column:49837},end:{line:1,column:49850}},"1338":{start:{line:1,column:49853},end:{line:1,column:49865}},"1339":{start:{line:1,column:49874},end:{line:1,column:49956}},"1340":{start:{line:1,column:49894},end:{line:1,column:49956}},"1341":{start:{line:1,column:49956},end:{line:1,column:49964}},"1342":{start:{line:1,column:49978},end:{line:1,column:50012}},"1343":{start:{line:1,column:50031},end:{line:1,column:50062}},"1344":{start:{line:1,column:50087},end:{line:1,column:50097}},"1345":{start:{line:1,column:50100},end:{line:1,column:50116}},"1346":{start:{line:1,column:50119},end:{line:1,column:50128}},"1347":{start:{line:1,column:50131},end:{line:1,column:50185}},"1348":{start:{line:1,column:50186},end:{line:1,column:50217}},"1349":{start:{line:1,column:50255},end:{line:1,column:50264}},"1350":{start:{line:1,column:50267},end:{line:1,column:50281}},"1351":{start:{line:1,column:50284},end:{line:1,column:50304}},"1352":{start:{line:1,column:50305},end:{line:1,column:50404}},"1353":{start:{line:1,column:50426},end:{line:1,column:50442}},"1354":{start:{line:1,column:50445},end:{line:1,column:50454}},"1355":{start:{line:1,column:50457},end:{line:1,column:50480}},"1356":{start:{line:1,column:50483},end:{line:1,column:50491}},"1357":{start:{line:1,column:50494},end:{line:1,column:50516}},"1358":{start:{line:1,column:50519},end:{line:1,column:50537}},"1359":{start:{line:1,column:50540},end:{line:1,column:50599}},"1360":{start:{line:1,column:50614},end:{line:1,column:50619}},"1361":{start:{line:1,column:50637},end:{line:1,column:50644}},"1362":{start:{line:1,column:50650},end:{line:1,column:50659}},"1363":{start:{line:1,column:50660},end:{line:1,column:50689}},"1364":{start:{line:1,column:50690},end:{line:1,column:50757}},"1365":{start:{line:1,column:50757},end:{line:1,column:50834}},"1366":{start:{line:1,column:50763},end:{line:1,column:50833}},"1367":{start:{line:1,column:50782},end:{line:1,column:50833}},"1368":{start:{line:1,column:50791},end:{line:1,column:50827}},"1369":{start:{line:1,column:50827},end:{line:1,column:50832}},"1370":{start:{line:1,column:50834},end:{line:1,column:50842}},"1371":{start:{line:1,column:50871},end:{line:1,column:50895}},"1372":{start:{line:1,column:50898},end:{line:1,column:50900}},"1373":{start:{line:1,column:50907},end:{line:1,column:50965}},"1374":{start:{line:1,column:50934},end:{line:1,column:50965}},"1375":{start:{line:1,column:50965},end:{line:1,column:50973}},"1376":{start:{line:1,column:50991},end:{line:1,column:50999}},"1377":{start:{line:1,column:51026},end:{line:1,column:51042}},"1378":{start:{line:1,column:51045},end:{line:1,column:51053}},"1379":{start:{line:1,column:51056},end:{line:1,column:51064}},"1380":{start:{line:1,column:51067},end:{line:1,column:51084}},"1381":{start:{line:1,column:51085},end:{line:1,column:51180}},"1382":{start:{line:1,column:51198},end:{line:1,column:51214}},"1383":{start:{line:1,column:51215},end:{line:1,column:51317}},"1384":{start:{line:1,column:51342},end:{line:1,column:51351}},"1385":{start:{line:1,column:51354},end:{line:1,column:51364}},"1386":{start:{line:1,column:51367},end:{line:1,column:51383}},"1387":{start:{line:1,column:51386},end:{line:1,column:51396}},"1388":{start:{line:1,column:51399},end:{line:1,column:51410}},"1389":{start:{line:1,column:51413},end:{line:1,column:51415}},"1390":{start:{line:1,column:51418},end:{line:1,column:51436}},"1391":{start:{line:1,column:51439},end:{line:1,column:51466}},"1392":{start:{line:1,column:51469},end:{line:1,column:51505}},"1393":{start:{line:1,column:51508},end:{line:1,column:51619}},"1394":{start:{line:1,column:51568},end:{line:1,column:51572}},"1395":{start:{line:1,column:51573},end:{line:1,column:51618}},"1396":{start:{line:1,column:51619},end:{line:1,column:51656}},"1397":{start:{line:1,column:51642},end:{line:1,column:51656}},"1398":{start:{line:1,column:51677},end:{line:1,column:51697}},"1399":{start:{line:1,column:51698},end:{line:1,column:51817}},"1400":{start:{line:1,column:51842},end:{line:1,column:51859}},"1401":{start:{line:1,column:51862},end:{line:1,column:52175}},"1402":{start:{line:1,column:51909},end:{line:1,column:51933}},"1403":{start:{line:1,column:51934},end:{line:1,column:52051}},"1404":{start:{line:1,column:52057},end:{line:1,column:52175}},"1405":{start:{line:1,column:52175},end:{line:1,column:52205}},"1406":{start:{line:1,column:52238},end:{line:1,column:52302}},"1407":{start:{line:1,column:52334},end:{line:1,column:52397}},"1408":{start:{line:1,column:52444},end:{line:1,column:52456}},"1409":{start:{line:1,column:52459},end:{line:1,column:52479}},"1410":{start:{line:1,column:52482},end:{line:1,column:52489}},"1411":{start:{line:1,column:52492},end:{line:1,column:52496}},"1412":{start:{line:1,column:52499},end:{line:1,column:52530}},"1413":{start:{line:1,column:52531},end:{line:1,column:52551}},"1414":{start:{line:1,column:52536},end:{line:1,column:52551}},"1415":{start:{line:1,column:52557},end:{line:1,column:52574}},"1416":{start:{line:1,column:52577},end:{line:1,column:52616}},"1417":{start:{line:1,column:52619},end:{line:1,column:52654}},"1418":{start:{line:1,column:52657},end:{line:1,column:52695}},"1419":{start:{line:1,column:52698},end:{line:1,column:52724}},"1420":{start:{line:1,column:52727},end:{line:1,column:52753}},"1421":{start:{line:1,column:52731},end:{line:1,column:52753}},"1422":{start:{line:1,column:52756},end:{line:1,column:52786}},"1423":{start:{line:1,column:52787},end:{line:1,column:52848}},"1424":{start:{line:1,column:52881},end:{line:1,column:52891}},"1425":{start:{line:1,column:52894},end:{line:1,column:52914}},"1426":{start:{line:1,column:52917},end:{line:1,column:52933}},"1427":{start:{line:1,column:52936},end:{line:1,column:52940}},"1428":{start:{line:1,column:52941},end:{line:1,column:52955}},"1429":{start:{line:1,column:52946},end:{line:1,column:52955}},"1430":{start:{line:1,column:52961},end:{line:1,column:53144}},"1431":{start:{line:1,column:52996},end:{line:1,column:53013}},"1432":{start:{line:1,column:53016},end:{line:1,column:53057}},"1433":{start:{line:1,column:53060},end:{line:1,column:53098}},"1434":{start:{line:1,column:53099},end:{line:1,column:53143}},"1435":{start:{line:1,column:53150},end:{line:1,column:53175}},"1436":{start:{line:1,column:53176},end:{line:1,column:53225}},"1437":{start:{line:1,column:53246},end:{line:1,column:53328}},"1438":{start:{line:1,column:53259},end:{line:1,column:53328}},"1439":{start:{line:1,column:53349},end:{line:1,column:53396}},"1440":{start:{line:1,column:53426},end:{line:1,column:53461}},"1441":{start:{line:1,column:53464},end:{line:1,column:53483}},"1442":{start:{line:1,column:53486},end:{line:1,column:53510}},"1443":{start:{line:1,column:53513},end:{line:1,column:53544}},"1444":{start:{line:1,column:53545},end:{line:1,column:53618}},"1445":{start:{line:1,column:53642},end:{line:1,column:53707}},"1446":{start:{line:1,column:53735},end:{line:1,column:53791}},"1447":{start:{line:1,column:53811},end:{line:1,column:53822}},"1448":{start:{line:1,column:53828},end:{line:1,column:53846}},"1449":{start:{line:1,column:53847},end:{line:1,column:53929}},"1450":{start:{line:1,column:53954},end:{line:1,column:53985}},"1451":{start:{line:1,column:54007},end:{line:1,column:54038}},"1452":{start:{line:1,column:54072},end:{line:1,column:54096}},"1453":{start:{line:1,column:54097},end:{line:1,column:54136}},"1454":{start:{line:1,column:54167},end:{line:1,column:54191}},"1455":{start:{line:1,column:54192},end:{line:1,column:54231}},"1456":{start:{line:1,column:54257},end:{line:1,column:54267}},"1457":{start:{line:1,column:54270},end:{line:1,column:54291}},"1458":{start:{line:1,column:54292},end:{line:1,column:54337}},"1459":{start:{line:1,column:54324},end:{line:1,column:54337}},"1460":{start:{line:1,column:54337},end:{line:1,column:54355}},"1461":{start:{line:1,column:54361},end:{line:1,column:54369}},"1462":{start:{line:1,column:54372},end:{line:1,column:54380}},"1463":{start:{line:1,column:54383},end:{line:1,column:54396}},"1464":{start:{line:1,column:54397},end:{line:1,column:54482}},"1465":{start:{line:1,column:54515},end:{line:1,column:54531}},"1466":{start:{line:1,column:54534},end:{line:1,column:54540}},"1467":{start:{line:1,column:54543},end:{line:1,column:54546}},"1468":{start:{line:1,column:54551},end:{line:1,column:54605}},"1469":{start:{line:1,column:54555},end:{line:1,column:54604}},"1470":{start:{line:1,column:54593},end:{line:1,column:54604}},"1471":{start:{line:1,column:54606},end:{line:1,column:54657}},"1472":{start:{line:1,column:54627},end:{line:1,column:54657}},"1473":{start:{line:1,column:54657},end:{line:1,column:54738}},"1474":{start:{line:1,column:54791},end:{line:1,column:54807}},"1475":{start:{line:1,column:54808},end:{line:1,column:54874}},"1476":{start:{line:1,column:54832},end:{line:1,column:54853}},"1477":{start:{line:1,column:54854},end:{line:1,column:54873}},"1478":{start:{line:1,column:54874},end:{line:1,column:54892}},"1479":{start:{line:1,column:54902},end:{line:1,column:54973}},"1480":{start:{line:1,column:54919},end:{line:1,column:54942}},"1481":{start:{line:1,column:54958},end:{line:1,column:54959}},"1482":{start:{line:1,column:54960},end:{line:1,column:54972}},"1483":{start:{line:1,column:54973},end:{line:1,column:55020}},"1484":{start:{line:1,column:55041},end:{line:1,column:55057}},"1485":{start:{line:1,column:55058},end:{line:1,column:55123}},"1486":{start:{line:1,column:55137},end:{line:1,column:55201}},"1487":{start:{line:1,column:55217},end:{line:1,column:55252}},"1488":{start:{line:1,column:55272},end:{line:1,column:55311}},"1489":{start:{line:1,column:55317},end:{line:1,column:55335}},"1490":{start:{line:1,column:55336},end:{line:1,column:55374}},"1491":{start:{line:1,column:55392},end:{line:1,column:55442}},"1492":{start:{line:1,column:55444},end:{line:1,column:55452}},"1493":{start:{line:1,column:55474},end:{line:1,column:55651}},"1494":{start:{line:1,column:55499},end:{line:1,column:55527}},"1495":{start:{line:1,column:55530},end:{line:1,column:55532}},"1496":{start:{line:1,column:55533},end:{line:1,column:55614}},"1497":{start:{line:1,column:55543},end:{line:1,column:55544}},"1498":{start:{line:1,column:55547},end:{line:1,column:55555}},"1499":{start:{line:1,column:55564},end:{line:1,column:55614}},"1500":{start:{line:1,column:55614},end:{line:1,column:55650}},"1501":{start:{line:1,column:55645},end:{line:1,column:55648}},"1502":{start:{line:1,column:55651},end:{line:1,column:55671}},"1503":{start:{line:1,column:55693},end:{line:1,column:55701}},"1504":{start:{line:1,column:55704},end:{line:1,column:55716}},"1505":{start:{line:1,column:55719},end:{line:1,column:55728}},"1506":{start:{line:1,column:55739},end:{line:1,column:55813}},"1507":{start:{line:1,column:55744},end:{line:1,column:55812}},"1508":{start:{line:1,column:55814},end:{line:1,column:55872}},"1509":{start:{line:1,column:55841},end:{line:1,column:55872}},"1510":{start:{line:1,column:55872},end:{line:1,column:55941}},"1511":{start:{line:1,column:55914},end:{line:1,column:55941}},"1512":{start:{line:1,column:55941},end:{line:1,column:55949}},"1513":{start:{line:1,column:55977},end:{line:1,column:55991}},"1514":{start:{line:1,column:55996},end:{line:1,column:56110}},"1515":{start:{line:1,column:56138},end:{line:1,column:56146}},"1516":{start:{line:1,column:56149},end:{line:1,column:56153}},"1517":{start:{line:1,column:56156},end:{line:1,column:56171}},"1518":{start:{line:1,column:56174},end:{line:1,column:56198}},"1519":{start:{line:1,column:56201},end:{line:1,column:56221}},"1520":{start:{line:1,column:56222},end:{line:1,column:56287}},"1521":{start:{line:1,column:56293},end:{line:1,column:56316}},"1522":{start:{line:1,column:56317},end:{line:1,column:56380}},"1523":{start:{line:1,column:56408},end:{line:1,column:56423}},"1524":{start:{line:1,column:56426},end:{line:1,column:56441}},"1525":{start:{line:1,column:56444},end:{line:1,column:56457}},"1526":{start:{line:1,column:56460},end:{line:1,column:56473}},"1527":{start:{line:1,column:56476},end:{line:1,column:56477}},"1528":{start:{line:1,column:56480},end:{line:1,column:56481}},"1529":{start:{line:1,column:56482},end:{line:1,column:56586}},"1530":{start:{line:1,column:56608},end:{line:1,column:56656}},"1531":{start:{line:1,column:56684},end:{line:1,column:56692}},"1532":{start:{line:1,column:56695},end:{line:1,column:56703}},"1533":{start:{line:1,column:56706},end:{line:1,column:56719}},"1534":{start:{line:1,column:56722},end:{line:1,column:56727}},"1535":{start:{line:1,column:56730},end:{line:1,column:56732}},"1536":{start:{line:1,column:56741},end:{line:1,column:56824}},"1537":{start:{line:1,column:56763},end:{line:1,column:56824}},"1538":{start:{line:1,column:56824},end:{line:1,column:56832}},"1539":{start:{line:1,column:56848},end:{line:1,column:56896}},"1540":{start:{line:1,column:56916},end:{line:1,column:56974}},"1541":{start:{line:1,column:57004},end:{line:1,column:57174}},"1542":{start:{line:1,column:57202},end:{line:1,column:57217}},"1543":{start:{line:1,column:57220},end:{line:1,column:57222}},"1544":{start:{line:1,column:57223},end:{line:1,column:57255}},"1545":{start:{line:1,column:57230},end:{line:1,column:57248}},"1546":{start:{line:1,column:57248},end:{line:1,column:57254}},"1547":{start:{line:1,column:57255},end:{line:1,column:57325}},"1548":{start:{line:1,column:57266},end:{line:1,column:57318}},"1549":{start:{line:1,column:57318},end:{line:1,column:57324}},"1550":{start:{line:1,column:57369},end:{line:1,column:57374}},"1551":{start:{line:1,column:57375},end:{line:1,column:57520}},"1552":{start:{line:1,column:57542},end:{line:1,column:57590}},"1553":{start:{line:1,column:57610},end:{line:1,column:57634}},"1554":{start:{line:1,column:57654},end:{line:1,column:57688}},"1555":{start:{line:1,column:57724},end:{line:1,column:57764}},"1556":{start:{line:1,column:57772},end:{line:1,column:62790}},"1557":{start:{line:1,column:57807},end:{line:1,column:57812}},"1558":{start:{line:1,column:57829},end:{line:1,column:58006}},"1559":{start:{line:1,column:58024},end:{line:1,column:58126}},"1560":{start:{line:1,column:58155},end:{line:1,column:58173}},"1561":{start:{line:1,column:58198},end:{line:1,column:58216}},"1562":{start:{line:1,column:58265},end:{line:1,column:58266}},"1563":{start:{line:1,column:58299},end:{line:1,column:58312}},"1564":{start:{line:1,column:58315},end:{line:1,column:58331}},"1565":{start:{line:1,column:58334},end:{line:1,column:58350}},"1566":{start:{line:1,column:58353},end:{line:1,column:58355}},"1567":{start:{line:1,column:58364},end:{line:1,column:58453}},"1568":{start:{line:1,column:58386},end:{line:1,column:58453}},"1569":{start:{line:1,column:58453},end:{line:1,column:58461}},"1570":{start:{line:1,column:58493},end:{line:1,column:58530}},"1571":{start:{line:1,column:58536},end:{line:1,column:58545}},"1572":{start:{line:1,column:58546},end:{line:1,column:58635}},"1573":{start:{line:1,column:58653},end:{line:1,column:58661}},"1574":{start:{line:1,column:58688},end:{line:1,column:58704}},"1575":{start:{line:1,column:58725},end:{line:1,column:58726}},"1576":{start:{line:1,column:58729},end:{line:1,column:58746}},"1577":{start:{line:1,column:58749},end:{line:1,column:58758}},"1578":{start:{line:1,column:58761},end:{line:1,column:58826}},"1579":{start:{line:1,column:58827},end:{line:1,column:58881}},"1580":{start:{line:1,column:58895},end:{line:1,column:58942}},"1581":{start:{line:1,column:58948},end:{line:1,column:58964}},"1582":{start:{line:1,column:58965},end:{line:1,column:58996}},"1583":{start:{line:1,column:59013},end:{line:1,column:59029}},"1584":{start:{line:1,column:59030},end:{line:1,column:59075}},"1585":{start:{line:1,column:59106},end:{line:1,column:59117}},"1586":{start:{line:1,column:59151},end:{line:1,column:59155}},"1587":{start:{line:1,column:59158},end:{line:1,column:59174}},"1588":{start:{line:1,column:59177},end:{line:1,column:59193}},"1589":{start:{line:1,column:59196},end:{line:1,column:59212}},"1590":{start:{line:1,column:59248},end:{line:1,column:59275}},"1591":{start:{line:1,column:59276},end:{line:1,column:59815}},"1592":{start:{line:1,column:59286},end:{line:1,column:59287}},"1593":{start:{line:1,column:59305},end:{line:1,column:59322}},"1594":{start:{line:1,column:59325},end:{line:1,column:59389}},"1595":{start:{line:1,column:59392},end:{line:1,column:59426}},"1596":{start:{line:1,column:59429},end:{line:1,column:59452}},"1597":{start:{line:1,column:59455},end:{line:1,column:59650}},"1598":{start:{line:1,column:59651},end:{line:1,column:59726}},"1599":{start:{line:1,column:59732},end:{line:1,column:59755}},"1600":{start:{line:1,column:59756},end:{line:1,column:59814}},"1601":{start:{line:1,column:59846},end:{line:1,column:59862}},"1602":{start:{line:1,column:59865},end:{line:1,column:59942}},"1603":{start:{line:1,column:59913},end:{line:1,column:59941}},"1604":{start:{line:1,column:59945},end:{line:1,column:59962}},"1605":{start:{line:1,column:59965},end:{line:1,column:59967}},"1606":{start:{line:1,column:59970},end:{line:1,column:60010}},"1607":{start:{line:1,column:60013},end:{line:1,column:60025}},"1608":{start:{line:1,column:60028},end:{line:1,column:60120}},"1609":{start:{line:1,column:60038},end:{line:1,column:60070}},"1610":{start:{line:1,column:60056},end:{line:1,column:60069}},"1611":{start:{line:1,column:60073},end:{line:1,column:60092}},"1612":{start:{line:1,column:60093},end:{line:1,column:60119}},"1613":{start:{line:1,column:60111},end:{line:1,column:60119}},"1614":{start:{line:1,column:60121},end:{line:1,column:60261}},"1615":{start:{line:1,column:60136},end:{line:1,column:60261}},"1616":{start:{line:1,column:60255},end:{line:1,column:60261}},"1617":{start:{line:1,column:60261},end:{line:1,column:60294}},"1618":{start:{line:1,column:60313},end:{line:1,column:60352}},"1619":{start:{line:1,column:60369},end:{line:1,column:60398}},"1620":{start:{line:1,column:60435},end:{line:1,column:60452}},"1621":{start:{line:1,column:60455},end:{line:1,column:60483}},"1622":{start:{line:1,column:60484},end:{line:1,column:60538}},"1623":{start:{line:1,column:60516},end:{line:1,column:60529}},"1624":{start:{line:1,column:60556},end:{line:1,column:60558}},"1625":{start:{line:1,column:60561},end:{line:1,column:60595}},"1626":{start:{line:1,column:60596},end:{line:1,column:60700}},"1627":{start:{line:1,column:60634},end:{line:1,column:60700}},"1628":{start:{line:1,column:60700},end:{line:1,column:60721}},"1629":{start:{line:1,column:60750},end:{line:1,column:60770}},"1630":{start:{line:1,column:60773},end:{line:1,column:60799}},"1631":{start:{line:1,column:60800},end:{line:1,column:60826}},"1632":{start:{line:1,column:60845},end:{line:1,column:60857}},"1633":{start:{line:1,column:60860},end:{line:1,column:60876}},"1634":{start:{line:1,column:60879},end:{line:1,column:60887}},"1635":{start:{line:1,column:60890},end:{line:1,column:60892}},"1636":{start:{line:1,column:60897},end:{line:1,column:60985}},"1637":{start:{line:1,column:60929},end:{line:1,column:60985}},"1638":{start:{line:1,column:60991},end:{line:1,column:61005}},"1639":{start:{line:1,column:61006},end:{line:1,column:61177}},"1640":{start:{line:1,column:61285},end:{line:1,column:61289}},"1641":{start:{line:1,column:61292},end:{line:1,column:61296}},"1642":{start:{line:1,column:61299},end:{line:1,column:61316}},"1643":{start:{line:1,column:61319},end:{line:1,column:61328}},"1644":{start:{line:1,column:61331},end:{line:1,column:61336}},"1645":{start:{line:1,column:61339},end:{line:1,column:61348}},"1646":{start:{line:1,column:61351},end:{line:1,column:61352}},"1647":{start:{line:1,column:61355},end:{line:1,column:61381}},"1648":{start:{line:1,column:61386},end:{line:1,column:61485}},"1649":{start:{line:1,column:61491},end:{line:1,column:61504}},"1650":{start:{line:1,column:61507},end:{line:1,column:61528}},"1651":{start:{line:1,column:61529},end:{line:1,column:61855}},"1652":{start:{line:1,column:61615},end:{line:1,column:61645}},"1653":{start:{line:1,column:61651},end:{line:1,column:61674}},"1654":{start:{line:1,column:61677},end:{line:1,column:61700}},"1655":{start:{line:1,column:61703},end:{line:1,column:61716}},"1656":{start:{line:1,column:61719},end:{line:1,column:61732}},"1657":{start:{line:1,column:61733},end:{line:1,column:61854}},"1658":{start:{line:1,column:61855},end:{line:1,column:61935}},"1659":{start:{line:1,column:61891},end:{line:1,column:61924}},"1660":{start:{line:1,column:61925},end:{line:1,column:61934}},"1661":{start:{line:1,column:61935},end:{line:1,column:61976}},"1662":{start:{line:1,column:62013},end:{line:1,column:62020}},"1663":{start:{line:1,column:62023},end:{line:1,column:62035}},"1664":{start:{line:1,column:62038},end:{line:1,column:62048}},"1665":{start:{line:1,column:62051},end:{line:1,column:62075}},"1666":{start:{line:1,column:62082},end:{line:1,column:62102}},"1667":{start:{line:1,column:62103},end:{line:1,column:62584}},"1668":{start:{line:1,column:62123},end:{line:1,column:62160}},"1669":{start:{line:1,column:62163},end:{line:1,column:62214}},"1670":{start:{line:1,column:62217},end:{line:1,column:62303}},"1671":{start:{line:1,column:62306},end:{line:1,column:62370}},"1672":{start:{line:1,column:62373},end:{line:1,column:62440}},"1673":{start:{line:1,column:62441},end:{line:1,column:62500}},"1674":{start:{line:1,column:62506},end:{line:1,column:62584}},"1675":{start:{line:1,column:62584},end:{line:1,column:62629}},"1676":{start:{line:1,column:62643},end:{line:1,column:62659}},"1677":{start:{line:1,column:62662},end:{line:1,column:62670}},"1678":{start:{line:1,column:62673},end:{line:1,column:62679}},"1679":{start:{line:1,column:62682},end:{line:1,column:62690}},"1680":{start:{line:1,column:62693},end:{line:1,column:62694}},"1681":{start:{line:1,column:62695},end:{line:1,column:62776}},"1682":{start:{line:1,column:62708},end:{line:1,column:62776}},"1683":{start:{line:1,column:62778},end:{line:1,column:62786}},"1684":{start:{line:1,column:62794},end:{line:1,column:64809}},"1685":{start:{line:1,column:62829},end:{line:1,column:62837}},"1686":{start:{line:1,column:62854},end:{line:1,column:62982}},"1687":{start:{line:1,column:63000},end:{line:1,column:63046}},"1688":{start:{line:1,column:63060},end:{line:1,column:63106}},"1689":{start:{line:1,column:63141},end:{line:1,column:63174}},"1690":{start:{line:1,column:63175},end:{line:1,column:63258}},"1691":{start:{line:1,column:63185},end:{line:1,column:63186}},"1692":{start:{line:1,column:63202},end:{line:1,column:63258}},"1693":{start:{line:1,column:63258},end:{line:1,column:63266}},"1694":{start:{line:1,column:63297},end:{line:1,column:63326}},"1695":{start:{line:1,column:63327},end:{line:1,column:63432}},"1696":{start:{line:1,column:63337},end:{line:1,column:63338}},"1697":{start:{line:1,column:63361},end:{line:1,column:63367}},"1698":{start:{line:1,column:63368},end:{line:1,column:63431}},"1699":{start:{line:1,column:63432},end:{line:1,column:63440}},"1700":{start:{line:1,column:63472},end:{line:1,column:63502}},"1701":{start:{line:1,column:63503},end:{line:1,column:63616}},"1702":{start:{line:1,column:63513},end:{line:1,column:63514}},"1703":{start:{line:1,column:63537},end:{line:1,column:63543}},"1704":{start:{line:1,column:63544},end:{line:1,column:63615}},"1705":{start:{line:1,column:63616},end:{line:1,column:63624}},"1706":{start:{line:1,column:63648},end:{line:1,column:63669}},"1707":{start:{line:1,column:63672},end:{line:1,column:63673}},"1708":{start:{line:1,column:63674},end:{line:1,column:63765}},"1709":{start:{line:1,column:63684},end:{line:1,column:63694}},"1710":{start:{line:1,column:63704},end:{line:1,column:63765}},"1711":{start:{line:1,column:63765},end:{line:1,column:63778}},"1712":{start:{line:1,column:63805},end:{line:1,column:63821}},"1713":{start:{line:1,column:63824},end:{line:1,column:63850}},"1714":{start:{line:1,column:63871},end:{line:1,column:63872}},"1715":{start:{line:1,column:63875},end:{line:1,column:63892}},"1716":{start:{line:1,column:63895},end:{line:1,column:63918}},"1717":{start:{line:1,column:63921},end:{line:1,column:63944}},"1718":{start:{line:1,column:63947},end:{line:1,column:63956}},"1719":{start:{line:1,column:63957},end:{line:1,column:64016}},"1720":{start:{line:1,column:64033},end:{line:1,column:64054}},"1721":{start:{line:1,column:64055},end:{line:1,column:64090}},"1722":{start:{line:1,column:64121},end:{line:1,column:64132}},"1723":{start:{line:1,column:64153},end:{line:1,column:64169}},"1724":{start:{line:1,column:64205},end:{line:1,column:64232}},"1725":{start:{line:1,column:64235},end:{line:1,column:64241}},"1726":{start:{line:1,column:64244},end:{line:1,column:64250}},"1727":{start:{line:1,column:64251},end:{line:1,column:64574}},"1728":{start:{line:1,column:64261},end:{line:1,column:64262}},"1729":{start:{line:1,column:64280},end:{line:1,column:64284}},"1730":{start:{line:1,column:64287},end:{line:1,column:64308}},"1731":{start:{line:1,column:64311},end:{line:1,column:64313}},"1732":{start:{line:1,column:64316},end:{line:1,column:64372}},"1733":{start:{line:1,column:64375},end:{line:1,column:64423}},"1734":{start:{line:1,column:64424},end:{line:1,column:64573}},"1735":{start:{line:1,column:64612},end:{line:1,column:64629}},"1736":{start:{line:1,column:64632},end:{line:1,column:64668}},"1737":{start:{line:1,column:64669},end:{line:1,column:64717}},"1738":{start:{line:1,column:64723},end:{line:1,column:64731}},"1739":{start:{line:1,column:64732},end:{line:1,column:64795}},"1740":{start:{line:1,column:64797},end:{line:1,column:64805}},"1741":{start:{line:1,column:64835},end:{line:1,column:64836}},"1742":{start:{line:1,column:64839},end:{line:1,column:64840}},"1743":{start:{line:1,column:64843},end:{line:1,column:64844}},"1744":{start:{line:1,column:64847},end:{line:1,column:64848}},"1745":{start:{line:1,column:64849},end:{line:1,column:65112}},"1746":{start:{line:1,column:64863},end:{line:1,column:64864}},"1747":{start:{line:1,column:64867},end:{line:1,column:64870}},"1748":{start:{line:1,column:64873},end:{line:1,column:64884}},"1749":{start:{line:1,column:64887},end:{line:1,column:64898}},"1750":{start:{line:1,column:64901},end:{line:1,column:64912}},"1751":{start:{line:1,column:64915},end:{line:1,column:64926}},"1752":{start:{line:1,column:64929},end:{line:1,column:64974}},"1753":{start:{line:1,column:64938},end:{line:1,column:64974}},"1754":{start:{line:1,column:64977},end:{line:1,column:65023}},"1755":{start:{line:1,column:64986},end:{line:1,column:65023}},"1756":{start:{line:1,column:65026},end:{line:1,column:65034}},"1757":{start:{line:1,column:65037},end:{line:1,column:65045}},"1758":{start:{line:1,column:65048},end:{line:1,column:65056}},"1759":{start:{line:1,column:65059},end:{line:1,column:65069}},"1760":{start:{line:1,column:65070},end:{line:1,column:65111}},"1761":{start:{line:1,column:65112},end:{line:1,column:65157}},"1762":{start:{line:1,column:65165},end:{line:1,column:69988}},"1763":{start:{line:1,column:65200},end:{line:1,column:65210}},"1764":{start:{line:1,column:65227},end:{line:1,column:65556}},"1765":{start:{line:1,column:65576},end:{line:1,column:65697}},"1766":{start:{line:1,column:65592},end:{line:1,column:65605}},"1767":{start:{line:1,column:65620},end:{line:1,column:65696}},"1768":{start:{line:1,column:65715},end:{line:1,column:66360}},"1769":{start:{line:1,column:65779},end:{line:1,column:65785}},"1770":{start:{line:1,column:65863},end:{line:1,column:65879}},"1771":{start:{line:1,column:65880},end:{line:1,column:66284}},"1772":{start:{line:1,column:65949},end:{line:1,column:65991}},"1773":{start:{line:1,column:65992},end:{line:1,column:66279}},"1774":{start:{line:1,column:66302},end:{line:1,column:66356}},"1775":{start:{line:1,column:66378},end:{line:1,column:66504}},"1776":{start:{line:1,column:66536},end:{line:1,column:66558}},"1777":{start:{line:1,column:66561},end:{line:1,column:66577}},"1778":{start:{line:1,column:66578},end:{line:1,column:66742}},"1779":{start:{line:1,column:66600},end:{line:1,column:66612}},"1780":{start:{line:1,column:66623},end:{line:1,column:66631}},"1781":{start:{line:1,column:66626},end:{line:1,column:66631}},"1782":{start:{line:1,column:66632},end:{line:1,column:66694}},"1783":{start:{line:1,column:66663},end:{line:1,column:66676}},"1784":{start:{line:1,column:66677},end:{line:1,column:66693}},"1785":{start:{line:1,column:66682},end:{line:1,column:66693}},"1786":{start:{line:1,column:66702},end:{line:1,column:66741}},"1787":{start:{line:1,column:66724},end:{line:1,column:66741}},"1788":{start:{line:1,column:66758},end:{line:1,column:66793}},"1789":{start:{line:1,column:66814},end:{line:1,column:66851}},"1790":{start:{line:1,column:66880},end:{line:1,column:66881}},"1791":{start:{line:1,column:66884},end:{line:1,column:66886}},"1792":{start:{line:1,column:66887},end:{line:1,column:67143}},"1793":{start:{line:1,column:66897},end:{line:1,column:66898}},"1794":{start:{line:1,column:66937},end:{line:1,column:67143}},"1795":{start:{line:1,column:67026},end:{line:1,column:67065}},"1796":{start:{line:1,column:67068},end:{line:1,column:67084}},"1797":{start:{line:1,column:67087},end:{line:1,column:67108}},"1798":{start:{line:1,column:67109},end:{line:1,column:67142}},"1799":{start:{line:1,column:67143},end:{line:1,column:67179}},"1800":{start:{line:1,column:67196},end:{line:1,column:67206}},"1801":{start:{line:1,column:67221},end:{line:1,column:67222}},"1802":{start:{line:1,column:67225},end:{line:1,column:67241}},"1803":{start:{line:1,column:67244},end:{line:1,column:67250}},"1804":{start:{line:1,column:67253},end:{line:1,column:67319}},"1805":{start:{line:1,column:67322},end:{line:1,column:67366}},"1806":{start:{line:1,column:67369},end:{line:1,column:67406}},"1807":{start:{line:1,column:67409},end:{line:1,column:67440}},"1808":{start:{line:1,column:67470},end:{line:1,column:67496}},"1809":{start:{line:1,column:67537},end:{line:1,column:67546}},"1810":{start:{line:1,column:67549},end:{line:1,column:67562}},"1811":{start:{line:1,column:67565},end:{line:1,column:67579}},"1812":{start:{line:1,column:67582},end:{line:1,column:67609}},"1813":{start:{line:1,column:67612},end:{line:1,column:67637}},"1814":{start:{line:1,column:67640},end:{line:1,column:67655}},"1815":{start:{line:1,column:67658},end:{line:1,column:67700}},"1816":{start:{line:1,column:67701},end:{line:1,column:67909}},"1817":{start:{line:1,column:67936},end:{line:1,column:67948}},"1818":{start:{line:1,column:67951},end:{line:1,column:67967}},"1819":{start:{line:1,column:67970},end:{line:1,column:67994}},"1820":{start:{line:1,column:67995},end:{line:1,column:68151}},"1821":{start:{line:1,column:68182},end:{line:1,column:68193}},"1822":{start:{line:1,column:68196},end:{line:1,column:68206}},"1823":{start:{line:1,column:68209},end:{line:1,column:68220}},"1824":{start:{line:1,column:68223},end:{line:1,column:68242}},"1825":{start:{line:1,column:68245},end:{line:1,column:68263}},"1826":{start:{line:1,column:68266},end:{line:1,column:68284}},"1827":{start:{line:1,column:68287},end:{line:1,column:68304}},"1828":{start:{line:1,column:68307},end:{line:1,column:68327}},"1829":{start:{line:1,column:68330},end:{line:1,column:68350}},"1830":{start:{line:1,column:68386},end:{line:1,column:68413}},"1831":{start:{line:1,column:68416},end:{line:1,column:68435}},"1832":{start:{line:1,column:68438},end:{line:1,column:68482}},"1833":{start:{line:1,column:68454},end:{line:1,column:68482}},"1834":{start:{line:1,column:68482},end:{line:1,column:68752}},"1835":{start:{line:1,column:68507},end:{line:1,column:68531}},"1836":{start:{line:1,column:68534},end:{line:1,column:68538}},"1837":{start:{line:1,column:68541},end:{line:1,column:68646}},"1838":{start:{line:1,column:68647},end:{line:1,column:68751}},"1839":{start:{line:1,column:68776},end:{line:1,column:68792}},"1840":{start:{line:1,column:68795},end:{line:1,column:68801}},"1841":{start:{line:1,column:68804},end:{line:1,column:68805}},"1842":{start:{line:1,column:68808},end:{line:1,column:68936}},"1843":{start:{line:1,column:68838},end:{line:1,column:68850}},"1844":{start:{line:1,column:68851},end:{line:1,column:68935}},"1845":{start:{line:1,column:68936},end:{line:1,column:68944}},"1846":{start:{line:1,column:68977},end:{line:1,column:68999}},"1847":{start:{line:1,column:69000},end:{line:1,column:69041}},"1848":{start:{line:1,column:69068},end:{line:1,column:69084}},"1849":{start:{line:1,column:69087},end:{line:1,column:69097}},"1850":{start:{line:1,column:69100},end:{line:1,column:69117}},"1851":{start:{line:1,column:69120},end:{line:1,column:69153}},"1852":{start:{line:1,column:69154},end:{line:1,column:69184}},"1853":{start:{line:1,column:69212},end:{line:1,column:69213}},"1854":{start:{line:1,column:69216},end:{line:1,column:69226}},"1855":{start:{line:1,column:69237},end:{line:1,column:69364}},"1856":{start:{line:1,column:69244},end:{line:1,column:69363}},"1857":{start:{line:1,column:69285},end:{line:1,column:69363}},"1858":{start:{line:1,column:69311},end:{line:1,column:69357}},"1859":{start:{line:1,column:69357},end:{line:1,column:69362}},"1860":{start:{line:1,column:69364},end:{line:1,column:69379}},"1861":{start:{line:1,column:69370},end:{line:1,column:69379}},"1862":{start:{line:1,column:69379},end:{line:1,column:69519}},"1863":{start:{line:1,column:69406},end:{line:1,column:69519}},"1864":{start:{line:1,column:69519},end:{line:1,column:69527}},"1865":{start:{line:1,column:69550},end:{line:1,column:69551}},"1866":{start:{line:1,column:69552},end:{line:1,column:69667}},"1867":{start:{line:1,column:69562},end:{line:1,column:69563}},"1868":{start:{line:1,column:69566},end:{line:1,column:69574}},"1869":{start:{line:1,column:69590},end:{line:1,column:69623}},"1870":{start:{line:1,column:69624},end:{line:1,column:69666}},"1871":{start:{line:1,column:69667},end:{line:1,column:69675}},"1872":{start:{line:1,column:69706},end:{line:1,column:69707}},"1873":{start:{line:1,column:69708},end:{line:1,column:69788}},"1874":{start:{line:1,column:69718},end:{line:1,column:69719}},"1875":{start:{line:1,column:69728},end:{line:1,column:69788}},"1876":{start:{line:1,column:69788},end:{line:1,column:69796}},"1877":{start:{line:1,column:69815},end:{line:1,column:69873}},"1878":{start:{line:1,column:69906},end:{line:1,column:69974}},"1879":{start:{line:1,column:69976},end:{line:1,column:69984}},"1880":{start:{line:1,column:69992},end:{line:1,column:71924}},"1881":{start:{line:1,column:70027},end:{line:1,column:70033}},"1882":{start:{line:1,column:70050},end:{line:1,column:70125}},"1883":{start:{line:1,column:70143},end:{line:1,column:70203}},"1884":{start:{line:1,column:70217},end:{line:1,column:70290}},"1885":{start:{line:1,column:70307},end:{line:1,column:70323}},"1886":{start:{line:1,column:70357},end:{line:1,column:70358}},"1887":{start:{line:1,column:70361},end:{line:1,column:70391}},"1888":{start:{line:1,column:70410},end:{line:1,column:70419}},"1889":{start:{line:1,column:70420},end:{line:1,column:70566}},"1890":{start:{line:1,column:70572},end:{line:1,column:70608}},"1891":{start:{line:1,column:70609},end:{line:1,column:70764}},"1892":{start:{line:1,column:70795},end:{line:1,column:70806}},"1893":{start:{line:1,column:70849},end:{line:1,column:70865}},"1894":{start:{line:1,column:70901},end:{line:1,column:70928}},"1895":{start:{line:1,column:70931},end:{line:1,column:70937}},"1896":{start:{line:1,column:70940},end:{line:1,column:70946}},"1897":{start:{line:1,column:70970},end:{line:1,column:70982}},"1898":{start:{line:1,column:70985},end:{line:1,column:71017}},"1899":{start:{line:1,column:71020},end:{line:1,column:71065}},"1900":{start:{line:1,column:71068},end:{line:1,column:71071}},"1901":{start:{line:1,column:71074},end:{line:1,column:71082}},"1902":{start:{line:1,column:71085},end:{line:1,column:71109}},"1903":{start:{line:1,column:71110},end:{line:1,column:71535}},"1904":{start:{line:1,column:71120},end:{line:1,column:71121}},"1905":{start:{line:1,column:71137},end:{line:1,column:71141}},"1906":{start:{line:1,column:71144},end:{line:1,column:71150}},"1907":{start:{line:1,column:71151},end:{line:1,column:71184}},"1908":{start:{line:1,column:71165},end:{line:1,column:71175}},"1909":{start:{line:1,column:71175},end:{line:1,column:71183}},"1910":{start:{line:1,column:71190},end:{line:1,column:71207}},"1911":{start:{line:1,column:71210},end:{line:1,column:71217}},"1912":{start:{line:1,column:71220},end:{line:1,column:71251}},"1913":{start:{line:1,column:71254},end:{line:1,column:71332}},"1914":{start:{line:1,column:71333},end:{line:1,column:71534}},"1915":{start:{line:1,column:71559},end:{line:1,column:71575}},"1916":{start:{line:1,column:71578},end:{line:1,column:71587}},"1917":{start:{line:1,column:71590},end:{line:1,column:71625}},"1918":{start:{line:1,column:71628},end:{line:1,column:71638}},"1919":{start:{line:1,column:71639},end:{line:1,column:71661}},"1920":{start:{line:1,column:71652},end:{line:1,column:71661}},"1921":{start:{line:1,column:71667},end:{line:1,column:71711}},"1922":{start:{line:1,column:71714},end:{line:1,column:71776}},"1923":{start:{line:1,column:71777},end:{line:1,column:71801}},"1924":{start:{line:1,column:71815},end:{line:1,column:71831}},"1925":{start:{line:1,column:71832},end:{line:1,column:71910}},"1926":{start:{line:1,column:71912},end:{line:1,column:71920}},"1927":{start:{line:1,column:71928},end:{line:1,column:74591}},"1928":{start:{line:1,column:71963},end:{line:1,column:71974}},"1929":{start:{line:1,column:71991},end:{line:1,column:72196}},"1930":{start:{line:1,column:72214},end:{line:1,column:72825}},"1931":{start:{line:1,column:72278},end:{line:1,column:72284}},"1932":{start:{line:1,column:72285},end:{line:1,column:72612}},"1933":{start:{line:1,column:72359},end:{line:1,column:72375}},"1934":{start:{line:1,column:72376},end:{line:1,column:72611}},"1935":{start:{line:1,column:72410},end:{line:1,column:72452}},"1936":{start:{line:1,column:72453},end:{line:1,column:72609}},"1937":{start:{line:1,column:72612},end:{line:1,column:72620}},"1938":{start:{line:1,column:72638},end:{line:1,column:72692}},"1939":{start:{line:1,column:72843},end:{line:1,column:72901}},"1940":{start:{line:1,column:72928},end:{line:1,column:72944}},"1941":{start:{line:1,column:72947},end:{line:1,column:72957}},"1942":{start:{line:1,column:72960},end:{line:1,column:72977}},"1943":{start:{line:1,column:72980},end:{line:1,column:73015}},"1944":{start:{line:1,column:73016},end:{line:1,column:73046}},"1945":{start:{line:1,column:73072},end:{line:1,column:73101}},"1946":{start:{line:1,column:73118},end:{line:1,column:73139}},"1947":{start:{line:1,column:73140},end:{line:1,column:73196}},"1948":{start:{line:1,column:73215},end:{line:1,column:73231}},"1949":{start:{line:1,column:73234},end:{line:1,column:73293}},"1950":{start:{line:1,column:73294},end:{line:1,column:73437}},"1951":{start:{line:1,column:73330},end:{line:1,column:73349}},"1952":{start:{line:1,column:73350},end:{line:1,column:73433}},"1953":{start:{line:1,column:73460},end:{line:1,column:73470}},"1954":{start:{line:1,column:73473},end:{line:1,column:73484}},"1955":{start:{line:1,column:73487},end:{line:1,column:73496}},"1956":{start:{line:1,column:73499},end:{line:1,column:73538}},"1957":{start:{line:1,column:73541},end:{line:1,column:73556}},"1958":{start:{line:1,column:73559},end:{line:1,column:73616}},"1959":{start:{line:1,column:73619},end:{line:1,column:73651}},"1960":{start:{line:1,column:73652},end:{line:1,column:73719}},"1961":{start:{line:1,column:73750},end:{line:1,column:73761}},"1962":{start:{line:1,column:73764},end:{line:1,column:73774}},"1963":{start:{line:1,column:73777},end:{line:1,column:73796}},"1964":{start:{line:1,column:73799},end:{line:1,column:73822}},"1965":{start:{line:1,column:73825},end:{line:1,column:73834}},"1966":{start:{line:1,column:73837},end:{line:1,column:73846}},"1967":{start:{line:1,column:73849},end:{line:1,column:73872}},"1968":{start:{line:1,column:73875},end:{line:1,column:73876}},"1969":{start:{line:1,column:73881},end:{line:1,column:73912}},"1970":{start:{line:1,column:73913},end:{line:1,column:73958}},"1971":{start:{line:1,column:73929},end:{line:1,column:73958}},"1972":{start:{line:1,column:73958},end:{line:1,column:74316}},"1973":{start:{line:1,column:73983},end:{line:1,column:73987}},"1974":{start:{line:1,column:73990},end:{line:1,column:73991}},"1975":{start:{line:1,column:73994},end:{line:1,column:74021}},"1976":{start:{line:1,column:74024},end:{line:1,column:74101}},"1977":{start:{line:1,column:74102},end:{line:1,column:74158}},"1978":{start:{line:1,column:74164},end:{line:1,column:74287}},"1979":{start:{line:1,column:74288},end:{line:1,column:74315}},"1980":{start:{line:1,column:74346},end:{line:1,column:74362}},"1981":{start:{line:1,column:74365},end:{line:1,column:74366}},"1982":{start:{line:1,column:74367},end:{line:1,column:74466}},"1983":{start:{line:1,column:74397},end:{line:1,column:74462}},"1984":{start:{line:1,column:74488},end:{line:1,column:74577}},"1985":{start:{line:1,column:74579},end:{line:1,column:74587}},"1986":{start:{line:1,column:74595},end:{line:1,column:74718}},"1987":{start:{line:1,column:74630},end:{line:1,column:74635}},"1988":{start:{line:1,column:74652},end:{line:1,column:74705}},"1989":{start:{line:1,column:74706},end:{line:1,column:74714}},"1990":{start:{line:1,column:74722},end:{line:1,column:75818}},"1991":{start:{line:1,column:74757},end:{line:1,column:74764}},"1992":{start:{line:1,column:74781},end:{line:1,column:74889}},"1993":{start:{line:1,column:74907},end:{line:1,column:74955}},"1994":{start:{line:1,column:74982},end:{line:1,column:75005}},"1995":{start:{line:1,column:75008},end:{line:1,column:75025}},"1996":{start:{line:1,column:75026},end:{line:1,column:75095}},"1997":{start:{line:1,column:75121},end:{line:1,column:75150}},"1998":{start:{line:1,column:75167},end:{line:1,column:75183}},"1999":{start:{line:1,column:75186},end:{line:1,column:75195}},"2000":{start:{line:1,column:75198},end:{line:1,column:75208}},"2001":{start:{line:1,column:75211},end:{line:1,column:75231}},"2002":{start:{line:1,column:75232},end:{line:1,column:75434}},"2003":{start:{line:1,column:75266},end:{line:1,column:75302}},"2004":{start:{line:1,column:75303},end:{line:1,column:75344}},"2005":{start:{line:1,column:75350},end:{line:1,column:75400}},"2006":{start:{line:1,column:75401},end:{line:1,column:75433}},"2007":{start:{line:1,column:75434},end:{line:1,column:75469}},"2008":{start:{line:1,column:75500},end:{line:1,column:75523}},"2009":{start:{line:1,column:75526},end:{line:1,column:75537}},"2010":{start:{line:1,column:75538},end:{line:1,column:75804}},"2011":{start:{line:1,column:75548},end:{line:1,column:75549}},"2012":{start:{line:1,column:75567},end:{line:1,column:75571}},"2013":{start:{line:1,column:75574},end:{line:1,column:75627}},"2014":{start:{line:1,column:75630},end:{line:1,column:75679}},"2015":{start:{line:1,column:75682},end:{line:1,column:75697}},"2016":{start:{line:1,column:75700},end:{line:1,column:75715}},"2017":{start:{line:1,column:75718},end:{line:1,column:75775}},"2018":{start:{line:1,column:75776},end:{line:1,column:75803}},"2019":{start:{line:1,column:75806},end:{line:1,column:75814}},"2020":{start:{line:1,column:75822},end:{line:1,column:78199}},"2021":{start:{line:1,column:75857},end:{line:1,column:75866}},"2022":{start:{line:1,column:75883},end:{line:1,column:75950}},"2023":{start:{line:1,column:75968},end:{line:1,column:76041}},"2024":{start:{line:1,column:76068},end:{line:1,column:76084}},"2025":{start:{line:1,column:76087},end:{line:1,column:76113}},"2026":{start:{line:1,column:76134},end:{line:1,column:76135}},"2027":{start:{line:1,column:76138},end:{line:1,column:76155}},"2028":{start:{line:1,column:76158},end:{line:1,column:76181}},"2029":{start:{line:1,column:76184},end:{line:1,column:76207}},"2030":{start:{line:1,column:76208},end:{line:1,column:76253}},"2031":{start:{line:1,column:76270},end:{line:1,column:76286}},"2032":{start:{line:1,column:76299},end:{line:1,column:76300}},"2033":{start:{line:1,column:76303},end:{line:1,column:76333}},"2034":{start:{line:1,column:76352},end:{line:1,column:76361}},"2035":{start:{line:1,column:76362},end:{line:1,column:76811}},"2036":{start:{line:1,column:76448},end:{line:1,column:76492}},"2037":{start:{line:1,column:76518},end:{line:1,column:76519}},"2038":{start:{line:1,column:76520},end:{line:1,column:76606}},"2039":{start:{line:1,column:76612},end:{line:1,column:76648}},"2040":{start:{line:1,column:76649},end:{line:1,column:76734}},"2041":{start:{line:1,column:76740},end:{line:1,column:76811}},"2042":{start:{line:1,column:76811},end:{line:1,column:76839}},"2043":{start:{line:1,column:76870},end:{line:1,column:76882}},"2044":{start:{line:1,column:76883},end:{line:1,column:76996}},"2045":{start:{line:1,column:77027},end:{line:1,column:77038}},"2046":{start:{line:1,column:77081},end:{line:1,column:77097}},"2047":{start:{line:1,column:77100},end:{line:1,column:77135}},"2048":{start:{line:1,column:77138},end:{line:1,column:77162}},"2049":{start:{line:1,column:77165},end:{line:1,column:77189}},"2050":{start:{line:1,column:77192},end:{line:1,column:77198}},"2051":{start:{line:1,column:77201},end:{line:1,column:77207}},"2052":{start:{line:1,column:77231},end:{line:1,column:77243}},"2053":{start:{line:1,column:77246},end:{line:1,column:77278}},"2054":{start:{line:1,column:77281},end:{line:1,column:77326}},"2055":{start:{line:1,column:77329},end:{line:1,column:77353}},"2056":{start:{line:1,column:77354},end:{line:1,column:77744}},"2057":{start:{line:1,column:77364},end:{line:1,column:77365}},"2058":{start:{line:1,column:77383},end:{line:1,column:77387}},"2059":{start:{line:1,column:77390},end:{line:1,column:77407}},"2060":{start:{line:1,column:77410},end:{line:1,column:77416}},"2061":{start:{line:1,column:77419},end:{line:1,column:77426}},"2062":{start:{line:1,column:77429},end:{line:1,column:77460}},"2063":{start:{line:1,column:77463},end:{line:1,column:77541}},"2064":{start:{line:1,column:77542},end:{line:1,column:77743}},"2065":{start:{line:1,column:77744},end:{line:1,column:77775}},"2066":{start:{line:1,column:77799},end:{line:1,column:77815}},"2067":{start:{line:1,column:77818},end:{line:1,column:77828}},"2068":{start:{line:1,column:77829},end:{line:1,column:77969}},"2069":{start:{line:1,column:77862},end:{line:1,column:77863}},"2070":{start:{line:1,column:77864},end:{line:1,column:77955}},"2071":{start:{line:1,column:77874},end:{line:1,column:77884}},"2072":{start:{line:1,column:77894},end:{line:1,column:77955}},"2073":{start:{line:1,column:77955},end:{line:1,column:77968}},"2074":{start:{line:1,column:77975},end:{line:1,column:77984}},"2075":{start:{line:1,column:77987},end:{line:1,column:78022}},"2076":{start:{line:1,column:78023},end:{line:1,column:78045}},"2077":{start:{line:1,column:78036},end:{line:1,column:78045}},"2078":{start:{line:1,column:78051},end:{line:1,column:78095}},"2079":{start:{line:1,column:78098},end:{line:1,column:78160}},"2080":{start:{line:1,column:78161},end:{line:1,column:78185}},"2081":{start:{line:1,column:78187},end:{line:1,column:78195}},"2082":{start:{line:1,column:78203},end:{line:1,column:78391}},"2083":{start:{line:1,column:78406},end:{line:1,column:78504}},"2084":{start:{line:1,column:78512},end:{line:1,column:78761}},"2085":{start:{line:1,column:78539},end:{line:1,column:78567}},"2086":{start:{line:1,column:78591},end:{line:1,column:78609}},"2087":{start:{line:1,column:78628},end:{line:1,column:78639}},"2088":{start:{line:1,column:78648},end:{line:1,column:78659}},"2089":{start:{line:1,column:78669},end:{line:1,column:78680}},"2090":{start:{line:1,column:78687},end:{line:1,column:78698}},"2091":{start:{line:1,column:78706},end:{line:1,column:78717}},"2092":{start:{line:1,column:78728},end:{line:1,column:78739}},"2093":{start:{line:1,column:78748},end:{line:1,column:78759}},"2094":{start:{line:1,column:78765},end:{line:1,column:78775}},"2095":{start:{line:1,column:78832},end:{line:1,column:78833}},"2096":{start:{line:1,column:78836},end:{line:1,column:78856}},"2097":{start:{line:1,column:78859},end:{line:1,column:78919}},"2098":{start:{line:1,column:78920},end:{line:1,column:79360}},"2099":{start:{line:1,column:78966},end:{line:1,column:78988}},"2100":{start:{line:1,column:78989},end:{line:1,column:79359}},"2101":{start:{line:1,column:78995},end:{line:1,column:79135}},"2102":{start:{line:1,column:79022},end:{line:1,column:79026}},"2103":{start:{line:1,column:79029},end:{line:1,column:79073}},"2104":{start:{line:1,column:79074},end:{line:1,column:79134}},"2105":{start:{line:1,column:79086},end:{line:1,column:79096}},"2106":{start:{line:1,column:79099},end:{line:1,column:79109}},"2107":{start:{line:1,column:79110},end:{line:1,column:79133}},"2108":{start:{line:1,column:79147},end:{line:1,column:79155}},"2109":{start:{line:1,column:79156},end:{line:1,column:79350}},"2110":{start:{line:1,column:79176},end:{line:1,column:79189}},"2111":{start:{line:1,column:79202},end:{line:1,column:79203}},"2112":{start:{line:1,column:79206},end:{line:1,column:79261}},"2113":{start:{line:1,column:79247},end:{line:1,column:79260}},"2114":{start:{line:1,column:79262},end:{line:1,column:79282}},"2115":{start:{line:1,column:79288},end:{line:1,column:79329}},"2116":{start:{line:1,column:79315},end:{line:1,column:79328}},"2117":{start:{line:1,column:79330},end:{line:1,column:79349}},"2118":{start:{line:1,column:79350},end:{line:1,column:79358}},"2119":{start:{line:1,column:79360},end:{line:1,column:79386}},"2120":{start:{line:1,column:79416},end:{line:1,column:79448}},"2121":{start:{line:1,column:79451},end:{line:1,column:79455}},"2122":{start:{line:1,column:79456},end:{line:1,column:79591}},"2123":{start:{line:1,column:79466},end:{line:1,column:79467}},"2124":{start:{line:1,column:79470},end:{line:1,column:79478}},"2125":{start:{line:1,column:79508},end:{line:1,column:79512}},"2126":{start:{line:1,column:79525},end:{line:1,column:79539}},"2127":{start:{line:1,column:79540},end:{line:1,column:79590}},"2128":{start:{line:1,column:79550},end:{line:1,column:79551}},"2129":{start:{line:1,column:79568},end:{line:1,column:79572}},"2130":{start:{line:1,column:79573},end:{line:1,column:79589}},"2131":{start:{line:1,column:79613},end:{line:1,column:79632}},"2132":{start:{line:1,column:79635},end:{line:1,column:79654}},"2133":{start:{line:1,column:79655},end:{line:1,column:79774}},"2134":{start:{line:1,column:79682},end:{line:1,column:79703}},"2135":{start:{line:1,column:79706},end:{line:1,column:79727}},"2136":{start:{line:1,column:79728},end:{line:1,column:79773}},"2137":{start:{line:1,column:79804},end:{line:1,column:79806}},"2138":{start:{line:1,column:79807},end:{line:1,column:79960}},"2139":{start:{line:1,column:79863},end:{line:1,column:79953}},"2140":{start:{line:1,column:79988},end:{line:1,column:79990}},"2141":{start:{line:1,column:80038},end:{line:1,column:80077}},"2142":{start:{line:1,column:80088},end:{line:1,column:80107}},"2143":{start:{line:1,column:80108},end:{line:1,column:80161}},"2144":{start:{line:1,column:80162},end:{line:1,column:80182}},"2145":{start:{line:1,column:80214},end:{line:1,column:80216}},"2146":{start:{line:1,column:80219},end:{line:1,column:80224}},"2147":{start:{line:1,column:80227},end:{line:1,column:80251}},"2148":{start:{line:1,column:80276},end:{line:1,column:80296}},"2149":{start:{line:1,column:80297},end:{line:1,column:80313}},"2150":{start:{line:1,column:80306},end:{line:1,column:80313}},"2151":{start:{line:1,column:80319},end:{line:1,column:80338}},"2152":{start:{line:1,column:80339},end:{line:1,column:80380}},"2153":{start:{line:1,column:80373},end:{line:1,column:80380}},"2154":{start:{line:1,column:80386},end:{line:1,column:80392}},"2155":{start:{line:1,column:80393},end:{line:1,column:80491}},"2156":{start:{line:1,column:80492},end:{line:1,column:80512}},"2157":{start:{line:1,column:80538},end:{line:1,column:80610}},"2158":{start:{line:1,column:80640},end:{line:1,column:80642}},"2159":{start:{line:1,column:80645},end:{line:1,column:80674}},"2160":{start:{line:1,column:80677},end:{line:1,column:80679}},"2161":{start:{line:1,column:80680},end:{line:1,column:80809}},"2162":{start:{line:1,column:80706},end:{line:1,column:80796}},"2163":{start:{line:1,column:80817},end:{line:1,column:81717}},"2164":{start:{line:1,column:80874},end:{line:1,column:80881}},"2165":{start:{line:1,column:80884},end:{line:1,column:80895}},"2166":{start:{line:1,column:80898},end:{line:1,column:80920}},"2167":{start:{line:1,column:80923},end:{line:1,column:80965}},"2168":{start:{line:1,column:80968},end:{line:1,column:80970}},"2169":{start:{line:1,column:80971},end:{line:1,column:81130}},"2170":{start:{line:1,column:81039},end:{line:1,column:81049}},"2171":{start:{line:1,column:81052},end:{line:1,column:81061}},"2172":{start:{line:1,column:81062},end:{line:1,column:81122}},"2173":{start:{line:1,column:81155},end:{line:1,column:81162}},"2174":{start:{line:1,column:81165},end:{line:1,column:81177}},"2175":{start:{line:1,column:81180},end:{line:1,column:81202}},"2176":{start:{line:1,column:81205},end:{line:1,column:81247}},"2177":{start:{line:1,column:81248},end:{line:1,column:81392}},"2178":{start:{line:1,column:81269},end:{line:1,column:81286}},"2179":{start:{line:1,column:81289},end:{line:1,column:81313}},"2180":{start:{line:1,column:81314},end:{line:1,column:81319}},"2181":{start:{line:1,column:81319},end:{line:1,column:81391}},"2182":{start:{line:1,column:81329},end:{line:1,column:81330}},"2183":{start:{line:1,column:81346},end:{line:1,column:81391}},"2184":{start:{line:1,column:81392},end:{line:1,column:81400}},"2185":{start:{line:1,column:81423},end:{line:1,column:81430}},"2186":{start:{line:1,column:81433},end:{line:1,column:81445}},"2187":{start:{line:1,column:81448},end:{line:1,column:81470}},"2188":{start:{line:1,column:81471},end:{line:1,column:81491}},"2189":{start:{line:1,column:81516},end:{line:1,column:81523}},"2190":{start:{line:1,column:81526},end:{line:1,column:81538}},"2191":{start:{line:1,column:81541},end:{line:1,column:81563}},"2192":{start:{line:1,column:81564},end:{line:1,column:81596}},"2193":{start:{line:1,column:81615},end:{line:1,column:81622}},"2194":{start:{line:1,column:81623},end:{line:1,column:81655}},"2195":{start:{line:1,column:81674},end:{line:1,column:81681}},"2196":{start:{line:1,column:81682},end:{line:1,column:81714}},"2197":{start:{line:1,column:81721},end:{line:1,column:81752}},"2198":{start:{line:1,column:81770},end:{line:1,column:81799}},"2199":{start:{line:1,column:81789},end:{line:1,column:81798}},"2200":{start:{line:1,column:81817},end:{line:1,column:81875}},"2201":{start:{line:1,column:81836},end:{line:1,column:81874}},"2202":{start:{line:1,column:81893},end:{line:1,column:81997}},"2203":{start:{line:1,column:81921},end:{line:1,column:81926}},"2204":{start:{line:1,column:81929},end:{line:1,column:81934}},"2205":{start:{line:1,column:81935},end:{line:1,column:81995}},"2206":{start:{line:1,column:82019},end:{line:1,column:82021}},"2207":{start:{line:1,column:82034},end:{line:1,column:82224}},"2208":{start:{line:1,column:82067},end:{line:1,column:82224}},"2209":{start:{line:1,column:82224},end:{line:1,column:82232}},"2210":{start:{line:1,column:82254},end:{line:1,column:82256}},"2211":{start:{line:1,column:82257},end:{line:1,column:82416}},"2212":{start:{line:1,column:82306},end:{line:1,column:82307}},"2213":{start:{line:1,column:82308},end:{line:1,column:82340}},"2214":{start:{line:1,column:82331},end:{line:1,column:82340}},"2215":{start:{line:1,column:82346},end:{line:1,column:82393}},"2216":{start:{line:1,column:82394},end:{line:1,column:82415}},"2217":{start:{line:1,column:82416},end:{line:1,column:82424}},"2218":{start:{line:1,column:82448},end:{line:1,column:82453}},"2219":{start:{line:1,column:82487},end:{line:1,column:82488}},"2220":{start:{line:1,column:82495},end:{line:1,column:82701}},"2221":{start:{line:1,column:82523},end:{line:1,column:82530}},"2222":{start:{line:1,column:82546},end:{line:1,column:82551}},"2223":{start:{line:1,column:82554},end:{line:1,column:82564}},"2224":{start:{line:1,column:82567},end:{line:1,column:82592}},"2225":{start:{line:1,column:82593},end:{line:1,column:82700}},"2226":{start:{line:1,column:82701},end:{line:1,column:82709}},"2227":{start:{line:1,column:82731},end:{line:1,column:82736}},"2228":{start:{line:1,column:82739},end:{line:1,column:82773}},"2229":{start:{line:1,column:82754},end:{line:1,column:82768}},"2230":{start:{line:1,column:82776},end:{line:1,column:82795}},"2231":{start:{line:1,column:82798},end:{line:1,column:82815}},"2232":{start:{line:1,column:82818},end:{line:1,column:82836}},"2233":{start:{line:1,column:82839},end:{line:1,column:82857}},"2234":{start:{line:1,column:82860},end:{line:1,column:82869}},"2235":{start:{line:1,column:82872},end:{line:1,column:82881}},"2236":{start:{line:1,column:82882},end:{line:1,column:83062}},"2237":{start:{line:1,column:83084},end:{line:1,column:83130}},"2238":{start:{line:1,column:83148},end:{line:1,column:83277}},"2239":{start:{line:1,column:83316},end:{line:1,column:83317}},"2240":{start:{line:1,column:83320},end:{line:1,column:83332}},"2241":{start:{line:1,column:83333},end:{line:1,column:83490}},"2242":{start:{line:1,column:83343},end:{line:1,column:83366}},"2243":{start:{line:1,column:83372},end:{line:1,column:83400}},"2244":{start:{line:1,column:83401},end:{line:1,column:83489}},"2245":{start:{line:1,column:83490},end:{line:1,column:83525}},"2246":{start:{line:1,column:83531},end:{line:1,column:83578}},"2247":{start:{line:1,column:83581},end:{line:1,column:83629}},"2248":{start:{line:1,column:83632},end:{line:1,column:83639}},"2249":{start:{line:1,column:83642},end:{line:1,column:83649}},"2250":{start:{line:1,column:83650},end:{line:1,column:83715}},"2251":{start:{line:1,column:83737},end:{line:1,column:83749}},"2252":{start:{line:1,column:83770},end:{line:1,column:83791}},"2253":{start:{line:1,column:83792},end:{line:1,column:83808}},"2254":{start:{line:1,column:83809},end:{line:1,column:83860}},"2255":{start:{line:1,column:83884},end:{line:1,column:83896}},"2256":{start:{line:1,column:83917},end:{line:1,column:83948}},"2257":{start:{line:1,column:83949},end:{line:1,column:83998}},"2258":{start:{line:1,column:83970},end:{line:1,column:83994}},"2259":{start:{line:1,column:83999},end:{line:1,column:84044}},"2260":{start:{line:1,column:84072},end:{line:1,column:84074}},"2261":{start:{line:1,column:84087},end:{line:1,column:84266}},"2262":{start:{line:1,column:84119},end:{line:1,column:84190}},"2263":{start:{line:1,column:84210},end:{line:1,column:84221}},"2264":{start:{line:1,column:84222},end:{line:1,column:84265}},"2265":{start:{line:1,column:84266},end:{line:1,column:84290}},"2266":{start:{line:1,column:84314},end:{line:1,column:84376}},"2267":{start:{line:1,column:84404},end:{line:1,column:84413}},"2268":{start:{line:1,column:84424},end:{line:1,column:84425}},"2269":{start:{line:1,column:84426},end:{line:1,column:84890}},"2270":{start:{line:1,column:84448},end:{line:1,column:84453}},"2271":{start:{line:1,column:84456},end:{line:1,column:84495}},"2272":{start:{line:1,column:84498},end:{line:1,column:84523}},"2273":{start:{line:1,column:84524},end:{line:1,column:84889}},"2274":{start:{line:1,column:84547},end:{line:1,column:84552}},"2275":{start:{line:1,column:84555},end:{line:1,column:84571}},"2276":{start:{line:1,column:84572},end:{line:1,column:84713}},"2277":{start:{line:1,column:84725},end:{line:1,column:84730}},"2278":{start:{line:1,column:84733},end:{line:1,column:84748}},"2279":{start:{line:1,column:84749},end:{line:1,column:84888}},"2280":{start:{line:1,column:84890},end:{line:1,column:84901}},"2281":{start:{line:1,column:84908},end:{line:1,column:86139}},"2282":{start:{line:1,column:84921},end:{line:1,column:85100}},"2283":{start:{line:1,column:85051},end:{line:1,column:85083}},"2284":{start:{line:1,column:85071},end:{line:1,column:85080}},"2285":{start:{line:1,column:85123},end:{line:1,column:85152}},"2286":{start:{line:1,column:85153},end:{line:1,column:85180}},"2287":{start:{line:1,column:85199},end:{line:1,column:85260}},"2288":{start:{line:1,column:85278},end:{line:1,column:85291}},"2289":{start:{line:1,column:85284},end:{line:1,column:85291}},"2290":{start:{line:1,column:85297},end:{line:1,column:85324}},"2291":{start:{line:1,column:85327},end:{line:1,column:85348}},"2292":{start:{line:1,column:85351},end:{line:1,column:85373}},"2293":{start:{line:1,column:85376},end:{line:1,column:85387}},"2294":{start:{line:1,column:85390},end:{line:1,column:85400}},"2295":{start:{line:1,column:85403},end:{line:1,column:85415}},"2296":{start:{line:1,column:85416},end:{line:1,column:85484}},"2297":{start:{line:1,column:85430},end:{line:1,column:85481}},"2298":{start:{line:1,column:85490},end:{line:1,column:85559}},"2299":{start:{line:1,column:85506},end:{line:1,column:85553}},"2300":{start:{line:1,column:85562},end:{line:1,column:85687}},"2301":{start:{line:1,column:85690},end:{line:1,column:85709}},"2302":{start:{line:1,column:85710},end:{line:1,column:85721}},"2303":{start:{line:1,column:85727},end:{line:1,column:85783}},"2304":{start:{line:1,column:85786},end:{line:1,column:85803}},"2305":{start:{line:1,column:85804},end:{line:1,column:86137}},"2306":{start:{line:1,column:86051},end:{line:1,column:86056}},"2307":{start:{line:1,column:86057},end:{line:1,column:86135}},"2308":{start:{line:1,column:86143},end:{line:1,column:86441}},"2309":{start:{line:1,column:86188},end:{line:1,column:86196}},"2310":{start:{line:1,column:86272},end:{line:1,column:86280}},"2311":{start:{line:1,column:86305},end:{line:1,column:86399}},"2312":{start:{line:1,column:86414},end:{line:1,column:86422}},"2313":{start:{line:1,column:86445},end:{line:1,column:86569}},"2314":{start:{line:1,column:86480},end:{line:1,column:86528}},"2315":{start:{line:1,column:86545},end:{line:1,column:86567}},"2316":{start:{line:1,column:86573},end:{line:1,column:86583}},"2317":{start:{line:1,column:86587},end:{line:1,column:86792}},"2318":{start:{line:1,column:86796},end:{line:1,column:86815}},"2319":{start:{line:1,column:86799},end:{line:1,column:86815}},"2320":{start:{line:1,column:86839},end:{line:1,column:86846}},"2321":{start:{line:1,column:86849},end:{line:1,column:86873}},"2322":{start:{line:1,column:86876},end:{line:1,column:86899}},"2323":{start:{line:1,column:86900},end:{line:1,column:87112}},"2324":{start:{line:1,column:87074},end:{line:1,column:87087}},"2325":{start:{line:1,column:87088},end:{line:1,column:87111}},"2326":{start:{line:1,column:87112},end:{line:1,column:87219}},"2327":{start:{line:1,column:87121},end:{line:1,column:87219}},"2328":{start:{line:1,column:87144},end:{line:1,column:87168}},"2329":{start:{line:1,column:87179},end:{line:1,column:87193}},"2330":{start:{line:1,column:87194},end:{line:1,column:87218}},"2331":{start:{line:1,column:87219},end:{line:1,column:87227}},"2332":{start:{line:1,column:87235},end:{line:1,column:87253}},"2333":{start:{line:1,column:87273},end:{line:1,column:87302}},"2334":{start:{line:1,column:87322},end:{line:1,column:87371}},"2335":{start:{line:1,column:87395},end:{line:1,column:87413}},"2336":{start:{line:1,column:87424},end:{line:1,column:87431}},"2337":{start:{line:1,column:87432},end:{line:1,column:87503}},"2338":{start:{line:1,column:87521},end:{line:1,column:87568}},"2339":{start:{line:1,column:87536},end:{line:1,column:87568}},"2340":{start:{line:1,column:87560},end:{line:1,column:87568}},"2341":{start:{line:1,column:87594},end:{line:1,column:87602}},"2342":{start:{line:1,column:87605},end:{line:1,column:87713}},"2343":{start:{line:1,column:87636},end:{line:1,column:87638}},"2344":{start:{line:1,column:87639},end:{line:1,column:87705}},"2345":{start:{line:1,column:87654},end:{line:1,column:87705}},"2346":{start:{line:1,column:87705},end:{line:1,column:87711}},"2347":{start:{line:1,column:87714},end:{line:1,column:87768}},"2348":{start:{line:1,column:87794},end:{line:1,column:87802}},"2349":{start:{line:1,column:87805},end:{line:1,column:87913}},"2350":{start:{line:1,column:87836},end:{line:1,column:87838}},"2351":{start:{line:1,column:87839},end:{line:1,column:87905}},"2352":{start:{line:1,column:87854},end:{line:1,column:87905}},"2353":{start:{line:1,column:87905},end:{line:1,column:87911}},"2354":{start:{line:1,column:87914},end:{line:1,column:87968}},"2355":{start:{line:1,column:87976},end:{line:1,column:87983}},"2356":{start:{line:1,column:87987},end:{line:1,column:87988}},"2357":{start:{line:1,column:88009},end:{line:1,column:88032}},"2358":{start:{line:1,column:88033},end:{line:1,column:88103}},"2359":{start:{line:1,column:88066},end:{line:1,column:88100}},"2360":{start:{line:1,column:88121},end:{line:1,column:88178}},"2361":{start:{line:1,column:88194},end:{line:1,column:88255}},"2362":{start:{line:1,column:88281},end:{line:1,column:88289}},"2363":{start:{line:1,column:88292},end:{line:1,column:88300}},"2364":{start:{line:1,column:88301},end:{line:1,column:88314}},"2365":{start:{line:1,column:88307},end:{line:1,column:88314}},"2366":{start:{line:1,column:88320},end:{line:1,column:88387}},"2367":{start:{line:1,column:88337},end:{line:1,column:88350}},"2368":{start:{line:1,column:88351},end:{line:1,column:88378}},"2369":{start:{line:1,column:88390},end:{line:1,column:88491}},"2370":{start:{line:1,column:88419},end:{line:1,column:88423}},"2371":{start:{line:1,column:88426},end:{line:1,column:88445}},"2372":{start:{line:1,column:88448},end:{line:1,column:88468}},"2373":{start:{line:1,column:88469},end:{line:1,column:88489}},"2374":{start:{line:1,column:88492},end:{line:1,column:88521}},"2375":{start:{line:1,column:88541},end:{line:1,column:88578}},"2376":{start:{line:1,column:88604},end:{line:1,column:88612}},"2377":{start:{line:1,column:88615},end:{line:1,column:88650}},"2378":{start:{line:1,column:88622},end:{line:1,column:88646}},"2379":{start:{line:1,column:88651},end:{line:1,column:88669}},"2380":{start:{line:1,column:88677},end:{line:1,column:89495}},"2381":{start:{line:1,column:88720},end:{line:1,column:88755}},"2382":{start:{line:1,column:88756},end:{line:1,column:88795}},"2383":{start:{line:1,column:88820},end:{line:1,column:88828}},"2384":{start:{line:1,column:88829},end:{line:1,column:88848}},"2385":{start:{line:1,column:88839},end:{line:1,column:88848}},"2386":{start:{line:1,column:88854},end:{line:1,column:88867}},"2387":{start:{line:1,column:88868},end:{line:1,column:88958}},"2388":{start:{line:1,column:88905},end:{line:1,column:88909}},"2389":{start:{line:1,column:88910},end:{line:1,column:88955}},"2390":{start:{line:1,column:88964},end:{line:1,column:88975}},"2391":{start:{line:1,column:88976},end:{line:1,column:89059}},"2392":{start:{line:1,column:89010},end:{line:1,column:89025}},"2393":{start:{line:1,column:89084},end:{line:1,column:89114}},"2394":{start:{line:1,column:89120},end:{line:1,column:89147}},"2395":{start:{line:1,column:89150},end:{line:1,column:89188}},"2396":{start:{line:1,column:89189},end:{line:1,column:89202}},"2397":{start:{line:1,column:89234},end:{line:1,column:89261}},"2398":{start:{line:1,column:89264},end:{line:1,column:89268}},"2399":{start:{line:1,column:89269},end:{line:1,column:89282}},"2400":{start:{line:1,column:89275},end:{line:1,column:89282}},"2401":{start:{line:1,column:89282},end:{line:1,column:89341}},"2402":{start:{line:1,column:89364},end:{line:1,column:89394}},"2403":{start:{line:1,column:89419},end:{line:1,column:89437}},"2404":{start:{line:1,column:89458},end:{line:1,column:89466}},"2405":{start:{line:1,column:89467},end:{line:1,column:89493}},"2406":{start:{line:1,column:89511},end:{line:1,column:89586}},"2407":{start:{line:1,column:89594},end:{line:1,column:89933}},"2408":{start:{line:1,column:89616},end:{line:1,column:89618}},"2409":{start:{line:1,column:89640},end:{line:1,column:89646}},"2410":{start:{line:1,column:89658},end:{line:1,column:89660}},"2411":{start:{line:1,column:89713},end:{line:1,column:89739}},"2412":{start:{line:1,column:89740},end:{line:1,column:89755}},"2413":{start:{line:1,column:89767},end:{line:1,column:89796}},"2414":{start:{line:1,column:89817},end:{line:1,column:89833}},"2415":{start:{line:1,column:89834},end:{line:1,column:89856}},"2416":{start:{line:1,column:89844},end:{line:1,column:89856}},"2417":{start:{line:1,column:89862},end:{line:1,column:89864}},"2418":{start:{line:1,column:89865},end:{line:1,column:89931}},"2419":{start:{line:1,column:89886},end:{line:1,column:89927}},"2420":{start:{line:1,column:89957},end:{line:1,column:89972}},"2421":{start:{line:1,column:89975},end:{line:1,column:89980}},"2422":{start:{line:1,column:89983},end:{line:1,column:90013}},"2423":{start:{line:1,column:90016},end:{line:1,column:90040}},"2424":{start:{line:1,column:90043},end:{line:1,column:90051}},"2425":{start:{line:1,column:90054},end:{line:1,column:90058}},"2426":{start:{line:1,column:90061},end:{line:1,column:90067}},"2427":{start:{line:1,column:90070},end:{line:1,column:90072}},"2428":{start:{line:1,column:90073},end:{line:1,column:90103}},"2429":{start:{line:1,column:90080},end:{line:1,column:90103}},"2430":{start:{line:1,column:90109},end:{line:1,column:90118}},"2431":{start:{line:1,column:90119},end:{line:1,column:90276}},"2432":{start:{line:1,column:90137},end:{line:1,column:90169}},"2433":{start:{line:1,column:90170},end:{line:1,column:90237}},"2434":{start:{line:1,column:90215},end:{line:1,column:90237}},"2435":{start:{line:1,column:90237},end:{line:1,column:90275}},"2436":{start:{line:1,column:90276},end:{line:1,column:90294}},"2437":{start:{line:1,column:90316},end:{line:1,column:90332}},"2438":{start:{line:1,column:90335},end:{line:1,column:90348}},"2439":{start:{line:1,column:90351},end:{line:1,column:90370}},"2440":{start:{line:1,column:90373},end:{line:1,column:90387}},"2441":{start:{line:1,column:90388},end:{line:1,column:90420}},"2442":{start:{line:1,column:90446},end:{line:1,column:90451}},"2443":{start:{line:1,column:90454},end:{line:1,column:90464}},"2444":{start:{line:1,column:90465},end:{line:1,column:90492}},"2445":{start:{line:1,column:90471},end:{line:1,column:90492}},"2446":{start:{line:1,column:90498},end:{line:1,column:90503}},"2447":{start:{line:1,column:90504},end:{line:1,column:90565}},"2448":{start:{line:1,column:90514},end:{line:1,column:90515}},"2449":{start:{line:1,column:90518},end:{line:1,column:90528}},"2450":{start:{line:1,column:90544},end:{line:1,column:90548}},"2451":{start:{line:1,column:90549},end:{line:1,column:90564}},"2452":{start:{line:1,column:90556},end:{line:1,column:90564}},"2453":{start:{line:1,column:90565},end:{line:1,column:90585}},"2454":{start:{line:1,column:90607},end:{line:1,column:90609}},"2455":{start:{line:1,column:90614},end:{line:1,column:90663}},"2456":{start:{line:1,column:90641},end:{line:1,column:90663}},"2457":{start:{line:1,column:90663},end:{line:1,column:90671}},"2458":{start:{line:1,column:90699},end:{line:1,column:90700}},"2459":{start:{line:1,column:90703},end:{line:1,column:90707}},"2460":{start:{line:1,column:90710},end:{line:1,column:90782}},"2461":{start:{line:1,column:90748},end:{line:1,column:90782}},"2462":{start:{line:1,column:90812},end:{line:1,column:90818}},"2463":{start:{line:1,column:90821},end:{line:1,column:90853}},"2464":{start:{line:1,column:90856},end:{line:1,column:90857}},"2465":{start:{line:1,column:90864},end:{line:1,column:90947}},"2466":{start:{line:1,column:90923},end:{line:1,column:90947}},"2467":{start:{line:1,column:90947},end:{line:1,column:91020}},"2468":{start:{line:1,column:90975},end:{line:1,column:91020}},"2469":{start:{line:1,column:91042},end:{line:1,column:91050}},"2470":{start:{line:1,column:91055},end:{line:1,column:91071}},"2471":{start:{line:1,column:91062},end:{line:1,column:91071}},"2472":{start:{line:1,column:91071},end:{line:1,column:91122}},"2473":{start:{line:1,column:91094},end:{line:1,column:91122}},"2474":{start:{line:1,column:91113},end:{line:1,column:91122}},"2475":{start:{line:1,column:91122},end:{line:1,column:91130}},"2476":{start:{line:1,column:91138},end:{line:1,column:91180}},"2477":{start:{line:1,column:91141},end:{line:1,column:91180}},"2478":{start:{line:1,column:91184},end:{line:1,column:91228}},"2479":{start:{line:1,column:91193},end:{line:1,column:91228}},"2480":{start:{line:1,column:91232},end:{line:1,column:91255}},"2481":{start:{line:1,column:91239},end:{line:1,column:91255}},"2482":{start:{line:1,column:91279},end:{line:1,column:91281}},"2483":{start:{line:1,column:91284},end:{line:1,column:91294}},"2484":{start:{line:1,column:91297},end:{line:1,column:91305}},"2485":{start:{line:1,column:91308},end:{line:1,column:91309}},"2486":{start:{line:1,column:91310},end:{line:1,column:91349}},"2487":{start:{line:1,column:91324},end:{line:1,column:91349}},"2488":{start:{line:1,column:91349},end:{line:1,column:91357}},"2489":{start:{line:1,column:91383},end:{line:1,column:91397}},"2490":{start:{line:1,column:91400},end:{line:1,column:91415}},"2491":{start:{line:1,column:91418},end:{line:1,column:91431}},"2492":{start:{line:1,column:91434},end:{line:1,column:91445}},"2493":{start:{line:1,column:91448},end:{line:1,column:91452}},"2494":{start:{line:1,column:91455},end:{line:1,column:91475}},"2495":{start:{line:1,column:91478},end:{line:1,column:91614}},"2496":{start:{line:1,column:91606},end:{line:1,column:91614}},"2497":{start:{line:1,column:91632},end:{line:1,column:91726}},"2498":{start:{line:1,column:91646},end:{line:1,column:91650}},"2499":{start:{line:1,column:91653},end:{line:1,column:91663}},"2500":{start:{line:1,column:91666},end:{line:1,column:91724}},"2501":{start:{line:1,column:91674},end:{line:1,column:91710}},"2502":{start:{line:1,column:91690},end:{line:1,column:91710}},"2503":{start:{line:1,column:91710},end:{line:1,column:91723}},"2504":{start:{line:1,column:91742},end:{line:1,column:91775}},"2505":{start:{line:1,column:91793},end:{line:1,column:91816}},"2506":{start:{line:1,column:91807},end:{line:1,column:91816}},"2507":{start:{line:1,column:91822},end:{line:1,column:91833}},"2508":{start:{line:1,column:91836},end:{line:1,column:91848}},"2509":{start:{line:1,column:91849},end:{line:1,column:91904}},"2510":{start:{line:1,column:91922},end:{line:1,column:91957}},"2511":{start:{line:1,column:91977},end:{line:1,column:92018}},"2512":{start:{line:1,column:92044},end:{line:1,column:92049}},"2513":{start:{line:1,column:92050},end:{line:1,column:92102}},"2514":{start:{line:1,column:92167},end:{line:1,column:92168}},"2515":{start:{line:1,column:92192},end:{line:1,column:92193}},"2516":{start:{line:1,column:92196},end:{line:1,column:92197}},"2517":{start:{line:1,column:92206},end:{line:1,column:92209}},"2518":{start:{line:1,column:92212},end:{line:1,column:92215}},"2519":{start:{line:1,column:92216},end:{line:1,column:92540}},"2520":{start:{line:1,column:92237},end:{line:1,column:92374}},"2521":{start:{line:1,column:92263},end:{line:1,column:92280}},"2522":{start:{line:1,column:92283},end:{line:1,column:92287}},"2523":{start:{line:1,column:92288},end:{line:1,column:92318}},"2524":{start:{line:1,column:92324},end:{line:1,column:92374}},"2525":{start:{line:1,column:92374},end:{line:1,column:92379}},"2526":{start:{line:1,column:92385},end:{line:1,column:92511}},"2527":{start:{line:1,column:92400},end:{line:1,column:92417}},"2528":{start:{line:1,column:92420},end:{line:1,column:92424}},"2529":{start:{line:1,column:92425},end:{line:1,column:92455}},"2530":{start:{line:1,column:92461},end:{line:1,column:92511}},"2531":{start:{line:1,column:92511},end:{line:1,column:92539}},"2532":{start:{line:1,column:92540},end:{line:1,column:92587}},"2533":{start:{line:1,column:92595},end:{line:1,column:109951}},"2534":{start:{line:1,column:92629},end:{line:1,column:93515}},"2535":{start:{line:1,column:93524},end:{line:1,column:93741}},"2536":{start:{line:1,column:93753},end:{line:1,column:93761}},"2537":{start:{line:1,column:93837},end:{line:1,column:93841}},"2538":{start:{line:1,column:93842},end:{line:1,column:94032}},"2539":{start:{line:1,column:94089},end:{line:1,column:94109}},"2540":{start:{line:1,column:94112},end:{line:1,column:94140}},"2541":{start:{line:1,column:94120},end:{line:1,column:94140}},"2542":{start:{line:1,column:94146},end:{line:1,column:94176}},"2543":{start:{line:1,column:94177},end:{line:1,column:94294}},"2544":{start:{line:1,column:94187},end:{line:1,column:94188}},"2545":{start:{line:1,column:94191},end:{line:1,column:94199}},"2546":{start:{line:1,column:94208},end:{line:1,column:94294}},"2547":{start:{line:1,column:94294},end:{line:1,column:94360}},"2548":{start:{line:1,column:94374},end:{line:1,column:94485}},"2549":{start:{line:1,column:94497},end:{line:1,column:94514}},"2550":{start:{line:1,column:94533},end:{line:1,column:94548}},"2551":{start:{line:1,column:94549},end:{line:1,column:94632}},"2552":{start:{line:1,column:94671},end:{line:1,column:94741}},"2553":{start:{line:1,column:94757},end:{line:1,column:94797}},"2554":{start:{line:1,column:94813},end:{line:1,column:94848}},"2555":{start:{line:1,column:94898},end:{line:1,column:94910}},"2556":{start:{line:1,column:94913},end:{line:1,column:94925}},"2557":{start:{line:1,column:94926},end:{line:1,column:95523}},"2558":{start:{line:1,column:95529},end:{line:1,column:95548}},"2559":{start:{line:1,column:95549},end:{line:1,column:95949}},"2560":{start:{line:1,column:95968},end:{line:1,column:95988}},"2561":{start:{line:1,column:95993},end:{line:1,column:96193}},"2562":{start:{line:1,column:96208},end:{line:1,column:96242}},"2563":{start:{line:1,column:96265},end:{line:1,column:96307}},"2564":{start:{line:1,column:96324},end:{line:1,column:96546}},"2565":{start:{line:1,column:96568},end:{line:1,column:96609}},"2566":{start:{line:1,column:96624},end:{line:1,column:96695}},"2567":{start:{line:1,column:96715},end:{line:1,column:96750}},"2568":{start:{line:1,column:96792},end:{line:1,column:96826}},"2569":{start:{line:1,column:96846},end:{line:1,column:96881}},"2570":{start:{line:1,column:96895},end:{line:1,column:96903}},"2571":{start:{line:1,column:96922},end:{line:1,column:96956}},"2572":{start:{line:1,column:96987},end:{line:1,column:97037}},"2573":{start:{line:1,column:97066},end:{line:1,column:97084}},"2574":{start:{line:1,column:97091},end:{line:1,column:97165}},"2575":{start:{line:1,column:97118},end:{line:1,column:97165}},"2576":{start:{line:1,column:97195},end:{line:1,column:97244}},"2577":{start:{line:1,column:97276},end:{line:1,column:97327}},"2578":{start:{line:1,column:97359},end:{line:1,column:97371}},"2579":{start:{line:1,column:97374},end:{line:1,column:97381}},"2580":{start:{line:1,column:97384},end:{line:1,column:97427}},"2581":{start:{line:1,column:97430},end:{line:1,column:97446}},"2582":{start:{line:1,column:97449},end:{line:1,column:97462}},"2583":{start:{line:1,column:97465},end:{line:1,column:97466}},"2584":{start:{line:1,column:97473},end:{line:1,column:97570}},"2585":{start:{line:1,column:97542},end:{line:1,column:97563}},"2586":{start:{line:1,column:97563},end:{line:1,column:97569}},"2587":{start:{line:1,column:97576},end:{line:1,column:97597}},"2588":{start:{line:1,column:97600},end:{line:1,column:97614}},"2589":{start:{line:1,column:97617},end:{line:1,column:97633}},"2590":{start:{line:1,column:97636},end:{line:1,column:97673}},"2591":{start:{line:1,column:97674},end:{line:1,column:97989}},"2592":{start:{line:1,column:98020},end:{line:1,column:98070}},"2593":{start:{line:1,column:98100},end:{line:1,column:98132}},"2594":{start:{line:1,column:98145},end:{line:1,column:98163}},"2595":{start:{line:1,column:98207},end:{line:1,column:98211}},"2596":{start:{line:1,column:98214},end:{line:1,column:98231}},"2597":{start:{line:1,column:98234},end:{line:1,column:98253}},"2598":{start:{line:1,column:98254},end:{line:1,column:98744}},"2599":{start:{line:1,column:98266},end:{line:1,column:98286}},"2600":{start:{line:1,column:98287},end:{line:1,column:98743}},"2601":{start:{line:1,column:98444},end:{line:1,column:98465}},"2602":{start:{line:1,column:98468},end:{line:1,column:98479}},"2603":{start:{line:1,column:98482},end:{line:1,column:98504}},"2604":{start:{line:1,column:98507},end:{line:1,column:98518}},"2605":{start:{line:1,column:98521},end:{line:1,column:98532}},"2606":{start:{line:1,column:98533},end:{line:1,column:98711}},"2607":{start:{line:1,column:98545},end:{line:1,column:98576}},"2608":{start:{line:1,column:98577},end:{line:1,column:98623}},"2609":{start:{line:1,column:98635},end:{line:1,column:98666}},"2610":{start:{line:1,column:98667},end:{line:1,column:98710}},"2611":{start:{line:1,column:98711},end:{line:1,column:98742}},"2612":{start:{line:1,column:98744},end:{line:1,column:98955}},"2613":{start:{line:1,column:99025},end:{line:1,column:99037}},"2614":{start:{line:1,column:99040},end:{line:1,column:99062}},"2615":{start:{line:1,column:99065},end:{line:1,column:99091}},"2616":{start:{line:1,column:99092},end:{line:1,column:99620}},"2617":{start:{line:1,column:99122},end:{line:1,column:99155}},"2618":{start:{line:1,column:99158},end:{line:1,column:99210}},"2619":{start:{line:1,column:99213},end:{line:1,column:99214}},"2620":{start:{line:1,column:99217},end:{line:1,column:99218}},"2621":{start:{line:1,column:99219},end:{line:1,column:99484}},"2622":{start:{line:1,column:99496},end:{line:1,column:99506}},"2623":{start:{line:1,column:99509},end:{line:1,column:99519}},"2624":{start:{line:1,column:99520},end:{line:1,column:99619}},"2625":{start:{line:1,column:99638},end:{line:1,column:99920}},"2626":{start:{line:1,column:99932},end:{line:1,column:99963}},"2627":{start:{line:1,column:100002},end:{line:1,column:100014}},"2628":{start:{line:1,column:100015},end:{line:1,column:100054}},"2629":{start:{line:1,column:100068},end:{line:1,column:100096}},"2630":{start:{line:1,column:100122},end:{line:1,column:100184}},"2631":{start:{line:1,column:100192},end:{line:1,column:100258}},"2632":{start:{line:1,column:100219},end:{line:1,column:100258}},"2633":{start:{line:1,column:100258},end:{line:1,column:100291}},"2634":{start:{line:1,column:100315},end:{line:1,column:100331}},"2635":{start:{line:1,column:100332},end:{line:1,column:100500}},"2636":{start:{line:1,column:100345},end:{line:1,column:100374}},"2637":{start:{line:1,column:100377},end:{line:1,column:100387}},"2638":{start:{line:1,column:100388},end:{line:1,column:100499}},"2639":{start:{line:1,column:100500},end:{line:1,column:100508}},"2640":{start:{line:1,column:100566},end:{line:1,column:100570}},"2641":{start:{line:1,column:100573},end:{line:1,column:100575}},"2642":{start:{line:1,column:100578},end:{line:1,column:100580}},"2643":{start:{line:1,column:100583},end:{line:1,column:100604}},"2644":{start:{line:1,column:100607},end:{line:1,column:100608}},"2645":{start:{line:1,column:100611},end:{line:1,column:100612}},"2646":{start:{line:1,column:100635},end:{line:1,column:100956}},"2647":{start:{line:1,column:100653},end:{line:1,column:100904}},"2648":{start:{line:1,column:100784},end:{line:1,column:100812}},"2649":{start:{line:1,column:100817},end:{line:1,column:100904}},"2650":{start:{line:1,column:100825},end:{line:1,column:100904}},"2651":{start:{line:1,column:100852},end:{line:1,column:100904}},"2652":{start:{line:1,column:100904},end:{line:1,column:100955}},"2653":{start:{line:1,column:100956},end:{line:1,column:100964}},"2654":{start:{line:1,column:100970},end:{line:1,column:100982}},"2655":{start:{line:1,column:100985},end:{line:1,column:100997}},"2656":{start:{line:1,column:101000},end:{line:1,column:101035}},"2657":{start:{line:1,column:101004},end:{line:1,column:101034}},"2658":{start:{line:1,column:101036},end:{line:1,column:101110}},"2659":{start:{line:1,column:101131},end:{line:1,column:101139}},"2660":{start:{line:1,column:101162},end:{line:1,column:101172}},"2661":{start:{line:1,column:101219},end:{line:1,column:101229}},"2662":{start:{line:1,column:101230},end:{line:1,column:101293}},"2663":{start:{line:1,column:101316},end:{line:1,column:101345}},"2664":{start:{line:1,column:101351},end:{line:1,column:101382}},"2665":{start:{line:1,column:101383},end:{line:1,column:101434}},"2666":{start:{line:1,column:101463},end:{line:1,column:101496}},"2667":{start:{line:1,column:101497},end:{line:1,column:101529}},"2668":{start:{line:1,column:101545},end:{line:1,column:101594}},"2669":{start:{line:1,column:101627},end:{line:1,column:101631}},"2670":{start:{line:1,column:101632},end:{line:1,column:101662}},"2671":{start:{line:1,column:101683},end:{line:1,column:101697}},"2672":{start:{line:1,column:101698},end:{line:1,column:101788}},"2673":{start:{line:1,column:101725},end:{line:1,column:101729}},"2674":{start:{line:1,column:101730},end:{line:1,column:101787}},"2675":{start:{line:1,column:101788},end:{line:1,column:101858}},"2676":{start:{line:1,column:101877},end:{line:1,column:101895}},"2677":{start:{line:1,column:101898},end:{line:1,column:101920}},"2678":{start:{line:1,column:101923},end:{line:1,column:101944}},"2679":{start:{line:1,column:101947},end:{line:1,column:101968}},"2680":{start:{line:1,column:101971},end:{line:1,column:101992}},"2681":{start:{line:1,column:101995},end:{line:1,column:102015}},"2682":{start:{line:1,column:102018},end:{line:1,column:102038}},"2683":{start:{line:1,column:102041},end:{line:1,column:102063}},"2684":{start:{line:1,column:102064},end:{line:1,column:102122}},"2685":{start:{line:1,column:102142},end:{line:1,column:102162}},"2686":{start:{line:1,column:102163},end:{line:1,column:102224}},"2687":{start:{line:1,column:102256},end:{line:1,column:102265}},"2688":{start:{line:1,column:102268},end:{line:1,column:102278}},"2689":{start:{line:1,column:102281},end:{line:1,column:102293}},"2690":{start:{line:1,column:102323},end:{line:1,column:102324}},"2691":{start:{line:1,column:102327},end:{line:1,column:102335}},"2692":{start:{line:1,column:102338},end:{line:1,column:102357}},"2693":{start:{line:1,column:102360},end:{line:1,column:102385}},"2694":{start:{line:1,column:102388},end:{line:1,column:102393}},"2695":{start:{line:1,column:102396},end:{line:1,column:102398}},"2696":{start:{line:1,column:102401},end:{line:1,column:102432}},"2697":{start:{line:1,column:102435},end:{line:1,column:102454}},"2698":{start:{line:1,column:102457},end:{line:1,column:102460}},"2699":{start:{line:1,column:102463},end:{line:1,column:102492}},"2700":{start:{line:1,column:102475},end:{line:1,column:102491}},"2701":{start:{line:1,column:102517},end:{line:1,column:103191}},"2702":{start:{line:1,column:102530},end:{line:1,column:102593}},"2703":{start:{line:1,column:102598},end:{line:1,column:103191}},"2704":{start:{line:1,column:102614},end:{line:1,column:102671}},"2705":{start:{line:1,column:102676},end:{line:1,column:103191}},"2706":{start:{line:1,column:102690},end:{line:1,column:102751}},"2707":{start:{line:1,column:102756},end:{line:1,column:103191}},"2708":{start:{line:1,column:102771},end:{line:1,column:102830}},"2709":{start:{line:1,column:102835},end:{line:1,column:103191}},"2710":{start:{line:1,column:102847},end:{line:1,column:102981}},"2711":{start:{line:1,column:102863},end:{line:1,column:102890}},"2712":{start:{line:1,column:102895},end:{line:1,column:102981}},"2713":{start:{line:1,column:102910},end:{line:1,column:102927}},"2714":{start:{line:1,column:102930},end:{line:1,column:102934}},"2715":{start:{line:1,column:102935},end:{line:1,column:102980}},"2716":{start:{line:1,column:102981},end:{line:1,column:103011}},"2717":{start:{line:1,column:103017},end:{line:1,column:103191}},"2718":{start:{line:1,column:103029},end:{line:1,column:103160}},"2719":{start:{line:1,column:103045},end:{line:1,column:103069}},"2720":{start:{line:1,column:103074},end:{line:1,column:103160}},"2721":{start:{line:1,column:103089},end:{line:1,column:103106}},"2722":{start:{line:1,column:103109},end:{line:1,column:103113}},"2723":{start:{line:1,column:103114},end:{line:1,column:103159}},"2724":{start:{line:1,column:103160},end:{line:1,column:103190}},"2725":{start:{line:1,column:103198},end:{line:1,column:103224}},"2726":{start:{line:1,column:103227},end:{line:1,column:103254}},"2727":{start:{line:1,column:103255},end:{line:1,column:103708}},"2728":{start:{line:1,column:103279},end:{line:1,column:103297}},"2729":{start:{line:1,column:103300},end:{line:1,column:103315}},"2730":{start:{line:1,column:103319},end:{line:1,column:103334}},"2731":{start:{line:1,column:103337},end:{line:1,column:103348}},"2732":{start:{line:1,column:103352},end:{line:1,column:103359}},"2733":{start:{line:1,column:103363},end:{line:1,column:103374}},"2734":{start:{line:1,column:103378},end:{line:1,column:103391}},"2735":{start:{line:1,column:103395},end:{line:1,column:103406}},"2736":{start:{line:1,column:103410},end:{line:1,column:103421}},"2737":{start:{line:1,column:103425},end:{line:1,column:103445}},"2738":{start:{line:1,column:103449},end:{line:1,column:103471}},"2739":{start:{line:1,column:103472},end:{line:1,column:103707}},"2740":{start:{line:1,column:103708},end:{line:1,column:103756}},"2741":{start:{line:1,column:103785},end:{line:1,column:103794}},"2742":{start:{line:1,column:103797},end:{line:1,column:103809}},"2743":{start:{line:1,column:103831},end:{line:1,column:103832}},"2744":{start:{line:1,column:103835},end:{line:1,column:103854}},"2745":{start:{line:1,column:103857},end:{line:1,column:103867}},"2746":{start:{line:1,column:103910},end:{line:1,column:103911}},"2747":{start:{line:1,column:103914},end:{line:1,column:103924}},"2748":{start:{line:1,column:103927},end:{line:1,column:103930}},"2749":{start:{line:1,column:103933},end:{line:1,column:103939}},"2750":{start:{line:1,column:103942},end:{line:1,column:103965}},"2751":{start:{line:1,column:103968},end:{line:1,column:103970}},"2752":{start:{line:1,column:103997},end:{line:1,column:104005}},"2753":{start:{line:1,column:104006},end:{line:1,column:104659}},"2754":{start:{line:1,column:104019},end:{line:1,column:104068}},"2755":{start:{line:1,column:104073},end:{line:1,column:104659}},"2756":{start:{line:1,column:104089},end:{line:1,column:104135}},"2757":{start:{line:1,column:104140},end:{line:1,column:104659}},"2758":{start:{line:1,column:104161},end:{line:1,column:104192}},"2759":{start:{line:1,column:104193},end:{line:1,column:104212}},"2760":{start:{line:1,column:104218},end:{line:1,column:104659}},"2761":{start:{line:1,column:104240},end:{line:1,column:104271}},"2762":{start:{line:1,column:104272},end:{line:1,column:104291}},"2763":{start:{line:1,column:104297},end:{line:1,column:104659}},"2764":{start:{line:1,column:104309},end:{line:1,column:104438}},"2765":{start:{line:1,column:104325},end:{line:1,column:104348}},"2766":{start:{line:1,column:104353},end:{line:1,column:104438}},"2767":{start:{line:1,column:104368},end:{line:1,column:104385}},"2768":{start:{line:1,column:104388},end:{line:1,column:104392}},"2769":{start:{line:1,column:104393},end:{line:1,column:104437}},"2770":{start:{line:1,column:104438},end:{line:1,column:104470}},"2771":{start:{line:1,column:104476},end:{line:1,column:104659}},"2772":{start:{line:1,column:104488},end:{line:1,column:104615}},"2773":{start:{line:1,column:104504},end:{line:1,column:104527}},"2774":{start:{line:1,column:104532},end:{line:1,column:104615}},"2775":{start:{line:1,column:104547},end:{line:1,column:104564}},"2776":{start:{line:1,column:104567},end:{line:1,column:104571}},"2777":{start:{line:1,column:104572},end:{line:1,column:104614}},"2778":{start:{line:1,column:104615},end:{line:1,column:104658}},"2779":{start:{line:1,column:104659},end:{line:1,column:104714}},"2780":{start:{line:1,column:104721},end:{line:1,column:104742}},"2781":{start:{line:1,column:104743},end:{line:1,column:105926}},"2782":{start:{line:1,column:104771},end:{line:1,column:104788}},"2783":{start:{line:1,column:104794},end:{line:1,column:104826}},"2784":{start:{line:1,column:104827},end:{line:1,column:104934}},"2785":{start:{line:1,column:104940},end:{line:1,column:104943}},"2786":{start:{line:1,column:104946},end:{line:1,column:104953}},"2787":{start:{line:1,column:104957},end:{line:1,column:104974}},"2788":{start:{line:1,column:104977},end:{line:1,column:104994}},"2789":{start:{line:1,column:104998},end:{line:1,column:104999}},"2790":{start:{line:1,column:105000},end:{line:1,column:105399}},"2791":{start:{line:1,column:105406},end:{line:1,column:105772}},"2792":{start:{line:1,column:105437},end:{line:1,column:105457}},"2793":{start:{line:1,column:105461},end:{line:1,column:105474}},"2794":{start:{line:1,column:105478},end:{line:1,column:105490}},"2795":{start:{line:1,column:105494},end:{line:1,column:105502}},"2796":{start:{line:1,column:105506},end:{line:1,column:105515}},"2797":{start:{line:1,column:105516},end:{line:1,column:105580}},"2798":{start:{line:1,column:105539},end:{line:1,column:105548}},"2799":{start:{line:1,column:105548},end:{line:1,column:105554}},"2800":{start:{line:1,column:105567},end:{line:1,column:105574}},"2801":{start:{line:1,column:105574},end:{line:1,column:105579}},"2802":{start:{line:1,column:105580},end:{line:1,column:105692}},"2803":{start:{line:1,column:105603},end:{line:1,column:105612}},"2804":{start:{line:1,column:105612},end:{line:1,column:105618}},"2805":{start:{line:1,column:105630},end:{line:1,column:105637}},"2806":{start:{line:1,column:105637},end:{line:1,column:105643}},"2807":{start:{line:1,column:105655},end:{line:1,column:105686}},"2808":{start:{line:1,column:105686},end:{line:1,column:105691}},"2809":{start:{line:1,column:105692},end:{line:1,column:105771}},"2810":{start:{line:1,column:105772},end:{line:1,column:105925}},"2811":{start:{line:1,column:105926},end:{line:1,column:105934}},"2812":{start:{line:1,column:105985},end:{line:1,column:105997}},"2813":{start:{line:1,column:105998},end:{line:1,column:106057}},"2814":{start:{line:1,column:106025},end:{line:1,column:106057}},"2815":{start:{line:1,column:106063},end:{line:1,column:106071}},"2816":{start:{line:1,column:106072},end:{line:1,column:106164}},"2817":{start:{line:1,column:106248},end:{line:1,column:106260}},"2818":{start:{line:1,column:106263},end:{line:1,column:106284}},"2819":{start:{line:1,column:106287},end:{line:1,column:106290}},"2820":{start:{line:1,column:106293},end:{line:1,column:106307}},"2821":{start:{line:1,column:106312},end:{line:1,column:106734}},"2822":{start:{line:1,column:106755},end:{line:1,column:106791}},"2823":{start:{line:1,column:106784},end:{line:1,column:106791}},"2824":{start:{line:1,column:106797},end:{line:1,column:106807}},"2825":{start:{line:1,column:106810},end:{line:1,column:106831}},"2826":{start:{line:1,column:106832},end:{line:1,column:106921}},"2827":{start:{line:1,column:106859},end:{line:1,column:106921}},"2828":{start:{line:1,column:106921},end:{line:1,column:107008}},"2829":{start:{line:1,column:106948},end:{line:1,column:107008}},"2830":{start:{line:1,column:107095},end:{line:1,column:107099}},"2831":{start:{line:1,column:107100},end:{line:1,column:107159}},"2832":{start:{line:1,column:107190},end:{line:1,column:107207}},"2833":{start:{line:1,column:107208},end:{line:1,column:107251}},"2834":{start:{line:1,column:107242},end:{line:1,column:107251}},"2835":{start:{line:1,column:107257},end:{line:1,column:107293}},"2836":{start:{line:1,column:107281},end:{line:1,column:107292}},"2837":{start:{line:1,column:107294},end:{line:1,column:107350}},"2838":{start:{line:1,column:107369},end:{line:1,column:107386}},"2839":{start:{line:1,column:107389},end:{line:1,column:107397}},"2840":{start:{line:1,column:107400},end:{line:1,column:107472}},"2841":{start:{line:1,column:107479},end:{line:1,column:107703}},"2842":{start:{line:1,column:107489},end:{line:1,column:107702}},"2843":{start:{line:1,column:107704},end:{line:1,column:107970}},"2844":{start:{line:1,column:107717},end:{line:1,column:107970}},"2845":{start:{line:1,column:107751},end:{line:1,column:107755}},"2846":{start:{line:1,column:107756},end:{line:1,column:107969}},"2847":{start:{line:1,column:108029},end:{line:1,column:108033}},"2848":{start:{line:1,column:108036},end:{line:1,column:108067}},"2849":{start:{line:1,column:108070},end:{line:1,column:108089}},"2850":{start:{line:1,column:108090},end:{line:1,column:108103}},"2851":{start:{line:1,column:108096},end:{line:1,column:108103}},"2852":{start:{line:1,column:108109},end:{line:1,column:108151}},"2853":{start:{line:1,column:108154},end:{line:1,column:108171}},"2854":{start:{line:1,column:108180},end:{line:1,column:108429}},"2855":{start:{line:1,column:108444},end:{line:1,column:108482}},"2856":{start:{line:1,column:108475},end:{line:1,column:108482}},"2857":{start:{line:1,column:108488},end:{line:1,column:108496}},"2858":{start:{line:1,column:108499},end:{line:1,column:108523}},"2859":{start:{line:1,column:108524},end:{line:1,column:108535}},"2860":{start:{line:1,column:108541},end:{line:1,column:108562}},"2861":{start:{line:1,column:108563},end:{line:1,column:108645}},"2862":{start:{line:1,column:108585},end:{line:1,column:108594}},"2863":{start:{line:1,column:108597},end:{line:1,column:108603}},"2864":{start:{line:1,column:108606},end:{line:1,column:108613}},"2865":{start:{line:1,column:108616},end:{line:1,column:108628}},"2866":{start:{line:1,column:108629},end:{line:1,column:108644}},"2867":{start:{line:1,column:108645},end:{line:1,column:108653}},"2868":{start:{line:1,column:108716},end:{line:1,column:108720}},"2869":{start:{line:1,column:108721},end:{line:1,column:108742}},"2870":{start:{line:1,column:108735},end:{line:1,column:108742}},"2871":{start:{line:1,column:108748},end:{line:1,column:108757}},"2872":{start:{line:1,column:108760},end:{line:1,column:108772}},"2873":{start:{line:1,column:108775},end:{line:1,column:108782}},"2874":{start:{line:1,column:108785},end:{line:1,column:108799}},"2875":{start:{line:1,column:108800},end:{line:1,column:108903}},"2876":{start:{line:1,column:108948},end:{line:1,column:108962}},"2877":{start:{line:1,column:108963},end:{line:1,column:109079}},"2878":{start:{line:1,column:109088},end:{line:1,column:109201}},"2879":{start:{line:1,column:109218},end:{line:1,column:109230}},"2880":{start:{line:1,column:109233},end:{line:1,column:109254}},"2881":{start:{line:1,column:109257},end:{line:1,column:109279}},"2882":{start:{line:1,column:109282},end:{line:1,column:109307}},"2883":{start:{line:1,column:109308},end:{line:1,column:109537}},"2884":{start:{line:1,column:109378},end:{line:1,column:109390}},"2885":{start:{line:1,column:109409},end:{line:1,column:109464}},"2886":{start:{line:1,column:109482},end:{line:1,column:109499}},"2887":{start:{line:1,column:109516},end:{line:1,column:109534}},"2888":{start:{line:1,column:109571},end:{line:1,column:109612}},"2889":{start:{line:1,column:109615},end:{line:1,column:109633}},"2890":{start:{line:1,column:109636},end:{line:1,column:109638}},"2891":{start:{line:1,column:109643},end:{line:1,column:109726}},"2892":{start:{line:1,column:109677},end:{line:1,column:109681}},"2893":{start:{line:1,column:109682},end:{line:1,column:109725}},"2894":{start:{line:1,column:109726},end:{line:1,column:109734}},"2895":{start:{line:1,column:109768},end:{line:1,column:109817}},"2896":{start:{line:1,column:109818},end:{line:1,column:109834}},"2897":{start:{line:1,column:109854},end:{line:1,column:109896}},"2898":{start:{line:1,column:109897},end:{line:1,column:109949}},"2899":{start:{line:1,column:109955},end:{line:1,column:110548}},"2900":{start:{line:1,column:109980},end:{line:1,column:110051}},"2901":{start:{line:1,column:110065},end:{line:1,column:110140}},"2902":{start:{line:1,column:110159},end:{line:1,column:110183}},"2903":{start:{line:1,column:110186},end:{line:1,column:110214}},"2904":{start:{line:1,column:110220},end:{line:1,column:110230}},"2905":{start:{line:1,column:110233},end:{line:1,column:110237}},"2906":{start:{line:1,column:110240},end:{line:1,column:110256}},"2907":{start:{line:1,column:110257},end:{line:1,column:110309}},"2908":{start:{line:1,column:110263},end:{line:1,column:110309}},"2909":{start:{line:1,column:110309},end:{line:1,column:110388}},"2910":{start:{line:1,column:110396},end:{line:1,column:110416}},"2911":{start:{line:1,column:110437},end:{line:1,column:110447}},"2912":{start:{line:1,column:110450},end:{line:1,column:110454}},"2913":{start:{line:1,column:110457},end:{line:1,column:110467}},"2914":{start:{line:1,column:110468},end:{line:1,column:110546}},"2915":{start:{line:1,column:110574},end:{line:1,column:110633}},"2916":{start:{line:1,column:110634},end:{line:1,column:110726}},"2917":{start:{line:1,column:110744},end:{line:1,column:110886}},"2918":{start:{line:1,column:110777},end:{line:1,column:110789}},"2919":{start:{line:1,column:110792},end:{line:1,column:110799}},"2920":{start:{line:1,column:110802},end:{line:1,column:110825}},"2921":{start:{line:1,column:110828},end:{line:1,column:110843}},"2922":{start:{line:1,column:110846},end:{line:1,column:110853}},"2923":{start:{line:1,column:110856},end:{line:1,column:110867}},"2924":{start:{line:1,column:110868},end:{line:1,column:110884}},"2925":{start:{line:1,column:110902},end:{line:1,column:110932}},"2926":{start:{line:1,column:110940},end:{line:1,column:112484}},"2927":{start:{line:1,column:110960},end:{line:1,column:111174}},"2928":{start:{line:1,column:111185},end:{line:1,column:111209}},"2929":{start:{line:1,column:111223},end:{line:1,column:111249}},"2930":{start:{line:1,column:111271},end:{line:1,column:111312}},"2931":{start:{line:1,column:111331},end:{line:1,column:111369}},"2932":{start:{line:1,column:111387},end:{line:1,column:111424}},"2933":{start:{line:1,column:111441},end:{line:1,column:111477}},"2934":{start:{line:1,column:111495},end:{line:1,column:111544}},"2935":{start:{line:1,column:111559},end:{line:1,column:111602}},"2936":{start:{line:1,column:111616},end:{line:1,column:111657}},"2937":{start:{line:1,column:111670},end:{line:1,column:111709}},"2938":{start:{line:1,column:111734},end:{line:1,column:111777}},"2939":{start:{line:1,column:111799},end:{line:1,column:111839}},"2940":{start:{line:1,column:111860},end:{line:1,column:111899}},"2941":{start:{line:1,column:111919},end:{line:1,column:111957}},"2942":{start:{line:1,column:111971},end:{line:1,column:112153}},"2943":{start:{line:1,column:111996},end:{line:1,column:112026}},"2944":{start:{line:1,column:112027},end:{line:1,column:112151}},"2945":{start:{line:1,column:112101},end:{line:1,column:112131}},"2946":{start:{line:1,column:112132},end:{line:1,column:112149}},"2947":{start:{line:1,column:112173},end:{line:1,column:112178}},"2948":{start:{line:1,column:112179},end:{line:1,column:112229}},"2949":{start:{line:1,column:112253},end:{line:1,column:112359}},"2950":{start:{line:1,column:112263},end:{line:1,column:112264}},"2951":{start:{line:1,column:112307},end:{line:1,column:112331}},"2952":{start:{line:1,column:112332},end:{line:1,column:112358}},"2953":{start:{line:1,column:112350},end:{line:1,column:112358}},"2954":{start:{line:1,column:112359},end:{line:1,column:112378}},"2955":{start:{line:1,column:112397},end:{line:1,column:112405}},"2956":{start:{line:1,column:112406},end:{line:1,column:112474}},"2957":{start:{line:1,column:112420},end:{line:1,column:112474}},"2958":{start:{line:1,column:112474},end:{line:1,column:112482}},"2959":{start:{line:1,column:112488},end:{line:1,column:112494}},"2960":{start:{line:1,column:112498},end:{line:1,column:113520}},"2961":{start:{line:1,column:112518},end:{line:1,column:112535}},"2962":{start:{line:1,column:112552},end:{line:1,column:112680}},"2963":{start:{line:1,column:112673},end:{line:1,column:112680}},"2964":{start:{line:1,column:112686},end:{line:1,column:112739}},"2965":{start:{line:1,column:112742},end:{line:1,column:112763}},"2966":{start:{line:1,column:112764},end:{line:1,column:112876}},"2967":{start:{line:1,column:112894},end:{line:1,column:112902}},"2968":{start:{line:1,column:112902},end:{line:1,column:112998}},"2969":{start:{line:1,column:112924},end:{line:1,column:112932}},"2970":{start:{line:1,column:112935},end:{line:1,column:112939}},"2971":{start:{line:1,column:112942},end:{line:1,column:112957}},"2972":{start:{line:1,column:112958},end:{line:1,column:112997}},"2973":{start:{line:1,column:112989},end:{line:1,column:112997}},"2974":{start:{line:1,column:112998},end:{line:1,column:113006}},"2975":{start:{line:1,column:113020},end:{line:1,column:113083}},"2976":{start:{line:1,column:113100},end:{line:1,column:113134}},"2977":{start:{line:1,column:113115},end:{line:1,column:113134}},"2978":{start:{line:1,column:113140},end:{line:1,column:113178}},"2979":{start:{line:1,column:113179},end:{line:1,column:113215}},"2980":{start:{line:1,column:113246},end:{line:1,column:113257}},"2981":{start:{line:1,column:113260},end:{line:1,column:113294}},"2982":{start:{line:1,column:113297},end:{line:1,column:113302}},"2983":{start:{line:1,column:113303},end:{line:1,column:113335}},"2984":{start:{line:1,column:113365},end:{line:1,column:113383}},"2985":{start:{line:1,column:113386},end:{line:1,column:113397}},"2986":{start:{line:1,column:113400},end:{line:1,column:113457}},"2987":{start:{line:1,column:113407},end:{line:1,column:113457}},"2988":{start:{line:1,column:113419},end:{line:1,column:113456}},"2989":{start:{line:1,column:113430},end:{line:1,column:113455}},"2990":{start:{line:1,column:113458},end:{line:1,column:113518}},"2991":{start:{line:1,column:113542},end:{line:1,column:113544}},"2992":{start:{line:1,column:113547},end:{line:1,column:113549}},"2993":{start:{line:1,column:113552},end:{line:1,column:113581}},"2994":{start:{line:1,column:113582},end:{line:1,column:113636}},"2995":{start:{line:1,column:113592},end:{line:1,column:113593}},"2996":{start:{line:1,column:113609},end:{line:1,column:113636}},"2997":{start:{line:1,column:113642},end:{line:1,column:113655}},"2998":{start:{line:1,column:113656},end:{line:1,column:113737}},"2999":{start:{line:1,column:113666},end:{line:1,column:113667}},"3000":{start:{line:1,column:113690},end:{line:1,column:113694}},"3001":{start:{line:1,column:113695},end:{line:1,column:113736}},"3002":{start:{line:1,column:113737},end:{line:1,column:113765}},"3003":{start:{line:1,column:113783},end:{line:1,column:113816}},"3004":{start:{line:1,column:113865},end:{line:1,column:113867}},"3005":{start:{line:1,column:113870},end:{line:1,column:113884}},"3006":{start:{line:1,column:113885},end:{line:1,column:114001}},"3007":{start:{line:1,column:113907},end:{line:1,column:113911}},"3008":{start:{line:1,column:113914},end:{line:1,column:113924}},"3009":{start:{line:1,column:113925},end:{line:1,column:114000}},"3010":{start:{line:1,column:114001},end:{line:1,column:114009}},"3011":{start:{line:1,column:114054},end:{line:1,column:114074}},"3012":{start:{line:1,column:114077},end:{line:1,column:114099}},"3013":{start:{line:1,column:114100},end:{line:1,column:114207}},"3014":{start:{line:1,column:114231},end:{line:1,column:114248}},"3015":{start:{line:1,column:114249},end:{line:1,column:114321}},"3016":{start:{line:1,column:114345},end:{line:1,column:114346}},"3017":{start:{line:1,column:114347},end:{line:1,column:114408}},"3018":{start:{line:1,column:114426},end:{line:1,column:114458}},"3019":{start:{line:1,column:114474},end:{line:1,column:114511}},"3020":{start:{line:1,column:114503},end:{line:1,column:114511}},"3021":{start:{line:1,column:114527},end:{line:1,column:114564}},"3022":{start:{line:1,column:114554},end:{line:1,column:114564}},"3023":{start:{line:1,column:114564},end:{line:1,column:114600}},"3024":{start:{line:1,column:114591},end:{line:1,column:114600}},"3025":{start:{line:1,column:114621},end:{line:1,column:114639}},"3026":{start:{line:1,column:114630},end:{line:1,column:114639}},"3027":{start:{line:1,column:114639},end:{line:1,column:114734}},"3028":{start:{line:1,column:114661},end:{line:1,column:114719}},"3029":{start:{line:1,column:114720},end:{line:1,column:114733}},"3030":{start:{line:1,column:114725},end:{line:1,column:114733}},"3031":{start:{line:1,column:114734},end:{line:1,column:114834}},"3032":{start:{line:1,column:114854},end:{line:1,column:114889}},"3033":{start:{line:1,column:114875},end:{line:1,column:114889}},"3034":{start:{line:1,column:114907},end:{line:1,column:115047}},"3035":{start:{line:1,column:114941},end:{line:1,column:114996}},"3036":{start:{line:1,column:114967},end:{line:1,column:114995}},"3037":{start:{line:1,column:114997},end:{line:1,column:115046}},"3038":{start:{line:1,column:115009},end:{line:1,column:115046}},"3039":{start:{line:1,column:115047},end:{line:1,column:115055}},"3040":{start:{line:1,column:115079},end:{line:1,column:115102}},"3041":{start:{line:1,column:115105},end:{line:1,column:115117}},"3042":{start:{line:1,column:115120},end:{line:1,column:115132}},"3043":{start:{line:1,column:115135},end:{line:1,column:115154}},"3044":{start:{line:1,column:115155},end:{line:1,column:115778}},"3045":{start:{line:1,column:115195},end:{line:1,column:115199}},"3046":{start:{line:1,column:115200},end:{line:1,column:115277}},"3047":{start:{line:1,column:115209},end:{line:1,column:115277}},"3048":{start:{line:1,column:115277},end:{line:1,column:115364}},"3049":{start:{line:1,column:115289},end:{line:1,column:115364}},"3050":{start:{line:1,column:115370},end:{line:1,column:115402}},"3051":{start:{line:1,column:115405},end:{line:1,column:115412}},"3052":{start:{line:1,column:115415},end:{line:1,column:115427}},"3053":{start:{line:1,column:115428},end:{line:1,column:115479}},"3054":{start:{line:1,column:115516},end:{line:1,column:115530}},"3055":{start:{line:1,column:115533},end:{line:1,column:115553}},"3056":{start:{line:1,column:115556},end:{line:1,column:115578}},"3057":{start:{line:1,column:115579},end:{line:1,column:115701}},"3058":{start:{line:1,column:115612},end:{line:1,column:115619}},"3059":{start:{line:1,column:115622},end:{line:1,column:115638}},"3060":{start:{line:1,column:115639},end:{line:1,column:115699}},"3061":{start:{line:1,column:115737},end:{line:1,column:115741}},"3062":{start:{line:1,column:115742},end:{line:1,column:115774}},"3063":{start:{line:1,column:115800},end:{line:1,column:115825}},"3064":{start:{line:1,column:115826},end:{line:1,column:115868}},"3065":{start:{line:1,column:115884},end:{line:1,column:115948}},"3066":{start:{line:1,column:115964},end:{line:1,column:116004}},"3067":{start:{line:1,column:116012},end:{line:1,column:116019}},"3068":{start:{line:1,column:116023},end:{line:1,column:116030}},"3069":{start:{line:1,column:116054},end:{line:1,column:116063}},"3070":{start:{line:1,column:116064},end:{line:1,column:116105}},"3071":{start:{line:1,column:116113},end:{line:1,column:116158}},"3072":{start:{line:1,column:116129},end:{line:1,column:116136}},"3073":{start:{line:1,column:116137},end:{line:1,column:116157}},"3074":{start:{line:1,column:116162},end:{line:1,column:118031}},"3075":{start:{line:1,column:116183},end:{line:1,column:116254}},"3076":{start:{line:1,column:116270},end:{line:1,column:116298}},"3077":{start:{line:1,column:116310},end:{line:1,column:116334}},"3078":{start:{line:1,column:116347},end:{line:1,column:116366}},"3079":{start:{line:1,column:116378},end:{line:1,column:116402}},"3080":{start:{line:1,column:116415},end:{line:1,column:116438}},"3081":{start:{line:1,column:116453},end:{line:1,column:116480}},"3082":{start:{line:1,column:116496},end:{line:1,column:116518}},"3083":{start:{line:1,column:116533},end:{line:1,column:116560}},"3084":{start:{line:1,column:116576},end:{line:1,column:116588}},"3085":{start:{line:1,column:116589},end:{line:1,column:116612}},"3086":{start:{line:1,column:116626},end:{line:1,column:116678}},"3087":{start:{line:1,column:116699},end:{line:1,column:116738}},"3088":{start:{line:1,column:116715},end:{line:1,column:116737}},"3089":{start:{line:1,column:116770},end:{line:1,column:116884}},"3090":{start:{line:1,column:116807},end:{line:1,column:116883}},"3091":{start:{line:1,column:116914},end:{line:1,column:117009}},"3092":{start:{line:1,column:116940},end:{line:1,column:117008}},"3093":{start:{line:1,column:117035},end:{line:1,column:117039}},"3094":{start:{line:1,column:117042},end:{line:1,column:117051}},"3095":{start:{line:1,column:117052},end:{line:1,column:117136}},"3096":{start:{line:1,column:117085},end:{line:1,column:117135}},"3097":{start:{line:1,column:117162},end:{line:1,column:117178}},"3098":{start:{line:1,column:117181},end:{line:1,column:117189}},"3099":{start:{line:1,column:117190},end:{line:1,column:117229}},"3100":{start:{line:1,column:117275},end:{line:1,column:117279}},"3101":{start:{line:1,column:117282},end:{line:1,column:117305}},"3102":{start:{line:1,column:117308},end:{line:1,column:117316}},"3103":{start:{line:1,column:117317},end:{line:1,column:117331}},"3104":{start:{line:1,column:117322},end:{line:1,column:117331}},"3105":{start:{line:1,column:117337},end:{line:1,column:117344}},"3106":{start:{line:1,column:117345},end:{line:1,column:117504}},"3107":{start:{line:1,column:117359},end:{line:1,column:117501}},"3108":{start:{line:1,column:117385},end:{line:1,column:117394}},"3109":{start:{line:1,column:117410},end:{line:1,column:117419}},"3110":{start:{line:1,column:117434},end:{line:1,column:117451}},"3111":{start:{line:1,column:117466},end:{line:1,column:117475}},"3112":{start:{line:1,column:117490},end:{line:1,column:117500}},"3113":{start:{line:1,column:117510},end:{line:1,column:117523}},"3114":{start:{line:1,column:117524},end:{line:1,column:117596}},"3115":{start:{line:1,column:117639},end:{line:1,column:117643}},"3116":{start:{line:1,column:117644},end:{line:1,column:117695}},"3117":{start:{line:1,column:117736},end:{line:1,column:117748}},"3118":{start:{line:1,column:117776},end:{line:1,column:117803}},"3119":{start:{line:1,column:117806},end:{line:1,column:117807}},"3120":{start:{line:1,column:117808},end:{line:1,column:117892}},"3121":{start:{line:1,column:117820},end:{line:1,column:117847}},"3122":{start:{line:1,column:117853},end:{line:1,column:117879}},"3123":{start:{line:1,column:117880},end:{line:1,column:117891}},"3124":{start:{line:1,column:117892},end:{line:1,column:117917}},"3125":{start:{line:1,column:117907},end:{line:1,column:117917}},"3126":{start:{line:1,column:117917},end:{line:1,column:117925}},"3127":{start:{line:1,column:117971},end:{line:1,column:117998}},"3128":{start:{line:1,column:117999},end:{line:1,column:118029}},"3129":{start:{line:1,column:118057},end:{line:1,column:118065}},"3130":{start:{line:1,column:118066},end:{line:1,column:118092}},"3131":{start:{line:1,column:118098},end:{line:1,column:118106}},"3132":{start:{line:1,column:118109},end:{line:1,column:118117}},"3133":{start:{line:1,column:118118},end:{line:1,column:118223}},"3134":{start:{line:1,column:118173},end:{line:1,column:118207}},"3135":{start:{line:1,column:118231},end:{line:1,column:118287}},"3136":{start:{line:1,column:118234},end:{line:1,column:118287}},"3137":{start:{line:1,column:118278},end:{line:1,column:118286}},"3138":{start:{line:1,column:118339},end:{line:1,column:118344}},"3139":{start:{line:1,column:118345},end:{line:1,column:118433}},"3140":{start:{line:1,column:118367},end:{line:1,column:118371}},"3141":{start:{line:1,column:118374},end:{line:1,column:118378}},"3142":{start:{line:1,column:118381},end:{line:1,column:118393}},"3143":{start:{line:1,column:118394},end:{line:1,column:118432}},"3144":{start:{line:1,column:118424},end:{line:1,column:118432}},"3145":{start:{line:1,column:118433},end:{line:1,column:118441}},"3146":{start:{line:1,column:118449},end:{line:1,column:118456}},"3147":{start:{line:1,column:118460},end:{line:1,column:118503}},"3148":{start:{line:1,column:118521},end:{line:1,column:118580}},"3149":{start:{line:1,column:118598},end:{line:1,column:118658}},"3150":{start:{line:1,column:118619},end:{line:1,column:118657}},"3151":{start:{line:1,column:118680},end:{line:1,column:118687}},"3152":{start:{line:1,column:118690},end:{line:1,column:118709}},"3153":{start:{line:1,column:118710},end:{line:1,column:118765}},"3154":{start:{line:1,column:118787},end:{line:1,column:118794}},"3155":{start:{line:1,column:118797},end:{line:1,column:118816}},"3156":{start:{line:1,column:118817},end:{line:1,column:118841}},"3157":{start:{line:1,column:118857},end:{line:1,column:118967}},"3158":{start:{line:1,column:118975},end:{line:1,column:118977}},"3159":{start:{line:1,column:118981},end:{line:1,column:119052}},"3160":{start:{line:1,column:118991},end:{line:1,column:118996}},"3161":{start:{line:1,column:118997},end:{line:1,column:119051}},"3162":{start:{line:1,column:119032},end:{line:1,column:119044}},"3163":{start:{line:1,column:119078},end:{line:1,column:119092}},"3164":{start:{line:1,column:119093},end:{line:1,column:119174}},"3165":{start:{line:1,column:119115},end:{line:1,column:119117}},"3166":{start:{line:1,column:119118},end:{line:1,column:119173}},"3167":{start:{line:1,column:119133},end:{line:1,column:119137}},"3168":{start:{line:1,column:119138},end:{line:1,column:119172}},"3169":{start:{line:1,column:119196},end:{line:1,column:119236}},"3170":{start:{line:1,column:119244},end:{line:1,column:132430}},"3171":{start:{line:1,column:119274},end:{line:1,column:119275}},"3172":{start:{line:1,column:119293},end:{line:1,column:119295}},"3173":{start:{line:1,column:119313},end:{line:1,column:119315}},"3174":{start:{line:1,column:119332},end:{line:1,column:119334}},"3175":{start:{line:1,column:119350},end:{line:1,column:119352}},"3176":{start:{line:1,column:119369},end:{line:1,column:119371}},"3177":{start:{line:1,column:119394},end:{line:1,column:119411}},"3178":{start:{line:1,column:119436},end:{line:1,column:119456}},"3179":{start:{line:1,column:119480},end:{line:1,column:119501}},"3180":{start:{line:1,column:119504},end:{line:1,column:119509}},"3181":{start:{line:1,column:119512},end:{line:1,column:119517}},"3182":{start:{line:1,column:119518},end:{line:1,column:119670}},"3183":{start:{line:1,column:119523},end:{line:1,column:119670}},"3184":{start:{line:1,column:119676},end:{line:1,column:119733}},"3185":{start:{line:1,column:119734},end:{line:1,column:119801}},"3186":{start:{line:1,column:119807},end:{line:1,column:119852}},"3187":{start:{line:1,column:119855},end:{line:1,column:119866}},"3188":{start:{line:1,column:119869},end:{line:1,column:119880}},"3189":{start:{line:1,column:119883},end:{line:1,column:119893}},"3190":{start:{line:1,column:119894},end:{line:1,column:120590}},"3191":{start:{line:1,column:120421},end:{line:1,column:120435}},"3192":{start:{line:1,column:120500},end:{line:1,column:120583}},"3193":{start:{line:1,column:120583},end:{line:1,column:120589}},"3194":{start:{line:1,column:120590},end:{line:1,column:120697}},"3195":{start:{line:1,column:120799},end:{line:1,column:120803}},"3196":{start:{line:1,column:120804},end:{line:1,column:120835}},"3197":{start:{line:1,column:120847},end:{line:1,column:120870}},"3198":{start:{line:1,column:120883},end:{line:1,column:120901}},"3199":{start:{line:1,column:120916},end:{line:1,column:120936}},"3200":{start:{line:1,column:120952},end:{line:1,column:120973}},"3201":{start:{line:1,column:120989},end:{line:1,column:120998}},"3202":{start:{line:1,column:121013},end:{line:1,column:121184}},"3203":{start:{line:1,column:121193},end:{line:1,column:121229}},"3204":{start:{line:1,column:121237},end:{line:1,column:121262}},"3205":{start:{line:1,column:121275},end:{line:1,column:121351}},"3206":{start:{line:1,column:121371},end:{line:1,column:121383}},"3207":{start:{line:1,column:121386},end:{line:1,column:121397}},"3208":{start:{line:1,column:121400},end:{line:1,column:121439}},"3209":{start:{line:1,column:121442},end:{line:1,column:121479}},"3210":{start:{line:1,column:121482},end:{line:1,column:121537}},"3211":{start:{line:1,column:121540},end:{line:1,column:121568}},"3212":{start:{line:1,column:121569},end:{line:1,column:121774}},"3213":{start:{line:1,column:121803},end:{line:1,column:121826}},"3214":{start:{line:1,column:121827},end:{line:1,column:121847}},"3215":{start:{line:1,column:121839},end:{line:1,column:121845}},"3216":{start:{line:1,column:121876},end:{line:1,column:121888}},"3217":{start:{line:1,column:121891},end:{line:1,column:121899}},"3218":{start:{line:1,column:121902},end:{line:1,column:121913}},"3219":{start:{line:1,column:121916},end:{line:1,column:121960}},"3220":{start:{line:1,column:121946},end:{line:1,column:121955}},"3221":{start:{line:1,column:121963},end:{line:1,column:121965}},"3222":{start:{line:1,column:121966},end:{line:1,column:122532}},"3223":{start:{line:1,column:122010},end:{line:1,column:122014}},"3224":{start:{line:1,column:122017},end:{line:1,column:122024}},"3225":{start:{line:1,column:122027},end:{line:1,column:122034}},"3226":{start:{line:1,column:122037},end:{line:1,column:122044}},"3227":{start:{line:1,column:122045},end:{line:1,column:122149}},"3228":{start:{line:1,column:122168},end:{line:1,column:122177}},"3229":{start:{line:1,column:122180},end:{line:1,column:122184}},"3230":{start:{line:1,column:122187},end:{line:1,column:122194}},"3231":{start:{line:1,column:122197},end:{line:1,column:122214}},"3232":{start:{line:1,column:122215},end:{line:1,column:122307}},"3233":{start:{line:1,column:122313},end:{line:1,column:122317}},"3234":{start:{line:1,column:122318},end:{line:1,column:122433}},"3235":{start:{line:1,column:122343},end:{line:1,column:122350}},"3236":{start:{line:1,column:122361},end:{line:1,column:122375}},"3237":{start:{line:1,column:122376},end:{line:1,column:122432}},"3238":{start:{line:1,column:122433},end:{line:1,column:122444}},"3239":{start:{line:1,column:122459},end:{line:1,column:122473}},"3240":{start:{line:1,column:122484},end:{line:1,column:122530}},"3241":{start:{line:1,column:122557},end:{line:1,column:122571}},"3242":{start:{line:1,column:122574},end:{line:1,column:122599}},"3243":{start:{line:1,column:122602},end:{line:1,column:122610}},"3244":{start:{line:1,column:122611},end:{line:1,column:122714}},"3245":{start:{line:1,column:122628},end:{line:1,column:122643}},"3246":{start:{line:1,column:122650},end:{line:1,column:122698}},"3247":{start:{line:1,column:122660},end:{line:1,column:122661}},"3248":{start:{line:1,column:122670},end:{line:1,column:122698}},"3249":{start:{line:1,column:122698},end:{line:1,column:122713}},"3250":{start:{line:1,column:122714},end:{line:1,column:122771}},"3251":{start:{line:1,column:122837},end:{line:1,column:122841}},"3252":{start:{line:1,column:122842},end:{line:1,column:122968}},"3253":{start:{line:1,column:122899},end:{line:1,column:122966}},"3254":{start:{line:1,column:122911},end:{line:1,column:122925}},"3255":{start:{line:1,column:123002},end:{line:1,column:123004}},"3256":{start:{line:1,column:123007},end:{line:1,column:123025}},"3257":{start:{line:1,column:123030},end:{line:1,column:123663}},"3258":{start:{line:1,column:123099},end:{line:1,column:123103}},"3259":{start:{line:1,column:123106},end:{line:1,column:123128}},"3260":{start:{line:1,column:123131},end:{line:1,column:123155}},"3261":{start:{line:1,column:123156},end:{line:1,column:123662}},"3262":{start:{line:1,column:123383},end:{line:1,column:123437}},"3263":{start:{line:1,column:123448},end:{line:1,column:123467}},"3264":{start:{line:1,column:123509},end:{line:1,column:123522}},"3265":{start:{line:1,column:123523},end:{line:1,column:123661}},"3266":{start:{line:1,column:123663},end:{line:1,column:123694}},"3267":{start:{line:1,column:123712},end:{line:1,column:123789}},"3268":{start:{line:1,column:123741},end:{line:1,column:123782}},"3269":{start:{line:1,column:123798},end:{line:1,column:123847}},"3270":{start:{line:1,column:123864},end:{line:1,column:123875}},"3271":{start:{line:1,column:123876},end:{line:1,column:123887}},"3272":{start:{line:1,column:123893},end:{line:1,column:123964}},"3273":{start:{line:1,column:123967},end:{line:1,column:124004}},"3274":{start:{line:1,column:124005},end:{line:1,column:124181}},"3275":{start:{line:1,column:124174},end:{line:1,column:124181}},"3276":{start:{line:1,column:124187},end:{line:1,column:124218}},"3277":{start:{line:1,column:124219},end:{line:1,column:124262}},"3278":{start:{line:1,column:124268},end:{line:1,column:124269}},"3279":{start:{line:1,column:124270},end:{line:1,column:124445}},"3280":{start:{line:1,column:124280},end:{line:1,column:124281}},"3281":{start:{line:1,column:124284},end:{line:1,column:124309}},"3282":{start:{line:1,column:124337},end:{line:1,column:124359}},"3283":{start:{line:1,column:124362},end:{line:1,column:124383}},"3284":{start:{line:1,column:124384},end:{line:1,column:124444}},"3285":{start:{line:1,column:124445},end:{line:1,column:124635}},"3286":{start:{line:1,column:124522},end:{line:1,column:124531}},"3287":{start:{line:1,column:124663},end:{line:1,column:124667}},"3288":{start:{line:1,column:124668},end:{line:1,column:124750}},"3289":{start:{line:1,column:124767},end:{line:1,column:124860}},"3290":{start:{line:1,column:124785},end:{line:1,column:124804}},"3291":{start:{line:1,column:124889},end:{line:1,column:124901}},"3292":{start:{line:1,column:124904},end:{line:1,column:124941}},"3293":{start:{line:1,column:124944},end:{line:1,column:124961}},"3294":{start:{line:1,column:124962},end:{line:1,column:125057}},"3295":{start:{line:1,column:125103},end:{line:1,column:125107}},"3296":{start:{line:1,column:125110},end:{line:1,column:125143}},"3297":{start:{line:1,column:125144},end:{line:1,column:125226}},"3298":{start:{line:1,column:125189},end:{line:1,column:125215}},"3299":{start:{line:1,column:125216},end:{line:1,column:125225}},"3300":{start:{line:1,column:125258},end:{line:1,column:125275}},"3301":{start:{line:1,column:125276},end:{line:1,column:125300}},"3302":{start:{line:1,column:125293},end:{line:1,column:125300}},"3303":{start:{line:1,column:125300},end:{line:1,column:125321}},"3304":{start:{line:1,column:125327},end:{line:1,column:125352}},"3305":{start:{line:1,column:125355},end:{line:1,column:125428}},"3306":{start:{line:1,column:125358},end:{line:1,column:125428}},"3307":{start:{line:1,column:125378},end:{line:1,column:125386}},"3308":{start:{line:1,column:125399},end:{line:1,column:125426}},"3309":{start:{line:1,column:125431},end:{line:1,column:125435}},"3310":{start:{line:1,column:125436},end:{line:1,column:125478}},"3311":{start:{line:1,column:125446},end:{line:1,column:125447}},"3312":{start:{line:1,column:125456},end:{line:1,column:125478}},"3313":{start:{line:1,column:125471},end:{line:1,column:125478}},"3314":{start:{line:1,column:125478},end:{line:1,column:125567}},"3315":{start:{line:1,column:125506},end:{line:1,column:125518}},"3316":{start:{line:1,column:125528},end:{line:1,column:125565}},"3317":{start:{line:1,column:125585},end:{line:1,column:125651}},"3318":{start:{line:1,column:125644},end:{line:1,column:125651}},"3319":{start:{line:1,column:125651},end:{line:1,column:125691}},"3320":{start:{line:1,column:125697},end:{line:1,column:125711}},"3321":{start:{line:1,column:125714},end:{line:1,column:125737}},"3322":{start:{line:1,column:125738},end:{line:1,column:125943}},"3323":{start:{line:1,column:125771},end:{line:1,column:125862}},"3324":{start:{line:1,column:125899},end:{line:1,column:125907}},"3325":{start:{line:1,column:125963},end:{line:1,column:126282}},"3326":{start:{line:1,column:126038},end:{line:1,column:126132}},"3327":{start:{line:1,column:126048},end:{line:1,column:126049}},"3328":{start:{line:1,column:126052},end:{line:1,column:126077}},"3329":{start:{line:1,column:126086},end:{line:1,column:126132}},"3330":{start:{line:1,column:126132},end:{line:1,column:126231}},"3331":{start:{line:1,column:126142},end:{line:1,column:126143}},"3332":{start:{line:1,column:126146},end:{line:1,column:126171}},"3333":{start:{line:1,column:126180},end:{line:1,column:126231}},"3334":{start:{line:1,column:126231},end:{line:1,column:126281}},"3335":{start:{line:1,column:126309},end:{line:1,column:126331}},"3336":{start:{line:1,column:126334},end:{line:1,column:126371}},"3337":{start:{line:1,column:126372},end:{line:1,column:126506}},"3338":{start:{line:1,column:126516},end:{line:1,column:126667}},"3339":{start:{line:1,column:126681},end:{line:1,column:126799}},"3340":{start:{line:1,column:126730},end:{line:1,column:126752}},"3341":{start:{line:1,column:126753},end:{line:1,column:126798}},"3342":{start:{line:1,column:126799},end:{line:1,column:126907}},"3343":{start:{line:1,column:126900},end:{line:1,column:126907}},"3344":{start:{line:1,column:126913},end:{line:1,column:126925}},"3345":{start:{line:1,column:126926},end:{line:1,column:126986}},"3346":{start:{line:1,column:126960},end:{line:1,column:126986}},"3347":{start:{line:1,column:126986},end:{line:1,column:127052}},"3348":{start:{line:1,column:127026},end:{line:1,column:127052}},"3349":{start:{line:1,column:127052},end:{line:1,column:127083}},"3350":{start:{line:1,column:127116},end:{line:1,column:127136}},"3351":{start:{line:1,column:127139},end:{line:1,column:127141}},"3352":{start:{line:1,column:127146},end:{line:1,column:127212}},"3353":{start:{line:1,column:127180},end:{line:1,column:127184}},"3354":{start:{line:1,column:127185},end:{line:1,column:127211}},"3355":{start:{line:1,column:127212},end:{line:1,column:127220}},"3356":{start:{line:1,column:127252},end:{line:1,column:127290}},"3357":{start:{line:1,column:127307},end:{line:1,column:127379}},"3358":{start:{line:1,column:127372},end:{line:1,column:127379}},"3359":{start:{line:1,column:127385},end:{line:1,column:127420}},"3360":{start:{line:1,column:127421},end:{line:1,column:127475}},"3361":{start:{line:1,column:127431},end:{line:1,column:127441}},"3362":{start:{line:1,column:127451},end:{line:1,column:127475}},"3363":{start:{line:1,column:127475},end:{line:1,column:127514}},"3364":{start:{line:1,column:127537},end:{line:1,column:127545}},"3365":{start:{line:1,column:127548},end:{line:1,column:127584}},"3366":{start:{line:1,column:127587},end:{line:1,column:127597}},"3367":{start:{line:1,column:127598},end:{line:1,column:127744}},"3368":{start:{line:1,column:127762},end:{line:1,column:127806}},"3369":{start:{line:1,column:127848},end:{line:1,column:127859}},"3370":{start:{line:1,column:127860},end:{line:1,column:127904}},"3371":{start:{line:1,column:127929},end:{line:1,column:127950}},"3372":{start:{line:1,column:127953},end:{line:1,column:127967}},"3373":{start:{line:1,column:127970},end:{line:1,column:128006}},"3374":{start:{line:1,column:127982},end:{line:1,column:127999}},"3375":{start:{line:1,column:128007},end:{line:1,column:128180}},"3376":{start:{line:1,column:128194},end:{line:1,column:128266}},"3377":{start:{line:1,column:128292},end:{line:1,column:128341}},"3378":{start:{line:1,column:128368},end:{line:1,column:128389}},"3379":{start:{line:1,column:128390},end:{line:1,column:128405}},"3380":{start:{line:1,column:128396},end:{line:1,column:128405}},"3381":{start:{line:1,column:128411},end:{line:1,column:128433}},"3382":{start:{line:1,column:128434},end:{line:1,column:128487}},"3383":{start:{line:1,column:128520},end:{line:1,column:128542}},"3384":{start:{line:1,column:128543},end:{line:1,column:128554}},"3385":{start:{line:1,column:128579},end:{line:1,column:128625}},"3386":{start:{line:1,column:128647},end:{line:1,column:128676}},"3387":{start:{line:1,column:128708},end:{line:1,column:128723}},"3388":{start:{line:1,column:128726},end:{line:1,column:128748}},"3389":{start:{line:1,column:128751},end:{line:1,column:128792}},"3390":{start:{line:1,column:128793},end:{line:1,column:128935}},"3391":{start:{line:1,column:128906},end:{line:1,column:128933}},"3392":{start:{line:1,column:128946},end:{line:1,column:128976}},"3393":{start:{line:1,column:128987},end:{line:1,column:129017}},"3394":{start:{line:1,column:129047},end:{line:1,column:129064}},"3395":{start:{line:1,column:129065},end:{line:1,column:129130}},"3396":{start:{line:1,column:129147},end:{line:1,column:129246}},"3397":{start:{line:1,column:129219},end:{line:1,column:129246}},"3398":{start:{line:1,column:129257},end:{line:1,column:129293}},"3399":{start:{line:1,column:129313},end:{line:1,column:129317}},"3400":{start:{line:1,column:129318},end:{line:1,column:129505}},"3401":{start:{line:1,column:129526},end:{line:1,column:129560}},"3402":{start:{line:1,column:129574},end:{line:1,column:129664}},"3403":{start:{line:1,column:129688},end:{line:1,column:129703}},"3404":{start:{line:1,column:129706},end:{line:1,column:129719}},"3405":{start:{line:1,column:129722},end:{line:1,column:129766}},"3406":{start:{line:1,column:129730},end:{line:1,column:129765}},"3407":{start:{line:1,column:129769},end:{line:1,column:129825}},"3408":{start:{line:1,column:129779},end:{line:1,column:129824}},"3409":{start:{line:1,column:129826},end:{line:1,column:129858}},"3410":{start:{line:1,column:129851},end:{line:1,column:129857}},"3411":{start:{line:1,column:129882},end:{line:1,column:129940}},"3412":{start:{line:1,column:129946},end:{line:1,column:129971}},"3413":{start:{line:1,column:129974},end:{line:1,column:129987}},"3414":{start:{line:1,column:129990},end:{line:1,column:130034}},"3415":{start:{line:1,column:129998},end:{line:1,column:130033}},"3416":{start:{line:1,column:130037},end:{line:1,column:130097}},"3417":{start:{line:1,column:130045},end:{line:1,column:130096}},"3418":{start:{line:1,column:130100},end:{line:1,column:130138}},"3419":{start:{line:1,column:130108},end:{line:1,column:130137}},"3420":{start:{line:1,column:130143},end:{line:1,column:130221}},"3421":{start:{line:1,column:130148},end:{line:1,column:130220}},"3422":{start:{line:1,column:130222},end:{line:1,column:130339}},"3423":{start:{line:1,column:130229},end:{line:1,column:130304}},"3424":{start:{line:1,column:130355},end:{line:1,column:130560}},"3425":{start:{line:1,column:130381},end:{line:1,column:130424}},"3426":{start:{line:1,column:130482},end:{line:1,column:130525}},"3427":{start:{line:1,column:130591},end:{line:1,column:130607}},"3428":{start:{line:1,column:130616},end:{line:1,column:130862}},"3429":{start:{line:1,column:130744},end:{line:1,column:130751}},"3430":{start:{line:1,column:130757},end:{line:1,column:130806}},"3431":{start:{line:1,column:130807},end:{line:1,column:130861}},"3432":{start:{line:1,column:130883},end:{line:1,column:130906}},"3433":{start:{line:1,column:130934},end:{line:1,column:130950}},"3434":{start:{line:1,column:130953},end:{line:1,column:131121}},"3435":{start:{line:1,column:130994},end:{line:1,column:131016}},"3436":{start:{line:1,column:131017},end:{line:1,column:131071}},"3437":{start:{line:1,column:131023},end:{line:1,column:131071}},"3438":{start:{line:1,column:131071},end:{line:1,column:131119}},"3439":{start:{line:1,column:131122},end:{line:1,column:131198}},"3440":{start:{line:1,column:131220},end:{line:1,column:131259}},"3441":{start:{line:1,column:131279},end:{line:1,column:131344}},"3442":{start:{line:1,column:131317},end:{line:1,column:131332}},"3443":{start:{line:1,column:131377},end:{line:1,column:131395}},"3444":{start:{line:1,column:131398},end:{line:1,column:131480}},"3445":{start:{line:1,column:131405},end:{line:1,column:131480}},"3446":{start:{line:1,column:131417},end:{line:1,column:131479}},"3447":{start:{line:1,column:131428},end:{line:1,column:131478}},"3448":{start:{line:1,column:131483},end:{line:1,column:131489}},"3449":{start:{line:1,column:131492},end:{line:1,column:131502}},"3450":{start:{line:1,column:131503},end:{line:1,column:131600}},"3451":{start:{line:1,column:131626},end:{line:1,column:131692}},"3452":{start:{line:1,column:131695},end:{line:1,column:131761}},"3453":{start:{line:1,column:131698},end:{line:1,column:131761}},"3454":{start:{line:1,column:131762},end:{line:1,column:131815}},"3455":{start:{line:1,column:131808},end:{line:1,column:131815}},"3456":{start:{line:1,column:131821},end:{line:1,column:131857}},"3457":{start:{line:1,column:131858},end:{line:1,column:131952}},"3458":{start:{line:1,column:132001},end:{line:1,column:132005}},"3459":{start:{line:1,column:132008},end:{line:1,column:132009}},"3460":{start:{line:1,column:132012},end:{line:1,column:132044}},"3461":{start:{line:1,column:132047},end:{line:1,column:132052}},"3462":{start:{line:1,column:132055},end:{line:1,column:132080}},"3463":{start:{line:1,column:132081},end:{line:1,column:132168}},"3464":{start:{line:1,column:132174},end:{line:1,column:132182}},"3465":{start:{line:1,column:132183},end:{line:1,column:132264}},"3466":{start:{line:1,column:132293},end:{line:1,column:132325}},"3467":{start:{line:1,column:132316},end:{line:1,column:132325}},"3468":{start:{line:1,column:132325},end:{line:1,column:132340}},"3469":{start:{line:1,column:132331},end:{line:1,column:132340}},"3470":{start:{line:1,column:132346},end:{line:1,column:132364}},"3471":{start:{line:1,column:132365},end:{line:1,column:132416}},"3472":{start:{line:1,column:132418},end:{line:1,column:132426}},"3473":{start:{line:1,column:132445},end:{line:1,column:132494}},"3474":{start:{line:1,column:132470},end:{line:1,column:132493}},"3475":{start:{line:1,column:132578},end:{line:1,column:132579}},"3476":{start:{line:1,column:132614},end:{line:1,column:132615}},"3477":{start:{line:1,column:132618},end:{line:1,column:132638}},"3478":{start:{line:1,column:132639},end:{line:1,column:132978}},"3479":{start:{line:1,column:132696},end:{line:1,column:132716}},"3480":{start:{line:1,column:132717},end:{line:1,column:132748}},"3481":{start:{line:1,column:132760},end:{line:1,column:132782}},"3482":{start:{line:1,column:132783},end:{line:1,column:132977}},"3483":{start:{line:1,column:132798},end:{line:1,column:132826}},"3484":{start:{line:1,column:132831},end:{line:1,column:132977}},"3485":{start:{line:1,column:132853},end:{line:1,column:132858}},"3486":{start:{line:1,column:132861},end:{line:1,column:132881}},"3487":{start:{line:1,column:132884},end:{line:1,column:132904}},"3488":{start:{line:1,column:132907},end:{line:1,column:132926}},"3489":{start:{line:1,column:132929},end:{line:1,column:132948}},"3490":{start:{line:1,column:132949},end:{line:1,column:132976}},"3491":{start:{line:1,column:132978},end:{line:1,column:133066}},"3492":{start:{line:1,column:133154},end:{line:1,column:133155}},"3493":{start:{line:1,column:133158},end:{line:1,column:133161}},"3494":{start:{line:1,column:133162},end:{line:1,column:133276}},"3495":{start:{line:1,column:133292},end:{line:1,column:133354}},"3496":{start:{line:1,column:133382},end:{line:1,column:133408}},"3497":{start:{line:1,column:133411},end:{line:1,column:133418}},"3498":{start:{line:1,column:133421},end:{line:1,column:133438}},"3499":{start:{line:1,column:133441},end:{line:1,column:133501}},"3500":{start:{line:1,column:133451},end:{line:1,column:133472}},"3501":{start:{line:1,column:133473},end:{line:1,column:133500}},"3502":{start:{line:1,column:133502},end:{line:1,column:133617}},"3503":{start:{line:1,column:133639},end:{line:1,column:133682}},"3504":{start:{line:1,column:133762},end:{line:1,column:133763}},"3505":{start:{line:1,column:133766},end:{line:1,column:133797}},"3506":{start:{line:1,column:133800},end:{line:1,column:133813}},"3507":{start:{line:1,column:133816},end:{line:1,column:133817}},"3508":{start:{line:1,column:133820},end:{line:1,column:133823}},"3509":{start:{line:1,column:133824},end:{line:1,column:133900}},"3510":{start:{line:1,column:133836},end:{line:1,column:133845}},"3511":{start:{line:1,column:133848},end:{line:1,column:133857}},"3512":{start:{line:1,column:133860},end:{line:1,column:133867}},"3513":{start:{line:1,column:133871},end:{line:1,column:133888}},"3514":{start:{line:1,column:133889},end:{line:1,column:133899}},"3515":{start:{line:1,column:133906},end:{line:1,column:133930}},"3516":{start:{line:1,column:133933},end:{line:1,column:133940}},"3517":{start:{line:1,column:133943},end:{line:1,column:133948}},"3518":{start:{line:1,column:133951},end:{line:1,column:133956}},"3519":{start:{line:1,column:134007},end:{line:1,column:134020}},"3520":{start:{line:1,column:134023},end:{line:1,column:134026}},"3521":{start:{line:1,column:134029},end:{line:1,column:134032}},"3522":{start:{line:1,column:134035},end:{line:1,column:134040}},"3523":{start:{line:1,column:134043},end:{line:1,column:134048}},"3524":{start:{line:1,column:134051},end:{line:1,column:134054}},"3525":{start:{line:1,column:134057},end:{line:1,column:134060}},"3526":{start:{line:1,column:134063},end:{line:1,column:134068}},"3527":{start:{line:1,column:134072},end:{line:1,column:134077}},"3528":{start:{line:1,column:134078},end:{line:1,column:134637}},"3529":{start:{line:1,column:134104},end:{line:1,column:134111}},"3530":{start:{line:1,column:134112},end:{line:1,column:134195}},"3531":{start:{line:1,column:134160},end:{line:1,column:134171}},"3532":{start:{line:1,column:134172},end:{line:1,column:134194}},"3533":{start:{line:1,column:134201},end:{line:1,column:134212}},"3534":{start:{line:1,column:134213},end:{line:1,column:134290}},"3535":{start:{line:1,column:134245},end:{line:1,column:134257}},"3536":{start:{line:1,column:134258},end:{line:1,column:134289}},"3537":{start:{line:1,column:134296},end:{line:1,column:134313}},"3538":{start:{line:1,column:134314},end:{line:1,column:134419}},"3539":{start:{line:1,column:134376},end:{line:1,column:134387}},"3540":{start:{line:1,column:134388},end:{line:1,column:134418}},"3541":{start:{line:1,column:134426},end:{line:1,column:134437}},"3542":{start:{line:1,column:134438},end:{line:1,column:134507}},"3543":{start:{line:1,column:134472},end:{line:1,column:134483}},"3544":{start:{line:1,column:134484},end:{line:1,column:134506}},"3545":{start:{line:1,column:134513},end:{line:1,column:134527}},"3546":{start:{line:1,column:134533},end:{line:1,column:134548}},"3547":{start:{line:1,column:134551},end:{line:1,column:134566}},"3548":{start:{line:1,column:134567},end:{line:1,column:134581}},"3549":{start:{line:1,column:134587},end:{line:1,column:134602}},"3550":{start:{line:1,column:134606},end:{line:1,column:134621}},"3551":{start:{line:1,column:134622},end:{line:1,column:134636}},"3552":{start:{line:1,column:134637},end:{line:1,column:134650}},"3553":{start:{line:1,column:134722},end:{line:1,column:134723}},"3554":{start:{line:1,column:134726},end:{line:1,column:134736}},"3555":{start:{line:1,column:134737},end:{line:1,column:134813}},"3556":{start:{line:1,column:134743},end:{line:1,column:134759}},"3557":{start:{line:1,column:134759},end:{line:1,column:134788}},"3558":{start:{line:1,column:134769},end:{line:1,column:134770}},"3559":{start:{line:1,column:134779},end:{line:1,column:134788}},"3560":{start:{line:1,column:134788},end:{line:1,column:134812}},"3561":{start:{line:1,column:134813},end:{line:1,column:134846}},"3562":{start:{line:1,column:134928},end:{line:1,column:134929}},"3563":{start:{line:1,column:135011},end:{line:1,column:135012}},"3564":{start:{line:1,column:135015},end:{line:1,column:135038}},"3565":{start:{line:1,column:135039},end:{line:1,column:135052}},"3566":{start:{line:1,column:135045},end:{line:1,column:135052}},"3567":{start:{line:1,column:135052},end:{line:1,column:135172}},"3568":{start:{line:1,column:135178},end:{line:1,column:135188}},"3569":{start:{line:1,column:135189},end:{line:1,column:135267}},"3570":{start:{line:1,column:135195},end:{line:1,column:135211}},"3571":{start:{line:1,column:135211},end:{line:1,column:135242}},"3572":{start:{line:1,column:135221},end:{line:1,column:135222}},"3573":{start:{line:1,column:135231},end:{line:1,column:135242}},"3574":{start:{line:1,column:135242},end:{line:1,column:135266}},"3575":{start:{line:1,column:135267},end:{line:1,column:135361}},"3576":{start:{line:1,column:135369},end:{line:1,column:137178}},"3577":{start:{line:1,column:135396},end:{line:1,column:135401}},"3578":{start:{line:1,column:135418},end:{line:1,column:135600}},"3579":{start:{line:1,column:135622},end:{line:1,column:135657}},"3580":{start:{line:1,column:135677},end:{line:1,column:135724}},"3581":{start:{line:1,column:135707},end:{line:1,column:135723}},"3582":{start:{line:1,column:135822},end:{line:1,column:136030}},"3583":{start:{line:1,column:136052},end:{line:1,column:136078}},"3584":{start:{line:1,column:136100},end:{line:1,column:136115}},"3585":{start:{line:1,column:136186},end:{line:1,column:136272}},"3586":{start:{line:1,column:136275},end:{line:1,column:136324}},"3587":{start:{line:1,column:136327},end:{line:1,column:136335}},"3588":{start:{line:1,column:136338},end:{line:1,column:136354}},"3589":{start:{line:1,column:136357},end:{line:1,column:136364}},"3590":{start:{line:1,column:136367},end:{line:1,column:136380}},"3591":{start:{line:1,column:136381},end:{line:1,column:136392}},"3592":{start:{line:1,column:136476},end:{line:1,column:136554}},"3593":{start:{line:1,column:136576},end:{line:1,column:136588}},"3594":{start:{line:1,column:136591},end:{line:1,column:136598}},"3595":{start:{line:1,column:136601},end:{line:1,column:136612}},"3596":{start:{line:1,column:136613},end:{line:1,column:136656}},"3597":{start:{line:1,column:136676},end:{line:1,column:136705}},"3598":{start:{line:1,column:136745},end:{line:1,column:136749}},"3599":{start:{line:1,column:136752},end:{line:1,column:136767}},"3600":{start:{line:1,column:136770},end:{line:1,column:136786}},"3601":{start:{line:1,column:136789},end:{line:1,column:136799}},"3602":{start:{line:1,column:136800},end:{line:1,column:136942}},"3603":{start:{line:1,column:136935},end:{line:1,column:136942}},"3604":{start:{line:1,column:136942},end:{line:1,column:136951}},"3605":{start:{line:1,column:136957},end:{line:1,column:136990}},"3606":{start:{line:1,column:136991},end:{line:1,column:137032}},"3607":{start:{line:1,column:137038},end:{line:1,column:137066}},"3608":{start:{line:1,column:137069},end:{line:1,column:137072}},"3609":{start:{line:1,column:137073},end:{line:1,column:137176}},"3610":{start:{line:1,column:137200},end:{line:1,column:137486}},"3611":{start:{line:1,column:137506},end:{line:1,column:137523}},"3612":{start:{line:1,column:137539},end:{line:1,column:137613}},"3613":{start:{line:1,column:137642},end:{line:1,column:137650}},"3614":{start:{line:1,column:137673},end:{line:1,column:137674}},"3615":{start:{line:1,column:137691},end:{line:1,column:137692}},"3616":{start:{line:1,column:137695},end:{line:1,column:137708}},"3617":{start:{line:1,column:137711},end:{line:1,column:137724}},"3618":{start:{line:1,column:137727},end:{line:1,column:137745}},"3619":{start:{line:1,column:137746},end:{line:1,column:137804}},"3620":{start:{line:1,column:137850},end:{line:1,column:137851}},"3621":{start:{line:1,column:137884},end:{line:1,column:137893}},"3622":{start:{line:1,column:137896},end:{line:1,column:137901}},"3623":{start:{line:1,column:137924},end:{line:1,column:137929}},"3624":{start:{line:1,column:137936},end:{line:1,column:138037}},"3625":{start:{line:1,column:137953},end:{line:1,column:138037}},"3626":{start:{line:1,column:138037},end:{line:1,column:138092}},"3627":{start:{line:1,column:138120},end:{line:1,column:138128}},"3628":{start:{line:1,column:138154},end:{line:1,column:138163}},"3629":{start:{line:1,column:138186},end:{line:1,column:138191}},"3630":{start:{line:1,column:138194},end:{line:1,column:138195}},"3631":{start:{line:1,column:138198},end:{line:1,column:138199}},"3632":{start:{line:1,column:138214},end:{line:1,column:138232}},"3633":{start:{line:1,column:138217},end:{line:1,column:138232}},"3634":{start:{line:1,column:138235},end:{line:1,column:138291}},"3635":{start:{line:1,column:138240},end:{line:1,column:138290}},"3636":{start:{line:1,column:138292},end:{line:1,column:138473}},"3637":{start:{line:1,column:138343},end:{line:1,column:138372}},"3638":{start:{line:1,column:138363},end:{line:1,column:138372}},"3639":{start:{line:1,column:138378},end:{line:1,column:138381}},"3640":{start:{line:1,column:138384},end:{line:1,column:138387}},"3641":{start:{line:1,column:138390},end:{line:1,column:138393}},"3642":{start:{line:1,column:138394},end:{line:1,column:138472}},"3643":{start:{line:1,column:138473},end:{line:1,column:138476}},"3644":{start:{line:1,column:138498},end:{line:1,column:138507}},"3645":{start:{line:1,column:138510},end:{line:1,column:138543}},"3646":{start:{line:1,column:138544},end:{line:1,column:138646}},"3647":{start:{line:1,column:138662},end:{line:1,column:138736}},"3648":{start:{line:1,column:138764},end:{line:1,column:138771}},"3649":{start:{line:1,column:138772},end:{line:1,column:138854}},"3650":{start:{line:1,column:138902},end:{line:1,column:138903}},"3651":{start:{line:1,column:138906},end:{line:1,column:138911}},"3652":{start:{line:1,column:138912},end:{line:1,column:139011}},"3653":{start:{line:1,column:138927},end:{line:1,column:139011}},"3654":{start:{line:1,column:139019},end:{line:1,column:139044}},"3655":{start:{line:1,column:139066},end:{line:1,column:139112}},"3656":{start:{line:1,column:139120},end:{line:1,column:141103}},"3657":{start:{line:1,column:139155},end:{line:1,column:139161}},"3658":{start:{line:1,column:139178},end:{line:1,column:139365}},"3659":{start:{line:1,column:139387},end:{line:1,column:139448}},"3660":{start:{line:1,column:139468},end:{line:1,column:139527}},"3661":{start:{line:1,column:139498},end:{line:1,column:139526}},"3662":{start:{line:1,column:139543},end:{line:1,column:139799}},"3663":{start:{line:1,column:139831},end:{line:1,column:139843}},"3664":{start:{line:1,column:139844},end:{line:1,column:140024}},"3665":{start:{line:1,column:139939},end:{line:1,column:139975}},"3666":{start:{line:1,column:139976},end:{line:1,column:140023}},"3667":{start:{line:1,column:140039},end:{line:1,column:140116}},"3668":{start:{line:1,column:140130},end:{line:1,column:140149}},"3669":{start:{line:1,column:140165},end:{line:1,column:140234}},"3670":{start:{line:1,column:140249},end:{line:1,column:140262}},"3671":{start:{line:1,column:140265},end:{line:1,column:140276}},"3672":{start:{line:1,column:140277},end:{line:1,column:140307}},"3673":{start:{line:1,column:140321},end:{line:1,column:140334}},"3674":{start:{line:1,column:140337},end:{line:1,column:140348}},"3675":{start:{line:1,column:140351},end:{line:1,column:140359}},"3676":{start:{line:1,column:140360},end:{line:1,column:140383}},"3677":{start:{line:1,column:140407},end:{line:1,column:140419}},"3678":{start:{line:1,column:140422},end:{line:1,column:140426}},"3679":{start:{line:1,column:140429},end:{line:1,column:140440}},"3680":{start:{line:1,column:140443},end:{line:1,column:140478}},"3681":{start:{line:1,column:140479},end:{line:1,column:140499}},"3682":{start:{line:1,column:140492},end:{line:1,column:140499}},"3683":{start:{line:1,column:140505},end:{line:1,column:140507}},"3684":{start:{line:1,column:140510},end:{line:1,column:140515}},"3685":{start:{line:1,column:140520},end:{line:1,column:140693}},"3686":{start:{line:1,column:140567},end:{line:1,column:140571}},"3687":{start:{line:1,column:140574},end:{line:1,column:140578}},"3688":{start:{line:1,column:140581},end:{line:1,column:140585}},"3689":{start:{line:1,column:140586},end:{line:1,column:140615}},"3690":{start:{line:1,column:140596},end:{line:1,column:140606}},"3691":{start:{line:1,column:140606},end:{line:1,column:140614}},"3692":{start:{line:1,column:140621},end:{line:1,column:140651}},"3693":{start:{line:1,column:140654},end:{line:1,column:140672}},"3694":{start:{line:1,column:140673},end:{line:1,column:140692}},"3695":{start:{line:1,column:140693},end:{line:1,column:140719}},"3696":{start:{line:1,column:140739},end:{line:1,column:140766}},"3697":{start:{line:1,column:140785},end:{line:1,column:140798}},"3698":{start:{line:1,column:140801},end:{line:1,column:140809}},"3699":{start:{line:1,column:140812},end:{line:1,column:140822}},"3700":{start:{line:1,column:140823},end:{line:1,column:140856}},"3701":{start:{line:1,column:140856},end:{line:1,column:140906}},"3702":{start:{line:1,column:140871},end:{line:1,column:140906}},"3703":{start:{line:1,column:140906},end:{line:1,column:140915}},"3704":{start:{line:1,column:140936},end:{line:1,column:140952}},"3705":{start:{line:1,column:140953},end:{line:1,column:141089}},"3706":{start:{line:1,column:141091},end:{line:1,column:141099}},"3707":{start:{line:1,column:141131},end:{line:1,column:141140}},"3708":{start:{line:1,column:141149},end:{line:1,column:141166}},"3709":{start:{line:1,column:141167},end:{line:1,column:141208}},"3710":{start:{line:1,column:141216},end:{line:1,column:142276}},"3711":{start:{line:1,column:141251},end:{line:1,column:141258}},"3712":{start:{line:1,column:141292},end:{line:1,column:141392}},"3713":{start:{line:1,column:141414},end:{line:1,column:141475}},"3714":{start:{line:1,column:141491},end:{line:1,column:141596}},"3715":{start:{line:1,column:141618},end:{line:1,column:141630}},"3716":{start:{line:1,column:141641},end:{line:1,column:141667}},"3717":{start:{line:1,column:141668},end:{line:1,column:141739}},"3718":{start:{line:1,column:141754},end:{line:1,column:141777}},"3719":{start:{line:1,column:141792},end:{line:1,column:141815}},"3720":{start:{line:1,column:141847},end:{line:1,column:141873}},"3721":{start:{line:1,column:141874},end:{line:1,column:141889}},"3722":{start:{line:1,column:141898},end:{line:1,column:141920}},"3723":{start:{line:1,column:141926},end:{line:1,column:141937}},"3724":{start:{line:1,column:141938},end:{line:1,column:141972}},"3725":{start:{line:1,column:141978},end:{line:1,column:141997}},"3726":{start:{line:1,column:141998},end:{line:1,column:142011}},"3727":{start:{line:1,column:142028},end:{line:1,column:142040}},"3728":{start:{line:1,column:142041},end:{line:1,column:142200}},"3729":{start:{line:1,column:142218},end:{line:1,column:142234}},"3730":{start:{line:1,column:142235},end:{line:1,column:142262}},"3731":{start:{line:1,column:142264},end:{line:1,column:142272}},"3732":{start:{line:1,column:142331},end:{line:1,column:142378}},"3733":{start:{line:1,column:142389},end:{line:1,column:142544}},"3734":{start:{line:1,column:142566},end:{line:1,column:142585}},"3735":{start:{line:1,column:142611},end:{line:1,column:142632}},"3736":{start:{line:1,column:142635},end:{line:1,column:142650}},"3737":{start:{line:1,column:142653},end:{line:1,column:142658}},"3738":{start:{line:1,column:142659},end:{line:1,column:142766}},"3739":{start:{line:1,column:142812},end:{line:1,column:142846}},"3740":{start:{line:1,column:142849},end:{line:1,column:142871}},"3741":{start:{line:1,column:142874},end:{line:1,column:142879}},"3742":{start:{line:1,column:142882},end:{line:1,column:142895}},"3743":{start:{line:1,column:142898},end:{line:1,column:142913}},"3744":{start:{line:1,column:142916},end:{line:1,column:142923}},"3745":{start:{line:1,column:142924},end:{line:1,column:143131}},"3746":{start:{line:1,column:143153},end:{line:1,column:143158}},"3747":{start:{line:1,column:143161},end:{line:1,column:143175}},"3748":{start:{line:1,column:143178},end:{line:1,column:143192}},"3749":{start:{line:1,column:143195},end:{line:1,column:143208}},"3750":{start:{line:1,column:143211},end:{line:1,column:143224}},"3751":{start:{line:1,column:143225},end:{line:1,column:143548}},"3752":{start:{line:1,column:143576},end:{line:1,column:143584}},"3753":{start:{line:1,column:143587},end:{line:1,column:143595}},"3754":{start:{line:1,column:143598},end:{line:1,column:143617}},"3755":{start:{line:1,column:143618},end:{line:1,column:143680}},"3756":{start:{line:1,column:143696},end:{line:1,column:143753}},"3757":{start:{line:1,column:143771},end:{line:1,column:143794}},"3758":{start:{line:1,column:143823},end:{line:1,column:143837}},"3759":{start:{line:1,column:143840},end:{line:1,column:143854}},"3760":{start:{line:1,column:143857},end:{line:1,column:143882}},"3761":{start:{line:1,column:143885},end:{line:1,column:143910}},"3762":{start:{line:1,column:143911},end:{line:1,column:143966}},"3763":{start:{line:1,column:143974},end:{line:1,column:144980}},"3764":{start:{line:1,column:144001},end:{line:1,column:144006}},"3765":{start:{line:1,column:144023},end:{line:1,column:144114}},"3766":{start:{line:1,column:144136},end:{line:1,column:144197}},"3767":{start:{line:1,column:144213},end:{line:1,column:144368}},"3768":{start:{line:1,column:144440},end:{line:1,column:144444}},"3769":{start:{line:1,column:144463},end:{line:1,column:144471}},"3770":{start:{line:1,column:144474},end:{line:1,column:144492}},"3771":{start:{line:1,column:144493},end:{line:1,column:144675}},"3772":{start:{line:1,column:144691},end:{line:1,column:144712}},"3773":{start:{line:1,column:144727},end:{line:1,column:144751}},"3774":{start:{line:1,column:144766},end:{line:1,column:144790}},"3775":{start:{line:1,column:144842},end:{line:1,column:144888}},"3776":{start:{line:1,column:144889},end:{line:1,column:144924}},"3777":{start:{line:1,column:144937},end:{line:1,column:144978}},"3778":{start:{line:1,column:144984},end:{line:1,column:145074}},"3779":{start:{line:1,column:145078},end:{line:1,column:145221}},"3780":{start:{line:1,column:145225},end:{line:1,column:145283}},"3781":{start:{line:1,column:145235},end:{line:1,column:145282}},"3782":{start:{line:1,column:145299},end:{line:1,column:145321}},"3783":{start:{line:1,column:145337},end:{line:1,column:145359}},"3784":{start:{line:1,column:145377},end:{line:1,column:145431}},"3785":{start:{line:1,column:145449},end:{line:1,column:145499}},"3786":{start:{line:1,column:145489},end:{line:1,column:145496}},"3787":{start:{line:1,column:145517},end:{line:1,column:145567}},"3788":{start:{line:1,column:145557},end:{line:1,column:145564}},"3789":{start:{line:1,column:145589},end:{line:1,column:145590}},"3790":{start:{line:1,column:145591},end:{line:1,column:145709}},"3791":{start:{line:1,column:145611},end:{line:1,column:145641}},"3792":{start:{line:1,column:145642},end:{line:1,column:145708}},"3793":{start:{line:1,column:145731},end:{line:1,column:145793}},"3794":{start:{line:1,column:145742},end:{line:1,column:145793}},"3795":{start:{line:1,column:145784},end:{line:1,column:145793}},"3796":{start:{line:1,column:145793},end:{line:1,column:145801}},"3797":{start:{line:1,column:145817},end:{line:1,column:145861}},"3798":{start:{line:1,column:145876},end:{line:1,column:145955}},"3799":{start:{line:1,column:145963},end:{line:1,column:146200}},"3800":{start:{line:1,column:146035},end:{line:1,column:146056}},"3801":{start:{line:1,column:146049},end:{line:1,column:146056}},"3802":{start:{line:1,column:146089},end:{line:1,column:146097}},"3803":{start:{line:1,column:146111},end:{line:1,column:146112}},"3804":{start:{line:1,column:146115},end:{line:1,column:146143}},"3805":{start:{line:1,column:146144},end:{line:1,column:146174}},"3806":{start:{line:1,column:146167},end:{line:1,column:146174}},"3807":{start:{line:1,column:146180},end:{line:1,column:146185}},"3808":{start:{line:1,column:146186},end:{line:1,column:146198}},"3809":{start:{line:1,column:146230},end:{line:1,column:146242}},"3810":{start:{line:1,column:146243},end:{line:1,column:146273}},"3811":{start:{line:1,column:146251},end:{line:1,column:146273}},"3812":{start:{line:1,column:146279},end:{line:1,column:146281}},"3813":{start:{line:1,column:146284},end:{line:1,column:146295}},"3814":{start:{line:1,column:146298},end:{line:1,column:146299}},"3815":{start:{line:1,column:146302},end:{line:1,column:146307}},"3816":{start:{line:1,column:146310},end:{line:1,column:146311}},"3817":{start:{line:1,column:146322},end:{line:1,column:146669}},"3818":{start:{line:1,column:146359},end:{line:1,column:146360}},"3819":{start:{line:1,column:146363},end:{line:1,column:146364}},"3820":{start:{line:1,column:146369},end:{line:1,column:146392}},"3821":{start:{line:1,column:146395},end:{line:1,column:146430}},"3822":{start:{line:1,column:146433},end:{line:1,column:146436}},"3823":{start:{line:1,column:146437},end:{line:1,column:146473}},"3824":{start:{line:1,column:146453},end:{line:1,column:146473}},"3825":{start:{line:1,column:146473},end:{line:1,column:146483}},"3826":{start:{line:1,column:146489},end:{line:1,column:146508}},"3827":{start:{line:1,column:146511},end:{line:1,column:146546}},"3828":{start:{line:1,column:146557},end:{line:1,column:146561}},"3829":{start:{line:1,column:146562},end:{line:1,column:146656}},"3830":{start:{line:1,column:146585},end:{line:1,column:146656}},"3831":{start:{line:1,column:146656},end:{line:1,column:146668}},"3832":{start:{line:1,column:146669},end:{line:1,column:146689}},"3833":{start:{line:1,column:146717},end:{line:1,column:146718}},"3834":{start:{line:1,column:146721},end:{line:1,column:146722}},"3835":{start:{line:1,column:146745},end:{line:1,column:146747}},"3836":{start:{line:1,column:146750},end:{line:1,column:146755}},"3837":{start:{line:1,column:146758},end:{line:1,column:146764}},"3838":{start:{line:1,column:146767},end:{line:1,column:146775}},"3839":{start:{line:1,column:146776},end:{line:1,column:147100}},"3840":{start:{line:1,column:146795},end:{line:1,column:146822}},"3841":{start:{line:1,column:146828},end:{line:1,column:146831}},"3842":{start:{line:1,column:146832},end:{line:1,column:147099}},"3843":{start:{line:1,column:146841},end:{line:1,column:146886}},"3844":{start:{line:1,column:146897},end:{line:1,column:146900}},"3845":{start:{line:1,column:146901},end:{line:1,column:147042}},"3846":{start:{line:1,column:146924},end:{line:1,column:146937}},"3847":{start:{line:1,column:146940},end:{line:1,column:146953}},"3848":{start:{line:1,column:146954},end:{line:1,column:147041}},"3849":{start:{line:1,column:147042},end:{line:1,column:147098}},"3850":{start:{line:1,column:147100},end:{line:1,column:147108}},"3851":{start:{line:1,column:147124},end:{line:1,column:147274}},"3852":{start:{line:1,column:147147},end:{line:1,column:147154}},"3853":{start:{line:1,column:147155},end:{line:1,column:147273}},"3854":{start:{line:1,column:147290},end:{line:1,column:147325}},"3855":{start:{line:1,column:147318},end:{line:1,column:147323}},"3856":{start:{line:1,column:147349},end:{line:1,column:147357}},"3857":{start:{line:1,column:147360},end:{line:1,column:147361}},"3858":{start:{line:1,column:147375},end:{line:1,column:147376}},"3859":{start:{line:1,column:147417},end:{line:1,column:147434}},"3860":{start:{line:1,column:147435},end:{line:1,column:147532}},"3861":{start:{line:1,column:147540},end:{line:1,column:148374}},"3862":{start:{line:1,column:147630},end:{line:1,column:147658}},"3863":{start:{line:1,column:147645},end:{line:1,column:147651}},"3864":{start:{line:1,column:147651},end:{line:1,column:147657}},"3865":{start:{line:1,column:147664},end:{line:1,column:147671}},"3866":{start:{line:1,column:147672},end:{line:1,column:148354}},"3867":{start:{line:1,column:147729},end:{line:1,column:147730}},"3868":{start:{line:1,column:147733},end:{line:1,column:147752}},"3869":{start:{line:1,column:147755},end:{line:1,column:147764}},"3870":{start:{line:1,column:147765},end:{line:1,column:147843}},"3871":{start:{line:1,column:147836},end:{line:1,column:147843}},"3872":{start:{line:1,column:147849},end:{line:1,column:147868}},"3873":{start:{line:1,column:147869},end:{line:1,column:147933}},"3874":{start:{line:1,column:147926},end:{line:1,column:147933}},"3875":{start:{line:1,column:147954},end:{line:1,column:147961}},"3876":{start:{line:1,column:147964},end:{line:1,column:147980}},"3877":{start:{line:1,column:147981},end:{line:1,column:148003}},"3878":{start:{line:1,column:147990},end:{line:1,column:147996}},"3879":{start:{line:1,column:147996},end:{line:1,column:148002}},"3880":{start:{line:1,column:148003},end:{line:1,column:148168}},"3881":{start:{line:1,column:148111},end:{line:1,column:148133}},"3882":{start:{line:1,column:148151},end:{line:1,column:148163}},"3883":{start:{line:1,column:148174},end:{line:1,column:148338}},"3884":{start:{line:1,column:148205},end:{line:1,column:148221}},"3885":{start:{line:1,column:148221},end:{line:1,column:148227}},"3886":{start:{line:1,column:148241},end:{line:1,column:148255}},"3887":{start:{line:1,column:148255},end:{line:1,column:148261}},"3888":{start:{line:1,column:148269},end:{line:1,column:148337}},"3889":{start:{line:1,column:148338},end:{line:1,column:148352}},"3890":{start:{line:1,column:148367},end:{line:1,column:148372}},"3891":{start:{line:1,column:148400},end:{line:1,column:148410}},"3892":{start:{line:1,column:148413},end:{line:1,column:148421}},"3893":{start:{line:1,column:148424},end:{line:1,column:148432}},"3894":{start:{line:1,column:148435},end:{line:1,column:148437}},"3895":{start:{line:1,column:148438},end:{line:1,column:148784}},"3896":{start:{line:1,column:148473},end:{line:1,column:148474}},"3897":{start:{line:1,column:148475},end:{line:1,column:148487}},"3898":{start:{line:1,column:148493},end:{line:1,column:148515}},"3899":{start:{line:1,column:148516},end:{line:1,column:148589}},"3900":{start:{line:1,column:148532},end:{line:1,column:148580}},"3901":{start:{line:1,column:148580},end:{line:1,column:148588}},"3902":{start:{line:1,column:148595},end:{line:1,column:148602}},"3903":{start:{line:1,column:148603},end:{line:1,column:148783}},"3904":{start:{line:1,column:148625},end:{line:1,column:148657}},"3905":{start:{line:1,column:148660},end:{line:1,column:148669}},"3906":{start:{line:1,column:148670},end:{line:1,column:148782}},"3907":{start:{line:1,column:148685},end:{line:1,column:148782}},"3908":{start:{line:1,column:148784},end:{line:1,column:148792}},"3909":{start:{line:1,column:148814},end:{line:1,column:148826}},"3910":{start:{line:1,column:148819},end:{line:1,column:148826}},"3911":{start:{line:1,column:148832},end:{line:1,column:148836}},"3912":{start:{line:1,column:148839},end:{line:1,column:148843}},"3913":{start:{line:1,column:148844},end:{line:1,column:148906}},"3914":{start:{line:1,column:148947},end:{line:1,column:148952}},"3915":{start:{line:1,column:148955},end:{line:1,column:148963}},"3916":{start:{line:1,column:148966},end:{line:1,column:148968}},"3917":{start:{line:1,column:148969},end:{line:1,column:149151}},"3918":{start:{line:1,column:149015},end:{line:1,column:149027}},"3919":{start:{line:1,column:149033},end:{line:1,column:149037}},"3920":{start:{line:1,column:149040},end:{line:1,column:149044}},"3921":{start:{line:1,column:149045},end:{line:1,column:149147}},"3922":{start:{line:1,column:149171},end:{line:1,column:149230}},"3923":{start:{line:1,column:149191},end:{line:1,column:149195}},"3924":{start:{line:1,column:149196},end:{line:1,column:149229}},"3925":{start:{line:1,column:149224},end:{line:1,column:149229}},"3926":{start:{line:1,column:149230},end:{line:1,column:149238}},"3927":{start:{line:1,column:149260},end:{line:1,column:149300}},"3928":{start:{line:1,column:149324},end:{line:1,column:149326}},"3929":{start:{line:1,column:149329},end:{line:1,column:149331}},"3930":{start:{line:1,column:149332},end:{line:1,column:149437}},"3931":{start:{line:1,column:149453},end:{line:1,column:149474}},"3932":{start:{line:1,column:149500},end:{line:1,column:149509}},"3933":{start:{line:1,column:149512},end:{line:1,column:149515}},"3934":{start:{line:1,column:149518},end:{line:1,column:149533}},"3935":{start:{line:1,column:149524},end:{line:1,column:149533}},"3936":{start:{line:1,column:149533},end:{line:1,column:149647}},"3937":{start:{line:1,column:149566},end:{line:1,column:149584}},"3938":{start:{line:1,column:149575},end:{line:1,column:149584}},"3939":{start:{line:1,column:149584},end:{line:1,column:149606}},"3940":{start:{line:1,column:149597},end:{line:1,column:149606}},"3941":{start:{line:1,column:149606},end:{line:1,column:149628}},"3942":{start:{line:1,column:149619},end:{line:1,column:149628}},"3943":{start:{line:1,column:149628},end:{line:1,column:149646}},"3944":{start:{line:1,column:149647},end:{line:1,column:149655}},"3945":{start:{line:1,column:149681},end:{line:1,column:149686}},"3946":{start:{line:1,column:149687},end:{line:1,column:149722}},"3947":{start:{line:1,column:149695},end:{line:1,column:149722}},"3948":{start:{line:1,column:149728},end:{line:1,column:149741}},"3949":{start:{line:1,column:149742},end:{line:1,column:149845}},"3950":{start:{line:1,column:149867},end:{line:1,column:149922}},"3951":{start:{line:1,column:149946},end:{line:1,column:149950}},"3952":{start:{line:1,column:149951},end:{line:1,column:150072}},"3953":{start:{line:1,column:150098},end:{line:1,column:150198}},"3954":{start:{line:1,column:150220},end:{line:1,column:150229}},"3955":{start:{line:1,column:150232},end:{line:1,column:150238}},"3956":{start:{line:1,column:150241},end:{line:1,column:150257}},"3957":{start:{line:1,column:150258},end:{line:1,column:150338}},"3958":{start:{line:1,column:150382},end:{line:1,column:150383}},"3959":{start:{line:1,column:150386},end:{line:1,column:150388}},"3960":{start:{line:1,column:150391},end:{line:1,column:150401}},"3961":{start:{line:1,column:150404},end:{line:1,column:150412}},"3962":{start:{line:1,column:150415},end:{line:1,column:150422}},"3963":{start:{line:1,column:150423},end:{line:1,column:150457}},"3964":{start:{line:1,column:150457},end:{line:1,column:150540}},"3965":{start:{line:1,column:150467},end:{line:1,column:150468}},"3966":{start:{line:1,column:150491},end:{line:1,column:150495}},"3967":{start:{line:1,column:150496},end:{line:1,column:150539}},"3968":{start:{line:1,column:150506},end:{line:1,column:150513}},"3969":{start:{line:1,column:150527},end:{line:1,column:150539}},"3970":{start:{line:1,column:150540},end:{line:1,column:150576}},"3971":{start:{line:1,column:150600},end:{line:1,column:150602}},"3972":{start:{line:1,column:150605},end:{line:1,column:150638}},"3973":{start:{line:1,column:150639},end:{line:1,column:150730}},"3974":{start:{line:1,column:150649},end:{line:1,column:150650}},"3975":{start:{line:1,column:150673},end:{line:1,column:150677}},"3976":{start:{line:1,column:150678},end:{line:1,column:150699}},"3977":{start:{line:1,column:150693},end:{line:1,column:150699}},"3978":{start:{line:1,column:150699},end:{line:1,column:150729}},"3979":{start:{line:1,column:150730},end:{line:1,column:150738}},"3980":{start:{line:1,column:150764},end:{line:1,column:150766}},"3981":{start:{line:1,column:150767},end:{line:1,column:150905}},"3982":{start:{line:1,column:150777},end:{line:1,column:150778}},"3983":{start:{line:1,column:150801},end:{line:1,column:150805}},"3984":{start:{line:1,column:150831},end:{line:1,column:150842}},"3985":{start:{line:1,column:150843},end:{line:1,column:150904}},"3986":{start:{line:1,column:150859},end:{line:1,column:150903}},"3987":{start:{line:1,column:150864},end:{line:1,column:150877}},"3988":{start:{line:1,column:150882},end:{line:1,column:150903}},"3989":{start:{line:1,column:150898},end:{line:1,column:150903}},"3990":{start:{line:1,column:150905},end:{line:1,column:150917}},"3991":{start:{line:1,column:150943},end:{line:1,column:150961}},"3992":{start:{line:1,column:150962},end:{line:1,column:150977}},"3993":{start:{line:1,column:150968},end:{line:1,column:150977}},"3994":{start:{line:1,column:150983},end:{line:1,column:150987}},"3995":{start:{line:1,column:150990},end:{line:1,column:151000}},"3996":{start:{line:1,column:151003},end:{line:1,column:151011}},"3997":{start:{line:1,column:151014},end:{line:1,column:151016}},"3998":{start:{line:1,column:151019},end:{line:1,column:151021}},"3999":{start:{line:1,column:151022},end:{line:1,column:151128}},"4000":{start:{line:1,column:151032},end:{line:1,column:151033}},"4001":{start:{line:1,column:151056},end:{line:1,column:151060}},"4002":{start:{line:1,column:151063},end:{line:1,column:151076}},"4003":{start:{line:1,column:151079},end:{line:1,column:151090}},"4004":{start:{line:1,column:151091},end:{line:1,column:151127}},"4005":{start:{line:1,column:151105},end:{line:1,column:151121}},"4006":{start:{line:1,column:151121},end:{line:1,column:151126}},"4007":{start:{line:1,column:151128},end:{line:1,column:151158}},"4008":{start:{line:1,column:151166},end:{line:1,column:151449}},"4009":{start:{line:1,column:151187},end:{line:1,column:151229}},"4010":{start:{line:1,column:151271},end:{line:1,column:151275}},"4011":{start:{line:1,column:151276},end:{line:1,column:151343}},"4012":{start:{line:1,column:151381},end:{line:1,column:151385}},"4013":{start:{line:1,column:151388},end:{line:1,column:151395}},"4014":{start:{line:1,column:151396},end:{line:1,column:151447}},"4015":{start:{line:1,column:151492},end:{line:1,column:151493}},"4016":{start:{line:1,column:151494},end:{line:1,column:151517}},"4017":{start:{line:1,column:151502},end:{line:1,column:151517}},"4018":{start:{line:1,column:151517},end:{line:1,column:151545}},"4019":{start:{line:1,column:151532},end:{line:1,column:151545}},"4020":{start:{line:1,column:151545},end:{line:1,column:151569}},"4021":{start:{line:1,column:151560},end:{line:1,column:151569}},"4022":{start:{line:1,column:151575},end:{line:1,column:151580}},"4023":{start:{line:1,column:151581},end:{line:1,column:151613}},"4024":{start:{line:1,column:151637},end:{line:1,column:151656}},"4025":{start:{line:1,column:151657},end:{line:1,column:151703}},"4026":{start:{line:1,column:151719},end:{line:1,column:151775}},"4027":{start:{line:1,column:151814},end:{line:1,column:151815}},"4028":{start:{line:1,column:151818},end:{line:1,column:151825}},"4029":{start:{line:1,column:151826},end:{line:1,column:151888}},"4030":{start:{line:1,column:151841},end:{line:1,column:151857}},"4031":{start:{line:1,column:151858},end:{line:1,column:151887}},"4032":{start:{line:1,column:151888},end:{line:1,column:151899}},"4033":{start:{line:1,column:151935},end:{line:1,column:151936}},"4034":{start:{line:1,column:151939},end:{line:1,column:151948}},"4035":{start:{line:1,column:151951},end:{line:1,column:151971}},"4036":{start:{line:1,column:151974},end:{line:1,column:151995}},"4037":{start:{line:1,column:151998},end:{line:1,column:152007}},"4038":{start:{line:1,column:152010},end:{line:1,column:152012}},"4039":{start:{line:1,column:152013},end:{line:1,column:152142}},"4040":{start:{line:1,column:152039},end:{line:1,column:152070}},"4041":{start:{line:1,column:152071},end:{line:1,column:152141}},"4042":{start:{line:1,column:152142},end:{line:1,column:152202}},"4043":{start:{line:1,column:152152},end:{line:1,column:152153}},"4044":{start:{line:1,column:152162},end:{line:1,column:152202}},"4045":{start:{line:1,column:152202},end:{line:1,column:152210}},"4046":{start:{line:1,column:152236},end:{line:1,column:152241}},"4047":{start:{line:1,column:152282},end:{line:1,column:152283}},"4048":{start:{line:1,column:152286},end:{line:1,column:152295}},"4049":{start:{line:1,column:152298},end:{line:1,column:152304}},"4050":{start:{line:1,column:152307},end:{line:1,column:152324}},"4051":{start:{line:1,column:152347},end:{line:1,column:152352}},"4052":{start:{line:1,column:152355},end:{line:1,column:152374}},"4053":{start:{line:1,column:152377},end:{line:1,column:152384}},"4054":{start:{line:1,column:152385},end:{line:1,column:152489}},"4055":{start:{line:1,column:152566},end:{line:1,column:152567}},"4056":{start:{line:1,column:152570},end:{line:1,column:152592}},"4057":{start:{line:1,column:152593},end:{line:1,column:152602}},"4058":{start:{line:1,column:152608},end:{line:1,column:152609}},"4059":{start:{line:1,column:152610},end:{line:1,column:152933}},"4060":{start:{line:1,column:152978},end:{line:1,column:152979}},"4061":{start:{line:1,column:152982},end:{line:1,column:152984}},"4062":{start:{line:1,column:152987},end:{line:1,column:152989}},"4063":{start:{line:1,column:152990},end:{line:1,column:153004}},"4064":{start:{line:1,column:153004},end:{line:1,column:153190}},"4065":{start:{line:1,column:153039},end:{line:1,column:153040}},"4066":{start:{line:1,column:153043},end:{line:1,column:153047}},"4067":{start:{line:1,column:153050},end:{line:1,column:153062}},"4068":{start:{line:1,column:153063},end:{line:1,column:153189}},"4069":{start:{line:1,column:153190},end:{line:1,column:153236}},"4070":{start:{line:1,column:153281},end:{line:1,column:153282}},"4071":{start:{line:1,column:153285},end:{line:1,column:153287}},"4072":{start:{line:1,column:153290},end:{line:1,column:153292}},"4073":{start:{line:1,column:153293},end:{line:1,column:153307}},"4074":{start:{line:1,column:153307},end:{line:1,column:153493}},"4075":{start:{line:1,column:153342},end:{line:1,column:153343}},"4076":{start:{line:1,column:153346},end:{line:1,column:153350}},"4077":{start:{line:1,column:153353},end:{line:1,column:153365}},"4078":{start:{line:1,column:153366},end:{line:1,column:153492}},"4079":{start:{line:1,column:153493},end:{line:1,column:153539}},"4080":{start:{line:1,column:153612},end:{line:1,column:153613}},"4081":{start:{line:1,column:153616},end:{line:1,column:153625}},"4082":{start:{line:1,column:153626},end:{line:1,column:153967}},"4083":{start:{line:1,column:153708},end:{line:1,column:153709}},"4084":{start:{line:1,column:153712},end:{line:1,column:153718}},"4085":{start:{line:1,column:153719},end:{line:1,column:153779}},"4086":{start:{line:1,column:153785},end:{line:1,column:153805}},"4087":{start:{line:1,column:153808},end:{line:1,column:153911}},"4088":{start:{line:1,column:153814},end:{line:1,column:153842}},"4089":{start:{line:1,column:153848},end:{line:1,column:153888}},"4090":{start:{line:1,column:153889},end:{line:1,column:153910}},"4091":{start:{line:1,column:153911},end:{line:1,column:153966}},"4092":{start:{line:1,column:153995},end:{line:1,column:154012}},"4093":{start:{line:1,column:154040},end:{line:1,column:154045}},"4094":{start:{line:1,column:154046},end:{line:1,column:154279}},"4095":{start:{line:1,column:154079},end:{line:1,column:154278}},"4096":{start:{line:1,column:154307},end:{line:1,column:154325}},"4097":{start:{line:1,column:154326},end:{line:1,column:154346}},"4098":{start:{line:1,column:154354},end:{line:1,column:155326}},"4099":{start:{line:1,column:154400},end:{line:1,column:154428}},"4100":{start:{line:1,column:154431},end:{line:1,column:154433}},"4101":{start:{line:1,column:154442},end:{line:1,column:154677}},"4102":{start:{line:1,column:154458},end:{line:1,column:154677}},"4103":{start:{line:1,column:154677},end:{line:1,column:154748}},"4104":{start:{line:1,column:154693},end:{line:1,column:154748}},"4105":{start:{line:1,column:154774},end:{line:1,column:154799}},"4106":{start:{line:1,column:154802},end:{line:1,column:154834}},"4107":{start:{line:1,column:154837},end:{line:1,column:154848}},"4108":{start:{line:1,column:154849},end:{line:1,column:154966}},"4109":{start:{line:1,column:154859},end:{line:1,column:154869}},"4110":{start:{line:1,column:154886},end:{line:1,column:154898}},"4111":{start:{line:1,column:154899},end:{line:1,column:154965}},"4112":{start:{line:1,column:154994},end:{line:1,column:155038}},"4113":{start:{line:1,column:155031},end:{line:1,column:155038}},"4114":{start:{line:1,column:155044},end:{line:1,column:155076}},"4115":{start:{line:1,column:155077},end:{line:1,column:155158}},"4116":{start:{line:1,column:155087},end:{line:1,column:155097}},"4117":{start:{line:1,column:155114},end:{line:1,column:155126}},"4118":{start:{line:1,column:155127},end:{line:1,column:155157}},"4119":{start:{line:1,column:155191},end:{line:1,column:155205}},"4120":{start:{line:1,column:155206},end:{line:1,column:155271}},"4121":{start:{line:1,column:155330},end:{line:1,column:155499}},"4122":{start:{line:1,column:155370},end:{line:1,column:155371}},"4123":{start:{line:1,column:155372},end:{line:1,column:155498}},"4124":{start:{line:1,column:155503},end:{line:1,column:155580}},"4125":{start:{line:1,column:155510},end:{line:1,column:155580}},"4126":{start:{line:1,column:155584},end:{line:1,column:161857}},"4127":{start:{line:1,column:155616},end:{line:1,column:156065}},"4128":{start:{line:1,column:156080},end:{line:1,column:156179}},"4129":{start:{line:1,column:156196},end:{line:1,column:156373}},"4130":{start:{line:1,column:156394},end:{line:1,column:156417}},"4131":{start:{line:1,column:156420},end:{line:1,column:156461}},"4132":{start:{line:1,column:156462},end:{line:1,column:156624}},"4133":{start:{line:1,column:156487},end:{line:1,column:156514}},"4134":{start:{line:1,column:156542},end:{line:1,column:156569}},"4135":{start:{line:1,column:156652},end:{line:1,column:156656}},"4136":{start:{line:1,column:156657},end:{line:1,column:156704}},"4137":{start:{line:1,column:156672},end:{line:1,column:156697}},"4138":{start:{line:1,column:156697},end:{line:1,column:156703}},"4139":{start:{line:1,column:156710},end:{line:1,column:156718}},"4140":{start:{line:1,column:156721},end:{line:1,column:156730}},"4141":{start:{line:1,column:156733},end:{line:1,column:156739}},"4142":{start:{line:1,column:156742},end:{line:1,column:156768}},"4143":{start:{line:1,column:156795},end:{line:1,column:156802}},"4144":{start:{line:1,column:156807},end:{line:1,column:157036}},"4145":{start:{line:1,column:157106},end:{line:1,column:157110}},"4146":{start:{line:1,column:157113},end:{line:1,column:157135}},"4147":{start:{line:1,column:157138},end:{line:1,column:157157}},"4148":{start:{line:1,column:157160},end:{line:1,column:157163}},"4149":{start:{line:1,column:157166},end:{line:1,column:157167}},"4150":{start:{line:1,column:157168},end:{line:1,column:157211}},"4151":{start:{line:1,column:157217},end:{line:1,column:157219}},"4152":{start:{line:1,column:157222},end:{line:1,column:157224}},"4153":{start:{line:1,column:157225},end:{line:1,column:157442}},"4154":{start:{line:1,column:157271},end:{line:1,column:157304}},"4155":{start:{line:1,column:157305},end:{line:1,column:157438}},"4156":{start:{line:1,column:157513},end:{line:1,column:157517}},"4157":{start:{line:1,column:157520},end:{line:1,column:157542}},"4158":{start:{line:1,column:157545},end:{line:1,column:157564}},"4159":{start:{line:1,column:157567},end:{line:1,column:157570}},"4160":{start:{line:1,column:157573},end:{line:1,column:157574}},"4161":{start:{line:1,column:157577},end:{line:1,column:157578}},"4162":{start:{line:1,column:157581},end:{line:1,column:157582}},"4163":{start:{line:1,column:157585},end:{line:1,column:157586}},"4164":{start:{line:1,column:157589},end:{line:1,column:157590}},"4165":{start:{line:1,column:157591},end:{line:1,column:157845}},"4166":{start:{line:1,column:157661},end:{line:1,column:157674}},"4167":{start:{line:1,column:157675},end:{line:1,column:157809}},"4168":{start:{line:1,column:157863},end:{line:1,column:157895}},"4169":{start:{line:1,column:157888},end:{line:1,column:157895}},"4170":{start:{line:1,column:157901},end:{line:1,column:157927}},"4171":{start:{line:1,column:157990},end:{line:1,column:157994}},"4172":{start:{line:1,column:157997},end:{line:1,column:158023}},"4173":{start:{line:1,column:158024},end:{line:1,column:158509}},"4174":{start:{line:1,column:158054},end:{line:1,column:158055}},"4175":{start:{line:1,column:158058},end:{line:1,column:158104}},"4176":{start:{line:1,column:158105},end:{line:1,column:158258}},"4177":{start:{line:1,column:158120},end:{line:1,column:158258}},"4178":{start:{line:1,column:158270},end:{line:1,column:158271}},"4179":{start:{line:1,column:158274},end:{line:1,column:158330}},"4180":{start:{line:1,column:158331},end:{line:1,column:158508}},"4181":{start:{line:1,column:158346},end:{line:1,column:158508}},"4182":{start:{line:1,column:158525},end:{line:1,column:158595}},"4183":{start:{line:1,column:158603},end:{line:1,column:158673}},"4184":{start:{line:1,column:158634},end:{line:1,column:158642}},"4185":{start:{line:1,column:158643},end:{line:1,column:158672}},"4186":{start:{line:1,column:158730},end:{line:1,column:158734}},"4187":{start:{line:1,column:158754},end:{line:1,column:158755}},"4188":{start:{line:1,column:158758},end:{line:1,column:158765}},"4189":{start:{line:1,column:158768},end:{line:1,column:158798}},"4190":{start:{line:1,column:158801},end:{line:1,column:158810}},"4191":{start:{line:1,column:158823},end:{line:1,column:158824}},"4192":{start:{line:1,column:158827},end:{line:1,column:158833}},"4193":{start:{line:1,column:158836},end:{line:1,column:158839}},"4194":{start:{line:1,column:158842},end:{line:1,column:158946}},"4195":{start:{line:1,column:158987},end:{line:1,column:158994}},"4196":{start:{line:1,column:158997},end:{line:1,column:159667}},"4197":{start:{line:1,column:159013},end:{line:1,column:159053}},"4198":{start:{line:1,column:159046},end:{line:1,column:159053}},"4199":{start:{line:1,column:159053},end:{line:1,column:159062}},"4200":{start:{line:1,column:159068},end:{line:1,column:159084}},"4201":{start:{line:1,column:159085},end:{line:1,column:159655}},"4202":{start:{line:1,column:159321},end:{line:1,column:159402}},"4203":{start:{line:1,column:159405},end:{line:1,column:159419}},"4204":{start:{line:1,column:159422},end:{line:1,column:159425}},"4205":{start:{line:1,column:159426},end:{line:1,column:159458}},"4206":{start:{line:1,column:159470},end:{line:1,column:159491}},"4207":{start:{line:1,column:159494},end:{line:1,column:159511}},"4208":{start:{line:1,column:159514},end:{line:1,column:159532}},"4209":{start:{line:1,column:159533},end:{line:1,column:159654}},"4210":{start:{line:1,column:159572},end:{line:1,column:159577}},"4211":{start:{line:1,column:159655},end:{line:1,column:159666}},"4212":{start:{line:1,column:159670},end:{line:1,column:159769}},"4213":{start:{line:1,column:159686},end:{line:1,column:159768}},"4214":{start:{line:1,column:159772},end:{line:1,column:159791}},"4215":{start:{line:1,column:159794},end:{line:1,column:159820}},"4216":{start:{line:1,column:159821},end:{line:1,column:159982}},"4217":{start:{line:1,column:159988},end:{line:1,column:159991}},"4218":{start:{line:1,column:159992},end:{line:1,column:160605}},"4219":{start:{line:1,column:160025},end:{line:1,column:160075}},"4220":{start:{line:1,column:160081},end:{line:1,column:160108}},"4221":{start:{line:1,column:160111},end:{line:1,column:160162}},"4222":{start:{line:1,column:160165},end:{line:1,column:160170}},"4223":{start:{line:1,column:160173},end:{line:1,column:160176}},"4224":{start:{line:1,column:160179},end:{line:1,column:160182}},"4225":{start:{line:1,column:160183},end:{line:1,column:160407}},"4226":{start:{line:1,column:160413},end:{line:1,column:160419}},"4227":{start:{line:1,column:160420},end:{line:1,column:160574}},"4228":{start:{line:1,column:160485},end:{line:1,column:160494}},"4229":{start:{line:1,column:160499},end:{line:1,column:160574}},"4230":{start:{line:1,column:160534},end:{line:1,column:160546}},"4231":{start:{line:1,column:160547},end:{line:1,column:160562}},"4232":{start:{line:1,column:160568},end:{line:1,column:160574}},"4233":{start:{line:1,column:160624},end:{line:1,column:160636}},"4234":{start:{line:1,column:160639},end:{line:1,column:160646}},"4235":{start:{line:1,column:160649},end:{line:1,column:160658}},"4236":{start:{line:1,column:160661},end:{line:1,column:160673}},"4237":{start:{line:1,column:160674},end:{line:1,column:160695}},"4238":{start:{line:1,column:160688},end:{line:1,column:160695}},"4239":{start:{line:1,column:160701},end:{line:1,column:160731}},"4240":{start:{line:1,column:160734},end:{line:1,column:160742}},"4241":{start:{line:1,column:160745},end:{line:1,column:160755}},"4242":{start:{line:1,column:160758},end:{line:1,column:160766}},"4243":{start:{line:1,column:160769},end:{line:1,column:160776}},"4244":{start:{line:1,column:160781},end:{line:1,column:160790}},"4245":{start:{line:1,column:160793},end:{line:1,column:160803}},"4246":{start:{line:1,column:160804},end:{line:1,column:161047}},"4247":{start:{line:1,column:160827},end:{line:1,column:160899}},"4248":{start:{line:1,column:160910},end:{line:1,column:160964}},"4249":{start:{line:1,column:160941},end:{line:1,column:160961}},"4250":{start:{line:1,column:160965},end:{line:1,column:161046}},"4251":{start:{line:1,column:161053},end:{line:1,column:161063}},"4252":{start:{line:1,column:161064},end:{line:1,column:161195}},"4253":{start:{line:1,column:161224},end:{line:1,column:161242}},"4254":{start:{line:1,column:161245},end:{line:1,column:161254}},"4255":{start:{line:1,column:161257},end:{line:1,column:161269}},"4256":{start:{line:1,column:161270},end:{line:1,column:161310}},"4257":{start:{line:1,column:161343},end:{line:1,column:161540}},"4258":{start:{line:1,column:161402},end:{line:1,column:161539}},"4259":{start:{line:1,column:161447},end:{line:1,column:161539}},"4260":{start:{line:1,column:161513},end:{line:1,column:161539}},"4261":{start:{line:1,column:161540},end:{line:1,column:161551}},"4262":{start:{line:1,column:161573},end:{line:1,column:161585}},"4263":{start:{line:1,column:161586},end:{line:1,column:161610}},"4264":{start:{line:1,column:161603},end:{line:1,column:161610}},"4265":{start:{line:1,column:161616},end:{line:1,column:161646}},"4266":{start:{line:1,column:161647},end:{line:1,column:161855}},"4267":{start:{line:1,column:161699},end:{line:1,column:161716}},"4268":{start:{line:1,column:161719},end:{line:1,column:161726}},"4269":{start:{line:1,column:161727},end:{line:1,column:161818}},"4270":{start:{line:1,column:161824},end:{line:1,column:161855}},"4271":{start:{line:1,column:161887},end:{line:1,column:161898}},"4272":{start:{line:1,column:161901},end:{line:1,column:161921}},"4273":{start:{line:1,column:161922},end:{line:1,column:161954}},"4274":{start:{line:1,column:161982},end:{line:1,column:161988}},"4275":{start:{line:1,column:161989},end:{line:1,column:162095}},"4276":{start:{line:1,column:162038},end:{line:1,column:162059}},"4277":{start:{line:1,column:162121},end:{line:1,column:162122}},"4278":{start:{line:1,column:162123},end:{line:1,column:162168}},"4279":{start:{line:1,column:162192},end:{line:1,column:162214}},"4280":{start:{line:1,column:162215},end:{line:1,column:162225}},"4281":{start:{line:1,column:162243},end:{line:1,column:162351}},"4282":{start:{line:1,column:162359},end:{line:1,column:163853}},"4283":{start:{line:1,column:162403},end:{line:1,column:162449}},"4284":{start:{line:1,column:162450},end:{line:1,column:162482}},"4285":{start:{line:1,column:162492},end:{line:1,column:162531}},"4286":{start:{line:1,column:162559},end:{line:1,column:162567}},"4287":{start:{line:1,column:162568},end:{line:1,column:162598}},"4288":{start:{line:1,column:162621},end:{line:1,column:162629}},"4289":{start:{line:1,column:162630},end:{line:1,column:162664}},"4290":{start:{line:1,column:162682},end:{line:1,column:162721}},"4291":{start:{line:1,column:162829},end:{line:1,column:162843}},"4292":{start:{line:1,column:162846},end:{line:1,column:162853}},"4293":{start:{line:1,column:162854},end:{line:1,column:162923}},"4294":{start:{line:1,column:162968},end:{line:1,column:162989}},"4295":{start:{line:1,column:163037},end:{line:1,column:163052}},"4296":{start:{line:1,column:163146},end:{line:1,column:163162}},"4297":{start:{line:1,column:163163},end:{line:1,column:163652}},"4298":{start:{line:1,column:163211},end:{line:1,column:163244}},"4299":{start:{line:1,column:163247},end:{line:1,column:163263}},"4300":{start:{line:1,column:163264},end:{line:1,column:163645}},"4301":{start:{line:1,column:163671},end:{line:1,column:163692}},"4302":{start:{line:1,column:163760},end:{line:1,column:163779}},"4303":{start:{line:1,column:163803},end:{line:1,column:163850}},"4304":{start:{line:1,column:163857},end:{line:1,column:165094}},"4305":{start:{line:1,column:163889},end:{line:1,column:164142}},"4306":{start:{line:1,column:164161},end:{line:1,column:164173}},"4307":{start:{line:1,column:164174},end:{line:1,column:164267}},"4308":{start:{line:1,column:164212},end:{line:1,column:164260}},"4309":{start:{line:1,column:164260},end:{line:1,column:164266}},"4310":{start:{line:1,column:164267},end:{line:1,column:164317}},"4311":{start:{line:1,column:164323},end:{line:1,column:164348}},"4312":{start:{line:1,column:164349},end:{line:1,column:164376}},"4313":{start:{line:1,column:164382},end:{line:1,column:164425}},"4314":{start:{line:1,column:164426},end:{line:1,column:164472}},"4315":{start:{line:1,column:164494},end:{line:1,column:164515}},"4316":{start:{line:1,column:164516},end:{line:1,column:164546}},"4317":{start:{line:1,column:164605},end:{line:1,column:164609}},"4318":{start:{line:1,column:164612},end:{line:1,column:164619}},"4319":{start:{line:1,column:164622},end:{line:1,column:164623}},"4320":{start:{line:1,column:164630},end:{line:1,column:164804}},"4321":{start:{line:1,column:164818},end:{line:1,column:164826}},"4322":{start:{line:1,column:164829},end:{line:1,column:164841}},"4323":{start:{line:1,column:164842},end:{line:1,column:164863}},"4324":{start:{line:1,column:164856},end:{line:1,column:164863}},"4325":{start:{line:1,column:164869},end:{line:1,column:164878}},"4326":{start:{line:1,column:164881},end:{line:1,column:164913}},"4327":{start:{line:1,column:164956},end:{line:1,column:164973}},"4328":{start:{line:1,column:164974},end:{line:1,column:165092}},"4329":{start:{line:1,column:165118},end:{line:1,column:165155}},"4330":{start:{line:1,column:165156},end:{line:1,column:165203}},"4331":{start:{line:1,column:165211},end:{line:1,column:165581}},"4332":{start:{line:1,column:165248},end:{line:1,column:165255}},"4333":{start:{line:1,column:165271},end:{line:1,column:165283}},"4334":{start:{line:1,column:165284},end:{line:1,column:165320}},"4335":{start:{line:1,column:165348},end:{line:1,column:165360}},"4336":{start:{line:1,column:165361},end:{line:1,column:165391}},"4337":{start:{line:1,column:165585},end:{line:1,column:165596}},"4338":{start:{line:1,column:165600},end:{line:1,column:166023}},"4339":{start:{line:1,column:165634},end:{line:1,column:165671}},"4340":{start:{line:1,column:165672},end:{line:1,column:165716}},"4341":{start:{line:1,column:165726},end:{line:1,column:165763}},"4342":{start:{line:1,column:165791},end:{line:1,column:165800}},"4343":{start:{line:1,column:165801},end:{line:1,column:165831}},"4344":{start:{line:1,column:166027},end:{line:1,column:166538}},"4345":{start:{line:1,column:166039},end:{line:1,column:166061}},"4346":{start:{line:1,column:166052},end:{line:1,column:166061}},"4347":{start:{line:1,column:166071},end:{line:1,column:166078}},"4348":{start:{line:1,column:166081},end:{line:1,column:166082}},"4349":{start:{line:1,column:166085},end:{line:1,column:166086}},"4350":{start:{line:1,column:166087},end:{line:1,column:166203}},"4351":{start:{line:1,column:166121},end:{line:1,column:166133}},"4352":{start:{line:1,column:166134},end:{line:1,column:166202}},"4353":{start:{line:1,column:166160},end:{line:1,column:166179}},"4354":{start:{line:1,column:166180},end:{line:1,column:166201}},"4355":{start:{line:1,column:166203},end:{line:1,column:166273}},"4356":{start:{line:1,column:166255},end:{line:1,column:166258}},"4357":{start:{line:1,column:166288},end:{line:1,column:166310}},"4358":{start:{line:1,column:166301},end:{line:1,column:166310}},"4359":{start:{line:1,column:166316},end:{line:1,column:166319}},"4360":{start:{line:1,column:166322},end:{line:1,column:166325}},"4361":{start:{line:1,column:166328},end:{line:1,column:166352}},"4362":{start:{line:1,column:166359},end:{line:1,column:166477}},"4363":{start:{line:1,column:166393},end:{line:1,column:166405}},"4364":{start:{line:1,column:166406},end:{line:1,column:166476}},"4365":{start:{line:1,column:166432},end:{line:1,column:166450}},"4366":{start:{line:1,column:166453},end:{line:1,column:166460}},"4367":{start:{line:1,column:166461},end:{line:1,column:166475}},"4368":{start:{line:1,column:166477},end:{line:1,column:166521}},"4369":{start:{line:1,column:166489},end:{line:1,column:166508}},"4370":{start:{line:1,column:166509},end:{line:1,column:166520}},"4371":{start:{line:1,column:166521},end:{line:1,column:166536}},"4372":{start:{line:1,column:166556},end:{line:1,column:166616}},"4373":{start:{line:1,column:166632},end:{line:3,column:4}},"4374":{start:{line:3,column:60},end:{line:3,column:61}},"4375":{start:{line:3,column:64},end:{line:3,column:94}},"4376":{start:{line:3,column:113},end:{line:3,column:134}},"4377":{start:{line:3,column:135},end:{line:3,column:288}},"4378":{start:{line:3,column:312},end:{line:3,column:323}},"4379":{start:{line:3,column:350},end:{line:3,column:351}},"4380":{start:{line:3,column:377},end:{line:3,column:378}},"4381":{start:{line:3,column:381},end:{line:3,column:394}},"4382":{start:{line:3,column:397},end:{line:3,column:411}},"4383":{start:{line:3,column:414},end:{line:3,column:429}},"4384":{start:{line:3,column:432},end:{line:3,column:440}},"4385":{start:{line:3,column:443},end:{line:3,column:451}},"4386":{start:{line:3,column:454},end:{line:3,column:462}},"4387":{start:{line:3,column:465},end:{line:3,column:477}},"4388":{start:{line:3,column:480},end:{line:3,column:488}},"4389":{start:{line:3,column:491},end:{line:3,column:492}},"4390":{start:{line:3,column:495},end:{line:3,column:561}},"4391":{start:{line:3,column:511},end:{line:3,column:558}},"4392":{start:{line:3,column:562},end:{line:3,column:780}},"4393":{start:{line:3,column:680},end:{line:3,column:733}},"4394":{start:{line:3,column:734},end:{line:3,column:779}},"4395":{start:{line:3,column:780},end:{line:3,column:843}},"4396":{start:{line:3,column:849},end:{line:3,column:850}},"4397":{start:{line:3,column:853},end:{line:3,column:904}},"4398":{start:{line:3,column:865},end:{line:3,column:903}},"4399":{start:{line:3,column:905},end:{line:3,column:1166}},"4400":{start:{line:3,column:1049},end:{line:3,column:1088}},"4401":{start:{line:3,column:1202},end:{line:3,column:1203}},"4402":{start:{line:3,column:1204},end:{line:3,column:1255}},"4403":{start:{line:3,column:1294},end:{line:3,column:1295}},"4404":{start:{line:3,column:1298},end:{line:3,column:1324}},"4405":{start:{line:3,column:1325},end:{line:3,column:1384}},"4406":{start:{line:3,column:1376},end:{line:3,column:1384}},"4407":{start:{line:3,column:1423},end:{line:3,column:1424}},"4408":{start:{line:3,column:1462},end:{line:3,column:1463}},"4409":{start:{line:3,column:1466},end:{line:3,column:1474}},"4410":{start:{line:3,column:1475},end:{line:3,column:1588}},"4411":{start:{line:3,column:1614},end:{line:3,column:1641}},"4412":{start:{line:3,column:1642},end:{line:3,column:1697}},"4413":{start:{line:3,column:1732},end:{line:3,column:1733}},"4414":{start:{line:3,column:1734},end:{line:3,column:1782}},"4415":{start:{line:3,column:1820},end:{line:3,column:1821}},"4416":{start:{line:3,column:1822},end:{line:3,column:1872}},"4417":{start:{line:3,column:1941},end:{line:3,column:1942}},"4418":{start:{line:3,column:1963},end:{line:3,column:1964}},"4419":{start:{line:3,column:1967},end:{line:3,column:1970}},"4420":{start:{line:3,column:2021},end:{line:3,column:2026}},"4421":{start:{line:3,column:2029},end:{line:3,column:2036}},"4422":{start:{line:3,column:2039},end:{line:3,column:2048}},"4423":{start:{line:3,column:2049},end:{line:3,column:2222}},"4424":{start:{line:3,column:2248},end:{line:3,column:2260}},"4425":{start:{line:3,column:2261},end:{line:3,column:2337}},"4426":{start:{line:3,column:2353},end:{line:3,column:2372}},"4427":{start:{line:3,column:2392},end:{line:3,column:2446}},"4428":{start:{line:3,column:2470},end:{line:3,column:2530}},"4429":{start:{line:3,column:2531},end:{line:3,column:2555}},"4430":{start:{line:3,column:2563},end:{line:3,column:3584}},"4431":{start:{line:3,column:2588},end:{line:3,column:2801}},"4432":{start:{line:3,column:2609},end:{line:3,column:2613}},"4433":{start:{line:3,column:2616},end:{line:3,column:2635}},"4434":{start:{line:3,column:2638},end:{line:3,column:2650}},"4435":{start:{line:3,column:2651},end:{line:3,column:2731}},"4436":{start:{line:3,column:2704},end:{line:3,column:2731}},"4437":{start:{line:3,column:2731},end:{line:3,column:2757}},"4438":{start:{line:3,column:2742},end:{line:3,column:2757}},"4439":{start:{line:3,column:2757},end:{line:3,column:2800}},"4440":{start:{line:3,column:2779},end:{line:3,column:2800}},"4441":{start:{line:3,column:2801},end:{line:3,column:2809}},"4442":{start:{line:3,column:2863},end:{line:3,column:2971}},"4443":{start:{line:3,column:2916},end:{line:3,column:2971}},"4444":{start:{line:3,column:2977},end:{line:3,column:2996}},"4445":{start:{line:3,column:2997},end:{line:3,column:3010}},"4446":{start:{line:3,column:3016},end:{line:3,column:3032}},"4447":{start:{line:3,column:3033},end:{line:3,column:3054}},"4448":{start:{line:3,column:3076},end:{line:3,column:3147}},"4449":{start:{line:3,column:3148},end:{line:3,column:3316}},"4450":{start:{line:3,column:3335},end:{line:3,column:3364}},"4451":{start:{line:3,column:3391},end:{line:3,column:3462}},"4452":{start:{line:3,column:3463},end:{line:3,column:3514}},"4453":{start:{line:3,column:3611},end:{line:3,column:3625}},"4454":{start:{line:3,column:3626},end:{line:3,column:3663}},"4455":{start:{line:3,column:3671},end:{line:3,column:12711}},"4456":{start:{line:3,column:3715},end:{line:3,column:3717}},"4457":{start:{line:3,column:3733},end:{line:3,column:4299}},"4458":{start:{line:3,column:4314},end:{line:3,column:4379}},"4459":{start:{line:3,column:4407},end:{line:3,column:4429}},"4460":{start:{line:3,column:4430},end:{line:3,column:4444}},"4461":{start:{line:3,column:4435},end:{line:3,column:4444}},"4462":{start:{line:3,column:4450},end:{line:3,column:4460}},"4463":{start:{line:3,column:4463},end:{line:3,column:4505}},"4464":{start:{line:3,column:4508},end:{line:3,column:4552}},"4465":{start:{line:3,column:4555},end:{line:3,column:4575}},"4466":{start:{line:3,column:4576},end:{line:3,column:4640}},"4467":{start:{line:3,column:4654},end:{line:3,column:4743}},"4468":{start:{line:3,column:4775},end:{line:3,column:4776}},"4469":{start:{line:3,column:4779},end:{line:3,column:4804}},"4470":{start:{line:3,column:4807},end:{line:3,column:4826}},"4471":{start:{line:3,column:4829},end:{line:3,column:4853}},"4472":{start:{line:3,column:4856},end:{line:3,column:4858}},"4473":{start:{line:3,column:4859},end:{line:3,column:4909}},"4474":{start:{line:3,column:4929},end:{line:3,column:4974}},"4475":{start:{line:3,column:5005},end:{line:3,column:5006}},"4476":{start:{line:3,column:5009},end:{line:3,column:5011}},"4477":{start:{line:3,column:5012},end:{line:3,column:5202}},"4478":{start:{line:3,column:5033},end:{line:3,column:5062}},"4479":{start:{line:3,column:5065},end:{line:3,column:5072}},"4480":{start:{line:3,column:5073},end:{line:3,column:5198}},"4481":{start:{line:3,column:5221},end:{line:3,column:5265}},"4482":{start:{line:3,column:5298},end:{line:3,column:5299}},"4483":{start:{line:3,column:5302},end:{line:3,column:5328}},"4484":{start:{line:3,column:5331},end:{line:3,column:5351}},"4485":{start:{line:3,column:5354},end:{line:3,column:5379}},"4486":{start:{line:3,column:5382},end:{line:3,column:5384}},"4487":{start:{line:3,column:5385},end:{line:3,column:5435}},"4488":{start:{line:3,column:5458},end:{line:3,column:5470}},"4489":{start:{line:3,column:5473},end:{line:3,column:5488}},"4490":{start:{line:3,column:5491},end:{line:3,column:5493}},"4491":{start:{line:3,column:5496},end:{line:3,column:5498}},"4492":{start:{line:3,column:5501},end:{line:3,column:5503}},"4493":{start:{line:3,column:5506},end:{line:3,column:5508}},"4494":{start:{line:3,column:5513},end:{line:3,column:5568}},"4495":{start:{line:3,column:5540},end:{line:3,column:5568}},"4496":{start:{line:3,column:5568},end:{line:3,column:5902}},"4497":{start:{line:3,column:5606},end:{line:3,column:5623}},"4498":{start:{line:3,column:5655},end:{line:3,column:5672}},"4499":{start:{line:3,column:5689},end:{line:3,column:5706}},"4500":{start:{line:3,column:5707},end:{line:3,column:5814}},"4501":{start:{line:3,column:5921},end:{line:3,column:5963}},"4502":{start:{line:3,column:5966},end:{line:3,column:5978}},"4503":{start:{line:3,column:5983},end:{line:3,column:5985}},"4504":{start:{line:3,column:5986},end:{line:3,column:6499}},"4505":{start:{line:3,column:5999},end:{line:3,column:6033}},"4506":{start:{line:3,column:6044},end:{line:3,column:6091}},"4507":{start:{line:3,column:6092},end:{line:3,column:6283}},"4508":{start:{line:3,column:6289},end:{line:3,column:6310}},"4509":{start:{line:3,column:6313},end:{line:3,column:6334}},"4510":{start:{line:3,column:6337},end:{line:3,column:6355}},"4511":{start:{line:3,column:6358},end:{line:3,column:6378}},"4512":{start:{line:3,column:6379},end:{line:3,column:6498}},"4513":{start:{line:3,column:6499},end:{line:3,column:6662}},"4514":{start:{line:3,column:6688},end:{line:3,column:6716}},"4515":{start:{line:3,column:6717},end:{line:3,column:6776}},"4516":{start:{line:3,column:6824},end:{line:3,column:6828}},"4517":{start:{line:3,column:6858},end:{line:3,column:6859}},"4518":{start:{line:3,column:6910},end:{line:3,column:6915}},"4519":{start:{line:3,column:6926},end:{line:3,column:6927}},"4520":{start:{line:3,column:6947},end:{line:3,column:6948}},"4521":{start:{line:3,column:6961},end:{line:3,column:7232}},"4522":{start:{line:3,column:7256},end:{line:3,column:7266}},"4523":{start:{line:3,column:7269},end:{line:3,column:7277}},"4524":{start:{line:3,column:7284},end:{line:3,column:7608}},"4525":{start:{line:3,column:7296},end:{line:3,column:7323}},"4526":{start:{line:3,column:7324},end:{line:3,column:7607}},"4527":{start:{line:3,column:7505},end:{line:3,column:7607}},"4528":{start:{line:3,column:7640},end:{line:3,column:7659}},"4529":{start:{line:3,column:7662},end:{line:3,column:7686}},"4530":{start:{line:3,column:7712},end:{line:3,column:7713}},"4531":{start:{line:3,column:7716},end:{line:3,column:7729}},"4532":{start:{line:3,column:7732},end:{line:3,column:7749}},"4533":{start:{line:3,column:7752},end:{line:3,column:7758}},"4534":{start:{line:3,column:7761},end:{line:3,column:7796}},"4535":{start:{line:3,column:7799},end:{line:3,column:7804}},"4536":{start:{line:3,column:7805},end:{line:3,column:8725}},"4537":{start:{line:3,column:7831},end:{line:3,column:7913}},"4538":{start:{line:3,column:7916},end:{line:3,column:7937}},"4539":{start:{line:3,column:7940},end:{line:3,column:7945}},"4540":{start:{line:3,column:7946},end:{line:3,column:8095}},"4541":{start:{line:3,column:8101},end:{line:3,column:8288}},"4542":{start:{line:3,column:8294},end:{line:3,column:8311}},"4543":{start:{line:3,column:8314},end:{line:3,column:8344}},"4544":{start:{line:3,column:8347},end:{line:3,column:8365}},"4545":{start:{line:3,column:8366},end:{line:3,column:8724}},"4546":{start:{line:3,column:8391},end:{line:3,column:8396}},"4547":{start:{line:3,column:8725},end:{line:3,column:8760}},"4548":{start:{line:3,column:8789},end:{line:3,column:8793}},"4549":{start:{line:3,column:8874},end:{line:3,column:8875}},"4550":{start:{line:3,column:8878},end:{line:3,column:8891}},"4551":{start:{line:3,column:8894},end:{line:3,column:8906}},"4552":{start:{line:3,column:8909},end:{line:3,column:8910}},"4553":{start:{line:3,column:8913},end:{line:3,column:8940}},"4554":{start:{line:3,column:8943},end:{line:3,column:8997}},"4555":{start:{line:3,column:8955},end:{line:3,column:8996}},"4556":{start:{line:3,column:9000},end:{line:3,column:9014}},"4557":{start:{line:3,column:9029},end:{line:3,column:9423}},"4558":{start:{line:3,column:9217},end:{line:3,column:9410}},"4559":{start:{line:3,column:9387},end:{line:3,column:9410}},"4560":{start:{line:3,column:9410},end:{line:3,column:9422}},"4561":{start:{line:3,column:9423},end:{line:3,column:9468}},"4562":{start:{line:3,column:9493},end:{line:3,column:9504}},"4563":{start:{line:3,column:9507},end:{line:3,column:9515}},"4564":{start:{line:3,column:9520},end:{line:3,column:9830}},"4565":{start:{line:3,column:9532},end:{line:3,column:9559}},"4566":{start:{line:3,column:9560},end:{line:3,column:9829}},"4567":{start:{line:3,column:9751},end:{line:3,column:9829}},"4568":{start:{line:3,column:9878},end:{line:3,column:9882}},"4569":{start:{line:3,column:9893},end:{line:3,column:9894}},"4570":{start:{line:3,column:9914},end:{line:3,column:9915}},"4571":{start:{line:3,column:9966},end:{line:3,column:9984}},"4572":{start:{line:3,column:9985},end:{line:3,column:10531}},"4573":{start:{line:3,column:10564},end:{line:3,column:10574}},"4574":{start:{line:3,column:10577},end:{line:3,column:10593}},"4575":{start:{line:3,column:10596},end:{line:3,column:10602}},"4576":{start:{line:3,column:10605},end:{line:3,column:10611}},"4577":{start:{line:3,column:10612},end:{line:3,column:10971}},"4578":{start:{line:3,column:10627},end:{line:3,column:10685}},"4579":{start:{line:3,column:10686},end:{line:3,column:10699}},"4580":{start:{line:3,column:10692},end:{line:3,column:10699}},"4581":{start:{line:3,column:10705},end:{line:3,column:10726}},"4582":{start:{line:3,column:10729},end:{line:3,column:10759}},"4583":{start:{line:3,column:10762},end:{line:3,column:10771}},"4584":{start:{line:3,column:10774},end:{line:3,column:10785}},"4585":{start:{line:3,column:10786},end:{line:3,column:10970}},"4586":{start:{line:3,column:10986},end:{line:3,column:11006}},"4587":{start:{line:3,column:11021},end:{line:3,column:11063}},"4588":{start:{line:3,column:11066},end:{line:3,column:11078}},"4589":{start:{line:3,column:11079},end:{line:3,column:11092}},"4590":{start:{line:3,column:11085},end:{line:3,column:11092}},"4591":{start:{line:3,column:11092},end:{line:3,column:11123}},"4592":{start:{line:3,column:11129},end:{line:3,column:11166}},"4593":{start:{line:3,column:11169},end:{line:3,column:11188}},"4594":{start:{line:3,column:11189},end:{line:3,column:11212}},"4595":{start:{line:3,column:11218},end:{line:3,column:11230}},"4596":{start:{line:3,column:11233},end:{line:3,column:11335}},"4597":{start:{line:3,column:11336},end:{line:3,column:11538}},"4598":{start:{line:3,column:11559},end:{line:3,column:11582}},"4599":{start:{line:3,column:11612},end:{line:3,column:11624}},"4600":{start:{line:3,column:11627},end:{line:3,column:11806}},"4601":{start:{line:3,column:11668},end:{line:3,column:11696}},"4602":{start:{line:3,column:11697},end:{line:3,column:11756}},"4603":{start:{line:3,column:11703},end:{line:3,column:11756}},"4604":{start:{line:3,column:11756},end:{line:3,column:11804}},"4605":{start:{line:3,column:11809},end:{line:3,column:11817}},"4606":{start:{line:3,column:11820},end:{line:3,column:11846}},"4607":{start:{line:3,column:11847},end:{line:3,column:11937}},"4608":{start:{line:3,column:11960},end:{line:3,column:12000}},"4609":{start:{line:3,column:11991},end:{line:3,column:12000}},"4610":{start:{line:3,column:12000},end:{line:3,column:12028}},"4611":{start:{line:3,column:12034},end:{line:3,column:12046}},"4612":{start:{line:3,column:12049},end:{line:3,column:12065}},"4613":{start:{line:3,column:12068},end:{line:3,column:12100}},"4614":{start:{line:3,column:12103},end:{line:3,column:12129}},"4615":{start:{line:3,column:12132},end:{line:3,column:12146}},"4616":{start:{line:3,column:12147},end:{line:3,column:12254}},"4617":{start:{line:3,column:12289},end:{line:3,column:12301}},"4618":{start:{line:3,column:12302},end:{line:3,column:12334}},"4619":{start:{line:3,column:12325},end:{line:3,column:12334}},"4620":{start:{line:3,column:12334},end:{line:3,column:12483}},"4621":{start:{line:3,column:12340},end:{line:3,column:12483}},"4622":{start:{line:3,column:12359},end:{line:3,column:12481}},"4623":{start:{line:3,column:12489},end:{line:3,column:12539}},"4624":{start:{line:3,column:12540},end:{line:3,column:12571}},"4625":{start:{line:3,column:12627},end:{line:3,column:12631}},"4626":{start:{line:3,column:12634},end:{line:3,column:12663}},"4627":{start:{line:3,column:12664},end:{line:3,column:12697}},"4628":{start:{line:3,column:12699},end:{line:3,column:12707}},"4629":{start:{line:3,column:12715},end:{line:3,column:14284}},"4630":{start:{line:3,column:12773},end:{line:3,column:12815}},"4631":{start:{line:3,column:12837},end:{line:3,column:12871}},"4632":{start:{line:3,column:12886},end:{line:3,column:12920}},"4633":{start:{line:3,column:12941},end:{line:3,column:12950}},"4634":{start:{line:3,column:12951},end:{line:3,column:13125}},"4635":{start:{line:3,column:12980},end:{line:3,column:12991}},"4636":{start:{line:3,column:12992},end:{line:3,column:13073}},"4637":{start:{line:3,column:13066},end:{line:3,column:13073}},"4638":{start:{line:3,column:13073},end:{line:3,column:13124}},"4639":{start:{line:3,column:13143},end:{line:3,column:13235}},"4640":{start:{line:3,column:13163},end:{line:3,column:13171}},"4641":{start:{line:3,column:13172},end:{line:3,column:13234}},"4642":{start:{line:3,column:13650},end:{line:3,column:13665}},"4643":{start:{line:3,column:13682},end:{line:3,column:13697}},"4644":{start:{line:3,column:14084},end:{line:3,column:14128}},"4645":{start:{line:3,column:14288},end:{line:3,column:14395}},"4646":{start:{line:3,column:14399},end:{line:3,column:14496}},"4647":{start:{line:3,column:14411},end:{line:3,column:14495}},"4648":{start:{line:3,column:14524},end:{line:3,column:14536}},"4649":{start:{line:3,column:14537},end:{line:3,column:14566}},"4650":{start:{line:3,column:14547},end:{line:3,column:14566}},"4651":{start:{line:3,column:14572},end:{line:3,column:14588}},"4652":{start:{line:3,column:14589},end:{line:3,column:14605}},"4653":{start:{line:3,column:14613},end:{line:3,column:14654}},"4654":{start:{line:3,column:14620},end:{line:3,column:14654}},"4655":{start:{line:3,column:14676},end:{line:3,column:14692}},"4656":{start:{line:3,column:14693},end:{line:3,column:14723}},"4657":{start:{line:3,column:14731},end:{line:3,column:16180}},"4658":{start:{line:3,column:14766},end:{line:3,column:14776}},"4659":{start:{line:3,column:14793},end:{line:3,column:14814}},"4660":{start:{line:3,column:14830},end:{line:3,column:14902}},"4661":{start:{line:3,column:14917},end:{line:3,column:14934}},"4662":{start:{line:3,column:14935},end:{line:3,column:15045}},"4663":{start:{line:3,column:14954},end:{line:3,column:14970}},"4664":{start:{line:3,column:14971},end:{line:3,column:15024}},"4665":{start:{line:3,column:15000},end:{line:3,column:15024}},"4666":{start:{line:3,column:15024},end:{line:3,column:15044}},"4667":{start:{line:3,column:15045},end:{line:3,column:15058}},"4668":{start:{line:3,column:15070},end:{line:3,column:15090}},"4669":{start:{line:3,column:15078},end:{line:3,column:15090}},"4670":{start:{line:3,column:15096},end:{line:3,column:15112}},"4671":{start:{line:3,column:15113},end:{line:3,column:15195}},"4672":{start:{line:3,column:15249},end:{line:3,column:15269}},"4673":{start:{line:3,column:15284},end:{line:3,column:15302}},"4674":{start:{line:3,column:15303},end:{line:3,column:15399}},"4675":{start:{line:3,column:15419},end:{line:3,column:15427}},"4676":{start:{line:3,column:15430},end:{line:3,column:15438}},"4677":{start:{line:3,column:15441},end:{line:3,column:15460}},"4678":{start:{line:3,column:15463},end:{line:3,column:15465}},"4679":{start:{line:3,column:15468},end:{line:3,column:15484}},"4680":{start:{line:3,column:15485},end:{line:3,column:15607}},"4681":{start:{line:3,column:15607},end:{line:3,column:15646}},"4682":{start:{line:3,column:15617},end:{line:3,column:15618}},"4683":{start:{line:3,column:15628},end:{line:3,column:15646}},"4684":{start:{line:3,column:15646},end:{line:3,column:15654}},"4685":{start:{line:3,column:15675},end:{line:3,column:15697}},"4686":{start:{line:3,column:15710},end:{line:3,column:15791}},"4687":{start:{line:3,column:15812},end:{line:3,column:15932}},"4688":{start:{line:3,column:15958},end:{line:3,column:15968}},"4689":{start:{line:3,column:15969},end:{line:3,column:16032}},"4690":{start:{line:3,column:16053},end:{line:3,column:16132}},"4691":{start:{line:3,column:16148},end:{line:3,column:16166}},"4692":{start:{line:3,column:16168},end:{line:3,column:16176}},"4693":{start:{line:3,column:16204},end:{line:3,column:16206}},"4694":{start:{line:3,column:16296},end:{line:3,column:16297}},"4695":{start:{line:3,column:16300},end:{line:3,column:16304}},"4696":{start:{line:3,column:16307},end:{line:3,column:16310}},"4697":{start:{line:3,column:16325},end:{line:3,column:16326}},"4698":{start:{line:3,column:16329},end:{line:3,column:16334}},"4699":{start:{line:3,column:16337},end:{line:3,column:16342}},"4700":{start:{line:3,column:16345},end:{line:3,column:16350}},"4701":{start:{line:3,column:16353},end:{line:3,column:16364}},"4702":{start:{line:3,column:16367},end:{line:3,column:16382}},"4703":{start:{line:3,column:16391},end:{line:3,column:16438}},"4704":{start:{line:3,column:16410},end:{line:3,column:16438}},"4705":{start:{line:3,column:16438},end:{line:3,column:16787}},"4706":{start:{line:3,column:16793},end:{line:3,column:16814}},"4707":{start:{line:3,column:16815},end:{line:3,column:16879}},"4708":{start:{line:3,column:16885},end:{line:3,column:16886}},"4709":{start:{line:3,column:16887},end:{line:3,column:17061}},"4710":{start:{line:3,column:17003},end:{line:3,column:17026}},"4711":{start:{line:3,column:17027},end:{line:3,column:17043}},"4712":{start:{line:3,column:17037},end:{line:3,column:17043}},"4713":{start:{line:3,column:17043},end:{line:3,column:17060}},"4714":{start:{line:3,column:17061},end:{line:3,column:17198}},"4715":{start:{line:3,column:17251},end:{line:3,column:17256}},"4716":{start:{line:3,column:17259},end:{line:3,column:17292}},"4717":{start:{line:3,column:17295},end:{line:3,column:17314}},"4718":{start:{line:3,column:17315},end:{line:3,column:17337}},"4719":{start:{line:3,column:17345},end:{line:3,column:19015}},"4720":{start:{line:3,column:17377},end:{line:3,column:17484}},"4721":{start:{line:3,column:17496},end:{line:3,column:17573}},"4722":{start:{line:3,column:17618},end:{line:3,column:17630}},"4723":{start:{line:3,column:17659},end:{line:3,column:17679}},"4724":{start:{line:3,column:17694},end:{line:3,column:17698}},"4725":{start:{line:3,column:17701},end:{line:3,column:17711}},"4726":{start:{line:3,column:17704},end:{line:3,column:17711}},"4727":{start:{line:3,column:17714},end:{line:3,column:17724}},"4728":{start:{line:3,column:17717},end:{line:3,column:17724}},"4729":{start:{line:3,column:17725},end:{line:3,column:17780}},"4730":{start:{line:3,column:17737},end:{line:3,column:17742}},"4731":{start:{line:3,column:17745},end:{line:3,column:17750}},"4732":{start:{line:3,column:17751},end:{line:3,column:17779}},"4733":{start:{line:3,column:17780},end:{line:3,column:17837}},"4734":{start:{line:3,column:17796},end:{line:3,column:17819}},"4735":{start:{line:3,column:17820},end:{line:3,column:17836}},"4736":{start:{line:3,column:17837},end:{line:3,column:17858}},"4737":{start:{line:3,column:17880},end:{line:3,column:17898}},"4738":{start:{line:3,column:17928},end:{line:3,column:17929}},"4739":{start:{line:3,column:17932},end:{line:3,column:18180}},"4740":{start:{line:3,column:18200},end:{line:3,column:18231}},"4741":{start:{line:3,column:18251},end:{line:3,column:18263}},"4742":{start:{line:3,column:18266},end:{line:3,column:18273}},"4743":{start:{line:3,column:18276},end:{line:3,column:18295}},"4744":{start:{line:3,column:18296},end:{line:3,column:18312}},"4745":{start:{line:3,column:18318},end:{line:3,column:18541}},"4746":{start:{line:3,column:18544},end:{line:3,column:18561}},"4747":{start:{line:3,column:18564},end:{line:3,column:18571}},"4748":{start:{line:3,column:18572},end:{line:3,column:18721}},"4749":{start:{line:3,column:18740},end:{line:3,column:18750}},"4750":{start:{line:3,column:18753},end:{line:3,column:18761}},"4751":{start:{line:3,column:18764},end:{line:3,column:18772}},"4752":{start:{line:3,column:18773},end:{line:3,column:18872}},"4753":{start:{line:3,column:18831},end:{line:3,column:18861}},"4754":{start:{line:3,column:18862},end:{line:3,column:18871}},"4755":{start:{line:3,column:18872},end:{line:3,column:18928}},"4756":{start:{line:3,column:18949},end:{line:3,column:19013}},"4757":{start:{line:3,column:19019},end:{line:3,column:19655}},"4758":{start:{line:3,column:19046},end:{line:3,column:19054}},"4759":{start:{line:3,column:19071},end:{line:3,column:19111}},"4760":{start:{line:3,column:19151},end:{line:3,column:19169}},"4761":{start:{line:3,column:19170},end:{line:3,column:19235}},"4762":{start:{line:3,column:19261},end:{line:3,column:19280}},"4763":{start:{line:3,column:19283},end:{line:3,column:19307}},"4764":{start:{line:3,column:19310},end:{line:3,column:19344}},"4765":{start:{line:3,column:19347},end:{line:3,column:19380}},"4766":{start:{line:3,column:19383},end:{line:3,column:19414}},"4767":{start:{line:3,column:19415},end:{line:3,column:19462}},"4768":{start:{line:3,column:19483},end:{line:3,column:19565}},"4769":{start:{line:3,column:19586},end:{line:3,column:19653}},"4770":{start:{line:3,column:19659},end:{line:3,column:19679}},"4771":{start:{line:3,column:19662},end:{line:3,column:19679}},"4772":{start:{line:3,column:19683},end:{line:3,column:19710}},"4773":{start:{line:3,column:19690},end:{line:3,column:19710}},"4774":{start:{line:3,column:19726},end:{line:3,column:19757}},"4775":{start:{line:3,column:19783},end:{line:3,column:19797}},"4776":{start:{line:3,column:19800},end:{line:3,column:19815}},"4777":{start:{line:3,column:19816},end:{line:3,column:19839}},"4778":{start:{line:3,column:19863},end:{line:3,column:19866}},"4779":{start:{line:3,column:19869},end:{line:3,column:19874}},"4780":{start:{line:3,column:19875},end:{line:3,column:19898}},"4781":{start:{line:3,column:19894},end:{line:3,column:19898}},"4782":{start:{line:3,column:19898},end:{line:3,column:19921}},"4783":{start:{line:3,column:19917},end:{line:3,column:19921}},"4784":{start:{line:3,column:19921},end:{line:3,column:19945}},"4785":{start:{line:3,column:19975},end:{line:3,column:19988}},"4786":{start:{line:3,column:19994},end:{line:3,column:19996}},"4787":{start:{line:3,column:19999},end:{line:3,column:20004}},"4788":{start:{line:3,column:20007},end:{line:3,column:20014}},"4789":{start:{line:3,column:20017},end:{line:3,column:20047}},"4790":{start:{line:3,column:20050},end:{line:3,column:20064}},"4791":{start:{line:3,column:20067},end:{line:3,column:20087}},"4792":{start:{line:3,column:20090},end:{line:3,column:20111}},"4793":{start:{line:3,column:20114},end:{line:3,column:20141}},"4794":{start:{line:3,column:20144},end:{line:3,column:20176}},"4795":{start:{line:3,column:20179},end:{line:3,column:20226}},"4796":{start:{line:3,column:20227},end:{line:3,column:20373}},"4797":{start:{line:3,column:20237},end:{line:3,column:20373}},"4798":{start:{line:3,column:20379},end:{line:3,column:20389}},"4799":{start:{line:3,column:20390},end:{line:3,column:20442}},"4800":{start:{line:3,column:20450},end:{line:3,column:22048}},"4801":{start:{line:3,column:20477},end:{line:3,column:20490}},"4802":{start:{line:3,column:20507},end:{line:3,column:20570}},"4803":{start:{line:3,column:20586},end:{line:3,column:20671}},"4804":{start:{line:3,column:20689},end:{line:3,column:20725}},"4805":{start:{line:3,column:20726},end:{line:3,column:20757}},"4806":{start:{line:3,column:20736},end:{line:3,column:20750}},"4807":{start:{line:3,column:20750},end:{line:3,column:20756}},"4808":{start:{line:3,column:20757},end:{line:3,column:20780}},"4809":{start:{line:3,column:20820},end:{line:3,column:20838}},"4810":{start:{line:3,column:20839},end:{line:3,column:21099}},"4811":{start:{line:3,column:21156},end:{line:3,column:21176}},"4812":{start:{line:3,column:21179},end:{line:3,column:21187}},"4813":{start:{line:3,column:21190},end:{line:3,column:21198}},"4814":{start:{line:3,column:21201},end:{line:3,column:21211}},"4815":{start:{line:3,column:21204},end:{line:3,column:21211}},"4816":{start:{line:3,column:21214},end:{line:3,column:21224}},"4817":{start:{line:3,column:21217},end:{line:3,column:21224}},"4818":{start:{line:3,column:21225},end:{line:3,column:21333}},"4819":{start:{line:3,column:21353},end:{line:3,column:21365}},"4820":{start:{line:3,column:21368},end:{line:3,column:21405}},"4821":{start:{line:3,column:21408},end:{line:3,column:21418}},"4822":{start:{line:3,column:21419},end:{line:3,column:21568}},"4823":{start:{line:3,column:21589},end:{line:3,column:21668}},"4824":{start:{line:3,column:21687},end:{line:3,column:21695}},"4825":{start:{line:3,column:21696},end:{line:3,column:21772}},"4826":{start:{line:3,column:21793},end:{line:3,column:21937}},"4827":{start:{line:3,column:21964},end:{line:3,column:21990}},"4828":{start:{line:3,column:21991},end:{line:3,column:22046}},"4829":{start:{line:3,column:22070},end:{line:3,column:22077}},"4830":{start:{line:3,column:22078},end:{line:3,column:22181}},"4831":{start:{line:3,column:22109},end:{line:3,column:22129}},"4832":{start:{line:3,column:22130},end:{line:3,column:22180}},"4833":{start:{line:3,column:22181},end:{line:3,column:22189}},"4834":{start:{line:3,column:22209},end:{line:3,column:22273}},"4835":{start:{line:3,column:22297},end:{line:3,column:22385}},"4836":{start:{line:3,column:22407},end:{line:3,column:22512}},"4837":{start:{line:3,column:22515},end:{line:3,column:22534}},"4838":{start:{line:3,column:22537},end:{line:3,column:22539}},"4839":{start:{line:3,column:22542},end:{line:3,column:22544}},"4840":{start:{line:3,column:22547},end:{line:3,column:22568}},"4841":{start:{line:3,column:22571},end:{line:3,column:22592}},"4842":{start:{line:3,column:22595},end:{line:3,column:22620}},"4843":{start:{line:3,column:22621},end:{line:3,column:22912}},"4844":{start:{line:3,column:22631},end:{line:3,column:22632}},"4845":{start:{line:3,column:22648},end:{line:3,column:22687}},"4846":{start:{line:3,column:22688},end:{line:3,column:22703}},"4847":{start:{line:3,column:22709},end:{line:3,column:22751}},"4848":{start:{line:3,column:22754},end:{line:3,column:22763}},"4849":{start:{line:3,column:22766},end:{line:3,column:22795}},"4850":{start:{line:3,column:22796},end:{line:3,column:22803}},"4851":{start:{line:3,column:22809},end:{line:3,column:22832}},"4852":{start:{line:3,column:22835},end:{line:3,column:22852}},"4853":{start:{line:3,column:22855},end:{line:3,column:22874}},"4854":{start:{line:3,column:22877},end:{line:3,column:22897}},"4855":{start:{line:3,column:22898},end:{line:3,column:22911}},"4856":{start:{line:3,column:22912},end:{line:3,column:22990}},"4857":{start:{line:3,column:23020},end:{line:3,column:23041}},"4858":{start:{line:3,column:23044},end:{line:3,column:23065}},"4859":{start:{line:3,column:23068},end:{line:3,column:23069}},"4860":{start:{line:3,column:23072},end:{line:3,column:23073}},"4861":{start:{line:3,column:23074},end:{line:3,column:23291}},"4862":{start:{line:3,column:23317},end:{line:3,column:23330}},"4863":{start:{line:3,column:23376},end:{line:3,column:23377}},"4864":{start:{line:3,column:23380},end:{line:3,column:23409}},"4865":{start:{line:3,column:23412},end:{line:3,column:23440}},"4866":{start:{line:3,column:23443},end:{line:3,column:23456}},"4867":{start:{line:3,column:23459},end:{line:3,column:23464}},"4868":{start:{line:3,column:23467},end:{line:3,column:23480}},"4869":{start:{line:3,column:23481},end:{line:3,column:23559}},"4870":{start:{line:3,column:23577},end:{line:3,column:23592}},"4871":{start:{line:3,column:23583},end:{line:3,column:23592}},"4872":{start:{line:3,column:23627},end:{line:3,column:23628}},"4873":{start:{line:3,column:23629},end:{line:3,column:23704}},"4874":{start:{line:3,column:23730},end:{line:3,column:23732}},"4875":{start:{line:3,column:23735},end:{line:3,column:23756}},"4876":{start:{line:3,column:23759},end:{line:3,column:23768}},"4877":{start:{line:3,column:23801},end:{line:3,column:23814}},"4878":{start:{line:3,column:23817},end:{line:3,column:23856}},"4879":{start:{line:3,column:23859},end:{line:3,column:23982}},"4880":{start:{line:3,column:23869},end:{line:3,column:23870}},"4881":{start:{line:3,column:23880},end:{line:3,column:23907}},"4882":{start:{line:3,column:23913},end:{line:3,column:23922}},"4883":{start:{line:3,column:23923},end:{line:3,column:23981}},"4884":{start:{line:3,column:23982},end:{line:3,column:23990}},"4885":{start:{line:3,column:24006},end:{line:3,column:24057}},"4886":{start:{line:3,column:24077},end:{line:3,column:24125}},"4887":{start:{line:3,column:24145},end:{line:3,column:24198}},"4888":{start:{line:3,column:24253},end:{line:3,column:24254}},"4889":{start:{line:3,column:24273},end:{line:3,column:24274}},"4890":{start:{line:3,column:24275},end:{line:3,column:24511}},"4891":{start:{line:3,column:24291},end:{line:3,column:24309}},"4892":{start:{line:3,column:24312},end:{line:3,column:24332}},"4893":{start:{line:3,column:24333},end:{line:3,column:24347}},"4894":{start:{line:3,column:24353},end:{line:3,column:24361}},"4895":{start:{line:3,column:24364},end:{line:3,column:24371}},"4896":{start:{line:3,column:24374},end:{line:3,column:24385}},"4897":{start:{line:3,column:24388},end:{line:3,column:24400}},"4898":{start:{line:3,column:24401},end:{line:3,column:24510}},"4899":{start:{line:3,column:24426},end:{line:3,column:24431}},"4900":{start:{line:3,column:24564},end:{line:3,column:24565}},"4901":{start:{line:3,column:24566},end:{line:3,column:24832}},"4902":{start:{line:3,column:24576},end:{line:3,column:24579}},"4903":{start:{line:3,column:24596},end:{line:3,column:24617}},"4904":{start:{line:3,column:24618},end:{line:3,column:24641}},"4905":{start:{line:3,column:24632},end:{line:3,column:24641}},"4906":{start:{line:3,column:24647},end:{line:3,column:24686}},"4907":{start:{line:3,column:24687},end:{line:3,column:24697}},"4908":{start:{line:3,column:24703},end:{line:3,column:24712}},"4909":{start:{line:3,column:24735},end:{line:3,column:24736}},"4910":{start:{line:3,column:24737},end:{line:3,column:24831}},"4911":{start:{line:3,column:24865},end:{line:3,column:24866}},"4912":{start:{line:3,column:24867},end:{line:3,column:25022}},"4913":{start:{line:3,column:24872},end:{line:3,column:24905}},"4914":{start:{line:3,column:24916},end:{line:3,column:24939}},"4915":{start:{line:3,column:24940},end:{line:3,column:24958}},"4916":{start:{line:3,column:24958},end:{line:3,column:25021}},"4917":{start:{line:3,column:24968},end:{line:3,column:24969}},"4918":{start:{line:3,column:24978},end:{line:3,column:25021}},"4919":{start:{line:3,column:25052},end:{line:3,column:25057}},"4920":{start:{line:3,column:25060},end:{line:3,column:25070}},"4921":{start:{line:3,column:25093},end:{line:3,column:25094}},"4922":{start:{line:3,column:25095},end:{line:3,column:25275}},"4923":{start:{line:3,column:25295},end:{line:3,column:25343}},"4924":{start:{line:3,column:25351},end:{line:3,column:29688}},"4925":{start:{line:3,column:25378},end:{line:3,column:25392}},"4926":{start:{line:3,column:25409},end:{line:3,column:25746}},"4927":{start:{line:3,column:25704},end:{line:3,column:25712}},"4928":{start:{line:3,column:25768},end:{line:3,column:25852}},"4929":{start:{line:3,column:25872},end:{line:3,column:25903}},"4930":{start:{line:3,column:25919},end:{line:3,column:26037}},"4931":{start:{line:3,column:26060},end:{line:3,column:26095}},"4932":{start:{line:3,column:26098},end:{line:3,column:26130}},"4933":{start:{line:3,column:26133},end:{line:3,column:26168}},"4934":{start:{line:3,column:26169},end:{line:3,column:26303}},"4935":{start:{line:3,column:26343},end:{line:3,column:26361}},"4936":{start:{line:3,column:26362},end:{line:3,column:26449}},"4937":{start:{line:3,column:26469},end:{line:3,column:26520}},"4938":{start:{line:3,column:26543},end:{line:3,column:26758}},"4939":{start:{line:3,column:26641},end:{line:3,column:26688}},"4940":{start:{line:3,column:26689},end:{line:3,column:26709}},"4941":{start:{line:3,column:26726},end:{line:3,column:26757}},"4942":{start:{line:3,column:26771},end:{line:3,column:26783}},"4943":{start:{line:3,column:26784},end:{line:3,column:26854}},"4944":{start:{line:3,column:26879},end:{line:3,column:27011}},"4945":{start:{line:3,column:27035},end:{line:3,column:27066}},"4946":{start:{line:3,column:27069},end:{line:3,column:27095}},"4947":{start:{line:3,column:27096},end:{line:3,column:27115}},"4948":{start:{line:3,column:27149},end:{line:3,column:27168}},"4949":{start:{line:3,column:27157},end:{line:3,column:27168}},"4950":{start:{line:3,column:27174},end:{line:3,column:27210}},"4951":{start:{line:3,column:27211},end:{line:3,column:27268}},"4952":{start:{line:3,column:27302},end:{line:3,column:27321}},"4953":{start:{line:3,column:27310},end:{line:3,column:27321}},"4954":{start:{line:3,column:27327},end:{line:3,column:27367}},"4955":{start:{line:3,column:27368},end:{line:3,column:27417}},"4956":{start:{line:3,column:27448},end:{line:3,column:27469}},"4957":{start:{line:3,column:27470},end:{line:3,column:27535}},"4958":{start:{line:3,column:27497},end:{line:3,column:27501}},"4959":{start:{line:3,column:27502},end:{line:3,column:27534}},"4960":{start:{line:3,column:27568},end:{line:3,column:27593}},"4961":{start:{line:3,column:27594},end:{line:3,column:27667}},"4962":{start:{line:3,column:27698},end:{line:3,column:27767}},"4963":{start:{line:3,column:27787},end:{line:3,column:27849}},"4964":{start:{line:3,column:27910},end:{line:3,column:27934}},"4965":{start:{line:3,column:27935},end:{line:3,column:27972}},"4966":{start:{line:3,column:28031},end:{line:3,column:28043}},"4967":{start:{line:3,column:28044},end:{line:3,column:28224}},"4968":{start:{line:3,column:28056},end:{line:3,column:28064}},"4969":{start:{line:3,column:28065},end:{line:3,column:28223}},"4970":{start:{line:3,column:28242},end:{line:3,column:28250}},"4971":{start:{line:3,column:28253},end:{line:3,column:28265}},"4972":{start:{line:3,column:28297},end:{line:3,column:28298}},"4973":{start:{line:3,column:28301},end:{line:3,column:28325}},"4974":{start:{line:3,column:28332},end:{line:3,column:28966}},"4975":{start:{line:3,column:28407},end:{line:3,column:28560}},"4976":{start:{line:3,column:28436},end:{line:3,column:28482}},"4977":{start:{line:3,column:28488},end:{line:3,column:28506}},"4978":{start:{line:3,column:28509},end:{line:3,column:28524}},"4979":{start:{line:3,column:28527},end:{line:3,column:28542}},"4980":{start:{line:3,column:28543},end:{line:3,column:28559}},"4981":{start:{line:3,column:28574},end:{line:3,column:28954}},"4982":{start:{line:3,column:28609},end:{line:3,column:28651}},"4983":{start:{line:3,column:28674},end:{line:3,column:28675}},"4984":{start:{line:3,column:28676},end:{line:3,column:28953}},"4985":{start:{line:3,column:28954},end:{line:3,column:28965}},"4986":{start:{line:3,column:29000},end:{line:3,column:29008}},"4987":{start:{line:3,column:29011},end:{line:3,column:29023}},"4988":{start:{line:3,column:29026},end:{line:3,column:29033}},"4989":{start:{line:3,column:29034},end:{line:3,column:29055}},"4990":{start:{line:3,column:29048},end:{line:3,column:29055}},"4991":{start:{line:3,column:29061},end:{line:3,column:29082}},"4992":{start:{line:3,column:29087},end:{line:3,column:29673}},"4993":{start:{line:3,column:29219},end:{line:3,column:29260}},"4994":{start:{line:3,column:29253},end:{line:3,column:29260}},"4995":{start:{line:3,column:29266},end:{line:3,column:29298}},"4996":{start:{line:3,column:29301},end:{line:3,column:29310}},"4997":{start:{line:3,column:29311},end:{line:3,column:29563}},"4998":{start:{line:3,column:29393},end:{line:3,column:29468}},"4999":{start:{line:3,column:29474},end:{line:3,column:29494}},"5000":{start:{line:3,column:29495},end:{line:3,column:29562}},"5001":{start:{line:3,column:29563},end:{line:3,column:29659}},"5002":{start:{line:3,column:29692},end:{line:3,column:30025}},"5003":{start:{line:3,column:30028},end:{line:3,column:30043}},"5004":{start:{line:3,column:30061},end:{line:3,column:30071}},"5005":{start:{line:3,column:30089},end:{line:3,column:30109}},"5006":{start:{line:3,column:30097},end:{line:3,column:30109}},"5007":{start:{line:3,column:30115},end:{line:3,column:30125}},"5008":{start:{line:3,column:30158},end:{line:3,column:30170}},"5009":{start:{line:3,column:30173},end:{line:3,column:30174}},"5010":{start:{line:3,column:30175},end:{line:3,column:30359}},"5011":{start:{line:3,column:30387},end:{line:3,column:30395}},"5012":{start:{line:3,column:30396},end:{line:3,column:30543}},"5013":{start:{line:3,column:30406},end:{line:3,column:30418}},"5014":{start:{line:3,column:30436},end:{line:3,column:30444}},"5015":{start:{line:3,column:30447},end:{line:3,column:30486}},"5016":{start:{line:3,column:30487},end:{line:3,column:30542}},"5017":{start:{line:3,column:30531},end:{line:3,column:30542}},"5018":{start:{line:3,column:30543},end:{line:3,column:30556}},"5019":{start:{line:3,column:30580},end:{line:3,column:30687}},"5020":{start:{line:3,column:30590},end:{line:3,column:30600}},"5021":{start:{line:3,column:30628},end:{line:3,column:30632}},"5022":{start:{line:3,column:30633},end:{line:3,column:30686}},"5023":{start:{line:3,column:30678},end:{line:3,column:30686}},"5024":{start:{line:3,column:30687},end:{line:3,column:30713}},"5025":{start:{line:3,column:30729},end:{line:3,column:30803}},"5026":{start:{line:3,column:30739},end:{line:3,column:30753}},"5027":{start:{line:3,column:30756},end:{line:3,column:30764}},"5028":{start:{line:3,column:30773},end:{line:3,column:30803}},"5029":{start:{line:3,column:30792},end:{line:3,column:30803}},"5030":{start:{line:3,column:30823},end:{line:3,column:30906}},"5031":{start:{line:3,column:30829},end:{line:3,column:30837}},"5032":{start:{line:3,column:30842},end:{line:3,column:30906}},"5033":{start:{line:3,column:30870},end:{line:3,column:30877}},"5034":{start:{line:3,column:30880},end:{line:3,column:30897}},"5035":{start:{line:3,column:30898},end:{line:3,column:30905}},"5036":{start:{line:3,column:30934},end:{line:3,column:30944}},"5037":{start:{line:3,column:30947},end:{line:3,column:30971}},"5038":{start:{line:3,column:30974},end:{line:3,column:30993}},"5039":{start:{line:3,column:30998},end:{line:3,column:31056}},"5040":{start:{line:3,column:31027},end:{line:3,column:31056}},"5041":{start:{line:3,column:31056},end:{line:3,column:31064}},"5042":{start:{line:3,column:31090},end:{line:3,column:31092}},"5043":{start:{line:3,column:31095},end:{line:3,column:31097}},"5044":{start:{line:3,column:31100},end:{line:3,column:31108}},"5045":{start:{line:3,column:31113},end:{line:3,column:31170}},"5046":{start:{line:3,column:31129},end:{line:3,column:31170}},"5047":{start:{line:3,column:31170},end:{line:3,column:31200}},"5048":{start:{line:3,column:31208},end:{line:3,column:36157}},"5049":{start:{line:3,column:31243},end:{line:3,column:31249}},"5050":{start:{line:3,column:31266},end:{line:3,column:31434}},"5051":{start:{line:3,column:31450},end:{line:3,column:31597}},"5052":{start:{line:3,column:31617},end:{line:3,column:31636}},"5053":{start:{line:3,column:31639},end:{line:3,column:31682}},"5054":{start:{line:3,column:31683},end:{line:3,column:31841}},"5055":{start:{line:3,column:31853},end:{line:3,column:31886}},"5056":{start:{line:3,column:31902},end:{line:3,column:31961}},"5057":{start:{line:3,column:31990},end:{line:3,column:32002}},"5058":{start:{line:3,column:32005},end:{line:3,column:32018}},"5059":{start:{line:3,column:32021},end:{line:3,column:32039}},"5060":{start:{line:3,column:32080},end:{line:3,column:32100}},"5061":{start:{line:3,column:32115},end:{line:3,column:32196}},"5062":{start:{line:3,column:32197},end:{line:3,column:32445}},"5063":{start:{line:3,column:32470},end:{line:3,column:32495}},"5064":{start:{line:3,column:32498},end:{line:3,column:32522}},"5065":{start:{line:3,column:32525},end:{line:3,column:32549}},"5066":{start:{line:3,column:32550},end:{line:3,column:32605}},"5067":{start:{line:3,column:32625},end:{line:3,column:32637}},"5068":{start:{line:3,column:32640},end:{line:3,column:32646}},"5069":{start:{line:3,column:32649},end:{line:3,column:32656}},"5070":{start:{line:3,column:32659},end:{line:3,column:32721}},"5071":{start:{line:3,column:32722},end:{line:3,column:32821}},"5072":{start:{line:3,column:32827},end:{line:3,column:32835}},"5073":{start:{line:3,column:32838},end:{line:3,column:32846}},"5074":{start:{line:3,column:32849},end:{line:3,column:32858}},"5075":{start:{line:3,column:32859},end:{line:3,column:33147}},"5076":{start:{line:3,column:33164},end:{line:3,column:33243}},"5077":{start:{line:3,column:33233},end:{line:3,column:33241}},"5078":{start:{line:3,column:33268},end:{line:3,column:33269}},"5079":{start:{line:3,column:33272},end:{line:3,column:33273}},"5080":{start:{line:3,column:33278},end:{line:3,column:33505}},"5081":{start:{line:3,column:33511},end:{line:3,column:33528}},"5082":{start:{line:3,column:33529},end:{line:3,column:33597}},"5083":{start:{line:3,column:33616},end:{line:3,column:33629}},"5084":{start:{line:3,column:33632},end:{line:3,column:33640}},"5085":{start:{line:3,column:33643},end:{line:3,column:33651}},"5086":{start:{line:3,column:33654},end:{line:3,column:33666}},"5087":{start:{line:3,column:33669},end:{line:3,column:33675}},"5088":{start:{line:3,column:33678},end:{line:3,column:33729}},"5089":{start:{line:3,column:33732},end:{line:3,column:33753}},"5090":{start:{line:3,column:33756},end:{line:3,column:33782}},"5091":{start:{line:3,column:33785},end:{line:3,column:33798}},"5092":{start:{line:3,column:33801},end:{line:3,column:33803}},"5093":{start:{line:3,column:33806},end:{line:3,column:33807}},"5094":{start:{line:3,column:33812},end:{line:3,column:33970}},"5095":{start:{line:3,column:33894},end:{line:3,column:33970}},"5096":{start:{line:3,column:33976},end:{line:3,column:34025}},"5097":{start:{line:3,column:34026},end:{line:3,column:34072}},"5098":{start:{line:3,column:34062},end:{line:3,column:34072}},"5099":{start:{line:3,column:34072},end:{line:3,column:34158}},"5100":{start:{line:3,column:34155},end:{line:3,column:34157}},"5101":{start:{line:3,column:34185},end:{line:3,column:34198}},"5102":{start:{line:3,column:34201},end:{line:3,column:34218}},"5103":{start:{line:3,column:34219},end:{line:3,column:34307}},"5104":{start:{line:3,column:34326},end:{line:3,column:34358}},"5105":{start:{line:3,column:34361},end:{line:3,column:34371}},"5106":{start:{line:3,column:34374},end:{line:3,column:34381}},"5107":{start:{line:3,column:34382},end:{line:3,column:34414}},"5108":{start:{line:3,column:34450},end:{line:3,column:34462}},"5109":{start:{line:3,column:34465},end:{line:3,column:34481}},"5110":{start:{line:3,column:34482},end:{line:3,column:34512}},"5111":{start:{line:3,column:34487},end:{line:3,column:34512}},"5112":{start:{line:3,column:34518},end:{line:3,column:34539}},"5113":{start:{line:3,column:34542},end:{line:3,column:34552}},"5114":{start:{line:3,column:34555},end:{line:3,column:34570}},"5115":{start:{line:3,column:34573},end:{line:3,column:34580}},"5116":{start:{line:3,column:34583},end:{line:3,column:34590}},"5117":{start:{line:3,column:34593},end:{line:3,column:34597}},"5118":{start:{line:3,column:34600},end:{line:3,column:34616}},"5119":{start:{line:3,column:34617},end:{line:3,column:34658}},"5120":{start:{line:3,column:34691},end:{line:3,column:34770}},"5121":{start:{line:3,column:34718},end:{line:3,column:34770}},"5122":{start:{line:3,column:34793},end:{line:3,column:34845}},"5123":{start:{line:3,column:34872},end:{line:3,column:34885}},"5124":{start:{line:3,column:34888},end:{line:3,column:34914}},"5125":{start:{line:3,column:34915},end:{line:3,column:34967}},"5126":{start:{line:3,column:34994},end:{line:3,column:35007}},"5127":{start:{line:3,column:35010},end:{line:3,column:35051}},"5128":{start:{line:3,column:35052},end:{line:3,column:35089}},"5129":{start:{line:3,column:35113},end:{line:3,column:35131}},"5130":{start:{line:3,column:35134},end:{line:3,column:35163}},"5131":{start:{line:3,column:35166},end:{line:3,column:35217}},"5132":{start:{line:3,column:35220},end:{line:3,column:35231}},"5133":{start:{line:3,column:35234},end:{line:3,column:35245}},"5134":{start:{line:3,column:35248},end:{line:3,column:35284}},"5135":{start:{line:3,column:35285},end:{line:3,column:35312}},"5136":{start:{line:3,column:35340},end:{line:3,column:35357}},"5137":{start:{line:3,column:35360},end:{line:3,column:35376}},"5138":{start:{line:3,column:35379},end:{line:3,column:35403}},"5139":{start:{line:3,column:35406},end:{line:3,column:35466}},"5140":{start:{line:3,column:35469},end:{line:3,column:35490}},"5141":{start:{line:3,column:35493},end:{line:3,column:35557}},"5142":{start:{line:3,column:35558},end:{line:3,column:35572}},"5143":{start:{line:3,column:35599},end:{line:3,column:35619}},"5144":{start:{line:3,column:35624},end:{line:3,column:35645}},"5145":{start:{line:3,column:35636},end:{line:3,column:35645}},"5146":{start:{line:3,column:35651},end:{line:3,column:35681}},"5147":{start:{line:3,column:35682},end:{line:3,column:35777}},"5148":{start:{line:3,column:35712},end:{line:3,column:35777}},"5149":{start:{line:3,column:35777},end:{line:3,column:35857}},"5150":{start:{line:3,column:35804},end:{line:3,column:35857}},"5151":{start:{line:3,column:35857},end:{line:3,column:35898}},"5152":{start:{line:3,column:35926},end:{line:3,column:35948}},"5153":{start:{line:3,column:35953},end:{line:3,column:35974}},"5154":{start:{line:3,column:35965},end:{line:3,column:35974}},"5155":{start:{line:3,column:35980},end:{line:3,column:35996}},"5156":{start:{line:3,column:35997},end:{line:3,column:36046}},"5157":{start:{line:3,column:36024},end:{line:3,column:36046}},"5158":{start:{line:3,column:36046},end:{line:3,column:36108}},"5159":{start:{line:3,column:36122},end:{line:3,column:36143}},"5160":{start:{line:3,column:36145},end:{line:3,column:36153}},"5161":{start:{line:3,column:36183},end:{line:3,column:36184}},"5162":{start:{line:3,column:36187},end:{line:3,column:36197}},"5163":{start:{line:3,column:36206},end:{line:3,column:36403}},"5164":{start:{line:3,column:36409},end:{line:3,column:36412}},"5165":{start:{line:3,column:36413},end:{line:3,column:36439}},"5166":{start:{line:3,column:36447},end:{line:3,column:37689}},"5167":{start:{line:3,column:36474},end:{line:3,column:36486}},"5168":{start:{line:3,column:36503},end:{line:3,column:36514}},"5169":{start:{line:3,column:36530},end:{line:3,column:36597}},"5170":{start:{line:3,column:36618},end:{line:3,column:36647}},"5171":{start:{line:3,column:36650},end:{line:3,column:36686}},"5172":{start:{line:3,column:36687},end:{line:3,column:36780}},"5173":{start:{line:3,column:36818},end:{line:3,column:36822}},"5174":{start:{line:3,column:36825},end:{line:3,column:36827}},"5175":{start:{line:3,column:36830},end:{line:3,column:36832}},"5176":{start:{line:3,column:36843},end:{line:3,column:36899}},"5177":{start:{line:3,column:36870},end:{line:3,column:36899}},"5178":{start:{line:3,column:36899},end:{line:3,column:36951}},"5179":{start:{line:3,column:36913},end:{line:3,column:36951}},"5180":{start:{line:3,column:36951},end:{line:3,column:37057}},"5181":{start:{line:3,column:36978},end:{line:3,column:37057}},"5182":{start:{line:3,column:37057},end:{line:3,column:37065}},"5183":{start:{line:3,column:37084},end:{line:3,column:37092}},"5184":{start:{line:3,column:37095},end:{line:3,column:37103}},"5185":{start:{line:3,column:37106},end:{line:3,column:37131}},"5186":{start:{line:3,column:37132},end:{line:3,column:37243}},"5187":{start:{line:3,column:37239},end:{line:3,column:37242}},"5188":{start:{line:3,column:37275},end:{line:3,column:37294}},"5189":{start:{line:3,column:37295},end:{line:3,column:37316}},"5190":{start:{line:3,column:37307},end:{line:3,column:37316}},"5191":{start:{line:3,column:37322},end:{line:3,column:37346}},"5192":{start:{line:3,column:37349},end:{line:3,column:37374}},"5193":{start:{line:3,column:37375},end:{line:3,column:37467}},"5194":{start:{line:3,column:37490},end:{line:3,column:37545}},"5195":{start:{line:3,column:37572},end:{line:3,column:37585}},"5196":{start:{line:3,column:37588},end:{line:3,column:37629}},"5197":{start:{line:3,column:37630},end:{line:3,column:37687}},"5198":{start:{line:3,column:37693},end:{line:3,column:37829}},"5199":{start:{line:3,column:37833},end:{line:3,column:37846}},"5200":{start:{line:3,column:37862},end:{line:3,column:37897}},"5201":{start:{line:3,column:37888},end:{line:3,column:37897}},"5202":{start:{line:3,column:37903},end:{line:3,column:37927}},"5203":{start:{line:3,column:37928},end:{line:3,column:38055}},"5204":{start:{line:3,column:38071},end:{line:3,column:38093}},"5205":{start:{line:3,column:38117},end:{line:3,column:38131}},"5206":{start:{line:3,column:38132},end:{line:3,column:38319}},"5207":{start:{line:3,column:38142},end:{line:3,column:38143}},"5208":{start:{line:3,column:38166},end:{line:3,column:38170}},"5209":{start:{line:3,column:38171},end:{line:3,column:38189}},"5210":{start:{line:3,column:38180},end:{line:3,column:38189}},"5211":{start:{line:3,column:38195},end:{line:3,column:38199}},"5212":{start:{line:3,column:38202},end:{line:3,column:38206}},"5213":{start:{line:3,column:38207},end:{line:3,column:38318}},"5214":{start:{line:3,column:38319},end:{line:3,column:38327}},"5215":{start:{line:3,column:38343},end:{line:3,column:38373}},"5216":{start:{line:3,column:38381},end:{line:3,column:38417}},"5217":{start:{line:3,column:38436},end:{line:3,column:38470}},"5218":{start:{line:3,column:38495},end:{line:3,column:38510}},"5219":{start:{line:3,column:38511},end:{line:3,column:38540}},"5220":{start:{line:3,column:38548},end:{line:3,column:38901}},"5221":{start:{line:3,column:38576},end:{line:3,column:38615}},"5222":{start:{line:3,column:38642},end:{line:3,column:38702}},"5223":{start:{line:3,column:38728},end:{line:3,column:38760}},"5224":{start:{line:3,column:38768},end:{line:3,column:38812}},"5225":{start:{line:3,column:38795},end:{line:3,column:38811}},"5226":{start:{line:3,column:38820},end:{line:3,column:38887}},"5227":{start:{line:3,column:38889},end:{line:3,column:38897}},"5228":{start:{line:3,column:38905},end:{line:3,column:41834}},"5229":{start:{line:3,column:38933},end:{line:3,column:39505}},"5230":{start:{line:3,column:39483},end:{line:3,column:39503}},"5231":{start:{line:3,column:39521},end:{line:3,column:39547}},"5232":{start:{line:3,column:39540},end:{line:3,column:39547}},"5233":{start:{line:3,column:39553},end:{line:3,column:39561}},"5234":{start:{line:3,column:39564},end:{line:3,column:39593}},"5235":{start:{line:3,column:39594},end:{line:3,column:40115}},"5236":{start:{line:3,column:39607},end:{line:3,column:39620}},"5237":{start:{line:3,column:39634},end:{line:3,column:39654}},"5238":{start:{line:3,column:39656},end:{line:3,column:39670}},"5239":{start:{line:3,column:39675},end:{line:3,column:40115}},"5240":{start:{line:3,column:39706},end:{line:3,column:39734}},"5241":{start:{line:3,column:39735},end:{line:3,column:39790}},"5242":{start:{line:3,column:39796},end:{line:3,column:40115}},"5243":{start:{line:3,column:39817},end:{line:3,column:39845}},"5244":{start:{line:3,column:39846},end:{line:3,column:40114}},"5245":{start:{line:3,column:40130},end:{line:3,column:40220}},"5246":{start:{line:3,column:40204},end:{line:3,column:40219}},"5247":{start:{line:3,column:40230},end:{line:3,column:40392}},"5248":{start:{line:3,column:40263},end:{line:3,column:40392}},"5249":{start:{line:3,column:40335},end:{line:3,column:40391}},"5250":{start:{line:3,column:40403},end:{line:3,column:40485}},"5251":{start:{line:3,column:40463},end:{line:3,column:40484}},"5252":{start:{line:3,column:40503},end:{line:3,column:40584}},"5253":{start:{line:3,column:40604},end:{line:3,column:40648}},"5254":{start:{line:3,column:40665},end:{line:3,column:40699}},"5255":{start:{line:3,column:40716},end:{line:3,column:40856}},"5256":{start:{line:3,column:40875},end:{line:3,column:41260}},"5257":{start:{line:3,column:40899},end:{line:3,column:41021}},"5258":{start:{line:3,column:40980},end:{line:3,column:41020}},"5259":{start:{line:3,column:41039},end:{line:3,column:41161}},"5260":{start:{line:3,column:41120},end:{line:3,column:41160}},"5261":{start:{line:3,column:41285},end:{line:3,column:41384}},"5262":{start:{line:3,column:41400},end:{line:3,column:41478}},"5263":{start:{line:3,column:41486},end:{line:3,column:41530}},"5264":{start:{line:3,column:41513},end:{line:3,column:41529}},"5265":{start:{line:3,column:41538},end:{line:3,column:41820}},"5266":{start:{line:3,column:41822},end:{line:3,column:41830}}},fnMap:{"0":{name:"le",decl:{start:{line:1,column:226},end:{line:1,column:228}},loc:{start:{line:1,column:231},end:{line:1,column:246}},line:1},"1":{name:"(anonymous_1)",decl:{start:{line:1,column:253},end:{line:1,column:254}},loc:{start:{line:1,column:262},end:{line:1,column:287}},line:1},"2":{name:"re",decl:{start:{line:1,column:297},end:{line:1,column:299}},loc:{start:{line:1,column:302},end:{line:1,column:331}},line:1},"3":{name:"yt",decl:{start:{line:1,column:340},end:{line:1,column:342}},loc:{start:{line:1,column:345},end:{line:1,column:373}},line:1},"4":{name:"ft",decl:{start:{line:1,column:382},end:{line:1,column:384}},loc:{start:{line:1,column:387},end:{line:1,column:418}},line:1},"5":{name:"Vs",decl:{start:{line:1,column:427},end:{line:1,column:429}},loc:{start:{line:1,column:432},end:{line:1,column:460}},line:1},"6":{name:"(anonymous_6)",decl:{start:{line:1,column:599},end:{line:1,column:600}},loc:{start:{line:1,column:602},end:{line:1,column:610}},line:1},"7":{name:"(anonymous_7)",decl:{start:{line:1,column:614},end:{line:1,column:615}},loc:{start:{line:1,column:617},end:{line:1,column:640}},line:1},"8":{name:"(anonymous_8)",decl:{start:{line:1,column:644},end:{line:1,column:645}},loc:{start:{line:1,column:647},end:{line:1,column:666}},line:1},"9":{name:"(anonymous_9)",decl:{start:{line:1,column:670},end:{line:1,column:671}},loc:{start:{line:1,column:673},end:{line:1,column:707}},line:1},"10":{name:"cr",decl:{start:{line:1,column:717},end:{line:1,column:719}},loc:{start:{line:1,column:722},end:{line:1,column:982}},line:1},"11":{name:"(anonymous_11)",decl:{start:{line:1,column:989},end:{line:1,column:990}},loc:{start:{line:1,column:996},end:{line:1,column:1009}},line:1},"12":{name:"dr",decl:{start:{line:1,column:1019},end:{line:1,column:1021}},loc:{start:{line:1,column:1024},end:{line:1,column:1094}},line:1},"13":{name:"$s",decl:{start:{line:1,column:1221},end:{line:1,column:1223}},loc:{start:{line:1,column:1230},end:{line:1,column:1336}},line:1},"14":{name:"(anonymous_14)",decl:{start:{line:1,column:1257},end:{line:1,column:1258}},loc:{start:{line:1,column:1276},end:{line:1,column:1312}},line:1},"15":{name:"ur",decl:{start:{line:1,column:1345},end:{line:1,column:1347}},loc:{start:{line:1,column:1354},end:{line:1,column:1438}},line:1},"16":{name:"(anonymous_16)",decl:{start:{line:1,column:1361},end:{line:1,column:1362}},loc:{start:{line:1,column:1379},end:{line:1,column:1414}},line:1},"17":{name:"gr",decl:{start:{line:1,column:1447},end:{line:1,column:1449}},loc:{start:{line:1,column:1456},end:{line:1,column:1550}},line:1},"18":{name:"pr",decl:{start:{line:1,column:1559},end:{line:1,column:1561}},loc:{start:{line:1,column:1572},end:{line:1,column:1630}},line:1},"19":{name:"bi",decl:{start:{line:1,column:1639},end:{line:1,column:1641}},loc:{start:{line:1,column:1644},end:{line:1,column:1817}},line:1},"20":{name:"xi",decl:{start:{line:1,column:1826},end:{line:1,column:1828}},loc:{start:{line:1,column:1837},end:{line:1,column:1898}},line:1},"21":{name:"_i",decl:{start:{line:1,column:1907},end:{line:1,column:1909}},loc:{start:{line:1,column:1916},end:{line:1,column:1937}},line:1},"22":{name:"mr",decl:{start:{line:1,column:1946},end:{line:1,column:1948}},loc:{start:{line:1,column:1955},end:{line:1,column:1976}},line:1},"23":{name:"br",decl:{start:{line:1,column:1985},end:{line:1,column:1987}},loc:{start:{line:1,column:1994},end:{line:1,column:2015}},line:1},"24":{name:"Us",decl:{start:{line:1,column:2024},end:{line:1,column:2026}},loc:{start:{line:1,column:2029},end:{line:1,column:2052}},line:1},"25":{name:"xr",decl:{start:{line:1,column:2061},end:{line:1,column:2063}},loc:{start:{line:1,column:2066},end:{line:1,column:2280}},line:1},"26":{name:"_r",decl:{start:{line:1,column:2289},end:{line:1,column:2291}},loc:{start:{line:1,column:2296},end:{line:1,column:2360}},line:1},"27":{name:"yr",decl:{start:{line:1,column:2369},end:{line:1,column:2371}},loc:{start:{line:1,column:2374},end:{line:1,column:2509}},line:1},"28":{name:"vr",decl:{start:{line:1,column:5049},end:{line:1,column:5051}},loc:{start:{line:1,column:5053},end:{line:1,column:5255}},line:1},"29":{name:"Mr",decl:{start:{line:1,column:5271},end:{line:1,column:5273}},loc:{start:{line:1,column:5276},end:{line:1,column:5399}},line:1},"30":{name:"Sr",decl:{start:{line:1,column:5518},end:{line:1,column:5520}},loc:{start:{line:1,column:5523},end:{line:1,column:5756}},line:1},"31":{name:"wr",decl:{start:{line:1,column:5765},end:{line:1,column:5767}},loc:{start:{line:1,column:5770},end:{line:1,column:5864}},line:1},"32":{name:"(anonymous_32)",decl:{start:{line:1,column:5871},end:{line:1,column:5872}},loc:{start:{line:1,column:5874},end:{line:1,column:5922}},line:1},"33":{name:"(anonymous_33)",decl:{start:{line:1,column:5926},end:{line:1,column:5927}},loc:{start:{line:1,column:5929},end:{line:1,column:5975}},line:1},"34":{name:"Cr",decl:{start:{line:1,column:5985},end:{line:1,column:5987}},loc:{start:{line:1,column:5994},end:{line:1,column:6157}},line:1},"35":{name:"Te",decl:{start:{line:1,column:6166},end:{line:1,column:6168}},loc:{start:{line:1,column:6175},end:{line:1,column:6281}},line:1},"36":{name:"Xs",decl:{start:{line:1,column:6290},end:{line:1,column:6292}},loc:{start:{line:1,column:6297},end:{line:1,column:6331}},line:1},"37":{name:"Ys",decl:{start:{line:1,column:6340},end:{line:1,column:6342}},loc:{start:{line:1,column:6345},end:{line:1,column:6511}},line:1},"38":{name:"Pr",decl:{start:{line:1,column:6520},end:{line:1,column:6522}},loc:{start:{line:1,column:6525},end:{line:1,column:6563}},line:1},"39":{name:"(anonymous_39)",decl:{start:{line:1,column:6578},end:{line:1,column:6579}},loc:{start:{line:1,column:6592},end:{line:1,column:6724}},line:1},"40":{name:"(anonymous_40)",decl:{start:{line:1,column:6724},end:{line:1,column:6725}},loc:{start:{line:1,column:6735},end:{line:1,column:6755}},line:1},"41":{name:"(anonymous_41)",decl:{start:{line:1,column:6755},end:{line:1,column:6756}},loc:{start:{line:1,column:6764},end:{line:1,column:6811}},line:1},"42":{name:"(anonymous_42)",decl:{start:{line:1,column:6811},end:{line:1,column:6812}},loc:{start:{line:1,column:6821},end:{line:1,column:6838}},line:1},"43":{name:"(anonymous_43)",decl:{start:{line:1,column:6838},end:{line:1,column:6839}},loc:{start:{line:1,column:6849},end:{line:1,column:6890}},line:1},"44":{name:"(anonymous_44)",decl:{start:{line:1,column:6890},end:{line:1,column:6891}},loc:{start:{line:1,column:6901},end:{line:1,column:6942}},line:1},"45":{name:"(anonymous_45)",decl:{start:{line:1,column:6942},end:{line:1,column:6943}},loc:{start:{line:1,column:6953},end:{line:1,column:6994}},line:1},"46":{name:"(anonymous_46)",decl:{start:{line:1,column:6994},end:{line:1,column:6995}},loc:{start:{line:1,column:7002},end:{line:1,column:7218}},line:1},"47":{name:"(anonymous_47)",decl:{start:{line:1,column:7218},end:{line:1,column:7219}},loc:{start:{line:1,column:7234},end:{line:1,column:7285}},line:1},"48":{name:"(anonymous_48)",decl:{start:{line:1,column:7285},end:{line:1,column:7286}},loc:{start:{line:1,column:7292},end:{line:1,column:7316}},line:1},"49":{name:"(anonymous_49)",decl:{start:{line:1,column:7316},end:{line:1,column:7317}},loc:{start:{line:1,column:7324},end:{line:1,column:7355}},line:1},"50":{name:"(anonymous_50)",decl:{start:{line:1,column:7355},end:{line:1,column:7356}},loc:{start:{line:1,column:7365},end:{line:1,column:7403}},line:1},"51":{name:"(anonymous_51)",decl:{start:{line:1,column:7403},end:{line:1,column:7404}},loc:{start:{line:1,column:7414},end:{line:1,column:7486}},line:1},"52":{name:"(anonymous_52)",decl:{start:{line:1,column:7486},end:{line:1,column:7487}},loc:{start:{line:1,column:7496},end:{line:1,column:7534}},line:1},"53":{name:"(anonymous_53)",decl:{start:{line:1,column:7534},end:{line:1,column:7535}},loc:{start:{line:1,column:7542},end:{line:1,column:7607}},line:1},"54":{name:"(anonymous_54)",decl:{start:{line:1,column:7607},end:{line:1,column:7608}},loc:{start:{line:1,column:7617},end:{line:1,column:7648}},line:1},"55":{name:"(anonymous_55)",decl:{start:{line:1,column:7648},end:{line:1,column:7649}},loc:{start:{line:1,column:7657},end:{line:1,column:7689}},line:1},"56":{name:"(anonymous_56)",decl:{start:{line:1,column:7689},end:{line:1,column:7690}},loc:{start:{line:1,column:7700},end:{line:1,column:7731}},line:1},"57":{name:"(anonymous_57)",decl:{start:{line:1,column:7731},end:{line:1,column:7732}},loc:{start:{line:1,column:7744},end:{line:1,column:7776}},line:1},"58":{name:"(anonymous_58)",decl:{start:{line:1,column:7776},end:{line:1,column:7777}},loc:{start:{line:1,column:7785},end:{line:1,column:7814}},line:1},"59":{name:"lt",decl:{start:{line:1,column:7825},end:{line:1,column:7827}},loc:{start:{line:1,column:7829},end:{line:1,column:7831}},line:1},"60":{name:"(anonymous_60)",decl:{start:{line:1,column:7839},end:{line:1,column:7840}},loc:{start:{line:1,column:7843},end:{line:1,column:7866}},line:1},"61":{name:"(anonymous_61)",decl:{start:{line:1,column:7858},end:{line:1,column:7859}},loc:{start:{line:1,column:7862},end:{line:1,column:7865}},line:1},"62":{name:"O",decl:{start:{line:1,column:7879},end:{line:1,column:7880}},loc:{start:{line:1,column:7883},end:{line:1,column:7899}},line:1},"63":{name:"z",decl:{start:{line:1,column:7908},end:{line:1,column:7909}},loc:{start:{line:1,column:7912},end:{line:1,column:8053}},line:1},"64":{name:"A",decl:{start:{line:1,column:8062},end:{line:1,column:8063}},loc:{start:{line:1,column:8066},end:{line:1,column:8138}},line:1},"65":{name:"N",decl:{start:{line:1,column:8147},end:{line:1,column:8148}},loc:{start:{line:1,column:8151},end:{line:1,column:8214}},line:1},"66":{name:"J",decl:{start:{line:1,column:8223},end:{line:1,column:8224}},loc:{start:{line:1,column:8229},end:{line:1,column:8246}},line:1},"67":{name:"C",decl:{start:{line:1,column:8255},end:{line:1,column:8256}},loc:{start:{line:1,column:8261},end:{line:1,column:8286}},line:1},"68":{name:"(anonymous_68)",decl:{start:{line:1,column:8293},end:{line:1,column:8294}},loc:{start:{line:1,column:8300},end:{line:1,column:8358}},line:1},"69":{name:"(anonymous_69)",decl:{start:{line:1,column:8362},end:{line:1,column:8363}},loc:{start:{line:1,column:8369},end:{line:1,column:8427}},line:1},"70":{name:"I",decl:{start:{line:1,column:8437},end:{line:1,column:8438}},loc:{start:{line:1,column:8445},end:{line:1,column:8498}},line:1},"71":{name:"R",decl:{start:{line:1,column:8507},end:{line:1,column:8508}},loc:{start:{line:1,column:8517},end:{line:1,column:8706}},line:1},"72":{name:"de",decl:{start:{line:1,column:8715},end:{line:1,column:8717}},loc:{start:{line:1,column:8722},end:{line:1,column:8888}},line:1},"73":{name:"Ie",decl:{start:{line:1,column:8897},end:{line:1,column:8899}},loc:{start:{line:1,column:8902},end:{line:1,column:9046}},line:1},"74":{name:"an",decl:{start:{line:1,column:9055},end:{line:1,column:9057}},loc:{start:{line:1,column:9060},end:{line:1,column:9123}},line:1},"75":{name:"Dr",decl:{start:{line:1,column:9132},end:{line:1,column:9134}},loc:{start:{line:1,column:9143},end:{line:1,column:9211}},line:1},"76":{name:"Ut",decl:{start:{line:1,column:9220},end:{line:1,column:9222}},loc:{start:{line:1,column:9229},end:{line:1,column:9426}},line:1},"77":{name:"Kt",decl:{start:{line:1,column:9435},end:{line:1,column:9437}},loc:{start:{line:1,column:9442},end:{line:1,column:9470}},line:1},"78":{name:"Or",decl:{start:{line:1,column:9479},end:{line:1,column:9481}},loc:{start:{line:1,column:9488},end:{line:1,column:9599}},line:1},"79":{name:"(anonymous_79)",decl:{start:{line:1,column:9610},end:{line:1,column:9611}},loc:{start:{line:1,column:9613},end:{line:1,column:9614}},line:1},"80":{name:"(anonymous_80)",decl:{start:{line:1,column:9617},end:{line:1,column:9618}},loc:{start:{line:1,column:9620},end:{line:1,column:9623}},line:1},"81":{name:"(anonymous_81)",decl:{start:{line:1,column:9626},end:{line:1,column:9627}},loc:{start:{line:1,column:9629},end:{line:1,column:9632}},line:1},"82":{name:"Ar",decl:{start:{line:1,column:9643},end:{line:1,column:9645}},loc:{start:{line:1,column:9648},end:{line:1,column:9761}},line:1},"83":{name:"Tr",decl:{start:{line:1,column:9770},end:{line:1,column:9772}},loc:{start:{line:1,column:9775},end:{line:1,column:9851}},line:1},"84":{name:"(anonymous_84)",decl:{start:{line:1,column:9795},end:{line:1,column:9796}},loc:{start:{line:1,column:9798},end:{line:1,column:9850}},line:1},"85":{name:"pt",decl:{start:{line:1,column:9860},end:{line:1,column:9862}},loc:{start:{line:1,column:9867},end:{line:1,column:9900}},line:1},"86":{name:"We",decl:{start:{line:1,column:9909},end:{line:1,column:9911}},loc:{start:{line:1,column:9914},end:{line:1,column:9959}},line:1},"87":{name:"(anonymous_87)",decl:{start:{line:1,column:9966},end:{line:1,column:9967}},loc:{start:{line:1,column:9969},end:{line:1,column:9981}},line:1},"88":{name:"(anonymous_88)",decl:{start:{line:1,column:9985},end:{line:1,column:9986}},loc:{start:{line:1,column:9988},end:{line:1,column:10008}},line:1},"89":{name:"(anonymous_89)",decl:{start:{line:1,column:10012},end:{line:1,column:10013}},loc:{start:{line:1,column:10019},end:{line:1,column:10094}},line:1},"90":{name:"ln",decl:{start:{line:1,column:10104},end:{line:1,column:10106}},loc:{start:{line:1,column:10109},end:{line:1,column:10178}},line:1},"91":{name:"Gt",decl:{start:{line:1,column:10300},end:{line:1,column:10302}},loc:{start:{line:1,column:10309},end:{line:1,column:10333}},line:1},"92":{name:"wi",decl:{start:{line:1,column:10342},end:{line:1,column:10344}},loc:{start:{line:1,column:10347},end:{line:1,column:10465}},line:1},"93":{name:"cn",decl:{start:{line:1,column:10474},end:{line:1,column:10476}},loc:{start:{line:1,column:10479},end:{line:1,column:10610}},line:1},"94":{name:"(anonymous_94)",decl:{start:{line:1,column:10590},end:{line:1,column:10591}},loc:{start:{line:1,column:10597},end:{line:1,column:10600}},line:1},"95":{name:"Er",decl:{start:{line:1,column:10619},end:{line:1,column:10621}},loc:{start:{line:1,column:10624},end:{line:1,column:10740}},line:1},"96":{name:"It",decl:{start:{line:1,column:10749},end:{line:1,column:10751}},loc:{start:{line:1,column:10754},end:{line:1,column:10804}},line:1},"97":{name:"hn",decl:{start:{line:1,column:10813},end:{line:1,column:10815}},loc:{start:{line:1,column:10820},end:{line:1,column:10863}},line:1},"98":{name:"Ci",decl:{start:{line:1,column:10872},end:{line:1,column:10874}},loc:{start:{line:1,column:10881},end:{line:1,column:10989}},line:1},"99":{name:"it",decl:{start:{line:1,column:10998},end:{line:1,column:11000}},loc:{start:{line:1,column:11003},end:{line:1,column:11021}},line:1},"100":{name:"Ne",decl:{start:{line:1,column:11030},end:{line:1,column:11032}},loc:{start:{line:1,column:11035},end:{line:1,column:11053}},line:1},"101":{name:"Pi",decl:{start:{line:1,column:11062},end:{line:1,column:11064}},loc:{start:{line:1,column:11067},end:{line:1,column:11143}},line:1},"102":{name:"Di",decl:{start:{line:1,column:11152},end:{line:1,column:11154}},loc:{start:{line:1,column:11159},end:{line:1,column:11267}},line:1},"103":{name:"ze",decl:{start:{line:1,column:11276},end:{line:1,column:11278}},loc:{start:{line:1,column:11283},end:{line:1,column:11342}},line:1},"104":{name:"Ir",decl:{start:{line:1,column:11351},end:{line:1,column:11353}},loc:{start:{line:1,column:11358},end:{line:1,column:11378}},line:1},"105":{name:"U",decl:{start:{line:1,column:11387},end:{line:1,column:11388}},loc:{start:{line:1,column:11391},end:{line:1,column:11408}},line:1},"106":{name:"Jt",decl:{start:{line:1,column:11417},end:{line:1,column:11419}},loc:{start:{line:1,column:11428},end:{line:1,column:11530}},line:1},"107":{name:"Y",decl:{start:{line:1,column:11539},end:{line:1,column:11540}},loc:{start:{line:1,column:11547},end:{line:1,column:11581}},line:1},"108":{name:"dn",decl:{start:{line:1,column:11590},end:{line:1,column:11592}},loc:{start:{line:1,column:11595},end:{line:1,column:11621}},line:1},"109":{name:"ct",decl:{start:{line:1,column:11630},end:{line:1,column:11632}},loc:{start:{line:1,column:11646},end:{line:1,column:11693}},line:1},"110":{name:"Ve",decl:{start:{line:1,column:11702},end:{line:1,column:11704}},loc:{start:{line:1,column:11711},end:{line:1,column:11804}},line:1},"111":{name:"(anonymous_111)",decl:{start:{line:1,column:11718},end:{line:1,column:11719}},loc:{start:{line:1,column:11721},end:{line:1,column:11727}},line:1},"112":{name:"(anonymous_112)",decl:{start:{line:1,column:11811},end:{line:1,column:11812}},loc:{start:{line:1,column:11822},end:{line:1,column:11896}},line:1},"113":{name:"(anonymous_113)",decl:{start:{line:1,column:11831},end:{line:1,column:11832}},loc:{start:{line:1,column:11834},end:{line:1,column:11882}},line:1},"114":{name:"(anonymous_114)",decl:{start:{line:1,column:11883},end:{line:1,column:11884}},loc:{start:{line:1,column:11886},end:{line:1,column:11895}},line:1},"115":{name:"(anonymous_115)",decl:{start:{line:1,column:11900},end:{line:1,column:11901}},loc:{start:{line:1,column:11909},end:{line:1,column:11930}},line:1},"116":{name:"(anonymous_116)",decl:{start:{line:1,column:11916},end:{line:1,column:11917}},loc:{start:{line:1,column:11919},end:{line:1,column:11929}},line:1},"117":{name:"un",decl:{start:{line:1,column:11940},end:{line:1,column:11942}},loc:{start:{line:1,column:11949},end:{line:1,column:12053}},line:1},"118":{name:"pn",decl:{start:{line:1,column:12111},end:{line:1,column:12113}},loc:{start:{line:1,column:12118},end:{line:1,column:12480}},line:1},"119":{name:"(anonymous_119)",decl:{start:{line:1,column:12271},end:{line:1,column:12272}},loc:{start:{line:1,column:12274},end:{line:1,column:12478}},line:1},"120":{name:"(anonymous_120)",decl:{start:{line:1,column:12361},end:{line:1,column:12362}},loc:{start:{line:1,column:12372},end:{line:1,column:12475}},line:1},"121":{name:"(anonymous_121)",decl:{start:{line:1,column:12431},end:{line:1,column:12432}},loc:{start:{line:1,column:12434},end:{line:1,column:12471}},line:1},"122":{name:"Oi",decl:{start:{line:1,column:12489},end:{line:1,column:12491}},loc:{start:{line:1,column:12496},end:{line:1,column:12646}},line:1},"123":{name:"(anonymous_123)",decl:{start:{line:1,column:12609},end:{line:1,column:12610}},loc:{start:{line:1,column:12612},end:{line:1,column:12625}},line:1},"124":{name:"Ai",decl:{start:{line:1,column:12655},end:{line:1,column:12657}},loc:{start:{line:1,column:12660},end:{line:1,column:12719}},line:1},"125":{name:"(anonymous_125)",decl:{start:{line:1,column:12727},end:{line:1,column:12728}},loc:{start:{line:1,column:12737},end:{line:1,column:12816}},line:1},"126":{name:"(anonymous_126)",decl:{start:{line:1,column:12763},end:{line:1,column:12764}},loc:{start:{line:1,column:12774},end:{line:1,column:12786}},line:1},"127":{name:"Li",decl:{start:{line:1,column:12829},end:{line:1,column:12831}},loc:{start:{line:1,column:12836},end:{line:1,column:12928}},line:1},"128":{name:"(anonymous_128)",decl:{start:{line:1,column:12858},end:{line:1,column:12859}},loc:{start:{line:1,column:12872},end:{line:1,column:12927}},line:1},"129":{name:"(anonymous_129)",decl:{start:{line:1,column:12901},end:{line:1,column:12902}},loc:{start:{line:1,column:12905},end:{line:1,column:12924}},line:1},"130":{name:"mn",decl:{start:{line:1,column:12937},end:{line:1,column:12939}},loc:{start:{line:1,column:12944},end:{line:1,column:13039}},line:1},"131":{name:"(anonymous_131)",decl:{start:{line:1,column:12958},end:{line:1,column:12959}},loc:{start:{line:1,column:12972},end:{line:1,column:13038}},line:1},"132":{name:"(anonymous_132)",decl:{start:{line:1,column:13046},end:{line:1,column:13047}},loc:{start:{line:1,column:13049},end:{line:1,column:13094}},line:1},"133":{name:"(anonymous_133)",decl:{start:{line:1,column:13097},end:{line:1,column:13098}},loc:{start:{line:1,column:13106},end:{line:1,column:13139}},line:1},"134":{name:"(anonymous_134)",decl:{start:{line:1,column:13143},end:{line:1,column:13144}},loc:{start:{line:1,column:13154},end:{line:1,column:13201}},line:1},"135":{name:"Ri",decl:{start:{line:1,column:13211},end:{line:1,column:13213}},loc:{start:{line:1,column:13220},end:{line:1,column:13791}},line:1},"136":{name:"(anonymous_136)",decl:{start:{line:1,column:13538},end:{line:1,column:13539}},loc:{start:{line:1,column:13541},end:{line:1,column:13554}},line:1},"137":{name:"(anonymous_137)",decl:{start:{line:1,column:13708},end:{line:1,column:13709}},loc:{start:{line:1,column:13711},end:{line:1,column:13724}},line:1},"138":{name:"Ei",decl:{start:{line:1,column:13800},end:{line:1,column:13802}},loc:{start:{line:1,column:13805},end:{line:1,column:14024}},line:1},"139":{name:"(anonymous_139)",decl:{start:{line:1,column:14031},end:{line:1,column:14032}},loc:{start:{line:1,column:14034},end:{line:1,column:14046}},line:1},"140":{name:"(anonymous_140)",decl:{start:{line:1,column:14050},end:{line:1,column:14051}},loc:{start:{line:1,column:14059},end:{line:1,column:14103}},line:1},"141":{name:"(anonymous_141)",decl:{start:{line:1,column:14107},end:{line:1,column:14108}},loc:{start:{line:1,column:14116},end:{line:1,column:14155}},line:1},"142":{name:"(anonymous_142)",decl:{start:{line:1,column:14167},end:{line:1,column:14168}},loc:{start:{line:1,column:14170},end:{line:1,column:14171}},line:1},"143":{name:"(anonymous_143)",decl:{start:{line:1,column:14183},end:{line:1,column:14184}},loc:{start:{line:1,column:14186},end:{line:1,column:14189}},line:1},"144":{name:"(anonymous_144)",decl:{start:{line:1,column:14202},end:{line:1,column:14203}},loc:{start:{line:1,column:14205},end:{line:1,column:14213}},line:1},"145":{name:"(anonymous_145)",decl:{start:{line:1,column:14228},end:{line:1,column:14229}},loc:{start:{line:1,column:14231},end:{line:1,column:14265}},line:1},"146":{name:"(anonymous_146)",decl:{start:{line:1,column:14278},end:{line:1,column:14279}},loc:{start:{line:1,column:14281},end:{line:1,column:14286}},line:1},"147":{name:"(anonymous_147)",decl:{start:{line:1,column:14300},end:{line:1,column:14301}},loc:{start:{line:1,column:14303},end:{line:1,column:14315}},line:1},"148":{name:"(anonymous_148)",decl:{start:{line:1,column:14331},end:{line:1,column:14332}},loc:{start:{line:1,column:14334},end:{line:1,column:14370}},line:1},"149":{name:"(anonymous_149)",decl:{start:{line:1,column:14383},end:{line:1,column:14384}},loc:{start:{line:1,column:14386},end:{line:1,column:14393}},line:1},"150":{name:"(anonymous_150)",decl:{start:{line:1,column:14407},end:{line:1,column:14408}},loc:{start:{line:1,column:14410},end:{line:1,column:14427}},line:1},"151":{name:"(anonymous_151)",decl:{start:{line:1,column:14443},end:{line:1,column:14444}},loc:{start:{line:1,column:14446},end:{line:1,column:14487}},line:1},"152":{name:"(anonymous_152)",decl:{start:{line:1,column:14500},end:{line:1,column:14501}},loc:{start:{line:1,column:14503},end:{line:1,column:14512}},line:1},"153":{name:"(anonymous_153)",decl:{start:{line:1,column:14526},end:{line:1,column:14527}},loc:{start:{line:1,column:14529},end:{line:1,column:14545}},line:1},"154":{name:"(anonymous_154)",decl:{start:{line:1,column:14561},end:{line:1,column:14562}},loc:{start:{line:1,column:14564},end:{line:1,column:14608}},line:1},"155":{name:"(anonymous_155)",decl:{start:{line:1,column:14620},end:{line:1,column:14621}},loc:{start:{line:1,column:14623},end:{line:1,column:14639}},line:1},"156":{name:"(anonymous_156)",decl:{start:{line:1,column:14652},end:{line:1,column:14653}},loc:{start:{line:1,column:14655},end:{line:1,column:14668}},line:1},"157":{name:"(anonymous_157)",decl:{start:{line:1,column:14683},end:{line:1,column:14684}},loc:{start:{line:1,column:14686},end:{line:1,column:14707}},line:1},"158":{name:"(anonymous_158)",decl:{start:{line:1,column:14719},end:{line:1,column:14720}},loc:{start:{line:1,column:14722},end:{line:1,column:14750}},line:1},"159":{name:"(anonymous_159)",decl:{start:{line:1,column:14763},end:{line:1,column:14764}},loc:{start:{line:1,column:14766},end:{line:1,column:14794}},line:1},"160":{name:"(anonymous_160)",decl:{start:{line:1,column:14809},end:{line:1,column:14810}},loc:{start:{line:1,column:14812},end:{line:1,column:14882}},line:1},"161":{name:"(anonymous_161)",decl:{start:{line:1,column:14894},end:{line:1,column:14895}},loc:{start:{line:1,column:14897},end:{line:1,column:14925}},line:1},"162":{name:"(anonymous_162)",decl:{start:{line:1,column:14938},end:{line:1,column:14939}},loc:{start:{line:1,column:14941},end:{line:1,column:14962}},line:1},"163":{name:"(anonymous_163)",decl:{start:{line:1,column:14977},end:{line:1,column:14978}},loc:{start:{line:1,column:14980},end:{line:1,column:15043}},line:1},"164":{name:"(anonymous_164)",decl:{start:{line:1,column:15058},end:{line:1,column:15059}},loc:{start:{line:1,column:15061},end:{line:1,column:15082}},line:1},"165":{name:"(anonymous_165)",decl:{start:{line:1,column:15098},end:{line:1,column:15099}},loc:{start:{line:1,column:15101},end:{line:1,column:15122}},line:1},"166":{name:"(anonymous_166)",decl:{start:{line:1,column:15123},end:{line:1,column:15124}},loc:{start:{line:1,column:15142},end:{line:1,column:15210}},line:1},"167":{name:"(anonymous_167)",decl:{start:{line:1,column:15211},end:{line:1,column:15212}},loc:{start:{line:1,column:15224},end:{line:1,column:15260}},line:1},"168":{name:"(anonymous_168)",decl:{start:{line:1,column:15261},end:{line:1,column:15262}},loc:{start:{line:1,column:15275},end:{line:1,column:15317}},line:1},"169":{name:"(anonymous_169)",decl:{start:{line:1,column:15318},end:{line:1,column:15319}},loc:{start:{line:1,column:15334},end:{line:1,column:15432}},line:1},"170":{name:"(anonymous_170)",decl:{start:{line:1,column:15446},end:{line:1,column:15447}},loc:{start:{line:1,column:15449},end:{line:1,column:15472}},line:1},"171":{name:"(anonymous_171)",decl:{start:{line:1,column:15473},end:{line:1,column:15474}},loc:{start:{line:1,column:15489},end:{line:1,column:15627}},line:1},"172":{name:"(anonymous_172)",decl:{start:{line:1,column:15644},end:{line:1,column:15645}},loc:{start:{line:1,column:15647},end:{line:1,column:15705}},line:1},"173":{name:"Ii",decl:{start:{line:1,column:15716},end:{line:1,column:15718}},loc:{start:{line:1,column:15721},end:{line:1,column:15843}},line:1},"174":{name:"Fi",decl:{start:{line:1,column:15852},end:{line:1,column:15854}},loc:{start:{line:1,column:15857},end:{line:1,column:15883}},line:1},"175":{name:"yi",decl:{start:{line:1,column:15892},end:{line:1,column:15894}},loc:{start:{line:1,column:15897},end:{line:1,column:15959}},line:1},"176":{name:"Br",decl:{start:{line:1,column:16063},end:{line:1,column:16065}},loc:{start:{line:1,column:16068},end:{line:1,column:16722}},line:1},"177":{name:"(anonymous_177)",decl:{start:{line:1,column:16257},end:{line:1,column:16258}},loc:{start:{line:1,column:16260},end:{line:1,column:16304}},line:1},"178":{name:"(anonymous_178)",decl:{start:{line:1,column:16710},end:{line:1,column:16711}},loc:{start:{line:1,column:16713},end:{line:1,column:16716}},line:1},"179":{name:"Wr",decl:{start:{line:1,column:16731},end:{line:1,column:16733}},loc:{start:{line:1,column:16736},end:{line:1,column:16810}},line:1},"180":{name:"Nr",decl:{start:{line:1,column:16834},end:{line:1,column:16836}},loc:{start:{line:1,column:16841},end:{line:1,column:16943}},line:1},"181":{name:"Zt",decl:{start:{line:1,column:16952},end:{line:1,column:16954}},loc:{start:{line:1,column:16961},end:{line:1,column:16987}},line:1},"182":{name:"(anonymous_182)",decl:{start:{line:1,column:16995},end:{line:1,column:16996}},loc:{start:{line:1,column:17004},end:{line:1,column:17024}},line:1},"183":{name:"(anonymous_183)",decl:{start:{line:1,column:17025},end:{line:1,column:17026}},loc:{start:{line:1,column:17039},end:{line:1,column:17424}},line:1},"184":{name:"(anonymous_184)",decl:{start:{line:1,column:17425},end:{line:1,column:17426}},loc:{start:{line:1,column:17443},end:{line:1,column:17600}},line:1},"185":{name:"Vr",decl:{start:{line:1,column:17611},end:{line:1,column:17613}},loc:{start:{line:1,column:17618},end:{line:1,column:17744}},line:1},"186":{name:"Hr",decl:{start:{line:1,column:17776},end:{line:1,column:17778}},loc:{start:{line:1,column:17781},end:{line:1,column:18959}},line:1},"187":{name:"(anonymous_187)",decl:{start:{line:1,column:17959},end:{line:1,column:17960}},loc:{start:{line:1,column:17966},end:{line:1,column:17977}},line:1},"188":{name:"(anonymous_188)",decl:{start:{line:1,column:17988},end:{line:1,column:17989}},loc:{start:{line:1,column:17995},end:{line:1,column:18002}},line:1},"189":{name:"(anonymous_189)",decl:{start:{line:1,column:18653},end:{line:1,column:18654}},loc:{start:{line:1,column:18656},end:{line:1,column:18733}},line:1},"190":{name:"(anonymous_190)",decl:{start:{line:1,column:18745},end:{line:1,column:18746}},loc:{start:{line:1,column:18748},end:{line:1,column:18798}},line:1},"191":{name:"(anonymous_191)",decl:{start:{line:1,column:18880},end:{line:1,column:18881}},loc:{start:{line:1,column:18883},end:{line:1,column:18920}},line:1},"192":{name:"(anonymous_192)",decl:{start:{line:1,column:18932},end:{line:1,column:18933}},loc:{start:{line:1,column:18935},end:{line:1,column:18956}},line:1},"193":{name:"ce",decl:{start:{line:1,column:19018},end:{line:1,column:19020}},loc:{start:{line:1,column:19025},end:{line:1,column:19147}},line:1},"194":{name:"vi",decl:{start:{line:1,column:19156},end:{line:1,column:19158}},loc:{start:{line:1,column:19165},end:{line:1,column:19221}},line:1},"195":{name:"(anonymous_195)",decl:{start:{line:1,column:19234},end:{line:1,column:19235}},loc:{start:{line:1,column:19250},end:{line:1,column:20120}},line:1},"196":{name:"(anonymous_196)",decl:{start:{line:1,column:19404},end:{line:1,column:19405}},loc:{start:{line:1,column:19407},end:{line:1,column:19445}},line:1},"197":{name:"(anonymous_197)",decl:{start:{line:1,column:19695},end:{line:1,column:19696}},loc:{start:{line:1,column:19702},end:{line:1,column:19723}},line:1},"198":{name:"(anonymous_198)",decl:{start:{line:1,column:19746},end:{line:1,column:19747}},loc:{start:{line:1,column:19753},end:{line:1,column:19770}},line:1},"199":{name:"(anonymous_199)",decl:{start:{line:1,column:19787},end:{line:1,column:19788}},loc:{start:{line:1,column:19794},end:{line:1,column:19805}},line:1},"200":{name:"(anonymous_200)",decl:{start:{line:1,column:20120},end:{line:1,column:20121}},loc:{start:{line:1,column:20128},end:{line:1,column:20149}},line:1},"201":{name:"(anonymous_201)",decl:{start:{line:1,column:20149},end:{line:1,column:20150}},loc:{start:{line:1,column:20155},end:{line:1,column:20174}},line:1},"202":{name:"(anonymous_202)",decl:{start:{line:1,column:20174},end:{line:1,column:20175}},loc:{start:{line:1,column:20187},end:{line:1,column:20206}},line:1},"203":{name:"(anonymous_203)",decl:{start:{line:1,column:20206},end:{line:1,column:20207}},loc:{start:{line:1,column:20219},end:{line:1,column:20238}},line:1},"204":{name:"(anonymous_204)",decl:{start:{line:1,column:20238},end:{line:1,column:20239}},loc:{start:{line:1,column:20252},end:{line:1,column:20456}},line:1},"205":{name:"(anonymous_205)",decl:{start:{line:1,column:20366},end:{line:1,column:20367}},loc:{start:{line:1,column:20371},end:{line:1,column:20434}},line:1},"206":{name:"(anonymous_206)",decl:{start:{line:1,column:20435},end:{line:1,column:20436}},loc:{start:{line:1,column:20441},end:{line:1,column:20452}},line:1},"207":{name:"(anonymous_207)",decl:{start:{line:1,column:20456},end:{line:1,column:20457}},loc:{start:{line:1,column:20464},end:{line:1,column:20487}},line:1},"208":{name:"(anonymous_208)",decl:{start:{line:1,column:20475},end:{line:1,column:20476}},loc:{start:{line:1,column:20478},end:{line:1,column:20485}},line:1},"209":{name:"(anonymous_209)",decl:{start:{line:1,column:20511},end:{line:1,column:20512}},loc:{start:{line:1,column:20514},end:{line:1,column:20533}},line:1},"210":{name:"(anonymous_210)",decl:{start:{line:1,column:20545},end:{line:1,column:20546}},loc:{start:{line:1,column:20548},end:{line:1,column:20560}},line:1},"211":{name:"jr",decl:{start:{line:1,column:20658},end:{line:1,column:20660}},loc:{start:{line:1,column:20663},end:{line:1,column:20776}},line:1},"212":{name:"he",decl:{start:{line:1,column:20785},end:{line:1,column:20787}},loc:{start:{line:1,column:20798},end:{line:1,column:20875}},line:1},"213":{name:"_n",decl:{start:{line:1,column:20884},end:{line:1,column:20886}},loc:{start:{line:1,column:20895},end:{line:1,column:21308}},line:1},"214":{name:"St",decl:{start:{line:1,column:21317},end:{line:1,column:21319}},loc:{start:{line:1,column:21326},end:{line:1,column:21417}},line:1},"215":{name:"zi",decl:{start:{line:1,column:21426},end:{line:1,column:21428}},loc:{start:{line:1,column:21433},end:{line:1,column:21542}},line:1},"216":{name:"Ye",decl:{start:{line:1,column:21551},end:{line:1,column:21553}},loc:{start:{line:1,column:21562},end:{line:1,column:21580}},line:1},"217":{name:"Bi",decl:{start:{line:1,column:21589},end:{line:1,column:21591}},loc:{start:{line:1,column:21602},end:{line:1,column:23466}},line:1},"218":{name:"at",decl:{start:{line:1,column:23475},end:{line:1,column:23477}},loc:{start:{line:1,column:23484},end:{line:1,column:23564}},line:1},"219":{name:"ue",decl:{start:{line:1,column:23573},end:{line:1,column:23575}},loc:{start:{line:1,column:23580},end:{line:1,column:23664}},line:1},"220":{name:"ge",decl:{start:{line:1,column:23673},end:{line:1,column:23675}},loc:{start:{line:1,column:23678},end:{line:1,column:23691}},line:1},"221":{name:"yn",decl:{start:{line:1,column:23700},end:{line:1,column:23702}},loc:{start:{line:1,column:23713},end:{line:1,column:23888}},line:1},"222":{name:"vn",decl:{start:{line:1,column:23897},end:{line:1,column:23899}},loc:{start:{line:1,column:23908},end:{line:1,column:24029}},line:1},"223":{name:"Yr",decl:{start:{line:1,column:24038},end:{line:1,column:24040}},loc:{start:{line:1,column:24045},end:{line:1,column:24262}},line:1},"224":{name:"$r",decl:{start:{line:1,column:24271},end:{line:1,column:24273}},loc:{start:{line:1,column:24284},end:{line:1,column:24600}},line:1},"225":{name:"Ur",decl:{start:{line:1,column:24609},end:{line:1,column:24611}},loc:{start:{line:1,column:24616},end:{line:1,column:24711}},line:1},"226":{name:"wt",decl:{start:{line:1,column:24720},end:{line:1,column:24722}},loc:{start:{line:1,column:24738},end:{line:1,column:25096}},line:1},"227":{name:"Qt",decl:{start:{line:1,column:25105},end:{line:1,column:25107}},loc:{start:{line:1,column:25112},end:{line:1,column:25486}},line:1},"228":{name:"qr",decl:{start:{line:1,column:25616},end:{line:1,column:25618}},loc:{start:{line:1,column:25623},end:{line:1,column:25754}},line:1},"229":{name:"(anonymous_229)",decl:{start:{line:1,column:25761},end:{line:1,column:25762}},loc:{start:{line:1,column:25764},end:{line:1,column:25769}},line:1},"230":{name:"$e",decl:{start:{line:1,column:25779},end:{line:1,column:25781}},loc:{start:{line:1,column:25786},end:{line:1,column:25904}},line:1},"231":{name:"(anonymous_231)",decl:{start:{line:1,column:25833},end:{line:1,column:25834}},loc:{start:{line:1,column:25836},end:{line:1,column:25851}},line:1},"232":{name:"(anonymous_232)",decl:{start:{line:1,column:25852},end:{line:1,column:25853}},loc:{start:{line:1,column:25855},end:{line:1,column:25859}},line:1},"233":{name:"(anonymous_233)",decl:{start:{line:1,column:25860},end:{line:1,column:25861}},loc:{start:{line:1,column:25864},end:{line:1,column:25865}},line:1},"234":{name:"Wi",decl:{start:{line:1,column:25913},end:{line:1,column:25915}},loc:{start:{line:1,column:25918},end:{line:1,column:25972}},line:1},"235":{name:"Ct",decl:{start:{line:1,column:25981},end:{line:1,column:25983}},loc:{start:{line:1,column:25986},end:{line:1,column:26050}},line:1},"236":{name:"K",decl:{start:{line:1,column:26059},end:{line:1,column:26060}},loc:{start:{line:1,column:26063},end:{line:1,column:26132}},line:1},"237":{name:"j",decl:{start:{line:1,column:26141},end:{line:1,column:26142}},loc:{start:{line:1,column:26147},end:{line:1,column:26501}},line:1},"238":{name:"te",decl:{start:{line:1,column:26510},end:{line:1,column:26512}},loc:{start:{line:1,column:26521},end:{line:1,column:26721}},line:1},"239":{name:"Mn",decl:{start:{line:1,column:26730},end:{line:1,column:26732}},loc:{start:{line:1,column:26739},end:{line:1,column:26840}},line:1},"240":{name:"(anonymous_240)",decl:{start:{line:1,column:26777},end:{line:1,column:26778}},loc:{start:{line:1,column:26784},end:{line:1,column:26798}},line:1},"241":{name:"mt",decl:{start:{line:1,column:26849},end:{line:1,column:26851}},loc:{start:{line:1,column:26856},end:{line:1,column:26898}},line:1},"242":{name:"Ue",decl:{start:{line:1,column:26907},end:{line:1,column:26909}},loc:{start:{line:1,column:26934},end:{line:1,column:27535}},line:1},"243":{name:"(anonymous_243)",decl:{start:{line:1,column:26925},end:{line:1,column:26926}},loc:{start:{line:1,column:26929},end:{line:1,column:26933}},line:1},"244":{name:"(anonymous_244)",decl:{start:{line:1,column:27091},end:{line:1,column:27092}},loc:{start:{line:1,column:27094},end:{line:1,column:27112}},line:1},"245":{name:"(anonymous_245)",decl:{start:{line:1,column:27134},end:{line:1,column:27135}},loc:{start:{line:1,column:27153},end:{line:1,column:27206}},line:1},"246":{name:"(anonymous_246)",decl:{start:{line:1,column:27207},end:{line:1,column:27208}},loc:{start:{line:1,column:27215},end:{line:1,column:27247}},line:1},"247":{name:"(anonymous_247)",decl:{start:{line:1,column:27230},end:{line:1,column:27231}},loc:{start:{line:1,column:27234},end:{line:1,column:27245}},line:1},"248":{name:"(anonymous_248)",decl:{start:{line:1,column:27248},end:{line:1,column:27249}},loc:{start:{line:1,column:27277},end:{line:1,column:27334}},line:1},"249":{name:"(anonymous_249)",decl:{start:{line:1,column:27335},end:{line:1,column:27336}},loc:{start:{line:1,column:27351},end:{line:1,column:27388}},line:1},"250":{name:"(anonymous_250)",decl:{start:{line:1,column:27389},end:{line:1,column:27390}},loc:{start:{line:1,column:27397},end:{line:1,column:27423}},line:1},"251":{name:"(anonymous_251)",decl:{start:{line:1,column:27424},end:{line:1,column:27425}},loc:{start:{line:1,column:27434},end:{line:1,column:27448}},line:1},"252":{name:"(anonymous_252)",decl:{start:{line:1,column:27449},end:{line:1,column:27450}},loc:{start:{line:1,column:27459},end:{line:1,column:27532}},line:1},"253":{name:"Et",decl:{start:{line:1,column:27544},end:{line:1,column:27546}},loc:{start:{line:1,column:27555},end:{line:1,column:28144}},line:1},"254":{name:"(anonymous_254)",decl:{start:{line:1,column:27656},end:{line:1,column:27657}},loc:{start:{line:1,column:27659},end:{line:1,column:27670}},line:1},"255":{name:"(anonymous_255)",decl:{start:{line:1,column:27680},end:{line:1,column:27681}},loc:{start:{line:1,column:27683},end:{line:1,column:27706}},line:1},"256":{name:"(anonymous_256)",decl:{start:{line:1,column:27728},end:{line:1,column:27729}},loc:{start:{line:1,column:27747},end:{line:1,column:27782}},line:1},"257":{name:"(anonymous_257)",decl:{start:{line:1,column:27783},end:{line:1,column:27784}},loc:{start:{line:1,column:27793},end:{line:1,column:27823}},line:1},"258":{name:"(anonymous_258)",decl:{start:{line:1,column:27808},end:{line:1,column:27809}},loc:{start:{line:1,column:27812},end:{line:1,column:27821}},line:1},"259":{name:"(anonymous_259)",decl:{start:{line:1,column:27824},end:{line:1,column:27825}},loc:{start:{line:1,column:27853},end:{line:1,column:27978}},line:1},"260":{name:"(anonymous_260)",decl:{start:{line:1,column:27979},end:{line:1,column:27980}},loc:{start:{line:1,column:27995},end:{line:1,column:28029}},line:1},"261":{name:"(anonymous_261)",decl:{start:{line:1,column:28030},end:{line:1,column:28031}},loc:{start:{line:1,column:28038},end:{line:1,column:28063}},line:1},"262":{name:"(anonymous_262)",decl:{start:{line:1,column:28064},end:{line:1,column:28065}},loc:{start:{line:1,column:28073},end:{line:1,column:28100}},line:1},"263":{name:"(anonymous_263)",decl:{start:{line:1,column:28101},end:{line:1,column:28102}},loc:{start:{line:1,column:28111},end:{line:1,column:28141}},line:1},"264":{name:"Ni",decl:{start:{line:1,column:28153},end:{line:1,column:28155}},loc:{start:{line:1,column:28189},end:{line:1,column:28366}},line:1},"265":{name:"(anonymous_265)",decl:{start:{line:1,column:28333},end:{line:1,column:28334}},loc:{start:{line:1,column:28337},end:{line:1,column:28338}},line:1},"266":{name:"(anonymous_266)",decl:{start:{line:1,column:28359},end:{line:1,column:28360}},loc:{start:{line:1,column:28363},end:{line:1,column:28364}},line:1},"267":{name:"(anonymous_267)",decl:{start:{line:1,column:28373},end:{line:1,column:28374}},loc:{start:{line:1,column:28380},end:{line:1,column:28391}},line:1},"268":{name:"(anonymous_268)",decl:{start:{line:1,column:28395},end:{line:1,column:28396}},loc:{start:{line:1,column:28402},end:{line:1,column:28481}},line:1},"269":{name:"kn",decl:{start:{line:1,column:28491},end:{line:1,column:28493}},loc:{start:{line:1,column:28500},end:{line:1,column:28603}},line:1},"270":{name:"Zr",decl:{start:{line:1,column:28612},end:{line:1,column:28614}},loc:{start:{line:1,column:28621},end:{line:1,column:28809}},line:1},"271":{name:"Qr",decl:{start:{line:1,column:28818},end:{line:1,column:28820}},loc:{start:{line:1,column:28829},end:{line:1,column:29041}},line:1},"272":{name:"ta",decl:{start:{line:1,column:29050},end:{line:1,column:29052}},loc:{start:{line:1,column:29061},end:{line:1,column:29295}},line:1},"273":{name:"(anonymous_273)",decl:{start:{line:1,column:29210},end:{line:1,column:29211}},loc:{start:{line:1,column:29213},end:{line:1,column:29218}},line:1},"274":{name:"Sn",decl:{start:{line:1,column:29304},end:{line:1,column:29306}},loc:{start:{line:1,column:29313},end:{line:1,column:29336}},line:1},"275":{name:"(anonymous_275)",decl:{start:{line:1,column:29343},end:{line:1,column:29344}},loc:{start:{line:1,column:29350},end:{line:1,column:29392}},line:1},"276":{name:"ia",decl:{start:{line:1,column:29402},end:{line:1,column:29404}},loc:{start:{line:1,column:29415},end:{line:1,column:29583}},line:1},"277":{name:"Hi",decl:{start:{line:1,column:29592},end:{line:1,column:29594}},loc:{start:{line:1,column:29603},end:{line:1,column:29811}},line:1},"278":{name:"(anonymous_278)",decl:{start:{line:1,column:29796},end:{line:1,column:29797}},loc:{start:{line:1,column:29800},end:{line:1,column:29809}},line:1},"279":{name:"Qs",decl:{start:{line:1,column:29820},end:{line:1,column:29822}},loc:{start:{line:1,column:29833},end:{line:1,column:29867}},line:1},"280":{name:"sa",decl:{start:{line:1,column:29876},end:{line:1,column:29878}},loc:{start:{line:1,column:29885},end:{line:1,column:29962}},line:1},"281":{name:"na",decl:{start:{line:1,column:29971},end:{line:1,column:29973}},loc:{start:{line:1,column:29982},end:{line:1,column:30065}},line:1},"282":{name:"wn",decl:{start:{line:1,column:30074},end:{line:1,column:30076}},loc:{start:{line:1,column:30081},end:{line:1,column:30150}},line:1},"283":{name:"tn",decl:{start:{line:1,column:30159},end:{line:1,column:30161}},loc:{start:{line:1,column:30164},end:{line:1,column:30217}},line:1},"284":{name:"oa",decl:{start:{line:1,column:30226},end:{line:1,column:30228}},loc:{start:{line:1,column:30231},end:{line:1,column:30349}},line:1},"285":{name:"(anonymous_285)",decl:{start:{line:1,column:30296},end:{line:1,column:30297}},loc:{start:{line:1,column:30299},end:{line:1,column:30317}},line:1},"286":{name:"ji",decl:{start:{line:1,column:30358},end:{line:1,column:30360}},loc:{start:{line:1,column:30369},end:{line:1,column:30505}},line:1},"287":{name:"(anonymous_287)",decl:{start:{line:1,column:30537},end:{line:1,column:30538}},loc:{start:{line:1,column:30544},end:{line:1,column:30572}},line:1},"288":{name:"(anonymous_288)",decl:{start:{line:1,column:30576},end:{line:1,column:30577}},loc:{start:{line:1,column:30579},end:{line:1,column:30594}},line:1},"289":{name:"aa",decl:{start:{line:1,column:30604},end:{line:1,column:30606}},loc:{start:{line:1,column:30615},end:{line:1,column:30834}},line:1},"290":{name:"la",decl:{start:{line:1,column:30843},end:{line:1,column:30845}},loc:{start:{line:1,column:30852},end:{line:1,column:31096}},line:1},"291":{name:"ca",decl:{start:{line:1,column:31105},end:{line:1,column:31107}},loc:{start:{line:1,column:31118},end:{line:1,column:31347}},line:1},"292":{name:"ha",decl:{start:{line:1,column:31356},end:{line:1,column:31358}},loc:{start:{line:1,column:31367},end:{line:1,column:31611}},line:1},"293":{name:"Re",decl:{start:{line:1,column:31620},end:{line:1,column:31622}},loc:{start:{line:1,column:31629},end:{line:1,column:31663}},line:1},"294":{name:"da",decl:{start:{line:1,column:31672},end:{line:1,column:31674}},loc:{start:{line:1,column:31679},end:{line:1,column:31918}},line:1},"295":{name:"Pn",decl:{start:{line:1,column:31927},end:{line:1,column:31929}},loc:{start:{line:1,column:31940},end:{line:1,column:32257}},line:1},"296":{name:"(anonymous_296)",decl:{start:{line:1,column:31980},end:{line:1,column:31981}},loc:{start:{line:1,column:31983},end:{line:1,column:31990}},line:1},"297":{name:"Xe",decl:{start:{line:1,column:32266},end:{line:1,column:32268}},loc:{start:{line:1,column:32270},end:{line:1,column:32317}},line:1},"298":{name:"Ke",decl:{start:{line:1,column:32326},end:{line:1,column:32328}},loc:{start:{line:1,column:32331},end:{line:1,column:32412}},line:1},"299":{name:"Be",decl:{start:{line:1,column:32421},end:{line:1,column:32423}},loc:{start:{line:1,column:32430},end:{line:1,column:32535}},line:1},"300":{name:"(anonymous_300)",decl:{start:{line:1,column:32542},end:{line:1,column:32543}},loc:{start:{line:1,column:32545},end:{line:1,column:32597}},line:1},"301":{name:"fa",decl:{start:{line:1,column:32607},end:{line:1,column:32609}},loc:{start:{line:1,column:32614},end:{line:1,column:32648}},line:1},"302":{name:"Rt",decl:{start:{line:1,column:32696},end:{line:1,column:32698}},loc:{start:{line:1,column:32705},end:{line:1,column:32850}},line:1},"303":{name:"(anonymous_303)",decl:{start:{line:1,column:32857},end:{line:1,column:32858}},loc:{start:{line:1,column:32866},end:{line:1,column:32897}},line:1},"304":{name:"pa",decl:{start:{line:1,column:32907},end:{line:1,column:32909}},loc:{start:{line:1,column:32914},end:{line:1,column:33114}},line:1},"305":{name:"Pt",decl:{start:{line:1,column:33123},end:{line:1,column:33125}},loc:{start:{line:1,column:33130},end:{line:1,column:33482}},line:1},"306":{name:"ma",decl:{start:{line:1,column:33491},end:{line:1,column:33493}},loc:{start:{line:1,column:33500},end:{line:1,column:33858}},line:1},"307":{name:"(anonymous_307)",decl:{start:{line:1,column:33865},end:{line:1,column:33866}},loc:{start:{line:1,column:33868},end:{line:1,column:33887}},line:1},"308":{name:"Dn",decl:{start:{line:1,column:33897},end:{line:1,column:33899}},loc:{start:{line:1,column:33908},end:{line:1,column:34415}},line:1},"309":{name:"Yi",decl:{start:{line:1,column:34424},end:{line:1,column:34426}},loc:{start:{line:1,column:34433},end:{line:1,column:34797}},line:1},"310":{name:"(anonymous_310)",decl:{start:{line:1,column:34805},end:{line:1,column:34806}},loc:{start:{line:1,column:34815},end:{line:1,column:34972}},line:1},"311":{name:"(anonymous_311)",decl:{start:{line:1,column:34836},end:{line:1,column:34837}},loc:{start:{line:1,column:34849},end:{line:1,column:34865}},line:1},"312":{name:"$i",decl:{start:{line:1,column:34985},end:{line:1,column:34987}},loc:{start:{line:1,column:34992},end:{line:1,column:35063}},line:1},"313":{name:"vt",decl:{start:{line:1,column:35072},end:{line:1,column:35074}},loc:{start:{line:1,column:35083},end:{line:1,column:35128}},line:1},"314":{name:"An",decl:{start:{line:1,column:35137},end:{line:1,column:35139}},loc:{start:{line:1,column:35148},end:{line:1,column:35239}},line:1},"315":{name:"Tn",decl:{start:{line:1,column:35248},end:{line:1,column:35250}},loc:{start:{line:1,column:35259},end:{line:1,column:35385}},line:1},"316":{name:"(anonymous_316)",decl:{start:{line:1,column:35392},end:{line:1,column:35393}},loc:{start:{line:1,column:35405},end:{line:1,column:35566}},line:1},"317":{name:"(anonymous_317)",decl:{start:{line:1,column:35413},end:{line:1,column:35414}},loc:{start:{line:1,column:35417},end:{line:1,column:35433}},line:1},"318":{name:"(anonymous_318)",decl:{start:{line:1,column:35434},end:{line:1,column:35435}},loc:{start:{line:1,column:35445},end:{line:1,column:35450}},line:1},"319":{name:"(anonymous_319)",decl:{start:{line:1,column:35451},end:{line:1,column:35452}},loc:{start:{line:1,column:35463},end:{line:1,column:35513}},line:1},"320":{name:"(anonymous_320)",decl:{start:{line:1,column:35514},end:{line:1,column:35515}},loc:{start:{line:1,column:35524},end:{line:1,column:35536}},line:1},"321":{name:"(anonymous_321)",decl:{start:{line:1,column:35537},end:{line:1,column:35538}},loc:{start:{line:1,column:35552},end:{line:1,column:35564}},line:1},"322":{name:"(anonymous_322)",decl:{start:{line:1,column:35570},end:{line:1,column:35571}},loc:{start:{line:1,column:35580},end:{line:1,column:35690}},line:1},"323":{name:"(anonymous_323)",decl:{start:{line:1,column:35588},end:{line:1,column:35589}},loc:{start:{line:1,column:35592},end:{line:1,column:35602}},line:1},"324":{name:"(anonymous_324)",decl:{start:{line:1,column:35603},end:{line:1,column:35604}},loc:{start:{line:1,column:35614},end:{line:1,column:35616}},line:1},"325":{name:"(anonymous_325)",decl:{start:{line:1,column:35617},end:{line:1,column:35618}},loc:{start:{line:1,column:35629},end:{line:1,column:35639}},line:1},"326":{name:"(anonymous_326)",decl:{start:{line:1,column:35640},end:{line:1,column:35641}},loc:{start:{line:1,column:35650},end:{line:1,column:35662}},line:1},"327":{name:"(anonymous_327)",decl:{start:{line:1,column:35663},end:{line:1,column:35664}},loc:{start:{line:1,column:35678},end:{line:1,column:35688}},line:1},"328":{name:"Ft",decl:{start:{line:1,column:35700},end:{line:1,column:35702}},loc:{start:{line:1,column:35709},end:{line:1,column:35732}},line:1},"329":{name:"Ui",decl:{start:{line:1,column:35741},end:{line:1,column:35743}},loc:{start:{line:1,column:35748},end:{line:1,column:35934}},line:1},"330":{name:"Xi",decl:{start:{line:1,column:35943},end:{line:1,column:35945}},loc:{start:{line:1,column:35950},end:{line:1,column:36042}},line:1},"331":{name:"Ln",decl:{start:{line:1,column:36051},end:{line:1,column:36053}},loc:{start:{line:1,column:36056},end:{line:1,column:36159}},line:1},"332":{name:"(anonymous_332)",decl:{start:{line:1,column:36132},end:{line:1,column:36133}},loc:{start:{line:1,column:36139},end:{line:1,column:36142}},line:1},"333":{name:"(anonymous_333)",decl:{start:{line:1,column:36153},end:{line:1,column:36154}},loc:{start:{line:1,column:36156},end:{line:1,column:36157}},line:1},"334":{name:"en",decl:{start:{line:1,column:36168},end:{line:1,column:36170}},loc:{start:{line:1,column:36210},end:{line:1,column:36267}},line:1},"335":{name:"_a",decl:{start:{line:1,column:36276},end:{line:1,column:36278}},loc:{start:{line:1,column:36285},end:{line:1,column:36519}},line:1},"336":{name:"Ki",decl:{start:{line:1,column:36528},end:{line:1,column:36530}},loc:{start:{line:1,column:36537},end:{line:1,column:37044}},line:1},"337":{name:"(anonymous_337)",decl:{start:{line:1,column:36703},end:{line:1,column:36704}},loc:{start:{line:1,column:36707},end:{line:1,column:36727}},line:1},"338":{name:"(anonymous_338)",decl:{start:{line:1,column:36730},end:{line:1,column:36731}},loc:{start:{line:1,column:36734},end:{line:1,column:36754}},line:1},"339":{name:"(anonymous_339)",decl:{start:{line:1,column:36757},end:{line:1,column:36758}},loc:{start:{line:1,column:36761},end:{line:1,column:36767}},line:1},"340":{name:"(anonymous_340)",decl:{start:{line:1,column:36770},end:{line:1,column:36771}},loc:{start:{line:1,column:36774},end:{line:1,column:36781}},line:1},"341":{name:"qi",decl:{start:{line:1,column:37053},end:{line:1,column:37055}},loc:{start:{line:1,column:37060},end:{line:1,column:37169}},line:1},"342":{name:"ya",decl:{start:{line:1,column:37178},end:{line:1,column:37180}},loc:{start:{line:1,column:37189},end:{line:1,column:37333}},line:1},"343":{name:"va",decl:{start:{line:1,column:37342},end:{line:1,column:37344}},loc:{start:{line:1,column:37353},end:{line:1,column:37585}},line:1},"344":{name:"Rn",decl:{start:{line:1,column:37594},end:{line:1,column:37596}},loc:{start:{line:1,column:37601},end:{line:1,column:37837}},line:1},"345":{name:"sn",decl:{start:{line:1,column:37846},end:{line:1,column:37848}},loc:{start:{line:1,column:37857},end:{line:1,column:37900}},line:1},"346":{name:"Ma",decl:{start:{line:1,column:37909},end:{line:1,column:37911}},loc:{start:{line:1,column:37920},end:{line:1,column:38458}},line:1},"347":{name:"u",decl:{start:{line:1,column:38052},end:{line:1,column:38053}},loc:{start:{line:1,column:38062},end:{line:1,column:38203}},line:1},"348":{name:"nn",decl:{start:{line:1,column:38467},end:{line:1,column:38469}},loc:{start:{line:1,column:38472},end:{line:1,column:38693}},line:1},"349":{name:"ka",decl:{start:{line:1,column:38702},end:{line:1,column:38704}},loc:{start:{line:1,column:38709},end:{line:1,column:38855}},line:1},"350":{name:"(anonymous_350)",decl:{start:{line:1,column:38736},end:{line:1,column:38737}},loc:{start:{line:1,column:38749},end:{line:1,column:38805}},line:1},"351":{name:"Ee",decl:{start:{line:1,column:38864},end:{line:1,column:38866}},loc:{start:{line:1,column:38873},end:{line:1,column:38906}},line:1},"352":{name:"Sa",decl:{start:{line:1,column:38915},end:{line:1,column:38917}},loc:{start:{line:1,column:38922},end:{line:1,column:39048}},line:1},"353":{name:"Gi",decl:{start:{line:1,column:39057},end:{line:1,column:39059}},loc:{start:{line:1,column:39064},end:{line:1,column:39353}},line:1},"354":{name:"(anonymous_354)",decl:{start:{line:1,column:39366},end:{line:1,column:39367}},loc:{start:{line:1,column:39379},end:{line:1,column:39459}},line:1},"355":{name:"(anonymous_355)",decl:{start:{line:1,column:39459},end:{line:1,column:39460}},loc:{start:{line:1,column:39475},end:{line:1,column:39600}},line:1},"356":{name:"(anonymous_356)",decl:{start:{line:1,column:39520},end:{line:1,column:39521}},loc:{start:{line:1,column:39523},end:{line:1,column:39598}},line:1},"357":{name:"(anonymous_357)",decl:{start:{line:1,column:39600},end:{line:1,column:39601}},loc:{start:{line:1,column:39610},end:{line:1,column:39746}},line:1},"358":{name:"(anonymous_358)",decl:{start:{line:1,column:39673},end:{line:1,column:39674}},loc:{start:{line:1,column:39677},end:{line:1,column:39743}},line:1},"359":{name:"(anonymous_359)",decl:{start:{line:1,column:39746},end:{line:1,column:39747}},loc:{start:{line:1,column:39767},end:{line:1,column:40168}},line:1},"360":{name:"(anonymous_360)",decl:{start:{line:1,column:39797},end:{line:1,column:39798}},loc:{start:{line:1,column:39804},end:{line:1,column:40123}},line:1},"361":{name:"(anonymous_361)",decl:{start:{line:1,column:40168},end:{line:1,column:40169}},loc:{start:{line:1,column:40180},end:{line:1,column:40307}},line:1},"362":{name:"(anonymous_362)",decl:{start:{line:1,column:40307},end:{line:1,column:40308}},loc:{start:{line:1,column:40320},end:{line:1,column:40360}},line:1},"363":{name:"(anonymous_363)",decl:{start:{line:1,column:40360},end:{line:1,column:40361}},loc:{start:{line:1,column:40368},end:{line:1,column:40419}},line:1},"364":{name:"(anonymous_364)",decl:{start:{line:1,column:40419},end:{line:1,column:40420}},loc:{start:{line:1,column:40425},end:{line:1,column:40466}},line:1},"365":{name:"(anonymous_365)",decl:{start:{line:1,column:40466},end:{line:1,column:40467}},loc:{start:{line:1,column:40474},end:{line:1,column:40614}},line:1},"366":{name:"(anonymous_366)",decl:{start:{line:1,column:40563},end:{line:1,column:40564}},loc:{start:{line:1,column:40570},end:{line:1,column:40593}},line:1},"367":{name:"(anonymous_367)",decl:{start:{line:1,column:40614},end:{line:1,column:40615}},loc:{start:{line:1,column:40624},end:{line:1,column:40719}},line:1},"368":{name:"(anonymous_368)",decl:{start:{line:1,column:40719},end:{line:1,column:40720}},loc:{start:{line:1,column:40726},end:{line:1,column:40889}},line:1},"369":{name:"(anonymous_369)",decl:{start:{line:1,column:40889},end:{line:1,column:40890}},loc:{start:{line:1,column:40898},end:{line:1,column:40929}},line:1},"370":{name:"(anonymous_370)",decl:{start:{line:1,column:40962},end:{line:1,column:40963}},loc:{start:{line:1,column:40976},end:{line:1,column:40993}},line:1},"371":{name:"(anonymous_371)",decl:{start:{line:1,column:40994},end:{line:1,column:40995}},loc:{start:{line:1,column:41006},end:{line:1,column:41087}},line:1},"372":{name:"(anonymous_372)",decl:{start:{line:1,column:41088},end:{line:1,column:41089}},loc:{start:{line:1,column:41101},end:{line:1,column:41119}},line:1},"373":{name:"(anonymous_373)",decl:{start:{line:1,column:41130},end:{line:1,column:41131}},loc:{start:{line:1,column:41150},end:{line:1,column:41490}},line:1},"374":{name:"(anonymous_374)",decl:{start:{line:1,column:41490},end:{line:1,column:41491}},loc:{start:{line:1,column:41498},end:{line:1,column:41519}},line:1},"375":{name:"(anonymous_375)",decl:{start:{line:1,column:41519},end:{line:1,column:41520}},loc:{start:{line:1,column:41532},end:{line:1,column:41792}},line:1},"376":{name:"(anonymous_376)",decl:{start:{line:1,column:41792},end:{line:1,column:41793}},loc:{start:{line:1,column:41800},end:{line:1,column:41872}},line:1},"377":{name:"(anonymous_377)",decl:{start:{line:1,column:41872},end:{line:1,column:41873}},loc:{start:{line:1,column:41879},end:{line:1,column:42188}},line:1},"378":{name:"(anonymous_378)",decl:{start:{line:1,column:42188},end:{line:1,column:42189}},loc:{start:{line:1,column:42194},end:{line:1,column:42288}},line:1},"379":{name:"(anonymous_379)",decl:{start:{line:1,column:42256},end:{line:1,column:42257}},loc:{start:{line:1,column:42263},end:{line:1,column:42286}},line:1},"380":{name:"(anonymous_380)",decl:{start:{line:1,column:42288},end:{line:1,column:42289}},loc:{start:{line:1,column:42298},end:{line:1,column:42377}},line:1},"381":{name:"(anonymous_381)",decl:{start:{line:1,column:42388},end:{line:1,column:42389}},loc:{start:{line:1,column:42404},end:{line:1,column:42462}},line:1},"382":{name:"(anonymous_382)",decl:{start:{line:1,column:42462},end:{line:1,column:42463}},loc:{start:{line:1,column:42474},end:{line:1,column:42728}},line:1},"383":{name:"(anonymous_383)",decl:{start:{line:1,column:42579},end:{line:1,column:42580}},loc:{start:{line:1,column:42582},end:{line:1,column:42726}},line:1},"384":{name:"(anonymous_384)",decl:{start:{line:1,column:42689},end:{line:1,column:42690}},loc:{start:{line:1,column:42692},end:{line:1,column:42724}},line:1},"385":{name:"(anonymous_385)",decl:{start:{line:1,column:42728},end:{line:1,column:42729}},loc:{start:{line:1,column:42748},end:{line:1,column:42903}},line:1},"386":{name:"(anonymous_386)",decl:{start:{line:1,column:42875},end:{line:1,column:42876}},loc:{start:{line:1,column:42879},end:{line:1,column:42892}},line:1},"387":{name:"(anonymous_387)",decl:{start:{line:1,column:42893},end:{line:1,column:42894}},loc:{start:{line:1,column:42897},end:{line:1,column:42899}},line:1},"388":{name:"(anonymous_388)",decl:{start:{line:1,column:42903},end:{line:1,column:42904}},loc:{start:{line:1,column:42925},end:{line:1,column:43325}},line:1},"389":{name:"(anonymous_389)",decl:{start:{line:1,column:43325},end:{line:1,column:43326}},loc:{start:{line:1,column:43336},end:{line:1,column:43471}},line:1},"390":{name:"Ca",decl:{start:{line:1,column:43482},end:{line:1,column:43484}},loc:{start:{line:1,column:43489},end:{line:1,column:43612}},line:1},"391":{name:"Pa",decl:{start:{line:1,column:43621},end:{line:1,column:43623}},loc:{start:{line:1,column:43628},end:{line:1,column:43766}},line:1},"392":{name:"In",decl:{start:{line:1,column:43775},end:{line:1,column:43777}},loc:{start:{line:1,column:43782},end:{line:1,column:43890}},line:1},"393":{name:"Da",decl:{start:{line:1,column:43899},end:{line:1,column:43901}},loc:{start:{line:1,column:43908},end:{line:1,column:44010}},line:1},"394":{name:"Oa",decl:{start:{line:1,column:44019},end:{line:1,column:44021}},loc:{start:{line:1,column:44024},end:{line:1,column:44147}},line:1},"395":{name:"Io",decl:{start:{line:1,column:44156},end:{line:1,column:44158}},loc:{start:{line:1,column:44163},end:{line:1,column:44262}},line:1},"396":{name:"Fn",decl:{start:{line:1,column:44271},end:{line:1,column:44273}},loc:{start:{line:1,column:44285},end:{line:1,column:44505}},line:1},"397":{name:"Aa",decl:{start:{line:1,column:44514},end:{line:1,column:44516}},loc:{start:{line:1,column:44521},end:{line:1,column:44703}},line:1},"398":{name:"Ji",decl:{start:{line:1,column:44712},end:{line:1,column:44714}},loc:{start:{line:1,column:44719},end:{line:1,column:44786}},line:1},"399":{name:"Ta",decl:{start:{line:1,column:44795},end:{line:1,column:44797}},loc:{start:{line:1,column:44804},end:{line:1,column:44848}},line:1},"400":{name:"La",decl:{start:{line:1,column:44857},end:{line:1,column:44859}},loc:{start:{line:1,column:44862},end:{line:1,column:44998}},line:1},"401":{name:"Ra",decl:{start:{line:1,column:45007},end:{line:1,column:45009}},loc:{start:{line:1,column:45016},end:{line:1,column:45062}},line:1},"402":{name:"zn",decl:{start:{line:1,column:45071},end:{line:1,column:45073}},loc:{start:{line:1,column:45082},end:{line:1,column:45199}},line:1},"403":{name:"Bn",decl:{start:{line:1,column:45208},end:{line:1,column:45210}},loc:{start:{line:1,column:45215},end:{line:1,column:45551}},line:1},"404":{name:"Zi",decl:{start:{line:1,column:45560},end:{line:1,column:45562}},loc:{start:{line:1,column:45567},end:{line:1,column:45638}},line:1},"405":{name:"(anonymous_405)",decl:{start:{line:1,column:45612},end:{line:1,column:45613}},loc:{start:{line:1,column:45615},end:{line:1,column:45628}},line:1},"406":{name:"Ea",decl:{start:{line:1,column:45647},end:{line:1,column:45649}},loc:{start:{line:1,column:45654},end:{line:1,column:45748}},line:1},"407":{name:"Ia",decl:{start:{line:1,column:45757},end:{line:1,column:45759}},loc:{start:{line:1,column:45766},end:{line:1,column:45874}},line:1},"408":{name:"pe",decl:{start:{line:1,column:45883},end:{line:1,column:45885}},loc:{start:{line:1,column:45890},end:{line:1,column:46148}},line:1},"409":{name:"(anonymous_409)",decl:{start:{line:1,column:46155},end:{line:1,column:46156}},loc:{start:{line:1,column:46158},end:{line:1,column:46181}},line:1},"410":{name:"(anonymous_410)",decl:{start:{line:1,column:46185},end:{line:1,column:46186}},loc:{start:{line:1,column:46192},end:{line:1,column:46215}},line:1},"411":{name:"(anonymous_411)",decl:{start:{line:1,column:46219},end:{line:1,column:46220}},loc:{start:{line:1,column:46228},end:{line:1,column:46281}},line:1},"412":{name:"(anonymous_412)",decl:{start:{line:1,column:46286},end:{line:1,column:46287}},loc:{start:{line:1,column:46290},end:{line:1,column:55453}},line:1},"413":{name:"(anonymous_413)",decl:{start:{line:1,column:46377},end:{line:1,column:46378}},loc:{start:{line:1,column:46393},end:{line:1,column:46891}},line:1},"414":{name:"(anonymous_414)",decl:{start:{line:1,column:46891},end:{line:1,column:46892}},loc:{start:{line:1,column:46903},end:{line:1,column:47244}},line:1},"415":{name:"(anonymous_415)",decl:{start:{line:1,column:47244},end:{line:1,column:47245}},loc:{start:{line:1,column:47258},end:{line:1,column:47309}},line:1},"416":{name:"(anonymous_416)",decl:{start:{line:1,column:47309},end:{line:1,column:47310}},loc:{start:{line:1,column:47321},end:{line:1,column:47733}},line:1},"417":{name:"(anonymous_417)",decl:{start:{line:1,column:47380},end:{line:1,column:47381}},loc:{start:{line:1,column:47391},end:{line:1,column:47412}},line:1},"418":{name:"(anonymous_418)",decl:{start:{line:1,column:47733},end:{line:1,column:47734}},loc:{start:{line:1,column:47745},end:{line:1,column:47790}},line:1},"419":{name:"(anonymous_419)",decl:{start:{line:1,column:47790},end:{line:1,column:47791}},loc:{start:{line:1,column:47799},end:{line:1,column:47845}},line:1},"420":{name:"(anonymous_420)",decl:{start:{line:1,column:47845},end:{line:1,column:47846}},loc:{start:{line:1,column:47861},end:{line:1,column:47890}},line:1},"421":{name:"(anonymous_421)",decl:{start:{line:1,column:47890},end:{line:1,column:47891}},loc:{start:{line:1,column:47907},end:{line:1,column:47969}},line:1},"422":{name:"(anonymous_422)",decl:{start:{line:1,column:47969},end:{line:1,column:47970}},loc:{start:{line:1,column:47976},end:{line:1,column:47999}},line:1},"423":{name:"(anonymous_423)",decl:{start:{line:1,column:47999},end:{line:1,column:48000}},loc:{start:{line:1,column:48009},end:{line:1,column:48083}},line:1},"424":{name:"(anonymous_424)",decl:{start:{line:1,column:48083},end:{line:1,column:48084}},loc:{start:{line:1,column:48095},end:{line:1,column:48350}},line:1},"425":{name:"(anonymous_425)",decl:{start:{line:1,column:48350},end:{line:1,column:48351}},loc:{start:{line:1,column:48363},end:{line:1,column:48470}},line:1},"426":{name:"(anonymous_426)",decl:{start:{line:1,column:48470},end:{line:1,column:48471}},loc:{start:{line:1,column:48494},end:{line:1,column:48744}},line:1},"427":{name:"(anonymous_427)",decl:{start:{line:1,column:48744},end:{line:1,column:48745}},loc:{start:{line:1,column:48755},end:{line:1,column:48967}},line:1},"428":{name:"(anonymous_428)",decl:{start:{line:1,column:48967},end:{line:1,column:48968}},loc:{start:{line:1,column:48977},end:{line:1,column:49397}},line:1},"429":{name:"(anonymous_429)",decl:{start:{line:1,column:49282},end:{line:1,column:49283}},loc:{start:{line:1,column:49286},end:{line:1,column:49311}},line:1},"430":{name:"(anonymous_430)",decl:{start:{line:1,column:49397},end:{line:1,column:49398}},loc:{start:{line:1,column:49424},end:{line:1,column:49598}},line:1},"431":{name:"(anonymous_431)",decl:{start:{line:1,column:49598},end:{line:1,column:49599}},loc:{start:{line:1,column:49621},end:{line:1,column:49755}},line:1},"432":{name:"(anonymous_432)",decl:{start:{line:1,column:49755},end:{line:1,column:49756}},loc:{start:{line:1,column:49779},end:{line:1,column:49965}},line:1},"433":{name:"(anonymous_433)",decl:{start:{line:1,column:49965},end:{line:1,column:49966}},loc:{start:{line:1,column:49977},end:{line:1,column:50013}},line:1},"434":{name:"(anonymous_434)",decl:{start:{line:1,column:50013},end:{line:1,column:50014}},loc:{start:{line:1,column:50030},end:{line:1,column:50063}},line:1},"435":{name:"(anonymous_435)",decl:{start:{line:1,column:50063},end:{line:1,column:50064}},loc:{start:{line:1,column:50080},end:{line:1,column:50218}},line:1},"436":{name:"(anonymous_436)",decl:{start:{line:1,column:50218},end:{line:1,column:50219}},loc:{start:{line:1,column:50248},end:{line:1,column:50405}},line:1},"437":{name:"(anonymous_437)",decl:{start:{line:1,column:50405},end:{line:1,column:50406}},loc:{start:{line:1,column:50419},end:{line:1,column:50843}},line:1},"438":{name:"g",decl:{start:{line:1,column:50633},end:{line:1,column:50634}},loc:{start:{line:1,column:50636},end:{line:1,column:50690}},line:1},"439":{name:"(anonymous_439)",decl:{start:{line:1,column:50843},end:{line:1,column:50844}},loc:{start:{line:1,column:50864},end:{line:1,column:50974}},line:1},"440":{name:"(anonymous_440)",decl:{start:{line:1,column:50974},end:{line:1,column:50975}},loc:{start:{line:1,column:50990},end:{line:1,column:51000}},line:1},"441":{name:"(anonymous_441)",decl:{start:{line:1,column:51000},end:{line:1,column:51001}},loc:{start:{line:1,column:51019},end:{line:1,column:51181}},line:1},"442":{name:"(anonymous_442)",decl:{start:{line:1,column:51181},end:{line:1,column:51182}},loc:{start:{line:1,column:51191},end:{line:1,column:51318}},line:1},"443":{name:"(anonymous_443)",decl:{start:{line:1,column:51318},end:{line:1,column:51319}},loc:{start:{line:1,column:51327},end:{line:1,column:51329}},line:1},"444":{name:"(anonymous_444)",decl:{start:{line:1,column:51329},end:{line:1,column:51330}},loc:{start:{line:1,column:51335},end:{line:1,column:51657}},line:1},"445":{name:"(anonymous_445)",decl:{start:{line:1,column:51657},end:{line:1,column:51658}},loc:{start:{line:1,column:51670},end:{line:1,column:51818}},line:1},"446":{name:"(anonymous_446)",decl:{start:{line:1,column:51818},end:{line:1,column:51819}},loc:{start:{line:1,column:51835},end:{line:1,column:52206}},line:1},"447":{name:"(anonymous_447)",decl:{start:{line:1,column:52206},end:{line:1,column:52207}},loc:{start:{line:1,column:52237},end:{line:1,column:52303}},line:1},"448":{name:"(anonymous_448)",decl:{start:{line:1,column:52303},end:{line:1,column:52304}},loc:{start:{line:1,column:52333},end:{line:1,column:52398}},line:1},"449":{name:"(anonymous_449)",decl:{start:{line:1,column:52398},end:{line:1,column:52399}},loc:{start:{line:1,column:52437},end:{line:1,column:52849}},line:1},"450":{name:"(anonymous_450)",decl:{start:{line:1,column:52727},end:{line:1,column:52728}},loc:{start:{line:1,column:52731},end:{line:1,column:52753}},line:1},"451":{name:"(anonymous_451)",decl:{start:{line:1,column:52849},end:{line:1,column:52850}},loc:{start:{line:1,column:52874},end:{line:1,column:53226}},line:1},"452":{name:"(anonymous_452)",decl:{start:{line:1,column:53226},end:{line:1,column:53227}},loc:{start:{line:1,column:53245},end:{line:1,column:53329}},line:1},"453":{name:"(anonymous_453)",decl:{start:{line:1,column:53329},end:{line:1,column:53330}},loc:{start:{line:1,column:53348},end:{line:1,column:53397}},line:1},"454":{name:"(anonymous_454)",decl:{start:{line:1,column:53397},end:{line:1,column:53398}},loc:{start:{line:1,column:53419},end:{line:1,column:53619}},line:1},"455":{name:"(anonymous_455)",decl:{start:{line:1,column:53619},end:{line:1,column:53620}},loc:{start:{line:1,column:53641},end:{line:1,column:53708}},line:1},"456":{name:"(anonymous_456)",decl:{start:{line:1,column:53708},end:{line:1,column:53709}},loc:{start:{line:1,column:53734},end:{line:1,column:53792}},line:1},"457":{name:"(anonymous_457)",decl:{start:{line:1,column:53792},end:{line:1,column:53793}},loc:{start:{line:1,column:53810},end:{line:1,column:53930}},line:1},"458":{name:"(anonymous_458)",decl:{start:{line:1,column:53930},end:{line:1,column:53931}},loc:{start:{line:1,column:53953},end:{line:1,column:53986}},line:1},"459":{name:"(anonymous_459)",decl:{start:{line:1,column:53986},end:{line:1,column:53987}},loc:{start:{line:1,column:54006},end:{line:1,column:54039}},line:1},"460":{name:"(anonymous_460)",decl:{start:{line:1,column:54039},end:{line:1,column:54040}},loc:{start:{line:1,column:54065},end:{line:1,column:54137}},line:1},"461":{name:"(anonymous_461)",decl:{start:{line:1,column:54137},end:{line:1,column:54138}},loc:{start:{line:1,column:54160},end:{line:1,column:54232}},line:1},"462":{name:"(anonymous_462)",decl:{start:{line:1,column:54232},end:{line:1,column:54233}},loc:{start:{line:1,column:54250},end:{line:1,column:54483}},line:1},"463":{name:"(anonymous_463)",decl:{start:{line:1,column:54483},end:{line:1,column:54484}},loc:{start:{line:1,column:54508},end:{line:1,column:54739}},line:1},"464":{name:"(anonymous_464)",decl:{start:{line:1,column:54551},end:{line:1,column:54552}},loc:{start:{line:1,column:54554},end:{line:1,column:54605}},line:1},"465":{name:"(anonymous_465)",decl:{start:{line:1,column:54739},end:{line:1,column:54740}},loc:{start:{line:1,column:54762},end:{line:1,column:54764}},line:1},"466":{name:"(anonymous_466)",decl:{start:{line:1,column:54764},end:{line:1,column:54765}},loc:{start:{line:1,column:54784},end:{line:1,column:54893}},line:1},"467":{name:"(anonymous_467)",decl:{start:{line:1,column:54893},end:{line:1,column:54894}},loc:{start:{line:1,column:54901},end:{line:1,column:55021}},line:1},"468":{name:"(anonymous_468)",decl:{start:{line:1,column:55021},end:{line:1,column:55022}},loc:{start:{line:1,column:55034},end:{line:1,column:55124}},line:1},"469":{name:"(anonymous_469)",decl:{start:{line:1,column:55124},end:{line:1,column:55125}},loc:{start:{line:1,column:55136},end:{line:1,column:55202}},line:1},"470":{name:"(anonymous_470)",decl:{start:{line:1,column:55202},end:{line:1,column:55203}},loc:{start:{line:1,column:55216},end:{line:1,column:55253}},line:1},"471":{name:"(anonymous_471)",decl:{start:{line:1,column:55253},end:{line:1,column:55254}},loc:{start:{line:1,column:55271},end:{line:1,column:55375}},line:1},"472":{name:"(anonymous_472)",decl:{start:{line:1,column:55375},end:{line:1,column:55376}},loc:{start:{line:1,column:55391},end:{line:1,column:55443}},line:1},"473":{name:"za",decl:{start:{line:1,column:55466},end:{line:1,column:55468}},loc:{start:{line:1,column:55473},end:{line:1,column:55672}},line:1},"474":{name:"(anonymous_474)",decl:{start:{line:1,column:55638},end:{line:1,column:55639}},loc:{start:{line:1,column:55645},end:{line:1,column:55648}},line:1},"475":{name:"Ba",decl:{start:{line:1,column:55681},end:{line:1,column:55683}},loc:{start:{line:1,column:55686},end:{line:1,column:55950}},line:1},"476":{name:"(anonymous_476)",decl:{start:{line:1,column:55739},end:{line:1,column:55740}},loc:{start:{line:1,column:55743},end:{line:1,column:55813}},line:1},"477":{name:"Wa",decl:{start:{line:1,column:55959},end:{line:1,column:55961}},loc:{start:{line:1,column:55970},end:{line:1,column:56111}},line:1},"478":{name:"Na",decl:{start:{line:1,column:56120},end:{line:1,column:56122}},loc:{start:{line:1,column:56131},end:{line:1,column:56381}},line:1},"479":{name:"Va",decl:{start:{line:1,column:56390},end:{line:1,column:56392}},loc:{start:{line:1,column:56401},end:{line:1,column:56587}},line:1},"480":{name:"Fo",decl:{start:{line:1,column:56596},end:{line:1,column:56598}},loc:{start:{line:1,column:56607},end:{line:1,column:56657}},line:1},"481":{name:"Nn",decl:{start:{line:1,column:56666},end:{line:1,column:56668}},loc:{start:{line:1,column:56677},end:{line:1,column:56833}},line:1},"482":{name:"ts",decl:{start:{line:1,column:56842},end:{line:1,column:56844}},loc:{start:{line:1,column:56847},end:{line:1,column:56897}},line:1},"483":{name:"Ha",decl:{start:{line:1,column:56906},end:{line:1,column:56908}},loc:{start:{line:1,column:56915},end:{line:1,column:56975}},line:1},"484":{name:"ja",decl:{start:{line:1,column:56984},end:{line:1,column:56986}},loc:{start:{line:1,column:56989},end:{line:1,column:57175}},line:1},"485":{name:"Ya",decl:{start:{line:1,column:57184},end:{line:1,column:57186}},loc:{start:{line:1,column:57195},end:{line:1,column:57521}},line:1},"486":{name:"Vn",decl:{start:{line:1,column:57530},end:{line:1,column:57532}},loc:{start:{line:1,column:57541},end:{line:1,column:57591}},line:1},"487":{name:"$a",decl:{start:{line:1,column:57600},end:{line:1,column:57602}},loc:{start:{line:1,column:57609},end:{line:1,column:57635}},line:1},"488":{name:"Hn",decl:{start:{line:1,column:57644},end:{line:1,column:57646}},loc:{start:{line:1,column:57653},end:{line:1,column:57689}},line:1},"489":{name:"Ua",decl:{start:{line:1,column:57698},end:{line:1,column:57700}},loc:{start:{line:1,column:57723},end:{line:1,column:57765}},line:1},"490":{name:"(anonymous_490)",decl:{start:{line:1,column:57773},end:{line:1,column:57774}},loc:{start:{line:1,column:57777},end:{line:1,column:62787}},line:1},"491":{name:"(anonymous_491)",decl:{start:{line:1,column:58127},end:{line:1,column:58128}},loc:{start:{line:1,column:58154},end:{line:1,column:58174}},line:1},"492":{name:"(anonymous_492)",decl:{start:{line:1,column:58174},end:{line:1,column:58175}},loc:{start:{line:1,column:58197},end:{line:1,column:58217}},line:1},"493":{name:"(anonymous_493)",decl:{start:{line:1,column:58217},end:{line:1,column:58218}},loc:{start:{line:1,column:58241},end:{line:1,column:58462}},line:1},"494":{name:"(anonymous_494)",decl:{start:{line:1,column:58462},end:{line:1,column:58463}},loc:{start:{line:1,column:58492},end:{line:1,column:58636}},line:1},"495":{name:"(anonymous_495)",decl:{start:{line:1,column:58636},end:{line:1,column:58637}},loc:{start:{line:1,column:58652},end:{line:1,column:58662}},line:1},"496":{name:"(anonymous_496)",decl:{start:{line:1,column:58662},end:{line:1,column:58663}},loc:{start:{line:1,column:58681},end:{line:1,column:58882}},line:1},"497":{name:"(anonymous_497)",decl:{start:{line:1,column:58882},end:{line:1,column:58883}},loc:{start:{line:1,column:58894},end:{line:1,column:58997}},line:1},"498":{name:"(anonymous_498)",decl:{start:{line:1,column:58997},end:{line:1,column:58998}},loc:{start:{line:1,column:59006},end:{line:1,column:59076}},line:1},"499":{name:"(anonymous_499)",decl:{start:{line:1,column:59076},end:{line:1,column:59077}},loc:{start:{line:1,column:59099},end:{line:1,column:59816}},line:1},"500":{name:"(anonymous_500)",decl:{start:{line:1,column:59816},end:{line:1,column:59817}},loc:{start:{line:1,column:59831},end:{line:1,column:60295}},line:1},"501":{name:"(anonymous_501)",decl:{start:{line:1,column:59910},end:{line:1,column:59911}},loc:{start:{line:1,column:59913},end:{line:1,column:59941}},line:1},"502":{name:"(anonymous_502)",decl:{start:{line:1,column:60028},end:{line:1,column:60029}},loc:{start:{line:1,column:60031},end:{line:1,column:60120}},line:1},"503":{name:"(anonymous_503)",decl:{start:{line:1,column:60053},end:{line:1,column:60054}},loc:{start:{line:1,column:60056},end:{line:1,column:60069}},line:1},"504":{name:"(anonymous_504)",decl:{start:{line:1,column:60295},end:{line:1,column:60296}},loc:{start:{line:1,column:60312},end:{line:1,column:60353}},line:1},"505":{name:"(anonymous_505)",decl:{start:{line:1,column:60353},end:{line:1,column:60354}},loc:{start:{line:1,column:60368},end:{line:1,column:60399}},line:1},"506":{name:"(anonymous_506)",decl:{start:{line:1,column:60399},end:{line:1,column:60400}},loc:{start:{line:1,column:60428},end:{line:1,column:60539}},line:1},"507":{name:"(anonymous_507)",decl:{start:{line:1,column:60513},end:{line:1,column:60514}},loc:{start:{line:1,column:60516},end:{line:1,column:60529}},line:1},"508":{name:"(anonymous_508)",decl:{start:{line:1,column:60539},end:{line:1,column:60540}},loc:{start:{line:1,column:60549},end:{line:1,column:60722}},line:1},"509":{name:"(anonymous_509)",decl:{start:{line:1,column:60722},end:{line:1,column:60723}},loc:{start:{line:1,column:60743},end:{line:1,column:60827}},line:1},"510":{name:"(anonymous_510)",decl:{start:{line:1,column:60827},end:{line:1,column:60828}},loc:{start:{line:1,column:60838},end:{line:1,column:61178}},line:1},"511":{name:"(anonymous_511)",decl:{start:{line:1,column:61178},end:{line:1,column:61179}},loc:{start:{line:1,column:61205},end:{line:1,column:61977}},line:1},"512":{name:"(anonymous_512)",decl:{start:{line:1,column:61977},end:{line:1,column:61978}},loc:{start:{line:1,column:62006},end:{line:1,column:62630}},line:1},"513":{name:"(anonymous_513)",decl:{start:{line:1,column:62630},end:{line:1,column:62631}},loc:{start:{line:1,column:62636},end:{line:1,column:62777}},line:1},"514":{name:"(anonymous_514)",decl:{start:{line:1,column:62795},end:{line:1,column:62796}},loc:{start:{line:1,column:62799},end:{line:1,column:64806}},line:1},"515":{name:"(anonymous_515)",decl:{start:{line:1,column:63047},end:{line:1,column:63048}},loc:{start:{line:1,column:63059},end:{line:1,column:63107}},line:1},"516":{name:"(anonymous_516)",decl:{start:{line:1,column:63107},end:{line:1,column:63108}},loc:{start:{line:1,column:63134},end:{line:1,column:63267}},line:1},"517":{name:"(anonymous_517)",decl:{start:{line:1,column:63267},end:{line:1,column:63268}},loc:{start:{line:1,column:63290},end:{line:1,column:63441}},line:1},"518":{name:"(anonymous_518)",decl:{start:{line:1,column:63441},end:{line:1,column:63442}},loc:{start:{line:1,column:63465},end:{line:1,column:63625}},line:1},"519":{name:"(anonymous_519)",decl:{start:{line:1,column:63625},end:{line:1,column:63626}},loc:{start:{line:1,column:63641},end:{line:1,column:63779}},line:1},"520":{name:"(anonymous_520)",decl:{start:{line:1,column:63779},end:{line:1,column:63780}},loc:{start:{line:1,column:63798},end:{line:1,column:64017}},line:1},"521":{name:"(anonymous_521)",decl:{start:{line:1,column:64017},end:{line:1,column:64018}},loc:{start:{line:1,column:64026},end:{line:1,column:64091}},line:1},"522":{name:"(anonymous_522)",decl:{start:{line:1,column:64091},end:{line:1,column:64092}},loc:{start:{line:1,column:64114},end:{line:1,column:64575}},line:1},"523":{name:"(anonymous_523)",decl:{start:{line:1,column:64575},end:{line:1,column:64576}},loc:{start:{line:1,column:64605},end:{line:1,column:64796}},line:1},"524":{name:"qa",decl:{start:{line:1,column:64819},end:{line:1,column:64821}},loc:{start:{line:1,column:64828},end:{line:1,column:65158}},line:1},"525":{name:"(anonymous_525)",decl:{start:{line:1,column:64929},end:{line:1,column:64930}},loc:{start:{line:1,column:64938},end:{line:1,column:64974}},line:1},"526":{name:"(anonymous_526)",decl:{start:{line:1,column:64977},end:{line:1,column:64978}},loc:{start:{line:1,column:64986},end:{line:1,column:65023}},line:1},"527":{name:"(anonymous_527)",decl:{start:{line:1,column:65166},end:{line:1,column:65167}},loc:{start:{line:1,column:65170},end:{line:1,column:69985}},line:1},"528":{name:"(anonymous_528)",decl:{start:{line:1,column:65589},end:{line:1,column:65590}},loc:{start:{line:1,column:65592},end:{line:1,column:65605}},line:1},"529":{name:"(anonymous_529)",decl:{start:{line:1,column:65617},end:{line:1,column:65618}},loc:{start:{line:1,column:65620},end:{line:1,column:65696}},line:1},"530":{name:"(anonymous_530)",decl:{start:{line:1,column:65755},end:{line:1,column:65756}},loc:{start:{line:1,column:65772},end:{line:1,column:66285}},line:1},"531":{name:"(anonymous_531)",decl:{start:{line:1,column:65935},end:{line:1,column:65936}},loc:{start:{line:1,column:65942},end:{line:1,column:66280}},line:1},"532":{name:"(anonymous_532)",decl:{start:{line:1,column:66287},end:{line:1,column:66288}},loc:{start:{line:1,column:66301},end:{line:1,column:66357}},line:1},"533":{name:"(anonymous_533)",decl:{start:{line:1,column:66361},end:{line:1,column:66362}},loc:{start:{line:1,column:66377},end:{line:1,column:66505}},line:1},"534":{name:"(anonymous_534)",decl:{start:{line:1,column:66505},end:{line:1,column:66506}},loc:{start:{line:1,column:66517},end:{line:1,column:66519}},line:1},"535":{name:"(anonymous_535)",decl:{start:{line:1,column:66519},end:{line:1,column:66520}},loc:{start:{line:1,column:66529},end:{line:1,column:66743}},line:1},"536":{name:"(anonymous_536)",decl:{start:{line:1,column:66623},end:{line:1,column:66624}},loc:{start:{line:1,column:66626},end:{line:1,column:66631}},line:1},"537":{name:"(anonymous_537)",decl:{start:{line:1,column:66679},end:{line:1,column:66680}},loc:{start:{line:1,column:66682},end:{line:1,column:66693}},line:1},"538":{name:"(anonymous_538)",decl:{start:{line:1,column:66743},end:{line:1,column:66744}},loc:{start:{line:1,column:66757},end:{line:1,column:66794}},line:1},"539":{name:"(anonymous_539)",decl:{start:{line:1,column:66794},end:{line:1,column:66795}},loc:{start:{line:1,column:66813},end:{line:1,column:66852}},line:1},"540":{name:"(anonymous_540)",decl:{start:{line:1,column:66852},end:{line:1,column:66853}},loc:{start:{line:1,column:66873},end:{line:1,column:67180}},line:1},"541":{name:"(anonymous_541)",decl:{start:{line:1,column:67180},end:{line:1,column:67181}},loc:{start:{line:1,column:67189},end:{line:1,column:67910}},line:1},"542":{name:"(anonymous_542)",decl:{start:{line:1,column:67910},end:{line:1,column:67911}},loc:{start:{line:1,column:67929},end:{line:1,column:68152}},line:1},"543":{name:"(anonymous_543)",decl:{start:{line:1,column:68152},end:{line:1,column:68153}},loc:{start:{line:1,column:68175},end:{line:1,column:68753}},line:1},"544":{name:"(anonymous_544)",decl:{start:{line:1,column:68753},end:{line:1,column:68754}},loc:{start:{line:1,column:68769},end:{line:1,column:68945}},line:1},"545":{name:"(anonymous_545)",decl:{start:{line:1,column:68945},end:{line:1,column:68946}},loc:{start:{line:1,column:68970},end:{line:1,column:69042}},line:1},"546":{name:"(anonymous_546)",decl:{start:{line:1,column:69042},end:{line:1,column:69043}},loc:{start:{line:1,column:69061},end:{line:1,column:69185}},line:1},"547":{name:"(anonymous_547)",decl:{start:{line:1,column:69185},end:{line:1,column:69186}},loc:{start:{line:1,column:69205},end:{line:1,column:69528}},line:1},"548":{name:"(anonymous_548)",decl:{start:{line:1,column:69528},end:{line:1,column:69529}},loc:{start:{line:1,column:69543},end:{line:1,column:69676}},line:1},"549":{name:"(anonymous_549)",decl:{start:{line:1,column:69676},end:{line:1,column:69677}},loc:{start:{line:1,column:69699},end:{line:1,column:69797}},line:1},"550":{name:"(anonymous_550)",decl:{start:{line:1,column:69797},end:{line:1,column:69798}},loc:{start:{line:1,column:69814},end:{line:1,column:69874}},line:1},"551":{name:"(anonymous_551)",decl:{start:{line:1,column:69874},end:{line:1,column:69875}},loc:{start:{line:1,column:69905},end:{line:1,column:69975}},line:1},"552":{name:"(anonymous_552)",decl:{start:{line:1,column:69993},end:{line:1,column:69994}},loc:{start:{line:1,column:69997},end:{line:1,column:71921}},line:1},"553":{name:"(anonymous_553)",decl:{start:{line:1,column:70204},end:{line:1,column:70205}},loc:{start:{line:1,column:70216},end:{line:1,column:70291}},line:1},"554":{name:"(anonymous_554)",decl:{start:{line:1,column:70291},end:{line:1,column:70292}},loc:{start:{line:1,column:70300},end:{line:1,column:70765}},line:1},"555":{name:"(anonymous_555)",decl:{start:{line:1,column:70765},end:{line:1,column:70766}},loc:{start:{line:1,column:70788},end:{line:1,column:71536}},line:1},"556":{name:"(anonymous_556)",decl:{start:{line:1,column:71536},end:{line:1,column:71537}},loc:{start:{line:1,column:71552},end:{line:1,column:71802}},line:1},"557":{name:"(anonymous_557)",decl:{start:{line:1,column:71802},end:{line:1,column:71803}},loc:{start:{line:1,column:71808},end:{line:1,column:71911}},line:1},"558":{name:"(anonymous_558)",decl:{start:{line:1,column:71929},end:{line:1,column:71930}},loc:{start:{line:1,column:71933},end:{line:1,column:74588}},line:1},"559":{name:"(anonymous_559)",decl:{start:{line:1,column:72254},end:{line:1,column:72255}},loc:{start:{line:1,column:72271},end:{line:1,column:72621}},line:1},"560":{name:"(anonymous_560)",decl:{start:{line:1,column:72396},end:{line:1,column:72397}},loc:{start:{line:1,column:72403},end:{line:1,column:72610}},line:1},"561":{name:"(anonymous_561)",decl:{start:{line:1,column:72623},end:{line:1,column:72624}},loc:{start:{line:1,column:72637},end:{line:1,column:72693}},line:1},"562":{name:"(anonymous_562)",decl:{start:{line:1,column:72826},end:{line:1,column:72827}},loc:{start:{line:1,column:72842},end:{line:1,column:72902}},line:1},"563":{name:"(anonymous_563)",decl:{start:{line:1,column:72902},end:{line:1,column:72903}},loc:{start:{line:1,column:72921},end:{line:1,column:73047}},line:1},"564":{name:"(anonymous_564)",decl:{start:{line:1,column:73047},end:{line:1,column:73048}},loc:{start:{line:1,column:73071},end:{line:1,column:73102}},line:1},"565":{name:"(anonymous_565)",decl:{start:{line:1,column:73102},end:{line:1,column:73103}},loc:{start:{line:1,column:73111},end:{line:1,column:73197}},line:1},"566":{name:"(anonymous_566)",decl:{start:{line:1,column:73197},end:{line:1,column:73198}},loc:{start:{line:1,column:73208},end:{line:1,column:73438}},line:1},"567":{name:"(anonymous_567)",decl:{start:{line:1,column:73316},end:{line:1,column:73317}},loc:{start:{line:1,column:73323},end:{line:1,column:73434}},line:1},"568":{name:"(anonymous_568)",decl:{start:{line:1,column:73438},end:{line:1,column:73439}},loc:{start:{line:1,column:73453},end:{line:1,column:73720}},line:1},"569":{name:"(anonymous_569)",decl:{start:{line:1,column:73720},end:{line:1,column:73721}},loc:{start:{line:1,column:73743},end:{line:1,column:74317}},line:1},"570":{name:"(anonymous_570)",decl:{start:{line:1,column:74317},end:{line:1,column:74318}},loc:{start:{line:1,column:74339},end:{line:1,column:74467}},line:1},"571":{name:"(anonymous_571)",decl:{start:{line:1,column:74389},end:{line:1,column:74390}},loc:{start:{line:1,column:74396},end:{line:1,column:74463}},line:1},"572":{name:"(anonymous_572)",decl:{start:{line:1,column:74467},end:{line:1,column:74468}},loc:{start:{line:1,column:74487},end:{line:1,column:74578}},line:1},"573":{name:"(anonymous_573)",decl:{start:{line:1,column:74596},end:{line:1,column:74597}},loc:{start:{line:1,column:74600},end:{line:1,column:74715}},line:1},"574":{name:"(anonymous_574)",decl:{start:{line:1,column:74723},end:{line:1,column:74724}},loc:{start:{line:1,column:74727},end:{line:1,column:75815}},line:1},"575":{name:"(anonymous_575)",decl:{start:{line:1,column:74956},end:{line:1,column:74957}},loc:{start:{line:1,column:74975},end:{line:1,column:75096}},line:1},"576":{name:"(anonymous_576)",decl:{start:{line:1,column:75096},end:{line:1,column:75097}},loc:{start:{line:1,column:75120},end:{line:1,column:75151}},line:1},"577":{name:"(anonymous_577)",decl:{start:{line:1,column:75151},end:{line:1,column:75152}},loc:{start:{line:1,column:75160},end:{line:1,column:75470}},line:1},"578":{name:"(anonymous_578)",decl:{start:{line:1,column:75470},end:{line:1,column:75471}},loc:{start:{line:1,column:75493},end:{line:1,column:75805}},line:1},"579":{name:"(anonymous_579)",decl:{start:{line:1,column:75823},end:{line:1,column:75824}},loc:{start:{line:1,column:75827},end:{line:1,column:78196}},line:1},"580":{name:"(anonymous_580)",decl:{start:{line:1,column:76042},end:{line:1,column:76043}},loc:{start:{line:1,column:76061},end:{line:1,column:76254}},line:1},"581":{name:"(anonymous_581)",decl:{start:{line:1,column:76254},end:{line:1,column:76255}},loc:{start:{line:1,column:76263},end:{line:1,column:76840}},line:1},"582":{name:"(anonymous_582)",decl:{start:{line:1,column:76840},end:{line:1,column:76841}},loc:{start:{line:1,column:76853},end:{line:1,column:76997}},line:1},"583":{name:"(anonymous_583)",decl:{start:{line:1,column:76997},end:{line:1,column:76998}},loc:{start:{line:1,column:77020},end:{line:1,column:77776}},line:1},"584":{name:"(anonymous_584)",decl:{start:{line:1,column:77776},end:{line:1,column:77777}},loc:{start:{line:1,column:77792},end:{line:1,column:78186}},line:1},"585":{name:"zt",decl:{start:{line:1,column:78401},end:{line:1,column:78403}},loc:{start:{line:1,column:78405},end:{line:1,column:78505}},line:1},"586":{name:"(anonymous_586)",decl:{start:{line:1,column:78520},end:{line:1,column:78521}},loc:{start:{line:1,column:78538},end:{line:1,column:78568}},line:1},"587":{name:"(anonymous_587)",decl:{start:{line:1,column:78576},end:{line:1,column:78577}},loc:{start:{line:1,column:78590},end:{line:1,column:78610}},line:1},"588":{name:"(anonymous_588)",decl:{start:{line:1,column:78610},end:{line:1,column:78611}},loc:{start:{line:1,column:78616},end:{line:1,column:78618}},line:1},"589":{name:"(anonymous_589)",decl:{start:{line:1,column:78618},end:{line:1,column:78619}},loc:{start:{line:1,column:78627},end:{line:1,column:78640}},line:1},"590":{name:"(anonymous_590)",decl:{start:{line:1,column:78640},end:{line:1,column:78641}},loc:{start:{line:1,column:78647},end:{line:1,column:78660}},line:1},"591":{name:"(anonymous_591)",decl:{start:{line:1,column:78660},end:{line:1,column:78661}},loc:{start:{line:1,column:78668},end:{line:1,column:78681}},line:1},"592":{name:"(anonymous_592)",decl:{start:{line:1,column:78681},end:{line:1,column:78682}},loc:{start:{line:1,column:78686},end:{line:1,column:78699}},line:1},"593":{name:"(anonymous_593)",decl:{start:{line:1,column:78699},end:{line:1,column:78700}},loc:{start:{line:1,column:78705},end:{line:1,column:78718}},line:1},"594":{name:"(anonymous_594)",decl:{start:{line:1,column:78718},end:{line:1,column:78719}},loc:{start:{line:1,column:78727},end:{line:1,column:78740}},line:1},"595":{name:"(anonymous_595)",decl:{start:{line:1,column:78740},end:{line:1,column:78741}},loc:{start:{line:1,column:78747},end:{line:1,column:78760}},line:1},"596":{name:"il",decl:{start:{line:1,column:78785},end:{line:1,column:78787}},loc:{start:{line:1,column:78796},end:{line:1,column:79387}},line:1},"597":{name:"(anonymous_597)",decl:{start:{line:1,column:79244},end:{line:1,column:79245}},loc:{start:{line:1,column:79247},end:{line:1,column:79260}},line:1},"598":{name:"(anonymous_598)",decl:{start:{line:1,column:79312},end:{line:1,column:79313}},loc:{start:{line:1,column:79315},end:{line:1,column:79328}},line:1},"599":{name:"we",decl:{start:{line:1,column:79396},end:{line:1,column:79398}},loc:{start:{line:1,column:79409},end:{line:1,column:79592}},line:1},"600":{name:"sl",decl:{start:{line:1,column:79601},end:{line:1,column:79603}},loc:{start:{line:1,column:79606},end:{line:1,column:79775}},line:1},"601":{name:"(anonymous_601)",decl:{start:{line:1,column:79662},end:{line:1,column:79663}},loc:{start:{line:1,column:79675},end:{line:1,column:79774}},line:1},"602":{name:"es",decl:{start:{line:1,column:79784},end:{line:1,column:79786}},loc:{start:{line:1,column:79797},end:{line:1,column:79961}},line:1},"603":{name:"(anonymous_603)",decl:{start:{line:1,column:79847},end:{line:1,column:79848}},loc:{start:{line:1,column:79862},end:{line:1,column:79954}},line:1},"604":{name:"nl",decl:{start:{line:1,column:79970},end:{line:1,column:79972}},loc:{start:{line:1,column:79981},end:{line:1,column:80183}},line:1},"605":{name:"o",decl:{start:{line:1,column:80000},end:{line:1,column:80001}},loc:{start:{line:1,column:80008},end:{line:1,column:80162}},line:1},"606":{name:"ol",decl:{start:{line:1,column:80192},end:{line:1,column:80194}},loc:{start:{line:1,column:80207},end:{line:1,column:80513}},line:1},"607":{name:"c",decl:{start:{line:1,column:80261},end:{line:1,column:80262}},loc:{start:{line:1,column:80269},end:{line:1,column:80492}},line:1},"608":{name:"is",decl:{start:{line:1,column:80522},end:{line:1,column:80524}},loc:{start:{line:1,column:80537},end:{line:1,column:80611}},line:1},"609":{name:"jn",decl:{start:{line:1,column:80620},end:{line:1,column:80622}},loc:{start:{line:1,column:80633},end:{line:1,column:80810}},line:1},"610":{name:"(anonymous_610)",decl:{start:{line:1,column:80696},end:{line:1,column:80697}},loc:{start:{line:1,column:80705},end:{line:1,column:80797}},line:1},"611":{name:"(anonymous_611)",decl:{start:{line:1,column:80853},end:{line:1,column:80854}},loc:{start:{line:1,column:80867},end:{line:1,column:81131}},line:1},"612":{name:"(anonymous_612)",decl:{start:{line:1,column:81029},end:{line:1,column:81030}},loc:{start:{line:1,column:81032},end:{line:1,column:81123}},line:1},"613":{name:"(anonymous_613)",decl:{start:{line:1,column:81132},end:{line:1,column:81133}},loc:{start:{line:1,column:81148},end:{line:1,column:81401}},line:1},"614":{name:"(anonymous_614)",decl:{start:{line:1,column:81402},end:{line:1,column:81403}},loc:{start:{line:1,column:81416},end:{line:1,column:81492}},line:1},"615":{name:"(anonymous_615)",decl:{start:{line:1,column:81493},end:{line:1,column:81494}},loc:{start:{line:1,column:81509},end:{line:1,column:81597}},line:1},"616":{name:"(anonymous_616)",decl:{start:{line:1,column:81598},end:{line:1,column:81599}},loc:{start:{line:1,column:81608},end:{line:1,column:81656}},line:1},"617":{name:"(anonymous_617)",decl:{start:{line:1,column:81657},end:{line:1,column:81658}},loc:{start:{line:1,column:81667},end:{line:1,column:81715}},line:1},"618":{name:"me",decl:{start:{line:1,column:81762},end:{line:1,column:81764}},loc:{start:{line:1,column:81769},end:{line:1,column:81800}},line:1},"619":{name:"(anonymous_619)",decl:{start:{line:1,column:81786},end:{line:1,column:81787}},loc:{start:{line:1,column:81789},end:{line:1,column:81798}},line:1},"620":{name:"Yn",decl:{start:{line:1,column:81809},end:{line:1,column:81811}},loc:{start:{line:1,column:81816},end:{line:1,column:81876}},line:1},"621":{name:"(anonymous_621)",decl:{start:{line:1,column:81833},end:{line:1,column:81834}},loc:{start:{line:1,column:81836},end:{line:1,column:81874}},line:1},"622":{name:"be",decl:{start:{line:1,column:81885},end:{line:1,column:81887}},loc:{start:{line:1,column:81892},end:{line:1,column:81998}},line:1},"623":{name:"(anonymous_623)",decl:{start:{line:1,column:81907},end:{line:1,column:81908}},loc:{start:{line:1,column:81914},end:{line:1,column:81996}},line:1},"624":{name:"al",decl:{start:{line:1,column:82007},end:{line:1,column:82009}},loc:{start:{line:1,column:82012},end:{line:1,column:82233}},line:1},"625":{name:"ll",decl:{start:{line:1,column:82242},end:{line:1,column:82244}},loc:{start:{line:1,column:82247},end:{line:1,column:82425}},line:1},"626":{name:"cl",decl:{start:{line:1,column:82434},end:{line:1,column:82436}},loc:{start:{line:1,column:82441},end:{line:1,column:82710}},line:1},"627":{name:"hl",decl:{start:{line:1,column:82719},end:{line:1,column:82721}},loc:{start:{line:1,column:82724},end:{line:1,column:83063}},line:1},"628":{name:"(anonymous_628)",decl:{start:{line:1,column:82751},end:{line:1,column:82752}},loc:{start:{line:1,column:82754},end:{line:1,column:82768}},line:1},"629":{name:"$n",decl:{start:{line:1,column:83072},end:{line:1,column:83074}},loc:{start:{line:1,column:83083},end:{line:1,column:83131}},line:1},"630":{name:"Wo",decl:{start:{line:1,column:83140},end:{line:1,column:83142}},loc:{start:{line:1,column:83147},end:{line:1,column:83278}},line:1},"631":{name:"dl",decl:{start:{line:1,column:83287},end:{line:1,column:83289}},loc:{start:{line:1,column:83298},end:{line:1,column:83716}},line:1},"632":{name:"fl",decl:{start:{line:1,column:83725},end:{line:1,column:83727}},loc:{start:{line:1,column:83730},end:{line:1,column:83861}},line:1},"633":{name:"t",decl:{start:{line:1,column:83759},end:{line:1,column:83760}},loc:{start:{line:1,column:83763},end:{line:1,column:83809}},line:1},"634":{name:"ul",decl:{start:{line:1,column:83870},end:{line:1,column:83872}},loc:{start:{line:1,column:83877},end:{line:1,column:84045}},line:1},"635":{name:"s",decl:{start:{line:1,column:83906},end:{line:1,column:83907}},loc:{start:{line:1,column:83910},end:{line:1,column:83999}},line:1},"636":{name:"(anonymous_636)",decl:{start:{line:1,column:83966},end:{line:1,column:83967}},loc:{start:{line:1,column:83969},end:{line:1,column:83995}},line:1},"637":{name:"ye",decl:{start:{line:1,column:84054},end:{line:1,column:84056}},loc:{start:{line:1,column:84065},end:{line:1,column:84291}},line:1},"638":{name:"Ge",decl:{start:{line:1,column:84300},end:{line:1,column:84302}},loc:{start:{line:1,column:84313},end:{line:1,column:84377}},line:1},"639":{name:"Un",decl:{start:{line:1,column:84386},end:{line:1,column:84388}},loc:{start:{line:1,column:84397},end:{line:1,column:84902}},line:1},"640":{name:"(anonymous_640)",decl:{start:{line:1,column:84909},end:{line:1,column:84910}},loc:{start:{line:1,column:84920},end:{line:1,column:85101}},line:1},"641":{name:"(anonymous_641)",decl:{start:{line:1,column:85040},end:{line:1,column:85041}},loc:{start:{line:1,column:85050},end:{line:1,column:85084}},line:1},"642":{name:"(anonymous_642)",decl:{start:{line:1,column:85063},end:{line:1,column:85064}},loc:{start:{line:1,column:85070},end:{line:1,column:85081}},line:1},"643":{name:"(anonymous_643)",decl:{start:{line:1,column:85102},end:{line:1,column:85103}},loc:{start:{line:1,column:85116},end:{line:1,column:85181}},line:1},"644":{name:"(anonymous_644)",decl:{start:{line:1,column:85182},end:{line:1,column:85183}},loc:{start:{line:1,column:85198},end:{line:1,column:85261}},line:1},"645":{name:"(anonymous_645)",decl:{start:{line:1,column:85262},end:{line:1,column:85263}},loc:{start:{line:1,column:85277},end:{line:1,column:86138}},line:1},"646":{name:"(anonymous_646)",decl:{start:{line:1,column:85426},end:{line:1,column:85427}},loc:{start:{line:1,column:85429},end:{line:1,column:85482}},line:1},"647":{name:"(anonymous_647)",decl:{start:{line:1,column:85499},end:{line:1,column:85500}},loc:{start:{line:1,column:85506},end:{line:1,column:85553}},line:1},"648":{name:"(anonymous_648)",decl:{start:{line:1,column:86041},end:{line:1,column:86042}},loc:{start:{line:1,column:86044},end:{line:1,column:86136}},line:1},"649":{name:"(anonymous_649)",decl:{start:{line:1,column:86149},end:{line:1,column:86150}},loc:{start:{line:1,column:86168},end:{line:1,column:86170}},line:1},"650":{name:"(anonymous_650)",decl:{start:{line:1,column:86170},end:{line:1,column:86171}},loc:{start:{line:1,column:86187},end:{line:1,column:86197}},line:1},"651":{name:"(anonymous_651)",decl:{start:{line:1,column:86197},end:{line:1,column:86198}},loc:{start:{line:1,column:86220},end:{line:1,column:86222}},line:1},"652":{name:"(anonymous_652)",decl:{start:{line:1,column:86222},end:{line:1,column:86223}},loc:{start:{line:1,column:86248},end:{line:1,column:86250}},line:1},"653":{name:"(anonymous_653)",decl:{start:{line:1,column:86250},end:{line:1,column:86251}},loc:{start:{line:1,column:86271},end:{line:1,column:86281}},line:1},"654":{name:"(anonymous_654)",decl:{start:{line:1,column:86281},end:{line:1,column:86282}},loc:{start:{line:1,column:86304},end:{line:1,column:86400}},line:1},"655":{name:"(anonymous_655)",decl:{start:{line:1,column:86400},end:{line:1,column:86401}},loc:{start:{line:1,column:86413},end:{line:1,column:86423}},line:1},"656":{name:"(anonymous_656)",decl:{start:{line:1,column:86423},end:{line:1,column:86424}},loc:{start:{line:1,column:86438},end:{line:1,column:86440}},line:1},"657":{name:"(anonymous_657)",decl:{start:{line:1,column:86462},end:{line:1,column:86463}},loc:{start:{line:1,column:86479},end:{line:1,column:86529}},line:1},"658":{name:"(anonymous_658)",decl:{start:{line:1,column:86529},end:{line:1,column:86530}},loc:{start:{line:1,column:86544},end:{line:1,column:86568}},line:1},"659":{name:"(anonymous_659)",decl:{start:{line:1,column:86796},end:{line:1,column:86797}},loc:{start:{line:1,column:86799},end:{line:1,column:86815}},line:1},"660":{name:"pl",decl:{start:{line:1,column:86825},end:{line:1,column:86827}},loc:{start:{line:1,column:86832},end:{line:1,column:87228}},line:1},"661":{name:"ml",decl:{start:{line:1,column:87263},end:{line:1,column:87265}},loc:{start:{line:1,column:87272},end:{line:1,column:87303}},line:1},"662":{name:"bl",decl:{start:{line:1,column:87312},end:{line:1,column:87314}},loc:{start:{line:1,column:87321},end:{line:1,column:87372}},line:1},"663":{name:"xl",decl:{start:{line:1,column:87381},end:{line:1,column:87383}},loc:{start:{line:1,column:87388},end:{line:1,column:87504}},line:1},"664":{name:"ri",decl:{start:{line:1,column:87513},end:{line:1,column:87515}},loc:{start:{line:1,column:87520},end:{line:1,column:87569}},line:1},"665":{name:"_l",decl:{start:{line:1,column:87578},end:{line:1,column:87580}},loc:{start:{line:1,column:87587},end:{line:1,column:87769}},line:1},"666":{name:"(anonymous_666)",decl:{start:{line:1,column:87626},end:{line:1,column:87627}},loc:{start:{line:1,column:87629},end:{line:1,column:87712}},line:1},"667":{name:"yl",decl:{start:{line:1,column:87778},end:{line:1,column:87780}},loc:{start:{line:1,column:87787},end:{line:1,column:87969}},line:1},"668":{name:"(anonymous_668)",decl:{start:{line:1,column:87826},end:{line:1,column:87827}},loc:{start:{line:1,column:87829},end:{line:1,column:87912}},line:1},"669":{name:"Vo",decl:{start:{line:1,column:87998},end:{line:1,column:88000}},loc:{start:{line:1,column:88002},end:{line:1,column:88104}},line:1},"670":{name:"(anonymous_670)",decl:{start:{line:1,column:88058},end:{line:1,column:88059}},loc:{start:{line:1,column:88065},end:{line:1,column:88101}},line:1},"671":{name:"vl",decl:{start:{line:1,column:88113},end:{line:1,column:88115}},loc:{start:{line:1,column:88120},end:{line:1,column:88179}},line:1},"672":{name:"Ml",decl:{start:{line:1,column:88188},end:{line:1,column:88190}},loc:{start:{line:1,column:88193},end:{line:1,column:88256}},line:1},"673":{name:"kl",decl:{start:{line:1,column:88265},end:{line:1,column:88267}},loc:{start:{line:1,column:88274},end:{line:1,column:88522}},line:1},"674":{name:"(anonymous_674)",decl:{start:{line:1,column:88323},end:{line:1,column:88324}},loc:{start:{line:1,column:88330},end:{line:1,column:88379}},line:1},"675":{name:"(anonymous_675)",decl:{start:{line:1,column:88409},end:{line:1,column:88410}},loc:{start:{line:1,column:88412},end:{line:1,column:88490}},line:1},"676":{name:"ss",decl:{start:{line:1,column:88531},end:{line:1,column:88533}},loc:{start:{line:1,column:88540},end:{line:1,column:88579}},line:1},"677":{name:"Sl",decl:{start:{line:1,column:88588},end:{line:1,column:88590}},loc:{start:{line:1,column:88597},end:{line:1,column:88670}},line:1},"678":{name:"(anonymous_678)",decl:{start:{line:1,column:88618},end:{line:1,column:88619}},loc:{start:{line:1,column:88621},end:{line:1,column:88647}},line:1},"679":{name:"(anonymous_679)",decl:{start:{line:1,column:88694},end:{line:1,column:88695}},loc:{start:{line:1,column:88713},end:{line:1,column:88796}},line:1},"680":{name:"(anonymous_680)",decl:{start:{line:1,column:88796},end:{line:1,column:88797}},loc:{start:{line:1,column:88813},end:{line:1,column:89060}},line:1},"681":{name:"(anonymous_681)",decl:{start:{line:1,column:88895},end:{line:1,column:88896}},loc:{start:{line:1,column:88898},end:{line:1,column:88956}},line:1},"682":{name:"(anonymous_682)",decl:{start:{line:1,column:89006},end:{line:1,column:89007}},loc:{start:{line:1,column:89009},end:{line:1,column:89026}},line:1},"683":{name:"(anonymous_683)",decl:{start:{line:1,column:89060},end:{line:1,column:89061}},loc:{start:{line:1,column:89083},end:{line:1,column:89203}},line:1},"684":{name:"(anonymous_684)",decl:{start:{line:1,column:89203},end:{line:1,column:89204}},loc:{start:{line:1,column:89227},end:{line:1,column:89342}},line:1},"685":{name:"(anonymous_685)",decl:{start:{line:1,column:89342},end:{line:1,column:89343}},loc:{start:{line:1,column:89363},end:{line:1,column:89395}},line:1},"686":{name:"(anonymous_686)",decl:{start:{line:1,column:89395},end:{line:1,column:89396}},loc:{start:{line:1,column:89418},end:{line:1,column:89438}},line:1},"687":{name:"(anonymous_687)",decl:{start:{line:1,column:89438},end:{line:1,column:89439}},loc:{start:{line:1,column:89451},end:{line:1,column:89494}},line:1},"688":{name:"wl",decl:{start:{line:1,column:89505},end:{line:1,column:89507}},loc:{start:{line:1,column:89510},end:{line:1,column:89587}},line:1},"689":{name:"(anonymous_689)",decl:{start:{line:1,column:89681},end:{line:1,column:89682}},loc:{start:{line:1,column:89699},end:{line:1,column:89756}},line:1},"690":{name:"(anonymous_690)",decl:{start:{line:1,column:89756},end:{line:1,column:89757}},loc:{start:{line:1,column:89766},end:{line:1,column:89797}},line:1},"691":{name:"(anonymous_691)",decl:{start:{line:1,column:89797},end:{line:1,column:89798}},loc:{start:{line:1,column:89810},end:{line:1,column:89932}},line:1},"692":{name:"(anonymous_692)",decl:{start:{line:1,column:89882},end:{line:1,column:89883}},loc:{start:{line:1,column:89885},end:{line:1,column:89928}},line:1},"693":{name:"Cl",decl:{start:{line:1,column:89943},end:{line:1,column:89945}},loc:{start:{line:1,column:89950},end:{line:1,column:90295}},line:1},"694":{name:"Pl",decl:{start:{line:1,column:90304},end:{line:1,column:90306}},loc:{start:{line:1,column:90309},end:{line:1,column:90421}},line:1},"695":{name:"Dl",decl:{start:{line:1,column:90430},end:{line:1,column:90432}},loc:{start:{line:1,column:90439},end:{line:1,column:90586}},line:1},"696":{name:"Ol",decl:{start:{line:1,column:90595},end:{line:1,column:90597}},loc:{start:{line:1,column:90600},end:{line:1,column:90672}},line:1},"697":{name:"Al",decl:{start:{line:1,column:90681},end:{line:1,column:90683}},loc:{start:{line:1,column:90692},end:{line:1,column:90783}},line:1},"698":{name:"Je",decl:{start:{line:1,column:90792},end:{line:1,column:90794}},loc:{start:{line:1,column:90805},end:{line:1,column:91021}},line:1},"699":{name:"Tl",decl:{start:{line:1,column:91030},end:{line:1,column:91032}},loc:{start:{line:1,column:91035},end:{line:1,column:91131}},line:1},"700":{name:"(anonymous_700)",decl:{start:{line:1,column:91138},end:{line:1,column:91139}},loc:{start:{line:1,column:91141},end:{line:1,column:91180}},line:1},"701":{name:"(anonymous_701)",decl:{start:{line:1,column:91184},end:{line:1,column:91185}},loc:{start:{line:1,column:91193},end:{line:1,column:91228}},line:1},"702":{name:"(anonymous_702)",decl:{start:{line:1,column:91232},end:{line:1,column:91233}},loc:{start:{line:1,column:91239},end:{line:1,column:91255}},line:1},"703":{name:"Jn",decl:{start:{line:1,column:91265},end:{line:1,column:91267}},loc:{start:{line:1,column:91272},end:{line:1,column:91358}},line:1},"704":{name:"Rl",decl:{start:{line:1,column:91367},end:{line:1,column:91369}},loc:{start:{line:1,column:91376},end:{line:1,column:91615}},line:1},"705":{name:"El",decl:{start:{line:1,column:91624},end:{line:1,column:91626}},loc:{start:{line:1,column:91631},end:{line:1,column:91727}},line:1},"706":{name:"(anonymous_706)",decl:{start:{line:1,column:91636},end:{line:1,column:91637}},loc:{start:{line:1,column:91639},end:{line:1,column:91725}},line:1},"707":{name:"xe",decl:{start:{line:1,column:91736},end:{line:1,column:91738}},loc:{start:{line:1,column:91741},end:{line:1,column:91776}},line:1},"708":{name:"Zn",decl:{start:{line:1,column:91785},end:{line:1,column:91787}},loc:{start:{line:1,column:91792},end:{line:1,column:91905}},line:1},"709":{name:"Il",decl:{start:{line:1,column:91914},end:{line:1,column:91916}},loc:{start:{line:1,column:91921},end:{line:1,column:91958}},line:1},"710":{name:"Fl",decl:{start:{line:1,column:91967},end:{line:1,column:91969}},loc:{start:{line:1,column:91976},end:{line:1,column:92019}},line:1},"711":{name:"zl",decl:{start:{line:1,column:92028},end:{line:1,column:92030}},loc:{start:{line:1,column:92037},end:{line:1,column:92103}},line:1},"712":{name:"Bl",decl:{start:{line:1,column:92112},end:{line:1,column:92114}},loc:{start:{line:1,column:92123},end:{line:1,column:92588}},line:1},"713":{name:"(anonymous_713)",decl:{start:{line:1,column:92614},end:{line:1,column:92615}},loc:{start:{line:1,column:92628},end:{line:1,column:93516}},line:1},"714":{name:"(anonymous_714)",decl:{start:{line:1,column:93516},end:{line:1,column:93517}},loc:{start:{line:1,column:93523},end:{line:1,column:93742}},line:1},"715":{name:"(anonymous_715)",decl:{start:{line:1,column:93742},end:{line:1,column:93743}},loc:{start:{line:1,column:93752},end:{line:1,column:93762}},line:1},"716":{name:"(anonymous_716)",decl:{start:{line:1,column:93762},end:{line:1,column:93763}},loc:{start:{line:1,column:93777},end:{line:1,column:94033}},line:1},"717":{name:"(anonymous_717)",decl:{start:{line:1,column:94033},end:{line:1,column:94034}},loc:{start:{line:1,column:94045},end:{line:1,column:94361}},line:1},"718":{name:"(anonymous_718)",decl:{start:{line:1,column:94361},end:{line:1,column:94362}},loc:{start:{line:1,column:94373},end:{line:1,column:94486}},line:1},"719":{name:"(anonymous_719)",decl:{start:{line:1,column:94486},end:{line:1,column:94487}},loc:{start:{line:1,column:94496},end:{line:1,column:94515}},line:1},"720":{name:"(anonymous_720)",decl:{start:{line:1,column:94515},end:{line:1,column:94516}},loc:{start:{line:1,column:94526},end:{line:1,column:94633}},line:1},"721":{name:"(anonymous_721)",decl:{start:{line:1,column:94633},end:{line:1,column:94634}},loc:{start:{line:1,column:94670},end:{line:1,column:94742}},line:1},"722":{name:"(anonymous_722)",decl:{start:{line:1,column:94742},end:{line:1,column:94743}},loc:{start:{line:1,column:94756},end:{line:1,column:94798}},line:1},"723":{name:"(anonymous_723)",decl:{start:{line:1,column:94798},end:{line:1,column:94799}},loc:{start:{line:1,column:94812},end:{line:1,column:94849}},line:1},"724":{name:"(anonymous_724)",decl:{start:{line:1,column:94849},end:{line:1,column:94850}},loc:{start:{line:1,column:94862},end:{line:1,column:95950}},line:1},"725":{name:"(anonymous_725)",decl:{start:{line:1,column:95950},end:{line:1,column:95951}},loc:{start:{line:1,column:95961},end:{line:1,column:96194}},line:1},"726":{name:"(anonymous_726)",decl:{start:{line:1,column:96194},end:{line:1,column:96195}},loc:{start:{line:1,column:96207},end:{line:1,column:96243}},line:1},"727":{name:"(anonymous_727)",decl:{start:{line:1,column:96243},end:{line:1,column:96244}},loc:{start:{line:1,column:96264},end:{line:1,column:96308}},line:1},"728":{name:"(anonymous_728)",decl:{start:{line:1,column:96308},end:{line:1,column:96309}},loc:{start:{line:1,column:96323},end:{line:1,column:96547}},line:1},"729":{name:"(anonymous_729)",decl:{start:{line:1,column:96547},end:{line:1,column:96548}},loc:{start:{line:1,column:96567},end:{line:1,column:96610}},line:1},"730":{name:"(anonymous_730)",decl:{start:{line:1,column:96610},end:{line:1,column:96611}},loc:{start:{line:1,column:96623},end:{line:1,column:96696}},line:1},"731":{name:"(anonymous_731)",decl:{start:{line:1,column:96696},end:{line:1,column:96697}},loc:{start:{line:1,column:96714},end:{line:1,column:96751}},line:1},"732":{name:"(anonymous_732)",decl:{start:{line:1,column:96751},end:{line:1,column:96752}},loc:{start:{line:1,column:96772},end:{line:1,column:96774}},line:1},"733":{name:"(anonymous_733)",decl:{start:{line:1,column:96774},end:{line:1,column:96775}},loc:{start:{line:1,column:96791},end:{line:1,column:96827}},line:1},"734":{name:"(anonymous_734)",decl:{start:{line:1,column:96827},end:{line:1,column:96828}},loc:{start:{line:1,column:96845},end:{line:1,column:96882}},line:1},"735":{name:"(anonymous_735)",decl:{start:{line:1,column:96882},end:{line:1,column:96883}},loc:{start:{line:1,column:96894},end:{line:1,column:96904}},line:1},"736":{name:"(anonymous_736)",decl:{start:{line:1,column:96904},end:{line:1,column:96905}},loc:{start:{line:1,column:96921},end:{line:1,column:96957}},line:1},"737":{name:"(anonymous_737)",decl:{start:{line:1,column:96957},end:{line:1,column:96958}},loc:{start:{line:1,column:96986},end:{line:1,column:97038}},line:1},"738":{name:"(anonymous_738)",decl:{start:{line:1,column:97038},end:{line:1,column:97039}},loc:{start:{line:1,column:97059},end:{line:1,column:97166}},line:1},"739":{name:"(anonymous_739)",decl:{start:{line:1,column:97166},end:{line:1,column:97167}},loc:{start:{line:1,column:97194},end:{line:1,column:97245}},line:1},"740":{name:"(anonymous_740)",decl:{start:{line:1,column:97245},end:{line:1,column:97246}},loc:{start:{line:1,column:97275},end:{line:1,column:97328}},line:1},"741":{name:"(anonymous_741)",decl:{start:{line:1,column:97328},end:{line:1,column:97329}},loc:{start:{line:1,column:97352},end:{line:1,column:97990}},line:1},"742":{name:"(anonymous_742)",decl:{start:{line:1,column:97990},end:{line:1,column:97991}},loc:{start:{line:1,column:98019},end:{line:1,column:98071}},line:1},"743":{name:"(anonymous_743)",decl:{start:{line:1,column:98071},end:{line:1,column:98072}},loc:{start:{line:1,column:98086},end:{line:1,column:98088}},line:1},"744":{name:"(anonymous_744)",decl:{start:{line:1,column:98088},end:{line:1,column:98089}},loc:{start:{line:1,column:98099},end:{line:1,column:98133}},line:1},"745":{name:"(anonymous_745)",decl:{start:{line:1,column:98133},end:{line:1,column:98134}},loc:{start:{line:1,column:98138},end:{line:1,column:98956}},line:1},"746":{name:"(anonymous_746)",decl:{start:{line:1,column:98956},end:{line:1,column:98957}},loc:{start:{line:1,column:98982},end:{line:1,column:99621}},line:1},"747":{name:"(anonymous_747)",decl:{start:{line:1,column:99621},end:{line:1,column:99622}},loc:{start:{line:1,column:99637},end:{line:1,column:99921}},line:1},"748":{name:"(anonymous_748)",decl:{start:{line:1,column:99921},end:{line:1,column:99922}},loc:{start:{line:1,column:99931},end:{line:1,column:99964}},line:1},"749":{name:"(anonymous_749)",decl:{start:{line:1,column:99964},end:{line:1,column:99965}},loc:{start:{line:1,column:99978},end:{line:1,column:100055}},line:1},"750":{name:"(anonymous_750)",decl:{start:{line:1,column:100055},end:{line:1,column:100056}},loc:{start:{line:1,column:100067},end:{line:1,column:100097}},line:1},"751":{name:"(anonymous_751)",decl:{start:{line:1,column:100097},end:{line:1,column:100098}},loc:{start:{line:1,column:100121},end:{line:1,column:100292}},line:1},"752":{name:"(anonymous_752)",decl:{start:{line:1,column:100292},end:{line:1,column:100293}},loc:{start:{line:1,column:100308},end:{line:1,column:100509}},line:1},"753":{name:"(anonymous_753)",decl:{start:{line:1,column:100509},end:{line:1,column:100510}},loc:{start:{line:1,column:100534},end:{line:1,column:101111}},line:1},"754":{name:"(anonymous_754)",decl:{start:{line:1,column:101000},end:{line:1,column:101001}},loc:{start:{line:1,column:101004},end:{line:1,column:101034}},line:1},"755":{name:"(anonymous_755)",decl:{start:{line:1,column:101111},end:{line:1,column:101112}},loc:{start:{line:1,column:101130},end:{line:1,column:101140}},line:1},"756":{name:"(anonymous_756)",decl:{start:{line:1,column:101140},end:{line:1,column:101141}},loc:{start:{line:1,column:101161},end:{line:1,column:101173}},line:1},"757":{name:"(anonymous_757)",decl:{start:{line:1,column:101173},end:{line:1,column:101174}},loc:{start:{line:1,column:101192},end:{line:1,column:101194}},line:1},"758":{name:"(anonymous_758)",decl:{start:{line:1,column:101194},end:{line:1,column:101195}},loc:{start:{line:1,column:101212},end:{line:1,column:101294}},line:1},"759":{name:"(anonymous_759)",decl:{start:{line:1,column:101294},end:{line:1,column:101295}},loc:{start:{line:1,column:101315},end:{line:1,column:101435}},line:1},"760":{name:"(anonymous_760)",decl:{start:{line:1,column:101435},end:{line:1,column:101436}},loc:{start:{line:1,column:101456},end:{line:1,column:101530}},line:1},"761":{name:"(anonymous_761)",decl:{start:{line:1,column:101530},end:{line:1,column:101531}},loc:{start:{line:1,column:101544},end:{line:1,column:101595}},line:1},"762":{name:"(anonymous_762)",decl:{start:{line:1,column:101595},end:{line:1,column:101596}},loc:{start:{line:1,column:101609},end:{line:1,column:101663}},line:1},"763":{name:"(anonymous_763)",decl:{start:{line:1,column:101663},end:{line:1,column:101664}},loc:{start:{line:1,column:101676},end:{line:1,column:101859}},line:1},"764":{name:"(anonymous_764)",decl:{start:{line:1,column:101859},end:{line:1,column:101860}},loc:{start:{line:1,column:101870},end:{line:1,column:102123}},line:1},"765":{name:"(anonymous_765)",decl:{start:{line:1,column:102123},end:{line:1,column:102124}},loc:{start:{line:1,column:102135},end:{line:1,column:102225}},line:1},"766":{name:"(anonymous_766)",decl:{start:{line:1,column:102225},end:{line:1,column:102226}},loc:{start:{line:1,column:102249},end:{line:1,column:103757}},line:1},"767":{name:"(anonymous_767)",decl:{start:{line:1,column:102463},end:{line:1,column:102464}},loc:{start:{line:1,column:102474},end:{line:1,column:102492}},line:1},"768":{name:"(anonymous_768)",decl:{start:{line:1,column:103757},end:{line:1,column:103758}},loc:{start:{line:1,column:103778},end:{line:1,column:105935}},line:1},"769":{name:"(anonymous_769)",decl:{start:{line:1,column:105935},end:{line:1,column:105936}},loc:{start:{line:1,column:105960},end:{line:1,column:106165}},line:1},"770":{name:"(anonymous_770)",decl:{start:{line:1,column:106165},end:{line:1,column:106166}},loc:{start:{line:1,column:106191},end:{line:1,column:106735}},line:1},"771":{name:"(anonymous_771)",decl:{start:{line:1,column:106735},end:{line:1,column:106736}},loc:{start:{line:1,column:106754},end:{line:1,column:107009}},line:1},"772":{name:"(anonymous_772)",decl:{start:{line:1,column:107009},end:{line:1,column:107010}},loc:{start:{line:1,column:107025},end:{line:1,column:107160}},line:1},"773":{name:"(anonymous_773)",decl:{start:{line:1,column:107160},end:{line:1,column:107161}},loc:{start:{line:1,column:107183},end:{line:1,column:107351}},line:1},"774":{name:"(anonymous_774)",decl:{start:{line:1,column:107278},end:{line:1,column:107279}},loc:{start:{line:1,column:107281},end:{line:1,column:107292}},line:1},"775":{name:"(anonymous_775)",decl:{start:{line:1,column:107351},end:{line:1,column:107352}},loc:{start:{line:1,column:107362},end:{line:1,column:107971}},line:1},"776":{name:"(anonymous_776)",decl:{start:{line:1,column:107479},end:{line:1,column:107480}},loc:{start:{line:1,column:107488},end:{line:1,column:107703}},line:1},"777":{name:"(anonymous_777)",decl:{start:{line:1,column:107971},end:{line:1,column:107972}},loc:{start:{line:1,column:107983},end:{line:1,column:108430}},line:1},"778":{name:"(anonymous_778)",decl:{start:{line:1,column:108430},end:{line:1,column:108431}},loc:{start:{line:1,column:108443},end:{line:1,column:108654}},line:1},"779":{name:"(anonymous_779)",decl:{start:{line:1,column:108654},end:{line:1,column:108655}},loc:{start:{line:1,column:108665},end:{line:1,column:109080}},line:1},"780":{name:"(anonymous_780)",decl:{start:{line:1,column:109080},end:{line:1,column:109081}},loc:{start:{line:1,column:109087},end:{line:1,column:109202}},line:1},"781":{name:"(anonymous_781)",decl:{start:{line:1,column:109202},end:{line:1,column:109203}},loc:{start:{line:1,column:109211},end:{line:1,column:109538}},line:1},"782":{name:"(anonymous_782)",decl:{start:{line:1,column:109374},end:{line:1,column:109375}},loc:{start:{line:1,column:109377},end:{line:1,column:109391}},line:1},"783":{name:"(anonymous_783)",decl:{start:{line:1,column:109405},end:{line:1,column:109406}},loc:{start:{line:1,column:109408},end:{line:1,column:109465}},line:1},"784":{name:"(anonymous_784)",decl:{start:{line:1,column:109477},end:{line:1,column:109478}},loc:{start:{line:1,column:109481},end:{line:1,column:109500}},line:1},"785":{name:"(anonymous_785)",decl:{start:{line:1,column:109512},end:{line:1,column:109513}},loc:{start:{line:1,column:109515},end:{line:1,column:109535}},line:1},"786":{name:"(anonymous_786)",decl:{start:{line:1,column:109538},end:{line:1,column:109539}},loc:{start:{line:1,column:109564},end:{line:1,column:109735}},line:1},"787":{name:"(anonymous_787)",decl:{start:{line:1,column:109735},end:{line:1,column:109736}},loc:{start:{line:1,column:109761},end:{line:1,column:109835}},line:1},"788":{name:"(anonymous_788)",decl:{start:{line:1,column:109835},end:{line:1,column:109836}},loc:{start:{line:1,column:109847},end:{line:1,column:109950}},line:1},"789":{name:"(anonymous_789)",decl:{start:{line:1,column:109961},end:{line:1,column:109962}},loc:{start:{line:1,column:109979},end:{line:1,column:110052}},line:1},"790":{name:"(anonymous_790)",decl:{start:{line:1,column:110052},end:{line:1,column:110053}},loc:{start:{line:1,column:110064},end:{line:1,column:110141}},line:1},"791":{name:"(anonymous_791)",decl:{start:{line:1,column:110141},end:{line:1,column:110142}},loc:{start:{line:1,column:110152},end:{line:1,column:110389}},line:1},"792":{name:"(anonymous_792)",decl:{start:{line:1,column:110389},end:{line:1,column:110390}},loc:{start:{line:1,column:110395},end:{line:1,column:110417}},line:1},"793":{name:"(anonymous_793)",decl:{start:{line:1,column:110417},end:{line:1,column:110418}},loc:{start:{line:1,column:110430},end:{line:1,column:110547}},line:1},"794":{name:"Wl",decl:{start:{line:1,column:110558},end:{line:1,column:110560}},loc:{start:{line:1,column:110567},end:{line:1,column:110727}},line:1},"795":{name:"Nl",decl:{start:{line:1,column:110736},end:{line:1,column:110738}},loc:{start:{line:1,column:110743},end:{line:1,column:110887}},line:1},"796":{name:"(anonymous_796)",decl:{start:{line:1,column:110767},end:{line:1,column:110768}},loc:{start:{line:1,column:110770},end:{line:1,column:110885}},line:1},"797":{name:"Vl",decl:{start:{line:1,column:110896},end:{line:1,column:110898}},loc:{start:{line:1,column:110901},end:{line:1,column:110933}},line:1},"798":{name:"(anonymous_798)",decl:{start:{line:1,column:110946},end:{line:1,column:110947}},loc:{start:{line:1,column:110959},end:{line:1,column:111175}},line:1},"799":{name:"(anonymous_799)",decl:{start:{line:1,column:111175},end:{line:1,column:111176}},loc:{start:{line:1,column:111184},end:{line:1,column:111210}},line:1},"800":{name:"(anonymous_800)",decl:{start:{line:1,column:111210},end:{line:1,column:111211}},loc:{start:{line:1,column:111222},end:{line:1,column:111250}},line:1},"801":{name:"(anonymous_801)",decl:{start:{line:1,column:111250},end:{line:1,column:111251}},loc:{start:{line:1,column:111270},end:{line:1,column:111313}},line:1},"802":{name:"(anonymous_802)",decl:{start:{line:1,column:111313},end:{line:1,column:111314}},loc:{start:{line:1,column:111330},end:{line:1,column:111370}},line:1},"803":{name:"(anonymous_803)",decl:{start:{line:1,column:111370},end:{line:1,column:111371}},loc:{start:{line:1,column:111386},end:{line:1,column:111425}},line:1},"804":{name:"(anonymous_804)",decl:{start:{line:1,column:111425},end:{line:1,column:111426}},loc:{start:{line:1,column:111440},end:{line:1,column:111478}},line:1},"805":{name:"(anonymous_805)",decl:{start:{line:1,column:111478},end:{line:1,column:111479}},loc:{start:{line:1,column:111494},end:{line:1,column:111545}},line:1},"806":{name:"(anonymous_806)",decl:{start:{line:1,column:111545},end:{line:1,column:111546}},loc:{start:{line:1,column:111558},end:{line:1,column:111603}},line:1},"807":{name:"(anonymous_807)",decl:{start:{line:1,column:111603},end:{line:1,column:111604}},loc:{start:{line:1,column:111615},end:{line:1,column:111658}},line:1},"808":{name:"(anonymous_808)",decl:{start:{line:1,column:111658},end:{line:1,column:111659}},loc:{start:{line:1,column:111669},end:{line:1,column:111710}},line:1},"809":{name:"(anonymous_809)",decl:{start:{line:1,column:111710},end:{line:1,column:111711}},loc:{start:{line:1,column:111733},end:{line:1,column:111778}},line:1},"810":{name:"(anonymous_810)",decl:{start:{line:1,column:111778},end:{line:1,column:111779}},loc:{start:{line:1,column:111798},end:{line:1,column:111840}},line:1},"811":{name:"(anonymous_811)",decl:{start:{line:1,column:111840},end:{line:1,column:111841}},loc:{start:{line:1,column:111859},end:{line:1,column:111900}},line:1},"812":{name:"(anonymous_812)",decl:{start:{line:1,column:111900},end:{line:1,column:111901}},loc:{start:{line:1,column:111918},end:{line:1,column:111958}},line:1},"813":{name:"(anonymous_813)",decl:{start:{line:1,column:111958},end:{line:1,column:111959}},loc:{start:{line:1,column:111970},end:{line:1,column:112154}},line:1},"814":{name:"(anonymous_814)",decl:{start:{line:1,column:111986},end:{line:1,column:111987}},loc:{start:{line:1,column:111989},end:{line:1,column:112152}},line:1},"815":{name:"(anonymous_815)",decl:{start:{line:1,column:112091},end:{line:1,column:112092}},loc:{start:{line:1,column:112094},end:{line:1,column:112150}},line:1},"816":{name:"(anonymous_816)",decl:{start:{line:1,column:112154},end:{line:1,column:112155}},loc:{start:{line:1,column:112166},end:{line:1,column:112230}},line:1},"817":{name:"(anonymous_817)",decl:{start:{line:1,column:112230},end:{line:1,column:112231}},loc:{start:{line:1,column:112252},end:{line:1,column:112379}},line:1},"818":{name:"(anonymous_818)",decl:{start:{line:1,column:112379},end:{line:1,column:112380}},loc:{start:{line:1,column:112390},end:{line:1,column:112483}},line:1},"819":{name:"(anonymous_819)",decl:{start:{line:1,column:112504},end:{line:1,column:112505}},loc:{start:{line:1,column:112517},end:{line:1,column:112536}},line:1},"820":{name:"(anonymous_820)",decl:{start:{line:1,column:112536},end:{line:1,column:112537}},loc:{start:{line:1,column:112551},end:{line:1,column:112877}},line:1},"821":{name:"(anonymous_821)",decl:{start:{line:1,column:112877},end:{line:1,column:112878}},loc:{start:{line:1,column:112893},end:{line:1,column:113007}},line:1},"822":{name:"(anonymous_822)",decl:{start:{line:1,column:113007},end:{line:1,column:113008}},loc:{start:{line:1,column:113019},end:{line:1,column:113084}},line:1},"823":{name:"(anonymous_823)",decl:{start:{line:1,column:113084},end:{line:1,column:113085}},loc:{start:{line:1,column:113099},end:{line:1,column:113216}},line:1},"824":{name:"(anonymous_824)",decl:{start:{line:1,column:113216},end:{line:1,column:113217}},loc:{start:{line:1,column:113239},end:{line:1,column:113336}},line:1},"825":{name:"(anonymous_825)",decl:{start:{line:1,column:113336},end:{line:1,column:113337}},loc:{start:{line:1,column:113358},end:{line:1,column:113519}},line:1},"826":{name:"(anonymous_826)",decl:{start:{line:1,column:113400},end:{line:1,column:113401}},loc:{start:{line:1,column:113407},end:{line:1,column:113457}},line:1},"827":{name:"(anonymous_827)",decl:{start:{line:1,column:113416},end:{line:1,column:113417}},loc:{start:{line:1,column:113419},end:{line:1,column:113456}},line:1},"828":{name:"(anonymous_828)",decl:{start:{line:1,column:113427},end:{line:1,column:113428}},loc:{start:{line:1,column:113430},end:{line:1,column:113455}},line:1},"829":{name:"Hl",decl:{start:{line:1,column:113530},end:{line:1,column:113532}},loc:{start:{line:1,column:113535},end:{line:1,column:113766}},line:1},"830":{name:"jl",decl:{start:{line:1,column:113775},end:{line:1,column:113777}},loc:{start:{line:1,column:113782},end:{line:1,column:113817}},line:1},"831":{name:"Yl",decl:{start:{line:1,column:113826},end:{line:1,column:113828}},loc:{start:{line:1,column:113858},end:{line:1,column:114010}},line:1},"832":{name:"$l",decl:{start:{line:1,column:114019},end:{line:1,column:114021}},loc:{start:{line:1,column:114047},end:{line:1,column:114208}},line:1},"833":{name:"ps",decl:{start:{line:1,column:114217},end:{line:1,column:114219}},loc:{start:{line:1,column:114224},end:{line:1,column:114322}},line:1},"834":{name:"Ul",decl:{start:{line:1,column:114331},end:{line:1,column:114333}},loc:{start:{line:1,column:114338},end:{line:1,column:114409}},line:1},"835":{name:"Xl",decl:{start:{line:1,column:114418},end:{line:1,column:114420}},loc:{start:{line:1,column:114425},end:{line:1,column:114459}},line:1},"836":{name:"Qn",decl:{start:{line:1,column:114468},end:{line:1,column:114470}},loc:{start:{line:1,column:114473},end:{line:1,column:114512}},line:1},"837":{name:"Kl",decl:{start:{line:1,column:114521},end:{line:1,column:114523}},loc:{start:{line:1,column:114526},end:{line:1,column:114601}},line:1},"838":{name:"ms",decl:{start:{line:1,column:114610},end:{line:1,column:114612}},loc:{start:{line:1,column:114620},end:{line:1,column:114835}},line:1},"839":{name:"to",decl:{start:{line:1,column:114844},end:{line:1,column:114846}},loc:{start:{line:1,column:114853},end:{line:1,column:114890}},line:1},"840":{name:"ql",decl:{start:{line:1,column:114899},end:{line:1,column:114901}},loc:{start:{line:1,column:114906},end:{line:1,column:115056}},line:1},"841":{name:"(anonymous_841)",decl:{start:{line:1,column:114964},end:{line:1,column:114965}},loc:{start:{line:1,column:114967},end:{line:1,column:114995}},line:1},"842":{name:"Gl",decl:{start:{line:1,column:115065},end:{line:1,column:115067}},loc:{start:{line:1,column:115072},end:{line:1,column:115779}},line:1},"843":{name:"(anonymous_843)",decl:{start:{line:1,column:115185},end:{line:1,column:115186}},loc:{start:{line:1,column:115188},end:{line:1,column:115480}},line:1},"844":{name:"(anonymous_844)",decl:{start:{line:1,column:115506},end:{line:1,column:115507}},loc:{start:{line:1,column:115509},end:{line:1,column:115702}},line:1},"845":{name:"(anonymous_845)",decl:{start:{line:1,column:115602},end:{line:1,column:115603}},loc:{start:{line:1,column:115605},end:{line:1,column:115700}},line:1},"846":{name:"(anonymous_846)",decl:{start:{line:1,column:115727},end:{line:1,column:115728}},loc:{start:{line:1,column:115730},end:{line:1,column:115775}},line:1},"847":{name:"Ho",decl:{start:{line:1,column:115788},end:{line:1,column:115790}},loc:{start:{line:1,column:115793},end:{line:1,column:115869}},line:1},"848":{name:"jo",decl:{start:{line:1,column:115878},end:{line:1,column:115880}},loc:{start:{line:1,column:115883},end:{line:1,column:115949}},line:1},"849":{name:"Jl",decl:{start:{line:1,column:115958},end:{line:1,column:115960}},loc:{start:{line:1,column:115963},end:{line:1,column:116005}},line:1},"850":{name:"Ze",decl:{start:{line:1,column:116040},end:{line:1,column:116042}},loc:{start:{line:1,column:116047},end:{line:1,column:116106}},line:1},"851":{name:"(anonymous_851)",decl:{start:{line:1,column:116113},end:{line:1,column:116114}},loc:{start:{line:1,column:116122},end:{line:1,column:116158}},line:1},"852":{name:"(anonymous_852)",decl:{start:{line:1,column:116168},end:{line:1,column:116169}},loc:{start:{line:1,column:116182},end:{line:1,column:116255}},line:1},"853":{name:"(anonymous_853)",decl:{start:{line:1,column:116255},end:{line:1,column:116256}},loc:{start:{line:1,column:116269},end:{line:1,column:116299}},line:1},"854":{name:"(anonymous_854)",decl:{start:{line:1,column:116299},end:{line:1,column:116300}},loc:{start:{line:1,column:116309},end:{line:1,column:116335}},line:1},"855":{name:"(anonymous_855)",decl:{start:{line:1,column:116335},end:{line:1,column:116336}},loc:{start:{line:1,column:116346},end:{line:1,column:116367}},line:1},"856":{name:"(anonymous_856)",decl:{start:{line:1,column:116367},end:{line:1,column:116368}},loc:{start:{line:1,column:116377},end:{line:1,column:116403}},line:1},"857":{name:"(anonymous_857)",decl:{start:{line:1,column:116403},end:{line:1,column:116404}},loc:{start:{line:1,column:116414},end:{line:1,column:116439}},line:1},"858":{name:"(anonymous_858)",decl:{start:{line:1,column:116439},end:{line:1,column:116440}},loc:{start:{line:1,column:116452},end:{line:1,column:116481}},line:1},"859":{name:"(anonymous_859)",decl:{start:{line:1,column:116481},end:{line:1,column:116482}},loc:{start:{line:1,column:116495},end:{line:1,column:116519}},line:1},"860":{name:"(anonymous_860)",decl:{start:{line:1,column:116519},end:{line:1,column:116520}},loc:{start:{line:1,column:116532},end:{line:1,column:116561}},line:1},"861":{name:"(anonymous_861)",decl:{start:{line:1,column:116561},end:{line:1,column:116562}},loc:{start:{line:1,column:116569},end:{line:1,column:116613}},line:1},"862":{name:"(anonymous_862)",decl:{start:{line:1,column:116613},end:{line:1,column:116614}},loc:{start:{line:1,column:116625},end:{line:1,column:116679}},line:1},"863":{name:"(anonymous_863)",decl:{start:{line:1,column:116679},end:{line:1,column:116680}},loc:{start:{line:1,column:116698},end:{line:1,column:116739}},line:1},"864":{name:"(anonymous_864)",decl:{start:{line:1,column:116711},end:{line:1,column:116712}},loc:{start:{line:1,column:116715},end:{line:1,column:116737}},line:1},"865":{name:"(anonymous_865)",decl:{start:{line:1,column:116739},end:{line:1,column:116740}},loc:{start:{line:1,column:116769},end:{line:1,column:116885}},line:1},"866":{name:"(anonymous_866)",decl:{start:{line:1,column:116803},end:{line:1,column:116804}},loc:{start:{line:1,column:116807},end:{line:1,column:116883}},line:1},"867":{name:"(anonymous_867)",decl:{start:{line:1,column:116885},end:{line:1,column:116886}},loc:{start:{line:1,column:116913},end:{line:1,column:117010}},line:1},"868":{name:"(anonymous_868)",decl:{start:{line:1,column:116936},end:{line:1,column:116937}},loc:{start:{line:1,column:116940},end:{line:1,column:117008}},line:1},"869":{name:"(anonymous_869)",decl:{start:{line:1,column:117010},end:{line:1,column:117011}},loc:{start:{line:1,column:117028},end:{line:1,column:117137}},line:1},"870":{name:"(anonymous_870)",decl:{start:{line:1,column:117081},end:{line:1,column:117082}},loc:{start:{line:1,column:117085},end:{line:1,column:117135}},line:1},"871":{name:"(anonymous_871)",decl:{start:{line:1,column:117137},end:{line:1,column:117138}},loc:{start:{line:1,column:117155},end:{line:1,column:117230}},line:1},"872":{name:"(anonymous_872)",decl:{start:{line:1,column:117230},end:{line:1,column:117231}},loc:{start:{line:1,column:117252},end:{line:1,column:117597}},line:1},"873":{name:"(anonymous_873)",decl:{start:{line:1,column:117355},end:{line:1,column:117356}},loc:{start:{line:1,column:117358},end:{line:1,column:117502}},line:1},"874":{name:"(anonymous_874)",decl:{start:{line:1,column:117382},end:{line:1,column:117383}},loc:{start:{line:1,column:117385},end:{line:1,column:117394}},line:1},"875":{name:"(anonymous_875)",decl:{start:{line:1,column:117407},end:{line:1,column:117408}},loc:{start:{line:1,column:117410},end:{line:1,column:117419}},line:1},"876":{name:"(anonymous_876)",decl:{start:{line:1,column:117431},end:{line:1,column:117432}},loc:{start:{line:1,column:117434},end:{line:1,column:117451}},line:1},"877":{name:"(anonymous_877)",decl:{start:{line:1,column:117463},end:{line:1,column:117464}},loc:{start:{line:1,column:117466},end:{line:1,column:117475}},line:1},"878":{name:"(anonymous_878)",decl:{start:{line:1,column:117487},end:{line:1,column:117488}},loc:{start:{line:1,column:117490},end:{line:1,column:117500}},line:1},"879":{name:"(anonymous_879)",decl:{start:{line:1,column:117597},end:{line:1,column:117598}},loc:{start:{line:1,column:117616},end:{line:1,column:117696}},line:1},"880":{name:"(anonymous_880)",decl:{start:{line:1,column:117696},end:{line:1,column:117697}},loc:{start:{line:1,column:117729},end:{line:1,column:117926}},line:1},"881":{name:"(anonymous_881)",decl:{start:{line:1,column:117926},end:{line:1,column:117927}},loc:{start:{line:1,column:117954},end:{line:1,column:118030}},line:1},"882":{name:"io",decl:{start:{line:1,column:118041},end:{line:1,column:118043}},loc:{start:{line:1,column:118050},end:{line:1,column:118224}},line:1},"883":{name:"(anonymous_883)",decl:{start:{line:1,column:118170},end:{line:1,column:118171}},loc:{start:{line:1,column:118173},end:{line:1,column:118207}},line:1},"884":{name:"(anonymous_884)",decl:{start:{line:1,column:118231},end:{line:1,column:118232}},loc:{start:{line:1,column:118234},end:{line:1,column:118287}},line:1},"885":{name:"(anonymous_885)",decl:{start:{line:1,column:118275},end:{line:1,column:118276}},loc:{start:{line:1,column:118278},end:{line:1,column:118286}},line:1},"886":{name:"Ql",decl:{start:{line:1,column:118297},end:{line:1,column:118299}},loc:{start:{line:1,column:118304},end:{line:1,column:118442}},line:1},"887":{name:"so",decl:{start:{line:1,column:118513},end:{line:1,column:118515}},loc:{start:{line:1,column:118520},end:{line:1,column:118581}},line:1},"888":{name:"no",decl:{start:{line:1,column:118590},end:{line:1,column:118592}},loc:{start:{line:1,column:118597},end:{line:1,column:118659}},line:1},"889":{name:"(anonymous_889)",decl:{start:{line:1,column:118605},end:{line:1,column:118606}},loc:{start:{line:1,column:118618},end:{line:1,column:118658}},line:1},"890":{name:"oo",decl:{start:{line:1,column:118668},end:{line:1,column:118670}},loc:{start:{line:1,column:118673},end:{line:1,column:118766}},line:1},"891":{name:"ic",decl:{start:{line:1,column:118775},end:{line:1,column:118777}},loc:{start:{line:1,column:118780},end:{line:1,column:118842}},line:1},"892":{name:"$o",decl:{start:{line:1,column:118851},end:{line:1,column:118853}},loc:{start:{line:1,column:118856},end:{line:1,column:118968}},line:1},"893":{name:"(anonymous_893)",decl:{start:{line:1,column:118981},end:{line:1,column:118982}},loc:{start:{line:1,column:118984},end:{line:1,column:119052}},line:1},"894":{name:"(anonymous_894)",decl:{start:{line:1,column:119029},end:{line:1,column:119030}},loc:{start:{line:1,column:119032},end:{line:1,column:119044}},line:1},"895":{name:"sc",decl:{start:{line:1,column:119062},end:{line:1,column:119064}},loc:{start:{line:1,column:119071},end:{line:1,column:119175}},line:1},"896":{name:"nc",decl:{start:{line:1,column:119184},end:{line:1,column:119186}},loc:{start:{line:1,column:119195},end:{line:1,column:119237}},line:1},"897":{name:"(anonymous_897)",decl:{start:{line:1,column:119245},end:{line:1,column:119246}},loc:{start:{line:1,column:119249},end:{line:1,column:132427}},line:1},"898":{name:"(anonymous_898)",decl:{start:{line:1,column:119372},end:{line:1,column:119373}},loc:{start:{line:1,column:119393},end:{line:1,column:119412}},line:1},"899":{name:"(anonymous_899)",decl:{start:{line:1,column:119412},end:{line:1,column:119413}},loc:{start:{line:1,column:119435},end:{line:1,column:119457}},line:1},"900":{name:"(anonymous_900)",decl:{start:{line:1,column:119457},end:{line:1,column:119458}},loc:{start:{line:1,column:119473},end:{line:1,column:120698}},line:1},"901":{name:"(anonymous_901)",decl:{start:{line:1,column:120418},end:{line:1,column:120419}},loc:{start:{line:1,column:120421},end:{line:1,column:120435}},line:1},"902":{name:"(anonymous_902)",decl:{start:{line:1,column:120698},end:{line:1,column:120699}},loc:{start:{line:1,column:120715},end:{line:1,column:120836}},line:1},"903":{name:"(anonymous_903)",decl:{start:{line:1,column:120836},end:{line:1,column:120837}},loc:{start:{line:1,column:120846},end:{line:1,column:120871}},line:1},"904":{name:"(anonymous_904)",decl:{start:{line:1,column:120871},end:{line:1,column:120872}},loc:{start:{line:1,column:120882},end:{line:1,column:120902}},line:1},"905":{name:"(anonymous_905)",decl:{start:{line:1,column:120902},end:{line:1,column:120903}},loc:{start:{line:1,column:120915},end:{line:1,column:120937}},line:1},"906":{name:"(anonymous_906)",decl:{start:{line:1,column:120937},end:{line:1,column:120938}},loc:{start:{line:1,column:120951},end:{line:1,column:120974}},line:1},"907":{name:"(anonymous_907)",decl:{start:{line:1,column:120974},end:{line:1,column:120975}},loc:{start:{line:1,column:120988},end:{line:1,column:120999}},line:1},"908":{name:"(anonymous_908)",decl:{start:{line:1,column:120999},end:{line:1,column:121000}},loc:{start:{line:1,column:121012},end:{line:1,column:121185}},line:1},"909":{name:"(anonymous_909)",decl:{start:{line:1,column:121185},end:{line:1,column:121186}},loc:{start:{line:1,column:121192},end:{line:1,column:121230}},line:1},"910":{name:"(anonymous_910)",decl:{start:{line:1,column:121230},end:{line:1,column:121231}},loc:{start:{line:1,column:121236},end:{line:1,column:121263}},line:1},"911":{name:"(anonymous_911)",decl:{start:{line:1,column:121263},end:{line:1,column:121264}},loc:{start:{line:1,column:121274},end:{line:1,column:121352}},line:1},"912":{name:"(anonymous_912)",decl:{start:{line:1,column:121352},end:{line:1,column:121353}},loc:{start:{line:1,column:121364},end:{line:1,column:121775}},line:1},"913":{name:"(anonymous_913)",decl:{start:{line:1,column:121775},end:{line:1,column:121776}},loc:{start:{line:1,column:121796},end:{line:1,column:121848}},line:1},"914":{name:"(anonymous_914)",decl:{start:{line:1,column:121831},end:{line:1,column:121832}},loc:{start:{line:1,column:121838},end:{line:1,column:121846}},line:1},"915":{name:"(anonymous_915)",decl:{start:{line:1,column:121848},end:{line:1,column:121849}},loc:{start:{line:1,column:121869},end:{line:1,column:122533}},line:1},"916":{name:"(anonymous_916)",decl:{start:{line:1,column:121938},end:{line:1,column:121939}},loc:{start:{line:1,column:121946},end:{line:1,column:121955}},line:1},"917":{name:"(anonymous_917)",decl:{start:{line:1,column:122000},end:{line:1,column:122001}},loc:{start:{line:1,column:122003},end:{line:1,column:122150}},line:1},"918":{name:"(anonymous_918)",decl:{start:{line:1,column:122158},end:{line:1,column:122159}},loc:{start:{line:1,column:122161},end:{line:1,column:122445}},line:1},"919":{name:"(anonymous_919)",decl:{start:{line:1,column:122451},end:{line:1,column:122452}},loc:{start:{line:1,column:122458},end:{line:1,column:122474}},line:1},"920":{name:"(anonymous_920)",decl:{start:{line:1,column:122480},end:{line:1,column:122481}},loc:{start:{line:1,column:122483},end:{line:1,column:122531}},line:1},"921":{name:"(anonymous_921)",decl:{start:{line:1,column:122533},end:{line:1,column:122534}},loc:{start:{line:1,column:122550},end:{line:1,column:122772}},line:1},"922":{name:"(anonymous_922)",decl:{start:{line:1,column:122621},end:{line:1,column:122622}},loc:{start:{line:1,column:122628},end:{line:1,column:122643}},line:1},"923":{name:"(anonymous_923)",decl:{start:{line:1,column:122772},end:{line:1,column:122773}},loc:{start:{line:1,column:122801},end:{line:1,column:122969}},line:1},"924":{name:"(anonymous_924)",decl:{start:{line:1,column:122891},end:{line:1,column:122892}},loc:{start:{line:1,column:122898},end:{line:1,column:122967}},line:1},"925":{name:"(anonymous_925)",decl:{start:{line:1,column:122908},end:{line:1,column:122909}},loc:{start:{line:1,column:122911},end:{line:1,column:122925}},line:1},"926":{name:"(anonymous_926)",decl:{start:{line:1,column:122969},end:{line:1,column:122970}},loc:{start:{line:1,column:122995},end:{line:1,column:123695}},line:1},"927":{name:"(anonymous_927)",decl:{start:{line:1,column:123695},end:{line:1,column:123696}},loc:{start:{line:1,column:123711},end:{line:1,column:123790}},line:1},"928":{name:"(anonymous_928)",decl:{start:{line:1,column:123733},end:{line:1,column:123734}},loc:{start:{line:1,column:123740},end:{line:1,column:123783}},line:1},"929":{name:"(anonymous_929)",decl:{start:{line:1,column:123790},end:{line:1,column:123791}},loc:{start:{line:1,column:123797},end:{line:1,column:123848}},line:1},"930":{name:"(anonymous_930)",decl:{start:{line:1,column:123848},end:{line:1,column:123849}},loc:{start:{line:1,column:123857},end:{line:1,column:124751}},line:1},"931":{name:"(anonymous_931)",decl:{start:{line:1,column:124518},end:{line:1,column:124519}},loc:{start:{line:1,column:124521},end:{line:1,column:124532}},line:1},"932":{name:"(anonymous_932)",decl:{start:{line:1,column:124751},end:{line:1,column:124752}},loc:{start:{line:1,column:124766},end:{line:1,column:124861}},line:1},"933":{name:"(anonymous_933)",decl:{start:{line:1,column:124781},end:{line:1,column:124782}},loc:{start:{line:1,column:124784},end:{line:1,column:124805}},line:1},"934":{name:"(anonymous_934)",decl:{start:{line:1,column:124861},end:{line:1,column:124862}},loc:{start:{line:1,column:124882},end:{line:1,column:125058}},line:1},"935":{name:"(anonymous_935)",decl:{start:{line:1,column:125058},end:{line:1,column:125059}},loc:{start:{line:1,column:125080},end:{line:1,column:125227}},line:1},"936":{name:"(anonymous_936)",decl:{start:{line:1,column:125227},end:{line:1,column:125228}},loc:{start:{line:1,column:125251},end:{line:1,column:125568}},line:1},"937":{name:"(anonymous_937)",decl:{start:{line:1,column:125355},end:{line:1,column:125356}},loc:{start:{line:1,column:125358},end:{line:1,column:125428}},line:1},"938":{name:"(anonymous_938)",decl:{start:{line:1,column:125375},end:{line:1,column:125376}},loc:{start:{line:1,column:125378},end:{line:1,column:125386}},line:1},"939":{name:"(anonymous_939)",decl:{start:{line:1,column:125392},end:{line:1,column:125393}},loc:{start:{line:1,column:125399},end:{line:1,column:125426}},line:1},"940":{name:"(anonymous_940)",decl:{start:{line:1,column:125503},end:{line:1,column:125504}},loc:{start:{line:1,column:125506},end:{line:1,column:125518}},line:1},"941":{name:"(anonymous_941)",decl:{start:{line:1,column:125524},end:{line:1,column:125525}},loc:{start:{line:1,column:125528},end:{line:1,column:125565}},line:1},"942":{name:"(anonymous_942)",decl:{start:{line:1,column:125568},end:{line:1,column:125569}},loc:{start:{line:1,column:125584},end:{line:1,column:125944}},line:1},"943":{name:"(anonymous_943)",decl:{start:{line:1,column:125767},end:{line:1,column:125768}},loc:{start:{line:1,column:125770},end:{line:1,column:125863}},line:1},"944":{name:"(anonymous_944)",decl:{start:{line:1,column:125891},end:{line:1,column:125892}},loc:{start:{line:1,column:125898},end:{line:1,column:125908}},line:1},"945":{name:"(anonymous_945)",decl:{start:{line:1,column:125944},end:{line:1,column:125945}},loc:{start:{line:1,column:125962},end:{line:1,column:126283}},line:1},"946":{name:"(anonymous_946)",decl:{start:{line:1,column:126283},end:{line:1,column:126284}},loc:{start:{line:1,column:126302},end:{line:1,column:126507}},line:1},"947":{name:"(anonymous_947)",decl:{start:{line:1,column:126507},end:{line:1,column:126508}},loc:{start:{line:1,column:126515},end:{line:1,column:126668}},line:1},"948":{name:"(anonymous_948)",decl:{start:{line:1,column:126668},end:{line:1,column:126669}},loc:{start:{line:1,column:126674},end:{line:1,column:127084}},line:1},"949":{name:"(anonymous_949)",decl:{start:{line:1,column:127084},end:{line:1,column:127085}},loc:{start:{line:1,column:127109},end:{line:1,column:127221}},line:1},"950":{name:"(anonymous_950)",decl:{start:{line:1,column:127221},end:{line:1,column:127222}},loc:{start:{line:1,column:127251},end:{line:1,column:127291}},line:1},"951":{name:"(anonymous_951)",decl:{start:{line:1,column:127291},end:{line:1,column:127292}},loc:{start:{line:1,column:127306},end:{line:1,column:127515}},line:1},"952":{name:"(anonymous_952)",decl:{start:{line:1,column:127515},end:{line:1,column:127516}},loc:{start:{line:1,column:127530},end:{line:1,column:127745}},line:1},"953":{name:"(anonymous_953)",decl:{start:{line:1,column:127745},end:{line:1,column:127746}},loc:{start:{line:1,column:127761},end:{line:1,column:127807}},line:1},"954":{name:"(anonymous_954)",decl:{start:{line:1,column:127807},end:{line:1,column:127808}},loc:{start:{line:1,column:127841},end:{line:1,column:127905}},line:1},"955":{name:"(anonymous_955)",decl:{start:{line:1,column:127905},end:{line:1,column:127906}},loc:{start:{line:1,column:127922},end:{line:1,column:128181}},line:1},"956":{name:"(anonymous_956)",decl:{start:{line:1,column:127979},end:{line:1,column:127980}},loc:{start:{line:1,column:127982},end:{line:1,column:127999}},line:1},"957":{name:"(anonymous_957)",decl:{start:{line:1,column:128181},end:{line:1,column:128182}},loc:{start:{line:1,column:128193},end:{line:1,column:128267}},line:1},"958":{name:"(anonymous_958)",decl:{start:{line:1,column:128267},end:{line:1,column:128268}},loc:{start:{line:1,column:128291},end:{line:1,column:128342}},line:1},"959":{name:"(anonymous_959)",decl:{start:{line:1,column:128342},end:{line:1,column:128343}},loc:{start:{line:1,column:128361},end:{line:1,column:128488}},line:1},"960":{name:"(anonymous_960)",decl:{start:{line:1,column:128488},end:{line:1,column:128489}},loc:{start:{line:1,column:128513},end:{line:1,column:128555}},line:1},"961":{name:"(anonymous_961)",decl:{start:{line:1,column:128555},end:{line:1,column:128556}},loc:{start:{line:1,column:128578},end:{line:1,column:128626}},line:1},"962":{name:"(anonymous_962)",decl:{start:{line:1,column:128626},end:{line:1,column:128627}},loc:{start:{line:1,column:128646},end:{line:1,column:128677}},line:1},"963":{name:"(anonymous_963)",decl:{start:{line:1,column:128677},end:{line:1,column:128678}},loc:{start:{line:1,column:128701},end:{line:1,column:128936}},line:1},"964":{name:"(anonymous_964)",decl:{start:{line:1,column:128903},end:{line:1,column:128904}},loc:{start:{line:1,column:128906},end:{line:1,column:128933}},line:1},"965":{name:"(anonymous_965)",decl:{start:{line:1,column:128936},end:{line:1,column:128937}},loc:{start:{line:1,column:128945},end:{line:1,column:128977}},line:1},"966":{name:"(anonymous_966)",decl:{start:{line:1,column:128977},end:{line:1,column:128978}},loc:{start:{line:1,column:128986},end:{line:1,column:129018}},line:1},"967":{name:"(anonymous_967)",decl:{start:{line:1,column:129018},end:{line:1,column:129019}},loc:{start:{line:1,column:129040},end:{line:1,column:129131}},line:1},"968":{name:"(anonymous_968)",decl:{start:{line:1,column:129131},end:{line:1,column:129132}},loc:{start:{line:1,column:129138},end:{line:1,column:129247}},line:1},"969":{name:"(anonymous_969)",decl:{start:{line:1,column:129247},end:{line:1,column:129248}},loc:{start:{line:1,column:129256},end:{line:1,column:129506}},line:1},"970":{name:"(anonymous_970)",decl:{start:{line:1,column:129506},end:{line:1,column:129507}},loc:{start:{line:1,column:129525},end:{line:1,column:129561}},line:1},"971":{name:"(anonymous_971)",decl:{start:{line:1,column:129561},end:{line:1,column:129562}},loc:{start:{line:1,column:129573},end:{line:1,column:129665}},line:1},"972":{name:"(anonymous_972)",decl:{start:{line:1,column:129665},end:{line:1,column:129666}},loc:{start:{line:1,column:129681},end:{line:1,column:129859}},line:1},"973":{name:"(anonymous_973)",decl:{start:{line:1,column:129722},end:{line:1,column:129723}},loc:{start:{line:1,column:129729},end:{line:1,column:129766}},line:1},"974":{name:"(anonymous_974)",decl:{start:{line:1,column:129769},end:{line:1,column:129770}},loc:{start:{line:1,column:129778},end:{line:1,column:129825}},line:1},"975":{name:"(anonymous_975)",decl:{start:{line:1,column:129848},end:{line:1,column:129849}},loc:{start:{line:1,column:129851},end:{line:1,column:129857}},line:1},"976":{name:"(anonymous_976)",decl:{start:{line:1,column:129859},end:{line:1,column:129860}},loc:{start:{line:1,column:129881},end:{line:1,column:130340}},line:1},"977":{name:"(anonymous_977)",decl:{start:{line:1,column:129990},end:{line:1,column:129991}},loc:{start:{line:1,column:129997},end:{line:1,column:130034}},line:1},"978":{name:"(anonymous_978)",decl:{start:{line:1,column:130037},end:{line:1,column:130038}},loc:{start:{line:1,column:130044},end:{line:1,column:130097}},line:1},"979":{name:"(anonymous_979)",decl:{start:{line:1,column:130100},end:{line:1,column:130101}},loc:{start:{line:1,column:130107},end:{line:1,column:130138}},line:1},"980":{name:"(anonymous_980)",decl:{start:{line:1,column:130143},end:{line:1,column:130144}},loc:{start:{line:1,column:130147},end:{line:1,column:130221}},line:1},"981":{name:"(anonymous_981)",decl:{start:{line:1,column:130224},end:{line:1,column:130225}},loc:{start:{line:1,column:130228},end:{line:1,column:130305}},line:1},"982":{name:"(anonymous_982)",decl:{start:{line:1,column:130340},end:{line:1,column:130341}},loc:{start:{line:1,column:130354},end:{line:1,column:130561}},line:1},"983":{name:"(anonymous_983)",decl:{start:{line:1,column:130373},end:{line:1,column:130374}},loc:{start:{line:1,column:130380},end:{line:1,column:130425}},line:1},"984":{name:"(anonymous_984)",decl:{start:{line:1,column:130474},end:{line:1,column:130475}},loc:{start:{line:1,column:130481},end:{line:1,column:130526}},line:1},"985":{name:"(anonymous_985)",decl:{start:{line:1,column:130561},end:{line:1,column:130562}},loc:{start:{line:1,column:130584},end:{line:1,column:130863}},line:1},"986":{name:"(anonymous_986)",decl:{start:{line:1,column:130863},end:{line:1,column:130864}},loc:{start:{line:1,column:130882},end:{line:1,column:130907}},line:1},"987":{name:"(anonymous_987)",decl:{start:{line:1,column:130907},end:{line:1,column:130908}},loc:{start:{line:1,column:130927},end:{line:1,column:131199}},line:1},"988":{name:"(anonymous_988)",decl:{start:{line:1,column:130959},end:{line:1,column:130960}},loc:{start:{line:1,column:130987},end:{line:1,column:131120}},line:1},"989":{name:"(anonymous_989)",decl:{start:{line:1,column:131199},end:{line:1,column:131200}},loc:{start:{line:1,column:131219},end:{line:1,column:131260}},line:1},"990":{name:"(anonymous_990)",decl:{start:{line:1,column:131260},end:{line:1,column:131261}},loc:{start:{line:1,column:131278},end:{line:1,column:131345}},line:1},"991":{name:"(anonymous_991)",decl:{start:{line:1,column:131314},end:{line:1,column:131315}},loc:{start:{line:1,column:131317},end:{line:1,column:131332}},line:1},"992":{name:"(anonymous_992)",decl:{start:{line:1,column:131345},end:{line:1,column:131346}},loc:{start:{line:1,column:131370},end:{line:1,column:131601}},line:1},"993":{name:"(anonymous_993)",decl:{start:{line:1,column:131398},end:{line:1,column:131399}},loc:{start:{line:1,column:131405},end:{line:1,column:131480}},line:1},"994":{name:"(anonymous_994)",decl:{start:{line:1,column:131414},end:{line:1,column:131415}},loc:{start:{line:1,column:131417},end:{line:1,column:131479}},line:1},"995":{name:"(anonymous_995)",decl:{start:{line:1,column:131425},end:{line:1,column:131426}},loc:{start:{line:1,column:131428},end:{line:1,column:131478}},line:1},"996":{name:"(anonymous_996)",decl:{start:{line:1,column:131601},end:{line:1,column:131602}},loc:{start:{line:1,column:131619},end:{line:1,column:131953}},line:1},"997":{name:"(anonymous_997)",decl:{start:{line:1,column:131695},end:{line:1,column:131696}},loc:{start:{line:1,column:131698},end:{line:1,column:131761}},line:1},"998":{name:"(anonymous_998)",decl:{start:{line:1,column:131953},end:{line:1,column:131954}},loc:{start:{line:1,column:131972},end:{line:1,column:132265}},line:1},"999":{name:"(anonymous_999)",decl:{start:{line:1,column:132265},end:{line:1,column:132266}},loc:{start:{line:1,column:132292},end:{line:1,column:132417}},line:1},"1000":{name:"ao",decl:{start:{line:1,column:132440},end:{line:1,column:132442}},loc:{start:{line:1,column:132444},end:{line:1,column:132495}},line:1},"1001":{name:"(anonymous_1001)",decl:{start:{line:1,column:132467},end:{line:1,column:132468}},loc:{start:{line:1,column:132470},end:{line:1,column:132493}},line:1},"1002":{name:"oc",decl:{start:{line:1,column:132504},end:{line:1,column:132506}},loc:{start:{line:1,column:132513},end:{line:1,column:133067}},line:1},"1003":{name:"rc",decl:{start:{line:1,column:133076},end:{line:1,column:133078}},loc:{start:{line:1,column:133085},end:{line:1,column:133277}},line:1},"1004":{name:"ac",decl:{start:{line:1,column:133286},end:{line:1,column:133288}},loc:{start:{line:1,column:133291},end:{line:1,column:133355}},line:1},"1005":{name:"lc",decl:{start:{line:1,column:133364},end:{line:1,column:133366}},loc:{start:{line:1,column:133375},end:{line:1,column:133618}},line:1},"1006":{name:"(anonymous_1006)",decl:{start:{line:1,column:133441},end:{line:1,column:133442}},loc:{start:{line:1,column:133444},end:{line:1,column:133501}},line:1},"1007":{name:"ee",decl:{start:{line:1,column:133627},end:{line:1,column:133629}},loc:{start:{line:1,column:133638},end:{line:1,column:133683}},line:1},"1008":{name:"ai",decl:{start:{line:1,column:133692},end:{line:1,column:133694}},loc:{start:{line:1,column:133707},end:{line:1,column:134651}},line:1},"1009":{name:"cc",decl:{start:{line:1,column:134660},end:{line:1,column:134662}},loc:{start:{line:1,column:134673},end:{line:1,column:134847}},line:1},"1010":{name:"hc",decl:{start:{line:1,column:134856},end:{line:1,column:134858}},loc:{start:{line:1,column:134869},end:{line:1,column:135362}},line:1},"1011":{name:"(anonymous_1011)",decl:{start:{line:1,column:135704},end:{line:1,column:135705}},loc:{start:{line:1,column:135707},end:{line:1,column:135723}},line:1},"1012":{name:"(anonymous_1012)",decl:{start:{line:1,column:135807},end:{line:1,column:135808}},loc:{start:{line:1,column:135821},end:{line:1,column:136031}},line:1},"1013":{name:"(anonymous_1013)",decl:{start:{line:1,column:136031},end:{line:1,column:136032}},loc:{start:{line:1,column:136045},end:{line:1,column:136393}},line:1},"1014":{name:"(anonymous_1014)",decl:{start:{line:1,column:136393},end:{line:1,column:136394}},loc:{start:{line:1,column:136410},end:{line:1,column:136657}},line:1},"1015":{name:"(anonymous_1015)",decl:{start:{line:1,column:136657},end:{line:1,column:136658}},loc:{start:{line:1,column:136675},end:{line:1,column:136706}},line:1},"1016":{name:"(anonymous_1016)",decl:{start:{line:1,column:136706},end:{line:1,column:136707}},loc:{start:{line:1,column:136713},end:{line:1,column:137177}},line:1},"1017":{name:"Uo",decl:{start:{line:1,column:137188},end:{line:1,column:137190}},loc:{start:{line:1,column:137199},end:{line:1,column:137487}},line:1},"1018":{name:"dc",decl:{start:{line:1,column:137496},end:{line:1,column:137498}},loc:{start:{line:1,column:137505},end:{line:1,column:137524}},line:1},"1019":{name:"fc",decl:{start:{line:1,column:137533},end:{line:1,column:137535}},loc:{start:{line:1,column:137538},end:{line:1,column:137614}},line:1},"1020":{name:"Xo",decl:{start:{line:1,column:137623},end:{line:1,column:137625}},loc:{start:{line:1,column:137635},end:{line:1,column:137805}},line:1},"1021":{name:"uc",decl:{start:{line:1,column:137814},end:{line:1,column:137816}},loc:{start:{line:1,column:137825},end:{line:1,column:138093}},line:1},"1022":{name:"gc",decl:{start:{line:1,column:138102},end:{line:1,column:138104}},loc:{start:{line:1,column:138113},end:{line:1,column:138477}},line:1},"1023":{name:"(anonymous_1023)",decl:{start:{line:1,column:138214},end:{line:1,column:138215}},loc:{start:{line:1,column:138217},end:{line:1,column:138232}},line:1},"1024":{name:"(anonymous_1024)",decl:{start:{line:1,column:138235},end:{line:1,column:138236}},loc:{start:{line:1,column:138239},end:{line:1,column:138291}},line:1},"1025":{name:"_s",decl:{start:{line:1,column:138486},end:{line:1,column:138488}},loc:{start:{line:1,column:138491},end:{line:1,column:138647}},line:1},"1026":{name:"pc",decl:{start:{line:1,column:138656},end:{line:1,column:138658}},loc:{start:{line:1,column:138661},end:{line:1,column:138737}},line:1},"1027":{name:"mc",decl:{start:{line:1,column:138746},end:{line:1,column:138748}},loc:{start:{line:1,column:138757},end:{line:1,column:138855}},line:1},"1028":{name:"bc",decl:{start:{line:1,column:138864},end:{line:1,column:138866}},loc:{start:{line:1,column:138875},end:{line:1,column:139012}},line:1},"1029":{name:"_c",decl:{start:{line:1,column:139054},end:{line:1,column:139056}},loc:{start:{line:1,column:139065},end:{line:1,column:139113}},line:1},"1030":{name:"(anonymous_1030)",decl:{start:{line:1,column:139121},end:{line:1,column:139122}},loc:{start:{line:1,column:139125},end:{line:1,column:141100}},line:1},"1031":{name:"(anonymous_1031)",decl:{start:{line:1,column:139495},end:{line:1,column:139496}},loc:{start:{line:1,column:139498},end:{line:1,column:139526}},line:1},"1032":{name:"(anonymous_1032)",decl:{start:{line:1,column:139528},end:{line:1,column:139529}},loc:{start:{line:1,column:139542},end:{line:1,column:139800}},line:1},"1033":{name:"(anonymous_1033)",decl:{start:{line:1,column:139800},end:{line:1,column:139801}},loc:{start:{line:1,column:139824},end:{line:1,column:140025}},line:1},"1034":{name:"(anonymous_1034)",decl:{start:{line:1,column:140025},end:{line:1,column:140026}},loc:{start:{line:1,column:140038},end:{line:1,column:140117}},line:1},"1035":{name:"(anonymous_1035)",decl:{start:{line:1,column:140117},end:{line:1,column:140118}},loc:{start:{line:1,column:140129},end:{line:1,column:140150}},line:1},"1036":{name:"(anonymous_1036)",decl:{start:{line:1,column:140150},end:{line:1,column:140151}},loc:{start:{line:1,column:140164},end:{line:1,column:140235}},line:1},"1037":{name:"(anonymous_1037)",decl:{start:{line:1,column:140235},end:{line:1,column:140236}},loc:{start:{line:1,column:140242},end:{line:1,column:140308}},line:1},"1038":{name:"(anonymous_1038)",decl:{start:{line:1,column:140308},end:{line:1,column:140309}},loc:{start:{line:1,column:140314},end:{line:1,column:140384}},line:1},"1039":{name:"(anonymous_1039)",decl:{start:{line:1,column:140384},end:{line:1,column:140385}},loc:{start:{line:1,column:140400},end:{line:1,column:140720}},line:1},"1040":{name:"(anonymous_1040)",decl:{start:{line:1,column:140720},end:{line:1,column:140721}},loc:{start:{line:1,column:140738},end:{line:1,column:140767}},line:1},"1041":{name:"(anonymous_1041)",decl:{start:{line:1,column:140767},end:{line:1,column:140768}},loc:{start:{line:1,column:140778},end:{line:1,column:140916}},line:1},"1042":{name:"(anonymous_1042)",decl:{start:{line:1,column:140916},end:{line:1,column:140917}},loc:{start:{line:1,column:140929},end:{line:1,column:141090}},line:1},"1043":{name:"lo",decl:{start:{line:1,column:141113},end:{line:1,column:141115}},loc:{start:{line:1,column:141124},end:{line:1,column:141209}},line:1},"1044":{name:"(anonymous_1044)",decl:{start:{line:1,column:141217},end:{line:1,column:141218}},loc:{start:{line:1,column:141221},end:{line:1,column:142273}},line:1},"1045":{name:"(anonymous_1045)",decl:{start:{line:1,column:141476},end:{line:1,column:141477}},loc:{start:{line:1,column:141490},end:{line:1,column:141597}},line:1},"1046":{name:"(anonymous_1046)",decl:{start:{line:1,column:141597},end:{line:1,column:141598}},loc:{start:{line:1,column:141611},end:{line:1,column:141740}},line:1},"1047":{name:"(anonymous_1047)",decl:{start:{line:1,column:141740},end:{line:1,column:141741}},loc:{start:{line:1,column:141753},end:{line:1,column:141778}},line:1},"1048":{name:"(anonymous_1048)",decl:{start:{line:1,column:141778},end:{line:1,column:141779}},loc:{start:{line:1,column:141791},end:{line:1,column:141816}},line:1},"1049":{name:"(anonymous_1049)",decl:{start:{line:1,column:141816},end:{line:1,column:141817}},loc:{start:{line:1,column:141833},end:{line:1,column:141890}},line:1},"1050":{name:"(anonymous_1050)",decl:{start:{line:1,column:141890},end:{line:1,column:141891}},loc:{start:{line:1,column:141897},end:{line:1,column:142012}},line:1},"1051":{name:"(anonymous_1051)",decl:{start:{line:1,column:142012},end:{line:1,column:142013}},loc:{start:{line:1,column:142021},end:{line:1,column:142201}},line:1},"1052":{name:"(anonymous_1052)",decl:{start:{line:1,column:142201},end:{line:1,column:142202}},loc:{start:{line:1,column:142211},end:{line:1,column:142263}},line:1},"1053":{name:"Ko",decl:{start:{line:1,column:142286},end:{line:1,column:142288}},loc:{start:{line:1,column:142293},end:{line:1,column:142545}},line:1},"1054":{name:"Dt",decl:{start:{line:1,column:142554},end:{line:1,column:142556}},loc:{start:{line:1,column:142565},end:{line:1,column:142586}},line:1},"1055":{name:"vc",decl:{start:{line:1,column:142595},end:{line:1,column:142597}},loc:{start:{line:1,column:142604},end:{line:1,column:142767}},line:1},"1056":{name:"Mc",decl:{start:{line:1,column:142776},end:{line:1,column:142778}},loc:{start:{line:1,column:142785},end:{line:1,column:143132}},line:1},"1057":{name:"kc",decl:{start:{line:1,column:143141},end:{line:1,column:143143}},loc:{start:{line:1,column:143146},end:{line:1,column:143549}},line:1},"1058":{name:"ns",decl:{start:{line:1,column:143558},end:{line:1,column:143560}},loc:{start:{line:1,column:143569},end:{line:1,column:143681}},line:1},"1059":{name:"Sc",decl:{start:{line:1,column:143690},end:{line:1,column:143692}},loc:{start:{line:1,column:143695},end:{line:1,column:143754}},line:1},"1060":{name:"wc",decl:{start:{line:1,column:143763},end:{line:1,column:143765}},loc:{start:{line:1,column:143770},end:{line:1,column:143795}},line:1},"1061":{name:"os",decl:{start:{line:1,column:143804},end:{line:1,column:143806}},loc:{start:{line:1,column:143816},end:{line:1,column:143967}},line:1},"1062":{name:"(anonymous_1062)",decl:{start:{line:1,column:144198},end:{line:1,column:144199}},loc:{start:{line:1,column:144212},end:{line:1,column:144369}},line:1},"1063":{name:"(anonymous_1063)",decl:{start:{line:1,column:144369},end:{line:1,column:144370}},loc:{start:{line:1,column:144376},end:{line:1,column:144676}},line:1},"1064":{name:"(anonymous_1064)",decl:{start:{line:1,column:144676},end:{line:1,column:144677}},loc:{start:{line:1,column:144690},end:{line:1,column:144713}},line:1},"1065":{name:"(anonymous_1065)",decl:{start:{line:1,column:144713},end:{line:1,column:144714}},loc:{start:{line:1,column:144726},end:{line:1,column:144752}},line:1},"1066":{name:"(anonymous_1066)",decl:{start:{line:1,column:144752},end:{line:1,column:144753}},loc:{start:{line:1,column:144765},end:{line:1,column:144791}},line:1},"1067":{name:"(anonymous_1067)",decl:{start:{line:1,column:144791},end:{line:1,column:144792}},loc:{start:{line:1,column:144808},end:{line:1,column:144925}},line:1},"1068":{name:"(anonymous_1068)",decl:{start:{line:1,column:144925},end:{line:1,column:144926}},loc:{start:{line:1,column:144936},end:{line:1,column:144979}},line:1},"1069":{name:"(anonymous_1069)",decl:{start:{line:1,column:145232},end:{line:1,column:145233}},loc:{start:{line:1,column:145235},end:{line:1,column:145282}},line:1},"1070":{name:"qo",decl:{start:{line:1,column:145293},end:{line:1,column:145295}},loc:{start:{line:1,column:145298},end:{line:1,column:145322}},line:1},"1071":{name:"Go",decl:{start:{line:1,column:145331},end:{line:1,column:145333}},loc:{start:{line:1,column:145336},end:{line:1,column:145360}},line:1},"1072":{name:"Pc",decl:{start:{line:1,column:145369},end:{line:1,column:145371}},loc:{start:{line:1,column:145376},end:{line:1,column:145432}},line:1},"1073":{name:"Dc",decl:{start:{line:1,column:145441},end:{line:1,column:145443}},loc:{start:{line:1,column:145448},end:{line:1,column:145500}},line:1},"1074":{name:"(anonymous_1074)",decl:{start:{line:1,column:145485},end:{line:1,column:145486}},loc:{start:{line:1,column:145489},end:{line:1,column:145496}},line:1},"1075":{name:"Oc",decl:{start:{line:1,column:145509},end:{line:1,column:145511}},loc:{start:{line:1,column:145516},end:{line:1,column:145568}},line:1},"1076":{name:"(anonymous_1076)",decl:{start:{line:1,column:145553},end:{line:1,column:145554}},loc:{start:{line:1,column:145557},end:{line:1,column:145564}},line:1},"1077":{name:"Ac",decl:{start:{line:1,column:145577},end:{line:1,column:145579}},loc:{start:{line:1,column:145582},end:{line:1,column:145710}},line:1},"1078":{name:"(anonymous_1078)",decl:{start:{line:1,column:145597},end:{line:1,column:145598}},loc:{start:{line:1,column:145604},end:{line:1,column:145709}},line:1},"1079":{name:"ho",decl:{start:{line:1,column:145719},end:{line:1,column:145721}},loc:{start:{line:1,column:145724},end:{line:1,column:145802}},line:1},"1080":{name:"Tc",decl:{start:{line:1,column:145811},end:{line:1,column:145813}},loc:{start:{line:1,column:145816},end:{line:1,column:145862}},line:1},"1081":{name:"Lc",decl:{start:{line:1,column:145871},end:{line:1,column:145873}},loc:{start:{line:1,column:145875},end:{line:1,column:145956}},line:1},"1082":{name:"(anonymous_1082)",decl:{start:{line:1,column:146015},end:{line:1,column:146016}},loc:{start:{line:1,column:146034},end:{line:1,column:146199}},line:1},"1083":{name:"Ec",decl:{start:{line:1,column:146210},end:{line:1,column:146212}},loc:{start:{line:1,column:146223},end:{line:1,column:146690}},line:1},"1084":{name:"Ic",decl:{start:{line:1,column:146699},end:{line:1,column:146701}},loc:{start:{line:1,column:146710},end:{line:1,column:147109}},line:1},"1085":{name:"Jo",decl:{start:{line:1,column:147118},end:{line:1,column:147120}},loc:{start:{line:1,column:147123},end:{line:1,column:147275}},line:1},"1086":{name:"fo",decl:{start:{line:1,column:147284},end:{line:1,column:147286}},loc:{start:{line:1,column:147289},end:{line:1,column:147326}},line:1},"1087":{name:"(anonymous_1087)",decl:{start:{line:1,column:147314},end:{line:1,column:147315}},loc:{start:{line:1,column:147317},end:{line:1,column:147324}},line:1},"1088":{name:"Fc",decl:{start:{line:1,column:147335},end:{line:1,column:147337}},loc:{start:{line:1,column:147342},end:{line:1,column:147533}},line:1},"1089":{name:"(anonymous_1089)",decl:{start:{line:1,column:147620},end:{line:1,column:147621}},loc:{start:{line:1,column:147629},end:{line:1,column:148355}},line:1},"1090":{name:"(anonymous_1090)",decl:{start:{line:1,column:147696},end:{line:1,column:147697}},loc:{start:{line:1,column:147703},end:{line:1,column:148353}},line:1},"1091":{name:"(anonymous_1091)",decl:{start:{line:1,column:148100},end:{line:1,column:148101}},loc:{start:{line:1,column:148110},end:{line:1,column:148134}},line:1},"1092":{name:"(anonymous_1092)",decl:{start:{line:1,column:148139},end:{line:1,column:148140}},loc:{start:{line:1,column:148150},end:{line:1,column:148164}},line:1},"1093":{name:"(anonymous_1093)",decl:{start:{line:1,column:148356},end:{line:1,column:148357}},loc:{start:{line:1,column:148366},end:{line:1,column:148373}},line:1},"1094":{name:"Bc",decl:{start:{line:1,column:148384},end:{line:1,column:148386}},loc:{start:{line:1,column:148393},end:{line:1,column:148793}},line:1},"1095":{name:"Ms",decl:{start:{line:1,column:148802},end:{line:1,column:148804}},loc:{start:{line:1,column:148813},end:{line:1,column:148907}},line:1},"1096":{name:"Wc",decl:{start:{line:1,column:148916},end:{line:1,column:148918}},loc:{start:{line:1,column:148923},end:{line:1,column:149152}},line:1},"1097":{name:"(anonymous_1097)",decl:{start:{line:1,column:148995},end:{line:1,column:148996}},loc:{start:{line:1,column:149014},end:{line:1,column:149148}},line:1},"1098":{name:"fi",decl:{start:{line:1,column:149161},end:{line:1,column:149163}},loc:{start:{line:1,column:149170},end:{line:1,column:149239}},line:1},"1099":{name:"uo",decl:{start:{line:1,column:149248},end:{line:1,column:149250}},loc:{start:{line:1,column:149259},end:{line:1,column:149301}},line:1},"1100":{name:"Zo",decl:{start:{line:1,column:149310},end:{line:1,column:149312}},loc:{start:{line:1,column:149317},end:{line:1,column:149438}},line:1},"1101":{name:"go",decl:{start:{line:1,column:149447},end:{line:1,column:149449}},loc:{start:{line:1,column:149452},end:{line:1,column:149475}},line:1},"1102":{name:"Nc",decl:{start:{line:1,column:149484},end:{line:1,column:149486}},loc:{start:{line:1,column:149493},end:{line:1,column:149656}},line:1},"1103":{name:"Vc",decl:{start:{line:1,column:149665},end:{line:1,column:149667}},loc:{start:{line:1,column:149674},end:{line:1,column:149846}},line:1},"1104":{name:"Hc",decl:{start:{line:1,column:149855},end:{line:1,column:149857}},loc:{start:{line:1,column:149866},end:{line:1,column:149923}},line:1},"1105":{name:"jc",decl:{start:{line:1,column:149932},end:{line:1,column:149934}},loc:{start:{line:1,column:149939},end:{line:1,column:150073}},line:1},"1106":{name:"Yc",decl:{start:{line:1,column:150082},end:{line:1,column:150084}},loc:{start:{line:1,column:150091},end:{line:1,column:150199}},line:1},"1107":{name:"$c",decl:{start:{line:1,column:150208},end:{line:1,column:150210}},loc:{start:{line:1,column:150213},end:{line:1,column:150339}},line:1},"1108":{name:"Uc",decl:{start:{line:1,column:150348},end:{line:1,column:150350}},loc:{start:{line:1,column:150353},end:{line:1,column:150577}},line:1},"1109":{name:"Xc",decl:{start:{line:1,column:150586},end:{line:1,column:150588}},loc:{start:{line:1,column:150593},end:{line:1,column:150739}},line:1},"1110":{name:"Kc",decl:{start:{line:1,column:150748},end:{line:1,column:150750}},loc:{start:{line:1,column:150757},end:{line:1,column:150918}},line:1},"1111":{name:"qc",decl:{start:{line:1,column:150927},end:{line:1,column:150929}},loc:{start:{line:1,column:150936},end:{line:1,column:151159}},line:1},"1112":{name:"(anonymous_1112)",decl:{start:{line:1,column:151172},end:{line:1,column:151173}},loc:{start:{line:1,column:151186},end:{line:1,column:151230}},line:1},"1113":{name:"(anonymous_1113)",decl:{start:{line:1,column:151230},end:{line:1,column:151231}},loc:{start:{line:1,column:151248},end:{line:1,column:151344}},line:1},"1114":{name:"(anonymous_1114)",decl:{start:{line:1,column:151344},end:{line:1,column:151345}},loc:{start:{line:1,column:151358},end:{line:1,column:151448}},line:1},"1115":{name:"Gc",decl:{start:{line:1,column:151459},end:{line:1,column:151461}},loc:{start:{line:1,column:151464},end:{line:1,column:151614}},line:1},"1116":{name:"Jc",decl:{start:{line:1,column:151623},end:{line:1,column:151625}},loc:{start:{line:1,column:151630},end:{line:1,column:151704}},line:1},"1117":{name:"Zc",decl:{start:{line:1,column:151713},end:{line:1,column:151715}},loc:{start:{line:1,column:151718},end:{line:1,column:151776}},line:1},"1118":{name:"Qc",decl:{start:{line:1,column:151785},end:{line:1,column:151787}},loc:{start:{line:1,column:151790},end:{line:1,column:151900}},line:1},"1119":{name:"th",decl:{start:{line:1,column:151909},end:{line:1,column:151911}},loc:{start:{line:1,column:151914},end:{line:1,column:152211}},line:1},"1120":{name:"rs",decl:{start:{line:1,column:152220},end:{line:1,column:152222}},loc:{start:{line:1,column:152229},end:{line:1,column:152490}},line:1},"1121":{name:"eh",decl:{start:{line:1,column:152499},end:{line:1,column:152501}},loc:{start:{line:1,column:152506},end:{line:1,column:152934}},line:1},"1122":{name:"po",decl:{start:{line:1,column:152943},end:{line:1,column:152945}},loc:{start:{line:1,column:152952},end:{line:1,column:153237}},line:1},"1123":{name:"mo",decl:{start:{line:1,column:153246},end:{line:1,column:153248}},loc:{start:{line:1,column:153255},end:{line:1,column:153540}},line:1},"1124":{name:"as",decl:{start:{line:1,column:153549},end:{line:1,column:153551}},loc:{start:{line:1,column:153556},end:{line:1,column:153968}},line:1},"1125":{name:"ih",decl:{start:{line:1,column:153977},end:{line:1,column:153979}},loc:{start:{line:1,column:153988},end:{line:1,column:154280}},line:1},"1126":{name:"bo",decl:{start:{line:1,column:154289},end:{line:1,column:154291}},loc:{start:{line:1,column:154300},end:{line:1,column:154347}},line:1},"1127":{name:"(anonymous_1127)",decl:{start:{line:1,column:154367},end:{line:1,column:154368}},loc:{start:{line:1,column:154393},end:{line:1,column:154749}},line:1},"1128":{name:"(anonymous_1128)",decl:{start:{line:1,column:154750},end:{line:1,column:154751}},loc:{start:{line:1,column:154767},end:{line:1,column:154967}},line:1},"1129":{name:"(anonymous_1129)",decl:{start:{line:1,column:154968},end:{line:1,column:154969}},loc:{start:{line:1,column:154993},end:{line:1,column:155159}},line:1},"1130":{name:"(anonymous_1130)",decl:{start:{line:1,column:155160},end:{line:1,column:155161}},loc:{start:{line:1,column:155184},end:{line:1,column:155272}},line:1},"1131":{name:"(anonymous_1131)",decl:{start:{line:1,column:155330},end:{line:1,column:155331}},loc:{start:{line:1,column:155337},end:{line:1,column:155499}},line:1},"1132":{name:"(anonymous_1132)",decl:{start:{line:1,column:155503},end:{line:1,column:155504}},loc:{start:{line:1,column:155510},end:{line:1,column:155580}},line:1},"1133":{name:"(anonymous_1133)",decl:{start:{line:1,column:155601},end:{line:1,column:155602}},loc:{start:{line:1,column:155615},end:{line:1,column:156066}},line:1},"1134":{name:"(anonymous_1134)",decl:{start:{line:1,column:156066},end:{line:1,column:156067}},loc:{start:{line:1,column:156079},end:{line:1,column:156180}},line:1},"1135":{name:"(anonymous_1135)",decl:{start:{line:1,column:156180},end:{line:1,column:156181}},loc:{start:{line:1,column:156195},end:{line:1,column:156374}},line:1},"1136":{name:"(anonymous_1136)",decl:{start:{line:1,column:156374},end:{line:1,column:156375}},loc:{start:{line:1,column:156387},end:{line:1,column:156625}},line:1},"1137":{name:"(anonymous_1137)",decl:{start:{line:1,column:156484},end:{line:1,column:156485}},loc:{start:{line:1,column:156487},end:{line:1,column:156514}},line:1},"1138":{name:"(anonymous_1138)",decl:{start:{line:1,column:156535},end:{line:1,column:156536}},loc:{start:{line:1,column:156542},end:{line:1,column:156569}},line:1},"1139":{name:"(anonymous_1139)",decl:{start:{line:1,column:156625},end:{line:1,column:156626}},loc:{start:{line:1,column:156630},end:{line:1,column:157037}},line:1},"1140":{name:"(anonymous_1140)",decl:{start:{line:1,column:157037},end:{line:1,column:157038}},loc:{start:{line:1,column:157054},end:{line:1,column:157443}},line:1},"1141":{name:"(anonymous_1141)",decl:{start:{line:1,column:157257},end:{line:1,column:157258}},loc:{start:{line:1,column:157264},end:{line:1,column:157439}},line:1},"1142":{name:"(anonymous_1142)",decl:{start:{line:1,column:157443},end:{line:1,column:157444}},loc:{start:{line:1,column:157460},end:{line:1,column:157846}},line:1},"1143":{name:"(anonymous_1143)",decl:{start:{line:1,column:157623},end:{line:1,column:157624}},loc:{start:{line:1,column:157630},end:{line:1,column:157810}},line:1},"1144":{name:"(anonymous_1144)",decl:{start:{line:1,column:157846},end:{line:1,column:157847}},loc:{start:{line:1,column:157862},end:{line:1,column:158510}},line:1},"1145":{name:"(anonymous_1145)",decl:{start:{line:1,column:158510},end:{line:1,column:158511}},loc:{start:{line:1,column:158524},end:{line:1,column:158596}},line:1},"1146":{name:"(anonymous_1146)",decl:{start:{line:1,column:158596},end:{line:1,column:158597}},loc:{start:{line:1,column:158602},end:{line:1,column:158674}},line:1},"1147":{name:"(anonymous_1147)",decl:{start:{line:1,column:158674},end:{line:1,column:158675}},loc:{start:{line:1,column:158681},end:{line:1,column:160606}},line:1},"1148":{name:"(anonymous_1148)",decl:{start:{line:1,column:158997},end:{line:1,column:158998}},loc:{start:{line:1,column:159012},end:{line:1,column:159667}},line:1},"1149":{name:"(anonymous_1149)",decl:{start:{line:1,column:159569},end:{line:1,column:159570}},loc:{start:{line:1,column:159572},end:{line:1,column:159577}},line:1},"1150":{name:"(anonymous_1150)",decl:{start:{line:1,column:159670},end:{line:1,column:159671}},loc:{start:{line:1,column:159685},end:{line:1,column:159769}},line:1},"1151":{name:"(anonymous_1151)",decl:{start:{line:1,column:160017},end:{line:1,column:160018}},loc:{start:{line:1,column:160024},end:{line:1,column:160575}},line:1},"1152":{name:"(anonymous_1152)",decl:{start:{line:1,column:160606},end:{line:1,column:160607}},loc:{start:{line:1,column:160617},end:{line:1,column:161196}},line:1},"1153":{name:"(anonymous_1153)",decl:{start:{line:1,column:160934},end:{line:1,column:160935}},loc:{start:{line:1,column:160941},end:{line:1,column:160961}},line:1},"1154":{name:"(anonymous_1154)",decl:{start:{line:1,column:161196},end:{line:1,column:161197}},loc:{start:{line:1,column:161217},end:{line:1,column:161311}},line:1},"1155":{name:"(anonymous_1155)",decl:{start:{line:1,column:161311},end:{line:1,column:161312}},loc:{start:{line:1,column:161332},end:{line:1,column:161552}},line:1},"1156":{name:"(anonymous_1156)",decl:{start:{line:1,column:161552},end:{line:1,column:161553}},loc:{start:{line:1,column:161566},end:{line:1,column:161856}},line:1},"1157":{name:"oh",decl:{start:{line:1,column:161867},end:{line:1,column:161869}},loc:{start:{line:1,column:161880},end:{line:1,column:161955}},line:1},"1158":{name:"rh",decl:{start:{line:1,column:161964},end:{line:1,column:161966}},loc:{start:{line:1,column:161975},end:{line:1,column:162096}},line:1},"1159":{name:"(anonymous_1159)",decl:{start:{line:1,column:162031},end:{line:1,column:162032}},loc:{start:{line:1,column:162038},end:{line:1,column:162059}},line:1},"1160":{name:"ah",decl:{start:{line:1,column:162105},end:{line:1,column:162107}},loc:{start:{line:1,column:162114},end:{line:1,column:162169}},line:1},"1161":{name:"Qo",decl:{start:{line:1,column:162178},end:{line:1,column:162180}},loc:{start:{line:1,column:162185},end:{line:1,column:162226}},line:1},"1162":{name:"lh",decl:{start:{line:1,column:162235},end:{line:1,column:162237}},loc:{start:{line:1,column:162242},end:{line:1,column:162352}},line:1},"1163":{name:"(anonymous_1163)",decl:{start:{line:1,column:162384},end:{line:1,column:162385}},loc:{start:{line:1,column:162396},end:{line:1,column:162483}},line:1},"1164":{name:"(anonymous_1164)",decl:{start:{line:1,column:162484},end:{line:1,column:162485}},loc:{start:{line:1,column:162491},end:{line:1,column:162532}},line:1},"1165":{name:"(anonymous_1165)",decl:{start:{line:1,column:162533},end:{line:1,column:162534}},loc:{start:{line:1,column:162552},end:{line:1,column:162599}},line:1},"1166":{name:"(anonymous_1166)",decl:{start:{line:1,column:162600},end:{line:1,column:162601}},loc:{start:{line:1,column:162614},end:{line:1,column:162665}},line:1},"1167":{name:"(anonymous_1167)",decl:{start:{line:1,column:162666},end:{line:1,column:162667}},loc:{start:{line:1,column:162681},end:{line:1,column:162722}},line:1},"1168":{name:"(anonymous_1168)",decl:{start:{line:1,column:162808},end:{line:1,column:162809}},loc:{start:{line:1,column:162822},end:{line:1,column:162924}},line:1},"1169":{name:"(anonymous_1169)",decl:{start:{line:1,column:162965},end:{line:1,column:162966}},loc:{start:{line:1,column:162968},end:{line:1,column:162989}},line:1},"1170":{name:"(anonymous_1170)",decl:{start:{line:1,column:163013},end:{line:1,column:163014}},loc:{start:{line:1,column:163030},end:{line:1,column:163653}},line:1},"1171":{name:"(anonymous_1171)",decl:{start:{line:1,column:163201},end:{line:1,column:163202}},loc:{start:{line:1,column:163204},end:{line:1,column:163646}},line:1},"1172":{name:"(anonymous_1172)",decl:{start:{line:1,column:163668},end:{line:1,column:163669}},loc:{start:{line:1,column:163671},end:{line:1,column:163692}},line:1},"1173":{name:"(anonymous_1173)",decl:{start:{line:1,column:163757},end:{line:1,column:163758}},loc:{start:{line:1,column:163760},end:{line:1,column:163779}},line:1},"1174":{name:"(anonymous_1174)",decl:{start:{line:1,column:163800},end:{line:1,column:163801}},loc:{start:{line:1,column:163803},end:{line:1,column:163850}},line:1},"1175":{name:"(anonymous_1175)",decl:{start:{line:1,column:163874},end:{line:1,column:163875}},loc:{start:{line:1,column:163888},end:{line:1,column:164143}},line:1},"1176":{name:"(anonymous_1176)",decl:{start:{line:1,column:164143},end:{line:1,column:164144}},loc:{start:{line:1,column:164154},end:{line:1,column:164473}},line:1},"1177":{name:"(anonymous_1177)",decl:{start:{line:1,column:164473},end:{line:1,column:164474}},loc:{start:{line:1,column:164487},end:{line:1,column:164547}},line:1},"1178":{name:"(anonymous_1178)",decl:{start:{line:1,column:164547},end:{line:1,column:164548}},loc:{start:{line:1,column:164559},end:{line:1,column:164805}},line:1},"1179":{name:"(anonymous_1179)",decl:{start:{line:1,column:164805},end:{line:1,column:164806}},loc:{start:{line:1,column:164811},end:{line:1,column:165093}},line:1},"1180":{name:"hh",decl:{start:{line:1,column:165104},end:{line:1,column:165106}},loc:{start:{line:1,column:165111},end:{line:1,column:165204}},line:1},"1181":{name:"(anonymous_1181)",decl:{start:{line:1,column:165235},end:{line:1,column:165236}},loc:{start:{line:1,column:165247},end:{line:1,column:165256}},line:1},"1182":{name:"(anonymous_1182)",decl:{start:{line:1,column:165257},end:{line:1,column:165258}},loc:{start:{line:1,column:165264},end:{line:1,column:165321}},line:1},"1183":{name:"(anonymous_1183)",decl:{start:{line:1,column:165322},end:{line:1,column:165323}},loc:{start:{line:1,column:165341},end:{line:1,column:165392}},line:1},"1184":{name:"(anonymous_1184)",decl:{start:{line:1,column:165615},end:{line:1,column:165616}},loc:{start:{line:1,column:165627},end:{line:1,column:165717}},line:1},"1185":{name:"(anonymous_1185)",decl:{start:{line:1,column:165718},end:{line:1,column:165719}},loc:{start:{line:1,column:165725},end:{line:1,column:165764}},line:1},"1186":{name:"(anonymous_1186)",decl:{start:{line:1,column:165765},end:{line:1,column:165766}},loc:{start:{line:1,column:165784},end:{line:1,column:165832}},line:1},"1187":{name:"(anonymous_1187)",decl:{start:{line:1,column:166028},end:{line:1,column:166029}},loc:{start:{line:1,column:166038},end:{line:1,column:166274}},line:1},"1188":{name:"(anonymous_1188)",decl:{start:{line:1,column:166248},end:{line:1,column:166249}},loc:{start:{line:1,column:166255},end:{line:1,column:166258}},line:1},"1189":{name:"(anonymous_1189)",decl:{start:{line:1,column:166275},end:{line:1,column:166276}},loc:{start:{line:1,column:166287},end:{line:1,column:166537}},line:1},"1190":{name:"ht",decl:{start:{line:1,column:166548},end:{line:1,column:166550}},loc:{start:{line:1,column:166555},end:{line:1,column:166617}},line:1},"1191":{name:"xt",decl:{start:{line:1,column:166626},end:{line:1,column:166628}},loc:{start:{line:1,column:166631},end:{line:3,column:5}},line:1},"1192":{name:"uh",decl:{start:{line:3,column:14},end:{line:3,column:16}},loc:{start:{line:3,column:21},end:{line:3,column:289}},line:3},"1193":{name:"_o",decl:{start:{line:3,column:298},end:{line:3,column:300}},loc:{start:{line:3,column:305},end:{line:3,column:1167}},line:3},"1194":{name:"(anonymous_1194)",decl:{start:{line:3,column:504},end:{line:3,column:505}},loc:{start:{line:3,column:511},end:{line:3,column:558}},line:3},"1195":{name:"(anonymous_1195)",decl:{start:{line:3,column:853},end:{line:3,column:854}},loc:{start:{line:3,column:864},end:{line:3,column:904}},line:3},"1196":{name:"(anonymous_1196)",decl:{start:{line:3,column:1045},end:{line:3,column:1046}},loc:{start:{line:3,column:1048},end:{line:3,column:1089}},line:3},"1197":{name:"gh",decl:{start:{line:3,column:1176},end:{line:3,column:1178}},loc:{start:{line:3,column:1183},end:{line:3,column:1256}},line:3},"1198":{name:"ph",decl:{start:{line:3,column:1265},end:{line:3,column:1267}},loc:{start:{line:3,column:1276},end:{line:3,column:1385}},line:3},"1199":{name:"mh",decl:{start:{line:3,column:1394},end:{line:3,column:1396}},loc:{start:{line:3,column:1405},end:{line:3,column:1589}},line:3},"1200":{name:"yo",decl:{start:{line:3,column:1598},end:{line:3,column:1600}},loc:{start:{line:3,column:1607},end:{line:3,column:1698}},line:3},"1201":{name:"bh",decl:{start:{line:3,column:1707},end:{line:3,column:1709}},loc:{start:{line:3,column:1714},end:{line:3,column:1783}},line:3},"1202":{name:"xh",decl:{start:{line:3,column:1792},end:{line:3,column:1794}},loc:{start:{line:3,column:1801},end:{line:3,column:1873}},line:3},"1203":{name:"vo",decl:{start:{line:3,column:1882},end:{line:3,column:1884}},loc:{start:{line:3,column:1893},end:{line:3,column:2223}},line:3},"1204":{name:"ti",decl:{start:{line:3,column:2232},end:{line:3,column:2234}},loc:{start:{line:3,column:2241},end:{line:3,column:2338}},line:3},"1205":{name:"Mo",decl:{start:{line:3,column:2347},end:{line:3,column:2349}},loc:{start:{line:3,column:2352},end:{line:3,column:2373}},line:3},"1206":{name:"_h",decl:{start:{line:3,column:2382},end:{line:3,column:2384}},loc:{start:{line:3,column:2391},end:{line:3,column:2447}},line:3},"1207":{name:"ko",decl:{start:{line:3,column:2456},end:{line:3,column:2458}},loc:{start:{line:3,column:2463},end:{line:3,column:2556}},line:3},"1208":{name:"(anonymous_1208)",decl:{start:{line:3,column:2579},end:{line:3,column:2580}},loc:{start:{line:3,column:2587},end:{line:3,column:2810}},line:3},"1209":{name:"(anonymous_1209)",decl:{start:{line:3,column:2854},end:{line:3,column:2855}},loc:{start:{line:3,column:2862},end:{line:3,column:3055}},line:3},"1210":{name:"(anonymous_1210)",decl:{start:{line:3,column:3056},end:{line:3,column:3057}},loc:{start:{line:3,column:3069},end:{line:3,column:3317}},line:3},"1211":{name:"(anonymous_1211)",decl:{start:{line:3,column:3318},end:{line:3,column:3319}},loc:{start:{line:3,column:3334},end:{line:3,column:3365}},line:3},"1212":{name:"(anonymous_1212)",decl:{start:{line:3,column:3366},end:{line:3,column:3367}},loc:{start:{line:3,column:3384},end:{line:3,column:3515}},line:3},"1213":{name:"Z",decl:{start:{line:3,column:3594},end:{line:3,column:3595}},loc:{start:{line:3,column:3604},end:{line:3,column:3664}},line:3},"1214":{name:"(anonymous_1214)",decl:{start:{line:3,column:3672},end:{line:3,column:3673}},loc:{start:{line:3,column:3676},end:{line:3,column:12708}},line:3},"1215":{name:"(anonymous_1215)",decl:{start:{line:3,column:3718},end:{line:3,column:3719}},loc:{start:{line:3,column:3732},end:{line:3,column:4300}},line:3},"1216":{name:"(anonymous_1216)",decl:{start:{line:3,column:4300},end:{line:3,column:4301}},loc:{start:{line:3,column:4313},end:{line:3,column:4380}},line:3},"1217":{name:"(anonymous_1217)",decl:{start:{line:3,column:4380},end:{line:3,column:4381}},loc:{start:{line:3,column:4400},end:{line:3,column:4641}},line:3},"1218":{name:"(anonymous_1218)",decl:{start:{line:3,column:4641},end:{line:3,column:4642}},loc:{start:{line:3,column:4653},end:{line:3,column:4744}},line:3},"1219":{name:"(anonymous_1219)",decl:{start:{line:3,column:4744},end:{line:3,column:4745}},loc:{start:{line:3,column:4757},end:{line:3,column:4910}},line:3},"1220":{name:"(anonymous_1220)",decl:{start:{line:3,column:4910},end:{line:3,column:4911}},loc:{start:{line:3,column:4928},end:{line:3,column:4975}},line:3},"1221":{name:"(anonymous_1221)",decl:{start:{line:3,column:4975},end:{line:3,column:4976}},loc:{start:{line:3,column:4987},end:{line:3,column:5203}},line:3},"1222":{name:"(anonymous_1222)",decl:{start:{line:3,column:5023},end:{line:3,column:5024}},loc:{start:{line:3,column:5026},end:{line:3,column:5199}},line:3},"1223":{name:"(anonymous_1223)",decl:{start:{line:3,column:5203},end:{line:3,column:5204}},loc:{start:{line:3,column:5220},end:{line:3,column:5266}},line:3},"1224":{name:"(anonymous_1224)",decl:{start:{line:3,column:5266},end:{line:3,column:5267}},loc:{start:{line:3,column:5280},end:{line:3,column:5436}},line:3},"1225":{name:"(anonymous_1225)",decl:{start:{line:3,column:5436},end:{line:3,column:5437}},loc:{start:{line:3,column:5451},end:{line:3,column:5903}},line:3},"1226":{name:"(anonymous_1226)",decl:{start:{line:3,column:5597},end:{line:3,column:5598}},loc:{start:{line:3,column:5606},end:{line:3,column:5623}},line:3},"1227":{name:"(anonymous_1227)",decl:{start:{line:3,column:5648},end:{line:3,column:5649}},loc:{start:{line:3,column:5655},end:{line:3,column:5672}},line:3},"1228":{name:"(anonymous_1228)",decl:{start:{line:3,column:5679},end:{line:3,column:5680}},loc:{start:{line:3,column:5682},end:{line:3,column:5815}},line:3},"1229":{name:"(anonymous_1229)",decl:{start:{line:3,column:5903},end:{line:3,column:5904}},loc:{start:{line:3,column:5914},end:{line:3,column:6663}},line:3},"1230":{name:"(anonymous_1230)",decl:{start:{line:3,column:6663},end:{line:3,column:6664}},loc:{start:{line:3,column:6681},end:{line:3,column:6777}},line:3},"1231":{name:"(anonymous_1231)",decl:{start:{line:3,column:6777},end:{line:3,column:6778}},loc:{start:{line:3,column:6800},end:{line:3,column:7233}},line:3},"1232":{name:"(anonymous_1232)",decl:{start:{line:3,column:7233},end:{line:3,column:7234}},loc:{start:{line:3,column:7249},end:{line:3,column:7609}},line:3},"1233":{name:"(anonymous_1233)",decl:{start:{line:3,column:7609},end:{line:3,column:7610}},loc:{start:{line:3,column:7633},end:{line:3,column:8761}},line:3},"1234":{name:"(anonymous_1234)",decl:{start:{line:3,column:8388},end:{line:3,column:8389}},loc:{start:{line:3,column:8391},end:{line:3,column:8396}},line:3},"1235":{name:"(anonymous_1235)",decl:{start:{line:3,column:8761},end:{line:3,column:8762}},loc:{start:{line:3,column:8776},end:{line:3,column:9469}},line:3},"1236":{name:"(anonymous_1236)",decl:{start:{line:3,column:8943},end:{line:3,column:8944}},loc:{start:{line:3,column:8954},end:{line:3,column:8997}},line:3},"1237":{name:"(anonymous_1237)",decl:{start:{line:3,column:9469},end:{line:3,column:9470}},loc:{start:{line:3,column:9486},end:{line:3,column:9831}},line:3},"1238":{name:"(anonymous_1238)",decl:{start:{line:3,column:9831},end:{line:3,column:9832}},loc:{start:{line:3,column:9854},end:{line:3,column:10532}},line:3},"1239":{name:"(anonymous_1239)",decl:{start:{line:3,column:10532},end:{line:3,column:10533}},loc:{start:{line:3,column:10557},end:{line:3,column:10972}},line:3},"1240":{name:"(anonymous_1240)",decl:{start:{line:3,column:10972},end:{line:3,column:10973}},loc:{start:{line:3,column:10985},end:{line:3,column:11007}},line:3},"1241":{name:"(anonymous_1241)",decl:{start:{line:3,column:11007},end:{line:3,column:11008}},loc:{start:{line:3,column:11014},end:{line:3,column:11539}},line:3},"1242":{name:"(anonymous_1242)",decl:{start:{line:3,column:11539},end:{line:3,column:11540}},loc:{start:{line:3,column:11558},end:{line:3,column:11583}},line:3},"1243":{name:"(anonymous_1243)",decl:{start:{line:3,column:11583},end:{line:3,column:11584}},loc:{start:{line:3,column:11605},end:{line:3,column:11938}},line:3},"1244":{name:"(anonymous_1244)",decl:{start:{line:3,column:11633},end:{line:3,column:11634}},loc:{start:{line:3,column:11661},end:{line:3,column:11805}},line:3},"1245":{name:"(anonymous_1245)",decl:{start:{line:3,column:11938},end:{line:3,column:11939}},loc:{start:{line:3,column:11959},end:{line:3,column:12255}},line:3},"1246":{name:"(anonymous_1246)",decl:{start:{line:3,column:12255},end:{line:3,column:12256}},loc:{start:{line:3,column:12282},end:{line:3,column:12572}},line:3},"1247":{name:"(anonymous_1247)",decl:{start:{line:3,column:12356},end:{line:3,column:12357}},loc:{start:{line:3,column:12359},end:{line:3,column:12481}},line:3},"1248":{name:"(anonymous_1248)",decl:{start:{line:3,column:12572},end:{line:3,column:12573}},loc:{start:{line:3,column:12593},end:{line:3,column:12698}},line:3},"1249":{name:"(anonymous_1249)",decl:{start:{line:3,column:12756},end:{line:3,column:12757}},loc:{start:{line:3,column:12772},end:{line:3,column:12816}},line:3},"1250":{name:"(anonymous_1250)",decl:{start:{line:3,column:12817},end:{line:3,column:12818}},loc:{start:{line:3,column:12836},end:{line:3,column:12872}},line:3},"1251":{name:"(anonymous_1251)",decl:{start:{line:3,column:12873},end:{line:3,column:12874}},loc:{start:{line:3,column:12885},end:{line:3,column:12921}},line:3},"1252":{name:"(anonymous_1252)",decl:{start:{line:3,column:12922},end:{line:3,column:12923}},loc:{start:{line:3,column:12934},end:{line:3,column:13126}},line:3},"1253":{name:"(anonymous_1253)",decl:{start:{line:3,column:13127},end:{line:3,column:13128}},loc:{start:{line:3,column:13142},end:{line:3,column:13236}},line:3},"1254":{name:"(anonymous_1254)",decl:{start:{line:3,column:13643},end:{line:3,column:13644}},loc:{start:{line:3,column:13650},end:{line:3,column:13665}},line:3},"1255":{name:"(anonymous_1255)",decl:{start:{line:3,column:13675},end:{line:3,column:13676}},loc:{start:{line:3,column:13682},end:{line:3,column:13697}},line:3},"1256":{name:"(anonymous_1256)",decl:{start:{line:3,column:14081},end:{line:3,column:14082}},loc:{start:{line:3,column:14084},end:{line:3,column:14128}},line:3},"1257":{name:"(anonymous_1257)",decl:{start:{line:3,column:14399},end:{line:3,column:14400}},loc:{start:{line:3,column:14411},end:{line:3,column:14495}},line:3},"1258":{name:"kh",decl:{start:{line:3,column:14506},end:{line:3,column:14508}},loc:{start:{line:3,column:14517},end:{line:3,column:14606}},line:3},"1259":{name:"(anonymous_1259)",decl:{start:{line:3,column:14613},end:{line:3,column:14614}},loc:{start:{line:3,column:14620},end:{line:3,column:14654}},line:3},"1260":{name:"wo",decl:{start:{line:3,column:14664},end:{line:3,column:14666}},loc:{start:{line:3,column:14669},end:{line:3,column:14724}},line:3},"1261":{name:"(anonymous_1261)",decl:{start:{line:3,column:14732},end:{line:3,column:14733}},loc:{start:{line:3,column:14736},end:{line:3,column:16177}},line:3},"1262":{name:"(anonymous_1262)",decl:{start:{line:3,column:14815},end:{line:3,column:14816}},loc:{start:{line:3,column:14829},end:{line:3,column:14903}},line:3},"1263":{name:"(anonymous_1263)",decl:{start:{line:3,column:14903},end:{line:3,column:14904}},loc:{start:{line:3,column:14910},end:{line:3,column:15059}},line:3},"1264":{name:"(anonymous_1264)",decl:{start:{line:3,column:15059},end:{line:3,column:15060}},loc:{start:{line:3,column:15069},end:{line:3,column:15196}},line:3},"1265":{name:"(anonymous_1265)",decl:{start:{line:3,column:15196},end:{line:3,column:15197}},loc:{start:{line:3,column:15217},end:{line:3,column:15400}},line:3},"1266":{name:"(anonymous_1266)",decl:{start:{line:3,column:15400},end:{line:3,column:15401}},loc:{start:{line:3,column:15412},end:{line:3,column:15655}},line:3},"1267":{name:"(anonymous_1267)",decl:{start:{line:3,column:15655},end:{line:3,column:15656}},loc:{start:{line:3,column:15674},end:{line:3,column:15698}},line:3},"1268":{name:"(anonymous_1268)",decl:{start:{line:3,column:15698},end:{line:3,column:15699}},loc:{start:{line:3,column:15709},end:{line:3,column:15792}},line:3},"1269":{name:"(anonymous_1269)",decl:{start:{line:3,column:15792},end:{line:3,column:15793}},loc:{start:{line:3,column:15811},end:{line:3,column:15933}},line:3},"1270":{name:"(anonymous_1270)",decl:{start:{line:3,column:15933},end:{line:3,column:15934}},loc:{start:{line:3,column:15951},end:{line:3,column:16033}},line:3},"1271":{name:"(anonymous_1271)",decl:{start:{line:3,column:16033},end:{line:3,column:16034}},loc:{start:{line:3,column:16052},end:{line:3,column:16133}},line:3},"1272":{name:"(anonymous_1272)",decl:{start:{line:3,column:16133},end:{line:3,column:16134}},loc:{start:{line:3,column:16147},end:{line:3,column:16167}},line:3},"1273":{name:"Ch",decl:{start:{line:3,column:16190},end:{line:3,column:16192}},loc:{start:{line:3,column:16197},end:{line:3,column:17199}},line:3},"1274":{name:"Co",decl:{start:{line:3,column:17208},end:{line:3,column:17210}},loc:{start:{line:3,column:17244},end:{line:3,column:17338}},line:3},"1275":{name:"(anonymous_1275)",decl:{start:{line:3,column:17362},end:{line:3,column:17363}},loc:{start:{line:3,column:17376},end:{line:3,column:17485}},line:3},"1276":{name:"(anonymous_1276)",decl:{start:{line:3,column:17485},end:{line:3,column:17486}},loc:{start:{line:3,column:17495},end:{line:3,column:17574}},line:3},"1277":{name:"(anonymous_1277)",decl:{start:{line:3,column:17574},end:{line:3,column:17575}},loc:{start:{line:3,column:17598},end:{line:3,column:17859}},line:3},"1278":{name:"(anonymous_1278)",decl:{start:{line:3,column:17701},end:{line:3,column:17702}},loc:{start:{line:3,column:17704},end:{line:3,column:17711}},line:3},"1279":{name:"(anonymous_1279)",decl:{start:{line:3,column:17714},end:{line:3,column:17715}},loc:{start:{line:3,column:17717},end:{line:3,column:17724}},line:3},"1280":{name:"(anonymous_1280)",decl:{start:{line:3,column:17859},end:{line:3,column:17860}},loc:{start:{line:3,column:17873},end:{line:3,column:18181}},line:3},"1281":{name:"(anonymous_1281)",decl:{start:{line:3,column:18181},end:{line:3,column:18182}},loc:{start:{line:3,column:18199},end:{line:3,column:18232}},line:3},"1282":{name:"(anonymous_1282)",decl:{start:{line:3,column:18232},end:{line:3,column:18233}},loc:{start:{line:3,column:18244},end:{line:3,column:18722}},line:3},"1283":{name:"(anonymous_1283)",decl:{start:{line:3,column:18722},end:{line:3,column:18723}},loc:{start:{line:3,column:18733},end:{line:3,column:18929}},line:3},"1284":{name:"(anonymous_1284)",decl:{start:{line:3,column:18929},end:{line:3,column:18930}},loc:{start:{line:3,column:18948},end:{line:3,column:19014}},line:3},"1285":{name:"(anonymous_1285)",decl:{start:{line:3,column:19112},end:{line:3,column:19113}},loc:{start:{line:3,column:19133},end:{line:3,column:19236}},line:3},"1286":{name:"(anonymous_1286)",decl:{start:{line:3,column:19236},end:{line:3,column:19237}},loc:{start:{line:3,column:19254},end:{line:3,column:19463}},line:3},"1287":{name:"(anonymous_1287)",decl:{start:{line:3,column:19463},end:{line:3,column:19464}},loc:{start:{line:3,column:19482},end:{line:3,column:19566}},line:3},"1288":{name:"(anonymous_1288)",decl:{start:{line:3,column:19566},end:{line:3,column:19567}},loc:{start:{line:3,column:19585},end:{line:3,column:19654}},line:3},"1289":{name:"(anonymous_1289)",decl:{start:{line:3,column:19659},end:{line:3,column:19660}},loc:{start:{line:3,column:19662},end:{line:3,column:19679}},line:3},"1290":{name:"(anonymous_1290)",decl:{start:{line:3,column:19683},end:{line:3,column:19684}},loc:{start:{line:3,column:19690},end:{line:3,column:19710}},line:3},"1291":{name:"Po",decl:{start:{line:3,column:19720},end:{line:3,column:19722}},loc:{start:{line:3,column:19725},end:{line:3,column:19758}},line:3},"1292":{name:"Do",decl:{start:{line:3,column:19767},end:{line:3,column:19769}},loc:{start:{line:3,column:19776},end:{line:3,column:19840}},line:3},"1293":{name:"Ph",decl:{start:{line:3,column:19849},end:{line:3,column:19851}},loc:{start:{line:3,column:19856},end:{line:3,column:19946}},line:3},"1294":{name:"Dh",decl:{start:{line:3,column:19955},end:{line:3,column:19957}},loc:{start:{line:3,column:19974},end:{line:3,column:20443}},line:3},"1295":{name:"(anonymous_1295)",decl:{start:{line:3,column:20571},end:{line:3,column:20572}},loc:{start:{line:3,column:20585},end:{line:3,column:20672}},line:3},"1296":{name:"(anonymous_1296)",decl:{start:{line:3,column:20672},end:{line:3,column:20673}},loc:{start:{line:3,column:20682},end:{line:3,column:20781}},line:3},"1297":{name:"(anonymous_1297)",decl:{start:{line:3,column:20781},end:{line:3,column:20782}},loc:{start:{line:3,column:20802},end:{line:3,column:21100}},line:3},"1298":{name:"(anonymous_1298)",decl:{start:{line:3,column:21100},end:{line:3,column:21101}},loc:{start:{line:3,column:21124},end:{line:3,column:21334}},line:3},"1299":{name:"(anonymous_1299)",decl:{start:{line:3,column:21201},end:{line:3,column:21202}},loc:{start:{line:3,column:21204},end:{line:3,column:21211}},line:3},"1300":{name:"(anonymous_1300)",decl:{start:{line:3,column:21214},end:{line:3,column:21215}},loc:{start:{line:3,column:21217},end:{line:3,column:21224}},line:3},"1301":{name:"(anonymous_1301)",decl:{start:{line:3,column:21334},end:{line:3,column:21335}},loc:{start:{line:3,column:21346},end:{line:3,column:21569}},line:3},"1302":{name:"(anonymous_1302)",decl:{start:{line:3,column:21569},end:{line:3,column:21570}},loc:{start:{line:3,column:21588},end:{line:3,column:21669}},line:3},"1303":{name:"(anonymous_1303)",decl:{start:{line:3,column:21669},end:{line:3,column:21670}},loc:{start:{line:3,column:21680},end:{line:3,column:21773}},line:3},"1304":{name:"(anonymous_1304)",decl:{start:{line:3,column:21773},end:{line:3,column:21774}},loc:{start:{line:3,column:21792},end:{line:3,column:21938}},line:3},"1305":{name:"(anonymous_1305)",decl:{start:{line:3,column:21938},end:{line:3,column:21939}},loc:{start:{line:3,column:21957},end:{line:3,column:22047}},line:3},"1306":{name:"ws",decl:{start:{line:3,column:22058},end:{line:3,column:22060}},loc:{start:{line:3,column:22063},end:{line:3,column:22190}},line:3},"1307":{name:"Oh",decl:{start:{line:3,column:22199},end:{line:3,column:22201}},loc:{start:{line:3,column:22208},end:{line:3,column:22274}},line:3},"1308":{name:"Oo",decl:{start:{line:3,column:22283},end:{line:3,column:22285}},loc:{start:{line:3,column:22296},end:{line:3,column:22386}},line:3},"1309":{name:"Ah",decl:{start:{line:3,column:22395},end:{line:3,column:22397}},loc:{start:{line:3,column:22400},end:{line:3,column:22991}},line:3},"1310":{name:"Th",decl:{start:{line:3,column:23000},end:{line:3,column:23002}},loc:{start:{line:3,column:23013},end:{line:3,column:23292}},line:3},"1311":{name:"Lh",decl:{start:{line:3,column:23301},end:{line:3,column:23303}},loc:{start:{line:3,column:23310},end:{line:3,column:23560}},line:3},"1312":{name:"Rh",decl:{start:{line:3,column:23569},end:{line:3,column:23571}},loc:{start:{line:3,column:23576},end:{line:3,column:23705}},line:3},"1313":{name:"Eh",decl:{start:{line:3,column:23714},end:{line:3,column:23716}},loc:{start:{line:3,column:23723},end:{line:3,column:23991}},line:3},"1314":{name:"Ih",decl:{start:{line:3,column:24000},end:{line:3,column:24002}},loc:{start:{line:3,column:24005},end:{line:3,column:24058}},line:3},"1315":{name:"Fh",decl:{start:{line:3,column:24067},end:{line:3,column:24069}},loc:{start:{line:3,column:24076},end:{line:3,column:24126}},line:3},"1316":{name:"zh",decl:{start:{line:3,column:24135},end:{line:3,column:24137}},loc:{start:{line:3,column:24144},end:{line:3,column:24199}},line:3},"1317":{name:"Bh",decl:{start:{line:3,column:24208},end:{line:3,column:24210}},loc:{start:{line:3,column:24217},end:{line:3,column:24512}},line:3},"1318":{name:"(anonymous_1318)",decl:{start:{line:3,column:24423},end:{line:3,column:24424}},loc:{start:{line:3,column:24426},end:{line:3,column:24431}},line:3},"1319":{name:"Wh",decl:{start:{line:3,column:24521},end:{line:3,column:24523}},loc:{start:{line:3,column:24528},end:{line:3,column:24833}},line:3},"1320":{name:"er",decl:{start:{line:3,column:24842},end:{line:3,column:24844}},loc:{start:{line:3,column:24853},end:{line:3,column:25023}},line:3},"1321":{name:"Nh",decl:{start:{line:3,column:25032},end:{line:3,column:25034}},loc:{start:{line:3,column:25045},end:{line:3,column:25276}},line:3},"1322":{name:"Vh",decl:{start:{line:3,column:25285},end:{line:3,column:25287}},loc:{start:{line:3,column:25294},end:{line:3,column:25344}},line:3},"1323":{name:"(anonymous_1323)",decl:{start:{line:3,column:25692},end:{line:3,column:25693}},loc:{start:{line:3,column:25703},end:{line:3,column:25713}},line:3},"1324":{name:"(anonymous_1324)",decl:{start:{line:3,column:25904},end:{line:3,column:25905}},loc:{start:{line:3,column:25918},end:{line:3,column:26038}},line:3},"1325":{name:"(anonymous_1325)",decl:{start:{line:3,column:26038},end:{line:3,column:26039}},loc:{start:{line:3,column:26053},end:{line:3,column:26304}},line:3},"1326":{name:"(anonymous_1326)",decl:{start:{line:3,column:26304},end:{line:3,column:26305}},loc:{start:{line:3,column:26325},end:{line:3,column:26450}},line:3},"1327":{name:"(anonymous_1327)",decl:{start:{line:3,column:26450},end:{line:3,column:26451}},loc:{start:{line:3,column:26468},end:{line:3,column:26521}},line:3},"1328":{name:"(anonymous_1328)",decl:{start:{line:3,column:26521},end:{line:3,column:26522}},loc:{start:{line:3,column:26542},end:{line:3,column:26759}},line:3},"1329":{name:"(anonymous_1329)",decl:{start:{line:3,column:26627},end:{line:3,column:26628}},loc:{start:{line:3,column:26634},end:{line:3,column:26710}},line:3},"1330":{name:"(anonymous_1330)",decl:{start:{line:3,column:26719},end:{line:3,column:26720}},loc:{start:{line:3,column:26726},end:{line:3,column:26757}},line:3},"1331":{name:"(anonymous_1331)",decl:{start:{line:3,column:26759},end:{line:3,column:26760}},loc:{start:{line:3,column:26764},end:{line:3,column:26855}},line:3},"1332":{name:"(anonymous_1332)",decl:{start:{line:3,column:26855},end:{line:3,column:26856}},loc:{start:{line:3,column:26878},end:{line:3,column:27012}},line:3},"1333":{name:"(anonymous_1333)",decl:{start:{line:3,column:27012},end:{line:3,column:27013}},loc:{start:{line:3,column:27028},end:{line:3,column:27116}},line:3},"1334":{name:"(anonymous_1334)",decl:{start:{line:3,column:27116},end:{line:3,column:27117}},loc:{start:{line:3,column:27148},end:{line:3,column:27269}},line:3},"1335":{name:"(anonymous_1335)",decl:{start:{line:3,column:27269},end:{line:3,column:27270}},loc:{start:{line:3,column:27301},end:{line:3,column:27418}},line:3},"1336":{name:"(anonymous_1336)",decl:{start:{line:3,column:27418},end:{line:3,column:27419}},loc:{start:{line:3,column:27441},end:{line:3,column:27536}},line:3},"1337":{name:"(anonymous_1337)",decl:{start:{line:3,column:27536},end:{line:3,column:27537}},loc:{start:{line:3,column:27561},end:{line:3,column:27668}},line:3},"1338":{name:"(anonymous_1338)",decl:{start:{line:3,column:27668},end:{line:3,column:27669}},loc:{start:{line:3,column:27697},end:{line:3,column:27768}},line:3},"1339":{name:"(anonymous_1339)",decl:{start:{line:3,column:27768},end:{line:3,column:27769}},loc:{start:{line:3,column:27786},end:{line:3,column:27850}},line:3},"1340":{name:"(anonymous_1340)",decl:{start:{line:3,column:27850},end:{line:3,column:27851}},loc:{start:{line:3,column:27874},end:{line:3,column:27973}},line:3},"1341":{name:"(anonymous_1341)",decl:{start:{line:3,column:27973},end:{line:3,column:27974}},loc:{start:{line:3,column:27989},end:{line:3,column:28225}},line:3},"1342":{name:"(anonymous_1342)",decl:{start:{line:3,column:28225},end:{line:3,column:28226}},loc:{start:{line:3,column:28235},end:{line:3,column:28967}},line:3},"1343":{name:"(anonymous_1343)",decl:{start:{line:3,column:28399},end:{line:3,column:28400}},loc:{start:{line:3,column:28406},end:{line:3,column:28561}},line:3},"1344":{name:"(anonymous_1344)",decl:{start:{line:3,column:28967},end:{line:3,column:28968}},loc:{start:{line:3,column:28979},end:{line:3,column:28981}},line:3},"1345":{name:"(anonymous_1345)",decl:{start:{line:3,column:28981},end:{line:3,column:28982}},loc:{start:{line:3,column:28993},end:{line:3,column:29674}},line:3},"1346":{name:"(anonymous_1346)",decl:{start:{line:3,column:29211},end:{line:3,column:29212}},loc:{start:{line:3,column:29218},end:{line:3,column:29660}},line:3},"1347":{name:"(anonymous_1347)",decl:{start:{line:3,column:29674},end:{line:3,column:29675}},loc:{start:{line:3,column:29685},end:{line:3,column:29687}},line:3},"1348":{name:"Ao",decl:{start:{line:3,column:30053},end:{line:3,column:30055}},loc:{start:{line:3,column:30060},end:{line:3,column:30072}},line:3},"1349":{name:"To",decl:{start:{line:3,column:30081},end:{line:3,column:30083}},loc:{start:{line:3,column:30088},end:{line:3,column:30360}},line:3},"1350":{name:"Lo",decl:{start:{line:3,column:30369},end:{line:3,column:30371}},loc:{start:{line:3,column:30380},end:{line:3,column:30557}},line:3},"1351":{name:"Hh",decl:{start:{line:3,column:30566},end:{line:3,column:30568}},loc:{start:{line:3,column:30579},end:{line:3,column:30714}},line:3},"1352":{name:"jh",decl:{start:{line:3,column:30723},end:{line:3,column:30725}},loc:{start:{line:3,column:30728},end:{line:3,column:30804}},line:3},"1353":{name:"Ro",decl:{start:{line:3,column:30813},end:{line:3,column:30815}},loc:{start:{line:3,column:30822},end:{line:3,column:30907}},line:3},"1354":{name:"Yh",decl:{start:{line:3,column:30916},end:{line:3,column:30918}},loc:{start:{line:3,column:30927},end:{line:3,column:31065}},line:3},"1355":{name:"Eo",decl:{start:{line:3,column:31074},end:{line:3,column:31076}},loc:{start:{line:3,column:31083},end:{line:3,column:31201}},line:3},"1356":{name:"(anonymous_1356)",decl:{start:{line:3,column:31209},end:{line:3,column:31210}},loc:{start:{line:3,column:31213},end:{line:3,column:36154}},line:3},"1357":{name:"(anonymous_1357)",decl:{start:{line:3,column:31435},end:{line:3,column:31436}},loc:{start:{line:3,column:31449},end:{line:3,column:31598}},line:3},"1358":{name:"(anonymous_1358)",decl:{start:{line:3,column:31598},end:{line:3,column:31599}},loc:{start:{line:3,column:31610},end:{line:3,column:31842}},line:3},"1359":{name:"(anonymous_1359)",decl:{start:{line:3,column:31842},end:{line:3,column:31843}},loc:{start:{line:3,column:31852},end:{line:3,column:31887}},line:3},"1360":{name:"(anonymous_1360)",decl:{start:{line:3,column:31887},end:{line:3,column:31888}},loc:{start:{line:3,column:31901},end:{line:3,column:31962}},line:3},"1361":{name:"(anonymous_1361)",decl:{start:{line:3,column:31962},end:{line:3,column:31963}},loc:{start:{line:3,column:31983},end:{line:3,column:32446}},line:3},"1362":{name:"c",decl:{start:{line:3,column:32110},end:{line:3,column:32111}},loc:{start:{line:3,column:32114},end:{line:3,column:32197}},line:3},"1363":{name:"(anonymous_1363)",decl:{start:{line:3,column:32446},end:{line:3,column:32447}},loc:{start:{line:3,column:32463},end:{line:3,column:32606}},line:3},"1364":{name:"(anonymous_1364)",decl:{start:{line:3,column:32606},end:{line:3,column:32607}},loc:{start:{line:3,column:32618},end:{line:3,column:33148}},line:3},"1365":{name:"(anonymous_1365)",decl:{start:{line:3,column:33148},end:{line:3,column:33149}},loc:{start:{line:3,column:33163},end:{line:3,column:33244}},line:3},"1366":{name:"(anonymous_1366)",decl:{start:{line:3,column:33230},end:{line:3,column:33231}},loc:{start:{line:3,column:33233},end:{line:3,column:33241}},line:3},"1367":{name:"(anonymous_1367)",decl:{start:{line:3,column:33244},end:{line:3,column:33245}},loc:{start:{line:3,column:33261},end:{line:3,column:33598}},line:3},"1368":{name:"(anonymous_1368)",decl:{start:{line:3,column:33598},end:{line:3,column:33599}},loc:{start:{line:3,column:33609},end:{line:3,column:34159}},line:3},"1369":{name:"(anonymous_1369)",decl:{start:{line:3,column:34152},end:{line:3,column:34153}},loc:{start:{line:3,column:34155},end:{line:3,column:34157}},line:3},"1370":{name:"(anonymous_1370)",decl:{start:{line:3,column:34159},end:{line:3,column:34160}},loc:{start:{line:3,column:34178},end:{line:3,column:34308}},line:3},"1371":{name:"(anonymous_1371)",decl:{start:{line:3,column:34308},end:{line:3,column:34309}},loc:{start:{line:3,column:34319},end:{line:3,column:34415}},line:3},"1372":{name:"(anonymous_1372)",decl:{start:{line:3,column:34415},end:{line:3,column:34416}},loc:{start:{line:3,column:34443},end:{line:3,column:34659}},line:3},"1373":{name:"(anonymous_1373)",decl:{start:{line:3,column:34659},end:{line:3,column:34660}},loc:{start:{line:3,column:34680},end:{line:3,column:34771}},line:3},"1374":{name:"(anonymous_1374)",decl:{start:{line:3,column:34771},end:{line:3,column:34772}},loc:{start:{line:3,column:34792},end:{line:3,column:34846}},line:3},"1375":{name:"(anonymous_1375)",decl:{start:{line:3,column:34846},end:{line:3,column:34847}},loc:{start:{line:3,column:34865},end:{line:3,column:34968}},line:3},"1376":{name:"(anonymous_1376)",decl:{start:{line:3,column:34968},end:{line:3,column:34969}},loc:{start:{line:3,column:34987},end:{line:3,column:35090}},line:3},"1377":{name:"(anonymous_1377)",decl:{start:{line:3,column:35090},end:{line:3,column:35091}},loc:{start:{line:3,column:35106},end:{line:3,column:35313}},line:3},"1378":{name:"(anonymous_1378)",decl:{start:{line:3,column:35313},end:{line:3,column:35314}},loc:{start:{line:3,column:35333},end:{line:3,column:35573}},line:3},"1379":{name:"(anonymous_1379)",decl:{start:{line:3,column:35573},end:{line:3,column:35574}},loc:{start:{line:3,column:35592},end:{line:3,column:35899}},line:3},"1380":{name:"(anonymous_1380)",decl:{start:{line:3,column:35899},end:{line:3,column:35900}},loc:{start:{line:3,column:35919},end:{line:3,column:36109}},line:3},"1381":{name:"(anonymous_1381)",decl:{start:{line:3,column:36109},end:{line:3,column:36110}},loc:{start:{line:3,column:36121},end:{line:3,column:36144}},line:3},"1382":{name:"ei",decl:{start:{line:3,column:36167},end:{line:3,column:36169}},loc:{start:{line:3,column:36176},end:{line:3,column:36440}},line:3},"1383":{name:"(anonymous_1383)",decl:{start:{line:3,column:36515},end:{line:3,column:36516}},loc:{start:{line:3,column:36529},end:{line:3,column:36598}},line:3},"1384":{name:"(anonymous_1384)",decl:{start:{line:3,column:36598},end:{line:3,column:36599}},loc:{start:{line:3,column:36611},end:{line:3,column:36781}},line:3},"1385":{name:"(anonymous_1385)",decl:{start:{line:3,column:36781},end:{line:3,column:36782}},loc:{start:{line:3,column:36800},end:{line:3,column:37066}},line:3},"1386":{name:"(anonymous_1386)",decl:{start:{line:3,column:37066},end:{line:3,column:37067}},loc:{start:{line:3,column:37077},end:{line:3,column:37244}},line:3},"1387":{name:"(anonymous_1387)",decl:{start:{line:3,column:37232},end:{line:3,column:37233}},loc:{start:{line:3,column:37239},end:{line:3,column:37242}},line:3},"1388":{name:"(anonymous_1388)",decl:{start:{line:3,column:37244},end:{line:3,column:37245}},loc:{start:{line:3,column:37268},end:{line:3,column:37468}},line:3},"1389":{name:"(anonymous_1389)",decl:{start:{line:3,column:37468},end:{line:3,column:37469}},loc:{start:{line:3,column:37489},end:{line:3,column:37546}},line:3},"1390":{name:"(anonymous_1390)",decl:{start:{line:3,column:37546},end:{line:3,column:37547}},loc:{start:{line:3,column:37565},end:{line:3,column:37688}},line:3},"1391":{name:"As",decl:{start:{line:3,column:37856},end:{line:3,column:37858}},loc:{start:{line:3,column:37861},end:{line:3,column:38056}},line:3},"1392":{name:"sr",decl:{start:{line:3,column:38065},end:{line:3,column:38067}},loc:{start:{line:3,column:38070},end:{line:3,column:38094}},line:3},"1393":{name:"Nt",decl:{start:{line:3,column:38103},end:{line:3,column:38105}},loc:{start:{line:3,column:38110},end:{line:3,column:38328}},line:3},"1394":{name:"nr",decl:{start:{line:3,column:38337},end:{line:3,column:38339}},loc:{start:{line:3,column:38342},end:{line:3,column:38374}},line:3},"1395":{name:"bd",decl:{start:{line:3,column:38427},end:{line:3,column:38429}},loc:{start:{line:3,column:38435},end:{line:3,column:38471}},line:3},"1396":{name:"xd",decl:{start:{line:3,column:38480},end:{line:3,column:38482}},loc:{start:{line:3,column:38488},end:{line:3,column:38541}},line:3},"1397":{name:"(anonymous_1397)",decl:{start:{line:3,column:38549},end:{line:3,column:38550}},loc:{start:{line:3,column:38553},end:{line:3,column:38898}},line:3},"1398":{name:"(anonymous_1398)",decl:{start:{line:3,column:38562},end:{line:3,column:38563}},loc:{start:{line:3,column:38575},end:{line:3,column:38616}},line:3},"1399":{name:"(anonymous_1399)",decl:{start:{line:3,column:38616},end:{line:3,column:38617}},loc:{start:{line:3,column:38641},end:{line:3,column:38703}},line:3},"1400":{name:"(anonymous_1400)",decl:{start:{line:3,column:38703},end:{line:3,column:38704}},loc:{start:{line:3,column:38727},end:{line:3,column:38761}},line:3},"1401":{name:"(anonymous_1401)",decl:{start:{line:3,column:38783},end:{line:3,column:38784}},loc:{start:{line:3,column:38794},end:{line:3,column:38812}},line:3},"1402":{name:"(anonymous_1402)",decl:{start:{line:3,column:38906},end:{line:3,column:38907}},loc:{start:{line:3,column:38910},end:{line:3,column:41831}},line:3},"1403":{name:"(anonymous_1403)",decl:{start:{line:3,column:38919},end:{line:3,column:38920}},loc:{start:{line:3,column:38932},end:{line:3,column:39506}},line:3},"1404":{name:"(anonymous_1404)",decl:{start:{line:3,column:39480},end:{line:3,column:39481}},loc:{start:{line:3,column:39483},end:{line:3,column:39503}},line:3},"1405":{name:"(anonymous_1405)",decl:{start:{line:3,column:39506},end:{line:3,column:39507}},loc:{start:{line:3,column:39520},end:{line:3,column:40116}},line:3},"1406":{name:"(anonymous_1406)",decl:{start:{line:3,column:39604},end:{line:3,column:39605}},loc:{start:{line:3,column:39607},end:{line:3,column:39620}},line:3},"1407":{name:"(anonymous_1407)",decl:{start:{line:3,column:39631},end:{line:3,column:39632}},loc:{start:{line:3,column:39634},end:{line:3,column:39654}},line:3},"1408":{name:"(anonymous_1408)",decl:{start:{line:3,column:40116},end:{line:3,column:40117}},loc:{start:{line:3,column:40129},end:{line:3,column:40221}},line:3},"1409":{name:"(anonymous_1409)",decl:{start:{line:3,column:40201},end:{line:3,column:40202}},loc:{start:{line:3,column:40204},end:{line:3,column:40219}},line:3},"1410":{name:"(anonymous_1410)",decl:{start:{line:3,column:40221},end:{line:3,column:40222}},loc:{start:{line:3,column:40229},end:{line:3,column:40393}},line:3},"1411":{name:"(anonymous_1411)",decl:{start:{line:3,column:40331},end:{line:3,column:40332}},loc:{start:{line:3,column:40335},end:{line:3,column:40391}},line:3},"1412":{name:"(anonymous_1412)",decl:{start:{line:3,column:40393},end:{line:3,column:40394}},loc:{start:{line:3,column:40402},end:{line:3,column:40486}},line:3},"1413":{name:"(anonymous_1413)",decl:{start:{line:3,column:40459},end:{line:3,column:40460}},loc:{start:{line:3,column:40463},end:{line:3,column:40484}},line:3},"1414":{name:"(anonymous_1414)",decl:{start:{line:3,column:40486},end:{line:3,column:40487}},loc:{start:{line:3,column:40502},end:{line:3,column:40585}},line:3},"1415":{name:"(anonymous_1415)",decl:{start:{line:3,column:40585},end:{line:3,column:40586}},loc:{start:{line:3,column:40603},end:{line:3,column:40649}},line:3},"1416":{name:"(anonymous_1416)",decl:{start:{line:3,column:40649},end:{line:3,column:40650}},loc:{start:{line:3,column:40664},end:{line:3,column:40700}},line:3},"1417":{name:"(anonymous_1417)",decl:{start:{line:3,column:40700},end:{line:3,column:40701}},loc:{start:{line:3,column:40715},end:{line:3,column:40857}},line:3},"1418":{name:"(anonymous_1418)",decl:{start:{line:3,column:40857},end:{line:3,column:40858}},loc:{start:{line:3,column:40874},end:{line:3,column:41261}},line:3},"1419":{name:"(anonymous_1419)",decl:{start:{line:3,column:40891},end:{line:3,column:40892}},loc:{start:{line:3,column:40898},end:{line:3,column:41022}},line:3},"1420":{name:"(anonymous_1420)",decl:{start:{line:3,column:40976},end:{line:3,column:40977}},loc:{start:{line:3,column:40980},end:{line:3,column:41020}},line:3},"1421":{name:"(anonymous_1421)",decl:{start:{line:3,column:41031},end:{line:3,column:41032}},loc:{start:{line:3,column:41038},end:{line:3,column:41162}},line:3},"1422":{name:"(anonymous_1422)",decl:{start:{line:3,column:41116},end:{line:3,column:41117}},loc:{start:{line:3,column:41120},end:{line:3,column:41160}},line:3},"1423":{name:"(anonymous_1423)",decl:{start:{line:3,column:41261},end:{line:3,column:41262}},loc:{start:{line:3,column:41284},end:{line:3,column:41385}},line:3},"1424":{name:"(anonymous_1424)",decl:{start:{line:3,column:41385},end:{line:3,column:41386}},loc:{start:{line:3,column:41399},end:{line:3,column:41479}},line:3},"1425":{name:"(anonymous_1425)",decl:{start:{line:3,column:41501},end:{line:3,column:41502}},loc:{start:{line:3,column:41512},end:{line:3,column:41530}},line:3}},branchMap:{"0":{loc:{start:{line:1,column:673},end:{line:1,column:707}},type:"binary-expr",locations:[{start:{line:1,column:673},end:{line:1,column:680}},{start:{line:1,column:682},end:{line:1,column:689}},{start:{line:1,column:691},end:{line:1,column:698}},{start:{line:1,column:700},end:{line:1,column:707}}],line:1},"1":{loc:{start:{line:1,column:747},end:{line:1,column:979}},type:"binary-expr",locations:[{start:{line:1,column:747},end:{line:1,column:757}},{start:{line:1,column:760},end:{line:1,column:978}}],line:1},"2":{loc:{start:{line:1,column:760},end:{line:1,column:978}},type:"cond-expr",locations:[{start:{line:1,column:773},end:{line:1,column:854}},{start:{line:1,column:855},end:{line:1,column:978}}],line:1},"3":{loc:{start:{line:1,column:760},end:{line:1,column:772}},type:"binary-expr",locations:[{start:{line:1,column:760},end:{line:1,column:765}},{start:{line:1,column:767},end:{line:1,column:772}}],line:1},"4":{loc:{start:{line:1,column:832},end:{line:1,column:853}},type:"cond-expr",locations:[{start:{line:1,column:838},end:{line:1,column:849}},{start:{line:1,column:850},end:{line:1,column:853}}],line:1},"5":{loc:{start:{line:1,column:855},end:{line:1,column:978}},type:"binary-expr",locations:[{start:{line:1,column:856},end:{line:1,column:861}},{start:{line:1,column:863},end:{line:1,column:868}},{start:{line:1,column:872},end:{line:1,column:977}}],line:1},"6":{loc:{start:{line:1,column:946},end:{line:1,column:976}},type:"cond-expr",locations:[{start:{line:1,column:952},end:{line:1,column:972}},{start:{line:1,column:973},end:{line:1,column:976}}],line:1},"7":{loc:{start:{line:1,column:996},end:{line:1,column:1009}},type:"cond-expr",locations:[{start:{line:1,column:1002},end:{line:1,column:1006}},{start:{line:1,column:1007},end:{line:1,column:1009}}],line:1},"8":{loc:{start:{line:1,column:1031},end:{line:1,column:1042}},type:"cond-expr",locations:[{start:{line:1,column:1037},end:{line:1,column:1039}},{start:{line:1,column:1040},end:{line:1,column:1042}}],line:1},"9":{loc:{start:{line:1,column:1050},end:{line:1,column:1093}},type:"cond-expr",locations:[{start:{line:1,column:1052},end:{line:1,column:1086}},{start:{line:1,column:1087},end:{line:1,column:1093}}],line:1},"10":{loc:{start:{line:1,column:1260},end:{line:1,column:1273}},type:"default-arg",locations:[{start:{line:1,column:1262},end:{line:1,column:1273}}],line:1},"11":{loc:{start:{line:1,column:1364},end:{line:1,column:1376}},type:"default-arg",locations:[{start:{line:1,column:1366},end:{line:1,column:1376}}],line:1},"12":{loc:{start:{line:1,column:1480},end:{line:1,column:1508}},type:"binary-expr",locations:[{start:{line:1,column:1480},end:{line:1,column:1485}},{start:{line:1,column:1488},end:{line:1,column:1507}}],line:1},"13":{loc:{start:{line:1,column:1580},end:{line:1,column:1629}},type:"cond-expr",locations:[{start:{line:1,column:1586},end:{line:1,column:1603}},{start:{line:1,column:1604},end:{line:1,column:1629}}],line:1},"14":{loc:{start:{line:1,column:1595},end:{line:1,column:1602}},type:"cond-expr",locations:[{start:{line:1,column:1599},end:{line:1,column:1600}},{start:{line:1,column:1601},end:{line:1,column:1602}}],line:1},"15":{loc:{start:{line:1,column:1604},end:{line:1,column:1629}},type:"cond-expr",locations:[{start:{line:1,column:1610},end:{line:1,column:1619}},{start:{line:1,column:1620},end:{line:1,column:1629}}],line:1},"16":{loc:{start:{line:1,column:1738},end:{line:1,column:1803}},type:"binary-expr",locations:[{start:{line:1,column:1738},end:{line:1,column:1743}},{start:{line:1,column:1746},end:{line:1,column:1802}}],line:1},"17":{loc:{start:{line:1,column:1754},end:{line:1,column:1776}},type:"cond-expr",locations:[{start:{line:1,column:1759},end:{line:1,column:1768}},{start:{line:1,column:1769},end:{line:1,column:1776}}],line:1},"18":{loc:{start:{line:1,column:1809},end:{line:1,column:1813}},type:"binary-expr",locations:[{start:{line:1,column:1809},end:{line:1,column:1810}},{start:{line:1,column:1812},end:{line:1,column:1813}}],line:1},"19":{loc:{start:{line:1,column:1845},end:{line:1,column:1888}},type:"cond-expr",locations:[{start:{line:1,column:1862},end:{line:1,column:1879}},{start:{line:1,column:1880},end:{line:1,column:1888}}],line:1},"20":{loc:{start:{line:1,column:2092},end:{line:1,column:2105}},type:"if",locations:[{start:{line:1,column:2092},end:{line:1,column:2105}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"21":{loc:{start:{line:1,column:2105},end:{line:1,column:2143}},type:"binary-expr",locations:[{start:{line:1,column:2105},end:{line:1,column:2113}},{start:{line:1,column:2116},end:{line:1,column:2142}}],line:1},"22":{loc:{start:{line:1,column:2118},end:{line:1,column:2142}},type:"cond-expr",locations:[{start:{line:1,column:2123},end:{line:1,column:2132}},{start:{line:1,column:2133},end:{line:1,column:2142}}],line:1},"23":{loc:{start:{line:1,column:2191},end:{line:1,column:2252}},type:"cond-expr",locations:[{start:{line:1,column:2204},end:{line:1,column:2215}},{start:{line:1,column:2216},end:{line:1,column:2252}}],line:1},"24":{loc:{start:{line:1,column:2216},end:{line:1,column:2252}},type:"cond-expr",locations:[{start:{line:1,column:2229},end:{line:1,column:2240}},{start:{line:1,column:2241},end:{line:1,column:2252}}],line:1},"25":{loc:{start:{line:1,column:2375},end:{line:1,column:2388}},type:"if",locations:[{start:{line:1,column:2375},end:{line:1,column:2388}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"26":{loc:{start:{line:1,column:2436},end:{line:1,column:2508}},type:"cond-expr",locations:[{start:{line:1,column:2444},end:{line:1,column:2482}},{start:{line:1,column:2483},end:{line:1,column:2508}}],line:1},"27":{loc:{start:{line:1,column:5277},end:{line:1,column:5315}},type:"binary-expr",locations:[{start:{line:1,column:5277},end:{line:1,column:5279}},{start:{line:1,column:5282},end:{line:1,column:5314}}],line:1},"28":{loc:{start:{line:1,column:5349},end:{line:1,column:5398}},type:"binary-expr",locations:[{start:{line:1,column:5349},end:{line:1,column:5350}},{start:{line:1,column:5352},end:{line:1,column:5398}}],line:1},"29":{loc:{start:{line:1,column:5376},end:{line:1,column:5397}},type:"cond-expr",locations:[{start:{line:1,column:5389},end:{line:1,column:5393}},{start:{line:1,column:5394},end:{line:1,column:5397}}],line:1},"30":{loc:{start:{line:1,column:5553},end:{line:1,column:5755}},type:"if",locations:[{start:{line:1,column:5553},end:{line:1,column:5755}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"31":{loc:{start:{line:1,column:5559},end:{line:1,column:5613}},type:"if",locations:[{start:{line:1,column:5559},end:{line:1,column:5613}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"32":{loc:{start:{line:1,column:5586},end:{line:1,column:5612}},type:"cond-expr",locations:[{start:{line:1,column:5591},end:{line:1,column:5596}},{start:{line:1,column:5597},end:{line:1,column:5612}}],line:1},"33":{loc:{start:{line:1,column:5651},end:{line:1,column:5673}},type:"cond-expr",locations:[{start:{line:1,column:5656},end:{line:1,column:5661}},{start:{line:1,column:5662},end:{line:1,column:5673}}],line:1},"34":{loc:{start:{line:1,column:5682},end:{line:1,column:5704}},type:"cond-expr",locations:[{start:{line:1,column:5687},end:{line:1,column:5692}},{start:{line:1,column:5693},end:{line:1,column:5704}}],line:1},"35":{loc:{start:{line:1,column:5713},end:{line:1,column:5735}},type:"cond-expr",locations:[{start:{line:1,column:5718},end:{line:1,column:5723}},{start:{line:1,column:5724},end:{line:1,column:5735}}],line:1},"36":{loc:{start:{line:1,column:5778},end:{line:1,column:5863}},type:"binary-expr",locations:[{start:{line:1,column:5778},end:{line:1,column:5779}},{start:{line:1,column:5782},end:{line:1,column:5862}}],line:1},"37":{loc:{start:{line:1,column:5782},end:{line:1,column:5862}},type:"cond-expr",locations:[{start:{line:1,column:5790},end:{line:1,column:5832}},{start:{line:1,column:5833},end:{line:1,column:5862}}],line:1},"38":{loc:{start:{line:1,column:5874},end:{line:1,column:5922}},type:"cond-expr",locations:[{start:{line:1,column:5886},end:{line:1,column:5893}},{start:{line:1,column:5894},end:{line:1,column:5922}}],line:1},"39":{loc:{start:{line:1,column:5929},end:{line:1,column:5975}},type:"cond-expr",locations:[{start:{line:1,column:5939},end:{line:1,column:5946}},{start:{line:1,column:5947},end:{line:1,column:5975}}],line:1},"40":{loc:{start:{line:1,column:6176},end:{line:1,column:6280}},type:"if",locations:[{start:{line:1,column:6176},end:{line:1,column:6280}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"41":{loc:{start:{line:1,column:6231},end:{line:1,column:6242}},type:"cond-expr",locations:[{start:{line:1,column:6237},end:{line:1,column:6240}},{start:{line:1,column:6241},end:{line:1,column:6242}}],line:1},"42":{loc:{start:{line:1,column:6305},end:{line:1,column:6330}},type:"binary-expr",locations:[{start:{line:1,column:6305},end:{line:1,column:6306}},{start:{line:1,column:6308},end:{line:1,column:6330}}],line:1},"43":{loc:{start:{line:1,column:6322},end:{line:1,column:6327}},type:"binary-expr",locations:[{start:{line:1,column:6322},end:{line:1,column:6323}},{start:{line:1,column:6325},end:{line:1,column:6327}}],line:1},"44":{loc:{start:{line:1,column:6379},end:{line:1,column:6508}},type:"cond-expr",locations:[{start:{line:1,column:6396},end:{line:1,column:6468}},{start:{line:1,column:6470},end:{line:1,column:6507}}],line:1},"45":{loc:{start:{line:1,column:6396},end:{line:1,column:6468}},type:"binary-expr",locations:[{start:{line:1,column:6396},end:{line:1,column:6407}},{start:{line:1,column:6410},end:{line:1,column:6467}}],line:1},"46":{loc:{start:{line:1,column:6441},end:{line:1,column:6467}},type:"binary-expr",locations:[{start:{line:1,column:6441},end:{line:1,column:6451}},{start:{line:1,column:6454},end:{line:1,column:6466}}],line:1},"47":{loc:{start:{line:1,column:6533},end:{line:1,column:6562}},type:"cond-expr",locations:[{start:{line:1,column:6551},end:{line:1,column:6556}},{start:{line:1,column:6557},end:{line:1,column:6562}}],line:1},"48":{loc:{start:{line:1,column:6593},end:{line:1,column:6620}},type:"if",locations:[{start:{line:1,column:6593},end:{line:1,column:6620}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"49":{loc:{start:{line:1,column:6637},end:{line:1,column:6695}},type:"cond-expr",locations:[{start:{line:1,column:6650},end:{line:1,column:6657}},{start:{line:1,column:6658},end:{line:1,column:6695}}],line:1},"50":{loc:{start:{line:1,column:6658},end:{line:1,column:6695}},type:"binary-expr",locations:[{start:{line:1,column:6658},end:{line:1,column:6670}},{start:{line:1,column:6673},end:{line:1,column:6694}}],line:1},"51":{loc:{start:{line:1,column:6675},end:{line:1,column:6694}},type:"binary-expr",locations:[{start:{line:1,column:6675},end:{line:1,column:6680}},{start:{line:1,column:6682},end:{line:1,column:6687}},{start:{line:1,column:6689},end:{line:1,column:6694}}],line:1},"52":{loc:{start:{line:1,column:6792},end:{line:1,column:6808}},type:"binary-expr",locations:[{start:{line:1,column:6792},end:{line:1,column:6793}},{start:{line:1,column:6796},end:{line:1,column:6807}}],line:1},"53":{loc:{start:{line:1,column:6857},end:{line:1,column:6889}},type:"cond-expr",locations:[{start:{line:1,column:6869},end:{line:1,column:6882}},{start:{line:1,column:6883},end:{line:1,column:6889}}],line:1},"54":{loc:{start:{line:1,column:6909},end:{line:1,column:6941}},type:"cond-expr",locations:[{start:{line:1,column:6921},end:{line:1,column:6934}},{start:{line:1,column:6935},end:{line:1,column:6941}}],line:1},"55":{loc:{start:{line:1,column:6961},end:{line:1,column:6993}},type:"cond-expr",locations:[{start:{line:1,column:6973},end:{line:1,column:6986}},{start:{line:1,column:6987},end:{line:1,column:6993}}],line:1},"56":{loc:{start:{line:1,column:7003},end:{line:1,column:7206}},type:"if",locations:[{start:{line:1,column:7003},end:{line:1,column:7206}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"57":{loc:{start:{line:1,column:7036},end:{line:1,column:7046}},type:"cond-expr",locations:[{start:{line:1,column:7042},end:{line:1,column:7044}},{start:{line:1,column:7045},end:{line:1,column:7046}}],line:1},"58":{loc:{start:{line:1,column:7069},end:{line:1,column:7093}},type:"cond-expr",locations:[{start:{line:1,column:7078},end:{line:1,column:7079}},{start:{line:1,column:7080},end:{line:1,column:7093}}],line:1},"59":{loc:{start:{line:1,column:7242},end:{line:1,column:7279}},type:"binary-expr",locations:[{start:{line:1,column:7242},end:{line:1,column:7243}},{start:{line:1,column:7246},end:{line:1,column:7278}}],line:1},"60":{loc:{start:{line:1,column:7913},end:{line:1,column:7957}},type:"if",locations:[{start:{line:1,column:7913},end:{line:1,column:7957}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"61":{loc:{start:{line:1,column:7916},end:{line:1,column:7947}},type:"binary-expr",locations:[{start:{line:1,column:7916},end:{line:1,column:7929}},{start:{line:1,column:7931},end:{line:1,column:7947}}],line:1},"62":{loc:{start:{line:1,column:8004},end:{line:1,column:8052}},type:"binary-expr",locations:[{start:{line:1,column:8004},end:{line:1,column:8028}},{start:{line:1,column:8030},end:{line:1,column:8052}}],line:1},"63":{loc:{start:{line:1,column:8074},end:{line:1,column:8137}},type:"binary-expr",locations:[{start:{line:1,column:8074},end:{line:1,column:8082}},{start:{line:1,column:8084},end:{line:1,column:8137}}],line:1},"64":{loc:{start:{line:1,column:8158},end:{line:1,column:8213}},type:"binary-expr",locations:[{start:{line:1,column:8159},end:{line:1,column:8177}},{start:{line:1,column:8179},end:{line:1,column:8198}},{start:{line:1,column:8201},end:{line:1,column:8213}}],line:1},"65":{loc:{start:{line:1,column:8237},end:{line:1,column:8245}},type:"cond-expr",locations:[{start:{line:1,column:8242},end:{line:1,column:8243}},{start:{line:1,column:8244},end:{line:1,column:8245}}],line:1},"66":{loc:{start:{line:1,column:8269},end:{line:1,column:8285}},type:"cond-expr",locations:[{start:{line:1,column:8282},end:{line:1,column:8283}},{start:{line:1,column:8284},end:{line:1,column:8285}}],line:1},"67":{loc:{start:{line:1,column:8300},end:{line:1,column:8358}},type:"cond-expr",locations:[{start:{line:1,column:8336},end:{line:1,column:8353}},{start:{line:1,column:8354},end:{line:1,column:8358}}],line:1},"68":{loc:{start:{line:1,column:8300},end:{line:1,column:8335}},type:"binary-expr",locations:[{start:{line:1,column:8300},end:{line:1,column:8318}},{start:{line:1,column:8320},end:{line:1,column:8335}}],line:1},"69":{loc:{start:{line:1,column:8369},end:{line:1,column:8427}},type:"cond-expr",locations:[{start:{line:1,column:8405},end:{line:1,column:8424}},{start:{line:1,column:8425},end:{line:1,column:8427}}],line:1},"70":{loc:{start:{line:1,column:8369},end:{line:1,column:8404}},type:"binary-expr",locations:[{start:{line:1,column:8369},end:{line:1,column:8387}},{start:{line:1,column:8389},end:{line:1,column:8404}}],line:1},"71":{loc:{start:{line:1,column:8446},end:{line:1,column:8497}},type:"if",locations:[{start:{line:1,column:8446},end:{line:1,column:8497}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"72":{loc:{start:{line:1,column:8449},end:{line:1,column:8477}},type:"binary-expr",locations:[{start:{line:1,column:8449},end:{line:1,column:8450}},{start:{line:1,column:8452},end:{line:1,column:8477}}],line:1},"73":{loc:{start:{line:1,column:8528},end:{line:1,column:8705}},type:"if",locations:[{start:{line:1,column:8528},end:{line:1,column:8705}},{start:{line:1,column:8631},end:{line:1,column:8705}}],line:1},"74":{loc:{start:{line:1,column:8536},end:{line:1,column:8626}},type:"if",locations:[{start:{line:1,column:8536},end:{line:1,column:8626}},{start:{line:1,column:8593},end:{line:1,column:8626}}],line:1},"75":{loc:{start:{line:1,column:8631},end:{line:1,column:8705}},type:"if",locations:[{start:{line:1,column:8631},end:{line:1,column:8705}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"76":{loc:{start:{line:1,column:8735},end:{line:1,column:8775}},type:"if",locations:[{start:{line:1,column:8735},end:{line:1,column:8775}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"77":{loc:{start:{line:1,column:8738},end:{line:1,column:8765}},type:"binary-expr",locations:[{start:{line:1,column:8738},end:{line:1,column:8740}},{start:{line:1,column:8742},end:{line:1,column:8744}},{start:{line:1,column:8746},end:{line:1,column:8765}}],line:1},"78":{loc:{start:{line:1,column:8802},end:{line:1,column:8879}},type:"if",locations:[{start:{line:1,column:8802},end:{line:1,column:8879}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"79":{loc:{start:{line:1,column:8819},end:{line:1,column:8869}},type:"binary-expr",locations:[{start:{line:1,column:8819},end:{line:1,column:8850}},{start:{line:1,column:8852},end:{line:1,column:8869}}],line:1},"80":{loc:{start:{line:1,column:8903},end:{line:1,column:8928}},type:"if",locations:[{start:{line:1,column:8903},end:{line:1,column:8928}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"81":{loc:{start:{line:1,column:8928},end:{line:1,column:9037}},type:"if",locations:[{start:{line:1,column:8928},end:{line:1,column:9037}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"82":{loc:{start:{line:1,column:9144},end:{line:1,column:9161}},type:"if",locations:[{start:{line:1,column:9144},end:{line:1,column:9161}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"83":{loc:{start:{line:1,column:9179},end:{line:1,column:9210}},type:"cond-expr",locations:[{start:{line:1,column:9190},end:{line:1,column:9199}},{start:{line:1,column:9200},end:{line:1,column:9210}}],line:1},"84":{loc:{start:{line:1,column:9179},end:{line:1,column:9189}},type:"binary-expr",locations:[{start:{line:1,column:9179},end:{line:1,column:9183}},{start:{line:1,column:9185},end:{line:1,column:9189}}],line:1},"85":{loc:{start:{line:1,column:9236},end:{line:1,column:9246}},type:"cond-expr",locations:[{start:{line:1,column:9241},end:{line:1,column:9242}},{start:{line:1,column:9243},end:{line:1,column:9246}}],line:1},"86":{loc:{start:{line:1,column:9258},end:{line:1,column:9276}},type:"if",locations:[{start:{line:1,column:9258},end:{line:1,column:9276}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"87":{loc:{start:{line:1,column:9278},end:{line:1,column:9283}},type:"binary-expr",locations:[{start:{line:1,column:9278},end:{line:1,column:9279}},{start:{line:1,column:9281},end:{line:1,column:9283}}],line:1},"88":{loc:{start:{line:1,column:9290},end:{line:1,column:9302}},type:"binary-expr",locations:[{start:{line:1,column:9290},end:{line:1,column:9298}},{start:{line:1,column:9300},end:{line:1,column:9302}}],line:1},"89":{loc:{start:{line:1,column:9326},end:{line:1,column:9351}},type:"if",locations:[{start:{line:1,column:9326},end:{line:1,column:9351}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"90":{loc:{start:{line:1,column:9489},end:{line:1,column:9506}},type:"if",locations:[{start:{line:1,column:9489},end:{line:1,column:9506}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"91":{loc:{start:{line:1,column:9524},end:{line:1,column:9598}},type:"cond-expr",locations:[{start:{line:1,column:9535},end:{line:1,column:9542}},{start:{line:1,column:9543},end:{line:1,column:9598}}],line:1},"92":{loc:{start:{line:1,column:9524},end:{line:1,column:9534}},type:"binary-expr",locations:[{start:{line:1,column:9524},end:{line:1,column:9528}},{start:{line:1,column:9530},end:{line:1,column:9534}}],line:1},"93":{loc:{start:{line:1,column:9543},end:{line:1,column:9598}},type:"binary-expr",locations:[{start:{line:1,column:9543},end:{line:1,column:9584}},{start:{line:1,column:9587},end:{line:1,column:9597}}],line:1},"94":{loc:{start:{line:1,column:9698},end:{line:1,column:9751}},type:"cond-expr",locations:[{start:{line:1,column:9715},end:{line:1,column:9734}},{start:{line:1,column:9736},end:{line:1,column:9750}}],line:1},"95":{loc:{start:{line:1,column:9815},end:{line:1,column:9831}},type:"if",locations:[{start:{line:1,column:9815},end:{line:1,column:9831}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"96":{loc:{start:{line:1,column:9833},end:{line:1,column:9840}},type:"binary-expr",locations:[{start:{line:1,column:9833},end:{line:1,column:9834}},{start:{line:1,column:9836},end:{line:1,column:9840}}],line:1},"97":{loc:{start:{line:1,column:9875},end:{line:1,column:9895}},type:"binary-expr",locations:[{start:{line:1,column:9875},end:{line:1,column:9880}},{start:{line:1,column:9883},end:{line:1,column:9894}}],line:1},"98":{loc:{start:{line:1,column:10020},end:{line:1,column:10048}},type:"if",locations:[{start:{line:1,column:10020},end:{line:1,column:10048}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"99":{loc:{start:{line:1,column:10063},end:{line:1,column:10085}},type:"if",locations:[{start:{line:1,column:10063},end:{line:1,column:10085}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"100":{loc:{start:{line:1,column:10117},end:{line:1,column:10177}},type:"binary-expr",locations:[{start:{line:1,column:10117},end:{line:1,column:10135}},{start:{line:1,column:10137},end:{line:1,column:10153}},{start:{line:1,column:10155},end:{line:1,column:10177}}],line:1},"101":{loc:{start:{line:1,column:10370},end:{line:1,column:10387}},type:"cond-expr",locations:[{start:{line:1,column:10384},end:{line:1,column:10385}},{start:{line:1,column:10386},end:{line:1,column:10387}}],line:1},"102":{loc:{start:{line:1,column:10438},end:{line:1,column:10461}},type:"cond-expr",locations:[{start:{line:1,column:10443},end:{line:1,column:10444}},{start:{line:1,column:10445},end:{line:1,column:10461}}],line:1},"103":{loc:{start:{line:1,column:10445},end:{line:1,column:10461}},type:"cond-expr",locations:[{start:{line:1,column:10450},end:{line:1,column:10451}},{start:{line:1,column:10452},end:{line:1,column:10461}}],line:1},"104":{loc:{start:{line:1,column:10452},end:{line:1,column:10461}},type:"cond-expr",locations:[{start:{line:1,column:10457},end:{line:1,column:10458}},{start:{line:1,column:10459},end:{line:1,column:10461}}],line:1},"105":{loc:{start:{line:1,column:10522},end:{line:1,column:10554}},type:"binary-expr",locations:[{start:{line:1,column:10522},end:{line:1,column:10529}},{start:{line:1,column:10532},end:{line:1,column:10553}}],line:1},"106":{loc:{start:{line:1,column:10562},end:{line:1,column:10582}},type:"binary-expr",locations:[{start:{line:1,column:10562},end:{line:1,column:10571}},{start:{line:1,column:10573},end:{line:1,column:10582}}],line:1},"107":{loc:{start:{line:1,column:10632},end:{line:1,column:10739}},type:"binary-expr",locations:[{start:{line:1,column:10632},end:{line:1,column:10650}},{start:{line:1,column:10652},end:{line:1,column:10670}},{start:{line:1,column:10672},end:{line:1,column:10680}},{start:{line:1,column:10682},end:{line:1,column:10739}}],line:1},"108":{loc:{start:{line:1,column:10684},end:{line:1,column:10738}},type:"binary-expr",locations:[{start:{line:1,column:10684},end:{line:1,column:10707}},{start:{line:1,column:10709},end:{line:1,column:10723}},{start:{line:1,column:10725},end:{line:1,column:10738}}],line:1},"109":{loc:{start:{line:1,column:10761},end:{line:1,column:10803}},type:"binary-expr",locations:[{start:{line:1,column:10761},end:{line:1,column:10767}},{start:{line:1,column:10769},end:{line:1,column:10790}},{start:{line:1,column:10792},end:{line:1,column:10803}}],line:1},"110":{loc:{start:{line:1,column:10848},end:{line:1,column:10862}},type:"binary-expr",locations:[{start:{line:1,column:10848},end:{line:1,column:10854}},{start:{line:1,column:10856},end:{line:1,column:10862}}],line:1},"111":{loc:{start:{line:1,column:10929},end:{line:1,column:10988}},type:"binary-expr",locations:[{start:{line:1,column:10929},end:{line:1,column:10937}},{start:{line:1,column:10940},end:{line:1,column:10987}}],line:1},"112":{loc:{start:{line:1,column:11068},end:{line:1,column:11084}},type:"if",locations:[{start:{line:1,column:11068},end:{line:1,column:11084}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"113":{loc:{start:{line:1,column:11230},end:{line:1,column:11245}},type:"binary-expr",locations:[{start:{line:1,column:11230},end:{line:1,column:11237}},{start:{line:1,column:11240},end:{line:1,column:11244}}],line:1},"114":{loc:{start:{line:1,column:11497},end:{line:1,column:11529}},type:"binary-expr",locations:[{start:{line:1,column:11497},end:{line:1,column:11502}},{start:{line:1,column:11504},end:{line:1,column:11509}},{start:{line:1,column:11511},end:{line:1,column:11512}},{start:{line:1,column:11514},end:{line:1,column:11519}},{start:{line:1,column:11521},end:{line:1,column:11524}},{start:{line:1,column:11526},end:{line:1,column:11529}}],line:1},"115":{loc:{start:{line:1,column:11639},end:{line:1,column:11645}},type:"default-arg",locations:[{start:{line:1,column:11641},end:{line:1,column:11645}}],line:1},"116":{loc:{start:{line:1,column:11654},end:{line:1,column:11692}},type:"binary-expr",locations:[{start:{line:1,column:11654},end:{line:1,column:11672}},{start:{line:1,column:11674},end:{line:1,column:11692}}],line:1},"117":{loc:{start:{line:1,column:11714},end:{line:1,column:11728}},type:"binary-expr",locations:[{start:{line:1,column:11714},end:{line:1,column:11715}},{start:{line:1,column:11718},end:{line:1,column:11727}}],line:1},"118":{loc:{start:{line:1,column:11773},end:{line:1,column:11785}},type:"cond-expr",locations:[{start:{line:1,column:11778},end:{line:1,column:11781}},{start:{line:1,column:11782},end:{line:1,column:11785}}],line:1},"119":{loc:{start:{line:1,column:11829},end:{line:1,column:11895}},type:"cond-expr",locations:[{start:{line:1,column:11831},end:{line:1,column:11882}},{start:{line:1,column:11883},end:{line:1,column:11895}}],line:1},"120":{loc:{start:{line:1,column:11856},end:{line:1,column:11881}},type:"binary-expr",locations:[{start:{line:1,column:11856},end:{line:1,column:11859}},{start:{line:1,column:11861},end:{line:1,column:11866}},{start:{line:1,column:11868},end:{line:1,column:11881}}],line:1},"121":{loc:{start:{line:1,column:11974},end:{line:1,column:11985}},type:"binary-expr",locations:[{start:{line:1,column:11974},end:{line:1,column:11977}},{start:{line:1,column:11979},end:{line:1,column:11985}}],line:1},"122":{loc:{start:{line:1,column:11996},end:{line:1,column:12009}},type:"binary-expr",locations:[{start:{line:1,column:11996},end:{line:1,column:11999}},{start:{line:1,column:12001},end:{line:1,column:12009}}],line:1},"123":{loc:{start:{line:1,column:12022},end:{line:1,column:12052}},type:"cond-expr",locations:[{start:{line:1,column:12038},end:{line:1,column:12050}},{start:{line:1,column:12051},end:{line:1,column:12052}}],line:1},"124":{loc:{start:{line:1,column:12022},end:{line:1,column:12037}},type:"binary-expr",locations:[{start:{line:1,column:12022},end:{line:1,column:12025}},{start:{line:1,column:12027},end:{line:1,column:12037}}],line:1},"125":{loc:{start:{line:1,column:12119},end:{line:1,column:12170}},type:"if",locations:[{start:{line:1,column:12119},end:{line:1,column:12170}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"126":{loc:{start:{line:1,column:12435},end:{line:1,column:12470}},type:"binary-expr",locations:[{start:{line:1,column:12435},end:{line:1,column:12458}},{start:{line:1,column:12460},end:{line:1,column:12470}}],line:1},"127":{loc:{start:{line:1,column:12514},end:{line:1,column:12527}},type:"if",locations:[{start:{line:1,column:12514},end:{line:1,column:12527}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"128":{loc:{start:{line:1,column:12560},end:{line:1,column:12581}},type:"binary-expr",locations:[{start:{line:1,column:12560},end:{line:1,column:12566}},{start:{line:1,column:12568},end:{line:1,column:12581}}],line:1},"129":{loc:{start:{line:1,column:12582},end:{line:1,column:12645}},type:"binary-expr",locations:[{start:{line:1,column:12582},end:{line:1,column:12595}},{start:{line:1,column:12598},end:{line:1,column:12644}}],line:1},"130":{loc:{start:{line:1,column:12685},end:{line:1,column:12718}},type:"cond-expr",locations:[{start:{line:1,column:12703},end:{line:1,column:12704}},{start:{line:1,column:12705},end:{line:1,column:12718}}],line:1},"131":{loc:{start:{line:1,column:12745},end:{line:1,column:12815}},type:"cond-expr",locations:[{start:{line:1,column:12763},end:{line:1,column:12786}},{start:{line:1,column:12787},end:{line:1,column:12815}}],line:1},"132":{loc:{start:{line:1,column:12877},end:{line:1,column:12926}},type:"binary-expr",locations:[{start:{line:1,column:12877},end:{line:1,column:12878}},{start:{line:1,column:12881},end:{line:1,column:12925}}],line:1},"133":{loc:{start:{line:1,column:12980},end:{line:1,column:13035}},type:"cond-expr",locations:[{start:{line:1,column:12983},end:{line:1,column:13018}},{start:{line:1,column:13020},end:{line:1,column:13035}}],line:1},"134":{loc:{start:{line:1,column:13049},end:{line:1,column:13094}},type:"cond-expr",locations:[{start:{line:1,column:13061},end:{line:1,column:13067}},{start:{line:1,column:13068},end:{line:1,column:13094}}],line:1},"135":{loc:{start:{line:1,column:13068},end:{line:1,column:13094}},type:"cond-expr",locations:[{start:{line:1,column:13078},end:{line:1,column:13085}},{start:{line:1,column:13086},end:{line:1,column:13094}}],line:1},"136":{loc:{start:{line:1,column:13106},end:{line:1,column:13139}},type:"cond-expr",locations:[{start:{line:1,column:13118},end:{line:1,column:13119}},{start:{line:1,column:13120},end:{line:1,column:13139}}],line:1},"137":{loc:{start:{line:1,column:13120},end:{line:1,column:13139}},type:"cond-expr",locations:[{start:{line:1,column:13130},end:{line:1,column:13131}},{start:{line:1,column:13132},end:{line:1,column:13139}}],line:1},"138":{loc:{start:{line:1,column:13154},end:{line:1,column:13201}},type:"cond-expr",locations:[{start:{line:1,column:13177},end:{line:1,column:13178}},{start:{line:1,column:13179},end:{line:1,column:13201}}],line:1},"139":{loc:{start:{line:1,column:13159},end:{line:1,column:13175}},type:"cond-expr",locations:[{start:{line:1,column:13161},end:{line:1,column:13167}},{start:{line:1,column:13168},end:{line:1,column:13175}}],line:1},"140":{loc:{start:{line:1,column:13179},end:{line:1,column:13201}},type:"cond-expr",locations:[{start:{line:1,column:13192},end:{line:1,column:13199}},{start:{line:1,column:13200},end:{line:1,column:13201}}],line:1},"141":{loc:{start:{line:1,column:13244},end:{line:1,column:13767}},type:"if",locations:[{start:{line:1,column:13244},end:{line:1,column:13767}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"142":{loc:{start:{line:1,column:13295},end:{line:1,column:13355}},type:"cond-expr",locations:[{start:{line:1,column:13324},end:{line:1,column:13350}},{start:{line:1,column:13351},end:{line:1,column:13355}}],line:1},"143":{loc:{start:{line:1,column:13295},end:{line:1,column:13323}},type:"binary-expr",locations:[{start:{line:1,column:13295},end:{line:1,column:13304}},{start:{line:1,column:13306},end:{line:1,column:13323}}],line:1},"144":{loc:{start:{line:1,column:13423},end:{line:1,column:13586}},type:"if",locations:[{start:{line:1,column:13423},end:{line:1,column:13586}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"145":{loc:{start:{line:1,column:13429},end:{line:1,column:13573}},type:"if",locations:[{start:{line:1,column:13429},end:{line:1,column:13573}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"146":{loc:{start:{line:1,column:13456},end:{line:1,column:13492}},type:"cond-expr",locations:[{start:{line:1,column:13458},end:{line:1,column:13459}},{start:{line:1,column:13460},end:{line:1,column:13492}}],line:1},"147":{loc:{start:{line:1,column:13586},end:{line:1,column:13766}},type:"if",locations:[{start:{line:1,column:13586},end:{line:1,column:13766}},{start:{line:1,column:13761},end:{line:1,column:13766}}],line:1},"148":{loc:{start:{line:1,column:13630},end:{line:1,column:13671}},type:"cond-expr",locations:[{start:{line:1,column:13632},end:{line:1,column:13633}},{start:{line:1,column:13634},end:{line:1,column:13671}}],line:1},"149":{loc:{start:{line:1,column:13673},end:{line:1,column:13743}},type:"if",locations:[{start:{line:1,column:13673},end:{line:1,column:13743}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"150":{loc:{start:{line:1,column:13894},end:{line:1,column:13927}},type:"if",locations:[{start:{line:1,column:13894},end:{line:1,column:13927}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"151":{loc:{start:{line:1,column:13933},end:{line:1,column:13995}},type:"binary-expr",locations:[{start:{line:1,column:13933},end:{line:1,column:13947}},{start:{line:1,column:13949},end:{line:1,column:13963}},{start:{line:1,column:13965},end:{line:1,column:13979}},{start:{line:1,column:13981},end:{line:1,column:13995}}],line:1},"152":{loc:{start:{line:1,column:14034},end:{line:1,column:14046}},type:"binary-expr",locations:[{start:{line:1,column:14034},end:{line:1,column:14039}},{start:{line:1,column:14041},end:{line:1,column:14046}}],line:1},"153":{loc:{start:{line:1,column:14231},end:{line:1,column:14265}},type:"cond-expr",locations:[{start:{line:1,column:14241},end:{line:1,column:14247}},{start:{line:1,column:14248},end:{line:1,column:14265}}],line:1},"154":{loc:{start:{line:1,column:14334},end:{line:1,column:14370}},type:"cond-expr",locations:[{start:{line:1,column:14344},end:{line:1,column:14352}},{start:{line:1,column:14353},end:{line:1,column:14370}}],line:1},"155":{loc:{start:{line:1,column:14446},end:{line:1,column:14487}},type:"cond-expr",locations:[{start:{line:1,column:14456},end:{line:1,column:14466}},{start:{line:1,column:14467},end:{line:1,column:14487}}],line:1},"156":{loc:{start:{line:1,column:14564},end:{line:1,column:14608}},type:"cond-expr",locations:[{start:{line:1,column:14574},end:{line:1,column:14586}},{start:{line:1,column:14587},end:{line:1,column:14608}}],line:1},"157":{loc:{start:{line:1,column:14722},end:{line:1,column:14750}},type:"cond-expr",locations:[{start:{line:1,column:14728},end:{line:1,column:14729}},{start:{line:1,column:14730},end:{line:1,column:14750}}],line:1},"158":{loc:{start:{line:1,column:14766},end:{line:1,column:14794}},type:"cond-expr",locations:[{start:{line:1,column:14772},end:{line:1,column:14773}},{start:{line:1,column:14774},end:{line:1,column:14794}}],line:1},"159":{loc:{start:{line:1,column:14812},end:{line:1,column:14882}},type:"cond-expr",locations:[{start:{line:1,column:14818},end:{line:1,column:14819}},{start:{line:1,column:14820},end:{line:1,column:14882}}],line:1},"160":{loc:{start:{line:1,column:14820},end:{line:1,column:14882}},type:"cond-expr",locations:[{start:{line:1,column:14825},end:{line:1,column:14850}},{start:{line:1,column:14851},end:{line:1,column:14882}}],line:1},"161":{loc:{start:{line:1,column:14897},end:{line:1,column:14925}},type:"cond-expr",locations:[{start:{line:1,column:14902},end:{line:1,column:14903}},{start:{line:1,column:14904},end:{line:1,column:14925}}],line:1},"162":{loc:{start:{line:1,column:14980},end:{line:1,column:15043}},type:"cond-expr",locations:[{start:{line:1,column:14990},end:{line:1,column:15014}},{start:{line:1,column:15015},end:{line:1,column:15043}}],line:1},"163":{loc:{start:{line:1,column:15061},end:{line:1,column:15082}},type:"cond-expr",locations:[{start:{line:1,column:15067},end:{line:1,column:15068}},{start:{line:1,column:15069},end:{line:1,column:15082}}],line:1},"164":{loc:{start:{line:1,column:15101},end:{line:1,column:15122}},type:"cond-expr",locations:[{start:{line:1,column:15107},end:{line:1,column:15108}},{start:{line:1,column:15109},end:{line:1,column:15122}}],line:1},"165":{loc:{start:{line:1,column:15150},end:{line:1,column:15209}},type:"cond-expr",locations:[{start:{line:1,column:15156},end:{line:1,column:15157}},{start:{line:1,column:15158},end:{line:1,column:15209}}],line:1},"166":{loc:{start:{line:1,column:15158},end:{line:1,column:15209}},type:"cond-expr",locations:[{start:{line:1,column:15163},end:{line:1,column:15183}},{start:{line:1,column:15184},end:{line:1,column:15209}}],line:1},"167":{loc:{start:{line:1,column:15355},end:{line:1,column:15431}},type:"cond-expr",locations:[{start:{line:1,column:15365},end:{line:1,column:15394}},{start:{line:1,column:15395},end:{line:1,column:15431}}],line:1},"168":{loc:{start:{line:1,column:15497},end:{line:1,column:15626}},type:"cond-expr",locations:[{start:{line:1,column:15506},end:{line:1,column:15516}},{start:{line:1,column:15517},end:{line:1,column:15626}}],line:1},"169":{loc:{start:{line:1,column:15517},end:{line:1,column:15626}},type:"cond-expr",locations:[{start:{line:1,column:15526},end:{line:1,column:15552}},{start:{line:1,column:15553},end:{line:1,column:15626}}],line:1},"170":{loc:{start:{line:1,column:15553},end:{line:1,column:15626}},type:"cond-expr",locations:[{start:{line:1,column:15564},end:{line:1,column:15593}},{start:{line:1,column:15594},end:{line:1,column:15626}}],line:1},"171":{loc:{start:{line:1,column:15647},end:{line:1,column:15705}},type:"cond-expr",locations:[{start:{line:1,column:15652},end:{line:1,column:15675}},{start:{line:1,column:15676},end:{line:1,column:15705}}],line:1},"172":{loc:{start:{line:1,column:15722},end:{line:1,column:15834}},type:"if",locations:[{start:{line:1,column:15722},end:{line:1,column:15834}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"173":{loc:{start:{line:1,column:15725},end:{line:1,column:15746}},type:"binary-expr",locations:[{start:{line:1,column:15725},end:{line:1,column:15726}},{start:{line:1,column:15728},end:{line:1,column:15746}}],line:1},"174":{loc:{start:{line:1,column:15774},end:{line:1,column:15833}},type:"binary-expr",locations:[{start:{line:1,column:15774},end:{line:1,column:15802}},{start:{line:1,column:15804},end:{line:1,column:15833}}],line:1},"175":{loc:{start:{line:1,column:15865},end:{line:1,column:15882}},type:"cond-expr",locations:[{start:{line:1,column:15871},end:{line:1,column:15872}},{start:{line:1,column:15873},end:{line:1,column:15882}}],line:1},"176":{loc:{start:{line:1,column:15905},end:{line:1,column:15958}},type:"cond-expr",locations:[{start:{line:1,column:15911},end:{line:1,column:15912}},{start:{line:1,column:15913},end:{line:1,column:15958}}],line:1},"177":{loc:{start:{line:1,column:16260},end:{line:1,column:16304}},type:"binary-expr",locations:[{start:{line:1,column:16260},end:{line:1,column:16276}},{start:{line:1,column:16278},end:{line:1,column:16294}},{start:{line:1,column:16296},end:{line:1,column:16304}}],line:1},"178":{loc:{start:{line:1,column:16844},end:{line:1,column:16849}},type:"binary-expr",locations:[{start:{line:1,column:16844},end:{line:1,column:16845}},{start:{line:1,column:16847},end:{line:1,column:16849}}],line:1},"179":{loc:{start:{line:1,column:16895},end:{line:1,column:16940}},type:"binary-expr",locations:[{start:{line:1,column:16895},end:{line:1,column:16896}},{start:{line:1,column:16899},end:{line:1,column:16939}}],line:1},"180":{loc:{start:{line:1,column:17012},end:{line:1,column:17023}},type:"cond-expr",locations:[{start:{line:1,column:17017},end:{line:1,column:17018}},{start:{line:1,column:17019},end:{line:1,column:17023}}],line:1},"181":{loc:{start:{line:1,column:17040},end:{line:1,column:17059}},type:"if",locations:[{start:{line:1,column:17040},end:{line:1,column:17059}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"182":{loc:{start:{line:1,column:17097},end:{line:1,column:17224}},type:"if",locations:[{start:{line:1,column:17097},end:{line:1,column:17224}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"183":{loc:{start:{line:1,column:17179},end:{line:1,column:17213}},type:"binary-expr",locations:[{start:{line:1,column:17180},end:{line:1,column:17186}},{start:{line:1,column:17188},end:{line:1,column:17194}},{start:{line:1,column:17198},end:{line:1,column:17212}}],line:1},"184":{loc:{start:{line:1,column:17248},end:{line:1,column:17300}},type:"cond-expr",locations:[{start:{line:1,column:17257},end:{line:1,column:17258}},{start:{line:1,column:17259},end:{line:1,column:17300}}],line:1},"185":{loc:{start:{line:1,column:17444},end:{line:1,column:17463}},type:"if",locations:[{start:{line:1,column:17444},end:{line:1,column:17463}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"186":{loc:{start:{line:1,column:17469},end:{line:1,column:17519}},type:"binary-expr",locations:[{start:{line:1,column:17469},end:{line:1,column:17485}},{start:{line:1,column:17487},end:{line:1,column:17519}}],line:1},"187":{loc:{start:{line:1,column:17526},end:{line:1,column:17599}},type:"cond-expr",locations:[{start:{line:1,column:17569},end:{line:1,column:17596}},{start:{line:1,column:17597},end:{line:1,column:17599}}],line:1},"188":{loc:{start:{line:1,column:17526},end:{line:1,column:17568}},type:"binary-expr",locations:[{start:{line:1,column:17526},end:{line:1,column:17553}},{start:{line:1,column:17555},end:{line:1,column:17568}}],line:1},"189":{loc:{start:{line:1,column:17625},end:{line:1,column:17679}},type:"cond-expr",locations:[{start:{line:1,column:17636},end:{line:1,column:17657}},{start:{line:1,column:17658},end:{line:1,column:17679}}],line:1},"190":{loc:{start:{line:1,column:17687},end:{line:1,column:17741}},type:"binary-expr",locations:[{start:{line:1,column:17687},end:{line:1,column:17701}},{start:{line:1,column:17703},end:{line:1,column:17720}},{start:{line:1,column:17723},end:{line:1,column:17740}}],line:1},"191":{loc:{start:{line:1,column:18656},end:{line:1,column:18733}},type:"binary-expr",locations:[{start:{line:1,column:18656},end:{line:1,column:18679}},{start:{line:1,column:18681},end:{line:1,column:18703}},{start:{line:1,column:18705},end:{line:1,column:18719}},{start:{line:1,column:18721},end:{line:1,column:18733}}],line:1},"192":{loc:{start:{line:1,column:18748},end:{line:1,column:18798}},type:"binary-expr",locations:[{start:{line:1,column:18748},end:{line:1,column:18764}},{start:{line:1,column:18766},end:{line:1,column:18786}},{start:{line:1,column:18788},end:{line:1,column:18798}}],line:1},"193":{loc:{start:{line:1,column:18883},end:{line:1,column:18920}},type:"binary-expr",locations:[{start:{line:1,column:18883},end:{line:1,column:18904}},{start:{line:1,column:18906},end:{line:1,column:18920}}],line:1},"194":{loc:{start:{line:1,column:19026},end:{line:1,column:19041}},type:"if",locations:[{start:{line:1,column:19026},end:{line:1,column:19041}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"195":{loc:{start:{line:1,column:19105},end:{line:1,column:19137}},type:"binary-expr",locations:[{start:{line:1,column:19105},end:{line:1,column:19109}},{start:{line:1,column:19112},end:{line:1,column:19136}}],line:1},"196":{loc:{start:{line:1,column:19173},end:{line:1,column:19220}},type:"cond-expr",locations:[{start:{line:1,column:19192},end:{line:1,column:19205}},{start:{line:1,column:19206},end:{line:1,column:19220}}],line:1},"197":{loc:{start:{line:1,column:20400},end:{line:1,column:20433}},type:"cond-expr",locations:[{start:{line:1,column:20405},end:{line:1,column:20426}},{start:{line:1,column:20427},end:{line:1,column:20433}}],line:1},"198":{loc:{start:{line:1,column:20670},end:{line:1,column:20775}},type:"cond-expr",locations:[{start:{line:1,column:20697},end:{line:1,column:20701}},{start:{line:1,column:20702},end:{line:1,column:20775}}],line:1},"199":{loc:{start:{line:1,column:20670},end:{line:1,column:20696}},type:"binary-expr",locations:[{start:{line:1,column:20670},end:{line:1,column:20672}},{start:{line:1,column:20674},end:{line:1,column:20683}},{start:{line:1,column:20685},end:{line:1,column:20696}}],line:1},"200":{loc:{start:{line:1,column:20703},end:{line:1,column:20725}},type:"cond-expr",locations:[{start:{line:1,column:20711},end:{line:1,column:20722}},{start:{line:1,column:20723},end:{line:1,column:20725}}],line:1},"201":{loc:{start:{line:1,column:20728},end:{line:1,column:20752}},type:"cond-expr",locations:[{start:{line:1,column:20737},end:{line:1,column:20749}},{start:{line:1,column:20750},end:{line:1,column:20752}}],line:1},"202":{loc:{start:{line:1,column:20817},end:{line:1,column:20861}},type:"binary-expr",locations:[{start:{line:1,column:20817},end:{line:1,column:20818}},{start:{line:1,column:20821},end:{line:1,column:20860}}],line:1},"203":{loc:{start:{line:1,column:20862},end:{line:1,column:20872}},type:"binary-expr",locations:[{start:{line:1,column:20862},end:{line:1,column:20865}},{start:{line:1,column:20868},end:{line:1,column:20871}}],line:1},"204":{loc:{start:{line:1,column:20898},end:{line:1,column:20903}},type:"binary-expr",locations:[{start:{line:1,column:20898},end:{line:1,column:20899}},{start:{line:1,column:20901},end:{line:1,column:20903}}],line:1},"205":{loc:{start:{line:1,column:20917},end:{line:1,column:20927}},type:"binary-expr",locations:[{start:{line:1,column:20917},end:{line:1,column:20923}},{start:{line:1,column:20925},end:{line:1,column:20927}}],line:1},"206":{loc:{start:{line:1,column:20947},end:{line:1,column:20967}},type:"binary-expr",locations:[{start:{line:1,column:20947},end:{line:1,column:20963}},{start:{line:1,column:20965},end:{line:1,column:20967}}],line:1},"207":{loc:{start:{line:1,column:20968},end:{line:1,column:21024}},type:"binary-expr",locations:[{start:{line:1,column:20968},end:{line:1,column:20978}},{start:{line:1,column:20981},end:{line:1,column:21023}}],line:1},"208":{loc:{start:{line:1,column:21088},end:{line:1,column:21210}},type:"if",locations:[{start:{line:1,column:21088},end:{line:1,column:21210}},{start:{line:1,column:21134},end:{line:1,column:21210}}],line:1},"209":{loc:{start:{line:1,column:21098},end:{line:1,column:21112}},type:"binary-expr",locations:[{start:{line:1,column:21098},end:{line:1,column:21105}},{start:{line:1,column:21107},end:{line:1,column:21112}}],line:1},"210":{loc:{start:{line:1,column:21134},end:{line:1,column:21210}},type:"if",locations:[{start:{line:1,column:21134},end:{line:1,column:21210}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"211":{loc:{start:{line:1,column:21176},end:{line:1,column:21209}},type:"binary-expr",locations:[{start:{line:1,column:21176},end:{line:1,column:21183}},{start:{line:1,column:21185},end:{line:1,column:21190}},{start:{line:1,column:21193},end:{line:1,column:21208}}],line:1},"212":{loc:{start:{line:1,column:21239},end:{line:1,column:21299}},type:"if",locations:[{start:{line:1,column:21239},end:{line:1,column:21299}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"213":{loc:{start:{line:1,column:21361},end:{line:1,column:21385}},type:"cond-expr",locations:[{start:{line:1,column:21367},end:{line:1,column:21383}},{start:{line:1,column:21384},end:{line:1,column:21385}}],line:1},"214":{loc:{start:{line:1,column:21434},end:{line:1,column:21541}},type:"binary-expr",locations:[{start:{line:1,column:21434},end:{line:1,column:21436}},{start:{line:1,column:21438},end:{line:1,column:21440}},{start:{line:1,column:21443},end:{line:1,column:21540}}],line:1},"215":{loc:{start:{line:1,column:21445},end:{line:1,column:21466}},type:"binary-expr",locations:[{start:{line:1,column:21445},end:{line:1,column:21446}},{start:{line:1,column:21448},end:{line:1,column:21466}}],line:1},"216":{loc:{start:{line:1,column:21665},end:{line:1,column:21669}},type:"binary-expr",locations:[{start:{line:1,column:21665},end:{line:1,column:21666}},{start:{line:1,column:21668},end:{line:1,column:21669}}],line:1},"217":{loc:{start:{line:1,column:21674},end:{line:1,column:21896}},type:"if",locations:[{start:{line:1,column:21674},end:{line:1,column:21896}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"218":{loc:{start:{line:1,column:21677},end:{line:1,column:21782}},type:"binary-expr",locations:[{start:{line:1,column:21677},end:{line:1,column:21678}},{start:{line:1,column:21680},end:{line:1,column:21698}},{start:{line:1,column:21701},end:{line:1,column:21781}}],line:1},"219":{loc:{start:{line:1,column:21716},end:{line:1,column:21781}},type:"binary-expr",locations:[{start:{line:1,column:21716},end:{line:1,column:21747}},{start:{line:1,column:21749},end:{line:1,column:21781}}],line:1},"220":{loc:{start:{line:1,column:21896},end:{line:1,column:23465}},type:"if",locations:[{start:{line:1,column:21896},end:{line:1,column:23465}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"221":{loc:{start:{line:1,column:21901},end:{line:1,column:21915}},type:"binary-expr",locations:[{start:{line:1,column:21901},end:{line:1,column:21909}},{start:{line:1,column:21911},end:{line:1,column:21915}}],line:1},"222":{loc:{start:{line:1,column:21918},end:{line:1,column:23428}},type:"switch",locations:[{start:{line:1,column:21942},end:{line:1,column:22016}},{start:{line:1,column:22016},end:{line:1,column:22199}},{start:{line:1,column:22199},end:{line:1,column:22444}},{start:{line:1,column:22444},end:{line:1,column:22525}},{start:{line:1,column:22525},end:{line:1,column:22711}},{start:{line:1,column:22711},end:{line:1,column:22732}},{start:{line:1,column:22732},end:{line:1,column:22902}},{start:{line:1,column:22902},end:{line:1,column:23229}},{start:{line:1,column:23229},end:{line:1,column:23320}},{start:{line:1,column:23320},end:{line:1,column:23401}},{start:{line:1,column:23401},end:{line:1,column:23427}}],line:1},"223":{loc:{start:{line:1,column:21950},end:{line:1,column:21995}},type:"cond-expr",locations:[{start:{line:1,column:21952},end:{line:1,column:21978}},{start:{line:1,column:21979},end:{line:1,column:21995}}],line:1},"224":{loc:{start:{line:1,column:22033},end:{line:1,column:22040}},type:"cond-expr",locations:[{start:{line:1,column:22035},end:{line:1,column:22038}},{start:{line:1,column:22039},end:{line:1,column:22040}}],line:1},"225":{loc:{start:{line:1,column:22269},end:{line:1,column:22278}},type:"cond-expr",locations:[{start:{line:1,column:22271},end:{line:1,column:22276}},{start:{line:1,column:22277},end:{line:1,column:22278}}],line:1},"226":{loc:{start:{line:1,column:22317},end:{line:1,column:22326}},type:"cond-expr",locations:[{start:{line:1,column:22319},end:{line:1,column:22324}},{start:{line:1,column:22325},end:{line:1,column:22326}}],line:1},"227":{loc:{start:{line:1,column:22455},end:{line:1,column:22519}},type:"if",locations:[{start:{line:1,column:22455},end:{line:1,column:22519}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"228":{loc:{start:{line:1,column:22481},end:{line:1,column:22488}},type:"cond-expr",locations:[{start:{line:1,column:22483},end:{line:1,column:22486}},{start:{line:1,column:22487},end:{line:1,column:22488}}],line:1},"229":{loc:{start:{line:1,column:22554},end:{line:1,column:22561}},type:"cond-expr",locations:[{start:{line:1,column:22556},end:{line:1,column:22559}},{start:{line:1,column:22560},end:{line:1,column:22561}}],line:1},"230":{loc:{start:{line:1,column:22610},end:{line:1,column:22617}},type:"cond-expr",locations:[{start:{line:1,column:22612},end:{line:1,column:22615}},{start:{line:1,column:22616},end:{line:1,column:22617}}],line:1},"231":{loc:{start:{line:1,column:22759},end:{line:1,column:22766}},type:"cond-expr",locations:[{start:{line:1,column:22761},end:{line:1,column:22764}},{start:{line:1,column:22765},end:{line:1,column:22766}}],line:1},"232":{loc:{start:{line:1,column:22815},end:{line:1,column:22822}},type:"cond-expr",locations:[{start:{line:1,column:22817},end:{line:1,column:22820}},{start:{line:1,column:22821},end:{line:1,column:22822}}],line:1},"233":{loc:{start:{line:1,column:22928},end:{line:1,column:22935}},type:"cond-expr",locations:[{start:{line:1,column:22930},end:{line:1,column:22933}},{start:{line:1,column:22934},end:{line:1,column:22935}}],line:1},"234":{loc:{start:{line:1,column:22984},end:{line:1,column:22991}},type:"cond-expr",locations:[{start:{line:1,column:22986},end:{line:1,column:22989}},{start:{line:1,column:22990},end:{line:1,column:22991}}],line:1},"235":{loc:{start:{line:1,column:23086},end:{line:1,column:23093}},type:"cond-expr",locations:[{start:{line:1,column:23088},end:{line:1,column:23091}},{start:{line:1,column:23092},end:{line:1,column:23093}}],line:1},"236":{loc:{start:{line:1,column:23142},end:{line:1,column:23149}},type:"cond-expr",locations:[{start:{line:1,column:23144},end:{line:1,column:23147}},{start:{line:1,column:23148},end:{line:1,column:23149}}],line:1},"237":{loc:{start:{line:1,column:23242},end:{line:1,column:23261}},type:"cond-expr",locations:[{start:{line:1,column:23244},end:{line:1,column:23247}},{start:{line:1,column:23248},end:{line:1,column:23261}}],line:1},"238":{loc:{start:{line:1,column:23369},end:{line:1,column:23376}},type:"cond-expr",locations:[{start:{line:1,column:23371},end:{line:1,column:23374}},{start:{line:1,column:23375},end:{line:1,column:23376}}],line:1},"239":{loc:{start:{line:1,column:23437},end:{line:1,column:23464}},type:"binary-expr",locations:[{start:{line:1,column:23437},end:{line:1,column:23452}},{start:{line:1,column:23454},end:{line:1,column:23464}}],line:1},"240":{loc:{start:{line:1,column:23494},end:{line:1,column:23499}},type:"binary-expr",locations:[{start:{line:1,column:23494},end:{line:1,column:23495}},{start:{line:1,column:23497},end:{line:1,column:23499}}],line:1},"241":{loc:{start:{line:1,column:23500},end:{line:1,column:23563}},type:"binary-expr",locations:[{start:{line:1,column:23500},end:{line:1,column:23502}},{start:{line:1,column:23504},end:{line:1,column:23505}},{start:{line:1,column:23507},end:{line:1,column:23519}},{start:{line:1,column:23521},end:{line:1,column:23534}},{start:{line:1,column:23536},end:{line:1,column:23547}},{start:{line:1,column:23549},end:{line:1,column:23563}}],line:1},"242":{loc:{start:{line:1,column:23714},end:{line:1,column:23745}},type:"if",locations:[{start:{line:1,column:23714},end:{line:1,column:23745}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"243":{loc:{start:{line:1,column:23745},end:{line:1,column:23870}},type:"if",locations:[{start:{line:1,column:23745},end:{line:1,column:23870}},{start:{line:1,column:23817},end:{line:1,column:23870}}],line:1},"244":{loc:{start:{line:1,column:23817},end:{line:1,column:23869}},type:"cond-expr",locations:[{start:{line:1,column:23834},end:{line:1,column:23851}},{start:{line:1,column:23852},end:{line:1,column:23869}}],line:1},"245":{loc:{start:{line:1,column:23909},end:{line:1,column:23940}},type:"if",locations:[{start:{line:1,column:23909},end:{line:1,column:23940}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"246":{loc:{start:{line:1,column:23956},end:{line:1,column:23971}},type:"cond-expr",locations:[{start:{line:1,column:23958},end:{line:1,column:23964}},{start:{line:1,column:23965},end:{line:1,column:23971}}],line:1},"247":{loc:{start:{line:1,column:23972},end:{line:1,column:23987}},type:"cond-expr",locations:[{start:{line:1,column:23974},end:{line:1,column:23980}},{start:{line:1,column:23981},end:{line:1,column:23987}}],line:1},"248":{loc:{start:{line:1,column:23988},end:{line:1,column:24003}},type:"cond-expr",locations:[{start:{line:1,column:23990},end:{line:1,column:23996}},{start:{line:1,column:23997},end:{line:1,column:24003}}],line:1},"249":{loc:{start:{line:1,column:24004},end:{line:1,column:24019}},type:"cond-expr",locations:[{start:{line:1,column:24006},end:{line:1,column:24012}},{start:{line:1,column:24013},end:{line:1,column:24019}}],line:1},"250":{loc:{start:{line:1,column:24046},end:{line:1,column:24107}},type:"binary-expr",locations:[{start:{line:1,column:24046},end:{line:1,column:24059}},{start:{line:1,column:24061},end:{line:1,column:24107}}],line:1},"251":{loc:{start:{line:1,column:24108},end:{line:1,column:24143}},type:"binary-expr",locations:[{start:{line:1,column:24108},end:{line:1,column:24121}},{start:{line:1,column:24123},end:{line:1,column:24143}}],line:1},"252":{loc:{start:{line:1,column:24144},end:{line:1,column:24174}},type:"binary-expr",locations:[{start:{line:1,column:24144},end:{line:1,column:24151}},{start:{line:1,column:24154},end:{line:1,column:24173}}],line:1},"253":{loc:{start:{line:1,column:24175},end:{line:1,column:24213}},type:"binary-expr",locations:[{start:{line:1,column:24175},end:{line:1,column:24186}},{start:{line:1,column:24189},end:{line:1,column:24212}}],line:1},"254":{loc:{start:{line:1,column:24214},end:{line:1,column:24261}},type:"binary-expr",locations:[{start:{line:1,column:24214},end:{line:1,column:24228}},{start:{line:1,column:24231},end:{line:1,column:24260}}],line:1},"255":{loc:{start:{line:1,column:24285},end:{line:1,column:24599}},type:"if",locations:[{start:{line:1,column:24285},end:{line:1,column:24599}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"256":{loc:{start:{line:1,column:24288},end:{line:1,column:24316}},type:"binary-expr",locations:[{start:{line:1,column:24288},end:{line:1,column:24303}},{start:{line:1,column:24305},end:{line:1,column:24316}}],line:1},"257":{loc:{start:{line:1,column:24461},end:{line:1,column:24486}},type:"cond-expr",locations:[{start:{line:1,column:24477},end:{line:1,column:24484}},{start:{line:1,column:24485},end:{line:1,column:24486}}],line:1},"258":{loc:{start:{line:1,column:24539},end:{line:1,column:24559}},type:"binary-expr",locations:[{start:{line:1,column:24539},end:{line:1,column:24556}},{start:{line:1,column:24558},end:{line:1,column:24559}}],line:1},"259":{loc:{start:{line:1,column:24733},end:{line:1,column:24737}},type:"default-arg",locations:[{start:{line:1,column:24735},end:{line:1,column:24737}}],line:1},"260":{loc:{start:{line:1,column:24745},end:{line:1,column:24755}},type:"cond-expr",locations:[{start:{line:1,column:24750},end:{line:1,column:24751}},{start:{line:1,column:24752},end:{line:1,column:24755}}],line:1},"261":{loc:{start:{line:1,column:24758},end:{line:1,column:24793}},type:"binary-expr",locations:[{start:{line:1,column:24758},end:{line:1,column:24773}},{start:{line:1,column:24775},end:{line:1,column:24793}}],line:1},"262":{loc:{start:{line:1,column:24861},end:{line:1,column:24889}},type:"binary-expr",locations:[{start:{line:1,column:24861},end:{line:1,column:24871}},{start:{line:1,column:24873},end:{line:1,column:24889}}],line:1},"263":{loc:{start:{line:1,column:24890},end:{line:1,column:25016}},type:"binary-expr",locations:[{start:{line:1,column:24890},end:{line:1,column:24891}},{start:{line:1,column:24894},end:{line:1,column:25015}}],line:1},"264":{loc:{start:{line:1,column:24894},end:{line:1,column:24938}},type:"binary-expr",locations:[{start:{line:1,column:24894},end:{line:1,column:24907}},{start:{line:1,column:24910},end:{line:1,column:24937}}],line:1},"265":{loc:{start:{line:1,column:24939},end:{line:1,column:24984}},type:"binary-expr",locations:[{start:{line:1,column:24939},end:{line:1,column:24955}},{start:{line:1,column:24958},end:{line:1,column:24983}}],line:1},"266":{loc:{start:{line:1,column:25647},end:{line:1,column:25683}},type:"if",locations:[{start:{line:1,column:25647},end:{line:1,column:25683}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"267":{loc:{start:{line:1,column:25650},end:{line:1,column:25669}},type:"binary-expr",locations:[{start:{line:1,column:25650},end:{line:1,column:25652}},{start:{line:1,column:25654},end:{line:1,column:25669}}],line:1},"268":{loc:{start:{line:1,column:25683},end:{line:1,column:25743}},type:"switch",locations:[{start:{line:1,column:25704},end:{line:1,column:25722}},{start:{line:1,column:25722},end:{line:1,column:25742}}],line:1},"269":{loc:{start:{line:1,column:25764},end:{line:1,column:25769}},type:"binary-expr",locations:[{start:{line:1,column:25764},end:{line:1,column:25766}},{start:{line:1,column:25768},end:{line:1,column:25769}}],line:1},"270":{loc:{start:{line:1,column:25805},end:{line:1,column:25823}},type:"cond-expr",locations:[{start:{line:1,column:25807},end:{line:1,column:25821}},{start:{line:1,column:25822},end:{line:1,column:25823}}],line:1},"271":{loc:{start:{line:1,column:25826},end:{line:1,column:25865}},type:"cond-expr",locations:[{start:{line:1,column:25831},end:{line:1,column:25859}},{start:{line:1,column:25860},end:{line:1,column:25865}}],line:1},"272":{loc:{start:{line:1,column:25831},end:{line:1,column:25859}},type:"cond-expr",locations:[{start:{line:1,column:25833},end:{line:1,column:25851}},{start:{line:1,column:25852},end:{line:1,column:25859}}],line:1},"273":{loc:{start:{line:1,column:26150},end:{line:1,column:26155}},type:"binary-expr",locations:[{start:{line:1,column:26150},end:{line:1,column:26151}},{start:{line:1,column:26153},end:{line:1,column:26155}}],line:1},"274":{loc:{start:{line:1,column:26158},end:{line:1,column:26167}},type:"binary-expr",locations:[{start:{line:1,column:26158},end:{line:1,column:26159}},{start:{line:1,column:26161},end:{line:1,column:26167}}],line:1},"275":{loc:{start:{line:1,column:26191},end:{line:1,column:26229}},type:"binary-expr",locations:[{start:{line:1,column:26191},end:{line:1,column:26209}},{start:{line:1,column:26212},end:{line:1,column:26228}}],line:1},"276":{loc:{start:{line:1,column:26255},end:{line:1,column:26341}},type:"binary-expr",locations:[{start:{line:1,column:26255},end:{line:1,column:26256}},{start:{line:1,column:26258},end:{line:1,column:26275}},{start:{line:1,column:26278},end:{line:1,column:26340}}],line:1},"277":{loc:{start:{line:1,column:26564},end:{line:1,column:26720}},type:"if",locations:[{start:{line:1,column:26564},end:{line:1,column:26720}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"278":{loc:{start:{line:1,column:26574},end:{line:1,column:26687}},type:"binary-expr",locations:[{start:{line:1,column:26574},end:{line:1,column:26584}},{start:{line:1,column:26587},end:{line:1,column:26686}}],line:1},"279":{loc:{start:{line:1,column:26587},end:{line:1,column:26634}},type:"binary-expr",locations:[{start:{line:1,column:26587},end:{line:1,column:26597}},{start:{line:1,column:26599},end:{line:1,column:26619}},{start:{line:1,column:26622},end:{line:1,column:26633}}],line:1},"280":{loc:{start:{line:1,column:26635},end:{line:1,column:26675}},type:"binary-expr",locations:[{start:{line:1,column:26635},end:{line:1,column:26645}},{start:{line:1,column:26647},end:{line:1,column:26651}},{start:{line:1,column:26654},end:{line:1,column:26674}}],line:1},"281":{loc:{start:{line:1,column:26695},end:{line:1,column:26718}},type:"binary-expr",locations:[{start:{line:1,column:26695},end:{line:1,column:26696}},{start:{line:1,column:26698},end:{line:1,column:26700}},{start:{line:1,column:26703},end:{line:1,column:26717}}],line:1},"282":{loc:{start:{line:1,column:26784},end:{line:1,column:26798}},type:"cond-expr",locations:[{start:{line:1,column:26793},end:{line:1,column:26794}},{start:{line:1,column:26795},end:{line:1,column:26798}}],line:1},"283":{loc:{start:{line:1,column:26784},end:{line:1,column:26792}},type:"binary-expr",locations:[{start:{line:1,column:26784},end:{line:1,column:26785}},{start:{line:1,column:26787},end:{line:1,column:26792}}],line:1},"284":{loc:{start:{line:1,column:26912},end:{line:1,column:26918}},type:"default-arg",locations:[{start:{line:1,column:26914},end:{line:1,column:26918}}],line:1},"285":{loc:{start:{line:1,column:26923},end:{line:1,column:26933}},type:"default-arg",locations:[{start:{line:1,column:26925},end:{line:1,column:26933}}],line:1},"286":{loc:{start:{line:1,column:26941},end:{line:1,column:26945}},type:"binary-expr",locations:[{start:{line:1,column:26941},end:{line:1,column:26942}},{start:{line:1,column:26944},end:{line:1,column:26945}}],line:1},"287":{loc:{start:{line:1,column:26946},end:{line:1,column:26981}},type:"binary-expr",locations:[{start:{line:1,column:26946},end:{line:1,column:26958}},{start:{line:1,column:26961},end:{line:1,column:26980}}],line:1},"288":{loc:{start:{line:1,column:27466},end:{line:1,column:27494}},type:"binary-expr",locations:[{start:{line:1,column:27466},end:{line:1,column:27476}},{start:{line:1,column:27479},end:{line:1,column:27493}}],line:1},"289":{loc:{start:{line:1,column:27861},end:{line:1,column:27977}},type:"cond-expr",locations:[{start:{line:1,column:27884},end:{line:1,column:27939}},{start:{line:1,column:27940},end:{line:1,column:27977}}],line:1},"290":{loc:{start:{line:1,column:27884},end:{line:1,column:27939}},type:"cond-expr",locations:[{start:{line:1,column:27901},end:{line:1,column:27932}},{start:{line:1,column:27933},end:{line:1,column:27939}}],line:1},"291":{loc:{start:{line:1,column:28158},end:{line:1,column:28188}},type:"default-arg",locations:[{start:{line:1,column:28160},end:{line:1,column:28188}}],line:1},"292":{loc:{start:{line:1,column:28206},end:{line:1,column:28220}},type:"default-arg",locations:[{start:{line:1,column:28208},end:{line:1,column:28220}}],line:1},"293":{loc:{start:{line:1,column:28232},end:{line:1,column:28245}},type:"default-arg",locations:[{start:{line:1,column:28234},end:{line:1,column:28245}}],line:1},"294":{loc:{start:{line:1,column:28255},end:{line:1,column:28266}},type:"default-arg",locations:[{start:{line:1,column:28257},end:{line:1,column:28266}}],line:1},"295":{loc:{start:{line:1,column:28325},end:{line:1,column:28338}},type:"cond-expr",locations:[{start:{line:1,column:28331},end:{line:1,column:28332}},{start:{line:1,column:28333},end:{line:1,column:28338}}],line:1},"296":{loc:{start:{line:1,column:28351},end:{line:1,column:28364}},type:"cond-expr",locations:[{start:{line:1,column:28357},end:{line:1,column:28358}},{start:{line:1,column:28359},end:{line:1,column:28364}}],line:1},"297":{loc:{start:{line:1,column:28380},end:{line:1,column:28391}},type:"cond-expr",locations:[{start:{line:1,column:28382},end:{line:1,column:28389}},{start:{line:1,column:28390},end:{line:1,column:28391}}],line:1},"298":{loc:{start:{line:1,column:28402},end:{line:1,column:28481}},type:"binary-expr",locations:[{start:{line:1,column:28402},end:{line:1,column:28406}},{start:{line:1,column:28408},end:{line:1,column:28422}},{start:{line:1,column:28425},end:{line:1,column:28456}},{start:{line:1,column:28458},end:{line:1,column:28480}}],line:1},"299":{loc:{start:{line:1,column:28501},end:{line:1,column:28577}},type:"if",locations:[{start:{line:1,column:28501},end:{line:1,column:28577}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"300":{loc:{start:{line:1,column:28504},end:{line:1,column:28564}},type:"binary-expr",locations:[{start:{line:1,column:28504},end:{line:1,column:28545}},{start:{line:1,column:28547},end:{line:1,column:28564}}],line:1},"301":{loc:{start:{line:1,column:28690},end:{line:1,column:28731}},type:"binary-expr",locations:[{start:{line:1,column:28690},end:{line:1,column:28695}},{start:{line:1,column:28697},end:{line:1,column:28714}},{start:{line:1,column:28717},end:{line:1,column:28730}}],line:1},"302":{loc:{start:{line:1,column:28732},end:{line:1,column:28775}},type:"binary-expr",locations:[{start:{line:1,column:28732},end:{line:1,column:28736}},{start:{line:1,column:28738},end:{line:1,column:28746}},{start:{line:1,column:28749},end:{line:1,column:28774}}],line:1},"303":{loc:{start:{line:1,column:28776},end:{line:1,column:28806}},type:"binary-expr",locations:[{start:{line:1,column:28776},end:{line:1,column:28783}},{start:{line:1,column:28786},end:{line:1,column:28805}}],line:1},"304":{loc:{start:{line:1,column:28795},end:{line:1,column:28802}},type:"binary-expr",locations:[{start:{line:1,column:28795},end:{line:1,column:28796}},{start:{line:1,column:28798},end:{line:1,column:28802}}],line:1},"305":{loc:{start:{line:1,column:28878},end:{line:1,column:28962}},type:"if",locations:[{start:{line:1,column:28878},end:{line:1,column:28962}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"306":{loc:{start:{line:1,column:28981},end:{line:1,column:28985}},type:"binary-expr",locations:[{start:{line:1,column:28981},end:{line:1,column:28982}},{start:{line:1,column:28984},end:{line:1,column:28985}}],line:1},"307":{loc:{start:{line:1,column:29006},end:{line:1,column:29038}},type:"binary-expr",locations:[{start:{line:1,column:29006},end:{line:1,column:29013}},{start:{line:1,column:29016},end:{line:1,column:29037}}],line:1},"308":{loc:{start:{line:1,column:29116},end:{line:1,column:29171}},type:"if",locations:[{start:{line:1,column:29116},end:{line:1,column:29171}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"309":{loc:{start:{line:1,column:29119},end:{line:1,column:29143}},type:"binary-expr",locations:[{start:{line:1,column:29119},end:{line:1,column:29137}},{start:{line:1,column:29139},end:{line:1,column:29143}}],line:1},"310":{loc:{start:{line:1,column:29171},end:{line:1,column:29286}},type:"if",locations:[{start:{line:1,column:29171},end:{line:1,column:29286}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"311":{loc:{start:{line:1,column:29273},end:{line:1,column:29280}},type:"binary-expr",locations:[{start:{line:1,column:29273},end:{line:1,column:29274}},{start:{line:1,column:29276},end:{line:1,column:29280}}],line:1},"312":{loc:{start:{line:1,column:29321},end:{line:1,column:29335}},type:"cond-expr",locations:[{start:{line:1,column:29327},end:{line:1,column:29333}},{start:{line:1,column:29334},end:{line:1,column:29335}}],line:1},"313":{loc:{start:{line:1,column:29350},end:{line:1,column:29392}},type:"cond-expr",locations:[{start:{line:1,column:29357},end:{line:1,column:29358}},{start:{line:1,column:29359},end:{line:1,column:29392}}],line:1},"314":{loc:{start:{line:1,column:29359},end:{line:1,column:29392}},type:"cond-expr",locations:[{start:{line:1,column:29378},end:{line:1,column:29385}},{start:{line:1,column:29386},end:{line:1,column:29392}}],line:1},"315":{loc:{start:{line:1,column:29446},end:{line:1,column:29573}},type:"if",locations:[{start:{line:1,column:29446},end:{line:1,column:29573}},{start:{line:1,column:29531},end:{line:1,column:29573}}],line:1},"316":{loc:{start:{line:1,column:29487},end:{line:1,column:29525}},type:"if",locations:[{start:{line:1,column:29487},end:{line:1,column:29525}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"317":{loc:{start:{line:1,column:29490},end:{line:1,column:29516}},type:"binary-expr",locations:[{start:{line:1,column:29490},end:{line:1,column:29502}},{start:{line:1,column:29504},end:{line:1,column:29509}},{start:{line:1,column:29511},end:{line:1,column:29516}}],line:1},"318":{loc:{start:{line:1,column:29531},end:{line:1,column:29573}},type:"if",locations:[{start:{line:1,column:29531},end:{line:1,column:29573}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"319":{loc:{start:{line:1,column:29534},end:{line:1,column:29561}},type:"binary-expr",locations:[{start:{line:1,column:29534},end:{line:1,column:29540}},{start:{line:1,column:29542},end:{line:1,column:29554}},{start:{line:1,column:29556},end:{line:1,column:29561}}],line:1},"320":{loc:{start:{line:1,column:29694},end:{line:1,column:29698}},type:"binary-expr",locations:[{start:{line:1,column:29694},end:{line:1,column:29695}},{start:{line:1,column:29697},end:{line:1,column:29698}}],line:1},"321":{loc:{start:{line:1,column:29709},end:{line:1,column:29810}},type:"cond-expr",locations:[{start:{line:1,column:29767},end:{line:1,column:29769}},{start:{line:1,column:29770},end:{line:1,column:29810}}],line:1},"322":{loc:{start:{line:1,column:29709},end:{line:1,column:29766}},type:"binary-expr",locations:[{start:{line:1,column:29709},end:{line:1,column:29717}},{start:{line:1,column:29719},end:{line:1,column:29731}},{start:{line:1,column:29733},end:{line:1,column:29738}},{start:{line:1,column:29741},end:{line:1,column:29765}}],line:1},"323":{loc:{start:{line:1,column:29907},end:{line:1,column:29924}},type:"binary-expr",locations:[{start:{line:1,column:29907},end:{line:1,column:29913}},{start:{line:1,column:29916},end:{line:1,column:29923}}],line:1},"324":{loc:{start:{line:1,column:29943},end:{line:1,column:29961}},type:"cond-expr",locations:[{start:{line:1,column:29954},end:{line:1,column:29955}},{start:{line:1,column:29956},end:{line:1,column:29961}}],line:1},"325":{loc:{start:{line:1,column:29943},end:{line:1,column:29953}},type:"binary-expr",locations:[{start:{line:1,column:29943},end:{line:1,column:29947}},{start:{line:1,column:29949},end:{line:1,column:29953}}],line:1},"326":{loc:{start:{line:1,column:29956},end:{line:1,column:29961}},type:"binary-expr",locations:[{start:{line:1,column:29956},end:{line:1,column:29957}},{start:{line:1,column:29959},end:{line:1,column:29961}}],line:1},"327":{loc:{start:{line:1,column:30004},end:{line:1,column:30064}},type:"if",locations:[{start:{line:1,column:30004},end:{line:1,column:30064}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"328":{loc:{start:{line:1,column:30043},end:{line:1,column:30064}},type:"cond-expr",locations:[{start:{line:1,column:30051},end:{line:1,column:30062}},{start:{line:1,column:30063},end:{line:1,column:30064}}],line:1},"329":{loc:{start:{line:1,column:30098},end:{line:1,column:30113}},type:"if",locations:[{start:{line:1,column:30098},end:{line:1,column:30113}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"330":{loc:{start:{line:1,column:30124},end:{line:1,column:30148}},type:"if",locations:[{start:{line:1,column:30124},end:{line:1,column:30148}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"331":{loc:{start:{line:1,column:30186},end:{line:1,column:30214}},type:"binary-expr",locations:[{start:{line:1,column:30186},end:{line:1,column:30187}},{start:{line:1,column:30190},end:{line:1,column:30213}}],line:1},"332":{loc:{start:{line:1,column:30391},end:{line:1,column:30396}},type:"default-arg",locations:[{start:{line:1,column:30393},end:{line:1,column:30396}}],line:1},"333":{loc:{start:{line:1,column:30512},end:{line:1,column:30533}},type:"binary-expr",locations:[{start:{line:1,column:30512},end:{line:1,column:30526}},{start:{line:1,column:30528},end:{line:1,column:30533}}],line:1},"334":{loc:{start:{line:1,column:30544},end:{line:1,column:30572}},type:"binary-expr",locations:[{start:{line:1,column:30544},end:{line:1,column:30554}},{start:{line:1,column:30556},end:{line:1,column:30566}},{start:{line:1,column:30568},end:{line:1,column:30572}}],line:1},"335":{loc:{start:{line:1,column:30579},end:{line:1,column:30594}},type:"cond-expr",locations:[{start:{line:1,column:30587},end:{line:1,column:30590}},{start:{line:1,column:30591},end:{line:1,column:30594}}],line:1},"336":{loc:{start:{line:1,column:30622},end:{line:1,column:30632}},type:"cond-expr",locations:[{start:{line:1,column:30629},end:{line:1,column:30630}},{start:{line:1,column:30631},end:{line:1,column:30632}}],line:1},"337":{loc:{start:{line:1,column:30639},end:{line:1,column:30649}},type:"cond-expr",locations:[{start:{line:1,column:30646},end:{line:1,column:30647}},{start:{line:1,column:30648},end:{line:1,column:30649}}],line:1},"338":{loc:{start:{line:1,column:30692},end:{line:1,column:30704}},type:"cond-expr",locations:[{start:{line:1,column:30701},end:{line:1,column:30702}},{start:{line:1,column:30703},end:{line:1,column:30704}}],line:1},"339":{loc:{start:{line:1,column:30707},end:{line:1,column:30719}},type:"cond-expr",locations:[{start:{line:1,column:30716},end:{line:1,column:30717}},{start:{line:1,column:30718},end:{line:1,column:30719}}],line:1},"340":{loc:{start:{line:1,column:30910},end:{line:1,column:31095}},type:"if",locations:[{start:{line:1,column:30910},end:{line:1,column:31095}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"341":{loc:{start:{line:1,column:30931},end:{line:1,column:30937}},type:"binary-expr",locations:[{start:{line:1,column:30931},end:{line:1,column:30933}},{start:{line:1,column:30935},end:{line:1,column:30937}}],line:1},"342":{loc:{start:{line:1,column:30940},end:{line:1,column:30981}},type:"if",locations:[{start:{line:1,column:30940},end:{line:1,column:30981}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"343":{loc:{start:{line:1,column:31037},end:{line:1,column:31094}},type:"binary-expr",locations:[{start:{line:1,column:31037},end:{line:1,column:31044}},{start:{line:1,column:31047},end:{line:1,column:31093}}],line:1},"344":{loc:{start:{line:1,column:31112},end:{line:1,column:31117}},type:"default-arg",locations:[{start:{line:1,column:31114},end:{line:1,column:31117}}],line:1},"345":{loc:{start:{line:1,column:31179},end:{line:1,column:31214}},type:"if",locations:[{start:{line:1,column:31179},end:{line:1,column:31214}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"346":{loc:{start:{line:1,column:31232},end:{line:1,column:31288}},type:"binary-expr",locations:[{start:{line:1,column:31232},end:{line:1,column:31233}},{start:{line:1,column:31236},end:{line:1,column:31287}}],line:1},"347":{loc:{start:{line:1,column:31289},end:{line:1,column:31345}},type:"binary-expr",locations:[{start:{line:1,column:31289},end:{line:1,column:31290}},{start:{line:1,column:31293},end:{line:1,column:31344}}],line:1},"348":{loc:{start:{line:1,column:31361},end:{line:1,column:31366}},type:"default-arg",locations:[{start:{line:1,column:31363},end:{line:1,column:31366}}],line:1},"349":{loc:{start:{line:1,column:31453},end:{line:1,column:31591}},type:"if",locations:[{start:{line:1,column:31453},end:{line:1,column:31591}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"350":{loc:{start:{line:1,column:31481},end:{line:1,column:31530}},type:"if",locations:[{start:{line:1,column:31481},end:{line:1,column:31530}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"351":{loc:{start:{line:1,column:31508},end:{line:1,column:31529}},type:"cond-expr",locations:[{start:{line:1,column:31514},end:{line:1,column:31527}},{start:{line:1,column:31528},end:{line:1,column:31529}}],line:1},"352":{loc:{start:{line:1,column:31535},end:{line:1,column:31590}},type:"cond-expr",locations:[{start:{line:1,column:31537},end:{line:1,column:31585}},{start:{line:1,column:31586},end:{line:1,column:31590}}],line:1},"353":{loc:{start:{line:1,column:31537},end:{line:1,column:31585}},type:"cond-expr",locations:[{start:{line:1,column:31539},end:{line:1,column:31578}},{start:{line:1,column:31579},end:{line:1,column:31585}}],line:1},"354":{loc:{start:{line:1,column:31539},end:{line:1,column:31578}},type:"cond-expr",locations:[{start:{line:1,column:31561},end:{line:1,column:31562}},{start:{line:1,column:31563},end:{line:1,column:31578}}],line:1},"355":{loc:{start:{line:1,column:31744},end:{line:1,column:31763}},type:"binary-expr",locations:[{start:{line:1,column:31744},end:{line:1,column:31749}},{start:{line:1,column:31751},end:{line:1,column:31763}}],line:1},"356":{loc:{start:{line:1,column:31764},end:{line:1,column:31917}},type:"binary-expr",locations:[{start:{line:1,column:31764},end:{line:1,column:31765}},{start:{line:1,column:31768},end:{line:1,column:31916}}],line:1},"357":{loc:{start:{line:1,column:31775},end:{line:1,column:31845}},type:"binary-expr",locations:[{start:{line:1,column:31775},end:{line:1,column:31776}},{start:{line:1,column:31779},end:{line:1,column:31844}}],line:1},"358":{loc:{start:{line:1,column:31846},end:{line:1,column:31916}},type:"binary-expr",locations:[{start:{line:1,column:31846},end:{line:1,column:31847}},{start:{line:1,column:31850},end:{line:1,column:31915}}],line:1},"359":{loc:{start:{line:1,column:31953},end:{line:1,column:32230}},type:"if",locations:[{start:{line:1,column:31953},end:{line:1,column:32230}},{start:{line:1,column:32043},end:{line:1,column:32230}}],line:1},"360":{loc:{start:{line:1,column:31956},end:{line:1,column:31992}},type:"binary-expr",locations:[{start:{line:1,column:31956},end:{line:1,column:31966}},{start:{line:1,column:31969},end:{line:1,column:31991}}],line:1},"361":{loc:{start:{line:1,column:32050},end:{line:1,column:32070}},type:"cond-expr",locations:[{start:{line:1,column:32052},end:{line:1,column:32065}},{start:{line:1,column:32066},end:{line:1,column:32070}}],line:1},"362":{loc:{start:{line:1,column:32132},end:{line:1,column:32137}},type:"cond-expr",locations:[{start:{line:1,column:32134},end:{line:1,column:32135}},{start:{line:1,column:32136},end:{line:1,column:32137}}],line:1},"363":{loc:{start:{line:1,column:32230},end:{line:1,column:32256}},type:"binary-expr",locations:[{start:{line:1,column:32230},end:{line:1,column:32247}},{start:{line:1,column:32249},end:{line:1,column:32256}}],line:1},"364":{loc:{start:{line:1,column:32278},end:{line:1,column:32316}},type:"binary-expr",locations:[{start:{line:1,column:32278},end:{line:1,column:32295}},{start:{line:1,column:32297},end:{line:1,column:32316}}],line:1},"365":{loc:{start:{line:1,column:32358},end:{line:1,column:32409}},type:"binary-expr",locations:[{start:{line:1,column:32358},end:{line:1,column:32359}},{start:{line:1,column:32361},end:{line:1,column:32397}},{start:{line:1,column:32400},end:{line:1,column:32408}}],line:1},"366":{loc:{start:{line:1,column:32444},end:{line:1,column:32532}},type:"cond-expr",locations:[{start:{line:1,column:32464},end:{line:1,column:32527}},{start:{line:1,column:32529},end:{line:1,column:32532}}],line:1},"367":{loc:{start:{line:1,column:32481},end:{line:1,column:32527}},type:"binary-expr",locations:[{start:{line:1,column:32481},end:{line:1,column:32500}},{start:{line:1,column:32503},end:{line:1,column:32526}}],line:1},"368":{loc:{start:{line:1,column:32717},end:{line:1,column:32727}},type:"cond-expr",locations:[{start:{line:1,column:32719},end:{line:1,column:32724}},{start:{line:1,column:32725},end:{line:1,column:32727}}],line:1},"369":{loc:{start:{line:1,column:32766},end:{line:1,column:32793}},type:"binary-expr",locations:[{start:{line:1,column:32766},end:{line:1,column:32790}},{start:{line:1,column:32792},end:{line:1,column:32793}}],line:1},"370":{loc:{start:{line:1,column:32866},end:{line:1,column:32897}},type:"binary-expr",locations:[{start:{line:1,column:32867},end:{line:1,column:32870}},{start:{line:1,column:32872},end:{line:1,column:32875}},{start:{line:1,column:32879},end:{line:1,column:32881}},{start:{line:1,column:32883},end:{line:1,column:32896}}],line:1},"371":{loc:{start:{line:1,column:32933},end:{line:1,column:32951}},type:"cond-expr",locations:[{start:{line:1,column:32945},end:{line:1,column:32949}},{start:{line:1,column:32950},end:{line:1,column:32951}}],line:1},"372":{loc:{start:{line:1,column:32933},end:{line:1,column:32944}},type:"binary-expr",locations:[{start:{line:1,column:32933},end:{line:1,column:32934}},{start:{line:1,column:32936},end:{line:1,column:32944}}],line:1},"373":{loc:{start:{line:1,column:32985},end:{line:1,column:33092}},type:"if",locations:[{start:{line:1,column:32985},end:{line:1,column:33092}},{start:{line:1,column:33017},end:{line:1,column:33092}}],line:1},"374":{loc:{start:{line:1,column:33131},end:{line:1,column:33156}},type:"if",locations:[{start:{line:1,column:33131},end:{line:1,column:33156}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"375":{loc:{start:{line:1,column:33312},end:{line:1,column:33321}},type:"binary-expr",locations:[{start:{line:1,column:33312},end:{line:1,column:33313}},{start:{line:1,column:33315},end:{line:1,column:33321}}],line:1},"376":{loc:{start:{line:1,column:33332},end:{line:1,column:33340}},type:"binary-expr",locations:[{start:{line:1,column:33332},end:{line:1,column:33333}},{start:{line:1,column:33335},end:{line:1,column:33340}}],line:1},"377":{loc:{start:{line:1,column:33370},end:{line:1,column:33414}},type:"binary-expr",locations:[{start:{line:1,column:33370},end:{line:1,column:33371}},{start:{line:1,column:33374},end:{line:1,column:33413}}],line:1},"378":{loc:{start:{line:1,column:33509},end:{line:1,column:33802}},type:"if",locations:[{start:{line:1,column:33509},end:{line:1,column:33802}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"379":{loc:{start:{line:1,column:33512},end:{line:1,column:33534}},type:"binary-expr",locations:[{start:{line:1,column:33512},end:{line:1,column:33522}},{start:{line:1,column:33524},end:{line:1,column:33534}}],line:1},"380":{loc:{start:{line:1,column:33542},end:{line:1,column:33550}},type:"binary-expr",locations:[{start:{line:1,column:33542},end:{line:1,column:33543}},{start:{line:1,column:33545},end:{line:1,column:33550}}],line:1},"381":{loc:{start:{line:1,column:33551},end:{line:1,column:33801}},type:"if",locations:[{start:{line:1,column:33551},end:{line:1,column:33801}},{start:{line:1,column:33594},end:{line:1,column:33801}}],line:1},"382":{loc:{start:{line:1,column:33835},end:{line:1,column:33840}},type:"binary-expr",locations:[{start:{line:1,column:33835},end:{line:1,column:33836}},{start:{line:1,column:33838},end:{line:1,column:33840}}],line:1},"383":{loc:{start:{line:1,column:33851},end:{line:1,column:33856}},type:"binary-expr",locations:[{start:{line:1,column:33851},end:{line:1,column:33852}},{start:{line:1,column:33854},end:{line:1,column:33856}}],line:1},"384":{loc:{start:{line:1,column:33940},end:{line:1,column:33974}},type:"binary-expr",locations:[{start:{line:1,column:33940},end:{line:1,column:33970}},{start:{line:1,column:33972},end:{line:1,column:33974}}],line:1},"385":{loc:{start:{line:1,column:33977},end:{line:1,column:34013}},type:"binary-expr",locations:[{start:{line:1,column:33977},end:{line:1,column:34009}},{start:{line:1,column:34011},end:{line:1,column:34013}}],line:1},"386":{loc:{start:{line:1,column:34047},end:{line:1,column:34166}},type:"if",locations:[{start:{line:1,column:34047},end:{line:1,column:34166}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"387":{loc:{start:{line:1,column:34210},end:{line:1,column:34226}},type:"cond-expr",locations:[{start:{line:1,column:34212},end:{line:1,column:34215}},{start:{line:1,column:34216},end:{line:1,column:34226}}],line:1},"388":{loc:{start:{line:1,column:34291},end:{line:1,column:34309}},type:"binary-expr",locations:[{start:{line:1,column:34291},end:{line:1,column:34292}},{start:{line:1,column:34294},end:{line:1,column:34296}},{start:{line:1,column:34299},end:{line:1,column:34308}}],line:1},"389":{loc:{start:{line:1,column:34310},end:{line:1,column:34395}},type:"binary-expr",locations:[{start:{line:1,column:34311},end:{line:1,column:34321}},{start:{line:1,column:34323},end:{line:1,column:34333}},{start:{line:1,column:34336},end:{line:1,column:34337}},{start:{line:1,column:34339},end:{line:1,column:34347}},{start:{line:1,column:34349},end:{line:1,column:34359}},{start:{line:1,column:34362},end:{line:1,column:34394}}],line:1},"390":{loc:{start:{line:1,column:34440},end:{line:1,column:34444}},type:"binary-expr",locations:[{start:{line:1,column:34440},end:{line:1,column:34441}},{start:{line:1,column:34443},end:{line:1,column:34444}}],line:1},"391":{loc:{start:{line:1,column:34542},end:{line:1,column:34650}},type:"binary-expr",locations:[{start:{line:1,column:34542},end:{line:1,column:34549}},{start:{line:1,column:34552},end:{line:1,column:34553}},{start:{line:1,column:34555},end:{line:1,column:34570}},{start:{line:1,column:34572},end:{line:1,column:34586}},{start:{line:1,column:34590},end:{line:1,column:34649}}],line:1},"392":{loc:{start:{line:1,column:34651},end:{line:1,column:34796}},type:"cond-expr",locations:[{start:{line:1,column:34709},end:{line:1,column:34792}},{start:{line:1,column:34794},end:{line:1,column:34796}}],line:1},"393":{loc:{start:{line:1,column:34651},end:{line:1,column:34707}},type:"binary-expr",locations:[{start:{line:1,column:34651},end:{line:1,column:34680}},{start:{line:1,column:34682},end:{line:1,column:34694}},{start:{line:1,column:34696},end:{line:1,column:34707}}],line:1},"394":{loc:{start:{line:1,column:34867},end:{line:1,column:34955}},type:"binary-expr",locations:[{start:{line:1,column:34867},end:{line:1,column:34871}},{start:{line:1,column:34874},end:{line:1,column:34954}}],line:1},"395":{loc:{start:{line:1,column:35009},end:{line:1,column:35040}},type:"binary-expr",locations:[{start:{line:1,column:35009},end:{line:1,column:35010}},{start:{line:1,column:35012},end:{line:1,column:35040}}],line:1},"396":{loc:{start:{line:1,column:35048},end:{line:1,column:35062}},type:"cond-expr",locations:[{start:{line:1,column:35050},end:{line:1,column:35055}},{start:{line:1,column:35056},end:{line:1,column:35062}}],line:1},"397":{loc:{start:{line:1,column:35176},end:{line:1,column:35237}},type:"cond-expr",locations:[{start:{line:1,column:35189},end:{line:1,column:35201}},{start:{line:1,column:35202},end:{line:1,column:35237}}],line:1},"398":{loc:{start:{line:1,column:35189},end:{line:1,column:35201}},type:"cond-expr",locations:[{start:{line:1,column:35194},end:{line:1,column:35197}},{start:{line:1,column:35198},end:{line:1,column:35201}}],line:1},"399":{loc:{start:{line:1,column:35202},end:{line:1,column:35237}},type:"cond-expr",locations:[{start:{line:1,column:35214},end:{line:1,column:35225}},{start:{line:1,column:35226},end:{line:1,column:35237}}],line:1},"400":{loc:{start:{line:1,column:35214},end:{line:1,column:35225}},type:"cond-expr",locations:[{start:{line:1,column:35218},end:{line:1,column:35221}},{start:{line:1,column:35222},end:{line:1,column:35225}}],line:1},"401":{loc:{start:{line:1,column:35226},end:{line:1,column:35237}},type:"cond-expr",locations:[{start:{line:1,column:35230},end:{line:1,column:35233}},{start:{line:1,column:35234},end:{line:1,column:35237}}],line:1},"402":{loc:{start:{line:1,column:35471},end:{line:1,column:35512}},type:"cond-expr",locations:[{start:{line:1,column:35484},end:{line:1,column:35485}},{start:{line:1,column:35486},end:{line:1,column:35512}}],line:1},"403":{loc:{start:{line:1,column:35486},end:{line:1,column:35512}},type:"cond-expr",locations:[{start:{line:1,column:35498},end:{line:1,column:35504}},{start:{line:1,column:35505},end:{line:1,column:35512}}],line:1},"404":{loc:{start:{line:1,column:35717},end:{line:1,column:35731}},type:"cond-expr",locations:[{start:{line:1,column:35719},end:{line:1,column:35726}},{start:{line:1,column:35727},end:{line:1,column:35731}}],line:1},"405":{loc:{start:{line:1,column:35757},end:{line:1,column:35933}},type:"binary-expr",locations:[{start:{line:1,column:35758},end:{line:1,column:35767}},{start:{line:1,column:35769},end:{line:1,column:35778}},{start:{line:1,column:35782},end:{line:1,column:35932}}],line:1},"406":{loc:{start:{line:1,column:35951},end:{line:1,column:36041}},type:"binary-expr",locations:[{start:{line:1,column:35951},end:{line:1,column:35961}},{start:{line:1,column:35964},end:{line:1,column:36040}}],line:1},"407":{loc:{start:{line:1,column:36064},end:{line:1,column:36158}},type:"cond-expr",locations:[{start:{line:1,column:36076},end:{line:1,column:36111}},{start:{line:1,column:36112},end:{line:1,column:36158}}],line:1},"408":{loc:{start:{line:1,column:36241},end:{line:1,column:36257}},type:"binary-expr",locations:[{start:{line:1,column:36241},end:{line:1,column:36242}},{start:{line:1,column:36244},end:{line:1,column:36257}}],line:1},"409":{loc:{start:{line:1,column:36388},end:{line:1,column:36463}},type:"if",locations:[{start:{line:1,column:36388},end:{line:1,column:36463}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"410":{loc:{start:{line:1,column:36416},end:{line:1,column:36440}},type:"binary-expr",locations:[{start:{line:1,column:36416},end:{line:1,column:36419}},{start:{line:1,column:36421},end:{line:1,column:36440}}],line:1},"411":{loc:{start:{line:1,column:36470},end:{line:1,column:36481}},type:"binary-expr",locations:[{start:{line:1,column:36470},end:{line:1,column:36473}},{start:{line:1,column:36476},end:{line:1,column:36480}}],line:1},"412":{loc:{start:{line:1,column:36538},end:{line:1,column:36554}},type:"if",locations:[{start:{line:1,column:36538},end:{line:1,column:36554}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"413":{loc:{start:{line:1,column:36707},end:{line:1,column:36727}},type:"binary-expr",locations:[{start:{line:1,column:36707},end:{line:1,column:36715}},{start:{line:1,column:36717},end:{line:1,column:36727}}],line:1},"414":{loc:{start:{line:1,column:36734},end:{line:1,column:36754}},type:"binary-expr",locations:[{start:{line:1,column:36734},end:{line:1,column:36744}},{start:{line:1,column:36746},end:{line:1,column:36754}}],line:1},"415":{loc:{start:{line:1,column:36761},end:{line:1,column:36767}},type:"binary-expr",locations:[{start:{line:1,column:36761},end:{line:1,column:36762}},{start:{line:1,column:36764},end:{line:1,column:36767}}],line:1},"416":{loc:{start:{line:1,column:36774},end:{line:1,column:36781}},type:"binary-expr",locations:[{start:{line:1,column:36774},end:{line:1,column:36776}},{start:{line:1,column:36778},end:{line:1,column:36781}}],line:1},"417":{loc:{start:{line:1,column:36816},end:{line:1,column:36973}},type:"binary-expr",locations:[{start:{line:1,column:36816},end:{line:1,column:36823}},{start:{line:1,column:36826},end:{line:1,column:36972}}],line:1},"418":{loc:{start:{line:1,column:36836},end:{line:1,column:36972}},type:"binary-expr",locations:[{start:{line:1,column:36836},end:{line:1,column:36841}},{start:{line:1,column:36844},end:{line:1,column:36971}}],line:1},"419":{loc:{start:{line:1,column:36855},end:{line:1,column:36888}},type:"binary-expr",locations:[{start:{line:1,column:36855},end:{line:1,column:36863}},{start:{line:1,column:36865},end:{line:1,column:36868}},{start:{line:1,column:36871},end:{line:1,column:36887}}],line:1},"420":{loc:{start:{line:1,column:36873},end:{line:1,column:36887}},type:"cond-expr",locations:[{start:{line:1,column:36884},end:{line:1,column:36885}},{start:{line:1,column:36886},end:{line:1,column:36887}}],line:1},"421":{loc:{start:{line:1,column:36889},end:{line:1,column:36963}},type:"binary-expr",locations:[{start:{line:1,column:36889},end:{line:1,column:36897}},{start:{line:1,column:36899},end:{line:1,column:36902}},{start:{line:1,column:36905},end:{line:1,column:36962}}],line:1},"422":{loc:{start:{line:1,column:36981},end:{line:1,column:37041}},type:"binary-expr",locations:[{start:{line:1,column:36981},end:{line:1,column:36989}},{start:{line:1,column:36991},end:{line:1,column:37041}}],line:1},"423":{loc:{start:{line:1,column:37137},end:{line:1,column:37159}},type:"binary-expr",locations:[{start:{line:1,column:37137},end:{line:1,column:37145}},{start:{line:1,column:37147},end:{line:1,column:37159}}],line:1},"424":{loc:{start:{line:1,column:37204},end:{line:1,column:37239}},type:"if",locations:[{start:{line:1,column:37204},end:{line:1,column:37239}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"425":{loc:{start:{line:1,column:37207},end:{line:1,column:37212}},type:"binary-expr",locations:[{start:{line:1,column:37207},end:{line:1,column:37208}},{start:{line:1,column:37210},end:{line:1,column:37212}}],line:1},"426":{loc:{start:{line:1,column:37218},end:{line:1,column:37233}},type:"binary-expr",locations:[{start:{line:1,column:37218},end:{line:1,column:37221}},{start:{line:1,column:37223},end:{line:1,column:37233}}],line:1},"427":{loc:{start:{line:1,column:37244},end:{line:1,column:37258}},type:"binary-expr",locations:[{start:{line:1,column:37244},end:{line:1,column:37247}},{start:{line:1,column:37249},end:{line:1,column:37258}}],line:1},"428":{loc:{start:{line:1,column:37273},end:{line:1,column:37282}},type:"binary-expr",locations:[{start:{line:1,column:37273},end:{line:1,column:37274}},{start:{line:1,column:37277},end:{line:1,column:37281}}],line:1},"429":{loc:{start:{line:1,column:37283},end:{line:1,column:37299}},type:"binary-expr",locations:[{start:{line:1,column:37283},end:{line:1,column:37286}},{start:{line:1,column:37288},end:{line:1,column:37299}}],line:1},"430":{loc:{start:{line:1,column:37420},end:{line:1,column:37526}},type:"cond-expr",locations:[{start:{line:1,column:37435},end:{line:1,column:37506}},{start:{line:1,column:37508},end:{line:1,column:37525}}],line:1},"431":{loc:{start:{line:1,column:37420},end:{line:1,column:37434}},type:"binary-expr",locations:[{start:{line:1,column:37420},end:{line:1,column:37426}},{start:{line:1,column:37428},end:{line:1,column:37434}}],line:1},"432":{loc:{start:{line:1,column:37435},end:{line:1,column:37506}},type:"binary-expr",locations:[{start:{line:1,column:37435},end:{line:1,column:37441}},{start:{line:1,column:37444},end:{line:1,column:37505}}],line:1},"433":{loc:{start:{line:1,column:37492},end:{line:1,column:37505}},type:"cond-expr",locations:[{start:{line:1,column:37499},end:{line:1,column:37500}},{start:{line:1,column:37501},end:{line:1,column:37505}}],line:1},"434":{loc:{start:{line:1,column:37512},end:{line:1,column:37525}},type:"binary-expr",locations:[{start:{line:1,column:37512},end:{line:1,column:37518}},{start:{line:1,column:37521},end:{line:1,column:37524}}],line:1},"435":{loc:{start:{line:1,column:37538},end:{line:1,column:37582}},type:"binary-expr",locations:[{start:{line:1,column:37538},end:{line:1,column:37546}},{start:{line:1,column:37548},end:{line:1,column:37582}}],line:1},"436":{loc:{start:{line:1,column:37649},end:{line:1,column:37664}},type:"if",locations:[{start:{line:1,column:37649},end:{line:1,column:37664}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"437":{loc:{start:{line:1,column:37708},end:{line:1,column:37760}},type:"if",locations:[{start:{line:1,column:37708},end:{line:1,column:37760}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"438":{loc:{start:{line:1,column:37766},end:{line:1,column:37775}},type:"cond-expr",locations:[{start:{line:1,column:37770},end:{line:1,column:37773}},{start:{line:1,column:37774},end:{line:1,column:37775}}],line:1},"439":{loc:{start:{line:1,column:37778},end:{line:1,column:37807}},type:"binary-expr",locations:[{start:{line:1,column:37778},end:{line:1,column:37791}},{start:{line:1,column:37793},end:{line:1,column:37798}},{start:{line:1,column:37800},end:{line:1,column:37807}}],line:1},"440":{loc:{start:{line:1,column:37864},end:{line:1,column:37899}},type:"cond-expr",locations:[{start:{line:1,column:37886},end:{line:1,column:37887}},{start:{line:1,column:37888},end:{line:1,column:37899}}],line:1},"441":{loc:{start:{line:1,column:37864},end:{line:1,column:37885}},type:"binary-expr",locations:[{start:{line:1,column:37864},end:{line:1,column:37866}},{start:{line:1,column:37868},end:{line:1,column:37881}},{start:{line:1,column:37883},end:{line:1,column:37885}}],line:1},"442":{loc:{start:{line:1,column:38069},end:{line:1,column:38075}},type:"cond-expr",locations:[{start:{line:1,column:38071},end:{line:1,column:38073}},{start:{line:1,column:38074},end:{line:1,column:38075}}],line:1},"443":{loc:{start:{line:1,column:38076},end:{line:1,column:38202}},type:"if",locations:[{start:{line:1,column:38076},end:{line:1,column:38202}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"444":{loc:{start:{line:1,column:38136},end:{line:1,column:38201}},type:"binary-expr",locations:[{start:{line:1,column:38136},end:{line:1,column:38145}},{start:{line:1,column:38148},end:{line:1,column:38200}}],line:1},"445":{loc:{start:{line:1,column:38221},end:{line:1,column:38232}},type:"cond-expr",locations:[{start:{line:1,column:38223},end:{line:1,column:38224}},{start:{line:1,column:38225},end:{line:1,column:38232}}],line:1},"446":{loc:{start:{line:1,column:38389},end:{line:1,column:38415}},type:"binary-expr",locations:[{start:{line:1,column:38389},end:{line:1,column:38396}},{start:{line:1,column:38398},end:{line:1,column:38415}}],line:1},"447":{loc:{start:{line:1,column:38424},end:{line:1,column:38448}},type:"binary-expr",locations:[{start:{line:1,column:38424},end:{line:1,column:38429}},{start:{line:1,column:38431},end:{line:1,column:38448}}],line:1},"448":{loc:{start:{line:1,column:38710},end:{line:1,column:38725}},type:"if",locations:[{start:{line:1,column:38710},end:{line:1,column:38725}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"449":{loc:{start:{line:1,column:38757},end:{line:1,column:38804}},type:"cond-expr",locations:[{start:{line:1,column:38764},end:{line:1,column:38801}},{start:{line:1,column:38803},end:{line:1,column:38804}}],line:1},"450":{loc:{start:{line:1,column:38764},end:{line:1,column:38788}},type:"binary-expr",locations:[{start:{line:1,column:38764},end:{line:1,column:38777}},{start:{line:1,column:38779},end:{line:1,column:38788}}],line:1},"451":{loc:{start:{line:1,column:38881},end:{line:1,column:38905}},type:"cond-expr",locations:[{start:{line:1,column:38896},end:{line:1,column:38900}},{start:{line:1,column:38901},end:{line:1,column:38905}}],line:1},"452":{loc:{start:{line:1,column:38955},end:{line:1,column:39047}},type:"cond-expr",locations:[{start:{line:1,column:38960},end:{line:1,column:39045}},{start:{line:1,column:39046},end:{line:1,column:39047}}],line:1},"453":{loc:{start:{line:1,column:38955},end:{line:1,column:38959}},type:"binary-expr",locations:[{start:{line:1,column:38955},end:{line:1,column:38956}},{start:{line:1,column:38958},end:{line:1,column:38959}}],line:1},"454":{loc:{start:{line:1,column:39079},end:{line:1,column:39102}},type:"if",locations:[{start:{line:1,column:39079},end:{line:1,column:39102}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"455":{loc:{start:{line:1,column:39138},end:{line:1,column:39181}},type:"cond-expr",locations:[{start:{line:1,column:39150},end:{line:1,column:39151}},{start:{line:1,column:39152},end:{line:1,column:39181}}],line:1},"456":{loc:{start:{line:1,column:39160},end:{line:1,column:39180}},type:"cond-expr",locations:[{start:{line:1,column:39172},end:{line:1,column:39173}},{start:{line:1,column:39174},end:{line:1,column:39180}}],line:1},"457":{loc:{start:{line:1,column:39188},end:{line:1,column:39241}},type:"cond-expr",locations:[{start:{line:1,column:39201},end:{line:1,column:39208}},{start:{line:1,column:39209},end:{line:1,column:39241}}],line:1},"458":{loc:{start:{line:1,column:39218},end:{line:1,column:39240}},type:"cond-expr",locations:[{start:{line:1,column:39231},end:{line:1,column:39232}},{start:{line:1,column:39233},end:{line:1,column:39240}}],line:1},"459":{loc:{start:{line:1,column:39246},end:{line:1,column:39285}},type:"cond-expr",locations:[{start:{line:1,column:39257},end:{line:1,column:39258}},{start:{line:1,column:39259},end:{line:1,column:39285}}],line:1},"460":{loc:{start:{line:1,column:39266},end:{line:1,column:39284}},type:"cond-expr",locations:[{start:{line:1,column:39277},end:{line:1,column:39278}},{start:{line:1,column:39279},end:{line:1,column:39284}}],line:1},"461":{loc:{start:{line:1,column:39293},end:{line:1,column:39351}},type:"cond-expr",locations:[{start:{line:1,column:39307},end:{line:1,column:39315}},{start:{line:1,column:39316},end:{line:1,column:39351}}],line:1},"462":{loc:{start:{line:1,column:39326},end:{line:1,column:39350}},type:"cond-expr",locations:[{start:{line:1,column:39340},end:{line:1,column:39341}},{start:{line:1,column:39342},end:{line:1,column:39350}}],line:1},"463":{loc:{start:{line:1,column:39611},end:{line:1,column:39745}},type:"binary-expr",locations:[{start:{line:1,column:39611},end:{line:1,column:39624}},{start:{line:1,column:39627},end:{line:1,column:39744}}],line:1},"464":{loc:{start:{line:1,column:39712},end:{line:1,column:39742}},type:"binary-expr",locations:[{start:{line:1,column:39712},end:{line:1,column:39725}},{start:{line:1,column:39727},end:{line:1,column:39742}}],line:1},"465":{loc:{start:{line:1,column:39754},end:{line:1,column:39766}},type:"default-arg",locations:[{start:{line:1,column:39756},end:{line:1,column:39766}}],line:1},"466":{loc:{start:{line:1,column:39805},end:{line:1,column:39843}},type:"if",locations:[{start:{line:1,column:39805},end:{line:1,column:39843}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"467":{loc:{start:{line:1,column:39808},end:{line:1,column:39835}},type:"binary-expr",locations:[{start:{line:1,column:39808},end:{line:1,column:39818}},{start:{line:1,column:39820},end:{line:1,column:39835}}],line:1},"468":{loc:{start:{line:1,column:39898},end:{line:1,column:39996}},type:"cond-expr",locations:[{start:{line:1,column:39909},end:{line:1,column:39966}},{start:{line:1,column:39969},end:{line:1,column:39995}}],line:1},"469":{loc:{start:{line:1,column:39909},end:{line:1,column:39951}},type:"binary-expr",locations:[{start:{line:1,column:39909},end:{line:1,column:39928}},{start:{line:1,column:39931},end:{line:1,column:39950}}],line:1},"470":{loc:{start:{line:1,column:39997},end:{line:1,column:40041}},type:"binary-expr",locations:[{start:{line:1,column:39997},end:{line:1,column:39998}},{start:{line:1,column:40001},end:{line:1,column:40040}}],line:1},"471":{loc:{start:{line:1,column:40042},end:{line:1,column:40110}},type:"binary-expr",locations:[{start:{line:1,column:40042},end:{line:1,column:40050}},{start:{line:1,column:40053},end:{line:1,column:40109}}],line:1},"472":{loc:{start:{line:1,column:40142},end:{line:1,column:40167}},type:"binary-expr",locations:[{start:{line:1,column:40142},end:{line:1,column:40147}},{start:{line:1,column:40150},end:{line:1,column:40166}}],line:1},"473":{loc:{start:{line:1,column:40218},end:{line:1,column:40304}},type:"binary-expr",locations:[{start:{line:1,column:40218},end:{line:1,column:40219}},{start:{line:1,column:40222},end:{line:1,column:40303}}],line:1},"474":{loc:{start:{line:1,column:40369},end:{line:1,column:40418}},type:"binary-expr",locations:[{start:{line:1,column:40369},end:{line:1,column:40371}},{start:{line:1,column:40373},end:{line:1,column:40382}},{start:{line:1,column:40384},end:{line:1,column:40418}}],line:1},"475":{loc:{start:{line:1,column:40501},end:{line:1,column:40613}},type:"binary-expr",locations:[{start:{line:1,column:40501},end:{line:1,column:40502}},{start:{line:1,column:40505},end:{line:1,column:40612}}],line:1},"476":{loc:{start:{line:1,column:40625},end:{line:1,column:40652}},type:"if",locations:[{start:{line:1,column:40625},end:{line:1,column:40652}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"477":{loc:{start:{line:1,column:40686},end:{line:1,column:40717}},type:"binary-expr",locations:[{start:{line:1,column:40686},end:{line:1,column:40688}},{start:{line:1,column:40690},end:{line:1,column:40700}},{start:{line:1,column:40702},end:{line:1,column:40717}}],line:1},"478":{loc:{start:{line:1,column:40753},end:{line:1,column:40783}},type:"if",locations:[{start:{line:1,column:40753},end:{line:1,column:40783}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"479":{loc:{start:{line:1,column:40756},end:{line:1,column:40775}},type:"binary-expr",locations:[{start:{line:1,column:40756},end:{line:1,column:40758}},{start:{line:1,column:40760},end:{line:1,column:40775}}],line:1},"480":{loc:{start:{line:1,column:40984},end:{line:1,column:40992}},type:"cond-expr",locations:[{start:{line:1,column:40989},end:{line:1,column:40990}},{start:{line:1,column:40991},end:{line:1,column:40992}}],line:1},"481":{loc:{start:{line:1,column:41016},end:{line:1,column:41021}},type:"binary-expr",locations:[{start:{line:1,column:41016},end:{line:1,column:41017}},{start:{line:1,column:41019},end:{line:1,column:41021}}],line:1},"482":{loc:{start:{line:1,column:41025},end:{line:1,column:41043}},type:"binary-expr",locations:[{start:{line:1,column:41025},end:{line:1,column:41032}},{start:{line:1,column:41034},end:{line:1,column:41043}}],line:1},"483":{loc:{start:{line:1,column:41037},end:{line:1,column:41042}},type:"binary-expr",locations:[{start:{line:1,column:41037},end:{line:1,column:41038}},{start:{line:1,column:41040},end:{line:1,column:41042}}],line:1},"484":{loc:{start:{line:1,column:41051},end:{line:1,column:41086}},type:"cond-expr",locations:[{start:{line:1,column:41062},end:{line:1,column:41084}},{start:{line:1,column:41085},end:{line:1,column:41086}}],line:1},"485":{loc:{start:{line:1,column:41051},end:{line:1,column:41061}},type:"binary-expr",locations:[{start:{line:1,column:41051},end:{line:1,column:41052}},{start:{line:1,column:41054},end:{line:1,column:41061}}],line:1},"486":{loc:{start:{line:1,column:41234},end:{line:1,column:41260}},type:"binary-expr",locations:[{start:{line:1,column:41234},end:{line:1,column:41238}},{start:{line:1,column:41240},end:{line:1,column:41260}}],line:1},"487":{loc:{start:{line:1,column:41243},end:{line:1,column:41259}},type:"binary-expr",locations:[{start:{line:1,column:41243},end:{line:1,column:41249}},{start:{line:1,column:41251},end:{line:1,column:41259}}],line:1},"488":{loc:{start:{line:1,column:41274},end:{line:1,column:41297}},type:"binary-expr",locations:[{start:{line:1,column:41274},end:{line:1,column:41286}},{start:{line:1,column:41288},end:{line:1,column:41297}}],line:1},"489":{loc:{start:{line:1,column:41333},end:{line:1,column:41343}},type:"binary-expr",locations:[{start:{line:1,column:41333},end:{line:1,column:41340}},{start:{line:1,column:41342},end:{line:1,column:41343}}],line:1},"490":{loc:{start:{line:1,column:41533},end:{line:1,column:41791}},type:"if",locations:[{start:{line:1,column:41533},end:{line:1,column:41791}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"491":{loc:{start:{line:1,column:41801},end:{line:1,column:41871}},type:"binary-expr",locations:[{start:{line:1,column:41801},end:{line:1,column:41813}},{start:{line:1,column:41816},end:{line:1,column:41870}}],line:1},"492":{loc:{start:{line:1,column:41969},end:{line:1,column:42058}},type:"if",locations:[{start:{line:1,column:41969},end:{line:1,column:42058}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"493":{loc:{start:{line:1,column:41985},end:{line:1,column:42000}},type:"binary-expr",locations:[{start:{line:1,column:41985},end:{line:1,column:41990}},{start:{line:1,column:41993},end:{line:1,column:41994}},{start:{line:1,column:41996},end:{line:1,column:41999}}],line:1},"494":{loc:{start:{line:1,column:42058},end:{line:1,column:42091}},type:"if",locations:[{start:{line:1,column:42058},end:{line:1,column:42091}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"495":{loc:{start:{line:1,column:42101},end:{line:1,column:42113}},type:"cond-expr",locations:[{start:{line:1,column:42108},end:{line:1,column:42111}},{start:{line:1,column:42112},end:{line:1,column:42113}}],line:1},"496":{loc:{start:{line:1,column:42101},end:{line:1,column:42107}},type:"binary-expr",locations:[{start:{line:1,column:42101},end:{line:1,column:42102}},{start:{line:1,column:42104},end:{line:1,column:42107}}],line:1},"497":{loc:{start:{line:1,column:42201},end:{line:1,column:42236}},type:"binary-expr",locations:[{start:{line:1,column:42201},end:{line:1,column:42215}},{start:{line:1,column:42218},end:{line:1,column:42235}}],line:1},"498":{loc:{start:{line:1,column:42305},end:{line:1,column:42318}},type:"cond-expr",locations:[{start:{line:1,column:42307},end:{line:1,column:42312}},{start:{line:1,column:42313},end:{line:1,column:42318}}],line:1},"499":{loc:{start:{line:1,column:42321},end:{line:1,column:42339}},type:"binary-expr",locations:[{start:{line:1,column:42321},end:{line:1,column:42335}},{start:{line:1,column:42337},end:{line:1,column:42339}}],line:1},"500":{loc:{start:{line:1,column:42475},end:{line:1,column:42491}},type:"if",locations:[{start:{line:1,column:42475},end:{line:1,column:42491}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"501":{loc:{start:{line:1,column:42594},end:{line:1,column:42610}},type:"if",locations:[{start:{line:1,column:42594},end:{line:1,column:42610}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"502":{loc:{start:{line:1,column:42645},end:{line:1,column:42679}},type:"binary-expr",locations:[{start:{line:1,column:42645},end:{line:1,column:42660}},{start:{line:1,column:42662},end:{line:1,column:42674}},{start:{line:1,column:42676},end:{line:1,column:42679}}],line:1},"503":{loc:{start:{line:1,column:42693},end:{line:1,column:42723}},type:"binary-expr",locations:[{start:{line:1,column:42694},end:{line:1,column:42699}},{start:{line:1,column:42701},end:{line:1,column:42710}},{start:{line:1,column:42713},end:{line:1,column:42723}}],line:1},"504":{loc:{start:{line:1,column:42775},end:{line:1,column:42790}},type:"if",locations:[{start:{line:1,column:42775},end:{line:1,column:42790}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"505":{loc:{start:{line:1,column:42831},end:{line:1,column:42900}},type:"binary-expr",locations:[{start:{line:1,column:42831},end:{line:1,column:42840}},{start:{line:1,column:42842},end:{line:1,column:42900}}],line:1},"506":{loc:{start:{line:1,column:42956},end:{line:1,column:42989}},type:"binary-expr",locations:[{start:{line:1,column:42956},end:{line:1,column:42969}},{start:{line:1,column:42972},end:{line:1,column:42988}}],line:1},"507":{loc:{start:{line:1,column:43060},end:{line:1,column:43090}},type:"if",locations:[{start:{line:1,column:43060},end:{line:1,column:43090}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"508":{loc:{start:{line:1,column:43090},end:{line:1,column:43154}},type:"if",locations:[{start:{line:1,column:43090},end:{line:1,column:43154}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"509":{loc:{start:{line:1,column:43183},end:{line:1,column:43247}},type:"if",locations:[{start:{line:1,column:43183},end:{line:1,column:43247}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"510":{loc:{start:{line:1,column:43188},end:{line:1,column:43247}},type:"if",locations:[{start:{line:1,column:43188},end:{line:1,column:43247}},{start:{line:1,column:43236},end:{line:1,column:43247}}],line:1},"511":{loc:{start:{line:1,column:43191},end:{line:1,column:43204}},type:"binary-expr",locations:[{start:{line:1,column:43191},end:{line:1,column:43192}},{start:{line:1,column:43194},end:{line:1,column:43204}}],line:1},"512":{loc:{start:{line:1,column:43247},end:{line:1,column:43283}},type:"if",locations:[{start:{line:1,column:43247},end:{line:1,column:43283}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"513":{loc:{start:{line:1,column:43250},end:{line:1,column:43265}},type:"binary-expr",locations:[{start:{line:1,column:43250},end:{line:1,column:43252}},{start:{line:1,column:43254},end:{line:1,column:43265}}],line:1},"514":{loc:{start:{line:1,column:43337},end:{line:1,column:43393}},type:"if",locations:[{start:{line:1,column:43337},end:{line:1,column:43393}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"515":{loc:{start:{line:1,column:43427},end:{line:1,column:43470}},type:"if",locations:[{start:{line:1,column:43427},end:{line:1,column:43470}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"516":{loc:{start:{line:1,column:43558},end:{line:1,column:43589}},type:"binary-expr",locations:[{start:{line:1,column:43558},end:{line:1,column:43559}},{start:{line:1,column:43561},end:{line:1,column:43571}},{start:{line:1,column:43573},end:{line:1,column:43589}}],line:1},"517":{loc:{start:{line:1,column:43629},end:{line:1,column:43642}},type:"if",locations:[{start:{line:1,column:43629},end:{line:1,column:43642}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"518":{loc:{start:{line:1,column:43658},end:{line:1,column:43684}},type:"if",locations:[{start:{line:1,column:43658},end:{line:1,column:43684}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"519":{loc:{start:{line:1,column:43691},end:{line:1,column:43763}},type:"binary-expr",locations:[{start:{line:1,column:43691},end:{line:1,column:43700}},{start:{line:1,column:43703},end:{line:1,column:43762}}],line:1},"520":{loc:{start:{line:1,column:43789},end:{line:1,column:43805}},type:"binary-expr",locations:[{start:{line:1,column:43789},end:{line:1,column:43790}},{start:{line:1,column:43792},end:{line:1,column:43801}},{start:{line:1,column:43803},end:{line:1,column:43805}}],line:1},"521":{loc:{start:{line:1,column:43820},end:{line:1,column:43838}},type:"cond-expr",locations:[{start:{line:1,column:43835},end:{line:1,column:43836}},{start:{line:1,column:43837},end:{line:1,column:43838}}],line:1},"522":{loc:{start:{line:1,column:43841},end:{line:1,column:43859}},type:"cond-expr",locations:[{start:{line:1,column:43856},end:{line:1,column:43857}},{start:{line:1,column:43858},end:{line:1,column:43859}}],line:1},"523":{loc:{start:{line:1,column:43873},end:{line:1,column:43878}},type:"cond-expr",locations:[{start:{line:1,column:43875},end:{line:1,column:43876}},{start:{line:1,column:43877},end:{line:1,column:43878}}],line:1},"524":{loc:{start:{line:1,column:43883},end:{line:1,column:43888}},type:"cond-expr",locations:[{start:{line:1,column:43885},end:{line:1,column:43886}},{start:{line:1,column:43887},end:{line:1,column:43888}}],line:1},"525":{loc:{start:{line:1,column:43909},end:{line:1,column:43928}},type:"if",locations:[{start:{line:1,column:43909},end:{line:1,column:43928}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"526":{loc:{start:{line:1,column:44044},end:{line:1,column:44098}},type:"cond-expr",locations:[{start:{line:1,column:44050},end:{line:1,column:44087}},{start:{line:1,column:44089},end:{line:1,column:44098}}],line:1},"527":{loc:{start:{line:1,column:44280},end:{line:1,column:44284}},type:"default-arg",locations:[{start:{line:1,column:44282},end:{line:1,column:44284}}],line:1},"528":{loc:{start:{line:1,column:44327},end:{line:1,column:44346}},type:"if",locations:[{start:{line:1,column:44327},end:{line:1,column:44346}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"529":{loc:{start:{line:1,column:44383},end:{line:1,column:44430}},type:"if",locations:[{start:{line:1,column:44383},end:{line:1,column:44430}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"530":{loc:{start:{line:1,column:44401},end:{line:1,column:44424}},type:"if",locations:[{start:{line:1,column:44401},end:{line:1,column:44424}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"531":{loc:{start:{line:1,column:44444},end:{line:1,column:44483}},type:"binary-expr",locations:[{start:{line:1,column:44444},end:{line:1,column:44448}},{start:{line:1,column:44451},end:{line:1,column:44452}},{start:{line:1,column:44454},end:{line:1,column:44459}},{start:{line:1,column:44461},end:{line:1,column:44474}},{start:{line:1,column:44478},end:{line:1,column:44482}}],line:1},"532":{loc:{start:{line:1,column:44490},end:{line:1,column:44504}},type:"cond-expr",locations:[{start:{line:1,column:44501},end:{line:1,column:44502}},{start:{line:1,column:44503},end:{line:1,column:44504}}],line:1},"533":{loc:{start:{line:1,column:44490},end:{line:1,column:44500}},type:"binary-expr",locations:[{start:{line:1,column:44490},end:{line:1,column:44492}},{start:{line:1,column:44494},end:{line:1,column:44500}}],line:1},"534":{loc:{start:{line:1,column:44549},end:{line:1,column:44569}},type:"cond-expr",locations:[{start:{line:1,column:44562},end:{line:1,column:44565}},{start:{line:1,column:44566},end:{line:1,column:44569}}],line:1},"535":{loc:{start:{line:1,column:44572},end:{line:1,column:44592}},type:"cond-expr",locations:[{start:{line:1,column:44585},end:{line:1,column:44588}},{start:{line:1,column:44589},end:{line:1,column:44592}}],line:1},"536":{loc:{start:{line:1,column:44726},end:{line:1,column:44746}},type:"binary-expr",locations:[{start:{line:1,column:44726},end:{line:1,column:44727}},{start:{line:1,column:44729},end:{line:1,column:44746}}],line:1},"537":{loc:{start:{line:1,column:44754},end:{line:1,column:44785}},type:"binary-expr",locations:[{start:{line:1,column:44754},end:{line:1,column:44755}},{start:{line:1,column:44757},end:{line:1,column:44767}},{start:{line:1,column:44769},end:{line:1,column:44785}}],line:1},"538":{loc:{start:{line:1,column:44830},end:{line:1,column:44845}},type:"binary-expr",locations:[{start:{line:1,column:44830},end:{line:1,column:44837}},{start:{line:1,column:44839},end:{line:1,column:44845}}],line:1},"539":{loc:{start:{line:1,column:44935},end:{line:1,column:44963}},type:"cond-expr",locations:[{start:{line:1,column:44937},end:{line:1,column:44938}},{start:{line:1,column:44939},end:{line:1,column:44963}}],line:1},"540":{loc:{start:{line:1,column:44968},end:{line:1,column:44996}},type:"cond-expr",locations:[{start:{line:1,column:44970},end:{line:1,column:44971}},{start:{line:1,column:44972},end:{line:1,column:44996}}],line:1},"541":{loc:{start:{line:1,column:45023},end:{line:1,column:45038}},type:"binary-expr",locations:[{start:{line:1,column:45023},end:{line:1,column:45027}},{start:{line:1,column:45030},end:{line:1,column:45037}}],line:1},"542":{loc:{start:{line:1,column:45046},end:{line:1,column:45061}},type:"binary-expr",locations:[{start:{line:1,column:45046},end:{line:1,column:45050}},{start:{line:1,column:45053},end:{line:1,column:45060}}],line:1},"543":{loc:{start:{line:1,column:45153},end:{line:1,column:45186}},type:"if",locations:[{start:{line:1,column:45153},end:{line:1,column:45186}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"544":{loc:{start:{line:1,column:45156},end:{line:1,column:45171}},type:"binary-expr",locations:[{start:{line:1,column:45156},end:{line:1,column:45157}},{start:{line:1,column:45159},end:{line:1,column:45162}},{start:{line:1,column:45164},end:{line:1,column:45166}},{start:{line:1,column:45168},end:{line:1,column:45171}}],line:1},"545":{loc:{start:{line:1,column:45247},end:{line:1,column:45272}},type:"binary-expr",locations:[{start:{line:1,column:45247},end:{line:1,column:45256}},{start:{line:1,column:45259},end:{line:1,column:45271}}],line:1},"546":{loc:{start:{line:1,column:45396},end:{line:1,column:45421}},type:"binary-expr",locations:[{start:{line:1,column:45396},end:{line:1,column:45405}},{start:{line:1,column:45408},end:{line:1,column:45420}}],line:1},"547":{loc:{start:{line:1,column:45505},end:{line:1,column:45542}},type:"binary-expr",locations:[{start:{line:1,column:45505},end:{line:1,column:45520}},{start:{line:1,column:45523},end:{line:1,column:45541}}],line:1},"548":{loc:{start:{line:1,column:45918},end:{line:1,column:45941}},type:"binary-expr",locations:[{start:{line:1,column:45918},end:{line:1,column:45926}},{start:{line:1,column:45928},end:{line:1,column:45941}}],line:1},"549":{loc:{start:{line:1,column:45942},end:{line:1,column:46147}},type:"if",locations:[{start:{line:1,column:45942},end:{line:1,column:46147}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"550":{loc:{start:{line:1,column:45950},end:{line:1,column:45962}},type:"binary-expr",locations:[{start:{line:1,column:45950},end:{line:1,column:45951}},{start:{line:1,column:45953},end:{line:1,column:45962}}],line:1},"551":{loc:{start:{line:1,column:45995},end:{line:1,column:46041}},type:"if",locations:[{start:{line:1,column:45995},end:{line:1,column:46041}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"552":{loc:{start:{line:1,column:45998},end:{line:1,column:46033}},type:"binary-expr",locations:[{start:{line:1,column:45998},end:{line:1,column:46000}},{start:{line:1,column:46002},end:{line:1,column:46015}},{start:{line:1,column:46017},end:{line:1,column:46033}}],line:1},"553":{loc:{start:{line:1,column:46056},end:{line:1,column:46145}},type:"binary-expr",locations:[{start:{line:1,column:46056},end:{line:1,column:46083}},{start:{line:1,column:46085},end:{line:1,column:46115}},{start:{line:1,column:46117},end:{line:1,column:46145}}],line:1},"554":{loc:{start:{line:1,column:46158},end:{line:1,column:46181}},type:"binary-expr",locations:[{start:{line:1,column:46158},end:{line:1,column:46169}},{start:{line:1,column:46171},end:{line:1,column:46181}}],line:1},"555":{loc:{start:{line:1,column:46192},end:{line:1,column:46215}},type:"cond-expr",locations:[{start:{line:1,column:46194},end:{line:1,column:46195}},{start:{line:1,column:46196},end:{line:1,column:46215}}],line:1},"556":{loc:{start:{line:1,column:46228},end:{line:1,column:46281}},type:"binary-expr",locations:[{start:{line:1,column:46228},end:{line:1,column:46229}},{start:{line:1,column:46231},end:{line:1,column:46240}},{start:{line:1,column:46242},end:{line:1,column:46252}},{start:{line:1,column:46254},end:{line:1,column:46281}}],line:1},"557":{loc:{start:{line:1,column:47007},end:{line:1,column:47243}},type:"binary-expr",locations:[{start:{line:1,column:47007},end:{line:1,column:47024}},{start:{line:1,column:47026},end:{line:1,column:47063}},{start:{line:1,column:47065},end:{line:1,column:47243}}],line:1},"558":{loc:{start:{line:1,column:47259},end:{line:1,column:47295}},type:"binary-expr",locations:[{start:{line:1,column:47259},end:{line:1,column:47273}},{start:{line:1,column:47275},end:{line:1,column:47295}}],line:1},"559":{loc:{start:{line:1,column:47391},end:{line:1,column:47412}},type:"cond-expr",locations:[{start:{line:1,column:47399},end:{line:1,column:47400}},{start:{line:1,column:47401},end:{line:1,column:47412}}],line:1},"560":{loc:{start:{line:1,column:47401},end:{line:1,column:47412}},type:"cond-expr",locations:[{start:{line:1,column:47409},end:{line:1,column:47410}},{start:{line:1,column:47411},end:{line:1,column:47412}}],line:1},"561":{loc:{start:{line:1,column:47938},end:{line:1,column:47968}},type:"cond-expr",locations:[{start:{line:1,column:47951},end:{line:1,column:47959}},{start:{line:1,column:47960},end:{line:1,column:47968}}],line:1},"562":{loc:{start:{line:1,column:48033},end:{line:1,column:48064}},type:"binary-expr",locations:[{start:{line:1,column:48033},end:{line:1,column:48043}},{start:{line:1,column:48045},end:{line:1,column:48064}}],line:1},"563":{loc:{start:{line:1,column:48065},end:{line:1,column:48082}},type:"binary-expr",locations:[{start:{line:1,column:48065},end:{line:1,column:48075}},{start:{line:1,column:48077},end:{line:1,column:48082}}],line:1},"564":{loc:{start:{line:1,column:48122},end:{line:1,column:48141}},type:"binary-expr",locations:[{start:{line:1,column:48122},end:{line:1,column:48128}},{start:{line:1,column:48131},end:{line:1,column:48140}}],line:1},"565":{loc:{start:{line:1,column:48155},end:{line:1,column:48349}},type:"if",locations:[{start:{line:1,column:48155},end:{line:1,column:48349}},{start:{line:1,column:48211},end:{line:1,column:48349}}],line:1},"566":{loc:{start:{line:1,column:48211},end:{line:1,column:48349}},type:"if",locations:[{start:{line:1,column:48211},end:{line:1,column:48349}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"567":{loc:{start:{line:1,column:48221},end:{line:1,column:48280}},type:"if",locations:[{start:{line:1,column:48221},end:{line:1,column:48280}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"568":{loc:{start:{line:1,column:48280},end:{line:1,column:48317}},type:"binary-expr",locations:[{start:{line:1,column:48280},end:{line:1,column:48281}},{start:{line:1,column:48283},end:{line:1,column:48305}},{start:{line:1,column:48307},end:{line:1,column:48317}}],line:1},"569":{loc:{start:{line:1,column:48405},end:{line:1,column:48469}},type:"binary-expr",locations:[{start:{line:1,column:48405},end:{line:1,column:48428}},{start:{line:1,column:48431},end:{line:1,column:48468}}],line:1},"570":{loc:{start:{line:1,column:48604},end:{line:1,column:48651}},type:"binary-expr",locations:[{start:{line:1,column:48604},end:{line:1,column:48621}},{start:{line:1,column:48624},end:{line:1,column:48650}}],line:1},"571":{loc:{start:{line:1,column:48676},end:{line:1,column:48743}},type:"binary-expr",locations:[{start:{line:1,column:48677},end:{line:1,column:48678}},{start:{line:1,column:48680},end:{line:1,column:48694}},{start:{line:1,column:48698},end:{line:1,column:48742}}],line:1},"572":{loc:{start:{line:1,column:49045},end:{line:1,column:49077}},type:"cond-expr",locations:[{start:{line:1,column:49065},end:{line:1,column:49067}},{start:{line:1,column:49068},end:{line:1,column:49077}}],line:1},"573":{loc:{start:{line:1,column:49045},end:{line:1,column:49064}},type:"binary-expr",locations:[{start:{line:1,column:49045},end:{line:1,column:49050}},{start:{line:1,column:49052},end:{line:1,column:49064}}],line:1},"574":{loc:{start:{line:1,column:49080},end:{line:1,column:49099}},type:"binary-expr",locations:[{start:{line:1,column:49080},end:{line:1,column:49083}},{start:{line:1,column:49085},end:{line:1,column:49099}}],line:1},"575":{loc:{start:{line:1,column:49106},end:{line:1,column:49383}},type:"if",locations:[{start:{line:1,column:49106},end:{line:1,column:49383}},{start:{line:1,column:49161},end:{line:1,column:49383}}],line:1},"576":{loc:{start:{line:1,column:49162},end:{line:1,column:49275}},type:"cond-expr",locations:[{start:{line:1,column:49170},end:{line:1,column:49200}},{start:{line:1,column:49201},end:{line:1,column:49275}}],line:1},"577":{loc:{start:{line:1,column:49201},end:{line:1,column:49275}},type:"cond-expr",locations:[{start:{line:1,column:49209},end:{line:1,column:49240}},{start:{line:1,column:49241},end:{line:1,column:49275}}],line:1},"578":{loc:{start:{line:1,column:49286},end:{line:1,column:49311}},type:"binary-expr",locations:[{start:{line:1,column:49286},end:{line:1,column:49297}},{start:{line:1,column:49299},end:{line:1,column:49300}},{start:{line:1,column:49302},end:{line:1,column:49311}}],line:1},"579":{loc:{start:{line:1,column:49350},end:{line:1,column:49370}},type:"binary-expr",locations:[{start:{line:1,column:49350},end:{line:1,column:49351}},{start:{line:1,column:49354},end:{line:1,column:49369}}],line:1},"580":{loc:{start:{line:1,column:49354},end:{line:1,column:49365}},type:"binary-expr",locations:[{start:{line:1,column:49354},end:{line:1,column:49357}},{start:{line:1,column:49360},end:{line:1,column:49364}}],line:1},"581":{loc:{start:{line:1,column:49383},end:{line:1,column:49396}},type:"binary-expr",locations:[{start:{line:1,column:49383},end:{line:1,column:49384}},{start:{line:1,column:49386},end:{line:1,column:49396}}],line:1},"582":{loc:{start:{line:1,column:49549},end:{line:1,column:49567}},type:"binary-expr",locations:[{start:{line:1,column:49549},end:{line:1,column:49550}},{start:{line:1,column:49552},end:{line:1,column:49567}}],line:1},"583":{loc:{start:{line:1,column:49815},end:{line:1,column:49820}},type:"default-arg",locations:[{start:{line:1,column:49817},end:{line:1,column:49820}}],line:1},"584":{loc:{start:{line:1,column:49830},end:{line:1,column:49835}},type:"default-arg",locations:[{start:{line:1,column:49832},end:{line:1,column:49835}}],line:1},"585":{loc:{start:{line:1,column:50267},end:{line:1,column:50281}},type:"cond-expr",locations:[{start:{line:1,column:50276},end:{line:1,column:50279}},{start:{line:1,column:50280},end:{line:1,column:50281}}],line:1},"586":{loc:{start:{line:1,column:50284},end:{line:1,column:50304}},type:"binary-expr",locations:[{start:{line:1,column:50284},end:{line:1,column:50285}},{start:{line:1,column:50287},end:{line:1,column:50304}}],line:1},"587":{loc:{start:{line:1,column:50305},end:{line:1,column:50356}},type:"binary-expr",locations:[{start:{line:1,column:50305},end:{line:1,column:50306}},{start:{line:1,column:50308},end:{line:1,column:50309}},{start:{line:1,column:50312},end:{line:1,column:50355}}],line:1},"588":{loc:{start:{line:1,column:50457},end:{line:1,column:50480}},type:"binary-expr",locations:[{start:{line:1,column:50457},end:{line:1,column:50466}},{start:{line:1,column:50468},end:{line:1,column:50480}}],line:1},"589":{loc:{start:{line:1,column:50666},end:{line:1,column:50689}},type:"binary-expr",locations:[{start:{line:1,column:50666},end:{line:1,column:50679}},{start:{line:1,column:50681},end:{line:1,column:50684}},{start:{line:1,column:50686},end:{line:1,column:50689}}],line:1},"590":{loc:{start:{line:1,column:50698},end:{line:1,column:50751}},type:"binary-expr",locations:[{start:{line:1,column:50698},end:{line:1,column:50701}},{start:{line:1,column:50703},end:{line:1,column:50751}}],line:1},"591":{loc:{start:{line:1,column:50705},end:{line:1,column:50750}},type:"binary-expr",locations:[{start:{line:1,column:50705},end:{line:1,column:50709}},{start:{line:1,column:50712},end:{line:1,column:50749}}],line:1},"592":{loc:{start:{line:1,column:50757},end:{line:1,column:50834}},type:"if",locations:[{start:{line:1,column:50757},end:{line:1,column:50834}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"593":{loc:{start:{line:1,column:50782},end:{line:1,column:50833}},type:"if",locations:[{start:{line:1,column:50782},end:{line:1,column:50833}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"594":{loc:{start:{line:1,column:50949},end:{line:1,column:50964}},type:"binary-expr",locations:[{start:{line:1,column:50949},end:{line:1,column:50953}},{start:{line:1,column:50955},end:{line:1,column:50964}}],line:1},"595":{loc:{start:{line:1,column:51098},end:{line:1,column:51135}},type:"cond-expr",locations:[{start:{line:1,column:51100},end:{line:1,column:51132}},{start:{line:1,column:51133},end:{line:1,column:51135}}],line:1},"596":{loc:{start:{line:1,column:51142},end:{line:1,column:51179}},type:"cond-expr",locations:[{start:{line:1,column:51144},end:{line:1,column:51176}},{start:{line:1,column:51177},end:{line:1,column:51179}}],line:1},"597":{loc:{start:{line:1,column:51227},end:{line:1,column:51239}},type:"binary-expr",locations:[{start:{line:1,column:51227},end:{line:1,column:51228}},{start:{line:1,column:51230},end:{line:1,column:51239}}],line:1},"598":{loc:{start:{line:1,column:51386},end:{line:1,column:51396}},type:"binary-expr",locations:[{start:{line:1,column:51386},end:{line:1,column:51392}},{start:{line:1,column:51394},end:{line:1,column:51396}}],line:1},"599":{loc:{start:{line:1,column:51418},end:{line:1,column:51436}},type:"binary-expr",locations:[{start:{line:1,column:51418},end:{line:1,column:51433}},{start:{line:1,column:51435},end:{line:1,column:51436}}],line:1},"600":{loc:{start:{line:1,column:51439},end:{line:1,column:51466}},type:"binary-expr",locations:[{start:{line:1,column:51439},end:{line:1,column:51454}},{start:{line:1,column:51456},end:{line:1,column:51466}}],line:1},"601":{loc:{start:{line:1,column:51512},end:{line:1,column:51546}},type:"binary-expr",locations:[{start:{line:1,column:51512},end:{line:1,column:51521}},{start:{line:1,column:51523},end:{line:1,column:51546}}],line:1},"602":{loc:{start:{line:1,column:51573},end:{line:1,column:51618}},type:"binary-expr",locations:[{start:{line:1,column:51573},end:{line:1,column:51581}},{start:{line:1,column:51584},end:{line:1,column:51617}}],line:1},"603":{loc:{start:{line:1,column:51584},end:{line:1,column:51617}},type:"cond-expr",locations:[{start:{line:1,column:51596},end:{line:1,column:51605}},{start:{line:1,column:51606},end:{line:1,column:51617}}],line:1},"604":{loc:{start:{line:1,column:51584},end:{line:1,column:51595}},type:"binary-expr",locations:[{start:{line:1,column:51584},end:{line:1,column:51592}},{start:{line:1,column:51594},end:{line:1,column:51595}}],line:1},"605":{loc:{start:{line:1,column:51677},end:{line:1,column:51697}},type:"cond-expr",locations:[{start:{line:1,column:51679},end:{line:1,column:51687}},{start:{line:1,column:51688},end:{line:1,column:51697}}],line:1},"606":{loc:{start:{line:1,column:51705},end:{line:1,column:51817}},type:"cond-expr",locations:[{start:{line:1,column:51742},end:{line:1,column:51778}},{start:{line:1,column:51779},end:{line:1,column:51817}}],line:1},"607":{loc:{start:{line:1,column:51705},end:{line:1,column:51741}},type:"binary-expr",locations:[{start:{line:1,column:51705},end:{line:1,column:51715}},{start:{line:1,column:51717},end:{line:1,column:51741}}],line:1},"608":{loc:{start:{line:1,column:51810},end:{line:1,column:51814}},type:"binary-expr",locations:[{start:{line:1,column:51810},end:{line:1,column:51811}},{start:{line:1,column:51813},end:{line:1,column:51814}}],line:1},"609":{loc:{start:{line:1,column:51862},end:{line:1,column:52175}},type:"if",locations:[{start:{line:1,column:51862},end:{line:1,column:52175}},{start:{line:1,column:52057},end:{line:1,column:52175}}],line:1},"610":{loc:{start:{line:1,column:51865},end:{line:1,column:51901}},type:"binary-expr",locations:[{start:{line:1,column:51865},end:{line:1,column:51869}},{start:{line:1,column:51871},end:{line:1,column:51901}}],line:1},"611":{loc:{start:{line:1,column:51936},end:{line:1,column:51986}},type:"binary-expr",locations:[{start:{line:1,column:51936},end:{line:1,column:51946}},{start:{line:1,column:51949},end:{line:1,column:51985}}],line:1},"612":{loc:{start:{line:1,column:52059},end:{line:1,column:52128}},type:"binary-expr",locations:[{start:{line:1,column:52059},end:{line:1,column:52072}},{start:{line:1,column:52075},end:{line:1,column:52127}}],line:1},"613":{loc:{start:{line:1,column:52423},end:{line:1,column:52434}},type:"default-arg",locations:[{start:{line:1,column:52425},end:{line:1,column:52434}}],line:1},"614":{loc:{start:{line:1,column:52499},end:{line:1,column:52530}},type:"binary-expr",locations:[{start:{line:1,column:52499},end:{line:1,column:52523}},{start:{line:1,column:52525},end:{line:1,column:52530}}],line:1},"615":{loc:{start:{line:1,column:52531},end:{line:1,column:52551}},type:"if",locations:[{start:{line:1,column:52531},end:{line:1,column:52551}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"616":{loc:{start:{line:1,column:52619},end:{line:1,column:52654}},type:"cond-expr",locations:[{start:{line:1,column:52621},end:{line:1,column:52647}},{start:{line:1,column:52648},end:{line:1,column:52654}}],line:1},"617":{loc:{start:{line:1,column:52794},end:{line:1,column:52846}},type:"binary-expr",locations:[{start:{line:1,column:52794},end:{line:1,column:52803}},{start:{line:1,column:52806},end:{line:1,column:52845}}],line:1},"618":{loc:{start:{line:1,column:52941},end:{line:1,column:52955}},type:"if",locations:[{start:{line:1,column:52941},end:{line:1,column:52955}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"619":{loc:{start:{line:1,column:52961},end:{line:1,column:53144}},type:"if",locations:[{start:{line:1,column:52961},end:{line:1,column:53144}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"620":{loc:{start:{line:1,column:53159},end:{line:1,column:53174}},type:"binary-expr",locations:[{start:{line:1,column:53159},end:{line:1,column:53160}},{start:{line:1,column:53162},end:{line:1,column:53174}}],line:1},"621":{loc:{start:{line:1,column:53183},end:{line:1,column:53223}},type:"binary-expr",locations:[{start:{line:1,column:53183},end:{line:1,column:53184}},{start:{line:1,column:53186},end:{line:1,column:53198}},{start:{line:1,column:53201},end:{line:1,column:53222}}],line:1},"622":{loc:{start:{line:1,column:53246},end:{line:1,column:53328}},type:"if",locations:[{start:{line:1,column:53246},end:{line:1,column:53328}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"623":{loc:{start:{line:1,column:53266},end:{line:1,column:53328}},type:"binary-expr",locations:[{start:{line:1,column:53266},end:{line:1,column:53285}},{start:{line:1,column:53288},end:{line:1,column:53327}}],line:1},"624":{loc:{start:{line:1,column:53355},end:{line:1,column:53396}},type:"binary-expr",locations:[{start:{line:1,column:53355},end:{line:1,column:53357}},{start:{line:1,column:53359},end:{line:1,column:53364}},{start:{line:1,column:53366},end:{line:1,column:53396}}],line:1},"625":{loc:{start:{line:1,column:53513},end:{line:1,column:53544}},type:"binary-expr",locations:[{start:{line:1,column:53513},end:{line:1,column:53537}},{start:{line:1,column:53539},end:{line:1,column:53544}}],line:1},"626":{loc:{start:{line:1,column:53642},end:{line:1,column:53707}},type:"cond-expr",locations:[{start:{line:1,column:53648},end:{line:1,column:53666}},{start:{line:1,column:53667},end:{line:1,column:53707}}],line:1},"627":{loc:{start:{line:1,column:53735},end:{line:1,column:53791}},type:"binary-expr",locations:[{start:{line:1,column:53735},end:{line:1,column:53736}},{start:{line:1,column:53738},end:{line:1,column:53744}},{start:{line:1,column:53746},end:{line:1,column:53791}}],line:1},"628":{loc:{start:{line:1,column:53896},end:{line:1,column:53927}},type:"binary-expr",locations:[{start:{line:1,column:53896},end:{line:1,column:53898}},{start:{line:1,column:53900},end:{line:1,column:53924}},{start:{line:1,column:53926},end:{line:1,column:53927}}],line:1},"629":{loc:{start:{line:1,column:54097},end:{line:1,column:54136}},type:"binary-expr",locations:[{start:{line:1,column:54097},end:{line:1,column:54098}},{start:{line:1,column:54100},end:{line:1,column:54136}}],line:1},"630":{loc:{start:{line:1,column:54192},end:{line:1,column:54231}},type:"binary-expr",locations:[{start:{line:1,column:54192},end:{line:1,column:54193}},{start:{line:1,column:54195},end:{line:1,column:54231}}],line:1},"631":{loc:{start:{line:1,column:54397},end:{line:1,column:54415}},type:"binary-expr",locations:[{start:{line:1,column:54397},end:{line:1,column:54398}},{start:{line:1,column:54400},end:{line:1,column:54415}}],line:1},"632":{loc:{start:{line:1,column:54416},end:{line:1,column:54482}},type:"cond-expr",locations:[{start:{line:1,column:54420},end:{line:1,column:54449}},{start:{line:1,column:54450},end:{line:1,column:54482}}],line:1},"633":{loc:{start:{line:1,column:54450},end:{line:1,column:54482}},type:"binary-expr",locations:[{start:{line:1,column:54450},end:{line:1,column:54453}},{start:{line:1,column:54455},end:{line:1,column:54482}}],line:1},"634":{loc:{start:{line:1,column:54503},end:{line:1,column:54507}},type:"default-arg",locations:[{start:{line:1,column:54505},end:{line:1,column:54507}}],line:1},"635":{loc:{start:{line:1,column:54657},end:{line:1,column:54684}},type:"binary-expr",locations:[{start:{line:1,column:54657},end:{line:1,column:54670}},{start:{line:1,column:54672},end:{line:1,column:54684}}],line:1},"636":{loc:{start:{line:1,column:54701},end:{line:1,column:54738}},type:"binary-expr",locations:[{start:{line:1,column:54701},end:{line:1,column:54702}},{start:{line:1,column:54704},end:{line:1,column:54738}}],line:1},"637":{loc:{start:{line:1,column:54808},end:{line:1,column:54874}},type:"if",locations:[{start:{line:1,column:54808},end:{line:1,column:54874}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"638":{loc:{start:{line:1,column:54854},end:{line:1,column:54873}},type:"binary-expr",locations:[{start:{line:1,column:54854},end:{line:1,column:54864}},{start:{line:1,column:54866},end:{line:1,column:54873}}],line:1},"639":{loc:{start:{line:1,column:54902},end:{line:1,column:54973}},type:"if",locations:[{start:{line:1,column:54902},end:{line:1,column:54973}},{start:{line:1,column:54946},end:{line:1,column:54973}}],line:1},"640":{loc:{start:{line:1,column:55272},end:{line:1,column:55310}},type:"binary-expr",locations:[{start:{line:1,column:55272},end:{line:1,column:55273}},{start:{line:1,column:55275},end:{line:1,column:55310}}],line:1},"641":{loc:{start:{line:1,column:55336},end:{line:1,column:55374}},type:"binary-expr",locations:[{start:{line:1,column:55336},end:{line:1,column:55337}},{start:{line:1,column:55339},end:{line:1,column:55374}}],line:1},"642":{loc:{start:{line:1,column:55474},end:{line:1,column:55651}},type:"if",locations:[{start:{line:1,column:55474},end:{line:1,column:55651}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"643":{loc:{start:{line:1,column:55744},end:{line:1,column:55812}},type:"binary-expr",locations:[{start:{line:1,column:55744},end:{line:1,column:55753}},{start:{line:1,column:55755},end:{line:1,column:55765}},{start:{line:1,column:55768},end:{line:1,column:55811}}],line:1},"644":{loc:{start:{line:1,column:55768},end:{line:1,column:55807}},type:"binary-expr",locations:[{start:{line:1,column:55768},end:{line:1,column:55773}},{start:{line:1,column:55776},end:{line:1,column:55806}}],line:1},"645":{loc:{start:{line:1,column:55789},end:{line:1,column:55805}},type:"binary-expr",locations:[{start:{line:1,column:55789},end:{line:1,column:55802}},{start:{line:1,column:55804},end:{line:1,column:55805}}],line:1},"646":{loc:{start:{line:1,column:56003},end:{line:1,column:56068}},type:"cond-expr",locations:[{start:{line:1,column:56009},end:{line:1,column:56055}},{start:{line:1,column:56058},end:{line:1,column:56067}}],line:1},"647":{loc:{start:{line:1,column:56156},end:{line:1,column:56171}},type:"cond-expr",locations:[{start:{line:1,column:56160},end:{line:1,column:56166}},{start:{line:1,column:56167},end:{line:1,column:56171}}],line:1},"648":{loc:{start:{line:1,column:56174},end:{line:1,column:56198}},type:"cond-expr",locations:[{start:{line:1,column:56187},end:{line:1,column:56193}},{start:{line:1,column:56194},end:{line:1,column:56198}}],line:1},"649":{loc:{start:{line:1,column:56222},end:{line:1,column:56266}},type:"binary-expr",locations:[{start:{line:1,column:56222},end:{line:1,column:56230}},{start:{line:1,column:56233},end:{line:1,column:56265}}],line:1},"650":{loc:{start:{line:1,column:56238},end:{line:1,column:56264}},type:"cond-expr",locations:[{start:{line:1,column:56247},end:{line:1,column:56260}},{start:{line:1,column:56261},end:{line:1,column:56264}}],line:1},"651":{loc:{start:{line:1,column:56267},end:{line:1,column:56286}},type:"binary-expr",locations:[{start:{line:1,column:56267},end:{line:1,column:56275}},{start:{line:1,column:56278},end:{line:1,column:56285}}],line:1},"652":{loc:{start:{line:1,column:56482},end:{line:1,column:56516}},type:"binary-expr",locations:[{start:{line:1,column:56482},end:{line:1,column:56505}},{start:{line:1,column:56508},end:{line:1,column:56515}}],line:1},"653":{loc:{start:{line:1,column:56615},end:{line:1,column:56654}},type:"cond-expr",locations:[{start:{line:1,column:56620},end:{line:1,column:56631}},{start:{line:1,column:56632},end:{line:1,column:56654}}],line:1},"654":{loc:{start:{line:1,column:56785},end:{line:1,column:56803}},type:"binary-expr",locations:[{start:{line:1,column:56785},end:{line:1,column:56786}},{start:{line:1,column:56788},end:{line:1,column:56803}}],line:1},"655":{loc:{start:{line:1,column:56855},end:{line:1,column:56896}},type:"binary-expr",locations:[{start:{line:1,column:56855},end:{line:1,column:56856}},{start:{line:1,column:56858},end:{line:1,column:56877}},{start:{line:1,column:56879},end:{line:1,column:56896}}],line:1},"656":{loc:{start:{line:1,column:56923},end:{line:1,column:56974}},type:"cond-expr",locations:[{start:{line:1,column:56929},end:{line:1,column:56934}},{start:{line:1,column:56935},end:{line:1,column:56974}}],line:1},"657":{loc:{start:{line:1,column:56936},end:{line:1,column:56957}},type:"cond-expr",locations:[{start:{line:1,column:56953},end:{line:1,column:56954}},{start:{line:1,column:56955},end:{line:1,column:56957}}],line:1},"658":{loc:{start:{line:1,column:56960},end:{line:1,column:56973}},type:"cond-expr",locations:[{start:{line:1,column:56969},end:{line:1,column:56970}},{start:{line:1,column:56971},end:{line:1,column:56973}}],line:1},"659":{loc:{start:{line:1,column:57011},end:{line:1,column:57091}},type:"cond-expr",locations:[{start:{line:1,column:57025},end:{line:1,column:57056}},{start:{line:1,column:57059},end:{line:1,column:57090}}],line:1},"660":{loc:{start:{line:1,column:57092},end:{line:1,column:57133}},type:"cond-expr",locations:[{start:{line:1,column:57095},end:{line:1,column:57112}},{start:{line:1,column:57115},end:{line:1,column:57132}}],line:1},"661":{loc:{start:{line:1,column:57223},end:{line:1,column:57255}},type:"if",locations:[{start:{line:1,column:57223},end:{line:1,column:57255}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"662":{loc:{start:{line:1,column:57255},end:{line:1,column:57325}},type:"if",locations:[{start:{line:1,column:57255},end:{line:1,column:57325}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"663":{loc:{start:{line:1,column:57375},end:{line:1,column:57484}},type:"binary-expr",locations:[{start:{line:1,column:57375},end:{line:1,column:57387}},{start:{line:1,column:57389},end:{line:1,column:57390}},{start:{line:1,column:57393},end:{line:1,column:57483}}],line:1},"664":{loc:{start:{line:1,column:57417},end:{line:1,column:57483}},type:"cond-expr",locations:[{start:{line:1,column:57433},end:{line:1,column:57436}},{start:{line:1,column:57437},end:{line:1,column:57483}}],line:1},"665":{loc:{start:{line:1,column:57418},end:{line:1,column:57427}},type:"binary-expr",locations:[{start:{line:1,column:57418},end:{line:1,column:57424}},{start:{line:1,column:57426},end:{line:1,column:57427}}],line:1},"666":{loc:{start:{line:1,column:57437},end:{line:1,column:57483}},type:"cond-expr",locations:[{start:{line:1,column:57456},end:{line:1,column:57459}},{start:{line:1,column:57461},end:{line:1,column:57482}}],line:1},"667":{loc:{start:{line:1,column:57438},end:{line:1,column:57450}},type:"binary-expr",locations:[{start:{line:1,column:57438},end:{line:1,column:57447}},{start:{line:1,column:57449},end:{line:1,column:57450}}],line:1},"668":{loc:{start:{line:1,column:57549},end:{line:1,column:57588}},type:"cond-expr",locations:[{start:{line:1,column:57552},end:{line:1,column:57575}},{start:{line:1,column:57577},end:{line:1,column:57588}}],line:1},"669":{loc:{start:{line:1,column:57617},end:{line:1,column:57634}},type:"cond-expr",locations:[{start:{line:1,column:57623},end:{line:1,column:57624}},{start:{line:1,column:57625},end:{line:1,column:57634}}],line:1},"670":{loc:{start:{line:1,column:57625},end:{line:1,column:57634}},type:"cond-expr",locations:[{start:{line:1,column:57631},end:{line:1,column:57632}},{start:{line:1,column:57633},end:{line:1,column:57634}}],line:1},"671":{loc:{start:{line:1,column:57661},end:{line:1,column:57688}},type:"cond-expr",locations:[{start:{line:1,column:57673},end:{line:1,column:57674}},{start:{line:1,column:57675},end:{line:1,column:57688}}],line:1},"672":{loc:{start:{line:1,column:57675},end:{line:1,column:57688}},type:"cond-expr",locations:[{start:{line:1,column:57685},end:{line:1,column:57686}},{start:{line:1,column:57687},end:{line:1,column:57688}}],line:1},"673":{loc:{start:{line:1,column:57740},end:{line:1,column:57764}},type:"cond-expr",locations:[{start:{line:1,column:57751},end:{line:1,column:57762}},{start:{line:1,column:57763},end:{line:1,column:57764}}],line:1},"674":{loc:{start:{line:1,column:57751},end:{line:1,column:57762}},type:"cond-expr",locations:[{start:{line:1,column:57757},end:{line:1,column:57760}},{start:{line:1,column:57761},end:{line:1,column:57762}}],line:1},"675":{loc:{start:{line:1,column:58277},end:{line:1,column:58282}},type:"default-arg",locations:[{start:{line:1,column:58279},end:{line:1,column:58282}}],line:1},"676":{loc:{start:{line:1,column:58292},end:{line:1,column:58297}},type:"default-arg",locations:[{start:{line:1,column:58294},end:{line:1,column:58297}}],line:1},"677":{loc:{start:{line:1,column:58315},end:{line:1,column:58331}},type:"cond-expr",locations:[{start:{line:1,column:58328},end:{line:1,column:58329}},{start:{line:1,column:58330},end:{line:1,column:58331}}],line:1},"678":{loc:{start:{line:1,column:58334},end:{line:1,column:58350}},type:"cond-expr",locations:[{start:{line:1,column:58347},end:{line:1,column:58348}},{start:{line:1,column:58349},end:{line:1,column:58350}}],line:1},"679":{loc:{start:{line:1,column:58546},end:{line:1,column:58635}},type:"binary-expr",locations:[{start:{line:1,column:58546},end:{line:1,column:58547}},{start:{line:1,column:58549},end:{line:1,column:58576}},{start:{line:1,column:58579},end:{line:1,column:58634}}],line:1},"680":{loc:{start:{line:1,column:58761},end:{line:1,column:58826}},type:"cond-expr",locations:[{start:{line:1,column:58767},end:{line:1,column:58793}},{start:{line:1,column:58794},end:{line:1,column:58826}}],line:1},"681":{loc:{start:{line:1,column:59325},end:{line:1,column:59389}},type:"cond-expr",locations:[{start:{line:1,column:59341},end:{line:1,column:59356}},{start:{line:1,column:59357},end:{line:1,column:59389}}],line:1},"682":{loc:{start:{line:1,column:59325},end:{line:1,column:59340}},type:"binary-expr",locations:[{start:{line:1,column:59325},end:{line:1,column:59326}},{start:{line:1,column:59328},end:{line:1,column:59340}}],line:1},"683":{loc:{start:{line:1,column:59430},end:{line:1,column:59443}},type:"binary-expr",locations:[{start:{line:1,column:59430},end:{line:1,column:59439}},{start:{line:1,column:59441},end:{line:1,column:59443}}],line:1},"684":{loc:{start:{line:1,column:59500},end:{line:1,column:59544}},type:"binary-expr",locations:[{start:{line:1,column:59500},end:{line:1,column:59502}},{start:{line:1,column:59504},end:{line:1,column:59517}},{start:{line:1,column:59519},end:{line:1,column:59529}},{start:{line:1,column:59531},end:{line:1,column:59544}}],line:1},"685":{loc:{start:{line:1,column:59547},end:{line:1,column:59564}},type:"cond-expr",locations:[{start:{line:1,column:59549},end:{line:1,column:59555}},{start:{line:1,column:59556},end:{line:1,column:59564}}],line:1},"686":{loc:{start:{line:1,column:59567},end:{line:1,column:59584}},type:"cond-expr",locations:[{start:{line:1,column:59569},end:{line:1,column:59577}},{start:{line:1,column:59578},end:{line:1,column:59584}}],line:1},"687":{loc:{start:{line:1,column:59592},end:{line:1,column:59617}},type:"cond-expr",locations:[{start:{line:1,column:59594},end:{line:1,column:59600}},{start:{line:1,column:59601},end:{line:1,column:59617}}],line:1},"688":{loc:{start:{line:1,column:59624},end:{line:1,column:59649}},type:"cond-expr",locations:[{start:{line:1,column:59626},end:{line:1,column:59642}},{start:{line:1,column:59643},end:{line:1,column:59649}}],line:1},"689":{loc:{start:{line:1,column:59651},end:{line:1,column:59725}},type:"binary-expr",locations:[{start:{line:1,column:59651},end:{line:1,column:59652}},{start:{line:1,column:59655},end:{line:1,column:59724}}],line:1},"690":{loc:{start:{line:1,column:59665},end:{line:1,column:59724}},type:"binary-expr",locations:[{start:{line:1,column:59665},end:{line:1,column:59666}},{start:{line:1,column:59668},end:{line:1,column:59724}}],line:1},"691":{loc:{start:{line:1,column:59701},end:{line:1,column:59723}},type:"cond-expr",locations:[{start:{line:1,column:59713},end:{line:1,column:59721}},{start:{line:1,column:59722},end:{line:1,column:59723}}],line:1},"692":{loc:{start:{line:1,column:59732},end:{line:1,column:59755}},type:"binary-expr",locations:[{start:{line:1,column:59732},end:{line:1,column:59741}},{start:{line:1,column:59743},end:{line:1,column:59755}}],line:1},"693":{loc:{start:{line:1,column:60013},end:{line:1,column:60025}},type:"binary-expr",locations:[{start:{line:1,column:60013},end:{line:1,column:60014}},{start:{line:1,column:60016},end:{line:1,column:60025}}],line:1},"694":{loc:{start:{line:1,column:60073},end:{line:1,column:60092}},type:"binary-expr",locations:[{start:{line:1,column:60073},end:{line:1,column:60074}},{start:{line:1,column:60076},end:{line:1,column:60092}}],line:1},"695":{loc:{start:{line:1,column:60093},end:{line:1,column:60119}},type:"if",locations:[{start:{line:1,column:60093},end:{line:1,column:60119}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"696":{loc:{start:{line:1,column:60096},end:{line:1,column:60110}},type:"binary-expr",locations:[{start:{line:1,column:60096},end:{line:1,column:60100}},{start:{line:1,column:60102},end:{line:1,column:60110}}],line:1},"697":{loc:{start:{line:1,column:60136},end:{line:1,column:60261}},type:"if",locations:[{start:{line:1,column:60136},end:{line:1,column:60261}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"698":{loc:{start:{line:1,column:60139},end:{line:1,column:60254}},type:"binary-expr",locations:[{start:{line:1,column:60139},end:{line:1,column:60158}},{start:{line:1,column:60161},end:{line:1,column:60253}}],line:1},"699":{loc:{start:{line:1,column:60141},end:{line:1,column:60157}},type:"binary-expr",locations:[{start:{line:1,column:60141},end:{line:1,column:60151}},{start:{line:1,column:60153},end:{line:1,column:60157}}],line:1},"700":{loc:{start:{line:1,column:60161},end:{line:1,column:60241}},type:"binary-expr",locations:[{start:{line:1,column:60162},end:{line:1,column:60168}},{start:{line:1,column:60170},end:{line:1,column:60193}},{start:{line:1,column:60195},end:{line:1,column:60205}},{start:{line:1,column:60207},end:{line:1,column:60223}},{start:{line:1,column:60226},end:{line:1,column:60241}}],line:1},"701":{loc:{start:{line:1,column:60268},end:{line:1,column:60292}},type:"binary-expr",locations:[{start:{line:1,column:60268},end:{line:1,column:60276}},{start:{line:1,column:60278},end:{line:1,column:60292}}],line:1},"702":{loc:{start:{line:1,column:60638},end:{line:1,column:60692}},type:"cond-expr",locations:[{start:{line:1,column:60673},end:{line:1,column:60682}},{start:{line:1,column:60683},end:{line:1,column:60692}}],line:1},"703":{loc:{start:{line:1,column:60773},end:{line:1,column:60799}},type:"cond-expr",locations:[{start:{line:1,column:60784},end:{line:1,column:60796}},{start:{line:1,column:60797},end:{line:1,column:60799}}],line:1},"704":{loc:{start:{line:1,column:60807},end:{line:1,column:60826}},type:"cond-expr",locations:[{start:{line:1,column:60814},end:{line:1,column:60824}},{start:{line:1,column:60825},end:{line:1,column:60826}}],line:1},"705":{loc:{start:{line:1,column:61017},end:{line:1,column:61025}},type:"binary-expr",locations:[{start:{line:1,column:61017},end:{line:1,column:61018}},{start:{line:1,column:61020},end:{line:1,column:61025}}],line:1},"706":{loc:{start:{line:1,column:61136},end:{line:1,column:61176}},type:"cond-expr",locations:[{start:{line:1,column:61138},end:{line:1,column:61139}},{start:{line:1,column:61140},end:{line:1,column:61176}}],line:1},"707":{loc:{start:{line:1,column:61292},end:{line:1,column:61296}},type:"binary-expr",locations:[{start:{line:1,column:61292},end:{line:1,column:61293}},{start:{line:1,column:61295},end:{line:1,column:61296}}],line:1},"708":{loc:{start:{line:1,column:61355},end:{line:1,column:61381}},type:"cond-expr",locations:[{start:{line:1,column:61357},end:{line:1,column:61379}},{start:{line:1,column:61380},end:{line:1,column:61381}}],line:1},"709":{loc:{start:{line:1,column:61386},end:{line:1,column:61404}},type:"binary-expr",locations:[{start:{line:1,column:61386},end:{line:1,column:61391}},{start:{line:1,column:61394},end:{line:1,column:61403}}],line:1},"710":{loc:{start:{line:1,column:61405},end:{line:1,column:61484}},type:"binary-expr",locations:[{start:{line:1,column:61405},end:{line:1,column:61406}},{start:{line:1,column:61409},end:{line:1,column:61483}}],line:1},"711":{loc:{start:{line:1,column:61444},end:{line:1,column:61478}},type:"binary-expr",locations:[{start:{line:1,column:61444},end:{line:1,column:61449}},{start:{line:1,column:61451},end:{line:1,column:61471}},{start:{line:1,column:61474},end:{line:1,column:61477}}],line:1},"712":{loc:{start:{line:1,column:61491},end:{line:1,column:61504}},type:"cond-expr",locations:[{start:{line:1,column:61501},end:{line:1,column:61502}},{start:{line:1,column:61503},end:{line:1,column:61504}}],line:1},"713":{loc:{start:{line:1,column:61491},end:{line:1,column:61500}},type:"binary-expr",locations:[{start:{line:1,column:61491},end:{line:1,column:61496}},{start:{line:1,column:61498},end:{line:1,column:61500}}],line:1},"714":{loc:{start:{line:1,column:61529},end:{line:1,column:61855}},type:"if",locations:[{start:{line:1,column:61529},end:{line:1,column:61855}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"715":{loc:{start:{line:1,column:61532},end:{line:1,column:61593}},type:"cond-expr",locations:[{start:{line:1,column:61564},end:{line:1,column:61589}},{start:{line:1,column:61590},end:{line:1,column:61593}}],line:1},"716":{loc:{start:{line:1,column:61629},end:{line:1,column:61644}},type:"binary-expr",locations:[{start:{line:1,column:61629},end:{line:1,column:61634}},{start:{line:1,column:61637},end:{line:1,column:61643}}],line:1},"717":{loc:{start:{line:1,column:61767},end:{line:1,column:61854}},type:"binary-expr",locations:[{start:{line:1,column:61767},end:{line:1,column:61768}},{start:{line:1,column:61770},end:{line:1,column:61772}},{start:{line:1,column:61775},end:{line:1,column:61853}}],line:1},"718":{loc:{start:{line:1,column:61855},end:{line:1,column:61935}},type:"if",locations:[{start:{line:1,column:61855},end:{line:1,column:61935}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"719":{loc:{start:{line:1,column:62103},end:{line:1,column:62584}},type:"if",locations:[{start:{line:1,column:62103},end:{line:1,column:62584}},{start:{line:1,column:62506},end:{line:1,column:62584}}],line:1},"720":{loc:{start:{line:1,column:62123},end:{line:1,column:62160}},type:"cond-expr",locations:[{start:{line:1,column:62125},end:{line:1,column:62147}},{start:{line:1,column:62148},end:{line:1,column:62160}}],line:1},"721":{loc:{start:{line:1,column:62163},end:{line:1,column:62214}},type:"cond-expr",locations:[{start:{line:1,column:62187},end:{line:1,column:62200}},{start:{line:1,column:62201},end:{line:1,column:62214}}],line:1},"722":{loc:{start:{line:1,column:62217},end:{line:1,column:62303}},type:"cond-expr",locations:[{start:{line:1,column:62252},end:{line:1,column:62277}},{start:{line:1,column:62278},end:{line:1,column:62303}}],line:1},"723":{loc:{start:{line:1,column:62427},end:{line:1,column:62437}},type:"cond-expr",locations:[{start:{line:1,column:62429},end:{line:1,column:62430}},{start:{line:1,column:62431},end:{line:1,column:62437}}],line:1},"724":{loc:{start:{line:1,column:62708},end:{line:1,column:62776}},type:"binary-expr",locations:[{start:{line:1,column:62708},end:{line:1,column:62740}},{start:{line:1,column:62742},end:{line:1,column:62754}},{start:{line:1,column:62756},end:{line:1,column:62776}}],line:1},"725":{loc:{start:{line:1,column:63559},end:{line:1,column:63571}},type:"binary-expr",locations:[{start:{line:1,column:63559},end:{line:1,column:63560}},{start:{line:1,column:63562},end:{line:1,column:63565}},{start:{line:1,column:63567},end:{line:1,column:63571}}],line:1},"726":{loc:{start:{line:1,column:63772},end:{line:1,column:63778}},type:"binary-expr",locations:[{start:{line:1,column:63772},end:{line:1,column:63775}},{start:{line:1,column:63777},end:{line:1,column:63778}}],line:1},"727":{loc:{start:{line:1,column:63824},end:{line:1,column:63850}},type:"binary-expr",locations:[{start:{line:1,column:63824},end:{line:1,column:63846}},{start:{line:1,column:63848},end:{line:1,column:63850}}],line:1},"728":{loc:{start:{line:1,column:63970},end:{line:1,column:63978}},type:"binary-expr",locations:[{start:{line:1,column:63970},end:{line:1,column:63974}},{start:{line:1,column:63976},end:{line:1,column:63978}}],line:1},"729":{loc:{start:{line:1,column:63999},end:{line:1,column:64010}},type:"cond-expr",locations:[{start:{line:1,column:64001},end:{line:1,column:64007}},{start:{line:1,column:64008},end:{line:1,column:64010}}],line:1},"730":{loc:{start:{line:1,column:64287},end:{line:1,column:64308}},type:"binary-expr",locations:[{start:{line:1,column:64287},end:{line:1,column:64289}},{start:{line:1,column:64291},end:{line:1,column:64308}}],line:1},"731":{loc:{start:{line:1,column:64321},end:{line:1,column:64372}},type:"cond-expr",locations:[{start:{line:1,column:64323},end:{line:1,column:64347}},{start:{line:1,column:64348},end:{line:1,column:64372}}],line:1},"732":{loc:{start:{line:1,column:64380},end:{line:1,column:64423}},type:"cond-expr",locations:[{start:{line:1,column:64382},end:{line:1,column:64398}},{start:{line:1,column:64399},end:{line:1,column:64423}}],line:1},"733":{loc:{start:{line:1,column:64431},end:{line:1,column:64449}},type:"binary-expr",locations:[{start:{line:1,column:64431},end:{line:1,column:64439}},{start:{line:1,column:64441},end:{line:1,column:64449}}],line:1},"734":{loc:{start:{line:1,column:64450},end:{line:1,column:64545}},type:"binary-expr",locations:[{start:{line:1,column:64450},end:{line:1,column:64451}},{start:{line:1,column:64454},end:{line:1,column:64544}}],line:1},"735":{loc:{start:{line:1,column:64464},end:{line:1,column:64520}},type:"binary-expr",locations:[{start:{line:1,column:64464},end:{line:1,column:64465}},{start:{line:1,column:64467},end:{line:1,column:64520}}],line:1},"736":{loc:{start:{line:1,column:64500},end:{line:1,column:64519}},type:"cond-expr",locations:[{start:{line:1,column:64509},end:{line:1,column:64517}},{start:{line:1,column:64518},end:{line:1,column:64519}}],line:1},"737":{loc:{start:{line:1,column:64521},end:{line:1,column:64544}},type:"binary-expr",locations:[{start:{line:1,column:64521},end:{line:1,column:64522}},{start:{line:1,column:64525},end:{line:1,column:64543}}],line:1},"738":{loc:{start:{line:1,column:64669},end:{line:1,column:64716}},type:"binary-expr",locations:[{start:{line:1,column:64669},end:{line:1,column:64678}},{start:{line:1,column:64681},end:{line:1,column:64715}}],line:1},"739":{loc:{start:{line:1,column:64739},end:{line:1,column:64765}},type:"binary-expr",locations:[{start:{line:1,column:64739},end:{line:1,column:64751}},{start:{line:1,column:64754},end:{line:1,column:64764}}],line:1},"740":{loc:{start:{line:1,column:64778},end:{line:1,column:64790}},type:"binary-expr",locations:[{start:{line:1,column:64778},end:{line:1,column:64779}},{start:{line:1,column:64781},end:{line:1,column:64790}}],line:1},"741":{loc:{start:{line:1,column:64849},end:{line:1,column:65112}},type:"if",locations:[{start:{line:1,column:64849},end:{line:1,column:65112}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"742":{loc:{start:{line:1,column:64938},end:{line:1,column:64974}},type:"cond-expr",locations:[{start:{line:1,column:64951},end:{line:1,column:64952}},{start:{line:1,column:64953},end:{line:1,column:64974}}],line:1},"743":{loc:{start:{line:1,column:64986},end:{line:1,column:65023}},type:"cond-expr",locations:[{start:{line:1,column:64999},end:{line:1,column:65001}},{start:{line:1,column:65002},end:{line:1,column:65023}}],line:1},"744":{loc:{start:{line:1,column:65620},end:{line:1,column:65696}},type:"binary-expr",locations:[{start:{line:1,column:65620},end:{line:1,column:65633}},{start:{line:1,column:65635},end:{line:1,column:65662}},{start:{line:1,column:65664},end:{line:1,column:65696}}],line:1},"745":{loc:{start:{line:1,column:65887},end:{line:1,column:66284}},type:"cond-expr",locations:[{start:{line:1,column:65922},end:{line:1,column:66281}},{start:{line:1,column:66282},end:{line:1,column:66284}}],line:1},"746":{loc:{start:{line:1,column:65887},end:{line:1,column:65921}},type:"binary-expr",locations:[{start:{line:1,column:65887},end:{line:1,column:65902}},{start:{line:1,column:65904},end:{line:1,column:65921}}],line:1},"747":{loc:{start:{line:1,column:66248},end:{line:1,column:66270}},type:"binary-expr",locations:[{start:{line:1,column:66248},end:{line:1,column:66249}},{start:{line:1,column:66252},end:{line:1,column:66253}},{start:{line:1,column:66255},end:{line:1,column:66269}}],line:1},"748":{loc:{start:{line:1,column:66578},end:{line:1,column:66742}},type:"if",locations:[{start:{line:1,column:66578},end:{line:1,column:66742}},{start:{line:1,column:66616},end:{line:1,column:66742}}],line:1},"749":{loc:{start:{line:1,column:66632},end:{line:1,column:66694}},type:"if",locations:[{start:{line:1,column:66632},end:{line:1,column:66694}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"750":{loc:{start:{line:1,column:66652},end:{line:1,column:66661}},type:"default-arg",locations:[{start:{line:1,column:66654},end:{line:1,column:66661}}],line:1},"751":{loc:{start:{line:1,column:66937},end:{line:1,column:67143}},type:"if",locations:[{start:{line:1,column:66937},end:{line:1,column:67143}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"752":{loc:{start:{line:1,column:66940},end:{line:1,column:67018}},type:"binary-expr",locations:[{start:{line:1,column:66940},end:{line:1,column:66970}},{start:{line:1,column:66972},end:{line:1,column:67018}}],line:1},"753":{loc:{start:{line:1,column:68002},end:{line:1,column:68151}},type:"cond-expr",locations:[{start:{line:1,column:68104},end:{line:1,column:68105}},{start:{line:1,column:68106},end:{line:1,column:68151}}],line:1},"754":{loc:{start:{line:1,column:68002},end:{line:1,column:68103}},type:"binary-expr",locations:[{start:{line:1,column:68002},end:{line:1,column:68003}},{start:{line:1,column:68005},end:{line:1,column:68030}},{start:{line:1,column:68032},end:{line:1,column:68064}},{start:{line:1,column:68066},end:{line:1,column:68085}},{start:{line:1,column:68087},end:{line:1,column:68103}}],line:1},"755":{loc:{start:{line:1,column:68287},end:{line:1,column:68304}},type:"binary-expr",locations:[{start:{line:1,column:68287},end:{line:1,column:68288}},{start:{line:1,column:68290},end:{line:1,column:68304}}],line:1},"756":{loc:{start:{line:1,column:68307},end:{line:1,column:68327}},type:"cond-expr",locations:[{start:{line:1,column:68309},end:{line:1,column:68310}},{start:{line:1,column:68311},end:{line:1,column:68327}}],line:1},"757":{loc:{start:{line:1,column:68330},end:{line:1,column:68350}},type:"cond-expr",locations:[{start:{line:1,column:68332},end:{line:1,column:68333}},{start:{line:1,column:68334},end:{line:1,column:68350}}],line:1},"758":{loc:{start:{line:1,column:68647},end:{line:1,column:68718}},type:"binary-expr",locations:[{start:{line:1,column:68647},end:{line:1,column:68648}},{start:{line:1,column:68651},end:{line:1,column:68717}}],line:1},"759":{loc:{start:{line:1,column:68661},end:{line:1,column:68717}},type:"binary-expr",locations:[{start:{line:1,column:68661},end:{line:1,column:68662}},{start:{line:1,column:68664},end:{line:1,column:68717}}],line:1},"760":{loc:{start:{line:1,column:68697},end:{line:1,column:68716}},type:"cond-expr",locations:[{start:{line:1,column:68706},end:{line:1,column:68714}},{start:{line:1,column:68715},end:{line:1,column:68716}}],line:1},"761":{loc:{start:{line:1,column:68851},end:{line:1,column:68935}},type:"binary-expr",locations:[{start:{line:1,column:68851},end:{line:1,column:68859}},{start:{line:1,column:68861},end:{line:1,column:68870}},{start:{line:1,column:68872},end:{line:1,column:68903}},{start:{line:1,column:68905},end:{line:1,column:68917}},{start:{line:1,column:68920},end:{line:1,column:68934}}],line:1},"762":{loc:{start:{line:1,column:69007},end:{line:1,column:69041}},type:"cond-expr",locations:[{start:{line:1,column:69022},end:{line:1,column:69039}},{start:{line:1,column:69040},end:{line:1,column:69041}}],line:1},"763":{loc:{start:{line:1,column:69007},end:{line:1,column:69021}},type:"binary-expr",locations:[{start:{line:1,column:69007},end:{line:1,column:69010}},{start:{line:1,column:69012},end:{line:1,column:69021}}],line:1},"764":{loc:{start:{line:1,column:69100},end:{line:1,column:69117}},type:"binary-expr",locations:[{start:{line:1,column:69100},end:{line:1,column:69113}},{start:{line:1,column:69115},end:{line:1,column:69117}}],line:1},"765":{loc:{start:{line:1,column:69167},end:{line:1,column:69175}},type:"binary-expr",locations:[{start:{line:1,column:69167},end:{line:1,column:69171}},{start:{line:1,column:69173},end:{line:1,column:69175}}],line:1},"766":{loc:{start:{line:1,column:69237},end:{line:1,column:69364}},type:"if",locations:[{start:{line:1,column:69237},end:{line:1,column:69364}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"767":{loc:{start:{line:1,column:69285},end:{line:1,column:69363}},type:"if",locations:[{start:{line:1,column:69285},end:{line:1,column:69363}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"768":{loc:{start:{line:1,column:69364},end:{line:1,column:69379}},type:"if",locations:[{start:{line:1,column:69364},end:{line:1,column:69379}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"769":{loc:{start:{line:1,column:69439},end:{line:1,column:69518}},type:"binary-expr",locations:[{start:{line:1,column:69439},end:{line:1,column:69462}},{start:{line:1,column:69465},end:{line:1,column:69517}}],line:1},"770":{loc:{start:{line:1,column:69478},end:{line:1,column:69494}},type:"binary-expr",locations:[{start:{line:1,column:69478},end:{line:1,column:69491}},{start:{line:1,column:69493},end:{line:1,column:69494}}],line:1},"771":{loc:{start:{line:1,column:69495},end:{line:1,column:69516}},type:"binary-expr",locations:[{start:{line:1,column:69495},end:{line:1,column:69513}},{start:{line:1,column:69515},end:{line:1,column:69516}}],line:1},"772":{loc:{start:{line:1,column:69637},end:{line:1,column:69648}},type:"binary-expr",locations:[{start:{line:1,column:69637},end:{line:1,column:69645}},{start:{line:1,column:69647},end:{line:1,column:69648}}],line:1},"773":{loc:{start:{line:1,column:69649},end:{line:1,column:69665}},type:"binary-expr",locations:[{start:{line:1,column:69649},end:{line:1,column:69662}},{start:{line:1,column:69664},end:{line:1,column:69665}}],line:1},"774":{loc:{start:{line:1,column:69728},end:{line:1,column:69787}},type:"binary-expr",locations:[{start:{line:1,column:69728},end:{line:1,column:69758}},{start:{line:1,column:69761},end:{line:1,column:69786}}],line:1},"775":{loc:{start:{line:1,column:69913},end:{line:1,column:69974}},type:"binary-expr",locations:[{start:{line:1,column:69913},end:{line:1,column:69971}},{start:{line:1,column:69973},end:{line:1,column:69974}}],line:1},"776":{loc:{start:{line:1,column:70340},end:{line:1,column:70344}},type:"default-arg",locations:[{start:{line:1,column:70342},end:{line:1,column:70344}}],line:1},"777":{loc:{start:{line:1,column:70456},end:{line:1,column:70479}},type:"binary-expr",locations:[{start:{line:1,column:70456},end:{line:1,column:70461}},{start:{line:1,column:70464},end:{line:1,column:70478}}],line:1},"778":{loc:{start:{line:1,column:70609},end:{line:1,column:70649}},type:"binary-expr",locations:[{start:{line:1,column:70609},end:{line:1,column:70630}},{start:{line:1,column:70633},end:{line:1,column:70648}}],line:1},"779":{loc:{start:{line:1,column:70985},end:{line:1,column:71017}},type:"cond-expr",locations:[{start:{line:1,column:70991},end:{line:1,column:70992}},{start:{line:1,column:70993},end:{line:1,column:71017}}],line:1},"780":{loc:{start:{line:1,column:71020},end:{line:1,column:71065}},type:"binary-expr",locations:[{start:{line:1,column:71020},end:{line:1,column:71050}},{start:{line:1,column:71052},end:{line:1,column:71053}},{start:{line:1,column:71055},end:{line:1,column:71065}}],line:1},"781":{loc:{start:{line:1,column:71085},end:{line:1,column:71109}},type:"binary-expr",locations:[{start:{line:1,column:71085},end:{line:1,column:71088}},{start:{line:1,column:71090},end:{line:1,column:71109}}],line:1},"782":{loc:{start:{line:1,column:71144},end:{line:1,column:71150}},type:"cond-expr",locations:[{start:{line:1,column:71146},end:{line:1,column:71147}},{start:{line:1,column:71148},end:{line:1,column:71150}}],line:1},"783":{loc:{start:{line:1,column:71151},end:{line:1,column:71184}},type:"if",locations:[{start:{line:1,column:71151},end:{line:1,column:71184}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"784":{loc:{start:{line:1,column:71154},end:{line:1,column:71163}},type:"binary-expr",locations:[{start:{line:1,column:71154},end:{line:1,column:71157}},{start:{line:1,column:71159},end:{line:1,column:71163}}],line:1},"785":{loc:{start:{line:1,column:71259},end:{line:1,column:71332}},type:"cond-expr",locations:[{start:{line:1,column:71264},end:{line:1,column:71280}},{start:{line:1,column:71281},end:{line:1,column:71332}}],line:1},"786":{loc:{start:{line:1,column:71259},end:{line:1,column:71263}},type:"binary-expr",locations:[{start:{line:1,column:71259},end:{line:1,column:71260}},{start:{line:1,column:71262},end:{line:1,column:71263}}],line:1},"787":{loc:{start:{line:1,column:71300},end:{line:1,column:71329}},type:"cond-expr",locations:[{start:{line:1,column:71302},end:{line:1,column:71324}},{start:{line:1,column:71325},end:{line:1,column:71329}}],line:1},"788":{loc:{start:{line:1,column:71340},end:{line:1,column:71361}},type:"binary-expr",locations:[{start:{line:1,column:71340},end:{line:1,column:71348}},{start:{line:1,column:71350},end:{line:1,column:71358}},{start:{line:1,column:71360},end:{line:1,column:71361}}],line:1},"789":{loc:{start:{line:1,column:71369},end:{line:1,column:71395}},type:"binary-expr",locations:[{start:{line:1,column:71369},end:{line:1,column:71372}},{start:{line:1,column:71374},end:{line:1,column:71395}}],line:1},"790":{loc:{start:{line:1,column:71396},end:{line:1,column:71427}},type:"binary-expr",locations:[{start:{line:1,column:71396},end:{line:1,column:71397}},{start:{line:1,column:71400},end:{line:1,column:71426}}],line:1},"791":{loc:{start:{line:1,column:71428},end:{line:1,column:71499}},type:"binary-expr",locations:[{start:{line:1,column:71428},end:{line:1,column:71429}},{start:{line:1,column:71432},end:{line:1,column:71498}}],line:1},"792":{loc:{start:{line:1,column:71442},end:{line:1,column:71498}},type:"binary-expr",locations:[{start:{line:1,column:71442},end:{line:1,column:71443}},{start:{line:1,column:71445},end:{line:1,column:71498}}],line:1},"793":{loc:{start:{line:1,column:71478},end:{line:1,column:71497}},type:"cond-expr",locations:[{start:{line:1,column:71487},end:{line:1,column:71495}},{start:{line:1,column:71496},end:{line:1,column:71497}}],line:1},"794":{loc:{start:{line:1,column:71500},end:{line:1,column:71530}},type:"binary-expr",locations:[{start:{line:1,column:71500},end:{line:1,column:71501}},{start:{line:1,column:71503},end:{line:1,column:71530}}],line:1},"795":{loc:{start:{line:1,column:71590},end:{line:1,column:71625}},type:"binary-expr",locations:[{start:{line:1,column:71590},end:{line:1,column:71599}},{start:{line:1,column:71601},end:{line:1,column:71622}},{start:{line:1,column:71624},end:{line:1,column:71625}}],line:1},"796":{loc:{start:{line:1,column:71628},end:{line:1,column:71638}},type:"binary-expr",locations:[{start:{line:1,column:71628},end:{line:1,column:71634}},{start:{line:1,column:71636},end:{line:1,column:71638}}],line:1},"797":{loc:{start:{line:1,column:71639},end:{line:1,column:71661}},type:"if",locations:[{start:{line:1,column:71639},end:{line:1,column:71661}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"798":{loc:{start:{line:1,column:72285},end:{line:1,column:72612}},type:"if",locations:[{start:{line:1,column:72285},end:{line:1,column:72612}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"799":{loc:{start:{line:1,column:72288},end:{line:1,column:72322}},type:"binary-expr",locations:[{start:{line:1,column:72288},end:{line:1,column:72303}},{start:{line:1,column:72305},end:{line:1,column:72322}}],line:1},"800":{loc:{start:{line:1,column:72960},end:{line:1,column:72977}},type:"binary-expr",locations:[{start:{line:1,column:72960},end:{line:1,column:72973}},{start:{line:1,column:72975},end:{line:1,column:72977}}],line:1},"801":{loc:{start:{line:1,column:73029},end:{line:1,column:73037}},type:"binary-expr",locations:[{start:{line:1,column:73029},end:{line:1,column:73033}},{start:{line:1,column:73035},end:{line:1,column:73037}}],line:1},"802":{loc:{start:{line:1,column:73350},end:{line:1,column:73433}},type:"binary-expr",locations:[{start:{line:1,column:73350},end:{line:1,column:73359}},{start:{line:1,column:73361},end:{line:1,column:73392}},{start:{line:1,column:73395},end:{line:1,column:73432}}],line:1},"803":{loc:{start:{line:1,column:73395},end:{line:1,column:73413}},type:"binary-expr",locations:[{start:{line:1,column:73395},end:{line:1,column:73402}},{start:{line:1,column:73405},end:{line:1,column:73412}}],line:1},"804":{loc:{start:{line:1,column:73414},end:{line:1,column:73432}},type:"binary-expr",locations:[{start:{line:1,column:73414},end:{line:1,column:73421}},{start:{line:1,column:73424},end:{line:1,column:73431}}],line:1},"805":{loc:{start:{line:1,column:73568},end:{line:1,column:73613}},type:"cond-expr",locations:[{start:{line:1,column:73587},end:{line:1,column:73611}},{start:{line:1,column:73612},end:{line:1,column:73613}}],line:1},"806":{loc:{start:{line:1,column:74024},end:{line:1,column:74101}},type:"cond-expr",locations:[{start:{line:1,column:74047},end:{line:1,column:74099}},{start:{line:1,column:74100},end:{line:1,column:74101}}],line:1},"807":{loc:{start:{line:1,column:74106},end:{line:1,column:74157}},type:"binary-expr",locations:[{start:{line:1,column:74106},end:{line:1,column:74107}},{start:{line:1,column:74110},end:{line:1,column:74156}}],line:1},"808":{loc:{start:{line:1,column:74110},end:{line:1,column:74131}},type:"binary-expr",locations:[{start:{line:1,column:74110},end:{line:1,column:74124}},{start:{line:1,column:74127},end:{line:1,column:74130}}],line:1},"809":{loc:{start:{line:1,column:74132},end:{line:1,column:74156}},type:"binary-expr",locations:[{start:{line:1,column:74132},end:{line:1,column:74147}},{start:{line:1,column:74150},end:{line:1,column:74155}}],line:1},"810":{loc:{start:{line:1,column:74266},end:{line:1,column:74285}},type:"cond-expr",locations:[{start:{line:1,column:74275},end:{line:1,column:74283}},{start:{line:1,column:74284},end:{line:1,column:74285}}],line:1},"811":{loc:{start:{line:1,column:74397},end:{line:1,column:74462}},type:"binary-expr",locations:[{start:{line:1,column:74397},end:{line:1,column:74424}},{start:{line:1,column:74426},end:{line:1,column:74457}},{start:{line:1,column:74459},end:{line:1,column:74462}}],line:1},"812":{loc:{start:{line:1,column:74495},end:{line:1,column:74577}},type:"cond-expr",locations:[{start:{line:1,column:74527},end:{line:1,column:74575}},{start:{line:1,column:74576},end:{line:1,column:74577}}],line:1},"813":{loc:{start:{line:1,column:74530},end:{line:1,column:74574}},type:"binary-expr",locations:[{start:{line:1,column:74530},end:{line:1,column:74571}},{start:{line:1,column:74573},end:{line:1,column:74574}}],line:1},"814":{loc:{start:{line:1,column:75198},end:{line:1,column:75208}},type:"binary-expr",locations:[{start:{line:1,column:75198},end:{line:1,column:75204}},{start:{line:1,column:75206},end:{line:1,column:75208}}],line:1},"815":{loc:{start:{line:1,column:75232},end:{line:1,column:75434}},type:"if",locations:[{start:{line:1,column:75232},end:{line:1,column:75434}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"816":{loc:{start:{line:1,column:75303},end:{line:1,column:75343}},type:"binary-expr",locations:[{start:{line:1,column:75303},end:{line:1,column:75324}},{start:{line:1,column:75327},end:{line:1,column:75342}}],line:1},"817":{loc:{start:{line:1,column:75607},end:{line:1,column:75626}},type:"cond-expr",locations:[{start:{line:1,column:75616},end:{line:1,column:75624}},{start:{line:1,column:75625},end:{line:1,column:75626}}],line:1},"818":{loc:{start:{line:1,column:75682},end:{line:1,column:75697}},type:"cond-expr",locations:[{start:{line:1,column:75684},end:{line:1,column:75693}},{start:{line:1,column:75694},end:{line:1,column:75697}}],line:1},"819":{loc:{start:{line:1,column:75700},end:{line:1,column:75715}},type:"cond-expr",locations:[{start:{line:1,column:75702},end:{line:1,column:75711}},{start:{line:1,column:75712},end:{line:1,column:75715}}],line:1},"820":{loc:{start:{line:1,column:75746},end:{line:1,column:75764}},type:"binary-expr",locations:[{start:{line:1,column:75746},end:{line:1,column:75754}},{start:{line:1,column:75756},end:{line:1,column:75764}}],line:1},"821":{loc:{start:{line:1,column:76087},end:{line:1,column:76113}},type:"binary-expr",locations:[{start:{line:1,column:76087},end:{line:1,column:76109}},{start:{line:1,column:76111},end:{line:1,column:76113}}],line:1},"822":{loc:{start:{line:1,column:76221},end:{line:1,column:76229}},type:"binary-expr",locations:[{start:{line:1,column:76221},end:{line:1,column:76225}},{start:{line:1,column:76227},end:{line:1,column:76229}}],line:1},"823":{loc:{start:{line:1,column:76293},end:{line:1,column:76297}},type:"default-arg",locations:[{start:{line:1,column:76295},end:{line:1,column:76297}}],line:1},"824":{loc:{start:{line:1,column:76362},end:{line:1,column:76811}},type:"if",locations:[{start:{line:1,column:76362},end:{line:1,column:76811}},{start:{line:1,column:76740},end:{line:1,column:76811}}],line:1},"825":{loc:{start:{line:1,column:76401},end:{line:1,column:76424}},type:"binary-expr",locations:[{start:{line:1,column:76401},end:{line:1,column:76406}},{start:{line:1,column:76409},end:{line:1,column:76423}}],line:1},"826":{loc:{start:{line:1,column:76448},end:{line:1,column:76491}},type:"binary-expr",locations:[{start:{line:1,column:76448},end:{line:1,column:76471}},{start:{line:1,column:76473},end:{line:1,column:76491}}],line:1},"827":{loc:{start:{line:1,column:76740},end:{line:1,column:76810}},type:"binary-expr",locations:[{start:{line:1,column:76740},end:{line:1,column:76763}},{start:{line:1,column:76766},end:{line:1,column:76809}}],line:1},"828":{loc:{start:{line:1,column:76883},end:{line:1,column:76976}},type:"binary-expr",locations:[{start:{line:1,column:76883},end:{line:1,column:76907}},{start:{line:1,column:76909},end:{line:1,column:76910}},{start:{line:1,column:76913},end:{line:1,column:76975}}],line:1},"829":{loc:{start:{line:1,column:77246},end:{line:1,column:77278}},type:"cond-expr",locations:[{start:{line:1,column:77252},end:{line:1,column:77253}},{start:{line:1,column:77254},end:{line:1,column:77278}}],line:1},"830":{loc:{start:{line:1,column:77281},end:{line:1,column:77326}},type:"binary-expr",locations:[{start:{line:1,column:77281},end:{line:1,column:77311}},{start:{line:1,column:77313},end:{line:1,column:77314}},{start:{line:1,column:77316},end:{line:1,column:77326}}],line:1},"831":{loc:{start:{line:1,column:77329},end:{line:1,column:77353}},type:"binary-expr",locations:[{start:{line:1,column:77329},end:{line:1,column:77332}},{start:{line:1,column:77334},end:{line:1,column:77353}}],line:1},"832":{loc:{start:{line:1,column:77410},end:{line:1,column:77416}},type:"cond-expr",locations:[{start:{line:1,column:77412},end:{line:1,column:77413}},{start:{line:1,column:77414},end:{line:1,column:77416}}],line:1},"833":{loc:{start:{line:1,column:77468},end:{line:1,column:77541}},type:"cond-expr",locations:[{start:{line:1,column:77473},end:{line:1,column:77489}},{start:{line:1,column:77490},end:{line:1,column:77541}}],line:1},"834":{loc:{start:{line:1,column:77468},end:{line:1,column:77472}},type:"binary-expr",locations:[{start:{line:1,column:77468},end:{line:1,column:77469}},{start:{line:1,column:77471},end:{line:1,column:77472}}],line:1},"835":{loc:{start:{line:1,column:77509},end:{line:1,column:77538}},type:"cond-expr",locations:[{start:{line:1,column:77511},end:{line:1,column:77533}},{start:{line:1,column:77534},end:{line:1,column:77538}}],line:1},"836":{loc:{start:{line:1,column:77549},end:{line:1,column:77570}},type:"binary-expr",locations:[{start:{line:1,column:77549},end:{line:1,column:77557}},{start:{line:1,column:77559},end:{line:1,column:77567}},{start:{line:1,column:77569},end:{line:1,column:77570}}],line:1},"837":{loc:{start:{line:1,column:77578},end:{line:1,column:77604}},type:"binary-expr",locations:[{start:{line:1,column:77578},end:{line:1,column:77581}},{start:{line:1,column:77583},end:{line:1,column:77604}}],line:1},"838":{loc:{start:{line:1,column:77605},end:{line:1,column:77636}},type:"binary-expr",locations:[{start:{line:1,column:77605},end:{line:1,column:77606}},{start:{line:1,column:77609},end:{line:1,column:77635}}],line:1},"839":{loc:{start:{line:1,column:77637},end:{line:1,column:77708}},type:"binary-expr",locations:[{start:{line:1,column:77637},end:{line:1,column:77638}},{start:{line:1,column:77641},end:{line:1,column:77707}}],line:1},"840":{loc:{start:{line:1,column:77651},end:{line:1,column:77707}},type:"binary-expr",locations:[{start:{line:1,column:77651},end:{line:1,column:77652}},{start:{line:1,column:77654},end:{line:1,column:77707}}],line:1},"841":{loc:{start:{line:1,column:77687},end:{line:1,column:77706}},type:"cond-expr",locations:[{start:{line:1,column:77696},end:{line:1,column:77704}},{start:{line:1,column:77705},end:{line:1,column:77706}}],line:1},"842":{loc:{start:{line:1,column:77709},end:{line:1,column:77739}},type:"binary-expr",locations:[{start:{line:1,column:77709},end:{line:1,column:77710}},{start:{line:1,column:77712},end:{line:1,column:77739}}],line:1},"843":{loc:{start:{line:1,column:77818},end:{line:1,column:77828}},type:"binary-expr",locations:[{start:{line:1,column:77818},end:{line:1,column:77824}},{start:{line:1,column:77826},end:{line:1,column:77828}}],line:1},"844":{loc:{start:{line:1,column:77829},end:{line:1,column:77969}},type:"if",locations:[{start:{line:1,column:77829},end:{line:1,column:77969}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"845":{loc:{start:{line:1,column:77962},end:{line:1,column:77968}},type:"binary-expr",locations:[{start:{line:1,column:77962},end:{line:1,column:77965}},{start:{line:1,column:77967},end:{line:1,column:77968}}],line:1},"846":{loc:{start:{line:1,column:77987},end:{line:1,column:78022}},type:"binary-expr",locations:[{start:{line:1,column:77987},end:{line:1,column:77996}},{start:{line:1,column:77998},end:{line:1,column:78019}},{start:{line:1,column:78021},end:{line:1,column:78022}}],line:1},"847":{loc:{start:{line:1,column:78023},end:{line:1,column:78045}},type:"if",locations:[{start:{line:1,column:78023},end:{line:1,column:78045}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"848":{loc:{start:{line:1,column:78604},end:{line:1,column:78609}},type:"binary-expr",locations:[{start:{line:1,column:78604},end:{line:1,column:78605}},{start:{line:1,column:78607},end:{line:1,column:78609}}],line:1},"849":{loc:{start:{line:1,column:78859},end:{line:1,column:78919}},type:"cond-expr",locations:[{start:{line:1,column:78888},end:{line:1,column:78914}},{start:{line:1,column:78915},end:{line:1,column:78919}}],line:1},"850":{loc:{start:{line:1,column:78859},end:{line:1,column:78887}},type:"binary-expr",locations:[{start:{line:1,column:78859},end:{line:1,column:78868}},{start:{line:1,column:78870},end:{line:1,column:78887}}],line:1},"851":{loc:{start:{line:1,column:78920},end:{line:1,column:79360}},type:"if",locations:[{start:{line:1,column:78920},end:{line:1,column:79360}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"852":{loc:{start:{line:1,column:78923},end:{line:1,column:78958}},type:"binary-expr",locations:[{start:{line:1,column:78923},end:{line:1,column:78924}},{start:{line:1,column:78926},end:{line:1,column:78936}},{start:{line:1,column:78938},end:{line:1,column:78945}},{start:{line:1,column:78947},end:{line:1,column:78948}},{start:{line:1,column:78950},end:{line:1,column:78958}}],line:1},"853":{loc:{start:{line:1,column:78966},end:{line:1,column:78988}},type:"cond-expr",locations:[{start:{line:1,column:78983},end:{line:1,column:78985}},{start:{line:1,column:78986},end:{line:1,column:78988}}],line:1},"854":{loc:{start:{line:1,column:78989},end:{line:1,column:79359}},type:"if",locations:[{start:{line:1,column:78989},end:{line:1,column:79359}},{start:{line:1,column:79140},end:{line:1,column:79359}}],line:1},"855":{loc:{start:{line:1,column:78995},end:{line:1,column:79135}},type:"if",locations:[{start:{line:1,column:78995},end:{line:1,column:79135}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"856":{loc:{start:{line:1,column:79029},end:{line:1,column:79073}},type:"binary-expr",locations:[{start:{line:1,column:79029},end:{line:1,column:79058}},{start:{line:1,column:79060},end:{line:1,column:79073}}],line:1},"857":{loc:{start:{line:1,column:79074},end:{line:1,column:79134}},type:"if",locations:[{start:{line:1,column:79074},end:{line:1,column:79134}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"858":{loc:{start:{line:1,column:79156},end:{line:1,column:79350}},type:"if",locations:[{start:{line:1,column:79156},end:{line:1,column:79350}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"859":{loc:{start:{line:1,column:79573},end:{line:1,column:79589}},type:"binary-expr",locations:[{start:{line:1,column:79573},end:{line:1,column:79579}},{start:{line:1,column:79581},end:{line:1,column:79589}}],line:1},"860":{loc:{start:{line:1,column:79682},end:{line:1,column:79703}},type:"cond-expr",locations:[{start:{line:1,column:79684},end:{line:1,column:79701}},{start:{line:1,column:79702},end:{line:1,column:79703}}],line:1},"861":{loc:{start:{line:1,column:79706},end:{line:1,column:79727}},type:"cond-expr",locations:[{start:{line:1,column:79708},end:{line:1,column:79725}},{start:{line:1,column:79726},end:{line:1,column:79727}}],line:1},"862":{loc:{start:{line:1,column:79813},end:{line:1,column:79958}},type:"binary-expr",locations:[{start:{line:1,column:79813},end:{line:1,column:79815}},{start:{line:1,column:79817},end:{line:1,column:79836}},{start:{line:1,column:79838},end:{line:1,column:79958}}],line:1},"863":{loc:{start:{line:1,column:79863},end:{line:1,column:79953}},type:"binary-expr",locations:[{start:{line:1,column:79863},end:{line:1,column:79865}},{start:{line:1,column:79867},end:{line:1,column:79887}},{start:{line:1,column:79889},end:{line:1,column:79909}},{start:{line:1,column:79911},end:{line:1,column:79953}}],line:1},"864":{loc:{start:{line:1,column:80108},end:{line:1,column:80161}},type:"binary-expr",locations:[{start:{line:1,column:80108},end:{line:1,column:80117}},{start:{line:1,column:80119},end:{line:1,column:80161}}],line:1},"865":{loc:{start:{line:1,column:80297},end:{line:1,column:80313}},type:"if",locations:[{start:{line:1,column:80297},end:{line:1,column:80313}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"866":{loc:{start:{line:1,column:80300},end:{line:1,column:80305}},type:"binary-expr",locations:[{start:{line:1,column:80300},end:{line:1,column:80301}},{start:{line:1,column:80303},end:{line:1,column:80305}}],line:1},"867":{loc:{start:{line:1,column:80339},end:{line:1,column:80380}},type:"if",locations:[{start:{line:1,column:80339},end:{line:1,column:80380}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"868":{loc:{start:{line:1,column:80342},end:{line:1,column:80372}},type:"binary-expr",locations:[{start:{line:1,column:80342},end:{line:1,column:80368}},{start:{line:1,column:80370},end:{line:1,column:80372}}],line:1},"869":{loc:{start:{line:1,column:80344},end:{line:1,column:80367}},type:"binary-expr",locations:[{start:{line:1,column:80344},end:{line:1,column:80347}},{start:{line:1,column:80349},end:{line:1,column:80367}}],line:1},"870":{loc:{start:{line:1,column:80393},end:{line:1,column:80491}},type:"cond-expr",locations:[{start:{line:1,column:80398},end:{line:1,column:80440}},{start:{line:1,column:80442},end:{line:1,column:80491}}],line:1},"871":{loc:{start:{line:1,column:80442},end:{line:1,column:80491}},type:"binary-expr",locations:[{start:{line:1,column:80442},end:{line:1,column:80447}},{start:{line:1,column:80449},end:{line:1,column:80491}}],line:1},"872":{loc:{start:{line:1,column:80544},end:{line:1,column:80610}},type:"cond-expr",locations:[{start:{line:1,column:80568},end:{line:1,column:80570}},{start:{line:1,column:80571},end:{line:1,column:80610}}],line:1},"873":{loc:{start:{line:1,column:80544},end:{line:1,column:80567}},type:"binary-expr",locations:[{start:{line:1,column:80544},end:{line:1,column:80546}},{start:{line:1,column:80548},end:{line:1,column:80567}}],line:1},"874":{loc:{start:{line:1,column:80571},end:{line:1,column:80610}},type:"cond-expr",locations:[{start:{line:1,column:80583},end:{line:1,column:80594}},{start:{line:1,column:80595},end:{line:1,column:80610}}],line:1},"875":{loc:{start:{line:1,column:80571},end:{line:1,column:80582}},type:"binary-expr",locations:[{start:{line:1,column:80571},end:{line:1,column:80578}},{start:{line:1,column:80580},end:{line:1,column:80582}}],line:1},"876":{loc:{start:{line:1,column:80645},end:{line:1,column:80674}},type:"cond-expr",locations:[{start:{line:1,column:80653},end:{line:1,column:80663}},{start:{line:1,column:80664},end:{line:1,column:80674}}],line:1},"877":{loc:{start:{line:1,column:80706},end:{line:1,column:80796}},type:"binary-expr",locations:[{start:{line:1,column:80706},end:{line:1,column:80710}},{start:{line:1,column:80712},end:{line:1,column:80724}},{start:{line:1,column:80727},end:{line:1,column:80795}}],line:1},"878":{loc:{start:{line:1,column:80772},end:{line:1,column:80795}},type:"binary-expr",locations:[{start:{line:1,column:80772},end:{line:1,column:80773}},{start:{line:1,column:80775},end:{line:1,column:80795}}],line:1},"879":{loc:{start:{line:1,column:80799},end:{line:1,column:80809}},type:"cond-expr",locations:[{start:{line:1,column:80805},end:{line:1,column:80807}},{start:{line:1,column:80808},end:{line:1,column:80809}}],line:1},"880":{loc:{start:{line:1,column:80799},end:{line:1,column:80804}},type:"binary-expr",locations:[{start:{line:1,column:80799},end:{line:1,column:80800}},{start:{line:1,column:80802},end:{line:1,column:80804}}],line:1},"881":{loc:{start:{line:1,column:80884},end:{line:1,column:80895}},type:"binary-expr",locations:[{start:{line:1,column:80884},end:{line:1,column:80890}},{start:{line:1,column:80892},end:{line:1,column:80895}}],line:1},"882":{loc:{start:{line:1,column:80898},end:{line:1,column:80920}},type:"binary-expr",locations:[{start:{line:1,column:80898},end:{line:1,column:80916}},{start:{line:1,column:80918},end:{line:1,column:80920}}],line:1},"883":{loc:{start:{line:1,column:80923},end:{line:1,column:80965}},type:"cond-expr",locations:[{start:{line:1,column:80935},end:{line:1,column:80948}},{start:{line:1,column:80949},end:{line:1,column:80965}}],line:1},"884":{loc:{start:{line:1,column:80978},end:{line:1,column:81130}},type:"cond-expr",locations:[{start:{line:1,column:80988},end:{line:1,column:81126}},{start:{line:1,column:81128},end:{line:1,column:81130}}],line:1},"885":{loc:{start:{line:1,column:81062},end:{line:1,column:81122}},type:"binary-expr",locations:[{start:{line:1,column:81062},end:{line:1,column:81063}},{start:{line:1,column:81065},end:{line:1,column:81072}},{start:{line:1,column:81074},end:{line:1,column:81122}}],line:1},"886":{loc:{start:{line:1,column:81165},end:{line:1,column:81177}},type:"binary-expr",locations:[{start:{line:1,column:81165},end:{line:1,column:81171}},{start:{line:1,column:81173},end:{line:1,column:81177}}],line:1},"887":{loc:{start:{line:1,column:81180},end:{line:1,column:81202}},type:"binary-expr",locations:[{start:{line:1,column:81180},end:{line:1,column:81198}},{start:{line:1,column:81200},end:{line:1,column:81202}}],line:1},"888":{loc:{start:{line:1,column:81205},end:{line:1,column:81247}},type:"cond-expr",locations:[{start:{line:1,column:81217},end:{line:1,column:81230}},{start:{line:1,column:81231},end:{line:1,column:81247}}],line:1},"889":{loc:{start:{line:1,column:81248},end:{line:1,column:81392}},type:"if",locations:[{start:{line:1,column:81248},end:{line:1,column:81392}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"890":{loc:{start:{line:1,column:81433},end:{line:1,column:81445}},type:"binary-expr",locations:[{start:{line:1,column:81433},end:{line:1,column:81439}},{start:{line:1,column:81441},end:{line:1,column:81445}}],line:1},"891":{loc:{start:{line:1,column:81448},end:{line:1,column:81470}},type:"binary-expr",locations:[{start:{line:1,column:81448},end:{line:1,column:81466}},{start:{line:1,column:81468},end:{line:1,column:81470}}],line:1},"892":{loc:{start:{line:1,column:81526},end:{line:1,column:81538}},type:"binary-expr",locations:[{start:{line:1,column:81526},end:{line:1,column:81532}},{start:{line:1,column:81534},end:{line:1,column:81538}}],line:1},"893":{loc:{start:{line:1,column:81541},end:{line:1,column:81563}},type:"binary-expr",locations:[{start:{line:1,column:81541},end:{line:1,column:81559}},{start:{line:1,column:81561},end:{line:1,column:81563}}],line:1},"894":{loc:{start:{line:1,column:81836},end:{line:1,column:81874}},type:"binary-expr",locations:[{start:{line:1,column:81836},end:{line:1,column:81858}},{start:{line:1,column:81860},end:{line:1,column:81874}}],line:1},"895":{loc:{start:{line:1,column:81921},end:{line:1,column:81926}},type:"cond-expr",locations:[{start:{line:1,column:81923},end:{line:1,column:81924}},{start:{line:1,column:81925},end:{line:1,column:81926}}],line:1},"896":{loc:{start:{line:1,column:81929},end:{line:1,column:81934}},type:"cond-expr",locations:[{start:{line:1,column:81931},end:{line:1,column:81932}},{start:{line:1,column:81933},end:{line:1,column:81934}}],line:1},"897":{loc:{start:{line:1,column:81942},end:{line:1,column:81995}},type:"cond-expr",locations:[{start:{line:1,column:81962},end:{line:1,column:81977}},{start:{line:1,column:81978},end:{line:1,column:81995}}],line:1},"898":{loc:{start:{line:1,column:82045},end:{line:1,column:82050}},type:"binary-expr",locations:[{start:{line:1,column:82045},end:{line:1,column:82046}},{start:{line:1,column:82048},end:{line:1,column:82050}}],line:1},"899":{loc:{start:{line:1,column:82115},end:{line:1,column:82118}},type:"default-arg",locations:[{start:{line:1,column:82117},end:{line:1,column:82118}}],line:1},"900":{loc:{start:{line:1,column:82201},end:{line:1,column:82207}},type:"binary-expr",locations:[{start:{line:1,column:82201},end:{line:1,column:82202}},{start:{line:1,column:82204},end:{line:1,column:82207}}],line:1},"901":{loc:{start:{line:1,column:82308},end:{line:1,column:82340}},type:"if",locations:[{start:{line:1,column:82308},end:{line:1,column:82340}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"902":{loc:{start:{line:1,column:82311},end:{line:1,column:82330}},type:"binary-expr",locations:[{start:{line:1,column:82311},end:{line:1,column:82313}},{start:{line:1,column:82315},end:{line:1,column:82330}}],line:1},"903":{loc:{start:{line:1,column:82346},end:{line:1,column:82393}},type:"binary-expr",locations:[{start:{line:1,column:82346},end:{line:1,column:82350}},{start:{line:1,column:82353},end:{line:1,column:82392}}],line:1},"904":{loc:{start:{line:1,column:82567},end:{line:1,column:82592}},type:"binary-expr",locations:[{start:{line:1,column:82567},end:{line:1,column:82568}},{start:{line:1,column:82570},end:{line:1,column:82592}}],line:1},"905":{loc:{start:{line:1,column:82593},end:{line:1,column:82700}},type:"cond-expr",locations:[{start:{line:1,column:82607},end:{line:1,column:82651}},{start:{line:1,column:82654},end:{line:1,column:82699}}],line:1},"906":{loc:{start:{line:1,column:82615},end:{line:1,column:82640}},type:"cond-expr",locations:[{start:{line:1,column:82617},end:{line:1,column:82620}},{start:{line:1,column:82621},end:{line:1,column:82640}}],line:1},"907":{loc:{start:{line:1,column:82621},end:{line:1,column:82640}},type:"binary-expr",locations:[{start:{line:1,column:82621},end:{line:1,column:82622}},{start:{line:1,column:82624},end:{line:1,column:82640}}],line:1},"908":{loc:{start:{line:1,column:82673},end:{line:1,column:82699}},type:"cond-expr",locations:[{start:{line:1,column:82675},end:{line:1,column:82678}},{start:{line:1,column:82679},end:{line:1,column:82699}}],line:1},"909":{loc:{start:{line:1,column:82679},end:{line:1,column:82699}},type:"binary-expr",locations:[{start:{line:1,column:82679},end:{line:1,column:82680}},{start:{line:1,column:82682},end:{line:1,column:82699}}],line:1},"910":{loc:{start:{line:1,column:83333},end:{line:1,column:83490}},type:"if",locations:[{start:{line:1,column:83333},end:{line:1,column:83490}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"911":{loc:{start:{line:1,column:83343},end:{line:1,column:83365}},type:"binary-expr",locations:[{start:{line:1,column:83343},end:{line:1,column:83349}},{start:{line:1,column:83352},end:{line:1,column:83364}}],line:1},"912":{loc:{start:{line:1,column:83372},end:{line:1,column:83400}},type:"binary-expr",locations:[{start:{line:1,column:83372},end:{line:1,column:83382}},{start:{line:1,column:83384},end:{line:1,column:83400}}],line:1},"913":{loc:{start:{line:1,column:83424},end:{line:1,column:83453}},type:"cond-expr",locations:[{start:{line:1,column:83437},end:{line:1,column:83445}},{start:{line:1,column:83446},end:{line:1,column:83453}}],line:1},"914":{loc:{start:{line:1,column:83490},end:{line:1,column:83524}},type:"binary-expr",locations:[{start:{line:1,column:83490},end:{line:1,column:83502}},{start:{line:1,column:83504},end:{line:1,column:83524}}],line:1},"915":{loc:{start:{line:1,column:83669},end:{line:1,column:83715}},type:"cond-expr",locations:[{start:{line:1,column:83682},end:{line:1,column:83698}},{start:{line:1,column:83699},end:{line:1,column:83715}}],line:1},"916":{loc:{start:{line:1,column:84008},end:{line:1,column:84043}},type:"cond-expr",locations:[{start:{line:1,column:84010},end:{line:1,column:84026}},{start:{line:1,column:84027},end:{line:1,column:84043}}],line:1},"917":{loc:{start:{line:1,column:84143},end:{line:1,column:84155}},type:"binary-expr",locations:[{start:{line:1,column:84143},end:{line:1,column:84150}},{start:{line:1,column:84152},end:{line:1,column:84155}}],line:1},"918":{loc:{start:{line:1,column:84156},end:{line:1,column:84169}},type:"binary-expr",locations:[{start:{line:1,column:84156},end:{line:1,column:84164}},{start:{line:1,column:84166},end:{line:1,column:84169}}],line:1},"919":{loc:{start:{line:1,column:84225},end:{line:1,column:84236}},type:"binary-expr",locations:[{start:{line:1,column:84225},end:{line:1,column:84226}},{start:{line:1,column:84228},end:{line:1,column:84236}}],line:1},"920":{loc:{start:{line:1,column:84239},end:{line:1,column:84243}},type:"binary-expr",locations:[{start:{line:1,column:84239},end:{line:1,column:84240}},{start:{line:1,column:84242},end:{line:1,column:84243}}],line:1},"921":{loc:{start:{line:1,column:84244},end:{line:1,column:84265}},type:"binary-expr",locations:[{start:{line:1,column:84244},end:{line:1,column:84254}},{start:{line:1,column:84256},end:{line:1,column:84265}}],line:1},"922":{loc:{start:{line:1,column:84273},end:{line:1,column:84290}},type:"binary-expr",locations:[{start:{line:1,column:84273},end:{line:1,column:84274}},{start:{line:1,column:84276},end:{line:1,column:84287}},{start:{line:1,column:84289},end:{line:1,column:84290}}],line:1},"923":{loc:{start:{line:1,column:84456},end:{line:1,column:84495}},type:"binary-expr",locations:[{start:{line:1,column:84456},end:{line:1,column:84466}},{start:{line:1,column:84468},end:{line:1,column:84495}}],line:1},"924":{loc:{start:{line:1,column:84498},end:{line:1,column:84523}},type:"binary-expr",locations:[{start:{line:1,column:84498},end:{line:1,column:84520}},{start:{line:1,column:84522},end:{line:1,column:84523}}],line:1},"925":{loc:{start:{line:1,column:84524},end:{line:1,column:84889}},type:"if",locations:[{start:{line:1,column:84524},end:{line:1,column:84889}},{start:{line:1,column:84718},end:{line:1,column:84889}}],line:1},"926":{loc:{start:{line:1,column:84555},end:{line:1,column:84571}},type:"binary-expr",locations:[{start:{line:1,column:84555},end:{line:1,column:84561}},{start:{line:1,column:84563},end:{line:1,column:84571}}],line:1},"927":{loc:{start:{line:1,column:84572},end:{line:1,column:84596}},type:"binary-expr",locations:[{start:{line:1,column:84572},end:{line:1,column:84583}},{start:{line:1,column:84586},end:{line:1,column:84595}}],line:1},"928":{loc:{start:{line:1,column:84597},end:{line:1,column:84680}},type:"cond-expr",locations:[{start:{line:1,column:84608},end:{line:1,column:84652}},{start:{line:1,column:84653},end:{line:1,column:84680}}],line:1},"929":{loc:{start:{line:1,column:84733},end:{line:1,column:84748}},type:"binary-expr",locations:[{start:{line:1,column:84733},end:{line:1,column:84739}},{start:{line:1,column:84741},end:{line:1,column:84748}}],line:1},"930":{loc:{start:{line:1,column:84749},end:{line:1,column:84773}},type:"binary-expr",locations:[{start:{line:1,column:84749},end:{line:1,column:84760}},{start:{line:1,column:84763},end:{line:1,column:84772}}],line:1},"931":{loc:{start:{line:1,column:84774},end:{line:1,column:84856}},type:"cond-expr",locations:[{start:{line:1,column:84785},end:{line:1,column:84829}},{start:{line:1,column:84830},end:{line:1,column:84856}}],line:1},"932":{loc:{start:{line:1,column:84921},end:{line:1,column:84942}},type:"binary-expr",locations:[{start:{line:1,column:84921},end:{line:1,column:84928}},{start:{line:1,column:84931},end:{line:1,column:84941}}],line:1},"933":{loc:{start:{line:1,column:84954},end:{line:1,column:84968}},type:"binary-expr",locations:[{start:{line:1,column:84954},end:{line:1,column:84964}},{start:{line:1,column:84966},end:{line:1,column:84968}}],line:1},"934":{loc:{start:{line:1,column:84980},end:{line:1,column:84997}},type:"binary-expr",locations:[{start:{line:1,column:84980},end:{line:1,column:84990}},{start:{line:1,column:84992},end:{line:1,column:84997}}],line:1},"935":{loc:{start:{line:1,column:85007},end:{line:1,column:85018}},type:"binary-expr",locations:[{start:{line:1,column:85007},end:{line:1,column:85015}},{start:{line:1,column:85017},end:{line:1,column:85018}}],line:1},"936":{loc:{start:{line:1,column:85029},end:{line:1,column:85084}},type:"binary-expr",locations:[{start:{line:1,column:85029},end:{line:1,column:85038}},{start:{line:1,column:85040},end:{line:1,column:85084}}],line:1},"937":{loc:{start:{line:1,column:85123},end:{line:1,column:85152}},type:"cond-expr",locations:[{start:{line:1,column:85131},end:{line:1,column:85149}},{start:{line:1,column:85150},end:{line:1,column:85152}}],line:1},"938":{loc:{start:{line:1,column:85153},end:{line:1,column:85180}},type:"binary-expr",locations:[{start:{line:1,column:85153},end:{line:1,column:85159}},{start:{line:1,column:85161},end:{line:1,column:85180}}],line:1},"939":{loc:{start:{line:1,column:85278},end:{line:1,column:85291}},type:"if",locations:[{start:{line:1,column:85278},end:{line:1,column:85291}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"940":{loc:{start:{line:1,column:85430},end:{line:1,column:85481}},type:"binary-expr",locations:[{start:{line:1,column:85430},end:{line:1,column:85463}},{start:{line:1,column:85465},end:{line:1,column:85481}}],line:1},"941":{loc:{start:{line:1,column:85490},end:{line:1,column:85559}},type:"binary-expr",locations:[{start:{line:1,column:85490},end:{line:1,column:85556}},{start:{line:1,column:85558},end:{line:1,column:85559}}],line:1},"942":{loc:{start:{line:1,column:85506},end:{line:1,column:85553}},type:"cond-expr",locations:[{start:{line:1,column:85548},end:{line:1,column:85549}},{start:{line:1,column:85550},end:{line:1,column:85553}}],line:1},"943":{loc:{start:{line:1,column:85506},end:{line:1,column:85547}},type:"binary-expr",locations:[{start:{line:1,column:85506},end:{line:1,column:85519}},{start:{line:1,column:85521},end:{line:1,column:85547}}],line:1},"944":{loc:{start:{line:1,column:85837},end:{line:1,column:85861}},type:"binary-expr",locations:[{start:{line:1,column:85837},end:{line:1,column:85848}},{start:{line:1,column:85850},end:{line:1,column:85861}}],line:1},"945":{loc:{start:{line:1,column:86325},end:{line:1,column:86335}},type:"binary-expr",locations:[{start:{line:1,column:86325},end:{line:1,column:86326}},{start:{line:1,column:86328},end:{line:1,column:86335}}],line:1},"946":{loc:{start:{line:1,column:86339},end:{line:1,column:86350}},type:"binary-expr",locations:[{start:{line:1,column:86339},end:{line:1,column:86340}},{start:{line:1,column:86342},end:{line:1,column:86350}}],line:1},"947":{loc:{start:{line:1,column:86378},end:{line:1,column:86397}},type:"cond-expr",locations:[{start:{line:1,column:86380},end:{line:1,column:86395}},{start:{line:1,column:86396},end:{line:1,column:86397}}],line:1},"948":{loc:{start:{line:1,column:86487},end:{line:1,column:86528}},type:"binary-expr",locations:[{start:{line:1,column:86487},end:{line:1,column:86488}},{start:{line:1,column:86490},end:{line:1,column:86502}},{start:{line:1,column:86504},end:{line:1,column:86522}},{start:{line:1,column:86524},end:{line:1,column:86528}}],line:1},"949":{loc:{start:{line:1,column:86799},end:{line:1,column:86815}},type:"binary-expr",locations:[{start:{line:1,column:86799},end:{line:1,column:86807}},{start:{line:1,column:86809},end:{line:1,column:86815}}],line:1},"950":{loc:{start:{line:1,column:86900},end:{line:1,column:87112}},type:"if",locations:[{start:{line:1,column:86900},end:{line:1,column:87112}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"951":{loc:{start:{line:1,column:87004},end:{line:1,column:87022}},type:"binary-expr",locations:[{start:{line:1,column:87004},end:{line:1,column:87013}},{start:{line:1,column:87015},end:{line:1,column:87022}}],line:1},"952":{loc:{start:{line:1,column:87035},end:{line:1,column:87060}},type:"binary-expr",locations:[{start:{line:1,column:87035},end:{line:1,column:87046}},{start:{line:1,column:87048},end:{line:1,column:87060}}],line:1},"953":{loc:{start:{line:1,column:87088},end:{line:1,column:87111}},type:"binary-expr",locations:[{start:{line:1,column:87088},end:{line:1,column:87098}},{start:{line:1,column:87101},end:{line:1,column:87110}}],line:1},"954":{loc:{start:{line:1,column:87112},end:{line:1,column:87219}},type:"if",locations:[{start:{line:1,column:87112},end:{line:1,column:87219}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"955":{loc:{start:{line:1,column:87121},end:{line:1,column:87219}},type:"if",locations:[{start:{line:1,column:87121},end:{line:1,column:87219}},{start:{line:1,column:87172},end:{line:1,column:87219}}],line:1},"956":{loc:{start:{line:1,column:87162},end:{line:1,column:87166}},type:"binary-expr",locations:[{start:{line:1,column:87162},end:{line:1,column:87163}},{start:{line:1,column:87165},end:{line:1,column:87166}}],line:1},"957":{loc:{start:{line:1,column:87194},end:{line:1,column:87218}},type:"binary-expr",locations:[{start:{line:1,column:87194},end:{line:1,column:87204}},{start:{line:1,column:87207},end:{line:1,column:87217}}],line:1},"958":{loc:{start:{line:1,column:87235},end:{line:1,column:87253}},type:"cond-expr",locations:[{start:{line:1,column:87238},end:{line:1,column:87250}},{start:{line:1,column:87251},end:{line:1,column:87253}}],line:1},"959":{loc:{start:{line:1,column:87273},end:{line:1,column:87302}},type:"binary-expr",locations:[{start:{line:1,column:87273},end:{line:1,column:87274}},{start:{line:1,column:87276},end:{line:1,column:87302}}],line:1},"960":{loc:{start:{line:1,column:87322},end:{line:1,column:87371}},type:"binary-expr",locations:[{start:{line:1,column:87322},end:{line:1,column:87323}},{start:{line:1,column:87325},end:{line:1,column:87333}},{start:{line:1,column:87335},end:{line:1,column:87371}}],line:1},"961":{loc:{start:{line:1,column:87395},end:{line:1,column:87413}},type:"binary-expr",locations:[{start:{line:1,column:87395},end:{line:1,column:87405}},{start:{line:1,column:87407},end:{line:1,column:87413}}],line:1},"962":{loc:{start:{line:1,column:87465},end:{line:1,column:87482}},type:"cond-expr",locations:[{start:{line:1,column:87476},end:{line:1,column:87477}},{start:{line:1,column:87478},end:{line:1,column:87482}}],line:1},"963":{loc:{start:{line:1,column:87485},end:{line:1,column:87502}},type:"cond-expr",locations:[{start:{line:1,column:87496},end:{line:1,column:87497}},{start:{line:1,column:87498},end:{line:1,column:87502}}],line:1},"964":{loc:{start:{line:1,column:87536},end:{line:1,column:87568}},type:"if",locations:[{start:{line:1,column:87536},end:{line:1,column:87568}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"965":{loc:{start:{line:1,column:87539},end:{line:1,column:87559}},type:"binary-expr",locations:[{start:{line:1,column:87539},end:{line:1,column:87544}},{start:{line:1,column:87546},end:{line:1,column:87559}}],line:1},"966":{loc:{start:{line:1,column:87656},end:{line:1,column:87677}},type:"binary-expr",locations:[{start:{line:1,column:87656},end:{line:1,column:87657}},{start:{line:1,column:87659},end:{line:1,column:87677}}],line:1},"967":{loc:{start:{line:1,column:87680},end:{line:1,column:87704}},type:"binary-expr",locations:[{start:{line:1,column:87680},end:{line:1,column:87681}},{start:{line:1,column:87683},end:{line:1,column:87704}}],line:1},"968":{loc:{start:{line:1,column:87705},end:{line:1,column:87711}},type:"binary-expr",locations:[{start:{line:1,column:87705},end:{line:1,column:87706}},{start:{line:1,column:87708},end:{line:1,column:87711}}],line:1},"969":{loc:{start:{line:1,column:87856},end:{line:1,column:87879}},type:"binary-expr",locations:[{start:{line:1,column:87856},end:{line:1,column:87857}},{start:{line:1,column:87859},end:{line:1,column:87879}}],line:1},"970":{loc:{start:{line:1,column:87882},end:{line:1,column:87904}},type:"binary-expr",locations:[{start:{line:1,column:87882},end:{line:1,column:87883}},{start:{line:1,column:87885},end:{line:1,column:87904}}],line:1},"971":{loc:{start:{line:1,column:87905},end:{line:1,column:87911}},type:"binary-expr",locations:[{start:{line:1,column:87905},end:{line:1,column:87906}},{start:{line:1,column:87908},end:{line:1,column:87911}}],line:1},"972":{loc:{start:{line:1,column:88033},end:{line:1,column:88103}},type:"binary-expr",locations:[{start:{line:1,column:88033},end:{line:1,column:88039}},{start:{line:1,column:88042},end:{line:1,column:88102}}],line:1},"973":{loc:{start:{line:1,column:88066},end:{line:1,column:88100}},type:"binary-expr",locations:[{start:{line:1,column:88066},end:{line:1,column:88095}},{start:{line:1,column:88097},end:{line:1,column:88100}}],line:1},"974":{loc:{start:{line:1,column:88121},end:{line:1,column:88166}},type:"binary-expr",locations:[{start:{line:1,column:88121},end:{line:1,column:88128}},{start:{line:1,column:88130},end:{line:1,column:88166}}],line:1},"975":{loc:{start:{line:1,column:88207},end:{line:1,column:88255}},type:"binary-expr",locations:[{start:{line:1,column:88207},end:{line:1,column:88214}},{start:{line:1,column:88216},end:{line:1,column:88255}}],line:1},"976":{loc:{start:{line:1,column:88292},end:{line:1,column:88300}},type:"binary-expr",locations:[{start:{line:1,column:88292},end:{line:1,column:88293}},{start:{line:1,column:88295},end:{line:1,column:88300}}],line:1},"977":{loc:{start:{line:1,column:88301},end:{line:1,column:88314}},type:"if",locations:[{start:{line:1,column:88301},end:{line:1,column:88314}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"978":{loc:{start:{line:1,column:88358},end:{line:1,column:88378}},type:"binary-expr",locations:[{start:{line:1,column:88358},end:{line:1,column:88373}},{start:{line:1,column:88375},end:{line:1,column:88378}}],line:1},"979":{loc:{start:{line:1,column:88469},end:{line:1,column:88489}},type:"binary-expr",locations:[{start:{line:1,column:88469},end:{line:1,column:88474}},{start:{line:1,column:88476},end:{line:1,column:88481}},{start:{line:1,column:88483},end:{line:1,column:88489}}],line:1},"980":{loc:{start:{line:1,column:88541},end:{line:1,column:88558}},type:"binary-expr",locations:[{start:{line:1,column:88541},end:{line:1,column:88542}},{start:{line:1,column:88544},end:{line:1,column:88558}}],line:1},"981":{loc:{start:{line:1,column:88559},end:{line:1,column:88578}},type:"binary-expr",locations:[{start:{line:1,column:88559},end:{line:1,column:88571}},{start:{line:1,column:88573},end:{line:1,column:88578}}],line:1},"982":{loc:{start:{line:1,column:88622},end:{line:1,column:88646}},type:"binary-expr",locations:[{start:{line:1,column:88622},end:{line:1,column:88634}},{start:{line:1,column:88636},end:{line:1,column:88646}}],line:1},"983":{loc:{start:{line:1,column:88720},end:{line:1,column:88755}},type:"binary-expr",locations:[{start:{line:1,column:88720},end:{line:1,column:88721}},{start:{line:1,column:88723},end:{line:1,column:88735}},{start:{line:1,column:88737},end:{line:1,column:88755}}],line:1},"984":{loc:{start:{line:1,column:88763},end:{line:1,column:88795}},type:"cond-expr",locations:[{start:{line:1,column:88780},end:{line:1,column:88789}},{start:{line:1,column:88791},end:{line:1,column:88795}}],line:1},"985":{loc:{start:{line:1,column:88763},end:{line:1,column:88778}},type:"binary-expr",locations:[{start:{line:1,column:88763},end:{line:1,column:88764}},{start:{line:1,column:88766},end:{line:1,column:88778}}],line:1},"986":{loc:{start:{line:1,column:88829},end:{line:1,column:88848}},type:"if",locations:[{start:{line:1,column:88829},end:{line:1,column:88848}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"987":{loc:{start:{line:1,column:88910},end:{line:1,column:88955}},type:"cond-expr",locations:[{start:{line:1,column:88915},end:{line:1,column:88935}},{start:{line:1,column:88936},end:{line:1,column:88955}}],line:1},"988":{loc:{start:{line:1,column:88964},end:{line:1,column:88975}},type:"binary-expr",locations:[{start:{line:1,column:88964},end:{line:1,column:88971}},{start:{line:1,column:88973},end:{line:1,column:88975}}],line:1},"989":{loc:{start:{line:1,column:89120},end:{line:1,column:89147}},type:"binary-expr",locations:[{start:{line:1,column:89120},end:{line:1,column:89130}},{start:{line:1,column:89133},end:{line:1,column:89146}}],line:1},"990":{loc:{start:{line:1,column:89150},end:{line:1,column:89188}},type:"binary-expr",locations:[{start:{line:1,column:89150},end:{line:1,column:89184}},{start:{line:1,column:89186},end:{line:1,column:89188}}],line:1},"991":{loc:{start:{line:1,column:89234},end:{line:1,column:89261}},type:"binary-expr",locations:[{start:{line:1,column:89234},end:{line:1,column:89244}},{start:{line:1,column:89247},end:{line:1,column:89260}}],line:1},"992":{loc:{start:{line:1,column:89269},end:{line:1,column:89282}},type:"if",locations:[{start:{line:1,column:89269},end:{line:1,column:89282}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"993":{loc:{start:{line:1,column:89283},end:{line:1,column:89321}},type:"binary-expr",locations:[{start:{line:1,column:89283},end:{line:1,column:89317}},{start:{line:1,column:89319},end:{line:1,column:89321}}],line:1},"994":{loc:{start:{line:1,column:89458},end:{line:1,column:89466}},type:"binary-expr",locations:[{start:{line:1,column:89458},end:{line:1,column:89459}},{start:{line:1,column:89461},end:{line:1,column:89466}}],line:1},"995":{loc:{start:{line:1,column:89476},end:{line:1,column:89492}},type:"binary-expr",locations:[{start:{line:1,column:89476},end:{line:1,column:89477}},{start:{line:1,column:89479},end:{line:1,column:89492}}],line:1},"996":{loc:{start:{line:1,column:89517},end:{line:1,column:89586}},type:"cond-expr",locations:[{start:{line:1,column:89581},end:{line:1,column:89583}},{start:{line:1,column:89584},end:{line:1,column:89586}}],line:1},"997":{loc:{start:{line:1,column:89517},end:{line:1,column:89580}},type:"binary-expr",locations:[{start:{line:1,column:89517},end:{line:1,column:89522}},{start:{line:1,column:89524},end:{line:1,column:89550}},{start:{line:1,column:89552},end:{line:1,column:89580}}],line:1},"998":{loc:{start:{line:1,column:89774},end:{line:1,column:89796}},type:"binary-expr",locations:[{start:{line:1,column:89774},end:{line:1,column:89784}},{start:{line:1,column:89786},end:{line:1,column:89796}}],line:1},"999":{loc:{start:{line:1,column:89834},end:{line:1,column:89856}},type:"if",locations:[{start:{line:1,column:89834},end:{line:1,column:89856}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1000":{loc:{start:{line:1,column:89837},end:{line:1,column:89843}},type:"binary-expr",locations:[{start:{line:1,column:89837},end:{line:1,column:89839}},{start:{line:1,column:89841},end:{line:1,column:89843}}],line:1},"1001":{loc:{start:{line:1,column:89891},end:{line:1,column:89927}},type:"cond-expr",locations:[{start:{line:1,column:89911},end:{line:1,column:89919}},{start:{line:1,column:89920},end:{line:1,column:89927}}],line:1},"1002":{loc:{start:{line:1,column:89891},end:{line:1,column:89910}},type:"binary-expr",locations:[{start:{line:1,column:89891},end:{line:1,column:89895}},{start:{line:1,column:89897},end:{line:1,column:89910}}],line:1},"1003":{loc:{start:{line:1,column:89992},end:{line:1,column:90010}},type:"binary-expr",locations:[{start:{line:1,column:89992},end:{line:1,column:90007}},{start:{line:1,column:90009},end:{line:1,column:90010}}],line:1},"1004":{loc:{start:{line:1,column:90016},end:{line:1,column:90040}},type:"cond-expr",locations:[{start:{line:1,column:90032},end:{line:1,column:90037}},{start:{line:1,column:90038},end:{line:1,column:90040}}],line:1},"1005":{loc:{start:{line:1,column:90073},end:{line:1,column:90103}},type:"if",locations:[{start:{line:1,column:90073},end:{line:1,column:90103}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1006":{loc:{start:{line:1,column:90119},end:{line:1,column:90276}},type:"if",locations:[{start:{line:1,column:90119},end:{line:1,column:90276}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1007":{loc:{start:{line:1,column:90137},end:{line:1,column:90169}},type:"cond-expr",locations:[{start:{line:1,column:90141},end:{line:1,column:90164}},{start:{line:1,column:90165},end:{line:1,column:90169}}],line:1},"1008":{loc:{start:{line:1,column:90183},end:{line:1,column:90193}},type:"cond-expr",locations:[{start:{line:1,column:90188},end:{line:1,column:90189}},{start:{line:1,column:90190},end:{line:1,column:90193}}],line:1},"1009":{loc:{start:{line:1,column:90255},end:{line:1,column:90272}},type:"cond-expr",locations:[{start:{line:1,column:90260},end:{line:1,column:90268}},{start:{line:1,column:90269},end:{line:1,column:90272}}],line:1},"1010":{loc:{start:{line:1,column:90364},end:{line:1,column:90369}},type:"cond-expr",locations:[{start:{line:1,column:90366},end:{line:1,column:90367}},{start:{line:1,column:90368},end:{line:1,column:90369}}],line:1},"1011":{loc:{start:{line:1,column:90465},end:{line:1,column:90492}},type:"if",locations:[{start:{line:1,column:90465},end:{line:1,column:90492}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1012":{loc:{start:{line:1,column:90549},end:{line:1,column:90564}},type:"if",locations:[{start:{line:1,column:90549},end:{line:1,column:90564}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1013":{loc:{start:{line:1,column:90641},end:{line:1,column:90662}},type:"binary-expr",locations:[{start:{line:1,column:90641},end:{line:1,column:90651}},{start:{line:1,column:90653},end:{line:1,column:90662}}],line:1},"1014":{loc:{start:{line:1,column:90748},end:{line:1,column:90782}},type:"binary-expr",locations:[{start:{line:1,column:90748},end:{line:1,column:90753}},{start:{line:1,column:90756},end:{line:1,column:90781}}],line:1},"1015":{loc:{start:{line:1,column:90883},end:{line:1,column:90913}},type:"binary-expr",locations:[{start:{line:1,column:90883},end:{line:1,column:90884}},{start:{line:1,column:90887},end:{line:1,column:90912}}],line:1},"1016":{loc:{start:{line:1,column:90975},end:{line:1,column:91020}},type:"binary-expr",locations:[{start:{line:1,column:90975},end:{line:1,column:90980}},{start:{line:1,column:90983},end:{line:1,column:91019}}],line:1},"1017":{loc:{start:{line:1,column:91055},end:{line:1,column:91071}},type:"if",locations:[{start:{line:1,column:91055},end:{line:1,column:91071}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1018":{loc:{start:{line:1,column:91094},end:{line:1,column:91122}},type:"if",locations:[{start:{line:1,column:91094},end:{line:1,column:91122}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1019":{loc:{start:{line:1,column:91141},end:{line:1,column:91180}},type:"cond-expr",locations:[{start:{line:1,column:91152},end:{line:1,column:91159}},{start:{line:1,column:91160},end:{line:1,column:91180}}],line:1},"1020":{loc:{start:{line:1,column:91160},end:{line:1,column:91180}},type:"cond-expr",locations:[{start:{line:1,column:91172},end:{line:1,column:91178}},{start:{line:1,column:91179},end:{line:1,column:91180}}],line:1},"1021":{loc:{start:{line:1,column:91193},end:{line:1,column:91228}},type:"cond-expr",locations:[{start:{line:1,column:91215},end:{line:1,column:91221}},{start:{line:1,column:91222},end:{line:1,column:91228}}],line:1},"1022":{loc:{start:{line:1,column:91193},end:{line:1,column:91214}},type:"binary-expr",locations:[{start:{line:1,column:91193},end:{line:1,column:91202}},{start:{line:1,column:91204},end:{line:1,column:91214}}],line:1},"1023":{loc:{start:{line:1,column:91248},end:{line:1,column:91252}},type:"binary-expr",locations:[{start:{line:1,column:91248},end:{line:1,column:91249}},{start:{line:1,column:91251},end:{line:1,column:91252}}],line:1},"1024":{loc:{start:{line:1,column:91478},end:{line:1,column:91614}},type:"if",locations:[{start:{line:1,column:91478},end:{line:1,column:91614}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1025":{loc:{start:{line:1,column:91483},end:{line:1,column:91604}},type:"binary-expr",locations:[{start:{line:1,column:91483},end:{line:1,column:91484}},{start:{line:1,column:91487},end:{line:1,column:91603}}],line:1},"1026":{loc:{start:{line:1,column:91487},end:{line:1,column:91578}},type:"cond-expr",locations:[{start:{line:1,column:91493},end:{line:1,column:91512}},{start:{line:1,column:91513},end:{line:1,column:91578}}],line:1},"1027":{loc:{start:{line:1,column:91513},end:{line:1,column:91578}},type:"cond-expr",locations:[{start:{line:1,column:91519},end:{line:1,column:91547}},{start:{line:1,column:91548},end:{line:1,column:91578}}],line:1},"1028":{loc:{start:{line:1,column:91582},end:{line:1,column:91590}},type:"cond-expr",locations:[{start:{line:1,column:91586},end:{line:1,column:91587}},{start:{line:1,column:91588},end:{line:1,column:91590}}],line:1},"1029":{loc:{start:{line:1,column:91591},end:{line:1,column:91603}},type:"binary-expr",locations:[{start:{line:1,column:91591},end:{line:1,column:91596}},{start:{line:1,column:91598},end:{line:1,column:91603}}],line:1},"1030":{loc:{start:{line:1,column:91666},end:{line:1,column:91724}},type:"if",locations:[{start:{line:1,column:91666},end:{line:1,column:91724}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1031":{loc:{start:{line:1,column:91749},end:{line:1,column:91775}},type:"cond-expr",locations:[{start:{line:1,column:91761},end:{line:1,column:91773}},{start:{line:1,column:91774},end:{line:1,column:91775}}],line:1},"1032":{loc:{start:{line:1,column:91793},end:{line:1,column:91816}},type:"if",locations:[{start:{line:1,column:91793},end:{line:1,column:91816}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1033":{loc:{start:{line:1,column:91856},end:{line:1,column:91881}},type:"cond-expr",locations:[{start:{line:1,column:91866},end:{line:1,column:91879}},{start:{line:1,column:91880},end:{line:1,column:91881}}],line:1},"1034":{loc:{start:{line:1,column:92056},end:{line:1,column:92100}},type:"binary-expr",locations:[{start:{line:1,column:92057},end:{line:1,column:92058}},{start:{line:1,column:92060},end:{line:1,column:92071}},{start:{line:1,column:92073},end:{line:1,column:92075}},{start:{line:1,column:92077},end:{line:1,column:92088}},{start:{line:1,column:92092},end:{line:1,column:92099}}],line:1},"1035":{loc:{start:{line:1,column:92216},end:{line:1,column:92540}},type:"if",locations:[{start:{line:1,column:92216},end:{line:1,column:92540}},{start:{line:1,column:92384},end:{line:1,column:92540}}],line:1},"1036":{loc:{start:{line:1,column:92237},end:{line:1,column:92374}},type:"if",locations:[{start:{line:1,column:92237},end:{line:1,column:92374}},{start:{line:1,column:92324},end:{line:1,column:92374}}],line:1},"1037":{loc:{start:{line:1,column:92324},end:{line:1,column:92373}},type:"cond-expr",locations:[{start:{line:1,column:92337},end:{line:1,column:92361}},{start:{line:1,column:92362},end:{line:1,column:92373}}],line:1},"1038":{loc:{start:{line:1,column:92385},end:{line:1,column:92511}},type:"if",locations:[{start:{line:1,column:92385},end:{line:1,column:92511}},{start:{line:1,column:92461},end:{line:1,column:92511}}],line:1},"1039":{loc:{start:{line:1,column:92461},end:{line:1,column:92510}},type:"cond-expr",locations:[{start:{line:1,column:92474},end:{line:1,column:92498}},{start:{line:1,column:92499},end:{line:1,column:92510}}],line:1},"1040":{loc:{start:{line:1,column:92524},end:{line:1,column:92539}},type:"cond-expr",locations:[{start:{line:1,column:92535},end:{line:1,column:92537}},{start:{line:1,column:92538},end:{line:1,column:92539}}],line:1},"1041":{loc:{start:{line:1,column:94112},end:{line:1,column:94140}},type:"if",locations:[{start:{line:1,column:94112},end:{line:1,column:94140}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1042":{loc:{start:{line:1,column:94115},end:{line:1,column:94119}},type:"binary-expr",locations:[{start:{line:1,column:94115},end:{line:1,column:94116}},{start:{line:1,column:94118},end:{line:1,column:94119}}],line:1},"1043":{loc:{start:{line:1,column:94244},end:{line:1,column:94268}},type:"binary-expr",locations:[{start:{line:1,column:94244},end:{line:1,column:94245}},{start:{line:1,column:94248},end:{line:1,column:94267}}],line:1},"1044":{loc:{start:{line:1,column:94269},end:{line:1,column:94293}},type:"binary-expr",locations:[{start:{line:1,column:94269},end:{line:1,column:94270}},{start:{line:1,column:94273},end:{line:1,column:94292}}],line:1},"1045":{loc:{start:{line:1,column:94303},end:{line:1,column:94313}},type:"cond-expr",locations:[{start:{line:1,column:94310},end:{line:1,column:94311}},{start:{line:1,column:94312},end:{line:1,column:94313}}],line:1},"1046":{loc:{start:{line:1,column:94303},end:{line:1,column:94309}},type:"binary-expr",locations:[{start:{line:1,column:94303},end:{line:1,column:94304}},{start:{line:1,column:94306},end:{line:1,column:94309}}],line:1},"1047":{loc:{start:{line:1,column:94316},end:{line:1,column:94326}},type:"cond-expr",locations:[{start:{line:1,column:94323},end:{line:1,column:94324}},{start:{line:1,column:94325},end:{line:1,column:94326}}],line:1},"1048":{loc:{start:{line:1,column:94316},end:{line:1,column:94322}},type:"binary-expr",locations:[{start:{line:1,column:94316},end:{line:1,column:94317}},{start:{line:1,column:94319},end:{line:1,column:94322}}],line:1},"1049":{loc:{start:{line:1,column:94386},end:{line:1,column:94405}},type:"binary-expr",locations:[{start:{line:1,column:94386},end:{line:1,column:94402}},{start:{line:1,column:94404},end:{line:1,column:94405}}],line:1},"1050":{loc:{start:{line:1,column:94410},end:{line:1,column:94428}},type:"binary-expr",locations:[{start:{line:1,column:94410},end:{line:1,column:94425}},{start:{line:1,column:94427},end:{line:1,column:94428}}],line:1},"1051":{loc:{start:{line:1,column:94435},end:{line:1,column:94455}},type:"binary-expr",locations:[{start:{line:1,column:94435},end:{line:1,column:94452}},{start:{line:1,column:94454},end:{line:1,column:94455}}],line:1},"1052":{loc:{start:{line:1,column:94463},end:{line:1,column:94484}},type:"binary-expr",locations:[{start:{line:1,column:94463},end:{line:1,column:94481}},{start:{line:1,column:94483},end:{line:1,column:94484}}],line:1},"1053":{loc:{start:{line:1,column:94556},end:{line:1,column:94632}},type:"binary-expr",locations:[{start:{line:1,column:94556},end:{line:1,column:94575}},{start:{line:1,column:94578},end:{line:1,column:94617}},{start:{line:1,column:94620},end:{line:1,column:94628}},{start:{line:1,column:94630},end:{line:1,column:94632}}],line:1},"1054":{loc:{start:{line:1,column:94578},end:{line:1,column:94617}},type:"cond-expr",locations:[{start:{line:1,column:94598},end:{line:1,column:94607}},{start:{line:1,column:94608},end:{line:1,column:94617}}],line:1},"1055":{loc:{start:{line:1,column:94647},end:{line:1,column:94669}},type:"default-arg",locations:[{start:{line:1,column:94649},end:{line:1,column:94669}}],line:1},"1056":{loc:{start:{line:1,column:94678},end:{line:1,column:94741}},type:"binary-expr",locations:[{start:{line:1,column:94678},end:{line:1,column:94694}},{start:{line:1,column:94697},end:{line:1,column:94740}}],line:1},"1057":{loc:{start:{line:1,column:95219},end:{line:1,column:95291}},type:"cond-expr",locations:[{start:{line:1,column:95239},end:{line:1,column:95264}},{start:{line:1,column:95265},end:{line:1,column:95291}}],line:1},"1058":{loc:{start:{line:1,column:95292},end:{line:1,column:95442}},type:"binary-expr",locations:[{start:{line:1,column:95292},end:{line:1,column:95314}},{start:{line:1,column:95317},end:{line:1,column:95441}}],line:1},"1059":{loc:{start:{line:1,column:95478},end:{line:1,column:95499}},type:"binary-expr",locations:[{start:{line:1,column:95478},end:{line:1,column:95495}},{start:{line:1,column:95497},end:{line:1,column:95499}}],line:1},"1060":{loc:{start:{line:1,column:95576},end:{line:1,column:95605}},type:"cond-expr",locations:[{start:{line:1,column:95578},end:{line:1,column:95594}},{start:{line:1,column:95595},end:{line:1,column:95605}}],line:1},"1061":{loc:{start:{line:1,column:95725},end:{line:1,column:95844}},type:"binary-expr",locations:[{start:{line:1,column:95725},end:{line:1,column:95734}},{start:{line:1,column:95737},end:{line:1,column:95747}},{start:{line:1,column:95749},end:{line:1,column:95766}},{start:{line:1,column:95770},end:{line:1,column:95843}}],line:1},"1062":{loc:{start:{line:1,column:95845},end:{line:1,column:95886}},type:"binary-expr",locations:[{start:{line:1,column:95845},end:{line:1,column:95846}},{start:{line:1,column:95848},end:{line:1,column:95886}}],line:1},"1063":{loc:{start:{line:1,column:95993},end:{line:1,column:96071}},type:"cond-expr",locations:[{start:{line:1,column:96014},end:{line:1,column:96038}},{start:{line:1,column:96041},end:{line:1,column:96070}}],line:1},"1064":{loc:{start:{line:1,column:96324},end:{line:1,column:96468}},type:"cond-expr",locations:[{start:{line:1,column:96345},end:{line:1,column:96403}},{start:{line:1,column:96406},end:{line:1,column:96467}}],line:1},"1065":{loc:{start:{line:1,column:97430},end:{line:1,column:97446}},type:"binary-expr",locations:[{start:{line:1,column:97430},end:{line:1,column:97443}},{start:{line:1,column:97445},end:{line:1,column:97446}}],line:1},"1066":{loc:{start:{line:1,column:97473},end:{line:1,column:97570}},type:"if",locations:[{start:{line:1,column:97473},end:{line:1,column:97570}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1067":{loc:{start:{line:1,column:97476},end:{line:1,column:97540}},type:"binary-expr",locations:[{start:{line:1,column:97476},end:{line:1,column:97494}},{start:{line:1,column:97496},end:{line:1,column:97506}},{start:{line:1,column:97508},end:{line:1,column:97512}},{start:{line:1,column:97514},end:{line:1,column:97518}},{start:{line:1,column:97520},end:{line:1,column:97540}}],line:1},"1068":{loc:{start:{line:1,column:97676},end:{line:1,column:97708}},type:"cond-expr",locations:[{start:{line:1,column:97685},end:{line:1,column:97700}},{start:{line:1,column:97701},end:{line:1,column:97708}}],line:1},"1069":{loc:{start:{line:1,column:97709},end:{line:1,column:97968}},type:"binary-expr",locations:[{start:{line:1,column:97709},end:{line:1,column:97714}},{start:{line:1,column:97717},end:{line:1,column:97967}}],line:1},"1070":{loc:{start:{line:1,column:97725},end:{line:1,column:97738}},type:"cond-expr",locations:[{start:{line:1,column:97734},end:{line:1,column:97736}},{start:{line:1,column:97737},end:{line:1,column:97738}}],line:1},"1071":{loc:{start:{line:1,column:98254},end:{line:1,column:98744}},type:"if",locations:[{start:{line:1,column:98254},end:{line:1,column:98744}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1072":{loc:{start:{line:1,column:98287},end:{line:1,column:98743}},type:"if",locations:[{start:{line:1,column:98287},end:{line:1,column:98743}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1073":{loc:{start:{line:1,column:98290},end:{line:1,column:98374}},type:"cond-expr",locations:[{start:{line:1,column:98293},end:{line:1,column:98331}},{start:{line:1,column:98334},end:{line:1,column:98373}}],line:1},"1074":{loc:{start:{line:1,column:98375},end:{line:1,column:98403}},type:"binary-expr",locations:[{start:{line:1,column:98375},end:{line:1,column:98384}},{start:{line:1,column:98386},end:{line:1,column:98403}}],line:1},"1075":{loc:{start:{line:1,column:98533},end:{line:1,column:98711}},type:"if",locations:[{start:{line:1,column:98533},end:{line:1,column:98711}},{start:{line:1,column:98628},end:{line:1,column:98711}}],line:1},"1076":{loc:{start:{line:1,column:98545},end:{line:1,column:98576}},type:"cond-expr",locations:[{start:{line:1,column:98554},end:{line:1,column:98555}},{start:{line:1,column:98556},end:{line:1,column:98576}}],line:1},"1077":{loc:{start:{line:1,column:98635},end:{line:1,column:98666}},type:"cond-expr",locations:[{start:{line:1,column:98644},end:{line:1,column:98645}},{start:{line:1,column:98646},end:{line:1,column:98666}}],line:1},"1078":{loc:{start:{line:1,column:98766},end:{line:1,column:98955}},type:"cond-expr",locations:[{start:{line:1,column:98769},end:{line:1,column:98860}},{start:{line:1,column:98863},end:{line:1,column:98954}}],line:1},"1079":{loc:{start:{line:1,column:99065},end:{line:1,column:99091}},type:"binary-expr",locations:[{start:{line:1,column:99065},end:{line:1,column:99074}},{start:{line:1,column:99076},end:{line:1,column:99091}}],line:1},"1080":{loc:{start:{line:1,column:99092},end:{line:1,column:99620}},type:"if",locations:[{start:{line:1,column:99092},end:{line:1,column:99620}},{start:{line:1,column:99489},end:{line:1,column:99620}}],line:1},"1081":{loc:{start:{line:1,column:99219},end:{line:1,column:99357}},type:"cond-expr",locations:[{start:{line:1,column:99221},end:{line:1,column:99276}},{start:{line:1,column:99277},end:{line:1,column:99357}}],line:1},"1082":{loc:{start:{line:1,column:99221},end:{line:1,column:99276}},type:"cond-expr",locations:[{start:{line:1,column:99224},end:{line:1,column:99248}},{start:{line:1,column:99251},end:{line:1,column:99275}}],line:1},"1083":{loc:{start:{line:1,column:99277},end:{line:1,column:99357}},type:"cond-expr",locations:[{start:{line:1,column:99289},end:{line:1,column:99298}},{start:{line:1,column:99299},end:{line:1,column:99357}}],line:1},"1084":{loc:{start:{line:1,column:99299},end:{line:1,column:99357}},type:"cond-expr",locations:[{start:{line:1,column:99309},end:{line:1,column:99318}},{start:{line:1,column:99319},end:{line:1,column:99357}}],line:1},"1085":{loc:{start:{line:1,column:99319},end:{line:1,column:99357}},type:"binary-expr",locations:[{start:{line:1,column:99319},end:{line:1,column:99330}},{start:{line:1,column:99333},end:{line:1,column:99356}}],line:1},"1086":{loc:{start:{line:1,column:99520},end:{line:1,column:99576}},type:"cond-expr",locations:[{start:{line:1,column:99533},end:{line:1,column:99547}},{start:{line:1,column:99549},end:{line:1,column:99576}}],line:1},"1087":{loc:{start:{line:1,column:99549},end:{line:1,column:99576}},type:"binary-expr",locations:[{start:{line:1,column:99549},end:{line:1,column:99558}},{start:{line:1,column:99561},end:{line:1,column:99575}}],line:1},"1088":{loc:{start:{line:1,column:99638},end:{line:1,column:99920}},type:"binary-expr",locations:[{start:{line:1,column:99638},end:{line:1,column:99651}},{start:{line:1,column:99654},end:{line:1,column:99919}}],line:1},"1089":{loc:{start:{line:1,column:100022},end:{line:1,column:100054}},type:"binary-expr",locations:[{start:{line:1,column:100022},end:{line:1,column:100031}},{start:{line:1,column:100033},end:{line:1,column:100045}},{start:{line:1,column:100047},end:{line:1,column:100054}}],line:1},"1090":{loc:{start:{line:1,column:100219},end:{line:1,column:100257}},type:"binary-expr",locations:[{start:{line:1,column:100219},end:{line:1,column:100232}},{start:{line:1,column:100235},end:{line:1,column:100256}}],line:1},"1091":{loc:{start:{line:1,column:100332},end:{line:1,column:100500}},type:"if",locations:[{start:{line:1,column:100332},end:{line:1,column:100500}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1092":{loc:{start:{line:1,column:100388},end:{line:1,column:100411}},type:"binary-expr",locations:[{start:{line:1,column:100388},end:{line:1,column:100398}},{start:{line:1,column:100401},end:{line:1,column:100410}}],line:1},"1093":{loc:{start:{line:1,column:100653},end:{line:1,column:100904}},type:"if",locations:[{start:{line:1,column:100653},end:{line:1,column:100904}},{start:{line:1,column:100817},end:{line:1,column:100904}}],line:1},"1094":{loc:{start:{line:1,column:100728},end:{line:1,column:100749}},type:"binary-expr",locations:[{start:{line:1,column:100728},end:{line:1,column:100732}},{start:{line:1,column:100734},end:{line:1,column:100749}}],line:1},"1095":{loc:{start:{line:1,column:100771},end:{line:1,column:100783}},type:"binary-expr",locations:[{start:{line:1,column:100771},end:{line:1,column:100776}},{start:{line:1,column:100778},end:{line:1,column:100783}}],line:1},"1096":{loc:{start:{line:1,column:100817},end:{line:1,column:100904}},type:"if",locations:[{start:{line:1,column:100817},end:{line:1,column:100904}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1097":{loc:{start:{line:1,column:100859},end:{line:1,column:100903}},type:"binary-expr",locations:[{start:{line:1,column:100859},end:{line:1,column:100864}},{start:{line:1,column:100866},end:{line:1,column:100871}},{start:{line:1,column:100874},end:{line:1,column:100902}}],line:1},"1098":{loc:{start:{line:1,column:101011},end:{line:1,column:101018}},type:"binary-expr",locations:[{start:{line:1,column:101011},end:{line:1,column:101015}},{start:{line:1,column:101017},end:{line:1,column:101018}}],line:1},"1099":{loc:{start:{line:1,column:101026},end:{line:1,column:101033}},type:"binary-expr",locations:[{start:{line:1,column:101026},end:{line:1,column:101030}},{start:{line:1,column:101032},end:{line:1,column:101033}}],line:1},"1100":{loc:{start:{line:1,column:101237},end:{line:1,column:101293}},type:"cond-expr",locations:[{start:{line:1,column:101255},end:{line:1,column:101259}},{start:{line:1,column:101260},end:{line:1,column:101293}}],line:1},"1101":{loc:{start:{line:1,column:101237},end:{line:1,column:101254}},type:"binary-expr",locations:[{start:{line:1,column:101237},end:{line:1,column:101240}},{start:{line:1,column:101242},end:{line:1,column:101254}}],line:1},"1102":{loc:{start:{line:1,column:101316},end:{line:1,column:101344}},type:"binary-expr",locations:[{start:{line:1,column:101316},end:{line:1,column:101335}},{start:{line:1,column:101338},end:{line:1,column:101343}}],line:1},"1103":{loc:{start:{line:1,column:101393},end:{line:1,column:101433}},type:"cond-expr",locations:[{start:{line:1,column:101413},end:{line:1,column:101431}},{start:{line:1,column:101432},end:{line:1,column:101433}}],line:1},"1104":{loc:{start:{line:1,column:101504},end:{line:1,column:101529}},type:"cond-expr",locations:[{start:{line:1,column:101524},end:{line:1,column:101527}},{start:{line:1,column:101528},end:{line:1,column:101529}}],line:1},"1105":{loc:{start:{line:1,column:101639},end:{line:1,column:101662}},type:"cond-expr",locations:[{start:{line:1,column:101648},end:{line:1,column:101649}},{start:{line:1,column:101650},end:{line:1,column:101662}}],line:1},"1106":{loc:{start:{line:1,column:101639},end:{line:1,column:101647}},type:"binary-expr",locations:[{start:{line:1,column:101639},end:{line:1,column:101642}},{start:{line:1,column:101644},end:{line:1,column:101647}}],line:1},"1107":{loc:{start:{line:1,column:101650},end:{line:1,column:101662}},type:"cond-expr",locations:[{start:{line:1,column:101659},end:{line:1,column:101660}},{start:{line:1,column:101661},end:{line:1,column:101662}}],line:1},"1108":{loc:{start:{line:1,column:101650},end:{line:1,column:101658}},type:"binary-expr",locations:[{start:{line:1,column:101650},end:{line:1,column:101653}},{start:{line:1,column:101655},end:{line:1,column:101658}}],line:1},"1109":{loc:{start:{line:1,column:101683},end:{line:1,column:101697}},type:"binary-expr",locations:[{start:{line:1,column:101683},end:{line:1,column:101693}},{start:{line:1,column:101695},end:{line:1,column:101697}}],line:1},"1110":{loc:{start:{line:1,column:101698},end:{line:1,column:101788}},type:"if",locations:[{start:{line:1,column:101698},end:{line:1,column:101788}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1111":{loc:{start:{line:1,column:101701},end:{line:1,column:101717}},type:"binary-expr",locations:[{start:{line:1,column:101701},end:{line:1,column:101705}},{start:{line:1,column:101707},end:{line:1,column:101717}}],line:1},"1112":{loc:{start:{line:1,column:101737},end:{line:1,column:101787}},type:"binary-expr",locations:[{start:{line:1,column:101737},end:{line:1,column:101747}},{start:{line:1,column:101750},end:{line:1,column:101786}}],line:1},"1113":{loc:{start:{line:1,column:101795},end:{line:1,column:101858}},type:"binary-expr",locations:[{start:{line:1,column:101795},end:{line:1,column:101808}},{start:{line:1,column:101811},end:{line:1,column:101857}}],line:1},"1114":{loc:{start:{line:1,column:101995},end:{line:1,column:102015}},type:"binary-expr",locations:[{start:{line:1,column:101995},end:{line:1,column:102012}},{start:{line:1,column:102014},end:{line:1,column:102015}}],line:1},"1115":{loc:{start:{line:1,column:102018},end:{line:1,column:102038}},type:"cond-expr",locations:[{start:{line:1,column:102020},end:{line:1,column:102036}},{start:{line:1,column:102037},end:{line:1,column:102038}}],line:1},"1116":{loc:{start:{line:1,column:102041},end:{line:1,column:102063}},type:"cond-expr",locations:[{start:{line:1,column:102043},end:{line:1,column:102061}},{start:{line:1,column:102062},end:{line:1,column:102063}}],line:1},"1117":{loc:{start:{line:1,column:102071},end:{line:1,column:102122}},type:"cond-expr",locations:[{start:{line:1,column:102091},end:{line:1,column:102106}},{start:{line:1,column:102107},end:{line:1,column:102122}}],line:1},"1118":{loc:{start:{line:1,column:102091},end:{line:1,column:102106}},type:"cond-expr",locations:[{start:{line:1,column:102099},end:{line:1,column:102102}},{start:{line:1,column:102103},end:{line:1,column:102106}}],line:1},"1119":{loc:{start:{line:1,column:102107},end:{line:1,column:102122}},type:"cond-expr",locations:[{start:{line:1,column:102115},end:{line:1,column:102118}},{start:{line:1,column:102119},end:{line:1,column:102122}}],line:1},"1120":{loc:{start:{line:1,column:102170},end:{line:1,column:102224}},type:"cond-expr",locations:[{start:{line:1,column:102181},end:{line:1,column:102184}},{start:{line:1,column:102185},end:{line:1,column:102224}}],line:1},"1121":{loc:{start:{line:1,column:102379},end:{line:1,column:102384}},type:"cond-expr",locations:[{start:{line:1,column:102381},end:{line:1,column:102382}},{start:{line:1,column:102383},end:{line:1,column:102384}}],line:1},"1122":{loc:{start:{line:1,column:102435},end:{line:1,column:102454}},type:"cond-expr",locations:[{start:{line:1,column:102445},end:{line:1,column:102452}},{start:{line:1,column:102453},end:{line:1,column:102454}}],line:1},"1123":{loc:{start:{line:1,column:102517},end:{line:1,column:103191}},type:"if",locations:[{start:{line:1,column:102517},end:{line:1,column:103191}},{start:{line:1,column:102598},end:{line:1,column:103191}}],line:1},"1124":{loc:{start:{line:1,column:102598},end:{line:1,column:103191}},type:"if",locations:[{start:{line:1,column:102598},end:{line:1,column:103191}},{start:{line:1,column:102676},end:{line:1,column:103191}}],line:1},"1125":{loc:{start:{line:1,column:102676},end:{line:1,column:103191}},type:"if",locations:[{start:{line:1,column:102676},end:{line:1,column:103191}},{start:{line:1,column:102756},end:{line:1,column:103191}}],line:1},"1126":{loc:{start:{line:1,column:102756},end:{line:1,column:103191}},type:"if",locations:[{start:{line:1,column:102756},end:{line:1,column:103191}},{start:{line:1,column:102835},end:{line:1,column:103191}}],line:1},"1127":{loc:{start:{line:1,column:102835},end:{line:1,column:103191}},type:"if",locations:[{start:{line:1,column:102835},end:{line:1,column:103191}},{start:{line:1,column:103017},end:{line:1,column:103191}}],line:1},"1128":{loc:{start:{line:1,column:102847},end:{line:1,column:102981}},type:"if",locations:[{start:{line:1,column:102847},end:{line:1,column:102981}},{start:{line:1,column:102895},end:{line:1,column:102981}}],line:1},"1129":{loc:{start:{line:1,column:102895},end:{line:1,column:102981}},type:"if",locations:[{start:{line:1,column:102895},end:{line:1,column:102981}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1130":{loc:{start:{line:1,column:103017},end:{line:1,column:103191}},type:"if",locations:[{start:{line:1,column:103017},end:{line:1,column:103191}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1131":{loc:{start:{line:1,column:103029},end:{line:1,column:103160}},type:"if",locations:[{start:{line:1,column:103029},end:{line:1,column:103160}},{start:{line:1,column:103074},end:{line:1,column:103160}}],line:1},"1132":{loc:{start:{line:1,column:103074},end:{line:1,column:103160}},type:"if",locations:[{start:{line:1,column:103074},end:{line:1,column:103160}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1133":{loc:{start:{line:1,column:103363},end:{line:1,column:103374}},type:"binary-expr",locations:[{start:{line:1,column:103363},end:{line:1,column:103370}},{start:{line:1,column:103372},end:{line:1,column:103374}}],line:1},"1134":{loc:{start:{line:1,column:103425},end:{line:1,column:103445}},type:"binary-expr",locations:[{start:{line:1,column:103425},end:{line:1,column:103441}},{start:{line:1,column:103443},end:{line:1,column:103445}}],line:1},"1135":{loc:{start:{line:1,column:103487},end:{line:1,column:103707}},type:"binary-expr",locations:[{start:{line:1,column:103487},end:{line:1,column:103497}},{start:{line:1,column:103500},end:{line:1,column:103706}}],line:1},"1136":{loc:{start:{line:1,column:103512},end:{line:1,column:103533}},type:"cond-expr",locations:[{start:{line:1,column:103514},end:{line:1,column:103523}},{start:{line:1,column:103524},end:{line:1,column:103533}}],line:1},"1137":{loc:{start:{line:1,column:103933},end:{line:1,column:103939}},type:"cond-expr",locations:[{start:{line:1,column:103935},end:{line:1,column:103937}},{start:{line:1,column:103938},end:{line:1,column:103939}}],line:1},"1138":{loc:{start:{line:1,column:104006},end:{line:1,column:104659}},type:"if",locations:[{start:{line:1,column:104006},end:{line:1,column:104659}},{start:{line:1,column:104073},end:{line:1,column:104659}}],line:1},"1139":{loc:{start:{line:1,column:104073},end:{line:1,column:104659}},type:"if",locations:[{start:{line:1,column:104073},end:{line:1,column:104659}},{start:{line:1,column:104140},end:{line:1,column:104659}}],line:1},"1140":{loc:{start:{line:1,column:104140},end:{line:1,column:104659}},type:"if",locations:[{start:{line:1,column:104140},end:{line:1,column:104659}},{start:{line:1,column:104218},end:{line:1,column:104659}}],line:1},"1141":{loc:{start:{line:1,column:104218},end:{line:1,column:104659}},type:"if",locations:[{start:{line:1,column:104218},end:{line:1,column:104659}},{start:{line:1,column:104297},end:{line:1,column:104659}}],line:1},"1142":{loc:{start:{line:1,column:104297},end:{line:1,column:104659}},type:"if",locations:[{start:{line:1,column:104297},end:{line:1,column:104659}},{start:{line:1,column:104476},end:{line:1,column:104659}}],line:1},"1143":{loc:{start:{line:1,column:104309},end:{line:1,column:104438}},type:"if",locations:[{start:{line:1,column:104309},end:{line:1,column:104438}},{start:{line:1,column:104353},end:{line:1,column:104438}}],line:1},"1144":{loc:{start:{line:1,column:104353},end:{line:1,column:104438}},type:"if",locations:[{start:{line:1,column:104353},end:{line:1,column:104438}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1145":{loc:{start:{line:1,column:104476},end:{line:1,column:104659}},type:"if",locations:[{start:{line:1,column:104476},end:{line:1,column:104659}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1146":{loc:{start:{line:1,column:104488},end:{line:1,column:104615}},type:"if",locations:[{start:{line:1,column:104488},end:{line:1,column:104615}},{start:{line:1,column:104532},end:{line:1,column:104615}}],line:1},"1147":{loc:{start:{line:1,column:104532},end:{line:1,column:104615}},type:"if",locations:[{start:{line:1,column:104532},end:{line:1,column:104615}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1148":{loc:{start:{line:1,column:104659},end:{line:1,column:104713}},type:"binary-expr",locations:[{start:{line:1,column:104659},end:{line:1,column:104666}},{start:{line:1,column:104669},end:{line:1,column:104712}}],line:1},"1149":{loc:{start:{line:1,column:104669},end:{line:1,column:104712}},type:"cond-expr",locations:[{start:{line:1,column:104681},end:{line:1,column:104688}},{start:{line:1,column:104689},end:{line:1,column:104712}}],line:1},"1150":{loc:{start:{line:1,column:104689},end:{line:1,column:104712}},type:"binary-expr",locations:[{start:{line:1,column:104689},end:{line:1,column:104698}},{start:{line:1,column:104701},end:{line:1,column:104711}}],line:1},"1151":{loc:{start:{line:1,column:104918},end:{line:1,column:104933}},type:"cond-expr",locations:[{start:{line:1,column:104923},end:{line:1,column:104931}},{start:{line:1,column:104932},end:{line:1,column:104933}}],line:1},"1152":{loc:{start:{line:1,column:105000},end:{line:1,column:105398}},type:"cond-expr",locations:[{start:{line:1,column:105003},end:{line:1,column:105379}},{start:{line:1,column:105382},end:{line:1,column:105397}}],line:1},"1153":{loc:{start:{line:1,column:105007},end:{line:1,column:105125}},type:"binary-expr",locations:[{start:{line:1,column:105007},end:{line:1,column:105018}},{start:{line:1,column:105021},end:{line:1,column:105124}}],line:1},"1154":{loc:{start:{line:1,column:105021},end:{line:1,column:105124}},type:"cond-expr",locations:[{start:{line:1,column:105029},end:{line:1,column:105067}},{start:{line:1,column:105068},end:{line:1,column:105124}}],line:1},"1155":{loc:{start:{line:1,column:105032},end:{line:1,column:105067}},type:"cond-expr",locations:[{start:{line:1,column:105053},end:{line:1,column:105059}},{start:{line:1,column:105060},end:{line:1,column:105067}}],line:1},"1156":{loc:{start:{line:1,column:105068},end:{line:1,column:105124}},type:"cond-expr",locations:[{start:{line:1,column:105074},end:{line:1,column:105112}},{start:{line:1,column:105113},end:{line:1,column:105124}}],line:1},"1157":{loc:{start:{line:1,column:105077},end:{line:1,column:105112}},type:"cond-expr",locations:[{start:{line:1,column:105098},end:{line:1,column:105105}},{start:{line:1,column:105106},end:{line:1,column:105112}}],line:1},"1158":{loc:{start:{line:1,column:105126},end:{line:1,column:105318}},type:"cond-expr",locations:[{start:{line:1,column:105136},end:{line:1,column:105231}},{start:{line:1,column:105232},end:{line:1,column:105318}}],line:1},"1159":{loc:{start:{line:1,column:105136},end:{line:1,column:105231}},type:"cond-expr",locations:[{start:{line:1,column:105154},end:{line:1,column:105164}},{start:{line:1,column:105165},end:{line:1,column:105231}}],line:1},"1160":{loc:{start:{line:1,column:105136},end:{line:1,column:105153}},type:"binary-expr",locations:[{start:{line:1,column:105136},end:{line:1,column:105146}},{start:{line:1,column:105148},end:{line:1,column:105153}}],line:1},"1161":{loc:{start:{line:1,column:105165},end:{line:1,column:105231}},type:"cond-expr",locations:[{start:{line:1,column:105178},end:{line:1,column:105206}},{start:{line:1,column:105207},end:{line:1,column:105231}}],line:1},"1162":{loc:{start:{line:1,column:105232},end:{line:1,column:105318}},type:"cond-expr",locations:[{start:{line:1,column:105250},end:{line:1,column:105255}},{start:{line:1,column:105256},end:{line:1,column:105318}}],line:1},"1163":{loc:{start:{line:1,column:105232},end:{line:1,column:105249}},type:"binary-expr",locations:[{start:{line:1,column:105232},end:{line:1,column:105242}},{start:{line:1,column:105244},end:{line:1,column:105249}}],line:1},"1164":{loc:{start:{line:1,column:105256},end:{line:1,column:105318}},type:"cond-expr",locations:[{start:{line:1,column:105269},end:{line:1,column:105294}},{start:{line:1,column:105295},end:{line:1,column:105318}}],line:1},"1165":{loc:{start:{line:1,column:105319},end:{line:1,column:105329}},type:"binary-expr",locations:[{start:{line:1,column:105319},end:{line:1,column:105320}},{start:{line:1,column:105323},end:{line:1,column:105328}}],line:1},"1166":{loc:{start:{line:1,column:105330},end:{line:1,column:105379}},type:"binary-expr",locations:[{start:{line:1,column:105330},end:{line:1,column:105335}},{start:{line:1,column:105337},end:{line:1,column:105357}},{start:{line:1,column:105360},end:{line:1,column:105378}}],line:1},"1167":{loc:{start:{line:1,column:105406},end:{line:1,column:105772}},type:"if",locations:[{start:{line:1,column:105406},end:{line:1,column:105772}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1168":{loc:{start:{line:1,column:105516},end:{line:1,column:105580}},type:"switch",locations:[{start:{line:1,column:105526},end:{line:1,column:105554}},{start:{line:1,column:105554},end:{line:1,column:105579}}],line:1},"1169":{loc:{start:{line:1,column:105580},end:{line:1,column:105692}},type:"switch",locations:[{start:{line:1,column:105590},end:{line:1,column:105618}},{start:{line:1,column:105618},end:{line:1,column:105643}},{start:{line:1,column:105643},end:{line:1,column:105691}}],line:1},"1170":{loc:{start:{line:1,column:105655},end:{line:1,column:105685}},type:"cond-expr",locations:[{start:{line:1,column:105663},end:{line:1,column:105669}},{start:{line:1,column:105670},end:{line:1,column:105685}}],line:1},"1171":{loc:{start:{line:1,column:105670},end:{line:1,column:105685}},type:"binary-expr",locations:[{start:{line:1,column:105670},end:{line:1,column:105673}},{start:{line:1,column:105676},end:{line:1,column:105684}}],line:1},"1172":{loc:{start:{line:1,column:105998},end:{line:1,column:106057}},type:"if",locations:[{start:{line:1,column:105998},end:{line:1,column:106057}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1173":{loc:{start:{line:1,column:106032},end:{line:1,column:106056}},type:"cond-expr",locations:[{start:{line:1,column:106042},end:{line:1,column:106048}},{start:{line:1,column:106049},end:{line:1,column:106056}}],line:1},"1174":{loc:{start:{line:1,column:106079},end:{line:1,column:106162}},type:"cond-expr",locations:[{start:{line:1,column:106097},end:{line:1,column:106105}},{start:{line:1,column:106106},end:{line:1,column:106162}}],line:1},"1175":{loc:{start:{line:1,column:106106},end:{line:1,column:106162}},type:"cond-expr",locations:[{start:{line:1,column:106122},end:{line:1,column:106131}},{start:{line:1,column:106132},end:{line:1,column:106162}}],line:1},"1176":{loc:{start:{line:1,column:106132},end:{line:1,column:106162}},type:"binary-expr",locations:[{start:{line:1,column:106132},end:{line:1,column:106149}},{start:{line:1,column:106152},end:{line:1,column:106161}}],line:1},"1177":{loc:{start:{line:1,column:106319},end:{line:1,column:106716}},type:"cond-expr",locations:[{start:{line:1,column:106330},end:{line:1,column:106512}},{start:{line:1,column:106513},end:{line:1,column:106716}}],line:1},"1178":{loc:{start:{line:1,column:106330},end:{line:1,column:106512}},type:"cond-expr",locations:[{start:{line:1,column:106333},end:{line:1,column:106417}},{start:{line:1,column:106420},end:{line:1,column:106511}}],line:1},"1179":{loc:{start:{line:1,column:106348},end:{line:1,column:106417}},type:"cond-expr",locations:[{start:{line:1,column:106359},end:{line:1,column:106367}},{start:{line:1,column:106368},end:{line:1,column:106417}}],line:1},"1180":{loc:{start:{line:1,column:106368},end:{line:1,column:106417}},type:"cond-expr",locations:[{start:{line:1,column:106382},end:{line:1,column:106399}},{start:{line:1,column:106402},end:{line:1,column:106416}}],line:1},"1181":{loc:{start:{line:1,column:106435},end:{line:1,column:106511}},type:"cond-expr",locations:[{start:{line:1,column:106446},end:{line:1,column:106455}},{start:{line:1,column:106456},end:{line:1,column:106511}}],line:1},"1182":{loc:{start:{line:1,column:106456},end:{line:1,column:106511}},type:"cond-expr",locations:[{start:{line:1,column:106470},end:{line:1,column:106487}},{start:{line:1,column:106490},end:{line:1,column:106510}}],line:1},"1183":{loc:{start:{line:1,column:106513},end:{line:1,column:106716}},type:"cond-expr",locations:[{start:{line:1,column:106525},end:{line:1,column:106706}},{start:{line:1,column:106707},end:{line:1,column:106716}}],line:1},"1184":{loc:{start:{line:1,column:106525},end:{line:1,column:106706}},type:"cond-expr",locations:[{start:{line:1,column:106528},end:{line:1,column:106611}},{start:{line:1,column:106614},end:{line:1,column:106705}}],line:1},"1185":{loc:{start:{line:1,column:106542},end:{line:1,column:106611}},type:"cond-expr",locations:[{start:{line:1,column:106553},end:{line:1,column:106562}},{start:{line:1,column:106563},end:{line:1,column:106611}}],line:1},"1186":{loc:{start:{line:1,column:106563},end:{line:1,column:106611}},type:"cond-expr",locations:[{start:{line:1,column:106577},end:{line:1,column:106594}},{start:{line:1,column:106597},end:{line:1,column:106610}}],line:1},"1187":{loc:{start:{line:1,column:106628},end:{line:1,column:106705}},type:"cond-expr",locations:[{start:{line:1,column:106639},end:{line:1,column:106647}},{start:{line:1,column:106648},end:{line:1,column:106705}}],line:1},"1188":{loc:{start:{line:1,column:106648},end:{line:1,column:106705}},type:"cond-expr",locations:[{start:{line:1,column:106662},end:{line:1,column:106679}},{start:{line:1,column:106682},end:{line:1,column:106704}}],line:1},"1189":{loc:{start:{line:1,column:106755},end:{line:1,column:106791}},type:"if",locations:[{start:{line:1,column:106755},end:{line:1,column:106791}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1190":{loc:{start:{line:1,column:106832},end:{line:1,column:106921}},type:"if",locations:[{start:{line:1,column:106832},end:{line:1,column:106921}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1191":{loc:{start:{line:1,column:106835},end:{line:1,column:106858}},type:"binary-expr",locations:[{start:{line:1,column:106835},end:{line:1,column:106845}},{start:{line:1,column:106847},end:{line:1,column:106858}}],line:1},"1192":{loc:{start:{line:1,column:106921},end:{line:1,column:107008}},type:"if",locations:[{start:{line:1,column:106921},end:{line:1,column:107008}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1193":{loc:{start:{line:1,column:106924},end:{line:1,column:106947}},type:"binary-expr",locations:[{start:{line:1,column:106924},end:{line:1,column:106933}},{start:{line:1,column:106935},end:{line:1,column:106947}}],line:1},"1194":{loc:{start:{line:1,column:107100},end:{line:1,column:107159}},type:"binary-expr",locations:[{start:{line:1,column:107100},end:{line:1,column:107101}},{start:{line:1,column:107104},end:{line:1,column:107158}}],line:1},"1195":{loc:{start:{line:1,column:107208},end:{line:1,column:107251}},type:"if",locations:[{start:{line:1,column:107208},end:{line:1,column:107251}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1196":{loc:{start:{line:1,column:107211},end:{line:1,column:107241}},type:"binary-expr",locations:[{start:{line:1,column:107211},end:{line:1,column:107229}},{start:{line:1,column:107231},end:{line:1,column:107241}}],line:1},"1197":{loc:{start:{line:1,column:107301},end:{line:1,column:107350}},type:"cond-expr",locations:[{start:{line:1,column:107306},end:{line:1,column:107348}},{start:{line:1,column:107349},end:{line:1,column:107350}}],line:1},"1198":{loc:{start:{line:1,column:107400},end:{line:1,column:107472}},type:"binary-expr",locations:[{start:{line:1,column:107400},end:{line:1,column:107419}},{start:{line:1,column:107422},end:{line:1,column:107471}}],line:1},"1199":{loc:{start:{line:1,column:107489},end:{line:1,column:107702}},type:"binary-expr",locations:[{start:{line:1,column:107489},end:{line:1,column:107497}},{start:{line:1,column:107499},end:{line:1,column:107507}},{start:{line:1,column:107510},end:{line:1,column:107701}}],line:1},"1200":{loc:{start:{line:1,column:107575},end:{line:1,column:107591}},type:"binary-expr",locations:[{start:{line:1,column:107575},end:{line:1,column:107587}},{start:{line:1,column:107589},end:{line:1,column:107591}}],line:1},"1201":{loc:{start:{line:1,column:107704},end:{line:1,column:107970}},type:"if",locations:[{start:{line:1,column:107704},end:{line:1,column:107970}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1202":{loc:{start:{line:1,column:107756},end:{line:1,column:107811}},type:"binary-expr",locations:[{start:{line:1,column:107756},end:{line:1,column:107773}},{start:{line:1,column:107775},end:{line:1,column:107811}}],line:1},"1203":{loc:{start:{line:1,column:107812},end:{line:1,column:107969}},type:"binary-expr",locations:[{start:{line:1,column:107812},end:{line:1,column:107823}},{start:{line:1,column:107825},end:{line:1,column:107969}}],line:1},"1204":{loc:{start:{line:1,column:108070},end:{line:1,column:108089}},type:"cond-expr",locations:[{start:{line:1,column:108080},end:{line:1,column:108087}},{start:{line:1,column:108088},end:{line:1,column:108089}}],line:1},"1205":{loc:{start:{line:1,column:108090},end:{line:1,column:108103}},type:"if",locations:[{start:{line:1,column:108090},end:{line:1,column:108103}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1206":{loc:{start:{line:1,column:108180},end:{line:1,column:108313}},type:"cond-expr",locations:[{start:{line:1,column:108201},end:{line:1,column:108255}},{start:{line:1,column:108258},end:{line:1,column:108312}}],line:1},"1207":{loc:{start:{line:1,column:108444},end:{line:1,column:108482}},type:"if",locations:[{start:{line:1,column:108444},end:{line:1,column:108482}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1208":{loc:{start:{line:1,column:108524},end:{line:1,column:108534}},type:"binary-expr",locations:[{start:{line:1,column:108524},end:{line:1,column:108525}},{start:{line:1,column:108527},end:{line:1,column:108534}}],line:1},"1209":{loc:{start:{line:1,column:108645},end:{line:1,column:108653}},type:"binary-expr",locations:[{start:{line:1,column:108645},end:{line:1,column:108646}},{start:{line:1,column:108648},end:{line:1,column:108653}}],line:1},"1210":{loc:{start:{line:1,column:108721},end:{line:1,column:108742}},type:"if",locations:[{start:{line:1,column:108721},end:{line:1,column:108742}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1211":{loc:{start:{line:1,column:108800},end:{line:1,column:108902}},type:"cond-expr",locations:[{start:{line:1,column:108834},end:{line:1,column:108892}},{start:{line:1,column:108894},end:{line:1,column:108902}}],line:1},"1212":{loc:{start:{line:1,column:108800},end:{line:1,column:108832}},type:"binary-expr",locations:[{start:{line:1,column:108800},end:{line:1,column:108812}},{start:{line:1,column:108814},end:{line:1,column:108826}},{start:{line:1,column:108828},end:{line:1,column:108832}}],line:1},"1213":{loc:{start:{line:1,column:108846},end:{line:1,column:108892}},type:"binary-expr",locations:[{start:{line:1,column:108846},end:{line:1,column:108855}},{start:{line:1,column:108858},end:{line:1,column:108891}}],line:1},"1214":{loc:{start:{line:1,column:109088},end:{line:1,column:109201}},type:"binary-expr",locations:[{start:{line:1,column:109088},end:{line:1,column:109105}},{start:{line:1,column:109108},end:{line:1,column:109200}}],line:1},"1215":{loc:{start:{line:1,column:109233},end:{line:1,column:109254}},type:"binary-expr",locations:[{start:{line:1,column:109233},end:{line:1,column:109240}},{start:{line:1,column:109242},end:{line:1,column:109251}},{start:{line:1,column:109253},end:{line:1,column:109254}}],line:1},"1216":{loc:{start:{line:1,column:109259},end:{line:1,column:109275}},type:"binary-expr",locations:[{start:{line:1,column:109259},end:{line:1,column:109265}},{start:{line:1,column:109267},end:{line:1,column:109275}}],line:1},"1217":{loc:{start:{line:1,column:109284},end:{line:1,column:109304}},type:"binary-expr",locations:[{start:{line:1,column:109284},end:{line:1,column:109292}},{start:{line:1,column:109294},end:{line:1,column:109304}}],line:1},"1218":{loc:{start:{line:1,column:109314},end:{line:1,column:109537}},type:"cond-expr",locations:[{start:{line:1,column:109363},end:{line:1,column:109393}},{start:{line:1,column:109394},end:{line:1,column:109537}}],line:1},"1219":{loc:{start:{line:1,column:109314},end:{line:1,column:109362}},type:"binary-expr",locations:[{start:{line:1,column:109314},end:{line:1,column:109332}},{start:{line:1,column:109334},end:{line:1,column:109362}}],line:1},"1220":{loc:{start:{line:1,column:109682},end:{line:1,column:109725}},type:"binary-expr",locations:[{start:{line:1,column:109682},end:{line:1,column:109696}},{start:{line:1,column:109699},end:{line:1,column:109701}},{start:{line:1,column:109703},end:{line:1,column:109713}},{start:{line:1,column:109716},end:{line:1,column:109725}}],line:1},"1221":{loc:{start:{line:1,column:109904},end:{line:1,column:109946}},type:"cond-expr",locations:[{start:{line:1,column:109924},end:{line:1,column:109934}},{start:{line:1,column:109935},end:{line:1,column:109946}}],line:1},"1222":{loc:{start:{line:1,column:110186},end:{line:1,column:110213}},type:"binary-expr",locations:[{start:{line:1,column:110186},end:{line:1,column:110191}},{start:{line:1,column:110194},end:{line:1,column:110212}}],line:1},"1223":{loc:{start:{line:1,column:110257},end:{line:1,column:110309}},type:"if",locations:[{start:{line:1,column:110257},end:{line:1,column:110309}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1224":{loc:{start:{line:1,column:110316},end:{line:1,column:110386}},type:"binary-expr",locations:[{start:{line:1,column:110316},end:{line:1,column:110322}},{start:{line:1,column:110325},end:{line:1,column:110385}}],line:1},"1225":{loc:{start:{line:1,column:110342},end:{line:1,column:110385}},type:"binary-expr",locations:[{start:{line:1,column:110342},end:{line:1,column:110355}},{start:{line:1,column:110357},end:{line:1,column:110385}}],line:1},"1226":{loc:{start:{line:1,column:110468},end:{line:1,column:110487}},type:"binary-expr",locations:[{start:{line:1,column:110468},end:{line:1,column:110474}},{start:{line:1,column:110476},end:{line:1,column:110487}}],line:1},"1227":{loc:{start:{line:1,column:110488},end:{line:1,column:110546}},type:"binary-expr",locations:[{start:{line:1,column:110488},end:{line:1,column:110489}},{start:{line:1,column:110491},end:{line:1,column:110500}},{start:{line:1,column:110503},end:{line:1,column:110545}}],line:1},"1228":{loc:{start:{line:1,column:110518},end:{line:1,column:110545}},type:"binary-expr",locations:[{start:{line:1,column:110518},end:{line:1,column:110531}},{start:{line:1,column:110533},end:{line:1,column:110545}}],line:1},"1229":{loc:{start:{line:1,column:110598},end:{line:1,column:110611}},type:"cond-expr",locations:[{start:{line:1,column:110600},end:{line:1,column:110608}},{start:{line:1,column:110609},end:{line:1,column:110611}}],line:1},"1230":{loc:{start:{line:1,column:110645},end:{line:1,column:110683}},type:"binary-expr",locations:[{start:{line:1,column:110645},end:{line:1,column:110660}},{start:{line:1,column:110662},end:{line:1,column:110683}}],line:1},"1231":{loc:{start:{line:1,column:110684},end:{line:1,column:110726}},type:"binary-expr",locations:[{start:{line:1,column:110684},end:{line:1,column:110697}},{start:{line:1,column:110699},end:{line:1,column:110726}}],line:1},"1232":{loc:{start:{line:1,column:110908},end:{line:1,column:110932}},type:"binary-expr",locations:[{start:{line:1,column:110908},end:{line:1,column:110916}},{start:{line:1,column:110918},end:{line:1,column:110932}}],line:1},"1233":{loc:{start:{line:1,column:111996},end:{line:1,column:112026}},type:"binary-expr",locations:[{start:{line:1,column:111996},end:{line:1,column:111997}},{start:{line:1,column:111999},end:{line:1,column:112026}}],line:1},"1234":{loc:{start:{line:1,column:112027},end:{line:1,column:112151}},type:"cond-expr",locations:[{start:{line:1,column:112069},end:{line:1,column:112086}},{start:{line:1,column:112087},end:{line:1,column:112151}}],line:1},"1235":{loc:{start:{line:1,column:112027},end:{line:1,column:112068}},type:"binary-expr",locations:[{start:{line:1,column:112027},end:{line:1,column:112028}},{start:{line:1,column:112030},end:{line:1,column:112044}},{start:{line:1,column:112046},end:{line:1,column:112062}},{start:{line:1,column:112064},end:{line:1,column:112068}}],line:1},"1236":{loc:{start:{line:1,column:112101},end:{line:1,column:112131}},type:"binary-expr",locations:[{start:{line:1,column:112101},end:{line:1,column:112102}},{start:{line:1,column:112104},end:{line:1,column:112131}}],line:1},"1237":{loc:{start:{line:1,column:112332},end:{line:1,column:112358}},type:"if",locations:[{start:{line:1,column:112332},end:{line:1,column:112358}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1238":{loc:{start:{line:1,column:112406},end:{line:1,column:112474}},type:"if",locations:[{start:{line:1,column:112406},end:{line:1,column:112474}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1239":{loc:{start:{line:1,column:112552},end:{line:1,column:112680}},type:"if",locations:[{start:{line:1,column:112552},end:{line:1,column:112680}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1240":{loc:{start:{line:1,column:112555},end:{line:1,column:112652}},type:"binary-expr",locations:[{start:{line:1,column:112555},end:{line:1,column:112571}},{start:{line:1,column:112574},end:{line:1,column:112651}}],line:1},"1241":{loc:{start:{line:1,column:112686},end:{line:1,column:112739}},type:"cond-expr",locations:[{start:{line:1,column:112688},end:{line:1,column:112718}},{start:{line:1,column:112719},end:{line:1,column:112739}}],line:1},"1242":{loc:{start:{line:1,column:112771},end:{line:1,column:112874}},type:"binary-expr",locations:[{start:{line:1,column:112771},end:{line:1,column:112789}},{start:{line:1,column:112792},end:{line:1,column:112873}}],line:1},"1243":{loc:{start:{line:1,column:112896},end:{line:1,column:112901}},type:"binary-expr",locations:[{start:{line:1,column:112896},end:{line:1,column:112897}},{start:{line:1,column:112899},end:{line:1,column:112901}}],line:1},"1244":{loc:{start:{line:1,column:112958},end:{line:1,column:112997}},type:"if",locations:[{start:{line:1,column:112958},end:{line:1,column:112997}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1245":{loc:{start:{line:1,column:112961},end:{line:1,column:112988}},type:"binary-expr",locations:[{start:{line:1,column:112961},end:{line:1,column:112974}},{start:{line:1,column:112976},end:{line:1,column:112988}}],line:1},"1246":{loc:{start:{line:1,column:113020},end:{line:1,column:113083}},type:"binary-expr",locations:[{start:{line:1,column:113020},end:{line:1,column:113034}},{start:{line:1,column:113037},end:{line:1,column:113082}}],line:1},"1247":{loc:{start:{line:1,column:113100},end:{line:1,column:113134}},type:"if",locations:[{start:{line:1,column:113100},end:{line:1,column:113134}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1248":{loc:{start:{line:1,column:113246},end:{line:1,column:113257}},type:"binary-expr",locations:[{start:{line:1,column:113246},end:{line:1,column:113247}},{start:{line:1,column:113249},end:{line:1,column:113257}}],line:1},"1249":{loc:{start:{line:1,column:113262},end:{line:1,column:113290}},type:"binary-expr",locations:[{start:{line:1,column:113262},end:{line:1,column:113271}},{start:{line:1,column:113273},end:{line:1,column:113290}}],line:1},"1250":{loc:{start:{line:1,column:113310},end:{line:1,column:113335}},type:"cond-expr",locations:[{start:{line:1,column:113321},end:{line:1,column:113323}},{start:{line:1,column:113324},end:{line:1,column:113335}}],line:1},"1251":{loc:{start:{line:1,column:113310},end:{line:1,column:113320}},type:"binary-expr",locations:[{start:{line:1,column:113310},end:{line:1,column:113316}},{start:{line:1,column:113318},end:{line:1,column:113320}}],line:1},"1252":{loc:{start:{line:1,column:113365},end:{line:1,column:113383}},type:"binary-expr",locations:[{start:{line:1,column:113365},end:{line:1,column:113379}},{start:{line:1,column:113381},end:{line:1,column:113383}}],line:1},"1253":{loc:{start:{line:1,column:113642},end:{line:1,column:113655}},type:"binary-expr",locations:[{start:{line:1,column:113642},end:{line:1,column:113651}},{start:{line:1,column:113653},end:{line:1,column:113655}}],line:1},"1254":{loc:{start:{line:1,column:113695},end:{line:1,column:113736}},type:"binary-expr",locations:[{start:{line:1,column:113695},end:{line:1,column:113712}},{start:{line:1,column:113715},end:{line:1,column:113735}}],line:1},"1255":{loc:{start:{line:1,column:113789},end:{line:1,column:113816}},type:"cond-expr",locations:[{start:{line:1,column:113800},end:{line:1,column:113804}},{start:{line:1,column:113805},end:{line:1,column:113816}}],line:1},"1256":{loc:{start:{line:1,column:113789},end:{line:1,column:113799}},type:"binary-expr",locations:[{start:{line:1,column:113789},end:{line:1,column:113791}},{start:{line:1,column:113793},end:{line:1,column:113799}}],line:1},"1257":{loc:{start:{line:1,column:113805},end:{line:1,column:113816}},type:"cond-expr",locations:[{start:{line:1,column:113812},end:{line:1,column:113814}},{start:{line:1,column:113815},end:{line:1,column:113816}}],line:1},"1258":{loc:{start:{line:1,column:113925},end:{line:1,column:114000}},type:"binary-expr",locations:[{start:{line:1,column:113925},end:{line:1,column:113933}},{start:{line:1,column:113935},end:{line:1,column:114000}}],line:1},"1259":{loc:{start:{line:1,column:114107},end:{line:1,column:114140}},type:"binary-expr",locations:[{start:{line:1,column:114107},end:{line:1,column:114108}},{start:{line:1,column:114110},end:{line:1,column:114120}},{start:{line:1,column:114122},end:{line:1,column:114140}}],line:1},"1260":{loc:{start:{line:1,column:114231},end:{line:1,column:114248}},type:"binary-expr",locations:[{start:{line:1,column:114231},end:{line:1,column:114244}},{start:{line:1,column:114246},end:{line:1,column:114248}}],line:1},"1261":{loc:{start:{line:1,column:114255},end:{line:1,column:114321}},type:"binary-expr",locations:[{start:{line:1,column:114255},end:{line:1,column:114290}},{start:{line:1,column:114292},end:{line:1,column:114303}},{start:{line:1,column:114305},end:{line:1,column:114316}},{start:{line:1,column:114318},end:{line:1,column:114321}}],line:1},"1262":{loc:{start:{line:1,column:114256},end:{line:1,column:114279}},type:"binary-expr",locations:[{start:{line:1,column:114256},end:{line:1,column:114275}},{start:{line:1,column:114277},end:{line:1,column:114279}}],line:1},"1263":{loc:{start:{line:1,column:114257},end:{line:1,column:114271}},type:"binary-expr",locations:[{start:{line:1,column:114257},end:{line:1,column:114267}},{start:{line:1,column:114269},end:{line:1,column:114271}}],line:1},"1264":{loc:{start:{line:1,column:114354},end:{line:1,column:114406}},type:"cond-expr",locations:[{start:{line:1,column:114368},end:{line:1,column:114371}},{start:{line:1,column:114372},end:{line:1,column:114406}}],line:1},"1265":{loc:{start:{line:1,column:114372},end:{line:1,column:114406}},type:"binary-expr",locations:[{start:{line:1,column:114372},end:{line:1,column:114385}},{start:{line:1,column:114388},end:{line:1,column:114405}}],line:1},"1266":{loc:{start:{line:1,column:114390},end:{line:1,column:114405}},type:"cond-expr",locations:[{start:{line:1,column:114398},end:{line:1,column:114401}},{start:{line:1,column:114402},end:{line:1,column:114405}}],line:1},"1267":{loc:{start:{line:1,column:114433},end:{line:1,column:114458}},type:"cond-expr",locations:[{start:{line:1,column:114439},end:{line:1,column:114448}},{start:{line:1,column:114449},end:{line:1,column:114458}}],line:1},"1268":{loc:{start:{line:1,column:114474},end:{line:1,column:114511}},type:"if",locations:[{start:{line:1,column:114474},end:{line:1,column:114511}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1269":{loc:{start:{line:1,column:114477},end:{line:1,column:114502}},type:"binary-expr",locations:[{start:{line:1,column:114477},end:{line:1,column:114484}},{start:{line:1,column:114486},end:{line:1,column:114493}},{start:{line:1,column:114495},end:{line:1,column:114502}}],line:1},"1270":{loc:{start:{line:1,column:114527},end:{line:1,column:114564}},type:"if",locations:[{start:{line:1,column:114527},end:{line:1,column:114564}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1271":{loc:{start:{line:1,column:114530},end:{line:1,column:114553}},type:"binary-expr",locations:[{start:{line:1,column:114530},end:{line:1,column:114539}},{start:{line:1,column:114541},end:{line:1,column:114553}}],line:1},"1272":{loc:{start:{line:1,column:114564},end:{line:1,column:114600}},type:"if",locations:[{start:{line:1,column:114564},end:{line:1,column:114600}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1273":{loc:{start:{line:1,column:114567},end:{line:1,column:114590}},type:"binary-expr",locations:[{start:{line:1,column:114567},end:{line:1,column:114577}},{start:{line:1,column:114579},end:{line:1,column:114590}}],line:1},"1274":{loc:{start:{line:1,column:114621},end:{line:1,column:114639}},type:"if",locations:[{start:{line:1,column:114621},end:{line:1,column:114639}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1275":{loc:{start:{line:1,column:114661},end:{line:1,column:114719}},type:"binary-expr",locations:[{start:{line:1,column:114661},end:{line:1,column:114667}},{start:{line:1,column:114669},end:{line:1,column:114683}},{start:{line:1,column:114685},end:{line:1,column:114695}},{start:{line:1,column:114697},end:{line:1,column:114719}}],line:1},"1276":{loc:{start:{line:1,column:114720},end:{line:1,column:114733}},type:"if",locations:[{start:{line:1,column:114720},end:{line:1,column:114733}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1277":{loc:{start:{line:1,column:114854},end:{line:1,column:114889}},type:"if",locations:[{start:{line:1,column:114854},end:{line:1,column:114889}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1278":{loc:{start:{line:1,column:114907},end:{line:1,column:115047}},type:"if",locations:[{start:{line:1,column:114907},end:{line:1,column:115047}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1279":{loc:{start:{line:1,column:114910},end:{line:1,column:114933}},type:"binary-expr",locations:[{start:{line:1,column:114910},end:{line:1,column:114916}},{start:{line:1,column:114918},end:{line:1,column:114933}}],line:1},"1280":{loc:{start:{line:1,column:114967},end:{line:1,column:114995}},type:"binary-expr",locations:[{start:{line:1,column:114967},end:{line:1,column:114980}},{start:{line:1,column:114982},end:{line:1,column:114995}}],line:1},"1281":{loc:{start:{line:1,column:114997},end:{line:1,column:115046}},type:"if",locations:[{start:{line:1,column:114997},end:{line:1,column:115046}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1282":{loc:{start:{line:1,column:115016},end:{line:1,column:115046}},type:"binary-expr",locations:[{start:{line:1,column:115016},end:{line:1,column:115030}},{start:{line:1,column:115032},end:{line:1,column:115046}}],line:1},"1283":{loc:{start:{line:1,column:115079},end:{line:1,column:115102}},type:"binary-expr",locations:[{start:{line:1,column:115079},end:{line:1,column:115089}},{start:{line:1,column:115091},end:{line:1,column:115102}}],line:1},"1284":{loc:{start:{line:1,column:115105},end:{line:1,column:115117}},type:"binary-expr",locations:[{start:{line:1,column:115105},end:{line:1,column:115113}},{start:{line:1,column:115115},end:{line:1,column:115117}}],line:1},"1285":{loc:{start:{line:1,column:115200},end:{line:1,column:115277}},type:"if",locations:[{start:{line:1,column:115200},end:{line:1,column:115277}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1286":{loc:{start:{line:1,column:115277},end:{line:1,column:115364}},type:"if",locations:[{start:{line:1,column:115277},end:{line:1,column:115364}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1287":{loc:{start:{line:1,column:115415},end:{line:1,column:115427}},type:"binary-expr",locations:[{start:{line:1,column:115415},end:{line:1,column:115423}},{start:{line:1,column:115425},end:{line:1,column:115427}}],line:1},"1288":{loc:{start:{line:1,column:115516},end:{line:1,column:115530}},type:"binary-expr",locations:[{start:{line:1,column:115516},end:{line:1,column:115522}},{start:{line:1,column:115524},end:{line:1,column:115530}}],line:1},"1289":{loc:{start:{line:1,column:115533},end:{line:1,column:115553}},type:"binary-expr",locations:[{start:{line:1,column:115533},end:{line:1,column:115544}},{start:{line:1,column:115546},end:{line:1,column:115553}}],line:1},"1290":{loc:{start:{line:1,column:115556},end:{line:1,column:115578}},type:"binary-expr",locations:[{start:{line:1,column:115556},end:{line:1,column:115574}},{start:{line:1,column:115576},end:{line:1,column:115578}}],line:1},"1291":{loc:{start:{line:1,column:115557},end:{line:1,column:115566}},type:"binary-expr",locations:[{start:{line:1,column:115557},end:{line:1,column:115562}},{start:{line:1,column:115564},end:{line:1,column:115566}}],line:1},"1292":{loc:{start:{line:1,column:115622},end:{line:1,column:115638}},type:"binary-expr",locations:[{start:{line:1,column:115622},end:{line:1,column:115635}},{start:{line:1,column:115637},end:{line:1,column:115638}}],line:1},"1293":{loc:{start:{line:1,column:115644},end:{line:1,column:115669}},type:"binary-expr",locations:[{start:{line:1,column:115644},end:{line:1,column:115648}},{start:{line:1,column:115650},end:{line:1,column:115669}}],line:1},"1294":{loc:{start:{line:1,column:115800},end:{line:1,column:115825}},type:"binary-expr",locations:[{start:{line:1,column:115800},end:{line:1,column:115809}},{start:{line:1,column:115812},end:{line:1,column:115824}}],line:1},"1295":{loc:{start:{line:1,column:115893},end:{line:1,column:115898}},type:"binary-expr",locations:[{start:{line:1,column:115893},end:{line:1,column:115894}},{start:{line:1,column:115896},end:{line:1,column:115898}}],line:1},"1296":{loc:{start:{line:1,column:115910},end:{line:1,column:115924}},type:"binary-expr",locations:[{start:{line:1,column:115910},end:{line:1,column:115920}},{start:{line:1,column:115922},end:{line:1,column:115924}}],line:1},"1297":{loc:{start:{line:1,column:115934},end:{line:1,column:115946}},type:"binary-expr",locations:[{start:{line:1,column:115934},end:{line:1,column:115942}},{start:{line:1,column:115944},end:{line:1,column:115946}}],line:1},"1298":{loc:{start:{line:1,column:115973},end:{line:1,column:115978}},type:"binary-expr",locations:[{start:{line:1,column:115973},end:{line:1,column:115974}},{start:{line:1,column:115976},end:{line:1,column:115978}}],line:1},"1299":{loc:{start:{line:1,column:116071},end:{line:1,column:116103}},type:"binary-expr",locations:[{start:{line:1,column:116071},end:{line:1,column:116072}},{start:{line:1,column:116075},end:{line:1,column:116102}}],line:1},"1300":{loc:{start:{line:1,column:116137},end:{line:1,column:116157}},type:"binary-expr",locations:[{start:{line:1,column:116137},end:{line:1,column:116147}},{start:{line:1,column:116149},end:{line:1,column:116157}}],line:1},"1301":{loc:{start:{line:1,column:117105},end:{line:1,column:117133}},type:"binary-expr",locations:[{start:{line:1,column:117105},end:{line:1,column:117129}},{start:{line:1,column:117131},end:{line:1,column:117133}}],line:1},"1302":{loc:{start:{line:1,column:117196},end:{line:1,column:117227}},type:"binary-expr",locations:[{start:{line:1,column:117197},end:{line:1,column:117199}},{start:{line:1,column:117201},end:{line:1,column:117202}},{start:{line:1,column:117206},end:{line:1,column:117226}}],line:1},"1303":{loc:{start:{line:1,column:117317},end:{line:1,column:117331}},type:"if",locations:[{start:{line:1,column:117317},end:{line:1,column:117331}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1304":{loc:{start:{line:1,column:117359},end:{line:1,column:117396}},type:"binary-expr",locations:[{start:{line:1,column:117359},end:{line:1,column:117360}},{start:{line:1,column:117363},end:{line:1,column:117395}}],line:1},"1305":{loc:{start:{line:1,column:117439},end:{line:1,column:117448}},type:"binary-expr",locations:[{start:{line:1,column:117439},end:{line:1,column:117444}},{start:{line:1,column:117446},end:{line:1,column:117448}}],line:1},"1306":{loc:{start:{line:1,column:117531},end:{line:1,column:117572}},type:"binary-expr",locations:[{start:{line:1,column:117531},end:{line:1,column:117543}},{start:{line:1,column:117545},end:{line:1,column:117572}}],line:1},"1307":{loc:{start:{line:1,column:117573},end:{line:1,column:117594}},type:"binary-expr",locations:[{start:{line:1,column:117573},end:{line:1,column:117582}},{start:{line:1,column:117584},end:{line:1,column:117594}}],line:1},"1308":{loc:{start:{line:1,column:117653},end:{line:1,column:117662}},type:"binary-expr",locations:[{start:{line:1,column:117653},end:{line:1,column:117658}},{start:{line:1,column:117660},end:{line:1,column:117662}}],line:1},"1309":{loc:{start:{line:1,column:117663},end:{line:1,column:117680}},type:"binary-expr",locations:[{start:{line:1,column:117663},end:{line:1,column:117676}},{start:{line:1,column:117678},end:{line:1,column:117680}}],line:1},"1310":{loc:{start:{line:1,column:117722},end:{line:1,column:117728}},type:"default-arg",locations:[{start:{line:1,column:117724},end:{line:1,column:117728}}],line:1},"1311":{loc:{start:{line:1,column:117808},end:{line:1,column:117892}},type:"if",locations:[{start:{line:1,column:117808},end:{line:1,column:117892}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1312":{loc:{start:{line:1,column:117835},end:{line:1,column:117846}},type:"cond-expr",locations:[{start:{line:1,column:117841},end:{line:1,column:117844}},{start:{line:1,column:117845},end:{line:1,column:117846}}],line:1},"1313":{loc:{start:{line:1,column:117945},end:{line:1,column:117951}},type:"default-arg",locations:[{start:{line:1,column:117947},end:{line:1,column:117951}}],line:1},"1314":{loc:{start:{line:1,column:118006},end:{line:1,column:118029}},type:"cond-expr",locations:[{start:{line:1,column:118011},end:{line:1,column:118027}},{start:{line:1,column:118028},end:{line:1,column:118029}}],line:1},"1315":{loc:{start:{line:1,column:118066},end:{line:1,column:118091}},type:"binary-expr",locations:[{start:{line:1,column:118066},end:{line:1,column:118067}},{start:{line:1,column:118070},end:{line:1,column:118090}}],line:1},"1316":{loc:{start:{line:1,column:118125},end:{line:1,column:118221}},type:"binary-expr",locations:[{start:{line:1,column:118125},end:{line:1,column:118126}},{start:{line:1,column:118129},end:{line:1,column:118220}}],line:1},"1317":{loc:{start:{line:1,column:118234},end:{line:1,column:118287}},type:"binary-expr",locations:[{start:{line:1,column:118234},end:{line:1,column:118238}},{start:{line:1,column:118240},end:{line:1,column:118287}}],line:1},"1318":{loc:{start:{line:1,column:118381},end:{line:1,column:118393}},type:"binary-expr",locations:[{start:{line:1,column:118382},end:{line:1,column:118383}},{start:{line:1,column:118385},end:{line:1,column:118386}},{start:{line:1,column:118389},end:{line:1,column:118393}}],line:1},"1319":{loc:{start:{line:1,column:118394},end:{line:1,column:118432}},type:"if",locations:[{start:{line:1,column:118394},end:{line:1,column:118432}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1320":{loc:{start:{line:1,column:118397},end:{line:1,column:118423}},type:"binary-expr",locations:[{start:{line:1,column:118397},end:{line:1,column:118398}},{start:{line:1,column:118401},end:{line:1,column:118406}},{start:{line:1,column:118408},end:{line:1,column:118413}},{start:{line:1,column:118416},end:{line:1,column:118417}},{start:{line:1,column:118419},end:{line:1,column:118423}}],line:1},"1321":{loc:{start:{line:1,column:118528},end:{line:1,column:118580}},type:"binary-expr",locations:[{start:{line:1,column:118528},end:{line:1,column:118537}},{start:{line:1,column:118539},end:{line:1,column:118551}},{start:{line:1,column:118553},end:{line:1,column:118571}},{start:{line:1,column:118573},end:{line:1,column:118580}}],line:1},"1322":{loc:{start:{line:1,column:118626},end:{line:1,column:118657}},type:"cond-expr",locations:[{start:{line:1,column:118638},end:{line:1,column:118647}},{start:{line:1,column:118648},end:{line:1,column:118657}}],line:1},"1323":{loc:{start:{line:1,column:118743},end:{line:1,column:118758}},type:"binary-expr",locations:[{start:{line:1,column:118743},end:{line:1,column:118744}},{start:{line:1,column:118746},end:{line:1,column:118758}}],line:1},"1324":{loc:{start:{line:1,column:118819},end:{line:1,column:118834}},type:"binary-expr",locations:[{start:{line:1,column:118819},end:{line:1,column:118820}},{start:{line:1,column:118822},end:{line:1,column:118834}}],line:1},"1325":{loc:{start:{line:1,column:118864},end:{line:1,column:118939}},type:"cond-expr",locations:[{start:{line:1,column:118889},end:{line:1,column:118917}},{start:{line:1,column:118918},end:{line:1,column:118939}}],line:1},"1326":{loc:{start:{line:1,column:118864},end:{line:1,column:118888}},type:"binary-expr",locations:[{start:{line:1,column:118864},end:{line:1,column:118868}},{start:{line:1,column:118870},end:{line:1,column:118888}}],line:1},"1327":{loc:{start:{line:1,column:118918},end:{line:1,column:118939}},type:"binary-expr",locations:[{start:{line:1,column:118918},end:{line:1,column:118919}},{start:{line:1,column:118921},end:{line:1,column:118929}},{start:{line:1,column:118932},end:{line:1,column:118938}}],line:1},"1328":{loc:{start:{line:1,column:118940},end:{line:1,column:118965}},type:"binary-expr",locations:[{start:{line:1,column:118940},end:{line:1,column:118941}},{start:{line:1,column:118943},end:{line:1,column:118951}},{start:{line:1,column:118954},end:{line:1,column:118964}}],line:1},"1329":{loc:{start:{line:1,column:119118},end:{line:1,column:119173}},type:"if",locations:[{start:{line:1,column:119118},end:{line:1,column:119173}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1330":{loc:{start:{line:1,column:119150},end:{line:1,column:119172}},type:"binary-expr",locations:[{start:{line:1,column:119151},end:{line:1,column:119154}},{start:{line:1,column:119156},end:{line:1,column:119159}},{start:{line:1,column:119163},end:{line:1,column:119171}}],line:1},"1331":{loc:{start:{line:1,column:119202},end:{line:1,column:119236}},type:"cond-expr",locations:[{start:{line:1,column:119226},end:{line:1,column:119230}},{start:{line:1,column:119231},end:{line:1,column:119236}}],line:1},"1332":{loc:{start:{line:1,column:119202},end:{line:1,column:119225}},type:"binary-expr",locations:[{start:{line:1,column:119202},end:{line:1,column:119204}},{start:{line:1,column:119206},end:{line:1,column:119225}}],line:1},"1333":{loc:{start:{line:1,column:119231},end:{line:1,column:119236}},type:"cond-expr",locations:[{start:{line:1,column:119233},end:{line:1,column:119234}},{start:{line:1,column:119235},end:{line:1,column:119236}}],line:1},"1334":{loc:{start:{line:1,column:119518},end:{line:1,column:119670}},type:"if",locations:[{start:{line:1,column:119518},end:{line:1,column:119670}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1335":{loc:{start:{line:1,column:119752},end:{line:1,column:119769}},type:"binary-expr",locations:[{start:{line:1,column:119752},end:{line:1,column:119762}},{start:{line:1,column:119764},end:{line:1,column:119769}}],line:1},"1336":{loc:{start:{line:1,column:119855},end:{line:1,column:119866}},type:"binary-expr",locations:[{start:{line:1,column:119855},end:{line:1,column:119856}},{start:{line:1,column:119858},end:{line:1,column:119866}}],line:1},"1337":{loc:{start:{line:1,column:119869},end:{line:1,column:119880}},type:"binary-expr",locations:[{start:{line:1,column:119869},end:{line:1,column:119870}},{start:{line:1,column:119872},end:{line:1,column:119880}}],line:1},"1338":{loc:{start:{line:1,column:119883},end:{line:1,column:119893}},type:"binary-expr",locations:[{start:{line:1,column:119883},end:{line:1,column:119884}},{start:{line:1,column:119886},end:{line:1,column:119893}}],line:1},"1339":{loc:{start:{line:1,column:119894},end:{line:1,column:120590}},type:"if",locations:[{start:{line:1,column:119894},end:{line:1,column:120590}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1340":{loc:{start:{line:1,column:120436},end:{line:1,column:120452}},type:"binary-expr",locations:[{start:{line:1,column:120436},end:{line:1,column:120449}},{start:{line:1,column:120451},end:{line:1,column:120452}}],line:1},"1341":{loc:{start:{line:1,column:120492},end:{line:1,column:120498}},type:"binary-expr",locations:[{start:{line:1,column:120492},end:{line:1,column:120494}},{start:{line:1,column:120496},end:{line:1,column:120498}}],line:1},"1342":{loc:{start:{line:1,column:120669},end:{line:1,column:120697}},type:"binary-expr",locations:[{start:{line:1,column:120669},end:{line:1,column:120682}},{start:{line:1,column:120684},end:{line:1,column:120697}}],line:1},"1343":{loc:{start:{line:1,column:120811},end:{line:1,column:120835}},type:"cond-expr",locations:[{start:{line:1,column:120816},end:{line:1,column:120833}},{start:{line:1,column:120834},end:{line:1,column:120835}}],line:1},"1344":{loc:{start:{line:1,column:120816},end:{line:1,column:120833}},type:"cond-expr",locations:[{start:{line:1,column:120821},end:{line:1,column:120822}},{start:{line:1,column:120823},end:{line:1,column:120833}}],line:1},"1345":{loc:{start:{line:1,column:120816},end:{line:1,column:120820}},type:"binary-expr",locations:[{start:{line:1,column:120816},end:{line:1,column:120817}},{start:{line:1,column:120819},end:{line:1,column:120820}}],line:1},"1346":{loc:{start:{line:1,column:120823},end:{line:1,column:120833}},type:"cond-expr",locations:[{start:{line:1,column:120825},end:{line:1,column:120828}},{start:{line:1,column:120829},end:{line:1,column:120833}}],line:1},"1347":{loc:{start:{line:1,column:121053},end:{line:1,column:121129}},type:"cond-expr",locations:[{start:{line:1,column:121077},end:{line:1,column:121090}},{start:{line:1,column:121091},end:{line:1,column:121129}}],line:1},"1348":{loc:{start:{line:1,column:121275},end:{line:1,column:121351}},type:"cond-expr",locations:[{start:{line:1,column:121292},end:{line:1,column:121333}},{start:{line:1,column:121334},end:{line:1,column:121351}}],line:1},"1349":{loc:{start:{line:1,column:121400},end:{line:1,column:121439}},type:"binary-expr",locations:[{start:{line:1,column:121400},end:{line:1,column:121421}},{start:{line:1,column:121423},end:{line:1,column:121439}}],line:1},"1350":{loc:{start:{line:1,column:121482},end:{line:1,column:121537}},type:"binary-expr",locations:[{start:{line:1,column:121482},end:{line:1,column:121500}},{start:{line:1,column:121502},end:{line:1,column:121537}}],line:1},"1351":{loc:{start:{line:1,column:121540},end:{line:1,column:121568}},type:"cond-expr",locations:[{start:{line:1,column:121551},end:{line:1,column:121559}},{start:{line:1,column:121560},end:{line:1,column:121568}}],line:1},"1352":{loc:{start:{line:1,column:121644},end:{line:1,column:121774}},type:"binary-expr",locations:[{start:{line:1,column:121644},end:{line:1,column:121657}},{start:{line:1,column:121660},end:{line:1,column:121773}}],line:1},"1353":{loc:{start:{line:1,column:121726},end:{line:1,column:121773}},type:"binary-expr",locations:[{start:{line:1,column:121726},end:{line:1,column:121739}},{start:{line:1,column:121741},end:{line:1,column:121758}},{start:{line:1,column:121760},end:{line:1,column:121773}}],line:1},"1354":{loc:{start:{line:1,column:121803},end:{line:1,column:121826}},type:"binary-expr",locations:[{start:{line:1,column:121803},end:{line:1,column:121822}},{start:{line:1,column:121824},end:{line:1,column:121826}}],line:1},"1355":{loc:{start:{line:1,column:121966},end:{line:1,column:122153}},type:"binary-expr",locations:[{start:{line:1,column:121966},end:{line:1,column:121967}},{start:{line:1,column:121970},end:{line:1,column:122152}}],line:1},"1356":{loc:{start:{line:1,column:122072},end:{line:1,column:122103}},type:"cond-expr",locations:[{start:{line:1,column:122074},end:{line:1,column:122085}},{start:{line:1,column:122086},end:{line:1,column:122103}}],line:1},"1357":{loc:{start:{line:1,column:122086},end:{line:1,column:122103}},type:"cond-expr",locations:[{start:{line:1,column:122088},end:{line:1,column:122096}},{start:{line:1,column:122097},end:{line:1,column:122103}}],line:1},"1358":{loc:{start:{line:1,column:122110},end:{line:1,column:122148}},type:"cond-expr",locations:[{start:{line:1,column:122112},end:{line:1,column:122126}},{start:{line:1,column:122127},end:{line:1,column:122148}}],line:1},"1359":{loc:{start:{line:1,column:122127},end:{line:1,column:122148}},type:"cond-expr",locations:[{start:{line:1,column:122129},end:{line:1,column:122139}},{start:{line:1,column:122140},end:{line:1,column:122148}}],line:1},"1360":{loc:{start:{line:1,column:122215},end:{line:1,column:122298}},type:"binary-expr",locations:[{start:{line:1,column:122216},end:{line:1,column:122235}},{start:{line:1,column:122237},end:{line:1,column:122271}},{start:{line:1,column:122275},end:{line:1,column:122297}}],line:1},"1361":{loc:{start:{line:1,column:122318},end:{line:1,column:122433}},type:"if",locations:[{start:{line:1,column:122318},end:{line:1,column:122433}},{start:{line:1,column:122354},end:{line:1,column:122433}}],line:1},"1362":{loc:{start:{line:1,column:122321},end:{line:1,column:122342}},type:"binary-expr",locations:[{start:{line:1,column:122321},end:{line:1,column:122327}},{start:{line:1,column:122329},end:{line:1,column:122342}}],line:1},"1363":{loc:{start:{line:1,column:122459},end:{line:1,column:122473}},type:"binary-expr",locations:[{start:{line:1,column:122459},end:{line:1,column:122460}},{start:{line:1,column:122462},end:{line:1,column:122473}}],line:1},"1364":{loc:{start:{line:1,column:122611},end:{line:1,column:122714}},type:"if",locations:[{start:{line:1,column:122611},end:{line:1,column:122714}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1365":{loc:{start:{line:1,column:122842},end:{line:1,column:122880}},type:"binary-expr",locations:[{start:{line:1,column:122842},end:{line:1,column:122859}},{start:{line:1,column:122861},end:{line:1,column:122880}}],line:1},"1366":{loc:{start:{line:1,column:122899},end:{line:1,column:122966}},type:"binary-expr",locations:[{start:{line:1,column:122899},end:{line:1,column:122937}},{start:{line:1,column:122939},end:{line:1,column:122966}}],line:1},"1367":{loc:{start:{line:1,column:123131},end:{line:1,column:123155}},type:"binary-expr",locations:[{start:{line:1,column:123131},end:{line:1,column:123137}},{start:{line:1,column:123139},end:{line:1,column:123155}}],line:1},"1368":{loc:{start:{line:1,column:123156},end:{line:1,column:123662}},type:"if",locations:[{start:{line:1,column:123156},end:{line:1,column:123662}},{start:{line:1,column:123441},end:{line:1,column:123662}}],line:1},"1369":{loc:{start:{line:1,column:123159},end:{line:1,column:123233}},type:"binary-expr",locations:[{start:{line:1,column:123159},end:{line:1,column:123165}},{start:{line:1,column:123167},end:{line:1,column:123177}},{start:{line:1,column:123180},end:{line:1,column:123232}}],line:1},"1370":{loc:{start:{line:1,column:123255},end:{line:1,column:123286}},type:"binary-expr",locations:[{start:{line:1,column:123255},end:{line:1,column:123266}},{start:{line:1,column:123268},end:{line:1,column:123286}}],line:1},"1371":{loc:{start:{line:1,column:123295},end:{line:1,column:123305}},type:"binary-expr",locations:[{start:{line:1,column:123295},end:{line:1,column:123302}},{start:{line:1,column:123304},end:{line:1,column:123305}}],line:1},"1372":{loc:{start:{line:1,column:123592},end:{line:1,column:123611}},type:"binary-expr",locations:[{start:{line:1,column:123592},end:{line:1,column:123593}},{start:{line:1,column:123595},end:{line:1,column:123611}}],line:1},"1373":{loc:{start:{line:1,column:124005},end:{line:1,column:124181}},type:"if",locations:[{start:{line:1,column:124005},end:{line:1,column:124181}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1374":{loc:{start:{line:1,column:124362},end:{line:1,column:124383}},type:"binary-expr",locations:[{start:{line:1,column:124362},end:{line:1,column:124364}},{start:{line:1,column:124366},end:{line:1,column:124383}}],line:1},"1375":{loc:{start:{line:1,column:124464},end:{line:1,column:124488}},type:"cond-expr",locations:[{start:{line:1,column:124485},end:{line:1,column:124486}},{start:{line:1,column:124487},end:{line:1,column:124488}}],line:1},"1376":{loc:{start:{line:1,column:124511},end:{line:1,column:124533}},type:"binary-expr",locations:[{start:{line:1,column:124511},end:{line:1,column:124512}},{start:{line:1,column:124514},end:{line:1,column:124533}}],line:1},"1377":{loc:{start:{line:1,column:124668},end:{line:1,column:124736}},type:"cond-expr",locations:[{start:{line:1,column:124670},end:{line:1,column:124694}},{start:{line:1,column:124695},end:{line:1,column:124736}}],line:1},"1378":{loc:{start:{line:1,column:124695},end:{line:1,column:124736}},type:"binary-expr",locations:[{start:{line:1,column:124695},end:{line:1,column:124703}},{start:{line:1,column:124705},end:{line:1,column:124736}}],line:1},"1379":{loc:{start:{line:1,column:124962},end:{line:1,column:125057}},type:"binary-expr",locations:[{start:{line:1,column:124963},end:{line:1,column:124971}},{start:{line:1,column:124973},end:{line:1,column:125015}},{start:{line:1,column:125019},end:{line:1,column:125056}}],line:1},"1380":{loc:{start:{line:1,column:125110},end:{line:1,column:125143}},type:"binary-expr",locations:[{start:{line:1,column:125110},end:{line:1,column:125139}},{start:{line:1,column:125141},end:{line:1,column:125143}}],line:1},"1381":{loc:{start:{line:1,column:125189},end:{line:1,column:125215}},type:"cond-expr",locations:[{start:{line:1,column:125211},end:{line:1,column:125213}},{start:{line:1,column:125214},end:{line:1,column:125215}}],line:1},"1382":{loc:{start:{line:1,column:125276},end:{line:1,column:125300}},type:"if",locations:[{start:{line:1,column:125276},end:{line:1,column:125300}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1383":{loc:{start:{line:1,column:125279},end:{line:1,column:125292}},type:"binary-expr",locations:[{start:{line:1,column:125279},end:{line:1,column:125281}},{start:{line:1,column:125283},end:{line:1,column:125292}}],line:1},"1384":{loc:{start:{line:1,column:125456},end:{line:1,column:125478}},type:"if",locations:[{start:{line:1,column:125456},end:{line:1,column:125478}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1385":{loc:{start:{line:1,column:125585},end:{line:1,column:125651}},type:"if",locations:[{start:{line:1,column:125585},end:{line:1,column:125651}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1386":{loc:{start:{line:1,column:125714},end:{line:1,column:125737}},type:"binary-expr",locations:[{start:{line:1,column:125714},end:{line:1,column:125724}},{start:{line:1,column:125726},end:{line:1,column:125737}}],line:1},"1387":{loc:{start:{line:1,column:125771},end:{line:1,column:125862}},type:"binary-expr",locations:[{start:{line:1,column:125771},end:{line:1,column:125772}},{start:{line:1,column:125774},end:{line:1,column:125798}},{start:{line:1,column:125801},end:{line:1,column:125861}}],line:1},"1388":{loc:{start:{line:1,column:125801},end:{line:1,column:125827}},type:"binary-expr",locations:[{start:{line:1,column:125801},end:{line:1,column:125812}},{start:{line:1,column:125814},end:{line:1,column:125827}}],line:1},"1389":{loc:{start:{line:1,column:125963},end:{line:1,column:126282}},type:"if",locations:[{start:{line:1,column:125963},end:{line:1,column:126282}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1390":{loc:{start:{line:1,column:126202},end:{line:1,column:126229}},type:"cond-expr",locations:[{start:{line:1,column:126208},end:{line:1,column:126227}},{start:{line:1,column:126228},end:{line:1,column:126229}}],line:1},"1391":{loc:{start:{line:1,column:126372},end:{line:1,column:126506}},type:"binary-expr",locations:[{start:{line:1,column:126372},end:{line:1,column:126420}},{start:{line:1,column:126423},end:{line:1,column:126505}}],line:1},"1392":{loc:{start:{line:1,column:126516},end:{line:1,column:126667}},type:"binary-expr",locations:[{start:{line:1,column:126516},end:{line:1,column:126571}},{start:{line:1,column:126574},end:{line:1,column:126666}}],line:1},"1393":{loc:{start:{line:1,column:126574},end:{line:1,column:126666}},type:"cond-expr",locations:[{start:{line:1,column:126587},end:{line:1,column:126635}},{start:{line:1,column:126637},end:{line:1,column:126665}}],line:1},"1394":{loc:{start:{line:1,column:126587},end:{line:1,column:126635}},type:"binary-expr",locations:[{start:{line:1,column:126587},end:{line:1,column:126600}},{start:{line:1,column:126602},end:{line:1,column:126619}},{start:{line:1,column:126621},end:{line:1,column:126635}}],line:1},"1395":{loc:{start:{line:1,column:126681},end:{line:1,column:126799}},type:"if",locations:[{start:{line:1,column:126681},end:{line:1,column:126799}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1396":{loc:{start:{line:1,column:126799},end:{line:1,column:126907}},type:"if",locations:[{start:{line:1,column:126799},end:{line:1,column:126907}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1397":{loc:{start:{line:1,column:126815},end:{line:1,column:126899}},type:"binary-expr",locations:[{start:{line:1,column:126815},end:{line:1,column:126828}},{start:{line:1,column:126830},end:{line:1,column:126844}},{start:{line:1,column:126846},end:{line:1,column:126899}}],line:1},"1398":{loc:{start:{line:1,column:126934},end:{line:1,column:126955}},type:"binary-expr",locations:[{start:{line:1,column:126934},end:{line:1,column:126944}},{start:{line:1,column:126946},end:{line:1,column:126955}}],line:1},"1399":{loc:{start:{line:1,column:127185},end:{line:1,column:127211}},type:"binary-expr",locations:[{start:{line:1,column:127186},end:{line:1,column:127188}},{start:{line:1,column:127190},end:{line:1,column:127199}},{start:{line:1,column:127202},end:{line:1,column:127211}}],line:1},"1400":{loc:{start:{line:1,column:127307},end:{line:1,column:127379}},type:"if",locations:[{start:{line:1,column:127307},end:{line:1,column:127379}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1401":{loc:{start:{line:1,column:127598},end:{line:1,column:127744}},type:"binary-expr",locations:[{start:{line:1,column:127598},end:{line:1,column:127644}},{start:{line:1,column:127647},end:{line:1,column:127743}}],line:1},"1402":{loc:{start:{line:1,column:127647},end:{line:1,column:127657}},type:"binary-expr",locations:[{start:{line:1,column:127647},end:{line:1,column:127648}},{start:{line:1,column:127650},end:{line:1,column:127657}}],line:1},"1403":{loc:{start:{line:1,column:127678},end:{line:1,column:127686}},type:"binary-expr",locations:[{start:{line:1,column:127678},end:{line:1,column:127679}},{start:{line:1,column:127681},end:{line:1,column:127686}}],line:1},"1404":{loc:{start:{line:1,column:127867},end:{line:1,column:127904}},type:"cond-expr",locations:[{start:{line:1,column:127888},end:{line:1,column:127901}},{start:{line:1,column:127902},end:{line:1,column:127904}}],line:1},"1405":{loc:{start:{line:1,column:127982},end:{line:1,column:127999}},type:"binary-expr",locations:[{start:{line:1,column:127982},end:{line:1,column:127983}},{start:{line:1,column:127985},end:{line:1,column:127999}}],line:1},"1406":{loc:{start:{line:1,column:128014},end:{line:1,column:128178}},type:"binary-expr",locations:[{start:{line:1,column:128014},end:{line:1,column:128015}},{start:{line:1,column:128018},end:{line:1,column:128177}}],line:1},"1407":{loc:{start:{line:1,column:128112},end:{line:1,column:128125}},type:"binary-expr",locations:[{start:{line:1,column:128112},end:{line:1,column:128113}},{start:{line:1,column:128115},end:{line:1,column:128122}},{start:{line:1,column:128124},end:{line:1,column:128125}}],line:1},"1408":{loc:{start:{line:1,column:128201},end:{line:1,column:128266}},type:"binary-expr",locations:[{start:{line:1,column:128201},end:{line:1,column:128214}},{start:{line:1,column:128217},end:{line:1,column:128265}}],line:1},"1409":{loc:{start:{line:1,column:128390},end:{line:1,column:128405}},type:"if",locations:[{start:{line:1,column:128390},end:{line:1,column:128405}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1410":{loc:{start:{line:1,column:128441},end:{line:1,column:128487}},type:"cond-expr",locations:[{start:{line:1,column:128468},end:{line:1,column:128477}},{start:{line:1,column:128478},end:{line:1,column:128487}}],line:1},"1411":{loc:{start:{line:1,column:128708},end:{line:1,column:128723}},type:"cond-expr",locations:[{start:{line:1,column:128710},end:{line:1,column:128716}},{start:{line:1,column:128717},end:{line:1,column:128723}}],line:1},"1412":{loc:{start:{line:1,column:128793},end:{line:1,column:128935}},type:"cond-expr",locations:[{start:{line:1,column:128800},end:{line:1,column:128833}},{start:{line:1,column:128836},end:{line:1,column:128934}}],line:1},"1413":{loc:{start:{line:1,column:128906},end:{line:1,column:128933}},type:"cond-expr",locations:[{start:{line:1,column:128925},end:{line:1,column:128926}},{start:{line:1,column:128927},end:{line:1,column:128933}}],line:1},"1414":{loc:{start:{line:1,column:129065},end:{line:1,column:129105}},type:"binary-expr",locations:[{start:{line:1,column:129065},end:{line:1,column:129066}},{start:{line:1,column:129068},end:{line:1,column:129080}},{start:{line:1,column:129082},end:{line:1,column:129105}}],line:1},"1415":{loc:{start:{line:1,column:129356},end:{line:1,column:129451}},type:"binary-expr",locations:[{start:{line:1,column:129356},end:{line:1,column:129357}},{start:{line:1,column:129360},end:{line:1,column:129450}}],line:1},"1416":{loc:{start:{line:1,column:129596},end:{line:1,column:129664}},type:"cond-expr",locations:[{start:{line:1,column:129620},end:{line:1,column:129647}},{start:{line:1,column:129648},end:{line:1,column:129664}}],line:1},"1417":{loc:{start:{line:1,column:129882},end:{line:1,column:129939}},type:"binary-expr",locations:[{start:{line:1,column:129882},end:{line:1,column:129907}},{start:{line:1,column:129910},end:{line:1,column:129938}}],line:1},"1418":{loc:{start:{line:1,column:130045},end:{line:1,column:130096}},type:"binary-expr",locations:[{start:{line:1,column:130045},end:{line:1,column:130049}},{start:{line:1,column:130052},end:{line:1,column:130095}}],line:1},"1419":{loc:{start:{line:1,column:130108},end:{line:1,column:130137}},type:"binary-expr",locations:[{start:{line:1,column:130108},end:{line:1,column:130119}},{start:{line:1,column:130121},end:{line:1,column:130137}}],line:1},"1420":{loc:{start:{line:1,column:130306},end:{line:1,column:130339}},type:"cond-expr",locations:[{start:{line:1,column:130332},end:{line:1,column:130335}},{start:{line:1,column:130336},end:{line:1,column:130339}}],line:1},"1421":{loc:{start:{line:1,column:130591},end:{line:1,column:130607}},type:"cond-expr",locations:[{start:{line:1,column:130593},end:{line:1,column:130598}},{start:{line:1,column:130599},end:{line:1,column:130607}}],line:1},"1422":{loc:{start:{line:1,column:130620},end:{line:1,column:130719}},type:"binary-expr",locations:[{start:{line:1,column:130620},end:{line:1,column:130633}},{start:{line:1,column:130636},end:{line:1,column:130718}}],line:1},"1423":{loc:{start:{line:1,column:130757},end:{line:1,column:130806}},type:"binary-expr",locations:[{start:{line:1,column:130757},end:{line:1,column:130758}},{start:{line:1,column:130760},end:{line:1,column:130806}}],line:1},"1424":{loc:{start:{line:1,column:130807},end:{line:1,column:130861}},type:"binary-expr",locations:[{start:{line:1,column:130807},end:{line:1,column:130808}},{start:{line:1,column:130810},end:{line:1,column:130861}}],line:1},"1425":{loc:{start:{line:1,column:130890},end:{line:1,column:130906}},type:"binary-expr",locations:[{start:{line:1,column:130890},end:{line:1,column:130902}},{start:{line:1,column:130904},end:{line:1,column:130906}}],line:1},"1426":{loc:{start:{line:1,column:130934},end:{line:1,column:130950}},type:"binary-expr",locations:[{start:{line:1,column:130934},end:{line:1,column:130946}},{start:{line:1,column:130948},end:{line:1,column:130950}}],line:1},"1427":{loc:{start:{line:1,column:131017},end:{line:1,column:131071}},type:"if",locations:[{start:{line:1,column:131017},end:{line:1,column:131071}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1428":{loc:{start:{line:1,column:131122},end:{line:1,column:131198}},type:"binary-expr",locations:[{start:{line:1,column:131122},end:{line:1,column:131130}},{start:{line:1,column:131133},end:{line:1,column:131197}}],line:1},"1429":{loc:{start:{line:1,column:131428},end:{line:1,column:131478}},type:"binary-expr",locations:[{start:{line:1,column:131428},end:{line:1,column:131459}},{start:{line:1,column:131461},end:{line:1,column:131478}}],line:1},"1430":{loc:{start:{line:1,column:131492},end:{line:1,column:131502}},type:"cond-expr",locations:[{start:{line:1,column:131494},end:{line:1,column:131495}},{start:{line:1,column:131496},end:{line:1,column:131502}}],line:1},"1431":{loc:{start:{line:1,column:131503},end:{line:1,column:131547}},type:"binary-expr",locations:[{start:{line:1,column:131503},end:{line:1,column:131511}},{start:{line:1,column:131513},end:{line:1,column:131547}}],line:1},"1432":{loc:{start:{line:1,column:131548},end:{line:1,column:131600}},type:"binary-expr",locations:[{start:{line:1,column:131548},end:{line:1,column:131556}},{start:{line:1,column:131558},end:{line:1,column:131564}},{start:{line:1,column:131566},end:{line:1,column:131600}}],line:1},"1433":{loc:{start:{line:1,column:131699},end:{line:1,column:131736}},type:"binary-expr",locations:[{start:{line:1,column:131699},end:{line:1,column:131715}},{start:{line:1,column:131717},end:{line:1,column:131736}}],line:1},"1434":{loc:{start:{line:1,column:131762},end:{line:1,column:131815}},type:"if",locations:[{start:{line:1,column:131762},end:{line:1,column:131815}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1435":{loc:{start:{line:1,column:131918},end:{line:1,column:131947}},type:"binary-expr",locations:[{start:{line:1,column:131919},end:{line:1,column:131920}},{start:{line:1,column:131922},end:{line:1,column:131931}},{start:{line:1,column:131934},end:{line:1,column:131947}}],line:1},"1436":{loc:{start:{line:1,column:131985},end:{line:1,column:131989}},type:"default-arg",locations:[{start:{line:1,column:131987},end:{line:1,column:131989}}],line:1},"1437":{loc:{start:{line:1,column:132081},end:{line:1,column:132167}},type:"binary-expr",locations:[{start:{line:1,column:132081},end:{line:1,column:132082}},{start:{line:1,column:132085},end:{line:1,column:132166}}],line:1},"1438":{loc:{start:{line:1,column:132135},end:{line:1,column:132166}},type:"binary-expr",locations:[{start:{line:1,column:132135},end:{line:1,column:132136}},{start:{line:1,column:132138},end:{line:1,column:132166}}],line:1},"1439":{loc:{start:{line:1,column:132189},end:{line:1,column:132244}},type:"binary-expr",locations:[{start:{line:1,column:132190},end:{line:1,column:132191}},{start:{line:1,column:132193},end:{line:1,column:132194}},{start:{line:1,column:132198},end:{line:1,column:132243}}],line:1},"1440":{loc:{start:{line:1,column:132293},end:{line:1,column:132325}},type:"if",locations:[{start:{line:1,column:132293},end:{line:1,column:132325}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1441":{loc:{start:{line:1,column:132325},end:{line:1,column:132340}},type:"if",locations:[{start:{line:1,column:132325},end:{line:1,column:132340}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1442":{loc:{start:{line:1,column:132639},end:{line:1,column:132978}},type:"if",locations:[{start:{line:1,column:132639},end:{line:1,column:132978}},{start:{line:1,column:132753},end:{line:1,column:132978}}],line:1},"1443":{loc:{start:{line:1,column:132783},end:{line:1,column:132977}},type:"if",locations:[{start:{line:1,column:132783},end:{line:1,column:132977}},{start:{line:1,column:132831},end:{line:1,column:132977}}],line:1},"1444":{loc:{start:{line:1,column:132831},end:{line:1,column:132977}},type:"if",locations:[{start:{line:1,column:132831},end:{line:1,column:132977}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1445":{loc:{start:{line:1,column:133197},end:{line:1,column:133253}},type:"cond-expr",locations:[{start:{line:1,column:133202},end:{line:1,column:133231}},{start:{line:1,column:133233},end:{line:1,column:133253}}],line:1},"1446":{loc:{start:{line:1,column:133800},end:{line:1,column:133813}},type:"cond-expr",locations:[{start:{line:1,column:133804},end:{line:1,column:133811}},{start:{line:1,column:133812},end:{line:1,column:133813}}],line:1},"1447":{loc:{start:{line:1,column:133824},end:{line:1,column:133900}},type:"if",locations:[{start:{line:1,column:133824},end:{line:1,column:133900}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1448":{loc:{start:{line:1,column:133836},end:{line:1,column:133845}},type:"cond-expr",locations:[{start:{line:1,column:133840},end:{line:1,column:133843}},{start:{line:1,column:133844},end:{line:1,column:133845}}],line:1},"1449":{loc:{start:{line:1,column:133848},end:{line:1,column:133857}},type:"cond-expr",locations:[{start:{line:1,column:133852},end:{line:1,column:133855}},{start:{line:1,column:133856},end:{line:1,column:133857}}],line:1},"1450":{loc:{start:{line:1,column:133871},end:{line:1,column:133888}},type:"cond-expr",locations:[{start:{line:1,column:133877},end:{line:1,column:133886}},{start:{line:1,column:133887},end:{line:1,column:133888}}],line:1},"1451":{loc:{start:{line:1,column:134078},end:{line:1,column:134637}},type:"if",locations:[{start:{line:1,column:134078},end:{line:1,column:134637}},{start:{line:1,column:134512},end:{line:1,column:134637}}],line:1},"1452":{loc:{start:{line:1,column:134112},end:{line:1,column:134195}},type:"if",locations:[{start:{line:1,column:134112},end:{line:1,column:134195}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1453":{loc:{start:{line:1,column:134213},end:{line:1,column:134290}},type:"if",locations:[{start:{line:1,column:134213},end:{line:1,column:134290}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1454":{loc:{start:{line:1,column:134314},end:{line:1,column:134419}},type:"if",locations:[{start:{line:1,column:134314},end:{line:1,column:134419}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1455":{loc:{start:{line:1,column:134438},end:{line:1,column:134507}},type:"if",locations:[{start:{line:1,column:134438},end:{line:1,column:134507}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1456":{loc:{start:{line:1,column:134737},end:{line:1,column:134813}},type:"if",locations:[{start:{line:1,column:134737},end:{line:1,column:134813}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1457":{loc:{start:{line:1,column:134788},end:{line:1,column:134812}},type:"binary-expr",locations:[{start:{line:1,column:134788},end:{line:1,column:134796}},{start:{line:1,column:134799},end:{line:1,column:134811}}],line:1},"1458":{loc:{start:{line:1,column:134804},end:{line:1,column:134810}},type:"binary-expr",locations:[{start:{line:1,column:134804},end:{line:1,column:134807}},{start:{line:1,column:134809},end:{line:1,column:134810}}],line:1},"1459":{loc:{start:{line:1,column:135039},end:{line:1,column:135052}},type:"if",locations:[{start:{line:1,column:135039},end:{line:1,column:135052}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1460":{loc:{start:{line:1,column:135066},end:{line:1,column:135071}},type:"binary-expr",locations:[{start:{line:1,column:135066},end:{line:1,column:135067}},{start:{line:1,column:135069},end:{line:1,column:135071}}],line:1},"1461":{loc:{start:{line:1,column:135092},end:{line:1,column:135171}},type:"cond-expr",locations:[{start:{line:1,column:135095},end:{line:1,column:135132}},{start:{line:1,column:135135},end:{line:1,column:135170}}],line:1},"1462":{loc:{start:{line:1,column:135122},end:{line:1,column:135132}},type:"binary-expr",locations:[{start:{line:1,column:135122},end:{line:1,column:135123}},{start:{line:1,column:135125},end:{line:1,column:135132}}],line:1},"1463":{loc:{start:{line:1,column:135160},end:{line:1,column:135170}},type:"binary-expr",locations:[{start:{line:1,column:135160},end:{line:1,column:135161}},{start:{line:1,column:135163},end:{line:1,column:135170}}],line:1},"1464":{loc:{start:{line:1,column:135189},end:{line:1,column:135267}},type:"if",locations:[{start:{line:1,column:135189},end:{line:1,column:135267}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1465":{loc:{start:{line:1,column:135242},end:{line:1,column:135266}},type:"binary-expr",locations:[{start:{line:1,column:135242},end:{line:1,column:135250}},{start:{line:1,column:135253},end:{line:1,column:135265}}],line:1},"1466":{loc:{start:{line:1,column:135258},end:{line:1,column:135264}},type:"binary-expr",locations:[{start:{line:1,column:135258},end:{line:1,column:135261}},{start:{line:1,column:135263},end:{line:1,column:135264}}],line:1},"1467":{loc:{start:{line:1,column:135267},end:{line:1,column:135279}},type:"binary-expr",locations:[{start:{line:1,column:135267},end:{line:1,column:135268}},{start:{line:1,column:135270},end:{line:1,column:135279}}],line:1},"1468":{loc:{start:{line:1,column:135280},end:{line:1,column:135329}},type:"binary-expr",locations:[{start:{line:1,column:135280},end:{line:1,column:135290}},{start:{line:1,column:135292},end:{line:1,column:135298}},{start:{line:1,column:135300},end:{line:1,column:135305}},{start:{line:1,column:135307},end:{line:1,column:135318}},{start:{line:1,column:135320},end:{line:1,column:135329}}],line:1},"1469":{loc:{start:{line:1,column:135330},end:{line:1,column:135361}},type:"binary-expr",locations:[{start:{line:1,column:135330},end:{line:1,column:135331}},{start:{line:1,column:135334},end:{line:1,column:135360}}],line:1},"1470":{loc:{start:{line:1,column:136006},end:{line:1,column:136030}},type:"binary-expr",locations:[{start:{line:1,column:136006},end:{line:1,column:136007}},{start:{line:1,column:136009},end:{line:1,column:136030}}],line:1},"1471":{loc:{start:{line:1,column:136338},end:{line:1,column:136354}},type:"binary-expr",locations:[{start:{line:1,column:136338},end:{line:1,column:136347}},{start:{line:1,column:136349},end:{line:1,column:136354}}],line:1},"1472":{loc:{start:{line:1,column:136357},end:{line:1,column:136364}},type:"binary-expr",locations:[{start:{line:1,column:136357},end:{line:1,column:136361}},{start:{line:1,column:136363},end:{line:1,column:136364}}],line:1},"1473":{loc:{start:{line:1,column:136388},end:{line:1,column:136392}},type:"binary-expr",locations:[{start:{line:1,column:136388},end:{line:1,column:136389}},{start:{line:1,column:136391},end:{line:1,column:136392}}],line:1},"1474":{loc:{start:{line:1,column:136753},end:{line:1,column:136764}},type:"binary-expr",locations:[{start:{line:1,column:136753},end:{line:1,column:136761}},{start:{line:1,column:136763},end:{line:1,column:136764}}],line:1},"1475":{loc:{start:{line:1,column:136771},end:{line:1,column:136783}},type:"binary-expr",locations:[{start:{line:1,column:136771},end:{line:1,column:136780}},{start:{line:1,column:136782},end:{line:1,column:136783}}],line:1},"1476":{loc:{start:{line:1,column:136800},end:{line:1,column:136942}},type:"if",locations:[{start:{line:1,column:136800},end:{line:1,column:136942}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1477":{loc:{start:{line:1,column:136820},end:{line:1,column:136849}},type:"cond-expr",locations:[{start:{line:1,column:136844},end:{line:1,column:136847}},{start:{line:1,column:136848},end:{line:1,column:136849}}],line:1},"1478":{loc:{start:{line:1,column:136867},end:{line:1,column:136888}},type:"cond-expr",locations:[{start:{line:1,column:136871},end:{line:1,column:136886}},{start:{line:1,column:136887},end:{line:1,column:136888}}],line:1},"1479":{loc:{start:{line:1,column:136889},end:{line:1,column:136934}},type:"binary-expr",locations:[{start:{line:1,column:136889},end:{line:1,column:136894}},{start:{line:1,column:136896},end:{line:1,column:136914}},{start:{line:1,column:136916},end:{line:1,column:136934}}],line:1},"1480":{loc:{start:{line:1,column:137060},end:{line:1,column:137064}},type:"binary-expr",locations:[{start:{line:1,column:137060},end:{line:1,column:137061}},{start:{line:1,column:137063},end:{line:1,column:137064}}],line:1},"1481":{loc:{start:{line:1,column:137195},end:{line:1,column:137198}},type:"default-arg",locations:[{start:{line:1,column:137197},end:{line:1,column:137198}}],line:1},"1482":{loc:{start:{line:1,column:137546},end:{line:1,column:137613}},type:"cond-expr",locations:[{start:{line:1,column:137556},end:{line:1,column:137558}},{start:{line:1,column:137559},end:{line:1,column:137613}}],line:1},"1483":{loc:{start:{line:1,column:137559},end:{line:1,column:137613}},type:"cond-expr",locations:[{start:{line:1,column:137608},end:{line:1,column:137610}},{start:{line:1,column:137611},end:{line:1,column:137613}}],line:1},"1484":{loc:{start:{line:1,column:137559},end:{line:1,column:137607}},type:"binary-expr",locations:[{start:{line:1,column:137559},end:{line:1,column:137568}},{start:{line:1,column:137570},end:{line:1,column:137607}}],line:1},"1485":{loc:{start:{line:1,column:137630},end:{line:1,column:137634}},type:"default-arg",locations:[{start:{line:1,column:137632},end:{line:1,column:137634}}],line:1},"1486":{loc:{start:{line:1,column:137658},end:{line:1,column:137661}},type:"default-arg",locations:[{start:{line:1,column:137660},end:{line:1,column:137661}}],line:1},"1487":{loc:{start:{line:1,column:137666},end:{line:1,column:137671}},type:"default-arg",locations:[{start:{line:1,column:137668},end:{line:1,column:137671}}],line:1},"1488":{loc:{start:{line:1,column:137727},end:{line:1,column:137745}},type:"binary-expr",locations:[{start:{line:1,column:137727},end:{line:1,column:137730}},{start:{line:1,column:137732},end:{line:1,column:137735}},{start:{line:1,column:137737},end:{line:1,column:137740}},{start:{line:1,column:137742},end:{line:1,column:137745}}],line:1},"1489":{loc:{start:{line:1,column:137786},end:{line:1,column:137803}},type:"cond-expr",locations:[{start:{line:1,column:137794},end:{line:1,column:137799}},{start:{line:1,column:137800},end:{line:1,column:137803}}],line:1},"1490":{loc:{start:{line:1,column:137786},end:{line:1,column:137793}},type:"binary-expr",locations:[{start:{line:1,column:137786},end:{line:1,column:137789}},{start:{line:1,column:137791},end:{line:1,column:137793}}],line:1},"1491":{loc:{start:{line:1,column:137908},end:{line:1,column:137912}},type:"default-arg",locations:[{start:{line:1,column:137910},end:{line:1,column:137912}}],line:1},"1492":{loc:{start:{line:1,column:137924},end:{line:1,column:137929}},type:"binary-expr",locations:[{start:{line:1,column:137924},end:{line:1,column:137925}},{start:{line:1,column:137927},end:{line:1,column:137929}}],line:1},"1493":{loc:{start:{line:1,column:137961},end:{line:1,column:137968}},type:"cond-expr",locations:[{start:{line:1,column:137963},end:{line:1,column:137966}},{start:{line:1,column:137967},end:{line:1,column:137968}}],line:1},"1494":{loc:{start:{line:1,column:137974},end:{line:1,column:138036}},type:"binary-expr",locations:[{start:{line:1,column:137974},end:{line:1,column:137981}},{start:{line:1,column:137984},end:{line:1,column:138035}}],line:1},"1495":{loc:{start:{line:1,column:137984},end:{line:1,column:138031}},type:"cond-expr",locations:[{start:{line:1,column:137987},end:{line:1,column:138009}},{start:{line:1,column:138011},end:{line:1,column:138031}}],line:1},"1496":{loc:{start:{line:1,column:138044},end:{line:1,column:138088}},type:"binary-expr",locations:[{start:{line:1,column:138044},end:{line:1,column:138045}},{start:{line:1,column:138048},end:{line:1,column:138087}}],line:1},"1497":{loc:{start:{line:1,column:138056},end:{line:1,column:138061}},type:"cond-expr",locations:[{start:{line:1,column:138058},end:{line:1,column:138059}},{start:{line:1,column:138060},end:{line:1,column:138061}}],line:1},"1498":{loc:{start:{line:1,column:138170},end:{line:1,column:138174}},type:"default-arg",locations:[{start:{line:1,column:138172},end:{line:1,column:138174}}],line:1},"1499":{loc:{start:{line:1,column:138186},end:{line:1,column:138191}},type:"binary-expr",locations:[{start:{line:1,column:138186},end:{line:1,column:138187}},{start:{line:1,column:138189},end:{line:1,column:138191}}],line:1},"1500":{loc:{start:{line:1,column:138221},end:{line:1,column:138228}},type:"cond-expr",locations:[{start:{line:1,column:138223},end:{line:1,column:138226}},{start:{line:1,column:138227},end:{line:1,column:138228}}],line:1},"1501":{loc:{start:{line:1,column:138240},end:{line:1,column:138290}},type:"binary-expr",locations:[{start:{line:1,column:138240},end:{line:1,column:138245}},{start:{line:1,column:138248},end:{line:1,column:138289}}],line:1},"1502":{loc:{start:{line:1,column:138296},end:{line:1,column:138328}},type:"binary-expr",locations:[{start:{line:1,column:138296},end:{line:1,column:138297}},{start:{line:1,column:138300},end:{line:1,column:138327}}],line:1},"1503":{loc:{start:{line:1,column:138343},end:{line:1,column:138372}},type:"if",locations:[{start:{line:1,column:138343},end:{line:1,column:138372}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1504":{loc:{start:{line:1,column:138394},end:{line:1,column:138468}},type:"cond-expr",locations:[{start:{line:1,column:138401},end:{line:1,column:138433}},{start:{line:1,column:138436},end:{line:1,column:138467}}],line:1},"1505":{loc:{start:{line:1,column:138401},end:{line:1,column:138419}},type:"cond-expr",locations:[{start:{line:1,column:138405},end:{line:1,column:138408}},{start:{line:1,column:138409},end:{line:1,column:138419}}],line:1},"1506":{loc:{start:{line:1,column:138409},end:{line:1,column:138419}},type:"binary-expr",locations:[{start:{line:1,column:138409},end:{line:1,column:138412}},{start:{line:1,column:138415},end:{line:1,column:138418}}],line:1},"1507":{loc:{start:{line:1,column:138510},end:{line:1,column:138543}},type:"binary-expr",locations:[{start:{line:1,column:138510},end:{line:1,column:138522}},{start:{line:1,column:138524},end:{line:1,column:138543}}],line:1},"1508":{loc:{start:{line:1,column:138550},end:{line:1,column:138646}},type:"cond-expr",locations:[{start:{line:1,column:138641},end:{line:1,column:138643}},{start:{line:1,column:138644},end:{line:1,column:138646}}],line:1},"1509":{loc:{start:{line:1,column:138550},end:{line:1,column:138640}},type:"binary-expr",locations:[{start:{line:1,column:138550},end:{line:1,column:138563}},{start:{line:1,column:138565},end:{line:1,column:138573}},{start:{line:1,column:138575},end:{line:1,column:138585}},{start:{line:1,column:138587},end:{line:1,column:138624}},{start:{line:1,column:138626},end:{line:1,column:138636}},{start:{line:1,column:138638},end:{line:1,column:138640}}],line:1},"1510":{loc:{start:{line:1,column:138669},end:{line:1,column:138736}},type:"cond-expr",locations:[{start:{line:1,column:138679},end:{line:1,column:138681}},{start:{line:1,column:138682},end:{line:1,column:138736}}],line:1},"1511":{loc:{start:{line:1,column:138682},end:{line:1,column:138736}},type:"cond-expr",locations:[{start:{line:1,column:138731},end:{line:1,column:138733}},{start:{line:1,column:138734},end:{line:1,column:138736}}],line:1},"1512":{loc:{start:{line:1,column:138682},end:{line:1,column:138730}},type:"binary-expr",locations:[{start:{line:1,column:138682},end:{line:1,column:138691}},{start:{line:1,column:138693},end:{line:1,column:138730}}],line:1},"1513":{loc:{start:{line:1,column:138772},end:{line:1,column:138826}},type:"binary-expr",locations:[{start:{line:1,column:138772},end:{line:1,column:138773}},{start:{line:1,column:138776},end:{line:1,column:138825}}],line:1},"1514":{loc:{start:{line:1,column:138797},end:{line:1,column:138825}},type:"binary-expr",locations:[{start:{line:1,column:138797},end:{line:1,column:138810}},{start:{line:1,column:138812},end:{line:1,column:138825}}],line:1},"1515":{loc:{start:{line:1,column:138957},end:{line:1,column:139000}},type:"binary-expr",locations:[{start:{line:1,column:138957},end:{line:1,column:138985}},{start:{line:1,column:138987},end:{line:1,column:139000}}],line:1},"1516":{loc:{start:{line:1,column:139066},end:{line:1,column:139112}},type:"cond-expr",locations:[{start:{line:1,column:139089},end:{line:1,column:139100}},{start:{line:1,column:139101},end:{line:1,column:139112}}],line:1},"1517":{loc:{start:{line:1,column:139066},end:{line:1,column:139088}},type:"binary-expr",locations:[{start:{line:1,column:139066},end:{line:1,column:139068}},{start:{line:1,column:139070},end:{line:1,column:139088}}],line:1},"1518":{loc:{start:{line:1,column:139498},end:{line:1,column:139526}},type:"binary-expr",locations:[{start:{line:1,column:139498},end:{line:1,column:139514}},{start:{line:1,column:139516},end:{line:1,column:139526}}],line:1},"1519":{loc:{start:{line:1,column:139775},end:{line:1,column:139799}},type:"binary-expr",locations:[{start:{line:1,column:139775},end:{line:1,column:139776}},{start:{line:1,column:139778},end:{line:1,column:139799}}],line:1},"1520":{loc:{start:{line:1,column:139844},end:{line:1,column:140024}},type:"if",locations:[{start:{line:1,column:139844},end:{line:1,column:140024}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1521":{loc:{start:{line:1,column:139847},end:{line:1,column:139931}},type:"binary-expr",locations:[{start:{line:1,column:139848},end:{line:1,column:139857}},{start:{line:1,column:139859},end:{line:1,column:139896}},{start:{line:1,column:139899},end:{line:1,column:139909}},{start:{line:1,column:139911},end:{line:1,column:139931}}],line:1},"1522":{loc:{start:{line:1,column:139939},end:{line:1,column:139975}},type:"cond-expr",locations:[{start:{line:1,column:139950},end:{line:1,column:139960}},{start:{line:1,column:139961},end:{line:1,column:139975}}],line:1},"1523":{loc:{start:{line:1,column:140172},end:{line:1,column:140234}},type:"binary-expr",locations:[{start:{line:1,column:140172},end:{line:1,column:140186}},{start:{line:1,column:140189},end:{line:1,column:140233}}],line:1},"1524":{loc:{start:{line:1,column:140284},end:{line:1,column:140307}},type:"binary-expr",locations:[{start:{line:1,column:140284},end:{line:1,column:140292}},{start:{line:1,column:140294},end:{line:1,column:140307}}],line:1},"1525":{loc:{start:{line:1,column:140367},end:{line:1,column:140383}},type:"binary-expr",locations:[{start:{line:1,column:140367},end:{line:1,column:140368}},{start:{line:1,column:140370},end:{line:1,column:140383}}],line:1},"1526":{loc:{start:{line:1,column:140479},end:{line:1,column:140499}},type:"if",locations:[{start:{line:1,column:140479},end:{line:1,column:140499}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1527":{loc:{start:{line:1,column:140586},end:{line:1,column:140615}},type:"if",locations:[{start:{line:1,column:140586},end:{line:1,column:140615}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1528":{loc:{start:{line:1,column:140700},end:{line:1,column:140719}},type:"cond-expr",locations:[{start:{line:1,column:140713},end:{line:1,column:140717}},{start:{line:1,column:140718},end:{line:1,column:140719}}],line:1},"1529":{loc:{start:{line:1,column:140825},end:{line:1,column:140829}},type:"binary-expr",locations:[{start:{line:1,column:140825},end:{line:1,column:140826}},{start:{line:1,column:140828},end:{line:1,column:140829}}],line:1},"1530":{loc:{start:{line:1,column:140832},end:{line:1,column:140855}},type:"binary-expr",locations:[{start:{line:1,column:140832},end:{line:1,column:140833}},{start:{line:1,column:140835},end:{line:1,column:140855}}],line:1},"1531":{loc:{start:{line:1,column:140936},end:{line:1,column:140952}},type:"binary-expr",locations:[{start:{line:1,column:140936},end:{line:1,column:140948}},{start:{line:1,column:140950},end:{line:1,column:140952}}],line:1},"1532":{loc:{start:{line:1,column:140953},end:{line:1,column:141031}},type:"binary-expr",locations:[{start:{line:1,column:140953},end:{line:1,column:140977}},{start:{line:1,column:140979},end:{line:1,column:140992}},{start:{line:1,column:140995},end:{line:1,column:141030}}],line:1},"1533":{loc:{start:{line:1,column:140954},end:{line:1,column:140969}},type:"binary-expr",locations:[{start:{line:1,column:140954},end:{line:1,column:140965}},{start:{line:1,column:140967},end:{line:1,column:140969}}],line:1},"1534":{loc:{start:{line:1,column:141032},end:{line:1,column:141089}},type:"binary-expr",locations:[{start:{line:1,column:141032},end:{line:1,column:141045}},{start:{line:1,column:141048},end:{line:1,column:141088}}],line:1},"1535":{loc:{start:{line:1,column:141572},end:{line:1,column:141596}},type:"binary-expr",locations:[{start:{line:1,column:141572},end:{line:1,column:141573}},{start:{line:1,column:141575},end:{line:1,column:141596}}],line:1},"1536":{loc:{start:{line:1,column:141900},end:{line:1,column:141919}},type:"binary-expr",locations:[{start:{line:1,column:141900},end:{line:1,column:141901}},{start:{line:1,column:141903},end:{line:1,column:141915}},{start:{line:1,column:141917},end:{line:1,column:141919}}],line:1},"1537":{loc:{start:{line:1,column:141926},end:{line:1,column:141937}},type:"binary-expr",locations:[{start:{line:1,column:141926},end:{line:1,column:141934}},{start:{line:1,column:141936},end:{line:1,column:141937}}],line:1},"1538":{loc:{start:{line:1,column:141951},end:{line:1,column:141970}},type:"binary-expr",locations:[{start:{line:1,column:141951},end:{line:1,column:141952}},{start:{line:1,column:141954},end:{line:1,column:141967}},{start:{line:1,column:141969},end:{line:1,column:141970}}],line:1},"1539":{loc:{start:{line:1,column:141978},end:{line:1,column:141997}},type:"binary-expr",locations:[{start:{line:1,column:141978},end:{line:1,column:141979}},{start:{line:1,column:141981},end:{line:1,column:141994}},{start:{line:1,column:141996},end:{line:1,column:141997}}],line:1},"1540":{loc:{start:{line:1,column:142041},end:{line:1,column:142200}},type:"binary-expr",locations:[{start:{line:1,column:142041},end:{line:1,column:142050}},{start:{line:1,column:142052},end:{line:1,column:142063}},{start:{line:1,column:142065},end:{line:1,column:142091}},{start:{line:1,column:142094},end:{line:1,column:142199}}],line:1},"1541":{loc:{start:{line:1,column:142218},end:{line:1,column:142234}},type:"binary-expr",locations:[{start:{line:1,column:142218},end:{line:1,column:142230}},{start:{line:1,column:142232},end:{line:1,column:142234}}],line:1},"1542":{loc:{start:{line:1,column:142396},end:{line:1,column:142512}},type:"cond-expr",locations:[{start:{line:1,column:142410},end:{line:1,column:142459}},{start:{line:1,column:142462},end:{line:1,column:142511}}],line:1},"1543":{loc:{start:{line:1,column:142573},end:{line:1,column:142585}},type:"cond-expr",locations:[{start:{line:1,column:142575},end:{line:1,column:142576}},{start:{line:1,column:142577},end:{line:1,column:142585}}],line:1},"1544":{loc:{start:{line:1,column:142916},end:{line:1,column:142923}},type:"binary-expr",locations:[{start:{line:1,column:142916},end:{line:1,column:142917}},{start:{line:1,column:142919},end:{line:1,column:142923}}],line:1},"1545":{loc:{start:{line:1,column:142942},end:{line:1,column:142959}},type:"binary-expr",locations:[{start:{line:1,column:142942},end:{line:1,column:142944}},{start:{line:1,column:142946},end:{line:1,column:142951}},{start:{line:1,column:142953},end:{line:1,column:142959}}],line:1},"1546":{loc:{start:{line:1,column:142987},end:{line:1,column:143005}},type:"binary-expr",locations:[{start:{line:1,column:142987},end:{line:1,column:142989}},{start:{line:1,column:142991},end:{line:1,column:142996}},{start:{line:1,column:142998},end:{line:1,column:143005}}],line:1},"1547":{loc:{start:{line:1,column:143036},end:{line:1,column:143056}},type:"binary-expr",locations:[{start:{line:1,column:143036},end:{line:1,column:143038}},{start:{line:1,column:143040},end:{line:1,column:143048}},{start:{line:1,column:143050},end:{line:1,column:143056}}],line:1},"1548":{loc:{start:{line:1,column:143090},end:{line:1,column:143111}},type:"binary-expr",locations:[{start:{line:1,column:143090},end:{line:1,column:143092}},{start:{line:1,column:143094},end:{line:1,column:143102}},{start:{line:1,column:143104},end:{line:1,column:143111}}],line:1},"1549":{loc:{start:{line:1,column:143598},end:{line:1,column:143617}},type:"binary-expr",locations:[{start:{line:1,column:143598},end:{line:1,column:143599}},{start:{line:1,column:143601},end:{line:1,column:143608}},{start:{line:1,column:143610},end:{line:1,column:143617}}],line:1},"1550":{loc:{start:{line:1,column:143603},end:{line:1,column:143607}},type:"binary-expr",locations:[{start:{line:1,column:143603},end:{line:1,column:143604}},{start:{line:1,column:143606},end:{line:1,column:143607}}],line:1},"1551":{loc:{start:{line:1,column:143625},end:{line:1,column:143680}},type:"binary-expr",locations:[{start:{line:1,column:143625},end:{line:1,column:143626}},{start:{line:1,column:143629},end:{line:1,column:143630}},{start:{line:1,column:143632},end:{line:1,column:143652}},{start:{line:1,column:143656},end:{line:1,column:143657}},{start:{line:1,column:143659},end:{line:1,column:143679}}],line:1},"1552":{loc:{start:{line:1,column:143703},end:{line:1,column:143753}},type:"binary-expr",locations:[{start:{line:1,column:143703},end:{line:1,column:143712}},{start:{line:1,column:143714},end:{line:1,column:143724}},{start:{line:1,column:143726},end:{line:1,column:143738}},{start:{line:1,column:143740},end:{line:1,column:143753}}],line:1},"1553":{loc:{start:{line:1,column:143811},end:{line:1,column:143815}},type:"default-arg",locations:[{start:{line:1,column:143813},end:{line:1,column:143815}}],line:1},"1554":{loc:{start:{line:1,column:143823},end:{line:1,column:143837}},type:"cond-expr",locations:[{start:{line:1,column:143833},end:{line:1,column:143835}},{start:{line:1,column:143836},end:{line:1,column:143837}}],line:1},"1555":{loc:{start:{line:1,column:143840},end:{line:1,column:143854}},type:"cond-expr",locations:[{start:{line:1,column:143850},end:{line:1,column:143852}},{start:{line:1,column:143853},end:{line:1,column:143854}}],line:1},"1556":{loc:{start:{line:1,column:143858},end:{line:1,column:143879}},type:"cond-expr",locations:[{start:{line:1,column:143876},end:{line:1,column:143877}},{start:{line:1,column:143878},end:{line:1,column:143879}}],line:1},"1557":{loc:{start:{line:1,column:143886},end:{line:1,column:143907}},type:"cond-expr",locations:[{start:{line:1,column:143904},end:{line:1,column:143905}},{start:{line:1,column:143906},end:{line:1,column:143907}}],line:1},"1558":{loc:{start:{line:1,column:144344},end:{line:1,column:144368}},type:"binary-expr",locations:[{start:{line:1,column:144344},end:{line:1,column:144345}},{start:{line:1,column:144347},end:{line:1,column:144368}}],line:1},"1559":{loc:{start:{line:1,column:144474},end:{line:1,column:144492}},type:"cond-expr",locations:[{start:{line:1,column:144487},end:{line:1,column:144489}},{start:{line:1,column:144490},end:{line:1,column:144492}}],line:1},"1560":{loc:{start:{line:1,column:144502},end:{line:1,column:144613}},type:"binary-expr",locations:[{start:{line:1,column:144503},end:{line:1,column:144512}},{start:{line:1,column:144514},end:{line:1,column:144523}},{start:{line:1,column:144527},end:{line:1,column:144612}}],line:1},"1561":{loc:{start:{line:1,column:144898},end:{line:1,column:144909}},type:"cond-expr",locations:[{start:{line:1,column:144900},end:{line:1,column:144907}},{start:{line:1,column:144908},end:{line:1,column:144909}}],line:1},"1562":{loc:{start:{line:1,column:144912},end:{line:1,column:144923}},type:"cond-expr",locations:[{start:{line:1,column:144914},end:{line:1,column:144915}},{start:{line:1,column:144916},end:{line:1,column:144923}}],line:1},"1563":{loc:{start:{line:1,column:144944},end:{line:1,column:144978}},type:"cond-expr",locations:[{start:{line:1,column:144952},end:{line:1,column:144964}},{start:{line:1,column:144965},end:{line:1,column:144978}}],line:1},"1564":{loc:{start:{line:1,column:145642},end:{line:1,column:145708}},type:"cond-expr",locations:[{start:{line:1,column:145658},end:{line:1,column:145667}},{start:{line:1,column:145668},end:{line:1,column:145708}}],line:1},"1565":{loc:{start:{line:1,column:145668},end:{line:1,column:145708}},type:"cond-expr",locations:[{start:{line:1,column:145684},end:{line:1,column:145693}},{start:{line:1,column:145694},end:{line:1,column:145708}}],line:1},"1566":{loc:{start:{line:1,column:145694},end:{line:1,column:145708}},type:"binary-expr",locations:[{start:{line:1,column:145694},end:{line:1,column:145695}},{start:{line:1,column:145698},end:{line:1,column:145707}}],line:1},"1567":{loc:{start:{line:1,column:145742},end:{line:1,column:145793}},type:"if",locations:[{start:{line:1,column:145742},end:{line:1,column:145793}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1568":{loc:{start:{line:1,column:145745},end:{line:1,column:145783}},type:"binary-expr",locations:[{start:{line:1,column:145745},end:{line:1,column:145761}},{start:{line:1,column:145763},end:{line:1,column:145783}}],line:1},"1569":{loc:{start:{line:1,column:145824},end:{line:1,column:145861}},type:"binary-expr",locations:[{start:{line:1,column:145824},end:{line:1,column:145825}},{start:{line:1,column:145828},end:{line:1,column:145841}},{start:{line:1,column:145843},end:{line:1,column:145860}}],line:1},"1570":{loc:{start:{line:1,column:145883},end:{line:1,column:145955}},type:"binary-expr",locations:[{start:{line:1,column:145883},end:{line:1,column:145916}},{start:{line:1,column:145918},end:{line:1,column:145955}}],line:1},"1571":{loc:{start:{line:1,column:146035},end:{line:1,column:146056}},type:"if",locations:[{start:{line:1,column:146035},end:{line:1,column:146056}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1572":{loc:{start:{line:1,column:146115},end:{line:1,column:146143}},type:"binary-expr",locations:[{start:{line:1,column:146115},end:{line:1,column:146120}},{start:{line:1,column:146122},end:{line:1,column:146127}},{start:{line:1,column:146129},end:{line:1,column:146130}},{start:{line:1,column:146132},end:{line:1,column:146137}},{start:{line:1,column:146139},end:{line:1,column:146143}}],line:1},"1573":{loc:{start:{line:1,column:146144},end:{line:1,column:146174}},type:"if",locations:[{start:{line:1,column:146144},end:{line:1,column:146174}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1574":{loc:{start:{line:1,column:146147},end:{line:1,column:146166}},type:"binary-expr",locations:[{start:{line:1,column:146147},end:{line:1,column:146163}},{start:{line:1,column:146165},end:{line:1,column:146166}}],line:1},"1575":{loc:{start:{line:1,column:146230},end:{line:1,column:146242}},type:"binary-expr",locations:[{start:{line:1,column:146230},end:{line:1,column:146239}},{start:{line:1,column:146241},end:{line:1,column:146242}}],line:1},"1576":{loc:{start:{line:1,column:146243},end:{line:1,column:146273}},type:"if",locations:[{start:{line:1,column:146243},end:{line:1,column:146273}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1577":{loc:{start:{line:1,column:146634},end:{line:1,column:146655}},type:"binary-expr",locations:[{start:{line:1,column:146634},end:{line:1,column:146637}},{start:{line:1,column:146640},end:{line:1,column:146654}}],line:1},"1578":{loc:{start:{line:1,column:146832},end:{line:1,column:147099}},type:"if",locations:[{start:{line:1,column:146832},end:{line:1,column:147099}},{start:{line:1,column:146890},end:{line:1,column:147099}}],line:1},"1579":{loc:{start:{line:1,column:146841},end:{line:1,column:146869}},type:"cond-expr",locations:[{start:{line:1,column:146846},end:{line:1,column:146853}},{start:{line:1,column:146855},end:{line:1,column:146869}}],line:1},"1580":{loc:{start:{line:1,column:146855},end:{line:1,column:146869}},type:"binary-expr",locations:[{start:{line:1,column:146855},end:{line:1,column:146858}},{start:{line:1,column:146861},end:{line:1,column:146868}}],line:1},"1581":{loc:{start:{line:1,column:146901},end:{line:1,column:147042}},type:"if",locations:[{start:{line:1,column:146901},end:{line:1,column:147042}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1582":{loc:{start:{line:1,column:146904},end:{line:1,column:146916}},type:"binary-expr",locations:[{start:{line:1,column:146904},end:{line:1,column:146909}},{start:{line:1,column:146911},end:{line:1,column:146916}}],line:1},"1583":{loc:{start:{line:1,column:146954},end:{line:1,column:146997}},type:"binary-expr",locations:[{start:{line:1,column:146954},end:{line:1,column:146959}},{start:{line:1,column:146961},end:{line:1,column:146966}},{start:{line:1,column:146968},end:{line:1,column:146997}}],line:1},"1584":{loc:{start:{line:1,column:146998},end:{line:1,column:147041}},type:"binary-expr",locations:[{start:{line:1,column:146998},end:{line:1,column:147003}},{start:{line:1,column:147005},end:{line:1,column:147010}},{start:{line:1,column:147012},end:{line:1,column:147041}}],line:1},"1585":{loc:{start:{line:1,column:147042},end:{line:1,column:147066}},type:"binary-expr",locations:[{start:{line:1,column:147042},end:{line:1,column:147045}},{start:{line:1,column:147047},end:{line:1,column:147052}},{start:{line:1,column:147054},end:{line:1,column:147066}}],line:1},"1586":{loc:{start:{line:1,column:147124},end:{line:1,column:147274}},type:"if",locations:[{start:{line:1,column:147124},end:{line:1,column:147274}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1587":{loc:{start:{line:1,column:147442},end:{line:1,column:147475}},type:"binary-expr",locations:[{start:{line:1,column:147442},end:{line:1,column:147443}},{start:{line:1,column:147446},end:{line:1,column:147474}}],line:1},"1588":{loc:{start:{line:1,column:147476},end:{line:1,column:147514}},type:"cond-expr",locations:[{start:{line:1,column:147478},end:{line:1,column:147508}},{start:{line:1,column:147509},end:{line:1,column:147514}}],line:1},"1589":{loc:{start:{line:1,column:147630},end:{line:1,column:147658}},type:"if",locations:[{start:{line:1,column:147630},end:{line:1,column:147658}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1590":{loc:{start:{line:1,column:147755},end:{line:1,column:147764}},type:"binary-expr",locations:[{start:{line:1,column:147755},end:{line:1,column:147756}},{start:{line:1,column:147758},end:{line:1,column:147764}}],line:1},"1591":{loc:{start:{line:1,column:147765},end:{line:1,column:147843}},type:"if",locations:[{start:{line:1,column:147765},end:{line:1,column:147843}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1592":{loc:{start:{line:1,column:147768},end:{line:1,column:147835}},type:"binary-expr",locations:[{start:{line:1,column:147768},end:{line:1,column:147801}},{start:{line:1,column:147803},end:{line:1,column:147835}}],line:1},"1593":{loc:{start:{line:1,column:147869},end:{line:1,column:147933}},type:"if",locations:[{start:{line:1,column:147869},end:{line:1,column:147933}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1594":{loc:{start:{line:1,column:147872},end:{line:1,column:147925}},type:"binary-expr",locations:[{start:{line:1,column:147872},end:{line:1,column:147889}},{start:{line:1,column:147891},end:{line:1,column:147906}},{start:{line:1,column:147908},end:{line:1,column:147925}}],line:1},"1595":{loc:{start:{line:1,column:147964},end:{line:1,column:147980}},type:"binary-expr",locations:[{start:{line:1,column:147964},end:{line:1,column:147975}},{start:{line:1,column:147977},end:{line:1,column:147980}}],line:1},"1596":{loc:{start:{line:1,column:147981},end:{line:1,column:148003}},type:"if",locations:[{start:{line:1,column:147981},end:{line:1,column:148003}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1597":{loc:{start:{line:1,column:148003},end:{line:1,column:148167}},type:"binary-expr",locations:[{start:{line:1,column:148003},end:{line:1,column:148007}},{start:{line:1,column:148010},end:{line:1,column:148166}}],line:1},"1598":{loc:{start:{line:1,column:148174},end:{line:1,column:148338}},type:"switch",locations:[{start:{line:1,column:148194},end:{line:1,column:148227}},{start:{line:1,column:148227},end:{line:1,column:148261}},{start:{line:1,column:148261},end:{line:1,column:148337}}],line:1},"1599":{loc:{start:{line:1,column:148516},end:{line:1,column:148589}},type:"if",locations:[{start:{line:1,column:148516},end:{line:1,column:148589}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1600":{loc:{start:{line:1,column:148814},end:{line:1,column:148826}},type:"if",locations:[{start:{line:1,column:148814},end:{line:1,column:148826}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1601":{loc:{start:{line:1,column:148851},end:{line:1,column:148879}},type:"binary-expr",locations:[{start:{line:1,column:148851},end:{line:1,column:148862}},{start:{line:1,column:148865},end:{line:1,column:148878}}],line:1},"1602":{loc:{start:{line:1,column:148930},end:{line:1,column:148936}},type:"default-arg",locations:[{start:{line:1,column:148932},end:{line:1,column:148936}}],line:1},"1603":{loc:{start:{line:1,column:148939},end:{line:1,column:148945}},type:"default-arg",locations:[{start:{line:1,column:148941},end:{line:1,column:148945}}],line:1},"1604":{loc:{start:{line:1,column:148947},end:{line:1,column:148952}},type:"binary-expr",locations:[{start:{line:1,column:148947},end:{line:1,column:148948}},{start:{line:1,column:148950},end:{line:1,column:148952}}],line:1},"1605":{loc:{start:{line:1,column:149045},end:{line:1,column:149147}},type:"cond-expr",locations:[{start:{line:1,column:149055},end:{line:1,column:149094}},{start:{line:1,column:149096},end:{line:1,column:149147}}],line:1},"1606":{loc:{start:{line:1,column:149096},end:{line:1,column:149147}},type:"binary-expr",locations:[{start:{line:1,column:149096},end:{line:1,column:149104}},{start:{line:1,column:149107},end:{line:1,column:149146}}],line:1},"1607":{loc:{start:{line:1,column:149196},end:{line:1,column:149229}},type:"if",locations:[{start:{line:1,column:149196},end:{line:1,column:149229}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1608":{loc:{start:{line:1,column:149199},end:{line:1,column:149223}},type:"binary-expr",locations:[{start:{line:1,column:149199},end:{line:1,column:149210}},{start:{line:1,column:149212},end:{line:1,column:149223}}],line:1},"1609":{loc:{start:{line:1,column:149267},end:{line:1,column:149300}},type:"cond-expr",locations:[{start:{line:1,column:149272},end:{line:1,column:149284}},{start:{line:1,column:149285},end:{line:1,column:149300}}],line:1},"1610":{loc:{start:{line:1,column:149267},end:{line:1,column:149271}},type:"binary-expr",locations:[{start:{line:1,column:149267},end:{line:1,column:149268}},{start:{line:1,column:149270},end:{line:1,column:149271}}],line:1},"1611":{loc:{start:{line:1,column:149285},end:{line:1,column:149300}},type:"cond-expr",locations:[{start:{line:1,column:149287},end:{line:1,column:149291}},{start:{line:1,column:149292},end:{line:1,column:149300}}],line:1},"1612":{loc:{start:{line:1,column:149292},end:{line:1,column:149300}},type:"cond-expr",locations:[{start:{line:1,column:149294},end:{line:1,column:149298}},{start:{line:1,column:149299},end:{line:1,column:149300}}],line:1},"1613":{loc:{start:{line:1,column:149339},end:{line:1,column:149364}},type:"cond-expr",locations:[{start:{line:1,column:149345},end:{line:1,column:149353}},{start:{line:1,column:149355},end:{line:1,column:149364}}],line:1},"1614":{loc:{start:{line:1,column:149365},end:{line:1,column:149437}},type:"cond-expr",locations:[{start:{line:1,column:149374},end:{line:1,column:149432}},{start:{line:1,column:149433},end:{line:1,column:149437}}],line:1},"1615":{loc:{start:{line:1,column:149460},end:{line:1,column:149474}},type:"binary-expr",locations:[{start:{line:1,column:149460},end:{line:1,column:149461}},{start:{line:1,column:149463},end:{line:1,column:149474}}],line:1},"1616":{loc:{start:{line:1,column:149518},end:{line:1,column:149533}},type:"if",locations:[{start:{line:1,column:149518},end:{line:1,column:149533}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1617":{loc:{start:{line:1,column:149538},end:{line:1,column:149563}},type:"binary-expr",locations:[{start:{line:1,column:149538},end:{line:1,column:149544}},{start:{line:1,column:149546},end:{line:1,column:149563}}],line:1},"1618":{loc:{start:{line:1,column:149566},end:{line:1,column:149584}},type:"if",locations:[{start:{line:1,column:149566},end:{line:1,column:149584}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1619":{loc:{start:{line:1,column:149584},end:{line:1,column:149606}},type:"if",locations:[{start:{line:1,column:149584},end:{line:1,column:149606}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1620":{loc:{start:{line:1,column:149606},end:{line:1,column:149628}},type:"if",locations:[{start:{line:1,column:149606},end:{line:1,column:149628}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1621":{loc:{start:{line:1,column:149687},end:{line:1,column:149722}},type:"if",locations:[{start:{line:1,column:149687},end:{line:1,column:149722}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1622":{loc:{start:{line:1,column:149702},end:{line:1,column:149721}},type:"cond-expr",locations:[{start:{line:1,column:149717},end:{line:1,column:149719}},{start:{line:1,column:149720},end:{line:1,column:149721}}],line:1},"1623":{loc:{start:{line:1,column:149749},end:{line:1,column:149845}},type:"cond-expr",locations:[{start:{line:1,column:149773},end:{line:1,column:149787}},{start:{line:1,column:149788},end:{line:1,column:149845}}],line:1},"1624":{loc:{start:{line:1,column:149749},end:{line:1,column:149772}},type:"binary-expr",locations:[{start:{line:1,column:149749},end:{line:1,column:149753}},{start:{line:1,column:149755},end:{line:1,column:149772}}],line:1},"1625":{loc:{start:{line:1,column:149788},end:{line:1,column:149845}},type:"binary-expr",locations:[{start:{line:1,column:149788},end:{line:1,column:149842}},{start:{line:1,column:149844},end:{line:1,column:149845}}],line:1},"1626":{loc:{start:{line:1,column:149873},end:{line:1,column:149900}},type:"binary-expr",locations:[{start:{line:1,column:149874},end:{line:1,column:149881}},{start:{line:1,column:149883},end:{line:1,column:149890}},{start:{line:1,column:149894},end:{line:1,column:149899}}],line:1},"1627":{loc:{start:{line:1,column:149901},end:{line:1,column:149922}},type:"cond-expr",locations:[{start:{line:1,column:149918},end:{line:1,column:149920}},{start:{line:1,column:149921},end:{line:1,column:149922}}],line:1},"1628":{loc:{start:{line:1,column:149901},end:{line:1,column:149917}},type:"binary-expr",locations:[{start:{line:1,column:149901},end:{line:1,column:149906}},{start:{line:1,column:149908},end:{line:1,column:149911}},{start:{line:1,column:149913},end:{line:1,column:149917}}],line:1},"1629":{loc:{start:{line:1,column:149958},end:{line:1,column:150070}},type:"cond-expr",locations:[{start:{line:1,column:149970},end:{line:1,column:149980}},{start:{line:1,column:149981},end:{line:1,column:150070}}],line:1},"1630":{loc:{start:{line:1,column:149981},end:{line:1,column:150070}},type:"cond-expr",locations:[{start:{line:1,column:149991},end:{line:1,column:149998}},{start:{line:1,column:149999},end:{line:1,column:150070}}],line:1},"1631":{loc:{start:{line:1,column:149999},end:{line:1,column:150070}},type:"cond-expr",locations:[{start:{line:1,column:150004},end:{line:1,column:150033}},{start:{line:1,column:150034},end:{line:1,column:150070}}],line:1},"1632":{loc:{start:{line:1,column:150034},end:{line:1,column:150070}},type:"binary-expr",locations:[{start:{line:1,column:150034},end:{line:1,column:150048}},{start:{line:1,column:150051},end:{line:1,column:150069}}],line:1},"1633":{loc:{start:{line:1,column:150105},end:{line:1,column:150196}},type:"cond-expr",locations:[{start:{line:1,column:150117},end:{line:1,column:150120}},{start:{line:1,column:150121},end:{line:1,column:150196}}],line:1},"1634":{loc:{start:{line:1,column:150121},end:{line:1,column:150196}},type:"cond-expr",locations:[{start:{line:1,column:150131},end:{line:1,column:150162}},{start:{line:1,column:150163},end:{line:1,column:150196}}],line:1},"1635":{loc:{start:{line:1,column:150133},end:{line:1,column:150162}},type:"cond-expr",locations:[{start:{line:1,column:150151},end:{line:1,column:150156}},{start:{line:1,column:150157},end:{line:1,column:150162}}],line:1},"1636":{loc:{start:{line:1,column:150163},end:{line:1,column:150196}},type:"cond-expr",locations:[{start:{line:1,column:150168},end:{line:1,column:150177}},{start:{line:1,column:150178},end:{line:1,column:150196}}],line:1},"1637":{loc:{start:{line:1,column:150243},end:{line:1,column:150254}},type:"binary-expr",locations:[{start:{line:1,column:150243},end:{line:1,column:150244}},{start:{line:1,column:150246},end:{line:1,column:150254}}],line:1},"1638":{loc:{start:{line:1,column:150265},end:{line:1,column:150300}},type:"binary-expr",locations:[{start:{line:1,column:150265},end:{line:1,column:150275}},{start:{line:1,column:150278},end:{line:1,column:150299}}],line:1},"1639":{loc:{start:{line:1,column:150301},end:{line:1,column:150338}},type:"cond-expr",locations:[{start:{line:1,column:150318},end:{line:1,column:150320}},{start:{line:1,column:150321},end:{line:1,column:150338}}],line:1},"1640":{loc:{start:{line:1,column:150301},end:{line:1,column:150317}},type:"binary-expr",locations:[{start:{line:1,column:150301},end:{line:1,column:150307}},{start:{line:1,column:150309},end:{line:1,column:150317}}],line:1},"1641":{loc:{start:{line:1,column:150321},end:{line:1,column:150338}},type:"cond-expr",locations:[{start:{line:1,column:150328},end:{line:1,column:150336}},{start:{line:1,column:150337},end:{line:1,column:150338}}],line:1},"1642":{loc:{start:{line:1,column:150678},end:{line:1,column:150699}},type:"if",locations:[{start:{line:1,column:150678},end:{line:1,column:150699}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1643":{loc:{start:{line:1,column:150699},end:{line:1,column:150729}},type:"binary-expr",locations:[{start:{line:1,column:150699},end:{line:1,column:150707}},{start:{line:1,column:150709},end:{line:1,column:150729}}],line:1},"1644":{loc:{start:{line:1,column:150843},end:{line:1,column:150904}},type:"if",locations:[{start:{line:1,column:150843},end:{line:1,column:150904}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1645":{loc:{start:{line:1,column:150848},end:{line:1,column:150856}},type:"binary-expr",locations:[{start:{line:1,column:150848},end:{line:1,column:150850}},{start:{line:1,column:150852},end:{line:1,column:150853}},{start:{line:1,column:150855},end:{line:1,column:150856}}],line:1},"1646":{loc:{start:{line:1,column:150859},end:{line:1,column:150903}},type:"if",locations:[{start:{line:1,column:150859},end:{line:1,column:150903}},{start:{line:1,column:150882},end:{line:1,column:150903}}],line:1},"1647":{loc:{start:{line:1,column:150882},end:{line:1,column:150903}},type:"if",locations:[{start:{line:1,column:150882},end:{line:1,column:150903}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1648":{loc:{start:{line:1,column:150962},end:{line:1,column:150977}},type:"if",locations:[{start:{line:1,column:150962},end:{line:1,column:150977}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1649":{loc:{start:{line:1,column:151091},end:{line:1,column:151127}},type:"if",locations:[{start:{line:1,column:151091},end:{line:1,column:151127}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1650":{loc:{start:{line:1,column:151285},end:{line:1,column:151303}},type:"binary-expr",locations:[{start:{line:1,column:151285},end:{line:1,column:151286}},{start:{line:1,column:151288},end:{line:1,column:151303}}],line:1},"1651":{loc:{start:{line:1,column:151494},end:{line:1,column:151517}},type:"if",locations:[{start:{line:1,column:151494},end:{line:1,column:151517}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1652":{loc:{start:{line:1,column:151517},end:{line:1,column:151545}},type:"if",locations:[{start:{line:1,column:151517},end:{line:1,column:151545}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1653":{loc:{start:{line:1,column:151545},end:{line:1,column:151569}},type:"if",locations:[{start:{line:1,column:151545},end:{line:1,column:151569}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1654":{loc:{start:{line:1,column:151588},end:{line:1,column:151613}},type:"cond-expr",locations:[{start:{line:1,column:151604},end:{line:1,column:151605}},{start:{line:1,column:151606},end:{line:1,column:151613}}],line:1},"1655":{loc:{start:{line:1,column:151664},end:{line:1,column:151703}},type:"cond-expr",locations:[{start:{line:1,column:151689},end:{line:1,column:151698}},{start:{line:1,column:151699},end:{line:1,column:151703}}],line:1},"1656":{loc:{start:{line:1,column:151664},end:{line:1,column:151688}},type:"binary-expr",locations:[{start:{line:1,column:151664},end:{line:1,column:151665}},{start:{line:1,column:151667},end:{line:1,column:151688}}],line:1},"1657":{loc:{start:{line:1,column:151725},end:{line:1,column:151775}},type:"cond-expr",locations:[{start:{line:1,column:151764},end:{line:1,column:151769}},{start:{line:1,column:151770},end:{line:1,column:151775}}],line:1},"1658":{loc:{start:{line:1,column:151726},end:{line:1,column:151737}},type:"binary-expr",locations:[{start:{line:1,column:151726},end:{line:1,column:151733}},{start:{line:1,column:151735},end:{line:1,column:151737}}],line:1},"1659":{loc:{start:{line:1,column:151801},end:{line:1,column:151805}},type:"default-arg",locations:[{start:{line:1,column:151803},end:{line:1,column:151805}}],line:1},"1660":{loc:{start:{line:1,column:151826},end:{line:1,column:151888}},type:"if",locations:[{start:{line:1,column:151826},end:{line:1,column:151888}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1661":{loc:{start:{line:1,column:151867},end:{line:1,column:151875}},type:"cond-expr",locations:[{start:{line:1,column:151869},end:{line:1,column:151870}},{start:{line:1,column:151871},end:{line:1,column:151875}}],line:1},"1662":{loc:{start:{line:1,column:151878},end:{line:1,column:151886}},type:"cond-expr",locations:[{start:{line:1,column:151880},end:{line:1,column:151884}},{start:{line:1,column:151885},end:{line:1,column:151886}}],line:1},"1663":{loc:{start:{line:1,column:151974},end:{line:1,column:151995}},type:"cond-expr",locations:[{start:{line:1,column:151984},end:{line:1,column:151989}},{start:{line:1,column:151990},end:{line:1,column:151995}}],line:1},"1664":{loc:{start:{line:1,column:152013},end:{line:1,column:152142}},type:"if",locations:[{start:{line:1,column:152013},end:{line:1,column:152142}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1665":{loc:{start:{line:1,column:152332},end:{line:1,column:152335}},type:"default-arg",locations:[{start:{line:1,column:152334},end:{line:1,column:152335}}],line:1},"1666":{loc:{start:{line:1,column:152342},end:{line:1,column:152345}},type:"default-arg",locations:[{start:{line:1,column:152344},end:{line:1,column:152345}}],line:1},"1667":{loc:{start:{line:1,column:152347},end:{line:1,column:152352}},type:"binary-expr",locations:[{start:{line:1,column:152347},end:{line:1,column:152348}},{start:{line:1,column:152350},end:{line:1,column:152352}}],line:1},"1668":{loc:{start:{line:1,column:152385},end:{line:1,column:152489}},type:"binary-expr",locations:[{start:{line:1,column:152385},end:{line:1,column:152386}},{start:{line:1,column:152388},end:{line:1,column:152403}},{start:{line:1,column:152406},end:{line:1,column:152488}}],line:1},"1669":{loc:{start:{line:1,column:152570},end:{line:1,column:152592}},type:"cond-expr",locations:[{start:{line:1,column:152578},end:{line:1,column:152585}},{start:{line:1,column:152586},end:{line:1,column:152592}}],line:1},"1670":{loc:{start:{line:1,column:152610},end:{line:1,column:152863}},type:"binary-expr",locations:[{start:{line:1,column:152610},end:{line:1,column:152615}},{start:{line:1,column:152618},end:{line:1,column:152862}}],line:1},"1671":{loc:{start:{line:1,column:152618},end:{line:1,column:152862}},type:"cond-expr",locations:[{start:{line:1,column:152627},end:{line:1,column:152736}},{start:{line:1,column:152738},end:{line:1,column:152862}}],line:1},"1672":{loc:{start:{line:1,column:152738},end:{line:1,column:152862}},type:"binary-expr",locations:[{start:{line:1,column:152738},end:{line:1,column:152745}},{start:{line:1,column:152748},end:{line:1,column:152861}}],line:1},"1673":{loc:{start:{line:1,column:153063},end:{line:1,column:153125}},type:"cond-expr",locations:[{start:{line:1,column:153066},end:{line:1,column:153088}},{start:{line:1,column:153091},end:{line:1,column:153124}}],line:1},"1674":{loc:{start:{line:1,column:153158},end:{line:1,column:153189}},type:"cond-expr",locations:[{start:{line:1,column:153160},end:{line:1,column:153173}},{start:{line:1,column:153174},end:{line:1,column:153189}}],line:1},"1675":{loc:{start:{line:1,column:153366},end:{line:1,column:153428}},type:"cond-expr",locations:[{start:{line:1,column:153369},end:{line:1,column:153391}},{start:{line:1,column:153394},end:{line:1,column:153427}}],line:1},"1676":{loc:{start:{line:1,column:153461},end:{line:1,column:153492}},type:"cond-expr",locations:[{start:{line:1,column:153463},end:{line:1,column:153476}},{start:{line:1,column:153477},end:{line:1,column:153492}}],line:1},"1677":{loc:{start:{line:1,column:153682},end:{line:1,column:153706}},type:"default-arg",locations:[{start:{line:1,column:153704},end:{line:1,column:153706}}],line:1},"1678":{loc:{start:{line:1,column:153699},end:{line:1,column:153702}},type:"default-arg",locations:[{start:{line:1,column:153701},end:{line:1,column:153702}}],line:1},"1679":{loc:{start:{line:1,column:153751},end:{line:1,column:153763}},type:"binary-expr",locations:[{start:{line:1,column:153751},end:{line:1,column:153752}},{start:{line:1,column:153754},end:{line:1,column:153763}}],line:1},"1680":{loc:{start:{line:1,column:153808},end:{line:1,column:153911}},type:"if",locations:[{start:{line:1,column:153808},end:{line:1,column:153911}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1681":{loc:{start:{line:1,column:153814},end:{line:1,column:153841}},type:"cond-expr",locations:[{start:{line:1,column:153816},end:{line:1,column:153829}},{start:{line:1,column:153830},end:{line:1,column:153841}}],line:1},"1682":{loc:{start:{line:1,column:153891},end:{line:1,column:153895}},type:"binary-expr",locations:[{start:{line:1,column:153891},end:{line:1,column:153892}},{start:{line:1,column:153894},end:{line:1,column:153895}}],line:1},"1683":{loc:{start:{line:1,column:153896},end:{line:1,column:153910}},type:"binary-expr",locations:[{start:{line:1,column:153896},end:{line:1,column:153897}},{start:{line:1,column:153899},end:{line:1,column:153910}}],line:1},"1684":{loc:{start:{line:1,column:153932},end:{line:1,column:153953}},type:"cond-expr",locations:[{start:{line:1,column:153934},end:{line:1,column:153943}},{start:{line:1,column:153944},end:{line:1,column:153953}}],line:1},"1685":{loc:{start:{line:1,column:154040},end:{line:1,column:154045}},type:"binary-expr",locations:[{start:{line:1,column:154040},end:{line:1,column:154041}},{start:{line:1,column:154043},end:{line:1,column:154045}}],line:1},"1686":{loc:{start:{line:1,column:154046},end:{line:1,column:154279}},type:"if",locations:[{start:{line:1,column:154046},end:{line:1,column:154279}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1687":{loc:{start:{line:1,column:154049},end:{line:1,column:154065}},type:"binary-expr",locations:[{start:{line:1,column:154049},end:{line:1,column:154056}},{start:{line:1,column:154058},end:{line:1,column:154065}}],line:1},"1688":{loc:{start:{line:1,column:154079},end:{line:1,column:154144}},type:"cond-expr",locations:[{start:{line:1,column:154088},end:{line:1,column:154114}},{start:{line:1,column:154117},end:{line:1,column:154143}}],line:1},"1689":{loc:{start:{line:1,column:154159},end:{line:1,column:154249}},type:"binary-expr",locations:[{start:{line:1,column:154159},end:{line:1,column:154160}},{start:{line:1,column:154163},end:{line:1,column:154248}}],line:1},"1690":{loc:{start:{line:1,column:154326},end:{line:1,column:154346}},type:"binary-expr",locations:[{start:{line:1,column:154326},end:{line:1,column:154327}},{start:{line:1,column:154329},end:{line:1,column:154346}}],line:1},"1691":{loc:{start:{line:1,column:154401},end:{line:1,column:154420}},type:"binary-expr",locations:[{start:{line:1,column:154401},end:{line:1,column:154416}},{start:{line:1,column:154418},end:{line:1,column:154420}}],line:1},"1692":{loc:{start:{line:1,column:154499},end:{line:1,column:154654}},type:"binary-expr",locations:[{start:{line:1,column:154499},end:{line:1,column:154500}},{start:{line:1,column:154502},end:{line:1,column:154511}},{start:{line:1,column:154513},end:{line:1,column:154528}},{start:{line:1,column:154531},end:{line:1,column:154653}}],line:1},"1693":{loc:{start:{line:1,column:154700},end:{line:1,column:154748}},type:"binary-expr",locations:[{start:{line:1,column:154700},end:{line:1,column:154718}},{start:{line:1,column:154721},end:{line:1,column:154747}}],line:1},"1694":{loc:{start:{line:1,column:154702},end:{line:1,column:154717}},type:"binary-expr",locations:[{start:{line:1,column:154702},end:{line:1,column:154704}},{start:{line:1,column:154706},end:{line:1,column:154717}}],line:1},"1695":{loc:{start:{line:1,column:154899},end:{line:1,column:154965}},type:"binary-expr",locations:[{start:{line:1,column:154899},end:{line:1,column:154900}},{start:{line:1,column:154903},end:{line:1,column:154964}}],line:1},"1696":{loc:{start:{line:1,column:154940},end:{line:1,column:154964}},type:"binary-expr",locations:[{start:{line:1,column:154940},end:{line:1,column:154941}},{start:{line:1,column:154943},end:{line:1,column:154949}},{start:{line:1,column:154951},end:{line:1,column:154964}}],line:1},"1697":{loc:{start:{line:1,column:154994},end:{line:1,column:155038}},type:"if",locations:[{start:{line:1,column:154994},end:{line:1,column:155038}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1698":{loc:{start:{line:1,column:155127},end:{line:1,column:155157}},type:"binary-expr",locations:[{start:{line:1,column:155127},end:{line:1,column:155132}},{start:{line:1,column:155134},end:{line:1,column:155157}}],line:1},"1699":{loc:{start:{line:1,column:155206},end:{line:1,column:155271}},type:"binary-expr",locations:[{start:{line:1,column:155206},end:{line:1,column:155212}},{start:{line:1,column:155214},end:{line:1,column:155246}},{start:{line:1,column:155248},end:{line:1,column:155271}}],line:1},"1700":{loc:{start:{line:1,column:155352},end:{line:1,column:155355}},type:"default-arg",locations:[{start:{line:1,column:155354},end:{line:1,column:155355}}],line:1},"1701":{loc:{start:{line:1,column:155365},end:{line:1,column:155368}},type:"default-arg",locations:[{start:{line:1,column:155367},end:{line:1,column:155368}}],line:1},"1702":{loc:{start:{line:1,column:155379},end:{line:1,column:155448}},type:"binary-expr",locations:[{start:{line:1,column:155379},end:{line:1,column:155394}},{start:{line:1,column:155397},end:{line:1,column:155447}}],line:1},"1703":{loc:{start:{line:1,column:155415},end:{line:1,column:155447}},type:"binary-expr",locations:[{start:{line:1,column:155415},end:{line:1,column:155432}},{start:{line:1,column:155434},end:{line:1,column:155447}}],line:1},"1704":{loc:{start:{line:1,column:155510},end:{line:1,column:155580}},type:"binary-expr",locations:[{start:{line:1,column:155510},end:{line:1,column:155518}},{start:{line:1,column:155520},end:{line:1,column:155528}},{start:{line:1,column:155530},end:{line:1,column:155561}},{start:{line:1,column:155563},end:{line:1,column:155580}}],line:1},"1705":{loc:{start:{line:1,column:156196},end:{line:1,column:156373}},type:"cond-expr",locations:[{start:{line:1,column:156217},end:{line:1,column:156292}},{start:{line:1,column:156295},end:{line:1,column:156372}}],line:1},"1706":{loc:{start:{line:1,column:156394},end:{line:1,column:156417}},type:"binary-expr",locations:[{start:{line:1,column:156394},end:{line:1,column:156413}},{start:{line:1,column:156415},end:{line:1,column:156417}}],line:1},"1707":{loc:{start:{line:1,column:156420},end:{line:1,column:156461}},type:"binary-expr",locations:[{start:{line:1,column:156420},end:{line:1,column:156457}},{start:{line:1,column:156459},end:{line:1,column:156461}}],line:1},"1708":{loc:{start:{line:1,column:156462},end:{line:1,column:156516}},type:"binary-expr",locations:[{start:{line:1,column:156462},end:{line:1,column:156470}},{start:{line:1,column:156473},end:{line:1,column:156515}}],line:1},"1709":{loc:{start:{line:1,column:156517},end:{line:1,column:156571}},type:"binary-expr",locations:[{start:{line:1,column:156517},end:{line:1,column:156523}},{start:{line:1,column:156526},end:{line:1,column:156570}}],line:1},"1710":{loc:{start:{line:1,column:156572},end:{line:1,column:156605}},type:"binary-expr",locations:[{start:{line:1,column:156572},end:{line:1,column:156592}},{start:{line:1,column:156594},end:{line:1,column:156605}}],line:1},"1711":{loc:{start:{line:1,column:156657},end:{line:1,column:156704}},type:"if",locations:[{start:{line:1,column:156657},end:{line:1,column:156704}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1712":{loc:{start:{line:1,column:156823},end:{line:1,column:156935}},type:"cond-expr",locations:[{start:{line:1,column:156844},end:{line:1,column:156887}},{start:{line:1,column:156890},end:{line:1,column:156934}}],line:1},"1713":{loc:{start:{line:1,column:156958},end:{line:1,column:156983}},type:"binary-expr",locations:[{start:{line:1,column:156958},end:{line:1,column:156968}},{start:{line:1,column:156970},end:{line:1,column:156983}}],line:1},"1714":{loc:{start:{line:1,column:157008},end:{line:1,column:157035}},type:"binary-expr",locations:[{start:{line:1,column:157008},end:{line:1,column:157019}},{start:{line:1,column:157021},end:{line:1,column:157035}}],line:1},"1715":{loc:{start:{line:1,column:157305},end:{line:1,column:157376}},type:"binary-expr",locations:[{start:{line:1,column:157306},end:{line:1,column:157311}},{start:{line:1,column:157313},end:{line:1,column:157334}},{start:{line:1,column:157338},end:{line:1,column:157375}}],line:1},"1716":{loc:{start:{line:1,column:157355},end:{line:1,column:157362}},type:"cond-expr",locations:[{start:{line:1,column:157359},end:{line:1,column:157360}},{start:{line:1,column:157361},end:{line:1,column:157362}}],line:1},"1717":{loc:{start:{line:1,column:157675},end:{line:1,column:157743}},type:"binary-expr",locations:[{start:{line:1,column:157675},end:{line:1,column:157678}},{start:{line:1,column:157680},end:{line:1,column:157689}},{start:{line:1,column:157692},end:{line:1,column:157742}}],line:1},"1718":{loc:{start:{line:1,column:157863},end:{line:1,column:157895}},type:"if",locations:[{start:{line:1,column:157863},end:{line:1,column:157895}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1719":{loc:{start:{line:1,column:158024},end:{line:1,column:158509}},type:"if",locations:[{start:{line:1,column:158024},end:{line:1,column:158509}},{start:{line:1,column:158263},end:{line:1,column:158509}}],line:1},"1720":{loc:{start:{line:1,column:158120},end:{line:1,column:158189}},type:"binary-expr",locations:[{start:{line:1,column:158120},end:{line:1,column:158129}},{start:{line:1,column:158132},end:{line:1,column:158188}}],line:1},"1721":{loc:{start:{line:1,column:158346},end:{line:1,column:158425}},type:"binary-expr",locations:[{start:{line:1,column:158346},end:{line:1,column:158355}},{start:{line:1,column:158358},end:{line:1,column:158424}}],line:1},"1722":{loc:{start:{line:1,column:158532},end:{line:1,column:158595}},type:"binary-expr",locations:[{start:{line:1,column:158532},end:{line:1,column:158561}},{start:{line:1,column:158563},end:{line:1,column:158595}}],line:1},"1723":{loc:{start:{line:1,column:158603},end:{line:1,column:158673}},type:"if",locations:[{start:{line:1,column:158603},end:{line:1,column:158673}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1724":{loc:{start:{line:1,column:159013},end:{line:1,column:159053}},type:"if",locations:[{start:{line:1,column:159013},end:{line:1,column:159053}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1725":{loc:{start:{line:1,column:159016},end:{line:1,column:159045}},type:"binary-expr",locations:[{start:{line:1,column:159016},end:{line:1,column:159024}},{start:{line:1,column:159026},end:{line:1,column:159030}},{start:{line:1,column:159032},end:{line:1,column:159040}},{start:{line:1,column:159042},end:{line:1,column:159045}}],line:1},"1726":{loc:{start:{line:1,column:159085},end:{line:1,column:159655}},type:"if",locations:[{start:{line:1,column:159085},end:{line:1,column:159655}},{start:{line:1,column:159463},end:{line:1,column:159655}}],line:1},"1727":{loc:{start:{line:1,column:159437},end:{line:1,column:159457}},type:"binary-expr",locations:[{start:{line:1,column:159437},end:{line:1,column:159454}},{start:{line:1,column:159456},end:{line:1,column:159457}}],line:1},"1728":{loc:{start:{line:1,column:159547},end:{line:1,column:159627}},type:"cond-expr",locations:[{start:{line:1,column:159579},end:{line:1,column:159611}},{start:{line:1,column:159612},end:{line:1,column:159627}}],line:1},"1729":{loc:{start:{line:1,column:159637},end:{line:1,column:159654}},type:"binary-expr",locations:[{start:{line:1,column:159637},end:{line:1,column:159642}},{start:{line:1,column:159644},end:{line:1,column:159654}}],line:1},"1730":{loc:{start:{line:1,column:159821},end:{line:1,column:159952}},type:"cond-expr",locations:[{start:{line:1,column:159823},end:{line:1,column:159883}},{start:{line:1,column:159884},end:{line:1,column:159952}}],line:1},"1731":{loc:{start:{line:1,column:160123},end:{line:1,column:160161}},type:"binary-expr",locations:[{start:{line:1,column:160123},end:{line:1,column:160134}},{start:{line:1,column:160137},end:{line:1,column:160160}}],line:1},"1732":{loc:{start:{line:1,column:160206},end:{line:1,column:160406}},type:"cond-expr",locations:[{start:{line:1,column:160208},end:{line:1,column:160294}},{start:{line:1,column:160295},end:{line:1,column:160406}}],line:1},"1733":{loc:{start:{line:1,column:160208},end:{line:1,column:160294}},type:"binary-expr",locations:[{start:{line:1,column:160208},end:{line:1,column:160211}},{start:{line:1,column:160213},end:{line:1,column:160229}},{start:{line:1,column:160232},end:{line:1,column:160293}}],line:1},"1734":{loc:{start:{line:1,column:160295},end:{line:1,column:160406}},type:"binary-expr",locations:[{start:{line:1,column:160295},end:{line:1,column:160298}},{start:{line:1,column:160300},end:{line:1,column:160315}},{start:{line:1,column:160318},end:{line:1,column:160405}}],line:1},"1735":{loc:{start:{line:1,column:160420},end:{line:1,column:160574}},type:"if",locations:[{start:{line:1,column:160420},end:{line:1,column:160574}},{start:{line:1,column:160499},end:{line:1,column:160574}}],line:1},"1736":{loc:{start:{line:1,column:160445},end:{line:1,column:160461}},type:"cond-expr",locations:[{start:{line:1,column:160447},end:{line:1,column:160450}},{start:{line:1,column:160451},end:{line:1,column:160461}}],line:1},"1737":{loc:{start:{line:1,column:160499},end:{line:1,column:160574}},type:"if",locations:[{start:{line:1,column:160499},end:{line:1,column:160574}},{start:{line:1,column:160568},end:{line:1,column:160574}}],line:1},"1738":{loc:{start:{line:1,column:160674},end:{line:1,column:160695}},type:"if",locations:[{start:{line:1,column:160674},end:{line:1,column:160695}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1739":{loc:{start:{line:1,column:160804},end:{line:1,column:161047}},type:"if",locations:[{start:{line:1,column:160804},end:{line:1,column:161047}},{start:{line:1,column:160903},end:{line:1,column:161047}}],line:1},"1740":{loc:{start:{line:1,column:161277},end:{line:1,column:161310}},type:"cond-expr",locations:[{start:{line:1,column:161287},end:{line:1,column:161308}},{start:{line:1,column:161309},end:{line:1,column:161310}}],line:1},"1741":{loc:{start:{line:1,column:161343},end:{line:1,column:161540}},type:"if",locations:[{start:{line:1,column:161343},end:{line:1,column:161540}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1742":{loc:{start:{line:1,column:161346},end:{line:1,column:161400}},type:"binary-expr",locations:[{start:{line:1,column:161346},end:{line:1,column:161372}},{start:{line:1,column:161374},end:{line:1,column:161400}}],line:1},"1743":{loc:{start:{line:1,column:161447},end:{line:1,column:161539}},type:"if",locations:[{start:{line:1,column:161447},end:{line:1,column:161539}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1744":{loc:{start:{line:1,column:161457},end:{line:1,column:161512}},type:"binary-expr",locations:[{start:{line:1,column:161457},end:{line:1,column:161484}},{start:{line:1,column:161486},end:{line:1,column:161512}}],line:1},"1745":{loc:{start:{line:1,column:161586},end:{line:1,column:161610}},type:"if",locations:[{start:{line:1,column:161586},end:{line:1,column:161610}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1746":{loc:{start:{line:1,column:161647},end:{line:1,column:161855}},type:"if",locations:[{start:{line:1,column:161647},end:{line:1,column:161855}},{start:{line:1,column:161824},end:{line:1,column:161855}}],line:1},"1747":{loc:{start:{line:1,column:161650},end:{line:1,column:161691}},type:"binary-expr",locations:[{start:{line:1,column:161650},end:{line:1,column:161670}},{start:{line:1,column:161672},end:{line:1,column:161691}}],line:1},"1748":{loc:{start:{line:1,column:161727},end:{line:1,column:161762}},type:"binary-expr",locations:[{start:{line:1,column:161727},end:{line:1,column:161728}},{start:{line:1,column:161730},end:{line:1,column:161732}},{start:{line:1,column:161734},end:{line:1,column:161762}}],line:1},"1749":{loc:{start:{line:1,column:161783},end:{line:1,column:161818}},type:"binary-expr",locations:[{start:{line:1,column:161783},end:{line:1,column:161784}},{start:{line:1,column:161786},end:{line:1,column:161788}},{start:{line:1,column:161790},end:{line:1,column:161818}}],line:1},"1750":{loc:{start:{line:1,column:161824},end:{line:1,column:161855}},type:"binary-expr",locations:[{start:{line:1,column:161824},end:{line:1,column:161825}},{start:{line:1,column:161827},end:{line:1,column:161855}}],line:1},"1751":{loc:{start:{line:1,column:161996},end:{line:1,column:162061}},type:"binary-expr",locations:[{start:{line:1,column:161996},end:{line:1,column:161997}},{start:{line:1,column:161999},end:{line:1,column:162017}},{start:{line:1,column:162020},end:{line:1,column:162060}}],line:1},"1752":{loc:{start:{line:1,column:162038},end:{line:1,column:162059}},type:"cond-expr",locations:[{start:{line:1,column:162056},end:{line:1,column:162057}},{start:{line:1,column:162058},end:{line:1,column:162059}}],line:1},"1753":{loc:{start:{line:1,column:162130},end:{line:1,column:162166}},type:"binary-expr",locations:[{start:{line:1,column:162130},end:{line:1,column:162153}},{start:{line:1,column:162156},end:{line:1,column:162165}}],line:1},"1754":{loc:{start:{line:1,column:162192},end:{line:1,column:162214}},type:"cond-expr",locations:[{start:{line:1,column:162199},end:{line:1,column:162212}},{start:{line:1,column:162213},end:{line:1,column:162214}}],line:1},"1755":{loc:{start:{line:1,column:162252},end:{line:1,column:162350}},type:"binary-expr",locations:[{start:{line:1,column:162253},end:{line:1,column:162268}},{start:{line:1,column:162270},end:{line:1,column:162284}},{start:{line:1,column:162288},end:{line:1,column:162297}},{start:{line:1,column:162299},end:{line:1,column:162308}},{start:{line:1,column:162311},end:{line:1,column:162320}},{start:{line:1,column:162323},end:{line:1,column:162334}},{start:{line:1,column:162336},end:{line:1,column:162349}}],line:1},"1756":{loc:{start:{line:1,column:162682},end:{line:1,column:162721}},type:"binary-expr",locations:[{start:{line:1,column:162682},end:{line:1,column:162690}},{start:{line:1,column:162692},end:{line:1,column:162721}}],line:1},"1757":{loc:{start:{line:1,column:162854},end:{line:1,column:162923}},type:"cond-expr",locations:[{start:{line:1,column:162877},end:{line:1,column:162898}},{start:{line:1,column:162901},end:{line:1,column:162922}}],line:1},"1758":{loc:{start:{line:1,column:163233},end:{line:1,column:163243}},type:"cond-expr",locations:[{start:{line:1,column:163235},end:{line:1,column:163236}},{start:{line:1,column:163237},end:{line:1,column:163243}}],line:1},"1759":{loc:{start:{line:1,column:163527},end:{line:1,column:163542}},type:"binary-expr",locations:[{start:{line:1,column:163527},end:{line:1,column:163528}},{start:{line:1,column:163530},end:{line:1,column:163542}}],line:1},"1760":{loc:{start:{line:1,column:163573},end:{line:1,column:163587}},type:"binary-expr",locations:[{start:{line:1,column:163573},end:{line:1,column:163574}},{start:{line:1,column:163576},end:{line:1,column:163587}}],line:1},"1761":{loc:{start:{line:1,column:163601},end:{line:1,column:163623}},type:"binary-expr",locations:[{start:{line:1,column:163601},end:{line:1,column:163602}},{start:{line:1,column:163605},end:{line:1,column:163606}},{start:{line:1,column:163608},end:{line:1,column:163622}}],line:1},"1762":{loc:{start:{line:1,column:164174},end:{line:1,column:164267}},type:"if",locations:[{start:{line:1,column:164174},end:{line:1,column:164267}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1763":{loc:{start:{line:1,column:164323},end:{line:1,column:164348}},type:"cond-expr",locations:[{start:{line:1,column:164333},end:{line:1,column:164346}},{start:{line:1,column:164347},end:{line:1,column:164348}}],line:1},"1764":{loc:{start:{line:1,column:164426},end:{line:1,column:164472}},type:"cond-expr",locations:[{start:{line:1,column:164446},end:{line:1,column:164459}},{start:{line:1,column:164460},end:{line:1,column:164472}}],line:1},"1765":{loc:{start:{line:1,column:164523},end:{line:1,column:164546}},type:"binary-expr",locations:[{start:{line:1,column:164523},end:{line:1,column:164532}},{start:{line:1,column:164534},end:{line:1,column:164546}}],line:1},"1766":{loc:{start:{line:1,column:164637},end:{line:1,column:164762}},type:"cond-expr",locations:[{start:{line:1,column:164658},end:{line:1,column:164680}},{start:{line:1,column:164683},end:{line:1,column:164761}}],line:1},"1767":{loc:{start:{line:1,column:164683},end:{line:1,column:164755}},type:"cond-expr",locations:[{start:{line:1,column:164704},end:{line:1,column:164728}},{start:{line:1,column:164731},end:{line:1,column:164754}}],line:1},"1768":{loc:{start:{line:1,column:164842},end:{line:1,column:164863}},type:"if",locations:[{start:{line:1,column:164842},end:{line:1,column:164863}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1769":{loc:{start:{line:1,column:166039},end:{line:1,column:166061}},type:"if",locations:[{start:{line:1,column:166039},end:{line:1,column:166061}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1770":{loc:{start:{line:1,column:166134},end:{line:1,column:166202}},type:"if",locations:[{start:{line:1,column:166134},end:{line:1,column:166202}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1771":{loc:{start:{line:1,column:166137},end:{line:1,column:166152}},type:"binary-expr",locations:[{start:{line:1,column:166137},end:{line:1,column:166138}},{start:{line:1,column:166140},end:{line:1,column:166152}}],line:1},"1772":{loc:{start:{line:1,column:166210},end:{line:1,column:166273}},type:"cond-expr",locations:[{start:{line:1,column:166228},end:{line:1,column:166230}},{start:{line:1,column:166231},end:{line:1,column:166273}}],line:1},"1773":{loc:{start:{line:1,column:166210},end:{line:1,column:166227}},type:"binary-expr",locations:[{start:{line:1,column:166210},end:{line:1,column:166215}},{start:{line:1,column:166217},end:{line:1,column:166227}}],line:1},"1774":{loc:{start:{line:1,column:166288},end:{line:1,column:166310}},type:"if",locations:[{start:{line:1,column:166288},end:{line:1,column:166310}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1775":{loc:{start:{line:1,column:166406},end:{line:1,column:166476}},type:"if",locations:[{start:{line:1,column:166406},end:{line:1,column:166476}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1776":{loc:{start:{line:1,column:166409},end:{line:1,column:166424}},type:"binary-expr",locations:[{start:{line:1,column:166409},end:{line:1,column:166410}},{start:{line:1,column:166412},end:{line:1,column:166424}}],line:1},"1777":{loc:{start:{line:1,column:166461},end:{line:1,column:166475}},type:"binary-expr",locations:[{start:{line:1,column:166461},end:{line:1,column:166464}},{start:{line:1,column:166467},end:{line:1,column:166474}}],line:1},"1778":{loc:{start:{line:1,column:166477},end:{line:1,column:166521}},type:"if",locations:[{start:{line:1,column:166477},end:{line:1,column:166521}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1779":{loc:{start:{line:1,column:166563},end:{line:1,column:166614}},type:"binary-expr",locations:[{start:{line:1,column:166563},end:{line:1,column:166564}},{start:{line:1,column:166567},end:{line:1,column:166613}}],line:1},"1780":{loc:{start:{line:1,column:166567},end:{line:1,column:166613}},type:"cond-expr",locations:[{start:{line:1,column:166572},end:{line:1,column:166603}},{start:{line:1,column:166604},end:{line:1,column:166613}}],line:1},"1781":{loc:{start:{line:1,column:166638},end:{line:3,column:4}},type:"cond-expr",locations:[{start:{line:2,column:6},end:{line:3,column:2}},{start:{line:3,column:3},end:{line:3,column:4}}],line:1},"1782":{loc:{start:{line:1,column:166638},end:{line:2,column:5}},type:"binary-expr",locations:[{start:{line:1,column:166639},end:{line:1,column:166657}},{start:{line:1,column:166659},end:{line:1,column:166678}},{start:{line:1,column:166681},end:{line:2,column:5}}],line:1},"1783":{loc:{start:{line:3,column:562},end:{line:3,column:780}},type:"if",locations:[{start:{line:3,column:562},end:{line:3,column:780}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"1784":{loc:{start:{line:3,column:607},end:{line:3,column:670}},type:"binary-expr",locations:[{start:{line:3,column:607},end:{line:3,column:608}},{start:{line:3,column:611},end:{line:3,column:669}}],line:3},"1785":{loc:{start:{line:3,column:680},end:{line:3,column:733}},type:"cond-expr",locations:[{start:{line:3,column:696},end:{line:3,column:720}},{start:{line:3,column:721},end:{line:3,column:733}}],line:3},"1786":{loc:{start:{line:3,column:780},end:{line:3,column:842}},type:"binary-expr",locations:[{start:{line:3,column:780},end:{line:3,column:781}},{start:{line:3,column:784},end:{line:3,column:841}}],line:3},"1787":{loc:{start:{line:3,column:1006},end:{line:3,column:1040}},type:"cond-expr",locations:[{start:{line:3,column:1022},end:{line:3,column:1038}},{start:{line:3,column:1039},end:{line:3,column:1040}}],line:3},"1788":{loc:{start:{line:3,column:1211},end:{line:3,column:1255}},type:"cond-expr",locations:[{start:{line:3,column:1217},end:{line:3,column:1222}},{start:{line:3,column:1223},end:{line:3,column:1255}}],line:3},"1789":{loc:{start:{line:3,column:1223},end:{line:3,column:1255}},type:"cond-expr",locations:[{start:{line:3,column:1238},end:{line:3,column:1246}},{start:{line:3,column:1247},end:{line:3,column:1255}}],line:3},"1790":{loc:{start:{line:3,column:1325},end:{line:3,column:1384}},type:"if",locations:[{start:{line:3,column:1325},end:{line:3,column:1384}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"1791":{loc:{start:{line:3,column:1328},end:{line:3,column:1375}},type:"binary-expr",locations:[{start:{line:3,column:1328},end:{line:3,column:1338}},{start:{line:3,column:1340},end:{line:3,column:1353}},{start:{line:3,column:1355},end:{line:3,column:1366}},{start:{line:3,column:1368},end:{line:3,column:1375}}],line:3},"1792":{loc:{start:{line:3,column:1482},end:{line:3,column:1560}},type:"cond-expr",locations:[{start:{line:3,column:1495},end:{line:3,column:1522}},{start:{line:3,column:1523},end:{line:3,column:1560}}],line:3},"1793":{loc:{start:{line:3,column:1497},end:{line:3,column:1522}},type:"cond-expr",locations:[{start:{line:3,column:1508},end:{line:3,column:1514}},{start:{line:3,column:1515},end:{line:3,column:1522}}],line:3},"1794":{loc:{start:{line:3,column:1523},end:{line:3,column:1560}},type:"cond-expr",locations:[{start:{line:3,column:1530},end:{line:3,column:1538}},{start:{line:3,column:1539},end:{line:3,column:1560}}],line:3},"1795":{loc:{start:{line:3,column:1539},end:{line:3,column:1560}},type:"binary-expr",locations:[{start:{line:3,column:1539},end:{line:3,column:1547}},{start:{line:3,column:1550},end:{line:3,column:1559}}],line:3},"1796":{loc:{start:{line:3,column:1561},end:{line:3,column:1586}},type:"binary-expr",locations:[{start:{line:3,column:1561},end:{line:3,column:1572}},{start:{line:3,column:1575},end:{line:3,column:1585}}],line:3},"1797":{loc:{start:{line:3,column:1614},end:{line:3,column:1641}},type:"binary-expr",locations:[{start:{line:3,column:1614},end:{line:3,column:1622}},{start:{line:3,column:1624},end:{line:3,column:1632}},{start:{line:3,column:1634},end:{line:3,column:1641}}],line:3},"1798":{loc:{start:{line:3,column:1656},end:{line:3,column:1687}},type:"binary-expr",locations:[{start:{line:3,column:1656},end:{line:3,column:1664}},{start:{line:3,column:1666},end:{line:3,column:1674}},{start:{line:3,column:1676},end:{line:3,column:1687}}],line:3},"1799":{loc:{start:{line:3,column:1741},end:{line:3,column:1780}},type:"cond-expr",locations:[{start:{line:3,column:1753},end:{line:3,column:1757}},{start:{line:3,column:1758},end:{line:3,column:1780}}],line:3},"1800":{loc:{start:{line:3,column:1758},end:{line:3,column:1780}},type:"binary-expr",locations:[{start:{line:3,column:1758},end:{line:3,column:1770}},{start:{line:3,column:1773},end:{line:3,column:1779}}],line:3},"1801":{loc:{start:{line:3,column:1829},end:{line:3,column:1870}},type:"cond-expr",locations:[{start:{line:3,column:1839},end:{line:3,column:1843}},{start:{line:3,column:1844},end:{line:3,column:1870}}],line:3},"1802":{loc:{start:{line:3,column:1844},end:{line:3,column:1870}},type:"cond-expr",locations:[{start:{line:3,column:1857},end:{line:3,column:1863}},{start:{line:3,column:1864},end:{line:3,column:1870}}],line:3},"1803":{loc:{start:{line:3,column:2056},end:{line:3,column:2168}},type:"cond-expr",locations:[{start:{line:3,column:2069},end:{line:3,column:2104}},{start:{line:3,column:2105},end:{line:3,column:2168}}],line:3},"1804":{loc:{start:{line:3,column:2069},end:{line:3,column:2104}},type:"cond-expr",locations:[{start:{line:3,column:2080},end:{line:3,column:2084}},{start:{line:3,column:2085},end:{line:3,column:2104}}],line:3},"1805":{loc:{start:{line:3,column:2085},end:{line:3,column:2104}},type:"binary-expr",locations:[{start:{line:3,column:2085},end:{line:3,column:2096}},{start:{line:3,column:2099},end:{line:3,column:2103}}],line:3},"1806":{loc:{start:{line:3,column:2105},end:{line:3,column:2168}},type:"cond-expr",locations:[{start:{line:3,column:2116},end:{line:3,column:2134}},{start:{line:3,column:2135},end:{line:3,column:2168}}],line:3},"1807":{loc:{start:{line:3,column:2135},end:{line:3,column:2168}},type:"binary-expr",locations:[{start:{line:3,column:2135},end:{line:3,column:2146}},{start:{line:3,column:2149},end:{line:3,column:2167}}],line:3},"1808":{loc:{start:{line:3,column:2268},end:{line:3,column:2337}},type:"cond-expr",locations:[{start:{line:3,column:2281},end:{line:3,column:2294}},{start:{line:3,column:2295},end:{line:3,column:2337}}],line:3},"1809":{loc:{start:{line:3,column:2295},end:{line:3,column:2337}},type:"cond-expr",locations:[{start:{line:3,column:2307},end:{line:3,column:2326}},{start:{line:3,column:2327},end:{line:3,column:2337}}],line:3},"1810":{loc:{start:{line:3,column:2470},end:{line:3,column:2530}},type:"binary-expr",locations:[{start:{line:3,column:2470},end:{line:3,column:2471}},{start:{line:3,column:2473},end:{line:3,column:2482}},{start:{line:3,column:2484},end:{line:3,column:2501}},{start:{line:3,column:2503},end:{line:3,column:2530}}],line:3},"1811":{loc:{start:{line:3,column:2538},end:{line:3,column:2555}},type:"cond-expr",locations:[{start:{line:3,column:2540},end:{line:3,column:2553}},{start:{line:3,column:2554},end:{line:3,column:2555}}],line:3},"1812":{loc:{start:{line:3,column:2588},end:{line:3,column:2801}},type:"if",locations:[{start:{line:3,column:2588},end:{line:3,column:2801}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"1813":{loc:{start:{line:3,column:2638},end:{line:3,column:2650}},type:"cond-expr",locations:[{start:{line:3,column:2640},end:{line:3,column:2648}},{start:{line:3,column:2649},end:{line:3,column:2650}}],line:3},"1814":{loc:{start:{line:3,column:2651},end:{line:3,column:2731}},type:"if",locations:[{start:{line:3,column:2651},end:{line:3,column:2731}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"1815":{loc:{start:{line:3,column:2654},end:{line:3,column:2703}},type:"binary-expr",locations:[{start:{line:3,column:2654},end:{line:3,column:2658}},{start:{line:3,column:2660},end:{line:3,column:2672}},{start:{line:3,column:2674},end:{line:3,column:2703}}],line:3},"1816":{loc:{start:{line:3,column:2711},end:{line:3,column:2730}},type:"binary-expr",locations:[{start:{line:3,column:2711},end:{line:3,column:2726}},{start:{line:3,column:2728},end:{line:3,column:2730}}],line:3},"1817":{loc:{start:{line:3,column:2731},end:{line:3,column:2757}},type:"if",locations:[{start:{line:3,column:2731},end:{line:3,column:2757}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"1818":{loc:{start:{line:3,column:2757},end:{line:3,column:2800}},type:"if",locations:[{start:{line:3,column:2757},end:{line:3,column:2800}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"1819":{loc:{start:{line:3,column:2760},end:{line:3,column:2778}},type:"binary-expr",locations:[{start:{line:3,column:2760},end:{line:3,column:2763}},{start:{line:3,column:2765},end:{line:3,column:2778}}],line:3},"1820":{loc:{start:{line:3,column:2863},end:{line:3,column:2971}},type:"if",locations:[{start:{line:3,column:2863},end:{line:3,column:2971}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"1821":{loc:{start:{line:3,column:2866},end:{line:3,column:2915}},type:"binary-expr",locations:[{start:{line:3,column:2866},end:{line:3,column:2870}},{start:{line:3,column:2872},end:{line:3,column:2884}},{start:{line:3,column:2886},end:{line:3,column:2915}}],line:3},"1822":{loc:{start:{line:3,column:2923},end:{line:3,column:2970}},type:"binary-expr",locations:[{start:{line:3,column:2923},end:{line:3,column:2952}},{start:{line:3,column:2954},end:{line:3,column:2970}}],line:3},"1823":{loc:{start:{line:3,column:2977},end:{line:3,column:2996}},type:"binary-expr",locations:[{start:{line:3,column:2977},end:{line:3,column:2992}},{start:{line:3,column:2994},end:{line:3,column:2996}}],line:3},"1824":{loc:{start:{line:3,column:2997},end:{line:3,column:3009}},type:"binary-expr",locations:[{start:{line:3,column:2997},end:{line:3,column:2998}},{start:{line:3,column:3001},end:{line:3,column:3008}}],line:3},"1825":{loc:{start:{line:3,column:3040},end:{line:3,column:3052}},type:"binary-expr",locations:[{start:{line:3,column:3040},end:{line:3,column:3044}},{start:{line:3,column:3047},end:{line:3,column:3051}}],line:3},"1826":{loc:{start:{line:3,column:3633},end:{line:3,column:3663}},type:"cond-expr",locations:[{start:{line:3,column:3646},end:{line:3,column:3661}},{start:{line:3,column:3662},end:{line:3,column:3663}}],line:3},"1827":{loc:{start:{line:3,column:4430},end:{line:3,column:4444}},type:"if",locations:[{start:{line:3,column:4430},end:{line:3,column:4444}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"1828":{loc:{start:{line:3,column:4508},end:{line:3,column:4552}},type:"binary-expr",locations:[{start:{line:3,column:4508},end:{line:3,column:4517}},{start:{line:3,column:4519},end:{line:3,column:4538}},{start:{line:3,column:4540},end:{line:3,column:4552}}],line:3},"1829":{loc:{start:{line:3,column:4583},end:{line:3,column:4638}},type:"binary-expr",locations:[{start:{line:3,column:4583},end:{line:3,column:4595}},{start:{line:3,column:4598},end:{line:3,column:4637}}],line:3},"1830":{loc:{start:{line:3,column:4661},end:{line:3,column:4743}},type:"binary-expr",locations:[{start:{line:3,column:4661},end:{line:3,column:4674}},{start:{line:3,column:4677},end:{line:3,column:4742}}],line:3},"1831":{loc:{start:{line:3,column:5575},end:{line:3,column:5625}},type:"binary-expr",locations:[{start:{line:3,column:5575},end:{line:3,column:5583}},{start:{line:3,column:5586},end:{line:3,column:5624}}],line:3},"1832":{loc:{start:{line:3,column:5626},end:{line:3,column:5674}},type:"binary-expr",locations:[{start:{line:3,column:5626},end:{line:3,column:5636}},{start:{line:3,column:5639},end:{line:3,column:5673}}],line:3},"1833":{loc:{start:{line:3,column:5986},end:{line:3,column:6499}},type:"if",locations:[{start:{line:3,column:5986},end:{line:3,column:6499}},{start:{line:3,column:6037},end:{line:3,column:6499}}],line:3},"1834":{loc:{start:{line:3,column:5999},end:{line:3,column:6032}},type:"binary-expr",locations:[{start:{line:3,column:5999},end:{line:3,column:6015}},{start:{line:3,column:6018},end:{line:3,column:6031}}],line:3},"1835":{loc:{start:{line:3,column:6541},end:{line:3,column:6584}},type:"binary-expr",locations:[{start:{line:3,column:6541},end:{line:3,column:6542}},{start:{line:3,column:6544},end:{line:3,column:6584}}],line:3},"1836":{loc:{start:{line:3,column:6585},end:{line:3,column:6662}},type:"binary-expr",locations:[{start:{line:3,column:6585},end:{line:3,column:6586}},{start:{line:3,column:6588},end:{line:3,column:6598}},{start:{line:3,column:6600},end:{line:3,column:6662}}],line:3},"1837":{loc:{start:{line:3,column:6968},end:{line:3,column:7200}},type:"cond-expr",locations:[{start:{line:3,column:6982},end:{line:3,column:7054}},{start:{line:3,column:7057},end:{line:3,column:7199}}],line:3},"1838":{loc:{start:{line:3,column:6990},end:{line:3,column:7050}},type:"cond-expr",locations:[{start:{line:3,column:7002},end:{line:3,column:7023}},{start:{line:3,column:7026},end:{line:3,column:7049}}],line:3},"1839":{loc:{start:{line:3,column:7057},end:{line:3,column:7135}},type:"cond-expr",locations:[{start:{line:3,column:7068},end:{line:3,column:7087}},{start:{line:3,column:7088},end:{line:3,column:7135}}],line:3},"1840":{loc:{start:{line:3,column:7088},end:{line:3,column:7135}},type:"cond-expr",locations:[{start:{line:3,column:7100},end:{line:3,column:7121}},{start:{line:3,column:7122},end:{line:3,column:7135}}],line:3},"1841":{loc:{start:{line:3,column:7136},end:{line:3,column:7195}},type:"cond-expr",locations:[{start:{line:3,column:7147},end:{line:3,column:7168}},{start:{line:3,column:7171},end:{line:3,column:7194}}],line:3},"1842":{loc:{start:{line:3,column:7284},end:{line:3,column:7608}},type:"if",locations:[{start:{line:3,column:7284},end:{line:3,column:7608}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"1843":{loc:{start:{line:3,column:7570},end:{line:3,column:7607}},type:"binary-expr",locations:[{start:{line:3,column:7570},end:{line:3,column:7577}},{start:{line:3,column:7580},end:{line:3,column:7606}}],line:3},"1844":{loc:{start:{line:3,column:7761},end:{line:3,column:7796}},type:"cond-expr",locations:[{start:{line:3,column:7776},end:{line:3,column:7794}},{start:{line:3,column:7795},end:{line:3,column:7796}}],line:3},"1845":{loc:{start:{line:3,column:7805},end:{line:3,column:8725}},type:"if",locations:[{start:{line:3,column:7805},end:{line:3,column:8725}},{start:{line:3,column:8100},end:{line:3,column:8725}}],line:3},"1846":{loc:{start:{line:3,column:8113},end:{line:3,column:8188}},type:"cond-expr",locations:[{start:{line:3,column:8130},end:{line:3,column:8171}},{start:{line:3,column:8172},end:{line:3,column:8188}}],line:3},"1847":{loc:{start:{line:3,column:8172},end:{line:3,column:8188}},type:"binary-expr",locations:[{start:{line:3,column:8172},end:{line:3,column:8185}},{start:{line:3,column:8187},end:{line:3,column:8188}}],line:3},"1848":{loc:{start:{line:3,column:8231},end:{line:3,column:8247}},type:"binary-expr",locations:[{start:{line:3,column:8231},end:{line:3,column:8243}},{start:{line:3,column:8245},end:{line:3,column:8247}}],line:3},"1849":{loc:{start:{line:3,column:8266},end:{line:3,column:8287}},type:"binary-expr",locations:[{start:{line:3,column:8266},end:{line:3,column:8284}},{start:{line:3,column:8286},end:{line:3,column:8287}}],line:3},"1850":{loc:{start:{line:3,column:8366},end:{line:3,column:8724}},type:"cond-expr",locations:[{start:{line:3,column:8399},end:{line:3,column:8590}},{start:{line:3,column:8593},end:{line:3,column:8723}}],line:3},"1851":{loc:{start:{line:3,column:9151},end:{line:3,column:9192}},type:"cond-expr",locations:[{start:{line:3,column:9166},end:{line:3,column:9190}},{start:{line:3,column:9191},end:{line:3,column:9192}}],line:3},"1852":{loc:{start:{line:3,column:9151},end:{line:3,column:9165}},type:"binary-expr",locations:[{start:{line:3,column:9151},end:{line:3,column:9152}},{start:{line:3,column:9154},end:{line:3,column:9165}}],line:3},"1853":{loc:{start:{line:3,column:9166},end:{line:3,column:9190}},type:"cond-expr",locations:[{start:{line:3,column:9179},end:{line:3,column:9184}},{start:{line:3,column:9185},end:{line:3,column:9190}}],line:3},"1854":{loc:{start:{line:3,column:9292},end:{line:3,column:9363}},type:"binary-expr",locations:[{start:{line:3,column:9292},end:{line:3,column:9293}},{start:{line:3,column:9295},end:{line:3,column:9303}},{start:{line:3,column:9306},end:{line:3,column:9362}}],line:3},"1855":{loc:{start:{line:3,column:9520},end:{line:3,column:9830}},type:"if",locations:[{start:{line:3,column:9520},end:{line:3,column:9830}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"1856":{loc:{start:{line:3,column:10099},end:{line:3,column:10133}},type:"binary-expr",locations:[{start:{line:3,column:10099},end:{line:3,column:10108}},{start:{line:3,column:10110},end:{line:3,column:10133}}],line:3},"1857":{loc:{start:{line:3,column:10186},end:{line:3,column:10236}},type:"binary-expr",locations:[{start:{line:3,column:10186},end:{line:3,column:10198}},{start:{line:3,column:10200},end:{line:3,column:10211}},{start:{line:3,column:10213},end:{line:3,column:10236}}],line:3},"1858":{loc:{start:{line:3,column:10295},end:{line:3,column:10332}},type:"binary-expr",locations:[{start:{line:3,column:10295},end:{line:3,column:10307}},{start:{line:3,column:10309},end:{line:3,column:10332}}],line:3},"1859":{loc:{start:{line:3,column:10385},end:{line:3,column:10434}},type:"binary-expr",locations:[{start:{line:3,column:10385},end:{line:3,column:10397}},{start:{line:3,column:10399},end:{line:3,column:10409}},{start:{line:3,column:10411},end:{line:3,column:10434}}],line:3},"1860":{loc:{start:{line:3,column:10504},end:{line:3,column:10531}},type:"binary-expr",locations:[{start:{line:3,column:10504},end:{line:3,column:10519}},{start:{line:3,column:10521},end:{line:3,column:10531}}],line:3},"1861":{loc:{start:{line:3,column:10596},end:{line:3,column:10602}},type:"binary-expr",locations:[{start:{line:3,column:10596},end:{line:3,column:10597}},{start:{line:3,column:10599},end:{line:3,column:10602}}],line:3},"1862":{loc:{start:{line:3,column:10605},end:{line:3,column:10611}},type:"binary-expr",locations:[{start:{line:3,column:10605},end:{line:3,column:10606}},{start:{line:3,column:10608},end:{line:3,column:10611}}],line:3},"1863":{loc:{start:{line:3,column:10612},end:{line:3,column:10971}},type:"if",locations:[{start:{line:3,column:10612},end:{line:3,column:10971}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"1864":{loc:{start:{line:3,column:10615},end:{line:3,column:10619}},type:"binary-expr",locations:[{start:{line:3,column:10615},end:{line:3,column:10616}},{start:{line:3,column:10618},end:{line:3,column:10619}}],line:3},"1865":{loc:{start:{line:3,column:10686},end:{line:3,column:10699}},type:"if",locations:[{start:{line:3,column:10686},end:{line:3,column:10699}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"1866":{loc:{start:{line:3,column:10786},end:{line:3,column:10970}},type:"binary-expr",locations:[{start:{line:3,column:10787},end:{line:3,column:10798}},{start:{line:3,column:10800},end:{line:3,column:10811}},{start:{line:3,column:10815},end:{line:3,column:10969}}],line:3},"1867":{loc:{start:{line:3,column:11079},end:{line:3,column:11092}},type:"if",locations:[{start:{line:3,column:11079},end:{line:3,column:11092}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"1868":{loc:{start:{line:3,column:11191},end:{line:3,column:11211}},type:"cond-expr",locations:[{start:{line:3,column:11208},end:{line:3,column:11209}},{start:{line:3,column:11210},end:{line:3,column:11211}}],line:3},"1869":{loc:{start:{line:3,column:11233},end:{line:3,column:11335}},type:"binary-expr",locations:[{start:{line:3,column:11233},end:{line:3,column:11250}},{start:{line:3,column:11252},end:{line:3,column:11274}},{start:{line:3,column:11276},end:{line:3,column:11292}},{start:{line:3,column:11294},end:{line:3,column:11315}},{start:{line:3,column:11317},end:{line:3,column:11335}}],line:3},"1870":{loc:{start:{line:3,column:11336},end:{line:3,column:11538}},type:"binary-expr",locations:[{start:{line:3,column:11336},end:{line:3,column:11345}},{start:{line:3,column:11347},end:{line:3,column:11348}},{start:{line:3,column:11351},end:{line:3,column:11537}}],line:3},"1871":{loc:{start:{line:3,column:11566},end:{line:3,column:11582}},type:"binary-expr",locations:[{start:{line:3,column:11566},end:{line:3,column:11578}},{start:{line:3,column:11580},end:{line:3,column:11582}}],line:3},"1872":{loc:{start:{line:3,column:11697},end:{line:3,column:11756}},type:"if",locations:[{start:{line:3,column:11697},end:{line:3,column:11756}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"1873":{loc:{start:{line:3,column:11847},end:{line:3,column:11937}},type:"binary-expr",locations:[{start:{line:3,column:11848},end:{line:3,column:11849}},{start:{line:3,column:11851},end:{line:3,column:11852}},{start:{line:3,column:11856},end:{line:3,column:11936}}],line:3},"1874":{loc:{start:{line:3,column:11954},end:{line:3,column:11958}},type:"default-arg",locations:[{start:{line:3,column:11956},end:{line:3,column:11958}}],line:3},"1875":{loc:{start:{line:3,column:11960},end:{line:3,column:12000}},type:"if",locations:[{start:{line:3,column:11960},end:{line:3,column:12000}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"1876":{loc:{start:{line:3,column:11963},end:{line:3,column:11990}},type:"binary-expr",locations:[{start:{line:3,column:11963},end:{line:3,column:11964}},{start:{line:3,column:11966},end:{line:3,column:11990}}],line:3},"1877":{loc:{start:{line:3,column:12049},end:{line:3,column:12065}},type:"binary-expr",locations:[{start:{line:3,column:12049},end:{line:3,column:12061}},{start:{line:3,column:12063},end:{line:3,column:12065}}],line:3},"1878":{loc:{start:{line:3,column:12132},end:{line:3,column:12146}},type:"binary-expr",locations:[{start:{line:3,column:12132},end:{line:3,column:12133}},{start:{line:3,column:12135},end:{line:3,column:12143}},{start:{line:3,column:12145},end:{line:3,column:12146}}],line:3},"1879":{loc:{start:{line:3,column:12154},end:{line:3,column:12252}},type:"binary-expr",locations:[{start:{line:3,column:12154},end:{line:3,column:12155}},{start:{line:3,column:12158},end:{line:3,column:12251}}],line:3},"1880":{loc:{start:{line:3,column:12173},end:{line:3,column:12251}},type:"binary-expr",locations:[{start:{line:3,column:12174},end:{line:3,column:12183}},{start:{line:3,column:12185},end:{line:3,column:12195}},{start:{line:3,column:12199},end:{line:3,column:12250}}],line:3},"1881":{loc:{start:{line:3,column:12302},end:{line:3,column:12334}},type:"if",locations:[{start:{line:3,column:12302},end:{line:3,column:12334}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"1882":{loc:{start:{line:3,column:12334},end:{line:3,column:12483}},type:"if",locations:[{start:{line:3,column:12334},end:{line:3,column:12483}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"1883":{loc:{start:{line:3,column:12359},end:{line:3,column:12481}},type:"binary-expr",locations:[{start:{line:3,column:12359},end:{line:3,column:12399}},{start:{line:3,column:12401},end:{line:3,column:12481}}],line:3},"1884":{loc:{start:{line:3,column:12547},end:{line:3,column:12569}},type:"binary-expr",locations:[{start:{line:3,column:12547},end:{line:3,column:12556}},{start:{line:3,column:12558},end:{line:3,column:12569}}],line:3},"1885":{loc:{start:{line:3,column:12671},end:{line:3,column:12697}},type:"binary-expr",locations:[{start:{line:3,column:12671},end:{line:3,column:12677}},{start:{line:3,column:12680},end:{line:3,column:12687}},{start:{line:3,column:12689},end:{line:3,column:12696}}],line:3},"1886":{loc:{start:{line:3,column:12773},end:{line:3,column:12815}},type:"binary-expr",locations:[{start:{line:3,column:12773},end:{line:3,column:12774}},{start:{line:3,column:12777},end:{line:3,column:12814}}],line:3},"1887":{loc:{start:{line:3,column:12837},end:{line:3,column:12871}},type:"binary-expr",locations:[{start:{line:3,column:12837},end:{line:3,column:12846}},{start:{line:3,column:12848},end:{line:3,column:12871}}],line:3},"1888":{loc:{start:{line:3,column:12886},end:{line:3,column:12920}},type:"binary-expr",locations:[{start:{line:3,column:12886},end:{line:3,column:12895}},{start:{line:3,column:12897},end:{line:3,column:12920}}],line:3},"1889":{loc:{start:{line:3,column:12951},end:{line:3,column:13125}},type:"if",locations:[{start:{line:3,column:12951},end:{line:3,column:13125}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"1890":{loc:{start:{line:3,column:12954},end:{line:3,column:12972}},type:"binary-expr",locations:[{start:{line:3,column:12954},end:{line:3,column:12955}},{start:{line:3,column:12957},end:{line:3,column:12972}}],line:3},"1891":{loc:{start:{line:3,column:12992},end:{line:3,column:13073}},type:"if",locations:[{start:{line:3,column:12992},end:{line:3,column:13073}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"1892":{loc:{start:{line:3,column:13143},end:{line:3,column:13235}},type:"if",locations:[{start:{line:3,column:13143},end:{line:3,column:13235}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"1893":{loc:{start:{line:3,column:13172},end:{line:3,column:13234}},type:"binary-expr",locations:[{start:{line:3,column:13172},end:{line:3,column:13218}},{start:{line:3,column:13221},end:{line:3,column:13233}}],line:3},"1894":{loc:{start:{line:3,column:14084},end:{line:3,column:14128}},type:"binary-expr",locations:[{start:{line:3,column:14084},end:{line:3,column:14096}},{start:{line:3,column:14098},end:{line:3,column:14112}},{start:{line:3,column:14114},end:{line:3,column:14128}}],line:3},"1895":{loc:{start:{line:3,column:14411},end:{line:3,column:14493}},type:"cond-expr",locations:[{start:{line:3,column:14431},end:{line:3,column:14473}},{start:{line:3,column:14475},end:{line:3,column:14493}}],line:3},"1896":{loc:{start:{line:3,column:14475},end:{line:3,column:14493}},type:"binary-expr",locations:[{start:{line:3,column:14475},end:{line:3,column:14483}},{start:{line:3,column:14486},end:{line:3,column:14492}}],line:3},"1897":{loc:{start:{line:3,column:14537},end:{line:3,column:14566}},type:"if",locations:[{start:{line:3,column:14537},end:{line:3,column:14566}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"1898":{loc:{start:{line:3,column:14596},end:{line:3,column:14605}},type:"cond-expr",locations:[{start:{line:3,column:14602},end:{line:3,column:14603}},{start:{line:3,column:14604},end:{line:3,column:14605}}],line:3},"1899":{loc:{start:{line:3,column:14620},end:{line:3,column:14654}},type:"cond-expr",locations:[{start:{line:3,column:14629},end:{line:3,column:14633}},{start:{line:3,column:14634},end:{line:3,column:14654}}],line:3},"1900":{loc:{start:{line:3,column:14700},end:{line:3,column:14723}},type:"cond-expr",locations:[{start:{line:3,column:14717},end:{line:3,column:14721}},{start:{line:3,column:14722},end:{line:3,column:14723}}],line:3},"1901":{loc:{start:{line:3,column:14700},end:{line:3,column:14716}},type:"binary-expr",locations:[{start:{line:3,column:14700},end:{line:3,column:14704}},{start:{line:3,column:14706},end:{line:3,column:14716}}],line:3},"1902":{loc:{start:{line:3,column:14935},end:{line:3,column:15045}},type:"if",locations:[{start:{line:3,column:14935},end:{line:3,column:15045}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"1903":{loc:{start:{line:3,column:15000},end:{line:3,column:15023}},type:"binary-expr",locations:[{start:{line:3,column:15000},end:{line:3,column:15008}},{start:{line:3,column:15010},end:{line:3,column:15023}}],line:3},"1904":{loc:{start:{line:3,column:15070},end:{line:3,column:15090}},type:"if",locations:[{start:{line:3,column:15070},end:{line:3,column:15090}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"1905":{loc:{start:{line:3,column:15122},end:{line:3,column:15178}},type:"cond-expr",locations:[{start:{line:3,column:15144},end:{line:3,column:15145}},{start:{line:3,column:15146},end:{line:3,column:15178}}],line:3},"1906":{loc:{start:{line:3,column:15122},end:{line:3,column:15143}},type:"binary-expr",locations:[{start:{line:3,column:15122},end:{line:3,column:15133}},{start:{line:3,column:15135},end:{line:3,column:15143}}],line:3},"1907":{loc:{start:{line:3,column:15303},end:{line:3,column:15377}},type:"binary-expr",locations:[{start:{line:3,column:15303},end:{line:3,column:15332}},{start:{line:3,column:15335},end:{line:3,column:15376}}],line:3},"1908":{loc:{start:{line:3,column:15335},end:{line:3,column:15343}},type:"binary-expr",locations:[{start:{line:3,column:15335},end:{line:3,column:15336}},{start:{line:3,column:15339},end:{line:3,column:15342}}],line:3},"1909":{loc:{start:{line:3,column:15344},end:{line:3,column:15376}},type:"binary-expr",locations:[{start:{line:3,column:15344},end:{line:3,column:15345}},{start:{line:3,column:15348},end:{line:3,column:15375}}],line:3},"1910":{loc:{start:{line:3,column:15487},end:{line:3,column:15525}},type:"cond-expr",locations:[{start:{line:3,column:15509},end:{line:3,column:15510}},{start:{line:3,column:15511},end:{line:3,column:15525}}],line:3},"1911":{loc:{start:{line:3,column:15487},end:{line:3,column:15508}},type:"binary-expr",locations:[{start:{line:3,column:15487},end:{line:3,column:15492}},{start:{line:3,column:15494},end:{line:3,column:15508}}],line:3},"1912":{loc:{start:{line:3,column:15562},end:{line:3,column:15567}},type:"cond-expr",locations:[{start:{line:3,column:15564},end:{line:3,column:15565}},{start:{line:3,column:15566},end:{line:3,column:15567}}],line:3},"1913":{loc:{start:{line:3,column:15599},end:{line:3,column:15605}},type:"cond-expr",locations:[{start:{line:3,column:15601},end:{line:3,column:15603}},{start:{line:3,column:15604},end:{line:3,column:15605}}],line:3},"1914":{loc:{start:{line:3,column:15728},end:{line:3,column:15791}},type:"binary-expr",locations:[{start:{line:3,column:15728},end:{line:3,column:15747}},{start:{line:3,column:15750},end:{line:3,column:15790}}],line:3},"1915":{loc:{start:{line:3,column:15819},end:{line:3,column:15856}},type:"binary-expr",locations:[{start:{line:3,column:15819},end:{line:3,column:15837}},{start:{line:3,column:15840},end:{line:3,column:15855}}],line:3},"1916":{loc:{start:{line:3,column:15857},end:{line:3,column:15932}},type:"cond-expr",locations:[{start:{line:3,column:15866},end:{line:3,column:15869}},{start:{line:3,column:15870},end:{line:3,column:15932}}],line:3},"1917":{loc:{start:{line:3,column:15976},end:{line:3,column:16032}},type:"cond-expr",locations:[{start:{line:3,column:15994},end:{line:3,column:15998}},{start:{line:3,column:15999},end:{line:3,column:16032}}],line:3},"1918":{loc:{start:{line:3,column:15976},end:{line:3,column:15993}},type:"binary-expr",locations:[{start:{line:3,column:15976},end:{line:3,column:15979}},{start:{line:3,column:15981},end:{line:3,column:15993}}],line:3},"1919":{loc:{start:{line:3,column:16300},end:{line:3,column:16304}},type:"binary-expr",locations:[{start:{line:3,column:16300},end:{line:3,column:16301}},{start:{line:3,column:16303},end:{line:3,column:16304}}],line:3},"1920":{loc:{start:{line:3,column:16391},end:{line:3,column:16438}},type:"if",locations:[{start:{line:3,column:16391},end:{line:3,column:16438}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"1921":{loc:{start:{line:3,column:16394},end:{line:3,column:16409}},type:"binary-expr",locations:[{start:{line:3,column:16394},end:{line:3,column:16401}},{start:{line:3,column:16403},end:{line:3,column:16405}},{start:{line:3,column:16407},end:{line:3,column:16409}}],line:3},"1922":{loc:{start:{line:3,column:16471},end:{line:3,column:16493}},type:"binary-expr",locations:[{start:{line:3,column:16471},end:{line:3,column:16474}},{start:{line:3,column:16477},end:{line:3,column:16492}}],line:3},"1923":{loc:{start:{line:3,column:16494},end:{line:3,column:16537}},type:"binary-expr",locations:[{start:{line:3,column:16494},end:{line:3,column:16498}},{start:{line:3,column:16501},end:{line:3,column:16536}}],line:3},"1924":{loc:{start:{line:3,column:16538},end:{line:3,column:16600}},type:"cond-expr",locations:[{start:{line:3,column:16551},end:{line:3,column:16589}},{start:{line:3,column:16592},end:{line:3,column:16599}}],line:3},"1925":{loc:{start:{line:3,column:16601},end:{line:3,column:16786}},type:"cond-expr",locations:[{start:{line:3,column:16629},end:{line:3,column:16680}},{start:{line:3,column:16682},end:{line:3,column:16786}}],line:3},"1926":{loc:{start:{line:3,column:16601},end:{line:3,column:16627}},type:"binary-expr",locations:[{start:{line:3,column:16601},end:{line:3,column:16602}},{start:{line:3,column:16604},end:{line:3,column:16605}},{start:{line:3,column:16607},end:{line:3,column:16608}},{start:{line:3,column:16610},end:{line:3,column:16627}}],line:3},"1927":{loc:{start:{line:3,column:16682},end:{line:3,column:16786}},type:"cond-expr",locations:[{start:{line:3,column:16685},end:{line:3,column:16716}},{start:{line:3,column:16719},end:{line:3,column:16785}}],line:3},"1928":{loc:{start:{line:3,column:16687},end:{line:3,column:16692}},type:"cond-expr",locations:[{start:{line:3,column:16689},end:{line:3,column:16690}},{start:{line:3,column:16691},end:{line:3,column:16692}}],line:3},"1929":{loc:{start:{line:3,column:16695},end:{line:3,column:16700}},type:"cond-expr",locations:[{start:{line:3,column:16697},end:{line:3,column:16698}},{start:{line:3,column:16699},end:{line:3,column:16700}}],line:3},"1930":{loc:{start:{line:3,column:16729},end:{line:3,column:16785}},type:"cond-expr",locations:[{start:{line:3,column:16755},end:{line:3,column:16770}},{start:{line:3,column:16771},end:{line:3,column:16785}}],line:3},"1931":{loc:{start:{line:3,column:16829},end:{line:3,column:16837}},type:"cond-expr",locations:[{start:{line:3,column:16834},end:{line:3,column:16835}},{start:{line:3,column:16836},end:{line:3,column:16837}}],line:3},"1932":{loc:{start:{line:3,column:16891},end:{line:3,column:16987}},type:"binary-expr",locations:[{start:{line:3,column:16891},end:{line:3,column:16892}},{start:{line:3,column:16895},end:{line:3,column:16986}}],line:3},"1933":{loc:{start:{line:3,column:16895},end:{line:3,column:16986}},type:"cond-expr",locations:[{start:{line:3,column:16905},end:{line:3,column:16976}},{start:{line:3,column:16978},end:{line:3,column:16986}}],line:3},"1934":{loc:{start:{line:3,column:16895},end:{line:3,column:16903}},type:"binary-expr",locations:[{start:{line:3,column:16895},end:{line:3,column:16896}},{start:{line:3,column:16898},end:{line:3,column:16903}}],line:3},"1935":{loc:{start:{line:3,column:16923},end:{line:3,column:16931}},type:"binary-expr",locations:[{start:{line:3,column:16923},end:{line:3,column:16926}},{start:{line:3,column:16928},end:{line:3,column:16931}}],line:3},"1936":{loc:{start:{line:3,column:16932},end:{line:3,column:16976}},type:"binary-expr",locations:[{start:{line:3,column:16932},end:{line:3,column:16971}},{start:{line:3,column:16973},end:{line:3,column:16976}}],line:3},"1937":{loc:{start:{line:3,column:16978},end:{line:3,column:16986}},type:"binary-expr",locations:[{start:{line:3,column:16978},end:{line:3,column:16981}},{start:{line:3,column:16983},end:{line:3,column:16986}}],line:3},"1938":{loc:{start:{line:3,column:17027},end:{line:3,column:17043}},type:"if",locations:[{start:{line:3,column:17027},end:{line:3,column:17043}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"1939":{loc:{start:{line:3,column:17030},end:{line:3,column:17036}},type:"binary-expr",locations:[{start:{line:3,column:17030},end:{line:3,column:17031}},{start:{line:3,column:17033},end:{line:3,column:17036}}],line:3},"1940":{loc:{start:{line:3,column:17068},end:{line:3,column:17196}},type:"cond-expr",locations:[{start:{line:3,column:17080},end:{line:3,column:17165}},{start:{line:3,column:17166},end:{line:3,column:17196}}],line:3},"1941":{loc:{start:{line:3,column:17068},end:{line:3,column:17079}},type:"binary-expr",locations:[{start:{line:3,column:17068},end:{line:3,column:17069}},{start:{line:3,column:17071},end:{line:3,column:17072}},{start:{line:3,column:17074},end:{line:3,column:17079}}],line:3},"1942":{loc:{start:{line:3,column:17080},end:{line:3,column:17165}},type:"cond-expr",locations:[{start:{line:3,column:17126},end:{line:3,column:17147}},{start:{line:3,column:17148},end:{line:3,column:17165}}],line:3},"1943":{loc:{start:{line:3,column:17080},end:{line:3,column:17125}},type:"binary-expr",locations:[{start:{line:3,column:17080},end:{line:3,column:17088}},{start:{line:3,column:17090},end:{line:3,column:17125}}],line:3},"1944":{loc:{start:{line:3,column:17166},end:{line:3,column:17196}},type:"binary-expr",locations:[{start:{line:3,column:17167},end:{line:3,column:17169}},{start:{line:3,column:17171},end:{line:3,column:17176}},{start:{line:3,column:17179},end:{line:3,column:17196}}],line:3},"1945":{loc:{start:{line:3,column:17259},end:{line:3,column:17292}},type:"binary-expr",locations:[{start:{line:3,column:17260},end:{line:3,column:17285}},{start:{line:3,column:17288},end:{line:3,column:17292}}],line:3},"1946":{loc:{start:{line:3,column:17260},end:{line:3,column:17285}},type:"cond-expr",locations:[{start:{line:3,column:17262},end:{line:3,column:17273}},{start:{line:3,column:17274},end:{line:3,column:17285}}],line:3},"1947":{loc:{start:{line:3,column:17503},end:{line:3,column:17573}},type:"cond-expr",locations:[{start:{line:3,column:17566},end:{line:3,column:17570}},{start:{line:3,column:17571},end:{line:3,column:17573}}],line:3},"1948":{loc:{start:{line:3,column:17503},end:{line:3,column:17565}},type:"binary-expr",locations:[{start:{line:3,column:17503},end:{line:3,column:17507}},{start:{line:3,column:17510},end:{line:3,column:17528}},{start:{line:3,column:17530},end:{line:3,column:17549}},{start:{line:3,column:17552},end:{line:3,column:17565}}],line:3},"1949":{loc:{start:{line:3,column:17706},end:{line:3,column:17711}},type:"cond-expr",locations:[{start:{line:3,column:17708},end:{line:3,column:17709}},{start:{line:3,column:17710},end:{line:3,column:17711}}],line:3},"1950":{loc:{start:{line:3,column:17719},end:{line:3,column:17724}},type:"cond-expr",locations:[{start:{line:3,column:17721},end:{line:3,column:17722}},{start:{line:3,column:17723},end:{line:3,column:17724}}],line:3},"1951":{loc:{start:{line:3,column:17725},end:{line:3,column:17780}},type:"if",locations:[{start:{line:3,column:17725},end:{line:3,column:17780}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"1952":{loc:{start:{line:3,column:17751},end:{line:3,column:17779}},type:"cond-expr",locations:[{start:{line:3,column:17760},end:{line:3,column:17764}},{start:{line:3,column:17765},end:{line:3,column:17779}}],line:3},"1953":{loc:{start:{line:3,column:17751},end:{line:3,column:17759}},type:"binary-expr",locations:[{start:{line:3,column:17751},end:{line:3,column:17754}},{start:{line:3,column:17756},end:{line:3,column:17759}}],line:3},"1954":{loc:{start:{line:3,column:17765},end:{line:3,column:17779}},type:"binary-expr",locations:[{start:{line:3,column:17765},end:{line:3,column:17768}},{start:{line:3,column:17770},end:{line:3,column:17773}},{start:{line:3,column:17775},end:{line:3,column:17779}}],line:3},"1955":{loc:{start:{line:3,column:17780},end:{line:3,column:17837}},type:"if",locations:[{start:{line:3,column:17780},end:{line:3,column:17837}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"1956":{loc:{start:{line:3,column:17796},end:{line:3,column:17819}},type:"cond-expr",locations:[{start:{line:3,column:17802},end:{line:3,column:17803}},{start:{line:3,column:17804},end:{line:3,column:17819}}],line:3},"1957":{loc:{start:{line:3,column:17827},end:{line:3,column:17836}},type:"binary-expr",locations:[{start:{line:3,column:17827},end:{line:3,column:17828}},{start:{line:3,column:17830},end:{line:3,column:17836}}],line:3},"1958":{loc:{start:{line:3,column:17939},end:{line:3,column:18157}},type:"cond-expr",locations:[{start:{line:3,column:17942},end:{line:3,column:18120}},{start:{line:3,column:18123},end:{line:3,column:18156}}],line:3},"1959":{loc:{start:{line:3,column:17991},end:{line:3,column:18120}},type:"binary-expr",locations:[{start:{line:3,column:17991},end:{line:3,column:17996}},{start:{line:3,column:17999},end:{line:3,column:18119}}],line:3},"1960":{loc:{start:{line:3,column:18151},end:{line:3,column:18156}},type:"binary-expr",locations:[{start:{line:3,column:18151},end:{line:3,column:18152}},{start:{line:3,column:18154},end:{line:3,column:18156}}],line:3},"1961":{loc:{start:{line:3,column:18158},end:{line:3,column:18178}},type:"binary-expr",locations:[{start:{line:3,column:18158},end:{line:3,column:18159}},{start:{line:3,column:18162},end:{line:3,column:18177}}],line:3},"1962":{loc:{start:{line:3,column:18489},end:{line:3,column:18505}},type:"binary-expr",locations:[{start:{line:3,column:18489},end:{line:3,column:18502}},{start:{line:3,column:18504},end:{line:3,column:18505}}],line:3},"1963":{loc:{start:{line:3,column:18544},end:{line:3,column:18561}},type:"binary-expr",locations:[{start:{line:3,column:18544},end:{line:3,column:18555}},{start:{line:3,column:18557},end:{line:3,column:18561}}],line:3},"1964":{loc:{start:{line:3,column:18579},end:{line:3,column:18617}},type:"binary-expr",locations:[{start:{line:3,column:18579},end:{line:3,column:18597}},{start:{line:3,column:18599},end:{line:3,column:18617}}],line:3},"1965":{loc:{start:{line:3,column:18618},end:{line:3,column:18719}},type:"cond-expr",locations:[{start:{line:3,column:18629},end:{line:3,column:18678}},{start:{line:3,column:18681},end:{line:3,column:18718}}],line:3},"1966":{loc:{start:{line:3,column:18773},end:{line:3,column:18872}},type:"if",locations:[{start:{line:3,column:18773},end:{line:3,column:18872}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"1967":{loc:{start:{line:3,column:18794},end:{line:3,column:18823}},type:"binary-expr",locations:[{start:{line:3,column:18794},end:{line:3,column:18813}},{start:{line:3,column:18815},end:{line:3,column:18823}}],line:3},"1968":{loc:{start:{line:3,column:19179},end:{line:3,column:19187}},type:"cond-expr",locations:[{start:{line:3,column:19184},end:{line:3,column:19185}},{start:{line:3,column:19186},end:{line:3,column:19187}}],line:3},"1969":{loc:{start:{line:3,column:19197},end:{line:3,column:19205}},type:"cond-expr",locations:[{start:{line:3,column:19202},end:{line:3,column:19203}},{start:{line:3,column:19204},end:{line:3,column:19205}}],line:3},"1970":{loc:{start:{line:3,column:19283},end:{line:3,column:19307}},type:"cond-expr",locations:[{start:{line:3,column:19285},end:{line:3,column:19295}},{start:{line:3,column:19296},end:{line:3,column:19307}}],line:3},"1971":{loc:{start:{line:3,column:19347},end:{line:3,column:19380}},type:"binary-expr",locations:[{start:{line:3,column:19348},end:{line:3,column:19373}},{start:{line:3,column:19376},end:{line:3,column:19380}}],line:3},"1972":{loc:{start:{line:3,column:19348},end:{line:3,column:19373}},type:"cond-expr",locations:[{start:{line:3,column:19350},end:{line:3,column:19361}},{start:{line:3,column:19362},end:{line:3,column:19373}}],line:3},"1973":{loc:{start:{line:3,column:19490},end:{line:3,column:19565}},type:"cond-expr",locations:[{start:{line:3,column:19499},end:{line:3,column:19502}},{start:{line:3,column:19503},end:{line:3,column:19565}}],line:3},"1974":{loc:{start:{line:3,column:20017},end:{line:3,column:20047}},type:"cond-expr",locations:[{start:{line:3,column:20021},end:{line:3,column:20045}},{start:{line:3,column:20046},end:{line:3,column:20047}}],line:3},"1975":{loc:{start:{line:3,column:20067},end:{line:3,column:20087}},type:"cond-expr",locations:[{start:{line:3,column:20071},end:{line:3,column:20085}},{start:{line:3,column:20086},end:{line:3,column:20087}}],line:3},"1976":{loc:{start:{line:3,column:20281},end:{line:3,column:20303}},type:"cond-expr",locations:[{start:{line:3,column:20287},end:{line:3,column:20299}},{start:{line:3,column:20300},end:{line:3,column:20303}}],line:3},"1977":{loc:{start:{line:3,column:20289},end:{line:3,column:20299}},type:"cond-expr",locations:[{start:{line:3,column:20294},end:{line:3,column:20296}},{start:{line:3,column:20297},end:{line:3,column:20299}}],line:3},"1978":{loc:{start:{line:3,column:20304},end:{line:3,column:20331}},type:"binary-expr",locations:[{start:{line:3,column:20304},end:{line:3,column:20309}},{start:{line:3,column:20312},end:{line:3,column:20330}}],line:3},"1979":{loc:{start:{line:3,column:20322},end:{line:3,column:20330}},type:"cond-expr",locations:[{start:{line:3,column:20327},end:{line:3,column:20328}},{start:{line:3,column:20329},end:{line:3,column:20330}}],line:3},"1980":{loc:{start:{line:3,column:20726},end:{line:3,column:20757}},type:"if",locations:[{start:{line:3,column:20726},end:{line:3,column:20757}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"1981":{loc:{start:{line:3,column:20764},end:{line:3,column:20780}},type:"cond-expr",locations:[{start:{line:3,column:20774},end:{line:3,column:20775}},{start:{line:3,column:20776},end:{line:3,column:20780}}],line:3},"1982":{loc:{start:{line:3,column:20764},end:{line:3,column:20773}},type:"binary-expr",locations:[{start:{line:3,column:20764},end:{line:3,column:20768}},{start:{line:3,column:20770},end:{line:3,column:20773}}],line:3},"1983":{loc:{start:{line:3,column:20848},end:{line:3,column:20871}},type:"cond-expr",locations:[{start:{line:3,column:20853},end:{line:3,column:20866}},{start:{line:3,column:20867},end:{line:3,column:20871}}],line:3},"1984":{loc:{start:{line:3,column:20881},end:{line:3,column:20904}},type:"cond-expr",locations:[{start:{line:3,column:20886},end:{line:3,column:20899}},{start:{line:3,column:20900},end:{line:3,column:20904}}],line:3},"1985":{loc:{start:{line:3,column:20905},end:{line:3,column:20946}},type:"binary-expr",locations:[{start:{line:3,column:20905},end:{line:3,column:20929}},{start:{line:3,column:20932},end:{line:3,column:20945}}],line:3},"1986":{loc:{start:{line:3,column:20947},end:{line:3,column:21069}},type:"binary-expr",locations:[{start:{line:3,column:20947},end:{line:3,column:20957}},{start:{line:3,column:20959},end:{line:3,column:20988}},{start:{line:3,column:20990},end:{line:3,column:21007}},{start:{line:3,column:21010},end:{line:3,column:21068}}],line:3},"1987":{loc:{start:{line:3,column:21019},end:{line:3,column:21068}},type:"cond-expr",locations:[{start:{line:3,column:21038},end:{line:3,column:21053}},{start:{line:3,column:21054},end:{line:3,column:21068}}],line:3},"1988":{loc:{start:{line:3,column:21206},end:{line:3,column:21211}},type:"cond-expr",locations:[{start:{line:3,column:21208},end:{line:3,column:21209}},{start:{line:3,column:21210},end:{line:3,column:21211}}],line:3},"1989":{loc:{start:{line:3,column:21219},end:{line:3,column:21224}},type:"cond-expr",locations:[{start:{line:3,column:21221},end:{line:3,column:21222}},{start:{line:3,column:21223},end:{line:3,column:21224}}],line:3},"1990":{loc:{start:{line:3,column:21225},end:{line:3,column:21276}},type:"binary-expr",locations:[{start:{line:3,column:21225},end:{line:3,column:21230}},{start:{line:3,column:21233},end:{line:3,column:21275}}],line:3},"1991":{loc:{start:{line:3,column:21233},end:{line:3,column:21275}},type:"cond-expr",locations:[{start:{line:3,column:21239},end:{line:3,column:21249}},{start:{line:3,column:21252},end:{line:3,column:21274}}],line:3},"1992":{loc:{start:{line:3,column:21277},end:{line:3,column:21294}},type:"binary-expr",locations:[{start:{line:3,column:21277},end:{line:3,column:21281}},{start:{line:3,column:21283},end:{line:3,column:21294}}],line:3},"1993":{loc:{start:{line:3,column:21295},end:{line:3,column:21311}},type:"binary-expr",locations:[{start:{line:3,column:21295},end:{line:3,column:21299}},{start:{line:3,column:21301},end:{line:3,column:21311}}],line:3},"1994":{loc:{start:{line:3,column:21426},end:{line:3,column:21464}},type:"binary-expr",locations:[{start:{line:3,column:21426},end:{line:3,column:21444}},{start:{line:3,column:21446},end:{line:3,column:21464}}],line:3},"1995":{loc:{start:{line:3,column:21465},end:{line:3,column:21566}},type:"cond-expr",locations:[{start:{line:3,column:21476},end:{line:3,column:21525}},{start:{line:3,column:21528},end:{line:3,column:21565}}],line:3},"1996":{loc:{start:{line:3,column:21596},end:{line:3,column:21668}},type:"cond-expr",locations:[{start:{line:3,column:21607},end:{line:3,column:21610}},{start:{line:3,column:21611},end:{line:3,column:21668}}],line:3},"1997":{loc:{start:{line:3,column:21799},end:{line:3,column:21832}},type:"binary-expr",locations:[{start:{line:3,column:21800},end:{line:3,column:21810}},{start:{line:3,column:21812},end:{line:3,column:21817}},{start:{line:3,column:21821},end:{line:3,column:21831}}],line:3},"1998":{loc:{start:{line:3,column:21833},end:{line:3,column:21937}},type:"cond-expr",locations:[{start:{line:3,column:21852},end:{line:3,column:21855}},{start:{line:3,column:21856},end:{line:3,column:21937}}],line:3},"1999":{loc:{start:{line:3,column:21833},end:{line:3,column:21851}},type:"binary-expr",locations:[{start:{line:3,column:21833},end:{line:3,column:21841}},{start:{line:3,column:21843},end:{line:3,column:21851}}],line:3},"2000":{loc:{start:{line:3,column:21880},end:{line:3,column:21936}},type:"cond-expr",locations:[{start:{line:3,column:21893},end:{line:3,column:21894}},{start:{line:3,column:21895},end:{line:3,column:21936}}],line:3},"2001":{loc:{start:{line:3,column:22078},end:{line:3,column:22181}},type:"if",locations:[{start:{line:3,column:22078},end:{line:3,column:22181}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"2002":{loc:{start:{line:3,column:22081},end:{line:3,column:22101}},type:"binary-expr",locations:[{start:{line:3,column:22081},end:{line:3,column:22090}},{start:{line:3,column:22092},end:{line:3,column:22101}}],line:3},"2003":{loc:{start:{line:3,column:22139},end:{line:3,column:22158}},type:"binary-expr",locations:[{start:{line:3,column:22139},end:{line:3,column:22145}},{start:{line:3,column:22147},end:{line:3,column:22158}}],line:3},"2004":{loc:{start:{line:3,column:22218},end:{line:3,column:22228}},type:"cond-expr",locations:[{start:{line:3,column:22223},end:{line:3,column:22224}},{start:{line:3,column:22225},end:{line:3,column:22228}}],line:3},"2005":{loc:{start:{line:3,column:22304},end:{line:3,column:22385}},type:"cond-expr",locations:[{start:{line:3,column:22317},end:{line:3,column:22340}},{start:{line:3,column:22341},end:{line:3,column:22385}}],line:3},"2006":{loc:{start:{line:3,column:22304},end:{line:3,column:22316}},type:"binary-expr",locations:[{start:{line:3,column:22304},end:{line:3,column:22309}},{start:{line:3,column:22311},end:{line:3,column:22316}}],line:3},"2007":{loc:{start:{line:3,column:22341},end:{line:3,column:22385}},type:"cond-expr",locations:[{start:{line:3,column:22350},end:{line:3,column:22367}},{start:{line:3,column:22368},end:{line:3,column:22385}}],line:3},"2008":{loc:{start:{line:3,column:22341},end:{line:3,column:22349}},type:"binary-expr",locations:[{start:{line:3,column:22341},end:{line:3,column:22344}},{start:{line:3,column:22346},end:{line:3,column:22349}}],line:3},"2009":{loc:{start:{line:3,column:22595},end:{line:3,column:22620}},type:"cond-expr",locations:[{start:{line:3,column:22615},end:{line:3,column:22618}},{start:{line:3,column:22619},end:{line:3,column:22620}}],line:3},"2010":{loc:{start:{line:3,column:23074},end:{line:3,column:23182}},type:"cond-expr",locations:[{start:{line:3,column:23087},end:{line:3,column:23128}},{start:{line:3,column:23130},end:{line:3,column:23182}}],line:3},"2011":{loc:{start:{line:3,column:23130},end:{line:3,column:23182}},type:"binary-expr",locations:[{start:{line:3,column:23130},end:{line:3,column:23139}},{start:{line:3,column:23142},end:{line:3,column:23181}}],line:3},"2012":{loc:{start:{line:3,column:23183},end:{line:3,column:23291}},type:"cond-expr",locations:[{start:{line:3,column:23196},end:{line:3,column:23237}},{start:{line:3,column:23239},end:{line:3,column:23291}}],line:3},"2013":{loc:{start:{line:3,column:23239},end:{line:3,column:23291}},type:"binary-expr",locations:[{start:{line:3,column:23239},end:{line:3,column:23248}},{start:{line:3,column:23251},end:{line:3,column:23290}}],line:3},"2014":{loc:{start:{line:3,column:23577},end:{line:3,column:23592}},type:"if",locations:[{start:{line:3,column:23577},end:{line:3,column:23592}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"2015":{loc:{start:{line:3,column:23637},end:{line:3,column:23703}},type:"binary-expr",locations:[{start:{line:3,column:23637},end:{line:3,column:23652}},{start:{line:3,column:23654},end:{line:3,column:23669}},{start:{line:3,column:23671},end:{line:3,column:23686}},{start:{line:3,column:23688},end:{line:3,column:23703}}],line:3},"2016":{loc:{start:{line:3,column:23848},end:{line:3,column:23855}},type:"cond-expr",locations:[{start:{line:3,column:23850},end:{line:3,column:23853}},{start:{line:3,column:23854},end:{line:3,column:23855}}],line:3},"2017":{loc:{start:{line:3,column:23933},end:{line:3,column:23981}},type:"binary-expr",locations:[{start:{line:3,column:23933},end:{line:3,column:23943}},{start:{line:3,column:23946},end:{line:3,column:23980}}],line:3},"2018":{loc:{start:{line:3,column:23964},end:{line:3,column:23980}},type:"binary-expr",locations:[{start:{line:3,column:23964},end:{line:3,column:23973}},{start:{line:3,column:23976},end:{line:3,column:23979}}],line:3},"2019":{loc:{start:{line:3,column:24013},end:{line:3,column:24057}},type:"cond-expr",locations:[{start:{line:3,column:24028},end:{line:3,column:24036}},{start:{line:3,column:24037},end:{line:3,column:24057}}],line:3},"2020":{loc:{start:{line:3,column:24013},end:{line:3,column:24027}},type:"binary-expr",locations:[{start:{line:3,column:24013},end:{line:3,column:24018}},{start:{line:3,column:24020},end:{line:3,column:24027}}],line:3},"2021":{loc:{start:{line:3,column:24037},end:{line:3,column:24057}},type:"cond-expr",locations:[{start:{line:3,column:24043},end:{line:3,column:24049}},{start:{line:3,column:24050},end:{line:3,column:24057}}],line:3},"2022":{loc:{start:{line:3,column:24084},end:{line:3,column:24123}},type:"cond-expr",locations:[{start:{line:3,column:24096},end:{line:3,column:24100}},{start:{line:3,column:24101},end:{line:3,column:24123}}],line:3},"2023":{loc:{start:{line:3,column:24101},end:{line:3,column:24123}},type:"binary-expr",locations:[{start:{line:3,column:24101},end:{line:3,column:24113}},{start:{line:3,column:24116},end:{line:3,column:24122}}],line:3},"2024":{loc:{start:{line:3,column:24152},end:{line:3,column:24196}},type:"cond-expr",locations:[{start:{line:3,column:24168},end:{line:3,column:24174}},{start:{line:3,column:24175},end:{line:3,column:24196}}],line:3},"2025":{loc:{start:{line:3,column:24152},end:{line:3,column:24167}},type:"binary-expr",locations:[{start:{line:3,column:24152},end:{line:3,column:24158}},{start:{line:3,column:24160},end:{line:3,column:24167}}],line:3},"2026":{loc:{start:{line:3,column:24175},end:{line:3,column:24196}},type:"binary-expr",locations:[{start:{line:3,column:24176},end:{line:3,column:24181}},{start:{line:3,column:24183},end:{line:3,column:24187}},{start:{line:3,column:24191},end:{line:3,column:24195}}],line:3},"2027":{loc:{start:{line:3,column:24275},end:{line:3,column:24511}},type:"if",locations:[{start:{line:3,column:24275},end:{line:3,column:24511}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"2028":{loc:{start:{line:3,column:24401},end:{line:3,column:24510}},type:"cond-expr",locations:[{start:{line:3,column:24434},end:{line:3,column:24489}},{start:{line:3,column:24491},end:{line:3,column:24510}}],line:3},"2029":{loc:{start:{line:3,column:24618},end:{line:3,column:24641}},type:"if",locations:[{start:{line:3,column:24618},end:{line:3,column:24641}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"2030":{loc:{start:{line:3,column:24867},end:{line:3,column:25022}},type:"if",locations:[{start:{line:3,column:24867},end:{line:3,column:25022}},{start:{line:3,column:24909},end:{line:3,column:25022}}],line:3},"2031":{loc:{start:{line:3,column:25095},end:{line:3,column:25275}},type:"binary-expr",locations:[{start:{line:3,column:25095},end:{line:3,column:25097}},{start:{line:3,column:25099},end:{line:3,column:25101}},{start:{line:3,column:25103},end:{line:3,column:25105}},{start:{line:3,column:25107},end:{line:3,column:25109}},{start:{line:3,column:25111},end:{line:3,column:25114}},{start:{line:3,column:25117},end:{line:3,column:25274}}],line:3},"2032":{loc:{start:{line:3,column:25170},end:{line:3,column:25180}},type:"binary-expr",locations:[{start:{line:3,column:25170},end:{line:3,column:25176}},{start:{line:3,column:25178},end:{line:3,column:25180}}],line:3},"2033":{loc:{start:{line:3,column:26371},end:{line:3,column:26390}},type:"cond-expr",locations:[{start:{line:3,column:26387},end:{line:3,column:26388}},{start:{line:3,column:26389},end:{line:3,column:26390}}],line:3},"2034":{loc:{start:{line:3,column:26371},end:{line:3,column:26386}},type:"binary-expr",locations:[{start:{line:3,column:26371},end:{line:3,column:26375}},{start:{line:3,column:26377},end:{line:3,column:26386}}],line:3},"2035":{loc:{start:{line:3,column:26400},end:{line:3,column:26419}},type:"cond-expr",locations:[{start:{line:3,column:26416},end:{line:3,column:26417}},{start:{line:3,column:26418},end:{line:3,column:26419}}],line:3},"2036":{loc:{start:{line:3,column:26400},end:{line:3,column:26415}},type:"binary-expr",locations:[{start:{line:3,column:26400},end:{line:3,column:26404}},{start:{line:3,column:26406},end:{line:3,column:26415}}],line:3},"2037":{loc:{start:{line:3,column:26696},end:{line:3,column:26709}},type:"cond-expr",locations:[{start:{line:3,column:26705},end:{line:3,column:26706}},{start:{line:3,column:26707},end:{line:3,column:26709}}],line:3},"2038":{loc:{start:{line:3,column:26696},end:{line:3,column:26704}},type:"binary-expr",locations:[{start:{line:3,column:26696},end:{line:3,column:26697}},{start:{line:3,column:26699},end:{line:3,column:26704}}],line:3},"2039":{loc:{start:{line:3,column:26784},end:{line:3,column:26854}},type:"cond-expr",locations:[{start:{line:3,column:26817},end:{line:3,column:26825}},{start:{line:3,column:26826},end:{line:3,column:26854}}],line:3},"2040":{loc:{start:{line:3,column:26784},end:{line:3,column:26816}},type:"binary-expr",locations:[{start:{line:3,column:26784},end:{line:3,column:26793}},{start:{line:3,column:26795},end:{line:3,column:26816}}],line:3},"2041":{loc:{start:{line:3,column:27038},end:{line:3,column:27065}},type:"binary-expr",locations:[{start:{line:3,column:27038},end:{line:3,column:27062}},{start:{line:3,column:27064},end:{line:3,column:27065}}],line:3},"2042":{loc:{start:{line:3,column:27069},end:{line:3,column:27095}},type:"binary-expr",locations:[{start:{line:3,column:27069},end:{line:3,column:27092}},{start:{line:3,column:27094},end:{line:3,column:27095}}],line:3},"2043":{loc:{start:{line:3,column:27149},end:{line:3,column:27168}},type:"if",locations:[{start:{line:3,column:27149},end:{line:3,column:27168}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"2044":{loc:{start:{line:3,column:27218},end:{line:3,column:27268}},type:"cond-expr",locations:[{start:{line:3,column:27239},end:{line:3,column:27253}},{start:{line:3,column:27254},end:{line:3,column:27268}}],line:3},"2045":{loc:{start:{line:3,column:27302},end:{line:3,column:27321}},type:"if",locations:[{start:{line:3,column:27302},end:{line:3,column:27321}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"2046":{loc:{start:{line:3,column:27375},end:{line:3,column:27417}},type:"cond-expr",locations:[{start:{line:3,column:27396},end:{line:3,column:27406}},{start:{line:3,column:27407},end:{line:3,column:27417}}],line:3},"2047":{loc:{start:{line:3,column:27448},end:{line:3,column:27469}},type:"binary-expr",locations:[{start:{line:3,column:27448},end:{line:3,column:27465}},{start:{line:3,column:27467},end:{line:3,column:27469}}],line:3},"2048":{loc:{start:{line:3,column:27470},end:{line:3,column:27535}},type:"if",locations:[{start:{line:3,column:27470},end:{line:3,column:27535}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"2049":{loc:{start:{line:3,column:27473},end:{line:3,column:27489}},type:"binary-expr",locations:[{start:{line:3,column:27473},end:{line:3,column:27477}},{start:{line:3,column:27479},end:{line:3,column:27489}}],line:3},"2050":{loc:{start:{line:3,column:27557},end:{line:3,column:27560}},type:"default-arg",locations:[{start:{line:3,column:27559},end:{line:3,column:27560}}],line:3},"2051":{loc:{start:{line:3,column:27824},end:{line:3,column:27828}},type:"binary-expr",locations:[{start:{line:3,column:27824},end:{line:3,column:27825}},{start:{line:3,column:27827},end:{line:3,column:27828}}],line:3},"2052":{loc:{start:{line:3,column:28044},end:{line:3,column:28224}},type:"if",locations:[{start:{line:3,column:28044},end:{line:3,column:28224}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"2053":{loc:{start:{line:3,column:28332},end:{line:3,column:28966}},type:"if",locations:[{start:{line:3,column:28332},end:{line:3,column:28966}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"2054":{loc:{start:{line:3,column:28335},end:{line:3,column:28368}},type:"binary-expr",locations:[{start:{line:3,column:28335},end:{line:3,column:28356}},{start:{line:3,column:28358},end:{line:3,column:28368}}],line:3},"2055":{loc:{start:{line:3,column:28369},end:{line:3,column:28562}},type:"binary-expr",locations:[{start:{line:3,column:28369},end:{line:3,column:28378}},{start:{line:3,column:28380},end:{line:3,column:28562}}],line:3},"2056":{loc:{start:{line:3,column:28407},end:{line:3,column:28560}},type:"if",locations:[{start:{line:3,column:28407},end:{line:3,column:28560}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"2057":{loc:{start:{line:3,column:28410},end:{line:3,column:28434}},type:"binary-expr",locations:[{start:{line:3,column:28410},end:{line:3,column:28415}},{start:{line:3,column:28417},end:{line:3,column:28422}},{start:{line:3,column:28424},end:{line:3,column:28434}}],line:3},"2058":{loc:{start:{line:3,column:28676},end:{line:3,column:28953}},type:"binary-expr",locations:[{start:{line:3,column:28676},end:{line:3,column:28678}},{start:{line:3,column:28680},end:{line:3,column:28682}},{start:{line:3,column:28685},end:{line:3,column:28952}}],line:3},"2059":{loc:{start:{line:3,column:28816},end:{line:3,column:28843}},type:"cond-expr",locations:[{start:{line:3,column:28826},end:{line:3,column:28834}},{start:{line:3,column:28835},end:{line:3,column:28843}}],line:3},"2060":{loc:{start:{line:3,column:29034},end:{line:3,column:29055}},type:"if",locations:[{start:{line:3,column:29034},end:{line:3,column:29055}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"2061":{loc:{start:{line:3,column:29219},end:{line:3,column:29260}},type:"if",locations:[{start:{line:3,column:29219},end:{line:3,column:29260}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"2062":{loc:{start:{line:3,column:29222},end:{line:3,column:29252}},type:"binary-expr",locations:[{start:{line:3,column:29222},end:{line:3,column:29227}},{start:{line:3,column:29229},end:{line:3,column:29240}},{start:{line:3,column:29242},end:{line:3,column:29252}}],line:3},"2063":{loc:{start:{line:3,column:29311},end:{line:3,column:29563}},type:"if",locations:[{start:{line:3,column:29311},end:{line:3,column:29563}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"2064":{loc:{start:{line:3,column:30089},end:{line:3,column:30109}},type:"if",locations:[{start:{line:3,column:30089},end:{line:3,column:30109}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"2065":{loc:{start:{line:3,column:30182},end:{line:3,column:30212}},type:"binary-expr",locations:[{start:{line:3,column:30182},end:{line:3,column:30202}},{start:{line:3,column:30205},end:{line:3,column:30211}}],line:3},"2066":{loc:{start:{line:3,column:30213},end:{line:3,column:30265}},type:"binary-expr",locations:[{start:{line:3,column:30213},end:{line:3,column:30217}},{start:{line:3,column:30220},end:{line:3,column:30264}}],line:3},"2067":{loc:{start:{line:3,column:30222},end:{line:3,column:30264}},type:"cond-expr",locations:[{start:{line:3,column:30241},end:{line:3,column:30253}},{start:{line:3,column:30254},end:{line:3,column:30264}}],line:3},"2068":{loc:{start:{line:3,column:30266},end:{line:3,column:30359}},type:"cond-expr",locations:[{start:{line:3,column:30275},end:{line:3,column:30279}},{start:{line:3,column:30281},end:{line:3,column:30358}}],line:3},"2069":{loc:{start:{line:3,column:30281},end:{line:3,column:30355}},type:"binary-expr",locations:[{start:{line:3,column:30281},end:{line:3,column:30282}},{start:{line:3,column:30285},end:{line:3,column:30354}}],line:3},"2070":{loc:{start:{line:3,column:30287},end:{line:3,column:30354}},type:"cond-expr",locations:[{start:{line:3,column:30315},end:{line:3,column:30339}},{start:{line:3,column:30340},end:{line:3,column:30354}}],line:3},"2071":{loc:{start:{line:3,column:30287},end:{line:3,column:30314}},type:"binary-expr",locations:[{start:{line:3,column:30287},end:{line:3,column:30297}},{start:{line:3,column:30300},end:{line:3,column:30305}},{start:{line:3,column:30307},end:{line:3,column:30313}}],line:3},"2072":{loc:{start:{line:3,column:30447},end:{line:3,column:30486}},type:"cond-expr",locations:[{start:{line:3,column:30455},end:{line:3,column:30462}},{start:{line:3,column:30463},end:{line:3,column:30486}}],line:3},"2073":{loc:{start:{line:3,column:30487},end:{line:3,column:30542}},type:"if",locations:[{start:{line:3,column:30487},end:{line:3,column:30542}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"2074":{loc:{start:{line:3,column:30490},end:{line:3,column:30530}},type:"binary-expr",locations:[{start:{line:3,column:30490},end:{line:3,column:30498}},{start:{line:3,column:30500},end:{line:3,column:30530}}],line:3},"2075":{loc:{start:{line:3,column:30633},end:{line:3,column:30686}},type:"if",locations:[{start:{line:3,column:30633},end:{line:3,column:30686}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"2076":{loc:{start:{line:3,column:30636},end:{line:3,column:30677}},type:"binary-expr",locations:[{start:{line:3,column:30636},end:{line:3,column:30648}},{start:{line:3,column:30650},end:{line:3,column:30677}}],line:3},"2077":{loc:{start:{line:3,column:30696},end:{line:3,column:30712}},type:"cond-expr",locations:[{start:{line:3,column:30698},end:{line:3,column:30710}},{start:{line:3,column:30711},end:{line:3,column:30712}}],line:3},"2078":{loc:{start:{line:3,column:30773},end:{line:3,column:30803}},type:"if",locations:[{start:{line:3,column:30773},end:{line:3,column:30803}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"2079":{loc:{start:{line:3,column:30823},end:{line:3,column:30906}},type:"if",locations:[{start:{line:3,column:30823},end:{line:3,column:30906}},{start:{line:3,column:30842},end:{line:3,column:30906}}],line:3},"2080":{loc:{start:{line:3,column:30842},end:{line:3,column:30906}},type:"if",locations:[{start:{line:3,column:30842},end:{line:3,column:30906}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"2081":{loc:{start:{line:3,column:30880},end:{line:3,column:30897}},type:"cond-expr",locations:[{start:{line:3,column:30888},end:{line:3,column:30892}},{start:{line:3,column:30893},end:{line:3,column:30897}}],line:3},"2082":{loc:{start:{line:3,column:31034},end:{line:3,column:31055}},type:"binary-expr",locations:[{start:{line:3,column:31034},end:{line:3,column:31038}},{start:{line:3,column:31041},end:{line:3,column:31054}}],line:3},"2083":{loc:{start:{line:3,column:31177},end:{line:3,column:31200}},type:"cond-expr",locations:[{start:{line:3,column:31187},end:{line:3,column:31188}},{start:{line:3,column:31189},end:{line:3,column:31200}}],line:3},"2084":{loc:{start:{line:3,column:31177},end:{line:3,column:31186}},type:"binary-expr",locations:[{start:{line:3,column:31177},end:{line:3,column:31182}},{start:{line:3,column:31184},end:{line:3,column:31186}}],line:3},"2085":{loc:{start:{line:3,column:31605},end:{line:3,column:31609}},type:"default-arg",locations:[{start:{line:3,column:31607},end:{line:3,column:31609}}],line:3},"2086":{loc:{start:{line:3,column:31617},end:{line:3,column:31636}},type:"binary-expr",locations:[{start:{line:3,column:31617},end:{line:3,column:31623}},{start:{line:3,column:31626},end:{line:3,column:31635}}],line:3},"2087":{loc:{start:{line:3,column:31860},end:{line:3,column:31886}},type:"cond-expr",locations:[{start:{line:3,column:31871},end:{line:3,column:31875}},{start:{line:3,column:31876},end:{line:3,column:31886}}],line:3},"2088":{loc:{start:{line:3,column:32021},end:{line:3,column:32039}},type:"binary-expr",locations:[{start:{line:3,column:32021},end:{line:3,column:32032}},{start:{line:3,column:32034},end:{line:3,column:32039}}],line:3},"2089":{loc:{start:{line:3,column:32115},end:{line:3,column:32155}},type:"binary-expr",locations:[{start:{line:3,column:32115},end:{line:3,column:32117}},{start:{line:3,column:32119},end:{line:3,column:32132}},{start:{line:3,column:32135},end:{line:3,column:32154}}],line:3},"2090":{loc:{start:{line:3,column:32156},end:{line:3,column:32196}},type:"binary-expr",locations:[{start:{line:3,column:32156},end:{line:3,column:32158}},{start:{line:3,column:32160},end:{line:3,column:32173}},{start:{line:3,column:32176},end:{line:3,column:32195}}],line:3},"2091":{loc:{start:{line:3,column:32197},end:{line:3,column:32305}},type:"binary-expr",locations:[{start:{line:3,column:32198},end:{line:3,column:32200}},{start:{line:3,column:32202},end:{line:3,column:32204}},{start:{line:3,column:32208},end:{line:3,column:32304}}],line:3},"2092":{loc:{start:{line:3,column:32234},end:{line:3,column:32304}},type:"binary-expr",locations:[{start:{line:3,column:32235},end:{line:3,column:32253}},{start:{line:3,column:32255},end:{line:3,column:32280}},{start:{line:3,column:32283},end:{line:3,column:32304}}],line:3},"2093":{loc:{start:{line:3,column:32308},end:{line:3,column:32350}},type:"cond-expr",locations:[{start:{line:3,column:32324},end:{line:3,column:32325}},{start:{line:3,column:32326},end:{line:3,column:32350}}],line:3},"2094":{loc:{start:{line:3,column:32308},end:{line:3,column:32323}},type:"binary-expr",locations:[{start:{line:3,column:32308},end:{line:3,column:32312}},{start:{line:3,column:32314},end:{line:3,column:32323}}],line:3},"2095":{loc:{start:{line:3,column:32353},end:{line:3,column:32395}},type:"cond-expr",locations:[{start:{line:3,column:32369},end:{line:3,column:32370}},{start:{line:3,column:32371},end:{line:3,column:32395}}],line:3},"2096":{loc:{start:{line:3,column:32353},end:{line:3,column:32368}},type:"binary-expr",locations:[{start:{line:3,column:32353},end:{line:3,column:32357}},{start:{line:3,column:32359},end:{line:3,column:32368}}],line:3},"2097":{loc:{start:{line:3,column:32557},end:{line:3,column:32591}},type:"binary-expr",locations:[{start:{line:3,column:32557},end:{line:3,column:32565}},{start:{line:3,column:32568},end:{line:3,column:32590}}],line:3},"2098":{loc:{start:{line:3,column:32659},end:{line:3,column:32721}},type:"cond-expr",locations:[{start:{line:3,column:32679},end:{line:3,column:32704}},{start:{line:3,column:32705},end:{line:3,column:32721}}],line:3},"2099":{loc:{start:{line:3,column:32722},end:{line:3,column:32820}},type:"binary-expr",locations:[{start:{line:3,column:32722},end:{line:3,column:32740}},{start:{line:3,column:32742},end:{line:3,column:32750}},{start:{line:3,column:32753},end:{line:3,column:32819}}],line:3},"2100":{loc:{start:{line:3,column:32762},end:{line:3,column:32781}},type:"binary-expr",locations:[{start:{line:3,column:32762},end:{line:3,column:32775}},{start:{line:3,column:32777},end:{line:3,column:32781}}],line:3},"2101":{loc:{start:{line:3,column:32791},end:{line:3,column:32819}},type:"binary-expr",locations:[{start:{line:3,column:32791},end:{line:3,column:32804}},{start:{line:3,column:32806},end:{line:3,column:32819}}],line:3},"2102":{loc:{start:{line:3,column:32877},end:{line:3,column:33001}},type:"binary-expr",locations:[{start:{line:3,column:32877},end:{line:3,column:32883}},{start:{line:3,column:32886},end:{line:3,column:33000}}],line:3},"2103":{loc:{start:{line:3,column:32886},end:{line:3,column:33000}},type:"cond-expr",locations:[{start:{line:3,column:32897},end:{line:3,column:32954}},{start:{line:3,column:32955},end:{line:3,column:33000}}],line:3},"2104":{loc:{start:{line:3,column:33018},end:{line:3,column:33077}},type:"cond-expr",locations:[{start:{line:3,column:33056},end:{line:3,column:33062}},{start:{line:3,column:33063},end:{line:3,column:33077}}],line:3},"2105":{loc:{start:{line:3,column:33018},end:{line:3,column:33055}},type:"binary-expr",locations:[{start:{line:3,column:33018},end:{line:3,column:33034}},{start:{line:3,column:33036},end:{line:3,column:33055}}],line:3},"2106":{loc:{start:{line:3,column:33098},end:{line:3,column:33120}},type:"binary-expr",locations:[{start:{line:3,column:33098},end:{line:3,column:33107}},{start:{line:3,column:33109},end:{line:3,column:33120}}],line:3},"2107":{loc:{start:{line:3,column:33164},end:{line:3,column:33243}},type:"binary-expr",locations:[{start:{line:3,column:33164},end:{line:3,column:33196}},{start:{line:3,column:33198},end:{line:3,column:33243}}],line:3},"2108":{loc:{start:{line:3,column:33256},end:{line:3,column:33260}},type:"default-arg",locations:[{start:{line:3,column:33258},end:{line:3,column:33260}}],line:3},"2109":{loc:{start:{line:3,column:33278},end:{line:3,column:33504}},type:"binary-expr",locations:[{start:{line:3,column:33278},end:{line:3,column:33297}},{start:{line:3,column:33299},end:{line:3,column:33307}},{start:{line:3,column:33310},end:{line:3,column:33503}}],line:3},"2110":{loc:{start:{line:3,column:33342},end:{line:3,column:33398}},type:"cond-expr",locations:[{start:{line:3,column:33355},end:{line:3,column:33360}},{start:{line:3,column:33361},end:{line:3,column:33398}}],line:3},"2111":{loc:{start:{line:3,column:33440},end:{line:3,column:33503}},type:"cond-expr",locations:[{start:{line:3,column:33453},end:{line:3,column:33456}},{start:{line:3,column:33457},end:{line:3,column:33503}}],line:3},"2112":{loc:{start:{line:3,column:33511},end:{line:3,column:33528}},type:"cond-expr",locations:[{start:{line:3,column:33522},end:{line:3,column:33524}},{start:{line:3,column:33525},end:{line:3,column:33528}}],line:3},"2113":{loc:{start:{line:3,column:33678},end:{line:3,column:33729}},type:"binary-expr",locations:[{start:{line:3,column:33678},end:{line:3,column:33684}},{start:{line:3,column:33686},end:{line:3,column:33729}}],line:3},"2114":{loc:{start:{line:3,column:33756},end:{line:3,column:33782}},type:"cond-expr",locations:[{start:{line:3,column:33767},end:{line:3,column:33779}},{start:{line:3,column:33780},end:{line:3,column:33782}}],line:3},"2115":{loc:{start:{line:3,column:33785},end:{line:3,column:33798}},type:"binary-expr",locations:[{start:{line:3,column:33785},end:{line:3,column:33790}},{start:{line:3,column:33792},end:{line:3,column:33798}}],line:3},"2116":{loc:{start:{line:3,column:33812},end:{line:3,column:33970}},type:"if",locations:[{start:{line:3,column:33812},end:{line:3,column:33970}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"2117":{loc:{start:{line:3,column:33815},end:{line:3,column:33847}},type:"binary-expr",locations:[{start:{line:3,column:33815},end:{line:3,column:33816}},{start:{line:3,column:33819},end:{line:3,column:33846}}],line:3},"2118":{loc:{start:{line:3,column:33863},end:{line:3,column:33872}},type:"cond-expr",locations:[{start:{line:3,column:33865},end:{line:3,column:33870}},{start:{line:3,column:33871},end:{line:3,column:33872}}],line:3},"2119":{loc:{start:{line:3,column:33976},end:{line:3,column:34025}},type:"binary-expr",locations:[{start:{line:3,column:33976},end:{line:3,column:33999}},{start:{line:3,column:34001},end:{line:3,column:34025}}],line:3},"2120":{loc:{start:{line:3,column:34078},end:{line:3,column:34123}},type:"binary-expr",locations:[{start:{line:3,column:34079},end:{line:3,column:34084}},{start:{line:3,column:34086},end:{line:3,column:34104}},{start:{line:3,column:34106},end:{line:3,column:34111}},{start:{line:3,column:34114},end:{line:3,column:34123}}],line:3},"2121":{loc:{start:{line:3,column:34226},end:{line:3,column:34307}},type:"cond-expr",locations:[{start:{line:3,column:34242},end:{line:3,column:34269}},{start:{line:3,column:34270},end:{line:3,column:34307}}],line:3},"2122":{loc:{start:{line:3,column:34374},end:{line:3,column:34381}},type:"binary-expr",locations:[{start:{line:3,column:34374},end:{line:3,column:34375}},{start:{line:3,column:34377},end:{line:3,column:34381}}],line:3},"2123":{loc:{start:{line:3,column:34482},end:{line:3,column:34512}},type:"if",locations:[{start:{line:3,column:34482},end:{line:3,column:34512}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"2124":{loc:{start:{line:3,column:34573},end:{line:3,column:34580}},type:"binary-expr",locations:[{start:{line:3,column:34573},end:{line:3,column:34574}},{start:{line:3,column:34576},end:{line:3,column:34580}}],line:3},"2125":{loc:{start:{line:3,column:34583},end:{line:3,column:34590}},type:"binary-expr",locations:[{start:{line:3,column:34583},end:{line:3,column:34584}},{start:{line:3,column:34586},end:{line:3,column:34590}}],line:3},"2126":{loc:{start:{line:3,column:34600},end:{line:3,column:34616}},type:"binary-expr",locations:[{start:{line:3,column:34600},end:{line:3,column:34601}},{start:{line:3,column:34603},end:{line:3,column:34604}},{start:{line:3,column:34606},end:{line:3,column:34607}},{start:{line:3,column:34609},end:{line:3,column:34616}}],line:3},"2127":{loc:{start:{line:3,column:34647},end:{line:3,column:34657}},type:"binary-expr",locations:[{start:{line:3,column:34647},end:{line:3,column:34648}},{start:{line:3,column:34651},end:{line:3,column:34656}}],line:3},"2128":{loc:{start:{line:3,column:34651},end:{line:3,column:34656}},type:"cond-expr",locations:[{start:{line:3,column:34653},end:{line:3,column:34654}},{start:{line:3,column:34655},end:{line:3,column:34656}}],line:3},"2129":{loc:{start:{line:3,column:34800},end:{line:3,column:34845}},type:"cond-expr",locations:[{start:{line:3,column:34809},end:{line:3,column:34812}},{start:{line:3,column:34813},end:{line:3,column:34845}}],line:3},"2130":{loc:{start:{line:3,column:35169},end:{line:3,column:35216}},type:"cond-expr",locations:[{start:{line:3,column:35189},end:{line:3,column:35202}},{start:{line:3,column:35203},end:{line:3,column:35216}}],line:3},"2131":{loc:{start:{line:3,column:35379},end:{line:3,column:35403}},type:"binary-expr",locations:[{start:{line:3,column:35379},end:{line:3,column:35388}},{start:{line:3,column:35390},end:{line:3,column:35403}}],line:3},"2132":{loc:{start:{line:3,column:35504},end:{line:3,column:35554}},type:"cond-expr",locations:[{start:{line:3,column:35524},end:{line:3,column:35538}},{start:{line:3,column:35539},end:{line:3,column:35554}}],line:3},"2133":{loc:{start:{line:3,column:35565},end:{line:3,column:35572}},type:"cond-expr",locations:[{start:{line:3,column:35569},end:{line:3,column:35570}},{start:{line:3,column:35571},end:{line:3,column:35572}}],line:3},"2134":{loc:{start:{line:3,column:35599},end:{line:3,column:35619}},type:"binary-expr",locations:[{start:{line:3,column:35599},end:{line:3,column:35615}},{start:{line:3,column:35617},end:{line:3,column:35619}}],line:3},"2135":{loc:{start:{line:3,column:35624},end:{line:3,column:35645}},type:"if",locations:[{start:{line:3,column:35624},end:{line:3,column:35645}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"2136":{loc:{start:{line:3,column:35682},end:{line:3,column:35777}},type:"if",locations:[{start:{line:3,column:35682},end:{line:3,column:35777}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"2137":{loc:{start:{line:3,column:35685},end:{line:3,column:35711}},type:"binary-expr",locations:[{start:{line:3,column:35685},end:{line:3,column:35701}},{start:{line:3,column:35703},end:{line:3,column:35711}}],line:3},"2138":{loc:{start:{line:3,column:35926},end:{line:3,column:35948}},type:"binary-expr",locations:[{start:{line:3,column:35926},end:{line:3,column:35944}},{start:{line:3,column:35946},end:{line:3,column:35948}}],line:3},"2139":{loc:{start:{line:3,column:35953},end:{line:3,column:35974}},type:"if",locations:[{start:{line:3,column:35953},end:{line:3,column:35974}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"2140":{loc:{start:{line:3,column:36072},end:{line:3,column:36108}},type:"cond-expr",locations:[{start:{line:3,column:36089},end:{line:3,column:36090}},{start:{line:3,column:36091},end:{line:3,column:36108}}],line:3},"2141":{loc:{start:{line:3,column:36206},end:{line:3,column:36402}},type:"cond-expr",locations:[{start:{line:3,column:36209},end:{line:3,column:36302}},{start:{line:3,column:36305},end:{line:3,column:36401}}],line:3},"2142":{loc:{start:{line:3,column:36209},end:{line:3,column:36262}},type:"binary-expr",locations:[{start:{line:3,column:36209},end:{line:3,column:36220}},{start:{line:3,column:36222},end:{line:3,column:36233}},{start:{line:3,column:36236},end:{line:3,column:36261}}],line:3},"2143":{loc:{start:{line:3,column:36305},end:{line:3,column:36361}},type:"binary-expr",locations:[{start:{line:3,column:36305},end:{line:3,column:36317}},{start:{line:3,column:36319},end:{line:3,column:36331}},{start:{line:3,column:36334},end:{line:3,column:36360}}],line:3},"2144":{loc:{start:{line:3,column:36420},end:{line:3,column:36439}},type:"cond-expr",locations:[{start:{line:3,column:36422},end:{line:3,column:36437}},{start:{line:3,column:36438},end:{line:3,column:36439}}],line:3},"2145":{loc:{start:{line:3,column:36877},end:{line:3,column:36898}},type:"binary-expr",locations:[{start:{line:3,column:36877},end:{line:3,column:36881}},{start:{line:3,column:36883},end:{line:3,column:36887}},{start:{line:3,column:36889},end:{line:3,column:36898}}],line:3},"2146":{loc:{start:{line:3,column:36899},end:{line:3,column:36951}},type:"if",locations:[{start:{line:3,column:36899},end:{line:3,column:36951}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"2147":{loc:{start:{line:3,column:37003},end:{line:3,column:37056}},type:"binary-expr",locations:[{start:{line:3,column:37003},end:{line:3,column:37026}},{start:{line:3,column:37028},end:{line:3,column:37056}}],line:3},"2148":{loc:{start:{line:3,column:37138},end:{line:3,column:37182}},type:"binary-expr",locations:[{start:{line:3,column:37139},end:{line:3,column:37153}},{start:{line:3,column:37155},end:{line:3,column:37164}},{start:{line:3,column:37167},end:{line:3,column:37182}}],line:3},"2149":{loc:{start:{line:3,column:37183},end:{line:3,column:37224}},type:"binary-expr",locations:[{start:{line:3,column:37184},end:{line:3,column:37198}},{start:{line:3,column:37200},end:{line:3,column:37212}},{start:{line:3,column:37215},end:{line:3,column:37224}}],line:3},"2150":{loc:{start:{line:3,column:37275},end:{line:3,column:37294}},type:"binary-expr",locations:[{start:{line:3,column:37275},end:{line:3,column:37290}},{start:{line:3,column:37292},end:{line:3,column:37294}}],line:3},"2151":{loc:{start:{line:3,column:37295},end:{line:3,column:37316}},type:"if",locations:[{start:{line:3,column:37295},end:{line:3,column:37316}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"2152":{loc:{start:{line:3,column:37382},end:{line:3,column:37445}},type:"cond-expr",locations:[{start:{line:3,column:37401},end:{line:3,column:37430}},{start:{line:3,column:37431},end:{line:3,column:37445}}],line:3},"2153":{loc:{start:{line:3,column:37382},end:{line:3,column:37400}},type:"binary-expr",locations:[{start:{line:3,column:37382},end:{line:3,column:37390}},{start:{line:3,column:37392},end:{line:3,column:37400}}],line:3},"2154":{loc:{start:{line:3,column:37433},end:{line:3,column:37445}},type:"cond-expr",locations:[{start:{line:3,column:37442},end:{line:3,column:37443}},{start:{line:3,column:37444},end:{line:3,column:37445}}],line:3},"2155":{loc:{start:{line:3,column:37862},end:{line:3,column:37897}},type:"if",locations:[{start:{line:3,column:37862},end:{line:3,column:37897}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"2156":{loc:{start:{line:3,column:37865},end:{line:3,column:37887}},type:"binary-expr",locations:[{start:{line:3,column:37865},end:{line:3,column:37867}},{start:{line:3,column:37869},end:{line:3,column:37887}}],line:3},"2157":{loc:{start:{line:3,column:37935},end:{line:3,column:38055}},type:"cond-expr",locations:[{start:{line:3,column:37999},end:{line:3,column:38052}},{start:{line:3,column:38053},end:{line:3,column:38055}}],line:3},"2158":{loc:{start:{line:3,column:37935},end:{line:3,column:37998}},type:"binary-expr",locations:[{start:{line:3,column:37935},end:{line:3,column:37943}},{start:{line:3,column:37945},end:{line:3,column:37965}},{start:{line:3,column:37967},end:{line:3,column:37998}}],line:3},"2159":{loc:{start:{line:3,column:38171},end:{line:3,column:38189}},type:"if",locations:[{start:{line:3,column:38171},end:{line:3,column:38189}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"2160":{loc:{start:{line:3,column:38207},end:{line:3,column:38318}},type:"cond-expr",locations:[{start:{line:3,column:38220},end:{line:3,column:38232}},{start:{line:3,column:38233},end:{line:3,column:38318}}],line:3},"2161":{loc:{start:{line:3,column:38207},end:{line:3,column:38219}},type:"binary-expr",locations:[{start:{line:3,column:38207},end:{line:3,column:38212}},{start:{line:3,column:38214},end:{line:3,column:38219}}],line:3},"2162":{loc:{start:{line:3,column:38233},end:{line:3,column:38318}},type:"cond-expr",locations:[{start:{line:3,column:38250},end:{line:3,column:38263}},{start:{line:3,column:38264},end:{line:3,column:38318}}],line:3},"2163":{loc:{start:{line:3,column:38264},end:{line:3,column:38318}},type:"cond-expr",locations:[{start:{line:3,column:38270},end:{line:3,column:38283}},{start:{line:3,column:38284},end:{line:3,column:38318}}],line:3},"2164":{loc:{start:{line:3,column:38284},end:{line:3,column:38318}},type:"binary-expr",locations:[{start:{line:3,column:38285},end:{line:3,column:38295}},{start:{line:3,column:38297},end:{line:3,column:38307}},{start:{line:3,column:38311},end:{line:3,column:38317}}],line:3},"2165":{loc:{start:{line:3,column:38350},end:{line:3,column:38373}},type:"binary-expr",locations:[{start:{line:3,column:38350},end:{line:3,column:38355}},{start:{line:3,column:38357},end:{line:3,column:38373}}],line:3},"2166":{loc:{start:{line:3,column:38806},end:{line:3,column:38810}},type:"binary-expr",locations:[{start:{line:3,column:38806},end:{line:3,column:38807}},{start:{line:3,column:38809},end:{line:3,column:38810}}],line:3},"2167":{loc:{start:{line:3,column:39214},end:{line:3,column:39283}},type:"binary-expr",locations:[{start:{line:3,column:39214},end:{line:3,column:39240}},{start:{line:3,column:39242},end:{line:3,column:39283}}],line:3},"2168":{loc:{start:{line:3,column:39284},end:{line:3,column:39334}},type:"binary-expr",locations:[{start:{line:3,column:39284},end:{line:3,column:39305}},{start:{line:3,column:39307},end:{line:3,column:39334}}],line:3},"2169":{loc:{start:{line:3,column:39335},end:{line:3,column:39405}},type:"binary-expr",locations:[{start:{line:3,column:39335},end:{line:3,column:39349}},{start:{line:3,column:39352},end:{line:3,column:39404}}],line:3},"2170":{loc:{start:{line:3,column:39521},end:{line:3,column:39547}},type:"if",locations:[{start:{line:3,column:39521},end:{line:3,column:39547}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"2171":{loc:{start:{line:3,column:39594},end:{line:3,column:40115}},type:"if",locations:[{start:{line:3,column:39594},end:{line:3,column:40115}},{start:{line:3,column:39675},end:{line:3,column:40115}}],line:3},"2172":{loc:{start:{line:3,column:39597},end:{line:3,column:39655}},type:"binary-expr",locations:[{start:{line:3,column:39597},end:{line:3,column:39621}},{start:{line:3,column:39623},end:{line:3,column:39655}}],line:3},"2173":{loc:{start:{line:3,column:39675},end:{line:3,column:40115}},type:"if",locations:[{start:{line:3,column:39675},end:{line:3,column:40115}},{start:{line:3,column:39796},end:{line:3,column:40115}}],line:3},"2174":{loc:{start:{line:3,column:39678},end:{line:3,column:39698}},type:"binary-expr",locations:[{start:{line:3,column:39678},end:{line:3,column:39688}},{start:{line:3,column:39690},end:{line:3,column:39698}}],line:3},"2175":{loc:{start:{line:3,column:39735},end:{line:3,column:39776}},type:"binary-expr",locations:[{start:{line:3,column:39735},end:{line:3,column:39744}},{start:{line:3,column:39747},end:{line:3,column:39775}}],line:3},"2176":{loc:{start:{line:3,column:39796},end:{line:3,column:40115}},type:"if",locations:[{start:{line:3,column:39796},end:{line:3,column:40115}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"2177":{loc:{start:{line:3,column:39846},end:{line:3,column:39922}},type:"binary-expr",locations:[{start:{line:3,column:39846},end:{line:3,column:39852}},{start:{line:3,column:39854},end:{line:3,column:39876}},{start:{line:3,column:39878},end:{line:3,column:39922}}],line:3},"2178":{loc:{start:{line:3,column:39923},end:{line:3,column:40011}},type:"binary-expr",locations:[{start:{line:3,column:39923},end:{line:3,column:39932}},{start:{line:3,column:39934},end:{line:3,column:39959}},{start:{line:3,column:39961},end:{line:3,column:40011}}],line:3},"2179":{loc:{start:{line:3,column:40012},end:{line:3,column:40100}},type:"binary-expr",locations:[{start:{line:3,column:40012},end:{line:3,column:40021}},{start:{line:3,column:40023},end:{line:3,column:40048}},{start:{line:3,column:40050},end:{line:3,column:40100}}],line:3},"2180":{loc:{start:{line:3,column:40130},end:{line:3,column:40182}},type:"binary-expr",locations:[{start:{line:3,column:40130},end:{line:3,column:40140}},{start:{line:3,column:40143},end:{line:3,column:40181}}],line:3},"2181":{loc:{start:{line:3,column:40230},end:{line:3,column:40392}},type:"if",locations:[{start:{line:3,column:40230},end:{line:3,column:40392}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:3},"2182":{loc:{start:{line:3,column:40235},end:{line:3,column:40261}},type:"binary-expr",locations:[{start:{line:3,column:40235},end:{line:3,column:40250}},{start:{line:3,column:40252},end:{line:3,column:40261}}],line:3},"2183":{loc:{start:{line:3,column:40270},end:{line:3,column:40302}},type:"binary-expr",locations:[{start:{line:3,column:40270},end:{line:3,column:40280}},{start:{line:3,column:40282},end:{line:3,column:40302}}],line:3},"2184":{loc:{start:{line:3,column:40403},end:{line:3,column:40485}},type:"binary-expr",locations:[{start:{line:3,column:40403},end:{line:3,column:40413}},{start:{line:3,column:40415},end:{line:3,column:40429}},{start:{line:3,column:40431},end:{line:3,column:40485}}],line:3},"2185":{loc:{start:{line:3,column:40503},end:{line:3,column:40584}},type:"binary-expr",locations:[{start:{line:3,column:40503},end:{line:3,column:40513}},{start:{line:3,column:40515},end:{line:3,column:40529}},{start:{line:3,column:40532},end:{line:3,column:40583}}],line:3},"2186":{loc:{start:{line:3,column:40738},end:{line:3,column:40856}},type:"binary-expr",locations:[{start:{line:3,column:40738},end:{line:3,column:40748}},{start:{line:3,column:40751},end:{line:3,column:40855}}],line:3},"2187":{loc:{start:{line:3,column:40751},end:{line:3,column:40841}},type:"binary-expr",locations:[{start:{line:3,column:40751},end:{line:3,column:40776}},{start:{line:3,column:40778},end:{line:3,column:40841}}],line:3},"2188":{loc:{start:{line:3,column:40899},end:{line:3,column:41021}},type:"binary-expr",locations:[{start:{line:3,column:40899},end:{line:3,column:40924}},{start:{line:3,column:40926},end:{line:3,column:40960}},{start:{line:3,column:40962},end:{line:3,column:41021}}],line:3},"2189":{loc:{start:{line:3,column:41039},end:{line:3,column:41161}},type:"binary-expr",locations:[{start:{line:3,column:41039},end:{line:3,column:41064}},{start:{line:3,column:41066},end:{line:3,column:41100}},{start:{line:3,column:41102},end:{line:3,column:41161}}],line:3},"2190":{loc:{start:{line:3,column:41164},end:{line:3,column:41187}},type:"binary-expr",locations:[{start:{line:3,column:41164},end:{line:3,column:41183}},{start:{line:3,column:41185},end:{line:3,column:41187}}],line:3},"2191":{loc:{start:{line:3,column:41188},end:{line:3,column:41204}},type:"binary-expr",locations:[{start:{line:3,column:41188},end:{line:3,column:41200}},{start:{line:3,column:41202},end:{line:3,column:41204}}],line:3},"2192":{loc:{start:{line:3,column:41407},end:{line:3,column:41478}},type:"cond-expr",locations:[{start:{line:3,column:41417},end:{line:3,column:41426}},{start:{line:3,column:41427},end:{line:3,column:41478}}],line:3},"2193":{loc:{start:{line:3,column:41435},end:{line:3,column:41450}},type:"binary-expr",locations:[{start:{line:3,column:41435},end:{line:3,column:41446}},{start:{line:3,column:41448},end:{line:3,column:41450}}],line:3},"2194":{loc:{start:{line:3,column:41460},end:{line:3,column:41477}},type:"binary-expr",locations:[{start:{line:3,column:41460},end:{line:3,column:41473}},{start:{line:3,column:41475},end:{line:3,column:41477}}],line:3},"2195":{loc:{start:{line:3,column:41524},end:{line:3,column:41528}},type:"binary-expr",locations:[{start:{line:3,column:41524},end:{line:3,column:41525}},{start:{line:3,column:41527},end:{line:3,column:41528}}],line:3}},s:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"116":0,"117":0,"118":0,"119":0,"120":0,"121":0,"122":0,"123":0,"124":0,"125":0,"126":0,"127":0,"128":0,"129":0,"130":0,"131":0,"132":0,"133":0,"134":0,"135":0,"136":0,"137":0,"138":0,"139":0,"140":0,"141":0,"142":0,"143":0,"144":0,"145":0,"146":0,"147":0,"148":0,"149":0,"150":0,"151":0,"152":0,"153":0,"154":0,"155":0,"156":0,"157":0,"158":0,"159":0,"160":0,"161":0,"162":0,"163":0,"164":0,"165":0,"166":0,"167":0,"168":0,"169":0,"170":0,"171":0,"172":0,"173":0,"174":0,"175":0,"176":0,"177":0,"178":0,"179":0,"180":0,"181":0,"182":0,"183":0,"184":0,"185":0,"186":0,"187":0,"188":0,"189":0,"190":0,"191":0,"192":0,"193":0,"194":0,"195":0,"196":0,"197":0,"198":0,"199":0,"200":0,"201":0,"202":0,"203":0,"204":0,"205":0,"206":0,"207":0,"208":0,"209":0,"210":0,"211":0,"212":0,"213":0,"214":0,"215":0,"216":0,"217":0,"218":0,"219":0,"220":0,"221":0,"222":0,"223":0,"224":0,"225":0,"226":0,"227":0,"228":0,"229":0,"230":0,"231":0,"232":0,"233":0,"234":0,"235":0,"236":0,"237":0,"238":0,"239":0,"240":0,"241":0,"242":0,"243":0,"244":0,"245":0,"246":0,"247":0,"248":0,"249":0,"250":0,"251":0,"252":0,"253":0,"254":0,"255":0,"256":0,"257":0,"258":0,"259":0,"260":0,"261":0,"262":0,"263":0,"264":0,"265":0,"266":0,"267":0,"268":0,"269":0,"270":0,"271":0,"272":0,"273":0,"274":0,"275":0,"276":0,"277":0,"278":0,"279":0,"280":0,"281":0,"282":0,"283":0,"284":0,"285":0,"286":0,"287":0,"288":0,"289":0,"290":0,"291":0,"292":0,"293":0,"294":0,"295":0,"296":0,"297":0,"298":0,"299":0,"300":0,"301":0,"302":0,"303":0,"304":0,"305":0,"306":0,"307":0,"308":0,"309":0,"310":0,"311":0,"312":0,"313":0,"314":0,"315":0,"316":0,"317":0,"318":0,"319":0,"320":0,"321":0,"322":0,"323":0,"324":0,"325":0,"326":0,"327":0,"328":0,"329":0,"330":0,"331":0,"332":0,"333":0,"334":0,"335":0,"336":0,"337":0,"338":0,"339":0,"340":0,"341":0,"342":0,"343":0,"344":0,"345":0,"346":0,"347":0,"348":0,"349":0,"350":0,"351":0,"352":0,"353":0,"354":0,"355":0,"356":0,"357":0,"358":0,"359":0,"360":0,"361":0,"362":0,"363":0,"364":0,"365":0,"366":0,"367":0,"368":0,"369":0,"370":0,"371":0,"372":0,"373":0,"374":0,"375":0,"376":0,"377":0,"378":0,"379":0,"380":0,"381":0,"382":0,"383":0,"384":0,"385":0,"386":0,"387":0,"388":0,"389":0,"390":0,"391":0,"392":0,"393":0,"394":0,"395":0,"396":0,"397":0,"398":0,"399":0,"400":0,"401":0,"402":0,"403":0,"404":0,"405":0,"406":0,"407":0,"408":0,"409":0,"410":0,"411":0,"412":0,"413":0,"414":0,"415":0,"416":0,"417":0,"418":0,"419":0,"420":0,"421":0,"422":0,"423":0,"424":0,"425":0,"426":0,"427":0,"428":0,"429":0,"430":0,"431":0,"432":0,"433":0,"434":0,"435":0,"436":0,"437":0,"438":0,"439":0,"440":0,"441":0,"442":0,"443":0,"444":0,"445":0,"446":0,"447":0,"448":0,"449":0,"450":0,"451":0,"452":0,"453":0,"454":0,"455":0,"456":0,"457":0,"458":0,"459":0,"460":0,"461":0,"462":0,"463":0,"464":0,"465":0,"466":0,"467":0,"468":0,"469":0,"470":0,"471":0,"472":0,"473":0,"474":0,"475":0,"476":0,"477":0,"478":0,"479":0,"480":0,"481":0,"482":0,"483":0,"484":0,"485":0,"486":0,"487":0,"488":0,"489":0,"490":0,"491":0,"492":0,"493":0,"494":0,"495":0,"496":0,"497":0,"498":0,"499":0,"500":0,"501":0,"502":0,"503":0,"504":0,"505":0,"506":0,"507":0,"508":0,"509":0,"510":0,"511":0,"512":0,"513":0,"514":0,"515":0,"516":0,"517":0,"518":0,"519":0,"520":0,"521":0,"522":0,"523":0,"524":0,"525":0,"526":0,"527":0,"528":0,"529":0,"530":0,"531":0,"532":0,"533":0,"534":0,"535":0,"536":0,"537":0,"538":0,"539":0,"540":0,"541":0,"542":0,"543":0,"544":0,"545":0,"546":0,"547":0,"548":0,"549":0,"550":0,"551":0,"552":0,"553":0,"554":0,"555":0,"556":0,"557":0,"558":0,"559":0,"560":0,"561":0,"562":0,"563":0,"564":0,"565":0,"566":0,"567":0,"568":0,"569":0,"570":0,"571":0,"572":0,"573":0,"574":0,"575":0,"576":0,"577":0,"578":0,"579":0,"580":0,"581":0,"582":0,"583":0,"584":0,"585":0,"586":0,"587":0,"588":0,"589":0,"590":0,"591":0,"592":0,"593":0,"594":0,"595":0,"596":0,"597":0,"598":0,"599":0,"600":0,"601":0,"602":0,"603":0,"604":0,"605":0,"606":0,"607":0,"608":0,"609":0,"610":0,"611":0,"612":0,"613":0,"614":0,"615":0,"616":0,"617":0,"618":0,"619":0,"620":0,"621":0,"622":0,"623":0,"624":0,"625":0,"626":0,"627":0,"628":0,"629":0,"630":0,"631":0,"632":0,"633":0,"634":0,"635":0,"636":0,"637":0,"638":0,"639":0,"640":0,"641":0,"642":0,"643":0,"644":0,"645":0,"646":0,"647":0,"648":0,"649":0,"650":0,"651":0,"652":0,"653":0,"654":0,"655":0,"656":0,"657":0,"658":0,"659":0,"660":0,"661":0,"662":0,"663":0,"664":0,"665":0,"666":0,"667":0,"668":0,"669":0,"670":0,"671":0,"672":0,"673":0,"674":0,"675":0,"676":0,"677":0,"678":0,"679":0,"680":0,"681":0,"682":0,"683":0,"684":0,"685":0,"686":0,"687":0,"688":0,"689":0,"690":0,"691":0,"692":0,"693":0,"694":0,"695":0,"696":0,"697":0,"698":0,"699":0,"700":0,"701":0,"702":0,"703":0,"704":0,"705":0,"706":0,"707":0,"708":0,"709":0,"710":0,"711":0,"712":0,"713":0,"714":0,"715":0,"716":0,"717":0,"718":0,"719":0,"720":0,"721":0,"722":0,"723":0,"724":0,"725":0,"726":0,"727":0,"728":0,"729":0,"730":0,"731":0,"732":0,"733":0,"734":0,"735":0,"736":0,"737":0,"738":0,"739":0,"740":0,"741":0,"742":0,"743":0,"744":0,"745":0,"746":0,"747":0,"748":0,"749":0,"750":0,"751":0,"752":0,"753":0,"754":0,"755":0,"756":0,"757":0,"758":0,"759":0,"760":0,"761":0,"762":0,"763":0,"764":0,"765":0,"766":0,"767":0,"768":0,"769":0,"770":0,"771":0,"772":0,"773":0,"774":0,"775":0,"776":0,"777":0,"778":0,"779":0,"780":0,"781":0,"782":0,"783":0,"784":0,"785":0,"786":0,"787":0,"788":0,"789":0,"790":0,"791":0,"792":0,"793":0,"794":0,"795":0,"796":0,"797":0,"798":0,"799":0,"800":0,"801":0,"802":0,"803":0,"804":0,"805":0,"806":0,"807":0,"808":0,"809":0,"810":0,"811":0,"812":0,"813":0,"814":0,"815":0,"816":0,"817":0,"818":0,"819":0,"820":0,"821":0,"822":0,"823":0,"824":0,"825":0,"826":0,"827":0,"828":0,"829":0,"830":0,"831":0,"832":0,"833":0,"834":0,"835":0,"836":0,"837":0,"838":0,"839":0,"840":0,"841":0,"842":0,"843":0,"844":0,"845":0,"846":0,"847":0,"848":0,"849":0,"850":0,"851":0,"852":0,"853":0,"854":0,"855":0,"856":0,"857":0,"858":0,"859":0,"860":0,"861":0,"862":0,"863":0,"864":0,"865":0,"866":0,"867":0,"868":0,"869":0,"870":0,"871":0,"872":0,"873":0,"874":0,"875":0,"876":0,"877":0,"878":0,"879":0,"880":0,"881":0,"882":0,"883":0,"884":0,"885":0,"886":0,"887":0,"888":0,"889":0,"890":0,"891":0,"892":0,"893":0,"894":0,"895":0,"896":0,"897":0,"898":0,"899":0,"900":0,"901":0,"902":0,"903":0,"904":0,"905":0,"906":0,"907":0,"908":0,"909":0,"910":0,"911":0,"912":0,"913":0,"914":0,"915":0,"916":0,"917":0,"918":0,"919":0,"920":0,"921":0,"922":0,"923":0,"924":0,"925":0,"926":0,"927":0,"928":0,"929":0,"930":0,"931":0,"932":0,"933":0,"934":0,"935":0,"936":0,"937":0,"938":0,"939":0,"940":0,"941":0,"942":0,"943":0,"944":0,"945":0,"946":0,"947":0,"948":0,"949":0,"950":0,"951":0,"952":0,"953":0,"954":0,"955":0,"956":0,"957":0,"958":0,"959":0,"960":0,"961":0,"962":0,"963":0,"964":0,"965":0,"966":0,"967":0,"968":0,"969":0,"970":0,"971":0,"972":0,"973":0,"974":0,"975":0,"976":0,"977":0,"978":0,"979":0,"980":0,"981":0,"982":0,"983":0,"984":0,"985":0,"986":0,"987":0,"988":0,"989":0,"990":0,"991":0,"992":0,"993":0,"994":0,"995":0,"996":0,"997":0,"998":0,"999":0,"1000":0,"1001":0,"1002":0,"1003":0,"1004":0,"1005":0,"1006":0,"1007":0,"1008":0,"1009":0,"1010":0,"1011":0,"1012":0,"1013":0,"1014":0,"1015":0,"1016":0,"1017":0,"1018":0,"1019":0,"1020":0,"1021":0,"1022":0,"1023":0,"1024":0,"1025":0,"1026":0,"1027":0,"1028":0,"1029":0,"1030":0,"1031":0,"1032":0,"1033":0,"1034":0,"1035":0,"1036":0,"1037":0,"1038":0,"1039":0,"1040":0,"1041":0,"1042":0,"1043":0,"1044":0,"1045":0,"1046":0,"1047":0,"1048":0,"1049":0,"1050":0,"1051":0,"1052":0,"1053":0,"1054":0,"1055":0,"1056":0,"1057":0,"1058":0,"1059":0,"1060":0,"1061":0,"1062":0,"1063":0,"1064":0,"1065":0,"1066":0,"1067":0,"1068":0,"1069":0,"1070":0,"1071":0,"1072":0,"1073":0,"1074":0,"1075":0,"1076":0,"1077":0,"1078":0,"1079":0,"1080":0,"1081":0,"1082":0,"1083":0,"1084":0,"1085":0,"1086":0,"1087":0,"1088":0,"1089":0,"1090":0,"1091":0,"1092":0,"1093":0,"1094":0,"1095":0,"1096":0,"1097":0,"1098":0,"1099":0,"1100":0,"1101":0,"1102":0,"1103":0,"1104":0,"1105":0,"1106":0,"1107":0,"1108":0,"1109":0,"1110":0,"1111":0,"1112":0,"1113":0,"1114":0,"1115":0,"1116":0,"1117":0,"1118":0,"1119":0,"1120":0,"1121":0,"1122":0,"1123":0,"1124":0,"1125":0,"1126":0,"1127":0,"1128":0,"1129":0,"1130":0,"1131":0,"1132":0,"1133":0,"1134":0,"1135":0,"1136":0,"1137":0,"1138":0,"1139":0,"1140":0,"1141":0,"1142":0,"1143":0,"1144":0,"1145":0,"1146":0,"1147":0,"1148":0,"1149":0,"1150":0,"1151":0,"1152":0,"1153":0,"1154":0,"1155":0,"1156":0,"1157":0,"1158":0,"1159":0,"1160":0,"1161":0,"1162":0,"1163":0,"1164":0,"1165":0,"1166":0,"1167":0,"1168":0,"1169":0,"1170":0,"1171":0,"1172":0,"1173":0,"1174":0,"1175":0,"1176":0,"1177":0,"1178":0,"1179":0,"1180":0,"1181":0,"1182":0,"1183":0,"1184":0,"1185":0,"1186":0,"1187":0,"1188":0,"1189":0,"1190":0,"1191":0,"1192":0,"1193":0,"1194":0,"1195":0,"1196":0,"1197":0,"1198":0,"1199":0,"1200":0,"1201":0,"1202":0,"1203":0,"1204":0,"1205":0,"1206":0,"1207":0,"1208":0,"1209":0,"1210":0,"1211":0,"1212":0,"1213":0,"1214":0,"1215":0,"1216":0,"1217":0,"1218":0,"1219":0,"1220":0,"1221":0,"1222":0,"1223":0,"1224":0,"1225":0,"1226":0,"1227":0,"1228":0,"1229":0,"1230":0,"1231":0,"1232":0,"1233":0,"1234":0,"1235":0,"1236":0,"1237":0,"1238":0,"1239":0,"1240":0,"1241":0,"1242":0,"1243":0,"1244":0,"1245":0,"1246":0,"1247":0,"1248":0,"1249":0,"1250":0,"1251":0,"1252":0,"1253":0,"1254":0,"1255":0,"1256":0,"1257":0,"1258":0,"1259":0,"1260":0,"1261":0,"1262":0,"1263":0,"1264":0,"1265":0,"1266":0,"1267":0,"1268":0,"1269":0,"1270":0,"1271":0,"1272":0,"1273":0,"1274":0,"1275":0,"1276":0,"1277":0,"1278":0,"1279":0,"1280":0,"1281":0,"1282":0,"1283":0,"1284":0,"1285":0,"1286":0,"1287":0,"1288":0,"1289":0,"1290":0,"1291":0,"1292":0,"1293":0,"1294":0,"1295":0,"1296":0,"1297":0,"1298":0,"1299":0,"1300":0,"1301":0,"1302":0,"1303":0,"1304":0,"1305":0,"1306":0,"1307":0,"1308":0,"1309":0,"1310":0,"1311":0,"1312":0,"1313":0,"1314":0,"1315":0,"1316":0,"1317":0,"1318":0,"1319":0,"1320":0,"1321":0,"1322":0,"1323":0,"1324":0,"1325":0,"1326":0,"1327":0,"1328":0,"1329":0,"1330":0,"1331":0,"1332":0,"1333":0,"1334":0,"1335":0,"1336":0,"1337":0,"1338":0,"1339":0,"1340":0,"1341":0,"1342":0,"1343":0,"1344":0,"1345":0,"1346":0,"1347":0,"1348":0,"1349":0,"1350":0,"1351":0,"1352":0,"1353":0,"1354":0,"1355":0,"1356":0,"1357":0,"1358":0,"1359":0,"1360":0,"1361":0,"1362":0,"1363":0,"1364":0,"1365":0,"1366":0,"1367":0,"1368":0,"1369":0,"1370":0,"1371":0,"1372":0,"1373":0,"1374":0,"1375":0,"1376":0,"1377":0,"1378":0,"1379":0,"1380":0,"1381":0,"1382":0,"1383":0,"1384":0,"1385":0,"1386":0,"1387":0,"1388":0,"1389":0,"1390":0,"1391":0,"1392":0,"1393":0,"1394":0,"1395":0,"1396":0,"1397":0,"1398":0,"1399":0,"1400":0,"1401":0,"1402":0,"1403":0,"1404":0,"1405":0,"1406":0,"1407":0,"1408":0,"1409":0,"1410":0,"1411":0,"1412":0,"1413":0,"1414":0,"1415":0,"1416":0,"1417":0,"1418":0,"1419":0,"1420":0,"1421":0,"1422":0,"1423":0,"1424":0,"1425":0,"1426":0,"1427":0,"1428":0,"1429":0,"1430":0,"1431":0,"1432":0,"1433":0,"1434":0,"1435":0,"1436":0,"1437":0,"1438":0,"1439":0,"1440":0,"1441":0,"1442":0,"1443":0,"1444":0,"1445":0,"1446":0,"1447":0,"1448":0,"1449":0,"1450":0,"1451":0,"1452":0,"1453":0,"1454":0,"1455":0,"1456":0,"1457":0,"1458":0,"1459":0,"1460":0,"1461":0,"1462":0,"1463":0,"1464":0,"1465":0,"1466":0,"1467":0,"1468":0,"1469":0,"1470":0,"1471":0,"1472":0,"1473":0,"1474":0,"1475":0,"1476":0,"1477":0,"1478":0,"1479":0,"1480":0,"1481":0,"1482":0,"1483":0,"1484":0,"1485":0,"1486":0,"1487":0,"1488":0,"1489":0,"1490":0,"1491":0,"1492":0,"1493":0,"1494":0,"1495":0,"1496":0,"1497":0,"1498":0,"1499":0,"1500":0,"1501":0,"1502":0,"1503":0,"1504":0,"1505":0,"1506":0,"1507":0,"1508":0,"1509":0,"1510":0,"1511":0,"1512":0,"1513":0,"1514":0,"1515":0,"1516":0,"1517":0,"1518":0,"1519":0,"1520":0,"1521":0,"1522":0,"1523":0,"1524":0,"1525":0,"1526":0,"1527":0,"1528":0,"1529":0,"1530":0,"1531":0,"1532":0,"1533":0,"1534":0,"1535":0,"1536":0,"1537":0,"1538":0,"1539":0,"1540":0,"1541":0,"1542":0,"1543":0,"1544":0,"1545":0,"1546":0,"1547":0,"1548":0,"1549":0,"1550":0,"1551":0,"1552":0,"1553":0,"1554":0,"1555":0,"1556":0,"1557":0,"1558":0,"1559":0,"1560":0,"1561":0,"1562":0,"1563":0,"1564":0,"1565":0,"1566":0,"1567":0,"1568":0,"1569":0,"1570":0,"1571":0,"1572":0,"1573":0,"1574":0,"1575":0,"1576":0,"1577":0,"1578":0,"1579":0,"1580":0,"1581":0,"1582":0,"1583":0,"1584":0,"1585":0,"1586":0,"1587":0,"1588":0,"1589":0,"1590":0,"1591":0,"1592":0,"1593":0,"1594":0,"1595":0,"1596":0,"1597":0,"1598":0,"1599":0,"1600":0,"1601":0,"1602":0,"1603":0,"1604":0,"1605":0,"1606":0,"1607":0,"1608":0,"1609":0,"1610":0,"1611":0,"1612":0,"1613":0,"1614":0,"1615":0,"1616":0,"1617":0,"1618":0,"1619":0,"1620":0,"1621":0,"1622":0,"1623":0,"1624":0,"1625":0,"1626":0,"1627":0,"1628":0,"1629":0,"1630":0,"1631":0,"1632":0,"1633":0,"1634":0,"1635":0,"1636":0,"1637":0,"1638":0,"1639":0,"1640":0,"1641":0,"1642":0,"1643":0,"1644":0,"1645":0,"1646":0,"1647":0,"1648":0,"1649":0,"1650":0,"1651":0,"1652":0,"1653":0,"1654":0,"1655":0,"1656":0,"1657":0,"1658":0,"1659":0,"1660":0,"1661":0,"1662":0,"1663":0,"1664":0,"1665":0,"1666":0,"1667":0,"1668":0,"1669":0,"1670":0,"1671":0,"1672":0,"1673":0,"1674":0,"1675":0,"1676":0,"1677":0,"1678":0,"1679":0,"1680":0,"1681":0,"1682":0,"1683":0,"1684":0,"1685":0,"1686":0,"1687":0,"1688":0,"1689":0,"1690":0,"1691":0,"1692":0,"1693":0,"1694":0,"1695":0,"1696":0,"1697":0,"1698":0,"1699":0,"1700":0,"1701":0,"1702":0,"1703":0,"1704":0,"1705":0,"1706":0,"1707":0,"1708":0,"1709":0,"1710":0,"1711":0,"1712":0,"1713":0,"1714":0,"1715":0,"1716":0,"1717":0,"1718":0,"1719":0,"1720":0,"1721":0,"1722":0,"1723":0,"1724":0,"1725":0,"1726":0,"1727":0,"1728":0,"1729":0,"1730":0,"1731":0,"1732":0,"1733":0,"1734":0,"1735":0,"1736":0,"1737":0,"1738":0,"1739":0,"1740":0,"1741":0,"1742":0,"1743":0,"1744":0,"1745":0,"1746":0,"1747":0,"1748":0,"1749":0,"1750":0,"1751":0,"1752":0,"1753":0,"1754":0,"1755":0,"1756":0,"1757":0,"1758":0,"1759":0,"1760":0,"1761":0,"1762":0,"1763":0,"1764":0,"1765":0,"1766":0,"1767":0,"1768":0,"1769":0,"1770":0,"1771":0,"1772":0,"1773":0,"1774":0,"1775":0,"1776":0,"1777":0,"1778":0,"1779":0,"1780":0,"1781":0,"1782":0,"1783":0,"1784":0,"1785":0,"1786":0,"1787":0,"1788":0,"1789":0,"1790":0,"1791":0,"1792":0,"1793":0,"1794":0,"1795":0,"1796":0,"1797":0,"1798":0,"1799":0,"1800":0,"1801":0,"1802":0,"1803":0,"1804":0,"1805":0,"1806":0,"1807":0,"1808":0,"1809":0,"1810":0,"1811":0,"1812":0,"1813":0,"1814":0,"1815":0,"1816":0,"1817":0,"1818":0,"1819":0,"1820":0,"1821":0,"1822":0,"1823":0,"1824":0,"1825":0,"1826":0,"1827":0,"1828":0,"1829":0,"1830":0,"1831":0,"1832":0,"1833":0,"1834":0,"1835":0,"1836":0,"1837":0,"1838":0,"1839":0,"1840":0,"1841":0,"1842":0,"1843":0,"1844":0,"1845":0,"1846":0,"1847":0,"1848":0,"1849":0,"1850":0,"1851":0,"1852":0,"1853":0,"1854":0,"1855":0,"1856":0,"1857":0,"1858":0,"1859":0,"1860":0,"1861":0,"1862":0,"1863":0,"1864":0,"1865":0,"1866":0,"1867":0,"1868":0,"1869":0,"1870":0,"1871":0,"1872":0,"1873":0,"1874":0,"1875":0,"1876":0,"1877":0,"1878":0,"1879":0,"1880":0,"1881":0,"1882":0,"1883":0,"1884":0,"1885":0,"1886":0,"1887":0,"1888":0,"1889":0,"1890":0,"1891":0,"1892":0,"1893":0,"1894":0,"1895":0,"1896":0,"1897":0,"1898":0,"1899":0,"1900":0,"1901":0,"1902":0,"1903":0,"1904":0,"1905":0,"1906":0,"1907":0,"1908":0,"1909":0,"1910":0,"1911":0,"1912":0,"1913":0,"1914":0,"1915":0,"1916":0,"1917":0,"1918":0,"1919":0,"1920":0,"1921":0,"1922":0,"1923":0,"1924":0,"1925":0,"1926":0,"1927":0,"1928":0,"1929":0,"1930":0,"1931":0,"1932":0,"1933":0,"1934":0,"1935":0,"1936":0,"1937":0,"1938":0,"1939":0,"1940":0,"1941":0,"1942":0,"1943":0,"1944":0,"1945":0,"1946":0,"1947":0,"1948":0,"1949":0,"1950":0,"1951":0,"1952":0,"1953":0,"1954":0,"1955":0,"1956":0,"1957":0,"1958":0,"1959":0,"1960":0,"1961":0,"1962":0,"1963":0,"1964":0,"1965":0,"1966":0,"1967":0,"1968":0,"1969":0,"1970":0,"1971":0,"1972":0,"1973":0,"1974":0,"1975":0,"1976":0,"1977":0,"1978":0,"1979":0,"1980":0,"1981":0,"1982":0,"1983":0,"1984":0,"1985":0,"1986":0,"1987":0,"1988":0,"1989":0,"1990":0,"1991":0,"1992":0,"1993":0,"1994":0,"1995":0,"1996":0,"1997":0,"1998":0,"1999":0,"2000":0,"2001":0,"2002":0,"2003":0,"2004":0,"2005":0,"2006":0,"2007":0,"2008":0,"2009":0,"2010":0,"2011":0,"2012":0,"2013":0,"2014":0,"2015":0,"2016":0,"2017":0,"2018":0,"2019":0,"2020":0,"2021":0,"2022":0,"2023":0,"2024":0,"2025":0,"2026":0,"2027":0,"2028":0,"2029":0,"2030":0,"2031":0,"2032":0,"2033":0,"2034":0,"2035":0,"2036":0,"2037":0,"2038":0,"2039":0,"2040":0,"2041":0,"2042":0,"2043":0,"2044":0,"2045":0,"2046":0,"2047":0,"2048":0,"2049":0,"2050":0,"2051":0,"2052":0,"2053":0,"2054":0,"2055":0,"2056":0,"2057":0,"2058":0,"2059":0,"2060":0,"2061":0,"2062":0,"2063":0,"2064":0,"2065":0,"2066":0,"2067":0,"2068":0,"2069":0,"2070":0,"2071":0,"2072":0,"2073":0,"2074":0,"2075":0,"2076":0,"2077":0,"2078":0,"2079":0,"2080":0,"2081":0,"2082":0,"2083":0,"2084":0,"2085":0,"2086":0,"2087":0,"2088":0,"2089":0,"2090":0,"2091":0,"2092":0,"2093":0,"2094":0,"2095":0,"2096":0,"2097":0,"2098":0,"2099":0,"2100":0,"2101":0,"2102":0,"2103":0,"2104":0,"2105":0,"2106":0,"2107":0,"2108":0,"2109":0,"2110":0,"2111":0,"2112":0,"2113":0,"2114":0,"2115":0,"2116":0,"2117":0,"2118":0,"2119":0,"2120":0,"2121":0,"2122":0,"2123":0,"2124":0,"2125":0,"2126":0,"2127":0,"2128":0,"2129":0,"2130":0,"2131":0,"2132":0,"2133":0,"2134":0,"2135":0,"2136":0,"2137":0,"2138":0,"2139":0,"2140":0,"2141":0,"2142":0,"2143":0,"2144":0,"2145":0,"2146":0,"2147":0,"2148":0,"2149":0,"2150":0,"2151":0,"2152":0,"2153":0,"2154":0,"2155":0,"2156":0,"2157":0,"2158":0,"2159":0,"2160":0,"2161":0,"2162":0,"2163":0,"2164":0,"2165":0,"2166":0,"2167":0,"2168":0,"2169":0,"2170":0,"2171":0,"2172":0,"2173":0,"2174":0,"2175":0,"2176":0,"2177":0,"2178":0,"2179":0,"2180":0,"2181":0,"2182":0,"2183":0,"2184":0,"2185":0,"2186":0,"2187":0,"2188":0,"2189":0,"2190":0,"2191":0,"2192":0,"2193":0,"2194":0,"2195":0,"2196":0,"2197":0,"2198":0,"2199":0,"2200":0,"2201":0,"2202":0,"2203":0,"2204":0,"2205":0,"2206":0,"2207":0,"2208":0,"2209":0,"2210":0,"2211":0,"2212":0,"2213":0,"2214":0,"2215":0,"2216":0,"2217":0,"2218":0,"2219":0,"2220":0,"2221":0,"2222":0,"2223":0,"2224":0,"2225":0,"2226":0,"2227":0,"2228":0,"2229":0,"2230":0,"2231":0,"2232":0,"2233":0,"2234":0,"2235":0,"2236":0,"2237":0,"2238":0,"2239":0,"2240":0,"2241":0,"2242":0,"2243":0,"2244":0,"2245":0,"2246":0,"2247":0,"2248":0,"2249":0,"2250":0,"2251":0,"2252":0,"2253":0,"2254":0,"2255":0,"2256":0,"2257":0,"2258":0,"2259":0,"2260":0,"2261":0,"2262":0,"2263":0,"2264":0,"2265":0,"2266":0,"2267":0,"2268":0,"2269":0,"2270":0,"2271":0,"2272":0,"2273":0,"2274":0,"2275":0,"2276":0,"2277":0,"2278":0,"2279":0,"2280":0,"2281":0,"2282":0,"2283":0,"2284":0,"2285":0,"2286":0,"2287":0,"2288":0,"2289":0,"2290":0,"2291":0,"2292":0,"2293":0,"2294":0,"2295":0,"2296":0,"2297":0,"2298":0,"2299":0,"2300":0,"2301":0,"2302":0,"2303":0,"2304":0,"2305":0,"2306":0,"2307":0,"2308":0,"2309":0,"2310":0,"2311":0,"2312":0,"2313":0,"2314":0,"2315":0,"2316":0,"2317":0,"2318":0,"2319":0,"2320":0,"2321":0,"2322":0,"2323":0,"2324":0,"2325":0,"2326":0,"2327":0,"2328":0,"2329":0,"2330":0,"2331":0,"2332":0,"2333":0,"2334":0,"2335":0,"2336":0,"2337":0,"2338":0,"2339":0,"2340":0,"2341":0,"2342":0,"2343":0,"2344":0,"2345":0,"2346":0,"2347":0,"2348":0,"2349":0,"2350":0,"2351":0,"2352":0,"2353":0,"2354":0,"2355":0,"2356":0,"2357":0,"2358":0,"2359":0,"2360":0,"2361":0,"2362":0,"2363":0,"2364":0,"2365":0,"2366":0,"2367":0,"2368":0,"2369":0,"2370":0,"2371":0,"2372":0,"2373":0,"2374":0,"2375":0,"2376":0,"2377":0,"2378":0,"2379":0,"2380":0,"2381":0,"2382":0,"2383":0,"2384":0,"2385":0,"2386":0,"2387":0,"2388":0,"2389":0,"2390":0,"2391":0,"2392":0,"2393":0,"2394":0,"2395":0,"2396":0,"2397":0,"2398":0,"2399":0,"2400":0,"2401":0,"2402":0,"2403":0,"2404":0,"2405":0,"2406":0,"2407":0,"2408":0,"2409":0,"2410":0,"2411":0,"2412":0,"2413":0,"2414":0,"2415":0,"2416":0,"2417":0,"2418":0,"2419":0,"2420":0,"2421":0,"2422":0,"2423":0,"2424":0,"2425":0,"2426":0,"2427":0,"2428":0,"2429":0,"2430":0,"2431":0,"2432":0,"2433":0,"2434":0,"2435":0,"2436":0,"2437":0,"2438":0,"2439":0,"2440":0,"2441":0,"2442":0,"2443":0,"2444":0,"2445":0,"2446":0,"2447":0,"2448":0,"2449":0,"2450":0,"2451":0,"2452":0,"2453":0,"2454":0,"2455":0,"2456":0,"2457":0,"2458":0,"2459":0,"2460":0,"2461":0,"2462":0,"2463":0,"2464":0,"2465":0,"2466":0,"2467":0,"2468":0,"2469":0,"2470":0,"2471":0,"2472":0,"2473":0,"2474":0,"2475":0,"2476":0,"2477":0,"2478":0,"2479":0,"2480":0,"2481":0,"2482":0,"2483":0,"2484":0,"2485":0,"2486":0,"2487":0,"2488":0,"2489":0,"2490":0,"2491":0,"2492":0,"2493":0,"2494":0,"2495":0,"2496":0,"2497":0,"2498":0,"2499":0,"2500":0,"2501":0,"2502":0,"2503":0,"2504":0,"2505":0,"2506":0,"2507":0,"2508":0,"2509":0,"2510":0,"2511":0,"2512":0,"2513":0,"2514":0,"2515":0,"2516":0,"2517":0,"2518":0,"2519":0,"2520":0,"2521":0,"2522":0,"2523":0,"2524":0,"2525":0,"2526":0,"2527":0,"2528":0,"2529":0,"2530":0,"2531":0,"2532":0,"2533":0,"2534":0,"2535":0,"2536":0,"2537":0,"2538":0,"2539":0,"2540":0,"2541":0,"2542":0,"2543":0,"2544":0,"2545":0,"2546":0,"2547":0,"2548":0,"2549":0,"2550":0,"2551":0,"2552":0,"2553":0,"2554":0,"2555":0,"2556":0,"2557":0,"2558":0,"2559":0,"2560":0,"2561":0,"2562":0,"2563":0,"2564":0,"2565":0,"2566":0,"2567":0,"2568":0,"2569":0,"2570":0,"2571":0,"2572":0,"2573":0,"2574":0,"2575":0,"2576":0,"2577":0,"2578":0,"2579":0,"2580":0,"2581":0,"2582":0,"2583":0,"2584":0,"2585":0,"2586":0,"2587":0,"2588":0,"2589":0,"2590":0,"2591":0,"2592":0,"2593":0,"2594":0,"2595":0,"2596":0,"2597":0,"2598":0,"2599":0,"2600":0,"2601":0,"2602":0,"2603":0,"2604":0,"2605":0,"2606":0,"2607":0,"2608":0,"2609":0,"2610":0,"2611":0,"2612":0,"2613":0,"2614":0,"2615":0,"2616":0,"2617":0,"2618":0,"2619":0,"2620":0,"2621":0,"2622":0,"2623":0,"2624":0,"2625":0,"2626":0,"2627":0,"2628":0,"2629":0,"2630":0,"2631":0,"2632":0,"2633":0,"2634":0,"2635":0,"2636":0,"2637":0,"2638":0,"2639":0,"2640":0,"2641":0,"2642":0,"2643":0,"2644":0,"2645":0,"2646":0,"2647":0,"2648":0,"2649":0,"2650":0,"2651":0,"2652":0,"2653":0,"2654":0,"2655":0,"2656":0,"2657":0,"2658":0,"2659":0,"2660":0,"2661":0,"2662":0,"2663":0,"2664":0,"2665":0,"2666":0,"2667":0,"2668":0,"2669":0,"2670":0,"2671":0,"2672":0,"2673":0,"2674":0,"2675":0,"2676":0,"2677":0,"2678":0,"2679":0,"2680":0,"2681":0,"2682":0,"2683":0,"2684":0,"2685":0,"2686":0,"2687":0,"2688":0,"2689":0,"2690":0,"2691":0,"2692":0,"2693":0,"2694":0,"2695":0,"2696":0,"2697":0,"2698":0,"2699":0,"2700":0,"2701":0,"2702":0,"2703":0,"2704":0,"2705":0,"2706":0,"2707":0,"2708":0,"2709":0,"2710":0,"2711":0,"2712":0,"2713":0,"2714":0,"2715":0,"2716":0,"2717":0,"2718":0,"2719":0,"2720":0,"2721":0,"2722":0,"2723":0,"2724":0,"2725":0,"2726":0,"2727":0,"2728":0,"2729":0,"2730":0,"2731":0,"2732":0,"2733":0,"2734":0,"2735":0,"2736":0,"2737":0,"2738":0,"2739":0,"2740":0,"2741":0,"2742":0,"2743":0,"2744":0,"2745":0,"2746":0,"2747":0,"2748":0,"2749":0,"2750":0,"2751":0,"2752":0,"2753":0,"2754":0,"2755":0,"2756":0,"2757":0,"2758":0,"2759":0,"2760":0,"2761":0,"2762":0,"2763":0,"2764":0,"2765":0,"2766":0,"2767":0,"2768":0,"2769":0,"2770":0,"2771":0,"2772":0,"2773":0,"2774":0,"2775":0,"2776":0,"2777":0,"2778":0,"2779":0,"2780":0,"2781":0,"2782":0,"2783":0,"2784":0,"2785":0,"2786":0,"2787":0,"2788":0,"2789":0,"2790":0,"2791":0,"2792":0,"2793":0,"2794":0,"2795":0,"2796":0,"2797":0,"2798":0,"2799":0,"2800":0,"2801":0,"2802":0,"2803":0,"2804":0,"2805":0,"2806":0,"2807":0,"2808":0,"2809":0,"2810":0,"2811":0,"2812":0,"2813":0,"2814":0,"2815":0,"2816":0,"2817":0,"2818":0,"2819":0,"2820":0,"2821":0,"2822":0,"2823":0,"2824":0,"2825":0,"2826":0,"2827":0,"2828":0,"2829":0,"2830":0,"2831":0,"2832":0,"2833":0,"2834":0,"2835":0,"2836":0,"2837":0,"2838":0,"2839":0,"2840":0,"2841":0,"2842":0,"2843":0,"2844":0,"2845":0,"2846":0,"2847":0,"2848":0,"2849":0,"2850":0,"2851":0,"2852":0,"2853":0,"2854":0,"2855":0,"2856":0,"2857":0,"2858":0,"2859":0,"2860":0,"2861":0,"2862":0,"2863":0,"2864":0,"2865":0,"2866":0,"2867":0,"2868":0,"2869":0,"2870":0,"2871":0,"2872":0,"2873":0,"2874":0,"2875":0,"2876":0,"2877":0,"2878":0,"2879":0,"2880":0,"2881":0,"2882":0,"2883":0,"2884":0,"2885":0,"2886":0,"2887":0,"2888":0,"2889":0,"2890":0,"2891":0,"2892":0,"2893":0,"2894":0,"2895":0,"2896":0,"2897":0,"2898":0,"2899":0,"2900":0,"2901":0,"2902":0,"2903":0,"2904":0,"2905":0,"2906":0,"2907":0,"2908":0,"2909":0,"2910":0,"2911":0,"2912":0,"2913":0,"2914":0,"2915":0,"2916":0,"2917":0,"2918":0,"2919":0,"2920":0,"2921":0,"2922":0,"2923":0,"2924":0,"2925":0,"2926":0,"2927":0,"2928":0,"2929":0,"2930":0,"2931":0,"2932":0,"2933":0,"2934":0,"2935":0,"2936":0,"2937":0,"2938":0,"2939":0,"2940":0,"2941":0,"2942":0,"2943":0,"2944":0,"2945":0,"2946":0,"2947":0,"2948":0,"2949":0,"2950":0,"2951":0,"2952":0,"2953":0,"2954":0,"2955":0,"2956":0,"2957":0,"2958":0,"2959":0,"2960":0,"2961":0,"2962":0,"2963":0,"2964":0,"2965":0,"2966":0,"2967":0,"2968":0,"2969":0,"2970":0,"2971":0,"2972":0,"2973":0,"2974":0,"2975":0,"2976":0,"2977":0,"2978":0,"2979":0,"2980":0,"2981":0,"2982":0,"2983":0,"2984":0,"2985":0,"2986":0,"2987":0,"2988":0,"2989":0,"2990":0,"2991":0,"2992":0,"2993":0,"2994":0,"2995":0,"2996":0,"2997":0,"2998":0,"2999":0,"3000":0,"3001":0,"3002":0,"3003":0,"3004":0,"3005":0,"3006":0,"3007":0,"3008":0,"3009":0,"3010":0,"3011":0,"3012":0,"3013":0,"3014":0,"3015":0,"3016":0,"3017":0,"3018":0,"3019":0,"3020":0,"3021":0,"3022":0,"3023":0,"3024":0,"3025":0,"3026":0,"3027":0,"3028":0,"3029":0,"3030":0,"3031":0,"3032":0,"3033":0,"3034":0,"3035":0,"3036":0,"3037":0,"3038":0,"3039":0,"3040":0,"3041":0,"3042":0,"3043":0,"3044":0,"3045":0,"3046":0,"3047":0,"3048":0,"3049":0,"3050":0,"3051":0,"3052":0,"3053":0,"3054":0,"3055":0,"3056":0,"3057":0,"3058":0,"3059":0,"3060":0,"3061":0,"3062":0,"3063":0,"3064":0,"3065":0,"3066":0,"3067":0,"3068":0,"3069":0,"3070":0,"3071":0,"3072":0,"3073":0,"3074":0,"3075":0,"3076":0,"3077":0,"3078":0,"3079":0,"3080":0,"3081":0,"3082":0,"3083":0,"3084":0,"3085":0,"3086":0,"3087":0,"3088":0,"3089":0,"3090":0,"3091":0,"3092":0,"3093":0,"3094":0,"3095":0,"3096":0,"3097":0,"3098":0,"3099":0,"3100":0,"3101":0,"3102":0,"3103":0,"3104":0,"3105":0,"3106":0,"3107":0,"3108":0,"3109":0,"3110":0,"3111":0,"3112":0,"3113":0,"3114":0,"3115":0,"3116":0,"3117":0,"3118":0,"3119":0,"3120":0,"3121":0,"3122":0,"3123":0,"3124":0,"3125":0,"3126":0,"3127":0,"3128":0,"3129":0,"3130":0,"3131":0,"3132":0,"3133":0,"3134":0,"3135":0,"3136":0,"3137":0,"3138":0,"3139":0,"3140":0,"3141":0,"3142":0,"3143":0,"3144":0,"3145":0,"3146":0,"3147":0,"3148":0,"3149":0,"3150":0,"3151":0,"3152":0,"3153":0,"3154":0,"3155":0,"3156":0,"3157":0,"3158":0,"3159":0,"3160":0,"3161":0,"3162":0,"3163":0,"3164":0,"3165":0,"3166":0,"3167":0,"3168":0,"3169":0,"3170":0,"3171":0,"3172":0,"3173":0,"3174":0,"3175":0,"3176":0,"3177":0,"3178":0,"3179":0,"3180":0,"3181":0,"3182":0,"3183":0,"3184":0,"3185":0,"3186":0,"3187":0,"3188":0,"3189":0,"3190":0,"3191":0,"3192":0,"3193":0,"3194":0,"3195":0,"3196":0,"3197":0,"3198":0,"3199":0,"3200":0,"3201":0,"3202":0,"3203":0,"3204":0,"3205":0,"3206":0,"3207":0,"3208":0,"3209":0,"3210":0,"3211":0,"3212":0,"3213":0,"3214":0,"3215":0,"3216":0,"3217":0,"3218":0,"3219":0,"3220":0,"3221":0,"3222":0,"3223":0,"3224":0,"3225":0,"3226":0,"3227":0,"3228":0,"3229":0,"3230":0,"3231":0,"3232":0,"3233":0,"3234":0,"3235":0,"3236":0,"3237":0,"3238":0,"3239":0,"3240":0,"3241":0,"3242":0,"3243":0,"3244":0,"3245":0,"3246":0,"3247":0,"3248":0,"3249":0,"3250":0,"3251":0,"3252":0,"3253":0,"3254":0,"3255":0,"3256":0,"3257":0,"3258":0,"3259":0,"3260":0,"3261":0,"3262":0,"3263":0,"3264":0,"3265":0,"3266":0,"3267":0,"3268":0,"3269":0,"3270":0,"3271":0,"3272":0,"3273":0,"3274":0,"3275":0,"3276":0,"3277":0,"3278":0,"3279":0,"3280":0,"3281":0,"3282":0,"3283":0,"3284":0,"3285":0,"3286":0,"3287":0,"3288":0,"3289":0,"3290":0,"3291":0,"3292":0,"3293":0,"3294":0,"3295":0,"3296":0,"3297":0,"3298":0,"3299":0,"3300":0,"3301":0,"3302":0,"3303":0,"3304":0,"3305":0,"3306":0,"3307":0,"3308":0,"3309":0,"3310":0,"3311":0,"3312":0,"3313":0,"3314":0,"3315":0,"3316":0,"3317":0,"3318":0,"3319":0,"3320":0,"3321":0,"3322":0,"3323":0,"3324":0,"3325":0,"3326":0,"3327":0,"3328":0,"3329":0,"3330":0,"3331":0,"3332":0,"3333":0,"3334":0,"3335":0,"3336":0,"3337":0,"3338":0,"3339":0,"3340":0,"3341":0,"3342":0,"3343":0,"3344":0,"3345":0,"3346":0,"3347":0,"3348":0,"3349":0,"3350":0,"3351":0,"3352":0,"3353":0,"3354":0,"3355":0,"3356":0,"3357":0,"3358":0,"3359":0,"3360":0,"3361":0,"3362":0,"3363":0,"3364":0,"3365":0,"3366":0,"3367":0,"3368":0,"3369":0,"3370":0,"3371":0,"3372":0,"3373":0,"3374":0,"3375":0,"3376":0,"3377":0,"3378":0,"3379":0,"3380":0,"3381":0,"3382":0,"3383":0,"3384":0,"3385":0,"3386":0,"3387":0,"3388":0,"3389":0,"3390":0,"3391":0,"3392":0,"3393":0,"3394":0,"3395":0,"3396":0,"3397":0,"3398":0,"3399":0,"3400":0,"3401":0,"3402":0,"3403":0,"3404":0,"3405":0,"3406":0,"3407":0,"3408":0,"3409":0,"3410":0,"3411":0,"3412":0,"3413":0,"3414":0,"3415":0,"3416":0,"3417":0,"3418":0,"3419":0,"3420":0,"3421":0,"3422":0,"3423":0,"3424":0,"3425":0,"3426":0,"3427":0,"3428":0,"3429":0,"3430":0,"3431":0,"3432":0,"3433":0,"3434":0,"3435":0,"3436":0,"3437":0,"3438":0,"3439":0,"3440":0,"3441":0,"3442":0,"3443":0,"3444":0,"3445":0,"3446":0,"3447":0,"3448":0,"3449":0,"3450":0,"3451":0,"3452":0,"3453":0,"3454":0,"3455":0,"3456":0,"3457":0,"3458":0,"3459":0,"3460":0,"3461":0,"3462":0,"3463":0,"3464":0,"3465":0,"3466":0,"3467":0,"3468":0,"3469":0,"3470":0,"3471":0,"3472":0,"3473":0,"3474":0,"3475":0,"3476":0,"3477":0,"3478":0,"3479":0,"3480":0,"3481":0,"3482":0,"3483":0,"3484":0,"3485":0,"3486":0,"3487":0,"3488":0,"3489":0,"3490":0,"3491":0,"3492":0,"3493":0,"3494":0,"3495":0,"3496":0,"3497":0,"3498":0,"3499":0,"3500":0,"3501":0,"3502":0,"3503":0,"3504":0,"3505":0,"3506":0,"3507":0,"3508":0,"3509":0,"3510":0,"3511":0,"3512":0,"3513":0,"3514":0,"3515":0,"3516":0,"3517":0,"3518":0,"3519":0,"3520":0,"3521":0,"3522":0,"3523":0,"3524":0,"3525":0,"3526":0,"3527":0,"3528":0,"3529":0,"3530":0,"3531":0,"3532":0,"3533":0,"3534":0,"3535":0,"3536":0,"3537":0,"3538":0,"3539":0,"3540":0,"3541":0,"3542":0,"3543":0,"3544":0,"3545":0,"3546":0,"3547":0,"3548":0,"3549":0,"3550":0,"3551":0,"3552":0,"3553":0,"3554":0,"3555":0,"3556":0,"3557":0,"3558":0,"3559":0,"3560":0,"3561":0,"3562":0,"3563":0,"3564":0,"3565":0,"3566":0,"3567":0,"3568":0,"3569":0,"3570":0,"3571":0,"3572":0,"3573":0,"3574":0,"3575":0,"3576":0,"3577":0,"3578":0,"3579":0,"3580":0,"3581":0,"3582":0,"3583":0,"3584":0,"3585":0,"3586":0,"3587":0,"3588":0,"3589":0,"3590":0,"3591":0,"3592":0,"3593":0,"3594":0,"3595":0,"3596":0,"3597":0,"3598":0,"3599":0,"3600":0,"3601":0,"3602":0,"3603":0,"3604":0,"3605":0,"3606":0,"3607":0,"3608":0,"3609":0,"3610":0,"3611":0,"3612":0,"3613":0,"3614":0,"3615":0,"3616":0,"3617":0,"3618":0,"3619":0,"3620":0,"3621":0,"3622":0,"3623":0,"3624":0,"3625":0,"3626":0,"3627":0,"3628":0,"3629":0,"3630":0,"3631":0,"3632":0,"3633":0,"3634":0,"3635":0,"3636":0,"3637":0,"3638":0,"3639":0,"3640":0,"3641":0,"3642":0,"3643":0,"3644":0,"3645":0,"3646":0,"3647":0,"3648":0,"3649":0,"3650":0,"3651":0,"3652":0,"3653":0,"3654":0,"3655":0,"3656":0,"3657":0,"3658":0,"3659":0,"3660":0,"3661":0,"3662":0,"3663":0,"3664":0,"3665":0,"3666":0,"3667":0,"3668":0,"3669":0,"3670":0,"3671":0,"3672":0,"3673":0,"3674":0,"3675":0,"3676":0,"3677":0,"3678":0,"3679":0,"3680":0,"3681":0,"3682":0,"3683":0,"3684":0,"3685":0,"3686":0,"3687":0,"3688":0,"3689":0,"3690":0,"3691":0,"3692":0,"3693":0,"3694":0,"3695":0,"3696":0,"3697":0,"3698":0,"3699":0,"3700":0,"3701":0,"3702":0,"3703":0,"3704":0,"3705":0,"3706":0,"3707":0,"3708":0,"3709":0,"3710":0,"3711":0,"3712":0,"3713":0,"3714":0,"3715":0,"3716":0,"3717":0,"3718":0,"3719":0,"3720":0,"3721":0,"3722":0,"3723":0,"3724":0,"3725":0,"3726":0,"3727":0,"3728":0,"3729":0,"3730":0,"3731":0,"3732":0,"3733":0,"3734":0,"3735":0,"3736":0,"3737":0,"3738":0,"3739":0,"3740":0,"3741":0,"3742":0,"3743":0,"3744":0,"3745":0,"3746":0,"3747":0,"3748":0,"3749":0,"3750":0,"3751":0,"3752":0,"3753":0,"3754":0,"3755":0,"3756":0,"3757":0,"3758":0,"3759":0,"3760":0,"3761":0,"3762":0,"3763":0,"3764":0,"3765":0,"3766":0,"3767":0,"3768":0,"3769":0,"3770":0,"3771":0,"3772":0,"3773":0,"3774":0,"3775":0,"3776":0,"3777":0,"3778":0,"3779":0,"3780":0,"3781":0,"3782":0,"3783":0,"3784":0,"3785":0,"3786":0,"3787":0,"3788":0,"3789":0,"3790":0,"3791":0,"3792":0,"3793":0,"3794":0,"3795":0,"3796":0,"3797":0,"3798":0,"3799":0,"3800":0,"3801":0,"3802":0,"3803":0,"3804":0,"3805":0,"3806":0,"3807":0,"3808":0,"3809":0,"3810":0,"3811":0,"3812":0,"3813":0,"3814":0,"3815":0,"3816":0,"3817":0,"3818":0,"3819":0,"3820":0,"3821":0,"3822":0,"3823":0,"3824":0,"3825":0,"3826":0,"3827":0,"3828":0,"3829":0,"3830":0,"3831":0,"3832":0,"3833":0,"3834":0,"3835":0,"3836":0,"3837":0,"3838":0,"3839":0,"3840":0,"3841":0,"3842":0,"3843":0,"3844":0,"3845":0,"3846":0,"3847":0,"3848":0,"3849":0,"3850":0,"3851":0,"3852":0,"3853":0,"3854":0,"3855":0,"3856":0,"3857":0,"3858":0,"3859":0,"3860":0,"3861":0,"3862":0,"3863":0,"3864":0,"3865":0,"3866":0,"3867":0,"3868":0,"3869":0,"3870":0,"3871":0,"3872":0,"3873":0,"3874":0,"3875":0,"3876":0,"3877":0,"3878":0,"3879":0,"3880":0,"3881":0,"3882":0,"3883":0,"3884":0,"3885":0,"3886":0,"3887":0,"3888":0,"3889":0,"3890":0,"3891":0,"3892":0,"3893":0,"3894":0,"3895":0,"3896":0,"3897":0,"3898":0,"3899":0,"3900":0,"3901":0,"3902":0,"3903":0,"3904":0,"3905":0,"3906":0,"3907":0,"3908":0,"3909":0,"3910":0,"3911":0,"3912":0,"3913":0,"3914":0,"3915":0,"3916":0,"3917":0,"3918":0,"3919":0,"3920":0,"3921":0,"3922":0,"3923":0,"3924":0,"3925":0,"3926":0,"3927":0,"3928":0,"3929":0,"3930":0,"3931":0,"3932":0,"3933":0,"3934":0,"3935":0,"3936":0,"3937":0,"3938":0,"3939":0,"3940":0,"3941":0,"3942":0,"3943":0,"3944":0,"3945":0,"3946":0,"3947":0,"3948":0,"3949":0,"3950":0,"3951":0,"3952":0,"3953":0,"3954":0,"3955":0,"3956":0,"3957":0,"3958":0,"3959":0,"3960":0,"3961":0,"3962":0,"3963":0,"3964":0,"3965":0,"3966":0,"3967":0,"3968":0,"3969":0,"3970":0,"3971":0,"3972":0,"3973":0,"3974":0,"3975":0,"3976":0,"3977":0,"3978":0,"3979":0,"3980":0,"3981":0,"3982":0,"3983":0,"3984":0,"3985":0,"3986":0,"3987":0,"3988":0,"3989":0,"3990":0,"3991":0,"3992":0,"3993":0,"3994":0,"3995":0,"3996":0,"3997":0,"3998":0,"3999":0,"4000":0,"4001":0,"4002":0,"4003":0,"4004":0,"4005":0,"4006":0,"4007":0,"4008":0,"4009":0,"4010":0,"4011":0,"4012":0,"4013":0,"4014":0,"4015":0,"4016":0,"4017":0,"4018":0,"4019":0,"4020":0,"4021":0,"4022":0,"4023":0,"4024":0,"4025":0,"4026":0,"4027":0,"4028":0,"4029":0,"4030":0,"4031":0,"4032":0,"4033":0,"4034":0,"4035":0,"4036":0,"4037":0,"4038":0,"4039":0,"4040":0,"4041":0,"4042":0,"4043":0,"4044":0,"4045":0,"4046":0,"4047":0,"4048":0,"4049":0,"4050":0,"4051":0,"4052":0,"4053":0,"4054":0,"4055":0,"4056":0,"4057":0,"4058":0,"4059":0,"4060":0,"4061":0,"4062":0,"4063":0,"4064":0,"4065":0,"4066":0,"4067":0,"4068":0,"4069":0,"4070":0,"4071":0,"4072":0,"4073":0,"4074":0,"4075":0,"4076":0,"4077":0,"4078":0,"4079":0,"4080":0,"4081":0,"4082":0,"4083":0,"4084":0,"4085":0,"4086":0,"4087":0,"4088":0,"4089":0,"4090":0,"4091":0,"4092":0,"4093":0,"4094":0,"4095":0,"4096":0,"4097":0,"4098":0,"4099":0,"4100":0,"4101":0,"4102":0,"4103":0,"4104":0,"4105":0,"4106":0,"4107":0,"4108":0,"4109":0,"4110":0,"4111":0,"4112":0,"4113":0,"4114":0,"4115":0,"4116":0,"4117":0,"4118":0,"4119":0,"4120":0,"4121":0,"4122":0,"4123":0,"4124":0,"4125":0,"4126":0,"4127":0,"4128":0,"4129":0,"4130":0,"4131":0,"4132":0,"4133":0,"4134":0,"4135":0,"4136":0,"4137":0,"4138":0,"4139":0,"4140":0,"4141":0,"4142":0,"4143":0,"4144":0,"4145":0,"4146":0,"4147":0,"4148":0,"4149":0,"4150":0,"4151":0,"4152":0,"4153":0,"4154":0,"4155":0,"4156":0,"4157":0,"4158":0,"4159":0,"4160":0,"4161":0,"4162":0,"4163":0,"4164":0,"4165":0,"4166":0,"4167":0,"4168":0,"4169":0,"4170":0,"4171":0,"4172":0,"4173":0,"4174":0,"4175":0,"4176":0,"4177":0,"4178":0,"4179":0,"4180":0,"4181":0,"4182":0,"4183":0,"4184":0,"4185":0,"4186":0,"4187":0,"4188":0,"4189":0,"4190":0,"4191":0,"4192":0,"4193":0,"4194":0,"4195":0,"4196":0,"4197":0,"4198":0,"4199":0,"4200":0,"4201":0,"4202":0,"4203":0,"4204":0,"4205":0,"4206":0,"4207":0,"4208":0,"4209":0,"4210":0,"4211":0,"4212":0,"4213":0,"4214":0,"4215":0,"4216":0,"4217":0,"4218":0,"4219":0,"4220":0,"4221":0,"4222":0,"4223":0,"4224":0,"4225":0,"4226":0,"4227":0,"4228":0,"4229":0,"4230":0,"4231":0,"4232":0,"4233":0,"4234":0,"4235":0,"4236":0,"4237":0,"4238":0,"4239":0,"4240":0,"4241":0,"4242":0,"4243":0,"4244":0,"4245":0,"4246":0,"4247":0,"4248":0,"4249":0,"4250":0,"4251":0,"4252":0,"4253":0,"4254":0,"4255":0,"4256":0,"4257":0,"4258":0,"4259":0,"4260":0,"4261":0,"4262":0,"4263":0,"4264":0,"4265":0,"4266":0,"4267":0,"4268":0,"4269":0,"4270":0,"4271":0,"4272":0,"4273":0,"4274":0,"4275":0,"4276":0,"4277":0,"4278":0,"4279":0,"4280":0,"4281":0,"4282":0,"4283":0,"4284":0,"4285":0,"4286":0,"4287":0,"4288":0,"4289":0,"4290":0,"4291":0,"4292":0,"4293":0,"4294":0,"4295":0,"4296":0,"4297":0,"4298":0,"4299":0,"4300":0,"4301":0,"4302":0,"4303":0,"4304":0,"4305":0,"4306":0,"4307":0,"4308":0,"4309":0,"4310":0,"4311":0,"4312":0,"4313":0,"4314":0,"4315":0,"4316":0,"4317":0,"4318":0,"4319":0,"4320":0,"4321":0,"4322":0,"4323":0,"4324":0,"4325":0,"4326":0,"4327":0,"4328":0,"4329":0,"4330":0,"4331":0,"4332":0,"4333":0,"4334":0,"4335":0,"4336":0,"4337":0,"4338":0,"4339":0,"4340":0,"4341":0,"4342":0,"4343":0,"4344":0,"4345":0,"4346":0,"4347":0,"4348":0,"4349":0,"4350":0,"4351":0,"4352":0,"4353":0,"4354":0,"4355":0,"4356":0,"4357":0,"4358":0,"4359":0,"4360":0,"4361":0,"4362":0,"4363":0,"4364":0,"4365":0,"4366":0,"4367":0,"4368":0,"4369":0,"4370":0,"4371":0,"4372":0,"4373":0,"4374":0,"4375":0,"4376":0,"4377":0,"4378":0,"4379":0,"4380":0,"4381":0,"4382":0,"4383":0,"4384":0,"4385":0,"4386":0,"4387":0,"4388":0,"4389":0,"4390":0,"4391":0,"4392":0,"4393":0,"4394":0,"4395":0,"4396":0,"4397":0,"4398":0,"4399":0,"4400":0,"4401":0,"4402":0,"4403":0,"4404":0,"4405":0,"4406":0,"4407":0,"4408":0,"4409":0,"4410":0,"4411":0,"4412":0,"4413":0,"4414":0,"4415":0,"4416":0,"4417":0,"4418":0,"4419":0,"4420":0,"4421":0,"4422":0,"4423":0,"4424":0,"4425":0,"4426":0,"4427":0,"4428":0,"4429":0,"4430":0,"4431":0,"4432":0,"4433":0,"4434":0,"4435":0,"4436":0,"4437":0,"4438":0,"4439":0,"4440":0,"4441":0,"4442":0,"4443":0,"4444":0,"4445":0,"4446":0,"4447":0,"4448":0,"4449":0,"4450":0,"4451":0,"4452":0,"4453":0,"4454":0,"4455":0,"4456":0,"4457":0,"4458":0,"4459":0,"4460":0,"4461":0,"4462":0,"4463":0,"4464":0,"4465":0,"4466":0,"4467":0,"4468":0,"4469":0,"4470":0,"4471":0,"4472":0,"4473":0,"4474":0,"4475":0,"4476":0,"4477":0,"4478":0,"4479":0,"4480":0,"4481":0,"4482":0,"4483":0,"4484":0,"4485":0,"4486":0,"4487":0,"4488":0,"4489":0,"4490":0,"4491":0,"4492":0,"4493":0,"4494":0,"4495":0,"4496":0,"4497":0,"4498":0,"4499":0,"4500":0,"4501":0,"4502":0,"4503":0,"4504":0,"4505":0,"4506":0,"4507":0,"4508":0,"4509":0,"4510":0,"4511":0,"4512":0,"4513":0,"4514":0,"4515":0,"4516":0,"4517":0,"4518":0,"4519":0,"4520":0,"4521":0,"4522":0,"4523":0,"4524":0,"4525":0,"4526":0,"4527":0,"4528":0,"4529":0,"4530":0,"4531":0,"4532":0,"4533":0,"4534":0,"4535":0,"4536":0,"4537":0,"4538":0,"4539":0,"4540":0,"4541":0,"4542":0,"4543":0,"4544":0,"4545":0,"4546":0,"4547":0,"4548":0,"4549":0,"4550":0,"4551":0,"4552":0,"4553":0,"4554":0,"4555":0,"4556":0,"4557":0,"4558":0,"4559":0,"4560":0,"4561":0,"4562":0,"4563":0,"4564":0,"4565":0,"4566":0,"4567":0,"4568":0,"4569":0,"4570":0,"4571":0,"4572":0,"4573":0,"4574":0,"4575":0,"4576":0,"4577":0,"4578":0,"4579":0,"4580":0,"4581":0,"4582":0,"4583":0,"4584":0,"4585":0,"4586":0,"4587":0,"4588":0,"4589":0,"4590":0,"4591":0,"4592":0,"4593":0,"4594":0,"4595":0,"4596":0,"4597":0,"4598":0,"4599":0,"4600":0,"4601":0,"4602":0,"4603":0,"4604":0,"4605":0,"4606":0,"4607":0,"4608":0,"4609":0,"4610":0,"4611":0,"4612":0,"4613":0,"4614":0,"4615":0,"4616":0,"4617":0,"4618":0,"4619":0,"4620":0,"4621":0,"4622":0,"4623":0,"4624":0,"4625":0,"4626":0,"4627":0,"4628":0,"4629":0,"4630":0,"4631":0,"4632":0,"4633":0,"4634":0,"4635":0,"4636":0,"4637":0,"4638":0,"4639":0,"4640":0,"4641":0,"4642":0,"4643":0,"4644":0,"4645":0,"4646":0,"4647":0,"4648":0,"4649":0,"4650":0,"4651":0,"4652":0,"4653":0,"4654":0,"4655":0,"4656":0,"4657":0,"4658":0,"4659":0,"4660":0,"4661":0,"4662":0,"4663":0,"4664":0,"4665":0,"4666":0,"4667":0,"4668":0,"4669":0,"4670":0,"4671":0,"4672":0,"4673":0,"4674":0,"4675":0,"4676":0,"4677":0,"4678":0,"4679":0,"4680":0,"4681":0,"4682":0,"4683":0,"4684":0,"4685":0,"4686":0,"4687":0,"4688":0,"4689":0,"4690":0,"4691":0,"4692":0,"4693":0,"4694":0,"4695":0,"4696":0,"4697":0,"4698":0,"4699":0,"4700":0,"4701":0,"4702":0,"4703":0,"4704":0,"4705":0,"4706":0,"4707":0,"4708":0,"4709":0,"4710":0,"4711":0,"4712":0,"4713":0,"4714":0,"4715":0,"4716":0,"4717":0,"4718":0,"4719":0,"4720":0,"4721":0,"4722":0,"4723":0,"4724":0,"4725":0,"4726":0,"4727":0,"4728":0,"4729":0,"4730":0,"4731":0,"4732":0,"4733":0,"4734":0,"4735":0,"4736":0,"4737":0,"4738":0,"4739":0,"4740":0,"4741":0,"4742":0,"4743":0,"4744":0,"4745":0,"4746":0,"4747":0,"4748":0,"4749":0,"4750":0,"4751":0,"4752":0,"4753":0,"4754":0,"4755":0,"4756":0,"4757":0,"4758":0,"4759":0,"4760":0,"4761":0,"4762":0,"4763":0,"4764":0,"4765":0,"4766":0,"4767":0,"4768":0,"4769":0,"4770":0,"4771":0,"4772":0,"4773":0,"4774":0,"4775":0,"4776":0,"4777":0,"4778":0,"4779":0,"4780":0,"4781":0,"4782":0,"4783":0,"4784":0,"4785":0,"4786":0,"4787":0,"4788":0,"4789":0,"4790":0,"4791":0,"4792":0,"4793":0,"4794":0,"4795":0,"4796":0,"4797":0,"4798":0,"4799":0,"4800":0,"4801":0,"4802":0,"4803":0,"4804":0,"4805":0,"4806":0,"4807":0,"4808":0,"4809":0,"4810":0,"4811":0,"4812":0,"4813":0,"4814":0,"4815":0,"4816":0,"4817":0,"4818":0,"4819":0,"4820":0,"4821":0,"4822":0,"4823":0,"4824":0,"4825":0,"4826":0,"4827":0,"4828":0,"4829":0,"4830":0,"4831":0,"4832":0,"4833":0,"4834":0,"4835":0,"4836":0,"4837":0,"4838":0,"4839":0,"4840":0,"4841":0,"4842":0,"4843":0,"4844":0,"4845":0,"4846":0,"4847":0,"4848":0,"4849":0,"4850":0,"4851":0,"4852":0,"4853":0,"4854":0,"4855":0,"4856":0,"4857":0,"4858":0,"4859":0,"4860":0,"4861":0,"4862":0,"4863":0,"4864":0,"4865":0,"4866":0,"4867":0,"4868":0,"4869":0,"4870":0,"4871":0,"4872":0,"4873":0,"4874":0,"4875":0,"4876":0,"4877":0,"4878":0,"4879":0,"4880":0,"4881":0,"4882":0,"4883":0,"4884":0,"4885":0,"4886":0,"4887":0,"4888":0,"4889":0,"4890":0,"4891":0,"4892":0,"4893":0,"4894":0,"4895":0,"4896":0,"4897":0,"4898":0,"4899":0,"4900":0,"4901":0,"4902":0,"4903":0,"4904":0,"4905":0,"4906":0,"4907":0,"4908":0,"4909":0,"4910":0,"4911":0,"4912":0,"4913":0,"4914":0,"4915":0,"4916":0,"4917":0,"4918":0,"4919":0,"4920":0,"4921":0,"4922":0,"4923":0,"4924":0,"4925":0,"4926":0,"4927":0,"4928":0,"4929":0,"4930":0,"4931":0,"4932":0,"4933":0,"4934":0,"4935":0,"4936":0,"4937":0,"4938":0,"4939":0,"4940":0,"4941":0,"4942":0,"4943":0,"4944":0,"4945":0,"4946":0,"4947":0,"4948":0,"4949":0,"4950":0,"4951":0,"4952":0,"4953":0,"4954":0,"4955":0,"4956":0,"4957":0,"4958":0,"4959":0,"4960":0,"4961":0,"4962":0,"4963":0,"4964":0,"4965":0,"4966":0,"4967":0,"4968":0,"4969":0,"4970":0,"4971":0,"4972":0,"4973":0,"4974":0,"4975":0,"4976":0,"4977":0,"4978":0,"4979":0,"4980":0,"4981":0,"4982":0,"4983":0,"4984":0,"4985":0,"4986":0,"4987":0,"4988":0,"4989":0,"4990":0,"4991":0,"4992":0,"4993":0,"4994":0,"4995":0,"4996":0,"4997":0,"4998":0,"4999":0,"5000":0,"5001":0,"5002":0,"5003":0,"5004":0,"5005":0,"5006":0,"5007":0,"5008":0,"5009":0,"5010":0,"5011":0,"5012":0,"5013":0,"5014":0,"5015":0,"5016":0,"5017":0,"5018":0,"5019":0,"5020":0,"5021":0,"5022":0,"5023":0,"5024":0,"5025":0,"5026":0,"5027":0,"5028":0,"5029":0,"5030":0,"5031":0,"5032":0,"5033":0,"5034":0,"5035":0,"5036":0,"5037":0,"5038":0,"5039":0,"5040":0,"5041":0,"5042":0,"5043":0,"5044":0,"5045":0,"5046":0,"5047":0,"5048":0,"5049":0,"5050":0,"5051":0,"5052":0,"5053":0,"5054":0,"5055":0,"5056":0,"5057":0,"5058":0,"5059":0,"5060":0,"5061":0,"5062":0,"5063":0,"5064":0,"5065":0,"5066":0,"5067":0,"5068":0,"5069":0,"5070":0,"5071":0,"5072":0,"5073":0,"5074":0,"5075":0,"5076":0,"5077":0,"5078":0,"5079":0,"5080":0,"5081":0,"5082":0,"5083":0,"5084":0,"5085":0,"5086":0,"5087":0,"5088":0,"5089":0,"5090":0,"5091":0,"5092":0,"5093":0,"5094":0,"5095":0,"5096":0,"5097":0,"5098":0,"5099":0,"5100":0,"5101":0,"5102":0,"5103":0,"5104":0,"5105":0,"5106":0,"5107":0,"5108":0,"5109":0,"5110":0,"5111":0,"5112":0,"5113":0,"5114":0,"5115":0,"5116":0,"5117":0,"5118":0,"5119":0,"5120":0,"5121":0,"5122":0,"5123":0,"5124":0,"5125":0,"5126":0,"5127":0,"5128":0,"5129":0,"5130":0,"5131":0,"5132":0,"5133":0,"5134":0,"5135":0,"5136":0,"5137":0,"5138":0,"5139":0,"5140":0,"5141":0,"5142":0,"5143":0,"5144":0,"5145":0,"5146":0,"5147":0,"5148":0,"5149":0,"5150":0,"5151":0,"5152":0,"5153":0,"5154":0,"5155":0,"5156":0,"5157":0,"5158":0,"5159":0,"5160":0,"5161":0,"5162":0,"5163":0,"5164":0,"5165":0,"5166":0,"5167":0,"5168":0,"5169":0,"5170":0,"5171":0,"5172":0,"5173":0,"5174":0,"5175":0,"5176":0,"5177":0,"5178":0,"5179":0,"5180":0,"5181":0,"5182":0,"5183":0,"5184":0,"5185":0,"5186":0,"5187":0,"5188":0,"5189":0,"5190":0,"5191":0,"5192":0,"5193":0,"5194":0,"5195":0,"5196":0,"5197":0,"5198":0,"5199":0,"5200":0,"5201":0,"5202":0,"5203":0,"5204":0,"5205":0,"5206":0,"5207":0,"5208":0,"5209":0,"5210":0,"5211":0,"5212":0,"5213":0,"5214":0,"5215":0,"5216":0,"5217":0,"5218":0,"5219":0,"5220":0,"5221":0,"5222":0,"5223":0,"5224":0,"5225":0,"5226":0,"5227":0,"5228":0,"5229":0,"5230":0,"5231":0,"5232":0,"5233":0,"5234":0,"5235":0,"5236":0,"5237":0,"5238":0,"5239":0,"5240":0,"5241":0,"5242":0,"5243":0,"5244":0,"5245":0,"5246":0,"5247":0,"5248":0,"5249":0,"5250":0,"5251":0,"5252":0,"5253":0,"5254":0,"5255":0,"5256":0,"5257":0,"5258":0,"5259":0,"5260":0,"5261":0,"5262":0,"5263":0,"5264":0,"5265":0,"5266":0},f:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"116":0,"117":0,"118":0,"119":0,"120":0,"121":0,"122":0,"123":0,"124":0,"125":0,"126":0,"127":0,"128":0,"129":0,"130":0,"131":0,"132":0,"133":0,"134":0,"135":0,"136":0,"137":0,"138":0,"139":0,"140":0,"141":0,"142":0,"143":0,"144":0,"145":0,"146":0,"147":0,"148":0,"149":0,"150":0,"151":0,"152":0,"153":0,"154":0,"155":0,"156":0,"157":0,"158":0,"159":0,"160":0,"161":0,"162":0,"163":0,"164":0,"165":0,"166":0,"167":0,"168":0,"169":0,"170":0,"171":0,"172":0,"173":0,"174":0,"175":0,"176":0,"177":0,"178":0,"179":0,"180":0,"181":0,"182":0,"183":0,"184":0,"185":0,"186":0,"187":0,"188":0,"189":0,"190":0,"191":0,"192":0,"193":0,"194":0,"195":0,"196":0,"197":0,"198":0,"199":0,"200":0,"201":0,"202":0,"203":0,"204":0,"205":0,"206":0,"207":0,"208":0,"209":0,"210":0,"211":0,"212":0,"213":0,"214":0,"215":0,"216":0,"217":0,"218":0,"219":0,"220":0,"221":0,"222":0,"223":0,"224":0,"225":0,"226":0,"227":0,"228":0,"229":0,"230":0,"231":0,"232":0,"233":0,"234":0,"235":0,"236":0,"237":0,"238":0,"239":0,"240":0,"241":0,"242":0,"243":0,"244":0,"245":0,"246":0,"247":0,"248":0,"249":0,"250":0,"251":0,"252":0,"253":0,"254":0,"255":0,"256":0,"257":0,"258":0,"259":0,"260":0,"261":0,"262":0,"263":0,"264":0,"265":0,"266":0,"267":0,"268":0,"269":0,"270":0,"271":0,"272":0,"273":0,"274":0,"275":0,"276":0,"277":0,"278":0,"279":0,"280":0,"281":0,"282":0,"283":0,"284":0,"285":0,"286":0,"287":0,"288":0,"289":0,"290":0,"291":0,"292":0,"293":0,"294":0,"295":0,"296":0,"297":0,"298":0,"299":0,"300":0,"301":0,"302":0,"303":0,"304":0,"305":0,"306":0,"307":0,"308":0,"309":0,"310":0,"311":0,"312":0,"313":0,"314":0,"315":0,"316":0,"317":0,"318":0,"319":0,"320":0,"321":0,"322":0,"323":0,"324":0,"325":0,"326":0,"327":0,"328":0,"329":0,"330":0,"331":0,"332":0,"333":0,"334":0,"335":0,"336":0,"337":0,"338":0,"339":0,"340":0,"341":0,"342":0,"343":0,"344":0,"345":0,"346":0,"347":0,"348":0,"349":0,"350":0,"351":0,"352":0,"353":0,"354":0,"355":0,"356":0,"357":0,"358":0,"359":0,"360":0,"361":0,"362":0,"363":0,"364":0,"365":0,"366":0,"367":0,"368":0,"369":0,"370":0,"371":0,"372":0,"373":0,"374":0,"375":0,"376":0,"377":0,"378":0,"379":0,"380":0,"381":0,"382":0,"383":0,"384":0,"385":0,"386":0,"387":0,"388":0,"389":0,"390":0,"391":0,"392":0,"393":0,"394":0,"395":0,"396":0,"397":0,"398":0,"399":0,"400":0,"401":0,"402":0,"403":0,"404":0,"405":0,"406":0,"407":0,"408":0,"409":0,"410":0,"411":0,"412":0,"413":0,"414":0,"415":0,"416":0,"417":0,"418":0,"419":0,"420":0,"421":0,"422":0,"423":0,"424":0,"425":0,"426":0,"427":0,"428":0,"429":0,"430":0,"431":0,"432":0,"433":0,"434":0,"435":0,"436":0,"437":0,"438":0,"439":0,"440":0,"441":0,"442":0,"443":0,"444":0,"445":0,"446":0,"447":0,"448":0,"449":0,"450":0,"451":0,"452":0,"453":0,"454":0,"455":0,"456":0,"457":0,"458":0,"459":0,"460":0,"461":0,"462":0,"463":0,"464":0,"465":0,"466":0,"467":0,"468":0,"469":0,"470":0,"471":0,"472":0,"473":0,"474":0,"475":0,"476":0,"477":0,"478":0,"479":0,"480":0,"481":0,"482":0,"483":0,"484":0,"485":0,"486":0,"487":0,"488":0,"489":0,"490":0,"491":0,"492":0,"493":0,"494":0,"495":0,"496":0,"497":0,"498":0,"499":0,"500":0,"501":0,"502":0,"503":0,"504":0,"505":0,"506":0,"507":0,"508":0,"509":0,"510":0,"511":0,"512":0,"513":0,"514":0,"515":0,"516":0,"517":0,"518":0,"519":0,"520":0,"521":0,"522":0,"523":0,"524":0,"525":0,"526":0,"527":0,"528":0,"529":0,"530":0,"531":0,"532":0,"533":0,"534":0,"535":0,"536":0,"537":0,"538":0,"539":0,"540":0,"541":0,"542":0,"543":0,"544":0,"545":0,"546":0,"547":0,"548":0,"549":0,"550":0,"551":0,"552":0,"553":0,"554":0,"555":0,"556":0,"557":0,"558":0,"559":0,"560":0,"561":0,"562":0,"563":0,"564":0,"565":0,"566":0,"567":0,"568":0,"569":0,"570":0,"571":0,"572":0,"573":0,"574":0,"575":0,"576":0,"577":0,"578":0,"579":0,"580":0,"581":0,"582":0,"583":0,"584":0,"585":0,"586":0,"587":0,"588":0,"589":0,"590":0,"591":0,"592":0,"593":0,"594":0,"595":0,"596":0,"597":0,"598":0,"599":0,"600":0,"601":0,"602":0,"603":0,"604":0,"605":0,"606":0,"607":0,"608":0,"609":0,"610":0,"611":0,"612":0,"613":0,"614":0,"615":0,"616":0,"617":0,"618":0,"619":0,"620":0,"621":0,"622":0,"623":0,"624":0,"625":0,"626":0,"627":0,"628":0,"629":0,"630":0,"631":0,"632":0,"633":0,"634":0,"635":0,"636":0,"637":0,"638":0,"639":0,"640":0,"641":0,"642":0,"643":0,"644":0,"645":0,"646":0,"647":0,"648":0,"649":0,"650":0,"651":0,"652":0,"653":0,"654":0,"655":0,"656":0,"657":0,"658":0,"659":0,"660":0,"661":0,"662":0,"663":0,"664":0,"665":0,"666":0,"667":0,"668":0,"669":0,"670":0,"671":0,"672":0,"673":0,"674":0,"675":0,"676":0,"677":0,"678":0,"679":0,"680":0,"681":0,"682":0,"683":0,"684":0,"685":0,"686":0,"687":0,"688":0,"689":0,"690":0,"691":0,"692":0,"693":0,"694":0,"695":0,"696":0,"697":0,"698":0,"699":0,"700":0,"701":0,"702":0,"703":0,"704":0,"705":0,"706":0,"707":0,"708":0,"709":0,"710":0,"711":0,"712":0,"713":0,"714":0,"715":0,"716":0,"717":0,"718":0,"719":0,"720":0,"721":0,"722":0,"723":0,"724":0,"725":0,"726":0,"727":0,"728":0,"729":0,"730":0,"731":0,"732":0,"733":0,"734":0,"735":0,"736":0,"737":0,"738":0,"739":0,"740":0,"741":0,"742":0,"743":0,"744":0,"745":0,"746":0,"747":0,"748":0,"749":0,"750":0,"751":0,"752":0,"753":0,"754":0,"755":0,"756":0,"757":0,"758":0,"759":0,"760":0,"761":0,"762":0,"763":0,"764":0,"765":0,"766":0,"767":0,"768":0,"769":0,"770":0,"771":0,"772":0,"773":0,"774":0,"775":0,"776":0,"777":0,"778":0,"779":0,"780":0,"781":0,"782":0,"783":0,"784":0,"785":0,"786":0,"787":0,"788":0,"789":0,"790":0,"791":0,"792":0,"793":0,"794":0,"795":0,"796":0,"797":0,"798":0,"799":0,"800":0,"801":0,"802":0,"803":0,"804":0,"805":0,"806":0,"807":0,"808":0,"809":0,"810":0,"811":0,"812":0,"813":0,"814":0,"815":0,"816":0,"817":0,"818":0,"819":0,"820":0,"821":0,"822":0,"823":0,"824":0,"825":0,"826":0,"827":0,"828":0,"829":0,"830":0,"831":0,"832":0,"833":0,"834":0,"835":0,"836":0,"837":0,"838":0,"839":0,"840":0,"841":0,"842":0,"843":0,"844":0,"845":0,"846":0,"847":0,"848":0,"849":0,"850":0,"851":0,"852":0,"853":0,"854":0,"855":0,"856":0,"857":0,"858":0,"859":0,"860":0,"861":0,"862":0,"863":0,"864":0,"865":0,"866":0,"867":0,"868":0,"869":0,"870":0,"871":0,"872":0,"873":0,"874":0,"875":0,"876":0,"877":0,"878":0,"879":0,"880":0,"881":0,"882":0,"883":0,"884":0,"885":0,"886":0,"887":0,"888":0,"889":0,"890":0,"891":0,"892":0,"893":0,"894":0,"895":0,"896":0,"897":0,"898":0,"899":0,"900":0,"901":0,"902":0,"903":0,"904":0,"905":0,"906":0,"907":0,"908":0,"909":0,"910":0,"911":0,"912":0,"913":0,"914":0,"915":0,"916":0,"917":0,"918":0,"919":0,"920":0,"921":0,"922":0,"923":0,"924":0,"925":0,"926":0,"927":0,"928":0,"929":0,"930":0,"931":0,"932":0,"933":0,"934":0,"935":0,"936":0,"937":0,"938":0,"939":0,"940":0,"941":0,"942":0,"943":0,"944":0,"945":0,"946":0,"947":0,"948":0,"949":0,"950":0,"951":0,"952":0,"953":0,"954":0,"955":0,"956":0,"957":0,"958":0,"959":0,"960":0,"961":0,"962":0,"963":0,"964":0,"965":0,"966":0,"967":0,"968":0,"969":0,"970":0,"971":0,"972":0,"973":0,"974":0,"975":0,"976":0,"977":0,"978":0,"979":0,"980":0,"981":0,"982":0,"983":0,"984":0,"985":0,"986":0,"987":0,"988":0,"989":0,"990":0,"991":0,"992":0,"993":0,"994":0,"995":0,"996":0,"997":0,"998":0,"999":0,"1000":0,"1001":0,"1002":0,"1003":0,"1004":0,"1005":0,"1006":0,"1007":0,"1008":0,"1009":0,"1010":0,"1011":0,"1012":0,"1013":0,"1014":0,"1015":0,"1016":0,"1017":0,"1018":0,"1019":0,"1020":0,"1021":0,"1022":0,"1023":0,"1024":0,"1025":0,"1026":0,"1027":0,"1028":0,"1029":0,"1030":0,"1031":0,"1032":0,"1033":0,"1034":0,"1035":0,"1036":0,"1037":0,"1038":0,"1039":0,"1040":0,"1041":0,"1042":0,"1043":0,"1044":0,"1045":0,"1046":0,"1047":0,"1048":0,"1049":0,"1050":0,"1051":0,"1052":0,"1053":0,"1054":0,"1055":0,"1056":0,"1057":0,"1058":0,"1059":0,"1060":0,"1061":0,"1062":0,"1063":0,"1064":0,"1065":0,"1066":0,"1067":0,"1068":0,"1069":0,"1070":0,"1071":0,"1072":0,"1073":0,"1074":0,"1075":0,"1076":0,"1077":0,"1078":0,"1079":0,"1080":0,"1081":0,"1082":0,"1083":0,"1084":0,"1085":0,"1086":0,"1087":0,"1088":0,"1089":0,"1090":0,"1091":0,"1092":0,"1093":0,"1094":0,"1095":0,"1096":0,"1097":0,"1098":0,"1099":0,"1100":0,"1101":0,"1102":0,"1103":0,"1104":0,"1105":0,"1106":0,"1107":0,"1108":0,"1109":0,"1110":0,"1111":0,"1112":0,"1113":0,"1114":0,"1115":0,"1116":0,"1117":0,"1118":0,"1119":0,"1120":0,"1121":0,"1122":0,"1123":0,"1124":0,"1125":0,"1126":0,"1127":0,"1128":0,"1129":0,"1130":0,"1131":0,"1132":0,"1133":0,"1134":0,"1135":0,"1136":0,"1137":0,"1138":0,"1139":0,"1140":0,"1141":0,"1142":0,"1143":0,"1144":0,"1145":0,"1146":0,"1147":0,"1148":0,"1149":0,"1150":0,"1151":0,"1152":0,"1153":0,"1154":0,"1155":0,"1156":0,"1157":0,"1158":0,"1159":0,"1160":0,"1161":0,"1162":0,"1163":0,"1164":0,"1165":0,"1166":0,"1167":0,"1168":0,"1169":0,"1170":0,"1171":0,"1172":0,"1173":0,"1174":0,"1175":0,"1176":0,"1177":0,"1178":0,"1179":0,"1180":0,"1181":0,"1182":0,"1183":0,"1184":0,"1185":0,"1186":0,"1187":0,"1188":0,"1189":0,"1190":0,"1191":0,"1192":0,"1193":0,"1194":0,"1195":0,"1196":0,"1197":0,"1198":0,"1199":0,"1200":0,"1201":0,"1202":0,"1203":0,"1204":0,"1205":0,"1206":0,"1207":0,"1208":0,"1209":0,"1210":0,"1211":0,"1212":0,"1213":0,"1214":0,"1215":0,"1216":0,"1217":0,"1218":0,"1219":0,"1220":0,"1221":0,"1222":0,"1223":0,"1224":0,"1225":0,"1226":0,"1227":0,"1228":0,"1229":0,"1230":0,"1231":0,"1232":0,"1233":0,"1234":0,"1235":0,"1236":0,"1237":0,"1238":0,"1239":0,"1240":0,"1241":0,"1242":0,"1243":0,"1244":0,"1245":0,"1246":0,"1247":0,"1248":0,"1249":0,"1250":0,"1251":0,"1252":0,"1253":0,"1254":0,"1255":0,"1256":0,"1257":0,"1258":0,"1259":0,"1260":0,"1261":0,"1262":0,"1263":0,"1264":0,"1265":0,"1266":0,"1267":0,"1268":0,"1269":0,"1270":0,"1271":0,"1272":0,"1273":0,"1274":0,"1275":0,"1276":0,"1277":0,"1278":0,"1279":0,"1280":0,"1281":0,"1282":0,"1283":0,"1284":0,"1285":0,"1286":0,"1287":0,"1288":0,"1289":0,"1290":0,"1291":0,"1292":0,"1293":0,"1294":0,"1295":0,"1296":0,"1297":0,"1298":0,"1299":0,"1300":0,"1301":0,"1302":0,"1303":0,"1304":0,"1305":0,"1306":0,"1307":0,"1308":0,"1309":0,"1310":0,"1311":0,"1312":0,"1313":0,"1314":0,"1315":0,"1316":0,"1317":0,"1318":0,"1319":0,"1320":0,"1321":0,"1322":0,"1323":0,"1324":0,"1325":0,"1326":0,"1327":0,"1328":0,"1329":0,"1330":0,"1331":0,"1332":0,"1333":0,"1334":0,"1335":0,"1336":0,"1337":0,"1338":0,"1339":0,"1340":0,"1341":0,"1342":0,"1343":0,"1344":0,"1345":0,"1346":0,"1347":0,"1348":0,"1349":0,"1350":0,"1351":0,"1352":0,"1353":0,"1354":0,"1355":0,"1356":0,"1357":0,"1358":0,"1359":0,"1360":0,"1361":0,"1362":0,"1363":0,"1364":0,"1365":0,"1366":0,"1367":0,"1368":0,"1369":0,"1370":0,"1371":0,"1372":0,"1373":0,"1374":0,"1375":0,"1376":0,"1377":0,"1378":0,"1379":0,"1380":0,"1381":0,"1382":0,"1383":0,"1384":0,"1385":0,"1386":0,"1387":0,"1388":0,"1389":0,"1390":0,"1391":0,"1392":0,"1393":0,"1394":0,"1395":0,"1396":0,"1397":0,"1398":0,"1399":0,"1400":0,"1401":0,"1402":0,"1403":0,"1404":0,"1405":0,"1406":0,"1407":0,"1408":0,"1409":0,"1410":0,"1411":0,"1412":0,"1413":0,"1414":0,"1415":0,"1416":0,"1417":0,"1418":0,"1419":0,"1420":0,"1421":0,"1422":0,"1423":0,"1424":0,"1425":0},b:{"0":[0,0,0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0,0],"6":[0,0],"7":[0,0],"8":[0,0],"9":[0,0],"10":[0],"11":[0],"12":[0,0],"13":[0,0],"14":[0,0],"15":[0,0],"16":[0,0],"17":[0,0],"18":[0,0],"19":[0,0],"20":[0,0],"21":[0,0],"22":[0,0],"23":[0,0],"24":[0,0],"25":[0,0],"26":[0,0],"27":[0,0],"28":[0,0],"29":[0,0],"30":[0,0],"31":[0,0],"32":[0,0],"33":[0,0],"34":[0,0],"35":[0,0],"36":[0,0],"37":[0,0],"38":[0,0],"39":[0,0],"40":[0,0],"41":[0,0],"42":[0,0],"43":[0,0],"44":[0,0],"45":[0,0],"46":[0,0],"47":[0,0],"48":[0,0],"49":[0,0],"50":[0,0],"51":[0,0,0],"52":[0,0],"53":[0,0],"54":[0,0],"55":[0,0],"56":[0,0],"57":[0,0],"58":[0,0],"59":[0,0],"60":[0,0],"61":[0,0],"62":[0,0],"63":[0,0],"64":[0,0,0],"65":[0,0],"66":[0,0],"67":[0,0],"68":[0,0],"69":[0,0],"70":[0,0],"71":[0,0],"72":[0,0],"73":[0,0],"74":[0,0],"75":[0,0],"76":[0,0],"77":[0,0,0],"78":[0,0],"79":[0,0],"80":[0,0],"81":[0,0],"82":[0,0],"83":[0,0],"84":[0,0],"85":[0,0],"86":[0,0],"87":[0,0],"88":[0,0],"89":[0,0],"90":[0,0],"91":[0,0],"92":[0,0],"93":[0,0],"94":[0,0],"95":[0,0],"96":[0,0],"97":[0,0],"98":[0,0],"99":[0,0],"100":[0,0,0],"101":[0,0],"102":[0,0],"103":[0,0],"104":[0,0],"105":[0,0],"106":[0,0],"107":[0,0,0,0],"108":[0,0,0],"109":[0,0,0],"110":[0,0],"111":[0,0],"112":[0,0],"113":[0,0],"114":[0,0,0,0,0,0],"115":[0],"116":[0,0],"117":[0,0],"118":[0,0],"119":[0,0],"120":[0,0,0],"121":[0,0],"122":[0,0],"123":[0,0],"124":[0,0],"125":[0,0],"126":[0,0],"127":[0,0],"128":[0,0],"129":[0,0],"130":[0,0],"131":[0,0],"132":[0,0],"133":[0,0],"134":[0,0],"135":[0,0],"136":[0,0],"137":[0,0],"138":[0,0],"139":[0,0],"140":[0,0],"141":[0,0],"142":[0,0],"143":[0,0],"144":[0,0],"145":[0,0],"146":[0,0],"147":[0,0],"148":[0,0],"149":[0,0],"150":[0,0],"151":[0,0,0,0],"152":[0,0],"153":[0,0],"154":[0,0],"155":[0,0],"156":[0,0],"157":[0,0],"158":[0,0],"159":[0,0],"160":[0,0],"161":[0,0],"162":[0,0],"163":[0,0],"164":[0,0],"165":[0,0],"166":[0,0],"167":[0,0],"168":[0,0],"169":[0,0],"170":[0,0],"171":[0,0],"172":[0,0],"173":[0,0],"174":[0,0],"175":[0,0],"176":[0,0],"177":[0,0,0],"178":[0,0],"179":[0,0],"180":[0,0],"181":[0,0],"182":[0,0],"183":[0,0,0],"184":[0,0],"185":[0,0],"186":[0,0],"187":[0,0],"188":[0,0],"189":[0,0],"190":[0,0,0],"191":[0,0,0,0],"192":[0,0,0],"193":[0,0],"194":[0,0],"195":[0,0],"196":[0,0],"197":[0,0],"198":[0,0],"199":[0,0,0],"200":[0,0],"201":[0,0],"202":[0,0],"203":[0,0],"204":[0,0],"205":[0,0],"206":[0,0],"207":[0,0],"208":[0,0],"209":[0,0],"210":[0,0],"211":[0,0,0],"212":[0,0],"213":[0,0],"214":[0,0,0],"215":[0,0],"216":[0,0],"217":[0,0],"218":[0,0,0],"219":[0,0],"220":[0,0],"221":[0,0],"222":[0,0,0,0,0,0,0,0,0,0,0],"223":[0,0],"224":[0,0],"225":[0,0],"226":[0,0],"227":[0,0],"228":[0,0],"229":[0,0],"230":[0,0],"231":[0,0],"232":[0,0],"233":[0,0],"234":[0,0],"235":[0,0],"236":[0,0],"237":[0,0],"238":[0,0],"239":[0,0],"240":[0,0],"241":[0,0,0,0,0,0],"242":[0,0],"243":[0,0],"244":[0,0],"245":[0,0],"246":[0,0],"247":[0,0],"248":[0,0],"249":[0,0],"250":[0,0],"251":[0,0],"252":[0,0],"253":[0,0],"254":[0,0],"255":[0,0],"256":[0,0],"257":[0,0],"258":[0,0],"259":[0],"260":[0,0],"261":[0,0],"262":[0,0],"263":[0,0],"264":[0,0],"265":[0,0],"266":[0,0],"267":[0,0],"268":[0,0],"269":[0,0],"270":[0,0],"271":[0,0],"272":[0,0],"273":[0,0],"274":[0,0],"275":[0,0],"276":[0,0,0],"277":[0,0],"278":[0,0],"279":[0,0,0],"280":[0,0,0],"281":[0,0,0],"282":[0,0],"283":[0,0],"284":[0],"285":[0],"286":[0,0],"287":[0,0],"288":[0,0],"289":[0,0],"290":[0,0],"291":[0],"292":[0],"293":[0],"294":[0],"295":[0,0],"296":[0,0],"297":[0,0],"298":[0,0,0,0],"299":[0,0],"300":[0,0],"301":[0,0,0],"302":[0,0,0],"303":[0,0],"304":[0,0],"305":[0,0],"306":[0,0],"307":[0,0],"308":[0,0],"309":[0,0],"310":[0,0],"311":[0,0],"312":[0,0],"313":[0,0],"314":[0,0],"315":[0,0],"316":[0,0],"317":[0,0,0],"318":[0,0],"319":[0,0,0],"320":[0,0],"321":[0,0],"322":[0,0,0,0],"323":[0,0],"324":[0,0],"325":[0,0],"326":[0,0],"327":[0,0],"328":[0,0],"329":[0,0],"330":[0,0],"331":[0,0],"332":[0],"333":[0,0],"334":[0,0,0],"335":[0,0],"336":[0,0],"337":[0,0],"338":[0,0],"339":[0,0],"340":[0,0],"341":[0,0],"342":[0,0],"343":[0,0],"344":[0],"345":[0,0],"346":[0,0],"347":[0,0],"348":[0],"349":[0,0],"350":[0,0],"351":[0,0],"352":[0,0],"353":[0,0],"354":[0,0],"355":[0,0],"356":[0,0],"357":[0,0],"358":[0,0],"359":[0,0],"360":[0,0],"361":[0,0],"362":[0,0],"363":[0,0],"364":[0,0],"365":[0,0,0],"366":[0,0],"367":[0,0],"368":[0,0],"369":[0,0],"370":[0,0,0,0],"371":[0,0],"372":[0,0],"373":[0,0],"374":[0,0],"375":[0,0],"376":[0,0],"377":[0,0],"378":[0,0],"379":[0,0],"380":[0,0],"381":[0,0],"382":[0,0],"383":[0,0],"384":[0,0],"385":[0,0],"386":[0,0],"387":[0,0],"388":[0,0,0],"389":[0,0,0,0,0,0],"390":[0,0],"391":[0,0,0,0,0],"392":[0,0],"393":[0,0,0],"394":[0,0],"395":[0,0],"396":[0,0],"397":[0,0],"398":[0,0],"399":[0,0],"400":[0,0],"401":[0,0],"402":[0,0],"403":[0,0],"404":[0,0],"405":[0,0,0],"406":[0,0],"407":[0,0],"408":[0,0],"409":[0,0],"410":[0,0],"411":[0,0],"412":[0,0],"413":[0,0],"414":[0,0],"415":[0,0],"416":[0,0],"417":[0,0],"418":[0,0],"419":[0,0,0],"420":[0,0],"421":[0,0,0],"422":[0,0],"423":[0,0],"424":[0,0],"425":[0,0],"426":[0,0],"427":[0,0],"428":[0,0],"429":[0,0],"430":[0,0],"431":[0,0],"432":[0,0],"433":[0,0],"434":[0,0],"435":[0,0],"436":[0,0],"437":[0,0],"438":[0,0],"439":[0,0,0],"440":[0,0],"441":[0,0,0],"442":[0,0],"443":[0,0],"444":[0,0],"445":[0,0],"446":[0,0],"447":[0,0],"448":[0,0],"449":[0,0],"450":[0,0],"451":[0,0],"452":[0,0],"453":[0,0],"454":[0,0],"455":[0,0],"456":[0,0],"457":[0,0],"458":[0,0],"459":[0,0],"460":[0,0],"461":[0,0],"462":[0,0],"463":[0,0],"464":[0,0],"465":[0],"466":[0,0],"467":[0,0],"468":[0,0],"469":[0,0],"470":[0,0],"471":[0,0],"472":[0,0],"473":[0,0],"474":[0,0,0],"475":[0,0],"476":[0,0],"477":[0,0,0],"478":[0,0],"479":[0,0],"480":[0,0],"481":[0,0],"482":[0,0],"483":[0,0],"484":[0,0],"485":[0,0],"486":[0,0],"487":[0,0],"488":[0,0],"489":[0,0],"490":[0,0],"491":[0,0],"492":[0,0],"493":[0,0,0],"494":[0,0],"495":[0,0],"496":[0,0],"497":[0,0],"498":[0,0],"499":[0,0],"500":[0,0],"501":[0,0],"502":[0,0,0],"503":[0,0,0],"504":[0,0],"505":[0,0],"506":[0,0],"507":[0,0],"508":[0,0],"509":[0,0],"510":[0,0],"511":[0,0],"512":[0,0],"513":[0,0],"514":[0,0],"515":[0,0],"516":[0,0,0],"517":[0,0],"518":[0,0],"519":[0,0],"520":[0,0,0],"521":[0,0],"522":[0,0],"523":[0,0],"524":[0,0],"525":[0,0],"526":[0,0],"527":[0],"528":[0,0],"529":[0,0],"530":[0,0],"531":[0,0,0,0,0],"532":[0,0],"533":[0,0],"534":[0,0],"535":[0,0],"536":[0,0],"537":[0,0,0],"538":[0,0],"539":[0,0],"540":[0,0],"541":[0,0],"542":[0,0],"543":[0,0],"544":[0,0,0,0],"545":[0,0],"546":[0,0],"547":[0,0],"548":[0,0],"549":[0,0],"550":[0,0],"551":[0,0],"552":[0,0,0],"553":[0,0,0],"554":[0,0],"555":[0,0],"556":[0,0,0,0],"557":[0,0,0],"558":[0,0],"559":[0,0],"560":[0,0],"561":[0,0],"562":[0,0],"563":[0,0],"564":[0,0],"565":[0,0],"566":[0,0],"567":[0,0],"568":[0,0,0],"569":[0,0],"570":[0,0],"571":[0,0,0],"572":[0,0],"573":[0,0],"574":[0,0],"575":[0,0],"576":[0,0],"577":[0,0],"578":[0,0,0],"579":[0,0],"580":[0,0],"581":[0,0],"582":[0,0],"583":[0],"584":[0],"585":[0,0],"586":[0,0],"587":[0,0,0],"588":[0,0],"589":[0,0,0],"590":[0,0],"591":[0,0],"592":[0,0],"593":[0,0],"594":[0,0],"595":[0,0],"596":[0,0],"597":[0,0],"598":[0,0],"599":[0,0],"600":[0,0],"601":[0,0],"602":[0,0],"603":[0,0],"604":[0,0],"605":[0,0],"606":[0,0],"607":[0,0],"608":[0,0],"609":[0,0],"610":[0,0],"611":[0,0],"612":[0,0],"613":[0],"614":[0,0],"615":[0,0],"616":[0,0],"617":[0,0],"618":[0,0],"619":[0,0],"620":[0,0],"621":[0,0,0],"622":[0,0],"623":[0,0],"624":[0,0,0],"625":[0,0],"626":[0,0],"627":[0,0,0],"628":[0,0,0],"629":[0,0],"630":[0,0],"631":[0,0],"632":[0,0],"633":[0,0],"634":[0],"635":[0,0],"636":[0,0],"637":[0,0],"638":[0,0],"639":[0,0],"640":[0,0],"641":[0,0],"642":[0,0],"643":[0,0,0],"644":[0,0],"645":[0,0],"646":[0,0],"647":[0,0],"648":[0,0],"649":[0,0],"650":[0,0],"651":[0,0],"652":[0,0],"653":[0,0],"654":[0,0],"655":[0,0,0],"656":[0,0],"657":[0,0],"658":[0,0],"659":[0,0],"660":[0,0],"661":[0,0],"662":[0,0],"663":[0,0,0],"664":[0,0],"665":[0,0],"666":[0,0],"667":[0,0],"668":[0,0],"669":[0,0],"670":[0,0],"671":[0,0],"672":[0,0],"673":[0,0],"674":[0,0],"675":[0],"676":[0],"677":[0,0],"678":[0,0],"679":[0,0,0],"680":[0,0],"681":[0,0],"682":[0,0],"683":[0,0],"684":[0,0,0,0],"685":[0,0],"686":[0,0],"687":[0,0],"688":[0,0],"689":[0,0],"690":[0,0],"691":[0,0],"692":[0,0],"693":[0,0],"694":[0,0],"695":[0,0],"696":[0,0],"697":[0,0],"698":[0,0],"699":[0,0],"700":[0,0,0,0,0],"701":[0,0],"702":[0,0],"703":[0,0],"704":[0,0],"705":[0,0],"706":[0,0],"707":[0,0],"708":[0,0],"709":[0,0],"710":[0,0],"711":[0,0,0],"712":[0,0],"713":[0,0],"714":[0,0],"715":[0,0],"716":[0,0],"717":[0,0,0],"718":[0,0],"719":[0,0],"720":[0,0],"721":[0,0],"722":[0,0],"723":[0,0],"724":[0,0,0],"725":[0,0,0],"726":[0,0],"727":[0,0],"728":[0,0],"729":[0,0],"730":[0,0],"731":[0,0],"732":[0,0],"733":[0,0],"734":[0,0],"735":[0,0],"736":[0,0],"737":[0,0],"738":[0,0],"739":[0,0],"740":[0,0],"741":[0,0],"742":[0,0],"743":[0,0],"744":[0,0,0],"745":[0,0],"746":[0,0],"747":[0,0,0],"748":[0,0],"749":[0,0],"750":[0],"751":[0,0],"752":[0,0],"753":[0,0],"754":[0,0,0,0,0],"755":[0,0],"756":[0,0],"757":[0,0],"758":[0,0],"759":[0,0],"760":[0,0],"761":[0,0,0,0,0],"762":[0,0],"763":[0,0],"764":[0,0],"765":[0,0],"766":[0,0],"767":[0,0],"768":[0,0],"769":[0,0],"770":[0,0],"771":[0,0],"772":[0,0],"773":[0,0],"774":[0,0],"775":[0,0],"776":[0],"777":[0,0],"778":[0,0],"779":[0,0],"780":[0,0,0],"781":[0,0],"782":[0,0],"783":[0,0],"784":[0,0],"785":[0,0],"786":[0,0],"787":[0,0],"788":[0,0,0],"789":[0,0],"790":[0,0],"791":[0,0],"792":[0,0],"793":[0,0],"794":[0,0],"795":[0,0,0],"796":[0,0],"797":[0,0],"798":[0,0],"799":[0,0],"800":[0,0],"801":[0,0],"802":[0,0,0],"803":[0,0],"804":[0,0],"805":[0,0],"806":[0,0],"807":[0,0],"808":[0,0],"809":[0,0],"810":[0,0],"811":[0,0,0],"812":[0,0],"813":[0,0],"814":[0,0],"815":[0,0],"816":[0,0],"817":[0,0],"818":[0,0],"819":[0,0],"820":[0,0],"821":[0,0],"822":[0,0],"823":[0],"824":[0,0],"825":[0,0],"826":[0,0],"827":[0,0],"828":[0,0,0],"829":[0,0],"830":[0,0,0],"831":[0,0],"832":[0,0],"833":[0,0],"834":[0,0],"835":[0,0],"836":[0,0,0],"837":[0,0],"838":[0,0],"839":[0,0],"840":[0,0],"841":[0,0],"842":[0,0],"843":[0,0],"844":[0,0],"845":[0,0],"846":[0,0,0],"847":[0,0],"848":[0,0],"849":[0,0],"850":[0,0],"851":[0,0],"852":[0,0,0,0,0],"853":[0,0],"854":[0,0],"855":[0,0],"856":[0,0],"857":[0,0],"858":[0,0],"859":[0,0],"860":[0,0],"861":[0,0],"862":[0,0,0],"863":[0,0,0,0],"864":[0,0],"865":[0,0],"866":[0,0],"867":[0,0],"868":[0,0],"869":[0,0],"870":[0,0],"871":[0,0],"872":[0,0],"873":[0,0],"874":[0,0],"875":[0,0],"876":[0,0],"877":[0,0,0],"878":[0,0],"879":[0,0],"880":[0,0],"881":[0,0],"882":[0,0],"883":[0,0],"884":[0,0],"885":[0,0,0],"886":[0,0],"887":[0,0],"888":[0,0],"889":[0,0],"890":[0,0],"891":[0,0],"892":[0,0],"893":[0,0],"894":[0,0],"895":[0,0],"896":[0,0],"897":[0,0],"898":[0,0],"899":[0],"900":[0,0],"901":[0,0],"902":[0,0],"903":[0,0],"904":[0,0],"905":[0,0],"906":[0,0],"907":[0,0],"908":[0,0],"909":[0,0],"910":[0,0],"911":[0,0],"912":[0,0],"913":[0,0],"914":[0,0],"915":[0,0],"916":[0,0],"917":[0,0],"918":[0,0],"919":[0,0],"920":[0,0],"921":[0,0],"922":[0,0,0],"923":[0,0],"924":[0,0],"925":[0,0],"926":[0,0],"927":[0,0],"928":[0,0],"929":[0,0],"930":[0,0],"931":[0,0],"932":[0,0],"933":[0,0],"934":[0,0],"935":[0,0],"936":[0,0],"937":[0,0],"938":[0,0],"939":[0,0],"940":[0,0],"941":[0,0],"942":[0,0],"943":[0,0],"944":[0,0],"945":[0,0],"946":[0,0],"947":[0,0],"948":[0,0,0,0],"949":[0,0],"950":[0,0],"951":[0,0],"952":[0,0],"953":[0,0],"954":[0,0],"955":[0,0],"956":[0,0],"957":[0,0],"958":[0,0],"959":[0,0],"960":[0,0,0],"961":[0,0],"962":[0,0],"963":[0,0],"964":[0,0],"965":[0,0],"966":[0,0],"967":[0,0],"968":[0,0],"969":[0,0],"970":[0,0],"971":[0,0],"972":[0,0],"973":[0,0],"974":[0,0],"975":[0,0],"976":[0,0],"977":[0,0],"978":[0,0],"979":[0,0,0],"980":[0,0],"981":[0,0],"982":[0,0],"983":[0,0,0],"984":[0,0],"985":[0,0],"986":[0,0],"987":[0,0],"988":[0,0],"989":[0,0],"990":[0,0],"991":[0,0],"992":[0,0],"993":[0,0],"994":[0,0],"995":[0,0],"996":[0,0],"997":[0,0,0],"998":[0,0],"999":[0,0],"1000":[0,0],"1001":[0,0],"1002":[0,0],"1003":[0,0],"1004":[0,0],"1005":[0,0],"1006":[0,0],"1007":[0,0],"1008":[0,0],"1009":[0,0],"1010":[0,0],"1011":[0,0],"1012":[0,0],"1013":[0,0],"1014":[0,0],"1015":[0,0],"1016":[0,0],"1017":[0,0],"1018":[0,0],"1019":[0,0],"1020":[0,0],"1021":[0,0],"1022":[0,0],"1023":[0,0],"1024":[0,0],"1025":[0,0],"1026":[0,0],"1027":[0,0],"1028":[0,0],"1029":[0,0],"1030":[0,0],"1031":[0,0],"1032":[0,0],"1033":[0,0],"1034":[0,0,0,0,0],"1035":[0,0],"1036":[0,0],"1037":[0,0],"1038":[0,0],"1039":[0,0],"1040":[0,0],"1041":[0,0],"1042":[0,0],"1043":[0,0],"1044":[0,0],"1045":[0,0],"1046":[0,0],"1047":[0,0],"1048":[0,0],"1049":[0,0],"1050":[0,0],"1051":[0,0],"1052":[0,0],"1053":[0,0,0,0],"1054":[0,0],"1055":[0],"1056":[0,0],"1057":[0,0],"1058":[0,0],"1059":[0,0],"1060":[0,0],"1061":[0,0,0,0],"1062":[0,0],"1063":[0,0],"1064":[0,0],"1065":[0,0],"1066":[0,0],"1067":[0,0,0,0,0],"1068":[0,0],"1069":[0,0],"1070":[0,0],"1071":[0,0],"1072":[0,0],"1073":[0,0],"1074":[0,0],"1075":[0,0],"1076":[0,0],"1077":[0,0],"1078":[0,0],"1079":[0,0],"1080":[0,0],"1081":[0,0],"1082":[0,0],"1083":[0,0],"1084":[0,0],"1085":[0,0],"1086":[0,0],"1087":[0,0],"1088":[0,0],"1089":[0,0,0],"1090":[0,0],"1091":[0,0],"1092":[0,0],"1093":[0,0],"1094":[0,0],"1095":[0,0],"1096":[0,0],"1097":[0,0,0],"1098":[0,0],"1099":[0,0],"1100":[0,0],"1101":[0,0],"1102":[0,0],"1103":[0,0],"1104":[0,0],"1105":[0,0],"1106":[0,0],"1107":[0,0],"1108":[0,0],"1109":[0,0],"1110":[0,0],"1111":[0,0],"1112":[0,0],"1113":[0,0],"1114":[0,0],"1115":[0,0],"1116":[0,0],"1117":[0,0],"1118":[0,0],"1119":[0,0],"1120":[0,0],"1121":[0,0],"1122":[0,0],"1123":[0,0],"1124":[0,0],"1125":[0,0],"1126":[0,0],"1127":[0,0],"1128":[0,0],"1129":[0,0],"1130":[0,0],"1131":[0,0],"1132":[0,0],"1133":[0,0],"1134":[0,0],"1135":[0,0],"1136":[0,0],"1137":[0,0],"1138":[0,0],"1139":[0,0],"1140":[0,0],"1141":[0,0],"1142":[0,0],"1143":[0,0],"1144":[0,0],"1145":[0,0],"1146":[0,0],"1147":[0,0],"1148":[0,0],"1149":[0,0],"1150":[0,0],"1151":[0,0],"1152":[0,0],"1153":[0,0],"1154":[0,0],"1155":[0,0],"1156":[0,0],"1157":[0,0],"1158":[0,0],"1159":[0,0],"1160":[0,0],"1161":[0,0],"1162":[0,0],"1163":[0,0],"1164":[0,0],"1165":[0,0],"1166":[0,0,0],"1167":[0,0],"1168":[0,0],"1169":[0,0,0],"1170":[0,0],"1171":[0,0],"1172":[0,0],"1173":[0,0],"1174":[0,0],"1175":[0,0],"1176":[0,0],"1177":[0,0],"1178":[0,0],"1179":[0,0],"1180":[0,0],"1181":[0,0],"1182":[0,0],"1183":[0,0],"1184":[0,0],"1185":[0,0],"1186":[0,0],"1187":[0,0],"1188":[0,0],"1189":[0,0],"1190":[0,0],"1191":[0,0],"1192":[0,0],"1193":[0,0],"1194":[0,0],"1195":[0,0],"1196":[0,0],"1197":[0,0],"1198":[0,0],"1199":[0,0,0],"1200":[0,0],"1201":[0,0],"1202":[0,0],"1203":[0,0],"1204":[0,0],"1205":[0,0],"1206":[0,0],"1207":[0,0],"1208":[0,0],"1209":[0,0],"1210":[0,0],"1211":[0,0],"1212":[0,0,0],"1213":[0,0],"1214":[0,0],"1215":[0,0,0],"1216":[0,0],"1217":[0,0],"1218":[0,0],"1219":[0,0],"1220":[0,0,0,0],"1221":[0,0],"1222":[0,0],"1223":[0,0],"1224":[0,0],"1225":[0,0],"1226":[0,0],"1227":[0,0,0],"1228":[0,0],"1229":[0,0],"1230":[0,0],"1231":[0,0],"1232":[0,0],"1233":[0,0],"1234":[0,0],"1235":[0,0,0,0],"1236":[0,0],"1237":[0,0],"1238":[0,0],"1239":[0,0],"1240":[0,0],"1241":[0,0],"1242":[0,0],"1243":[0,0],"1244":[0,0],"1245":[0,0],"1246":[0,0],"1247":[0,0],"1248":[0,0],"1249":[0,0],"1250":[0,0],"1251":[0,0],"1252":[0,0],"1253":[0,0],"1254":[0,0],"1255":[0,0],"1256":[0,0],"1257":[0,0],"1258":[0,0],"1259":[0,0,0],"1260":[0,0],"1261":[0,0,0,0],"1262":[0,0],"1263":[0,0],"1264":[0,0],"1265":[0,0],"1266":[0,0],"1267":[0,0],"1268":[0,0],"1269":[0,0,0],"1270":[0,0],"1271":[0,0],"1272":[0,0],"1273":[0,0],"1274":[0,0],"1275":[0,0,0,0],"1276":[0,0],"1277":[0,0],"1278":[0,0],"1279":[0,0],"1280":[0,0],"1281":[0,0],"1282":[0,0],"1283":[0,0],"1284":[0,0],"1285":[0,0],"1286":[0,0],"1287":[0,0],"1288":[0,0],"1289":[0,0],"1290":[0,0],"1291":[0,0],"1292":[0,0],"1293":[0,0],"1294":[0,0],"1295":[0,0],"1296":[0,0],"1297":[0,0],"1298":[0,0],"1299":[0,0],"1300":[0,0],"1301":[0,0],"1302":[0,0,0],"1303":[0,0],"1304":[0,0],"1305":[0,0],"1306":[0,0],"1307":[0,0],"1308":[0,0],"1309":[0,0],"1310":[0],"1311":[0,0],"1312":[0,0],"1313":[0],"1314":[0,0],"1315":[0,0],"1316":[0,0],"1317":[0,0],"1318":[0,0,0],"1319":[0,0],"1320":[0,0,0,0,0],"1321":[0,0,0,0],"1322":[0,0],"1323":[0,0],"1324":[0,0],"1325":[0,0],"1326":[0,0],"1327":[0,0,0],"1328":[0,0,0],"1329":[0,0],"1330":[0,0,0],"1331":[0,0],"1332":[0,0],"1333":[0,0],"1334":[0,0],"1335":[0,0],"1336":[0,0],"1337":[0,0],"1338":[0,0],"1339":[0,0],"1340":[0,0],"1341":[0,0],"1342":[0,0],"1343":[0,0],"1344":[0,0],"1345":[0,0],"1346":[0,0],"1347":[0,0],"1348":[0,0],"1349":[0,0],"1350":[0,0],"1351":[0,0],"1352":[0,0],"1353":[0,0,0],"1354":[0,0],"1355":[0,0],"1356":[0,0],"1357":[0,0],"1358":[0,0],"1359":[0,0],"1360":[0,0,0],"1361":[0,0],"1362":[0,0],"1363":[0,0],"1364":[0,0],"1365":[0,0],"1366":[0,0],"1367":[0,0],"1368":[0,0],"1369":[0,0,0],"1370":[0,0],"1371":[0,0],"1372":[0,0],"1373":[0,0],"1374":[0,0],"1375":[0,0],"1376":[0,0],"1377":[0,0],"1378":[0,0],"1379":[0,0,0],"1380":[0,0],"1381":[0,0],"1382":[0,0],"1383":[0,0],"1384":[0,0],"1385":[0,0],"1386":[0,0],"1387":[0,0,0],"1388":[0,0],"1389":[0,0],"1390":[0,0],"1391":[0,0],"1392":[0,0],"1393":[0,0],"1394":[0,0,0],"1395":[0,0],"1396":[0,0],"1397":[0,0,0],"1398":[0,0],"1399":[0,0,0],"1400":[0,0],"1401":[0,0],"1402":[0,0],"1403":[0,0],"1404":[0,0],"1405":[0,0],"1406":[0,0],"1407":[0,0,0],"1408":[0,0],"1409":[0,0],"1410":[0,0],"1411":[0,0],"1412":[0,0],"1413":[0,0],"1414":[0,0,0],"1415":[0,0],"1416":[0,0],"1417":[0,0],"1418":[0,0],"1419":[0,0],"1420":[0,0],"1421":[0,0],"1422":[0,0],"1423":[0,0],"1424":[0,0],"1425":[0,0],"1426":[0,0],"1427":[0,0],"1428":[0,0],"1429":[0,0],"1430":[0,0],"1431":[0,0],"1432":[0,0,0],"1433":[0,0],"1434":[0,0],"1435":[0,0,0],"1436":[0],"1437":[0,0],"1438":[0,0],"1439":[0,0,0],"1440":[0,0],"1441":[0,0],"1442":[0,0],"1443":[0,0],"1444":[0,0],"1445":[0,0],"1446":[0,0],"1447":[0,0],"1448":[0,0],"1449":[0,0],"1450":[0,0],"1451":[0,0],"1452":[0,0],"1453":[0,0],"1454":[0,0],"1455":[0,0],"1456":[0,0],"1457":[0,0],"1458":[0,0],"1459":[0,0],"1460":[0,0],"1461":[0,0],"1462":[0,0],"1463":[0,0],"1464":[0,0],"1465":[0,0],"1466":[0,0],"1467":[0,0],"1468":[0,0,0,0,0],"1469":[0,0],"1470":[0,0],"1471":[0,0],"1472":[0,0],"1473":[0,0],"1474":[0,0],"1475":[0,0],"1476":[0,0],"1477":[0,0],"1478":[0,0],"1479":[0,0,0],"1480":[0,0],"1481":[0],"1482":[0,0],"1483":[0,0],"1484":[0,0],"1485":[0],"1486":[0],"1487":[0],"1488":[0,0,0,0],"1489":[0,0],"1490":[0,0],"1491":[0],"1492":[0,0],"1493":[0,0],"1494":[0,0],"1495":[0,0],"1496":[0,0],"1497":[0,0],"1498":[0],"1499":[0,0],"1500":[0,0],"1501":[0,0],"1502":[0,0],"1503":[0,0],"1504":[0,0],"1505":[0,0],"1506":[0,0],"1507":[0,0],"1508":[0,0],"1509":[0,0,0,0,0,0],"1510":[0,0],"1511":[0,0],"1512":[0,0],"1513":[0,0],"1514":[0,0],"1515":[0,0],"1516":[0,0],"1517":[0,0],"1518":[0,0],"1519":[0,0],"1520":[0,0],"1521":[0,0,0,0],"1522":[0,0],"1523":[0,0],"1524":[0,0],"1525":[0,0],"1526":[0,0],"1527":[0,0],"1528":[0,0],"1529":[0,0],"1530":[0,0],"1531":[0,0],"1532":[0,0,0],"1533":[0,0],"1534":[0,0],"1535":[0,0],"1536":[0,0,0],"1537":[0,0],"1538":[0,0,0],"1539":[0,0,0],"1540":[0,0,0,0],"1541":[0,0],"1542":[0,0],"1543":[0,0],"1544":[0,0],"1545":[0,0,0],"1546":[0,0,0],"1547":[0,0,0],"1548":[0,0,0],"1549":[0,0,0],"1550":[0,0],"1551":[0,0,0,0,0],"1552":[0,0,0,0],"1553":[0],"1554":[0,0],"1555":[0,0],"1556":[0,0],"1557":[0,0],"1558":[0,0],"1559":[0,0],"1560":[0,0,0],"1561":[0,0],"1562":[0,0],"1563":[0,0],"1564":[0,0],"1565":[0,0],"1566":[0,0],"1567":[0,0],"1568":[0,0],"1569":[0,0,0],"1570":[0,0],"1571":[0,0],"1572":[0,0,0,0,0],"1573":[0,0],"1574":[0,0],"1575":[0,0],"1576":[0,0],"1577":[0,0],"1578":[0,0],"1579":[0,0],"1580":[0,0],"1581":[0,0],"1582":[0,0],"1583":[0,0,0],"1584":[0,0,0],"1585":[0,0,0],"1586":[0,0],"1587":[0,0],"1588":[0,0],"1589":[0,0],"1590":[0,0],"1591":[0,0],"1592":[0,0],"1593":[0,0],"1594":[0,0,0],"1595":[0,0],"1596":[0,0],"1597":[0,0],"1598":[0,0,0],"1599":[0,0],"1600":[0,0],"1601":[0,0],"1602":[0],"1603":[0],"1604":[0,0],"1605":[0,0],"1606":[0,0],"1607":[0,0],"1608":[0,0],"1609":[0,0],"1610":[0,0],"1611":[0,0],"1612":[0,0],"1613":[0,0],"1614":[0,0],"1615":[0,0],"1616":[0,0],"1617":[0,0],"1618":[0,0],"1619":[0,0],"1620":[0,0],"1621":[0,0],"1622":[0,0],"1623":[0,0],"1624":[0,0],"1625":[0,0],"1626":[0,0,0],"1627":[0,0],"1628":[0,0,0],"1629":[0,0],"1630":[0,0],"1631":[0,0],"1632":[0,0],"1633":[0,0],"1634":[0,0],"1635":[0,0],"1636":[0,0],"1637":[0,0],"1638":[0,0],"1639":[0,0],"1640":[0,0],"1641":[0,0],"1642":[0,0],"1643":[0,0],"1644":[0,0],"1645":[0,0,0],"1646":[0,0],"1647":[0,0],"1648":[0,0],"1649":[0,0],"1650":[0,0],"1651":[0,0],"1652":[0,0],"1653":[0,0],"1654":[0,0],"1655":[0,0],"1656":[0,0],"1657":[0,0],"1658":[0,0],"1659":[0],"1660":[0,0],"1661":[0,0],"1662":[0,0],"1663":[0,0],"1664":[0,0],"1665":[0],"1666":[0],"1667":[0,0],"1668":[0,0,0],"1669":[0,0],"1670":[0,0],"1671":[0,0],"1672":[0,0],"1673":[0,0],"1674":[0,0],"1675":[0,0],"1676":[0,0],"1677":[0],"1678":[0],"1679":[0,0],"1680":[0,0],"1681":[0,0],"1682":[0,0],"1683":[0,0],"1684":[0,0],"1685":[0,0],"1686":[0,0],"1687":[0,0],"1688":[0,0],"1689":[0,0],"1690":[0,0],"1691":[0,0],"1692":[0,0,0,0],"1693":[0,0],"1694":[0,0],"1695":[0,0],"1696":[0,0,0],"1697":[0,0],"1698":[0,0],"1699":[0,0,0],"1700":[0],"1701":[0],"1702":[0,0],"1703":[0,0],"1704":[0,0,0,0],"1705":[0,0],"1706":[0,0],"1707":[0,0],"1708":[0,0],"1709":[0,0],"1710":[0,0],"1711":[0,0],"1712":[0,0],"1713":[0,0],"1714":[0,0],"1715":[0,0,0],"1716":[0,0],"1717":[0,0,0],"1718":[0,0],"1719":[0,0],"1720":[0,0],"1721":[0,0],"1722":[0,0],"1723":[0,0],"1724":[0,0],"1725":[0,0,0,0],"1726":[0,0],"1727":[0,0],"1728":[0,0],"1729":[0,0],"1730":[0,0],"1731":[0,0],"1732":[0,0],"1733":[0,0,0],"1734":[0,0,0],"1735":[0,0],"1736":[0,0],"1737":[0,0],"1738":[0,0],"1739":[0,0],"1740":[0,0],"1741":[0,0],"1742":[0,0],"1743":[0,0],"1744":[0,0],"1745":[0,0],"1746":[0,0],"1747":[0,0],"1748":[0,0,0],"1749":[0,0,0],"1750":[0,0],"1751":[0,0,0],"1752":[0,0],"1753":[0,0],"1754":[0,0],"1755":[0,0,0,0,0,0,0],"1756":[0,0],"1757":[0,0],"1758":[0,0],"1759":[0,0],"1760":[0,0],"1761":[0,0,0],"1762":[0,0],"1763":[0,0],"1764":[0,0],"1765":[0,0],"1766":[0,0],"1767":[0,0],"1768":[0,0],"1769":[0,0],"1770":[0,0],"1771":[0,0],"1772":[0,0],"1773":[0,0],"1774":[0,0],"1775":[0,0],"1776":[0,0],"1777":[0,0],"1778":[0,0],"1779":[0,0],"1780":[0,0],"1781":[0,0],"1782":[0,0,0],"1783":[0,0],"1784":[0,0],"1785":[0,0],"1786":[0,0],"1787":[0,0],"1788":[0,0],"1789":[0,0],"1790":[0,0],"1791":[0,0,0,0],"1792":[0,0],"1793":[0,0],"1794":[0,0],"1795":[0,0],"1796":[0,0],"1797":[0,0,0],"1798":[0,0,0],"1799":[0,0],"1800":[0,0],"1801":[0,0],"1802":[0,0],"1803":[0,0],"1804":[0,0],"1805":[0,0],"1806":[0,0],"1807":[0,0],"1808":[0,0],"1809":[0,0],"1810":[0,0,0,0],"1811":[0,0],"1812":[0,0],"1813":[0,0],"1814":[0,0],"1815":[0,0,0],"1816":[0,0],"1817":[0,0],"1818":[0,0],"1819":[0,0],"1820":[0,0],"1821":[0,0,0],"1822":[0,0],"1823":[0,0],"1824":[0,0],"1825":[0,0],"1826":[0,0],"1827":[0,0],"1828":[0,0,0],"1829":[0,0],"1830":[0,0],"1831":[0,0],"1832":[0,0],"1833":[0,0],"1834":[0,0],"1835":[0,0],"1836":[0,0,0],"1837":[0,0],"1838":[0,0],"1839":[0,0],"1840":[0,0],"1841":[0,0],"1842":[0,0],"1843":[0,0],"1844":[0,0],"1845":[0,0],"1846":[0,0],"1847":[0,0],"1848":[0,0],"1849":[0,0],"1850":[0,0],"1851":[0,0],"1852":[0,0],"1853":[0,0],"1854":[0,0,0],"1855":[0,0],"1856":[0,0],"1857":[0,0,0],"1858":[0,0],"1859":[0,0,0],"1860":[0,0],"1861":[0,0],"1862":[0,0],"1863":[0,0],"1864":[0,0],"1865":[0,0],"1866":[0,0,0],"1867":[0,0],"1868":[0,0],"1869":[0,0,0,0,0],"1870":[0,0,0],"1871":[0,0],"1872":[0,0],"1873":[0,0,0],"1874":[0],"1875":[0,0],"1876":[0,0],"1877":[0,0],"1878":[0,0,0],"1879":[0,0],"1880":[0,0,0],"1881":[0,0],"1882":[0,0],"1883":[0,0],"1884":[0,0],"1885":[0,0,0],"1886":[0,0],"1887":[0,0],"1888":[0,0],"1889":[0,0],"1890":[0,0],"1891":[0,0],"1892":[0,0],"1893":[0,0],"1894":[0,0,0],"1895":[0,0],"1896":[0,0],"1897":[0,0],"1898":[0,0],"1899":[0,0],"1900":[0,0],"1901":[0,0],"1902":[0,0],"1903":[0,0],"1904":[0,0],"1905":[0,0],"1906":[0,0],"1907":[0,0],"1908":[0,0],"1909":[0,0],"1910":[0,0],"1911":[0,0],"1912":[0,0],"1913":[0,0],"1914":[0,0],"1915":[0,0],"1916":[0,0],"1917":[0,0],"1918":[0,0],"1919":[0,0],"1920":[0,0],"1921":[0,0,0],"1922":[0,0],"1923":[0,0],"1924":[0,0],"1925":[0,0],"1926":[0,0,0,0],"1927":[0,0],"1928":[0,0],"1929":[0,0],"1930":[0,0],"1931":[0,0],"1932":[0,0],"1933":[0,0],"1934":[0,0],"1935":[0,0],"1936":[0,0],"1937":[0,0],"1938":[0,0],"1939":[0,0],"1940":[0,0],"1941":[0,0,0],"1942":[0,0],"1943":[0,0],"1944":[0,0,0],"1945":[0,0],"1946":[0,0],"1947":[0,0],"1948":[0,0,0,0],"1949":[0,0],"1950":[0,0],"1951":[0,0],"1952":[0,0],"1953":[0,0],"1954":[0,0,0],"1955":[0,0],"1956":[0,0],"1957":[0,0],"1958":[0,0],"1959":[0,0],"1960":[0,0],"1961":[0,0],"1962":[0,0],"1963":[0,0],"1964":[0,0],"1965":[0,0],"1966":[0,0],"1967":[0,0],"1968":[0,0],"1969":[0,0],"1970":[0,0],"1971":[0,0],"1972":[0,0],"1973":[0,0],"1974":[0,0],"1975":[0,0],"1976":[0,0],"1977":[0,0],"1978":[0,0],"1979":[0,0],"1980":[0,0],"1981":[0,0],"1982":[0,0],"1983":[0,0],"1984":[0,0],"1985":[0,0],"1986":[0,0,0,0],"1987":[0,0],"1988":[0,0],"1989":[0,0],"1990":[0,0],"1991":[0,0],"1992":[0,0],"1993":[0,0],"1994":[0,0],"1995":[0,0],"1996":[0,0],"1997":[0,0,0],"1998":[0,0],"1999":[0,0],"2000":[0,0],"2001":[0,0],"2002":[0,0],"2003":[0,0],"2004":[0,0],"2005":[0,0],"2006":[0,0],"2007":[0,0],"2008":[0,0],"2009":[0,0],"2010":[0,0],"2011":[0,0],"2012":[0,0],"2013":[0,0],"2014":[0,0],"2015":[0,0,0,0],"2016":[0,0],"2017":[0,0],"2018":[0,0],"2019":[0,0],"2020":[0,0],"2021":[0,0],"2022":[0,0],"2023":[0,0],"2024":[0,0],"2025":[0,0],"2026":[0,0,0],"2027":[0,0],"2028":[0,0],"2029":[0,0],"2030":[0,0],"2031":[0,0,0,0,0,0],"2032":[0,0],"2033":[0,0],"2034":[0,0],"2035":[0,0],"2036":[0,0],"2037":[0,0],"2038":[0,0],"2039":[0,0],"2040":[0,0],"2041":[0,0],"2042":[0,0],"2043":[0,0],"2044":[0,0],"2045":[0,0],"2046":[0,0],"2047":[0,0],"2048":[0,0],"2049":[0,0],"2050":[0],"2051":[0,0],"2052":[0,0],"2053":[0,0],"2054":[0,0],"2055":[0,0],"2056":[0,0],"2057":[0,0,0],"2058":[0,0,0],"2059":[0,0],"2060":[0,0],"2061":[0,0],"2062":[0,0,0],"2063":[0,0],"2064":[0,0],"2065":[0,0],"2066":[0,0],"2067":[0,0],"2068":[0,0],"2069":[0,0],"2070":[0,0],"2071":[0,0,0],"2072":[0,0],"2073":[0,0],"2074":[0,0],"2075":[0,0],"2076":[0,0],"2077":[0,0],"2078":[0,0],"2079":[0,0],"2080":[0,0],"2081":[0,0],"2082":[0,0],"2083":[0,0],"2084":[0,0],"2085":[0],"2086":[0,0],"2087":[0,0],"2088":[0,0],"2089":[0,0,0],"2090":[0,0,0],"2091":[0,0,0],"2092":[0,0,0],"2093":[0,0],"2094":[0,0],"2095":[0,0],"2096":[0,0],"2097":[0,0],"2098":[0,0],"2099":[0,0,0],"2100":[0,0],"2101":[0,0],"2102":[0,0],"2103":[0,0],"2104":[0,0],"2105":[0,0],"2106":[0,0],"2107":[0,0],"2108":[0],"2109":[0,0,0],"2110":[0,0],"2111":[0,0],"2112":[0,0],"2113":[0,0],"2114":[0,0],"2115":[0,0],"2116":[0,0],"2117":[0,0],"2118":[0,0],"2119":[0,0],"2120":[0,0,0,0],"2121":[0,0],"2122":[0,0],"2123":[0,0],"2124":[0,0],"2125":[0,0],"2126":[0,0,0,0],"2127":[0,0],"2128":[0,0],"2129":[0,0],"2130":[0,0],"2131":[0,0],"2132":[0,0],"2133":[0,0],"2134":[0,0],"2135":[0,0],"2136":[0,0],"2137":[0,0],"2138":[0,0],"2139":[0,0],"2140":[0,0],"2141":[0,0],"2142":[0,0,0],"2143":[0,0,0],"2144":[0,0],"2145":[0,0,0],"2146":[0,0],"2147":[0,0],"2148":[0,0,0],"2149":[0,0,0],"2150":[0,0],"2151":[0,0],"2152":[0,0],"2153":[0,0],"2154":[0,0],"2155":[0,0],"2156":[0,0],"2157":[0,0],"2158":[0,0,0],"2159":[0,0],"2160":[0,0],"2161":[0,0],"2162":[0,0],"2163":[0,0],"2164":[0,0,0],"2165":[0,0],"2166":[0,0],"2167":[0,0],"2168":[0,0],"2169":[0,0],"2170":[0,0],"2171":[0,0],"2172":[0,0],"2173":[0,0],"2174":[0,0],"2175":[0,0],"2176":[0,0],"2177":[0,0,0],"2178":[0,0,0],"2179":[0,0,0],"2180":[0,0],"2181":[0,0],"2182":[0,0],"2183":[0,0],"2184":[0,0,0],"2185":[0,0,0],"2186":[0,0],"2187":[0,0],"2188":[0,0,0],"2189":[0,0,0],"2190":[0,0],"2191":[0,0],"2192":[0,0],"2193":[0,0],"2194":[0,0],"2195":[0,0]},inputSourceMap:{version:3,sources:["node_modules/@kurkle/color/dist/color.esm.js","node_modules/chart.js/dist/chunks/helpers.dataset.js","node_modules/chart.js/dist/chart.js","node_modules/es-toolkit/dist/predicate/isPlainObject.mjs","node_modules/es-toolkit/dist/_internal/isUnsafeProperty.mjs","node_modules/es-toolkit/dist/object/merge.mjs","node_modules/ng2-charts/fesm2022/ng2-charts.mjs"],sourcesContent:["/*!\n * @kurkle/color v0.3.4\n * https://github.com/kurkle/color#readme\n * (c) 2024 Jukka Kurkela\n * Released under the MIT License\n */\nfunction round(v) {\n return v + 0.5 | 0;\n}\nconst lim = (v, l, h) => Math.max(Math.min(v, h), l);\nfunction p2b(v) {\n return lim(round(v * 2.55), 0, 255);\n}\nfunction b2p(v) {\n return lim(round(v / 2.55), 0, 100);\n}\nfunction n2b(v) {\n return lim(round(v * 255), 0, 255);\n}\nfunction b2n(v) {\n return lim(round(v / 2.55) / 100, 0, 1);\n}\nfunction n2p(v) {\n return lim(round(v * 100), 0, 100);\n}\nconst map$1 = {\n 0: 0,\n 1: 1,\n 2: 2,\n 3: 3,\n 4: 4,\n 5: 5,\n 6: 6,\n 7: 7,\n 8: 8,\n 9: 9,\n A: 10,\n B: 11,\n C: 12,\n D: 13,\n E: 14,\n F: 15,\n a: 10,\n b: 11,\n c: 12,\n d: 13,\n e: 14,\n f: 15\n};\nconst hex = [...'0123456789ABCDEF'];\nconst h1 = b => hex[b & 0xF];\nconst h2 = b => hex[(b & 0xF0) >> 4] + hex[b & 0xF];\nconst eq = b => (b & 0xF0) >> 4 === (b & 0xF);\nconst isShort = v => eq(v.r) && eq(v.g) && eq(v.b) && eq(v.a);\nfunction hexParse(str) {\n var len = str.length;\n var ret;\n if (str[0] === '#') {\n if (len === 4 || len === 5) {\n ret = {\n r: 255 & map$1[str[1]] * 17,\n g: 255 & map$1[str[2]] * 17,\n b: 255 & map$1[str[3]] * 17,\n a: len === 5 ? map$1[str[4]] * 17 : 255\n };\n } else if (len === 7 || len === 9) {\n ret = {\n r: map$1[str[1]] << 4 | map$1[str[2]],\n g: map$1[str[3]] << 4 | map$1[str[4]],\n b: map$1[str[5]] << 4 | map$1[str[6]],\n a: len === 9 ? map$1[str[7]] << 4 | map$1[str[8]] : 255\n };\n }\n }\n return ret;\n}\nconst alpha = (a, f) => a < 255 ? f(a) : '';\nfunction hexString(v) {\n var f = isShort(v) ? h1 : h2;\n return v ? '#' + f(v.r) + f(v.g) + f(v.b) + alpha(v.a, f) : undefined;\n}\nconst HUE_RE = /^(hsla?|hwb|hsv)\\(\\s*([-+.e\\d]+)(?:deg)?[\\s,]+([-+.e\\d]+)%[\\s,]+([-+.e\\d]+)%(?:[\\s,]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\nfunction hsl2rgbn(h, s, l) {\n const a = s * Math.min(l, 1 - l);\n const f = (n, k = (n + h / 30) % 12) => l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1);\n return [f(0), f(8), f(4)];\n}\nfunction hsv2rgbn(h, s, v) {\n const f = (n, k = (n + h / 60) % 6) => v - v * s * Math.max(Math.min(k, 4 - k, 1), 0);\n return [f(5), f(3), f(1)];\n}\nfunction hwb2rgbn(h, w, b) {\n const rgb = hsl2rgbn(h, 1, 0.5);\n let i;\n if (w + b > 1) {\n i = 1 / (w + b);\n w *= i;\n b *= i;\n }\n for (i = 0; i < 3; i++) {\n rgb[i] *= 1 - w - b;\n rgb[i] += w;\n }\n return rgb;\n}\nfunction hueValue(r, g, b, d, max) {\n if (r === max) {\n return (g - b) / d + (g < b ? 6 : 0);\n }\n if (g === max) {\n return (b - r) / d + 2;\n }\n return (r - g) / d + 4;\n}\nfunction rgb2hsl(v) {\n const range = 255;\n const r = v.r / range;\n const g = v.g / range;\n const b = v.b / range;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const l = (max + min) / 2;\n let h, s, d;\n if (max !== min) {\n d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n h = hueValue(r, g, b, d, max);\n h = h * 60 + 0.5;\n }\n return [h | 0, s || 0, l];\n}\nfunction calln(f, a, b, c) {\n return (Array.isArray(a) ? f(a[0], a[1], a[2]) : f(a, b, c)).map(n2b);\n}\nfunction hsl2rgb(h, s, l) {\n return calln(hsl2rgbn, h, s, l);\n}\nfunction hwb2rgb(h, w, b) {\n return calln(hwb2rgbn, h, w, b);\n}\nfunction hsv2rgb(h, s, v) {\n return calln(hsv2rgbn, h, s, v);\n}\nfunction hue(h) {\n return (h % 360 + 360) % 360;\n}\nfunction hueParse(str) {\n const m = HUE_RE.exec(str);\n let a = 255;\n let v;\n if (!m) {\n return;\n }\n if (m[5] !== v) {\n a = m[6] ? p2b(+m[5]) : n2b(+m[5]);\n }\n const h = hue(+m[2]);\n const p1 = +m[3] / 100;\n const p2 = +m[4] / 100;\n if (m[1] === 'hwb') {\n v = hwb2rgb(h, p1, p2);\n } else if (m[1] === 'hsv') {\n v = hsv2rgb(h, p1, p2);\n } else {\n v = hsl2rgb(h, p1, p2);\n }\n return {\n r: v[0],\n g: v[1],\n b: v[2],\n a: a\n };\n}\nfunction rotate(v, deg) {\n var h = rgb2hsl(v);\n h[0] = hue(h[0] + deg);\n h = hsl2rgb(h);\n v.r = h[0];\n v.g = h[1];\n v.b = h[2];\n}\nfunction hslString(v) {\n if (!v) {\n return;\n }\n const a = rgb2hsl(v);\n const h = a[0];\n const s = n2p(a[1]);\n const l = n2p(a[2]);\n return v.a < 255 ? `hsla(${h}, ${s}%, ${l}%, ${b2n(v.a)})` : `hsl(${h}, ${s}%, ${l}%)`;\n}\nconst map = {\n x: 'dark',\n Z: 'light',\n Y: 're',\n X: 'blu',\n W: 'gr',\n V: 'medium',\n U: 'slate',\n A: 'ee',\n T: 'ol',\n S: 'or',\n B: 'ra',\n C: 'lateg',\n D: 'ights',\n R: 'in',\n Q: 'turquois',\n E: 'hi',\n P: 'ro',\n O: 'al',\n N: 'le',\n M: 'de',\n L: 'yello',\n F: 'en',\n K: 'ch',\n G: 'arks',\n H: 'ea',\n I: 'ightg',\n J: 'wh'\n};\nconst names$1 = {\n OiceXe: 'f0f8ff',\n antiquewEte: 'faebd7',\n aqua: 'ffff',\n aquamarRe: '7fffd4',\n azuY: 'f0ffff',\n beige: 'f5f5dc',\n bisque: 'ffe4c4',\n black: '0',\n blanKedOmond: 'ffebcd',\n Xe: 'ff',\n XeviTet: '8a2be2',\n bPwn: 'a52a2a',\n burlywood: 'deb887',\n caMtXe: '5f9ea0',\n KartYuse: '7fff00',\n KocTate: 'd2691e',\n cSO: 'ff7f50',\n cSnflowerXe: '6495ed',\n cSnsilk: 'fff8dc',\n crimson: 'dc143c',\n cyan: 'ffff',\n xXe: '8b',\n xcyan: '8b8b',\n xgTMnPd: 'b8860b',\n xWay: 'a9a9a9',\n xgYF: '6400',\n xgYy: 'a9a9a9',\n xkhaki: 'bdb76b',\n xmagFta: '8b008b',\n xTivegYF: '556b2f',\n xSange: 'ff8c00',\n xScEd: '9932cc',\n xYd: '8b0000',\n xsOmon: 'e9967a',\n xsHgYF: '8fbc8f',\n xUXe: '483d8b',\n xUWay: '2f4f4f',\n xUgYy: '2f4f4f',\n xQe: 'ced1',\n xviTet: '9400d3',\n dAppRk: 'ff1493',\n dApskyXe: 'bfff',\n dimWay: '696969',\n dimgYy: '696969',\n dodgerXe: '1e90ff',\n fiYbrick: 'b22222',\n flSOwEte: 'fffaf0',\n foYstWAn: '228b22',\n fuKsia: 'ff00ff',\n gaRsbSo: 'dcdcdc',\n ghostwEte: 'f8f8ff',\n gTd: 'ffd700',\n gTMnPd: 'daa520',\n Way: '808080',\n gYF: '8000',\n gYFLw: 'adff2f',\n gYy: '808080',\n honeyMw: 'f0fff0',\n hotpRk: 'ff69b4',\n RdianYd: 'cd5c5c',\n Rdigo: '4b0082',\n ivSy: 'fffff0',\n khaki: 'f0e68c',\n lavFMr: 'e6e6fa',\n lavFMrXsh: 'fff0f5',\n lawngYF: '7cfc00',\n NmoncEffon: 'fffacd',\n ZXe: 'add8e6',\n ZcSO: 'f08080',\n Zcyan: 'e0ffff',\n ZgTMnPdLw: 'fafad2',\n ZWay: 'd3d3d3',\n ZgYF: '90ee90',\n ZgYy: 'd3d3d3',\n ZpRk: 'ffb6c1',\n ZsOmon: 'ffa07a',\n ZsHgYF: '20b2aa',\n ZskyXe: '87cefa',\n ZUWay: '778899',\n ZUgYy: '778899',\n ZstAlXe: 'b0c4de',\n ZLw: 'ffffe0',\n lime: 'ff00',\n limegYF: '32cd32',\n lRF: 'faf0e6',\n magFta: 'ff00ff',\n maPon: '800000',\n VaquamarRe: '66cdaa',\n VXe: 'cd',\n VScEd: 'ba55d3',\n VpurpN: '9370db',\n VsHgYF: '3cb371',\n VUXe: '7b68ee',\n VsprRggYF: 'fa9a',\n VQe: '48d1cc',\n VviTetYd: 'c71585',\n midnightXe: '191970',\n mRtcYam: 'f5fffa',\n mistyPse: 'ffe4e1',\n moccasR: 'ffe4b5',\n navajowEte: 'ffdead',\n navy: '80',\n Tdlace: 'fdf5e6',\n Tive: '808000',\n TivedBb: '6b8e23',\n Sange: 'ffa500',\n SangeYd: 'ff4500',\n ScEd: 'da70d6',\n pOegTMnPd: 'eee8aa',\n pOegYF: '98fb98',\n pOeQe: 'afeeee',\n pOeviTetYd: 'db7093',\n papayawEp: 'ffefd5',\n pHKpuff: 'ffdab9',\n peru: 'cd853f',\n pRk: 'ffc0cb',\n plum: 'dda0dd',\n powMrXe: 'b0e0e6',\n purpN: '800080',\n YbeccapurpN: '663399',\n Yd: 'ff0000',\n Psybrown: 'bc8f8f',\n PyOXe: '4169e1',\n saddNbPwn: '8b4513',\n sOmon: 'fa8072',\n sandybPwn: 'f4a460',\n sHgYF: '2e8b57',\n sHshell: 'fff5ee',\n siFna: 'a0522d',\n silver: 'c0c0c0',\n skyXe: '87ceeb',\n UXe: '6a5acd',\n UWay: '708090',\n UgYy: '708090',\n snow: 'fffafa',\n sprRggYF: 'ff7f',\n stAlXe: '4682b4',\n tan: 'd2b48c',\n teO: '8080',\n tEstN: 'd8bfd8',\n tomato: 'ff6347',\n Qe: '40e0d0',\n viTet: 'ee82ee',\n JHt: 'f5deb3',\n wEte: 'ffffff',\n wEtesmoke: 'f5f5f5',\n Lw: 'ffff00',\n LwgYF: '9acd32'\n};\nfunction unpack() {\n const unpacked = {};\n const keys = Object.keys(names$1);\n const tkeys = Object.keys(map);\n let i, j, k, ok, nk;\n for (i = 0; i < keys.length; i++) {\n ok = nk = keys[i];\n for (j = 0; j < tkeys.length; j++) {\n k = tkeys[j];\n nk = nk.replace(k, map[k]);\n }\n k = parseInt(names$1[ok], 16);\n unpacked[nk] = [k >> 16 & 0xFF, k >> 8 & 0xFF, k & 0xFF];\n }\n return unpacked;\n}\nlet names;\nfunction nameParse(str) {\n if (!names) {\n names = unpack();\n names.transparent = [0, 0, 0, 0];\n }\n const a = names[str.toLowerCase()];\n return a && {\n r: a[0],\n g: a[1],\n b: a[2],\n a: a.length === 4 ? a[3] : 255\n };\n}\nconst RGB_RE = /^rgba?\\(\\s*([-+.\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?(?:[\\s,/]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\nfunction rgbParse(str) {\n const m = RGB_RE.exec(str);\n let a = 255;\n let r, g, b;\n if (!m) {\n return;\n }\n if (m[7] !== r) {\n const v = +m[7];\n a = m[8] ? p2b(v) : lim(v * 255, 0, 255);\n }\n r = +m[1];\n g = +m[3];\n b = +m[5];\n r = 255 & (m[2] ? p2b(r) : lim(r, 0, 255));\n g = 255 & (m[4] ? p2b(g) : lim(g, 0, 255));\n b = 255 & (m[6] ? p2b(b) : lim(b, 0, 255));\n return {\n r: r,\n g: g,\n b: b,\n a: a\n };\n}\nfunction rgbString(v) {\n return v && (v.a < 255 ? `rgba(${v.r}, ${v.g}, ${v.b}, ${b2n(v.a)})` : `rgb(${v.r}, ${v.g}, ${v.b})`);\n}\nconst to = v => v <= 0.0031308 ? v * 12.92 : Math.pow(v, 1.0 / 2.4) * 1.055 - 0.055;\nconst from = v => v <= 0.04045 ? v / 12.92 : Math.pow((v + 0.055) / 1.055, 2.4);\nfunction interpolate(rgb1, rgb2, t) {\n const r = from(b2n(rgb1.r));\n const g = from(b2n(rgb1.g));\n const b = from(b2n(rgb1.b));\n return {\n r: n2b(to(r + t * (from(b2n(rgb2.r)) - r))),\n g: n2b(to(g + t * (from(b2n(rgb2.g)) - g))),\n b: n2b(to(b + t * (from(b2n(rgb2.b)) - b))),\n a: rgb1.a + t * (rgb2.a - rgb1.a)\n };\n}\nfunction modHSL(v, i, ratio) {\n if (v) {\n let tmp = rgb2hsl(v);\n tmp[i] = Math.max(0, Math.min(tmp[i] + tmp[i] * ratio, i === 0 ? 360 : 1));\n tmp = hsl2rgb(tmp);\n v.r = tmp[0];\n v.g = tmp[1];\n v.b = tmp[2];\n }\n}\nfunction clone(v, proto) {\n return v ? Object.assign(proto || {}, v) : v;\n}\nfunction fromObject(input) {\n var v = {\n r: 0,\n g: 0,\n b: 0,\n a: 255\n };\n if (Array.isArray(input)) {\n if (input.length >= 3) {\n v = {\n r: input[0],\n g: input[1],\n b: input[2],\n a: 255\n };\n if (input.length > 3) {\n v.a = n2b(input[3]);\n }\n }\n } else {\n v = clone(input, {\n r: 0,\n g: 0,\n b: 0,\n a: 1\n });\n v.a = n2b(v.a);\n }\n return v;\n}\nfunction functionParse(str) {\n if (str.charAt(0) === 'r') {\n return rgbParse(str);\n }\n return hueParse(str);\n}\nclass Color {\n constructor(input) {\n if (input instanceof Color) {\n return input;\n }\n const type = typeof input;\n let v;\n if (type === 'object') {\n v = fromObject(input);\n } else if (type === 'string') {\n v = hexParse(input) || nameParse(input) || functionParse(input);\n }\n this._rgb = v;\n this._valid = !!v;\n }\n get valid() {\n return this._valid;\n }\n get rgb() {\n var v = clone(this._rgb);\n if (v) {\n v.a = b2n(v.a);\n }\n return v;\n }\n set rgb(obj) {\n this._rgb = fromObject(obj);\n }\n rgbString() {\n return this._valid ? rgbString(this._rgb) : undefined;\n }\n hexString() {\n return this._valid ? hexString(this._rgb) : undefined;\n }\n hslString() {\n return this._valid ? hslString(this._rgb) : undefined;\n }\n mix(color, weight) {\n if (color) {\n const c1 = this.rgb;\n const c2 = color.rgb;\n let w2;\n const p = weight === w2 ? 0.5 : weight;\n const w = 2 * p - 1;\n const a = c1.a - c2.a;\n const w1 = ((w * a === -1 ? w : (w + a) / (1 + w * a)) + 1) / 2.0;\n w2 = 1 - w1;\n c1.r = 0xFF & w1 * c1.r + w2 * c2.r + 0.5;\n c1.g = 0xFF & w1 * c1.g + w2 * c2.g + 0.5;\n c1.b = 0xFF & w1 * c1.b + w2 * c2.b + 0.5;\n c1.a = p * c1.a + (1 - p) * c2.a;\n this.rgb = c1;\n }\n return this;\n }\n interpolate(color, t) {\n if (color) {\n this._rgb = interpolate(this._rgb, color._rgb, t);\n }\n return this;\n }\n clone() {\n return new Color(this.rgb);\n }\n alpha(a) {\n this._rgb.a = n2b(a);\n return this;\n }\n clearer(ratio) {\n const rgb = this._rgb;\n rgb.a *= 1 - ratio;\n return this;\n }\n greyscale() {\n const rgb = this._rgb;\n const val = round(rgb.r * 0.3 + rgb.g * 0.59 + rgb.b * 0.11);\n rgb.r = rgb.g = rgb.b = val;\n return this;\n }\n opaquer(ratio) {\n const rgb = this._rgb;\n rgb.a *= 1 + ratio;\n return this;\n }\n negate() {\n const v = this._rgb;\n v.r = 255 - v.r;\n v.g = 255 - v.g;\n v.b = 255 - v.b;\n return this;\n }\n lighten(ratio) {\n modHSL(this._rgb, 2, ratio);\n return this;\n }\n darken(ratio) {\n modHSL(this._rgb, 2, -ratio);\n return this;\n }\n saturate(ratio) {\n modHSL(this._rgb, 1, ratio);\n return this;\n }\n desaturate(ratio) {\n modHSL(this._rgb, 1, -ratio);\n return this;\n }\n rotate(deg) {\n rotate(this._rgb, deg);\n return this;\n }\n}\nfunction index_esm(input) {\n return new Color(input);\n}\nexport { Color, b2n, b2p, index_esm as default, hexParse, hexString, hsl2rgb, hslString, hsv2rgb, hueParse, hwb2rgb, lim, n2b, n2p, nameParse, p2b, rgb2hsl, rgbParse, rgbString, rotate, round };","/*!\n * Chart.js v4.5.1\n * https://www.chartjs.org\n * (c) 2025 Chart.js Contributors\n * Released under the MIT License\n */\nimport { Color } from '@kurkle/color';\n\n/**\n * @namespace Chart.helpers\n */ /**\n * An empty function that can be used, for example, for optional callback.\n */\nfunction noop() {\n /* noop */}\n/**\n * Returns a unique id, sequentially generated from a global variable.\n */\nconst uid = (() => {\n let id = 0;\n return () => id++;\n})();\n/**\n * Returns true if `value` is neither null nor undefined, else returns false.\n * @param value - The value to test.\n * @since 2.7.0\n */\nfunction isNullOrUndef(value) {\n return value === null || value === undefined;\n}\n/**\n * Returns true if `value` is an array (including typed arrays), else returns false.\n * @param value - The value to test.\n * @function\n */\nfunction isArray(value) {\n if (Array.isArray && Array.isArray(value)) {\n return true;\n }\n const type = Object.prototype.toString.call(value);\n if (type.slice(0, 7) === '[object' && type.slice(-6) === 'Array]') {\n return true;\n }\n return false;\n}\n/**\n * Returns true if `value` is an object (excluding null), else returns false.\n * @param value - The value to test.\n * @since 2.7.0\n */\nfunction isObject(value) {\n return value !== null && Object.prototype.toString.call(value) === '[object Object]';\n}\n/**\n * Returns true if `value` is a finite number, else returns false\n * @param value - The value to test.\n */\nfunction isNumberFinite(value) {\n return (typeof value === 'number' || value instanceof Number) && isFinite(+value);\n}\n/**\n * Returns `value` if finite, else returns `defaultValue`.\n * @param value - The value to return if defined.\n * @param defaultValue - The value to return if `value` is not finite.\n */\nfunction finiteOrDefault(value, defaultValue) {\n return isNumberFinite(value) ? value : defaultValue;\n}\n/**\n * Returns `value` if defined, else returns `defaultValue`.\n * @param value - The value to return if defined.\n * @param defaultValue - The value to return if `value` is undefined.\n */\nfunction valueOrDefault(value, defaultValue) {\n return typeof value === 'undefined' ? defaultValue : value;\n}\nconst toPercentage = (value, dimension) => typeof value === 'string' && value.endsWith('%') ? parseFloat(value) / 100 : +value / dimension;\nconst toDimension = (value, dimension) => typeof value === 'string' && value.endsWith('%') ? parseFloat(value) / 100 * dimension : +value;\n/**\n * Calls `fn` with the given `args` in the scope defined by `thisArg` and returns the\n * value returned by `fn`. If `fn` is not a function, this method returns undefined.\n * @param fn - The function to call.\n * @param args - The arguments with which `fn` should be called.\n * @param [thisArg] - The value of `this` provided for the call to `fn`.\n */\nfunction callback(fn, args, thisArg) {\n if (fn && typeof fn.call === 'function') {\n return fn.apply(thisArg, args);\n }\n}\nfunction each(loopable, fn, thisArg, reverse) {\n let i, len, keys;\n if (isArray(loopable)) {\n len = loopable.length;\n if (reverse) {\n for (i = len - 1; i >= 0; i--) {\n fn.call(thisArg, loopable[i], i);\n }\n } else {\n for (i = 0; i < len; i++) {\n fn.call(thisArg, loopable[i], i);\n }\n }\n } else if (isObject(loopable)) {\n keys = Object.keys(loopable);\n len = keys.length;\n for (i = 0; i < len; i++) {\n fn.call(thisArg, loopable[keys[i]], keys[i]);\n }\n }\n}\n/**\n * Returns true if the `a0` and `a1` arrays have the same content, else returns false.\n * @param a0 - The array to compare\n * @param a1 - The array to compare\n * @private\n */\nfunction _elementsEqual(a0, a1) {\n let i, ilen, v0, v1;\n if (!a0 || !a1 || a0.length !== a1.length) {\n return false;\n }\n for (i = 0, ilen = a0.length; i < ilen; ++i) {\n v0 = a0[i];\n v1 = a1[i];\n if (v0.datasetIndex !== v1.datasetIndex || v0.index !== v1.index) {\n return false;\n }\n }\n return true;\n}\n/**\n * Returns a deep copy of `source` without keeping references on objects and arrays.\n * @param source - The value to clone.\n */\nfunction clone(source) {\n if (isArray(source)) {\n return source.map(clone);\n }\n if (isObject(source)) {\n const target = Object.create(null);\n const keys = Object.keys(source);\n const klen = keys.length;\n let k = 0;\n for (; k < klen; ++k) {\n target[keys[k]] = clone(source[keys[k]]);\n }\n return target;\n }\n return source;\n}\nfunction isValidKey(key) {\n return ['__proto__', 'prototype', 'constructor'].indexOf(key) === -1;\n}\n/**\n * The default merger when Chart.helpers.merge is called without merger option.\n * Note(SB): also used by mergeConfig and mergeScaleConfig as fallback.\n * @private\n */\nfunction _merger(key, target, source, options) {\n if (!isValidKey(key)) {\n return;\n }\n const tval = target[key];\n const sval = source[key];\n if (isObject(tval) && isObject(sval)) {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n merge(tval, sval, options);\n } else {\n target[key] = clone(sval);\n }\n}\nfunction merge(target, source, options) {\n const sources = isArray(source) ? source : [source];\n const ilen = sources.length;\n if (!isObject(target)) {\n return target;\n }\n options = options || {};\n const merger = options.merger || _merger;\n let current;\n for (let i = 0; i < ilen; ++i) {\n current = sources[i];\n if (!isObject(current)) {\n continue;\n }\n const keys = Object.keys(current);\n for (let k = 0, klen = keys.length; k < klen; ++k) {\n merger(keys[k], target, current, options);\n }\n }\n return target;\n}\nfunction mergeIf(target, source) {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n return merge(target, source, {\n merger: _mergerIf\n });\n}\n/**\n * Merges source[key] in target[key] only if target[key] is undefined.\n * @private\n */\nfunction _mergerIf(key, target, source) {\n if (!isValidKey(key)) {\n return;\n }\n const tval = target[key];\n const sval = source[key];\n if (isObject(tval) && isObject(sval)) {\n mergeIf(tval, sval);\n } else if (!Object.prototype.hasOwnProperty.call(target, key)) {\n target[key] = clone(sval);\n }\n}\n/**\n * @private\n */\nfunction _deprecated(scope, value, previous, current) {\n if (value !== undefined) {\n console.warn(scope + ': \"' + previous + '\" is deprecated. Please use \"' + current + '\" instead');\n }\n}\n// resolveObjectKey resolver cache\nconst keyResolvers = {\n // Chart.helpers.core resolveObjectKey should resolve empty key to root object\n '': v => v,\n // default resolvers\n x: o => o.x,\n y: o => o.y\n};\n/**\n * @private\n */\nfunction _splitKey(key) {\n const parts = key.split('.');\n const keys = [];\n let tmp = '';\n for (const part of parts) {\n tmp += part;\n if (tmp.endsWith('\\\\')) {\n tmp = tmp.slice(0, -1) + '.';\n } else {\n keys.push(tmp);\n tmp = '';\n }\n }\n return keys;\n}\nfunction _getKeyResolver(key) {\n const keys = _splitKey(key);\n return obj => {\n for (const k of keys) {\n if (k === '') {\n break;\n }\n obj = obj && obj[k];\n }\n return obj;\n };\n}\nfunction resolveObjectKey(obj, key) {\n const resolver = keyResolvers[key] || (keyResolvers[key] = _getKeyResolver(key));\n return resolver(obj);\n}\n/**\n * @private\n */\nfunction _capitalize(str) {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\nconst defined = value => typeof value !== 'undefined';\nconst isFunction = value => typeof value === 'function';\n// Adapted from https://stackoverflow.com/questions/31128855/comparing-ecma6-sets-for-equality#31129384\nconst setsEqual = (a, b) => {\n if (a.size !== b.size) {\n return false;\n }\n for (const item of a) {\n if (!b.has(item)) {\n return false;\n }\n }\n return true;\n};\n/**\n * @param e - The event\n * @private\n */\nfunction _isClickEvent(e) {\n return e.type === 'mouseup' || e.type === 'click' || e.type === 'contextmenu';\n}\n\n/**\n * @alias Chart.helpers.math\n * @namespace\n */\nconst PI = Math.PI;\nconst TAU = 2 * PI;\nconst PITAU = TAU + PI;\nconst INFINITY = Number.POSITIVE_INFINITY;\nconst RAD_PER_DEG = PI / 180;\nconst HALF_PI = PI / 2;\nconst QUARTER_PI = PI / 4;\nconst TWO_THIRDS_PI = PI * 2 / 3;\nconst log10 = Math.log10;\nconst sign = Math.sign;\nfunction almostEquals(x, y, epsilon) {\n return Math.abs(x - y) < epsilon;\n}\n/**\n * Implementation of the nice number algorithm used in determining where axis labels will go\n */\nfunction niceNum(range) {\n const roundedRange = Math.round(range);\n range = almostEquals(range, roundedRange, range / 1000) ? roundedRange : range;\n const niceRange = Math.pow(10, Math.floor(log10(range)));\n const fraction = range / niceRange;\n const niceFraction = fraction <= 1 ? 1 : fraction <= 2 ? 2 : fraction <= 5 ? 5 : 10;\n return niceFraction * niceRange;\n}\n/**\n * Returns an array of factors sorted from 1 to sqrt(value)\n * @private\n */\nfunction _factorize(value) {\n const result = [];\n const sqrt = Math.sqrt(value);\n let i;\n for (i = 1; i < sqrt; i++) {\n if (value % i === 0) {\n result.push(i);\n result.push(value / i);\n }\n }\n if (sqrt === (sqrt | 0)) {\n result.push(sqrt);\n }\n result.sort((a, b) => a - b).pop();\n return result;\n}\n/**\n * Verifies that attempting to coerce n to string or number won't throw a TypeError.\n */\nfunction isNonPrimitive(n) {\n return typeof n === 'symbol' || typeof n === 'object' && n !== null && !(Symbol.toPrimitive in n || 'toString' in n || 'valueOf' in n);\n}\nfunction isNumber(n) {\n return !isNonPrimitive(n) && !isNaN(parseFloat(n)) && isFinite(n);\n}\nfunction almostWhole(x, epsilon) {\n const rounded = Math.round(x);\n return rounded - epsilon <= x && rounded + epsilon >= x;\n}\n/**\n * @private\n */\nfunction _setMinAndMaxByKey(array, target, property) {\n let i, ilen, value;\n for (i = 0, ilen = array.length; i < ilen; i++) {\n value = array[i][property];\n if (!isNaN(value)) {\n target.min = Math.min(target.min, value);\n target.max = Math.max(target.max, value);\n }\n }\n}\nfunction toRadians(degrees) {\n return degrees * (PI / 180);\n}\nfunction toDegrees(radians) {\n return radians * (180 / PI);\n}\n/**\n * Returns the number of decimal places\n * i.e. the number of digits after the decimal point, of the value of this Number.\n * @param x - A number.\n * @returns The number of decimal places.\n * @private\n */\nfunction _decimalPlaces(x) {\n if (!isNumberFinite(x)) {\n return;\n }\n let e = 1;\n let p = 0;\n while (Math.round(x * e) / e !== x) {\n e *= 10;\n p++;\n }\n return p;\n}\n// Gets the angle from vertical upright to the point about a centre.\nfunction getAngleFromPoint(centrePoint, anglePoint) {\n const distanceFromXCenter = anglePoint.x - centrePoint.x;\n const distanceFromYCenter = anglePoint.y - centrePoint.y;\n const radialDistanceFromCenter = Math.sqrt(distanceFromXCenter * distanceFromXCenter + distanceFromYCenter * distanceFromYCenter);\n let angle = Math.atan2(distanceFromYCenter, distanceFromXCenter);\n if (angle < -0.5 * PI) {\n angle += TAU; // make sure the returned angle is in the range of (-PI/2, 3PI/2]\n }\n return {\n angle,\n distance: radialDistanceFromCenter\n };\n}\nfunction distanceBetweenPoints(pt1, pt2) {\n return Math.sqrt(Math.pow(pt2.x - pt1.x, 2) + Math.pow(pt2.y - pt1.y, 2));\n}\n/**\n * Shortest distance between angles, in either direction.\n * @private\n */\nfunction _angleDiff(a, b) {\n return (a - b + PITAU) % TAU - PI;\n}\n/**\n * Normalize angle to be between 0 and 2*PI\n * @private\n */\nfunction _normalizeAngle(a) {\n return (a % TAU + TAU) % TAU;\n}\n/**\n * @private\n */\nfunction _angleBetween(angle, start, end, sameAngleIsFullCircle) {\n const a = _normalizeAngle(angle);\n const s = _normalizeAngle(start);\n const e = _normalizeAngle(end);\n const angleToStart = _normalizeAngle(s - a);\n const angleToEnd = _normalizeAngle(e - a);\n const startToAngle = _normalizeAngle(a - s);\n const endToAngle = _normalizeAngle(a - e);\n return a === s || a === e || sameAngleIsFullCircle && s === e || angleToStart > angleToEnd && startToAngle < endToAngle;\n}\n/**\n * Limit `value` between `min` and `max`\n * @param value\n * @param min\n * @param max\n * @private\n */\nfunction _limitValue(value, min, max) {\n return Math.max(min, Math.min(max, value));\n}\n/**\n * @param {number} value\n * @private\n */\nfunction _int16Range(value) {\n return _limitValue(value, -32768, 32767);\n}\n/**\n * @param value\n * @param start\n * @param end\n * @param [epsilon]\n * @private\n */\nfunction _isBetween(value, start, end, epsilon = 1e-6) {\n return value >= Math.min(start, end) - epsilon && value <= Math.max(start, end) + epsilon;\n}\nfunction _lookup(table, value, cmp) {\n cmp = cmp || (index => table[index] < value);\n let hi = table.length - 1;\n let lo = 0;\n let mid;\n while (hi - lo > 1) {\n mid = lo + hi >> 1;\n if (cmp(mid)) {\n lo = mid;\n } else {\n hi = mid;\n }\n }\n return {\n lo,\n hi\n };\n}\n/**\n * Binary search\n * @param table - the table search. must be sorted!\n * @param key - property name for the value in each entry\n * @param value - value to find\n * @param last - lookup last index\n * @private\n */\nconst _lookupByKey = (table, key, value, last) => _lookup(table, value, last ? index => {\n const ti = table[index][key];\n return ti < value || ti === value && table[index + 1][key] === value;\n} : index => table[index][key] < value);\n/**\n * Reverse binary search\n * @param table - the table search. must be sorted!\n * @param key - property name for the value in each entry\n * @param value - value to find\n * @private\n */\nconst _rlookupByKey = (table, key, value) => _lookup(table, value, index => table[index][key] >= value);\n/**\n * Return subset of `values` between `min` and `max` inclusive.\n * Values are assumed to be in sorted order.\n * @param values - sorted array of values\n * @param min - min value\n * @param max - max value\n */\nfunction _filterBetween(values, min, max) {\n let start = 0;\n let end = values.length;\n while (start < end && values[start] < min) {\n start++;\n }\n while (end > start && values[end - 1] > max) {\n end--;\n }\n return start > 0 || end < values.length ? values.slice(start, end) : values;\n}\nconst arrayEvents = ['push', 'pop', 'shift', 'splice', 'unshift'];\nfunction listenArrayEvents(array, listener) {\n if (array._chartjs) {\n array._chartjs.listeners.push(listener);\n return;\n }\n Object.defineProperty(array, '_chartjs', {\n configurable: true,\n enumerable: false,\n value: {\n listeners: [listener]\n }\n });\n arrayEvents.forEach(key => {\n const method = '_onData' + _capitalize(key);\n const base = array[key];\n Object.defineProperty(array, key, {\n configurable: true,\n enumerable: false,\n value(...args) {\n const res = base.apply(this, args);\n array._chartjs.listeners.forEach(object => {\n if (typeof object[method] === 'function') {\n object[method](...args);\n }\n });\n return res;\n }\n });\n });\n}\nfunction unlistenArrayEvents(array, listener) {\n const stub = array._chartjs;\n if (!stub) {\n return;\n }\n const listeners = stub.listeners;\n const index = listeners.indexOf(listener);\n if (index !== -1) {\n listeners.splice(index, 1);\n }\n if (listeners.length > 0) {\n return;\n }\n arrayEvents.forEach(key => {\n delete array[key];\n });\n delete array._chartjs;\n}\n/**\n * @param items\n */\nfunction _arrayUnique(items) {\n const set = new Set(items);\n if (set.size === items.length) {\n return items;\n }\n return Array.from(set);\n}\nfunction fontString(pixelSize, fontStyle, fontFamily) {\n return fontStyle + ' ' + pixelSize + 'px ' + fontFamily;\n}\n/**\n* Request animation polyfill\n*/\nconst requestAnimFrame = function () {\n if (typeof window === 'undefined') {\n return function (callback) {\n return callback();\n };\n }\n return window.requestAnimationFrame;\n}();\n/**\n * Throttles calling `fn` once per animation frame\n * Latest arguments are used on the actual call\n */\nfunction throttled(fn, thisArg) {\n let argsToUse = [];\n let ticking = false;\n return function (...args) {\n // Save the args for use later\n argsToUse = args;\n if (!ticking) {\n ticking = true;\n requestAnimFrame.call(window, () => {\n ticking = false;\n fn.apply(thisArg, argsToUse);\n });\n }\n };\n}\n/**\n * Debounces calling `fn` for `delay` ms\n */\nfunction debounce(fn, delay) {\n let timeout;\n return function (...args) {\n if (delay) {\n clearTimeout(timeout);\n timeout = setTimeout(fn, delay, args);\n } else {\n fn.apply(this, args);\n }\n return delay;\n };\n}\n/**\n * Converts 'start' to 'left', 'end' to 'right' and others to 'center'\n * @private\n */\nconst _toLeftRightCenter = align => align === 'start' ? 'left' : align === 'end' ? 'right' : 'center';\n/**\n * Returns `start`, `end` or `(start + end) / 2` depending on `align`. Defaults to `center`\n * @private\n */\nconst _alignStartEnd = (align, start, end) => align === 'start' ? start : align === 'end' ? end : (start + end) / 2;\n/**\n * Returns `left`, `right` or `(left + right) / 2` depending on `align`. Defaults to `left`\n * @private\n */\nconst _textX = (align, left, right, rtl) => {\n const check = rtl ? 'left' : 'right';\n return align === check ? right : align === 'center' ? (left + right) / 2 : left;\n};\n/**\n * Return start and count of visible points.\n * @private\n */\nfunction _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled) {\n const pointCount = points.length;\n let start = 0;\n let count = pointCount;\n if (meta._sorted) {\n const {\n iScale,\n vScale,\n _parsed\n } = meta;\n const spanGaps = meta.dataset ? meta.dataset.options ? meta.dataset.options.spanGaps : null : null;\n const axis = iScale.axis;\n const {\n min,\n max,\n minDefined,\n maxDefined\n } = iScale.getUserBounds();\n if (minDefined) {\n start = Math.min(\n // @ts-expect-error Need to type _parsed\n _lookupByKey(_parsed, axis, min).lo,\n // @ts-expect-error Need to fix types on _lookupByKey\n animationsDisabled ? pointCount : _lookupByKey(points, axis, iScale.getPixelForValue(min)).lo);\n if (spanGaps) {\n const distanceToDefinedLo = _parsed.slice(0, start + 1).reverse().findIndex(point => !isNullOrUndef(point[vScale.axis]));\n start -= Math.max(0, distanceToDefinedLo);\n }\n start = _limitValue(start, 0, pointCount - 1);\n }\n if (maxDefined) {\n let end = Math.max(\n // @ts-expect-error Need to type _parsed\n _lookupByKey(_parsed, iScale.axis, max, true).hi + 1,\n // @ts-expect-error Need to fix types on _lookupByKey\n animationsDisabled ? 0 : _lookupByKey(points, axis, iScale.getPixelForValue(max), true).hi + 1);\n if (spanGaps) {\n const distanceToDefinedHi = _parsed.slice(end - 1).findIndex(point => !isNullOrUndef(point[vScale.axis]));\n end += Math.max(0, distanceToDefinedHi);\n }\n count = _limitValue(end, start, pointCount) - start;\n } else {\n count = pointCount - start;\n }\n }\n return {\n start,\n count\n };\n}\n/**\n * Checks if the scale ranges have changed.\n * @param {object} meta - dataset meta.\n * @returns {boolean}\n * @private\n */\nfunction _scaleRangesChanged(meta) {\n const {\n xScale,\n yScale,\n _scaleRanges\n } = meta;\n const newRanges = {\n xmin: xScale.min,\n xmax: xScale.max,\n ymin: yScale.min,\n ymax: yScale.max\n };\n if (!_scaleRanges) {\n meta._scaleRanges = newRanges;\n return true;\n }\n const changed = _scaleRanges.xmin !== xScale.min || _scaleRanges.xmax !== xScale.max || _scaleRanges.ymin !== yScale.min || _scaleRanges.ymax !== yScale.max;\n Object.assign(_scaleRanges, newRanges);\n return changed;\n}\nconst atEdge = t => t === 0 || t === 1;\nconst elasticIn = (t, s, p) => -(Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * TAU / p));\nconst elasticOut = (t, s, p) => Math.pow(2, -10 * t) * Math.sin((t - s) * TAU / p) + 1;\n/**\n * Easing functions adapted from Robert Penner's easing equations.\n * @namespace Chart.helpers.easing.effects\n * @see http://www.robertpenner.com/easing/\n */\nconst effects = {\n linear: t => t,\n easeInQuad: t => t * t,\n easeOutQuad: t => -t * (t - 2),\n easeInOutQuad: t => (t /= 0.5) < 1 ? 0.5 * t * t : -0.5 * (--t * (t - 2) - 1),\n easeInCubic: t => t * t * t,\n easeOutCubic: t => (t -= 1) * t * t + 1,\n easeInOutCubic: t => (t /= 0.5) < 1 ? 0.5 * t * t * t : 0.5 * ((t -= 2) * t * t + 2),\n easeInQuart: t => t * t * t * t,\n easeOutQuart: t => -((t -= 1) * t * t * t - 1),\n easeInOutQuart: t => (t /= 0.5) < 1 ? 0.5 * t * t * t * t : -0.5 * ((t -= 2) * t * t * t - 2),\n easeInQuint: t => t * t * t * t * t,\n easeOutQuint: t => (t -= 1) * t * t * t * t + 1,\n easeInOutQuint: t => (t /= 0.5) < 1 ? 0.5 * t * t * t * t * t : 0.5 * ((t -= 2) * t * t * t * t + 2),\n easeInSine: t => -Math.cos(t * HALF_PI) + 1,\n easeOutSine: t => Math.sin(t * HALF_PI),\n easeInOutSine: t => -0.5 * (Math.cos(PI * t) - 1),\n easeInExpo: t => t === 0 ? 0 : Math.pow(2, 10 * (t - 1)),\n easeOutExpo: t => t === 1 ? 1 : -Math.pow(2, -10 * t) + 1,\n easeInOutExpo: t => atEdge(t) ? t : t < 0.5 ? 0.5 * Math.pow(2, 10 * (t * 2 - 1)) : 0.5 * (-Math.pow(2, -10 * (t * 2 - 1)) + 2),\n easeInCirc: t => t >= 1 ? t : -(Math.sqrt(1 - t * t) - 1),\n easeOutCirc: t => Math.sqrt(1 - (t -= 1) * t),\n easeInOutCirc: t => (t /= 0.5) < 1 ? -0.5 * (Math.sqrt(1 - t * t) - 1) : 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1),\n easeInElastic: t => atEdge(t) ? t : elasticIn(t, 0.075, 0.3),\n easeOutElastic: t => atEdge(t) ? t : elasticOut(t, 0.075, 0.3),\n easeInOutElastic(t) {\n const s = 0.1125;\n const p = 0.45;\n return atEdge(t) ? t : t < 0.5 ? 0.5 * elasticIn(t * 2, s, p) : 0.5 + 0.5 * elasticOut(t * 2 - 1, s, p);\n },\n easeInBack(t) {\n const s = 1.70158;\n return t * t * ((s + 1) * t - s);\n },\n easeOutBack(t) {\n const s = 1.70158;\n return (t -= 1) * t * ((s + 1) * t + s) + 1;\n },\n easeInOutBack(t) {\n let s = 1.70158;\n if ((t /= 0.5) < 1) {\n return 0.5 * (t * t * (((s *= 1.525) + 1) * t - s));\n }\n return 0.5 * ((t -= 2) * t * (((s *= 1.525) + 1) * t + s) + 2);\n },\n easeInBounce: t => 1 - effects.easeOutBounce(1 - t),\n easeOutBounce(t) {\n const m = 7.5625;\n const d = 2.75;\n if (t < 1 / d) {\n return m * t * t;\n }\n if (t < 2 / d) {\n return m * (t -= 1.5 / d) * t + 0.75;\n }\n if (t < 2.5 / d) {\n return m * (t -= 2.25 / d) * t + 0.9375;\n }\n return m * (t -= 2.625 / d) * t + 0.984375;\n },\n easeInOutBounce: t => t < 0.5 ? effects.easeInBounce(t * 2) * 0.5 : effects.easeOutBounce(t * 2 - 1) * 0.5 + 0.5\n};\nfunction isPatternOrGradient(value) {\n if (value && typeof value === 'object') {\n const type = value.toString();\n return type === '[object CanvasPattern]' || type === '[object CanvasGradient]';\n }\n return false;\n}\nfunction color(value) {\n return isPatternOrGradient(value) ? value : new Color(value);\n}\nfunction getHoverColor(value) {\n return isPatternOrGradient(value) ? value : new Color(value).saturate(0.5).darken(0.1).hexString();\n}\nconst numbers = ['x', 'y', 'borderWidth', 'radius', 'tension'];\nconst colors = ['color', 'borderColor', 'backgroundColor'];\nfunction applyAnimationsDefaults(defaults) {\n defaults.set('animation', {\n delay: undefined,\n duration: 1000,\n easing: 'easeOutQuart',\n fn: undefined,\n from: undefined,\n loop: undefined,\n to: undefined,\n type: undefined\n });\n defaults.describe('animation', {\n _fallback: false,\n _indexable: false,\n _scriptable: name => name !== 'onProgress' && name !== 'onComplete' && name !== 'fn'\n });\n defaults.set('animations', {\n colors: {\n type: 'color',\n properties: colors\n },\n numbers: {\n type: 'number',\n properties: numbers\n }\n });\n defaults.describe('animations', {\n _fallback: 'animation'\n });\n defaults.set('transitions', {\n active: {\n animation: {\n duration: 400\n }\n },\n resize: {\n animation: {\n duration: 0\n }\n },\n show: {\n animations: {\n colors: {\n from: 'transparent'\n },\n visible: {\n type: 'boolean',\n duration: 0\n }\n }\n },\n hide: {\n animations: {\n colors: {\n to: 'transparent'\n },\n visible: {\n type: 'boolean',\n easing: 'linear',\n fn: v => v | 0\n }\n }\n }\n });\n}\nfunction applyLayoutsDefaults(defaults) {\n defaults.set('layout', {\n autoPadding: true,\n padding: {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n }\n });\n}\nconst intlCache = new Map();\nfunction getNumberFormat(locale, options) {\n options = options || {};\n const cacheKey = locale + JSON.stringify(options);\n let formatter = intlCache.get(cacheKey);\n if (!formatter) {\n formatter = new Intl.NumberFormat(locale, options);\n intlCache.set(cacheKey, formatter);\n }\n return formatter;\n}\nfunction formatNumber(num, locale, options) {\n return getNumberFormat(locale, options).format(num);\n}\nconst formatters = {\n values(value) {\n return isArray(value) ? value : '' + value;\n },\n numeric(tickValue, index, ticks) {\n if (tickValue === 0) {\n return '0';\n }\n const locale = this.chart.options.locale;\n let notation;\n let delta = tickValue;\n if (ticks.length > 1) {\n const maxTick = Math.max(Math.abs(ticks[0].value), Math.abs(ticks[ticks.length - 1].value));\n if (maxTick < 1e-4 || maxTick > 1e+15) {\n notation = 'scientific';\n }\n delta = calculateDelta(tickValue, ticks);\n }\n const logDelta = log10(Math.abs(delta));\n const numDecimal = isNaN(logDelta) ? 1 : Math.max(Math.min(-1 * Math.floor(logDelta), 20), 0);\n const options = {\n notation,\n minimumFractionDigits: numDecimal,\n maximumFractionDigits: numDecimal\n };\n Object.assign(options, this.options.ticks.format);\n return formatNumber(tickValue, locale, options);\n },\n logarithmic(tickValue, index, ticks) {\n if (tickValue === 0) {\n return '0';\n }\n const remain = ticks[index].significand || tickValue / Math.pow(10, Math.floor(log10(tickValue)));\n if ([1, 2, 3, 5, 10, 15].includes(remain) || index > 0.8 * ticks.length) {\n return formatters.numeric.call(this, tickValue, index, ticks);\n }\n return '';\n }\n};\nfunction calculateDelta(tickValue, ticks) {\n let delta = ticks.length > 3 ? ticks[2].value - ticks[1].value : ticks[1].value - ticks[0].value;\n if (Math.abs(delta) >= 1 && tickValue !== Math.floor(tickValue)) {\n delta = tickValue - Math.floor(tickValue);\n }\n return delta;\n}\nvar Ticks = {\n formatters\n};\nfunction applyScaleDefaults(defaults) {\n defaults.set('scale', {\n display: true,\n offset: false,\n reverse: false,\n beginAtZero: false,\n bounds: 'ticks',\n clip: true,\n grace: 0,\n grid: {\n display: true,\n lineWidth: 1,\n drawOnChartArea: true,\n drawTicks: true,\n tickLength: 8,\n tickWidth: (_ctx, options) => options.lineWidth,\n tickColor: (_ctx, options) => options.color,\n offset: false\n },\n border: {\n display: true,\n dash: [],\n dashOffset: 0.0,\n width: 1\n },\n title: {\n display: false,\n text: '',\n padding: {\n top: 4,\n bottom: 4\n }\n },\n ticks: {\n minRotation: 0,\n maxRotation: 50,\n mirror: false,\n textStrokeWidth: 0,\n textStrokeColor: '',\n padding: 3,\n display: true,\n autoSkip: true,\n autoSkipPadding: 3,\n labelOffset: 0,\n callback: Ticks.formatters.values,\n minor: {},\n major: {},\n align: 'center',\n crossAlign: 'near',\n showLabelBackdrop: false,\n backdropColor: 'rgba(255, 255, 255, 0.75)',\n backdropPadding: 2\n }\n });\n defaults.route('scale.ticks', 'color', '', 'color');\n defaults.route('scale.grid', 'color', '', 'borderColor');\n defaults.route('scale.border', 'color', '', 'borderColor');\n defaults.route('scale.title', 'color', '', 'color');\n defaults.describe('scale', {\n _fallback: false,\n _scriptable: name => !name.startsWith('before') && !name.startsWith('after') && name !== 'callback' && name !== 'parser',\n _indexable: name => name !== 'borderDash' && name !== 'tickBorderDash' && name !== 'dash'\n });\n defaults.describe('scales', {\n _fallback: 'scale'\n });\n defaults.describe('scale.ticks', {\n _scriptable: name => name !== 'backdropPadding' && name !== 'callback',\n _indexable: name => name !== 'backdropPadding'\n });\n}\nconst overrides = Object.create(null);\nconst descriptors = Object.create(null);\nfunction getScope$1(node, key) {\n if (!key) {\n return node;\n }\n const keys = key.split('.');\n for (let i = 0, n = keys.length; i < n; ++i) {\n const k = keys[i];\n node = node[k] || (node[k] = Object.create(null));\n }\n return node;\n}\nfunction set(root, scope, values) {\n if (typeof scope === 'string') {\n return merge(getScope$1(root, scope), values);\n }\n return merge(getScope$1(root, ''), scope);\n}\nclass Defaults {\n constructor(_descriptors, _appliers) {\n this.animation = undefined;\n this.backgroundColor = 'rgba(0,0,0,0.1)';\n this.borderColor = 'rgba(0,0,0,0.1)';\n this.color = '#666';\n this.datasets = {};\n this.devicePixelRatio = context => context.chart.platform.getDevicePixelRatio();\n this.elements = {};\n this.events = ['mousemove', 'mouseout', 'click', 'touchstart', 'touchmove'];\n this.font = {\n family: \"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif\",\n size: 12,\n style: 'normal',\n lineHeight: 1.2,\n weight: null\n };\n this.hover = {};\n this.hoverBackgroundColor = (ctx, options) => getHoverColor(options.backgroundColor);\n this.hoverBorderColor = (ctx, options) => getHoverColor(options.borderColor);\n this.hoverColor = (ctx, options) => getHoverColor(options.color);\n this.indexAxis = 'x';\n this.interaction = {\n mode: 'nearest',\n intersect: true,\n includeInvisible: false\n };\n this.maintainAspectRatio = true;\n this.onHover = null;\n this.onClick = null;\n this.parsing = true;\n this.plugins = {};\n this.responsive = true;\n this.scale = undefined;\n this.scales = {};\n this.showLine = true;\n this.drawActiveElementsOnTop = true;\n this.describe(_descriptors);\n this.apply(_appliers);\n }\n set(scope, values) {\n return set(this, scope, values);\n }\n get(scope) {\n return getScope$1(this, scope);\n }\n describe(scope, values) {\n return set(descriptors, scope, values);\n }\n override(scope, values) {\n return set(overrides, scope, values);\n }\n route(scope, name, targetScope, targetName) {\n const scopeObject = getScope$1(this, scope);\n const targetScopeObject = getScope$1(this, targetScope);\n const privateName = '_' + name;\n Object.defineProperties(scopeObject, {\n [privateName]: {\n value: scopeObject[name],\n writable: true\n },\n [name]: {\n enumerable: true,\n get() {\n const local = this[privateName];\n const target = targetScopeObject[targetName];\n if (isObject(local)) {\n return Object.assign({}, target, local);\n }\n return valueOrDefault(local, target);\n },\n set(value) {\n this[privateName] = value;\n }\n }\n });\n }\n apply(appliers) {\n appliers.forEach(apply => apply(this));\n }\n}\nvar defaults = /* #__PURE__ */new Defaults({\n _scriptable: name => !name.startsWith('on'),\n _indexable: name => name !== 'events',\n hover: {\n _fallback: 'interaction'\n },\n interaction: {\n _scriptable: false,\n _indexable: false\n }\n}, [applyAnimationsDefaults, applyLayoutsDefaults, applyScaleDefaults]);\n\n/**\n * Converts the given font object into a CSS font string.\n * @param font - A font object.\n * @return The CSS font string. See https://developer.mozilla.org/en-US/docs/Web/CSS/font\n * @private\n */\nfunction toFontString(font) {\n if (!font || isNullOrUndef(font.size) || isNullOrUndef(font.family)) {\n return null;\n }\n return (font.style ? font.style + ' ' : '') + (font.weight ? font.weight + ' ' : '') + font.size + 'px ' + font.family;\n}\n/**\n * @private\n */\nfunction _measureText(ctx, data, gc, longest, string) {\n let textWidth = data[string];\n if (!textWidth) {\n textWidth = data[string] = ctx.measureText(string).width;\n gc.push(string);\n }\n if (textWidth > longest) {\n longest = textWidth;\n }\n return longest;\n}\n/**\n * @private\n */ // eslint-disable-next-line complexity\nfunction _longestText(ctx, font, arrayOfThings, cache) {\n cache = cache || {};\n let data = cache.data = cache.data || {};\n let gc = cache.garbageCollect = cache.garbageCollect || [];\n if (cache.font !== font) {\n data = cache.data = {};\n gc = cache.garbageCollect = [];\n cache.font = font;\n }\n ctx.save();\n ctx.font = font;\n let longest = 0;\n const ilen = arrayOfThings.length;\n let i, j, jlen, thing, nestedThing;\n for (i = 0; i < ilen; i++) {\n thing = arrayOfThings[i];\n // Undefined strings and arrays should not be measured\n if (thing !== undefined && thing !== null && !isArray(thing)) {\n longest = _measureText(ctx, data, gc, longest, thing);\n } else if (isArray(thing)) {\n // if it is an array lets measure each element\n // to do maybe simplify this function a bit so we can do this more recursively?\n for (j = 0, jlen = thing.length; j < jlen; j++) {\n nestedThing = thing[j];\n // Undefined strings and arrays should not be measured\n if (nestedThing !== undefined && nestedThing !== null && !isArray(nestedThing)) {\n longest = _measureText(ctx, data, gc, longest, nestedThing);\n }\n }\n }\n }\n ctx.restore();\n const gcLen = gc.length / 2;\n if (gcLen > arrayOfThings.length) {\n for (i = 0; i < gcLen; i++) {\n delete data[gc[i]];\n }\n gc.splice(0, gcLen);\n }\n return longest;\n}\n/**\n * Returns the aligned pixel value to avoid anti-aliasing blur\n * @param chart - The chart instance.\n * @param pixel - A pixel value.\n * @param width - The width of the element.\n * @returns The aligned pixel value.\n * @private\n */\nfunction _alignPixel(chart, pixel, width) {\n const devicePixelRatio = chart.currentDevicePixelRatio;\n const halfWidth = width !== 0 ? Math.max(width / 2, 0.5) : 0;\n return Math.round((pixel - halfWidth) * devicePixelRatio) / devicePixelRatio + halfWidth;\n}\n/**\n * Clears the entire canvas.\n */\nfunction clearCanvas(canvas, ctx) {\n if (!ctx && !canvas) {\n return;\n }\n ctx = ctx || canvas.getContext('2d');\n ctx.save();\n // canvas.width and canvas.height do not consider the canvas transform,\n // while clearRect does\n ctx.resetTransform();\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n ctx.restore();\n}\nfunction drawPoint(ctx, options, x, y) {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n drawPointLegend(ctx, options, x, y, null);\n}\n// eslint-disable-next-line complexity\nfunction drawPointLegend(ctx, options, x, y, w) {\n let type, xOffset, yOffset, size, cornerRadius, width, xOffsetW, yOffsetW;\n const style = options.pointStyle;\n const rotation = options.rotation;\n const radius = options.radius;\n let rad = (rotation || 0) * RAD_PER_DEG;\n if (style && typeof style === 'object') {\n type = style.toString();\n if (type === '[object HTMLImageElement]' || type === '[object HTMLCanvasElement]') {\n ctx.save();\n ctx.translate(x, y);\n ctx.rotate(rad);\n ctx.drawImage(style, -style.width / 2, -style.height / 2, style.width, style.height);\n ctx.restore();\n return;\n }\n }\n if (isNaN(radius) || radius <= 0) {\n return;\n }\n ctx.beginPath();\n switch (style) {\n // Default includes circle\n default:\n if (w) {\n ctx.ellipse(x, y, w / 2, radius, 0, 0, TAU);\n } else {\n ctx.arc(x, y, radius, 0, TAU);\n }\n ctx.closePath();\n break;\n case 'triangle':\n width = w ? w / 2 : radius;\n ctx.moveTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);\n rad += TWO_THIRDS_PI;\n ctx.lineTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);\n rad += TWO_THIRDS_PI;\n ctx.lineTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);\n ctx.closePath();\n break;\n case 'rectRounded':\n // NOTE: the rounded rect implementation changed to use `arc` instead of\n // `quadraticCurveTo` since it generates better results when rect is\n // almost a circle. 0.516 (instead of 0.5) produces results with visually\n // closer proportion to the previous impl and it is inscribed in the\n // circle with `radius`. For more details, see the following PRs:\n // https://github.com/chartjs/Chart.js/issues/5597\n // https://github.com/chartjs/Chart.js/issues/5858\n cornerRadius = radius * 0.516;\n size = radius - cornerRadius;\n xOffset = Math.cos(rad + QUARTER_PI) * size;\n xOffsetW = Math.cos(rad + QUARTER_PI) * (w ? w / 2 - cornerRadius : size);\n yOffset = Math.sin(rad + QUARTER_PI) * size;\n yOffsetW = Math.sin(rad + QUARTER_PI) * (w ? w / 2 - cornerRadius : size);\n ctx.arc(x - xOffsetW, y - yOffset, cornerRadius, rad - PI, rad - HALF_PI);\n ctx.arc(x + yOffsetW, y - xOffset, cornerRadius, rad - HALF_PI, rad);\n ctx.arc(x + xOffsetW, y + yOffset, cornerRadius, rad, rad + HALF_PI);\n ctx.arc(x - yOffsetW, y + xOffset, cornerRadius, rad + HALF_PI, rad + PI);\n ctx.closePath();\n break;\n case 'rect':\n if (!rotation) {\n size = Math.SQRT1_2 * radius;\n width = w ? w / 2 : size;\n ctx.rect(x - width, y - size, 2 * width, 2 * size);\n break;\n }\n rad += QUARTER_PI;\n /* falls through */\n case 'rectRot':\n xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n ctx.moveTo(x - xOffsetW, y - yOffset);\n ctx.lineTo(x + yOffsetW, y - xOffset);\n ctx.lineTo(x + xOffsetW, y + yOffset);\n ctx.lineTo(x - yOffsetW, y + xOffset);\n ctx.closePath();\n break;\n case 'crossRot':\n rad += QUARTER_PI;\n /* falls through */\n case 'cross':\n xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n ctx.moveTo(x - xOffsetW, y - yOffset);\n ctx.lineTo(x + xOffsetW, y + yOffset);\n ctx.moveTo(x + yOffsetW, y - xOffset);\n ctx.lineTo(x - yOffsetW, y + xOffset);\n break;\n case 'star':\n xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n ctx.moveTo(x - xOffsetW, y - yOffset);\n ctx.lineTo(x + xOffsetW, y + yOffset);\n ctx.moveTo(x + yOffsetW, y - xOffset);\n ctx.lineTo(x - yOffsetW, y + xOffset);\n rad += QUARTER_PI;\n xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n ctx.moveTo(x - xOffsetW, y - yOffset);\n ctx.lineTo(x + xOffsetW, y + yOffset);\n ctx.moveTo(x + yOffsetW, y - xOffset);\n ctx.lineTo(x - yOffsetW, y + xOffset);\n break;\n case 'line':\n xOffset = w ? w / 2 : Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n ctx.moveTo(x - xOffset, y - yOffset);\n ctx.lineTo(x + xOffset, y + yOffset);\n break;\n case 'dash':\n ctx.moveTo(x, y);\n ctx.lineTo(x + Math.cos(rad) * (w ? w / 2 : radius), y + Math.sin(rad) * radius);\n break;\n case false:\n ctx.closePath();\n break;\n }\n ctx.fill();\n if (options.borderWidth > 0) {\n ctx.stroke();\n }\n}\n/**\n * Returns true if the point is inside the rectangle\n * @param point - The point to test\n * @param area - The rectangle\n * @param margin - allowed margin\n * @private\n */\nfunction _isPointInArea(point, area, margin) {\n margin = margin || 0.5; // margin - default is to match rounded decimals\n return !area || point && point.x > area.left - margin && point.x < area.right + margin && point.y > area.top - margin && point.y < area.bottom + margin;\n}\nfunction clipArea(ctx, area) {\n ctx.save();\n ctx.beginPath();\n ctx.rect(area.left, area.top, area.right - area.left, area.bottom - area.top);\n ctx.clip();\n}\nfunction unclipArea(ctx) {\n ctx.restore();\n}\n/**\n * @private\n */\nfunction _steppedLineTo(ctx, previous, target, flip, mode) {\n if (!previous) {\n return ctx.lineTo(target.x, target.y);\n }\n if (mode === 'middle') {\n const midpoint = (previous.x + target.x) / 2.0;\n ctx.lineTo(midpoint, previous.y);\n ctx.lineTo(midpoint, target.y);\n } else if (mode === 'after' !== !!flip) {\n ctx.lineTo(previous.x, target.y);\n } else {\n ctx.lineTo(target.x, previous.y);\n }\n ctx.lineTo(target.x, target.y);\n}\n/**\n * @private\n */\nfunction _bezierCurveTo(ctx, previous, target, flip) {\n if (!previous) {\n return ctx.lineTo(target.x, target.y);\n }\n ctx.bezierCurveTo(flip ? previous.cp1x : previous.cp2x, flip ? previous.cp1y : previous.cp2y, flip ? target.cp2x : target.cp1x, flip ? target.cp2y : target.cp1y, target.x, target.y);\n}\nfunction setRenderOpts(ctx, opts) {\n if (opts.translation) {\n ctx.translate(opts.translation[0], opts.translation[1]);\n }\n if (!isNullOrUndef(opts.rotation)) {\n ctx.rotate(opts.rotation);\n }\n if (opts.color) {\n ctx.fillStyle = opts.color;\n }\n if (opts.textAlign) {\n ctx.textAlign = opts.textAlign;\n }\n if (opts.textBaseline) {\n ctx.textBaseline = opts.textBaseline;\n }\n}\nfunction decorateText(ctx, x, y, line, opts) {\n if (opts.strikethrough || opts.underline) {\n /**\n * Now that IE11 support has been dropped, we can use more\n * of the TextMetrics object. The actual bounding boxes\n * are unflagged in Chrome, Firefox, Edge, and Safari so they\n * can be safely used.\n * See https://developer.mozilla.org/en-US/docs/Web/API/TextMetrics#Browser_compatibility\n */\n const metrics = ctx.measureText(line);\n const left = x - metrics.actualBoundingBoxLeft;\n const right = x + metrics.actualBoundingBoxRight;\n const top = y - metrics.actualBoundingBoxAscent;\n const bottom = y + metrics.actualBoundingBoxDescent;\n const yDecoration = opts.strikethrough ? (top + bottom) / 2 : bottom;\n ctx.strokeStyle = ctx.fillStyle;\n ctx.beginPath();\n ctx.lineWidth = opts.decorationWidth || 2;\n ctx.moveTo(left, yDecoration);\n ctx.lineTo(right, yDecoration);\n ctx.stroke();\n }\n}\nfunction drawBackdrop(ctx, opts) {\n const oldColor = ctx.fillStyle;\n ctx.fillStyle = opts.color;\n ctx.fillRect(opts.left, opts.top, opts.width, opts.height);\n ctx.fillStyle = oldColor;\n}\n/**\n * Render text onto the canvas\n */\nfunction renderText(ctx, text, x, y, font, opts = {}) {\n const lines = isArray(text) ? text : [text];\n const stroke = opts.strokeWidth > 0 && opts.strokeColor !== '';\n let i, line;\n ctx.save();\n ctx.font = font.string;\n setRenderOpts(ctx, opts);\n for (i = 0; i < lines.length; ++i) {\n line = lines[i];\n if (opts.backdrop) {\n drawBackdrop(ctx, opts.backdrop);\n }\n if (stroke) {\n if (opts.strokeColor) {\n ctx.strokeStyle = opts.strokeColor;\n }\n if (!isNullOrUndef(opts.strokeWidth)) {\n ctx.lineWidth = opts.strokeWidth;\n }\n ctx.strokeText(line, x, y, opts.maxWidth);\n }\n ctx.fillText(line, x, y, opts.maxWidth);\n decorateText(ctx, x, y, line, opts);\n y += Number(font.lineHeight);\n }\n ctx.restore();\n}\n/**\n * Add a path of a rectangle with rounded corners to the current sub-path\n * @param ctx - Context\n * @param rect - Bounding rect\n */\nfunction addRoundedRectPath(ctx, rect) {\n const {\n x,\n y,\n w,\n h,\n radius\n } = rect;\n // top left arc\n ctx.arc(x + radius.topLeft, y + radius.topLeft, radius.topLeft, 1.5 * PI, PI, true);\n // line from top left to bottom left\n ctx.lineTo(x, y + h - radius.bottomLeft);\n // bottom left arc\n ctx.arc(x + radius.bottomLeft, y + h - radius.bottomLeft, radius.bottomLeft, PI, HALF_PI, true);\n // line from bottom left to bottom right\n ctx.lineTo(x + w - radius.bottomRight, y + h);\n // bottom right arc\n ctx.arc(x + w - radius.bottomRight, y + h - radius.bottomRight, radius.bottomRight, HALF_PI, 0, true);\n // line from bottom right to top right\n ctx.lineTo(x + w, y + radius.topRight);\n // top right arc\n ctx.arc(x + w - radius.topRight, y + radius.topRight, radius.topRight, 0, -HALF_PI, true);\n // line from top right to top left\n ctx.lineTo(x + radius.topLeft, y);\n}\nconst LINE_HEIGHT = /^(normal|(\\d+(?:\\.\\d+)?)(px|em|%)?)$/;\nconst FONT_STYLE = /^(normal|italic|initial|inherit|unset|(oblique( -?[0-9]?[0-9]deg)?))$/;\n/**\n * @alias Chart.helpers.options\n * @namespace\n */ /**\n * Converts the given line height `value` in pixels for a specific font `size`.\n * @param value - The lineHeight to parse (eg. 1.6, '14px', '75%', '1.6em').\n * @param size - The font size (in pixels) used to resolve relative `value`.\n * @returns The effective line height in pixels (size * 1.2 if value is invalid).\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/line-height\n * @since 2.7.0\n */\nfunction toLineHeight(value, size) {\n const matches = ('' + value).match(LINE_HEIGHT);\n if (!matches || matches[1] === 'normal') {\n return size * 1.2;\n }\n value = +matches[2];\n switch (matches[3]) {\n case 'px':\n return value;\n case '%':\n value /= 100;\n break;\n }\n return size * value;\n}\nconst numberOrZero = v => +v || 0;\nfunction _readValueToProps(value, props) {\n const ret = {};\n const objProps = isObject(props);\n const keys = objProps ? Object.keys(props) : props;\n const read = isObject(value) ? objProps ? prop => valueOrDefault(value[prop], value[props[prop]]) : prop => value[prop] : () => value;\n for (const prop of keys) {\n ret[prop] = numberOrZero(read(prop));\n }\n return ret;\n}\n/**\n * Converts the given value into a TRBL object.\n * @param value - If a number, set the value to all TRBL component,\n * else, if an object, use defined properties and sets undefined ones to 0.\n * x / y are shorthands for same value for left/right and top/bottom.\n * @returns The padding values (top, right, bottom, left)\n * @since 3.0.0\n */\nfunction toTRBL(value) {\n return _readValueToProps(value, {\n top: 'y',\n right: 'x',\n bottom: 'y',\n left: 'x'\n });\n}\n/**\n * Converts the given value into a TRBL corners object (similar with css border-radius).\n * @param value - If a number, set the value to all TRBL corner components,\n * else, if an object, use defined properties and sets undefined ones to 0.\n * @returns The TRBL corner values (topLeft, topRight, bottomLeft, bottomRight)\n * @since 3.0.0\n */\nfunction toTRBLCorners(value) {\n return _readValueToProps(value, ['topLeft', 'topRight', 'bottomLeft', 'bottomRight']);\n}\n/**\n * Converts the given value into a padding object with pre-computed width/height.\n * @param value - If a number, set the value to all TRBL component,\n * else, if an object, use defined properties and sets undefined ones to 0.\n * x / y are shorthands for same value for left/right and top/bottom.\n * @returns The padding values (top, right, bottom, left, width, height)\n * @since 2.7.0\n */\nfunction toPadding(value) {\n const obj = toTRBL(value);\n obj.width = obj.left + obj.right;\n obj.height = obj.top + obj.bottom;\n return obj;\n}\n/**\n * Parses font options and returns the font object.\n * @param options - A object that contains font options to be parsed.\n * @param fallback - A object that contains fallback font options.\n * @return The font object.\n * @private\n */\nfunction toFont(options, fallback) {\n options = options || {};\n fallback = fallback || defaults.font;\n let size = valueOrDefault(options.size, fallback.size);\n if (typeof size === 'string') {\n size = parseInt(size, 10);\n }\n let style = valueOrDefault(options.style, fallback.style);\n if (style && !('' + style).match(FONT_STYLE)) {\n console.warn('Invalid font style specified: \"' + style + '\"');\n style = undefined;\n }\n const font = {\n family: valueOrDefault(options.family, fallback.family),\n lineHeight: toLineHeight(valueOrDefault(options.lineHeight, fallback.lineHeight), size),\n size,\n style,\n weight: valueOrDefault(options.weight, fallback.weight),\n string: ''\n };\n font.string = toFontString(font);\n return font;\n}\n/**\n * Evaluates the given `inputs` sequentially and returns the first defined value.\n * @param inputs - An array of values, falling back to the last value.\n * @param context - If defined and the current value is a function, the value\n * is called with `context` as first argument and the result becomes the new input.\n * @param index - If defined and the current value is an array, the value\n * at `index` become the new input.\n * @param info - object to return information about resolution in\n * @param info.cacheable - Will be set to `false` if option is not cacheable.\n * @since 2.7.0\n */\nfunction resolve(inputs, context, index, info) {\n let cacheable = true;\n let i, ilen, value;\n for (i = 0, ilen = inputs.length; i < ilen; ++i) {\n value = inputs[i];\n if (value === undefined) {\n continue;\n }\n if (context !== undefined && typeof value === 'function') {\n value = value(context);\n cacheable = false;\n }\n if (index !== undefined && isArray(value)) {\n value = value[index % value.length];\n cacheable = false;\n }\n if (value !== undefined) {\n if (info && !cacheable) {\n info.cacheable = false;\n }\n return value;\n }\n }\n}\n/**\n * @param minmax\n * @param grace\n * @param beginAtZero\n * @private\n */\nfunction _addGrace(minmax, grace, beginAtZero) {\n const {\n min,\n max\n } = minmax;\n const change = toDimension(grace, (max - min) / 2);\n const keepZero = (value, add) => beginAtZero && value === 0 ? 0 : value + add;\n return {\n min: keepZero(min, -Math.abs(change)),\n max: keepZero(max, change)\n };\n}\nfunction createContext(parentContext, context) {\n return Object.assign(Object.create(parentContext), context);\n}\n\n/**\n * Creates a Proxy for resolving raw values for options.\n * @param scopes - The option scopes to look for values, in resolution order\n * @param prefixes - The prefixes for values, in resolution order.\n * @param rootScopes - The root option scopes\n * @param fallback - Parent scopes fallback\n * @param getTarget - callback for getting the target for changed values\n * @returns Proxy\n * @private\n */\nfunction _createResolver(scopes, prefixes = [''], rootScopes, fallback, getTarget = () => scopes[0]) {\n const finalRootScopes = rootScopes || scopes;\n if (typeof fallback === 'undefined') {\n fallback = _resolve('_fallback', scopes);\n }\n const cache = {\n [Symbol.toStringTag]: 'Object',\n _cacheable: true,\n _scopes: scopes,\n _rootScopes: finalRootScopes,\n _fallback: fallback,\n _getTarget: getTarget,\n override: scope => _createResolver([scope, ...scopes], prefixes, finalRootScopes, fallback)\n };\n return new Proxy(cache, {\n /**\n * A trap for the delete operator.\n */\n deleteProperty(target, prop) {\n delete target[prop]; // remove from cache\n delete target._keys; // remove cached keys\n delete scopes[0][prop]; // remove from top level scope\n return true;\n },\n /**\n * A trap for getting property values.\n */\n get(target, prop) {\n return _cached(target, prop, () => _resolveWithPrefixes(prop, prefixes, scopes, target));\n },\n /**\n * A trap for Object.getOwnPropertyDescriptor.\n * Also used by Object.hasOwnProperty.\n */\n getOwnPropertyDescriptor(target, prop) {\n return Reflect.getOwnPropertyDescriptor(target._scopes[0], prop);\n },\n /**\n * A trap for Object.getPrototypeOf.\n */\n getPrototypeOf() {\n return Reflect.getPrototypeOf(scopes[0]);\n },\n /**\n * A trap for the in operator.\n */\n has(target, prop) {\n return getKeysFromAllScopes(target).includes(prop);\n },\n /**\n * A trap for Object.getOwnPropertyNames and Object.getOwnPropertySymbols.\n */\n ownKeys(target) {\n return getKeysFromAllScopes(target);\n },\n /**\n * A trap for setting property values.\n */\n set(target, prop, value) {\n const storage = target._storage || (target._storage = getTarget());\n target[prop] = storage[prop] = value; // set to top level scope + cache\n delete target._keys; // remove cached keys\n return true;\n }\n });\n}\n/**\n * Returns an Proxy for resolving option values with context.\n * @param proxy - The Proxy returned by `_createResolver`\n * @param context - Context object for scriptable/indexable options\n * @param subProxy - The proxy provided for scriptable options\n * @param descriptorDefaults - Defaults for descriptors\n * @private\n */\nfunction _attachContext(proxy, context, subProxy, descriptorDefaults) {\n const cache = {\n _cacheable: false,\n _proxy: proxy,\n _context: context,\n _subProxy: subProxy,\n _stack: new Set(),\n _descriptors: _descriptors(proxy, descriptorDefaults),\n setContext: ctx => _attachContext(proxy, ctx, subProxy, descriptorDefaults),\n override: scope => _attachContext(proxy.override(scope), context, subProxy, descriptorDefaults)\n };\n return new Proxy(cache, {\n /**\n * A trap for the delete operator.\n */\n deleteProperty(target, prop) {\n delete target[prop]; // remove from cache\n delete proxy[prop]; // remove from proxy\n return true;\n },\n /**\n * A trap for getting property values.\n */\n get(target, prop, receiver) {\n return _cached(target, prop, () => _resolveWithContext(target, prop, receiver));\n },\n /**\n * A trap for Object.getOwnPropertyDescriptor.\n * Also used by Object.hasOwnProperty.\n */\n getOwnPropertyDescriptor(target, prop) {\n return target._descriptors.allKeys ? Reflect.has(proxy, prop) ? {\n enumerable: true,\n configurable: true\n } : undefined : Reflect.getOwnPropertyDescriptor(proxy, prop);\n },\n /**\n * A trap for Object.getPrototypeOf.\n */\n getPrototypeOf() {\n return Reflect.getPrototypeOf(proxy);\n },\n /**\n * A trap for the in operator.\n */\n has(target, prop) {\n return Reflect.has(proxy, prop);\n },\n /**\n * A trap for Object.getOwnPropertyNames and Object.getOwnPropertySymbols.\n */\n ownKeys() {\n return Reflect.ownKeys(proxy);\n },\n /**\n * A trap for setting property values.\n */\n set(target, prop, value) {\n proxy[prop] = value; // set to proxy\n delete target[prop]; // remove from cache\n return true;\n }\n });\n}\n/**\n * @private\n */\nfunction _descriptors(proxy, defaults = {\n scriptable: true,\n indexable: true\n}) {\n const {\n _scriptable = defaults.scriptable,\n _indexable = defaults.indexable,\n _allKeys = defaults.allKeys\n } = proxy;\n return {\n allKeys: _allKeys,\n scriptable: _scriptable,\n indexable: _indexable,\n isScriptable: isFunction(_scriptable) ? _scriptable : () => _scriptable,\n isIndexable: isFunction(_indexable) ? _indexable : () => _indexable\n };\n}\nconst readKey = (prefix, name) => prefix ? prefix + _capitalize(name) : name;\nconst needsSubResolver = (prop, value) => isObject(value) && prop !== 'adapters' && (Object.getPrototypeOf(value) === null || value.constructor === Object);\nfunction _cached(target, prop, resolve) {\n if (Object.prototype.hasOwnProperty.call(target, prop) || prop === 'constructor') {\n return target[prop];\n }\n const value = resolve();\n // cache the resolved value\n target[prop] = value;\n return value;\n}\nfunction _resolveWithContext(target, prop, receiver) {\n const {\n _proxy,\n _context,\n _subProxy,\n _descriptors: descriptors\n } = target;\n let value = _proxy[prop]; // resolve from proxy\n // resolve with context\n if (isFunction(value) && descriptors.isScriptable(prop)) {\n value = _resolveScriptable(prop, value, target, receiver);\n }\n if (isArray(value) && value.length) {\n value = _resolveArray(prop, value, target, descriptors.isIndexable);\n }\n if (needsSubResolver(prop, value)) {\n // if the resolved value is an object, create a sub resolver for it\n value = _attachContext(value, _context, _subProxy && _subProxy[prop], descriptors);\n }\n return value;\n}\nfunction _resolveScriptable(prop, getValue, target, receiver) {\n const {\n _proxy,\n _context,\n _subProxy,\n _stack\n } = target;\n if (_stack.has(prop)) {\n throw new Error('Recursion detected: ' + Array.from(_stack).join('->') + '->' + prop);\n }\n _stack.add(prop);\n let value = getValue(_context, _subProxy || receiver);\n _stack.delete(prop);\n if (needsSubResolver(prop, value)) {\n // When scriptable option returns an object, create a resolver on that.\n value = createSubResolver(_proxy._scopes, _proxy, prop, value);\n }\n return value;\n}\nfunction _resolveArray(prop, value, target, isIndexable) {\n const {\n _proxy,\n _context,\n _subProxy,\n _descriptors: descriptors\n } = target;\n if (typeof _context.index !== 'undefined' && isIndexable(prop)) {\n return value[_context.index % value.length];\n } else if (isObject(value[0])) {\n // Array of objects, return array or resolvers\n const arr = value;\n const scopes = _proxy._scopes.filter(s => s !== arr);\n value = [];\n for (const item of arr) {\n const resolver = createSubResolver(scopes, _proxy, prop, item);\n value.push(_attachContext(resolver, _context, _subProxy && _subProxy[prop], descriptors));\n }\n }\n return value;\n}\nfunction resolveFallback(fallback, prop, value) {\n return isFunction(fallback) ? fallback(prop, value) : fallback;\n}\nconst getScope = (key, parent) => key === true ? parent : typeof key === 'string' ? resolveObjectKey(parent, key) : undefined;\nfunction addScopes(set, parentScopes, key, parentFallback, value) {\n for (const parent of parentScopes) {\n const scope = getScope(key, parent);\n if (scope) {\n set.add(scope);\n const fallback = resolveFallback(scope._fallback, key, value);\n if (typeof fallback !== 'undefined' && fallback !== key && fallback !== parentFallback) {\n // When we reach the descriptor that defines a new _fallback, return that.\n // The fallback will resume to that new scope.\n return fallback;\n }\n } else if (scope === false && typeof parentFallback !== 'undefined' && key !== parentFallback) {\n // Fallback to `false` results to `false`, when falling back to different key.\n // For example `interaction` from `hover` or `plugins.tooltip` and `animation` from `animations`\n return null;\n }\n }\n return false;\n}\nfunction createSubResolver(parentScopes, resolver, prop, value) {\n const rootScopes = resolver._rootScopes;\n const fallback = resolveFallback(resolver._fallback, prop, value);\n const allScopes = [...parentScopes, ...rootScopes];\n const set = new Set();\n set.add(value);\n let key = addScopesFromKey(set, allScopes, prop, fallback || prop, value);\n if (key === null) {\n return false;\n }\n if (typeof fallback !== 'undefined' && fallback !== prop) {\n key = addScopesFromKey(set, allScopes, fallback, key, value);\n if (key === null) {\n return false;\n }\n }\n return _createResolver(Array.from(set), [''], rootScopes, fallback, () => subGetTarget(resolver, prop, value));\n}\nfunction addScopesFromKey(set, allScopes, key, fallback, item) {\n while (key) {\n key = addScopes(set, allScopes, key, fallback, item);\n }\n return key;\n}\nfunction subGetTarget(resolver, prop, value) {\n const parent = resolver._getTarget();\n if (!(prop in parent)) {\n parent[prop] = {};\n }\n const target = parent[prop];\n if (isArray(target) && isObject(value)) {\n // For array of objects, the object is used to store updated values\n return value;\n }\n return target || {};\n}\nfunction _resolveWithPrefixes(prop, prefixes, scopes, proxy) {\n let value;\n for (const prefix of prefixes) {\n value = _resolve(readKey(prefix, prop), scopes);\n if (typeof value !== 'undefined') {\n return needsSubResolver(prop, value) ? createSubResolver(scopes, proxy, prop, value) : value;\n }\n }\n}\nfunction _resolve(key, scopes) {\n for (const scope of scopes) {\n if (!scope) {\n continue;\n }\n const value = scope[key];\n if (typeof value !== 'undefined') {\n return value;\n }\n }\n}\nfunction getKeysFromAllScopes(target) {\n let keys = target._keys;\n if (!keys) {\n keys = target._keys = resolveKeysFromAllScopes(target._scopes);\n }\n return keys;\n}\nfunction resolveKeysFromAllScopes(scopes) {\n const set = new Set();\n for (const scope of scopes) {\n for (const key of Object.keys(scope).filter(k => !k.startsWith('_'))) {\n set.add(key);\n }\n }\n return Array.from(set);\n}\nfunction _parseObjectDataRadialScale(meta, data, start, count) {\n const {\n iScale\n } = meta;\n const {\n key = 'r'\n } = this._parsing;\n const parsed = new Array(count);\n let i, ilen, index, item;\n for (i = 0, ilen = count; i < ilen; ++i) {\n index = i + start;\n item = data[index];\n parsed[i] = {\n r: iScale.parse(resolveObjectKey(item, key), index)\n };\n }\n return parsed;\n}\nconst EPSILON = Number.EPSILON || 1e-14;\nconst getPoint = (points, i) => i < points.length && !points[i].skip && points[i];\nconst getValueAxis = indexAxis => indexAxis === 'x' ? 'y' : 'x';\nfunction splineCurve(firstPoint, middlePoint, afterPoint, t) {\n // Props to Rob Spencer at scaled innovation for his post on splining between points\n // http://scaledinnovation.com/analytics/splines/aboutSplines.html\n // This function must also respect \"skipped\" points\n const previous = firstPoint.skip ? middlePoint : firstPoint;\n const current = middlePoint;\n const next = afterPoint.skip ? middlePoint : afterPoint;\n const d01 = distanceBetweenPoints(current, previous);\n const d12 = distanceBetweenPoints(next, current);\n let s01 = d01 / (d01 + d12);\n let s12 = d12 / (d01 + d12);\n // If all points are the same, s01 & s02 will be inf\n s01 = isNaN(s01) ? 0 : s01;\n s12 = isNaN(s12) ? 0 : s12;\n const fa = t * s01; // scaling factor for triangle Ta\n const fb = t * s12;\n return {\n previous: {\n x: current.x - fa * (next.x - previous.x),\n y: current.y - fa * (next.y - previous.y)\n },\n next: {\n x: current.x + fb * (next.x - previous.x),\n y: current.y + fb * (next.y - previous.y)\n }\n };\n}\n/**\n * Adjust tangents to ensure monotonic properties\n */\nfunction monotoneAdjust(points, deltaK, mK) {\n const pointsLen = points.length;\n let alphaK, betaK, tauK, squaredMagnitude, pointCurrent;\n let pointAfter = getPoint(points, 0);\n for (let i = 0; i < pointsLen - 1; ++i) {\n pointCurrent = pointAfter;\n pointAfter = getPoint(points, i + 1);\n if (!pointCurrent || !pointAfter) {\n continue;\n }\n if (almostEquals(deltaK[i], 0, EPSILON)) {\n mK[i] = mK[i + 1] = 0;\n continue;\n }\n alphaK = mK[i] / deltaK[i];\n betaK = mK[i + 1] / deltaK[i];\n squaredMagnitude = Math.pow(alphaK, 2) + Math.pow(betaK, 2);\n if (squaredMagnitude <= 9) {\n continue;\n }\n tauK = 3 / Math.sqrt(squaredMagnitude);\n mK[i] = alphaK * tauK * deltaK[i];\n mK[i + 1] = betaK * tauK * deltaK[i];\n }\n}\nfunction monotoneCompute(points, mK, indexAxis = 'x') {\n const valueAxis = getValueAxis(indexAxis);\n const pointsLen = points.length;\n let delta, pointBefore, pointCurrent;\n let pointAfter = getPoint(points, 0);\n for (let i = 0; i < pointsLen; ++i) {\n pointBefore = pointCurrent;\n pointCurrent = pointAfter;\n pointAfter = getPoint(points, i + 1);\n if (!pointCurrent) {\n continue;\n }\n const iPixel = pointCurrent[indexAxis];\n const vPixel = pointCurrent[valueAxis];\n if (pointBefore) {\n delta = (iPixel - pointBefore[indexAxis]) / 3;\n pointCurrent[`cp1${indexAxis}`] = iPixel - delta;\n pointCurrent[`cp1${valueAxis}`] = vPixel - delta * mK[i];\n }\n if (pointAfter) {\n delta = (pointAfter[indexAxis] - iPixel) / 3;\n pointCurrent[`cp2${indexAxis}`] = iPixel + delta;\n pointCurrent[`cp2${valueAxis}`] = vPixel + delta * mK[i];\n }\n }\n}\n/**\n * This function calculates B\xE9zier control points in a similar way than |splineCurve|,\n * but preserves monotonicity of the provided data and ensures no local extremums are added\n * between the dataset discrete points due to the interpolation.\n * See : https://en.wikipedia.org/wiki/Monotone_cubic_interpolation\n */\nfunction splineCurveMonotone(points, indexAxis = 'x') {\n const valueAxis = getValueAxis(indexAxis);\n const pointsLen = points.length;\n const deltaK = Array(pointsLen).fill(0);\n const mK = Array(pointsLen);\n // Calculate slopes (deltaK) and initialize tangents (mK)\n let i, pointBefore, pointCurrent;\n let pointAfter = getPoint(points, 0);\n for (i = 0; i < pointsLen; ++i) {\n pointBefore = pointCurrent;\n pointCurrent = pointAfter;\n pointAfter = getPoint(points, i + 1);\n if (!pointCurrent) {\n continue;\n }\n if (pointAfter) {\n const slopeDelta = pointAfter[indexAxis] - pointCurrent[indexAxis];\n // In the case of two points that appear at the same x pixel, slopeDeltaX is 0\n deltaK[i] = slopeDelta !== 0 ? (pointAfter[valueAxis] - pointCurrent[valueAxis]) / slopeDelta : 0;\n }\n mK[i] = !pointBefore ? deltaK[i] : !pointAfter ? deltaK[i - 1] : sign(deltaK[i - 1]) !== sign(deltaK[i]) ? 0 : (deltaK[i - 1] + deltaK[i]) / 2;\n }\n monotoneAdjust(points, deltaK, mK);\n monotoneCompute(points, mK, indexAxis);\n}\nfunction capControlPoint(pt, min, max) {\n return Math.max(Math.min(pt, max), min);\n}\nfunction capBezierPoints(points, area) {\n let i, ilen, point, inArea, inAreaPrev;\n let inAreaNext = _isPointInArea(points[0], area);\n for (i = 0, ilen = points.length; i < ilen; ++i) {\n inAreaPrev = inArea;\n inArea = inAreaNext;\n inAreaNext = i < ilen - 1 && _isPointInArea(points[i + 1], area);\n if (!inArea) {\n continue;\n }\n point = points[i];\n if (inAreaPrev) {\n point.cp1x = capControlPoint(point.cp1x, area.left, area.right);\n point.cp1y = capControlPoint(point.cp1y, area.top, area.bottom);\n }\n if (inAreaNext) {\n point.cp2x = capControlPoint(point.cp2x, area.left, area.right);\n point.cp2y = capControlPoint(point.cp2y, area.top, area.bottom);\n }\n }\n}\n/**\n * @private\n */\nfunction _updateBezierControlPoints(points, options, area, loop, indexAxis) {\n let i, ilen, point, controlPoints;\n // Only consider points that are drawn in case the spanGaps option is used\n if (options.spanGaps) {\n points = points.filter(pt => !pt.skip);\n }\n if (options.cubicInterpolationMode === 'monotone') {\n splineCurveMonotone(points, indexAxis);\n } else {\n let prev = loop ? points[points.length - 1] : points[0];\n for (i = 0, ilen = points.length; i < ilen; ++i) {\n point = points[i];\n controlPoints = splineCurve(prev, point, points[Math.min(i + 1, ilen - (loop ? 0 : 1)) % ilen], options.tension);\n point.cp1x = controlPoints.previous.x;\n point.cp1y = controlPoints.previous.y;\n point.cp2x = controlPoints.next.x;\n point.cp2y = controlPoints.next.y;\n prev = point;\n }\n }\n if (options.capBezierPoints) {\n capBezierPoints(points, area);\n }\n}\n\n/**\n * @private\n */\nfunction _isDomSupported() {\n return typeof window !== 'undefined' && typeof document !== 'undefined';\n}\n/**\n * @private\n */\nfunction _getParentNode(domNode) {\n let parent = domNode.parentNode;\n if (parent && parent.toString() === '[object ShadowRoot]') {\n parent = parent.host;\n }\n return parent;\n}\n/**\n * convert max-width/max-height values that may be percentages into a number\n * @private\n */\nfunction parseMaxStyle(styleValue, node, parentProperty) {\n let valueInPixels;\n if (typeof styleValue === 'string') {\n valueInPixels = parseInt(styleValue, 10);\n if (styleValue.indexOf('%') !== -1) {\n // percentage * size in dimension\n valueInPixels = valueInPixels / 100 * node.parentNode[parentProperty];\n }\n } else {\n valueInPixels = styleValue;\n }\n return valueInPixels;\n}\nconst getComputedStyle = element => element.ownerDocument.defaultView.getComputedStyle(element, null);\nfunction getStyle(el, property) {\n return getComputedStyle(el).getPropertyValue(property);\n}\nconst positions = ['top', 'right', 'bottom', 'left'];\nfunction getPositionedStyle(styles, style, suffix) {\n const result = {};\n suffix = suffix ? '-' + suffix : '';\n for (let i = 0; i < 4; i++) {\n const pos = positions[i];\n result[pos] = parseFloat(styles[style + '-' + pos + suffix]) || 0;\n }\n result.width = result.left + result.right;\n result.height = result.top + result.bottom;\n return result;\n}\nconst useOffsetPos = (x, y, target) => (x > 0 || y > 0) && (!target || !target.shadowRoot);\n/**\n * @param e\n * @param canvas\n * @returns Canvas position\n */\nfunction getCanvasPosition(e, canvas) {\n const touches = e.touches;\n const source = touches && touches.length ? touches[0] : e;\n const {\n offsetX,\n offsetY\n } = source;\n let box = false;\n let x, y;\n if (useOffsetPos(offsetX, offsetY, e.target)) {\n x = offsetX;\n y = offsetY;\n } else {\n const rect = canvas.getBoundingClientRect();\n x = source.clientX - rect.left;\n y = source.clientY - rect.top;\n box = true;\n }\n return {\n x,\n y,\n box\n };\n}\n/**\n * Gets an event's x, y coordinates, relative to the chart area\n * @param event\n * @param chart\n * @returns x and y coordinates of the event\n */\nfunction getRelativePosition(event, chart) {\n if ('native' in event) {\n return event;\n }\n const {\n canvas,\n currentDevicePixelRatio\n } = chart;\n const style = getComputedStyle(canvas);\n const borderBox = style.boxSizing === 'border-box';\n const paddings = getPositionedStyle(style, 'padding');\n const borders = getPositionedStyle(style, 'border', 'width');\n const {\n x,\n y,\n box\n } = getCanvasPosition(event, canvas);\n const xOffset = paddings.left + (box && borders.left);\n const yOffset = paddings.top + (box && borders.top);\n let {\n width,\n height\n } = chart;\n if (borderBox) {\n width -= paddings.width + borders.width;\n height -= paddings.height + borders.height;\n }\n return {\n x: Math.round((x - xOffset) / width * canvas.width / currentDevicePixelRatio),\n y: Math.round((y - yOffset) / height * canvas.height / currentDevicePixelRatio)\n };\n}\nfunction getContainerSize(canvas, width, height) {\n let maxWidth, maxHeight;\n if (width === undefined || height === undefined) {\n const container = canvas && _getParentNode(canvas);\n if (!container) {\n width = canvas.clientWidth;\n height = canvas.clientHeight;\n } else {\n const rect = container.getBoundingClientRect(); // this is the border box of the container\n const containerStyle = getComputedStyle(container);\n const containerBorder = getPositionedStyle(containerStyle, 'border', 'width');\n const containerPadding = getPositionedStyle(containerStyle, 'padding');\n width = rect.width - containerPadding.width - containerBorder.width;\n height = rect.height - containerPadding.height - containerBorder.height;\n maxWidth = parseMaxStyle(containerStyle.maxWidth, container, 'clientWidth');\n maxHeight = parseMaxStyle(containerStyle.maxHeight, container, 'clientHeight');\n }\n }\n return {\n width,\n height,\n maxWidth: maxWidth || INFINITY,\n maxHeight: maxHeight || INFINITY\n };\n}\nconst round1 = v => Math.round(v * 10) / 10;\n// eslint-disable-next-line complexity\nfunction getMaximumSize(canvas, bbWidth, bbHeight, aspectRatio) {\n const style = getComputedStyle(canvas);\n const margins = getPositionedStyle(style, 'margin');\n const maxWidth = parseMaxStyle(style.maxWidth, canvas, 'clientWidth') || INFINITY;\n const maxHeight = parseMaxStyle(style.maxHeight, canvas, 'clientHeight') || INFINITY;\n const containerSize = getContainerSize(canvas, bbWidth, bbHeight);\n let {\n width,\n height\n } = containerSize;\n if (style.boxSizing === 'content-box') {\n const borders = getPositionedStyle(style, 'border', 'width');\n const paddings = getPositionedStyle(style, 'padding');\n width -= paddings.width + borders.width;\n height -= paddings.height + borders.height;\n }\n width = Math.max(0, width - margins.width);\n height = Math.max(0, aspectRatio ? width / aspectRatio : height - margins.height);\n width = round1(Math.min(width, maxWidth, containerSize.maxWidth));\n height = round1(Math.min(height, maxHeight, containerSize.maxHeight));\n if (width && !height) {\n // https://github.com/chartjs/Chart.js/issues/4659\n // If the canvas has width, but no height, default to aspectRatio of 2 (canvas default)\n height = round1(width / 2);\n }\n const maintainHeight = bbWidth !== undefined || bbHeight !== undefined;\n if (maintainHeight && aspectRatio && containerSize.height && height > containerSize.height) {\n height = containerSize.height;\n width = round1(Math.floor(height * aspectRatio));\n }\n return {\n width,\n height\n };\n}\n/**\n * @param chart\n * @param forceRatio\n * @param forceStyle\n * @returns True if the canvas context size or transformation has changed.\n */\nfunction retinaScale(chart, forceRatio, forceStyle) {\n const pixelRatio = forceRatio || 1;\n const deviceHeight = round1(chart.height * pixelRatio);\n const deviceWidth = round1(chart.width * pixelRatio);\n chart.height = round1(chart.height);\n chart.width = round1(chart.width);\n const canvas = chart.canvas;\n // If no style has been set on the canvas, the render size is used as display size,\n // making the chart visually bigger, so let's enforce it to the \"correct\" values.\n // See https://github.com/chartjs/Chart.js/issues/3575\n if (canvas.style && (forceStyle || !canvas.style.height && !canvas.style.width)) {\n canvas.style.height = `${chart.height}px`;\n canvas.style.width = `${chart.width}px`;\n }\n if (chart.currentDevicePixelRatio !== pixelRatio || canvas.height !== deviceHeight || canvas.width !== deviceWidth) {\n chart.currentDevicePixelRatio = pixelRatio;\n canvas.height = deviceHeight;\n canvas.width = deviceWidth;\n chart.ctx.setTransform(pixelRatio, 0, 0, pixelRatio, 0, 0);\n return true;\n }\n return false;\n}\n/**\n * Detects support for options object argument in addEventListener.\n * https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#Safely_detecting_option_support\n * @private\n */\nconst supportsEventListenerOptions = function () {\n let passiveSupported = false;\n try {\n const options = {\n get passive() {\n passiveSupported = true;\n return false;\n }\n };\n if (_isDomSupported()) {\n window.addEventListener('test', null, options);\n window.removeEventListener('test', null, options);\n }\n } catch (e) {\n // continue regardless of error\n }\n return passiveSupported;\n}();\n/**\n * The \"used\" size is the final value of a dimension property after all calculations have\n * been performed. This method uses the computed style of `element` but returns undefined\n * if the computed style is not expressed in pixels. That can happen in some cases where\n * `element` has a size relative to its parent and this last one is not yet displayed,\n * for example because of `display: none` on a parent node.\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/used_value\n * @returns Size in pixels or undefined if unknown.\n */\nfunction readUsedSize(element, property) {\n const value = getStyle(element, property);\n const matches = value && value.match(/^(\\d+)(\\.\\d+)?px$/);\n return matches ? +matches[1] : undefined;\n}\n\n/**\n * @private\n */\nfunction _pointInLine(p1, p2, t, mode) {\n return {\n x: p1.x + t * (p2.x - p1.x),\n y: p1.y + t * (p2.y - p1.y)\n };\n}\n/**\n * @private\n */\nfunction _steppedInterpolation(p1, p2, t, mode) {\n return {\n x: p1.x + t * (p2.x - p1.x),\n y: mode === 'middle' ? t < 0.5 ? p1.y : p2.y : mode === 'after' ? t < 1 ? p1.y : p2.y : t > 0 ? p2.y : p1.y\n };\n}\n/**\n * @private\n */\nfunction _bezierInterpolation(p1, p2, t, mode) {\n const cp1 = {\n x: p1.cp2x,\n y: p1.cp2y\n };\n const cp2 = {\n x: p2.cp1x,\n y: p2.cp1y\n };\n const a = _pointInLine(p1, cp1, t);\n const b = _pointInLine(cp1, cp2, t);\n const c = _pointInLine(cp2, p2, t);\n const d = _pointInLine(a, b, t);\n const e = _pointInLine(b, c, t);\n return _pointInLine(d, e, t);\n}\nconst getRightToLeftAdapter = function (rectX, width) {\n return {\n x(x) {\n return rectX + rectX + width - x;\n },\n setWidth(w) {\n width = w;\n },\n textAlign(align) {\n if (align === 'center') {\n return align;\n }\n return align === 'right' ? 'left' : 'right';\n },\n xPlus(x, value) {\n return x - value;\n },\n leftForLtr(x, itemWidth) {\n return x - itemWidth;\n }\n };\n};\nconst getLeftToRightAdapter = function () {\n return {\n x(x) {\n return x;\n },\n setWidth(w) {},\n textAlign(align) {\n return align;\n },\n xPlus(x, value) {\n return x + value;\n },\n leftForLtr(x, _itemWidth) {\n return x;\n }\n };\n};\nfunction getRtlAdapter(rtl, rectX, width) {\n return rtl ? getRightToLeftAdapter(rectX, width) : getLeftToRightAdapter();\n}\nfunction overrideTextDirection(ctx, direction) {\n let style, original;\n if (direction === 'ltr' || direction === 'rtl') {\n style = ctx.canvas.style;\n original = [style.getPropertyValue('direction'), style.getPropertyPriority('direction')];\n style.setProperty('direction', direction, 'important');\n ctx.prevTextDirection = original;\n }\n}\nfunction restoreTextDirection(ctx, original) {\n if (original !== undefined) {\n delete ctx.prevTextDirection;\n ctx.canvas.style.setProperty('direction', original[0], original[1]);\n }\n}\nfunction propertyFn(property) {\n if (property === 'angle') {\n return {\n between: _angleBetween,\n compare: _angleDiff,\n normalize: _normalizeAngle\n };\n }\n return {\n between: _isBetween,\n compare: (a, b) => a - b,\n normalize: x => x\n };\n}\nfunction normalizeSegment({\n start,\n end,\n count,\n loop,\n style\n}) {\n return {\n start: start % count,\n end: end % count,\n loop: loop && (end - start + 1) % count === 0,\n style\n };\n}\nfunction getSegment(segment, points, bounds) {\n const {\n property,\n start: startBound,\n end: endBound\n } = bounds;\n const {\n between,\n normalize\n } = propertyFn(property);\n const count = points.length;\n let {\n start,\n end,\n loop\n } = segment;\n let i, ilen;\n if (loop) {\n start += count;\n end += count;\n for (i = 0, ilen = count; i < ilen; ++i) {\n if (!between(normalize(points[start % count][property]), startBound, endBound)) {\n break;\n }\n start--;\n end--;\n }\n start %= count;\n end %= count;\n }\n if (end < start) {\n end += count;\n }\n return {\n start,\n end,\n loop,\n style: segment.style\n };\n}\nfunction _boundSegment(segment, points, bounds) {\n if (!bounds) {\n return [segment];\n }\n const {\n property,\n start: startBound,\n end: endBound\n } = bounds;\n const count = points.length;\n const {\n compare,\n between,\n normalize\n } = propertyFn(property);\n const {\n start,\n end,\n loop,\n style\n } = getSegment(segment, points, bounds);\n const result = [];\n let inside = false;\n let subStart = null;\n let value, point, prevValue;\n const startIsBefore = () => between(startBound, prevValue, value) && compare(startBound, prevValue) !== 0;\n const endIsBefore = () => compare(endBound, value) === 0 || between(endBound, prevValue, value);\n const shouldStart = () => inside || startIsBefore();\n const shouldStop = () => !inside || endIsBefore();\n for (let i = start, prev = start; i <= end; ++i) {\n point = points[i % count];\n if (point.skip) {\n continue;\n }\n value = normalize(point[property]);\n if (value === prevValue) {\n continue;\n }\n inside = between(value, startBound, endBound);\n if (subStart === null && shouldStart()) {\n subStart = compare(value, startBound) === 0 ? i : prev;\n }\n if (subStart !== null && shouldStop()) {\n result.push(normalizeSegment({\n start: subStart,\n end: i,\n loop,\n count,\n style\n }));\n subStart = null;\n }\n prev = i;\n prevValue = value;\n }\n if (subStart !== null) {\n result.push(normalizeSegment({\n start: subStart,\n end,\n loop,\n count,\n style\n }));\n }\n return result;\n}\nfunction _boundSegments(line, bounds) {\n const result = [];\n const segments = line.segments;\n for (let i = 0; i < segments.length; i++) {\n const sub = _boundSegment(segments[i], line.points, bounds);\n if (sub.length) {\n result.push(...sub);\n }\n }\n return result;\n}\nfunction findStartAndEnd(points, count, loop, spanGaps) {\n let start = 0;\n let end = count - 1;\n if (loop && !spanGaps) {\n while (start < count && !points[start].skip) {\n start++;\n }\n }\n while (start < count && points[start].skip) {\n start++;\n }\n start %= count;\n if (loop) {\n end += start;\n }\n while (end > start && points[end % count].skip) {\n end--;\n }\n end %= count;\n return {\n start,\n end\n };\n}\nfunction solidSegments(points, start, max, loop) {\n const count = points.length;\n const result = [];\n let last = start;\n let prev = points[start];\n let end;\n for (end = start + 1; end <= max; ++end) {\n const cur = points[end % count];\n if (cur.skip || cur.stop) {\n if (!prev.skip) {\n loop = false;\n result.push({\n start: start % count,\n end: (end - 1) % count,\n loop\n });\n start = last = cur.stop ? end : null;\n }\n } else {\n last = end;\n if (prev.skip) {\n start = end;\n }\n }\n prev = cur;\n }\n if (last !== null) {\n result.push({\n start: start % count,\n end: last % count,\n loop\n });\n }\n return result;\n}\nfunction _computeSegments(line, segmentOptions) {\n const points = line.points;\n const spanGaps = line.options.spanGaps;\n const count = points.length;\n if (!count) {\n return [];\n }\n const loop = !!line._loop;\n const {\n start,\n end\n } = findStartAndEnd(points, count, loop, spanGaps);\n if (spanGaps === true) {\n return splitByStyles(line, [{\n start,\n end,\n loop\n }], points, segmentOptions);\n }\n const max = end < start ? end + count : end;\n const completeLoop = !!line._fullLoop && start === 0 && end === count - 1;\n return splitByStyles(line, solidSegments(points, start, max, completeLoop), points, segmentOptions);\n}\nfunction splitByStyles(line, segments, points, segmentOptions) {\n if (!segmentOptions || !segmentOptions.setContext || !points) {\n return segments;\n }\n return doSplitByStyles(line, segments, points, segmentOptions);\n}\nfunction doSplitByStyles(line, segments, points, segmentOptions) {\n const chartContext = line._chart.getContext();\n const baseStyle = readStyle(line.options);\n const {\n _datasetIndex: datasetIndex,\n options: {\n spanGaps\n }\n } = line;\n const count = points.length;\n const result = [];\n let prevStyle = baseStyle;\n let start = segments[0].start;\n let i = start;\n function addStyle(s, e, l, st) {\n const dir = spanGaps ? -1 : 1;\n if (s === e) {\n return;\n }\n s += count;\n while (points[s % count].skip) {\n s -= dir;\n }\n while (points[e % count].skip) {\n e += dir;\n }\n if (s % count !== e % count) {\n result.push({\n start: s % count,\n end: e % count,\n loop: l,\n style: st\n });\n prevStyle = st;\n start = e % count;\n }\n }\n for (const segment of segments) {\n start = spanGaps ? start : segment.start;\n let prev = points[start % count];\n let style;\n for (i = start + 1; i <= segment.end; i++) {\n const pt = points[i % count];\n style = readStyle(segmentOptions.setContext(createContext(chartContext, {\n type: 'segment',\n p0: prev,\n p1: pt,\n p0DataIndex: (i - 1) % count,\n p1DataIndex: i % count,\n datasetIndex\n })));\n if (styleChanged(style, prevStyle)) {\n addStyle(start, i - 1, segment.loop, prevStyle);\n }\n prev = pt;\n prevStyle = style;\n }\n if (start < i - 1) {\n addStyle(start, i - 1, segment.loop, prevStyle);\n }\n }\n return result;\n}\nfunction readStyle(options) {\n return {\n backgroundColor: options.backgroundColor,\n borderCapStyle: options.borderCapStyle,\n borderDash: options.borderDash,\n borderDashOffset: options.borderDashOffset,\n borderJoinStyle: options.borderJoinStyle,\n borderWidth: options.borderWidth,\n borderColor: options.borderColor\n };\n}\nfunction styleChanged(style, prevStyle) {\n if (!prevStyle) {\n return false;\n }\n const cache = [];\n const replacer = function (key, value) {\n if (!isPatternOrGradient(value)) {\n return value;\n }\n if (!cache.includes(value)) {\n cache.push(value);\n }\n return cache.indexOf(value);\n };\n return JSON.stringify(style, replacer) !== JSON.stringify(prevStyle, replacer);\n}\nfunction getSizeForArea(scale, chartArea, field) {\n return scale.options.clip ? scale[field] : chartArea[field];\n}\nfunction getDatasetArea(meta, chartArea) {\n const {\n xScale,\n yScale\n } = meta;\n if (xScale && yScale) {\n return {\n left: getSizeForArea(xScale, chartArea, 'left'),\n right: getSizeForArea(xScale, chartArea, 'right'),\n top: getSizeForArea(yScale, chartArea, 'top'),\n bottom: getSizeForArea(yScale, chartArea, 'bottom')\n };\n }\n return chartArea;\n}\nfunction getDatasetClipArea(chart, meta) {\n const clip = meta._clip;\n if (clip.disabled) {\n return false;\n }\n const area = getDatasetArea(meta, chart.chartArea);\n return {\n left: clip.left === false ? 0 : area.left - (clip.left === true ? 0 : clip.left),\n right: clip.right === false ? chart.width : area.right + (clip.right === true ? 0 : clip.right),\n top: clip.top === false ? 0 : area.top - (clip.top === true ? 0 : clip.top),\n bottom: clip.bottom === false ? chart.height : area.bottom + (clip.bottom === true ? 0 : clip.bottom)\n };\n}\nexport { unclipArea as $, _rlookupByKey as A, _lookupByKey as B, _isPointInArea as C, getAngleFromPoint as D, toPadding as E, each as F, getMaximumSize as G, HALF_PI as H, _getParentNode as I, readUsedSize as J, supportsEventListenerOptions as K, throttled as L, _isDomSupported as M, _factorize as N, finiteOrDefault as O, PI as P, callback as Q, _addGrace as R, _limitValue as S, TAU as T, toDegrees as U, _measureText as V, _int16Range as W, _alignPixel as X, clipArea as Y, renderText as Z, _arrayUnique as _, resolve as a, getStyle as a$, toFont as a0, _toLeftRightCenter as a1, _alignStartEnd as a2, overrides as a3, merge as a4, _capitalize as a5, descriptors as a6, isFunction as a7, _attachContext as a8, _createResolver as a9, getRtlAdapter as aA, overrideTextDirection as aB, _textX as aC, restoreTextDirection as aD, drawPointLegend as aE, distanceBetweenPoints as aF, noop as aG, _setMinAndMaxByKey as aH, niceNum as aI, almostWhole as aJ, almostEquals as aK, _decimalPlaces as aL, Ticks as aM, log10 as aN, _longestText as aO, _filterBetween as aP, _lookup as aQ, isPatternOrGradient as aR, getHoverColor as aS, clone as aT, _merger as aU, _mergerIf as aV, _deprecated as aW, _splitKey as aX, toFontString as aY, splineCurve as aZ, splineCurveMonotone as a_, _descriptors as aa, mergeIf as ab, uid as ac, debounce as ad, retinaScale as ae, clearCanvas as af, setsEqual as ag, getDatasetClipArea as ah, _elementsEqual as ai, _isClickEvent as aj, _isBetween as ak, _normalizeAngle as al, _readValueToProps as am, _updateBezierControlPoints as an, _computeSegments as ao, _boundSegments as ap, _steppedInterpolation as aq, _bezierInterpolation as ar, _pointInLine as as, _steppedLineTo as at, _bezierCurveTo as au, drawPoint as av, addRoundedRectPath as aw, toTRBL as ax, toTRBLCorners as ay, _boundSegment as az, isArray as b, fontString as b0, toLineHeight as b1, PITAU as b2, INFINITY as b3, RAD_PER_DEG as b4, QUARTER_PI as b5, TWO_THIRDS_PI as b6, _angleDiff as b7, color as c, defaults as d, effects as e, resolveObjectKey as f, isNumberFinite as g, defined as h, isObject as i, createContext as j, isNullOrUndef as k, listenArrayEvents as l, toPercentage as m, toDimension as n, formatNumber as o, _angleBetween as p, _getStartAndCountOfVisiblePoints as q, requestAnimFrame as r, sign as s, toRadians as t, unlistenArrayEvents as u, valueOrDefault as v, _scaleRangesChanged as w, isNumber as x, _parseObjectDataRadialScale as y, getRelativePosition as z };\n","/*!\n * Chart.js v4.5.1\n * https://www.chartjs.org\n * (c) 2025 Chart.js Contributors\n * Released under the MIT License\n */\nimport { r as requestAnimFrame, a as resolve, e as effects, c as color, i as isObject, d as defaults, b as isArray, v as valueOrDefault, u as unlistenArrayEvents, l as listenArrayEvents, f as resolveObjectKey, g as isNumberFinite, h as defined, s as sign, j as createContext, k as isNullOrUndef, _ as _arrayUnique, t as toRadians, m as toPercentage, n as toDimension, T as TAU, o as formatNumber, p as _angleBetween, H as HALF_PI, P as PI, q as _getStartAndCountOfVisiblePoints, w as _scaleRangesChanged, x as isNumber, y as _parseObjectDataRadialScale, z as getRelativePosition, A as _rlookupByKey, B as _lookupByKey, C as _isPointInArea, D as getAngleFromPoint, E as toPadding, F as each, G as getMaximumSize, I as _getParentNode, J as readUsedSize, K as supportsEventListenerOptions, L as throttled, M as _isDomSupported, N as _factorize, O as finiteOrDefault, Q as callback, R as _addGrace, S as _limitValue, U as toDegrees, V as _measureText, W as _int16Range, X as _alignPixel, Y as clipArea, Z as renderText, $ as unclipArea, a0 as toFont, a1 as _toLeftRightCenter, a2 as _alignStartEnd, a3 as overrides, a4 as merge, a5 as _capitalize, a6 as descriptors, a7 as isFunction, a8 as _attachContext, a9 as _createResolver, aa as _descriptors, ab as mergeIf, ac as uid, ad as debounce, ae as retinaScale, af as clearCanvas, ag as setsEqual, ah as getDatasetClipArea, ai as _elementsEqual, aj as _isClickEvent, ak as _isBetween, al as _normalizeAngle, am as _readValueToProps, an as _updateBezierControlPoints, ao as _computeSegments, ap as _boundSegments, aq as _steppedInterpolation, ar as _bezierInterpolation, as as _pointInLine, at as _steppedLineTo, au as _bezierCurveTo, av as drawPoint, aw as addRoundedRectPath, ax as toTRBL, ay as toTRBLCorners, az as _boundSegment, aA as getRtlAdapter, aB as overrideTextDirection, aC as _textX, aD as restoreTextDirection, aE as drawPointLegend, aF as distanceBetweenPoints, aG as noop, aH as _setMinAndMaxByKey, aI as niceNum, aJ as almostWhole, aK as almostEquals, aL as _decimalPlaces, aM as Ticks, aN as log10, aO as _longestText, aP as _filterBetween, aQ as _lookup } from './chunks/helpers.dataset.js';\nimport '@kurkle/color';\nclass Animator {\n constructor() {\n this._request = null;\n this._charts = new Map();\n this._running = false;\n this._lastDate = undefined;\n }\n _notify(chart, anims, date, type) {\n const callbacks = anims.listeners[type];\n const numSteps = anims.duration;\n callbacks.forEach(fn => fn({\n chart,\n initial: anims.initial,\n numSteps,\n currentStep: Math.min(date - anims.start, numSteps)\n }));\n }\n _refresh() {\n if (this._request) {\n return;\n }\n this._running = true;\n this._request = requestAnimFrame.call(window, () => {\n this._update();\n this._request = null;\n if (this._running) {\n this._refresh();\n }\n });\n }\n _update(date = Date.now()) {\n let remaining = 0;\n this._charts.forEach((anims, chart) => {\n if (!anims.running || !anims.items.length) {\n return;\n }\n const items = anims.items;\n let i = items.length - 1;\n let draw = false;\n let item;\n for (; i >= 0; --i) {\n item = items[i];\n if (item._active) {\n if (item._total > anims.duration) {\n anims.duration = item._total;\n }\n item.tick(date);\n draw = true;\n } else {\n items[i] = items[items.length - 1];\n items.pop();\n }\n }\n if (draw) {\n chart.draw();\n this._notify(chart, anims, date, 'progress');\n }\n if (!items.length) {\n anims.running = false;\n this._notify(chart, anims, date, 'complete');\n anims.initial = false;\n }\n remaining += items.length;\n });\n this._lastDate = date;\n if (remaining === 0) {\n this._running = false;\n }\n }\n _getAnims(chart) {\n const charts = this._charts;\n let anims = charts.get(chart);\n if (!anims) {\n anims = {\n running: false,\n initial: true,\n items: [],\n listeners: {\n complete: [],\n progress: []\n }\n };\n charts.set(chart, anims);\n }\n return anims;\n }\n listen(chart, event, cb) {\n this._getAnims(chart).listeners[event].push(cb);\n }\n add(chart, items) {\n if (!items || !items.length) {\n return;\n }\n this._getAnims(chart).items.push(...items);\n }\n has(chart) {\n return this._getAnims(chart).items.length > 0;\n }\n start(chart) {\n const anims = this._charts.get(chart);\n if (!anims) {\n return;\n }\n anims.running = true;\n anims.start = Date.now();\n anims.duration = anims.items.reduce((acc, cur) => Math.max(acc, cur._duration), 0);\n this._refresh();\n }\n running(chart) {\n if (!this._running) {\n return false;\n }\n const anims = this._charts.get(chart);\n if (!anims || !anims.running || !anims.items.length) {\n return false;\n }\n return true;\n }\n stop(chart) {\n const anims = this._charts.get(chart);\n if (!anims || !anims.items.length) {\n return;\n }\n const items = anims.items;\n let i = items.length - 1;\n for (; i >= 0; --i) {\n items[i].cancel();\n }\n anims.items = [];\n this._notify(chart, anims, Date.now(), 'complete');\n }\n remove(chart) {\n return this._charts.delete(chart);\n }\n}\nvar animator = /* #__PURE__ */new Animator();\nconst transparent = 'transparent';\nconst interpolators = {\n boolean(from, to, factor) {\n return factor > 0.5 ? to : from;\n },\n color(from, to, factor) {\n const c0 = color(from || transparent);\n const c1 = c0.valid && color(to || transparent);\n return c1 && c1.valid ? c1.mix(c0, factor).hexString() : to;\n },\n number(from, to, factor) {\n return from + (to - from) * factor;\n }\n};\nclass Animation {\n constructor(cfg, target, prop, to) {\n const currentValue = target[prop];\n to = resolve([cfg.to, to, currentValue, cfg.from]);\n const from = resolve([cfg.from, currentValue, to]);\n this._active = true;\n this._fn = cfg.fn || interpolators[cfg.type || typeof from];\n this._easing = effects[cfg.easing] || effects.linear;\n this._start = Math.floor(Date.now() + (cfg.delay || 0));\n this._duration = this._total = Math.floor(cfg.duration);\n this._loop = !!cfg.loop;\n this._target = target;\n this._prop = prop;\n this._from = from;\n this._to = to;\n this._promises = undefined;\n }\n active() {\n return this._active;\n }\n update(cfg, to, date) {\n if (this._active) {\n this._notify(false);\n const currentValue = this._target[this._prop];\n const elapsed = date - this._start;\n const remain = this._duration - elapsed;\n this._start = date;\n this._duration = Math.floor(Math.max(remain, cfg.duration));\n this._total += elapsed;\n this._loop = !!cfg.loop;\n this._to = resolve([cfg.to, to, currentValue, cfg.from]);\n this._from = resolve([cfg.from, currentValue, to]);\n }\n }\n cancel() {\n if (this._active) {\n this.tick(Date.now());\n this._active = false;\n this._notify(false);\n }\n }\n tick(date) {\n const elapsed = date - this._start;\n const duration = this._duration;\n const prop = this._prop;\n const from = this._from;\n const loop = this._loop;\n const to = this._to;\n let factor;\n this._active = from !== to && (loop || elapsed < duration);\n if (!this._active) {\n this._target[prop] = to;\n this._notify(true);\n return;\n }\n if (elapsed < 0) {\n this._target[prop] = from;\n return;\n }\n factor = elapsed / duration % 2;\n factor = loop && factor > 1 ? 2 - factor : factor;\n factor = this._easing(Math.min(1, Math.max(0, factor)));\n this._target[prop] = this._fn(from, to, factor);\n }\n wait() {\n const promises = this._promises || (this._promises = []);\n return new Promise((res, rej) => {\n promises.push({\n res,\n rej\n });\n });\n }\n _notify(resolved) {\n const method = resolved ? 'res' : 'rej';\n const promises = this._promises || [];\n for (let i = 0; i < promises.length; i++) {\n promises[i][method]();\n }\n }\n}\nclass Animations {\n constructor(chart, config) {\n this._chart = chart;\n this._properties = new Map();\n this.configure(config);\n }\n configure(config) {\n if (!isObject(config)) {\n return;\n }\n const animationOptions = Object.keys(defaults.animation);\n const animatedProps = this._properties;\n Object.getOwnPropertyNames(config).forEach(key => {\n const cfg = config[key];\n if (!isObject(cfg)) {\n return;\n }\n const resolved = {};\n for (const option of animationOptions) {\n resolved[option] = cfg[option];\n }\n (isArray(cfg.properties) && cfg.properties || [key]).forEach(prop => {\n if (prop === key || !animatedProps.has(prop)) {\n animatedProps.set(prop, resolved);\n }\n });\n });\n }\n _animateOptions(target, values) {\n const newOptions = values.options;\n const options = resolveTargetOptions(target, newOptions);\n if (!options) {\n return [];\n }\n const animations = this._createAnimations(options, newOptions);\n if (newOptions.$shared) {\n awaitAll(target.options.$animations, newOptions).then(() => {\n target.options = newOptions;\n }, () => {});\n }\n return animations;\n }\n _createAnimations(target, values) {\n const animatedProps = this._properties;\n const animations = [];\n const running = target.$animations || (target.$animations = {});\n const props = Object.keys(values);\n const date = Date.now();\n let i;\n for (i = props.length - 1; i >= 0; --i) {\n const prop = props[i];\n if (prop.charAt(0) === '$') {\n continue;\n }\n if (prop === 'options') {\n animations.push(...this._animateOptions(target, values));\n continue;\n }\n const value = values[prop];\n let animation = running[prop];\n const cfg = animatedProps.get(prop);\n if (animation) {\n if (cfg && animation.active()) {\n animation.update(cfg, value, date);\n continue;\n } else {\n animation.cancel();\n }\n }\n if (!cfg || !cfg.duration) {\n target[prop] = value;\n continue;\n }\n running[prop] = animation = new Animation(cfg, target, prop, value);\n animations.push(animation);\n }\n return animations;\n }\n update(target, values) {\n if (this._properties.size === 0) {\n Object.assign(target, values);\n return;\n }\n const animations = this._createAnimations(target, values);\n if (animations.length) {\n animator.add(this._chart, animations);\n return true;\n }\n }\n}\nfunction awaitAll(animations, properties) {\n const running = [];\n const keys = Object.keys(properties);\n for (let i = 0; i < keys.length; i++) {\n const anim = animations[keys[i]];\n if (anim && anim.active()) {\n running.push(anim.wait());\n }\n }\n return Promise.all(running);\n}\nfunction resolveTargetOptions(target, newOptions) {\n if (!newOptions) {\n return;\n }\n let options = target.options;\n if (!options) {\n target.options = newOptions;\n return;\n }\n if (options.$shared) {\n target.options = options = Object.assign({}, options, {\n $shared: false,\n $animations: {}\n });\n }\n return options;\n}\nfunction scaleClip(scale, allowedOverflow) {\n const opts = scale && scale.options || {};\n const reverse = opts.reverse;\n const min = opts.min === undefined ? allowedOverflow : 0;\n const max = opts.max === undefined ? allowedOverflow : 0;\n return {\n start: reverse ? max : min,\n end: reverse ? min : max\n };\n}\nfunction defaultClip(xScale, yScale, allowedOverflow) {\n if (allowedOverflow === false) {\n return false;\n }\n const x = scaleClip(xScale, allowedOverflow);\n const y = scaleClip(yScale, allowedOverflow);\n return {\n top: y.end,\n right: x.end,\n bottom: y.start,\n left: x.start\n };\n}\nfunction toClip(value) {\n let t, r, b, l;\n if (isObject(value)) {\n t = value.top;\n r = value.right;\n b = value.bottom;\n l = value.left;\n } else {\n t = r = b = l = value;\n }\n return {\n top: t,\n right: r,\n bottom: b,\n left: l,\n disabled: value === false\n };\n}\nfunction getSortedDatasetIndices(chart, filterVisible) {\n const keys = [];\n const metasets = chart._getSortedDatasetMetas(filterVisible);\n let i, ilen;\n for (i = 0, ilen = metasets.length; i < ilen; ++i) {\n keys.push(metasets[i].index);\n }\n return keys;\n}\nfunction applyStack(stack, value, dsIndex, options = {}) {\n const keys = stack.keys;\n const singleMode = options.mode === 'single';\n let i, ilen, datasetIndex, otherValue;\n if (value === null) {\n return;\n }\n let found = false;\n for (i = 0, ilen = keys.length; i < ilen; ++i) {\n datasetIndex = +keys[i];\n if (datasetIndex === dsIndex) {\n found = true;\n if (options.all) {\n continue;\n }\n break;\n }\n otherValue = stack.values[datasetIndex];\n if (isNumberFinite(otherValue) && (singleMode || value === 0 || sign(value) === sign(otherValue))) {\n value += otherValue;\n }\n }\n if (!found && !options.all) {\n return 0;\n }\n return value;\n}\nfunction convertObjectDataToArray(data, meta) {\n const {\n iScale,\n vScale\n } = meta;\n const iAxisKey = iScale.axis === 'x' ? 'x' : 'y';\n const vAxisKey = vScale.axis === 'x' ? 'x' : 'y';\n const keys = Object.keys(data);\n const adata = new Array(keys.length);\n let i, ilen, key;\n for (i = 0, ilen = keys.length; i < ilen; ++i) {\n key = keys[i];\n adata[i] = {\n [iAxisKey]: key,\n [vAxisKey]: data[key]\n };\n }\n return adata;\n}\nfunction isStacked(scale, meta) {\n const stacked = scale && scale.options.stacked;\n return stacked || stacked === undefined && meta.stack !== undefined;\n}\nfunction getStackKey(indexScale, valueScale, meta) {\n return `${indexScale.id}.${valueScale.id}.${meta.stack || meta.type}`;\n}\nfunction getUserBounds(scale) {\n const {\n min,\n max,\n minDefined,\n maxDefined\n } = scale.getUserBounds();\n return {\n min: minDefined ? min : Number.NEGATIVE_INFINITY,\n max: maxDefined ? max : Number.POSITIVE_INFINITY\n };\n}\nfunction getOrCreateStack(stacks, stackKey, indexValue) {\n const subStack = stacks[stackKey] || (stacks[stackKey] = {});\n return subStack[indexValue] || (subStack[indexValue] = {});\n}\nfunction getLastIndexInStack(stack, vScale, positive, type) {\n for (const meta of vScale.getMatchingVisibleMetas(type).reverse()) {\n const value = stack[meta.index];\n if (positive && value > 0 || !positive && value < 0) {\n return meta.index;\n }\n }\n return null;\n}\nfunction updateStacks(controller, parsed) {\n const {\n chart,\n _cachedMeta: meta\n } = controller;\n const stacks = chart._stacks || (chart._stacks = {});\n const {\n iScale,\n vScale,\n index: datasetIndex\n } = meta;\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n const key = getStackKey(iScale, vScale, meta);\n const ilen = parsed.length;\n let stack;\n for (let i = 0; i < ilen; ++i) {\n const item = parsed[i];\n const {\n [iAxis]: index,\n [vAxis]: value\n } = item;\n const itemStacks = item._stacks || (item._stacks = {});\n stack = itemStacks[vAxis] = getOrCreateStack(stacks, key, index);\n stack[datasetIndex] = value;\n stack._top = getLastIndexInStack(stack, vScale, true, meta.type);\n stack._bottom = getLastIndexInStack(stack, vScale, false, meta.type);\n const visualValues = stack._visualValues || (stack._visualValues = {});\n visualValues[datasetIndex] = value;\n }\n}\nfunction getFirstScaleId(chart, axis) {\n const scales = chart.scales;\n return Object.keys(scales).filter(key => scales[key].axis === axis).shift();\n}\nfunction createDatasetContext(parent, index) {\n return createContext(parent, {\n active: false,\n dataset: undefined,\n datasetIndex: index,\n index,\n mode: 'default',\n type: 'dataset'\n });\n}\nfunction createDataContext(parent, index, element) {\n return createContext(parent, {\n active: false,\n dataIndex: index,\n parsed: undefined,\n raw: undefined,\n element,\n index,\n mode: 'default',\n type: 'data'\n });\n}\nfunction clearStacks(meta, items) {\n const datasetIndex = meta.controller.index;\n const axis = meta.vScale && meta.vScale.axis;\n if (!axis) {\n return;\n }\n items = items || meta._parsed;\n for (const parsed of items) {\n const stacks = parsed._stacks;\n if (!stacks || stacks[axis] === undefined || stacks[axis][datasetIndex] === undefined) {\n return;\n }\n delete stacks[axis][datasetIndex];\n if (stacks[axis]._visualValues !== undefined && stacks[axis]._visualValues[datasetIndex] !== undefined) {\n delete stacks[axis]._visualValues[datasetIndex];\n }\n }\n}\nconst isDirectUpdateMode = mode => mode === 'reset' || mode === 'none';\nconst cloneIfNotShared = (cached, shared) => shared ? cached : Object.assign({}, cached);\nconst createStack = (canStack, meta, chart) => canStack && !meta.hidden && meta._stacked && {\n keys: getSortedDatasetIndices(chart, true),\n values: null\n};\nlet DatasetController = /*#__PURE__*/(() => {\n class DatasetController {\n static defaults = {};\n static datasetElementType = null;\n static dataElementType = null;\n constructor(chart, datasetIndex) {\n this.chart = chart;\n this._ctx = chart.ctx;\n this.index = datasetIndex;\n this._cachedDataOpts = {};\n this._cachedMeta = this.getMeta();\n this._type = this._cachedMeta.type;\n this.options = undefined;\n this._parsing = false;\n this._data = undefined;\n this._objectData = undefined;\n this._sharedOptions = undefined;\n this._drawStart = undefined;\n this._drawCount = undefined;\n this.enableOptionSharing = false;\n this.supportsDecimation = false;\n this.$context = undefined;\n this._syncList = [];\n this.datasetElementType = new.target.datasetElementType;\n this.dataElementType = new.target.dataElementType;\n this.initialize();\n }\n initialize() {\n const meta = this._cachedMeta;\n this.configure();\n this.linkScales();\n meta._stacked = isStacked(meta.vScale, meta);\n this.addElements();\n if (this.options.fill && !this.chart.isPluginEnabled('filler')) {\n console.warn(\"Tried to use the 'fill' option without the 'Filler' plugin enabled. Please import and register the 'Filler' plugin and make sure it is not disabled in the options\");\n }\n }\n updateIndex(datasetIndex) {\n if (this.index !== datasetIndex) {\n clearStacks(this._cachedMeta);\n }\n this.index = datasetIndex;\n }\n linkScales() {\n const chart = this.chart;\n const meta = this._cachedMeta;\n const dataset = this.getDataset();\n const chooseId = (axis, x, y, r) => axis === 'x' ? x : axis === 'r' ? r : y;\n const xid = meta.xAxisID = valueOrDefault(dataset.xAxisID, getFirstScaleId(chart, 'x'));\n const yid = meta.yAxisID = valueOrDefault(dataset.yAxisID, getFirstScaleId(chart, 'y'));\n const rid = meta.rAxisID = valueOrDefault(dataset.rAxisID, getFirstScaleId(chart, 'r'));\n const indexAxis = meta.indexAxis;\n const iid = meta.iAxisID = chooseId(indexAxis, xid, yid, rid);\n const vid = meta.vAxisID = chooseId(indexAxis, yid, xid, rid);\n meta.xScale = this.getScaleForId(xid);\n meta.yScale = this.getScaleForId(yid);\n meta.rScale = this.getScaleForId(rid);\n meta.iScale = this.getScaleForId(iid);\n meta.vScale = this.getScaleForId(vid);\n }\n getDataset() {\n return this.chart.data.datasets[this.index];\n }\n getMeta() {\n return this.chart.getDatasetMeta(this.index);\n }\n getScaleForId(scaleID) {\n return this.chart.scales[scaleID];\n }\n _getOtherScale(scale) {\n const meta = this._cachedMeta;\n return scale === meta.iScale ? meta.vScale : meta.iScale;\n }\n reset() {\n this._update('reset');\n }\n _destroy() {\n const meta = this._cachedMeta;\n if (this._data) {\n unlistenArrayEvents(this._data, this);\n }\n if (meta._stacked) {\n clearStacks(meta);\n }\n }\n _dataCheck() {\n const dataset = this.getDataset();\n const data = dataset.data || (dataset.data = []);\n const _data = this._data;\n if (isObject(data)) {\n const meta = this._cachedMeta;\n this._data = convertObjectDataToArray(data, meta);\n } else if (_data !== data) {\n if (_data) {\n unlistenArrayEvents(_data, this);\n const meta = this._cachedMeta;\n clearStacks(meta);\n meta._parsed = [];\n }\n if (data && Object.isExtensible(data)) {\n listenArrayEvents(data, this);\n }\n this._syncList = [];\n this._data = data;\n }\n }\n addElements() {\n const meta = this._cachedMeta;\n this._dataCheck();\n if (this.datasetElementType) {\n meta.dataset = new this.datasetElementType();\n }\n }\n buildOrUpdateElements(resetNewElements) {\n const meta = this._cachedMeta;\n const dataset = this.getDataset();\n let stackChanged = false;\n this._dataCheck();\n const oldStacked = meta._stacked;\n meta._stacked = isStacked(meta.vScale, meta);\n if (meta.stack !== dataset.stack) {\n stackChanged = true;\n clearStacks(meta);\n meta.stack = dataset.stack;\n }\n this._resyncElements(resetNewElements);\n if (stackChanged || oldStacked !== meta._stacked) {\n updateStacks(this, meta._parsed);\n meta._stacked = isStacked(meta.vScale, meta);\n }\n }\n configure() {\n const config = this.chart.config;\n const scopeKeys = config.datasetScopeKeys(this._type);\n const scopes = config.getOptionScopes(this.getDataset(), scopeKeys, true);\n this.options = config.createResolver(scopes, this.getContext());\n this._parsing = this.options.parsing;\n this._cachedDataOpts = {};\n }\n parse(start, count) {\n const {\n _cachedMeta: meta,\n _data: data\n } = this;\n const {\n iScale,\n _stacked\n } = meta;\n const iAxis = iScale.axis;\n let sorted = start === 0 && count === data.length ? true : meta._sorted;\n let prev = start > 0 && meta._parsed[start - 1];\n let i, cur, parsed;\n if (this._parsing === false) {\n meta._parsed = data;\n meta._sorted = true;\n parsed = data;\n } else {\n if (isArray(data[start])) {\n parsed = this.parseArrayData(meta, data, start, count);\n } else if (isObject(data[start])) {\n parsed = this.parseObjectData(meta, data, start, count);\n } else {\n parsed = this.parsePrimitiveData(meta, data, start, count);\n }\n const isNotInOrderComparedToPrev = () => cur[iAxis] === null || prev && cur[iAxis] < prev[iAxis];\n for (i = 0; i < count; ++i) {\n meta._parsed[i + start] = cur = parsed[i];\n if (sorted) {\n if (isNotInOrderComparedToPrev()) {\n sorted = false;\n }\n prev = cur;\n }\n }\n meta._sorted = sorted;\n }\n if (_stacked) {\n updateStacks(this, parsed);\n }\n }\n parsePrimitiveData(meta, data, start, count) {\n const {\n iScale,\n vScale\n } = meta;\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n const labels = iScale.getLabels();\n const singleScale = iScale === vScale;\n const parsed = new Array(count);\n let i, ilen, index;\n for (i = 0, ilen = count; i < ilen; ++i) {\n index = i + start;\n parsed[i] = {\n [iAxis]: singleScale || iScale.parse(labels[index], index),\n [vAxis]: vScale.parse(data[index], index)\n };\n }\n return parsed;\n }\n parseArrayData(meta, data, start, count) {\n const {\n xScale,\n yScale\n } = meta;\n const parsed = new Array(count);\n let i, ilen, index, item;\n for (i = 0, ilen = count; i < ilen; ++i) {\n index = i + start;\n item = data[index];\n parsed[i] = {\n x: xScale.parse(item[0], index),\n y: yScale.parse(item[1], index)\n };\n }\n return parsed;\n }\n parseObjectData(meta, data, start, count) {\n const {\n xScale,\n yScale\n } = meta;\n const {\n xAxisKey = 'x',\n yAxisKey = 'y'\n } = this._parsing;\n const parsed = new Array(count);\n let i, ilen, index, item;\n for (i = 0, ilen = count; i < ilen; ++i) {\n index = i + start;\n item = data[index];\n parsed[i] = {\n x: xScale.parse(resolveObjectKey(item, xAxisKey), index),\n y: yScale.parse(resolveObjectKey(item, yAxisKey), index)\n };\n }\n return parsed;\n }\n getParsed(index) {\n return this._cachedMeta._parsed[index];\n }\n getDataElement(index) {\n return this._cachedMeta.data[index];\n }\n applyStack(scale, parsed, mode) {\n const chart = this.chart;\n const meta = this._cachedMeta;\n const value = parsed[scale.axis];\n const stack = {\n keys: getSortedDatasetIndices(chart, true),\n values: parsed._stacks[scale.axis]._visualValues\n };\n return applyStack(stack, value, meta.index, {\n mode\n });\n }\n updateRangeFromParsed(range, scale, parsed, stack) {\n const parsedValue = parsed[scale.axis];\n let value = parsedValue === null ? NaN : parsedValue;\n const values = stack && parsed._stacks[scale.axis];\n if (stack && values) {\n stack.values = values;\n value = applyStack(stack, parsedValue, this._cachedMeta.index);\n }\n range.min = Math.min(range.min, value);\n range.max = Math.max(range.max, value);\n }\n getMinMax(scale, canStack) {\n const meta = this._cachedMeta;\n const _parsed = meta._parsed;\n const sorted = meta._sorted && scale === meta.iScale;\n const ilen = _parsed.length;\n const otherScale = this._getOtherScale(scale);\n const stack = createStack(canStack, meta, this.chart);\n const range = {\n min: Number.POSITIVE_INFINITY,\n max: Number.NEGATIVE_INFINITY\n };\n const {\n min: otherMin,\n max: otherMax\n } = getUserBounds(otherScale);\n let i, parsed;\n function _skip() {\n parsed = _parsed[i];\n const otherValue = parsed[otherScale.axis];\n return !isNumberFinite(parsed[scale.axis]) || otherMin > otherValue || otherMax < otherValue;\n }\n for (i = 0; i < ilen; ++i) {\n if (_skip()) {\n continue;\n }\n this.updateRangeFromParsed(range, scale, parsed, stack);\n if (sorted) {\n break;\n }\n }\n if (sorted) {\n for (i = ilen - 1; i >= 0; --i) {\n if (_skip()) {\n continue;\n }\n this.updateRangeFromParsed(range, scale, parsed, stack);\n break;\n }\n }\n return range;\n }\n getAllParsedValues(scale) {\n const parsed = this._cachedMeta._parsed;\n const values = [];\n let i, ilen, value;\n for (i = 0, ilen = parsed.length; i < ilen; ++i) {\n value = parsed[i][scale.axis];\n if (isNumberFinite(value)) {\n values.push(value);\n }\n }\n return values;\n }\n getMaxOverflow() {\n return false;\n }\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const iScale = meta.iScale;\n const vScale = meta.vScale;\n const parsed = this.getParsed(index);\n return {\n label: iScale ? '' + iScale.getLabelForValue(parsed[iScale.axis]) : '',\n value: vScale ? '' + vScale.getLabelForValue(parsed[vScale.axis]) : ''\n };\n }\n _update(mode) {\n const meta = this._cachedMeta;\n this.update(mode || 'default');\n meta._clip = toClip(valueOrDefault(this.options.clip, defaultClip(meta.xScale, meta.yScale, this.getMaxOverflow())));\n }\n update(mode) {}\n draw() {\n const ctx = this._ctx;\n const chart = this.chart;\n const meta = this._cachedMeta;\n const elements = meta.data || [];\n const area = chart.chartArea;\n const active = [];\n const start = this._drawStart || 0;\n const count = this._drawCount || elements.length - start;\n const drawActiveElementsOnTop = this.options.drawActiveElementsOnTop;\n let i;\n if (meta.dataset) {\n meta.dataset.draw(ctx, area, start, count);\n }\n for (i = start; i < start + count; ++i) {\n const element = elements[i];\n if (element.hidden) {\n continue;\n }\n if (element.active && drawActiveElementsOnTop) {\n active.push(element);\n } else {\n element.draw(ctx, area);\n }\n }\n for (i = 0; i < active.length; ++i) {\n active[i].draw(ctx, area);\n }\n }\n getStyle(index, active) {\n const mode = active ? 'active' : 'default';\n return index === undefined && this._cachedMeta.dataset ? this.resolveDatasetElementOptions(mode) : this.resolveDataElementOptions(index || 0, mode);\n }\n getContext(index, active, mode) {\n const dataset = this.getDataset();\n let context;\n if (index >= 0 && index < this._cachedMeta.data.length) {\n const element = this._cachedMeta.data[index];\n context = element.$context || (element.$context = createDataContext(this.getContext(), index, element));\n context.parsed = this.getParsed(index);\n context.raw = dataset.data[index];\n context.index = context.dataIndex = index;\n } else {\n context = this.$context || (this.$context = createDatasetContext(this.chart.getContext(), this.index));\n context.dataset = dataset;\n context.index = context.datasetIndex = this.index;\n }\n context.active = !!active;\n context.mode = mode;\n return context;\n }\n resolveDatasetElementOptions(mode) {\n return this._resolveElementOptions(this.datasetElementType.id, mode);\n }\n resolveDataElementOptions(index, mode) {\n return this._resolveElementOptions(this.dataElementType.id, mode, index);\n }\n _resolveElementOptions(elementType, mode = 'default', index) {\n const active = mode === 'active';\n const cache = this._cachedDataOpts;\n const cacheKey = elementType + '-' + mode;\n const cached = cache[cacheKey];\n const sharing = this.enableOptionSharing && defined(index);\n if (cached) {\n return cloneIfNotShared(cached, sharing);\n }\n const config = this.chart.config;\n const scopeKeys = config.datasetElementScopeKeys(this._type, elementType);\n const prefixes = active ? [`${elementType}Hover`, 'hover', elementType, ''] : [elementType, ''];\n const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n const names = Object.keys(defaults.elements[elementType]);\n const context = () => this.getContext(index, active, mode);\n const values = config.resolveNamedOptions(scopes, names, context, prefixes);\n if (values.$shared) {\n values.$shared = sharing;\n cache[cacheKey] = Object.freeze(cloneIfNotShared(values, sharing));\n }\n return values;\n }\n _resolveAnimations(index, transition, active) {\n const chart = this.chart;\n const cache = this._cachedDataOpts;\n const cacheKey = `animation-${transition}`;\n const cached = cache[cacheKey];\n if (cached) {\n return cached;\n }\n let options;\n if (chart.options.animation !== false) {\n const config = this.chart.config;\n const scopeKeys = config.datasetAnimationScopeKeys(this._type, transition);\n const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n options = config.createResolver(scopes, this.getContext(index, active, transition));\n }\n const animations = new Animations(chart, options && options.animations);\n if (options && options._cacheable) {\n cache[cacheKey] = Object.freeze(animations);\n }\n return animations;\n }\n getSharedOptions(options) {\n if (!options.$shared) {\n return;\n }\n return this._sharedOptions || (this._sharedOptions = Object.assign({}, options));\n }\n includeOptions(mode, sharedOptions) {\n return !sharedOptions || isDirectUpdateMode(mode) || this.chart._animationsDisabled;\n }\n _getSharedOptions(start, mode) {\n const firstOpts = this.resolveDataElementOptions(start, mode);\n const previouslySharedOptions = this._sharedOptions;\n const sharedOptions = this.getSharedOptions(firstOpts);\n const includeOptions = this.includeOptions(mode, sharedOptions) || sharedOptions !== previouslySharedOptions;\n this.updateSharedOptions(sharedOptions, mode, firstOpts);\n return {\n sharedOptions,\n includeOptions\n };\n }\n updateElement(element, index, properties, mode) {\n if (isDirectUpdateMode(mode)) {\n Object.assign(element, properties);\n } else {\n this._resolveAnimations(index, mode).update(element, properties);\n }\n }\n updateSharedOptions(sharedOptions, mode, newOptions) {\n if (sharedOptions && !isDirectUpdateMode(mode)) {\n this._resolveAnimations(undefined, mode).update(sharedOptions, newOptions);\n }\n }\n _setStyle(element, index, mode, active) {\n element.active = active;\n const options = this.getStyle(index, active);\n this._resolveAnimations(index, mode, active).update(element, {\n options: !active && this.getSharedOptions(options) || options\n });\n }\n removeHoverStyle(element, datasetIndex, index) {\n this._setStyle(element, index, 'active', false);\n }\n setHoverStyle(element, datasetIndex, index) {\n this._setStyle(element, index, 'active', true);\n }\n _removeDatasetHoverStyle() {\n const element = this._cachedMeta.dataset;\n if (element) {\n this._setStyle(element, undefined, 'active', false);\n }\n }\n _setDatasetHoverStyle() {\n const element = this._cachedMeta.dataset;\n if (element) {\n this._setStyle(element, undefined, 'active', true);\n }\n }\n _resyncElements(resetNewElements) {\n const data = this._data;\n const elements = this._cachedMeta.data;\n for (const [method, arg1, arg2] of this._syncList) {\n this[method](arg1, arg2);\n }\n this._syncList = [];\n const numMeta = elements.length;\n const numData = data.length;\n const count = Math.min(numData, numMeta);\n if (count) {\n this.parse(0, count);\n }\n if (numData > numMeta) {\n this._insertElements(numMeta, numData - numMeta, resetNewElements);\n } else if (numData < numMeta) {\n this._removeElements(numData, numMeta - numData);\n }\n }\n _insertElements(start, count, resetNewElements = true) {\n const meta = this._cachedMeta;\n const data = meta.data;\n const end = start + count;\n let i;\n const move = arr => {\n arr.length += count;\n for (i = arr.length - 1; i >= end; i--) {\n arr[i] = arr[i - count];\n }\n };\n move(data);\n for (i = start; i < end; ++i) {\n data[i] = new this.dataElementType();\n }\n if (this._parsing) {\n move(meta._parsed);\n }\n this.parse(start, count);\n if (resetNewElements) {\n this.updateElements(data, start, count, 'reset');\n }\n }\n updateElements(element, start, count, mode) {}\n _removeElements(start, count) {\n const meta = this._cachedMeta;\n if (this._parsing) {\n const removed = meta._parsed.splice(start, count);\n if (meta._stacked) {\n clearStacks(meta, removed);\n }\n }\n meta.data.splice(start, count);\n }\n _sync(args) {\n if (this._parsing) {\n this._syncList.push(args);\n } else {\n const [method, arg1, arg2] = args;\n this[method](arg1, arg2);\n }\n this.chart._dataChanges.push([this.index, ...args]);\n }\n _onDataPush() {\n const count = arguments.length;\n this._sync(['_insertElements', this.getDataset().data.length - count, count]);\n }\n _onDataPop() {\n this._sync(['_removeElements', this._cachedMeta.data.length - 1, 1]);\n }\n _onDataShift() {\n this._sync(['_removeElements', 0, 1]);\n }\n _onDataSplice(start, count) {\n if (count) {\n this._sync(['_removeElements', start, count]);\n }\n const newCount = arguments.length - 2;\n if (newCount) {\n this._sync(['_insertElements', start, newCount]);\n }\n }\n _onDataUnshift() {\n this._sync(['_insertElements', 0, arguments.length]);\n }\n }\n return DatasetController;\n})();\nfunction getAllScaleValues(scale, type) {\n if (!scale._cache.$bar) {\n const visibleMetas = scale.getMatchingVisibleMetas(type);\n let values = [];\n for (let i = 0, ilen = visibleMetas.length; i < ilen; i++) {\n values = values.concat(visibleMetas[i].controller.getAllParsedValues(scale));\n }\n scale._cache.$bar = _arrayUnique(values.sort((a, b) => a - b));\n }\n return scale._cache.$bar;\n}\nfunction computeMinSampleSize(meta) {\n const scale = meta.iScale;\n const values = getAllScaleValues(scale, meta.type);\n let min = scale._length;\n let i, ilen, curr, prev;\n const updateMinAndPrev = () => {\n if (curr === 32767 || curr === -32768) {\n return;\n }\n if (defined(prev)) {\n min = Math.min(min, Math.abs(curr - prev) || min);\n }\n prev = curr;\n };\n for (i = 0, ilen = values.length; i < ilen; ++i) {\n curr = scale.getPixelForValue(values[i]);\n updateMinAndPrev();\n }\n prev = undefined;\n for (i = 0, ilen = scale.ticks.length; i < ilen; ++i) {\n curr = scale.getPixelForTick(i);\n updateMinAndPrev();\n }\n return min;\n}\nfunction computeFitCategoryTraits(index, ruler, options, stackCount) {\n const thickness = options.barThickness;\n let size, ratio;\n if (isNullOrUndef(thickness)) {\n size = ruler.min * options.categoryPercentage;\n ratio = options.barPercentage;\n } else {\n size = thickness * stackCount;\n ratio = 1;\n }\n return {\n chunk: size / stackCount,\n ratio,\n start: ruler.pixels[index] - size / 2\n };\n}\nfunction computeFlexCategoryTraits(index, ruler, options, stackCount) {\n const pixels = ruler.pixels;\n const curr = pixels[index];\n let prev = index > 0 ? pixels[index - 1] : null;\n let next = index < pixels.length - 1 ? pixels[index + 1] : null;\n const percent = options.categoryPercentage;\n if (prev === null) {\n prev = curr - (next === null ? ruler.end - ruler.start : next - curr);\n }\n if (next === null) {\n next = curr + curr - prev;\n }\n const start = curr - (curr - Math.min(prev, next)) / 2 * percent;\n const size = Math.abs(next - prev) / 2 * percent;\n return {\n chunk: size / stackCount,\n ratio: options.barPercentage,\n start\n };\n}\nfunction parseFloatBar(entry, item, vScale, i) {\n const startValue = vScale.parse(entry[0], i);\n const endValue = vScale.parse(entry[1], i);\n const min = Math.min(startValue, endValue);\n const max = Math.max(startValue, endValue);\n let barStart = min;\n let barEnd = max;\n if (Math.abs(min) > Math.abs(max)) {\n barStart = max;\n barEnd = min;\n }\n item[vScale.axis] = barEnd;\n item._custom = {\n barStart,\n barEnd,\n start: startValue,\n end: endValue,\n min,\n max\n };\n}\nfunction parseValue(entry, item, vScale, i) {\n if (isArray(entry)) {\n parseFloatBar(entry, item, vScale, i);\n } else {\n item[vScale.axis] = vScale.parse(entry, i);\n }\n return item;\n}\nfunction parseArrayOrPrimitive(meta, data, start, count) {\n const iScale = meta.iScale;\n const vScale = meta.vScale;\n const labels = iScale.getLabels();\n const singleScale = iScale === vScale;\n const parsed = [];\n let i, ilen, item, entry;\n for (i = start, ilen = start + count; i < ilen; ++i) {\n entry = data[i];\n item = {};\n item[iScale.axis] = singleScale || iScale.parse(labels[i], i);\n parsed.push(parseValue(entry, item, vScale, i));\n }\n return parsed;\n}\nfunction isFloatBar(custom) {\n return custom && custom.barStart !== undefined && custom.barEnd !== undefined;\n}\nfunction barSign(size, vScale, actualBase) {\n if (size !== 0) {\n return sign(size);\n }\n return (vScale.isHorizontal() ? 1 : -1) * (vScale.min >= actualBase ? 1 : -1);\n}\nfunction borderProps(properties) {\n let reverse, start, end, top, bottom;\n if (properties.horizontal) {\n reverse = properties.base > properties.x;\n start = 'left';\n end = 'right';\n } else {\n reverse = properties.base < properties.y;\n start = 'bottom';\n end = 'top';\n }\n if (reverse) {\n top = 'end';\n bottom = 'start';\n } else {\n top = 'start';\n bottom = 'end';\n }\n return {\n start,\n end,\n reverse,\n top,\n bottom\n };\n}\nfunction setBorderSkipped(properties, options, stack, index) {\n let edge = options.borderSkipped;\n const res = {};\n if (!edge) {\n properties.borderSkipped = res;\n return;\n }\n if (edge === true) {\n properties.borderSkipped = {\n top: true,\n right: true,\n bottom: true,\n left: true\n };\n return;\n }\n const {\n start,\n end,\n reverse,\n top,\n bottom\n } = borderProps(properties);\n if (edge === 'middle' && stack) {\n properties.enableBorderRadius = true;\n if ((stack._top || 0) === index) {\n edge = top;\n } else if ((stack._bottom || 0) === index) {\n edge = bottom;\n } else {\n res[parseEdge(bottom, start, end, reverse)] = true;\n edge = top;\n }\n }\n res[parseEdge(edge, start, end, reverse)] = true;\n properties.borderSkipped = res;\n}\nfunction parseEdge(edge, a, b, reverse) {\n if (reverse) {\n edge = swap(edge, a, b);\n edge = startEnd(edge, b, a);\n } else {\n edge = startEnd(edge, a, b);\n }\n return edge;\n}\nfunction swap(orig, v1, v2) {\n return orig === v1 ? v2 : orig === v2 ? v1 : orig;\n}\nfunction startEnd(v, start, end) {\n return v === 'start' ? start : v === 'end' ? end : v;\n}\nfunction setInflateAmount(properties, {\n inflateAmount\n}, ratio) {\n properties.inflateAmount = inflateAmount === 'auto' ? ratio === 1 ? 0.33 : 0 : inflateAmount;\n}\nlet BarController = /*#__PURE__*/(() => {\n class BarController extends DatasetController {\n static id = 'bar';\n static defaults = {\n datasetElementType: false,\n dataElementType: 'bar',\n categoryPercentage: 0.8,\n barPercentage: 0.9,\n grouped: true,\n animations: {\n numbers: {\n type: 'number',\n properties: ['x', 'y', 'base', 'width', 'height']\n }\n }\n };\n static overrides = {\n scales: {\n _index_: {\n type: 'category',\n offset: true,\n grid: {\n offset: true\n }\n },\n _value_: {\n type: 'linear',\n beginAtZero: true\n }\n }\n };\n parsePrimitiveData(meta, data, start, count) {\n return parseArrayOrPrimitive(meta, data, start, count);\n }\n parseArrayData(meta, data, start, count) {\n return parseArrayOrPrimitive(meta, data, start, count);\n }\n parseObjectData(meta, data, start, count) {\n const {\n iScale,\n vScale\n } = meta;\n const {\n xAxisKey = 'x',\n yAxisKey = 'y'\n } = this._parsing;\n const iAxisKey = iScale.axis === 'x' ? xAxisKey : yAxisKey;\n const vAxisKey = vScale.axis === 'x' ? xAxisKey : yAxisKey;\n const parsed = [];\n let i, ilen, item, obj;\n for (i = start, ilen = start + count; i < ilen; ++i) {\n obj = data[i];\n item = {};\n item[iScale.axis] = iScale.parse(resolveObjectKey(obj, iAxisKey), i);\n parsed.push(parseValue(resolveObjectKey(obj, vAxisKey), item, vScale, i));\n }\n return parsed;\n }\n updateRangeFromParsed(range, scale, parsed, stack) {\n super.updateRangeFromParsed(range, scale, parsed, stack);\n const custom = parsed._custom;\n if (custom && scale === this._cachedMeta.vScale) {\n range.min = Math.min(range.min, custom.min);\n range.max = Math.max(range.max, custom.max);\n }\n }\n getMaxOverflow() {\n return 0;\n }\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const {\n iScale,\n vScale\n } = meta;\n const parsed = this.getParsed(index);\n const custom = parsed._custom;\n const value = isFloatBar(custom) ? '[' + custom.start + ', ' + custom.end + ']' : '' + vScale.getLabelForValue(parsed[vScale.axis]);\n return {\n label: '' + iScale.getLabelForValue(parsed[iScale.axis]),\n value\n };\n }\n initialize() {\n this.enableOptionSharing = true;\n super.initialize();\n const meta = this._cachedMeta;\n meta.stack = this.getDataset().stack;\n }\n update(mode) {\n const meta = this._cachedMeta;\n this.updateElements(meta.data, 0, meta.data.length, mode);\n }\n updateElements(bars, start, count, mode) {\n const reset = mode === 'reset';\n const {\n index,\n _cachedMeta: {\n vScale\n }\n } = this;\n const base = vScale.getBasePixel();\n const horizontal = vScale.isHorizontal();\n const ruler = this._getRuler();\n const {\n sharedOptions,\n includeOptions\n } = this._getSharedOptions(start, mode);\n for (let i = start; i < start + count; i++) {\n const parsed = this.getParsed(i);\n const vpixels = reset || isNullOrUndef(parsed[vScale.axis]) ? {\n base,\n head: base\n } : this._calculateBarValuePixels(i);\n const ipixels = this._calculateBarIndexPixels(i, ruler);\n const stack = (parsed._stacks || {})[vScale.axis];\n const properties = {\n horizontal,\n base: vpixels.base,\n enableBorderRadius: !stack || isFloatBar(parsed._custom) || index === stack._top || index === stack._bottom,\n x: horizontal ? vpixels.head : ipixels.center,\n y: horizontal ? ipixels.center : vpixels.head,\n height: horizontal ? ipixels.size : Math.abs(vpixels.size),\n width: horizontal ? Math.abs(vpixels.size) : ipixels.size\n };\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, bars[i].active ? 'active' : mode);\n }\n const options = properties.options || bars[i].options;\n setBorderSkipped(properties, options, stack, index);\n setInflateAmount(properties, options, ruler.ratio);\n this.updateElement(bars[i], i, properties, mode);\n }\n }\n _getStacks(last, dataIndex) {\n const {\n iScale\n } = this._cachedMeta;\n const metasets = iScale.getMatchingVisibleMetas(this._type).filter(meta => meta.controller.options.grouped);\n const stacked = iScale.options.stacked;\n const stacks = [];\n const currentParsed = this._cachedMeta.controller.getParsed(dataIndex);\n const iScaleValue = currentParsed && currentParsed[iScale.axis];\n const skipNull = meta => {\n const parsed = meta._parsed.find(item => item[iScale.axis] === iScaleValue);\n const val = parsed && parsed[meta.vScale.axis];\n if (isNullOrUndef(val) || isNaN(val)) {\n return true;\n }\n };\n for (const meta of metasets) {\n if (dataIndex !== undefined && skipNull(meta)) {\n continue;\n }\n if (stacked === false || stacks.indexOf(meta.stack) === -1 || stacked === undefined && meta.stack === undefined) {\n stacks.push(meta.stack);\n }\n if (meta.index === last) {\n break;\n }\n }\n if (!stacks.length) {\n stacks.push(undefined);\n }\n return stacks;\n }\n _getStackCount(index) {\n return this._getStacks(undefined, index).length;\n }\n _getAxisCount() {\n return this._getAxis().length;\n }\n getFirstScaleIdForIndexAxis() {\n const scales = this.chart.scales;\n const indexScaleId = this.chart.options.indexAxis;\n return Object.keys(scales).filter(key => scales[key].axis === indexScaleId).shift();\n }\n _getAxis() {\n const axis = {};\n const firstScaleAxisId = this.getFirstScaleIdForIndexAxis();\n for (const dataset of this.chart.data.datasets) {\n axis[valueOrDefault(this.chart.options.indexAxis === 'x' ? dataset.xAxisID : dataset.yAxisID, firstScaleAxisId)] = true;\n }\n return Object.keys(axis);\n }\n _getStackIndex(datasetIndex, name, dataIndex) {\n const stacks = this._getStacks(datasetIndex, dataIndex);\n const index = name !== undefined ? stacks.indexOf(name) : -1;\n return index === -1 ? stacks.length - 1 : index;\n }\n _getRuler() {\n const opts = this.options;\n const meta = this._cachedMeta;\n const iScale = meta.iScale;\n const pixels = [];\n let i, ilen;\n for (i = 0, ilen = meta.data.length; i < ilen; ++i) {\n pixels.push(iScale.getPixelForValue(this.getParsed(i)[iScale.axis], i));\n }\n const barThickness = opts.barThickness;\n const min = barThickness || computeMinSampleSize(meta);\n return {\n min,\n pixels,\n start: iScale._startPixel,\n end: iScale._endPixel,\n stackCount: this._getStackCount(),\n scale: iScale,\n grouped: opts.grouped,\n ratio: barThickness ? 1 : opts.categoryPercentage * opts.barPercentage\n };\n }\n _calculateBarValuePixels(index) {\n const {\n _cachedMeta: {\n vScale,\n _stacked,\n index: datasetIndex\n },\n options: {\n base: baseValue,\n minBarLength\n }\n } = this;\n const actualBase = baseValue || 0;\n const parsed = this.getParsed(index);\n const custom = parsed._custom;\n const floating = isFloatBar(custom);\n let value = parsed[vScale.axis];\n let start = 0;\n let length = _stacked ? this.applyStack(vScale, parsed, _stacked) : value;\n let head, size;\n if (length !== value) {\n start = length - value;\n length = value;\n }\n if (floating) {\n value = custom.barStart;\n length = custom.barEnd - custom.barStart;\n if (value !== 0 && sign(value) !== sign(custom.barEnd)) {\n start = 0;\n }\n start += value;\n }\n const startValue = !isNullOrUndef(baseValue) && !floating ? baseValue : start;\n let base = vScale.getPixelForValue(startValue);\n if (this.chart.getDataVisibility(index)) {\n head = vScale.getPixelForValue(start + length);\n } else {\n head = base;\n }\n size = head - base;\n if (Math.abs(size) < minBarLength) {\n size = barSign(size, vScale, actualBase) * minBarLength;\n if (value === actualBase) {\n base -= size / 2;\n }\n const startPixel = vScale.getPixelForDecimal(0);\n const endPixel = vScale.getPixelForDecimal(1);\n const min = Math.min(startPixel, endPixel);\n const max = Math.max(startPixel, endPixel);\n base = Math.max(Math.min(base, max), min);\n head = base + size;\n if (_stacked && !floating) {\n parsed._stacks[vScale.axis]._visualValues[datasetIndex] = vScale.getValueForPixel(head) - vScale.getValueForPixel(base);\n }\n }\n if (base === vScale.getPixelForValue(actualBase)) {\n const halfGrid = sign(size) * vScale.getLineWidthForValue(actualBase) / 2;\n base += halfGrid;\n size -= halfGrid;\n }\n return {\n size,\n base,\n head,\n center: head + size / 2\n };\n }\n _calculateBarIndexPixels(index, ruler) {\n const scale = ruler.scale;\n const options = this.options;\n const skipNull = options.skipNull;\n const maxBarThickness = valueOrDefault(options.maxBarThickness, Infinity);\n let center, size;\n const axisCount = this._getAxisCount();\n if (ruler.grouped) {\n const stackCount = skipNull ? this._getStackCount(index) : ruler.stackCount;\n const range = options.barThickness === 'flex' ? computeFlexCategoryTraits(index, ruler, options, stackCount * axisCount) : computeFitCategoryTraits(index, ruler, options, stackCount * axisCount);\n const axisID = this.chart.options.indexAxis === 'x' ? this.getDataset().xAxisID : this.getDataset().yAxisID;\n const axisNumber = this._getAxis().indexOf(valueOrDefault(axisID, this.getFirstScaleIdForIndexAxis()));\n const stackIndex = this._getStackIndex(this.index, this._cachedMeta.stack, skipNull ? index : undefined) + axisNumber;\n center = range.start + range.chunk * stackIndex + range.chunk / 2;\n size = Math.min(maxBarThickness, range.chunk * range.ratio);\n } else {\n center = scale.getPixelForValue(this.getParsed(index)[scale.axis], index);\n size = Math.min(maxBarThickness, ruler.min * ruler.ratio);\n }\n return {\n base: center - size / 2,\n head: center + size / 2,\n center,\n size\n };\n }\n draw() {\n const meta = this._cachedMeta;\n const vScale = meta.vScale;\n const rects = meta.data;\n const ilen = rects.length;\n let i = 0;\n for (; i < ilen; ++i) {\n if (this.getParsed(i)[vScale.axis] !== null && !rects[i].hidden) {\n rects[i].draw(this._ctx);\n }\n }\n }\n }\n return BarController;\n})();\nlet BubbleController = /*#__PURE__*/(() => {\n class BubbleController extends DatasetController {\n static id = 'bubble';\n static defaults = {\n datasetElementType: false,\n dataElementType: 'point',\n animations: {\n numbers: {\n type: 'number',\n properties: ['x', 'y', 'borderWidth', 'radius']\n }\n }\n };\n static overrides = {\n scales: {\n x: {\n type: 'linear'\n },\n y: {\n type: 'linear'\n }\n }\n };\n initialize() {\n this.enableOptionSharing = true;\n super.initialize();\n }\n parsePrimitiveData(meta, data, start, count) {\n const parsed = super.parsePrimitiveData(meta, data, start, count);\n for (let i = 0; i < parsed.length; i++) {\n parsed[i]._custom = this.resolveDataElementOptions(i + start).radius;\n }\n return parsed;\n }\n parseArrayData(meta, data, start, count) {\n const parsed = super.parseArrayData(meta, data, start, count);\n for (let i = 0; i < parsed.length; i++) {\n const item = data[start + i];\n parsed[i]._custom = valueOrDefault(item[2], this.resolveDataElementOptions(i + start).radius);\n }\n return parsed;\n }\n parseObjectData(meta, data, start, count) {\n const parsed = super.parseObjectData(meta, data, start, count);\n for (let i = 0; i < parsed.length; i++) {\n const item = data[start + i];\n parsed[i]._custom = valueOrDefault(item && item.r && +item.r, this.resolveDataElementOptions(i + start).radius);\n }\n return parsed;\n }\n getMaxOverflow() {\n const data = this._cachedMeta.data;\n let max = 0;\n for (let i = data.length - 1; i >= 0; --i) {\n max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) / 2);\n }\n return max > 0 && max;\n }\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const labels = this.chart.data.labels || [];\n const {\n xScale,\n yScale\n } = meta;\n const parsed = this.getParsed(index);\n const x = xScale.getLabelForValue(parsed.x);\n const y = yScale.getLabelForValue(parsed.y);\n const r = parsed._custom;\n return {\n label: labels[index] || '',\n value: '(' + x + ', ' + y + (r ? ', ' + r : '') + ')'\n };\n }\n update(mode) {\n const points = this._cachedMeta.data;\n this.updateElements(points, 0, points.length, mode);\n }\n updateElements(points, start, count, mode) {\n const reset = mode === 'reset';\n const {\n iScale,\n vScale\n } = this._cachedMeta;\n const {\n sharedOptions,\n includeOptions\n } = this._getSharedOptions(start, mode);\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n for (let i = start; i < start + count; i++) {\n const point = points[i];\n const parsed = !reset && this.getParsed(i);\n const properties = {};\n const iPixel = properties[iAxis] = reset ? iScale.getPixelForDecimal(0.5) : iScale.getPixelForValue(parsed[iAxis]);\n const vPixel = properties[vAxis] = reset ? vScale.getBasePixel() : vScale.getPixelForValue(parsed[vAxis]);\n properties.skip = isNaN(iPixel) || isNaN(vPixel);\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n if (reset) {\n properties.options.radius = 0;\n }\n }\n this.updateElement(point, i, properties, mode);\n }\n }\n resolveDataElementOptions(index, mode) {\n const parsed = this.getParsed(index);\n let values = super.resolveDataElementOptions(index, mode);\n if (values.$shared) {\n values = Object.assign({}, values, {\n $shared: false\n });\n }\n const radius = values.radius;\n if (mode !== 'active') {\n values.radius = 0;\n }\n values.radius += valueOrDefault(parsed && parsed._custom, radius);\n return values;\n }\n }\n return BubbleController;\n})();\nfunction getRatioAndOffset(rotation, circumference, cutout) {\n let ratioX = 1;\n let ratioY = 1;\n let offsetX = 0;\n let offsetY = 0;\n if (circumference < TAU) {\n const startAngle = rotation;\n const endAngle = startAngle + circumference;\n const startX = Math.cos(startAngle);\n const startY = Math.sin(startAngle);\n const endX = Math.cos(endAngle);\n const endY = Math.sin(endAngle);\n const calcMax = (angle, a, b) => _angleBetween(angle, startAngle, endAngle, true) ? 1 : Math.max(a, a * cutout, b, b * cutout);\n const calcMin = (angle, a, b) => _angleBetween(angle, startAngle, endAngle, true) ? -1 : Math.min(a, a * cutout, b, b * cutout);\n const maxX = calcMax(0, startX, endX);\n const maxY = calcMax(HALF_PI, startY, endY);\n const minX = calcMin(PI, startX, endX);\n const minY = calcMin(PI + HALF_PI, startY, endY);\n ratioX = (maxX - minX) / 2;\n ratioY = (maxY - minY) / 2;\n offsetX = -(maxX + minX) / 2;\n offsetY = -(maxY + minY) / 2;\n }\n return {\n ratioX,\n ratioY,\n offsetX,\n offsetY\n };\n}\nlet DoughnutController = /*#__PURE__*/(() => {\n class DoughnutController extends DatasetController {\n static id = 'doughnut';\n static defaults = {\n datasetElementType: false,\n dataElementType: 'arc',\n animation: {\n animateRotate: true,\n animateScale: false\n },\n animations: {\n numbers: {\n type: 'number',\n properties: ['circumference', 'endAngle', 'innerRadius', 'outerRadius', 'startAngle', 'x', 'y', 'offset', 'borderWidth', 'spacing']\n }\n },\n cutout: '50%',\n rotation: 0,\n circumference: 360,\n radius: '100%',\n spacing: 0,\n indexAxis: 'r'\n };\n static descriptors = {\n _scriptable: name => name !== 'spacing',\n _indexable: name => name !== 'spacing' && !name.startsWith('borderDash') && !name.startsWith('hoverBorderDash')\n };\n static overrides = {\n aspectRatio: 1,\n plugins: {\n legend: {\n labels: {\n generateLabels(chart) {\n const data = chart.data;\n const {\n labels: {\n pointStyle,\n textAlign,\n color,\n useBorderRadius,\n borderRadius\n }\n } = chart.legend.options;\n if (data.labels.length && data.datasets.length) {\n return data.labels.map((label, i) => {\n const meta = chart.getDatasetMeta(0);\n const style = meta.controller.getStyle(i);\n return {\n text: label,\n fillStyle: style.backgroundColor,\n fontColor: color,\n hidden: !chart.getDataVisibility(i),\n lineDash: style.borderDash,\n lineDashOffset: style.borderDashOffset,\n lineJoin: style.borderJoinStyle,\n lineWidth: style.borderWidth,\n strokeStyle: style.borderColor,\n textAlign: textAlign,\n pointStyle: pointStyle,\n borderRadius: useBorderRadius && (borderRadius || style.borderRadius),\n index: i\n };\n });\n }\n return [];\n }\n },\n onClick(e, legendItem, legend) {\n legend.chart.toggleDataVisibility(legendItem.index);\n legend.chart.update();\n }\n }\n }\n };\n constructor(chart, datasetIndex) {\n super(chart, datasetIndex);\n this.enableOptionSharing = true;\n this.innerRadius = undefined;\n this.outerRadius = undefined;\n this.offsetX = undefined;\n this.offsetY = undefined;\n }\n linkScales() {}\n parse(start, count) {\n const data = this.getDataset().data;\n const meta = this._cachedMeta;\n if (this._parsing === false) {\n meta._parsed = data;\n } else {\n let getter = i => +data[i];\n if (isObject(data[start])) {\n const {\n key = 'value'\n } = this._parsing;\n getter = i => +resolveObjectKey(data[i], key);\n }\n let i, ilen;\n for (i = start, ilen = start + count; i < ilen; ++i) {\n meta._parsed[i] = getter(i);\n }\n }\n }\n _getRotation() {\n return toRadians(this.options.rotation - 90);\n }\n _getCircumference() {\n return toRadians(this.options.circumference);\n }\n _getRotationExtents() {\n let min = TAU;\n let max = -TAU;\n for (let i = 0; i < this.chart.data.datasets.length; ++i) {\n if (this.chart.isDatasetVisible(i) && this.chart.getDatasetMeta(i).type === this._type) {\n const controller = this.chart.getDatasetMeta(i).controller;\n const rotation = controller._getRotation();\n const circumference = controller._getCircumference();\n min = Math.min(min, rotation);\n max = Math.max(max, rotation + circumference);\n }\n }\n return {\n rotation: min,\n circumference: max - min\n };\n }\n update(mode) {\n const chart = this.chart;\n const {\n chartArea\n } = chart;\n const meta = this._cachedMeta;\n const arcs = meta.data;\n const spacing = this.getMaxBorderWidth() + this.getMaxOffset(arcs) + this.options.spacing;\n const maxSize = Math.max((Math.min(chartArea.width, chartArea.height) - spacing) / 2, 0);\n const cutout = Math.min(toPercentage(this.options.cutout, maxSize), 1);\n const chartWeight = this._getRingWeight(this.index);\n const {\n circumference,\n rotation\n } = this._getRotationExtents();\n const {\n ratioX,\n ratioY,\n offsetX,\n offsetY\n } = getRatioAndOffset(rotation, circumference, cutout);\n const maxWidth = (chartArea.width - spacing) / ratioX;\n const maxHeight = (chartArea.height - spacing) / ratioY;\n const maxRadius = Math.max(Math.min(maxWidth, maxHeight) / 2, 0);\n const outerRadius = toDimension(this.options.radius, maxRadius);\n const innerRadius = Math.max(outerRadius * cutout, 0);\n const radiusLength = (outerRadius - innerRadius) / this._getVisibleDatasetWeightTotal();\n this.offsetX = offsetX * outerRadius;\n this.offsetY = offsetY * outerRadius;\n meta.total = this.calculateTotal();\n this.outerRadius = outerRadius - radiusLength * this._getRingWeightOffset(this.index);\n this.innerRadius = Math.max(this.outerRadius - radiusLength * chartWeight, 0);\n this.updateElements(arcs, 0, arcs.length, mode);\n }\n _circumference(i, reset) {\n const opts = this.options;\n const meta = this._cachedMeta;\n const circumference = this._getCircumference();\n if (reset && opts.animation.animateRotate || !this.chart.getDataVisibility(i) || meta._parsed[i] === null || meta.data[i].hidden) {\n return 0;\n }\n return this.calculateCircumference(meta._parsed[i] * circumference / TAU);\n }\n updateElements(arcs, start, count, mode) {\n const reset = mode === 'reset';\n const chart = this.chart;\n const chartArea = chart.chartArea;\n const opts = chart.options;\n const animationOpts = opts.animation;\n const centerX = (chartArea.left + chartArea.right) / 2;\n const centerY = (chartArea.top + chartArea.bottom) / 2;\n const animateScale = reset && animationOpts.animateScale;\n const innerRadius = animateScale ? 0 : this.innerRadius;\n const outerRadius = animateScale ? 0 : this.outerRadius;\n const {\n sharedOptions,\n includeOptions\n } = this._getSharedOptions(start, mode);\n let startAngle = this._getRotation();\n let i;\n for (i = 0; i < start; ++i) {\n startAngle += this._circumference(i, reset);\n }\n for (i = start; i < start + count; ++i) {\n const circumference = this._circumference(i, reset);\n const arc = arcs[i];\n const properties = {\n x: centerX + this.offsetX,\n y: centerY + this.offsetY,\n startAngle,\n endAngle: startAngle + circumference,\n circumference,\n outerRadius,\n innerRadius\n };\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, arc.active ? 'active' : mode);\n }\n startAngle += circumference;\n this.updateElement(arc, i, properties, mode);\n }\n }\n calculateTotal() {\n const meta = this._cachedMeta;\n const metaData = meta.data;\n let total = 0;\n let i;\n for (i = 0; i < metaData.length; i++) {\n const value = meta._parsed[i];\n if (value !== null && !isNaN(value) && this.chart.getDataVisibility(i) && !metaData[i].hidden) {\n total += Math.abs(value);\n }\n }\n return total;\n }\n calculateCircumference(value) {\n const total = this._cachedMeta.total;\n if (total > 0 && !isNaN(value)) {\n return TAU * (Math.abs(value) / total);\n }\n return 0;\n }\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const chart = this.chart;\n const labels = chart.data.labels || [];\n const value = formatNumber(meta._parsed[index], chart.options.locale);\n return {\n label: labels[index] || '',\n value\n };\n }\n getMaxBorderWidth(arcs) {\n let max = 0;\n const chart = this.chart;\n let i, ilen, meta, controller, options;\n if (!arcs) {\n for (i = 0, ilen = chart.data.datasets.length; i < ilen; ++i) {\n if (chart.isDatasetVisible(i)) {\n meta = chart.getDatasetMeta(i);\n arcs = meta.data;\n controller = meta.controller;\n break;\n }\n }\n }\n if (!arcs) {\n return 0;\n }\n for (i = 0, ilen = arcs.length; i < ilen; ++i) {\n options = controller.resolveDataElementOptions(i);\n if (options.borderAlign !== 'inner') {\n max = Math.max(max, options.borderWidth || 0, options.hoverBorderWidth || 0);\n }\n }\n return max;\n }\n getMaxOffset(arcs) {\n let max = 0;\n for (let i = 0, ilen = arcs.length; i < ilen; ++i) {\n const options = this.resolveDataElementOptions(i);\n max = Math.max(max, options.offset || 0, options.hoverOffset || 0);\n }\n return max;\n }\n _getRingWeightOffset(datasetIndex) {\n let ringWeightOffset = 0;\n for (let i = 0; i < datasetIndex; ++i) {\n if (this.chart.isDatasetVisible(i)) {\n ringWeightOffset += this._getRingWeight(i);\n }\n }\n return ringWeightOffset;\n }\n _getRingWeight(datasetIndex) {\n return Math.max(valueOrDefault(this.chart.data.datasets[datasetIndex].weight, 1), 0);\n }\n _getVisibleDatasetWeightTotal() {\n return this._getRingWeightOffset(this.chart.data.datasets.length) || 1;\n }\n }\n return DoughnutController;\n})();\nlet LineController = /*#__PURE__*/(() => {\n class LineController extends DatasetController {\n static id = 'line';\n static defaults = {\n datasetElementType: 'line',\n dataElementType: 'point',\n showLine: true,\n spanGaps: false\n };\n static overrides = {\n scales: {\n _index_: {\n type: 'category'\n },\n _value_: {\n type: 'linear'\n }\n }\n };\n initialize() {\n this.enableOptionSharing = true;\n this.supportsDecimation = true;\n super.initialize();\n }\n update(mode) {\n const meta = this._cachedMeta;\n const {\n dataset: line,\n data: points = [],\n _dataset\n } = meta;\n const animationsDisabled = this.chart._animationsDisabled;\n let {\n start,\n count\n } = _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled);\n this._drawStart = start;\n this._drawCount = count;\n if (_scaleRangesChanged(meta)) {\n start = 0;\n count = points.length;\n }\n line._chart = this.chart;\n line._datasetIndex = this.index;\n line._decimated = !!_dataset._decimated;\n line.points = points;\n const options = this.resolveDatasetElementOptions(mode);\n if (!this.options.showLine) {\n options.borderWidth = 0;\n }\n options.segment = this.options.segment;\n this.updateElement(line, undefined, {\n animated: !animationsDisabled,\n options\n }, mode);\n this.updateElements(points, start, count, mode);\n }\n updateElements(points, start, count, mode) {\n const reset = mode === 'reset';\n const {\n iScale,\n vScale,\n _stacked,\n _dataset\n } = this._cachedMeta;\n const {\n sharedOptions,\n includeOptions\n } = this._getSharedOptions(start, mode);\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n const {\n spanGaps,\n segment\n } = this.options;\n const maxGapLength = isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;\n const directUpdate = this.chart._animationsDisabled || reset || mode === 'none';\n const end = start + count;\n const pointsCount = points.length;\n let prevParsed = start > 0 && this.getParsed(start - 1);\n for (let i = 0; i < pointsCount; ++i) {\n const point = points[i];\n const properties = directUpdate ? point : {};\n if (i < start || i >= end) {\n properties.skip = true;\n continue;\n }\n const parsed = this.getParsed(i);\n const nullData = isNullOrUndef(parsed[vAxis]);\n const iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);\n const vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);\n properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;\n properties.stop = i > 0 && Math.abs(parsed[iAxis] - prevParsed[iAxis]) > maxGapLength;\n if (segment) {\n properties.parsed = parsed;\n properties.raw = _dataset.data[i];\n }\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n }\n if (!directUpdate) {\n this.updateElement(point, i, properties, mode);\n }\n prevParsed = parsed;\n }\n }\n getMaxOverflow() {\n const meta = this._cachedMeta;\n const dataset = meta.dataset;\n const border = dataset.options && dataset.options.borderWidth || 0;\n const data = meta.data || [];\n if (!data.length) {\n return border;\n }\n const firstPoint = data[0].size(this.resolveDataElementOptions(0));\n const lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1));\n return Math.max(border, firstPoint, lastPoint) / 2;\n }\n draw() {\n const meta = this._cachedMeta;\n meta.dataset.updateControlPoints(this.chart.chartArea, meta.iScale.axis);\n super.draw();\n }\n }\n return LineController;\n})();\nlet PolarAreaController = /*#__PURE__*/(() => {\n class PolarAreaController extends DatasetController {\n static id = 'polarArea';\n static defaults = {\n dataElementType: 'arc',\n animation: {\n animateRotate: true,\n animateScale: true\n },\n animations: {\n numbers: {\n type: 'number',\n properties: ['x', 'y', 'startAngle', 'endAngle', 'innerRadius', 'outerRadius']\n }\n },\n indexAxis: 'r',\n startAngle: 0\n };\n static overrides = {\n aspectRatio: 1,\n plugins: {\n legend: {\n labels: {\n generateLabels(chart) {\n const data = chart.data;\n if (data.labels.length && data.datasets.length) {\n const {\n labels: {\n pointStyle,\n color\n }\n } = chart.legend.options;\n return data.labels.map((label, i) => {\n const meta = chart.getDatasetMeta(0);\n const style = meta.controller.getStyle(i);\n return {\n text: label,\n fillStyle: style.backgroundColor,\n strokeStyle: style.borderColor,\n fontColor: color,\n lineWidth: style.borderWidth,\n pointStyle: pointStyle,\n hidden: !chart.getDataVisibility(i),\n index: i\n };\n });\n }\n return [];\n }\n },\n onClick(e, legendItem, legend) {\n legend.chart.toggleDataVisibility(legendItem.index);\n legend.chart.update();\n }\n }\n },\n scales: {\n r: {\n type: 'radialLinear',\n angleLines: {\n display: false\n },\n beginAtZero: true,\n grid: {\n circular: true\n },\n pointLabels: {\n display: false\n },\n startAngle: 0\n }\n }\n };\n constructor(chart, datasetIndex) {\n super(chart, datasetIndex);\n this.innerRadius = undefined;\n this.outerRadius = undefined;\n }\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const chart = this.chart;\n const labels = chart.data.labels || [];\n const value = formatNumber(meta._parsed[index].r, chart.options.locale);\n return {\n label: labels[index] || '',\n value\n };\n }\n parseObjectData(meta, data, start, count) {\n return _parseObjectDataRadialScale.bind(this)(meta, data, start, count);\n }\n update(mode) {\n const arcs = this._cachedMeta.data;\n this._updateRadius();\n this.updateElements(arcs, 0, arcs.length, mode);\n }\n getMinMax() {\n const meta = this._cachedMeta;\n const range = {\n min: Number.POSITIVE_INFINITY,\n max: Number.NEGATIVE_INFINITY\n };\n meta.data.forEach((element, index) => {\n const parsed = this.getParsed(index).r;\n if (!isNaN(parsed) && this.chart.getDataVisibility(index)) {\n if (parsed < range.min) {\n range.min = parsed;\n }\n if (parsed > range.max) {\n range.max = parsed;\n }\n }\n });\n return range;\n }\n _updateRadius() {\n const chart = this.chart;\n const chartArea = chart.chartArea;\n const opts = chart.options;\n const minSize = Math.min(chartArea.right - chartArea.left, chartArea.bottom - chartArea.top);\n const outerRadius = Math.max(minSize / 2, 0);\n const innerRadius = Math.max(opts.cutoutPercentage ? outerRadius / 100 * opts.cutoutPercentage : 1, 0);\n const radiusLength = (outerRadius - innerRadius) / chart.getVisibleDatasetCount();\n this.outerRadius = outerRadius - radiusLength * this.index;\n this.innerRadius = this.outerRadius - radiusLength;\n }\n updateElements(arcs, start, count, mode) {\n const reset = mode === 'reset';\n const chart = this.chart;\n const opts = chart.options;\n const animationOpts = opts.animation;\n const scale = this._cachedMeta.rScale;\n const centerX = scale.xCenter;\n const centerY = scale.yCenter;\n const datasetStartAngle = scale.getIndexAngle(0) - 0.5 * PI;\n let angle = datasetStartAngle;\n let i;\n const defaultAngle = 360 / this.countVisibleElements();\n for (i = 0; i < start; ++i) {\n angle += this._computeAngle(i, mode, defaultAngle);\n }\n for (i = start; i < start + count; i++) {\n const arc = arcs[i];\n let startAngle = angle;\n let endAngle = angle + this._computeAngle(i, mode, defaultAngle);\n let outerRadius = chart.getDataVisibility(i) ? scale.getDistanceFromCenterForValue(this.getParsed(i).r) : 0;\n angle = endAngle;\n if (reset) {\n if (animationOpts.animateScale) {\n outerRadius = 0;\n }\n if (animationOpts.animateRotate) {\n startAngle = endAngle = datasetStartAngle;\n }\n }\n const properties = {\n x: centerX,\n y: centerY,\n innerRadius: 0,\n outerRadius,\n startAngle,\n endAngle,\n options: this.resolveDataElementOptions(i, arc.active ? 'active' : mode)\n };\n this.updateElement(arc, i, properties, mode);\n }\n }\n countVisibleElements() {\n const meta = this._cachedMeta;\n let count = 0;\n meta.data.forEach((element, index) => {\n if (!isNaN(this.getParsed(index).r) && this.chart.getDataVisibility(index)) {\n count++;\n }\n });\n return count;\n }\n _computeAngle(index, mode, defaultAngle) {\n return this.chart.getDataVisibility(index) ? toRadians(this.resolveDataElementOptions(index, mode).angle || defaultAngle) : 0;\n }\n }\n return PolarAreaController;\n})();\nlet PieController = /*#__PURE__*/(() => {\n class PieController extends DoughnutController {\n static id = 'pie';\n static defaults = {\n cutout: 0,\n rotation: 0,\n circumference: 360,\n radius: '100%'\n };\n }\n return PieController;\n})();\nlet RadarController = /*#__PURE__*/(() => {\n class RadarController extends DatasetController {\n static id = 'radar';\n static defaults = {\n datasetElementType: 'line',\n dataElementType: 'point',\n indexAxis: 'r',\n showLine: true,\n elements: {\n line: {\n fill: 'start'\n }\n }\n };\n static overrides = {\n aspectRatio: 1,\n scales: {\n r: {\n type: 'radialLinear'\n }\n }\n };\n getLabelAndValue(index) {\n const vScale = this._cachedMeta.vScale;\n const parsed = this.getParsed(index);\n return {\n label: vScale.getLabels()[index],\n value: '' + vScale.getLabelForValue(parsed[vScale.axis])\n };\n }\n parseObjectData(meta, data, start, count) {\n return _parseObjectDataRadialScale.bind(this)(meta, data, start, count);\n }\n update(mode) {\n const meta = this._cachedMeta;\n const line = meta.dataset;\n const points = meta.data || [];\n const labels = meta.iScale.getLabels();\n line.points = points;\n if (mode !== 'resize') {\n const options = this.resolveDatasetElementOptions(mode);\n if (!this.options.showLine) {\n options.borderWidth = 0;\n }\n const properties = {\n _loop: true,\n _fullLoop: labels.length === points.length,\n options\n };\n this.updateElement(line, undefined, properties, mode);\n }\n this.updateElements(points, 0, points.length, mode);\n }\n updateElements(points, start, count, mode) {\n const scale = this._cachedMeta.rScale;\n const reset = mode === 'reset';\n for (let i = start; i < start + count; i++) {\n const point = points[i];\n const options = this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n const pointPosition = scale.getPointPositionForValue(i, this.getParsed(i).r);\n const x = reset ? scale.xCenter : pointPosition.x;\n const y = reset ? scale.yCenter : pointPosition.y;\n const properties = {\n x,\n y,\n angle: pointPosition.angle,\n skip: isNaN(x) || isNaN(y),\n options\n };\n this.updateElement(point, i, properties, mode);\n }\n }\n }\n return RadarController;\n})();\nlet ScatterController = /*#__PURE__*/(() => {\n class ScatterController extends DatasetController {\n static id = 'scatter';\n static defaults = {\n datasetElementType: false,\n dataElementType: 'point',\n showLine: false,\n fill: false\n };\n static overrides = {\n interaction: {\n mode: 'point'\n },\n scales: {\n x: {\n type: 'linear'\n },\n y: {\n type: 'linear'\n }\n }\n };\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const labels = this.chart.data.labels || [];\n const {\n xScale,\n yScale\n } = meta;\n const parsed = this.getParsed(index);\n const x = xScale.getLabelForValue(parsed.x);\n const y = yScale.getLabelForValue(parsed.y);\n return {\n label: labels[index] || '',\n value: '(' + x + ', ' + y + ')'\n };\n }\n update(mode) {\n const meta = this._cachedMeta;\n const {\n data: points = []\n } = meta;\n const animationsDisabled = this.chart._animationsDisabled;\n let {\n start,\n count\n } = _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled);\n this._drawStart = start;\n this._drawCount = count;\n if (_scaleRangesChanged(meta)) {\n start = 0;\n count = points.length;\n }\n if (this.options.showLine) {\n if (!this.datasetElementType) {\n this.addElements();\n }\n const {\n dataset: line,\n _dataset\n } = meta;\n line._chart = this.chart;\n line._datasetIndex = this.index;\n line._decimated = !!_dataset._decimated;\n line.points = points;\n const options = this.resolveDatasetElementOptions(mode);\n options.segment = this.options.segment;\n this.updateElement(line, undefined, {\n animated: !animationsDisabled,\n options\n }, mode);\n } else if (this.datasetElementType) {\n delete meta.dataset;\n this.datasetElementType = false;\n }\n this.updateElements(points, start, count, mode);\n }\n addElements() {\n const {\n showLine\n } = this.options;\n if (!this.datasetElementType && showLine) {\n this.datasetElementType = this.chart.registry.getElement('line');\n }\n super.addElements();\n }\n updateElements(points, start, count, mode) {\n const reset = mode === 'reset';\n const {\n iScale,\n vScale,\n _stacked,\n _dataset\n } = this._cachedMeta;\n const firstOpts = this.resolveDataElementOptions(start, mode);\n const sharedOptions = this.getSharedOptions(firstOpts);\n const includeOptions = this.includeOptions(mode, sharedOptions);\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n const {\n spanGaps,\n segment\n } = this.options;\n const maxGapLength = isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;\n const directUpdate = this.chart._animationsDisabled || reset || mode === 'none';\n let prevParsed = start > 0 && this.getParsed(start - 1);\n for (let i = start; i < start + count; ++i) {\n const point = points[i];\n const parsed = this.getParsed(i);\n const properties = directUpdate ? point : {};\n const nullData = isNullOrUndef(parsed[vAxis]);\n const iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);\n const vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);\n properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;\n properties.stop = i > 0 && Math.abs(parsed[iAxis] - prevParsed[iAxis]) > maxGapLength;\n if (segment) {\n properties.parsed = parsed;\n properties.raw = _dataset.data[i];\n }\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n }\n if (!directUpdate) {\n this.updateElement(point, i, properties, mode);\n }\n prevParsed = parsed;\n }\n this.updateSharedOptions(sharedOptions, mode, firstOpts);\n }\n getMaxOverflow() {\n const meta = this._cachedMeta;\n const data = meta.data || [];\n if (!this.options.showLine) {\n let max = 0;\n for (let i = data.length - 1; i >= 0; --i) {\n max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) / 2);\n }\n return max > 0 && max;\n }\n const dataset = meta.dataset;\n const border = dataset.options && dataset.options.borderWidth || 0;\n if (!data.length) {\n return border;\n }\n const firstPoint = data[0].size(this.resolveDataElementOptions(0));\n const lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1));\n return Math.max(border, firstPoint, lastPoint) / 2;\n }\n }\n return ScatterController;\n})();\nvar controllers = /*#__PURE__*/Object.freeze({\n __proto__: null,\n BarController: BarController,\n BubbleController: BubbleController,\n DoughnutController: DoughnutController,\n LineController: LineController,\n PieController: PieController,\n PolarAreaController: PolarAreaController,\n RadarController: RadarController,\n ScatterController: ScatterController\n});\n\n/**\n * @namespace Chart._adapters\n * @since 2.8.0\n * @private\n */\nfunction abstract() {\n throw new Error('This method is not implemented: Check that a complete date adapter is provided.');\n}\n/**\n * Date adapter (current used by the time scale)\n * @namespace Chart._adapters._date\n * @memberof Chart._adapters\n * @private\n */\nclass DateAdapterBase {\n /**\n * Override default date adapter methods.\n * Accepts type parameter to define options type.\n * @example\n * Chart._adapters._date.override<{myAdapterOption: string}>({\n * init() {\n * console.log(this.options.myAdapterOption);\n * }\n * })\n */\n static override(members) {\n Object.assign(DateAdapterBase.prototype, members);\n }\n options;\n constructor(options) {\n this.options = options || {};\n }\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n init() {}\n formats() {\n return abstract();\n }\n parse() {\n return abstract();\n }\n format() {\n return abstract();\n }\n add() {\n return abstract();\n }\n diff() {\n return abstract();\n }\n startOf() {\n return abstract();\n }\n endOf() {\n return abstract();\n }\n}\nvar adapters = {\n _date: DateAdapterBase\n};\nfunction binarySearch(metaset, axis, value, intersect) {\n const {\n controller,\n data,\n _sorted\n } = metaset;\n const iScale = controller._cachedMeta.iScale;\n const spanGaps = metaset.dataset ? metaset.dataset.options ? metaset.dataset.options.spanGaps : null : null;\n if (iScale && axis === iScale.axis && axis !== 'r' && _sorted && data.length) {\n const lookupMethod = iScale._reversePixels ? _rlookupByKey : _lookupByKey;\n if (!intersect) {\n const result = lookupMethod(data, axis, value);\n if (spanGaps) {\n const {\n vScale\n } = controller._cachedMeta;\n const {\n _parsed\n } = metaset;\n const distanceToDefinedLo = _parsed.slice(0, result.lo + 1).reverse().findIndex(point => !isNullOrUndef(point[vScale.axis]));\n result.lo -= Math.max(0, distanceToDefinedLo);\n const distanceToDefinedHi = _parsed.slice(result.hi).findIndex(point => !isNullOrUndef(point[vScale.axis]));\n result.hi += Math.max(0, distanceToDefinedHi);\n }\n return result;\n } else if (controller._sharedOptions) {\n const el = data[0];\n const range = typeof el.getRange === 'function' && el.getRange(axis);\n if (range) {\n const start = lookupMethod(data, axis, value - range);\n const end = lookupMethod(data, axis, value + range);\n return {\n lo: start.lo,\n hi: end.hi\n };\n }\n }\n }\n return {\n lo: 0,\n hi: data.length - 1\n };\n}\nfunction evaluateInteractionItems(chart, axis, position, handler, intersect) {\n const metasets = chart.getSortedVisibleDatasetMetas();\n const value = position[axis];\n for (let i = 0, ilen = metasets.length; i < ilen; ++i) {\n const {\n index,\n data\n } = metasets[i];\n const {\n lo,\n hi\n } = binarySearch(metasets[i], axis, value, intersect);\n for (let j = lo; j <= hi; ++j) {\n const element = data[j];\n if (!element.skip) {\n handler(element, index, j);\n }\n }\n }\n}\nfunction getDistanceMetricForAxis(axis) {\n const useX = axis.indexOf('x') !== -1;\n const useY = axis.indexOf('y') !== -1;\n return function (pt1, pt2) {\n const deltaX = useX ? Math.abs(pt1.x - pt2.x) : 0;\n const deltaY = useY ? Math.abs(pt1.y - pt2.y) : 0;\n return Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaY, 2));\n };\n}\nfunction getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) {\n const items = [];\n if (!includeInvisible && !chart.isPointInArea(position)) {\n return items;\n }\n const evaluationFunc = function (element, datasetIndex, index) {\n if (!includeInvisible && !_isPointInArea(element, chart.chartArea, 0)) {\n return;\n }\n if (element.inRange(position.x, position.y, useFinalPosition)) {\n items.push({\n element,\n datasetIndex,\n index\n });\n }\n };\n evaluateInteractionItems(chart, axis, position, evaluationFunc, true);\n return items;\n}\nfunction getNearestRadialItems(chart, position, axis, useFinalPosition) {\n let items = [];\n function evaluationFunc(element, datasetIndex, index) {\n const {\n startAngle,\n endAngle\n } = element.getProps(['startAngle', 'endAngle'], useFinalPosition);\n const {\n angle\n } = getAngleFromPoint(element, {\n x: position.x,\n y: position.y\n });\n if (_angleBetween(angle, startAngle, endAngle)) {\n items.push({\n element,\n datasetIndex,\n index\n });\n }\n }\n evaluateInteractionItems(chart, axis, position, evaluationFunc);\n return items;\n}\nfunction getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {\n let items = [];\n const distanceMetric = getDistanceMetricForAxis(axis);\n let minDistance = Number.POSITIVE_INFINITY;\n function evaluationFunc(element, datasetIndex, index) {\n const inRange = element.inRange(position.x, position.y, useFinalPosition);\n if (intersect && !inRange) {\n return;\n }\n const center = element.getCenterPoint(useFinalPosition);\n const pointInArea = !!includeInvisible || chart.isPointInArea(center);\n if (!pointInArea && !inRange) {\n return;\n }\n const distance = distanceMetric(position, center);\n if (distance < minDistance) {\n items = [{\n element,\n datasetIndex,\n index\n }];\n minDistance = distance;\n } else if (distance === minDistance) {\n items.push({\n element,\n datasetIndex,\n index\n });\n }\n }\n evaluateInteractionItems(chart, axis, position, evaluationFunc);\n return items;\n}\nfunction getNearestItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {\n if (!includeInvisible && !chart.isPointInArea(position)) {\n return [];\n }\n return axis === 'r' && !intersect ? getNearestRadialItems(chart, position, axis, useFinalPosition) : getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible);\n}\nfunction getAxisItems(chart, position, axis, intersect, useFinalPosition) {\n const items = [];\n const rangeMethod = axis === 'x' ? 'inXRange' : 'inYRange';\n let intersectsItem = false;\n evaluateInteractionItems(chart, axis, position, (element, datasetIndex, index) => {\n if (element[rangeMethod] && element[rangeMethod](position[axis], useFinalPosition)) {\n items.push({\n element,\n datasetIndex,\n index\n });\n intersectsItem = intersectsItem || element.inRange(position.x, position.y, useFinalPosition);\n }\n });\n if (intersect && !intersectsItem) {\n return [];\n }\n return items;\n}\nvar Interaction = {\n evaluateInteractionItems,\n modes: {\n index(chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'x';\n const includeInvisible = options.includeInvisible || false;\n const items = options.intersect ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) : getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);\n const elements = [];\n if (!items.length) {\n return [];\n }\n chart.getSortedVisibleDatasetMetas().forEach(meta => {\n const index = items[0].index;\n const element = meta.data[index];\n if (element && !element.skip) {\n elements.push({\n element,\n datasetIndex: meta.index,\n index\n });\n }\n });\n return elements;\n },\n dataset(chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'xy';\n const includeInvisible = options.includeInvisible || false;\n let items = options.intersect ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) : getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);\n if (items.length > 0) {\n const datasetIndex = items[0].datasetIndex;\n const data = chart.getDatasetMeta(datasetIndex).data;\n items = [];\n for (let i = 0; i < data.length; ++i) {\n items.push({\n element: data[i],\n datasetIndex,\n index: i\n });\n }\n }\n return items;\n },\n point(chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'xy';\n const includeInvisible = options.includeInvisible || false;\n return getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible);\n },\n nearest(chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'xy';\n const includeInvisible = options.includeInvisible || false;\n return getNearestItems(chart, position, axis, options.intersect, useFinalPosition, includeInvisible);\n },\n x(chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n return getAxisItems(chart, position, 'x', options.intersect, useFinalPosition);\n },\n y(chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n return getAxisItems(chart, position, 'y', options.intersect, useFinalPosition);\n }\n }\n};\nconst STATIC_POSITIONS = ['left', 'top', 'right', 'bottom'];\nfunction filterByPosition(array, position) {\n return array.filter(v => v.pos === position);\n}\nfunction filterDynamicPositionByAxis(array, axis) {\n return array.filter(v => STATIC_POSITIONS.indexOf(v.pos) === -1 && v.box.axis === axis);\n}\nfunction sortByWeight(array, reverse) {\n return array.sort((a, b) => {\n const v0 = reverse ? b : a;\n const v1 = reverse ? a : b;\n return v0.weight === v1.weight ? v0.index - v1.index : v0.weight - v1.weight;\n });\n}\nfunction wrapBoxes(boxes) {\n const layoutBoxes = [];\n let i, ilen, box, pos, stack, stackWeight;\n for (i = 0, ilen = (boxes || []).length; i < ilen; ++i) {\n box = boxes[i];\n ({\n position: pos,\n options: {\n stack,\n stackWeight = 1\n }\n } = box);\n layoutBoxes.push({\n index: i,\n box,\n pos,\n horizontal: box.isHorizontal(),\n weight: box.weight,\n stack: stack && pos + stack,\n stackWeight\n });\n }\n return layoutBoxes;\n}\nfunction buildStacks(layouts) {\n const stacks = {};\n for (const wrap of layouts) {\n const {\n stack,\n pos,\n stackWeight\n } = wrap;\n if (!stack || !STATIC_POSITIONS.includes(pos)) {\n continue;\n }\n const _stack = stacks[stack] || (stacks[stack] = {\n count: 0,\n placed: 0,\n weight: 0,\n size: 0\n });\n _stack.count++;\n _stack.weight += stackWeight;\n }\n return stacks;\n}\nfunction setLayoutDims(layouts, params) {\n const stacks = buildStacks(layouts);\n const {\n vBoxMaxWidth,\n hBoxMaxHeight\n } = params;\n let i, ilen, layout;\n for (i = 0, ilen = layouts.length; i < ilen; ++i) {\n layout = layouts[i];\n const {\n fullSize\n } = layout.box;\n const stack = stacks[layout.stack];\n const factor = stack && layout.stackWeight / stack.weight;\n if (layout.horizontal) {\n layout.width = factor ? factor * vBoxMaxWidth : fullSize && params.availableWidth;\n layout.height = hBoxMaxHeight;\n } else {\n layout.width = vBoxMaxWidth;\n layout.height = factor ? factor * hBoxMaxHeight : fullSize && params.availableHeight;\n }\n }\n return stacks;\n}\nfunction buildLayoutBoxes(boxes) {\n const layoutBoxes = wrapBoxes(boxes);\n const fullSize = sortByWeight(layoutBoxes.filter(wrap => wrap.box.fullSize), true);\n const left = sortByWeight(filterByPosition(layoutBoxes, 'left'), true);\n const right = sortByWeight(filterByPosition(layoutBoxes, 'right'));\n const top = sortByWeight(filterByPosition(layoutBoxes, 'top'), true);\n const bottom = sortByWeight(filterByPosition(layoutBoxes, 'bottom'));\n const centerHorizontal = filterDynamicPositionByAxis(layoutBoxes, 'x');\n const centerVertical = filterDynamicPositionByAxis(layoutBoxes, 'y');\n return {\n fullSize,\n leftAndTop: left.concat(top),\n rightAndBottom: right.concat(centerVertical).concat(bottom).concat(centerHorizontal),\n chartArea: filterByPosition(layoutBoxes, 'chartArea'),\n vertical: left.concat(right).concat(centerVertical),\n horizontal: top.concat(bottom).concat(centerHorizontal)\n };\n}\nfunction getCombinedMax(maxPadding, chartArea, a, b) {\n return Math.max(maxPadding[a], chartArea[a]) + Math.max(maxPadding[b], chartArea[b]);\n}\nfunction updateMaxPadding(maxPadding, boxPadding) {\n maxPadding.top = Math.max(maxPadding.top, boxPadding.top);\n maxPadding.left = Math.max(maxPadding.left, boxPadding.left);\n maxPadding.bottom = Math.max(maxPadding.bottom, boxPadding.bottom);\n maxPadding.right = Math.max(maxPadding.right, boxPadding.right);\n}\nfunction updateDims(chartArea, params, layout, stacks) {\n const {\n pos,\n box\n } = layout;\n const maxPadding = chartArea.maxPadding;\n if (!isObject(pos)) {\n if (layout.size) {\n chartArea[pos] -= layout.size;\n }\n const stack = stacks[layout.stack] || {\n size: 0,\n count: 1\n };\n stack.size = Math.max(stack.size, layout.horizontal ? box.height : box.width);\n layout.size = stack.size / stack.count;\n chartArea[pos] += layout.size;\n }\n if (box.getPadding) {\n updateMaxPadding(maxPadding, box.getPadding());\n }\n const newWidth = Math.max(0, params.outerWidth - getCombinedMax(maxPadding, chartArea, 'left', 'right'));\n const newHeight = Math.max(0, params.outerHeight - getCombinedMax(maxPadding, chartArea, 'top', 'bottom'));\n const widthChanged = newWidth !== chartArea.w;\n const heightChanged = newHeight !== chartArea.h;\n chartArea.w = newWidth;\n chartArea.h = newHeight;\n return layout.horizontal ? {\n same: widthChanged,\n other: heightChanged\n } : {\n same: heightChanged,\n other: widthChanged\n };\n}\nfunction handleMaxPadding(chartArea) {\n const maxPadding = chartArea.maxPadding;\n function updatePos(pos) {\n const change = Math.max(maxPadding[pos] - chartArea[pos], 0);\n chartArea[pos] += change;\n return change;\n }\n chartArea.y += updatePos('top');\n chartArea.x += updatePos('left');\n updatePos('right');\n updatePos('bottom');\n}\nfunction getMargins(horizontal, chartArea) {\n const maxPadding = chartArea.maxPadding;\n function marginForPositions(positions) {\n const margin = {\n left: 0,\n top: 0,\n right: 0,\n bottom: 0\n };\n positions.forEach(pos => {\n margin[pos] = Math.max(chartArea[pos], maxPadding[pos]);\n });\n return margin;\n }\n return horizontal ? marginForPositions(['left', 'right']) : marginForPositions(['top', 'bottom']);\n}\nfunction fitBoxes(boxes, chartArea, params, stacks) {\n const refitBoxes = [];\n let i, ilen, layout, box, refit, changed;\n for (i = 0, ilen = boxes.length, refit = 0; i < ilen; ++i) {\n layout = boxes[i];\n box = layout.box;\n box.update(layout.width || chartArea.w, layout.height || chartArea.h, getMargins(layout.horizontal, chartArea));\n const {\n same,\n other\n } = updateDims(chartArea, params, layout, stacks);\n refit |= same && refitBoxes.length;\n changed = changed || other;\n if (!box.fullSize) {\n refitBoxes.push(layout);\n }\n }\n return refit && fitBoxes(refitBoxes, chartArea, params, stacks) || changed;\n}\nfunction setBoxDims(box, left, top, width, height) {\n box.top = top;\n box.left = left;\n box.right = left + width;\n box.bottom = top + height;\n box.width = width;\n box.height = height;\n}\nfunction placeBoxes(boxes, chartArea, params, stacks) {\n const userPadding = params.padding;\n let {\n x,\n y\n } = chartArea;\n for (const layout of boxes) {\n const box = layout.box;\n const stack = stacks[layout.stack] || {\n count: 1,\n placed: 0,\n weight: 1\n };\n const weight = layout.stackWeight / stack.weight || 1;\n if (layout.horizontal) {\n const width = chartArea.w * weight;\n const height = stack.size || box.height;\n if (defined(stack.start)) {\n y = stack.start;\n }\n if (box.fullSize) {\n setBoxDims(box, userPadding.left, y, params.outerWidth - userPadding.right - userPadding.left, height);\n } else {\n setBoxDims(box, chartArea.left + stack.placed, y, width, height);\n }\n stack.start = y;\n stack.placed += width;\n y = box.bottom;\n } else {\n const height = chartArea.h * weight;\n const width = stack.size || box.width;\n if (defined(stack.start)) {\n x = stack.start;\n }\n if (box.fullSize) {\n setBoxDims(box, x, userPadding.top, width, params.outerHeight - userPadding.bottom - userPadding.top);\n } else {\n setBoxDims(box, x, chartArea.top + stack.placed, width, height);\n }\n stack.start = x;\n stack.placed += height;\n x = box.right;\n }\n }\n chartArea.x = x;\n chartArea.y = y;\n}\nvar layouts = {\n addBox(chart, item) {\n if (!chart.boxes) {\n chart.boxes = [];\n }\n item.fullSize = item.fullSize || false;\n item.position = item.position || 'top';\n item.weight = item.weight || 0;\n item._layers = item._layers || function () {\n return [{\n z: 0,\n draw(chartArea) {\n item.draw(chartArea);\n }\n }];\n };\n chart.boxes.push(item);\n },\n removeBox(chart, layoutItem) {\n const index = chart.boxes ? chart.boxes.indexOf(layoutItem) : -1;\n if (index !== -1) {\n chart.boxes.splice(index, 1);\n }\n },\n configure(chart, item, options) {\n item.fullSize = options.fullSize;\n item.position = options.position;\n item.weight = options.weight;\n },\n update(chart, width, height, minPadding) {\n if (!chart) {\n return;\n }\n const padding = toPadding(chart.options.layout.padding);\n const availableWidth = Math.max(width - padding.width, 0);\n const availableHeight = Math.max(height - padding.height, 0);\n const boxes = buildLayoutBoxes(chart.boxes);\n const verticalBoxes = boxes.vertical;\n const horizontalBoxes = boxes.horizontal;\n each(chart.boxes, box => {\n if (typeof box.beforeLayout === 'function') {\n box.beforeLayout();\n }\n });\n const visibleVerticalBoxCount = verticalBoxes.reduce((total, wrap) => wrap.box.options && wrap.box.options.display === false ? total : total + 1, 0) || 1;\n const params = Object.freeze({\n outerWidth: width,\n outerHeight: height,\n padding,\n availableWidth,\n availableHeight,\n vBoxMaxWidth: availableWidth / 2 / visibleVerticalBoxCount,\n hBoxMaxHeight: availableHeight / 2\n });\n const maxPadding = Object.assign({}, padding);\n updateMaxPadding(maxPadding, toPadding(minPadding));\n const chartArea = Object.assign({\n maxPadding,\n w: availableWidth,\n h: availableHeight,\n x: padding.left,\n y: padding.top\n }, padding);\n const stacks = setLayoutDims(verticalBoxes.concat(horizontalBoxes), params);\n fitBoxes(boxes.fullSize, chartArea, params, stacks);\n fitBoxes(verticalBoxes, chartArea, params, stacks);\n if (fitBoxes(horizontalBoxes, chartArea, params, stacks)) {\n fitBoxes(verticalBoxes, chartArea, params, stacks);\n }\n handleMaxPadding(chartArea);\n placeBoxes(boxes.leftAndTop, chartArea, params, stacks);\n chartArea.x += chartArea.w;\n chartArea.y += chartArea.h;\n placeBoxes(boxes.rightAndBottom, chartArea, params, stacks);\n chart.chartArea = {\n left: chartArea.left,\n top: chartArea.top,\n right: chartArea.left + chartArea.w,\n bottom: chartArea.top + chartArea.h,\n height: chartArea.h,\n width: chartArea.w\n };\n each(boxes.chartArea, layout => {\n const box = layout.box;\n Object.assign(box, chart.chartArea);\n box.update(chartArea.w, chartArea.h, {\n left: 0,\n top: 0,\n right: 0,\n bottom: 0\n });\n });\n }\n};\nclass BasePlatform {\n acquireContext(canvas, aspectRatio) {}\n releaseContext(context) {\n return false;\n }\n addEventListener(chart, type, listener) {}\n removeEventListener(chart, type, listener) {}\n getDevicePixelRatio() {\n return 1;\n }\n getMaximumSize(element, width, height, aspectRatio) {\n width = Math.max(0, width || element.width);\n height = height || element.height;\n return {\n width,\n height: Math.max(0, aspectRatio ? Math.floor(width / aspectRatio) : height)\n };\n }\n isAttached(canvas) {\n return true;\n }\n updateConfig(config) {}\n}\nclass BasicPlatform extends BasePlatform {\n acquireContext(item) {\n return item && item.getContext && item.getContext('2d') || null;\n }\n updateConfig(config) {\n config.options.animation = false;\n }\n}\nconst EXPANDO_KEY = '$chartjs';\nconst EVENT_TYPES = {\n touchstart: 'mousedown',\n touchmove: 'mousemove',\n touchend: 'mouseup',\n pointerenter: 'mouseenter',\n pointerdown: 'mousedown',\n pointermove: 'mousemove',\n pointerup: 'mouseup',\n pointerleave: 'mouseout',\n pointerout: 'mouseout'\n};\nconst isNullOrEmpty = value => value === null || value === '';\nfunction initCanvas(canvas, aspectRatio) {\n const style = canvas.style;\n const renderHeight = canvas.getAttribute('height');\n const renderWidth = canvas.getAttribute('width');\n canvas[EXPANDO_KEY] = {\n initial: {\n height: renderHeight,\n width: renderWidth,\n style: {\n display: style.display,\n height: style.height,\n width: style.width\n }\n }\n };\n style.display = style.display || 'block';\n style.boxSizing = style.boxSizing || 'border-box';\n if (isNullOrEmpty(renderWidth)) {\n const displayWidth = readUsedSize(canvas, 'width');\n if (displayWidth !== undefined) {\n canvas.width = displayWidth;\n }\n }\n if (isNullOrEmpty(renderHeight)) {\n if (canvas.style.height === '') {\n canvas.height = canvas.width / (aspectRatio || 2);\n } else {\n const displayHeight = readUsedSize(canvas, 'height');\n if (displayHeight !== undefined) {\n canvas.height = displayHeight;\n }\n }\n }\n return canvas;\n}\nconst eventListenerOptions = supportsEventListenerOptions ? {\n passive: true\n} : false;\nfunction addListener(node, type, listener) {\n if (node) {\n node.addEventListener(type, listener, eventListenerOptions);\n }\n}\nfunction removeListener(chart, type, listener) {\n if (chart && chart.canvas) {\n chart.canvas.removeEventListener(type, listener, eventListenerOptions);\n }\n}\nfunction fromNativeEvent(event, chart) {\n const type = EVENT_TYPES[event.type] || event.type;\n const {\n x,\n y\n } = getRelativePosition(event, chart);\n return {\n type,\n chart,\n native: event,\n x: x !== undefined ? x : null,\n y: y !== undefined ? y : null\n };\n}\nfunction nodeListContains(nodeList, canvas) {\n for (const node of nodeList) {\n if (node === canvas || node.contains(canvas)) {\n return true;\n }\n }\n}\nfunction createAttachObserver(chart, type, listener) {\n const canvas = chart.canvas;\n const observer = new MutationObserver(entries => {\n let trigger = false;\n for (const entry of entries) {\n trigger = trigger || nodeListContains(entry.addedNodes, canvas);\n trigger = trigger && !nodeListContains(entry.removedNodes, canvas);\n }\n if (trigger) {\n listener();\n }\n });\n observer.observe(document, {\n childList: true,\n subtree: true\n });\n return observer;\n}\nfunction createDetachObserver(chart, type, listener) {\n const canvas = chart.canvas;\n const observer = new MutationObserver(entries => {\n let trigger = false;\n for (const entry of entries) {\n trigger = trigger || nodeListContains(entry.removedNodes, canvas);\n trigger = trigger && !nodeListContains(entry.addedNodes, canvas);\n }\n if (trigger) {\n listener();\n }\n });\n observer.observe(document, {\n childList: true,\n subtree: true\n });\n return observer;\n}\nconst drpListeningCharts = new Map();\nlet oldDevicePixelRatio = 0;\nfunction onWindowResize() {\n const dpr = window.devicePixelRatio;\n if (dpr === oldDevicePixelRatio) {\n return;\n }\n oldDevicePixelRatio = dpr;\n drpListeningCharts.forEach((resize, chart) => {\n if (chart.currentDevicePixelRatio !== dpr) {\n resize();\n }\n });\n}\nfunction listenDevicePixelRatioChanges(chart, resize) {\n if (!drpListeningCharts.size) {\n window.addEventListener('resize', onWindowResize);\n }\n drpListeningCharts.set(chart, resize);\n}\nfunction unlistenDevicePixelRatioChanges(chart) {\n drpListeningCharts.delete(chart);\n if (!drpListeningCharts.size) {\n window.removeEventListener('resize', onWindowResize);\n }\n}\nfunction createResizeObserver(chart, type, listener) {\n const canvas = chart.canvas;\n const container = canvas && _getParentNode(canvas);\n if (!container) {\n return;\n }\n const resize = throttled((width, height) => {\n const w = container.clientWidth;\n listener(width, height);\n if (w < container.clientWidth) {\n listener();\n }\n }, window);\n const observer = new ResizeObserver(entries => {\n const entry = entries[0];\n const width = entry.contentRect.width;\n const height = entry.contentRect.height;\n if (width === 0 && height === 0) {\n return;\n }\n resize(width, height);\n });\n observer.observe(container);\n listenDevicePixelRatioChanges(chart, resize);\n return observer;\n}\nfunction releaseObserver(chart, type, observer) {\n if (observer) {\n observer.disconnect();\n }\n if (type === 'resize') {\n unlistenDevicePixelRatioChanges(chart);\n }\n}\nfunction createProxyAndListen(chart, type, listener) {\n const canvas = chart.canvas;\n const proxy = throttled(event => {\n if (chart.ctx !== null) {\n listener(fromNativeEvent(event, chart));\n }\n }, chart);\n addListener(canvas, type, proxy);\n return proxy;\n}\nclass DomPlatform extends BasePlatform {\n acquireContext(canvas, aspectRatio) {\n const context = canvas && canvas.getContext && canvas.getContext('2d');\n if (context && context.canvas === canvas) {\n initCanvas(canvas, aspectRatio);\n return context;\n }\n return null;\n }\n releaseContext(context) {\n const canvas = context.canvas;\n if (!canvas[EXPANDO_KEY]) {\n return false;\n }\n const initial = canvas[EXPANDO_KEY].initial;\n ['height', 'width'].forEach(prop => {\n const value = initial[prop];\n if (isNullOrUndef(value)) {\n canvas.removeAttribute(prop);\n } else {\n canvas.setAttribute(prop, value);\n }\n });\n const style = initial.style || {};\n Object.keys(style).forEach(key => {\n canvas.style[key] = style[key];\n });\n canvas.width = canvas.width;\n delete canvas[EXPANDO_KEY];\n return true;\n }\n addEventListener(chart, type, listener) {\n this.removeEventListener(chart, type);\n const proxies = chart.$proxies || (chart.$proxies = {});\n const handlers = {\n attach: createAttachObserver,\n detach: createDetachObserver,\n resize: createResizeObserver\n };\n const handler = handlers[type] || createProxyAndListen;\n proxies[type] = handler(chart, type, listener);\n }\n removeEventListener(chart, type) {\n const proxies = chart.$proxies || (chart.$proxies = {});\n const proxy = proxies[type];\n if (!proxy) {\n return;\n }\n const handlers = {\n attach: releaseObserver,\n detach: releaseObserver,\n resize: releaseObserver\n };\n const handler = handlers[type] || removeListener;\n handler(chart, type, proxy);\n proxies[type] = undefined;\n }\n getDevicePixelRatio() {\n return window.devicePixelRatio;\n }\n getMaximumSize(canvas, width, height, aspectRatio) {\n return getMaximumSize(canvas, width, height, aspectRatio);\n }\n isAttached(canvas) {\n const container = canvas && _getParentNode(canvas);\n return !!(container && container.isConnected);\n }\n}\nfunction _detectPlatform(canvas) {\n if (!_isDomSupported() || typeof OffscreenCanvas !== 'undefined' && canvas instanceof OffscreenCanvas) {\n return BasicPlatform;\n }\n return DomPlatform;\n}\nclass Element {\n static defaults = {};\n static defaultRoutes = undefined;\n x;\n y;\n active = false;\n options;\n $animations;\n tooltipPosition(useFinalPosition) {\n const {\n x,\n y\n } = this.getProps(['x', 'y'], useFinalPosition);\n return {\n x,\n y\n };\n }\n hasValue() {\n return isNumber(this.x) && isNumber(this.y);\n }\n getProps(props, final) {\n const anims = this.$animations;\n if (!final || !anims) {\n // let's not create an object, if not needed\n return this;\n }\n const ret = {};\n props.forEach(prop => {\n ret[prop] = anims[prop] && anims[prop].active() ? anims[prop]._to : this[prop];\n });\n return ret;\n }\n}\nfunction autoSkip(scale, ticks) {\n const tickOpts = scale.options.ticks;\n const determinedMaxTicks = determineMaxTicks(scale);\n const ticksLimit = Math.min(tickOpts.maxTicksLimit || determinedMaxTicks, determinedMaxTicks);\n const majorIndices = tickOpts.major.enabled ? getMajorIndices(ticks) : [];\n const numMajorIndices = majorIndices.length;\n const first = majorIndices[0];\n const last = majorIndices[numMajorIndices - 1];\n const newTicks = [];\n if (numMajorIndices > ticksLimit) {\n skipMajors(ticks, newTicks, majorIndices, numMajorIndices / ticksLimit);\n return newTicks;\n }\n const spacing = calculateSpacing(majorIndices, ticks, ticksLimit);\n if (numMajorIndices > 0) {\n let i, ilen;\n const avgMajorSpacing = numMajorIndices > 1 ? Math.round((last - first) / (numMajorIndices - 1)) : null;\n skip(ticks, newTicks, spacing, isNullOrUndef(avgMajorSpacing) ? 0 : first - avgMajorSpacing, first);\n for (i = 0, ilen = numMajorIndices - 1; i < ilen; i++) {\n skip(ticks, newTicks, spacing, majorIndices[i], majorIndices[i + 1]);\n }\n skip(ticks, newTicks, spacing, last, isNullOrUndef(avgMajorSpacing) ? ticks.length : last + avgMajorSpacing);\n return newTicks;\n }\n skip(ticks, newTicks, spacing);\n return newTicks;\n}\nfunction determineMaxTicks(scale) {\n const offset = scale.options.offset;\n const tickLength = scale._tickSize();\n const maxScale = scale._length / tickLength + (offset ? 0 : 1);\n const maxChart = scale._maxLength / tickLength;\n return Math.floor(Math.min(maxScale, maxChart));\n}\nfunction calculateSpacing(majorIndices, ticks, ticksLimit) {\n const evenMajorSpacing = getEvenSpacing(majorIndices);\n const spacing = ticks.length / ticksLimit;\n if (!evenMajorSpacing) {\n return Math.max(spacing, 1);\n }\n const factors = _factorize(evenMajorSpacing);\n for (let i = 0, ilen = factors.length - 1; i < ilen; i++) {\n const factor = factors[i];\n if (factor > spacing) {\n return factor;\n }\n }\n return Math.max(spacing, 1);\n}\nfunction getMajorIndices(ticks) {\n const result = [];\n let i, ilen;\n for (i = 0, ilen = ticks.length; i < ilen; i++) {\n if (ticks[i].major) {\n result.push(i);\n }\n }\n return result;\n}\nfunction skipMajors(ticks, newTicks, majorIndices, spacing) {\n let count = 0;\n let next = majorIndices[0];\n let i;\n spacing = Math.ceil(spacing);\n for (i = 0; i < ticks.length; i++) {\n if (i === next) {\n newTicks.push(ticks[i]);\n count++;\n next = majorIndices[count * spacing];\n }\n }\n}\nfunction skip(ticks, newTicks, spacing, majorStart, majorEnd) {\n const start = valueOrDefault(majorStart, 0);\n const end = Math.min(valueOrDefault(majorEnd, ticks.length), ticks.length);\n let count = 0;\n let length, i, next;\n spacing = Math.ceil(spacing);\n if (majorEnd) {\n length = majorEnd - majorStart;\n spacing = length / Math.floor(length / spacing);\n }\n next = start;\n while (next < 0) {\n count++;\n next = Math.round(start + count * spacing);\n }\n for (i = Math.max(start, 0); i < end; i++) {\n if (i === next) {\n newTicks.push(ticks[i]);\n count++;\n next = Math.round(start + count * spacing);\n }\n }\n}\nfunction getEvenSpacing(arr) {\n const len = arr.length;\n let i, diff;\n if (len < 2) {\n return false;\n }\n for (diff = arr[0], i = 1; i < len; ++i) {\n if (arr[i] - arr[i - 1] !== diff) {\n return false;\n }\n }\n return diff;\n}\nconst reverseAlign = align => align === 'left' ? 'right' : align === 'right' ? 'left' : align;\nconst offsetFromEdge = (scale, edge, offset) => edge === 'top' || edge === 'left' ? scale[edge] + offset : scale[edge] - offset;\nconst getTicksLimit = (ticksLength, maxTicksLimit) => Math.min(maxTicksLimit || ticksLength, ticksLength);\nfunction sample(arr, numItems) {\n const result = [];\n const increment = arr.length / numItems;\n const len = arr.length;\n let i = 0;\n for (; i < len; i += increment) {\n result.push(arr[Math.floor(i)]);\n }\n return result;\n}\nfunction getPixelForGridLine(scale, index, offsetGridLines) {\n const length = scale.ticks.length;\n const validIndex = Math.min(index, length - 1);\n const start = scale._startPixel;\n const end = scale._endPixel;\n const epsilon = 1e-6;\n let lineValue = scale.getPixelForTick(validIndex);\n let offset;\n if (offsetGridLines) {\n if (length === 1) {\n offset = Math.max(lineValue - start, end - lineValue);\n } else if (index === 0) {\n offset = (scale.getPixelForTick(1) - lineValue) / 2;\n } else {\n offset = (lineValue - scale.getPixelForTick(validIndex - 1)) / 2;\n }\n lineValue += validIndex < index ? offset : -offset;\n if (lineValue < start - epsilon || lineValue > end + epsilon) {\n return;\n }\n }\n return lineValue;\n}\nfunction garbageCollect(caches, length) {\n each(caches, cache => {\n const gc = cache.gc;\n const gcLen = gc.length / 2;\n let i;\n if (gcLen > length) {\n for (i = 0; i < gcLen; ++i) {\n delete cache.data[gc[i]];\n }\n gc.splice(0, gcLen);\n }\n });\n}\nfunction getTickMarkLength(options) {\n return options.drawTicks ? options.tickLength : 0;\n}\nfunction getTitleHeight(options, fallback) {\n if (!options.display) {\n return 0;\n }\n const font = toFont(options.font, fallback);\n const padding = toPadding(options.padding);\n const lines = isArray(options.text) ? options.text.length : 1;\n return lines * font.lineHeight + padding.height;\n}\nfunction createScaleContext(parent, scale) {\n return createContext(parent, {\n scale,\n type: 'scale'\n });\n}\nfunction createTickContext(parent, index, tick) {\n return createContext(parent, {\n tick,\n index,\n type: 'tick'\n });\n}\nfunction titleAlign(align, position, reverse) {\n let ret = _toLeftRightCenter(align);\n if (reverse && position !== 'right' || !reverse && position === 'right') {\n ret = reverseAlign(ret);\n }\n return ret;\n}\nfunction titleArgs(scale, offset, position, align) {\n const {\n top,\n left,\n bottom,\n right,\n chart\n } = scale;\n const {\n chartArea,\n scales\n } = chart;\n let rotation = 0;\n let maxWidth, titleX, titleY;\n const height = bottom - top;\n const width = right - left;\n if (scale.isHorizontal()) {\n titleX = _alignStartEnd(align, left, right);\n if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n titleY = scales[positionAxisID].getPixelForValue(value) + height - offset;\n } else if (position === 'center') {\n titleY = (chartArea.bottom + chartArea.top) / 2 + height - offset;\n } else {\n titleY = offsetFromEdge(scale, position, offset);\n }\n maxWidth = right - left;\n } else {\n if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n titleX = scales[positionAxisID].getPixelForValue(value) - width + offset;\n } else if (position === 'center') {\n titleX = (chartArea.left + chartArea.right) / 2 - width + offset;\n } else {\n titleX = offsetFromEdge(scale, position, offset);\n }\n titleY = _alignStartEnd(align, bottom, top);\n rotation = position === 'left' ? -HALF_PI : HALF_PI;\n }\n return {\n titleX,\n titleY,\n maxWidth,\n rotation\n };\n}\nclass Scale extends Element {\n constructor(cfg) {\n super();\n this.id = cfg.id;\n this.type = cfg.type;\n this.options = undefined;\n this.ctx = cfg.ctx;\n this.chart = cfg.chart;\n this.top = undefined;\n this.bottom = undefined;\n this.left = undefined;\n this.right = undefined;\n this.width = undefined;\n this.height = undefined;\n this._margins = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n };\n this.maxWidth = undefined;\n this.maxHeight = undefined;\n this.paddingTop = undefined;\n this.paddingBottom = undefined;\n this.paddingLeft = undefined;\n this.paddingRight = undefined;\n this.axis = undefined;\n this.labelRotation = undefined;\n this.min = undefined;\n this.max = undefined;\n this._range = undefined;\n this.ticks = [];\n this._gridLineItems = null;\n this._labelItems = null;\n this._labelSizes = null;\n this._length = 0;\n this._maxLength = 0;\n this._longestTextCache = {};\n this._startPixel = undefined;\n this._endPixel = undefined;\n this._reversePixels = false;\n this._userMax = undefined;\n this._userMin = undefined;\n this._suggestedMax = undefined;\n this._suggestedMin = undefined;\n this._ticksLength = 0;\n this._borderValue = 0;\n this._cache = {};\n this._dataLimitsCached = false;\n this.$context = undefined;\n }\n init(options) {\n this.options = options.setContext(this.getContext());\n this.axis = options.axis;\n this._userMin = this.parse(options.min);\n this._userMax = this.parse(options.max);\n this._suggestedMin = this.parse(options.suggestedMin);\n this._suggestedMax = this.parse(options.suggestedMax);\n }\n parse(raw, index) {\n return raw;\n }\n getUserBounds() {\n let {\n _userMin,\n _userMax,\n _suggestedMin,\n _suggestedMax\n } = this;\n _userMin = finiteOrDefault(_userMin, Number.POSITIVE_INFINITY);\n _userMax = finiteOrDefault(_userMax, Number.NEGATIVE_INFINITY);\n _suggestedMin = finiteOrDefault(_suggestedMin, Number.POSITIVE_INFINITY);\n _suggestedMax = finiteOrDefault(_suggestedMax, Number.NEGATIVE_INFINITY);\n return {\n min: finiteOrDefault(_userMin, _suggestedMin),\n max: finiteOrDefault(_userMax, _suggestedMax),\n minDefined: isNumberFinite(_userMin),\n maxDefined: isNumberFinite(_userMax)\n };\n }\n getMinMax(canStack) {\n let {\n min,\n max,\n minDefined,\n maxDefined\n } = this.getUserBounds();\n let range;\n if (minDefined && maxDefined) {\n return {\n min,\n max\n };\n }\n const metas = this.getMatchingVisibleMetas();\n for (let i = 0, ilen = metas.length; i < ilen; ++i) {\n range = metas[i].controller.getMinMax(this, canStack);\n if (!minDefined) {\n min = Math.min(min, range.min);\n }\n if (!maxDefined) {\n max = Math.max(max, range.max);\n }\n }\n min = maxDefined && min > max ? max : min;\n max = minDefined && min > max ? min : max;\n return {\n min: finiteOrDefault(min, finiteOrDefault(max, min)),\n max: finiteOrDefault(max, finiteOrDefault(min, max))\n };\n }\n getPadding() {\n return {\n left: this.paddingLeft || 0,\n top: this.paddingTop || 0,\n right: this.paddingRight || 0,\n bottom: this.paddingBottom || 0\n };\n }\n getTicks() {\n return this.ticks;\n }\n getLabels() {\n const data = this.chart.data;\n return this.options.labels || (this.isHorizontal() ? data.xLabels : data.yLabels) || data.labels || [];\n }\n getLabelItems(chartArea = this.chart.chartArea) {\n const items = this._labelItems || (this._labelItems = this._computeLabelItems(chartArea));\n return items;\n }\n beforeLayout() {\n this._cache = {};\n this._dataLimitsCached = false;\n }\n beforeUpdate() {\n callback(this.options.beforeUpdate, [this]);\n }\n update(maxWidth, maxHeight, margins) {\n const {\n beginAtZero,\n grace,\n ticks: tickOpts\n } = this.options;\n const sampleSize = tickOpts.sampleSize;\n this.beforeUpdate();\n this.maxWidth = maxWidth;\n this.maxHeight = maxHeight;\n this._margins = margins = Object.assign({\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n }, margins);\n this.ticks = null;\n this._labelSizes = null;\n this._gridLineItems = null;\n this._labelItems = null;\n this.beforeSetDimensions();\n this.setDimensions();\n this.afterSetDimensions();\n this._maxLength = this.isHorizontal() ? this.width + margins.left + margins.right : this.height + margins.top + margins.bottom;\n if (!this._dataLimitsCached) {\n this.beforeDataLimits();\n this.determineDataLimits();\n this.afterDataLimits();\n this._range = _addGrace(this, grace, beginAtZero);\n this._dataLimitsCached = true;\n }\n this.beforeBuildTicks();\n this.ticks = this.buildTicks() || [];\n this.afterBuildTicks();\n const samplingEnabled = sampleSize < this.ticks.length;\n this._convertTicksToLabels(samplingEnabled ? sample(this.ticks, sampleSize) : this.ticks);\n this.configure();\n this.beforeCalculateLabelRotation();\n this.calculateLabelRotation();\n this.afterCalculateLabelRotation();\n if (tickOpts.display && (tickOpts.autoSkip || tickOpts.source === 'auto')) {\n this.ticks = autoSkip(this, this.ticks);\n this._labelSizes = null;\n this.afterAutoSkip();\n }\n if (samplingEnabled) {\n this._convertTicksToLabels(this.ticks);\n }\n this.beforeFit();\n this.fit();\n this.afterFit();\n this.afterUpdate();\n }\n configure() {\n let reversePixels = this.options.reverse;\n let startPixel, endPixel;\n if (this.isHorizontal()) {\n startPixel = this.left;\n endPixel = this.right;\n } else {\n startPixel = this.top;\n endPixel = this.bottom;\n reversePixels = !reversePixels;\n }\n this._startPixel = startPixel;\n this._endPixel = endPixel;\n this._reversePixels = reversePixels;\n this._length = endPixel - startPixel;\n this._alignToPixels = this.options.alignToPixels;\n }\n afterUpdate() {\n callback(this.options.afterUpdate, [this]);\n }\n beforeSetDimensions() {\n callback(this.options.beforeSetDimensions, [this]);\n }\n setDimensions() {\n if (this.isHorizontal()) {\n this.width = this.maxWidth;\n this.left = 0;\n this.right = this.width;\n } else {\n this.height = this.maxHeight;\n this.top = 0;\n this.bottom = this.height;\n }\n this.paddingLeft = 0;\n this.paddingTop = 0;\n this.paddingRight = 0;\n this.paddingBottom = 0;\n }\n afterSetDimensions() {\n callback(this.options.afterSetDimensions, [this]);\n }\n _callHooks(name) {\n this.chart.notifyPlugins(name, this.getContext());\n callback(this.options[name], [this]);\n }\n beforeDataLimits() {\n this._callHooks('beforeDataLimits');\n }\n determineDataLimits() {}\n afterDataLimits() {\n this._callHooks('afterDataLimits');\n }\n beforeBuildTicks() {\n this._callHooks('beforeBuildTicks');\n }\n buildTicks() {\n return [];\n }\n afterBuildTicks() {\n this._callHooks('afterBuildTicks');\n }\n beforeTickToLabelConversion() {\n callback(this.options.beforeTickToLabelConversion, [this]);\n }\n generateTickLabels(ticks) {\n const tickOpts = this.options.ticks;\n let i, ilen, tick;\n for (i = 0, ilen = ticks.length; i < ilen; i++) {\n tick = ticks[i];\n tick.label = callback(tickOpts.callback, [tick.value, i, ticks], this);\n }\n }\n afterTickToLabelConversion() {\n callback(this.options.afterTickToLabelConversion, [this]);\n }\n beforeCalculateLabelRotation() {\n callback(this.options.beforeCalculateLabelRotation, [this]);\n }\n calculateLabelRotation() {\n const options = this.options;\n const tickOpts = options.ticks;\n const numTicks = getTicksLimit(this.ticks.length, options.ticks.maxTicksLimit);\n const minRotation = tickOpts.minRotation || 0;\n const maxRotation = tickOpts.maxRotation;\n let labelRotation = minRotation;\n let tickWidth, maxHeight, maxLabelDiagonal;\n if (!this._isVisible() || !tickOpts.display || minRotation >= maxRotation || numTicks <= 1 || !this.isHorizontal()) {\n this.labelRotation = minRotation;\n return;\n }\n const labelSizes = this._getLabelSizes();\n const maxLabelWidth = labelSizes.widest.width;\n const maxLabelHeight = labelSizes.highest.height;\n const maxWidth = _limitValue(this.chart.width - maxLabelWidth, 0, this.maxWidth);\n tickWidth = options.offset ? this.maxWidth / numTicks : maxWidth / (numTicks - 1);\n if (maxLabelWidth + 6 > tickWidth) {\n tickWidth = maxWidth / (numTicks - (options.offset ? 0.5 : 1));\n maxHeight = this.maxHeight - getTickMarkLength(options.grid) - tickOpts.padding - getTitleHeight(options.title, this.chart.options.font);\n maxLabelDiagonal = Math.sqrt(maxLabelWidth * maxLabelWidth + maxLabelHeight * maxLabelHeight);\n labelRotation = toDegrees(Math.min(Math.asin(_limitValue((labelSizes.highest.height + 6) / tickWidth, -1, 1)), Math.asin(_limitValue(maxHeight / maxLabelDiagonal, -1, 1)) - Math.asin(_limitValue(maxLabelHeight / maxLabelDiagonal, -1, 1))));\n labelRotation = Math.max(minRotation, Math.min(maxRotation, labelRotation));\n }\n this.labelRotation = labelRotation;\n }\n afterCalculateLabelRotation() {\n callback(this.options.afterCalculateLabelRotation, [this]);\n }\n afterAutoSkip() {}\n beforeFit() {\n callback(this.options.beforeFit, [this]);\n }\n fit() {\n const minSize = {\n width: 0,\n height: 0\n };\n const {\n chart,\n options: {\n ticks: tickOpts,\n title: titleOpts,\n grid: gridOpts\n }\n } = this;\n const display = this._isVisible();\n const isHorizontal = this.isHorizontal();\n if (display) {\n const titleHeight = getTitleHeight(titleOpts, chart.options.font);\n if (isHorizontal) {\n minSize.width = this.maxWidth;\n minSize.height = getTickMarkLength(gridOpts) + titleHeight;\n } else {\n minSize.height = this.maxHeight;\n minSize.width = getTickMarkLength(gridOpts) + titleHeight;\n }\n if (tickOpts.display && this.ticks.length) {\n const {\n first,\n last,\n widest,\n highest\n } = this._getLabelSizes();\n const tickPadding = tickOpts.padding * 2;\n const angleRadians = toRadians(this.labelRotation);\n const cos = Math.cos(angleRadians);\n const sin = Math.sin(angleRadians);\n if (isHorizontal) {\n const labelHeight = tickOpts.mirror ? 0 : sin * widest.width + cos * highest.height;\n minSize.height = Math.min(this.maxHeight, minSize.height + labelHeight + tickPadding);\n } else {\n const labelWidth = tickOpts.mirror ? 0 : cos * widest.width + sin * highest.height;\n minSize.width = Math.min(this.maxWidth, minSize.width + labelWidth + tickPadding);\n }\n this._calculatePadding(first, last, sin, cos);\n }\n }\n this._handleMargins();\n if (isHorizontal) {\n this.width = this._length = chart.width - this._margins.left - this._margins.right;\n this.height = minSize.height;\n } else {\n this.width = minSize.width;\n this.height = this._length = chart.height - this._margins.top - this._margins.bottom;\n }\n }\n _calculatePadding(first, last, sin, cos) {\n const {\n ticks: {\n align,\n padding\n },\n position\n } = this.options;\n const isRotated = this.labelRotation !== 0;\n const labelsBelowTicks = position !== 'top' && this.axis === 'x';\n if (this.isHorizontal()) {\n const offsetLeft = this.getPixelForTick(0) - this.left;\n const offsetRight = this.right - this.getPixelForTick(this.ticks.length - 1);\n let paddingLeft = 0;\n let paddingRight = 0;\n if (isRotated) {\n if (labelsBelowTicks) {\n paddingLeft = cos * first.width;\n paddingRight = sin * last.height;\n } else {\n paddingLeft = sin * first.height;\n paddingRight = cos * last.width;\n }\n } else if (align === 'start') {\n paddingRight = last.width;\n } else if (align === 'end') {\n paddingLeft = first.width;\n } else if (align !== 'inner') {\n paddingLeft = first.width / 2;\n paddingRight = last.width / 2;\n }\n this.paddingLeft = Math.max((paddingLeft - offsetLeft + padding) * this.width / (this.width - offsetLeft), 0);\n this.paddingRight = Math.max((paddingRight - offsetRight + padding) * this.width / (this.width - offsetRight), 0);\n } else {\n let paddingTop = last.height / 2;\n let paddingBottom = first.height / 2;\n if (align === 'start') {\n paddingTop = 0;\n paddingBottom = first.height;\n } else if (align === 'end') {\n paddingTop = last.height;\n paddingBottom = 0;\n }\n this.paddingTop = paddingTop + padding;\n this.paddingBottom = paddingBottom + padding;\n }\n }\n _handleMargins() {\n if (this._margins) {\n this._margins.left = Math.max(this.paddingLeft, this._margins.left);\n this._margins.top = Math.max(this.paddingTop, this._margins.top);\n this._margins.right = Math.max(this.paddingRight, this._margins.right);\n this._margins.bottom = Math.max(this.paddingBottom, this._margins.bottom);\n }\n }\n afterFit() {\n callback(this.options.afterFit, [this]);\n }\n isHorizontal() {\n const {\n axis,\n position\n } = this.options;\n return position === 'top' || position === 'bottom' || axis === 'x';\n }\n isFullSize() {\n return this.options.fullSize;\n }\n _convertTicksToLabels(ticks) {\n this.beforeTickToLabelConversion();\n this.generateTickLabels(ticks);\n let i, ilen;\n for (i = 0, ilen = ticks.length; i < ilen; i++) {\n if (isNullOrUndef(ticks[i].label)) {\n ticks.splice(i, 1);\n ilen--;\n i--;\n }\n }\n this.afterTickToLabelConversion();\n }\n _getLabelSizes() {\n let labelSizes = this._labelSizes;\n if (!labelSizes) {\n const sampleSize = this.options.ticks.sampleSize;\n let ticks = this.ticks;\n if (sampleSize < ticks.length) {\n ticks = sample(ticks, sampleSize);\n }\n this._labelSizes = labelSizes = this._computeLabelSizes(ticks, ticks.length, this.options.ticks.maxTicksLimit);\n }\n return labelSizes;\n }\n _computeLabelSizes(ticks, length, maxTicksLimit) {\n const {\n ctx,\n _longestTextCache: caches\n } = this;\n const widths = [];\n const heights = [];\n const increment = Math.floor(length / getTicksLimit(length, maxTicksLimit));\n let widestLabelSize = 0;\n let highestLabelSize = 0;\n let i, j, jlen, label, tickFont, fontString, cache, lineHeight, width, height, nestedLabel;\n for (i = 0; i < length; i += increment) {\n label = ticks[i].label;\n tickFont = this._resolveTickFontOptions(i);\n ctx.font = fontString = tickFont.string;\n cache = caches[fontString] = caches[fontString] || {\n data: {},\n gc: []\n };\n lineHeight = tickFont.lineHeight;\n width = height = 0;\n if (!isNullOrUndef(label) && !isArray(label)) {\n width = _measureText(ctx, cache.data, cache.gc, width, label);\n height = lineHeight;\n } else if (isArray(label)) {\n for (j = 0, jlen = label.length; j < jlen; ++j) {\n nestedLabel = label[j];\n if (!isNullOrUndef(nestedLabel) && !isArray(nestedLabel)) {\n width = _measureText(ctx, cache.data, cache.gc, width, nestedLabel);\n height += lineHeight;\n }\n }\n }\n widths.push(width);\n heights.push(height);\n widestLabelSize = Math.max(width, widestLabelSize);\n highestLabelSize = Math.max(height, highestLabelSize);\n }\n garbageCollect(caches, length);\n const widest = widths.indexOf(widestLabelSize);\n const highest = heights.indexOf(highestLabelSize);\n const valueAt = idx => ({\n width: widths[idx] || 0,\n height: heights[idx] || 0\n });\n return {\n first: valueAt(0),\n last: valueAt(length - 1),\n widest: valueAt(widest),\n highest: valueAt(highest),\n widths,\n heights\n };\n }\n getLabelForValue(value) {\n return value;\n }\n getPixelForValue(value, index) {\n return NaN;\n }\n getValueForPixel(pixel) {}\n getPixelForTick(index) {\n const ticks = this.ticks;\n if (index < 0 || index > ticks.length - 1) {\n return null;\n }\n return this.getPixelForValue(ticks[index].value);\n }\n getPixelForDecimal(decimal) {\n if (this._reversePixels) {\n decimal = 1 - decimal;\n }\n const pixel = this._startPixel + decimal * this._length;\n return _int16Range(this._alignToPixels ? _alignPixel(this.chart, pixel, 0) : pixel);\n }\n getDecimalForPixel(pixel) {\n const decimal = (pixel - this._startPixel) / this._length;\n return this._reversePixels ? 1 - decimal : decimal;\n }\n getBasePixel() {\n return this.getPixelForValue(this.getBaseValue());\n }\n getBaseValue() {\n const {\n min,\n max\n } = this;\n return min < 0 && max < 0 ? max : min > 0 && max > 0 ? min : 0;\n }\n getContext(index) {\n const ticks = this.ticks || [];\n if (index >= 0 && index < ticks.length) {\n const tick = ticks[index];\n return tick.$context || (tick.$context = createTickContext(this.getContext(), index, tick));\n }\n return this.$context || (this.$context = createScaleContext(this.chart.getContext(), this));\n }\n _tickSize() {\n const optionTicks = this.options.ticks;\n const rot = toRadians(this.labelRotation);\n const cos = Math.abs(Math.cos(rot));\n const sin = Math.abs(Math.sin(rot));\n const labelSizes = this._getLabelSizes();\n const padding = optionTicks.autoSkipPadding || 0;\n const w = labelSizes ? labelSizes.widest.width + padding : 0;\n const h = labelSizes ? labelSizes.highest.height + padding : 0;\n return this.isHorizontal() ? h * cos > w * sin ? w / cos : h / sin : h * sin < w * cos ? h / cos : w / sin;\n }\n _isVisible() {\n const display = this.options.display;\n if (display !== 'auto') {\n return !!display;\n }\n return this.getMatchingVisibleMetas().length > 0;\n }\n _computeGridLineItems(chartArea) {\n const axis = this.axis;\n const chart = this.chart;\n const options = this.options;\n const {\n grid,\n position,\n border\n } = options;\n const offset = grid.offset;\n const isHorizontal = this.isHorizontal();\n const ticks = this.ticks;\n const ticksLength = ticks.length + (offset ? 1 : 0);\n const tl = getTickMarkLength(grid);\n const items = [];\n const borderOpts = border.setContext(this.getContext());\n const axisWidth = borderOpts.display ? borderOpts.width : 0;\n const axisHalfWidth = axisWidth / 2;\n const alignBorderValue = function (pixel) {\n return _alignPixel(chart, pixel, axisWidth);\n };\n let borderValue, i, lineValue, alignedLineValue;\n let tx1, ty1, tx2, ty2, x1, y1, x2, y2;\n if (position === 'top') {\n borderValue = alignBorderValue(this.bottom);\n ty1 = this.bottom - tl;\n ty2 = borderValue - axisHalfWidth;\n y1 = alignBorderValue(chartArea.top) + axisHalfWidth;\n y2 = chartArea.bottom;\n } else if (position === 'bottom') {\n borderValue = alignBorderValue(this.top);\n y1 = chartArea.top;\n y2 = alignBorderValue(chartArea.bottom) - axisHalfWidth;\n ty1 = borderValue + axisHalfWidth;\n ty2 = this.top + tl;\n } else if (position === 'left') {\n borderValue = alignBorderValue(this.right);\n tx1 = this.right - tl;\n tx2 = borderValue - axisHalfWidth;\n x1 = alignBorderValue(chartArea.left) + axisHalfWidth;\n x2 = chartArea.right;\n } else if (position === 'right') {\n borderValue = alignBorderValue(this.left);\n x1 = chartArea.left;\n x2 = alignBorderValue(chartArea.right) - axisHalfWidth;\n tx1 = borderValue + axisHalfWidth;\n tx2 = this.left + tl;\n } else if (axis === 'x') {\n if (position === 'center') {\n borderValue = alignBorderValue((chartArea.top + chartArea.bottom) / 2 + 0.5);\n } else if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));\n }\n y1 = chartArea.top;\n y2 = chartArea.bottom;\n ty1 = borderValue + axisHalfWidth;\n ty2 = ty1 + tl;\n } else if (axis === 'y') {\n if (position === 'center') {\n borderValue = alignBorderValue((chartArea.left + chartArea.right) / 2);\n } else if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));\n }\n tx1 = borderValue - axisHalfWidth;\n tx2 = tx1 - tl;\n x1 = chartArea.left;\n x2 = chartArea.right;\n }\n const limit = valueOrDefault(options.ticks.maxTicksLimit, ticksLength);\n const step = Math.max(1, Math.ceil(ticksLength / limit));\n for (i = 0; i < ticksLength; i += step) {\n const context = this.getContext(i);\n const optsAtIndex = grid.setContext(context);\n const optsAtIndexBorder = border.setContext(context);\n const lineWidth = optsAtIndex.lineWidth;\n const lineColor = optsAtIndex.color;\n const borderDash = optsAtIndexBorder.dash || [];\n const borderDashOffset = optsAtIndexBorder.dashOffset;\n const tickWidth = optsAtIndex.tickWidth;\n const tickColor = optsAtIndex.tickColor;\n const tickBorderDash = optsAtIndex.tickBorderDash || [];\n const tickBorderDashOffset = optsAtIndex.tickBorderDashOffset;\n lineValue = getPixelForGridLine(this, i, offset);\n if (lineValue === undefined) {\n continue;\n }\n alignedLineValue = _alignPixel(chart, lineValue, lineWidth);\n if (isHorizontal) {\n tx1 = tx2 = x1 = x2 = alignedLineValue;\n } else {\n ty1 = ty2 = y1 = y2 = alignedLineValue;\n }\n items.push({\n tx1,\n ty1,\n tx2,\n ty2,\n x1,\n y1,\n x2,\n y2,\n width: lineWidth,\n color: lineColor,\n borderDash,\n borderDashOffset,\n tickWidth,\n tickColor,\n tickBorderDash,\n tickBorderDashOffset\n });\n }\n this._ticksLength = ticksLength;\n this._borderValue = borderValue;\n return items;\n }\n _computeLabelItems(chartArea) {\n const axis = this.axis;\n const options = this.options;\n const {\n position,\n ticks: optionTicks\n } = options;\n const isHorizontal = this.isHorizontal();\n const ticks = this.ticks;\n const {\n align,\n crossAlign,\n padding,\n mirror\n } = optionTicks;\n const tl = getTickMarkLength(options.grid);\n const tickAndPadding = tl + padding;\n const hTickAndPadding = mirror ? -padding : tickAndPadding;\n const rotation = -toRadians(this.labelRotation);\n const items = [];\n let i, ilen, tick, label, x, y, textAlign, pixel, font, lineHeight, lineCount, textOffset;\n let textBaseline = 'middle';\n if (position === 'top') {\n y = this.bottom - hTickAndPadding;\n textAlign = this._getXAxisLabelAlignment();\n } else if (position === 'bottom') {\n y = this.top + hTickAndPadding;\n textAlign = this._getXAxisLabelAlignment();\n } else if (position === 'left') {\n const ret = this._getYAxisLabelAlignment(tl);\n textAlign = ret.textAlign;\n x = ret.x;\n } else if (position === 'right') {\n const ret = this._getYAxisLabelAlignment(tl);\n textAlign = ret.textAlign;\n x = ret.x;\n } else if (axis === 'x') {\n if (position === 'center') {\n y = (chartArea.top + chartArea.bottom) / 2 + tickAndPadding;\n } else if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n y = this.chart.scales[positionAxisID].getPixelForValue(value) + tickAndPadding;\n }\n textAlign = this._getXAxisLabelAlignment();\n } else if (axis === 'y') {\n if (position === 'center') {\n x = (chartArea.left + chartArea.right) / 2 - tickAndPadding;\n } else if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n x = this.chart.scales[positionAxisID].getPixelForValue(value);\n }\n textAlign = this._getYAxisLabelAlignment(tl).textAlign;\n }\n if (axis === 'y') {\n if (align === 'start') {\n textBaseline = 'top';\n } else if (align === 'end') {\n textBaseline = 'bottom';\n }\n }\n const labelSizes = this._getLabelSizes();\n for (i = 0, ilen = ticks.length; i < ilen; ++i) {\n tick = ticks[i];\n label = tick.label;\n const optsAtIndex = optionTicks.setContext(this.getContext(i));\n pixel = this.getPixelForTick(i) + optionTicks.labelOffset;\n font = this._resolveTickFontOptions(i);\n lineHeight = font.lineHeight;\n lineCount = isArray(label) ? label.length : 1;\n const halfCount = lineCount / 2;\n const color = optsAtIndex.color;\n const strokeColor = optsAtIndex.textStrokeColor;\n const strokeWidth = optsAtIndex.textStrokeWidth;\n let tickTextAlign = textAlign;\n if (isHorizontal) {\n x = pixel;\n if (textAlign === 'inner') {\n if (i === ilen - 1) {\n tickTextAlign = !this.options.reverse ? 'right' : 'left';\n } else if (i === 0) {\n tickTextAlign = !this.options.reverse ? 'left' : 'right';\n } else {\n tickTextAlign = 'center';\n }\n }\n if (position === 'top') {\n if (crossAlign === 'near' || rotation !== 0) {\n textOffset = -lineCount * lineHeight + lineHeight / 2;\n } else if (crossAlign === 'center') {\n textOffset = -labelSizes.highest.height / 2 - halfCount * lineHeight + lineHeight;\n } else {\n textOffset = -labelSizes.highest.height + lineHeight / 2;\n }\n } else {\n if (crossAlign === 'near' || rotation !== 0) {\n textOffset = lineHeight / 2;\n } else if (crossAlign === 'center') {\n textOffset = labelSizes.highest.height / 2 - halfCount * lineHeight;\n } else {\n textOffset = labelSizes.highest.height - lineCount * lineHeight;\n }\n }\n if (mirror) {\n textOffset *= -1;\n }\n if (rotation !== 0 && !optsAtIndex.showLabelBackdrop) {\n x += lineHeight / 2 * Math.sin(rotation);\n }\n } else {\n y = pixel;\n textOffset = (1 - lineCount) * lineHeight / 2;\n }\n let backdrop;\n if (optsAtIndex.showLabelBackdrop) {\n const labelPadding = toPadding(optsAtIndex.backdropPadding);\n const height = labelSizes.heights[i];\n const width = labelSizes.widths[i];\n let top = textOffset - labelPadding.top;\n let left = 0 - labelPadding.left;\n switch (textBaseline) {\n case 'middle':\n top -= height / 2;\n break;\n case 'bottom':\n top -= height;\n break;\n }\n switch (textAlign) {\n case 'center':\n left -= width / 2;\n break;\n case 'right':\n left -= width;\n break;\n case 'inner':\n if (i === ilen - 1) {\n left -= width;\n } else if (i > 0) {\n left -= width / 2;\n }\n break;\n }\n backdrop = {\n left,\n top,\n width: width + labelPadding.width,\n height: height + labelPadding.height,\n color: optsAtIndex.backdropColor\n };\n }\n items.push({\n label,\n font,\n textOffset,\n options: {\n rotation,\n color,\n strokeColor,\n strokeWidth,\n textAlign: tickTextAlign,\n textBaseline,\n translation: [x, y],\n backdrop\n }\n });\n }\n return items;\n }\n _getXAxisLabelAlignment() {\n const {\n position,\n ticks\n } = this.options;\n const rotation = -toRadians(this.labelRotation);\n if (rotation) {\n return position === 'top' ? 'left' : 'right';\n }\n let align = 'center';\n if (ticks.align === 'start') {\n align = 'left';\n } else if (ticks.align === 'end') {\n align = 'right';\n } else if (ticks.align === 'inner') {\n align = 'inner';\n }\n return align;\n }\n _getYAxisLabelAlignment(tl) {\n const {\n position,\n ticks: {\n crossAlign,\n mirror,\n padding\n }\n } = this.options;\n const labelSizes = this._getLabelSizes();\n const tickAndPadding = tl + padding;\n const widest = labelSizes.widest.width;\n let textAlign;\n let x;\n if (position === 'left') {\n if (mirror) {\n x = this.right + padding;\n if (crossAlign === 'near') {\n textAlign = 'left';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x += widest / 2;\n } else {\n textAlign = 'right';\n x += widest;\n }\n } else {\n x = this.right - tickAndPadding;\n if (crossAlign === 'near') {\n textAlign = 'right';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x -= widest / 2;\n } else {\n textAlign = 'left';\n x = this.left;\n }\n }\n } else if (position === 'right') {\n if (mirror) {\n x = this.left + padding;\n if (crossAlign === 'near') {\n textAlign = 'right';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x -= widest / 2;\n } else {\n textAlign = 'left';\n x -= widest;\n }\n } else {\n x = this.left + tickAndPadding;\n if (crossAlign === 'near') {\n textAlign = 'left';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x += widest / 2;\n } else {\n textAlign = 'right';\n x = this.right;\n }\n }\n } else {\n textAlign = 'right';\n }\n return {\n textAlign,\n x\n };\n }\n _computeLabelArea() {\n if (this.options.ticks.mirror) {\n return;\n }\n const chart = this.chart;\n const position = this.options.position;\n if (position === 'left' || position === 'right') {\n return {\n top: 0,\n left: this.left,\n bottom: chart.height,\n right: this.right\n };\n }\n if (position === 'top' || position === 'bottom') {\n return {\n top: this.top,\n left: 0,\n bottom: this.bottom,\n right: chart.width\n };\n }\n }\n drawBackground() {\n const {\n ctx,\n options: {\n backgroundColor\n },\n left,\n top,\n width,\n height\n } = this;\n if (backgroundColor) {\n ctx.save();\n ctx.fillStyle = backgroundColor;\n ctx.fillRect(left, top, width, height);\n ctx.restore();\n }\n }\n getLineWidthForValue(value) {\n const grid = this.options.grid;\n if (!this._isVisible() || !grid.display) {\n return 0;\n }\n const ticks = this.ticks;\n const index = ticks.findIndex(t => t.value === value);\n if (index >= 0) {\n const opts = grid.setContext(this.getContext(index));\n return opts.lineWidth;\n }\n return 0;\n }\n drawGrid(chartArea) {\n const grid = this.options.grid;\n const ctx = this.ctx;\n const items = this._gridLineItems || (this._gridLineItems = this._computeGridLineItems(chartArea));\n let i, ilen;\n const drawLine = (p1, p2, style) => {\n if (!style.width || !style.color) {\n return;\n }\n ctx.save();\n ctx.lineWidth = style.width;\n ctx.strokeStyle = style.color;\n ctx.setLineDash(style.borderDash || []);\n ctx.lineDashOffset = style.borderDashOffset;\n ctx.beginPath();\n ctx.moveTo(p1.x, p1.y);\n ctx.lineTo(p2.x, p2.y);\n ctx.stroke();\n ctx.restore();\n };\n if (grid.display) {\n for (i = 0, ilen = items.length; i < ilen; ++i) {\n const item = items[i];\n if (grid.drawOnChartArea) {\n drawLine({\n x: item.x1,\n y: item.y1\n }, {\n x: item.x2,\n y: item.y2\n }, item);\n }\n if (grid.drawTicks) {\n drawLine({\n x: item.tx1,\n y: item.ty1\n }, {\n x: item.tx2,\n y: item.ty2\n }, {\n color: item.tickColor,\n width: item.tickWidth,\n borderDash: item.tickBorderDash,\n borderDashOffset: item.tickBorderDashOffset\n });\n }\n }\n }\n }\n drawBorder() {\n const {\n chart,\n ctx,\n options: {\n border,\n grid\n }\n } = this;\n const borderOpts = border.setContext(this.getContext());\n const axisWidth = border.display ? borderOpts.width : 0;\n if (!axisWidth) {\n return;\n }\n const lastLineWidth = grid.setContext(this.getContext(0)).lineWidth;\n const borderValue = this._borderValue;\n let x1, x2, y1, y2;\n if (this.isHorizontal()) {\n x1 = _alignPixel(chart, this.left, axisWidth) - axisWidth / 2;\n x2 = _alignPixel(chart, this.right, lastLineWidth) + lastLineWidth / 2;\n y1 = y2 = borderValue;\n } else {\n y1 = _alignPixel(chart, this.top, axisWidth) - axisWidth / 2;\n y2 = _alignPixel(chart, this.bottom, lastLineWidth) + lastLineWidth / 2;\n x1 = x2 = borderValue;\n }\n ctx.save();\n ctx.lineWidth = borderOpts.width;\n ctx.strokeStyle = borderOpts.color;\n ctx.beginPath();\n ctx.moveTo(x1, y1);\n ctx.lineTo(x2, y2);\n ctx.stroke();\n ctx.restore();\n }\n drawLabels(chartArea) {\n const optionTicks = this.options.ticks;\n if (!optionTicks.display) {\n return;\n }\n const ctx = this.ctx;\n const area = this._computeLabelArea();\n if (area) {\n clipArea(ctx, area);\n }\n const items = this.getLabelItems(chartArea);\n for (const item of items) {\n const renderTextOptions = item.options;\n const tickFont = item.font;\n const label = item.label;\n const y = item.textOffset;\n renderText(ctx, label, 0, y, tickFont, renderTextOptions);\n }\n if (area) {\n unclipArea(ctx);\n }\n }\n drawTitle() {\n const {\n ctx,\n options: {\n position,\n title,\n reverse\n }\n } = this;\n if (!title.display) {\n return;\n }\n const font = toFont(title.font);\n const padding = toPadding(title.padding);\n const align = title.align;\n let offset = font.lineHeight / 2;\n if (position === 'bottom' || position === 'center' || isObject(position)) {\n offset += padding.bottom;\n if (isArray(title.text)) {\n offset += font.lineHeight * (title.text.length - 1);\n }\n } else {\n offset += padding.top;\n }\n const {\n titleX,\n titleY,\n maxWidth,\n rotation\n } = titleArgs(this, offset, position, align);\n renderText(ctx, title.text, 0, 0, font, {\n color: title.color,\n maxWidth,\n rotation,\n textAlign: titleAlign(align, position, reverse),\n textBaseline: 'middle',\n translation: [titleX, titleY]\n });\n }\n draw(chartArea) {\n if (!this._isVisible()) {\n return;\n }\n this.drawBackground();\n this.drawGrid(chartArea);\n this.drawBorder();\n this.drawTitle();\n this.drawLabels(chartArea);\n }\n _layers() {\n const opts = this.options;\n const tz = opts.ticks && opts.ticks.z || 0;\n const gz = valueOrDefault(opts.grid && opts.grid.z, -1);\n const bz = valueOrDefault(opts.border && opts.border.z, 0);\n if (!this._isVisible() || this.draw !== Scale.prototype.draw) {\n return [{\n z: tz,\n draw: chartArea => {\n this.draw(chartArea);\n }\n }];\n }\n return [{\n z: gz,\n draw: chartArea => {\n this.drawBackground();\n this.drawGrid(chartArea);\n this.drawTitle();\n }\n }, {\n z: bz,\n draw: () => {\n this.drawBorder();\n }\n }, {\n z: tz,\n draw: chartArea => {\n this.drawLabels(chartArea);\n }\n }];\n }\n getMatchingVisibleMetas(type) {\n const metas = this.chart.getSortedVisibleDatasetMetas();\n const axisID = this.axis + 'AxisID';\n const result = [];\n let i, ilen;\n for (i = 0, ilen = metas.length; i < ilen; ++i) {\n const meta = metas[i];\n if (meta[axisID] === this.id && (!type || meta.type === type)) {\n result.push(meta);\n }\n }\n return result;\n }\n _resolveTickFontOptions(index) {\n const opts = this.options.ticks.setContext(this.getContext(index));\n return toFont(opts.font);\n }\n _maxDigits() {\n const fontSize = this._resolveTickFontOptions(0).lineHeight;\n return (this.isHorizontal() ? this.width : this.height) / fontSize;\n }\n}\nclass TypedRegistry {\n constructor(type, scope, override) {\n this.type = type;\n this.scope = scope;\n this.override = override;\n this.items = Object.create(null);\n }\n isForType(type) {\n return Object.prototype.isPrototypeOf.call(this.type.prototype, type.prototype);\n }\n register(item) {\n const proto = Object.getPrototypeOf(item);\n let parentScope;\n if (isIChartComponent(proto)) {\n parentScope = this.register(proto);\n }\n const items = this.items;\n const id = item.id;\n const scope = this.scope + '.' + id;\n if (!id) {\n throw new Error('class does not have id: ' + item);\n }\n if (id in items) {\n return scope;\n }\n items[id] = item;\n registerDefaults(item, scope, parentScope);\n if (this.override) {\n defaults.override(item.id, item.overrides);\n }\n return scope;\n }\n get(id) {\n return this.items[id];\n }\n unregister(item) {\n const items = this.items;\n const id = item.id;\n const scope = this.scope;\n if (id in items) {\n delete items[id];\n }\n if (scope && id in defaults[scope]) {\n delete defaults[scope][id];\n if (this.override) {\n delete overrides[id];\n }\n }\n }\n}\nfunction registerDefaults(item, scope, parentScope) {\n const itemDefaults = merge(Object.create(null), [parentScope ? defaults.get(parentScope) : {}, defaults.get(scope), item.defaults]);\n defaults.set(scope, itemDefaults);\n if (item.defaultRoutes) {\n routeDefaults(scope, item.defaultRoutes);\n }\n if (item.descriptors) {\n defaults.describe(scope, item.descriptors);\n }\n}\nfunction routeDefaults(scope, routes) {\n Object.keys(routes).forEach(property => {\n const propertyParts = property.split('.');\n const sourceName = propertyParts.pop();\n const sourceScope = [scope].concat(propertyParts).join('.');\n const parts = routes[property].split('.');\n const targetName = parts.pop();\n const targetScope = parts.join('.');\n defaults.route(sourceScope, sourceName, targetScope, targetName);\n });\n}\nfunction isIChartComponent(proto) {\n return 'id' in proto && 'defaults' in proto;\n}\nclass Registry {\n constructor() {\n this.controllers = new TypedRegistry(DatasetController, 'datasets', true);\n this.elements = new TypedRegistry(Element, 'elements');\n this.plugins = new TypedRegistry(Object, 'plugins');\n this.scales = new TypedRegistry(Scale, 'scales');\n this._typedRegistries = [this.controllers, this.scales, this.elements];\n }\n add(...args) {\n this._each('register', args);\n }\n remove(...args) {\n this._each('unregister', args);\n }\n addControllers(...args) {\n this._each('register', args, this.controllers);\n }\n addElements(...args) {\n this._each('register', args, this.elements);\n }\n addPlugins(...args) {\n this._each('register', args, this.plugins);\n }\n addScales(...args) {\n this._each('register', args, this.scales);\n }\n getController(id) {\n return this._get(id, this.controllers, 'controller');\n }\n getElement(id) {\n return this._get(id, this.elements, 'element');\n }\n getPlugin(id) {\n return this._get(id, this.plugins, 'plugin');\n }\n getScale(id) {\n return this._get(id, this.scales, 'scale');\n }\n removeControllers(...args) {\n this._each('unregister', args, this.controllers);\n }\n removeElements(...args) {\n this._each('unregister', args, this.elements);\n }\n removePlugins(...args) {\n this._each('unregister', args, this.plugins);\n }\n removeScales(...args) {\n this._each('unregister', args, this.scales);\n }\n _each(method, args, typedRegistry) {\n [...args].forEach(arg => {\n const reg = typedRegistry || this._getRegistryForType(arg);\n if (typedRegistry || reg.isForType(arg) || reg === this.plugins && arg.id) {\n this._exec(method, reg, arg);\n } else {\n each(arg, item => {\n const itemReg = typedRegistry || this._getRegistryForType(item);\n this._exec(method, itemReg, item);\n });\n }\n });\n }\n _exec(method, registry, component) {\n const camelMethod = _capitalize(method);\n callback(component['before' + camelMethod], [], component);\n registry[method](component);\n callback(component['after' + camelMethod], [], component);\n }\n _getRegistryForType(type) {\n for (let i = 0; i < this._typedRegistries.length; i++) {\n const reg = this._typedRegistries[i];\n if (reg.isForType(type)) {\n return reg;\n }\n }\n return this.plugins;\n }\n _get(id, typedRegistry, type) {\n const item = typedRegistry.get(id);\n if (item === undefined) {\n throw new Error('\"' + id + '\" is not a registered ' + type + '.');\n }\n return item;\n }\n}\nvar registry = /* #__PURE__ */new Registry();\nclass PluginService {\n constructor() {\n this._init = undefined;\n }\n notify(chart, hook, args, filter) {\n if (hook === 'beforeInit') {\n this._init = this._createDescriptors(chart, true);\n this._notify(this._init, chart, 'install');\n }\n if (this._init === undefined) {\n return;\n }\n const descriptors = filter ? this._descriptors(chart).filter(filter) : this._descriptors(chart);\n const result = this._notify(descriptors, chart, hook, args);\n if (hook === 'afterDestroy') {\n this._notify(descriptors, chart, 'stop');\n this._notify(this._init, chart, 'uninstall');\n this._init = undefined;\n }\n return result;\n }\n _notify(descriptors, chart, hook, args) {\n args = args || {};\n for (const descriptor of descriptors) {\n const plugin = descriptor.plugin;\n const method = plugin[hook];\n const params = [chart, args, descriptor.options];\n if (callback(method, params, plugin) === false && args.cancelable) {\n return false;\n }\n }\n return true;\n }\n invalidate() {\n if (!isNullOrUndef(this._cache)) {\n this._oldCache = this._cache;\n this._cache = undefined;\n }\n }\n _descriptors(chart) {\n if (this._cache) {\n return this._cache;\n }\n const descriptors = this._cache = this._createDescriptors(chart);\n this._notifyStateChanges(chart);\n return descriptors;\n }\n _createDescriptors(chart, all) {\n const config = chart && chart.config;\n const options = valueOrDefault(config.options && config.options.plugins, {});\n const plugins = allPlugins(config);\n return options === false && !all ? [] : createDescriptors(chart, plugins, options, all);\n }\n _notifyStateChanges(chart) {\n const previousDescriptors = this._oldCache || [];\n const descriptors = this._cache;\n const diff = (a, b) => a.filter(x => !b.some(y => x.plugin.id === y.plugin.id));\n this._notify(diff(previousDescriptors, descriptors), chart, 'stop');\n this._notify(diff(descriptors, previousDescriptors), chart, 'start');\n }\n}\nfunction allPlugins(config) {\n const localIds = {};\n const plugins = [];\n const keys = Object.keys(registry.plugins.items);\n for (let i = 0; i < keys.length; i++) {\n plugins.push(registry.getPlugin(keys[i]));\n }\n const local = config.plugins || [];\n for (let i = 0; i < local.length; i++) {\n const plugin = local[i];\n if (plugins.indexOf(plugin) === -1) {\n plugins.push(plugin);\n localIds[plugin.id] = true;\n }\n }\n return {\n plugins,\n localIds\n };\n}\nfunction getOpts(options, all) {\n if (!all && options === false) {\n return null;\n }\n if (options === true) {\n return {};\n }\n return options;\n}\nfunction createDescriptors(chart, {\n plugins,\n localIds\n}, options, all) {\n const result = [];\n const context = chart.getContext();\n for (const plugin of plugins) {\n const id = plugin.id;\n const opts = getOpts(options[id], all);\n if (opts === null) {\n continue;\n }\n result.push({\n plugin,\n options: pluginOpts(chart.config, {\n plugin,\n local: localIds[id]\n }, opts, context)\n });\n }\n return result;\n}\nfunction pluginOpts(config, {\n plugin,\n local\n}, opts, context) {\n const keys = config.pluginScopeKeys(plugin);\n const scopes = config.getOptionScopes(opts, keys);\n if (local && plugin.defaults) {\n scopes.push(plugin.defaults);\n }\n return config.createResolver(scopes, context, [''], {\n scriptable: false,\n indexable: false,\n allKeys: true\n });\n}\nfunction getIndexAxis(type, options) {\n const datasetDefaults = defaults.datasets[type] || {};\n const datasetOptions = (options.datasets || {})[type] || {};\n return datasetOptions.indexAxis || options.indexAxis || datasetDefaults.indexAxis || 'x';\n}\nfunction getAxisFromDefaultScaleID(id, indexAxis) {\n let axis = id;\n if (id === '_index_') {\n axis = indexAxis;\n } else if (id === '_value_') {\n axis = indexAxis === 'x' ? 'y' : 'x';\n }\n return axis;\n}\nfunction getDefaultScaleIDFromAxis(axis, indexAxis) {\n return axis === indexAxis ? '_index_' : '_value_';\n}\nfunction idMatchesAxis(id) {\n if (id === 'x' || id === 'y' || id === 'r') {\n return id;\n }\n}\nfunction axisFromPosition(position) {\n if (position === 'top' || position === 'bottom') {\n return 'x';\n }\n if (position === 'left' || position === 'right') {\n return 'y';\n }\n}\nfunction determineAxis(id, ...scaleOptions) {\n if (idMatchesAxis(id)) {\n return id;\n }\n for (const opts of scaleOptions) {\n const axis = opts.axis || axisFromPosition(opts.position) || id.length > 1 && idMatchesAxis(id[0].toLowerCase());\n if (axis) {\n return axis;\n }\n }\n throw new Error(`Cannot determine type of '${id}' axis. Please provide 'axis' or 'position' option.`);\n}\nfunction getAxisFromDataset(id, axis, dataset) {\n if (dataset[axis + 'AxisID'] === id) {\n return {\n axis\n };\n }\n}\nfunction retrieveAxisFromDatasets(id, config) {\n if (config.data && config.data.datasets) {\n const boundDs = config.data.datasets.filter(d => d.xAxisID === id || d.yAxisID === id);\n if (boundDs.length) {\n return getAxisFromDataset(id, 'x', boundDs[0]) || getAxisFromDataset(id, 'y', boundDs[0]);\n }\n }\n return {};\n}\nfunction mergeScaleConfig(config, options) {\n const chartDefaults = overrides[config.type] || {\n scales: {}\n };\n const configScales = options.scales || {};\n const chartIndexAxis = getIndexAxis(config.type, options);\n const scales = Object.create(null);\n Object.keys(configScales).forEach(id => {\n const scaleConf = configScales[id];\n if (!isObject(scaleConf)) {\n return console.error(`Invalid scale configuration for scale: ${id}`);\n }\n if (scaleConf._proxy) {\n return console.warn(`Ignoring resolver passed as options for scale: ${id}`);\n }\n const axis = determineAxis(id, scaleConf, retrieveAxisFromDatasets(id, config), defaults.scales[scaleConf.type]);\n const defaultId = getDefaultScaleIDFromAxis(axis, chartIndexAxis);\n const defaultScaleOptions = chartDefaults.scales || {};\n scales[id] = mergeIf(Object.create(null), [{\n axis\n }, scaleConf, defaultScaleOptions[axis], defaultScaleOptions[defaultId]]);\n });\n config.data.datasets.forEach(dataset => {\n const type = dataset.type || config.type;\n const indexAxis = dataset.indexAxis || getIndexAxis(type, options);\n const datasetDefaults = overrides[type] || {};\n const defaultScaleOptions = datasetDefaults.scales || {};\n Object.keys(defaultScaleOptions).forEach(defaultID => {\n const axis = getAxisFromDefaultScaleID(defaultID, indexAxis);\n const id = dataset[axis + 'AxisID'] || axis;\n scales[id] = scales[id] || Object.create(null);\n mergeIf(scales[id], [{\n axis\n }, configScales[id], defaultScaleOptions[defaultID]]);\n });\n });\n Object.keys(scales).forEach(key => {\n const scale = scales[key];\n mergeIf(scale, [defaults.scales[scale.type], defaults.scale]);\n });\n return scales;\n}\nfunction initOptions(config) {\n const options = config.options || (config.options = {});\n options.plugins = valueOrDefault(options.plugins, {});\n options.scales = mergeScaleConfig(config, options);\n}\nfunction initData(data) {\n data = data || {};\n data.datasets = data.datasets || [];\n data.labels = data.labels || [];\n return data;\n}\nfunction initConfig(config) {\n config = config || {};\n config.data = initData(config.data);\n initOptions(config);\n return config;\n}\nconst keyCache = new Map();\nconst keysCached = new Set();\nfunction cachedKeys(cacheKey, generate) {\n let keys = keyCache.get(cacheKey);\n if (!keys) {\n keys = generate();\n keyCache.set(cacheKey, keys);\n keysCached.add(keys);\n }\n return keys;\n}\nconst addIfFound = (set, obj, key) => {\n const opts = resolveObjectKey(obj, key);\n if (opts !== undefined) {\n set.add(opts);\n }\n};\nclass Config {\n constructor(config) {\n this._config = initConfig(config);\n this._scopeCache = new Map();\n this._resolverCache = new Map();\n }\n get platform() {\n return this._config.platform;\n }\n get type() {\n return this._config.type;\n }\n set type(type) {\n this._config.type = type;\n }\n get data() {\n return this._config.data;\n }\n set data(data) {\n this._config.data = initData(data);\n }\n get options() {\n return this._config.options;\n }\n set options(options) {\n this._config.options = options;\n }\n get plugins() {\n return this._config.plugins;\n }\n update() {\n const config = this._config;\n this.clearCache();\n initOptions(config);\n }\n clearCache() {\n this._scopeCache.clear();\n this._resolverCache.clear();\n }\n datasetScopeKeys(datasetType) {\n return cachedKeys(datasetType, () => [[`datasets.${datasetType}`, '']]);\n }\n datasetAnimationScopeKeys(datasetType, transition) {\n return cachedKeys(`${datasetType}.transition.${transition}`, () => [[`datasets.${datasetType}.transitions.${transition}`, `transitions.${transition}`], [`datasets.${datasetType}`, '']]);\n }\n datasetElementScopeKeys(datasetType, elementType) {\n return cachedKeys(`${datasetType}-${elementType}`, () => [[`datasets.${datasetType}.elements.${elementType}`, `datasets.${datasetType}`, `elements.${elementType}`, '']]);\n }\n pluginScopeKeys(plugin) {\n const id = plugin.id;\n const type = this.type;\n return cachedKeys(`${type}-plugin-${id}`, () => [[`plugins.${id}`, ...(plugin.additionalOptionScopes || [])]]);\n }\n _cachedScopes(mainScope, resetCache) {\n const _scopeCache = this._scopeCache;\n let cache = _scopeCache.get(mainScope);\n if (!cache || resetCache) {\n cache = new Map();\n _scopeCache.set(mainScope, cache);\n }\n return cache;\n }\n getOptionScopes(mainScope, keyLists, resetCache) {\n const {\n options,\n type\n } = this;\n const cache = this._cachedScopes(mainScope, resetCache);\n const cached = cache.get(keyLists);\n if (cached) {\n return cached;\n }\n const scopes = new Set();\n keyLists.forEach(keys => {\n if (mainScope) {\n scopes.add(mainScope);\n keys.forEach(key => addIfFound(scopes, mainScope, key));\n }\n keys.forEach(key => addIfFound(scopes, options, key));\n keys.forEach(key => addIfFound(scopes, overrides[type] || {}, key));\n keys.forEach(key => addIfFound(scopes, defaults, key));\n keys.forEach(key => addIfFound(scopes, descriptors, key));\n });\n const array = Array.from(scopes);\n if (array.length === 0) {\n array.push(Object.create(null));\n }\n if (keysCached.has(keyLists)) {\n cache.set(keyLists, array);\n }\n return array;\n }\n chartOptionScopes() {\n const {\n options,\n type\n } = this;\n return [options, overrides[type] || {}, defaults.datasets[type] || {}, {\n type\n }, defaults, descriptors];\n }\n resolveNamedOptions(scopes, names, context, prefixes = ['']) {\n const result = {\n $shared: true\n };\n const {\n resolver,\n subPrefixes\n } = getResolver(this._resolverCache, scopes, prefixes);\n let options = resolver;\n if (needContext(resolver, names)) {\n result.$shared = false;\n context = isFunction(context) ? context() : context;\n const subResolver = this.createResolver(scopes, context, subPrefixes);\n options = _attachContext(resolver, context, subResolver);\n }\n for (const prop of names) {\n result[prop] = options[prop];\n }\n return result;\n }\n createResolver(scopes, context, prefixes = [''], descriptorDefaults) {\n const {\n resolver\n } = getResolver(this._resolverCache, scopes, prefixes);\n return isObject(context) ? _attachContext(resolver, context, undefined, descriptorDefaults) : resolver;\n }\n}\nfunction getResolver(resolverCache, scopes, prefixes) {\n let cache = resolverCache.get(scopes);\n if (!cache) {\n cache = new Map();\n resolverCache.set(scopes, cache);\n }\n const cacheKey = prefixes.join();\n let cached = cache.get(cacheKey);\n if (!cached) {\n const resolver = _createResolver(scopes, prefixes);\n cached = {\n resolver,\n subPrefixes: prefixes.filter(p => !p.toLowerCase().includes('hover'))\n };\n cache.set(cacheKey, cached);\n }\n return cached;\n}\nconst hasFunction = value => isObject(value) && Object.getOwnPropertyNames(value).some(key => isFunction(value[key]));\nfunction needContext(proxy, names) {\n const {\n isScriptable,\n isIndexable\n } = _descriptors(proxy);\n for (const prop of names) {\n const scriptable = isScriptable(prop);\n const indexable = isIndexable(prop);\n const value = (indexable || scriptable) && proxy[prop];\n if (scriptable && (isFunction(value) || hasFunction(value)) || indexable && isArray(value)) {\n return true;\n }\n }\n return false;\n}\nvar version = \"4.5.1\";\nconst KNOWN_POSITIONS = ['top', 'bottom', 'left', 'right', 'chartArea'];\nfunction positionIsHorizontal(position, axis) {\n return position === 'top' || position === 'bottom' || KNOWN_POSITIONS.indexOf(position) === -1 && axis === 'x';\n}\nfunction compare2Level(l1, l2) {\n return function (a, b) {\n return a[l1] === b[l1] ? a[l2] - b[l2] : a[l1] - b[l1];\n };\n}\nfunction onAnimationsComplete(context) {\n const chart = context.chart;\n const animationOptions = chart.options.animation;\n chart.notifyPlugins('afterRender');\n callback(animationOptions && animationOptions.onComplete, [context], chart);\n}\nfunction onAnimationProgress(context) {\n const chart = context.chart;\n const animationOptions = chart.options.animation;\n callback(animationOptions && animationOptions.onProgress, [context], chart);\n}\nfunction getCanvas(item) {\n if (_isDomSupported() && typeof item === 'string') {\n item = document.getElementById(item);\n } else if (item && item.length) {\n item = item[0];\n }\n if (item && item.canvas) {\n item = item.canvas;\n }\n return item;\n}\nconst instances = {};\nconst getChart = key => {\n const canvas = getCanvas(key);\n return Object.values(instances).filter(c => c.canvas === canvas).pop();\n};\nfunction moveNumericKeys(obj, start, move) {\n const keys = Object.keys(obj);\n for (const key of keys) {\n const intKey = +key;\n if (intKey >= start) {\n const value = obj[key];\n delete obj[key];\n if (move > 0 || intKey > start) {\n obj[intKey + move] = value;\n }\n }\n }\n}\nfunction determineLastEvent(e, lastEvent, inChartArea, isClick) {\n if (!inChartArea || e.type === 'mouseout') {\n return null;\n }\n if (isClick) {\n return lastEvent;\n }\n return e;\n}\nlet Chart = /*#__PURE__*/(() => {\n class Chart {\n static defaults = defaults;\n static instances = instances;\n static overrides = overrides;\n static registry = registry;\n static version = version;\n static getChart = getChart;\n static register(...items) {\n registry.add(...items);\n invalidatePlugins();\n }\n static unregister(...items) {\n registry.remove(...items);\n invalidatePlugins();\n }\n constructor(item, userConfig) {\n const config = this.config = new Config(userConfig);\n const initialCanvas = getCanvas(item);\n const existingChart = getChart(initialCanvas);\n if (existingChart) {\n throw new Error('Canvas is already in use. Chart with ID \\'' + existingChart.id + '\\'' + ' must be destroyed before the canvas with ID \\'' + existingChart.canvas.id + '\\' can be reused.');\n }\n const options = config.createResolver(config.chartOptionScopes(), this.getContext());\n this.platform = new (config.platform || _detectPlatform(initialCanvas))();\n this.platform.updateConfig(config);\n const context = this.platform.acquireContext(initialCanvas, options.aspectRatio);\n const canvas = context && context.canvas;\n const height = canvas && canvas.height;\n const width = canvas && canvas.width;\n this.id = uid();\n this.ctx = context;\n this.canvas = canvas;\n this.width = width;\n this.height = height;\n this._options = options;\n this._aspectRatio = this.aspectRatio;\n this._layers = [];\n this._metasets = [];\n this._stacks = undefined;\n this.boxes = [];\n this.currentDevicePixelRatio = undefined;\n this.chartArea = undefined;\n this._active = [];\n this._lastEvent = undefined;\n this._listeners = {};\n this._responsiveListeners = undefined;\n this._sortedMetasets = [];\n this.scales = {};\n this._plugins = new PluginService();\n this.$proxies = {};\n this._hiddenIndices = {};\n this.attached = false;\n this._animationsDisabled = undefined;\n this.$context = undefined;\n this._doResize = debounce(mode => this.update(mode), options.resizeDelay || 0);\n this._dataChanges = [];\n instances[this.id] = this;\n if (!context || !canvas) {\n console.error(\"Failed to create chart: can't acquire context from the given item\");\n return;\n }\n animator.listen(this, 'complete', onAnimationsComplete);\n animator.listen(this, 'progress', onAnimationProgress);\n this._initialize();\n if (this.attached) {\n this.update();\n }\n }\n get aspectRatio() {\n const {\n options: {\n aspectRatio,\n maintainAspectRatio\n },\n width,\n height,\n _aspectRatio\n } = this;\n if (!isNullOrUndef(aspectRatio)) {\n return aspectRatio;\n }\n if (maintainAspectRatio && _aspectRatio) {\n return _aspectRatio;\n }\n return height ? width / height : null;\n }\n get data() {\n return this.config.data;\n }\n set data(data) {\n this.config.data = data;\n }\n get options() {\n return this._options;\n }\n set options(options) {\n this.config.options = options;\n }\n get registry() {\n return registry;\n }\n _initialize() {\n this.notifyPlugins('beforeInit');\n if (this.options.responsive) {\n this.resize();\n } else {\n retinaScale(this, this.options.devicePixelRatio);\n }\n this.bindEvents();\n this.notifyPlugins('afterInit');\n return this;\n }\n clear() {\n clearCanvas(this.canvas, this.ctx);\n return this;\n }\n stop() {\n animator.stop(this);\n return this;\n }\n resize(width, height) {\n if (!animator.running(this)) {\n this._resize(width, height);\n } else {\n this._resizeBeforeDraw = {\n width,\n height\n };\n }\n }\n _resize(width, height) {\n const options = this.options;\n const canvas = this.canvas;\n const aspectRatio = options.maintainAspectRatio && this.aspectRatio;\n const newSize = this.platform.getMaximumSize(canvas, width, height, aspectRatio);\n const newRatio = options.devicePixelRatio || this.platform.getDevicePixelRatio();\n const mode = this.width ? 'resize' : 'attach';\n this.width = newSize.width;\n this.height = newSize.height;\n this._aspectRatio = this.aspectRatio;\n if (!retinaScale(this, newRatio, true)) {\n return;\n }\n this.notifyPlugins('resize', {\n size: newSize\n });\n callback(options.onResize, [this, newSize], this);\n if (this.attached) {\n if (this._doResize(mode)) {\n this.render();\n }\n }\n }\n ensureScalesHaveIDs() {\n const options = this.options;\n const scalesOptions = options.scales || {};\n each(scalesOptions, (axisOptions, axisID) => {\n axisOptions.id = axisID;\n });\n }\n buildOrUpdateScales() {\n const options = this.options;\n const scaleOpts = options.scales;\n const scales = this.scales;\n const updated = Object.keys(scales).reduce((obj, id) => {\n obj[id] = false;\n return obj;\n }, {});\n let items = [];\n if (scaleOpts) {\n items = items.concat(Object.keys(scaleOpts).map(id => {\n const scaleOptions = scaleOpts[id];\n const axis = determineAxis(id, scaleOptions);\n const isRadial = axis === 'r';\n const isHorizontal = axis === 'x';\n return {\n options: scaleOptions,\n dposition: isRadial ? 'chartArea' : isHorizontal ? 'bottom' : 'left',\n dtype: isRadial ? 'radialLinear' : isHorizontal ? 'category' : 'linear'\n };\n }));\n }\n each(items, item => {\n const scaleOptions = item.options;\n const id = scaleOptions.id;\n const axis = determineAxis(id, scaleOptions);\n const scaleType = valueOrDefault(scaleOptions.type, item.dtype);\n if (scaleOptions.position === undefined || positionIsHorizontal(scaleOptions.position, axis) !== positionIsHorizontal(item.dposition)) {\n scaleOptions.position = item.dposition;\n }\n updated[id] = true;\n let scale = null;\n if (id in scales && scales[id].type === scaleType) {\n scale = scales[id];\n } else {\n const scaleClass = registry.getScale(scaleType);\n scale = new scaleClass({\n id,\n type: scaleType,\n ctx: this.ctx,\n chart: this\n });\n scales[scale.id] = scale;\n }\n scale.init(scaleOptions, options);\n });\n each(updated, (hasUpdated, id) => {\n if (!hasUpdated) {\n delete scales[id];\n }\n });\n each(scales, scale => {\n layouts.configure(this, scale, scale.options);\n layouts.addBox(this, scale);\n });\n }\n _updateMetasets() {\n const metasets = this._metasets;\n const numData = this.data.datasets.length;\n const numMeta = metasets.length;\n metasets.sort((a, b) => a.index - b.index);\n if (numMeta > numData) {\n for (let i = numData; i < numMeta; ++i) {\n this._destroyDatasetMeta(i);\n }\n metasets.splice(numData, numMeta - numData);\n }\n this._sortedMetasets = metasets.slice(0).sort(compare2Level('order', 'index'));\n }\n _removeUnreferencedMetasets() {\n const {\n _metasets: metasets,\n data: {\n datasets\n }\n } = this;\n if (metasets.length > datasets.length) {\n delete this._stacks;\n }\n metasets.forEach((meta, index) => {\n if (datasets.filter(x => x === meta._dataset).length === 0) {\n this._destroyDatasetMeta(index);\n }\n });\n }\n buildOrUpdateControllers() {\n const newControllers = [];\n const datasets = this.data.datasets;\n let i, ilen;\n this._removeUnreferencedMetasets();\n for (i = 0, ilen = datasets.length; i < ilen; i++) {\n const dataset = datasets[i];\n let meta = this.getDatasetMeta(i);\n const type = dataset.type || this.config.type;\n if (meta.type && meta.type !== type) {\n this._destroyDatasetMeta(i);\n meta = this.getDatasetMeta(i);\n }\n meta.type = type;\n meta.indexAxis = dataset.indexAxis || getIndexAxis(type, this.options);\n meta.order = dataset.order || 0;\n meta.index = i;\n meta.label = '' + dataset.label;\n meta.visible = this.isDatasetVisible(i);\n if (meta.controller) {\n meta.controller.updateIndex(i);\n meta.controller.linkScales();\n } else {\n const ControllerClass = registry.getController(type);\n const {\n datasetElementType,\n dataElementType\n } = defaults.datasets[type];\n Object.assign(ControllerClass, {\n dataElementType: registry.getElement(dataElementType),\n datasetElementType: datasetElementType && registry.getElement(datasetElementType)\n });\n meta.controller = new ControllerClass(this, i);\n newControllers.push(meta.controller);\n }\n }\n this._updateMetasets();\n return newControllers;\n }\n _resetElements() {\n each(this.data.datasets, (dataset, datasetIndex) => {\n this.getDatasetMeta(datasetIndex).controller.reset();\n }, this);\n }\n reset() {\n this._resetElements();\n this.notifyPlugins('reset');\n }\n update(mode) {\n const config = this.config;\n config.update();\n const options = this._options = config.createResolver(config.chartOptionScopes(), this.getContext());\n const animsDisabled = this._animationsDisabled = !options.animation;\n this._updateScales();\n this._checkEventBindings();\n this._updateHiddenIndices();\n this._plugins.invalidate();\n if (this.notifyPlugins('beforeUpdate', {\n mode,\n cancelable: true\n }) === false) {\n return;\n }\n const newControllers = this.buildOrUpdateControllers();\n this.notifyPlugins('beforeElementsUpdate');\n let minPadding = 0;\n for (let i = 0, ilen = this.data.datasets.length; i < ilen; i++) {\n const {\n controller\n } = this.getDatasetMeta(i);\n const reset = !animsDisabled && newControllers.indexOf(controller) === -1;\n controller.buildOrUpdateElements(reset);\n minPadding = Math.max(+controller.getMaxOverflow(), minPadding);\n }\n minPadding = this._minPadding = options.layout.autoPadding ? minPadding : 0;\n this._updateLayout(minPadding);\n if (!animsDisabled) {\n each(newControllers, controller => {\n controller.reset();\n });\n }\n this._updateDatasets(mode);\n this.notifyPlugins('afterUpdate', {\n mode\n });\n this._layers.sort(compare2Level('z', '_idx'));\n const {\n _active,\n _lastEvent\n } = this;\n if (_lastEvent) {\n this._eventHandler(_lastEvent, true);\n } else if (_active.length) {\n this._updateHoverStyles(_active, _active, true);\n }\n this.render();\n }\n _updateScales() {\n each(this.scales, scale => {\n layouts.removeBox(this, scale);\n });\n this.ensureScalesHaveIDs();\n this.buildOrUpdateScales();\n }\n _checkEventBindings() {\n const options = this.options;\n const existingEvents = new Set(Object.keys(this._listeners));\n const newEvents = new Set(options.events);\n if (!setsEqual(existingEvents, newEvents) || !!this._responsiveListeners !== options.responsive) {\n this.unbindEvents();\n this.bindEvents();\n }\n }\n _updateHiddenIndices() {\n const {\n _hiddenIndices\n } = this;\n const changes = this._getUniformDataChanges() || [];\n for (const {\n method,\n start,\n count\n } of changes) {\n const move = method === '_removeElements' ? -count : count;\n moveNumericKeys(_hiddenIndices, start, move);\n }\n }\n _getUniformDataChanges() {\n const _dataChanges = this._dataChanges;\n if (!_dataChanges || !_dataChanges.length) {\n return;\n }\n this._dataChanges = [];\n const datasetCount = this.data.datasets.length;\n const makeSet = idx => new Set(_dataChanges.filter(c => c[0] === idx).map((c, i) => i + ',' + c.splice(1).join(',')));\n const changeSet = makeSet(0);\n for (let i = 1; i < datasetCount; i++) {\n if (!setsEqual(changeSet, makeSet(i))) {\n return;\n }\n }\n return Array.from(changeSet).map(c => c.split(',')).map(a => ({\n method: a[1],\n start: +a[2],\n count: +a[3]\n }));\n }\n _updateLayout(minPadding) {\n if (this.notifyPlugins('beforeLayout', {\n cancelable: true\n }) === false) {\n return;\n }\n layouts.update(this, this.width, this.height, minPadding);\n const area = this.chartArea;\n const noArea = area.width <= 0 || area.height <= 0;\n this._layers = [];\n each(this.boxes, box => {\n if (noArea && box.position === 'chartArea') {\n return;\n }\n if (box.configure) {\n box.configure();\n }\n this._layers.push(...box._layers());\n }, this);\n this._layers.forEach((item, index) => {\n item._idx = index;\n });\n this.notifyPlugins('afterLayout');\n }\n _updateDatasets(mode) {\n if (this.notifyPlugins('beforeDatasetsUpdate', {\n mode,\n cancelable: true\n }) === false) {\n return;\n }\n for (let i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n this.getDatasetMeta(i).controller.configure();\n }\n for (let i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n this._updateDataset(i, isFunction(mode) ? mode({\n datasetIndex: i\n }) : mode);\n }\n this.notifyPlugins('afterDatasetsUpdate', {\n mode\n });\n }\n _updateDataset(index, mode) {\n const meta = this.getDatasetMeta(index);\n const args = {\n meta,\n index,\n mode,\n cancelable: true\n };\n if (this.notifyPlugins('beforeDatasetUpdate', args) === false) {\n return;\n }\n meta.controller._update(mode);\n args.cancelable = false;\n this.notifyPlugins('afterDatasetUpdate', args);\n }\n render() {\n if (this.notifyPlugins('beforeRender', {\n cancelable: true\n }) === false) {\n return;\n }\n if (animator.has(this)) {\n if (this.attached && !animator.running(this)) {\n animator.start(this);\n }\n } else {\n this.draw();\n onAnimationsComplete({\n chart: this\n });\n }\n }\n draw() {\n let i;\n if (this._resizeBeforeDraw) {\n const {\n width,\n height\n } = this._resizeBeforeDraw;\n this._resizeBeforeDraw = null;\n this._resize(width, height);\n }\n this.clear();\n if (this.width <= 0 || this.height <= 0) {\n return;\n }\n if (this.notifyPlugins('beforeDraw', {\n cancelable: true\n }) === false) {\n return;\n }\n const layers = this._layers;\n for (i = 0; i < layers.length && layers[i].z <= 0; ++i) {\n layers[i].draw(this.chartArea);\n }\n this._drawDatasets();\n for (; i < layers.length; ++i) {\n layers[i].draw(this.chartArea);\n }\n this.notifyPlugins('afterDraw');\n }\n _getSortedDatasetMetas(filterVisible) {\n const metasets = this._sortedMetasets;\n const result = [];\n let i, ilen;\n for (i = 0, ilen = metasets.length; i < ilen; ++i) {\n const meta = metasets[i];\n if (!filterVisible || meta.visible) {\n result.push(meta);\n }\n }\n return result;\n }\n getSortedVisibleDatasetMetas() {\n return this._getSortedDatasetMetas(true);\n }\n _drawDatasets() {\n if (this.notifyPlugins('beforeDatasetsDraw', {\n cancelable: true\n }) === false) {\n return;\n }\n const metasets = this.getSortedVisibleDatasetMetas();\n for (let i = metasets.length - 1; i >= 0; --i) {\n this._drawDataset(metasets[i]);\n }\n this.notifyPlugins('afterDatasetsDraw');\n }\n _drawDataset(meta) {\n const ctx = this.ctx;\n const args = {\n meta,\n index: meta.index,\n cancelable: true\n };\n const clip = getDatasetClipArea(this, meta);\n if (this.notifyPlugins('beforeDatasetDraw', args) === false) {\n return;\n }\n if (clip) {\n clipArea(ctx, clip);\n }\n meta.controller.draw();\n if (clip) {\n unclipArea(ctx);\n }\n args.cancelable = false;\n this.notifyPlugins('afterDatasetDraw', args);\n }\n isPointInArea(point) {\n return _isPointInArea(point, this.chartArea, this._minPadding);\n }\n getElementsAtEventForMode(e, mode, options, useFinalPosition) {\n const method = Interaction.modes[mode];\n if (typeof method === 'function') {\n return method(this, e, options, useFinalPosition);\n }\n return [];\n }\n getDatasetMeta(datasetIndex) {\n const dataset = this.data.datasets[datasetIndex];\n const metasets = this._metasets;\n let meta = metasets.filter(x => x && x._dataset === dataset).pop();\n if (!meta) {\n meta = {\n type: null,\n data: [],\n dataset: null,\n controller: null,\n hidden: null,\n xAxisID: null,\n yAxisID: null,\n order: dataset && dataset.order || 0,\n index: datasetIndex,\n _dataset: dataset,\n _parsed: [],\n _sorted: false\n };\n metasets.push(meta);\n }\n return meta;\n }\n getContext() {\n return this.$context || (this.$context = createContext(null, {\n chart: this,\n type: 'chart'\n }));\n }\n getVisibleDatasetCount() {\n return this.getSortedVisibleDatasetMetas().length;\n }\n isDatasetVisible(datasetIndex) {\n const dataset = this.data.datasets[datasetIndex];\n if (!dataset) {\n return false;\n }\n const meta = this.getDatasetMeta(datasetIndex);\n return typeof meta.hidden === 'boolean' ? !meta.hidden : !dataset.hidden;\n }\n setDatasetVisibility(datasetIndex, visible) {\n const meta = this.getDatasetMeta(datasetIndex);\n meta.hidden = !visible;\n }\n toggleDataVisibility(index) {\n this._hiddenIndices[index] = !this._hiddenIndices[index];\n }\n getDataVisibility(index) {\n return !this._hiddenIndices[index];\n }\n _updateVisibility(datasetIndex, dataIndex, visible) {\n const mode = visible ? 'show' : 'hide';\n const meta = this.getDatasetMeta(datasetIndex);\n const anims = meta.controller._resolveAnimations(undefined, mode);\n if (defined(dataIndex)) {\n meta.data[dataIndex].hidden = !visible;\n this.update();\n } else {\n this.setDatasetVisibility(datasetIndex, visible);\n anims.update(meta, {\n visible\n });\n this.update(ctx => ctx.datasetIndex === datasetIndex ? mode : undefined);\n }\n }\n hide(datasetIndex, dataIndex) {\n this._updateVisibility(datasetIndex, dataIndex, false);\n }\n show(datasetIndex, dataIndex) {\n this._updateVisibility(datasetIndex, dataIndex, true);\n }\n _destroyDatasetMeta(datasetIndex) {\n const meta = this._metasets[datasetIndex];\n if (meta && meta.controller) {\n meta.controller._destroy();\n }\n delete this._metasets[datasetIndex];\n }\n _stop() {\n let i, ilen;\n this.stop();\n animator.remove(this);\n for (i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n this._destroyDatasetMeta(i);\n }\n }\n destroy() {\n this.notifyPlugins('beforeDestroy');\n const {\n canvas,\n ctx\n } = this;\n this._stop();\n this.config.clearCache();\n if (canvas) {\n this.unbindEvents();\n clearCanvas(canvas, ctx);\n this.platform.releaseContext(ctx);\n this.canvas = null;\n this.ctx = null;\n }\n delete instances[this.id];\n this.notifyPlugins('afterDestroy');\n }\n toBase64Image(...args) {\n return this.canvas.toDataURL(...args);\n }\n bindEvents() {\n this.bindUserEvents();\n if (this.options.responsive) {\n this.bindResponsiveEvents();\n } else {\n this.attached = true;\n }\n }\n bindUserEvents() {\n const listeners = this._listeners;\n const platform = this.platform;\n const _add = (type, listener) => {\n platform.addEventListener(this, type, listener);\n listeners[type] = listener;\n };\n const listener = (e, x, y) => {\n e.offsetX = x;\n e.offsetY = y;\n this._eventHandler(e);\n };\n each(this.options.events, type => _add(type, listener));\n }\n bindResponsiveEvents() {\n if (!this._responsiveListeners) {\n this._responsiveListeners = {};\n }\n const listeners = this._responsiveListeners;\n const platform = this.platform;\n const _add = (type, listener) => {\n platform.addEventListener(this, type, listener);\n listeners[type] = listener;\n };\n const _remove = (type, listener) => {\n if (listeners[type]) {\n platform.removeEventListener(this, type, listener);\n delete listeners[type];\n }\n };\n const listener = (width, height) => {\n if (this.canvas) {\n this.resize(width, height);\n }\n };\n let detached;\n const attached = () => {\n _remove('attach', attached);\n this.attached = true;\n this.resize();\n _add('resize', listener);\n _add('detach', detached);\n };\n detached = () => {\n this.attached = false;\n _remove('resize', listener);\n this._stop();\n this._resize(0, 0);\n _add('attach', attached);\n };\n if (platform.isAttached(this.canvas)) {\n attached();\n } else {\n detached();\n }\n }\n unbindEvents() {\n each(this._listeners, (listener, type) => {\n this.platform.removeEventListener(this, type, listener);\n });\n this._listeners = {};\n each(this._responsiveListeners, (listener, type) => {\n this.platform.removeEventListener(this, type, listener);\n });\n this._responsiveListeners = undefined;\n }\n updateHoverStyle(items, mode, enabled) {\n const prefix = enabled ? 'set' : 'remove';\n let meta, item, i, ilen;\n if (mode === 'dataset') {\n meta = this.getDatasetMeta(items[0].datasetIndex);\n meta.controller['_' + prefix + 'DatasetHoverStyle']();\n }\n for (i = 0, ilen = items.length; i < ilen; ++i) {\n item = items[i];\n const controller = item && this.getDatasetMeta(item.datasetIndex).controller;\n if (controller) {\n controller[prefix + 'HoverStyle'](item.element, item.datasetIndex, item.index);\n }\n }\n }\n getActiveElements() {\n return this._active || [];\n }\n setActiveElements(activeElements) {\n const lastActive = this._active || [];\n const active = activeElements.map(({\n datasetIndex,\n index\n }) => {\n const meta = this.getDatasetMeta(datasetIndex);\n if (!meta) {\n throw new Error('No dataset found at index ' + datasetIndex);\n }\n return {\n datasetIndex,\n element: meta.data[index],\n index\n };\n });\n const changed = !_elementsEqual(active, lastActive);\n if (changed) {\n this._active = active;\n this._lastEvent = null;\n this._updateHoverStyles(active, lastActive);\n }\n }\n notifyPlugins(hook, args, filter) {\n return this._plugins.notify(this, hook, args, filter);\n }\n isPluginEnabled(pluginId) {\n return this._plugins._cache.filter(p => p.plugin.id === pluginId).length === 1;\n }\n _updateHoverStyles(active, lastActive, replay) {\n const hoverOptions = this.options.hover;\n const diff = (a, b) => a.filter(x => !b.some(y => x.datasetIndex === y.datasetIndex && x.index === y.index));\n const deactivated = diff(lastActive, active);\n const activated = replay ? active : diff(active, lastActive);\n if (deactivated.length) {\n this.updateHoverStyle(deactivated, hoverOptions.mode, false);\n }\n if (activated.length && hoverOptions.mode) {\n this.updateHoverStyle(activated, hoverOptions.mode, true);\n }\n }\n _eventHandler(e, replay) {\n const args = {\n event: e,\n replay,\n cancelable: true,\n inChartArea: this.isPointInArea(e)\n };\n const eventFilter = plugin => (plugin.options.events || this.options.events).includes(e.native.type);\n if (this.notifyPlugins('beforeEvent', args, eventFilter) === false) {\n return;\n }\n const changed = this._handleEvent(e, replay, args.inChartArea);\n args.cancelable = false;\n this.notifyPlugins('afterEvent', args, eventFilter);\n if (changed || args.changed) {\n this.render();\n }\n return this;\n }\n _handleEvent(e, replay, inChartArea) {\n const {\n _active: lastActive = [],\n options\n } = this;\n const useFinalPosition = replay;\n const active = this._getActiveElements(e, lastActive, inChartArea, useFinalPosition);\n const isClick = _isClickEvent(e);\n const lastEvent = determineLastEvent(e, this._lastEvent, inChartArea, isClick);\n if (inChartArea) {\n this._lastEvent = null;\n callback(options.onHover, [e, active, this], this);\n if (isClick) {\n callback(options.onClick, [e, active, this], this);\n }\n }\n const changed = !_elementsEqual(active, lastActive);\n if (changed || replay) {\n this._active = active;\n this._updateHoverStyles(active, lastActive, replay);\n }\n this._lastEvent = lastEvent;\n return changed;\n }\n _getActiveElements(e, lastActive, inChartArea, useFinalPosition) {\n if (e.type === 'mouseout') {\n return [];\n }\n if (!inChartArea) {\n return lastActive;\n }\n const hoverOptions = this.options.hover;\n return this.getElementsAtEventForMode(e, hoverOptions.mode, hoverOptions, useFinalPosition);\n }\n }\n return Chart;\n})();\nfunction invalidatePlugins() {\n return each(Chart.instances, chart => chart._plugins.invalidate());\n}\nfunction clipSelf(ctx, element, endAngle) {\n const {\n startAngle,\n x,\n y,\n outerRadius,\n innerRadius,\n options\n } = element;\n const {\n borderWidth,\n borderJoinStyle\n } = options;\n const outerAngleClip = Math.min(borderWidth / outerRadius, _normalizeAngle(startAngle - endAngle));\n ctx.beginPath();\n ctx.arc(x, y, outerRadius - borderWidth / 2, startAngle + outerAngleClip / 2, endAngle - outerAngleClip / 2);\n if (innerRadius > 0) {\n const innerAngleClip = Math.min(borderWidth / innerRadius, _normalizeAngle(startAngle - endAngle));\n ctx.arc(x, y, innerRadius + borderWidth / 2, endAngle - innerAngleClip / 2, startAngle + innerAngleClip / 2, true);\n } else {\n const clipWidth = Math.min(borderWidth / 2, outerRadius * _normalizeAngle(startAngle - endAngle));\n if (borderJoinStyle === 'round') {\n ctx.arc(x, y, clipWidth, endAngle - PI / 2, startAngle + PI / 2, true);\n } else if (borderJoinStyle === 'bevel') {\n const r = 2 * clipWidth * clipWidth;\n const endX = -r * Math.cos(endAngle + PI / 2) + x;\n const endY = -r * Math.sin(endAngle + PI / 2) + y;\n const startX = r * Math.cos(startAngle + PI / 2) + x;\n const startY = r * Math.sin(startAngle + PI / 2) + y;\n ctx.lineTo(endX, endY);\n ctx.lineTo(startX, startY);\n }\n }\n ctx.closePath();\n ctx.moveTo(0, 0);\n ctx.rect(0, 0, ctx.canvas.width, ctx.canvas.height);\n ctx.clip('evenodd');\n}\nfunction clipArc(ctx, element, endAngle) {\n const {\n startAngle,\n pixelMargin,\n x,\n y,\n outerRadius,\n innerRadius\n } = element;\n let angleMargin = pixelMargin / outerRadius;\n // Draw an inner border by clipping the arc and drawing a double-width border\n // Enlarge the clipping arc by 0.33 pixels to eliminate glitches between borders\n ctx.beginPath();\n ctx.arc(x, y, outerRadius, startAngle - angleMargin, endAngle + angleMargin);\n if (innerRadius > pixelMargin) {\n angleMargin = pixelMargin / innerRadius;\n ctx.arc(x, y, innerRadius, endAngle + angleMargin, startAngle - angleMargin, true);\n } else {\n ctx.arc(x, y, pixelMargin, endAngle + HALF_PI, startAngle - HALF_PI);\n }\n ctx.closePath();\n ctx.clip();\n}\nfunction toRadiusCorners(value) {\n return _readValueToProps(value, ['outerStart', 'outerEnd', 'innerStart', 'innerEnd']);\n}\n/**\n * Parse border radius from the provided options\n */\nfunction parseBorderRadius$1(arc, innerRadius, outerRadius, angleDelta) {\n const o = toRadiusCorners(arc.options.borderRadius);\n const halfThickness = (outerRadius - innerRadius) / 2;\n const innerLimit = Math.min(halfThickness, angleDelta * innerRadius / 2);\n // Outer limits are complicated. We want to compute the available angular distance at\n // a radius of outerRadius - borderRadius because for small angular distances, this term limits.\n // We compute at r = outerRadius - borderRadius because this circle defines the center of the border corners.\n //\n // If the borderRadius is large, that value can become negative.\n // This causes the outer borders to lose their radius entirely, which is rather unexpected. To solve that, if borderRadius > outerRadius\n // we know that the thickness term will dominate and compute the limits at that point\n const computeOuterLimit = val => {\n const outerArcLimit = (outerRadius - Math.min(halfThickness, val)) * angleDelta / 2;\n return _limitValue(val, 0, Math.min(halfThickness, outerArcLimit));\n };\n return {\n outerStart: computeOuterLimit(o.outerStart),\n outerEnd: computeOuterLimit(o.outerEnd),\n innerStart: _limitValue(o.innerStart, 0, innerLimit),\n innerEnd: _limitValue(o.innerEnd, 0, innerLimit)\n };\n}\n/**\n * Convert (r, \uD835\uDF03) to (x, y)\n */\nfunction rThetaToXY(r, theta, x, y) {\n return {\n x: x + r * Math.cos(theta),\n y: y + r * Math.sin(theta)\n };\n}\n/**\n * Path the arc, respecting border radius by separating into left and right halves.\n *\n * Start End\n *\n * 1--->a--->2 Outer\n * / \\\n * 8 3\n * | |\n * | |\n * 7 4\n * \\ /\n * 6<---b<---5 Inner\n */\nfunction pathArc(ctx, element, offset, spacing, end, circular) {\n const {\n x,\n y,\n startAngle: start,\n pixelMargin,\n innerRadius: innerR\n } = element;\n const outerRadius = Math.max(element.outerRadius + spacing + offset - pixelMargin, 0);\n const innerRadius = innerR > 0 ? innerR + spacing + offset + pixelMargin : 0;\n let spacingOffset = 0;\n const alpha = end - start;\n if (spacing) {\n // When spacing is present, it is the same for all items\n // So we adjust the start and end angle of the arc such that\n // the distance is the same as it would be without the spacing\n const noSpacingInnerRadius = innerR > 0 ? innerR - spacing : 0;\n const noSpacingOuterRadius = outerRadius > 0 ? outerRadius - spacing : 0;\n const avNogSpacingRadius = (noSpacingInnerRadius + noSpacingOuterRadius) / 2;\n const adjustedAngle = avNogSpacingRadius !== 0 ? alpha * avNogSpacingRadius / (avNogSpacingRadius + spacing) : alpha;\n spacingOffset = (alpha - adjustedAngle) / 2;\n }\n const beta = Math.max(0.001, alpha * outerRadius - offset / PI) / outerRadius;\n const angleOffset = (alpha - beta) / 2;\n const startAngle = start + angleOffset + spacingOffset;\n const endAngle = end - angleOffset - spacingOffset;\n const {\n outerStart,\n outerEnd,\n innerStart,\n innerEnd\n } = parseBorderRadius$1(element, innerRadius, outerRadius, endAngle - startAngle);\n const outerStartAdjustedRadius = outerRadius - outerStart;\n const outerEndAdjustedRadius = outerRadius - outerEnd;\n const outerStartAdjustedAngle = startAngle + outerStart / outerStartAdjustedRadius;\n const outerEndAdjustedAngle = endAngle - outerEnd / outerEndAdjustedRadius;\n const innerStartAdjustedRadius = innerRadius + innerStart;\n const innerEndAdjustedRadius = innerRadius + innerEnd;\n const innerStartAdjustedAngle = startAngle + innerStart / innerStartAdjustedRadius;\n const innerEndAdjustedAngle = endAngle - innerEnd / innerEndAdjustedRadius;\n ctx.beginPath();\n if (circular) {\n // The first arc segments from point 1 to point a to point 2\n const outerMidAdjustedAngle = (outerStartAdjustedAngle + outerEndAdjustedAngle) / 2;\n ctx.arc(x, y, outerRadius, outerStartAdjustedAngle, outerMidAdjustedAngle);\n ctx.arc(x, y, outerRadius, outerMidAdjustedAngle, outerEndAdjustedAngle);\n // The corner segment from point 2 to point 3\n if (outerEnd > 0) {\n const pCenter = rThetaToXY(outerEndAdjustedRadius, outerEndAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, outerEnd, outerEndAdjustedAngle, endAngle + HALF_PI);\n }\n // The line from point 3 to point 4\n const p4 = rThetaToXY(innerEndAdjustedRadius, endAngle, x, y);\n ctx.lineTo(p4.x, p4.y);\n // The corner segment from point 4 to point 5\n if (innerEnd > 0) {\n const pCenter = rThetaToXY(innerEndAdjustedRadius, innerEndAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, innerEnd, endAngle + HALF_PI, innerEndAdjustedAngle + Math.PI);\n }\n // The inner arc from point 5 to point b to point 6\n const innerMidAdjustedAngle = (endAngle - innerEnd / innerRadius + (startAngle + innerStart / innerRadius)) / 2;\n ctx.arc(x, y, innerRadius, endAngle - innerEnd / innerRadius, innerMidAdjustedAngle, true);\n ctx.arc(x, y, innerRadius, innerMidAdjustedAngle, startAngle + innerStart / innerRadius, true);\n // The corner segment from point 6 to point 7\n if (innerStart > 0) {\n const pCenter = rThetaToXY(innerStartAdjustedRadius, innerStartAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, innerStart, innerStartAdjustedAngle + Math.PI, startAngle - HALF_PI);\n }\n // The line from point 7 to point 8\n const p8 = rThetaToXY(outerStartAdjustedRadius, startAngle, x, y);\n ctx.lineTo(p8.x, p8.y);\n // The corner segment from point 8 to point 1\n if (outerStart > 0) {\n const pCenter = rThetaToXY(outerStartAdjustedRadius, outerStartAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, outerStart, startAngle - HALF_PI, outerStartAdjustedAngle);\n }\n } else {\n ctx.moveTo(x, y);\n const outerStartX = Math.cos(outerStartAdjustedAngle) * outerRadius + x;\n const outerStartY = Math.sin(outerStartAdjustedAngle) * outerRadius + y;\n ctx.lineTo(outerStartX, outerStartY);\n const outerEndX = Math.cos(outerEndAdjustedAngle) * outerRadius + x;\n const outerEndY = Math.sin(outerEndAdjustedAngle) * outerRadius + y;\n ctx.lineTo(outerEndX, outerEndY);\n }\n ctx.closePath();\n}\nfunction drawArc(ctx, element, offset, spacing, circular) {\n const {\n fullCircles,\n startAngle,\n circumference\n } = element;\n let endAngle = element.endAngle;\n if (fullCircles) {\n pathArc(ctx, element, offset, spacing, endAngle, circular);\n for (let i = 0; i < fullCircles; ++i) {\n ctx.fill();\n }\n if (!isNaN(circumference)) {\n endAngle = startAngle + (circumference % TAU || TAU);\n }\n }\n pathArc(ctx, element, offset, spacing, endAngle, circular);\n ctx.fill();\n return endAngle;\n}\nfunction drawBorder(ctx, element, offset, spacing, circular) {\n const {\n fullCircles,\n startAngle,\n circumference,\n options\n } = element;\n const {\n borderWidth,\n borderJoinStyle,\n borderDash,\n borderDashOffset,\n borderRadius\n } = options;\n const inner = options.borderAlign === 'inner';\n if (!borderWidth) {\n return;\n }\n ctx.setLineDash(borderDash || []);\n ctx.lineDashOffset = borderDashOffset;\n if (inner) {\n ctx.lineWidth = borderWidth * 2;\n ctx.lineJoin = borderJoinStyle || 'round';\n } else {\n ctx.lineWidth = borderWidth;\n ctx.lineJoin = borderJoinStyle || 'bevel';\n }\n let endAngle = element.endAngle;\n if (fullCircles) {\n pathArc(ctx, element, offset, spacing, endAngle, circular);\n for (let i = 0; i < fullCircles; ++i) {\n ctx.stroke();\n }\n if (!isNaN(circumference)) {\n endAngle = startAngle + (circumference % TAU || TAU);\n }\n }\n if (inner) {\n clipArc(ctx, element, endAngle);\n }\n if (options.selfJoin && endAngle - startAngle >= PI && borderRadius === 0 && borderJoinStyle !== 'miter') {\n clipSelf(ctx, element, endAngle);\n }\n if (!fullCircles) {\n pathArc(ctx, element, offset, spacing, endAngle, circular);\n ctx.stroke();\n }\n}\nclass ArcElement extends Element {\n static id = 'arc';\n static defaults = {\n borderAlign: 'center',\n borderColor: '#fff',\n borderDash: [],\n borderDashOffset: 0,\n borderJoinStyle: undefined,\n borderRadius: 0,\n borderWidth: 2,\n offset: 0,\n spacing: 0,\n angle: undefined,\n circular: true,\n selfJoin: false\n };\n static defaultRoutes = {\n backgroundColor: 'backgroundColor'\n };\n static descriptors = {\n _scriptable: true,\n _indexable: name => name !== 'borderDash'\n };\n circumference;\n endAngle;\n fullCircles;\n innerRadius;\n outerRadius;\n pixelMargin;\n startAngle;\n constructor(cfg) {\n super();\n this.options = undefined;\n this.circumference = undefined;\n this.startAngle = undefined;\n this.endAngle = undefined;\n this.innerRadius = undefined;\n this.outerRadius = undefined;\n this.pixelMargin = 0;\n this.fullCircles = 0;\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n inRange(chartX, chartY, useFinalPosition) {\n const point = this.getProps(['x', 'y'], useFinalPosition);\n const {\n angle,\n distance\n } = getAngleFromPoint(point, {\n x: chartX,\n y: chartY\n });\n const {\n startAngle,\n endAngle,\n innerRadius,\n outerRadius,\n circumference\n } = this.getProps(['startAngle', 'endAngle', 'innerRadius', 'outerRadius', 'circumference'], useFinalPosition);\n const rAdjust = (this.options.spacing + this.options.borderWidth) / 2;\n const _circumference = valueOrDefault(circumference, endAngle - startAngle);\n const nonZeroBetween = _angleBetween(angle, startAngle, endAngle) && startAngle !== endAngle;\n const betweenAngles = _circumference >= TAU || nonZeroBetween;\n const withinRadius = _isBetween(distance, innerRadius + rAdjust, outerRadius + rAdjust);\n return betweenAngles && withinRadius;\n }\n getCenterPoint(useFinalPosition) {\n const {\n x,\n y,\n startAngle,\n endAngle,\n innerRadius,\n outerRadius\n } = this.getProps(['x', 'y', 'startAngle', 'endAngle', 'innerRadius', 'outerRadius'], useFinalPosition);\n const {\n offset,\n spacing\n } = this.options;\n const halfAngle = (startAngle + endAngle) / 2;\n const halfRadius = (innerRadius + outerRadius + spacing + offset) / 2;\n return {\n x: x + Math.cos(halfAngle) * halfRadius,\n y: y + Math.sin(halfAngle) * halfRadius\n };\n }\n tooltipPosition(useFinalPosition) {\n return this.getCenterPoint(useFinalPosition);\n }\n draw(ctx) {\n const {\n options,\n circumference\n } = this;\n const offset = (options.offset || 0) / 4;\n const spacing = (options.spacing || 0) / 2;\n const circular = options.circular;\n this.pixelMargin = options.borderAlign === 'inner' ? 0.33 : 0;\n this.fullCircles = circumference > TAU ? Math.floor(circumference / TAU) : 0;\n if (circumference === 0 || this.innerRadius < 0 || this.outerRadius < 0) {\n return;\n }\n ctx.save();\n const halfAngle = (this.startAngle + this.endAngle) / 2;\n ctx.translate(Math.cos(halfAngle) * offset, Math.sin(halfAngle) * offset);\n const fix = 1 - Math.sin(Math.min(PI, circumference || 0));\n const radiusOffset = offset * fix;\n ctx.fillStyle = options.backgroundColor;\n ctx.strokeStyle = options.borderColor;\n drawArc(ctx, this, radiusOffset, spacing, circular);\n drawBorder(ctx, this, radiusOffset, spacing, circular);\n ctx.restore();\n }\n}\nfunction setStyle(ctx, options, style = options) {\n ctx.lineCap = valueOrDefault(style.borderCapStyle, options.borderCapStyle);\n ctx.setLineDash(valueOrDefault(style.borderDash, options.borderDash));\n ctx.lineDashOffset = valueOrDefault(style.borderDashOffset, options.borderDashOffset);\n ctx.lineJoin = valueOrDefault(style.borderJoinStyle, options.borderJoinStyle);\n ctx.lineWidth = valueOrDefault(style.borderWidth, options.borderWidth);\n ctx.strokeStyle = valueOrDefault(style.borderColor, options.borderColor);\n}\nfunction lineTo(ctx, previous, target) {\n ctx.lineTo(target.x, target.y);\n}\nfunction getLineMethod(options) {\n if (options.stepped) {\n return _steppedLineTo;\n }\n if (options.tension || options.cubicInterpolationMode === 'monotone') {\n return _bezierCurveTo;\n }\n return lineTo;\n}\nfunction pathVars(points, segment, params = {}) {\n const count = points.length;\n const {\n start: paramsStart = 0,\n end: paramsEnd = count - 1\n } = params;\n const {\n start: segmentStart,\n end: segmentEnd\n } = segment;\n const start = Math.max(paramsStart, segmentStart);\n const end = Math.min(paramsEnd, segmentEnd);\n const outside = paramsStart < segmentStart && paramsEnd < segmentStart || paramsStart > segmentEnd && paramsEnd > segmentEnd;\n return {\n count,\n start,\n loop: segment.loop,\n ilen: end < start && !outside ? count + end - start : end - start\n };\n}\nfunction pathSegment(ctx, line, segment, params) {\n const {\n points,\n options\n } = line;\n const {\n count,\n start,\n loop,\n ilen\n } = pathVars(points, segment, params);\n const lineMethod = getLineMethod(options);\n let {\n move = true,\n reverse\n } = params || {};\n let i, point, prev;\n for (i = 0; i <= ilen; ++i) {\n point = points[(start + (reverse ? ilen - i : i)) % count];\n if (point.skip) {\n continue;\n } else if (move) {\n ctx.moveTo(point.x, point.y);\n move = false;\n } else {\n lineMethod(ctx, prev, point, reverse, options.stepped);\n }\n prev = point;\n }\n if (loop) {\n point = points[(start + (reverse ? ilen : 0)) % count];\n lineMethod(ctx, prev, point, reverse, options.stepped);\n }\n return !!loop;\n}\nfunction fastPathSegment(ctx, line, segment, params) {\n const points = line.points;\n const {\n count,\n start,\n ilen\n } = pathVars(points, segment, params);\n const {\n move = true,\n reverse\n } = params || {};\n let avgX = 0;\n let countX = 0;\n let i, point, prevX, minY, maxY, lastY;\n const pointIndex = index => (start + (reverse ? ilen - index : index)) % count;\n const drawX = () => {\n if (minY !== maxY) {\n ctx.lineTo(avgX, maxY);\n ctx.lineTo(avgX, minY);\n ctx.lineTo(avgX, lastY);\n }\n };\n if (move) {\n point = points[pointIndex(0)];\n ctx.moveTo(point.x, point.y);\n }\n for (i = 0; i <= ilen; ++i) {\n point = points[pointIndex(i)];\n if (point.skip) {\n continue;\n }\n const x = point.x;\n const y = point.y;\n const truncX = x | 0;\n if (truncX === prevX) {\n if (y < minY) {\n minY = y;\n } else if (y > maxY) {\n maxY = y;\n }\n avgX = (countX * avgX + x) / ++countX;\n } else {\n drawX();\n ctx.lineTo(x, y);\n prevX = truncX;\n countX = 0;\n minY = maxY = y;\n }\n lastY = y;\n }\n drawX();\n}\nfunction _getSegmentMethod(line) {\n const opts = line.options;\n const borderDash = opts.borderDash && opts.borderDash.length;\n const useFastPath = !line._decimated && !line._loop && !opts.tension && opts.cubicInterpolationMode !== 'monotone' && !opts.stepped && !borderDash;\n return useFastPath ? fastPathSegment : pathSegment;\n}\nfunction _getInterpolationMethod(options) {\n if (options.stepped) {\n return _steppedInterpolation;\n }\n if (options.tension || options.cubicInterpolationMode === 'monotone') {\n return _bezierInterpolation;\n }\n return _pointInLine;\n}\nfunction strokePathWithCache(ctx, line, start, count) {\n let path = line._path;\n if (!path) {\n path = line._path = new Path2D();\n if (line.path(path, start, count)) {\n path.closePath();\n }\n }\n setStyle(ctx, line.options);\n ctx.stroke(path);\n}\nfunction strokePathDirect(ctx, line, start, count) {\n const {\n segments,\n options\n } = line;\n const segmentMethod = _getSegmentMethod(line);\n for (const segment of segments) {\n setStyle(ctx, options, segment.style);\n ctx.beginPath();\n if (segmentMethod(ctx, line, segment, {\n start,\n end: start + count - 1\n })) {\n ctx.closePath();\n }\n ctx.stroke();\n }\n}\nconst usePath2D = typeof Path2D === 'function';\nfunction draw(ctx, line, start, count) {\n if (usePath2D && !line.options.segment) {\n strokePathWithCache(ctx, line, start, count);\n } else {\n strokePathDirect(ctx, line, start, count);\n }\n}\nlet LineElement = /*#__PURE__*/(() => {\n class LineElement extends Element {\n static id = 'line';\n static defaults = {\n borderCapStyle: 'butt',\n borderDash: [],\n borderDashOffset: 0,\n borderJoinStyle: 'miter',\n borderWidth: 3,\n capBezierPoints: true,\n cubicInterpolationMode: 'default',\n fill: false,\n spanGaps: false,\n stepped: false,\n tension: 0\n };\n static defaultRoutes = {\n backgroundColor: 'backgroundColor',\n borderColor: 'borderColor'\n };\n static descriptors = {\n _scriptable: true,\n _indexable: name => name !== 'borderDash' && name !== 'fill'\n };\n constructor(cfg) {\n super();\n this.animated = true;\n this.options = undefined;\n this._chart = undefined;\n this._loop = undefined;\n this._fullLoop = undefined;\n this._path = undefined;\n this._points = undefined;\n this._segments = undefined;\n this._decimated = false;\n this._pointsUpdated = false;\n this._datasetIndex = undefined;\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n updateControlPoints(chartArea, indexAxis) {\n const options = this.options;\n if ((options.tension || options.cubicInterpolationMode === 'monotone') && !options.stepped && !this._pointsUpdated) {\n const loop = options.spanGaps ? this._loop : this._fullLoop;\n _updateBezierControlPoints(this._points, options, chartArea, loop, indexAxis);\n this._pointsUpdated = true;\n }\n }\n set points(points) {\n this._points = points;\n delete this._segments;\n delete this._path;\n this._pointsUpdated = false;\n }\n get points() {\n return this._points;\n }\n get segments() {\n return this._segments || (this._segments = _computeSegments(this, this.options.segment));\n }\n first() {\n const segments = this.segments;\n const points = this.points;\n return segments.length && points[segments[0].start];\n }\n last() {\n const segments = this.segments;\n const points = this.points;\n const count = segments.length;\n return count && points[segments[count - 1].end];\n }\n interpolate(point, property) {\n const options = this.options;\n const value = point[property];\n const points = this.points;\n const segments = _boundSegments(this, {\n property,\n start: value,\n end: value\n });\n if (!segments.length) {\n return;\n }\n const result = [];\n const _interpolate = _getInterpolationMethod(options);\n let i, ilen;\n for (i = 0, ilen = segments.length; i < ilen; ++i) {\n const {\n start,\n end\n } = segments[i];\n const p1 = points[start];\n const p2 = points[end];\n if (p1 === p2) {\n result.push(p1);\n continue;\n }\n const t = Math.abs((value - p1[property]) / (p2[property] - p1[property]));\n const interpolated = _interpolate(p1, p2, t, options.stepped);\n interpolated[property] = point[property];\n result.push(interpolated);\n }\n return result.length === 1 ? result[0] : result;\n }\n pathSegment(ctx, segment, params) {\n const segmentMethod = _getSegmentMethod(this);\n return segmentMethod(ctx, this, segment, params);\n }\n path(ctx, start, count) {\n const segments = this.segments;\n const segmentMethod = _getSegmentMethod(this);\n let loop = this._loop;\n start = start || 0;\n count = count || this.points.length - start;\n for (const segment of segments) {\n loop &= segmentMethod(ctx, this, segment, {\n start,\n end: start + count - 1\n });\n }\n return !!loop;\n }\n draw(ctx, chartArea, start, count) {\n const options = this.options || {};\n const points = this.points || [];\n if (points.length && options.borderWidth) {\n ctx.save();\n draw(ctx, this, start, count);\n ctx.restore();\n }\n if (this.animated) {\n this._pointsUpdated = false;\n this._path = undefined;\n }\n }\n }\n return LineElement;\n})();\nfunction inRange$1(el, pos, axis, useFinalPosition) {\n const options = el.options;\n const {\n [axis]: value\n } = el.getProps([axis], useFinalPosition);\n return Math.abs(pos - value) < options.radius + options.hitRadius;\n}\nlet PointElement = /*#__PURE__*/(() => {\n class PointElement extends Element {\n static id = 'point';\n parsed;\n skip;\n stop;\n /**\n * @type {any}\n */\n static defaults = {\n borderWidth: 1,\n hitRadius: 1,\n hoverBorderWidth: 1,\n hoverRadius: 4,\n pointStyle: 'circle',\n radius: 3,\n rotation: 0\n };\n /**\n * @type {any}\n */\n static defaultRoutes = {\n backgroundColor: 'backgroundColor',\n borderColor: 'borderColor'\n };\n constructor(cfg) {\n super();\n this.options = undefined;\n this.parsed = undefined;\n this.skip = undefined;\n this.stop = undefined;\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n inRange(mouseX, mouseY, useFinalPosition) {\n const options = this.options;\n const {\n x,\n y\n } = this.getProps(['x', 'y'], useFinalPosition);\n return Math.pow(mouseX - x, 2) + Math.pow(mouseY - y, 2) < Math.pow(options.hitRadius + options.radius, 2);\n }\n inXRange(mouseX, useFinalPosition) {\n return inRange$1(this, mouseX, 'x', useFinalPosition);\n }\n inYRange(mouseY, useFinalPosition) {\n return inRange$1(this, mouseY, 'y', useFinalPosition);\n }\n getCenterPoint(useFinalPosition) {\n const {\n x,\n y\n } = this.getProps(['x', 'y'], useFinalPosition);\n return {\n x,\n y\n };\n }\n size(options) {\n options = options || this.options || {};\n let radius = options.radius || 0;\n radius = Math.max(radius, radius && options.hoverRadius || 0);\n const borderWidth = radius && options.borderWidth || 0;\n return (radius + borderWidth) * 2;\n }\n draw(ctx, area) {\n const options = this.options;\n if (this.skip || options.radius < 0.1 || !_isPointInArea(this, area, this.size(options) / 2)) {\n return;\n }\n ctx.strokeStyle = options.borderColor;\n ctx.lineWidth = options.borderWidth;\n ctx.fillStyle = options.backgroundColor;\n drawPoint(ctx, options, this.x, this.y);\n }\n getRange() {\n const options = this.options || {};\n // @ts-expect-error Fallbacks should never be hit in practice\n return options.radius + options.hitRadius;\n }\n }\n return PointElement;\n})();\nfunction getBarBounds(bar, useFinalPosition) {\n const {\n x,\n y,\n base,\n width,\n height\n } = bar.getProps(['x', 'y', 'base', 'width', 'height'], useFinalPosition);\n let left, right, top, bottom, half;\n if (bar.horizontal) {\n half = height / 2;\n left = Math.min(x, base);\n right = Math.max(x, base);\n top = y - half;\n bottom = y + half;\n } else {\n half = width / 2;\n left = x - half;\n right = x + half;\n top = Math.min(y, base);\n bottom = Math.max(y, base);\n }\n return {\n left,\n top,\n right,\n bottom\n };\n}\nfunction skipOrLimit(skip, value, min, max) {\n return skip ? 0 : _limitValue(value, min, max);\n}\nfunction parseBorderWidth(bar, maxW, maxH) {\n const value = bar.options.borderWidth;\n const skip = bar.borderSkipped;\n const o = toTRBL(value);\n return {\n t: skipOrLimit(skip.top, o.top, 0, maxH),\n r: skipOrLimit(skip.right, o.right, 0, maxW),\n b: skipOrLimit(skip.bottom, o.bottom, 0, maxH),\n l: skipOrLimit(skip.left, o.left, 0, maxW)\n };\n}\nfunction parseBorderRadius(bar, maxW, maxH) {\n const {\n enableBorderRadius\n } = bar.getProps(['enableBorderRadius']);\n const value = bar.options.borderRadius;\n const o = toTRBLCorners(value);\n const maxR = Math.min(maxW, maxH);\n const skip = bar.borderSkipped;\n const enableBorder = enableBorderRadius || isObject(value);\n return {\n topLeft: skipOrLimit(!enableBorder || skip.top || skip.left, o.topLeft, 0, maxR),\n topRight: skipOrLimit(!enableBorder || skip.top || skip.right, o.topRight, 0, maxR),\n bottomLeft: skipOrLimit(!enableBorder || skip.bottom || skip.left, o.bottomLeft, 0, maxR),\n bottomRight: skipOrLimit(!enableBorder || skip.bottom || skip.right, o.bottomRight, 0, maxR)\n };\n}\nfunction boundingRects(bar) {\n const bounds = getBarBounds(bar);\n const width = bounds.right - bounds.left;\n const height = bounds.bottom - bounds.top;\n const border = parseBorderWidth(bar, width / 2, height / 2);\n const radius = parseBorderRadius(bar, width / 2, height / 2);\n return {\n outer: {\n x: bounds.left,\n y: bounds.top,\n w: width,\n h: height,\n radius\n },\n inner: {\n x: bounds.left + border.l,\n y: bounds.top + border.t,\n w: width - border.l - border.r,\n h: height - border.t - border.b,\n radius: {\n topLeft: Math.max(0, radius.topLeft - Math.max(border.t, border.l)),\n topRight: Math.max(0, radius.topRight - Math.max(border.t, border.r)),\n bottomLeft: Math.max(0, radius.bottomLeft - Math.max(border.b, border.l)),\n bottomRight: Math.max(0, radius.bottomRight - Math.max(border.b, border.r))\n }\n }\n };\n}\nfunction inRange(bar, x, y, useFinalPosition) {\n const skipX = x === null;\n const skipY = y === null;\n const skipBoth = skipX && skipY;\n const bounds = bar && !skipBoth && getBarBounds(bar, useFinalPosition);\n return bounds && (skipX || _isBetween(x, bounds.left, bounds.right)) && (skipY || _isBetween(y, bounds.top, bounds.bottom));\n}\nfunction hasRadius(radius) {\n return radius.topLeft || radius.topRight || radius.bottomLeft || radius.bottomRight;\n}\nfunction addNormalRectPath(ctx, rect) {\n ctx.rect(rect.x, rect.y, rect.w, rect.h);\n}\nfunction inflateRect(rect, amount, refRect = {}) {\n const x = rect.x !== refRect.x ? -amount : 0;\n const y = rect.y !== refRect.y ? -amount : 0;\n const w = (rect.x + rect.w !== refRect.x + refRect.w ? amount : 0) - x;\n const h = (rect.y + rect.h !== refRect.y + refRect.h ? amount : 0) - y;\n return {\n x: rect.x + x,\n y: rect.y + y,\n w: rect.w + w,\n h: rect.h + h,\n radius: rect.radius\n };\n}\nclass BarElement extends Element {\n static id = 'bar';\n static defaults = {\n borderSkipped: 'start',\n borderWidth: 0,\n borderRadius: 0,\n inflateAmount: 'auto',\n pointStyle: undefined\n };\n static defaultRoutes = {\n backgroundColor: 'backgroundColor',\n borderColor: 'borderColor'\n };\n constructor(cfg) {\n super();\n this.options = undefined;\n this.horizontal = undefined;\n this.base = undefined;\n this.width = undefined;\n this.height = undefined;\n this.inflateAmount = undefined;\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n draw(ctx) {\n const {\n inflateAmount,\n options: {\n borderColor,\n backgroundColor\n }\n } = this;\n const {\n inner,\n outer\n } = boundingRects(this);\n const addRectPath = hasRadius(outer.radius) ? addRoundedRectPath : addNormalRectPath;\n ctx.save();\n if (outer.w !== inner.w || outer.h !== inner.h) {\n ctx.beginPath();\n addRectPath(ctx, inflateRect(outer, inflateAmount, inner));\n ctx.clip();\n addRectPath(ctx, inflateRect(inner, -inflateAmount, outer));\n ctx.fillStyle = borderColor;\n ctx.fill('evenodd');\n }\n ctx.beginPath();\n addRectPath(ctx, inflateRect(inner, inflateAmount));\n ctx.fillStyle = backgroundColor;\n ctx.fill();\n ctx.restore();\n }\n inRange(mouseX, mouseY, useFinalPosition) {\n return inRange(this, mouseX, mouseY, useFinalPosition);\n }\n inXRange(mouseX, useFinalPosition) {\n return inRange(this, mouseX, null, useFinalPosition);\n }\n inYRange(mouseY, useFinalPosition) {\n return inRange(this, null, mouseY, useFinalPosition);\n }\n getCenterPoint(useFinalPosition) {\n const {\n x,\n y,\n base,\n horizontal\n } = this.getProps(['x', 'y', 'base', 'horizontal'], useFinalPosition);\n return {\n x: horizontal ? (x + base) / 2 : x,\n y: horizontal ? y : (y + base) / 2\n };\n }\n getRange(axis) {\n return axis === 'x' ? this.width / 2 : this.height / 2;\n }\n}\nvar elements = /*#__PURE__*/Object.freeze({\n __proto__: null,\n ArcElement: ArcElement,\n BarElement: BarElement,\n LineElement: LineElement,\n PointElement: PointElement\n});\nconst BORDER_COLORS = ['rgb(54, 162, 235)', 'rgb(255, 99, 132)', 'rgb(255, 159, 64)', 'rgb(255, 205, 86)', 'rgb(75, 192, 192)', 'rgb(153, 102, 255)', 'rgb(201, 203, 207)' // grey\n];\n// Border colors with 50% transparency\nconst BACKGROUND_COLORS = /* #__PURE__ */BORDER_COLORS.map(color => color.replace('rgb(', 'rgba(').replace(')', ', 0.5)'));\nfunction getBorderColor(i) {\n return BORDER_COLORS[i % BORDER_COLORS.length];\n}\nfunction getBackgroundColor(i) {\n return BACKGROUND_COLORS[i % BACKGROUND_COLORS.length];\n}\nfunction colorizeDefaultDataset(dataset, i) {\n dataset.borderColor = getBorderColor(i);\n dataset.backgroundColor = getBackgroundColor(i);\n return ++i;\n}\nfunction colorizeDoughnutDataset(dataset, i) {\n dataset.backgroundColor = dataset.data.map(() => getBorderColor(i++));\n return i;\n}\nfunction colorizePolarAreaDataset(dataset, i) {\n dataset.backgroundColor = dataset.data.map(() => getBackgroundColor(i++));\n return i;\n}\nfunction getColorizer(chart) {\n let i = 0;\n return (dataset, datasetIndex) => {\n const controller = chart.getDatasetMeta(datasetIndex).controller;\n if (controller instanceof DoughnutController) {\n i = colorizeDoughnutDataset(dataset, i);\n } else if (controller instanceof PolarAreaController) {\n i = colorizePolarAreaDataset(dataset, i);\n } else if (controller) {\n i = colorizeDefaultDataset(dataset, i);\n }\n };\n}\nfunction containsColorsDefinitions(descriptors) {\n let k;\n for (k in descriptors) {\n if (descriptors[k].borderColor || descriptors[k].backgroundColor) {\n return true;\n }\n }\n return false;\n}\nfunction containsColorsDefinition(descriptor) {\n return descriptor && (descriptor.borderColor || descriptor.backgroundColor);\n}\nfunction containsDefaultColorsDefenitions() {\n return defaults.borderColor !== 'rgba(0,0,0,0.1)' || defaults.backgroundColor !== 'rgba(0,0,0,0.1)';\n}\nvar plugin_colors = {\n id: 'colors',\n defaults: {\n enabled: true,\n forceOverride: false\n },\n beforeLayout(chart, _args, options) {\n if (!options.enabled) {\n return;\n }\n const {\n data: {\n datasets\n },\n options: chartOptions\n } = chart.config;\n const {\n elements\n } = chartOptions;\n const containsColorDefenition = containsColorsDefinitions(datasets) || containsColorsDefinition(chartOptions) || elements && containsColorsDefinitions(elements) || containsDefaultColorsDefenitions();\n if (!options.forceOverride && containsColorDefenition) {\n return;\n }\n const colorizer = getColorizer(chart);\n datasets.forEach(colorizer);\n }\n};\nfunction lttbDecimation(data, start, count, availableWidth, options) {\n const samples = options.samples || availableWidth;\n if (samples >= count) {\n return data.slice(start, start + count);\n }\n const decimated = [];\n const bucketWidth = (count - 2) / (samples - 2);\n let sampledIndex = 0;\n const endIndex = start + count - 1;\n let a = start;\n let i, maxAreaPoint, maxArea, area, nextA;\n decimated[sampledIndex++] = data[a];\n for (i = 0; i < samples - 2; i++) {\n let avgX = 0;\n let avgY = 0;\n let j;\n const avgRangeStart = Math.floor((i + 1) * bucketWidth) + 1 + start;\n const avgRangeEnd = Math.min(Math.floor((i + 2) * bucketWidth) + 1, count) + start;\n const avgRangeLength = avgRangeEnd - avgRangeStart;\n for (j = avgRangeStart; j < avgRangeEnd; j++) {\n avgX += data[j].x;\n avgY += data[j].y;\n }\n avgX /= avgRangeLength;\n avgY /= avgRangeLength;\n const rangeOffs = Math.floor(i * bucketWidth) + 1 + start;\n const rangeTo = Math.min(Math.floor((i + 1) * bucketWidth) + 1, count) + start;\n const {\n x: pointAx,\n y: pointAy\n } = data[a];\n maxArea = area = -1;\n for (j = rangeOffs; j < rangeTo; j++) {\n area = 0.5 * Math.abs((pointAx - avgX) * (data[j].y - pointAy) - (pointAx - data[j].x) * (avgY - pointAy));\n if (area > maxArea) {\n maxArea = area;\n maxAreaPoint = data[j];\n nextA = j;\n }\n }\n decimated[sampledIndex++] = maxAreaPoint;\n a = nextA;\n }\n decimated[sampledIndex++] = data[endIndex];\n return decimated;\n}\nfunction minMaxDecimation(data, start, count, availableWidth) {\n let avgX = 0;\n let countX = 0;\n let i, point, x, y, prevX, minIndex, maxIndex, startIndex, minY, maxY;\n const decimated = [];\n const endIndex = start + count - 1;\n const xMin = data[start].x;\n const xMax = data[endIndex].x;\n const dx = xMax - xMin;\n for (i = start; i < start + count; ++i) {\n point = data[i];\n x = (point.x - xMin) / dx * availableWidth;\n y = point.y;\n const truncX = x | 0;\n if (truncX === prevX) {\n if (y < minY) {\n minY = y;\n minIndex = i;\n } else if (y > maxY) {\n maxY = y;\n maxIndex = i;\n }\n avgX = (countX * avgX + point.x) / ++countX;\n } else {\n const lastIndex = i - 1;\n if (!isNullOrUndef(minIndex) && !isNullOrUndef(maxIndex)) {\n const intermediateIndex1 = Math.min(minIndex, maxIndex);\n const intermediateIndex2 = Math.max(minIndex, maxIndex);\n if (intermediateIndex1 !== startIndex && intermediateIndex1 !== lastIndex) {\n decimated.push({\n ...data[intermediateIndex1],\n x: avgX\n });\n }\n if (intermediateIndex2 !== startIndex && intermediateIndex2 !== lastIndex) {\n decimated.push({\n ...data[intermediateIndex2],\n x: avgX\n });\n }\n }\n if (i > 0 && lastIndex !== startIndex) {\n decimated.push(data[lastIndex]);\n }\n decimated.push(point);\n prevX = truncX;\n countX = 0;\n minY = maxY = y;\n minIndex = maxIndex = startIndex = i;\n }\n }\n return decimated;\n}\nfunction cleanDecimatedDataset(dataset) {\n if (dataset._decimated) {\n const data = dataset._data;\n delete dataset._decimated;\n delete dataset._data;\n Object.defineProperty(dataset, 'data', {\n configurable: true,\n enumerable: true,\n writable: true,\n value: data\n });\n }\n}\nfunction cleanDecimatedData(chart) {\n chart.data.datasets.forEach(dataset => {\n cleanDecimatedDataset(dataset);\n });\n}\nfunction getStartAndCountOfVisiblePointsSimplified(meta, points) {\n const pointCount = points.length;\n let start = 0;\n let count;\n const {\n iScale\n } = meta;\n const {\n min,\n max,\n minDefined,\n maxDefined\n } = iScale.getUserBounds();\n if (minDefined) {\n start = _limitValue(_lookupByKey(points, iScale.axis, min).lo, 0, pointCount - 1);\n }\n if (maxDefined) {\n count = _limitValue(_lookupByKey(points, iScale.axis, max).hi + 1, start, pointCount) - start;\n } else {\n count = pointCount - start;\n }\n return {\n start,\n count\n };\n}\nvar plugin_decimation = {\n id: 'decimation',\n defaults: {\n algorithm: 'min-max',\n enabled: false\n },\n beforeElementsUpdate: (chart, args, options) => {\n if (!options.enabled) {\n cleanDecimatedData(chart);\n return;\n }\n const availableWidth = chart.width;\n chart.data.datasets.forEach((dataset, datasetIndex) => {\n const {\n _data,\n indexAxis\n } = dataset;\n const meta = chart.getDatasetMeta(datasetIndex);\n const data = _data || dataset.data;\n if (resolve([indexAxis, chart.options.indexAxis]) === 'y') {\n return;\n }\n if (!meta.controller.supportsDecimation) {\n return;\n }\n const xAxis = chart.scales[meta.xAxisID];\n if (xAxis.type !== 'linear' && xAxis.type !== 'time') {\n return;\n }\n if (chart.options.parsing) {\n return;\n }\n let {\n start,\n count\n } = getStartAndCountOfVisiblePointsSimplified(meta, data);\n const threshold = options.threshold || 4 * availableWidth;\n if (count <= threshold) {\n cleanDecimatedDataset(dataset);\n return;\n }\n if (isNullOrUndef(_data)) {\n dataset._data = data;\n delete dataset.data;\n Object.defineProperty(dataset, 'data', {\n configurable: true,\n enumerable: true,\n get: function () {\n return this._decimated;\n },\n set: function (d) {\n this._data = d;\n }\n });\n }\n let decimated;\n switch (options.algorithm) {\n case 'lttb':\n decimated = lttbDecimation(data, start, count, availableWidth, options);\n break;\n case 'min-max':\n decimated = minMaxDecimation(data, start, count, availableWidth);\n break;\n default:\n throw new Error(`Unsupported decimation algorithm '${options.algorithm}'`);\n }\n dataset._decimated = decimated;\n });\n },\n destroy(chart) {\n cleanDecimatedData(chart);\n }\n};\nfunction _segments(line, target, property) {\n const segments = line.segments;\n const points = line.points;\n const tpoints = target.points;\n const parts = [];\n for (const segment of segments) {\n let {\n start,\n end\n } = segment;\n end = _findSegmentEnd(start, end, points);\n const bounds = _getBounds(property, points[start], points[end], segment.loop);\n if (!target.segments) {\n parts.push({\n source: segment,\n target: bounds,\n start: points[start],\n end: points[end]\n });\n continue;\n }\n const targetSegments = _boundSegments(target, bounds);\n for (const tgt of targetSegments) {\n const subBounds = _getBounds(property, tpoints[tgt.start], tpoints[tgt.end], tgt.loop);\n const fillSources = _boundSegment(segment, points, subBounds);\n for (const fillSource of fillSources) {\n parts.push({\n source: fillSource,\n target: tgt,\n start: {\n [property]: _getEdge(bounds, subBounds, 'start', Math.max)\n },\n end: {\n [property]: _getEdge(bounds, subBounds, 'end', Math.min)\n }\n });\n }\n }\n }\n return parts;\n}\nfunction _getBounds(property, first, last, loop) {\n if (loop) {\n return;\n }\n let start = first[property];\n let end = last[property];\n if (property === 'angle') {\n start = _normalizeAngle(start);\n end = _normalizeAngle(end);\n }\n return {\n property,\n start,\n end\n };\n}\nfunction _pointsFromSegments(boundary, line) {\n const {\n x = null,\n y = null\n } = boundary || {};\n const linePoints = line.points;\n const points = [];\n line.segments.forEach(({\n start,\n end\n }) => {\n end = _findSegmentEnd(start, end, linePoints);\n const first = linePoints[start];\n const last = linePoints[end];\n if (y !== null) {\n points.push({\n x: first.x,\n y\n });\n points.push({\n x: last.x,\n y\n });\n } else if (x !== null) {\n points.push({\n x,\n y: first.y\n });\n points.push({\n x,\n y: last.y\n });\n }\n });\n return points;\n}\nfunction _findSegmentEnd(start, end, points) {\n for (; end > start; end--) {\n const point = points[end];\n if (!isNaN(point.x) && !isNaN(point.y)) {\n break;\n }\n }\n return end;\n}\nfunction _getEdge(a, b, prop, fn) {\n if (a && b) {\n return fn(a[prop], b[prop]);\n }\n return a ? a[prop] : b ? b[prop] : 0;\n}\nfunction _createBoundaryLine(boundary, line) {\n let points = [];\n let _loop = false;\n if (isArray(boundary)) {\n _loop = true;\n points = boundary;\n } else {\n points = _pointsFromSegments(boundary, line);\n }\n return points.length ? new LineElement({\n points,\n options: {\n tension: 0\n },\n _loop,\n _fullLoop: _loop\n }) : null;\n}\nfunction _shouldApplyFill(source) {\n return source && source.fill !== false;\n}\nfunction _resolveTarget(sources, index, propagate) {\n const source = sources[index];\n let fill = source.fill;\n const visited = [index];\n let target;\n if (!propagate) {\n return fill;\n }\n while (fill !== false && visited.indexOf(fill) === -1) {\n if (!isNumberFinite(fill)) {\n return fill;\n }\n target = sources[fill];\n if (!target) {\n return false;\n }\n if (target.visible) {\n return fill;\n }\n visited.push(fill);\n fill = target.fill;\n }\n return false;\n}\nfunction _decodeFill(line, index, count) {\n const fill = parseFillOption(line);\n if (isObject(fill)) {\n return isNaN(fill.value) ? false : fill;\n }\n let target = parseFloat(fill);\n if (isNumberFinite(target) && Math.floor(target) === target) {\n return decodeTargetIndex(fill[0], index, target, count);\n }\n return ['origin', 'start', 'end', 'stack', 'shape'].indexOf(fill) >= 0 && fill;\n}\nfunction decodeTargetIndex(firstCh, index, target, count) {\n if (firstCh === '-' || firstCh === '+') {\n target = index + target;\n }\n if (target === index || target < 0 || target >= count) {\n return false;\n }\n return target;\n}\nfunction _getTargetPixel(fill, scale) {\n let pixel = null;\n if (fill === 'start') {\n pixel = scale.bottom;\n } else if (fill === 'end') {\n pixel = scale.top;\n } else if (isObject(fill)) {\n pixel = scale.getPixelForValue(fill.value);\n } else if (scale.getBasePixel) {\n pixel = scale.getBasePixel();\n }\n return pixel;\n}\nfunction _getTargetValue(fill, scale, startValue) {\n let value;\n if (fill === 'start') {\n value = startValue;\n } else if (fill === 'end') {\n value = scale.options.reverse ? scale.min : scale.max;\n } else if (isObject(fill)) {\n value = fill.value;\n } else {\n value = scale.getBaseValue();\n }\n return value;\n}\nfunction parseFillOption(line) {\n const options = line.options;\n const fillOption = options.fill;\n let fill = valueOrDefault(fillOption && fillOption.target, fillOption);\n if (fill === undefined) {\n fill = !!options.backgroundColor;\n }\n if (fill === false || fill === null) {\n return false;\n }\n if (fill === true) {\n return 'origin';\n }\n return fill;\n}\nfunction _buildStackLine(source) {\n const {\n scale,\n index,\n line\n } = source;\n const points = [];\n const segments = line.segments;\n const sourcePoints = line.points;\n const linesBelow = getLinesBelow(scale, index);\n linesBelow.push(_createBoundaryLine({\n x: null,\n y: scale.bottom\n }, line));\n for (let i = 0; i < segments.length; i++) {\n const segment = segments[i];\n for (let j = segment.start; j <= segment.end; j++) {\n addPointsBelow(points, sourcePoints[j], linesBelow);\n }\n }\n return new LineElement({\n points,\n options: {}\n });\n}\nfunction getLinesBelow(scale, index) {\n const below = [];\n const metas = scale.getMatchingVisibleMetas('line');\n for (let i = 0; i < metas.length; i++) {\n const meta = metas[i];\n if (meta.index === index) {\n break;\n }\n if (!meta.hidden) {\n below.unshift(meta.dataset);\n }\n }\n return below;\n}\nfunction addPointsBelow(points, sourcePoint, linesBelow) {\n const postponed = [];\n for (let j = 0; j < linesBelow.length; j++) {\n const line = linesBelow[j];\n const {\n first,\n last,\n point\n } = findPoint(line, sourcePoint, 'x');\n if (!point || first && last) {\n continue;\n }\n if (first) {\n postponed.unshift(point);\n } else {\n points.push(point);\n if (!last) {\n break;\n }\n }\n }\n points.push(...postponed);\n}\nfunction findPoint(line, sourcePoint, property) {\n const point = line.interpolate(sourcePoint, property);\n if (!point) {\n return {};\n }\n const pointValue = point[property];\n const segments = line.segments;\n const linePoints = line.points;\n let first = false;\n let last = false;\n for (let i = 0; i < segments.length; i++) {\n const segment = segments[i];\n const firstValue = linePoints[segment.start][property];\n const lastValue = linePoints[segment.end][property];\n if (_isBetween(pointValue, firstValue, lastValue)) {\n first = pointValue === firstValue;\n last = pointValue === lastValue;\n break;\n }\n }\n return {\n first,\n last,\n point\n };\n}\nclass simpleArc {\n constructor(opts) {\n this.x = opts.x;\n this.y = opts.y;\n this.radius = opts.radius;\n }\n pathSegment(ctx, bounds, opts) {\n const {\n x,\n y,\n radius\n } = this;\n bounds = bounds || {\n start: 0,\n end: TAU\n };\n ctx.arc(x, y, radius, bounds.end, bounds.start, true);\n return !opts.bounds;\n }\n interpolate(point) {\n const {\n x,\n y,\n radius\n } = this;\n const angle = point.angle;\n return {\n x: x + Math.cos(angle) * radius,\n y: y + Math.sin(angle) * radius,\n angle\n };\n }\n}\nfunction _getTarget(source) {\n const {\n chart,\n fill,\n line\n } = source;\n if (isNumberFinite(fill)) {\n return getLineByIndex(chart, fill);\n }\n if (fill === 'stack') {\n return _buildStackLine(source);\n }\n if (fill === 'shape') {\n return true;\n }\n const boundary = computeBoundary(source);\n if (boundary instanceof simpleArc) {\n return boundary;\n }\n return _createBoundaryLine(boundary, line);\n}\nfunction getLineByIndex(chart, index) {\n const meta = chart.getDatasetMeta(index);\n const visible = meta && chart.isDatasetVisible(index);\n return visible ? meta.dataset : null;\n}\nfunction computeBoundary(source) {\n const scale = source.scale || {};\n if (scale.getPointPositionForValue) {\n return computeCircularBoundary(source);\n }\n return computeLinearBoundary(source);\n}\nfunction computeLinearBoundary(source) {\n const {\n scale = {},\n fill\n } = source;\n const pixel = _getTargetPixel(fill, scale);\n if (isNumberFinite(pixel)) {\n const horizontal = scale.isHorizontal();\n return {\n x: horizontal ? pixel : null,\n y: horizontal ? null : pixel\n };\n }\n return null;\n}\nfunction computeCircularBoundary(source) {\n const {\n scale,\n fill\n } = source;\n const options = scale.options;\n const length = scale.getLabels().length;\n const start = options.reverse ? scale.max : scale.min;\n const value = _getTargetValue(fill, scale, start);\n const target = [];\n if (options.grid.circular) {\n const center = scale.getPointPositionForValue(0, start);\n return new simpleArc({\n x: center.x,\n y: center.y,\n radius: scale.getDistanceFromCenterForValue(value)\n });\n }\n for (let i = 0; i < length; ++i) {\n target.push(scale.getPointPositionForValue(i, value));\n }\n return target;\n}\nfunction _drawfill(ctx, source, area) {\n const target = _getTarget(source);\n const {\n chart,\n index,\n line,\n scale,\n axis\n } = source;\n const lineOpts = line.options;\n const fillOption = lineOpts.fill;\n const color = lineOpts.backgroundColor;\n const {\n above = color,\n below = color\n } = fillOption || {};\n const meta = chart.getDatasetMeta(index);\n const clip = getDatasetClipArea(chart, meta);\n if (target && line.points.length) {\n clipArea(ctx, area);\n doFill(ctx, {\n line,\n target,\n above,\n below,\n area,\n scale,\n axis,\n clip\n });\n unclipArea(ctx);\n }\n}\nfunction doFill(ctx, cfg) {\n const {\n line,\n target,\n above,\n below,\n area,\n scale,\n clip\n } = cfg;\n const property = line._loop ? 'angle' : cfg.axis;\n ctx.save();\n let fillColor = below;\n if (below !== above) {\n if (property === 'x') {\n clipVertical(ctx, target, area.top);\n fill(ctx, {\n line,\n target,\n color: above,\n scale,\n property,\n clip\n });\n ctx.restore();\n ctx.save();\n clipVertical(ctx, target, area.bottom);\n } else if (property === 'y') {\n clipHorizontal(ctx, target, area.left);\n fill(ctx, {\n line,\n target,\n color: below,\n scale,\n property,\n clip\n });\n ctx.restore();\n ctx.save();\n clipHorizontal(ctx, target, area.right);\n fillColor = above;\n }\n }\n fill(ctx, {\n line,\n target,\n color: fillColor,\n scale,\n property,\n clip\n });\n ctx.restore();\n}\nfunction clipVertical(ctx, target, clipY) {\n const {\n segments,\n points\n } = target;\n let first = true;\n let lineLoop = false;\n ctx.beginPath();\n for (const segment of segments) {\n const {\n start,\n end\n } = segment;\n const firstPoint = points[start];\n const lastPoint = points[_findSegmentEnd(start, end, points)];\n if (first) {\n ctx.moveTo(firstPoint.x, firstPoint.y);\n first = false;\n } else {\n ctx.lineTo(firstPoint.x, clipY);\n ctx.lineTo(firstPoint.x, firstPoint.y);\n }\n lineLoop = !!target.pathSegment(ctx, segment, {\n move: lineLoop\n });\n if (lineLoop) {\n ctx.closePath();\n } else {\n ctx.lineTo(lastPoint.x, clipY);\n }\n }\n ctx.lineTo(target.first().x, clipY);\n ctx.closePath();\n ctx.clip();\n}\nfunction clipHorizontal(ctx, target, clipX) {\n const {\n segments,\n points\n } = target;\n let first = true;\n let lineLoop = false;\n ctx.beginPath();\n for (const segment of segments) {\n const {\n start,\n end\n } = segment;\n const firstPoint = points[start];\n const lastPoint = points[_findSegmentEnd(start, end, points)];\n if (first) {\n ctx.moveTo(firstPoint.x, firstPoint.y);\n first = false;\n } else {\n ctx.lineTo(clipX, firstPoint.y);\n ctx.lineTo(firstPoint.x, firstPoint.y);\n }\n lineLoop = !!target.pathSegment(ctx, segment, {\n move: lineLoop\n });\n if (lineLoop) {\n ctx.closePath();\n } else {\n ctx.lineTo(clipX, lastPoint.y);\n }\n }\n ctx.lineTo(clipX, target.first().y);\n ctx.closePath();\n ctx.clip();\n}\nfunction fill(ctx, cfg) {\n const {\n line,\n target,\n property,\n color,\n scale,\n clip\n } = cfg;\n const segments = _segments(line, target, property);\n for (const {\n source: src,\n target: tgt,\n start,\n end\n } of segments) {\n const {\n style: {\n backgroundColor = color\n } = {}\n } = src;\n const notShape = target !== true;\n ctx.save();\n ctx.fillStyle = backgroundColor;\n clipBounds(ctx, scale, clip, notShape && _getBounds(property, start, end));\n ctx.beginPath();\n const lineLoop = !!line.pathSegment(ctx, src);\n let loop;\n if (notShape) {\n if (lineLoop) {\n ctx.closePath();\n } else {\n interpolatedLineTo(ctx, target, end, property);\n }\n const targetLoop = !!target.pathSegment(ctx, tgt, {\n move: lineLoop,\n reverse: true\n });\n loop = lineLoop && targetLoop;\n if (!loop) {\n interpolatedLineTo(ctx, target, start, property);\n }\n }\n ctx.closePath();\n ctx.fill(loop ? 'evenodd' : 'nonzero');\n ctx.restore();\n }\n}\nfunction clipBounds(ctx, scale, clip, bounds) {\n const chartArea = scale.chart.chartArea;\n const {\n property,\n start,\n end\n } = bounds || {};\n if (property === 'x' || property === 'y') {\n let left, top, right, bottom;\n if (property === 'x') {\n left = start;\n top = chartArea.top;\n right = end;\n bottom = chartArea.bottom;\n } else {\n left = chartArea.left;\n top = start;\n right = chartArea.right;\n bottom = end;\n }\n ctx.beginPath();\n if (clip) {\n left = Math.max(left, clip.left);\n right = Math.min(right, clip.right);\n top = Math.max(top, clip.top);\n bottom = Math.min(bottom, clip.bottom);\n }\n ctx.rect(left, top, right - left, bottom - top);\n ctx.clip();\n }\n}\nfunction interpolatedLineTo(ctx, target, point, property) {\n const interpolatedPoint = target.interpolate(point, property);\n if (interpolatedPoint) {\n ctx.lineTo(interpolatedPoint.x, interpolatedPoint.y);\n }\n}\nvar index = {\n id: 'filler',\n afterDatasetsUpdate(chart, _args, options) {\n const count = (chart.data.datasets || []).length;\n const sources = [];\n let meta, i, line, source;\n for (i = 0; i < count; ++i) {\n meta = chart.getDatasetMeta(i);\n line = meta.dataset;\n source = null;\n if (line && line.options && line instanceof LineElement) {\n source = {\n visible: chart.isDatasetVisible(i),\n index: i,\n fill: _decodeFill(line, i, count),\n chart,\n axis: meta.controller.options.indexAxis,\n scale: meta.vScale,\n line\n };\n }\n meta.$filler = source;\n sources.push(source);\n }\n for (i = 0; i < count; ++i) {\n source = sources[i];\n if (!source || source.fill === false) {\n continue;\n }\n source.fill = _resolveTarget(sources, i, options.propagate);\n }\n },\n beforeDraw(chart, _args, options) {\n const draw = options.drawTime === 'beforeDraw';\n const metasets = chart.getSortedVisibleDatasetMetas();\n const area = chart.chartArea;\n for (let i = metasets.length - 1; i >= 0; --i) {\n const source = metasets[i].$filler;\n if (!source) {\n continue;\n }\n source.line.updateControlPoints(area, source.axis);\n if (draw && source.fill) {\n _drawfill(chart.ctx, source, area);\n }\n }\n },\n beforeDatasetsDraw(chart, _args, options) {\n if (options.drawTime !== 'beforeDatasetsDraw') {\n return;\n }\n const metasets = chart.getSortedVisibleDatasetMetas();\n for (let i = metasets.length - 1; i >= 0; --i) {\n const source = metasets[i].$filler;\n if (_shouldApplyFill(source)) {\n _drawfill(chart.ctx, source, chart.chartArea);\n }\n }\n },\n beforeDatasetDraw(chart, args, options) {\n const source = args.meta.$filler;\n if (!_shouldApplyFill(source) || options.drawTime !== 'beforeDatasetDraw') {\n return;\n }\n _drawfill(chart.ctx, source, chart.chartArea);\n },\n defaults: {\n propagate: true,\n drawTime: 'beforeDatasetDraw'\n }\n};\nconst getBoxSize = (labelOpts, fontSize) => {\n let {\n boxHeight = fontSize,\n boxWidth = fontSize\n } = labelOpts;\n if (labelOpts.usePointStyle) {\n boxHeight = Math.min(boxHeight, fontSize);\n boxWidth = labelOpts.pointStyleWidth || Math.min(boxWidth, fontSize);\n }\n return {\n boxWidth,\n boxHeight,\n itemHeight: Math.max(fontSize, boxHeight)\n };\n};\nconst itemsEqual = (a, b) => a !== null && b !== null && a.datasetIndex === b.datasetIndex && a.index === b.index;\nclass Legend extends Element {\n constructor(config) {\n super();\n this._added = false;\n this.legendHitBoxes = [];\n this._hoveredItem = null;\n this.doughnutMode = false;\n this.chart = config.chart;\n this.options = config.options;\n this.ctx = config.ctx;\n this.legendItems = undefined;\n this.columnSizes = undefined;\n this.lineWidths = undefined;\n this.maxHeight = undefined;\n this.maxWidth = undefined;\n this.top = undefined;\n this.bottom = undefined;\n this.left = undefined;\n this.right = undefined;\n this.height = undefined;\n this.width = undefined;\n this._margins = undefined;\n this.position = undefined;\n this.weight = undefined;\n this.fullSize = undefined;\n }\n update(maxWidth, maxHeight, margins) {\n this.maxWidth = maxWidth;\n this.maxHeight = maxHeight;\n this._margins = margins;\n this.setDimensions();\n this.buildLabels();\n this.fit();\n }\n setDimensions() {\n if (this.isHorizontal()) {\n this.width = this.maxWidth;\n this.left = this._margins.left;\n this.right = this.width;\n } else {\n this.height = this.maxHeight;\n this.top = this._margins.top;\n this.bottom = this.height;\n }\n }\n buildLabels() {\n const labelOpts = this.options.labels || {};\n let legendItems = callback(labelOpts.generateLabels, [this.chart], this) || [];\n if (labelOpts.filter) {\n legendItems = legendItems.filter(item => labelOpts.filter(item, this.chart.data));\n }\n if (labelOpts.sort) {\n legendItems = legendItems.sort((a, b) => labelOpts.sort(a, b, this.chart.data));\n }\n if (this.options.reverse) {\n legendItems.reverse();\n }\n this.legendItems = legendItems;\n }\n fit() {\n const {\n options,\n ctx\n } = this;\n if (!options.display) {\n this.width = this.height = 0;\n return;\n }\n const labelOpts = options.labels;\n const labelFont = toFont(labelOpts.font);\n const fontSize = labelFont.size;\n const titleHeight = this._computeTitleHeight();\n const {\n boxWidth,\n itemHeight\n } = getBoxSize(labelOpts, fontSize);\n let width, height;\n ctx.font = labelFont.string;\n if (this.isHorizontal()) {\n width = this.maxWidth;\n height = this._fitRows(titleHeight, fontSize, boxWidth, itemHeight) + 10;\n } else {\n height = this.maxHeight;\n width = this._fitCols(titleHeight, labelFont, boxWidth, itemHeight) + 10;\n }\n this.width = Math.min(width, options.maxWidth || this.maxWidth);\n this.height = Math.min(height, options.maxHeight || this.maxHeight);\n }\n _fitRows(titleHeight, fontSize, boxWidth, itemHeight) {\n const {\n ctx,\n maxWidth,\n options: {\n labels: {\n padding\n }\n }\n } = this;\n const hitboxes = this.legendHitBoxes = [];\n const lineWidths = this.lineWidths = [0];\n const lineHeight = itemHeight + padding;\n let totalHeight = titleHeight;\n ctx.textAlign = 'left';\n ctx.textBaseline = 'middle';\n let row = -1;\n let top = -lineHeight;\n this.legendItems.forEach((legendItem, i) => {\n const itemWidth = boxWidth + fontSize / 2 + ctx.measureText(legendItem.text).width;\n if (i === 0 || lineWidths[lineWidths.length - 1] + itemWidth + 2 * padding > maxWidth) {\n totalHeight += lineHeight;\n lineWidths[lineWidths.length - (i > 0 ? 0 : 1)] = 0;\n top += lineHeight;\n row++;\n }\n hitboxes[i] = {\n left: 0,\n top,\n row,\n width: itemWidth,\n height: itemHeight\n };\n lineWidths[lineWidths.length - 1] += itemWidth + padding;\n });\n return totalHeight;\n }\n _fitCols(titleHeight, labelFont, boxWidth, _itemHeight) {\n const {\n ctx,\n maxHeight,\n options: {\n labels: {\n padding\n }\n }\n } = this;\n const hitboxes = this.legendHitBoxes = [];\n const columnSizes = this.columnSizes = [];\n const heightLimit = maxHeight - titleHeight;\n let totalWidth = padding;\n let currentColWidth = 0;\n let currentColHeight = 0;\n let left = 0;\n let col = 0;\n this.legendItems.forEach((legendItem, i) => {\n const {\n itemWidth,\n itemHeight\n } = calculateItemSize(boxWidth, labelFont, ctx, legendItem, _itemHeight);\n if (i > 0 && currentColHeight + itemHeight + 2 * padding > heightLimit) {\n totalWidth += currentColWidth + padding;\n columnSizes.push({\n width: currentColWidth,\n height: currentColHeight\n });\n left += currentColWidth + padding;\n col++;\n currentColWidth = currentColHeight = 0;\n }\n hitboxes[i] = {\n left,\n top: currentColHeight,\n col,\n width: itemWidth,\n height: itemHeight\n };\n currentColWidth = Math.max(currentColWidth, itemWidth);\n currentColHeight += itemHeight + padding;\n });\n totalWidth += currentColWidth;\n columnSizes.push({\n width: currentColWidth,\n height: currentColHeight\n });\n return totalWidth;\n }\n adjustHitBoxes() {\n if (!this.options.display) {\n return;\n }\n const titleHeight = this._computeTitleHeight();\n const {\n legendHitBoxes: hitboxes,\n options: {\n align,\n labels: {\n padding\n },\n rtl\n }\n } = this;\n const rtlHelper = getRtlAdapter(rtl, this.left, this.width);\n if (this.isHorizontal()) {\n let row = 0;\n let left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);\n for (const hitbox of hitboxes) {\n if (row !== hitbox.row) {\n row = hitbox.row;\n left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);\n }\n hitbox.top += this.top + titleHeight + padding;\n hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(left), hitbox.width);\n left += hitbox.width + padding;\n }\n } else {\n let col = 0;\n let top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);\n for (const hitbox of hitboxes) {\n if (hitbox.col !== col) {\n col = hitbox.col;\n top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);\n }\n hitbox.top = top;\n hitbox.left += this.left + padding;\n hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(hitbox.left), hitbox.width);\n top += hitbox.height + padding;\n }\n }\n }\n isHorizontal() {\n return this.options.position === 'top' || this.options.position === 'bottom';\n }\n draw() {\n if (this.options.display) {\n const ctx = this.ctx;\n clipArea(ctx, this);\n this._draw();\n unclipArea(ctx);\n }\n }\n _draw() {\n const {\n options: opts,\n columnSizes,\n lineWidths,\n ctx\n } = this;\n const {\n align,\n labels: labelOpts\n } = opts;\n const defaultColor = defaults.color;\n const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);\n const labelFont = toFont(labelOpts.font);\n const {\n padding\n } = labelOpts;\n const fontSize = labelFont.size;\n const halfFontSize = fontSize / 2;\n let cursor;\n this.drawTitle();\n ctx.textAlign = rtlHelper.textAlign('left');\n ctx.textBaseline = 'middle';\n ctx.lineWidth = 0.5;\n ctx.font = labelFont.string;\n const {\n boxWidth,\n boxHeight,\n itemHeight\n } = getBoxSize(labelOpts, fontSize);\n const drawLegendBox = function (x, y, legendItem) {\n if (isNaN(boxWidth) || boxWidth <= 0 || isNaN(boxHeight) || boxHeight < 0) {\n return;\n }\n ctx.save();\n const lineWidth = valueOrDefault(legendItem.lineWidth, 1);\n ctx.fillStyle = valueOrDefault(legendItem.fillStyle, defaultColor);\n ctx.lineCap = valueOrDefault(legendItem.lineCap, 'butt');\n ctx.lineDashOffset = valueOrDefault(legendItem.lineDashOffset, 0);\n ctx.lineJoin = valueOrDefault(legendItem.lineJoin, 'miter');\n ctx.lineWidth = lineWidth;\n ctx.strokeStyle = valueOrDefault(legendItem.strokeStyle, defaultColor);\n ctx.setLineDash(valueOrDefault(legendItem.lineDash, []));\n if (labelOpts.usePointStyle) {\n const drawOptions = {\n radius: boxHeight * Math.SQRT2 / 2,\n pointStyle: legendItem.pointStyle,\n rotation: legendItem.rotation,\n borderWidth: lineWidth\n };\n const centerX = rtlHelper.xPlus(x, boxWidth / 2);\n const centerY = y + halfFontSize;\n drawPointLegend(ctx, drawOptions, centerX, centerY, labelOpts.pointStyleWidth && boxWidth);\n } else {\n const yBoxTop = y + Math.max((fontSize - boxHeight) / 2, 0);\n const xBoxLeft = rtlHelper.leftForLtr(x, boxWidth);\n const borderRadius = toTRBLCorners(legendItem.borderRadius);\n ctx.beginPath();\n if (Object.values(borderRadius).some(v => v !== 0)) {\n addRoundedRectPath(ctx, {\n x: xBoxLeft,\n y: yBoxTop,\n w: boxWidth,\n h: boxHeight,\n radius: borderRadius\n });\n } else {\n ctx.rect(xBoxLeft, yBoxTop, boxWidth, boxHeight);\n }\n ctx.fill();\n if (lineWidth !== 0) {\n ctx.stroke();\n }\n }\n ctx.restore();\n };\n const fillText = function (x, y, legendItem) {\n renderText(ctx, legendItem.text, x, y + itemHeight / 2, labelFont, {\n strikethrough: legendItem.hidden,\n textAlign: rtlHelper.textAlign(legendItem.textAlign)\n });\n };\n const isHorizontal = this.isHorizontal();\n const titleHeight = this._computeTitleHeight();\n if (isHorizontal) {\n cursor = {\n x: _alignStartEnd(align, this.left + padding, this.right - lineWidths[0]),\n y: this.top + padding + titleHeight,\n line: 0\n };\n } else {\n cursor = {\n x: this.left + padding,\n y: _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[0].height),\n line: 0\n };\n }\n overrideTextDirection(this.ctx, opts.textDirection);\n const lineHeight = itemHeight + padding;\n this.legendItems.forEach((legendItem, i) => {\n ctx.strokeStyle = legendItem.fontColor;\n ctx.fillStyle = legendItem.fontColor;\n const textWidth = ctx.measureText(legendItem.text).width;\n const textAlign = rtlHelper.textAlign(legendItem.textAlign || (legendItem.textAlign = labelOpts.textAlign));\n const width = boxWidth + halfFontSize + textWidth;\n let x = cursor.x;\n let y = cursor.y;\n rtlHelper.setWidth(this.width);\n if (isHorizontal) {\n if (i > 0 && x + width + padding > this.right) {\n y = cursor.y += lineHeight;\n cursor.line++;\n x = cursor.x = _alignStartEnd(align, this.left + padding, this.right - lineWidths[cursor.line]);\n }\n } else if (i > 0 && y + lineHeight > this.bottom) {\n x = cursor.x = x + columnSizes[cursor.line].width + padding;\n cursor.line++;\n y = cursor.y = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[cursor.line].height);\n }\n const realX = rtlHelper.x(x);\n drawLegendBox(realX, y, legendItem);\n x = _textX(textAlign, x + boxWidth + halfFontSize, isHorizontal ? x + width : this.right, opts.rtl);\n fillText(rtlHelper.x(x), y, legendItem);\n if (isHorizontal) {\n cursor.x += width + padding;\n } else if (typeof legendItem.text !== 'string') {\n const fontLineHeight = labelFont.lineHeight;\n cursor.y += calculateLegendItemHeight(legendItem, fontLineHeight) + padding;\n } else {\n cursor.y += lineHeight;\n }\n });\n restoreTextDirection(this.ctx, opts.textDirection);\n }\n drawTitle() {\n const opts = this.options;\n const titleOpts = opts.title;\n const titleFont = toFont(titleOpts.font);\n const titlePadding = toPadding(titleOpts.padding);\n if (!titleOpts.display) {\n return;\n }\n const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);\n const ctx = this.ctx;\n const position = titleOpts.position;\n const halfFontSize = titleFont.size / 2;\n const topPaddingPlusHalfFontSize = titlePadding.top + halfFontSize;\n let y;\n let left = this.left;\n let maxWidth = this.width;\n if (this.isHorizontal()) {\n maxWidth = Math.max(...this.lineWidths);\n y = this.top + topPaddingPlusHalfFontSize;\n left = _alignStartEnd(opts.align, left, this.right - maxWidth);\n } else {\n const maxHeight = this.columnSizes.reduce((acc, size) => Math.max(acc, size.height), 0);\n y = topPaddingPlusHalfFontSize + _alignStartEnd(opts.align, this.top, this.bottom - maxHeight - opts.labels.padding - this._computeTitleHeight());\n }\n const x = _alignStartEnd(position, left, left + maxWidth);\n ctx.textAlign = rtlHelper.textAlign(_toLeftRightCenter(position));\n ctx.textBaseline = 'middle';\n ctx.strokeStyle = titleOpts.color;\n ctx.fillStyle = titleOpts.color;\n ctx.font = titleFont.string;\n renderText(ctx, titleOpts.text, x, y, titleFont);\n }\n _computeTitleHeight() {\n const titleOpts = this.options.title;\n const titleFont = toFont(titleOpts.font);\n const titlePadding = toPadding(titleOpts.padding);\n return titleOpts.display ? titleFont.lineHeight + titlePadding.height : 0;\n }\n _getLegendItemAt(x, y) {\n let i, hitBox, lh;\n if (_isBetween(x, this.left, this.right) && _isBetween(y, this.top, this.bottom)) {\n lh = this.legendHitBoxes;\n for (i = 0; i < lh.length; ++i) {\n hitBox = lh[i];\n if (_isBetween(x, hitBox.left, hitBox.left + hitBox.width) && _isBetween(y, hitBox.top, hitBox.top + hitBox.height)) {\n return this.legendItems[i];\n }\n }\n }\n return null;\n }\n handleEvent(e) {\n const opts = this.options;\n if (!isListened(e.type, opts)) {\n return;\n }\n const hoveredItem = this._getLegendItemAt(e.x, e.y);\n if (e.type === 'mousemove' || e.type === 'mouseout') {\n const previous = this._hoveredItem;\n const sameItem = itemsEqual(previous, hoveredItem);\n if (previous && !sameItem) {\n callback(opts.onLeave, [e, previous, this], this);\n }\n this._hoveredItem = hoveredItem;\n if (hoveredItem && !sameItem) {\n callback(opts.onHover, [e, hoveredItem, this], this);\n }\n } else if (hoveredItem) {\n callback(opts.onClick, [e, hoveredItem, this], this);\n }\n }\n}\nfunction calculateItemSize(boxWidth, labelFont, ctx, legendItem, _itemHeight) {\n const itemWidth = calculateItemWidth(legendItem, boxWidth, labelFont, ctx);\n const itemHeight = calculateItemHeight(_itemHeight, legendItem, labelFont.lineHeight);\n return {\n itemWidth,\n itemHeight\n };\n}\nfunction calculateItemWidth(legendItem, boxWidth, labelFont, ctx) {\n let legendItemText = legendItem.text;\n if (legendItemText && typeof legendItemText !== 'string') {\n legendItemText = legendItemText.reduce((a, b) => a.length > b.length ? a : b);\n }\n return boxWidth + labelFont.size / 2 + ctx.measureText(legendItemText).width;\n}\nfunction calculateItemHeight(_itemHeight, legendItem, fontLineHeight) {\n let itemHeight = _itemHeight;\n if (typeof legendItem.text !== 'string') {\n itemHeight = calculateLegendItemHeight(legendItem, fontLineHeight);\n }\n return itemHeight;\n}\nfunction calculateLegendItemHeight(legendItem, fontLineHeight) {\n const labelHeight = legendItem.text ? legendItem.text.length : 0;\n return fontLineHeight * labelHeight;\n}\nfunction isListened(type, opts) {\n if ((type === 'mousemove' || type === 'mouseout') && (opts.onHover || opts.onLeave)) {\n return true;\n }\n if (opts.onClick && (type === 'click' || type === 'mouseup')) {\n return true;\n }\n return false;\n}\nvar plugin_legend = {\n id: 'legend',\n _element: Legend,\n start(chart, _args, options) {\n const legend = chart.legend = new Legend({\n ctx: chart.ctx,\n options,\n chart\n });\n layouts.configure(chart, legend, options);\n layouts.addBox(chart, legend);\n },\n stop(chart) {\n layouts.removeBox(chart, chart.legend);\n delete chart.legend;\n },\n beforeUpdate(chart, _args, options) {\n const legend = chart.legend;\n layouts.configure(chart, legend, options);\n legend.options = options;\n },\n afterUpdate(chart) {\n const legend = chart.legend;\n legend.buildLabels();\n legend.adjustHitBoxes();\n },\n afterEvent(chart, args) {\n if (!args.replay) {\n chart.legend.handleEvent(args.event);\n }\n },\n defaults: {\n display: true,\n position: 'top',\n align: 'center',\n fullSize: true,\n reverse: false,\n weight: 1000,\n onClick(e, legendItem, legend) {\n const index = legendItem.datasetIndex;\n const ci = legend.chart;\n if (ci.isDatasetVisible(index)) {\n ci.hide(index);\n legendItem.hidden = true;\n } else {\n ci.show(index);\n legendItem.hidden = false;\n }\n },\n onHover: null,\n onLeave: null,\n labels: {\n color: ctx => ctx.chart.options.color,\n boxWidth: 40,\n padding: 10,\n generateLabels(chart) {\n const datasets = chart.data.datasets;\n const {\n labels: {\n usePointStyle,\n pointStyle,\n textAlign,\n color,\n useBorderRadius,\n borderRadius\n }\n } = chart.legend.options;\n return chart._getSortedDatasetMetas().map(meta => {\n const style = meta.controller.getStyle(usePointStyle ? 0 : undefined);\n const borderWidth = toPadding(style.borderWidth);\n return {\n text: datasets[meta.index].label,\n fillStyle: style.backgroundColor,\n fontColor: color,\n hidden: !meta.visible,\n lineCap: style.borderCapStyle,\n lineDash: style.borderDash,\n lineDashOffset: style.borderDashOffset,\n lineJoin: style.borderJoinStyle,\n lineWidth: (borderWidth.width + borderWidth.height) / 4,\n strokeStyle: style.borderColor,\n pointStyle: pointStyle || style.pointStyle,\n rotation: style.rotation,\n textAlign: textAlign || style.textAlign,\n borderRadius: useBorderRadius && (borderRadius || style.borderRadius),\n datasetIndex: meta.index\n };\n }, this);\n }\n },\n title: {\n color: ctx => ctx.chart.options.color,\n display: false,\n position: 'center',\n text: ''\n }\n },\n descriptors: {\n _scriptable: name => !name.startsWith('on'),\n labels: {\n _scriptable: name => !['generateLabels', 'filter', 'sort'].includes(name)\n }\n }\n};\nclass Title extends Element {\n constructor(config) {\n super();\n this.chart = config.chart;\n this.options = config.options;\n this.ctx = config.ctx;\n this._padding = undefined;\n this.top = undefined;\n this.bottom = undefined;\n this.left = undefined;\n this.right = undefined;\n this.width = undefined;\n this.height = undefined;\n this.position = undefined;\n this.weight = undefined;\n this.fullSize = undefined;\n }\n update(maxWidth, maxHeight) {\n const opts = this.options;\n this.left = 0;\n this.top = 0;\n if (!opts.display) {\n this.width = this.height = this.right = this.bottom = 0;\n return;\n }\n this.width = this.right = maxWidth;\n this.height = this.bottom = maxHeight;\n const lineCount = isArray(opts.text) ? opts.text.length : 1;\n this._padding = toPadding(opts.padding);\n const textSize = lineCount * toFont(opts.font).lineHeight + this._padding.height;\n if (this.isHorizontal()) {\n this.height = textSize;\n } else {\n this.width = textSize;\n }\n }\n isHorizontal() {\n const pos = this.options.position;\n return pos === 'top' || pos === 'bottom';\n }\n _drawArgs(offset) {\n const {\n top,\n left,\n bottom,\n right,\n options\n } = this;\n const align = options.align;\n let rotation = 0;\n let maxWidth, titleX, titleY;\n if (this.isHorizontal()) {\n titleX = _alignStartEnd(align, left, right);\n titleY = top + offset;\n maxWidth = right - left;\n } else {\n if (options.position === 'left') {\n titleX = left + offset;\n titleY = _alignStartEnd(align, bottom, top);\n rotation = PI * -0.5;\n } else {\n titleX = right - offset;\n titleY = _alignStartEnd(align, top, bottom);\n rotation = PI * 0.5;\n }\n maxWidth = bottom - top;\n }\n return {\n titleX,\n titleY,\n maxWidth,\n rotation\n };\n }\n draw() {\n const ctx = this.ctx;\n const opts = this.options;\n if (!opts.display) {\n return;\n }\n const fontOpts = toFont(opts.font);\n const lineHeight = fontOpts.lineHeight;\n const offset = lineHeight / 2 + this._padding.top;\n const {\n titleX,\n titleY,\n maxWidth,\n rotation\n } = this._drawArgs(offset);\n renderText(ctx, opts.text, 0, 0, fontOpts, {\n color: opts.color,\n maxWidth,\n rotation,\n textAlign: _toLeftRightCenter(opts.align),\n textBaseline: 'middle',\n translation: [titleX, titleY]\n });\n }\n}\nfunction createTitle(chart, titleOpts) {\n const title = new Title({\n ctx: chart.ctx,\n options: titleOpts,\n chart\n });\n layouts.configure(chart, title, titleOpts);\n layouts.addBox(chart, title);\n chart.titleBlock = title;\n}\nvar plugin_title = {\n id: 'title',\n _element: Title,\n start(chart, _args, options) {\n createTitle(chart, options);\n },\n stop(chart) {\n const titleBlock = chart.titleBlock;\n layouts.removeBox(chart, titleBlock);\n delete chart.titleBlock;\n },\n beforeUpdate(chart, _args, options) {\n const title = chart.titleBlock;\n layouts.configure(chart, title, options);\n title.options = options;\n },\n defaults: {\n align: 'center',\n display: false,\n font: {\n weight: 'bold'\n },\n fullSize: true,\n padding: 10,\n position: 'top',\n text: '',\n weight: 2000\n },\n defaultRoutes: {\n color: 'color'\n },\n descriptors: {\n _scriptable: true,\n _indexable: false\n }\n};\nconst map = new WeakMap();\nvar plugin_subtitle = {\n id: 'subtitle',\n start(chart, _args, options) {\n const title = new Title({\n ctx: chart.ctx,\n options,\n chart\n });\n layouts.configure(chart, title, options);\n layouts.addBox(chart, title);\n map.set(chart, title);\n },\n stop(chart) {\n layouts.removeBox(chart, map.get(chart));\n map.delete(chart);\n },\n beforeUpdate(chart, _args, options) {\n const title = map.get(chart);\n layouts.configure(chart, title, options);\n title.options = options;\n },\n defaults: {\n align: 'center',\n display: false,\n font: {\n weight: 'normal'\n },\n fullSize: true,\n padding: 0,\n position: 'top',\n text: '',\n weight: 1500\n },\n defaultRoutes: {\n color: 'color'\n },\n descriptors: {\n _scriptable: true,\n _indexable: false\n }\n};\nconst positioners = {\n average(items) {\n if (!items.length) {\n return false;\n }\n let i, len;\n let xSet = new Set();\n let y = 0;\n let count = 0;\n for (i = 0, len = items.length; i < len; ++i) {\n const el = items[i].element;\n if (el && el.hasValue()) {\n const pos = el.tooltipPosition();\n xSet.add(pos.x);\n y += pos.y;\n ++count;\n }\n }\n if (count === 0 || xSet.size === 0) {\n return false;\n }\n const xAverage = [...xSet].reduce((a, b) => a + b) / xSet.size;\n return {\n x: xAverage,\n y: y / count\n };\n },\n nearest(items, eventPosition) {\n if (!items.length) {\n return false;\n }\n let x = eventPosition.x;\n let y = eventPosition.y;\n let minDistance = Number.POSITIVE_INFINITY;\n let i, len, nearestElement;\n for (i = 0, len = items.length; i < len; ++i) {\n const el = items[i].element;\n if (el && el.hasValue()) {\n const center = el.getCenterPoint();\n const d = distanceBetweenPoints(eventPosition, center);\n if (d < minDistance) {\n minDistance = d;\n nearestElement = el;\n }\n }\n }\n if (nearestElement) {\n const tp = nearestElement.tooltipPosition();\n x = tp.x;\n y = tp.y;\n }\n return {\n x,\n y\n };\n }\n};\nfunction pushOrConcat(base, toPush) {\n if (toPush) {\n if (isArray(toPush)) {\n Array.prototype.push.apply(base, toPush);\n } else {\n base.push(toPush);\n }\n }\n return base;\n}\nfunction splitNewlines(str) {\n if ((typeof str === 'string' || str instanceof String) && str.indexOf('\\n') > -1) {\n return str.split('\\n');\n }\n return str;\n}\nfunction createTooltipItem(chart, item) {\n const {\n element,\n datasetIndex,\n index\n } = item;\n const controller = chart.getDatasetMeta(datasetIndex).controller;\n const {\n label,\n value\n } = controller.getLabelAndValue(index);\n return {\n chart,\n label,\n parsed: controller.getParsed(index),\n raw: chart.data.datasets[datasetIndex].data[index],\n formattedValue: value,\n dataset: controller.getDataset(),\n dataIndex: index,\n datasetIndex,\n element\n };\n}\nfunction getTooltipSize(tooltip, options) {\n const ctx = tooltip.chart.ctx;\n const {\n body,\n footer,\n title\n } = tooltip;\n const {\n boxWidth,\n boxHeight\n } = options;\n const bodyFont = toFont(options.bodyFont);\n const titleFont = toFont(options.titleFont);\n const footerFont = toFont(options.footerFont);\n const titleLineCount = title.length;\n const footerLineCount = footer.length;\n const bodyLineItemCount = body.length;\n const padding = toPadding(options.padding);\n let height = padding.height;\n let width = 0;\n let combinedBodyLength = body.reduce((count, bodyItem) => count + bodyItem.before.length + bodyItem.lines.length + bodyItem.after.length, 0);\n combinedBodyLength += tooltip.beforeBody.length + tooltip.afterBody.length;\n if (titleLineCount) {\n height += titleLineCount * titleFont.lineHeight + (titleLineCount - 1) * options.titleSpacing + options.titleMarginBottom;\n }\n if (combinedBodyLength) {\n const bodyLineHeight = options.displayColors ? Math.max(boxHeight, bodyFont.lineHeight) : bodyFont.lineHeight;\n height += bodyLineItemCount * bodyLineHeight + (combinedBodyLength - bodyLineItemCount) * bodyFont.lineHeight + (combinedBodyLength - 1) * options.bodySpacing;\n }\n if (footerLineCount) {\n height += options.footerMarginTop + footerLineCount * footerFont.lineHeight + (footerLineCount - 1) * options.footerSpacing;\n }\n let widthPadding = 0;\n const maxLineWidth = function (line) {\n width = Math.max(width, ctx.measureText(line).width + widthPadding);\n };\n ctx.save();\n ctx.font = titleFont.string;\n each(tooltip.title, maxLineWidth);\n ctx.font = bodyFont.string;\n each(tooltip.beforeBody.concat(tooltip.afterBody), maxLineWidth);\n widthPadding = options.displayColors ? boxWidth + 2 + options.boxPadding : 0;\n each(body, bodyItem => {\n each(bodyItem.before, maxLineWidth);\n each(bodyItem.lines, maxLineWidth);\n each(bodyItem.after, maxLineWidth);\n });\n widthPadding = 0;\n ctx.font = footerFont.string;\n each(tooltip.footer, maxLineWidth);\n ctx.restore();\n width += padding.width;\n return {\n width,\n height\n };\n}\nfunction determineYAlign(chart, size) {\n const {\n y,\n height\n } = size;\n if (y < height / 2) {\n return 'top';\n } else if (y > chart.height - height / 2) {\n return 'bottom';\n }\n return 'center';\n}\nfunction doesNotFitWithAlign(xAlign, chart, options, size) {\n const {\n x,\n width\n } = size;\n const caret = options.caretSize + options.caretPadding;\n if (xAlign === 'left' && x + width + caret > chart.width) {\n return true;\n }\n if (xAlign === 'right' && x - width - caret < 0) {\n return true;\n }\n}\nfunction determineXAlign(chart, options, size, yAlign) {\n const {\n x,\n width\n } = size;\n const {\n width: chartWidth,\n chartArea: {\n left,\n right\n }\n } = chart;\n let xAlign = 'center';\n if (yAlign === 'center') {\n xAlign = x <= (left + right) / 2 ? 'left' : 'right';\n } else if (x <= width / 2) {\n xAlign = 'left';\n } else if (x >= chartWidth - width / 2) {\n xAlign = 'right';\n }\n if (doesNotFitWithAlign(xAlign, chart, options, size)) {\n xAlign = 'center';\n }\n return xAlign;\n}\nfunction determineAlignment(chart, options, size) {\n const yAlign = size.yAlign || options.yAlign || determineYAlign(chart, size);\n return {\n xAlign: size.xAlign || options.xAlign || determineXAlign(chart, options, size, yAlign),\n yAlign\n };\n}\nfunction alignX(size, xAlign) {\n let {\n x,\n width\n } = size;\n if (xAlign === 'right') {\n x -= width;\n } else if (xAlign === 'center') {\n x -= width / 2;\n }\n return x;\n}\nfunction alignY(size, yAlign, paddingAndSize) {\n let {\n y,\n height\n } = size;\n if (yAlign === 'top') {\n y += paddingAndSize;\n } else if (yAlign === 'bottom') {\n y -= height + paddingAndSize;\n } else {\n y -= height / 2;\n }\n return y;\n}\nfunction getBackgroundPoint(options, size, alignment, chart) {\n const {\n caretSize,\n caretPadding,\n cornerRadius\n } = options;\n const {\n xAlign,\n yAlign\n } = alignment;\n const paddingAndSize = caretSize + caretPadding;\n const {\n topLeft,\n topRight,\n bottomLeft,\n bottomRight\n } = toTRBLCorners(cornerRadius);\n let x = alignX(size, xAlign);\n const y = alignY(size, yAlign, paddingAndSize);\n if (yAlign === 'center') {\n if (xAlign === 'left') {\n x += paddingAndSize;\n } else if (xAlign === 'right') {\n x -= paddingAndSize;\n }\n } else if (xAlign === 'left') {\n x -= Math.max(topLeft, bottomLeft) + caretSize;\n } else if (xAlign === 'right') {\n x += Math.max(topRight, bottomRight) + caretSize;\n }\n return {\n x: _limitValue(x, 0, chart.width - size.width),\n y: _limitValue(y, 0, chart.height - size.height)\n };\n}\nfunction getAlignedX(tooltip, align, options) {\n const padding = toPadding(options.padding);\n return align === 'center' ? tooltip.x + tooltip.width / 2 : align === 'right' ? tooltip.x + tooltip.width - padding.right : tooltip.x + padding.left;\n}\nfunction getBeforeAfterBodyLines(callback) {\n return pushOrConcat([], splitNewlines(callback));\n}\nfunction createTooltipContext(parent, tooltip, tooltipItems) {\n return createContext(parent, {\n tooltip,\n tooltipItems,\n type: 'tooltip'\n });\n}\nfunction overrideCallbacks(callbacks, context) {\n const override = context && context.dataset && context.dataset.tooltip && context.dataset.tooltip.callbacks;\n return override ? callbacks.override(override) : callbacks;\n}\nconst defaultCallbacks = {\n beforeTitle: noop,\n title(tooltipItems) {\n if (tooltipItems.length > 0) {\n const item = tooltipItems[0];\n const labels = item.chart.data.labels;\n const labelCount = labels ? labels.length : 0;\n if (this && this.options && this.options.mode === 'dataset') {\n return item.dataset.label || '';\n } else if (item.label) {\n return item.label;\n } else if (labelCount > 0 && item.dataIndex < labelCount) {\n return labels[item.dataIndex];\n }\n }\n return '';\n },\n afterTitle: noop,\n beforeBody: noop,\n beforeLabel: noop,\n label(tooltipItem) {\n if (this && this.options && this.options.mode === 'dataset') {\n return tooltipItem.label + ': ' + tooltipItem.formattedValue || tooltipItem.formattedValue;\n }\n let label = tooltipItem.dataset.label || '';\n if (label) {\n label += ': ';\n }\n const value = tooltipItem.formattedValue;\n if (!isNullOrUndef(value)) {\n label += value;\n }\n return label;\n },\n labelColor(tooltipItem) {\n const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n const options = meta.controller.getStyle(tooltipItem.dataIndex);\n return {\n borderColor: options.borderColor,\n backgroundColor: options.backgroundColor,\n borderWidth: options.borderWidth,\n borderDash: options.borderDash,\n borderDashOffset: options.borderDashOffset,\n borderRadius: 0\n };\n },\n labelTextColor() {\n return this.options.bodyColor;\n },\n labelPointStyle(tooltipItem) {\n const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n const options = meta.controller.getStyle(tooltipItem.dataIndex);\n return {\n pointStyle: options.pointStyle,\n rotation: options.rotation\n };\n },\n afterLabel: noop,\n afterBody: noop,\n beforeFooter: noop,\n footer: noop,\n afterFooter: noop\n};\nfunction invokeCallbackWithFallback(callbacks, name, ctx, arg) {\n const result = callbacks[name].call(ctx, arg);\n if (typeof result === 'undefined') {\n return defaultCallbacks[name].call(ctx, arg);\n }\n return result;\n}\nlet Tooltip = /*#__PURE__*/(() => {\n class Tooltip extends Element {\n static positioners = positioners;\n constructor(config) {\n super();\n this.opacity = 0;\n this._active = [];\n this._eventPosition = undefined;\n this._size = undefined;\n this._cachedAnimations = undefined;\n this._tooltipItems = [];\n this.$animations = undefined;\n this.$context = undefined;\n this.chart = config.chart;\n this.options = config.options;\n this.dataPoints = undefined;\n this.title = undefined;\n this.beforeBody = undefined;\n this.body = undefined;\n this.afterBody = undefined;\n this.footer = undefined;\n this.xAlign = undefined;\n this.yAlign = undefined;\n this.x = undefined;\n this.y = undefined;\n this.height = undefined;\n this.width = undefined;\n this.caretX = undefined;\n this.caretY = undefined;\n this.labelColors = undefined;\n this.labelPointStyles = undefined;\n this.labelTextColors = undefined;\n }\n initialize(options) {\n this.options = options;\n this._cachedAnimations = undefined;\n this.$context = undefined;\n }\n _resolveAnimations() {\n const cached = this._cachedAnimations;\n if (cached) {\n return cached;\n }\n const chart = this.chart;\n const options = this.options.setContext(this.getContext());\n const opts = options.enabled && chart.options.animation && options.animations;\n const animations = new Animations(this.chart, opts);\n if (opts._cacheable) {\n this._cachedAnimations = Object.freeze(animations);\n }\n return animations;\n }\n getContext() {\n return this.$context || (this.$context = createTooltipContext(this.chart.getContext(), this, this._tooltipItems));\n }\n getTitle(context, options) {\n const {\n callbacks\n } = options;\n const beforeTitle = invokeCallbackWithFallback(callbacks, 'beforeTitle', this, context);\n const title = invokeCallbackWithFallback(callbacks, 'title', this, context);\n const afterTitle = invokeCallbackWithFallback(callbacks, 'afterTitle', this, context);\n let lines = [];\n lines = pushOrConcat(lines, splitNewlines(beforeTitle));\n lines = pushOrConcat(lines, splitNewlines(title));\n lines = pushOrConcat(lines, splitNewlines(afterTitle));\n return lines;\n }\n getBeforeBody(tooltipItems, options) {\n return getBeforeAfterBodyLines(invokeCallbackWithFallback(options.callbacks, 'beforeBody', this, tooltipItems));\n }\n getBody(tooltipItems, options) {\n const {\n callbacks\n } = options;\n const bodyItems = [];\n each(tooltipItems, context => {\n const bodyItem = {\n before: [],\n lines: [],\n after: []\n };\n const scoped = overrideCallbacks(callbacks, context);\n pushOrConcat(bodyItem.before, splitNewlines(invokeCallbackWithFallback(scoped, 'beforeLabel', this, context)));\n pushOrConcat(bodyItem.lines, invokeCallbackWithFallback(scoped, 'label', this, context));\n pushOrConcat(bodyItem.after, splitNewlines(invokeCallbackWithFallback(scoped, 'afterLabel', this, context)));\n bodyItems.push(bodyItem);\n });\n return bodyItems;\n }\n getAfterBody(tooltipItems, options) {\n return getBeforeAfterBodyLines(invokeCallbackWithFallback(options.callbacks, 'afterBody', this, tooltipItems));\n }\n getFooter(tooltipItems, options) {\n const {\n callbacks\n } = options;\n const beforeFooter = invokeCallbackWithFallback(callbacks, 'beforeFooter', this, tooltipItems);\n const footer = invokeCallbackWithFallback(callbacks, 'footer', this, tooltipItems);\n const afterFooter = invokeCallbackWithFallback(callbacks, 'afterFooter', this, tooltipItems);\n let lines = [];\n lines = pushOrConcat(lines, splitNewlines(beforeFooter));\n lines = pushOrConcat(lines, splitNewlines(footer));\n lines = pushOrConcat(lines, splitNewlines(afterFooter));\n return lines;\n }\n _createItems(options) {\n const active = this._active;\n const data = this.chart.data;\n const labelColors = [];\n const labelPointStyles = [];\n const labelTextColors = [];\n let tooltipItems = [];\n let i, len;\n for (i = 0, len = active.length; i < len; ++i) {\n tooltipItems.push(createTooltipItem(this.chart, active[i]));\n }\n if (options.filter) {\n tooltipItems = tooltipItems.filter((element, index, array) => options.filter(element, index, array, data));\n }\n if (options.itemSort) {\n tooltipItems = tooltipItems.sort((a, b) => options.itemSort(a, b, data));\n }\n each(tooltipItems, context => {\n const scoped = overrideCallbacks(options.callbacks, context);\n labelColors.push(invokeCallbackWithFallback(scoped, 'labelColor', this, context));\n labelPointStyles.push(invokeCallbackWithFallback(scoped, 'labelPointStyle', this, context));\n labelTextColors.push(invokeCallbackWithFallback(scoped, 'labelTextColor', this, context));\n });\n this.labelColors = labelColors;\n this.labelPointStyles = labelPointStyles;\n this.labelTextColors = labelTextColors;\n this.dataPoints = tooltipItems;\n return tooltipItems;\n }\n update(changed, replay) {\n const options = this.options.setContext(this.getContext());\n const active = this._active;\n let properties;\n let tooltipItems = [];\n if (!active.length) {\n if (this.opacity !== 0) {\n properties = {\n opacity: 0\n };\n }\n } else {\n const position = positioners[options.position].call(this, active, this._eventPosition);\n tooltipItems = this._createItems(options);\n this.title = this.getTitle(tooltipItems, options);\n this.beforeBody = this.getBeforeBody(tooltipItems, options);\n this.body = this.getBody(tooltipItems, options);\n this.afterBody = this.getAfterBody(tooltipItems, options);\n this.footer = this.getFooter(tooltipItems, options);\n const size = this._size = getTooltipSize(this, options);\n const positionAndSize = Object.assign({}, position, size);\n const alignment = determineAlignment(this.chart, options, positionAndSize);\n const backgroundPoint = getBackgroundPoint(options, positionAndSize, alignment, this.chart);\n this.xAlign = alignment.xAlign;\n this.yAlign = alignment.yAlign;\n properties = {\n opacity: 1,\n x: backgroundPoint.x,\n y: backgroundPoint.y,\n width: size.width,\n height: size.height,\n caretX: position.x,\n caretY: position.y\n };\n }\n this._tooltipItems = tooltipItems;\n this.$context = undefined;\n if (properties) {\n this._resolveAnimations().update(this, properties);\n }\n if (changed && options.external) {\n options.external.call(this, {\n chart: this.chart,\n tooltip: this,\n replay\n });\n }\n }\n drawCaret(tooltipPoint, ctx, size, options) {\n const caretPosition = this.getCaretPosition(tooltipPoint, size, options);\n ctx.lineTo(caretPosition.x1, caretPosition.y1);\n ctx.lineTo(caretPosition.x2, caretPosition.y2);\n ctx.lineTo(caretPosition.x3, caretPosition.y3);\n }\n getCaretPosition(tooltipPoint, size, options) {\n const {\n xAlign,\n yAlign\n } = this;\n const {\n caretSize,\n cornerRadius\n } = options;\n const {\n topLeft,\n topRight,\n bottomLeft,\n bottomRight\n } = toTRBLCorners(cornerRadius);\n const {\n x: ptX,\n y: ptY\n } = tooltipPoint;\n const {\n width,\n height\n } = size;\n let x1, x2, x3, y1, y2, y3;\n if (yAlign === 'center') {\n y2 = ptY + height / 2;\n if (xAlign === 'left') {\n x1 = ptX;\n x2 = x1 - caretSize;\n y1 = y2 + caretSize;\n y3 = y2 - caretSize;\n } else {\n x1 = ptX + width;\n x2 = x1 + caretSize;\n y1 = y2 - caretSize;\n y3 = y2 + caretSize;\n }\n x3 = x1;\n } else {\n if (xAlign === 'left') {\n x2 = ptX + Math.max(topLeft, bottomLeft) + caretSize;\n } else if (xAlign === 'right') {\n x2 = ptX + width - Math.max(topRight, bottomRight) - caretSize;\n } else {\n x2 = this.caretX;\n }\n if (yAlign === 'top') {\n y1 = ptY;\n y2 = y1 - caretSize;\n x1 = x2 - caretSize;\n x3 = x2 + caretSize;\n } else {\n y1 = ptY + height;\n y2 = y1 + caretSize;\n x1 = x2 + caretSize;\n x3 = x2 - caretSize;\n }\n y3 = y1;\n }\n return {\n x1,\n x2,\n x3,\n y1,\n y2,\n y3\n };\n }\n drawTitle(pt, ctx, options) {\n const title = this.title;\n const length = title.length;\n let titleFont, titleSpacing, i;\n if (length) {\n const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n pt.x = getAlignedX(this, options.titleAlign, options);\n ctx.textAlign = rtlHelper.textAlign(options.titleAlign);\n ctx.textBaseline = 'middle';\n titleFont = toFont(options.titleFont);\n titleSpacing = options.titleSpacing;\n ctx.fillStyle = options.titleColor;\n ctx.font = titleFont.string;\n for (i = 0; i < length; ++i) {\n ctx.fillText(title[i], rtlHelper.x(pt.x), pt.y + titleFont.lineHeight / 2);\n pt.y += titleFont.lineHeight + titleSpacing;\n if (i + 1 === length) {\n pt.y += options.titleMarginBottom - titleSpacing;\n }\n }\n }\n }\n _drawColorBox(ctx, pt, i, rtlHelper, options) {\n const labelColor = this.labelColors[i];\n const labelPointStyle = this.labelPointStyles[i];\n const {\n boxHeight,\n boxWidth\n } = options;\n const bodyFont = toFont(options.bodyFont);\n const colorX = getAlignedX(this, 'left', options);\n const rtlColorX = rtlHelper.x(colorX);\n const yOffSet = boxHeight < bodyFont.lineHeight ? (bodyFont.lineHeight - boxHeight) / 2 : 0;\n const colorY = pt.y + yOffSet;\n if (options.usePointStyle) {\n const drawOptions = {\n radius: Math.min(boxWidth, boxHeight) / 2,\n pointStyle: labelPointStyle.pointStyle,\n rotation: labelPointStyle.rotation,\n borderWidth: 1\n };\n const centerX = rtlHelper.leftForLtr(rtlColorX, boxWidth) + boxWidth / 2;\n const centerY = colorY + boxHeight / 2;\n ctx.strokeStyle = options.multiKeyBackground;\n ctx.fillStyle = options.multiKeyBackground;\n drawPoint(ctx, drawOptions, centerX, centerY);\n ctx.strokeStyle = labelColor.borderColor;\n ctx.fillStyle = labelColor.backgroundColor;\n drawPoint(ctx, drawOptions, centerX, centerY);\n } else {\n ctx.lineWidth = isObject(labelColor.borderWidth) ? Math.max(...Object.values(labelColor.borderWidth)) : labelColor.borderWidth || 1;\n ctx.strokeStyle = labelColor.borderColor;\n ctx.setLineDash(labelColor.borderDash || []);\n ctx.lineDashOffset = labelColor.borderDashOffset || 0;\n const outerX = rtlHelper.leftForLtr(rtlColorX, boxWidth);\n const innerX = rtlHelper.leftForLtr(rtlHelper.xPlus(rtlColorX, 1), boxWidth - 2);\n const borderRadius = toTRBLCorners(labelColor.borderRadius);\n if (Object.values(borderRadius).some(v => v !== 0)) {\n ctx.beginPath();\n ctx.fillStyle = options.multiKeyBackground;\n addRoundedRectPath(ctx, {\n x: outerX,\n y: colorY,\n w: boxWidth,\n h: boxHeight,\n radius: borderRadius\n });\n ctx.fill();\n ctx.stroke();\n ctx.fillStyle = labelColor.backgroundColor;\n ctx.beginPath();\n addRoundedRectPath(ctx, {\n x: innerX,\n y: colorY + 1,\n w: boxWidth - 2,\n h: boxHeight - 2,\n radius: borderRadius\n });\n ctx.fill();\n } else {\n ctx.fillStyle = options.multiKeyBackground;\n ctx.fillRect(outerX, colorY, boxWidth, boxHeight);\n ctx.strokeRect(outerX, colorY, boxWidth, boxHeight);\n ctx.fillStyle = labelColor.backgroundColor;\n ctx.fillRect(innerX, colorY + 1, boxWidth - 2, boxHeight - 2);\n }\n }\n ctx.fillStyle = this.labelTextColors[i];\n }\n drawBody(pt, ctx, options) {\n const {\n body\n } = this;\n const {\n bodySpacing,\n bodyAlign,\n displayColors,\n boxHeight,\n boxWidth,\n boxPadding\n } = options;\n const bodyFont = toFont(options.bodyFont);\n let bodyLineHeight = bodyFont.lineHeight;\n let xLinePadding = 0;\n const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n const fillLineOfText = function (line) {\n ctx.fillText(line, rtlHelper.x(pt.x + xLinePadding), pt.y + bodyLineHeight / 2);\n pt.y += bodyLineHeight + bodySpacing;\n };\n const bodyAlignForCalculation = rtlHelper.textAlign(bodyAlign);\n let bodyItem, textColor, lines, i, j, ilen, jlen;\n ctx.textAlign = bodyAlign;\n ctx.textBaseline = 'middle';\n ctx.font = bodyFont.string;\n pt.x = getAlignedX(this, bodyAlignForCalculation, options);\n ctx.fillStyle = options.bodyColor;\n each(this.beforeBody, fillLineOfText);\n xLinePadding = displayColors && bodyAlignForCalculation !== 'right' ? bodyAlign === 'center' ? boxWidth / 2 + boxPadding : boxWidth + 2 + boxPadding : 0;\n for (i = 0, ilen = body.length; i < ilen; ++i) {\n bodyItem = body[i];\n textColor = this.labelTextColors[i];\n ctx.fillStyle = textColor;\n each(bodyItem.before, fillLineOfText);\n lines = bodyItem.lines;\n if (displayColors && lines.length) {\n this._drawColorBox(ctx, pt, i, rtlHelper, options);\n bodyLineHeight = Math.max(bodyFont.lineHeight, boxHeight);\n }\n for (j = 0, jlen = lines.length; j < jlen; ++j) {\n fillLineOfText(lines[j]);\n bodyLineHeight = bodyFont.lineHeight;\n }\n each(bodyItem.after, fillLineOfText);\n }\n xLinePadding = 0;\n bodyLineHeight = bodyFont.lineHeight;\n each(this.afterBody, fillLineOfText);\n pt.y -= bodySpacing;\n }\n drawFooter(pt, ctx, options) {\n const footer = this.footer;\n const length = footer.length;\n let footerFont, i;\n if (length) {\n const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n pt.x = getAlignedX(this, options.footerAlign, options);\n pt.y += options.footerMarginTop;\n ctx.textAlign = rtlHelper.textAlign(options.footerAlign);\n ctx.textBaseline = 'middle';\n footerFont = toFont(options.footerFont);\n ctx.fillStyle = options.footerColor;\n ctx.font = footerFont.string;\n for (i = 0; i < length; ++i) {\n ctx.fillText(footer[i], rtlHelper.x(pt.x), pt.y + footerFont.lineHeight / 2);\n pt.y += footerFont.lineHeight + options.footerSpacing;\n }\n }\n }\n drawBackground(pt, ctx, tooltipSize, options) {\n const {\n xAlign,\n yAlign\n } = this;\n const {\n x,\n y\n } = pt;\n const {\n width,\n height\n } = tooltipSize;\n const {\n topLeft,\n topRight,\n bottomLeft,\n bottomRight\n } = toTRBLCorners(options.cornerRadius);\n ctx.fillStyle = options.backgroundColor;\n ctx.strokeStyle = options.borderColor;\n ctx.lineWidth = options.borderWidth;\n ctx.beginPath();\n ctx.moveTo(x + topLeft, y);\n if (yAlign === 'top') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x + width - topRight, y);\n ctx.quadraticCurveTo(x + width, y, x + width, y + topRight);\n if (yAlign === 'center' && xAlign === 'right') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x + width, y + height - bottomRight);\n ctx.quadraticCurveTo(x + width, y + height, x + width - bottomRight, y + height);\n if (yAlign === 'bottom') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x + bottomLeft, y + height);\n ctx.quadraticCurveTo(x, y + height, x, y + height - bottomLeft);\n if (yAlign === 'center' && xAlign === 'left') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x, y + topLeft);\n ctx.quadraticCurveTo(x, y, x + topLeft, y);\n ctx.closePath();\n ctx.fill();\n if (options.borderWidth > 0) {\n ctx.stroke();\n }\n }\n _updateAnimationTarget(options) {\n const chart = this.chart;\n const anims = this.$animations;\n const animX = anims && anims.x;\n const animY = anims && anims.y;\n if (animX || animY) {\n const position = positioners[options.position].call(this, this._active, this._eventPosition);\n if (!position) {\n return;\n }\n const size = this._size = getTooltipSize(this, options);\n const positionAndSize = Object.assign({}, position, this._size);\n const alignment = determineAlignment(chart, options, positionAndSize);\n const point = getBackgroundPoint(options, positionAndSize, alignment, chart);\n if (animX._to !== point.x || animY._to !== point.y) {\n this.xAlign = alignment.xAlign;\n this.yAlign = alignment.yAlign;\n this.width = size.width;\n this.height = size.height;\n this.caretX = position.x;\n this.caretY = position.y;\n this._resolveAnimations().update(this, point);\n }\n }\n }\n _willRender() {\n return !!this.opacity;\n }\n draw(ctx) {\n const options = this.options.setContext(this.getContext());\n let opacity = this.opacity;\n if (!opacity) {\n return;\n }\n this._updateAnimationTarget(options);\n const tooltipSize = {\n width: this.width,\n height: this.height\n };\n const pt = {\n x: this.x,\n y: this.y\n };\n opacity = Math.abs(opacity) < 1e-3 ? 0 : opacity;\n const padding = toPadding(options.padding);\n const hasTooltipContent = this.title.length || this.beforeBody.length || this.body.length || this.afterBody.length || this.footer.length;\n if (options.enabled && hasTooltipContent) {\n ctx.save();\n ctx.globalAlpha = opacity;\n this.drawBackground(pt, ctx, tooltipSize, options);\n overrideTextDirection(ctx, options.textDirection);\n pt.y += padding.top;\n this.drawTitle(pt, ctx, options);\n this.drawBody(pt, ctx, options);\n this.drawFooter(pt, ctx, options);\n restoreTextDirection(ctx, options.textDirection);\n ctx.restore();\n }\n }\n getActiveElements() {\n return this._active || [];\n }\n setActiveElements(activeElements, eventPosition) {\n const lastActive = this._active;\n const active = activeElements.map(({\n datasetIndex,\n index\n }) => {\n const meta = this.chart.getDatasetMeta(datasetIndex);\n if (!meta) {\n throw new Error('Cannot find a dataset at index ' + datasetIndex);\n }\n return {\n datasetIndex,\n element: meta.data[index],\n index\n };\n });\n const changed = !_elementsEqual(lastActive, active);\n const positionChanged = this._positionChanged(active, eventPosition);\n if (changed || positionChanged) {\n this._active = active;\n this._eventPosition = eventPosition;\n this._ignoreReplayEvents = true;\n this.update(true);\n }\n }\n handleEvent(e, replay, inChartArea = true) {\n if (replay && this._ignoreReplayEvents) {\n return false;\n }\n this._ignoreReplayEvents = false;\n const options = this.options;\n const lastActive = this._active || [];\n const active = this._getActiveElements(e, lastActive, replay, inChartArea);\n const positionChanged = this._positionChanged(active, e);\n const changed = replay || !_elementsEqual(active, lastActive) || positionChanged;\n if (changed) {\n this._active = active;\n if (options.enabled || options.external) {\n this._eventPosition = {\n x: e.x,\n y: e.y\n };\n this.update(true, replay);\n }\n }\n return changed;\n }\n _getActiveElements(e, lastActive, replay, inChartArea) {\n const options = this.options;\n if (e.type === 'mouseout') {\n return [];\n }\n if (!inChartArea) {\n return lastActive.filter(i => this.chart.data.datasets[i.datasetIndex] && this.chart.getDatasetMeta(i.datasetIndex).controller.getParsed(i.index) !== undefined);\n }\n const active = this.chart.getElementsAtEventForMode(e, options.mode, options, replay);\n if (options.reverse) {\n active.reverse();\n }\n return active;\n }\n _positionChanged(active, e) {\n const {\n caretX,\n caretY,\n options\n } = this;\n const position = positioners[options.position].call(this, active, e);\n return position !== false && (caretX !== position.x || caretY !== position.y);\n }\n }\n return Tooltip;\n})();\nvar plugin_tooltip = {\n id: 'tooltip',\n _element: Tooltip,\n positioners,\n afterInit(chart, _args, options) {\n if (options) {\n chart.tooltip = new Tooltip({\n chart,\n options\n });\n }\n },\n beforeUpdate(chart, _args, options) {\n if (chart.tooltip) {\n chart.tooltip.initialize(options);\n }\n },\n reset(chart, _args, options) {\n if (chart.tooltip) {\n chart.tooltip.initialize(options);\n }\n },\n afterDraw(chart) {\n const tooltip = chart.tooltip;\n if (tooltip && tooltip._willRender()) {\n const args = {\n tooltip\n };\n if (chart.notifyPlugins('beforeTooltipDraw', {\n ...args,\n cancelable: true\n }) === false) {\n return;\n }\n tooltip.draw(chart.ctx);\n chart.notifyPlugins('afterTooltipDraw', args);\n }\n },\n afterEvent(chart, args) {\n if (chart.tooltip) {\n const useFinalPosition = args.replay;\n if (chart.tooltip.handleEvent(args.event, useFinalPosition, args.inChartArea)) {\n args.changed = true;\n }\n }\n },\n defaults: {\n enabled: true,\n external: null,\n position: 'average',\n backgroundColor: 'rgba(0,0,0,0.8)',\n titleColor: '#fff',\n titleFont: {\n weight: 'bold'\n },\n titleSpacing: 2,\n titleMarginBottom: 6,\n titleAlign: 'left',\n bodyColor: '#fff',\n bodySpacing: 2,\n bodyFont: {},\n bodyAlign: 'left',\n footerColor: '#fff',\n footerSpacing: 2,\n footerMarginTop: 6,\n footerFont: {\n weight: 'bold'\n },\n footerAlign: 'left',\n padding: 6,\n caretPadding: 2,\n caretSize: 5,\n cornerRadius: 6,\n boxHeight: (ctx, opts) => opts.bodyFont.size,\n boxWidth: (ctx, opts) => opts.bodyFont.size,\n multiKeyBackground: '#fff',\n displayColors: true,\n boxPadding: 0,\n borderColor: 'rgba(0,0,0,0)',\n borderWidth: 0,\n animation: {\n duration: 400,\n easing: 'easeOutQuart'\n },\n animations: {\n numbers: {\n type: 'number',\n properties: ['x', 'y', 'width', 'height', 'caretX', 'caretY']\n },\n opacity: {\n easing: 'linear',\n duration: 200\n }\n },\n callbacks: defaultCallbacks\n },\n defaultRoutes: {\n bodyFont: 'font',\n footerFont: 'font',\n titleFont: 'font'\n },\n descriptors: {\n _scriptable: name => name !== 'filter' && name !== 'itemSort' && name !== 'external',\n _indexable: false,\n callbacks: {\n _scriptable: false,\n _indexable: false\n },\n animation: {\n _fallback: false\n },\n animations: {\n _fallback: 'animation'\n }\n },\n additionalOptionScopes: ['interaction']\n};\nvar plugins = /*#__PURE__*/Object.freeze({\n __proto__: null,\n Colors: plugin_colors,\n Decimation: plugin_decimation,\n Filler: index,\n Legend: plugin_legend,\n SubTitle: plugin_subtitle,\n Title: plugin_title,\n Tooltip: plugin_tooltip\n});\nconst addIfString = (labels, raw, index, addedLabels) => {\n if (typeof raw === 'string') {\n index = labels.push(raw) - 1;\n addedLabels.unshift({\n index,\n label: raw\n });\n } else if (isNaN(raw)) {\n index = null;\n }\n return index;\n};\nfunction findOrAddLabel(labels, raw, index, addedLabels) {\n const first = labels.indexOf(raw);\n if (first === -1) {\n return addIfString(labels, raw, index, addedLabels);\n }\n const last = labels.lastIndexOf(raw);\n return first !== last ? index : first;\n}\nconst validIndex = (index, max) => index === null ? null : _limitValue(Math.round(index), 0, max);\nfunction _getLabelForValue(value) {\n const labels = this.getLabels();\n if (value >= 0 && value < labels.length) {\n return labels[value];\n }\n return value;\n}\nlet CategoryScale = /*#__PURE__*/(() => {\n class CategoryScale extends Scale {\n static id = 'category';\n static defaults = {\n ticks: {\n callback: _getLabelForValue\n }\n };\n constructor(cfg) {\n super(cfg);\n this._startValue = undefined;\n this._valueRange = 0;\n this._addedLabels = [];\n }\n init(scaleOptions) {\n const added = this._addedLabels;\n if (added.length) {\n const labels = this.getLabels();\n for (const {\n index,\n label\n } of added) {\n if (labels[index] === label) {\n labels.splice(index, 1);\n }\n }\n this._addedLabels = [];\n }\n super.init(scaleOptions);\n }\n parse(raw, index) {\n if (isNullOrUndef(raw)) {\n return null;\n }\n const labels = this.getLabels();\n index = isFinite(index) && labels[index] === raw ? index : findOrAddLabel(labels, raw, valueOrDefault(index, raw), this._addedLabels);\n return validIndex(index, labels.length - 1);\n }\n determineDataLimits() {\n const {\n minDefined,\n maxDefined\n } = this.getUserBounds();\n let {\n min,\n max\n } = this.getMinMax(true);\n if (this.options.bounds === 'ticks') {\n if (!minDefined) {\n min = 0;\n }\n if (!maxDefined) {\n max = this.getLabels().length - 1;\n }\n }\n this.min = min;\n this.max = max;\n }\n buildTicks() {\n const min = this.min;\n const max = this.max;\n const offset = this.options.offset;\n const ticks = [];\n let labels = this.getLabels();\n labels = min === 0 && max === labels.length - 1 ? labels : labels.slice(min, max + 1);\n this._valueRange = Math.max(labels.length - (offset ? 0 : 1), 1);\n this._startValue = this.min - (offset ? 0.5 : 0);\n for (let value = min; value <= max; value++) {\n ticks.push({\n value\n });\n }\n return ticks;\n }\n getLabelForValue(value) {\n return _getLabelForValue.call(this, value);\n }\n configure() {\n super.configure();\n if (!this.isHorizontal()) {\n this._reversePixels = !this._reversePixels;\n }\n }\n getPixelForValue(value) {\n if (typeof value !== 'number') {\n value = this.parse(value);\n }\n return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n }\n getPixelForTick(index) {\n const ticks = this.ticks;\n if (index < 0 || index > ticks.length - 1) {\n return null;\n }\n return this.getPixelForValue(ticks[index].value);\n }\n getValueForPixel(pixel) {\n return Math.round(this._startValue + this.getDecimalForPixel(pixel) * this._valueRange);\n }\n getBasePixel() {\n return this.bottom;\n }\n }\n return CategoryScale;\n})();\nfunction generateTicks$1(generationOptions, dataRange) {\n const ticks = [];\n const MIN_SPACING = 1e-14;\n const {\n bounds,\n step,\n min,\n max,\n precision,\n count,\n maxTicks,\n maxDigits,\n includeBounds\n } = generationOptions;\n const unit = step || 1;\n const maxSpaces = maxTicks - 1;\n const {\n min: rmin,\n max: rmax\n } = dataRange;\n const minDefined = !isNullOrUndef(min);\n const maxDefined = !isNullOrUndef(max);\n const countDefined = !isNullOrUndef(count);\n const minSpacing = (rmax - rmin) / (maxDigits + 1);\n let spacing = niceNum((rmax - rmin) / maxSpaces / unit) * unit;\n let factor, niceMin, niceMax, numSpaces;\n if (spacing < MIN_SPACING && !minDefined && !maxDefined) {\n return [{\n value: rmin\n }, {\n value: rmax\n }];\n }\n numSpaces = Math.ceil(rmax / spacing) - Math.floor(rmin / spacing);\n if (numSpaces > maxSpaces) {\n spacing = niceNum(numSpaces * spacing / maxSpaces / unit) * unit;\n }\n if (!isNullOrUndef(precision)) {\n factor = Math.pow(10, precision);\n spacing = Math.ceil(spacing * factor) / factor;\n }\n if (bounds === 'ticks') {\n niceMin = Math.floor(rmin / spacing) * spacing;\n niceMax = Math.ceil(rmax / spacing) * spacing;\n } else {\n niceMin = rmin;\n niceMax = rmax;\n }\n if (minDefined && maxDefined && step && almostWhole((max - min) / step, spacing / 1000)) {\n numSpaces = Math.round(Math.min((max - min) / spacing, maxTicks));\n spacing = (max - min) / numSpaces;\n niceMin = min;\n niceMax = max;\n } else if (countDefined) {\n niceMin = minDefined ? min : niceMin;\n niceMax = maxDefined ? max : niceMax;\n numSpaces = count - 1;\n spacing = (niceMax - niceMin) / numSpaces;\n } else {\n numSpaces = (niceMax - niceMin) / spacing;\n if (almostEquals(numSpaces, Math.round(numSpaces), spacing / 1000)) {\n numSpaces = Math.round(numSpaces);\n } else {\n numSpaces = Math.ceil(numSpaces);\n }\n }\n const decimalPlaces = Math.max(_decimalPlaces(spacing), _decimalPlaces(niceMin));\n factor = Math.pow(10, isNullOrUndef(precision) ? decimalPlaces : precision);\n niceMin = Math.round(niceMin * factor) / factor;\n niceMax = Math.round(niceMax * factor) / factor;\n let j = 0;\n if (minDefined) {\n if (includeBounds && niceMin !== min) {\n ticks.push({\n value: min\n });\n if (niceMin < min) {\n j++;\n }\n if (almostEquals(Math.round((niceMin + j * spacing) * factor) / factor, min, relativeLabelSize(min, minSpacing, generationOptions))) {\n j++;\n }\n } else if (niceMin < min) {\n j++;\n }\n }\n for (; j < numSpaces; ++j) {\n const tickValue = Math.round((niceMin + j * spacing) * factor) / factor;\n if (maxDefined && tickValue > max) {\n break;\n }\n ticks.push({\n value: tickValue\n });\n }\n if (maxDefined && includeBounds && niceMax !== max) {\n if (ticks.length && almostEquals(ticks[ticks.length - 1].value, max, relativeLabelSize(max, minSpacing, generationOptions))) {\n ticks[ticks.length - 1].value = max;\n } else {\n ticks.push({\n value: max\n });\n }\n } else if (!maxDefined || niceMax === max) {\n ticks.push({\n value: niceMax\n });\n }\n return ticks;\n}\nfunction relativeLabelSize(value, minSpacing, {\n horizontal,\n minRotation\n}) {\n const rad = toRadians(minRotation);\n const ratio = (horizontal ? Math.sin(rad) : Math.cos(rad)) || 0.001;\n const length = 0.75 * minSpacing * ('' + value).length;\n return Math.min(minSpacing / ratio, length);\n}\nclass LinearScaleBase extends Scale {\n constructor(cfg) {\n super(cfg);\n this.start = undefined;\n this.end = undefined;\n this._startValue = undefined;\n this._endValue = undefined;\n this._valueRange = 0;\n }\n parse(raw, index) {\n if (isNullOrUndef(raw)) {\n return null;\n }\n if ((typeof raw === 'number' || raw instanceof Number) && !isFinite(+raw)) {\n return null;\n }\n return +raw;\n }\n handleTickRangeOptions() {\n const {\n beginAtZero\n } = this.options;\n const {\n minDefined,\n maxDefined\n } = this.getUserBounds();\n let {\n min,\n max\n } = this;\n const setMin = v => min = minDefined ? min : v;\n const setMax = v => max = maxDefined ? max : v;\n if (beginAtZero) {\n const minSign = sign(min);\n const maxSign = sign(max);\n if (minSign < 0 && maxSign < 0) {\n setMax(0);\n } else if (minSign > 0 && maxSign > 0) {\n setMin(0);\n }\n }\n if (min === max) {\n let offset = max === 0 ? 1 : Math.abs(max * 0.05);\n setMax(max + offset);\n if (!beginAtZero) {\n setMin(min - offset);\n }\n }\n this.min = min;\n this.max = max;\n }\n getTickLimit() {\n const tickOpts = this.options.ticks;\n let {\n maxTicksLimit,\n stepSize\n } = tickOpts;\n let maxTicks;\n if (stepSize) {\n maxTicks = Math.ceil(this.max / stepSize) - Math.floor(this.min / stepSize) + 1;\n if (maxTicks > 1000) {\n console.warn(`scales.${this.id}.ticks.stepSize: ${stepSize} would result generating up to ${maxTicks} ticks. Limiting to 1000.`);\n maxTicks = 1000;\n }\n } else {\n maxTicks = this.computeTickLimit();\n maxTicksLimit = maxTicksLimit || 11;\n }\n if (maxTicksLimit) {\n maxTicks = Math.min(maxTicksLimit, maxTicks);\n }\n return maxTicks;\n }\n computeTickLimit() {\n return Number.POSITIVE_INFINITY;\n }\n buildTicks() {\n const opts = this.options;\n const tickOpts = opts.ticks;\n let maxTicks = this.getTickLimit();\n maxTicks = Math.max(2, maxTicks);\n const numericGeneratorOptions = {\n maxTicks,\n bounds: opts.bounds,\n min: opts.min,\n max: opts.max,\n precision: tickOpts.precision,\n step: tickOpts.stepSize,\n count: tickOpts.count,\n maxDigits: this._maxDigits(),\n horizontal: this.isHorizontal(),\n minRotation: tickOpts.minRotation || 0,\n includeBounds: tickOpts.includeBounds !== false\n };\n const dataRange = this._range || this;\n const ticks = generateTicks$1(numericGeneratorOptions, dataRange);\n if (opts.bounds === 'ticks') {\n _setMinAndMaxByKey(ticks, this, 'value');\n }\n if (opts.reverse) {\n ticks.reverse();\n this.start = this.max;\n this.end = this.min;\n } else {\n this.start = this.min;\n this.end = this.max;\n }\n return ticks;\n }\n configure() {\n const ticks = this.ticks;\n let start = this.min;\n let end = this.max;\n super.configure();\n if (this.options.offset && ticks.length) {\n const offset = (end - start) / Math.max(ticks.length - 1, 1) / 2;\n start -= offset;\n end += offset;\n }\n this._startValue = start;\n this._endValue = end;\n this._valueRange = end - start;\n }\n getLabelForValue(value) {\n return formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n }\n}\nclass LinearScale extends LinearScaleBase {\n static id = 'linear';\n static defaults = {\n ticks: {\n callback: Ticks.formatters.numeric\n }\n };\n determineDataLimits() {\n const {\n min,\n max\n } = this.getMinMax(true);\n this.min = isNumberFinite(min) ? min : 0;\n this.max = isNumberFinite(max) ? max : 1;\n this.handleTickRangeOptions();\n }\n computeTickLimit() {\n const horizontal = this.isHorizontal();\n const length = horizontal ? this.width : this.height;\n const minRotation = toRadians(this.options.ticks.minRotation);\n const ratio = (horizontal ? Math.sin(minRotation) : Math.cos(minRotation)) || 0.001;\n const tickFont = this._resolveTickFontOptions(0);\n return Math.ceil(length / Math.min(40, tickFont.lineHeight / ratio));\n }\n getPixelForValue(value) {\n return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n }\n getValueForPixel(pixel) {\n return this._startValue + this.getDecimalForPixel(pixel) * this._valueRange;\n }\n}\nconst log10Floor = v => Math.floor(log10(v));\nconst changeExponent = (v, m) => Math.pow(10, log10Floor(v) + m);\nfunction isMajor(tickVal) {\n const remain = tickVal / Math.pow(10, log10Floor(tickVal));\n return remain === 1;\n}\nfunction steps(min, max, rangeExp) {\n const rangeStep = Math.pow(10, rangeExp);\n const start = Math.floor(min / rangeStep);\n const end = Math.ceil(max / rangeStep);\n return end - start;\n}\nfunction startExp(min, max) {\n const range = max - min;\n let rangeExp = log10Floor(range);\n while (steps(min, max, rangeExp) > 10) {\n rangeExp++;\n }\n while (steps(min, max, rangeExp) < 10) {\n rangeExp--;\n }\n return Math.min(rangeExp, log10Floor(min));\n}\nfunction generateTicks(generationOptions, {\n min,\n max\n}) {\n min = finiteOrDefault(generationOptions.min, min);\n const ticks = [];\n const minExp = log10Floor(min);\n let exp = startExp(min, max);\n let precision = exp < 0 ? Math.pow(10, Math.abs(exp)) : 1;\n const stepSize = Math.pow(10, exp);\n const base = minExp > exp ? Math.pow(10, minExp) : 0;\n const start = Math.round((min - base) * precision) / precision;\n const offset = Math.floor((min - base) / stepSize / 10) * stepSize * 10;\n let significand = Math.floor((start - offset) / Math.pow(10, exp));\n let value = finiteOrDefault(generationOptions.min, Math.round((base + offset + significand * Math.pow(10, exp)) * precision) / precision);\n while (value < max) {\n ticks.push({\n value,\n major: isMajor(value),\n significand\n });\n if (significand >= 10) {\n significand = significand < 15 ? 15 : 20;\n } else {\n significand++;\n }\n if (significand >= 20) {\n exp++;\n significand = 2;\n precision = exp >= 0 ? 1 : precision;\n }\n value = Math.round((base + offset + significand * Math.pow(10, exp)) * precision) / precision;\n }\n const lastTick = finiteOrDefault(generationOptions.max, value);\n ticks.push({\n value: lastTick,\n major: isMajor(lastTick),\n significand\n });\n return ticks;\n}\nclass LogarithmicScale extends Scale {\n static id = 'logarithmic';\n static defaults = {\n ticks: {\n callback: Ticks.formatters.logarithmic,\n major: {\n enabled: true\n }\n }\n };\n constructor(cfg) {\n super(cfg);\n this.start = undefined;\n this.end = undefined;\n this._startValue = undefined;\n this._valueRange = 0;\n }\n parse(raw, index) {\n const value = LinearScaleBase.prototype.parse.apply(this, [raw, index]);\n if (value === 0) {\n this._zero = true;\n return undefined;\n }\n return isNumberFinite(value) && value > 0 ? value : null;\n }\n determineDataLimits() {\n const {\n min,\n max\n } = this.getMinMax(true);\n this.min = isNumberFinite(min) ? Math.max(0, min) : null;\n this.max = isNumberFinite(max) ? Math.max(0, max) : null;\n if (this.options.beginAtZero) {\n this._zero = true;\n }\n if (this._zero && this.min !== this._suggestedMin && !isNumberFinite(this._userMin)) {\n this.min = min === changeExponent(this.min, 0) ? changeExponent(this.min, -1) : changeExponent(this.min, 0);\n }\n this.handleTickRangeOptions();\n }\n handleTickRangeOptions() {\n const {\n minDefined,\n maxDefined\n } = this.getUserBounds();\n let min = this.min;\n let max = this.max;\n const setMin = v => min = minDefined ? min : v;\n const setMax = v => max = maxDefined ? max : v;\n if (min === max) {\n if (min <= 0) {\n setMin(1);\n setMax(10);\n } else {\n setMin(changeExponent(min, -1));\n setMax(changeExponent(max, +1));\n }\n }\n if (min <= 0) {\n setMin(changeExponent(max, -1));\n }\n if (max <= 0) {\n setMax(changeExponent(min, +1));\n }\n this.min = min;\n this.max = max;\n }\n buildTicks() {\n const opts = this.options;\n const generationOptions = {\n min: this._userMin,\n max: this._userMax\n };\n const ticks = generateTicks(generationOptions, this);\n if (opts.bounds === 'ticks') {\n _setMinAndMaxByKey(ticks, this, 'value');\n }\n if (opts.reverse) {\n ticks.reverse();\n this.start = this.max;\n this.end = this.min;\n } else {\n this.start = this.min;\n this.end = this.max;\n }\n return ticks;\n }\n getLabelForValue(value) {\n return value === undefined ? '0' : formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n }\n configure() {\n const start = this.min;\n super.configure();\n this._startValue = log10(start);\n this._valueRange = log10(this.max) - log10(start);\n }\n getPixelForValue(value) {\n if (value === undefined || value === 0) {\n value = this.min;\n }\n if (value === null || isNaN(value)) {\n return NaN;\n }\n return this.getPixelForDecimal(value === this.min ? 0 : (log10(value) - this._startValue) / this._valueRange);\n }\n getValueForPixel(pixel) {\n const decimal = this.getDecimalForPixel(pixel);\n return Math.pow(10, this._startValue + decimal * this._valueRange);\n }\n}\nfunction getTickBackdropHeight(opts) {\n const tickOpts = opts.ticks;\n if (tickOpts.display && opts.display) {\n const padding = toPadding(tickOpts.backdropPadding);\n return valueOrDefault(tickOpts.font && tickOpts.font.size, defaults.font.size) + padding.height;\n }\n return 0;\n}\nfunction measureLabelSize(ctx, font, label) {\n label = isArray(label) ? label : [label];\n return {\n w: _longestText(ctx, font.string, label),\n h: label.length * font.lineHeight\n };\n}\nfunction determineLimits(angle, pos, size, min, max) {\n if (angle === min || angle === max) {\n return {\n start: pos - size / 2,\n end: pos + size / 2\n };\n } else if (angle < min || angle > max) {\n return {\n start: pos - size,\n end: pos\n };\n }\n return {\n start: pos,\n end: pos + size\n };\n}\nfunction fitWithPointLabels(scale) {\n const orig = {\n l: scale.left + scale._padding.left,\n r: scale.right - scale._padding.right,\n t: scale.top + scale._padding.top,\n b: scale.bottom - scale._padding.bottom\n };\n const limits = Object.assign({}, orig);\n const labelSizes = [];\n const padding = [];\n const valueCount = scale._pointLabels.length;\n const pointLabelOpts = scale.options.pointLabels;\n const additionalAngle = pointLabelOpts.centerPointLabels ? PI / valueCount : 0;\n for (let i = 0; i < valueCount; i++) {\n const opts = pointLabelOpts.setContext(scale.getPointLabelContext(i));\n padding[i] = opts.padding;\n const pointPosition = scale.getPointPosition(i, scale.drawingArea + padding[i], additionalAngle);\n const plFont = toFont(opts.font);\n const textSize = measureLabelSize(scale.ctx, plFont, scale._pointLabels[i]);\n labelSizes[i] = textSize;\n const angleRadians = _normalizeAngle(scale.getIndexAngle(i) + additionalAngle);\n const angle = Math.round(toDegrees(angleRadians));\n const hLimits = determineLimits(angle, pointPosition.x, textSize.w, 0, 180);\n const vLimits = determineLimits(angle, pointPosition.y, textSize.h, 90, 270);\n updateLimits(limits, orig, angleRadians, hLimits, vLimits);\n }\n scale.setCenterPoint(orig.l - limits.l, limits.r - orig.r, orig.t - limits.t, limits.b - orig.b);\n scale._pointLabelItems = buildPointLabelItems(scale, labelSizes, padding);\n}\nfunction updateLimits(limits, orig, angle, hLimits, vLimits) {\n const sin = Math.abs(Math.sin(angle));\n const cos = Math.abs(Math.cos(angle));\n let x = 0;\n let y = 0;\n if (hLimits.start < orig.l) {\n x = (orig.l - hLimits.start) / sin;\n limits.l = Math.min(limits.l, orig.l - x);\n } else if (hLimits.end > orig.r) {\n x = (hLimits.end - orig.r) / sin;\n limits.r = Math.max(limits.r, orig.r + x);\n }\n if (vLimits.start < orig.t) {\n y = (orig.t - vLimits.start) / cos;\n limits.t = Math.min(limits.t, orig.t - y);\n } else if (vLimits.end > orig.b) {\n y = (vLimits.end - orig.b) / cos;\n limits.b = Math.max(limits.b, orig.b + y);\n }\n}\nfunction createPointLabelItem(scale, index, itemOpts) {\n const outerDistance = scale.drawingArea;\n const {\n extra,\n additionalAngle,\n padding,\n size\n } = itemOpts;\n const pointLabelPosition = scale.getPointPosition(index, outerDistance + extra + padding, additionalAngle);\n const angle = Math.round(toDegrees(_normalizeAngle(pointLabelPosition.angle + HALF_PI)));\n const y = yForAngle(pointLabelPosition.y, size.h, angle);\n const textAlign = getTextAlignForAngle(angle);\n const left = leftForTextAlign(pointLabelPosition.x, size.w, textAlign);\n return {\n visible: true,\n x: pointLabelPosition.x,\n y,\n textAlign,\n left,\n top: y,\n right: left + size.w,\n bottom: y + size.h\n };\n}\nfunction isNotOverlapped(item, area) {\n if (!area) {\n return true;\n }\n const {\n left,\n top,\n right,\n bottom\n } = item;\n const apexesInArea = _isPointInArea({\n x: left,\n y: top\n }, area) || _isPointInArea({\n x: left,\n y: bottom\n }, area) || _isPointInArea({\n x: right,\n y: top\n }, area) || _isPointInArea({\n x: right,\n y: bottom\n }, area);\n return !apexesInArea;\n}\nfunction buildPointLabelItems(scale, labelSizes, padding) {\n const items = [];\n const valueCount = scale._pointLabels.length;\n const opts = scale.options;\n const {\n centerPointLabels,\n display\n } = opts.pointLabels;\n const itemOpts = {\n extra: getTickBackdropHeight(opts) / 2,\n additionalAngle: centerPointLabels ? PI / valueCount : 0\n };\n let area;\n for (let i = 0; i < valueCount; i++) {\n itemOpts.padding = padding[i];\n itemOpts.size = labelSizes[i];\n const item = createPointLabelItem(scale, i, itemOpts);\n items.push(item);\n if (display === 'auto') {\n item.visible = isNotOverlapped(item, area);\n if (item.visible) {\n area = item;\n }\n }\n }\n return items;\n}\nfunction getTextAlignForAngle(angle) {\n if (angle === 0 || angle === 180) {\n return 'center';\n } else if (angle < 180) {\n return 'left';\n }\n return 'right';\n}\nfunction leftForTextAlign(x, w, align) {\n if (align === 'right') {\n x -= w;\n } else if (align === 'center') {\n x -= w / 2;\n }\n return x;\n}\nfunction yForAngle(y, h, angle) {\n if (angle === 90 || angle === 270) {\n y -= h / 2;\n } else if (angle > 270 || angle < 90) {\n y -= h;\n }\n return y;\n}\nfunction drawPointLabelBox(ctx, opts, item) {\n const {\n left,\n top,\n right,\n bottom\n } = item;\n const {\n backdropColor\n } = opts;\n if (!isNullOrUndef(backdropColor)) {\n const borderRadius = toTRBLCorners(opts.borderRadius);\n const padding = toPadding(opts.backdropPadding);\n ctx.fillStyle = backdropColor;\n const backdropLeft = left - padding.left;\n const backdropTop = top - padding.top;\n const backdropWidth = right - left + padding.width;\n const backdropHeight = bottom - top + padding.height;\n if (Object.values(borderRadius).some(v => v !== 0)) {\n ctx.beginPath();\n addRoundedRectPath(ctx, {\n x: backdropLeft,\n y: backdropTop,\n w: backdropWidth,\n h: backdropHeight,\n radius: borderRadius\n });\n ctx.fill();\n } else {\n ctx.fillRect(backdropLeft, backdropTop, backdropWidth, backdropHeight);\n }\n }\n}\nfunction drawPointLabels(scale, labelCount) {\n const {\n ctx,\n options: {\n pointLabels\n }\n } = scale;\n for (let i = labelCount - 1; i >= 0; i--) {\n const item = scale._pointLabelItems[i];\n if (!item.visible) {\n continue;\n }\n const optsAtIndex = pointLabels.setContext(scale.getPointLabelContext(i));\n drawPointLabelBox(ctx, optsAtIndex, item);\n const plFont = toFont(optsAtIndex.font);\n const {\n x,\n y,\n textAlign\n } = item;\n renderText(ctx, scale._pointLabels[i], x, y + plFont.lineHeight / 2, plFont, {\n color: optsAtIndex.color,\n textAlign: textAlign,\n textBaseline: 'middle'\n });\n }\n}\nfunction pathRadiusLine(scale, radius, circular, labelCount) {\n const {\n ctx\n } = scale;\n if (circular) {\n ctx.arc(scale.xCenter, scale.yCenter, radius, 0, TAU);\n } else {\n let pointPosition = scale.getPointPosition(0, radius);\n ctx.moveTo(pointPosition.x, pointPosition.y);\n for (let i = 1; i < labelCount; i++) {\n pointPosition = scale.getPointPosition(i, radius);\n ctx.lineTo(pointPosition.x, pointPosition.y);\n }\n }\n}\nfunction drawRadiusLine(scale, gridLineOpts, radius, labelCount, borderOpts) {\n const ctx = scale.ctx;\n const circular = gridLineOpts.circular;\n const {\n color,\n lineWidth\n } = gridLineOpts;\n if (!circular && !labelCount || !color || !lineWidth || radius < 0) {\n return;\n }\n ctx.save();\n ctx.strokeStyle = color;\n ctx.lineWidth = lineWidth;\n ctx.setLineDash(borderOpts.dash || []);\n ctx.lineDashOffset = borderOpts.dashOffset;\n ctx.beginPath();\n pathRadiusLine(scale, radius, circular, labelCount);\n ctx.closePath();\n ctx.stroke();\n ctx.restore();\n}\nfunction createPointLabelContext(parent, index, label) {\n return createContext(parent, {\n label,\n index,\n type: 'pointLabel'\n });\n}\nclass RadialLinearScale extends LinearScaleBase {\n static id = 'radialLinear';\n static defaults = {\n display: true,\n animate: true,\n position: 'chartArea',\n angleLines: {\n display: true,\n lineWidth: 1,\n borderDash: [],\n borderDashOffset: 0.0\n },\n grid: {\n circular: false\n },\n startAngle: 0,\n ticks: {\n showLabelBackdrop: true,\n callback: Ticks.formatters.numeric\n },\n pointLabels: {\n backdropColor: undefined,\n backdropPadding: 2,\n display: true,\n font: {\n size: 10\n },\n callback(label) {\n return label;\n },\n padding: 5,\n centerPointLabels: false\n }\n };\n static defaultRoutes = {\n 'angleLines.color': 'borderColor',\n 'pointLabels.color': 'color',\n 'ticks.color': 'color'\n };\n static descriptors = {\n angleLines: {\n _fallback: 'grid'\n }\n };\n constructor(cfg) {\n super(cfg);\n this.xCenter = undefined;\n this.yCenter = undefined;\n this.drawingArea = undefined;\n this._pointLabels = [];\n this._pointLabelItems = [];\n }\n setDimensions() {\n const padding = this._padding = toPadding(getTickBackdropHeight(this.options) / 2);\n const w = this.width = this.maxWidth - padding.width;\n const h = this.height = this.maxHeight - padding.height;\n this.xCenter = Math.floor(this.left + w / 2 + padding.left);\n this.yCenter = Math.floor(this.top + h / 2 + padding.top);\n this.drawingArea = Math.floor(Math.min(w, h) / 2);\n }\n determineDataLimits() {\n const {\n min,\n max\n } = this.getMinMax(false);\n this.min = isNumberFinite(min) && !isNaN(min) ? min : 0;\n this.max = isNumberFinite(max) && !isNaN(max) ? max : 0;\n this.handleTickRangeOptions();\n }\n computeTickLimit() {\n return Math.ceil(this.drawingArea / getTickBackdropHeight(this.options));\n }\n generateTickLabels(ticks) {\n LinearScaleBase.prototype.generateTickLabels.call(this, ticks);\n this._pointLabels = this.getLabels().map((value, index) => {\n const label = callback(this.options.pointLabels.callback, [value, index], this);\n return label || label === 0 ? label : '';\n }).filter((v, i) => this.chart.getDataVisibility(i));\n }\n fit() {\n const opts = this.options;\n if (opts.display && opts.pointLabels.display) {\n fitWithPointLabels(this);\n } else {\n this.setCenterPoint(0, 0, 0, 0);\n }\n }\n setCenterPoint(leftMovement, rightMovement, topMovement, bottomMovement) {\n this.xCenter += Math.floor((leftMovement - rightMovement) / 2);\n this.yCenter += Math.floor((topMovement - bottomMovement) / 2);\n this.drawingArea -= Math.min(this.drawingArea / 2, Math.max(leftMovement, rightMovement, topMovement, bottomMovement));\n }\n getIndexAngle(index) {\n const angleMultiplier = TAU / (this._pointLabels.length || 1);\n const startAngle = this.options.startAngle || 0;\n return _normalizeAngle(index * angleMultiplier + toRadians(startAngle));\n }\n getDistanceFromCenterForValue(value) {\n if (isNullOrUndef(value)) {\n return NaN;\n }\n const scalingFactor = this.drawingArea / (this.max - this.min);\n if (this.options.reverse) {\n return (this.max - value) * scalingFactor;\n }\n return (value - this.min) * scalingFactor;\n }\n getValueForDistanceFromCenter(distance) {\n if (isNullOrUndef(distance)) {\n return NaN;\n }\n const scaledDistance = distance / (this.drawingArea / (this.max - this.min));\n return this.options.reverse ? this.max - scaledDistance : this.min + scaledDistance;\n }\n getPointLabelContext(index) {\n const pointLabels = this._pointLabels || [];\n if (index >= 0 && index < pointLabels.length) {\n const pointLabel = pointLabels[index];\n return createPointLabelContext(this.getContext(), index, pointLabel);\n }\n }\n getPointPosition(index, distanceFromCenter, additionalAngle = 0) {\n const angle = this.getIndexAngle(index) - HALF_PI + additionalAngle;\n return {\n x: Math.cos(angle) * distanceFromCenter + this.xCenter,\n y: Math.sin(angle) * distanceFromCenter + this.yCenter,\n angle\n };\n }\n getPointPositionForValue(index, value) {\n return this.getPointPosition(index, this.getDistanceFromCenterForValue(value));\n }\n getBasePosition(index) {\n return this.getPointPositionForValue(index || 0, this.getBaseValue());\n }\n getPointLabelPosition(index) {\n const {\n left,\n top,\n right,\n bottom\n } = this._pointLabelItems[index];\n return {\n left,\n top,\n right,\n bottom\n };\n }\n drawBackground() {\n const {\n backgroundColor,\n grid: {\n circular\n }\n } = this.options;\n if (backgroundColor) {\n const ctx = this.ctx;\n ctx.save();\n ctx.beginPath();\n pathRadiusLine(this, this.getDistanceFromCenterForValue(this._endValue), circular, this._pointLabels.length);\n ctx.closePath();\n ctx.fillStyle = backgroundColor;\n ctx.fill();\n ctx.restore();\n }\n }\n drawGrid() {\n const ctx = this.ctx;\n const opts = this.options;\n const {\n angleLines,\n grid,\n border\n } = opts;\n const labelCount = this._pointLabels.length;\n let i, offset, position;\n if (opts.pointLabels.display) {\n drawPointLabels(this, labelCount);\n }\n if (grid.display) {\n this.ticks.forEach((tick, index) => {\n if (index !== 0 || index === 0 && this.min < 0) {\n offset = this.getDistanceFromCenterForValue(tick.value);\n const context = this.getContext(index);\n const optsAtIndex = grid.setContext(context);\n const optsAtIndexBorder = border.setContext(context);\n drawRadiusLine(this, optsAtIndex, offset, labelCount, optsAtIndexBorder);\n }\n });\n }\n if (angleLines.display) {\n ctx.save();\n for (i = labelCount - 1; i >= 0; i--) {\n const optsAtIndex = angleLines.setContext(this.getPointLabelContext(i));\n const {\n color,\n lineWidth\n } = optsAtIndex;\n if (!lineWidth || !color) {\n continue;\n }\n ctx.lineWidth = lineWidth;\n ctx.strokeStyle = color;\n ctx.setLineDash(optsAtIndex.borderDash);\n ctx.lineDashOffset = optsAtIndex.borderDashOffset;\n offset = this.getDistanceFromCenterForValue(opts.reverse ? this.min : this.max);\n position = this.getPointPosition(i, offset);\n ctx.beginPath();\n ctx.moveTo(this.xCenter, this.yCenter);\n ctx.lineTo(position.x, position.y);\n ctx.stroke();\n }\n ctx.restore();\n }\n }\n drawBorder() {}\n drawLabels() {\n const ctx = this.ctx;\n const opts = this.options;\n const tickOpts = opts.ticks;\n if (!tickOpts.display) {\n return;\n }\n const startAngle = this.getIndexAngle(0);\n let offset, width;\n ctx.save();\n ctx.translate(this.xCenter, this.yCenter);\n ctx.rotate(startAngle);\n ctx.textAlign = 'center';\n ctx.textBaseline = 'middle';\n this.ticks.forEach((tick, index) => {\n if (index === 0 && this.min >= 0 && !opts.reverse) {\n return;\n }\n const optsAtIndex = tickOpts.setContext(this.getContext(index));\n const tickFont = toFont(optsAtIndex.font);\n offset = this.getDistanceFromCenterForValue(this.ticks[index].value);\n if (optsAtIndex.showLabelBackdrop) {\n ctx.font = tickFont.string;\n width = ctx.measureText(tick.label).width;\n ctx.fillStyle = optsAtIndex.backdropColor;\n const padding = toPadding(optsAtIndex.backdropPadding);\n ctx.fillRect(-width / 2 - padding.left, -offset - tickFont.size / 2 - padding.top, width + padding.width, tickFont.size + padding.height);\n }\n renderText(ctx, tick.label, 0, -offset, tickFont, {\n color: optsAtIndex.color,\n strokeColor: optsAtIndex.textStrokeColor,\n strokeWidth: optsAtIndex.textStrokeWidth\n });\n });\n ctx.restore();\n }\n drawTitle() {}\n}\nconst INTERVALS = {\n millisecond: {\n common: true,\n size: 1,\n steps: 1000\n },\n second: {\n common: true,\n size: 1000,\n steps: 60\n },\n minute: {\n common: true,\n size: 60000,\n steps: 60\n },\n hour: {\n common: true,\n size: 3600000,\n steps: 24\n },\n day: {\n common: true,\n size: 86400000,\n steps: 30\n },\n week: {\n common: false,\n size: 604800000,\n steps: 4\n },\n month: {\n common: true,\n size: 2.628e9,\n steps: 12\n },\n quarter: {\n common: false,\n size: 7.884e9,\n steps: 4\n },\n year: {\n common: true,\n size: 3.154e10\n }\n};\nconst UNITS = /* #__PURE__ */Object.keys(INTERVALS);\nfunction sorter(a, b) {\n return a - b;\n}\nfunction parse(scale, input) {\n if (isNullOrUndef(input)) {\n return null;\n }\n const adapter = scale._adapter;\n const {\n parser,\n round,\n isoWeekday\n } = scale._parseOpts;\n let value = input;\n if (typeof parser === 'function') {\n value = parser(value);\n }\n if (!isNumberFinite(value)) {\n value = typeof parser === 'string' ? adapter.parse(value, parser) : adapter.parse(value);\n }\n if (value === null) {\n return null;\n }\n if (round) {\n value = round === 'week' && (isNumber(isoWeekday) || isoWeekday === true) ? adapter.startOf(value, 'isoWeek', isoWeekday) : adapter.startOf(value, round);\n }\n return +value;\n}\nfunction determineUnitForAutoTicks(minUnit, min, max, capacity) {\n const ilen = UNITS.length;\n for (let i = UNITS.indexOf(minUnit); i < ilen - 1; ++i) {\n const interval = INTERVALS[UNITS[i]];\n const factor = interval.steps ? interval.steps : Number.MAX_SAFE_INTEGER;\n if (interval.common && Math.ceil((max - min) / (factor * interval.size)) <= capacity) {\n return UNITS[i];\n }\n }\n return UNITS[ilen - 1];\n}\nfunction determineUnitForFormatting(scale, numTicks, minUnit, min, max) {\n for (let i = UNITS.length - 1; i >= UNITS.indexOf(minUnit); i--) {\n const unit = UNITS[i];\n if (INTERVALS[unit].common && scale._adapter.diff(max, min, unit) >= numTicks - 1) {\n return unit;\n }\n }\n return UNITS[minUnit ? UNITS.indexOf(minUnit) : 0];\n}\nfunction determineMajorUnit(unit) {\n for (let i = UNITS.indexOf(unit) + 1, ilen = UNITS.length; i < ilen; ++i) {\n if (INTERVALS[UNITS[i]].common) {\n return UNITS[i];\n }\n }\n}\nfunction addTick(ticks, time, timestamps) {\n if (!timestamps) {\n ticks[time] = true;\n } else if (timestamps.length) {\n const {\n lo,\n hi\n } = _lookup(timestamps, time);\n const timestamp = timestamps[lo] >= time ? timestamps[lo] : timestamps[hi];\n ticks[timestamp] = true;\n }\n}\nfunction setMajorTicks(scale, ticks, map, majorUnit) {\n const adapter = scale._adapter;\n const first = +adapter.startOf(ticks[0].value, majorUnit);\n const last = ticks[ticks.length - 1].value;\n let major, index;\n for (major = first; major <= last; major = +adapter.add(major, 1, majorUnit)) {\n index = map[major];\n if (index >= 0) {\n ticks[index].major = true;\n }\n }\n return ticks;\n}\nfunction ticksFromTimestamps(scale, values, majorUnit) {\n const ticks = [];\n const map = {};\n const ilen = values.length;\n let i, value;\n for (i = 0; i < ilen; ++i) {\n value = values[i];\n map[value] = i;\n ticks.push({\n value,\n major: false\n });\n }\n return ilen === 0 || !majorUnit ? ticks : setMajorTicks(scale, ticks, map, majorUnit);\n}\nlet TimeScale = /*#__PURE__*/(() => {\n class TimeScale extends Scale {\n static id = 'time';\n static defaults = {\n bounds: 'data',\n adapters: {},\n time: {\n parser: false,\n unit: false,\n round: false,\n isoWeekday: false,\n minUnit: 'millisecond',\n displayFormats: {}\n },\n ticks: {\n source: 'auto',\n callback: false,\n major: {\n enabled: false\n }\n }\n };\n constructor(props) {\n super(props);\n this._cache = {\n data: [],\n labels: [],\n all: []\n };\n this._unit = 'day';\n this._majorUnit = undefined;\n this._offsets = {};\n this._normalized = false;\n this._parseOpts = undefined;\n }\n init(scaleOpts, opts = {}) {\n const time = scaleOpts.time || (scaleOpts.time = {});\n const adapter = this._adapter = new adapters._date(scaleOpts.adapters.date);\n adapter.init(opts);\n mergeIf(time.displayFormats, adapter.formats());\n this._parseOpts = {\n parser: time.parser,\n round: time.round,\n isoWeekday: time.isoWeekday\n };\n super.init(scaleOpts);\n this._normalized = opts.normalized;\n }\n parse(raw, index) {\n if (raw === undefined) {\n return null;\n }\n return parse(this, raw);\n }\n beforeLayout() {\n super.beforeLayout();\n this._cache = {\n data: [],\n labels: [],\n all: []\n };\n }\n determineDataLimits() {\n const options = this.options;\n const adapter = this._adapter;\n const unit = options.time.unit || 'day';\n let {\n min,\n max,\n minDefined,\n maxDefined\n } = this.getUserBounds();\n function _applyBounds(bounds) {\n if (!minDefined && !isNaN(bounds.min)) {\n min = Math.min(min, bounds.min);\n }\n if (!maxDefined && !isNaN(bounds.max)) {\n max = Math.max(max, bounds.max);\n }\n }\n if (!minDefined || !maxDefined) {\n _applyBounds(this._getLabelBounds());\n if (options.bounds !== 'ticks' || options.ticks.source !== 'labels') {\n _applyBounds(this.getMinMax(false));\n }\n }\n min = isNumberFinite(min) && !isNaN(min) ? min : +adapter.startOf(Date.now(), unit);\n max = isNumberFinite(max) && !isNaN(max) ? max : +adapter.endOf(Date.now(), unit) + 1;\n this.min = Math.min(min, max - 1);\n this.max = Math.max(min + 1, max);\n }\n _getLabelBounds() {\n const arr = this.getLabelTimestamps();\n let min = Number.POSITIVE_INFINITY;\n let max = Number.NEGATIVE_INFINITY;\n if (arr.length) {\n min = arr[0];\n max = arr[arr.length - 1];\n }\n return {\n min,\n max\n };\n }\n buildTicks() {\n const options = this.options;\n const timeOpts = options.time;\n const tickOpts = options.ticks;\n const timestamps = tickOpts.source === 'labels' ? this.getLabelTimestamps() : this._generate();\n if (options.bounds === 'ticks' && timestamps.length) {\n this.min = this._userMin || timestamps[0];\n this.max = this._userMax || timestamps[timestamps.length - 1];\n }\n const min = this.min;\n const max = this.max;\n const ticks = _filterBetween(timestamps, min, max);\n this._unit = timeOpts.unit || (tickOpts.autoSkip ? determineUnitForAutoTicks(timeOpts.minUnit, this.min, this.max, this._getLabelCapacity(min)) : determineUnitForFormatting(this, ticks.length, timeOpts.minUnit, this.min, this.max));\n this._majorUnit = !tickOpts.major.enabled || this._unit === 'year' ? undefined : determineMajorUnit(this._unit);\n this.initOffsets(timestamps);\n if (options.reverse) {\n ticks.reverse();\n }\n return ticksFromTimestamps(this, ticks, this._majorUnit);\n }\n afterAutoSkip() {\n if (this.options.offsetAfterAutoskip) {\n this.initOffsets(this.ticks.map(tick => +tick.value));\n }\n }\n initOffsets(timestamps = []) {\n let start = 0;\n let end = 0;\n let first, last;\n if (this.options.offset && timestamps.length) {\n first = this.getDecimalForValue(timestamps[0]);\n if (timestamps.length === 1) {\n start = 1 - first;\n } else {\n start = (this.getDecimalForValue(timestamps[1]) - first) / 2;\n }\n last = this.getDecimalForValue(timestamps[timestamps.length - 1]);\n if (timestamps.length === 1) {\n end = last;\n } else {\n end = (last - this.getDecimalForValue(timestamps[timestamps.length - 2])) / 2;\n }\n }\n const limit = timestamps.length < 3 ? 0.5 : 0.25;\n start = _limitValue(start, 0, limit);\n end = _limitValue(end, 0, limit);\n this._offsets = {\n start,\n end,\n factor: 1 / (start + 1 + end)\n };\n }\n _generate() {\n const adapter = this._adapter;\n const min = this.min;\n const max = this.max;\n const options = this.options;\n const timeOpts = options.time;\n const minor = timeOpts.unit || determineUnitForAutoTicks(timeOpts.minUnit, min, max, this._getLabelCapacity(min));\n const stepSize = valueOrDefault(options.ticks.stepSize, 1);\n const weekday = minor === 'week' ? timeOpts.isoWeekday : false;\n const hasWeekday = isNumber(weekday) || weekday === true;\n const ticks = {};\n let first = min;\n let time, count;\n if (hasWeekday) {\n first = +adapter.startOf(first, 'isoWeek', weekday);\n }\n first = +adapter.startOf(first, hasWeekday ? 'day' : minor);\n if (adapter.diff(max, min, minor) > 100000 * stepSize) {\n throw new Error(min + ' and ' + max + ' are too far apart with stepSize of ' + stepSize + ' ' + minor);\n }\n const timestamps = options.ticks.source === 'data' && this.getDataTimestamps();\n for (time = first, count = 0; time < max; time = +adapter.add(time, stepSize, minor), count++) {\n addTick(ticks, time, timestamps);\n }\n if (time === max || options.bounds === 'ticks' || count === 1) {\n addTick(ticks, time, timestamps);\n }\n return Object.keys(ticks).sort(sorter).map(x => +x);\n }\n getLabelForValue(value) {\n const adapter = this._adapter;\n const timeOpts = this.options.time;\n if (timeOpts.tooltipFormat) {\n return adapter.format(value, timeOpts.tooltipFormat);\n }\n return adapter.format(value, timeOpts.displayFormats.datetime);\n }\n format(value, format) {\n const options = this.options;\n const formats = options.time.displayFormats;\n const unit = this._unit;\n const fmt = format || formats[unit];\n return this._adapter.format(value, fmt);\n }\n _tickFormatFunction(time, index, ticks, format) {\n const options = this.options;\n const formatter = options.ticks.callback;\n if (formatter) {\n return callback(formatter, [time, index, ticks], this);\n }\n const formats = options.time.displayFormats;\n const unit = this._unit;\n const majorUnit = this._majorUnit;\n const minorFormat = unit && formats[unit];\n const majorFormat = majorUnit && formats[majorUnit];\n const tick = ticks[index];\n const major = majorUnit && majorFormat && tick && tick.major;\n return this._adapter.format(time, format || (major ? majorFormat : minorFormat));\n }\n generateTickLabels(ticks) {\n let i, ilen, tick;\n for (i = 0, ilen = ticks.length; i < ilen; ++i) {\n tick = ticks[i];\n tick.label = this._tickFormatFunction(tick.value, i, ticks);\n }\n }\n getDecimalForValue(value) {\n return value === null ? NaN : (value - this.min) / (this.max - this.min);\n }\n getPixelForValue(value) {\n const offsets = this._offsets;\n const pos = this.getDecimalForValue(value);\n return this.getPixelForDecimal((offsets.start + pos) * offsets.factor);\n }\n getValueForPixel(pixel) {\n const offsets = this._offsets;\n const pos = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n return this.min + pos * (this.max - this.min);\n }\n _getLabelSize(label) {\n const ticksOpts = this.options.ticks;\n const tickLabelWidth = this.ctx.measureText(label).width;\n const angle = toRadians(this.isHorizontal() ? ticksOpts.maxRotation : ticksOpts.minRotation);\n const cosRotation = Math.cos(angle);\n const sinRotation = Math.sin(angle);\n const tickFontSize = this._resolveTickFontOptions(0).size;\n return {\n w: tickLabelWidth * cosRotation + tickFontSize * sinRotation,\n h: tickLabelWidth * sinRotation + tickFontSize * cosRotation\n };\n }\n _getLabelCapacity(exampleTime) {\n const timeOpts = this.options.time;\n const displayFormats = timeOpts.displayFormats;\n const format = displayFormats[timeOpts.unit] || displayFormats.millisecond;\n const exampleLabel = this._tickFormatFunction(exampleTime, 0, ticksFromTimestamps(this, [exampleTime], this._majorUnit), format);\n const size = this._getLabelSize(exampleLabel);\n const capacity = Math.floor(this.isHorizontal() ? this.width / size.w : this.height / size.h) - 1;\n return capacity > 0 ? capacity : 1;\n }\n getDataTimestamps() {\n let timestamps = this._cache.data || [];\n let i, ilen;\n if (timestamps.length) {\n return timestamps;\n }\n const metas = this.getMatchingVisibleMetas();\n if (this._normalized && metas.length) {\n return this._cache.data = metas[0].controller.getAllParsedValues(this);\n }\n for (i = 0, ilen = metas.length; i < ilen; ++i) {\n timestamps = timestamps.concat(metas[i].controller.getAllParsedValues(this));\n }\n return this._cache.data = this.normalize(timestamps);\n }\n getLabelTimestamps() {\n const timestamps = this._cache.labels || [];\n let i, ilen;\n if (timestamps.length) {\n return timestamps;\n }\n const labels = this.getLabels();\n for (i = 0, ilen = labels.length; i < ilen; ++i) {\n timestamps.push(parse(this, labels[i]));\n }\n return this._cache.labels = this._normalized ? timestamps : this.normalize(timestamps);\n }\n normalize(values) {\n return _arrayUnique(values.sort(sorter));\n }\n }\n return TimeScale;\n})();\nfunction interpolate(table, val, reverse) {\n let lo = 0;\n let hi = table.length - 1;\n let prevSource, nextSource, prevTarget, nextTarget;\n if (reverse) {\n if (val >= table[lo].pos && val <= table[hi].pos) {\n ({\n lo,\n hi\n } = _lookupByKey(table, 'pos', val));\n }\n ({\n pos: prevSource,\n time: prevTarget\n } = table[lo]);\n ({\n pos: nextSource,\n time: nextTarget\n } = table[hi]);\n } else {\n if (val >= table[lo].time && val <= table[hi].time) {\n ({\n lo,\n hi\n } = _lookupByKey(table, 'time', val));\n }\n ({\n time: prevSource,\n pos: prevTarget\n } = table[lo]);\n ({\n time: nextSource,\n pos: nextTarget\n } = table[hi]);\n }\n const span = nextSource - prevSource;\n return span ? prevTarget + (nextTarget - prevTarget) * (val - prevSource) / span : prevTarget;\n}\nclass TimeSeriesScale extends TimeScale {\n static id = 'timeseries';\n static defaults = TimeScale.defaults;\n constructor(props) {\n super(props);\n this._table = [];\n this._minPos = undefined;\n this._tableRange = undefined;\n }\n initOffsets() {\n const timestamps = this._getTimestampsForTable();\n const table = this._table = this.buildLookupTable(timestamps);\n this._minPos = interpolate(table, this.min);\n this._tableRange = interpolate(table, this.max) - this._minPos;\n super.initOffsets(timestamps);\n }\n buildLookupTable(timestamps) {\n const {\n min,\n max\n } = this;\n const items = [];\n const table = [];\n let i, ilen, prev, curr, next;\n for (i = 0, ilen = timestamps.length; i < ilen; ++i) {\n curr = timestamps[i];\n if (curr >= min && curr <= max) {\n items.push(curr);\n }\n }\n if (items.length < 2) {\n return [{\n time: min,\n pos: 0\n }, {\n time: max,\n pos: 1\n }];\n }\n for (i = 0, ilen = items.length; i < ilen; ++i) {\n next = items[i + 1];\n prev = items[i - 1];\n curr = items[i];\n if (Math.round((next + prev) / 2) !== curr) {\n table.push({\n time: curr,\n pos: i / (ilen - 1)\n });\n }\n }\n return table;\n }\n _generate() {\n const min = this.min;\n const max = this.max;\n let timestamps = super.getDataTimestamps();\n if (!timestamps.includes(min) || !timestamps.length) {\n timestamps.splice(0, 0, min);\n }\n if (!timestamps.includes(max) || timestamps.length === 1) {\n timestamps.push(max);\n }\n return timestamps.sort((a, b) => a - b);\n }\n _getTimestampsForTable() {\n let timestamps = this._cache.all || [];\n if (timestamps.length) {\n return timestamps;\n }\n const data = this.getDataTimestamps();\n const label = this.getLabelTimestamps();\n if (data.length && label.length) {\n timestamps = this.normalize(data.concat(label));\n } else {\n timestamps = data.length ? data : label;\n }\n timestamps = this._cache.all = timestamps;\n return timestamps;\n }\n getDecimalForValue(value) {\n return (interpolate(this._table, value) - this._minPos) / this._tableRange;\n }\n getValueForPixel(pixel) {\n const offsets = this._offsets;\n const decimal = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n return interpolate(this._table, decimal * this._tableRange + this._minPos, true);\n }\n}\nvar scales = /*#__PURE__*/Object.freeze({\n __proto__: null,\n CategoryScale: CategoryScale,\n LinearScale: LinearScale,\n LogarithmicScale: LogarithmicScale,\n RadialLinearScale: RadialLinearScale,\n TimeScale: TimeScale,\n TimeSeriesScale: TimeSeriesScale\n});\nconst registerables = [controllers, elements, plugins, scales];\nexport { Animation, Animations, ArcElement, BarController, BarElement, BasePlatform, BasicPlatform, BubbleController, CategoryScale, Chart, plugin_colors as Colors, DatasetController, plugin_decimation as Decimation, DomPlatform, DoughnutController, Element, index as Filler, Interaction, plugin_legend as Legend, LineController, LineElement, LinearScale, LogarithmicScale, PieController, PointElement, PolarAreaController, RadarController, RadialLinearScale, Scale, ScatterController, plugin_subtitle as SubTitle, Ticks, TimeScale, TimeSeriesScale, plugin_title as Title, plugin_tooltip as Tooltip, adapters as _adapters, _detectPlatform, animator, controllers, defaults, elements, layouts, plugins, registerables, registry, scales };\n","function isPlainObject(value) {\n if (!value || typeof value !== 'object') {\n return false;\n }\n const proto = Object.getPrototypeOf(value);\n const hasObjectPrototype = proto === null || proto === Object.prototype || Object.getPrototypeOf(proto) === null;\n if (!hasObjectPrototype) {\n return false;\n }\n return Object.prototype.toString.call(value) === '[object Object]';\n}\nexport { isPlainObject };","function isUnsafeProperty(key) {\n return key === '__proto__';\n}\nexport { isUnsafeProperty };","import { isUnsafeProperty } from '../_internal/isUnsafeProperty.mjs';\nimport { isPlainObject } from '../predicate/isPlainObject.mjs';\nfunction merge(target, source) {\n const sourceKeys = Object.keys(source);\n for (let i = 0; i < sourceKeys.length; i++) {\n const key = sourceKeys[i];\n if (isUnsafeProperty(key)) {\n continue;\n }\n const sourceValue = source[key];\n const targetValue = target[key];\n if (isMergeableValue(sourceValue) && isMergeableValue(targetValue)) {\n target[key] = merge(targetValue, sourceValue);\n } else if (Array.isArray(sourceValue)) {\n target[key] = merge([], sourceValue);\n } else if (isPlainObject(sourceValue)) {\n target[key] = merge({}, sourceValue);\n } else if (targetValue === undefined || sourceValue !== undefined) {\n target[key] = sourceValue;\n }\n }\n return target;\n}\nfunction isMergeableValue(value) {\n return isPlainObject(value) || Array.isArray(value);\n}\nexport { merge };","import * as i0 from '@angular/core';\nimport { InjectionToken, Injectable, EventEmitter, inject, ElementRef, NgZone, PLATFORM_ID, Output, Input, Directive } from '@angular/core';\nimport { registerables, Chart, defaults } from 'chart.js';\nimport { merge } from 'es-toolkit';\nimport { isPlatformBrowser } from '@angular/common';\nimport { BehaviorSubject } from 'rxjs';\nimport { distinctUntilChanged } from 'rxjs/operators';\nconst NG_CHARTS_CONFIGURATION = /*#__PURE__*/new InjectionToken('Configuration for ngCharts');\n/**\n * Provide all the default registerable as defined by Chart.js\n */\nfunction withDefaultRegisterables(...registerables$1) {\n return {\n registerables: [...registerables, ...registerables$1]\n };\n}\n/**\n * Provide configuration for ngCharts. In most cases, you have to pass it some registerables. So either\n * `withDefaultRegisterables()`, or a custom list of registerables tailored to your needs to reduce bundle size.\n */\nfunction provideCharts(...configurations) {\n const config = configurations.reduce(merge, {});\n return {\n provide: NG_CHARTS_CONFIGURATION,\n useValue: config\n };\n}\nlet ThemeService = /*#__PURE__*/(() => {\n class ThemeService {\n constructor() {\n this.colorschemesOptions = new BehaviorSubject(undefined);\n }\n setColorschemesOptions(options) {\n this.pColorschemesOptions = options;\n this.colorschemesOptions.next(options);\n }\n getColorschemesOptions() {\n return this.pColorschemesOptions;\n }\n static {\n this.\u0275fac = function ThemeService_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || ThemeService)();\n };\n }\n static {\n this.\u0275prov = /* @__PURE__ */i0.\u0275\u0275defineInjectable({\n token: ThemeService,\n factory: ThemeService.\u0275fac,\n providedIn: 'root'\n });\n }\n }\n return ThemeService;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet BaseChartDirective = /*#__PURE__*/(() => {\n class BaseChartDirective {\n constructor() {\n this.type = 'bar';\n this.plugins = [];\n this.chartClick = new EventEmitter();\n this.chartHover = new EventEmitter();\n this.ctx = null;\n this.subs = [];\n this.themeOverrides = {};\n this.element = inject(ElementRef);\n this.zone = inject(NgZone);\n this.themeService = inject(ThemeService);\n this.config = inject(NG_CHARTS_CONFIGURATION, {\n optional: true\n });\n this.platformId = inject(PLATFORM_ID);\n this.isBrowser = isPlatformBrowser(this.platformId);\n if (this.config?.registerables) {\n Chart.register(...this.config.registerables);\n }\n if (this.config?.defaults) {\n defaults.set(this.config.defaults);\n }\n // Only get canvas context in browser environment\n if (this.isBrowser) {\n this.ctx = this.element.nativeElement.getContext('2d');\n }\n this.subs.push(this.themeService.colorschemesOptions.pipe(distinctUntilChanged()).subscribe(r => this.themeChanged(r)));\n }\n ngOnChanges(changes) {\n if (!this.isBrowser) {\n return; // Skip chart operations in SSR\n }\n const requireRender = ['type'];\n const propertyNames = Object.getOwnPropertyNames(changes);\n if (propertyNames.some(key => requireRender.includes(key)) || propertyNames.every(key => changes[key].isFirstChange())) {\n this.render();\n } else {\n // For legend changes, we need to update the chart options and re-render\n if (this.chart && changes['legend']) {\n const config = this.getChartConfiguration();\n if (config.options) {\n this.chart.options = config.options;\n }\n this.update();\n } else if (this.chart) {\n const config = this.getChartConfiguration();\n // Using assign to avoid changing the original object reference\n if (config.data && this.chart.config.data) {\n Object.assign(this.chart.config.data, config.data);\n }\n if (config.plugins && this.chart.config.plugins) {\n Object.assign(this.chart.config.plugins, config.plugins);\n }\n if (config.options && this.chart.config.options) {\n Object.assign(this.chart.config.options, config.options);\n }\n this.update();\n }\n }\n }\n ngOnDestroy() {\n if (this.chart) {\n this.chart.destroy();\n this.chart = void 0;\n }\n this.subs.forEach(s => s.unsubscribe());\n }\n render() {\n if (!this.isBrowser || !this.ctx) {\n return undefined;\n }\n if (this.chart) {\n this.chart.destroy();\n }\n return this.zone.runOutsideAngular(() => this.chart = new Chart(this.ctx, this.getChartConfiguration()));\n }\n update(mode) {\n if (this.chart && this.isBrowser) {\n this.zone.runOutsideAngular(() => this.chart?.update(mode));\n }\n }\n hideDataset(index, hidden) {\n if (this.chart && this.isBrowser) {\n this.chart.getDatasetMeta(index).hidden = hidden;\n this.update();\n }\n }\n isDatasetHidden(index) {\n return this.chart?.getDatasetMeta(index)?.hidden;\n }\n toBase64Image() {\n return this.chart?.toBase64Image();\n }\n themeChanged(options) {\n this.themeOverrides = options;\n if (this.chart) {\n if (this.chart.config.options) {\n Object.assign(this.chart.config.options, this.getChartOptions());\n }\n this.update();\n }\n }\n getChartOptions() {\n return [{\n onHover: (event, active) => {\n if (!this.chartHover.observed && !this.chartHover.observers?.length) {\n return;\n }\n this.zone.run(() => this.chartHover.emit({\n event,\n active\n }));\n },\n onClick: (event, active) => {\n if (!this.chartClick.observed && !this.chartClick.observers?.length) {\n return;\n }\n this.zone.run(() => this.chartClick.emit({\n event,\n active\n }));\n }\n }, this.themeOverrides ?? {}, this.options ?? {}, {\n plugins: {\n legend: {\n display: this.legend\n }\n }\n }].reduce(merge, {});\n }\n getChartConfiguration() {\n return {\n type: this.type,\n data: this.getChartData(),\n options: this.getChartOptions(),\n plugins: this.plugins\n };\n }\n getChartData() {\n return this.data ? this.data : {\n labels: this.labels || [],\n datasets: this.datasets || []\n };\n }\n static {\n this.\u0275fac = function BaseChartDirective_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || BaseChartDirective)();\n };\n }\n static {\n this.\u0275dir = /* @__PURE__ */i0.\u0275\u0275defineDirective({\n type: BaseChartDirective,\n selectors: [[\"canvas\", \"baseChart\", \"\"]],\n inputs: {\n type: \"type\",\n legend: \"legend\",\n data: \"data\",\n options: \"options\",\n plugins: \"plugins\",\n labels: \"labels\",\n datasets: \"datasets\"\n },\n outputs: {\n chartClick: \"chartClick\",\n chartHover: \"chartHover\"\n },\n exportAs: [\"base-chart\"],\n features: [i0.\u0275\u0275NgOnChangesFeature]\n });\n }\n }\n return BaseChartDirective;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/* eslint-disable @typescript-eslint/no-unsafe-function-type */\n\n/*\n * Public API Surface of ng2-charts\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { BaseChartDirective, NG_CHARTS_CONFIGURATION, ThemeService, provideCharts, withDefaultRegisterables };\n"],mappings:"yNAMA,SAASA,GAAMC,EAAG,CAChB,OAAOA,EAAI,GAAM,CACnB,CACA,IAAMC,GAAM,CAACD,EAAGE,EAAGC,IAAM,KAAK,IAAI,KAAK,IAAIH,EAAGG,CAAC,EAAGD,CAAC,EACnD,SAASE,GAAIJ,EAAG,CACd,OAAOC,GAAIF,GAAMC,EAAI,IAAI,EAAG,EAAG,GAAG,CACpC,CAIA,SAASK,GAAIC,EAAG,CACd,OAAOC,GAAIC,GAAMF,EAAI,GAAG,EAAG,EAAG,GAAG,CACnC,CACA,SAASG,GAAIH,EAAG,CACd,OAAOC,GAAIC,GAAMF,EAAI,IAAI,EAAI,IAAK,EAAG,CAAC,CACxC,CACA,SAASI,GAAIJ,EAAG,CACd,OAAOC,GAAIC,GAAMF,EAAI,GAAG,EAAG,EAAG,GAAG,CACnC,CACA,IAAMK,GAAQ,CACZ,EAAG,EACH,EAAG,EACH,EAAG,EACH,EAAG,EACH,EAAG,EACH,EAAG,EACH,EAAG,EACH,EAAG,EACH,EAAG,EACH,EAAG,EACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,EACL,EACMC,GAAM,CAAC,GAAG,kBAAkB,EAC5BC,GAAKC,GAAKF,GAAIE,EAAI,EAAG,EACrBC,GAAKD,GAAKF,IAAKE,EAAI,MAAS,CAAC,EAAIF,GAAIE,EAAI,EAAG,EAC5CE,GAAKF,IAAMA,EAAI,MAAS,KAAOA,EAAI,IACnCG,GAAUX,GAAKU,GAAGV,EAAE,CAAC,GAAKU,GAAGV,EAAE,CAAC,GAAKU,GAAGV,EAAE,CAAC,GAAKU,GAAGV,EAAE,CAAC,EAC5D,SAASY,GAASC,EAAK,CACrB,IAAIC,EAAMD,EAAI,OACVE,EACJ,OAAIF,EAAI,CAAC,IAAM,MACTC,IAAQ,GAAKA,IAAQ,EACvBC,EAAM,CACJ,EAAG,IAAMV,GAAMQ,EAAI,CAAC,CAAC,EAAI,GACzB,EAAG,IAAMR,GAAMQ,EAAI,CAAC,CAAC,EAAI,GACzB,EAAG,IAAMR,GAAMQ,EAAI,CAAC,CAAC,EAAI,GACzB,EAAGC,IAAQ,EAAIT,GAAMQ,EAAI,CAAC,CAAC,EAAI,GAAK,GACtC,GACSC,IAAQ,GAAKA,IAAQ,KAC9BC,EAAM,CACJ,EAAGV,GAAMQ,EAAI,CAAC,CAAC,GAAK,EAAIR,GAAMQ,EAAI,CAAC,CAAC,EACpC,EAAGR,GAAMQ,EAAI,CAAC,CAAC,GAAK,EAAIR,GAAMQ,EAAI,CAAC,CAAC,EACpC,EAAGR,GAAMQ,EAAI,CAAC,CAAC,GAAK,EAAIR,GAAMQ,EAAI,CAAC,CAAC,EACpC,EAAGC,IAAQ,EAAIT,GAAMQ,EAAI,CAAC,CAAC,GAAK,EAAIR,GAAMQ,EAAI,CAAC,CAAC,EAAI,GACtD,IAGGE,CACT,CACA,IAAMC,GAAQ,CAACC,EAAGC,IAAMD,EAAI,IAAMC,EAAED,CAAC,EAAI,GACzC,SAASE,GAAUnB,EAAG,CACpB,IAAIkB,EAAIP,GAAQX,CAAC,EAAIO,GAAKE,GAC1B,OAAOT,EAAI,IAAMkB,EAAElB,EAAE,CAAC,EAAIkB,EAAElB,EAAE,CAAC,EAAIkB,EAAElB,EAAE,CAAC,EAAIgB,GAAMhB,EAAE,EAAGkB,CAAC,EAAI,MAC9D,CACA,IAAME,GAAS,+GACf,SAASC,GAASC,EAAGC,EAAGC,EAAG,CACzB,IAAMP,EAAIM,EAAI,KAAK,IAAIC,EAAG,EAAIA,CAAC,EACzBN,EAAI,CAACO,EAAGC,GAAKD,EAAIH,EAAI,IAAM,KAAOE,EAAIP,EAAI,KAAK,IAAI,KAAK,IAAIS,EAAI,EAAG,EAAIA,EAAG,CAAC,EAAG,EAAE,EACtF,MAAO,CAACR,EAAE,CAAC,EAAGA,EAAE,CAAC,EAAGA,EAAE,CAAC,CAAC,CAC1B,CACA,SAASS,GAASL,EAAGC,EAAGvB,EAAG,CACzB,IAAMkB,EAAI,CAAC,EAAGQ,GAAK,EAAIJ,EAAI,IAAM,IAAMtB,EAAIA,EAAIuB,EAAI,KAAK,IAAI,KAAK,IAAIG,EAAG,EAAIA,EAAG,CAAC,EAAG,CAAC,EACpF,MAAO,CAACR,EAAE,CAAC,EAAGA,EAAE,CAAC,EAAGA,EAAE,CAAC,CAAC,CAC1B,CACA,SAASU,GAASN,EAAGO,EAAGrB,EAAG,CACzB,IAAMsB,EAAMT,GAASC,EAAG,EAAG,EAAG,EAC1BS,EAMJ,IALIF,EAAIrB,EAAI,IACVuB,EAAI,GAAKF,EAAIrB,GACbqB,GAAKE,EACLvB,GAAKuB,GAEFA,EAAI,EAAGA,EAAI,EAAGA,IACjBD,EAAIC,CAAC,GAAK,EAAIF,EAAIrB,EAClBsB,EAAIC,CAAC,GAAKF,EAEZ,OAAOC,CACT,CACA,SAASE,GAASC,EAAGC,EAAG1B,EAAG2B,EAAGC,EAAK,CACjC,OAAIH,IAAMG,GACAF,EAAI1B,GAAK2B,GAAKD,EAAI1B,EAAI,EAAI,GAEhC0B,IAAME,GACA5B,EAAIyB,GAAKE,EAAI,GAEfF,EAAIC,GAAKC,EAAI,CACvB,CACA,SAASE,GAAQrC,EAAG,CAElB,IAAMiC,EAAIjC,EAAE,EAAI,IACVkC,EAAIlC,EAAE,EAAI,IACVQ,EAAIR,EAAE,EAAI,IACVoC,EAAM,KAAK,IAAIH,EAAGC,EAAG1B,CAAC,EACtB8B,EAAM,KAAK,IAAIL,EAAGC,EAAG1B,CAAC,EACtBgB,GAAKY,EAAME,GAAO,EACpBhB,EAAGC,EAAGY,EACV,OAAIC,IAAQE,IACVH,EAAIC,EAAME,EACVf,EAAIC,EAAI,GAAMW,GAAK,EAAIC,EAAME,GAAOH,GAAKC,EAAME,GAC/ChB,EAAIU,GAASC,EAAGC,EAAG1B,EAAG2B,EAAGC,CAAG,EAC5Bd,EAAIA,EAAI,GAAK,IAER,CAACA,EAAI,EAAGC,GAAK,EAAGC,CAAC,CAC1B,CACA,SAASe,GAAMrB,EAAGD,EAAGT,EAAGgC,EAAG,CACzB,OAAQ,MAAM,QAAQvB,CAAC,EAAIC,EAAED,EAAE,CAAC,EAAGA,EAAE,CAAC,EAAGA,EAAE,CAAC,CAAC,EAAIC,EAAED,EAAGT,EAAGgC,CAAC,GAAG,IAAIzC,EAAG,CACtE,CACA,SAAS0C,GAAQnB,EAAGC,EAAGC,EAAG,CACxB,OAAOe,GAAMlB,GAAUC,EAAGC,EAAGC,CAAC,CAChC,CACA,SAASkB,GAAQpB,EAAGO,EAAGrB,EAAG,CACxB,OAAO+B,GAAMX,GAAUN,EAAGO,EAAGrB,CAAC,CAChC,CACA,SAASmC,GAAQrB,EAAGC,EAAGvB,EAAG,CACxB,OAAOuC,GAAMZ,GAAUL,EAAGC,EAAGvB,CAAC,CAChC,CACA,SAAS4C,GAAItB,EAAG,CACd,OAAQA,EAAI,IAAM,KAAO,GAC3B,CACA,SAASuB,GAAShC,EAAK,CACrB,IAAMiC,EAAI1B,GAAO,KAAKP,CAAG,EACrBI,EAAI,IACJjB,EACJ,GAAI,CAAC8C,EACH,OAEEA,EAAE,CAAC,IAAM9C,IACXiB,EAAI6B,EAAE,CAAC,EAAIC,GAAI,CAACD,EAAE,CAAC,CAAC,EAAI/C,GAAI,CAAC+C,EAAE,CAAC,CAAC,GAEnC,IAAMxB,EAAIsB,GAAI,CAACE,EAAE,CAAC,CAAC,EACbE,EAAK,CAACF,EAAE,CAAC,EAAI,IACbG,EAAK,CAACH,EAAE,CAAC,EAAI,IACnB,OAAIA,EAAE,CAAC,IAAM,MACX9C,EAAI0C,GAAQpB,EAAG0B,EAAIC,CAAE,EACZH,EAAE,CAAC,IAAM,MAClB9C,EAAI2C,GAAQrB,EAAG0B,EAAIC,CAAE,EAErBjD,EAAIyC,GAAQnB,EAAG0B,EAAIC,CAAE,EAEhB,CACL,EAAGjD,EAAE,CAAC,EACN,EAAGA,EAAE,CAAC,EACN,EAAGA,EAAE,CAAC,EACN,EAAGiB,CACL,CACF,CACA,SAASiC,GAAOlD,EAAGmD,EAAK,CACtB,IAAI7B,EAAIe,GAAQrC,CAAC,EACjBsB,EAAE,CAAC,EAAIsB,GAAItB,EAAE,CAAC,EAAI6B,CAAG,EACrB7B,EAAImB,GAAQnB,CAAC,EACbtB,EAAE,EAAIsB,EAAE,CAAC,EACTtB,EAAE,EAAIsB,EAAE,CAAC,EACTtB,EAAE,EAAIsB,EAAE,CAAC,CACX,CACA,SAAS8B,GAAUpD,EAAG,CACpB,GAAI,CAACA,EACH,OAEF,IAAMiB,EAAIoB,GAAQrC,CAAC,EACbsB,EAAIL,EAAE,CAAC,EACP,EAAIb,GAAIa,EAAE,CAAC,CAAC,EACZO,EAAIpB,GAAIa,EAAE,CAAC,CAAC,EAClB,OAAOjB,EAAE,EAAI,IAAM,QAAQsB,CAAC,KAAK,CAAC,MAAME,CAAC,MAAMrB,GAAIH,EAAE,CAAC,CAAC,IAAM,OAAOsB,CAAC,KAAK,CAAC,MAAME,CAAC,IACpF,CACA,IAAM6B,GAAM,CACV,EAAG,OACH,EAAG,QACH,EAAG,KACH,EAAG,MACH,EAAG,KACH,EAAG,SACH,EAAG,QACH,EAAG,KACH,EAAG,KACH,EAAG,KACH,EAAG,KACH,EAAG,QACH,EAAG,QACH,EAAG,KACH,EAAG,WACH,EAAG,KACH,EAAG,KACH,EAAG,KACH,EAAG,KACH,EAAG,KACH,EAAG,QACH,EAAG,KACH,EAAG,KACH,EAAG,OACH,EAAG,KACH,EAAG,QACH,EAAG,IACL,EACMC,GAAU,CACd,OAAQ,SACR,YAAa,SACb,KAAM,OACN,UAAW,SACX,KAAM,SACN,MAAO,SACP,OAAQ,SACR,MAAO,IACP,aAAc,SACd,GAAI,KACJ,QAAS,SACT,KAAM,SACN,UAAW,SACX,OAAQ,SACR,SAAU,SACV,QAAS,SACT,IAAK,SACL,YAAa,SACb,QAAS,SACT,QAAS,SACT,KAAM,OACN,IAAK,KACL,MAAO,OACP,QAAS,SACT,KAAM,SACN,KAAM,OACN,KAAM,SACN,OAAQ,SACR,QAAS,SACT,SAAU,SACV,OAAQ,SACR,MAAO,SACP,IAAK,SACL,OAAQ,SACR,OAAQ,SACR,KAAM,SACN,MAAO,SACP,MAAO,SACP,IAAK,OACL,OAAQ,SACR,OAAQ,SACR,SAAU,OACV,OAAQ,SACR,OAAQ,SACR,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,OAAQ,SACR,QAAS,SACT,UAAW,SACX,IAAK,SACL,OAAQ,SACR,IAAK,SACL,IAAK,OACL,MAAO,SACP,IAAK,SACL,QAAS,SACT,OAAQ,SACR,QAAS,SACT,MAAO,SACP,KAAM,SACN,MAAO,SACP,OAAQ,SACR,UAAW,SACX,QAAS,SACT,WAAY,SACZ,IAAK,SACL,KAAM,SACN,MAAO,SACP,UAAW,SACX,KAAM,SACN,KAAM,SACN,KAAM,SACN,KAAM,SACN,OAAQ,SACR,OAAQ,SACR,OAAQ,SACR,MAAO,SACP,MAAO,SACP,QAAS,SACT,IAAK,SACL,KAAM,OACN,QAAS,SACT,IAAK,SACL,OAAQ,SACR,MAAO,SACP,WAAY,SACZ,IAAK,KACL,MAAO,SACP,OAAQ,SACR,OAAQ,SACR,KAAM,SACN,UAAW,OACX,IAAK,SACL,SAAU,SACV,WAAY,SACZ,QAAS,SACT,SAAU,SACV,QAAS,SACT,WAAY,SACZ,KAAM,KACN,OAAQ,SACR,KAAM,SACN,QAAS,SACT,MAAO,SACP,QAAS,SACT,KAAM,SACN,UAAW,SACX,OAAQ,SACR,MAAO,SACP,WAAY,SACZ,UAAW,SACX,QAAS,SACT,KAAM,SACN,IAAK,SACL,KAAM,SACN,QAAS,SACT,MAAO,SACP,YAAa,SACb,GAAI,SACJ,SAAU,SACV,MAAO,SACP,UAAW,SACX,MAAO,SACP,UAAW,SACX,MAAO,SACP,QAAS,SACT,MAAO,SACP,OAAQ,SACR,MAAO,SACP,IAAK,SACL,KAAM,SACN,KAAM,SACN,KAAM,SACN,SAAU,OACV,OAAQ,SACR,IAAK,SACL,IAAK,OACL,MAAO,SACP,OAAQ,SACR,GAAI,SACJ,MAAO,SACP,IAAK,SACL,KAAM,SACN,UAAW,SACX,GAAI,SACJ,MAAO,QACT,EACA,SAASC,IAAS,CAChB,IAAMC,EAAW,CAAC,EACZC,EAAO,OAAO,KAAKH,EAAO,EAC1BI,EAAQ,OAAO,KAAKL,EAAG,EACzBtB,EAAG4B,EAAGjC,EAAGkC,EAAIC,EACjB,IAAK9B,EAAI,EAAGA,EAAI0B,EAAK,OAAQ1B,IAAK,CAEhC,IADA6B,EAAKC,EAAKJ,EAAK1B,CAAC,EACX4B,EAAI,EAAGA,EAAID,EAAM,OAAQC,IAC5BjC,EAAIgC,EAAMC,CAAC,EACXE,EAAKA,EAAG,QAAQnC,EAAG2B,GAAI3B,CAAC,CAAC,EAE3BA,EAAI,SAAS4B,GAAQM,CAAE,EAAG,EAAE,EAC5BJ,EAASK,CAAE,EAAI,CAACnC,GAAK,GAAK,IAAMA,GAAK,EAAI,IAAMA,EAAI,GAAI,CACzD,CACA,OAAO8B,CACT,CACA,IAAIM,GACJ,SAASC,GAAUlD,EAAK,CACjBiD,KACHA,GAAQP,GAAO,EACfO,GAAM,YAAc,CAAC,EAAG,EAAG,EAAG,CAAC,GAEjC,IAAM7C,EAAI6C,GAAMjD,EAAI,YAAY,CAAC,EACjC,OAAOI,GAAK,CACV,EAAGA,EAAE,CAAC,EACN,EAAGA,EAAE,CAAC,EACN,EAAGA,EAAE,CAAC,EACN,EAAGA,EAAE,SAAW,EAAIA,EAAE,CAAC,EAAI,GAC7B,CACF,CACA,IAAM+C,GAAS,uGACf,SAASC,GAASpD,EAAK,CACrB,IAAMiC,EAAIkB,GAAO,KAAKnD,CAAG,EACrBI,EAAI,IACJgB,EAAGC,EAAG1B,EACV,GAAKsC,EAGL,IAAIA,EAAE,CAAC,IAAMb,EAAG,CACd,IAAMjC,EAAI,CAAC8C,EAAE,CAAC,EACd7B,EAAI6B,EAAE,CAAC,EAAIC,GAAI/C,CAAC,EAAIC,GAAID,EAAI,IAAK,EAAG,GAAG,CACzC,CACA,OAAAiC,EAAI,CAACa,EAAE,CAAC,EACRZ,EAAI,CAACY,EAAE,CAAC,EACRtC,EAAI,CAACsC,EAAE,CAAC,EACRb,EAAI,KAAOa,EAAE,CAAC,EAAIC,GAAId,CAAC,EAAIhC,GAAIgC,EAAG,EAAG,GAAG,GACxCC,EAAI,KAAOY,EAAE,CAAC,EAAIC,GAAIb,CAAC,EAAIjC,GAAIiC,EAAG,EAAG,GAAG,GACxC1B,EAAI,KAAOsC,EAAE,CAAC,EAAIC,GAAIvC,CAAC,EAAIP,GAAIO,EAAG,EAAG,GAAG,GACjC,CACL,EAAGyB,EACH,EAAGC,EACH,EAAG1B,EACH,EAAGS,CACL,EACF,CACA,SAASiD,GAAUlE,EAAG,CACpB,OAAOA,IAAMA,EAAE,EAAI,IAAM,QAAQA,EAAE,CAAC,KAAKA,EAAE,CAAC,KAAKA,EAAE,CAAC,KAAKG,GAAIH,EAAE,CAAC,CAAC,IAAM,OAAOA,EAAE,CAAC,KAAKA,EAAE,CAAC,KAAKA,EAAE,CAAC,IACnG,CACA,IAAMmE,GAAKnE,GAAKA,GAAK,SAAYA,EAAI,MAAQ,KAAK,IAAIA,EAAG,EAAM,GAAG,EAAI,MAAQ,KACxEoE,GAAOpE,GAAKA,GAAK,OAAUA,EAAI,MAAQ,KAAK,KAAKA,EAAI,MAAS,MAAO,GAAG,EAC9E,SAASqE,GAAYC,EAAMC,EAAM,EAAG,CAClC,IAAMtC,EAAImC,GAAKjE,GAAImE,EAAK,CAAC,CAAC,EACpBpC,EAAIkC,GAAKjE,GAAImE,EAAK,CAAC,CAAC,EACpB9D,EAAI4D,GAAKjE,GAAImE,EAAK,CAAC,CAAC,EAC1B,MAAO,CACL,EAAGvE,GAAIoE,GAAGlC,EAAI,GAAKmC,GAAKjE,GAAIoE,EAAK,CAAC,CAAC,EAAItC,EAAE,CAAC,EAC1C,EAAGlC,GAAIoE,GAAGjC,EAAI,GAAKkC,GAAKjE,GAAIoE,EAAK,CAAC,CAAC,EAAIrC,EAAE,CAAC,EAC1C,EAAGnC,GAAIoE,GAAG3D,EAAI,GAAK4D,GAAKjE,GAAIoE,EAAK,CAAC,CAAC,EAAI/D,EAAE,CAAC,EAC1C,EAAG8D,EAAK,EAAI,GAAKC,EAAK,EAAID,EAAK,EACjC,CACF,CACA,SAASE,GAAOxE,EAAG,EAAGyE,EAAO,CAC3B,GAAIzE,EAAG,CACL,IAAI0E,EAAMrC,GAAQrC,CAAC,EACnB0E,EAAI,CAAC,EAAI,KAAK,IAAI,EAAG,KAAK,IAAIA,EAAI,CAAC,EAAIA,EAAI,CAAC,EAAID,EAAO,IAAM,EAAI,IAAM,CAAC,CAAC,EACzEC,EAAMjC,GAAQiC,CAAG,EACjB1E,EAAE,EAAI0E,EAAI,CAAC,EACX1E,EAAE,EAAI0E,EAAI,CAAC,EACX1E,EAAE,EAAI0E,EAAI,CAAC,CACb,CACF,CACA,SAASC,GAAM3E,EAAG4E,EAAO,CACvB,OAAO5E,GAAI,OAAO,OAAO4E,GAAS,CAAC,EAAG5E,CAAC,CACzC,CACA,SAAS6E,GAAWC,EAAO,CACzB,IAAI9E,EAAI,CACN,EAAG,EACH,EAAG,EACH,EAAG,EACH,EAAG,GACL,EACA,OAAI,MAAM,QAAQ8E,CAAK,EACjBA,EAAM,QAAU,IAClB9E,EAAI,CACF,EAAG8E,EAAM,CAAC,EACV,EAAGA,EAAM,CAAC,EACV,EAAGA,EAAM,CAAC,EACV,EAAG,GACL,EACIA,EAAM,OAAS,IACjB9E,EAAE,EAAID,GAAI+E,EAAM,CAAC,CAAC,KAItB9E,EAAI2E,GAAMG,EAAO,CACf,EAAG,EACH,EAAG,EACH,EAAG,EACH,EAAG,CACL,CAAC,EACD9E,EAAE,EAAID,GAAIC,EAAE,CAAC,GAERA,CACT,CACA,SAAS+E,GAAclE,EAAK,CAC1B,OAAIA,EAAI,OAAO,CAAC,IAAM,IACboD,GAASpD,CAAG,EAEdgC,GAAShC,CAAG,CACrB,CACA,IAAMmE,GAAN,MAAMC,CAAM,CACV,YAAYH,EAAO,CACjB,GAAIA,aAAiBG,EACnB,OAAOH,EAET,IAAMI,EAAO,OAAOJ,EAChB9E,EACAkF,IAAS,SACXlF,EAAI6E,GAAWC,CAAK,EACXI,IAAS,WAClBlF,EAAIY,GAASkE,CAAK,GAAKf,GAAUe,CAAK,GAAKC,GAAcD,CAAK,GAEhE,KAAK,KAAO9E,EACZ,KAAK,OAAS,CAAC,CAACA,CAClB,CACA,IAAI,OAAQ,CACV,OAAO,KAAK,MACd,CACA,IAAI,KAAM,CACR,IAAIA,EAAI2E,GAAM,KAAK,IAAI,EACvB,OAAI3E,IACFA,EAAE,EAAIG,GAAIH,EAAE,CAAC,GAERA,CACT,CACA,IAAI,IAAImF,EAAK,CACX,KAAK,KAAON,GAAWM,CAAG,CAC5B,CACA,WAAY,CACV,OAAO,KAAK,OAASjB,GAAU,KAAK,IAAI,EAAI,MAC9C,CACA,WAAY,CACV,OAAO,KAAK,OAAS/C,GAAU,KAAK,IAAI,EAAI,MAC9C,CACA,WAAY,CACV,OAAO,KAAK,OAASiC,GAAU,KAAK,IAAI,EAAI,MAC9C,CACA,IAAIgC,EAAOC,EAAQ,CACjB,GAAID,EAAO,CACT,IAAME,EAAK,KAAK,IACVC,EAAKH,EAAM,IACbI,EACEC,EAAIJ,IAAWG,EAAK,GAAMH,EAC1BxD,EAAI,EAAI4D,EAAI,EACZxE,EAAIqE,EAAG,EAAIC,EAAG,EACdG,IAAO7D,EAAIZ,IAAM,GAAKY,GAAKA,EAAIZ,IAAM,EAAIY,EAAIZ,IAAM,GAAK,EAC9DuE,EAAK,EAAIE,EACTJ,EAAG,EAAI,IAAOI,EAAKJ,EAAG,EAAIE,EAAKD,EAAG,EAAI,GACtCD,EAAG,EAAI,IAAOI,EAAKJ,EAAG,EAAIE,EAAKD,EAAG,EAAI,GACtCD,EAAG,EAAI,IAAOI,EAAKJ,EAAG,EAAIE,EAAKD,EAAG,EAAI,GACtCD,EAAG,EAAIG,EAAIH,EAAG,GAAK,EAAIG,GAAKF,EAAG,EAC/B,KAAK,IAAMD,CACb,CACA,OAAO,IACT,CACA,YAAYF,EAAO,EAAG,CACpB,OAAIA,IACF,KAAK,KAAOf,GAAY,KAAK,KAAMe,EAAM,KAAM,CAAC,GAE3C,IACT,CACA,OAAQ,CACN,OAAO,IAAIH,EAAM,KAAK,GAAG,CAC3B,CACA,MAAMhE,EAAG,CACP,YAAK,KAAK,EAAIlB,GAAIkB,CAAC,EACZ,IACT,CACA,QAAQwD,EAAO,CACb,IAAM3C,EAAM,KAAK,KACjB,OAAAA,EAAI,GAAK,EAAI2C,EACN,IACT,CACA,WAAY,CACV,IAAM3C,EAAM,KAAK,KACX6D,EAAMzF,GAAM4B,EAAI,EAAI,GAAMA,EAAI,EAAI,IAAOA,EAAI,EAAI,GAAI,EAC3D,OAAAA,EAAI,EAAIA,EAAI,EAAIA,EAAI,EAAI6D,EACjB,IACT,CACA,QAAQlB,EAAO,CACb,IAAM3C,EAAM,KAAK,KACjB,OAAAA,EAAI,GAAK,EAAI2C,EACN,IACT,CACA,QAAS,CACP,IAAMzE,EAAI,KAAK,KACf,OAAAA,EAAE,EAAI,IAAMA,EAAE,EACdA,EAAE,EAAI,IAAMA,EAAE,EACdA,EAAE,EAAI,IAAMA,EAAE,EACP,IACT,CACA,QAAQyE,EAAO,CACb,OAAAD,GAAO,KAAK,KAAM,EAAGC,CAAK,EACnB,IACT,CACA,OAAOA,EAAO,CACZ,OAAAD,GAAO,KAAK,KAAM,EAAG,CAACC,CAAK,EACpB,IACT,CACA,SAASA,EAAO,CACd,OAAAD,GAAO,KAAK,KAAM,EAAGC,CAAK,EACnB,IACT,CACA,WAAWA,EAAO,CAChB,OAAAD,GAAO,KAAK,KAAM,EAAG,CAACC,CAAK,EACpB,IACT,CACA,OAAOtB,EAAK,CACV,OAAAD,GAAO,KAAK,KAAMC,CAAG,EACd,IACT,CACF,EC5kBA,SAASyC,IAAO,CACJ,CAIZ,IAAMC,IAAO,IAAM,CACjB,IAAIC,EAAK,EACT,MAAO,IAAMA,GACf,GAAG,EAMH,SAASC,EAAcC,EAAO,CAC5B,OAAOA,GAAU,IACnB,CAMA,SAASC,EAAQD,EAAO,CACtB,GAAI,MAAM,SAAW,MAAM,QAAQA,CAAK,EACtC,MAAO,GAET,IAAME,EAAO,OAAO,UAAU,SAAS,KAAKF,CAAK,EACjD,OAAIE,EAAK,MAAM,EAAG,CAAC,IAAM,WAAaA,EAAK,MAAM,EAAE,IAAM,QAI3D,CAMA,SAASC,EAASH,EAAO,CACvB,OAAOA,IAAU,MAAQ,OAAO,UAAU,SAAS,KAAKA,CAAK,IAAM,iBACrE,CAKA,SAASI,EAAeJ,EAAO,CAC7B,OAAQ,OAAOA,GAAU,UAAYA,aAAiB,SAAW,SAAS,CAACA,CAAK,CAClF,CAMA,SAASK,EAAgBL,EAAOM,EAAc,CAC5C,OAAOF,EAAeJ,CAAK,EAAIA,EAAQM,CACzC,CAMA,SAASC,EAAeP,EAAOM,EAAc,CAC3C,OAAO,OAAON,EAAU,IAAcM,EAAeN,CACvD,CACA,IAAMQ,GAAe,CAACR,EAAOS,IAAc,OAAOT,GAAU,UAAYA,EAAM,SAAS,GAAG,EAAI,WAAWA,CAAK,EAAI,IAAM,CAACA,EAAQS,EAC3HC,GAAc,CAACV,EAAOS,IAAc,OAAOT,GAAU,UAAYA,EAAM,SAAS,GAAG,EAAI,WAAWA,CAAK,EAAI,IAAMS,EAAY,CAACT,EAQpI,SAASW,EAASC,EAAIC,EAAMC,EAAS,CACnC,GAAIF,GAAM,OAAOA,EAAG,MAAS,WAC3B,OAAOA,EAAG,MAAME,EAASD,CAAI,CAEjC,CACA,SAASE,EAAKC,EAAUJ,EAAIE,EAASG,EAAS,CAC5C,IAAIC,EAAGC,EAAKC,EACZ,GAAInB,EAAQe,CAAQ,EAElB,GADAG,EAAMH,EAAS,OACXC,EACF,IAAKC,EAAIC,EAAM,EAAGD,GAAK,EAAGA,IACxBN,EAAG,KAAKE,EAASE,EAASE,CAAC,EAAGA,CAAC,MAGjC,KAAKA,EAAI,EAAGA,EAAIC,EAAKD,IACnBN,EAAG,KAAKE,EAASE,EAASE,CAAC,EAAGA,CAAC,UAG1Bf,EAASa,CAAQ,EAG1B,IAFAI,EAAO,OAAO,KAAKJ,CAAQ,EAC3BG,EAAMC,EAAK,OACNF,EAAI,EAAGA,EAAIC,EAAKD,IACnBN,EAAG,KAAKE,EAASE,EAASI,EAAKF,CAAC,CAAC,EAAGE,EAAKF,CAAC,CAAC,CAGjD,CAOA,SAASG,GAAeC,EAAIC,EAAI,CAC9B,IAAIL,EAAGM,EAAMC,EAAIC,EACjB,GAAI,CAACJ,GAAM,CAACC,GAAMD,EAAG,SAAWC,EAAG,OACjC,MAAO,GAET,IAAKL,EAAI,EAAGM,EAAOF,EAAG,OAAQJ,EAAIM,EAAM,EAAEN,EAGxC,GAFAO,EAAKH,EAAGJ,CAAC,EACTQ,EAAKH,EAAGL,CAAC,EACLO,EAAG,eAAiBC,EAAG,cAAgBD,EAAG,QAAUC,EAAG,MACzD,MAAO,GAGX,MAAO,EACT,CAKA,SAASC,GAAMC,EAAQ,CACrB,GAAI3B,EAAQ2B,CAAM,EAChB,OAAOA,EAAO,IAAID,EAAK,EAEzB,GAAIxB,EAASyB,CAAM,EAAG,CACpB,IAAMC,EAAS,OAAO,OAAO,IAAI,EAC3BT,EAAO,OAAO,KAAKQ,CAAM,EACzBE,EAAOV,EAAK,OACdW,EAAI,EACR,KAAOA,EAAID,EAAM,EAAEC,EACjBF,EAAOT,EAAKW,CAAC,CAAC,EAAIJ,GAAMC,EAAOR,EAAKW,CAAC,CAAC,CAAC,EAEzC,OAAOF,CACT,CACA,OAAOD,CACT,CACA,SAASI,GAAWC,EAAK,CACvB,MAAO,CAAC,YAAa,YAAa,aAAa,EAAE,QAAQA,CAAG,IAAM,EACpE,CAMA,SAASC,GAAQD,EAAKJ,EAAQD,EAAQO,EAAS,CAC7C,GAAI,CAACH,GAAWC,CAAG,EACjB,OAEF,IAAMG,EAAOP,EAAOI,CAAG,EACjBI,EAAOT,EAAOK,CAAG,EACnB9B,EAASiC,CAAI,GAAKjC,EAASkC,CAAI,EAEjCC,GAAMF,EAAMC,EAAMF,CAAO,EAEzBN,EAAOI,CAAG,EAAIN,GAAMU,CAAI,CAE5B,CACA,SAASC,GAAMT,EAAQD,EAAQO,EAAS,CACtC,IAAMI,EAAUtC,EAAQ2B,CAAM,EAAIA,EAAS,CAACA,CAAM,EAC5CJ,EAAOe,EAAQ,OACrB,GAAI,CAACpC,EAAS0B,CAAM,EAClB,OAAOA,EAETM,EAAUA,GAAW,CAAC,EACtB,IAAMK,EAASL,EAAQ,QAAUD,GAC7BO,EACJ,QAASvB,EAAI,EAAGA,EAAIM,EAAM,EAAEN,EAAG,CAE7B,GADAuB,EAAUF,EAAQrB,CAAC,EACf,CAACf,EAASsC,CAAO,EACnB,SAEF,IAAMrB,EAAO,OAAO,KAAKqB,CAAO,EAChC,QAASV,EAAI,EAAGD,EAAOV,EAAK,OAAQW,EAAID,EAAM,EAAEC,EAC9CS,EAAOpB,EAAKW,CAAC,EAAGF,EAAQY,EAASN,CAAO,CAE5C,CACA,OAAON,CACT,CACA,SAASa,GAAQb,EAAQD,EAAQ,CAE/B,OAAOU,GAAMT,EAAQD,EAAQ,CAC3B,OAAQe,EACV,CAAC,CACH,CAKA,SAASA,GAAUV,EAAKJ,EAAQD,EAAQ,CACtC,GAAI,CAACI,GAAWC,CAAG,EACjB,OAEF,IAAMG,EAAOP,EAAOI,CAAG,EACjBI,EAAOT,EAAOK,CAAG,EACnB9B,EAASiC,CAAI,GAAKjC,EAASkC,CAAI,EACjCK,GAAQN,EAAMC,CAAI,EACR,OAAO,UAAU,eAAe,KAAKR,EAAQI,CAAG,IAC1DJ,EAAOI,CAAG,EAAIN,GAAMU,CAAI,EAE5B,CAUA,IAAMO,GAAe,CAEnB,GAAIC,GAAKA,EAET,EAAGC,GAAKA,EAAE,EACV,EAAGA,GAAKA,EAAE,CACZ,EAIA,SAASC,GAAUC,EAAK,CACtB,IAAMC,EAAQD,EAAI,MAAM,GAAG,EACrBE,EAAO,CAAC,EACVC,EAAM,GACV,QAAWC,KAAQH,EACjBE,GAAOC,EACHD,EAAI,SAAS,IAAI,EACnBA,EAAMA,EAAI,MAAM,EAAG,EAAE,EAAI,KAEzBD,EAAK,KAAKC,CAAG,EACbA,EAAM,IAGV,OAAOD,CACT,CACA,SAASG,GAAgBL,EAAK,CAC5B,IAAME,EAAOH,GAAUC,CAAG,EAC1B,OAAOM,GAAO,CACZ,QAAWC,KAAKL,EAAM,CACpB,GAAIK,IAAM,GACR,MAEFD,EAAMA,GAAOA,EAAIC,CAAC,CACpB,CACA,OAAOD,CACT,CACF,CACA,SAASE,GAAiBF,EAAKN,EAAK,CAElC,OADiBJ,GAAaI,CAAG,IAAMJ,GAAaI,CAAG,EAAIK,GAAgBL,CAAG,IAC9DM,CAAG,CACrB,CAIA,SAASG,GAAYC,EAAK,CACxB,OAAOA,EAAI,OAAO,CAAC,EAAE,YAAY,EAAIA,EAAI,MAAM,CAAC,CAClD,CACA,IAAMC,GAAUC,GAAS,OAAOA,EAAU,IACpCC,GAAaD,GAAS,OAAOA,GAAU,WAEvCE,GAAY,CAACC,EAAGC,IAAM,CAC1B,GAAID,EAAE,OAASC,EAAE,KACf,MAAO,GAET,QAAWC,KAAQF,EACjB,GAAI,CAACC,EAAE,IAAIC,CAAI,EACb,MAAO,GAGX,MAAO,EACT,EAKA,SAASC,GAAc,EAAG,CACxB,OAAO,EAAE,OAAS,WAAa,EAAE,OAAS,SAAW,EAAE,OAAS,aAClE,CAMA,IAAMC,EAAK,KAAK,GACVC,EAAM,EAAID,EACVE,GAAQD,EAAMD,EACdG,GAAW,OAAO,kBAClBC,GAAcJ,EAAK,IACnBK,EAAUL,EAAK,EACfM,GAAaN,EAAK,EAClBO,GAAgBP,EAAK,EAAI,EACzBQ,GAAQ,KAAK,MACbC,GAAO,KAAK,KAClB,SAASC,GAAaC,EAAGC,EAAGC,EAAS,CACnC,OAAO,KAAK,IAAIF,EAAIC,CAAC,EAAIC,CAC3B,CAIA,SAASC,GAAQC,EAAO,CACtB,IAAMC,EAAe,KAAK,MAAMD,CAAK,EACrCA,EAAQL,GAAaK,EAAOC,EAAcD,EAAQ,GAAI,EAAIC,EAAeD,EACzE,IAAME,EAAY,KAAK,IAAI,GAAI,KAAK,MAAMT,GAAMO,CAAK,CAAC,CAAC,EACjDG,EAAWH,EAAQE,EAEzB,OADqBC,GAAY,EAAI,EAAIA,GAAY,EAAI,EAAIA,GAAY,EAAI,EAAI,IAC3DD,CACxB,CAKA,SAASE,GAAW1B,EAAO,CACzB,IAAM2B,EAAS,CAAC,EACVC,EAAO,KAAK,KAAK5B,CAAK,EACxB6B,EACJ,IAAKA,EAAI,EAAGA,EAAID,EAAMC,IAChB7B,EAAQ6B,IAAM,IAChBF,EAAO,KAAKE,CAAC,EACbF,EAAO,KAAK3B,EAAQ6B,CAAC,GAGzB,OAAID,KAAUA,EAAO,IACnBD,EAAO,KAAKC,CAAI,EAElBD,EAAO,KAAK,CAACxB,EAAGC,IAAMD,EAAIC,CAAC,EAAE,IAAI,EAC1BuB,CACT,CAIA,SAASG,GAAeC,EAAG,CACzB,OAAO,OAAOA,GAAM,UAAY,OAAOA,GAAM,UAAYA,IAAM,MAAQ,EAAE,OAAO,eAAeA,GAAK,aAAcA,GAAK,YAAaA,EACtI,CACA,SAASC,GAASD,EAAG,CACnB,MAAO,CAACD,GAAeC,CAAC,GAAK,CAAC,MAAM,WAAWA,CAAC,CAAC,GAAK,SAASA,CAAC,CAClE,CACA,SAASE,GAAYf,EAAGE,EAAS,CAC/B,IAAMc,EAAU,KAAK,MAAMhB,CAAC,EAC5B,OAAOgB,EAAUd,GAAWF,GAAKgB,EAAUd,GAAWF,CACxD,CAIA,SAASiB,GAAmBC,EAAOC,EAAQC,EAAU,CACnD,IAAIT,EAAGU,EAAMvC,EACb,IAAK6B,EAAI,EAAGU,EAAOH,EAAM,OAAQP,EAAIU,EAAMV,IACzC7B,EAAQoC,EAAMP,CAAC,EAAES,CAAQ,EACpB,MAAMtC,CAAK,IACdqC,EAAO,IAAM,KAAK,IAAIA,EAAO,IAAKrC,CAAK,EACvCqC,EAAO,IAAM,KAAK,IAAIA,EAAO,IAAKrC,CAAK,EAG7C,CACA,SAASwC,GAAUC,EAAS,CAC1B,OAAOA,GAAWlC,EAAK,IACzB,CACA,SAASmC,GAAUC,EAAS,CAC1B,OAAOA,GAAW,IAAMpC,EAC1B,CAQA,SAASqC,GAAe1B,EAAG,CACzB,GAAI,CAAC2B,EAAe3B,CAAC,EACnB,OAEF,IAAI4B,EAAI,EACJC,EAAI,EACR,KAAO,KAAK,MAAM7B,EAAI4B,CAAC,EAAIA,IAAM5B,GAC/B4B,GAAK,GACLC,IAEF,OAAOA,CACT,CAEA,SAASC,GAAkBC,EAAaC,EAAY,CAClD,IAAMC,EAAsBD,EAAW,EAAID,EAAY,EACjDG,EAAsBF,EAAW,EAAID,EAAY,EACjDI,EAA2B,KAAK,KAAKF,EAAsBA,EAAsBC,EAAsBA,CAAmB,EAC5HE,EAAQ,KAAK,MAAMF,EAAqBD,CAAmB,EAC/D,OAAIG,EAAQ,IAAO/C,IACjB+C,GAAS9C,GAEJ,CACL,MAAA8C,EACA,SAAUD,CACZ,CACF,CACA,SAASE,GAAsBC,EAAKC,EAAK,CACvC,OAAO,KAAK,KAAK,KAAK,IAAIA,EAAI,EAAID,EAAI,EAAG,CAAC,EAAI,KAAK,IAAIC,EAAI,EAAID,EAAI,EAAG,CAAC,CAAC,CAC1E,CAKA,SAASE,GAAWvD,EAAGC,EAAG,CACxB,OAAQD,EAAIC,EAAIK,IAASD,EAAMD,CACjC,CAKA,SAASoD,EAAgBxD,EAAG,CAC1B,OAAQA,EAAIK,EAAMA,GAAOA,CAC3B,CAIA,SAASoD,GAAcN,EAAOO,EAAOC,EAAKC,EAAuB,CAC/D,IAAM5D,EAAIwD,EAAgBL,CAAK,EACzBU,EAAIL,EAAgBE,CAAK,EACzBf,EAAIa,EAAgBG,CAAG,EACvBG,EAAeN,EAAgBK,EAAI7D,CAAC,EACpC+D,EAAaP,EAAgBb,EAAI3C,CAAC,EAClCgE,EAAeR,EAAgBxD,EAAI6D,CAAC,EACpCI,EAAaT,EAAgBxD,EAAI2C,CAAC,EACxC,OAAO3C,IAAM6D,GAAK7D,IAAM2C,GAAKiB,GAAyBC,IAAMlB,GAAKmB,EAAeC,GAAcC,EAAeC,CAC/G,CAQA,SAASC,EAAYrE,EAAOsE,EAAKC,EAAK,CACpC,OAAO,KAAK,IAAID,EAAK,KAAK,IAAIC,EAAKvE,CAAK,CAAC,CAC3C,CAKA,SAASwE,GAAYxE,EAAO,CAC1B,OAAOqE,EAAYrE,EAAO,OAAQ,KAAK,CACzC,CAQA,SAASyE,GAAWzE,EAAO6D,EAAOC,EAAK1C,EAAU,KAAM,CACrD,OAAOpB,GAAS,KAAK,IAAI6D,EAAOC,CAAG,EAAI1C,GAAWpB,GAAS,KAAK,IAAI6D,EAAOC,CAAG,EAAI1C,CACpF,CACA,SAASsD,GAAQC,EAAO3E,EAAO4E,EAAK,CAClCA,EAAMA,IAAQC,GAASF,EAAME,CAAK,EAAI7E,GACtC,IAAI8E,EAAKH,EAAM,OAAS,EACpBI,EAAK,EACLC,EACJ,KAAOF,EAAKC,EAAK,GACfC,EAAMD,EAAKD,GAAM,EACbF,EAAII,CAAG,EACTD,EAAKC,EAELF,EAAKE,EAGT,MAAO,CACL,GAAAD,EACA,GAAAD,CACF,CACF,CASA,IAAMG,GAAe,CAACN,EAAOvF,EAAKY,EAAOkF,IAASR,GAAQC,EAAO3E,EAAOkF,EAAOL,GAAS,CACtF,IAAMM,EAAKR,EAAME,CAAK,EAAEzF,CAAG,EAC3B,OAAO+F,EAAKnF,GAASmF,IAAOnF,GAAS2E,EAAME,EAAQ,CAAC,EAAEzF,CAAG,IAAMY,CACjE,EAAI6E,GAASF,EAAME,CAAK,EAAEzF,CAAG,EAAIY,CAAK,EAQhCoF,GAAgB,CAACT,EAAOvF,EAAKY,IAAU0E,GAAQC,EAAO3E,EAAO6E,GAASF,EAAME,CAAK,EAAEzF,CAAG,GAAKY,CAAK,EAQtG,SAASqF,GAAeC,EAAQhB,EAAKC,EAAK,CACxC,IAAIV,EAAQ,EACRC,EAAMwB,EAAO,OACjB,KAAOzB,EAAQC,GAAOwB,EAAOzB,CAAK,EAAIS,GACpCT,IAEF,KAAOC,EAAMD,GAASyB,EAAOxB,EAAM,CAAC,EAAIS,GACtCT,IAEF,OAAOD,EAAQ,GAAKC,EAAMwB,EAAO,OAASA,EAAO,MAAMzB,EAAOC,CAAG,EAAIwB,CACvE,CACA,IAAMC,GAAc,CAAC,OAAQ,MAAO,QAAS,SAAU,SAAS,EAChE,SAASC,GAAkBpD,EAAOqD,EAAU,CAC1C,GAAIrD,EAAM,SAAU,CAClBA,EAAM,SAAS,UAAU,KAAKqD,CAAQ,EACtC,MACF,CACA,OAAO,eAAerD,EAAO,WAAY,CACvC,aAAc,GACd,WAAY,GACZ,MAAO,CACL,UAAW,CAACqD,CAAQ,CACtB,CACF,CAAC,EACDF,GAAY,QAAQnG,GAAO,CACzB,IAAMsG,EAAS,UAAY7F,GAAYT,CAAG,EACpCuG,EAAOvD,EAAMhD,CAAG,EACtB,OAAO,eAAegD,EAAOhD,EAAK,CAChC,aAAc,GACd,WAAY,GACZ,SAASwG,EAAM,CACb,IAAMC,EAAMF,EAAK,MAAM,KAAMC,CAAI,EACjC,OAAAxD,EAAM,SAAS,UAAU,QAAQ0D,GAAU,CACrC,OAAOA,EAAOJ,CAAM,GAAM,YAC5BI,EAAOJ,CAAM,EAAE,GAAGE,CAAI,CAE1B,CAAC,EACMC,CACT,CACF,CAAC,CACH,CAAC,CACH,CACA,SAASE,GAAoB3D,EAAOqD,EAAU,CAC5C,IAAMO,EAAO5D,EAAM,SACnB,GAAI,CAAC4D,EACH,OAEF,IAAMC,EAAYD,EAAK,UACjBnB,EAAQoB,EAAU,QAAQR,CAAQ,EACpCZ,IAAU,IACZoB,EAAU,OAAOpB,EAAO,CAAC,EAEvB,EAAAoB,EAAU,OAAS,KAGvBV,GAAY,QAAQnG,GAAO,CACzB,OAAOgD,EAAMhD,CAAG,CAClB,CAAC,EACD,OAAOgD,EAAM,SACf,CAIA,SAAS8D,GAAaC,EAAO,CAC3B,IAAMC,EAAM,IAAI,IAAID,CAAK,EACzB,OAAIC,EAAI,OAASD,EAAM,OACdA,EAEF,MAAM,KAAKC,CAAG,CACvB,CAOA,IAAMC,IAAmB,UAAY,CACnC,OAAI,OAAO,OAAW,IACb,SAAUC,EAAU,CACzB,OAAOA,EAAS,CAClB,EAEK,OAAO,qBAChB,GAAE,EAKF,SAASC,GAAUC,EAAIC,EAAS,CAC9B,IAAIC,EAAY,CAAC,EACbC,EAAU,GACd,OAAO,YAAaC,EAAM,CAExBF,EAAYE,EACPD,IACHA,EAAU,GACVN,GAAiB,KAAK,OAAQ,IAAM,CAClCM,EAAU,GACVH,EAAG,MAAMC,EAASC,CAAS,CAC7B,CAAC,EAEL,CACF,CAIA,SAASG,GAASL,EAAIM,EAAO,CAC3B,IAAIC,EACJ,OAAO,YAAaH,EAAM,CACxB,OAAIE,GACF,aAAaC,CAAO,EACpBA,EAAU,WAAWP,EAAIM,EAAOF,CAAI,GAEpCJ,EAAG,MAAM,KAAMI,CAAI,EAEdE,CACT,CACF,CAKA,IAAME,GAAqBC,GAASA,IAAU,QAAU,OAASA,IAAU,MAAQ,QAAU,SAKvFC,EAAiB,CAACD,EAAOE,EAAOC,IAAQH,IAAU,QAAUE,EAAQF,IAAU,MAAQG,GAAOD,EAAQC,GAAO,EAK5GC,GAAS,CAACJ,EAAOK,EAAMC,EAAOC,IAE3BP,KADOO,EAAM,OAAS,SACJD,EAAQN,IAAU,UAAYK,EAAOC,GAAS,EAAID,EAM7E,SAASG,GAAiCC,EAAMC,EAAQC,EAAoB,CAC1E,IAAMC,EAAaF,EAAO,OACtBR,EAAQ,EACRW,EAAQD,EACZ,GAAIH,EAAK,QAAS,CAChB,GAAM,CACJ,OAAAK,EACA,OAAAC,EACA,QAAAC,CACF,EAAIP,EACEQ,EAAWR,EAAK,SAAUA,EAAK,QAAQ,QAAUA,EAAK,QAAQ,QAAQ,SAAkB,KACxFS,EAAOJ,EAAO,KACd,CACJ,IAAAK,EACA,IAAAC,EACA,WAAAC,EACA,WAAAC,CACF,EAAIR,EAAO,cAAc,EACzB,GAAIO,EAAY,CAMd,GALAnB,EAAQ,KAAK,IAEbqB,GAAaP,EAASE,EAAMC,CAAG,EAAE,GAEjCR,EAAqBC,EAAaW,GAAab,EAAQQ,EAAMJ,EAAO,iBAAiBK,CAAG,CAAC,EAAE,EAAE,EACzFF,EAAU,CACZ,IAAMO,EAAsBR,EAAQ,MAAM,EAAGd,EAAQ,CAAC,EAAE,QAAQ,EAAE,UAAUuB,GAAS,CAACC,EAAcD,EAAMV,EAAO,IAAI,CAAC,CAAC,EACvHb,GAAS,KAAK,IAAI,EAAGsB,CAAmB,CAC1C,CACAtB,EAAQyB,EAAYzB,EAAO,EAAGU,EAAa,CAAC,CAC9C,CACA,GAAIU,EAAY,CACd,IAAInB,EAAM,KAAK,IAEfoB,GAAaP,EAASF,EAAO,KAAMM,EAAK,EAAI,EAAE,GAAK,EAEnDT,EAAqB,EAAIY,GAAab,EAAQQ,EAAMJ,EAAO,iBAAiBM,CAAG,EAAG,EAAI,EAAE,GAAK,CAAC,EAC9F,GAAIH,EAAU,CACZ,IAAMW,EAAsBZ,EAAQ,MAAMb,EAAM,CAAC,EAAE,UAAUsB,GAAS,CAACC,EAAcD,EAAMV,EAAO,IAAI,CAAC,CAAC,EACxGZ,GAAO,KAAK,IAAI,EAAGyB,CAAmB,CACxC,CACAf,EAAQc,EAAYxB,EAAKD,EAAOU,CAAU,EAAIV,CAChD,MACEW,EAAQD,EAAaV,CAEzB,CACA,MAAO,CACL,MAAAA,EACA,MAAAW,CACF,CACF,CAOA,SAASgB,GAAoBpB,EAAM,CACjC,GAAM,CACJ,OAAAqB,EACA,OAAAC,EACA,aAAAC,CACF,EAAIvB,EACEwB,EAAY,CAChB,KAAMH,EAAO,IACb,KAAMA,EAAO,IACb,KAAMC,EAAO,IACb,KAAMA,EAAO,GACf,EACA,GAAI,CAACC,EACH,OAAAvB,EAAK,aAAewB,EACb,GAET,IAAMC,EAAUF,EAAa,OAASF,EAAO,KAAOE,EAAa,OAASF,EAAO,KAAOE,EAAa,OAASD,EAAO,KAAOC,EAAa,OAASD,EAAO,IACzJ,cAAO,OAAOC,EAAcC,CAAS,EAC9BC,CACT,CACA,IAAMC,GAASC,GAAKA,IAAM,GAAKA,IAAM,EAC/BC,GAAY,CAACD,EAAGE,EAAGC,IAAM,EAAE,KAAK,IAAI,EAAG,IAAMH,GAAK,EAAE,EAAI,KAAK,KAAKA,EAAIE,GAAKE,EAAMD,CAAC,GAClFE,GAAa,CAACL,EAAGE,EAAGC,IAAM,KAAK,IAAI,EAAG,IAAMH,CAAC,EAAI,KAAK,KAAKA,EAAIE,GAAKE,EAAMD,CAAC,EAAI,EAM/EG,GAAU,CACd,OAAQN,GAAKA,EACb,WAAYA,GAAKA,EAAIA,EACrB,YAAaA,GAAK,CAACA,GAAKA,EAAI,GAC5B,cAAeA,IAAMA,GAAK,IAAO,EAAI,GAAMA,EAAIA,EAAI,KAAQ,EAAEA,GAAKA,EAAI,GAAK,GAC3E,YAAaA,GAAKA,EAAIA,EAAIA,EAC1B,aAAcA,IAAMA,GAAK,GAAKA,EAAIA,EAAI,EACtC,eAAgBA,IAAMA,GAAK,IAAO,EAAI,GAAMA,EAAIA,EAAIA,EAAI,KAAQA,GAAK,GAAKA,EAAIA,EAAI,GAClF,YAAaA,GAAKA,EAAIA,EAAIA,EAAIA,EAC9B,aAAcA,GAAK,GAAGA,GAAK,GAAKA,EAAIA,EAAIA,EAAI,GAC5C,eAAgBA,IAAMA,GAAK,IAAO,EAAI,GAAMA,EAAIA,EAAIA,EAAIA,EAAI,MAASA,GAAK,GAAKA,EAAIA,EAAIA,EAAI,GAC3F,YAAaA,GAAKA,EAAIA,EAAIA,EAAIA,EAAIA,EAClC,aAAcA,IAAMA,GAAK,GAAKA,EAAIA,EAAIA,EAAIA,EAAI,EAC9C,eAAgBA,IAAMA,GAAK,IAAO,EAAI,GAAMA,EAAIA,EAAIA,EAAIA,EAAIA,EAAI,KAAQA,GAAK,GAAKA,EAAIA,EAAIA,EAAIA,EAAI,GAClG,WAAYA,GAAK,CAAC,KAAK,IAAIA,EAAIO,CAAO,EAAI,EAC1C,YAAaP,GAAK,KAAK,IAAIA,EAAIO,CAAO,EACtC,cAAeP,GAAK,KAAQ,KAAK,IAAIQ,EAAKR,CAAC,EAAI,GAC/C,WAAYA,GAAKA,IAAM,EAAI,EAAI,KAAK,IAAI,EAAG,IAAMA,EAAI,EAAE,EACvD,YAAaA,GAAKA,IAAM,EAAI,EAAI,CAAC,KAAK,IAAI,EAAG,IAAMA,CAAC,EAAI,EACxD,cAAeA,GAAKD,GAAOC,CAAC,EAAIA,EAAIA,EAAI,GAAM,GAAM,KAAK,IAAI,EAAG,IAAMA,EAAI,EAAI,EAAE,EAAI,IAAO,CAAC,KAAK,IAAI,EAAG,KAAOA,EAAI,EAAI,EAAE,EAAI,GAC7H,WAAYA,GAAKA,GAAK,EAAIA,EAAI,EAAE,KAAK,KAAK,EAAIA,EAAIA,CAAC,EAAI,GACvD,YAAaA,GAAK,KAAK,KAAK,GAAKA,GAAK,GAAKA,CAAC,EAC5C,cAAeA,IAAMA,GAAK,IAAO,EAAI,KAAQ,KAAK,KAAK,EAAIA,EAAIA,CAAC,EAAI,GAAK,IAAO,KAAK,KAAK,GAAKA,GAAK,GAAKA,CAAC,EAAI,GAC9G,cAAeA,GAAKD,GAAOC,CAAC,EAAIA,EAAIC,GAAUD,EAAG,KAAO,EAAG,EAC3D,eAAgBA,GAAKD,GAAOC,CAAC,EAAIA,EAAIK,GAAWL,EAAG,KAAO,EAAG,EAC7D,iBAAiBA,EAAG,CAGlB,OAAOD,GAAOC,CAAC,EAAIA,EAAIA,EAAI,GAAM,GAAMC,GAAUD,EAAI,EAAG,MAAG,GAAC,EAAI,GAAM,GAAMK,GAAWL,EAAI,EAAI,EAAG,MAAG,GAAC,CACxG,EACA,WAAWA,EAAG,CAEZ,OAAOA,EAAIA,IAAM,QAAI,GAAKA,EAAI,QAChC,EACA,YAAYA,EAAG,CAEb,OAAQA,GAAK,GAAKA,IAAM,QAAI,GAAKA,EAAI,SAAK,CAC5C,EACA,cAAcA,EAAG,CACf,IAAIE,EAAI,QACR,OAAKF,GAAK,IAAO,EACR,IAAOA,EAAIA,KAAOE,GAAK,OAAS,GAAKF,EAAIE,IAE3C,KAAQF,GAAK,GAAKA,KAAOE,GAAK,OAAS,GAAKF,EAAIE,GAAK,EAC9D,EACA,aAAcF,GAAK,EAAIM,GAAQ,cAAc,EAAIN,CAAC,EAClD,cAAcA,EAAG,CAGf,OAAIA,EAAI,EAAI,KACH,OAAIA,EAAIA,EAEbA,EAAI,EAAI,KACH,QAAKA,GAAK,IAAM,MAAKA,EAAI,IAE9BA,EAAI,IAAM,KACL,QAAKA,GAAK,KAAO,MAAKA,EAAI,MAE5B,QAAKA,GAAK,MAAQ,MAAKA,EAAI,OACpC,EACA,gBAAiBA,GAAKA,EAAI,GAAMM,GAAQ,aAAaN,EAAI,CAAC,EAAI,GAAMM,GAAQ,cAAcN,EAAI,EAAI,CAAC,EAAI,GAAM,EAC/G,EACA,SAASS,GAAoBC,EAAO,CAClC,GAAIA,GAAS,OAAOA,GAAU,SAAU,CACtC,IAAMC,EAAOD,EAAM,SAAS,EAC5B,OAAOC,IAAS,0BAA4BA,IAAS,yBACvD,CACA,MAAO,EACT,CACA,SAASC,GAAMF,EAAO,CACpB,OAAOD,GAAoBC,CAAK,EAAIA,EAAQ,IAAIG,GAAMH,CAAK,CAC7D,CACA,SAASI,GAAcJ,EAAO,CAC5B,OAAOD,GAAoBC,CAAK,EAAIA,EAAQ,IAAIG,GAAMH,CAAK,EAAE,SAAS,EAAG,EAAE,OAAO,EAAG,EAAE,UAAU,CACnG,CACA,IAAMK,GAAU,CAAC,IAAK,IAAK,cAAe,SAAU,SAAS,EACvDC,GAAS,CAAC,QAAS,cAAe,iBAAiB,EACzD,SAASC,GAAwBC,EAAU,CACzCA,EAAS,IAAI,YAAa,CACxB,MAAO,OACP,SAAU,IACV,OAAQ,eACR,GAAI,OACJ,KAAM,OACN,KAAM,OACN,GAAI,OACJ,KAAM,MACR,CAAC,EACDA,EAAS,SAAS,YAAa,CAC7B,UAAW,GACX,WAAY,GACZ,YAAaC,GAAQA,IAAS,cAAgBA,IAAS,cAAgBA,IAAS,IAClF,CAAC,EACDD,EAAS,IAAI,aAAc,CACzB,OAAQ,CACN,KAAM,QACN,WAAYF,EACd,EACA,QAAS,CACP,KAAM,SACN,WAAYD,EACd,CACF,CAAC,EACDG,EAAS,SAAS,aAAc,CAC9B,UAAW,WACb,CAAC,EACDA,EAAS,IAAI,cAAe,CAC1B,OAAQ,CACN,UAAW,CACT,SAAU,GACZ,CACF,EACA,OAAQ,CACN,UAAW,CACT,SAAU,CACZ,CACF,EACA,KAAM,CACJ,WAAY,CACV,OAAQ,CACN,KAAM,aACR,EACA,QAAS,CACP,KAAM,UACN,SAAU,CACZ,CACF,CACF,EACA,KAAM,CACJ,WAAY,CACV,OAAQ,CACN,GAAI,aACN,EACA,QAAS,CACP,KAAM,UACN,OAAQ,SACR,GAAIE,GAAKA,EAAI,CACf,CACF,CACF,CACF,CAAC,CACH,CACA,SAASC,GAAqBH,EAAU,CACtCA,EAAS,IAAI,SAAU,CACrB,YAAa,GACb,QAAS,CACP,IAAK,EACL,MAAO,EACP,OAAQ,EACR,KAAM,CACR,CACF,CAAC,CACH,CACA,IAAMI,GAAY,IAAI,IACtB,SAASC,GAAgBC,EAAQC,EAAS,CACxCA,EAAUA,GAAW,CAAC,EACtB,IAAMC,EAAWF,EAAS,KAAK,UAAUC,CAAO,EAC5CE,EAAYL,GAAU,IAAII,CAAQ,EACtC,OAAKC,IACHA,EAAY,IAAI,KAAK,aAAaH,EAAQC,CAAO,EACjDH,GAAU,IAAII,EAAUC,CAAS,GAE5BA,CACT,CACA,SAASC,GAAaC,EAAKL,EAAQC,EAAS,CAC1C,OAAOF,GAAgBC,EAAQC,CAAO,EAAE,OAAOI,CAAG,CACpD,CACA,IAAMC,GAAa,CACjB,OAAOpB,EAAO,CACZ,OAAOqB,EAAQrB,CAAK,EAAIA,EAAQ,GAAKA,CACvC,EACA,QAAQsB,EAAWC,EAAOC,EAAO,CAC/B,GAAIF,IAAc,EAChB,MAAO,IAET,IAAMR,EAAS,KAAK,MAAM,QAAQ,OAC9BW,EACAC,EAAQJ,EACZ,GAAIE,EAAM,OAAS,EAAG,CACpB,IAAMG,EAAU,KAAK,IAAI,KAAK,IAAIH,EAAM,CAAC,EAAE,KAAK,EAAG,KAAK,IAAIA,EAAMA,EAAM,OAAS,CAAC,EAAE,KAAK,CAAC,GACtFG,EAAU,MAAQA,EAAU,QAC9BF,EAAW,cAEbC,EAAQE,GAAeN,EAAWE,CAAK,CACzC,CACA,IAAMK,EAAWC,GAAM,KAAK,IAAIJ,CAAK,CAAC,EAChCK,EAAa,MAAMF,CAAQ,EAAI,EAAI,KAAK,IAAI,KAAK,IAAI,GAAK,KAAK,MAAMA,CAAQ,EAAG,EAAE,EAAG,CAAC,EACtFd,EAAU,CACd,SAAAU,EACA,sBAAuBM,EACvB,sBAAuBA,CACzB,EACA,cAAO,OAAOhB,EAAS,KAAK,QAAQ,MAAM,MAAM,EACzCG,GAAaI,EAAWR,EAAQC,CAAO,CAChD,EACA,YAAYO,EAAWC,EAAOC,EAAO,CACnC,GAAIF,IAAc,EAChB,MAAO,IAET,IAAMU,EAASR,EAAMD,CAAK,EAAE,aAAeD,EAAY,KAAK,IAAI,GAAI,KAAK,MAAMQ,GAAMR,CAAS,CAAC,CAAC,EAChG,MAAI,CAAC,EAAG,EAAG,EAAG,EAAG,GAAI,EAAE,EAAE,SAASU,CAAM,GAAKT,EAAQ,GAAMC,EAAM,OACxDJ,GAAW,QAAQ,KAAK,KAAME,EAAWC,EAAOC,CAAK,EAEvD,EACT,CACF,EACA,SAASI,GAAeN,EAAWE,EAAO,CACxC,IAAIE,EAAQF,EAAM,OAAS,EAAIA,EAAM,CAAC,EAAE,MAAQA,EAAM,CAAC,EAAE,MAAQA,EAAM,CAAC,EAAE,MAAQA,EAAM,CAAC,EAAE,MAC3F,OAAI,KAAK,IAAIE,CAAK,GAAK,GAAKJ,IAAc,KAAK,MAAMA,CAAS,IAC5DI,EAAQJ,EAAY,KAAK,MAAMA,CAAS,GAEnCI,CACT,CACA,IAAIO,GAAQ,CACV,WAAAb,EACF,EACA,SAASc,GAAmB1B,EAAU,CACpCA,EAAS,IAAI,QAAS,CACpB,QAAS,GACT,OAAQ,GACR,QAAS,GACT,YAAa,GACb,OAAQ,QACR,KAAM,GACN,MAAO,EACP,KAAM,CACJ,QAAS,GACT,UAAW,EACX,gBAAiB,GACjB,UAAW,GACX,WAAY,EACZ,UAAW,CAAC2B,EAAMpB,IAAYA,EAAQ,UACtC,UAAW,CAACoB,EAAMpB,IAAYA,EAAQ,MACtC,OAAQ,EACV,EACA,OAAQ,CACN,QAAS,GACT,KAAM,CAAC,EACP,WAAY,EACZ,MAAO,CACT,EACA,MAAO,CACL,QAAS,GACT,KAAM,GACN,QAAS,CACP,IAAK,EACL,OAAQ,CACV,CACF,EACA,MAAO,CACL,YAAa,EACb,YAAa,GACb,OAAQ,GACR,gBAAiB,EACjB,gBAAiB,GACjB,QAAS,EACT,QAAS,GACT,SAAU,GACV,gBAAiB,EACjB,YAAa,EACb,SAAUkB,GAAM,WAAW,OAC3B,MAAO,CAAC,EACR,MAAO,CAAC,EACR,MAAO,SACP,WAAY,OACZ,kBAAmB,GACnB,cAAe,4BACf,gBAAiB,CACnB,CACF,CAAC,EACDzB,EAAS,MAAM,cAAe,QAAS,GAAI,OAAO,EAClDA,EAAS,MAAM,aAAc,QAAS,GAAI,aAAa,EACvDA,EAAS,MAAM,eAAgB,QAAS,GAAI,aAAa,EACzDA,EAAS,MAAM,cAAe,QAAS,GAAI,OAAO,EAClDA,EAAS,SAAS,QAAS,CACzB,UAAW,GACX,YAAaC,GAAQ,CAACA,EAAK,WAAW,QAAQ,GAAK,CAACA,EAAK,WAAW,OAAO,GAAKA,IAAS,YAAcA,IAAS,SAChH,WAAYA,GAAQA,IAAS,cAAgBA,IAAS,kBAAoBA,IAAS,MACrF,CAAC,EACDD,EAAS,SAAS,SAAU,CAC1B,UAAW,OACb,CAAC,EACDA,EAAS,SAAS,cAAe,CAC/B,YAAaC,GAAQA,IAAS,mBAAqBA,IAAS,WAC5D,WAAYA,GAAQA,IAAS,iBAC/B,CAAC,CACH,CACA,IAAM2B,GAAY,OAAO,OAAO,IAAI,EAC9BC,GAAc,OAAO,OAAO,IAAI,EACtC,SAASC,GAAWC,EAAMC,EAAK,CAC7B,GAAI,CAACA,EACH,OAAOD,EAET,IAAME,EAAOD,EAAI,MAAM,GAAG,EAC1B,QAASE,EAAI,EAAG,EAAID,EAAK,OAAQC,EAAI,EAAG,EAAEA,EAAG,CAC3C,IAAMC,EAAIF,EAAKC,CAAC,EAChBH,EAAOA,EAAKI,CAAC,IAAMJ,EAAKI,CAAC,EAAI,OAAO,OAAO,IAAI,EACjD,CACA,OAAOJ,CACT,CACA,SAASK,GAAIC,EAAMC,EAAOC,EAAQ,CAChC,OAAI,OAAOD,GAAU,SACZE,GAAMV,GAAWO,EAAMC,CAAK,EAAGC,CAAM,EAEvCC,GAAMV,GAAWO,EAAM,EAAE,EAAGC,CAAK,CAC1C,CACA,IAAMG,GAAN,KAAe,CACb,YAAYC,EAAcC,EAAW,CACnC,KAAK,UAAY,OACjB,KAAK,gBAAkB,kBACvB,KAAK,YAAc,kBACnB,KAAK,MAAQ,OACb,KAAK,SAAW,CAAC,EACjB,KAAK,iBAAmBC,GAAWA,EAAQ,MAAM,SAAS,oBAAoB,EAC9E,KAAK,SAAW,CAAC,EACjB,KAAK,OAAS,CAAC,YAAa,WAAY,QAAS,aAAc,WAAW,EAC1E,KAAK,KAAO,CACV,OAAQ,qDACR,KAAM,GACN,MAAO,SACP,WAAY,IACZ,OAAQ,IACV,EACA,KAAK,MAAQ,CAAC,EACd,KAAK,qBAAuB,CAACC,EAAKtC,IAAYX,GAAcW,EAAQ,eAAe,EACnF,KAAK,iBAAmB,CAACsC,EAAKtC,IAAYX,GAAcW,EAAQ,WAAW,EAC3E,KAAK,WAAa,CAACsC,EAAKtC,IAAYX,GAAcW,EAAQ,KAAK,EAC/D,KAAK,UAAY,IACjB,KAAK,YAAc,CACjB,KAAM,UACN,UAAW,GACX,iBAAkB,EACpB,EACA,KAAK,oBAAsB,GAC3B,KAAK,QAAU,KACf,KAAK,QAAU,KACf,KAAK,QAAU,GACf,KAAK,QAAU,CAAC,EAChB,KAAK,WAAa,GAClB,KAAK,MAAQ,OACb,KAAK,OAAS,CAAC,EACf,KAAK,SAAW,GAChB,KAAK,wBAA0B,GAC/B,KAAK,SAASmC,CAAY,EAC1B,KAAK,MAAMC,CAAS,CACtB,CACA,IAAIL,EAAOC,EAAQ,CACjB,OAAOH,GAAI,KAAME,EAAOC,CAAM,CAChC,CACA,IAAID,EAAO,CACT,OAAOR,GAAW,KAAMQ,CAAK,CAC/B,CACA,SAASA,EAAOC,EAAQ,CACtB,OAAOH,GAAIP,GAAaS,EAAOC,CAAM,CACvC,CACA,SAASD,EAAOC,EAAQ,CACtB,OAAOH,GAAIR,GAAWU,EAAOC,CAAM,CACrC,CACA,MAAMD,EAAOrC,EAAM6C,EAAaC,EAAY,CAC1C,IAAMC,EAAclB,GAAW,KAAMQ,CAAK,EACpCW,EAAoBnB,GAAW,KAAMgB,CAAW,EAChDI,EAAc,IAAMjD,EAC1B,OAAO,iBAAiB+C,EAAa,CACnC,CAACE,CAAW,EAAG,CACb,MAAOF,EAAY/C,CAAI,EACvB,SAAU,EACZ,EACA,CAACA,CAAI,EAAG,CACN,WAAY,GACZ,KAAM,CACJ,IAAMkD,EAAQ,KAAKD,CAAW,EACxBE,EAASH,EAAkBF,CAAU,EAC3C,OAAIM,EAASF,CAAK,EACT,OAAO,OAAO,CAAC,EAAGC,EAAQD,CAAK,EAEjCG,EAAeH,EAAOC,CAAM,CACrC,EACA,IAAI5D,EAAO,CACT,KAAK0D,CAAW,EAAI1D,CACtB,CACF,CACF,CAAC,CACH,CACA,MAAM+D,EAAU,CACdA,EAAS,QAAQC,GAASA,EAAM,IAAI,CAAC,CACvC,CACF,EACIxD,EAA0B,IAAIyC,GAAS,CACzC,YAAaxC,GAAQ,CAACA,EAAK,WAAW,IAAI,EAC1C,WAAYA,GAAQA,IAAS,SAC7B,MAAO,CACL,UAAW,aACb,EACA,YAAa,CACX,YAAa,GACb,WAAY,EACd,CACF,EAAG,CAACF,GAAyBI,GAAsBuB,EAAkB,CAAC,EAQtE,SAAS+B,GAAaC,EAAM,CAC1B,MAAI,CAACA,GAAQtF,EAAcsF,EAAK,IAAI,GAAKtF,EAAcsF,EAAK,MAAM,EACzD,MAEDA,EAAK,MAAQA,EAAK,MAAQ,IAAM,KAAOA,EAAK,OAASA,EAAK,OAAS,IAAM,IAAMA,EAAK,KAAO,MAAQA,EAAK,MAClH,CAIA,SAASC,GAAad,EAAKe,EAAMC,EAAIC,EAASC,EAAQ,CACpD,IAAIC,EAAYJ,EAAKG,CAAM,EAC3B,OAAKC,IACHA,EAAYJ,EAAKG,CAAM,EAAIlB,EAAI,YAAYkB,CAAM,EAAE,MACnDF,EAAG,KAAKE,CAAM,GAEZC,EAAYF,IACdA,EAAUE,GAELF,CACT,CAIA,SAASG,GAAapB,EAAKa,EAAMQ,EAAeC,EAAO,CACrDA,EAAQA,GAAS,CAAC,EAClB,IAAIP,EAAOO,EAAM,KAAOA,EAAM,MAAQ,CAAC,EACnCN,EAAKM,EAAM,eAAiBA,EAAM,gBAAkB,CAAC,EACrDA,EAAM,OAAST,IACjBE,EAAOO,EAAM,KAAO,CAAC,EACrBN,EAAKM,EAAM,eAAiB,CAAC,EAC7BA,EAAM,KAAOT,GAEfb,EAAI,KAAK,EACTA,EAAI,KAAOa,EACX,IAAII,EAAU,EACRM,EAAOF,EAAc,OACvBhC,EAAGmC,EAAGC,EAAMC,EAAOC,EACvB,IAAKtC,EAAI,EAAGA,EAAIkC,EAAMlC,IAGpB,GAFAqC,EAAQL,EAAchC,CAAC,EAEIqC,GAAU,MAAQ,CAAC1D,EAAQ0D,CAAK,EACzDT,EAAUH,GAAad,EAAKe,EAAMC,EAAIC,EAASS,CAAK,UAC3C1D,EAAQ0D,CAAK,EAGtB,IAAKF,EAAI,EAAGC,EAAOC,EAAM,OAAQF,EAAIC,EAAMD,IACzCG,EAAcD,EAAMF,CAAC,EAEYG,GAAgB,MAAQ,CAAC3D,EAAQ2D,CAAW,IAC3EV,EAAUH,GAAad,EAAKe,EAAMC,EAAIC,EAASU,CAAW,GAKlE3B,EAAI,QAAQ,EACZ,IAAM4B,EAAQZ,EAAG,OAAS,EAC1B,GAAIY,EAAQP,EAAc,OAAQ,CAChC,IAAKhC,EAAI,EAAGA,EAAIuC,EAAOvC,IACrB,OAAO0B,EAAKC,EAAG3B,CAAC,CAAC,EAEnB2B,EAAG,OAAO,EAAGY,CAAK,CACpB,CACA,OAAOX,CACT,CASA,SAASY,GAAYC,EAAOC,EAAOC,EAAO,CACxC,IAAMC,EAAmBH,EAAM,wBACzBI,EAAYF,IAAU,EAAI,KAAK,IAAIA,EAAQ,EAAG,EAAG,EAAI,EAC3D,OAAO,KAAK,OAAOD,EAAQG,GAAaD,CAAgB,EAAIA,EAAmBC,CACjF,CAIA,SAASC,GAAYC,EAAQpC,EAAK,CAC5B,CAACA,GAAO,CAACoC,IAGbpC,EAAMA,GAAOoC,EAAO,WAAW,IAAI,EACnCpC,EAAI,KAAK,EAGTA,EAAI,eAAe,EACnBA,EAAI,UAAU,EAAG,EAAGoC,EAAO,MAAOA,EAAO,MAAM,EAC/CpC,EAAI,QAAQ,EACd,CACA,SAASqC,GAAUrC,EAAKtC,EAAS4E,EAAGC,EAAG,CAErCC,GAAgBxC,EAAKtC,EAAS4E,EAAGC,EAAG,IAAI,CAC1C,CAEA,SAASC,GAAgBxC,EAAKtC,EAAS4E,EAAGC,EAAGE,EAAG,CAC9C,IAAI7F,EAAM8F,EAASC,EAASC,EAAMC,EAAcb,EAAOc,EAAUC,EAC3DC,EAAQtF,EAAQ,WAChBuF,EAAWvF,EAAQ,SACnBwF,EAASxF,EAAQ,OACnByF,GAAOF,GAAY,GAAKG,GAC5B,GAAIJ,GAAS,OAAOA,GAAU,WAC5BpG,EAAOoG,EAAM,SAAS,EAClBpG,IAAS,6BAA+BA,IAAS,8BAA8B,CACjFoD,EAAI,KAAK,EACTA,EAAI,UAAUsC,EAAGC,CAAC,EAClBvC,EAAI,OAAOmD,CAAG,EACdnD,EAAI,UAAUgD,EAAO,CAACA,EAAM,MAAQ,EAAG,CAACA,EAAM,OAAS,EAAGA,EAAM,MAAOA,EAAM,MAAM,EACnFhD,EAAI,QAAQ,EACZ,MACF,CAEF,GAAI,QAAMkD,CAAM,GAAKA,GAAU,GAI/B,QADAlD,EAAI,UAAU,EACNgD,EAAO,CAEb,QACMP,EACFzC,EAAI,QAAQsC,EAAGC,EAAGE,EAAI,EAAGS,EAAQ,EAAG,EAAG7G,CAAG,EAE1C2D,EAAI,IAAIsC,EAAGC,EAAGW,EAAQ,EAAG7G,CAAG,EAE9B2D,EAAI,UAAU,EACd,MACF,IAAK,WACHgC,EAAQS,EAAIA,EAAI,EAAIS,EACpBlD,EAAI,OAAOsC,EAAI,KAAK,IAAIa,CAAG,EAAInB,EAAOO,EAAI,KAAK,IAAIY,CAAG,EAAID,CAAM,EAChEC,GAAOE,GACPrD,EAAI,OAAOsC,EAAI,KAAK,IAAIa,CAAG,EAAInB,EAAOO,EAAI,KAAK,IAAIY,CAAG,EAAID,CAAM,EAChEC,GAAOE,GACPrD,EAAI,OAAOsC,EAAI,KAAK,IAAIa,CAAG,EAAInB,EAAOO,EAAI,KAAK,IAAIY,CAAG,EAAID,CAAM,EAChElD,EAAI,UAAU,EACd,MACF,IAAK,cAQH6C,EAAeK,EAAS,KACxBN,EAAOM,EAASL,EAChBH,EAAU,KAAK,IAAIS,EAAMG,EAAU,EAAIV,EACvCE,EAAW,KAAK,IAAIK,EAAMG,EAAU,GAAKb,EAAIA,EAAI,EAAII,EAAeD,GACpED,EAAU,KAAK,IAAIQ,EAAMG,EAAU,EAAIV,EACvCG,EAAW,KAAK,IAAII,EAAMG,EAAU,GAAKb,EAAIA,EAAI,EAAII,EAAeD,GACpE5C,EAAI,IAAIsC,EAAIQ,EAAUP,EAAII,EAASE,EAAcM,EAAM1G,EAAI0G,EAAM3G,CAAO,EACxEwD,EAAI,IAAIsC,EAAIS,EAAUR,EAAIG,EAASG,EAAcM,EAAM3G,EAAS2G,CAAG,EACnEnD,EAAI,IAAIsC,EAAIQ,EAAUP,EAAII,EAASE,EAAcM,EAAKA,EAAM3G,CAAO,EACnEwD,EAAI,IAAIsC,EAAIS,EAAUR,EAAIG,EAASG,EAAcM,EAAM3G,EAAS2G,EAAM1G,CAAE,EACxEuD,EAAI,UAAU,EACd,MACF,IAAK,OACH,GAAI,CAACiD,EAAU,CACbL,EAAO,KAAK,QAAUM,EACtBlB,EAAQS,EAAIA,EAAI,EAAIG,EACpB5C,EAAI,KAAKsC,EAAIN,EAAOO,EAAIK,EAAM,EAAIZ,EAAO,EAAIY,CAAI,EACjD,KACF,CACAO,GAAOG,GAET,IAAK,UACHR,EAAW,KAAK,IAAIK,CAAG,GAAKV,EAAIA,EAAI,EAAIS,GACxCR,EAAU,KAAK,IAAIS,CAAG,EAAID,EAC1BP,EAAU,KAAK,IAAIQ,CAAG,EAAID,EAC1BH,EAAW,KAAK,IAAII,CAAG,GAAKV,EAAIA,EAAI,EAAIS,GACxClD,EAAI,OAAOsC,EAAIQ,EAAUP,EAAII,CAAO,EACpC3C,EAAI,OAAOsC,EAAIS,EAAUR,EAAIG,CAAO,EACpC1C,EAAI,OAAOsC,EAAIQ,EAAUP,EAAII,CAAO,EACpC3C,EAAI,OAAOsC,EAAIS,EAAUR,EAAIG,CAAO,EACpC1C,EAAI,UAAU,EACd,MACF,IAAK,WACHmD,GAAOG,GAET,IAAK,QACHR,EAAW,KAAK,IAAIK,CAAG,GAAKV,EAAIA,EAAI,EAAIS,GACxCR,EAAU,KAAK,IAAIS,CAAG,EAAID,EAC1BP,EAAU,KAAK,IAAIQ,CAAG,EAAID,EAC1BH,EAAW,KAAK,IAAII,CAAG,GAAKV,EAAIA,EAAI,EAAIS,GACxClD,EAAI,OAAOsC,EAAIQ,EAAUP,EAAII,CAAO,EACpC3C,EAAI,OAAOsC,EAAIQ,EAAUP,EAAII,CAAO,EACpC3C,EAAI,OAAOsC,EAAIS,EAAUR,EAAIG,CAAO,EACpC1C,EAAI,OAAOsC,EAAIS,EAAUR,EAAIG,CAAO,EACpC,MACF,IAAK,OACHI,EAAW,KAAK,IAAIK,CAAG,GAAKV,EAAIA,EAAI,EAAIS,GACxCR,EAAU,KAAK,IAAIS,CAAG,EAAID,EAC1BP,EAAU,KAAK,IAAIQ,CAAG,EAAID,EAC1BH,EAAW,KAAK,IAAII,CAAG,GAAKV,EAAIA,EAAI,EAAIS,GACxClD,EAAI,OAAOsC,EAAIQ,EAAUP,EAAII,CAAO,EACpC3C,EAAI,OAAOsC,EAAIQ,EAAUP,EAAII,CAAO,EACpC3C,EAAI,OAAOsC,EAAIS,EAAUR,EAAIG,CAAO,EACpC1C,EAAI,OAAOsC,EAAIS,EAAUR,EAAIG,CAAO,EACpCS,GAAOG,GACPR,EAAW,KAAK,IAAIK,CAAG,GAAKV,EAAIA,EAAI,EAAIS,GACxCR,EAAU,KAAK,IAAIS,CAAG,EAAID,EAC1BP,EAAU,KAAK,IAAIQ,CAAG,EAAID,EAC1BH,EAAW,KAAK,IAAII,CAAG,GAAKV,EAAIA,EAAI,EAAIS,GACxClD,EAAI,OAAOsC,EAAIQ,EAAUP,EAAII,CAAO,EACpC3C,EAAI,OAAOsC,EAAIQ,EAAUP,EAAII,CAAO,EACpC3C,EAAI,OAAOsC,EAAIS,EAAUR,EAAIG,CAAO,EACpC1C,EAAI,OAAOsC,EAAIS,EAAUR,EAAIG,CAAO,EACpC,MACF,IAAK,OACHA,EAAUD,EAAIA,EAAI,EAAI,KAAK,IAAIU,CAAG,EAAID,EACtCP,EAAU,KAAK,IAAIQ,CAAG,EAAID,EAC1BlD,EAAI,OAAOsC,EAAII,EAASH,EAAII,CAAO,EACnC3C,EAAI,OAAOsC,EAAII,EAASH,EAAII,CAAO,EACnC,MACF,IAAK,OACH3C,EAAI,OAAOsC,EAAGC,CAAC,EACfvC,EAAI,OAAOsC,EAAI,KAAK,IAAIa,CAAG,GAAKV,EAAIA,EAAI,EAAIS,GAASX,EAAI,KAAK,IAAIY,CAAG,EAAID,CAAM,EAC/E,MACF,IAAK,GACHlD,EAAI,UAAU,EACd,KACJ,CACAA,EAAI,KAAK,EACLtC,EAAQ,YAAc,GACxBsC,EAAI,OAAO,EAEf,CAQA,SAASuD,GAAejI,EAAOkI,EAAMC,EAAQ,CAC3C,OAAAA,EAASA,GAAU,GACZ,CAACD,GAAQlI,GAASA,EAAM,EAAIkI,EAAK,KAAOC,GAAUnI,EAAM,EAAIkI,EAAK,MAAQC,GAAUnI,EAAM,EAAIkI,EAAK,IAAMC,GAAUnI,EAAM,EAAIkI,EAAK,OAASC,CACnJ,CACA,SAASC,GAAS1D,EAAKwD,EAAM,CAC3BxD,EAAI,KAAK,EACTA,EAAI,UAAU,EACdA,EAAI,KAAKwD,EAAK,KAAMA,EAAK,IAAKA,EAAK,MAAQA,EAAK,KAAMA,EAAK,OAASA,EAAK,GAAG,EAC5ExD,EAAI,KAAK,CACX,CACA,SAAS2D,GAAW3D,EAAK,CACvBA,EAAI,QAAQ,CACd,CAIA,SAAS4D,GAAe5D,EAAK6D,EAAUtD,EAAQuD,EAAMC,EAAM,CACzD,GAAI,CAACF,EACH,OAAO7D,EAAI,OAAOO,EAAO,EAAGA,EAAO,CAAC,EAEtC,GAAIwD,IAAS,SAAU,CACrB,IAAMC,GAAYH,EAAS,EAAItD,EAAO,GAAK,EAC3CP,EAAI,OAAOgE,EAAUH,EAAS,CAAC,EAC/B7D,EAAI,OAAOgE,EAAUzD,EAAO,CAAC,CAC/B,MAAWwD,IAAS,SAAY,CAAC,CAACD,EAChC9D,EAAI,OAAO6D,EAAS,EAAGtD,EAAO,CAAC,EAE/BP,EAAI,OAAOO,EAAO,EAAGsD,EAAS,CAAC,EAEjC7D,EAAI,OAAOO,EAAO,EAAGA,EAAO,CAAC,CAC/B,CAIA,SAAS0D,GAAejE,EAAK6D,EAAUtD,EAAQuD,EAAM,CACnD,GAAI,CAACD,EACH,OAAO7D,EAAI,OAAOO,EAAO,EAAGA,EAAO,CAAC,EAEtCP,EAAI,cAAc8D,EAAOD,EAAS,KAAOA,EAAS,KAAMC,EAAOD,EAAS,KAAOA,EAAS,KAAMC,EAAOvD,EAAO,KAAOA,EAAO,KAAMuD,EAAOvD,EAAO,KAAOA,EAAO,KAAMA,EAAO,EAAGA,EAAO,CAAC,CACtL,CACA,SAAS2D,GAAclE,EAAKmE,EAAM,CAC5BA,EAAK,aACPnE,EAAI,UAAUmE,EAAK,YAAY,CAAC,EAAGA,EAAK,YAAY,CAAC,CAAC,EAEnD5I,EAAc4I,EAAK,QAAQ,GAC9BnE,EAAI,OAAOmE,EAAK,QAAQ,EAEtBA,EAAK,QACPnE,EAAI,UAAYmE,EAAK,OAEnBA,EAAK,YACPnE,EAAI,UAAYmE,EAAK,WAEnBA,EAAK,eACPnE,EAAI,aAAemE,EAAK,aAE5B,CACA,SAASC,GAAapE,EAAKsC,EAAGC,EAAG8B,EAAMF,EAAM,CAC3C,GAAIA,EAAK,eAAiBA,EAAK,UAAW,CAQxC,IAAMG,EAAUtE,EAAI,YAAYqE,CAAI,EAC9BnK,EAAOoI,EAAIgC,EAAQ,sBACnBnK,EAAQmI,EAAIgC,EAAQ,uBACpBC,EAAMhC,EAAI+B,EAAQ,wBAClBE,EAASjC,EAAI+B,EAAQ,yBACrBG,EAAcN,EAAK,eAAiBI,EAAMC,GAAU,EAAIA,EAC9DxE,EAAI,YAAcA,EAAI,UACtBA,EAAI,UAAU,EACdA,EAAI,UAAYmE,EAAK,iBAAmB,EACxCnE,EAAI,OAAO9F,EAAMuK,CAAW,EAC5BzE,EAAI,OAAO7F,EAAOsK,CAAW,EAC7BzE,EAAI,OAAO,CACb,CACF,CACA,SAAS0E,GAAa1E,EAAKmE,EAAM,CAC/B,IAAMQ,EAAW3E,EAAI,UACrBA,EAAI,UAAYmE,EAAK,MACrBnE,EAAI,SAASmE,EAAK,KAAMA,EAAK,IAAKA,EAAK,MAAOA,EAAK,MAAM,EACzDnE,EAAI,UAAY2E,CAClB,CAIA,SAASC,GAAW5E,EAAK6E,EAAMvC,EAAGC,EAAG1B,EAAMsD,EAAO,CAAC,EAAG,CACpD,IAAMW,EAAQ9G,EAAQ6G,CAAI,EAAIA,EAAO,CAACA,CAAI,EACpCE,EAASZ,EAAK,YAAc,GAAKA,EAAK,cAAgB,GACxD9E,EAAGgF,EAIP,IAHArE,EAAI,KAAK,EACTA,EAAI,KAAOa,EAAK,OAChBqD,GAAclE,EAAKmE,CAAI,EAClB9E,EAAI,EAAGA,EAAIyF,EAAM,OAAQ,EAAEzF,EAC9BgF,EAAOS,EAAMzF,CAAC,EACV8E,EAAK,UACPO,GAAa1E,EAAKmE,EAAK,QAAQ,EAE7BY,IACEZ,EAAK,cACPnE,EAAI,YAAcmE,EAAK,aAEpB5I,EAAc4I,EAAK,WAAW,IACjCnE,EAAI,UAAYmE,EAAK,aAEvBnE,EAAI,WAAWqE,EAAM/B,EAAGC,EAAG4B,EAAK,QAAQ,GAE1CnE,EAAI,SAASqE,EAAM/B,EAAGC,EAAG4B,EAAK,QAAQ,EACtCC,GAAapE,EAAKsC,EAAGC,EAAG8B,EAAMF,CAAI,EAClC5B,GAAK,OAAO1B,EAAK,UAAU,EAE7Bb,EAAI,QAAQ,CACd,CAMA,SAASgF,GAAmBhF,EAAKiF,EAAM,CACrC,GAAM,CACJ,EAAA3C,EACA,EAAAC,EACA,EAAAE,EACA,EAAAyC,EACA,OAAAhC,CACF,EAAI+B,EAEJjF,EAAI,IAAIsC,EAAIY,EAAO,QAASX,EAAIW,EAAO,QAASA,EAAO,QAAS,IAAMzG,EAAIA,EAAI,EAAI,EAElFuD,EAAI,OAAOsC,EAAGC,EAAI2C,EAAIhC,EAAO,UAAU,EAEvClD,EAAI,IAAIsC,EAAIY,EAAO,WAAYX,EAAI2C,EAAIhC,EAAO,WAAYA,EAAO,WAAYzG,EAAID,EAAS,EAAI,EAE9FwD,EAAI,OAAOsC,EAAIG,EAAIS,EAAO,YAAaX,EAAI2C,CAAC,EAE5ClF,EAAI,IAAIsC,EAAIG,EAAIS,EAAO,YAAaX,EAAI2C,EAAIhC,EAAO,YAAaA,EAAO,YAAa1G,EAAS,EAAG,EAAI,EAEpGwD,EAAI,OAAOsC,EAAIG,EAAGF,EAAIW,EAAO,QAAQ,EAErClD,EAAI,IAAIsC,EAAIG,EAAIS,EAAO,SAAUX,EAAIW,EAAO,SAAUA,EAAO,SAAU,EAAG,CAAC1G,EAAS,EAAI,EAExFwD,EAAI,OAAOsC,EAAIY,EAAO,QAASX,CAAC,CAClC,CACA,IAAM4C,GAAc,uCACdC,GAAa,wEAYnB,SAASC,GAAa1I,EAAOiG,EAAM,CACjC,IAAM0C,GAAW,GAAK3I,GAAO,MAAMwI,EAAW,EAC9C,GAAI,CAACG,GAAWA,EAAQ,CAAC,IAAM,SAC7B,OAAO1C,EAAO,IAGhB,OADAjG,EAAQ,CAAC2I,EAAQ,CAAC,EACVA,EAAQ,CAAC,EAAG,CAClB,IAAK,KACH,OAAO3I,EACT,IAAK,IACHA,GAAS,IACT,KACJ,CACA,OAAOiG,EAAOjG,CAChB,CACA,IAAM4I,GAAelI,GAAK,CAACA,GAAK,EAChC,SAASmI,GAAkB7I,EAAO8I,EAAO,CACvC,IAAMC,EAAM,CAAC,EACPC,EAAWnF,EAASiF,CAAK,EACzBrG,EAAOuG,EAAW,OAAO,KAAKF,CAAK,EAAIA,EACvCG,EAAOpF,EAAS7D,CAAK,EAAIgJ,EAAWE,GAAQpF,EAAe9D,EAAMkJ,CAAI,EAAGlJ,EAAM8I,EAAMI,CAAI,CAAC,CAAC,EAAIA,GAAQlJ,EAAMkJ,CAAI,EAAI,IAAMlJ,EAChI,QAAWkJ,KAAQzG,EACjBsG,EAAIG,CAAI,EAAIN,GAAaK,EAAKC,CAAI,CAAC,EAErC,OAAOH,CACT,CASA,SAASI,GAAOnJ,EAAO,CACrB,OAAO6I,GAAkB7I,EAAO,CAC9B,IAAK,IACL,MAAO,IACP,OAAQ,IACR,KAAM,GACR,CAAC,CACH,CAQA,SAASoJ,GAAcpJ,EAAO,CAC5B,OAAO6I,GAAkB7I,EAAO,CAAC,UAAW,WAAY,aAAc,aAAa,CAAC,CACtF,CASA,SAASqJ,EAAUrJ,EAAO,CACxB,IAAMsJ,EAAMH,GAAOnJ,CAAK,EACxB,OAAAsJ,EAAI,MAAQA,EAAI,KAAOA,EAAI,MAC3BA,EAAI,OAASA,EAAI,IAAMA,EAAI,OACpBA,CACT,CAQA,SAASC,EAAOxI,EAASyI,EAAU,CACjCzI,EAAUA,GAAW,CAAC,EACtByI,EAAWA,GAAYhJ,EAAS,KAChC,IAAIyF,EAAOnC,EAAe/C,EAAQ,KAAMyI,EAAS,IAAI,EACjD,OAAOvD,GAAS,WAClBA,EAAO,SAASA,EAAM,EAAE,GAE1B,IAAII,EAAQvC,EAAe/C,EAAQ,MAAOyI,EAAS,KAAK,EACpDnD,GAAS,EAAE,GAAKA,GAAO,MAAMoC,EAAU,IACzC,QAAQ,KAAK,kCAAoCpC,EAAQ,GAAG,EAC5DA,EAAQ,QAEV,IAAMnC,EAAO,CACX,OAAQJ,EAAe/C,EAAQ,OAAQyI,EAAS,MAAM,EACtD,WAAYd,GAAa5E,EAAe/C,EAAQ,WAAYyI,EAAS,UAAU,EAAGvD,CAAI,EACtF,KAAAA,EACA,MAAAI,EACA,OAAQvC,EAAe/C,EAAQ,OAAQyI,EAAS,MAAM,EACtD,OAAQ,EACV,EACA,OAAAtF,EAAK,OAASD,GAAaC,CAAI,EACxBA,CACT,CAYA,SAASuF,GAAQC,EAAQtG,EAAS7B,EAAOoI,EAAM,CAC7C,IAAIC,EAAY,GACZlH,EAAGkC,EAAM5E,EACb,IAAK0C,EAAI,EAAGkC,EAAO8E,EAAO,OAAQhH,EAAIkC,EAAM,EAAElC,EAE5C,GADA1C,EAAQ0J,EAAOhH,CAAC,EACZ1C,IAAU,SAGVoD,IAAY,QAAa,OAAOpD,GAAU,aAC5CA,EAAQA,EAAMoD,CAAO,EACrBwG,EAAY,IAEVrI,IAAU,QAAaF,EAAQrB,CAAK,IACtCA,EAAQA,EAAMuB,EAAQvB,EAAM,MAAM,EAClC4J,EAAY,IAEV5J,IAAU,QACZ,OAAI2J,GAAQ,CAACC,IACXD,EAAK,UAAY,IAEZ3J,CAGb,CAOA,SAAS6J,GAAUC,EAAQC,EAAOC,EAAa,CAC7C,GAAM,CACJ,IAAA3L,EACA,IAAAC,CACF,EAAIwL,EACEG,EAASC,GAAYH,GAAQzL,EAAMD,GAAO,CAAC,EAC3C8L,EAAW,CAACnK,EAAOoK,IAAQJ,GAAehK,IAAU,EAAI,EAAIA,EAAQoK,EAC1E,MAAO,CACL,IAAKD,EAAS9L,EAAK,CAAC,KAAK,IAAI4L,CAAM,CAAC,EACpC,IAAKE,EAAS7L,EAAK2L,CAAM,CAC3B,CACF,CACA,SAASI,GAAcC,EAAelH,EAAS,CAC7C,OAAO,OAAO,OAAO,OAAO,OAAOkH,CAAa,EAAGlH,CAAO,CAC5D,CAYA,SAASmH,GAAgBC,EAAQC,EAAW,CAAC,EAAE,EAAGC,EAAYlB,EAAUmB,EAAY,IAAMH,EAAO,CAAC,EAAG,CACnG,IAAMI,EAAkBF,GAAcF,EAClC,OAAOhB,EAAa,MACtBA,EAAWqB,GAAS,YAAaL,CAAM,GAEzC,IAAM7F,EAAQ,CACZ,CAAC,OAAO,WAAW,EAAG,SACtB,WAAY,GACZ,QAAS6F,EACT,YAAaI,EACb,UAAWpB,EACX,WAAYmB,EACZ,SAAU7H,GAASyH,GAAgB,CAACzH,EAAO,GAAG0H,CAAM,EAAGC,EAAUG,EAAiBpB,CAAQ,CAC5F,EACA,OAAO,IAAI,MAAM7E,EAAO,CAItB,eAAef,EAAQsF,EAAM,CAC3B,cAAOtF,EAAOsF,CAAI,EAClB,OAAOtF,EAAO,MACd,OAAO4G,EAAO,CAAC,EAAEtB,CAAI,EACd,EACT,EAIA,IAAItF,EAAQsF,EAAM,CAChB,OAAO4B,GAAQlH,EAAQsF,EAAM,IAAM6B,GAAqB7B,EAAMuB,EAAUD,EAAQ5G,CAAM,CAAC,CACzF,EAKA,yBAAyBA,EAAQsF,EAAM,CACrC,OAAO,QAAQ,yBAAyBtF,EAAO,QAAQ,CAAC,EAAGsF,CAAI,CACjE,EAIA,gBAAiB,CACf,OAAO,QAAQ,eAAesB,EAAO,CAAC,CAAC,CACzC,EAIA,IAAI5G,EAAQsF,EAAM,CAChB,OAAO8B,GAAqBpH,CAAM,EAAE,SAASsF,CAAI,CACnD,EAIA,QAAQtF,EAAQ,CACd,OAAOoH,GAAqBpH,CAAM,CACpC,EAIA,IAAIA,EAAQsF,EAAMlJ,EAAO,CACvB,IAAMiL,EAAUrH,EAAO,WAAaA,EAAO,SAAW+G,EAAU,GAChE,OAAA/G,EAAOsF,CAAI,EAAI+B,EAAQ/B,CAAI,EAAIlJ,EAC/B,OAAO4D,EAAO,MACP,EACT,CACF,CAAC,CACH,CASA,SAASsH,GAAeC,EAAO/H,EAASgI,EAAUC,EAAoB,CACpE,IAAM1G,EAAQ,CACZ,WAAY,GACZ,OAAQwG,EACR,SAAU/H,EACV,UAAWgI,EACX,OAAQ,IAAI,IACZ,aAAclI,GAAaiI,EAAOE,CAAkB,EACpD,WAAYhI,GAAO6H,GAAeC,EAAO9H,EAAK+H,EAAUC,CAAkB,EAC1E,SAAUvI,GAASoI,GAAeC,EAAM,SAASrI,CAAK,EAAGM,EAASgI,EAAUC,CAAkB,CAChG,EACA,OAAO,IAAI,MAAM1G,EAAO,CAItB,eAAef,EAAQsF,EAAM,CAC3B,cAAOtF,EAAOsF,CAAI,EAClB,OAAOiC,EAAMjC,CAAI,EACV,EACT,EAIA,IAAItF,EAAQsF,EAAMoC,EAAU,CAC1B,OAAOR,GAAQlH,EAAQsF,EAAM,IAAMqC,GAAoB3H,EAAQsF,EAAMoC,CAAQ,CAAC,CAChF,EAKA,yBAAyB1H,EAAQsF,EAAM,CACrC,OAAOtF,EAAO,aAAa,QAAU,QAAQ,IAAIuH,EAAOjC,CAAI,EAAI,CAC9D,WAAY,GACZ,aAAc,EAChB,EAAI,OAAY,QAAQ,yBAAyBiC,EAAOjC,CAAI,CAC9D,EAIA,gBAAiB,CACf,OAAO,QAAQ,eAAeiC,CAAK,CACrC,EAIA,IAAIvH,EAAQsF,EAAM,CAChB,OAAO,QAAQ,IAAIiC,EAAOjC,CAAI,CAChC,EAIA,SAAU,CACR,OAAO,QAAQ,QAAQiC,CAAK,CAC9B,EAIA,IAAIvH,EAAQsF,EAAMlJ,EAAO,CACvB,OAAAmL,EAAMjC,CAAI,EAAIlJ,EACd,OAAO4D,EAAOsF,CAAI,EACX,EACT,CACF,CAAC,CACH,CAIA,SAAShG,GAAaiI,EAAO3K,EAAW,CACtC,WAAY,GACZ,UAAW,EACb,EAAG,CACD,GAAM,CACJ,YAAAgL,EAAchL,EAAS,WACvB,WAAAiL,EAAajL,EAAS,UACtB,SAAAkL,EAAWlL,EAAS,OACtB,EAAI2K,EACJ,MAAO,CACL,QAASO,EACT,WAAYF,EACZ,UAAWC,EACX,aAAcE,GAAWH,CAAW,EAAIA,EAAc,IAAMA,EAC5D,YAAaG,GAAWF,CAAU,EAAIA,EAAa,IAAMA,CAC3D,CACF,CACA,IAAMG,GAAU,CAACC,EAAQpL,IAASoL,EAASA,EAASC,GAAYrL,CAAI,EAAIA,EAClEsL,GAAmB,CAAC7C,EAAMlJ,IAAU6D,EAAS7D,CAAK,GAAKkJ,IAAS,aAAe,OAAO,eAAelJ,CAAK,IAAM,MAAQA,EAAM,cAAgB,QACpJ,SAAS8K,GAAQlH,EAAQsF,EAAMO,EAAS,CACtC,GAAI,OAAO,UAAU,eAAe,KAAK7F,EAAQsF,CAAI,GAAKA,IAAS,cACjE,OAAOtF,EAAOsF,CAAI,EAEpB,IAAMlJ,EAAQyJ,EAAQ,EAEtB,OAAA7F,EAAOsF,CAAI,EAAIlJ,EACRA,CACT,CACA,SAASuL,GAAoB3H,EAAQsF,EAAMoC,EAAU,CACnD,GAAM,CACJ,OAAAU,EACA,SAAAC,EACA,UAAAC,EACA,aAAc7J,CAChB,EAAIuB,EACA5D,EAAQgM,EAAO9C,CAAI,EAEvB,OAAIyC,GAAW3L,CAAK,GAAKqC,EAAY,aAAa6G,CAAI,IACpDlJ,EAAQmM,GAAmBjD,EAAMlJ,EAAO4D,EAAQ0H,CAAQ,GAEtDjK,EAAQrB,CAAK,GAAKA,EAAM,SAC1BA,EAAQoM,GAAclD,EAAMlJ,EAAO4D,EAAQvB,EAAY,WAAW,GAEhE0J,GAAiB7C,EAAMlJ,CAAK,IAE9BA,EAAQkL,GAAelL,EAAOiM,EAAUC,GAAaA,EAAUhD,CAAI,EAAG7G,CAAW,GAE5ErC,CACT,CACA,SAASmM,GAAmBjD,EAAMmD,EAAUzI,EAAQ0H,EAAU,CAC5D,GAAM,CACJ,OAAAU,EACA,SAAAC,EACA,UAAAC,EACA,OAAAI,CACF,EAAI1I,EACJ,GAAI0I,EAAO,IAAIpD,CAAI,EACjB,MAAM,IAAI,MAAM,uBAAyB,MAAM,KAAKoD,CAAM,EAAE,KAAK,IAAI,EAAI,KAAOpD,CAAI,EAEtFoD,EAAO,IAAIpD,CAAI,EACf,IAAIlJ,EAAQqM,EAASJ,EAAUC,GAAaZ,CAAQ,EACpD,OAAAgB,EAAO,OAAOpD,CAAI,EACd6C,GAAiB7C,EAAMlJ,CAAK,IAE9BA,EAAQuM,GAAkBP,EAAO,QAASA,EAAQ9C,EAAMlJ,CAAK,GAExDA,CACT,CACA,SAASoM,GAAclD,EAAMlJ,EAAO4D,EAAQ4I,EAAa,CACvD,GAAM,CACJ,OAAAR,EACA,SAAAC,EACA,UAAAC,EACA,aAAc7J,CAChB,EAAIuB,EACJ,GAAI,OAAOqI,EAAS,MAAU,KAAeO,EAAYtD,CAAI,EAC3D,OAAOlJ,EAAMiM,EAAS,MAAQjM,EAAM,MAAM,EACrC,GAAI6D,EAAS7D,EAAM,CAAC,CAAC,EAAG,CAE7B,IAAMyM,EAAMzM,EACNwK,EAASwB,EAAO,QAAQ,OAAOxM,GAAKA,IAAMiN,CAAG,EACnDzM,EAAQ,CAAC,EACT,QAAW0M,KAAQD,EAAK,CACtB,IAAME,EAAWJ,GAAkB/B,EAAQwB,EAAQ9C,EAAMwD,CAAI,EAC7D1M,EAAM,KAAKkL,GAAeyB,EAAUV,EAAUC,GAAaA,EAAUhD,CAAI,EAAG7G,CAAW,CAAC,CAC1F,CACF,CACA,OAAOrC,CACT,CACA,SAAS4M,GAAgBpD,EAAUN,EAAMlJ,EAAO,CAC9C,OAAO2L,GAAWnC,CAAQ,EAAIA,EAASN,EAAMlJ,CAAK,EAAIwJ,CACxD,CACA,IAAMqD,GAAW,CAACrK,EAAKsK,IAAWtK,IAAQ,GAAOsK,EAAS,OAAOtK,GAAQ,SAAWuK,GAAiBD,EAAQtK,CAAG,EAAI,OACpH,SAASwK,GAAUpK,EAAKqK,EAAczK,EAAK0K,EAAgBlN,EAAO,CAChE,QAAW8M,KAAUG,EAAc,CACjC,IAAMnK,EAAQ+J,GAASrK,EAAKsK,CAAM,EAClC,GAAIhK,EAAO,CACTF,EAAI,IAAIE,CAAK,EACb,IAAM0G,EAAWoD,GAAgB9J,EAAM,UAAWN,EAAKxC,CAAK,EAC5D,GAAI,OAAOwJ,EAAa,KAAeA,IAAahH,GAAOgH,IAAa0D,EAGtE,OAAO1D,CAEX,SAAW1G,IAAU,IAAS,OAAOoK,EAAmB,KAAe1K,IAAQ0K,EAG7E,OAAO,IAEX,CACA,MAAO,EACT,CACA,SAASX,GAAkBU,EAAcN,EAAUzD,EAAMlJ,EAAO,CAC9D,IAAM0K,EAAaiC,EAAS,YACtBnD,EAAWoD,GAAgBD,EAAS,UAAWzD,EAAMlJ,CAAK,EAC1DmN,EAAY,CAAC,GAAGF,EAAc,GAAGvC,CAAU,EAC3C9H,EAAM,IAAI,IAChBA,EAAI,IAAI5C,CAAK,EACb,IAAIwC,EAAM4K,GAAiBxK,EAAKuK,EAAWjE,EAAMM,GAAYN,EAAMlJ,CAAK,EAIxE,OAHIwC,IAAQ,MAGR,OAAOgH,EAAa,KAAeA,IAAaN,IAClD1G,EAAM4K,GAAiBxK,EAAKuK,EAAW3D,EAAUhH,EAAKxC,CAAK,EACvDwC,IAAQ,MACH,GAGJ+H,GAAgB,MAAM,KAAK3H,CAAG,EAAG,CAAC,EAAE,EAAG8H,EAAYlB,EAAU,IAAM6D,GAAaV,EAAUzD,EAAMlJ,CAAK,CAAC,CAC/G,CACA,SAASoN,GAAiBxK,EAAKuK,EAAW3K,EAAKgH,EAAUkD,EAAM,CAC7D,KAAOlK,GACLA,EAAMwK,GAAUpK,EAAKuK,EAAW3K,EAAKgH,EAAUkD,CAAI,EAErD,OAAOlK,CACT,CACA,SAAS6K,GAAaV,EAAUzD,EAAMlJ,EAAO,CAC3C,IAAM8M,EAASH,EAAS,WAAW,EAC7BzD,KAAQ4D,IACZA,EAAO5D,CAAI,EAAI,CAAC,GAElB,IAAMtF,EAASkJ,EAAO5D,CAAI,EAC1B,OAAI7H,EAAQuC,CAAM,GAAKC,EAAS7D,CAAK,EAE5BA,EAEF4D,GAAU,CAAC,CACpB,CACA,SAASmH,GAAqB7B,EAAMuB,EAAUD,EAAQW,EAAO,CAC3D,IAAInL,EACJ,QAAW6L,KAAUpB,EAEnB,GADAzK,EAAQ6K,GAASe,GAAQC,EAAQ3C,CAAI,EAAGsB,CAAM,EAC1C,OAAOxK,EAAU,IACnB,OAAO+L,GAAiB7C,EAAMlJ,CAAK,EAAIuM,GAAkB/B,EAAQW,EAAOjC,EAAMlJ,CAAK,EAAIA,CAG7F,CACA,SAAS6K,GAASrI,EAAKgI,EAAQ,CAC7B,QAAW1H,KAAS0H,EAAQ,CAC1B,GAAI,CAAC1H,EACH,SAEF,IAAM9C,EAAQ8C,EAAMN,CAAG,EACvB,GAAI,OAAOxC,EAAU,IACnB,OAAOA,CAEX,CACF,CACA,SAASgL,GAAqBpH,EAAQ,CACpC,IAAInB,EAAOmB,EAAO,MAClB,OAAKnB,IACHA,EAAOmB,EAAO,MAAQ0J,GAAyB1J,EAAO,OAAO,GAExDnB,CACT,CACA,SAAS6K,GAAyB9C,EAAQ,CACxC,IAAM5H,EAAM,IAAI,IAChB,QAAWE,KAAS0H,EAClB,QAAWhI,KAAO,OAAO,KAAKM,CAAK,EAAE,OAAOH,GAAK,CAACA,EAAE,WAAW,GAAG,CAAC,EACjEC,EAAI,IAAIJ,CAAG,EAGf,OAAO,MAAM,KAAKI,CAAG,CACvB,CACA,SAAS2K,GAA4B5P,EAAMyG,EAAMhH,EAAOW,EAAO,CAC7D,GAAM,CACJ,OAAAC,CACF,EAAIL,EACE,CACJ,IAAA6E,EAAM,GACR,EAAI,KAAK,SACHgL,EAAS,IAAI,MAAMzP,CAAK,EAC1B2E,EAAGkC,EAAMrD,EAAOmL,EACpB,IAAKhK,EAAI,EAAGkC,EAAO7G,EAAO2E,EAAIkC,EAAM,EAAElC,EACpCnB,EAAQmB,EAAItF,EACZsP,EAAOtI,EAAK7C,CAAK,EACjBiM,EAAO9K,CAAC,EAAI,CACV,EAAG1E,EAAO,MAAM+O,GAAiBL,EAAMlK,CAAG,EAAGjB,CAAK,CACpD,EAEF,OAAOiM,CACT,CACA,IAAMC,GAAU,OAAO,SAAW,MAC5BC,GAAW,CAAC9P,EAAQ,IAAM,EAAIA,EAAO,QAAU,CAACA,EAAO,CAAC,EAAE,MAAQA,EAAO,CAAC,EAC1E+P,GAAeC,GAAaA,IAAc,IAAM,IAAM,IAC5D,SAASC,GAAYC,EAAYC,EAAaC,EAAY1O,EAAG,CAI3D,IAAM4H,EAAW4G,EAAW,KAAOC,EAAcD,EAC3CG,EAAUF,EACVG,EAAOF,EAAW,KAAOD,EAAcC,EACvCG,EAAMC,GAAsBH,EAAS/G,CAAQ,EAC7CmH,EAAMD,GAAsBF,EAAMD,CAAO,EAC3CK,EAAMH,GAAOA,EAAME,GACnBE,EAAMF,GAAOF,EAAME,GAEvBC,EAAM,MAAMA,CAAG,EAAI,EAAIA,EACvBC,EAAM,MAAMA,CAAG,EAAI,EAAIA,EACvB,IAAMC,EAAKlP,EAAIgP,EACTG,EAAKnP,EAAIiP,EACf,MAAO,CACL,SAAU,CACR,EAAGN,EAAQ,EAAIO,GAAMN,EAAK,EAAIhH,EAAS,GACvC,EAAG+G,EAAQ,EAAIO,GAAMN,EAAK,EAAIhH,EAAS,EACzC,EACA,KAAM,CACJ,EAAG+G,EAAQ,EAAIQ,GAAMP,EAAK,EAAIhH,EAAS,GACvC,EAAG+G,EAAQ,EAAIQ,GAAMP,EAAK,EAAIhH,EAAS,EACzC,CACF,CACF,CAIA,SAASwH,GAAe9Q,EAAQ+Q,EAAQC,EAAI,CAC1C,IAAMC,EAAYjR,EAAO,OACrBkR,EAAQC,EAAOC,EAAMC,EAAkBC,EACvCC,EAAazB,GAAS9P,EAAQ,CAAC,EACnC,QAAS8E,EAAI,EAAGA,EAAImM,EAAY,EAAG,EAAEnM,EAGnC,GAFAwM,EAAeC,EACfA,EAAazB,GAAS9P,EAAQ8E,EAAI,CAAC,EAC/B,GAACwM,GAAgB,CAACC,GAGtB,IAAIC,GAAaT,EAAOjM,CAAC,EAAG,EAAG+K,EAAO,EAAG,CACvCmB,EAAGlM,CAAC,EAAIkM,EAAGlM,EAAI,CAAC,EAAI,EACpB,QACF,CACAoM,EAASF,EAAGlM,CAAC,EAAIiM,EAAOjM,CAAC,EACzBqM,EAAQH,EAAGlM,EAAI,CAAC,EAAIiM,EAAOjM,CAAC,EAC5BuM,EAAmB,KAAK,IAAIH,EAAQ,CAAC,EAAI,KAAK,IAAIC,EAAO,CAAC,EACtD,EAAAE,GAAoB,KAGxBD,EAAO,EAAI,KAAK,KAAKC,CAAgB,EACrCL,EAAGlM,CAAC,EAAIoM,EAASE,EAAOL,EAAOjM,CAAC,EAChCkM,EAAGlM,EAAI,CAAC,EAAIqM,EAAQC,EAAOL,EAAOjM,CAAC,GAEvC,CACA,SAAS2M,GAAgBzR,EAAQgR,EAAIhB,EAAY,IAAK,CACpD,IAAM0B,EAAY3B,GAAaC,CAAS,EAClCiB,EAAYjR,EAAO,OACrB8D,EAAO6N,EAAaL,EACpBC,EAAazB,GAAS9P,EAAQ,CAAC,EACnC,QAAS8E,EAAI,EAAGA,EAAImM,EAAW,EAAEnM,EAAG,CAIlC,GAHA6M,EAAcL,EACdA,EAAeC,EACfA,EAAazB,GAAS9P,EAAQ8E,EAAI,CAAC,EAC/B,CAACwM,EACH,SAEF,IAAMM,EAASN,EAAatB,CAAS,EAC/B6B,EAASP,EAAaI,CAAS,EACjCC,IACF7N,GAAS8N,EAASD,EAAY3B,CAAS,GAAK,EAC5CsB,EAAa,MAAMtB,CAAS,EAAE,EAAI4B,EAAS9N,EAC3CwN,EAAa,MAAMI,CAAS,EAAE,EAAIG,EAAS/N,EAAQkN,EAAGlM,CAAC,GAErDyM,IACFzN,GAASyN,EAAWvB,CAAS,EAAI4B,GAAU,EAC3CN,EAAa,MAAMtB,CAAS,EAAE,EAAI4B,EAAS9N,EAC3CwN,EAAa,MAAMI,CAAS,EAAE,EAAIG,EAAS/N,EAAQkN,EAAGlM,CAAC,EAE3D,CACF,CAOA,SAASgN,GAAoB9R,EAAQgQ,EAAY,IAAK,CACpD,IAAM0B,EAAY3B,GAAaC,CAAS,EAClCiB,EAAYjR,EAAO,OACnB+Q,EAAS,MAAME,CAAS,EAAE,KAAK,CAAC,EAChCD,EAAK,MAAMC,CAAS,EAEtBnM,EAAG6M,EAAaL,EAChBC,EAAazB,GAAS9P,EAAQ,CAAC,EACnC,IAAK8E,EAAI,EAAGA,EAAImM,EAAW,EAAEnM,EAI3B,GAHA6M,EAAcL,EACdA,EAAeC,EACfA,EAAazB,GAAS9P,EAAQ8E,EAAI,CAAC,EAC/B,EAACwM,EAGL,IAAIC,EAAY,CACd,IAAMQ,EAAaR,EAAWvB,CAAS,EAAIsB,EAAatB,CAAS,EAEjEe,EAAOjM,CAAC,EAAIiN,IAAe,GAAKR,EAAWG,CAAS,EAAIJ,EAAaI,CAAS,GAAKK,EAAa,CAClG,CACAf,EAAGlM,CAAC,EAAK6M,EAA2BJ,EAA6BS,GAAKjB,EAAOjM,EAAI,CAAC,CAAC,IAAMkN,GAAKjB,EAAOjM,CAAC,CAAC,EAAI,GAAKiM,EAAOjM,EAAI,CAAC,EAAIiM,EAAOjM,CAAC,GAAK,EAA5FiM,EAAOjM,EAAI,CAAC,EAAtCiM,EAAOjM,CAAC,EAEjCgM,GAAe9Q,EAAQ+Q,EAAQC,CAAE,EACjCS,GAAgBzR,EAAQgR,EAAIhB,CAAS,CACvC,CACA,SAASiC,GAAgBC,EAAIzR,EAAKC,EAAK,CACrC,OAAO,KAAK,IAAI,KAAK,IAAIwR,EAAIxR,CAAG,EAAGD,CAAG,CACxC,CACA,SAAS0R,GAAgBnS,EAAQiJ,EAAM,CACrC,IAAInE,EAAGkC,EAAMjG,EAAOqR,EAAQC,EACxBC,EAAatJ,GAAehJ,EAAO,CAAC,EAAGiJ,CAAI,EAC/C,IAAKnE,EAAI,EAAGkC,EAAOhH,EAAO,OAAQ8E,EAAIkC,EAAM,EAAElC,EAC5CuN,EAAaD,EACbA,EAASE,EACTA,EAAaxN,EAAIkC,EAAO,GAAKgC,GAAehJ,EAAO8E,EAAI,CAAC,EAAGmE,CAAI,EAC1DmJ,IAGLrR,EAAQf,EAAO8E,CAAC,EACZuN,IACFtR,EAAM,KAAOkR,GAAgBlR,EAAM,KAAMkI,EAAK,KAAMA,EAAK,KAAK,EAC9DlI,EAAM,KAAOkR,GAAgBlR,EAAM,KAAMkI,EAAK,IAAKA,EAAK,MAAM,GAE5DqJ,IACFvR,EAAM,KAAOkR,GAAgBlR,EAAM,KAAMkI,EAAK,KAAMA,EAAK,KAAK,EAC9DlI,EAAM,KAAOkR,GAAgBlR,EAAM,KAAMkI,EAAK,IAAKA,EAAK,MAAM,GAGpE,CAIA,SAASsJ,GAA2BvS,EAAQmD,EAAS8F,EAAMuJ,EAAMxC,EAAW,CAC1E,IAAIlL,EAAGkC,EAAMjG,EAAO0R,EAKpB,GAHItP,EAAQ,WACVnD,EAASA,EAAO,OAAOkS,GAAM,CAACA,EAAG,IAAI,GAEnC/O,EAAQ,yBAA2B,WACrC2O,GAAoB9R,EAAQgQ,CAAS,MAChC,CACL,IAAI0C,EAAOF,EAAOxS,EAAOA,EAAO,OAAS,CAAC,EAAIA,EAAO,CAAC,EACtD,IAAK8E,EAAI,EAAGkC,EAAOhH,EAAO,OAAQ8E,EAAIkC,EAAM,EAAElC,EAC5C/D,EAAQf,EAAO8E,CAAC,EAChB2N,EAAgBxC,GAAYyC,EAAM3R,EAAOf,EAAO,KAAK,IAAI8E,EAAI,EAAGkC,GAAQwL,EAAO,EAAI,EAAE,EAAIxL,CAAI,EAAG7D,EAAQ,OAAO,EAC/GpC,EAAM,KAAO0R,EAAc,SAAS,EACpC1R,EAAM,KAAO0R,EAAc,SAAS,EACpC1R,EAAM,KAAO0R,EAAc,KAAK,EAChC1R,EAAM,KAAO0R,EAAc,KAAK,EAChCC,EAAO3R,CAEX,CACIoC,EAAQ,iBACVgP,GAAgBnS,EAAQiJ,CAAI,CAEhC,CAKA,SAAS0J,IAAkB,CACzB,OAAO,OAAO,OAAW,KAAe,OAAO,SAAa,GAC9D,CAIA,SAASC,GAAeC,EAAS,CAC/B,IAAI3D,EAAS2D,EAAQ,WACrB,OAAI3D,GAAUA,EAAO,SAAS,IAAM,wBAClCA,EAASA,EAAO,MAEXA,CACT,CAKA,SAAS4D,GAAcC,EAAYpO,EAAMqO,EAAgB,CACvD,IAAIC,EACJ,OAAI,OAAOF,GAAe,UACxBE,EAAgB,SAASF,EAAY,EAAE,EACnCA,EAAW,QAAQ,GAAG,IAAM,KAE9BE,EAAgBA,EAAgB,IAAMtO,EAAK,WAAWqO,CAAc,IAGtEC,EAAgBF,EAEXE,CACT,CACA,IAAMC,GAAmBC,GAAWA,EAAQ,cAAc,YAAY,iBAAiBA,EAAS,IAAI,EACpG,SAASC,GAASC,EAAIC,EAAU,CAC9B,OAAOJ,GAAiBG,CAAE,EAAE,iBAAiBC,CAAQ,CACvD,CACA,IAAMC,GAAY,CAAC,MAAO,QAAS,SAAU,MAAM,EACnD,SAASC,GAAmBC,EAAQhL,EAAOiL,EAAQ,CACjD,IAAMC,EAAS,CAAC,EAChBD,EAASA,EAAS,IAAMA,EAAS,GACjC,QAAS5O,EAAI,EAAGA,EAAI,EAAGA,IAAK,CAC1B,IAAM8O,EAAML,GAAUzO,CAAC,EACvB6O,EAAOC,CAAG,EAAI,WAAWH,EAAOhL,EAAQ,IAAMmL,EAAMF,CAAM,CAAC,GAAK,CAClE,CACA,OAAAC,EAAO,MAAQA,EAAO,KAAOA,EAAO,MACpCA,EAAO,OAASA,EAAO,IAAMA,EAAO,OAC7BA,CACT,CACA,IAAME,GAAe,CAAC9L,EAAGC,EAAGhC,KAAY+B,EAAI,GAAKC,EAAI,KAAO,CAAChC,GAAU,CAACA,EAAO,YAM/E,SAAS8N,GAAkB,EAAGjM,EAAQ,CACpC,IAAMkM,EAAU,EAAE,QACZC,EAASD,GAAWA,EAAQ,OAASA,EAAQ,CAAC,EAAI,EAClD,CACJ,QAAAE,EACA,QAAAC,CACF,EAAIF,EACAG,EAAM,GACNpM,EAAGC,EACP,GAAI6L,GAAaI,EAASC,EAAS,EAAE,MAAM,EACzCnM,EAAIkM,EACJjM,EAAIkM,MACC,CACL,IAAMxJ,EAAO7C,EAAO,sBAAsB,EAC1CE,EAAIiM,EAAO,QAAUtJ,EAAK,KAC1B1C,EAAIgM,EAAO,QAAUtJ,EAAK,IAC1ByJ,EAAM,EACR,CACA,MAAO,CACL,EAAApM,EACA,EAAAC,EACA,IAAAmM,CACF,CACF,CAOA,SAASC,GAAoBC,EAAO9M,EAAO,CACzC,GAAI,WAAY8M,EACd,OAAOA,EAET,GAAM,CACJ,OAAAxM,EACA,wBAAAyM,CACF,EAAI/M,EACEkB,EAAQyK,GAAiBrL,CAAM,EAC/B0M,EAAY9L,EAAM,YAAc,aAChC+L,EAAWhB,GAAmB/K,EAAO,SAAS,EAC9CgM,EAAUjB,GAAmB/K,EAAO,SAAU,OAAO,EACrD,CACJ,EAAAV,EACA,EAAAC,EACA,IAAAmM,CACF,EAAIL,GAAkBO,EAAOxM,CAAM,EAC7BM,EAAUqM,EAAS,MAAQL,GAAOM,EAAQ,MAC1CrM,EAAUoM,EAAS,KAAOL,GAAOM,EAAQ,KAC3C,CACF,MAAAhN,EACA,OAAAiN,CACF,EAAInN,EACJ,OAAIgN,IACF9M,GAAS+M,EAAS,MAAQC,EAAQ,MAClCC,GAAUF,EAAS,OAASC,EAAQ,QAE/B,CACL,EAAG,KAAK,OAAO1M,EAAII,GAAWV,EAAQI,EAAO,MAAQyM,CAAuB,EAC5E,EAAG,KAAK,OAAOtM,EAAII,GAAWsM,EAAS7M,EAAO,OAASyM,CAAuB,CAChF,CACF,CACA,SAASK,GAAiB9M,EAAQJ,EAAOiN,EAAQ,CAC/C,IAAIE,EAAUC,EACd,GAAIpN,IAAU,QAAaiN,IAAW,OAAW,CAC/C,IAAMI,EAAYjN,GAAU+K,GAAe/K,CAAM,EACjD,GAAI,CAACiN,EACHrN,EAAQI,EAAO,YACf6M,EAAS7M,EAAO,iBACX,CACL,IAAM6C,EAAOoK,EAAU,sBAAsB,EACvCC,EAAiB7B,GAAiB4B,CAAS,EAC3CE,EAAkBxB,GAAmBuB,EAAgB,SAAU,OAAO,EACtEE,EAAmBzB,GAAmBuB,EAAgB,SAAS,EACrEtN,EAAQiD,EAAK,MAAQuK,EAAiB,MAAQD,EAAgB,MAC9DN,EAAShK,EAAK,OAASuK,EAAiB,OAASD,EAAgB,OACjEJ,EAAW9B,GAAciC,EAAe,SAAUD,EAAW,aAAa,EAC1ED,EAAY/B,GAAciC,EAAe,UAAWD,EAAW,cAAc,CAC/E,CACF,CACA,MAAO,CACL,MAAArN,EACA,OAAAiN,EACA,SAAUE,GAAYM,GACtB,UAAWL,GAAaK,EAC1B,CACF,CACA,IAAMC,GAASrS,GAAK,KAAK,MAAMA,EAAI,EAAE,EAAI,GAEzC,SAASsS,GAAevN,EAAQwN,EAASC,EAAUC,EAAa,CAC9D,IAAM9M,EAAQyK,GAAiBrL,CAAM,EAC/B2N,EAAUhC,GAAmB/K,EAAO,QAAQ,EAC5CmM,EAAW9B,GAAcrK,EAAM,SAAUZ,EAAQ,aAAa,GAAKqN,GACnEL,EAAY/B,GAAcrK,EAAM,UAAWZ,EAAQ,cAAc,GAAKqN,GACtEO,EAAgBd,GAAiB9M,EAAQwN,EAASC,CAAQ,EAC5D,CACF,MAAA7N,EACA,OAAAiN,CACF,EAAIe,EACJ,GAAIhN,EAAM,YAAc,cAAe,CACrC,IAAMgM,EAAUjB,GAAmB/K,EAAO,SAAU,OAAO,EACrD+L,EAAWhB,GAAmB/K,EAAO,SAAS,EACpDhB,GAAS+M,EAAS,MAAQC,EAAQ,MAClCC,GAAUF,EAAS,OAASC,EAAQ,MACtC,CACA,OAAAhN,EAAQ,KAAK,IAAI,EAAGA,EAAQ+N,EAAQ,KAAK,EACzCd,EAAS,KAAK,IAAI,EAAGa,EAAc9N,EAAQ8N,EAAcb,EAASc,EAAQ,MAAM,EAChF/N,EAAQ0N,GAAO,KAAK,IAAI1N,EAAOmN,EAAUa,EAAc,QAAQ,CAAC,EAChEf,EAASS,GAAO,KAAK,IAAIT,EAAQG,EAAWY,EAAc,SAAS,CAAC,EAChEhO,GAAS,CAACiN,IAGZA,EAASS,GAAO1N,EAAQ,CAAC,IAEJ4N,IAAY,QAAaC,IAAa,SACvCC,GAAeE,EAAc,QAAUf,EAASe,EAAc,SAClFf,EAASe,EAAc,OACvBhO,EAAQ0N,GAAO,KAAK,MAAMT,EAASa,CAAW,CAAC,GAE1C,CACL,MAAA9N,EACA,OAAAiN,CACF,CACF,CAOA,SAASgB,GAAYnO,EAAOoO,EAAYC,EAAY,CAClD,IAAMC,EAAaF,GAAc,EAC3BG,EAAeX,GAAO5N,EAAM,OAASsO,CAAU,EAC/CE,EAAcZ,GAAO5N,EAAM,MAAQsO,CAAU,EACnDtO,EAAM,OAAS4N,GAAO5N,EAAM,MAAM,EAClCA,EAAM,MAAQ4N,GAAO5N,EAAM,KAAK,EAChC,IAAMM,EAASN,EAAM,OAQrB,OAJIM,EAAO,QAAU+N,GAAc,CAAC/N,EAAO,MAAM,QAAU,CAACA,EAAO,MAAM,SACvEA,EAAO,MAAM,OAAS,GAAGN,EAAM,MAAM,KACrCM,EAAO,MAAM,MAAQ,GAAGN,EAAM,KAAK,MAEjCA,EAAM,0BAA4BsO,GAAchO,EAAO,SAAWiO,GAAgBjO,EAAO,QAAUkO,GACrGxO,EAAM,wBAA0BsO,EAChChO,EAAO,OAASiO,EAChBjO,EAAO,MAAQkO,EACfxO,EAAM,IAAI,aAAasO,EAAY,EAAG,EAAGA,EAAY,EAAG,CAAC,EAClD,IAEF,EACT,CAMA,IAAMG,IAA+B,UAAY,CAC/C,IAAIC,EAAmB,GACvB,GAAI,CACF,IAAM9S,EAAU,CACd,IAAI,SAAU,CACZ,OAAA8S,EAAmB,GACZ,EACT,CACF,EACItD,GAAgB,IAClB,OAAO,iBAAiB,OAAQ,KAAMxP,CAAO,EAC7C,OAAO,oBAAoB,OAAQ,KAAMA,CAAO,EAEpD,MAAY,CAEZ,CACA,OAAO8S,CACT,GAAE,EAUF,SAASC,GAAa/C,EAASG,EAAU,CACvC,IAAMlR,EAAQgR,GAASD,EAASG,CAAQ,EAClCvI,EAAU3I,GAASA,EAAM,MAAM,mBAAmB,EACxD,OAAO2I,EAAU,CAACA,EAAQ,CAAC,EAAI,MACjC,CAKA,SAASoL,GAAaC,EAAIC,EAAI,EAAG7M,EAAM,CACrC,MAAO,CACL,EAAG4M,EAAG,EAAI,GAAKC,EAAG,EAAID,EAAG,GACzB,EAAGA,EAAG,EAAI,GAAKC,EAAG,EAAID,EAAG,EAC3B,CACF,CAIA,SAASE,GAAsBF,EAAIC,EAAI,EAAG7M,EAAM,CAC9C,MAAO,CACL,EAAG4M,EAAG,EAAI,GAAKC,EAAG,EAAID,EAAG,GACzB,EAAG5M,IAAS,SAAW,EAAI,GAAM4M,EAAG,EAAIC,EAAG,EAAI7M,IAAS,QAAU,EAAI,EAAI4M,EAAG,EAAIC,EAAG,EAAI,EAAI,EAAIA,EAAG,EAAID,EAAG,CAC5G,CACF,CAIA,SAASG,GAAqBH,EAAIC,EAAI,EAAG7M,EAAM,CAC7C,IAAMgN,EAAM,CACV,EAAGJ,EAAG,KACN,EAAGA,EAAG,IACR,EACMK,EAAM,CACV,EAAGJ,EAAG,KACN,EAAGA,EAAG,IACR,EACMK,EAAIP,GAAaC,EAAII,EAAK,CAAC,EAC3BG,EAAIR,GAAaK,EAAKC,EAAK,CAAC,EAC5BG,EAAIT,GAAaM,EAAKJ,EAAI,CAAC,EAC3BQ,EAAIV,GAAaO,EAAGC,EAAG,CAAC,EACxBG,EAAIX,GAAaQ,EAAGC,EAAG,CAAC,EAC9B,OAAOT,GAAaU,EAAGC,EAAG,CAAC,CAC7B,CACA,IAAMC,GAAwB,SAAUC,EAAOvP,EAAO,CACpD,MAAO,CACL,EAAEM,EAAG,CACH,OAAOiP,EAAQA,EAAQvP,EAAQM,CACjC,EACA,SAASG,EAAG,CACVT,EAAQS,CACV,EACA,UAAU5I,EAAO,CACf,OAAIA,IAAU,SACLA,EAEFA,IAAU,QAAU,OAAS,OACtC,EACA,MAAMyI,EAAG3F,EAAO,CACd,OAAO2F,EAAI3F,CACb,EACA,WAAW2F,EAAGkP,EAAW,CACvB,OAAOlP,EAAIkP,CACb,CACF,CACF,EACMC,GAAwB,UAAY,CACxC,MAAO,CACL,EAAEnP,EAAG,CACH,OAAOA,CACT,EACA,SAASG,EAAG,CAAC,EACb,UAAU5I,EAAO,CACf,OAAOA,CACT,EACA,MAAMyI,EAAG3F,EAAO,CACd,OAAO2F,EAAI3F,CACb,EACA,WAAW2F,EAAGoP,EAAY,CACxB,OAAOpP,CACT,CACF,CACF,EACA,SAASqP,GAAcvX,EAAKmX,EAAOvP,EAAO,CACxC,OAAO5H,EAAMkX,GAAsBC,EAAOvP,CAAK,EAAIyP,GAAsB,CAC3E,CACA,SAASG,GAAsB5R,EAAK6R,EAAW,CAC7C,IAAI7O,EAAO8O,GACPD,IAAc,OAASA,IAAc,SACvC7O,EAAQhD,EAAI,OAAO,MACnB8R,EAAW,CAAC9O,EAAM,iBAAiB,WAAW,EAAGA,EAAM,oBAAoB,WAAW,CAAC,EACvFA,EAAM,YAAY,YAAa6O,EAAW,WAAW,EACrD7R,EAAI,kBAAoB8R,EAE5B,CACA,SAASC,GAAqB/R,EAAK8R,EAAU,CACvCA,IAAa,SACf,OAAO9R,EAAI,kBACXA,EAAI,OAAO,MAAM,YAAY,YAAa8R,EAAS,CAAC,EAAGA,EAAS,CAAC,CAAC,EAEtE,CACA,SAASE,GAAWnE,EAAU,CAC5B,OAAIA,IAAa,QACR,CACL,QAASoE,GACT,QAASC,GACT,UAAWC,CACb,EAEK,CACL,QAASC,GACT,QAAS,CAACnB,EAAGC,IAAMD,EAAIC,EACvB,UAAW5O,GAAKA,CAClB,CACF,CACA,SAAS+P,GAAiB,CACxB,MAAAtY,EACA,IAAAC,EACA,MAAAU,EACA,KAAAqS,EACA,MAAA/J,CACF,EAAG,CACD,MAAO,CACL,MAAOjJ,EAAQW,EACf,IAAKV,EAAMU,EACX,KAAMqS,IAAS/S,EAAMD,EAAQ,GAAKW,IAAU,EAC5C,MAAAsI,CACF,CACF,CACA,SAASsP,GAAWC,EAAShY,EAAQiY,EAAQ,CAC3C,GAAM,CACJ,SAAA3E,EACA,MAAO4E,EACP,IAAKC,CACP,EAAIF,EACE,CACJ,QAAAG,EACA,UAAAC,CACF,EAAIZ,GAAWnE,CAAQ,EACjBnT,EAAQH,EAAO,OACjB,CACF,MAAAR,EACA,IAAAC,EACA,KAAA+S,CACF,EAAIwF,EACAlT,EAAGkC,EACP,GAAIwL,EAAM,CAGR,IAFAhT,GAASW,EACTV,GAAOU,EACF2E,EAAI,EAAGkC,EAAO7G,EAAO2E,EAAIkC,GACvBoR,EAAQC,EAAUrY,EAAOR,EAAQW,CAAK,EAAEmT,CAAQ,CAAC,EAAG4E,EAAYC,CAAQ,EAD3C,EAAErT,EAIpCtF,IACAC,IAEFD,GAASW,EACTV,GAAOU,CACT,CACA,OAAIV,EAAMD,IACRC,GAAOU,GAEF,CACL,MAAAX,EACA,IAAAC,EACA,KAAA+S,EACA,MAAOwF,EAAQ,KACjB,CACF,CACA,SAASM,GAAcN,EAAShY,EAAQiY,EAAQ,CAC9C,GAAI,CAACA,EACH,MAAO,CAACD,CAAO,EAEjB,GAAM,CACJ,SAAA1E,EACA,MAAO4E,EACP,IAAKC,CACP,EAAIF,EACE9X,EAAQH,EAAO,OACf,CACJ,QAAAuY,EACA,QAAAH,EACA,UAAAC,CACF,EAAIZ,GAAWnE,CAAQ,EACjB,CACJ,MAAA9T,EACA,IAAAC,EACA,KAAA+S,EACA,MAAA/J,CACF,EAAIsP,GAAWC,EAAShY,EAAQiY,CAAM,EAChCtE,EAAS,CAAC,EACZ6E,EAAS,GACTC,EAAW,KACXrW,EAAOrB,EAAO2X,EACZC,EAAgB,IAAMP,EAAQF,EAAYQ,EAAWtW,CAAK,GAAKmW,EAAQL,EAAYQ,CAAS,IAAM,EAClGE,EAAc,IAAML,EAAQJ,EAAU/V,CAAK,IAAM,GAAKgW,EAAQD,EAAUO,EAAWtW,CAAK,EACxFyW,EAAc,IAAML,GAAUG,EAAc,EAC5CG,EAAa,IAAM,CAACN,GAAUI,EAAY,EAChD,QAAS9T,EAAItF,EAAOkT,EAAOlT,EAAOsF,GAAKrF,EAAK,EAAEqF,EAC5C/D,EAAQf,EAAO8E,EAAI3E,CAAK,EACpB,CAAAY,EAAM,OAGVqB,EAAQiW,EAAUtX,EAAMuS,CAAQ,CAAC,EAC7BlR,IAAUsW,IAGdF,EAASJ,EAAQhW,EAAO8V,EAAYC,CAAQ,EACxCM,IAAa,MAAQI,EAAY,IACnCJ,EAAWF,EAAQnW,EAAO8V,CAAU,IAAM,EAAIpT,EAAI4N,GAEhD+F,IAAa,MAAQK,EAAW,IAClCnF,EAAO,KAAKmE,GAAiB,CAC3B,MAAOW,EACP,IAAK3T,EACL,KAAA0N,EACA,MAAArS,EACA,MAAAsI,CACF,CAAC,CAAC,EACFgQ,EAAW,MAEb/F,EAAO5N,EACP4T,EAAYtW,IAEd,OAAIqW,IAAa,MACf9E,EAAO,KAAKmE,GAAiB,CAC3B,MAAOW,EACP,IAAAhZ,EACA,KAAA+S,EACA,MAAArS,EACA,MAAAsI,CACF,CAAC,CAAC,EAEGkL,CACT,CACA,SAASoF,GAAejP,EAAMmO,EAAQ,CACpC,IAAMtE,EAAS,CAAC,EACVqF,EAAWlP,EAAK,SACtB,QAAShF,EAAI,EAAGA,EAAIkU,EAAS,OAAQlU,IAAK,CACxC,IAAMmU,EAAMX,GAAcU,EAASlU,CAAC,EAAGgF,EAAK,OAAQmO,CAAM,EACtDgB,EAAI,QACNtF,EAAO,KAAK,GAAGsF,CAAG,CAEtB,CACA,OAAOtF,CACT,CACA,SAASuF,GAAgBlZ,EAAQG,EAAOqS,EAAMjS,EAAU,CACtD,IAAIf,EAAQ,EACRC,EAAMU,EAAQ,EAClB,GAAIqS,GAAQ,CAACjS,EACX,KAAOf,EAAQW,GAAS,CAACH,EAAOR,CAAK,EAAE,MACrCA,IAGJ,KAAOA,EAAQW,GAASH,EAAOR,CAAK,EAAE,MACpCA,IAMF,IAJAA,GAASW,EACLqS,IACF/S,GAAOD,GAEFC,EAAMD,GAASQ,EAAOP,EAAMU,CAAK,EAAE,MACxCV,IAEF,OAAAA,GAAOU,EACA,CACL,MAAAX,EACA,IAAAC,CACF,CACF,CACA,SAAS0Z,GAAcnZ,EAAQR,EAAOkB,EAAK8R,EAAM,CAC/C,IAAMrS,EAAQH,EAAO,OACf2T,EAAS,CAAC,EACZyF,EAAO5Z,EACPkT,EAAO1S,EAAOR,CAAK,EACnBC,EACJ,IAAKA,EAAMD,EAAQ,EAAGC,GAAOiB,EAAK,EAAEjB,EAAK,CACvC,IAAM4Z,EAAMrZ,EAAOP,EAAMU,CAAK,EAC1BkZ,EAAI,MAAQA,EAAI,KACb3G,EAAK,OACRF,EAAO,GACPmB,EAAO,KAAK,CACV,MAAOnU,EAAQW,EACf,KAAMV,EAAM,GAAKU,EACjB,KAAAqS,CACF,CAAC,EACDhT,EAAQ4Z,EAAOC,EAAI,KAAO5Z,EAAM,OAGlC2Z,EAAO3Z,EACHiT,EAAK,OACPlT,EAAQC,IAGZiT,EAAO2G,CACT,CACA,OAAID,IAAS,MACXzF,EAAO,KAAK,CACV,MAAOnU,EAAQW,EACf,IAAKiZ,EAAOjZ,EACZ,KAAAqS,CACF,CAAC,EAEImB,CACT,CACA,SAAS2F,GAAiBxP,EAAMyP,EAAgB,CAC9C,IAAMvZ,EAAS8J,EAAK,OACdvJ,EAAWuJ,EAAK,QAAQ,SACxB3J,EAAQH,EAAO,OACrB,GAAI,CAACG,EACH,MAAO,CAAC,EAEV,IAAMqS,EAAO,CAAC,CAAC1I,EAAK,MACd,CACJ,MAAAtK,EACA,IAAAC,CACF,EAAIyZ,GAAgBlZ,EAAQG,EAAOqS,EAAMjS,CAAQ,EACjD,GAAIA,IAAa,GACf,OAAOiZ,GAAc1P,EAAM,CAAC,CAC1B,MAAAtK,EACA,IAAAC,EACA,KAAA+S,CACF,CAAC,EAAGxS,EAAQuZ,CAAc,EAE5B,IAAM7Y,EAAMjB,EAAMD,EAAQC,EAAMU,EAAQV,EAClCga,EAAe,CAAC,CAAC3P,EAAK,WAAatK,IAAU,GAAKC,IAAQU,EAAQ,EACxE,OAAOqZ,GAAc1P,EAAMqP,GAAcnZ,EAAQR,EAAOkB,EAAK+Y,CAAY,EAAGzZ,EAAQuZ,CAAc,CACpG,CACA,SAASC,GAAc1P,EAAMkP,EAAUhZ,EAAQuZ,EAAgB,CAC7D,MAAI,CAACA,GAAkB,CAACA,EAAe,YAAc,CAACvZ,EAC7CgZ,EAEFU,GAAgB5P,EAAMkP,EAAUhZ,EAAQuZ,CAAc,CAC/D,CACA,SAASG,GAAgB5P,EAAMkP,EAAUhZ,EAAQuZ,EAAgB,CAC/D,IAAMI,EAAe7P,EAAK,OAAO,WAAW,EACtC8P,EAAYC,GAAU/P,EAAK,OAAO,EAClC,CACJ,cAAegQ,EACf,QAAS,CACP,SAAAvZ,CACF,CACF,EAAIuJ,EACE3J,EAAQH,EAAO,OACf2T,EAAS,CAAC,EACZoG,EAAYH,EACZpa,EAAQwZ,EAAS,CAAC,EAAE,MACpBlU,EAAItF,EACR,SAASwa,EAASpY,EAAGkV,EAAGmD,EAAGC,EAAI,CAC7B,IAAMC,EAAM5Z,EAAW,GAAK,EAC5B,GAAIqB,IAAMkV,EAIV,KADAlV,GAAKzB,EACEH,EAAO4B,EAAIzB,CAAK,EAAE,MACvByB,GAAKuY,EAEP,KAAOna,EAAO8W,EAAI3W,CAAK,EAAE,MACvB2W,GAAKqD,EAEHvY,EAAIzB,IAAU2W,EAAI3W,IACpBwT,EAAO,KAAK,CACV,MAAO/R,EAAIzB,EACX,IAAK2W,EAAI3W,EACT,KAAM8Z,EACN,MAAOC,CACT,CAAC,EACDH,EAAYG,EACZ1a,EAAQsX,EAAI3W,GAEhB,CACA,QAAW6X,KAAWgB,EAAU,CAC9BxZ,EAAQe,EAAWf,EAAQwY,EAAQ,MACnC,IAAItF,EAAO1S,EAAOR,EAAQW,CAAK,EAC3BsI,EACJ,IAAK3D,EAAItF,EAAQ,EAAGsF,GAAKkT,EAAQ,IAAKlT,IAAK,CACzC,IAAMoN,EAAKlS,EAAO8E,EAAI3E,CAAK,EAC3BsI,EAAQoR,GAAUN,EAAe,WAAW9M,GAAckN,EAAc,CACtE,KAAM,UACN,GAAIjH,EACJ,GAAIR,EACJ,aAAcpN,EAAI,GAAK3E,EACvB,YAAa2E,EAAI3E,EACjB,aAAA2Z,CACF,CAAC,CAAC,CAAC,EACCM,GAAa3R,EAAOsR,CAAS,GAC/BC,EAASxa,EAAOsF,EAAI,EAAGkT,EAAQ,KAAM+B,CAAS,EAEhDrH,EAAOR,EACP6H,EAAYtR,CACd,CACIjJ,EAAQsF,EAAI,GACdkV,EAASxa,EAAOsF,EAAI,EAAGkT,EAAQ,KAAM+B,CAAS,CAElD,CACA,OAAOpG,CACT,CACA,SAASkG,GAAU1W,EAAS,CAC1B,MAAO,CACL,gBAAiBA,EAAQ,gBACzB,eAAgBA,EAAQ,eACxB,WAAYA,EAAQ,WACpB,iBAAkBA,EAAQ,iBAC1B,gBAAiBA,EAAQ,gBACzB,YAAaA,EAAQ,YACrB,YAAaA,EAAQ,WACvB,CACF,CACA,SAASiX,GAAa3R,EAAOsR,EAAW,CACtC,GAAI,CAACA,EACH,MAAO,GAET,IAAMhT,EAAQ,CAAC,EACTsT,EAAW,SAAUzV,EAAKxC,EAAO,CACrC,OAAKD,GAAoBC,CAAK,GAGzB2E,EAAM,SAAS3E,CAAK,GACvB2E,EAAM,KAAK3E,CAAK,EAEX2E,EAAM,QAAQ3E,CAAK,GALjBA,CAMX,EACA,OAAO,KAAK,UAAUqG,EAAO4R,CAAQ,IAAM,KAAK,UAAUN,EAAWM,CAAQ,CAC/E,CACA,SAASC,GAAeC,EAAOC,EAAWC,EAAO,CAC/C,OAAOF,EAAM,QAAQ,KAAOA,EAAME,CAAK,EAAID,EAAUC,CAAK,CAC5D,CACA,SAASC,GAAe3a,EAAMya,EAAW,CACvC,GAAM,CACJ,OAAApZ,EACA,OAAAC,CACF,EAAItB,EACJ,OAAIqB,GAAUC,EACL,CACL,KAAMiZ,GAAelZ,EAAQoZ,EAAW,MAAM,EAC9C,MAAOF,GAAelZ,EAAQoZ,EAAW,OAAO,EAChD,IAAKF,GAAejZ,EAAQmZ,EAAW,KAAK,EAC5C,OAAQF,GAAejZ,EAAQmZ,EAAW,QAAQ,CACpD,EAEKA,CACT,CACA,SAASG,GAAmBpT,EAAOxH,EAAM,CACvC,IAAM6a,EAAO7a,EAAK,MAClB,GAAI6a,EAAK,SACP,MAAO,GAET,IAAM3R,EAAOyR,GAAe3a,EAAMwH,EAAM,SAAS,EACjD,MAAO,CACL,KAAMqT,EAAK,OAAS,GAAQ,EAAI3R,EAAK,MAAQ2R,EAAK,OAAS,GAAO,EAAIA,EAAK,MAC3E,MAAOA,EAAK,QAAU,GAAQrT,EAAM,MAAQ0B,EAAK,OAAS2R,EAAK,QAAU,GAAO,EAAIA,EAAK,OACzF,IAAKA,EAAK,MAAQ,GAAQ,EAAI3R,EAAK,KAAO2R,EAAK,MAAQ,GAAO,EAAIA,EAAK,KACvE,OAAQA,EAAK,SAAW,GAAQrT,EAAM,OAAS0B,EAAK,QAAU2R,EAAK,SAAW,GAAO,EAAIA,EAAK,OAChG,CACF,CCz0FA,IAAMC,GAAN,KAAe,CACb,aAAc,CACZ,KAAK,SAAW,KAChB,KAAK,QAAU,IAAI,IACnB,KAAK,SAAW,GAChB,KAAK,UAAY,MACnB,CACA,QAAQC,EAAOC,EAAOC,EAAMC,EAAM,CAChC,IAAMC,EAAYH,EAAM,UAAUE,CAAI,EAChCE,EAAWJ,EAAM,SACvBG,EAAU,QAAQE,GAAMA,EAAG,CACzB,MAAAN,EACA,QAASC,EAAM,QACf,SAAAI,EACA,YAAa,KAAK,IAAIH,EAAOD,EAAM,MAAOI,CAAQ,CACpD,CAAC,CAAC,CACJ,CACA,UAAW,CACL,KAAK,WAGT,KAAK,SAAW,GAChB,KAAK,SAAWE,GAAiB,KAAK,OAAQ,IAAM,CAClD,KAAK,QAAQ,EACb,KAAK,SAAW,KACZ,KAAK,UACP,KAAK,SAAS,CAElB,CAAC,EACH,CACA,QAAQL,EAAO,KAAK,IAAI,EAAG,CACzB,IAAIM,EAAY,EAChB,KAAK,QAAQ,QAAQ,CAACP,EAAOD,IAAU,CACrC,GAAI,CAACC,EAAM,SAAW,CAACA,EAAM,MAAM,OACjC,OAEF,IAAMQ,EAAQR,EAAM,MAChBS,EAAID,EAAM,OAAS,EACnBE,EAAO,GACPC,EACJ,KAAOF,GAAK,EAAG,EAAEA,EACfE,EAAOH,EAAMC,CAAC,EACVE,EAAK,SACHA,EAAK,OAASX,EAAM,WACtBA,EAAM,SAAWW,EAAK,QAExBA,EAAK,KAAKV,CAAI,EACdS,EAAO,KAEPF,EAAMC,CAAC,EAAID,EAAMA,EAAM,OAAS,CAAC,EACjCA,EAAM,IAAI,GAGVE,IACFX,EAAM,KAAK,EACX,KAAK,QAAQA,EAAOC,EAAOC,EAAM,UAAU,GAExCO,EAAM,SACTR,EAAM,QAAU,GAChB,KAAK,QAAQD,EAAOC,EAAOC,EAAM,UAAU,EAC3CD,EAAM,QAAU,IAElBO,GAAaC,EAAM,MACrB,CAAC,EACD,KAAK,UAAYP,EACbM,IAAc,IAChB,KAAK,SAAW,GAEpB,CACA,UAAUR,EAAO,CACf,IAAMa,EAAS,KAAK,QAChBZ,EAAQY,EAAO,IAAIb,CAAK,EAC5B,OAAKC,IACHA,EAAQ,CACN,QAAS,GACT,QAAS,GACT,MAAO,CAAC,EACR,UAAW,CACT,SAAU,CAAC,EACX,SAAU,CAAC,CACb,CACF,EACAY,EAAO,IAAIb,EAAOC,CAAK,GAElBA,CACT,CACA,OAAOD,EAAOc,EAAOC,EAAI,CACvB,KAAK,UAAUf,CAAK,EAAE,UAAUc,CAAK,EAAE,KAAKC,CAAE,CAChD,CACA,IAAIf,EAAOS,EAAO,CACZ,CAACA,GAAS,CAACA,EAAM,QAGrB,KAAK,UAAUT,CAAK,EAAE,MAAM,KAAK,GAAGS,CAAK,CAC3C,CACA,IAAIT,EAAO,CACT,OAAO,KAAK,UAAUA,CAAK,EAAE,MAAM,OAAS,CAC9C,CACA,MAAMA,EAAO,CACX,IAAMC,EAAQ,KAAK,QAAQ,IAAID,CAAK,EAC/BC,IAGLA,EAAM,QAAU,GAChBA,EAAM,MAAQ,KAAK,IAAI,EACvBA,EAAM,SAAWA,EAAM,MAAM,OAAO,CAACe,EAAKC,IAAQ,KAAK,IAAID,EAAKC,EAAI,SAAS,EAAG,CAAC,EACjF,KAAK,SAAS,EAChB,CACA,QAAQjB,EAAO,CACb,GAAI,CAAC,KAAK,SACR,MAAO,GAET,IAAMC,EAAQ,KAAK,QAAQ,IAAID,CAAK,EACpC,MAAI,GAACC,GAAS,CAACA,EAAM,SAAW,CAACA,EAAM,MAAM,OAI/C,CACA,KAAKD,EAAO,CACV,IAAMC,EAAQ,KAAK,QAAQ,IAAID,CAAK,EACpC,GAAI,CAACC,GAAS,CAACA,EAAM,MAAM,OACzB,OAEF,IAAMQ,EAAQR,EAAM,MAChBS,EAAID,EAAM,OAAS,EACvB,KAAOC,GAAK,EAAG,EAAEA,EACfD,EAAMC,CAAC,EAAE,OAAO,EAElBT,EAAM,MAAQ,CAAC,EACf,KAAK,QAAQD,EAAOC,EAAO,KAAK,IAAI,EAAG,UAAU,CACnD,CACA,OAAOD,EAAO,CACZ,OAAO,KAAK,QAAQ,OAAOA,CAAK,CAClC,CACF,EACIkB,GAA0B,IAAInB,GAC5BoB,GAAc,cACdC,GAAgB,CACpB,QAAQC,EAAMC,EAAIC,EAAQ,CACxB,OAAOA,EAAS,GAAMD,EAAKD,CAC7B,EACA,MAAMA,EAAMC,EAAIC,EAAQ,CACtB,IAAMC,EAAKC,GAAMJ,GAAQF,EAAW,EAC9BO,EAAKF,EAAG,OAASC,GAAMH,GAAMH,EAAW,EAC9C,OAAOO,GAAMA,EAAG,MAAQA,EAAG,IAAIF,EAAID,CAAM,EAAE,UAAU,EAAID,CAC3D,EACA,OAAOD,EAAMC,EAAIC,EAAQ,CACvB,OAAOF,GAAQC,EAAKD,GAAQE,CAC9B,CACF,EACMI,GAAN,KAAgB,CACd,YAAYC,EAAKC,EAAQC,EAAMR,EAAI,CACjC,IAAMS,EAAeF,EAAOC,CAAI,EAChCR,EAAKU,GAAQ,CAACJ,EAAI,GAAIN,EAAIS,EAAcH,EAAI,IAAI,CAAC,EACjD,IAAMP,EAAOW,GAAQ,CAACJ,EAAI,KAAMG,EAAcT,CAAE,CAAC,EACjD,KAAK,QAAU,GACf,KAAK,IAAMM,EAAI,IAAMR,GAAcQ,EAAI,MAAQ,OAAOP,CAAI,EAC1D,KAAK,QAAUY,GAAQL,EAAI,MAAM,GAAKK,GAAQ,OAC9C,KAAK,OAAS,KAAK,MAAM,KAAK,IAAI,GAAKL,EAAI,OAAS,EAAE,EACtD,KAAK,UAAY,KAAK,OAAS,KAAK,MAAMA,EAAI,QAAQ,EACtD,KAAK,MAAQ,CAAC,CAACA,EAAI,KACnB,KAAK,QAAUC,EACf,KAAK,MAAQC,EACb,KAAK,MAAQT,EACb,KAAK,IAAMC,EACX,KAAK,UAAY,MACnB,CACA,QAAS,CACP,OAAO,KAAK,OACd,CACA,OAAOM,EAAKN,EAAIpB,EAAM,CACpB,GAAI,KAAK,QAAS,CAChB,KAAK,QAAQ,EAAK,EAClB,IAAM6B,EAAe,KAAK,QAAQ,KAAK,KAAK,EACtCG,EAAUhC,EAAO,KAAK,OACtBiC,EAAS,KAAK,UAAYD,EAChC,KAAK,OAAShC,EACd,KAAK,UAAY,KAAK,MAAM,KAAK,IAAIiC,EAAQP,EAAI,QAAQ,CAAC,EAC1D,KAAK,QAAUM,EACf,KAAK,MAAQ,CAAC,CAACN,EAAI,KACnB,KAAK,IAAMI,GAAQ,CAACJ,EAAI,GAAIN,EAAIS,EAAcH,EAAI,IAAI,CAAC,EACvD,KAAK,MAAQI,GAAQ,CAACJ,EAAI,KAAMG,EAAcT,CAAE,CAAC,CACnD,CACF,CACA,QAAS,CACH,KAAK,UACP,KAAK,KAAK,KAAK,IAAI,CAAC,EACpB,KAAK,QAAU,GACf,KAAK,QAAQ,EAAK,EAEtB,CACA,KAAKpB,EAAM,CACT,IAAMgC,EAAUhC,EAAO,KAAK,OACtBkC,EAAW,KAAK,UAChBN,EAAO,KAAK,MACZT,EAAO,KAAK,MACZgB,EAAO,KAAK,MACZf,EAAK,KAAK,IACZC,EAEJ,GADA,KAAK,QAAUF,IAASC,IAAOe,GAAQH,EAAUE,GAC7C,CAAC,KAAK,QAAS,CACjB,KAAK,QAAQN,CAAI,EAAIR,EACrB,KAAK,QAAQ,EAAI,EACjB,MACF,CACA,GAAIY,EAAU,EAAG,CACf,KAAK,QAAQJ,CAAI,EAAIT,EACrB,MACF,CACAE,EAASW,EAAUE,EAAW,EAC9Bb,EAASc,GAAQd,EAAS,EAAI,EAAIA,EAASA,EAC3CA,EAAS,KAAK,QAAQ,KAAK,IAAI,EAAG,KAAK,IAAI,EAAGA,CAAM,CAAC,CAAC,EACtD,KAAK,QAAQO,CAAI,EAAI,KAAK,IAAIT,EAAMC,EAAIC,CAAM,CAChD,CACA,MAAO,CACL,IAAMe,EAAW,KAAK,YAAc,KAAK,UAAY,CAAC,GACtD,OAAO,IAAI,QAAQ,CAACC,EAAKC,IAAQ,CAC/BF,EAAS,KAAK,CACZ,IAAAC,EACA,IAAAC,CACF,CAAC,CACH,CAAC,CACH,CACA,QAAQC,EAAU,CAChB,IAAMC,EAASD,EAAW,MAAQ,MAC5BH,EAAW,KAAK,WAAa,CAAC,EACpC,QAAS5B,EAAI,EAAGA,EAAI4B,EAAS,OAAQ5B,IACnC4B,EAAS5B,CAAC,EAAEgC,CAAM,EAAE,CAExB,CACF,EACMC,GAAN,KAAiB,CACf,YAAY3C,EAAO4C,EAAQ,CACzB,KAAK,OAAS5C,EACd,KAAK,YAAc,IAAI,IACvB,KAAK,UAAU4C,CAAM,CACvB,CACA,UAAUA,EAAQ,CAChB,GAAI,CAACC,EAASD,CAAM,EAClB,OAEF,IAAME,EAAmB,OAAO,KAAKC,EAAS,SAAS,EACjDC,EAAgB,KAAK,YAC3B,OAAO,oBAAoBJ,CAAM,EAAE,QAAQK,GAAO,CAChD,IAAMrB,EAAMgB,EAAOK,CAAG,EACtB,GAAI,CAACJ,EAASjB,CAAG,EACf,OAEF,IAAMa,EAAW,CAAC,EAClB,QAAWS,KAAUJ,EACnBL,EAASS,CAAM,EAAItB,EAAIsB,CAAM,GAE9BC,EAAQvB,EAAI,UAAU,GAAKA,EAAI,YAAc,CAACqB,CAAG,GAAG,QAAQnB,GAAQ,EAC/DA,IAASmB,GAAO,CAACD,EAAc,IAAIlB,CAAI,IACzCkB,EAAc,IAAIlB,EAAMW,CAAQ,CAEpC,CAAC,CACH,CAAC,CACH,CACA,gBAAgBZ,EAAQuB,EAAQ,CAC9B,IAAMC,EAAaD,EAAO,QACpBE,EAAUC,GAAqB1B,EAAQwB,CAAU,EACvD,GAAI,CAACC,EACH,MAAO,CAAC,EAEV,IAAME,EAAa,KAAK,kBAAkBF,EAASD,CAAU,EAC7D,OAAIA,EAAW,SACbI,GAAS5B,EAAO,QAAQ,YAAawB,CAAU,EAAE,KAAK,IAAM,CAC1DxB,EAAO,QAAUwB,CACnB,EAAG,IAAM,CAAC,CAAC,EAENG,CACT,CACA,kBAAkB3B,EAAQuB,EAAQ,CAChC,IAAMJ,EAAgB,KAAK,YACrBQ,EAAa,CAAC,EACdE,EAAU7B,EAAO,cAAgBA,EAAO,YAAc,CAAC,GACvD8B,EAAQ,OAAO,KAAKP,CAAM,EAC1BlD,EAAO,KAAK,IAAI,EAClBQ,EACJ,IAAKA,EAAIiD,EAAM,OAAS,EAAGjD,GAAK,EAAG,EAAEA,EAAG,CACtC,IAAMoB,EAAO6B,EAAMjD,CAAC,EACpB,GAAIoB,EAAK,OAAO,CAAC,IAAM,IACrB,SAEF,GAAIA,IAAS,UAAW,CACtB0B,EAAW,KAAK,GAAG,KAAK,gBAAgB3B,EAAQuB,CAAM,CAAC,EACvD,QACF,CACA,IAAMQ,EAAQR,EAAOtB,CAAI,EACrB+B,EAAYH,EAAQ5B,CAAI,EACtBF,EAAMoB,EAAc,IAAIlB,CAAI,EAClC,GAAI+B,EACF,GAAIjC,GAAOiC,EAAU,OAAO,EAAG,CAC7BA,EAAU,OAAOjC,EAAKgC,EAAO1D,CAAI,EACjC,QACF,MACE2D,EAAU,OAAO,EAGrB,GAAI,CAACjC,GAAO,CAACA,EAAI,SAAU,CACzBC,EAAOC,CAAI,EAAI8B,EACf,QACF,CACAF,EAAQ5B,CAAI,EAAI+B,EAAY,IAAIlC,GAAUC,EAAKC,EAAQC,EAAM8B,CAAK,EAClEJ,EAAW,KAAKK,CAAS,CAC3B,CACA,OAAOL,CACT,CACA,OAAO3B,EAAQuB,EAAQ,CACrB,GAAI,KAAK,YAAY,OAAS,EAAG,CAC/B,OAAO,OAAOvB,EAAQuB,CAAM,EAC5B,MACF,CACA,IAAMI,EAAa,KAAK,kBAAkB3B,EAAQuB,CAAM,EACxD,GAAII,EAAW,OACb,OAAAtC,GAAS,IAAI,KAAK,OAAQsC,CAAU,EAC7B,EAEX,CACF,EACA,SAASC,GAASD,EAAYM,EAAY,CACxC,IAAMJ,EAAU,CAAC,EACXK,EAAO,OAAO,KAAKD,CAAU,EACnC,QAASpD,EAAI,EAAGA,EAAIqD,EAAK,OAAQrD,IAAK,CACpC,IAAMsD,EAAOR,EAAWO,EAAKrD,CAAC,CAAC,EAC3BsD,GAAQA,EAAK,OAAO,GACtBN,EAAQ,KAAKM,EAAK,KAAK,CAAC,CAE5B,CACA,OAAO,QAAQ,IAAIN,CAAO,CAC5B,CACA,SAASH,GAAqB1B,EAAQwB,EAAY,CAChD,GAAI,CAACA,EACH,OAEF,IAAIC,EAAUzB,EAAO,QACrB,GAAI,CAACyB,EAAS,CACZzB,EAAO,QAAUwB,EACjB,MACF,CACA,OAAIC,EAAQ,UACVzB,EAAO,QAAUyB,EAAU,OAAO,OAAO,CAAC,EAAGA,EAAS,CACpD,QAAS,GACT,YAAa,CAAC,CAChB,CAAC,GAEIA,CACT,CACA,SAASW,GAAUC,EAAOC,EAAiB,CACzC,IAAMC,EAAOF,GAASA,EAAM,SAAW,CAAC,EAClCG,EAAUD,EAAK,QACfE,EAAMF,EAAK,MAAQ,OAAYD,EAAkB,EACjDI,EAAMH,EAAK,MAAQ,OAAYD,EAAkB,EACvD,MAAO,CACL,MAAOE,EAAUE,EAAMD,EACvB,IAAKD,EAAUC,EAAMC,CACvB,CACF,CACA,SAASC,GAAYC,EAAQC,EAAQP,EAAiB,CACpD,GAAIA,IAAoB,GACtB,MAAO,GAET,IAAMQ,EAAIV,GAAUQ,EAAQN,CAAe,EACrCS,EAAIX,GAAUS,EAAQP,CAAe,EAC3C,MAAO,CACL,IAAKS,EAAE,IACP,MAAOD,EAAE,IACT,OAAQC,EAAE,MACV,KAAMD,EAAE,KACV,CACF,CACA,SAASE,GAAOjB,EAAO,CACrB,IAAIkB,EAAGC,EAAGC,EAAGC,EACb,OAAIpC,EAASe,CAAK,GAChBkB,EAAIlB,EAAM,IACVmB,EAAInB,EAAM,MACVoB,EAAIpB,EAAM,OACVqB,EAAIrB,EAAM,MAEVkB,EAAIC,EAAIC,EAAIC,EAAIrB,EAEX,CACL,IAAKkB,EACL,MAAOC,EACP,OAAQC,EACR,KAAMC,EACN,SAAUrB,IAAU,EACtB,CACF,CACA,SAASsB,GAAwBlF,EAAOmF,EAAe,CACrD,IAAMpB,EAAO,CAAC,EACRqB,EAAWpF,EAAM,uBAAuBmF,CAAa,EACvDzE,EAAG2E,EACP,IAAK3E,EAAI,EAAG2E,EAAOD,EAAS,OAAQ1E,EAAI2E,EAAM,EAAE3E,EAC9CqD,EAAK,KAAKqB,EAAS1E,CAAC,EAAE,KAAK,EAE7B,OAAOqD,CACT,CACA,SAASuB,GAAWC,EAAO3B,EAAO4B,EAASlC,EAAU,CAAC,EAAG,CACvD,IAAMS,EAAOwB,EAAM,KACbE,EAAanC,EAAQ,OAAS,SAChC5C,EAAG2E,EAAMK,EAAcC,EAC3B,GAAI/B,IAAU,KACZ,OAEF,IAAIgC,EAAQ,GACZ,IAAKlF,EAAI,EAAG2E,EAAOtB,EAAK,OAAQrD,EAAI2E,EAAM,EAAE3E,EAAG,CAE7C,GADAgF,EAAe,CAAC3B,EAAKrD,CAAC,EAClBgF,IAAiBF,EAAS,CAE5B,GADAI,EAAQ,GACJtC,EAAQ,IACV,SAEF,KACF,CACAqC,EAAaJ,EAAM,OAAOG,CAAY,EAClCG,EAAeF,CAAU,IAAMF,GAAc7B,IAAU,GAAKkC,GAAKlC,CAAK,IAAMkC,GAAKH,CAAU,KAC7F/B,GAAS+B,EAEb,CACA,MAAI,CAACC,GAAS,CAACtC,EAAQ,IACd,EAEFM,CACT,CACA,SAASmC,GAAyBC,EAAMC,EAAM,CAC5C,GAAM,CACJ,OAAAC,EACA,OAAAC,CACF,EAAIF,EACEG,EAAWF,EAAO,OAAS,IAAM,IAAM,IACvCG,EAAWF,EAAO,OAAS,IAAM,IAAM,IACvCpC,EAAO,OAAO,KAAKiC,CAAI,EACvBM,EAAQ,IAAI,MAAMvC,EAAK,MAAM,EAC/BrD,EAAG2E,EAAMpC,EACb,IAAKvC,EAAI,EAAG2E,EAAOtB,EAAK,OAAQrD,EAAI2E,EAAM,EAAE3E,EAC1CuC,EAAMc,EAAKrD,CAAC,EACZ4F,EAAM5F,CAAC,EAAI,CACT,CAAC0F,CAAQ,EAAGnD,EACZ,CAACoD,CAAQ,EAAGL,EAAK/C,CAAG,CACtB,EAEF,OAAOqD,CACT,CACA,SAASC,GAAUrC,EAAO+B,EAAM,CAC9B,IAAMO,EAAUtC,GAASA,EAAM,QAAQ,QACvC,OAAOsC,GAAWA,IAAY,QAAaP,EAAK,QAAU,MAC5D,CACA,SAASQ,GAAYC,EAAYC,EAAYV,EAAM,CACjD,MAAO,GAAGS,EAAW,EAAE,IAAIC,EAAW,EAAE,IAAIV,EAAK,OAASA,EAAK,IAAI,EACrE,CACA,SAASW,GAAc1C,EAAO,CAC5B,GAAM,CACJ,IAAAI,EACA,IAAAC,EACA,WAAAsC,EACA,WAAAC,CACF,EAAI5C,EAAM,cAAc,EACxB,MAAO,CACL,IAAK2C,EAAavC,EAAM,OAAO,kBAC/B,IAAKwC,EAAavC,EAAM,OAAO,iBACjC,CACF,CACA,SAASwC,GAAiBC,EAAQC,EAAUC,EAAY,CACtD,IAAMC,EAAWH,EAAOC,CAAQ,IAAMD,EAAOC,CAAQ,EAAI,CAAC,GAC1D,OAAOE,EAASD,CAAU,IAAMC,EAASD,CAAU,EAAI,CAAC,EAC1D,CACA,SAASE,GAAoB7B,EAAOY,EAAQkB,EAAUlH,EAAM,CAC1D,QAAW8F,KAAQE,EAAO,wBAAwBhG,CAAI,EAAE,QAAQ,EAAG,CACjE,IAAMyD,EAAQ2B,EAAMU,EAAK,KAAK,EAC9B,GAAIoB,GAAYzD,EAAQ,GAAK,CAACyD,GAAYzD,EAAQ,EAChD,OAAOqC,EAAK,KAEhB,CACA,OAAO,IACT,CACA,SAASqB,GAAaC,EAAYC,EAAQ,CACxC,GAAM,CACJ,MAAAxH,EACA,YAAaiG,CACf,EAAIsB,EACEP,EAAShH,EAAM,UAAYA,EAAM,QAAU,CAAC,GAC5C,CACJ,OAAAkG,EACA,OAAAC,EACA,MAAOT,CACT,EAAIO,EACEwB,EAAQvB,EAAO,KACfwB,EAAQvB,EAAO,KACflD,EAAMwD,GAAYP,EAAQC,EAAQF,CAAI,EACtCZ,EAAOmC,EAAO,OAChBjC,EACJ,QAAS7E,EAAI,EAAGA,EAAI2E,EAAM,EAAE3E,EAAG,CAC7B,IAAME,EAAO4G,EAAO9G,CAAC,EACf,CACJ,CAAC+G,CAAK,EAAGE,EACT,CAACD,CAAK,EAAG9D,CACX,EAAIhD,EACEgH,EAAahH,EAAK,UAAYA,EAAK,QAAU,CAAC,GACpD2E,EAAQqC,EAAWF,CAAK,EAAIX,GAAiBC,EAAQ/D,EAAK0E,CAAK,EAC/DpC,EAAMG,CAAY,EAAI9B,EACtB2B,EAAM,KAAO6B,GAAoB7B,EAAOY,EAAQ,GAAMF,EAAK,IAAI,EAC/DV,EAAM,QAAU6B,GAAoB7B,EAAOY,EAAQ,GAAOF,EAAK,IAAI,EACnE,IAAM4B,EAAetC,EAAM,gBAAkBA,EAAM,cAAgB,CAAC,GACpEsC,EAAanC,CAAY,EAAI9B,CAC/B,CACF,CACA,SAASkE,GAAgB9H,EAAO+H,EAAM,CACpC,IAAMC,EAAShI,EAAM,OACrB,OAAO,OAAO,KAAKgI,CAAM,EAAE,OAAO/E,GAAO+E,EAAO/E,CAAG,EAAE,OAAS8E,CAAI,EAAE,MAAM,CAC5E,CACA,SAASE,GAAqBC,EAAQP,EAAO,CAC3C,OAAOQ,GAAcD,EAAQ,CAC3B,OAAQ,GACR,QAAS,OACT,aAAcP,EACd,MAAAA,EACA,KAAM,UACN,KAAM,SACR,CAAC,CACH,CACA,SAASS,GAAkBF,EAAQP,EAAOU,EAAS,CACjD,OAAOF,GAAcD,EAAQ,CAC3B,OAAQ,GACR,UAAWP,EACX,OAAQ,OACR,IAAK,OACL,QAAAU,EACA,MAAAV,EACA,KAAM,UACN,KAAM,MACR,CAAC,CACH,CACA,SAASW,GAAYrC,EAAMxF,EAAO,CAChC,IAAMiF,EAAeO,EAAK,WAAW,MAC/B8B,EAAO9B,EAAK,QAAUA,EAAK,OAAO,KACxC,GAAK8B,EAGL,CAAAtH,EAAQA,GAASwF,EAAK,QACtB,QAAWuB,KAAU/G,EAAO,CAC1B,IAAMuG,EAASQ,EAAO,QACtB,GAAI,CAACR,GAAUA,EAAOe,CAAI,IAAM,QAAaf,EAAOe,CAAI,EAAErC,CAAY,IAAM,OAC1E,OAEF,OAAOsB,EAAOe,CAAI,EAAErC,CAAY,EAC5BsB,EAAOe,CAAI,EAAE,gBAAkB,QAAaf,EAAOe,CAAI,EAAE,cAAcrC,CAAY,IAAM,QAC3F,OAAOsB,EAAOe,CAAI,EAAE,cAAcrC,CAAY,CAElD,EACF,CACA,IAAM6C,GAAqBC,GAAQA,IAAS,SAAWA,IAAS,OAC1DC,GAAmB,CAACC,EAAQC,IAAWA,EAASD,EAAS,OAAO,OAAO,CAAC,EAAGA,CAAM,EACjFE,GAAc,CAACC,EAAU5C,EAAMjG,IAAU6I,GAAY,CAAC5C,EAAK,QAAUA,EAAK,UAAY,CAC1F,KAAMf,GAAwBlF,EAAO,EAAI,EACzC,OAAQ,IACV,EACI8I,IAAkC,IAAM,CAC1C,MAAMA,CAAkB,CACtB,OAAO,SAAW,CAAC,EACnB,OAAO,mBAAqB,KAC5B,OAAO,gBAAkB,KACzB,YAAY9I,EAAO0F,EAAc,CAC/B,KAAK,MAAQ1F,EACb,KAAK,KAAOA,EAAM,IAClB,KAAK,MAAQ0F,EACb,KAAK,gBAAkB,CAAC,EACxB,KAAK,YAAc,KAAK,QAAQ,EAChC,KAAK,MAAQ,KAAK,YAAY,KAC9B,KAAK,QAAU,OACf,KAAK,SAAW,GAChB,KAAK,MAAQ,OACb,KAAK,YAAc,OACnB,KAAK,eAAiB,OACtB,KAAK,WAAa,OAClB,KAAK,WAAa,OAClB,KAAK,oBAAsB,GAC3B,KAAK,mBAAqB,GAC1B,KAAK,SAAW,OAChB,KAAK,UAAY,CAAC,EAClB,KAAK,mBAAqB,WAAW,mBACrC,KAAK,gBAAkB,WAAW,gBAClC,KAAK,WAAW,CAClB,CACA,YAAa,CACX,IAAMO,EAAO,KAAK,YAClB,KAAK,UAAU,EACf,KAAK,WAAW,EAChBA,EAAK,SAAWM,GAAUN,EAAK,OAAQA,CAAI,EAC3C,KAAK,YAAY,EACb,KAAK,QAAQ,MAAQ,CAAC,KAAK,MAAM,gBAAgB,QAAQ,GAC3D,QAAQ,KAAK,oKAAoK,CAErL,CACA,YAAYP,EAAc,CACpB,KAAK,QAAUA,GACjB4C,GAAY,KAAK,WAAW,EAE9B,KAAK,MAAQ5C,CACf,CACA,YAAa,CACX,IAAM1F,EAAQ,KAAK,MACbiG,EAAO,KAAK,YACZ8C,EAAU,KAAK,WAAW,EAC1BC,EAAW,CAACjB,EAAMpD,EAAGC,EAAGG,IAAMgD,IAAS,IAAMpD,EAAIoD,IAAS,IAAMhD,EAAIH,EACpEqE,EAAMhD,EAAK,QAAUiD,EAAeH,EAAQ,QAASjB,GAAgB9H,EAAO,GAAG,CAAC,EAChFmJ,EAAMlD,EAAK,QAAUiD,EAAeH,EAAQ,QAASjB,GAAgB9H,EAAO,GAAG,CAAC,EAChFoJ,EAAMnD,EAAK,QAAUiD,EAAeH,EAAQ,QAASjB,GAAgB9H,EAAO,GAAG,CAAC,EAChFqJ,EAAYpD,EAAK,UACjBqD,EAAMrD,EAAK,QAAU+C,EAASK,EAAWJ,EAAKE,EAAKC,CAAG,EACtDG,EAAMtD,EAAK,QAAU+C,EAASK,EAAWF,EAAKF,EAAKG,CAAG,EAC5DnD,EAAK,OAAS,KAAK,cAAcgD,CAAG,EACpChD,EAAK,OAAS,KAAK,cAAckD,CAAG,EACpClD,EAAK,OAAS,KAAK,cAAcmD,CAAG,EACpCnD,EAAK,OAAS,KAAK,cAAcqD,CAAG,EACpCrD,EAAK,OAAS,KAAK,cAAcsD,CAAG,CACtC,CACA,YAAa,CACX,OAAO,KAAK,MAAM,KAAK,SAAS,KAAK,KAAK,CAC5C,CACA,SAAU,CACR,OAAO,KAAK,MAAM,eAAe,KAAK,KAAK,CAC7C,CACA,cAAcC,EAAS,CACrB,OAAO,KAAK,MAAM,OAAOA,CAAO,CAClC,CACA,eAAetF,EAAO,CACpB,IAAM+B,EAAO,KAAK,YAClB,OAAO/B,IAAU+B,EAAK,OAASA,EAAK,OAASA,EAAK,MACpD,CACA,OAAQ,CACN,KAAK,QAAQ,OAAO,CACtB,CACA,UAAW,CACT,IAAMA,EAAO,KAAK,YACd,KAAK,OACPwD,GAAoB,KAAK,MAAO,IAAI,EAElCxD,EAAK,UACPqC,GAAYrC,CAAI,CAEpB,CACA,YAAa,CACX,IAAM8C,EAAU,KAAK,WAAW,EAC1B/C,EAAO+C,EAAQ,OAASA,EAAQ,KAAO,CAAC,GACxCW,EAAQ,KAAK,MACnB,GAAI7G,EAASmD,CAAI,EAAG,CAClB,IAAMC,EAAO,KAAK,YAClB,KAAK,MAAQF,GAAyBC,EAAMC,CAAI,CAClD,SAAWyD,IAAU1D,EAAM,CACzB,GAAI0D,EAAO,CACTD,GAAoBC,EAAO,IAAI,EAC/B,IAAMzD,EAAO,KAAK,YAClBqC,GAAYrC,CAAI,EAChBA,EAAK,QAAU,CAAC,CAClB,CACID,GAAQ,OAAO,aAAaA,CAAI,GAClC2D,GAAkB3D,EAAM,IAAI,EAE9B,KAAK,UAAY,CAAC,EAClB,KAAK,MAAQA,CACf,CACF,CACA,aAAc,CACZ,IAAMC,EAAO,KAAK,YAClB,KAAK,WAAW,EACZ,KAAK,qBACPA,EAAK,QAAU,IAAI,KAAK,mBAE5B,CACA,sBAAsB2D,EAAkB,CACtC,IAAM3D,EAAO,KAAK,YACZ8C,EAAU,KAAK,WAAW,EAC5Bc,EAAe,GACnB,KAAK,WAAW,EAChB,IAAMC,EAAa7D,EAAK,SACxBA,EAAK,SAAWM,GAAUN,EAAK,OAAQA,CAAI,EACvCA,EAAK,QAAU8C,EAAQ,QACzBc,EAAe,GACfvB,GAAYrC,CAAI,EAChBA,EAAK,MAAQ8C,EAAQ,OAEvB,KAAK,gBAAgBa,CAAgB,GACjCC,GAAgBC,IAAe7D,EAAK,YACtCqB,GAAa,KAAMrB,EAAK,OAAO,EAC/BA,EAAK,SAAWM,GAAUN,EAAK,OAAQA,CAAI,EAE/C,CACA,WAAY,CACV,IAAMrD,EAAS,KAAK,MAAM,OACpBmH,EAAYnH,EAAO,iBAAiB,KAAK,KAAK,EAC9CoH,EAASpH,EAAO,gBAAgB,KAAK,WAAW,EAAGmH,EAAW,EAAI,EACxE,KAAK,QAAUnH,EAAO,eAAeoH,EAAQ,KAAK,WAAW,CAAC,EAC9D,KAAK,SAAW,KAAK,QAAQ,QAC7B,KAAK,gBAAkB,CAAC,CAC1B,CACA,MAAMC,EAAOC,EAAO,CAClB,GAAM,CACJ,YAAajE,EACb,MAAOD,CACT,EAAI,KACE,CACJ,OAAAE,EACA,SAAAiE,CACF,EAAIlE,EACEwB,EAAQvB,EAAO,KACjBkE,EAASH,IAAU,GAAKC,IAAUlE,EAAK,OAAS,GAAOC,EAAK,QAC5DoE,EAAOJ,EAAQ,GAAKhE,EAAK,QAAQgE,EAAQ,CAAC,EAC1CvJ,EAAGO,EAAKuG,EACZ,GAAI,KAAK,WAAa,GACpBvB,EAAK,QAAUD,EACfC,EAAK,QAAU,GACfuB,EAASxB,MACJ,CACD7C,EAAQ6C,EAAKiE,CAAK,CAAC,EACrBzC,EAAS,KAAK,eAAevB,EAAMD,EAAMiE,EAAOC,CAAK,EAC5CrH,EAASmD,EAAKiE,CAAK,CAAC,EAC7BzC,EAAS,KAAK,gBAAgBvB,EAAMD,EAAMiE,EAAOC,CAAK,EAEtD1C,EAAS,KAAK,mBAAmBvB,EAAMD,EAAMiE,EAAOC,CAAK,EAE3D,IAAMI,EAA6B,IAAMrJ,EAAIwG,CAAK,IAAM,MAAQ4C,GAAQpJ,EAAIwG,CAAK,EAAI4C,EAAK5C,CAAK,EAC/F,IAAK/G,EAAI,EAAGA,EAAIwJ,EAAO,EAAExJ,EACvBuF,EAAK,QAAQvF,EAAIuJ,CAAK,EAAIhJ,EAAMuG,EAAO9G,CAAC,EACpC0J,IACEE,EAA2B,IAC7BF,EAAS,IAEXC,EAAOpJ,GAGXgF,EAAK,QAAUmE,CACjB,CACID,GACF7C,GAAa,KAAME,CAAM,CAE7B,CACA,mBAAmBvB,EAAMD,EAAMiE,EAAOC,EAAO,CAC3C,GAAM,CACJ,OAAAhE,EACA,OAAAC,CACF,EAAIF,EACEwB,EAAQvB,EAAO,KACfwB,EAAQvB,EAAO,KACfoE,EAASrE,EAAO,UAAU,EAC1BsE,EAActE,IAAWC,EACzBqB,EAAS,IAAI,MAAM0C,CAAK,EAC1BxJ,EAAG2E,EAAMsC,EACb,IAAKjH,EAAI,EAAG2E,EAAO6E,EAAOxJ,EAAI2E,EAAM,EAAE3E,EACpCiH,EAAQjH,EAAIuJ,EACZzC,EAAO9G,CAAC,EAAI,CACV,CAAC+G,CAAK,EAAG+C,GAAetE,EAAO,MAAMqE,EAAO5C,CAAK,EAAGA,CAAK,EACzD,CAACD,CAAK,EAAGvB,EAAO,MAAMH,EAAK2B,CAAK,EAAGA,CAAK,CAC1C,EAEF,OAAOH,CACT,CACA,eAAevB,EAAMD,EAAMiE,EAAOC,EAAO,CACvC,GAAM,CACJ,OAAAzF,EACA,OAAAC,CACF,EAAIuB,EACEuB,EAAS,IAAI,MAAM0C,CAAK,EAC1BxJ,EAAG2E,EAAMsC,EAAO/G,EACpB,IAAKF,EAAI,EAAG2E,EAAO6E,EAAOxJ,EAAI2E,EAAM,EAAE3E,EACpCiH,EAAQjH,EAAIuJ,EACZrJ,EAAOoF,EAAK2B,CAAK,EACjBH,EAAO9G,CAAC,EAAI,CACV,EAAG+D,EAAO,MAAM7D,EAAK,CAAC,EAAG+G,CAAK,EAC9B,EAAGjD,EAAO,MAAM9D,EAAK,CAAC,EAAG+G,CAAK,CAChC,EAEF,OAAOH,CACT,CACA,gBAAgBvB,EAAMD,EAAMiE,EAAOC,EAAO,CACxC,GAAM,CACJ,OAAAzF,EACA,OAAAC,CACF,EAAIuB,EACE,CACJ,SAAAwE,EAAW,IACX,SAAAC,EAAW,GACb,EAAI,KAAK,SACHlD,EAAS,IAAI,MAAM0C,CAAK,EAC1BxJ,EAAG2E,EAAMsC,EAAO/G,EACpB,IAAKF,EAAI,EAAG2E,EAAO6E,EAAOxJ,EAAI2E,EAAM,EAAE3E,EACpCiH,EAAQjH,EAAIuJ,EACZrJ,EAAOoF,EAAK2B,CAAK,EACjBH,EAAO9G,CAAC,EAAI,CACV,EAAG+D,EAAO,MAAMkG,GAAiB/J,EAAM6J,CAAQ,EAAG9C,CAAK,EACvD,EAAGjD,EAAO,MAAMiG,GAAiB/J,EAAM8J,CAAQ,EAAG/C,CAAK,CACzD,EAEF,OAAOH,CACT,CACA,UAAUG,EAAO,CACf,OAAO,KAAK,YAAY,QAAQA,CAAK,CACvC,CACA,eAAeA,EAAO,CACpB,OAAO,KAAK,YAAY,KAAKA,CAAK,CACpC,CACA,WAAWzD,EAAOsD,EAAQgB,EAAM,CAC9B,IAAMxI,EAAQ,KAAK,MACbiG,EAAO,KAAK,YACZrC,EAAQ4D,EAAOtD,EAAM,IAAI,EACzBqB,EAAQ,CACZ,KAAML,GAAwBlF,EAAO,EAAI,EACzC,OAAQwH,EAAO,QAAQtD,EAAM,IAAI,EAAE,aACrC,EACA,OAAOoB,GAAWC,EAAO3B,EAAOqC,EAAK,MAAO,CAC1C,KAAAuC,CACF,CAAC,CACH,CACA,sBAAsBoC,EAAO1G,EAAOsD,EAAQjC,EAAO,CACjD,IAAMsF,EAAcrD,EAAOtD,EAAM,IAAI,EACjCN,EAAQiH,IAAgB,KAAO,IAAMA,EACnCzH,EAASmC,GAASiC,EAAO,QAAQtD,EAAM,IAAI,EAC7CqB,GAASnC,IACXmC,EAAM,OAASnC,EACfQ,EAAQ0B,GAAWC,EAAOsF,EAAa,KAAK,YAAY,KAAK,GAE/DD,EAAM,IAAM,KAAK,IAAIA,EAAM,IAAKhH,CAAK,EACrCgH,EAAM,IAAM,KAAK,IAAIA,EAAM,IAAKhH,CAAK,CACvC,CACA,UAAUM,EAAO2E,EAAU,CACzB,IAAM5C,EAAO,KAAK,YACZ6E,EAAU7E,EAAK,QACfmE,EAASnE,EAAK,SAAW/B,IAAU+B,EAAK,OACxCZ,EAAOyF,EAAQ,OACfC,EAAa,KAAK,eAAe7G,CAAK,EACtCqB,EAAQqD,GAAYC,EAAU5C,EAAM,KAAK,KAAK,EAC9C2E,EAAQ,CACZ,IAAK,OAAO,kBACZ,IAAK,OAAO,iBACd,EACM,CACJ,IAAKI,EACL,IAAKC,CACP,EAAIrE,GAAcmE,CAAU,EACxBrK,EAAG8G,EACP,SAAS0D,GAAQ,CACf1D,EAASsD,EAAQpK,CAAC,EAClB,IAAMiF,EAAa6B,EAAOuD,EAAW,IAAI,EACzC,MAAO,CAAClF,EAAe2B,EAAOtD,EAAM,IAAI,CAAC,GAAK8G,EAAWrF,GAAcsF,EAAWtF,CACpF,CACA,IAAKjF,EAAI,EAAGA,EAAI2E,GACV,GAAA6F,EAAM,IAGV,KAAK,sBAAsBN,EAAO1G,EAAOsD,EAAQjC,CAAK,EAClD6E,IALgB,EAAE1J,EACtB,CAQF,GAAI0J,GACF,IAAK1J,EAAI2E,EAAO,EAAG3E,GAAK,EAAG,EAAEA,EAC3B,GAAI,CAAAwK,EAAM,EAGV,MAAK,sBAAsBN,EAAO1G,EAAOsD,EAAQjC,CAAK,EACtD,OAGJ,OAAOqF,CACT,CACA,mBAAmB1G,EAAO,CACxB,IAAMsD,EAAS,KAAK,YAAY,QAC1BpE,EAAS,CAAC,EACZ1C,EAAG2E,EAAMzB,EACb,IAAKlD,EAAI,EAAG2E,EAAOmC,EAAO,OAAQ9G,EAAI2E,EAAM,EAAE3E,EAC5CkD,EAAQ4D,EAAO9G,CAAC,EAAEwD,EAAM,IAAI,EACxB2B,EAAejC,CAAK,GACtBR,EAAO,KAAKQ,CAAK,EAGrB,OAAOR,CACT,CACA,gBAAiB,CACf,MAAO,EACT,CACA,iBAAiBuE,EAAO,CACtB,IAAM1B,EAAO,KAAK,YACZC,EAASD,EAAK,OACdE,EAASF,EAAK,OACduB,EAAS,KAAK,UAAUG,CAAK,EACnC,MAAO,CACL,MAAOzB,EAAS,GAAKA,EAAO,iBAAiBsB,EAAOtB,EAAO,IAAI,CAAC,EAAI,GACpE,MAAOC,EAAS,GAAKA,EAAO,iBAAiBqB,EAAOrB,EAAO,IAAI,CAAC,EAAI,EACtE,CACF,CACA,QAAQqC,EAAM,CACZ,IAAMvC,EAAO,KAAK,YAClB,KAAK,OAAOuC,GAAQ,SAAS,EAC7BvC,EAAK,MAAQpB,GAAOqE,EAAe,KAAK,QAAQ,KAAM1E,GAAYyB,EAAK,OAAQA,EAAK,OAAQ,KAAK,eAAe,CAAC,CAAC,CAAC,CACrH,CACA,OAAOuC,EAAM,CAAC,CACd,MAAO,CACL,IAAM2C,EAAM,KAAK,KACXnL,EAAQ,KAAK,MACbiG,EAAO,KAAK,YACZmF,EAAWnF,EAAK,MAAQ,CAAC,EACzBoF,EAAOrL,EAAM,UACbsL,EAAS,CAAC,EACVrB,EAAQ,KAAK,YAAc,EAC3BC,EAAQ,KAAK,YAAckB,EAAS,OAASnB,EAC7CsB,EAA0B,KAAK,QAAQ,wBACzC7K,EAIJ,IAHIuF,EAAK,SACPA,EAAK,QAAQ,KAAKkF,EAAKE,EAAMpB,EAAOC,CAAK,EAEtCxJ,EAAIuJ,EAAOvJ,EAAIuJ,EAAQC,EAAO,EAAExJ,EAAG,CACtC,IAAM2H,EAAU+C,EAAS1K,CAAC,EACtB2H,EAAQ,SAGRA,EAAQ,QAAUkD,EACpBD,EAAO,KAAKjD,CAAO,EAEnBA,EAAQ,KAAK8C,EAAKE,CAAI,EAE1B,CACA,IAAK3K,EAAI,EAAGA,EAAI4K,EAAO,OAAQ,EAAE5K,EAC/B4K,EAAO5K,CAAC,EAAE,KAAKyK,EAAKE,CAAI,CAE5B,CACA,SAAS1D,EAAO2D,EAAQ,CACtB,IAAM9C,EAAO8C,EAAS,SAAW,UACjC,OAAO3D,IAAU,QAAa,KAAK,YAAY,QAAU,KAAK,6BAA6Ba,CAAI,EAAI,KAAK,0BAA0Bb,GAAS,EAAGa,CAAI,CACpJ,CACA,WAAWb,EAAO2D,EAAQ9C,EAAM,CAC9B,IAAMO,EAAU,KAAK,WAAW,EAC5ByC,EACJ,GAAI7D,GAAS,GAAKA,EAAQ,KAAK,YAAY,KAAK,OAAQ,CACtD,IAAMU,EAAU,KAAK,YAAY,KAAKV,CAAK,EAC3C6D,EAAUnD,EAAQ,WAAaA,EAAQ,SAAWD,GAAkB,KAAK,WAAW,EAAGT,EAAOU,CAAO,GACrGmD,EAAQ,OAAS,KAAK,UAAU7D,CAAK,EACrC6D,EAAQ,IAAMzC,EAAQ,KAAKpB,CAAK,EAChC6D,EAAQ,MAAQA,EAAQ,UAAY7D,CACtC,MACE6D,EAAU,KAAK,WAAa,KAAK,SAAWvD,GAAqB,KAAK,MAAM,WAAW,EAAG,KAAK,KAAK,GACpGuD,EAAQ,QAAUzC,EAClByC,EAAQ,MAAQA,EAAQ,aAAe,KAAK,MAE9C,OAAAA,EAAQ,OAAS,CAAC,CAACF,EACnBE,EAAQ,KAAOhD,EACRgD,CACT,CACA,6BAA6BhD,EAAM,CACjC,OAAO,KAAK,uBAAuB,KAAK,mBAAmB,GAAIA,CAAI,CACrE,CACA,0BAA0Bb,EAAOa,EAAM,CACrC,OAAO,KAAK,uBAAuB,KAAK,gBAAgB,GAAIA,EAAMb,CAAK,CACzE,CACA,uBAAuB8D,EAAajD,EAAO,UAAWb,EAAO,CAC3D,IAAM2D,EAAS9C,IAAS,SAClBkD,EAAQ,KAAK,gBACbC,EAAWF,EAAc,IAAMjD,EAC/BE,EAASgD,EAAMC,CAAQ,EACvBC,EAAU,KAAK,qBAAuBC,GAAQlE,CAAK,EACzD,GAAIe,EACF,OAAOD,GAAiBC,EAAQkD,CAAO,EAEzC,IAAMhJ,EAAS,KAAK,MAAM,OACpBmH,EAAYnH,EAAO,wBAAwB,KAAK,MAAO6I,CAAW,EAClEK,EAAWR,EAAS,CAAC,GAAGG,CAAW,QAAS,QAASA,EAAa,EAAE,EAAI,CAACA,EAAa,EAAE,EACxFzB,EAASpH,EAAO,gBAAgB,KAAK,WAAW,EAAGmH,CAAS,EAC5DgC,EAAQ,OAAO,KAAKhJ,EAAS,SAAS0I,CAAW,CAAC,EAClDD,EAAU,IAAM,KAAK,WAAW7D,EAAO2D,EAAQ9C,CAAI,EACnDpF,EAASR,EAAO,oBAAoBoH,EAAQ+B,EAAOP,EAASM,CAAQ,EAC1E,OAAI1I,EAAO,UACTA,EAAO,QAAUwI,EACjBF,EAAMC,CAAQ,EAAI,OAAO,OAAOlD,GAAiBrF,EAAQwI,CAAO,CAAC,GAE5DxI,CACT,CACA,mBAAmBuE,EAAOqE,EAAYV,EAAQ,CAC5C,IAAMtL,EAAQ,KAAK,MACb0L,EAAQ,KAAK,gBACbC,EAAW,aAAaK,CAAU,GAClCtD,EAASgD,EAAMC,CAAQ,EAC7B,GAAIjD,EACF,OAAOA,EAET,IAAIpF,EACJ,GAAItD,EAAM,QAAQ,YAAc,GAAO,CACrC,IAAM4C,EAAS,KAAK,MAAM,OACpBmH,EAAYnH,EAAO,0BAA0B,KAAK,MAAOoJ,CAAU,EACnEhC,EAASpH,EAAO,gBAAgB,KAAK,WAAW,EAAGmH,CAAS,EAClEzG,EAAUV,EAAO,eAAeoH,EAAQ,KAAK,WAAWrC,EAAO2D,EAAQU,CAAU,CAAC,CACpF,CACA,IAAMxI,EAAa,IAAIb,GAAW3C,EAAOsD,GAAWA,EAAQ,UAAU,EACtE,OAAIA,GAAWA,EAAQ,aACrBoI,EAAMC,CAAQ,EAAI,OAAO,OAAOnI,CAAU,GAErCA,CACT,CACA,iBAAiBF,EAAS,CACxB,GAAKA,EAAQ,QAGb,OAAO,KAAK,iBAAmB,KAAK,eAAiB,OAAO,OAAO,CAAC,EAAGA,CAAO,EAChF,CACA,eAAekF,EAAMyD,EAAe,CAClC,MAAO,CAACA,GAAiB1D,GAAmBC,CAAI,GAAK,KAAK,MAAM,mBAClE,CACA,kBAAkByB,EAAOzB,EAAM,CAC7B,IAAM0D,EAAY,KAAK,0BAA0BjC,EAAOzB,CAAI,EACtD2D,EAA0B,KAAK,eAC/BF,EAAgB,KAAK,iBAAiBC,CAAS,EAC/CE,EAAiB,KAAK,eAAe5D,EAAMyD,CAAa,GAAKA,IAAkBE,EACrF,YAAK,oBAAoBF,EAAezD,EAAM0D,CAAS,EAChD,CACL,cAAAD,EACA,eAAAG,CACF,CACF,CACA,cAAc/D,EAASV,EAAO7D,EAAY0E,EAAM,CAC1CD,GAAmBC,CAAI,EACzB,OAAO,OAAOH,EAASvE,CAAU,EAEjC,KAAK,mBAAmB6D,EAAOa,CAAI,EAAE,OAAOH,EAASvE,CAAU,CAEnE,CACA,oBAAoBmI,EAAezD,EAAMnF,EAAY,CAC/C4I,GAAiB,CAAC1D,GAAmBC,CAAI,GAC3C,KAAK,mBAAmB,OAAWA,CAAI,EAAE,OAAOyD,EAAe5I,CAAU,CAE7E,CACA,UAAUgF,EAASV,EAAOa,EAAM8C,EAAQ,CACtCjD,EAAQ,OAASiD,EACjB,IAAMhI,EAAU,KAAK,SAASqE,EAAO2D,CAAM,EAC3C,KAAK,mBAAmB3D,EAAOa,EAAM8C,CAAM,EAAE,OAAOjD,EAAS,CAC3D,QAAS,CAACiD,GAAU,KAAK,iBAAiBhI,CAAO,GAAKA,CACxD,CAAC,CACH,CACA,iBAAiB+E,EAAS3C,EAAciC,EAAO,CAC7C,KAAK,UAAUU,EAASV,EAAO,SAAU,EAAK,CAChD,CACA,cAAcU,EAAS3C,EAAciC,EAAO,CAC1C,KAAK,UAAUU,EAASV,EAAO,SAAU,EAAI,CAC/C,CACA,0BAA2B,CACzB,IAAMU,EAAU,KAAK,YAAY,QAC7BA,GACF,KAAK,UAAUA,EAAS,OAAW,SAAU,EAAK,CAEtD,CACA,uBAAwB,CACtB,IAAMA,EAAU,KAAK,YAAY,QAC7BA,GACF,KAAK,UAAUA,EAAS,OAAW,SAAU,EAAI,CAErD,CACA,gBAAgBuB,EAAkB,CAChC,IAAM5D,EAAO,KAAK,MACZoF,EAAW,KAAK,YAAY,KAClC,OAAW,CAAC1I,EAAQ2J,EAAMC,CAAI,IAAK,KAAK,UACtC,KAAK5J,CAAM,EAAE2J,EAAMC,CAAI,EAEzB,KAAK,UAAY,CAAC,EAClB,IAAMC,EAAUnB,EAAS,OACnBoB,EAAUxG,EAAK,OACfkE,EAAQ,KAAK,IAAIsC,EAASD,CAAO,EACnCrC,GACF,KAAK,MAAM,EAAGA,CAAK,EAEjBsC,EAAUD,EACZ,KAAK,gBAAgBA,EAASC,EAAUD,EAAS3C,CAAgB,EACxD4C,EAAUD,GACnB,KAAK,gBAAgBC,EAASD,EAAUC,CAAO,CAEnD,CACA,gBAAgBvC,EAAOC,EAAON,EAAmB,GAAM,CACrD,IAAM3D,EAAO,KAAK,YACZD,EAAOC,EAAK,KACZwG,EAAMxC,EAAQC,EAChBxJ,EACEgM,EAAOC,GAAO,CAElB,IADAA,EAAI,QAAUzC,EACTxJ,EAAIiM,EAAI,OAAS,EAAGjM,GAAK+L,EAAK/L,IACjCiM,EAAIjM,CAAC,EAAIiM,EAAIjM,EAAIwJ,CAAK,CAE1B,EAEA,IADAwC,EAAK1G,CAAI,EACJtF,EAAIuJ,EAAOvJ,EAAI+L,EAAK,EAAE/L,EACzBsF,EAAKtF,CAAC,EAAI,IAAI,KAAK,gBAEjB,KAAK,UACPgM,EAAKzG,EAAK,OAAO,EAEnB,KAAK,MAAMgE,EAAOC,CAAK,EACnBN,GACF,KAAK,eAAe5D,EAAMiE,EAAOC,EAAO,OAAO,CAEnD,CACA,eAAe7B,EAAS4B,EAAOC,EAAO1B,EAAM,CAAC,CAC7C,gBAAgByB,EAAOC,EAAO,CAC5B,IAAMjE,EAAO,KAAK,YAClB,GAAI,KAAK,SAAU,CACjB,IAAM2G,EAAU3G,EAAK,QAAQ,OAAOgE,EAAOC,CAAK,EAC5CjE,EAAK,UACPqC,GAAYrC,EAAM2G,CAAO,CAE7B,CACA3G,EAAK,KAAK,OAAOgE,EAAOC,CAAK,CAC/B,CACA,MAAM2C,EAAM,CACV,GAAI,KAAK,SACP,KAAK,UAAU,KAAKA,CAAI,MACnB,CACL,GAAM,CAACnK,EAAQ2J,EAAMC,CAAI,EAAIO,EAC7B,KAAKnK,CAAM,EAAE2J,EAAMC,CAAI,CACzB,CACA,KAAK,MAAM,aAAa,KAAK,CAAC,KAAK,MAAO,GAAGO,CAAI,CAAC,CACpD,CACA,aAAc,CACZ,IAAM3C,EAAQ,UAAU,OACxB,KAAK,MAAM,CAAC,kBAAmB,KAAK,WAAW,EAAE,KAAK,OAASA,EAAOA,CAAK,CAAC,CAC9E,CACA,YAAa,CACX,KAAK,MAAM,CAAC,kBAAmB,KAAK,YAAY,KAAK,OAAS,EAAG,CAAC,CAAC,CACrE,CACA,cAAe,CACb,KAAK,MAAM,CAAC,kBAAmB,EAAG,CAAC,CAAC,CACtC,CACA,cAAcD,EAAOC,EAAO,CACtBA,GACF,KAAK,MAAM,CAAC,kBAAmBD,EAAOC,CAAK,CAAC,EAE9C,IAAM4C,EAAW,UAAU,OAAS,EAChCA,GACF,KAAK,MAAM,CAAC,kBAAmB7C,EAAO6C,CAAQ,CAAC,CAEnD,CACA,gBAAiB,CACf,KAAK,MAAM,CAAC,kBAAmB,EAAG,UAAU,MAAM,CAAC,CACrD,CACF,CACA,OAAOhE,CACT,GAAG,EACH,SAASiE,GAAkB7I,EAAO/D,EAAM,CACtC,GAAI,CAAC+D,EAAM,OAAO,KAAM,CACtB,IAAM8I,EAAe9I,EAAM,wBAAwB/D,CAAI,EACnDiD,EAAS,CAAC,EACd,QAAS1C,EAAI,EAAG2E,EAAO2H,EAAa,OAAQtM,EAAI2E,EAAM3E,IACpD0C,EAASA,EAAO,OAAO4J,EAAatM,CAAC,EAAE,WAAW,mBAAmBwD,CAAK,CAAC,EAE7EA,EAAM,OAAO,KAAO+I,GAAa7J,EAAO,KAAK,CAAC8J,EAAGlI,IAAMkI,EAAIlI,CAAC,CAAC,CAC/D,CACA,OAAOd,EAAM,OAAO,IACtB,CACA,SAASiJ,GAAqBlH,EAAM,CAClC,IAAM/B,EAAQ+B,EAAK,OACb7C,EAAS2J,GAAkB7I,EAAO+B,EAAK,IAAI,EAC7C3B,EAAMJ,EAAM,QACZxD,EAAG2E,EAAM+H,EAAM/C,EACbgD,EAAmB,IAAM,CACzBD,IAAS,OAASA,IAAS,SAG3BvB,GAAQxB,CAAI,IACd/F,EAAM,KAAK,IAAIA,EAAK,KAAK,IAAI8I,EAAO/C,CAAI,GAAK/F,CAAG,GAElD+F,EAAO+C,EACT,EACA,IAAK1M,EAAI,EAAG2E,EAAOjC,EAAO,OAAQ1C,EAAI2E,EAAM,EAAE3E,EAC5C0M,EAAOlJ,EAAM,iBAAiBd,EAAO1C,CAAC,CAAC,EACvC2M,EAAiB,EAGnB,IADAhD,EAAO,OACF3J,EAAI,EAAG2E,EAAOnB,EAAM,MAAM,OAAQxD,EAAI2E,EAAM,EAAE3E,EACjD0M,EAAOlJ,EAAM,gBAAgBxD,CAAC,EAC9B2M,EAAiB,EAEnB,OAAO/I,CACT,CACA,SAASgJ,GAAyB3F,EAAO4F,EAAOjK,EAASkK,EAAY,CACnE,IAAMC,EAAYnK,EAAQ,aACtBoK,EAAMC,EACV,OAAIC,EAAcH,CAAS,GACzBC,EAAOH,EAAM,IAAMjK,EAAQ,mBAC3BqK,EAAQrK,EAAQ,gBAEhBoK,EAAOD,EAAYD,EACnBG,EAAQ,GAEH,CACL,MAAOD,EAAOF,EACd,MAAAG,EACA,MAAOJ,EAAM,OAAO5F,CAAK,EAAI+F,EAAO,CACtC,CACF,CACA,SAASG,GAA0BlG,EAAO4F,EAAOjK,EAASkK,EAAY,CACpE,IAAMM,EAASP,EAAM,OACfH,EAAOU,EAAOnG,CAAK,EACrB0C,EAAO1C,EAAQ,EAAImG,EAAOnG,EAAQ,CAAC,EAAI,KACvCoG,EAAOpG,EAAQmG,EAAO,OAAS,EAAIA,EAAOnG,EAAQ,CAAC,EAAI,KACrDqG,EAAU1K,EAAQ,mBACpB+G,IAAS,OACXA,EAAO+C,GAAQW,IAAS,KAAOR,EAAM,IAAMA,EAAM,MAAQQ,EAAOX,IAE9DW,IAAS,OACXA,EAAOX,EAAOA,EAAO/C,GAEvB,IAAMJ,EAAQmD,GAAQA,EAAO,KAAK,IAAI/C,EAAM0D,CAAI,GAAK,EAAIC,EAEzD,MAAO,CACL,MAFW,KAAK,IAAID,EAAO1D,CAAI,EAAI,EAAI2D,EAEzBR,EACd,MAAOlK,EAAQ,cACf,MAAA2G,CACF,CACF,CACA,SAASgE,GAAcC,EAAOtN,EAAMuF,EAAQzF,EAAG,CAC7C,IAAMyN,EAAahI,EAAO,MAAM+H,EAAM,CAAC,EAAGxN,CAAC,EACrC0N,EAAWjI,EAAO,MAAM+H,EAAM,CAAC,EAAGxN,CAAC,EACnC4D,EAAM,KAAK,IAAI6J,EAAYC,CAAQ,EACnC7J,EAAM,KAAK,IAAI4J,EAAYC,CAAQ,EACrCC,EAAW/J,EACXgK,EAAS/J,EACT,KAAK,IAAID,CAAG,EAAI,KAAK,IAAIC,CAAG,IAC9B8J,EAAW9J,EACX+J,EAAShK,GAEX1D,EAAKuF,EAAO,IAAI,EAAImI,EACpB1N,EAAK,QAAU,CACb,SAAAyN,EACA,OAAAC,EACA,MAAOH,EACP,IAAKC,EACL,IAAA9J,EACA,IAAAC,CACF,CACF,CACA,SAASgK,GAAWL,EAAOtN,EAAMuF,EAAQzF,EAAG,CAC1C,OAAIyC,EAAQ+K,CAAK,EACfD,GAAcC,EAAOtN,EAAMuF,EAAQzF,CAAC,EAEpCE,EAAKuF,EAAO,IAAI,EAAIA,EAAO,MAAM+H,EAAOxN,CAAC,EAEpCE,CACT,CACA,SAAS4N,GAAsBvI,EAAMD,EAAMiE,EAAOC,EAAO,CACvD,IAAMhE,EAASD,EAAK,OACdE,EAASF,EAAK,OACdsE,EAASrE,EAAO,UAAU,EAC1BsE,EAActE,IAAWC,EACzBqB,EAAS,CAAC,EACZ9G,EAAG2E,EAAMzE,EAAMsN,EACnB,IAAKxN,EAAIuJ,EAAO5E,EAAO4E,EAAQC,EAAOxJ,EAAI2E,EAAM,EAAE3E,EAChDwN,EAAQlI,EAAKtF,CAAC,EACdE,EAAO,CAAC,EACRA,EAAKsF,EAAO,IAAI,EAAIsE,GAAetE,EAAO,MAAMqE,EAAO7J,CAAC,EAAGA,CAAC,EAC5D8G,EAAO,KAAK+G,GAAWL,EAAOtN,EAAMuF,EAAQzF,CAAC,CAAC,EAEhD,OAAO8G,CACT,CACA,SAASiH,GAAWC,EAAQ,CAC1B,OAAOA,GAAUA,EAAO,WAAa,QAAaA,EAAO,SAAW,MACtE,CACA,SAASC,GAAQjB,EAAMvH,EAAQyI,EAAY,CACzC,OAAIlB,IAAS,EACJ5H,GAAK4H,CAAI,GAEVvH,EAAO,aAAa,EAAI,EAAI,KAAOA,EAAO,KAAOyI,EAAa,EAAI,GAC5E,CACA,SAASC,GAAY/K,EAAY,CAC/B,IAAIO,EAAS4F,EAAOwC,EAAKqC,EAAKC,EAC9B,OAAIjL,EAAW,YACbO,EAAUP,EAAW,KAAOA,EAAW,EACvCmG,EAAQ,OACRwC,EAAM,UAENpI,EAAUP,EAAW,KAAOA,EAAW,EACvCmG,EAAQ,SACRwC,EAAM,OAEJpI,GACFyK,EAAM,MACNC,EAAS,UAETD,EAAM,QACNC,EAAS,OAEJ,CACL,MAAA9E,EACA,IAAAwC,EACA,QAAApI,EACA,IAAAyK,EACA,OAAAC,CACF,CACF,CACA,SAASC,GAAiBlL,EAAYR,EAASiC,EAAOoC,EAAO,CAC3D,IAAIsH,EAAO3L,EAAQ,cACbf,EAAM,CAAC,EACb,GAAI,CAAC0M,EAAM,CACTnL,EAAW,cAAgBvB,EAC3B,MACF,CACA,GAAI0M,IAAS,GAAM,CACjBnL,EAAW,cAAgB,CACzB,IAAK,GACL,MAAO,GACP,OAAQ,GACR,KAAM,EACR,EACA,MACF,CACA,GAAM,CACJ,MAAAmG,EACA,IAAAwC,EACA,QAAApI,EACA,IAAAyK,EACA,OAAAC,CACF,EAAIF,GAAY/K,CAAU,EACtBmL,IAAS,UAAY1J,IACvBzB,EAAW,mBAAqB,IAC3ByB,EAAM,MAAQ,KAAOoC,EACxBsH,EAAOH,GACGvJ,EAAM,SAAW,KAAOoC,EAClCsH,EAAOF,GAEPxM,EAAI2M,GAAUH,EAAQ9E,EAAOwC,EAAKpI,CAAO,CAAC,EAAI,GAC9C4K,EAAOH,IAGXvM,EAAI2M,GAAUD,EAAMhF,EAAOwC,EAAKpI,CAAO,CAAC,EAAI,GAC5CP,EAAW,cAAgBvB,CAC7B,CACA,SAAS2M,GAAUD,EAAM/B,EAAGlI,EAAGX,EAAS,CACtC,OAAIA,GACF4K,EAAOE,GAAKF,EAAM/B,EAAGlI,CAAC,EACtBiK,EAAOG,GAASH,EAAMjK,EAAGkI,CAAC,GAE1B+B,EAAOG,GAASH,EAAM/B,EAAGlI,CAAC,EAErBiK,CACT,CACA,SAASE,GAAKE,EAAMC,EAAIC,EAAI,CAC1B,OAAOF,IAASC,EAAKC,EAAKF,IAASE,EAAKD,EAAKD,CAC/C,CACA,SAASD,GAASI,EAAGvF,EAAOwC,EAAK,CAC/B,OAAO+C,IAAM,QAAUvF,EAAQuF,IAAM,MAAQ/C,EAAM+C,CACrD,CACA,SAASC,GAAiB3L,EAAY,CACpC,cAAA4L,CACF,EAAG/B,EAAO,CACR7J,EAAW,cAAgB4L,IAAkB,OAAS/B,IAAU,EAAI,IAAO,EAAI+B,CACjF,CACA,IAAIC,IAA8B,IAAM,CACtC,MAAMA,UAAsB7G,EAAkB,CAC5C,OAAO,GAAK,MACZ,OAAO,SAAW,CAChB,mBAAoB,GACpB,gBAAiB,MACjB,mBAAoB,GACpB,cAAe,GACf,QAAS,GACT,WAAY,CACV,QAAS,CACP,KAAM,SACN,WAAY,CAAC,IAAK,IAAK,OAAQ,QAAS,QAAQ,CAClD,CACF,CACF,EACA,OAAO,UAAY,CACjB,OAAQ,CACN,QAAS,CACP,KAAM,WACN,OAAQ,GACR,KAAM,CACJ,OAAQ,EACV,CACF,EACA,QAAS,CACP,KAAM,SACN,YAAa,EACf,CACF,CACF,EACA,mBAAmB7C,EAAMD,EAAMiE,EAAOC,EAAO,CAC3C,OAAOsE,GAAsBvI,EAAMD,EAAMiE,EAAOC,CAAK,CACvD,CACA,eAAejE,EAAMD,EAAMiE,EAAOC,EAAO,CACvC,OAAOsE,GAAsBvI,EAAMD,EAAMiE,EAAOC,CAAK,CACvD,CACA,gBAAgBjE,EAAMD,EAAMiE,EAAOC,EAAO,CACxC,GAAM,CACJ,OAAAhE,EACA,OAAAC,CACF,EAAIF,EACE,CACJ,SAAAwE,EAAW,IACX,SAAAC,EAAW,GACb,EAAI,KAAK,SACHtE,EAAWF,EAAO,OAAS,IAAMuE,EAAWC,EAC5CrE,EAAWF,EAAO,OAAS,IAAMsE,EAAWC,EAC5ClD,EAAS,CAAC,EACZ9G,EAAG2E,EAAMzE,EAAMgP,EACnB,IAAKlP,EAAIuJ,EAAO5E,EAAO4E,EAAQC,EAAOxJ,EAAI2E,EAAM,EAAE3E,EAChDkP,EAAM5J,EAAKtF,CAAC,EACZE,EAAO,CAAC,EACRA,EAAKsF,EAAO,IAAI,EAAIA,EAAO,MAAMyE,GAAiBiF,EAAKxJ,CAAQ,EAAG1F,CAAC,EACnE8G,EAAO,KAAK+G,GAAW5D,GAAiBiF,EAAKvJ,CAAQ,EAAGzF,EAAMuF,EAAQzF,CAAC,CAAC,EAE1E,OAAO8G,CACT,CACA,sBAAsBoD,EAAO1G,EAAOsD,EAAQjC,EAAO,CACjD,MAAM,sBAAsBqF,EAAO1G,EAAOsD,EAAQjC,CAAK,EACvD,IAAMmJ,EAASlH,EAAO,QAClBkH,GAAUxK,IAAU,KAAK,YAAY,SACvC0G,EAAM,IAAM,KAAK,IAAIA,EAAM,IAAK8D,EAAO,GAAG,EAC1C9D,EAAM,IAAM,KAAK,IAAIA,EAAM,IAAK8D,EAAO,GAAG,EAE9C,CACA,gBAAiB,CACf,MAAO,EACT,CACA,iBAAiB/G,EAAO,CACtB,IAAM1B,EAAO,KAAK,YACZ,CACJ,OAAAC,EACA,OAAAC,CACF,EAAIF,EACEuB,EAAS,KAAK,UAAUG,CAAK,EAC7B+G,EAASlH,EAAO,QAChB5D,EAAQ6K,GAAWC,CAAM,EAAI,IAAMA,EAAO,MAAQ,KAAOA,EAAO,IAAM,IAAM,GAAKvI,EAAO,iBAAiBqB,EAAOrB,EAAO,IAAI,CAAC,EAClI,MAAO,CACL,MAAO,GAAKD,EAAO,iBAAiBsB,EAAOtB,EAAO,IAAI,CAAC,EACvD,MAAAtC,CACF,CACF,CACA,YAAa,CACX,KAAK,oBAAsB,GAC3B,MAAM,WAAW,EACjB,IAAMqC,EAAO,KAAK,YAClBA,EAAK,MAAQ,KAAK,WAAW,EAAE,KACjC,CACA,OAAOuC,EAAM,CACX,IAAMvC,EAAO,KAAK,YAClB,KAAK,eAAeA,EAAK,KAAM,EAAGA,EAAK,KAAK,OAAQuC,CAAI,CAC1D,CACA,eAAeqH,EAAM5F,EAAOC,EAAO1B,EAAM,CACvC,IAAMsH,EAAQtH,IAAS,QACjB,CACJ,MAAAb,EACA,YAAa,CACX,OAAAxB,CACF,CACF,EAAI,KACE4J,EAAO5J,EAAO,aAAa,EAC3B6J,EAAa7J,EAAO,aAAa,EACjCoH,EAAQ,KAAK,UAAU,EACvB,CACJ,cAAAtB,EACA,eAAAG,CACF,EAAI,KAAK,kBAAkBnC,EAAOzB,CAAI,EACtC,QAAS9H,EAAIuJ,EAAOvJ,EAAIuJ,EAAQC,EAAOxJ,IAAK,CAC1C,IAAM8G,EAAS,KAAK,UAAU9G,CAAC,EACzBuP,EAAUH,GAASlC,EAAcpG,EAAOrB,EAAO,IAAI,CAAC,EAAI,CAC5D,KAAA4J,EACA,KAAMA,CACR,EAAI,KAAK,yBAAyBrP,CAAC,EAC7BwP,EAAU,KAAK,yBAAyBxP,EAAG6M,CAAK,EAChDhI,GAASiC,EAAO,SAAW,CAAC,GAAGrB,EAAO,IAAI,EAC1CrC,EAAa,CACjB,WAAAkM,EACA,KAAMC,EAAQ,KACd,mBAAoB,CAAC1K,GAASkJ,GAAWjH,EAAO,OAAO,GAAKG,IAAUpC,EAAM,MAAQoC,IAAUpC,EAAM,QACpG,EAAGyK,EAAaC,EAAQ,KAAOC,EAAQ,OACvC,EAAGF,EAAaE,EAAQ,OAASD,EAAQ,KACzC,OAAQD,EAAaE,EAAQ,KAAO,KAAK,IAAID,EAAQ,IAAI,EACzD,MAAOD,EAAa,KAAK,IAAIC,EAAQ,IAAI,EAAIC,EAAQ,IACvD,EACI9D,IACFtI,EAAW,QAAUmI,GAAiB,KAAK,0BAA0BvL,EAAGmP,EAAKnP,CAAC,EAAE,OAAS,SAAW8H,CAAI,GAE1G,IAAMlF,EAAUQ,EAAW,SAAW+L,EAAKnP,CAAC,EAAE,QAC9CsO,GAAiBlL,EAAYR,EAASiC,EAAOoC,CAAK,EAClD8H,GAAiB3L,EAAYR,EAASiK,EAAM,KAAK,EACjD,KAAK,cAAcsC,EAAKnP,CAAC,EAAGA,EAAGoD,EAAY0E,CAAI,CACjD,CACF,CACA,WAAW2H,EAAMC,EAAW,CAC1B,GAAM,CACJ,OAAAlK,CACF,EAAI,KAAK,YACHd,EAAWc,EAAO,wBAAwB,KAAK,KAAK,EAAE,OAAOD,GAAQA,EAAK,WAAW,QAAQ,OAAO,EACpGO,EAAUN,EAAO,QAAQ,QACzBc,EAAS,CAAC,EACVqJ,EAAgB,KAAK,YAAY,WAAW,UAAUD,CAAS,EAC/DE,EAAcD,GAAiBA,EAAcnK,EAAO,IAAI,EACxDqK,EAAWtK,GAAQ,CACvB,IAAMuB,EAASvB,EAAK,QAAQ,KAAKrF,GAAQA,EAAKsF,EAAO,IAAI,IAAMoK,CAAW,EACpEE,EAAMhJ,GAAUA,EAAOvB,EAAK,OAAO,IAAI,EAC7C,GAAI2H,EAAc4C,CAAG,GAAK,MAAMA,CAAG,EACjC,MAAO,EAEX,EACA,QAAWvK,KAAQb,EACjB,GAAI,EAAAgL,IAAc,QAAaG,EAAStK,CAAI,MAGxCO,IAAY,IAASQ,EAAO,QAAQf,EAAK,KAAK,IAAM,IAAMO,IAAY,QAAaP,EAAK,QAAU,SACpGe,EAAO,KAAKf,EAAK,KAAK,EAEpBA,EAAK,QAAUkK,GACjB,MAGJ,OAAKnJ,EAAO,QACVA,EAAO,KAAK,MAAS,EAEhBA,CACT,CACA,eAAeW,EAAO,CACpB,OAAO,KAAK,WAAW,OAAWA,CAAK,EAAE,MAC3C,CACA,eAAgB,CACd,OAAO,KAAK,SAAS,EAAE,MACzB,CACA,6BAA8B,CAC5B,IAAMK,EAAS,KAAK,MAAM,OACpByI,EAAe,KAAK,MAAM,QAAQ,UACxC,OAAO,OAAO,KAAKzI,CAAM,EAAE,OAAO/E,GAAO+E,EAAO/E,CAAG,EAAE,OAASwN,CAAY,EAAE,MAAM,CACpF,CACA,UAAW,CACT,IAAM1I,EAAO,CAAC,EACR2I,EAAmB,KAAK,4BAA4B,EAC1D,QAAW3H,KAAW,KAAK,MAAM,KAAK,SACpChB,EAAKmB,EAAe,KAAK,MAAM,QAAQ,YAAc,IAAMH,EAAQ,QAAUA,EAAQ,QAAS2H,CAAgB,CAAC,EAAI,GAErH,OAAO,OAAO,KAAK3I,CAAI,CACzB,CACA,eAAerC,EAAciL,EAAMP,EAAW,CAC5C,IAAMpJ,EAAS,KAAK,WAAWtB,EAAc0K,CAAS,EAChDzI,EAAQgJ,IAAS,OAAY3J,EAAO,QAAQ2J,CAAI,EAAI,GAC1D,OAAOhJ,IAAU,GAAKX,EAAO,OAAS,EAAIW,CAC5C,CACA,WAAY,CACV,IAAMvD,EAAO,KAAK,QACZ6B,EAAO,KAAK,YACZC,EAASD,EAAK,OACd6H,EAAS,CAAC,EACZpN,EAAG2E,EACP,IAAK3E,EAAI,EAAG2E,EAAOY,EAAK,KAAK,OAAQvF,EAAI2E,EAAM,EAAE3E,EAC/CoN,EAAO,KAAK5H,EAAO,iBAAiB,KAAK,UAAUxF,CAAC,EAAEwF,EAAO,IAAI,EAAGxF,CAAC,CAAC,EAExE,IAAMkQ,EAAexM,EAAK,aAE1B,MAAO,CACL,IAFUwM,GAAgBzD,GAAqBlH,CAAI,EAGnD,OAAA6H,EACA,MAAO5H,EAAO,YACd,IAAKA,EAAO,UACZ,WAAY,KAAK,eAAe,EAChC,MAAOA,EACP,QAAS9B,EAAK,QACd,MAAOwM,EAAe,EAAIxM,EAAK,mBAAqBA,EAAK,aAC3D,CACF,CACA,yBAAyBuD,EAAO,CAC9B,GAAM,CACJ,YAAa,CACX,OAAAxB,EACA,SAAAgE,EACA,MAAOzE,CACT,EACA,QAAS,CACP,KAAMmL,EACN,aAAAC,CACF,CACF,EAAI,KACElC,EAAaiC,GAAa,EAC1BrJ,EAAS,KAAK,UAAUG,CAAK,EAC7B+G,EAASlH,EAAO,QAChBuJ,EAAWtC,GAAWC,CAAM,EAC9B9K,EAAQ4D,EAAOrB,EAAO,IAAI,EAC1B8D,EAAQ,EACR+G,EAAS7G,EAAW,KAAK,WAAWhE,EAAQqB,EAAQ2C,CAAQ,EAAIvG,EAChEqN,EAAMvD,EACNsD,IAAWpN,IACbqG,EAAQ+G,EAASpN,EACjBoN,EAASpN,GAEPmN,IACFnN,EAAQ8K,EAAO,SACfsC,EAAStC,EAAO,OAASA,EAAO,SAC5B9K,IAAU,GAAKkC,GAAKlC,CAAK,IAAMkC,GAAK4I,EAAO,MAAM,IACnDzE,EAAQ,GAEVA,GAASrG,GAEX,IAAMuK,EAAa,CAACP,EAAciD,CAAS,GAAK,CAACE,EAAWF,EAAY5G,EACpE8F,EAAO5J,EAAO,iBAAiBgI,CAAU,EAO7C,GANI,KAAK,MAAM,kBAAkBxG,CAAK,EACpCsJ,EAAO9K,EAAO,iBAAiB8D,EAAQ+G,CAAM,EAE7CC,EAAOlB,EAETrC,EAAOuD,EAAOlB,EACV,KAAK,IAAIrC,CAAI,EAAIoD,EAAc,CACjCpD,EAAOiB,GAAQjB,EAAMvH,EAAQyI,CAAU,EAAIkC,EACvClN,IAAUgL,IACZmB,GAAQrC,EAAO,GAEjB,IAAMwD,EAAa/K,EAAO,mBAAmB,CAAC,EACxCgL,EAAWhL,EAAO,mBAAmB,CAAC,EACtC7B,EAAM,KAAK,IAAI4M,EAAYC,CAAQ,EACnC5M,EAAM,KAAK,IAAI2M,EAAYC,CAAQ,EACzCpB,EAAO,KAAK,IAAI,KAAK,IAAIA,EAAMxL,CAAG,EAAGD,CAAG,EACxC2M,EAAOlB,EAAOrC,EACVvD,GAAY,CAAC4G,IACfvJ,EAAO,QAAQrB,EAAO,IAAI,EAAE,cAAcT,CAAY,EAAIS,EAAO,iBAAiB8K,CAAI,EAAI9K,EAAO,iBAAiB4J,CAAI,EAE1H,CACA,GAAIA,IAAS5J,EAAO,iBAAiByI,CAAU,EAAG,CAChD,IAAMwC,EAAWtL,GAAK4H,CAAI,EAAIvH,EAAO,qBAAqByI,CAAU,EAAI,EACxEmB,GAAQqB,EACR1D,GAAQ0D,CACV,CACA,MAAO,CACL,KAAA1D,EACA,KAAAqC,EACA,KAAAkB,EACA,OAAQA,EAAOvD,EAAO,CACxB,CACF,CACA,yBAAyB/F,EAAO4F,EAAO,CACrC,IAAMrJ,EAAQqJ,EAAM,MACdjK,EAAU,KAAK,QACfiN,EAAWjN,EAAQ,SACnB+N,EAAkBnI,EAAe5F,EAAQ,gBAAiB,GAAQ,EACpEgO,EAAQ5D,EACN6D,EAAY,KAAK,cAAc,EACrC,GAAIhE,EAAM,QAAS,CACjB,IAAMC,EAAa+C,EAAW,KAAK,eAAe5I,CAAK,EAAI4F,EAAM,WAC3D3C,EAAQtH,EAAQ,eAAiB,OAASuK,GAA0BlG,EAAO4F,EAAOjK,EAASkK,EAAa+D,CAAS,EAAIjE,GAAyB3F,EAAO4F,EAAOjK,EAASkK,EAAa+D,CAAS,EAC3LC,EAAS,KAAK,MAAM,QAAQ,YAAc,IAAM,KAAK,WAAW,EAAE,QAAU,KAAK,WAAW,EAAE,QAC9FC,EAAa,KAAK,SAAS,EAAE,QAAQvI,EAAesI,EAAQ,KAAK,4BAA4B,CAAC,CAAC,EAC/FE,EAAa,KAAK,eAAe,KAAK,MAAO,KAAK,YAAY,MAAOnB,EAAW5I,EAAQ,MAAS,EAAI8J,EAC3GH,EAAS1G,EAAM,MAAQA,EAAM,MAAQ8G,EAAa9G,EAAM,MAAQ,EAChE8C,EAAO,KAAK,IAAI2D,EAAiBzG,EAAM,MAAQA,EAAM,KAAK,CAC5D,MACE0G,EAASpN,EAAM,iBAAiB,KAAK,UAAUyD,CAAK,EAAEzD,EAAM,IAAI,EAAGyD,CAAK,EACxE+F,EAAO,KAAK,IAAI2D,EAAiB9D,EAAM,IAAMA,EAAM,KAAK,EAE1D,MAAO,CACL,KAAM+D,EAAS5D,EAAO,EACtB,KAAM4D,EAAS5D,EAAO,EACtB,OAAA4D,EACA,KAAA5D,CACF,CACF,CACA,MAAO,CACL,IAAMzH,EAAO,KAAK,YACZE,EAASF,EAAK,OACd0L,EAAQ1L,EAAK,KACbZ,EAAOsM,EAAM,OACfjR,EAAI,EACR,KAAOA,EAAI2E,EAAM,EAAE3E,EACb,KAAK,UAAUA,CAAC,EAAEyF,EAAO,IAAI,IAAM,MAAQ,CAACwL,EAAMjR,CAAC,EAAE,QACvDiR,EAAMjR,CAAC,EAAE,KAAK,KAAK,IAAI,CAG7B,CACF,CACA,OAAOiP,CACT,GAAG,EACCiC,IAAiC,IAAM,CACzC,MAAMA,UAAyB9I,EAAkB,CAC/C,OAAO,GAAK,SACZ,OAAO,SAAW,CAChB,mBAAoB,GACpB,gBAAiB,QACjB,WAAY,CACV,QAAS,CACP,KAAM,SACN,WAAY,CAAC,IAAK,IAAK,cAAe,QAAQ,CAChD,CACF,CACF,EACA,OAAO,UAAY,CACjB,OAAQ,CACN,EAAG,CACD,KAAM,QACR,EACA,EAAG,CACD,KAAM,QACR,CACF,CACF,EACA,YAAa,CACX,KAAK,oBAAsB,GAC3B,MAAM,WAAW,CACnB,CACA,mBAAmB7C,EAAMD,EAAMiE,EAAOC,EAAO,CAC3C,IAAM1C,EAAS,MAAM,mBAAmBvB,EAAMD,EAAMiE,EAAOC,CAAK,EAChE,QAASxJ,EAAI,EAAGA,EAAI8G,EAAO,OAAQ9G,IACjC8G,EAAO9G,CAAC,EAAE,QAAU,KAAK,0BAA0BA,EAAIuJ,CAAK,EAAE,OAEhE,OAAOzC,CACT,CACA,eAAevB,EAAMD,EAAMiE,EAAOC,EAAO,CACvC,IAAM1C,EAAS,MAAM,eAAevB,EAAMD,EAAMiE,EAAOC,CAAK,EAC5D,QAASxJ,EAAI,EAAGA,EAAI8G,EAAO,OAAQ9G,IAAK,CACtC,IAAME,EAAOoF,EAAKiE,EAAQvJ,CAAC,EAC3B8G,EAAO9G,CAAC,EAAE,QAAUwI,EAAetI,EAAK,CAAC,EAAG,KAAK,0BAA0BF,EAAIuJ,CAAK,EAAE,MAAM,CAC9F,CACA,OAAOzC,CACT,CACA,gBAAgBvB,EAAMD,EAAMiE,EAAOC,EAAO,CACxC,IAAM1C,EAAS,MAAM,gBAAgBvB,EAAMD,EAAMiE,EAAOC,CAAK,EAC7D,QAASxJ,EAAI,EAAGA,EAAI8G,EAAO,OAAQ9G,IAAK,CACtC,IAAME,EAAOoF,EAAKiE,EAAQvJ,CAAC,EAC3B8G,EAAO9G,CAAC,EAAE,QAAUwI,EAAetI,GAAQA,EAAK,GAAK,CAACA,EAAK,EAAG,KAAK,0BAA0BF,EAAIuJ,CAAK,EAAE,MAAM,CAChH,CACA,OAAOzC,CACT,CACA,gBAAiB,CACf,IAAMxB,EAAO,KAAK,YAAY,KAC1BzB,EAAM,EACV,QAAS7D,EAAIsF,EAAK,OAAS,EAAGtF,GAAK,EAAG,EAAEA,EACtC6D,EAAM,KAAK,IAAIA,EAAKyB,EAAKtF,CAAC,EAAE,KAAK,KAAK,0BAA0BA,CAAC,CAAC,EAAI,CAAC,EAEzE,OAAO6D,EAAM,GAAKA,CACpB,CACA,iBAAiBoD,EAAO,CACtB,IAAM1B,EAAO,KAAK,YACZsE,EAAS,KAAK,MAAM,KAAK,QAAU,CAAC,EACpC,CACJ,OAAA9F,EACA,OAAAC,CACF,EAAIuB,EACEuB,EAAS,KAAK,UAAUG,CAAK,EAC7BhD,EAAIF,EAAO,iBAAiB+C,EAAO,CAAC,EACpC5C,EAAIF,EAAO,iBAAiB8C,EAAO,CAAC,EACpCzC,EAAIyC,EAAO,QACjB,MAAO,CACL,MAAO+C,EAAO5C,CAAK,GAAK,GACxB,MAAO,IAAMhD,EAAI,KAAOC,GAAKG,EAAI,KAAOA,EAAI,IAAM,GACpD,CACF,CACA,OAAOyD,EAAM,CACX,IAAMqJ,EAAS,KAAK,YAAY,KAChC,KAAK,eAAeA,EAAQ,EAAGA,EAAO,OAAQrJ,CAAI,CACpD,CACA,eAAeqJ,EAAQ5H,EAAOC,EAAO1B,EAAM,CACzC,IAAMsH,EAAQtH,IAAS,QACjB,CACJ,OAAAtC,EACA,OAAAC,CACF,EAAI,KAAK,YACH,CACJ,cAAA8F,EACA,eAAAG,CACF,EAAI,KAAK,kBAAkBnC,EAAOzB,CAAI,EAChCf,EAAQvB,EAAO,KACfwB,EAAQvB,EAAO,KACrB,QAASzF,EAAIuJ,EAAOvJ,EAAIuJ,EAAQC,EAAOxJ,IAAK,CAC1C,IAAMoR,EAAQD,EAAOnR,CAAC,EAChB8G,EAAS,CAACsI,GAAS,KAAK,UAAUpP,CAAC,EACnCoD,EAAa,CAAC,EACdiO,EAASjO,EAAW2D,CAAK,EAAIqI,EAAQ5J,EAAO,mBAAmB,EAAG,EAAIA,EAAO,iBAAiBsB,EAAOC,CAAK,CAAC,EAC3GuK,EAASlO,EAAW4D,CAAK,EAAIoI,EAAQ3J,EAAO,aAAa,EAAIA,EAAO,iBAAiBqB,EAAOE,CAAK,CAAC,EACxG5D,EAAW,KAAO,MAAMiO,CAAM,GAAK,MAAMC,CAAM,EAC3C5F,IACFtI,EAAW,QAAUmI,GAAiB,KAAK,0BAA0BvL,EAAGoR,EAAM,OAAS,SAAWtJ,CAAI,EAClGsH,IACFhM,EAAW,QAAQ,OAAS,IAGhC,KAAK,cAAcgO,EAAOpR,EAAGoD,EAAY0E,CAAI,CAC/C,CACF,CACA,0BAA0Bb,EAAOa,EAAM,CACrC,IAAMhB,EAAS,KAAK,UAAUG,CAAK,EAC/BvE,EAAS,MAAM,0BAA0BuE,EAAOa,CAAI,EACpDpF,EAAO,UACTA,EAAS,OAAO,OAAO,CAAC,EAAGA,EAAQ,CACjC,QAAS,EACX,CAAC,GAEH,IAAM6O,EAAS7O,EAAO,OACtB,OAAIoF,IAAS,WACXpF,EAAO,OAAS,GAElBA,EAAO,QAAU8F,EAAe1B,GAAUA,EAAO,QAASyK,CAAM,EACzD7O,CACT,CACF,CACA,OAAOwO,CACT,GAAG,EACH,SAASM,GAAkBC,EAAUC,EAAeC,EAAQ,CAC1D,IAAIC,EAAS,EACTC,EAAS,EACTC,EAAU,EACVC,EAAU,EACd,GAAIL,EAAgBM,EAAK,CACvB,IAAMC,EAAaR,EACbS,EAAWD,EAAaP,EACxBS,EAAS,KAAK,IAAIF,CAAU,EAC5BG,EAAS,KAAK,IAAIH,CAAU,EAC5BI,EAAO,KAAK,IAAIH,CAAQ,EACxBI,EAAO,KAAK,IAAIJ,CAAQ,EACxBK,EAAU,CAACC,EAAOhG,EAAGlI,IAAMmO,GAAcD,EAAOP,EAAYC,EAAU,EAAI,EAAI,EAAI,KAAK,IAAI1F,EAAGA,EAAImF,EAAQrN,EAAGA,EAAIqN,CAAM,EACvHe,EAAU,CAACF,EAAOhG,EAAGlI,IAAMmO,GAAcD,EAAOP,EAAYC,EAAU,EAAI,EAAI,GAAK,KAAK,IAAI1F,EAAGA,EAAImF,EAAQrN,EAAGA,EAAIqN,CAAM,EACxHgB,EAAOJ,EAAQ,EAAGJ,EAAQE,CAAI,EAC9BO,EAAOL,EAAQM,EAAST,EAAQE,CAAI,EACpCQ,EAAOJ,EAAQK,EAAIZ,EAAQE,CAAI,EAC/BW,EAAON,EAAQK,EAAKF,EAAST,EAAQE,CAAI,EAC/CV,GAAUe,EAAOG,GAAQ,EACzBjB,GAAUe,EAAOI,GAAQ,EACzBlB,EAAU,EAAEa,EAAOG,GAAQ,EAC3Bf,EAAU,EAAEa,EAAOI,GAAQ,CAC7B,CACA,MAAO,CACL,OAAApB,EACA,OAAAC,EACA,QAAAC,EACA,QAAAC,CACF,CACF,CACA,IAAIkB,IAAmC,IAAM,CAC3C,MAAMA,UAA2B7K,EAAkB,CACjD,OAAO,GAAK,WACZ,OAAO,SAAW,CAChB,mBAAoB,GACpB,gBAAiB,MACjB,UAAW,CACT,cAAe,GACf,aAAc,EAChB,EACA,WAAY,CACV,QAAS,CACP,KAAM,SACN,WAAY,CAAC,gBAAiB,WAAY,cAAe,cAAe,aAAc,IAAK,IAAK,SAAU,cAAe,SAAS,CACpI,CACF,EACA,OAAQ,MACR,SAAU,EACV,cAAe,IACf,OAAQ,OACR,QAAS,EACT,UAAW,GACb,EACA,OAAO,YAAc,CACnB,YAAa6H,GAAQA,IAAS,UAC9B,WAAYA,GAAQA,IAAS,WAAa,CAACA,EAAK,WAAW,YAAY,GAAK,CAACA,EAAK,WAAW,iBAAiB,CAChH,EACA,OAAO,UAAY,CACjB,YAAa,EACb,QAAS,CACP,OAAQ,CACN,OAAQ,CACN,eAAe3Q,EAAO,CACpB,IAAMgG,EAAOhG,EAAM,KACb,CACJ,OAAQ,CACN,WAAA4T,EACA,UAAAC,EACA,MAAApS,EACA,gBAAAqS,EACA,aAAAC,CACF,CACF,EAAI/T,EAAM,OAAO,QACjB,OAAIgG,EAAK,OAAO,QAAUA,EAAK,SAAS,OAC/BA,EAAK,OAAO,IAAI,CAACgO,EAAOtT,IAAM,CAEnC,IAAMuT,EADOjU,EAAM,eAAe,CAAC,EAChB,WAAW,SAASU,CAAC,EACxC,MAAO,CACL,KAAMsT,EACN,UAAWC,EAAM,gBACjB,UAAWxS,EACX,OAAQ,CAACzB,EAAM,kBAAkBU,CAAC,EAClC,SAAUuT,EAAM,WAChB,eAAgBA,EAAM,iBACtB,SAAUA,EAAM,gBAChB,UAAWA,EAAM,YACjB,YAAaA,EAAM,YACnB,UAAWJ,EACX,WAAYD,EACZ,aAAcE,IAAoBC,GAAgBE,EAAM,cACxD,MAAOvT,CACT,CACF,CAAC,EAEI,CAAC,CACV,CACF,EACA,QAAQwT,EAAGC,EAAYC,EAAQ,CAC7BA,EAAO,MAAM,qBAAqBD,EAAW,KAAK,EAClDC,EAAO,MAAM,OAAO,CACtB,CACF,CACF,CACF,EACA,YAAYpU,EAAO0F,EAAc,CAC/B,MAAM1F,EAAO0F,CAAY,EACzB,KAAK,oBAAsB,GAC3B,KAAK,YAAc,OACnB,KAAK,YAAc,OACnB,KAAK,QAAU,OACf,KAAK,QAAU,MACjB,CACA,YAAa,CAAC,CACd,MAAMuE,EAAOC,EAAO,CAClB,IAAMlE,EAAO,KAAK,WAAW,EAAE,KACzBC,EAAO,KAAK,YAClB,GAAI,KAAK,WAAa,GACpBA,EAAK,QAAUD,MACV,CACL,IAAIqO,EAAS3T,GAAK,CAACsF,EAAKtF,CAAC,EACzB,GAAImC,EAASmD,EAAKiE,CAAK,CAAC,EAAG,CACzB,GAAM,CACJ,IAAAhH,EAAM,OACR,EAAI,KAAK,SACToR,EAAS3T,GAAK,CAACiK,GAAiB3E,EAAKtF,CAAC,EAAGuC,CAAG,CAC9C,CACA,IAAIvC,EAAG2E,EACP,IAAK3E,EAAIuJ,EAAO5E,EAAO4E,EAAQC,EAAOxJ,EAAI2E,EAAM,EAAE3E,EAChDuF,EAAK,QAAQvF,CAAC,EAAI2T,EAAO3T,CAAC,CAE9B,CACF,CACA,cAAe,CACb,OAAO4T,GAAU,KAAK,QAAQ,SAAW,EAAE,CAC7C,CACA,mBAAoB,CAClB,OAAOA,GAAU,KAAK,QAAQ,aAAa,CAC7C,CACA,qBAAsB,CACpB,IAAIhQ,EAAMoO,EACNnO,EAAM,CAACmO,EACX,QAAShS,EAAI,EAAGA,EAAI,KAAK,MAAM,KAAK,SAAS,OAAQ,EAAEA,EACrD,GAAI,KAAK,MAAM,iBAAiBA,CAAC,GAAK,KAAK,MAAM,eAAeA,CAAC,EAAE,OAAS,KAAK,MAAO,CACtF,IAAM6G,EAAa,KAAK,MAAM,eAAe7G,CAAC,EAAE,WAC1CyR,EAAW5K,EAAW,aAAa,EACnC6K,EAAgB7K,EAAW,kBAAkB,EACnDjD,EAAM,KAAK,IAAIA,EAAK6N,CAAQ,EAC5B5N,EAAM,KAAK,IAAIA,EAAK4N,EAAWC,CAAa,CAC9C,CAEF,MAAO,CACL,SAAU9N,EACV,cAAeC,EAAMD,CACvB,CACF,CACA,OAAOkE,EAAM,CACX,IAAMxI,EAAQ,KAAK,MACb,CACJ,UAAAuU,CACF,EAAIvU,EACEiG,EAAO,KAAK,YACZuO,EAAOvO,EAAK,KACZwO,EAAU,KAAK,kBAAkB,EAAI,KAAK,aAAaD,CAAI,EAAI,KAAK,QAAQ,QAC5EE,EAAU,KAAK,KAAK,KAAK,IAAIH,EAAU,MAAOA,EAAU,MAAM,EAAIE,GAAW,EAAG,CAAC,EACjFpC,EAAS,KAAK,IAAIsC,GAAa,KAAK,QAAQ,OAAQD,CAAO,EAAG,CAAC,EAC/DE,EAAc,KAAK,eAAe,KAAK,KAAK,EAC5C,CACJ,cAAAxC,EACA,SAAAD,CACF,EAAI,KAAK,oBAAoB,EACvB,CACJ,OAAAG,EACA,OAAAC,EACA,QAAAC,EACA,QAAAC,CACF,EAAIP,GAAkBC,EAAUC,EAAeC,CAAM,EAC/CwC,GAAYN,EAAU,MAAQE,GAAWnC,EACzCwC,GAAaP,EAAU,OAASE,GAAWlC,EAC3CwC,EAAY,KAAK,IAAI,KAAK,IAAIF,EAAUC,CAAS,EAAI,EAAG,CAAC,EACzDE,EAAcC,GAAY,KAAK,QAAQ,OAAQF,CAAS,EACxDG,EAAc,KAAK,IAAIF,EAAc3C,EAAQ,CAAC,EAC9C8C,GAAgBH,EAAcE,GAAe,KAAK,8BAA8B,EACtF,KAAK,QAAU1C,EAAUwC,EACzB,KAAK,QAAUvC,EAAUuC,EACzB/O,EAAK,MAAQ,KAAK,eAAe,EACjC,KAAK,YAAc+O,EAAcG,EAAe,KAAK,qBAAqB,KAAK,KAAK,EACpF,KAAK,YAAc,KAAK,IAAI,KAAK,YAAcA,EAAeP,EAAa,CAAC,EAC5E,KAAK,eAAeJ,EAAM,EAAGA,EAAK,OAAQhM,CAAI,CAChD,CACA,eAAe9H,EAAGoP,EAAO,CACvB,IAAM1L,EAAO,KAAK,QACZ6B,EAAO,KAAK,YACZmM,EAAgB,KAAK,kBAAkB,EAC7C,OAAItC,GAAS1L,EAAK,UAAU,eAAiB,CAAC,KAAK,MAAM,kBAAkB1D,CAAC,GAAKuF,EAAK,QAAQvF,CAAC,IAAM,MAAQuF,EAAK,KAAKvF,CAAC,EAAE,OACjH,EAEF,KAAK,uBAAuBuF,EAAK,QAAQvF,CAAC,EAAI0R,EAAgBM,CAAG,CAC1E,CACA,eAAe8B,EAAMvK,EAAOC,EAAO1B,EAAM,CACvC,IAAMsH,EAAQtH,IAAS,QACjBxI,EAAQ,KAAK,MACbuU,EAAYvU,EAAM,UAElBoV,EADOpV,EAAM,QACQ,UACrBqV,GAAWd,EAAU,KAAOA,EAAU,OAAS,EAC/Ce,GAAWf,EAAU,IAAMA,EAAU,QAAU,EAC/CgB,EAAezF,GAASsF,EAAc,aACtCF,EAAcK,EAAe,EAAI,KAAK,YACtCP,EAAcO,EAAe,EAAI,KAAK,YACtC,CACJ,cAAAtJ,EACA,eAAAG,CACF,EAAI,KAAK,kBAAkBnC,EAAOzB,CAAI,EAClCmK,EAAa,KAAK,aAAa,EAC/BjS,EACJ,IAAKA,EAAI,EAAGA,EAAIuJ,EAAO,EAAEvJ,EACvBiS,GAAc,KAAK,eAAejS,EAAGoP,CAAK,EAE5C,IAAKpP,EAAIuJ,EAAOvJ,EAAIuJ,EAAQC,EAAO,EAAExJ,EAAG,CACtC,IAAM0R,EAAgB,KAAK,eAAe1R,EAAGoP,CAAK,EAC5C0F,EAAMhB,EAAK9T,CAAC,EACZoD,EAAa,CACjB,EAAGuR,EAAU,KAAK,QAClB,EAAGC,EAAU,KAAK,QAClB,WAAA3C,EACA,SAAUA,EAAaP,EACvB,cAAAA,EACA,YAAA4C,EACA,YAAAE,CACF,EACI9I,IACFtI,EAAW,QAAUmI,GAAiB,KAAK,0BAA0BvL,EAAG8U,EAAI,OAAS,SAAWhN,CAAI,GAEtGmK,GAAcP,EACd,KAAK,cAAcoD,EAAK9U,EAAGoD,EAAY0E,CAAI,CAC7C,CACF,CACA,gBAAiB,CACf,IAAMvC,EAAO,KAAK,YACZwP,EAAWxP,EAAK,KAClByP,EAAQ,EACRhV,EACJ,IAAKA,EAAI,EAAGA,EAAI+U,EAAS,OAAQ/U,IAAK,CACpC,IAAMkD,EAAQqC,EAAK,QAAQvF,CAAC,EACxBkD,IAAU,MAAQ,CAAC,MAAMA,CAAK,GAAK,KAAK,MAAM,kBAAkBlD,CAAC,GAAK,CAAC+U,EAAS/U,CAAC,EAAE,SACrFgV,GAAS,KAAK,IAAI9R,CAAK,EAE3B,CACA,OAAO8R,CACT,CACA,uBAAuB9R,EAAO,CAC5B,IAAM8R,EAAQ,KAAK,YAAY,MAC/B,OAAIA,EAAQ,GAAK,CAAC,MAAM9R,CAAK,EACpB8O,GAAO,KAAK,IAAI9O,CAAK,EAAI8R,GAE3B,CACT,CACA,iBAAiB/N,EAAO,CACtB,IAAM1B,EAAO,KAAK,YACZjG,EAAQ,KAAK,MACbuK,EAASvK,EAAM,KAAK,QAAU,CAAC,EAC/B4D,EAAQ+R,GAAa1P,EAAK,QAAQ0B,CAAK,EAAG3H,EAAM,QAAQ,MAAM,EACpE,MAAO,CACL,MAAOuK,EAAO5C,CAAK,GAAK,GACxB,MAAA/D,CACF,CACF,CACA,kBAAkB4Q,EAAM,CACtB,IAAIjQ,EAAM,EACJvE,EAAQ,KAAK,MACfU,EAAG2E,EAAMY,EAAMsB,EAAYjE,EAC/B,GAAI,CAACkR,GACH,IAAK9T,EAAI,EAAG2E,EAAOrF,EAAM,KAAK,SAAS,OAAQU,EAAI2E,EAAM,EAAE3E,EACzD,GAAIV,EAAM,iBAAiBU,CAAC,EAAG,CAC7BuF,EAAOjG,EAAM,eAAeU,CAAC,EAC7B8T,EAAOvO,EAAK,KACZsB,EAAatB,EAAK,WAClB,KACF,EAGJ,GAAI,CAACuO,EACH,MAAO,GAET,IAAK9T,EAAI,EAAG2E,EAAOmP,EAAK,OAAQ9T,EAAI2E,EAAM,EAAE3E,EAC1C4C,EAAUiE,EAAW,0BAA0B7G,CAAC,EAC5C4C,EAAQ,cAAgB,UAC1BiB,EAAM,KAAK,IAAIA,EAAKjB,EAAQ,aAAe,EAAGA,EAAQ,kBAAoB,CAAC,GAG/E,OAAOiB,CACT,CACA,aAAaiQ,EAAM,CACjB,IAAIjQ,EAAM,EACV,QAAS7D,EAAI,EAAG2E,EAAOmP,EAAK,OAAQ9T,EAAI2E,EAAM,EAAE3E,EAAG,CACjD,IAAM4C,EAAU,KAAK,0BAA0B5C,CAAC,EAChD6D,EAAM,KAAK,IAAIA,EAAKjB,EAAQ,QAAU,EAAGA,EAAQ,aAAe,CAAC,CACnE,CACA,OAAOiB,CACT,CACA,qBAAqBmB,EAAc,CACjC,IAAIkQ,EAAmB,EACvB,QAASlV,EAAI,EAAGA,EAAIgF,EAAc,EAAEhF,EAC9B,KAAK,MAAM,iBAAiBA,CAAC,IAC/BkV,GAAoB,KAAK,eAAelV,CAAC,GAG7C,OAAOkV,CACT,CACA,eAAelQ,EAAc,CAC3B,OAAO,KAAK,IAAIwD,EAAe,KAAK,MAAM,KAAK,SAASxD,CAAY,EAAE,OAAQ,CAAC,EAAG,CAAC,CACrF,CACA,+BAAgC,CAC9B,OAAO,KAAK,qBAAqB,KAAK,MAAM,KAAK,SAAS,MAAM,GAAK,CACvE,CACF,CACA,OAAOiO,CACT,GAAG,EACCkC,IAA+B,IAAM,CACvC,MAAMA,UAAuB/M,EAAkB,CAC7C,OAAO,GAAK,OACZ,OAAO,SAAW,CAChB,mBAAoB,OACpB,gBAAiB,QACjB,SAAU,GACV,SAAU,EACZ,EACA,OAAO,UAAY,CACjB,OAAQ,CACN,QAAS,CACP,KAAM,UACR,EACA,QAAS,CACP,KAAM,QACR,CACF,CACF,EACA,YAAa,CACX,KAAK,oBAAsB,GAC3B,KAAK,mBAAqB,GAC1B,MAAM,WAAW,CACnB,CACA,OAAON,EAAM,CACX,IAAMvC,EAAO,KAAK,YACZ,CACJ,QAAS6P,EACT,KAAMjE,EAAS,CAAC,EAChB,SAAAkE,CACF,EAAI9P,EACE+P,EAAqB,KAAK,MAAM,oBAClC,CACF,MAAA/L,EACA,MAAAC,CACF,EAAI+L,GAAiChQ,EAAM4L,EAAQmE,CAAkB,EACrE,KAAK,WAAa/L,EAClB,KAAK,WAAaC,EACdgM,GAAoBjQ,CAAI,IAC1BgE,EAAQ,EACRC,EAAQ2H,EAAO,QAEjBiE,EAAK,OAAS,KAAK,MACnBA,EAAK,cAAgB,KAAK,MAC1BA,EAAK,WAAa,CAAC,CAACC,EAAS,WAC7BD,EAAK,OAASjE,EACd,IAAMvO,EAAU,KAAK,6BAA6BkF,CAAI,EACjD,KAAK,QAAQ,WAChBlF,EAAQ,YAAc,GAExBA,EAAQ,QAAU,KAAK,QAAQ,QAC/B,KAAK,cAAcwS,EAAM,OAAW,CAClC,SAAU,CAACE,EACX,QAAA1S,CACF,EAAGkF,CAAI,EACP,KAAK,eAAeqJ,EAAQ5H,EAAOC,EAAO1B,CAAI,CAChD,CACA,eAAeqJ,EAAQ5H,EAAOC,EAAO1B,EAAM,CACzC,IAAMsH,EAAQtH,IAAS,QACjB,CACJ,OAAAtC,EACA,OAAAC,EACA,SAAAgE,EACA,SAAA4L,CACF,EAAI,KAAK,YACH,CACJ,cAAA9J,EACA,eAAAG,CACF,EAAI,KAAK,kBAAkBnC,EAAOzB,CAAI,EAChCf,EAAQvB,EAAO,KACfwB,EAAQvB,EAAO,KACf,CACJ,SAAAgQ,EACA,QAAAC,CACF,EAAI,KAAK,QACHC,EAAeC,GAASH,CAAQ,EAAIA,EAAW,OAAO,kBACtDI,EAAe,KAAK,MAAM,qBAAuBzG,GAAStH,IAAS,OACnEiE,EAAMxC,EAAQC,EACdsM,EAAc3E,EAAO,OACvB4E,EAAaxM,EAAQ,GAAK,KAAK,UAAUA,EAAQ,CAAC,EACtD,QAASvJ,EAAI,EAAGA,EAAI8V,EAAa,EAAE9V,EAAG,CACpC,IAAMoR,EAAQD,EAAOnR,CAAC,EAChBoD,EAAayS,EAAezE,EAAQ,CAAC,EAC3C,GAAIpR,EAAIuJ,GAASvJ,GAAK+L,EAAK,CACzB3I,EAAW,KAAO,GAClB,QACF,CACA,IAAM0D,EAAS,KAAK,UAAU9G,CAAC,EACzBgW,EAAW9I,EAAcpG,EAAOE,CAAK,CAAC,EACtCqK,EAASjO,EAAW2D,CAAK,EAAIvB,EAAO,iBAAiBsB,EAAOC,CAAK,EAAG/G,CAAC,EACrEsR,EAASlO,EAAW4D,CAAK,EAAIoI,GAAS4G,EAAWvQ,EAAO,aAAa,EAAIA,EAAO,iBAAiBgE,EAAW,KAAK,WAAWhE,EAAQqB,EAAQ2C,CAAQ,EAAI3C,EAAOE,CAAK,EAAGhH,CAAC,EAC9KoD,EAAW,KAAO,MAAMiO,CAAM,GAAK,MAAMC,CAAM,GAAK0E,EACpD5S,EAAW,KAAOpD,EAAI,GAAK,KAAK,IAAI8G,EAAOC,CAAK,EAAIgP,EAAWhP,CAAK,CAAC,EAAI4O,EACrED,IACFtS,EAAW,OAAS0D,EACpB1D,EAAW,IAAMiS,EAAS,KAAKrV,CAAC,GAE9B0L,IACFtI,EAAW,QAAUmI,GAAiB,KAAK,0BAA0BvL,EAAGoR,EAAM,OAAS,SAAWtJ,CAAI,GAEnG+N,GACH,KAAK,cAAczE,EAAOpR,EAAGoD,EAAY0E,CAAI,EAE/CiO,EAAajP,CACf,CACF,CACA,gBAAiB,CACf,IAAMvB,EAAO,KAAK,YACZ8C,EAAU9C,EAAK,QACf0Q,EAAS5N,EAAQ,SAAWA,EAAQ,QAAQ,aAAe,EAC3D/C,EAAOC,EAAK,MAAQ,CAAC,EAC3B,GAAI,CAACD,EAAK,OACR,OAAO2Q,EAET,IAAMC,EAAa5Q,EAAK,CAAC,EAAE,KAAK,KAAK,0BAA0B,CAAC,CAAC,EAC3D6Q,EAAY7Q,EAAKA,EAAK,OAAS,CAAC,EAAE,KAAK,KAAK,0BAA0BA,EAAK,OAAS,CAAC,CAAC,EAC5F,OAAO,KAAK,IAAI2Q,EAAQC,EAAYC,CAAS,EAAI,CACnD,CACA,MAAO,CACL,IAAM5Q,EAAO,KAAK,YAClBA,EAAK,QAAQ,oBAAoB,KAAK,MAAM,UAAWA,EAAK,OAAO,IAAI,EACvE,MAAM,KAAK,CACb,CACF,CACA,OAAO4P,CACT,GAAG,EACCiB,IAAoC,IAAM,CAC5C,MAAMA,UAA4BhO,EAAkB,CAClD,OAAO,GAAK,YACZ,OAAO,SAAW,CAChB,gBAAiB,MACjB,UAAW,CACT,cAAe,GACf,aAAc,EAChB,EACA,WAAY,CACV,QAAS,CACP,KAAM,SACN,WAAY,CAAC,IAAK,IAAK,aAAc,WAAY,cAAe,aAAa,CAC/E,CACF,EACA,UAAW,IACX,WAAY,CACd,EACA,OAAO,UAAY,CACjB,YAAa,EACb,QAAS,CACP,OAAQ,CACN,OAAQ,CACN,eAAe9I,EAAO,CACpB,IAAMgG,EAAOhG,EAAM,KACnB,GAAIgG,EAAK,OAAO,QAAUA,EAAK,SAAS,OAAQ,CAC9C,GAAM,CACJ,OAAQ,CACN,WAAA4N,EACA,MAAAnS,CACF,CACF,EAAIzB,EAAM,OAAO,QACjB,OAAOgG,EAAK,OAAO,IAAI,CAACgO,EAAOtT,IAAM,CAEnC,IAAMuT,EADOjU,EAAM,eAAe,CAAC,EAChB,WAAW,SAASU,CAAC,EACxC,MAAO,CACL,KAAMsT,EACN,UAAWC,EAAM,gBACjB,YAAaA,EAAM,YACnB,UAAWxS,EACX,UAAWwS,EAAM,YACjB,WAAYL,EACZ,OAAQ,CAAC5T,EAAM,kBAAkBU,CAAC,EAClC,MAAOA,CACT,CACF,CAAC,CACH,CACA,MAAO,CAAC,CACV,CACF,EACA,QAAQwT,EAAGC,EAAYC,EAAQ,CAC7BA,EAAO,MAAM,qBAAqBD,EAAW,KAAK,EAClDC,EAAO,MAAM,OAAO,CACtB,CACF,CACF,EACA,OAAQ,CACN,EAAG,CACD,KAAM,eACN,WAAY,CACV,QAAS,EACX,EACA,YAAa,GACb,KAAM,CACJ,SAAU,EACZ,EACA,YAAa,CACX,QAAS,EACX,EACA,WAAY,CACd,CACF,CACF,EACA,YAAYpU,EAAO0F,EAAc,CAC/B,MAAM1F,EAAO0F,CAAY,EACzB,KAAK,YAAc,OACnB,KAAK,YAAc,MACrB,CACA,iBAAiBiC,EAAO,CACtB,IAAM1B,EAAO,KAAK,YACZjG,EAAQ,KAAK,MACbuK,EAASvK,EAAM,KAAK,QAAU,CAAC,EAC/B4D,EAAQ+R,GAAa1P,EAAK,QAAQ0B,CAAK,EAAE,EAAG3H,EAAM,QAAQ,MAAM,EACtE,MAAO,CACL,MAAOuK,EAAO5C,CAAK,GAAK,GACxB,MAAA/D,CACF,CACF,CACA,gBAAgBqC,EAAMD,EAAMiE,EAAOC,EAAO,CACxC,OAAO6M,GAA4B,KAAK,IAAI,EAAE9Q,EAAMD,EAAMiE,EAAOC,CAAK,CACxE,CACA,OAAO1B,EAAM,CACX,IAAMgM,EAAO,KAAK,YAAY,KAC9B,KAAK,cAAc,EACnB,KAAK,eAAeA,EAAM,EAAGA,EAAK,OAAQhM,CAAI,CAChD,CACA,WAAY,CACV,IAAMvC,EAAO,KAAK,YACZ2E,EAAQ,CACZ,IAAK,OAAO,kBACZ,IAAK,OAAO,iBACd,EACA,OAAA3E,EAAK,KAAK,QAAQ,CAACoC,EAASV,IAAU,CACpC,IAAMH,EAAS,KAAK,UAAUG,CAAK,EAAE,EACjC,CAAC,MAAMH,CAAM,GAAK,KAAK,MAAM,kBAAkBG,CAAK,IAClDH,EAASoD,EAAM,MACjBA,EAAM,IAAMpD,GAEVA,EAASoD,EAAM,MACjBA,EAAM,IAAMpD,GAGlB,CAAC,EACMoD,CACT,CACA,eAAgB,CACd,IAAM5K,EAAQ,KAAK,MACbuU,EAAYvU,EAAM,UAClBoE,EAAOpE,EAAM,QACbgX,EAAU,KAAK,IAAIzC,EAAU,MAAQA,EAAU,KAAMA,EAAU,OAASA,EAAU,GAAG,EACrFS,EAAc,KAAK,IAAIgC,EAAU,EAAG,CAAC,EACrC9B,EAAc,KAAK,IAAI9Q,EAAK,iBAAmB4Q,EAAc,IAAM5Q,EAAK,iBAAmB,EAAG,CAAC,EAC/F+Q,GAAgBH,EAAcE,GAAelV,EAAM,uBAAuB,EAChF,KAAK,YAAcgV,EAAcG,EAAe,KAAK,MACrD,KAAK,YAAc,KAAK,YAAcA,CACxC,CACA,eAAeX,EAAMvK,EAAOC,EAAO1B,EAAM,CACvC,IAAMsH,EAAQtH,IAAS,QACjBxI,EAAQ,KAAK,MAEboV,EADOpV,EAAM,QACQ,UACrBkE,EAAQ,KAAK,YAAY,OACzBmR,EAAUnR,EAAM,QAChBoR,EAAUpR,EAAM,QAChB+S,EAAoB/S,EAAM,cAAc,CAAC,EAAI,GAAMuP,EACrDP,EAAQ+D,EACRvW,EACEwW,EAAe,IAAM,KAAK,qBAAqB,EACrD,IAAKxW,EAAI,EAAGA,EAAIuJ,EAAO,EAAEvJ,EACvBwS,GAAS,KAAK,cAAcxS,EAAG8H,EAAM0O,CAAY,EAEnD,IAAKxW,EAAIuJ,EAAOvJ,EAAIuJ,EAAQC,EAAOxJ,IAAK,CACtC,IAAM8U,EAAMhB,EAAK9T,CAAC,EACdiS,EAAaO,EACbN,EAAWM,EAAQ,KAAK,cAAcxS,EAAG8H,EAAM0O,CAAY,EAC3DlC,EAAchV,EAAM,kBAAkBU,CAAC,EAAIwD,EAAM,8BAA8B,KAAK,UAAUxD,CAAC,EAAE,CAAC,EAAI,EAC1GwS,EAAQN,EACJ9C,IACEsF,EAAc,eAChBJ,EAAc,GAEZI,EAAc,gBAChBzC,EAAaC,EAAWqE,IAG5B,IAAMnT,EAAa,CACjB,EAAGuR,EACH,EAAGC,EACH,YAAa,EACb,YAAAN,EACA,WAAArC,EACA,SAAAC,EACA,QAAS,KAAK,0BAA0BlS,EAAG8U,EAAI,OAAS,SAAWhN,CAAI,CACzE,EACA,KAAK,cAAcgN,EAAK9U,EAAGoD,EAAY0E,CAAI,CAC7C,CACF,CACA,sBAAuB,CACrB,IAAMvC,EAAO,KAAK,YACdiE,EAAQ,EACZ,OAAAjE,EAAK,KAAK,QAAQ,CAACoC,EAASV,IAAU,CAChC,CAAC,MAAM,KAAK,UAAUA,CAAK,EAAE,CAAC,GAAK,KAAK,MAAM,kBAAkBA,CAAK,GACvEuC,GAEJ,CAAC,EACMA,CACT,CACA,cAAcvC,EAAOa,EAAM0O,EAAc,CACvC,OAAO,KAAK,MAAM,kBAAkBvP,CAAK,EAAI2M,GAAU,KAAK,0BAA0B3M,EAAOa,CAAI,EAAE,OAAS0O,CAAY,EAAI,CAC9H,CACF,CACA,OAAOJ,CACT,GAAG,EACCK,IAA8B,IAAM,CACtC,MAAMA,UAAsBxD,EAAmB,CAC7C,OAAO,GAAK,MACZ,OAAO,SAAW,CAChB,OAAQ,EACR,SAAU,EACV,cAAe,IACf,OAAQ,MACV,CACF,CACA,OAAOwD,CACT,GAAG,EACCC,IAAgC,IAAM,CACxC,MAAMA,UAAwBtO,EAAkB,CAC9C,OAAO,GAAK,QACZ,OAAO,SAAW,CAChB,mBAAoB,OACpB,gBAAiB,QACjB,UAAW,IACX,SAAU,GACV,SAAU,CACR,KAAM,CACJ,KAAM,OACR,CACF,CACF,EACA,OAAO,UAAY,CACjB,YAAa,EACb,OAAQ,CACN,EAAG,CACD,KAAM,cACR,CACF,CACF,EACA,iBAAiBnB,EAAO,CACtB,IAAMxB,EAAS,KAAK,YAAY,OAC1BqB,EAAS,KAAK,UAAUG,CAAK,EACnC,MAAO,CACL,MAAOxB,EAAO,UAAU,EAAEwB,CAAK,EAC/B,MAAO,GAAKxB,EAAO,iBAAiBqB,EAAOrB,EAAO,IAAI,CAAC,CACzD,CACF,CACA,gBAAgBF,EAAMD,EAAMiE,EAAOC,EAAO,CACxC,OAAO6M,GAA4B,KAAK,IAAI,EAAE9Q,EAAMD,EAAMiE,EAAOC,CAAK,CACxE,CACA,OAAO1B,EAAM,CACX,IAAMvC,EAAO,KAAK,YACZ6P,EAAO7P,EAAK,QACZ4L,EAAS5L,EAAK,MAAQ,CAAC,EACvBsE,EAAStE,EAAK,OAAO,UAAU,EAErC,GADA6P,EAAK,OAASjE,EACVrJ,IAAS,SAAU,CACrB,IAAMlF,EAAU,KAAK,6BAA6BkF,CAAI,EACjD,KAAK,QAAQ,WAChBlF,EAAQ,YAAc,GAExB,IAAMQ,EAAa,CACjB,MAAO,GACP,UAAWyG,EAAO,SAAWsH,EAAO,OACpC,QAAAvO,CACF,EACA,KAAK,cAAcwS,EAAM,OAAWhS,EAAY0E,CAAI,CACtD,CACA,KAAK,eAAeqJ,EAAQ,EAAGA,EAAO,OAAQrJ,CAAI,CACpD,CACA,eAAeqJ,EAAQ5H,EAAOC,EAAO1B,EAAM,CACzC,IAAMtE,EAAQ,KAAK,YAAY,OACzB4L,EAAQtH,IAAS,QACvB,QAAS9H,EAAIuJ,EAAOvJ,EAAIuJ,EAAQC,EAAOxJ,IAAK,CAC1C,IAAMoR,EAAQD,EAAOnR,CAAC,EAChB4C,EAAU,KAAK,0BAA0B5C,EAAGoR,EAAM,OAAS,SAAWtJ,CAAI,EAC1E6O,EAAgBnT,EAAM,yBAAyBxD,EAAG,KAAK,UAAUA,CAAC,EAAE,CAAC,EACrEiE,EAAImL,EAAQ5L,EAAM,QAAUmT,EAAc,EAC1CzS,EAAIkL,EAAQ5L,EAAM,QAAUmT,EAAc,EAC1CvT,EAAa,CACjB,EAAAa,EACA,EAAAC,EACA,MAAOyS,EAAc,MACrB,KAAM,MAAM1S,CAAC,GAAK,MAAMC,CAAC,EACzB,QAAAtB,CACF,EACA,KAAK,cAAcwO,EAAOpR,EAAGoD,EAAY0E,CAAI,CAC/C,CACF,CACF,CACA,OAAO4O,CACT,GAAG,EACCE,IAAkC,IAAM,CAC1C,MAAMA,UAA0BxO,EAAkB,CAChD,OAAO,GAAK,UACZ,OAAO,SAAW,CAChB,mBAAoB,GACpB,gBAAiB,QACjB,SAAU,GACV,KAAM,EACR,EACA,OAAO,UAAY,CACjB,YAAa,CACX,KAAM,OACR,EACA,OAAQ,CACN,EAAG,CACD,KAAM,QACR,EACA,EAAG,CACD,KAAM,QACR,CACF,CACF,EACA,iBAAiBnB,EAAO,CACtB,IAAM1B,EAAO,KAAK,YACZsE,EAAS,KAAK,MAAM,KAAK,QAAU,CAAC,EACpC,CACJ,OAAA9F,EACA,OAAAC,CACF,EAAIuB,EACEuB,EAAS,KAAK,UAAUG,CAAK,EAC7BhD,EAAIF,EAAO,iBAAiB+C,EAAO,CAAC,EACpC5C,EAAIF,EAAO,iBAAiB8C,EAAO,CAAC,EAC1C,MAAO,CACL,MAAO+C,EAAO5C,CAAK,GAAK,GACxB,MAAO,IAAMhD,EAAI,KAAOC,EAAI,GAC9B,CACF,CACA,OAAO4D,EAAM,CACX,IAAMvC,EAAO,KAAK,YACZ,CACJ,KAAM4L,EAAS,CAAC,CAClB,EAAI5L,EACE+P,EAAqB,KAAK,MAAM,oBAClC,CACF,MAAA/L,EACA,MAAAC,CACF,EAAI+L,GAAiChQ,EAAM4L,EAAQmE,CAAkB,EAOrE,GANA,KAAK,WAAa/L,EAClB,KAAK,WAAaC,EACdgM,GAAoBjQ,CAAI,IAC1BgE,EAAQ,EACRC,EAAQ2H,EAAO,QAEb,KAAK,QAAQ,SAAU,CACpB,KAAK,oBACR,KAAK,YAAY,EAEnB,GAAM,CACJ,QAASiE,EACT,SAAAC,CACF,EAAI9P,EACJ6P,EAAK,OAAS,KAAK,MACnBA,EAAK,cAAgB,KAAK,MAC1BA,EAAK,WAAa,CAAC,CAACC,EAAS,WAC7BD,EAAK,OAASjE,EACd,IAAMvO,EAAU,KAAK,6BAA6BkF,CAAI,EACtDlF,EAAQ,QAAU,KAAK,QAAQ,QAC/B,KAAK,cAAcwS,EAAM,OAAW,CAClC,SAAU,CAACE,EACX,QAAA1S,CACF,EAAGkF,CAAI,CACT,MAAW,KAAK,qBACd,OAAOvC,EAAK,QACZ,KAAK,mBAAqB,IAE5B,KAAK,eAAe4L,EAAQ5H,EAAOC,EAAO1B,CAAI,CAChD,CACA,aAAc,CACZ,GAAM,CACJ,SAAA+O,CACF,EAAI,KAAK,QACL,CAAC,KAAK,oBAAsBA,IAC9B,KAAK,mBAAqB,KAAK,MAAM,SAAS,WAAW,MAAM,GAEjE,MAAM,YAAY,CACpB,CACA,eAAe1F,EAAQ5H,EAAOC,EAAO1B,EAAM,CACzC,IAAMsH,EAAQtH,IAAS,QACjB,CACJ,OAAAtC,EACA,OAAAC,EACA,SAAAgE,EACA,SAAA4L,CACF,EAAI,KAAK,YACH7J,EAAY,KAAK,0BAA0BjC,EAAOzB,CAAI,EACtDyD,EAAgB,KAAK,iBAAiBC,CAAS,EAC/CE,EAAiB,KAAK,eAAe5D,EAAMyD,CAAa,EACxDxE,EAAQvB,EAAO,KACfwB,EAAQvB,EAAO,KACf,CACJ,SAAAgQ,EACA,QAAAC,CACF,EAAI,KAAK,QACHC,EAAeC,GAASH,CAAQ,EAAIA,EAAW,OAAO,kBACtDI,EAAe,KAAK,MAAM,qBAAuBzG,GAAStH,IAAS,OACrEiO,EAAaxM,EAAQ,GAAK,KAAK,UAAUA,EAAQ,CAAC,EACtD,QAASvJ,EAAIuJ,EAAOvJ,EAAIuJ,EAAQC,EAAO,EAAExJ,EAAG,CAC1C,IAAMoR,EAAQD,EAAOnR,CAAC,EAChB8G,EAAS,KAAK,UAAU9G,CAAC,EACzBoD,EAAayS,EAAezE,EAAQ,CAAC,EACrC4E,EAAW9I,EAAcpG,EAAOE,CAAK,CAAC,EACtCqK,EAASjO,EAAW2D,CAAK,EAAIvB,EAAO,iBAAiBsB,EAAOC,CAAK,EAAG/G,CAAC,EACrEsR,EAASlO,EAAW4D,CAAK,EAAIoI,GAAS4G,EAAWvQ,EAAO,aAAa,EAAIA,EAAO,iBAAiBgE,EAAW,KAAK,WAAWhE,EAAQqB,EAAQ2C,CAAQ,EAAI3C,EAAOE,CAAK,EAAGhH,CAAC,EAC9KoD,EAAW,KAAO,MAAMiO,CAAM,GAAK,MAAMC,CAAM,GAAK0E,EACpD5S,EAAW,KAAOpD,EAAI,GAAK,KAAK,IAAI8G,EAAOC,CAAK,EAAIgP,EAAWhP,CAAK,CAAC,EAAI4O,EACrED,IACFtS,EAAW,OAAS0D,EACpB1D,EAAW,IAAMiS,EAAS,KAAKrV,CAAC,GAE9B0L,IACFtI,EAAW,QAAUmI,GAAiB,KAAK,0BAA0BvL,EAAGoR,EAAM,OAAS,SAAWtJ,CAAI,GAEnG+N,GACH,KAAK,cAAczE,EAAOpR,EAAGoD,EAAY0E,CAAI,EAE/CiO,EAAajP,CACf,CACA,KAAK,oBAAoByE,EAAezD,EAAM0D,CAAS,CACzD,CACA,gBAAiB,CACf,IAAMjG,EAAO,KAAK,YACZD,EAAOC,EAAK,MAAQ,CAAC,EAC3B,GAAI,CAAC,KAAK,QAAQ,SAAU,CAC1B,IAAI1B,EAAM,EACV,QAAS7D,EAAIsF,EAAK,OAAS,EAAGtF,GAAK,EAAG,EAAEA,EACtC6D,EAAM,KAAK,IAAIA,EAAKyB,EAAKtF,CAAC,EAAE,KAAK,KAAK,0BAA0BA,CAAC,CAAC,EAAI,CAAC,EAEzE,OAAO6D,EAAM,GAAKA,CACpB,CACA,IAAMwE,EAAU9C,EAAK,QACf0Q,EAAS5N,EAAQ,SAAWA,EAAQ,QAAQ,aAAe,EACjE,GAAI,CAAC/C,EAAK,OACR,OAAO2Q,EAET,IAAMC,EAAa5Q,EAAK,CAAC,EAAE,KAAK,KAAK,0BAA0B,CAAC,CAAC,EAC3D6Q,EAAY7Q,EAAKA,EAAK,OAAS,CAAC,EAAE,KAAK,KAAK,0BAA0BA,EAAK,OAAS,CAAC,CAAC,EAC5F,OAAO,KAAK,IAAI2Q,EAAQC,EAAYC,CAAS,EAAI,CACnD,CACF,CACA,OAAOS,CACT,GAAG,EACCE,GAA2B,OAAO,OAAO,CAC3C,UAAW,KACX,cAAe7H,GACf,iBAAkBiC,GAClB,mBAAoB+B,GACpB,eAAgBkC,GAChB,cAAesB,GACf,oBAAqBL,GACrB,gBAAiBM,GACjB,kBAAmBE,EACrB,CAAC,EAOD,SAASG,IAAW,CAClB,MAAM,IAAI,MAAM,iFAAiF,CACnG,CAOA,IAAMC,GAAN,MAAMC,CAAgB,CAWpB,OAAO,SAASC,EAAS,CACvB,OAAO,OAAOD,EAAgB,UAAWC,CAAO,CAClD,CACA,QACA,YAAYtU,EAAS,CACnB,KAAK,QAAUA,GAAW,CAAC,CAC7B,CAEA,MAAO,CAAC,CACR,SAAU,CACR,OAAOmU,GAAS,CAClB,CACA,OAAQ,CACN,OAAOA,GAAS,CAClB,CACA,QAAS,CACP,OAAOA,GAAS,CAClB,CACA,KAAM,CACJ,OAAOA,GAAS,CAClB,CACA,MAAO,CACL,OAAOA,GAAS,CAClB,CACA,SAAU,CACR,OAAOA,GAAS,CAClB,CACA,OAAQ,CACN,OAAOA,GAAS,CAClB,CACF,EACII,GAAW,CACb,MAAOH,EACT,EACA,SAASI,GAAaC,EAAShQ,EAAMnE,EAAOoU,EAAW,CACrD,GAAM,CACJ,WAAAzQ,EACA,KAAAvB,EACA,QAAAiS,CACF,EAAIF,EACE7R,EAASqB,EAAW,YAAY,OAChC4O,EAAW4B,EAAQ,SAAUA,EAAQ,QAAQ,QAAUA,EAAQ,QAAQ,QAAQ,SAAkB,KACvG,GAAI7R,GAAU6B,IAAS7B,EAAO,MAAQ6B,IAAS,KAAOkQ,GAAWjS,EAAK,OAAQ,CAC5E,IAAMkS,EAAehS,EAAO,eAAiBiS,GAAgBC,GAC7D,GAAKJ,GAeE,GAAIzQ,EAAW,eAAgB,CACpC,IAAM8Q,EAAKrS,EAAK,CAAC,EACX4E,EAAQ,OAAOyN,EAAG,UAAa,YAAcA,EAAG,SAAStQ,CAAI,EACnE,GAAI6C,EAAO,CACT,IAAMX,EAAQiO,EAAalS,EAAM+B,EAAMnE,EAAQgH,CAAK,EAC9C6B,EAAMyL,EAAalS,EAAM+B,EAAMnE,EAAQgH,CAAK,EAClD,MAAO,CACL,GAAIX,EAAM,GACV,GAAIwC,EAAI,EACV,CACF,CACF,MA1BgB,CACd,IAAM6L,EAASJ,EAAalS,EAAM+B,EAAMnE,CAAK,EAC7C,GAAIuS,EAAU,CACZ,GAAM,CACJ,OAAAhQ,CACF,EAAIoB,EAAW,YACT,CACJ,QAAAuD,CACF,EAAIiN,EACEQ,EAAsBzN,EAAQ,MAAM,EAAGwN,EAAO,GAAK,CAAC,EAAE,QAAQ,EAAE,UAAUxG,GAAS,CAAClE,EAAckE,EAAM3L,EAAO,IAAI,CAAC,CAAC,EAC3HmS,EAAO,IAAM,KAAK,IAAI,EAAGC,CAAmB,EAC5C,IAAMC,EAAsB1N,EAAQ,MAAMwN,EAAO,EAAE,EAAE,UAAUxG,GAAS,CAAClE,EAAckE,EAAM3L,EAAO,IAAI,CAAC,CAAC,EAC1GmS,EAAO,IAAM,KAAK,IAAI,EAAGE,CAAmB,CAC9C,CACA,OAAOF,CACT,CAYF,CACA,MAAO,CACL,GAAI,EACJ,GAAItS,EAAK,OAAS,CACpB,CACF,CACA,SAASyS,GAAyBzY,EAAO+H,EAAM2Q,EAAUC,EAASX,EAAW,CAC3E,IAAM5S,EAAWpF,EAAM,6BAA6B,EAC9C4D,EAAQ8U,EAAS3Q,CAAI,EAC3B,QAASrH,EAAI,EAAG2E,EAAOD,EAAS,OAAQ1E,EAAI2E,EAAM,EAAE3E,EAAG,CACrD,GAAM,CACJ,MAAAiH,EACA,KAAA3B,CACF,EAAIZ,EAAS1E,CAAC,EACR,CACJ,GAAAkY,EACA,GAAAC,CACF,EAAIf,GAAa1S,EAAS1E,CAAC,EAAGqH,EAAMnE,EAAOoU,CAAS,EACpD,QAASc,EAAIF,EAAIE,GAAKD,EAAI,EAAEC,EAAG,CAC7B,IAAMzQ,EAAUrC,EAAK8S,CAAC,EACjBzQ,EAAQ,MACXsQ,EAAQtQ,EAASV,EAAOmR,CAAC,CAE7B,CACF,CACF,CACA,SAASC,GAAyBhR,EAAM,CACtC,IAAMiR,EAAOjR,EAAK,QAAQ,GAAG,IAAM,GAC7BkR,EAAOlR,EAAK,QAAQ,GAAG,IAAM,GACnC,OAAO,SAAUmR,EAAKC,EAAK,CACzB,IAAMC,EAASJ,EAAO,KAAK,IAAIE,EAAI,EAAIC,EAAI,CAAC,EAAI,EAC1CE,EAASJ,EAAO,KAAK,IAAIC,EAAI,EAAIC,EAAI,CAAC,EAAI,EAChD,OAAO,KAAK,KAAK,KAAK,IAAIC,EAAQ,CAAC,EAAI,KAAK,IAAIC,EAAQ,CAAC,CAAC,CAC5D,CACF,CACA,SAASC,GAAkBtZ,EAAO0Y,EAAU3Q,EAAMwR,EAAkBC,EAAkB,CACpF,IAAM/Y,EAAQ,CAAC,EACf,MAAI,CAAC+Y,GAAoB,CAACxZ,EAAM,cAAc0Y,CAAQ,GAetDD,GAAyBzY,EAAO+H,EAAM2Q,EAZf,SAAUrQ,EAAS3C,EAAciC,EAAO,CACzD,CAAC6R,GAAoB,CAACC,GAAepR,EAASrI,EAAM,UAAW,CAAC,GAGhEqI,EAAQ,QAAQqQ,EAAS,EAAGA,EAAS,EAAGa,CAAgB,GAC1D9Y,EAAM,KAAK,CACT,QAAA4H,EACA,aAAA3C,EACA,MAAAiC,CACF,CAAC,CAEL,EACgE,EAAI,EAC7DlH,CACT,CACA,SAASiZ,GAAsB1Z,EAAO0Y,EAAU3Q,EAAMwR,EAAkB,CACtE,IAAI9Y,EAAQ,CAAC,EACb,SAASkZ,EAAetR,EAAS3C,EAAciC,EAAO,CACpD,GAAM,CACJ,WAAAgL,EACA,SAAAC,CACF,EAAIvK,EAAQ,SAAS,CAAC,aAAc,UAAU,EAAGkR,CAAgB,EAC3D,CACJ,MAAArG,CACF,EAAI0G,GAAkBvR,EAAS,CAC7B,EAAGqQ,EAAS,EACZ,EAAGA,EAAS,CACd,CAAC,EACGvF,GAAcD,EAAOP,EAAYC,CAAQ,GAC3CnS,EAAM,KAAK,CACT,QAAA4H,EACA,aAAA3C,EACA,MAAAiC,CACF,CAAC,CAEL,CACA,OAAA8Q,GAAyBzY,EAAO+H,EAAM2Q,EAAUiB,CAAc,EACvDlZ,CACT,CACA,SAASoZ,GAAyB7Z,EAAO0Y,EAAU3Q,EAAMiQ,EAAWuB,EAAkBC,EAAkB,CACtG,IAAI/Y,EAAQ,CAAC,EACPqZ,EAAiBf,GAAyBhR,CAAI,EAChDgS,EAAc,OAAO,kBACzB,SAASJ,EAAetR,EAAS3C,EAAciC,EAAO,CACpD,IAAMqS,EAAU3R,EAAQ,QAAQqQ,EAAS,EAAGA,EAAS,EAAGa,CAAgB,EACxE,GAAIvB,GAAa,CAACgC,EAChB,OAEF,IAAM1I,EAASjJ,EAAQ,eAAekR,CAAgB,EAEtD,GAAI,EADgB,CAAC,CAACC,GAAoBxZ,EAAM,cAAcsR,CAAM,IAChD,CAAC0I,EACnB,OAEF,IAAMC,EAAWH,EAAepB,EAAUpH,CAAM,EAC5C2I,EAAWF,GACbtZ,EAAQ,CAAC,CACP,QAAA4H,EACA,aAAA3C,EACA,MAAAiC,CACF,CAAC,EACDoS,EAAcE,GACLA,IAAaF,GACtBtZ,EAAM,KAAK,CACT,QAAA4H,EACA,aAAA3C,EACA,MAAAiC,CACF,CAAC,CAEL,CACA,OAAA8Q,GAAyBzY,EAAO+H,EAAM2Q,EAAUiB,CAAc,EACvDlZ,CACT,CACA,SAASyZ,GAAgBla,EAAO0Y,EAAU3Q,EAAMiQ,EAAWuB,EAAkBC,EAAkB,CAC7F,MAAI,CAACA,GAAoB,CAACxZ,EAAM,cAAc0Y,CAAQ,EAC7C,CAAC,EAEH3Q,IAAS,KAAO,CAACiQ,EAAY0B,GAAsB1Z,EAAO0Y,EAAU3Q,EAAMwR,CAAgB,EAAIM,GAAyB7Z,EAAO0Y,EAAU3Q,EAAMiQ,EAAWuB,EAAkBC,CAAgB,CACpM,CACA,SAASW,GAAana,EAAO0Y,EAAU3Q,EAAMiQ,EAAWuB,EAAkB,CACxE,IAAM9Y,EAAQ,CAAC,EACT2Z,EAAcrS,IAAS,IAAM,WAAa,WAC5CsS,EAAiB,GAWrB,OAVA5B,GAAyBzY,EAAO+H,EAAM2Q,EAAU,CAACrQ,EAAS3C,EAAciC,IAAU,CAC5EU,EAAQ+R,CAAW,GAAK/R,EAAQ+R,CAAW,EAAE1B,EAAS3Q,CAAI,EAAGwR,CAAgB,IAC/E9Y,EAAM,KAAK,CACT,QAAA4H,EACA,aAAA3C,EACA,MAAAiC,CACF,CAAC,EACD0S,EAAiBA,GAAkBhS,EAAQ,QAAQqQ,EAAS,EAAGA,EAAS,EAAGa,CAAgB,EAE/F,CAAC,EACGvB,GAAa,CAACqC,EACT,CAAC,EAEH5Z,CACT,CACA,IAAI6Z,GAAc,CAChB,yBAAA7B,GACA,MAAO,CACL,MAAMzY,EAAOkU,EAAG5Q,EAASiW,EAAkB,CACzC,IAAMb,EAAW6B,GAAoBrG,EAAGlU,CAAK,EACvC+H,EAAOzE,EAAQ,MAAQ,IACvBkW,EAAmBlW,EAAQ,kBAAoB,GAC/C7C,EAAQ6C,EAAQ,UAAYgW,GAAkBtZ,EAAO0Y,EAAU3Q,EAAMwR,EAAkBC,CAAgB,EAAIU,GAAgBla,EAAO0Y,EAAU3Q,EAAM,GAAOwR,EAAkBC,CAAgB,EAC3LpO,EAAW,CAAC,EAClB,OAAK3K,EAAM,QAGXT,EAAM,6BAA6B,EAAE,QAAQiG,GAAQ,CACnD,IAAM0B,EAAQlH,EAAM,CAAC,EAAE,MACjB4H,EAAUpC,EAAK,KAAK0B,CAAK,EAC3BU,GAAW,CAACA,EAAQ,MACtB+C,EAAS,KAAK,CACZ,QAAA/C,EACA,aAAcpC,EAAK,MACnB,MAAA0B,CACF,CAAC,CAEL,CAAC,EACMyD,GAbE,CAAC,CAcZ,EACA,QAAQpL,EAAOkU,EAAG5Q,EAASiW,EAAkB,CAC3C,IAAMb,EAAW6B,GAAoBrG,EAAGlU,CAAK,EACvC+H,EAAOzE,EAAQ,MAAQ,KACvBkW,EAAmBlW,EAAQ,kBAAoB,GACjD7C,EAAQ6C,EAAQ,UAAYgW,GAAkBtZ,EAAO0Y,EAAU3Q,EAAMwR,EAAkBC,CAAgB,EAAIU,GAAgBla,EAAO0Y,EAAU3Q,EAAM,GAAOwR,EAAkBC,CAAgB,EAC/L,GAAI/Y,EAAM,OAAS,EAAG,CACpB,IAAMiF,EAAejF,EAAM,CAAC,EAAE,aACxBuF,EAAOhG,EAAM,eAAe0F,CAAY,EAAE,KAChDjF,EAAQ,CAAC,EACT,QAASC,EAAI,EAAGA,EAAIsF,EAAK,OAAQ,EAAEtF,EACjCD,EAAM,KAAK,CACT,QAASuF,EAAKtF,CAAC,EACf,aAAAgF,EACA,MAAOhF,CACT,CAAC,CAEL,CACA,OAAOD,CACT,EACA,MAAMT,EAAOkU,EAAG5Q,EAASiW,EAAkB,CACzC,IAAMb,EAAW6B,GAAoBrG,EAAGlU,CAAK,EACvC+H,EAAOzE,EAAQ,MAAQ,KACvBkW,EAAmBlW,EAAQ,kBAAoB,GACrD,OAAOgW,GAAkBtZ,EAAO0Y,EAAU3Q,EAAMwR,EAAkBC,CAAgB,CACpF,EACA,QAAQxZ,EAAOkU,EAAG5Q,EAASiW,EAAkB,CAC3C,IAAMb,EAAW6B,GAAoBrG,EAAGlU,CAAK,EACvC+H,EAAOzE,EAAQ,MAAQ,KACvBkW,EAAmBlW,EAAQ,kBAAoB,GACrD,OAAO4W,GAAgBla,EAAO0Y,EAAU3Q,EAAMzE,EAAQ,UAAWiW,EAAkBC,CAAgB,CACrG,EACA,EAAExZ,EAAOkU,EAAG5Q,EAASiW,EAAkB,CACrC,IAAMb,EAAW6B,GAAoBrG,EAAGlU,CAAK,EAC7C,OAAOma,GAAana,EAAO0Y,EAAU,IAAKpV,EAAQ,UAAWiW,CAAgB,CAC/E,EACA,EAAEvZ,EAAOkU,EAAG5Q,EAASiW,EAAkB,CACrC,IAAMb,EAAW6B,GAAoBrG,EAAGlU,CAAK,EAC7C,OAAOma,GAAana,EAAO0Y,EAAU,IAAKpV,EAAQ,UAAWiW,CAAgB,CAC/E,CACF,CACF,EACMiB,GAAmB,CAAC,OAAQ,MAAO,QAAS,QAAQ,EAC1D,SAASC,GAAiBC,EAAOhC,EAAU,CACzC,OAAOgC,EAAM,OAAOlL,GAAKA,EAAE,MAAQkJ,CAAQ,CAC7C,CACA,SAASiC,GAA4BD,EAAO3S,EAAM,CAChD,OAAO2S,EAAM,OAAOlL,GAAKgL,GAAiB,QAAQhL,EAAE,GAAG,IAAM,IAAMA,EAAE,IAAI,OAASzH,CAAI,CACxF,CACA,SAAS6S,GAAaF,EAAOrW,EAAS,CACpC,OAAOqW,EAAM,KAAK,CAACxN,EAAGlI,IAAM,CAC1B,IAAM6V,EAAKxW,EAAUW,EAAIkI,EACnBoC,EAAKjL,EAAU6I,EAAIlI,EACzB,OAAO6V,EAAG,SAAWvL,EAAG,OAASuL,EAAG,MAAQvL,EAAG,MAAQuL,EAAG,OAASvL,EAAG,MACxE,CAAC,CACH,CACA,SAASwL,GAAUC,EAAO,CACxB,IAAMC,EAAc,CAAC,EACjBta,EAAG2E,EAAM4V,EAAKC,EAAK3V,EAAO4V,EAC9B,IAAKza,EAAI,EAAG2E,GAAQ0V,GAAS,CAAC,GAAG,OAAQra,EAAI2E,EAAM,EAAE3E,EACnDua,EAAMF,EAAMra,CAAC,EACZ,CACC,SAAUwa,EACV,QAAS,CACP,MAAA3V,EACA,YAAA4V,EAAc,CAChB,CACF,EAAIF,EACJD,EAAY,KAAK,CACf,MAAOta,EACP,IAAAua,EACA,IAAAC,EACA,WAAYD,EAAI,aAAa,EAC7B,OAAQA,EAAI,OACZ,MAAO1V,GAAS2V,EAAM3V,EACtB,YAAA4V,CACF,CAAC,EAEH,OAAOH,CACT,CACA,SAASI,GAAYC,EAAS,CAC5B,IAAMrU,EAAS,CAAC,EAChB,QAAWsU,KAAQD,EAAS,CAC1B,GAAM,CACJ,MAAA9V,EACA,IAAA2V,EACA,YAAAC,CACF,EAAIG,EACJ,GAAI,CAAC/V,GAAS,CAACiV,GAAiB,SAASU,CAAG,EAC1C,SAEF,IAAMK,EAASvU,EAAOzB,CAAK,IAAMyB,EAAOzB,CAAK,EAAI,CAC/C,MAAO,EACP,OAAQ,EACR,OAAQ,EACR,KAAM,CACR,GACAgW,EAAO,QACPA,EAAO,QAAUJ,CACnB,CACA,OAAOnU,CACT,CACA,SAASwU,GAAcH,EAASI,EAAQ,CACtC,IAAMzU,EAASoU,GAAYC,CAAO,EAC5B,CACJ,aAAAK,EACA,cAAAC,CACF,EAAIF,EACA/a,EAAG2E,EAAMuW,EACb,IAAKlb,EAAI,EAAG2E,EAAOgW,EAAQ,OAAQ3a,EAAI2E,EAAM,EAAE3E,EAAG,CAChDkb,EAASP,EAAQ3a,CAAC,EAClB,GAAM,CACJ,SAAAmb,CACF,EAAID,EAAO,IACLrW,EAAQyB,EAAO4U,EAAO,KAAK,EAC3Bra,EAASgE,GAASqW,EAAO,YAAcrW,EAAM,OAC/CqW,EAAO,YACTA,EAAO,MAAQra,EAASA,EAASma,EAAeG,GAAYJ,EAAO,eACnEG,EAAO,OAASD,IAEhBC,EAAO,MAAQF,EACfE,EAAO,OAASra,EAASA,EAASoa,EAAgBE,GAAYJ,EAAO,gBAEzE,CACA,OAAOzU,CACT,CACA,SAAS8U,GAAiBf,EAAO,CAC/B,IAAMC,EAAcF,GAAUC,CAAK,EAC7Bc,EAAWjB,GAAaI,EAAY,OAAOM,GAAQA,EAAK,IAAI,QAAQ,EAAG,EAAI,EAC3ES,EAAOnB,GAAaH,GAAiBO,EAAa,MAAM,EAAG,EAAI,EAC/DgB,EAAQpB,GAAaH,GAAiBO,EAAa,OAAO,CAAC,EAC3DlM,EAAM8L,GAAaH,GAAiBO,EAAa,KAAK,EAAG,EAAI,EAC7DjM,EAAS6L,GAAaH,GAAiBO,EAAa,QAAQ,CAAC,EAC7DiB,EAAmBtB,GAA4BK,EAAa,GAAG,EAC/DkB,EAAiBvB,GAA4BK,EAAa,GAAG,EACnE,MAAO,CACL,SAAAa,EACA,WAAYE,EAAK,OAAOjN,CAAG,EAC3B,eAAgBkN,EAAM,OAAOE,CAAc,EAAE,OAAOnN,CAAM,EAAE,OAAOkN,CAAgB,EACnF,UAAWxB,GAAiBO,EAAa,WAAW,EACpD,SAAUe,EAAK,OAAOC,CAAK,EAAE,OAAOE,CAAc,EAClD,WAAYpN,EAAI,OAAOC,CAAM,EAAE,OAAOkN,CAAgB,CACxD,CACF,CACA,SAASE,GAAeC,EAAY7H,EAAWrH,EAAGlI,EAAG,CACnD,OAAO,KAAK,IAAIoX,EAAWlP,CAAC,EAAGqH,EAAUrH,CAAC,CAAC,EAAI,KAAK,IAAIkP,EAAWpX,CAAC,EAAGuP,EAAUvP,CAAC,CAAC,CACrF,CACA,SAASqX,GAAiBD,EAAYE,EAAY,CAChDF,EAAW,IAAM,KAAK,IAAIA,EAAW,IAAKE,EAAW,GAAG,EACxDF,EAAW,KAAO,KAAK,IAAIA,EAAW,KAAME,EAAW,IAAI,EAC3DF,EAAW,OAAS,KAAK,IAAIA,EAAW,OAAQE,EAAW,MAAM,EACjEF,EAAW,MAAQ,KAAK,IAAIA,EAAW,MAAOE,EAAW,KAAK,CAChE,CACA,SAASC,GAAWhI,EAAWkH,EAAQG,EAAQ5U,EAAQ,CACrD,GAAM,CACJ,IAAAkU,EACA,IAAAD,CACF,EAAIW,EACEQ,EAAa7H,EAAU,WAC7B,GAAI,CAAC1R,EAASqY,CAAG,EAAG,CACdU,EAAO,OACTrH,EAAU2G,CAAG,GAAKU,EAAO,MAE3B,IAAMrW,EAAQyB,EAAO4U,EAAO,KAAK,GAAK,CACpC,KAAM,EACN,MAAO,CACT,EACArW,EAAM,KAAO,KAAK,IAAIA,EAAM,KAAMqW,EAAO,WAAaX,EAAI,OAASA,EAAI,KAAK,EAC5EW,EAAO,KAAOrW,EAAM,KAAOA,EAAM,MACjCgP,EAAU2G,CAAG,GAAKU,EAAO,IAC3B,CACIX,EAAI,YACNoB,GAAiBD,EAAYnB,EAAI,WAAW,CAAC,EAE/C,IAAMuB,EAAW,KAAK,IAAI,EAAGf,EAAO,WAAaU,GAAeC,EAAY7H,EAAW,OAAQ,OAAO,CAAC,EACjGkI,EAAY,KAAK,IAAI,EAAGhB,EAAO,YAAcU,GAAeC,EAAY7H,EAAW,MAAO,QAAQ,CAAC,EACnGmI,EAAeF,IAAajI,EAAU,EACtCoI,EAAgBF,IAAclI,EAAU,EAC9C,OAAAA,EAAU,EAAIiI,EACdjI,EAAU,EAAIkI,EACPb,EAAO,WAAa,CACzB,KAAMc,EACN,MAAOC,CACT,EAAI,CACF,KAAMA,EACN,MAAOD,CACT,CACF,CACA,SAASE,GAAiBrI,EAAW,CACnC,IAAM6H,EAAa7H,EAAU,WAC7B,SAASsI,EAAU3B,EAAK,CACtB,IAAM4B,EAAS,KAAK,IAAIV,EAAWlB,CAAG,EAAI3G,EAAU2G,CAAG,EAAG,CAAC,EAC3D,OAAA3G,EAAU2G,CAAG,GAAK4B,EACXA,CACT,CACAvI,EAAU,GAAKsI,EAAU,KAAK,EAC9BtI,EAAU,GAAKsI,EAAU,MAAM,EAC/BA,EAAU,OAAO,EACjBA,EAAU,QAAQ,CACpB,CACA,SAASE,GAAW/M,EAAYuE,EAAW,CACzC,IAAM6H,EAAa7H,EAAU,WAC7B,SAASyI,EAAmBC,EAAW,CACrC,IAAMC,EAAS,CACb,KAAM,EACN,IAAK,EACL,MAAO,EACP,OAAQ,CACV,EACA,OAAAD,EAAU,QAAQ/B,GAAO,CACvBgC,EAAOhC,CAAG,EAAI,KAAK,IAAI3G,EAAU2G,CAAG,EAAGkB,EAAWlB,CAAG,CAAC,CACxD,CAAC,EACMgC,CACT,CACA,OAAoBF,EAAbhN,EAAgC,CAAC,OAAQ,OAAO,EAAwB,CAAC,MAAO,QAAQ,CAAvC,CAC1D,CACA,SAASmN,GAASpC,EAAOxG,EAAWkH,EAAQzU,EAAQ,CAClD,IAAMoW,EAAa,CAAC,EAChB1c,EAAG2E,EAAMuW,EAAQX,EAAKoC,EAAOC,EACjC,IAAK5c,EAAI,EAAG2E,EAAO0V,EAAM,OAAQsC,EAAQ,EAAG3c,EAAI2E,EAAM,EAAE3E,EAAG,CACzDkb,EAASb,EAAMra,CAAC,EAChBua,EAAMW,EAAO,IACbX,EAAI,OAAOW,EAAO,OAASrH,EAAU,EAAGqH,EAAO,QAAUrH,EAAU,EAAGwI,GAAWnB,EAAO,WAAYrH,CAAS,CAAC,EAC9G,GAAM,CACJ,KAAAgJ,EACA,MAAAC,CACF,EAAIjB,GAAWhI,EAAWkH,EAAQG,EAAQ5U,CAAM,EAChDqW,GAASE,GAAQH,EAAW,OAC5BE,EAAUA,GAAWE,EAChBvC,EAAI,UACPmC,EAAW,KAAKxB,CAAM,CAE1B,CACA,OAAOyB,GAASF,GAASC,EAAY7I,EAAWkH,EAAQzU,CAAM,GAAKsW,CACrE,CACA,SAASG,GAAWxC,EAAKc,EAAMjN,EAAK4O,EAAOC,EAAQ,CACjD1C,EAAI,IAAMnM,EACVmM,EAAI,KAAOc,EACXd,EAAI,MAAQc,EAAO2B,EACnBzC,EAAI,OAASnM,EAAM6O,EACnB1C,EAAI,MAAQyC,EACZzC,EAAI,OAAS0C,CACf,CACA,SAASC,GAAW7C,EAAOxG,EAAWkH,EAAQzU,EAAQ,CACpD,IAAM6W,EAAcpC,EAAO,QACvB,CACF,EAAA9W,EACA,EAAAC,CACF,EAAI2P,EACJ,QAAWqH,KAAUb,EAAO,CAC1B,IAAME,EAAMW,EAAO,IACbrW,EAAQyB,EAAO4U,EAAO,KAAK,GAAK,CACpC,MAAO,EACP,OAAQ,EACR,OAAQ,CACV,EACMkC,EAASlC,EAAO,YAAcrW,EAAM,QAAU,EACpD,GAAIqW,EAAO,WAAY,CACrB,IAAM8B,EAAQnJ,EAAU,EAAIuJ,EACtBH,EAASpY,EAAM,MAAQ0V,EAAI,OAC7BpP,GAAQtG,EAAM,KAAK,IACrBX,EAAIW,EAAM,OAER0V,EAAI,SACNwC,GAAWxC,EAAK4C,EAAY,KAAMjZ,EAAG6W,EAAO,WAAaoC,EAAY,MAAQA,EAAY,KAAMF,CAAM,EAErGF,GAAWxC,EAAK1G,EAAU,KAAOhP,EAAM,OAAQX,EAAG8Y,EAAOC,CAAM,EAEjEpY,EAAM,MAAQX,EACdW,EAAM,QAAUmY,EAChB9Y,EAAIqW,EAAI,MACV,KAAO,CACL,IAAM0C,EAASpJ,EAAU,EAAIuJ,EACvBJ,EAAQnY,EAAM,MAAQ0V,EAAI,MAC5BpP,GAAQtG,EAAM,KAAK,IACrBZ,EAAIY,EAAM,OAER0V,EAAI,SACNwC,GAAWxC,EAAKtW,EAAGkZ,EAAY,IAAKH,EAAOjC,EAAO,YAAcoC,EAAY,OAASA,EAAY,GAAG,EAEpGJ,GAAWxC,EAAKtW,EAAG4P,EAAU,IAAMhP,EAAM,OAAQmY,EAAOC,CAAM,EAEhEpY,EAAM,MAAQZ,EACdY,EAAM,QAAUoY,EAChBhZ,EAAIsW,EAAI,KACV,CACF,CACA1G,EAAU,EAAI5P,EACd4P,EAAU,EAAI3P,CAChB,CACA,IAAIyW,EAAU,CACZ,OAAOrb,EAAOY,EAAM,CACbZ,EAAM,QACTA,EAAM,MAAQ,CAAC,GAEjBY,EAAK,SAAWA,EAAK,UAAY,GACjCA,EAAK,SAAWA,EAAK,UAAY,MACjCA,EAAK,OAASA,EAAK,QAAU,EAC7BA,EAAK,QAAUA,EAAK,SAAW,UAAY,CACzC,MAAO,CAAC,CACN,EAAG,EACH,KAAK2T,EAAW,CACd3T,EAAK,KAAK2T,CAAS,CACrB,CACF,CAAC,CACH,EACAvU,EAAM,MAAM,KAAKY,CAAI,CACvB,EACA,UAAUZ,EAAO+d,EAAY,CAC3B,IAAMpW,EAAQ3H,EAAM,MAAQA,EAAM,MAAM,QAAQ+d,CAAU,EAAI,GAC1DpW,IAAU,IACZ3H,EAAM,MAAM,OAAO2H,EAAO,CAAC,CAE/B,EACA,UAAU3H,EAAOY,EAAM0C,EAAS,CAC9B1C,EAAK,SAAW0C,EAAQ,SACxB1C,EAAK,SAAW0C,EAAQ,SACxB1C,EAAK,OAAS0C,EAAQ,MACxB,EACA,OAAOtD,EAAO0d,EAAOC,EAAQK,EAAY,CACvC,GAAI,CAAChe,EACH,OAEF,IAAMie,EAAUC,EAAUle,EAAM,QAAQ,OAAO,OAAO,EAChDme,EAAiB,KAAK,IAAIT,EAAQO,EAAQ,MAAO,CAAC,EAClDG,EAAkB,KAAK,IAAIT,EAASM,EAAQ,OAAQ,CAAC,EACrDlD,EAAQe,GAAiB9b,EAAM,KAAK,EACpCqe,EAAgBtD,EAAM,SACtBuD,EAAkBvD,EAAM,WAC9BwD,EAAKve,EAAM,MAAOib,GAAO,CACnB,OAAOA,EAAI,cAAiB,YAC9BA,EAAI,aAAa,CAErB,CAAC,EACD,IAAMuD,EAA0BH,EAAc,OAAO,CAAC3I,EAAO4F,IAASA,EAAK,IAAI,SAAWA,EAAK,IAAI,QAAQ,UAAY,GAAQ5F,EAAQA,EAAQ,EAAG,CAAC,GAAK,EAClJ+F,EAAS,OAAO,OAAO,CAC3B,WAAYiC,EACZ,YAAaC,EACb,QAAAM,EACA,eAAAE,EACA,gBAAAC,EACA,aAAcD,EAAiB,EAAIK,EACnC,cAAeJ,EAAkB,CACnC,CAAC,EACKhC,EAAa,OAAO,OAAO,CAAC,EAAG6B,CAAO,EAC5C5B,GAAiBD,EAAY8B,EAAUF,CAAU,CAAC,EAClD,IAAMzJ,EAAY,OAAO,OAAO,CAC9B,WAAA6H,EACA,EAAG+B,EACH,EAAGC,EACH,EAAGH,EAAQ,KACX,EAAGA,EAAQ,GACb,EAAGA,CAAO,EACJjX,EAASwU,GAAc6C,EAAc,OAAOC,CAAe,EAAG7C,CAAM,EAC1E0B,GAASpC,EAAM,SAAUxG,EAAWkH,EAAQzU,CAAM,EAClDmW,GAASkB,EAAe9J,EAAWkH,EAAQzU,CAAM,EAC7CmW,GAASmB,EAAiB/J,EAAWkH,EAAQzU,CAAM,GACrDmW,GAASkB,EAAe9J,EAAWkH,EAAQzU,CAAM,EAEnD4V,GAAiBrI,CAAS,EAC1BqJ,GAAW7C,EAAM,WAAYxG,EAAWkH,EAAQzU,CAAM,EACtDuN,EAAU,GAAKA,EAAU,EACzBA,EAAU,GAAKA,EAAU,EACzBqJ,GAAW7C,EAAM,eAAgBxG,EAAWkH,EAAQzU,CAAM,EAC1DhH,EAAM,UAAY,CAChB,KAAMuU,EAAU,KAChB,IAAKA,EAAU,IACf,MAAOA,EAAU,KAAOA,EAAU,EAClC,OAAQA,EAAU,IAAMA,EAAU,EAClC,OAAQA,EAAU,EAClB,MAAOA,EAAU,CACnB,EACAgK,EAAKxD,EAAM,UAAWa,GAAU,CAC9B,IAAMX,EAAMW,EAAO,IACnB,OAAO,OAAOX,EAAKjb,EAAM,SAAS,EAClCib,EAAI,OAAO1G,EAAU,EAAGA,EAAU,EAAG,CACnC,KAAM,EACN,IAAK,EACL,MAAO,EACP,OAAQ,CACV,CAAC,CACH,CAAC,CACH,CACF,EACMkK,GAAN,KAAmB,CACjB,eAAeC,EAAQC,EAAa,CAAC,CACrC,eAAenT,EAAS,CACtB,MAAO,EACT,CACA,iBAAiBxL,EAAOG,EAAMye,EAAU,CAAC,CACzC,oBAAoB5e,EAAOG,EAAMye,EAAU,CAAC,CAC5C,qBAAsB,CACpB,MAAO,EACT,CACA,eAAevW,EAASqV,EAAOC,EAAQgB,EAAa,CAClD,OAAAjB,EAAQ,KAAK,IAAI,EAAGA,GAASrV,EAAQ,KAAK,EAC1CsV,EAASA,GAAUtV,EAAQ,OACpB,CACL,MAAAqV,EACA,OAAQ,KAAK,IAAI,EAAGiB,EAAc,KAAK,MAAMjB,EAAQiB,CAAW,EAAIhB,CAAM,CAC5E,CACF,CACA,WAAWe,EAAQ,CACjB,MAAO,EACT,CACA,aAAa9b,EAAQ,CAAC,CACxB,EACMic,GAAN,cAA4BJ,EAAa,CACvC,eAAe7d,EAAM,CACnB,OAAOA,GAAQA,EAAK,YAAcA,EAAK,WAAW,IAAI,GAAK,IAC7D,CACA,aAAagC,EAAQ,CACnBA,EAAO,QAAQ,UAAY,EAC7B,CACF,EACMkc,GAAc,WACdC,GAAc,CAClB,WAAY,YACZ,UAAW,YACX,SAAU,UACV,aAAc,aACd,YAAa,YACb,YAAa,YACb,UAAW,UACX,aAAc,WACd,WAAY,UACd,EACMC,GAAgBpb,GAASA,IAAU,MAAQA,IAAU,GAC3D,SAASqb,GAAWP,EAAQC,EAAa,CACvC,IAAM1K,EAAQyK,EAAO,MACfQ,EAAeR,EAAO,aAAa,QAAQ,EAC3CS,EAAcT,EAAO,aAAa,OAAO,EAc/C,GAbAA,EAAOI,EAAW,EAAI,CACpB,QAAS,CACP,OAAQI,EACR,MAAOC,EACP,MAAO,CACL,QAASlL,EAAM,QACf,OAAQA,EAAM,OACd,MAAOA,EAAM,KACf,CACF,CACF,EACAA,EAAM,QAAUA,EAAM,SAAW,QACjCA,EAAM,UAAYA,EAAM,WAAa,aACjC+K,GAAcG,CAAW,EAAG,CAC9B,IAAMC,EAAeC,GAAaX,EAAQ,OAAO,EAC7CU,IAAiB,SACnBV,EAAO,MAAQU,EAEnB,CACA,GAAIJ,GAAcE,CAAY,EAC5B,GAAIR,EAAO,MAAM,SAAW,GAC1BA,EAAO,OAASA,EAAO,OAASC,GAAe,OAC1C,CACL,IAAMW,EAAgBD,GAAaX,EAAQ,QAAQ,EAC/CY,IAAkB,SACpBZ,EAAO,OAASY,EAEpB,CAEF,OAAOZ,CACT,CACA,IAAMa,GAAuBC,GAA+B,CAC1D,QAAS,EACX,EAAI,GACJ,SAASC,GAAYC,EAAMvf,EAAMye,EAAU,CACrCc,GACFA,EAAK,iBAAiBvf,EAAMye,EAAUW,EAAoB,CAE9D,CACA,SAASI,GAAe3f,EAAOG,EAAMye,EAAU,CACzC5e,GAASA,EAAM,QACjBA,EAAM,OAAO,oBAAoBG,EAAMye,EAAUW,EAAoB,CAEzE,CACA,SAASK,GAAgB9e,EAAOd,EAAO,CACrC,IAAMG,EAAO4e,GAAYje,EAAM,IAAI,GAAKA,EAAM,KACxC,CACJ,EAAA6D,EACA,EAAAC,CACF,EAAI2V,GAAoBzZ,EAAOd,CAAK,EACpC,MAAO,CACL,KAAAG,EACA,MAAAH,EACA,OAAQc,EACR,EAAG6D,IAAM,OAAYA,EAAI,KACzB,EAAGC,IAAM,OAAYA,EAAI,IAC3B,CACF,CACA,SAASib,GAAiBC,EAAUpB,EAAQ,CAC1C,QAAWgB,KAAQI,EACjB,GAAIJ,IAAShB,GAAUgB,EAAK,SAAShB,CAAM,EACzC,MAAO,EAGb,CACA,SAASqB,GAAqB/f,EAAOG,EAAMye,EAAU,CACnD,IAAMF,EAAS1e,EAAM,OACfggB,EAAW,IAAI,iBAAiBC,GAAW,CAC/C,IAAIC,EAAU,GACd,QAAWhS,KAAS+R,EAClBC,EAAUA,GAAWL,GAAiB3R,EAAM,WAAYwQ,CAAM,EAC9DwB,EAAUA,GAAW,CAACL,GAAiB3R,EAAM,aAAcwQ,CAAM,EAE/DwB,GACFtB,EAAS,CAEb,CAAC,EACD,OAAAoB,EAAS,QAAQ,SAAU,CACzB,UAAW,GACX,QAAS,EACX,CAAC,EACMA,CACT,CACA,SAASG,GAAqBngB,EAAOG,EAAMye,EAAU,CACnD,IAAMF,EAAS1e,EAAM,OACfggB,EAAW,IAAI,iBAAiBC,GAAW,CAC/C,IAAIC,EAAU,GACd,QAAWhS,KAAS+R,EAClBC,EAAUA,GAAWL,GAAiB3R,EAAM,aAAcwQ,CAAM,EAChEwB,EAAUA,GAAW,CAACL,GAAiB3R,EAAM,WAAYwQ,CAAM,EAE7DwB,GACFtB,EAAS,CAEb,CAAC,EACD,OAAAoB,EAAS,QAAQ,SAAU,CACzB,UAAW,GACX,QAAS,EACX,CAAC,EACMA,CACT,CACA,IAAMI,GAAqB,IAAI,IAC3BC,GAAsB,EAC1B,SAASC,IAAiB,CACxB,IAAMC,EAAM,OAAO,iBACfA,IAAQF,KAGZA,GAAsBE,EACtBH,GAAmB,QAAQ,CAACI,EAAQxgB,IAAU,CACxCA,EAAM,0BAA4BugB,GACpCC,EAAO,CAEX,CAAC,EACH,CACA,SAASC,GAA8BzgB,EAAOwgB,EAAQ,CAC/CJ,GAAmB,MACtB,OAAO,iBAAiB,SAAUE,EAAc,EAElDF,GAAmB,IAAIpgB,EAAOwgB,CAAM,CACtC,CACA,SAASE,GAAgC1gB,EAAO,CAC9CogB,GAAmB,OAAOpgB,CAAK,EAC1BogB,GAAmB,MACtB,OAAO,oBAAoB,SAAUE,EAAc,CAEvD,CACA,SAASK,GAAqB3gB,EAAOG,EAAMye,EAAU,CACnD,IAAMF,EAAS1e,EAAM,OACf4gB,EAAYlC,GAAUmC,GAAenC,CAAM,EACjD,GAAI,CAACkC,EACH,OAEF,IAAMJ,EAASM,GAAU,CAACpD,EAAOC,IAAW,CAC1C,IAAMoD,EAAIH,EAAU,YACpBhC,EAASlB,EAAOC,CAAM,EAClBoD,EAAIH,EAAU,aAChBhC,EAAS,CAEb,EAAG,MAAM,EACHoB,EAAW,IAAI,eAAeC,GAAW,CAC7C,IAAM/R,EAAQ+R,EAAQ,CAAC,EACjBvC,EAAQxP,EAAM,YAAY,MAC1ByP,EAASzP,EAAM,YAAY,OAC7BwP,IAAU,GAAKC,IAAW,GAG9B6C,EAAO9C,EAAOC,CAAM,CACtB,CAAC,EACD,OAAAqC,EAAS,QAAQY,CAAS,EAC1BH,GAA8BzgB,EAAOwgB,CAAM,EACpCR,CACT,CACA,SAASgB,GAAgBhhB,EAAOG,EAAM6f,EAAU,CAC1CA,GACFA,EAAS,WAAW,EAElB7f,IAAS,UACXugB,GAAgC1gB,CAAK,CAEzC,CACA,SAASihB,GAAqBjhB,EAAOG,EAAMye,EAAU,CACnD,IAAMF,EAAS1e,EAAM,OACfkhB,EAAQJ,GAAUhgB,GAAS,CAC3Bd,EAAM,MAAQ,MAChB4e,EAASgB,GAAgB9e,EAAOd,CAAK,CAAC,CAE1C,EAAGA,CAAK,EACR,OAAAyf,GAAYf,EAAQve,EAAM+gB,CAAK,EACxBA,CACT,CACA,IAAMC,GAAN,cAA0B1C,EAAa,CACrC,eAAeC,EAAQC,EAAa,CAClC,IAAMnT,EAAUkT,GAAUA,EAAO,YAAcA,EAAO,WAAW,IAAI,EACrE,OAAIlT,GAAWA,EAAQ,SAAWkT,GAChCO,GAAWP,EAAQC,CAAW,EACvBnT,GAEF,IACT,CACA,eAAeA,EAAS,CACtB,IAAMkT,EAASlT,EAAQ,OACvB,GAAI,CAACkT,EAAOI,EAAW,EACrB,MAAO,GAET,IAAMsC,EAAU1C,EAAOI,EAAW,EAAE,QACpC,CAAC,SAAU,OAAO,EAAE,QAAQhd,GAAQ,CAClC,IAAM8B,EAAQwd,EAAQtf,CAAI,EACtB8L,EAAchK,CAAK,EACrB8a,EAAO,gBAAgB5c,CAAI,EAE3B4c,EAAO,aAAa5c,EAAM8B,CAAK,CAEnC,CAAC,EACD,IAAMqQ,EAAQmN,EAAQ,OAAS,CAAC,EAChC,cAAO,KAAKnN,CAAK,EAAE,QAAQhR,GAAO,CAChCyb,EAAO,MAAMzb,CAAG,EAAIgR,EAAMhR,CAAG,CAC/B,CAAC,EACDyb,EAAO,MAAQA,EAAO,MACtB,OAAOA,EAAOI,EAAW,EAClB,EACT,CACA,iBAAiB9e,EAAOG,EAAMye,EAAU,CACtC,KAAK,oBAAoB5e,EAAOG,CAAI,EACpC,IAAMkhB,EAAUrhB,EAAM,WAAaA,EAAM,SAAW,CAAC,GAM/C2Y,EALW,CACf,OAAQoH,GACR,OAAQI,GACR,OAAQQ,EACV,EACyBxgB,CAAI,GAAK8gB,GAClCI,EAAQlhB,CAAI,EAAIwY,EAAQ3Y,EAAOG,EAAMye,CAAQ,CAC/C,CACA,oBAAoB5e,EAAOG,EAAM,CAC/B,IAAMkhB,EAAUrhB,EAAM,WAAaA,EAAM,SAAW,CAAC,GAC/CkhB,EAAQG,EAAQlhB,CAAI,EAC1B,GAAI,CAAC+gB,EACH,QAEe,CACf,OAAQF,GACR,OAAQA,GACR,OAAQA,EACV,EACyB7gB,CAAI,GAAKwf,IAC1B3f,EAAOG,EAAM+gB,CAAK,EAC1BG,EAAQlhB,CAAI,EAAI,MAClB,CACA,qBAAsB,CACpB,OAAO,OAAO,gBAChB,CACA,eAAeue,EAAQhB,EAAOC,EAAQgB,EAAa,CACjD,OAAO2C,GAAe5C,EAAQhB,EAAOC,EAAQgB,CAAW,CAC1D,CACA,WAAWD,EAAQ,CACjB,IAAMkC,EAAYlC,GAAUmC,GAAenC,CAAM,EACjD,MAAO,CAAC,EAAEkC,GAAaA,EAAU,YACnC,CACF,EACA,SAASW,GAAgB7C,EAAQ,CAC/B,MAAI,CAAC8C,GAAgB,GAAK,OAAO,gBAAoB,KAAe9C,aAAkB,gBAC7EG,GAEFsC,EACT,CACA,IAAMM,GAAN,KAAc,CACZ,OAAO,SAAW,CAAC,EACnB,OAAO,cAAgB,OACvB,EACA,EACA,OAAS,GACT,QACA,YACA,gBAAgBlI,EAAkB,CAChC,GAAM,CACJ,EAAA5U,EACA,EAAAC,CACF,EAAI,KAAK,SAAS,CAAC,IAAK,GAAG,EAAG2U,CAAgB,EAC9C,MAAO,CACL,EAAA5U,EACA,EAAAC,CACF,CACF,CACA,UAAW,CACT,OAAO0R,GAAS,KAAK,CAAC,GAAKA,GAAS,KAAK,CAAC,CAC5C,CACA,SAAS3S,EAAO+d,EAAO,CACrB,IAAMzhB,EAAQ,KAAK,YACnB,GAAI,CAACyhB,GAAS,CAACzhB,EAEb,OAAO,KAET,IAAM0hB,EAAM,CAAC,EACb,OAAAhe,EAAM,QAAQ7B,GAAQ,CACpB6f,EAAI7f,CAAI,EAAI7B,EAAM6B,CAAI,GAAK7B,EAAM6B,CAAI,EAAE,OAAO,EAAI7B,EAAM6B,CAAI,EAAE,IAAM,KAAKA,CAAI,CAC/E,CAAC,EACM6f,CACT,CACF,EACA,SAASC,GAAS1d,EAAO2d,EAAO,CAC9B,IAAMC,EAAW5d,EAAM,QAAQ,MACzB6d,EAAqBC,GAAkB9d,CAAK,EAC5C+d,EAAa,KAAK,IAAIH,EAAS,eAAiBC,EAAoBA,CAAkB,EACtFG,EAAeJ,EAAS,MAAM,QAAUK,GAAgBN,CAAK,EAAI,CAAC,EAClEO,EAAkBF,EAAa,OAC/BG,EAAQH,EAAa,CAAC,EACtB/R,EAAO+R,EAAaE,EAAkB,CAAC,EACvCE,EAAW,CAAC,EAClB,GAAIF,EAAkBH,EACpB,OAAAM,GAAWV,EAAOS,EAAUJ,EAAcE,EAAkBH,CAAU,EAC/DK,EAET,IAAM7N,EAAU+N,GAAiBN,EAAcL,EAAOI,CAAU,EAChE,GAAIG,EAAkB,EAAG,CACvB,IAAI1hB,EAAG2E,EACDod,EAAkBL,EAAkB,EAAI,KAAK,OAAOjS,EAAOkS,IAAUD,EAAkB,EAAE,EAAI,KAEnG,IADAM,GAAKb,EAAOS,EAAU7N,EAAS7G,EAAc6U,CAAe,EAAI,EAAIJ,EAAQI,EAAiBJ,CAAK,EAC7F3hB,EAAI,EAAG2E,EAAO+c,EAAkB,EAAG1hB,EAAI2E,EAAM3E,IAChDgiB,GAAKb,EAAOS,EAAU7N,EAASyN,EAAaxhB,CAAC,EAAGwhB,EAAaxhB,EAAI,CAAC,CAAC,EAErE,OAAAgiB,GAAKb,EAAOS,EAAU7N,EAAStE,EAAMvC,EAAc6U,CAAe,EAAIZ,EAAM,OAAS1R,EAAOsS,CAAe,EACpGH,CACT,CACA,OAAAI,GAAKb,EAAOS,EAAU7N,CAAO,EACtB6N,CACT,CACA,SAASN,GAAkB9d,EAAO,CAChC,IAAMye,EAASze,EAAM,QAAQ,OACvB0e,EAAa1e,EAAM,UAAU,EAC7B2e,EAAW3e,EAAM,QAAU0e,GAAcD,EAAS,EAAI,GACtDG,EAAW5e,EAAM,WAAa0e,EACpC,OAAO,KAAK,MAAM,KAAK,IAAIC,EAAUC,CAAQ,CAAC,CAChD,CACA,SAASN,GAAiBN,EAAcL,EAAOI,EAAY,CACzD,IAAMc,EAAmBC,GAAed,CAAY,EAC9CzN,EAAUoN,EAAM,OAASI,EAC/B,GAAI,CAACc,EACH,OAAO,KAAK,IAAItO,EAAS,CAAC,EAE5B,IAAMwO,EAAUC,GAAWH,CAAgB,EAC3C,QAASriB,EAAI,EAAG2E,EAAO4d,EAAQ,OAAS,EAAGviB,EAAI2E,EAAM3E,IAAK,CACxD,IAAMa,EAAS0hB,EAAQviB,CAAC,EACxB,GAAIa,EAASkT,EACX,OAAOlT,CAEX,CACA,OAAO,KAAK,IAAIkT,EAAS,CAAC,CAC5B,CACA,SAAS0N,GAAgBN,EAAO,CAC9B,IAAMvJ,EAAS,CAAC,EACZ5X,EAAG2E,EACP,IAAK3E,EAAI,EAAG2E,EAAOwc,EAAM,OAAQnhB,EAAI2E,EAAM3E,IACrCmhB,EAAMnhB,CAAC,EAAE,OACX4X,EAAO,KAAK5X,CAAC,EAGjB,OAAO4X,CACT,CACA,SAASiK,GAAWV,EAAOS,EAAUJ,EAAczN,EAAS,CAC1D,IAAIvK,EAAQ,EACR6D,EAAOmU,EAAa,CAAC,EACrBxhB,EAEJ,IADA+T,EAAU,KAAK,KAAKA,CAAO,EACtB/T,EAAI,EAAGA,EAAImhB,EAAM,OAAQnhB,IACxBA,IAAMqN,IACRuU,EAAS,KAAKT,EAAMnhB,CAAC,CAAC,EACtBwJ,IACA6D,EAAOmU,EAAahY,EAAQuK,CAAO,EAGzC,CACA,SAASiO,GAAKb,EAAOS,EAAU7N,EAAS0O,EAAYC,EAAU,CAC5D,IAAMnZ,EAAQf,EAAeia,EAAY,CAAC,EACpC1W,EAAM,KAAK,IAAIvD,EAAeka,EAAUvB,EAAM,MAAM,EAAGA,EAAM,MAAM,EACrE3X,EAAQ,EACR8G,EAAQtQ,EAAGqN,EAOf,IANA0G,EAAU,KAAK,KAAKA,CAAO,EACvB2O,IACFpS,EAASoS,EAAWD,EACpB1O,EAAUzD,EAAS,KAAK,MAAMA,EAASyD,CAAO,GAEhD1G,EAAO9D,EACA8D,EAAO,GACZ7D,IACA6D,EAAO,KAAK,MAAM9D,EAAQC,EAAQuK,CAAO,EAE3C,IAAK/T,EAAI,KAAK,IAAIuJ,EAAO,CAAC,EAAGvJ,EAAI+L,EAAK/L,IAChCA,IAAMqN,IACRuU,EAAS,KAAKT,EAAMnhB,CAAC,CAAC,EACtBwJ,IACA6D,EAAO,KAAK,MAAM9D,EAAQC,EAAQuK,CAAO,EAG/C,CACA,SAASuO,GAAerW,EAAK,CAC3B,IAAM0W,EAAM1W,EAAI,OACZjM,EAAG4iB,EACP,GAAID,EAAM,EACR,MAAO,GAET,IAAKC,EAAO3W,EAAI,CAAC,EAAGjM,EAAI,EAAGA,EAAI2iB,EAAK,EAAE3iB,EACpC,GAAIiM,EAAIjM,CAAC,EAAIiM,EAAIjM,EAAI,CAAC,IAAM4iB,EAC1B,MAAO,GAGX,OAAOA,CACT,CACA,IAAMC,GAAeC,GAASA,IAAU,OAAS,QAAUA,IAAU,QAAU,OAASA,EAClFC,GAAiB,CAACvf,EAAO+K,EAAM0T,IAAW1T,IAAS,OAASA,IAAS,OAAS/K,EAAM+K,CAAI,EAAI0T,EAASze,EAAM+K,CAAI,EAAI0T,EACnHe,GAAgB,CAACC,EAAaC,IAAkB,KAAK,IAAIA,GAAiBD,EAAaA,CAAW,EACxG,SAASE,GAAOlX,EAAKmX,EAAU,CAC7B,IAAMxL,EAAS,CAAC,EACVyL,EAAYpX,EAAI,OAASmX,EACzBT,EAAM1W,EAAI,OACZjM,EAAI,EACR,KAAOA,EAAI2iB,EAAK3iB,GAAKqjB,EACnBzL,EAAO,KAAK3L,EAAI,KAAK,MAAMjM,CAAC,CAAC,CAAC,EAEhC,OAAO4X,CACT,CACA,SAAS0L,GAAoB9f,EAAOyD,EAAOsc,EAAiB,CAC1D,IAAMjT,EAAS9M,EAAM,MAAM,OACrBggB,EAAa,KAAK,IAAIvc,EAAOqJ,EAAS,CAAC,EACvC/G,EAAQ/F,EAAM,YACduI,EAAMvI,EAAM,UACZigB,EAAU,KACZC,EAAYlgB,EAAM,gBAAgBggB,CAAU,EAC5CvB,EACJ,GAAI,EAAAsB,IACEjT,IAAW,EACb2R,EAAS,KAAK,IAAIyB,EAAYna,EAAOwC,EAAM2X,CAAS,EAC3Czc,IAAU,EACnBgb,GAAUze,EAAM,gBAAgB,CAAC,EAAIkgB,GAAa,EAElDzB,GAAUyB,EAAYlgB,EAAM,gBAAgBggB,EAAa,CAAC,GAAK,EAEjEE,GAAaF,EAAavc,EAAQgb,EAAS,CAACA,EACxCyB,EAAYna,EAAQka,GAAWC,EAAY3X,EAAM0X,IAIvD,OAAOC,CACT,CACA,SAASC,GAAeC,EAAQtT,EAAQ,CACtCuN,EAAK+F,EAAQ5Y,GAAS,CACpB,IAAM6Y,EAAK7Y,EAAM,GACX8Y,EAAQD,EAAG,OAAS,EACtB7jB,EACJ,GAAI8jB,EAAQxT,EAAQ,CAClB,IAAKtQ,EAAI,EAAGA,EAAI8jB,EAAO,EAAE9jB,EACvB,OAAOgL,EAAM,KAAK6Y,EAAG7jB,CAAC,CAAC,EAEzB6jB,EAAG,OAAO,EAAGC,CAAK,CACpB,CACF,CAAC,CACH,CACA,SAASC,GAAkBnhB,EAAS,CAClC,OAAOA,EAAQ,UAAYA,EAAQ,WAAa,CAClD,CACA,SAASohB,GAAephB,EAASqhB,EAAU,CACzC,GAAI,CAACrhB,EAAQ,QACX,MAAO,GAET,IAAMshB,EAAOC,EAAOvhB,EAAQ,KAAMqhB,CAAQ,EACpC1G,EAAUC,EAAU5a,EAAQ,OAAO,EAEzC,OADcH,EAAQG,EAAQ,IAAI,EAAIA,EAAQ,KAAK,OAAS,GAC7CshB,EAAK,WAAa3G,EAAQ,MAC3C,CACA,SAAS6G,GAAmB5c,EAAQhE,EAAO,CACzC,OAAOiE,GAAcD,EAAQ,CAC3B,MAAAhE,EACA,KAAM,OACR,CAAC,CACH,CACA,SAAS6gB,GAAkB7c,EAAQP,EAAOqd,EAAM,CAC9C,OAAO7c,GAAcD,EAAQ,CAC3B,KAAA8c,EACA,MAAArd,EACA,KAAM,MACR,CAAC,CACH,CACA,SAASsd,GAAWzB,EAAO9K,EAAUrU,EAAS,CAC5C,IAAIsd,EAAMuD,GAAmB1B,CAAK,EAClC,OAAInf,GAAWqU,IAAa,SAAW,CAACrU,GAAWqU,IAAa,WAC9DiJ,EAAM4B,GAAa5B,CAAG,GAEjBA,CACT,CACA,SAASwD,GAAUjhB,EAAOye,EAAQjK,EAAU8K,EAAO,CACjD,GAAM,CACJ,IAAA1U,EACA,KAAAiN,EACA,OAAAhN,EACA,MAAAiN,EACA,MAAAhc,CACF,EAAIkE,EACE,CACJ,UAAAqQ,EACA,OAAAvM,CACF,EAAIhI,EACAmS,EAAW,EACX0C,EAAUuQ,EAAQC,EAChB1H,EAAS5O,EAASD,EAClB4O,EAAQ1B,EAAQD,EACtB,GAAI7X,EAAM,aAAa,EAAG,CAExB,GADAkhB,EAASE,EAAe9B,EAAOzH,EAAMC,CAAK,EACtCnZ,EAAS6V,CAAQ,EAAG,CACtB,IAAM6M,EAAiB,OAAO,KAAK7M,CAAQ,EAAE,CAAC,EACxC9U,EAAQ8U,EAAS6M,CAAc,EACrCF,EAASrd,EAAOud,CAAc,EAAE,iBAAiB3hB,CAAK,EAAI+Z,EAASgF,CACrE,MAAWjK,IAAa,SACtB2M,GAAU9Q,EAAU,OAASA,EAAU,KAAO,EAAIoJ,EAASgF,EAE3D0C,EAAS5B,GAAevf,EAAOwU,EAAUiK,CAAM,EAEjD9N,EAAWmH,EAAQD,CACrB,KAAO,CACL,GAAIlZ,EAAS6V,CAAQ,EAAG,CACtB,IAAM6M,EAAiB,OAAO,KAAK7M,CAAQ,EAAE,CAAC,EACxC9U,EAAQ8U,EAAS6M,CAAc,EACrCH,EAASpd,EAAOud,CAAc,EAAE,iBAAiB3hB,CAAK,EAAI8Z,EAAQiF,CACpE,MAAWjK,IAAa,SACtB0M,GAAU7Q,EAAU,KAAOA,EAAU,OAAS,EAAImJ,EAAQiF,EAE1DyC,EAAS3B,GAAevf,EAAOwU,EAAUiK,CAAM,EAEjD0C,EAASC,EAAe9B,EAAOzU,EAAQD,CAAG,EAC1CqD,EAAWuG,IAAa,OAAS,CAACnF,EAAUA,CAC9C,CACA,MAAO,CACL,OAAA6R,EACA,OAAAC,EACA,SAAAxQ,EACA,SAAA1C,CACF,CACF,CACA,IAAMqT,GAAN,MAAMC,UAAchE,EAAQ,CAC1B,YAAY7f,EAAK,CACf,MAAM,EACN,KAAK,GAAKA,EAAI,GACd,KAAK,KAAOA,EAAI,KAChB,KAAK,QAAU,OACf,KAAK,IAAMA,EAAI,IACf,KAAK,MAAQA,EAAI,MACjB,KAAK,IAAM,OACX,KAAK,OAAS,OACd,KAAK,KAAO,OACZ,KAAK,MAAQ,OACb,KAAK,MAAQ,OACb,KAAK,OAAS,OACd,KAAK,SAAW,CACd,KAAM,EACN,MAAO,EACP,IAAK,EACL,OAAQ,CACV,EACA,KAAK,SAAW,OAChB,KAAK,UAAY,OACjB,KAAK,WAAa,OAClB,KAAK,cAAgB,OACrB,KAAK,YAAc,OACnB,KAAK,aAAe,OACpB,KAAK,KAAO,OACZ,KAAK,cAAgB,OACrB,KAAK,IAAM,OACX,KAAK,IAAM,OACX,KAAK,OAAS,OACd,KAAK,MAAQ,CAAC,EACd,KAAK,eAAiB,KACtB,KAAK,YAAc,KACnB,KAAK,YAAc,KACnB,KAAK,QAAU,EACf,KAAK,WAAa,EAClB,KAAK,kBAAoB,CAAC,EAC1B,KAAK,YAAc,OACnB,KAAK,UAAY,OACjB,KAAK,eAAiB,GACtB,KAAK,SAAW,OAChB,KAAK,SAAW,OAChB,KAAK,cAAgB,OACrB,KAAK,cAAgB,OACrB,KAAK,aAAe,EACpB,KAAK,aAAe,EACpB,KAAK,OAAS,CAAC,EACf,KAAK,kBAAoB,GACzB,KAAK,SAAW,MAClB,CACA,KAAK0B,EAAS,CACZ,KAAK,QAAUA,EAAQ,WAAW,KAAK,WAAW,CAAC,EACnD,KAAK,KAAOA,EAAQ,KACpB,KAAK,SAAW,KAAK,MAAMA,EAAQ,GAAG,EACtC,KAAK,SAAW,KAAK,MAAMA,EAAQ,GAAG,EACtC,KAAK,cAAgB,KAAK,MAAMA,EAAQ,YAAY,EACpD,KAAK,cAAgB,KAAK,MAAMA,EAAQ,YAAY,CACtD,CACA,MAAMoiB,EAAK/d,EAAO,CAChB,OAAO+d,CACT,CACA,eAAgB,CACd,GAAI,CACF,SAAAC,EACA,SAAAC,EACA,cAAAC,EACA,cAAAC,CACF,EAAI,KACJ,OAAAH,EAAWI,EAAgBJ,EAAU,OAAO,iBAAiB,EAC7DC,EAAWG,EAAgBH,EAAU,OAAO,iBAAiB,EAC7DC,EAAgBE,EAAgBF,EAAe,OAAO,iBAAiB,EACvEC,EAAgBC,EAAgBD,EAAe,OAAO,iBAAiB,EAChE,CACL,IAAKC,EAAgBJ,EAAUE,CAAa,EAC5C,IAAKE,EAAgBH,EAAUE,CAAa,EAC5C,WAAYjgB,EAAe8f,CAAQ,EACnC,WAAY9f,EAAe+f,CAAQ,CACrC,CACF,CACA,UAAU/c,EAAU,CAClB,GAAI,CACF,IAAAvE,EACA,IAAAC,EACA,WAAAsC,EACA,WAAAC,CACF,EAAI,KAAK,cAAc,EACnB8D,EACJ,GAAI/D,GAAcC,EAChB,MAAO,CACL,IAAAxC,EACA,IAAAC,CACF,EAEF,IAAMyhB,EAAQ,KAAK,wBAAwB,EAC3C,QAAStlB,EAAI,EAAG2E,EAAO2gB,EAAM,OAAQtlB,EAAI2E,EAAM,EAAE3E,EAC/CkK,EAAQob,EAAMtlB,CAAC,EAAE,WAAW,UAAU,KAAMmI,CAAQ,EAC/ChC,IACHvC,EAAM,KAAK,IAAIA,EAAKsG,EAAM,GAAG,GAE1B9D,IACHvC,EAAM,KAAK,IAAIA,EAAKqG,EAAM,GAAG,GAGjC,OAAAtG,EAAMwC,GAAcxC,EAAMC,EAAMA,EAAMD,EACtCC,EAAMsC,GAAcvC,EAAMC,EAAMD,EAAMC,EAC/B,CACL,IAAKwhB,EAAgBzhB,EAAKyhB,EAAgBxhB,EAAKD,CAAG,CAAC,EACnD,IAAKyhB,EAAgBxhB,EAAKwhB,EAAgBzhB,EAAKC,CAAG,CAAC,CACrD,CACF,CACA,YAAa,CACX,MAAO,CACL,KAAM,KAAK,aAAe,EAC1B,IAAK,KAAK,YAAc,EACxB,MAAO,KAAK,cAAgB,EAC5B,OAAQ,KAAK,eAAiB,CAChC,CACF,CACA,UAAW,CACT,OAAO,KAAK,KACd,CACA,WAAY,CACV,IAAMyB,EAAO,KAAK,MAAM,KACxB,OAAO,KAAK,QAAQ,SAAW,KAAK,aAAa,EAAIA,EAAK,QAAUA,EAAK,UAAYA,EAAK,QAAU,CAAC,CACvG,CACA,cAAcuO,EAAY,KAAK,MAAM,UAAW,CAE9C,OADc,KAAK,cAAgB,KAAK,YAAc,KAAK,mBAAmBA,CAAS,EAEzF,CACA,cAAe,CACb,KAAK,OAAS,CAAC,EACf,KAAK,kBAAoB,EAC3B,CACA,cAAe,CACb0R,EAAS,KAAK,QAAQ,aAAc,CAAC,IAAI,CAAC,CAC5C,CACA,OAAOpR,EAAUC,EAAWoR,EAAS,CACnC,GAAM,CACJ,YAAAC,EACA,MAAAC,EACA,MAAOtE,CACT,EAAI,KAAK,QACHuE,EAAavE,EAAS,WAC5B,KAAK,aAAa,EAClB,KAAK,SAAWjN,EAChB,KAAK,UAAYC,EACjB,KAAK,SAAWoR,EAAU,OAAO,OAAO,CACtC,KAAM,EACN,MAAO,EACP,IAAK,EACL,OAAQ,CACV,EAAGA,CAAO,EACV,KAAK,MAAQ,KACb,KAAK,YAAc,KACnB,KAAK,eAAiB,KACtB,KAAK,YAAc,KACnB,KAAK,oBAAoB,EACzB,KAAK,cAAc,EACnB,KAAK,mBAAmB,EACxB,KAAK,WAAa,KAAK,aAAa,EAAI,KAAK,MAAQA,EAAQ,KAAOA,EAAQ,MAAQ,KAAK,OAASA,EAAQ,IAAMA,EAAQ,OACnH,KAAK,oBACR,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,EACzB,KAAK,gBAAgB,EACrB,KAAK,OAASI,GAAU,KAAMF,EAAOD,CAAW,EAChD,KAAK,kBAAoB,IAE3B,KAAK,iBAAiB,EACtB,KAAK,MAAQ,KAAK,WAAW,GAAK,CAAC,EACnC,KAAK,gBAAgB,EACrB,IAAMI,EAAkBF,EAAa,KAAK,MAAM,OAChD,KAAK,sBAAsBE,EAAkB1C,GAAO,KAAK,MAAOwC,CAAU,EAAI,KAAK,KAAK,EACxF,KAAK,UAAU,EACf,KAAK,6BAA6B,EAClC,KAAK,uBAAuB,EAC5B,KAAK,4BAA4B,EAC7BvE,EAAS,UAAYA,EAAS,UAAYA,EAAS,SAAW,UAChE,KAAK,MAAQF,GAAS,KAAM,KAAK,KAAK,EACtC,KAAK,YAAc,KACnB,KAAK,cAAc,GAEjB2E,GACF,KAAK,sBAAsB,KAAK,KAAK,EAEvC,KAAK,UAAU,EACf,KAAK,IAAI,EACT,KAAK,SAAS,EACd,KAAK,YAAY,CACnB,CACA,WAAY,CACV,IAAIC,EAAgB,KAAK,QAAQ,QAC7BtV,EAAYC,EACZ,KAAK,aAAa,GACpBD,EAAa,KAAK,KAClBC,EAAW,KAAK,QAEhBD,EAAa,KAAK,IAClBC,EAAW,KAAK,OAChBqV,EAAgB,CAACA,GAEnB,KAAK,YAActV,EACnB,KAAK,UAAYC,EACjB,KAAK,eAAiBqV,EACtB,KAAK,QAAUrV,EAAWD,EAC1B,KAAK,eAAiB,KAAK,QAAQ,aACrC,CACA,aAAc,CACZ+U,EAAS,KAAK,QAAQ,YAAa,CAAC,IAAI,CAAC,CAC3C,CACA,qBAAsB,CACpBA,EAAS,KAAK,QAAQ,oBAAqB,CAAC,IAAI,CAAC,CACnD,CACA,eAAgB,CACV,KAAK,aAAa,GACpB,KAAK,MAAQ,KAAK,SAClB,KAAK,KAAO,EACZ,KAAK,MAAQ,KAAK,QAElB,KAAK,OAAS,KAAK,UACnB,KAAK,IAAM,EACX,KAAK,OAAS,KAAK,QAErB,KAAK,YAAc,EACnB,KAAK,WAAa,EAClB,KAAK,aAAe,EACpB,KAAK,cAAgB,CACvB,CACA,oBAAqB,CACnBA,EAAS,KAAK,QAAQ,mBAAoB,CAAC,IAAI,CAAC,CAClD,CACA,WAAWtV,EAAM,CACf,KAAK,MAAM,cAAcA,EAAM,KAAK,WAAW,CAAC,EAChDsV,EAAS,KAAK,QAAQtV,CAAI,EAAG,CAAC,IAAI,CAAC,CACrC,CACA,kBAAmB,CACjB,KAAK,WAAW,kBAAkB,CACpC,CACA,qBAAsB,CAAC,CACvB,iBAAkB,CAChB,KAAK,WAAW,iBAAiB,CACnC,CACA,kBAAmB,CACjB,KAAK,WAAW,kBAAkB,CACpC,CACA,YAAa,CACX,MAAO,CAAC,CACV,CACA,iBAAkB,CAChB,KAAK,WAAW,iBAAiB,CACnC,CACA,6BAA8B,CAC5BsV,EAAS,KAAK,QAAQ,4BAA6B,CAAC,IAAI,CAAC,CAC3D,CACA,mBAAmBpE,EAAO,CACxB,IAAMC,EAAW,KAAK,QAAQ,MAC1BphB,EAAG2E,EAAM2f,EACb,IAAKtkB,EAAI,EAAG2E,EAAOwc,EAAM,OAAQnhB,EAAI2E,EAAM3E,IACzCskB,EAAOnD,EAAMnhB,CAAC,EACdskB,EAAK,MAAQiB,EAASnE,EAAS,SAAU,CAACkD,EAAK,MAAOtkB,EAAGmhB,CAAK,EAAG,IAAI,CAEzE,CACA,4BAA6B,CAC3BoE,EAAS,KAAK,QAAQ,2BAA4B,CAAC,IAAI,CAAC,CAC1D,CACA,8BAA+B,CAC7BA,EAAS,KAAK,QAAQ,6BAA8B,CAAC,IAAI,CAAC,CAC5D,CACA,wBAAyB,CACvB,IAAM3iB,EAAU,KAAK,QACfwe,EAAWxe,EAAQ,MACnBmjB,EAAW/C,GAAc,KAAK,MAAM,OAAQpgB,EAAQ,MAAM,aAAa,EACvEojB,EAAc5E,EAAS,aAAe,EACtC6E,EAAc7E,EAAS,YACzB8E,EAAgBF,EAChBG,EAAW/R,EAAWgS,EAC1B,GAAI,CAAC,KAAK,WAAW,GAAK,CAAChF,EAAS,SAAW4E,GAAeC,GAAeF,GAAY,GAAK,CAAC,KAAK,aAAa,EAAG,CAClH,KAAK,cAAgBC,EACrB,MACF,CACA,IAAMK,EAAa,KAAK,eAAe,EACjCC,EAAgBD,EAAW,OAAO,MAClCE,EAAiBF,EAAW,QAAQ,OACpClS,EAAWqS,EAAY,KAAK,MAAM,MAAQF,EAAe,EAAG,KAAK,QAAQ,EAC/EH,EAAYvjB,EAAQ,OAAS,KAAK,SAAWmjB,EAAW5R,GAAY4R,EAAW,GAC3EO,EAAgB,EAAIH,IACtBA,EAAYhS,GAAY4R,GAAYnjB,EAAQ,OAAS,GAAM,IAC3DwR,EAAY,KAAK,UAAY2P,GAAkBnhB,EAAQ,IAAI,EAAIwe,EAAS,QAAU4C,GAAephB,EAAQ,MAAO,KAAK,MAAM,QAAQ,IAAI,EACvIwjB,EAAmB,KAAK,KAAKE,EAAgBA,EAAgBC,EAAiBA,CAAc,EAC5FL,EAAgBO,GAAU,KAAK,IAAI,KAAK,KAAKD,GAAaH,EAAW,QAAQ,OAAS,GAAKF,EAAW,GAAI,CAAC,CAAC,EAAG,KAAK,KAAKK,EAAYpS,EAAYgS,EAAkB,GAAI,CAAC,CAAC,EAAI,KAAK,KAAKI,EAAYD,EAAiBH,EAAkB,GAAI,CAAC,CAAC,CAAC,CAAC,EAC9OF,EAAgB,KAAK,IAAIF,EAAa,KAAK,IAAIC,EAAaC,CAAa,CAAC,GAE5E,KAAK,cAAgBA,CACvB,CACA,6BAA8B,CAC5BX,EAAS,KAAK,QAAQ,4BAA6B,CAAC,IAAI,CAAC,CAC3D,CACA,eAAgB,CAAC,CACjB,WAAY,CACVA,EAAS,KAAK,QAAQ,UAAW,CAAC,IAAI,CAAC,CACzC,CACA,KAAM,CACJ,IAAMjP,EAAU,CACd,MAAO,EACP,OAAQ,CACV,EACM,CACJ,MAAAhX,EACA,QAAS,CACP,MAAO8hB,EACP,MAAOsF,EACP,KAAMC,CACR,CACF,EAAI,KACEC,EAAU,KAAK,WAAW,EAC1BC,EAAe,KAAK,aAAa,EACvC,GAAID,EAAS,CACX,IAAME,EAAc9C,GAAe0C,EAAWpnB,EAAM,QAAQ,IAAI,EAQhE,GAPIunB,GACFvQ,EAAQ,MAAQ,KAAK,SACrBA,EAAQ,OAASyN,GAAkB4C,CAAQ,EAAIG,IAE/CxQ,EAAQ,OAAS,KAAK,UACtBA,EAAQ,MAAQyN,GAAkB4C,CAAQ,EAAIG,GAE5C1F,EAAS,SAAW,KAAK,MAAM,OAAQ,CACzC,GAAM,CACJ,MAAAO,EACA,KAAAlS,EACA,OAAAsX,EACA,QAAAC,CACF,EAAI,KAAK,eAAe,EAClBC,EAAc7F,EAAS,QAAU,EACjC8F,EAAetT,GAAU,KAAK,aAAa,EAC3CuT,EAAM,KAAK,IAAID,CAAY,EAC3BE,EAAM,KAAK,IAAIF,CAAY,EACjC,GAAIL,EAAc,CAChB,IAAMQ,EAAcjG,EAAS,OAAS,EAAIgG,EAAML,EAAO,MAAQI,EAAMH,EAAQ,OAC7E1Q,EAAQ,OAAS,KAAK,IAAI,KAAK,UAAWA,EAAQ,OAAS+Q,EAAcJ,CAAW,CACtF,KAAO,CACL,IAAMK,EAAalG,EAAS,OAAS,EAAI+F,EAAMJ,EAAO,MAAQK,EAAMJ,EAAQ,OAC5E1Q,EAAQ,MAAQ,KAAK,IAAI,KAAK,SAAUA,EAAQ,MAAQgR,EAAaL,CAAW,CAClF,CACA,KAAK,kBAAkBtF,EAAOlS,EAAM2X,EAAKD,CAAG,CAC9C,CACF,CACA,KAAK,eAAe,EAChBN,GACF,KAAK,MAAQ,KAAK,QAAUvnB,EAAM,MAAQ,KAAK,SAAS,KAAO,KAAK,SAAS,MAC7E,KAAK,OAASgX,EAAQ,SAEtB,KAAK,MAAQA,EAAQ,MACrB,KAAK,OAAS,KAAK,QAAUhX,EAAM,OAAS,KAAK,SAAS,IAAM,KAAK,SAAS,OAElF,CACA,kBAAkBqiB,EAAOlS,EAAM2X,EAAKD,EAAK,CACvC,GAAM,CACJ,MAAO,CACL,MAAArE,EACA,QAAAvF,CACF,EACA,SAAAvF,CACF,EAAI,KAAK,QACHuP,EAAY,KAAK,gBAAkB,EACnCC,EAAmBxP,IAAa,OAAS,KAAK,OAAS,IAC7D,GAAI,KAAK,aAAa,EAAG,CACvB,IAAMyP,EAAa,KAAK,gBAAgB,CAAC,EAAI,KAAK,KAC5CC,EAAc,KAAK,MAAQ,KAAK,gBAAgB,KAAK,MAAM,OAAS,CAAC,EACvEC,EAAc,EACdC,EAAe,EACfL,EACEC,GACFG,EAAcR,EAAMxF,EAAM,MAC1BiG,EAAeR,EAAM3X,EAAK,SAE1BkY,EAAcP,EAAMzF,EAAM,OAC1BiG,EAAeT,EAAM1X,EAAK,OAEnBqT,IAAU,QACnB8E,EAAenY,EAAK,MACXqT,IAAU,MACnB6E,EAAchG,EAAM,MACXmB,IAAU,UACnB6E,EAAchG,EAAM,MAAQ,EAC5BiG,EAAenY,EAAK,MAAQ,GAE9B,KAAK,YAAc,KAAK,KAAKkY,EAAcF,EAAalK,GAAW,KAAK,OAAS,KAAK,MAAQkK,GAAa,CAAC,EAC5G,KAAK,aAAe,KAAK,KAAKG,EAAeF,EAAcnK,GAAW,KAAK,OAAS,KAAK,MAAQmK,GAAc,CAAC,CAClH,KAAO,CACL,IAAIG,EAAapY,EAAK,OAAS,EAC3BqY,EAAgBnG,EAAM,OAAS,EAC/BmB,IAAU,SACZ+E,EAAa,EACbC,EAAgBnG,EAAM,QACbmB,IAAU,QACnB+E,EAAapY,EAAK,OAClBqY,EAAgB,GAElB,KAAK,WAAaD,EAAatK,EAC/B,KAAK,cAAgBuK,EAAgBvK,CACvC,CACF,CACA,gBAAiB,CACX,KAAK,WACP,KAAK,SAAS,KAAO,KAAK,IAAI,KAAK,YAAa,KAAK,SAAS,IAAI,EAClE,KAAK,SAAS,IAAM,KAAK,IAAI,KAAK,WAAY,KAAK,SAAS,GAAG,EAC/D,KAAK,SAAS,MAAQ,KAAK,IAAI,KAAK,aAAc,KAAK,SAAS,KAAK,EACrE,KAAK,SAAS,OAAS,KAAK,IAAI,KAAK,cAAe,KAAK,SAAS,MAAM,EAE5E,CACA,UAAW,CACTgI,EAAS,KAAK,QAAQ,SAAU,CAAC,IAAI,CAAC,CACxC,CACA,cAAe,CACb,GAAM,CACJ,KAAAle,EACA,SAAA2Q,CACF,EAAI,KAAK,QACT,OAAOA,IAAa,OAASA,IAAa,UAAY3Q,IAAS,GACjE,CACA,YAAa,CACX,OAAO,KAAK,QAAQ,QACtB,CACA,sBAAsB8Z,EAAO,CAC3B,KAAK,4BAA4B,EACjC,KAAK,mBAAmBA,CAAK,EAC7B,IAAInhB,EAAG2E,EACP,IAAK3E,EAAI,EAAG2E,EAAOwc,EAAM,OAAQnhB,EAAI2E,EAAM3E,IACrCkN,EAAciU,EAAMnhB,CAAC,EAAE,KAAK,IAC9BmhB,EAAM,OAAOnhB,EAAG,CAAC,EACjB2E,IACA3E,KAGJ,KAAK,2BAA2B,CAClC,CACA,gBAAiB,CACf,IAAIqmB,EAAa,KAAK,YACtB,GAAI,CAACA,EAAY,CACf,IAAMV,EAAa,KAAK,QAAQ,MAAM,WAClCxE,EAAQ,KAAK,MACbwE,EAAaxE,EAAM,SACrBA,EAAQgC,GAAOhC,EAAOwE,CAAU,GAElC,KAAK,YAAcU,EAAa,KAAK,mBAAmBlF,EAAOA,EAAM,OAAQ,KAAK,QAAQ,MAAM,aAAa,CAC/G,CACA,OAAOkF,CACT,CACA,mBAAmBlF,EAAO7Q,EAAQ4S,EAAe,CAC/C,GAAM,CACJ,IAAAzY,EACA,kBAAmBmZ,CACrB,EAAI,KACEmE,EAAS,CAAC,EACVC,EAAU,CAAC,EACX3E,EAAY,KAAK,MAAM/S,EAAS0S,GAAc1S,EAAQ4S,CAAa,CAAC,EACtE+E,EAAkB,EAClBC,EAAmB,EACnBloB,EAAGoY,EAAG+P,EAAM7U,EAAO8U,EAAUC,EAAYrd,EAAOsd,EAAYtL,EAAOC,EAAQsL,EAC/E,IAAKvoB,EAAI,EAAGA,EAAIsQ,EAAQtQ,GAAKqjB,EAAW,CAUtC,GATA/P,EAAQ6N,EAAMnhB,CAAC,EAAE,MACjBooB,EAAW,KAAK,wBAAwBpoB,CAAC,EACzCyK,EAAI,KAAO4d,EAAaD,EAAS,OACjCpd,EAAQ4Y,EAAOyE,CAAU,EAAIzE,EAAOyE,CAAU,GAAK,CACjD,KAAM,CAAC,EACP,GAAI,CAAC,CACP,EACAC,EAAaF,EAAS,WACtBpL,EAAQC,EAAS,EACb,CAAC/P,EAAcoG,CAAK,GAAK,CAAC7Q,EAAQ6Q,CAAK,EACzC0J,EAAQwL,GAAa/d,EAAKO,EAAM,KAAMA,EAAM,GAAIgS,EAAO1J,CAAK,EAC5D2J,EAASqL,UACA7lB,EAAQ6Q,CAAK,EACtB,IAAK8E,EAAI,EAAG+P,EAAO7U,EAAM,OAAQ8E,EAAI+P,EAAM,EAAE/P,EAC3CmQ,EAAcjV,EAAM8E,CAAC,EACjB,CAAClL,EAAcqb,CAAW,GAAK,CAAC9lB,EAAQ8lB,CAAW,IACrDvL,EAAQwL,GAAa/d,EAAKO,EAAM,KAAMA,EAAM,GAAIgS,EAAOuL,CAAW,EAClEtL,GAAUqL,GAIhBP,EAAO,KAAK/K,CAAK,EACjBgL,EAAQ,KAAK/K,CAAM,EACnBgL,EAAkB,KAAK,IAAIjL,EAAOiL,CAAe,EACjDC,EAAmB,KAAK,IAAIjL,EAAQiL,CAAgB,CACtD,CACAvE,GAAeC,EAAQtT,CAAM,EAC7B,IAAMyW,EAASgB,EAAO,QAAQE,CAAe,EACvCjB,EAAUgB,EAAQ,QAAQE,CAAgB,EAC1CO,EAAUC,IAAQ,CACtB,MAAOX,EAAOW,CAAG,GAAK,EACtB,OAAQV,EAAQU,CAAG,GAAK,CAC1B,GACA,MAAO,CACL,MAAOD,EAAQ,CAAC,EAChB,KAAMA,EAAQnY,EAAS,CAAC,EACxB,OAAQmY,EAAQ1B,CAAM,EACtB,QAAS0B,EAAQzB,CAAO,EACxB,OAAAe,EACA,QAAAC,CACF,CACF,CACA,iBAAiB9kB,EAAO,CACtB,OAAOA,CACT,CACA,iBAAiBA,EAAO+D,EAAO,CAC7B,MAAO,IACT,CACA,iBAAiB0hB,EAAO,CAAC,CACzB,gBAAgB1hB,EAAO,CACrB,IAAMka,EAAQ,KAAK,MACnB,OAAIla,EAAQ,GAAKA,EAAQka,EAAM,OAAS,EAC/B,KAEF,KAAK,iBAAiBA,EAAMla,CAAK,EAAE,KAAK,CACjD,CACA,mBAAmB2hB,EAAS,CACtB,KAAK,iBACPA,EAAU,EAAIA,GAEhB,IAAMD,EAAQ,KAAK,YAAcC,EAAU,KAAK,QAChD,OAAOC,GAAY,KAAK,eAAiBC,GAAY,KAAK,MAAOH,EAAO,CAAC,EAAIA,CAAK,CACpF,CACA,mBAAmBA,EAAO,CACxB,IAAMC,GAAWD,EAAQ,KAAK,aAAe,KAAK,QAClD,OAAO,KAAK,eAAiB,EAAIC,EAAUA,CAC7C,CACA,cAAe,CACb,OAAO,KAAK,iBAAiB,KAAK,aAAa,CAAC,CAClD,CACA,cAAe,CACb,GAAM,CACJ,IAAAhlB,EACA,IAAAC,CACF,EAAI,KACJ,OAAOD,EAAM,GAAKC,EAAM,EAAIA,EAAMD,EAAM,GAAKC,EAAM,EAAID,EAAM,CAC/D,CACA,WAAWqD,EAAO,CAChB,IAAMka,EAAQ,KAAK,OAAS,CAAC,EAC7B,GAAIla,GAAS,GAAKA,EAAQka,EAAM,OAAQ,CACtC,IAAMmD,EAAOnD,EAAMla,CAAK,EACxB,OAAOqd,EAAK,WAAaA,EAAK,SAAWD,GAAkB,KAAK,WAAW,EAAGpd,EAAOqd,CAAI,EAC3F,CACA,OAAO,KAAK,WAAa,KAAK,SAAWF,GAAmB,KAAK,MAAM,WAAW,EAAG,IAAI,EAC3F,CACA,WAAY,CACV,IAAM2E,EAAc,KAAK,QAAQ,MAC3BC,EAAMpV,GAAU,KAAK,aAAa,EAClCuT,EAAM,KAAK,IAAI,KAAK,IAAI6B,CAAG,CAAC,EAC5B5B,EAAM,KAAK,IAAI,KAAK,IAAI4B,CAAG,CAAC,EAC5B3C,EAAa,KAAK,eAAe,EACjC9I,EAAUwL,EAAY,iBAAmB,EACzC1I,EAAIgG,EAAaA,EAAW,OAAO,MAAQ9I,EAAU,EACrD0L,EAAI5C,EAAaA,EAAW,QAAQ,OAAS9I,EAAU,EAC7D,OAAO,KAAK,aAAa,EAAI0L,EAAI9B,EAAM9G,EAAI+G,EAAM/G,EAAI8G,EAAM8B,EAAI7B,EAAM6B,EAAI7B,EAAM/G,EAAI8G,EAAM8B,EAAI9B,EAAM9G,EAAI+G,CACzG,CACA,YAAa,CACX,IAAMR,EAAU,KAAK,QAAQ,QAC7B,OAAIA,IAAY,OACP,CAAC,CAACA,EAEJ,KAAK,wBAAwB,EAAE,OAAS,CACjD,CACA,sBAAsB/S,EAAW,CAC/B,IAAMxM,EAAO,KAAK,KACZ/H,EAAQ,KAAK,MACbsD,EAAU,KAAK,QACf,CACJ,KAAAsmB,EACA,SAAAlR,EACA,OAAA/B,CACF,EAAIrT,EACEqf,EAASiH,EAAK,OACdrC,EAAe,KAAK,aAAa,EAEjC5D,EADQ,KAAK,MACO,QAAUhB,EAAS,EAAI,GAC3CkH,EAAKpF,GAAkBmF,CAAI,EAC3BnpB,EAAQ,CAAC,EACTqpB,EAAanT,EAAO,WAAW,KAAK,WAAW,CAAC,EAChDoT,EAAYD,EAAW,QAAUA,EAAW,MAAQ,EACpDE,EAAgBD,EAAY,EAC5BE,EAAmB,SAAUZ,EAAO,CACxC,OAAOG,GAAYxpB,EAAOqpB,EAAOU,CAAS,CAC5C,EACIG,EAAaxpB,EAAG0jB,EAAW+F,EAC3BC,EAAKC,EAAKC,EAAKC,EAAKC,EAAIC,EAAIC,EAAIC,EACpC,GAAIjS,IAAa,MACfwR,EAAcD,EAAiB,KAAK,MAAM,EAC1CI,EAAM,KAAK,OAASR,EACpBU,EAAML,EAAcF,EACpBS,EAAKR,EAAiB1V,EAAU,GAAG,EAAIyV,EACvCW,EAAKpW,EAAU,eACNmE,IAAa,SACtBwR,EAAcD,EAAiB,KAAK,GAAG,EACvCQ,EAAKlW,EAAU,IACfoW,EAAKV,EAAiB1V,EAAU,MAAM,EAAIyV,EAC1CK,EAAMH,EAAcF,EACpBO,EAAM,KAAK,IAAMV,UACRnR,IAAa,OACtBwR,EAAcD,EAAiB,KAAK,KAAK,EACzCG,EAAM,KAAK,MAAQP,EACnBS,EAAMJ,EAAcF,EACpBQ,EAAKP,EAAiB1V,EAAU,IAAI,EAAIyV,EACxCU,EAAKnW,EAAU,cACNmE,IAAa,QACtBwR,EAAcD,EAAiB,KAAK,IAAI,EACxCO,EAAKjW,EAAU,KACfmW,EAAKT,EAAiB1V,EAAU,KAAK,EAAIyV,EACzCI,EAAMF,EAAcF,EACpBM,EAAM,KAAK,KAAOT,UACT9hB,IAAS,IAAK,CACvB,GAAI2Q,IAAa,SACfwR,EAAcD,GAAkB1V,EAAU,IAAMA,EAAU,QAAU,EAAI,EAAG,UAClE1R,EAAS6V,CAAQ,EAAG,CAC7B,IAAM6M,EAAiB,OAAO,KAAK7M,CAAQ,EAAE,CAAC,EACxC9U,EAAQ8U,EAAS6M,CAAc,EACrC2E,EAAcD,EAAiB,KAAK,MAAM,OAAO1E,CAAc,EAAE,iBAAiB3hB,CAAK,CAAC,CAC1F,CACA6mB,EAAKlW,EAAU,IACfoW,EAAKpW,EAAU,OACf8V,EAAMH,EAAcF,EACpBO,EAAMF,EAAMR,CACd,SAAW9hB,IAAS,IAAK,CACvB,GAAI2Q,IAAa,SACfwR,EAAcD,GAAkB1V,EAAU,KAAOA,EAAU,OAAS,CAAC,UAC5D1R,EAAS6V,CAAQ,EAAG,CAC7B,IAAM6M,EAAiB,OAAO,KAAK7M,CAAQ,EAAE,CAAC,EACxC9U,EAAQ8U,EAAS6M,CAAc,EACrC2E,EAAcD,EAAiB,KAAK,MAAM,OAAO1E,CAAc,EAAE,iBAAiB3hB,CAAK,CAAC,CAC1F,CACAwmB,EAAMF,EAAcF,EACpBM,EAAMF,EAAMP,EACZW,EAAKjW,EAAU,KACfmW,EAAKnW,EAAU,KACjB,CACA,IAAMqW,GAAQ1hB,EAAe5F,EAAQ,MAAM,cAAeqgB,CAAW,EAC/DkH,EAAO,KAAK,IAAI,EAAG,KAAK,KAAKlH,EAAciH,EAAK,CAAC,EACvD,IAAKlqB,EAAI,EAAGA,EAAIijB,EAAajjB,GAAKmqB,EAAM,CACtC,IAAMrf,EAAU,KAAK,WAAW9K,CAAC,EAC3BoqB,EAAclB,EAAK,WAAWpe,CAAO,EACrCuf,GAAoBpU,EAAO,WAAWnL,CAAO,EAC7Cwf,EAAYF,EAAY,UACxBG,GAAYH,EAAY,MACxBI,GAAaH,GAAkB,MAAQ,CAAC,EACxCI,GAAmBJ,GAAkB,WACrClE,GAAYiE,EAAY,UACxBM,GAAYN,EAAY,UACxBO,GAAiBP,EAAY,gBAAkB,CAAC,EAChDQ,GAAuBR,EAAY,qBACzC1G,EAAYJ,GAAoB,KAAMtjB,EAAGiiB,CAAM,EAC3CyB,IAAc,SAGlB+F,EAAmBX,GAAYxpB,EAAOokB,EAAW4G,CAAS,EACtDzD,EACF6C,EAAME,EAAME,EAAKE,EAAKP,EAEtBE,EAAME,EAAME,EAAKE,EAAKR,EAExB1pB,EAAM,KAAK,CACT,IAAA2pB,EACA,IAAAC,EACA,IAAAC,EACA,IAAAC,EACA,GAAAC,EACA,GAAAC,EACA,GAAAC,EACA,GAAAC,EACA,MAAOK,EACP,MAAOC,GACP,WAAAC,GACA,iBAAAC,GACA,UAAAtE,GACA,UAAAuE,GACA,eAAAC,GACA,qBAAAC,EACF,CAAC,EACH,CACA,YAAK,aAAe3H,EACpB,KAAK,aAAeuG,EACbzpB,CACT,CACA,mBAAmB8T,EAAW,CAC5B,IAAMxM,EAAO,KAAK,KACZzE,EAAU,KAAK,QACf,CACJ,SAAAoV,EACA,MAAO+Q,CACT,EAAInmB,EACEikB,EAAe,KAAK,aAAa,EACjC1F,EAAQ,KAAK,MACb,CACJ,MAAA2B,EACA,WAAA+H,EACA,QAAAtN,EACA,OAAAuN,CACF,EAAI/B,EACEI,EAAKpF,GAAkBnhB,EAAQ,IAAI,EACnCmoB,EAAiB5B,EAAK5L,EACtByN,EAAkBF,EAAS,CAACvN,EAAUwN,EACtCtZ,EAAW,CAACmC,GAAU,KAAK,aAAa,EACxC7T,EAAQ,CAAC,EACXC,EAAG2E,EAAM2f,EAAMhR,EAAOrP,EAAGC,EAAGiP,EAAWwV,EAAOzE,EAAMoE,EAAY2C,EAAWC,EAC3EC,EAAe,SACnB,GAAInT,IAAa,MACf9T,EAAI,KAAK,OAAS8mB,EAClB7X,EAAY,KAAK,wBAAwB,UAChC6E,IAAa,SACtB9T,EAAI,KAAK,IAAM8mB,EACf7X,EAAY,KAAK,wBAAwB,UAChC6E,IAAa,OAAQ,CAC9B,IAAMiJ,EAAM,KAAK,wBAAwBkI,CAAE,EAC3ChW,EAAY8N,EAAI,UAChBhd,EAAIgd,EAAI,CACV,SAAWjJ,IAAa,QAAS,CAC/B,IAAMiJ,EAAM,KAAK,wBAAwBkI,CAAE,EAC3ChW,EAAY8N,EAAI,UAChBhd,EAAIgd,EAAI,CACV,SAAW5Z,IAAS,IAAK,CACvB,GAAI2Q,IAAa,SACf9T,GAAK2P,EAAU,IAAMA,EAAU,QAAU,EAAIkX,UACpC5oB,EAAS6V,CAAQ,EAAG,CAC7B,IAAM6M,EAAiB,OAAO,KAAK7M,CAAQ,EAAE,CAAC,EACxC9U,EAAQ8U,EAAS6M,CAAc,EACrC3gB,EAAI,KAAK,MAAM,OAAO2gB,CAAc,EAAE,iBAAiB3hB,CAAK,EAAI6nB,CAClE,CACA5X,EAAY,KAAK,wBAAwB,CAC3C,SAAW9L,IAAS,IAAK,CACvB,GAAI2Q,IAAa,SACf/T,GAAK4P,EAAU,KAAOA,EAAU,OAAS,EAAIkX,UACpC5oB,EAAS6V,CAAQ,EAAG,CAC7B,IAAM6M,EAAiB,OAAO,KAAK7M,CAAQ,EAAE,CAAC,EACxC9U,EAAQ8U,EAAS6M,CAAc,EACrC5gB,EAAI,KAAK,MAAM,OAAO4gB,CAAc,EAAE,iBAAiB3hB,CAAK,CAC9D,CACAiQ,EAAY,KAAK,wBAAwBgW,CAAE,EAAE,SAC/C,CACI9hB,IAAS,MACPyb,IAAU,QACZqI,EAAe,MACNrI,IAAU,QACnBqI,EAAe,WAGnB,IAAM9E,GAAa,KAAK,eAAe,EACvC,IAAKrmB,EAAI,EAAG2E,EAAOwc,EAAM,OAAQnhB,EAAI2E,EAAM,EAAE3E,EAAG,CAC9CskB,EAAOnD,EAAMnhB,CAAC,EACdsT,EAAQgR,EAAK,MACb,IAAM8F,EAAcrB,EAAY,WAAW,KAAK,WAAW/oB,CAAC,CAAC,EAC7D2oB,EAAQ,KAAK,gBAAgB3oB,CAAC,EAAI+oB,EAAY,YAC9C7E,EAAO,KAAK,wBAAwBlkB,CAAC,EACrCsoB,EAAapE,EAAK,WAClB+G,EAAYxoB,EAAQ6Q,CAAK,EAAIA,EAAM,OAAS,EAC5C,IAAM8X,EAAYH,EAAY,EACxBlqB,EAAQqpB,EAAY,MACpBiB,GAAcjB,EAAY,gBAC1BkB,EAAclB,EAAY,gBAC5BmB,GAAgBpY,EAChB0T,GACF5iB,EAAI0kB,EACAxV,IAAc,UACZnT,IAAM2E,EAAO,EACf4mB,GAAiB,KAAK,QAAQ,QAAoB,OAAV,QAC/BvrB,IAAM,EACfurB,GAAiB,KAAK,QAAQ,QAAmB,QAAT,OAExCA,GAAgB,UAGhBvT,IAAa,MACX6S,IAAe,QAAUpZ,IAAa,EACxCyZ,EAAa,CAACD,EAAY3C,EAAaA,EAAa,EAC3CuC,IAAe,SACxBK,EAAa,CAAC7E,GAAW,QAAQ,OAAS,EAAI+E,EAAY9C,EAAaA,EAEvE4C,EAAa,CAAC7E,GAAW,QAAQ,OAASiC,EAAa,EAGrDuC,IAAe,QAAUpZ,IAAa,EACxCyZ,EAAa5C,EAAa,EACjBuC,IAAe,SACxBK,EAAa7E,GAAW,QAAQ,OAAS,EAAI+E,EAAY9C,EAEzD4C,EAAa7E,GAAW,QAAQ,OAAS4E,EAAY3C,EAGrDwC,IACFI,GAAc,IAEZzZ,IAAa,GAAK,CAAC2Y,EAAY,oBACjCnmB,GAAKqkB,EAAa,EAAI,KAAK,IAAI7W,CAAQ,KAGzCvN,EAAIykB,EACJuC,GAAc,EAAID,GAAa3C,EAAa,GAE9C,IAAIkD,GACJ,GAAIpB,EAAY,kBAAmB,CACjC,IAAMqB,GAAejO,EAAU4M,EAAY,eAAe,EACpDnN,GAASoJ,GAAW,QAAQrmB,CAAC,EAC7Bgd,GAAQqJ,GAAW,OAAOrmB,CAAC,EAC7BoO,GAAM8c,EAAaO,GAAa,IAChCpQ,GAAO,EAAIoQ,GAAa,KAC5B,OAAQN,EAAc,CACpB,IAAK,SACH/c,IAAO6O,GAAS,EAChB,MACF,IAAK,SACH7O,IAAO6O,GACP,KACJ,CACA,OAAQ9J,EAAW,CACjB,IAAK,SACHkI,IAAQ2B,GAAQ,EAChB,MACF,IAAK,QACH3B,IAAQ2B,GACR,MACF,IAAK,QACChd,IAAM2E,EAAO,EACf0W,IAAQ2B,GACChd,EAAI,IACbqb,IAAQ2B,GAAQ,GAElB,KACJ,CACAwO,GAAW,CACT,KAAAnQ,GACA,IAAAjN,GACA,MAAO4O,GAAQyO,GAAa,MAC5B,OAAQxO,GAASwO,GAAa,OAC9B,MAAOrB,EAAY,aACrB,CACF,CACArqB,EAAM,KAAK,CACT,MAAAuT,EACA,KAAA4Q,EACA,WAAAgH,EACA,QAAS,CACP,SAAAzZ,EACA,MAAA1Q,EACA,YAAAsqB,GACA,YAAAC,EACA,UAAWC,GACX,aAAAJ,EACA,YAAa,CAAClnB,EAAGC,CAAC,EAClB,SAAAsnB,EACF,CACF,CAAC,CACH,CACA,OAAOzrB,CACT,CACA,yBAA0B,CACxB,GAAM,CACJ,SAAAiY,EACA,MAAAmJ,CACF,EAAI,KAAK,QAET,GADiB,CAACvN,GAAU,KAAK,aAAa,EAE5C,OAAOoE,IAAa,MAAQ,OAAS,QAEvC,IAAI8K,EAAQ,SACZ,OAAI3B,EAAM,QAAU,QAClB2B,EAAQ,OACC3B,EAAM,QAAU,MACzB2B,EAAQ,QACC3B,EAAM,QAAU,UACzB2B,EAAQ,SAEHA,CACT,CACA,wBAAwBqG,EAAI,CAC1B,GAAM,CACJ,SAAAnR,EACA,MAAO,CACL,WAAA6S,EACA,OAAAC,EACA,QAAAvN,CACF,CACF,EAAI,KAAK,QACH8I,EAAa,KAAK,eAAe,EACjC0E,EAAiB5B,EAAK5L,EACtBwJ,EAASV,EAAW,OAAO,MAC7BlT,EACAlP,EACJ,OAAI+T,IAAa,OACX8S,GACF7mB,EAAI,KAAK,MAAQsZ,EACbsN,IAAe,OACjB1X,EAAY,OACH0X,IAAe,UACxB1X,EAAY,SACZlP,GAAK8iB,EAAS,IAEd5T,EAAY,QACZlP,GAAK8iB,KAGP9iB,EAAI,KAAK,MAAQ8mB,EACbF,IAAe,OACjB1X,EAAY,QACH0X,IAAe,UACxB1X,EAAY,SACZlP,GAAK8iB,EAAS,IAEd5T,EAAY,OACZlP,EAAI,KAAK,OAGJ+T,IAAa,QAClB8S,GACF7mB,EAAI,KAAK,KAAOsZ,EACZsN,IAAe,OACjB1X,EAAY,QACH0X,IAAe,UACxB1X,EAAY,SACZlP,GAAK8iB,EAAS,IAEd5T,EAAY,OACZlP,GAAK8iB,KAGP9iB,EAAI,KAAK,KAAO8mB,EACZF,IAAe,OACjB1X,EAAY,OACH0X,IAAe,UACxB1X,EAAY,SACZlP,GAAK8iB,EAAS,IAEd5T,EAAY,QACZlP,EAAI,KAAK,QAIbkP,EAAY,QAEP,CACL,UAAAA,EACA,EAAAlP,CACF,CACF,CACA,mBAAoB,CAClB,GAAI,KAAK,QAAQ,MAAM,OACrB,OAEF,IAAM3E,EAAQ,KAAK,MACb0Y,EAAW,KAAK,QAAQ,SAC9B,GAAIA,IAAa,QAAUA,IAAa,QACtC,MAAO,CACL,IAAK,EACL,KAAM,KAAK,KACX,OAAQ1Y,EAAM,OACd,MAAO,KAAK,KACd,EAEF,GAAI0Y,IAAa,OAASA,IAAa,SACrC,MAAO,CACL,IAAK,KAAK,IACV,KAAM,EACN,OAAQ,KAAK,OACb,MAAO1Y,EAAM,KACf,CAEJ,CACA,gBAAiB,CACf,GAAM,CACJ,IAAAmL,EACA,QAAS,CACP,gBAAAihB,CACF,EACA,KAAArQ,EACA,IAAAjN,EACA,MAAA4O,EACA,OAAAC,CACF,EAAI,KACAyO,IACFjhB,EAAI,KAAK,EACTA,EAAI,UAAYihB,EAChBjhB,EAAI,SAAS4Q,EAAMjN,EAAK4O,EAAOC,CAAM,EACrCxS,EAAI,QAAQ,EAEhB,CACA,qBAAqBvH,EAAO,CAC1B,IAAMgmB,EAAO,KAAK,QAAQ,KAC1B,GAAI,CAAC,KAAK,WAAW,GAAK,CAACA,EAAK,QAC9B,MAAO,GAGT,IAAMjiB,EADQ,KAAK,MACC,UAAU7C,GAAKA,EAAE,QAAUlB,CAAK,EACpD,OAAI+D,GAAS,EACEiiB,EAAK,WAAW,KAAK,WAAWjiB,CAAK,CAAC,EACvC,UAEP,CACT,CACA,SAAS4M,EAAW,CAClB,IAAMqV,EAAO,KAAK,QAAQ,KACpBze,EAAM,KAAK,IACX1K,EAAQ,KAAK,iBAAmB,KAAK,eAAiB,KAAK,sBAAsB8T,CAAS,GAC5F7T,EAAG2E,EACDgnB,EAAW,CAACC,EAAIC,EAAItY,IAAU,CAC9B,CAACA,EAAM,OAAS,CAACA,EAAM,QAG3B9I,EAAI,KAAK,EACTA,EAAI,UAAY8I,EAAM,MACtB9I,EAAI,YAAc8I,EAAM,MACxB9I,EAAI,YAAY8I,EAAM,YAAc,CAAC,CAAC,EACtC9I,EAAI,eAAiB8I,EAAM,iBAC3B9I,EAAI,UAAU,EACdA,EAAI,OAAOmhB,EAAG,EAAGA,EAAG,CAAC,EACrBnhB,EAAI,OAAOohB,EAAG,EAAGA,EAAG,CAAC,EACrBphB,EAAI,OAAO,EACXA,EAAI,QAAQ,EACd,EACA,GAAIye,EAAK,QACP,IAAKlpB,EAAI,EAAG2E,EAAO5E,EAAM,OAAQC,EAAI2E,EAAM,EAAE3E,EAAG,CAC9C,IAAME,EAAOH,EAAMC,CAAC,EAChBkpB,EAAK,iBACPyC,EAAS,CACP,EAAGzrB,EAAK,GACR,EAAGA,EAAK,EACV,EAAG,CACD,EAAGA,EAAK,GACR,EAAGA,EAAK,EACV,EAAGA,CAAI,EAELgpB,EAAK,WACPyC,EAAS,CACP,EAAGzrB,EAAK,IACR,EAAGA,EAAK,GACV,EAAG,CACD,EAAGA,EAAK,IACR,EAAGA,EAAK,GACV,EAAG,CACD,MAAOA,EAAK,UACZ,MAAOA,EAAK,UACZ,WAAYA,EAAK,eACjB,iBAAkBA,EAAK,oBACzB,CAAC,CAEL,CAEJ,CACA,YAAa,CACX,GAAM,CACJ,MAAAZ,EACA,IAAAmL,EACA,QAAS,CACP,OAAAwL,EACA,KAAAiT,CACF,CACF,EAAI,KACEE,EAAanT,EAAO,WAAW,KAAK,WAAW,CAAC,EAChDoT,EAAYpT,EAAO,QAAUmT,EAAW,MAAQ,EACtD,GAAI,CAACC,EACH,OAEF,IAAMyC,EAAgB5C,EAAK,WAAW,KAAK,WAAW,CAAC,CAAC,EAAE,UACpDM,EAAc,KAAK,aACrBM,EAAIE,EAAID,EAAIE,EACZ,KAAK,aAAa,GACpBH,EAAKhB,GAAYxpB,EAAO,KAAK,KAAM+pB,CAAS,EAAIA,EAAY,EAC5DW,EAAKlB,GAAYxpB,EAAO,KAAK,MAAOwsB,CAAa,EAAIA,EAAgB,EACrE/B,EAAKE,EAAKT,IAEVO,EAAKjB,GAAYxpB,EAAO,KAAK,IAAK+pB,CAAS,EAAIA,EAAY,EAC3DY,EAAKnB,GAAYxpB,EAAO,KAAK,OAAQwsB,CAAa,EAAIA,EAAgB,EACtEhC,EAAKE,EAAKR,GAEZ/e,EAAI,KAAK,EACTA,EAAI,UAAY2e,EAAW,MAC3B3e,EAAI,YAAc2e,EAAW,MAC7B3e,EAAI,UAAU,EACdA,EAAI,OAAOqf,EAAIC,CAAE,EACjBtf,EAAI,OAAOuf,EAAIC,CAAE,EACjBxf,EAAI,OAAO,EACXA,EAAI,QAAQ,CACd,CACA,WAAWoJ,EAAW,CAEpB,GAAI,CADgB,KAAK,QAAQ,MAChB,QACf,OAEF,IAAMpJ,EAAM,KAAK,IACXE,EAAO,KAAK,kBAAkB,EAChCA,GACFohB,GAASthB,EAAKE,CAAI,EAEpB,IAAM5K,EAAQ,KAAK,cAAc8T,CAAS,EAC1C,QAAW3T,KAAQH,EAAO,CACxB,IAAMisB,EAAoB9rB,EAAK,QACzBkoB,EAAWloB,EAAK,KAChBoT,EAAQpT,EAAK,MACbgE,EAAIhE,EAAK,WACf+rB,GAAWxhB,EAAK6I,EAAO,EAAGpP,EAAGkkB,EAAU4D,CAAiB,CAC1D,CACIrhB,GACFuhB,GAAWzhB,CAAG,CAElB,CACA,WAAY,CACV,GAAM,CACJ,IAAAA,EACA,QAAS,CACP,SAAAuN,EACA,MAAAmU,EACA,QAAAxoB,CACF,CACF,EAAI,KACJ,GAAI,CAACwoB,EAAM,QACT,OAEF,IAAMjI,EAAOC,EAAOgI,EAAM,IAAI,EACxB5O,EAAUC,EAAU2O,EAAM,OAAO,EACjCrJ,EAAQqJ,EAAM,MAChBlK,EAASiC,EAAK,WAAa,EAC3BlM,IAAa,UAAYA,IAAa,UAAY7V,EAAS6V,CAAQ,GACrEiK,GAAU1E,EAAQ,OACd9a,EAAQ0pB,EAAM,IAAI,IACpBlK,GAAUiC,EAAK,YAAciI,EAAM,KAAK,OAAS,KAGnDlK,GAAU1E,EAAQ,IAEpB,GAAM,CACJ,OAAAmH,EACA,OAAAC,EACA,SAAAxQ,EACA,SAAA1C,CACF,EAAIgT,GAAU,KAAMxC,EAAQjK,EAAU8K,CAAK,EAC3CmJ,GAAWxhB,EAAK0hB,EAAM,KAAM,EAAG,EAAGjI,EAAM,CACtC,MAAOiI,EAAM,MACb,SAAAhY,EACA,SAAA1C,EACA,UAAW8S,GAAWzB,EAAO9K,EAAUrU,CAAO,EAC9C,aAAc,SACd,YAAa,CAAC+gB,EAAQC,CAAM,CAC9B,CAAC,CACH,CACA,KAAK9Q,EAAW,CACT,KAAK,WAAW,IAGrB,KAAK,eAAe,EACpB,KAAK,SAASA,CAAS,EACvB,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,KAAK,WAAWA,CAAS,EAC3B,CACA,SAAU,CACR,IAAMnQ,EAAO,KAAK,QACZ0oB,EAAK1oB,EAAK,OAASA,EAAK,MAAM,GAAK,EACnC2oB,EAAK7jB,EAAe9E,EAAK,MAAQA,EAAK,KAAK,EAAG,EAAE,EAChD4oB,EAAK9jB,EAAe9E,EAAK,QAAUA,EAAK,OAAO,EAAG,CAAC,EACzD,MAAI,CAAC,KAAK,WAAW,GAAK,KAAK,OAASqhB,EAAM,UAAU,KAC/C,CAAC,CACN,EAAGqH,EACH,KAAMvY,GAAa,CACjB,KAAK,KAAKA,CAAS,CACrB,CACF,CAAC,EAEI,CAAC,CACN,EAAGwY,EACH,KAAMxY,GAAa,CACjB,KAAK,eAAe,EACpB,KAAK,SAASA,CAAS,EACvB,KAAK,UAAU,CACjB,CACF,EAAG,CACD,EAAGyY,EACH,KAAM,IAAM,CACV,KAAK,WAAW,CAClB,CACF,EAAG,CACD,EAAGF,EACH,KAAMvY,GAAa,CACjB,KAAK,WAAWA,CAAS,CAC3B,CACF,CAAC,CACH,CACA,wBAAwBpU,EAAM,CAC5B,IAAM6lB,EAAQ,KAAK,MAAM,6BAA6B,EAChDxU,EAAS,KAAK,KAAO,SACrB8G,EAAS,CAAC,EACZ5X,EAAG2E,EACP,IAAK3E,EAAI,EAAG2E,EAAO2gB,EAAM,OAAQtlB,EAAI2E,EAAM,EAAE3E,EAAG,CAC9C,IAAMuF,EAAO+f,EAAMtlB,CAAC,EAChBuF,EAAKuL,CAAM,IAAM,KAAK,KAAO,CAACrR,GAAQ8F,EAAK,OAAS9F,IACtDmY,EAAO,KAAKrS,CAAI,CAEpB,CACA,OAAOqS,CACT,CACA,wBAAwB3Q,EAAO,CAC7B,IAAMvD,EAAO,KAAK,QAAQ,MAAM,WAAW,KAAK,WAAWuD,CAAK,CAAC,EACjE,OAAOkd,EAAOzgB,EAAK,IAAI,CACzB,CACA,YAAa,CACX,IAAM6oB,EAAW,KAAK,wBAAwB,CAAC,EAAE,WACjD,OAAQ,KAAK,aAAa,EAAI,KAAK,MAAQ,KAAK,QAAUA,CAC5D,CACF,EACMC,GAAN,KAAoB,CAClB,YAAY/sB,EAAMgtB,EAAOC,EAAU,CACjC,KAAK,KAAOjtB,EACZ,KAAK,MAAQgtB,EACb,KAAK,SAAWC,EAChB,KAAK,MAAQ,OAAO,OAAO,IAAI,CACjC,CACA,UAAUjtB,EAAM,CACd,OAAO,OAAO,UAAU,cAAc,KAAK,KAAK,KAAK,UAAWA,EAAK,SAAS,CAChF,CACA,SAASS,EAAM,CACb,IAAMysB,EAAQ,OAAO,eAAezsB,CAAI,EACpC0sB,EACAC,GAAkBF,CAAK,IACzBC,EAAc,KAAK,SAASD,CAAK,GAEnC,IAAM5sB,EAAQ,KAAK,MACb+sB,EAAK5sB,EAAK,GACVusB,EAAQ,KAAK,MAAQ,IAAMK,EACjC,GAAI,CAACA,EACH,MAAM,IAAI,MAAM,2BAA6B5sB,CAAI,EAEnD,OAAI4sB,KAAM/sB,IAGVA,EAAM+sB,CAAE,EAAI5sB,EACZ6sB,GAAiB7sB,EAAMusB,EAAOG,CAAW,EACrC,KAAK,UACPvqB,EAAS,SAASnC,EAAK,GAAIA,EAAK,SAAS,GAEpCusB,CACT,CACA,IAAIK,EAAI,CACN,OAAO,KAAK,MAAMA,CAAE,CACtB,CACA,WAAW5sB,EAAM,CACf,IAAMH,EAAQ,KAAK,MACb+sB,EAAK5sB,EAAK,GACVusB,EAAQ,KAAK,MACfK,KAAM/sB,GACR,OAAOA,EAAM+sB,CAAE,EAEbL,GAASK,KAAMzqB,EAASoqB,CAAK,IAC/B,OAAOpqB,EAASoqB,CAAK,EAAEK,CAAE,EACrB,KAAK,UACP,OAAOE,GAAUF,CAAE,EAGzB,CACF,EACA,SAASC,GAAiB7sB,EAAMusB,EAAOG,EAAa,CAClD,IAAMK,EAAeC,GAAM,OAAO,OAAO,IAAI,EAAG,CAACN,EAAcvqB,EAAS,IAAIuqB,CAAW,EAAI,CAAC,EAAGvqB,EAAS,IAAIoqB,CAAK,EAAGvsB,EAAK,QAAQ,CAAC,EAClImC,EAAS,IAAIoqB,EAAOQ,CAAY,EAC5B/sB,EAAK,eACPitB,GAAcV,EAAOvsB,EAAK,aAAa,EAErCA,EAAK,aACPmC,EAAS,SAASoqB,EAAOvsB,EAAK,WAAW,CAE7C,CACA,SAASitB,GAAcV,EAAOW,EAAQ,CACpC,OAAO,KAAKA,CAAM,EAAE,QAAQC,GAAY,CACtC,IAAMC,EAAgBD,EAAS,MAAM,GAAG,EAClCE,EAAaD,EAAc,IAAI,EAC/BE,EAAc,CAACf,CAAK,EAAE,OAAOa,CAAa,EAAE,KAAK,GAAG,EACpDG,EAAQL,EAAOC,CAAQ,EAAE,MAAM,GAAG,EAClCK,EAAaD,EAAM,IAAI,EACvBE,EAAcF,EAAM,KAAK,GAAG,EAClCprB,EAAS,MAAMmrB,EAAaD,EAAYI,EAAaD,CAAU,CACjE,CAAC,CACH,CACA,SAASb,GAAkBF,EAAO,CAChC,MAAO,OAAQA,GAAS,aAAcA,CACxC,CACA,IAAMiB,GAAN,KAAe,CACb,aAAc,CACZ,KAAK,YAAc,IAAIpB,GAAcpkB,GAAmB,WAAY,EAAI,EACxE,KAAK,SAAW,IAAIokB,GAAczL,GAAS,UAAU,EACrD,KAAK,QAAU,IAAIyL,GAAc,OAAQ,SAAS,EAClD,KAAK,OAAS,IAAIA,GAAc1H,GAAO,QAAQ,EAC/C,KAAK,iBAAmB,CAAC,KAAK,YAAa,KAAK,OAAQ,KAAK,QAAQ,CACvE,CACA,OAAO3Y,EAAM,CACX,KAAK,MAAM,WAAYA,CAAI,CAC7B,CACA,UAAUA,EAAM,CACd,KAAK,MAAM,aAAcA,CAAI,CAC/B,CACA,kBAAkBA,EAAM,CACtB,KAAK,MAAM,WAAYA,EAAM,KAAK,WAAW,CAC/C,CACA,eAAeA,EAAM,CACnB,KAAK,MAAM,WAAYA,EAAM,KAAK,QAAQ,CAC5C,CACA,cAAcA,EAAM,CAClB,KAAK,MAAM,WAAYA,EAAM,KAAK,OAAO,CAC3C,CACA,aAAaA,EAAM,CACjB,KAAK,MAAM,WAAYA,EAAM,KAAK,MAAM,CAC1C,CACA,cAAc2gB,EAAI,CAChB,OAAO,KAAK,KAAKA,EAAI,KAAK,YAAa,YAAY,CACrD,CACA,WAAWA,EAAI,CACb,OAAO,KAAK,KAAKA,EAAI,KAAK,SAAU,SAAS,CAC/C,CACA,UAAUA,EAAI,CACZ,OAAO,KAAK,KAAKA,EAAI,KAAK,QAAS,QAAQ,CAC7C,CACA,SAASA,EAAI,CACX,OAAO,KAAK,KAAKA,EAAI,KAAK,OAAQ,OAAO,CAC3C,CACA,qBAAqB3gB,EAAM,CACzB,KAAK,MAAM,aAAcA,EAAM,KAAK,WAAW,CACjD,CACA,kBAAkBA,EAAM,CACtB,KAAK,MAAM,aAAcA,EAAM,KAAK,QAAQ,CAC9C,CACA,iBAAiBA,EAAM,CACrB,KAAK,MAAM,aAAcA,EAAM,KAAK,OAAO,CAC7C,CACA,gBAAgBA,EAAM,CACpB,KAAK,MAAM,aAAcA,EAAM,KAAK,MAAM,CAC5C,CACA,MAAMnK,EAAQmK,EAAM0hB,EAAe,CACjC,CAAC,GAAG1hB,CAAI,EAAE,QAAQ2hB,GAAO,CACvB,IAAMC,EAAMF,GAAiB,KAAK,oBAAoBC,CAAG,EACrDD,GAAiBE,EAAI,UAAUD,CAAG,GAAKC,IAAQ,KAAK,SAAWD,EAAI,GACrE,KAAK,MAAM9rB,EAAQ+rB,EAAKD,CAAG,EAE3BjQ,EAAKiQ,EAAK5tB,GAAQ,CAChB,IAAM8tB,EAAUH,GAAiB,KAAK,oBAAoB3tB,CAAI,EAC9D,KAAK,MAAM8B,EAAQgsB,EAAS9tB,CAAI,CAClC,CAAC,CAEL,CAAC,CACH,CACA,MAAM8B,EAAQisB,EAAUC,EAAW,CACjC,IAAMC,EAAcC,GAAYpsB,CAAM,EACtCujB,EAAS2I,EAAU,SAAWC,CAAW,EAAG,CAAC,EAAGD,CAAS,EACzDD,EAASjsB,CAAM,EAAEksB,CAAS,EAC1B3I,EAAS2I,EAAU,QAAUC,CAAW,EAAG,CAAC,EAAGD,CAAS,CAC1D,CACA,oBAAoBzuB,EAAM,CACxB,QAASO,EAAI,EAAGA,EAAI,KAAK,iBAAiB,OAAQA,IAAK,CACrD,IAAM+tB,EAAM,KAAK,iBAAiB/tB,CAAC,EACnC,GAAI+tB,EAAI,UAAUtuB,CAAI,EACpB,OAAOsuB,CAEX,CACA,OAAO,KAAK,OACd,CACA,KAAKjB,EAAIe,EAAepuB,EAAM,CAC5B,IAAMS,EAAO2tB,EAAc,IAAIf,CAAE,EACjC,GAAI5sB,IAAS,OACX,MAAM,IAAI,MAAM,IAAM4sB,EAAK,yBAA2BrtB,EAAO,GAAG,EAElE,OAAOS,CACT,CACF,EACI+tB,GAA0B,IAAIL,GAC5BS,GAAN,KAAoB,CAClB,aAAc,CACZ,KAAK,MAAQ,MACf,CACA,OAAO/uB,EAAOgvB,EAAMniB,EAAMoiB,EAAQ,CAKhC,GAJID,IAAS,eACX,KAAK,MAAQ,KAAK,mBAAmBhvB,EAAO,EAAI,EAChD,KAAK,QAAQ,KAAK,MAAOA,EAAO,SAAS,GAEvC,KAAK,QAAU,OACjB,OAEF,IAAMkvB,EAAcD,EAAS,KAAK,aAAajvB,CAAK,EAAE,OAAOivB,CAAM,EAAI,KAAK,aAAajvB,CAAK,EACxFsY,EAAS,KAAK,QAAQ4W,EAAalvB,EAAOgvB,EAAMniB,CAAI,EAC1D,OAAImiB,IAAS,iBACX,KAAK,QAAQE,EAAalvB,EAAO,MAAM,EACvC,KAAK,QAAQ,KAAK,MAAOA,EAAO,WAAW,EAC3C,KAAK,MAAQ,QAERsY,CACT,CACA,QAAQ4W,EAAalvB,EAAOgvB,EAAMniB,EAAM,CACtCA,EAAOA,GAAQ,CAAC,EAChB,QAAWsiB,KAAcD,EAAa,CACpC,IAAME,EAASD,EAAW,OACpBzsB,EAAS0sB,EAAOJ,CAAI,EACpBvT,EAAS,CAACzb,EAAO6M,EAAMsiB,EAAW,OAAO,EAC/C,GAAIlJ,EAASvjB,EAAQ+Y,EAAQ2T,CAAM,IAAM,IAASviB,EAAK,WACrD,MAAO,EAEX,CACA,MAAO,EACT,CACA,YAAa,CACNe,EAAc,KAAK,MAAM,IAC5B,KAAK,UAAY,KAAK,OACtB,KAAK,OAAS,OAElB,CACA,aAAa5N,EAAO,CAClB,GAAI,KAAK,OACP,OAAO,KAAK,OAEd,IAAMkvB,EAAc,KAAK,OAAS,KAAK,mBAAmBlvB,CAAK,EAC/D,YAAK,oBAAoBA,CAAK,EACvBkvB,CACT,CACA,mBAAmBlvB,EAAOqvB,EAAK,CAC7B,IAAMzsB,EAAS5C,GAASA,EAAM,OACxBsD,EAAU4F,EAAetG,EAAO,SAAWA,EAAO,QAAQ,QAAS,CAAC,CAAC,EACrE0sB,EAAUC,GAAW3sB,CAAM,EACjC,OAAOU,IAAY,IAAS,CAAC+rB,EAAM,CAAC,EAAIG,GAAkBxvB,EAAOsvB,EAAShsB,EAAS+rB,CAAG,CACxF,CACA,oBAAoBrvB,EAAO,CACzB,IAAMyvB,EAAsB,KAAK,WAAa,CAAC,EACzCP,EAAc,KAAK,OACnB5L,EAAO,CAACpW,EAAGlI,IAAMkI,EAAE,OAAOvI,GAAK,CAACK,EAAE,KAAKJ,GAAKD,EAAE,OAAO,KAAOC,EAAE,OAAO,EAAE,CAAC,EAC9E,KAAK,QAAQ0e,EAAKmM,EAAqBP,CAAW,EAAGlvB,EAAO,MAAM,EAClE,KAAK,QAAQsjB,EAAK4L,EAAaO,CAAmB,EAAGzvB,EAAO,OAAO,CACrE,CACF,EACA,SAASuvB,GAAW3sB,EAAQ,CAC1B,IAAM8sB,EAAW,CAAC,EACZJ,EAAU,CAAC,EACXvrB,EAAO,OAAO,KAAK4qB,GAAS,QAAQ,KAAK,EAC/C,QAASjuB,EAAI,EAAGA,EAAIqD,EAAK,OAAQrD,IAC/B4uB,EAAQ,KAAKX,GAAS,UAAU5qB,EAAKrD,CAAC,CAAC,CAAC,EAE1C,IAAMivB,EAAQ/sB,EAAO,SAAW,CAAC,EACjC,QAASlC,EAAI,EAAGA,EAAIivB,EAAM,OAAQjvB,IAAK,CACrC,IAAM0uB,EAASO,EAAMjvB,CAAC,EAClB4uB,EAAQ,QAAQF,CAAM,IAAM,KAC9BE,EAAQ,KAAKF,CAAM,EACnBM,EAASN,EAAO,EAAE,EAAI,GAE1B,CACA,MAAO,CACL,QAAAE,EACA,SAAAI,CACF,CACF,CACA,SAASE,GAAQtsB,EAAS+rB,EAAK,CAC7B,MAAI,CAACA,GAAO/rB,IAAY,GACf,KAELA,IAAY,GACP,CAAC,EAEHA,CACT,CACA,SAASksB,GAAkBxvB,EAAO,CAChC,QAAAsvB,EACA,SAAAI,CACF,EAAGpsB,EAAS+rB,EAAK,CACf,IAAM/W,EAAS,CAAC,EACV9M,EAAUxL,EAAM,WAAW,EACjC,QAAWovB,KAAUE,EAAS,CAC5B,IAAM9B,EAAK4B,EAAO,GACZhrB,EAAOwrB,GAAQtsB,EAAQkqB,CAAE,EAAG6B,CAAG,EACjCjrB,IAAS,MAGbkU,EAAO,KAAK,CACV,OAAA8W,EACA,QAASS,GAAW7vB,EAAM,OAAQ,CAChC,OAAAovB,EACA,MAAOM,EAASlC,CAAE,CACpB,EAAGppB,EAAMoH,CAAO,CAClB,CAAC,CACH,CACA,OAAO8M,CACT,CACA,SAASuX,GAAWjtB,EAAQ,CAC1B,OAAAwsB,EACA,MAAAO,CACF,EAAGvrB,EAAMoH,EAAS,CAChB,IAAMzH,EAAOnB,EAAO,gBAAgBwsB,CAAM,EACpCplB,EAASpH,EAAO,gBAAgBwB,EAAML,CAAI,EAChD,OAAI4rB,GAASP,EAAO,UAClBplB,EAAO,KAAKolB,EAAO,QAAQ,EAEtBxsB,EAAO,eAAeoH,EAAQwB,EAAS,CAAC,EAAE,EAAG,CAClD,WAAY,GACZ,UAAW,GACX,QAAS,EACX,CAAC,CACH,CACA,SAASskB,GAAa3vB,EAAMmD,EAAS,CACnC,IAAMysB,EAAkBhtB,EAAS,SAAS5C,CAAI,GAAK,CAAC,EAEpD,QADwBmD,EAAQ,UAAY,CAAC,GAAGnD,CAAI,GAAK,CAAC,GACpC,WAAamD,EAAQ,WAAaysB,EAAgB,WAAa,GACvF,CACA,SAASC,GAA0BxC,EAAInkB,EAAW,CAChD,IAAItB,EAAOylB,EACX,OAAIA,IAAO,UACTzlB,EAAOsB,EACEmkB,IAAO,YAChBzlB,EAAOsB,IAAc,IAAM,IAAM,KAE5BtB,CACT,CACA,SAASkoB,GAA0BloB,EAAMsB,EAAW,CAClD,OAAOtB,IAASsB,EAAY,UAAY,SAC1C,CACA,SAAS6mB,GAAc1C,EAAI,CACzB,GAAIA,IAAO,KAAOA,IAAO,KAAOA,IAAO,IACrC,OAAOA,CAEX,CACA,SAAS2C,GAAiBzX,EAAU,CAClC,GAAIA,IAAa,OAASA,IAAa,SACrC,MAAO,IAET,GAAIA,IAAa,QAAUA,IAAa,QACtC,MAAO,GAEX,CACA,SAAS0X,GAAc5C,KAAO6C,EAAc,CAC1C,GAAIH,GAAc1C,CAAE,EAClB,OAAOA,EAET,QAAWppB,KAAQisB,EAAc,CAC/B,IAAMtoB,EAAO3D,EAAK,MAAQ+rB,GAAiB/rB,EAAK,QAAQ,GAAKopB,EAAG,OAAS,GAAK0C,GAAc1C,EAAG,CAAC,EAAE,YAAY,CAAC,EAC/G,GAAIzlB,EACF,OAAOA,CAEX,CACA,MAAM,IAAI,MAAM,6BAA6BylB,CAAE,qDAAqD,CACtG,CACA,SAAS8C,GAAmB9C,EAAIzlB,EAAMgB,EAAS,CAC7C,GAAIA,EAAQhB,EAAO,QAAQ,IAAMylB,EAC/B,MAAO,CACL,KAAAzlB,CACF,CAEJ,CACA,SAASwoB,GAAyB/C,EAAI5qB,EAAQ,CAC5C,GAAIA,EAAO,MAAQA,EAAO,KAAK,SAAU,CACvC,IAAM4tB,EAAU5tB,EAAO,KAAK,SAAS,OAAO6tB,GAAKA,EAAE,UAAYjD,GAAMiD,EAAE,UAAYjD,CAAE,EACrF,GAAIgD,EAAQ,OACV,OAAOF,GAAmB9C,EAAI,IAAKgD,EAAQ,CAAC,CAAC,GAAKF,GAAmB9C,EAAI,IAAKgD,EAAQ,CAAC,CAAC,CAE5F,CACA,MAAO,CAAC,CACV,CACA,SAASE,GAAiB9tB,EAAQU,EAAS,CACzC,IAAMqtB,EAAgBjD,GAAU9qB,EAAO,IAAI,GAAK,CAC9C,OAAQ,CAAC,CACX,EACMguB,EAAettB,EAAQ,QAAU,CAAC,EAClCutB,EAAiBf,GAAaltB,EAAO,KAAMU,CAAO,EAClD0E,EAAS,OAAO,OAAO,IAAI,EACjC,cAAO,KAAK4oB,CAAY,EAAE,QAAQpD,GAAM,CACtC,IAAMsD,EAAYF,EAAapD,CAAE,EACjC,GAAI,CAAC3qB,EAASiuB,CAAS,EACrB,OAAO,QAAQ,MAAM,0CAA0CtD,CAAE,EAAE,EAErE,GAAIsD,EAAU,OACZ,OAAO,QAAQ,KAAK,kDAAkDtD,CAAE,EAAE,EAE5E,IAAMzlB,EAAOqoB,GAAc5C,EAAIsD,EAAWP,GAAyB/C,EAAI5qB,CAAM,EAAGG,EAAS,OAAO+tB,EAAU,IAAI,CAAC,EACzGC,EAAYd,GAA0BloB,EAAM8oB,CAAc,EAC1DG,EAAsBL,EAAc,QAAU,CAAC,EACrD3oB,EAAOwlB,CAAE,EAAIyD,GAAQ,OAAO,OAAO,IAAI,EAAG,CAAC,CACzC,KAAAlpB,CACF,EAAG+oB,EAAWE,EAAoBjpB,CAAI,EAAGipB,EAAoBD,CAAS,CAAC,CAAC,CAC1E,CAAC,EACDnuB,EAAO,KAAK,SAAS,QAAQmG,GAAW,CACtC,IAAM5I,EAAO4I,EAAQ,MAAQnG,EAAO,KAC9ByG,EAAYN,EAAQ,WAAa+mB,GAAa3vB,EAAMmD,CAAO,EAE3D0tB,GADkBtD,GAAUvtB,CAAI,GAAK,CAAC,GACA,QAAU,CAAC,EACvD,OAAO,KAAK6wB,CAAmB,EAAE,QAAQE,GAAa,CACpD,IAAMnpB,EAAOioB,GAA0BkB,EAAW7nB,CAAS,EACrDmkB,EAAKzkB,EAAQhB,EAAO,QAAQ,GAAKA,EACvCC,EAAOwlB,CAAE,EAAIxlB,EAAOwlB,CAAE,GAAK,OAAO,OAAO,IAAI,EAC7CyD,GAAQjpB,EAAOwlB,CAAE,EAAG,CAAC,CACnB,KAAAzlB,CACF,EAAG6oB,EAAapD,CAAE,EAAGwD,EAAoBE,CAAS,CAAC,CAAC,CACtD,CAAC,CACH,CAAC,EACD,OAAO,KAAKlpB,CAAM,EAAE,QAAQ/E,GAAO,CACjC,IAAMiB,EAAQ8D,EAAO/E,CAAG,EACxBguB,GAAQ/sB,EAAO,CAACnB,EAAS,OAAOmB,EAAM,IAAI,EAAGnB,EAAS,KAAK,CAAC,CAC9D,CAAC,EACMiF,CACT,CACA,SAASmpB,GAAYvuB,EAAQ,CAC3B,IAAMU,EAAUV,EAAO,UAAYA,EAAO,QAAU,CAAC,GACrDU,EAAQ,QAAU4F,EAAe5F,EAAQ,QAAS,CAAC,CAAC,EACpDA,EAAQ,OAASotB,GAAiB9tB,EAAQU,CAAO,CACnD,CACA,SAAS8tB,GAASprB,EAAM,CACtB,OAAAA,EAAOA,GAAQ,CAAC,EAChBA,EAAK,SAAWA,EAAK,UAAY,CAAC,EAClCA,EAAK,OAASA,EAAK,QAAU,CAAC,EACvBA,CACT,CACA,SAASqrB,GAAWzuB,EAAQ,CAC1B,OAAAA,EAASA,GAAU,CAAC,EACpBA,EAAO,KAAOwuB,GAASxuB,EAAO,IAAI,EAClCuuB,GAAYvuB,CAAM,EACXA,CACT,CACA,IAAM0uB,GAAW,IAAI,IACfC,GAAa,IAAI,IACvB,SAASC,GAAW7lB,EAAU8lB,EAAU,CACtC,IAAI1tB,EAAOutB,GAAS,IAAI3lB,CAAQ,EAChC,OAAK5H,IACHA,EAAO0tB,EAAS,EAChBH,GAAS,IAAI3lB,EAAU5H,CAAI,EAC3BwtB,GAAW,IAAIxtB,CAAI,GAEdA,CACT,CACA,IAAM2tB,GAAa,CAACC,EAAK/hB,EAAK3M,IAAQ,CACpC,IAAMmB,EAAOuG,GAAiBiF,EAAK3M,CAAG,EAClCmB,IAAS,QACXutB,EAAI,IAAIvtB,CAAI,CAEhB,EACMwtB,GAAN,KAAa,CACX,YAAYhvB,EAAQ,CAClB,KAAK,QAAUyuB,GAAWzuB,CAAM,EAChC,KAAK,YAAc,IAAI,IACvB,KAAK,eAAiB,IAAI,GAC5B,CACA,IAAI,UAAW,CACb,OAAO,KAAK,QAAQ,QACtB,CACA,IAAI,MAAO,CACT,OAAO,KAAK,QAAQ,IACtB,CACA,IAAI,KAAKzC,EAAM,CACb,KAAK,QAAQ,KAAOA,CACtB,CACA,IAAI,MAAO,CACT,OAAO,KAAK,QAAQ,IACtB,CACA,IAAI,KAAK6F,EAAM,CACb,KAAK,QAAQ,KAAOorB,GAASprB,CAAI,CACnC,CACA,IAAI,SAAU,CACZ,OAAO,KAAK,QAAQ,OACtB,CACA,IAAI,QAAQ1C,EAAS,CACnB,KAAK,QAAQ,QAAUA,CACzB,CACA,IAAI,SAAU,CACZ,OAAO,KAAK,QAAQ,OACtB,CACA,QAAS,CACP,IAAMV,EAAS,KAAK,QACpB,KAAK,WAAW,EAChBuuB,GAAYvuB,CAAM,CACpB,CACA,YAAa,CACX,KAAK,YAAY,MAAM,EACvB,KAAK,eAAe,MAAM,CAC5B,CACA,iBAAiBivB,EAAa,CAC5B,OAAOL,GAAWK,EAAa,IAAM,CAAC,CAAC,YAAYA,CAAW,GAAI,EAAE,CAAC,CAAC,CACxE,CACA,0BAA0BA,EAAa7lB,EAAY,CACjD,OAAOwlB,GAAW,GAAGK,CAAW,eAAe7lB,CAAU,GAAI,IAAM,CAAC,CAAC,YAAY6lB,CAAW,gBAAgB7lB,CAAU,GAAI,eAAeA,CAAU,EAAE,EAAG,CAAC,YAAY6lB,CAAW,GAAI,EAAE,CAAC,CAAC,CAC1L,CACA,wBAAwBA,EAAapmB,EAAa,CAChD,OAAO+lB,GAAW,GAAGK,CAAW,IAAIpmB,CAAW,GAAI,IAAM,CAAC,CAAC,YAAYomB,CAAW,aAAapmB,CAAW,GAAI,YAAYomB,CAAW,GAAI,YAAYpmB,CAAW,GAAI,EAAE,CAAC,CAAC,CAC1K,CACA,gBAAgB2jB,EAAQ,CACtB,IAAM5B,EAAK4B,EAAO,GACZjvB,EAAO,KAAK,KAClB,OAAOqxB,GAAW,GAAGrxB,CAAI,WAAWqtB,CAAE,GAAI,IAAM,CAAC,CAAC,WAAWA,CAAE,GAAI,GAAI4B,EAAO,wBAA0B,CAAC,CAAE,CAAC,CAAC,CAC/G,CACA,cAAc0C,EAAWC,EAAY,CACnC,IAAMC,EAAc,KAAK,YACrBtmB,EAAQsmB,EAAY,IAAIF,CAAS,EACrC,OAAI,CAACpmB,GAASqmB,KACZrmB,EAAQ,IAAI,IACZsmB,EAAY,IAAIF,EAAWpmB,CAAK,GAE3BA,CACT,CACA,gBAAgBomB,EAAWG,EAAUF,EAAY,CAC/C,GAAM,CACJ,QAAAzuB,EACA,KAAAnD,CACF,EAAI,KACEuL,EAAQ,KAAK,cAAcomB,EAAWC,CAAU,EAChDrpB,EAASgD,EAAM,IAAIumB,CAAQ,EACjC,GAAIvpB,EACF,OAAOA,EAET,IAAMsB,EAAS,IAAI,IACnBioB,EAAS,QAAQluB,GAAQ,CACnB+tB,IACF9nB,EAAO,IAAI8nB,CAAS,EACpB/tB,EAAK,QAAQd,GAAOyuB,GAAW1nB,EAAQ8nB,EAAW7uB,CAAG,CAAC,GAExDc,EAAK,QAAQd,GAAOyuB,GAAW1nB,EAAQ1G,EAASL,CAAG,CAAC,EACpDc,EAAK,QAAQd,GAAOyuB,GAAW1nB,EAAQ0jB,GAAUvtB,CAAI,GAAK,CAAC,EAAG8C,CAAG,CAAC,EAClEc,EAAK,QAAQd,GAAOyuB,GAAW1nB,EAAQjH,EAAUE,CAAG,CAAC,EACrDc,EAAK,QAAQd,GAAOyuB,GAAW1nB,EAAQklB,GAAajsB,CAAG,CAAC,CAC1D,CAAC,EACD,IAAMyX,EAAQ,MAAM,KAAK1Q,CAAM,EAC/B,OAAI0Q,EAAM,SAAW,GACnBA,EAAM,KAAK,OAAO,OAAO,IAAI,CAAC,EAE5B6W,GAAW,IAAIU,CAAQ,GACzBvmB,EAAM,IAAIumB,EAAUvX,CAAK,EAEpBA,CACT,CACA,mBAAoB,CAClB,GAAM,CACJ,QAAApX,EACA,KAAAnD,CACF,EAAI,KACJ,MAAO,CAACmD,EAASoqB,GAAUvtB,CAAI,GAAK,CAAC,EAAG4C,EAAS,SAAS5C,CAAI,GAAK,CAAC,EAAG,CACrE,KAAAA,CACF,EAAG4C,EAAUmsB,EAAW,CAC1B,CACA,oBAAoBllB,EAAQ+B,EAAOP,EAASM,EAAW,CAAC,EAAE,EAAG,CAC3D,IAAMwM,EAAS,CACb,QAAS,EACX,EACM,CACJ,SAAA4Z,EACA,YAAAC,CACF,EAAIC,GAAY,KAAK,eAAgBpoB,EAAQ8B,CAAQ,EACjDxI,EAAU4uB,EACd,GAAIG,GAAYH,EAAUnmB,CAAK,EAAG,CAChCuM,EAAO,QAAU,GACjB9M,EAAU8mB,GAAW9mB,CAAO,EAAIA,EAAQ,EAAIA,EAC5C,IAAM+mB,EAAc,KAAK,eAAevoB,EAAQwB,EAAS2mB,CAAW,EACpE7uB,EAAUkvB,GAAeN,EAAU1mB,EAAS+mB,CAAW,CACzD,CACA,QAAWzwB,KAAQiK,EACjBuM,EAAOxW,CAAI,EAAIwB,EAAQxB,CAAI,EAE7B,OAAOwW,CACT,CACA,eAAetO,EAAQwB,EAASM,EAAW,CAAC,EAAE,EAAG2mB,EAAoB,CACnE,GAAM,CACJ,SAAAP,CACF,EAAIE,GAAY,KAAK,eAAgBpoB,EAAQ8B,CAAQ,EACrD,OAAOjJ,EAAS2I,CAAO,EAAIgnB,GAAeN,EAAU1mB,EAAS,OAAWinB,CAAkB,EAAIP,CAChG,CACF,EACA,SAASE,GAAYM,EAAe1oB,EAAQ8B,EAAU,CACpD,IAAIJ,EAAQgnB,EAAc,IAAI1oB,CAAM,EAC/B0B,IACHA,EAAQ,IAAI,IACZgnB,EAAc,IAAI1oB,EAAQ0B,CAAK,GAEjC,IAAMC,EAAWG,EAAS,KAAK,EAC3BpD,EAASgD,EAAM,IAAIC,CAAQ,EAC/B,OAAKjD,IAEHA,EAAS,CACP,SAFeiqB,GAAgB3oB,EAAQ8B,CAAQ,EAG/C,YAAaA,EAAS,OAAO8mB,GAAK,CAACA,EAAE,YAAY,EAAE,SAAS,OAAO,CAAC,CACtE,EACAlnB,EAAM,IAAIC,EAAUjD,CAAM,GAErBA,CACT,CACA,IAAMmqB,GAAcjvB,GAASf,EAASe,CAAK,GAAK,OAAO,oBAAoBA,CAAK,EAAE,KAAKX,GAAOqvB,GAAW1uB,EAAMX,CAAG,CAAC,CAAC,EACpH,SAASovB,GAAYnR,EAAOnV,EAAO,CACjC,GAAM,CACJ,aAAA+mB,EACA,YAAAC,CACF,EAAIC,GAAa9R,CAAK,EACtB,QAAWpf,KAAQiK,EAAO,CACxB,IAAMknB,EAAaH,EAAahxB,CAAI,EAC9BoxB,EAAYH,EAAYjxB,CAAI,EAC5B8B,GAASsvB,GAAaD,IAAe/R,EAAMpf,CAAI,EACrD,GAAImxB,IAAeX,GAAW1uB,CAAK,GAAKivB,GAAYjvB,CAAK,IAAMsvB,GAAa/vB,EAAQS,CAAK,EACvF,MAAO,EAEX,CACA,MAAO,EACT,CACA,IAAIuvB,GAAU,QACRC,GAAkB,CAAC,MAAO,SAAU,OAAQ,QAAS,WAAW,EACtE,SAASC,GAAqB3a,EAAU3Q,EAAM,CAC5C,OAAO2Q,IAAa,OAASA,IAAa,UAAY0a,GAAgB,QAAQ1a,CAAQ,IAAM,IAAM3Q,IAAS,GAC7G,CACA,SAASurB,GAAcC,EAAIC,EAAI,CAC7B,OAAO,SAAUtmB,EAAGlI,EAAG,CACrB,OAAOkI,EAAEqmB,CAAE,IAAMvuB,EAAEuuB,CAAE,EAAIrmB,EAAEsmB,CAAE,EAAIxuB,EAAEwuB,CAAE,EAAItmB,EAAEqmB,CAAE,EAAIvuB,EAAEuuB,CAAE,CACvD,CACF,CACA,SAASE,GAAqBjoB,EAAS,CACrC,IAAMxL,EAAQwL,EAAQ,MAChB1I,EAAmB9C,EAAM,QAAQ,UACvCA,EAAM,cAAc,aAAa,EACjCimB,EAASnjB,GAAoBA,EAAiB,WAAY,CAAC0I,CAAO,EAAGxL,CAAK,CAC5E,CACA,SAAS0zB,GAAoBloB,EAAS,CACpC,IAAMxL,EAAQwL,EAAQ,MAChB1I,EAAmB9C,EAAM,QAAQ,UACvCimB,EAASnjB,GAAoBA,EAAiB,WAAY,CAAC0I,CAAO,EAAGxL,CAAK,CAC5E,CACA,SAAS2zB,GAAU/yB,EAAM,CACvB,OAAI4gB,GAAgB,GAAK,OAAO5gB,GAAS,SACvCA,EAAO,SAAS,eAAeA,CAAI,EAC1BA,GAAQA,EAAK,SACtBA,EAAOA,EAAK,CAAC,GAEXA,GAAQA,EAAK,SACfA,EAAOA,EAAK,QAEPA,CACT,CACA,IAAMgzB,GAAY,CAAC,EACbC,GAAW5wB,GAAO,CACtB,IAAMyb,EAASiV,GAAU1wB,CAAG,EAC5B,OAAO,OAAO,OAAO2wB,EAAS,EAAE,OAAOE,GAAKA,EAAE,SAAWpV,CAAM,EAAE,IAAI,CACvE,EACA,SAASqV,GAAgBnkB,EAAK3F,EAAOyC,EAAM,CACzC,IAAM3I,EAAO,OAAO,KAAK6L,CAAG,EAC5B,QAAW3M,KAAOc,EAAM,CACtB,IAAMiwB,EAAS,CAAC/wB,EAChB,GAAI+wB,GAAU/pB,EAAO,CACnB,IAAMrG,EAAQgM,EAAI3M,CAAG,EACrB,OAAO2M,EAAI3M,CAAG,GACVyJ,EAAO,GAAKsnB,EAAS/pB,KACvB2F,EAAIokB,EAAStnB,CAAI,EAAI9I,EAEzB,CACF,CACF,CACA,SAASqwB,GAAmB,EAAGC,EAAWC,EAAaC,EAAS,CAC9D,MAAI,CAACD,GAAe,EAAE,OAAS,WACtB,KAELC,EACKF,EAEF,CACT,CACA,IAAIG,IAAsB,IAAM,CAC9B,MAAMA,CAAM,CACV,OAAO,SAAWtxB,EAClB,OAAO,UAAY6wB,GACnB,OAAO,UAAYlG,GACnB,OAAO,SAAWiB,GAClB,OAAO,QAAUwE,GACjB,OAAO,SAAWU,GAClB,OAAO,YAAYpzB,EAAO,CACxBkuB,GAAS,IAAI,GAAGluB,CAAK,EACrB6zB,GAAkB,CACpB,CACA,OAAO,cAAc7zB,EAAO,CAC1BkuB,GAAS,OAAO,GAAGluB,CAAK,EACxB6zB,GAAkB,CACpB,CACA,YAAY1zB,EAAM2zB,EAAY,CAC5B,IAAM3xB,EAAS,KAAK,OAAS,IAAIgvB,GAAO2C,CAAU,EAC5CC,EAAgBb,GAAU/yB,CAAI,EAC9B6zB,EAAgBZ,GAASW,CAAa,EAC5C,GAAIC,EACF,MAAM,IAAI,MAAM,4CAA+CA,EAAc,GAAK,kDAA2DA,EAAc,OAAO,GAAK,kBAAmB,EAE5L,IAAMnxB,EAAUV,EAAO,eAAeA,EAAO,kBAAkB,EAAG,KAAK,WAAW,CAAC,EACnF,KAAK,SAAW,IAAKA,EAAO,UAAY2e,GAAgBiT,CAAa,GACrE,KAAK,SAAS,aAAa5xB,CAAM,EACjC,IAAM4I,EAAU,KAAK,SAAS,eAAegpB,EAAelxB,EAAQ,WAAW,EACzEob,EAASlT,GAAWA,EAAQ,OAC5BmS,EAASe,GAAUA,EAAO,OAC1BhB,EAAQgB,GAAUA,EAAO,MA6B/B,GA5BA,KAAK,GAAKgW,GAAI,EACd,KAAK,IAAMlpB,EACX,KAAK,OAASkT,EACd,KAAK,MAAQhB,EACb,KAAK,OAASC,EACd,KAAK,SAAWra,EAChB,KAAK,aAAe,KAAK,YACzB,KAAK,QAAU,CAAC,EAChB,KAAK,UAAY,CAAC,EAClB,KAAK,QAAU,OACf,KAAK,MAAQ,CAAC,EACd,KAAK,wBAA0B,OAC/B,KAAK,UAAY,OACjB,KAAK,QAAU,CAAC,EAChB,KAAK,WAAa,OAClB,KAAK,WAAa,CAAC,EACnB,KAAK,qBAAuB,OAC5B,KAAK,gBAAkB,CAAC,EACxB,KAAK,OAAS,CAAC,EACf,KAAK,SAAW,IAAIyrB,GACpB,KAAK,SAAW,CAAC,EACjB,KAAK,eAAiB,CAAC,EACvB,KAAK,SAAW,GAChB,KAAK,oBAAsB,OAC3B,KAAK,SAAW,OAChB,KAAK,UAAY4F,GAASnsB,GAAQ,KAAK,OAAOA,CAAI,EAAGlF,EAAQ,aAAe,CAAC,EAC7E,KAAK,aAAe,CAAC,EACrBswB,GAAU,KAAK,EAAE,EAAI,KACjB,CAACpoB,GAAW,CAACkT,EAAQ,CACvB,QAAQ,MAAM,mEAAmE,EACjF,MACF,CACAxd,GAAS,OAAO,KAAM,WAAYuyB,EAAoB,EACtDvyB,GAAS,OAAO,KAAM,WAAYwyB,EAAmB,EACrD,KAAK,YAAY,EACb,KAAK,UACP,KAAK,OAAO,CAEhB,CACA,IAAI,aAAc,CAChB,GAAM,CACJ,QAAS,CACP,YAAA/U,EACA,oBAAAiW,CACF,EACA,MAAAlX,EACA,OAAAC,EACA,aAAAkX,CACF,EAAI,KACJ,OAAKjnB,EAAc+Q,CAAW,EAG1BiW,GAAuBC,EAClBA,EAEFlX,EAASD,EAAQC,EAAS,KALxBgB,CAMX,CACA,IAAI,MAAO,CACT,OAAO,KAAK,OAAO,IACrB,CACA,IAAI,KAAK3Y,EAAM,CACb,KAAK,OAAO,KAAOA,CACrB,CACA,IAAI,SAAU,CACZ,OAAO,KAAK,QACd,CACA,IAAI,QAAQ1C,EAAS,CACnB,KAAK,OAAO,QAAUA,CACxB,CACA,IAAI,UAAW,CACb,OAAOqrB,EACT,CACA,aAAc,CACZ,YAAK,cAAc,YAAY,EAC3B,KAAK,QAAQ,WACf,KAAK,OAAO,EAEZmG,GAAY,KAAM,KAAK,QAAQ,gBAAgB,EAEjD,KAAK,WAAW,EAChB,KAAK,cAAc,WAAW,EACvB,IACT,CACA,OAAQ,CACN,OAAAC,GAAY,KAAK,OAAQ,KAAK,GAAG,EAC1B,IACT,CACA,MAAO,CACL,OAAA7zB,GAAS,KAAK,IAAI,EACX,IACT,CACA,OAAOwc,EAAOC,EAAQ,CACfzc,GAAS,QAAQ,IAAI,EAGxB,KAAK,kBAAoB,CACvB,MAAAwc,EACA,OAAAC,CACF,EALA,KAAK,QAAQD,EAAOC,CAAM,CAO9B,CACA,QAAQD,EAAOC,EAAQ,CACrB,IAAMra,EAAU,KAAK,QACfob,EAAS,KAAK,OACdC,EAAcrb,EAAQ,qBAAuB,KAAK,YAClD0xB,EAAU,KAAK,SAAS,eAAetW,EAAQhB,EAAOC,EAAQgB,CAAW,EACzEsW,EAAW3xB,EAAQ,kBAAoB,KAAK,SAAS,oBAAoB,EACzEkF,EAAO,KAAK,MAAQ,SAAW,SACrC,KAAK,MAAQwsB,EAAQ,MACrB,KAAK,OAASA,EAAQ,OACtB,KAAK,aAAe,KAAK,YACpBF,GAAY,KAAMG,EAAU,EAAI,IAGrC,KAAK,cAAc,SAAU,CAC3B,KAAMD,CACR,CAAC,EACD/O,EAAS3iB,EAAQ,SAAU,CAAC,KAAM0xB,CAAO,EAAG,IAAI,EAC5C,KAAK,UACH,KAAK,UAAUxsB,CAAI,GACrB,KAAK,OAAO,EAGlB,CACA,qBAAsB,CAEpB,IAAM0sB,EADU,KAAK,QACS,QAAU,CAAC,EACzC3W,EAAK2W,EAAe,CAACC,EAAa3jB,IAAW,CAC3C2jB,EAAY,GAAK3jB,CACnB,CAAC,CACH,CACA,qBAAsB,CACpB,IAAMlO,EAAU,KAAK,QACf8xB,EAAY9xB,EAAQ,OACpB0E,EAAS,KAAK,OACdqtB,EAAU,OAAO,KAAKrtB,CAAM,EAAE,OAAO,CAAC4H,EAAK4d,KAC/C5d,EAAI4d,CAAE,EAAI,GACH5d,GACN,CAAC,CAAC,EACDnP,EAAQ,CAAC,EACT20B,IACF30B,EAAQA,EAAM,OAAO,OAAO,KAAK20B,CAAS,EAAE,IAAI5H,GAAM,CACpD,IAAM6C,EAAe+E,EAAU5H,CAAE,EAC3BzlB,EAAOqoB,GAAc5C,EAAI6C,CAAY,EACrCiF,EAAWvtB,IAAS,IACpBwf,EAAexf,IAAS,IAC9B,MAAO,CACL,QAASsoB,EACT,UAAWiF,EAAW,YAAc/N,EAAe,SAAW,OAC9D,MAAO+N,EAAW,eAAiB/N,EAAe,WAAa,QACjE,CACF,CAAC,CAAC,GAEJhJ,EAAK9d,EAAOG,GAAQ,CAClB,IAAMyvB,EAAezvB,EAAK,QACpB4sB,EAAK6C,EAAa,GAClBtoB,EAAOqoB,GAAc5C,EAAI6C,CAAY,EACrCkF,EAAYrsB,EAAemnB,EAAa,KAAMzvB,EAAK,KAAK,GAC1DyvB,EAAa,WAAa,QAAagD,GAAqBhD,EAAa,SAAUtoB,CAAI,IAAMsrB,GAAqBzyB,EAAK,SAAS,KAClIyvB,EAAa,SAAWzvB,EAAK,WAE/By0B,EAAQ7H,CAAE,EAAI,GACd,IAAItpB,EAAQ,KACZ,GAAIspB,KAAMxlB,GAAUA,EAAOwlB,CAAE,EAAE,OAAS+H,EACtCrxB,EAAQ8D,EAAOwlB,CAAE,MACZ,CACL,IAAMgI,EAAa7G,GAAS,SAAS4G,CAAS,EAC9CrxB,EAAQ,IAAIsxB,EAAW,CACrB,GAAAhI,EACA,KAAM+H,EACN,IAAK,KAAK,IACV,MAAO,IACT,CAAC,EACDvtB,EAAO9D,EAAM,EAAE,EAAIA,CACrB,CACAA,EAAM,KAAKmsB,EAAc/sB,CAAO,CAClC,CAAC,EACDib,EAAK8W,EAAS,CAACI,EAAYjI,IAAO,CAC3BiI,GACH,OAAOztB,EAAOwlB,CAAE,CAEpB,CAAC,EACDjP,EAAKvW,EAAQ9D,GAAS,CACpBmX,EAAQ,UAAU,KAAMnX,EAAOA,EAAM,OAAO,EAC5CmX,EAAQ,OAAO,KAAMnX,CAAK,CAC5B,CAAC,CACH,CACA,iBAAkB,CAChB,IAAMkB,EAAW,KAAK,UAChBoH,EAAU,KAAK,KAAK,SAAS,OAC7BD,EAAUnH,EAAS,OAEzB,GADAA,EAAS,KAAK,CAAC8H,EAAGlI,IAAMkI,EAAE,MAAQlI,EAAE,KAAK,EACrCuH,EAAUC,EAAS,CACrB,QAAS9L,EAAI8L,EAAS9L,EAAI6L,EAAS,EAAE7L,EACnC,KAAK,oBAAoBA,CAAC,EAE5B0E,EAAS,OAAOoH,EAASD,EAAUC,CAAO,CAC5C,CACA,KAAK,gBAAkBpH,EAAS,MAAM,CAAC,EAAE,KAAKkuB,GAAc,QAAS,OAAO,CAAC,CAC/E,CACA,6BAA8B,CAC5B,GAAM,CACJ,UAAWluB,EACX,KAAM,CACJ,SAAAswB,CACF,CACF,EAAI,KACAtwB,EAAS,OAASswB,EAAS,QAC7B,OAAO,KAAK,QAEdtwB,EAAS,QAAQ,CAACa,EAAM0B,IAAU,CAC5B+tB,EAAS,OAAO/wB,GAAKA,IAAMsB,EAAK,QAAQ,EAAE,SAAW,GACvD,KAAK,oBAAoB0B,CAAK,CAElC,CAAC,CACH,CACA,0BAA2B,CACzB,IAAMguB,EAAiB,CAAC,EAClBD,EAAW,KAAK,KAAK,SACvBh1B,EAAG2E,EAEP,IADA,KAAK,4BAA4B,EAC5B3E,EAAI,EAAG2E,EAAOqwB,EAAS,OAAQh1B,EAAI2E,EAAM3E,IAAK,CACjD,IAAMqI,EAAU2sB,EAASh1B,CAAC,EACtBuF,EAAO,KAAK,eAAevF,CAAC,EAC1BP,EAAO4I,EAAQ,MAAQ,KAAK,OAAO,KAWzC,GAVI9C,EAAK,MAAQA,EAAK,OAAS9F,IAC7B,KAAK,oBAAoBO,CAAC,EAC1BuF,EAAO,KAAK,eAAevF,CAAC,GAE9BuF,EAAK,KAAO9F,EACZ8F,EAAK,UAAY8C,EAAQ,WAAa+mB,GAAa3vB,EAAM,KAAK,OAAO,EACrE8F,EAAK,MAAQ8C,EAAQ,OAAS,EAC9B9C,EAAK,MAAQvF,EACbuF,EAAK,MAAQ,GAAK8C,EAAQ,MAC1B9C,EAAK,QAAU,KAAK,iBAAiBvF,CAAC,EAClCuF,EAAK,WACPA,EAAK,WAAW,YAAYvF,CAAC,EAC7BuF,EAAK,WAAW,WAAW,MACtB,CACL,IAAM2vB,EAAkBjH,GAAS,cAAcxuB,CAAI,EAC7C,CACJ,mBAAA01B,EACA,gBAAAC,CACF,EAAI/yB,EAAS,SAAS5C,CAAI,EAC1B,OAAO,OAAOy1B,EAAiB,CAC7B,gBAAiBjH,GAAS,WAAWmH,CAAe,EACpD,mBAAoBD,GAAsBlH,GAAS,WAAWkH,CAAkB,CAClF,CAAC,EACD5vB,EAAK,WAAa,IAAI2vB,EAAgB,KAAMl1B,CAAC,EAC7Ci1B,EAAe,KAAK1vB,EAAK,UAAU,CACrC,CACF,CACA,YAAK,gBAAgB,EACd0vB,CACT,CACA,gBAAiB,CACfpX,EAAK,KAAK,KAAK,SAAU,CAACxV,EAASrD,IAAiB,CAClD,KAAK,eAAeA,CAAY,EAAE,WAAW,MAAM,CACrD,EAAG,IAAI,CACT,CACA,OAAQ,CACN,KAAK,eAAe,EACpB,KAAK,cAAc,OAAO,CAC5B,CACA,OAAO8C,EAAM,CACX,IAAM5F,EAAS,KAAK,OACpBA,EAAO,OAAO,EACd,IAAMU,EAAU,KAAK,SAAWV,EAAO,eAAeA,EAAO,kBAAkB,EAAG,KAAK,WAAW,CAAC,EAC7FmzB,EAAgB,KAAK,oBAAsB,CAACzyB,EAAQ,UAK1D,GAJA,KAAK,cAAc,EACnB,KAAK,oBAAoB,EACzB,KAAK,qBAAqB,EAC1B,KAAK,SAAS,WAAW,EACrB,KAAK,cAAc,eAAgB,CACrC,KAAAkF,EACA,WAAY,EACd,CAAC,IAAM,GACL,OAEF,IAAMmtB,EAAiB,KAAK,yBAAyB,EACrD,KAAK,cAAc,sBAAsB,EACzC,IAAI3X,EAAa,EACjB,QAAStd,EAAI,EAAG2E,EAAO,KAAK,KAAK,SAAS,OAAQ3E,EAAI2E,EAAM3E,IAAK,CAC/D,GAAM,CACJ,WAAA6G,CACF,EAAI,KAAK,eAAe7G,CAAC,EACnBoP,EAAQ,CAACimB,GAAiBJ,EAAe,QAAQpuB,CAAU,IAAM,GACvEA,EAAW,sBAAsBuI,CAAK,EACtCkO,EAAa,KAAK,IAAI,CAACzW,EAAW,eAAe,EAAGyW,CAAU,CAChE,CACAA,EAAa,KAAK,YAAc1a,EAAQ,OAAO,YAAc0a,EAAa,EAC1E,KAAK,cAAcA,CAAU,EACxB+X,GACHxX,EAAKoX,EAAgBpuB,GAAc,CACjCA,EAAW,MAAM,CACnB,CAAC,EAEH,KAAK,gBAAgBiB,CAAI,EACzB,KAAK,cAAc,cAAe,CAChC,KAAAA,CACF,CAAC,EACD,KAAK,QAAQ,KAAK8qB,GAAc,IAAK,MAAM,CAAC,EAC5C,GAAM,CACJ,QAAA0C,EACA,WAAAC,CACF,EAAI,KACAA,EACF,KAAK,cAAcA,EAAY,EAAI,EAC1BD,EAAQ,QACjB,KAAK,mBAAmBA,EAASA,EAAS,EAAI,EAEhD,KAAK,OAAO,CACd,CACA,eAAgB,CACdzX,EAAK,KAAK,OAAQra,GAAS,CACzBmX,EAAQ,UAAU,KAAMnX,CAAK,CAC/B,CAAC,EACD,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,CAC3B,CACA,qBAAsB,CACpB,IAAMZ,EAAU,KAAK,QACf4yB,EAAiB,IAAI,IAAI,OAAO,KAAK,KAAK,UAAU,CAAC,EACrDC,EAAY,IAAI,IAAI7yB,EAAQ,MAAM,GACpC,CAAC8yB,GAAUF,EAAgBC,CAAS,GAAK,CAAC,CAAC,KAAK,uBAAyB7yB,EAAQ,cACnF,KAAK,aAAa,EAClB,KAAK,WAAW,EAEpB,CACA,sBAAuB,CACrB,GAAM,CACJ,eAAA+yB,CACF,EAAI,KACEC,EAAU,KAAK,uBAAuB,GAAK,CAAC,EAClD,OAAW,CACT,OAAA5zB,EACA,MAAAuH,EACA,MAAAC,CACF,IAAKosB,EAAS,CACZ,IAAM5pB,EAAOhK,IAAW,kBAAoB,CAACwH,EAAQA,EACrD6pB,GAAgBsC,EAAgBpsB,EAAOyC,CAAI,CAC7C,CACF,CACA,wBAAyB,CACvB,IAAM6pB,EAAe,KAAK,aAC1B,GAAI,CAACA,GAAgB,CAACA,EAAa,OACjC,OAEF,KAAK,aAAe,CAAC,EACrB,IAAMC,EAAe,KAAK,KAAK,SAAS,OAClCC,EAAUrN,GAAO,IAAI,IAAImN,EAAa,OAAOzC,GAAKA,EAAE,CAAC,IAAM1K,CAAG,EAAE,IAAI,CAAC0K,EAAGpzB,IAAMA,EAAI,IAAMozB,EAAE,OAAO,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,EAC9G4C,EAAYD,EAAQ,CAAC,EAC3B,QAAS/1B,EAAI,EAAGA,EAAI81B,EAAc91B,IAChC,GAAI,CAAC01B,GAAUM,EAAWD,EAAQ/1B,CAAC,CAAC,EAClC,OAGJ,OAAO,MAAM,KAAKg2B,CAAS,EAAE,IAAI5C,GAAKA,EAAE,MAAM,GAAG,CAAC,EAAE,IAAI5mB,IAAM,CAC5D,OAAQA,EAAE,CAAC,EACX,MAAO,CAACA,EAAE,CAAC,EACX,MAAO,CAACA,EAAE,CAAC,CACb,EAAE,CACJ,CACA,cAAc8Q,EAAY,CACxB,GAAI,KAAK,cAAc,eAAgB,CACrC,WAAY,EACd,CAAC,IAAM,GACL,OAEF3C,EAAQ,OAAO,KAAM,KAAK,MAAO,KAAK,OAAQ2C,CAAU,EACxD,IAAM3S,EAAO,KAAK,UACZsrB,EAAStrB,EAAK,OAAS,GAAKA,EAAK,QAAU,EACjD,KAAK,QAAU,CAAC,EAChBkT,EAAK,KAAK,MAAOtD,GAAO,CAClB0b,GAAU1b,EAAI,WAAa,cAG3BA,EAAI,WACNA,EAAI,UAAU,EAEhB,KAAK,QAAQ,KAAK,GAAGA,EAAI,QAAQ,CAAC,EACpC,EAAG,IAAI,EACP,KAAK,QAAQ,QAAQ,CAACra,EAAM+G,IAAU,CACpC/G,EAAK,KAAO+G,CACd,CAAC,EACD,KAAK,cAAc,aAAa,CAClC,CACA,gBAAgBa,EAAM,CACpB,GAAI,KAAK,cAAc,uBAAwB,CAC7C,KAAAA,EACA,WAAY,EACd,CAAC,IAAM,GAGP,SAAS9H,EAAI,EAAG2E,EAAO,KAAK,KAAK,SAAS,OAAQ3E,EAAI2E,EAAM,EAAE3E,EAC5D,KAAK,eAAeA,CAAC,EAAE,WAAW,UAAU,EAE9C,QAASA,EAAI,EAAG2E,EAAO,KAAK,KAAK,SAAS,OAAQ3E,EAAI2E,EAAM,EAAE3E,EAC5D,KAAK,eAAeA,EAAG4xB,GAAW9pB,CAAI,EAAIA,EAAK,CAC7C,aAAc9H,CAChB,CAAC,EAAI8H,CAAI,EAEX,KAAK,cAAc,sBAAuB,CACxC,KAAAA,CACF,CAAC,EACH,CACA,eAAeb,EAAOa,EAAM,CAC1B,IAAMvC,EAAO,KAAK,eAAe0B,CAAK,EAChCkF,EAAO,CACX,KAAA5G,EACA,MAAA0B,EACA,KAAAa,EACA,WAAY,EACd,EACI,KAAK,cAAc,sBAAuBqE,CAAI,IAAM,KAGxD5G,EAAK,WAAW,QAAQuC,CAAI,EAC5BqE,EAAK,WAAa,GAClB,KAAK,cAAc,qBAAsBA,CAAI,EAC/C,CACA,QAAS,CACH,KAAK,cAAc,eAAgB,CACrC,WAAY,EACd,CAAC,IAAM,KAGH3L,GAAS,IAAI,IAAI,EACf,KAAK,UAAY,CAACA,GAAS,QAAQ,IAAI,GACzCA,GAAS,MAAM,IAAI,GAGrB,KAAK,KAAK,EACVuyB,GAAqB,CACnB,MAAO,IACT,CAAC,GAEL,CACA,MAAO,CACL,IAAI/yB,EACJ,GAAI,KAAK,kBAAmB,CAC1B,GAAM,CACJ,MAAAgd,EACA,OAAAC,CACF,EAAI,KAAK,kBACT,KAAK,kBAAoB,KACzB,KAAK,QAAQD,EAAOC,CAAM,CAC5B,CAKA,GAJA,KAAK,MAAM,EACP,KAAK,OAAS,GAAK,KAAK,QAAU,GAGlC,KAAK,cAAc,aAAc,CACnC,WAAY,EACd,CAAC,IAAM,GACL,OAEF,IAAMiZ,EAAS,KAAK,QACpB,IAAKl2B,EAAI,EAAGA,EAAIk2B,EAAO,QAAUA,EAAOl2B,CAAC,EAAE,GAAK,EAAG,EAAEA,EACnDk2B,EAAOl2B,CAAC,EAAE,KAAK,KAAK,SAAS,EAG/B,IADA,KAAK,cAAc,EACZA,EAAIk2B,EAAO,OAAQ,EAAEl2B,EAC1Bk2B,EAAOl2B,CAAC,EAAE,KAAK,KAAK,SAAS,EAE/B,KAAK,cAAc,WAAW,CAChC,CACA,uBAAuByE,EAAe,CACpC,IAAMC,EAAW,KAAK,gBAChBkT,EAAS,CAAC,EACZ5X,EAAG2E,EACP,IAAK3E,EAAI,EAAG2E,EAAOD,EAAS,OAAQ1E,EAAI2E,EAAM,EAAE3E,EAAG,CACjD,IAAMuF,EAAOb,EAAS1E,CAAC,GACnB,CAACyE,GAAiBc,EAAK,UACzBqS,EAAO,KAAKrS,CAAI,CAEpB,CACA,OAAOqS,CACT,CACA,8BAA+B,CAC7B,OAAO,KAAK,uBAAuB,EAAI,CACzC,CACA,eAAgB,CACd,GAAI,KAAK,cAAc,qBAAsB,CAC3C,WAAY,EACd,CAAC,IAAM,GACL,OAEF,IAAMlT,EAAW,KAAK,6BAA6B,EACnD,QAAS1E,EAAI0E,EAAS,OAAS,EAAG1E,GAAK,EAAG,EAAEA,EAC1C,KAAK,aAAa0E,EAAS1E,CAAC,CAAC,EAE/B,KAAK,cAAc,mBAAmB,CACxC,CACA,aAAauF,EAAM,CACjB,IAAMkF,EAAM,KAAK,IACX0B,EAAO,CACX,KAAA5G,EACA,MAAOA,EAAK,MACZ,WAAY,EACd,EACM4wB,EAAOC,GAAmB,KAAM7wB,CAAI,EACtC,KAAK,cAAc,oBAAqB4G,CAAI,IAAM,KAGlDgqB,GACFpK,GAASthB,EAAK0rB,CAAI,EAEpB5wB,EAAK,WAAW,KAAK,EACjB4wB,GACFjK,GAAWzhB,CAAG,EAEhB0B,EAAK,WAAa,GAClB,KAAK,cAAc,mBAAoBA,CAAI,EAC7C,CACA,cAAciF,EAAO,CACnB,OAAO2H,GAAe3H,EAAO,KAAK,UAAW,KAAK,WAAW,CAC/D,CACA,0BAA0BoC,EAAG1L,EAAMlF,EAASiW,EAAkB,CAC5D,IAAM7W,EAAS4X,GAAY,MAAM9R,CAAI,EACrC,OAAI,OAAO9F,GAAW,WACbA,EAAO,KAAMwR,EAAG5Q,EAASiW,CAAgB,EAE3C,CAAC,CACV,CACA,eAAe7T,EAAc,CAC3B,IAAMqD,EAAU,KAAK,KAAK,SAASrD,CAAY,EACzCN,EAAW,KAAK,UAClBa,EAAOb,EAAS,OAAOT,GAAKA,GAAKA,EAAE,WAAaoE,CAAO,EAAE,IAAI,EACjE,OAAK9C,IACHA,EAAO,CACL,KAAM,KACN,KAAM,CAAC,EACP,QAAS,KACT,WAAY,KACZ,OAAQ,KACR,QAAS,KACT,QAAS,KACT,MAAO8C,GAAWA,EAAQ,OAAS,EACnC,MAAOrD,EACP,SAAUqD,EACV,QAAS,CAAC,EACV,QAAS,EACX,EACA3D,EAAS,KAAKa,CAAI,GAEbA,CACT,CACA,YAAa,CACX,OAAO,KAAK,WAAa,KAAK,SAAWkC,GAAc,KAAM,CAC3D,MAAO,KACP,KAAM,OACR,CAAC,EACH,CACA,wBAAyB,CACvB,OAAO,KAAK,6BAA6B,EAAE,MAC7C,CACA,iBAAiBzC,EAAc,CAC7B,IAAMqD,EAAU,KAAK,KAAK,SAASrD,CAAY,EAC/C,GAAI,CAACqD,EACH,MAAO,GAET,IAAM9C,EAAO,KAAK,eAAeP,CAAY,EAC7C,OAAO,OAAOO,EAAK,QAAW,UAAY,CAACA,EAAK,OAAS,CAAC8C,EAAQ,MACpE,CACA,qBAAqBrD,EAAcqxB,EAAS,CAC1C,IAAM9wB,EAAO,KAAK,eAAeP,CAAY,EAC7CO,EAAK,OAAS,CAAC8wB,CACjB,CACA,qBAAqBpvB,EAAO,CAC1B,KAAK,eAAeA,CAAK,EAAI,CAAC,KAAK,eAAeA,CAAK,CACzD,CACA,kBAAkBA,EAAO,CACvB,MAAO,CAAC,KAAK,eAAeA,CAAK,CACnC,CACA,kBAAkBjC,EAAc0K,EAAW2mB,EAAS,CAClD,IAAMvuB,EAAOuuB,EAAU,OAAS,OAC1B9wB,EAAO,KAAK,eAAeP,CAAY,EACvCzF,EAAQgG,EAAK,WAAW,mBAAmB,OAAWuC,CAAI,EAC5DqD,GAAQuE,CAAS,GACnBnK,EAAK,KAAKmK,CAAS,EAAE,OAAS,CAAC2mB,EAC/B,KAAK,OAAO,IAEZ,KAAK,qBAAqBrxB,EAAcqxB,CAAO,EAC/C92B,EAAM,OAAOgG,EAAM,CACjB,QAAA8wB,CACF,CAAC,EACD,KAAK,OAAO5rB,GAAOA,EAAI,eAAiBzF,EAAe8C,EAAO,MAAS,EAE3E,CACA,KAAK9C,EAAc0K,EAAW,CAC5B,KAAK,kBAAkB1K,EAAc0K,EAAW,EAAK,CACvD,CACA,KAAK1K,EAAc0K,EAAW,CAC5B,KAAK,kBAAkB1K,EAAc0K,EAAW,EAAI,CACtD,CACA,oBAAoB1K,EAAc,CAChC,IAAMO,EAAO,KAAK,UAAUP,CAAY,EACpCO,GAAQA,EAAK,YACfA,EAAK,WAAW,SAAS,EAE3B,OAAO,KAAK,UAAUP,CAAY,CACpC,CACA,OAAQ,CACN,IAAIhF,EAAG2E,EAGP,IAFA,KAAK,KAAK,EACVnE,GAAS,OAAO,IAAI,EACfR,EAAI,EAAG2E,EAAO,KAAK,KAAK,SAAS,OAAQ3E,EAAI2E,EAAM,EAAE3E,EACxD,KAAK,oBAAoBA,CAAC,CAE9B,CACA,SAAU,CACR,KAAK,cAAc,eAAe,EAClC,GAAM,CACJ,OAAAge,EACA,IAAAvT,CACF,EAAI,KACJ,KAAK,MAAM,EACX,KAAK,OAAO,WAAW,EACnBuT,IACF,KAAK,aAAa,EAClBqW,GAAYrW,EAAQvT,CAAG,EACvB,KAAK,SAAS,eAAeA,CAAG,EAChC,KAAK,OAAS,KACd,KAAK,IAAM,MAEb,OAAOyoB,GAAU,KAAK,EAAE,EACxB,KAAK,cAAc,cAAc,CACnC,CACA,iBAAiB/mB,EAAM,CACrB,OAAO,KAAK,OAAO,UAAU,GAAGA,CAAI,CACtC,CACA,YAAa,CACX,KAAK,eAAe,EAChB,KAAK,QAAQ,WACf,KAAK,qBAAqB,EAE1B,KAAK,SAAW,EAEpB,CACA,gBAAiB,CACf,IAAMmqB,EAAY,KAAK,WACjBC,EAAW,KAAK,SAChBC,EAAO,CAAC/2B,EAAMye,IAAa,CAC/BqY,EAAS,iBAAiB,KAAM92B,EAAMye,CAAQ,EAC9CoY,EAAU72B,CAAI,EAAIye,CACpB,EACMA,EAAW,CAAC1K,EAAGvP,EAAGC,IAAM,CAC5BsP,EAAE,QAAUvP,EACZuP,EAAE,QAAUtP,EACZ,KAAK,cAAcsP,CAAC,CACtB,EACAqK,EAAK,KAAK,QAAQ,OAAQpe,GAAQ+2B,EAAK/2B,EAAMye,CAAQ,CAAC,CACxD,CACA,sBAAuB,CAChB,KAAK,uBACR,KAAK,qBAAuB,CAAC,GAE/B,IAAMoY,EAAY,KAAK,qBACjBC,EAAW,KAAK,SAChBC,EAAO,CAAC/2B,EAAMye,IAAa,CAC/BqY,EAAS,iBAAiB,KAAM92B,EAAMye,CAAQ,EAC9CoY,EAAU72B,CAAI,EAAIye,CACpB,EACMuY,EAAU,CAACh3B,EAAMye,IAAa,CAC9BoY,EAAU72B,CAAI,IAChB82B,EAAS,oBAAoB,KAAM92B,EAAMye,CAAQ,EACjD,OAAOoY,EAAU72B,CAAI,EAEzB,EACMye,EAAW,CAAClB,EAAOC,IAAW,CAC9B,KAAK,QACP,KAAK,OAAOD,EAAOC,CAAM,CAE7B,EACIyZ,EACEC,EAAW,IAAM,CACrBF,EAAQ,SAAUE,CAAQ,EAC1B,KAAK,SAAW,GAChB,KAAK,OAAO,EACZH,EAAK,SAAUtY,CAAQ,EACvBsY,EAAK,SAAUE,CAAQ,CACzB,EACAA,EAAW,IAAM,CACf,KAAK,SAAW,GAChBD,EAAQ,SAAUvY,CAAQ,EAC1B,KAAK,MAAM,EACX,KAAK,QAAQ,EAAG,CAAC,EACjBsY,EAAK,SAAUG,CAAQ,CACzB,EACIJ,EAAS,WAAW,KAAK,MAAM,EACjCI,EAAS,EAETD,EAAS,CAEb,CACA,cAAe,CACb7Y,EAAK,KAAK,WAAY,CAACK,EAAUze,IAAS,CACxC,KAAK,SAAS,oBAAoB,KAAMA,EAAMye,CAAQ,CACxD,CAAC,EACD,KAAK,WAAa,CAAC,EACnBL,EAAK,KAAK,qBAAsB,CAACK,EAAUze,IAAS,CAClD,KAAK,SAAS,oBAAoB,KAAMA,EAAMye,CAAQ,CACxD,CAAC,EACD,KAAK,qBAAuB,MAC9B,CACA,iBAAiBne,EAAO+H,EAAM8uB,EAAS,CACrC,IAAMC,EAASD,EAAU,MAAQ,SAC7BrxB,EAAMrF,EAAMF,EAAG2E,EAKnB,IAJImD,IAAS,YACXvC,EAAO,KAAK,eAAexF,EAAM,CAAC,EAAE,YAAY,EAChDwF,EAAK,WAAW,IAAMsxB,EAAS,mBAAmB,EAAE,GAEjD72B,EAAI,EAAG2E,EAAO5E,EAAM,OAAQC,EAAI2E,EAAM,EAAE3E,EAAG,CAC9CE,EAAOH,EAAMC,CAAC,EACd,IAAM6G,EAAa3G,GAAQ,KAAK,eAAeA,EAAK,YAAY,EAAE,WAC9D2G,GACFA,EAAWgwB,EAAS,YAAY,EAAE32B,EAAK,QAASA,EAAK,aAAcA,EAAK,KAAK,CAEjF,CACF,CACA,mBAAoB,CAClB,OAAO,KAAK,SAAW,CAAC,CAC1B,CACA,kBAAkB42B,EAAgB,CAChC,IAAMC,EAAa,KAAK,SAAW,CAAC,EAC9BnsB,EAASksB,EAAe,IAAI,CAAC,CACjC,aAAA9xB,EACA,MAAAiC,CACF,IAAM,CACJ,IAAM1B,EAAO,KAAK,eAAeP,CAAY,EAC7C,GAAI,CAACO,EACH,MAAM,IAAI,MAAM,6BAA+BP,CAAY,EAE7D,MAAO,CACL,aAAAA,EACA,QAASO,EAAK,KAAK0B,CAAK,EACxB,MAAAA,CACF,CACF,CAAC,EACe,CAAC+vB,GAAepsB,EAAQmsB,CAAU,IAEhD,KAAK,QAAUnsB,EACf,KAAK,WAAa,KAClB,KAAK,mBAAmBA,EAAQmsB,CAAU,EAE9C,CACA,cAAczI,EAAMniB,EAAMoiB,EAAQ,CAChC,OAAO,KAAK,SAAS,OAAO,KAAMD,EAAMniB,EAAMoiB,CAAM,CACtD,CACA,gBAAgB0I,EAAU,CACxB,OAAO,KAAK,SAAS,OAAO,OAAO/E,GAAKA,EAAE,OAAO,KAAO+E,CAAQ,EAAE,SAAW,CAC/E,CACA,mBAAmBrsB,EAAQmsB,EAAYG,EAAQ,CAC7C,IAAMC,EAAe,KAAK,QAAQ,MAC5BvU,EAAO,CAACpW,EAAGlI,IAAMkI,EAAE,OAAOvI,GAAK,CAACK,EAAE,KAAKJ,GAAKD,EAAE,eAAiBC,EAAE,cAAgBD,EAAE,QAAUC,EAAE,KAAK,CAAC,EACrGkzB,EAAcxU,EAAKmU,EAAYnsB,CAAM,EACrCysB,EAAYH,EAAStsB,EAASgY,EAAKhY,EAAQmsB,CAAU,EACvDK,EAAY,QACd,KAAK,iBAAiBA,EAAaD,EAAa,KAAM,EAAK,EAEzDE,EAAU,QAAUF,EAAa,MACnC,KAAK,iBAAiBE,EAAWF,EAAa,KAAM,EAAI,CAE5D,CACA,cAAc3jB,EAAG0jB,EAAQ,CACvB,IAAM/qB,EAAO,CACX,MAAOqH,EACP,OAAA0jB,EACA,WAAY,GACZ,YAAa,KAAK,cAAc1jB,CAAC,CACnC,EACM8jB,EAAc5I,IAAWA,EAAO,QAAQ,QAAU,KAAK,QAAQ,QAAQ,SAASlb,EAAE,OAAO,IAAI,EACnG,GAAI,KAAK,cAAc,cAAerH,EAAMmrB,CAAW,IAAM,GAC3D,OAEF,IAAM1a,EAAU,KAAK,aAAapJ,EAAG0jB,EAAQ/qB,EAAK,WAAW,EAC7D,OAAAA,EAAK,WAAa,GAClB,KAAK,cAAc,aAAcA,EAAMmrB,CAAW,GAC9C1a,GAAWzQ,EAAK,UAClB,KAAK,OAAO,EAEP,IACT,CACA,aAAaqH,EAAG0jB,EAAQzD,EAAa,CACnC,GAAM,CACJ,QAASsD,EAAa,CAAC,EACvB,QAAAn0B,CACF,EAAI,KACEiW,EAAmBqe,EACnBtsB,EAAS,KAAK,mBAAmB4I,EAAGujB,EAAYtD,EAAa5a,CAAgB,EAC7E6a,EAAU6D,GAAc/jB,CAAC,EACzBggB,EAAYD,GAAmB/f,EAAG,KAAK,WAAYigB,EAAaC,CAAO,EACzED,IACF,KAAK,WAAa,KAClBlO,EAAS3iB,EAAQ,QAAS,CAAC4Q,EAAG5I,EAAQ,IAAI,EAAG,IAAI,EAC7C8oB,GACFnO,EAAS3iB,EAAQ,QAAS,CAAC4Q,EAAG5I,EAAQ,IAAI,EAAG,IAAI,GAGrD,IAAMgS,EAAU,CAACoa,GAAepsB,EAAQmsB,CAAU,EAClD,OAAIna,GAAWsa,KACb,KAAK,QAAUtsB,EACf,KAAK,mBAAmBA,EAAQmsB,EAAYG,CAAM,GAEpD,KAAK,WAAa1D,EACX5W,CACT,CACA,mBAAmBpJ,EAAGujB,EAAYtD,EAAa5a,EAAkB,CAC/D,GAAIrF,EAAE,OAAS,WACb,MAAO,CAAC,EAEV,GAAI,CAACigB,EACH,OAAOsD,EAET,IAAMI,EAAe,KAAK,QAAQ,MAClC,OAAO,KAAK,0BAA0B3jB,EAAG2jB,EAAa,KAAMA,EAActe,CAAgB,CAC5F,CACF,CACA,OAAO8a,CACT,GAAG,EACH,SAASC,IAAoB,CAC3B,OAAO/V,EAAK8V,GAAM,UAAWr0B,GAASA,EAAM,SAAS,WAAW,CAAC,CACnE,CACA,SAASk4B,GAAS/sB,EAAK9C,EAASuK,EAAU,CACxC,GAAM,CACJ,WAAAD,EACA,EAAAhO,EACA,EAAAC,EACA,YAAAoQ,EACA,YAAAE,EACA,QAAA5R,CACF,EAAI+E,EACE,CACJ,YAAA8vB,EACA,gBAAAC,CACF,EAAI90B,EACE+0B,EAAiB,KAAK,IAAIF,EAAcnjB,EAAasjB,EAAgB3lB,EAAaC,CAAQ,CAAC,EAGjG,GAFAzH,EAAI,UAAU,EACdA,EAAI,IAAIxG,EAAGC,EAAGoQ,EAAcmjB,EAAc,EAAGxlB,EAAa0lB,EAAiB,EAAGzlB,EAAWylB,EAAiB,CAAC,EACvGnjB,EAAc,EAAG,CACnB,IAAMqjB,EAAiB,KAAK,IAAIJ,EAAcjjB,EAAaojB,EAAgB3lB,EAAaC,CAAQ,CAAC,EACjGzH,EAAI,IAAIxG,EAAGC,EAAGsQ,EAAcijB,EAAc,EAAGvlB,EAAW2lB,EAAiB,EAAG5lB,EAAa4lB,EAAiB,EAAG,EAAI,CACnH,KAAO,CACL,IAAMC,EAAY,KAAK,IAAIL,EAAc,EAAGnjB,EAAcsjB,EAAgB3lB,EAAaC,CAAQ,CAAC,EAChG,GAAIwlB,IAAoB,QACtBjtB,EAAI,IAAIxG,EAAGC,EAAG4zB,EAAW5lB,EAAWa,EAAK,EAAGd,EAAac,EAAK,EAAG,EAAI,UAC5D2kB,IAAoB,QAAS,CACtC,IAAMrzB,EAAI,EAAIyzB,EAAYA,EACpBzlB,EAAO,CAAChO,EAAI,KAAK,IAAI6N,EAAWa,EAAK,CAAC,EAAI9O,EAC1CqO,EAAO,CAACjO,EAAI,KAAK,IAAI6N,EAAWa,EAAK,CAAC,EAAI7O,EAC1CiO,EAAS9N,EAAI,KAAK,IAAI4N,EAAac,EAAK,CAAC,EAAI9O,EAC7CmO,EAAS/N,EAAI,KAAK,IAAI4N,EAAac,EAAK,CAAC,EAAI7O,EACnDuG,EAAI,OAAO4H,EAAMC,CAAI,EACrB7H,EAAI,OAAO0H,EAAQC,CAAM,CAC3B,CACF,CACA3H,EAAI,UAAU,EACdA,EAAI,OAAO,EAAG,CAAC,EACfA,EAAI,KAAK,EAAG,EAAGA,EAAI,OAAO,MAAOA,EAAI,OAAO,MAAM,EAClDA,EAAI,KAAK,SAAS,CACpB,CACA,SAASstB,GAAQttB,EAAK9C,EAASuK,EAAU,CACvC,GAAM,CACJ,WAAAD,EACA,YAAA+lB,EACA,EAAA/zB,EACA,EAAAC,EACA,YAAAoQ,EACA,YAAAE,CACF,EAAI7M,EACAswB,EAAcD,EAAc1jB,EAGhC7J,EAAI,UAAU,EACdA,EAAI,IAAIxG,EAAGC,EAAGoQ,EAAarC,EAAagmB,EAAa/lB,EAAW+lB,CAAW,EACvEzjB,EAAcwjB,GAChBC,EAAcD,EAAcxjB,EAC5B/J,EAAI,IAAIxG,EAAGC,EAAGsQ,EAAatC,EAAW+lB,EAAahmB,EAAagmB,EAAa,EAAI,GAEjFxtB,EAAI,IAAIxG,EAAGC,EAAG8zB,EAAa9lB,EAAWW,EAASZ,EAAaY,CAAO,EAErEpI,EAAI,UAAU,EACdA,EAAI,KAAK,CACX,CACA,SAASytB,GAAgBh1B,EAAO,CAC9B,OAAOi1B,GAAkBj1B,EAAO,CAAC,aAAc,WAAY,aAAc,UAAU,CAAC,CACtF,CAIA,SAASk1B,GAAoBtjB,EAAKN,EAAaF,EAAa+jB,EAAY,CACtE,IAAMC,EAAIJ,GAAgBpjB,EAAI,QAAQ,YAAY,EAC5CyjB,GAAiBjkB,EAAcE,GAAe,EAC9CgkB,EAAa,KAAK,IAAID,EAAeF,EAAa7jB,EAAc,CAAC,EAQjEikB,EAAoB3oB,GAAO,CAC/B,IAAM4oB,GAAiBpkB,EAAc,KAAK,IAAIikB,EAAezoB,CAAG,GAAKuoB,EAAa,EAClF,OAAO7R,EAAY1W,EAAK,EAAG,KAAK,IAAIyoB,EAAeG,CAAa,CAAC,CACnE,EACA,MAAO,CACL,WAAYD,EAAkBH,EAAE,UAAU,EAC1C,SAAUG,EAAkBH,EAAE,QAAQ,EACtC,WAAY9R,EAAY8R,EAAE,WAAY,EAAGE,CAAU,EACnD,SAAUhS,EAAY8R,EAAE,SAAU,EAAGE,CAAU,CACjD,CACF,CAIA,SAASG,GAAWt0B,EAAGu0B,EAAO30B,EAAGC,EAAG,CAClC,MAAO,CACL,EAAGD,EAAII,EAAI,KAAK,IAAIu0B,CAAK,EACzB,EAAG10B,EAAIG,EAAI,KAAK,IAAIu0B,CAAK,CAC3B,CACF,CAeA,SAASC,GAAQpuB,EAAK9C,EAASsa,EAAQlO,EAAShI,EAAK+sB,EAAU,CAC7D,GAAM,CACJ,EAAA70B,EACA,EAAAC,EACA,WAAYqF,EACZ,YAAAyuB,EACA,YAAae,CACf,EAAIpxB,EACE2M,EAAc,KAAK,IAAI3M,EAAQ,YAAcoM,EAAUkO,EAAS+V,EAAa,CAAC,EAC9ExjB,EAAcukB,EAAS,EAAIA,EAAShlB,EAAUkO,EAAS+V,EAAc,EACvEgB,EAAgB,EACdC,EAAQltB,EAAMxC,EACpB,GAAIwK,EAAS,CAIX,IAAMmlB,EAAuBH,EAAS,EAAIA,EAAShlB,EAAU,EACvDolB,EAAuB7kB,EAAc,EAAIA,EAAcP,EAAU,EACjEqlB,GAAsBF,EAAuBC,GAAwB,EACrEE,GAAgBD,IAAuB,EAAIH,EAAQG,GAAsBA,EAAqBrlB,GAAWklB,EAC/GD,GAAiBC,EAAQI,IAAiB,CAC5C,CACA,IAAMC,EAAO,KAAK,IAAI,KAAOL,EAAQ3kB,EAAc2N,EAASlP,CAAE,EAAIuB,EAC5DilB,GAAeN,EAAQK,GAAQ,EAC/BrnB,EAAa1I,EAAQgwB,EAAcP,EACnC9mB,EAAWnG,EAAMwtB,EAAcP,EAC/B,CACJ,WAAAQ,EACA,SAAAC,EACA,WAAAC,EACA,SAAAC,CACF,EAAIvB,GAAoBzwB,EAAS6M,EAAaF,EAAapC,EAAWD,CAAU,EAC1E2nB,EAA2BtlB,EAAcklB,EACzCK,EAAyBvlB,EAAcmlB,EACvCK,EAA0B7nB,EAAaunB,EAAaI,EACpDG,EAAwB7nB,EAAWunB,EAAWI,EAC9CG,EAA2BxlB,EAAcklB,EACzCO,EAAyBzlB,EAAcmlB,EACvCO,EAA0BjoB,EAAaynB,EAAaM,EACpDG,GAAwBjoB,EAAWynB,EAAWM,EAEpD,GADAxvB,EAAI,UAAU,EACVquB,EAAU,CAEZ,IAAMsB,GAAyBN,EAA0BC,GAAyB,EAIlF,GAHAtvB,EAAI,IAAIxG,EAAGC,EAAGoQ,EAAawlB,EAAyBM,CAAqB,EACzE3vB,EAAI,IAAIxG,EAAGC,EAAGoQ,EAAa8lB,EAAuBL,CAAqB,EAEnEN,EAAW,EAAG,CAChB,IAAMY,EAAU1B,GAAWkB,EAAwBE,EAAuB91B,EAAGC,CAAC,EAC9EuG,EAAI,IAAI4vB,EAAQ,EAAGA,EAAQ,EAAGZ,EAAUM,EAAuB7nB,EAAWW,CAAO,CACnF,CAEA,IAAMynB,EAAK3B,GAAWsB,EAAwB/nB,EAAUjO,EAAGC,CAAC,EAG5D,GAFAuG,EAAI,OAAO6vB,EAAG,EAAGA,EAAG,CAAC,EAEjBX,EAAW,EAAG,CAChB,IAAMU,EAAU1B,GAAWsB,EAAwBE,GAAuBl2B,EAAGC,CAAC,EAC9EuG,EAAI,IAAI4vB,EAAQ,EAAGA,EAAQ,EAAGV,EAAUznB,EAAWW,EAASsnB,GAAwB,KAAK,EAAE,CAC7F,CAEA,IAAMI,GAAyBroB,EAAWynB,EAAWnlB,GAAevC,EAAaynB,EAAallB,IAAgB,EAI9G,GAHA/J,EAAI,IAAIxG,EAAGC,EAAGsQ,EAAatC,EAAWynB,EAAWnlB,EAAa+lB,EAAuB,EAAI,EACzF9vB,EAAI,IAAIxG,EAAGC,EAAGsQ,EAAa+lB,EAAuBtoB,EAAaynB,EAAallB,EAAa,EAAI,EAEzFklB,EAAa,EAAG,CAClB,IAAMW,EAAU1B,GAAWqB,EAA0BE,EAAyBj2B,EAAGC,CAAC,EAClFuG,EAAI,IAAI4vB,EAAQ,EAAGA,EAAQ,EAAGX,EAAYQ,EAA0B,KAAK,GAAIjoB,EAAaY,CAAO,CACnG,CAEA,IAAM2nB,GAAK7B,GAAWiB,EAA0B3nB,EAAYhO,EAAGC,CAAC,EAGhE,GAFAuG,EAAI,OAAO+vB,GAAG,EAAGA,GAAG,CAAC,EAEjBhB,EAAa,EAAG,CAClB,IAAMa,EAAU1B,GAAWiB,EAA0BE,EAAyB71B,EAAGC,CAAC,EAClFuG,EAAI,IAAI4vB,EAAQ,EAAGA,EAAQ,EAAGb,EAAYvnB,EAAaY,EAASinB,CAAuB,CACzF,CACF,KAAO,CACLrvB,EAAI,OAAOxG,EAAGC,CAAC,EACf,IAAMu2B,EAAc,KAAK,IAAIX,CAAuB,EAAIxlB,EAAcrQ,EAChEy2B,EAAc,KAAK,IAAIZ,CAAuB,EAAIxlB,EAAcpQ,EACtEuG,EAAI,OAAOgwB,EAAaC,CAAW,EACnC,IAAMC,EAAY,KAAK,IAAIZ,CAAqB,EAAIzlB,EAAcrQ,EAC5D22B,GAAY,KAAK,IAAIb,CAAqB,EAAIzlB,EAAcpQ,EAClEuG,EAAI,OAAOkwB,EAAWC,EAAS,CACjC,CACAnwB,EAAI,UAAU,CAChB,CACA,SAASowB,GAAQpwB,EAAK9C,EAASsa,EAAQlO,EAAS+kB,EAAU,CACxD,GAAM,CACJ,YAAAgC,EACA,WAAA7oB,EACA,cAAAP,CACF,EAAI/J,EACAuK,EAAWvK,EAAQ,SACvB,GAAImzB,EAAa,CACfjC,GAAQpuB,EAAK9C,EAASsa,EAAQlO,EAAS7B,EAAU4mB,CAAQ,EACzD,QAAS94B,EAAI,EAAGA,EAAI86B,EAAa,EAAE96B,EACjCyK,EAAI,KAAK,EAEN,MAAMiH,CAAa,IACtBQ,EAAWD,GAAcP,EAAgBM,GAAOA,GAEpD,CACA,OAAA6mB,GAAQpuB,EAAK9C,EAASsa,EAAQlO,EAAS7B,EAAU4mB,CAAQ,EACzDruB,EAAI,KAAK,EACFyH,CACT,CACA,SAAS6oB,GAAWtwB,EAAK9C,EAASsa,EAAQlO,EAAS+kB,EAAU,CAC3D,GAAM,CACJ,YAAAgC,EACA,WAAA7oB,EACA,cAAAP,EACA,QAAA9O,CACF,EAAI+E,EACE,CACJ,YAAA8vB,EACA,gBAAAC,EACA,WAAAlN,EACA,iBAAAC,EACA,aAAApX,CACF,EAAIzQ,EACEo4B,EAAQp4B,EAAQ,cAAgB,QACtC,GAAI,CAAC60B,EACH,OAEFhtB,EAAI,YAAY+f,GAAc,CAAC,CAAC,EAChC/f,EAAI,eAAiBggB,EACjBuQ,GACFvwB,EAAI,UAAYgtB,EAAc,EAC9BhtB,EAAI,SAAWitB,GAAmB,UAElCjtB,EAAI,UAAYgtB,EAChBhtB,EAAI,SAAWitB,GAAmB,SAEpC,IAAIxlB,EAAWvK,EAAQ,SACvB,GAAImzB,EAAa,CACfjC,GAAQpuB,EAAK9C,EAASsa,EAAQlO,EAAS7B,EAAU4mB,CAAQ,EACzD,QAAS94B,EAAI,EAAGA,EAAI86B,EAAa,EAAE96B,EACjCyK,EAAI,OAAO,EAER,MAAMiH,CAAa,IACtBQ,EAAWD,GAAcP,EAAgBM,GAAOA,GAEpD,CACIgpB,GACFjD,GAAQttB,EAAK9C,EAASuK,CAAQ,EAE5BtP,EAAQ,UAAYsP,EAAWD,GAAcc,GAAMM,IAAiB,GAAKqkB,IAAoB,SAC/FF,GAAS/sB,EAAK9C,EAASuK,CAAQ,EAE5B4oB,IACHjC,GAAQpuB,EAAK9C,EAASsa,EAAQlO,EAAS7B,EAAU4mB,CAAQ,EACzDruB,EAAI,OAAO,EAEf,CACA,IAAMwwB,GAAN,cAAyBla,EAAQ,CAC/B,OAAO,GAAK,MACZ,OAAO,SAAW,CAChB,YAAa,SACb,YAAa,OACb,WAAY,CAAC,EACb,iBAAkB,EAClB,gBAAiB,OACjB,aAAc,EACd,YAAa,EACb,OAAQ,EACR,QAAS,EACT,MAAO,OACP,SAAU,GACV,SAAU,EACZ,EACA,OAAO,cAAgB,CACrB,gBAAiB,iBACnB,EACA,OAAO,YAAc,CACnB,YAAa,GACb,WAAY9Q,GAAQA,IAAS,YAC/B,EACA,cACA,SACA,YACA,YACA,YACA,YACA,WACA,YAAY/O,EAAK,CACf,MAAM,EACN,KAAK,QAAU,OACf,KAAK,cAAgB,OACrB,KAAK,WAAa,OAClB,KAAK,SAAW,OAChB,KAAK,YAAc,OACnB,KAAK,YAAc,OACnB,KAAK,YAAc,EACnB,KAAK,YAAc,EACfA,GACF,OAAO,OAAO,KAAMA,CAAG,CAE3B,CACA,QAAQg6B,EAAQC,EAAQtiB,EAAkB,CACxC,IAAMzH,EAAQ,KAAK,SAAS,CAAC,IAAK,GAAG,EAAGyH,CAAgB,EAClD,CACJ,MAAArG,EACA,SAAA+G,CACF,EAAIL,GAAkB9H,EAAO,CAC3B,EAAG8pB,EACH,EAAGC,CACL,CAAC,EACK,CACJ,WAAAlpB,EACA,SAAAC,EACA,YAAAsC,EACA,YAAAF,EACA,cAAA5C,CACF,EAAI,KAAK,SAAS,CAAC,aAAc,WAAY,cAAe,cAAe,eAAe,EAAGmH,CAAgB,EACvGuiB,GAAW,KAAK,QAAQ,QAAU,KAAK,QAAQ,aAAe,EAC9DC,EAAiB7yB,EAAekJ,EAAeQ,EAAWD,CAAU,EACpEqpB,EAAiB7oB,GAAcD,EAAOP,EAAYC,CAAQ,GAAKD,IAAeC,EAC9EqpB,EAAgBF,GAAkBrpB,GAAOspB,EACzCE,EAAeC,GAAWliB,EAAU/E,EAAc4mB,EAAS9mB,EAAc8mB,CAAO,EACtF,OAAOG,GAAiBC,CAC1B,CACA,eAAe3iB,EAAkB,CAC/B,GAAM,CACJ,EAAA5U,EACA,EAAAC,EACA,WAAA+N,EACA,SAAAC,EACA,YAAAsC,EACA,YAAAF,CACF,EAAI,KAAK,SAAS,CAAC,IAAK,IAAK,aAAc,WAAY,cAAe,aAAa,EAAGuE,CAAgB,EAChG,CACJ,OAAAoJ,EACA,QAAAlO,CACF,EAAI,KAAK,QACH2nB,GAAazpB,EAAaC,GAAY,EACtCypB,GAAcnnB,EAAcF,EAAcP,EAAUkO,GAAU,EACpE,MAAO,CACL,EAAGhe,EAAI,KAAK,IAAIy3B,CAAS,EAAIC,EAC7B,EAAGz3B,EAAI,KAAK,IAAIw3B,CAAS,EAAIC,CAC/B,CACF,CACA,gBAAgB9iB,EAAkB,CAChC,OAAO,KAAK,eAAeA,CAAgB,CAC7C,CACA,KAAKpO,EAAK,CACR,GAAM,CACJ,QAAA7H,EACA,cAAA8O,CACF,EAAI,KACEuQ,GAAUrf,EAAQ,QAAU,GAAK,EACjCmR,GAAWnR,EAAQ,SAAW,GAAK,EACnCk2B,EAAWl2B,EAAQ,SAGzB,GAFA,KAAK,YAAcA,EAAQ,cAAgB,QAAU,IAAO,EAC5D,KAAK,YAAc8O,EAAgBM,EAAM,KAAK,MAAMN,EAAgBM,CAAG,EAAI,EACvEN,IAAkB,GAAK,KAAK,YAAc,GAAK,KAAK,YAAc,EACpE,OAEFjH,EAAI,KAAK,EACT,IAAMixB,GAAa,KAAK,WAAa,KAAK,UAAY,EACtDjxB,EAAI,UAAU,KAAK,IAAIixB,CAAS,EAAIzZ,EAAQ,KAAK,IAAIyZ,CAAS,EAAIzZ,CAAM,EACxE,IAAM2Z,EAAM,EAAI,KAAK,IAAI,KAAK,IAAI7oB,EAAIrB,GAAiB,CAAC,CAAC,EACnDmqB,EAAe5Z,EAAS2Z,EAC9BnxB,EAAI,UAAY7H,EAAQ,gBACxB6H,EAAI,YAAc7H,EAAQ,YAC1Bi4B,GAAQpwB,EAAK,KAAMoxB,EAAc9nB,EAAS+kB,CAAQ,EAClDiC,GAAWtwB,EAAK,KAAMoxB,EAAc9nB,EAAS+kB,CAAQ,EACrDruB,EAAI,QAAQ,CACd,CACF,EACA,SAASqxB,GAASrxB,EAAK7H,EAAS2Q,EAAQ3Q,EAAS,CAC/C6H,EAAI,QAAUjC,EAAe+K,EAAM,eAAgB3Q,EAAQ,cAAc,EACzE6H,EAAI,YAAYjC,EAAe+K,EAAM,WAAY3Q,EAAQ,UAAU,CAAC,EACpE6H,EAAI,eAAiBjC,EAAe+K,EAAM,iBAAkB3Q,EAAQ,gBAAgB,EACpF6H,EAAI,SAAWjC,EAAe+K,EAAM,gBAAiB3Q,EAAQ,eAAe,EAC5E6H,EAAI,UAAYjC,EAAe+K,EAAM,YAAa3Q,EAAQ,WAAW,EACrE6H,EAAI,YAAcjC,EAAe+K,EAAM,YAAa3Q,EAAQ,WAAW,CACzE,CACA,SAASm5B,GAAOtxB,EAAKuxB,EAAU76B,EAAQ,CACrCsJ,EAAI,OAAOtJ,EAAO,EAAGA,EAAO,CAAC,CAC/B,CACA,SAAS86B,GAAcr5B,EAAS,CAC9B,OAAIA,EAAQ,QACHs5B,GAELt5B,EAAQ,SAAWA,EAAQ,yBAA2B,WACjDu5B,GAEFJ,EACT,CACA,SAASK,GAASjrB,EAAQuE,EAASqF,EAAS,CAAC,EAAG,CAC9C,IAAMvR,EAAQ2H,EAAO,OACf,CACJ,MAAOkrB,EAAc,EACrB,IAAKC,EAAY9yB,EAAQ,CAC3B,EAAIuR,EACE,CACJ,MAAOwhB,EACP,IAAKC,CACP,EAAI9mB,EACEnM,EAAQ,KAAK,IAAI8yB,EAAaE,CAAY,EAC1CxwB,EAAM,KAAK,IAAIuwB,EAAWE,CAAU,EACpCC,EAAUJ,EAAcE,GAAgBD,EAAYC,GAAgBF,EAAcG,GAAcF,EAAYE,EAClH,MAAO,CACL,MAAAhzB,EACA,MAAAD,EACA,KAAMmM,EAAQ,KACd,KAAM3J,EAAMxC,GAAS,CAACkzB,EAAUjzB,EAAQuC,EAAMxC,EAAQwC,EAAMxC,CAC9D,CACF,CACA,SAASmzB,GAAYjyB,EAAK2K,EAAMM,EAASqF,EAAQ,CAC/C,GAAM,CACJ,OAAA5J,EACA,QAAAvO,CACF,EAAIwS,EACE,CACJ,MAAA5L,EACA,MAAAD,EACA,KAAA5H,EACA,KAAAgD,CACF,EAAIy3B,GAASjrB,EAAQuE,EAASqF,CAAM,EAC9B4hB,EAAaV,GAAcr5B,CAAO,EACpC,CACF,KAAAoJ,EAAO,GACP,QAAArI,CACF,EAAIoX,GAAU,CAAC,EACX/a,EAAGoR,EAAOzH,EACd,IAAK3J,EAAI,EAAGA,GAAK2E,EAAM,EAAE3E,EACvBoR,EAAQD,GAAQ5H,GAAS5F,EAAUgB,EAAO3E,EAAIA,IAAMwJ,CAAK,EACrD,CAAA4H,EAAM,OAECpF,GACTvB,EAAI,OAAO2G,EAAM,EAAGA,EAAM,CAAC,EAC3BpF,EAAO,IAEP2wB,EAAWlyB,EAAKd,EAAMyH,EAAOzN,EAASf,EAAQ,OAAO,EAEvD+G,EAAOyH,GAET,OAAIzP,IACFyP,EAAQD,GAAQ5H,GAAS5F,EAAUgB,EAAO,IAAM6E,CAAK,EACrDmzB,EAAWlyB,EAAKd,EAAMyH,EAAOzN,EAASf,EAAQ,OAAO,GAEhD,CAAC,CAACjB,CACX,CACA,SAASi7B,GAAgBnyB,EAAK2K,EAAMM,EAASqF,EAAQ,CACnD,IAAM5J,EAASiE,EAAK,OACd,CACJ,MAAA5L,EACA,MAAAD,EACA,KAAA5E,CACF,EAAIy3B,GAASjrB,EAAQuE,EAASqF,CAAM,EAC9B,CACJ,KAAA/O,EAAO,GACP,QAAArI,CACF,EAAIoX,GAAU,CAAC,EACX8hB,EAAO,EACPC,EAAS,EACT98B,EAAGoR,EAAO2rB,EAAO/pB,EAAMJ,EAAMoqB,EAC3BC,EAAah2B,IAAUsC,GAAS5F,EAAUgB,EAAOsC,EAAQA,IAAUuC,EACnE0zB,EAAQ,IAAM,CACdlqB,IAASJ,IACXnI,EAAI,OAAOoyB,EAAMjqB,CAAI,EACrBnI,EAAI,OAAOoyB,EAAM7pB,CAAI,EACrBvI,EAAI,OAAOoyB,EAAMG,CAAK,EAE1B,EAKA,IAJIhxB,IACFoF,EAAQD,EAAO8rB,EAAW,CAAC,CAAC,EAC5BxyB,EAAI,OAAO2G,EAAM,EAAGA,EAAM,CAAC,GAExBpR,EAAI,EAAGA,GAAK2E,EAAM,EAAE3E,EAAG,CAE1B,GADAoR,EAAQD,EAAO8rB,EAAWj9B,CAAC,CAAC,EACxBoR,EAAM,KACR,SAEF,IAAMnN,EAAImN,EAAM,EACVlN,EAAIkN,EAAM,EACV+rB,EAASl5B,EAAI,EACfk5B,IAAWJ,GACT74B,EAAI8O,EACNA,EAAO9O,EACEA,EAAI0O,IACbA,EAAO1O,GAET24B,GAAQC,EAASD,EAAO54B,GAAK,EAAE64B,IAE/BI,EAAM,EACNzyB,EAAI,OAAOxG,EAAGC,CAAC,EACf64B,EAAQI,EACRL,EAAS,EACT9pB,EAAOJ,EAAO1O,GAEhB84B,EAAQ94B,CACV,CACAg5B,EAAM,CACR,CACA,SAASE,GAAkBhoB,EAAM,CAC/B,IAAM1R,EAAO0R,EAAK,QACZoV,EAAa9mB,EAAK,YAAcA,EAAK,WAAW,OAEtD,MADoB,CAAC0R,EAAK,YAAc,CAACA,EAAK,OAAS,CAAC1R,EAAK,SAAWA,EAAK,yBAA2B,YAAc,CAACA,EAAK,SAAW,CAAC8mB,EACnHoS,GAAkBF,EACzC,CACA,SAASW,GAAwBz6B,EAAS,CACxC,OAAIA,EAAQ,QACH06B,GAEL16B,EAAQ,SAAWA,EAAQ,yBAA2B,WACjD26B,GAEFC,EACT,CACA,SAASC,GAAoBhzB,EAAK2K,EAAM7L,EAAOC,EAAO,CACpD,IAAIk0B,EAAOtoB,EAAK,MACXsoB,IACHA,EAAOtoB,EAAK,MAAQ,IAAI,OACpBA,EAAK,KAAKsoB,EAAMn0B,EAAOC,CAAK,GAC9Bk0B,EAAK,UAAU,GAGnB5B,GAASrxB,EAAK2K,EAAK,OAAO,EAC1B3K,EAAI,OAAOizB,CAAI,CACjB,CACA,SAASC,GAAiBlzB,EAAK2K,EAAM7L,EAAOC,EAAO,CACjD,GAAM,CACJ,SAAAo0B,EACA,QAAAh7B,CACF,EAAIwS,EACEyoB,EAAgBT,GAAkBhoB,CAAI,EAC5C,QAAWM,KAAWkoB,EACpB9B,GAASrxB,EAAK7H,EAAS8S,EAAQ,KAAK,EACpCjL,EAAI,UAAU,EACVozB,EAAcpzB,EAAK2K,EAAMM,EAAS,CACpC,MAAAnM,EACA,IAAKA,EAAQC,EAAQ,CACvB,CAAC,GACCiB,EAAI,UAAU,EAEhBA,EAAI,OAAO,CAEf,CACA,IAAMqzB,GAAY,OAAO,QAAW,WACpC,SAAS79B,GAAKwK,EAAK2K,EAAM7L,EAAOC,EAAO,CACjCs0B,IAAa,CAAC1oB,EAAK,QAAQ,QAC7BqoB,GAAoBhzB,EAAK2K,EAAM7L,EAAOC,CAAK,EAE3Cm0B,GAAiBlzB,EAAK2K,EAAM7L,EAAOC,CAAK,CAE5C,CACA,IAAIu0B,IAA4B,IAAM,CACpC,MAAMA,UAAoBhd,EAAQ,CAChC,OAAO,GAAK,OACZ,OAAO,SAAW,CAChB,eAAgB,OAChB,WAAY,CAAC,EACb,iBAAkB,EAClB,gBAAiB,QACjB,YAAa,EACb,gBAAiB,GACjB,uBAAwB,UACxB,KAAM,GACN,SAAU,GACV,QAAS,GACT,QAAS,CACX,EACA,OAAO,cAAgB,CACrB,gBAAiB,kBACjB,YAAa,aACf,EACA,OAAO,YAAc,CACnB,YAAa,GACb,WAAY9Q,GAAQA,IAAS,cAAgBA,IAAS,MACxD,EACA,YAAY/O,EAAK,CACf,MAAM,EACN,KAAK,SAAW,GAChB,KAAK,QAAU,OACf,KAAK,OAAS,OACd,KAAK,MAAQ,OACb,KAAK,UAAY,OACjB,KAAK,MAAQ,OACb,KAAK,QAAU,OACf,KAAK,UAAY,OACjB,KAAK,WAAa,GAClB,KAAK,eAAiB,GACtB,KAAK,cAAgB,OACjBA,GACF,OAAO,OAAO,KAAMA,CAAG,CAE3B,CACA,oBAAoB2S,EAAWlL,EAAW,CACxC,IAAM/F,EAAU,KAAK,QACrB,IAAKA,EAAQ,SAAWA,EAAQ,yBAA2B,aAAe,CAACA,EAAQ,SAAW,CAAC,KAAK,eAAgB,CAClH,IAAMjB,EAAOiB,EAAQ,SAAW,KAAK,MAAQ,KAAK,UAClDo7B,GAA2B,KAAK,QAASp7B,EAASiR,EAAWlS,EAAMgH,CAAS,EAC5E,KAAK,eAAiB,EACxB,CACF,CACA,IAAI,OAAOwI,EAAQ,CACjB,KAAK,QAAUA,EACf,OAAO,KAAK,UACZ,OAAO,KAAK,MACZ,KAAK,eAAiB,EACxB,CACA,IAAI,QAAS,CACX,OAAO,KAAK,OACd,CACA,IAAI,UAAW,CACb,OAAO,KAAK,YAAc,KAAK,UAAY8sB,GAAiB,KAAM,KAAK,QAAQ,OAAO,EACxF,CACA,OAAQ,CACN,IAAML,EAAW,KAAK,SAChBzsB,EAAS,KAAK,OACpB,OAAOysB,EAAS,QAAUzsB,EAAOysB,EAAS,CAAC,EAAE,KAAK,CACpD,CACA,MAAO,CACL,IAAMA,EAAW,KAAK,SAChBzsB,EAAS,KAAK,OACd3H,EAAQo0B,EAAS,OACvB,OAAOp0B,GAAS2H,EAAOysB,EAASp0B,EAAQ,CAAC,EAAE,GAAG,CAChD,CACA,YAAY4H,EAAOic,EAAU,CAC3B,IAAMzqB,EAAU,KAAK,QACfM,EAAQkO,EAAMic,CAAQ,EACtBlc,EAAS,KAAK,OACdysB,EAAWM,GAAe,KAAM,CACpC,SAAA7Q,EACA,MAAOnqB,EACP,IAAKA,CACP,CAAC,EACD,GAAI,CAAC06B,EAAS,OACZ,OAEF,IAAMhmB,EAAS,CAAC,EACVumB,EAAed,GAAwBz6B,CAAO,EAChD5C,EAAG2E,EACP,IAAK3E,EAAI,EAAG2E,EAAOi5B,EAAS,OAAQ59B,EAAI2E,EAAM,EAAE3E,EAAG,CACjD,GAAM,CACJ,MAAAuJ,EACA,IAAAwC,CACF,EAAI6xB,EAAS59B,CAAC,EACR4rB,EAAKza,EAAO5H,CAAK,EACjBsiB,EAAK1a,EAAOpF,CAAG,EACrB,GAAI6f,IAAOC,EAAI,CACbjU,EAAO,KAAKgU,CAAE,EACd,QACF,CACA,IAAMxnB,EAAI,KAAK,KAAKlB,EAAQ0oB,EAAGyB,CAAQ,IAAMxB,EAAGwB,CAAQ,EAAIzB,EAAGyB,CAAQ,EAAE,EACnE+Q,EAAeD,EAAavS,EAAIC,EAAIznB,EAAGxB,EAAQ,OAAO,EAC5Dw7B,EAAa/Q,CAAQ,EAAIjc,EAAMic,CAAQ,EACvCzV,EAAO,KAAKwmB,CAAY,CAC1B,CACA,OAAOxmB,EAAO,SAAW,EAAIA,EAAO,CAAC,EAAIA,CAC3C,CACA,YAAYnN,EAAKiL,EAASqF,EAAQ,CAEhC,OADsBqiB,GAAkB,IAAI,EACvB3yB,EAAK,KAAMiL,EAASqF,CAAM,CACjD,CACA,KAAKtQ,EAAKlB,EAAOC,EAAO,CACtB,IAAMo0B,EAAW,KAAK,SAChBC,EAAgBT,GAAkB,IAAI,EACxCz7B,EAAO,KAAK,MAChB4H,EAAQA,GAAS,EACjBC,EAAQA,GAAS,KAAK,OAAO,OAASD,EACtC,QAAWmM,KAAWkoB,EACpBj8B,GAAQk8B,EAAcpzB,EAAK,KAAMiL,EAAS,CACxC,MAAAnM,EACA,IAAKA,EAAQC,EAAQ,CACvB,CAAC,EAEH,MAAO,CAAC,CAAC7H,CACX,CACA,KAAK8I,EAAKoJ,EAAWtK,EAAOC,EAAO,CACjC,IAAM5G,EAAU,KAAK,SAAW,CAAC,GAClB,KAAK,QAAU,CAAC,GACpB,QAAUA,EAAQ,cAC3B6H,EAAI,KAAK,EACTxK,GAAKwK,EAAK,KAAMlB,EAAOC,CAAK,EAC5BiB,EAAI,QAAQ,GAEV,KAAK,WACP,KAAK,eAAiB,GACtB,KAAK,MAAQ,OAEjB,CACF,CACA,OAAOszB,CACT,GAAG,EACH,SAASM,GAAU1mB,EAAI6C,EAAKnT,EAAMwR,EAAkB,CAClD,IAAMjW,EAAU+U,EAAG,QACb,CACJ,CAACtQ,CAAI,EAAGnE,CACV,EAAIyU,EAAG,SAAS,CAACtQ,CAAI,EAAGwR,CAAgB,EACxC,OAAO,KAAK,IAAI2B,EAAMtX,CAAK,EAAIN,EAAQ,OAASA,EAAQ,SAC1D,CACA,IAAI07B,IAA6B,IAAM,CACrC,MAAMA,UAAqBvd,EAAQ,CACjC,OAAO,GAAK,QACZ,OACA,KACA,KAIA,OAAO,SAAW,CAChB,YAAa,EACb,UAAW,EACX,iBAAkB,EAClB,YAAa,EACb,WAAY,SACZ,OAAQ,EACR,SAAU,CACZ,EAIA,OAAO,cAAgB,CACrB,gBAAiB,kBACjB,YAAa,aACf,EACA,YAAY7f,EAAK,CACf,MAAM,EACN,KAAK,QAAU,OACf,KAAK,OAAS,OACd,KAAK,KAAO,OACZ,KAAK,KAAO,OACRA,GACF,OAAO,OAAO,KAAMA,CAAG,CAE3B,CACA,QAAQq9B,EAAQC,EAAQ3lB,EAAkB,CACxC,IAAMjW,EAAU,KAAK,QACf,CACJ,EAAAqB,EACA,EAAAC,CACF,EAAI,KAAK,SAAS,CAAC,IAAK,GAAG,EAAG2U,CAAgB,EAC9C,OAAO,KAAK,IAAI0lB,EAASt6B,EAAG,CAAC,EAAI,KAAK,IAAIu6B,EAASt6B,EAAG,CAAC,EAAI,KAAK,IAAItB,EAAQ,UAAYA,EAAQ,OAAQ,CAAC,CAC3G,CACA,SAAS27B,EAAQ1lB,EAAkB,CACjC,OAAOwlB,GAAU,KAAME,EAAQ,IAAK1lB,CAAgB,CACtD,CACA,SAAS2lB,EAAQ3lB,EAAkB,CACjC,OAAOwlB,GAAU,KAAMG,EAAQ,IAAK3lB,CAAgB,CACtD,CACA,eAAeA,EAAkB,CAC/B,GAAM,CACJ,EAAA5U,EACA,EAAAC,CACF,EAAI,KAAK,SAAS,CAAC,IAAK,GAAG,EAAG2U,CAAgB,EAC9C,MAAO,CACL,EAAA5U,EACA,EAAAC,CACF,CACF,CACA,KAAKtB,EAAS,CACZA,EAAUA,GAAW,KAAK,SAAW,CAAC,EACtC,IAAI2O,EAAS3O,EAAQ,QAAU,EAC/B2O,EAAS,KAAK,IAAIA,EAAQA,GAAU3O,EAAQ,aAAe,CAAC,EAC5D,IAAM60B,EAAclmB,GAAU3O,EAAQ,aAAe,EACrD,OAAQ2O,EAASkmB,GAAe,CAClC,CACA,KAAKhtB,EAAKE,EAAM,CACd,IAAM/H,EAAU,KAAK,QACjB,KAAK,MAAQA,EAAQ,OAAS,IAAO,CAACmW,GAAe,KAAMpO,EAAM,KAAK,KAAK/H,CAAO,EAAI,CAAC,IAG3F6H,EAAI,YAAc7H,EAAQ,YAC1B6H,EAAI,UAAY7H,EAAQ,YACxB6H,EAAI,UAAY7H,EAAQ,gBACxB67B,GAAUh0B,EAAK7H,EAAS,KAAK,EAAG,KAAK,CAAC,EACxC,CACA,UAAW,CACT,IAAMA,EAAU,KAAK,SAAW,CAAC,EAEjC,OAAOA,EAAQ,OAASA,EAAQ,SAClC,CACF,CACA,OAAO07B,CACT,GAAG,EACH,SAASI,GAAaC,EAAK9lB,EAAkB,CAC3C,GAAM,CACJ,EAAA5U,EACA,EAAAC,EACA,KAAAmL,EACA,MAAA2N,EACA,OAAAC,CACF,EAAI0hB,EAAI,SAAS,CAAC,IAAK,IAAK,OAAQ,QAAS,QAAQ,EAAG9lB,CAAgB,EACpEwC,EAAMC,EAAOlN,EAAKC,EAAQuwB,EAC9B,OAAID,EAAI,YACNC,EAAO3hB,EAAS,EAChB5B,EAAO,KAAK,IAAIpX,EAAGoL,CAAI,EACvBiM,EAAQ,KAAK,IAAIrX,EAAGoL,CAAI,EACxBjB,EAAMlK,EAAI06B,EACVvwB,EAASnK,EAAI06B,IAEbA,EAAO5hB,EAAQ,EACf3B,EAAOpX,EAAI26B,EACXtjB,EAAQrX,EAAI26B,EACZxwB,EAAM,KAAK,IAAIlK,EAAGmL,CAAI,EACtBhB,EAAS,KAAK,IAAInK,EAAGmL,CAAI,GAEpB,CACL,KAAAgM,EACA,IAAAjN,EACA,MAAAkN,EACA,OAAAjN,CACF,CACF,CACA,SAASwwB,GAAY7c,EAAM9e,EAAOU,EAAKC,EAAK,CAC1C,OAAOme,EAAO,EAAIwE,EAAYtjB,EAAOU,EAAKC,CAAG,CAC/C,CACA,SAASi7B,GAAiBH,EAAKI,EAAMC,EAAM,CACzC,IAAM97B,EAAQy7B,EAAI,QAAQ,YACpB3c,EAAO2c,EAAI,cACX,EAAIM,GAAO/7B,CAAK,EACtB,MAAO,CACL,EAAG27B,GAAY7c,EAAK,IAAK,EAAE,IAAK,EAAGgd,CAAI,EACvC,EAAGH,GAAY7c,EAAK,MAAO,EAAE,MAAO,EAAG+c,CAAI,EAC3C,EAAGF,GAAY7c,EAAK,OAAQ,EAAE,OAAQ,EAAGgd,CAAI,EAC7C,EAAGH,GAAY7c,EAAK,KAAM,EAAE,KAAM,EAAG+c,CAAI,CAC3C,CACF,CACA,SAASG,GAAkBP,EAAKI,EAAMC,EAAM,CAC1C,GAAM,CACJ,mBAAAG,CACF,EAAIR,EAAI,SAAS,CAAC,oBAAoB,CAAC,EACjCz7B,EAAQy7B,EAAI,QAAQ,aACpB,EAAIS,GAAcl8B,CAAK,EACvBm8B,EAAO,KAAK,IAAIN,EAAMC,CAAI,EAC1Bhd,EAAO2c,EAAI,cACXW,EAAeH,GAAsBh9B,EAASe,CAAK,EACzD,MAAO,CACL,QAAS27B,GAAY,CAACS,GAAgBtd,EAAK,KAAOA,EAAK,KAAM,EAAE,QAAS,EAAGqd,CAAI,EAC/E,SAAUR,GAAY,CAACS,GAAgBtd,EAAK,KAAOA,EAAK,MAAO,EAAE,SAAU,EAAGqd,CAAI,EAClF,WAAYR,GAAY,CAACS,GAAgBtd,EAAK,QAAUA,EAAK,KAAM,EAAE,WAAY,EAAGqd,CAAI,EACxF,YAAaR,GAAY,CAACS,GAAgBtd,EAAK,QAAUA,EAAK,MAAO,EAAE,YAAa,EAAGqd,CAAI,CAC7F,CACF,CACA,SAASE,GAAcZ,EAAK,CAC1B,IAAMa,EAASd,GAAaC,CAAG,EACzB3hB,EAAQwiB,EAAO,MAAQA,EAAO,KAC9BviB,EAASuiB,EAAO,OAASA,EAAO,IAChCvpB,EAAS6oB,GAAiBH,EAAK3hB,EAAQ,EAAGC,EAAS,CAAC,EACpD1L,EAAS2tB,GAAkBP,EAAK3hB,EAAQ,EAAGC,EAAS,CAAC,EAC3D,MAAO,CACL,MAAO,CACL,EAAGuiB,EAAO,KACV,EAAGA,EAAO,IACV,EAAGxiB,EACH,EAAGC,EACH,OAAA1L,CACF,EACA,MAAO,CACL,EAAGiuB,EAAO,KAAOvpB,EAAO,EACxB,EAAGupB,EAAO,IAAMvpB,EAAO,EACvB,EAAG+G,EAAQ/G,EAAO,EAAIA,EAAO,EAC7B,EAAGgH,EAAShH,EAAO,EAAIA,EAAO,EAC9B,OAAQ,CACN,QAAS,KAAK,IAAI,EAAG1E,EAAO,QAAU,KAAK,IAAI0E,EAAO,EAAGA,EAAO,CAAC,CAAC,EAClE,SAAU,KAAK,IAAI,EAAG1E,EAAO,SAAW,KAAK,IAAI0E,EAAO,EAAGA,EAAO,CAAC,CAAC,EACpE,WAAY,KAAK,IAAI,EAAG1E,EAAO,WAAa,KAAK,IAAI0E,EAAO,EAAGA,EAAO,CAAC,CAAC,EACxE,YAAa,KAAK,IAAI,EAAG1E,EAAO,YAAc,KAAK,IAAI0E,EAAO,EAAGA,EAAO,CAAC,CAAC,CAC5E,CACF,CACF,CACF,CACA,SAASqD,GAAQqlB,EAAK16B,EAAGC,EAAG2U,EAAkB,CAC5C,IAAM4mB,EAAQx7B,IAAM,KACdy7B,EAAQx7B,IAAM,KAEds7B,EAASb,GAAO,EADLc,GAASC,IACShB,GAAaC,EAAK9lB,CAAgB,EACrE,OAAO2mB,IAAWC,GAAShE,GAAWx3B,EAAGu7B,EAAO,KAAMA,EAAO,KAAK,KAAOE,GAASjE,GAAWv3B,EAAGs7B,EAAO,IAAKA,EAAO,MAAM,EAC3H,CACA,SAASG,GAAUpuB,EAAQ,CACzB,OAAOA,EAAO,SAAWA,EAAO,UAAYA,EAAO,YAAcA,EAAO,WAC1E,CACA,SAASquB,GAAkBn1B,EAAKo1B,EAAM,CACpCp1B,EAAI,KAAKo1B,EAAK,EAAGA,EAAK,EAAGA,EAAK,EAAGA,EAAK,CAAC,CACzC,CACA,SAASC,GAAYD,EAAME,EAAQC,EAAU,CAAC,EAAG,CAC/C,IAAM/7B,EAAI47B,EAAK,IAAMG,EAAQ,EAAI,CAACD,EAAS,EACrC77B,EAAI27B,EAAK,IAAMG,EAAQ,EAAI,CAACD,EAAS,EACrC1f,GAAKwf,EAAK,EAAIA,EAAK,IAAMG,EAAQ,EAAIA,EAAQ,EAAID,EAAS,GAAK97B,EAC/DglB,GAAK4W,EAAK,EAAIA,EAAK,IAAMG,EAAQ,EAAIA,EAAQ,EAAID,EAAS,GAAK77B,EACrE,MAAO,CACL,EAAG27B,EAAK,EAAI57B,EACZ,EAAG47B,EAAK,EAAI37B,EACZ,EAAG27B,EAAK,EAAIxf,EACZ,EAAGwf,EAAK,EAAI5W,EACZ,OAAQ4W,EAAK,MACf,CACF,CACA,IAAMI,GAAN,cAAyBlf,EAAQ,CAC/B,OAAO,GAAK,MACZ,OAAO,SAAW,CAChB,cAAe,QACf,YAAa,EACb,aAAc,EACd,cAAe,OACf,WAAY,MACd,EACA,OAAO,cAAgB,CACrB,gBAAiB,kBACjB,YAAa,aACf,EACA,YAAY7f,EAAK,CACf,MAAM,EACN,KAAK,QAAU,OACf,KAAK,WAAa,OAClB,KAAK,KAAO,OACZ,KAAK,MAAQ,OACb,KAAK,OAAS,OACd,KAAK,cAAgB,OACjBA,GACF,OAAO,OAAO,KAAMA,CAAG,CAE3B,CACA,KAAKuJ,EAAK,CACR,GAAM,CACJ,cAAAuE,EACA,QAAS,CACP,YAAAkxB,EACA,gBAAAxU,CACF,CACF,EAAI,KACE,CACJ,MAAAsP,EACA,MAAAmF,CACF,EAAIZ,GAAc,IAAI,EAChBa,EAAcT,GAAUQ,EAAM,MAAM,EAAIE,GAAqBT,GACnEn1B,EAAI,KAAK,GACL01B,EAAM,IAAMnF,EAAM,GAAKmF,EAAM,IAAMnF,EAAM,KAC3CvwB,EAAI,UAAU,EACd21B,EAAY31B,EAAKq1B,GAAYK,EAAOnxB,EAAegsB,CAAK,CAAC,EACzDvwB,EAAI,KAAK,EACT21B,EAAY31B,EAAKq1B,GAAY9E,EAAO,CAAChsB,EAAemxB,CAAK,CAAC,EAC1D11B,EAAI,UAAYy1B,EAChBz1B,EAAI,KAAK,SAAS,GAEpBA,EAAI,UAAU,EACd21B,EAAY31B,EAAKq1B,GAAY9E,EAAOhsB,CAAa,CAAC,EAClDvE,EAAI,UAAYihB,EAChBjhB,EAAI,KAAK,EACTA,EAAI,QAAQ,CACd,CACA,QAAQ8zB,EAAQC,EAAQ3lB,EAAkB,CACxC,OAAOS,GAAQ,KAAMilB,EAAQC,EAAQ3lB,CAAgB,CACvD,CACA,SAAS0lB,EAAQ1lB,EAAkB,CACjC,OAAOS,GAAQ,KAAMilB,EAAQ,KAAM1lB,CAAgB,CACrD,CACA,SAAS2lB,EAAQ3lB,EAAkB,CACjC,OAAOS,GAAQ,KAAM,KAAMklB,EAAQ3lB,CAAgB,CACrD,CACA,eAAeA,EAAkB,CAC/B,GAAM,CACJ,EAAA5U,EACA,EAAAC,EACA,KAAAmL,EACA,WAAAC,CACF,EAAI,KAAK,SAAS,CAAC,IAAK,IAAK,OAAQ,YAAY,EAAGuJ,CAAgB,EACpE,MAAO,CACL,EAAGvJ,GAAcrL,EAAIoL,GAAQ,EAAIpL,EACjC,EAAGqL,EAAapL,GAAKA,EAAImL,GAAQ,CACnC,CACF,CACA,SAAShI,EAAM,CACb,OAAOA,IAAS,IAAM,KAAK,MAAQ,EAAI,KAAK,OAAS,CACvD,CACF,EACIqD,GAAwB,OAAO,OAAO,CACxC,UAAW,KACX,WAAYuwB,GACZ,WAAYgF,GACZ,YAAalC,GACb,aAAcO,EAChB,CAAC,EACKgC,GAAgB,CAAC,oBAAqB,oBAAqB,oBAAqB,oBAAqB,oBAAqB,qBAAsB,oBACtJ,EAEMC,GAAmCD,GAAc,IAAIv/B,GAASA,EAAM,QAAQ,OAAQ,OAAO,EAAE,QAAQ,IAAK,QAAQ,CAAC,EACzH,SAASy/B,GAAexgC,EAAG,CACzB,OAAOsgC,GAActgC,EAAIsgC,GAAc,MAAM,CAC/C,CACA,SAASG,GAAmBzgC,EAAG,CAC7B,OAAOugC,GAAkBvgC,EAAIugC,GAAkB,MAAM,CACvD,CACA,SAASG,GAAuBr4B,EAAS,EAAG,CAC1C,OAAAA,EAAQ,YAAcm4B,GAAe,CAAC,EACtCn4B,EAAQ,gBAAkBo4B,GAAmB,CAAC,EACvC,EAAE,CACX,CACA,SAASE,GAAwBt4B,EAAS,EAAG,CAC3C,OAAAA,EAAQ,gBAAkBA,EAAQ,KAAK,IAAI,IAAMm4B,GAAe,GAAG,CAAC,EAC7D,CACT,CACA,SAASI,GAAyBv4B,EAAS,EAAG,CAC5C,OAAAA,EAAQ,gBAAkBA,EAAQ,KAAK,IAAI,IAAMo4B,GAAmB,GAAG,CAAC,EACjE,CACT,CACA,SAASI,GAAavhC,EAAO,CAC3B,IAAI,EAAI,EACR,MAAO,CAAC+I,EAASrD,IAAiB,CAChC,IAAM6B,EAAavH,EAAM,eAAe0F,CAAY,EAAE,WAClD6B,aAAsBoM,GACxB,EAAI0tB,GAAwBt4B,EAAS,CAAC,EAC7BxB,aAAsBuP,GAC/B,EAAIwqB,GAAyBv4B,EAAS,CAAC,EAC9BxB,IACT,EAAI65B,GAAuBr4B,EAAS,CAAC,EAEzC,CACF,CACA,SAASy4B,GAA0BtS,EAAa,CAC9C,IAAIuS,EACJ,IAAKA,KAAKvS,EACR,GAAIA,EAAYuS,CAAC,EAAE,aAAevS,EAAYuS,CAAC,EAAE,gBAC/C,MAAO,GAGX,MAAO,EACT,CACA,SAASC,GAAyBvS,EAAY,CAC5C,OAAOA,IAAeA,EAAW,aAAeA,EAAW,gBAC7D,CACA,SAASwS,IAAmC,CAC1C,OAAO5+B,EAAS,cAAgB,mBAAqBA,EAAS,kBAAoB,iBACpF,CACA,IAAI6+B,GAAgB,CAClB,GAAI,SACJ,SAAU,CACR,QAAS,GACT,cAAe,EACjB,EACA,aAAa5hC,EAAO6hC,EAAOv+B,EAAS,CAClC,GAAI,CAACA,EAAQ,QACX,OAEF,GAAM,CACJ,KAAM,CACJ,SAAAoyB,CACF,EACA,QAASoM,CACX,EAAI9hC,EAAM,OACJ,CACJ,SAAAoL,CACF,EAAI02B,EACEC,EAA0BP,GAA0B9L,CAAQ,GAAKgM,GAAyBI,CAAY,GAAK12B,GAAYo2B,GAA0Bp2B,CAAQ,GAAKu2B,GAAiC,EACrM,GAAI,CAACr+B,EAAQ,eAAiBy+B,EAC5B,OAEF,IAAMC,EAAYT,GAAavhC,CAAK,EACpC01B,EAAS,QAAQsM,CAAS,CAC5B,CACF,EACA,SAASC,GAAej8B,EAAMiE,EAAOC,EAAOiU,EAAgB7a,EAAS,CACnE,IAAM4+B,EAAU5+B,EAAQ,SAAW6a,EACnC,GAAI+jB,GAAWh4B,EACb,OAAOlE,EAAK,MAAMiE,EAAOA,EAAQC,CAAK,EAExC,IAAMi4B,EAAY,CAAC,EACbC,GAAel4B,EAAQ,IAAMg4B,EAAU,GACzCG,EAAe,EACbC,EAAWr4B,EAAQC,EAAQ,EAC7BgD,EAAIjD,EACJvJ,EAAG6hC,EAAcC,EAASn3B,EAAMo3B,EAEpC,IADAN,EAAUE,GAAc,EAAIr8B,EAAKkH,CAAC,EAC7BxM,EAAI,EAAGA,EAAIwhC,EAAU,EAAGxhC,IAAK,CAChC,IAAI68B,EAAO,EACPmF,EAAO,EACP5pB,EACE6pB,EAAgB,KAAK,OAAOjiC,EAAI,GAAK0hC,CAAW,EAAI,EAAIn4B,EACxD24B,EAAc,KAAK,IAAI,KAAK,OAAOliC,EAAI,GAAK0hC,CAAW,EAAI,EAAGl4B,CAAK,EAAID,EACvE44B,EAAiBD,EAAcD,EACrC,IAAK7pB,EAAI6pB,EAAe7pB,EAAI8pB,EAAa9pB,IACvCykB,GAAQv3B,EAAK8S,CAAC,EAAE,EAChB4pB,GAAQ18B,EAAK8S,CAAC,EAAE,EAElBykB,GAAQsF,EACRH,GAAQG,EACR,IAAMC,EAAY,KAAK,MAAMpiC,EAAI0hC,CAAW,EAAI,EAAIn4B,EAC9C84B,EAAU,KAAK,IAAI,KAAK,OAAOriC,EAAI,GAAK0hC,CAAW,EAAI,EAAGl4B,CAAK,EAAID,EACnE,CACJ,EAAG+4B,EACH,EAAGC,CACL,EAAIj9B,EAAKkH,CAAC,EAEV,IADAs1B,EAAUn3B,EAAO,GACZyN,EAAIgqB,EAAWhqB,EAAIiqB,EAASjqB,IAC/BzN,EAAO,GAAM,KAAK,KAAK23B,EAAUzF,IAASv3B,EAAK8S,CAAC,EAAE,EAAImqB,IAAYD,EAAUh9B,EAAK8S,CAAC,EAAE,IAAM4pB,EAAOO,EAAQ,EACrG53B,EAAOm3B,IACTA,EAAUn3B,EACVk3B,EAAev8B,EAAK8S,CAAC,EACrB2pB,EAAQ3pB,GAGZqpB,EAAUE,GAAc,EAAIE,EAC5Br1B,EAAIu1B,CACN,CACA,OAAAN,EAAUE,GAAc,EAAIr8B,EAAKs8B,CAAQ,EAClCH,CACT,CACA,SAASe,GAAiBl9B,EAAMiE,EAAOC,EAAOiU,EAAgB,CAC5D,IAAIof,EAAO,EACPC,EAAS,EACT98B,EAAGoR,EAAOnN,EAAGC,EAAG64B,EAAO0F,EAAUC,EAAUC,EAAY3vB,EAAMJ,EAC3D6uB,EAAY,CAAC,EACbG,EAAWr4B,EAAQC,EAAQ,EAC3Bo5B,EAAOt9B,EAAKiE,CAAK,EAAE,EAEnBs5B,EADOv9B,EAAKs8B,CAAQ,EAAE,EACVgB,EAClB,IAAK5iC,EAAIuJ,EAAOvJ,EAAIuJ,EAAQC,EAAO,EAAExJ,EAAG,CACtCoR,EAAQ9L,EAAKtF,CAAC,EACdiE,GAAKmN,EAAM,EAAIwxB,GAAQC,EAAKplB,EAC5BvZ,EAAIkN,EAAM,EACV,IAAM+rB,EAASl5B,EAAI,EACnB,GAAIk5B,IAAWJ,EACT74B,EAAI8O,GACNA,EAAO9O,EACPu+B,EAAWziC,GACFkE,EAAI0O,IACbA,EAAO1O,EACPw+B,EAAW1iC,GAEb68B,GAAQC,EAASD,EAAOzrB,EAAM,GAAK,EAAE0rB,MAChC,CACL,IAAMgG,EAAY9iC,EAAI,EACtB,GAAI,CAACkN,EAAcu1B,CAAQ,GAAK,CAACv1B,EAAcw1B,CAAQ,EAAG,CACxD,IAAMK,EAAqB,KAAK,IAAIN,EAAUC,CAAQ,EAChDM,EAAqB,KAAK,IAAIP,EAAUC,CAAQ,EAClDK,IAAuBJ,GAAcI,IAAuBD,GAC9DrB,EAAU,KAAKwB,GAAAC,GAAA,GACV59B,EAAKy9B,CAAkB,GADb,CAEb,EAAGlG,CACL,EAAC,EAECmG,IAAuBL,GAAcK,IAAuBF,GAC9DrB,EAAU,KAAKwB,GAAAC,GAAA,GACV59B,EAAK09B,CAAkB,GADb,CAEb,EAAGnG,CACL,EAAC,CAEL,CACI78B,EAAI,GAAK8iC,IAAcH,GACzBlB,EAAU,KAAKn8B,EAAKw9B,CAAS,CAAC,EAEhCrB,EAAU,KAAKrwB,CAAK,EACpB2rB,EAAQI,EACRL,EAAS,EACT9pB,EAAOJ,EAAO1O,EACdu+B,EAAWC,EAAWC,EAAa3iC,CACrC,CACF,CACA,OAAOyhC,CACT,CACA,SAAS0B,GAAsB96B,EAAS,CACtC,GAAIA,EAAQ,WAAY,CACtB,IAAM/C,EAAO+C,EAAQ,MACrB,OAAOA,EAAQ,WACf,OAAOA,EAAQ,MACf,OAAO,eAAeA,EAAS,OAAQ,CACrC,aAAc,GACd,WAAY,GACZ,SAAU,GACV,MAAO/C,CACT,CAAC,CACH,CACF,CACA,SAAS89B,GAAmB9jC,EAAO,CACjCA,EAAM,KAAK,SAAS,QAAQ+I,GAAW,CACrC86B,GAAsB96B,CAAO,CAC/B,CAAC,CACH,CACA,SAASg7B,GAA0C99B,EAAM4L,EAAQ,CAC/D,IAAMmyB,EAAanyB,EAAO,OACtB5H,EAAQ,EACRC,EACE,CACJ,OAAAhE,CACF,EAAID,EACE,CACJ,IAAA3B,EACA,IAAAC,EACA,WAAAsC,EACA,WAAAC,CACF,EAAIZ,EAAO,cAAc,EACzB,OAAIW,IACFoD,EAAQid,EAAY9O,GAAavG,EAAQ3L,EAAO,KAAM5B,CAAG,EAAE,GAAI,EAAG0/B,EAAa,CAAC,GAE9El9B,EACFoD,EAAQgd,EAAY9O,GAAavG,EAAQ3L,EAAO,KAAM3B,CAAG,EAAE,GAAK,EAAG0F,EAAO+5B,CAAU,EAAI/5B,EAExFC,EAAQ85B,EAAa/5B,EAEhB,CACL,MAAAA,EACA,MAAAC,CACF,CACF,CACA,IAAI+5B,GAAoB,CACtB,GAAI,aACJ,SAAU,CACR,UAAW,UACX,QAAS,EACX,EACA,qBAAsB,CAACjkC,EAAO6M,EAAMvJ,IAAY,CAC9C,GAAI,CAACA,EAAQ,QAAS,CACpBwgC,GAAmB9jC,CAAK,EACxB,MACF,CACA,IAAMme,EAAiBne,EAAM,MAC7BA,EAAM,KAAK,SAAS,QAAQ,CAAC+I,EAASrD,IAAiB,CACrD,GAAM,CACJ,MAAAgE,EACA,UAAAL,CACF,EAAIN,EACE9C,EAAOjG,EAAM,eAAe0F,CAAY,EACxCM,EAAO0D,GAASX,EAAQ,KAI9B,GAHI/G,GAAQ,CAACqH,EAAWrJ,EAAM,QAAQ,SAAS,CAAC,IAAM,KAGlD,CAACiG,EAAK,WAAW,mBACnB,OAEF,IAAMi+B,EAAQlkC,EAAM,OAAOiG,EAAK,OAAO,EAIvC,GAHIi+B,EAAM,OAAS,UAAYA,EAAM,OAAS,QAG1ClkC,EAAM,QAAQ,QAChB,OAEF,GAAI,CACF,MAAAiK,EACA,MAAAC,CACF,EAAI65B,GAA0C99B,EAAMD,CAAI,EAClDm+B,EAAY7gC,EAAQ,WAAa,EAAI6a,EAC3C,GAAIjU,GAASi6B,EAAW,CACtBN,GAAsB96B,CAAO,EAC7B,MACF,CACI6E,EAAclE,CAAK,IACrBX,EAAQ,MAAQ/C,EAChB,OAAO+C,EAAQ,KACf,OAAO,eAAeA,EAAS,OAAQ,CACrC,aAAc,GACd,WAAY,GACZ,IAAK,UAAY,CACf,OAAO,KAAK,UACd,EACA,IAAK,SAAU0nB,EAAG,CAChB,KAAK,MAAQA,CACf,CACF,CAAC,GAEH,IAAI0R,EACJ,OAAQ7+B,EAAQ,UAAW,CACzB,IAAK,OACH6+B,EAAYF,GAAej8B,EAAMiE,EAAOC,EAAOiU,EAAgB7a,CAAO,EACtE,MACF,IAAK,UACH6+B,EAAYe,GAAiBl9B,EAAMiE,EAAOC,EAAOiU,CAAc,EAC/D,MACF,QACE,MAAM,IAAI,MAAM,qCAAqC7a,EAAQ,SAAS,GAAG,CAC7E,CACAyF,EAAQ,WAAao5B,CACvB,CAAC,CACH,EACA,QAAQniC,EAAO,CACb8jC,GAAmB9jC,CAAK,CAC1B,CACF,EACA,SAASokC,GAAUtuB,EAAMjU,EAAQksB,EAAU,CACzC,IAAMuQ,EAAWxoB,EAAK,SAChBjE,EAASiE,EAAK,OACduuB,EAAUxiC,EAAO,OACjBssB,EAAQ,CAAC,EACf,QAAW/X,KAAWkoB,EAAU,CAC9B,GAAI,CACF,MAAAr0B,EACA,IAAAwC,CACF,EAAI2J,EACJ3J,EAAM63B,GAAgBr6B,EAAOwC,EAAKoF,CAAM,EACxC,IAAMquB,EAASqE,GAAWxW,EAAUlc,EAAO5H,CAAK,EAAG4H,EAAOpF,CAAG,EAAG2J,EAAQ,IAAI,EAC5E,GAAI,CAACvU,EAAO,SAAU,CACpBssB,EAAM,KAAK,CACT,OAAQ/X,EACR,OAAQ8pB,EACR,MAAOruB,EAAO5H,CAAK,EACnB,IAAK4H,EAAOpF,CAAG,CACjB,CAAC,EACD,QACF,CACA,IAAM+3B,EAAiB5F,GAAe/8B,EAAQq+B,CAAM,EACpD,QAAWuE,KAAOD,EAAgB,CAChC,IAAME,EAAYH,GAAWxW,EAAUsW,EAAQI,EAAI,KAAK,EAAGJ,EAAQI,EAAI,GAAG,EAAGA,EAAI,IAAI,EAC/EE,EAAcC,GAAcxuB,EAASvE,EAAQ6yB,CAAS,EAC5D,QAAWG,KAAcF,EACvBxW,EAAM,KAAK,CACT,OAAQ0W,EACR,OAAQJ,EACR,MAAO,CACL,CAAC1W,CAAQ,EAAG+W,GAAS5E,EAAQwE,EAAW,QAAS,KAAK,GAAG,CAC3D,EACA,IAAK,CACH,CAAC3W,CAAQ,EAAG+W,GAAS5E,EAAQwE,EAAW,MAAO,KAAK,GAAG,CACzD,CACF,CAAC,CAEL,CACF,CACA,OAAOvW,CACT,CACA,SAASoW,GAAWxW,EAAU1L,EAAOlS,EAAM9N,EAAM,CAC/C,GAAIA,EACF,OAEF,IAAI4H,EAAQoY,EAAM0L,CAAQ,EACtBthB,EAAM0D,EAAK4d,CAAQ,EACvB,OAAIA,IAAa,UACf9jB,EAAQquB,EAAgBruB,CAAK,EAC7BwC,EAAM6rB,EAAgB7rB,CAAG,GAEpB,CACL,SAAAshB,EACA,MAAA9jB,EACA,IAAAwC,CACF,CACF,CACA,SAASs4B,GAAoBC,EAAUlvB,EAAM,CAC3C,GAAM,CACJ,EAAAnR,EAAI,KACJ,EAAAC,EAAI,IACN,EAAIogC,GAAY,CAAC,EACXC,EAAanvB,EAAK,OAClBjE,EAAS,CAAC,EAChB,OAAAiE,EAAK,SAAS,QAAQ,CAAC,CACrB,MAAA7L,EACA,IAAAwC,CACF,IAAM,CACJA,EAAM63B,GAAgBr6B,EAAOwC,EAAKw4B,CAAU,EAC5C,IAAM5iB,EAAQ4iB,EAAWh7B,CAAK,EACxBkG,EAAO80B,EAAWx4B,CAAG,EACvB7H,IAAM,MACRiN,EAAO,KAAK,CACV,EAAGwQ,EAAM,EACT,EAAAzd,CACF,CAAC,EACDiN,EAAO,KAAK,CACV,EAAG1B,EAAK,EACR,EAAAvL,CACF,CAAC,GACQD,IAAM,OACfkN,EAAO,KAAK,CACV,EAAAlN,EACA,EAAG0d,EAAM,CACX,CAAC,EACDxQ,EAAO,KAAK,CACV,EAAAlN,EACA,EAAGwL,EAAK,CACV,CAAC,EAEL,CAAC,EACM0B,CACT,CACA,SAASyyB,GAAgBr6B,EAAOwC,EAAKoF,EAAQ,CAC3C,KAAOpF,EAAMxC,EAAOwC,IAAO,CACzB,IAAMqF,EAAQD,EAAOpF,CAAG,EACxB,GAAI,CAAC,MAAMqF,EAAM,CAAC,GAAK,CAAC,MAAMA,EAAM,CAAC,EACnC,KAEJ,CACA,OAAOrF,CACT,CACA,SAASq4B,GAAS53B,EAAGlI,EAAGlD,EAAMxB,EAAI,CAChC,OAAI4M,GAAKlI,EACA1E,EAAG4M,EAAEpL,CAAI,EAAGkD,EAAElD,CAAI,CAAC,EAErBoL,EAAIA,EAAEpL,CAAI,EAAIkD,EAAIA,EAAElD,CAAI,EAAI,CACrC,CACA,SAASojC,GAAoBF,EAAUlvB,EAAM,CAC3C,IAAIjE,EAAS,CAAC,EACVszB,EAAQ,GACZ,OAAIhiC,EAAQ6hC,CAAQ,GAClBG,EAAQ,GACRtzB,EAASmzB,GAETnzB,EAASkzB,GAAoBC,EAAUlvB,CAAI,EAEtCjE,EAAO,OAAS,IAAI4sB,GAAY,CACrC,OAAA5sB,EACA,QAAS,CACP,QAAS,CACX,EACA,MAAAszB,EACA,UAAWA,CACb,CAAC,EAAI,IACP,CACA,SAASC,GAAiBC,EAAQ,CAChC,OAAOA,GAAUA,EAAO,OAAS,EACnC,CACA,SAASC,GAAeC,EAAS59B,EAAO69B,EAAW,CAEjD,IAAIC,EADWF,EAAQ59B,CAAK,EACV,KACZ+9B,EAAU,CAAC/9B,CAAK,EAClB9F,EACJ,GAAI,CAAC2jC,EACH,OAAOC,EAET,KAAOA,IAAS,IAASC,EAAQ,QAAQD,CAAI,IAAM,IAAI,CACrD,GAAI,CAAC5/B,EAAe4/B,CAAI,EACtB,OAAOA,EAGT,GADA5jC,EAAS0jC,EAAQE,CAAI,EACjB,CAAC5jC,EACH,MAAO,GAET,GAAIA,EAAO,QACT,OAAO4jC,EAETC,EAAQ,KAAKD,CAAI,EACjBA,EAAO5jC,EAAO,IAChB,CACA,MAAO,EACT,CACA,SAAS8jC,GAAY7vB,EAAMnO,EAAOuC,EAAO,CACvC,IAAMu7B,EAAOG,GAAgB9vB,CAAI,EACjC,GAAIjT,EAAS4iC,CAAI,EACf,OAAO,MAAMA,EAAK,KAAK,EAAI,GAAQA,EAErC,IAAI5jC,EAAS,WAAW4jC,CAAI,EAC5B,OAAI5/B,EAAehE,CAAM,GAAK,KAAK,MAAMA,CAAM,IAAMA,EAC5CgkC,GAAkBJ,EAAK,CAAC,EAAG99B,EAAO9F,EAAQqI,CAAK,EAEjD,CAAC,SAAU,QAAS,MAAO,QAAS,OAAO,EAAE,QAAQu7B,CAAI,GAAK,GAAKA,CAC5E,CACA,SAASI,GAAkBC,EAASn+B,EAAO9F,EAAQqI,EAAO,CAIxD,OAHI47B,IAAY,KAAOA,IAAY,OACjCjkC,EAAS8F,EAAQ9F,GAEfA,IAAW8F,GAAS9F,EAAS,GAAKA,GAAUqI,EACvC,GAEFrI,CACT,CACA,SAASkkC,GAAgBN,EAAMvhC,EAAO,CACpC,IAAImlB,EAAQ,KACZ,OAAIoc,IAAS,QACXpc,EAAQnlB,EAAM,OACLuhC,IAAS,MAClBpc,EAAQnlB,EAAM,IACLrB,EAAS4iC,CAAI,EACtBpc,EAAQnlB,EAAM,iBAAiBuhC,EAAK,KAAK,EAChCvhC,EAAM,eACfmlB,EAAQnlB,EAAM,aAAa,GAEtBmlB,CACT,CACA,SAAS2c,GAAgBP,EAAMvhC,EAAOiK,EAAY,CAChD,IAAIvK,EACJ,OAAI6hC,IAAS,QACX7hC,EAAQuK,EACCs3B,IAAS,MAClB7hC,EAAQM,EAAM,QAAQ,QAAUA,EAAM,IAAMA,EAAM,IACzCrB,EAAS4iC,CAAI,EACtB7hC,EAAQ6hC,EAAK,MAEb7hC,EAAQM,EAAM,aAAa,EAEtBN,CACT,CACA,SAASgiC,GAAgB9vB,EAAM,CAC7B,IAAMxS,EAAUwS,EAAK,QACfmwB,EAAa3iC,EAAQ,KACvBmiC,EAAOv8B,EAAe+8B,GAAcA,EAAW,OAAQA,CAAU,EAIrE,OAHIR,IAAS,SACXA,EAAO,CAAC,CAACniC,EAAQ,iBAEfmiC,IAAS,IAASA,IAAS,KACtB,GAELA,IAAS,GACJ,SAEFA,CACT,CACA,SAASS,GAAgBb,EAAQ,CAC/B,GAAM,CACJ,MAAAnhC,EACA,MAAAyD,EACA,KAAAmO,CACF,EAAIuvB,EACExzB,EAAS,CAAC,EACVysB,EAAWxoB,EAAK,SAChBqwB,EAAerwB,EAAK,OACpBswB,EAAaC,GAAcniC,EAAOyD,CAAK,EAC7Cy+B,EAAW,KAAKlB,GAAoB,CAClC,EAAG,KACH,EAAGhhC,EAAM,MACX,EAAG4R,CAAI,CAAC,EACR,QAASpV,EAAI,EAAGA,EAAI49B,EAAS,OAAQ59B,IAAK,CACxC,IAAM0V,EAAUkoB,EAAS59B,CAAC,EAC1B,QAASoY,EAAI1C,EAAQ,MAAO0C,GAAK1C,EAAQ,IAAK0C,IAC5CwtB,GAAez0B,EAAQs0B,EAAartB,CAAC,EAAGstB,CAAU,CAEtD,CACA,OAAO,IAAI3H,GAAY,CACrB,OAAA5sB,EACA,QAAS,CAAC,CACZ,CAAC,CACH,CACA,SAASw0B,GAAcniC,EAAOyD,EAAO,CACnC,IAAM4+B,EAAQ,CAAC,EACTvgB,EAAQ9hB,EAAM,wBAAwB,MAAM,EAClD,QAASxD,EAAI,EAAGA,EAAIslB,EAAM,OAAQtlB,IAAK,CACrC,IAAMuF,EAAO+f,EAAMtlB,CAAC,EACpB,GAAIuF,EAAK,QAAU0B,EACjB,MAEG1B,EAAK,QACRsgC,EAAM,QAAQtgC,EAAK,OAAO,CAE9B,CACA,OAAOsgC,CACT,CACA,SAASD,GAAez0B,EAAQ20B,EAAaJ,EAAY,CACvD,IAAMK,EAAY,CAAC,EACnB,QAAS3tB,EAAI,EAAGA,EAAIstB,EAAW,OAAQttB,IAAK,CAC1C,IAAMhD,EAAOswB,EAAWttB,CAAC,EACnB,CACJ,MAAAuJ,EACA,KAAAlS,EACA,MAAA2B,CACF,EAAI40B,GAAU5wB,EAAM0wB,EAAa,GAAG,EACpC,GAAI,GAAC10B,GAASuQ,GAASlS,IAGvB,GAAIkS,EACFokB,EAAU,QAAQ30B,CAAK,UAEvBD,EAAO,KAAKC,CAAK,EACb,CAAC3B,EACH,MAGN,CACA0B,EAAO,KAAK,GAAG40B,CAAS,CAC1B,CACA,SAASC,GAAU5wB,EAAM0wB,EAAazY,EAAU,CAC9C,IAAMjc,EAAQgE,EAAK,YAAY0wB,EAAazY,CAAQ,EACpD,GAAI,CAACjc,EACH,MAAO,CAAC,EAEV,IAAM60B,EAAa70B,EAAMic,CAAQ,EAC3BuQ,EAAWxoB,EAAK,SAChBmvB,EAAanvB,EAAK,OACpBuM,EAAQ,GACRlS,EAAO,GACX,QAASzP,EAAI,EAAGA,EAAI49B,EAAS,OAAQ59B,IAAK,CACxC,IAAM0V,EAAUkoB,EAAS59B,CAAC,EACpBkmC,EAAa3B,EAAW7uB,EAAQ,KAAK,EAAE2X,CAAQ,EAC/C8Y,EAAY5B,EAAW7uB,EAAQ,GAAG,EAAE2X,CAAQ,EAClD,GAAIoO,GAAWwK,EAAYC,EAAYC,CAAS,EAAG,CACjDxkB,EAAQskB,IAAeC,EACvBz2B,EAAOw2B,IAAeE,EACtB,KACF,CACF,CACA,MAAO,CACL,MAAAxkB,EACA,KAAAlS,EACA,MAAA2B,CACF,CACF,CACA,IAAMg1B,GAAN,KAAgB,CACd,YAAY1iC,EAAM,CAChB,KAAK,EAAIA,EAAK,EACd,KAAK,EAAIA,EAAK,EACd,KAAK,OAASA,EAAK,MACrB,CACA,YAAY+G,EAAK+0B,EAAQ97B,EAAM,CAC7B,GAAM,CACJ,EAAAO,EACA,EAAAC,EACA,OAAAqN,CACF,EAAI,KACJ,OAAAiuB,EAASA,GAAU,CACjB,MAAO,EACP,IAAKxtB,CACP,EACAvH,EAAI,IAAIxG,EAAGC,EAAGqN,EAAQiuB,EAAO,IAAKA,EAAO,MAAO,EAAI,EAC7C,CAAC97B,EAAK,MACf,CACA,YAAY0N,EAAO,CACjB,GAAM,CACJ,EAAAnN,EACA,EAAAC,EACA,OAAAqN,CACF,EAAI,KACEiB,EAAQpB,EAAM,MACpB,MAAO,CACL,EAAGnN,EAAI,KAAK,IAAIuO,CAAK,EAAIjB,EACzB,EAAGrN,EAAI,KAAK,IAAIsO,CAAK,EAAIjB,EACzB,MAAAiB,CACF,CACF,CACF,EACA,SAAS6zB,GAAW1B,EAAQ,CAC1B,GAAM,CACJ,MAAArlC,EACA,KAAAylC,EACA,KAAA3vB,CACF,EAAIuvB,EACJ,GAAIx/B,EAAe4/B,CAAI,EACrB,OAAOuB,GAAehnC,EAAOylC,CAAI,EAEnC,GAAIA,IAAS,QACX,OAAOS,GAAgBb,CAAM,EAE/B,GAAII,IAAS,QACX,MAAO,GAET,IAAMT,EAAWiC,GAAgB5B,CAAM,EACvC,OAAIL,aAAoB8B,GACf9B,EAEFE,GAAoBF,EAAUlvB,CAAI,CAC3C,CACA,SAASkxB,GAAehnC,EAAO2H,EAAO,CACpC,IAAM1B,EAAOjG,EAAM,eAAe2H,CAAK,EAEvC,OADgB1B,GAAQjG,EAAM,iBAAiB2H,CAAK,EACnC1B,EAAK,QAAU,IAClC,CACA,SAASghC,GAAgB5B,EAAQ,CAE/B,OADcA,EAAO,OAAS,CAAC,GACrB,yBACD6B,GAAwB7B,CAAM,EAEhC8B,GAAsB9B,CAAM,CACrC,CACA,SAAS8B,GAAsB9B,EAAQ,CACrC,GAAM,CACJ,MAAAnhC,EAAQ,CAAC,EACT,KAAAuhC,CACF,EAAIJ,EACEhc,EAAQ0c,GAAgBN,EAAMvhC,CAAK,EACzC,GAAI2B,EAAewjB,CAAK,EAAG,CACzB,IAAMrZ,EAAa9L,EAAM,aAAa,EACtC,MAAO,CACL,EAAG8L,EAAaqZ,EAAQ,KACxB,EAAGrZ,EAAa,KAAOqZ,CACzB,CACF,CACA,OAAO,IACT,CACA,SAAS6d,GAAwB7B,EAAQ,CACvC,GAAM,CACJ,MAAAnhC,EACA,KAAAuhC,CACF,EAAIJ,EACE/hC,EAAUY,EAAM,QAChB8M,EAAS9M,EAAM,UAAU,EAAE,OAC3B+F,EAAQ3G,EAAQ,QAAUY,EAAM,IAAMA,EAAM,IAC5CN,EAAQoiC,GAAgBP,EAAMvhC,EAAO+F,CAAK,EAC1CpI,EAAS,CAAC,EAChB,GAAIyB,EAAQ,KAAK,SAAU,CACzB,IAAMgO,EAASpN,EAAM,yBAAyB,EAAG+F,CAAK,EACtD,OAAO,IAAI68B,GAAU,CACnB,EAAGx1B,EAAO,EACV,EAAGA,EAAO,EACV,OAAQpN,EAAM,8BAA8BN,CAAK,CACnD,CAAC,CACH,CACA,QAASlD,EAAI,EAAGA,EAAIsQ,EAAQ,EAAEtQ,EAC5BmB,EAAO,KAAKqC,EAAM,yBAAyBxD,EAAGkD,CAAK,CAAC,EAEtD,OAAO/B,CACT,CACA,SAASulC,GAAUj8B,EAAKk6B,EAAQh6B,EAAM,CACpC,IAAMxJ,EAASklC,GAAW1B,CAAM,EAC1B,CACJ,MAAArlC,EACA,MAAA2H,EACA,KAAAmO,EACA,MAAA5R,EACA,KAAA6D,CACF,EAAIs9B,EACEgC,EAAWvxB,EAAK,QAChBmwB,EAAaoB,EAAS,KACtB5lC,EAAQ4lC,EAAS,gBACjB,CACJ,MAAAC,EAAQ7lC,EACR,MAAA8kC,EAAQ9kC,CACV,EAAIwkC,GAAc,CAAC,EACbhgC,EAAOjG,EAAM,eAAe2H,CAAK,EACjCkvB,EAAOC,GAAmB92B,EAAOiG,CAAI,EACvCpE,GAAUiU,EAAK,OAAO,SACxB2W,GAASthB,EAAKE,CAAI,EAClBk8B,GAAOp8B,EAAK,CACV,KAAA2K,EACA,OAAAjU,EACA,MAAAylC,EACA,MAAAf,EACA,KAAAl7B,EACA,MAAAnH,EACA,KAAA6D,EACA,KAAA8uB,CACF,CAAC,EACDjK,GAAWzhB,CAAG,EAElB,CACA,SAASo8B,GAAOp8B,EAAKvJ,EAAK,CACxB,GAAM,CACJ,KAAAkU,EACA,OAAAjU,EACA,MAAAylC,EACA,MAAAf,EACA,KAAAl7B,EACA,MAAAnH,EACA,KAAA2yB,CACF,EAAIj1B,EACEmsB,EAAWjY,EAAK,MAAQ,QAAUlU,EAAI,KAC5CuJ,EAAI,KAAK,EACT,IAAIq8B,EAAYjB,EACZA,IAAUe,IACRvZ,IAAa,KACf0Z,GAAat8B,EAAKtJ,EAAQwJ,EAAK,GAAG,EAClCo6B,GAAKt6B,EAAK,CACR,KAAA2K,EACA,OAAAjU,EACA,MAAOylC,EACP,MAAApjC,EACA,SAAA6pB,EACA,KAAA8I,CACF,CAAC,EACD1rB,EAAI,QAAQ,EACZA,EAAI,KAAK,EACTs8B,GAAat8B,EAAKtJ,EAAQwJ,EAAK,MAAM,GAC5B0iB,IAAa,MACtB2Z,GAAev8B,EAAKtJ,EAAQwJ,EAAK,IAAI,EACrCo6B,GAAKt6B,EAAK,CACR,KAAA2K,EACA,OAAAjU,EACA,MAAO0kC,EACP,MAAAriC,EACA,SAAA6pB,EACA,KAAA8I,CACF,CAAC,EACD1rB,EAAI,QAAQ,EACZA,EAAI,KAAK,EACTu8B,GAAev8B,EAAKtJ,EAAQwJ,EAAK,KAAK,EACtCm8B,EAAYF,IAGhB7B,GAAKt6B,EAAK,CACR,KAAA2K,EACA,OAAAjU,EACA,MAAO2lC,EACP,MAAAtjC,EACA,SAAA6pB,EACA,KAAA8I,CACF,CAAC,EACD1rB,EAAI,QAAQ,CACd,CACA,SAASs8B,GAAat8B,EAAKtJ,EAAQ8lC,EAAO,CACxC,GAAM,CACJ,SAAArJ,EACA,OAAAzsB,CACF,EAAIhQ,EACAwgB,EAAQ,GACRulB,EAAW,GACfz8B,EAAI,UAAU,EACd,QAAWiL,KAAWkoB,EAAU,CAC9B,GAAM,CACJ,MAAAr0B,EACA,IAAAwC,CACF,EAAI2J,EACEQ,EAAa/E,EAAO5H,CAAK,EACzB4M,EAAYhF,EAAOyyB,GAAgBr6B,EAAOwC,EAAKoF,CAAM,CAAC,EACxDwQ,GACFlX,EAAI,OAAOyL,EAAW,EAAGA,EAAW,CAAC,EACrCyL,EAAQ,KAERlX,EAAI,OAAOyL,EAAW,EAAG+wB,CAAK,EAC9Bx8B,EAAI,OAAOyL,EAAW,EAAGA,EAAW,CAAC,GAEvCgxB,EAAW,CAAC,CAAC/lC,EAAO,YAAYsJ,EAAKiL,EAAS,CAC5C,KAAMwxB,CACR,CAAC,EACGA,EACFz8B,EAAI,UAAU,EAEdA,EAAI,OAAO0L,EAAU,EAAG8wB,CAAK,CAEjC,CACAx8B,EAAI,OAAOtJ,EAAO,MAAM,EAAE,EAAG8lC,CAAK,EAClCx8B,EAAI,UAAU,EACdA,EAAI,KAAK,CACX,CACA,SAASu8B,GAAev8B,EAAKtJ,EAAQgmC,EAAO,CAC1C,GAAM,CACJ,SAAAvJ,EACA,OAAAzsB,CACF,EAAIhQ,EACAwgB,EAAQ,GACRulB,EAAW,GACfz8B,EAAI,UAAU,EACd,QAAWiL,KAAWkoB,EAAU,CAC9B,GAAM,CACJ,MAAAr0B,EACA,IAAAwC,CACF,EAAI2J,EACEQ,EAAa/E,EAAO5H,CAAK,EACzB4M,EAAYhF,EAAOyyB,GAAgBr6B,EAAOwC,EAAKoF,CAAM,CAAC,EACxDwQ,GACFlX,EAAI,OAAOyL,EAAW,EAAGA,EAAW,CAAC,EACrCyL,EAAQ,KAERlX,EAAI,OAAO08B,EAAOjxB,EAAW,CAAC,EAC9BzL,EAAI,OAAOyL,EAAW,EAAGA,EAAW,CAAC,GAEvCgxB,EAAW,CAAC,CAAC/lC,EAAO,YAAYsJ,EAAKiL,EAAS,CAC5C,KAAMwxB,CACR,CAAC,EACGA,EACFz8B,EAAI,UAAU,EAEdA,EAAI,OAAO08B,EAAOhxB,EAAU,CAAC,CAEjC,CACA1L,EAAI,OAAO08B,EAAOhmC,EAAO,MAAM,EAAE,CAAC,EAClCsJ,EAAI,UAAU,EACdA,EAAI,KAAK,CACX,CACA,SAASs6B,GAAKt6B,EAAKvJ,EAAK,CACtB,GAAM,CACJ,KAAAkU,EACA,OAAAjU,EACA,SAAAksB,EACA,MAAAtsB,EACA,MAAAyC,EACA,KAAA2yB,CACF,EAAIj1B,EACE08B,EAAW8F,GAAUtuB,EAAMjU,EAAQksB,CAAQ,EACjD,OAAW,CACT,OAAQ+Z,EACR,OAAQrD,EACR,MAAAx6B,EACA,IAAAwC,CACF,IAAK6xB,EAAU,CACb,GAAM,CACJ,MAAO,CACL,gBAAAlS,EAAkB3qB,CACpB,EAAI,CAAC,CACP,EAAIqmC,EACEC,EAAWlmC,IAAW,GAC5BsJ,EAAI,KAAK,EACTA,EAAI,UAAYihB,EAChB4b,GAAW78B,EAAKjH,EAAO2yB,EAAMkR,GAAYxD,GAAWxW,EAAU9jB,EAAOwC,CAAG,CAAC,EACzEtB,EAAI,UAAU,EACd,IAAMy8B,EAAW,CAAC,CAAC9xB,EAAK,YAAY3K,EAAK28B,CAAG,EACxCzlC,EACJ,GAAI0lC,EAAU,CACRH,EACFz8B,EAAI,UAAU,EAEd88B,GAAmB98B,EAAKtJ,EAAQ4K,EAAKshB,CAAQ,EAE/C,IAAMma,EAAa,CAAC,CAACrmC,EAAO,YAAYsJ,EAAKs5B,EAAK,CAChD,KAAMmD,EACN,QAAS,EACX,CAAC,EACDvlC,EAAOulC,GAAYM,EACd7lC,GACH4lC,GAAmB98B,EAAKtJ,EAAQoI,EAAO8jB,CAAQ,CAEnD,CACA5iB,EAAI,UAAU,EACdA,EAAI,KAAK9I,EAAO,UAAY,SAAS,EACrC8I,EAAI,QAAQ,CACd,CACF,CACA,SAAS68B,GAAW78B,EAAKjH,EAAO2yB,EAAMqJ,EAAQ,CAC5C,IAAM3rB,EAAYrQ,EAAM,MAAM,UACxB,CACJ,SAAA6pB,EACA,MAAA9jB,EACA,IAAAwC,CACF,EAAIyzB,GAAU,CAAC,EACf,GAAInS,IAAa,KAAOA,IAAa,IAAK,CACxC,IAAIhS,EAAMjN,EAAKkN,EAAOjN,EAClBgf,IAAa,KACfhS,EAAO9R,EACP6E,EAAMyF,EAAU,IAChByH,EAAQvP,EACRsC,EAASwF,EAAU,SAEnBwH,EAAOxH,EAAU,KACjBzF,EAAM7E,EACN+R,EAAQzH,EAAU,MAClBxF,EAAStC,GAEXtB,EAAI,UAAU,EACV0rB,IACF9a,EAAO,KAAK,IAAIA,EAAM8a,EAAK,IAAI,EAC/B7a,EAAQ,KAAK,IAAIA,EAAO6a,EAAK,KAAK,EAClC/nB,EAAM,KAAK,IAAIA,EAAK+nB,EAAK,GAAG,EAC5B9nB,EAAS,KAAK,IAAIA,EAAQ8nB,EAAK,MAAM,GAEvC1rB,EAAI,KAAK4Q,EAAMjN,EAAKkN,EAAQD,EAAMhN,EAASD,CAAG,EAC9C3D,EAAI,KAAK,CACX,CACF,CACA,SAAS88B,GAAmB98B,EAAKtJ,EAAQiQ,EAAOic,EAAU,CACxD,IAAMoa,EAAoBtmC,EAAO,YAAYiQ,EAAOic,CAAQ,EACxDoa,GACFh9B,EAAI,OAAOg9B,EAAkB,EAAGA,EAAkB,CAAC,CAEvD,CACA,IAAIxgC,GAAQ,CACV,GAAI,SACJ,oBAAoB3H,EAAO6hC,EAAOv+B,EAAS,CACzC,IAAM4G,GAASlK,EAAM,KAAK,UAAY,CAAC,GAAG,OACpCulC,EAAU,CAAC,EACbt/B,EAAMvF,EAAGoV,EAAMuvB,EACnB,IAAK3kC,EAAI,EAAGA,EAAIwJ,EAAO,EAAExJ,EACvBuF,EAAOjG,EAAM,eAAeU,CAAC,EAC7BoV,EAAO7P,EAAK,QACZo/B,EAAS,KACLvvB,GAAQA,EAAK,SAAWA,aAAgB2oB,KAC1C4G,EAAS,CACP,QAASrlC,EAAM,iBAAiBU,CAAC,EACjC,MAAOA,EACP,KAAMilC,GAAY7vB,EAAMpV,EAAGwJ,CAAK,EAChC,MAAAlK,EACA,KAAMiG,EAAK,WAAW,QAAQ,UAC9B,MAAOA,EAAK,OACZ,KAAA6P,CACF,GAEF7P,EAAK,QAAUo/B,EACfE,EAAQ,KAAKF,CAAM,EAErB,IAAK3kC,EAAI,EAAGA,EAAIwJ,EAAO,EAAExJ,EACvB2kC,EAASE,EAAQ7kC,CAAC,EACd,GAAC2kC,GAAUA,EAAO,OAAS,MAG/BA,EAAO,KAAOC,GAAeC,EAAS7kC,EAAG4C,EAAQ,SAAS,EAE9D,EACA,WAAWtD,EAAO6hC,EAAOv+B,EAAS,CAChC,IAAM3C,EAAO2C,EAAQ,WAAa,aAC5B8B,EAAWpF,EAAM,6BAA6B,EAC9CqL,EAAOrL,EAAM,UACnB,QAASU,EAAI0E,EAAS,OAAS,EAAG1E,GAAK,EAAG,EAAEA,EAAG,CAC7C,IAAM2kC,EAASjgC,EAAS1E,CAAC,EAAE,QACtB2kC,IAGLA,EAAO,KAAK,oBAAoBh6B,EAAMg6B,EAAO,IAAI,EAC7C1kC,GAAQ0kC,EAAO,MACjB+B,GAAUpnC,EAAM,IAAKqlC,EAAQh6B,CAAI,EAErC,CACF,EACA,mBAAmBrL,EAAO6hC,EAAOv+B,EAAS,CACxC,GAAIA,EAAQ,WAAa,qBACvB,OAEF,IAAM8B,EAAWpF,EAAM,6BAA6B,EACpD,QAASU,EAAI0E,EAAS,OAAS,EAAG1E,GAAK,EAAG,EAAEA,EAAG,CAC7C,IAAM2kC,EAASjgC,EAAS1E,CAAC,EAAE,QACvB0kC,GAAiBC,CAAM,GACzB+B,GAAUpnC,EAAM,IAAKqlC,EAAQrlC,EAAM,SAAS,CAEhD,CACF,EACA,kBAAkBA,EAAO6M,EAAMvJ,EAAS,CACtC,IAAM+hC,EAASx4B,EAAK,KAAK,QACrB,CAACu4B,GAAiBC,CAAM,GAAK/hC,EAAQ,WAAa,qBAGtD8jC,GAAUpnC,EAAM,IAAKqlC,EAAQrlC,EAAM,SAAS,CAC9C,EACA,SAAU,CACR,UAAW,GACX,SAAU,mBACZ,CACF,EACMooC,GAAa,CAACC,EAAWpb,IAAa,CAC1C,GAAI,CACF,UAAAqb,EAAYrb,EACZ,SAAAsb,EAAWtb,CACb,EAAIob,EACJ,OAAIA,EAAU,gBACZC,EAAY,KAAK,IAAIA,EAAWrb,CAAQ,EACxCsb,EAAWF,EAAU,iBAAmB,KAAK,IAAIE,EAAUtb,CAAQ,GAE9D,CACL,SAAAsb,EACA,UAAAD,EACA,WAAY,KAAK,IAAIrb,EAAUqb,CAAS,CAC1C,CACF,EACME,GAAa,CAACt7B,EAAGlI,IAAMkI,IAAM,MAAQlI,IAAM,MAAQkI,EAAE,eAAiBlI,EAAE,cAAgBkI,EAAE,QAAUlI,EAAE,MACtGyjC,GAAN,cAAqBhnB,EAAQ,CAC3B,YAAY7e,EAAQ,CAClB,MAAM,EACN,KAAK,OAAS,GACd,KAAK,eAAiB,CAAC,EACvB,KAAK,aAAe,KACpB,KAAK,aAAe,GACpB,KAAK,MAAQA,EAAO,MACpB,KAAK,QAAUA,EAAO,QACtB,KAAK,IAAMA,EAAO,IAClB,KAAK,YAAc,OACnB,KAAK,YAAc,OACnB,KAAK,WAAa,OAClB,KAAK,UAAY,OACjB,KAAK,SAAW,OAChB,KAAK,IAAM,OACX,KAAK,OAAS,OACd,KAAK,KAAO,OACZ,KAAK,MAAQ,OACb,KAAK,OAAS,OACd,KAAK,MAAQ,OACb,KAAK,SAAW,OAChB,KAAK,SAAW,OAChB,KAAK,OAAS,OACd,KAAK,SAAW,MAClB,CACA,OAAOiS,EAAUC,EAAWoR,EAAS,CACnC,KAAK,SAAWrR,EAChB,KAAK,UAAYC,EACjB,KAAK,SAAWoR,EAChB,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,KAAK,IAAI,CACX,CACA,eAAgB,CACV,KAAK,aAAa,GACpB,KAAK,MAAQ,KAAK,SAClB,KAAK,KAAO,KAAK,SAAS,KAC1B,KAAK,MAAQ,KAAK,QAElB,KAAK,OAAS,KAAK,UACnB,KAAK,IAAM,KAAK,SAAS,IACzB,KAAK,OAAS,KAAK,OAEvB,CACA,aAAc,CACZ,IAAMmiB,EAAY,KAAK,QAAQ,QAAU,CAAC,EACtCK,EAAcziB,EAASoiB,EAAU,eAAgB,CAAC,KAAK,KAAK,EAAG,IAAI,GAAK,CAAC,EACzEA,EAAU,SACZK,EAAcA,EAAY,OAAO9nC,GAAQynC,EAAU,OAAOznC,EAAM,KAAK,MAAM,IAAI,CAAC,GAE9EynC,EAAU,OACZK,EAAcA,EAAY,KAAK,CAACx7B,EAAGlI,IAAMqjC,EAAU,KAAKn7B,EAAGlI,EAAG,KAAK,MAAM,IAAI,CAAC,GAE5E,KAAK,QAAQ,SACf0jC,EAAY,QAAQ,EAEtB,KAAK,YAAcA,CACrB,CACA,KAAM,CACJ,GAAM,CACJ,QAAAplC,EACA,IAAA6H,CACF,EAAI,KACJ,GAAI,CAAC7H,EAAQ,QAAS,CACpB,KAAK,MAAQ,KAAK,OAAS,EAC3B,MACF,CACA,IAAM+kC,EAAY/kC,EAAQ,OACpBqlC,EAAY9jB,EAAOwjB,EAAU,IAAI,EACjCpb,EAAW0b,EAAU,KACrBnhB,EAAc,KAAK,oBAAoB,EACvC,CACJ,SAAA+gB,EACA,WAAAK,CACF,EAAIR,GAAWC,EAAWpb,CAAQ,EAC9BvP,EAAOC,EACXxS,EAAI,KAAOw9B,EAAU,OACjB,KAAK,aAAa,GACpBjrB,EAAQ,KAAK,SACbC,EAAS,KAAK,SAAS6J,EAAayF,EAAUsb,EAAUK,CAAU,EAAI,KAEtEjrB,EAAS,KAAK,UACdD,EAAQ,KAAK,SAAS8J,EAAamhB,EAAWJ,EAAUK,CAAU,EAAI,IAExE,KAAK,MAAQ,KAAK,IAAIlrB,EAAOpa,EAAQ,UAAY,KAAK,QAAQ,EAC9D,KAAK,OAAS,KAAK,IAAIqa,EAAQra,EAAQ,WAAa,KAAK,SAAS,CACpE,CACA,SAASkkB,EAAayF,EAAUsb,EAAUK,EAAY,CACpD,GAAM,CACJ,IAAAz9B,EACA,SAAA0J,EACA,QAAS,CACP,OAAQ,CACN,QAAAoJ,CACF,CACF,CACF,EAAI,KACE4qB,EAAW,KAAK,eAAiB,CAAC,EAClCC,EAAa,KAAK,WAAa,CAAC,CAAC,EACjC9f,EAAa4f,EAAa3qB,EAC5B8qB,EAAcvhB,EAClBrc,EAAI,UAAY,OAChBA,EAAI,aAAe,SACnB,IAAI69B,EAAM,GACNl6B,EAAM,CAACka,EACX,YAAK,YAAY,QAAQ,CAAC7U,EAAYzT,IAAM,CAC1C,IAAMuoC,EAAYV,EAAWtb,EAAW,EAAI9hB,EAAI,YAAYgJ,EAAW,IAAI,EAAE,OACzEzT,IAAM,GAAKooC,EAAWA,EAAW,OAAS,CAAC,EAAIG,EAAY,EAAIhrB,EAAUpJ,KAC3Ek0B,GAAe/f,EACf8f,EAAWA,EAAW,QAAUpoC,EAAI,EAAI,EAAI,EAAE,EAAI,EAClDoO,GAAOka,EACPggB,KAEFH,EAASnoC,CAAC,EAAI,CACZ,KAAM,EACN,IAAAoO,EACA,IAAAk6B,EACA,MAAOC,EACP,OAAQL,CACV,EACAE,EAAWA,EAAW,OAAS,CAAC,GAAKG,EAAYhrB,CACnD,CAAC,EACM8qB,CACT,CACA,SAASvhB,EAAamhB,EAAWJ,EAAUW,EAAa,CACtD,GAAM,CACJ,IAAA/9B,EACA,UAAA2J,EACA,QAAS,CACP,OAAQ,CACN,QAAAmJ,CACF,CACF,CACF,EAAI,KACE4qB,EAAW,KAAK,eAAiB,CAAC,EAClCM,EAAc,KAAK,YAAc,CAAC,EAClCC,EAAct0B,EAAY0S,EAC5B6hB,EAAaprB,EACbqrB,EAAkB,EAClBC,EAAmB,EACnBxtB,EAAO,EACPytB,EAAM,EACV,YAAK,YAAY,QAAQ,CAACr1B,EAAYzT,IAAM,CAC1C,GAAM,CACJ,UAAAuoC,EACA,WAAAL,CACF,EAAIa,GAAkBlB,EAAUI,EAAWx9B,EAAKgJ,EAAY+0B,CAAW,EACnExoC,EAAI,GAAK6oC,EAAmBX,EAAa,EAAI3qB,EAAUmrB,IACzDC,GAAcC,EAAkBrrB,EAChCkrB,EAAY,KAAK,CACf,MAAOG,EACP,OAAQC,CACV,CAAC,EACDxtB,GAAQutB,EAAkBrrB,EAC1BurB,IACAF,EAAkBC,EAAmB,GAEvCV,EAASnoC,CAAC,EAAI,CACZ,KAAAqb,EACA,IAAKwtB,EACL,IAAAC,EACA,MAAOP,EACP,OAAQL,CACV,EACAU,EAAkB,KAAK,IAAIA,EAAiBL,CAAS,EACrDM,GAAoBX,EAAa3qB,CACnC,CAAC,EACDorB,GAAcC,EACdH,EAAY,KAAK,CACf,MAAOG,EACP,OAAQC,CACV,CAAC,EACMF,CACT,CACA,gBAAiB,CACf,GAAI,CAAC,KAAK,QAAQ,QAChB,OAEF,IAAM7hB,EAAc,KAAK,oBAAoB,EACvC,CACJ,eAAgBqhB,EAChB,QAAS,CACP,MAAArlB,EACA,OAAQ,CACN,QAAAvF,CACF,EACA,IAAAyrB,CACF,CACF,EAAI,KACEC,EAAYC,GAAcF,EAAK,KAAK,KAAM,KAAK,KAAK,EAC1D,GAAI,KAAK,aAAa,EAAG,CACvB,IAAIV,EAAM,EACNjtB,EAAOuJ,EAAe9B,EAAO,KAAK,KAAOvF,EAAS,KAAK,MAAQ,KAAK,WAAW+qB,CAAG,CAAC,EACvF,QAAWa,KAAUhB,EACfG,IAAQa,EAAO,MACjBb,EAAMa,EAAO,IACb9tB,EAAOuJ,EAAe9B,EAAO,KAAK,KAAOvF,EAAS,KAAK,MAAQ,KAAK,WAAW+qB,CAAG,CAAC,GAErFa,EAAO,KAAO,KAAK,IAAMriB,EAAcvJ,EACvC4rB,EAAO,KAAOF,EAAU,WAAWA,EAAU,EAAE5tB,CAAI,EAAG8tB,EAAO,KAAK,EAClE9tB,GAAQ8tB,EAAO,MAAQ5rB,CAE3B,KAAO,CACL,IAAIurB,EAAM,EACN16B,EAAMwW,EAAe9B,EAAO,KAAK,IAAMgE,EAAcvJ,EAAS,KAAK,OAAS,KAAK,YAAYurB,CAAG,EAAE,MAAM,EAC5G,QAAWK,KAAUhB,EACfgB,EAAO,MAAQL,IACjBA,EAAMK,EAAO,IACb/6B,EAAMwW,EAAe9B,EAAO,KAAK,IAAMgE,EAAcvJ,EAAS,KAAK,OAAS,KAAK,YAAYurB,CAAG,EAAE,MAAM,GAE1GK,EAAO,IAAM/6B,EACb+6B,EAAO,MAAQ,KAAK,KAAO5rB,EAC3B4rB,EAAO,KAAOF,EAAU,WAAWA,EAAU,EAAEE,EAAO,IAAI,EAAGA,EAAO,KAAK,EACzE/6B,GAAO+6B,EAAO,OAAS5rB,CAE3B,CACF,CACA,cAAe,CACb,OAAO,KAAK,QAAQ,WAAa,OAAS,KAAK,QAAQ,WAAa,QACtE,CACA,MAAO,CACL,GAAI,KAAK,QAAQ,QAAS,CACxB,IAAM9S,EAAM,KAAK,IACjBshB,GAASthB,EAAK,IAAI,EAClB,KAAK,MAAM,EACXyhB,GAAWzhB,CAAG,CAChB,CACF,CACA,OAAQ,CACN,GAAM,CACJ,QAAS/G,EACT,YAAA+kC,EACA,WAAAL,EACA,IAAA39B,CACF,EAAI,KACE,CACJ,MAAAqY,EACA,OAAQ6kB,CACV,EAAIjkC,EACE0lC,EAAe/mC,EAAS,MACxB4mC,EAAYC,GAAcxlC,EAAK,IAAK,KAAK,KAAM,KAAK,KAAK,EACzDukC,EAAY9jB,EAAOwjB,EAAU,IAAI,EACjC,CACJ,QAAApqB,CACF,EAAIoqB,EACEpb,EAAW0b,EAAU,KACrBoB,EAAe9c,EAAW,EAC5B+c,EACJ,KAAK,UAAU,EACf7+B,EAAI,UAAYw+B,EAAU,UAAU,MAAM,EAC1Cx+B,EAAI,aAAe,SACnBA,EAAI,UAAY,GAChBA,EAAI,KAAOw9B,EAAU,OACrB,GAAM,CACJ,SAAAJ,EACA,UAAAD,EACA,WAAAM,CACF,EAAIR,GAAWC,EAAWpb,CAAQ,EAC5Bgd,EAAgB,SAAUtlC,EAAGC,EAAGuP,EAAY,CAChD,GAAI,MAAMo0B,CAAQ,GAAKA,GAAY,GAAK,MAAMD,CAAS,GAAKA,EAAY,EACtE,OAEFn9B,EAAI,KAAK,EACT,IAAM6f,EAAY9hB,EAAeiL,EAAW,UAAW,CAAC,EAQxD,GAPAhJ,EAAI,UAAYjC,EAAeiL,EAAW,UAAW21B,CAAY,EACjE3+B,EAAI,QAAUjC,EAAeiL,EAAW,QAAS,MAAM,EACvDhJ,EAAI,eAAiBjC,EAAeiL,EAAW,eAAgB,CAAC,EAChEhJ,EAAI,SAAWjC,EAAeiL,EAAW,SAAU,OAAO,EAC1DhJ,EAAI,UAAY6f,EAChB7f,EAAI,YAAcjC,EAAeiL,EAAW,YAAa21B,CAAY,EACrE3+B,EAAI,YAAYjC,EAAeiL,EAAW,SAAU,CAAC,CAAC,CAAC,EACnDk0B,EAAU,cAAe,CAC3B,IAAM6B,EAAc,CAClB,OAAQ5B,EAAY,KAAK,MAAQ,EACjC,WAAYn0B,EAAW,WACvB,SAAUA,EAAW,SACrB,YAAa6W,CACf,EACM3V,EAAUs0B,EAAU,MAAMhlC,EAAG4jC,EAAW,CAAC,EACzCjzB,EAAU1Q,EAAImlC,EACpBI,GAAgBh/B,EAAK++B,EAAa70B,EAASC,EAAS+yB,EAAU,iBAAmBE,CAAQ,CAC3F,KAAO,CACL,IAAM6B,EAAUxlC,EAAI,KAAK,KAAKqoB,EAAWqb,GAAa,EAAG,CAAC,EACpD+B,EAAWV,EAAU,WAAWhlC,EAAG4jC,CAAQ,EAC3Cx0B,EAAe+rB,GAAc3rB,EAAW,YAAY,EAC1DhJ,EAAI,UAAU,EACV,OAAO,OAAO4I,CAAY,EAAE,KAAKvE,GAAKA,IAAM,CAAC,EAC/CuxB,GAAmB51B,EAAK,CACtB,EAAGk/B,EACH,EAAGD,EACH,EAAG7B,EACH,EAAGD,EACH,OAAQv0B,CACV,CAAC,EAED5I,EAAI,KAAKk/B,EAAUD,EAAS7B,EAAUD,CAAS,EAEjDn9B,EAAI,KAAK,EACL6f,IAAc,GAChB7f,EAAI,OAAO,CAEf,CACAA,EAAI,QAAQ,CACd,EACMm/B,EAAW,SAAU3lC,EAAGC,EAAGuP,EAAY,CAC3CwY,GAAWxhB,EAAKgJ,EAAW,KAAMxP,EAAGC,EAAIgkC,EAAa,EAAGD,EAAW,CACjE,cAAex0B,EAAW,OAC1B,UAAWw1B,EAAU,UAAUx1B,EAAW,SAAS,CACrD,CAAC,CACH,EACMoT,EAAe,KAAK,aAAa,EACjCC,EAAc,KAAK,oBAAoB,EACzCD,EACFyiB,EAAS,CACP,EAAG1kB,EAAe9B,EAAO,KAAK,KAAOvF,EAAS,KAAK,MAAQ6qB,EAAW,CAAC,CAAC,EACxE,EAAG,KAAK,IAAM7qB,EAAUuJ,EACxB,KAAM,CACR,EAEAwiB,EAAS,CACP,EAAG,KAAK,KAAO/rB,EACf,EAAGqH,EAAe9B,EAAO,KAAK,IAAMgE,EAAcvJ,EAAS,KAAK,OAASkrB,EAAY,CAAC,EAAE,MAAM,EAC9F,KAAM,CACR,EAEFoB,GAAsB,KAAK,IAAKnmC,EAAK,aAAa,EAClD,IAAM4kB,EAAa4f,EAAa3qB,EAChC,KAAK,YAAY,QAAQ,CAAC9J,EAAYzT,IAAM,CAC1CyK,EAAI,YAAcgJ,EAAW,UAC7BhJ,EAAI,UAAYgJ,EAAW,UAC3B,IAAMq2B,EAAYr/B,EAAI,YAAYgJ,EAAW,IAAI,EAAE,MAC7CN,EAAY81B,EAAU,UAAUx1B,EAAW,YAAcA,EAAW,UAAYk0B,EAAU,UAAU,EACpG3qB,EAAQ6qB,EAAWwB,EAAeS,EACpC7lC,EAAIqlC,EAAO,EACXplC,EAAIolC,EAAO,EACfL,EAAU,SAAS,KAAK,KAAK,EACzBpiB,EACE7mB,EAAI,GAAKiE,EAAI+Y,EAAQO,EAAU,KAAK,QACtCrZ,EAAIolC,EAAO,GAAKhhB,EAChBghB,EAAO,OACPrlC,EAAIqlC,EAAO,EAAI1kB,EAAe9B,EAAO,KAAK,KAAOvF,EAAS,KAAK,MAAQ6qB,EAAWkB,EAAO,IAAI,CAAC,GAEvFtpC,EAAI,GAAKkE,EAAIokB,EAAa,KAAK,SACxCrkB,EAAIqlC,EAAO,EAAIrlC,EAAIwkC,EAAYa,EAAO,IAAI,EAAE,MAAQ/rB,EACpD+rB,EAAO,OACPplC,EAAIolC,EAAO,EAAI1kB,EAAe9B,EAAO,KAAK,IAAMgE,EAAcvJ,EAAS,KAAK,OAASkrB,EAAYa,EAAO,IAAI,EAAE,MAAM,GAEtH,IAAMS,EAAQd,EAAU,EAAEhlC,CAAC,EAI3B,GAHAslC,EAAcQ,EAAO7lC,EAAGuP,CAAU,EAClCxP,EAAI+lC,GAAO72B,EAAWlP,EAAI4jC,EAAWwB,EAAcxiB,EAAe5iB,EAAI+Y,EAAQ,KAAK,MAAOtZ,EAAK,GAAG,EAClGkmC,EAASX,EAAU,EAAEhlC,CAAC,EAAGC,EAAGuP,CAAU,EAClCoT,EACFyiB,EAAO,GAAKtsB,EAAQO,UACX,OAAO9J,EAAW,MAAS,SAAU,CAC9C,IAAMw2B,GAAiBhC,EAAU,WACjCqB,EAAO,GAAKY,GAA0Bz2B,EAAYw2B,EAAc,EAAI1sB,CACtE,MACE+rB,EAAO,GAAKhhB,CAEhB,CAAC,EACD6hB,GAAqB,KAAK,IAAKzmC,EAAK,aAAa,CACnD,CACA,WAAY,CACV,IAAMA,EAAO,KAAK,QACZgjB,EAAYhjB,EAAK,MACjB0mC,EAAYjmB,EAAOuC,EAAU,IAAI,EACjC2jB,EAAe7sB,EAAUkJ,EAAU,OAAO,EAChD,GAAI,CAACA,EAAU,QACb,OAEF,IAAMuiB,EAAYC,GAAcxlC,EAAK,IAAK,KAAK,KAAM,KAAK,KAAK,EACzD+G,EAAM,KAAK,IACXuN,EAAW0O,EAAU,SACrB2iB,EAAee,EAAU,KAAO,EAChCE,EAA6BD,EAAa,IAAMhB,EAClDnlC,EACAmX,EAAO,KAAK,KACZlH,EAAW,KAAK,MACpB,GAAI,KAAK,aAAa,EACpBA,EAAW,KAAK,IAAI,GAAG,KAAK,UAAU,EACtCjQ,EAAI,KAAK,IAAMomC,EACfjvB,EAAOuJ,EAAelhB,EAAK,MAAO2X,EAAM,KAAK,MAAQlH,CAAQ,MACxD,CACL,IAAMC,EAAY,KAAK,YAAY,OAAO,CAAC9T,EAAK0M,IAAS,KAAK,IAAI1M,EAAK0M,EAAK,MAAM,EAAG,CAAC,EACtF9I,EAAIomC,EAA6B1lB,EAAelhB,EAAK,MAAO,KAAK,IAAK,KAAK,OAAS0Q,EAAY1Q,EAAK,OAAO,QAAU,KAAK,oBAAoB,CAAC,CAClJ,CACA,IAAMO,EAAI2gB,EAAe5M,EAAUqD,EAAMA,EAAOlH,CAAQ,EACxD1J,EAAI,UAAYw+B,EAAU,UAAUzkB,GAAmBxM,CAAQ,CAAC,EAChEvN,EAAI,aAAe,SACnBA,EAAI,YAAcic,EAAU,MAC5Bjc,EAAI,UAAYic,EAAU,MAC1Bjc,EAAI,KAAO2/B,EAAU,OACrBne,GAAWxhB,EAAKic,EAAU,KAAMziB,EAAGC,EAAGkmC,CAAS,CACjD,CACA,qBAAsB,CACpB,IAAM1jB,EAAY,KAAK,QAAQ,MACzB0jB,EAAYjmB,EAAOuC,EAAU,IAAI,EACjC2jB,EAAe7sB,EAAUkJ,EAAU,OAAO,EAChD,OAAOA,EAAU,QAAU0jB,EAAU,WAAaC,EAAa,OAAS,CAC1E,CACA,iBAAiBpmC,EAAGC,EAAG,CACrB,IAAIlE,EAAGuqC,EAAQC,EACf,GAAI/O,GAAWx3B,EAAG,KAAK,KAAM,KAAK,KAAK,GAAKw3B,GAAWv3B,EAAG,KAAK,IAAK,KAAK,MAAM,GAE7E,IADAsmC,EAAK,KAAK,eACLxqC,EAAI,EAAGA,EAAIwqC,EAAG,OAAQ,EAAExqC,EAE3B,GADAuqC,EAASC,EAAGxqC,CAAC,EACTy7B,GAAWx3B,EAAGsmC,EAAO,KAAMA,EAAO,KAAOA,EAAO,KAAK,GAAK9O,GAAWv3B,EAAGqmC,EAAO,IAAKA,EAAO,IAAMA,EAAO,MAAM,EAChH,OAAO,KAAK,YAAYvqC,CAAC,EAI/B,OAAO,IACT,CACA,YAAYwT,EAAG,CACb,IAAM9P,EAAO,KAAK,QAClB,GAAI,CAAC+mC,GAAWj3B,EAAE,KAAM9P,CAAI,EAC1B,OAEF,IAAMgnC,EAAc,KAAK,iBAAiBl3B,EAAE,EAAGA,EAAE,CAAC,EAClD,GAAIA,EAAE,OAAS,aAAeA,EAAE,OAAS,WAAY,CACnD,IAAMwoB,EAAW,KAAK,aAChB2O,EAAW7C,GAAW9L,EAAU0O,CAAW,EAC7C1O,GAAY,CAAC2O,GACfplB,EAAS7hB,EAAK,QAAS,CAAC8P,EAAGwoB,EAAU,IAAI,EAAG,IAAI,EAElD,KAAK,aAAe0O,EAChBA,GAAe,CAACC,GAClBplB,EAAS7hB,EAAK,QAAS,CAAC8P,EAAGk3B,EAAa,IAAI,EAAG,IAAI,CAEvD,MAAWA,GACTnlB,EAAS7hB,EAAK,QAAS,CAAC8P,EAAGk3B,EAAa,IAAI,EAAG,IAAI,CAEvD,CACF,EACA,SAAS3B,GAAkBlB,EAAUI,EAAWx9B,EAAKgJ,EAAY+0B,EAAa,CAC5E,IAAMD,EAAYqC,GAAmBn3B,EAAYo0B,EAAUI,EAAWx9B,CAAG,EACnEy9B,EAAa2C,GAAoBrC,EAAa/0B,EAAYw0B,EAAU,UAAU,EACpF,MAAO,CACL,UAAAM,EACA,WAAAL,CACF,CACF,CACA,SAAS0C,GAAmBn3B,EAAYo0B,EAAUI,EAAWx9B,EAAK,CAChE,IAAIqgC,EAAiBr3B,EAAW,KAChC,OAAIq3B,GAAkB,OAAOA,GAAmB,WAC9CA,EAAiBA,EAAe,OAAO,CAACt+B,EAAGlI,IAAMkI,EAAE,OAASlI,EAAE,OAASkI,EAAIlI,CAAC,GAEvEujC,EAAWI,EAAU,KAAO,EAAIx9B,EAAI,YAAYqgC,CAAc,EAAE,KACzE,CACA,SAASD,GAAoBrC,EAAa/0B,EAAYw2B,EAAgB,CACpE,IAAI/B,EAAaM,EACjB,OAAI,OAAO/0B,EAAW,MAAS,WAC7By0B,EAAagC,GAA0Bz2B,EAAYw2B,CAAc,GAE5D/B,CACT,CACA,SAASgC,GAA0Bz2B,EAAYw2B,EAAgB,CAC7D,IAAM5iB,EAAc5T,EAAW,KAAOA,EAAW,KAAK,OAAS,EAC/D,OAAOw2B,EAAiB5iB,CAC1B,CACA,SAASojB,GAAWhrC,EAAMiE,EAAM,CAI9B,MAHK,IAAAjE,IAAS,aAAeA,IAAS,cAAgBiE,EAAK,SAAWA,EAAK,UAGvEA,EAAK,UAAYjE,IAAS,SAAWA,IAAS,WAIpD,CACA,IAAIsrC,GAAgB,CAClB,GAAI,SACJ,SAAUhD,GACV,MAAMzoC,EAAO6hC,EAAOv+B,EAAS,CAC3B,IAAM8Q,EAASpU,EAAM,OAAS,IAAIyoC,GAAO,CACvC,IAAKzoC,EAAM,IACX,QAAAsD,EACA,MAAAtD,CACF,CAAC,EACDqb,EAAQ,UAAUrb,EAAOoU,EAAQ9Q,CAAO,EACxC+X,EAAQ,OAAOrb,EAAOoU,CAAM,CAC9B,EACA,KAAKpU,EAAO,CACVqb,EAAQ,UAAUrb,EAAOA,EAAM,MAAM,EACrC,OAAOA,EAAM,MACf,EACA,aAAaA,EAAO6hC,EAAOv+B,EAAS,CAClC,IAAM8Q,EAASpU,EAAM,OACrBqb,EAAQ,UAAUrb,EAAOoU,EAAQ9Q,CAAO,EACxC8Q,EAAO,QAAU9Q,CACnB,EACA,YAAYtD,EAAO,CACjB,IAAMoU,EAASpU,EAAM,OACrBoU,EAAO,YAAY,EACnBA,EAAO,eAAe,CACxB,EACA,WAAWpU,EAAO6M,EAAM,CACjBA,EAAK,QACR7M,EAAM,OAAO,YAAY6M,EAAK,KAAK,CAEvC,EACA,SAAU,CACR,QAAS,GACT,SAAU,MACV,MAAO,SACP,SAAU,GACV,QAAS,GACT,OAAQ,IACR,QAAQ,EAAGsH,EAAYC,EAAQ,CAC7B,IAAMzM,EAAQwM,EAAW,aACnBu3B,EAAKt3B,EAAO,MACds3B,EAAG,iBAAiB/jC,CAAK,GAC3B+jC,EAAG,KAAK/jC,CAAK,EACbwM,EAAW,OAAS,KAEpBu3B,EAAG,KAAK/jC,CAAK,EACbwM,EAAW,OAAS,GAExB,EACA,QAAS,KACT,QAAS,KACT,OAAQ,CACN,MAAOhJ,GAAOA,EAAI,MAAM,QAAQ,MAChC,SAAU,GACV,QAAS,GACT,eAAenL,EAAO,CACpB,IAAM01B,EAAW11B,EAAM,KAAK,SACtB,CACJ,OAAQ,CACN,cAAA2rC,EACA,WAAA/3B,EACA,UAAAC,EACA,MAAApS,EACA,gBAAAqS,EACA,aAAAC,CACF,CACF,EAAI/T,EAAM,OAAO,QACjB,OAAOA,EAAM,uBAAuB,EAAE,IAAIiG,GAAQ,CAChD,IAAMgO,EAAQhO,EAAK,WAAW,SAAS0lC,EAAgB,EAAI,MAAS,EAC9DxT,EAAcja,EAAUjK,EAAM,WAAW,EAC/C,MAAO,CACL,KAAMyhB,EAASzvB,EAAK,KAAK,EAAE,MAC3B,UAAWgO,EAAM,gBACjB,UAAWxS,EACX,OAAQ,CAACwE,EAAK,QACd,QAASgO,EAAM,eACf,SAAUA,EAAM,WAChB,eAAgBA,EAAM,iBACtB,SAAUA,EAAM,gBAChB,WAAYkkB,EAAY,MAAQA,EAAY,QAAU,EACtD,YAAalkB,EAAM,YACnB,WAAYL,GAAcK,EAAM,WAChC,SAAUA,EAAM,SAChB,UAAWJ,GAAaI,EAAM,UAC9B,aAAcH,IAAoBC,GAAgBE,EAAM,cACxD,aAAchO,EAAK,KACrB,CACF,EAAG,IAAI,CACT,CACF,EACA,MAAO,CACL,MAAOkF,GAAOA,EAAI,MAAM,QAAQ,MAChC,QAAS,GACT,SAAU,SACV,KAAM,EACR,CACF,EACA,YAAa,CACX,YAAawF,GAAQ,CAACA,EAAK,WAAW,IAAI,EAC1C,OAAQ,CACN,YAAaA,GAAQ,CAAC,CAAC,iBAAkB,SAAU,MAAM,EAAE,SAASA,CAAI,CAC1E,CACF,CACF,EACMi7B,GAAN,cAAoBnqB,EAAQ,CAC1B,YAAY7e,EAAQ,CAClB,MAAM,EACN,KAAK,MAAQA,EAAO,MACpB,KAAK,QAAUA,EAAO,QACtB,KAAK,IAAMA,EAAO,IAClB,KAAK,SAAW,OAChB,KAAK,IAAM,OACX,KAAK,OAAS,OACd,KAAK,KAAO,OACZ,KAAK,MAAQ,OACb,KAAK,MAAQ,OACb,KAAK,OAAS,OACd,KAAK,SAAW,OAChB,KAAK,OAAS,OACd,KAAK,SAAW,MAClB,CACA,OAAOiS,EAAUC,EAAW,CAC1B,IAAM1Q,EAAO,KAAK,QAGlB,GAFA,KAAK,KAAO,EACZ,KAAK,IAAM,EACP,CAACA,EAAK,QAAS,CACjB,KAAK,MAAQ,KAAK,OAAS,KAAK,MAAQ,KAAK,OAAS,EACtD,MACF,CACA,KAAK,MAAQ,KAAK,MAAQyQ,EAC1B,KAAK,OAAS,KAAK,OAASC,EAC5B,IAAM6W,EAAYxoB,EAAQiB,EAAK,IAAI,EAAIA,EAAK,KAAK,OAAS,EAC1D,KAAK,SAAW8Z,EAAU9Z,EAAK,OAAO,EACtC,IAAMynC,EAAWlgB,EAAY9G,EAAOzgB,EAAK,IAAI,EAAE,WAAa,KAAK,SAAS,OACtE,KAAK,aAAa,EACpB,KAAK,OAASynC,EAEd,KAAK,MAAQA,CAEjB,CACA,cAAe,CACb,IAAM3wB,EAAM,KAAK,QAAQ,SACzB,OAAOA,IAAQ,OAASA,IAAQ,QAClC,CACA,UAAUyH,EAAQ,CAChB,GAAM,CACJ,IAAA7T,EACA,KAAAiN,EACA,OAAAhN,EACA,MAAAiN,EACA,QAAA1Y,CACF,EAAI,KACEkgB,EAAQlgB,EAAQ,MAClB6O,EAAW,EACX0C,EAAUuQ,EAAQC,EACtB,OAAI,KAAK,aAAa,GACpBD,EAASE,EAAe9B,EAAOzH,EAAMC,CAAK,EAC1CqJ,EAASvW,EAAM6T,EACf9N,EAAWmH,EAAQD,IAEfzY,EAAQ,WAAa,QACvB8hB,EAASrJ,EAAO4G,EAChB0C,EAASC,EAAe9B,EAAOzU,EAAQD,CAAG,EAC1CqD,EAAWsB,EAAK,MAEhB2R,EAASpJ,EAAQ2G,EACjB0C,EAASC,EAAe9B,EAAO1U,EAAKC,CAAM,EAC1CoD,EAAWsB,EAAK,IAElBoB,EAAW9F,EAASD,GAEf,CACL,OAAAsW,EACA,OAAAC,EACA,SAAAxQ,EACA,SAAA1C,CACF,CACF,CACA,MAAO,CACL,IAAMhH,EAAM,KAAK,IACX/G,EAAO,KAAK,QAClB,GAAI,CAACA,EAAK,QACR,OAEF,IAAM0nC,EAAWjnB,EAAOzgB,EAAK,IAAI,EAE3Bue,EADampB,EAAS,WACA,EAAI,KAAK,SAAS,IACxC,CACJ,OAAA1mB,EACA,OAAAC,EACA,SAAAxQ,EACA,SAAA1C,CACF,EAAI,KAAK,UAAUwQ,CAAM,EACzBgK,GAAWxhB,EAAK/G,EAAK,KAAM,EAAG,EAAG0nC,EAAU,CACzC,MAAO1nC,EAAK,MACZ,SAAAyQ,EACA,SAAA1C,EACA,UAAW+S,GAAmB9gB,EAAK,KAAK,EACxC,aAAc,SACd,YAAa,CAACghB,EAAQC,CAAM,CAC9B,CAAC,CACH,CACF,EACA,SAAS0mB,GAAY/rC,EAAOonB,EAAW,CACrC,IAAMyF,EAAQ,IAAI+e,GAAM,CACtB,IAAK5rC,EAAM,IACX,QAASonB,EACT,MAAApnB,CACF,CAAC,EACDqb,EAAQ,UAAUrb,EAAO6sB,EAAOzF,CAAS,EACzC/L,EAAQ,OAAOrb,EAAO6sB,CAAK,EAC3B7sB,EAAM,WAAa6sB,CACrB,CACA,IAAImf,GAAe,CACjB,GAAI,QACJ,SAAUJ,GACV,MAAM5rC,EAAO6hC,EAAOv+B,EAAS,CAC3ByoC,GAAY/rC,EAAOsD,CAAO,CAC5B,EACA,KAAKtD,EAAO,CACV,IAAMisC,EAAajsC,EAAM,WACzBqb,EAAQ,UAAUrb,EAAOisC,CAAU,EACnC,OAAOjsC,EAAM,UACf,EACA,aAAaA,EAAO6hC,EAAOv+B,EAAS,CAClC,IAAMupB,EAAQ7sB,EAAM,WACpBqb,EAAQ,UAAUrb,EAAO6sB,EAAOvpB,CAAO,EACvCupB,EAAM,QAAUvpB,CAClB,EACA,SAAU,CACR,MAAO,SACP,QAAS,GACT,KAAM,CACJ,OAAQ,MACV,EACA,SAAU,GACV,QAAS,GACT,SAAU,MACV,KAAM,GACN,OAAQ,GACV,EACA,cAAe,CACb,MAAO,OACT,EACA,YAAa,CACX,YAAa,GACb,WAAY,EACd,CACF,EACM4oC,GAAM,IAAI,QACZC,GAAkB,CACpB,GAAI,WACJ,MAAMnsC,EAAO6hC,EAAOv+B,EAAS,CAC3B,IAAMupB,EAAQ,IAAI+e,GAAM,CACtB,IAAK5rC,EAAM,IACX,QAAAsD,EACA,MAAAtD,CACF,CAAC,EACDqb,EAAQ,UAAUrb,EAAO6sB,EAAOvpB,CAAO,EACvC+X,EAAQ,OAAOrb,EAAO6sB,CAAK,EAC3Bqf,GAAI,IAAIlsC,EAAO6sB,CAAK,CACtB,EACA,KAAK7sB,EAAO,CACVqb,EAAQ,UAAUrb,EAAOksC,GAAI,IAAIlsC,CAAK,CAAC,EACvCksC,GAAI,OAAOlsC,CAAK,CAClB,EACA,aAAaA,EAAO6hC,EAAOv+B,EAAS,CAClC,IAAMupB,EAAQqf,GAAI,IAAIlsC,CAAK,EAC3Bqb,EAAQ,UAAUrb,EAAO6sB,EAAOvpB,CAAO,EACvCupB,EAAM,QAAUvpB,CAClB,EACA,SAAU,CACR,MAAO,SACP,QAAS,GACT,KAAM,CACJ,OAAQ,QACV,EACA,SAAU,GACV,QAAS,EACT,SAAU,MACV,KAAM,GACN,OAAQ,IACV,EACA,cAAe,CACb,MAAO,OACT,EACA,YAAa,CACX,YAAa,GACb,WAAY,EACd,CACF,EACM8oC,GAAc,CAClB,QAAQ3rC,EAAO,CACb,GAAI,CAACA,EAAM,OACT,MAAO,GAET,IAAI,EAAG4iB,EACHgpB,EAAO,IAAI,IACXznC,EAAI,EACJsF,EAAQ,EACZ,IAAK,EAAI,EAAGmZ,EAAM5iB,EAAM,OAAQ,EAAI4iB,EAAK,EAAE,EAAG,CAC5C,IAAMhL,EAAK5X,EAAM,CAAC,EAAE,QACpB,GAAI4X,GAAMA,EAAG,SAAS,EAAG,CACvB,IAAM6C,EAAM7C,EAAG,gBAAgB,EAC/Bg0B,EAAK,IAAInxB,EAAI,CAAC,EACdtW,GAAKsW,EAAI,EACT,EAAEhR,CACJ,CACF,CACA,OAAIA,IAAU,GAAKmiC,EAAK,OAAS,EACxB,GAGF,CACL,EAFe,CAAC,GAAGA,CAAI,EAAE,OAAO,CAAC,EAAGrnC,IAAM,EAAIA,CAAC,EAAIqnC,EAAK,KAGxD,EAAGznC,EAAIsF,CACT,CACF,EACA,QAAQzJ,EAAO6rC,EAAe,CAC5B,GAAI,CAAC7rC,EAAM,OACT,MAAO,GAET,IAAIkE,EAAI2nC,EAAc,EAClB1nC,EAAI0nC,EAAc,EAClBvyB,EAAc,OAAO,kBACrBrZ,EAAG2iB,EAAKkpB,EACZ,IAAK7rC,EAAI,EAAG2iB,EAAM5iB,EAAM,OAAQC,EAAI2iB,EAAK,EAAE3iB,EAAG,CAC5C,IAAM2X,EAAK5X,EAAMC,CAAC,EAAE,QACpB,GAAI2X,GAAMA,EAAG,SAAS,EAAG,CACvB,IAAM/G,EAAS+G,EAAG,eAAe,EAC3BoY,EAAI+b,GAAsBF,EAAeh7B,CAAM,EACjDmf,EAAI1W,IACNA,EAAc0W,EACd8b,EAAiBl0B,EAErB,CACF,CACA,GAAIk0B,EAAgB,CAClB,IAAME,EAAKF,EAAe,gBAAgB,EAC1C5nC,EAAI8nC,EAAG,EACP7nC,EAAI6nC,EAAG,CACT,CACA,MAAO,CACL,EAAA9nC,EACA,EAAAC,CACF,CACF,CACF,EACA,SAAS8nC,GAAa38B,EAAM48B,EAAQ,CAClC,OAAIA,IACExpC,EAAQwpC,CAAM,EAChB,MAAM,UAAU,KAAK,MAAM58B,EAAM48B,CAAM,EAEvC58B,EAAK,KAAK48B,CAAM,GAGb58B,CACT,CACA,SAAS68B,GAAcC,EAAK,CAC1B,OAAK,OAAOA,GAAQ,UAAYA,aAAe,SAAWA,EAAI,QAAQ;AAAA,CAAI,EAAI,GACrEA,EAAI,MAAM;AAAA,CAAI,EAEhBA,CACT,CACA,SAASC,GAAkB9sC,EAAOY,EAAM,CACtC,GAAM,CACJ,QAAAyH,EACA,aAAA3C,EACA,MAAAiC,CACF,EAAI/G,EACE2G,EAAavH,EAAM,eAAe0F,CAAY,EAAE,WAChD,CACJ,MAAAsO,EACA,MAAApQ,CACF,EAAI2D,EAAW,iBAAiBI,CAAK,EACrC,MAAO,CACL,MAAA3H,EACA,MAAAgU,EACA,OAAQzM,EAAW,UAAUI,CAAK,EAClC,IAAK3H,EAAM,KAAK,SAAS0F,CAAY,EAAE,KAAKiC,CAAK,EACjD,eAAgB/D,EAChB,QAAS2D,EAAW,WAAW,EAC/B,UAAWI,EACX,aAAAjC,EACA,QAAA2C,CACF,CACF,CACA,SAAS0kC,GAAeC,EAAS1pC,EAAS,CACxC,IAAM6H,EAAM6hC,EAAQ,MAAM,IACpB,CACJ,KAAAC,EACA,OAAAC,EACA,MAAArgB,CACF,EAAImgB,EACE,CACJ,SAAAzE,EACA,UAAAD,CACF,EAAIhlC,EACE6pC,EAAWtoB,EAAOvhB,EAAQ,QAAQ,EAClCwnC,EAAYjmB,EAAOvhB,EAAQ,SAAS,EACpC8pC,EAAavoB,EAAOvhB,EAAQ,UAAU,EACtC+pC,EAAiBxgB,EAAM,OACvBygB,EAAkBJ,EAAO,OACzBK,EAAoBN,EAAK,OACzBhvB,EAAUC,EAAU5a,EAAQ,OAAO,EACrCqa,EAASM,EAAQ,OACjBP,EAAQ,EACR8vB,EAAqBP,EAAK,OAAO,CAAC/iC,EAAOujC,IAAavjC,EAAQujC,EAAS,OAAO,OAASA,EAAS,MAAM,OAASA,EAAS,MAAM,OAAQ,CAAC,EAK3I,GAJAD,GAAsBR,EAAQ,WAAW,OAASA,EAAQ,UAAU,OAChEK,IACF1vB,GAAU0vB,EAAiBvC,EAAU,YAAcuC,EAAiB,GAAK/pC,EAAQ,aAAeA,EAAQ,mBAEtGkqC,EAAoB,CACtB,IAAME,EAAiBpqC,EAAQ,cAAgB,KAAK,IAAIglC,EAAW6E,EAAS,UAAU,EAAIA,EAAS,WACnGxvB,GAAU4vB,EAAoBG,GAAkBF,EAAqBD,GAAqBJ,EAAS,YAAcK,EAAqB,GAAKlqC,EAAQ,WACrJ,CACIgqC,IACF3vB,GAAUra,EAAQ,gBAAkBgqC,EAAkBF,EAAW,YAAcE,EAAkB,GAAKhqC,EAAQ,eAEhH,IAAIqqC,EAAe,EACbC,EAAe,SAAU93B,EAAM,CACnC4H,EAAQ,KAAK,IAAIA,EAAOvS,EAAI,YAAY2K,CAAI,EAAE,MAAQ63B,CAAY,CACpE,EACA,OAAAxiC,EAAI,KAAK,EACTA,EAAI,KAAO2/B,EAAU,OACrBvsB,EAAKyuB,EAAQ,MAAOY,CAAY,EAChCziC,EAAI,KAAOgiC,EAAS,OACpB5uB,EAAKyuB,EAAQ,WAAW,OAAOA,EAAQ,SAAS,EAAGY,CAAY,EAC/DD,EAAerqC,EAAQ,cAAgBilC,EAAW,EAAIjlC,EAAQ,WAAa,EAC3Eib,EAAK0uB,EAAMQ,GAAY,CACrBlvB,EAAKkvB,EAAS,OAAQG,CAAY,EAClCrvB,EAAKkvB,EAAS,MAAOG,CAAY,EACjCrvB,EAAKkvB,EAAS,MAAOG,CAAY,CACnC,CAAC,EACDD,EAAe,EACfxiC,EAAI,KAAOiiC,EAAW,OACtB7uB,EAAKyuB,EAAQ,OAAQY,CAAY,EACjCziC,EAAI,QAAQ,EACZuS,GAASO,EAAQ,MACV,CACL,MAAAP,EACA,OAAAC,CACF,CACF,CACA,SAASkwB,GAAgB7tC,EAAO0N,EAAM,CACpC,GAAM,CACJ,EAAA9I,EACA,OAAA+Y,CACF,EAAIjQ,EACJ,OAAI9I,EAAI+Y,EAAS,EACR,MACE/Y,EAAI5E,EAAM,OAAS2d,EAAS,EAC9B,SAEF,QACT,CACA,SAASmwB,GAAoBC,EAAQ/tC,EAAOsD,EAASoK,EAAM,CACzD,GAAM,CACJ,EAAA/I,EACA,MAAA+Y,CACF,EAAIhQ,EACEsgC,EAAQ1qC,EAAQ,UAAYA,EAAQ,aAI1C,GAHIyqC,IAAW,QAAUppC,EAAI+Y,EAAQswB,EAAQhuC,EAAM,OAG/C+tC,IAAW,SAAWppC,EAAI+Y,EAAQswB,EAAQ,EAC5C,MAAO,EAEX,CACA,SAASC,GAAgBjuC,EAAOsD,EAASoK,EAAMwgC,EAAQ,CACrD,GAAM,CACJ,EAAAvpC,EACA,MAAA+Y,CACF,EAAIhQ,EACE,CACJ,MAAOygC,EACP,UAAW,CACT,KAAApyB,EACA,MAAAC,CACF,CACF,EAAIhc,EACA+tC,EAAS,SACb,OAAIG,IAAW,SACbH,EAASppC,IAAMoX,EAAOC,GAAS,EAAI,OAAS,QACnCrX,GAAK+Y,EAAQ,EACtBqwB,EAAS,OACAppC,GAAKwpC,EAAazwB,EAAQ,IACnCqwB,EAAS,SAEPD,GAAoBC,EAAQ/tC,EAAOsD,EAASoK,CAAI,IAClDqgC,EAAS,UAEJA,CACT,CACA,SAASK,GAAmBpuC,EAAOsD,EAASoK,EAAM,CAChD,IAAMwgC,EAASxgC,EAAK,QAAUpK,EAAQ,QAAUuqC,GAAgB7tC,EAAO0N,CAAI,EAC3E,MAAO,CACL,OAAQA,EAAK,QAAUpK,EAAQ,QAAU2qC,GAAgBjuC,EAAOsD,EAASoK,EAAMwgC,CAAM,EACrF,OAAAA,CACF,CACF,CACA,SAASG,GAAO3gC,EAAMqgC,EAAQ,CAC5B,GAAI,CACF,EAAAppC,EACA,MAAA+Y,CACF,EAAIhQ,EACJ,OAAIqgC,IAAW,QACbppC,GAAK+Y,EACIqwB,IAAW,WACpBppC,GAAK+Y,EAAQ,GAER/Y,CACT,CACA,SAAS2pC,GAAO5gC,EAAMwgC,EAAQK,EAAgB,CAC5C,GAAI,CACF,EAAA3pC,EACA,OAAA+Y,CACF,EAAIjQ,EACJ,OAAIwgC,IAAW,MACbtpC,GAAK2pC,EACIL,IAAW,SACpBtpC,GAAK+Y,EAAS4wB,EAEd3pC,GAAK+Y,EAAS,EAET/Y,CACT,CACA,SAAS4pC,GAAmBlrC,EAASoK,EAAM+gC,EAAWzuC,EAAO,CAC3D,GAAM,CACJ,UAAA0uC,EACA,aAAAC,EACA,aAAAC,CACF,EAAItrC,EACE,CACJ,OAAAyqC,EACA,OAAAG,CACF,EAAIO,EACEF,EAAiBG,EAAYC,EAC7B,CACJ,QAAAE,EACA,SAAAC,EACA,WAAAC,EACA,YAAAC,CACF,EAAIlP,GAAc8O,CAAY,EAC1BjqC,EAAI0pC,GAAO3gC,EAAMqgC,CAAM,EACrBnpC,EAAI0pC,GAAO5gC,EAAMwgC,EAAQK,CAAc,EAC7C,OAAIL,IAAW,SACTH,IAAW,OACbppC,GAAK4pC,EACIR,IAAW,UACpBppC,GAAK4pC,GAEER,IAAW,OACpBppC,GAAK,KAAK,IAAIkqC,EAASE,CAAU,EAAIL,EAC5BX,IAAW,UACpBppC,GAAK,KAAK,IAAImqC,EAAUE,CAAW,EAAIN,GAElC,CACL,EAAGxnB,EAAYviB,EAAG,EAAG3E,EAAM,MAAQ0N,EAAK,KAAK,EAC7C,EAAGwZ,EAAYtiB,EAAG,EAAG5E,EAAM,OAAS0N,EAAK,MAAM,CACjD,CACF,CACA,SAASuhC,GAAYjC,EAASxpB,EAAOlgB,EAAS,CAC5C,IAAM2a,EAAUC,EAAU5a,EAAQ,OAAO,EACzC,OAAOkgB,IAAU,SAAWwpB,EAAQ,EAAIA,EAAQ,MAAQ,EAAIxpB,IAAU,QAAUwpB,EAAQ,EAAIA,EAAQ,MAAQ/uB,EAAQ,MAAQ+uB,EAAQ,EAAI/uB,EAAQ,IAClJ,CACA,SAASixB,GAAwBjpB,EAAU,CACzC,OAAOymB,GAAa,CAAC,EAAGE,GAAc3mB,CAAQ,CAAC,CACjD,CACA,SAASkpB,GAAqBjnC,EAAQ8kC,EAASoC,EAAc,CAC3D,OAAOjnC,GAAcD,EAAQ,CAC3B,QAAA8kC,EACA,aAAAoC,EACA,KAAM,SACR,CAAC,CACH,CACA,SAASC,GAAkBjvC,EAAWoL,EAAS,CAC7C,IAAM4hB,EAAW5hB,GAAWA,EAAQ,SAAWA,EAAQ,QAAQ,SAAWA,EAAQ,QAAQ,QAAQ,UAClG,OAAO4hB,EAAWhtB,EAAU,SAASgtB,CAAQ,EAAIhtB,CACnD,CACA,IAAMkvC,GAAmB,CACvB,YAAaC,GACb,MAAMH,EAAc,CAClB,GAAIA,EAAa,OAAS,EAAG,CAC3B,IAAMxuC,EAAOwuC,EAAa,CAAC,EACrB7kC,EAAS3J,EAAK,MAAM,KAAK,OACzB4uC,EAAajlC,EAASA,EAAO,OAAS,EAC5C,GAAI,MAAQ,KAAK,SAAW,KAAK,QAAQ,OAAS,UAChD,OAAO3J,EAAK,QAAQ,OAAS,GACxB,GAAIA,EAAK,MACd,OAAOA,EAAK,MACP,GAAI4uC,EAAa,GAAK5uC,EAAK,UAAY4uC,EAC5C,OAAOjlC,EAAO3J,EAAK,SAAS,CAEhC,CACA,MAAO,EACT,EACA,WAAY2uC,GACZ,WAAYA,GACZ,YAAaA,GACb,MAAME,EAAa,CACjB,GAAI,MAAQ,KAAK,SAAW,KAAK,QAAQ,OAAS,UAChD,OAAOA,EAAY,MAAQ,KAAOA,EAAY,gBAAkBA,EAAY,eAE9E,IAAIz7B,EAAQy7B,EAAY,QAAQ,OAAS,GACrCz7B,IACFA,GAAS,MAEX,IAAMpQ,EAAQ6rC,EAAY,eAC1B,OAAK7hC,EAAchK,CAAK,IACtBoQ,GAASpQ,GAEJoQ,CACT,EACA,WAAWy7B,EAAa,CAEtB,IAAMnsC,EADOmsC,EAAY,MAAM,eAAeA,EAAY,YAAY,EACjD,WAAW,SAASA,EAAY,SAAS,EAC9D,MAAO,CACL,YAAansC,EAAQ,YACrB,gBAAiBA,EAAQ,gBACzB,YAAaA,EAAQ,YACrB,WAAYA,EAAQ,WACpB,iBAAkBA,EAAQ,iBAC1B,aAAc,CAChB,CACF,EACA,gBAAiB,CACf,OAAO,KAAK,QAAQ,SACtB,EACA,gBAAgBmsC,EAAa,CAE3B,IAAMnsC,EADOmsC,EAAY,MAAM,eAAeA,EAAY,YAAY,EACjD,WAAW,SAASA,EAAY,SAAS,EAC9D,MAAO,CACL,WAAYnsC,EAAQ,WACpB,SAAUA,EAAQ,QACpB,CACF,EACA,WAAYisC,GACZ,UAAWA,GACX,aAAcA,GACd,OAAQA,GACR,YAAaA,EACf,EACA,SAASG,EAA2BtvC,EAAWuQ,EAAMxF,EAAKqjB,EAAK,CAC7D,IAAMlW,EAASlY,EAAUuQ,CAAI,EAAE,KAAKxF,EAAKqjB,CAAG,EAC5C,OAAI,OAAOlW,EAAW,IACbg3B,GAAiB3+B,CAAI,EAAE,KAAKxF,EAAKqjB,CAAG,EAEtClW,CACT,CACA,IAAIq3B,IAAwB,IAAM,CAChC,MAAMA,UAAgBluB,EAAQ,CAC5B,OAAO,YAAc2qB,GACrB,YAAYxpC,EAAQ,CAClB,MAAM,EACN,KAAK,QAAU,EACf,KAAK,QAAU,CAAC,EAChB,KAAK,eAAiB,OACtB,KAAK,MAAQ,OACb,KAAK,kBAAoB,OACzB,KAAK,cAAgB,CAAC,EACtB,KAAK,YAAc,OACnB,KAAK,SAAW,OAChB,KAAK,MAAQA,EAAO,MACpB,KAAK,QAAUA,EAAO,QACtB,KAAK,WAAa,OAClB,KAAK,MAAQ,OACb,KAAK,WAAa,OAClB,KAAK,KAAO,OACZ,KAAK,UAAY,OACjB,KAAK,OAAS,OACd,KAAK,OAAS,OACd,KAAK,OAAS,OACd,KAAK,EAAI,OACT,KAAK,EAAI,OACT,KAAK,OAAS,OACd,KAAK,MAAQ,OACb,KAAK,OAAS,OACd,KAAK,OAAS,OACd,KAAK,YAAc,OACnB,KAAK,iBAAmB,OACxB,KAAK,gBAAkB,MACzB,CACA,WAAWU,EAAS,CAClB,KAAK,QAAUA,EACf,KAAK,kBAAoB,OACzB,KAAK,SAAW,MAClB,CACA,oBAAqB,CACnB,IAAMoF,EAAS,KAAK,kBACpB,GAAIA,EACF,OAAOA,EAET,IAAM1I,EAAQ,KAAK,MACbsD,EAAU,KAAK,QAAQ,WAAW,KAAK,WAAW,CAAC,EACnDc,EAAOd,EAAQ,SAAWtD,EAAM,QAAQ,WAAasD,EAAQ,WAC7DE,EAAa,IAAIb,GAAW,KAAK,MAAOyB,CAAI,EAClD,OAAIA,EAAK,aACP,KAAK,kBAAoB,OAAO,OAAOZ,CAAU,GAE5CA,CACT,CACA,YAAa,CACX,OAAO,KAAK,WAAa,KAAK,SAAW2rC,GAAqB,KAAK,MAAM,WAAW,EAAG,KAAM,KAAK,aAAa,EACjH,CACA,SAAS3jC,EAASlI,EAAS,CACzB,GAAM,CACJ,UAAAlD,CACF,EAAIkD,EACEssC,EAAcF,EAA2BtvC,EAAW,cAAe,KAAMoL,CAAO,EAChFqhB,EAAQ6iB,EAA2BtvC,EAAW,QAAS,KAAMoL,CAAO,EACpEqkC,EAAaH,EAA2BtvC,EAAW,aAAc,KAAMoL,CAAO,EAChFskC,EAAQ,CAAC,EACb,OAAAA,EAAQpD,GAAaoD,EAAOlD,GAAcgD,CAAW,CAAC,EACtDE,EAAQpD,GAAaoD,EAAOlD,GAAc/f,CAAK,CAAC,EAChDijB,EAAQpD,GAAaoD,EAAOlD,GAAciD,CAAU,CAAC,EAC9CC,CACT,CACA,cAAcV,EAAc9rC,EAAS,CACnC,OAAO4rC,GAAwBQ,EAA2BpsC,EAAQ,UAAW,aAAc,KAAM8rC,CAAY,CAAC,CAChH,CACA,QAAQA,EAAc9rC,EAAS,CAC7B,GAAM,CACJ,UAAAlD,CACF,EAAIkD,EACEysC,EAAY,CAAC,EACnB,OAAAxxB,EAAK6wB,EAAc5jC,GAAW,CAC5B,IAAMiiC,EAAW,CACf,OAAQ,CAAC,EACT,MAAO,CAAC,EACR,MAAO,CAAC,CACV,EACMuC,EAASX,GAAkBjvC,EAAWoL,CAAO,EACnDkhC,GAAae,EAAS,OAAQb,GAAc8C,EAA2BM,EAAQ,cAAe,KAAMxkC,CAAO,CAAC,CAAC,EAC7GkhC,GAAae,EAAS,MAAOiC,EAA2BM,EAAQ,QAAS,KAAMxkC,CAAO,CAAC,EACvFkhC,GAAae,EAAS,MAAOb,GAAc8C,EAA2BM,EAAQ,aAAc,KAAMxkC,CAAO,CAAC,CAAC,EAC3GukC,EAAU,KAAKtC,CAAQ,CACzB,CAAC,EACMsC,CACT,CACA,aAAaX,EAAc9rC,EAAS,CAClC,OAAO4rC,GAAwBQ,EAA2BpsC,EAAQ,UAAW,YAAa,KAAM8rC,CAAY,CAAC,CAC/G,CACA,UAAUA,EAAc9rC,EAAS,CAC/B,GAAM,CACJ,UAAAlD,CACF,EAAIkD,EACE2sC,EAAeP,EAA2BtvC,EAAW,eAAgB,KAAMgvC,CAAY,EACvFlC,EAASwC,EAA2BtvC,EAAW,SAAU,KAAMgvC,CAAY,EAC3Ec,EAAcR,EAA2BtvC,EAAW,cAAe,KAAMgvC,CAAY,EACvFU,EAAQ,CAAC,EACb,OAAAA,EAAQpD,GAAaoD,EAAOlD,GAAcqD,CAAY,CAAC,EACvDH,EAAQpD,GAAaoD,EAAOlD,GAAcM,CAAM,CAAC,EACjD4C,EAAQpD,GAAaoD,EAAOlD,GAAcsD,CAAW,CAAC,EAC/CJ,CACT,CACA,aAAaxsC,EAAS,CACpB,IAAMgI,EAAS,KAAK,QACdtF,EAAO,KAAK,MAAM,KAClBmqC,EAAc,CAAC,EACfC,EAAmB,CAAC,EACpBC,EAAkB,CAAC,EACrBjB,EAAe,CAAC,EAChB1uC,EAAG2iB,EACP,IAAK3iB,EAAI,EAAG2iB,EAAM/X,EAAO,OAAQ5K,EAAI2iB,EAAK,EAAE3iB,EAC1C0uC,EAAa,KAAKtC,GAAkB,KAAK,MAAOxhC,EAAO5K,CAAC,CAAC,CAAC,EAE5D,OAAI4C,EAAQ,SACV8rC,EAAeA,EAAa,OAAO,CAAC/mC,EAASV,EAAO+S,IAAUpX,EAAQ,OAAO+E,EAASV,EAAO+S,EAAO1U,CAAI,CAAC,GAEvG1C,EAAQ,WACV8rC,EAAeA,EAAa,KAAK,CAACliC,EAAGlI,IAAM1B,EAAQ,SAAS4J,EAAGlI,EAAGgB,CAAI,CAAC,GAEzEuY,EAAK6wB,EAAc5jC,GAAW,CAC5B,IAAMwkC,EAASX,GAAkB/rC,EAAQ,UAAWkI,CAAO,EAC3D2kC,EAAY,KAAKT,EAA2BM,EAAQ,aAAc,KAAMxkC,CAAO,CAAC,EAChF4kC,EAAiB,KAAKV,EAA2BM,EAAQ,kBAAmB,KAAMxkC,CAAO,CAAC,EAC1F6kC,EAAgB,KAAKX,EAA2BM,EAAQ,iBAAkB,KAAMxkC,CAAO,CAAC,CAC1F,CAAC,EACD,KAAK,YAAc2kC,EACnB,KAAK,iBAAmBC,EACxB,KAAK,gBAAkBC,EACvB,KAAK,WAAajB,EACXA,CACT,CACA,OAAO9xB,EAASsa,EAAQ,CACtB,IAAMt0B,EAAU,KAAK,QAAQ,WAAW,KAAK,WAAW,CAAC,EACnDgI,EAAS,KAAK,QAChBxH,EACAsrC,EAAe,CAAC,EACpB,GAAI,CAAC9jC,EAAO,OACN,KAAK,UAAY,IACnBxH,EAAa,CACX,QAAS,CACX,OAEG,CACL,IAAM4U,EAAW0zB,GAAY9oC,EAAQ,QAAQ,EAAE,KAAK,KAAMgI,EAAQ,KAAK,cAAc,EACrF8jC,EAAe,KAAK,aAAa9rC,CAAO,EACxC,KAAK,MAAQ,KAAK,SAAS8rC,EAAc9rC,CAAO,EAChD,KAAK,WAAa,KAAK,cAAc8rC,EAAc9rC,CAAO,EAC1D,KAAK,KAAO,KAAK,QAAQ8rC,EAAc9rC,CAAO,EAC9C,KAAK,UAAY,KAAK,aAAa8rC,EAAc9rC,CAAO,EACxD,KAAK,OAAS,KAAK,UAAU8rC,EAAc9rC,CAAO,EAClD,IAAMoK,EAAO,KAAK,MAAQq/B,GAAe,KAAMzpC,CAAO,EAChDgtC,EAAkB,OAAO,OAAO,CAAC,EAAG53B,EAAUhL,CAAI,EAClD+gC,EAAYL,GAAmB,KAAK,MAAO9qC,EAASgtC,CAAe,EACnEC,EAAkB/B,GAAmBlrC,EAASgtC,EAAiB7B,EAAW,KAAK,KAAK,EAC1F,KAAK,OAASA,EAAU,OACxB,KAAK,OAASA,EAAU,OACxB3qC,EAAa,CACX,QAAS,EACT,EAAGysC,EAAgB,EACnB,EAAGA,EAAgB,EACnB,MAAO7iC,EAAK,MACZ,OAAQA,EAAK,OACb,OAAQgL,EAAS,EACjB,OAAQA,EAAS,CACnB,CACF,CACA,KAAK,cAAgB02B,EACrB,KAAK,SAAW,OACZtrC,GACF,KAAK,mBAAmB,EAAE,OAAO,KAAMA,CAAU,EAE/CwZ,GAAWha,EAAQ,UACrBA,EAAQ,SAAS,KAAK,KAAM,CAC1B,MAAO,KAAK,MACZ,QAAS,KACT,OAAAs0B,CACF,CAAC,CAEL,CACA,UAAU4Y,EAAcrlC,EAAKuC,EAAMpK,EAAS,CAC1C,IAAMmtC,EAAgB,KAAK,iBAAiBD,EAAc9iC,EAAMpK,CAAO,EACvE6H,EAAI,OAAOslC,EAAc,GAAIA,EAAc,EAAE,EAC7CtlC,EAAI,OAAOslC,EAAc,GAAIA,EAAc,EAAE,EAC7CtlC,EAAI,OAAOslC,EAAc,GAAIA,EAAc,EAAE,CAC/C,CACA,iBAAiBD,EAAc9iC,EAAMpK,EAAS,CAC5C,GAAM,CACJ,OAAAyqC,EACA,OAAAG,CACF,EAAI,KACE,CACJ,UAAAQ,EACA,aAAAE,CACF,EAAItrC,EACE,CACJ,QAAAurC,EACA,SAAAC,EACA,WAAAC,EACA,YAAAC,CACF,EAAIlP,GAAc8O,CAAY,EACxB,CACJ,EAAG8B,EACH,EAAGC,CACL,EAAIH,EACE,CACJ,MAAA9yB,EACA,OAAAC,CACF,EAAIjQ,EACA8c,EAAIE,EAAIkmB,EAAInmB,EAAIE,EAAIkmB,EACxB,OAAI3C,IAAW,UACbvjB,EAAKgmB,EAAMhzB,EAAS,EAChBowB,IAAW,QACbvjB,EAAKkmB,EACLhmB,EAAKF,EAAKkkB,EACVjkB,EAAKE,EAAK+jB,EACVmC,EAAKlmB,EAAK+jB,IAEVlkB,EAAKkmB,EAAMhzB,EACXgN,EAAKF,EAAKkkB,EACVjkB,EAAKE,EAAK+jB,EACVmC,EAAKlmB,EAAK+jB,GAEZkC,EAAKpmB,IAEDujB,IAAW,OACbrjB,EAAKgmB,EAAM,KAAK,IAAI7B,EAASE,CAAU,EAAIL,EAClCX,IAAW,QACpBrjB,EAAKgmB,EAAMhzB,EAAQ,KAAK,IAAIoxB,EAAUE,CAAW,EAAIN,EAErDhkB,EAAK,KAAK,OAERwjB,IAAW,OACbzjB,EAAKkmB,EACLhmB,EAAKF,EAAKikB,EACVlkB,EAAKE,EAAKgkB,EACVkC,EAAKlmB,EAAKgkB,IAEVjkB,EAAKkmB,EAAMhzB,EACXgN,EAAKF,EAAKikB,EACVlkB,EAAKE,EAAKgkB,EACVkC,EAAKlmB,EAAKgkB,GAEZmC,EAAKpmB,GAEA,CACL,GAAAD,EACA,GAAAE,EACA,GAAAkmB,EACA,GAAAnmB,EACA,GAAAE,EACA,GAAAkmB,CACF,CACF,CACA,UAAUC,EAAI3lC,EAAK7H,EAAS,CAC1B,IAAMupB,EAAQ,KAAK,MACb7b,EAAS6b,EAAM,OACjBie,EAAWiG,EAAcrwC,EAC7B,GAAIsQ,EAAQ,CACV,IAAM24B,EAAYC,GAActmC,EAAQ,IAAK,KAAK,EAAG,KAAK,KAAK,EAQ/D,IAPAwtC,EAAG,EAAI7B,GAAY,KAAM3rC,EAAQ,WAAYA,CAAO,EACpD6H,EAAI,UAAYw+B,EAAU,UAAUrmC,EAAQ,UAAU,EACtD6H,EAAI,aAAe,SACnB2/B,EAAYjmB,EAAOvhB,EAAQ,SAAS,EACpCytC,EAAeztC,EAAQ,aACvB6H,EAAI,UAAY7H,EAAQ,WACxB6H,EAAI,KAAO2/B,EAAU,OAChBpqC,EAAI,EAAGA,EAAIsQ,EAAQ,EAAEtQ,EACxByK,EAAI,SAAS0hB,EAAMnsB,CAAC,EAAGipC,EAAU,EAAEmH,EAAG,CAAC,EAAGA,EAAG,EAAIhG,EAAU,WAAa,CAAC,EACzEgG,EAAG,GAAKhG,EAAU,WAAaiG,EAC3BrwC,EAAI,IAAMsQ,IACZ8/B,EAAG,GAAKxtC,EAAQ,kBAAoBytC,EAG1C,CACF,CACA,cAAc5lC,EAAK2lC,EAAIpwC,EAAGipC,EAAWrmC,EAAS,CAC5C,IAAM0tC,EAAa,KAAK,YAAYtwC,CAAC,EAC/BuwC,EAAkB,KAAK,iBAAiBvwC,CAAC,EACzC,CACJ,UAAA4nC,EACA,SAAAC,CACF,EAAIjlC,EACE6pC,EAAWtoB,EAAOvhB,EAAQ,QAAQ,EAClC4tC,EAASjC,GAAY,KAAM,OAAQ3rC,CAAO,EAC1C6tC,EAAYxH,EAAU,EAAEuH,CAAM,EAC9BE,EAAU9I,EAAY6E,EAAS,YAAcA,EAAS,WAAa7E,GAAa,EAAI,EACpF+I,EAASP,EAAG,EAAIM,EACtB,GAAI9tC,EAAQ,cAAe,CACzB,IAAM4mC,EAAc,CAClB,OAAQ,KAAK,IAAI3B,EAAUD,CAAS,EAAI,EACxC,WAAY2I,EAAgB,WAC5B,SAAUA,EAAgB,SAC1B,YAAa,CACf,EACM57B,EAAUs0B,EAAU,WAAWwH,EAAW5I,CAAQ,EAAIA,EAAW,EACjEjzB,EAAU+7B,EAAS/I,EAAY,EACrCn9B,EAAI,YAAc7H,EAAQ,mBAC1B6H,EAAI,UAAY7H,EAAQ,mBACxB67B,GAAUh0B,EAAK++B,EAAa70B,EAASC,CAAO,EAC5CnK,EAAI,YAAc6lC,EAAW,YAC7B7lC,EAAI,UAAY6lC,EAAW,gBAC3B7R,GAAUh0B,EAAK++B,EAAa70B,EAASC,CAAO,CAC9C,KAAO,CACLnK,EAAI,UAAYtI,EAASmuC,EAAW,WAAW,EAAI,KAAK,IAAI,GAAG,OAAO,OAAOA,EAAW,WAAW,CAAC,EAAIA,EAAW,aAAe,EAClI7lC,EAAI,YAAc6lC,EAAW,YAC7B7lC,EAAI,YAAY6lC,EAAW,YAAc,CAAC,CAAC,EAC3C7lC,EAAI,eAAiB6lC,EAAW,kBAAoB,EACpD,IAAMM,EAAS3H,EAAU,WAAWwH,EAAW5I,CAAQ,EACjDgJ,EAAS5H,EAAU,WAAWA,EAAU,MAAMwH,EAAW,CAAC,EAAG5I,EAAW,CAAC,EACzEx0B,EAAe+rB,GAAckR,EAAW,YAAY,EACtD,OAAO,OAAOj9B,CAAY,EAAE,KAAKvE,GAAKA,IAAM,CAAC,GAC/CrE,EAAI,UAAU,EACdA,EAAI,UAAY7H,EAAQ,mBACxBy9B,GAAmB51B,EAAK,CACtB,EAAGmmC,EACH,EAAGD,EACH,EAAG9I,EACH,EAAGD,EACH,OAAQv0B,CACV,CAAC,EACD5I,EAAI,KAAK,EACTA,EAAI,OAAO,EACXA,EAAI,UAAY6lC,EAAW,gBAC3B7lC,EAAI,UAAU,EACd41B,GAAmB51B,EAAK,CACtB,EAAGomC,EACH,EAAGF,EAAS,EACZ,EAAG9I,EAAW,EACd,EAAGD,EAAY,EACf,OAAQv0B,CACV,CAAC,EACD5I,EAAI,KAAK,IAETA,EAAI,UAAY7H,EAAQ,mBACxB6H,EAAI,SAASmmC,EAAQD,EAAQ9I,EAAUD,CAAS,EAChDn9B,EAAI,WAAWmmC,EAAQD,EAAQ9I,EAAUD,CAAS,EAClDn9B,EAAI,UAAY6lC,EAAW,gBAC3B7lC,EAAI,SAASomC,EAAQF,EAAS,EAAG9I,EAAW,EAAGD,EAAY,CAAC,EAEhE,CACAn9B,EAAI,UAAY,KAAK,gBAAgBzK,CAAC,CACxC,CACA,SAASowC,EAAI3lC,EAAK7H,EAAS,CACzB,GAAM,CACJ,KAAA2pC,CACF,EAAI,KACE,CACJ,YAAAuE,EACA,UAAAC,EACA,cAAAC,EACA,UAAApJ,EACA,SAAAC,EACA,WAAAjsB,CACF,EAAIhZ,EACE6pC,EAAWtoB,EAAOvhB,EAAQ,QAAQ,EACpCoqC,EAAiBP,EAAS,WAC1BwE,EAAe,EACbhI,EAAYC,GAActmC,EAAQ,IAAK,KAAK,EAAG,KAAK,KAAK,EACzDsuC,EAAiB,SAAU97B,EAAM,CACrC3K,EAAI,SAAS2K,EAAM6zB,EAAU,EAAEmH,EAAG,EAAIa,CAAY,EAAGb,EAAG,EAAIpD,EAAiB,CAAC,EAC9EoD,EAAG,GAAKpD,EAAiB8D,CAC3B,EACMK,EAA0BlI,EAAU,UAAU8H,CAAS,EACzDhE,EAAUqE,EAAWhC,EAAOpvC,EAAGoY,EAAGzT,EAAMwjB,EAQ5C,IAPA1d,EAAI,UAAYsmC,EAChBtmC,EAAI,aAAe,SACnBA,EAAI,KAAOgiC,EAAS,OACpB2D,EAAG,EAAI7B,GAAY,KAAM4C,EAAyBvuC,CAAO,EACzD6H,EAAI,UAAY7H,EAAQ,UACxBib,EAAK,KAAK,WAAYqzB,CAAc,EACpCD,EAAeD,GAAiBG,IAA4B,QAAUJ,IAAc,SAAWlJ,EAAW,EAAIjsB,EAAaisB,EAAW,EAAIjsB,EAAa,EAClJ5b,EAAI,EAAG2E,EAAO4nC,EAAK,OAAQvsC,EAAI2E,EAAM,EAAE3E,EAAG,CAU7C,IATA+sC,EAAWR,EAAKvsC,CAAC,EACjBoxC,EAAY,KAAK,gBAAgBpxC,CAAC,EAClCyK,EAAI,UAAY2mC,EAChBvzB,EAAKkvB,EAAS,OAAQmE,CAAc,EACpC9B,EAAQrC,EAAS,MACbiE,GAAiB5B,EAAM,SACzB,KAAK,cAAc3kC,EAAK2lC,EAAIpwC,EAAGipC,EAAWrmC,CAAO,EACjDoqC,EAAiB,KAAK,IAAIP,EAAS,WAAY7E,CAAS,GAErDxvB,EAAI,EAAG+P,EAAOinB,EAAM,OAAQh3B,EAAI+P,EAAM,EAAE/P,EAC3C84B,EAAe9B,EAAMh3B,CAAC,CAAC,EACvB40B,EAAiBP,EAAS,WAE5B5uB,EAAKkvB,EAAS,MAAOmE,CAAc,CACrC,CACAD,EAAe,EACfjE,EAAiBP,EAAS,WAC1B5uB,EAAK,KAAK,UAAWqzB,CAAc,EACnCd,EAAG,GAAKU,CACV,CACA,WAAWV,EAAI3lC,EAAK7H,EAAS,CAC3B,IAAM4pC,EAAS,KAAK,OACdl8B,EAASk8B,EAAO,OAClBE,EAAY1sC,EAChB,GAAIsQ,EAAQ,CACV,IAAM24B,EAAYC,GAActmC,EAAQ,IAAK,KAAK,EAAG,KAAK,KAAK,EAQ/D,IAPAwtC,EAAG,EAAI7B,GAAY,KAAM3rC,EAAQ,YAAaA,CAAO,EACrDwtC,EAAG,GAAKxtC,EAAQ,gBAChB6H,EAAI,UAAYw+B,EAAU,UAAUrmC,EAAQ,WAAW,EACvD6H,EAAI,aAAe,SACnBiiC,EAAavoB,EAAOvhB,EAAQ,UAAU,EACtC6H,EAAI,UAAY7H,EAAQ,YACxB6H,EAAI,KAAOiiC,EAAW,OACjB1sC,EAAI,EAAGA,EAAIsQ,EAAQ,EAAEtQ,EACxByK,EAAI,SAAS+hC,EAAOxsC,CAAC,EAAGipC,EAAU,EAAEmH,EAAG,CAAC,EAAGA,EAAG,EAAI1D,EAAW,WAAa,CAAC,EAC3E0D,EAAG,GAAK1D,EAAW,WAAa9pC,EAAQ,aAE5C,CACF,CACA,eAAewtC,EAAI3lC,EAAK4mC,EAAazuC,EAAS,CAC5C,GAAM,CACJ,OAAAyqC,EACA,OAAAG,CACF,EAAI,KACE,CACJ,EAAAvpC,EACA,EAAAC,CACF,EAAIksC,EACE,CACJ,MAAApzB,EACA,OAAAC,CACF,EAAIo0B,EACE,CACJ,QAAAlD,EACA,SAAAC,EACA,WAAAC,EACA,YAAAC,CACF,EAAIlP,GAAcx8B,EAAQ,YAAY,EACtC6H,EAAI,UAAY7H,EAAQ,gBACxB6H,EAAI,YAAc7H,EAAQ,YAC1B6H,EAAI,UAAY7H,EAAQ,YACxB6H,EAAI,UAAU,EACdA,EAAI,OAAOxG,EAAIkqC,EAASjqC,CAAC,EACrBspC,IAAW,OACb,KAAK,UAAU4C,EAAI3lC,EAAK4mC,EAAazuC,CAAO,EAE9C6H,EAAI,OAAOxG,EAAI+Y,EAAQoxB,EAAUlqC,CAAC,EAClCuG,EAAI,iBAAiBxG,EAAI+Y,EAAO9Y,EAAGD,EAAI+Y,EAAO9Y,EAAIkqC,CAAQ,EACtDZ,IAAW,UAAYH,IAAW,SACpC,KAAK,UAAU+C,EAAI3lC,EAAK4mC,EAAazuC,CAAO,EAE9C6H,EAAI,OAAOxG,EAAI+Y,EAAO9Y,EAAI+Y,EAASqxB,CAAW,EAC9C7jC,EAAI,iBAAiBxG,EAAI+Y,EAAO9Y,EAAI+Y,EAAQhZ,EAAI+Y,EAAQsxB,EAAapqC,EAAI+Y,CAAM,EAC3EuwB,IAAW,UACb,KAAK,UAAU4C,EAAI3lC,EAAK4mC,EAAazuC,CAAO,EAE9C6H,EAAI,OAAOxG,EAAIoqC,EAAYnqC,EAAI+Y,CAAM,EACrCxS,EAAI,iBAAiBxG,EAAGC,EAAI+Y,EAAQhZ,EAAGC,EAAI+Y,EAASoxB,CAAU,EAC1Db,IAAW,UAAYH,IAAW,QACpC,KAAK,UAAU+C,EAAI3lC,EAAK4mC,EAAazuC,CAAO,EAE9C6H,EAAI,OAAOxG,EAAGC,EAAIiqC,CAAO,EACzB1jC,EAAI,iBAAiBxG,EAAGC,EAAGD,EAAIkqC,EAASjqC,CAAC,EACzCuG,EAAI,UAAU,EACdA,EAAI,KAAK,EACL7H,EAAQ,YAAc,GACxB6H,EAAI,OAAO,CAEf,CACA,uBAAuB7H,EAAS,CAC9B,IAAMtD,EAAQ,KAAK,MACbC,EAAQ,KAAK,YACb+xC,EAAQ/xC,GAASA,EAAM,EACvBgyC,EAAQhyC,GAASA,EAAM,EAC7B,GAAI+xC,GAASC,EAAO,CAClB,IAAMv5B,EAAW0zB,GAAY9oC,EAAQ,QAAQ,EAAE,KAAK,KAAM,KAAK,QAAS,KAAK,cAAc,EAC3F,GAAI,CAACoV,EACH,OAEF,IAAMhL,EAAO,KAAK,MAAQq/B,GAAe,KAAMzpC,CAAO,EAChDgtC,EAAkB,OAAO,OAAO,CAAC,EAAG53B,EAAU,KAAK,KAAK,EACxD+1B,EAAYL,GAAmBpuC,EAAOsD,EAASgtC,CAAe,EAC9Dx+B,EAAQ08B,GAAmBlrC,EAASgtC,EAAiB7B,EAAWzuC,CAAK,GACvEgyC,EAAM,MAAQlgC,EAAM,GAAKmgC,EAAM,MAAQngC,EAAM,KAC/C,KAAK,OAAS28B,EAAU,OACxB,KAAK,OAASA,EAAU,OACxB,KAAK,MAAQ/gC,EAAK,MAClB,KAAK,OAASA,EAAK,OACnB,KAAK,OAASgL,EAAS,EACvB,KAAK,OAASA,EAAS,EACvB,KAAK,mBAAmB,EAAE,OAAO,KAAM5G,CAAK,EAEhD,CACF,CACA,aAAc,CACZ,MAAO,CAAC,CAAC,KAAK,OAChB,CACA,KAAK3G,EAAK,CACR,IAAM7H,EAAU,KAAK,QAAQ,WAAW,KAAK,WAAW,CAAC,EACrD4uC,EAAU,KAAK,QACnB,GAAI,CAACA,EACH,OAEF,KAAK,uBAAuB5uC,CAAO,EACnC,IAAMyuC,EAAc,CAClB,MAAO,KAAK,MACZ,OAAQ,KAAK,MACf,EACMjB,EAAK,CACT,EAAG,KAAK,EACR,EAAG,KAAK,CACV,EACAoB,EAAU,KAAK,IAAIA,CAAO,EAAI,KAAO,EAAIA,EACzC,IAAMj0B,EAAUC,EAAU5a,EAAQ,OAAO,EACnC6uC,EAAoB,KAAK,MAAM,QAAU,KAAK,WAAW,QAAU,KAAK,KAAK,QAAU,KAAK,UAAU,QAAU,KAAK,OAAO,OAC9H7uC,EAAQ,SAAW6uC,IACrBhnC,EAAI,KAAK,EACTA,EAAI,YAAc+mC,EAClB,KAAK,eAAepB,EAAI3lC,EAAK4mC,EAAazuC,CAAO,EACjDinC,GAAsBp/B,EAAK7H,EAAQ,aAAa,EAChDwtC,EAAG,GAAK7yB,EAAQ,IAChB,KAAK,UAAU6yB,EAAI3lC,EAAK7H,CAAO,EAC/B,KAAK,SAASwtC,EAAI3lC,EAAK7H,CAAO,EAC9B,KAAK,WAAWwtC,EAAI3lC,EAAK7H,CAAO,EAChCunC,GAAqB1/B,EAAK7H,EAAQ,aAAa,EAC/C6H,EAAI,QAAQ,EAEhB,CACA,mBAAoB,CAClB,OAAO,KAAK,SAAW,CAAC,CAC1B,CACA,kBAAkBqsB,EAAgB8U,EAAe,CAC/C,IAAM7U,EAAa,KAAK,QAClBnsB,EAASksB,EAAe,IAAI,CAAC,CACjC,aAAA9xB,EACA,MAAAiC,CACF,IAAM,CACJ,IAAM1B,EAAO,KAAK,MAAM,eAAeP,CAAY,EACnD,GAAI,CAACO,EACH,MAAM,IAAI,MAAM,kCAAoCP,CAAY,EAElE,MAAO,CACL,aAAAA,EACA,QAASO,EAAK,KAAK0B,CAAK,EACxB,MAAAA,CACF,CACF,CAAC,EACK2V,EAAU,CAACoa,GAAeD,EAAYnsB,CAAM,EAC5C8mC,EAAkB,KAAK,iBAAiB9mC,EAAQghC,CAAa,GAC/DhvB,GAAW80B,KACb,KAAK,QAAU9mC,EACf,KAAK,eAAiBghC,EACtB,KAAK,oBAAsB,GAC3B,KAAK,OAAO,EAAI,EAEpB,CACA,YAAYp4B,EAAG0jB,EAAQzD,EAAc,GAAM,CACzC,GAAIyD,GAAU,KAAK,oBACjB,MAAO,GAET,KAAK,oBAAsB,GAC3B,IAAMt0B,EAAU,KAAK,QACfm0B,EAAa,KAAK,SAAW,CAAC,EAC9BnsB,EAAS,KAAK,mBAAmB4I,EAAGujB,EAAYG,EAAQzD,CAAW,EACnEie,EAAkB,KAAK,iBAAiB9mC,EAAQ4I,CAAC,EACjDoJ,EAAUsa,GAAU,CAACF,GAAepsB,EAAQmsB,CAAU,GAAK2a,EACjE,OAAI90B,IACF,KAAK,QAAUhS,GACXhI,EAAQ,SAAWA,EAAQ,YAC7B,KAAK,eAAiB,CACpB,EAAG4Q,EAAE,EACL,EAAGA,EAAE,CACP,EACA,KAAK,OAAO,GAAM0jB,CAAM,IAGrBta,CACT,CACA,mBAAmBpJ,EAAGujB,EAAYG,EAAQzD,EAAa,CACrD,IAAM7wB,EAAU,KAAK,QACrB,GAAI4Q,EAAE,OAAS,WACb,MAAO,CAAC,EAEV,GAAI,CAACigB,EACH,OAAOsD,EAAW,OAAO/2B,GAAK,KAAK,MAAM,KAAK,SAASA,EAAE,YAAY,GAAK,KAAK,MAAM,eAAeA,EAAE,YAAY,EAAE,WAAW,UAAUA,EAAE,KAAK,IAAM,MAAS,EAEjK,IAAM4K,EAAS,KAAK,MAAM,0BAA0B4I,EAAG5Q,EAAQ,KAAMA,EAASs0B,CAAM,EACpF,OAAIt0B,EAAQ,SACVgI,EAAO,QAAQ,EAEVA,CACT,CACA,iBAAiBA,EAAQ4I,EAAG,CAC1B,GAAM,CACJ,OAAAm+B,EACA,OAAAC,EACA,QAAAhvC,CACF,EAAI,KACEoV,EAAW0zB,GAAY9oC,EAAQ,QAAQ,EAAE,KAAK,KAAMgI,EAAQ4I,CAAC,EACnE,OAAOwE,IAAa,KAAU25B,IAAW35B,EAAS,GAAK45B,IAAW55B,EAAS,EAC7E,CACF,CACA,OAAOi3B,CACT,GAAG,EACC4C,GAAiB,CACnB,GAAI,UACJ,SAAU5C,GACV,YAAAvD,GACA,UAAUpsC,EAAO6hC,EAAOv+B,EAAS,CAC3BA,IACFtD,EAAM,QAAU,IAAI2vC,GAAQ,CAC1B,MAAA3vC,EACA,QAAAsD,CACF,CAAC,EAEL,EACA,aAAatD,EAAO6hC,EAAOv+B,EAAS,CAC9BtD,EAAM,SACRA,EAAM,QAAQ,WAAWsD,CAAO,CAEpC,EACA,MAAMtD,EAAO6hC,EAAOv+B,EAAS,CACvBtD,EAAM,SACRA,EAAM,QAAQ,WAAWsD,CAAO,CAEpC,EACA,UAAUtD,EAAO,CACf,IAAMgtC,EAAUhtC,EAAM,QACtB,GAAIgtC,GAAWA,EAAQ,YAAY,EAAG,CACpC,IAAMngC,EAAO,CACX,QAAAmgC,CACF,EACA,GAAIhtC,EAAM,cAAc,oBAAqB2jC,GAAAC,GAAA,GACxC/2B,GADwC,CAE3C,WAAY,EACd,EAAC,IAAM,GACL,OAEFmgC,EAAQ,KAAKhtC,EAAM,GAAG,EACtBA,EAAM,cAAc,mBAAoB6M,CAAI,CAC9C,CACF,EACA,WAAW7M,EAAO6M,EAAM,CACtB,GAAI7M,EAAM,QAAS,CACjB,IAAMuZ,EAAmB1M,EAAK,OAC1B7M,EAAM,QAAQ,YAAY6M,EAAK,MAAO0M,EAAkB1M,EAAK,WAAW,IAC1EA,EAAK,QAAU,GAEnB,CACF,EACA,SAAU,CACR,QAAS,GACT,SAAU,KACV,SAAU,UACV,gBAAiB,kBACjB,WAAY,OACZ,UAAW,CACT,OAAQ,MACV,EACA,aAAc,EACd,kBAAmB,EACnB,WAAY,OACZ,UAAW,OACX,YAAa,EACb,SAAU,CAAC,EACX,UAAW,OACX,YAAa,OACb,cAAe,EACf,gBAAiB,EACjB,WAAY,CACV,OAAQ,MACV,EACA,YAAa,OACb,QAAS,EACT,aAAc,EACd,UAAW,EACX,aAAc,EACd,UAAW,CAAC1B,EAAK/G,IAASA,EAAK,SAAS,KACxC,SAAU,CAAC+G,EAAK/G,IAASA,EAAK,SAAS,KACvC,mBAAoB,OACpB,cAAe,GACf,WAAY,EACZ,YAAa,gBACb,YAAa,EACb,UAAW,CACT,SAAU,IACV,OAAQ,cACV,EACA,WAAY,CACV,QAAS,CACP,KAAM,SACN,WAAY,CAAC,IAAK,IAAK,QAAS,SAAU,SAAU,QAAQ,CAC9D,EACA,QAAS,CACP,OAAQ,SACR,SAAU,GACZ,CACF,EACA,UAAWkrC,EACb,EACA,cAAe,CACb,SAAU,OACV,WAAY,OACZ,UAAW,MACb,EACA,YAAa,CACX,YAAa3+B,GAAQA,IAAS,UAAYA,IAAS,YAAcA,IAAS,WAC1E,WAAY,GACZ,UAAW,CACT,YAAa,GACb,WAAY,EACd,EACA,UAAW,CACT,UAAW,EACb,EACA,WAAY,CACV,UAAW,WACb,CACF,EACA,uBAAwB,CAAC,aAAa,CACxC,EACI2e,GAAuB,OAAO,OAAO,CACvC,UAAW,KACX,OAAQsS,GACR,WAAYqC,GACZ,OAAQt8B,GACR,OAAQ8jC,GACR,SAAUU,GACV,MAAOH,GACP,QAASuG,EACX,CAAC,EACKC,GAAc,CAACjoC,EAAQmb,EAAK/d,EAAO8qC,KACnC,OAAO/sB,GAAQ,UACjB/d,EAAQ4C,EAAO,KAAKmb,CAAG,EAAI,EAC3B+sB,EAAY,QAAQ,CAClB,MAAA9qC,EACA,MAAO+d,CACT,CAAC,GACQ,MAAMA,CAAG,IAClB/d,EAAQ,MAEHA,GAET,SAAS+qC,GAAenoC,EAAQmb,EAAK/d,EAAO8qC,EAAa,CACvD,IAAMpwB,EAAQ9X,EAAO,QAAQmb,CAAG,EAChC,GAAIrD,IAAU,GACZ,OAAOmwB,GAAYjoC,EAAQmb,EAAK/d,EAAO8qC,CAAW,EAEpD,IAAMtiC,EAAO5F,EAAO,YAAYmb,CAAG,EACnC,OAAOrD,IAAUlS,EAAOxI,EAAQ0a,CAClC,CACA,IAAM6B,GAAa,CAACvc,EAAOpD,IAAQoD,IAAU,KAAO,KAAOuf,EAAY,KAAK,MAAMvf,CAAK,EAAG,EAAGpD,CAAG,EAChG,SAASouC,GAAkB/uC,EAAO,CAChC,IAAM2G,EAAS,KAAK,UAAU,EAC9B,OAAI3G,GAAS,GAAKA,EAAQ2G,EAAO,OACxBA,EAAO3G,CAAK,EAEdA,CACT,CACA,IAAIgvC,IAA8B,IAAM,CACtC,MAAMA,UAAsBptB,EAAM,CAChC,OAAO,GAAK,WACZ,OAAO,SAAW,CAChB,MAAO,CACL,SAAUmtB,EACZ,CACF,EACA,YAAY/wC,EAAK,CACf,MAAMA,CAAG,EACT,KAAK,YAAc,OACnB,KAAK,YAAc,EACnB,KAAK,aAAe,CAAC,CACvB,CACA,KAAKyuB,EAAc,CACjB,IAAMwiB,EAAQ,KAAK,aACnB,GAAIA,EAAM,OAAQ,CAChB,IAAMtoC,EAAS,KAAK,UAAU,EAC9B,OAAW,CACT,MAAA5C,EACA,MAAAqM,CACF,IAAK6+B,EACCtoC,EAAO5C,CAAK,IAAMqM,GACpBzJ,EAAO,OAAO5C,EAAO,CAAC,EAG1B,KAAK,aAAe,CAAC,CACvB,CACA,MAAM,KAAK0oB,CAAY,CACzB,CACA,MAAM3K,EAAK/d,EAAO,CAChB,GAAIiG,EAAc8X,CAAG,EACnB,OAAO,KAET,IAAMnb,EAAS,KAAK,UAAU,EAC9B,OAAA5C,EAAQ,SAASA,CAAK,GAAK4C,EAAO5C,CAAK,IAAM+d,EAAM/d,EAAQ+qC,GAAenoC,EAAQmb,EAAKxc,EAAevB,EAAO+d,CAAG,EAAG,KAAK,YAAY,EAC7HxB,GAAWvc,EAAO4C,EAAO,OAAS,CAAC,CAC5C,CACA,qBAAsB,CACpB,GAAM,CACJ,WAAA1D,EACA,WAAAC,CACF,EAAI,KAAK,cAAc,EACnB,CACF,IAAAxC,EACA,IAAAC,CACF,EAAI,KAAK,UAAU,EAAI,EACnB,KAAK,QAAQ,SAAW,UACrBsC,IACHvC,EAAM,GAEHwC,IACHvC,EAAM,KAAK,UAAU,EAAE,OAAS,IAGpC,KAAK,IAAMD,EACX,KAAK,IAAMC,CACb,CACA,YAAa,CACX,IAAMD,EAAM,KAAK,IACXC,EAAM,KAAK,IACXoe,EAAS,KAAK,QAAQ,OACtBd,EAAQ,CAAC,EACXtX,EAAS,KAAK,UAAU,EAC5BA,EAASjG,IAAQ,GAAKC,IAAQgG,EAAO,OAAS,EAAIA,EAASA,EAAO,MAAMjG,EAAKC,EAAM,CAAC,EACpF,KAAK,YAAc,KAAK,IAAIgG,EAAO,QAAUoY,EAAS,EAAI,GAAI,CAAC,EAC/D,KAAK,YAAc,KAAK,KAAOA,EAAS,GAAM,GAC9C,QAAS/e,EAAQU,EAAKV,GAASW,EAAKX,IAClCie,EAAM,KAAK,CACT,MAAAje,CACF,CAAC,EAEH,OAAOie,CACT,CACA,iBAAiBje,EAAO,CACtB,OAAO+uC,GAAkB,KAAK,KAAM/uC,CAAK,CAC3C,CACA,WAAY,CACV,MAAM,UAAU,EACX,KAAK,aAAa,IACrB,KAAK,eAAiB,CAAC,KAAK,eAEhC,CACA,iBAAiBA,EAAO,CACtB,OAAI,OAAOA,GAAU,WACnBA,EAAQ,KAAK,MAAMA,CAAK,GAEnBA,IAAU,KAAO,IAAM,KAAK,oBAAoBA,EAAQ,KAAK,aAAe,KAAK,WAAW,CACrG,CACA,gBAAgB+D,EAAO,CACrB,IAAMka,EAAQ,KAAK,MACnB,OAAIla,EAAQ,GAAKA,EAAQka,EAAM,OAAS,EAC/B,KAEF,KAAK,iBAAiBA,EAAMla,CAAK,EAAE,KAAK,CACjD,CACA,iBAAiB0hB,EAAO,CACtB,OAAO,KAAK,MAAM,KAAK,YAAc,KAAK,mBAAmBA,CAAK,EAAI,KAAK,WAAW,CACxF,CACA,cAAe,CACb,OAAO,KAAK,MACd,CACF,CACA,OAAOupB,CACT,GAAG,EACH,SAASE,GAAgBC,EAAmBC,EAAW,CACrD,IAAMnxB,EAAQ,CAAC,EAET,CACJ,OAAAqe,EACA,KAAArV,EACA,IAAAvmB,EACA,IAAAC,EACA,UAAA0uC,EACA,MAAA/oC,EACA,SAAAgpC,EACA,UAAAC,EACA,cAAAC,CACF,EAAIL,EACEM,EAAOxoB,GAAQ,EACfyoB,EAAYJ,EAAW,EACvB,CACJ,IAAKK,EACL,IAAKC,CACP,EAAIR,EACEnsC,EAAa,CAAC+G,EAActJ,CAAG,EAC/BwC,EAAa,CAAC8G,EAAcrJ,CAAG,EAC/BkvC,EAAe,CAAC7lC,EAAc1D,CAAK,EACnCwpC,GAAcF,EAAOD,IAASJ,EAAY,GAC5C1+B,EAAUk/B,IAASH,EAAOD,GAAQD,EAAYD,CAAI,EAAIA,EACtD9xC,EAAQqyC,EAASC,EAASC,EAC9B,GAAIr/B,EAAU,OAAe,CAAC5N,GAAc,CAACC,EAC3C,MAAO,CAAC,CACN,MAAOysC,CACT,EAAG,CACD,MAAOC,CACT,CAAC,EAEHM,EAAY,KAAK,KAAKN,EAAO/+B,CAAO,EAAI,KAAK,MAAM8+B,EAAO9+B,CAAO,EAC7Dq/B,EAAYR,IACd7+B,EAAUk/B,GAAQG,EAAYr/B,EAAU6+B,EAAYD,CAAI,EAAIA,GAEzDzlC,EAAcqlC,CAAS,IAC1B1xC,EAAS,KAAK,IAAI,GAAI0xC,CAAS,EAC/Bx+B,EAAU,KAAK,KAAKA,EAAUlT,CAAM,EAAIA,GAEtC2+B,IAAW,SACb0T,EAAU,KAAK,MAAML,EAAO9+B,CAAO,EAAIA,EACvCo/B,EAAU,KAAK,KAAKL,EAAO/+B,CAAO,EAAIA,IAEtCm/B,EAAUL,EACVM,EAAUL,GAER3sC,GAAcC,GAAc+jB,GAAQkpB,IAAaxvC,EAAMD,GAAOumB,EAAMpW,EAAU,GAAI,GACpFq/B,EAAY,KAAK,MAAM,KAAK,KAAKvvC,EAAMD,GAAOmQ,EAASy+B,CAAQ,CAAC,EAChEz+B,GAAWlQ,EAAMD,GAAOwvC,EACxBF,EAAUtvC,EACVuvC,EAAUtvC,GACDkvC,GACTG,EAAU/sC,EAAavC,EAAMsvC,EAC7BC,EAAU/sC,EAAavC,EAAMsvC,EAC7BC,EAAY5pC,EAAQ,EACpBuK,GAAWo/B,EAAUD,GAAWE,IAEhCA,GAAaD,EAAUD,GAAWn/B,EAC9Bu/B,GAAaF,EAAW,KAAK,MAAMA,CAAS,EAAGr/B,EAAU,GAAI,EAC/Dq/B,EAAY,KAAK,MAAMA,CAAS,EAEhCA,EAAY,KAAK,KAAKA,CAAS,GAGnC,IAAMG,EAAgB,KAAK,IAAIC,GAAez/B,CAAO,EAAGy/B,GAAeN,CAAO,CAAC,EAC/EryC,EAAS,KAAK,IAAI,GAAIqM,EAAcqlC,CAAS,EAAIgB,EAAgBhB,CAAS,EAC1EW,EAAU,KAAK,MAAMA,EAAUryC,CAAM,EAAIA,EACzCsyC,EAAU,KAAK,MAAMA,EAAUtyC,CAAM,EAAIA,EACzC,IAAIuX,EAAI,EAgBR,IAfIjS,IACEusC,GAAiBQ,IAAYtvC,GAC/Bud,EAAM,KAAK,CACT,MAAOvd,CACT,CAAC,EACGsvC,EAAUtvC,GACZwU,IAEEk7B,GAAa,KAAK,OAAOJ,EAAU96B,EAAIrE,GAAWlT,CAAM,EAAIA,EAAQ+C,EAAK6vC,GAAkB7vC,EAAKovC,EAAYX,CAAiB,CAAC,GAChIj6B,KAEO86B,EAAUtvC,GACnBwU,KAGGA,EAAIg7B,EAAW,EAAEh7B,EAAG,CACzB,IAAMs7B,EAAY,KAAK,OAAOR,EAAU96B,EAAIrE,GAAWlT,CAAM,EAAIA,EACjE,GAAIuF,GAAcstC,EAAY7vC,EAC5B,MAEFsd,EAAM,KAAK,CACT,MAAOuyB,CACT,CAAC,CACH,CACA,OAAIttC,GAAcssC,GAAiBS,IAAYtvC,EACzCsd,EAAM,QAAUmyB,GAAanyB,EAAMA,EAAM,OAAS,CAAC,EAAE,MAAOtd,EAAK4vC,GAAkB5vC,EAAKmvC,EAAYX,CAAiB,CAAC,EACxHlxB,EAAMA,EAAM,OAAS,CAAC,EAAE,MAAQtd,EAEhCsd,EAAM,KAAK,CACT,MAAOtd,CACT,CAAC,GAEM,CAACuC,GAAc+sC,IAAYtvC,IACpCsd,EAAM,KAAK,CACT,MAAOgyB,CACT,CAAC,EAEIhyB,CACT,CACA,SAASsyB,GAAkBvwC,EAAO8vC,EAAY,CAC5C,WAAA1jC,EACA,YAAA0W,CACF,EAAG,CACD,IAAM2tB,EAAM//B,GAAUoS,CAAW,EAC3B/Y,GAASqC,EAAa,KAAK,IAAIqkC,CAAG,EAAI,KAAK,IAAIA,CAAG,IAAM,KACxDrjC,EAAS,IAAO0iC,GAAc,GAAK9vC,GAAO,OAChD,OAAO,KAAK,IAAI8vC,EAAa/lC,EAAOqD,CAAM,CAC5C,CACA,IAAMsjC,GAAN,cAA8B9uB,EAAM,CAClC,YAAY5jB,EAAK,CACf,MAAMA,CAAG,EACT,KAAK,MAAQ,OACb,KAAK,IAAM,OACX,KAAK,YAAc,OACnB,KAAK,UAAY,OACjB,KAAK,YAAc,CACrB,CACA,MAAM8jB,EAAK/d,EAAO,CAIhB,OAHIiG,EAAc8X,CAAG,IAGhB,OAAOA,GAAQ,UAAYA,aAAe,SAAW,CAAC,SAAS,CAACA,CAAG,EAC/D,KAEF,CAACA,CACV,CACA,wBAAyB,CACvB,GAAM,CACJ,YAAAS,CACF,EAAI,KAAK,QACH,CACJ,WAAAtf,EACA,WAAAC,CACF,EAAI,KAAK,cAAc,EACnB,CACF,IAAAxC,EACA,IAAAC,CACF,EAAI,KACEgwC,EAAS/kC,GAAKlL,EAAMuC,EAAavC,EAAMkL,EACvCglC,EAAShlC,GAAKjL,EAAMuC,EAAavC,EAAMiL,EAC7C,GAAI2W,EAAa,CACf,IAAMsuB,EAAU3uC,GAAKxB,CAAG,EAClBowC,EAAU5uC,GAAKvB,CAAG,EACpBkwC,EAAU,GAAKC,EAAU,EAC3BF,EAAO,CAAC,EACCC,EAAU,GAAKC,EAAU,GAClCH,EAAO,CAAC,CAEZ,CACA,GAAIjwC,IAAQC,EAAK,CACf,IAAIoe,EAASpe,IAAQ,EAAI,EAAI,KAAK,IAAIA,EAAM,GAAI,EAChDiwC,EAAOjwC,EAAMoe,CAAM,EACdwD,GACHouB,EAAOjwC,EAAMqe,CAAM,CAEvB,CACA,KAAK,IAAMre,EACX,KAAK,IAAMC,CACb,CACA,cAAe,CACb,IAAMud,EAAW,KAAK,QAAQ,MAC1B,CACF,cAAA8B,EACA,SAAA+wB,CACF,EAAI7yB,EACAoxB,EACJ,OAAIyB,GACFzB,EAAW,KAAK,KAAK,KAAK,IAAMyB,CAAQ,EAAI,KAAK,MAAM,KAAK,IAAMA,CAAQ,EAAI,EAC1EzB,EAAW,MACb,QAAQ,KAAK,UAAU,KAAK,EAAE,oBAAoByB,CAAQ,kCAAkCzB,CAAQ,2BAA2B,EAC/HA,EAAW,OAGbA,EAAW,KAAK,iBAAiB,EACjCtvB,EAAgBA,GAAiB,IAE/BA,IACFsvB,EAAW,KAAK,IAAItvB,EAAesvB,CAAQ,GAEtCA,CACT,CACA,kBAAmB,CACjB,OAAO,OAAO,iBAChB,CACA,YAAa,CACX,IAAM9uC,EAAO,KAAK,QACZ0d,EAAW1d,EAAK,MAClB8uC,EAAW,KAAK,aAAa,EACjCA,EAAW,KAAK,IAAI,EAAGA,CAAQ,EAC/B,IAAM0B,EAA0B,CAC9B,SAAA1B,EACA,OAAQ9uC,EAAK,OACb,IAAKA,EAAK,IACV,IAAKA,EAAK,IACV,UAAW0d,EAAS,UACpB,KAAMA,EAAS,SACf,MAAOA,EAAS,MAChB,UAAW,KAAK,WAAW,EAC3B,WAAY,KAAK,aAAa,EAC9B,YAAaA,EAAS,aAAe,EACrC,cAAeA,EAAS,gBAAkB,EAC5C,EACMkxB,EAAY,KAAK,QAAU,KAC3BnxB,EAAQixB,GAAgB8B,EAAyB5B,CAAS,EAChE,OAAI5uC,EAAK,SAAW,SAClBywC,GAAmBhzB,EAAO,KAAM,OAAO,EAErCzd,EAAK,SACPyd,EAAM,QAAQ,EACd,KAAK,MAAQ,KAAK,IAClB,KAAK,IAAM,KAAK,MAEhB,KAAK,MAAQ,KAAK,IAClB,KAAK,IAAM,KAAK,KAEXA,CACT,CACA,WAAY,CACV,IAAMA,EAAQ,KAAK,MACf5X,EAAQ,KAAK,IACbwC,EAAM,KAAK,IAEf,GADA,MAAM,UAAU,EACZ,KAAK,QAAQ,QAAUoV,EAAM,OAAQ,CACvC,IAAMc,GAAUlW,EAAMxC,GAAS,KAAK,IAAI4X,EAAM,OAAS,EAAG,CAAC,EAAI,EAC/D5X,GAAS0Y,EACTlW,GAAOkW,CACT,CACA,KAAK,YAAc1Y,EACnB,KAAK,UAAYwC,EACjB,KAAK,YAAcA,EAAMxC,CAC3B,CACA,iBAAiBrG,EAAO,CACtB,OAAO+R,GAAa/R,EAAO,KAAK,MAAM,QAAQ,OAAQ,KAAK,QAAQ,MAAM,MAAM,CACjF,CACF,EACMkxC,GAAN,cAA0BR,EAAgB,CACxC,OAAO,GAAK,SACZ,OAAO,SAAW,CAChB,MAAO,CACL,SAAUS,GAAM,WAAW,OAC7B,CACF,EACA,qBAAsB,CACpB,GAAM,CACJ,IAAAzwC,EACA,IAAAC,CACF,EAAI,KAAK,UAAU,EAAI,EACvB,KAAK,IAAMsB,EAAevB,CAAG,EAAIA,EAAM,EACvC,KAAK,IAAMuB,EAAetB,CAAG,EAAIA,EAAM,EACvC,KAAK,uBAAuB,CAC9B,CACA,kBAAmB,CACjB,IAAMyL,EAAa,KAAK,aAAa,EAC/BgB,EAAShB,EAAa,KAAK,MAAQ,KAAK,OACxC0W,EAAcpS,GAAU,KAAK,QAAQ,MAAM,WAAW,EACtD3G,GAASqC,EAAa,KAAK,IAAI0W,CAAW,EAAI,KAAK,IAAIA,CAAW,IAAM,KACxEoC,EAAW,KAAK,wBAAwB,CAAC,EAC/C,OAAO,KAAK,KAAK9X,EAAS,KAAK,IAAI,GAAI8X,EAAS,WAAanb,CAAK,CAAC,CACrE,CACA,iBAAiB/J,EAAO,CACtB,OAAOA,IAAU,KAAO,IAAM,KAAK,oBAAoBA,EAAQ,KAAK,aAAe,KAAK,WAAW,CACrG,CACA,iBAAiBylB,EAAO,CACtB,OAAO,KAAK,YAAc,KAAK,mBAAmBA,CAAK,EAAI,KAAK,WAClE,CACF,EACM2rB,GAAaxlC,GAAK,KAAK,MAAMylC,GAAMzlC,CAAC,CAAC,EACrC0lC,GAAiB,CAAC1lC,EAAG2lC,IAAM,KAAK,IAAI,GAAIH,GAAWxlC,CAAC,EAAI2lC,CAAC,EAC/D,SAASC,GAAQC,EAAS,CAExB,OADeA,EAAU,KAAK,IAAI,GAAIL,GAAWK,CAAO,CAAC,IACvC,CACpB,CACA,SAASC,GAAMhxC,EAAKC,EAAKgxC,EAAU,CACjC,IAAMC,EAAY,KAAK,IAAI,GAAID,CAAQ,EACjCtrC,EAAQ,KAAK,MAAM3F,EAAMkxC,CAAS,EAExC,OADY,KAAK,KAAKjxC,EAAMixC,CAAS,EACxBvrC,CACf,CACA,SAASwrC,GAASnxC,EAAKC,EAAK,CAC1B,IAAMqG,EAAQrG,EAAMD,EAChBixC,EAAWP,GAAWpqC,CAAK,EAC/B,KAAO0qC,GAAMhxC,EAAKC,EAAKgxC,CAAQ,EAAI,IACjCA,IAEF,KAAOD,GAAMhxC,EAAKC,EAAKgxC,CAAQ,EAAI,IACjCA,IAEF,OAAO,KAAK,IAAIA,EAAUP,GAAW1wC,CAAG,CAAC,CAC3C,CACA,SAASoxC,GAAc3C,EAAmB,CACxC,IAAAzuC,EACA,IAAAC,CACF,EAAG,CACDD,EAAMyhB,EAAgBgtB,EAAkB,IAAKzuC,CAAG,EAChD,IAAMud,EAAQ,CAAC,EACT8zB,EAASX,GAAW1wC,CAAG,EACzBsxC,EAAMH,GAASnxC,EAAKC,CAAG,EACvB0uC,EAAY2C,EAAM,EAAI,KAAK,IAAI,GAAI,KAAK,IAAIA,CAAG,CAAC,EAAI,EAClDjB,EAAW,KAAK,IAAI,GAAIiB,CAAG,EAC3B7lC,EAAO4lC,EAASC,EAAM,KAAK,IAAI,GAAID,CAAM,EAAI,EAC7C1rC,EAAQ,KAAK,OAAO3F,EAAMyL,GAAQkjC,CAAS,EAAIA,EAC/CtwB,EAAS,KAAK,OAAOre,EAAMyL,GAAQ4kC,EAAW,EAAE,EAAIA,EAAW,GACjEkB,EAAc,KAAK,OAAO5rC,EAAQ0Y,GAAU,KAAK,IAAI,GAAIizB,CAAG,CAAC,EAC7DhyC,EAAQmiB,EAAgBgtB,EAAkB,IAAK,KAAK,OAAOhjC,EAAO4S,EAASkzB,EAAc,KAAK,IAAI,GAAID,CAAG,GAAK3C,CAAS,EAAIA,CAAS,EACxI,KAAOrvC,EAAQW,GACbsd,EAAM,KAAK,CACT,MAAAje,EACA,MAAOwxC,GAAQxxC,CAAK,EACpB,YAAAiyC,CACF,CAAC,EACGA,GAAe,GACjBA,EAAcA,EAAc,GAAK,GAAK,GAEtCA,IAEEA,GAAe,KACjBD,IACAC,EAAc,EACd5C,EAAY2C,GAAO,EAAI,EAAI3C,GAE7BrvC,EAAQ,KAAK,OAAOmM,EAAO4S,EAASkzB,EAAc,KAAK,IAAI,GAAID,CAAG,GAAK3C,CAAS,EAAIA,EAEtF,IAAM6C,EAAW/vB,EAAgBgtB,EAAkB,IAAKnvC,CAAK,EAC7D,OAAAie,EAAM,KAAK,CACT,MAAOi0B,EACP,MAAOV,GAAQU,CAAQ,EACvB,YAAAD,CACF,CAAC,EACMh0B,CACT,CACA,IAAMk0B,GAAN,cAA+BvwB,EAAM,CACnC,OAAO,GAAK,cACZ,OAAO,SAAW,CAChB,MAAO,CACL,SAAUuvB,GAAM,WAAW,YAC3B,MAAO,CACL,QAAS,EACX,CACF,CACF,EACA,YAAYnzC,EAAK,CACf,MAAMA,CAAG,EACT,KAAK,MAAQ,OACb,KAAK,IAAM,OACX,KAAK,YAAc,OACnB,KAAK,YAAc,CACrB,CACA,MAAM8jB,EAAK/d,EAAO,CAChB,IAAM/D,EAAQ0wC,GAAgB,UAAU,MAAM,MAAM,KAAM,CAAC5uB,EAAK/d,CAAK,CAAC,EACtE,GAAI/D,IAAU,EAAG,CACf,KAAK,MAAQ,GACb,MACF,CACA,OAAOiC,EAAejC,CAAK,GAAKA,EAAQ,EAAIA,EAAQ,IACtD,CACA,qBAAsB,CACpB,GAAM,CACJ,IAAAU,EACA,IAAAC,CACF,EAAI,KAAK,UAAU,EAAI,EACvB,KAAK,IAAMsB,EAAevB,CAAG,EAAI,KAAK,IAAI,EAAGA,CAAG,EAAI,KACpD,KAAK,IAAMuB,EAAetB,CAAG,EAAI,KAAK,IAAI,EAAGA,CAAG,EAAI,KAChD,KAAK,QAAQ,cACf,KAAK,MAAQ,IAEX,KAAK,OAAS,KAAK,MAAQ,KAAK,eAAiB,CAACsB,EAAe,KAAK,QAAQ,IAChF,KAAK,IAAMvB,IAAQ4wC,GAAe,KAAK,IAAK,CAAC,EAAIA,GAAe,KAAK,IAAK,EAAE,EAAIA,GAAe,KAAK,IAAK,CAAC,GAE5G,KAAK,uBAAuB,CAC9B,CACA,wBAAyB,CACvB,GAAM,CACJ,WAAAruC,EACA,WAAAC,CACF,EAAI,KAAK,cAAc,EACnBxC,EAAM,KAAK,IACXC,EAAM,KAAK,IACTgwC,EAAS/kC,GAAKlL,EAAMuC,EAAavC,EAAMkL,EACvCglC,EAAShlC,GAAKjL,EAAMuC,EAAavC,EAAMiL,EACzClL,IAAQC,IACND,GAAO,GACTiwC,EAAO,CAAC,EACRC,EAAO,EAAE,IAETD,EAAOW,GAAe5wC,EAAK,EAAE,CAAC,EAC9BkwC,EAAOU,GAAe3wC,EAAK,CAAE,CAAC,IAG9BD,GAAO,GACTiwC,EAAOW,GAAe3wC,EAAK,EAAE,CAAC,EAE5BA,GAAO,GACTiwC,EAAOU,GAAe5wC,EAAK,CAAE,CAAC,EAEhC,KAAK,IAAMA,EACX,KAAK,IAAMC,CACb,CACA,YAAa,CACX,IAAMH,EAAO,KAAK,QACZ2uC,EAAoB,CACxB,IAAK,KAAK,SACV,IAAK,KAAK,QACZ,EACMlxB,EAAQ6zB,GAAc3C,EAAmB,IAAI,EACnD,OAAI3uC,EAAK,SAAW,SAClBywC,GAAmBhzB,EAAO,KAAM,OAAO,EAErCzd,EAAK,SACPyd,EAAM,QAAQ,EACd,KAAK,MAAQ,KAAK,IAClB,KAAK,IAAM,KAAK,MAEhB,KAAK,MAAQ,KAAK,IAClB,KAAK,IAAM,KAAK,KAEXA,CACT,CACA,iBAAiBje,EAAO,CACtB,OAAOA,IAAU,OAAY,IAAM+R,GAAa/R,EAAO,KAAK,MAAM,QAAQ,OAAQ,KAAK,QAAQ,MAAM,MAAM,CAC7G,CACA,WAAY,CACV,IAAMqG,EAAQ,KAAK,IACnB,MAAM,UAAU,EAChB,KAAK,YAAcgrC,GAAMhrC,CAAK,EAC9B,KAAK,YAAcgrC,GAAM,KAAK,GAAG,EAAIA,GAAMhrC,CAAK,CAClD,CACA,iBAAiBrG,EAAO,CAItB,OAHIA,IAAU,QAAaA,IAAU,KACnCA,EAAQ,KAAK,KAEXA,IAAU,MAAQ,MAAMA,CAAK,EACxB,IAEF,KAAK,mBAAmBA,IAAU,KAAK,IAAM,GAAKqxC,GAAMrxC,CAAK,EAAI,KAAK,aAAe,KAAK,WAAW,CAC9G,CACA,iBAAiBylB,EAAO,CACtB,IAAMC,EAAU,KAAK,mBAAmBD,CAAK,EAC7C,OAAO,KAAK,IAAI,GAAI,KAAK,YAAcC,EAAU,KAAK,WAAW,CACnE,CACF,EACA,SAAS0sB,GAAsB5xC,EAAM,CACnC,IAAM0d,EAAW1d,EAAK,MACtB,GAAI0d,EAAS,SAAW1d,EAAK,QAAS,CACpC,IAAM6Z,EAAUC,EAAU4D,EAAS,eAAe,EAClD,OAAO5Y,EAAe4Y,EAAS,MAAQA,EAAS,KAAK,KAAM/e,EAAS,KAAK,IAAI,EAAIkb,EAAQ,MAC3F,CACA,MAAO,EACT,CACA,SAASg4B,GAAiB9qC,EAAKyZ,EAAM5Q,EAAO,CAC1C,OAAAA,EAAQ7Q,EAAQ6Q,CAAK,EAAIA,EAAQ,CAACA,CAAK,EAChC,CACL,EAAGkiC,GAAa/qC,EAAKyZ,EAAK,OAAQ5Q,CAAK,EACvC,EAAGA,EAAM,OAAS4Q,EAAK,UACzB,CACF,CACA,SAASuxB,GAAgBjjC,EAAOgI,EAAKxN,EAAMpJ,EAAKC,EAAK,CACnD,OAAI2O,IAAU5O,GAAO4O,IAAU3O,EACtB,CACL,MAAO2W,EAAMxN,EAAO,EACpB,IAAKwN,EAAMxN,EAAO,CACpB,EACSwF,EAAQ5O,GAAO4O,EAAQ3O,EACzB,CACL,MAAO2W,EAAMxN,EACb,IAAKwN,CACP,EAEK,CACL,MAAOA,EACP,IAAKA,EAAMxN,CACb,CACF,CACA,SAAS0oC,GAAmBlyC,EAAO,CACjC,IAAMmL,EAAO,CACX,EAAGnL,EAAM,KAAOA,EAAM,SAAS,KAC/B,EAAGA,EAAM,MAAQA,EAAM,SAAS,MAChC,EAAGA,EAAM,IAAMA,EAAM,SAAS,IAC9B,EAAGA,EAAM,OAASA,EAAM,SAAS,MACnC,EACMmyC,EAAS,OAAO,OAAO,CAAC,EAAGhnC,CAAI,EAC/B0X,EAAa,CAAC,EACd9I,EAAU,CAAC,EACXq4B,EAAapyC,EAAM,aAAa,OAChCqyC,EAAiBryC,EAAM,QAAQ,YAC/BsyC,EAAkBD,EAAe,kBAAoB9iC,EAAK6iC,EAAa,EAC7E,QAAS51C,EAAI,EAAGA,EAAI41C,EAAY51C,IAAK,CACnC,IAAM0D,EAAOmyC,EAAe,WAAWryC,EAAM,qBAAqBxD,CAAC,CAAC,EACpEud,EAAQvd,CAAC,EAAI0D,EAAK,QAClB,IAAMiT,EAAgBnT,EAAM,iBAAiBxD,EAAGwD,EAAM,YAAc+Z,EAAQvd,CAAC,EAAG81C,CAAe,EACzFC,EAAS5xB,EAAOzgB,EAAK,IAAI,EACzBynC,EAAWoK,GAAiB/xC,EAAM,IAAKuyC,EAAQvyC,EAAM,aAAaxD,CAAC,CAAC,EAC1EqmB,EAAWrmB,CAAC,EAAImrC,EAChB,IAAMjkB,EAAe0Q,EAAgBp0B,EAAM,cAAcxD,CAAC,EAAI81C,CAAe,EACvEtjC,EAAQ,KAAK,MAAMiU,GAAUS,CAAY,CAAC,EAC1C8uB,EAAUP,GAAgBjjC,EAAOmE,EAAc,EAAGw0B,EAAS,EAAG,EAAG,GAAG,EACpE8K,EAAUR,GAAgBjjC,EAAOmE,EAAc,EAAGw0B,EAAS,EAAG,GAAI,GAAG,EAC3E+K,GAAaP,EAAQhnC,EAAMuY,EAAc8uB,EAASC,CAAO,CAC3D,CACAzyC,EAAM,eAAemL,EAAK,EAAIgnC,EAAO,EAAGA,EAAO,EAAIhnC,EAAK,EAAGA,EAAK,EAAIgnC,EAAO,EAAGA,EAAO,EAAIhnC,EAAK,CAAC,EAC/FnL,EAAM,iBAAmB2yC,GAAqB3yC,EAAO6iB,EAAY9I,CAAO,CAC1E,CACA,SAAS24B,GAAaP,EAAQhnC,EAAM6D,EAAOwjC,EAASC,EAAS,CAC3D,IAAM7uB,EAAM,KAAK,IAAI,KAAK,IAAI5U,CAAK,CAAC,EAC9B2U,EAAM,KAAK,IAAI,KAAK,IAAI3U,CAAK,CAAC,EAChCvO,EAAI,EACJC,EAAI,EACJ8xC,EAAQ,MAAQrnC,EAAK,GACvB1K,GAAK0K,EAAK,EAAIqnC,EAAQ,OAAS5uB,EAC/BuuB,EAAO,EAAI,KAAK,IAAIA,EAAO,EAAGhnC,EAAK,EAAI1K,CAAC,GAC/B+xC,EAAQ,IAAMrnC,EAAK,IAC5B1K,GAAK+xC,EAAQ,IAAMrnC,EAAK,GAAKyY,EAC7BuuB,EAAO,EAAI,KAAK,IAAIA,EAAO,EAAGhnC,EAAK,EAAI1K,CAAC,GAEtCgyC,EAAQ,MAAQtnC,EAAK,GACvBzK,GAAKyK,EAAK,EAAIsnC,EAAQ,OAAS9uB,EAC/BwuB,EAAO,EAAI,KAAK,IAAIA,EAAO,EAAGhnC,EAAK,EAAIzK,CAAC,GAC/B+xC,EAAQ,IAAMtnC,EAAK,IAC5BzK,GAAK+xC,EAAQ,IAAMtnC,EAAK,GAAKwY,EAC7BwuB,EAAO,EAAI,KAAK,IAAIA,EAAO,EAAGhnC,EAAK,EAAIzK,CAAC,EAE5C,CACA,SAASkyC,GAAqB5yC,EAAOyD,EAAOovC,EAAU,CACpD,IAAMC,EAAgB9yC,EAAM,YACtB,CACJ,MAAA+yC,EACA,gBAAAT,EACA,QAAAv4B,EACA,KAAAvQ,CACF,EAAIqpC,EACEG,EAAqBhzC,EAAM,iBAAiByD,EAAOqvC,EAAgBC,EAAQh5B,EAASu4B,CAAe,EACnGtjC,EAAQ,KAAK,MAAMiU,GAAUmR,EAAgB4e,EAAmB,MAAQ3jC,CAAO,CAAC,CAAC,EACjF3O,EAAIuyC,GAAUD,EAAmB,EAAGxpC,EAAK,EAAGwF,CAAK,EACjDW,EAAYujC,GAAqBlkC,CAAK,EACtC6I,EAAOs7B,GAAiBH,EAAmB,EAAGxpC,EAAK,EAAGmG,CAAS,EACrE,MAAO,CACL,QAAS,GACT,EAAGqjC,EAAmB,EACtB,EAAAtyC,EACA,UAAAiP,EACA,KAAAkI,EACA,IAAKnX,EACL,MAAOmX,EAAOrO,EAAK,EACnB,OAAQ9I,EAAI8I,EAAK,CACnB,CACF,CACA,SAAS4pC,GAAgB12C,EAAMyK,EAAM,CACnC,GAAI,CAACA,EACH,MAAO,GAET,GAAM,CACJ,KAAA0Q,EACA,IAAAjN,EACA,MAAAkN,EACA,OAAAjN,CACF,EAAInO,EAcJ,MAAO,EAbc6Y,GAAe,CAClC,EAAGsC,EACH,EAAGjN,CACL,EAAGzD,CAAI,GAAKoO,GAAe,CACzB,EAAGsC,EACH,EAAGhN,CACL,EAAG1D,CAAI,GAAKoO,GAAe,CACzB,EAAGuC,EACH,EAAGlN,CACL,EAAGzD,CAAI,GAAKoO,GAAe,CACzB,EAAGuC,EACH,EAAGjN,CACL,EAAG1D,CAAI,EAET,CACA,SAASwrC,GAAqB3yC,EAAO6iB,EAAY9I,EAAS,CACxD,IAAMxd,EAAQ,CAAC,EACT61C,EAAapyC,EAAM,aAAa,OAChCE,EAAOF,EAAM,QACb,CACJ,kBAAAqzC,EACA,QAAAjwB,CACF,EAAIljB,EAAK,YACH2yC,EAAW,CACf,MAAOf,GAAsB5xC,CAAI,EAAI,EACrC,gBAAiBmzC,EAAoB9jC,EAAK6iC,EAAa,CACzD,EACIjrC,EACJ,QAAS3K,EAAI,EAAGA,EAAI41C,EAAY51C,IAAK,CACnCq2C,EAAS,QAAU94B,EAAQvd,CAAC,EAC5Bq2C,EAAS,KAAOhwB,EAAWrmB,CAAC,EAC5B,IAAME,EAAOk2C,GAAqB5yC,EAAOxD,EAAGq2C,CAAQ,EACpDt2C,EAAM,KAAKG,CAAI,EACX0mB,IAAY,SACd1mB,EAAK,QAAU02C,GAAgB12C,EAAMyK,CAAI,EACrCzK,EAAK,UACPyK,EAAOzK,GAGb,CACA,OAAOH,CACT,CACA,SAAS22C,GAAqBlkC,EAAO,CACnC,OAAIA,IAAU,GAAKA,IAAU,IACpB,SACEA,EAAQ,IACV,OAEF,OACT,CACA,SAASmkC,GAAiB1yC,EAAGoc,EAAGyC,EAAO,CACrC,OAAIA,IAAU,QACZ7e,GAAKoc,EACIyC,IAAU,WACnB7e,GAAKoc,EAAI,GAEJpc,CACT,CACA,SAASwyC,GAAUvyC,EAAG+kB,EAAGzW,EAAO,CAC9B,OAAIA,IAAU,IAAMA,IAAU,IAC5BtO,GAAK+kB,EAAI,GACAzW,EAAQ,KAAOA,EAAQ,MAChCtO,GAAK+kB,GAEA/kB,CACT,CACA,SAAS4yC,GAAkBrsC,EAAK/G,EAAMxD,EAAM,CAC1C,GAAM,CACJ,KAAAmb,EACA,IAAAjN,EACA,MAAAkN,EACA,OAAAjN,CACF,EAAInO,EACE,CACJ,cAAA62C,CACF,EAAIrzC,EACJ,GAAI,CAACwJ,EAAc6pC,CAAa,EAAG,CACjC,IAAM1jC,EAAe+rB,GAAc17B,EAAK,YAAY,EAC9C6Z,EAAUC,EAAU9Z,EAAK,eAAe,EAC9C+G,EAAI,UAAYssC,EAChB,IAAMC,EAAe37B,EAAOkC,EAAQ,KAC9B05B,EAAc7oC,EAAMmP,EAAQ,IAC5B25B,EAAgB57B,EAAQD,EAAOkC,EAAQ,MACvC45B,EAAiB9oC,EAASD,EAAMmP,EAAQ,OAC1C,OAAO,OAAOlK,CAAY,EAAE,KAAKvE,GAAKA,IAAM,CAAC,GAC/CrE,EAAI,UAAU,EACd41B,GAAmB51B,EAAK,CACtB,EAAGusC,EACH,EAAGC,EACH,EAAGC,EACH,EAAGC,EACH,OAAQ9jC,CACV,CAAC,EACD5I,EAAI,KAAK,GAETA,EAAI,SAASusC,EAAcC,EAAaC,EAAeC,CAAc,CAEzE,CACF,CACA,SAASC,GAAgB5zC,EAAOsrC,EAAY,CAC1C,GAAM,CACJ,IAAArkC,EACA,QAAS,CACP,YAAA4sC,CACF,CACF,EAAI7zC,EACJ,QAASxD,EAAI8uC,EAAa,EAAG9uC,GAAK,EAAGA,IAAK,CACxC,IAAME,EAAOsD,EAAM,iBAAiBxD,CAAC,EACrC,GAAI,CAACE,EAAK,QACR,SAEF,IAAMkqB,EAAcitB,EAAY,WAAW7zC,EAAM,qBAAqBxD,CAAC,CAAC,EACxE82C,GAAkBrsC,EAAK2f,EAAalqB,CAAI,EACxC,IAAM61C,EAAS5xB,EAAOiG,EAAY,IAAI,EAChC,CACJ,EAAAnmB,EACA,EAAAC,EACA,UAAAiP,CACF,EAAIjT,EACJ+rB,GAAWxhB,EAAKjH,EAAM,aAAaxD,CAAC,EAAGiE,EAAGC,EAAI6xC,EAAO,WAAa,EAAGA,EAAQ,CAC3E,MAAO3rB,EAAY,MACnB,UAAWjX,EACX,aAAc,QAChB,CAAC,CACH,CACF,CACA,SAASmkC,GAAe9zC,EAAO+N,EAAQunB,EAAUgW,EAAY,CAC3D,GAAM,CACJ,IAAArkC,CACF,EAAIjH,EACJ,GAAIs1B,EACFruB,EAAI,IAAIjH,EAAM,QAASA,EAAM,QAAS+N,EAAQ,EAAGS,CAAG,MAC/C,CACL,IAAI2E,EAAgBnT,EAAM,iBAAiB,EAAG+N,CAAM,EACpD9G,EAAI,OAAOkM,EAAc,EAAGA,EAAc,CAAC,EAC3C,QAAS3W,EAAI,EAAGA,EAAI8uC,EAAY9uC,IAC9B2W,EAAgBnT,EAAM,iBAAiBxD,EAAGuR,CAAM,EAChD9G,EAAI,OAAOkM,EAAc,EAAGA,EAAc,CAAC,CAE/C,CACF,CACA,SAAS4gC,GAAe/zC,EAAOg0C,EAAcjmC,EAAQu9B,EAAY1lB,EAAY,CAC3E,IAAM3e,EAAMjH,EAAM,IACZs1B,EAAW0e,EAAa,SACxB,CACJ,MAAAz2C,EACA,UAAAupB,CACF,EAAIktB,EACA,CAAC1e,GAAY,CAACgW,GAAc,CAAC/tC,GAAS,CAACupB,GAAa/Y,EAAS,IAGjE9G,EAAI,KAAK,EACTA,EAAI,YAAc1J,EAClB0J,EAAI,UAAY6f,EAChB7f,EAAI,YAAY2e,EAAW,MAAQ,CAAC,CAAC,EACrC3e,EAAI,eAAiB2e,EAAW,WAChC3e,EAAI,UAAU,EACd6sC,GAAe9zC,EAAO+N,EAAQunB,EAAUgW,CAAU,EAClDrkC,EAAI,UAAU,EACdA,EAAI,OAAO,EACXA,EAAI,QAAQ,EACd,CACA,SAASgtC,GAAwBjwC,EAAQP,EAAOqM,EAAO,CACrD,OAAO7L,GAAcD,EAAQ,CAC3B,MAAA8L,EACA,MAAArM,EACA,KAAM,YACR,CAAC,CACH,CACA,IAAMywC,GAAN,cAAgC9D,EAAgB,CAC9C,OAAO,GAAK,eACZ,OAAO,SAAW,CAChB,QAAS,GACT,QAAS,GACT,SAAU,YACV,WAAY,CACV,QAAS,GACT,UAAW,EACX,WAAY,CAAC,EACb,iBAAkB,CACpB,EACA,KAAM,CACJ,SAAU,EACZ,EACA,WAAY,EACZ,MAAO,CACL,kBAAmB,GACnB,SAAUS,GAAM,WAAW,OAC7B,EACA,YAAa,CACX,cAAe,OACf,gBAAiB,EACjB,QAAS,GACT,KAAM,CACJ,KAAM,EACR,EACA,SAAS/gC,EAAO,CACd,OAAOA,CACT,EACA,QAAS,EACT,kBAAmB,EACrB,CACF,EACA,OAAO,cAAgB,CACrB,mBAAoB,cACpB,oBAAqB,QACrB,cAAe,OACjB,EACA,OAAO,YAAc,CACnB,WAAY,CACV,UAAW,MACb,CACF,EACA,YAAYpS,EAAK,CACf,MAAMA,CAAG,EACT,KAAK,QAAU,OACf,KAAK,QAAU,OACf,KAAK,YAAc,OACnB,KAAK,aAAe,CAAC,EACrB,KAAK,iBAAmB,CAAC,CAC3B,CACA,eAAgB,CACd,IAAMqc,EAAU,KAAK,SAAWC,EAAU83B,GAAsB,KAAK,OAAO,EAAI,CAAC,EAC3Ej1B,EAAI,KAAK,MAAQ,KAAK,SAAW9C,EAAQ,MACzC0L,EAAI,KAAK,OAAS,KAAK,UAAY1L,EAAQ,OACjD,KAAK,QAAU,KAAK,MAAM,KAAK,KAAO8C,EAAI,EAAI9C,EAAQ,IAAI,EAC1D,KAAK,QAAU,KAAK,MAAM,KAAK,IAAM0L,EAAI,EAAI1L,EAAQ,GAAG,EACxD,KAAK,YAAc,KAAK,MAAM,KAAK,IAAI8C,EAAG4I,CAAC,EAAI,CAAC,CAClD,CACA,qBAAsB,CACpB,GAAM,CACJ,IAAArlB,EACA,IAAAC,CACF,EAAI,KAAK,UAAU,EAAK,EACxB,KAAK,IAAMsB,EAAevB,CAAG,GAAK,CAAC,MAAMA,CAAG,EAAIA,EAAM,EACtD,KAAK,IAAMuB,EAAetB,CAAG,GAAK,CAAC,MAAMA,CAAG,EAAIA,EAAM,EACtD,KAAK,uBAAuB,CAC9B,CACA,kBAAmB,CACjB,OAAO,KAAK,KAAK,KAAK,YAAcyxC,GAAsB,KAAK,OAAO,CAAC,CACzE,CACA,mBAAmBn0B,EAAO,CACxByyB,GAAgB,UAAU,mBAAmB,KAAK,KAAMzyB,CAAK,EAC7D,KAAK,aAAe,KAAK,UAAU,EAAE,IAAI,CAACje,EAAO+D,IAAU,CACzD,IAAMqM,EAAQiS,EAAS,KAAK,QAAQ,YAAY,SAAU,CAACriB,EAAO+D,CAAK,EAAG,IAAI,EAC9E,OAAOqM,GAASA,IAAU,EAAIA,EAAQ,EACxC,CAAC,EAAE,OAAO,CAACxE,EAAG9O,IAAM,KAAK,MAAM,kBAAkBA,CAAC,CAAC,CACrD,CACA,KAAM,CACJ,IAAM0D,EAAO,KAAK,QACdA,EAAK,SAAWA,EAAK,YAAY,QACnCgyC,GAAmB,IAAI,EAEvB,KAAK,eAAe,EAAG,EAAG,EAAG,CAAC,CAElC,CACA,eAAeiC,EAAcC,EAAeC,EAAaC,EAAgB,CACvE,KAAK,SAAW,KAAK,OAAOH,EAAeC,GAAiB,CAAC,EAC7D,KAAK,SAAW,KAAK,OAAOC,EAAcC,GAAkB,CAAC,EAC7D,KAAK,aAAe,KAAK,IAAI,KAAK,YAAc,EAAG,KAAK,IAAIH,EAAcC,EAAeC,EAAaC,CAAc,CAAC,CACvH,CACA,cAAc7wC,EAAO,CACnB,IAAM8wC,EAAkB/lC,GAAO,KAAK,aAAa,QAAU,GACrDC,EAAa,KAAK,QAAQ,YAAc,EAC9C,OAAO2lB,EAAgB3wB,EAAQ8wC,EAAkBnkC,GAAU3B,CAAU,CAAC,CACxE,CACA,8BAA8B/O,EAAO,CACnC,GAAIgK,EAAchK,CAAK,EACrB,MAAO,KAET,IAAM80C,EAAgB,KAAK,aAAe,KAAK,IAAM,KAAK,KAC1D,OAAI,KAAK,QAAQ,SACP,KAAK,IAAM90C,GAAS80C,GAEtB90C,EAAQ,KAAK,KAAO80C,CAC9B,CACA,8BAA8Bz+B,EAAU,CACtC,GAAIrM,EAAcqM,CAAQ,EACxB,MAAO,KAET,IAAM0+B,EAAiB1+B,GAAY,KAAK,aAAe,KAAK,IAAM,KAAK,MACvE,OAAO,KAAK,QAAQ,QAAU,KAAK,IAAM0+B,EAAiB,KAAK,IAAMA,CACvE,CACA,qBAAqBhxC,EAAO,CAC1B,IAAMowC,EAAc,KAAK,cAAgB,CAAC,EAC1C,GAAIpwC,GAAS,GAAKA,EAAQowC,EAAY,OAAQ,CAC5C,IAAMa,EAAab,EAAYpwC,CAAK,EACpC,OAAOwwC,GAAwB,KAAK,WAAW,EAAGxwC,EAAOixC,CAAU,CACrE,CACF,CACA,iBAAiBjxC,EAAOkxC,EAAoBrC,EAAkB,EAAG,CAC/D,IAAMtjC,EAAQ,KAAK,cAAcvL,CAAK,EAAI4L,EAAUijC,EACpD,MAAO,CACL,EAAG,KAAK,IAAItjC,CAAK,EAAI2lC,EAAqB,KAAK,QAC/C,EAAG,KAAK,IAAI3lC,CAAK,EAAI2lC,EAAqB,KAAK,QAC/C,MAAA3lC,CACF,CACF,CACA,yBAAyBvL,EAAO/D,EAAO,CACrC,OAAO,KAAK,iBAAiB+D,EAAO,KAAK,8BAA8B/D,CAAK,CAAC,CAC/E,CACA,gBAAgB+D,EAAO,CACrB,OAAO,KAAK,yBAAyBA,GAAS,EAAG,KAAK,aAAa,CAAC,CACtE,CACA,sBAAsBA,EAAO,CAC3B,GAAM,CACJ,KAAAoU,EACA,IAAAjN,EACA,MAAAkN,EACA,OAAAjN,CACF,EAAI,KAAK,iBAAiBpH,CAAK,EAC/B,MAAO,CACL,KAAAoU,EACA,IAAAjN,EACA,MAAAkN,EACA,OAAAjN,CACF,CACF,CACA,gBAAiB,CACf,GAAM,CACJ,gBAAAqd,EACA,KAAM,CACJ,SAAAoN,CACF,CACF,EAAI,KAAK,QACT,GAAIpN,EAAiB,CACnB,IAAMjhB,EAAM,KAAK,IACjBA,EAAI,KAAK,EACTA,EAAI,UAAU,EACd6sC,GAAe,KAAM,KAAK,8BAA8B,KAAK,SAAS,EAAGxe,EAAU,KAAK,aAAa,MAAM,EAC3GruB,EAAI,UAAU,EACdA,EAAI,UAAYihB,EAChBjhB,EAAI,KAAK,EACTA,EAAI,QAAQ,CACd,CACF,CACA,UAAW,CACT,IAAMA,EAAM,KAAK,IACX/G,EAAO,KAAK,QACZ,CACJ,WAAA00C,EACA,KAAAlvB,EACA,OAAAjT,CACF,EAAIvS,EACEorC,EAAa,KAAK,aAAa,OACjC9uC,EAAGiiB,EAAQjK,EAef,GAdItU,EAAK,YAAY,SACnB0zC,GAAgB,KAAMtI,CAAU,EAE9B5lB,EAAK,SACP,KAAK,MAAM,QAAQ,CAAC5E,EAAMrd,IAAU,CAClC,GAAIA,IAAU,GAAKA,IAAU,GAAK,KAAK,IAAM,EAAG,CAC9Cgb,EAAS,KAAK,8BAA8BqC,EAAK,KAAK,EACtD,IAAMxZ,EAAU,KAAK,WAAW7D,CAAK,EAC/BmjB,EAAclB,EAAK,WAAWpe,CAAO,EACrCuf,EAAoBpU,EAAO,WAAWnL,CAAO,EACnDysC,GAAe,KAAMntB,EAAanI,EAAQ6sB,EAAYzkB,CAAiB,CACzE,CACF,CAAC,EAEC+tB,EAAW,QAAS,CAEtB,IADA3tC,EAAI,KAAK,EACJzK,EAAI8uC,EAAa,EAAG9uC,GAAK,EAAGA,IAAK,CACpC,IAAMoqB,EAAcguB,EAAW,WAAW,KAAK,qBAAqBp4C,CAAC,CAAC,EAChE,CACJ,MAAAe,EACA,UAAAupB,CACF,EAAIF,EACA,CAACE,GAAa,CAACvpB,IAGnB0J,EAAI,UAAY6f,EAChB7f,EAAI,YAAc1J,EAClB0J,EAAI,YAAY2f,EAAY,UAAU,EACtC3f,EAAI,eAAiB2f,EAAY,iBACjCnI,EAAS,KAAK,8BAA8Bve,EAAK,QAAU,KAAK,IAAM,KAAK,GAAG,EAC9EsU,EAAW,KAAK,iBAAiBhY,EAAGiiB,CAAM,EAC1CxX,EAAI,UAAU,EACdA,EAAI,OAAO,KAAK,QAAS,KAAK,OAAO,EACrCA,EAAI,OAAOuN,EAAS,EAAGA,EAAS,CAAC,EACjCvN,EAAI,OAAO,EACb,CACAA,EAAI,QAAQ,CACd,CACF,CACA,YAAa,CAAC,CACd,YAAa,CACX,IAAMA,EAAM,KAAK,IACX/G,EAAO,KAAK,QACZ0d,EAAW1d,EAAK,MACtB,GAAI,CAAC0d,EAAS,QACZ,OAEF,IAAMnP,EAAa,KAAK,cAAc,CAAC,EACnCgQ,EAAQjF,EACZvS,EAAI,KAAK,EACTA,EAAI,UAAU,KAAK,QAAS,KAAK,OAAO,EACxCA,EAAI,OAAOwH,CAAU,EACrBxH,EAAI,UAAY,SAChBA,EAAI,aAAe,SACnB,KAAK,MAAM,QAAQ,CAAC6Z,EAAMrd,IAAU,CAClC,GAAIA,IAAU,GAAK,KAAK,KAAO,GAAK,CAACvD,EAAK,QACxC,OAEF,IAAM0mB,EAAchJ,EAAS,WAAW,KAAK,WAAWna,CAAK,CAAC,EACxDmhB,EAAWjE,EAAOiG,EAAY,IAAI,EAExC,GADAnI,EAAS,KAAK,8BAA8B,KAAK,MAAMhb,CAAK,EAAE,KAAK,EAC/DmjB,EAAY,kBAAmB,CACjC3f,EAAI,KAAO2d,EAAS,OACpBpL,EAAQvS,EAAI,YAAY6Z,EAAK,KAAK,EAAE,MACpC7Z,EAAI,UAAY2f,EAAY,cAC5B,IAAM7M,EAAUC,EAAU4M,EAAY,eAAe,EACrD3f,EAAI,SAAS,CAACuS,EAAQ,EAAIO,EAAQ,KAAM,CAAC0E,EAASmG,EAAS,KAAO,EAAI7K,EAAQ,IAAKP,EAAQO,EAAQ,MAAO6K,EAAS,KAAO7K,EAAQ,MAAM,CAC1I,CACA0O,GAAWxhB,EAAK6Z,EAAK,MAAO,EAAG,CAACrC,EAAQmG,EAAU,CAChD,MAAOgC,EAAY,MACnB,YAAaA,EAAY,gBACzB,YAAaA,EAAY,eAC3B,CAAC,CACH,CAAC,EACD3f,EAAI,QAAQ,CACd,CACA,WAAY,CAAC,CACf,EACM4tC,GAAY,CAChB,YAAa,CACX,OAAQ,GACR,KAAM,EACN,MAAO,GACT,EACA,OAAQ,CACN,OAAQ,GACR,KAAM,IACN,MAAO,EACT,EACA,OAAQ,CACN,OAAQ,GACR,KAAM,IACN,MAAO,EACT,EACA,KAAM,CACJ,OAAQ,GACR,KAAM,KACN,MAAO,EACT,EACA,IAAK,CACH,OAAQ,GACR,KAAM,MACN,MAAO,EACT,EACA,KAAM,CACJ,OAAQ,GACR,KAAM,OACN,MAAO,CACT,EACA,MAAO,CACL,OAAQ,GACR,KAAM,OACN,MAAO,EACT,EACA,QAAS,CACP,OAAQ,GACR,KAAM,OACN,MAAO,CACT,EACA,KAAM,CACJ,OAAQ,GACR,KAAM,MACR,CACF,EACMC,EAAuB,OAAO,KAAKD,EAAS,EAClD,SAASE,GAAO/rC,EAAGlI,EAAG,CACpB,OAAOkI,EAAIlI,CACb,CACA,SAASk0C,GAAMh1C,EAAOi1C,EAAO,CAC3B,GAAIvrC,EAAcurC,CAAK,EACrB,OAAO,KAET,IAAMC,EAAUl1C,EAAM,SAChB,CACJ,OAAAm1C,EACA,MAAAC,EACA,WAAAC,CACF,EAAIr1C,EAAM,WACNN,EAAQu1C,EAOZ,OANI,OAAOE,GAAW,aACpBz1C,EAAQy1C,EAAOz1C,CAAK,GAEjBiC,EAAejC,CAAK,IACvBA,EAAQ,OAAOy1C,GAAW,SAAWD,EAAQ,MAAMx1C,EAAOy1C,CAAM,EAAID,EAAQ,MAAMx1C,CAAK,GAErFA,IAAU,KACL,MAEL01C,IACF11C,EAAQ01C,IAAU,SAAWhjC,GAASijC,CAAU,GAAKA,IAAe,IAAQH,EAAQ,QAAQx1C,EAAO,UAAW21C,CAAU,EAAIH,EAAQ,QAAQx1C,EAAO01C,CAAK,GAEnJ,CAAC11C,EACV,CACA,SAAS41C,GAA0BC,EAASn1C,EAAKC,EAAKm1C,EAAU,CAC9D,IAAMr0C,EAAO2zC,EAAM,OACnB,QAASt4C,EAAIs4C,EAAM,QAAQS,CAAO,EAAG/4C,EAAI2E,EAAO,EAAG,EAAE3E,EAAG,CACtD,IAAMi5C,EAAWZ,GAAUC,EAAMt4C,CAAC,CAAC,EAC7Ba,EAASo4C,EAAS,MAAQA,EAAS,MAAQ,OAAO,iBACxD,GAAIA,EAAS,QAAU,KAAK,MAAMp1C,EAAMD,IAAQ/C,EAASo4C,EAAS,KAAK,GAAKD,EAC1E,OAAOV,EAAMt4C,CAAC,CAElB,CACA,OAAOs4C,EAAM3zC,EAAO,CAAC,CACvB,CACA,SAASu0C,GAA2B11C,EAAOuiB,EAAUgzB,EAASn1C,EAAKC,EAAK,CACtE,QAAS7D,EAAIs4C,EAAM,OAAS,EAAGt4C,GAAKs4C,EAAM,QAAQS,CAAO,EAAG/4C,IAAK,CAC/D,IAAM2yC,EAAO2F,EAAMt4C,CAAC,EACpB,GAAIq4C,GAAU1F,CAAI,EAAE,QAAUnvC,EAAM,SAAS,KAAKK,EAAKD,EAAK+uC,CAAI,GAAK5sB,EAAW,EAC9E,OAAO4sB,CAEX,CACA,OAAO2F,EAAMS,EAAUT,EAAM,QAAQS,CAAO,EAAI,CAAC,CACnD,CACA,SAASI,GAAmBxG,EAAM,CAChC,QAAS,EAAI2F,EAAM,QAAQ3F,CAAI,EAAI,EAAGhuC,EAAO2zC,EAAM,OAAQ,EAAI3zC,EAAM,EAAE,EACrE,GAAI0zC,GAAUC,EAAM,CAAC,CAAC,EAAE,OACtB,OAAOA,EAAM,CAAC,CAGpB,CACA,SAASc,GAAQj4B,EAAOk4B,EAAMC,EAAY,CACxC,GAAI,CAACA,EACHn4B,EAAMk4B,CAAI,EAAI,WACLC,EAAW,OAAQ,CAC5B,GAAM,CACJ,GAAAphC,EACA,GAAAC,CACF,EAAIohC,GAAQD,EAAYD,CAAI,EACtBG,EAAYF,EAAWphC,CAAE,GAAKmhC,EAAOC,EAAWphC,CAAE,EAAIohC,EAAWnhC,CAAE,EACzEgJ,EAAMq4B,CAAS,EAAI,EACrB,CACF,CACA,SAASC,GAAcj2C,EAAO2d,EAAOqqB,EAAKkO,EAAW,CACnD,IAAMhB,EAAUl1C,EAAM,SAChBme,EAAQ,CAAC+2B,EAAQ,QAAQv3B,EAAM,CAAC,EAAE,MAAOu4B,CAAS,EAClDjqC,EAAO0R,EAAMA,EAAM,OAAS,CAAC,EAAE,MACjCw4B,EAAO1yC,EACX,IAAK0yC,EAAQh4B,EAAOg4B,GAASlqC,EAAMkqC,EAAQ,CAACjB,EAAQ,IAAIiB,EAAO,EAAGD,CAAS,EACzEzyC,EAAQukC,EAAImO,CAAK,EACb1yC,GAAS,IACXka,EAAMla,CAAK,EAAE,MAAQ,IAGzB,OAAOka,CACT,CACA,SAASy4B,GAAoBp2C,EAAOd,EAAQg3C,EAAW,CACrD,IAAMv4B,EAAQ,CAAC,EACTqqB,EAAM,CAAC,EACP7mC,EAAOjC,EAAO,OAChB1C,EAAGkD,EACP,IAAKlD,EAAI,EAAGA,EAAI2E,EAAM,EAAE3E,EACtBkD,EAAQR,EAAO1C,CAAC,EAChBwrC,EAAItoC,CAAK,EAAIlD,EACbmhB,EAAM,KAAK,CACT,MAAAje,EACA,MAAO,EACT,CAAC,EAEH,OAAOyB,IAAS,GAAK,CAAC+0C,EAAYv4B,EAAQs4B,GAAcj2C,EAAO2d,EAAOqqB,EAAKkO,CAAS,CACtF,CACA,IAAIG,IAA0B,IAAM,CAClC,MAAMA,UAAkB/0B,EAAM,CAC5B,OAAO,GAAK,OACZ,OAAO,SAAW,CAChB,OAAQ,OACR,SAAU,CAAC,EACX,KAAM,CACJ,OAAQ,GACR,KAAM,GACN,MAAO,GACP,WAAY,GACZ,QAAS,cACT,eAAgB,CAAC,CACnB,EACA,MAAO,CACL,OAAQ,OACR,SAAU,GACV,MAAO,CACL,QAAS,EACX,CACF,CACF,EACA,YAAY7hB,EAAO,CACjB,MAAMA,CAAK,EACX,KAAK,OAAS,CACZ,KAAM,CAAC,EACP,OAAQ,CAAC,EACT,IAAK,CAAC,CACR,EACA,KAAK,MAAQ,MACb,KAAK,WAAa,OAClB,KAAK,SAAW,CAAC,EACjB,KAAK,YAAc,GACnB,KAAK,WAAa,MACpB,CACA,KAAKyxB,EAAWhxB,EAAO,CAAC,EAAG,CACzB,IAAM21C,EAAO3kB,EAAU,OAASA,EAAU,KAAO,CAAC,GAC5CgkB,EAAU,KAAK,SAAW,IAAIvhC,GAAS,MAAMud,EAAU,SAAS,IAAI,EAC1EgkB,EAAQ,KAAKh1C,CAAI,EACjB6sB,GAAQ8oB,EAAK,eAAgBX,EAAQ,QAAQ,CAAC,EAC9C,KAAK,WAAa,CAChB,OAAQW,EAAK,OACb,MAAOA,EAAK,MACZ,WAAYA,EAAK,UACnB,EACA,MAAM,KAAK3kB,CAAS,EACpB,KAAK,YAAchxB,EAAK,UAC1B,CACA,MAAMshB,EAAK/d,EAAO,CAChB,OAAI+d,IAAQ,OACH,KAEFwzB,GAAM,KAAMxzB,CAAG,CACxB,CACA,cAAe,CACb,MAAM,aAAa,EACnB,KAAK,OAAS,CACZ,KAAM,CAAC,EACP,OAAQ,CAAC,EACT,IAAK,CAAC,CACR,CACF,CACA,qBAAsB,CACpB,IAAMpiB,EAAU,KAAK,QACf81C,EAAU,KAAK,SACf/F,EAAO/vC,EAAQ,KAAK,MAAQ,MAC9B,CACF,IAAAgB,EACA,IAAAC,EACA,WAAAsC,EACA,WAAAC,CACF,EAAI,KAAK,cAAc,EACvB,SAAS0zC,EAAata,EAAQ,CACxB,CAACr5B,GAAc,CAAC,MAAMq5B,EAAO,GAAG,IAClC57B,EAAM,KAAK,IAAIA,EAAK47B,EAAO,GAAG,GAE5B,CAACp5B,GAAc,CAAC,MAAMo5B,EAAO,GAAG,IAClC37B,EAAM,KAAK,IAAIA,EAAK27B,EAAO,GAAG,EAElC,EACI,CAACr5B,GAAc,CAACC,KAClB0zC,EAAa,KAAK,gBAAgB,CAAC,GAC/Bl3C,EAAQ,SAAW,SAAWA,EAAQ,MAAM,SAAW,WACzDk3C,EAAa,KAAK,UAAU,EAAK,CAAC,GAGtCl2C,EAAMuB,EAAevB,CAAG,GAAK,CAAC,MAAMA,CAAG,EAAIA,EAAM,CAAC80C,EAAQ,QAAQ,KAAK,IAAI,EAAG/F,CAAI,EAClF9uC,EAAMsB,EAAetB,CAAG,GAAK,CAAC,MAAMA,CAAG,EAAIA,EAAM,CAAC60C,EAAQ,MAAM,KAAK,IAAI,EAAG/F,CAAI,EAAI,EACpF,KAAK,IAAM,KAAK,IAAI/uC,EAAKC,EAAM,CAAC,EAChC,KAAK,IAAM,KAAK,IAAID,EAAM,EAAGC,CAAG,CAClC,CACA,iBAAkB,CAChB,IAAMoI,EAAM,KAAK,mBAAmB,EAChCrI,EAAM,OAAO,kBACbC,EAAM,OAAO,kBACjB,OAAIoI,EAAI,SACNrI,EAAMqI,EAAI,CAAC,EACXpI,EAAMoI,EAAIA,EAAI,OAAS,CAAC,GAEnB,CACL,IAAArI,EACA,IAAAC,CACF,CACF,CACA,YAAa,CACX,IAAMjB,EAAU,KAAK,QACfm3C,EAAWn3C,EAAQ,KACnBwe,EAAWxe,EAAQ,MACnB02C,EAAal4B,EAAS,SAAW,SAAW,KAAK,mBAAmB,EAAI,KAAK,UAAU,EACzFxe,EAAQ,SAAW,SAAW02C,EAAW,SAC3C,KAAK,IAAM,KAAK,UAAYA,EAAW,CAAC,EACxC,KAAK,IAAM,KAAK,UAAYA,EAAWA,EAAW,OAAS,CAAC,GAE9D,IAAM11C,EAAM,KAAK,IACXC,EAAM,KAAK,IACXsd,EAAQ64B,GAAeV,EAAY11C,EAAKC,CAAG,EACjD,YAAK,MAAQk2C,EAAS,OAAS34B,EAAS,SAAW03B,GAA0BiB,EAAS,QAAS,KAAK,IAAK,KAAK,IAAK,KAAK,kBAAkBn2C,CAAG,CAAC,EAAIs1C,GAA2B,KAAM/3B,EAAM,OAAQ44B,EAAS,QAAS,KAAK,IAAK,KAAK,GAAG,GACrO,KAAK,WAAa,CAAC34B,EAAS,MAAM,SAAW,KAAK,QAAU,OAAS,OAAY+3B,GAAmB,KAAK,KAAK,EAC9G,KAAK,YAAYG,CAAU,EACvB12C,EAAQ,SACVue,EAAM,QAAQ,EAETy4B,GAAoB,KAAMz4B,EAAO,KAAK,UAAU,CACzD,CACA,eAAgB,CACV,KAAK,QAAQ,qBACf,KAAK,YAAY,KAAK,MAAM,IAAImD,GAAQ,CAACA,EAAK,KAAK,CAAC,CAExD,CACA,YAAYg1B,EAAa,CAAC,EAAG,CAC3B,IAAI/vC,EAAQ,EACRwC,EAAM,EACN4V,EAAOlS,EACP,KAAK,QAAQ,QAAU6pC,EAAW,SACpC33B,EAAQ,KAAK,mBAAmB23B,EAAW,CAAC,CAAC,EACzCA,EAAW,SAAW,EACxB/vC,EAAQ,EAAIoY,EAEZpY,GAAS,KAAK,mBAAmB+vC,EAAW,CAAC,CAAC,EAAI33B,GAAS,EAE7DlS,EAAO,KAAK,mBAAmB6pC,EAAWA,EAAW,OAAS,CAAC,CAAC,EAC5DA,EAAW,SAAW,EACxBvtC,EAAM0D,EAEN1D,GAAO0D,EAAO,KAAK,mBAAmB6pC,EAAWA,EAAW,OAAS,CAAC,CAAC,GAAK,GAGhF,IAAMpvB,EAAQovB,EAAW,OAAS,EAAI,GAAM,IAC5C/vC,EAAQid,EAAYjd,EAAO,EAAG2gB,CAAK,EACnCne,EAAMya,EAAYza,EAAK,EAAGme,CAAK,EAC/B,KAAK,SAAW,CACd,MAAA3gB,EACA,IAAAwC,EACA,OAAQ,GAAKxC,EAAQ,EAAIwC,EAC3B,CACF,CACA,WAAY,CACV,IAAM2sC,EAAU,KAAK,SACf90C,EAAM,KAAK,IACXC,EAAM,KAAK,IACXjB,EAAU,KAAK,QACfm3C,EAAWn3C,EAAQ,KACnBq3C,EAAQF,EAAS,MAAQjB,GAA0BiB,EAAS,QAASn2C,EAAKC,EAAK,KAAK,kBAAkBD,CAAG,CAAC,EAC1GqwC,EAAWzrC,EAAe5F,EAAQ,MAAM,SAAU,CAAC,EACnDs3C,EAAUD,IAAU,OAASF,EAAS,WAAa,GACnDI,EAAavkC,GAASskC,CAAO,GAAKA,IAAY,GAC9C/4B,EAAQ,CAAC,EACXQ,EAAQ/d,EACRy1C,EAAM7vC,EAKV,GAJI2wC,IACFx4B,EAAQ,CAAC+2B,EAAQ,QAAQ/2B,EAAO,UAAWu4B,CAAO,GAEpDv4B,EAAQ,CAAC+2B,EAAQ,QAAQ/2B,EAAOw4B,EAAa,MAAQF,CAAK,EACtDvB,EAAQ,KAAK70C,EAAKD,EAAKq2C,CAAK,EAAI,IAAShG,EAC3C,MAAM,IAAI,MAAMrwC,EAAM,QAAUC,EAAM,uCAAyCowC,EAAW,IAAMgG,CAAK,EAEvG,IAAMX,EAAa12C,EAAQ,MAAM,SAAW,QAAU,KAAK,kBAAkB,EAC7E,IAAKy2C,EAAO13B,EAAOnY,EAAQ,EAAG6vC,EAAOx1C,EAAKw1C,EAAO,CAACX,EAAQ,IAAIW,EAAMpF,EAAUgG,CAAK,EAAGzwC,IACpF4vC,GAAQj4B,EAAOk4B,EAAMC,CAAU,EAEjC,OAAID,IAASx1C,GAAOjB,EAAQ,SAAW,SAAW4G,IAAU,IAC1D4vC,GAAQj4B,EAAOk4B,EAAMC,CAAU,EAE1B,OAAO,KAAKn4B,CAAK,EAAE,KAAKo3B,EAAM,EAAE,IAAIt0C,GAAK,CAACA,CAAC,CACpD,CACA,iBAAiBf,EAAO,CACtB,IAAMw1C,EAAU,KAAK,SACfqB,EAAW,KAAK,QAAQ,KAC9B,OAAIA,EAAS,cACJrB,EAAQ,OAAOx1C,EAAO62C,EAAS,aAAa,EAE9CrB,EAAQ,OAAOx1C,EAAO62C,EAAS,eAAe,QAAQ,CAC/D,CACA,OAAO72C,EAAOk3C,EAAQ,CAEpB,IAAMC,EADU,KAAK,QACG,KAAK,eACvB1H,EAAO,KAAK,MACZ2H,EAAMF,GAAUC,EAAQ1H,CAAI,EAClC,OAAO,KAAK,SAAS,OAAOzvC,EAAOo3C,CAAG,CACxC,CACA,oBAAoBjB,EAAMpyC,EAAOka,EAAOi5B,EAAQ,CAC9C,IAAMx3C,EAAU,KAAK,QACf23C,EAAY33C,EAAQ,MAAM,SAChC,GAAI23C,EACF,OAAOh1B,EAASg1B,EAAW,CAAClB,EAAMpyC,EAAOka,CAAK,EAAG,IAAI,EAEvD,IAAMk5B,EAAUz3C,EAAQ,KAAK,eACvB+vC,EAAO,KAAK,MACZ+G,EAAY,KAAK,WACjBc,EAAc7H,GAAQ0H,EAAQ1H,CAAI,EAClC8H,EAAcf,GAAaW,EAAQX,CAAS,EAC5Cp1B,EAAOnD,EAAMla,CAAK,EAClB0yC,EAAQD,GAAae,GAAen2B,GAAQA,EAAK,MACvD,OAAO,KAAK,SAAS,OAAO+0B,EAAMe,IAAWT,EAAQc,EAAcD,EAAY,CACjF,CACA,mBAAmBr5B,EAAO,CACxB,IAAInhB,EAAG2E,EAAM2f,EACb,IAAKtkB,EAAI,EAAG2E,EAAOwc,EAAM,OAAQnhB,EAAI2E,EAAM,EAAE3E,EAC3CskB,EAAOnD,EAAMnhB,CAAC,EACdskB,EAAK,MAAQ,KAAK,oBAAoBA,EAAK,MAAOtkB,EAAGmhB,CAAK,CAE9D,CACA,mBAAmBje,EAAO,CACxB,OAAOA,IAAU,KAAO,KAAOA,EAAQ,KAAK,MAAQ,KAAK,IAAM,KAAK,IACtE,CACA,iBAAiBA,EAAO,CACtB,IAAMw3C,EAAU,KAAK,SACflgC,EAAM,KAAK,mBAAmBtX,CAAK,EACzC,OAAO,KAAK,oBAAoBw3C,EAAQ,MAAQlgC,GAAOkgC,EAAQ,MAAM,CACvE,CACA,iBAAiB/xB,EAAO,CACtB,IAAM+xB,EAAU,KAAK,SACflgC,EAAM,KAAK,mBAAmBmO,CAAK,EAAI+xB,EAAQ,OAASA,EAAQ,IACtE,OAAO,KAAK,IAAMlgC,GAAO,KAAK,IAAM,KAAK,IAC3C,CACA,cAAclH,EAAO,CACnB,IAAMqnC,EAAY,KAAK,QAAQ,MACzBC,EAAiB,KAAK,IAAI,YAAYtnC,CAAK,EAAE,MAC7Cd,EAAQoB,GAAU,KAAK,aAAa,EAAI+mC,EAAU,YAAcA,EAAU,WAAW,EACrFE,EAAc,KAAK,IAAIroC,CAAK,EAC5BsoC,EAAc,KAAK,IAAItoC,CAAK,EAC5BuoC,EAAe,KAAK,wBAAwB,CAAC,EAAE,KACrD,MAAO,CACL,EAAGH,EAAiBC,EAAcE,EAAeD,EACjD,EAAGF,EAAiBE,EAAcC,EAAeF,CACnD,CACF,CACA,kBAAkBG,EAAa,CAC7B,IAAMjB,EAAW,KAAK,QAAQ,KACxBkB,EAAiBlB,EAAS,eAC1BK,EAASa,EAAelB,EAAS,IAAI,GAAKkB,EAAe,YACzDC,EAAe,KAAK,oBAAoBF,EAAa,EAAGpB,GAAoB,KAAM,CAACoB,CAAW,EAAG,KAAK,UAAU,EAAGZ,CAAM,EACzHptC,EAAO,KAAK,cAAckuC,CAAY,EACtClC,EAAW,KAAK,MAAM,KAAK,aAAa,EAAI,KAAK,MAAQhsC,EAAK,EAAI,KAAK,OAASA,EAAK,CAAC,EAAI,EAChG,OAAOgsC,EAAW,EAAIA,EAAW,CACnC,CACA,mBAAoB,CAClB,IAAIM,EAAa,KAAK,OAAO,MAAQ,CAAC,EAClCt5C,EAAG2E,EACP,GAAI20C,EAAW,OACb,OAAOA,EAET,IAAMh0B,EAAQ,KAAK,wBAAwB,EAC3C,GAAI,KAAK,aAAeA,EAAM,OAC5B,OAAO,KAAK,OAAO,KAAOA,EAAM,CAAC,EAAE,WAAW,mBAAmB,IAAI,EAEvE,IAAKtlB,EAAI,EAAG2E,EAAO2gB,EAAM,OAAQtlB,EAAI2E,EAAM,EAAE3E,EAC3Cs5C,EAAaA,EAAW,OAAOh0B,EAAMtlB,CAAC,EAAE,WAAW,mBAAmB,IAAI,CAAC,EAE7E,OAAO,KAAK,OAAO,KAAO,KAAK,UAAUs5C,CAAU,CACrD,CACA,oBAAqB,CACnB,IAAMA,EAAa,KAAK,OAAO,QAAU,CAAC,EACtCt5C,EAAG2E,EACP,GAAI20C,EAAW,OACb,OAAOA,EAET,IAAMzvC,EAAS,KAAK,UAAU,EAC9B,IAAK7J,EAAI,EAAG2E,EAAOkF,EAAO,OAAQ7J,EAAI2E,EAAM,EAAE3E,EAC5Cs5C,EAAW,KAAKd,GAAM,KAAM3uC,EAAO7J,CAAC,CAAC,CAAC,EAExC,OAAO,KAAK,OAAO,OAAS,KAAK,YAAcs5C,EAAa,KAAK,UAAUA,CAAU,CACvF,CACA,UAAU52C,EAAQ,CAChB,OAAO6J,GAAa7J,EAAO,KAAK61C,EAAM,CAAC,CACzC,CACF,CACA,OAAOsB,CACT,GAAG,EACH,SAASsB,GAAYC,EAAOtrC,EAAKnM,EAAS,CACxC,IAAIuU,EAAK,EACLC,EAAKijC,EAAM,OAAS,EACpBC,EAAYC,EAAYC,EAAYC,EACpC73C,GACEmM,GAAOsrC,EAAMljC,CAAE,EAAE,KAAOpI,GAAOsrC,EAAMjjC,CAAE,EAAE,MAC1C,CACC,GAAAD,EACA,GAAAC,CACF,EAAIT,GAAa0jC,EAAO,MAAOtrC,CAAG,GAEnC,CACC,IAAKurC,EACL,KAAME,CACR,EAAIH,EAAMljC,CAAE,EACX,CACC,IAAKojC,EACL,KAAME,CACR,EAAIJ,EAAMjjC,CAAE,IAERrI,GAAOsrC,EAAMljC,CAAE,EAAE,MAAQpI,GAAOsrC,EAAMjjC,CAAE,EAAE,OAC3C,CACC,GAAAD,EACA,GAAAC,CACF,EAAIT,GAAa0jC,EAAO,OAAQtrC,CAAG,GAEpC,CACC,KAAMurC,EACN,IAAKE,CACP,EAAIH,EAAMljC,CAAE,EACX,CACC,KAAMojC,EACN,IAAKE,CACP,EAAIJ,EAAMjjC,CAAE,GAEd,IAAMsjC,EAAOH,EAAaD,EAC1B,OAAOI,EAAOF,GAAcC,EAAaD,IAAezrC,EAAMurC,GAAcI,EAAOF,CACrF,CACA,IAAMG,GAAN,cAA8B7B,EAAU,CACtC,OAAO,GAAK,aACZ,OAAO,SAAWA,GAAU,SAC5B,YAAY52C,EAAO,CACjB,MAAMA,CAAK,EACX,KAAK,OAAS,CAAC,EACf,KAAK,QAAU,OACf,KAAK,YAAc,MACrB,CACA,aAAc,CACZ,IAAMq2C,EAAa,KAAK,uBAAuB,EACzC8B,EAAQ,KAAK,OAAS,KAAK,iBAAiB9B,CAAU,EAC5D,KAAK,QAAU6B,GAAYC,EAAO,KAAK,GAAG,EAC1C,KAAK,YAAcD,GAAYC,EAAO,KAAK,GAAG,EAAI,KAAK,QACvD,MAAM,YAAY9B,CAAU,CAC9B,CACA,iBAAiBA,EAAY,CAC3B,GAAM,CACJ,IAAA11C,EACA,IAAAC,CACF,EAAI,KACE9D,EAAQ,CAAC,EACTq7C,EAAQ,CAAC,EACXp7C,EAAG2E,EAAMgF,EAAM+C,EAAMW,EACzB,IAAKrN,EAAI,EAAG2E,EAAO20C,EAAW,OAAQt5C,EAAI2E,EAAM,EAAE3E,EAChD0M,EAAO4sC,EAAWt5C,CAAC,EACf0M,GAAQ9I,GAAO8I,GAAQ7I,GACzB9D,EAAM,KAAK2M,CAAI,EAGnB,GAAI3M,EAAM,OAAS,EACjB,MAAO,CAAC,CACN,KAAM6D,EACN,IAAK,CACP,EAAG,CACD,KAAMC,EACN,IAAK,CACP,CAAC,EAEH,IAAK7D,EAAI,EAAG2E,EAAO5E,EAAM,OAAQC,EAAI2E,EAAM,EAAE3E,EAC3CqN,EAAOtN,EAAMC,EAAI,CAAC,EAClB2J,EAAO5J,EAAMC,EAAI,CAAC,EAClB0M,EAAO3M,EAAMC,CAAC,EACV,KAAK,OAAOqN,EAAO1D,GAAQ,CAAC,IAAM+C,GACpC0uC,EAAM,KAAK,CACT,KAAM1uC,EACN,IAAK1M,GAAK2E,EAAO,EACnB,CAAC,EAGL,OAAOy2C,CACT,CACA,WAAY,CACV,IAAMx3C,EAAM,KAAK,IACXC,EAAM,KAAK,IACby1C,EAAa,MAAM,kBAAkB,EACzC,OAAI,CAACA,EAAW,SAAS11C,CAAG,GAAK,CAAC01C,EAAW,SAC3CA,EAAW,OAAO,EAAG,EAAG11C,CAAG,GAEzB,CAAC01C,EAAW,SAASz1C,CAAG,GAAKy1C,EAAW,SAAW,IACrDA,EAAW,KAAKz1C,CAAG,EAEdy1C,EAAW,KAAK,CAAC9sC,EAAGlI,IAAMkI,EAAIlI,CAAC,CACxC,CACA,wBAAyB,CACvB,IAAIg1C,EAAa,KAAK,OAAO,KAAO,CAAC,EACrC,GAAIA,EAAW,OACb,OAAOA,EAET,IAAMh0C,EAAO,KAAK,kBAAkB,EAC9BgO,EAAQ,KAAK,mBAAmB,EACtC,OAAIhO,EAAK,QAAUgO,EAAM,OACvBgmC,EAAa,KAAK,UAAUh0C,EAAK,OAAOgO,CAAK,CAAC,EAE9CgmC,EAAah0C,EAAK,OAASA,EAAOgO,EAEpCgmC,EAAa,KAAK,OAAO,IAAMA,EACxBA,CACT,CACA,mBAAmBp2C,EAAO,CACxB,OAAQi4C,GAAY,KAAK,OAAQj4C,CAAK,EAAI,KAAK,SAAW,KAAK,WACjE,CACA,iBAAiBylB,EAAO,CACtB,IAAM+xB,EAAU,KAAK,SACf9xB,EAAU,KAAK,mBAAmBD,CAAK,EAAI+xB,EAAQ,OAASA,EAAQ,IAC1E,OAAOS,GAAY,KAAK,OAAQvyB,EAAU,KAAK,YAAc,KAAK,QAAS,EAAI,CACjF,CACF,EACIthB,GAAsB,OAAO,OAAO,CACtC,UAAW,KACX,cAAe4qC,GACf,YAAakC,GACb,iBAAkBiB,GAClB,kBAAmBqC,GACnB,UAAWmC,GACX,gBAAiB6B,EACnB,CAAC,EACKC,GAAgB,CAAC7kC,GAAapM,GAAUkkB,GAAStnB,EAAM,ECz2X7D,SAASs0C,GAAcC,EAAO,CAC5B,GAAI,CAACA,GAAS,OAAOA,GAAU,SAC7B,MAAO,GAET,IAAMC,EAAQ,OAAO,eAAeD,CAAK,EAEzC,OAD2BC,IAAU,MAAQA,IAAU,OAAO,WAAa,OAAO,eAAeA,CAAK,IAAM,KAIrG,OAAO,UAAU,SAAS,KAAKD,CAAK,IAAM,kBAFxC,EAGX,CCVA,SAASE,GAAiBC,EAAK,CAC7B,OAAOA,IAAQ,WACjB,CCAA,SAASC,GAAMC,EAAQC,EAAQ,CAC7B,IAAMC,EAAa,OAAO,KAAKD,CAAM,EACrC,QAASE,EAAI,EAAGA,EAAID,EAAW,OAAQC,IAAK,CAC1C,IAAMC,EAAMF,EAAWC,CAAC,EACxB,GAAIE,GAAiBD,CAAG,EACtB,SAEF,IAAME,EAAcL,EAAOG,CAAG,EACxBG,EAAcP,EAAOI,CAAG,EAC1BI,GAAiBF,CAAW,GAAKE,GAAiBD,CAAW,EAC/DP,EAAOI,CAAG,EAAIL,GAAMQ,EAAaD,CAAW,EACnC,MAAM,QAAQA,CAAW,EAClCN,EAAOI,CAAG,EAAIL,GAAM,CAAC,EAAGO,CAAW,EAC1BG,GAAcH,CAAW,EAClCN,EAAOI,CAAG,EAAIL,GAAM,CAAC,EAAGO,CAAW,GAC1BC,IAAgB,QAAaD,IAAgB,UACtDN,EAAOI,CAAG,EAAIE,EAElB,CACA,OAAON,CACT,CACA,SAASQ,GAAiBE,EAAO,CAC/B,OAAOD,GAAcC,CAAK,GAAK,MAAM,QAAQA,CAAK,CACpD,CClBA,IAAMC,GAAuC,IAAIC,GAAe,4BAA4B,EAI5F,SAASC,MAA4BC,EAAiB,CACpD,MAAO,CACL,cAAe,CAAC,GAAGC,GAAe,GAAGD,CAAe,CACtD,CACF,CAKA,SAASE,MAAiBC,EAAgB,CACxC,IAAMC,EAASD,EAAe,OAAOE,GAAO,CAAC,CAAC,EAC9C,MAAO,CACL,QAASR,GACT,SAAUO,CACZ,CACF,CACA,IAAIE,IAA6B,IAAM,CACrC,MAAMA,CAAa,CACjB,aAAc,CACZ,KAAK,oBAAsB,IAAIC,GAAgB,MAAS,CAC1D,CACA,uBAAuBC,EAAS,CAC9B,KAAK,qBAAuBA,EAC5B,KAAK,oBAAoB,KAAKA,CAAO,CACvC,CACA,wBAAyB,CACvB,OAAO,KAAK,oBACd,CACA,MAAO,CACL,KAAK,UAAO,SAA8BC,EAAmB,CAC3D,OAAO,IAAKA,GAAqBH,EACnC,CACF,CACA,MAAO,CACL,KAAK,WAA0BI,GAAmB,CAChD,MAAOJ,EACP,QAASA,EAAa,UACtB,WAAY,MACd,CAAC,CACH,CACF,CACA,OAAOA,CACT,GAAG,EAICK,IAAmC,IAAM,CAC3C,MAAMA,CAAmB,CACvB,aAAc,CACZ,KAAK,KAAO,MACZ,KAAK,QAAU,CAAC,EAChB,KAAK,WAAa,IAAIC,GACtB,KAAK,WAAa,IAAIA,GACtB,KAAK,IAAM,KACX,KAAK,KAAO,CAAC,EACb,KAAK,eAAiB,CAAC,EACvB,KAAK,QAAUC,GAAOC,EAAU,EAChC,KAAK,KAAOD,GAAOE,EAAM,EACzB,KAAK,aAAeF,GAAOP,EAAY,EACvC,KAAK,OAASO,GAAOhB,GAAyB,CAC5C,SAAU,EACZ,CAAC,EACD,KAAK,WAAagB,GAAOG,EAAW,EACpC,KAAK,UAAYC,GAAkB,KAAK,UAAU,EAC9C,KAAK,QAAQ,eACfC,GAAM,SAAS,GAAG,KAAK,OAAO,aAAa,EAEzC,KAAK,QAAQ,UACfC,EAAS,IAAI,KAAK,OAAO,QAAQ,EAG/B,KAAK,YACP,KAAK,IAAM,KAAK,QAAQ,cAAc,WAAW,IAAI,GAEvD,KAAK,KAAK,KAAK,KAAK,aAAa,oBAAoB,KAAKC,GAAqB,CAAC,EAAE,UAAUC,GAAK,KAAK,aAAaA,CAAC,CAAC,CAAC,CACxH,CACA,YAAYC,EAAS,CACnB,GAAI,CAAC,KAAK,UACR,OAEF,IAAMC,EAAgB,CAAC,MAAM,EACvBC,EAAgB,OAAO,oBAAoBF,CAAO,EACxD,GAAIE,EAAc,KAAKC,GAAOF,EAAc,SAASE,CAAG,CAAC,GAAKD,EAAc,MAAMC,GAAOH,EAAQG,CAAG,EAAE,cAAc,CAAC,EACnH,KAAK,OAAO,UAGR,KAAK,OAASH,EAAQ,OAAW,CACnC,IAAMlB,EAAS,KAAK,sBAAsB,EACtCA,EAAO,UACT,KAAK,MAAM,QAAUA,EAAO,SAE9B,KAAK,OAAO,CACd,SAAW,KAAK,MAAO,CACrB,IAAMA,EAAS,KAAK,sBAAsB,EAEtCA,EAAO,MAAQ,KAAK,MAAM,OAAO,MACnC,OAAO,OAAO,KAAK,MAAM,OAAO,KAAMA,EAAO,IAAI,EAE/CA,EAAO,SAAW,KAAK,MAAM,OAAO,SACtC,OAAO,OAAO,KAAK,MAAM,OAAO,QAASA,EAAO,OAAO,EAErDA,EAAO,SAAW,KAAK,MAAM,OAAO,SACtC,OAAO,OAAO,KAAK,MAAM,OAAO,QAASA,EAAO,OAAO,EAEzD,KAAK,OAAO,CACd,CAEJ,CACA,aAAc,CACR,KAAK,QACP,KAAK,MAAM,QAAQ,EACnB,KAAK,MAAQ,QAEf,KAAK,KAAK,QAAQsB,GAAKA,EAAE,YAAY,CAAC,CACxC,CACA,QAAS,CACP,GAAI,GAAC,KAAK,WAAa,CAAC,KAAK,KAG7B,OAAI,KAAK,OACP,KAAK,MAAM,QAAQ,EAEd,KAAK,KAAK,kBAAkB,IAAM,KAAK,MAAQ,IAAIR,GAAM,KAAK,IAAK,KAAK,sBAAsB,CAAC,CAAC,CACzG,CACA,OAAOS,EAAM,CACP,KAAK,OAAS,KAAK,WACrB,KAAK,KAAK,kBAAkB,IAAM,KAAK,OAAO,OAAOA,CAAI,CAAC,CAE9D,CACA,YAAYC,EAAOC,EAAQ,CACrB,KAAK,OAAS,KAAK,YACrB,KAAK,MAAM,eAAeD,CAAK,EAAE,OAASC,EAC1C,KAAK,OAAO,EAEhB,CACA,gBAAgBD,EAAO,CACrB,OAAO,KAAK,OAAO,eAAeA,CAAK,GAAG,MAC5C,CACA,eAAgB,CACd,OAAO,KAAK,OAAO,cAAc,CACnC,CACA,aAAapB,EAAS,CACpB,KAAK,eAAiBA,EAClB,KAAK,QACH,KAAK,MAAM,OAAO,SACpB,OAAO,OAAO,KAAK,MAAM,OAAO,QAAS,KAAK,gBAAgB,CAAC,EAEjE,KAAK,OAAO,EAEhB,CACA,iBAAkB,CAChB,MAAO,CAAC,CACN,QAAS,CAACsB,EAAOC,IAAW,CACtB,CAAC,KAAK,WAAW,UAAY,CAAC,KAAK,WAAW,WAAW,QAG7D,KAAK,KAAK,IAAI,IAAM,KAAK,WAAW,KAAK,CACvC,MAAAD,EACA,OAAAC,CACF,CAAC,CAAC,CACJ,EACA,QAAS,CAACD,EAAOC,IAAW,CACtB,CAAC,KAAK,WAAW,UAAY,CAAC,KAAK,WAAW,WAAW,QAG7D,KAAK,KAAK,IAAI,IAAM,KAAK,WAAW,KAAK,CACvC,MAAAD,EACA,OAAAC,CACF,CAAC,CAAC,CACJ,CACF,EAAG,KAAK,gBAAkB,CAAC,EAAG,KAAK,SAAW,CAAC,EAAG,CAChD,QAAS,CACP,OAAQ,CACN,QAAS,KAAK,MAChB,CACF,CACF,CAAC,EAAE,OAAO1B,GAAO,CAAC,CAAC,CACrB,CACA,uBAAwB,CACtB,MAAO,CACL,KAAM,KAAK,KACX,KAAM,KAAK,aAAa,EACxB,QAAS,KAAK,gBAAgB,EAC9B,QAAS,KAAK,OAChB,CACF,CACA,cAAe,CACb,OAAO,KAAK,KAAO,KAAK,KAAO,CAC7B,OAAQ,KAAK,QAAU,CAAC,EACxB,SAAU,KAAK,UAAY,CAAC,CAC9B,CACF,CACA,MAAO,CACL,KAAK,UAAO,SAAoCI,EAAmB,CACjE,OAAO,IAAKA,GAAqBE,EACnC,CACF,CACA,MAAO,CACL,KAAK,UAAyBqB,GAAkB,CAC9C,KAAMrB,EACN,UAAW,CAAC,CAAC,SAAU,YAAa,EAAE,CAAC,EACvC,OAAQ,CACN,KAAM,OACN,OAAQ,SACR,KAAM,OACN,QAAS,UACT,QAAS,UACT,OAAQ,SACR,SAAU,UACZ,EACA,QAAS,CACP,WAAY,aACZ,WAAY,YACd,EACA,SAAU,CAAC,YAAY,EACvB,SAAU,CAAIsB,EAAoB,CACpC,CAAC,CACH,CACF,CACA,OAAOtB,CACT,GAAG",names:["round","v","lim","l","h","p2b","n2b","v","lim","round","b2n","n2p","map$1","hex","h1","b","h2","eq","isShort","hexParse","str","len","ret","alpha","a","f","hexString","HUE_RE","hsl2rgbn","h","s","l","n","k","hsv2rgbn","hwb2rgbn","w","rgb","i","hueValue","r","g","d","max","rgb2hsl","min","calln","c","hsl2rgb","hwb2rgb","hsv2rgb","hue","hueParse","m","p2b","p1","p2","rotate","deg","hslString","map","names$1","unpack","unpacked","keys","tkeys","j","ok","nk","names","nameParse","RGB_RE","rgbParse","rgbString","to","from","interpolate","rgb1","rgb2","modHSL","ratio","tmp","clone","proto","fromObject","input","functionParse","Color","_Color","type","obj","color","weight","c1","c2","w2","p","w1","val","noop","uid","id","isNullOrUndef","value","isArray","type","isObject","isNumberFinite","finiteOrDefault","defaultValue","valueOrDefault","toPercentage","dimension","toDimension","callback","fn","args","thisArg","each","loopable","reverse","i","len","keys","_elementsEqual","a0","a1","ilen","v0","v1","clone","source","target","klen","k","isValidKey","key","_merger","options","tval","sval","merge","sources","merger","current","mergeIf","_mergerIf","keyResolvers","v","o","_splitKey","key","parts","keys","tmp","part","_getKeyResolver","obj","k","resolveObjectKey","_capitalize","str","defined","value","isFunction","setsEqual","a","b","item","_isClickEvent","PI","TAU","PITAU","INFINITY","RAD_PER_DEG","HALF_PI","QUARTER_PI","TWO_THIRDS_PI","log10","sign","almostEquals","x","y","epsilon","niceNum","range","roundedRange","niceRange","fraction","_factorize","result","sqrt","i","isNonPrimitive","n","isNumber","almostWhole","rounded","_setMinAndMaxByKey","array","target","property","ilen","toRadians","degrees","toDegrees","radians","_decimalPlaces","isNumberFinite","e","p","getAngleFromPoint","centrePoint","anglePoint","distanceFromXCenter","distanceFromYCenter","radialDistanceFromCenter","angle","distanceBetweenPoints","pt1","pt2","_angleDiff","_normalizeAngle","_angleBetween","start","end","sameAngleIsFullCircle","s","angleToStart","angleToEnd","startToAngle","endToAngle","_limitValue","min","max","_int16Range","_isBetween","_lookup","table","cmp","index","hi","lo","mid","_lookupByKey","last","ti","_rlookupByKey","_filterBetween","values","arrayEvents","listenArrayEvents","listener","method","base","args","res","object","unlistenArrayEvents","stub","listeners","_arrayUnique","items","set","requestAnimFrame","callback","throttled","fn","thisArg","argsToUse","ticking","args","debounce","delay","timeout","_toLeftRightCenter","align","_alignStartEnd","start","end","_textX","left","right","rtl","_getStartAndCountOfVisiblePoints","meta","points","animationsDisabled","pointCount","count","iScale","vScale","_parsed","spanGaps","axis","min","max","minDefined","maxDefined","_lookupByKey","distanceToDefinedLo","point","isNullOrUndef","_limitValue","distanceToDefinedHi","_scaleRangesChanged","xScale","yScale","_scaleRanges","newRanges","changed","atEdge","t","elasticIn","s","p","TAU","elasticOut","effects","HALF_PI","PI","isPatternOrGradient","value","type","color","Color","getHoverColor","numbers","colors","applyAnimationsDefaults","defaults","name","v","applyLayoutsDefaults","intlCache","getNumberFormat","locale","options","cacheKey","formatter","formatNumber","num","formatters","isArray","tickValue","index","ticks","notation","delta","maxTick","calculateDelta","logDelta","log10","numDecimal","remain","Ticks","applyScaleDefaults","_ctx","overrides","descriptors","getScope$1","node","key","keys","i","k","set","root","scope","values","merge","Defaults","_descriptors","_appliers","context","ctx","targetScope","targetName","scopeObject","targetScopeObject","privateName","local","target","isObject","valueOrDefault","appliers","apply","toFontString","font","_measureText","data","gc","longest","string","textWidth","_longestText","arrayOfThings","cache","ilen","j","jlen","thing","nestedThing","gcLen","_alignPixel","chart","pixel","width","devicePixelRatio","halfWidth","clearCanvas","canvas","drawPoint","x","y","drawPointLegend","w","xOffset","yOffset","size","cornerRadius","xOffsetW","yOffsetW","style","rotation","radius","rad","RAD_PER_DEG","TWO_THIRDS_PI","QUARTER_PI","_isPointInArea","area","margin","clipArea","unclipArea","_steppedLineTo","previous","flip","mode","midpoint","_bezierCurveTo","setRenderOpts","opts","decorateText","line","metrics","top","bottom","yDecoration","drawBackdrop","oldColor","renderText","text","lines","stroke","addRoundedRectPath","rect","h","LINE_HEIGHT","FONT_STYLE","toLineHeight","matches","numberOrZero","_readValueToProps","props","ret","objProps","read","prop","toTRBL","toTRBLCorners","toPadding","obj","toFont","fallback","resolve","inputs","info","cacheable","_addGrace","minmax","grace","beginAtZero","change","toDimension","keepZero","add","createContext","parentContext","_createResolver","scopes","prefixes","rootScopes","getTarget","finalRootScopes","_resolve","_cached","_resolveWithPrefixes","getKeysFromAllScopes","storage","_attachContext","proxy","subProxy","descriptorDefaults","receiver","_resolveWithContext","_scriptable","_indexable","_allKeys","isFunction","readKey","prefix","_capitalize","needsSubResolver","_proxy","_context","_subProxy","_resolveScriptable","_resolveArray","getValue","_stack","createSubResolver","isIndexable","arr","item","resolver","resolveFallback","getScope","parent","resolveObjectKey","addScopes","parentScopes","parentFallback","allScopes","addScopesFromKey","subGetTarget","resolveKeysFromAllScopes","_parseObjectDataRadialScale","parsed","EPSILON","getPoint","getValueAxis","indexAxis","splineCurve","firstPoint","middlePoint","afterPoint","current","next","d01","distanceBetweenPoints","d12","s01","s12","fa","fb","monotoneAdjust","deltaK","mK","pointsLen","alphaK","betaK","tauK","squaredMagnitude","pointCurrent","pointAfter","almostEquals","monotoneCompute","valueAxis","pointBefore","iPixel","vPixel","splineCurveMonotone","slopeDelta","sign","capControlPoint","pt","capBezierPoints","inArea","inAreaPrev","inAreaNext","_updateBezierControlPoints","loop","controlPoints","prev","_isDomSupported","_getParentNode","domNode","parseMaxStyle","styleValue","parentProperty","valueInPixels","getComputedStyle","element","getStyle","el","property","positions","getPositionedStyle","styles","suffix","result","pos","useOffsetPos","getCanvasPosition","touches","source","offsetX","offsetY","box","getRelativePosition","event","currentDevicePixelRatio","borderBox","paddings","borders","height","getContainerSize","maxWidth","maxHeight","container","containerStyle","containerBorder","containerPadding","INFINITY","round1","getMaximumSize","bbWidth","bbHeight","aspectRatio","margins","containerSize","retinaScale","forceRatio","forceStyle","pixelRatio","deviceHeight","deviceWidth","supportsEventListenerOptions","passiveSupported","readUsedSize","_pointInLine","p1","p2","_steppedInterpolation","_bezierInterpolation","cp1","cp2","a","b","c","d","e","getRightToLeftAdapter","rectX","itemWidth","getLeftToRightAdapter","_itemWidth","getRtlAdapter","overrideTextDirection","direction","original","restoreTextDirection","propertyFn","_angleBetween","_angleDiff","_normalizeAngle","_isBetween","normalizeSegment","getSegment","segment","bounds","startBound","endBound","between","normalize","_boundSegment","compare","inside","subStart","prevValue","startIsBefore","endIsBefore","shouldStart","shouldStop","_boundSegments","segments","sub","findStartAndEnd","solidSegments","last","cur","_computeSegments","segmentOptions","splitByStyles","completeLoop","doSplitByStyles","chartContext","baseStyle","readStyle","datasetIndex","prevStyle","addStyle","l","st","dir","styleChanged","replacer","getSizeForArea","scale","chartArea","field","getDatasetArea","getDatasetClipArea","clip","Animator","chart","anims","date","type","callbacks","numSteps","fn","requestAnimFrame","remaining","items","i","draw","item","charts","event","cb","acc","cur","animator","transparent","interpolators","from","to","factor","c0","color","c1","Animation","cfg","target","prop","currentValue","resolve","effects","elapsed","remain","duration","loop","promises","res","rej","resolved","method","Animations","config","isObject","animationOptions","defaults","animatedProps","key","option","isArray","values","newOptions","options","resolveTargetOptions","animations","awaitAll","running","props","value","animation","properties","keys","anim","scaleClip","scale","allowedOverflow","opts","reverse","min","max","defaultClip","xScale","yScale","x","y","toClip","t","r","b","l","getSortedDatasetIndices","filterVisible","metasets","ilen","applyStack","stack","dsIndex","singleMode","datasetIndex","otherValue","found","isNumberFinite","sign","convertObjectDataToArray","data","meta","iScale","vScale","iAxisKey","vAxisKey","adata","isStacked","stacked","getStackKey","indexScale","valueScale","getUserBounds","minDefined","maxDefined","getOrCreateStack","stacks","stackKey","indexValue","subStack","getLastIndexInStack","positive","updateStacks","controller","parsed","iAxis","vAxis","index","itemStacks","visualValues","getFirstScaleId","axis","scales","createDatasetContext","parent","createContext","createDataContext","element","clearStacks","isDirectUpdateMode","mode","cloneIfNotShared","cached","shared","createStack","canStack","DatasetController","dataset","chooseId","xid","valueOrDefault","yid","rid","indexAxis","iid","vid","scaleID","unlistenArrayEvents","_data","listenArrayEvents","resetNewElements","stackChanged","oldStacked","scopeKeys","scopes","start","count","_stacked","sorted","prev","isNotInOrderComparedToPrev","labels","singleScale","xAxisKey","yAxisKey","resolveObjectKey","range","parsedValue","_parsed","otherScale","otherMin","otherMax","_skip","ctx","elements","area","active","drawActiveElementsOnTop","context","elementType","cache","cacheKey","sharing","defined","prefixes","names","transition","sharedOptions","firstOpts","previouslySharedOptions","includeOptions","arg1","arg2","numMeta","numData","end","move","arr","removed","args","newCount","getAllScaleValues","visibleMetas","_arrayUnique","a","computeMinSampleSize","curr","updateMinAndPrev","computeFitCategoryTraits","ruler","stackCount","thickness","size","ratio","isNullOrUndef","computeFlexCategoryTraits","pixels","next","percent","parseFloatBar","entry","startValue","endValue","barStart","barEnd","parseValue","parseArrayOrPrimitive","isFloatBar","custom","barSign","actualBase","borderProps","top","bottom","setBorderSkipped","edge","parseEdge","swap","startEnd","orig","v1","v2","v","setInflateAmount","inflateAmount","BarController","obj","bars","reset","base","horizontal","vpixels","ipixels","last","dataIndex","currentParsed","iScaleValue","skipNull","val","indexScaleId","firstScaleAxisId","name","barThickness","baseValue","minBarLength","floating","length","head","startPixel","endPixel","halfGrid","maxBarThickness","center","axisCount","axisID","axisNumber","stackIndex","rects","BubbleController","points","point","iPixel","vPixel","radius","getRatioAndOffset","rotation","circumference","cutout","ratioX","ratioY","offsetX","offsetY","TAU","startAngle","endAngle","startX","startY","endX","endY","calcMax","angle","_angleBetween","calcMin","maxX","maxY","HALF_PI","minX","PI","minY","DoughnutController","pointStyle","textAlign","useBorderRadius","borderRadius","label","style","e","legendItem","legend","getter","toRadians","chartArea","arcs","spacing","maxSize","toPercentage","chartWeight","maxWidth","maxHeight","maxRadius","outerRadius","toDimension","innerRadius","radiusLength","animationOpts","centerX","centerY","animateScale","arc","metaData","total","formatNumber","ringWeightOffset","LineController","line","_dataset","animationsDisabled","_getStartAndCountOfVisiblePoints","_scaleRangesChanged","spanGaps","segment","maxGapLength","isNumber","directUpdate","pointsCount","prevParsed","nullData","border","firstPoint","lastPoint","PolarAreaController","_parseObjectDataRadialScale","minSize","datasetStartAngle","defaultAngle","PieController","RadarController","pointPosition","ScatterController","showLine","controllers","abstract","DateAdapterBase","_DateAdapterBase","members","adapters","binarySearch","metaset","intersect","_sorted","lookupMethod","_rlookupByKey","_lookupByKey","el","result","distanceToDefinedLo","distanceToDefinedHi","evaluateInteractionItems","position","handler","lo","hi","j","getDistanceMetricForAxis","useX","useY","pt1","pt2","deltaX","deltaY","getIntersectItems","useFinalPosition","includeInvisible","_isPointInArea","getNearestRadialItems","evaluationFunc","getAngleFromPoint","getNearestCartesianItems","distanceMetric","minDistance","inRange","distance","getNearestItems","getAxisItems","rangeMethod","intersectsItem","Interaction","getRelativePosition","STATIC_POSITIONS","filterByPosition","array","filterDynamicPositionByAxis","sortByWeight","v0","wrapBoxes","boxes","layoutBoxes","box","pos","stackWeight","buildStacks","layouts","wrap","_stack","setLayoutDims","params","vBoxMaxWidth","hBoxMaxHeight","layout","fullSize","buildLayoutBoxes","left","right","centerHorizontal","centerVertical","getCombinedMax","maxPadding","updateMaxPadding","boxPadding","updateDims","newWidth","newHeight","widthChanged","heightChanged","handleMaxPadding","updatePos","change","getMargins","marginForPositions","positions","margin","fitBoxes","refitBoxes","refit","changed","same","other","setBoxDims","width","height","placeBoxes","userPadding","weight","layoutItem","minPadding","padding","toPadding","availableWidth","availableHeight","verticalBoxes","horizontalBoxes","each","visibleVerticalBoxCount","BasePlatform","canvas","aspectRatio","listener","BasicPlatform","EXPANDO_KEY","EVENT_TYPES","isNullOrEmpty","initCanvas","renderHeight","renderWidth","displayWidth","readUsedSize","displayHeight","eventListenerOptions","supportsEventListenerOptions","addListener","node","removeListener","fromNativeEvent","nodeListContains","nodeList","createAttachObserver","observer","entries","trigger","createDetachObserver","drpListeningCharts","oldDevicePixelRatio","onWindowResize","dpr","resize","listenDevicePixelRatioChanges","unlistenDevicePixelRatioChanges","createResizeObserver","container","_getParentNode","throttled","w","releaseObserver","createProxyAndListen","proxy","DomPlatform","initial","proxies","getMaximumSize","_detectPlatform","_isDomSupported","Element","final","ret","autoSkip","ticks","tickOpts","determinedMaxTicks","determineMaxTicks","ticksLimit","majorIndices","getMajorIndices","numMajorIndices","first","newTicks","skipMajors","calculateSpacing","avgMajorSpacing","skip","offset","tickLength","maxScale","maxChart","evenMajorSpacing","getEvenSpacing","factors","_factorize","majorStart","majorEnd","len","diff","reverseAlign","align","offsetFromEdge","getTicksLimit","ticksLength","maxTicksLimit","sample","numItems","increment","getPixelForGridLine","offsetGridLines","validIndex","epsilon","lineValue","garbageCollect","caches","gc","gcLen","getTickMarkLength","getTitleHeight","fallback","font","toFont","createScaleContext","createTickContext","tick","titleAlign","_toLeftRightCenter","titleArgs","titleX","titleY","_alignStartEnd","positionAxisID","Scale","_Scale","raw","_userMin","_userMax","_suggestedMin","_suggestedMax","finiteOrDefault","metas","callback","margins","beginAtZero","grace","sampleSize","_addGrace","samplingEnabled","reversePixels","numTicks","minRotation","maxRotation","labelRotation","tickWidth","maxLabelDiagonal","labelSizes","maxLabelWidth","maxLabelHeight","_limitValue","toDegrees","titleOpts","gridOpts","display","isHorizontal","titleHeight","widest","highest","tickPadding","angleRadians","cos","sin","labelHeight","labelWidth","isRotated","labelsBelowTicks","offsetLeft","offsetRight","paddingLeft","paddingRight","paddingTop","paddingBottom","widths","heights","widestLabelSize","highestLabelSize","jlen","tickFont","fontString","lineHeight","nestedLabel","_measureText","valueAt","idx","pixel","decimal","_int16Range","_alignPixel","optionTicks","rot","h","grid","tl","borderOpts","axisWidth","axisHalfWidth","alignBorderValue","borderValue","alignedLineValue","tx1","ty1","tx2","ty2","x1","y1","x2","y2","limit","step","optsAtIndex","optsAtIndexBorder","lineWidth","lineColor","borderDash","borderDashOffset","tickColor","tickBorderDash","tickBorderDashOffset","crossAlign","mirror","tickAndPadding","hTickAndPadding","lineCount","textOffset","textBaseline","halfCount","strokeColor","strokeWidth","tickTextAlign","backdrop","labelPadding","backgroundColor","drawLine","p1","p2","lastLineWidth","clipArea","renderTextOptions","renderText","unclipArea","title","tz","gz","bz","fontSize","TypedRegistry","scope","override","proto","parentScope","isIChartComponent","id","registerDefaults","overrides","itemDefaults","merge","routeDefaults","routes","property","propertyParts","sourceName","sourceScope","parts","targetName","targetScope","Registry","typedRegistry","arg","reg","itemReg","registry","component","camelMethod","_capitalize","PluginService","hook","filter","descriptors","descriptor","plugin","all","plugins","allPlugins","createDescriptors","previousDescriptors","localIds","local","getOpts","pluginOpts","getIndexAxis","datasetDefaults","getAxisFromDefaultScaleID","getDefaultScaleIDFromAxis","idMatchesAxis","axisFromPosition","determineAxis","scaleOptions","getAxisFromDataset","retrieveAxisFromDatasets","boundDs","d","mergeScaleConfig","chartDefaults","configScales","chartIndexAxis","scaleConf","defaultId","defaultScaleOptions","mergeIf","defaultID","initOptions","initData","initConfig","keyCache","keysCached","cachedKeys","generate","addIfFound","set","Config","datasetType","mainScope","resetCache","_scopeCache","keyLists","resolver","subPrefixes","getResolver","needContext","isFunction","subResolver","_attachContext","descriptorDefaults","resolverCache","_createResolver","p","hasFunction","isScriptable","isIndexable","_descriptors","scriptable","indexable","version","KNOWN_POSITIONS","positionIsHorizontal","compare2Level","l1","l2","onAnimationsComplete","onAnimationProgress","getCanvas","instances","getChart","c","moveNumericKeys","intKey","determineLastEvent","lastEvent","inChartArea","isClick","Chart","invalidatePlugins","userConfig","initialCanvas","existingChart","uid","debounce","maintainAspectRatio","_aspectRatio","retinaScale","clearCanvas","newSize","newRatio","scalesOptions","axisOptions","scaleOpts","updated","isRadial","scaleType","scaleClass","hasUpdated","datasets","newControllers","ControllerClass","datasetElementType","dataElementType","animsDisabled","_active","_lastEvent","existingEvents","newEvents","setsEqual","_hiddenIndices","changes","_dataChanges","datasetCount","makeSet","changeSet","noArea","layers","clip","getDatasetClipArea","visible","listeners","platform","_add","_remove","detached","attached","enabled","prefix","activeElements","lastActive","_elementsEqual","pluginId","replay","hoverOptions","deactivated","activated","eventFilter","_isClickEvent","clipSelf","borderWidth","borderJoinStyle","outerAngleClip","_normalizeAngle","innerAngleClip","clipWidth","clipArc","pixelMargin","angleMargin","toRadiusCorners","_readValueToProps","parseBorderRadius$1","angleDelta","o","halfThickness","innerLimit","computeOuterLimit","outerArcLimit","rThetaToXY","theta","pathArc","circular","innerR","spacingOffset","alpha","noSpacingInnerRadius","noSpacingOuterRadius","avNogSpacingRadius","adjustedAngle","beta","angleOffset","outerStart","outerEnd","innerStart","innerEnd","outerStartAdjustedRadius","outerEndAdjustedRadius","outerStartAdjustedAngle","outerEndAdjustedAngle","innerStartAdjustedRadius","innerEndAdjustedRadius","innerStartAdjustedAngle","innerEndAdjustedAngle","outerMidAdjustedAngle","pCenter","p4","innerMidAdjustedAngle","p8","outerStartX","outerStartY","outerEndX","outerEndY","drawArc","fullCircles","drawBorder","inner","ArcElement","chartX","chartY","rAdjust","_circumference","nonZeroBetween","betweenAngles","withinRadius","_isBetween","halfAngle","halfRadius","fix","radiusOffset","setStyle","lineTo","previous","getLineMethod","_steppedLineTo","_bezierCurveTo","pathVars","paramsStart","paramsEnd","segmentStart","segmentEnd","outside","pathSegment","lineMethod","fastPathSegment","avgX","countX","prevX","lastY","pointIndex","drawX","truncX","_getSegmentMethod","_getInterpolationMethod","_steppedInterpolation","_bezierInterpolation","_pointInLine","strokePathWithCache","path","strokePathDirect","segments","segmentMethod","usePath2D","LineElement","_updateBezierControlPoints","_computeSegments","_boundSegments","_interpolate","interpolated","inRange$1","PointElement","mouseX","mouseY","drawPoint","getBarBounds","bar","half","skipOrLimit","parseBorderWidth","maxW","maxH","toTRBL","parseBorderRadius","enableBorderRadius","toTRBLCorners","maxR","enableBorder","boundingRects","bounds","skipX","skipY","hasRadius","addNormalRectPath","rect","inflateRect","amount","refRect","BarElement","borderColor","outer","addRectPath","addRoundedRectPath","BORDER_COLORS","BACKGROUND_COLORS","getBorderColor","getBackgroundColor","colorizeDefaultDataset","colorizeDoughnutDataset","colorizePolarAreaDataset","getColorizer","containsColorsDefinitions","k","containsColorsDefinition","containsDefaultColorsDefenitions","plugin_colors","_args","chartOptions","containsColorDefenition","colorizer","lttbDecimation","samples","decimated","bucketWidth","sampledIndex","endIndex","maxAreaPoint","maxArea","nextA","avgY","avgRangeStart","avgRangeEnd","avgRangeLength","rangeOffs","rangeTo","pointAx","pointAy","minMaxDecimation","minIndex","maxIndex","startIndex","xMin","dx","lastIndex","intermediateIndex1","intermediateIndex2","__spreadProps","__spreadValues","cleanDecimatedDataset","cleanDecimatedData","getStartAndCountOfVisiblePointsSimplified","pointCount","plugin_decimation","xAxis","threshold","_segments","tpoints","_findSegmentEnd","_getBounds","targetSegments","tgt","subBounds","fillSources","_boundSegment","fillSource","_getEdge","_pointsFromSegments","boundary","linePoints","_createBoundaryLine","_loop","_shouldApplyFill","source","_resolveTarget","sources","propagate","fill","visited","_decodeFill","parseFillOption","decodeTargetIndex","firstCh","_getTargetPixel","_getTargetValue","fillOption","_buildStackLine","sourcePoints","linesBelow","getLinesBelow","addPointsBelow","below","sourcePoint","postponed","findPoint","pointValue","firstValue","lastValue","simpleArc","_getTarget","getLineByIndex","computeBoundary","computeCircularBoundary","computeLinearBoundary","_drawfill","lineOpts","above","doFill","fillColor","clipVertical","clipHorizontal","clipY","lineLoop","clipX","src","notShape","clipBounds","interpolatedLineTo","targetLoop","interpolatedPoint","getBoxSize","labelOpts","boxHeight","boxWidth","itemsEqual","Legend","legendItems","labelFont","itemHeight","hitboxes","lineWidths","totalHeight","row","itemWidth","_itemHeight","columnSizes","heightLimit","totalWidth","currentColWidth","currentColHeight","col","calculateItemSize","rtl","rtlHelper","getRtlAdapter","hitbox","defaultColor","halfFontSize","cursor","drawLegendBox","drawOptions","drawPointLegend","yBoxTop","xBoxLeft","fillText","overrideTextDirection","textWidth","realX","_textX","fontLineHeight","calculateLegendItemHeight","restoreTextDirection","titleFont","titlePadding","topPaddingPlusHalfFontSize","hitBox","lh","isListened","hoveredItem","sameItem","calculateItemWidth","calculateItemHeight","legendItemText","plugin_legend","ci","usePointStyle","Title","textSize","fontOpts","createTitle","plugin_title","titleBlock","map","plugin_subtitle","positioners","xSet","eventPosition","nearestElement","distanceBetweenPoints","tp","pushOrConcat","toPush","splitNewlines","str","createTooltipItem","getTooltipSize","tooltip","body","footer","bodyFont","footerFont","titleLineCount","footerLineCount","bodyLineItemCount","combinedBodyLength","bodyItem","bodyLineHeight","widthPadding","maxLineWidth","determineYAlign","doesNotFitWithAlign","xAlign","caret","determineXAlign","yAlign","chartWidth","determineAlignment","alignX","alignY","paddingAndSize","getBackgroundPoint","alignment","caretSize","caretPadding","cornerRadius","topLeft","topRight","bottomLeft","bottomRight","getAlignedX","getBeforeAfterBodyLines","createTooltipContext","tooltipItems","overrideCallbacks","defaultCallbacks","noop","labelCount","tooltipItem","invokeCallbackWithFallback","Tooltip","beforeTitle","afterTitle","lines","bodyItems","scoped","beforeFooter","afterFooter","labelColors","labelPointStyles","labelTextColors","positionAndSize","backgroundPoint","tooltipPoint","caretPosition","ptX","ptY","x3","y3","pt","titleSpacing","labelColor","labelPointStyle","colorX","rtlColorX","yOffSet","colorY","outerX","innerX","bodySpacing","bodyAlign","displayColors","xLinePadding","fillLineOfText","bodyAlignForCalculation","textColor","tooltipSize","animX","animY","opacity","hasTooltipContent","positionChanged","caretX","caretY","plugin_tooltip","addIfString","addedLabels","findOrAddLabel","_getLabelForValue","CategoryScale","added","generateTicks$1","generationOptions","dataRange","precision","maxTicks","maxDigits","includeBounds","unit","maxSpaces","rmin","rmax","countDefined","minSpacing","niceNum","niceMin","niceMax","numSpaces","almostWhole","almostEquals","decimalPlaces","_decimalPlaces","relativeLabelSize","tickValue","rad","LinearScaleBase","setMin","setMax","minSign","maxSign","stepSize","numericGeneratorOptions","_setMinAndMaxByKey","LinearScale","Ticks","log10Floor","log10","changeExponent","m","isMajor","tickVal","steps","rangeExp","rangeStep","startExp","generateTicks","minExp","exp","significand","lastTick","LogarithmicScale","getTickBackdropHeight","measureLabelSize","_longestText","determineLimits","fitWithPointLabels","limits","valueCount","pointLabelOpts","additionalAngle","plFont","hLimits","vLimits","updateLimits","buildPointLabelItems","createPointLabelItem","itemOpts","outerDistance","extra","pointLabelPosition","yForAngle","getTextAlignForAngle","leftForTextAlign","isNotOverlapped","centerPointLabels","drawPointLabelBox","backdropColor","backdropLeft","backdropTop","backdropWidth","backdropHeight","drawPointLabels","pointLabels","pathRadiusLine","drawRadiusLine","gridLineOpts","createPointLabelContext","RadialLinearScale","leftMovement","rightMovement","topMovement","bottomMovement","angleMultiplier","scalingFactor","scaledDistance","pointLabel","distanceFromCenter","angleLines","INTERVALS","UNITS","sorter","parse","input","adapter","parser","round","isoWeekday","determineUnitForAutoTicks","minUnit","capacity","interval","determineUnitForFormatting","determineMajorUnit","addTick","time","timestamps","_lookup","timestamp","setMajorTicks","majorUnit","major","ticksFromTimestamps","TimeScale","_applyBounds","timeOpts","_filterBetween","minor","weekday","hasWeekday","format","formats","fmt","formatter","minorFormat","majorFormat","offsets","ticksOpts","tickLabelWidth","cosRotation","sinRotation","tickFontSize","exampleTime","displayFormats","exampleLabel","interpolate","table","prevSource","nextSource","prevTarget","nextTarget","span","TimeSeriesScale","registerables","isPlainObject","value","proto","isUnsafeProperty","key","merge","target","source","sourceKeys","i","key","isUnsafeProperty","sourceValue","targetValue","isMergeableValue","isPlainObject","value","NG_CHARTS_CONFIGURATION","InjectionToken","withDefaultRegisterables","registerables$1","registerables","provideCharts","configurations","config","merge","ThemeService","BehaviorSubject","options","__ngFactoryType__","\u0275\u0275defineInjectable","BaseChartDirective","EventEmitter","inject","ElementRef","NgZone","PLATFORM_ID","isPlatformBrowser","Chart","defaults","distinctUntilChanged","r","changes","requireRender","propertyNames","key","s","mode","index","hidden","event","active","\u0275\u0275defineDirective","\u0275\u0275NgOnChangesFeature"],x_google_ignoreList:[0,1,2,3,4,5,6]},_coverageSchema:"1a1c01bbd47fc00a2c39e90264f33305004495a9",hash:"21d9902e1ec33cad2206cb4e38e210b3e332785a"};var coverage=global[gcv]||(global[gcv]={});if(!coverage[path]||coverage[path].hash!==hash){coverage[path]=coverageData;}var actualCoverage=coverage[path];{// @ts-ignore +cov_2dj4df7l8y=function(){return actualCoverage;};}return actualCoverage;}cov_2dj4df7l8y();import{l as Ns}from"./chunk-F6OGAIBI.js";import{L as Rs,Ma as Ws,O as Es,Q as jt,ba as gi,ca as Is,e as Ts,ja as Fs,ma as zs,qa as Bs,z as Ls}from"./chunk-RYTNMYZW.js";import{a as Pe,b as De}from"./chunk-VCZGUBMY.js";function le(e){cov_2dj4df7l8y().f[0]++;cov_2dj4df7l8y().s[0]++;return e+.5|0;}cov_2dj4df7l8y().s[1]++;var _t=(e,i,t)=>{cov_2dj4df7l8y().f[1]++;cov_2dj4df7l8y().s[2]++;return Math.max(Math.min(e,t),i);};function re(e){cov_2dj4df7l8y().f[2]++;cov_2dj4df7l8y().s[3]++;return _t(le(e*2.55),0,255);}function yt(e){cov_2dj4df7l8y().f[3]++;cov_2dj4df7l8y().s[4]++;return _t(le(e*255),0,255);}function ft(e){cov_2dj4df7l8y().f[4]++;cov_2dj4df7l8y().s[5]++;return _t(le(e/2.55)/100,0,1);}function Vs(e){cov_2dj4df7l8y().f[5]++;cov_2dj4df7l8y().s[6]++;return _t(le(e*100),0,100);}cov_2dj4df7l8y().s[9]++;cov_2dj4df7l8y().s[11]++;cov_2dj4df7l8y().s[13]++;cov_2dj4df7l8y().s[15]++;var et=(cov_2dj4df7l8y().s[7]++,{0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,A:10,B:11,C:12,D:13,E:14,F:15,a:10,b:11,c:12,d:13,e:14,f:15}),mi=(cov_2dj4df7l8y().s[8]++,[..."0123456789ABCDEF"]),rr=e=>{cov_2dj4df7l8y().f[6]++;cov_2dj4df7l8y().s[10]++;return mi[e&15];},ar=e=>{cov_2dj4df7l8y().f[7]++;cov_2dj4df7l8y().s[12]++;return mi[(e&240)>>4]+mi[e&15];},Oe=e=>{cov_2dj4df7l8y().f[8]++;cov_2dj4df7l8y().s[14]++;return(e&240)>>4===(e&15);},lr=e=>{cov_2dj4df7l8y().f[9]++;cov_2dj4df7l8y().s[16]++;return(cov_2dj4df7l8y().b[0][0]++,Oe(e.r))&&(cov_2dj4df7l8y().b[0][1]++,Oe(e.g))&&(cov_2dj4df7l8y().b[0][2]++,Oe(e.b))&&(cov_2dj4df7l8y().b[0][3]++,Oe(e.a));};function cr(e){cov_2dj4df7l8y().f[10]++;var i=(cov_2dj4df7l8y().s[17]++,e.length),t;cov_2dj4df7l8y().s[18]++;return(cov_2dj4df7l8y().b[1][0]++,e[0]==="#")&&(cov_2dj4df7l8y().b[1][1]++,(cov_2dj4df7l8y().b[3][0]++,i===4)||(cov_2dj4df7l8y().b[3][1]++,i===5)?(cov_2dj4df7l8y().b[2][0]++,t={r:255&et[e[1]]*17,g:255&et[e[2]]*17,b:255&et[e[3]]*17,a:i===5?(cov_2dj4df7l8y().b[4][0]++,et[e[4]]*17):(cov_2dj4df7l8y().b[4][1]++,255)}):(cov_2dj4df7l8y().b[2][1]++,((cov_2dj4df7l8y().b[5][0]++,i===7)||(cov_2dj4df7l8y().b[5][1]++,i===9))&&(cov_2dj4df7l8y().b[5][2]++,t={r:et[e[1]]<<4|et[e[2]],g:et[e[3]]<<4|et[e[4]],b:et[e[5]]<<4|et[e[6]],a:i===9?(cov_2dj4df7l8y().b[6][0]++,et[e[7]]<<4|et[e[8]]):(cov_2dj4df7l8y().b[6][1]++,255)}))),t;}cov_2dj4df7l8y().s[19]++;var hr=(e,i)=>{cov_2dj4df7l8y().f[11]++;cov_2dj4df7l8y().s[20]++;return e<255?(cov_2dj4df7l8y().b[7][0]++,i(e)):(cov_2dj4df7l8y().b[7][1]++,"");};function dr(e){cov_2dj4df7l8y().f[12]++;var i=(cov_2dj4df7l8y().s[21]++,lr(e)?(cov_2dj4df7l8y().b[8][0]++,rr):(cov_2dj4df7l8y().b[8][1]++,ar));cov_2dj4df7l8y().s[22]++;return e?(cov_2dj4df7l8y().b[9][0]++,"#"+i(e.r)+i(e.g)+i(e.b)+hr(e.a,i)):(cov_2dj4df7l8y().b[9][1]++,void 0);}var fr=(cov_2dj4df7l8y().s[23]++,/^(hsla?|hwb|hsv)\(\s*([-+.e\d]+)(?:deg)?[\s,]+([-+.e\d]+)%[\s,]+([-+.e\d]+)%(?:[\s,]+([-+.e\d]+)(%)?)?\s*\)$/);function $s(e,i,t){cov_2dj4df7l8y().f[13]++;cov_2dj4df7l8y().s[25]++;let s=(cov_2dj4df7l8y().s[24]++,i*Math.min(t,1-t)),n=(o,r=(cov_2dj4df7l8y().b[10][0]++,(o+e/30)%12))=>{cov_2dj4df7l8y().f[14]++;cov_2dj4df7l8y().s[26]++;return t-s*Math.max(Math.min(r-3,9-r,1),-1);};cov_2dj4df7l8y().s[27]++;return[n(0),n(8),n(4)];}function ur(e,i,t){cov_2dj4df7l8y().f[15]++;cov_2dj4df7l8y().s[28]++;let s=(n,o=(cov_2dj4df7l8y().b[11][0]++,(n+e/60)%6))=>{cov_2dj4df7l8y().f[16]++;cov_2dj4df7l8y().s[29]++;return t-t*i*Math.max(Math.min(o,4-o,1),0);};cov_2dj4df7l8y().s[30]++;return[s(5),s(3),s(1)];}function gr(e,i,t){cov_2dj4df7l8y().f[17]++;let s=(cov_2dj4df7l8y().s[31]++,$s(e,1,.5)),n;cov_2dj4df7l8y().s[32]++;for((cov_2dj4df7l8y().b[12][0]++,i+t>1)&&(cov_2dj4df7l8y().b[12][1]++,n=1/(i+t),i*=n,t*=n),n=0;n<3;n++){cov_2dj4df7l8y().s[33]++;s[n]*=1-i-t,s[n]+=i;}cov_2dj4df7l8y().s[34]++;return s;}function pr(e,i,t,s,n){cov_2dj4df7l8y().f[18]++;cov_2dj4df7l8y().s[35]++;return e===n?(cov_2dj4df7l8y().b[13][0]++,(i-t)/s+(i.5?(cov_2dj4df7l8y().b[17][0]++,h/(2-o-r)):(cov_2dj4df7l8y().b[17][1]++,h/(o+r)),l=pr(t,s,n,h,o),l=l*60+.5),[l|0,(cov_2dj4df7l8y().b[18][0]++,c)||(cov_2dj4df7l8y().b[18][1]++,0),a];}function xi(e,i,t,s){cov_2dj4df7l8y().f[20]++;cov_2dj4df7l8y().s[43]++;return(Array.isArray(i)?(cov_2dj4df7l8y().b[19][0]++,e(i[0],i[1],i[2])):(cov_2dj4df7l8y().b[19][1]++,e(i,t,s))).map(yt);}function _i(e,i,t){cov_2dj4df7l8y().f[21]++;cov_2dj4df7l8y().s[44]++;return xi($s,e,i,t);}function mr(e,i,t){cov_2dj4df7l8y().f[22]++;cov_2dj4df7l8y().s[45]++;return xi(gr,e,i,t);}function br(e,i,t){cov_2dj4df7l8y().f[23]++;cov_2dj4df7l8y().s[46]++;return xi(ur,e,i,t);}function Us(e){cov_2dj4df7l8y().f[24]++;cov_2dj4df7l8y().s[47]++;return(e%360+360)%360;}function xr(e){cov_2dj4df7l8y().f[25]++;let i=(cov_2dj4df7l8y().s[48]++,fr.exec(e)),t=(cov_2dj4df7l8y().s[49]++,255),s;cov_2dj4df7l8y().s[50]++;if(!i){cov_2dj4df7l8y().b[20][0]++;cov_2dj4df7l8y().s[51]++;return;}else{cov_2dj4df7l8y().b[20][1]++;}cov_2dj4df7l8y().s[52]++;(cov_2dj4df7l8y().b[21][0]++,i[5]!==s)&&(cov_2dj4df7l8y().b[21][1]++,t=i[6]?(cov_2dj4df7l8y().b[22][0]++,re(+i[5])):(cov_2dj4df7l8y().b[22][1]++,yt(+i[5])));let n=(cov_2dj4df7l8y().s[53]++,Us(+i[2])),o=(cov_2dj4df7l8y().s[54]++,+i[3]/100),r=(cov_2dj4df7l8y().s[55]++,+i[4]/100);cov_2dj4df7l8y().s[56]++;return i[1]==="hwb"?(cov_2dj4df7l8y().b[23][0]++,s=mr(n,o,r)):(cov_2dj4df7l8y().b[23][1]++,i[1]==="hsv"?(cov_2dj4df7l8y().b[24][0]++,s=br(n,o,r)):(cov_2dj4df7l8y().b[24][1]++,s=_i(n,o,r))),{r:s[0],g:s[1],b:s[2],a:t};}function _r(e,i){cov_2dj4df7l8y().f[26]++;var t=(cov_2dj4df7l8y().s[57]++,bi(e));cov_2dj4df7l8y().s[58]++;t[0]=Us(t[0]+i),t=_i(t),e.r=t[0],e.g=t[1],e.b=t[2];}function yr(e){cov_2dj4df7l8y().f[27]++;cov_2dj4df7l8y().s[59]++;if(!e){cov_2dj4df7l8y().b[25][0]++;cov_2dj4df7l8y().s[60]++;return;}else{cov_2dj4df7l8y().b[25][1]++;}let i=(cov_2dj4df7l8y().s[61]++,bi(e)),t=(cov_2dj4df7l8y().s[62]++,i[0]),s=(cov_2dj4df7l8y().s[63]++,Vs(i[1])),n=(cov_2dj4df7l8y().s[64]++,Vs(i[2]));cov_2dj4df7l8y().s[65]++;return e.a<255?(cov_2dj4df7l8y().b[26][0]++,`hsla(${t}, ${s}%, ${n}%, ${ft(e.a)})`):(cov_2dj4df7l8y().b[26][1]++,`hsl(${t}, ${s}%, ${n}%)`);}var Hs=(cov_2dj4df7l8y().s[66]++,{x:"dark",Z:"light",Y:"re",X:"blu",W:"gr",V:"medium",U:"slate",A:"ee",T:"ol",S:"or",B:"ra",C:"lateg",D:"ights",R:"in",Q:"turquois",E:"hi",P:"ro",O:"al",N:"le",M:"de",L:"yello",F:"en",K:"ch",G:"arks",H:"ea",I:"ightg",J:"wh"}),js=(cov_2dj4df7l8y().s[67]++,{OiceXe:"f0f8ff",antiquewEte:"faebd7",aqua:"ffff",aquamarRe:"7fffd4",azuY:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"0",blanKedOmond:"ffebcd",Xe:"ff",XeviTet:"8a2be2",bPwn:"a52a2a",burlywood:"deb887",caMtXe:"5f9ea0",KartYuse:"7fff00",KocTate:"d2691e",cSO:"ff7f50",cSnflowerXe:"6495ed",cSnsilk:"fff8dc",crimson:"dc143c",cyan:"ffff",xXe:"8b",xcyan:"8b8b",xgTMnPd:"b8860b",xWay:"a9a9a9",xgYF:"6400",xgYy:"a9a9a9",xkhaki:"bdb76b",xmagFta:"8b008b",xTivegYF:"556b2f",xSange:"ff8c00",xScEd:"9932cc",xYd:"8b0000",xsOmon:"e9967a",xsHgYF:"8fbc8f",xUXe:"483d8b",xUWay:"2f4f4f",xUgYy:"2f4f4f",xQe:"ced1",xviTet:"9400d3",dAppRk:"ff1493",dApskyXe:"bfff",dimWay:"696969",dimgYy:"696969",dodgerXe:"1e90ff",fiYbrick:"b22222",flSOwEte:"fffaf0",foYstWAn:"228b22",fuKsia:"ff00ff",gaRsbSo:"dcdcdc",ghostwEte:"f8f8ff",gTd:"ffd700",gTMnPd:"daa520",Way:"808080",gYF:"8000",gYFLw:"adff2f",gYy:"808080",honeyMw:"f0fff0",hotpRk:"ff69b4",RdianYd:"cd5c5c",Rdigo:"4b0082",ivSy:"fffff0",khaki:"f0e68c",lavFMr:"e6e6fa",lavFMrXsh:"fff0f5",lawngYF:"7cfc00",NmoncEffon:"fffacd",ZXe:"add8e6",ZcSO:"f08080",Zcyan:"e0ffff",ZgTMnPdLw:"fafad2",ZWay:"d3d3d3",ZgYF:"90ee90",ZgYy:"d3d3d3",ZpRk:"ffb6c1",ZsOmon:"ffa07a",ZsHgYF:"20b2aa",ZskyXe:"87cefa",ZUWay:"778899",ZUgYy:"778899",ZstAlXe:"b0c4de",ZLw:"ffffe0",lime:"ff00",limegYF:"32cd32",lRF:"faf0e6",magFta:"ff00ff",maPon:"800000",VaquamarRe:"66cdaa",VXe:"cd",VScEd:"ba55d3",VpurpN:"9370db",VsHgYF:"3cb371",VUXe:"7b68ee",VsprRggYF:"fa9a",VQe:"48d1cc",VviTetYd:"c71585",midnightXe:"191970",mRtcYam:"f5fffa",mistyPse:"ffe4e1",moccasR:"ffe4b5",navajowEte:"ffdead",navy:"80",Tdlace:"fdf5e6",Tive:"808000",TivedBb:"6b8e23",Sange:"ffa500",SangeYd:"ff4500",ScEd:"da70d6",pOegTMnPd:"eee8aa",pOegYF:"98fb98",pOeQe:"afeeee",pOeviTetYd:"db7093",papayawEp:"ffefd5",pHKpuff:"ffdab9",peru:"cd853f",pRk:"ffc0cb",plum:"dda0dd",powMrXe:"b0e0e6",purpN:"800080",YbeccapurpN:"663399",Yd:"ff0000",Psybrown:"bc8f8f",PyOXe:"4169e1",saddNbPwn:"8b4513",sOmon:"fa8072",sandybPwn:"f4a460",sHgYF:"2e8b57",sHshell:"fff5ee",siFna:"a0522d",silver:"c0c0c0",skyXe:"87ceeb",UXe:"6a5acd",UWay:"708090",UgYy:"708090",snow:"fffafa",sprRggYF:"ff7f",stAlXe:"4682b4",tan:"d2b48c",teO:"8080",tEstN:"d8bfd8",tomato:"ff6347",Qe:"40e0d0",viTet:"ee82ee",JHt:"f5deb3",wEte:"ffffff",wEtesmoke:"f5f5f5",Lw:"ffff00",LwgYF:"9acd32"});function vr(){cov_2dj4df7l8y().f[28]++;let e=(cov_2dj4df7l8y().s[68]++,{}),i=(cov_2dj4df7l8y().s[69]++,Object.keys(js)),t=(cov_2dj4df7l8y().s[70]++,Object.keys(Hs)),s,n,o,r,a;cov_2dj4df7l8y().s[71]++;for(s=0;s>16&255,o>>8&255,o&255];}cov_2dj4df7l8y().s[75]++;return e;}var Ae;function Mr(e){cov_2dj4df7l8y().f[29]++;cov_2dj4df7l8y().s[76]++;(cov_2dj4df7l8y().b[27][0]++,Ae)||(cov_2dj4df7l8y().b[27][1]++,Ae=vr(),Ae.transparent=[0,0,0,0]);let i=(cov_2dj4df7l8y().s[77]++,Ae[e.toLowerCase()]);cov_2dj4df7l8y().s[78]++;return(cov_2dj4df7l8y().b[28][0]++,i)&&(cov_2dj4df7l8y().b[28][1]++,{r:i[0],g:i[1],b:i[2],a:i.length===4?(cov_2dj4df7l8y().b[29][0]++,i[3]):(cov_2dj4df7l8y().b[29][1]++,255)});}var kr=(cov_2dj4df7l8y().s[79]++,/^rgba?\(\s*([-+.\d]+)(%)?[\s,]+([-+.e\d]+)(%)?[\s,]+([-+.e\d]+)(%)?(?:[\s,/]+([-+.e\d]+)(%)?)?\s*\)$/);function Sr(e){cov_2dj4df7l8y().f[30]++;let i=(cov_2dj4df7l8y().s[80]++,kr.exec(e)),t=(cov_2dj4df7l8y().s[81]++,255),s,n,o;cov_2dj4df7l8y().s[82]++;if(i){cov_2dj4df7l8y().b[30][0]++;cov_2dj4df7l8y().s[83]++;if(i[7]!==s){cov_2dj4df7l8y().b[31][0]++;let r=(cov_2dj4df7l8y().s[84]++,+i[7]);cov_2dj4df7l8y().s[85]++;t=i[8]?(cov_2dj4df7l8y().b[32][0]++,re(r)):(cov_2dj4df7l8y().b[32][1]++,_t(r*255,0,255));}else{cov_2dj4df7l8y().b[31][1]++;}cov_2dj4df7l8y().s[86]++;return s=+i[1],n=+i[3],o=+i[5],s=255&(i[2]?(cov_2dj4df7l8y().b[33][0]++,re(s)):(cov_2dj4df7l8y().b[33][1]++,_t(s,0,255))),n=255&(i[4]?(cov_2dj4df7l8y().b[34][0]++,re(n)):(cov_2dj4df7l8y().b[34][1]++,_t(n,0,255))),o=255&(i[6]?(cov_2dj4df7l8y().b[35][0]++,re(o)):(cov_2dj4df7l8y().b[35][1]++,_t(o,0,255))),{r:s,g:n,b:o,a:t};}else{cov_2dj4df7l8y().b[30][1]++;}}function wr(e){cov_2dj4df7l8y().f[31]++;cov_2dj4df7l8y().s[87]++;return(cov_2dj4df7l8y().b[36][0]++,e)&&(cov_2dj4df7l8y().b[36][1]++,e.a<255?(cov_2dj4df7l8y().b[37][0]++,`rgba(${e.r}, ${e.g}, ${e.b}, ${ft(e.a)})`):(cov_2dj4df7l8y().b[37][1]++,`rgb(${e.r}, ${e.g}, ${e.b})`));}cov_2dj4df7l8y().s[88]++;cov_2dj4df7l8y().s[90]++;var pi=e=>{cov_2dj4df7l8y().f[32]++;cov_2dj4df7l8y().s[89]++;return e<=.0031308?(cov_2dj4df7l8y().b[38][0]++,e*12.92):(cov_2dj4df7l8y().b[38][1]++,Math.pow(e,1/2.4)*1.055-.055);},Yt=e=>{cov_2dj4df7l8y().f[33]++;cov_2dj4df7l8y().s[91]++;return e<=.04045?(cov_2dj4df7l8y().b[39][0]++,e/12.92):(cov_2dj4df7l8y().b[39][1]++,Math.pow((e+.055)/1.055,2.4));};function Cr(e,i,t){cov_2dj4df7l8y().f[34]++;let s=(cov_2dj4df7l8y().s[92]++,Yt(ft(e.r))),n=(cov_2dj4df7l8y().s[93]++,Yt(ft(e.g))),o=(cov_2dj4df7l8y().s[94]++,Yt(ft(e.b)));cov_2dj4df7l8y().s[95]++;return{r:yt(pi(s+t*(Yt(ft(i.r))-s))),g:yt(pi(n+t*(Yt(ft(i.g))-n))),b:yt(pi(o+t*(Yt(ft(i.b))-o))),a:e.a+t*(i.a-e.a)};}function Te(e,i,t){cov_2dj4df7l8y().f[35]++;cov_2dj4df7l8y().s[96]++;if(e){cov_2dj4df7l8y().b[40][0]++;let s=(cov_2dj4df7l8y().s[97]++,bi(e));cov_2dj4df7l8y().s[98]++;s[i]=Math.max(0,Math.min(s[i]+s[i]*t,i===0?(cov_2dj4df7l8y().b[41][0]++,360):(cov_2dj4df7l8y().b[41][1]++,1))),s=_i(s),e.r=s[0],e.g=s[1],e.b=s[2];}else{cov_2dj4df7l8y().b[40][1]++;}}function Xs(e,i){cov_2dj4df7l8y().f[36]++;cov_2dj4df7l8y().s[99]++;return(cov_2dj4df7l8y().b[42][0]++,e)&&(cov_2dj4df7l8y().b[42][1]++,Object.assign((cov_2dj4df7l8y().b[43][0]++,i)||(cov_2dj4df7l8y().b[43][1]++,{}),e));}function Ys(e){cov_2dj4df7l8y().f[37]++;var i=(cov_2dj4df7l8y().s[100]++,{r:0,g:0,b:0,a:255});cov_2dj4df7l8y().s[101]++;return Array.isArray(e)?(cov_2dj4df7l8y().b[44][0]++,(cov_2dj4df7l8y().b[45][0]++,e.length>=3)&&(cov_2dj4df7l8y().b[45][1]++,i={r:e[0],g:e[1],b:e[2],a:255},(cov_2dj4df7l8y().b[46][0]++,e.length>3)&&(cov_2dj4df7l8y().b[46][1]++,i.a=yt(e[3])))):(cov_2dj4df7l8y().b[44][1]++,i=Xs(e,{r:0,g:0,b:0,a:1}),i.a=yt(i.a)),i;}function Pr(e){cov_2dj4df7l8y().f[38]++;cov_2dj4df7l8y().s[102]++;return e.charAt(0)==="r"?(cov_2dj4df7l8y().b[47][0]++,Sr(e)):(cov_2dj4df7l8y().b[47][1]++,xr(e));}cov_2dj4df7l8y().s[103]++;var ae=class e{constructor(i){cov_2dj4df7l8y().f[39]++;cov_2dj4df7l8y().s[104]++;if(i instanceof e){cov_2dj4df7l8y().b[48][0]++;cov_2dj4df7l8y().s[105]++;return i;}else{cov_2dj4df7l8y().b[48][1]++;}let t=(cov_2dj4df7l8y().s[106]++,typeof i),s;cov_2dj4df7l8y().s[107]++;t==="object"?(cov_2dj4df7l8y().b[49][0]++,s=Ys(i)):(cov_2dj4df7l8y().b[49][1]++,(cov_2dj4df7l8y().b[50][0]++,t==="string")&&(cov_2dj4df7l8y().b[50][1]++,s=(cov_2dj4df7l8y().b[51][0]++,cr(i))||(cov_2dj4df7l8y().b[51][1]++,Mr(i))||(cov_2dj4df7l8y().b[51][2]++,Pr(i)))),this._rgb=s,this._valid=!!s;}get valid(){cov_2dj4df7l8y().f[40]++;cov_2dj4df7l8y().s[108]++;return this._valid;}get rgb(){cov_2dj4df7l8y().f[41]++;var i=(cov_2dj4df7l8y().s[109]++,Xs(this._rgb));cov_2dj4df7l8y().s[110]++;return(cov_2dj4df7l8y().b[52][0]++,i)&&(cov_2dj4df7l8y().b[52][1]++,i.a=ft(i.a)),i;}set rgb(i){cov_2dj4df7l8y().f[42]++;cov_2dj4df7l8y().s[111]++;this._rgb=Ys(i);}rgbString(){cov_2dj4df7l8y().f[43]++;cov_2dj4df7l8y().s[112]++;return this._valid?(cov_2dj4df7l8y().b[53][0]++,wr(this._rgb)):(cov_2dj4df7l8y().b[53][1]++,void 0);}hexString(){cov_2dj4df7l8y().f[44]++;cov_2dj4df7l8y().s[113]++;return this._valid?(cov_2dj4df7l8y().b[54][0]++,dr(this._rgb)):(cov_2dj4df7l8y().b[54][1]++,void 0);}hslString(){cov_2dj4df7l8y().f[45]++;cov_2dj4df7l8y().s[114]++;return this._valid?(cov_2dj4df7l8y().b[55][0]++,yr(this._rgb)):(cov_2dj4df7l8y().b[55][1]++,void 0);}mix(i,t){cov_2dj4df7l8y().f[46]++;cov_2dj4df7l8y().s[115]++;if(i){cov_2dj4df7l8y().b[56][0]++;let s=(cov_2dj4df7l8y().s[116]++,this.rgb),n=(cov_2dj4df7l8y().s[117]++,i.rgb),o,r=(cov_2dj4df7l8y().s[118]++,t===o?(cov_2dj4df7l8y().b[57][0]++,.5):(cov_2dj4df7l8y().b[57][1]++,t)),a=(cov_2dj4df7l8y().s[119]++,2*r-1),l=(cov_2dj4df7l8y().s[120]++,s.a-n.a),c=(cov_2dj4df7l8y().s[121]++,((a*l===-1?(cov_2dj4df7l8y().b[58][0]++,a):(cov_2dj4df7l8y().b[58][1]++,(a+l)/(1+a*l)))+1)/2);cov_2dj4df7l8y().s[122]++;o=1-c,s.r=255&c*s.r+o*n.r+.5,s.g=255&c*s.g+o*n.g+.5,s.b=255&c*s.b+o*n.b+.5,s.a=r*s.a+(1-r)*n.a,this.rgb=s;}else{cov_2dj4df7l8y().b[56][1]++;}cov_2dj4df7l8y().s[123]++;return this;}interpolate(i,t){cov_2dj4df7l8y().f[47]++;cov_2dj4df7l8y().s[124]++;return(cov_2dj4df7l8y().b[59][0]++,i)&&(cov_2dj4df7l8y().b[59][1]++,this._rgb=Cr(this._rgb,i._rgb,t)),this;}clone(){cov_2dj4df7l8y().f[48]++;cov_2dj4df7l8y().s[125]++;return new e(this.rgb);}alpha(i){cov_2dj4df7l8y().f[49]++;cov_2dj4df7l8y().s[126]++;return this._rgb.a=yt(i),this;}clearer(i){cov_2dj4df7l8y().f[50]++;let t=(cov_2dj4df7l8y().s[127]++,this._rgb);cov_2dj4df7l8y().s[128]++;return t.a*=1-i,this;}greyscale(){cov_2dj4df7l8y().f[51]++;let i=(cov_2dj4df7l8y().s[129]++,this._rgb),t=(cov_2dj4df7l8y().s[130]++,le(i.r*.3+i.g*.59+i.b*.11));cov_2dj4df7l8y().s[131]++;return i.r=i.g=i.b=t,this;}opaquer(i){cov_2dj4df7l8y().f[52]++;let t=(cov_2dj4df7l8y().s[132]++,this._rgb);cov_2dj4df7l8y().s[133]++;return t.a*=1+i,this;}negate(){cov_2dj4df7l8y().f[53]++;let i=(cov_2dj4df7l8y().s[134]++,this._rgb);cov_2dj4df7l8y().s[135]++;return i.r=255-i.r,i.g=255-i.g,i.b=255-i.b,this;}lighten(i){cov_2dj4df7l8y().f[54]++;cov_2dj4df7l8y().s[136]++;return Te(this._rgb,2,i),this;}darken(i){cov_2dj4df7l8y().f[55]++;cov_2dj4df7l8y().s[137]++;return Te(this._rgb,2,-i),this;}saturate(i){cov_2dj4df7l8y().f[56]++;cov_2dj4df7l8y().s[138]++;return Te(this._rgb,1,i),this;}desaturate(i){cov_2dj4df7l8y().f[57]++;cov_2dj4df7l8y().s[139]++;return Te(this._rgb,1,-i),this;}rotate(i){cov_2dj4df7l8y().f[58]++;cov_2dj4df7l8y().s[140]++;return _r(this._rgb,i),this;}};function lt(){cov_2dj4df7l8y().f[59]++;}var on=(cov_2dj4df7l8y().s[141]++,(()=>{cov_2dj4df7l8y().f[60]++;let e=(cov_2dj4df7l8y().s[142]++,0);cov_2dj4df7l8y().s[143]++;return()=>{cov_2dj4df7l8y().f[61]++;cov_2dj4df7l8y().s[144]++;return e++;};})());function O(e){cov_2dj4df7l8y().f[62]++;cov_2dj4df7l8y().s[145]++;return e==null;}function z(e){cov_2dj4df7l8y().f[63]++;cov_2dj4df7l8y().s[146]++;if((cov_2dj4df7l8y().b[61][0]++,Array.isArray)&&(cov_2dj4df7l8y().b[61][1]++,Array.isArray(e))){cov_2dj4df7l8y().b[60][0]++;cov_2dj4df7l8y().s[147]++;return!0;}else{cov_2dj4df7l8y().b[60][1]++;}let i=(cov_2dj4df7l8y().s[148]++,Object.prototype.toString.call(e));cov_2dj4df7l8y().s[149]++;return(cov_2dj4df7l8y().b[62][0]++,i.slice(0,7)==="[object")&&(cov_2dj4df7l8y().b[62][1]++,i.slice(-6)==="Array]");}function A(e){cov_2dj4df7l8y().f[64]++;cov_2dj4df7l8y().s[150]++;return(cov_2dj4df7l8y().b[63][0]++,e!==null)&&(cov_2dj4df7l8y().b[63][1]++,Object.prototype.toString.call(e)==="[object Object]");}function N(e){cov_2dj4df7l8y().f[65]++;cov_2dj4df7l8y().s[151]++;return((cov_2dj4df7l8y().b[64][0]++,typeof e=="number")||(cov_2dj4df7l8y().b[64][1]++,e instanceof Number))&&(cov_2dj4df7l8y().b[64][2]++,isFinite(+e));}function J(e,i){cov_2dj4df7l8y().f[66]++;cov_2dj4df7l8y().s[152]++;return N(e)?(cov_2dj4df7l8y().b[65][0]++,e):(cov_2dj4df7l8y().b[65][1]++,i);}function C(e,i){cov_2dj4df7l8y().f[67]++;cov_2dj4df7l8y().s[153]++;return typeof e>"u"?(cov_2dj4df7l8y().b[66][0]++,i):(cov_2dj4df7l8y().b[66][1]++,e);}cov_2dj4df7l8y().s[154]++;cov_2dj4df7l8y().s[156]++;var rn=(e,i)=>{cov_2dj4df7l8y().f[68]++;cov_2dj4df7l8y().s[155]++;return(cov_2dj4df7l8y().b[68][0]++,typeof e=="string")&&(cov_2dj4df7l8y().b[68][1]++,e.endsWith("%"))?(cov_2dj4df7l8y().b[67][0]++,parseFloat(e)/100):(cov_2dj4df7l8y().b[67][1]++,+e/i);},ki=(e,i)=>{cov_2dj4df7l8y().f[69]++;cov_2dj4df7l8y().s[157]++;return(cov_2dj4df7l8y().b[70][0]++,typeof e=="string")&&(cov_2dj4df7l8y().b[70][1]++,e.endsWith("%"))?(cov_2dj4df7l8y().b[69][0]++,parseFloat(e)/100*i):(cov_2dj4df7l8y().b[69][1]++,+e);};function I(e,i,t){cov_2dj4df7l8y().f[70]++;cov_2dj4df7l8y().s[158]++;if((cov_2dj4df7l8y().b[72][0]++,e)&&(cov_2dj4df7l8y().b[72][1]++,typeof e.call=="function")){cov_2dj4df7l8y().b[71][0]++;cov_2dj4df7l8y().s[159]++;return e.apply(t,i);}else{cov_2dj4df7l8y().b[71][1]++;}}function R(e,i,t,s){cov_2dj4df7l8y().f[71]++;let n,o,r;cov_2dj4df7l8y().s[160]++;if(z(e)){cov_2dj4df7l8y().b[73][0]++;cov_2dj4df7l8y().s[161]++;if(o=e.length,s){cov_2dj4df7l8y().b[74][0]++;cov_2dj4df7l8y().s[162]++;for(n=o-1;n>=0;n--){cov_2dj4df7l8y().s[163]++;i.call(t,e[n],n);}}else{cov_2dj4df7l8y().b[74][1]++;cov_2dj4df7l8y().s[164]++;for(n=0;n{cov_2dj4df7l8y().f[79]++;cov_2dj4df7l8y().s[215]++;return e;},x:e=>{cov_2dj4df7l8y().f[80]++;cov_2dj4df7l8y().s[216]++;return e.x;},y:e=>{cov_2dj4df7l8y().f[81]++;cov_2dj4df7l8y().s[217]++;return e.y;}});function Ar(e){cov_2dj4df7l8y().f[82]++;let i=(cov_2dj4df7l8y().s[218]++,e.split(".")),t=(cov_2dj4df7l8y().s[219]++,[]),s=(cov_2dj4df7l8y().s[220]++,"");cov_2dj4df7l8y().s[221]++;for(let n of i){cov_2dj4df7l8y().s[222]++;s+=n,s.endsWith("\\")?(cov_2dj4df7l8y().b[94][0]++,s=s.slice(0,-1)+"."):(cov_2dj4df7l8y().b[94][1]++,t.push(s),s="");}cov_2dj4df7l8y().s[223]++;return t;}function Tr(e){cov_2dj4df7l8y().f[83]++;let i=(cov_2dj4df7l8y().s[224]++,Ar(e));cov_2dj4df7l8y().s[225]++;return t=>{cov_2dj4df7l8y().f[84]++;cov_2dj4df7l8y().s[226]++;for(let s of i){cov_2dj4df7l8y().s[227]++;if(s===""){cov_2dj4df7l8y().b[95][0]++;cov_2dj4df7l8y().s[228]++;break;}else{cov_2dj4df7l8y().b[95][1]++;}cov_2dj4df7l8y().s[229]++;t=(cov_2dj4df7l8y().b[96][0]++,t)&&(cov_2dj4df7l8y().b[96][1]++,t[s]);}cov_2dj4df7l8y().s[230]++;return t;};}function pt(e,i){cov_2dj4df7l8y().f[85]++;cov_2dj4df7l8y().s[231]++;return((cov_2dj4df7l8y().b[97][0]++,Ks[i])||(cov_2dj4df7l8y().b[97][1]++,Ks[i]=Tr(i)))(e);}function We(e){cov_2dj4df7l8y().f[86]++;cov_2dj4df7l8y().s[232]++;return e.charAt(0).toUpperCase()+e.slice(1);}cov_2dj4df7l8y().s[233]++;cov_2dj4df7l8y().s[235]++;cov_2dj4df7l8y().s[237]++;var qt=e=>{cov_2dj4df7l8y().f[87]++;cov_2dj4df7l8y().s[234]++;return typeof e<"u";},ut=e=>{cov_2dj4df7l8y().f[88]++;cov_2dj4df7l8y().s[236]++;return typeof e=="function";},Si=(e,i)=>{cov_2dj4df7l8y().f[89]++;cov_2dj4df7l8y().s[238]++;if(e.size!==i.size){cov_2dj4df7l8y().b[98][0]++;cov_2dj4df7l8y().s[239]++;return!1;}else{cov_2dj4df7l8y().b[98][1]++;}cov_2dj4df7l8y().s[240]++;for(let t of e){cov_2dj4df7l8y().s[241]++;if(!i.has(t)){cov_2dj4df7l8y().b[99][0]++;cov_2dj4df7l8y().s[242]++;return!1;}else{cov_2dj4df7l8y().b[99][1]++;}}cov_2dj4df7l8y().s[243]++;return!0;};function ln(e){cov_2dj4df7l8y().f[90]++;cov_2dj4df7l8y().s[244]++;return(cov_2dj4df7l8y().b[100][0]++,e.type==="mouseup")||(cov_2dj4df7l8y().b[100][1]++,e.type==="click")||(cov_2dj4df7l8y().b[100][2]++,e.type==="contextmenu");}var L=(cov_2dj4df7l8y().s[245]++,Math.PI),B=(cov_2dj4df7l8y().s[246]++,2*L),Lr=(cov_2dj4df7l8y().s[247]++,B+L),Fe=(cov_2dj4df7l8y().s[248]++,Number.POSITIVE_INFINITY),Rr=(cov_2dj4df7l8y().s[249]++,L/180),V=(cov_2dj4df7l8y().s[250]++,L/2),Lt=(cov_2dj4df7l8y().s[251]++,L/4),qs=(cov_2dj4df7l8y().s[252]++,L*2/3),gt=(cov_2dj4df7l8y().s[253]++,Math.log10),nt=(cov_2dj4df7l8y().s[254]++,Math.sign);function Gt(e,i,t){cov_2dj4df7l8y().f[91]++;cov_2dj4df7l8y().s[255]++;return Math.abs(e-i){cov_2dj4df7l8y().f[94]++;cov_2dj4df7l8y().s[266]++;return n-o;}).pop(),i;}function Er(e){cov_2dj4df7l8y().f[95]++;cov_2dj4df7l8y().s[267]++;return(cov_2dj4df7l8y().b[107][0]++,typeof e=="symbol")||(cov_2dj4df7l8y().b[107][1]++,typeof e=="object")&&(cov_2dj4df7l8y().b[107][2]++,e!==null)&&(cov_2dj4df7l8y().b[107][3]++,!((cov_2dj4df7l8y().b[108][0]++,Symbol.toPrimitive in e)||(cov_2dj4df7l8y().b[108][1]++,"toString"in e)||(cov_2dj4df7l8y().b[108][2]++,"valueOf"in e)));}function It(e){cov_2dj4df7l8y().f[96]++;cov_2dj4df7l8y().s[268]++;return(cov_2dj4df7l8y().b[109][0]++,!Er(e))&&(cov_2dj4df7l8y().b[109][1]++,!isNaN(parseFloat(e)))&&(cov_2dj4df7l8y().b[109][2]++,isFinite(e));}function hn(e,i){cov_2dj4df7l8y().f[97]++;let t=(cov_2dj4df7l8y().s[269]++,Math.round(e));cov_2dj4df7l8y().s[270]++;return(cov_2dj4df7l8y().b[110][0]++,t-i<=e)&&(cov_2dj4df7l8y().b[110][1]++,t+i>=e);}function Ci(e,i,t){cov_2dj4df7l8y().f[98]++;let s,n,o;cov_2dj4df7l8y().s[271]++;for(s=0,n=e.length;sl)&&(cov_2dj4df7l8y().b[114][5]++,c=Math.min(i,t)-s)&&(cov_2dj4df7l8y().b[116][1]++,e<=Math.max(i,t)+s);}function Ve(e,i,t){cov_2dj4df7l8y().f[110]++;cov_2dj4df7l8y().s[301]++;t=(cov_2dj4df7l8y().b[117][0]++,t)||(cov_2dj4df7l8y().b[117][1]++,r=>{cov_2dj4df7l8y().f[111]++;cov_2dj4df7l8y().s[302]++;return e[r]1;){cov_2dj4df7l8y().s[306]++;o=n+s>>1,t(o)?(cov_2dj4df7l8y().b[118][0]++,n=o):(cov_2dj4df7l8y().b[118][1]++,s=o);}cov_2dj4df7l8y().s[307]++;return{lo:n,hi:s};}cov_2dj4df7l8y().s[308]++;cov_2dj4df7l8y().s[313]++;var rt=(e,i,t,s)=>{cov_2dj4df7l8y().f[112]++;cov_2dj4df7l8y().s[309]++;return Ve(e,t,s?(cov_2dj4df7l8y().b[119][0]++,n=>{cov_2dj4df7l8y().f[113]++;let o=(cov_2dj4df7l8y().s[310]++,e[n][i]);cov_2dj4df7l8y().s[311]++;return(cov_2dj4df7l8y().b[120][0]++,o{cov_2dj4df7l8y().f[114]++;cov_2dj4df7l8y().s[312]++;return e[n][i]{cov_2dj4df7l8y().f[115]++;cov_2dj4df7l8y().s[314]++;return Ve(e,t,s=>{cov_2dj4df7l8y().f[116]++;cov_2dj4df7l8y().s[315]++;return e[s][i]>=t;});};function un(e,i,t){cov_2dj4df7l8y().f[117]++;let s=(cov_2dj4df7l8y().s[316]++,0),n=(cov_2dj4df7l8y().s[317]++,e.length);cov_2dj4df7l8y().s[318]++;for(;(cov_2dj4df7l8y().b[121][0]++,ss)&&(cov_2dj4df7l8y().b[122][1]++,e[n-1]>t);){cov_2dj4df7l8y().s[321]++;n--;}cov_2dj4df7l8y().s[322]++;return(cov_2dj4df7l8y().b[124][0]++,s>0)||(cov_2dj4df7l8y().b[124][1]++,n{cov_2dj4df7l8y().f[119]++;let s=(cov_2dj4df7l8y().s[328]++,"_onData"+We(t)),n=(cov_2dj4df7l8y().s[329]++,e[t]);cov_2dj4df7l8y().s[330]++;Object.defineProperty(e,t,{configurable:!0,enumerable:!1,value(...o){cov_2dj4df7l8y().f[120]++;let r=(cov_2dj4df7l8y().s[331]++,n.apply(this,o));cov_2dj4df7l8y().s[332]++;return e._chartjs.listeners.forEach(a=>{cov_2dj4df7l8y().f[121]++;cov_2dj4df7l8y().s[333]++;(cov_2dj4df7l8y().b[126][0]++,typeof a[s]=="function")&&(cov_2dj4df7l8y().b[126][1]++,a[s](...o));}),r;}});});}function Oi(e,i){cov_2dj4df7l8y().f[122]++;let t=(cov_2dj4df7l8y().s[334]++,e._chartjs);cov_2dj4df7l8y().s[335]++;if(!t){cov_2dj4df7l8y().b[127][0]++;cov_2dj4df7l8y().s[336]++;return;}else{cov_2dj4df7l8y().b[127][1]++;}let s=(cov_2dj4df7l8y().s[337]++,t.listeners),n=(cov_2dj4df7l8y().s[338]++,s.indexOf(i));cov_2dj4df7l8y().s[339]++;(cov_2dj4df7l8y().b[128][0]++,n!==-1)&&(cov_2dj4df7l8y().b[128][1]++,s.splice(n,1)),(cov_2dj4df7l8y().b[129][0]++,!(s.length>0))&&(cov_2dj4df7l8y().b[129][1]++,gn.forEach(o=>{cov_2dj4df7l8y().f[123]++;cov_2dj4df7l8y().s[340]++;delete e[o];}),delete e._chartjs);}function Ai(e){cov_2dj4df7l8y().f[124]++;let i=(cov_2dj4df7l8y().s[341]++,new Set(e));cov_2dj4df7l8y().s[342]++;return i.size===e.length?(cov_2dj4df7l8y().b[130][0]++,e):(cov_2dj4df7l8y().b[130][1]++,Array.from(i));}var Ti=(cov_2dj4df7l8y().s[343]++,function(){cov_2dj4df7l8y().f[125]++;cov_2dj4df7l8y().s[344]++;return typeof window>"u"?(cov_2dj4df7l8y().b[131][0]++,function(e){cov_2dj4df7l8y().f[126]++;cov_2dj4df7l8y().s[345]++;return e();}):(cov_2dj4df7l8y().b[131][1]++,window.requestAnimationFrame);}());function Li(e,i){cov_2dj4df7l8y().f[127]++;let t=(cov_2dj4df7l8y().s[346]++,[]),s=(cov_2dj4df7l8y().s[347]++,!1);cov_2dj4df7l8y().s[348]++;return function(...n){cov_2dj4df7l8y().f[128]++;cov_2dj4df7l8y().s[349]++;t=n,(cov_2dj4df7l8y().b[132][0]++,s)||(cov_2dj4df7l8y().b[132][1]++,s=!0,Ti.call(window,()=>{cov_2dj4df7l8y().f[129]++;cov_2dj4df7l8y().s[350]++;s=!1,e.apply(i,t);}));};}function mn(e,i){cov_2dj4df7l8y().f[130]++;let t;cov_2dj4df7l8y().s[351]++;return function(...s){cov_2dj4df7l8y().f[131]++;cov_2dj4df7l8y().s[352]++;return i?(cov_2dj4df7l8y().b[133][0]++,clearTimeout(t),t=setTimeout(e,i,s)):(cov_2dj4df7l8y().b[133][1]++,e.apply(this,s)),i;};}cov_2dj4df7l8y().s[353]++;cov_2dj4df7l8y().s[355]++;cov_2dj4df7l8y().s[357]++;var He=e=>{cov_2dj4df7l8y().f[132]++;cov_2dj4df7l8y().s[354]++;return e==="start"?(cov_2dj4df7l8y().b[134][0]++,"left"):(cov_2dj4df7l8y().b[134][1]++,e==="end"?(cov_2dj4df7l8y().b[135][0]++,"right"):(cov_2dj4df7l8y().b[135][1]++,"center"));},X=(e,i,t)=>{cov_2dj4df7l8y().f[133]++;cov_2dj4df7l8y().s[356]++;return e==="start"?(cov_2dj4df7l8y().b[136][0]++,i):(cov_2dj4df7l8y().b[136][1]++,e==="end"?(cov_2dj4df7l8y().b[137][0]++,t):(cov_2dj4df7l8y().b[137][1]++,(i+t)/2));},bn=(e,i,t,s)=>{cov_2dj4df7l8y().f[134]++;cov_2dj4df7l8y().s[358]++;return e===(s?(cov_2dj4df7l8y().b[139][0]++,"left"):(cov_2dj4df7l8y().b[139][1]++,"right"))?(cov_2dj4df7l8y().b[138][0]++,t):(cov_2dj4df7l8y().b[138][1]++,e==="center"?(cov_2dj4df7l8y().b[140][0]++,(i+t)/2):(cov_2dj4df7l8y().b[140][1]++,i));};function Ri(e,i,t){cov_2dj4df7l8y().f[135]++;let s=(cov_2dj4df7l8y().s[359]++,i.length),n=(cov_2dj4df7l8y().s[360]++,0),o=(cov_2dj4df7l8y().s[361]++,s);cov_2dj4df7l8y().s[362]++;if(e._sorted){cov_2dj4df7l8y().b[141][0]++;let{iScale:r,vScale:a,_parsed:l}=(cov_2dj4df7l8y().s[363]++,e),c=(cov_2dj4df7l8y().s[364]++,(cov_2dj4df7l8y().b[143][0]++,e.dataset)&&(cov_2dj4df7l8y().b[143][1]++,e.dataset.options)?(cov_2dj4df7l8y().b[142][0]++,e.dataset.options.spanGaps):(cov_2dj4df7l8y().b[142][1]++,null)),h=(cov_2dj4df7l8y().s[365]++,r.axis),{min:d,max:f,minDefined:u,maxDefined:p}=(cov_2dj4df7l8y().s[366]++,r.getUserBounds());cov_2dj4df7l8y().s[367]++;if(u){cov_2dj4df7l8y().b[144][0]++;cov_2dj4df7l8y().s[368]++;if(n=Math.min(rt(l,h,d).lo,t?(cov_2dj4df7l8y().b[146][0]++,s):(cov_2dj4df7l8y().b[146][1]++,rt(i,h,r.getPixelForValue(d)).lo)),c){cov_2dj4df7l8y().b[145][0]++;let g=(cov_2dj4df7l8y().s[369]++,l.slice(0,n+1).reverse().findIndex(m=>{cov_2dj4df7l8y().f[136]++;cov_2dj4df7l8y().s[370]++;return!O(m[a.axis]);}));cov_2dj4df7l8y().s[371]++;n-=Math.max(0,g);}else{cov_2dj4df7l8y().b[145][1]++;}cov_2dj4df7l8y().s[372]++;n=Y(n,0,s-1);}else{cov_2dj4df7l8y().b[144][1]++;}cov_2dj4df7l8y().s[373]++;if(p){cov_2dj4df7l8y().b[147][0]++;let g=(cov_2dj4df7l8y().s[374]++,Math.max(rt(l,r.axis,f,!0).hi+1,t?(cov_2dj4df7l8y().b[148][0]++,0):(cov_2dj4df7l8y().b[148][1]++,rt(i,h,r.getPixelForValue(f),!0).hi+1)));cov_2dj4df7l8y().s[375]++;if(c){cov_2dj4df7l8y().b[149][0]++;let m=(cov_2dj4df7l8y().s[376]++,l.slice(g-1).findIndex(b=>{cov_2dj4df7l8y().f[137]++;cov_2dj4df7l8y().s[377]++;return!O(b[a.axis]);}));cov_2dj4df7l8y().s[378]++;g+=Math.max(0,m);}else{cov_2dj4df7l8y().b[149][1]++;}cov_2dj4df7l8y().s[379]++;o=Y(g,n,s)-n;}else{cov_2dj4df7l8y().b[147][1]++;cov_2dj4df7l8y().s[380]++;o=s-n;}}else{cov_2dj4df7l8y().b[141][1]++;}cov_2dj4df7l8y().s[381]++;return{start:n,count:o};}function Ei(e){cov_2dj4df7l8y().f[138]++;let{xScale:i,yScale:t,_scaleRanges:s}=(cov_2dj4df7l8y().s[382]++,e),n=(cov_2dj4df7l8y().s[383]++,{xmin:i.min,xmax:i.max,ymin:t.min,ymax:t.max});cov_2dj4df7l8y().s[384]++;if(!s){cov_2dj4df7l8y().b[150][0]++;cov_2dj4df7l8y().s[385]++;return e._scaleRanges=n,!0;}else{cov_2dj4df7l8y().b[150][1]++;}let o=(cov_2dj4df7l8y().s[386]++,(cov_2dj4df7l8y().b[151][0]++,s.xmin!==i.min)||(cov_2dj4df7l8y().b[151][1]++,s.xmax!==i.max)||(cov_2dj4df7l8y().b[151][2]++,s.ymin!==t.min)||(cov_2dj4df7l8y().b[151][3]++,s.ymax!==t.max));cov_2dj4df7l8y().s[387]++;return Object.assign(s,n),o;}cov_2dj4df7l8y().s[388]++;cov_2dj4df7l8y().s[390]++;cov_2dj4df7l8y().s[392]++;var Le=e=>{cov_2dj4df7l8y().f[139]++;cov_2dj4df7l8y().s[389]++;return(cov_2dj4df7l8y().b[152][0]++,e===0)||(cov_2dj4df7l8y().b[152][1]++,e===1);},Gs=(e,i,t)=>{cov_2dj4df7l8y().f[140]++;cov_2dj4df7l8y().s[391]++;return-(Math.pow(2,10*(e-=1))*Math.sin((e-i)*B/t));},Js=(e,i,t)=>{cov_2dj4df7l8y().f[141]++;cov_2dj4df7l8y().s[393]++;return Math.pow(2,-10*e)*Math.sin((e-i)*B/t)+1;},$t=(cov_2dj4df7l8y().s[394]++,{linear:e=>{cov_2dj4df7l8y().f[142]++;cov_2dj4df7l8y().s[395]++;return e;},easeInQuad:e=>{cov_2dj4df7l8y().f[143]++;cov_2dj4df7l8y().s[396]++;return e*e;},easeOutQuad:e=>{cov_2dj4df7l8y().f[144]++;cov_2dj4df7l8y().s[397]++;return-e*(e-2);},easeInOutQuad:e=>{cov_2dj4df7l8y().f[145]++;cov_2dj4df7l8y().s[398]++;return(e/=.5)<1?(cov_2dj4df7l8y().b[153][0]++,.5*e*e):(cov_2dj4df7l8y().b[153][1]++,-.5*(--e*(e-2)-1));},easeInCubic:e=>{cov_2dj4df7l8y().f[146]++;cov_2dj4df7l8y().s[399]++;return e*e*e;},easeOutCubic:e=>{cov_2dj4df7l8y().f[147]++;cov_2dj4df7l8y().s[400]++;return(e-=1)*e*e+1;},easeInOutCubic:e=>{cov_2dj4df7l8y().f[148]++;cov_2dj4df7l8y().s[401]++;return(e/=.5)<1?(cov_2dj4df7l8y().b[154][0]++,.5*e*e*e):(cov_2dj4df7l8y().b[154][1]++,.5*((e-=2)*e*e+2));},easeInQuart:e=>{cov_2dj4df7l8y().f[149]++;cov_2dj4df7l8y().s[402]++;return e*e*e*e;},easeOutQuart:e=>{cov_2dj4df7l8y().f[150]++;cov_2dj4df7l8y().s[403]++;return-((e-=1)*e*e*e-1);},easeInOutQuart:e=>{cov_2dj4df7l8y().f[151]++;cov_2dj4df7l8y().s[404]++;return(e/=.5)<1?(cov_2dj4df7l8y().b[155][0]++,.5*e*e*e*e):(cov_2dj4df7l8y().b[155][1]++,-.5*((e-=2)*e*e*e-2));},easeInQuint:e=>{cov_2dj4df7l8y().f[152]++;cov_2dj4df7l8y().s[405]++;return e*e*e*e*e;},easeOutQuint:e=>{cov_2dj4df7l8y().f[153]++;cov_2dj4df7l8y().s[406]++;return(e-=1)*e*e*e*e+1;},easeInOutQuint:e=>{cov_2dj4df7l8y().f[154]++;cov_2dj4df7l8y().s[407]++;return(e/=.5)<1?(cov_2dj4df7l8y().b[156][0]++,.5*e*e*e*e*e):(cov_2dj4df7l8y().b[156][1]++,.5*((e-=2)*e*e*e*e+2));},easeInSine:e=>{cov_2dj4df7l8y().f[155]++;cov_2dj4df7l8y().s[408]++;return-Math.cos(e*V)+1;},easeOutSine:e=>{cov_2dj4df7l8y().f[156]++;cov_2dj4df7l8y().s[409]++;return Math.sin(e*V);},easeInOutSine:e=>{cov_2dj4df7l8y().f[157]++;cov_2dj4df7l8y().s[410]++;return-.5*(Math.cos(L*e)-1);},easeInExpo:e=>{cov_2dj4df7l8y().f[158]++;cov_2dj4df7l8y().s[411]++;return e===0?(cov_2dj4df7l8y().b[157][0]++,0):(cov_2dj4df7l8y().b[157][1]++,Math.pow(2,10*(e-1)));},easeOutExpo:e=>{cov_2dj4df7l8y().f[159]++;cov_2dj4df7l8y().s[412]++;return e===1?(cov_2dj4df7l8y().b[158][0]++,1):(cov_2dj4df7l8y().b[158][1]++,-Math.pow(2,-10*e)+1);},easeInOutExpo:e=>{cov_2dj4df7l8y().f[160]++;cov_2dj4df7l8y().s[413]++;return Le(e)?(cov_2dj4df7l8y().b[159][0]++,e):(cov_2dj4df7l8y().b[159][1]++,e<.5?(cov_2dj4df7l8y().b[160][0]++,.5*Math.pow(2,10*(e*2-1))):(cov_2dj4df7l8y().b[160][1]++,.5*(-Math.pow(2,-10*(e*2-1))+2)));},easeInCirc:e=>{cov_2dj4df7l8y().f[161]++;cov_2dj4df7l8y().s[414]++;return e>=1?(cov_2dj4df7l8y().b[161][0]++,e):(cov_2dj4df7l8y().b[161][1]++,-(Math.sqrt(1-e*e)-1));},easeOutCirc:e=>{cov_2dj4df7l8y().f[162]++;cov_2dj4df7l8y().s[415]++;return Math.sqrt(1-(e-=1)*e);},easeInOutCirc:e=>{cov_2dj4df7l8y().f[163]++;cov_2dj4df7l8y().s[416]++;return(e/=.5)<1?(cov_2dj4df7l8y().b[162][0]++,-.5*(Math.sqrt(1-e*e)-1)):(cov_2dj4df7l8y().b[162][1]++,.5*(Math.sqrt(1-(e-=2)*e)+1));},easeInElastic:e=>{cov_2dj4df7l8y().f[164]++;cov_2dj4df7l8y().s[417]++;return Le(e)?(cov_2dj4df7l8y().b[163][0]++,e):(cov_2dj4df7l8y().b[163][1]++,Gs(e,.075,.3));},easeOutElastic:e=>{cov_2dj4df7l8y().f[165]++;cov_2dj4df7l8y().s[418]++;return Le(e)?(cov_2dj4df7l8y().b[164][0]++,e):(cov_2dj4df7l8y().b[164][1]++,Js(e,.075,.3));},easeInOutElastic(e){cov_2dj4df7l8y().f[166]++;cov_2dj4df7l8y().s[419]++;return Le(e)?(cov_2dj4df7l8y().b[165][0]++,e):(cov_2dj4df7l8y().b[165][1]++,e<.5?(cov_2dj4df7l8y().b[166][0]++,.5*Gs(e*2,.1125,.45)):(cov_2dj4df7l8y().b[166][1]++,.5+.5*Js(e*2-1,.1125,.45)));},easeInBack(e){cov_2dj4df7l8y().f[167]++;cov_2dj4df7l8y().s[420]++;return e*e*((1.70158+1)*e-1.70158);},easeOutBack(e){cov_2dj4df7l8y().f[168]++;cov_2dj4df7l8y().s[421]++;return(e-=1)*e*((1.70158+1)*e+1.70158)+1;},easeInOutBack(e){cov_2dj4df7l8y().f[169]++;let i=(cov_2dj4df7l8y().s[422]++,1.70158);cov_2dj4df7l8y().s[423]++;return(e/=.5)<1?(cov_2dj4df7l8y().b[167][0]++,.5*(e*e*(((i*=1.525)+1)*e-i))):(cov_2dj4df7l8y().b[167][1]++,.5*((e-=2)*e*(((i*=1.525)+1)*e+i)+2));},easeInBounce:e=>{cov_2dj4df7l8y().f[170]++;cov_2dj4df7l8y().s[424]++;return 1-$t.easeOutBounce(1-e);},easeOutBounce(e){cov_2dj4df7l8y().f[171]++;cov_2dj4df7l8y().s[425]++;return e<1/2.75?(cov_2dj4df7l8y().b[168][0]++,7.5625*e*e):(cov_2dj4df7l8y().b[168][1]++,e<2/2.75?(cov_2dj4df7l8y().b[169][0]++,7.5625*(e-=1.5/2.75)*e+.75):(cov_2dj4df7l8y().b[169][1]++,e<2.5/2.75?(cov_2dj4df7l8y().b[170][0]++,7.5625*(e-=2.25/2.75)*e+.9375):(cov_2dj4df7l8y().b[170][1]++,7.5625*(e-=2.625/2.75)*e+.984375)));},easeInOutBounce:e=>{cov_2dj4df7l8y().f[172]++;cov_2dj4df7l8y().s[426]++;return e<.5?(cov_2dj4df7l8y().b[171][0]++,$t.easeInBounce(e*2)*.5):(cov_2dj4df7l8y().b[171][1]++,$t.easeOutBounce(e*2-1)*.5+.5);}});function Ii(e){cov_2dj4df7l8y().f[173]++;cov_2dj4df7l8y().s[427]++;if((cov_2dj4df7l8y().b[173][0]++,e)&&(cov_2dj4df7l8y().b[173][1]++,typeof e=="object")){cov_2dj4df7l8y().b[172][0]++;let i=(cov_2dj4df7l8y().s[428]++,e.toString());cov_2dj4df7l8y().s[429]++;return(cov_2dj4df7l8y().b[174][0]++,i==="[object CanvasPattern]")||(cov_2dj4df7l8y().b[174][1]++,i==="[object CanvasGradient]");}else{cov_2dj4df7l8y().b[172][1]++;}cov_2dj4df7l8y().s[430]++;return!1;}function Fi(e){cov_2dj4df7l8y().f[174]++;cov_2dj4df7l8y().s[431]++;return Ii(e)?(cov_2dj4df7l8y().b[175][0]++,e):(cov_2dj4df7l8y().b[175][1]++,new ae(e));}function yi(e){cov_2dj4df7l8y().f[175]++;cov_2dj4df7l8y().s[432]++;return Ii(e)?(cov_2dj4df7l8y().b[176][0]++,e):(cov_2dj4df7l8y().b[176][1]++,new ae(e).saturate(.5).darken(.1).hexString());}var Fr=(cov_2dj4df7l8y().s[433]++,["x","y","borderWidth","radius","tension"]),zr=(cov_2dj4df7l8y().s[434]++,["color","borderColor","backgroundColor"]);function Br(e){cov_2dj4df7l8y().f[176]++;cov_2dj4df7l8y().s[435]++;e.set("animation",{delay:void 0,duration:1e3,easing:"easeOutQuart",fn:void 0,from:void 0,loop:void 0,to:void 0,type:void 0}),e.describe("animation",{_fallback:!1,_indexable:!1,_scriptable:i=>{cov_2dj4df7l8y().f[177]++;cov_2dj4df7l8y().s[436]++;return(cov_2dj4df7l8y().b[177][0]++,i!=="onProgress")&&(cov_2dj4df7l8y().b[177][1]++,i!=="onComplete")&&(cov_2dj4df7l8y().b[177][2]++,i!=="fn");}}),e.set("animations",{colors:{type:"color",properties:zr},numbers:{type:"number",properties:Fr}}),e.describe("animations",{_fallback:"animation"}),e.set("transitions",{active:{animation:{duration:400}},resize:{animation:{duration:0}},show:{animations:{colors:{from:"transparent"},visible:{type:"boolean",duration:0}}},hide:{animations:{colors:{to:"transparent"},visible:{type:"boolean",easing:"linear",fn:i=>{cov_2dj4df7l8y().f[178]++;cov_2dj4df7l8y().s[437]++;return i|0;}}}}});}function Wr(e){cov_2dj4df7l8y().f[179]++;cov_2dj4df7l8y().s[438]++;e.set("layout",{autoPadding:!0,padding:{top:0,right:0,bottom:0,left:0}});}var Zs=(cov_2dj4df7l8y().s[439]++,new Map());function Nr(e,i){cov_2dj4df7l8y().f[180]++;cov_2dj4df7l8y().s[440]++;i=(cov_2dj4df7l8y().b[178][0]++,i)||(cov_2dj4df7l8y().b[178][1]++,{});let t=(cov_2dj4df7l8y().s[441]++,e+JSON.stringify(i)),s=(cov_2dj4df7l8y().s[442]++,Zs.get(t));cov_2dj4df7l8y().s[443]++;return(cov_2dj4df7l8y().b[179][0]++,s)||(cov_2dj4df7l8y().b[179][1]++,s=new Intl.NumberFormat(e,i),Zs.set(t,s)),s;}function Zt(e,i,t){cov_2dj4df7l8y().f[181]++;cov_2dj4df7l8y().s[444]++;return Nr(i,t).format(e);}var xn=(cov_2dj4df7l8y().s[445]++,{values(e){cov_2dj4df7l8y().f[182]++;cov_2dj4df7l8y().s[446]++;return z(e)?(cov_2dj4df7l8y().b[180][0]++,e):(cov_2dj4df7l8y().b[180][1]++,""+e);},numeric(e,i,t){cov_2dj4df7l8y().f[183]++;cov_2dj4df7l8y().s[447]++;if(e===0){cov_2dj4df7l8y().b[181][0]++;cov_2dj4df7l8y().s[448]++;return"0";}else{cov_2dj4df7l8y().b[181][1]++;}let s=(cov_2dj4df7l8y().s[449]++,this.chart.options.locale),n,o=(cov_2dj4df7l8y().s[450]++,e);cov_2dj4df7l8y().s[451]++;if(t.length>1){cov_2dj4df7l8y().b[182][0]++;let c=(cov_2dj4df7l8y().s[452]++,Math.max(Math.abs(t[0].value),Math.abs(t[t.length-1].value)));cov_2dj4df7l8y().s[453]++;((cov_2dj4df7l8y().b[183][0]++,c<1e-4)||(cov_2dj4df7l8y().b[183][1]++,c>1e15))&&(cov_2dj4df7l8y().b[183][2]++,n="scientific"),o=Vr(e,t);}else{cov_2dj4df7l8y().b[182][1]++;}let r=(cov_2dj4df7l8y().s[454]++,gt(Math.abs(o))),a=(cov_2dj4df7l8y().s[455]++,isNaN(r)?(cov_2dj4df7l8y().b[184][0]++,1):(cov_2dj4df7l8y().b[184][1]++,Math.max(Math.min(-1*Math.floor(r),20),0))),l=(cov_2dj4df7l8y().s[456]++,{notation:n,minimumFractionDigits:a,maximumFractionDigits:a});cov_2dj4df7l8y().s[457]++;return Object.assign(l,this.options.ticks.format),Zt(e,s,l);},logarithmic(e,i,t){cov_2dj4df7l8y().f[184]++;cov_2dj4df7l8y().s[458]++;if(e===0){cov_2dj4df7l8y().b[185][0]++;cov_2dj4df7l8y().s[459]++;return"0";}else{cov_2dj4df7l8y().b[185][1]++;}let s=(cov_2dj4df7l8y().s[460]++,(cov_2dj4df7l8y().b[186][0]++,t[i].significand)||(cov_2dj4df7l8y().b[186][1]++,e/Math.pow(10,Math.floor(gt(e)))));cov_2dj4df7l8y().s[461]++;return(cov_2dj4df7l8y().b[188][0]++,[1,2,3,5,10,15].includes(s))||(cov_2dj4df7l8y().b[188][1]++,i>.8*t.length)?(cov_2dj4df7l8y().b[187][0]++,xn.numeric.call(this,e,i,t)):(cov_2dj4df7l8y().b[187][1]++,"");}});function Vr(e,i){cov_2dj4df7l8y().f[185]++;let t=(cov_2dj4df7l8y().s[462]++,i.length>3?(cov_2dj4df7l8y().b[189][0]++,i[2].value-i[1].value):(cov_2dj4df7l8y().b[189][1]++,i[1].value-i[0].value));cov_2dj4df7l8y().s[463]++;return(cov_2dj4df7l8y().b[190][0]++,Math.abs(t)>=1)&&(cov_2dj4df7l8y().b[190][1]++,e!==Math.floor(e))&&(cov_2dj4df7l8y().b[190][2]++,t=e-Math.floor(e)),t;}var fe=(cov_2dj4df7l8y().s[464]++,{formatters:xn});function Hr(e){cov_2dj4df7l8y().f[186]++;cov_2dj4df7l8y().s[465]++;e.set("scale",{display:!0,offset:!1,reverse:!1,beginAtZero:!1,bounds:"ticks",clip:!0,grace:0,grid:{display:!0,lineWidth:1,drawOnChartArea:!0,drawTicks:!0,tickLength:8,tickWidth:(i,t)=>{cov_2dj4df7l8y().f[187]++;cov_2dj4df7l8y().s[466]++;return t.lineWidth;},tickColor:(i,t)=>{cov_2dj4df7l8y().f[188]++;cov_2dj4df7l8y().s[467]++;return t.color;},offset:!1},border:{display:!0,dash:[],dashOffset:0,width:1},title:{display:!1,text:"",padding:{top:4,bottom:4}},ticks:{minRotation:0,maxRotation:50,mirror:!1,textStrokeWidth:0,textStrokeColor:"",padding:3,display:!0,autoSkip:!0,autoSkipPadding:3,labelOffset:0,callback:fe.formatters.values,minor:{},major:{},align:"center",crossAlign:"near",showLabelBackdrop:!1,backdropColor:"rgba(255, 255, 255, 0.75)",backdropPadding:2}}),e.route("scale.ticks","color","","color"),e.route("scale.grid","color","","borderColor"),e.route("scale.border","color","","borderColor"),e.route("scale.title","color","","color"),e.describe("scale",{_fallback:!1,_scriptable:i=>{cov_2dj4df7l8y().f[189]++;cov_2dj4df7l8y().s[468]++;return(cov_2dj4df7l8y().b[191][0]++,!i.startsWith("before"))&&(cov_2dj4df7l8y().b[191][1]++,!i.startsWith("after"))&&(cov_2dj4df7l8y().b[191][2]++,i!=="callback")&&(cov_2dj4df7l8y().b[191][3]++,i!=="parser");},_indexable:i=>{cov_2dj4df7l8y().f[190]++;cov_2dj4df7l8y().s[469]++;return(cov_2dj4df7l8y().b[192][0]++,i!=="borderDash")&&(cov_2dj4df7l8y().b[192][1]++,i!=="tickBorderDash")&&(cov_2dj4df7l8y().b[192][2]++,i!=="dash");}}),e.describe("scales",{_fallback:"scale"}),e.describe("scale.ticks",{_scriptable:i=>{cov_2dj4df7l8y().f[191]++;cov_2dj4df7l8y().s[470]++;return(cov_2dj4df7l8y().b[193][0]++,i!=="backdropPadding")&&(cov_2dj4df7l8y().b[193][1]++,i!=="callback");},_indexable:i=>{cov_2dj4df7l8y().f[192]++;cov_2dj4df7l8y().s[471]++;return i!=="backdropPadding";}});}var kt=(cov_2dj4df7l8y().s[472]++,Object.create(null)),je=(cov_2dj4df7l8y().s[473]++,Object.create(null));function ce(e,i){cov_2dj4df7l8y().f[193]++;cov_2dj4df7l8y().s[474]++;if(!i){cov_2dj4df7l8y().b[194][0]++;cov_2dj4df7l8y().s[475]++;return e;}else{cov_2dj4df7l8y().b[194][1]++;}let t=(cov_2dj4df7l8y().s[476]++,i.split("."));cov_2dj4df7l8y().s[477]++;for(let s=(cov_2dj4df7l8y().s[478]++,0),n=(cov_2dj4df7l8y().s[479]++,t.length);s{cov_2dj4df7l8y().f[196]++;cov_2dj4df7l8y().s[486]++;return s.chart.platform.getDevicePixelRatio();},this.elements={},this.events=["mousemove","mouseout","click","touchstart","touchmove"],this.font={family:"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif",size:12,style:"normal",lineHeight:1.2,weight:null},this.hover={},this.hoverBackgroundColor=(s,n)=>{cov_2dj4df7l8y().f[197]++;cov_2dj4df7l8y().s[487]++;return yi(n.backgroundColor);},this.hoverBorderColor=(s,n)=>{cov_2dj4df7l8y().f[198]++;cov_2dj4df7l8y().s[488]++;return yi(n.borderColor);},this.hoverColor=(s,n)=>{cov_2dj4df7l8y().f[199]++;cov_2dj4df7l8y().s[489]++;return yi(n.color);},this.indexAxis="x",this.interaction={mode:"nearest",intersect:!0,includeInvisible:!1},this.maintainAspectRatio=!0,this.onHover=null,this.onClick=null,this.parsing=!0,this.plugins={},this.responsive=!0,this.scale=void 0,this.scales={},this.showLine=!0,this.drawActiveElementsOnTop=!0,this.describe(i),this.apply(t);}set(i,t){cov_2dj4df7l8y().f[200]++;cov_2dj4df7l8y().s[490]++;return vi(this,i,t);}get(i){cov_2dj4df7l8y().f[201]++;cov_2dj4df7l8y().s[491]++;return ce(this,i);}describe(i,t){cov_2dj4df7l8y().f[202]++;cov_2dj4df7l8y().s[492]++;return vi(je,i,t);}override(i,t){cov_2dj4df7l8y().f[203]++;cov_2dj4df7l8y().s[493]++;return vi(kt,i,t);}route(i,t,s,n){cov_2dj4df7l8y().f[204]++;let o=(cov_2dj4df7l8y().s[494]++,ce(this,i)),r=(cov_2dj4df7l8y().s[495]++,ce(this,s)),a=(cov_2dj4df7l8y().s[496]++,"_"+t);cov_2dj4df7l8y().s[497]++;Object.defineProperties(o,{[a]:{value:o[t],writable:!0},[t]:{enumerable:!0,get(){cov_2dj4df7l8y().f[205]++;let l=(cov_2dj4df7l8y().s[498]++,this[a]),c=(cov_2dj4df7l8y().s[499]++,r[n]);cov_2dj4df7l8y().s[500]++;return A(l)?(cov_2dj4df7l8y().b[197][0]++,Object.assign({},c,l)):(cov_2dj4df7l8y().b[197][1]++,C(l,c));},set(l){cov_2dj4df7l8y().f[206]++;cov_2dj4df7l8y().s[501]++;this[a]=l;}}});}apply(i){cov_2dj4df7l8y().f[207]++;cov_2dj4df7l8y().s[502]++;i.forEach(t=>{cov_2dj4df7l8y().f[208]++;cov_2dj4df7l8y().s[503]++;return t(this);});}},F=(cov_2dj4df7l8y().s[504]++,new Mi({_scriptable:e=>{cov_2dj4df7l8y().f[209]++;cov_2dj4df7l8y().s[505]++;return!e.startsWith("on");},_indexable:e=>{cov_2dj4df7l8y().f[210]++;cov_2dj4df7l8y().s[506]++;return e!=="events";},hover:{_fallback:"interaction"},interaction:{_scriptable:!1,_indexable:!1}},[Br,Wr,Hr]));function jr(e){cov_2dj4df7l8y().f[211]++;cov_2dj4df7l8y().s[507]++;return(cov_2dj4df7l8y().b[199][0]++,!e)||(cov_2dj4df7l8y().b[199][1]++,O(e.size))||(cov_2dj4df7l8y().b[199][2]++,O(e.family))?(cov_2dj4df7l8y().b[198][0]++,null):(cov_2dj4df7l8y().b[198][1]++,(e.style?(cov_2dj4df7l8y().b[200][0]++,e.style+" "):(cov_2dj4df7l8y().b[200][1]++,""))+(e.weight?(cov_2dj4df7l8y().b[201][0]++,e.weight+" "):(cov_2dj4df7l8y().b[201][1]++,""))+e.size+"px "+e.family);}function he(e,i,t,s,n){cov_2dj4df7l8y().f[212]++;let o=(cov_2dj4df7l8y().s[508]++,i[n]);cov_2dj4df7l8y().s[509]++;return(cov_2dj4df7l8y().b[202][0]++,o)||(cov_2dj4df7l8y().b[202][1]++,o=i[n]=e.measureText(n).width,t.push(n)),(cov_2dj4df7l8y().b[203][0]++,o>s)&&(cov_2dj4df7l8y().b[203][1]++,s=o),s;}function _n(e,i,t,s){cov_2dj4df7l8y().f[213]++;cov_2dj4df7l8y().s[510]++;s=(cov_2dj4df7l8y().b[204][0]++,s)||(cov_2dj4df7l8y().b[204][1]++,{});let n=(cov_2dj4df7l8y().s[511]++,s.data=(cov_2dj4df7l8y().b[205][0]++,s.data)||(cov_2dj4df7l8y().b[205][1]++,{})),o=(cov_2dj4df7l8y().s[512]++,s.garbageCollect=(cov_2dj4df7l8y().b[206][0]++,s.garbageCollect)||(cov_2dj4df7l8y().b[206][1]++,[]));cov_2dj4df7l8y().s[513]++;(cov_2dj4df7l8y().b[207][0]++,s.font!==i)&&(cov_2dj4df7l8y().b[207][1]++,n=s.data={},o=s.garbageCollect=[],s.font=i),e.save(),e.font=i;let r=(cov_2dj4df7l8y().s[514]++,0),a=(cov_2dj4df7l8y().s[515]++,t.length),l,c,h,d,f;cov_2dj4df7l8y().s[516]++;for(l=0;lt.length){cov_2dj4df7l8y().b[212][0]++;cov_2dj4df7l8y().s[525]++;for(l=0;l0)&&(cov_2dj4df7l8y().b[239][1]++,e.stroke());}else{cov_2dj4df7l8y().b[220][1]++;}}function at(e,i,t){cov_2dj4df7l8y().f[218]++;cov_2dj4df7l8y().s[567]++;return t=(cov_2dj4df7l8y().b[240][0]++,t)||(cov_2dj4df7l8y().b[240][1]++,.5),(cov_2dj4df7l8y().b[241][0]++,!i)||(cov_2dj4df7l8y().b[241][1]++,e)&&(cov_2dj4df7l8y().b[241][2]++,e.x>i.left-t)&&(cov_2dj4df7l8y().b[241][3]++,e.xi.top-t)&&(cov_2dj4df7l8y().b[241][5]++,e.y0)&&(cov_2dj4df7l8y().b[261][1]++,o.strokeColor!=="")),l,c;cov_2dj4df7l8y().s[593]++;for(e.save(),e.font=n.string,Yr(e,o),l=0;l{cov_2dj4df7l8y().f[229]++;cov_2dj4df7l8y().s[609]++;return(cov_2dj4df7l8y().b[269][0]++,+e)||(cov_2dj4df7l8y().b[269][1]++,0);};function $e(e,i){cov_2dj4df7l8y().f[230]++;let t=(cov_2dj4df7l8y().s[610]++,{}),s=(cov_2dj4df7l8y().s[611]++,A(i)),n=(cov_2dj4df7l8y().s[612]++,s?(cov_2dj4df7l8y().b[270][0]++,Object.keys(i)):(cov_2dj4df7l8y().b[270][1]++,i)),o=(cov_2dj4df7l8y().s[613]++,A(e)?(cov_2dj4df7l8y().b[271][0]++,s?(cov_2dj4df7l8y().b[272][0]++,r=>{cov_2dj4df7l8y().f[231]++;cov_2dj4df7l8y().s[614]++;return C(e[r],e[i[r]]);}):(cov_2dj4df7l8y().b[272][1]++,r=>{cov_2dj4df7l8y().f[232]++;cov_2dj4df7l8y().s[615]++;return e[r];})):(cov_2dj4df7l8y().b[271][1]++,()=>{cov_2dj4df7l8y().f[233]++;cov_2dj4df7l8y().s[616]++;return e;}));cov_2dj4df7l8y().s[617]++;for(let r of n){cov_2dj4df7l8y().s[618]++;t[r]=Gr(o(r));}cov_2dj4df7l8y().s[619]++;return t;}function Wi(e){cov_2dj4df7l8y().f[234]++;cov_2dj4df7l8y().s[620]++;return $e(e,{top:"y",right:"x",bottom:"y",left:"x"});}function Ct(e){cov_2dj4df7l8y().f[235]++;cov_2dj4df7l8y().s[621]++;return $e(e,["topLeft","topRight","bottomLeft","bottomRight"]);}function K(e){cov_2dj4df7l8y().f[236]++;let i=(cov_2dj4df7l8y().s[622]++,Wi(e));cov_2dj4df7l8y().s[623]++;return i.width=i.left+i.right,i.height=i.top+i.bottom,i;}function j(e,i){cov_2dj4df7l8y().f[237]++;cov_2dj4df7l8y().s[624]++;e=(cov_2dj4df7l8y().b[273][0]++,e)||(cov_2dj4df7l8y().b[273][1]++,{}),i=(cov_2dj4df7l8y().b[274][0]++,i)||(cov_2dj4df7l8y().b[274][1]++,F.font);let t=(cov_2dj4df7l8y().s[625]++,C(e.size,i.size));cov_2dj4df7l8y().s[626]++;(cov_2dj4df7l8y().b[275][0]++,typeof t=="string")&&(cov_2dj4df7l8y().b[275][1]++,t=parseInt(t,10));let s=(cov_2dj4df7l8y().s[627]++,C(e.style,i.style));cov_2dj4df7l8y().s[628]++;(cov_2dj4df7l8y().b[276][0]++,s)&&(cov_2dj4df7l8y().b[276][1]++,!(""+s).match(Kr))&&(cov_2dj4df7l8y().b[276][2]++,console.warn('Invalid font style specified: "'+s+'"'),s=void 0);let n=(cov_2dj4df7l8y().s[629]++,{family:C(e.family,i.family),lineHeight:qr(C(e.lineHeight,i.lineHeight),t),size:t,style:s,weight:C(e.weight,i.weight),string:""});cov_2dj4df7l8y().s[630]++;return n.string=jr(n),n;}function te(e,i,t,s){cov_2dj4df7l8y().f[238]++;let n=(cov_2dj4df7l8y().s[631]++,!0),o,r,a;cov_2dj4df7l8y().s[632]++;for(o=0,r=e.length;o{cov_2dj4df7l8y().f[240]++;cov_2dj4df7l8y().s[638]++;return(cov_2dj4df7l8y().b[283][0]++,t)&&(cov_2dj4df7l8y().b[283][1]++,a===0)?(cov_2dj4df7l8y().b[282][0]++,0):(cov_2dj4df7l8y().b[282][1]++,a+l);};cov_2dj4df7l8y().s[639]++;return{min:r(s,-Math.abs(o)),max:r(n,o)};}function mt(e,i){cov_2dj4df7l8y().f[241]++;cov_2dj4df7l8y().s[640]++;return Object.assign(Object.create(e),i);}function Ue(e,i=(cov_2dj4df7l8y().b[284][0]++,[""]),t,s,n=(cov_2dj4df7l8y().b[285][0]++,()=>{cov_2dj4df7l8y().f[243]++;cov_2dj4df7l8y().s[641]++;return e[0];})){cov_2dj4df7l8y().f[242]++;let o=(cov_2dj4df7l8y().s[642]++,(cov_2dj4df7l8y().b[286][0]++,t)||(cov_2dj4df7l8y().b[286][1]++,e));cov_2dj4df7l8y().s[643]++;(cov_2dj4df7l8y().b[287][0]++,typeof s>"u")&&(cov_2dj4df7l8y().b[287][1]++,s=wn("_fallback",e));let r=(cov_2dj4df7l8y().s[644]++,{[Symbol.toStringTag]:"Object",_cacheable:!0,_scopes:e,_rootScopes:o,_fallback:s,_getTarget:n,override:a=>{cov_2dj4df7l8y().f[244]++;cov_2dj4df7l8y().s[645]++;return Ue([a,...e],i,o,s);}});cov_2dj4df7l8y().s[646]++;return new Proxy(r,{deleteProperty(a,l){cov_2dj4df7l8y().f[245]++;cov_2dj4df7l8y().s[647]++;return delete a[l],delete a._keys,delete e[0][l],!0;},get(a,l){cov_2dj4df7l8y().f[246]++;cov_2dj4df7l8y().s[648]++;return kn(a,l,()=>{cov_2dj4df7l8y().f[247]++;cov_2dj4df7l8y().s[649]++;return na(l,i,e,a);});},getOwnPropertyDescriptor(a,l){cov_2dj4df7l8y().f[248]++;cov_2dj4df7l8y().s[650]++;return Reflect.getOwnPropertyDescriptor(a._scopes[0],l);},getPrototypeOf(){cov_2dj4df7l8y().f[249]++;cov_2dj4df7l8y().s[651]++;return Reflect.getPrototypeOf(e[0]);},has(a,l){cov_2dj4df7l8y().f[250]++;cov_2dj4df7l8y().s[652]++;return tn(a).includes(l);},ownKeys(a){cov_2dj4df7l8y().f[251]++;cov_2dj4df7l8y().s[653]++;return tn(a);},set(a,l,c){cov_2dj4df7l8y().f[252]++;let h=(cov_2dj4df7l8y().s[654]++,(cov_2dj4df7l8y().b[288][0]++,a._storage)||(cov_2dj4df7l8y().b[288][1]++,a._storage=n()));cov_2dj4df7l8y().s[655]++;return a[l]=h[l]=c,delete a._keys,!0;}});}function Et(e,i,t,s){cov_2dj4df7l8y().f[253]++;let n=(cov_2dj4df7l8y().s[656]++,{_cacheable:!1,_proxy:e,_context:i,_subProxy:t,_stack:new Set(),_descriptors:Ni(e,s),setContext:o=>{cov_2dj4df7l8y().f[254]++;cov_2dj4df7l8y().s[657]++;return Et(e,o,t,s);},override:o=>{cov_2dj4df7l8y().f[255]++;cov_2dj4df7l8y().s[658]++;return Et(e.override(o),i,t,s);}});cov_2dj4df7l8y().s[659]++;return new Proxy(n,{deleteProperty(o,r){cov_2dj4df7l8y().f[256]++;cov_2dj4df7l8y().s[660]++;return delete o[r],delete e[r],!0;},get(o,r,a){cov_2dj4df7l8y().f[257]++;cov_2dj4df7l8y().s[661]++;return kn(o,r,()=>{cov_2dj4df7l8y().f[258]++;cov_2dj4df7l8y().s[662]++;return Zr(o,r,a);});},getOwnPropertyDescriptor(o,r){cov_2dj4df7l8y().f[259]++;cov_2dj4df7l8y().s[663]++;return o._descriptors.allKeys?(cov_2dj4df7l8y().b[289][0]++,Reflect.has(e,r)?(cov_2dj4df7l8y().b[290][0]++,{enumerable:!0,configurable:!0}):(cov_2dj4df7l8y().b[290][1]++,void 0)):(cov_2dj4df7l8y().b[289][1]++,Reflect.getOwnPropertyDescriptor(e,r));},getPrototypeOf(){cov_2dj4df7l8y().f[260]++;cov_2dj4df7l8y().s[664]++;return Reflect.getPrototypeOf(e);},has(o,r){cov_2dj4df7l8y().f[261]++;cov_2dj4df7l8y().s[665]++;return Reflect.has(e,r);},ownKeys(){cov_2dj4df7l8y().f[262]++;cov_2dj4df7l8y().s[666]++;return Reflect.ownKeys(e);},set(o,r,a){cov_2dj4df7l8y().f[263]++;cov_2dj4df7l8y().s[667]++;return e[r]=a,delete o[r],!0;}});}function Ni(e,i=(cov_2dj4df7l8y().b[291][0]++,{scriptable:!0,indexable:!0})){cov_2dj4df7l8y().f[264]++;let{_scriptable:t=(cov_2dj4df7l8y().b[292][0]++,i.scriptable),_indexable:s=(cov_2dj4df7l8y().b[293][0]++,i.indexable),_allKeys:n=(cov_2dj4df7l8y().b[294][0]++,i.allKeys)}=(cov_2dj4df7l8y().s[668]++,e);cov_2dj4df7l8y().s[669]++;return{allKeys:n,scriptable:t,indexable:s,isScriptable:ut(t)?(cov_2dj4df7l8y().b[295][0]++,t):(cov_2dj4df7l8y().b[295][1]++,()=>{cov_2dj4df7l8y().f[265]++;cov_2dj4df7l8y().s[670]++;return t;}),isIndexable:ut(s)?(cov_2dj4df7l8y().b[296][0]++,s):(cov_2dj4df7l8y().b[296][1]++,()=>{cov_2dj4df7l8y().f[266]++;cov_2dj4df7l8y().s[671]++;return s;})};}cov_2dj4df7l8y().s[672]++;cov_2dj4df7l8y().s[674]++;var Jr=(e,i)=>{cov_2dj4df7l8y().f[267]++;cov_2dj4df7l8y().s[673]++;return e?(cov_2dj4df7l8y().b[297][0]++,e+We(i)):(cov_2dj4df7l8y().b[297][1]++,i);},Vi=(e,i)=>{cov_2dj4df7l8y().f[268]++;cov_2dj4df7l8y().s[675]++;return(cov_2dj4df7l8y().b[298][0]++,A(i))&&(cov_2dj4df7l8y().b[298][1]++,e!=="adapters")&&((cov_2dj4df7l8y().b[298][2]++,Object.getPrototypeOf(i)===null)||(cov_2dj4df7l8y().b[298][3]++,i.constructor===Object));};function kn(e,i,t){cov_2dj4df7l8y().f[269]++;cov_2dj4df7l8y().s[676]++;if((cov_2dj4df7l8y().b[300][0]++,Object.prototype.hasOwnProperty.call(e,i))||(cov_2dj4df7l8y().b[300][1]++,i==="constructor")){cov_2dj4df7l8y().b[299][0]++;cov_2dj4df7l8y().s[677]++;return e[i];}else{cov_2dj4df7l8y().b[299][1]++;}let s=(cov_2dj4df7l8y().s[678]++,t());cov_2dj4df7l8y().s[679]++;return e[i]=s,s;}function Zr(e,i,t){cov_2dj4df7l8y().f[270]++;let{_proxy:s,_context:n,_subProxy:o,_descriptors:r}=(cov_2dj4df7l8y().s[680]++,e),a=(cov_2dj4df7l8y().s[681]++,s[i]);cov_2dj4df7l8y().s[682]++;return(cov_2dj4df7l8y().b[301][0]++,ut(a))&&(cov_2dj4df7l8y().b[301][1]++,r.isScriptable(i))&&(cov_2dj4df7l8y().b[301][2]++,a=Qr(i,a,e,t)),(cov_2dj4df7l8y().b[302][0]++,z(a))&&(cov_2dj4df7l8y().b[302][1]++,a.length)&&(cov_2dj4df7l8y().b[302][2]++,a=ta(i,a,e,r.isIndexable)),(cov_2dj4df7l8y().b[303][0]++,Vi(i,a))&&(cov_2dj4df7l8y().b[303][1]++,a=Et(a,n,(cov_2dj4df7l8y().b[304][0]++,o)&&(cov_2dj4df7l8y().b[304][1]++,o[i]),r)),a;}function Qr(e,i,t,s){cov_2dj4df7l8y().f[271]++;let{_proxy:n,_context:o,_subProxy:r,_stack:a}=(cov_2dj4df7l8y().s[683]++,t);cov_2dj4df7l8y().s[684]++;if(a.has(e)){cov_2dj4df7l8y().b[305][0]++;cov_2dj4df7l8y().s[685]++;throw new Error("Recursion detected: "+Array.from(a).join("->")+"->"+e);}else{cov_2dj4df7l8y().b[305][1]++;}cov_2dj4df7l8y().s[686]++;a.add(e);let l=(cov_2dj4df7l8y().s[687]++,i(o,(cov_2dj4df7l8y().b[306][0]++,r)||(cov_2dj4df7l8y().b[306][1]++,s)));cov_2dj4df7l8y().s[688]++;return a.delete(e),(cov_2dj4df7l8y().b[307][0]++,Vi(e,l))&&(cov_2dj4df7l8y().b[307][1]++,l=Hi(n._scopes,n,e,l)),l;}function ta(e,i,t,s){cov_2dj4df7l8y().f[272]++;let{_proxy:n,_context:o,_subProxy:r,_descriptors:a}=(cov_2dj4df7l8y().s[689]++,t);cov_2dj4df7l8y().s[690]++;if((cov_2dj4df7l8y().b[309][0]++,typeof o.index<"u")&&(cov_2dj4df7l8y().b[309][1]++,s(e))){cov_2dj4df7l8y().b[308][0]++;cov_2dj4df7l8y().s[691]++;return i[o.index%i.length];}else{cov_2dj4df7l8y().b[308][1]++;}cov_2dj4df7l8y().s[692]++;if(A(i[0])){cov_2dj4df7l8y().b[310][0]++;let l=(cov_2dj4df7l8y().s[693]++,i),c=(cov_2dj4df7l8y().s[694]++,n._scopes.filter(h=>{cov_2dj4df7l8y().f[273]++;cov_2dj4df7l8y().s[695]++;return h!==l;}));cov_2dj4df7l8y().s[696]++;i=[];cov_2dj4df7l8y().s[697]++;for(let h of l){let d=(cov_2dj4df7l8y().s[698]++,Hi(c,n,e,h));cov_2dj4df7l8y().s[699]++;i.push(Et(d,o,(cov_2dj4df7l8y().b[311][0]++,r)&&(cov_2dj4df7l8y().b[311][1]++,r[e]),a));}}else{cov_2dj4df7l8y().b[310][1]++;}cov_2dj4df7l8y().s[700]++;return i;}function Sn(e,i,t){cov_2dj4df7l8y().f[274]++;cov_2dj4df7l8y().s[701]++;return ut(e)?(cov_2dj4df7l8y().b[312][0]++,e(i,t)):(cov_2dj4df7l8y().b[312][1]++,e);}cov_2dj4df7l8y().s[702]++;var ea=(e,i)=>{cov_2dj4df7l8y().f[275]++;cov_2dj4df7l8y().s[703]++;return e===!0?(cov_2dj4df7l8y().b[313][0]++,i):(cov_2dj4df7l8y().b[313][1]++,typeof e=="string"?(cov_2dj4df7l8y().b[314][0]++,pt(i,e)):(cov_2dj4df7l8y().b[314][1]++,void 0));};function ia(e,i,t,s,n){cov_2dj4df7l8y().f[276]++;cov_2dj4df7l8y().s[704]++;for(let o of i){let r=(cov_2dj4df7l8y().s[705]++,ea(t,o));cov_2dj4df7l8y().s[706]++;if(r){cov_2dj4df7l8y().b[315][0]++;cov_2dj4df7l8y().s[707]++;e.add(r);let a=(cov_2dj4df7l8y().s[708]++,Sn(r._fallback,t,n));cov_2dj4df7l8y().s[709]++;if((cov_2dj4df7l8y().b[317][0]++,typeof a<"u")&&(cov_2dj4df7l8y().b[317][1]++,a!==t)&&(cov_2dj4df7l8y().b[317][2]++,a!==s)){cov_2dj4df7l8y().b[316][0]++;cov_2dj4df7l8y().s[710]++;return a;}else{cov_2dj4df7l8y().b[316][1]++;}}else{cov_2dj4df7l8y().b[315][1]++;cov_2dj4df7l8y().s[711]++;if((cov_2dj4df7l8y().b[319][0]++,r===!1)&&(cov_2dj4df7l8y().b[319][1]++,typeof s<"u")&&(cov_2dj4df7l8y().b[319][2]++,t!==s)){cov_2dj4df7l8y().b[318][0]++;cov_2dj4df7l8y().s[712]++;return null;}else{cov_2dj4df7l8y().b[318][1]++;}}}cov_2dj4df7l8y().s[713]++;return!1;}function Hi(e,i,t,s){cov_2dj4df7l8y().f[277]++;let n=(cov_2dj4df7l8y().s[714]++,i._rootScopes),o=(cov_2dj4df7l8y().s[715]++,Sn(i._fallback,t,s)),r=(cov_2dj4df7l8y().s[716]++,[...e,...n]),a=(cov_2dj4df7l8y().s[717]++,new Set());cov_2dj4df7l8y().s[718]++;a.add(s);let l=(cov_2dj4df7l8y().s[719]++,Qs(a,r,t,(cov_2dj4df7l8y().b[320][0]++,o)||(cov_2dj4df7l8y().b[320][1]++,t),s));cov_2dj4df7l8y().s[720]++;return(cov_2dj4df7l8y().b[322][0]++,l===null)||(cov_2dj4df7l8y().b[322][1]++,typeof o<"u")&&(cov_2dj4df7l8y().b[322][2]++,o!==t)&&(cov_2dj4df7l8y().b[322][3]++,l=Qs(a,r,o,l,s),l===null)?(cov_2dj4df7l8y().b[321][0]++,!1):(cov_2dj4df7l8y().b[321][1]++,Ue(Array.from(a),[""],n,o,()=>{cov_2dj4df7l8y().f[278]++;cov_2dj4df7l8y().s[721]++;return sa(i,t,s);}));}function Qs(e,i,t,s,n){cov_2dj4df7l8y().f[279]++;cov_2dj4df7l8y().s[722]++;for(;t;){cov_2dj4df7l8y().s[723]++;t=ia(e,i,t,s,n);}cov_2dj4df7l8y().s[724]++;return t;}function sa(e,i,t){cov_2dj4df7l8y().f[280]++;let s=(cov_2dj4df7l8y().s[725]++,e._getTarget());cov_2dj4df7l8y().s[726]++;(cov_2dj4df7l8y().b[323][0]++,i in s)||(cov_2dj4df7l8y().b[323][1]++,s[i]={});let n=(cov_2dj4df7l8y().s[727]++,s[i]);cov_2dj4df7l8y().s[728]++;return(cov_2dj4df7l8y().b[325][0]++,z(n))&&(cov_2dj4df7l8y().b[325][1]++,A(t))?(cov_2dj4df7l8y().b[324][0]++,t):(cov_2dj4df7l8y().b[324][1]++,(cov_2dj4df7l8y().b[326][0]++,n)||(cov_2dj4df7l8y().b[326][1]++,{}));}function na(e,i,t,s){cov_2dj4df7l8y().f[281]++;let n;cov_2dj4df7l8y().s[729]++;for(let o of i){cov_2dj4df7l8y().s[730]++;if(n=wn(Jr(o,e),t),typeof n<"u"){cov_2dj4df7l8y().b[327][0]++;cov_2dj4df7l8y().s[731]++;return Vi(e,n)?(cov_2dj4df7l8y().b[328][0]++,Hi(t,s,e,n)):(cov_2dj4df7l8y().b[328][1]++,n);}else{cov_2dj4df7l8y().b[327][1]++;}}}function wn(e,i){cov_2dj4df7l8y().f[282]++;cov_2dj4df7l8y().s[732]++;for(let t of i){cov_2dj4df7l8y().s[733]++;if(!t){cov_2dj4df7l8y().b[329][0]++;cov_2dj4df7l8y().s[734]++;continue;}else{cov_2dj4df7l8y().b[329][1]++;}let s=(cov_2dj4df7l8y().s[735]++,t[e]);cov_2dj4df7l8y().s[736]++;if(typeof s<"u"){cov_2dj4df7l8y().b[330][0]++;cov_2dj4df7l8y().s[737]++;return s;}else{cov_2dj4df7l8y().b[330][1]++;}}}function tn(e){cov_2dj4df7l8y().f[283]++;let i=(cov_2dj4df7l8y().s[738]++,e._keys);cov_2dj4df7l8y().s[739]++;return(cov_2dj4df7l8y().b[331][0]++,i)||(cov_2dj4df7l8y().b[331][1]++,i=e._keys=oa(e._scopes)),i;}function oa(e){cov_2dj4df7l8y().f[284]++;let i=(cov_2dj4df7l8y().s[740]++,new Set());cov_2dj4df7l8y().s[741]++;for(let t of e){cov_2dj4df7l8y().s[742]++;for(let s of Object.keys(t).filter(n=>{cov_2dj4df7l8y().f[285]++;cov_2dj4df7l8y().s[743]++;return!n.startsWith("_");})){cov_2dj4df7l8y().s[744]++;i.add(s);}}cov_2dj4df7l8y().s[745]++;return Array.from(i);}function ji(e,i,t,s){cov_2dj4df7l8y().f[286]++;let{iScale:n}=(cov_2dj4df7l8y().s[746]++,e),{key:o=(cov_2dj4df7l8y().b[332][0]++,"r")}=(cov_2dj4df7l8y().s[747]++,this._parsing),r=(cov_2dj4df7l8y().s[748]++,new Array(s)),a,l,c,h;cov_2dj4df7l8y().s[749]++;for(a=0,l=s;a{cov_2dj4df7l8y().f[287]++;cov_2dj4df7l8y().s[754]++;return(cov_2dj4df7l8y().b[334][0]++,i{cov_2dj4df7l8y().f[288]++;cov_2dj4df7l8y().s[756]++;return e==="x"?(cov_2dj4df7l8y().b[335][0]++,"y"):(cov_2dj4df7l8y().b[335][1]++,"x");};function aa(e,i,t,s){cov_2dj4df7l8y().f[289]++;let n=(cov_2dj4df7l8y().s[757]++,e.skip?(cov_2dj4df7l8y().b[336][0]++,i):(cov_2dj4df7l8y().b[336][1]++,e)),o=(cov_2dj4df7l8y().s[758]++,i),r=(cov_2dj4df7l8y().s[759]++,t.skip?(cov_2dj4df7l8y().b[337][0]++,i):(cov_2dj4df7l8y().b[337][1]++,t)),a=(cov_2dj4df7l8y().s[760]++,ze(o,n)),l=(cov_2dj4df7l8y().s[761]++,ze(r,o)),c=(cov_2dj4df7l8y().s[762]++,a/(a+l)),h=(cov_2dj4df7l8y().s[763]++,l/(a+l));cov_2dj4df7l8y().s[764]++;c=isNaN(c)?(cov_2dj4df7l8y().b[338][0]++,0):(cov_2dj4df7l8y().b[338][1]++,c),h=isNaN(h)?(cov_2dj4df7l8y().b[339][0]++,0):(cov_2dj4df7l8y().b[339][1]++,h);let d=(cov_2dj4df7l8y().s[765]++,s*c),f=(cov_2dj4df7l8y().s[766]++,s*h);cov_2dj4df7l8y().s[767]++;return{previous:{x:o.x-d*(r.x-n.x),y:o.y-d*(r.y-n.y)},next:{x:o.x+f*(r.x-n.x),y:o.y+f*(r.y-n.y)}};}function la(e,i,t){cov_2dj4df7l8y().f[290]++;let s=(cov_2dj4df7l8y().s[768]++,e.length),n,o,r,a,l,c=(cov_2dj4df7l8y().s[769]++,Xt(e,0));cov_2dj4df7l8y().s[770]++;for(let h=(cov_2dj4df7l8y().s[771]++,0);h{cov_2dj4df7l8y().f[296]++;cov_2dj4df7l8y().s[804]++;return!c.skip;})),i.cubicInterpolationMode==="monotone"){cov_2dj4df7l8y().b[359][0]++;cov_2dj4df7l8y().s[805]++;ha(e,n);}else{cov_2dj4df7l8y().b[359][1]++;let c=(cov_2dj4df7l8y().s[806]++,s?(cov_2dj4df7l8y().b[361][0]++,e[e.length-1]):(cov_2dj4df7l8y().b[361][1]++,e[0]));cov_2dj4df7l8y().s[807]++;for(o=0,r=e.length;o{cov_2dj4df7l8y().f[300]++;cov_2dj4df7l8y().s[815]++;return e.ownerDocument.defaultView.getComputedStyle(e,null);};function fa(e,i){cov_2dj4df7l8y().f[301]++;cov_2dj4df7l8y().s[816]++;return qe(e).getPropertyValue(i);}var ua=(cov_2dj4df7l8y().s[817]++,["top","right","bottom","left"]);function Rt(e,i,t){cov_2dj4df7l8y().f[302]++;let s=(cov_2dj4df7l8y().s[818]++,{});cov_2dj4df7l8y().s[819]++;t=t?(cov_2dj4df7l8y().b[368][0]++,"-"+t):(cov_2dj4df7l8y().b[368][1]++,"");cov_2dj4df7l8y().s[820]++;for(let n=(cov_2dj4df7l8y().s[821]++,0);n<4;n++){let o=(cov_2dj4df7l8y().s[822]++,ua[n]);cov_2dj4df7l8y().s[823]++;s[o]=(cov_2dj4df7l8y().b[369][0]++,parseFloat(e[i+"-"+o+t]))||(cov_2dj4df7l8y().b[369][1]++,0);}cov_2dj4df7l8y().s[824]++;return s.width=s.left+s.right,s.height=s.top+s.bottom,s;}cov_2dj4df7l8y().s[825]++;var ga=(e,i,t)=>{cov_2dj4df7l8y().f[303]++;cov_2dj4df7l8y().s[826]++;return((cov_2dj4df7l8y().b[370][0]++,e>0)||(cov_2dj4df7l8y().b[370][1]++,i>0))&&((cov_2dj4df7l8y().b[370][2]++,!t)||(cov_2dj4df7l8y().b[370][3]++,!t.shadowRoot));};function pa(e,i){cov_2dj4df7l8y().f[304]++;let t=(cov_2dj4df7l8y().s[827]++,e.touches),s=(cov_2dj4df7l8y().s[828]++,(cov_2dj4df7l8y().b[372][0]++,t)&&(cov_2dj4df7l8y().b[372][1]++,t.length)?(cov_2dj4df7l8y().b[371][0]++,t[0]):(cov_2dj4df7l8y().b[371][1]++,e)),{offsetX:n,offsetY:o}=(cov_2dj4df7l8y().s[829]++,s),r=(cov_2dj4df7l8y().s[830]++,!1),a,l;cov_2dj4df7l8y().s[831]++;if(ga(n,o,e.target)){cov_2dj4df7l8y().b[373][0]++;cov_2dj4df7l8y().s[832]++;a=n,l=o;}else{cov_2dj4df7l8y().b[373][1]++;let c=(cov_2dj4df7l8y().s[833]++,i.getBoundingClientRect());cov_2dj4df7l8y().s[834]++;a=s.clientX-c.left,l=s.clientY-c.top,r=!0;}cov_2dj4df7l8y().s[835]++;return{x:a,y:l,box:r};}function Pt(e,i){cov_2dj4df7l8y().f[305]++;cov_2dj4df7l8y().s[836]++;if("native"in e){cov_2dj4df7l8y().b[374][0]++;cov_2dj4df7l8y().s[837]++;return e;}else{cov_2dj4df7l8y().b[374][1]++;}let{canvas:t,currentDevicePixelRatio:s}=(cov_2dj4df7l8y().s[838]++,i),n=(cov_2dj4df7l8y().s[839]++,qe(t)),o=(cov_2dj4df7l8y().s[840]++,n.boxSizing==="border-box"),r=(cov_2dj4df7l8y().s[841]++,Rt(n,"padding")),a=(cov_2dj4df7l8y().s[842]++,Rt(n,"border","width")),{x:l,y:c,box:h}=(cov_2dj4df7l8y().s[843]++,pa(e,t)),d=(cov_2dj4df7l8y().s[844]++,r.left+((cov_2dj4df7l8y().b[375][0]++,h)&&(cov_2dj4df7l8y().b[375][1]++,a.left))),f=(cov_2dj4df7l8y().s[845]++,r.top+((cov_2dj4df7l8y().b[376][0]++,h)&&(cov_2dj4df7l8y().b[376][1]++,a.top))),{width:u,height:p}=(cov_2dj4df7l8y().s[846]++,i);cov_2dj4df7l8y().s[847]++;return(cov_2dj4df7l8y().b[377][0]++,o)&&(cov_2dj4df7l8y().b[377][1]++,u-=r.width+a.width,p-=r.height+a.height),{x:Math.round((l-d)/u*t.width/s),y:Math.round((c-f)/p*t.height/s)};}function ma(e,i,t){cov_2dj4df7l8y().f[306]++;let s,n;cov_2dj4df7l8y().s[848]++;if((cov_2dj4df7l8y().b[379][0]++,i===void 0)||(cov_2dj4df7l8y().b[379][1]++,t===void 0)){cov_2dj4df7l8y().b[378][0]++;let o=(cov_2dj4df7l8y().s[849]++,(cov_2dj4df7l8y().b[380][0]++,e)&&(cov_2dj4df7l8y().b[380][1]++,Ke(e)));cov_2dj4df7l8y().s[850]++;if(!o){cov_2dj4df7l8y().b[381][0]++;cov_2dj4df7l8y().s[851]++;i=e.clientWidth,t=e.clientHeight;}else{cov_2dj4df7l8y().b[381][1]++;let r=(cov_2dj4df7l8y().s[852]++,o.getBoundingClientRect()),a=(cov_2dj4df7l8y().s[853]++,qe(o)),l=(cov_2dj4df7l8y().s[854]++,Rt(a,"border","width")),c=(cov_2dj4df7l8y().s[855]++,Rt(a,"padding"));cov_2dj4df7l8y().s[856]++;i=r.width-c.width-l.width,t=r.height-c.height-l.height,s=Be(a.maxWidth,o,"clientWidth"),n=Be(a.maxHeight,o,"clientHeight");}}else{cov_2dj4df7l8y().b[378][1]++;}cov_2dj4df7l8y().s[857]++;return{width:i,height:t,maxWidth:(cov_2dj4df7l8y().b[382][0]++,s)||(cov_2dj4df7l8y().b[382][1]++,Fe),maxHeight:(cov_2dj4df7l8y().b[383][0]++,n)||(cov_2dj4df7l8y().b[383][1]++,Fe)};}cov_2dj4df7l8y().s[858]++;var Mt=e=>{cov_2dj4df7l8y().f[307]++;cov_2dj4df7l8y().s[859]++;return Math.round(e*10)/10;};function Dn(e,i,t,s){cov_2dj4df7l8y().f[308]++;let n=(cov_2dj4df7l8y().s[860]++,qe(e)),o=(cov_2dj4df7l8y().s[861]++,Rt(n,"margin")),r=(cov_2dj4df7l8y().s[862]++,(cov_2dj4df7l8y().b[384][0]++,Be(n.maxWidth,e,"clientWidth"))||(cov_2dj4df7l8y().b[384][1]++,Fe)),a=(cov_2dj4df7l8y().s[863]++,(cov_2dj4df7l8y().b[385][0]++,Be(n.maxHeight,e,"clientHeight"))||(cov_2dj4df7l8y().b[385][1]++,Fe)),l=(cov_2dj4df7l8y().s[864]++,ma(e,i,t)),{width:c,height:h}=(cov_2dj4df7l8y().s[865]++,l);cov_2dj4df7l8y().s[866]++;if(n.boxSizing==="content-box"){cov_2dj4df7l8y().b[386][0]++;let f=(cov_2dj4df7l8y().s[867]++,Rt(n,"border","width")),u=(cov_2dj4df7l8y().s[868]++,Rt(n,"padding"));cov_2dj4df7l8y().s[869]++;c-=u.width+f.width,h-=u.height+f.height;}else{cov_2dj4df7l8y().b[386][1]++;}cov_2dj4df7l8y().s[870]++;return c=Math.max(0,c-o.width),h=Math.max(0,s?(cov_2dj4df7l8y().b[387][0]++,c/s):(cov_2dj4df7l8y().b[387][1]++,h-o.height)),c=Mt(Math.min(c,r,l.maxWidth)),h=Mt(Math.min(h,a,l.maxHeight)),(cov_2dj4df7l8y().b[388][0]++,c)&&(cov_2dj4df7l8y().b[388][1]++,!h)&&(cov_2dj4df7l8y().b[388][2]++,h=Mt(c/2)),((cov_2dj4df7l8y().b[389][0]++,i!==void 0)||(cov_2dj4df7l8y().b[389][1]++,t!==void 0))&&(cov_2dj4df7l8y().b[389][2]++,s)&&(cov_2dj4df7l8y().b[389][3]++,l.height)&&(cov_2dj4df7l8y().b[389][4]++,h>l.height)&&(cov_2dj4df7l8y().b[389][5]++,h=l.height,c=Mt(Math.floor(h*s))),{width:c,height:h};}function Yi(e,i,t){cov_2dj4df7l8y().f[309]++;let s=(cov_2dj4df7l8y().s[871]++,(cov_2dj4df7l8y().b[390][0]++,i)||(cov_2dj4df7l8y().b[390][1]++,1)),n=(cov_2dj4df7l8y().s[872]++,Mt(e.height*s)),o=(cov_2dj4df7l8y().s[873]++,Mt(e.width*s));cov_2dj4df7l8y().s[874]++;e.height=Mt(e.height),e.width=Mt(e.width);let r=(cov_2dj4df7l8y().s[875]++,e.canvas);cov_2dj4df7l8y().s[876]++;return(cov_2dj4df7l8y().b[391][0]++,r.style)&&((cov_2dj4df7l8y().b[391][1]++,t)||(cov_2dj4df7l8y().b[391][2]++,!r.style.height)&&(cov_2dj4df7l8y().b[391][3]++,!r.style.width))&&(cov_2dj4df7l8y().b[391][4]++,r.style.height=`${e.height}px`,r.style.width=`${e.width}px`),(cov_2dj4df7l8y().b[393][0]++,e.currentDevicePixelRatio!==s)||(cov_2dj4df7l8y().b[393][1]++,r.height!==n)||(cov_2dj4df7l8y().b[393][2]++,r.width!==o)?(cov_2dj4df7l8y().b[392][0]++,e.currentDevicePixelRatio=s,r.height=n,r.width=o,e.ctx.setTransform(s,0,0,s,0,0),!0):(cov_2dj4df7l8y().b[392][1]++,!1);}var On=(cov_2dj4df7l8y().s[877]++,function(){cov_2dj4df7l8y().f[310]++;let e=(cov_2dj4df7l8y().s[878]++,!1);cov_2dj4df7l8y().s[879]++;try{let i=(cov_2dj4df7l8y().s[880]++,{get passive(){cov_2dj4df7l8y().f[311]++;cov_2dj4df7l8y().s[881]++;return e=!0,!1;}});cov_2dj4df7l8y().s[882]++;(cov_2dj4df7l8y().b[394][0]++,Xe())&&(cov_2dj4df7l8y().b[394][1]++,window.addEventListener("test",null,i),window.removeEventListener("test",null,i));}catch{}cov_2dj4df7l8y().s[883]++;return e;}());function $i(e,i){cov_2dj4df7l8y().f[312]++;let t=(cov_2dj4df7l8y().s[884]++,fa(e,i)),s=(cov_2dj4df7l8y().s[885]++,(cov_2dj4df7l8y().b[395][0]++,t)&&(cov_2dj4df7l8y().b[395][1]++,t.match(/^(\d+)(\.\d+)?px$/)));cov_2dj4df7l8y().s[886]++;return s?(cov_2dj4df7l8y().b[396][0]++,+s[1]):(cov_2dj4df7l8y().b[396][1]++,void 0);}function vt(e,i,t,s){cov_2dj4df7l8y().f[313]++;cov_2dj4df7l8y().s[887]++;return{x:e.x+t*(i.x-e.x),y:e.y+t*(i.y-e.y)};}function An(e,i,t,s){cov_2dj4df7l8y().f[314]++;cov_2dj4df7l8y().s[888]++;return{x:e.x+t*(i.x-e.x),y:s==="middle"?(cov_2dj4df7l8y().b[397][0]++,t<.5?(cov_2dj4df7l8y().b[398][0]++,e.y):(cov_2dj4df7l8y().b[398][1]++,i.y)):(cov_2dj4df7l8y().b[397][1]++,s==="after"?(cov_2dj4df7l8y().b[399][0]++,t<1?(cov_2dj4df7l8y().b[400][0]++,e.y):(cov_2dj4df7l8y().b[400][1]++,i.y)):(cov_2dj4df7l8y().b[399][1]++,t>0?(cov_2dj4df7l8y().b[401][0]++,i.y):(cov_2dj4df7l8y().b[401][1]++,e.y)))};}function Tn(e,i,t,s){cov_2dj4df7l8y().f[315]++;let n=(cov_2dj4df7l8y().s[889]++,{x:e.cp2x,y:e.cp2y}),o=(cov_2dj4df7l8y().s[890]++,{x:i.cp1x,y:i.cp1y}),r=(cov_2dj4df7l8y().s[891]++,vt(e,n,t)),a=(cov_2dj4df7l8y().s[892]++,vt(n,o,t)),l=(cov_2dj4df7l8y().s[893]++,vt(o,i,t)),c=(cov_2dj4df7l8y().s[894]++,vt(r,a,t)),h=(cov_2dj4df7l8y().s[895]++,vt(a,l,t));cov_2dj4df7l8y().s[896]++;return vt(c,h,t);}cov_2dj4df7l8y().s[897]++;cov_2dj4df7l8y().s[904]++;var ba=function(e,i){cov_2dj4df7l8y().f[316]++;cov_2dj4df7l8y().s[898]++;return{x(t){cov_2dj4df7l8y().f[317]++;cov_2dj4df7l8y().s[899]++;return e+e+i-t;},setWidth(t){cov_2dj4df7l8y().f[318]++;cov_2dj4df7l8y().s[900]++;i=t;},textAlign(t){cov_2dj4df7l8y().f[319]++;cov_2dj4df7l8y().s[901]++;return t==="center"?(cov_2dj4df7l8y().b[402][0]++,t):(cov_2dj4df7l8y().b[402][1]++,t==="right"?(cov_2dj4df7l8y().b[403][0]++,"left"):(cov_2dj4df7l8y().b[403][1]++,"right"));},xPlus(t,s){cov_2dj4df7l8y().f[320]++;cov_2dj4df7l8y().s[902]++;return t-s;},leftForLtr(t,s){cov_2dj4df7l8y().f[321]++;cov_2dj4df7l8y().s[903]++;return t-s;}};},xa=function(){cov_2dj4df7l8y().f[322]++;cov_2dj4df7l8y().s[905]++;return{x(e){cov_2dj4df7l8y().f[323]++;cov_2dj4df7l8y().s[906]++;return e;},setWidth(e){cov_2dj4df7l8y().f[324]++;},textAlign(e){cov_2dj4df7l8y().f[325]++;cov_2dj4df7l8y().s[907]++;return e;},xPlus(e,i){cov_2dj4df7l8y().f[326]++;cov_2dj4df7l8y().s[908]++;return e+i;},leftForLtr(e,i){cov_2dj4df7l8y().f[327]++;cov_2dj4df7l8y().s[909]++;return e;}};};function Ft(e,i,t){cov_2dj4df7l8y().f[328]++;cov_2dj4df7l8y().s[910]++;return e?(cov_2dj4df7l8y().b[404][0]++,ba(i,t)):(cov_2dj4df7l8y().b[404][1]++,xa());}function Ui(e,i){cov_2dj4df7l8y().f[329]++;let t,s;cov_2dj4df7l8y().s[911]++;((cov_2dj4df7l8y().b[405][0]++,i==="ltr")||(cov_2dj4df7l8y().b[405][1]++,i==="rtl"))&&(cov_2dj4df7l8y().b[405][2]++,t=e.canvas.style,s=[t.getPropertyValue("direction"),t.getPropertyPriority("direction")],t.setProperty("direction",i,"important"),e.prevTextDirection=s);}function Xi(e,i){cov_2dj4df7l8y().f[330]++;cov_2dj4df7l8y().s[912]++;(cov_2dj4df7l8y().b[406][0]++,i!==void 0)&&(cov_2dj4df7l8y().b[406][1]++,delete e.prevTextDirection,e.canvas.style.setProperty("direction",i[0],i[1]));}function Ln(e){cov_2dj4df7l8y().f[331]++;cov_2dj4df7l8y().s[913]++;return e==="angle"?(cov_2dj4df7l8y().b[407][0]++,{between:Jt,compare:Ir,normalize:U}):(cov_2dj4df7l8y().b[407][1]++,{between:ct,compare:(i,t)=>{cov_2dj4df7l8y().f[332]++;cov_2dj4df7l8y().s[914]++;return i-t;},normalize:i=>{cov_2dj4df7l8y().f[333]++;cov_2dj4df7l8y().s[915]++;return i;}});}function en({start:e,end:i,count:t,loop:s,style:n}){cov_2dj4df7l8y().f[334]++;cov_2dj4df7l8y().s[916]++;return{start:e%t,end:i%t,loop:(cov_2dj4df7l8y().b[408][0]++,s)&&(cov_2dj4df7l8y().b[408][1]++,(i-e+1)%t===0),style:n};}function _a(e,i,t){cov_2dj4df7l8y().f[335]++;let{property:s,start:n,end:o}=(cov_2dj4df7l8y().s[917]++,t),{between:r,normalize:a}=(cov_2dj4df7l8y().s[918]++,Ln(s)),l=(cov_2dj4df7l8y().s[919]++,i.length),{start:c,end:h,loop:d}=(cov_2dj4df7l8y().s[920]++,e),f,u;cov_2dj4df7l8y().s[921]++;if(d){cov_2dj4df7l8y().b[409][0]++;cov_2dj4df7l8y().s[922]++;for(c+=l,h+=l,f=0,u=l;(cov_2dj4df7l8y().b[410][0]++,f{cov_2dj4df7l8y().f[337]++;cov_2dj4df7l8y().s[936]++;return(cov_2dj4df7l8y().b[413][0]++,l(n,y,b))&&(cov_2dj4df7l8y().b[413][1]++,a(n,y)!==0);},_=()=>{cov_2dj4df7l8y().f[338]++;cov_2dj4df7l8y().s[938]++;return(cov_2dj4df7l8y().b[414][0]++,a(o,b)===0)||(cov_2dj4df7l8y().b[414][1]++,l(o,y,b));},v=()=>{cov_2dj4df7l8y().f[339]++;cov_2dj4df7l8y().s[940]++;return(cov_2dj4df7l8y().b[415][0]++,g)||(cov_2dj4df7l8y().b[415][1]++,M());},S=()=>{cov_2dj4df7l8y().f[340]++;cov_2dj4df7l8y().s[942]++;return(cov_2dj4df7l8y().b[416][0]++,!g)||(cov_2dj4df7l8y().b[416][1]++,_());};cov_2dj4df7l8y().s[943]++;for(let k=(cov_2dj4df7l8y().s[944]++,h),w=(cov_2dj4df7l8y().s[945]++,h);k<=d;++k){cov_2dj4df7l8y().s[946]++;x=i[k%r],(cov_2dj4df7l8y().b[417][0]++,!x.skip)&&(cov_2dj4df7l8y().b[417][1]++,b=c(x[s]),(cov_2dj4df7l8y().b[418][0]++,b!==y)&&(cov_2dj4df7l8y().b[418][1]++,g=l(b,n,o),(cov_2dj4df7l8y().b[419][0]++,m===null)&&(cov_2dj4df7l8y().b[419][1]++,v())&&(cov_2dj4df7l8y().b[419][2]++,m=a(b,n)===0?(cov_2dj4df7l8y().b[420][0]++,k):(cov_2dj4df7l8y().b[420][1]++,w)),(cov_2dj4df7l8y().b[421][0]++,m!==null)&&(cov_2dj4df7l8y().b[421][1]++,S())&&(cov_2dj4df7l8y().b[421][2]++,p.push(en({start:m,end:k,loop:f,count:r,style:u})),m=null),w=k,y=b));}cov_2dj4df7l8y().s[947]++;return(cov_2dj4df7l8y().b[422][0]++,m!==null)&&(cov_2dj4df7l8y().b[422][1]++,p.push(en({start:m,end:d,loop:f,count:r,style:u}))),p;}function qi(e,i){cov_2dj4df7l8y().f[341]++;let t=(cov_2dj4df7l8y().s[948]++,[]),s=(cov_2dj4df7l8y().s[949]++,e.segments);cov_2dj4df7l8y().s[950]++;for(let n=(cov_2dj4df7l8y().s[951]++,0);nn)&&(cov_2dj4df7l8y().b[429][1]++,e[o%i].skip);){cov_2dj4df7l8y().s[963]++;o--;}cov_2dj4df7l8y().s[964]++;return o%=i,{start:n,end:o};}function va(e,i,t,s){cov_2dj4df7l8y().f[343]++;let n=(cov_2dj4df7l8y().s[965]++,e.length),o=(cov_2dj4df7l8y().s[966]++,[]),r=(cov_2dj4df7l8y().s[967]++,i),a=(cov_2dj4df7l8y().s[968]++,e[i]),l;cov_2dj4df7l8y().s[969]++;for(l=i+1;l<=t;++l){let c=(cov_2dj4df7l8y().s[970]++,e[l%n]);cov_2dj4df7l8y().s[971]++;(cov_2dj4df7l8y().b[431][0]++,c.skip)||(cov_2dj4df7l8y().b[431][1]++,c.stop)?(cov_2dj4df7l8y().b[430][0]++,(cov_2dj4df7l8y().b[432][0]++,a.skip)||(cov_2dj4df7l8y().b[432][1]++,s=!1,o.push({start:i%n,end:(l-1)%n,loop:s}),i=r=c.stop?(cov_2dj4df7l8y().b[433][0]++,l):(cov_2dj4df7l8y().b[433][1]++,null))):(cov_2dj4df7l8y().b[430][1]++,r=l,(cov_2dj4df7l8y().b[434][0]++,a.skip)&&(cov_2dj4df7l8y().b[434][1]++,i=l)),a=c;}cov_2dj4df7l8y().s[972]++;return(cov_2dj4df7l8y().b[435][0]++,r!==null)&&(cov_2dj4df7l8y().b[435][1]++,o.push({start:i%n,end:r%n,loop:s})),o;}function Rn(e,i){cov_2dj4df7l8y().f[344]++;let t=(cov_2dj4df7l8y().s[973]++,e.points),s=(cov_2dj4df7l8y().s[974]++,e.options.spanGaps),n=(cov_2dj4df7l8y().s[975]++,t.length);cov_2dj4df7l8y().s[976]++;if(!n){cov_2dj4df7l8y().b[436][0]++;cov_2dj4df7l8y().s[977]++;return[];}else{cov_2dj4df7l8y().b[436][1]++;}let o=(cov_2dj4df7l8y().s[978]++,!!e._loop),{start:r,end:a}=(cov_2dj4df7l8y().s[979]++,ya(t,n,o,s));cov_2dj4df7l8y().s[980]++;if(s===!0){cov_2dj4df7l8y().b[437][0]++;cov_2dj4df7l8y().s[981]++;return sn(e,[{start:r,end:a,loop:o}],t,i);}else{cov_2dj4df7l8y().b[437][1]++;}let l=(cov_2dj4df7l8y().s[982]++,a{cov_2dj4df7l8y().f[356]++;cov_2dj4df7l8y().s[1029]++;return a({chart:i,initial:t.initial,numSteps:r,currentStep:Math.min(s-t.start,r)});});}_refresh(){cov_2dj4df7l8y().f[357]++;cov_2dj4df7l8y().s[1030]++;(cov_2dj4df7l8y().b[463][0]++,this._request)||(cov_2dj4df7l8y().b[463][1]++,this._running=!0,this._request=Ti.call(window,()=>{cov_2dj4df7l8y().f[358]++;cov_2dj4df7l8y().s[1031]++;this._update(),this._request=null,(cov_2dj4df7l8y().b[464][0]++,this._running)&&(cov_2dj4df7l8y().b[464][1]++,this._refresh());}));}_update(i=(cov_2dj4df7l8y().b[465][0]++,Date.now())){cov_2dj4df7l8y().f[359]++;let t=(cov_2dj4df7l8y().s[1032]++,0);cov_2dj4df7l8y().s[1033]++;this._charts.forEach((s,n)=>{cov_2dj4df7l8y().f[360]++;cov_2dj4df7l8y().s[1034]++;if((cov_2dj4df7l8y().b[467][0]++,!s.running)||(cov_2dj4df7l8y().b[467][1]++,!s.items.length)){cov_2dj4df7l8y().b[466][0]++;cov_2dj4df7l8y().s[1035]++;return;}else{cov_2dj4df7l8y().b[466][1]++;}let o=(cov_2dj4df7l8y().s[1036]++,s.items),r=(cov_2dj4df7l8y().s[1037]++,o.length-1),a=(cov_2dj4df7l8y().s[1038]++,!1),l;cov_2dj4df7l8y().s[1039]++;for(;r>=0;--r){cov_2dj4df7l8y().s[1040]++;l=o[r],l._active?(cov_2dj4df7l8y().b[468][0]++,(cov_2dj4df7l8y().b[469][0]++,l._total>s.duration)&&(cov_2dj4df7l8y().b[469][1]++,s.duration=l._total),l.tick(i),a=!0):(cov_2dj4df7l8y().b[468][1]++,o[r]=o[o.length-1],o.pop());}cov_2dj4df7l8y().s[1041]++;(cov_2dj4df7l8y().b[470][0]++,a)&&(cov_2dj4df7l8y().b[470][1]++,n.draw(),this._notify(n,s,i,"progress")),(cov_2dj4df7l8y().b[471][0]++,o.length)||(cov_2dj4df7l8y().b[471][1]++,s.running=!1,this._notify(n,s,i,"complete"),s.initial=!1),t+=o.length;}),this._lastDate=i,(cov_2dj4df7l8y().b[472][0]++,t===0)&&(cov_2dj4df7l8y().b[472][1]++,this._running=!1);}_getAnims(i){cov_2dj4df7l8y().f[361]++;let t=(cov_2dj4df7l8y().s[1042]++,this._charts),s=(cov_2dj4df7l8y().s[1043]++,t.get(i));cov_2dj4df7l8y().s[1044]++;return(cov_2dj4df7l8y().b[473][0]++,s)||(cov_2dj4df7l8y().b[473][1]++,s={running:!1,initial:!0,items:[],listeners:{complete:[],progress:[]}},t.set(i,s)),s;}listen(i,t,s){cov_2dj4df7l8y().f[362]++;cov_2dj4df7l8y().s[1045]++;this._getAnims(i).listeners[t].push(s);}add(i,t){cov_2dj4df7l8y().f[363]++;cov_2dj4df7l8y().s[1046]++;(cov_2dj4df7l8y().b[474][0]++,!t)||(cov_2dj4df7l8y().b[474][1]++,!t.length)||(cov_2dj4df7l8y().b[474][2]++,this._getAnims(i).items.push(...t));}has(i){cov_2dj4df7l8y().f[364]++;cov_2dj4df7l8y().s[1047]++;return this._getAnims(i).items.length>0;}start(i){cov_2dj4df7l8y().f[365]++;let t=(cov_2dj4df7l8y().s[1048]++,this._charts.get(i));cov_2dj4df7l8y().s[1049]++;(cov_2dj4df7l8y().b[475][0]++,t)&&(cov_2dj4df7l8y().b[475][1]++,t.running=!0,t.start=Date.now(),t.duration=t.items.reduce((s,n)=>{cov_2dj4df7l8y().f[366]++;cov_2dj4df7l8y().s[1050]++;return Math.max(s,n._duration);},0),this._refresh());}running(i){cov_2dj4df7l8y().f[367]++;cov_2dj4df7l8y().s[1051]++;if(!this._running){cov_2dj4df7l8y().b[476][0]++;cov_2dj4df7l8y().s[1052]++;return!1;}else{cov_2dj4df7l8y().b[476][1]++;}let t=(cov_2dj4df7l8y().s[1053]++,this._charts.get(i));cov_2dj4df7l8y().s[1054]++;return!((cov_2dj4df7l8y().b[477][0]++,!t)||(cov_2dj4df7l8y().b[477][1]++,!t.running)||(cov_2dj4df7l8y().b[477][2]++,!t.items.length));}stop(i){cov_2dj4df7l8y().f[368]++;let t=(cov_2dj4df7l8y().s[1055]++,this._charts.get(i));cov_2dj4df7l8y().s[1056]++;if((cov_2dj4df7l8y().b[479][0]++,!t)||(cov_2dj4df7l8y().b[479][1]++,!t.items.length)){cov_2dj4df7l8y().b[478][0]++;cov_2dj4df7l8y().s[1057]++;return;}else{cov_2dj4df7l8y().b[478][1]++;}let s=(cov_2dj4df7l8y().s[1058]++,t.items),n=(cov_2dj4df7l8y().s[1059]++,s.length-1);cov_2dj4df7l8y().s[1060]++;for(;n>=0;--n){cov_2dj4df7l8y().s[1061]++;s[n].cancel();}cov_2dj4df7l8y().s[1062]++;t.items=[],this._notify(i,t,Date.now(),"complete");}remove(i){cov_2dj4df7l8y().f[369]++;cov_2dj4df7l8y().s[1063]++;return this._charts.delete(i);}},bt=(cov_2dj4df7l8y().s[1064]++,new ls()),En=(cov_2dj4df7l8y().s[1065]++,"transparent"),wa=(cov_2dj4df7l8y().s[1066]++,{boolean(e,i,t){cov_2dj4df7l8y().f[370]++;cov_2dj4df7l8y().s[1067]++;return t>.5?(cov_2dj4df7l8y().b[480][0]++,i):(cov_2dj4df7l8y().b[480][1]++,e);},color(e,i,t){cov_2dj4df7l8y().f[371]++;let s=(cov_2dj4df7l8y().s[1068]++,Fi((cov_2dj4df7l8y().b[481][0]++,e)||(cov_2dj4df7l8y().b[481][1]++,En))),n=(cov_2dj4df7l8y().s[1069]++,(cov_2dj4df7l8y().b[482][0]++,s.valid)&&(cov_2dj4df7l8y().b[482][1]++,Fi((cov_2dj4df7l8y().b[483][0]++,i)||(cov_2dj4df7l8y().b[483][1]++,En))));cov_2dj4df7l8y().s[1070]++;return(cov_2dj4df7l8y().b[485][0]++,n)&&(cov_2dj4df7l8y().b[485][1]++,n.valid)?(cov_2dj4df7l8y().b[484][0]++,n.mix(s,t).hexString()):(cov_2dj4df7l8y().b[484][1]++,i);},number(e,i,t){cov_2dj4df7l8y().f[372]++;cov_2dj4df7l8y().s[1071]++;return e+(i-e)*t;}}),cs=class{constructor(i,t,s,n){cov_2dj4df7l8y().f[373]++;let o=(cov_2dj4df7l8y().s[1073]++,t[s]);cov_2dj4df7l8y().s[1074]++;n=te([i.to,n,o,i.from]);let r=(cov_2dj4df7l8y().s[1075]++,te([i.from,o,n]));cov_2dj4df7l8y().s[1076]++;this._active=!0,this._fn=(cov_2dj4df7l8y().b[486][0]++,i.fn)||(cov_2dj4df7l8y().b[486][1]++,wa[(cov_2dj4df7l8y().b[487][0]++,i.type)||(cov_2dj4df7l8y().b[487][1]++,typeof r)]),this._easing=(cov_2dj4df7l8y().b[488][0]++,$t[i.easing])||(cov_2dj4df7l8y().b[488][1]++,$t.linear),this._start=Math.floor(Date.now()+((cov_2dj4df7l8y().b[489][0]++,i.delay)||(cov_2dj4df7l8y().b[489][1]++,0))),this._duration=this._total=Math.floor(i.duration),this._loop=!!i.loop,this._target=t,this._prop=s,this._from=r,this._to=n,this._promises=void 0;}active(){cov_2dj4df7l8y().f[374]++;cov_2dj4df7l8y().s[1077]++;return this._active;}update(i,t,s){cov_2dj4df7l8y().f[375]++;cov_2dj4df7l8y().s[1078]++;if(this._active){cov_2dj4df7l8y().b[490][0]++;cov_2dj4df7l8y().s[1079]++;this._notify(!1);let n=(cov_2dj4df7l8y().s[1080]++,this._target[this._prop]),o=(cov_2dj4df7l8y().s[1081]++,s-this._start),r=(cov_2dj4df7l8y().s[1082]++,this._duration-o);cov_2dj4df7l8y().s[1083]++;this._start=s,this._duration=Math.floor(Math.max(r,i.duration)),this._total+=o,this._loop=!!i.loop,this._to=te([i.to,t,n,i.from]),this._from=te([i.from,n,t]);}else{cov_2dj4df7l8y().b[490][1]++;}}cancel(){cov_2dj4df7l8y().f[376]++;cov_2dj4df7l8y().s[1084]++;(cov_2dj4df7l8y().b[491][0]++,this._active)&&(cov_2dj4df7l8y().b[491][1]++,this.tick(Date.now()),this._active=!1,this._notify(!1));}tick(i){cov_2dj4df7l8y().f[377]++;let t=(cov_2dj4df7l8y().s[1085]++,i-this._start),s=(cov_2dj4df7l8y().s[1086]++,this._duration),n=(cov_2dj4df7l8y().s[1087]++,this._prop),o=(cov_2dj4df7l8y().s[1088]++,this._from),r=(cov_2dj4df7l8y().s[1089]++,this._loop),a=(cov_2dj4df7l8y().s[1090]++,this._to),l;cov_2dj4df7l8y().s[1091]++;if(this._active=(cov_2dj4df7l8y().b[493][0]++,o!==a)&&((cov_2dj4df7l8y().b[493][1]++,r)||(cov_2dj4df7l8y().b[493][2]++,t1)?(cov_2dj4df7l8y().b[495][0]++,2-l):(cov_2dj4df7l8y().b[495][1]++,l),l=this._easing(Math.min(1,Math.max(0,l))),this._target[n]=this._fn(o,a,l);}wait(){cov_2dj4df7l8y().f[378]++;let i=(cov_2dj4df7l8y().s[1098]++,(cov_2dj4df7l8y().b[497][0]++,this._promises)||(cov_2dj4df7l8y().b[497][1]++,this._promises=[]));cov_2dj4df7l8y().s[1099]++;return new Promise((t,s)=>{cov_2dj4df7l8y().f[379]++;cov_2dj4df7l8y().s[1100]++;i.push({res:t,rej:s});});}_notify(i){cov_2dj4df7l8y().f[380]++;let t=(cov_2dj4df7l8y().s[1101]++,i?(cov_2dj4df7l8y().b[498][0]++,"res"):(cov_2dj4df7l8y().b[498][1]++,"rej")),s=(cov_2dj4df7l8y().s[1102]++,(cov_2dj4df7l8y().b[499][0]++,this._promises)||(cov_2dj4df7l8y().b[499][1]++,[]));cov_2dj4df7l8y().s[1103]++;for(let n=(cov_2dj4df7l8y().s[1104]++,0);n{cov_2dj4df7l8y().f[383]++;let o=(cov_2dj4df7l8y().s[1113]++,i[n]);cov_2dj4df7l8y().s[1114]++;if(!A(o)){cov_2dj4df7l8y().b[501][0]++;cov_2dj4df7l8y().s[1115]++;return;}else{cov_2dj4df7l8y().b[501][1]++;}let r=(cov_2dj4df7l8y().s[1116]++,{});cov_2dj4df7l8y().s[1117]++;for(let a of t){cov_2dj4df7l8y().s[1118]++;r[a]=o[a];}cov_2dj4df7l8y().s[1119]++;((cov_2dj4df7l8y().b[502][0]++,z(o.properties))&&(cov_2dj4df7l8y().b[502][1]++,o.properties)||(cov_2dj4df7l8y().b[502][2]++,[n])).forEach(a=>{cov_2dj4df7l8y().f[384]++;cov_2dj4df7l8y().s[1120]++;((cov_2dj4df7l8y().b[503][0]++,a===n)||(cov_2dj4df7l8y().b[503][1]++,!s.has(a)))&&(cov_2dj4df7l8y().b[503][2]++,s.set(a,r));});});}_animateOptions(i,t){cov_2dj4df7l8y().f[385]++;let s=(cov_2dj4df7l8y().s[1121]++,t.options),n=(cov_2dj4df7l8y().s[1122]++,Pa(i,s));cov_2dj4df7l8y().s[1123]++;if(!n){cov_2dj4df7l8y().b[504][0]++;cov_2dj4df7l8y().s[1124]++;return[];}else{cov_2dj4df7l8y().b[504][1]++;}let o=(cov_2dj4df7l8y().s[1125]++,this._createAnimations(n,s));cov_2dj4df7l8y().s[1126]++;return(cov_2dj4df7l8y().b[505][0]++,s.$shared)&&(cov_2dj4df7l8y().b[505][1]++,Ca(i.options.$animations,s).then(()=>{cov_2dj4df7l8y().f[386]++;cov_2dj4df7l8y().s[1127]++;i.options=s;},()=>{cov_2dj4df7l8y().f[387]++;})),o;}_createAnimations(i,t){cov_2dj4df7l8y().f[388]++;let s=(cov_2dj4df7l8y().s[1128]++,this._properties),n=(cov_2dj4df7l8y().s[1129]++,[]),o=(cov_2dj4df7l8y().s[1130]++,(cov_2dj4df7l8y().b[506][0]++,i.$animations)||(cov_2dj4df7l8y().b[506][1]++,i.$animations={})),r=(cov_2dj4df7l8y().s[1131]++,Object.keys(t)),a=(cov_2dj4df7l8y().s[1132]++,Date.now()),l;cov_2dj4df7l8y().s[1133]++;for(l=r.length-1;l>=0;--l){let c=(cov_2dj4df7l8y().s[1134]++,r[l]);cov_2dj4df7l8y().s[1135]++;if(c.charAt(0)==="$"){cov_2dj4df7l8y().b[507][0]++;cov_2dj4df7l8y().s[1136]++;continue;}else{cov_2dj4df7l8y().b[507][1]++;}cov_2dj4df7l8y().s[1137]++;if(c==="options"){cov_2dj4df7l8y().b[508][0]++;cov_2dj4df7l8y().s[1138]++;n.push(...this._animateOptions(i,t));cov_2dj4df7l8y().s[1139]++;continue;}else{cov_2dj4df7l8y().b[508][1]++;}let h=(cov_2dj4df7l8y().s[1140]++,t[c]),d=(cov_2dj4df7l8y().s[1141]++,o[c]),f=(cov_2dj4df7l8y().s[1142]++,s.get(c));cov_2dj4df7l8y().s[1143]++;if(d){cov_2dj4df7l8y().b[509][0]++;cov_2dj4df7l8y().s[1144]++;if((cov_2dj4df7l8y().b[511][0]++,f)&&(cov_2dj4df7l8y().b[511][1]++,d.active())){cov_2dj4df7l8y().b[510][0]++;cov_2dj4df7l8y().s[1145]++;d.update(f,h,a);cov_2dj4df7l8y().s[1146]++;continue;}else{cov_2dj4df7l8y().b[510][1]++;cov_2dj4df7l8y().s[1147]++;d.cancel();}}else{cov_2dj4df7l8y().b[509][1]++;}cov_2dj4df7l8y().s[1148]++;if((cov_2dj4df7l8y().b[513][0]++,!f)||(cov_2dj4df7l8y().b[513][1]++,!f.duration)){cov_2dj4df7l8y().b[512][0]++;cov_2dj4df7l8y().s[1149]++;i[c]=h;cov_2dj4df7l8y().s[1150]++;continue;}else{cov_2dj4df7l8y().b[512][1]++;}cov_2dj4df7l8y().s[1151]++;o[c]=d=new cs(f,i,c,h),n.push(d);}cov_2dj4df7l8y().s[1152]++;return n;}update(i,t){cov_2dj4df7l8y().f[389]++;cov_2dj4df7l8y().s[1153]++;if(this._properties.size===0){cov_2dj4df7l8y().b[514][0]++;cov_2dj4df7l8y().s[1154]++;Object.assign(i,t);cov_2dj4df7l8y().s[1155]++;return;}else{cov_2dj4df7l8y().b[514][1]++;}let s=(cov_2dj4df7l8y().s[1156]++,this._createAnimations(i,t));cov_2dj4df7l8y().s[1157]++;if(s.length){cov_2dj4df7l8y().b[515][0]++;cov_2dj4df7l8y().s[1158]++;return bt.add(this._chart,s),!0;}else{cov_2dj4df7l8y().b[515][1]++;}}};function Ca(e,i){cov_2dj4df7l8y().f[390]++;let t=(cov_2dj4df7l8y().s[1159]++,[]),s=(cov_2dj4df7l8y().s[1160]++,Object.keys(i));cov_2dj4df7l8y().s[1161]++;for(let n=(cov_2dj4df7l8y().s[1162]++,0);n0)||(cov_2dj4df7l8y().b[544][2]++,!t)&&(cov_2dj4df7l8y().b[544][3]++,o<0)){cov_2dj4df7l8y().b[543][0]++;cov_2dj4df7l8y().s[1219]++;return n.index;}else{cov_2dj4df7l8y().b[543][1]++;}}cov_2dj4df7l8y().s[1220]++;return null;}function Bn(e,i){cov_2dj4df7l8y().f[403]++;let{chart:t,_cachedMeta:s}=(cov_2dj4df7l8y().s[1221]++,e),n=(cov_2dj4df7l8y().s[1222]++,(cov_2dj4df7l8y().b[545][0]++,t._stacks)||(cov_2dj4df7l8y().b[545][1]++,t._stacks={})),{iScale:o,vScale:r,index:a}=(cov_2dj4df7l8y().s[1223]++,s),l=(cov_2dj4df7l8y().s[1224]++,o.axis),c=(cov_2dj4df7l8y().s[1225]++,r.axis),h=(cov_2dj4df7l8y().s[1226]++,Ta(o,r,s)),d=(cov_2dj4df7l8y().s[1227]++,i.length),f;cov_2dj4df7l8y().s[1228]++;for(let u=(cov_2dj4df7l8y().s[1229]++,0);u{cov_2dj4df7l8y().f[405]++;cov_2dj4df7l8y().s[1238]++;return t[s].axis===i;}).shift();}function Ea(e,i){cov_2dj4df7l8y().f[406]++;cov_2dj4df7l8y().s[1239]++;return mt(e,{active:!1,dataset:void 0,datasetIndex:i,index:i,mode:"default",type:"dataset"});}function Ia(e,i,t){cov_2dj4df7l8y().f[407]++;cov_2dj4df7l8y().s[1240]++;return mt(e,{active:!1,dataIndex:i,parsed:void 0,raw:void 0,element:t,index:i,mode:"default",type:"data"});}function pe(e,i){cov_2dj4df7l8y().f[408]++;let t=(cov_2dj4df7l8y().s[1241]++,e.controller.index),s=(cov_2dj4df7l8y().s[1242]++,(cov_2dj4df7l8y().b[548][0]++,e.vScale)&&(cov_2dj4df7l8y().b[548][1]++,e.vScale.axis));cov_2dj4df7l8y().s[1243]++;if(s){cov_2dj4df7l8y().b[549][0]++;cov_2dj4df7l8y().s[1244]++;i=(cov_2dj4df7l8y().b[550][0]++,i)||(cov_2dj4df7l8y().b[550][1]++,e._parsed);cov_2dj4df7l8y().s[1245]++;for(let n of i){let o=(cov_2dj4df7l8y().s[1246]++,n._stacks);cov_2dj4df7l8y().s[1247]++;if((cov_2dj4df7l8y().b[552][0]++,!o)||(cov_2dj4df7l8y().b[552][1]++,o[s]===void 0)||(cov_2dj4df7l8y().b[552][2]++,o[s][t]===void 0)){cov_2dj4df7l8y().b[551][0]++;cov_2dj4df7l8y().s[1248]++;return;}else{cov_2dj4df7l8y().b[551][1]++;}cov_2dj4df7l8y().s[1249]++;delete o[s][t],(cov_2dj4df7l8y().b[553][0]++,o[s]._visualValues!==void 0)&&(cov_2dj4df7l8y().b[553][1]++,o[s]._visualValues[t]!==void 0)&&(cov_2dj4df7l8y().b[553][2]++,delete o[s]._visualValues[t]);}}else{cov_2dj4df7l8y().b[549][1]++;}}cov_2dj4df7l8y().s[1250]++;cov_2dj4df7l8y().s[1252]++;cov_2dj4df7l8y().s[1254]++;var Qi=e=>{cov_2dj4df7l8y().f[409]++;cov_2dj4df7l8y().s[1251]++;return(cov_2dj4df7l8y().b[554][0]++,e==="reset")||(cov_2dj4df7l8y().b[554][1]++,e==="none");},Wn=(e,i)=>{cov_2dj4df7l8y().f[410]++;cov_2dj4df7l8y().s[1253]++;return i?(cov_2dj4df7l8y().b[555][0]++,e):(cov_2dj4df7l8y().b[555][1]++,Object.assign({},e));},Fa=(e,i,t)=>{cov_2dj4df7l8y().f[411]++;cov_2dj4df7l8y().s[1255]++;return(cov_2dj4df7l8y().b[556][0]++,e)&&(cov_2dj4df7l8y().b[556][1]++,!i.hidden)&&(cov_2dj4df7l8y().b[556][2]++,i._stacked)&&(cov_2dj4df7l8y().b[556][3]++,{keys:Io(t,!0),values:null});},Ot=(cov_2dj4df7l8y().s[1256]++,(()=>{cov_2dj4df7l8y().f[412]++;class e{static defaults=(cov_2dj4df7l8y().s[1257]++,{});static datasetElementType=(cov_2dj4df7l8y().s[1258]++,null);static dataElementType=(cov_2dj4df7l8y().s[1259]++,null);constructor(t,s){cov_2dj4df7l8y().f[413]++;cov_2dj4df7l8y().s[1260]++;this.chart=t,this._ctx=t.ctx,this.index=s,this._cachedDataOpts={},this._cachedMeta=this.getMeta(),this._type=this._cachedMeta.type,this.options=void 0,this._parsing=!1,this._data=void 0,this._objectData=void 0,this._sharedOptions=void 0,this._drawStart=void 0,this._drawCount=void 0,this.enableOptionSharing=!1,this.supportsDecimation=!1,this.$context=void 0,this._syncList=[],this.datasetElementType=new.target.datasetElementType,this.dataElementType=new.target.dataElementType,this.initialize();}initialize(){cov_2dj4df7l8y().f[414]++;let t=(cov_2dj4df7l8y().s[1261]++,this._cachedMeta);cov_2dj4df7l8y().s[1262]++;this.configure(),this.linkScales(),t._stacked=Ji(t.vScale,t),this.addElements(),(cov_2dj4df7l8y().b[557][0]++,this.options.fill)&&(cov_2dj4df7l8y().b[557][1]++,!this.chart.isPluginEnabled("filler"))&&(cov_2dj4df7l8y().b[557][2]++,console.warn("Tried to use the 'fill' option without the 'Filler' plugin enabled. Please import and register the 'Filler' plugin and make sure it is not disabled in the options"));}updateIndex(t){cov_2dj4df7l8y().f[415]++;cov_2dj4df7l8y().s[1263]++;(cov_2dj4df7l8y().b[558][0]++,this.index!==t)&&(cov_2dj4df7l8y().b[558][1]++,pe(this._cachedMeta)),this.index=t;}linkScales(){cov_2dj4df7l8y().f[416]++;cov_2dj4df7l8y().s[1267]++;let t=(cov_2dj4df7l8y().s[1264]++,this.chart),s=(cov_2dj4df7l8y().s[1265]++,this._cachedMeta),n=(cov_2dj4df7l8y().s[1266]++,this.getDataset()),o=(f,u,p,g)=>{cov_2dj4df7l8y().f[417]++;cov_2dj4df7l8y().s[1268]++;return f==="x"?(cov_2dj4df7l8y().b[559][0]++,u):(cov_2dj4df7l8y().b[559][1]++,f==="r"?(cov_2dj4df7l8y().b[560][0]++,g):(cov_2dj4df7l8y().b[560][1]++,p));},r=(cov_2dj4df7l8y().s[1269]++,s.xAxisID=C(n.xAxisID,Zi(t,"x"))),a=(cov_2dj4df7l8y().s[1270]++,s.yAxisID=C(n.yAxisID,Zi(t,"y"))),l=(cov_2dj4df7l8y().s[1271]++,s.rAxisID=C(n.rAxisID,Zi(t,"r"))),c=(cov_2dj4df7l8y().s[1272]++,s.indexAxis),h=(cov_2dj4df7l8y().s[1273]++,s.iAxisID=o(c,r,a,l)),d=(cov_2dj4df7l8y().s[1274]++,s.vAxisID=o(c,a,r,l));cov_2dj4df7l8y().s[1275]++;s.xScale=this.getScaleForId(r),s.yScale=this.getScaleForId(a),s.rScale=this.getScaleForId(l),s.iScale=this.getScaleForId(h),s.vScale=this.getScaleForId(d);}getDataset(){cov_2dj4df7l8y().f[418]++;cov_2dj4df7l8y().s[1276]++;return this.chart.data.datasets[this.index];}getMeta(){cov_2dj4df7l8y().f[419]++;cov_2dj4df7l8y().s[1277]++;return this.chart.getDatasetMeta(this.index);}getScaleForId(t){cov_2dj4df7l8y().f[420]++;cov_2dj4df7l8y().s[1278]++;return this.chart.scales[t];}_getOtherScale(t){cov_2dj4df7l8y().f[421]++;let s=(cov_2dj4df7l8y().s[1279]++,this._cachedMeta);cov_2dj4df7l8y().s[1280]++;return t===s.iScale?(cov_2dj4df7l8y().b[561][0]++,s.vScale):(cov_2dj4df7l8y().b[561][1]++,s.iScale);}reset(){cov_2dj4df7l8y().f[422]++;cov_2dj4df7l8y().s[1281]++;this._update("reset");}_destroy(){cov_2dj4df7l8y().f[423]++;let t=(cov_2dj4df7l8y().s[1282]++,this._cachedMeta);cov_2dj4df7l8y().s[1283]++;(cov_2dj4df7l8y().b[562][0]++,this._data)&&(cov_2dj4df7l8y().b[562][1]++,Oi(this._data,this)),(cov_2dj4df7l8y().b[563][0]++,t._stacked)&&(cov_2dj4df7l8y().b[563][1]++,pe(t));}_dataCheck(){cov_2dj4df7l8y().f[424]++;let t=(cov_2dj4df7l8y().s[1284]++,this.getDataset()),s=(cov_2dj4df7l8y().s[1285]++,(cov_2dj4df7l8y().b[564][0]++,t.data)||(cov_2dj4df7l8y().b[564][1]++,t.data=[])),n=(cov_2dj4df7l8y().s[1286]++,this._data);cov_2dj4df7l8y().s[1287]++;if(A(s)){cov_2dj4df7l8y().b[565][0]++;let o=(cov_2dj4df7l8y().s[1288]++,this._cachedMeta);cov_2dj4df7l8y().s[1289]++;this._data=Aa(s,o);}else{cov_2dj4df7l8y().b[565][1]++;cov_2dj4df7l8y().s[1290]++;if(n!==s){cov_2dj4df7l8y().b[566][0]++;cov_2dj4df7l8y().s[1291]++;if(n){cov_2dj4df7l8y().b[567][0]++;cov_2dj4df7l8y().s[1292]++;Oi(n,this);let o=(cov_2dj4df7l8y().s[1293]++,this._cachedMeta);cov_2dj4df7l8y().s[1294]++;pe(o),o._parsed=[];}else{cov_2dj4df7l8y().b[567][1]++;}cov_2dj4df7l8y().s[1295]++;(cov_2dj4df7l8y().b[568][0]++,s)&&(cov_2dj4df7l8y().b[568][1]++,Object.isExtensible(s))&&(cov_2dj4df7l8y().b[568][2]++,pn(s,this)),this._syncList=[],this._data=s;}else{cov_2dj4df7l8y().b[566][1]++;}}}addElements(){cov_2dj4df7l8y().f[425]++;let t=(cov_2dj4df7l8y().s[1296]++,this._cachedMeta);cov_2dj4df7l8y().s[1297]++;this._dataCheck(),(cov_2dj4df7l8y().b[569][0]++,this.datasetElementType)&&(cov_2dj4df7l8y().b[569][1]++,t.dataset=new this.datasetElementType());}buildOrUpdateElements(t){cov_2dj4df7l8y().f[426]++;let s=(cov_2dj4df7l8y().s[1298]++,this._cachedMeta),n=(cov_2dj4df7l8y().s[1299]++,this.getDataset()),o=(cov_2dj4df7l8y().s[1300]++,!1);cov_2dj4df7l8y().s[1301]++;this._dataCheck();let r=(cov_2dj4df7l8y().s[1302]++,s._stacked);cov_2dj4df7l8y().s[1303]++;s._stacked=Ji(s.vScale,s),(cov_2dj4df7l8y().b[570][0]++,s.stack!==n.stack)&&(cov_2dj4df7l8y().b[570][1]++,o=!0,pe(s),s.stack=n.stack),this._resyncElements(t),((cov_2dj4df7l8y().b[571][0]++,o)||(cov_2dj4df7l8y().b[571][1]++,r!==s._stacked))&&(cov_2dj4df7l8y().b[571][2]++,Bn(this,s._parsed),s._stacked=Ji(s.vScale,s));}configure(){cov_2dj4df7l8y().f[427]++;let t=(cov_2dj4df7l8y().s[1304]++,this.chart.config),s=(cov_2dj4df7l8y().s[1305]++,t.datasetScopeKeys(this._type)),n=(cov_2dj4df7l8y().s[1306]++,t.getOptionScopes(this.getDataset(),s,!0));cov_2dj4df7l8y().s[1307]++;this.options=t.createResolver(n,this.getContext()),this._parsing=this.options.parsing,this._cachedDataOpts={};}parse(t,s){cov_2dj4df7l8y().f[428]++;let{_cachedMeta:n,_data:o}=(cov_2dj4df7l8y().s[1308]++,this),{iScale:r,_stacked:a}=(cov_2dj4df7l8y().s[1309]++,n),l=(cov_2dj4df7l8y().s[1310]++,r.axis),c=(cov_2dj4df7l8y().s[1311]++,(cov_2dj4df7l8y().b[573][0]++,t===0)&&(cov_2dj4df7l8y().b[573][1]++,s===o.length)?(cov_2dj4df7l8y().b[572][0]++,!0):(cov_2dj4df7l8y().b[572][1]++,n._sorted)),h=(cov_2dj4df7l8y().s[1312]++,(cov_2dj4df7l8y().b[574][0]++,t>0)&&(cov_2dj4df7l8y().b[574][1]++,n._parsed[t-1])),d,f,u;cov_2dj4df7l8y().s[1313]++;if(this._parsing===!1){cov_2dj4df7l8y().b[575][0]++;cov_2dj4df7l8y().s[1314]++;n._parsed=o,n._sorted=!0,u=o;}else{cov_2dj4df7l8y().b[575][1]++;cov_2dj4df7l8y().s[1315]++;z(o[t])?(cov_2dj4df7l8y().b[576][0]++,u=this.parseArrayData(n,o,t,s)):(cov_2dj4df7l8y().b[576][1]++,A(o[t])?(cov_2dj4df7l8y().b[577][0]++,u=this.parseObjectData(n,o,t,s)):(cov_2dj4df7l8y().b[577][1]++,u=this.parsePrimitiveData(n,o,t,s)));cov_2dj4df7l8y().s[1316]++;let p=()=>{cov_2dj4df7l8y().f[429]++;cov_2dj4df7l8y().s[1317]++;return(cov_2dj4df7l8y().b[578][0]++,f[l]===null)||(cov_2dj4df7l8y().b[578][1]++,h)&&(cov_2dj4df7l8y().b[578][2]++,f[l]m)||(cov_2dj4df7l8y().b[589][2]++,f=0;--u){cov_2dj4df7l8y().s[1367]++;if(!g()){cov_2dj4df7l8y().b[593][0]++;cov_2dj4df7l8y().s[1368]++;this.updateRangeFromParsed(h,t,p,c);cov_2dj4df7l8y().s[1369]++;break;}else{cov_2dj4df7l8y().b[593][1]++;}}}else{cov_2dj4df7l8y().b[592][1]++;}cov_2dj4df7l8y().s[1370]++;return h;}getAllParsedValues(t){cov_2dj4df7l8y().f[439]++;let s=(cov_2dj4df7l8y().s[1371]++,this._cachedMeta._parsed),n=(cov_2dj4df7l8y().s[1372]++,[]),o,r,a;cov_2dj4df7l8y().s[1373]++;for(o=0,r=s.length;o=0)&&(cov_2dj4df7l8y().b[610][1]++,t{cov_2dj4df7l8y().f[450]++;cov_2dj4df7l8y().s[1421]++;return this.getContext(n,o,s);},m=(cov_2dj4df7l8y().s[1422]++,h.resolveNamedOptions(u,p,g,f));cov_2dj4df7l8y().s[1423]++;return(cov_2dj4df7l8y().b[617][0]++,m.$shared)&&(cov_2dj4df7l8y().b[617][1]++,m.$shared=c,r[a]=Object.freeze(Wn(m,c))),m;}_resolveAnimations(t,s,n){cov_2dj4df7l8y().f[451]++;let o=(cov_2dj4df7l8y().s[1424]++,this.chart),r=(cov_2dj4df7l8y().s[1425]++,this._cachedDataOpts),a=(cov_2dj4df7l8y().s[1426]++,`animation-${s}`),l=(cov_2dj4df7l8y().s[1427]++,r[a]);cov_2dj4df7l8y().s[1428]++;if(l){cov_2dj4df7l8y().b[618][0]++;cov_2dj4df7l8y().s[1429]++;return l;}else{cov_2dj4df7l8y().b[618][1]++;}let c;cov_2dj4df7l8y().s[1430]++;if(o.options.animation!==!1){cov_2dj4df7l8y().b[619][0]++;let d=(cov_2dj4df7l8y().s[1431]++,this.chart.config),f=(cov_2dj4df7l8y().s[1432]++,d.datasetAnimationScopeKeys(this._type,s)),u=(cov_2dj4df7l8y().s[1433]++,d.getOptionScopes(this.getDataset(),f));cov_2dj4df7l8y().s[1434]++;c=d.createResolver(u,this.getContext(t,n,s));}else{cov_2dj4df7l8y().b[619][1]++;}let h=(cov_2dj4df7l8y().s[1435]++,new ni(o,(cov_2dj4df7l8y().b[620][0]++,c)&&(cov_2dj4df7l8y().b[620][1]++,c.animations)));cov_2dj4df7l8y().s[1436]++;return(cov_2dj4df7l8y().b[621][0]++,c)&&(cov_2dj4df7l8y().b[621][1]++,c._cacheable)&&(cov_2dj4df7l8y().b[621][2]++,r[a]=Object.freeze(h)),h;}getSharedOptions(t){cov_2dj4df7l8y().f[452]++;cov_2dj4df7l8y().s[1437]++;if(t.$shared){cov_2dj4df7l8y().b[622][0]++;cov_2dj4df7l8y().s[1438]++;return(cov_2dj4df7l8y().b[623][0]++,this._sharedOptions)||(cov_2dj4df7l8y().b[623][1]++,this._sharedOptions=Object.assign({},t));}else{cov_2dj4df7l8y().b[622][1]++;}}includeOptions(t,s){cov_2dj4df7l8y().f[453]++;cov_2dj4df7l8y().s[1439]++;return(cov_2dj4df7l8y().b[624][0]++,!s)||(cov_2dj4df7l8y().b[624][1]++,Qi(t))||(cov_2dj4df7l8y().b[624][2]++,this.chart._animationsDisabled);}_getSharedOptions(t,s){cov_2dj4df7l8y().f[454]++;let n=(cov_2dj4df7l8y().s[1440]++,this.resolveDataElementOptions(t,s)),o=(cov_2dj4df7l8y().s[1441]++,this._sharedOptions),r=(cov_2dj4df7l8y().s[1442]++,this.getSharedOptions(n)),a=(cov_2dj4df7l8y().s[1443]++,(cov_2dj4df7l8y().b[625][0]++,this.includeOptions(s,r))||(cov_2dj4df7l8y().b[625][1]++,r!==o));cov_2dj4df7l8y().s[1444]++;return this.updateSharedOptions(r,s,n),{sharedOptions:r,includeOptions:a};}updateElement(t,s,n,o){cov_2dj4df7l8y().f[455]++;cov_2dj4df7l8y().s[1445]++;Qi(o)?(cov_2dj4df7l8y().b[626][0]++,Object.assign(t,n)):(cov_2dj4df7l8y().b[626][1]++,this._resolveAnimations(s,o).update(t,n));}updateSharedOptions(t,s,n){cov_2dj4df7l8y().f[456]++;cov_2dj4df7l8y().s[1446]++;(cov_2dj4df7l8y().b[627][0]++,t)&&(cov_2dj4df7l8y().b[627][1]++,!Qi(s))&&(cov_2dj4df7l8y().b[627][2]++,this._resolveAnimations(void 0,s).update(t,n));}_setStyle(t,s,n,o){cov_2dj4df7l8y().f[457]++;cov_2dj4df7l8y().s[1447]++;t.active=o;let r=(cov_2dj4df7l8y().s[1448]++,this.getStyle(s,o));cov_2dj4df7l8y().s[1449]++;this._resolveAnimations(s,n,o).update(t,{options:(cov_2dj4df7l8y().b[628][0]++,!o)&&(cov_2dj4df7l8y().b[628][1]++,this.getSharedOptions(r))||(cov_2dj4df7l8y().b[628][2]++,r)});}removeHoverStyle(t,s,n){cov_2dj4df7l8y().f[458]++;cov_2dj4df7l8y().s[1450]++;this._setStyle(t,n,"active",!1);}setHoverStyle(t,s,n){cov_2dj4df7l8y().f[459]++;cov_2dj4df7l8y().s[1451]++;this._setStyle(t,n,"active",!0);}_removeDatasetHoverStyle(){cov_2dj4df7l8y().f[460]++;let t=(cov_2dj4df7l8y().s[1452]++,this._cachedMeta.dataset);cov_2dj4df7l8y().s[1453]++;(cov_2dj4df7l8y().b[629][0]++,t)&&(cov_2dj4df7l8y().b[629][1]++,this._setStyle(t,void 0,"active",!1));}_setDatasetHoverStyle(){cov_2dj4df7l8y().f[461]++;let t=(cov_2dj4df7l8y().s[1454]++,this._cachedMeta.dataset);cov_2dj4df7l8y().s[1455]++;(cov_2dj4df7l8y().b[630][0]++,t)&&(cov_2dj4df7l8y().b[630][1]++,this._setStyle(t,void 0,"active",!0));}_resyncElements(t){cov_2dj4df7l8y().f[462]++;let s=(cov_2dj4df7l8y().s[1456]++,this._data),n=(cov_2dj4df7l8y().s[1457]++,this._cachedMeta.data);cov_2dj4df7l8y().s[1458]++;for(let[l,c,h]of this._syncList){cov_2dj4df7l8y().s[1459]++;this[l](c,h);}cov_2dj4df7l8y().s[1460]++;this._syncList=[];let o=(cov_2dj4df7l8y().s[1461]++,n.length),r=(cov_2dj4df7l8y().s[1462]++,s.length),a=(cov_2dj4df7l8y().s[1463]++,Math.min(r,o));cov_2dj4df7l8y().s[1464]++;(cov_2dj4df7l8y().b[631][0]++,a)&&(cov_2dj4df7l8y().b[631][1]++,this.parse(0,a)),r>o?(cov_2dj4df7l8y().b[632][0]++,this._insertElements(o,r-o,t)):(cov_2dj4df7l8y().b[632][1]++,(cov_2dj4df7l8y().b[633][0]++,r{cov_2dj4df7l8y().f[464]++;cov_2dj4df7l8y().s[1469]++;for(h.length+=s,l=h.length-1;l>=a;l--){cov_2dj4df7l8y().s[1470]++;h[l]=h[l-s];}};cov_2dj4df7l8y().s[1471]++;for(c(r),l=t;l{cov_2dj4df7l8y().f[474]++;cov_2dj4df7l8y().s[1501]++;return n-o;}));}else{cov_2dj4df7l8y().b[642][1]++;}cov_2dj4df7l8y().s[1502]++;return e._cache.$bar;}function Ba(e){cov_2dj4df7l8y().f[475]++;cov_2dj4df7l8y().s[1506]++;let i=(cov_2dj4df7l8y().s[1503]++,e.iScale),t=(cov_2dj4df7l8y().s[1504]++,za(i,e.type)),s=(cov_2dj4df7l8y().s[1505]++,i._length),n,o,r,a,l=()=>{cov_2dj4df7l8y().f[476]++;cov_2dj4df7l8y().s[1507]++;(cov_2dj4df7l8y().b[643][0]++,r===32767)||(cov_2dj4df7l8y().b[643][1]++,r===-32768)||(cov_2dj4df7l8y().b[643][2]++,(cov_2dj4df7l8y().b[644][0]++,qt(a))&&(cov_2dj4df7l8y().b[644][1]++,s=Math.min(s,(cov_2dj4df7l8y().b[645][0]++,Math.abs(r-a))||(cov_2dj4df7l8y().b[645][1]++,s))),a=r);};cov_2dj4df7l8y().s[1508]++;for(n=0,o=t.length;n0?(cov_2dj4df7l8y().b[647][0]++,n[e-1]):(cov_2dj4df7l8y().b[647][1]++,null)),a=(cov_2dj4df7l8y().s[1518]++,eMath.abs(a))&&(cov_2dj4df7l8y().b[652][1]++,l=a,c=r),i[t.axis]=c,i._custom={barStart:l,barEnd:c,start:n,end:o,min:r,max:a};}function Fo(e,i,t,s){cov_2dj4df7l8y().f[480]++;cov_2dj4df7l8y().s[1530]++;return z(e)?(cov_2dj4df7l8y().b[653][0]++,Va(e,i,t,s)):(cov_2dj4df7l8y().b[653][1]++,i[t.axis]=t.parse(e,s)),i;}function Nn(e,i,t,s){cov_2dj4df7l8y().f[481]++;let n=(cov_2dj4df7l8y().s[1531]++,e.iScale),o=(cov_2dj4df7l8y().s[1532]++,e.vScale),r=(cov_2dj4df7l8y().s[1533]++,n.getLabels()),a=(cov_2dj4df7l8y().s[1534]++,n===o),l=(cov_2dj4df7l8y().s[1535]++,[]),c,h,d,f;cov_2dj4df7l8y().s[1536]++;for(c=t,h=t+s;c=t?(cov_2dj4df7l8y().b[658][0]++,1):(cov_2dj4df7l8y().b[658][1]++,-1)));}function ja(e){cov_2dj4df7l8y().f[484]++;let i,t,s,n,o;cov_2dj4df7l8y().s[1541]++;return e.horizontal?(cov_2dj4df7l8y().b[659][0]++,i=e.base>e.x,t="left",s="right"):(cov_2dj4df7l8y().b[659][1]++,i=e.base{cov_2dj4df7l8y().f[490]++;class e extends Ot{static id=(cov_2dj4df7l8y().s[1557]++,"bar");static defaults=(cov_2dj4df7l8y().s[1558]++,{datasetElementType:!1,dataElementType:"bar",categoryPercentage:.8,barPercentage:.9,grouped:!0,animations:{numbers:{type:"number",properties:["x","y","base","width","height"]}}});static overrides=(cov_2dj4df7l8y().s[1559]++,{scales:{_index_:{type:"category",offset:!0,grid:{offset:!0}},_value_:{type:"linear",beginAtZero:!0}}});parsePrimitiveData(t,s,n,o){cov_2dj4df7l8y().f[491]++;cov_2dj4df7l8y().s[1560]++;return Nn(t,s,n,o);}parseArrayData(t,s,n,o){cov_2dj4df7l8y().f[492]++;cov_2dj4df7l8y().s[1561]++;return Nn(t,s,n,o);}parseObjectData(t,s,n,o){cov_2dj4df7l8y().f[493]++;let{iScale:r,vScale:a}=(cov_2dj4df7l8y().s[1562]++,t),{xAxisKey:l=(cov_2dj4df7l8y().b[675][0]++,"x"),yAxisKey:c=(cov_2dj4df7l8y().b[676][0]++,"y")}=(cov_2dj4df7l8y().s[1563]++,this._parsing),h=(cov_2dj4df7l8y().s[1564]++,r.axis==="x"?(cov_2dj4df7l8y().b[677][0]++,l):(cov_2dj4df7l8y().b[677][1]++,c)),d=(cov_2dj4df7l8y().s[1565]++,a.axis==="x"?(cov_2dj4df7l8y().b[678][0]++,l):(cov_2dj4df7l8y().b[678][1]++,c)),f=(cov_2dj4df7l8y().s[1566]++,[]),u,p,g,m;cov_2dj4df7l8y().s[1567]++;for(u=n,p=n+o;u{cov_2dj4df7l8y().f[501]++;cov_2dj4df7l8y().s[1603]++;return d.controller.options.grouped;})),r=(cov_2dj4df7l8y().s[1604]++,n.options.stacked),a=(cov_2dj4df7l8y().s[1605]++,[]),l=(cov_2dj4df7l8y().s[1606]++,this._cachedMeta.controller.getParsed(s)),c=(cov_2dj4df7l8y().s[1607]++,(cov_2dj4df7l8y().b[693][0]++,l)&&(cov_2dj4df7l8y().b[693][1]++,l[n.axis])),h=d=>{cov_2dj4df7l8y().f[502]++;let f=(cov_2dj4df7l8y().s[1609]++,d._parsed.find(p=>{cov_2dj4df7l8y().f[503]++;cov_2dj4df7l8y().s[1610]++;return p[n.axis]===c;})),u=(cov_2dj4df7l8y().s[1611]++,(cov_2dj4df7l8y().b[694][0]++,f)&&(cov_2dj4df7l8y().b[694][1]++,f[d.vScale.axis]));cov_2dj4df7l8y().s[1612]++;if((cov_2dj4df7l8y().b[696][0]++,O(u))||(cov_2dj4df7l8y().b[696][1]++,isNaN(u))){cov_2dj4df7l8y().b[695][0]++;cov_2dj4df7l8y().s[1613]++;return!0;}else{cov_2dj4df7l8y().b[695][1]++;}};cov_2dj4df7l8y().s[1614]++;for(let d of o){cov_2dj4df7l8y().s[1615]++;if((cov_2dj4df7l8y().b[698][0]++,!((cov_2dj4df7l8y().b[699][0]++,s!==void 0)&&(cov_2dj4df7l8y().b[699][1]++,h(d))))&&(cov_2dj4df7l8y().b[698][1]++,((cov_2dj4df7l8y().b[700][0]++,r===!1)||(cov_2dj4df7l8y().b[700][1]++,a.indexOf(d.stack)===-1)||(cov_2dj4df7l8y().b[700][2]++,r===void 0)&&(cov_2dj4df7l8y().b[700][3]++,d.stack===void 0))&&(cov_2dj4df7l8y().b[700][4]++,a.push(d.stack)),d.index===t)){cov_2dj4df7l8y().b[697][0]++;cov_2dj4df7l8y().s[1616]++;break;}else{cov_2dj4df7l8y().b[697][1]++;}}cov_2dj4df7l8y().s[1617]++;return(cov_2dj4df7l8y().b[701][0]++,a.length)||(cov_2dj4df7l8y().b[701][1]++,a.push(void 0)),a;}_getStackCount(t){cov_2dj4df7l8y().f[504]++;cov_2dj4df7l8y().s[1618]++;return this._getStacks(void 0,t).length;}_getAxisCount(){cov_2dj4df7l8y().f[505]++;cov_2dj4df7l8y().s[1619]++;return this._getAxis().length;}getFirstScaleIdForIndexAxis(){cov_2dj4df7l8y().f[506]++;let t=(cov_2dj4df7l8y().s[1620]++,this.chart.scales),s=(cov_2dj4df7l8y().s[1621]++,this.chart.options.indexAxis);cov_2dj4df7l8y().s[1622]++;return Object.keys(t).filter(n=>{cov_2dj4df7l8y().f[507]++;cov_2dj4df7l8y().s[1623]++;return t[n].axis===s;}).shift();}_getAxis(){cov_2dj4df7l8y().f[508]++;let t=(cov_2dj4df7l8y().s[1624]++,{}),s=(cov_2dj4df7l8y().s[1625]++,this.getFirstScaleIdForIndexAxis());cov_2dj4df7l8y().s[1626]++;for(let n of this.chart.data.datasets){cov_2dj4df7l8y().s[1627]++;t[C(this.chart.options.indexAxis==="x"?(cov_2dj4df7l8y().b[702][0]++,n.xAxisID):(cov_2dj4df7l8y().b[702][1]++,n.yAxisID),s)]=!0;}cov_2dj4df7l8y().s[1628]++;return Object.keys(t);}_getStackIndex(t,s,n){cov_2dj4df7l8y().f[509]++;let o=(cov_2dj4df7l8y().s[1629]++,this._getStacks(t,n)),r=(cov_2dj4df7l8y().s[1630]++,s!==void 0?(cov_2dj4df7l8y().b[703][0]++,o.indexOf(s)):(cov_2dj4df7l8y().b[703][1]++,-1));cov_2dj4df7l8y().s[1631]++;return r===-1?(cov_2dj4df7l8y().b[704][0]++,o.length-1):(cov_2dj4df7l8y().b[704][1]++,r);}_getRuler(){cov_2dj4df7l8y().f[510]++;let t=(cov_2dj4df7l8y().s[1632]++,this.options),s=(cov_2dj4df7l8y().s[1633]++,this._cachedMeta),n=(cov_2dj4df7l8y().s[1634]++,s.iScale),o=(cov_2dj4df7l8y().s[1635]++,[]),r,a;cov_2dj4df7l8y().s[1636]++;for(r=0,a=s.data.length;r{cov_2dj4df7l8y().f[514]++;class e extends Ot{static id=(cov_2dj4df7l8y().s[1685]++,"bubble");static defaults=(cov_2dj4df7l8y().s[1686]++,{datasetElementType:!1,dataElementType:"point",animations:{numbers:{type:"number",properties:["x","y","borderWidth","radius"]}}});static overrides=(cov_2dj4df7l8y().s[1687]++,{scales:{x:{type:"linear"},y:{type:"linear"}}});initialize(){cov_2dj4df7l8y().f[515]++;cov_2dj4df7l8y().s[1688]++;this.enableOptionSharing=!0,super.initialize();}parsePrimitiveData(t,s,n,o){cov_2dj4df7l8y().f[516]++;let r=(cov_2dj4df7l8y().s[1689]++,super.parsePrimitiveData(t,s,n,o));cov_2dj4df7l8y().s[1690]++;for(let a=(cov_2dj4df7l8y().s[1691]++,0);a=0;--n){cov_2dj4df7l8y().s[1710]++;s=Math.max(s,t[n].size(this.resolveDataElementOptions(n))/2);}cov_2dj4df7l8y().s[1711]++;return(cov_2dj4df7l8y().b[726][0]++,s>0)&&(cov_2dj4df7l8y().b[726][1]++,s);}getLabelAndValue(t){cov_2dj4df7l8y().f[520]++;let s=(cov_2dj4df7l8y().s[1712]++,this._cachedMeta),n=(cov_2dj4df7l8y().s[1713]++,(cov_2dj4df7l8y().b[727][0]++,this.chart.data.labels)||(cov_2dj4df7l8y().b[727][1]++,[])),{xScale:o,yScale:r}=(cov_2dj4df7l8y().s[1714]++,s),a=(cov_2dj4df7l8y().s[1715]++,this.getParsed(t)),l=(cov_2dj4df7l8y().s[1716]++,o.getLabelForValue(a.x)),c=(cov_2dj4df7l8y().s[1717]++,r.getLabelForValue(a.y)),h=(cov_2dj4df7l8y().s[1718]++,a._custom);cov_2dj4df7l8y().s[1719]++;return{label:(cov_2dj4df7l8y().b[728][0]++,n[t])||(cov_2dj4df7l8y().b[728][1]++,""),value:"("+l+", "+c+(h?(cov_2dj4df7l8y().b[729][0]++,", "+h):(cov_2dj4df7l8y().b[729][1]++,""))+")"};}update(t){cov_2dj4df7l8y().f[521]++;let s=(cov_2dj4df7l8y().s[1720]++,this._cachedMeta.data);cov_2dj4df7l8y().s[1721]++;this.updateElements(s,0,s.length,t);}updateElements(t,s,n,o){cov_2dj4df7l8y().f[522]++;let r=(cov_2dj4df7l8y().s[1722]++,o==="reset"),{iScale:a,vScale:l}=(cov_2dj4df7l8y().s[1723]++,this._cachedMeta),{sharedOptions:c,includeOptions:h}=(cov_2dj4df7l8y().s[1724]++,this._getSharedOptions(s,o)),d=(cov_2dj4df7l8y().s[1725]++,a.axis),f=(cov_2dj4df7l8y().s[1726]++,l.axis);cov_2dj4df7l8y().s[1727]++;for(let u=(cov_2dj4df7l8y().s[1728]++,s);u{cov_2dj4df7l8y().f[525]++;cov_2dj4df7l8y().s[1753]++;return Jt(y,a,l,!0)?(cov_2dj4df7l8y().b[742][0]++,1):(cov_2dj4df7l8y().b[742][1]++,Math.max(M,M*t,_,_*t));},p=(y,M,_)=>{cov_2dj4df7l8y().f[526]++;cov_2dj4df7l8y().s[1755]++;return Jt(y,a,l,!0)?(cov_2dj4df7l8y().b[743][0]++,-1):(cov_2dj4df7l8y().b[743][1]++,Math.min(M,M*t,_,_*t));},g=(cov_2dj4df7l8y().s[1756]++,u(0,c,d)),m=(cov_2dj4df7l8y().s[1757]++,u(V,h,f)),b=(cov_2dj4df7l8y().s[1758]++,p(L,c,d)),x=(cov_2dj4df7l8y().s[1759]++,p(L+V,h,f));cov_2dj4df7l8y().s[1760]++;s=(g-b)/2,n=(m-x)/2,o=-(g+b)/2,r=-(m+x)/2;}else{cov_2dj4df7l8y().b[741][1]++;}cov_2dj4df7l8y().s[1761]++;return{ratioX:s,ratioY:n,offsetX:o,offsetY:r};}var Os=(cov_2dj4df7l8y().s[1762]++,(()=>{cov_2dj4df7l8y().f[527]++;class e extends Ot{static id=(cov_2dj4df7l8y().s[1763]++,"doughnut");static defaults=(cov_2dj4df7l8y().s[1764]++,{datasetElementType:!1,dataElementType:"arc",animation:{animateRotate:!0,animateScale:!1},animations:{numbers:{type:"number",properties:["circumference","endAngle","innerRadius","outerRadius","startAngle","x","y","offset","borderWidth","spacing"]}},cutout:"50%",rotation:0,circumference:360,radius:"100%",spacing:0,indexAxis:"r"});static descriptors=(cov_2dj4df7l8y().s[1765]++,{_scriptable:t=>{cov_2dj4df7l8y().f[528]++;cov_2dj4df7l8y().s[1766]++;return t!=="spacing";},_indexable:t=>{cov_2dj4df7l8y().f[529]++;cov_2dj4df7l8y().s[1767]++;return(cov_2dj4df7l8y().b[744][0]++,t!=="spacing")&&(cov_2dj4df7l8y().b[744][1]++,!t.startsWith("borderDash"))&&(cov_2dj4df7l8y().b[744][2]++,!t.startsWith("hoverBorderDash"));}});static overrides=(cov_2dj4df7l8y().s[1768]++,{aspectRatio:1,plugins:{legend:{labels:{generateLabels(t){cov_2dj4df7l8y().f[530]++;let s=(cov_2dj4df7l8y().s[1769]++,t.data),{labels:{pointStyle:n,textAlign:o,color:r,useBorderRadius:a,borderRadius:l}}=(cov_2dj4df7l8y().s[1770]++,t.legend.options);cov_2dj4df7l8y().s[1771]++;return(cov_2dj4df7l8y().b[746][0]++,s.labels.length)&&(cov_2dj4df7l8y().b[746][1]++,s.datasets.length)?(cov_2dj4df7l8y().b[745][0]++,s.labels.map((c,h)=>{cov_2dj4df7l8y().f[531]++;let f=(cov_2dj4df7l8y().s[1772]++,t.getDatasetMeta(0).controller.getStyle(h));cov_2dj4df7l8y().s[1773]++;return{text:c,fillStyle:f.backgroundColor,fontColor:r,hidden:!t.getDataVisibility(h),lineDash:f.borderDash,lineDashOffset:f.borderDashOffset,lineJoin:f.borderJoinStyle,lineWidth:f.borderWidth,strokeStyle:f.borderColor,textAlign:o,pointStyle:n,borderRadius:(cov_2dj4df7l8y().b[747][0]++,a)&&((cov_2dj4df7l8y().b[747][1]++,l)||(cov_2dj4df7l8y().b[747][2]++,f.borderRadius)),index:h};})):(cov_2dj4df7l8y().b[745][1]++,[]);}},onClick(t,s,n){cov_2dj4df7l8y().f[532]++;cov_2dj4df7l8y().s[1774]++;n.chart.toggleDataVisibility(s.index),n.chart.update();}}}});constructor(t,s){cov_2dj4df7l8y().f[533]++;cov_2dj4df7l8y().s[1775]++;super(t,s),this.enableOptionSharing=!0,this.innerRadius=void 0,this.outerRadius=void 0,this.offsetX=void 0,this.offsetY=void 0;}linkScales(){cov_2dj4df7l8y().f[534]++;}parse(t,s){cov_2dj4df7l8y().f[535]++;let n=(cov_2dj4df7l8y().s[1776]++,this.getDataset().data),o=(cov_2dj4df7l8y().s[1777]++,this._cachedMeta);cov_2dj4df7l8y().s[1778]++;if(this._parsing===!1){cov_2dj4df7l8y().b[748][0]++;cov_2dj4df7l8y().s[1779]++;o._parsed=n;}else{cov_2dj4df7l8y().b[748][1]++;cov_2dj4df7l8y().s[1780]++;let r=c=>{cov_2dj4df7l8y().f[536]++;cov_2dj4df7l8y().s[1781]++;return+n[c];};cov_2dj4df7l8y().s[1782]++;if(A(n[t])){cov_2dj4df7l8y().b[749][0]++;let{key:c=(cov_2dj4df7l8y().b[750][0]++,"value")}=(cov_2dj4df7l8y().s[1783]++,this._parsing);cov_2dj4df7l8y().s[1784]++;r=h=>{cov_2dj4df7l8y().f[537]++;cov_2dj4df7l8y().s[1785]++;return+pt(n[h],c);};}else{cov_2dj4df7l8y().b[749][1]++;}let a,l;cov_2dj4df7l8y().s[1786]++;for(a=t,l=t+s;a0)&&(cov_2dj4df7l8y().b[763][1]++,!isNaN(t))?(cov_2dj4df7l8y().b[762][0]++,B*(Math.abs(t)/s)):(cov_2dj4df7l8y().b[762][1]++,0);}getLabelAndValue(t){cov_2dj4df7l8y().f[546]++;let s=(cov_2dj4df7l8y().s[1848]++,this._cachedMeta),n=(cov_2dj4df7l8y().s[1849]++,this.chart),o=(cov_2dj4df7l8y().s[1850]++,(cov_2dj4df7l8y().b[764][0]++,n.data.labels)||(cov_2dj4df7l8y().b[764][1]++,[])),r=(cov_2dj4df7l8y().s[1851]++,Zt(s._parsed[t],n.options.locale));cov_2dj4df7l8y().s[1852]++;return{label:(cov_2dj4df7l8y().b[765][0]++,o[t])||(cov_2dj4df7l8y().b[765][1]++,""),value:r};}getMaxBorderWidth(t){cov_2dj4df7l8y().f[547]++;let s=(cov_2dj4df7l8y().s[1853]++,0),n=(cov_2dj4df7l8y().s[1854]++,this.chart),o,r,a,l,c;cov_2dj4df7l8y().s[1855]++;if(!t){cov_2dj4df7l8y().b[766][0]++;cov_2dj4df7l8y().s[1856]++;for(o=0,r=n.data.datasets.length;o{cov_2dj4df7l8y().f[552]++;class e extends Ot{static id=(cov_2dj4df7l8y().s[1881]++,"line");static defaults=(cov_2dj4df7l8y().s[1882]++,{datasetElementType:"line",dataElementType:"point",showLine:!0,spanGaps:!1});static overrides=(cov_2dj4df7l8y().s[1883]++,{scales:{_index_:{type:"category"},_value_:{type:"linear"}}});initialize(){cov_2dj4df7l8y().f[553]++;cov_2dj4df7l8y().s[1884]++;this.enableOptionSharing=!0,this.supportsDecimation=!0,super.initialize();}update(t){cov_2dj4df7l8y().f[554]++;let s=(cov_2dj4df7l8y().s[1885]++,this._cachedMeta),{dataset:n,data:o=(cov_2dj4df7l8y().b[776][0]++,[]),_dataset:r}=(cov_2dj4df7l8y().s[1886]++,s),a=(cov_2dj4df7l8y().s[1887]++,this.chart._animationsDisabled),{start:l,count:c}=(cov_2dj4df7l8y().s[1888]++,Ri(s,o,a));cov_2dj4df7l8y().s[1889]++;this._drawStart=l,this._drawCount=c,(cov_2dj4df7l8y().b[777][0]++,Ei(s))&&(cov_2dj4df7l8y().b[777][1]++,l=0,c=o.length),n._chart=this.chart,n._datasetIndex=this.index,n._decimated=!!r._decimated,n.points=o;let h=(cov_2dj4df7l8y().s[1890]++,this.resolveDatasetElementOptions(t));cov_2dj4df7l8y().s[1891]++;(cov_2dj4df7l8y().b[778][0]++,this.options.showLine)||(cov_2dj4df7l8y().b[778][1]++,h.borderWidth=0),h.segment=this.options.segment,this.updateElement(n,void 0,{animated:!a,options:h},t),this.updateElements(o,l,c,t);}updateElements(t,s,n,o){cov_2dj4df7l8y().f[555]++;let r=(cov_2dj4df7l8y().s[1892]++,o==="reset"),{iScale:a,vScale:l,_stacked:c,_dataset:h}=(cov_2dj4df7l8y().s[1893]++,this._cachedMeta),{sharedOptions:d,includeOptions:f}=(cov_2dj4df7l8y().s[1894]++,this._getSharedOptions(s,o)),u=(cov_2dj4df7l8y().s[1895]++,a.axis),p=(cov_2dj4df7l8y().s[1896]++,l.axis),{spanGaps:g,segment:m}=(cov_2dj4df7l8y().s[1897]++,this.options),b=(cov_2dj4df7l8y().s[1898]++,It(g)?(cov_2dj4df7l8y().b[779][0]++,g):(cov_2dj4df7l8y().b[779][1]++,Number.POSITIVE_INFINITY)),x=(cov_2dj4df7l8y().s[1899]++,(cov_2dj4df7l8y().b[780][0]++,this.chart._animationsDisabled)||(cov_2dj4df7l8y().b[780][1]++,r)||(cov_2dj4df7l8y().b[780][2]++,o==="none")),y=(cov_2dj4df7l8y().s[1900]++,s+n),M=(cov_2dj4df7l8y().s[1901]++,t.length),_=(cov_2dj4df7l8y().s[1902]++,(cov_2dj4df7l8y().b[781][0]++,s>0)&&(cov_2dj4df7l8y().b[781][1]++,this.getParsed(s-1)));cov_2dj4df7l8y().s[1903]++;for(let v=(cov_2dj4df7l8y().s[1904]++,0);v=y)){cov_2dj4df7l8y().b[783][0]++;cov_2dj4df7l8y().s[1908]++;k.skip=!0;cov_2dj4df7l8y().s[1909]++;continue;}else{cov_2dj4df7l8y().b[783][1]++;}let w=(cov_2dj4df7l8y().s[1910]++,this.getParsed(v)),D=(cov_2dj4df7l8y().s[1911]++,O(w[p])),P=(cov_2dj4df7l8y().s[1912]++,k[u]=a.getPixelForValue(w[u],v)),T=(cov_2dj4df7l8y().s[1913]++,k[p]=(cov_2dj4df7l8y().b[786][0]++,r)||(cov_2dj4df7l8y().b[786][1]++,D)?(cov_2dj4df7l8y().b[785][0]++,l.getBasePixel()):(cov_2dj4df7l8y().b[785][1]++,l.getPixelForValue(c?(cov_2dj4df7l8y().b[787][0]++,this.applyStack(l,w,c)):(cov_2dj4df7l8y().b[787][1]++,w[p]),v)));cov_2dj4df7l8y().s[1914]++;k.skip=(cov_2dj4df7l8y().b[788][0]++,isNaN(P))||(cov_2dj4df7l8y().b[788][1]++,isNaN(T))||(cov_2dj4df7l8y().b[788][2]++,D),k.stop=(cov_2dj4df7l8y().b[789][0]++,v>0)&&(cov_2dj4df7l8y().b[789][1]++,Math.abs(w[u]-_[u])>b),(cov_2dj4df7l8y().b[790][0]++,m)&&(cov_2dj4df7l8y().b[790][1]++,k.parsed=w,k.raw=h.data[v]),(cov_2dj4df7l8y().b[791][0]++,f)&&(cov_2dj4df7l8y().b[791][1]++,k.options=(cov_2dj4df7l8y().b[792][0]++,d)||(cov_2dj4df7l8y().b[792][1]++,this.resolveDataElementOptions(v,S.active?(cov_2dj4df7l8y().b[793][0]++,"active"):(cov_2dj4df7l8y().b[793][1]++,o)))),(cov_2dj4df7l8y().b[794][0]++,x)||(cov_2dj4df7l8y().b[794][1]++,this.updateElement(S,v,k,o)),_=w;}}getMaxOverflow(){cov_2dj4df7l8y().f[556]++;let t=(cov_2dj4df7l8y().s[1915]++,this._cachedMeta),s=(cov_2dj4df7l8y().s[1916]++,t.dataset),n=(cov_2dj4df7l8y().s[1917]++,(cov_2dj4df7l8y().b[795][0]++,s.options)&&(cov_2dj4df7l8y().b[795][1]++,s.options.borderWidth)||(cov_2dj4df7l8y().b[795][2]++,0)),o=(cov_2dj4df7l8y().s[1918]++,(cov_2dj4df7l8y().b[796][0]++,t.data)||(cov_2dj4df7l8y().b[796][1]++,[]));cov_2dj4df7l8y().s[1919]++;if(!o.length){cov_2dj4df7l8y().b[797][0]++;cov_2dj4df7l8y().s[1920]++;return n;}else{cov_2dj4df7l8y().b[797][1]++;}let r=(cov_2dj4df7l8y().s[1921]++,o[0].size(this.resolveDataElementOptions(0))),a=(cov_2dj4df7l8y().s[1922]++,o[o.length-1].size(this.resolveDataElementOptions(o.length-1)));cov_2dj4df7l8y().s[1923]++;return Math.max(n,r,a)/2;}draw(){cov_2dj4df7l8y().f[557]++;let t=(cov_2dj4df7l8y().s[1924]++,this._cachedMeta);cov_2dj4df7l8y().s[1925]++;t.dataset.updateControlPoints(this.chart.chartArea,t.iScale.axis),super.draw();}}cov_2dj4df7l8y().s[1926]++;return e;})()),zo=(cov_2dj4df7l8y().s[1927]++,(()=>{cov_2dj4df7l8y().f[558]++;class e extends Ot{static id=(cov_2dj4df7l8y().s[1928]++,"polarArea");static defaults=(cov_2dj4df7l8y().s[1929]++,{dataElementType:"arc",animation:{animateRotate:!0,animateScale:!0},animations:{numbers:{type:"number",properties:["x","y","startAngle","endAngle","innerRadius","outerRadius"]}},indexAxis:"r",startAngle:0});static overrides=(cov_2dj4df7l8y().s[1930]++,{aspectRatio:1,plugins:{legend:{labels:{generateLabels(t){cov_2dj4df7l8y().f[559]++;let s=(cov_2dj4df7l8y().s[1931]++,t.data);cov_2dj4df7l8y().s[1932]++;if((cov_2dj4df7l8y().b[799][0]++,s.labels.length)&&(cov_2dj4df7l8y().b[799][1]++,s.datasets.length)){cov_2dj4df7l8y().b[798][0]++;let{labels:{pointStyle:n,color:o}}=(cov_2dj4df7l8y().s[1933]++,t.legend.options);cov_2dj4df7l8y().s[1934]++;return s.labels.map((r,a)=>{cov_2dj4df7l8y().f[560]++;let c=(cov_2dj4df7l8y().s[1935]++,t.getDatasetMeta(0).controller.getStyle(a));cov_2dj4df7l8y().s[1936]++;return{text:r,fillStyle:c.backgroundColor,strokeStyle:c.borderColor,fontColor:o,lineWidth:c.borderWidth,pointStyle:n,hidden:!t.getDataVisibility(a),index:a};});}else{cov_2dj4df7l8y().b[798][1]++;}cov_2dj4df7l8y().s[1937]++;return[];}},onClick(t,s,n){cov_2dj4df7l8y().f[561]++;cov_2dj4df7l8y().s[1938]++;n.chart.toggleDataVisibility(s.index),n.chart.update();}}},scales:{r:{type:"radialLinear",angleLines:{display:!1},beginAtZero:!0,grid:{circular:!0},pointLabels:{display:!1},startAngle:0}}});constructor(t,s){cov_2dj4df7l8y().f[562]++;cov_2dj4df7l8y().s[1939]++;super(t,s),this.innerRadius=void 0,this.outerRadius=void 0;}getLabelAndValue(t){cov_2dj4df7l8y().f[563]++;let s=(cov_2dj4df7l8y().s[1940]++,this._cachedMeta),n=(cov_2dj4df7l8y().s[1941]++,this.chart),o=(cov_2dj4df7l8y().s[1942]++,(cov_2dj4df7l8y().b[800][0]++,n.data.labels)||(cov_2dj4df7l8y().b[800][1]++,[])),r=(cov_2dj4df7l8y().s[1943]++,Zt(s._parsed[t].r,n.options.locale));cov_2dj4df7l8y().s[1944]++;return{label:(cov_2dj4df7l8y().b[801][0]++,o[t])||(cov_2dj4df7l8y().b[801][1]++,""),value:r};}parseObjectData(t,s,n,o){cov_2dj4df7l8y().f[564]++;cov_2dj4df7l8y().s[1945]++;return ji.bind(this)(t,s,n,o);}update(t){cov_2dj4df7l8y().f[565]++;let s=(cov_2dj4df7l8y().s[1946]++,this._cachedMeta.data);cov_2dj4df7l8y().s[1947]++;this._updateRadius(),this.updateElements(s,0,s.length,t);}getMinMax(){cov_2dj4df7l8y().f[566]++;let t=(cov_2dj4df7l8y().s[1948]++,this._cachedMeta),s=(cov_2dj4df7l8y().s[1949]++,{min:Number.POSITIVE_INFINITY,max:Number.NEGATIVE_INFINITY});cov_2dj4df7l8y().s[1950]++;return t.data.forEach((n,o)=>{cov_2dj4df7l8y().f[567]++;let r=(cov_2dj4df7l8y().s[1951]++,this.getParsed(o).r);cov_2dj4df7l8y().s[1952]++;(cov_2dj4df7l8y().b[802][0]++,!isNaN(r))&&(cov_2dj4df7l8y().b[802][1]++,this.chart.getDataVisibility(o))&&(cov_2dj4df7l8y().b[802][2]++,(cov_2dj4df7l8y().b[803][0]++,rs.max)&&(cov_2dj4df7l8y().b[804][1]++,s.max=r));}),s;}_updateRadius(){cov_2dj4df7l8y().f[568]++;let t=(cov_2dj4df7l8y().s[1953]++,this.chart),s=(cov_2dj4df7l8y().s[1954]++,t.chartArea),n=(cov_2dj4df7l8y().s[1955]++,t.options),o=(cov_2dj4df7l8y().s[1956]++,Math.min(s.right-s.left,s.bottom-s.top)),r=(cov_2dj4df7l8y().s[1957]++,Math.max(o/2,0)),a=(cov_2dj4df7l8y().s[1958]++,Math.max(n.cutoutPercentage?(cov_2dj4df7l8y().b[805][0]++,r/100*n.cutoutPercentage):(cov_2dj4df7l8y().b[805][1]++,1),0)),l=(cov_2dj4df7l8y().s[1959]++,(r-a)/t.getVisibleDatasetCount());cov_2dj4df7l8y().s[1960]++;this.outerRadius=r-l*this.index,this.innerRadius=this.outerRadius-l;}updateElements(t,s,n,o){cov_2dj4df7l8y().f[569]++;let r=(cov_2dj4df7l8y().s[1961]++,o==="reset"),a=(cov_2dj4df7l8y().s[1962]++,this.chart),c=(cov_2dj4df7l8y().s[1963]++,a.options.animation),h=(cov_2dj4df7l8y().s[1964]++,this._cachedMeta.rScale),d=(cov_2dj4df7l8y().s[1965]++,h.xCenter),f=(cov_2dj4df7l8y().s[1966]++,h.yCenter),u=(cov_2dj4df7l8y().s[1967]++,h.getIndexAngle(0)-.5*L),p=(cov_2dj4df7l8y().s[1968]++,u),g,m=(cov_2dj4df7l8y().s[1969]++,360/this.countVisibleElements());cov_2dj4df7l8y().s[1970]++;for(g=0;g{cov_2dj4df7l8y().f[571]++;cov_2dj4df7l8y().s[1983]++;(cov_2dj4df7l8y().b[811][0]++,!isNaN(this.getParsed(o).r))&&(cov_2dj4df7l8y().b[811][1]++,this.chart.getDataVisibility(o))&&(cov_2dj4df7l8y().b[811][2]++,s++);}),s;}_computeAngle(t,s,n){cov_2dj4df7l8y().f[572]++;cov_2dj4df7l8y().s[1984]++;return this.chart.getDataVisibility(t)?(cov_2dj4df7l8y().b[812][0]++,it((cov_2dj4df7l8y().b[813][0]++,this.resolveDataElementOptions(t,s).angle)||(cov_2dj4df7l8y().b[813][1]++,n))):(cov_2dj4df7l8y().b[812][1]++,0);}}cov_2dj4df7l8y().s[1985]++;return e;})()),Ja=(cov_2dj4df7l8y().s[1986]++,(()=>{cov_2dj4df7l8y().f[573]++;class e extends Os{static id=(cov_2dj4df7l8y().s[1987]++,"pie");static defaults=(cov_2dj4df7l8y().s[1988]++,{cutout:0,rotation:0,circumference:360,radius:"100%"});}cov_2dj4df7l8y().s[1989]++;return e;})()),Za=(cov_2dj4df7l8y().s[1990]++,(()=>{cov_2dj4df7l8y().f[574]++;class e extends Ot{static id=(cov_2dj4df7l8y().s[1991]++,"radar");static defaults=(cov_2dj4df7l8y().s[1992]++,{datasetElementType:"line",dataElementType:"point",indexAxis:"r",showLine:!0,elements:{line:{fill:"start"}}});static overrides=(cov_2dj4df7l8y().s[1993]++,{aspectRatio:1,scales:{r:{type:"radialLinear"}}});getLabelAndValue(t){cov_2dj4df7l8y().f[575]++;let s=(cov_2dj4df7l8y().s[1994]++,this._cachedMeta.vScale),n=(cov_2dj4df7l8y().s[1995]++,this.getParsed(t));cov_2dj4df7l8y().s[1996]++;return{label:s.getLabels()[t],value:""+s.getLabelForValue(n[s.axis])};}parseObjectData(t,s,n,o){cov_2dj4df7l8y().f[576]++;cov_2dj4df7l8y().s[1997]++;return ji.bind(this)(t,s,n,o);}update(t){cov_2dj4df7l8y().f[577]++;let s=(cov_2dj4df7l8y().s[1998]++,this._cachedMeta),n=(cov_2dj4df7l8y().s[1999]++,s.dataset),o=(cov_2dj4df7l8y().s[2000]++,(cov_2dj4df7l8y().b[814][0]++,s.data)||(cov_2dj4df7l8y().b[814][1]++,[])),r=(cov_2dj4df7l8y().s[2001]++,s.iScale.getLabels());cov_2dj4df7l8y().s[2002]++;if(n.points=o,t!=="resize"){cov_2dj4df7l8y().b[815][0]++;let a=(cov_2dj4df7l8y().s[2003]++,this.resolveDatasetElementOptions(t));cov_2dj4df7l8y().s[2004]++;(cov_2dj4df7l8y().b[816][0]++,this.options.showLine)||(cov_2dj4df7l8y().b[816][1]++,a.borderWidth=0);let l=(cov_2dj4df7l8y().s[2005]++,{_loop:!0,_fullLoop:r.length===o.length,options:a});cov_2dj4df7l8y().s[2006]++;this.updateElement(n,void 0,l,t);}else{cov_2dj4df7l8y().b[815][1]++;}cov_2dj4df7l8y().s[2007]++;this.updateElements(o,0,o.length,t);}updateElements(t,s,n,o){cov_2dj4df7l8y().f[578]++;let r=(cov_2dj4df7l8y().s[2008]++,this._cachedMeta.rScale),a=(cov_2dj4df7l8y().s[2009]++,o==="reset");cov_2dj4df7l8y().s[2010]++;for(let l=(cov_2dj4df7l8y().s[2011]++,s);l{cov_2dj4df7l8y().f[579]++;class e extends Ot{static id=(cov_2dj4df7l8y().s[2021]++,"scatter");static defaults=(cov_2dj4df7l8y().s[2022]++,{datasetElementType:!1,dataElementType:"point",showLine:!1,fill:!1});static overrides=(cov_2dj4df7l8y().s[2023]++,{interaction:{mode:"point"},scales:{x:{type:"linear"},y:{type:"linear"}}});getLabelAndValue(t){cov_2dj4df7l8y().f[580]++;let s=(cov_2dj4df7l8y().s[2024]++,this._cachedMeta),n=(cov_2dj4df7l8y().s[2025]++,(cov_2dj4df7l8y().b[821][0]++,this.chart.data.labels)||(cov_2dj4df7l8y().b[821][1]++,[])),{xScale:o,yScale:r}=(cov_2dj4df7l8y().s[2026]++,s),a=(cov_2dj4df7l8y().s[2027]++,this.getParsed(t)),l=(cov_2dj4df7l8y().s[2028]++,o.getLabelForValue(a.x)),c=(cov_2dj4df7l8y().s[2029]++,r.getLabelForValue(a.y));cov_2dj4df7l8y().s[2030]++;return{label:(cov_2dj4df7l8y().b[822][0]++,n[t])||(cov_2dj4df7l8y().b[822][1]++,""),value:"("+l+", "+c+")"};}update(t){cov_2dj4df7l8y().f[581]++;let s=(cov_2dj4df7l8y().s[2031]++,this._cachedMeta),{data:n=(cov_2dj4df7l8y().b[823][0]++,[])}=(cov_2dj4df7l8y().s[2032]++,s),o=(cov_2dj4df7l8y().s[2033]++,this.chart._animationsDisabled),{start:r,count:a}=(cov_2dj4df7l8y().s[2034]++,Ri(s,n,o));cov_2dj4df7l8y().s[2035]++;if(this._drawStart=r,this._drawCount=a,(cov_2dj4df7l8y().b[825][0]++,Ei(s))&&(cov_2dj4df7l8y().b[825][1]++,r=0,a=n.length),this.options.showLine){cov_2dj4df7l8y().b[824][0]++;cov_2dj4df7l8y().s[2036]++;(cov_2dj4df7l8y().b[826][0]++,this.datasetElementType)||(cov_2dj4df7l8y().b[826][1]++,this.addElements());let{dataset:l,_dataset:c}=(cov_2dj4df7l8y().s[2037]++,s);cov_2dj4df7l8y().s[2038]++;l._chart=this.chart,l._datasetIndex=this.index,l._decimated=!!c._decimated,l.points=n;let h=(cov_2dj4df7l8y().s[2039]++,this.resolveDatasetElementOptions(t));cov_2dj4df7l8y().s[2040]++;h.segment=this.options.segment,this.updateElement(l,void 0,{animated:!o,options:h},t);}else{cov_2dj4df7l8y().b[824][1]++;cov_2dj4df7l8y().s[2041]++;(cov_2dj4df7l8y().b[827][0]++,this.datasetElementType)&&(cov_2dj4df7l8y().b[827][1]++,delete s.dataset,this.datasetElementType=!1);}cov_2dj4df7l8y().s[2042]++;this.updateElements(n,r,a,t);}addElements(){cov_2dj4df7l8y().f[582]++;let{showLine:t}=(cov_2dj4df7l8y().s[2043]++,this.options);cov_2dj4df7l8y().s[2044]++;(cov_2dj4df7l8y().b[828][0]++,!this.datasetElementType)&&(cov_2dj4df7l8y().b[828][1]++,t)&&(cov_2dj4df7l8y().b[828][2]++,this.datasetElementType=this.chart.registry.getElement("line")),super.addElements();}updateElements(t,s,n,o){cov_2dj4df7l8y().f[583]++;let r=(cov_2dj4df7l8y().s[2045]++,o==="reset"),{iScale:a,vScale:l,_stacked:c,_dataset:h}=(cov_2dj4df7l8y().s[2046]++,this._cachedMeta),d=(cov_2dj4df7l8y().s[2047]++,this.resolveDataElementOptions(s,o)),f=(cov_2dj4df7l8y().s[2048]++,this.getSharedOptions(d)),u=(cov_2dj4df7l8y().s[2049]++,this.includeOptions(o,f)),p=(cov_2dj4df7l8y().s[2050]++,a.axis),g=(cov_2dj4df7l8y().s[2051]++,l.axis),{spanGaps:m,segment:b}=(cov_2dj4df7l8y().s[2052]++,this.options),x=(cov_2dj4df7l8y().s[2053]++,It(m)?(cov_2dj4df7l8y().b[829][0]++,m):(cov_2dj4df7l8y().b[829][1]++,Number.POSITIVE_INFINITY)),y=(cov_2dj4df7l8y().s[2054]++,(cov_2dj4df7l8y().b[830][0]++,this.chart._animationsDisabled)||(cov_2dj4df7l8y().b[830][1]++,r)||(cov_2dj4df7l8y().b[830][2]++,o==="none")),M=(cov_2dj4df7l8y().s[2055]++,(cov_2dj4df7l8y().b[831][0]++,s>0)&&(cov_2dj4df7l8y().b[831][1]++,this.getParsed(s-1)));cov_2dj4df7l8y().s[2056]++;for(let _=(cov_2dj4df7l8y().s[2057]++,s);_0)&&(cov_2dj4df7l8y().b[837][1]++,Math.abs(S[p]-M[p])>x),(cov_2dj4df7l8y().b[838][0]++,b)&&(cov_2dj4df7l8y().b[838][1]++,k.parsed=S,k.raw=h.data[_]),(cov_2dj4df7l8y().b[839][0]++,u)&&(cov_2dj4df7l8y().b[839][1]++,k.options=(cov_2dj4df7l8y().b[840][0]++,f)||(cov_2dj4df7l8y().b[840][1]++,this.resolveDataElementOptions(_,v.active?(cov_2dj4df7l8y().b[841][0]++,"active"):(cov_2dj4df7l8y().b[841][1]++,o)))),(cov_2dj4df7l8y().b[842][0]++,y)||(cov_2dj4df7l8y().b[842][1]++,this.updateElement(v,_,k,o)),M=S;}cov_2dj4df7l8y().s[2065]++;this.updateSharedOptions(f,o,d);}getMaxOverflow(){cov_2dj4df7l8y().f[584]++;let t=(cov_2dj4df7l8y().s[2066]++,this._cachedMeta),s=(cov_2dj4df7l8y().s[2067]++,(cov_2dj4df7l8y().b[843][0]++,t.data)||(cov_2dj4df7l8y().b[843][1]++,[]));cov_2dj4df7l8y().s[2068]++;if(!this.options.showLine){cov_2dj4df7l8y().b[844][0]++;let l=(cov_2dj4df7l8y().s[2069]++,0);cov_2dj4df7l8y().s[2070]++;for(let c=(cov_2dj4df7l8y().s[2071]++,s.length-1);c>=0;--c){cov_2dj4df7l8y().s[2072]++;l=Math.max(l,s[c].size(this.resolveDataElementOptions(c))/2);}cov_2dj4df7l8y().s[2073]++;return(cov_2dj4df7l8y().b[845][0]++,l>0)&&(cov_2dj4df7l8y().b[845][1]++,l);}else{cov_2dj4df7l8y().b[844][1]++;}let n=(cov_2dj4df7l8y().s[2074]++,t.dataset),o=(cov_2dj4df7l8y().s[2075]++,(cov_2dj4df7l8y().b[846][0]++,n.options)&&(cov_2dj4df7l8y().b[846][1]++,n.options.borderWidth)||(cov_2dj4df7l8y().b[846][2]++,0));cov_2dj4df7l8y().s[2076]++;if(!s.length){cov_2dj4df7l8y().b[847][0]++;cov_2dj4df7l8y().s[2077]++;return o;}else{cov_2dj4df7l8y().b[847][1]++;}let r=(cov_2dj4df7l8y().s[2078]++,s[0].size(this.resolveDataElementOptions(0))),a=(cov_2dj4df7l8y().s[2079]++,s[s.length-1].size(this.resolveDataElementOptions(s.length-1)));cov_2dj4df7l8y().s[2080]++;return Math.max(o,r,a)/2;}}cov_2dj4df7l8y().s[2081]++;return e;})()),tl=(cov_2dj4df7l8y().s[2082]++,Object.freeze({__proto__:null,BarController:Xa,BubbleController:Ka,DoughnutController:Os,LineController:Ga,PieController:Ja,PolarAreaController:zo,RadarController:Za,ScatterController:Qa}));function zt(){cov_2dj4df7l8y().f[585]++;cov_2dj4df7l8y().s[2083]++;throw new Error("This method is not implemented: Check that a complete date adapter is provided.");}cov_2dj4df7l8y().s[2084]++;var hs=class e{static override(i){cov_2dj4df7l8y().f[586]++;cov_2dj4df7l8y().s[2085]++;Object.assign(e.prototype,i);}options;constructor(i){cov_2dj4df7l8y().f[587]++;cov_2dj4df7l8y().s[2086]++;this.options=(cov_2dj4df7l8y().b[848][0]++,i)||(cov_2dj4df7l8y().b[848][1]++,{});}init(){cov_2dj4df7l8y().f[588]++;}formats(){cov_2dj4df7l8y().f[589]++;cov_2dj4df7l8y().s[2087]++;return zt();}parse(){cov_2dj4df7l8y().f[590]++;cov_2dj4df7l8y().s[2088]++;return zt();}format(){cov_2dj4df7l8y().f[591]++;cov_2dj4df7l8y().s[2089]++;return zt();}add(){cov_2dj4df7l8y().f[592]++;cov_2dj4df7l8y().s[2090]++;return zt();}diff(){cov_2dj4df7l8y().f[593]++;cov_2dj4df7l8y().s[2091]++;return zt();}startOf(){cov_2dj4df7l8y().f[594]++;cov_2dj4df7l8y().s[2092]++;return zt();}endOf(){cov_2dj4df7l8y().f[595]++;cov_2dj4df7l8y().s[2093]++;return zt();}},el=(cov_2dj4df7l8y().s[2094]++,{_date:hs});function il(e,i,t,s){cov_2dj4df7l8y().f[596]++;let{controller:n,data:o,_sorted:r}=(cov_2dj4df7l8y().s[2095]++,e),a=(cov_2dj4df7l8y().s[2096]++,n._cachedMeta.iScale),l=(cov_2dj4df7l8y().s[2097]++,(cov_2dj4df7l8y().b[850][0]++,e.dataset)&&(cov_2dj4df7l8y().b[850][1]++,e.dataset.options)?(cov_2dj4df7l8y().b[849][0]++,e.dataset.options.spanGaps):(cov_2dj4df7l8y().b[849][1]++,null));cov_2dj4df7l8y().s[2098]++;if((cov_2dj4df7l8y().b[852][0]++,a)&&(cov_2dj4df7l8y().b[852][1]++,i===a.axis)&&(cov_2dj4df7l8y().b[852][2]++,i!=="r")&&(cov_2dj4df7l8y().b[852][3]++,r)&&(cov_2dj4df7l8y().b[852][4]++,o.length)){cov_2dj4df7l8y().b[851][0]++;let c=(cov_2dj4df7l8y().s[2099]++,a._reversePixels?(cov_2dj4df7l8y().b[853][0]++,fn):(cov_2dj4df7l8y().b[853][1]++,rt));cov_2dj4df7l8y().s[2100]++;if(s){cov_2dj4df7l8y().b[854][0]++;cov_2dj4df7l8y().s[2101]++;if(n._sharedOptions){cov_2dj4df7l8y().b[855][0]++;let h=(cov_2dj4df7l8y().s[2102]++,o[0]),d=(cov_2dj4df7l8y().s[2103]++,(cov_2dj4df7l8y().b[856][0]++,typeof h.getRange=="function")&&(cov_2dj4df7l8y().b[856][1]++,h.getRange(i)));cov_2dj4df7l8y().s[2104]++;if(d){cov_2dj4df7l8y().b[857][0]++;let f=(cov_2dj4df7l8y().s[2105]++,c(o,i,t-d)),u=(cov_2dj4df7l8y().s[2106]++,c(o,i,t+d));cov_2dj4df7l8y().s[2107]++;return{lo:f.lo,hi:u.hi};}else{cov_2dj4df7l8y().b[857][1]++;}}else{cov_2dj4df7l8y().b[855][1]++;}}else{cov_2dj4df7l8y().b[854][1]++;let h=(cov_2dj4df7l8y().s[2108]++,c(o,i,t));cov_2dj4df7l8y().s[2109]++;if(l){cov_2dj4df7l8y().b[858][0]++;let{vScale:d}=(cov_2dj4df7l8y().s[2110]++,n._cachedMeta),{_parsed:f}=(cov_2dj4df7l8y().s[2111]++,e),u=(cov_2dj4df7l8y().s[2112]++,f.slice(0,h.lo+1).reverse().findIndex(g=>{cov_2dj4df7l8y().f[597]++;cov_2dj4df7l8y().s[2113]++;return!O(g[d.axis]);}));cov_2dj4df7l8y().s[2114]++;h.lo-=Math.max(0,u);let p=(cov_2dj4df7l8y().s[2115]++,f.slice(h.hi).findIndex(g=>{cov_2dj4df7l8y().f[598]++;cov_2dj4df7l8y().s[2116]++;return!O(g[d.axis]);}));cov_2dj4df7l8y().s[2117]++;h.hi+=Math.max(0,p);}else{cov_2dj4df7l8y().b[858][1]++;}cov_2dj4df7l8y().s[2118]++;return h;}}else{cov_2dj4df7l8y().b[851][1]++;}cov_2dj4df7l8y().s[2119]++;return{lo:0,hi:o.length-1};}function we(e,i,t,s,n){cov_2dj4df7l8y().f[599]++;let o=(cov_2dj4df7l8y().s[2120]++,e.getSortedVisibleDatasetMetas()),r=(cov_2dj4df7l8y().s[2121]++,t[i]);cov_2dj4df7l8y().s[2122]++;for(let a=(cov_2dj4df7l8y().s[2123]++,0),l=(cov_2dj4df7l8y().s[2124]++,o.length);a{cov_2dj4df7l8y().f[610]++;cov_2dj4df7l8y().s[2162]++;(cov_2dj4df7l8y().b[877][0]++,l[r])&&(cov_2dj4df7l8y().b[877][1]++,l[r](i[t],n))&&(cov_2dj4df7l8y().b[877][2]++,o.push({element:l,datasetIndex:c,index:h}),a=(cov_2dj4df7l8y().b[878][0]++,a)||(cov_2dj4df7l8y().b[878][1]++,l.inRange(i.x,i.y,n)));}),(cov_2dj4df7l8y().b[880][0]++,s)&&(cov_2dj4df7l8y().b[880][1]++,!a)?(cov_2dj4df7l8y().b[879][0]++,[]):(cov_2dj4df7l8y().b[879][1]++,o);}var rl=(cov_2dj4df7l8y().s[2163]++,{evaluateInteractionItems:we,modes:{index(e,i,t,s){cov_2dj4df7l8y().f[611]++;let n=(cov_2dj4df7l8y().s[2164]++,Pt(i,e)),o=(cov_2dj4df7l8y().s[2165]++,(cov_2dj4df7l8y().b[881][0]++,t.axis)||(cov_2dj4df7l8y().b[881][1]++,"x")),r=(cov_2dj4df7l8y().s[2166]++,(cov_2dj4df7l8y().b[882][0]++,t.includeInvisible)||(cov_2dj4df7l8y().b[882][1]++,!1)),a=(cov_2dj4df7l8y().s[2167]++,t.intersect?(cov_2dj4df7l8y().b[883][0]++,es(e,n,o,s,r)):(cov_2dj4df7l8y().b[883][1]++,is(e,n,o,!1,s,r))),l=(cov_2dj4df7l8y().s[2168]++,[]);cov_2dj4df7l8y().s[2169]++;return a.length?(cov_2dj4df7l8y().b[884][0]++,e.getSortedVisibleDatasetMetas().forEach(c=>{cov_2dj4df7l8y().f[612]++;let h=(cov_2dj4df7l8y().s[2170]++,a[0].index),d=(cov_2dj4df7l8y().s[2171]++,c.data[h]);cov_2dj4df7l8y().s[2172]++;(cov_2dj4df7l8y().b[885][0]++,d)&&(cov_2dj4df7l8y().b[885][1]++,!d.skip)&&(cov_2dj4df7l8y().b[885][2]++,l.push({element:d,datasetIndex:c.index,index:h}));}),l):(cov_2dj4df7l8y().b[884][1]++,[]);},dataset(e,i,t,s){cov_2dj4df7l8y().f[613]++;let n=(cov_2dj4df7l8y().s[2173]++,Pt(i,e)),o=(cov_2dj4df7l8y().s[2174]++,(cov_2dj4df7l8y().b[886][0]++,t.axis)||(cov_2dj4df7l8y().b[886][1]++,"xy")),r=(cov_2dj4df7l8y().s[2175]++,(cov_2dj4df7l8y().b[887][0]++,t.includeInvisible)||(cov_2dj4df7l8y().b[887][1]++,!1)),a=(cov_2dj4df7l8y().s[2176]++,t.intersect?(cov_2dj4df7l8y().b[888][0]++,es(e,n,o,s,r)):(cov_2dj4df7l8y().b[888][1]++,is(e,n,o,!1,s,r)));cov_2dj4df7l8y().s[2177]++;if(a.length>0){cov_2dj4df7l8y().b[889][0]++;let l=(cov_2dj4df7l8y().s[2178]++,a[0].datasetIndex),c=(cov_2dj4df7l8y().s[2179]++,e.getDatasetMeta(l).data);cov_2dj4df7l8y().s[2180]++;a=[];cov_2dj4df7l8y().s[2181]++;for(let h=(cov_2dj4df7l8y().s[2182]++,0);h{cov_2dj4df7l8y().f[619]++;cov_2dj4df7l8y().s[2199]++;return t.pos===i;});}function Yn(e,i){cov_2dj4df7l8y().f[620]++;cov_2dj4df7l8y().s[2200]++;return e.filter(t=>{cov_2dj4df7l8y().f[621]++;cov_2dj4df7l8y().s[2201]++;return(cov_2dj4df7l8y().b[894][0]++,Bo.indexOf(t.pos)===-1)&&(cov_2dj4df7l8y().b[894][1]++,t.box.axis===i);});}function be(e,i){cov_2dj4df7l8y().f[622]++;cov_2dj4df7l8y().s[2202]++;return e.sort((t,s)=>{cov_2dj4df7l8y().f[623]++;let n=(cov_2dj4df7l8y().s[2203]++,i?(cov_2dj4df7l8y().b[895][0]++,s):(cov_2dj4df7l8y().b[895][1]++,t)),o=(cov_2dj4df7l8y().s[2204]++,i?(cov_2dj4df7l8y().b[896][0]++,t):(cov_2dj4df7l8y().b[896][1]++,s));cov_2dj4df7l8y().s[2205]++;return n.weight===o.weight?(cov_2dj4df7l8y().b[897][0]++,n.index-o.index):(cov_2dj4df7l8y().b[897][1]++,n.weight-o.weight);});}function al(e){cov_2dj4df7l8y().f[624]++;let i=(cov_2dj4df7l8y().s[2206]++,[]),t,s,n,o,r,a;cov_2dj4df7l8y().s[2207]++;for(t=0,s=((cov_2dj4df7l8y().b[898][0]++,e)||(cov_2dj4df7l8y().b[898][1]++,[])).length;t{cov_2dj4df7l8y().f[628]++;cov_2dj4df7l8y().s[2229]++;return c.box.fullSize;}),!0)),s=(cov_2dj4df7l8y().s[2230]++,be(me(i,"left"),!0)),n=(cov_2dj4df7l8y().s[2231]++,be(me(i,"right"))),o=(cov_2dj4df7l8y().s[2232]++,be(me(i,"top"),!0)),r=(cov_2dj4df7l8y().s[2233]++,be(me(i,"bottom"))),a=(cov_2dj4df7l8y().s[2234]++,Yn(i,"x")),l=(cov_2dj4df7l8y().s[2235]++,Yn(i,"y"));cov_2dj4df7l8y().s[2236]++;return{fullSize:t,leftAndTop:s.concat(o),rightAndBottom:n.concat(l).concat(r).concat(a),chartArea:me(i,"chartArea"),vertical:s.concat(n).concat(l),horizontal:o.concat(r).concat(a)};}function $n(e,i,t,s){cov_2dj4df7l8y().f[629]++;cov_2dj4df7l8y().s[2237]++;return Math.max(e[t],i[t])+Math.max(e[s],i[s]);}function Wo(e,i){cov_2dj4df7l8y().f[630]++;cov_2dj4df7l8y().s[2238]++;e.top=Math.max(e.top,i.top),e.left=Math.max(e.left,i.left),e.bottom=Math.max(e.bottom,i.bottom),e.right=Math.max(e.right,i.right);}function dl(e,i,t,s){cov_2dj4df7l8y().f[631]++;let{pos:n,box:o}=(cov_2dj4df7l8y().s[2239]++,t),r=(cov_2dj4df7l8y().s[2240]++,e.maxPadding);cov_2dj4df7l8y().s[2241]++;if(!A(n)){cov_2dj4df7l8y().b[910][0]++;cov_2dj4df7l8y().s[2242]++;(cov_2dj4df7l8y().b[911][0]++,t.size)&&(cov_2dj4df7l8y().b[911][1]++,e[n]-=t.size);let d=(cov_2dj4df7l8y().s[2243]++,(cov_2dj4df7l8y().b[912][0]++,s[t.stack])||(cov_2dj4df7l8y().b[912][1]++,{size:0,count:1}));cov_2dj4df7l8y().s[2244]++;d.size=Math.max(d.size,t.horizontal?(cov_2dj4df7l8y().b[913][0]++,o.height):(cov_2dj4df7l8y().b[913][1]++,o.width)),t.size=d.size/d.count,e[n]+=t.size;}else{cov_2dj4df7l8y().b[910][1]++;}cov_2dj4df7l8y().s[2245]++;(cov_2dj4df7l8y().b[914][0]++,o.getPadding)&&(cov_2dj4df7l8y().b[914][1]++,Wo(r,o.getPadding()));let a=(cov_2dj4df7l8y().s[2246]++,Math.max(0,i.outerWidth-$n(r,e,"left","right"))),l=(cov_2dj4df7l8y().s[2247]++,Math.max(0,i.outerHeight-$n(r,e,"top","bottom"))),c=(cov_2dj4df7l8y().s[2248]++,a!==e.w),h=(cov_2dj4df7l8y().s[2249]++,l!==e.h);cov_2dj4df7l8y().s[2250]++;return e.w=a,e.h=l,t.horizontal?(cov_2dj4df7l8y().b[915][0]++,{same:c,other:h}):(cov_2dj4df7l8y().b[915][1]++,{same:h,other:c});}function fl(e){cov_2dj4df7l8y().f[632]++;let i=(cov_2dj4df7l8y().s[2251]++,e.maxPadding);function t(s){cov_2dj4df7l8y().f[633]++;let n=(cov_2dj4df7l8y().s[2252]++,Math.max(i[s]-e[s],0));cov_2dj4df7l8y().s[2253]++;return e[s]+=n,n;}cov_2dj4df7l8y().s[2254]++;e.y+=t("top"),e.x+=t("left"),t("right"),t("bottom");}function ul(e,i){cov_2dj4df7l8y().f[634]++;let t=(cov_2dj4df7l8y().s[2255]++,i.maxPadding);function s(n){cov_2dj4df7l8y().f[635]++;let o=(cov_2dj4df7l8y().s[2256]++,{left:0,top:0,right:0,bottom:0});cov_2dj4df7l8y().s[2257]++;return n.forEach(r=>{cov_2dj4df7l8y().f[636]++;cov_2dj4df7l8y().s[2258]++;o[r]=Math.max(i[r],t[r]);}),o;}cov_2dj4df7l8y().s[2259]++;return s(e?(cov_2dj4df7l8y().b[916][0]++,["left","right"]):(cov_2dj4df7l8y().b[916][1]++,["top","bottom"]));}function ye(e,i,t,s){cov_2dj4df7l8y().f[637]++;let n=(cov_2dj4df7l8y().s[2260]++,[]),o,r,a,l,c,h;cov_2dj4df7l8y().s[2261]++;for(o=0,r=e.length,c=0;o{cov_2dj4df7l8y().f[646]++;cov_2dj4df7l8y().s[2297]++;(cov_2dj4df7l8y().b[940][0]++,typeof g.beforeLayout=="function")&&(cov_2dj4df7l8y().b[940][1]++,g.beforeLayout());});let h=(cov_2dj4df7l8y().s[2298]++,(cov_2dj4df7l8y().b[941][0]++,l.reduce((g,m)=>{cov_2dj4df7l8y().f[647]++;cov_2dj4df7l8y().s[2299]++;return(cov_2dj4df7l8y().b[943][0]++,m.box.options)&&(cov_2dj4df7l8y().b[943][1]++,m.box.options.display===!1)?(cov_2dj4df7l8y().b[942][0]++,g):(cov_2dj4df7l8y().b[942][1]++,g+1);},0))||(cov_2dj4df7l8y().b[941][1]++,1)),d=(cov_2dj4df7l8y().s[2300]++,Object.freeze({outerWidth:i,outerHeight:t,padding:n,availableWidth:o,availableHeight:r,vBoxMaxWidth:o/2/h,hBoxMaxHeight:r/2})),f=(cov_2dj4df7l8y().s[2301]++,Object.assign({},n));cov_2dj4df7l8y().s[2302]++;Wo(f,K(s));let u=(cov_2dj4df7l8y().s[2303]++,Object.assign({maxPadding:f,w:o,h:r,x:n.left,y:n.top},n)),p=(cov_2dj4df7l8y().s[2304]++,cl(l.concat(c),d));cov_2dj4df7l8y().s[2305]++;ye(a.fullSize,u,d,p),ye(l,u,d,p),(cov_2dj4df7l8y().b[944][0]++,ye(c,u,d,p))&&(cov_2dj4df7l8y().b[944][1]++,ye(l,u,d,p)),fl(u),Un(a.leftAndTop,u,d,p),u.x+=u.w,u.y+=u.h,Un(a.rightAndBottom,u,d,p),e.chartArea={left:u.left,top:u.top,right:u.left+u.w,bottom:u.top+u.h,height:u.h,width:u.w},R(a.chartArea,g=>{cov_2dj4df7l8y().f[648]++;let m=(cov_2dj4df7l8y().s[2306]++,g.box);cov_2dj4df7l8y().s[2307]++;Object.assign(m,e.chartArea),m.update(u.w,u.h,{left:0,top:0,right:0,bottom:0});});}}),oi=class{acquireContext(i,t){cov_2dj4df7l8y().f[649]++;}releaseContext(i){cov_2dj4df7l8y().f[650]++;cov_2dj4df7l8y().s[2309]++;return!1;}addEventListener(i,t,s){cov_2dj4df7l8y().f[651]++;}removeEventListener(i,t,s){cov_2dj4df7l8y().f[652]++;}getDevicePixelRatio(){cov_2dj4df7l8y().f[653]++;cov_2dj4df7l8y().s[2310]++;return 1;}getMaximumSize(i,t,s,n){cov_2dj4df7l8y().f[654]++;cov_2dj4df7l8y().s[2311]++;return t=Math.max(0,(cov_2dj4df7l8y().b[945][0]++,t)||(cov_2dj4df7l8y().b[945][1]++,i.width)),s=(cov_2dj4df7l8y().b[946][0]++,s)||(cov_2dj4df7l8y().b[946][1]++,i.height),{width:t,height:Math.max(0,n?(cov_2dj4df7l8y().b[947][0]++,Math.floor(t/n)):(cov_2dj4df7l8y().b[947][1]++,s))};}isAttached(i){cov_2dj4df7l8y().f[655]++;cov_2dj4df7l8y().s[2312]++;return!0;}updateConfig(i){cov_2dj4df7l8y().f[656]++;}},ds=class extends oi{acquireContext(i){cov_2dj4df7l8y().f[657]++;cov_2dj4df7l8y().s[2314]++;return(cov_2dj4df7l8y().b[948][0]++,i)&&(cov_2dj4df7l8y().b[948][1]++,i.getContext)&&(cov_2dj4df7l8y().b[948][2]++,i.getContext("2d"))||(cov_2dj4df7l8y().b[948][3]++,null);}updateConfig(i){cov_2dj4df7l8y().f[658]++;cov_2dj4df7l8y().s[2315]++;i.options.animation=!1;}},ii=(cov_2dj4df7l8y().s[2316]++,"$chartjs"),gl=(cov_2dj4df7l8y().s[2317]++,{touchstart:"mousedown",touchmove:"mousemove",touchend:"mouseup",pointerenter:"mouseenter",pointerdown:"mousedown",pointermove:"mousemove",pointerup:"mouseup",pointerleave:"mouseout",pointerout:"mouseout"}),Xn=e=>{cov_2dj4df7l8y().f[659]++;cov_2dj4df7l8y().s[2319]++;return(cov_2dj4df7l8y().b[949][0]++,e===null)||(cov_2dj4df7l8y().b[949][1]++,e==="");};function pl(e,i){cov_2dj4df7l8y().f[660]++;let t=(cov_2dj4df7l8y().s[2320]++,e.style),s=(cov_2dj4df7l8y().s[2321]++,e.getAttribute("height")),n=(cov_2dj4df7l8y().s[2322]++,e.getAttribute("width"));cov_2dj4df7l8y().s[2323]++;if(e[ii]={initial:{height:s,width:n,style:{display:t.display,height:t.height,width:t.width}}},t.display=(cov_2dj4df7l8y().b[951][0]++,t.display)||(cov_2dj4df7l8y().b[951][1]++,"block"),t.boxSizing=(cov_2dj4df7l8y().b[952][0]++,t.boxSizing)||(cov_2dj4df7l8y().b[952][1]++,"border-box"),Xn(n)){cov_2dj4df7l8y().b[950][0]++;let o=(cov_2dj4df7l8y().s[2324]++,$i(e,"width"));cov_2dj4df7l8y().s[2325]++;(cov_2dj4df7l8y().b[953][0]++,o!==void 0)&&(cov_2dj4df7l8y().b[953][1]++,e.width=o);}else{cov_2dj4df7l8y().b[950][1]++;}cov_2dj4df7l8y().s[2326]++;if(Xn(s)){cov_2dj4df7l8y().b[954][0]++;cov_2dj4df7l8y().s[2327]++;if(e.style.height===""){cov_2dj4df7l8y().b[955][0]++;cov_2dj4df7l8y().s[2328]++;e.height=e.width/((cov_2dj4df7l8y().b[956][0]++,i)||(cov_2dj4df7l8y().b[956][1]++,2));}else{cov_2dj4df7l8y().b[955][1]++;let o=(cov_2dj4df7l8y().s[2329]++,$i(e,"height"));cov_2dj4df7l8y().s[2330]++;(cov_2dj4df7l8y().b[957][0]++,o!==void 0)&&(cov_2dj4df7l8y().b[957][1]++,e.height=o);}}else{cov_2dj4df7l8y().b[954][1]++;}cov_2dj4df7l8y().s[2331]++;return e;}var No=(cov_2dj4df7l8y().s[2332]++,On?(cov_2dj4df7l8y().b[958][0]++,{passive:!0}):(cov_2dj4df7l8y().b[958][1]++,!1));function ml(e,i,t){cov_2dj4df7l8y().f[661]++;cov_2dj4df7l8y().s[2333]++;(cov_2dj4df7l8y().b[959][0]++,e)&&(cov_2dj4df7l8y().b[959][1]++,e.addEventListener(i,t,No));}function bl(e,i,t){cov_2dj4df7l8y().f[662]++;cov_2dj4df7l8y().s[2334]++;(cov_2dj4df7l8y().b[960][0]++,e)&&(cov_2dj4df7l8y().b[960][1]++,e.canvas)&&(cov_2dj4df7l8y().b[960][2]++,e.canvas.removeEventListener(i,t,No));}function xl(e,i){cov_2dj4df7l8y().f[663]++;let t=(cov_2dj4df7l8y().s[2335]++,(cov_2dj4df7l8y().b[961][0]++,gl[e.type])||(cov_2dj4df7l8y().b[961][1]++,e.type)),{x:s,y:n}=(cov_2dj4df7l8y().s[2336]++,Pt(e,i));cov_2dj4df7l8y().s[2337]++;return{type:t,chart:i,native:e,x:s!==void 0?(cov_2dj4df7l8y().b[962][0]++,s):(cov_2dj4df7l8y().b[962][1]++,null),y:n!==void 0?(cov_2dj4df7l8y().b[963][0]++,n):(cov_2dj4df7l8y().b[963][1]++,null)};}function ri(e,i){cov_2dj4df7l8y().f[664]++;cov_2dj4df7l8y().s[2338]++;for(let t of e){cov_2dj4df7l8y().s[2339]++;if((cov_2dj4df7l8y().b[965][0]++,t===i)||(cov_2dj4df7l8y().b[965][1]++,t.contains(i))){cov_2dj4df7l8y().b[964][0]++;cov_2dj4df7l8y().s[2340]++;return!0;}else{cov_2dj4df7l8y().b[964][1]++;}}}function _l(e,i,t){cov_2dj4df7l8y().f[665]++;let s=(cov_2dj4df7l8y().s[2341]++,e.canvas),n=(cov_2dj4df7l8y().s[2342]++,new MutationObserver(o=>{cov_2dj4df7l8y().f[666]++;let r=(cov_2dj4df7l8y().s[2343]++,!1);cov_2dj4df7l8y().s[2344]++;for(let a of o){cov_2dj4df7l8y().s[2345]++;r=(cov_2dj4df7l8y().b[966][0]++,r)||(cov_2dj4df7l8y().b[966][1]++,ri(a.addedNodes,s)),r=(cov_2dj4df7l8y().b[967][0]++,r)&&(cov_2dj4df7l8y().b[967][1]++,!ri(a.removedNodes,s));}cov_2dj4df7l8y().s[2346]++;(cov_2dj4df7l8y().b[968][0]++,r)&&(cov_2dj4df7l8y().b[968][1]++,t());}));cov_2dj4df7l8y().s[2347]++;return n.observe(document,{childList:!0,subtree:!0}),n;}function yl(e,i,t){cov_2dj4df7l8y().f[667]++;let s=(cov_2dj4df7l8y().s[2348]++,e.canvas),n=(cov_2dj4df7l8y().s[2349]++,new MutationObserver(o=>{cov_2dj4df7l8y().f[668]++;let r=(cov_2dj4df7l8y().s[2350]++,!1);cov_2dj4df7l8y().s[2351]++;for(let a of o){cov_2dj4df7l8y().s[2352]++;r=(cov_2dj4df7l8y().b[969][0]++,r)||(cov_2dj4df7l8y().b[969][1]++,ri(a.removedNodes,s)),r=(cov_2dj4df7l8y().b[970][0]++,r)&&(cov_2dj4df7l8y().b[970][1]++,!ri(a.addedNodes,s));}cov_2dj4df7l8y().s[2353]++;(cov_2dj4df7l8y().b[971][0]++,r)&&(cov_2dj4df7l8y().b[971][1]++,t());}));cov_2dj4df7l8y().s[2354]++;return n.observe(document,{childList:!0,subtree:!0}),n;}var Me=(cov_2dj4df7l8y().s[2355]++,new Map()),Kn=(cov_2dj4df7l8y().s[2356]++,0);function Vo(){cov_2dj4df7l8y().f[669]++;let e=(cov_2dj4df7l8y().s[2357]++,window.devicePixelRatio);cov_2dj4df7l8y().s[2358]++;(cov_2dj4df7l8y().b[972][0]++,e!==Kn)&&(cov_2dj4df7l8y().b[972][1]++,Kn=e,Me.forEach((i,t)=>{cov_2dj4df7l8y().f[670]++;cov_2dj4df7l8y().s[2359]++;(cov_2dj4df7l8y().b[973][0]++,t.currentDevicePixelRatio!==e)&&(cov_2dj4df7l8y().b[973][1]++,i());}));}function vl(e,i){cov_2dj4df7l8y().f[671]++;cov_2dj4df7l8y().s[2360]++;(cov_2dj4df7l8y().b[974][0]++,Me.size)||(cov_2dj4df7l8y().b[974][1]++,window.addEventListener("resize",Vo)),Me.set(e,i);}function Ml(e){cov_2dj4df7l8y().f[672]++;cov_2dj4df7l8y().s[2361]++;Me.delete(e),(cov_2dj4df7l8y().b[975][0]++,Me.size)||(cov_2dj4df7l8y().b[975][1]++,window.removeEventListener("resize",Vo));}function kl(e,i,t){cov_2dj4df7l8y().f[673]++;let s=(cov_2dj4df7l8y().s[2362]++,e.canvas),n=(cov_2dj4df7l8y().s[2363]++,(cov_2dj4df7l8y().b[976][0]++,s)&&(cov_2dj4df7l8y().b[976][1]++,Ke(s)));cov_2dj4df7l8y().s[2364]++;if(!n){cov_2dj4df7l8y().b[977][0]++;cov_2dj4df7l8y().s[2365]++;return;}else{cov_2dj4df7l8y().b[977][1]++;}let o=(cov_2dj4df7l8y().s[2366]++,Li((a,l)=>{cov_2dj4df7l8y().f[674]++;let c=(cov_2dj4df7l8y().s[2367]++,n.clientWidth);cov_2dj4df7l8y().s[2368]++;t(a,l),(cov_2dj4df7l8y().b[978][0]++,c{cov_2dj4df7l8y().f[675]++;let l=(cov_2dj4df7l8y().s[2370]++,a[0]),c=(cov_2dj4df7l8y().s[2371]++,l.contentRect.width),h=(cov_2dj4df7l8y().s[2372]++,l.contentRect.height);cov_2dj4df7l8y().s[2373]++;(cov_2dj4df7l8y().b[979][0]++,c===0)&&(cov_2dj4df7l8y().b[979][1]++,h===0)||(cov_2dj4df7l8y().b[979][2]++,o(c,h));}));cov_2dj4df7l8y().s[2374]++;return r.observe(n),vl(e,o),r;}function ss(e,i,t){cov_2dj4df7l8y().f[676]++;cov_2dj4df7l8y().s[2375]++;(cov_2dj4df7l8y().b[980][0]++,t)&&(cov_2dj4df7l8y().b[980][1]++,t.disconnect()),(cov_2dj4df7l8y().b[981][0]++,i==="resize")&&(cov_2dj4df7l8y().b[981][1]++,Ml(e));}function Sl(e,i,t){cov_2dj4df7l8y().f[677]++;let s=(cov_2dj4df7l8y().s[2376]++,e.canvas),n=(cov_2dj4df7l8y().s[2377]++,Li(o=>{cov_2dj4df7l8y().f[678]++;cov_2dj4df7l8y().s[2378]++;(cov_2dj4df7l8y().b[982][0]++,e.ctx!==null)&&(cov_2dj4df7l8y().b[982][1]++,t(xl(o,e)));},e));cov_2dj4df7l8y().s[2379]++;return ml(s,i,n),n;}cov_2dj4df7l8y().s[2380]++;var fs=class extends oi{acquireContext(i,t){cov_2dj4df7l8y().f[679]++;let s=(cov_2dj4df7l8y().s[2381]++,(cov_2dj4df7l8y().b[983][0]++,i)&&(cov_2dj4df7l8y().b[983][1]++,i.getContext)&&(cov_2dj4df7l8y().b[983][2]++,i.getContext("2d")));cov_2dj4df7l8y().s[2382]++;return(cov_2dj4df7l8y().b[985][0]++,s)&&(cov_2dj4df7l8y().b[985][1]++,s.canvas===i)?(cov_2dj4df7l8y().b[984][0]++,pl(i,t),s):(cov_2dj4df7l8y().b[984][1]++,null);}releaseContext(i){cov_2dj4df7l8y().f[680]++;let t=(cov_2dj4df7l8y().s[2383]++,i.canvas);cov_2dj4df7l8y().s[2384]++;if(!t[ii]){cov_2dj4df7l8y().b[986][0]++;cov_2dj4df7l8y().s[2385]++;return!1;}else{cov_2dj4df7l8y().b[986][1]++;}let s=(cov_2dj4df7l8y().s[2386]++,t[ii].initial);cov_2dj4df7l8y().s[2387]++;["height","width"].forEach(o=>{cov_2dj4df7l8y().f[681]++;let r=(cov_2dj4df7l8y().s[2388]++,s[o]);cov_2dj4df7l8y().s[2389]++;O(r)?(cov_2dj4df7l8y().b[987][0]++,t.removeAttribute(o)):(cov_2dj4df7l8y().b[987][1]++,t.setAttribute(o,r));});let n=(cov_2dj4df7l8y().s[2390]++,(cov_2dj4df7l8y().b[988][0]++,s.style)||(cov_2dj4df7l8y().b[988][1]++,{}));cov_2dj4df7l8y().s[2391]++;return Object.keys(n).forEach(o=>{cov_2dj4df7l8y().f[682]++;cov_2dj4df7l8y().s[2392]++;t.style[o]=n[o];}),t.width=t.width,delete t[ii],!0;}addEventListener(i,t,s){cov_2dj4df7l8y().f[683]++;cov_2dj4df7l8y().s[2393]++;this.removeEventListener(i,t);let n=(cov_2dj4df7l8y().s[2394]++,(cov_2dj4df7l8y().b[989][0]++,i.$proxies)||(cov_2dj4df7l8y().b[989][1]++,i.$proxies={})),r=(cov_2dj4df7l8y().s[2395]++,(cov_2dj4df7l8y().b[990][0]++,{attach:_l,detach:yl,resize:kl}[t])||(cov_2dj4df7l8y().b[990][1]++,Sl));cov_2dj4df7l8y().s[2396]++;n[t]=r(i,t,s);}removeEventListener(i,t){cov_2dj4df7l8y().f[684]++;let s=(cov_2dj4df7l8y().s[2397]++,(cov_2dj4df7l8y().b[991][0]++,i.$proxies)||(cov_2dj4df7l8y().b[991][1]++,i.$proxies={})),n=(cov_2dj4df7l8y().s[2398]++,s[t]);cov_2dj4df7l8y().s[2399]++;if(!n){cov_2dj4df7l8y().b[992][0]++;cov_2dj4df7l8y().s[2400]++;return;}else{cov_2dj4df7l8y().b[992][1]++;}cov_2dj4df7l8y().s[2401]++;((cov_2dj4df7l8y().b[993][0]++,{attach:ss,detach:ss,resize:ss}[t])||(cov_2dj4df7l8y().b[993][1]++,bl))(i,t,n),s[t]=void 0;}getDevicePixelRatio(){cov_2dj4df7l8y().f[685]++;cov_2dj4df7l8y().s[2402]++;return window.devicePixelRatio;}getMaximumSize(i,t,s,n){cov_2dj4df7l8y().f[686]++;cov_2dj4df7l8y().s[2403]++;return Dn(i,t,s,n);}isAttached(i){cov_2dj4df7l8y().f[687]++;let t=(cov_2dj4df7l8y().s[2404]++,(cov_2dj4df7l8y().b[994][0]++,i)&&(cov_2dj4df7l8y().b[994][1]++,Ke(i)));cov_2dj4df7l8y().s[2405]++;return!!((cov_2dj4df7l8y().b[995][0]++,t)&&(cov_2dj4df7l8y().b[995][1]++,t.isConnected));}};function wl(e){cov_2dj4df7l8y().f[688]++;cov_2dj4df7l8y().s[2406]++;return(cov_2dj4df7l8y().b[997][0]++,!Xe())||(cov_2dj4df7l8y().b[997][1]++,typeof OffscreenCanvas<"u")&&(cov_2dj4df7l8y().b[997][2]++,e instanceof OffscreenCanvas)?(cov_2dj4df7l8y().b[996][0]++,ds):(cov_2dj4df7l8y().b[996][1]++,fs);}cov_2dj4df7l8y().s[2407]++;var ot=class{static defaults=(cov_2dj4df7l8y().s[2408]++,{});static defaultRoutes=(cov_2dj4df7l8y().s[2409]++,void 0);x;y;active=(cov_2dj4df7l8y().s[2410]++,!1);options;$animations;tooltipPosition(i){cov_2dj4df7l8y().f[689]++;let{x:t,y:s}=(cov_2dj4df7l8y().s[2411]++,this.getProps(["x","y"],i));cov_2dj4df7l8y().s[2412]++;return{x:t,y:s};}hasValue(){cov_2dj4df7l8y().f[690]++;cov_2dj4df7l8y().s[2413]++;return(cov_2dj4df7l8y().b[998][0]++,It(this.x))&&(cov_2dj4df7l8y().b[998][1]++,It(this.y));}getProps(i,t){cov_2dj4df7l8y().f[691]++;let s=(cov_2dj4df7l8y().s[2414]++,this.$animations);cov_2dj4df7l8y().s[2415]++;if((cov_2dj4df7l8y().b[1000][0]++,!t)||(cov_2dj4df7l8y().b[1000][1]++,!s)){cov_2dj4df7l8y().b[999][0]++;cov_2dj4df7l8y().s[2416]++;return this;}else{cov_2dj4df7l8y().b[999][1]++;}let n=(cov_2dj4df7l8y().s[2417]++,{});cov_2dj4df7l8y().s[2418]++;return i.forEach(o=>{cov_2dj4df7l8y().f[692]++;cov_2dj4df7l8y().s[2419]++;n[o]=(cov_2dj4df7l8y().b[1002][0]++,s[o])&&(cov_2dj4df7l8y().b[1002][1]++,s[o].active())?(cov_2dj4df7l8y().b[1001][0]++,s[o]._to):(cov_2dj4df7l8y().b[1001][1]++,this[o]);}),n;}};function Cl(e,i){cov_2dj4df7l8y().f[693]++;let t=(cov_2dj4df7l8y().s[2420]++,e.options.ticks),s=(cov_2dj4df7l8y().s[2421]++,Pl(e)),n=(cov_2dj4df7l8y().s[2422]++,Math.min((cov_2dj4df7l8y().b[1003][0]++,t.maxTicksLimit)||(cov_2dj4df7l8y().b[1003][1]++,s),s)),o=(cov_2dj4df7l8y().s[2423]++,t.major.enabled?(cov_2dj4df7l8y().b[1004][0]++,Ol(i)):(cov_2dj4df7l8y().b[1004][1]++,[])),r=(cov_2dj4df7l8y().s[2424]++,o.length),a=(cov_2dj4df7l8y().s[2425]++,o[0]),l=(cov_2dj4df7l8y().s[2426]++,o[r-1]),c=(cov_2dj4df7l8y().s[2427]++,[]);cov_2dj4df7l8y().s[2428]++;if(r>n){cov_2dj4df7l8y().b[1005][0]++;cov_2dj4df7l8y().s[2429]++;return Al(i,c,o,r/n),c;}else{cov_2dj4df7l8y().b[1005][1]++;}let h=(cov_2dj4df7l8y().s[2430]++,Dl(o,i,n));cov_2dj4df7l8y().s[2431]++;if(r>0){cov_2dj4df7l8y().b[1006][0]++;let d,f,u=(cov_2dj4df7l8y().s[2432]++,r>1?(cov_2dj4df7l8y().b[1007][0]++,Math.round((l-a)/(r-1))):(cov_2dj4df7l8y().b[1007][1]++,null));cov_2dj4df7l8y().s[2433]++;for(Je(i,c,h,O(u)?(cov_2dj4df7l8y().b[1008][0]++,0):(cov_2dj4df7l8y().b[1008][1]++,a-u),a),d=0,f=r-1;dn){cov_2dj4df7l8y().b[1012][0]++;cov_2dj4df7l8y().s[2452]++;return l;}else{cov_2dj4df7l8y().b[1012][1]++;}}cov_2dj4df7l8y().s[2453]++;return Math.max(n,1);}function Ol(e){cov_2dj4df7l8y().f[696]++;let i=(cov_2dj4df7l8y().s[2454]++,[]),t,s;cov_2dj4df7l8y().s[2455]++;for(t=0,s=e.length;t{cov_2dj4df7l8y().f[700]++;cov_2dj4df7l8y().s[2477]++;return e==="left"?(cov_2dj4df7l8y().b[1019][0]++,"right"):(cov_2dj4df7l8y().b[1019][1]++,e==="right"?(cov_2dj4df7l8y().b[1020][0]++,"left"):(cov_2dj4df7l8y().b[1020][1]++,e));},qn=(e,i,t)=>{cov_2dj4df7l8y().f[701]++;cov_2dj4df7l8y().s[2479]++;return(cov_2dj4df7l8y().b[1022][0]++,i==="top")||(cov_2dj4df7l8y().b[1022][1]++,i==="left")?(cov_2dj4df7l8y().b[1021][0]++,e[i]+t):(cov_2dj4df7l8y().b[1021][1]++,e[i]-t);},Gn=(e,i)=>{cov_2dj4df7l8y().f[702]++;cov_2dj4df7l8y().s[2481]++;return Math.min((cov_2dj4df7l8y().b[1023][0]++,i)||(cov_2dj4df7l8y().b[1023][1]++,e),e);};function Jn(e,i){cov_2dj4df7l8y().f[703]++;let t=(cov_2dj4df7l8y().s[2482]++,[]),s=(cov_2dj4df7l8y().s[2483]++,e.length/i),n=(cov_2dj4df7l8y().s[2484]++,e.length),o=(cov_2dj4df7l8y().s[2485]++,0);cov_2dj4df7l8y().s[2486]++;for(;or+a)))){cov_2dj4df7l8y().b[1024][0]++;cov_2dj4df7l8y().s[2496]++;return l;}else{cov_2dj4df7l8y().b[1024][1]++;}}function El(e,i){cov_2dj4df7l8y().f[705]++;cov_2dj4df7l8y().s[2497]++;R(e,t=>{cov_2dj4df7l8y().f[706]++;let s=(cov_2dj4df7l8y().s[2498]++,t.gc),n=(cov_2dj4df7l8y().s[2499]++,s.length/2),o;cov_2dj4df7l8y().s[2500]++;if(n>i){cov_2dj4df7l8y().b[1030][0]++;cov_2dj4df7l8y().s[2501]++;for(o=0;os)?(cov_2dj4df7l8y().b[1045][0]++,s):(cov_2dj4df7l8y().b[1045][1]++,t),s=(cov_2dj4df7l8y().b[1048][0]++,n)&&(cov_2dj4df7l8y().b[1048][1]++,t>s)?(cov_2dj4df7l8y().b[1047][0]++,t):(cov_2dj4df7l8y().b[1047][1]++,s),{min:J(t,J(s,t)),max:J(s,J(t,s))};}getPadding(){cov_2dj4df7l8y().f[718]++;cov_2dj4df7l8y().s[2548]++;return{left:(cov_2dj4df7l8y().b[1049][0]++,this.paddingLeft)||(cov_2dj4df7l8y().b[1049][1]++,0),top:(cov_2dj4df7l8y().b[1050][0]++,this.paddingTop)||(cov_2dj4df7l8y().b[1050][1]++,0),right:(cov_2dj4df7l8y().b[1051][0]++,this.paddingRight)||(cov_2dj4df7l8y().b[1051][1]++,0),bottom:(cov_2dj4df7l8y().b[1052][0]++,this.paddingBottom)||(cov_2dj4df7l8y().b[1052][1]++,0)};}getTicks(){cov_2dj4df7l8y().f[719]++;cov_2dj4df7l8y().s[2549]++;return this.ticks;}getLabels(){cov_2dj4df7l8y().f[720]++;let i=(cov_2dj4df7l8y().s[2550]++,this.chart.data);cov_2dj4df7l8y().s[2551]++;return(cov_2dj4df7l8y().b[1053][0]++,this.options.labels)||(cov_2dj4df7l8y().b[1053][1]++,this.isHorizontal()?(cov_2dj4df7l8y().b[1054][0]++,i.xLabels):(cov_2dj4df7l8y().b[1054][1]++,i.yLabels))||(cov_2dj4df7l8y().b[1053][2]++,i.labels)||(cov_2dj4df7l8y().b[1053][3]++,[]);}getLabelItems(i=(cov_2dj4df7l8y().b[1055][0]++,this.chart.chartArea)){cov_2dj4df7l8y().f[721]++;cov_2dj4df7l8y().s[2552]++;return(cov_2dj4df7l8y().b[1056][0]++,this._labelItems)||(cov_2dj4df7l8y().b[1056][1]++,this._labelItems=this._computeLabelItems(i));}beforeLayout(){cov_2dj4df7l8y().f[722]++;cov_2dj4df7l8y().s[2553]++;this._cache={},this._dataLimitsCached=!1;}beforeUpdate(){cov_2dj4df7l8y().f[723]++;cov_2dj4df7l8y().s[2554]++;I(this.options.beforeUpdate,[this]);}update(i,t,s){cov_2dj4df7l8y().f[724]++;let{beginAtZero:n,grace:o,ticks:r}=(cov_2dj4df7l8y().s[2555]++,this.options),a=(cov_2dj4df7l8y().s[2556]++,r.sampleSize);cov_2dj4df7l8y().s[2557]++;this.beforeUpdate(),this.maxWidth=i,this.maxHeight=t,this._margins=s=Object.assign({left:0,right:0,top:0,bottom:0},s),this.ticks=null,this._labelSizes=null,this._gridLineItems=null,this._labelItems=null,this.beforeSetDimensions(),this.setDimensions(),this.afterSetDimensions(),this._maxLength=this.isHorizontal()?(cov_2dj4df7l8y().b[1057][0]++,this.width+s.left+s.right):(cov_2dj4df7l8y().b[1057][1]++,this.height+s.top+s.bottom),(cov_2dj4df7l8y().b[1058][0]++,this._dataLimitsCached)||(cov_2dj4df7l8y().b[1058][1]++,this.beforeDataLimits(),this.determineDataLimits(),this.afterDataLimits(),this._range=Mn(this,o,n),this._dataLimitsCached=!0),this.beforeBuildTicks(),this.ticks=(cov_2dj4df7l8y().b[1059][0]++,this.buildTicks())||(cov_2dj4df7l8y().b[1059][1]++,[]),this.afterBuildTicks();let l=(cov_2dj4df7l8y().s[2558]++,a=o)||(cov_2dj4df7l8y().b[1067][3]++,s<=1)||(cov_2dj4df7l8y().b[1067][4]++,!this.isHorizontal())){cov_2dj4df7l8y().b[1066][0]++;cov_2dj4df7l8y().s[2585]++;this.labelRotation=n;cov_2dj4df7l8y().s[2586]++;return;}else{cov_2dj4df7l8y().b[1066][1]++;}let h=(cov_2dj4df7l8y().s[2587]++,this._getLabelSizes()),d=(cov_2dj4df7l8y().s[2588]++,h.widest.width),f=(cov_2dj4df7l8y().s[2589]++,h.highest.height),u=(cov_2dj4df7l8y().s[2590]++,Y(this.chart.width-d,0,this.maxWidth));cov_2dj4df7l8y().s[2591]++;a=i.offset?(cov_2dj4df7l8y().b[1068][0]++,this.maxWidth/s):(cov_2dj4df7l8y().b[1068][1]++,u/(s-1)),(cov_2dj4df7l8y().b[1069][0]++,d+6>a)&&(cov_2dj4df7l8y().b[1069][1]++,a=u/(s-(i.offset?(cov_2dj4df7l8y().b[1070][0]++,.5):(cov_2dj4df7l8y().b[1070][1]++,1))),l=this.maxHeight-xe(i.grid)-t.padding-Zn(i.title,this.chart.options.font),c=Math.sqrt(d*d+f*f),r=Ne(Math.min(Math.asin(Y((h.highest.height+6)/a,-1,1)),Math.asin(Y(l/c,-1,1))-Math.asin(Y(f/c,-1,1)))),r=Math.max(n,Math.min(o,r))),this.labelRotation=r;}afterCalculateLabelRotation(){cov_2dj4df7l8y().f[742]++;cov_2dj4df7l8y().s[2592]++;I(this.options.afterCalculateLabelRotation,[this]);}afterAutoSkip(){cov_2dj4df7l8y().f[743]++;}beforeFit(){cov_2dj4df7l8y().f[744]++;cov_2dj4df7l8y().s[2593]++;I(this.options.beforeFit,[this]);}fit(){cov_2dj4df7l8y().f[745]++;let i=(cov_2dj4df7l8y().s[2594]++,{width:0,height:0}),{chart:t,options:{ticks:s,title:n,grid:o}}=(cov_2dj4df7l8y().s[2595]++,this),r=(cov_2dj4df7l8y().s[2596]++,this._isVisible()),a=(cov_2dj4df7l8y().s[2597]++,this.isHorizontal());cov_2dj4df7l8y().s[2598]++;if(r){cov_2dj4df7l8y().b[1071][0]++;let l=(cov_2dj4df7l8y().s[2599]++,Zn(n,t.options.font));cov_2dj4df7l8y().s[2600]++;if(a?(cov_2dj4df7l8y().b[1073][0]++,i.width=this.maxWidth,i.height=xe(o)+l):(cov_2dj4df7l8y().b[1073][1]++,i.height=this.maxHeight,i.width=xe(o)+l),(cov_2dj4df7l8y().b[1074][0]++,s.display)&&(cov_2dj4df7l8y().b[1074][1]++,this.ticks.length)){cov_2dj4df7l8y().b[1072][0]++;let{first:c,last:h,widest:d,highest:f}=(cov_2dj4df7l8y().s[2601]++,this._getLabelSizes()),u=(cov_2dj4df7l8y().s[2602]++,s.padding*2),p=(cov_2dj4df7l8y().s[2603]++,it(this.labelRotation)),g=(cov_2dj4df7l8y().s[2604]++,Math.cos(p)),m=(cov_2dj4df7l8y().s[2605]++,Math.sin(p));cov_2dj4df7l8y().s[2606]++;if(a){cov_2dj4df7l8y().b[1075][0]++;let b=(cov_2dj4df7l8y().s[2607]++,s.mirror?(cov_2dj4df7l8y().b[1076][0]++,0):(cov_2dj4df7l8y().b[1076][1]++,m*d.width+g*f.height));cov_2dj4df7l8y().s[2608]++;i.height=Math.min(this.maxHeight,i.height+b+u);}else{cov_2dj4df7l8y().b[1075][1]++;let b=(cov_2dj4df7l8y().s[2609]++,s.mirror?(cov_2dj4df7l8y().b[1077][0]++,0):(cov_2dj4df7l8y().b[1077][1]++,g*d.width+m*f.height));cov_2dj4df7l8y().s[2610]++;i.width=Math.min(this.maxWidth,i.width+b+u);}cov_2dj4df7l8y().s[2611]++;this._calculatePadding(c,h,m,g);}else{cov_2dj4df7l8y().b[1072][1]++;}}else{cov_2dj4df7l8y().b[1071][1]++;}cov_2dj4df7l8y().s[2612]++;this._handleMargins(),a?(cov_2dj4df7l8y().b[1078][0]++,this.width=this._length=t.width-this._margins.left-this._margins.right,this.height=i.height):(cov_2dj4df7l8y().b[1078][1]++,this.width=i.width,this.height=this._length=t.height-this._margins.top-this._margins.bottom);}_calculatePadding(i,t,s,n){cov_2dj4df7l8y().f[746]++;let{ticks:{align:o,padding:r},position:a}=(cov_2dj4df7l8y().s[2613]++,this.options),l=(cov_2dj4df7l8y().s[2614]++,this.labelRotation!==0),c=(cov_2dj4df7l8y().s[2615]++,(cov_2dj4df7l8y().b[1079][0]++,a!=="top")&&(cov_2dj4df7l8y().b[1079][1]++,this.axis==="x"));cov_2dj4df7l8y().s[2616]++;if(this.isHorizontal()){cov_2dj4df7l8y().b[1080][0]++;let h=(cov_2dj4df7l8y().s[2617]++,this.getPixelForTick(0)-this.left),d=(cov_2dj4df7l8y().s[2618]++,this.right-this.getPixelForTick(this.ticks.length-1)),f=(cov_2dj4df7l8y().s[2619]++,0),u=(cov_2dj4df7l8y().s[2620]++,0);cov_2dj4df7l8y().s[2621]++;l?(cov_2dj4df7l8y().b[1081][0]++,c?(cov_2dj4df7l8y().b[1082][0]++,f=n*i.width,u=s*t.height):(cov_2dj4df7l8y().b[1082][1]++,f=s*i.height,u=n*t.width)):(cov_2dj4df7l8y().b[1081][1]++,o==="start"?(cov_2dj4df7l8y().b[1083][0]++,u=t.width):(cov_2dj4df7l8y().b[1083][1]++,o==="end"?(cov_2dj4df7l8y().b[1084][0]++,f=i.width):(cov_2dj4df7l8y().b[1084][1]++,(cov_2dj4df7l8y().b[1085][0]++,o!=="inner")&&(cov_2dj4df7l8y().b[1085][1]++,f=i.width/2,u=t.width/2)))),this.paddingLeft=Math.max((f-h+r)*this.width/(this.width-h),0),this.paddingRight=Math.max((u-d+r)*this.width/(this.width-d),0);}else{cov_2dj4df7l8y().b[1080][1]++;let h=(cov_2dj4df7l8y().s[2622]++,t.height/2),d=(cov_2dj4df7l8y().s[2623]++,i.height/2);cov_2dj4df7l8y().s[2624]++;o==="start"?(cov_2dj4df7l8y().b[1086][0]++,h=0,d=i.height):(cov_2dj4df7l8y().b[1086][1]++,(cov_2dj4df7l8y().b[1087][0]++,o==="end")&&(cov_2dj4df7l8y().b[1087][1]++,h=t.height,d=0)),this.paddingTop=h+r,this.paddingBottom=d+r;}}_handleMargins(){cov_2dj4df7l8y().f[747]++;cov_2dj4df7l8y().s[2625]++;(cov_2dj4df7l8y().b[1088][0]++,this._margins)&&(cov_2dj4df7l8y().b[1088][1]++,this._margins.left=Math.max(this.paddingLeft,this._margins.left),this._margins.top=Math.max(this.paddingTop,this._margins.top),this._margins.right=Math.max(this.paddingRight,this._margins.right),this._margins.bottom=Math.max(this.paddingBottom,this._margins.bottom));}afterFit(){cov_2dj4df7l8y().f[748]++;cov_2dj4df7l8y().s[2626]++;I(this.options.afterFit,[this]);}isHorizontal(){cov_2dj4df7l8y().f[749]++;let{axis:i,position:t}=(cov_2dj4df7l8y().s[2627]++,this.options);cov_2dj4df7l8y().s[2628]++;return(cov_2dj4df7l8y().b[1089][0]++,t==="top")||(cov_2dj4df7l8y().b[1089][1]++,t==="bottom")||(cov_2dj4df7l8y().b[1089][2]++,i==="x");}isFullSize(){cov_2dj4df7l8y().f[750]++;cov_2dj4df7l8y().s[2629]++;return this.options.fullSize;}_convertTicksToLabels(i){cov_2dj4df7l8y().f[751]++;cov_2dj4df7l8y().s[2630]++;this.beforeTickToLabelConversion(),this.generateTickLabels(i);let t,s;cov_2dj4df7l8y().s[2631]++;for(t=0,s=i.length;t{cov_2dj4df7l8y().f[754]++;cov_2dj4df7l8y().s[2657]++;return{width:(cov_2dj4df7l8y().b[1098][0]++,r[w])||(cov_2dj4df7l8y().b[1098][1]++,0),height:(cov_2dj4df7l8y().b[1099][0]++,a[w])||(cov_2dj4df7l8y().b[1099][1]++,0)};};cov_2dj4df7l8y().s[2658]++;return{first:k(0),last:k(t-1),widest:k(v),highest:k(S),widths:r,heights:a};}getLabelForValue(i){cov_2dj4df7l8y().f[755]++;cov_2dj4df7l8y().s[2659]++;return i;}getPixelForValue(i,t){cov_2dj4df7l8y().f[756]++;cov_2dj4df7l8y().s[2660]++;return NaN;}getValueForPixel(i){cov_2dj4df7l8y().f[757]++;}getPixelForTick(i){cov_2dj4df7l8y().f[758]++;let t=(cov_2dj4df7l8y().s[2661]++,this.ticks);cov_2dj4df7l8y().s[2662]++;return(cov_2dj4df7l8y().b[1101][0]++,i<0)||(cov_2dj4df7l8y().b[1101][1]++,i>t.length-1)?(cov_2dj4df7l8y().b[1100][0]++,null):(cov_2dj4df7l8y().b[1100][1]++,this.getPixelForValue(t[i].value));}getPixelForDecimal(i){cov_2dj4df7l8y().f[759]++;cov_2dj4df7l8y().s[2663]++;(cov_2dj4df7l8y().b[1102][0]++,this._reversePixels)&&(cov_2dj4df7l8y().b[1102][1]++,i=1-i);let t=(cov_2dj4df7l8y().s[2664]++,this._startPixel+i*this._length);cov_2dj4df7l8y().s[2665]++;return dn(this._alignToPixels?(cov_2dj4df7l8y().b[1103][0]++,St(this.chart,t,0)):(cov_2dj4df7l8y().b[1103][1]++,t));}getDecimalForPixel(i){cov_2dj4df7l8y().f[760]++;let t=(cov_2dj4df7l8y().s[2666]++,(i-this._startPixel)/this._length);cov_2dj4df7l8y().s[2667]++;return this._reversePixels?(cov_2dj4df7l8y().b[1104][0]++,1-t):(cov_2dj4df7l8y().b[1104][1]++,t);}getBasePixel(){cov_2dj4df7l8y().f[761]++;cov_2dj4df7l8y().s[2668]++;return this.getPixelForValue(this.getBaseValue());}getBaseValue(){cov_2dj4df7l8y().f[762]++;let{min:i,max:t}=(cov_2dj4df7l8y().s[2669]++,this);cov_2dj4df7l8y().s[2670]++;return(cov_2dj4df7l8y().b[1106][0]++,i<0)&&(cov_2dj4df7l8y().b[1106][1]++,t<0)?(cov_2dj4df7l8y().b[1105][0]++,t):(cov_2dj4df7l8y().b[1105][1]++,(cov_2dj4df7l8y().b[1108][0]++,i>0)&&(cov_2dj4df7l8y().b[1108][1]++,t>0)?(cov_2dj4df7l8y().b[1107][0]++,i):(cov_2dj4df7l8y().b[1107][1]++,0));}getContext(i){cov_2dj4df7l8y().f[763]++;let t=(cov_2dj4df7l8y().s[2671]++,(cov_2dj4df7l8y().b[1109][0]++,this.ticks)||(cov_2dj4df7l8y().b[1109][1]++,[]));cov_2dj4df7l8y().s[2672]++;if((cov_2dj4df7l8y().b[1111][0]++,i>=0)&&(cov_2dj4df7l8y().b[1111][1]++,ia*n?(cov_2dj4df7l8y().b[1118][0]++,a/s):(cov_2dj4df7l8y().b[1118][1]++,l/n)):(cov_2dj4df7l8y().b[1117][1]++,l*n0);}_computeGridLineItems(i){cov_2dj4df7l8y().f[766]++;cov_2dj4df7l8y().s[2699]++;let t=(cov_2dj4df7l8y().s[2687]++,this.axis),s=(cov_2dj4df7l8y().s[2688]++,this.chart),n=(cov_2dj4df7l8y().s[2689]++,this.options),{grid:o,position:r,border:a}=(cov_2dj4df7l8y().s[2690]++,n),l=(cov_2dj4df7l8y().s[2691]++,o.offset),c=(cov_2dj4df7l8y().s[2692]++,this.isHorizontal()),d=(cov_2dj4df7l8y().s[2693]++,this.ticks.length+(l?(cov_2dj4df7l8y().b[1121][0]++,1):(cov_2dj4df7l8y().b[1121][1]++,0))),f=(cov_2dj4df7l8y().s[2694]++,xe(o)),u=(cov_2dj4df7l8y().s[2695]++,[]),p=(cov_2dj4df7l8y().s[2696]++,a.setContext(this.getContext())),g=(cov_2dj4df7l8y().s[2697]++,p.display?(cov_2dj4df7l8y().b[1122][0]++,p.width):(cov_2dj4df7l8y().b[1122][1]++,0)),m=(cov_2dj4df7l8y().s[2698]++,g/2),b=function(W){cov_2dj4df7l8y().f[767]++;cov_2dj4df7l8y().s[2700]++;return St(s,W,g);},x,y,M,_,v,S,k,w,D,P,T,$;cov_2dj4df7l8y().s[2701]++;if(r==="top"){cov_2dj4df7l8y().b[1123][0]++;cov_2dj4df7l8y().s[2702]++;x=b(this.bottom),S=this.bottom-f,w=x-m,P=b(i.top)+m,$=i.bottom;}else{cov_2dj4df7l8y().b[1123][1]++;cov_2dj4df7l8y().s[2703]++;if(r==="bottom"){cov_2dj4df7l8y().b[1124][0]++;cov_2dj4df7l8y().s[2704]++;x=b(this.top),P=i.top,$=b(i.bottom)-m,S=x+m,w=this.top+f;}else{cov_2dj4df7l8y().b[1124][1]++;cov_2dj4df7l8y().s[2705]++;if(r==="left"){cov_2dj4df7l8y().b[1125][0]++;cov_2dj4df7l8y().s[2706]++;x=b(this.right),v=this.right-f,k=x-m,D=b(i.left)+m,T=i.right;}else{cov_2dj4df7l8y().b[1125][1]++;cov_2dj4df7l8y().s[2707]++;if(r==="right"){cov_2dj4df7l8y().b[1126][0]++;cov_2dj4df7l8y().s[2708]++;x=b(this.left),D=i.left,T=b(i.right)-m,v=x+m,k=this.left+f;}else{cov_2dj4df7l8y().b[1126][1]++;cov_2dj4df7l8y().s[2709]++;if(t==="x"){cov_2dj4df7l8y().b[1127][0]++;cov_2dj4df7l8y().s[2710]++;if(r==="center"){cov_2dj4df7l8y().b[1128][0]++;cov_2dj4df7l8y().s[2711]++;x=b((i.top+i.bottom)/2+.5);}else{cov_2dj4df7l8y().b[1128][1]++;cov_2dj4df7l8y().s[2712]++;if(A(r)){cov_2dj4df7l8y().b[1129][0]++;let W=(cov_2dj4df7l8y().s[2713]++,Object.keys(r)[0]),H=(cov_2dj4df7l8y().s[2714]++,r[W]);cov_2dj4df7l8y().s[2715]++;x=b(this.chart.scales[W].getPixelForValue(H));}else{cov_2dj4df7l8y().b[1129][1]++;}}cov_2dj4df7l8y().s[2716]++;P=i.top,$=i.bottom,S=x+m,w=S+f;}else{cov_2dj4df7l8y().b[1127][1]++;cov_2dj4df7l8y().s[2717]++;if(t==="y"){cov_2dj4df7l8y().b[1130][0]++;cov_2dj4df7l8y().s[2718]++;if(r==="center"){cov_2dj4df7l8y().b[1131][0]++;cov_2dj4df7l8y().s[2719]++;x=b((i.left+i.right)/2);}else{cov_2dj4df7l8y().b[1131][1]++;cov_2dj4df7l8y().s[2720]++;if(A(r)){cov_2dj4df7l8y().b[1132][0]++;let W=(cov_2dj4df7l8y().s[2721]++,Object.keys(r)[0]),H=(cov_2dj4df7l8y().s[2722]++,r[W]);cov_2dj4df7l8y().s[2723]++;x=b(this.chart.scales[W].getPixelForValue(H));}else{cov_2dj4df7l8y().b[1132][1]++;}}cov_2dj4df7l8y().s[2724]++;v=x-m,k=v-f,D=i.left,T=i.right;}else{cov_2dj4df7l8y().b[1130][1]++;}}}}}}let tt=(cov_2dj4df7l8y().s[2725]++,C(n.ticks.maxTicksLimit,d)),E=(cov_2dj4df7l8y().s[2726]++,Math.max(1,Math.ceil(d/tt)));cov_2dj4df7l8y().s[2727]++;for(y=0;y0)&&(cov_2dj4df7l8y().b[1171][1]++,Tt-=At/2));cov_2dj4df7l8y().s[2808]++;break;}cov_2dj4df7l8y().s[2809]++;Ce={left:Tt,top:oe,width:At+Ht.width,height:ne+Ht.height,color:E.backdropColor};}else{cov_2dj4df7l8y().b[1167][1]++;}cov_2dj4df7l8y().s[2810]++;m.push({label:M,font:w,textOffset:T,options:{rotation:g,color:H,strokeColor:st,strokeWidth:q,textAlign:Vt,textBaseline:$,translation:[_,v],backdrop:Ce}});}cov_2dj4df7l8y().s[2811]++;return m;}_getXAxisLabelAlignment(){cov_2dj4df7l8y().f[769]++;let{position:i,ticks:t}=(cov_2dj4df7l8y().s[2812]++,this.options);cov_2dj4df7l8y().s[2813]++;if(-it(this.labelRotation)){cov_2dj4df7l8y().b[1172][0]++;cov_2dj4df7l8y().s[2814]++;return i==="top"?(cov_2dj4df7l8y().b[1173][0]++,"left"):(cov_2dj4df7l8y().b[1173][1]++,"right");}else{cov_2dj4df7l8y().b[1172][1]++;}let n=(cov_2dj4df7l8y().s[2815]++,"center");cov_2dj4df7l8y().s[2816]++;return t.align==="start"?(cov_2dj4df7l8y().b[1174][0]++,n="left"):(cov_2dj4df7l8y().b[1174][1]++,t.align==="end"?(cov_2dj4df7l8y().b[1175][0]++,n="right"):(cov_2dj4df7l8y().b[1175][1]++,(cov_2dj4df7l8y().b[1176][0]++,t.align==="inner")&&(cov_2dj4df7l8y().b[1176][1]++,n="inner"))),n;}_getYAxisLabelAlignment(i){cov_2dj4df7l8y().f[770]++;let{position:t,ticks:{crossAlign:s,mirror:n,padding:o}}=(cov_2dj4df7l8y().s[2817]++,this.options),r=(cov_2dj4df7l8y().s[2818]++,this._getLabelSizes()),a=(cov_2dj4df7l8y().s[2819]++,i+o),l=(cov_2dj4df7l8y().s[2820]++,r.widest.width),c,h;cov_2dj4df7l8y().s[2821]++;return t==="left"?(cov_2dj4df7l8y().b[1177][0]++,n?(cov_2dj4df7l8y().b[1178][0]++,h=this.right+o,s==="near"?(cov_2dj4df7l8y().b[1179][0]++,c="left"):(cov_2dj4df7l8y().b[1179][1]++,s==="center"?(cov_2dj4df7l8y().b[1180][0]++,c="center",h+=l/2):(cov_2dj4df7l8y().b[1180][1]++,c="right",h+=l))):(cov_2dj4df7l8y().b[1178][1]++,h=this.right-a,s==="near"?(cov_2dj4df7l8y().b[1181][0]++,c="right"):(cov_2dj4df7l8y().b[1181][1]++,s==="center"?(cov_2dj4df7l8y().b[1182][0]++,c="center",h-=l/2):(cov_2dj4df7l8y().b[1182][1]++,c="left",h=this.left)))):(cov_2dj4df7l8y().b[1177][1]++,t==="right"?(cov_2dj4df7l8y().b[1183][0]++,n?(cov_2dj4df7l8y().b[1184][0]++,h=this.left+o,s==="near"?(cov_2dj4df7l8y().b[1185][0]++,c="right"):(cov_2dj4df7l8y().b[1185][1]++,s==="center"?(cov_2dj4df7l8y().b[1186][0]++,c="center",h-=l/2):(cov_2dj4df7l8y().b[1186][1]++,c="left",h-=l))):(cov_2dj4df7l8y().b[1184][1]++,h=this.left+a,s==="near"?(cov_2dj4df7l8y().b[1187][0]++,c="left"):(cov_2dj4df7l8y().b[1187][1]++,s==="center"?(cov_2dj4df7l8y().b[1188][0]++,c="center",h+=l/2):(cov_2dj4df7l8y().b[1188][1]++,c="right",h=this.right)))):(cov_2dj4df7l8y().b[1183][1]++,c="right")),{textAlign:c,x:h};}_computeLabelArea(){cov_2dj4df7l8y().f[771]++;cov_2dj4df7l8y().s[2822]++;if(this.options.ticks.mirror){cov_2dj4df7l8y().b[1189][0]++;cov_2dj4df7l8y().s[2823]++;return;}else{cov_2dj4df7l8y().b[1189][1]++;}let i=(cov_2dj4df7l8y().s[2824]++,this.chart),t=(cov_2dj4df7l8y().s[2825]++,this.options.position);cov_2dj4df7l8y().s[2826]++;if((cov_2dj4df7l8y().b[1191][0]++,t==="left")||(cov_2dj4df7l8y().b[1191][1]++,t==="right")){cov_2dj4df7l8y().b[1190][0]++;cov_2dj4df7l8y().s[2827]++;return{top:0,left:this.left,bottom:i.height,right:this.right};}else{cov_2dj4df7l8y().b[1190][1]++;}cov_2dj4df7l8y().s[2828]++;if((cov_2dj4df7l8y().b[1193][0]++,t==="top")||(cov_2dj4df7l8y().b[1193][1]++,t==="bottom")){cov_2dj4df7l8y().b[1192][0]++;cov_2dj4df7l8y().s[2829]++;return{top:this.top,left:0,bottom:this.bottom,right:i.width};}else{cov_2dj4df7l8y().b[1192][1]++;}}drawBackground(){cov_2dj4df7l8y().f[772]++;let{ctx:i,options:{backgroundColor:t},left:s,top:n,width:o,height:r}=(cov_2dj4df7l8y().s[2830]++,this);cov_2dj4df7l8y().s[2831]++;(cov_2dj4df7l8y().b[1194][0]++,t)&&(cov_2dj4df7l8y().b[1194][1]++,i.save(),i.fillStyle=t,i.fillRect(s,n,o,r),i.restore());}getLineWidthForValue(i){cov_2dj4df7l8y().f[773]++;let t=(cov_2dj4df7l8y().s[2832]++,this.options.grid);cov_2dj4df7l8y().s[2833]++;if((cov_2dj4df7l8y().b[1196][0]++,!this._isVisible())||(cov_2dj4df7l8y().b[1196][1]++,!t.display)){cov_2dj4df7l8y().b[1195][0]++;cov_2dj4df7l8y().s[2834]++;return 0;}else{cov_2dj4df7l8y().b[1195][1]++;}let n=(cov_2dj4df7l8y().s[2835]++,this.ticks.findIndex(o=>{cov_2dj4df7l8y().f[774]++;cov_2dj4df7l8y().s[2836]++;return o.value===i;}));cov_2dj4df7l8y().s[2837]++;return n>=0?(cov_2dj4df7l8y().b[1197][0]++,t.setContext(this.getContext(n)).lineWidth):(cov_2dj4df7l8y().b[1197][1]++,0);}drawGrid(i){cov_2dj4df7l8y().f[775]++;cov_2dj4df7l8y().s[2841]++;let t=(cov_2dj4df7l8y().s[2838]++,this.options.grid),s=(cov_2dj4df7l8y().s[2839]++,this.ctx),n=(cov_2dj4df7l8y().s[2840]++,(cov_2dj4df7l8y().b[1198][0]++,this._gridLineItems)||(cov_2dj4df7l8y().b[1198][1]++,this._gridLineItems=this._computeGridLineItems(i))),o,r,a=(l,c,h)=>{cov_2dj4df7l8y().f[776]++;cov_2dj4df7l8y().s[2842]++;(cov_2dj4df7l8y().b[1199][0]++,!h.width)||(cov_2dj4df7l8y().b[1199][1]++,!h.color)||(cov_2dj4df7l8y().b[1199][2]++,s.save(),s.lineWidth=h.width,s.strokeStyle=h.color,s.setLineDash((cov_2dj4df7l8y().b[1200][0]++,h.borderDash)||(cov_2dj4df7l8y().b[1200][1]++,[])),s.lineDashOffset=h.borderDashOffset,s.beginPath(),s.moveTo(l.x,l.y),s.lineTo(c.x,c.y),s.stroke(),s.restore());};cov_2dj4df7l8y().s[2843]++;if(t.display){cov_2dj4df7l8y().b[1201][0]++;cov_2dj4df7l8y().s[2844]++;for(o=0,r=n.length;o{cov_2dj4df7l8y().f[782]++;cov_2dj4df7l8y().s[2884]++;this.draw(o);}}]):(cov_2dj4df7l8y().b[1218][1]++,[{z:s,draw:o=>{cov_2dj4df7l8y().f[783]++;cov_2dj4df7l8y().s[2885]++;this.drawBackground(),this.drawGrid(o),this.drawTitle();}},{z:n,draw:()=>{cov_2dj4df7l8y().f[784]++;cov_2dj4df7l8y().s[2886]++;this.drawBorder();}},{z:t,draw:o=>{cov_2dj4df7l8y().f[785]++;cov_2dj4df7l8y().s[2887]++;this.drawLabels(o);}}]);}getMatchingVisibleMetas(i){cov_2dj4df7l8y().f[786]++;let t=(cov_2dj4df7l8y().s[2888]++,this.chart.getSortedVisibleDatasetMetas()),s=(cov_2dj4df7l8y().s[2889]++,this.axis+"AxisID"),n=(cov_2dj4df7l8y().s[2890]++,[]),o,r;cov_2dj4df7l8y().s[2891]++;for(o=0,r=t.length;o{cov_2dj4df7l8y().f[796]++;let s=(cov_2dj4df7l8y().s[2918]++,t.split(".")),n=(cov_2dj4df7l8y().s[2919]++,s.pop()),o=(cov_2dj4df7l8y().s[2920]++,[e].concat(s).join(".")),r=(cov_2dj4df7l8y().s[2921]++,i[t].split(".")),a=(cov_2dj4df7l8y().s[2922]++,r.pop()),l=(cov_2dj4df7l8y().s[2923]++,r.join("."));cov_2dj4df7l8y().s[2924]++;F.route(o,n,l,a);});}function Vl(e){cov_2dj4df7l8y().f[797]++;cov_2dj4df7l8y().s[2925]++;return(cov_2dj4df7l8y().b[1232][0]++,"id"in e)&&(cov_2dj4df7l8y().b[1232][1]++,"defaults"in e);}cov_2dj4df7l8y().s[2926]++;cov_2dj4df7l8y().s[2960]++;var us=class{constructor(){cov_2dj4df7l8y().f[798]++;cov_2dj4df7l8y().s[2927]++;this.controllers=new ie(Ot,"datasets",!0),this.elements=new ie(ot,"elements"),this.plugins=new ie(Object,"plugins"),this.scales=new ie(Wt,"scales"),this._typedRegistries=[this.controllers,this.scales,this.elements];}add(...i){cov_2dj4df7l8y().f[799]++;cov_2dj4df7l8y().s[2928]++;this._each("register",i);}remove(...i){cov_2dj4df7l8y().f[800]++;cov_2dj4df7l8y().s[2929]++;this._each("unregister",i);}addControllers(...i){cov_2dj4df7l8y().f[801]++;cov_2dj4df7l8y().s[2930]++;this._each("register",i,this.controllers);}addElements(...i){cov_2dj4df7l8y().f[802]++;cov_2dj4df7l8y().s[2931]++;this._each("register",i,this.elements);}addPlugins(...i){cov_2dj4df7l8y().f[803]++;cov_2dj4df7l8y().s[2932]++;this._each("register",i,this.plugins);}addScales(...i){cov_2dj4df7l8y().f[804]++;cov_2dj4df7l8y().s[2933]++;this._each("register",i,this.scales);}getController(i){cov_2dj4df7l8y().f[805]++;cov_2dj4df7l8y().s[2934]++;return this._get(i,this.controllers,"controller");}getElement(i){cov_2dj4df7l8y().f[806]++;cov_2dj4df7l8y().s[2935]++;return this._get(i,this.elements,"element");}getPlugin(i){cov_2dj4df7l8y().f[807]++;cov_2dj4df7l8y().s[2936]++;return this._get(i,this.plugins,"plugin");}getScale(i){cov_2dj4df7l8y().f[808]++;cov_2dj4df7l8y().s[2937]++;return this._get(i,this.scales,"scale");}removeControllers(...i){cov_2dj4df7l8y().f[809]++;cov_2dj4df7l8y().s[2938]++;this._each("unregister",i,this.controllers);}removeElements(...i){cov_2dj4df7l8y().f[810]++;cov_2dj4df7l8y().s[2939]++;this._each("unregister",i,this.elements);}removePlugins(...i){cov_2dj4df7l8y().f[811]++;cov_2dj4df7l8y().s[2940]++;this._each("unregister",i,this.plugins);}removeScales(...i){cov_2dj4df7l8y().f[812]++;cov_2dj4df7l8y().s[2941]++;this._each("unregister",i,this.scales);}_each(i,t,s){cov_2dj4df7l8y().f[813]++;cov_2dj4df7l8y().s[2942]++;[...t].forEach(n=>{cov_2dj4df7l8y().f[814]++;let o=(cov_2dj4df7l8y().s[2943]++,(cov_2dj4df7l8y().b[1233][0]++,s)||(cov_2dj4df7l8y().b[1233][1]++,this._getRegistryForType(n)));cov_2dj4df7l8y().s[2944]++;(cov_2dj4df7l8y().b[1235][0]++,s)||(cov_2dj4df7l8y().b[1235][1]++,o.isForType(n))||(cov_2dj4df7l8y().b[1235][2]++,o===this.plugins)&&(cov_2dj4df7l8y().b[1235][3]++,n.id)?(cov_2dj4df7l8y().b[1234][0]++,this._exec(i,o,n)):(cov_2dj4df7l8y().b[1234][1]++,R(n,r=>{cov_2dj4df7l8y().f[815]++;let a=(cov_2dj4df7l8y().s[2945]++,(cov_2dj4df7l8y().b[1236][0]++,s)||(cov_2dj4df7l8y().b[1236][1]++,this._getRegistryForType(r)));cov_2dj4df7l8y().s[2946]++;this._exec(i,a,r);}));});}_exec(i,t,s){cov_2dj4df7l8y().f[816]++;let n=(cov_2dj4df7l8y().s[2947]++,We(i));cov_2dj4df7l8y().s[2948]++;I(s["before"+n],[],s),t[i](s),I(s["after"+n],[],s);}_getRegistryForType(i){cov_2dj4df7l8y().f[817]++;cov_2dj4df7l8y().s[2949]++;for(let t=(cov_2dj4df7l8y().s[2950]++,0);t{cov_2dj4df7l8y().f[826]++;cov_2dj4df7l8y().s[2987]++;return o.filter(a=>{cov_2dj4df7l8y().f[827]++;cov_2dj4df7l8y().s[2988]++;return!r.some(l=>{cov_2dj4df7l8y().f[828]++;cov_2dj4df7l8y().s[2989]++;return a.plugin.id===l.plugin.id;});});};cov_2dj4df7l8y().s[2990]++;this._notify(n(t,s),i,"stop"),this._notify(n(s,t),i,"start");}};function Hl(e){cov_2dj4df7l8y().f[829]++;let i=(cov_2dj4df7l8y().s[2991]++,{}),t=(cov_2dj4df7l8y().s[2992]++,[]),s=(cov_2dj4df7l8y().s[2993]++,Object.keys(dt.plugins.items));cov_2dj4df7l8y().s[2994]++;for(let o=(cov_2dj4df7l8y().s[2995]++,0);o1)&&(cov_2dj4df7l8y().b[1275][3]++,Qn(e[0].toLowerCase())));cov_2dj4df7l8y().s[3029]++;if(s){cov_2dj4df7l8y().b[1276][0]++;cov_2dj4df7l8y().s[3030]++;return s;}else{cov_2dj4df7l8y().b[1276][1]++;}}cov_2dj4df7l8y().s[3031]++;throw new Error(`Cannot determine type of '${e}' axis. Please provide 'axis' or 'position' option.`);}function to(e,i,t){cov_2dj4df7l8y().f[839]++;cov_2dj4df7l8y().s[3032]++;if(t[i+"AxisID"]===e){cov_2dj4df7l8y().b[1277][0]++;cov_2dj4df7l8y().s[3033]++;return{axis:i};}else{cov_2dj4df7l8y().b[1277][1]++;}}function ql(e,i){cov_2dj4df7l8y().f[840]++;cov_2dj4df7l8y().s[3034]++;if((cov_2dj4df7l8y().b[1279][0]++,i.data)&&(cov_2dj4df7l8y().b[1279][1]++,i.data.datasets)){cov_2dj4df7l8y().b[1278][0]++;let t=(cov_2dj4df7l8y().s[3035]++,i.data.datasets.filter(s=>{cov_2dj4df7l8y().f[841]++;cov_2dj4df7l8y().s[3036]++;return(cov_2dj4df7l8y().b[1280][0]++,s.xAxisID===e)||(cov_2dj4df7l8y().b[1280][1]++,s.yAxisID===e);}));cov_2dj4df7l8y().s[3037]++;if(t.length){cov_2dj4df7l8y().b[1281][0]++;cov_2dj4df7l8y().s[3038]++;return(cov_2dj4df7l8y().b[1282][0]++,to(e,"x",t[0]))||(cov_2dj4df7l8y().b[1282][1]++,to(e,"y",t[0]));}else{cov_2dj4df7l8y().b[1281][1]++;}}else{cov_2dj4df7l8y().b[1278][1]++;}cov_2dj4df7l8y().s[3039]++;return{};}function Gl(e,i){cov_2dj4df7l8y().f[842]++;let t=(cov_2dj4df7l8y().s[3040]++,(cov_2dj4df7l8y().b[1283][0]++,kt[e.type])||(cov_2dj4df7l8y().b[1283][1]++,{scales:{}})),s=(cov_2dj4df7l8y().s[3041]++,(cov_2dj4df7l8y().b[1284][0]++,i.scales)||(cov_2dj4df7l8y().b[1284][1]++,{})),n=(cov_2dj4df7l8y().s[3042]++,ps(e.type,i)),o=(cov_2dj4df7l8y().s[3043]++,Object.create(null));cov_2dj4df7l8y().s[3044]++;return Object.keys(s).forEach(r=>{cov_2dj4df7l8y().f[843]++;let a=(cov_2dj4df7l8y().s[3045]++,s[r]);cov_2dj4df7l8y().s[3046]++;if(!A(a)){cov_2dj4df7l8y().b[1285][0]++;cov_2dj4df7l8y().s[3047]++;return console.error(`Invalid scale configuration for scale: ${r}`);}else{cov_2dj4df7l8y().b[1285][1]++;}cov_2dj4df7l8y().s[3048]++;if(a._proxy){cov_2dj4df7l8y().b[1286][0]++;cov_2dj4df7l8y().s[3049]++;return console.warn(`Ignoring resolver passed as options for scale: ${r}`);}else{cov_2dj4df7l8y().b[1286][1]++;}let l=(cov_2dj4df7l8y().s[3050]++,ms(r,a,ql(r,e),F.scales[a.type])),c=(cov_2dj4df7l8y().s[3051]++,Xl(l,n)),h=(cov_2dj4df7l8y().s[3052]++,(cov_2dj4df7l8y().b[1287][0]++,t.scales)||(cov_2dj4df7l8y().b[1287][1]++,{}));cov_2dj4df7l8y().s[3053]++;o[r]=Kt(Object.create(null),[{axis:l},a,h[l],h[c]]);}),e.data.datasets.forEach(r=>{cov_2dj4df7l8y().f[844]++;let a=(cov_2dj4df7l8y().s[3054]++,(cov_2dj4df7l8y().b[1288][0]++,r.type)||(cov_2dj4df7l8y().b[1288][1]++,e.type)),l=(cov_2dj4df7l8y().s[3055]++,(cov_2dj4df7l8y().b[1289][0]++,r.indexAxis)||(cov_2dj4df7l8y().b[1289][1]++,ps(a,i))),h=(cov_2dj4df7l8y().s[3056]++,(cov_2dj4df7l8y().b[1290][0]++,((cov_2dj4df7l8y().b[1291][0]++,kt[a])||(cov_2dj4df7l8y().b[1291][1]++,{})).scales)||(cov_2dj4df7l8y().b[1290][1]++,{}));cov_2dj4df7l8y().s[3057]++;Object.keys(h).forEach(d=>{cov_2dj4df7l8y().f[845]++;let f=(cov_2dj4df7l8y().s[3058]++,Ul(d,l)),u=(cov_2dj4df7l8y().s[3059]++,(cov_2dj4df7l8y().b[1292][0]++,r[f+"AxisID"])||(cov_2dj4df7l8y().b[1292][1]++,f));cov_2dj4df7l8y().s[3060]++;o[u]=(cov_2dj4df7l8y().b[1293][0]++,o[u])||(cov_2dj4df7l8y().b[1293][1]++,Object.create(null)),Kt(o[u],[{axis:f},s[u],h[d]]);});}),Object.keys(o).forEach(r=>{cov_2dj4df7l8y().f[846]++;let a=(cov_2dj4df7l8y().s[3061]++,o[r]);cov_2dj4df7l8y().s[3062]++;Kt(a,[F.scales[a.type],F.scale]);}),o;}function Ho(e){cov_2dj4df7l8y().f[847]++;let i=(cov_2dj4df7l8y().s[3063]++,(cov_2dj4df7l8y().b[1294][0]++,e.options)||(cov_2dj4df7l8y().b[1294][1]++,e.options={}));cov_2dj4df7l8y().s[3064]++;i.plugins=C(i.plugins,{}),i.scales=Gl(e,i);}function jo(e){cov_2dj4df7l8y().f[848]++;cov_2dj4df7l8y().s[3065]++;return e=(cov_2dj4df7l8y().b[1295][0]++,e)||(cov_2dj4df7l8y().b[1295][1]++,{}),e.datasets=(cov_2dj4df7l8y().b[1296][0]++,e.datasets)||(cov_2dj4df7l8y().b[1296][1]++,[]),e.labels=(cov_2dj4df7l8y().b[1297][0]++,e.labels)||(cov_2dj4df7l8y().b[1297][1]++,[]),e;}function Jl(e){cov_2dj4df7l8y().f[849]++;cov_2dj4df7l8y().s[3066]++;return e=(cov_2dj4df7l8y().b[1298][0]++,e)||(cov_2dj4df7l8y().b[1298][1]++,{}),e.data=jo(e.data),Ho(e),e;}var eo=(cov_2dj4df7l8y().s[3067]++,new Map()),Yo=(cov_2dj4df7l8y().s[3068]++,new Set());function Ze(e,i){cov_2dj4df7l8y().f[850]++;let t=(cov_2dj4df7l8y().s[3069]++,eo.get(e));cov_2dj4df7l8y().s[3070]++;return(cov_2dj4df7l8y().b[1299][0]++,t)||(cov_2dj4df7l8y().b[1299][1]++,t=i(),eo.set(e,t),Yo.add(t)),t;}cov_2dj4df7l8y().s[3071]++;cov_2dj4df7l8y().s[3074]++;var _e=(e,i,t)=>{cov_2dj4df7l8y().f[851]++;let s=(cov_2dj4df7l8y().s[3072]++,pt(i,t));cov_2dj4df7l8y().s[3073]++;(cov_2dj4df7l8y().b[1300][0]++,s!==void 0)&&(cov_2dj4df7l8y().b[1300][1]++,e.add(s));},bs=class{constructor(i){cov_2dj4df7l8y().f[852]++;cov_2dj4df7l8y().s[3075]++;this._config=Jl(i),this._scopeCache=new Map(),this._resolverCache=new Map();}get platform(){cov_2dj4df7l8y().f[853]++;cov_2dj4df7l8y().s[3076]++;return this._config.platform;}get type(){cov_2dj4df7l8y().f[854]++;cov_2dj4df7l8y().s[3077]++;return this._config.type;}set type(i){cov_2dj4df7l8y().f[855]++;cov_2dj4df7l8y().s[3078]++;this._config.type=i;}get data(){cov_2dj4df7l8y().f[856]++;cov_2dj4df7l8y().s[3079]++;return this._config.data;}set data(i){cov_2dj4df7l8y().f[857]++;cov_2dj4df7l8y().s[3080]++;this._config.data=jo(i);}get options(){cov_2dj4df7l8y().f[858]++;cov_2dj4df7l8y().s[3081]++;return this._config.options;}set options(i){cov_2dj4df7l8y().f[859]++;cov_2dj4df7l8y().s[3082]++;this._config.options=i;}get plugins(){cov_2dj4df7l8y().f[860]++;cov_2dj4df7l8y().s[3083]++;return this._config.plugins;}update(){cov_2dj4df7l8y().f[861]++;let i=(cov_2dj4df7l8y().s[3084]++,this._config);cov_2dj4df7l8y().s[3085]++;this.clearCache(),Ho(i);}clearCache(){cov_2dj4df7l8y().f[862]++;cov_2dj4df7l8y().s[3086]++;this._scopeCache.clear(),this._resolverCache.clear();}datasetScopeKeys(i){cov_2dj4df7l8y().f[863]++;cov_2dj4df7l8y().s[3087]++;return Ze(i,()=>{cov_2dj4df7l8y().f[864]++;cov_2dj4df7l8y().s[3088]++;return[[`datasets.${i}`,""]];});}datasetAnimationScopeKeys(i,t){cov_2dj4df7l8y().f[865]++;cov_2dj4df7l8y().s[3089]++;return Ze(`${i}.transition.${t}`,()=>{cov_2dj4df7l8y().f[866]++;cov_2dj4df7l8y().s[3090]++;return[[`datasets.${i}.transitions.${t}`,`transitions.${t}`],[`datasets.${i}`,""]];});}datasetElementScopeKeys(i,t){cov_2dj4df7l8y().f[867]++;cov_2dj4df7l8y().s[3091]++;return Ze(`${i}-${t}`,()=>{cov_2dj4df7l8y().f[868]++;cov_2dj4df7l8y().s[3092]++;return[[`datasets.${i}.elements.${t}`,`datasets.${i}`,`elements.${t}`,""]];});}pluginScopeKeys(i){cov_2dj4df7l8y().f[869]++;let t=(cov_2dj4df7l8y().s[3093]++,i.id),s=(cov_2dj4df7l8y().s[3094]++,this.type);cov_2dj4df7l8y().s[3095]++;return Ze(`${s}-plugin-${t}`,()=>{cov_2dj4df7l8y().f[870]++;cov_2dj4df7l8y().s[3096]++;return[[`plugins.${t}`,...((cov_2dj4df7l8y().b[1301][0]++,i.additionalOptionScopes)||(cov_2dj4df7l8y().b[1301][1]++,[]))]];});}_cachedScopes(i,t){cov_2dj4df7l8y().f[871]++;let s=(cov_2dj4df7l8y().s[3097]++,this._scopeCache),n=(cov_2dj4df7l8y().s[3098]++,s.get(i));cov_2dj4df7l8y().s[3099]++;return((cov_2dj4df7l8y().b[1302][0]++,!n)||(cov_2dj4df7l8y().b[1302][1]++,t))&&(cov_2dj4df7l8y().b[1302][2]++,n=new Map(),s.set(i,n)),n;}getOptionScopes(i,t,s){cov_2dj4df7l8y().f[872]++;let{options:n,type:o}=(cov_2dj4df7l8y().s[3100]++,this),r=(cov_2dj4df7l8y().s[3101]++,this._cachedScopes(i,s)),a=(cov_2dj4df7l8y().s[3102]++,r.get(t));cov_2dj4df7l8y().s[3103]++;if(a){cov_2dj4df7l8y().b[1303][0]++;cov_2dj4df7l8y().s[3104]++;return a;}else{cov_2dj4df7l8y().b[1303][1]++;}let l=(cov_2dj4df7l8y().s[3105]++,new Set());cov_2dj4df7l8y().s[3106]++;t.forEach(h=>{cov_2dj4df7l8y().f[873]++;cov_2dj4df7l8y().s[3107]++;(cov_2dj4df7l8y().b[1304][0]++,i)&&(cov_2dj4df7l8y().b[1304][1]++,l.add(i),h.forEach(d=>{cov_2dj4df7l8y().f[874]++;cov_2dj4df7l8y().s[3108]++;return _e(l,i,d);})),h.forEach(d=>{cov_2dj4df7l8y().f[875]++;cov_2dj4df7l8y().s[3109]++;return _e(l,n,d);}),h.forEach(d=>{cov_2dj4df7l8y().f[876]++;cov_2dj4df7l8y().s[3110]++;return _e(l,(cov_2dj4df7l8y().b[1305][0]++,kt[o])||(cov_2dj4df7l8y().b[1305][1]++,{}),d);}),h.forEach(d=>{cov_2dj4df7l8y().f[877]++;cov_2dj4df7l8y().s[3111]++;return _e(l,F,d);}),h.forEach(d=>{cov_2dj4df7l8y().f[878]++;cov_2dj4df7l8y().s[3112]++;return _e(l,je,d);});});let c=(cov_2dj4df7l8y().s[3113]++,Array.from(l));cov_2dj4df7l8y().s[3114]++;return(cov_2dj4df7l8y().b[1306][0]++,c.length===0)&&(cov_2dj4df7l8y().b[1306][1]++,c.push(Object.create(null))),(cov_2dj4df7l8y().b[1307][0]++,Yo.has(t))&&(cov_2dj4df7l8y().b[1307][1]++,r.set(t,c)),c;}chartOptionScopes(){cov_2dj4df7l8y().f[879]++;let{options:i,type:t}=(cov_2dj4df7l8y().s[3115]++,this);cov_2dj4df7l8y().s[3116]++;return[i,(cov_2dj4df7l8y().b[1308][0]++,kt[t])||(cov_2dj4df7l8y().b[1308][1]++,{}),(cov_2dj4df7l8y().b[1309][0]++,F.datasets[t])||(cov_2dj4df7l8y().b[1309][1]++,{}),{type:t},F,je];}resolveNamedOptions(i,t,s,n=(cov_2dj4df7l8y().b[1310][0]++,[""])){cov_2dj4df7l8y().f[880]++;let o=(cov_2dj4df7l8y().s[3117]++,{$shared:!0}),{resolver:r,subPrefixes:a}=(cov_2dj4df7l8y().s[3118]++,io(this._resolverCache,i,n)),l=(cov_2dj4df7l8y().s[3119]++,r);cov_2dj4df7l8y().s[3120]++;if(Ql(r,t)){cov_2dj4df7l8y().b[1311][0]++;cov_2dj4df7l8y().s[3121]++;o.$shared=!1,s=ut(s)?(cov_2dj4df7l8y().b[1312][0]++,s()):(cov_2dj4df7l8y().b[1312][1]++,s);let c=(cov_2dj4df7l8y().s[3122]++,this.createResolver(i,s,a));cov_2dj4df7l8y().s[3123]++;l=Et(r,s,c);}else{cov_2dj4df7l8y().b[1311][1]++;}cov_2dj4df7l8y().s[3124]++;for(let c of t){cov_2dj4df7l8y().s[3125]++;o[c]=l[c];}cov_2dj4df7l8y().s[3126]++;return o;}createResolver(i,t,s=(cov_2dj4df7l8y().b[1313][0]++,[""]),n){cov_2dj4df7l8y().f[881]++;let{resolver:o}=(cov_2dj4df7l8y().s[3127]++,io(this._resolverCache,i,s));cov_2dj4df7l8y().s[3128]++;return A(t)?(cov_2dj4df7l8y().b[1314][0]++,Et(o,t,void 0,n)):(cov_2dj4df7l8y().b[1314][1]++,o);}};function io(e,i,t){cov_2dj4df7l8y().f[882]++;let s=(cov_2dj4df7l8y().s[3129]++,e.get(i));cov_2dj4df7l8y().s[3130]++;(cov_2dj4df7l8y().b[1315][0]++,s)||(cov_2dj4df7l8y().b[1315][1]++,s=new Map(),e.set(i,s));let n=(cov_2dj4df7l8y().s[3131]++,t.join()),o=(cov_2dj4df7l8y().s[3132]++,s.get(n));cov_2dj4df7l8y().s[3133]++;return(cov_2dj4df7l8y().b[1316][0]++,o)||(cov_2dj4df7l8y().b[1316][1]++,o={resolver:Ue(i,t),subPrefixes:t.filter(a=>{cov_2dj4df7l8y().f[883]++;cov_2dj4df7l8y().s[3134]++;return!a.toLowerCase().includes("hover");})},s.set(n,o)),o;}cov_2dj4df7l8y().s[3135]++;var Zl=e=>{cov_2dj4df7l8y().f[884]++;cov_2dj4df7l8y().s[3136]++;return(cov_2dj4df7l8y().b[1317][0]++,A(e))&&(cov_2dj4df7l8y().b[1317][1]++,Object.getOwnPropertyNames(e).some(i=>{cov_2dj4df7l8y().f[885]++;cov_2dj4df7l8y().s[3137]++;return ut(e[i]);}));};function Ql(e,i){cov_2dj4df7l8y().f[886]++;let{isScriptable:t,isIndexable:s}=(cov_2dj4df7l8y().s[3138]++,Ni(e));cov_2dj4df7l8y().s[3139]++;for(let n of i){let o=(cov_2dj4df7l8y().s[3140]++,t(n)),r=(cov_2dj4df7l8y().s[3141]++,s(n)),a=(cov_2dj4df7l8y().s[3142]++,((cov_2dj4df7l8y().b[1318][0]++,r)||(cov_2dj4df7l8y().b[1318][1]++,o))&&(cov_2dj4df7l8y().b[1318][2]++,e[n]));cov_2dj4df7l8y().s[3143]++;if((cov_2dj4df7l8y().b[1320][0]++,o)&&((cov_2dj4df7l8y().b[1320][1]++,ut(a))||(cov_2dj4df7l8y().b[1320][2]++,Zl(a)))||(cov_2dj4df7l8y().b[1320][3]++,r)&&(cov_2dj4df7l8y().b[1320][4]++,z(a))){cov_2dj4df7l8y().b[1319][0]++;cov_2dj4df7l8y().s[3144]++;return!0;}else{cov_2dj4df7l8y().b[1319][1]++;}}cov_2dj4df7l8y().s[3145]++;return!1;}var tc=(cov_2dj4df7l8y().s[3146]++,"4.5.1"),ec=(cov_2dj4df7l8y().s[3147]++,["top","bottom","left","right","chartArea"]);function so(e,i){cov_2dj4df7l8y().f[887]++;cov_2dj4df7l8y().s[3148]++;return(cov_2dj4df7l8y().b[1321][0]++,e==="top")||(cov_2dj4df7l8y().b[1321][1]++,e==="bottom")||(cov_2dj4df7l8y().b[1321][2]++,ec.indexOf(e)===-1)&&(cov_2dj4df7l8y().b[1321][3]++,i==="x");}function no(e,i){cov_2dj4df7l8y().f[888]++;cov_2dj4df7l8y().s[3149]++;return function(t,s){cov_2dj4df7l8y().f[889]++;cov_2dj4df7l8y().s[3150]++;return t[e]===s[e]?(cov_2dj4df7l8y().b[1322][0]++,t[i]-s[i]):(cov_2dj4df7l8y().b[1322][1]++,t[e]-s[e]);};}function oo(e){cov_2dj4df7l8y().f[890]++;let i=(cov_2dj4df7l8y().s[3151]++,e.chart),t=(cov_2dj4df7l8y().s[3152]++,i.options.animation);cov_2dj4df7l8y().s[3153]++;i.notifyPlugins("afterRender"),I((cov_2dj4df7l8y().b[1323][0]++,t)&&(cov_2dj4df7l8y().b[1323][1]++,t.onComplete),[e],i);}function ic(e){cov_2dj4df7l8y().f[891]++;let i=(cov_2dj4df7l8y().s[3154]++,e.chart),t=(cov_2dj4df7l8y().s[3155]++,i.options.animation);cov_2dj4df7l8y().s[3156]++;I((cov_2dj4df7l8y().b[1324][0]++,t)&&(cov_2dj4df7l8y().b[1324][1]++,t.onProgress),[e],i);}function $o(e){cov_2dj4df7l8y().f[892]++;cov_2dj4df7l8y().s[3157]++;return(cov_2dj4df7l8y().b[1326][0]++,Xe())&&(cov_2dj4df7l8y().b[1326][1]++,typeof e=="string")?(cov_2dj4df7l8y().b[1325][0]++,e=document.getElementById(e)):(cov_2dj4df7l8y().b[1325][1]++,(cov_2dj4df7l8y().b[1327][0]++,e)&&(cov_2dj4df7l8y().b[1327][1]++,e.length)&&(cov_2dj4df7l8y().b[1327][2]++,e=e[0])),(cov_2dj4df7l8y().b[1328][0]++,e)&&(cov_2dj4df7l8y().b[1328][1]++,e.canvas)&&(cov_2dj4df7l8y().b[1328][2]++,e=e.canvas),e;}cov_2dj4df7l8y().s[3159]++;var si=(cov_2dj4df7l8y().s[3158]++,{}),ro=e=>{cov_2dj4df7l8y().f[893]++;let i=(cov_2dj4df7l8y().s[3160]++,$o(e));cov_2dj4df7l8y().s[3161]++;return Object.values(si).filter(t=>{cov_2dj4df7l8y().f[894]++;cov_2dj4df7l8y().s[3162]++;return t.canvas===i;}).pop();};function sc(e,i,t){cov_2dj4df7l8y().f[895]++;let s=(cov_2dj4df7l8y().s[3163]++,Object.keys(e));cov_2dj4df7l8y().s[3164]++;for(let n of s){let o=(cov_2dj4df7l8y().s[3165]++,+n);cov_2dj4df7l8y().s[3166]++;if(o>=i){cov_2dj4df7l8y().b[1329][0]++;let r=(cov_2dj4df7l8y().s[3167]++,e[n]);cov_2dj4df7l8y().s[3168]++;delete e[n],((cov_2dj4df7l8y().b[1330][0]++,t>0)||(cov_2dj4df7l8y().b[1330][1]++,o>i))&&(cov_2dj4df7l8y().b[1330][2]++,e[o+t]=r);}else{cov_2dj4df7l8y().b[1329][1]++;}}}function nc(e,i,t,s){cov_2dj4df7l8y().f[896]++;cov_2dj4df7l8y().s[3169]++;return(cov_2dj4df7l8y().b[1332][0]++,!t)||(cov_2dj4df7l8y().b[1332][1]++,e.type==="mouseout")?(cov_2dj4df7l8y().b[1331][0]++,null):(cov_2dj4df7l8y().b[1331][1]++,s?(cov_2dj4df7l8y().b[1333][0]++,i):(cov_2dj4df7l8y().b[1333][1]++,e));}var hi=(cov_2dj4df7l8y().s[3170]++,(()=>{cov_2dj4df7l8y().f[897]++;class e{static defaults=(cov_2dj4df7l8y().s[3171]++,F);static instances=(cov_2dj4df7l8y().s[3172]++,si);static overrides=(cov_2dj4df7l8y().s[3173]++,kt);static registry=(cov_2dj4df7l8y().s[3174]++,dt);static version=(cov_2dj4df7l8y().s[3175]++,tc);static getChart=(cov_2dj4df7l8y().s[3176]++,ro);static register(...t){cov_2dj4df7l8y().f[898]++;cov_2dj4df7l8y().s[3177]++;dt.add(...t),ao();}static unregister(...t){cov_2dj4df7l8y().f[899]++;cov_2dj4df7l8y().s[3178]++;dt.remove(...t),ao();}constructor(t,s){cov_2dj4df7l8y().f[900]++;let n=(cov_2dj4df7l8y().s[3179]++,this.config=new bs(s)),o=(cov_2dj4df7l8y().s[3180]++,$o(t)),r=(cov_2dj4df7l8y().s[3181]++,ro(o));cov_2dj4df7l8y().s[3182]++;if(r){cov_2dj4df7l8y().b[1334][0]++;cov_2dj4df7l8y().s[3183]++;throw new Error("Canvas is already in use. Chart with ID '"+r.id+"' must be destroyed before the canvas with ID '"+r.canvas.id+"' can be reused.");}else{cov_2dj4df7l8y().b[1334][1]++;}let a=(cov_2dj4df7l8y().s[3184]++,n.createResolver(n.chartOptionScopes(),this.getContext()));cov_2dj4df7l8y().s[3185]++;this.platform=new((cov_2dj4df7l8y().b[1335][0]++,n.platform)||(cov_2dj4df7l8y().b[1335][1]++,wl(o)))(),this.platform.updateConfig(n);let l=(cov_2dj4df7l8y().s[3186]++,this.platform.acquireContext(o,a.aspectRatio)),c=(cov_2dj4df7l8y().s[3187]++,(cov_2dj4df7l8y().b[1336][0]++,l)&&(cov_2dj4df7l8y().b[1336][1]++,l.canvas)),h=(cov_2dj4df7l8y().s[3188]++,(cov_2dj4df7l8y().b[1337][0]++,c)&&(cov_2dj4df7l8y().b[1337][1]++,c.height)),d=(cov_2dj4df7l8y().s[3189]++,(cov_2dj4df7l8y().b[1338][0]++,c)&&(cov_2dj4df7l8y().b[1338][1]++,c.width));cov_2dj4df7l8y().s[3190]++;if(this.id=on(),this.ctx=l,this.canvas=c,this.width=d,this.height=h,this._options=a,this._aspectRatio=this.aspectRatio,this._layers=[],this._metasets=[],this._stacks=void 0,this.boxes=[],this.currentDevicePixelRatio=void 0,this.chartArea=void 0,this._active=[],this._lastEvent=void 0,this._listeners={},this._responsiveListeners=void 0,this._sortedMetasets=[],this.scales={},this._plugins=new gs(),this.$proxies={},this._hiddenIndices={},this.attached=!1,this._animationsDisabled=void 0,this.$context=void 0,this._doResize=mn(f=>{cov_2dj4df7l8y().f[901]++;cov_2dj4df7l8y().s[3191]++;return this.update(f);},(cov_2dj4df7l8y().b[1340][0]++,a.resizeDelay)||(cov_2dj4df7l8y().b[1340][1]++,0)),this._dataChanges=[],si[this.id]=this,(cov_2dj4df7l8y().b[1341][0]++,!l)||(cov_2dj4df7l8y().b[1341][1]++,!c)){cov_2dj4df7l8y().b[1339][0]++;cov_2dj4df7l8y().s[3192]++;console.error("Failed to create chart: can't acquire context from the given item");cov_2dj4df7l8y().s[3193]++;return;}else{cov_2dj4df7l8y().b[1339][1]++;}cov_2dj4df7l8y().s[3194]++;bt.listen(this,"complete",oo),bt.listen(this,"progress",ic),this._initialize(),(cov_2dj4df7l8y().b[1342][0]++,this.attached)&&(cov_2dj4df7l8y().b[1342][1]++,this.update());}get aspectRatio(){cov_2dj4df7l8y().f[902]++;let{options:{aspectRatio:t,maintainAspectRatio:s},width:n,height:o,_aspectRatio:r}=(cov_2dj4df7l8y().s[3195]++,this);cov_2dj4df7l8y().s[3196]++;return O(t)?(cov_2dj4df7l8y().b[1343][0]++,(cov_2dj4df7l8y().b[1345][0]++,s)&&(cov_2dj4df7l8y().b[1345][1]++,r)?(cov_2dj4df7l8y().b[1344][0]++,r):(cov_2dj4df7l8y().b[1344][1]++,o?(cov_2dj4df7l8y().b[1346][0]++,n/o):(cov_2dj4df7l8y().b[1346][1]++,null))):(cov_2dj4df7l8y().b[1343][1]++,t);}get data(){cov_2dj4df7l8y().f[903]++;cov_2dj4df7l8y().s[3197]++;return this.config.data;}set data(t){cov_2dj4df7l8y().f[904]++;cov_2dj4df7l8y().s[3198]++;this.config.data=t;}get options(){cov_2dj4df7l8y().f[905]++;cov_2dj4df7l8y().s[3199]++;return this._options;}set options(t){cov_2dj4df7l8y().f[906]++;cov_2dj4df7l8y().s[3200]++;this.config.options=t;}get registry(){cov_2dj4df7l8y().f[907]++;cov_2dj4df7l8y().s[3201]++;return dt;}_initialize(){cov_2dj4df7l8y().f[908]++;cov_2dj4df7l8y().s[3202]++;return this.notifyPlugins("beforeInit"),this.options.responsive?(cov_2dj4df7l8y().b[1347][0]++,this.resize()):(cov_2dj4df7l8y().b[1347][1]++,Yi(this,this.options.devicePixelRatio)),this.bindEvents(),this.notifyPlugins("afterInit"),this;}clear(){cov_2dj4df7l8y().f[909]++;cov_2dj4df7l8y().s[3203]++;return zi(this.canvas,this.ctx),this;}stop(){cov_2dj4df7l8y().f[910]++;cov_2dj4df7l8y().s[3204]++;return bt.stop(this),this;}resize(t,s){cov_2dj4df7l8y().f[911]++;cov_2dj4df7l8y().s[3205]++;bt.running(this)?(cov_2dj4df7l8y().b[1348][0]++,this._resizeBeforeDraw={width:t,height:s}):(cov_2dj4df7l8y().b[1348][1]++,this._resize(t,s));}_resize(t,s){cov_2dj4df7l8y().f[912]++;let n=(cov_2dj4df7l8y().s[3206]++,this.options),o=(cov_2dj4df7l8y().s[3207]++,this.canvas),r=(cov_2dj4df7l8y().s[3208]++,(cov_2dj4df7l8y().b[1349][0]++,n.maintainAspectRatio)&&(cov_2dj4df7l8y().b[1349][1]++,this.aspectRatio)),a=(cov_2dj4df7l8y().s[3209]++,this.platform.getMaximumSize(o,t,s,r)),l=(cov_2dj4df7l8y().s[3210]++,(cov_2dj4df7l8y().b[1350][0]++,n.devicePixelRatio)||(cov_2dj4df7l8y().b[1350][1]++,this.platform.getDevicePixelRatio())),c=(cov_2dj4df7l8y().s[3211]++,this.width?(cov_2dj4df7l8y().b[1351][0]++,"resize"):(cov_2dj4df7l8y().b[1351][1]++,"attach"));cov_2dj4df7l8y().s[3212]++;this.width=a.width,this.height=a.height,this._aspectRatio=this.aspectRatio,(cov_2dj4df7l8y().b[1352][0]++,Yi(this,l,!0))&&(cov_2dj4df7l8y().b[1352][1]++,this.notifyPlugins("resize",{size:a}),I(n.onResize,[this,a],this),(cov_2dj4df7l8y().b[1353][0]++,this.attached)&&(cov_2dj4df7l8y().b[1353][1]++,this._doResize(c))&&(cov_2dj4df7l8y().b[1353][2]++,this.render()));}ensureScalesHaveIDs(){cov_2dj4df7l8y().f[913]++;let s=(cov_2dj4df7l8y().s[3213]++,(cov_2dj4df7l8y().b[1354][0]++,this.options.scales)||(cov_2dj4df7l8y().b[1354][1]++,{}));cov_2dj4df7l8y().s[3214]++;R(s,(n,o)=>{cov_2dj4df7l8y().f[914]++;cov_2dj4df7l8y().s[3215]++;n.id=o;});}buildOrUpdateScales(){cov_2dj4df7l8y().f[915]++;let t=(cov_2dj4df7l8y().s[3216]++,this.options),s=(cov_2dj4df7l8y().s[3217]++,t.scales),n=(cov_2dj4df7l8y().s[3218]++,this.scales),o=(cov_2dj4df7l8y().s[3219]++,Object.keys(n).reduce((a,l)=>{cov_2dj4df7l8y().f[916]++;cov_2dj4df7l8y().s[3220]++;return a[l]=!1,a;},{})),r=(cov_2dj4df7l8y().s[3221]++,[]);cov_2dj4df7l8y().s[3222]++;(cov_2dj4df7l8y().b[1355][0]++,s)&&(cov_2dj4df7l8y().b[1355][1]++,r=r.concat(Object.keys(s).map(a=>{cov_2dj4df7l8y().f[917]++;let l=(cov_2dj4df7l8y().s[3223]++,s[a]),c=(cov_2dj4df7l8y().s[3224]++,ms(a,l)),h=(cov_2dj4df7l8y().s[3225]++,c==="r"),d=(cov_2dj4df7l8y().s[3226]++,c==="x");cov_2dj4df7l8y().s[3227]++;return{options:l,dposition:h?(cov_2dj4df7l8y().b[1356][0]++,"chartArea"):(cov_2dj4df7l8y().b[1356][1]++,d?(cov_2dj4df7l8y().b[1357][0]++,"bottom"):(cov_2dj4df7l8y().b[1357][1]++,"left")),dtype:h?(cov_2dj4df7l8y().b[1358][0]++,"radialLinear"):(cov_2dj4df7l8y().b[1358][1]++,d?(cov_2dj4df7l8y().b[1359][0]++,"category"):(cov_2dj4df7l8y().b[1359][1]++,"linear"))};}))),R(r,a=>{cov_2dj4df7l8y().f[918]++;let l=(cov_2dj4df7l8y().s[3228]++,a.options),c=(cov_2dj4df7l8y().s[3229]++,l.id),h=(cov_2dj4df7l8y().s[3230]++,ms(c,l)),d=(cov_2dj4df7l8y().s[3231]++,C(l.type,a.dtype));cov_2dj4df7l8y().s[3232]++;((cov_2dj4df7l8y().b[1360][0]++,l.position===void 0)||(cov_2dj4df7l8y().b[1360][1]++,so(l.position,h)!==so(a.dposition)))&&(cov_2dj4df7l8y().b[1360][2]++,l.position=a.dposition),o[c]=!0;let f=(cov_2dj4df7l8y().s[3233]++,null);cov_2dj4df7l8y().s[3234]++;if((cov_2dj4df7l8y().b[1362][0]++,c in n)&&(cov_2dj4df7l8y().b[1362][1]++,n[c].type===d)){cov_2dj4df7l8y().b[1361][0]++;cov_2dj4df7l8y().s[3235]++;f=n[c];}else{cov_2dj4df7l8y().b[1361][1]++;let u=(cov_2dj4df7l8y().s[3236]++,dt.getScale(d));cov_2dj4df7l8y().s[3237]++;f=new u({id:c,type:d,ctx:this.ctx,chart:this}),n[f.id]=f;}cov_2dj4df7l8y().s[3238]++;f.init(l,t);}),R(o,(a,l)=>{cov_2dj4df7l8y().f[919]++;cov_2dj4df7l8y().s[3239]++;(cov_2dj4df7l8y().b[1363][0]++,a)||(cov_2dj4df7l8y().b[1363][1]++,delete n[l]);}),R(n,a=>{cov_2dj4df7l8y().f[920]++;cov_2dj4df7l8y().s[3240]++;G.configure(this,a,a.options),G.addBox(this,a);});}_updateMetasets(){cov_2dj4df7l8y().f[921]++;let t=(cov_2dj4df7l8y().s[3241]++,this._metasets),s=(cov_2dj4df7l8y().s[3242]++,this.data.datasets.length),n=(cov_2dj4df7l8y().s[3243]++,t.length);cov_2dj4df7l8y().s[3244]++;if(t.sort((o,r)=>{cov_2dj4df7l8y().f[922]++;cov_2dj4df7l8y().s[3245]++;return o.index-r.index;}),n>s){cov_2dj4df7l8y().b[1364][0]++;cov_2dj4df7l8y().s[3246]++;for(let o=(cov_2dj4df7l8y().s[3247]++,s);os.length)&&(cov_2dj4df7l8y().b[1365][1]++,delete this._stacks),t.forEach((n,o)=>{cov_2dj4df7l8y().f[924]++;cov_2dj4df7l8y().s[3253]++;(cov_2dj4df7l8y().b[1366][0]++,s.filter(r=>{cov_2dj4df7l8y().f[925]++;cov_2dj4df7l8y().s[3254]++;return r===n._dataset;}).length===0)&&(cov_2dj4df7l8y().b[1366][1]++,this._destroyDatasetMeta(o));});}buildOrUpdateControllers(){cov_2dj4df7l8y().f[926]++;let t=(cov_2dj4df7l8y().s[3255]++,[]),s=(cov_2dj4df7l8y().s[3256]++,this.data.datasets),n,o;cov_2dj4df7l8y().s[3257]++;for(this._removeUnreferencedMetasets(),n=0,o=s.length;n{cov_2dj4df7l8y().f[928]++;cov_2dj4df7l8y().s[3268]++;this.getDatasetMeta(s).controller.reset();},this);}reset(){cov_2dj4df7l8y().f[929]++;cov_2dj4df7l8y().s[3269]++;this._resetElements(),this.notifyPlugins("reset");}update(t){cov_2dj4df7l8y().f[930]++;let s=(cov_2dj4df7l8y().s[3270]++,this.config);cov_2dj4df7l8y().s[3271]++;s.update();let n=(cov_2dj4df7l8y().s[3272]++,this._options=s.createResolver(s.chartOptionScopes(),this.getContext())),o=(cov_2dj4df7l8y().s[3273]++,this._animationsDisabled=!n.animation);cov_2dj4df7l8y().s[3274]++;if(this._updateScales(),this._checkEventBindings(),this._updateHiddenIndices(),this._plugins.invalidate(),this.notifyPlugins("beforeUpdate",{mode:t,cancelable:!0})===!1){cov_2dj4df7l8y().b[1373][0]++;cov_2dj4df7l8y().s[3275]++;return;}else{cov_2dj4df7l8y().b[1373][1]++;}let r=(cov_2dj4df7l8y().s[3276]++,this.buildOrUpdateControllers());cov_2dj4df7l8y().s[3277]++;this.notifyPlugins("beforeElementsUpdate");let a=(cov_2dj4df7l8y().s[3278]++,0);cov_2dj4df7l8y().s[3279]++;for(let h=(cov_2dj4df7l8y().s[3280]++,0),d=(cov_2dj4df7l8y().s[3281]++,this.data.datasets.length);h{cov_2dj4df7l8y().f[931]++;cov_2dj4df7l8y().s[3286]++;h.reset();})),this._updateDatasets(t),this.notifyPlugins("afterUpdate",{mode:t}),this._layers.sort(no("z","_idx"));let{_active:l,_lastEvent:c}=(cov_2dj4df7l8y().s[3287]++,this);cov_2dj4df7l8y().s[3288]++;c?(cov_2dj4df7l8y().b[1377][0]++,this._eventHandler(c,!0)):(cov_2dj4df7l8y().b[1377][1]++,(cov_2dj4df7l8y().b[1378][0]++,l.length)&&(cov_2dj4df7l8y().b[1378][1]++,this._updateHoverStyles(l,l,!0))),this.render();}_updateScales(){cov_2dj4df7l8y().f[932]++;cov_2dj4df7l8y().s[3289]++;R(this.scales,t=>{cov_2dj4df7l8y().f[933]++;cov_2dj4df7l8y().s[3290]++;G.removeBox(this,t);}),this.ensureScalesHaveIDs(),this.buildOrUpdateScales();}_checkEventBindings(){cov_2dj4df7l8y().f[934]++;let t=(cov_2dj4df7l8y().s[3291]++,this.options),s=(cov_2dj4df7l8y().s[3292]++,new Set(Object.keys(this._listeners))),n=(cov_2dj4df7l8y().s[3293]++,new Set(t.events));cov_2dj4df7l8y().s[3294]++;((cov_2dj4df7l8y().b[1379][0]++,!Si(s,n))||(cov_2dj4df7l8y().b[1379][1]++,!!this._responsiveListeners!==t.responsive))&&(cov_2dj4df7l8y().b[1379][2]++,this.unbindEvents(),this.bindEvents());}_updateHiddenIndices(){cov_2dj4df7l8y().f[935]++;let{_hiddenIndices:t}=(cov_2dj4df7l8y().s[3295]++,this),s=(cov_2dj4df7l8y().s[3296]++,(cov_2dj4df7l8y().b[1380][0]++,this._getUniformDataChanges())||(cov_2dj4df7l8y().b[1380][1]++,[]));cov_2dj4df7l8y().s[3297]++;for(let{method:n,start:o,count:r}of s){let a=(cov_2dj4df7l8y().s[3298]++,n==="_removeElements"?(cov_2dj4df7l8y().b[1381][0]++,-r):(cov_2dj4df7l8y().b[1381][1]++,r));cov_2dj4df7l8y().s[3299]++;sc(t,o,a);}}_getUniformDataChanges(){cov_2dj4df7l8y().f[936]++;let t=(cov_2dj4df7l8y().s[3300]++,this._dataChanges);cov_2dj4df7l8y().s[3301]++;if((cov_2dj4df7l8y().b[1383][0]++,!t)||(cov_2dj4df7l8y().b[1383][1]++,!t.length)){cov_2dj4df7l8y().b[1382][0]++;cov_2dj4df7l8y().s[3302]++;return;}else{cov_2dj4df7l8y().b[1382][1]++;}cov_2dj4df7l8y().s[3303]++;this._dataChanges=[];cov_2dj4df7l8y().s[3305]++;let s=(cov_2dj4df7l8y().s[3304]++,this.data.datasets.length),n=r=>{cov_2dj4df7l8y().f[937]++;cov_2dj4df7l8y().s[3306]++;return new Set(t.filter(a=>{cov_2dj4df7l8y().f[938]++;cov_2dj4df7l8y().s[3307]++;return a[0]===r;}).map((a,l)=>{cov_2dj4df7l8y().f[939]++;cov_2dj4df7l8y().s[3308]++;return l+","+a.splice(1).join(",");}));},o=(cov_2dj4df7l8y().s[3309]++,n(0));cov_2dj4df7l8y().s[3310]++;for(let r=(cov_2dj4df7l8y().s[3311]++,1);r{cov_2dj4df7l8y().f[940]++;cov_2dj4df7l8y().s[3315]++;return r.split(",");}).map(r=>{cov_2dj4df7l8y().f[941]++;cov_2dj4df7l8y().s[3316]++;return{method:r[1],start:+r[2],count:+r[3]};});}_updateLayout(t){cov_2dj4df7l8y().f[942]++;cov_2dj4df7l8y().s[3317]++;if(this.notifyPlugins("beforeLayout",{cancelable:!0})===!1){cov_2dj4df7l8y().b[1385][0]++;cov_2dj4df7l8y().s[3318]++;return;}else{cov_2dj4df7l8y().b[1385][1]++;}cov_2dj4df7l8y().s[3319]++;G.update(this,this.width,this.height,t);let s=(cov_2dj4df7l8y().s[3320]++,this.chartArea),n=(cov_2dj4df7l8y().s[3321]++,(cov_2dj4df7l8y().b[1386][0]++,s.width<=0)||(cov_2dj4df7l8y().b[1386][1]++,s.height<=0));cov_2dj4df7l8y().s[3322]++;this._layers=[],R(this.boxes,o=>{cov_2dj4df7l8y().f[943]++;cov_2dj4df7l8y().s[3323]++;(cov_2dj4df7l8y().b[1387][0]++,n)&&(cov_2dj4df7l8y().b[1387][1]++,o.position==="chartArea")||(cov_2dj4df7l8y().b[1387][2]++,(cov_2dj4df7l8y().b[1388][0]++,o.configure)&&(cov_2dj4df7l8y().b[1388][1]++,o.configure()),this._layers.push(...o._layers()));},this),this._layers.forEach((o,r)=>{cov_2dj4df7l8y().f[944]++;cov_2dj4df7l8y().s[3324]++;o._idx=r;}),this.notifyPlugins("afterLayout");}_updateDatasets(t){cov_2dj4df7l8y().f[945]++;cov_2dj4df7l8y().s[3325]++;if(this.notifyPlugins("beforeDatasetsUpdate",{mode:t,cancelable:!0})!==!1){cov_2dj4df7l8y().b[1389][0]++;cov_2dj4df7l8y().s[3326]++;for(let s=(cov_2dj4df7l8y().s[3327]++,0),n=(cov_2dj4df7l8y().s[3328]++,this.data.datasets.length);s=0;--s){cov_2dj4df7l8y().s[3362]++;this._drawDataset(t[s]);}cov_2dj4df7l8y().s[3363]++;this.notifyPlugins("afterDatasetsDraw");}_drawDataset(t){cov_2dj4df7l8y().f[952]++;let s=(cov_2dj4df7l8y().s[3364]++,this.ctx),n=(cov_2dj4df7l8y().s[3365]++,{meta:t,index:t.index,cancelable:!0}),o=(cov_2dj4df7l8y().s[3366]++,Gi(this,t));cov_2dj4df7l8y().s[3367]++;(cov_2dj4df7l8y().b[1401][0]++,this.notifyPlugins("beforeDatasetDraw",n)!==!1)&&(cov_2dj4df7l8y().b[1401][1]++,(cov_2dj4df7l8y().b[1402][0]++,o)&&(cov_2dj4df7l8y().b[1402][1]++,ue(s,o)),t.controller.draw(),(cov_2dj4df7l8y().b[1403][0]++,o)&&(cov_2dj4df7l8y().b[1403][1]++,ge(s)),n.cancelable=!1,this.notifyPlugins("afterDatasetDraw",n));}isPointInArea(t){cov_2dj4df7l8y().f[953]++;cov_2dj4df7l8y().s[3368]++;return at(t,this.chartArea,this._minPadding);}getElementsAtEventForMode(t,s,n,o){cov_2dj4df7l8y().f[954]++;let r=(cov_2dj4df7l8y().s[3369]++,rl.modes[s]);cov_2dj4df7l8y().s[3370]++;return typeof r=="function"?(cov_2dj4df7l8y().b[1404][0]++,r(this,t,n,o)):(cov_2dj4df7l8y().b[1404][1]++,[]);}getDatasetMeta(t){cov_2dj4df7l8y().f[955]++;let s=(cov_2dj4df7l8y().s[3371]++,this.data.datasets[t]),n=(cov_2dj4df7l8y().s[3372]++,this._metasets),o=(cov_2dj4df7l8y().s[3373]++,n.filter(r=>{cov_2dj4df7l8y().f[956]++;cov_2dj4df7l8y().s[3374]++;return(cov_2dj4df7l8y().b[1405][0]++,r)&&(cov_2dj4df7l8y().b[1405][1]++,r._dataset===s);}).pop());cov_2dj4df7l8y().s[3375]++;return(cov_2dj4df7l8y().b[1406][0]++,o)||(cov_2dj4df7l8y().b[1406][1]++,o={type:null,data:[],dataset:null,controller:null,hidden:null,xAxisID:null,yAxisID:null,order:(cov_2dj4df7l8y().b[1407][0]++,s)&&(cov_2dj4df7l8y().b[1407][1]++,s.order)||(cov_2dj4df7l8y().b[1407][2]++,0),index:t,_dataset:s,_parsed:[],_sorted:!1},n.push(o)),o;}getContext(){cov_2dj4df7l8y().f[957]++;cov_2dj4df7l8y().s[3376]++;return(cov_2dj4df7l8y().b[1408][0]++,this.$context)||(cov_2dj4df7l8y().b[1408][1]++,this.$context=mt(null,{chart:this,type:"chart"}));}getVisibleDatasetCount(){cov_2dj4df7l8y().f[958]++;cov_2dj4df7l8y().s[3377]++;return this.getSortedVisibleDatasetMetas().length;}isDatasetVisible(t){cov_2dj4df7l8y().f[959]++;let s=(cov_2dj4df7l8y().s[3378]++,this.data.datasets[t]);cov_2dj4df7l8y().s[3379]++;if(!s){cov_2dj4df7l8y().b[1409][0]++;cov_2dj4df7l8y().s[3380]++;return!1;}else{cov_2dj4df7l8y().b[1409][1]++;}let n=(cov_2dj4df7l8y().s[3381]++,this.getDatasetMeta(t));cov_2dj4df7l8y().s[3382]++;return typeof n.hidden=="boolean"?(cov_2dj4df7l8y().b[1410][0]++,!n.hidden):(cov_2dj4df7l8y().b[1410][1]++,!s.hidden);}setDatasetVisibility(t,s){cov_2dj4df7l8y().f[960]++;let n=(cov_2dj4df7l8y().s[3383]++,this.getDatasetMeta(t));cov_2dj4df7l8y().s[3384]++;n.hidden=!s;}toggleDataVisibility(t){cov_2dj4df7l8y().f[961]++;cov_2dj4df7l8y().s[3385]++;this._hiddenIndices[t]=!this._hiddenIndices[t];}getDataVisibility(t){cov_2dj4df7l8y().f[962]++;cov_2dj4df7l8y().s[3386]++;return!this._hiddenIndices[t];}_updateVisibility(t,s,n){cov_2dj4df7l8y().f[963]++;let o=(cov_2dj4df7l8y().s[3387]++,n?(cov_2dj4df7l8y().b[1411][0]++,"show"):(cov_2dj4df7l8y().b[1411][1]++,"hide")),r=(cov_2dj4df7l8y().s[3388]++,this.getDatasetMeta(t)),a=(cov_2dj4df7l8y().s[3389]++,r.controller._resolveAnimations(void 0,o));cov_2dj4df7l8y().s[3390]++;qt(s)?(cov_2dj4df7l8y().b[1412][0]++,r.data[s].hidden=!n,this.update()):(cov_2dj4df7l8y().b[1412][1]++,this.setDatasetVisibility(t,n),a.update(r,{visible:n}),this.update(l=>{cov_2dj4df7l8y().f[964]++;cov_2dj4df7l8y().s[3391]++;return l.datasetIndex===t?(cov_2dj4df7l8y().b[1413][0]++,o):(cov_2dj4df7l8y().b[1413][1]++,void 0);}));}hide(t,s){cov_2dj4df7l8y().f[965]++;cov_2dj4df7l8y().s[3392]++;this._updateVisibility(t,s,!1);}show(t,s){cov_2dj4df7l8y().f[966]++;cov_2dj4df7l8y().s[3393]++;this._updateVisibility(t,s,!0);}_destroyDatasetMeta(t){cov_2dj4df7l8y().f[967]++;let s=(cov_2dj4df7l8y().s[3394]++,this._metasets[t]);cov_2dj4df7l8y().s[3395]++;(cov_2dj4df7l8y().b[1414][0]++,s)&&(cov_2dj4df7l8y().b[1414][1]++,s.controller)&&(cov_2dj4df7l8y().b[1414][2]++,s.controller._destroy()),delete this._metasets[t];}_stop(){cov_2dj4df7l8y().f[968]++;let t,s;cov_2dj4df7l8y().s[3396]++;for(this.stop(),bt.remove(this),t=0,s=this.data.datasets.length;t{cov_2dj4df7l8y().f[973]++;cov_2dj4df7l8y().s[3406]++;s.addEventListener(this,r,a),t[r]=a;},o=(r,a,l)=>{cov_2dj4df7l8y().f[974]++;cov_2dj4df7l8y().s[3408]++;r.offsetX=a,r.offsetY=l,this._eventHandler(r);};cov_2dj4df7l8y().s[3409]++;R(this.options.events,r=>{cov_2dj4df7l8y().f[975]++;cov_2dj4df7l8y().s[3410]++;return n(r,o);});}bindResponsiveEvents(){cov_2dj4df7l8y().f[976]++;cov_2dj4df7l8y().s[3411]++;(cov_2dj4df7l8y().b[1417][0]++,this._responsiveListeners)||(cov_2dj4df7l8y().b[1417][1]++,this._responsiveListeners={});cov_2dj4df7l8y().s[3414]++;cov_2dj4df7l8y().s[3416]++;cov_2dj4df7l8y().s[3418]++;cov_2dj4df7l8y().s[3420]++;let t=(cov_2dj4df7l8y().s[3412]++,this._responsiveListeners),s=(cov_2dj4df7l8y().s[3413]++,this.platform),n=(c,h)=>{cov_2dj4df7l8y().f[977]++;cov_2dj4df7l8y().s[3415]++;s.addEventListener(this,c,h),t[c]=h;},o=(c,h)=>{cov_2dj4df7l8y().f[978]++;cov_2dj4df7l8y().s[3417]++;(cov_2dj4df7l8y().b[1418][0]++,t[c])&&(cov_2dj4df7l8y().b[1418][1]++,s.removeEventListener(this,c,h),delete t[c]);},r=(c,h)=>{cov_2dj4df7l8y().f[979]++;cov_2dj4df7l8y().s[3419]++;(cov_2dj4df7l8y().b[1419][0]++,this.canvas)&&(cov_2dj4df7l8y().b[1419][1]++,this.resize(c,h));},a,l=()=>{cov_2dj4df7l8y().f[980]++;cov_2dj4df7l8y().s[3421]++;o("attach",l),this.attached=!0,this.resize(),n("resize",r),n("detach",a);};cov_2dj4df7l8y().s[3422]++;a=()=>{cov_2dj4df7l8y().f[981]++;cov_2dj4df7l8y().s[3423]++;this.attached=!1,o("resize",r),this._stop(),this._resize(0,0),n("attach",l);},s.isAttached(this.canvas)?(cov_2dj4df7l8y().b[1420][0]++,l()):(cov_2dj4df7l8y().b[1420][1]++,a());}unbindEvents(){cov_2dj4df7l8y().f[982]++;cov_2dj4df7l8y().s[3424]++;R(this._listeners,(t,s)=>{cov_2dj4df7l8y().f[983]++;cov_2dj4df7l8y().s[3425]++;this.platform.removeEventListener(this,s,t);}),this._listeners={},R(this._responsiveListeners,(t,s)=>{cov_2dj4df7l8y().f[984]++;cov_2dj4df7l8y().s[3426]++;this.platform.removeEventListener(this,s,t);}),this._responsiveListeners=void 0;}updateHoverStyle(t,s,n){cov_2dj4df7l8y().f[985]++;let o=(cov_2dj4df7l8y().s[3427]++,n?(cov_2dj4df7l8y().b[1421][0]++,"set"):(cov_2dj4df7l8y().b[1421][1]++,"remove")),r,a,l,c;cov_2dj4df7l8y().s[3428]++;for((cov_2dj4df7l8y().b[1422][0]++,s==="dataset")&&(cov_2dj4df7l8y().b[1422][1]++,r=this.getDatasetMeta(t[0].datasetIndex),r.controller["_"+o+"DatasetHoverStyle"]()),l=0,c=t.length;l{cov_2dj4df7l8y().f[988]++;let l=(cov_2dj4df7l8y().s[3435]++,this.getDatasetMeta(r));cov_2dj4df7l8y().s[3436]++;if(!l){cov_2dj4df7l8y().b[1427][0]++;cov_2dj4df7l8y().s[3437]++;throw new Error("No dataset found at index "+r);}else{cov_2dj4df7l8y().b[1427][1]++;}cov_2dj4df7l8y().s[3438]++;return{datasetIndex:r,element:l.data[a],index:a};}));cov_2dj4df7l8y().s[3439]++;(cov_2dj4df7l8y().b[1428][0]++,!de(n,s))&&(cov_2dj4df7l8y().b[1428][1]++,this._active=n,this._lastEvent=null,this._updateHoverStyles(n,s));}notifyPlugins(t,s,n){cov_2dj4df7l8y().f[989]++;cov_2dj4df7l8y().s[3440]++;return this._plugins.notify(this,t,s,n);}isPluginEnabled(t){cov_2dj4df7l8y().f[990]++;cov_2dj4df7l8y().s[3441]++;return this._plugins._cache.filter(s=>{cov_2dj4df7l8y().f[991]++;cov_2dj4df7l8y().s[3442]++;return s.plugin.id===t;}).length===1;}_updateHoverStyles(t,s,n){cov_2dj4df7l8y().f[992]++;cov_2dj4df7l8y().s[3444]++;let o=(cov_2dj4df7l8y().s[3443]++,this.options.hover),r=(c,h)=>{cov_2dj4df7l8y().f[993]++;cov_2dj4df7l8y().s[3445]++;return c.filter(d=>{cov_2dj4df7l8y().f[994]++;cov_2dj4df7l8y().s[3446]++;return!h.some(f=>{cov_2dj4df7l8y().f[995]++;cov_2dj4df7l8y().s[3447]++;return(cov_2dj4df7l8y().b[1429][0]++,d.datasetIndex===f.datasetIndex)&&(cov_2dj4df7l8y().b[1429][1]++,d.index===f.index);});});},a=(cov_2dj4df7l8y().s[3448]++,r(s,t)),l=(cov_2dj4df7l8y().s[3449]++,n?(cov_2dj4df7l8y().b[1430][0]++,t):(cov_2dj4df7l8y().b[1430][1]++,r(t,s)));cov_2dj4df7l8y().s[3450]++;(cov_2dj4df7l8y().b[1431][0]++,a.length)&&(cov_2dj4df7l8y().b[1431][1]++,this.updateHoverStyle(a,o.mode,!1)),(cov_2dj4df7l8y().b[1432][0]++,l.length)&&(cov_2dj4df7l8y().b[1432][1]++,o.mode)&&(cov_2dj4df7l8y().b[1432][2]++,this.updateHoverStyle(l,o.mode,!0));}_eventHandler(t,s){cov_2dj4df7l8y().f[996]++;cov_2dj4df7l8y().s[3452]++;let n=(cov_2dj4df7l8y().s[3451]++,{event:t,replay:s,cancelable:!0,inChartArea:this.isPointInArea(t)}),o=a=>{cov_2dj4df7l8y().f[997]++;cov_2dj4df7l8y().s[3453]++;return((cov_2dj4df7l8y().b[1433][0]++,a.options.events)||(cov_2dj4df7l8y().b[1433][1]++,this.options.events)).includes(t.native.type);};cov_2dj4df7l8y().s[3454]++;if(this.notifyPlugins("beforeEvent",n,o)===!1){cov_2dj4df7l8y().b[1434][0]++;cov_2dj4df7l8y().s[3455]++;return;}else{cov_2dj4df7l8y().b[1434][1]++;}let r=(cov_2dj4df7l8y().s[3456]++,this._handleEvent(t,s,n.inChartArea));cov_2dj4df7l8y().s[3457]++;return n.cancelable=!1,this.notifyPlugins("afterEvent",n,o),((cov_2dj4df7l8y().b[1435][0]++,r)||(cov_2dj4df7l8y().b[1435][1]++,n.changed))&&(cov_2dj4df7l8y().b[1435][2]++,this.render()),this;}_handleEvent(t,s,n){cov_2dj4df7l8y().f[998]++;let{_active:o=(cov_2dj4df7l8y().b[1436][0]++,[]),options:r}=(cov_2dj4df7l8y().s[3458]++,this),a=(cov_2dj4df7l8y().s[3459]++,s),l=(cov_2dj4df7l8y().s[3460]++,this._getActiveElements(t,o,n,a)),c=(cov_2dj4df7l8y().s[3461]++,ln(t)),h=(cov_2dj4df7l8y().s[3462]++,nc(t,this._lastEvent,n,c));cov_2dj4df7l8y().s[3463]++;(cov_2dj4df7l8y().b[1437][0]++,n)&&(cov_2dj4df7l8y().b[1437][1]++,this._lastEvent=null,I(r.onHover,[t,l,this],this),(cov_2dj4df7l8y().b[1438][0]++,c)&&(cov_2dj4df7l8y().b[1438][1]++,I(r.onClick,[t,l,this],this)));let d=(cov_2dj4df7l8y().s[3464]++,!de(l,o));cov_2dj4df7l8y().s[3465]++;return((cov_2dj4df7l8y().b[1439][0]++,d)||(cov_2dj4df7l8y().b[1439][1]++,s))&&(cov_2dj4df7l8y().b[1439][2]++,this._active=l,this._updateHoverStyles(l,o,s)),this._lastEvent=h,d;}_getActiveElements(t,s,n,o){cov_2dj4df7l8y().f[999]++;cov_2dj4df7l8y().s[3466]++;if(t.type==="mouseout"){cov_2dj4df7l8y().b[1440][0]++;cov_2dj4df7l8y().s[3467]++;return[];}else{cov_2dj4df7l8y().b[1440][1]++;}cov_2dj4df7l8y().s[3468]++;if(!n){cov_2dj4df7l8y().b[1441][0]++;cov_2dj4df7l8y().s[3469]++;return s;}else{cov_2dj4df7l8y().b[1441][1]++;}let r=(cov_2dj4df7l8y().s[3470]++,this.options.hover);cov_2dj4df7l8y().s[3471]++;return this.getElementsAtEventForMode(t,r.mode,r,o);}}cov_2dj4df7l8y().s[3472]++;return e;})());function ao(){cov_2dj4df7l8y().f[1000]++;cov_2dj4df7l8y().s[3473]++;return R(hi.instances,e=>{cov_2dj4df7l8y().f[1001]++;cov_2dj4df7l8y().s[3474]++;return e._plugins.invalidate();});}function oc(e,i,t){cov_2dj4df7l8y().f[1002]++;let{startAngle:s,x:n,y:o,outerRadius:r,innerRadius:a,options:l}=(cov_2dj4df7l8y().s[3475]++,i),{borderWidth:c,borderJoinStyle:h}=(cov_2dj4df7l8y().s[3476]++,l),d=(cov_2dj4df7l8y().s[3477]++,Math.min(c/r,U(s-t)));cov_2dj4df7l8y().s[3478]++;if(e.beginPath(),e.arc(n,o,r-c/2,s+d/2,t-d/2),a>0){cov_2dj4df7l8y().b[1442][0]++;let f=(cov_2dj4df7l8y().s[3479]++,Math.min(c/a,U(s-t)));cov_2dj4df7l8y().s[3480]++;e.arc(n,o,a+c/2,t-f/2,s+f/2,!0);}else{cov_2dj4df7l8y().b[1442][1]++;let f=(cov_2dj4df7l8y().s[3481]++,Math.min(c/2,r*U(s-t)));cov_2dj4df7l8y().s[3482]++;if(h==="round"){cov_2dj4df7l8y().b[1443][0]++;cov_2dj4df7l8y().s[3483]++;e.arc(n,o,f,t-L/2,s+L/2,!0);}else{cov_2dj4df7l8y().b[1443][1]++;cov_2dj4df7l8y().s[3484]++;if(h==="bevel"){cov_2dj4df7l8y().b[1444][0]++;let u=(cov_2dj4df7l8y().s[3485]++,2*f*f),p=(cov_2dj4df7l8y().s[3486]++,-u*Math.cos(t+L/2)+n),g=(cov_2dj4df7l8y().s[3487]++,-u*Math.sin(t+L/2)+o),m=(cov_2dj4df7l8y().s[3488]++,u*Math.cos(s+L/2)+n),b=(cov_2dj4df7l8y().s[3489]++,u*Math.sin(s+L/2)+o);cov_2dj4df7l8y().s[3490]++;e.lineTo(p,g),e.lineTo(m,b);}else{cov_2dj4df7l8y().b[1444][1]++;}}}cov_2dj4df7l8y().s[3491]++;e.closePath(),e.moveTo(0,0),e.rect(0,0,e.canvas.width,e.canvas.height),e.clip("evenodd");}function rc(e,i,t){cov_2dj4df7l8y().f[1003]++;let{startAngle:s,pixelMargin:n,x:o,y:r,outerRadius:a,innerRadius:l}=(cov_2dj4df7l8y().s[3492]++,i),c=(cov_2dj4df7l8y().s[3493]++,n/a);cov_2dj4df7l8y().s[3494]++;e.beginPath(),e.arc(o,r,a,s-c,t+c),l>n?(cov_2dj4df7l8y().b[1445][0]++,c=n/l,e.arc(o,r,l,t+c,s-c,!0)):(cov_2dj4df7l8y().b[1445][1]++,e.arc(o,r,n,t+V,s-V)),e.closePath(),e.clip();}function ac(e){cov_2dj4df7l8y().f[1004]++;cov_2dj4df7l8y().s[3495]++;return $e(e,["outerStart","outerEnd","innerStart","innerEnd"]);}function lc(e,i,t,s){cov_2dj4df7l8y().f[1005]++;cov_2dj4df7l8y().s[3499]++;let n=(cov_2dj4df7l8y().s[3496]++,ac(e.options.borderRadius)),o=(cov_2dj4df7l8y().s[3497]++,(t-i)/2),r=(cov_2dj4df7l8y().s[3498]++,Math.min(o,s*i/2)),a=l=>{cov_2dj4df7l8y().f[1006]++;let c=(cov_2dj4df7l8y().s[3500]++,(t-Math.min(o,l))*s/2);cov_2dj4df7l8y().s[3501]++;return Y(l,0,Math.min(o,c));};cov_2dj4df7l8y().s[3502]++;return{outerStart:a(n.outerStart),outerEnd:a(n.outerEnd),innerStart:Y(n.innerStart,0,r),innerEnd:Y(n.innerEnd,0,r)};}function ee(e,i,t,s){cov_2dj4df7l8y().f[1007]++;cov_2dj4df7l8y().s[3503]++;return{x:t+e*Math.cos(i),y:s+e*Math.sin(i)};}function ai(e,i,t,s,n,o){cov_2dj4df7l8y().f[1008]++;let{x:r,y:a,startAngle:l,pixelMargin:c,innerRadius:h}=(cov_2dj4df7l8y().s[3504]++,i),d=(cov_2dj4df7l8y().s[3505]++,Math.max(i.outerRadius+s+t-c,0)),f=(cov_2dj4df7l8y().s[3506]++,h>0?(cov_2dj4df7l8y().b[1446][0]++,h+s+t+c):(cov_2dj4df7l8y().b[1446][1]++,0)),u=(cov_2dj4df7l8y().s[3507]++,0),p=(cov_2dj4df7l8y().s[3508]++,n-l);cov_2dj4df7l8y().s[3509]++;if(s){cov_2dj4df7l8y().b[1447][0]++;let E=(cov_2dj4df7l8y().s[3510]++,h>0?(cov_2dj4df7l8y().b[1448][0]++,h-s):(cov_2dj4df7l8y().b[1448][1]++,0)),W=(cov_2dj4df7l8y().s[3511]++,d>0?(cov_2dj4df7l8y().b[1449][0]++,d-s):(cov_2dj4df7l8y().b[1449][1]++,0)),H=(cov_2dj4df7l8y().s[3512]++,(E+W)/2),st=(cov_2dj4df7l8y().s[3513]++,H!==0?(cov_2dj4df7l8y().b[1450][0]++,p*H/(H+s)):(cov_2dj4df7l8y().b[1450][1]++,p));cov_2dj4df7l8y().s[3514]++;u=(p-st)/2;}else{cov_2dj4df7l8y().b[1447][1]++;}let g=(cov_2dj4df7l8y().s[3515]++,Math.max(.001,p*d-t/L)/d),m=(cov_2dj4df7l8y().s[3516]++,(p-g)/2),b=(cov_2dj4df7l8y().s[3517]++,l+m+u),x=(cov_2dj4df7l8y().s[3518]++,n-m-u),{outerStart:y,outerEnd:M,innerStart:_,innerEnd:v}=(cov_2dj4df7l8y().s[3519]++,lc(i,f,d,x-b)),S=(cov_2dj4df7l8y().s[3520]++,d-y),k=(cov_2dj4df7l8y().s[3521]++,d-M),w=(cov_2dj4df7l8y().s[3522]++,b+y/S),D=(cov_2dj4df7l8y().s[3523]++,x-M/k),P=(cov_2dj4df7l8y().s[3524]++,f+_),T=(cov_2dj4df7l8y().s[3525]++,f+v),$=(cov_2dj4df7l8y().s[3526]++,b+_/P),tt=(cov_2dj4df7l8y().s[3527]++,x-v/T);cov_2dj4df7l8y().s[3528]++;if(e.beginPath(),o){cov_2dj4df7l8y().b[1451][0]++;let E=(cov_2dj4df7l8y().s[3529]++,(w+D)/2);cov_2dj4df7l8y().s[3530]++;if(e.arc(r,a,d,w,E),e.arc(r,a,d,E,D),M>0){cov_2dj4df7l8y().b[1452][0]++;let q=(cov_2dj4df7l8y().s[3531]++,ee(k,D,r,a));cov_2dj4df7l8y().s[3532]++;e.arc(q.x,q.y,M,D,x+V);}else{cov_2dj4df7l8y().b[1452][1]++;}let W=(cov_2dj4df7l8y().s[3533]++,ee(T,x,r,a));cov_2dj4df7l8y().s[3534]++;if(e.lineTo(W.x,W.y),v>0){cov_2dj4df7l8y().b[1453][0]++;let q=(cov_2dj4df7l8y().s[3535]++,ee(T,tt,r,a));cov_2dj4df7l8y().s[3536]++;e.arc(q.x,q.y,v,x+V,tt+Math.PI);}else{cov_2dj4df7l8y().b[1453][1]++;}let H=(cov_2dj4df7l8y().s[3537]++,(x-v/f+(b+_/f))/2);cov_2dj4df7l8y().s[3538]++;if(e.arc(r,a,f,x-v/f,H,!0),e.arc(r,a,f,H,b+_/f,!0),_>0){cov_2dj4df7l8y().b[1454][0]++;let q=(cov_2dj4df7l8y().s[3539]++,ee(P,$,r,a));cov_2dj4df7l8y().s[3540]++;e.arc(q.x,q.y,_,$+Math.PI,b-V);}else{cov_2dj4df7l8y().b[1454][1]++;}let st=(cov_2dj4df7l8y().s[3541]++,ee(S,b,r,a));cov_2dj4df7l8y().s[3542]++;if(e.lineTo(st.x,st.y),y>0){cov_2dj4df7l8y().b[1455][0]++;let q=(cov_2dj4df7l8y().s[3543]++,ee(S,w,r,a));cov_2dj4df7l8y().s[3544]++;e.arc(q.x,q.y,y,b-V,w);}else{cov_2dj4df7l8y().b[1455][1]++;}}else{cov_2dj4df7l8y().b[1451][1]++;cov_2dj4df7l8y().s[3545]++;e.moveTo(r,a);let E=(cov_2dj4df7l8y().s[3546]++,Math.cos(w)*d+r),W=(cov_2dj4df7l8y().s[3547]++,Math.sin(w)*d+a);cov_2dj4df7l8y().s[3548]++;e.lineTo(E,W);let H=(cov_2dj4df7l8y().s[3549]++,Math.cos(D)*d+r),st=(cov_2dj4df7l8y().s[3550]++,Math.sin(D)*d+a);cov_2dj4df7l8y().s[3551]++;e.lineTo(H,st);}cov_2dj4df7l8y().s[3552]++;e.closePath();}function cc(e,i,t,s,n){cov_2dj4df7l8y().f[1009]++;let{fullCircles:o,startAngle:r,circumference:a}=(cov_2dj4df7l8y().s[3553]++,i),l=(cov_2dj4df7l8y().s[3554]++,i.endAngle);cov_2dj4df7l8y().s[3555]++;if(o){cov_2dj4df7l8y().b[1456][0]++;cov_2dj4df7l8y().s[3556]++;ai(e,i,t,s,l,n);cov_2dj4df7l8y().s[3557]++;for(let c=(cov_2dj4df7l8y().s[3558]++,0);c=L)&&(cov_2dj4df7l8y().b[1468][2]++,u===0)&&(cov_2dj4df7l8y().b[1468][3]++,h!=="miter")&&(cov_2dj4df7l8y().b[1468][4]++,oc(e,i,g)),(cov_2dj4df7l8y().b[1469][0]++,o)||(cov_2dj4df7l8y().b[1469][1]++,ai(e,i,t,s,g,n),e.stroke());}cov_2dj4df7l8y().s[3576]++;var xs=class extends ot{static id=(cov_2dj4df7l8y().s[3577]++,"arc");static defaults=(cov_2dj4df7l8y().s[3578]++,{borderAlign:"center",borderColor:"#fff",borderDash:[],borderDashOffset:0,borderJoinStyle:void 0,borderRadius:0,borderWidth:2,offset:0,spacing:0,angle:void 0,circular:!0,selfJoin:!1});static defaultRoutes=(cov_2dj4df7l8y().s[3579]++,{backgroundColor:"backgroundColor"});static descriptors=(cov_2dj4df7l8y().s[3580]++,{_scriptable:!0,_indexable:i=>{cov_2dj4df7l8y().f[1011]++;cov_2dj4df7l8y().s[3581]++;return i!=="borderDash";}});circumference;endAngle;fullCircles;innerRadius;outerRadius;pixelMargin;startAngle;constructor(i){cov_2dj4df7l8y().f[1012]++;cov_2dj4df7l8y().s[3582]++;super(),this.options=void 0,this.circumference=void 0,this.startAngle=void 0,this.endAngle=void 0,this.innerRadius=void 0,this.outerRadius=void 0,this.pixelMargin=0,this.fullCircles=0,(cov_2dj4df7l8y().b[1470][0]++,i)&&(cov_2dj4df7l8y().b[1470][1]++,Object.assign(this,i));}inRange(i,t,s){cov_2dj4df7l8y().f[1013]++;let n=(cov_2dj4df7l8y().s[3583]++,this.getProps(["x","y"],s)),{angle:o,distance:r}=(cov_2dj4df7l8y().s[3584]++,Di(n,{x:i,y:t})),{startAngle:a,endAngle:l,innerRadius:c,outerRadius:h,circumference:d}=(cov_2dj4df7l8y().s[3585]++,this.getProps(["startAngle","endAngle","innerRadius","outerRadius","circumference"],s)),f=(cov_2dj4df7l8y().s[3586]++,(this.options.spacing+this.options.borderWidth)/2),u=(cov_2dj4df7l8y().s[3587]++,C(d,l-a)),p=(cov_2dj4df7l8y().s[3588]++,(cov_2dj4df7l8y().b[1471][0]++,Jt(o,a,l))&&(cov_2dj4df7l8y().b[1471][1]++,a!==l)),g=(cov_2dj4df7l8y().s[3589]++,(cov_2dj4df7l8y().b[1472][0]++,u>=B)||(cov_2dj4df7l8y().b[1472][1]++,p)),m=(cov_2dj4df7l8y().s[3590]++,ct(r,c+f,h+f));cov_2dj4df7l8y().s[3591]++;return(cov_2dj4df7l8y().b[1473][0]++,g)&&(cov_2dj4df7l8y().b[1473][1]++,m);}getCenterPoint(i){cov_2dj4df7l8y().f[1014]++;let{x:t,y:s,startAngle:n,endAngle:o,innerRadius:r,outerRadius:a}=(cov_2dj4df7l8y().s[3592]++,this.getProps(["x","y","startAngle","endAngle","innerRadius","outerRadius"],i)),{offset:l,spacing:c}=(cov_2dj4df7l8y().s[3593]++,this.options),h=(cov_2dj4df7l8y().s[3594]++,(n+o)/2),d=(cov_2dj4df7l8y().s[3595]++,(r+a+c+l)/2);cov_2dj4df7l8y().s[3596]++;return{x:t+Math.cos(h)*d,y:s+Math.sin(h)*d};}tooltipPosition(i){cov_2dj4df7l8y().f[1015]++;cov_2dj4df7l8y().s[3597]++;return this.getCenterPoint(i);}draw(i){cov_2dj4df7l8y().f[1016]++;let{options:t,circumference:s}=(cov_2dj4df7l8y().s[3598]++,this),n=(cov_2dj4df7l8y().s[3599]++,((cov_2dj4df7l8y().b[1474][0]++,t.offset)||(cov_2dj4df7l8y().b[1474][1]++,0))/4),o=(cov_2dj4df7l8y().s[3600]++,((cov_2dj4df7l8y().b[1475][0]++,t.spacing)||(cov_2dj4df7l8y().b[1475][1]++,0))/2),r=(cov_2dj4df7l8y().s[3601]++,t.circular);cov_2dj4df7l8y().s[3602]++;if(this.pixelMargin=t.borderAlign==="inner"?(cov_2dj4df7l8y().b[1477][0]++,.33):(cov_2dj4df7l8y().b[1477][1]++,0),this.fullCircles=s>B?(cov_2dj4df7l8y().b[1478][0]++,Math.floor(s/B)):(cov_2dj4df7l8y().b[1478][1]++,0),(cov_2dj4df7l8y().b[1479][0]++,s===0)||(cov_2dj4df7l8y().b[1479][1]++,this.innerRadius<0)||(cov_2dj4df7l8y().b[1479][2]++,this.outerRadius<0)){cov_2dj4df7l8y().b[1476][0]++;cov_2dj4df7l8y().s[3603]++;return;}else{cov_2dj4df7l8y().b[1476][1]++;}cov_2dj4df7l8y().s[3604]++;i.save();let a=(cov_2dj4df7l8y().s[3605]++,(this.startAngle+this.endAngle)/2);cov_2dj4df7l8y().s[3606]++;i.translate(Math.cos(a)*n,Math.sin(a)*n);let l=(cov_2dj4df7l8y().s[3607]++,1-Math.sin(Math.min(L,(cov_2dj4df7l8y().b[1480][0]++,s)||(cov_2dj4df7l8y().b[1480][1]++,0)))),c=(cov_2dj4df7l8y().s[3608]++,n*l);cov_2dj4df7l8y().s[3609]++;i.fillStyle=t.backgroundColor,i.strokeStyle=t.borderColor,cc(i,this,c,o,r),hc(i,this,c,o,r),i.restore();}};function Uo(e,i,t=(cov_2dj4df7l8y().b[1481][0]++,i)){cov_2dj4df7l8y().f[1017]++;cov_2dj4df7l8y().s[3610]++;e.lineCap=C(t.borderCapStyle,i.borderCapStyle),e.setLineDash(C(t.borderDash,i.borderDash)),e.lineDashOffset=C(t.borderDashOffset,i.borderDashOffset),e.lineJoin=C(t.borderJoinStyle,i.borderJoinStyle),e.lineWidth=C(t.borderWidth,i.borderWidth),e.strokeStyle=C(t.borderColor,i.borderColor);}function dc(e,i,t){cov_2dj4df7l8y().f[1018]++;cov_2dj4df7l8y().s[3611]++;e.lineTo(t.x,t.y);}function fc(e){cov_2dj4df7l8y().f[1019]++;cov_2dj4df7l8y().s[3612]++;return e.stepped?(cov_2dj4df7l8y().b[1482][0]++,yn):(cov_2dj4df7l8y().b[1482][1]++,(cov_2dj4df7l8y().b[1484][0]++,e.tension)||(cov_2dj4df7l8y().b[1484][1]++,e.cubicInterpolationMode==="monotone")?(cov_2dj4df7l8y().b[1483][0]++,vn):(cov_2dj4df7l8y().b[1483][1]++,dc));}function Xo(e,i,t=(cov_2dj4df7l8y().b[1485][0]++,{})){cov_2dj4df7l8y().f[1020]++;let s=(cov_2dj4df7l8y().s[3613]++,e.length),{start:n=(cov_2dj4df7l8y().b[1486][0]++,0),end:o=(cov_2dj4df7l8y().b[1487][0]++,s-1)}=(cov_2dj4df7l8y().s[3614]++,t),{start:r,end:a}=(cov_2dj4df7l8y().s[3615]++,i),l=(cov_2dj4df7l8y().s[3616]++,Math.max(n,r)),c=(cov_2dj4df7l8y().s[3617]++,Math.min(o,a)),h=(cov_2dj4df7l8y().s[3618]++,(cov_2dj4df7l8y().b[1488][0]++,na)&&(cov_2dj4df7l8y().b[1488][3]++,o>a));cov_2dj4df7l8y().s[3619]++;return{count:s,start:l,loop:i.loop,ilen:(cov_2dj4df7l8y().b[1490][0]++,c{cov_2dj4df7l8y().f[1023]++;cov_2dj4df7l8y().s[3633]++;return(r+(c?(cov_2dj4df7l8y().b[1500][0]++,a-M):(cov_2dj4df7l8y().b[1500][1]++,M)))%o;},y=()=>{cov_2dj4df7l8y().f[1024]++;cov_2dj4df7l8y().s[3635]++;(cov_2dj4df7l8y().b[1501][0]++,g!==m)&&(cov_2dj4df7l8y().b[1501][1]++,e.lineTo(h,m),e.lineTo(h,g),e.lineTo(h,b));};cov_2dj4df7l8y().s[3636]++;for((cov_2dj4df7l8y().b[1502][0]++,l)&&(cov_2dj4df7l8y().b[1502][1]++,u=n[x(0)],e.moveTo(u.x,u.y)),f=0;f<=a;++f){cov_2dj4df7l8y().s[3637]++;if(u=n[x(f)],u.skip){cov_2dj4df7l8y().b[1503][0]++;cov_2dj4df7l8y().s[3638]++;continue;}else{cov_2dj4df7l8y().b[1503][1]++;}let M=(cov_2dj4df7l8y().s[3639]++,u.x),_=(cov_2dj4df7l8y().s[3640]++,u.y),v=(cov_2dj4df7l8y().s[3641]++,M|0);cov_2dj4df7l8y().s[3642]++;v===p?(cov_2dj4df7l8y().b[1504][0]++,_m)&&(cov_2dj4df7l8y().b[1506][1]++,m=_)),h=(d*h+M)/++d):(cov_2dj4df7l8y().b[1504][1]++,y(),e.lineTo(M,_),p=v,d=0,g=m=_),b=_;}cov_2dj4df7l8y().s[3643]++;y();}function _s(e){cov_2dj4df7l8y().f[1025]++;let i=(cov_2dj4df7l8y().s[3644]++,e.options),t=(cov_2dj4df7l8y().s[3645]++,(cov_2dj4df7l8y().b[1507][0]++,i.borderDash)&&(cov_2dj4df7l8y().b[1507][1]++,i.borderDash.length));cov_2dj4df7l8y().s[3646]++;return(cov_2dj4df7l8y().b[1509][0]++,!e._decimated)&&(cov_2dj4df7l8y().b[1509][1]++,!e._loop)&&(cov_2dj4df7l8y().b[1509][2]++,!i.tension)&&(cov_2dj4df7l8y().b[1509][3]++,i.cubicInterpolationMode!=="monotone")&&(cov_2dj4df7l8y().b[1509][4]++,!i.stepped)&&(cov_2dj4df7l8y().b[1509][5]++,!t)?(cov_2dj4df7l8y().b[1508][0]++,gc):(cov_2dj4df7l8y().b[1508][1]++,uc);}function pc(e){cov_2dj4df7l8y().f[1026]++;cov_2dj4df7l8y().s[3647]++;return e.stepped?(cov_2dj4df7l8y().b[1510][0]++,An):(cov_2dj4df7l8y().b[1510][1]++,(cov_2dj4df7l8y().b[1512][0]++,e.tension)||(cov_2dj4df7l8y().b[1512][1]++,e.cubicInterpolationMode==="monotone")?(cov_2dj4df7l8y().b[1511][0]++,Tn):(cov_2dj4df7l8y().b[1511][1]++,vt));}function mc(e,i,t,s){cov_2dj4df7l8y().f[1027]++;let n=(cov_2dj4df7l8y().s[3648]++,i._path);cov_2dj4df7l8y().s[3649]++;(cov_2dj4df7l8y().b[1513][0]++,n)||(cov_2dj4df7l8y().b[1513][1]++,n=i._path=new Path2D(),(cov_2dj4df7l8y().b[1514][0]++,i.path(n,t,s))&&(cov_2dj4df7l8y().b[1514][1]++,n.closePath())),Uo(e,i.options),e.stroke(n);}function bc(e,i,t,s){cov_2dj4df7l8y().f[1028]++;let{segments:n,options:o}=(cov_2dj4df7l8y().s[3650]++,i),r=(cov_2dj4df7l8y().s[3651]++,_s(i));cov_2dj4df7l8y().s[3652]++;for(let a of n){cov_2dj4df7l8y().s[3653]++;Uo(e,o,a.style),e.beginPath(),(cov_2dj4df7l8y().b[1515][0]++,r(e,i,a,{start:t,end:t+s-1}))&&(cov_2dj4df7l8y().b[1515][1]++,e.closePath()),e.stroke();}}var xc=(cov_2dj4df7l8y().s[3654]++,typeof Path2D=="function");function _c(e,i,t,s){cov_2dj4df7l8y().f[1029]++;cov_2dj4df7l8y().s[3655]++;(cov_2dj4df7l8y().b[1517][0]++,xc)&&(cov_2dj4df7l8y().b[1517][1]++,!i.options.segment)?(cov_2dj4df7l8y().b[1516][0]++,mc(e,i,t,s)):(cov_2dj4df7l8y().b[1516][1]++,bc(e,i,t,s));}var di=(cov_2dj4df7l8y().s[3656]++,(()=>{cov_2dj4df7l8y().f[1030]++;class e extends ot{static id=(cov_2dj4df7l8y().s[3657]++,"line");static defaults=(cov_2dj4df7l8y().s[3658]++,{borderCapStyle:"butt",borderDash:[],borderDashOffset:0,borderJoinStyle:"miter",borderWidth:3,capBezierPoints:!0,cubicInterpolationMode:"default",fill:!1,spanGaps:!1,stepped:!1,tension:0});static defaultRoutes=(cov_2dj4df7l8y().s[3659]++,{backgroundColor:"backgroundColor",borderColor:"borderColor"});static descriptors=(cov_2dj4df7l8y().s[3660]++,{_scriptable:!0,_indexable:t=>{cov_2dj4df7l8y().f[1031]++;cov_2dj4df7l8y().s[3661]++;return(cov_2dj4df7l8y().b[1518][0]++,t!=="borderDash")&&(cov_2dj4df7l8y().b[1518][1]++,t!=="fill");}});constructor(t){cov_2dj4df7l8y().f[1032]++;cov_2dj4df7l8y().s[3662]++;super(),this.animated=!0,this.options=void 0,this._chart=void 0,this._loop=void 0,this._fullLoop=void 0,this._path=void 0,this._points=void 0,this._segments=void 0,this._decimated=!1,this._pointsUpdated=!1,this._datasetIndex=void 0,(cov_2dj4df7l8y().b[1519][0]++,t)&&(cov_2dj4df7l8y().b[1519][1]++,Object.assign(this,t));}updateControlPoints(t,s){cov_2dj4df7l8y().f[1033]++;let n=(cov_2dj4df7l8y().s[3663]++,this.options);cov_2dj4df7l8y().s[3664]++;if(((cov_2dj4df7l8y().b[1521][0]++,n.tension)||(cov_2dj4df7l8y().b[1521][1]++,n.cubicInterpolationMode==="monotone"))&&(cov_2dj4df7l8y().b[1521][2]++,!n.stepped)&&(cov_2dj4df7l8y().b[1521][3]++,!this._pointsUpdated)){cov_2dj4df7l8y().b[1520][0]++;let o=(cov_2dj4df7l8y().s[3665]++,n.spanGaps?(cov_2dj4df7l8y().b[1522][0]++,this._loop):(cov_2dj4df7l8y().b[1522][1]++,this._fullLoop));cov_2dj4df7l8y().s[3666]++;Pn(this._points,n,t,o,s),this._pointsUpdated=!0;}else{cov_2dj4df7l8y().b[1520][1]++;}}set points(t){cov_2dj4df7l8y().f[1034]++;cov_2dj4df7l8y().s[3667]++;this._points=t,delete this._segments,delete this._path,this._pointsUpdated=!1;}get points(){cov_2dj4df7l8y().f[1035]++;cov_2dj4df7l8y().s[3668]++;return this._points;}get segments(){cov_2dj4df7l8y().f[1036]++;cov_2dj4df7l8y().s[3669]++;return(cov_2dj4df7l8y().b[1523][0]++,this._segments)||(cov_2dj4df7l8y().b[1523][1]++,this._segments=Rn(this,this.options.segment));}first(){cov_2dj4df7l8y().f[1037]++;let t=(cov_2dj4df7l8y().s[3670]++,this.segments),s=(cov_2dj4df7l8y().s[3671]++,this.points);cov_2dj4df7l8y().s[3672]++;return(cov_2dj4df7l8y().b[1524][0]++,t.length)&&(cov_2dj4df7l8y().b[1524][1]++,s[t[0].start]);}last(){cov_2dj4df7l8y().f[1038]++;let t=(cov_2dj4df7l8y().s[3673]++,this.segments),s=(cov_2dj4df7l8y().s[3674]++,this.points),n=(cov_2dj4df7l8y().s[3675]++,t.length);cov_2dj4df7l8y().s[3676]++;return(cov_2dj4df7l8y().b[1525][0]++,n)&&(cov_2dj4df7l8y().b[1525][1]++,s[t[n-1].end]);}interpolate(t,s){cov_2dj4df7l8y().f[1039]++;let n=(cov_2dj4df7l8y().s[3677]++,this.options),o=(cov_2dj4df7l8y().s[3678]++,t[s]),r=(cov_2dj4df7l8y().s[3679]++,this.points),a=(cov_2dj4df7l8y().s[3680]++,qi(this,{property:s,start:o,end:o}));cov_2dj4df7l8y().s[3681]++;if(!a.length){cov_2dj4df7l8y().b[1526][0]++;cov_2dj4df7l8y().s[3682]++;return;}else{cov_2dj4df7l8y().b[1526][1]++;}let l=(cov_2dj4df7l8y().s[3683]++,[]),c=(cov_2dj4df7l8y().s[3684]++,pc(n)),h,d;cov_2dj4df7l8y().s[3685]++;for(h=0,d=a.length;h{cov_2dj4df7l8y().f[1044]++;class e extends ot{static id=(cov_2dj4df7l8y().s[3711]++,"point");parsed;skip;stop;static defaults=(cov_2dj4df7l8y().s[3712]++,{borderWidth:1,hitRadius:1,hoverBorderWidth:1,hoverRadius:4,pointStyle:"circle",radius:3,rotation:0});static defaultRoutes=(cov_2dj4df7l8y().s[3713]++,{backgroundColor:"backgroundColor",borderColor:"borderColor"});constructor(t){cov_2dj4df7l8y().f[1045]++;cov_2dj4df7l8y().s[3714]++;super(),this.options=void 0,this.parsed=void 0,this.skip=void 0,this.stop=void 0,(cov_2dj4df7l8y().b[1535][0]++,t)&&(cov_2dj4df7l8y().b[1535][1]++,Object.assign(this,t));}inRange(t,s,n){cov_2dj4df7l8y().f[1046]++;let o=(cov_2dj4df7l8y().s[3715]++,this.options),{x:r,y:a}=(cov_2dj4df7l8y().s[3716]++,this.getProps(["x","y"],n));cov_2dj4df7l8y().s[3717]++;return Math.pow(t-r,2)+Math.pow(s-a,2){cov_2dj4df7l8y().f[1069]++;cov_2dj4df7l8y().s[3781]++;return e.replace("rgb(","rgba(").replace(")",", 0.5)");}));function qo(e){cov_2dj4df7l8y().f[1070]++;cov_2dj4df7l8y().s[3782]++;return vs[e%vs.length];}function Go(e){cov_2dj4df7l8y().f[1071]++;cov_2dj4df7l8y().s[3783]++;return co[e%co.length];}function Pc(e,i){cov_2dj4df7l8y().f[1072]++;cov_2dj4df7l8y().s[3784]++;return e.borderColor=qo(i),e.backgroundColor=Go(i),++i;}function Dc(e,i){cov_2dj4df7l8y().f[1073]++;cov_2dj4df7l8y().s[3785]++;return e.backgroundColor=e.data.map(()=>{cov_2dj4df7l8y().f[1074]++;cov_2dj4df7l8y().s[3786]++;return qo(i++);}),i;}function Oc(e,i){cov_2dj4df7l8y().f[1075]++;cov_2dj4df7l8y().s[3787]++;return e.backgroundColor=e.data.map(()=>{cov_2dj4df7l8y().f[1076]++;cov_2dj4df7l8y().s[3788]++;return Go(i++);}),i;}function Ac(e){cov_2dj4df7l8y().f[1077]++;let i=(cov_2dj4df7l8y().s[3789]++,0);cov_2dj4df7l8y().s[3790]++;return(t,s)=>{cov_2dj4df7l8y().f[1078]++;let n=(cov_2dj4df7l8y().s[3791]++,e.getDatasetMeta(s).controller);cov_2dj4df7l8y().s[3792]++;n instanceof Os?(cov_2dj4df7l8y().b[1564][0]++,i=Dc(t,i)):(cov_2dj4df7l8y().b[1564][1]++,n instanceof zo?(cov_2dj4df7l8y().b[1565][0]++,i=Oc(t,i)):(cov_2dj4df7l8y().b[1565][1]++,(cov_2dj4df7l8y().b[1566][0]++,n)&&(cov_2dj4df7l8y().b[1566][1]++,i=Pc(t,i))));};}function ho(e){cov_2dj4df7l8y().f[1079]++;let i;cov_2dj4df7l8y().s[3793]++;for(i in e){cov_2dj4df7l8y().s[3794]++;if((cov_2dj4df7l8y().b[1568][0]++,e[i].borderColor)||(cov_2dj4df7l8y().b[1568][1]++,e[i].backgroundColor)){cov_2dj4df7l8y().b[1567][0]++;cov_2dj4df7l8y().s[3795]++;return!0;}else{cov_2dj4df7l8y().b[1567][1]++;}}cov_2dj4df7l8y().s[3796]++;return!1;}function Tc(e){cov_2dj4df7l8y().f[1080]++;cov_2dj4df7l8y().s[3797]++;return(cov_2dj4df7l8y().b[1569][0]++,e)&&((cov_2dj4df7l8y().b[1569][1]++,e.borderColor)||(cov_2dj4df7l8y().b[1569][2]++,e.backgroundColor));}function Lc(){cov_2dj4df7l8y().f[1081]++;cov_2dj4df7l8y().s[3798]++;return(cov_2dj4df7l8y().b[1570][0]++,F.borderColor!=="rgba(0,0,0,0.1)")||(cov_2dj4df7l8y().b[1570][1]++,F.backgroundColor!=="rgba(0,0,0,0.1)");}var Rc=(cov_2dj4df7l8y().s[3799]++,{id:"colors",defaults:{enabled:!0,forceOverride:!1},beforeLayout(e,i,t){cov_2dj4df7l8y().f[1082]++;cov_2dj4df7l8y().s[3800]++;if(!t.enabled){cov_2dj4df7l8y().b[1571][0]++;cov_2dj4df7l8y().s[3801]++;return;}else{cov_2dj4df7l8y().b[1571][1]++;}let{data:{datasets:s},options:n}=(cov_2dj4df7l8y().s[3802]++,e.config),{elements:o}=(cov_2dj4df7l8y().s[3803]++,n),r=(cov_2dj4df7l8y().s[3804]++,(cov_2dj4df7l8y().b[1572][0]++,ho(s))||(cov_2dj4df7l8y().b[1572][1]++,Tc(n))||(cov_2dj4df7l8y().b[1572][2]++,o)&&(cov_2dj4df7l8y().b[1572][3]++,ho(o))||(cov_2dj4df7l8y().b[1572][4]++,Lc()));cov_2dj4df7l8y().s[3805]++;if((cov_2dj4df7l8y().b[1574][0]++,!t.forceOverride)&&(cov_2dj4df7l8y().b[1574][1]++,r)){cov_2dj4df7l8y().b[1573][0]++;cov_2dj4df7l8y().s[3806]++;return;}else{cov_2dj4df7l8y().b[1573][1]++;}let a=(cov_2dj4df7l8y().s[3807]++,Ac(e));cov_2dj4df7l8y().s[3808]++;s.forEach(a);}});function Ec(e,i,t,s,n){cov_2dj4df7l8y().f[1083]++;let o=(cov_2dj4df7l8y().s[3809]++,(cov_2dj4df7l8y().b[1575][0]++,n.samples)||(cov_2dj4df7l8y().b[1575][1]++,s));cov_2dj4df7l8y().s[3810]++;if(o>=t){cov_2dj4df7l8y().b[1576][0]++;cov_2dj4df7l8y().s[3811]++;return e.slice(i,i+t);}else{cov_2dj4df7l8y().b[1576][1]++;}let r=(cov_2dj4df7l8y().s[3812]++,[]),a=(cov_2dj4df7l8y().s[3813]++,(t-2)/(o-2)),l=(cov_2dj4df7l8y().s[3814]++,0),c=(cov_2dj4df7l8y().s[3815]++,i+t-1),h=(cov_2dj4df7l8y().s[3816]++,i),d,f,u,p,g;cov_2dj4df7l8y().s[3817]++;for(r[l++]=e[h],d=0;du)&&(cov_2dj4df7l8y().b[1577][1]++,u=p,f=e[x],g=x);}cov_2dj4df7l8y().s[3831]++;r[l++]=f,h=g;}cov_2dj4df7l8y().s[3832]++;return r[l++]=e[c],r;}function Ic(e,i,t,s){cov_2dj4df7l8y().f[1084]++;let n=(cov_2dj4df7l8y().s[3833]++,0),o=(cov_2dj4df7l8y().s[3834]++,0),r,a,l,c,h,d,f,u,p,g,m=(cov_2dj4df7l8y().s[3835]++,[]),b=(cov_2dj4df7l8y().s[3836]++,i+t-1),x=(cov_2dj4df7l8y().s[3837]++,e[i].x),M=(cov_2dj4df7l8y().s[3838]++,e[b].x-x);cov_2dj4df7l8y().s[3839]++;for(r=i;rg)&&(cov_2dj4df7l8y().b[1580][1]++,g=c,f=r)),n=(o*n+a.x)/++o;}else{cov_2dj4df7l8y().b[1578][1]++;let v=(cov_2dj4df7l8y().s[3844]++,r-1);cov_2dj4df7l8y().s[3845]++;if((cov_2dj4df7l8y().b[1582][0]++,!O(d))&&(cov_2dj4df7l8y().b[1582][1]++,!O(f))){cov_2dj4df7l8y().b[1581][0]++;let S=(cov_2dj4df7l8y().s[3846]++,Math.min(d,f)),k=(cov_2dj4df7l8y().s[3847]++,Math.max(d,f));cov_2dj4df7l8y().s[3848]++;(cov_2dj4df7l8y().b[1583][0]++,S!==u)&&(cov_2dj4df7l8y().b[1583][1]++,S!==v)&&(cov_2dj4df7l8y().b[1583][2]++,m.push(De(Pe({},e[S]),{x:n}))),(cov_2dj4df7l8y().b[1584][0]++,k!==u)&&(cov_2dj4df7l8y().b[1584][1]++,k!==v)&&(cov_2dj4df7l8y().b[1584][2]++,m.push(De(Pe({},e[k]),{x:n})));}else{cov_2dj4df7l8y().b[1581][1]++;}cov_2dj4df7l8y().s[3849]++;(cov_2dj4df7l8y().b[1585][0]++,r>0)&&(cov_2dj4df7l8y().b[1585][1]++,v!==u)&&(cov_2dj4df7l8y().b[1585][2]++,m.push(e[v])),m.push(a),h=_,o=0,p=g=c,d=f=u=r;}}cov_2dj4df7l8y().s[3850]++;return m;}function Jo(e){cov_2dj4df7l8y().f[1085]++;cov_2dj4df7l8y().s[3851]++;if(e._decimated){cov_2dj4df7l8y().b[1586][0]++;let i=(cov_2dj4df7l8y().s[3852]++,e._data);cov_2dj4df7l8y().s[3853]++;delete e._decimated,delete e._data,Object.defineProperty(e,"data",{configurable:!0,enumerable:!0,writable:!0,value:i});}else{cov_2dj4df7l8y().b[1586][1]++;}}function fo(e){cov_2dj4df7l8y().f[1086]++;cov_2dj4df7l8y().s[3854]++;e.data.datasets.forEach(i=>{cov_2dj4df7l8y().f[1087]++;cov_2dj4df7l8y().s[3855]++;Jo(i);});}function Fc(e,i){cov_2dj4df7l8y().f[1088]++;let t=(cov_2dj4df7l8y().s[3856]++,i.length),s=(cov_2dj4df7l8y().s[3857]++,0),n,{iScale:o}=(cov_2dj4df7l8y().s[3858]++,e),{min:r,max:a,minDefined:l,maxDefined:c}=(cov_2dj4df7l8y().s[3859]++,o.getUserBounds());cov_2dj4df7l8y().s[3860]++;return(cov_2dj4df7l8y().b[1587][0]++,l)&&(cov_2dj4df7l8y().b[1587][1]++,s=Y(rt(i,o.axis,r).lo,0,t-1)),c?(cov_2dj4df7l8y().b[1588][0]++,n=Y(rt(i,o.axis,a).hi+1,s,t)-s):(cov_2dj4df7l8y().b[1588][1]++,n=t-s),{start:s,count:n};}var zc=(cov_2dj4df7l8y().s[3861]++,{id:"decimation",defaults:{algorithm:"min-max",enabled:!1},beforeElementsUpdate:(e,i,t)=>{cov_2dj4df7l8y().f[1089]++;cov_2dj4df7l8y().s[3862]++;if(!t.enabled){cov_2dj4df7l8y().b[1589][0]++;cov_2dj4df7l8y().s[3863]++;fo(e);cov_2dj4df7l8y().s[3864]++;return;}else{cov_2dj4df7l8y().b[1589][1]++;}let s=(cov_2dj4df7l8y().s[3865]++,e.width);cov_2dj4df7l8y().s[3866]++;e.data.datasets.forEach((n,o)=>{cov_2dj4df7l8y().f[1090]++;let{_data:r,indexAxis:a}=(cov_2dj4df7l8y().s[3867]++,n),l=(cov_2dj4df7l8y().s[3868]++,e.getDatasetMeta(o)),c=(cov_2dj4df7l8y().s[3869]++,(cov_2dj4df7l8y().b[1590][0]++,r)||(cov_2dj4df7l8y().b[1590][1]++,n.data));cov_2dj4df7l8y().s[3870]++;if((cov_2dj4df7l8y().b[1592][0]++,te([a,e.options.indexAxis])==="y")||(cov_2dj4df7l8y().b[1592][1]++,!l.controller.supportsDecimation)){cov_2dj4df7l8y().b[1591][0]++;cov_2dj4df7l8y().s[3871]++;return;}else{cov_2dj4df7l8y().b[1591][1]++;}let h=(cov_2dj4df7l8y().s[3872]++,e.scales[l.xAxisID]);cov_2dj4df7l8y().s[3873]++;if((cov_2dj4df7l8y().b[1594][0]++,h.type!=="linear")&&(cov_2dj4df7l8y().b[1594][1]++,h.type!=="time")||(cov_2dj4df7l8y().b[1594][2]++,e.options.parsing)){cov_2dj4df7l8y().b[1593][0]++;cov_2dj4df7l8y().s[3874]++;return;}else{cov_2dj4df7l8y().b[1593][1]++;}let{start:d,count:f}=(cov_2dj4df7l8y().s[3875]++,Fc(l,c)),u=(cov_2dj4df7l8y().s[3876]++,(cov_2dj4df7l8y().b[1595][0]++,t.threshold)||(cov_2dj4df7l8y().b[1595][1]++,4*s));cov_2dj4df7l8y().s[3877]++;if(f<=u){cov_2dj4df7l8y().b[1596][0]++;cov_2dj4df7l8y().s[3878]++;Jo(n);cov_2dj4df7l8y().s[3879]++;return;}else{cov_2dj4df7l8y().b[1596][1]++;}cov_2dj4df7l8y().s[3880]++;(cov_2dj4df7l8y().b[1597][0]++,O(r))&&(cov_2dj4df7l8y().b[1597][1]++,n._data=c,delete n.data,Object.defineProperty(n,"data",{configurable:!0,enumerable:!0,get:function(){cov_2dj4df7l8y().f[1091]++;cov_2dj4df7l8y().s[3881]++;return this._decimated;},set:function(g){cov_2dj4df7l8y().f[1092]++;cov_2dj4df7l8y().s[3882]++;this._data=g;}}));let p;cov_2dj4df7l8y().s[3883]++;switch(t.algorithm){case"lttb":cov_2dj4df7l8y().b[1598][0]++;cov_2dj4df7l8y().s[3884]++;p=Ec(c,d,f,s,t);cov_2dj4df7l8y().s[3885]++;break;case"min-max":cov_2dj4df7l8y().b[1598][1]++;cov_2dj4df7l8y().s[3886]++;p=Ic(c,d,f,s);cov_2dj4df7l8y().s[3887]++;break;default:cov_2dj4df7l8y().b[1598][2]++;cov_2dj4df7l8y().s[3888]++;throw new Error(`Unsupported decimation algorithm '${t.algorithm}'`);}cov_2dj4df7l8y().s[3889]++;n._decimated=p;});},destroy(e){cov_2dj4df7l8y().f[1093]++;cov_2dj4df7l8y().s[3890]++;fo(e);}});function Bc(e,i,t){cov_2dj4df7l8y().f[1094]++;let s=(cov_2dj4df7l8y().s[3891]++,e.segments),n=(cov_2dj4df7l8y().s[3892]++,e.points),o=(cov_2dj4df7l8y().s[3893]++,i.points),r=(cov_2dj4df7l8y().s[3894]++,[]);cov_2dj4df7l8y().s[3895]++;for(let a of s){let{start:l,end:c}=(cov_2dj4df7l8y().s[3896]++,a);cov_2dj4df7l8y().s[3897]++;c=fi(l,c,n);let h=(cov_2dj4df7l8y().s[3898]++,Ms(t,n[l],n[c],a.loop));cov_2dj4df7l8y().s[3899]++;if(!i.segments){cov_2dj4df7l8y().b[1599][0]++;cov_2dj4df7l8y().s[3900]++;r.push({source:a,target:h,start:n[l],end:n[c]});cov_2dj4df7l8y().s[3901]++;continue;}else{cov_2dj4df7l8y().b[1599][1]++;}let d=(cov_2dj4df7l8y().s[3902]++,qi(i,h));cov_2dj4df7l8y().s[3903]++;for(let f of d){let u=(cov_2dj4df7l8y().s[3904]++,Ms(t,o[f.start],o[f.end],f.loop)),p=(cov_2dj4df7l8y().s[3905]++,Ki(a,n,u));cov_2dj4df7l8y().s[3906]++;for(let g of p){cov_2dj4df7l8y().s[3907]++;r.push({source:g,target:f,start:{[t]:uo(h,u,"start",Math.max)},end:{[t]:uo(h,u,"end",Math.min)}});}}}cov_2dj4df7l8y().s[3908]++;return r;}function Ms(e,i,t,s){cov_2dj4df7l8y().f[1095]++;cov_2dj4df7l8y().s[3909]++;if(s){cov_2dj4df7l8y().b[1600][0]++;cov_2dj4df7l8y().s[3910]++;return;}else{cov_2dj4df7l8y().b[1600][1]++;}let n=(cov_2dj4df7l8y().s[3911]++,i[e]),o=(cov_2dj4df7l8y().s[3912]++,t[e]);cov_2dj4df7l8y().s[3913]++;return(cov_2dj4df7l8y().b[1601][0]++,e==="angle")&&(cov_2dj4df7l8y().b[1601][1]++,n=U(n),o=U(o)),{property:e,start:n,end:o};}function Wc(e,i){cov_2dj4df7l8y().f[1096]++;let{x:t=(cov_2dj4df7l8y().b[1602][0]++,null),y:s=(cov_2dj4df7l8y().b[1603][0]++,null)}=(cov_2dj4df7l8y().s[3914]++,(cov_2dj4df7l8y().b[1604][0]++,e)||(cov_2dj4df7l8y().b[1604][1]++,{})),n=(cov_2dj4df7l8y().s[3915]++,i.points),o=(cov_2dj4df7l8y().s[3916]++,[]);cov_2dj4df7l8y().s[3917]++;return i.segments.forEach(({start:r,end:a})=>{cov_2dj4df7l8y().f[1097]++;cov_2dj4df7l8y().s[3918]++;a=fi(r,a,n);let l=(cov_2dj4df7l8y().s[3919]++,n[r]),c=(cov_2dj4df7l8y().s[3920]++,n[a]);cov_2dj4df7l8y().s[3921]++;s!==null?(cov_2dj4df7l8y().b[1605][0]++,o.push({x:l.x,y:s}),o.push({x:c.x,y:s})):(cov_2dj4df7l8y().b[1605][1]++,(cov_2dj4df7l8y().b[1606][0]++,t!==null)&&(cov_2dj4df7l8y().b[1606][1]++,o.push({x:t,y:l.y}),o.push({x:t,y:c.y})));}),o;}function fi(e,i,t){cov_2dj4df7l8y().f[1098]++;cov_2dj4df7l8y().s[3922]++;for(;i>e;i--){let s=(cov_2dj4df7l8y().s[3923]++,t[i]);cov_2dj4df7l8y().s[3924]++;if((cov_2dj4df7l8y().b[1608][0]++,!isNaN(s.x))&&(cov_2dj4df7l8y().b[1608][1]++,!isNaN(s.y))){cov_2dj4df7l8y().b[1607][0]++;cov_2dj4df7l8y().s[3925]++;break;}else{cov_2dj4df7l8y().b[1607][1]++;}}cov_2dj4df7l8y().s[3926]++;return i;}function uo(e,i,t,s){cov_2dj4df7l8y().f[1099]++;cov_2dj4df7l8y().s[3927]++;return(cov_2dj4df7l8y().b[1610][0]++,e)&&(cov_2dj4df7l8y().b[1610][1]++,i)?(cov_2dj4df7l8y().b[1609][0]++,s(e[t],i[t])):(cov_2dj4df7l8y().b[1609][1]++,e?(cov_2dj4df7l8y().b[1611][0]++,e[t]):(cov_2dj4df7l8y().b[1611][1]++,i?(cov_2dj4df7l8y().b[1612][0]++,i[t]):(cov_2dj4df7l8y().b[1612][1]++,0)));}function Zo(e,i){cov_2dj4df7l8y().f[1100]++;let t=(cov_2dj4df7l8y().s[3928]++,[]),s=(cov_2dj4df7l8y().s[3929]++,!1);cov_2dj4df7l8y().s[3930]++;return z(e)?(cov_2dj4df7l8y().b[1613][0]++,s=!0,t=e):(cov_2dj4df7l8y().b[1613][1]++,t=Wc(e,i)),t.length?(cov_2dj4df7l8y().b[1614][0]++,new di({points:t,options:{tension:0},_loop:s,_fullLoop:s})):(cov_2dj4df7l8y().b[1614][1]++,null);}function go(e){cov_2dj4df7l8y().f[1101]++;cov_2dj4df7l8y().s[3931]++;return(cov_2dj4df7l8y().b[1615][0]++,e)&&(cov_2dj4df7l8y().b[1615][1]++,e.fill!==!1);}function Nc(e,i,t){cov_2dj4df7l8y().f[1102]++;let n=(cov_2dj4df7l8y().s[3932]++,e[i].fill),o=(cov_2dj4df7l8y().s[3933]++,[i]),r;cov_2dj4df7l8y().s[3934]++;if(!t){cov_2dj4df7l8y().b[1616][0]++;cov_2dj4df7l8y().s[3935]++;return n;}else{cov_2dj4df7l8y().b[1616][1]++;}cov_2dj4df7l8y().s[3936]++;for(;(cov_2dj4df7l8y().b[1617][0]++,n!==!1)&&(cov_2dj4df7l8y().b[1617][1]++,o.indexOf(n)===-1);){cov_2dj4df7l8y().s[3937]++;if(!N(n)){cov_2dj4df7l8y().b[1618][0]++;cov_2dj4df7l8y().s[3938]++;return n;}else{cov_2dj4df7l8y().b[1618][1]++;}cov_2dj4df7l8y().s[3939]++;if(r=e[n],!r){cov_2dj4df7l8y().b[1619][0]++;cov_2dj4df7l8y().s[3940]++;return!1;}else{cov_2dj4df7l8y().b[1619][1]++;}cov_2dj4df7l8y().s[3941]++;if(r.visible){cov_2dj4df7l8y().b[1620][0]++;cov_2dj4df7l8y().s[3942]++;return n;}else{cov_2dj4df7l8y().b[1620][1]++;}cov_2dj4df7l8y().s[3943]++;o.push(n),n=r.fill;}cov_2dj4df7l8y().s[3944]++;return!1;}function Vc(e,i,t){cov_2dj4df7l8y().f[1103]++;let s=(cov_2dj4df7l8y().s[3945]++,$c(e));cov_2dj4df7l8y().s[3946]++;if(A(s)){cov_2dj4df7l8y().b[1621][0]++;cov_2dj4df7l8y().s[3947]++;return isNaN(s.value)?(cov_2dj4df7l8y().b[1622][0]++,!1):(cov_2dj4df7l8y().b[1622][1]++,s);}else{cov_2dj4df7l8y().b[1621][1]++;}let n=(cov_2dj4df7l8y().s[3948]++,parseFloat(s));cov_2dj4df7l8y().s[3949]++;return(cov_2dj4df7l8y().b[1624][0]++,N(n))&&(cov_2dj4df7l8y().b[1624][1]++,Math.floor(n)===n)?(cov_2dj4df7l8y().b[1623][0]++,Hc(s[0],i,n,t)):(cov_2dj4df7l8y().b[1623][1]++,(cov_2dj4df7l8y().b[1625][0]++,["origin","start","end","stack","shape"].indexOf(s)>=0)&&(cov_2dj4df7l8y().b[1625][1]++,s));}function Hc(e,i,t,s){cov_2dj4df7l8y().f[1104]++;cov_2dj4df7l8y().s[3950]++;return((cov_2dj4df7l8y().b[1626][0]++,e==="-")||(cov_2dj4df7l8y().b[1626][1]++,e==="+"))&&(cov_2dj4df7l8y().b[1626][2]++,t=i+t),(cov_2dj4df7l8y().b[1628][0]++,t===i)||(cov_2dj4df7l8y().b[1628][1]++,t<0)||(cov_2dj4df7l8y().b[1628][2]++,t>=s)?(cov_2dj4df7l8y().b[1627][0]++,!1):(cov_2dj4df7l8y().b[1627][1]++,t);}function jc(e,i){cov_2dj4df7l8y().f[1105]++;let t=(cov_2dj4df7l8y().s[3951]++,null);cov_2dj4df7l8y().s[3952]++;return e==="start"?(cov_2dj4df7l8y().b[1629][0]++,t=i.bottom):(cov_2dj4df7l8y().b[1629][1]++,e==="end"?(cov_2dj4df7l8y().b[1630][0]++,t=i.top):(cov_2dj4df7l8y().b[1630][1]++,A(e)?(cov_2dj4df7l8y().b[1631][0]++,t=i.getPixelForValue(e.value)):(cov_2dj4df7l8y().b[1631][1]++,(cov_2dj4df7l8y().b[1632][0]++,i.getBasePixel)&&(cov_2dj4df7l8y().b[1632][1]++,t=i.getBasePixel())))),t;}function Yc(e,i,t){cov_2dj4df7l8y().f[1106]++;let s;cov_2dj4df7l8y().s[3953]++;return e==="start"?(cov_2dj4df7l8y().b[1633][0]++,s=t):(cov_2dj4df7l8y().b[1633][1]++,e==="end"?(cov_2dj4df7l8y().b[1634][0]++,s=i.options.reverse?(cov_2dj4df7l8y().b[1635][0]++,i.min):(cov_2dj4df7l8y().b[1635][1]++,i.max)):(cov_2dj4df7l8y().b[1634][1]++,A(e)?(cov_2dj4df7l8y().b[1636][0]++,s=e.value):(cov_2dj4df7l8y().b[1636][1]++,s=i.getBaseValue()))),s;}function $c(e){cov_2dj4df7l8y().f[1107]++;let i=(cov_2dj4df7l8y().s[3954]++,e.options),t=(cov_2dj4df7l8y().s[3955]++,i.fill),s=(cov_2dj4df7l8y().s[3956]++,C((cov_2dj4df7l8y().b[1637][0]++,t)&&(cov_2dj4df7l8y().b[1637][1]++,t.target),t));cov_2dj4df7l8y().s[3957]++;return(cov_2dj4df7l8y().b[1638][0]++,s===void 0)&&(cov_2dj4df7l8y().b[1638][1]++,s=!!i.backgroundColor),(cov_2dj4df7l8y().b[1640][0]++,s===!1)||(cov_2dj4df7l8y().b[1640][1]++,s===null)?(cov_2dj4df7l8y().b[1639][0]++,!1):(cov_2dj4df7l8y().b[1639][1]++,s===!0?(cov_2dj4df7l8y().b[1641][0]++,"origin"):(cov_2dj4df7l8y().b[1641][1]++,s));}function Uc(e){cov_2dj4df7l8y().f[1108]++;let{scale:i,index:t,line:s}=(cov_2dj4df7l8y().s[3958]++,e),n=(cov_2dj4df7l8y().s[3959]++,[]),o=(cov_2dj4df7l8y().s[3960]++,s.segments),r=(cov_2dj4df7l8y().s[3961]++,s.points),a=(cov_2dj4df7l8y().s[3962]++,Xc(i,t));cov_2dj4df7l8y().s[3963]++;a.push(Zo({x:null,y:i.bottom},s));cov_2dj4df7l8y().s[3964]++;for(let l=(cov_2dj4df7l8y().s[3965]++,0);l=0;--r){let a=(cov_2dj4df7l8y().s[4110]++,n[r].$filler);cov_2dj4df7l8y().s[4111]++;(cov_2dj4df7l8y().b[1695][0]++,a)&&(cov_2dj4df7l8y().b[1695][1]++,a.line.updateControlPoints(o,a.axis),(cov_2dj4df7l8y().b[1696][0]++,s)&&(cov_2dj4df7l8y().b[1696][1]++,a.fill)&&(cov_2dj4df7l8y().b[1696][2]++,rs(e.ctx,a,o)));}},beforeDatasetsDraw(e,i,t){cov_2dj4df7l8y().f[1129]++;cov_2dj4df7l8y().s[4112]++;if(t.drawTime!=="beforeDatasetsDraw"){cov_2dj4df7l8y().b[1697][0]++;cov_2dj4df7l8y().s[4113]++;return;}else{cov_2dj4df7l8y().b[1697][1]++;}let s=(cov_2dj4df7l8y().s[4114]++,e.getSortedVisibleDatasetMetas());cov_2dj4df7l8y().s[4115]++;for(let n=(cov_2dj4df7l8y().s[4116]++,s.length-1);n>=0;--n){let o=(cov_2dj4df7l8y().s[4117]++,s[n].$filler);cov_2dj4df7l8y().s[4118]++;(cov_2dj4df7l8y().b[1698][0]++,go(o))&&(cov_2dj4df7l8y().b[1698][1]++,rs(e.ctx,o,e.chartArea));}},beforeDatasetDraw(e,i,t){cov_2dj4df7l8y().f[1130]++;let s=(cov_2dj4df7l8y().s[4119]++,i.meta.$filler);cov_2dj4df7l8y().s[4120]++;(cov_2dj4df7l8y().b[1699][0]++,!go(s))||(cov_2dj4df7l8y().b[1699][1]++,t.drawTime!=="beforeDatasetDraw")||(cov_2dj4df7l8y().b[1699][2]++,rs(e.ctx,s,e.chartArea));},defaults:{propagate:!0,drawTime:"beforeDatasetDraw"}}),xo=(e,i)=>{cov_2dj4df7l8y().f[1131]++;let{boxHeight:t=(cov_2dj4df7l8y().b[1700][0]++,i),boxWidth:s=(cov_2dj4df7l8y().b[1701][0]++,i)}=(cov_2dj4df7l8y().s[4122]++,e);cov_2dj4df7l8y().s[4123]++;return(cov_2dj4df7l8y().b[1702][0]++,e.usePointStyle)&&(cov_2dj4df7l8y().b[1702][1]++,t=Math.min(t,i),s=(cov_2dj4df7l8y().b[1703][0]++,e.pointStyleWidth)||(cov_2dj4df7l8y().b[1703][1]++,Math.min(s,i))),{boxWidth:s,boxHeight:t,itemHeight:Math.max(i,t)};},nh=(e,i)=>{cov_2dj4df7l8y().f[1132]++;cov_2dj4df7l8y().s[4125]++;return(cov_2dj4df7l8y().b[1704][0]++,e!==null)&&(cov_2dj4df7l8y().b[1704][1]++,i!==null)&&(cov_2dj4df7l8y().b[1704][2]++,e.datasetIndex===i.datasetIndex)&&(cov_2dj4df7l8y().b[1704][3]++,e.index===i.index);},ci=class extends ot{constructor(i){cov_2dj4df7l8y().f[1133]++;cov_2dj4df7l8y().s[4127]++;super(),this._added=!1,this.legendHitBoxes=[],this._hoveredItem=null,this.doughnutMode=!1,this.chart=i.chart,this.options=i.options,this.ctx=i.ctx,this.legendItems=void 0,this.columnSizes=void 0,this.lineWidths=void 0,this.maxHeight=void 0,this.maxWidth=void 0,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.height=void 0,this.width=void 0,this._margins=void 0,this.position=void 0,this.weight=void 0,this.fullSize=void 0;}update(i,t,s){cov_2dj4df7l8y().f[1134]++;cov_2dj4df7l8y().s[4128]++;this.maxWidth=i,this.maxHeight=t,this._margins=s,this.setDimensions(),this.buildLabels(),this.fit();}setDimensions(){cov_2dj4df7l8y().f[1135]++;cov_2dj4df7l8y().s[4129]++;this.isHorizontal()?(cov_2dj4df7l8y().b[1705][0]++,this.width=this.maxWidth,this.left=this._margins.left,this.right=this.width):(cov_2dj4df7l8y().b[1705][1]++,this.height=this.maxHeight,this.top=this._margins.top,this.bottom=this.height);}buildLabels(){cov_2dj4df7l8y().f[1136]++;let i=(cov_2dj4df7l8y().s[4130]++,(cov_2dj4df7l8y().b[1706][0]++,this.options.labels)||(cov_2dj4df7l8y().b[1706][1]++,{})),t=(cov_2dj4df7l8y().s[4131]++,(cov_2dj4df7l8y().b[1707][0]++,I(i.generateLabels,[this.chart],this))||(cov_2dj4df7l8y().b[1707][1]++,[]));cov_2dj4df7l8y().s[4132]++;(cov_2dj4df7l8y().b[1708][0]++,i.filter)&&(cov_2dj4df7l8y().b[1708][1]++,t=t.filter(s=>{cov_2dj4df7l8y().f[1137]++;cov_2dj4df7l8y().s[4133]++;return i.filter(s,this.chart.data);})),(cov_2dj4df7l8y().b[1709][0]++,i.sort)&&(cov_2dj4df7l8y().b[1709][1]++,t=t.sort((s,n)=>{cov_2dj4df7l8y().f[1138]++;cov_2dj4df7l8y().s[4134]++;return i.sort(s,n,this.chart.data);})),(cov_2dj4df7l8y().b[1710][0]++,this.options.reverse)&&(cov_2dj4df7l8y().b[1710][1]++,t.reverse()),this.legendItems=t;}fit(){cov_2dj4df7l8y().f[1139]++;let{options:i,ctx:t}=(cov_2dj4df7l8y().s[4135]++,this);cov_2dj4df7l8y().s[4136]++;if(!i.display){cov_2dj4df7l8y().b[1711][0]++;cov_2dj4df7l8y().s[4137]++;this.width=this.height=0;cov_2dj4df7l8y().s[4138]++;return;}else{cov_2dj4df7l8y().b[1711][1]++;}let s=(cov_2dj4df7l8y().s[4139]++,i.labels),n=(cov_2dj4df7l8y().s[4140]++,j(s.font)),o=(cov_2dj4df7l8y().s[4141]++,n.size),r=(cov_2dj4df7l8y().s[4142]++,this._computeTitleHeight()),{boxWidth:a,itemHeight:l}=(cov_2dj4df7l8y().s[4143]++,xo(s,o)),c,h;cov_2dj4df7l8y().s[4144]++;t.font=n.string,this.isHorizontal()?(cov_2dj4df7l8y().b[1712][0]++,c=this.maxWidth,h=this._fitRows(r,o,a,l)+10):(cov_2dj4df7l8y().b[1712][1]++,h=this.maxHeight,c=this._fitCols(r,n,a,l)+10),this.width=Math.min(c,(cov_2dj4df7l8y().b[1713][0]++,i.maxWidth)||(cov_2dj4df7l8y().b[1713][1]++,this.maxWidth)),this.height=Math.min(h,(cov_2dj4df7l8y().b[1714][0]++,i.maxHeight)||(cov_2dj4df7l8y().b[1714][1]++,this.maxHeight));}_fitRows(i,t,s,n){cov_2dj4df7l8y().f[1140]++;let{ctx:o,maxWidth:r,options:{labels:{padding:a}}}=(cov_2dj4df7l8y().s[4145]++,this),l=(cov_2dj4df7l8y().s[4146]++,this.legendHitBoxes=[]),c=(cov_2dj4df7l8y().s[4147]++,this.lineWidths=[0]),h=(cov_2dj4df7l8y().s[4148]++,n+a),d=(cov_2dj4df7l8y().s[4149]++,i);cov_2dj4df7l8y().s[4150]++;o.textAlign="left",o.textBaseline="middle";let f=(cov_2dj4df7l8y().s[4151]++,-1),u=(cov_2dj4df7l8y().s[4152]++,-h);cov_2dj4df7l8y().s[4153]++;return this.legendItems.forEach((p,g)=>{cov_2dj4df7l8y().f[1141]++;let m=(cov_2dj4df7l8y().s[4154]++,s+t/2+o.measureText(p.text).width);cov_2dj4df7l8y().s[4155]++;((cov_2dj4df7l8y().b[1715][0]++,g===0)||(cov_2dj4df7l8y().b[1715][1]++,c[c.length-1]+m+2*a>r))&&(cov_2dj4df7l8y().b[1715][2]++,d+=h,c[c.length-(g>0?(cov_2dj4df7l8y().b[1716][0]++,0):(cov_2dj4df7l8y().b[1716][1]++,1))]=0,u+=h,f++),l[g]={left:0,top:u,row:f,width:m,height:n},c[c.length-1]+=m+a;}),d;}_fitCols(i,t,s,n){cov_2dj4df7l8y().f[1142]++;let{ctx:o,maxHeight:r,options:{labels:{padding:a}}}=(cov_2dj4df7l8y().s[4156]++,this),l=(cov_2dj4df7l8y().s[4157]++,this.legendHitBoxes=[]),c=(cov_2dj4df7l8y().s[4158]++,this.columnSizes=[]),h=(cov_2dj4df7l8y().s[4159]++,r-i),d=(cov_2dj4df7l8y().s[4160]++,a),f=(cov_2dj4df7l8y().s[4161]++,0),u=(cov_2dj4df7l8y().s[4162]++,0),p=(cov_2dj4df7l8y().s[4163]++,0),g=(cov_2dj4df7l8y().s[4164]++,0);cov_2dj4df7l8y().s[4165]++;return this.legendItems.forEach((m,b)=>{cov_2dj4df7l8y().f[1143]++;let{itemWidth:x,itemHeight:y}=(cov_2dj4df7l8y().s[4166]++,oh(s,t,o,m,n));cov_2dj4df7l8y().s[4167]++;(cov_2dj4df7l8y().b[1717][0]++,b>0)&&(cov_2dj4df7l8y().b[1717][1]++,u+y+2*a>h)&&(cov_2dj4df7l8y().b[1717][2]++,d+=f+a,c.push({width:f,height:u}),p+=f+a,g++,f=u=0),l[b]={left:p,top:u,col:g,width:x,height:y},f=Math.max(f,x),u+=y+a;}),d+=f,c.push({width:f,height:u}),d;}adjustHitBoxes(){cov_2dj4df7l8y().f[1144]++;cov_2dj4df7l8y().s[4168]++;if(!this.options.display){cov_2dj4df7l8y().b[1718][0]++;cov_2dj4df7l8y().s[4169]++;return;}else{cov_2dj4df7l8y().b[1718][1]++;}let i=(cov_2dj4df7l8y().s[4170]++,this._computeTitleHeight()),{legendHitBoxes:t,options:{align:s,labels:{padding:n},rtl:o}}=(cov_2dj4df7l8y().s[4171]++,this),r=(cov_2dj4df7l8y().s[4172]++,Ft(o,this.left,this.width));cov_2dj4df7l8y().s[4173]++;if(this.isHorizontal()){cov_2dj4df7l8y().b[1719][0]++;let a=(cov_2dj4df7l8y().s[4174]++,0),l=(cov_2dj4df7l8y().s[4175]++,X(s,this.left+n,this.right-this.lineWidths[a]));cov_2dj4df7l8y().s[4176]++;for(let c of t){cov_2dj4df7l8y().s[4177]++;(cov_2dj4df7l8y().b[1720][0]++,a!==c.row)&&(cov_2dj4df7l8y().b[1720][1]++,a=c.row,l=X(s,this.left+n,this.right-this.lineWidths[a])),c.top+=this.top+i+n,c.left=r.leftForLtr(r.x(l),c.width),l+=c.width+n;}}else{cov_2dj4df7l8y().b[1719][1]++;let a=(cov_2dj4df7l8y().s[4178]++,0),l=(cov_2dj4df7l8y().s[4179]++,X(s,this.top+i+n,this.bottom-this.columnSizes[a].height));cov_2dj4df7l8y().s[4180]++;for(let c of t){cov_2dj4df7l8y().s[4181]++;(cov_2dj4df7l8y().b[1721][0]++,c.col!==a)&&(cov_2dj4df7l8y().b[1721][1]++,a=c.col,l=X(s,this.top+i+n,this.bottom-this.columnSizes[a].height)),c.top=l,c.left+=this.left+n,c.left=r.leftForLtr(r.x(c.left),c.width),l+=c.height+n;}}}isHorizontal(){cov_2dj4df7l8y().f[1145]++;cov_2dj4df7l8y().s[4182]++;return(cov_2dj4df7l8y().b[1722][0]++,this.options.position==="top")||(cov_2dj4df7l8y().b[1722][1]++,this.options.position==="bottom");}draw(){cov_2dj4df7l8y().f[1146]++;cov_2dj4df7l8y().s[4183]++;if(this.options.display){cov_2dj4df7l8y().b[1723][0]++;let i=(cov_2dj4df7l8y().s[4184]++,this.ctx);cov_2dj4df7l8y().s[4185]++;ue(i,this),this._draw(),ge(i);}else{cov_2dj4df7l8y().b[1723][1]++;}}_draw(){cov_2dj4df7l8y().f[1147]++;let{options:i,columnSizes:t,lineWidths:s,ctx:n}=(cov_2dj4df7l8y().s[4186]++,this),{align:o,labels:r}=(cov_2dj4df7l8y().s[4187]++,i),a=(cov_2dj4df7l8y().s[4188]++,F.color),l=(cov_2dj4df7l8y().s[4189]++,Ft(i.rtl,this.left,this.width)),c=(cov_2dj4df7l8y().s[4190]++,j(r.font)),{padding:h}=(cov_2dj4df7l8y().s[4191]++,r),d=(cov_2dj4df7l8y().s[4192]++,c.size),f=(cov_2dj4df7l8y().s[4193]++,d/2),u;cov_2dj4df7l8y().s[4194]++;this.drawTitle(),n.textAlign=l.textAlign("left"),n.textBaseline="middle",n.lineWidth=.5,n.font=c.string;cov_2dj4df7l8y().s[4196]++;cov_2dj4df7l8y().s[4212]++;let{boxWidth:p,boxHeight:g,itemHeight:m}=(cov_2dj4df7l8y().s[4195]++,xo(r,d)),b=function(v,S,k){cov_2dj4df7l8y().f[1148]++;cov_2dj4df7l8y().s[4197]++;if((cov_2dj4df7l8y().b[1725][0]++,isNaN(p))||(cov_2dj4df7l8y().b[1725][1]++,p<=0)||(cov_2dj4df7l8y().b[1725][2]++,isNaN(g))||(cov_2dj4df7l8y().b[1725][3]++,g<0)){cov_2dj4df7l8y().b[1724][0]++;cov_2dj4df7l8y().s[4198]++;return;}else{cov_2dj4df7l8y().b[1724][1]++;}cov_2dj4df7l8y().s[4199]++;n.save();let w=(cov_2dj4df7l8y().s[4200]++,C(k.lineWidth,1));cov_2dj4df7l8y().s[4201]++;if(n.fillStyle=C(k.fillStyle,a),n.lineCap=C(k.lineCap,"butt"),n.lineDashOffset=C(k.lineDashOffset,0),n.lineJoin=C(k.lineJoin,"miter"),n.lineWidth=w,n.strokeStyle=C(k.strokeStyle,a),n.setLineDash(C(k.lineDash,[])),r.usePointStyle){cov_2dj4df7l8y().b[1726][0]++;let D=(cov_2dj4df7l8y().s[4202]++,{radius:g*Math.SQRT2/2,pointStyle:k.pointStyle,rotation:k.rotation,borderWidth:w}),P=(cov_2dj4df7l8y().s[4203]++,l.xPlus(v,p/2)),T=(cov_2dj4df7l8y().s[4204]++,S+f);cov_2dj4df7l8y().s[4205]++;Bi(n,D,P,T,(cov_2dj4df7l8y().b[1727][0]++,r.pointStyleWidth)&&(cov_2dj4df7l8y().b[1727][1]++,p));}else{cov_2dj4df7l8y().b[1726][1]++;let D=(cov_2dj4df7l8y().s[4206]++,S+Math.max((d-g)/2,0)),P=(cov_2dj4df7l8y().s[4207]++,l.leftForLtr(v,p)),T=(cov_2dj4df7l8y().s[4208]++,Ct(k.borderRadius));cov_2dj4df7l8y().s[4209]++;n.beginPath(),Object.values(T).some($=>{cov_2dj4df7l8y().f[1149]++;cov_2dj4df7l8y().s[4210]++;return $!==0;})?(cov_2dj4df7l8y().b[1728][0]++,Qt(n,{x:P,y:D,w:p,h:g,radius:T})):(cov_2dj4df7l8y().b[1728][1]++,n.rect(P,D,p,g)),n.fill(),(cov_2dj4df7l8y().b[1729][0]++,w!==0)&&(cov_2dj4df7l8y().b[1729][1]++,n.stroke());}cov_2dj4df7l8y().s[4211]++;n.restore();},x=function(v,S,k){cov_2dj4df7l8y().f[1150]++;cov_2dj4df7l8y().s[4213]++;wt(n,k.text,v,S+m/2,c,{strikethrough:k.hidden,textAlign:l.textAlign(k.textAlign)});},y=(cov_2dj4df7l8y().s[4214]++,this.isHorizontal()),M=(cov_2dj4df7l8y().s[4215]++,this._computeTitleHeight());cov_2dj4df7l8y().s[4216]++;y?(cov_2dj4df7l8y().b[1730][0]++,u={x:X(o,this.left+h,this.right-s[0]),y:this.top+h+M,line:0}):(cov_2dj4df7l8y().b[1730][1]++,u={x:this.left+h,y:X(o,this.top+M+h,this.bottom-t[0].height),line:0}),Ui(this.ctx,i.textDirection);let _=(cov_2dj4df7l8y().s[4217]++,m+h);cov_2dj4df7l8y().s[4218]++;this.legendItems.forEach((v,S)=>{cov_2dj4df7l8y().f[1151]++;cov_2dj4df7l8y().s[4219]++;n.strokeStyle=v.fontColor,n.fillStyle=v.fontColor;let k=(cov_2dj4df7l8y().s[4220]++,n.measureText(v.text).width),w=(cov_2dj4df7l8y().s[4221]++,l.textAlign((cov_2dj4df7l8y().b[1731][0]++,v.textAlign)||(cov_2dj4df7l8y().b[1731][1]++,v.textAlign=r.textAlign))),D=(cov_2dj4df7l8y().s[4222]++,p+f+k),P=(cov_2dj4df7l8y().s[4223]++,u.x),T=(cov_2dj4df7l8y().s[4224]++,u.y);cov_2dj4df7l8y().s[4225]++;l.setWidth(this.width),y?(cov_2dj4df7l8y().b[1732][0]++,(cov_2dj4df7l8y().b[1733][0]++,S>0)&&(cov_2dj4df7l8y().b[1733][1]++,P+D+h>this.right)&&(cov_2dj4df7l8y().b[1733][2]++,T=u.y+=_,u.line++,P=u.x=X(o,this.left+h,this.right-s[u.line]))):(cov_2dj4df7l8y().b[1732][1]++,(cov_2dj4df7l8y().b[1734][0]++,S>0)&&(cov_2dj4df7l8y().b[1734][1]++,T+_>this.bottom)&&(cov_2dj4df7l8y().b[1734][2]++,P=u.x=P+t[u.line].width+h,u.line++,T=u.y=X(o,this.top+M+h,this.bottom-t[u.line].height)));let $=(cov_2dj4df7l8y().s[4226]++,l.x(P));cov_2dj4df7l8y().s[4227]++;if(b($,T,v),P=bn(w,P+p+f,y?(cov_2dj4df7l8y().b[1736][0]++,P+D):(cov_2dj4df7l8y().b[1736][1]++,this.right),i.rtl),x(l.x(P),T,v),y){cov_2dj4df7l8y().b[1735][0]++;cov_2dj4df7l8y().s[4228]++;u.x+=D+h;}else{cov_2dj4df7l8y().b[1735][1]++;cov_2dj4df7l8y().s[4229]++;if(typeof v.text!="string"){cov_2dj4df7l8y().b[1737][0]++;let tt=(cov_2dj4df7l8y().s[4230]++,c.lineHeight);cov_2dj4df7l8y().s[4231]++;u.y+=Qo(v,tt)+h;}else{cov_2dj4df7l8y().b[1737][1]++;cov_2dj4df7l8y().s[4232]++;u.y+=_;}}}),Xi(this.ctx,i.textDirection);}drawTitle(){cov_2dj4df7l8y().f[1152]++;let i=(cov_2dj4df7l8y().s[4233]++,this.options),t=(cov_2dj4df7l8y().s[4234]++,i.title),s=(cov_2dj4df7l8y().s[4235]++,j(t.font)),n=(cov_2dj4df7l8y().s[4236]++,K(t.padding));cov_2dj4df7l8y().s[4237]++;if(!t.display){cov_2dj4df7l8y().b[1738][0]++;cov_2dj4df7l8y().s[4238]++;return;}else{cov_2dj4df7l8y().b[1738][1]++;}let o=(cov_2dj4df7l8y().s[4239]++,Ft(i.rtl,this.left,this.width)),r=(cov_2dj4df7l8y().s[4240]++,this.ctx),a=(cov_2dj4df7l8y().s[4241]++,t.position),l=(cov_2dj4df7l8y().s[4242]++,s.size/2),c=(cov_2dj4df7l8y().s[4243]++,n.top+l),h,d=(cov_2dj4df7l8y().s[4244]++,this.left),f=(cov_2dj4df7l8y().s[4245]++,this.width);cov_2dj4df7l8y().s[4246]++;if(this.isHorizontal()){cov_2dj4df7l8y().b[1739][0]++;cov_2dj4df7l8y().s[4247]++;f=Math.max(...this.lineWidths),h=this.top+c,d=X(i.align,d,this.right-f);}else{cov_2dj4df7l8y().b[1739][1]++;let p=(cov_2dj4df7l8y().s[4248]++,this.columnSizes.reduce((g,m)=>{cov_2dj4df7l8y().f[1153]++;cov_2dj4df7l8y().s[4249]++;return Math.max(g,m.height);},0));cov_2dj4df7l8y().s[4250]++;h=c+X(i.align,this.top,this.bottom-p-i.labels.padding-this._computeTitleHeight());}let u=(cov_2dj4df7l8y().s[4251]++,X(a,d,d+f));cov_2dj4df7l8y().s[4252]++;r.textAlign=o.textAlign(He(a)),r.textBaseline="middle",r.strokeStyle=t.color,r.fillStyle=t.color,r.font=s.string,wt(r,t.text,u,h,s);}_computeTitleHeight(){cov_2dj4df7l8y().f[1154]++;let i=(cov_2dj4df7l8y().s[4253]++,this.options.title),t=(cov_2dj4df7l8y().s[4254]++,j(i.font)),s=(cov_2dj4df7l8y().s[4255]++,K(i.padding));cov_2dj4df7l8y().s[4256]++;return i.display?(cov_2dj4df7l8y().b[1740][0]++,t.lineHeight+s.height):(cov_2dj4df7l8y().b[1740][1]++,0);}_getLegendItemAt(i,t){cov_2dj4df7l8y().f[1155]++;let s,n,o;cov_2dj4df7l8y().s[4257]++;if((cov_2dj4df7l8y().b[1742][0]++,ct(i,this.left,this.right))&&(cov_2dj4df7l8y().b[1742][1]++,ct(t,this.top,this.bottom))){cov_2dj4df7l8y().b[1741][0]++;cov_2dj4df7l8y().s[4258]++;for(o=this.legendHitBoxes,s=0;s{cov_2dj4df7l8y().f[1159]++;cov_2dj4df7l8y().s[4276]++;return o.length>r.length?(cov_2dj4df7l8y().b[1752][0]++,o):(cov_2dj4df7l8y().b[1752][1]++,r);})),i+t.size/2+s.measureText(n).width;}function ah(e,i,t){cov_2dj4df7l8y().f[1160]++;let s=(cov_2dj4df7l8y().s[4277]++,e);cov_2dj4df7l8y().s[4278]++;return(cov_2dj4df7l8y().b[1753][0]++,typeof i.text!="string")&&(cov_2dj4df7l8y().b[1753][1]++,s=Qo(i,t)),s;}function Qo(e,i){cov_2dj4df7l8y().f[1161]++;let t=(cov_2dj4df7l8y().s[4279]++,e.text?(cov_2dj4df7l8y().b[1754][0]++,e.text.length):(cov_2dj4df7l8y().b[1754][1]++,0));cov_2dj4df7l8y().s[4280]++;return i*t;}function lh(e,i){cov_2dj4df7l8y().f[1162]++;cov_2dj4df7l8y().s[4281]++;return!!(((cov_2dj4df7l8y().b[1755][0]++,e==="mousemove")||(cov_2dj4df7l8y().b[1755][1]++,e==="mouseout"))&&((cov_2dj4df7l8y().b[1755][2]++,i.onHover)||(cov_2dj4df7l8y().b[1755][3]++,i.onLeave))||(cov_2dj4df7l8y().b[1755][4]++,i.onClick)&&((cov_2dj4df7l8y().b[1755][5]++,e==="click")||(cov_2dj4df7l8y().b[1755][6]++,e==="mouseup")));}cov_2dj4df7l8y().s[4304]++;var ch=(cov_2dj4df7l8y().s[4282]++,{id:"legend",_element:ci,start(e,i,t){cov_2dj4df7l8y().f[1163]++;let s=(cov_2dj4df7l8y().s[4283]++,e.legend=new ci({ctx:e.ctx,options:t,chart:e}));cov_2dj4df7l8y().s[4284]++;G.configure(e,s,t),G.addBox(e,s);},stop(e){cov_2dj4df7l8y().f[1164]++;cov_2dj4df7l8y().s[4285]++;G.removeBox(e,e.legend),delete e.legend;},beforeUpdate(e,i,t){cov_2dj4df7l8y().f[1165]++;let s=(cov_2dj4df7l8y().s[4286]++,e.legend);cov_2dj4df7l8y().s[4287]++;G.configure(e,s,t),s.options=t;},afterUpdate(e){cov_2dj4df7l8y().f[1166]++;let i=(cov_2dj4df7l8y().s[4288]++,e.legend);cov_2dj4df7l8y().s[4289]++;i.buildLabels(),i.adjustHitBoxes();},afterEvent(e,i){cov_2dj4df7l8y().f[1167]++;cov_2dj4df7l8y().s[4290]++;(cov_2dj4df7l8y().b[1756][0]++,i.replay)||(cov_2dj4df7l8y().b[1756][1]++,e.legend.handleEvent(i.event));},defaults:{display:!0,position:"top",align:"center",fullSize:!0,reverse:!1,weight:1e3,onClick(e,i,t){cov_2dj4df7l8y().f[1168]++;let s=(cov_2dj4df7l8y().s[4291]++,i.datasetIndex),n=(cov_2dj4df7l8y().s[4292]++,t.chart);cov_2dj4df7l8y().s[4293]++;n.isDatasetVisible(s)?(cov_2dj4df7l8y().b[1757][0]++,n.hide(s),i.hidden=!0):(cov_2dj4df7l8y().b[1757][1]++,n.show(s),i.hidden=!1);},onHover:null,onLeave:null,labels:{color:e=>{cov_2dj4df7l8y().f[1169]++;cov_2dj4df7l8y().s[4294]++;return e.chart.options.color;},boxWidth:40,padding:10,generateLabels(e){cov_2dj4df7l8y().f[1170]++;let i=(cov_2dj4df7l8y().s[4295]++,e.data.datasets),{labels:{usePointStyle:t,pointStyle:s,textAlign:n,color:o,useBorderRadius:r,borderRadius:a}}=(cov_2dj4df7l8y().s[4296]++,e.legend.options);cov_2dj4df7l8y().s[4297]++;return e._getSortedDatasetMetas().map(l=>{cov_2dj4df7l8y().f[1171]++;let c=(cov_2dj4df7l8y().s[4298]++,l.controller.getStyle(t?(cov_2dj4df7l8y().b[1758][0]++,0):(cov_2dj4df7l8y().b[1758][1]++,void 0))),h=(cov_2dj4df7l8y().s[4299]++,K(c.borderWidth));cov_2dj4df7l8y().s[4300]++;return{text:i[l.index].label,fillStyle:c.backgroundColor,fontColor:o,hidden:!l.visible,lineCap:c.borderCapStyle,lineDash:c.borderDash,lineDashOffset:c.borderDashOffset,lineJoin:c.borderJoinStyle,lineWidth:(h.width+h.height)/4,strokeStyle:c.borderColor,pointStyle:(cov_2dj4df7l8y().b[1759][0]++,s)||(cov_2dj4df7l8y().b[1759][1]++,c.pointStyle),rotation:c.rotation,textAlign:(cov_2dj4df7l8y().b[1760][0]++,n)||(cov_2dj4df7l8y().b[1760][1]++,c.textAlign),borderRadius:(cov_2dj4df7l8y().b[1761][0]++,r)&&((cov_2dj4df7l8y().b[1761][1]++,a)||(cov_2dj4df7l8y().b[1761][2]++,c.borderRadius)),datasetIndex:l.index};},this);}},title:{color:e=>{cov_2dj4df7l8y().f[1172]++;cov_2dj4df7l8y().s[4301]++;return e.chart.options.color;},display:!1,position:"center",text:""}},descriptors:{_scriptable:e=>{cov_2dj4df7l8y().f[1173]++;cov_2dj4df7l8y().s[4302]++;return!e.startsWith("on");},labels:{_scriptable:e=>{cov_2dj4df7l8y().f[1174]++;cov_2dj4df7l8y().s[4303]++;return!["generateLabels","filter","sort"].includes(e);}}}}),ke=class extends ot{constructor(i){cov_2dj4df7l8y().f[1175]++;cov_2dj4df7l8y().s[4305]++;super(),this.chart=i.chart,this.options=i.options,this.ctx=i.ctx,this._padding=void 0,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.width=void 0,this.height=void 0,this.position=void 0,this.weight=void 0,this.fullSize=void 0;}update(i,t){cov_2dj4df7l8y().f[1176]++;let s=(cov_2dj4df7l8y().s[4306]++,this.options);cov_2dj4df7l8y().s[4307]++;if(this.left=0,this.top=0,!s.display){cov_2dj4df7l8y().b[1762][0]++;cov_2dj4df7l8y().s[4308]++;this.width=this.height=this.right=this.bottom=0;cov_2dj4df7l8y().s[4309]++;return;}else{cov_2dj4df7l8y().b[1762][1]++;}cov_2dj4df7l8y().s[4310]++;this.width=this.right=i,this.height=this.bottom=t;let n=(cov_2dj4df7l8y().s[4311]++,z(s.text)?(cov_2dj4df7l8y().b[1763][0]++,s.text.length):(cov_2dj4df7l8y().b[1763][1]++,1));cov_2dj4df7l8y().s[4312]++;this._padding=K(s.padding);let o=(cov_2dj4df7l8y().s[4313]++,n*j(s.font).lineHeight+this._padding.height);cov_2dj4df7l8y().s[4314]++;this.isHorizontal()?(cov_2dj4df7l8y().b[1764][0]++,this.height=o):(cov_2dj4df7l8y().b[1764][1]++,this.width=o);}isHorizontal(){cov_2dj4df7l8y().f[1177]++;let i=(cov_2dj4df7l8y().s[4315]++,this.options.position);cov_2dj4df7l8y().s[4316]++;return(cov_2dj4df7l8y().b[1765][0]++,i==="top")||(cov_2dj4df7l8y().b[1765][1]++,i==="bottom");}_drawArgs(i){cov_2dj4df7l8y().f[1178]++;let{top:t,left:s,bottom:n,right:o,options:r}=(cov_2dj4df7l8y().s[4317]++,this),a=(cov_2dj4df7l8y().s[4318]++,r.align),l=(cov_2dj4df7l8y().s[4319]++,0),c,h,d;cov_2dj4df7l8y().s[4320]++;return this.isHorizontal()?(cov_2dj4df7l8y().b[1766][0]++,h=X(a,s,o),d=t+i,c=o-s):(cov_2dj4df7l8y().b[1766][1]++,r.position==="left"?(cov_2dj4df7l8y().b[1767][0]++,h=s+i,d=X(a,n,t),l=L*-.5):(cov_2dj4df7l8y().b[1767][1]++,h=o-i,d=X(a,t,n),l=L*.5),c=n-t),{titleX:h,titleY:d,maxWidth:c,rotation:l};}draw(){cov_2dj4df7l8y().f[1179]++;let i=(cov_2dj4df7l8y().s[4321]++,this.ctx),t=(cov_2dj4df7l8y().s[4322]++,this.options);cov_2dj4df7l8y().s[4323]++;if(!t.display){cov_2dj4df7l8y().b[1768][0]++;cov_2dj4df7l8y().s[4324]++;return;}else{cov_2dj4df7l8y().b[1768][1]++;}let s=(cov_2dj4df7l8y().s[4325]++,j(t.font)),o=(cov_2dj4df7l8y().s[4326]++,s.lineHeight/2+this._padding.top),{titleX:r,titleY:a,maxWidth:l,rotation:c}=(cov_2dj4df7l8y().s[4327]++,this._drawArgs(o));cov_2dj4df7l8y().s[4328]++;wt(i,t.text,0,0,s,{color:t.color,maxWidth:l,rotation:c,textAlign:He(t.align),textBaseline:"middle",translation:[r,a]});}};function hh(e,i){cov_2dj4df7l8y().f[1180]++;let t=(cov_2dj4df7l8y().s[4329]++,new ke({ctx:e.ctx,options:i,chart:e}));cov_2dj4df7l8y().s[4330]++;G.configure(e,t,i),G.addBox(e,t),e.titleBlock=t;}var dh=(cov_2dj4df7l8y().s[4331]++,{id:"title",_element:ke,start(e,i,t){cov_2dj4df7l8y().f[1181]++;cov_2dj4df7l8y().s[4332]++;hh(e,t);},stop(e){cov_2dj4df7l8y().f[1182]++;let i=(cov_2dj4df7l8y().s[4333]++,e.titleBlock);cov_2dj4df7l8y().s[4334]++;G.removeBox(e,i),delete e.titleBlock;},beforeUpdate(e,i,t){cov_2dj4df7l8y().f[1183]++;let s=(cov_2dj4df7l8y().s[4335]++,e.titleBlock);cov_2dj4df7l8y().s[4336]++;G.configure(e,s,t),s.options=t;},defaults:{align:"center",display:!1,font:{weight:"bold"},fullSize:!0,padding:10,position:"top",text:"",weight:2e3},defaultRoutes:{color:"color"},descriptors:{_scriptable:!0,_indexable:!1}}),Qe=(cov_2dj4df7l8y().s[4337]++,new WeakMap()),fh=(cov_2dj4df7l8y().s[4338]++,{id:"subtitle",start(e,i,t){cov_2dj4df7l8y().f[1184]++;let s=(cov_2dj4df7l8y().s[4339]++,new ke({ctx:e.ctx,options:t,chart:e}));cov_2dj4df7l8y().s[4340]++;G.configure(e,s,t),G.addBox(e,s),Qe.set(e,s);},stop(e){cov_2dj4df7l8y().f[1185]++;cov_2dj4df7l8y().s[4341]++;G.removeBox(e,Qe.get(e)),Qe.delete(e);},beforeUpdate(e,i,t){cov_2dj4df7l8y().f[1186]++;let s=(cov_2dj4df7l8y().s[4342]++,Qe.get(e));cov_2dj4df7l8y().s[4343]++;G.configure(e,s,t),s.options=t;},defaults:{align:"center",display:!1,font:{weight:"normal"},fullSize:!0,padding:0,position:"top",text:"",weight:1500},defaultRoutes:{color:"color"},descriptors:{_scriptable:!0,_indexable:!1}}),ve=(cov_2dj4df7l8y().s[4344]++,{average(e){cov_2dj4df7l8y().f[1187]++;cov_2dj4df7l8y().s[4345]++;if(!e.length){cov_2dj4df7l8y().b[1769][0]++;cov_2dj4df7l8y().s[4346]++;return!1;}else{cov_2dj4df7l8y().b[1769][1]++;}let i,t,s=(cov_2dj4df7l8y().s[4347]++,new Set()),n=(cov_2dj4df7l8y().s[4348]++,0),o=(cov_2dj4df7l8y().s[4349]++,0);cov_2dj4df7l8y().s[4350]++;for(i=0,t=e.length;i{cov_2dj4df7l8y().f[1188]++;cov_2dj4df7l8y().s[4356]++;return a+l;})/s.size,y:n/o});},nearest(e,i){cov_2dj4df7l8y().f[1189]++;cov_2dj4df7l8y().s[4357]++;if(!e.length){cov_2dj4df7l8y().b[1774][0]++;cov_2dj4df7l8y().s[4358]++;return!1;}else{cov_2dj4df7l8y().b[1774][1]++;}let t=(cov_2dj4df7l8y().s[4359]++,i.x),s=(cov_2dj4df7l8y().s[4360]++,i.y),n=(cov_2dj4df7l8y().s[4361]++,Number.POSITIVE_INFINITY),o,r,a;cov_2dj4df7l8y().s[4362]++;for(o=0,r=e.length;o-1)?(cov_2dj4df7l8y().b[1781][0]++,e.split(` +`)):(cov_2dj4df7l8y().b[1781][1]++,e);}function uh(e,i){cov_2dj4df7l8y().f[1192]++;let{element:t,datasetIndex:s,index:n}=(cov_2dj4df7l8y().s[4374]++,i),o=(cov_2dj4df7l8y().s[4375]++,e.getDatasetMeta(s).controller),{label:r,value:a}=(cov_2dj4df7l8y().s[4376]++,o.getLabelAndValue(n));cov_2dj4df7l8y().s[4377]++;return{chart:e,label:r,parsed:o.getParsed(n),raw:e.data.datasets[s].data[n],formattedValue:a,dataset:o.getDataset(),dataIndex:n,datasetIndex:s,element:t};}function _o(e,i){cov_2dj4df7l8y().f[1193]++;let t=(cov_2dj4df7l8y().s[4378]++,e.chart.ctx),{body:s,footer:n,title:o}=(cov_2dj4df7l8y().s[4379]++,e),{boxWidth:r,boxHeight:a}=(cov_2dj4df7l8y().s[4380]++,i),l=(cov_2dj4df7l8y().s[4381]++,j(i.bodyFont)),c=(cov_2dj4df7l8y().s[4382]++,j(i.titleFont)),h=(cov_2dj4df7l8y().s[4383]++,j(i.footerFont)),d=(cov_2dj4df7l8y().s[4384]++,o.length),f=(cov_2dj4df7l8y().s[4385]++,n.length),u=(cov_2dj4df7l8y().s[4386]++,s.length),p=(cov_2dj4df7l8y().s[4387]++,K(i.padding)),g=(cov_2dj4df7l8y().s[4388]++,p.height),m=(cov_2dj4df7l8y().s[4389]++,0),b=(cov_2dj4df7l8y().s[4390]++,s.reduce((M,_)=>{cov_2dj4df7l8y().f[1194]++;cov_2dj4df7l8y().s[4391]++;return M+_.before.length+_.lines.length+_.after.length;},0));cov_2dj4df7l8y().s[4392]++;if(b+=e.beforeBody.length+e.afterBody.length,(cov_2dj4df7l8y().b[1784][0]++,d)&&(cov_2dj4df7l8y().b[1784][1]++,g+=d*c.lineHeight+(d-1)*i.titleSpacing+i.titleMarginBottom),b){cov_2dj4df7l8y().b[1783][0]++;let M=(cov_2dj4df7l8y().s[4393]++,i.displayColors?(cov_2dj4df7l8y().b[1785][0]++,Math.max(a,l.lineHeight)):(cov_2dj4df7l8y().b[1785][1]++,l.lineHeight));cov_2dj4df7l8y().s[4394]++;g+=u*M+(b-u)*l.lineHeight+(b-1)*i.bodySpacing;}else{cov_2dj4df7l8y().b[1783][1]++;}cov_2dj4df7l8y().s[4395]++;(cov_2dj4df7l8y().b[1786][0]++,f)&&(cov_2dj4df7l8y().b[1786][1]++,g+=i.footerMarginTop+f*h.lineHeight+(f-1)*i.footerSpacing);cov_2dj4df7l8y().s[4397]++;let x=(cov_2dj4df7l8y().s[4396]++,0),y=function(M){cov_2dj4df7l8y().f[1195]++;cov_2dj4df7l8y().s[4398]++;m=Math.max(m,t.measureText(M).width+x);};cov_2dj4df7l8y().s[4399]++;return t.save(),t.font=c.string,R(e.title,y),t.font=l.string,R(e.beforeBody.concat(e.afterBody),y),x=i.displayColors?(cov_2dj4df7l8y().b[1787][0]++,r+2+i.boxPadding):(cov_2dj4df7l8y().b[1787][1]++,0),R(s,M=>{cov_2dj4df7l8y().f[1196]++;cov_2dj4df7l8y().s[4400]++;R(M.before,y),R(M.lines,y),R(M.after,y);}),x=0,t.font=h.string,R(e.footer,y),t.restore(),m+=p.width,{width:m,height:g};}function gh(e,i){cov_2dj4df7l8y().f[1197]++;let{y:t,height:s}=(cov_2dj4df7l8y().s[4401]++,i);cov_2dj4df7l8y().s[4402]++;return te.height-s/2?(cov_2dj4df7l8y().b[1789][0]++,"bottom"):(cov_2dj4df7l8y().b[1789][1]++,"center"));}function ph(e,i,t,s){cov_2dj4df7l8y().f[1198]++;let{x:n,width:o}=(cov_2dj4df7l8y().s[4403]++,s),r=(cov_2dj4df7l8y().s[4404]++,t.caretSize+t.caretPadding);cov_2dj4df7l8y().s[4405]++;if((cov_2dj4df7l8y().b[1791][0]++,e==="left")&&(cov_2dj4df7l8y().b[1791][1]++,n+o+r>i.width)||(cov_2dj4df7l8y().b[1791][2]++,e==="right")&&(cov_2dj4df7l8y().b[1791][3]++,n-o-r<0)){cov_2dj4df7l8y().b[1790][0]++;cov_2dj4df7l8y().s[4406]++;return!0;}else{cov_2dj4df7l8y().b[1790][1]++;}}function mh(e,i,t,s){cov_2dj4df7l8y().f[1199]++;let{x:n,width:o}=(cov_2dj4df7l8y().s[4407]++,t),{width:r,chartArea:{left:a,right:l}}=(cov_2dj4df7l8y().s[4408]++,e),c=(cov_2dj4df7l8y().s[4409]++,"center");cov_2dj4df7l8y().s[4410]++;return s==="center"?(cov_2dj4df7l8y().b[1792][0]++,c=n<=(a+l)/2?(cov_2dj4df7l8y().b[1793][0]++,"left"):(cov_2dj4df7l8y().b[1793][1]++,"right")):(cov_2dj4df7l8y().b[1792][1]++,n<=o/2?(cov_2dj4df7l8y().b[1794][0]++,c="left"):(cov_2dj4df7l8y().b[1794][1]++,(cov_2dj4df7l8y().b[1795][0]++,n>=r-o/2)&&(cov_2dj4df7l8y().b[1795][1]++,c="right"))),(cov_2dj4df7l8y().b[1796][0]++,ph(c,e,i,t))&&(cov_2dj4df7l8y().b[1796][1]++,c="center"),c;}function yo(e,i,t){cov_2dj4df7l8y().f[1200]++;let s=(cov_2dj4df7l8y().s[4411]++,(cov_2dj4df7l8y().b[1797][0]++,t.yAlign)||(cov_2dj4df7l8y().b[1797][1]++,i.yAlign)||(cov_2dj4df7l8y().b[1797][2]++,gh(e,t)));cov_2dj4df7l8y().s[4412]++;return{xAlign:(cov_2dj4df7l8y().b[1798][0]++,t.xAlign)||(cov_2dj4df7l8y().b[1798][1]++,i.xAlign)||(cov_2dj4df7l8y().b[1798][2]++,mh(e,i,t,s)),yAlign:s};}function bh(e,i){cov_2dj4df7l8y().f[1201]++;let{x:t,width:s}=(cov_2dj4df7l8y().s[4413]++,e);cov_2dj4df7l8y().s[4414]++;return i==="right"?(cov_2dj4df7l8y().b[1799][0]++,t-=s):(cov_2dj4df7l8y().b[1799][1]++,(cov_2dj4df7l8y().b[1800][0]++,i==="center")&&(cov_2dj4df7l8y().b[1800][1]++,t-=s/2)),t;}function xh(e,i,t){cov_2dj4df7l8y().f[1202]++;let{y:s,height:n}=(cov_2dj4df7l8y().s[4415]++,e);cov_2dj4df7l8y().s[4416]++;return i==="top"?(cov_2dj4df7l8y().b[1801][0]++,s+=t):(cov_2dj4df7l8y().b[1801][1]++,i==="bottom"?(cov_2dj4df7l8y().b[1802][0]++,s-=n+t):(cov_2dj4df7l8y().b[1802][1]++,s-=n/2)),s;}function vo(e,i,t,s){cov_2dj4df7l8y().f[1203]++;let{caretSize:n,caretPadding:o,cornerRadius:r}=(cov_2dj4df7l8y().s[4417]++,e),{xAlign:a,yAlign:l}=(cov_2dj4df7l8y().s[4418]++,t),c=(cov_2dj4df7l8y().s[4419]++,n+o),{topLeft:h,topRight:d,bottomLeft:f,bottomRight:u}=(cov_2dj4df7l8y().s[4420]++,Ct(r)),p=(cov_2dj4df7l8y().s[4421]++,bh(i,a)),g=(cov_2dj4df7l8y().s[4422]++,xh(i,l,c));cov_2dj4df7l8y().s[4423]++;return l==="center"?(cov_2dj4df7l8y().b[1803][0]++,a==="left"?(cov_2dj4df7l8y().b[1804][0]++,p+=c):(cov_2dj4df7l8y().b[1804][1]++,(cov_2dj4df7l8y().b[1805][0]++,a==="right")&&(cov_2dj4df7l8y().b[1805][1]++,p-=c))):(cov_2dj4df7l8y().b[1803][1]++,a==="left"?(cov_2dj4df7l8y().b[1806][0]++,p-=Math.max(h,f)+n):(cov_2dj4df7l8y().b[1806][1]++,(cov_2dj4df7l8y().b[1807][0]++,a==="right")&&(cov_2dj4df7l8y().b[1807][1]++,p+=Math.max(d,u)+n))),{x:Y(p,0,s.width-i.width),y:Y(g,0,s.height-i.height)};}function ti(e,i,t){cov_2dj4df7l8y().f[1204]++;let s=(cov_2dj4df7l8y().s[4424]++,K(t.padding));cov_2dj4df7l8y().s[4425]++;return i==="center"?(cov_2dj4df7l8y().b[1808][0]++,e.x+e.width/2):(cov_2dj4df7l8y().b[1808][1]++,i==="right"?(cov_2dj4df7l8y().b[1809][0]++,e.x+e.width-s.right):(cov_2dj4df7l8y().b[1809][1]++,e.x+s.left));}function Mo(e){cov_2dj4df7l8y().f[1205]++;cov_2dj4df7l8y().s[4426]++;return ht([],xt(e));}function _h(e,i,t){cov_2dj4df7l8y().f[1206]++;cov_2dj4df7l8y().s[4427]++;return mt(e,{tooltip:i,tooltipItems:t,type:"tooltip"});}function ko(e,i){cov_2dj4df7l8y().f[1207]++;let t=(cov_2dj4df7l8y().s[4428]++,(cov_2dj4df7l8y().b[1810][0]++,i)&&(cov_2dj4df7l8y().b[1810][1]++,i.dataset)&&(cov_2dj4df7l8y().b[1810][2]++,i.dataset.tooltip)&&(cov_2dj4df7l8y().b[1810][3]++,i.dataset.tooltip.callbacks));cov_2dj4df7l8y().s[4429]++;return t?(cov_2dj4df7l8y().b[1811][0]++,e.override(t)):(cov_2dj4df7l8y().b[1811][1]++,e);}var tr=(cov_2dj4df7l8y().s[4430]++,{beforeTitle:lt,title(e){cov_2dj4df7l8y().f[1208]++;cov_2dj4df7l8y().s[4431]++;if(e.length>0){cov_2dj4df7l8y().b[1812][0]++;let i=(cov_2dj4df7l8y().s[4432]++,e[0]),t=(cov_2dj4df7l8y().s[4433]++,i.chart.data.labels),s=(cov_2dj4df7l8y().s[4434]++,t?(cov_2dj4df7l8y().b[1813][0]++,t.length):(cov_2dj4df7l8y().b[1813][1]++,0));cov_2dj4df7l8y().s[4435]++;if((cov_2dj4df7l8y().b[1815][0]++,this)&&(cov_2dj4df7l8y().b[1815][1]++,this.options)&&(cov_2dj4df7l8y().b[1815][2]++,this.options.mode==="dataset")){cov_2dj4df7l8y().b[1814][0]++;cov_2dj4df7l8y().s[4436]++;return(cov_2dj4df7l8y().b[1816][0]++,i.dataset.label)||(cov_2dj4df7l8y().b[1816][1]++,"");}else{cov_2dj4df7l8y().b[1814][1]++;}cov_2dj4df7l8y().s[4437]++;if(i.label){cov_2dj4df7l8y().b[1817][0]++;cov_2dj4df7l8y().s[4438]++;return i.label;}else{cov_2dj4df7l8y().b[1817][1]++;}cov_2dj4df7l8y().s[4439]++;if((cov_2dj4df7l8y().b[1819][0]++,s>0)&&(cov_2dj4df7l8y().b[1819][1]++,i.dataIndex"u"?(cov_2dj4df7l8y().b[1826][0]++,tr[i].call(t,s)):(cov_2dj4df7l8y().b[1826][1]++,n);}cov_2dj4df7l8y().s[4646]++;var So=(cov_2dj4df7l8y().s[4455]++,(()=>{cov_2dj4df7l8y().f[1214]++;class e extends ot{static positioners=(cov_2dj4df7l8y().s[4456]++,ve);constructor(t){cov_2dj4df7l8y().f[1215]++;cov_2dj4df7l8y().s[4457]++;super(),this.opacity=0,this._active=[],this._eventPosition=void 0,this._size=void 0,this._cachedAnimations=void 0,this._tooltipItems=[],this.$animations=void 0,this.$context=void 0,this.chart=t.chart,this.options=t.options,this.dataPoints=void 0,this.title=void 0,this.beforeBody=void 0,this.body=void 0,this.afterBody=void 0,this.footer=void 0,this.xAlign=void 0,this.yAlign=void 0,this.x=void 0,this.y=void 0,this.height=void 0,this.width=void 0,this.caretX=void 0,this.caretY=void 0,this.labelColors=void 0,this.labelPointStyles=void 0,this.labelTextColors=void 0;}initialize(t){cov_2dj4df7l8y().f[1216]++;cov_2dj4df7l8y().s[4458]++;this.options=t,this._cachedAnimations=void 0,this.$context=void 0;}_resolveAnimations(){cov_2dj4df7l8y().f[1217]++;let t=(cov_2dj4df7l8y().s[4459]++,this._cachedAnimations);cov_2dj4df7l8y().s[4460]++;if(t){cov_2dj4df7l8y().b[1827][0]++;cov_2dj4df7l8y().s[4461]++;return t;}else{cov_2dj4df7l8y().b[1827][1]++;}let s=(cov_2dj4df7l8y().s[4462]++,this.chart),n=(cov_2dj4df7l8y().s[4463]++,this.options.setContext(this.getContext())),o=(cov_2dj4df7l8y().s[4464]++,(cov_2dj4df7l8y().b[1828][0]++,n.enabled)&&(cov_2dj4df7l8y().b[1828][1]++,s.options.animation)&&(cov_2dj4df7l8y().b[1828][2]++,n.animations)),r=(cov_2dj4df7l8y().s[4465]++,new ni(this.chart,o));cov_2dj4df7l8y().s[4466]++;return(cov_2dj4df7l8y().b[1829][0]++,o._cacheable)&&(cov_2dj4df7l8y().b[1829][1]++,this._cachedAnimations=Object.freeze(r)),r;}getContext(){cov_2dj4df7l8y().f[1218]++;cov_2dj4df7l8y().s[4467]++;return(cov_2dj4df7l8y().b[1830][0]++,this.$context)||(cov_2dj4df7l8y().b[1830][1]++,this.$context=_h(this.chart.getContext(),this,this._tooltipItems));}getTitle(t,s){cov_2dj4df7l8y().f[1219]++;let{callbacks:n}=(cov_2dj4df7l8y().s[4468]++,s),o=(cov_2dj4df7l8y().s[4469]++,Z(n,"beforeTitle",this,t)),r=(cov_2dj4df7l8y().s[4470]++,Z(n,"title",this,t)),a=(cov_2dj4df7l8y().s[4471]++,Z(n,"afterTitle",this,t)),l=(cov_2dj4df7l8y().s[4472]++,[]);cov_2dj4df7l8y().s[4473]++;return l=ht(l,xt(o)),l=ht(l,xt(r)),l=ht(l,xt(a)),l;}getBeforeBody(t,s){cov_2dj4df7l8y().f[1220]++;cov_2dj4df7l8y().s[4474]++;return Mo(Z(s.callbacks,"beforeBody",this,t));}getBody(t,s){cov_2dj4df7l8y().f[1221]++;let{callbacks:n}=(cov_2dj4df7l8y().s[4475]++,s),o=(cov_2dj4df7l8y().s[4476]++,[]);cov_2dj4df7l8y().s[4477]++;return R(t,r=>{cov_2dj4df7l8y().f[1222]++;let a=(cov_2dj4df7l8y().s[4478]++,{before:[],lines:[],after:[]}),l=(cov_2dj4df7l8y().s[4479]++,ko(n,r));cov_2dj4df7l8y().s[4480]++;ht(a.before,xt(Z(l,"beforeLabel",this,r))),ht(a.lines,Z(l,"label",this,r)),ht(a.after,xt(Z(l,"afterLabel",this,r))),o.push(a);}),o;}getAfterBody(t,s){cov_2dj4df7l8y().f[1223]++;cov_2dj4df7l8y().s[4481]++;return Mo(Z(s.callbacks,"afterBody",this,t));}getFooter(t,s){cov_2dj4df7l8y().f[1224]++;let{callbacks:n}=(cov_2dj4df7l8y().s[4482]++,s),o=(cov_2dj4df7l8y().s[4483]++,Z(n,"beforeFooter",this,t)),r=(cov_2dj4df7l8y().s[4484]++,Z(n,"footer",this,t)),a=(cov_2dj4df7l8y().s[4485]++,Z(n,"afterFooter",this,t)),l=(cov_2dj4df7l8y().s[4486]++,[]);cov_2dj4df7l8y().s[4487]++;return l=ht(l,xt(o)),l=ht(l,xt(r)),l=ht(l,xt(a)),l;}_createItems(t){cov_2dj4df7l8y().f[1225]++;let s=(cov_2dj4df7l8y().s[4488]++,this._active),n=(cov_2dj4df7l8y().s[4489]++,this.chart.data),o=(cov_2dj4df7l8y().s[4490]++,[]),r=(cov_2dj4df7l8y().s[4491]++,[]),a=(cov_2dj4df7l8y().s[4492]++,[]),l=(cov_2dj4df7l8y().s[4493]++,[]),c,h;cov_2dj4df7l8y().s[4494]++;for(c=0,h=s.length;c{cov_2dj4df7l8y().f[1226]++;cov_2dj4df7l8y().s[4497]++;return t.filter(d,f,u,n);})),(cov_2dj4df7l8y().b[1832][0]++,t.itemSort)&&(cov_2dj4df7l8y().b[1832][1]++,l=l.sort((d,f)=>{cov_2dj4df7l8y().f[1227]++;cov_2dj4df7l8y().s[4498]++;return t.itemSort(d,f,n);})),R(l,d=>{cov_2dj4df7l8y().f[1228]++;let f=(cov_2dj4df7l8y().s[4499]++,ko(t.callbacks,d));cov_2dj4df7l8y().s[4500]++;o.push(Z(f,"labelColor",this,d)),r.push(Z(f,"labelPointStyle",this,d)),a.push(Z(f,"labelTextColor",this,d));}),this.labelColors=o,this.labelPointStyles=r,this.labelTextColors=a,this.dataPoints=l,l;}update(t,s){cov_2dj4df7l8y().f[1229]++;let n=(cov_2dj4df7l8y().s[4501]++,this.options.setContext(this.getContext())),o=(cov_2dj4df7l8y().s[4502]++,this._active),r,a=(cov_2dj4df7l8y().s[4503]++,[]);cov_2dj4df7l8y().s[4504]++;if(!o.length){cov_2dj4df7l8y().b[1833][0]++;cov_2dj4df7l8y().s[4505]++;(cov_2dj4df7l8y().b[1834][0]++,this.opacity!==0)&&(cov_2dj4df7l8y().b[1834][1]++,r={opacity:0});}else{cov_2dj4df7l8y().b[1833][1]++;let l=(cov_2dj4df7l8y().s[4506]++,ve[n.position].call(this,o,this._eventPosition));cov_2dj4df7l8y().s[4507]++;a=this._createItems(n),this.title=this.getTitle(a,n),this.beforeBody=this.getBeforeBody(a,n),this.body=this.getBody(a,n),this.afterBody=this.getAfterBody(a,n),this.footer=this.getFooter(a,n);let c=(cov_2dj4df7l8y().s[4508]++,this._size=_o(this,n)),h=(cov_2dj4df7l8y().s[4509]++,Object.assign({},l,c)),d=(cov_2dj4df7l8y().s[4510]++,yo(this.chart,n,h)),f=(cov_2dj4df7l8y().s[4511]++,vo(n,h,d,this.chart));cov_2dj4df7l8y().s[4512]++;this.xAlign=d.xAlign,this.yAlign=d.yAlign,r={opacity:1,x:f.x,y:f.y,width:c.width,height:c.height,caretX:l.x,caretY:l.y};}cov_2dj4df7l8y().s[4513]++;this._tooltipItems=a,this.$context=void 0,(cov_2dj4df7l8y().b[1835][0]++,r)&&(cov_2dj4df7l8y().b[1835][1]++,this._resolveAnimations().update(this,r)),(cov_2dj4df7l8y().b[1836][0]++,t)&&(cov_2dj4df7l8y().b[1836][1]++,n.external)&&(cov_2dj4df7l8y().b[1836][2]++,n.external.call(this,{chart:this.chart,tooltip:this,replay:s}));}drawCaret(t,s,n,o){cov_2dj4df7l8y().f[1230]++;let r=(cov_2dj4df7l8y().s[4514]++,this.getCaretPosition(t,n,o));cov_2dj4df7l8y().s[4515]++;s.lineTo(r.x1,r.y1),s.lineTo(r.x2,r.y2),s.lineTo(r.x3,r.y3);}getCaretPosition(t,s,n){cov_2dj4df7l8y().f[1231]++;let{xAlign:o,yAlign:r}=(cov_2dj4df7l8y().s[4516]++,this),{caretSize:a,cornerRadius:l}=(cov_2dj4df7l8y().s[4517]++,n),{topLeft:c,topRight:h,bottomLeft:d,bottomRight:f}=(cov_2dj4df7l8y().s[4518]++,Ct(l)),{x:u,y:p}=(cov_2dj4df7l8y().s[4519]++,t),{width:g,height:m}=(cov_2dj4df7l8y().s[4520]++,s),b,x,y,M,_,v;cov_2dj4df7l8y().s[4521]++;return r==="center"?(cov_2dj4df7l8y().b[1837][0]++,_=p+m/2,o==="left"?(cov_2dj4df7l8y().b[1838][0]++,b=u,x=b-a,M=_+a,v=_-a):(cov_2dj4df7l8y().b[1838][1]++,b=u+g,x=b+a,M=_-a,v=_+a),y=b):(cov_2dj4df7l8y().b[1837][1]++,o==="left"?(cov_2dj4df7l8y().b[1839][0]++,x=u+Math.max(c,d)+a):(cov_2dj4df7l8y().b[1839][1]++,o==="right"?(cov_2dj4df7l8y().b[1840][0]++,x=u+g-Math.max(h,f)-a):(cov_2dj4df7l8y().b[1840][1]++,x=this.caretX)),r==="top"?(cov_2dj4df7l8y().b[1841][0]++,M=p,_=M-a,b=x-a,y=x+a):(cov_2dj4df7l8y().b[1841][1]++,M=p+m,_=M+a,b=x+a,y=x-a),v=M),{x1:b,x2:x,x3:y,y1:M,y2:_,y3:v};}drawTitle(t,s,n){cov_2dj4df7l8y().f[1232]++;let o=(cov_2dj4df7l8y().s[4522]++,this.title),r=(cov_2dj4df7l8y().s[4523]++,o.length),a,l,c;cov_2dj4df7l8y().s[4524]++;if(r){cov_2dj4df7l8y().b[1842][0]++;let h=(cov_2dj4df7l8y().s[4525]++,Ft(n.rtl,this.x,this.width));cov_2dj4df7l8y().s[4526]++;for(t.x=ti(this,n.titleAlign,n),s.textAlign=h.textAlign(n.titleAlign),s.textBaseline="middle",a=j(n.titleFont),l=n.titleSpacing,s.fillStyle=n.titleColor,s.font=a.string,c=0;c{cov_2dj4df7l8y().f[1234]++;cov_2dj4df7l8y().s[4546]++;return y!==0;})?(cov_2dj4df7l8y().b[1850][0]++,t.beginPath(),t.fillStyle=r.multiKeyBackground,Qt(t,{x:m,y:g,w:h,h:c,radius:x}),t.fill(),t.stroke(),t.fillStyle=a.backgroundColor,t.beginPath(),Qt(t,{x:b,y:g+1,w:h-2,h:c-2,radius:x}),t.fill()):(cov_2dj4df7l8y().b[1850][1]++,t.fillStyle=r.multiKeyBackground,t.fillRect(m,g,h,c),t.strokeRect(m,g,h,c),t.fillStyle=a.backgroundColor,t.fillRect(b,g+1,h-2,c-2));}cov_2dj4df7l8y().s[4547]++;t.fillStyle=this.labelTextColors[n];}drawBody(t,s,n){cov_2dj4df7l8y().f[1235]++;cov_2dj4df7l8y().s[4554]++;let{body:o}=(cov_2dj4df7l8y().s[4548]++,this),{bodySpacing:r,bodyAlign:a,displayColors:l,boxHeight:c,boxWidth:h,boxPadding:d}=(cov_2dj4df7l8y().s[4549]++,n),f=(cov_2dj4df7l8y().s[4550]++,j(n.bodyFont)),u=(cov_2dj4df7l8y().s[4551]++,f.lineHeight),p=(cov_2dj4df7l8y().s[4552]++,0),g=(cov_2dj4df7l8y().s[4553]++,Ft(n.rtl,this.x,this.width)),m=function(w){cov_2dj4df7l8y().f[1236]++;cov_2dj4df7l8y().s[4555]++;s.fillText(w,g.x(t.x+p),t.y+u/2),t.y+=u+r;},b=(cov_2dj4df7l8y().s[4556]++,g.textAlign(a)),x,y,M,_,v,S,k;cov_2dj4df7l8y().s[4557]++;for(s.textAlign=a,s.textBaseline="middle",s.font=f.string,t.x=ti(this,b,n),s.fillStyle=n.bodyColor,R(this.beforeBody,m),p=(cov_2dj4df7l8y().b[1852][0]++,l)&&(cov_2dj4df7l8y().b[1852][1]++,b!=="right")?(cov_2dj4df7l8y().b[1851][0]++,a==="center"?(cov_2dj4df7l8y().b[1853][0]++,h/2+d):(cov_2dj4df7l8y().b[1853][1]++,h+2+d)):(cov_2dj4df7l8y().b[1851][1]++,0),_=0,S=o.length;_0)&&(cov_2dj4df7l8y().b[1860][1]++,s.stroke());}_updateAnimationTarget(t){cov_2dj4df7l8y().f[1239]++;let s=(cov_2dj4df7l8y().s[4573]++,this.chart),n=(cov_2dj4df7l8y().s[4574]++,this.$animations),o=(cov_2dj4df7l8y().s[4575]++,(cov_2dj4df7l8y().b[1861][0]++,n)&&(cov_2dj4df7l8y().b[1861][1]++,n.x)),r=(cov_2dj4df7l8y().s[4576]++,(cov_2dj4df7l8y().b[1862][0]++,n)&&(cov_2dj4df7l8y().b[1862][1]++,n.y));cov_2dj4df7l8y().s[4577]++;if((cov_2dj4df7l8y().b[1864][0]++,o)||(cov_2dj4df7l8y().b[1864][1]++,r)){cov_2dj4df7l8y().b[1863][0]++;let a=(cov_2dj4df7l8y().s[4578]++,ve[t.position].call(this,this._active,this._eventPosition));cov_2dj4df7l8y().s[4579]++;if(!a){cov_2dj4df7l8y().b[1865][0]++;cov_2dj4df7l8y().s[4580]++;return;}else{cov_2dj4df7l8y().b[1865][1]++;}let l=(cov_2dj4df7l8y().s[4581]++,this._size=_o(this,t)),c=(cov_2dj4df7l8y().s[4582]++,Object.assign({},a,this._size)),h=(cov_2dj4df7l8y().s[4583]++,yo(s,t,c)),d=(cov_2dj4df7l8y().s[4584]++,vo(t,c,h,s));cov_2dj4df7l8y().s[4585]++;((cov_2dj4df7l8y().b[1866][0]++,o._to!==d.x)||(cov_2dj4df7l8y().b[1866][1]++,r._to!==d.y))&&(cov_2dj4df7l8y().b[1866][2]++,this.xAlign=h.xAlign,this.yAlign=h.yAlign,this.width=l.width,this.height=l.height,this.caretX=a.x,this.caretY=a.y,this._resolveAnimations().update(this,d));}else{cov_2dj4df7l8y().b[1863][1]++;}}_willRender(){cov_2dj4df7l8y().f[1240]++;cov_2dj4df7l8y().s[4586]++;return!!this.opacity;}draw(t){cov_2dj4df7l8y().f[1241]++;let s=(cov_2dj4df7l8y().s[4587]++,this.options.setContext(this.getContext())),n=(cov_2dj4df7l8y().s[4588]++,this.opacity);cov_2dj4df7l8y().s[4589]++;if(!n){cov_2dj4df7l8y().b[1867][0]++;cov_2dj4df7l8y().s[4590]++;return;}else{cov_2dj4df7l8y().b[1867][1]++;}cov_2dj4df7l8y().s[4591]++;this._updateAnimationTarget(s);let o=(cov_2dj4df7l8y().s[4592]++,{width:this.width,height:this.height}),r=(cov_2dj4df7l8y().s[4593]++,{x:this.x,y:this.y});cov_2dj4df7l8y().s[4594]++;n=Math.abs(n)<.001?(cov_2dj4df7l8y().b[1868][0]++,0):(cov_2dj4df7l8y().b[1868][1]++,n);let a=(cov_2dj4df7l8y().s[4595]++,K(s.padding)),l=(cov_2dj4df7l8y().s[4596]++,(cov_2dj4df7l8y().b[1869][0]++,this.title.length)||(cov_2dj4df7l8y().b[1869][1]++,this.beforeBody.length)||(cov_2dj4df7l8y().b[1869][2]++,this.body.length)||(cov_2dj4df7l8y().b[1869][3]++,this.afterBody.length)||(cov_2dj4df7l8y().b[1869][4]++,this.footer.length));cov_2dj4df7l8y().s[4597]++;(cov_2dj4df7l8y().b[1870][0]++,s.enabled)&&(cov_2dj4df7l8y().b[1870][1]++,l)&&(cov_2dj4df7l8y().b[1870][2]++,t.save(),t.globalAlpha=n,this.drawBackground(r,t,o,s),Ui(t,s.textDirection),r.y+=a.top,this.drawTitle(r,t,s),this.drawBody(r,t,s),this.drawFooter(r,t,s),Xi(t,s.textDirection),t.restore());}getActiveElements(){cov_2dj4df7l8y().f[1242]++;cov_2dj4df7l8y().s[4598]++;return(cov_2dj4df7l8y().b[1871][0]++,this._active)||(cov_2dj4df7l8y().b[1871][1]++,[]);}setActiveElements(t,s){cov_2dj4df7l8y().f[1243]++;let n=(cov_2dj4df7l8y().s[4599]++,this._active),o=(cov_2dj4df7l8y().s[4600]++,t.map(({datasetIndex:l,index:c})=>{cov_2dj4df7l8y().f[1244]++;let h=(cov_2dj4df7l8y().s[4601]++,this.chart.getDatasetMeta(l));cov_2dj4df7l8y().s[4602]++;if(!h){cov_2dj4df7l8y().b[1872][0]++;cov_2dj4df7l8y().s[4603]++;throw new Error("Cannot find a dataset at index "+l);}else{cov_2dj4df7l8y().b[1872][1]++;}cov_2dj4df7l8y().s[4604]++;return{datasetIndex:l,element:h.data[c],index:c};})),r=(cov_2dj4df7l8y().s[4605]++,!de(n,o)),a=(cov_2dj4df7l8y().s[4606]++,this._positionChanged(o,s));cov_2dj4df7l8y().s[4607]++;((cov_2dj4df7l8y().b[1873][0]++,r)||(cov_2dj4df7l8y().b[1873][1]++,a))&&(cov_2dj4df7l8y().b[1873][2]++,this._active=o,this._eventPosition=s,this._ignoreReplayEvents=!0,this.update(!0));}handleEvent(t,s,n=(cov_2dj4df7l8y().b[1874][0]++,!0)){cov_2dj4df7l8y().f[1245]++;cov_2dj4df7l8y().s[4608]++;if((cov_2dj4df7l8y().b[1876][0]++,s)&&(cov_2dj4df7l8y().b[1876][1]++,this._ignoreReplayEvents)){cov_2dj4df7l8y().b[1875][0]++;cov_2dj4df7l8y().s[4609]++;return!1;}else{cov_2dj4df7l8y().b[1875][1]++;}cov_2dj4df7l8y().s[4610]++;this._ignoreReplayEvents=!1;let o=(cov_2dj4df7l8y().s[4611]++,this.options),r=(cov_2dj4df7l8y().s[4612]++,(cov_2dj4df7l8y().b[1877][0]++,this._active)||(cov_2dj4df7l8y().b[1877][1]++,[])),a=(cov_2dj4df7l8y().s[4613]++,this._getActiveElements(t,r,s,n)),l=(cov_2dj4df7l8y().s[4614]++,this._positionChanged(a,t)),c=(cov_2dj4df7l8y().s[4615]++,(cov_2dj4df7l8y().b[1878][0]++,s)||(cov_2dj4df7l8y().b[1878][1]++,!de(a,r))||(cov_2dj4df7l8y().b[1878][2]++,l));cov_2dj4df7l8y().s[4616]++;return(cov_2dj4df7l8y().b[1879][0]++,c)&&(cov_2dj4df7l8y().b[1879][1]++,this._active=a,((cov_2dj4df7l8y().b[1880][0]++,o.enabled)||(cov_2dj4df7l8y().b[1880][1]++,o.external))&&(cov_2dj4df7l8y().b[1880][2]++,this._eventPosition={x:t.x,y:t.y},this.update(!0,s))),c;}_getActiveElements(t,s,n,o){cov_2dj4df7l8y().f[1246]++;let r=(cov_2dj4df7l8y().s[4617]++,this.options);cov_2dj4df7l8y().s[4618]++;if(t.type==="mouseout"){cov_2dj4df7l8y().b[1881][0]++;cov_2dj4df7l8y().s[4619]++;return[];}else{cov_2dj4df7l8y().b[1881][1]++;}cov_2dj4df7l8y().s[4620]++;if(!o){cov_2dj4df7l8y().b[1882][0]++;cov_2dj4df7l8y().s[4621]++;return s.filter(l=>{cov_2dj4df7l8y().f[1247]++;cov_2dj4df7l8y().s[4622]++;return(cov_2dj4df7l8y().b[1883][0]++,this.chart.data.datasets[l.datasetIndex])&&(cov_2dj4df7l8y().b[1883][1]++,this.chart.getDatasetMeta(l.datasetIndex).controller.getParsed(l.index)!==void 0);});}else{cov_2dj4df7l8y().b[1882][1]++;}let a=(cov_2dj4df7l8y().s[4623]++,this.chart.getElementsAtEventForMode(t,r.mode,r,n));cov_2dj4df7l8y().s[4624]++;return(cov_2dj4df7l8y().b[1884][0]++,r.reverse)&&(cov_2dj4df7l8y().b[1884][1]++,a.reverse()),a;}_positionChanged(t,s){cov_2dj4df7l8y().f[1248]++;let{caretX:n,caretY:o,options:r}=(cov_2dj4df7l8y().s[4625]++,this),a=(cov_2dj4df7l8y().s[4626]++,ve[r.position].call(this,t,s));cov_2dj4df7l8y().s[4627]++;return(cov_2dj4df7l8y().b[1885][0]++,a!==!1)&&((cov_2dj4df7l8y().b[1885][1]++,n!==a.x)||(cov_2dj4df7l8y().b[1885][2]++,o!==a.y));}}cov_2dj4df7l8y().s[4628]++;return e;})()),yh=(cov_2dj4df7l8y().s[4629]++,{id:"tooltip",_element:So,positioners:ve,afterInit(e,i,t){cov_2dj4df7l8y().f[1249]++;cov_2dj4df7l8y().s[4630]++;(cov_2dj4df7l8y().b[1886][0]++,t)&&(cov_2dj4df7l8y().b[1886][1]++,e.tooltip=new So({chart:e,options:t}));},beforeUpdate(e,i,t){cov_2dj4df7l8y().f[1250]++;cov_2dj4df7l8y().s[4631]++;(cov_2dj4df7l8y().b[1887][0]++,e.tooltip)&&(cov_2dj4df7l8y().b[1887][1]++,e.tooltip.initialize(t));},reset(e,i,t){cov_2dj4df7l8y().f[1251]++;cov_2dj4df7l8y().s[4632]++;(cov_2dj4df7l8y().b[1888][0]++,e.tooltip)&&(cov_2dj4df7l8y().b[1888][1]++,e.tooltip.initialize(t));},afterDraw(e){cov_2dj4df7l8y().f[1252]++;let i=(cov_2dj4df7l8y().s[4633]++,e.tooltip);cov_2dj4df7l8y().s[4634]++;if((cov_2dj4df7l8y().b[1890][0]++,i)&&(cov_2dj4df7l8y().b[1890][1]++,i._willRender())){cov_2dj4df7l8y().b[1889][0]++;let t=(cov_2dj4df7l8y().s[4635]++,{tooltip:i});cov_2dj4df7l8y().s[4636]++;if(e.notifyPlugins("beforeTooltipDraw",De(Pe({},t),{cancelable:!0}))===!1){cov_2dj4df7l8y().b[1891][0]++;cov_2dj4df7l8y().s[4637]++;return;}else{cov_2dj4df7l8y().b[1891][1]++;}cov_2dj4df7l8y().s[4638]++;i.draw(e.ctx),e.notifyPlugins("afterTooltipDraw",t);}else{cov_2dj4df7l8y().b[1889][1]++;}},afterEvent(e,i){cov_2dj4df7l8y().f[1253]++;cov_2dj4df7l8y().s[4639]++;if(e.tooltip){cov_2dj4df7l8y().b[1892][0]++;let t=(cov_2dj4df7l8y().s[4640]++,i.replay);cov_2dj4df7l8y().s[4641]++;(cov_2dj4df7l8y().b[1893][0]++,e.tooltip.handleEvent(i.event,t,i.inChartArea))&&(cov_2dj4df7l8y().b[1893][1]++,i.changed=!0);}else{cov_2dj4df7l8y().b[1892][1]++;}},defaults:{enabled:!0,external:null,position:"average",backgroundColor:"rgba(0,0,0,0.8)",titleColor:"#fff",titleFont:{weight:"bold"},titleSpacing:2,titleMarginBottom:6,titleAlign:"left",bodyColor:"#fff",bodySpacing:2,bodyFont:{},bodyAlign:"left",footerColor:"#fff",footerSpacing:2,footerMarginTop:6,footerFont:{weight:"bold"},footerAlign:"left",padding:6,caretPadding:2,caretSize:5,cornerRadius:6,boxHeight:(e,i)=>{cov_2dj4df7l8y().f[1254]++;cov_2dj4df7l8y().s[4642]++;return i.bodyFont.size;},boxWidth:(e,i)=>{cov_2dj4df7l8y().f[1255]++;cov_2dj4df7l8y().s[4643]++;return i.bodyFont.size;},multiKeyBackground:"#fff",displayColors:!0,boxPadding:0,borderColor:"rgba(0,0,0,0)",borderWidth:0,animation:{duration:400,easing:"easeOutQuart"},animations:{numbers:{type:"number",properties:["x","y","width","height","caretX","caretY"]},opacity:{easing:"linear",duration:200}},callbacks:tr},defaultRoutes:{bodyFont:"font",footerFont:"font",titleFont:"font"},descriptors:{_scriptable:e=>{cov_2dj4df7l8y().f[1256]++;cov_2dj4df7l8y().s[4644]++;return(cov_2dj4df7l8y().b[1894][0]++,e!=="filter")&&(cov_2dj4df7l8y().b[1894][1]++,e!=="itemSort")&&(cov_2dj4df7l8y().b[1894][2]++,e!=="external");},_indexable:!1,callbacks:{_scriptable:!1,_indexable:!1},animation:{_fallback:!1},animations:{_fallback:"animation"}},additionalOptionScopes:["interaction"]}),vh=(cov_2dj4df7l8y().s[4645]++,Object.freeze({__proto__:null,Colors:Rc,Decimation:zc,Filler:sh,Legend:ch,SubTitle:fh,Title:dh,Tooltip:yh})),Mh=(e,i,t,s)=>{cov_2dj4df7l8y().f[1257]++;cov_2dj4df7l8y().s[4647]++;return typeof i=="string"?(cov_2dj4df7l8y().b[1895][0]++,t=e.push(i)-1,s.unshift({index:t,label:i})):(cov_2dj4df7l8y().b[1895][1]++,(cov_2dj4df7l8y().b[1896][0]++,isNaN(i))&&(cov_2dj4df7l8y().b[1896][1]++,t=null)),t;};function kh(e,i,t,s){cov_2dj4df7l8y().f[1258]++;let n=(cov_2dj4df7l8y().s[4648]++,e.indexOf(i));cov_2dj4df7l8y().s[4649]++;if(n===-1){cov_2dj4df7l8y().b[1897][0]++;cov_2dj4df7l8y().s[4650]++;return Mh(e,i,t,s);}else{cov_2dj4df7l8y().b[1897][1]++;}let o=(cov_2dj4df7l8y().s[4651]++,e.lastIndexOf(i));cov_2dj4df7l8y().s[4652]++;return n!==o?(cov_2dj4df7l8y().b[1898][0]++,t):(cov_2dj4df7l8y().b[1898][1]++,n);}cov_2dj4df7l8y().s[4653]++;var Sh=(e,i)=>{cov_2dj4df7l8y().f[1259]++;cov_2dj4df7l8y().s[4654]++;return e===null?(cov_2dj4df7l8y().b[1899][0]++,null):(cov_2dj4df7l8y().b[1899][1]++,Y(Math.round(e),0,i));};function wo(e){cov_2dj4df7l8y().f[1260]++;let i=(cov_2dj4df7l8y().s[4655]++,this.getLabels());cov_2dj4df7l8y().s[4656]++;return(cov_2dj4df7l8y().b[1901][0]++,e>=0)&&(cov_2dj4df7l8y().b[1901][1]++,e{cov_2dj4df7l8y().f[1261]++;class e extends Wt{static id=(cov_2dj4df7l8y().s[4658]++,"category");static defaults=(cov_2dj4df7l8y().s[4659]++,{ticks:{callback:wo}});constructor(t){cov_2dj4df7l8y().f[1262]++;cov_2dj4df7l8y().s[4660]++;super(t),this._startValue=void 0,this._valueRange=0,this._addedLabels=[];}init(t){cov_2dj4df7l8y().f[1263]++;let s=(cov_2dj4df7l8y().s[4661]++,this._addedLabels);cov_2dj4df7l8y().s[4662]++;if(s.length){cov_2dj4df7l8y().b[1902][0]++;let n=(cov_2dj4df7l8y().s[4663]++,this.getLabels());cov_2dj4df7l8y().s[4664]++;for(let{index:o,label:r}of s){cov_2dj4df7l8y().s[4665]++;(cov_2dj4df7l8y().b[1903][0]++,n[o]===r)&&(cov_2dj4df7l8y().b[1903][1]++,n.splice(o,1));}cov_2dj4df7l8y().s[4666]++;this._addedLabels=[];}else{cov_2dj4df7l8y().b[1902][1]++;}cov_2dj4df7l8y().s[4667]++;super.init(t);}parse(t,s){cov_2dj4df7l8y().f[1264]++;cov_2dj4df7l8y().s[4668]++;if(O(t)){cov_2dj4df7l8y().b[1904][0]++;cov_2dj4df7l8y().s[4669]++;return null;}else{cov_2dj4df7l8y().b[1904][1]++;}let n=(cov_2dj4df7l8y().s[4670]++,this.getLabels());cov_2dj4df7l8y().s[4671]++;return s=(cov_2dj4df7l8y().b[1906][0]++,isFinite(s))&&(cov_2dj4df7l8y().b[1906][1]++,n[s]===t)?(cov_2dj4df7l8y().b[1905][0]++,s):(cov_2dj4df7l8y().b[1905][1]++,kh(n,t,C(s,t),this._addedLabels)),Sh(s,n.length-1);}determineDataLimits(){cov_2dj4df7l8y().f[1265]++;let{minDefined:t,maxDefined:s}=(cov_2dj4df7l8y().s[4672]++,this.getUserBounds()),{min:n,max:o}=(cov_2dj4df7l8y().s[4673]++,this.getMinMax(!0));cov_2dj4df7l8y().s[4674]++;(cov_2dj4df7l8y().b[1907][0]++,this.options.bounds==="ticks")&&(cov_2dj4df7l8y().b[1907][1]++,(cov_2dj4df7l8y().b[1908][0]++,t)||(cov_2dj4df7l8y().b[1908][1]++,n=0),(cov_2dj4df7l8y().b[1909][0]++,s)||(cov_2dj4df7l8y().b[1909][1]++,o=this.getLabels().length-1)),this.min=n,this.max=o;}buildTicks(){cov_2dj4df7l8y().f[1266]++;let t=(cov_2dj4df7l8y().s[4675]++,this.min),s=(cov_2dj4df7l8y().s[4676]++,this.max),n=(cov_2dj4df7l8y().s[4677]++,this.options.offset),o=(cov_2dj4df7l8y().s[4678]++,[]),r=(cov_2dj4df7l8y().s[4679]++,this.getLabels());cov_2dj4df7l8y().s[4680]++;r=(cov_2dj4df7l8y().b[1911][0]++,t===0)&&(cov_2dj4df7l8y().b[1911][1]++,s===r.length-1)?(cov_2dj4df7l8y().b[1910][0]++,r):(cov_2dj4df7l8y().b[1910][1]++,r.slice(t,s+1)),this._valueRange=Math.max(r.length-(n?(cov_2dj4df7l8y().b[1912][0]++,0):(cov_2dj4df7l8y().b[1912][1]++,1)),1),this._startValue=this.min-(n?(cov_2dj4df7l8y().b[1913][0]++,.5):(cov_2dj4df7l8y().b[1913][1]++,0));cov_2dj4df7l8y().s[4681]++;for(let a=(cov_2dj4df7l8y().s[4682]++,t);a<=s;a++){cov_2dj4df7l8y().s[4683]++;o.push({value:a});}cov_2dj4df7l8y().s[4684]++;return o;}getLabelForValue(t){cov_2dj4df7l8y().f[1267]++;cov_2dj4df7l8y().s[4685]++;return wo.call(this,t);}configure(){cov_2dj4df7l8y().f[1268]++;cov_2dj4df7l8y().s[4686]++;super.configure(),(cov_2dj4df7l8y().b[1914][0]++,this.isHorizontal())||(cov_2dj4df7l8y().b[1914][1]++,this._reversePixels=!this._reversePixels);}getPixelForValue(t){cov_2dj4df7l8y().f[1269]++;cov_2dj4df7l8y().s[4687]++;return(cov_2dj4df7l8y().b[1915][0]++,typeof t!="number")&&(cov_2dj4df7l8y().b[1915][1]++,t=this.parse(t)),t===null?(cov_2dj4df7l8y().b[1916][0]++,NaN):(cov_2dj4df7l8y().b[1916][1]++,this.getPixelForDecimal((t-this._startValue)/this._valueRange));}getPixelForTick(t){cov_2dj4df7l8y().f[1270]++;let s=(cov_2dj4df7l8y().s[4688]++,this.ticks);cov_2dj4df7l8y().s[4689]++;return(cov_2dj4df7l8y().b[1918][0]++,t<0)||(cov_2dj4df7l8y().b[1918][1]++,t>s.length-1)?(cov_2dj4df7l8y().b[1917][0]++,null):(cov_2dj4df7l8y().b[1917][1]++,this.getPixelForValue(s[t].value));}getValueForPixel(t){cov_2dj4df7l8y().f[1271]++;cov_2dj4df7l8y().s[4690]++;return Math.round(this._startValue+this.getDecimalForPixel(t)*this._valueRange);}getBasePixel(){cov_2dj4df7l8y().f[1272]++;cov_2dj4df7l8y().s[4691]++;return this.bottom;}}cov_2dj4df7l8y().s[4692]++;return e;})());function Ch(e,i){cov_2dj4df7l8y().f[1273]++;let t=(cov_2dj4df7l8y().s[4693]++,[]),{bounds:n,step:o,min:r,max:a,precision:l,count:c,maxTicks:h,maxDigits:d,includeBounds:f}=(cov_2dj4df7l8y().s[4694]++,e),u=(cov_2dj4df7l8y().s[4695]++,(cov_2dj4df7l8y().b[1919][0]++,o)||(cov_2dj4df7l8y().b[1919][1]++,1)),p=(cov_2dj4df7l8y().s[4696]++,h-1),{min:g,max:m}=(cov_2dj4df7l8y().s[4697]++,i),b=(cov_2dj4df7l8y().s[4698]++,!O(r)),x=(cov_2dj4df7l8y().s[4699]++,!O(a)),y=(cov_2dj4df7l8y().s[4700]++,!O(c)),M=(cov_2dj4df7l8y().s[4701]++,(m-g)/(d+1)),_=(cov_2dj4df7l8y().s[4702]++,wi((m-g)/p/u)*u),v,S,k,w;cov_2dj4df7l8y().s[4703]++;if((cov_2dj4df7l8y().b[1921][0]++,_<1e-14)&&(cov_2dj4df7l8y().b[1921][1]++,!b)&&(cov_2dj4df7l8y().b[1921][2]++,!x)){cov_2dj4df7l8y().b[1920][0]++;cov_2dj4df7l8y().s[4704]++;return[{value:g},{value:m}];}else{cov_2dj4df7l8y().b[1920][1]++;}cov_2dj4df7l8y().s[4705]++;w=Math.ceil(m/_)-Math.floor(g/_),(cov_2dj4df7l8y().b[1922][0]++,w>p)&&(cov_2dj4df7l8y().b[1922][1]++,_=wi(w*_/p/u)*u),(cov_2dj4df7l8y().b[1923][0]++,O(l))||(cov_2dj4df7l8y().b[1923][1]++,v=Math.pow(10,l),_=Math.ceil(_*v)/v),n==="ticks"?(cov_2dj4df7l8y().b[1924][0]++,S=Math.floor(g/_)*_,k=Math.ceil(m/_)*_):(cov_2dj4df7l8y().b[1924][1]++,S=g,k=m),(cov_2dj4df7l8y().b[1926][0]++,b)&&(cov_2dj4df7l8y().b[1926][1]++,x)&&(cov_2dj4df7l8y().b[1926][2]++,o)&&(cov_2dj4df7l8y().b[1926][3]++,hn((a-r)/o,_/1e3))?(cov_2dj4df7l8y().b[1925][0]++,w=Math.round(Math.min((a-r)/_,h)),_=(a-r)/w,S=r,k=a):(cov_2dj4df7l8y().b[1925][1]++,y?(cov_2dj4df7l8y().b[1927][0]++,S=b?(cov_2dj4df7l8y().b[1928][0]++,r):(cov_2dj4df7l8y().b[1928][1]++,S),k=x?(cov_2dj4df7l8y().b[1929][0]++,a):(cov_2dj4df7l8y().b[1929][1]++,k),w=c-1,_=(k-S)/w):(cov_2dj4df7l8y().b[1927][1]++,w=(k-S)/_,Gt(w,Math.round(w),_/1e3)?(cov_2dj4df7l8y().b[1930][0]++,w=Math.round(w)):(cov_2dj4df7l8y().b[1930][1]++,w=Math.ceil(w))));let D=(cov_2dj4df7l8y().s[4706]++,Math.max(Pi(_),Pi(S)));cov_2dj4df7l8y().s[4707]++;v=Math.pow(10,O(l)?(cov_2dj4df7l8y().b[1931][0]++,D):(cov_2dj4df7l8y().b[1931][1]++,l)),S=Math.round(S*v)/v,k=Math.round(k*v)/v;let P=(cov_2dj4df7l8y().s[4708]++,0);cov_2dj4df7l8y().s[4709]++;for((cov_2dj4df7l8y().b[1932][0]++,b)&&(cov_2dj4df7l8y().b[1932][1]++,(cov_2dj4df7l8y().b[1934][0]++,f)&&(cov_2dj4df7l8y().b[1934][1]++,S!==r)?(cov_2dj4df7l8y().b[1933][0]++,t.push({value:r}),(cov_2dj4df7l8y().b[1935][0]++,Sa)){cov_2dj4df7l8y().b[1938][0]++;cov_2dj4df7l8y().s[4712]++;break;}else{cov_2dj4df7l8y().b[1938][1]++;}cov_2dj4df7l8y().s[4713]++;t.push({value:T});}cov_2dj4df7l8y().s[4714]++;return(cov_2dj4df7l8y().b[1941][0]++,x)&&(cov_2dj4df7l8y().b[1941][1]++,f)&&(cov_2dj4df7l8y().b[1941][2]++,k!==a)?(cov_2dj4df7l8y().b[1940][0]++,(cov_2dj4df7l8y().b[1943][0]++,t.length)&&(cov_2dj4df7l8y().b[1943][1]++,Gt(t[t.length-1].value,a,Co(a,M,e)))?(cov_2dj4df7l8y().b[1942][0]++,t[t.length-1].value=a):(cov_2dj4df7l8y().b[1942][1]++,t.push({value:a}))):(cov_2dj4df7l8y().b[1940][1]++,((cov_2dj4df7l8y().b[1944][0]++,!x)||(cov_2dj4df7l8y().b[1944][1]++,k===a))&&(cov_2dj4df7l8y().b[1944][2]++,t.push({value:k}))),t;}function Co(e,i,{horizontal:t,minRotation:s}){cov_2dj4df7l8y().f[1274]++;let n=(cov_2dj4df7l8y().s[4715]++,it(s)),o=(cov_2dj4df7l8y().s[4716]++,(cov_2dj4df7l8y().b[1945][0]++,t?(cov_2dj4df7l8y().b[1946][0]++,Math.sin(n)):(cov_2dj4df7l8y().b[1946][1]++,Math.cos(n)))||(cov_2dj4df7l8y().b[1945][1]++,.001)),r=(cov_2dj4df7l8y().s[4717]++,.75*i*(""+e).length);cov_2dj4df7l8y().s[4718]++;return Math.min(i/o,r);}cov_2dj4df7l8y().s[4719]++;cov_2dj4df7l8y().s[4757]++;cov_2dj4df7l8y().s[4770]++;cov_2dj4df7l8y().s[4772]++;var se=class extends Wt{constructor(i){cov_2dj4df7l8y().f[1275]++;cov_2dj4df7l8y().s[4720]++;super(i),this.start=void 0,this.end=void 0,this._startValue=void 0,this._endValue=void 0,this._valueRange=0;}parse(i,t){cov_2dj4df7l8y().f[1276]++;cov_2dj4df7l8y().s[4721]++;return(cov_2dj4df7l8y().b[1948][0]++,O(i))||((cov_2dj4df7l8y().b[1948][1]++,typeof i=="number")||(cov_2dj4df7l8y().b[1948][2]++,i instanceof Number))&&(cov_2dj4df7l8y().b[1948][3]++,!isFinite(+i))?(cov_2dj4df7l8y().b[1947][0]++,null):(cov_2dj4df7l8y().b[1947][1]++,+i);}handleTickRangeOptions(){cov_2dj4df7l8y().f[1277]++;cov_2dj4df7l8y().s[4725]++;cov_2dj4df7l8y().s[4727]++;let{beginAtZero:i}=(cov_2dj4df7l8y().s[4722]++,this.options),{minDefined:t,maxDefined:s}=(cov_2dj4df7l8y().s[4723]++,this.getUserBounds()),{min:n,max:o}=(cov_2dj4df7l8y().s[4724]++,this),r=l=>{cov_2dj4df7l8y().f[1278]++;cov_2dj4df7l8y().s[4726]++;return n=t?(cov_2dj4df7l8y().b[1949][0]++,n):(cov_2dj4df7l8y().b[1949][1]++,l);},a=l=>{cov_2dj4df7l8y().f[1279]++;cov_2dj4df7l8y().s[4728]++;return o=s?(cov_2dj4df7l8y().b[1950][0]++,o):(cov_2dj4df7l8y().b[1950][1]++,l);};cov_2dj4df7l8y().s[4729]++;if(i){cov_2dj4df7l8y().b[1951][0]++;let l=(cov_2dj4df7l8y().s[4730]++,nt(n)),c=(cov_2dj4df7l8y().s[4731]++,nt(o));cov_2dj4df7l8y().s[4732]++;(cov_2dj4df7l8y().b[1953][0]++,l<0)&&(cov_2dj4df7l8y().b[1953][1]++,c<0)?(cov_2dj4df7l8y().b[1952][0]++,a(0)):(cov_2dj4df7l8y().b[1952][1]++,(cov_2dj4df7l8y().b[1954][0]++,l>0)&&(cov_2dj4df7l8y().b[1954][1]++,c>0)&&(cov_2dj4df7l8y().b[1954][2]++,r(0)));}else{cov_2dj4df7l8y().b[1951][1]++;}cov_2dj4df7l8y().s[4733]++;if(n===o){cov_2dj4df7l8y().b[1955][0]++;let l=(cov_2dj4df7l8y().s[4734]++,o===0?(cov_2dj4df7l8y().b[1956][0]++,1):(cov_2dj4df7l8y().b[1956][1]++,Math.abs(o*.05)));cov_2dj4df7l8y().s[4735]++;a(o+l),(cov_2dj4df7l8y().b[1957][0]++,i)||(cov_2dj4df7l8y().b[1957][1]++,r(n-l));}else{cov_2dj4df7l8y().b[1955][1]++;}cov_2dj4df7l8y().s[4736]++;this.min=n,this.max=o;}getTickLimit(){cov_2dj4df7l8y().f[1280]++;let i=(cov_2dj4df7l8y().s[4737]++,this.options.ticks),{maxTicksLimit:t,stepSize:s}=(cov_2dj4df7l8y().s[4738]++,i),n;cov_2dj4df7l8y().s[4739]++;return s?(cov_2dj4df7l8y().b[1958][0]++,n=Math.ceil(this.max/s)-Math.floor(this.min/s)+1,(cov_2dj4df7l8y().b[1959][0]++,n>1e3)&&(cov_2dj4df7l8y().b[1959][1]++,console.warn(`scales.${this.id}.ticks.stepSize: ${s} would result generating up to ${n} ticks. Limiting to 1000.`),n=1e3)):(cov_2dj4df7l8y().b[1958][1]++,n=this.computeTickLimit(),t=(cov_2dj4df7l8y().b[1960][0]++,t)||(cov_2dj4df7l8y().b[1960][1]++,11)),(cov_2dj4df7l8y().b[1961][0]++,t)&&(cov_2dj4df7l8y().b[1961][1]++,n=Math.min(t,n)),n;}computeTickLimit(){cov_2dj4df7l8y().f[1281]++;cov_2dj4df7l8y().s[4740]++;return Number.POSITIVE_INFINITY;}buildTicks(){cov_2dj4df7l8y().f[1282]++;let i=(cov_2dj4df7l8y().s[4741]++,this.options),t=(cov_2dj4df7l8y().s[4742]++,i.ticks),s=(cov_2dj4df7l8y().s[4743]++,this.getTickLimit());cov_2dj4df7l8y().s[4744]++;s=Math.max(2,s);let n=(cov_2dj4df7l8y().s[4745]++,{maxTicks:s,bounds:i.bounds,min:i.min,max:i.max,precision:t.precision,step:t.stepSize,count:t.count,maxDigits:this._maxDigits(),horizontal:this.isHorizontal(),minRotation:(cov_2dj4df7l8y().b[1962][0]++,t.minRotation)||(cov_2dj4df7l8y().b[1962][1]++,0),includeBounds:t.includeBounds!==!1}),o=(cov_2dj4df7l8y().s[4746]++,(cov_2dj4df7l8y().b[1963][0]++,this._range)||(cov_2dj4df7l8y().b[1963][1]++,this)),r=(cov_2dj4df7l8y().s[4747]++,Ch(n,o));cov_2dj4df7l8y().s[4748]++;return(cov_2dj4df7l8y().b[1964][0]++,i.bounds==="ticks")&&(cov_2dj4df7l8y().b[1964][1]++,Ci(r,this,"value")),i.reverse?(cov_2dj4df7l8y().b[1965][0]++,r.reverse(),this.start=this.max,this.end=this.min):(cov_2dj4df7l8y().b[1965][1]++,this.start=this.min,this.end=this.max),r;}configure(){cov_2dj4df7l8y().f[1283]++;let i=(cov_2dj4df7l8y().s[4749]++,this.ticks),t=(cov_2dj4df7l8y().s[4750]++,this.min),s=(cov_2dj4df7l8y().s[4751]++,this.max);cov_2dj4df7l8y().s[4752]++;if(super.configure(),(cov_2dj4df7l8y().b[1967][0]++,this.options.offset)&&(cov_2dj4df7l8y().b[1967][1]++,i.length)){cov_2dj4df7l8y().b[1966][0]++;let n=(cov_2dj4df7l8y().s[4753]++,(s-t)/Math.max(i.length-1,1)/2);cov_2dj4df7l8y().s[4754]++;t-=n,s+=n;}else{cov_2dj4df7l8y().b[1966][1]++;}cov_2dj4df7l8y().s[4755]++;this._startValue=t,this._endValue=s,this._valueRange=s-t;}getLabelForValue(i){cov_2dj4df7l8y().f[1284]++;cov_2dj4df7l8y().s[4756]++;return Zt(i,this.chart.options.locale,this.options.ticks.format);}},ks=class extends se{static id=(cov_2dj4df7l8y().s[4758]++,"linear");static defaults=(cov_2dj4df7l8y().s[4759]++,{ticks:{callback:fe.formatters.numeric}});determineDataLimits(){cov_2dj4df7l8y().f[1285]++;let{min:i,max:t}=(cov_2dj4df7l8y().s[4760]++,this.getMinMax(!0));cov_2dj4df7l8y().s[4761]++;this.min=N(i)?(cov_2dj4df7l8y().b[1968][0]++,i):(cov_2dj4df7l8y().b[1968][1]++,0),this.max=N(t)?(cov_2dj4df7l8y().b[1969][0]++,t):(cov_2dj4df7l8y().b[1969][1]++,1),this.handleTickRangeOptions();}computeTickLimit(){cov_2dj4df7l8y().f[1286]++;let i=(cov_2dj4df7l8y().s[4762]++,this.isHorizontal()),t=(cov_2dj4df7l8y().s[4763]++,i?(cov_2dj4df7l8y().b[1970][0]++,this.width):(cov_2dj4df7l8y().b[1970][1]++,this.height)),s=(cov_2dj4df7l8y().s[4764]++,it(this.options.ticks.minRotation)),n=(cov_2dj4df7l8y().s[4765]++,(cov_2dj4df7l8y().b[1971][0]++,i?(cov_2dj4df7l8y().b[1972][0]++,Math.sin(s)):(cov_2dj4df7l8y().b[1972][1]++,Math.cos(s)))||(cov_2dj4df7l8y().b[1971][1]++,.001)),o=(cov_2dj4df7l8y().s[4766]++,this._resolveTickFontOptions(0));cov_2dj4df7l8y().s[4767]++;return Math.ceil(t/Math.min(40,o.lineHeight/n));}getPixelForValue(i){cov_2dj4df7l8y().f[1287]++;cov_2dj4df7l8y().s[4768]++;return i===null?(cov_2dj4df7l8y().b[1973][0]++,NaN):(cov_2dj4df7l8y().b[1973][1]++,this.getPixelForDecimal((i-this._startValue)/this._valueRange));}getValueForPixel(i){cov_2dj4df7l8y().f[1288]++;cov_2dj4df7l8y().s[4769]++;return this._startValue+this.getDecimalForPixel(i)*this._valueRange;}},Se=e=>{cov_2dj4df7l8y().f[1289]++;cov_2dj4df7l8y().s[4771]++;return Math.floor(gt(e));},Bt=(e,i)=>{cov_2dj4df7l8y().f[1290]++;cov_2dj4df7l8y().s[4773]++;return Math.pow(10,Se(e)+i);};function Po(e){cov_2dj4df7l8y().f[1291]++;cov_2dj4df7l8y().s[4774]++;return e/Math.pow(10,Se(e))===1;}function Do(e,i,t){cov_2dj4df7l8y().f[1292]++;let s=(cov_2dj4df7l8y().s[4775]++,Math.pow(10,t)),n=(cov_2dj4df7l8y().s[4776]++,Math.floor(e/s));cov_2dj4df7l8y().s[4777]++;return Math.ceil(i/s)-n;}function Ph(e,i){cov_2dj4df7l8y().f[1293]++;let t=(cov_2dj4df7l8y().s[4778]++,i-e),s=(cov_2dj4df7l8y().s[4779]++,Se(t));cov_2dj4df7l8y().s[4780]++;for(;Do(e,i,s)>10;){cov_2dj4df7l8y().s[4781]++;s++;}cov_2dj4df7l8y().s[4782]++;for(;Do(e,i,s)<10;){cov_2dj4df7l8y().s[4783]++;s--;}cov_2dj4df7l8y().s[4784]++;return Math.min(s,Se(e));}function Dh(e,{min:i,max:t}){cov_2dj4df7l8y().f[1294]++;cov_2dj4df7l8y().s[4785]++;i=J(e.min,i);let s=(cov_2dj4df7l8y().s[4786]++,[]),n=(cov_2dj4df7l8y().s[4787]++,Se(i)),o=(cov_2dj4df7l8y().s[4788]++,Ph(i,t)),r=(cov_2dj4df7l8y().s[4789]++,o<0?(cov_2dj4df7l8y().b[1974][0]++,Math.pow(10,Math.abs(o))):(cov_2dj4df7l8y().b[1974][1]++,1)),a=(cov_2dj4df7l8y().s[4790]++,Math.pow(10,o)),l=(cov_2dj4df7l8y().s[4791]++,n>o?(cov_2dj4df7l8y().b[1975][0]++,Math.pow(10,n)):(cov_2dj4df7l8y().b[1975][1]++,0)),c=(cov_2dj4df7l8y().s[4792]++,Math.round((i-l)*r)/r),h=(cov_2dj4df7l8y().s[4793]++,Math.floor((i-l)/a/10)*a*10),d=(cov_2dj4df7l8y().s[4794]++,Math.floor((c-h)/Math.pow(10,o))),f=(cov_2dj4df7l8y().s[4795]++,J(e.min,Math.round((l+h+d*Math.pow(10,o))*r)/r));cov_2dj4df7l8y().s[4796]++;for(;f=10?(cov_2dj4df7l8y().b[1976][0]++,d=d<15?(cov_2dj4df7l8y().b[1977][0]++,15):(cov_2dj4df7l8y().b[1977][1]++,20)):(cov_2dj4df7l8y().b[1976][1]++,d++),(cov_2dj4df7l8y().b[1978][0]++,d>=20)&&(cov_2dj4df7l8y().b[1978][1]++,o++,d=2,r=o>=0?(cov_2dj4df7l8y().b[1979][0]++,1):(cov_2dj4df7l8y().b[1979][1]++,r)),f=Math.round((l+h+d*Math.pow(10,o))*r)/r;}let u=(cov_2dj4df7l8y().s[4798]++,J(e.max,f));cov_2dj4df7l8y().s[4799]++;return s.push({value:u,major:Po(u),significand:d}),s;}cov_2dj4df7l8y().s[4800]++;var Ss=class extends Wt{static id=(cov_2dj4df7l8y().s[4801]++,"logarithmic");static defaults=(cov_2dj4df7l8y().s[4802]++,{ticks:{callback:fe.formatters.logarithmic,major:{enabled:!0}}});constructor(i){cov_2dj4df7l8y().f[1295]++;cov_2dj4df7l8y().s[4803]++;super(i),this.start=void 0,this.end=void 0,this._startValue=void 0,this._valueRange=0;}parse(i,t){cov_2dj4df7l8y().f[1296]++;let s=(cov_2dj4df7l8y().s[4804]++,se.prototype.parse.apply(this,[i,t]));cov_2dj4df7l8y().s[4805]++;if(s===0){cov_2dj4df7l8y().b[1980][0]++;cov_2dj4df7l8y().s[4806]++;this._zero=!0;cov_2dj4df7l8y().s[4807]++;return;}else{cov_2dj4df7l8y().b[1980][1]++;}cov_2dj4df7l8y().s[4808]++;return(cov_2dj4df7l8y().b[1982][0]++,N(s))&&(cov_2dj4df7l8y().b[1982][1]++,s>0)?(cov_2dj4df7l8y().b[1981][0]++,s):(cov_2dj4df7l8y().b[1981][1]++,null);}determineDataLimits(){cov_2dj4df7l8y().f[1297]++;let{min:i,max:t}=(cov_2dj4df7l8y().s[4809]++,this.getMinMax(!0));cov_2dj4df7l8y().s[4810]++;this.min=N(i)?(cov_2dj4df7l8y().b[1983][0]++,Math.max(0,i)):(cov_2dj4df7l8y().b[1983][1]++,null),this.max=N(t)?(cov_2dj4df7l8y().b[1984][0]++,Math.max(0,t)):(cov_2dj4df7l8y().b[1984][1]++,null),(cov_2dj4df7l8y().b[1985][0]++,this.options.beginAtZero)&&(cov_2dj4df7l8y().b[1985][1]++,this._zero=!0),(cov_2dj4df7l8y().b[1986][0]++,this._zero)&&(cov_2dj4df7l8y().b[1986][1]++,this.min!==this._suggestedMin)&&(cov_2dj4df7l8y().b[1986][2]++,!N(this._userMin))&&(cov_2dj4df7l8y().b[1986][3]++,this.min=i===Bt(this.min,0)?(cov_2dj4df7l8y().b[1987][0]++,Bt(this.min,-1)):(cov_2dj4df7l8y().b[1987][1]++,Bt(this.min,0))),this.handleTickRangeOptions();}handleTickRangeOptions(){cov_2dj4df7l8y().f[1298]++;cov_2dj4df7l8y().s[4814]++;cov_2dj4df7l8y().s[4816]++;let{minDefined:i,maxDefined:t}=(cov_2dj4df7l8y().s[4811]++,this.getUserBounds()),s=(cov_2dj4df7l8y().s[4812]++,this.min),n=(cov_2dj4df7l8y().s[4813]++,this.max),o=a=>{cov_2dj4df7l8y().f[1299]++;cov_2dj4df7l8y().s[4815]++;return s=i?(cov_2dj4df7l8y().b[1988][0]++,s):(cov_2dj4df7l8y().b[1988][1]++,a);},r=a=>{cov_2dj4df7l8y().f[1300]++;cov_2dj4df7l8y().s[4817]++;return n=t?(cov_2dj4df7l8y().b[1989][0]++,n):(cov_2dj4df7l8y().b[1989][1]++,a);};cov_2dj4df7l8y().s[4818]++;(cov_2dj4df7l8y().b[1990][0]++,s===n)&&(cov_2dj4df7l8y().b[1990][1]++,s<=0?(cov_2dj4df7l8y().b[1991][0]++,o(1),r(10)):(cov_2dj4df7l8y().b[1991][1]++,o(Bt(s,-1)),r(Bt(n,1)))),(cov_2dj4df7l8y().b[1992][0]++,s<=0)&&(cov_2dj4df7l8y().b[1992][1]++,o(Bt(n,-1))),(cov_2dj4df7l8y().b[1993][0]++,n<=0)&&(cov_2dj4df7l8y().b[1993][1]++,r(Bt(s,1))),this.min=s,this.max=n;}buildTicks(){cov_2dj4df7l8y().f[1301]++;let i=(cov_2dj4df7l8y().s[4819]++,this.options),t=(cov_2dj4df7l8y().s[4820]++,{min:this._userMin,max:this._userMax}),s=(cov_2dj4df7l8y().s[4821]++,Dh(t,this));cov_2dj4df7l8y().s[4822]++;return(cov_2dj4df7l8y().b[1994][0]++,i.bounds==="ticks")&&(cov_2dj4df7l8y().b[1994][1]++,Ci(s,this,"value")),i.reverse?(cov_2dj4df7l8y().b[1995][0]++,s.reverse(),this.start=this.max,this.end=this.min):(cov_2dj4df7l8y().b[1995][1]++,this.start=this.min,this.end=this.max),s;}getLabelForValue(i){cov_2dj4df7l8y().f[1302]++;cov_2dj4df7l8y().s[4823]++;return i===void 0?(cov_2dj4df7l8y().b[1996][0]++,"0"):(cov_2dj4df7l8y().b[1996][1]++,Zt(i,this.chart.options.locale,this.options.ticks.format));}configure(){cov_2dj4df7l8y().f[1303]++;let i=(cov_2dj4df7l8y().s[4824]++,this.min);cov_2dj4df7l8y().s[4825]++;super.configure(),this._startValue=gt(i),this._valueRange=gt(this.max)-gt(i);}getPixelForValue(i){cov_2dj4df7l8y().f[1304]++;cov_2dj4df7l8y().s[4826]++;return((cov_2dj4df7l8y().b[1997][0]++,i===void 0)||(cov_2dj4df7l8y().b[1997][1]++,i===0))&&(cov_2dj4df7l8y().b[1997][2]++,i=this.min),(cov_2dj4df7l8y().b[1999][0]++,i===null)||(cov_2dj4df7l8y().b[1999][1]++,isNaN(i))?(cov_2dj4df7l8y().b[1998][0]++,NaN):(cov_2dj4df7l8y().b[1998][1]++,this.getPixelForDecimal(i===this.min?(cov_2dj4df7l8y().b[2000][0]++,0):(cov_2dj4df7l8y().b[2000][1]++,(gt(i)-this._startValue)/this._valueRange)));}getValueForPixel(i){cov_2dj4df7l8y().f[1305]++;let t=(cov_2dj4df7l8y().s[4827]++,this.getDecimalForPixel(i));cov_2dj4df7l8y().s[4828]++;return Math.pow(10,this._startValue+t*this._valueRange);}};function ws(e){cov_2dj4df7l8y().f[1306]++;let i=(cov_2dj4df7l8y().s[4829]++,e.ticks);cov_2dj4df7l8y().s[4830]++;if((cov_2dj4df7l8y().b[2002][0]++,i.display)&&(cov_2dj4df7l8y().b[2002][1]++,e.display)){cov_2dj4df7l8y().b[2001][0]++;let t=(cov_2dj4df7l8y().s[4831]++,K(i.backdropPadding));cov_2dj4df7l8y().s[4832]++;return C((cov_2dj4df7l8y().b[2003][0]++,i.font)&&(cov_2dj4df7l8y().b[2003][1]++,i.font.size),F.font.size)+t.height;}else{cov_2dj4df7l8y().b[2001][1]++;}cov_2dj4df7l8y().s[4833]++;return 0;}function Oh(e,i,t){cov_2dj4df7l8y().f[1307]++;cov_2dj4df7l8y().s[4834]++;return t=z(t)?(cov_2dj4df7l8y().b[2004][0]++,t):(cov_2dj4df7l8y().b[2004][1]++,[t]),{w:_n(e,i.string,t),h:t.length*i.lineHeight};}function Oo(e,i,t,s,n){cov_2dj4df7l8y().f[1308]++;cov_2dj4df7l8y().s[4835]++;return(cov_2dj4df7l8y().b[2006][0]++,e===s)||(cov_2dj4df7l8y().b[2006][1]++,e===n)?(cov_2dj4df7l8y().b[2005][0]++,{start:i-t/2,end:i+t/2}):(cov_2dj4df7l8y().b[2005][1]++,(cov_2dj4df7l8y().b[2008][0]++,en)?(cov_2dj4df7l8y().b[2007][0]++,{start:i-t,end:i}):(cov_2dj4df7l8y().b[2007][1]++,{start:i,end:i+t}));}function Ah(e){cov_2dj4df7l8y().f[1309]++;let i=(cov_2dj4df7l8y().s[4836]++,{l:e.left+e._padding.left,r:e.right-e._padding.right,t:e.top+e._padding.top,b:e.bottom-e._padding.bottom}),t=(cov_2dj4df7l8y().s[4837]++,Object.assign({},i)),s=(cov_2dj4df7l8y().s[4838]++,[]),n=(cov_2dj4df7l8y().s[4839]++,[]),o=(cov_2dj4df7l8y().s[4840]++,e._pointLabels.length),r=(cov_2dj4df7l8y().s[4841]++,e.options.pointLabels),a=(cov_2dj4df7l8y().s[4842]++,r.centerPointLabels?(cov_2dj4df7l8y().b[2009][0]++,L/o):(cov_2dj4df7l8y().b[2009][1]++,0));cov_2dj4df7l8y().s[4843]++;for(let l=(cov_2dj4df7l8y().s[4844]++,0);li.r)&&(cov_2dj4df7l8y().b[2011][1]++,a=(s.end-i.r)/o,e.r=Math.max(e.r,i.r+a))),n.starti.b)&&(cov_2dj4df7l8y().b[2013][1]++,l=(n.end-i.b)/r,e.b=Math.max(e.b,i.b+l)));}function Lh(e,i,t){cov_2dj4df7l8y().f[1311]++;let s=(cov_2dj4df7l8y().s[4862]++,e.drawingArea),{extra:n,additionalAngle:o,padding:r,size:a}=(cov_2dj4df7l8y().s[4863]++,t),l=(cov_2dj4df7l8y().s[4864]++,e.getPointPosition(i,s+n+r,o)),c=(cov_2dj4df7l8y().s[4865]++,Math.round(Ne(U(l.angle+V)))),h=(cov_2dj4df7l8y().s[4866]++,zh(l.y,a.h,c)),d=(cov_2dj4df7l8y().s[4867]++,Ih(c)),f=(cov_2dj4df7l8y().s[4868]++,Fh(l.x,a.w,d));cov_2dj4df7l8y().s[4869]++;return{visible:!0,x:l.x,y:h,textAlign:d,left:f,top:h,right:f+a.w,bottom:h+a.h};}function Rh(e,i){cov_2dj4df7l8y().f[1312]++;cov_2dj4df7l8y().s[4870]++;if(!i){cov_2dj4df7l8y().b[2014][0]++;cov_2dj4df7l8y().s[4871]++;return!0;}else{cov_2dj4df7l8y().b[2014][1]++;}let{left:t,top:s,right:n,bottom:o}=(cov_2dj4df7l8y().s[4872]++,e);cov_2dj4df7l8y().s[4873]++;return!((cov_2dj4df7l8y().b[2015][0]++,at({x:t,y:s},i))||(cov_2dj4df7l8y().b[2015][1]++,at({x:t,y:o},i))||(cov_2dj4df7l8y().b[2015][2]++,at({x:n,y:s},i))||(cov_2dj4df7l8y().b[2015][3]++,at({x:n,y:o},i)));}function Eh(e,i,t){cov_2dj4df7l8y().f[1313]++;let s=(cov_2dj4df7l8y().s[4874]++,[]),n=(cov_2dj4df7l8y().s[4875]++,e._pointLabels.length),o=(cov_2dj4df7l8y().s[4876]++,e.options),{centerPointLabels:r,display:a}=(cov_2dj4df7l8y().s[4877]++,o.pointLabels),l=(cov_2dj4df7l8y().s[4878]++,{extra:ws(o)/2,additionalAngle:r?(cov_2dj4df7l8y().b[2016][0]++,L/n):(cov_2dj4df7l8y().b[2016][1]++,0)}),c;cov_2dj4df7l8y().s[4879]++;for(let h=(cov_2dj4df7l8y().s[4880]++,0);h270)||(cov_2dj4df7l8y().b[2026][1]++,t<90))&&(cov_2dj4df7l8y().b[2026][2]++,e-=i)),e;}function Bh(e,i,t){cov_2dj4df7l8y().f[1317]++;let{left:s,top:n,right:o,bottom:r}=(cov_2dj4df7l8y().s[4888]++,t),{backdropColor:a}=(cov_2dj4df7l8y().s[4889]++,i);cov_2dj4df7l8y().s[4890]++;if(!O(a)){cov_2dj4df7l8y().b[2027][0]++;let l=(cov_2dj4df7l8y().s[4891]++,Ct(i.borderRadius)),c=(cov_2dj4df7l8y().s[4892]++,K(i.backdropPadding));cov_2dj4df7l8y().s[4893]++;e.fillStyle=a;let h=(cov_2dj4df7l8y().s[4894]++,s-c.left),d=(cov_2dj4df7l8y().s[4895]++,n-c.top),f=(cov_2dj4df7l8y().s[4896]++,o-s+c.width),u=(cov_2dj4df7l8y().s[4897]++,r-n+c.height);cov_2dj4df7l8y().s[4898]++;Object.values(l).some(p=>{cov_2dj4df7l8y().f[1318]++;cov_2dj4df7l8y().s[4899]++;return p!==0;})?(cov_2dj4df7l8y().b[2028][0]++,e.beginPath(),Qt(e,{x:h,y:d,w:f,h:u,radius:l}),e.fill()):(cov_2dj4df7l8y().b[2028][1]++,e.fillRect(h,d,f,u));}else{cov_2dj4df7l8y().b[2027][1]++;}}function Wh(e,i){cov_2dj4df7l8y().f[1319]++;let{ctx:t,options:{pointLabels:s}}=(cov_2dj4df7l8y().s[4900]++,e);cov_2dj4df7l8y().s[4901]++;for(let n=(cov_2dj4df7l8y().s[4902]++,i-1);n>=0;n--){let o=(cov_2dj4df7l8y().s[4903]++,e._pointLabelItems[n]);cov_2dj4df7l8y().s[4904]++;if(!o.visible){cov_2dj4df7l8y().b[2029][0]++;cov_2dj4df7l8y().s[4905]++;continue;}else{cov_2dj4df7l8y().b[2029][1]++;}let r=(cov_2dj4df7l8y().s[4906]++,s.setContext(e.getPointLabelContext(n)));cov_2dj4df7l8y().s[4907]++;Bh(t,r,o);let a=(cov_2dj4df7l8y().s[4908]++,j(r.font)),{x:l,y:c,textAlign:h}=(cov_2dj4df7l8y().s[4909]++,o);cov_2dj4df7l8y().s[4910]++;wt(t,e._pointLabels[n],l,c+a.lineHeight/2,a,{color:r.color,textAlign:h,textBaseline:"middle"});}}function er(e,i,t,s){cov_2dj4df7l8y().f[1320]++;let{ctx:n}=(cov_2dj4df7l8y().s[4911]++,e);cov_2dj4df7l8y().s[4912]++;if(t){cov_2dj4df7l8y().b[2030][0]++;cov_2dj4df7l8y().s[4913]++;n.arc(e.xCenter,e.yCenter,i,0,B);}else{cov_2dj4df7l8y().b[2030][1]++;let o=(cov_2dj4df7l8y().s[4914]++,e.getPointPosition(0,i));cov_2dj4df7l8y().s[4915]++;n.moveTo(o.x,o.y);cov_2dj4df7l8y().s[4916]++;for(let r=(cov_2dj4df7l8y().s[4917]++,1);r{cov_2dj4df7l8y().f[1329]++;let n=(cov_2dj4df7l8y().s[4939]++,I(this.options.pointLabels.callback,[t,s],this));cov_2dj4df7l8y().s[4940]++;return(cov_2dj4df7l8y().b[2038][0]++,n)||(cov_2dj4df7l8y().b[2038][1]++,n===0)?(cov_2dj4df7l8y().b[2037][0]++,n):(cov_2dj4df7l8y().b[2037][1]++,"");}).filter((t,s)=>{cov_2dj4df7l8y().f[1330]++;cov_2dj4df7l8y().s[4941]++;return this.chart.getDataVisibility(s);});}fit(){cov_2dj4df7l8y().f[1331]++;let i=(cov_2dj4df7l8y().s[4942]++,this.options);cov_2dj4df7l8y().s[4943]++;(cov_2dj4df7l8y().b[2040][0]++,i.display)&&(cov_2dj4df7l8y().b[2040][1]++,i.pointLabels.display)?(cov_2dj4df7l8y().b[2039][0]++,Ah(this)):(cov_2dj4df7l8y().b[2039][1]++,this.setCenterPoint(0,0,0,0));}setCenterPoint(i,t,s,n){cov_2dj4df7l8y().f[1332]++;cov_2dj4df7l8y().s[4944]++;this.xCenter+=Math.floor((i-t)/2),this.yCenter+=Math.floor((s-n)/2),this.drawingArea-=Math.min(this.drawingArea/2,Math.max(i,t,s,n));}getIndexAngle(i){cov_2dj4df7l8y().f[1333]++;let t=(cov_2dj4df7l8y().s[4945]++,B/((cov_2dj4df7l8y().b[2041][0]++,this._pointLabels.length)||(cov_2dj4df7l8y().b[2041][1]++,1))),s=(cov_2dj4df7l8y().s[4946]++,(cov_2dj4df7l8y().b[2042][0]++,this.options.startAngle)||(cov_2dj4df7l8y().b[2042][1]++,0));cov_2dj4df7l8y().s[4947]++;return U(i*t+it(s));}getDistanceFromCenterForValue(i){cov_2dj4df7l8y().f[1334]++;cov_2dj4df7l8y().s[4948]++;if(O(i)){cov_2dj4df7l8y().b[2043][0]++;cov_2dj4df7l8y().s[4949]++;return NaN;}else{cov_2dj4df7l8y().b[2043][1]++;}let t=(cov_2dj4df7l8y().s[4950]++,this.drawingArea/(this.max-this.min));cov_2dj4df7l8y().s[4951]++;return this.options.reverse?(cov_2dj4df7l8y().b[2044][0]++,(this.max-i)*t):(cov_2dj4df7l8y().b[2044][1]++,(i-this.min)*t);}getValueForDistanceFromCenter(i){cov_2dj4df7l8y().f[1335]++;cov_2dj4df7l8y().s[4952]++;if(O(i)){cov_2dj4df7l8y().b[2045][0]++;cov_2dj4df7l8y().s[4953]++;return NaN;}else{cov_2dj4df7l8y().b[2045][1]++;}let t=(cov_2dj4df7l8y().s[4954]++,i/(this.drawingArea/(this.max-this.min)));cov_2dj4df7l8y().s[4955]++;return this.options.reverse?(cov_2dj4df7l8y().b[2046][0]++,this.max-t):(cov_2dj4df7l8y().b[2046][1]++,this.min+t);}getPointLabelContext(i){cov_2dj4df7l8y().f[1336]++;let t=(cov_2dj4df7l8y().s[4956]++,(cov_2dj4df7l8y().b[2047][0]++,this._pointLabels)||(cov_2dj4df7l8y().b[2047][1]++,[]));cov_2dj4df7l8y().s[4957]++;if((cov_2dj4df7l8y().b[2049][0]++,i>=0)&&(cov_2dj4df7l8y().b[2049][1]++,i{cov_2dj4df7l8y().f[1343]++;cov_2dj4df7l8y().s[4975]++;if((cov_2dj4df7l8y().b[2057][0]++,d!==0)||(cov_2dj4df7l8y().b[2057][1]++,d===0)&&(cov_2dj4df7l8y().b[2057][2]++,this.min<0)){cov_2dj4df7l8y().b[2056][0]++;cov_2dj4df7l8y().s[4976]++;l=this.getDistanceFromCenterForValue(h.value);let f=(cov_2dj4df7l8y().s[4977]++,this.getContext(d)),u=(cov_2dj4df7l8y().s[4978]++,n.setContext(f)),p=(cov_2dj4df7l8y().s[4979]++,o.setContext(f));cov_2dj4df7l8y().s[4980]++;Nh(this,u,l,r,p);}else{cov_2dj4df7l8y().b[2056][1]++;}})),s.display){cov_2dj4df7l8y().b[2053][0]++;cov_2dj4df7l8y().s[4981]++;for(i.save(),a=r-1;a>=0;a--){let h=(cov_2dj4df7l8y().s[4982]++,s.setContext(this.getPointLabelContext(a))),{color:d,lineWidth:f}=(cov_2dj4df7l8y().s[4983]++,h);cov_2dj4df7l8y().s[4984]++;(cov_2dj4df7l8y().b[2058][0]++,!f)||(cov_2dj4df7l8y().b[2058][1]++,!d)||(cov_2dj4df7l8y().b[2058][2]++,i.lineWidth=f,i.strokeStyle=d,i.setLineDash(h.borderDash),i.lineDashOffset=h.borderDashOffset,l=this.getDistanceFromCenterForValue(t.reverse?(cov_2dj4df7l8y().b[2059][0]++,this.min):(cov_2dj4df7l8y().b[2059][1]++,this.max)),c=this.getPointPosition(a,l),i.beginPath(),i.moveTo(this.xCenter,this.yCenter),i.lineTo(c.x,c.y),i.stroke());}cov_2dj4df7l8y().s[4985]++;i.restore();}else{cov_2dj4df7l8y().b[2053][1]++;}}drawBorder(){cov_2dj4df7l8y().f[1344]++;}drawLabels(){cov_2dj4df7l8y().f[1345]++;let i=(cov_2dj4df7l8y().s[4986]++,this.ctx),t=(cov_2dj4df7l8y().s[4987]++,this.options),s=(cov_2dj4df7l8y().s[4988]++,t.ticks);cov_2dj4df7l8y().s[4989]++;if(!s.display){cov_2dj4df7l8y().b[2060][0]++;cov_2dj4df7l8y().s[4990]++;return;}else{cov_2dj4df7l8y().b[2060][1]++;}let n=(cov_2dj4df7l8y().s[4991]++,this.getIndexAngle(0)),o,r;cov_2dj4df7l8y().s[4992]++;i.save(),i.translate(this.xCenter,this.yCenter),i.rotate(n),i.textAlign="center",i.textBaseline="middle",this.ticks.forEach((a,l)=>{cov_2dj4df7l8y().f[1346]++;cov_2dj4df7l8y().s[4993]++;if((cov_2dj4df7l8y().b[2062][0]++,l===0)&&(cov_2dj4df7l8y().b[2062][1]++,this.min>=0)&&(cov_2dj4df7l8y().b[2062][2]++,!t.reverse)){cov_2dj4df7l8y().b[2061][0]++;cov_2dj4df7l8y().s[4994]++;return;}else{cov_2dj4df7l8y().b[2061][1]++;}let c=(cov_2dj4df7l8y().s[4995]++,s.setContext(this.getContext(l))),h=(cov_2dj4df7l8y().s[4996]++,j(c.font));cov_2dj4df7l8y().s[4997]++;if(o=this.getDistanceFromCenterForValue(this.ticks[l].value),c.showLabelBackdrop){cov_2dj4df7l8y().b[2063][0]++;cov_2dj4df7l8y().s[4998]++;i.font=h.string,r=i.measureText(a.label).width,i.fillStyle=c.backdropColor;let d=(cov_2dj4df7l8y().s[4999]++,K(c.backdropPadding));cov_2dj4df7l8y().s[5000]++;i.fillRect(-r/2-d.left,-o-h.size/2-d.top,r+d.width,h.size+d.height);}else{cov_2dj4df7l8y().b[2063][1]++;}cov_2dj4df7l8y().s[5001]++;wt(i,a.label,0,-o,h,{color:c.color,strokeColor:c.textStrokeColor,strokeWidth:c.textStrokeWidth});}),i.restore();}drawTitle(){cov_2dj4df7l8y().f[1347]++;}},ui=(cov_2dj4df7l8y().s[5002]++,{millisecond:{common:!0,size:1,steps:1e3},second:{common:!0,size:1e3,steps:60},minute:{common:!0,size:6e4,steps:60},hour:{common:!0,size:36e5,steps:24},day:{common:!0,size:864e5,steps:30},week:{common:!1,size:6048e5,steps:4},month:{common:!0,size:2628e6,steps:12},quarter:{common:!1,size:7884e6,steps:4},year:{common:!0,size:3154e7}}),Q=(cov_2dj4df7l8y().s[5003]++,Object.keys(ui));function Ao(e,i){cov_2dj4df7l8y().f[1348]++;cov_2dj4df7l8y().s[5004]++;return e-i;}function To(e,i){cov_2dj4df7l8y().f[1349]++;cov_2dj4df7l8y().s[5005]++;if(O(i)){cov_2dj4df7l8y().b[2064][0]++;cov_2dj4df7l8y().s[5006]++;return null;}else{cov_2dj4df7l8y().b[2064][1]++;}let t=(cov_2dj4df7l8y().s[5007]++,e._adapter),{parser:s,round:n,isoWeekday:o}=(cov_2dj4df7l8y().s[5008]++,e._parseOpts),r=(cov_2dj4df7l8y().s[5009]++,i);cov_2dj4df7l8y().s[5010]++;return(cov_2dj4df7l8y().b[2065][0]++,typeof s=="function")&&(cov_2dj4df7l8y().b[2065][1]++,r=s(r)),(cov_2dj4df7l8y().b[2066][0]++,N(r))||(cov_2dj4df7l8y().b[2066][1]++,r=typeof s=="string"?(cov_2dj4df7l8y().b[2067][0]++,t.parse(r,s)):(cov_2dj4df7l8y().b[2067][1]++,t.parse(r))),r===null?(cov_2dj4df7l8y().b[2068][0]++,null):(cov_2dj4df7l8y().b[2068][1]++,(cov_2dj4df7l8y().b[2069][0]++,n)&&(cov_2dj4df7l8y().b[2069][1]++,r=(cov_2dj4df7l8y().b[2071][0]++,n==="week")&&((cov_2dj4df7l8y().b[2071][1]++,It(o))||(cov_2dj4df7l8y().b[2071][2]++,o===!0))?(cov_2dj4df7l8y().b[2070][0]++,t.startOf(r,"isoWeek",o)):(cov_2dj4df7l8y().b[2070][1]++,t.startOf(r,n))),+r);}function Lo(e,i,t,s){cov_2dj4df7l8y().f[1350]++;let n=(cov_2dj4df7l8y().s[5011]++,Q.length);cov_2dj4df7l8y().s[5012]++;for(let o=(cov_2dj4df7l8y().s[5013]++,Q.indexOf(e));o=Q.indexOf(t);o--){let r=(cov_2dj4df7l8y().s[5021]++,Q[o]);cov_2dj4df7l8y().s[5022]++;if((cov_2dj4df7l8y().b[2076][0]++,ui[r].common)&&(cov_2dj4df7l8y().b[2076][1]++,e._adapter.diff(n,s,r)>=i-1)){cov_2dj4df7l8y().b[2075][0]++;cov_2dj4df7l8y().s[5023]++;return r;}else{cov_2dj4df7l8y().b[2075][1]++;}}cov_2dj4df7l8y().s[5024]++;return Q[t?(cov_2dj4df7l8y().b[2077][0]++,Q.indexOf(t)):(cov_2dj4df7l8y().b[2077][1]++,0)];}function jh(e){cov_2dj4df7l8y().f[1352]++;cov_2dj4df7l8y().s[5025]++;for(let i=(cov_2dj4df7l8y().s[5026]++,Q.indexOf(e)+1),t=(cov_2dj4df7l8y().s[5027]++,Q.length);i=i?(cov_2dj4df7l8y().b[2081][0]++,t[s]):(cov_2dj4df7l8y().b[2081][1]++,t[n]));cov_2dj4df7l8y().s[5035]++;e[o]=!0;}else{cov_2dj4df7l8y().b[2080][1]++;}}}function Yh(e,i,t,s){cov_2dj4df7l8y().f[1354]++;let n=(cov_2dj4df7l8y().s[5036]++,e._adapter),o=(cov_2dj4df7l8y().s[5037]++,+n.startOf(i[0].value,s)),r=(cov_2dj4df7l8y().s[5038]++,i[i.length-1].value),a,l;cov_2dj4df7l8y().s[5039]++;for(a=o;a<=r;a=+n.add(a,1,s)){cov_2dj4df7l8y().s[5040]++;l=t[a],(cov_2dj4df7l8y().b[2082][0]++,l>=0)&&(cov_2dj4df7l8y().b[2082][1]++,i[l].major=!0);}cov_2dj4df7l8y().s[5041]++;return i;}function Eo(e,i,t){cov_2dj4df7l8y().f[1355]++;let s=(cov_2dj4df7l8y().s[5042]++,[]),n=(cov_2dj4df7l8y().s[5043]++,{}),o=(cov_2dj4df7l8y().s[5044]++,i.length),r,a;cov_2dj4df7l8y().s[5045]++;for(r=0;r{cov_2dj4df7l8y().f[1356]++;class e extends Wt{static id=(cov_2dj4df7l8y().s[5049]++,"time");static defaults=(cov_2dj4df7l8y().s[5050]++,{bounds:"data",adapters:{},time:{parser:!1,unit:!1,round:!1,isoWeekday:!1,minUnit:"millisecond",displayFormats:{}},ticks:{source:"auto",callback:!1,major:{enabled:!1}}});constructor(t){cov_2dj4df7l8y().f[1357]++;cov_2dj4df7l8y().s[5051]++;super(t),this._cache={data:[],labels:[],all:[]},this._unit="day",this._majorUnit=void 0,this._offsets={},this._normalized=!1,this._parseOpts=void 0;}init(t,s=(cov_2dj4df7l8y().b[2085][0]++,{})){cov_2dj4df7l8y().f[1358]++;let n=(cov_2dj4df7l8y().s[5052]++,(cov_2dj4df7l8y().b[2086][0]++,t.time)||(cov_2dj4df7l8y().b[2086][1]++,t.time={})),o=(cov_2dj4df7l8y().s[5053]++,this._adapter=new el._date(t.adapters.date));cov_2dj4df7l8y().s[5054]++;o.init(s),Kt(n.displayFormats,o.formats()),this._parseOpts={parser:n.parser,round:n.round,isoWeekday:n.isoWeekday},super.init(t),this._normalized=s.normalized;}parse(t,s){cov_2dj4df7l8y().f[1359]++;cov_2dj4df7l8y().s[5055]++;return t===void 0?(cov_2dj4df7l8y().b[2087][0]++,null):(cov_2dj4df7l8y().b[2087][1]++,To(this,t));}beforeLayout(){cov_2dj4df7l8y().f[1360]++;cov_2dj4df7l8y().s[5056]++;super.beforeLayout(),this._cache={data:[],labels:[],all:[]};}determineDataLimits(){cov_2dj4df7l8y().f[1361]++;let t=(cov_2dj4df7l8y().s[5057]++,this.options),s=(cov_2dj4df7l8y().s[5058]++,this._adapter),n=(cov_2dj4df7l8y().s[5059]++,(cov_2dj4df7l8y().b[2088][0]++,t.time.unit)||(cov_2dj4df7l8y().b[2088][1]++,"day")),{min:o,max:r,minDefined:a,maxDefined:l}=(cov_2dj4df7l8y().s[5060]++,this.getUserBounds());function c(h){cov_2dj4df7l8y().f[1362]++;cov_2dj4df7l8y().s[5061]++;(cov_2dj4df7l8y().b[2089][0]++,!a)&&(cov_2dj4df7l8y().b[2089][1]++,!isNaN(h.min))&&(cov_2dj4df7l8y().b[2089][2]++,o=Math.min(o,h.min)),(cov_2dj4df7l8y().b[2090][0]++,!l)&&(cov_2dj4df7l8y().b[2090][1]++,!isNaN(h.max))&&(cov_2dj4df7l8y().b[2090][2]++,r=Math.max(r,h.max));}cov_2dj4df7l8y().s[5062]++;((cov_2dj4df7l8y().b[2091][0]++,!a)||(cov_2dj4df7l8y().b[2091][1]++,!l))&&(cov_2dj4df7l8y().b[2091][2]++,c(this._getLabelBounds()),((cov_2dj4df7l8y().b[2092][0]++,t.bounds!=="ticks")||(cov_2dj4df7l8y().b[2092][1]++,t.ticks.source!=="labels"))&&(cov_2dj4df7l8y().b[2092][2]++,c(this.getMinMax(!1)))),o=(cov_2dj4df7l8y().b[2094][0]++,N(o))&&(cov_2dj4df7l8y().b[2094][1]++,!isNaN(o))?(cov_2dj4df7l8y().b[2093][0]++,o):(cov_2dj4df7l8y().b[2093][1]++,+s.startOf(Date.now(),n)),r=(cov_2dj4df7l8y().b[2096][0]++,N(r))&&(cov_2dj4df7l8y().b[2096][1]++,!isNaN(r))?(cov_2dj4df7l8y().b[2095][0]++,r):(cov_2dj4df7l8y().b[2095][1]++,+s.endOf(Date.now(),n)+1),this.min=Math.min(o,r-1),this.max=Math.max(o+1,r);}_getLabelBounds(){cov_2dj4df7l8y().f[1363]++;let t=(cov_2dj4df7l8y().s[5063]++,this.getLabelTimestamps()),s=(cov_2dj4df7l8y().s[5064]++,Number.POSITIVE_INFINITY),n=(cov_2dj4df7l8y().s[5065]++,Number.NEGATIVE_INFINITY);cov_2dj4df7l8y().s[5066]++;return(cov_2dj4df7l8y().b[2097][0]++,t.length)&&(cov_2dj4df7l8y().b[2097][1]++,s=t[0],n=t[t.length-1]),{min:s,max:n};}buildTicks(){cov_2dj4df7l8y().f[1364]++;let t=(cov_2dj4df7l8y().s[5067]++,this.options),s=(cov_2dj4df7l8y().s[5068]++,t.time),n=(cov_2dj4df7l8y().s[5069]++,t.ticks),o=(cov_2dj4df7l8y().s[5070]++,n.source==="labels"?(cov_2dj4df7l8y().b[2098][0]++,this.getLabelTimestamps()):(cov_2dj4df7l8y().b[2098][1]++,this._generate()));cov_2dj4df7l8y().s[5071]++;(cov_2dj4df7l8y().b[2099][0]++,t.bounds==="ticks")&&(cov_2dj4df7l8y().b[2099][1]++,o.length)&&(cov_2dj4df7l8y().b[2099][2]++,this.min=(cov_2dj4df7l8y().b[2100][0]++,this._userMin)||(cov_2dj4df7l8y().b[2100][1]++,o[0]),this.max=(cov_2dj4df7l8y().b[2101][0]++,this._userMax)||(cov_2dj4df7l8y().b[2101][1]++,o[o.length-1]));let r=(cov_2dj4df7l8y().s[5072]++,this.min),a=(cov_2dj4df7l8y().s[5073]++,this.max),l=(cov_2dj4df7l8y().s[5074]++,un(o,r,a));cov_2dj4df7l8y().s[5075]++;return this._unit=(cov_2dj4df7l8y().b[2102][0]++,s.unit)||(cov_2dj4df7l8y().b[2102][1]++,n.autoSkip?(cov_2dj4df7l8y().b[2103][0]++,Lo(s.minUnit,this.min,this.max,this._getLabelCapacity(r))):(cov_2dj4df7l8y().b[2103][1]++,Hh(this,l.length,s.minUnit,this.min,this.max))),this._majorUnit=(cov_2dj4df7l8y().b[2105][0]++,!n.major.enabled)||(cov_2dj4df7l8y().b[2105][1]++,this._unit==="year")?(cov_2dj4df7l8y().b[2104][0]++,void 0):(cov_2dj4df7l8y().b[2104][1]++,jh(this._unit)),this.initOffsets(o),(cov_2dj4df7l8y().b[2106][0]++,t.reverse)&&(cov_2dj4df7l8y().b[2106][1]++,l.reverse()),Eo(this,l,this._majorUnit);}afterAutoSkip(){cov_2dj4df7l8y().f[1365]++;cov_2dj4df7l8y().s[5076]++;(cov_2dj4df7l8y().b[2107][0]++,this.options.offsetAfterAutoskip)&&(cov_2dj4df7l8y().b[2107][1]++,this.initOffsets(this.ticks.map(t=>{cov_2dj4df7l8y().f[1366]++;cov_2dj4df7l8y().s[5077]++;return+t.value;})));}initOffsets(t=(cov_2dj4df7l8y().b[2108][0]++,[])){cov_2dj4df7l8y().f[1367]++;let s=(cov_2dj4df7l8y().s[5078]++,0),n=(cov_2dj4df7l8y().s[5079]++,0),o,r;cov_2dj4df7l8y().s[5080]++;(cov_2dj4df7l8y().b[2109][0]++,this.options.offset)&&(cov_2dj4df7l8y().b[2109][1]++,t.length)&&(cov_2dj4df7l8y().b[2109][2]++,o=this.getDecimalForValue(t[0]),t.length===1?(cov_2dj4df7l8y().b[2110][0]++,s=1-o):(cov_2dj4df7l8y().b[2110][1]++,s=(this.getDecimalForValue(t[1])-o)/2),r=this.getDecimalForValue(t[t.length-1]),t.length===1?(cov_2dj4df7l8y().b[2111][0]++,n=r):(cov_2dj4df7l8y().b[2111][1]++,n=(r-this.getDecimalForValue(t[t.length-2]))/2));let a=(cov_2dj4df7l8y().s[5081]++,t.length<3?(cov_2dj4df7l8y().b[2112][0]++,.5):(cov_2dj4df7l8y().b[2112][1]++,.25));cov_2dj4df7l8y().s[5082]++;s=Y(s,0,a),n=Y(n,0,a),this._offsets={start:s,end:n,factor:1/(s+1+n)};}_generate(){cov_2dj4df7l8y().f[1368]++;let t=(cov_2dj4df7l8y().s[5083]++,this._adapter),s=(cov_2dj4df7l8y().s[5084]++,this.min),n=(cov_2dj4df7l8y().s[5085]++,this.max),o=(cov_2dj4df7l8y().s[5086]++,this.options),r=(cov_2dj4df7l8y().s[5087]++,o.time),a=(cov_2dj4df7l8y().s[5088]++,(cov_2dj4df7l8y().b[2113][0]++,r.unit)||(cov_2dj4df7l8y().b[2113][1]++,Lo(r.minUnit,s,n,this._getLabelCapacity(s)))),l=(cov_2dj4df7l8y().s[5089]++,C(o.ticks.stepSize,1)),c=(cov_2dj4df7l8y().s[5090]++,a==="week"?(cov_2dj4df7l8y().b[2114][0]++,r.isoWeekday):(cov_2dj4df7l8y().b[2114][1]++,!1)),h=(cov_2dj4df7l8y().s[5091]++,(cov_2dj4df7l8y().b[2115][0]++,It(c))||(cov_2dj4df7l8y().b[2115][1]++,c===!0)),d=(cov_2dj4df7l8y().s[5092]++,{}),f=(cov_2dj4df7l8y().s[5093]++,s),u,p;cov_2dj4df7l8y().s[5094]++;if((cov_2dj4df7l8y().b[2117][0]++,h)&&(cov_2dj4df7l8y().b[2117][1]++,f=+t.startOf(f,"isoWeek",c)),f=+t.startOf(f,h?(cov_2dj4df7l8y().b[2118][0]++,"day"):(cov_2dj4df7l8y().b[2118][1]++,a)),t.diff(n,s,a)>1e5*l){cov_2dj4df7l8y().b[2116][0]++;cov_2dj4df7l8y().s[5095]++;throw new Error(s+" and "+n+" are too far apart with stepSize of "+l+" "+a);}else{cov_2dj4df7l8y().b[2116][1]++;}let g=(cov_2dj4df7l8y().s[5096]++,(cov_2dj4df7l8y().b[2119][0]++,o.ticks.source==="data")&&(cov_2dj4df7l8y().b[2119][1]++,this.getDataTimestamps()));cov_2dj4df7l8y().s[5097]++;for(u=f,p=0;u{cov_2dj4df7l8y().f[1369]++;cov_2dj4df7l8y().s[5100]++;return+m;});}getLabelForValue(t){cov_2dj4df7l8y().f[1370]++;let s=(cov_2dj4df7l8y().s[5101]++,this._adapter),n=(cov_2dj4df7l8y().s[5102]++,this.options.time);cov_2dj4df7l8y().s[5103]++;return n.tooltipFormat?(cov_2dj4df7l8y().b[2121][0]++,s.format(t,n.tooltipFormat)):(cov_2dj4df7l8y().b[2121][1]++,s.format(t,n.displayFormats.datetime));}format(t,s){cov_2dj4df7l8y().f[1371]++;let o=(cov_2dj4df7l8y().s[5104]++,this.options.time.displayFormats),r=(cov_2dj4df7l8y().s[5105]++,this._unit),a=(cov_2dj4df7l8y().s[5106]++,(cov_2dj4df7l8y().b[2122][0]++,s)||(cov_2dj4df7l8y().b[2122][1]++,o[r]));cov_2dj4df7l8y().s[5107]++;return this._adapter.format(t,a);}_tickFormatFunction(t,s,n,o){cov_2dj4df7l8y().f[1372]++;let r=(cov_2dj4df7l8y().s[5108]++,this.options),a=(cov_2dj4df7l8y().s[5109]++,r.ticks.callback);cov_2dj4df7l8y().s[5110]++;if(a){cov_2dj4df7l8y().b[2123][0]++;cov_2dj4df7l8y().s[5111]++;return I(a,[t,s,n],this);}else{cov_2dj4df7l8y().b[2123][1]++;}let l=(cov_2dj4df7l8y().s[5112]++,r.time.displayFormats),c=(cov_2dj4df7l8y().s[5113]++,this._unit),h=(cov_2dj4df7l8y().s[5114]++,this._majorUnit),d=(cov_2dj4df7l8y().s[5115]++,(cov_2dj4df7l8y().b[2124][0]++,c)&&(cov_2dj4df7l8y().b[2124][1]++,l[c])),f=(cov_2dj4df7l8y().s[5116]++,(cov_2dj4df7l8y().b[2125][0]++,h)&&(cov_2dj4df7l8y().b[2125][1]++,l[h])),u=(cov_2dj4df7l8y().s[5117]++,n[s]),p=(cov_2dj4df7l8y().s[5118]++,(cov_2dj4df7l8y().b[2126][0]++,h)&&(cov_2dj4df7l8y().b[2126][1]++,f)&&(cov_2dj4df7l8y().b[2126][2]++,u)&&(cov_2dj4df7l8y().b[2126][3]++,u.major));cov_2dj4df7l8y().s[5119]++;return this._adapter.format(t,(cov_2dj4df7l8y().b[2127][0]++,o)||(cov_2dj4df7l8y().b[2127][1]++,p?(cov_2dj4df7l8y().b[2128][0]++,f):(cov_2dj4df7l8y().b[2128][1]++,d)));}generateTickLabels(t){cov_2dj4df7l8y().f[1373]++;let s,n,o;cov_2dj4df7l8y().s[5120]++;for(s=0,n=t.length;s0?(cov_2dj4df7l8y().b[2133][0]++,l):(cov_2dj4df7l8y().b[2133][1]++,1);}getDataTimestamps(){cov_2dj4df7l8y().f[1379]++;let t=(cov_2dj4df7l8y().s[5143]++,(cov_2dj4df7l8y().b[2134][0]++,this._cache.data)||(cov_2dj4df7l8y().b[2134][1]++,[])),s,n;cov_2dj4df7l8y().s[5144]++;if(t.length){cov_2dj4df7l8y().b[2135][0]++;cov_2dj4df7l8y().s[5145]++;return t;}else{cov_2dj4df7l8y().b[2135][1]++;}let o=(cov_2dj4df7l8y().s[5146]++,this.getMatchingVisibleMetas());cov_2dj4df7l8y().s[5147]++;if((cov_2dj4df7l8y().b[2137][0]++,this._normalized)&&(cov_2dj4df7l8y().b[2137][1]++,o.length)){cov_2dj4df7l8y().b[2136][0]++;cov_2dj4df7l8y().s[5148]++;return this._cache.data=o[0].controller.getAllParsedValues(this);}else{cov_2dj4df7l8y().b[2136][1]++;}cov_2dj4df7l8y().s[5149]++;for(s=0,n=o.length;s=e[s].pos)&&(cov_2dj4df7l8y().b[2142][1]++,i<=e[n].pos)&&(cov_2dj4df7l8y().b[2142][2]++,{lo:s,hi:n}=rt(e,"pos",i)),{pos:o,time:a}=e[s],{pos:r,time:l}=e[n]):(cov_2dj4df7l8y().b[2141][1]++,(cov_2dj4df7l8y().b[2143][0]++,i>=e[s].time)&&(cov_2dj4df7l8y().b[2143][1]++,i<=e[n].time)&&(cov_2dj4df7l8y().b[2143][2]++,{lo:s,hi:n}=rt(e,"time",i)),{time:o,pos:a}=e[s],{time:r,pos:l}=e[n]);let c=(cov_2dj4df7l8y().s[5164]++,r-o);cov_2dj4df7l8y().s[5165]++;return c?(cov_2dj4df7l8y().b[2144][0]++,a+(l-a)*(i-o)/c):(cov_2dj4df7l8y().b[2144][1]++,a);}cov_2dj4df7l8y().s[5166]++;var Ds=class extends Ps{static id=(cov_2dj4df7l8y().s[5167]++,"timeseries");static defaults=(cov_2dj4df7l8y().s[5168]++,Ps.defaults);constructor(i){cov_2dj4df7l8y().f[1383]++;cov_2dj4df7l8y().s[5169]++;super(i),this._table=[],this._minPos=void 0,this._tableRange=void 0;}initOffsets(){cov_2dj4df7l8y().f[1384]++;let i=(cov_2dj4df7l8y().s[5170]++,this._getTimestampsForTable()),t=(cov_2dj4df7l8y().s[5171]++,this._table=this.buildLookupTable(i));cov_2dj4df7l8y().s[5172]++;this._minPos=ei(t,this.min),this._tableRange=ei(t,this.max)-this._minPos,super.initOffsets(i);}buildLookupTable(i){cov_2dj4df7l8y().f[1385]++;let{min:t,max:s}=(cov_2dj4df7l8y().s[5173]++,this),n=(cov_2dj4df7l8y().s[5174]++,[]),o=(cov_2dj4df7l8y().s[5175]++,[]),r,a,l,c,h;cov_2dj4df7l8y().s[5176]++;for(r=0,a=i.length;r=t)&&(cov_2dj4df7l8y().b[2145][1]++,c<=s)&&(cov_2dj4df7l8y().b[2145][2]++,n.push(c));}cov_2dj4df7l8y().s[5178]++;if(n.length<2){cov_2dj4df7l8y().b[2146][0]++;cov_2dj4df7l8y().s[5179]++;return[{time:t,pos:0},{time:s,pos:1}];}else{cov_2dj4df7l8y().b[2146][1]++;}cov_2dj4df7l8y().s[5180]++;for(r=0,a=n.length;r{cov_2dj4df7l8y().f[1387]++;cov_2dj4df7l8y().s[5187]++;return n-o;});}_getTimestampsForTable(){cov_2dj4df7l8y().f[1388]++;let i=(cov_2dj4df7l8y().s[5188]++,(cov_2dj4df7l8y().b[2150][0]++,this._cache.all)||(cov_2dj4df7l8y().b[2150][1]++,[]));cov_2dj4df7l8y().s[5189]++;if(i.length){cov_2dj4df7l8y().b[2151][0]++;cov_2dj4df7l8y().s[5190]++;return i;}else{cov_2dj4df7l8y().b[2151][1]++;}let t=(cov_2dj4df7l8y().s[5191]++,this.getDataTimestamps()),s=(cov_2dj4df7l8y().s[5192]++,this.getLabelTimestamps());cov_2dj4df7l8y().s[5193]++;return(cov_2dj4df7l8y().b[2153][0]++,t.length)&&(cov_2dj4df7l8y().b[2153][1]++,s.length)?(cov_2dj4df7l8y().b[2152][0]++,i=this.normalize(t.concat(s))):(cov_2dj4df7l8y().b[2152][1]++,i=t.length?(cov_2dj4df7l8y().b[2154][0]++,t):(cov_2dj4df7l8y().b[2154][1]++,s)),i=this._cache.all=i,i;}getDecimalForValue(i){cov_2dj4df7l8y().f[1389]++;cov_2dj4df7l8y().s[5194]++;return(ei(this._table,i)-this._minPos)/this._tableRange;}getValueForPixel(i){cov_2dj4df7l8y().f[1390]++;let t=(cov_2dj4df7l8y().s[5195]++,this._offsets),s=(cov_2dj4df7l8y().s[5196]++,this.getDecimalForPixel(i)/t.factor-t.end);cov_2dj4df7l8y().s[5197]++;return ei(this._table,s*this._tableRange+this._minPos,!0);}},$h=(cov_2dj4df7l8y().s[5198]++,Object.freeze({__proto__:null,CategoryScale:wh,LinearScale:ks,LogarithmicScale:Ss,RadialLinearScale:Cs,TimeScale:Ps,TimeSeriesScale:Ds})),ir=(cov_2dj4df7l8y().s[5199]++,[tl,Cc,vh,$h]);function As(e){cov_2dj4df7l8y().f[1391]++;cov_2dj4df7l8y().s[5200]++;if((cov_2dj4df7l8y().b[2156][0]++,!e)||(cov_2dj4df7l8y().b[2156][1]++,typeof e!="object")){cov_2dj4df7l8y().b[2155][0]++;cov_2dj4df7l8y().s[5201]++;return!1;}else{cov_2dj4df7l8y().b[2155][1]++;}let i=(cov_2dj4df7l8y().s[5202]++,Object.getPrototypeOf(e));cov_2dj4df7l8y().s[5203]++;return(cov_2dj4df7l8y().b[2158][0]++,i===null)||(cov_2dj4df7l8y().b[2158][1]++,i===Object.prototype)||(cov_2dj4df7l8y().b[2158][2]++,Object.getPrototypeOf(i)===null)?(cov_2dj4df7l8y().b[2157][0]++,Object.prototype.toString.call(e)==="[object Object]"):(cov_2dj4df7l8y().b[2157][1]++,!1);}function sr(e){cov_2dj4df7l8y().f[1392]++;cov_2dj4df7l8y().s[5204]++;return e==="__proto__";}function Nt(e,i){cov_2dj4df7l8y().f[1393]++;let t=(cov_2dj4df7l8y().s[5205]++,Object.keys(i));cov_2dj4df7l8y().s[5206]++;for(let s=(cov_2dj4df7l8y().s[5207]++,0);s{cov_2dj4df7l8y().f[1397]++;class e{constructor(){cov_2dj4df7l8y().f[1398]++;cov_2dj4df7l8y().s[5221]++;this.colorschemesOptions=new Ts(void 0);}setColorschemesOptions(t){cov_2dj4df7l8y().f[1399]++;cov_2dj4df7l8y().s[5222]++;this.pColorschemesOptions=t,this.colorschemesOptions.next(t);}getColorschemesOptions(){cov_2dj4df7l8y().f[1400]++;cov_2dj4df7l8y().s[5223]++;return this.pColorschemesOptions;}static{cov_2dj4df7l8y().s[5224]++;this.ɵfac=function(s){cov_2dj4df7l8y().f[1401]++;cov_2dj4df7l8y().s[5225]++;return new((cov_2dj4df7l8y().b[2166][0]++,s)||(cov_2dj4df7l8y().b[2166][1]++,e))();};}static{cov_2dj4df7l8y().s[5226]++;this.ɵprov=Rs({token:e,factory:e.ɵfac,providedIn:"root"});}}cov_2dj4df7l8y().s[5227]++;return e;})()),_d=(cov_2dj4df7l8y().s[5228]++,(()=>{cov_2dj4df7l8y().f[1402]++;class e{constructor(){cov_2dj4df7l8y().f[1403]++;cov_2dj4df7l8y().s[5229]++;this.type="bar",this.plugins=[],this.chartClick=new gi(),this.chartHover=new gi(),this.ctx=null,this.subs=[],this.themeOverrides={},this.element=jt(zs),this.zone=jt(Is),this.themeService=jt(Uh),this.config=jt(or,{optional:!0}),this.platformId=jt(Bs),this.isBrowser=Ns(this.platformId),(cov_2dj4df7l8y().b[2167][0]++,this.config?.registerables)&&(cov_2dj4df7l8y().b[2167][1]++,hi.register(...this.config.registerables)),(cov_2dj4df7l8y().b[2168][0]++,this.config?.defaults)&&(cov_2dj4df7l8y().b[2168][1]++,F.set(this.config.defaults)),(cov_2dj4df7l8y().b[2169][0]++,this.isBrowser)&&(cov_2dj4df7l8y().b[2169][1]++,this.ctx=this.element.nativeElement.getContext("2d")),this.subs.push(this.themeService.colorschemesOptions.pipe(Ls()).subscribe(t=>{cov_2dj4df7l8y().f[1404]++;cov_2dj4df7l8y().s[5230]++;return this.themeChanged(t);}));}ngOnChanges(t){cov_2dj4df7l8y().f[1405]++;cov_2dj4df7l8y().s[5231]++;if(!this.isBrowser){cov_2dj4df7l8y().b[2170][0]++;cov_2dj4df7l8y().s[5232]++;return;}else{cov_2dj4df7l8y().b[2170][1]++;}let s=(cov_2dj4df7l8y().s[5233]++,["type"]),n=(cov_2dj4df7l8y().s[5234]++,Object.getOwnPropertyNames(t));cov_2dj4df7l8y().s[5235]++;if((cov_2dj4df7l8y().b[2172][0]++,n.some(o=>{cov_2dj4df7l8y().f[1406]++;cov_2dj4df7l8y().s[5236]++;return s.includes(o);}))||(cov_2dj4df7l8y().b[2172][1]++,n.every(o=>{cov_2dj4df7l8y().f[1407]++;cov_2dj4df7l8y().s[5237]++;return t[o].isFirstChange();}))){cov_2dj4df7l8y().b[2171][0]++;cov_2dj4df7l8y().s[5238]++;this.render();}else{cov_2dj4df7l8y().b[2171][1]++;cov_2dj4df7l8y().s[5239]++;if((cov_2dj4df7l8y().b[2174][0]++,this.chart)&&(cov_2dj4df7l8y().b[2174][1]++,t.legend)){cov_2dj4df7l8y().b[2173][0]++;let o=(cov_2dj4df7l8y().s[5240]++,this.getChartConfiguration());cov_2dj4df7l8y().s[5241]++;(cov_2dj4df7l8y().b[2175][0]++,o.options)&&(cov_2dj4df7l8y().b[2175][1]++,this.chart.options=o.options),this.update();}else{cov_2dj4df7l8y().b[2173][1]++;cov_2dj4df7l8y().s[5242]++;if(this.chart){cov_2dj4df7l8y().b[2176][0]++;let o=(cov_2dj4df7l8y().s[5243]++,this.getChartConfiguration());cov_2dj4df7l8y().s[5244]++;(cov_2dj4df7l8y().b[2177][0]++,o.data)&&(cov_2dj4df7l8y().b[2177][1]++,this.chart.config.data)&&(cov_2dj4df7l8y().b[2177][2]++,Object.assign(this.chart.config.data,o.data)),(cov_2dj4df7l8y().b[2178][0]++,o.plugins)&&(cov_2dj4df7l8y().b[2178][1]++,this.chart.config.plugins)&&(cov_2dj4df7l8y().b[2178][2]++,Object.assign(this.chart.config.plugins,o.plugins)),(cov_2dj4df7l8y().b[2179][0]++,o.options)&&(cov_2dj4df7l8y().b[2179][1]++,this.chart.config.options)&&(cov_2dj4df7l8y().b[2179][2]++,Object.assign(this.chart.config.options,o.options)),this.update();}else{cov_2dj4df7l8y().b[2176][1]++;}}}}ngOnDestroy(){cov_2dj4df7l8y().f[1408]++;cov_2dj4df7l8y().s[5245]++;(cov_2dj4df7l8y().b[2180][0]++,this.chart)&&(cov_2dj4df7l8y().b[2180][1]++,this.chart.destroy(),this.chart=void 0),this.subs.forEach(t=>{cov_2dj4df7l8y().f[1409]++;cov_2dj4df7l8y().s[5246]++;return t.unsubscribe();});}render(){cov_2dj4df7l8y().f[1410]++;cov_2dj4df7l8y().s[5247]++;if(!((cov_2dj4df7l8y().b[2182][0]++,!this.isBrowser)||(cov_2dj4df7l8y().b[2182][1]++,!this.ctx))){cov_2dj4df7l8y().b[2181][0]++;cov_2dj4df7l8y().s[5248]++;return(cov_2dj4df7l8y().b[2183][0]++,this.chart)&&(cov_2dj4df7l8y().b[2183][1]++,this.chart.destroy()),this.zone.runOutsideAngular(()=>{cov_2dj4df7l8y().f[1411]++;cov_2dj4df7l8y().s[5249]++;return this.chart=new hi(this.ctx,this.getChartConfiguration());});}else{cov_2dj4df7l8y().b[2181][1]++;}}update(t){cov_2dj4df7l8y().f[1412]++;cov_2dj4df7l8y().s[5250]++;(cov_2dj4df7l8y().b[2184][0]++,this.chart)&&(cov_2dj4df7l8y().b[2184][1]++,this.isBrowser)&&(cov_2dj4df7l8y().b[2184][2]++,this.zone.runOutsideAngular(()=>{cov_2dj4df7l8y().f[1413]++;cov_2dj4df7l8y().s[5251]++;return this.chart?.update(t);}));}hideDataset(t,s){cov_2dj4df7l8y().f[1414]++;cov_2dj4df7l8y().s[5252]++;(cov_2dj4df7l8y().b[2185][0]++,this.chart)&&(cov_2dj4df7l8y().b[2185][1]++,this.isBrowser)&&(cov_2dj4df7l8y().b[2185][2]++,this.chart.getDatasetMeta(t).hidden=s,this.update());}isDatasetHidden(t){cov_2dj4df7l8y().f[1415]++;cov_2dj4df7l8y().s[5253]++;return this.chart?.getDatasetMeta(t)?.hidden;}toBase64Image(){cov_2dj4df7l8y().f[1416]++;cov_2dj4df7l8y().s[5254]++;return this.chart?.toBase64Image();}themeChanged(t){cov_2dj4df7l8y().f[1417]++;cov_2dj4df7l8y().s[5255]++;this.themeOverrides=t,(cov_2dj4df7l8y().b[2186][0]++,this.chart)&&(cov_2dj4df7l8y().b[2186][1]++,(cov_2dj4df7l8y().b[2187][0]++,this.chart.config.options)&&(cov_2dj4df7l8y().b[2187][1]++,Object.assign(this.chart.config.options,this.getChartOptions())),this.update());}getChartOptions(){cov_2dj4df7l8y().f[1418]++;cov_2dj4df7l8y().s[5256]++;return[{onHover:(t,s)=>{cov_2dj4df7l8y().f[1419]++;cov_2dj4df7l8y().s[5257]++;(cov_2dj4df7l8y().b[2188][0]++,!this.chartHover.observed)&&(cov_2dj4df7l8y().b[2188][1]++,!this.chartHover.observers?.length)||(cov_2dj4df7l8y().b[2188][2]++,this.zone.run(()=>{cov_2dj4df7l8y().f[1420]++;cov_2dj4df7l8y().s[5258]++;return this.chartHover.emit({event:t,active:s});}));},onClick:(t,s)=>{cov_2dj4df7l8y().f[1421]++;cov_2dj4df7l8y().s[5259]++;(cov_2dj4df7l8y().b[2189][0]++,!this.chartClick.observed)&&(cov_2dj4df7l8y().b[2189][1]++,!this.chartClick.observers?.length)||(cov_2dj4df7l8y().b[2189][2]++,this.zone.run(()=>{cov_2dj4df7l8y().f[1422]++;cov_2dj4df7l8y().s[5260]++;return this.chartClick.emit({event:t,active:s});}));}},(cov_2dj4df7l8y().b[2190][0]++,this.themeOverrides)??(cov_2dj4df7l8y().b[2190][1]++,{}),(cov_2dj4df7l8y().b[2191][0]++,this.options)??(cov_2dj4df7l8y().b[2191][1]++,{}),{plugins:{legend:{display:this.legend}}}].reduce(Nt,{});}getChartConfiguration(){cov_2dj4df7l8y().f[1423]++;cov_2dj4df7l8y().s[5261]++;return{type:this.type,data:this.getChartData(),options:this.getChartOptions(),plugins:this.plugins};}getChartData(){cov_2dj4df7l8y().f[1424]++;cov_2dj4df7l8y().s[5262]++;return this.data?(cov_2dj4df7l8y().b[2192][0]++,this.data):(cov_2dj4df7l8y().b[2192][1]++,{labels:(cov_2dj4df7l8y().b[2193][0]++,this.labels)||(cov_2dj4df7l8y().b[2193][1]++,[]),datasets:(cov_2dj4df7l8y().b[2194][0]++,this.datasets)||(cov_2dj4df7l8y().b[2194][1]++,[])});}static{cov_2dj4df7l8y().s[5263]++;this.ɵfac=function(s){cov_2dj4df7l8y().f[1425]++;cov_2dj4df7l8y().s[5264]++;return new((cov_2dj4df7l8y().b[2195][0]++,s)||(cov_2dj4df7l8y().b[2195][1]++,e))();};}static{cov_2dj4df7l8y().s[5265]++;this.ɵdir=Ws({type:e,selectors:[["canvas","baseChart",""]],inputs:{type:"type",legend:"legend",data:"data",options:"options",plugins:"plugins",labels:"labels",datasets:"datasets"},outputs:{chartClick:"chartClick",chartHover:"chartHover"},exportAs:["base-chart"],features:[Fs]});}}cov_2dj4df7l8y().s[5266]++;return e;})());export{bd as a,xd as b,_d as c};//# sourceMappingURL=chunk-UE5BCHDC.js.map +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJsZSIsImUiLCJjb3ZfMmRqNGRmN2w4eSIsImYiLCJzIiwiX3QiLCJsaW0iLCJpIiwidCIsIk1hdGgiLCJtYXgiLCJtaW4iLCJyZSIsInl0IiwiZnQiLCJWcyIsImV0IiwiQSIsIkIiLCJDIiwiRCIsIkUiLCJGIiwiYSIsImIiLCJjIiwiZCIsIm1pIiwicnIiLCJhciIsIk9lIiwibHIiLCJyIiwiZyIsImNyIiwibGVuZ3RoIiwiaHIiLCJhbHBoYSIsImRyIiwiZnIiLCIkcyIsIm4iLCJvIiwidXIiLCJnciIsInByIiwiYmkiLCJsIiwiaCIsInhpIiwiQXJyYXkiLCJpc0FycmF5IiwibWFwIiwiX2kiLCJtciIsImJyIiwiVXMiLCJ4ciIsImV4ZWMiLCJfciIsInlyIiwiSHMiLCJ4IiwiWiIsIlkiLCJYIiwiVyIsIlYiLCJVIiwiVCIsIlMiLCJSIiwiUSIsIlAiLCJPIiwiTiIsIk0iLCJMIiwiSyIsIkciLCJIIiwiSSIsIkoiLCJqcyIsIk9pY2VYZSIsImFudGlxdWV3RXRlIiwiYXF1YSIsImFxdWFtYXJSZSIsImF6dVkiLCJiZWlnZSIsImJpc3F1ZSIsImJsYWNrIiwiYmxhbktlZE9tb25kIiwiWGUiLCJYZXZpVGV0IiwiYlB3biIsImJ1cmx5d29vZCIsImNhTXRYZSIsIkthcnRZdXNlIiwiS29jVGF0ZSIsImNTTyIsImNTbmZsb3dlclhlIiwiY1Nuc2lsayIsImNyaW1zb24iLCJjeWFuIiwieFhlIiwieGN5YW4iLCJ4Z1RNblBkIiwieFdheSIsInhnWUYiLCJ4Z1l5IiwieGtoYWtpIiwieG1hZ0Z0YSIsInhUaXZlZ1lGIiwieFNhbmdlIiwieFNjRWQiLCJ4WWQiLCJ4c09tb24iLCJ4c0hnWUYiLCJ4VVhlIiwieFVXYXkiLCJ4VWdZeSIsInhRZSIsInh2aVRldCIsImRBcHBSayIsImRBcHNreVhlIiwiZGltV2F5IiwiZGltZ1l5IiwiZG9kZ2VyWGUiLCJmaVlicmljayIsImZsU093RXRlIiwiZm9Zc3RXQW4iLCJmdUtzaWEiLCJnYVJzYlNvIiwiZ2hvc3R3RXRlIiwiZ1RkIiwiZ1RNblBkIiwiV2F5IiwiZ1lGIiwiZ1lGTHciLCJnWXkiLCJob25leU13IiwiaG90cFJrIiwiUmRpYW5ZZCIsIlJkaWdvIiwiaXZTeSIsImtoYWtpIiwibGF2Rk1yIiwibGF2Rk1yWHNoIiwibGF3bmdZRiIsIk5tb25jRWZmb24iLCJaWGUiLCJaY1NPIiwiWmN5YW4iLCJaZ1RNblBkTHciLCJaV2F5IiwiWmdZRiIsIlpnWXkiLCJacFJrIiwiWnNPbW9uIiwiWnNIZ1lGIiwiWnNreVhlIiwiWlVXYXkiLCJaVWdZeSIsIlpzdEFsWGUiLCJaTHciLCJsaW1lIiwibGltZWdZRiIsImxSRiIsIm1hZ0Z0YSIsIm1hUG9uIiwiVmFxdWFtYXJSZSIsIlZYZSIsIlZTY0VkIiwiVnB1cnBOIiwiVnNIZ1lGIiwiVlVYZSIsIlZzcHJSZ2dZRiIsIlZRZSIsIlZ2aVRldFlkIiwibWlkbmlnaHRYZSIsIm1SdGNZYW0iLCJtaXN0eVBzZSIsIm1vY2Nhc1IiLCJuYXZham93RXRlIiwibmF2eSIsIlRkbGFjZSIsIlRpdmUiLCJUaXZlZEJiIiwiU2FuZ2UiLCJTYW5nZVlkIiwiU2NFZCIsInBPZWdUTW5QZCIsInBPZWdZRiIsInBPZVFlIiwicE9ldmlUZXRZZCIsInBhcGF5YXdFcCIsInBIS3B1ZmYiLCJwZXJ1IiwicFJrIiwicGx1bSIsInBvd01yWGUiLCJwdXJwTiIsIlliZWNjYXB1cnBOIiwiWWQiLCJQc3licm93biIsIlB5T1hlIiwic2FkZE5iUHduIiwic09tb24iLCJzYW5keWJQd24iLCJzSGdZRiIsInNIc2hlbGwiLCJzaUZuYSIsInNpbHZlciIsInNreVhlIiwiVVhlIiwiVVdheSIsIlVnWXkiLCJzbm93Iiwic3ByUmdnWUYiLCJzdEFsWGUiLCJ0YW4iLCJ0ZU8iLCJ0RXN0TiIsInRvbWF0byIsIlFlIiwidmlUZXQiLCJKSHQiLCJ3RXRlIiwid0V0ZXNtb2tlIiwiTHciLCJMd2dZRiIsInZyIiwiT2JqZWN0Iiwia2V5cyIsInJlcGxhY2UiLCJwYXJzZUludCIsIkFlIiwiTXIiLCJ0cmFuc3BhcmVudCIsInRvTG93ZXJDYXNlIiwia3IiLCJTciIsIndyIiwicGkiLCJwb3ciLCJZdCIsIkNyIiwiVGUiLCJYcyIsImFzc2lnbiIsIllzIiwiUHIiLCJjaGFyQXQiLCJhZSIsImNvbnN0cnVjdG9yIiwiX3JnYiIsIl92YWxpZCIsInZhbGlkIiwicmdiIiwicmdiU3RyaW5nIiwiaGV4U3RyaW5nIiwiaHNsU3RyaW5nIiwibWl4IiwiaW50ZXJwb2xhdGUiLCJjbG9uZSIsImNsZWFyZXIiLCJncmV5c2NhbGUiLCJvcGFxdWVyIiwibmVnYXRlIiwibGlnaHRlbiIsImRhcmtlbiIsInNhdHVyYXRlIiwiZGVzYXR1cmF0ZSIsInJvdGF0ZSIsImx0Iiwib24iLCJ6IiwicHJvdG90eXBlIiwidG9TdHJpbmciLCJjYWxsIiwic2xpY2UiLCJOdW1iZXIiLCJpc0Zpbml0ZSIsInJuIiwidG9QZXJjZW50YWdlIiwiZW5kc1dpdGgiLCJwYXJzZUZsb2F0Iiwia2kiLCJ0b0RpbWVuc2lvbiIsImFwcGx5IiwiZGUiLCJkYXRhc2V0SW5kZXgiLCJpbmRleCIsIkllIiwiY3JlYXRlIiwiYW4iLCJpbmRleE9mIiwiRHIiLCJVdCIsIm1lcmdlciIsIkt0IiwiT3IiLCJoYXNPd25Qcm9wZXJ0eSIsIktzIiwieSIsIkFyIiwic3BsaXQiLCJwdXNoIiwiVHIiLCJwdCIsIldlIiwidG9VcHBlckNhc2UiLCJxdCIsInV0IiwiU2kiLCJzZXRzRXF1YWwiLCJzaXplIiwiaGFzIiwibG4iLCJ0eXBlIiwiUEkiLCJMciIsIkZlIiwiUE9TSVRJVkVfSU5GSU5JVFkiLCJSciIsIkx0IiwicXMiLCJndCIsImxvZzEwIiwibnQiLCJzaWduIiwiR3QiLCJhYnMiLCJ3aSIsInJvdW5kIiwiZmxvb3IiLCJjbiIsInNxcnQiLCJzb3J0IiwicG9wIiwiRXIiLCJTeW1ib2wiLCJ0b1ByaW1pdGl2ZSIsIkl0IiwiaXNOYU4iLCJobiIsIkNpIiwiaXQiLCJOZSIsIlBpIiwiRGkiLCJhdGFuMiIsImFuZ2xlIiwiZGlzdGFuY2UiLCJ6ZSIsIklyIiwiSnQiLCJkbiIsImN0IiwiVmUiLCJsbyIsImhpIiwicnQiLCJfbG9va3VwQnlLZXkiLCJmbiIsIl9ybG9va3VwQnlLZXkiLCJ1biIsImduIiwicG4iLCJfY2hhcnRqcyIsImxpc3RlbmVycyIsImRlZmluZVByb3BlcnR5IiwiY29uZmlndXJhYmxlIiwiZW51bWVyYWJsZSIsInZhbHVlIiwiZm9yRWFjaCIsIk9pIiwic3BsaWNlIiwiQWkiLCJTZXQiLCJmcm9tIiwiVGkiLCJ3aW5kb3ciLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJMaSIsIm1uIiwiY2xlYXJUaW1lb3V0Iiwic2V0VGltZW91dCIsIkhlIiwiX2FsaWduU3RhcnRFbmQiLCJibiIsIl90ZXh0WCIsIlJpIiwiX3NvcnRlZCIsImlTY2FsZSIsInZTY2FsZSIsIl9wYXJzZWQiLCJkYXRhc2V0Iiwib3B0aW9ucyIsInNwYW5HYXBzIiwiYXhpcyIsIm1pbkRlZmluZWQiLCJ1IiwibWF4RGVmaW5lZCIsInAiLCJnZXRVc2VyQm91bmRzIiwiZ2V0UGl4ZWxGb3JWYWx1ZSIsInJldmVyc2UiLCJmaW5kSW5kZXgiLCJtIiwic3RhcnQiLCJjb3VudCIsIkVpIiwieFNjYWxlIiwieVNjYWxlIiwiX3NjYWxlUmFuZ2VzIiwieG1pbiIsInhtYXgiLCJ5bWluIiwieW1heCIsIkxlIiwiR3MiLCJlbGFzdGljSW4iLCJzaW4iLCJKcyIsImVsYXN0aWNPdXQiLCIkdCIsImxpbmVhciIsImVhc2VJblF1YWQiLCJlYXNlT3V0UXVhZCIsImVhc2VJbk91dFF1YWQiLCJlYXNlSW5DdWJpYyIsImVhc2VPdXRDdWJpYyIsImVhc2VJbk91dEN1YmljIiwiZWFzZUluUXVhcnQiLCJlYXNlT3V0UXVhcnQiLCJlYXNlSW5PdXRRdWFydCIsImVhc2VJblF1aW50IiwiZWFzZU91dFF1aW50IiwiZWFzZUluT3V0UXVpbnQiLCJlYXNlSW5TaW5lIiwiY29zIiwiZWFzZU91dFNpbmUiLCJlYXNlSW5PdXRTaW5lIiwiZWFzZUluRXhwbyIsImVhc2VPdXRFeHBvIiwiZWFzZUluT3V0RXhwbyIsImVhc2VJbkNpcmMiLCJlYXNlT3V0Q2lyYyIsImVhc2VJbk91dENpcmMiLCJlYXNlSW5FbGFzdGljIiwiZWFzZU91dEVsYXN0aWMiLCJlYXNlSW5PdXRFbGFzdGljIiwiZWFzZUluQmFjayIsImVhc2VPdXRCYWNrIiwiZWFzZUluT3V0QmFjayIsImVhc2VJbkJvdW5jZSIsImVhc2VPdXRCb3VuY2UiLCJlYXNlSW5PdXRCb3VuY2UiLCJJaSIsIkZpIiwieWkiLCJGciIsInpyIiwiQnIiLCJzZXQiLCJkZWxheSIsImR1cmF0aW9uIiwiZWFzaW5nIiwibG9vcCIsInRvIiwiZGVzY3JpYmUiLCJfZmFsbGJhY2siLCJfaW5kZXhhYmxlIiwiX3NjcmlwdGFibGUiLCJjb2xvcnMiLCJwcm9wZXJ0aWVzIiwibnVtYmVycyIsImFjdGl2ZSIsImFuaW1hdGlvbiIsInJlc2l6ZSIsInNob3ciLCJhbmltYXRpb25zIiwidmlzaWJsZSIsImhpZGUiLCJXciIsImF1dG9QYWRkaW5nIiwicGFkZGluZyIsInRvcCIsInJpZ2h0IiwiYm90dG9tIiwibGVmdCIsIlpzIiwiTWFwIiwiTnIiLCJKU09OIiwic3RyaW5naWZ5IiwiZ2V0IiwiSW50bCIsIk51bWJlckZvcm1hdCIsIlp0IiwiZm9ybWF0IiwieG4iLCJ2YWx1ZXMiLCJudW1lcmljIiwiY2hhcnQiLCJsb2NhbGUiLCJWciIsIm5vdGF0aW9uIiwibWluaW11bUZyYWN0aW9uRGlnaXRzIiwibWF4aW11bUZyYWN0aW9uRGlnaXRzIiwidGlja3MiLCJsb2dhcml0aG1pYyIsInNpZ25pZmljYW5kIiwiaW5jbHVkZXMiLCJmZSIsImZvcm1hdHRlcnMiLCJIciIsImRpc3BsYXkiLCJvZmZzZXQiLCJiZWdpbkF0WmVybyIsImJvdW5kcyIsImNsaXAiLCJncmFjZSIsImdyaWQiLCJsaW5lV2lkdGgiLCJkcmF3T25DaGFydEFyZWEiLCJkcmF3VGlja3MiLCJ0aWNrTGVuZ3RoIiwidGlja1dpZHRoIiwidGlja0NvbG9yIiwiY29sb3IiLCJib3JkZXIiLCJkYXNoIiwiZGFzaE9mZnNldCIsIndpZHRoIiwidGl0bGUiLCJ0ZXh0IiwibWluUm90YXRpb24iLCJtYXhSb3RhdGlvbiIsIm1pcnJvciIsInRleHRTdHJva2VXaWR0aCIsInRleHRTdHJva2VDb2xvciIsImF1dG9Ta2lwIiwiYXV0b1NraXBQYWRkaW5nIiwibGFiZWxPZmZzZXQiLCJjYWxsYmFjayIsIm1pbm9yIiwibWFqb3IiLCJhbGlnbiIsImNyb3NzQWxpZ24iLCJzaG93TGFiZWxCYWNrZHJvcCIsImJhY2tkcm9wQ29sb3IiLCJiYWNrZHJvcFBhZGRpbmciLCJyb3V0ZSIsInN0YXJ0c1dpdGgiLCJrdCIsImplIiwiY2UiLCJ2aSIsIk1pIiwiYmFja2dyb3VuZENvbG9yIiwiYm9yZGVyQ29sb3IiLCJkYXRhc2V0cyIsImRldmljZVBpeGVsUmF0aW8iLCJwbGF0Zm9ybSIsImdldERldmljZVBpeGVsUmF0aW8iLCJlbGVtZW50cyIsImV2ZW50cyIsImZvbnQiLCJmYW1pbHkiLCJzdHlsZSIsImxpbmVIZWlnaHQiLCJ3ZWlnaHQiLCJob3ZlciIsImhvdmVyQmFja2dyb3VuZENvbG9yIiwiaG92ZXJCb3JkZXJDb2xvciIsImhvdmVyQ29sb3IiLCJpbmRleEF4aXMiLCJpbnRlcmFjdGlvbiIsIm1vZGUiLCJpbnRlcnNlY3QiLCJpbmNsdWRlSW52aXNpYmxlIiwibWFpbnRhaW5Bc3BlY3RSYXRpbyIsIm9uSG92ZXIiLCJvbkNsaWNrIiwicGFyc2luZyIsInBsdWdpbnMiLCJyZXNwb25zaXZlIiwic2NhbGUiLCJzY2FsZXMiLCJzaG93TGluZSIsImRyYXdBY3RpdmVFbGVtZW50c09uVG9wIiwib3ZlcnJpZGUiLCJkZWZpbmVQcm9wZXJ0aWVzIiwid3JpdGFibGUiLCJqciIsImhlIiwibWVhc3VyZVRleHQiLCJfbiIsImRhdGEiLCJnYXJiYWdlQ29sbGVjdCIsInNhdmUiLCJyZXN0b3JlIiwiU3QiLCJjdXJyZW50RGV2aWNlUGl4ZWxSYXRpbyIsInppIiwiZ2V0Q29udGV4dCIsInJlc2V0VHJhbnNmb3JtIiwiY2xlYXJSZWN0IiwiaGVpZ2h0IiwiWWUiLCJCaSIsInBvaW50U3R5bGUiLCJyb3RhdGlvbiIsInJhZGl1cyIsInRyYW5zbGF0ZSIsImRyYXdJbWFnZSIsImJlZ2luUGF0aCIsImVsbGlwc2UiLCJhcmMiLCJjbG9zZVBhdGgiLCJtb3ZlVG8iLCJsaW5lVG8iLCJTUVJUMV8yIiwicmVjdCIsImZpbGwiLCJib3JkZXJXaWR0aCIsInN0cm9rZSIsImF0IiwidWUiLCJnZSIsInluIiwidm4iLCJiZXppZXJDdXJ2ZVRvIiwiY3AxeCIsImNwMngiLCJjcDF5IiwiY3AyeSIsIllyIiwidHJhbnNsYXRpb24iLCJmaWxsU3R5bGUiLCJ0ZXh0QWxpZ24iLCJ0ZXh0QmFzZWxpbmUiLCIkciIsInN0cmlrZXRocm91Z2giLCJ1bmRlcmxpbmUiLCJhY3R1YWxCb3VuZGluZ0JveExlZnQiLCJhY3R1YWxCb3VuZGluZ0JveFJpZ2h0IiwiYWN0dWFsQm91bmRpbmdCb3hBc2NlbnQiLCJhY3R1YWxCb3VuZGluZ0JveERlc2NlbnQiLCJzdHJva2VTdHlsZSIsImRlY29yYXRpb25XaWR0aCIsIlVyIiwiZmlsbFJlY3QiLCJ3dCIsInN0cm9rZVdpZHRoIiwic3Ryb2tlQ29sb3IiLCJzdHJpbmciLCJiYWNrZHJvcCIsInN0cm9rZVRleHQiLCJtYXhXaWR0aCIsImZpbGxUZXh0IiwiUXQiLCJ3IiwidG9wTGVmdCIsImJvdHRvbUxlZnQiLCJib3R0b21SaWdodCIsInRvcFJpZ2h0IiwiWHIiLCJLciIsInFyIiwibWF0Y2giLCJHciIsIiRlIiwiV2kiLCJDdCIsImoiLCJjb25zb2xlIiwid2FybiIsInRlIiwiY2FjaGVhYmxlIiwiTW4iLCJrZWVwWmVybyIsIm10IiwiVWUiLCJ3biIsInRvU3RyaW5nVGFnIiwiX2NhY2hlYWJsZSIsIl9zY29wZXMiLCJfcm9vdFNjb3BlcyIsIl9nZXRUYXJnZXQiLCJQcm94eSIsImRlbGV0ZVByb3BlcnR5IiwiX2tleXMiLCJrbiIsIm5hIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiUmVmbGVjdCIsImdldFByb3RvdHlwZU9mIiwidG4iLCJvd25LZXlzIiwiX3N0b3JhZ2UiLCJFdCIsIl9wcm94eSIsIl9jb250ZXh0IiwiX3N1YlByb3h5IiwiX3N0YWNrIiwiX2Rlc2NyaXB0b3JzIiwiTmkiLCJzZXRDb250ZXh0IiwiWnIiLCJhbGxLZXlzIiwic2NyaXB0YWJsZSIsImluZGV4YWJsZSIsIl9hbGxLZXlzIiwiaXNTY3JpcHRhYmxlIiwiaXNJbmRleGFibGUiLCJKciIsInJlYWRLZXkiLCJWaSIsIm5lZWRzU3ViUmVzb2x2ZXIiLCJRciIsInRhIiwiRXJyb3IiLCJqb2luIiwiYWRkIiwiZGVsZXRlIiwiSGkiLCJmaWx0ZXIiLCJTbiIsImVhIiwiZ2V0U2NvcGUiLCJpYSIsIlFzIiwic2EiLCJvYSIsImppIiwia2V5IiwiX3BhcnNpbmciLCJwYXJzZSIsInJhIiwiRVBTSUxPTiIsIlh0IiwiZ2V0UG9pbnQiLCJza2lwIiwiQ24iLCJhYSIsInByZXZpb3VzIiwibmV4dCIsImxhIiwiY2EiLCJoYSIsIlJlIiwiZGEiLCJQbiIsImN1YmljSW50ZXJwb2xhdGlvbk1vZGUiLCJ0ZW5zaW9uIiwiY2FwQmV6aWVyUG9pbnRzIiwiZG9jdW1lbnQiLCJLZSIsInBhcmVudE5vZGUiLCJob3N0IiwiQmUiLCJxZSIsIm93bmVyRG9jdW1lbnQiLCJkZWZhdWx0VmlldyIsImdldENvbXB1dGVkU3R5bGUiLCJmYSIsImdldFByb3BlcnR5VmFsdWUiLCJ1YSIsIlJ0IiwiZ2EiLCJ1c2VPZmZzZXRQb3MiLCJzaGFkb3dSb290IiwicGEiLCJ0b3VjaGVzIiwib2Zmc2V0WCIsIm9mZnNldFkiLCJ0YXJnZXQiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJjbGllbnRYIiwiY2xpZW50WSIsImJveCIsIlB0IiwiY2FudmFzIiwiYm94U2l6aW5nIiwibWEiLCJjbGllbnRXaWR0aCIsImNsaWVudEhlaWdodCIsIm1heEhlaWdodCIsIk10IiwiRG4iLCJZaSIsImN0eCIsInNldFRyYW5zZm9ybSIsIk9uIiwicGFzc2l2ZSIsImFkZEV2ZW50TGlzdGVuZXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiJGkiLCJ2dCIsIkFuIiwiVG4iLCJiYSIsImdldFJpZ2h0VG9MZWZ0QWRhcHRlciIsInNldFdpZHRoIiwieFBsdXMiLCJsZWZ0Rm9yTHRyIiwieGEiLCJnZXRMZWZ0VG9SaWdodEFkYXB0ZXIiLCJGdCIsIlVpIiwiZ2V0UHJvcGVydHlQcmlvcml0eSIsInNldFByb3BlcnR5IiwicHJldlRleHREaXJlY3Rpb24iLCJYaSIsIkxuIiwiYmV0d2VlbiIsImNvbXBhcmUiLCJub3JtYWxpemUiLCJlbiIsImVuZCIsIl9hIiwicHJvcGVydHkiLCJLaSIsInN0YXJ0SXNCZWZvcmUiLCJfIiwiZW5kSXNCZWZvcmUiLCJ2Iiwic2hvdWxkU3RhcnQiLCJzaG91bGRTdG9wIiwiayIsInFpIiwic2VnbWVudHMiLCJwb2ludHMiLCJ5YSIsInZhIiwic3RvcCIsIlJuIiwiX2xvb3AiLCJzbiIsIl9mdWxsTG9vcCIsIk1hIiwiX2NoYXJ0Iiwibm4iLCJfZGF0YXNldEluZGV4IiwicDAiLCJwMSIsInAwRGF0YUluZGV4IiwicDFEYXRhSW5kZXgiLCJrYSIsImJvcmRlckNhcFN0eWxlIiwiYm9yZGVyRGFzaCIsImJvcmRlckRhc2hPZmZzZXQiLCJib3JkZXJKb2luU3R5bGUiLCJyZXBsYWNlciIsIkVlIiwiU2EiLCJHaSIsIl9jbGlwIiwiZGlzYWJsZWQiLCJjaGFydEFyZWEiLCJscyIsIl9yZXF1ZXN0IiwiX2NoYXJ0cyIsIl9ydW5uaW5nIiwiX2xhc3REYXRlIiwiX25vdGlmeSIsImluaXRpYWwiLCJudW1TdGVwcyIsImN1cnJlbnRTdGVwIiwiX3JlZnJlc2giLCJfdXBkYXRlIiwiRGF0ZSIsIm5vdyIsInJ1bm5pbmciLCJpdGVtcyIsIl9hY3RpdmUiLCJfdG90YWwiLCJ0aWNrIiwiZHJhdyIsIl9nZXRBbmltcyIsImNvbXBsZXRlIiwicHJvZ3Jlc3MiLCJsaXN0ZW4iLCJyZWR1Y2UiLCJfZHVyYXRpb24iLCJjYW5jZWwiLCJyZW1vdmUiLCJidCIsIkVuIiwid2EiLCJib29sZWFuIiwibnVtYmVyIiwiY3MiLCJfZm4iLCJfZWFzaW5nIiwiX3N0YXJ0IiwiX3RhcmdldCIsIl9wcm9wIiwiX2Zyb20iLCJfdG8iLCJfcHJvbWlzZXMiLCJ1cGRhdGUiLCJ3YWl0IiwiUHJvbWlzZSIsInJlcyIsInJlaiIsIm5pIiwiX3Byb3BlcnRpZXMiLCJjb25maWd1cmUiLCJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwiX2FuaW1hdGVPcHRpb25zIiwiUGEiLCJfY3JlYXRlQW5pbWF0aW9ucyIsIiRzaGFyZWQiLCJDYSIsIiRhbmltYXRpb25zIiwidGhlbiIsImFsbCIsIkluIiwiRGEiLCJPYSIsIklvIiwiX2dldFNvcnRlZERhdGFzZXRNZXRhcyIsIkZuIiwiQWEiLCJKaSIsInN0YWNrZWQiLCJzdGFjayIsIlRhIiwiaWQiLCJMYSIsIk5FR0FUSVZFX0lORklOSVRZIiwiUmEiLCJ6biIsImdldE1hdGNoaW5nVmlzaWJsZU1ldGFzIiwiQm4iLCJfY2FjaGVkTWV0YSIsIl9zdGFja3MiLCJfdG9wIiwiX2JvdHRvbSIsIl92aXN1YWxWYWx1ZXMiLCJaaSIsInNoaWZ0IiwiRWEiLCJJYSIsImRhdGFJbmRleCIsInBhcnNlZCIsInJhdyIsImVsZW1lbnQiLCJwZSIsImNvbnRyb2xsZXIiLCJRaSIsIlduIiwiY2xvbmVJZk5vdFNoYXJlZCIsIkZhIiwiY3JlYXRlU3RhY2siLCJoaWRkZW4iLCJfc3RhY2tlZCIsIk90IiwiZGVmYXVsdHMiLCJkYXRhc2V0RWxlbWVudFR5cGUiLCJkYXRhRWxlbWVudFR5cGUiLCJfY3R4IiwiX2NhY2hlZERhdGFPcHRzIiwiZ2V0TWV0YSIsIl90eXBlIiwiX2RhdGEiLCJfb2JqZWN0RGF0YSIsIl9zaGFyZWRPcHRpb25zIiwiX2RyYXdTdGFydCIsIl9kcmF3Q291bnQiLCJlbmFibGVPcHRpb25TaGFyaW5nIiwic3VwcG9ydHNEZWNpbWF0aW9uIiwiJGNvbnRleHQiLCJfc3luY0xpc3QiLCJuZXciLCJpbml0aWFsaXplIiwibGlua1NjYWxlcyIsImFkZEVsZW1lbnRzIiwiaXNQbHVnaW5FbmFibGVkIiwidXBkYXRlSW5kZXgiLCJnZXREYXRhc2V0IiwiY2hvb3NlSWQiLCJ4QXhpc0lEIiwieUF4aXNJRCIsInJBeGlzSUQiLCJpQXhpc0lEIiwidkF4aXNJRCIsImdldFNjYWxlRm9ySWQiLCJyU2NhbGUiLCJnZXREYXRhc2V0TWV0YSIsIl9nZXRPdGhlclNjYWxlIiwicmVzZXQiLCJfZGVzdHJveSIsIl9kYXRhQ2hlY2siLCJpc0V4dGVuc2libGUiLCJidWlsZE9yVXBkYXRlRWxlbWVudHMiLCJfcmVzeW5jRWxlbWVudHMiLCJjb25maWciLCJkYXRhc2V0U2NvcGVLZXlzIiwiZ2V0T3B0aW9uU2NvcGVzIiwiY3JlYXRlUmVzb2x2ZXIiLCJwYXJzZUFycmF5RGF0YSIsInBhcnNlT2JqZWN0RGF0YSIsInBhcnNlUHJpbWl0aXZlRGF0YSIsImlzTm90SW5PcmRlckNvbXBhcmVkVG9QcmV2IiwiZ2V0TGFiZWxzIiwieEF4aXNLZXkiLCJ5QXhpc0tleSIsImdldFBhcnNlZCIsImdldERhdGFFbGVtZW50IiwiYXBwbHlTdGFjayIsInVwZGF0ZVJhbmdlRnJvbVBhcnNlZCIsIk5hTiIsImdldE1pbk1heCIsImdldEFsbFBhcnNlZFZhbHVlcyIsImdldE1heE92ZXJmbG93IiwiZ2V0TGFiZWxBbmRWYWx1ZSIsImxhYmVsIiwiZ2V0TGFiZWxGb3JWYWx1ZSIsImdldFN0eWxlIiwicmVzb2x2ZURhdGFzZXRFbGVtZW50T3B0aW9ucyIsInJlc29sdmVEYXRhRWxlbWVudE9wdGlvbnMiLCJfcmVzb2x2ZUVsZW1lbnRPcHRpb25zIiwiZGF0YXNldEVsZW1lbnRTY29wZUtleXMiLCJjb250ZXh0IiwicmVzb2x2ZU5hbWVkT3B0aW9ucyIsImZyZWV6ZSIsIl9yZXNvbHZlQW5pbWF0aW9ucyIsImRhdGFzZXRBbmltYXRpb25TY29wZUtleXMiLCJnZXRTaGFyZWRPcHRpb25zIiwiaW5jbHVkZU9wdGlvbnMiLCJfYW5pbWF0aW9uc0Rpc2FibGVkIiwiX2dldFNoYXJlZE9wdGlvbnMiLCJ1cGRhdGVTaGFyZWRPcHRpb25zIiwic2hhcmVkT3B0aW9ucyIsInVwZGF0ZUVsZW1lbnQiLCJfc2V0U3R5bGUiLCJyZW1vdmVIb3ZlclN0eWxlIiwic2V0SG92ZXJTdHlsZSIsIl9yZW1vdmVEYXRhc2V0SG92ZXJTdHlsZSIsIl9zZXREYXRhc2V0SG92ZXJTdHlsZSIsIl9pbnNlcnRFbGVtZW50cyIsIl9yZW1vdmVFbGVtZW50cyIsInVwZGF0ZUVsZW1lbnRzIiwiX3N5bmMiLCJfZGF0YUNoYW5nZXMiLCJfb25EYXRhUHVzaCIsImFyZ3VtZW50cyIsIl9vbkRhdGFQb3AiLCJfb25EYXRhU2hpZnQiLCJfb25EYXRhU3BsaWNlIiwiX29uRGF0YVVuc2hpZnQiLCJ6YSIsIl9jYWNoZSIsIiRiYXIiLCJjb25jYXQiLCJCYSIsIl9sZW5ndGgiLCJ1cGRhdGVNaW5BbmRQcmV2IiwiZ2V0UGl4ZWxGb3JUaWNrIiwiV2EiLCJiYXJUaGlja25lc3MiLCJjYXRlZ29yeVBlcmNlbnRhZ2UiLCJiYXJQZXJjZW50YWdlIiwiY2h1bmsiLCJyYXRpbyIsInBpeGVscyIsIk5hIiwiVmEiLCJfY3VzdG9tIiwiYmFyU3RhcnQiLCJiYXJFbmQiLCJGbyIsIk5uIiwidHMiLCJIYSIsImlzSG9yaXpvbnRhbCIsImphIiwiaG9yaXpvbnRhbCIsImJhc2UiLCJZYSIsImJvcmRlclNraXBwZWQiLCJlbmFibGVCb3JkZXJSYWRpdXMiLCJWbiIsIiRhIiwiSG4iLCJVYSIsImluZmxhdGVBbW91bnQiLCJYYSIsImdyb3VwZWQiLCJvdmVycmlkZXMiLCJfaW5kZXhfIiwiX3ZhbHVlXyIsImdldEJhc2VQaXhlbCIsIl9nZXRSdWxlciIsImhlYWQiLCJfY2FsY3VsYXRlQmFyVmFsdWVQaXhlbHMiLCJfY2FsY3VsYXRlQmFySW5kZXhQaXhlbHMiLCJjZW50ZXIiLCJfZ2V0U3RhY2tzIiwiZmluZCIsIl9nZXRTdGFja0NvdW50IiwiX2dldEF4aXNDb3VudCIsIl9nZXRBeGlzIiwiZ2V0Rmlyc3RTY2FsZUlkRm9ySW5kZXhBeGlzIiwiX2dldFN0YWNrSW5kZXgiLCJfc3RhcnRQaXhlbCIsIl9lbmRQaXhlbCIsInN0YWNrQ291bnQiLCJtaW5CYXJMZW5ndGgiLCJnZXREYXRhVmlzaWJpbGl0eSIsImdldFBpeGVsRm9yRGVjaW1hbCIsImdldFZhbHVlRm9yUGl4ZWwiLCJnZXRMaW5lV2lkdGhGb3JWYWx1ZSIsInNraXBOdWxsIiwibWF4QmFyVGhpY2tuZXNzIiwiS2EiLCJsYWJlbHMiLCJxYSIsImNhbGNNYXgiLCJjYWxjTWluIiwicmF0aW9YIiwicmF0aW9ZIiwiT3MiLCJhbmltYXRlUm90YXRlIiwiYW5pbWF0ZVNjYWxlIiwiY3V0b3V0IiwiY2lyY3VtZmVyZW5jZSIsInNwYWNpbmciLCJkZXNjcmlwdG9ycyIsImFzcGVjdFJhdGlvIiwibGVnZW5kIiwiZ2VuZXJhdGVMYWJlbHMiLCJ1c2VCb3JkZXJSYWRpdXMiLCJib3JkZXJSYWRpdXMiLCJmb250Q29sb3IiLCJsaW5lRGFzaCIsImxpbmVEYXNoT2Zmc2V0IiwibGluZUpvaW4iLCJ0b2dnbGVEYXRhVmlzaWJpbGl0eSIsImlubmVyUmFkaXVzIiwib3V0ZXJSYWRpdXMiLCJfZ2V0Um90YXRpb24iLCJfZ2V0Q2lyY3VtZmVyZW5jZSIsIl9nZXRSb3RhdGlvbkV4dGVudHMiLCJpc0RhdGFzZXRWaXNpYmxlIiwiZ2V0TWF4Qm9yZGVyV2lkdGgiLCJnZXRNYXhPZmZzZXQiLCJfZ2V0UmluZ1dlaWdodCIsIl9nZXRWaXNpYmxlRGF0YXNldFdlaWdodFRvdGFsIiwidG90YWwiLCJjYWxjdWxhdGVUb3RhbCIsIl9nZXRSaW5nV2VpZ2h0T2Zmc2V0IiwiX2NpcmN1bWZlcmVuY2UiLCJjYWxjdWxhdGVDaXJjdW1mZXJlbmNlIiwic3RhcnRBbmdsZSIsImVuZEFuZ2xlIiwiYm9yZGVyQWxpZ24iLCJob3ZlckJvcmRlcldpZHRoIiwiaG92ZXJPZmZzZXQiLCJHYSIsIl9kYXRhc2V0IiwiX2RlY2ltYXRlZCIsInNlZ21lbnQiLCJhbmltYXRlZCIsInVwZGF0ZUNvbnRyb2xQb2ludHMiLCJ6byIsImFuZ2xlTGluZXMiLCJjaXJjdWxhciIsInBvaW50TGFiZWxzIiwiYmluZCIsIl91cGRhdGVSYWRpdXMiLCJjdXRvdXRQZXJjZW50YWdlIiwiZ2V0VmlzaWJsZURhdGFzZXRDb3VudCIsInhDZW50ZXIiLCJ5Q2VudGVyIiwiZ2V0SW5kZXhBbmdsZSIsImNvdW50VmlzaWJsZUVsZW1lbnRzIiwiX2NvbXB1dGVBbmdsZSIsImdldERpc3RhbmNlRnJvbUNlbnRlckZvclZhbHVlIiwiSmEiLCJaYSIsImxpbmUiLCJnZXRQb2ludFBvc2l0aW9uRm9yVmFsdWUiLCJRYSIsInJlZ2lzdHJ5IiwiZ2V0RWxlbWVudCIsInRsIiwiX19wcm90b19fIiwiQmFyQ29udHJvbGxlciIsIkJ1YmJsZUNvbnRyb2xsZXIiLCJEb3VnaG51dENvbnRyb2xsZXIiLCJMaW5lQ29udHJvbGxlciIsIlBpZUNvbnRyb2xsZXIiLCJQb2xhckFyZWFDb250cm9sbGVyIiwiUmFkYXJDb250cm9sbGVyIiwiU2NhdHRlckNvbnRyb2xsZXIiLCJ6dCIsImhzIiwiaW5pdCIsImZvcm1hdHMiLCJkaWZmIiwic3RhcnRPZiIsImVuZE9mIiwiZWwiLCJfZGF0ZSIsImlsIiwiX3JldmVyc2VQaXhlbHMiLCJnZXRSYW5nZSIsIndlIiwiZ2V0U29ydGVkVmlzaWJsZURhdGFzZXRNZXRhcyIsInNsIiwiZXMiLCJpc1BvaW50SW5BcmVhIiwiaW5SYW5nZSIsIm5sIiwiZ2V0UHJvcHMiLCJvbCIsImdldENlbnRlclBvaW50IiwiaXMiLCJqbiIsInJsIiwiZXZhbHVhdGVJbnRlcmFjdGlvbkl0ZW1zIiwibW9kZXMiLCJwb2ludCIsIm5lYXJlc3QiLCJCbyIsIm1lIiwicG9zIiwiWW4iLCJiZSIsImFsIiwicG9zaXRpb24iLCJzdGFja1dlaWdodCIsImxsIiwicGxhY2VkIiwiY2wiLCJ2Qm94TWF4V2lkdGgiLCJoQm94TWF4SGVpZ2h0IiwiZnVsbFNpemUiLCJhdmFpbGFibGVXaWR0aCIsImF2YWlsYWJsZUhlaWdodCIsImhsIiwibGVmdEFuZFRvcCIsInJpZ2h0QW5kQm90dG9tIiwidmVydGljYWwiLCIkbiIsIldvIiwiZGwiLCJtYXhQYWRkaW5nIiwiZ2V0UGFkZGluZyIsIm91dGVyV2lkdGgiLCJvdXRlckhlaWdodCIsInNhbWUiLCJvdGhlciIsImZsIiwidWwiLCJ5ZSIsIkdlIiwiVW4iLCJhZGRCb3giLCJib3hlcyIsIl9sYXllcnMiLCJyZW1vdmVCb3giLCJsYXlvdXQiLCJiZWZvcmVMYXlvdXQiLCJvaSIsImFjcXVpcmVDb250ZXh0IiwicmVsZWFzZUNvbnRleHQiLCJnZXRNYXhpbXVtU2l6ZSIsImlzQXR0YWNoZWQiLCJ1cGRhdGVDb25maWciLCJkcyIsImlpIiwiZ2wiLCJ0b3VjaHN0YXJ0IiwidG91Y2htb3ZlIiwidG91Y2hlbmQiLCJwb2ludGVyZW50ZXIiLCJwb2ludGVyZG93biIsInBvaW50ZXJtb3ZlIiwicG9pbnRlcnVwIiwicG9pbnRlcmxlYXZlIiwicG9pbnRlcm91dCIsIlhuIiwicGwiLCJnZXRBdHRyaWJ1dGUiLCJObyIsIm1sIiwiYmwiLCJ4bCIsIm5hdGl2ZSIsInJpIiwiY29udGFpbnMiLCJfbCIsIk11dGF0aW9uT2JzZXJ2ZXIiLCJhZGRlZE5vZGVzIiwicmVtb3ZlZE5vZGVzIiwib2JzZXJ2ZSIsImNoaWxkTGlzdCIsInN1YnRyZWUiLCJ5bCIsIk1lIiwiS24iLCJWbyIsInZsIiwiTWwiLCJrbCIsIlJlc2l6ZU9ic2VydmVyIiwiY29udGVudFJlY3QiLCJzcyIsImRpc2Nvbm5lY3QiLCJTbCIsImZzIiwicmVtb3ZlQXR0cmlidXRlIiwic2V0QXR0cmlidXRlIiwiJHByb3hpZXMiLCJhdHRhY2giLCJkZXRhY2giLCJpc0Nvbm5lY3RlZCIsIndsIiwiT2Zmc2NyZWVuQ2FudmFzIiwib3QiLCJkZWZhdWx0Um91dGVzIiwidG9vbHRpcFBvc2l0aW9uIiwiaGFzVmFsdWUiLCJDbCIsIlBsIiwibWF4VGlja3NMaW1pdCIsImVuYWJsZWQiLCJPbCIsIkFsIiwiRGwiLCJKZSIsIl90aWNrU2l6ZSIsIl9tYXhMZW5ndGgiLCJUbCIsImNlaWwiLCJMbCIsInFuIiwib2Zmc2V0RnJvbUVkZ2UiLCJHbiIsImdldFRpY2tzTGltaXQiLCJKbiIsIlJsIiwiRWwiLCJnYyIsInhlIiwiWm4iLCJJbCIsIkZsIiwiemwiLCJCbCIsInRpdGxlWCIsInRpdGxlWSIsIld0IiwiX21hcmdpbnMiLCJwYWRkaW5nVG9wIiwicGFkZGluZ0JvdHRvbSIsInBhZGRpbmdMZWZ0IiwicGFkZGluZ1JpZ2h0IiwibGFiZWxSb3RhdGlvbiIsIl9yYW5nZSIsIl9ncmlkTGluZUl0ZW1zIiwiX2xhYmVsSXRlbXMiLCJfbGFiZWxTaXplcyIsIl9sb25nZXN0VGV4dENhY2hlIiwiX3VzZXJNYXgiLCJfdXNlck1pbiIsIl9zdWdnZXN0ZWRNYXgiLCJfc3VnZ2VzdGVkTWluIiwiX3RpY2tzTGVuZ3RoIiwiX2JvcmRlclZhbHVlIiwiX2RhdGFMaW1pdHNDYWNoZWQiLCJzdWdnZXN0ZWRNaW4iLCJzdWdnZXN0ZWRNYXgiLCJnZXRUaWNrcyIsInhMYWJlbHMiLCJ5TGFiZWxzIiwiZ2V0TGFiZWxJdGVtcyIsIl9jb21wdXRlTGFiZWxJdGVtcyIsImJlZm9yZVVwZGF0ZSIsInNhbXBsZVNpemUiLCJiZWZvcmVTZXREaW1lbnNpb25zIiwic2V0RGltZW5zaW9ucyIsImFmdGVyU2V0RGltZW5zaW9ucyIsImJlZm9yZURhdGFMaW1pdHMiLCJkZXRlcm1pbmVEYXRhTGltaXRzIiwiYWZ0ZXJEYXRhTGltaXRzIiwiYmVmb3JlQnVpbGRUaWNrcyIsImJ1aWxkVGlja3MiLCJhZnRlckJ1aWxkVGlja3MiLCJfY29udmVydFRpY2tzVG9MYWJlbHMiLCJiZWZvcmVDYWxjdWxhdGVMYWJlbFJvdGF0aW9uIiwiY2FsY3VsYXRlTGFiZWxSb3RhdGlvbiIsImFmdGVyQ2FsY3VsYXRlTGFiZWxSb3RhdGlvbiIsInNvdXJjZSIsImFmdGVyQXV0b1NraXAiLCJiZWZvcmVGaXQiLCJmaXQiLCJhZnRlckZpdCIsImFmdGVyVXBkYXRlIiwiX2FsaWduVG9QaXhlbHMiLCJhbGlnblRvUGl4ZWxzIiwiX2NhbGxIb29rcyIsIm5vdGlmeVBsdWdpbnMiLCJiZWZvcmVUaWNrVG9MYWJlbENvbnZlcnNpb24iLCJnZW5lcmF0ZVRpY2tMYWJlbHMiLCJhZnRlclRpY2tUb0xhYmVsQ29udmVyc2lvbiIsIl9pc1Zpc2libGUiLCJfZ2V0TGFiZWxTaXplcyIsIndpZGVzdCIsImhpZ2hlc3QiLCJhc2luIiwiZmlyc3QiLCJsYXN0IiwiX2NhbGN1bGF0ZVBhZGRpbmciLCJfaGFuZGxlTWFyZ2lucyIsImlzRnVsbFNpemUiLCJfY29tcHV0ZUxhYmVsU2l6ZXMiLCJfcmVzb2x2ZVRpY2tGb250T3B0aW9ucyIsIndpZHRocyIsImhlaWdodHMiLCJnZXREZWNpbWFsRm9yUGl4ZWwiLCJnZXRCYXNlVmFsdWUiLCJfY29tcHV0ZUdyaWRMaW5lSXRlbXMiLCJhbGlnbkJvcmRlclZhbHVlIiwiJCIsInR0Iiwic3QiLCJxIiwiVnQiLCJDZSIsIkh0IiwibmUiLCJBdCIsIm9lIiwidGlja0JvcmRlckRhc2giLCJUdCIsInRpY2tCb3JkZXJEYXNoT2Zmc2V0IiwidHgxIiwidHkxIiwidHgyIiwidHkyIiwieDEiLCJ5MSIsIngyIiwieTIiLCJfZ2V0WEF4aXNMYWJlbEFsaWdubWVudCIsIl9nZXRZQXhpc0xhYmVsQWxpZ25tZW50IiwidGV4dE9mZnNldCIsIl9jb21wdXRlTGFiZWxBcmVhIiwiZHJhd0JhY2tncm91bmQiLCJkcmF3R3JpZCIsImRyYXdMaW5lIiwic2V0TGluZURhc2giLCJkcmF3Qm9yZGVyIiwiZHJhd0xhYmVscyIsImRyYXdUaXRsZSIsIl9tYXhEaWdpdHMiLCJpZSIsInNjb3BlIiwiaXNGb3JUeXBlIiwiaXNQcm90b3R5cGVPZiIsInJlZ2lzdGVyIiwiVmwiLCJXbCIsInVucmVnaXN0ZXIiLCJObCIsInVzIiwiY29udHJvbGxlcnMiLCJfdHlwZWRSZWdpc3RyaWVzIiwiX2VhY2giLCJhZGRDb250cm9sbGVycyIsImFkZFBsdWdpbnMiLCJhZGRTY2FsZXMiLCJnZXRDb250cm9sbGVyIiwiX2dldCIsImdldFBsdWdpbiIsImdldFNjYWxlIiwicmVtb3ZlQ29udHJvbGxlcnMiLCJyZW1vdmVFbGVtZW50cyIsInJlbW92ZVBsdWdpbnMiLCJyZW1vdmVTY2FsZXMiLCJfZ2V0UmVnaXN0cnlGb3JUeXBlIiwiX2V4ZWMiLCJkdCIsImdzIiwiX2luaXQiLCJub3RpZnkiLCJfY3JlYXRlRGVzY3JpcHRvcnMiLCJwbHVnaW4iLCJjYW5jZWxhYmxlIiwiaW52YWxpZGF0ZSIsIl9vbGRDYWNoZSIsIl9ub3RpZnlTdGF0ZUNoYW5nZXMiLCJIbCIsIllsIiwic29tZSIsImxvY2FsSWRzIiwiamwiLCIkbCIsImxvY2FsIiwicGx1Z2luU2NvcGVLZXlzIiwicHMiLCJVbCIsIlhsIiwiUW4iLCJLbCIsIm1zIiwicWwiLCJHbCIsImVycm9yIiwiSG8iLCJqbyIsIkpsIiwiZW8iLCJZbyIsIlplIiwiX2UiLCJhZGRJZkZvdW5kIiwiYnMiLCJfY29uZmlnIiwiX3Njb3BlQ2FjaGUiLCJfcmVzb2x2ZXJDYWNoZSIsImNsZWFyQ2FjaGUiLCJjbGVhciIsImFkZGl0aW9uYWxPcHRpb25TY29wZXMiLCJfY2FjaGVkU2NvcGVzIiwiY2hhcnRPcHRpb25TY29wZXMiLCJyZXNvbHZlciIsInN1YlByZWZpeGVzIiwiaW8iLCJRbCIsIlpsIiwidGMiLCJlYyIsInNvIiwibm8iLCJvbyIsIm9uQ29tcGxldGUiLCJpYyIsIm9uUHJvZ3Jlc3MiLCIkbyIsImdldEVsZW1lbnRCeUlkIiwic2kiLCJybyIsInNjIiwibmMiLCJpbnN0YW5jZXMiLCJ2ZXJzaW9uIiwiZ2V0Q2hhcnQiLCJhbyIsIl9vcHRpb25zIiwiX2FzcGVjdFJhdGlvIiwiX21ldGFzZXRzIiwiX2xhc3RFdmVudCIsIl9saXN0ZW5lcnMiLCJfcmVzcG9uc2l2ZUxpc3RlbmVycyIsIl9zb3J0ZWRNZXRhc2V0cyIsIl9wbHVnaW5zIiwiX2hpZGRlbkluZGljZXMiLCJhdHRhY2hlZCIsIl9kb1Jlc2l6ZSIsInJlc2l6ZURlbGF5IiwiX2luaXRpYWxpemUiLCJiaW5kRXZlbnRzIiwiX3Jlc2l6ZUJlZm9yZURyYXciLCJfcmVzaXplIiwib25SZXNpemUiLCJyZW5kZXIiLCJlbnN1cmVTY2FsZXNIYXZlSURzIiwiYnVpbGRPclVwZGF0ZVNjYWxlcyIsImRwb3NpdGlvbiIsImR0eXBlIiwiX3VwZGF0ZU1ldGFzZXRzIiwiX2Rlc3Ryb3lEYXRhc2V0TWV0YSIsIl9yZW1vdmVVbnJlZmVyZW5jZWRNZXRhc2V0cyIsImJ1aWxkT3JVcGRhdGVDb250cm9sbGVycyIsIm9yZGVyIiwiX3Jlc2V0RWxlbWVudHMiLCJfdXBkYXRlU2NhbGVzIiwiX2NoZWNrRXZlbnRCaW5kaW5ncyIsIl91cGRhdGVIaWRkZW5JbmRpY2VzIiwiX21pblBhZGRpbmciLCJfdXBkYXRlTGF5b3V0IiwiX3VwZGF0ZURhdGFzZXRzIiwiX2V2ZW50SGFuZGxlciIsIl91cGRhdGVIb3ZlclN0eWxlcyIsInVuYmluZEV2ZW50cyIsIl9nZXRVbmlmb3JtRGF0YUNoYW5nZXMiLCJtZXRob2QiLCJfaWR4IiwiX3VwZGF0ZURhdGFzZXQiLCJtZXRhIiwiX2RyYXdEYXRhc2V0cyIsIl9kcmF3RGF0YXNldCIsImdldEVsZW1lbnRzQXRFdmVudEZvck1vZGUiLCJzZXREYXRhc2V0VmlzaWJpbGl0eSIsIl91cGRhdGVWaXNpYmlsaXR5IiwiX3N0b3AiLCJkZXN0cm95IiwidG9CYXNlNjRJbWFnZSIsInRvRGF0YVVSTCIsImJpbmRVc2VyRXZlbnRzIiwiYmluZFJlc3BvbnNpdmVFdmVudHMiLCJfYWRkIiwibGlzdGVuZXIiLCJfcmVtb3ZlIiwiZGV0YWNoZWQiLCJ1cGRhdGVIb3ZlclN0eWxlIiwiZ2V0QWN0aXZlRWxlbWVudHMiLCJzZXRBY3RpdmVFbGVtZW50cyIsImV2ZW50IiwicmVwbGF5IiwiaW5DaGFydEFyZWEiLCJfaGFuZGxlRXZlbnQiLCJjaGFuZ2VkIiwiX2dldEFjdGl2ZUVsZW1lbnRzIiwib2MiLCJyYyIsInBpeGVsTWFyZ2luIiwiYWMiLCJsYyIsIm91dGVyU3RhcnQiLCJvdXRlckVuZCIsImlubmVyU3RhcnQiLCJpbm5lckVuZCIsImVlIiwiYWkiLCJjYyIsImZ1bGxDaXJjbGVzIiwiaGMiLCJzZWxmSm9pbiIsInhzIiwiVW8iLCJsaW5lQ2FwIiwiZGMiLCJmYyIsInN0ZXBwZWQiLCJYbyIsImlsZW4iLCJ1YyIsIm1vdmUiLCJkcmF3WCIsIl9zIiwicGMiLCJtYyIsIl9wYXRoIiwiUGF0aDJEIiwicGF0aCIsImJjIiwieGMiLCJfYyIsImRpIiwiX3BvaW50cyIsIl9zZWdtZW50cyIsIl9wb2ludHNVcGRhdGVkIiwicGF0aFNlZ21lbnQiLCJoaXRSYWRpdXMiLCJ5YyIsImhvdmVyUmFkaXVzIiwiaW5YUmFuZ2UiLCJpbllSYW5nZSIsIktvIiwiRHQiLCJ2YyIsIk1jIiwia2MiLCJvdXRlciIsImlubmVyIiwibnMiLCJTYyIsIndjIiwib3MiLCJ5cyIsIkNjIiwiQXJjRWxlbWVudCIsIkJhckVsZW1lbnQiLCJMaW5lRWxlbWVudCIsIlBvaW50RWxlbWVudCIsInZzIiwiY28iLCJxbyIsIkdvIiwiUGMiLCJEYyIsIk9jIiwiQWMiLCJobyIsIlRjIiwiTGMiLCJSYyIsImZvcmNlT3ZlcnJpZGUiLCJFYyIsInNhbXBsZXMiLCJJYyIsIkRlIiwiUGUiLCJKbyIsImZvIiwiRmMiLCJ6YyIsImFsZ29yaXRobSIsImJlZm9yZUVsZW1lbnRzVXBkYXRlIiwidGhyZXNob2xkIiwiQmMiLCJmaSIsIk1zIiwidW8iLCJXYyIsIlpvIiwiZ28iLCJOYyIsIlZjIiwiJGMiLCJIYyIsImpjIiwiWWMiLCJVYyIsIlhjIiwiS2MiLCJ1bnNoaWZ0IiwicWMiLCJsaSIsIkdjIiwiSmMiLCJaYyIsInRoIiwiUWMiLCJycyIsImFib3ZlIiwiYmVsb3ciLCJlaCIsImFyZWEiLCJwbyIsImFzIiwibW8iLCJpaCIsImJvIiwic2giLCJhZnRlckRhdGFzZXRzVXBkYXRlIiwiJGZpbGxlciIsInByb3BhZ2F0ZSIsImJlZm9yZURyYXciLCJkcmF3VGltZSIsImJlZm9yZURhdGFzZXRzRHJhdyIsImJlZm9yZURhdGFzZXREcmF3IiwieG8iLCJnZXRCb3hTaXplIiwiYm94SGVpZ2h0IiwiYm94V2lkdGgiLCJ1c2VQb2ludFN0eWxlIiwicG9pbnRTdHlsZVdpZHRoIiwiaXRlbUhlaWdodCIsIm5oIiwiaXRlbXNFcXVhbCIsImNpIiwiX2FkZGVkIiwibGVnZW5kSGl0Qm94ZXMiLCJfaG92ZXJlZEl0ZW0iLCJkb3VnaG51dE1vZGUiLCJsZWdlbmRJdGVtcyIsImNvbHVtblNpemVzIiwibGluZVdpZHRocyIsImJ1aWxkTGFiZWxzIiwiX2NvbXB1dGVUaXRsZUhlaWdodCIsIl9maXRSb3dzIiwiX2ZpdENvbHMiLCJyb3ciLCJpdGVtV2lkdGgiLCJvaCIsImNvbCIsImFkanVzdEhpdEJveGVzIiwicnRsIiwiX2RyYXciLCJkcmF3TGVnZW5kQm94IiwiU1FSVDIiLCJ0ZXh0RGlyZWN0aW9uIiwiUW8iLCJfZ2V0TGVnZW5kSXRlbUF0IiwiaGFuZGxlRXZlbnQiLCJsaCIsIm9uTGVhdmUiLCJyaCIsImFoIiwiY2giLCJfZWxlbWVudCIsImFmdGVyRXZlbnQiLCJrZSIsIl9wYWRkaW5nIiwiX2RyYXdBcmdzIiwiaGgiLCJ0aXRsZUJsb2NrIiwiZGgiLCJXZWFrTWFwIiwiZmgiLCJ2ZSIsImF2ZXJhZ2UiLCJodCIsInh0IiwiU3RyaW5nIiwidWgiLCJmb3JtYXR0ZWRWYWx1ZSIsIl9vIiwiYm9keSIsImZvb3RlciIsImJvZHlGb250IiwidGl0bGVGb250IiwiZm9vdGVyRm9udCIsImJlZm9yZSIsImxpbmVzIiwiYWZ0ZXIiLCJiZWZvcmVCb2R5IiwiYWZ0ZXJCb2R5IiwidGl0bGVTcGFjaW5nIiwidGl0bGVNYXJnaW5Cb3R0b20iLCJkaXNwbGF5Q29sb3JzIiwiYm9keVNwYWNpbmciLCJmb290ZXJNYXJnaW5Ub3AiLCJmb290ZXJTcGFjaW5nIiwibWF4TGluZVdpZHRoIiwiYm94UGFkZGluZyIsImdoIiwicGgiLCJjYXJldFNpemUiLCJjYXJldFBhZGRpbmciLCJtaCIsInlvIiwieUFsaWduIiwieEFsaWduIiwiYmgiLCJ4aCIsInZvIiwiY29ybmVyUmFkaXVzIiwidGkiLCJNbyIsIl9oIiwidG9vbHRpcCIsInRvb2x0aXBJdGVtcyIsImtvIiwiY2FsbGJhY2tzIiwidHIiLCJiZWZvcmVUaXRsZSIsImFmdGVyVGl0bGUiLCJiZWZvcmVMYWJlbCIsImxhYmVsQ29sb3IiLCJsYWJlbFRleHRDb2xvciIsImJvZHlDb2xvciIsImxhYmVsUG9pbnRTdHlsZSIsImFmdGVyTGFiZWwiLCJiZWZvcmVGb290ZXIiLCJhZnRlckZvb3RlciIsIlNvIiwicG9zaXRpb25lcnMiLCJvcGFjaXR5IiwiX2V2ZW50UG9zaXRpb24iLCJfc2l6ZSIsIl9jYWNoZWRBbmltYXRpb25zIiwiX3Rvb2x0aXBJdGVtcyIsImRhdGFQb2ludHMiLCJjYXJldFgiLCJjYXJldFkiLCJsYWJlbENvbG9ycyIsImxhYmVsUG9pbnRTdHlsZXMiLCJsYWJlbFRleHRDb2xvcnMiLCJnZXRUaXRsZSIsImdldEJlZm9yZUJvZHkiLCJnZXRCb2R5IiwiZ2V0QWZ0ZXJCb2R5IiwiZ2V0Rm9vdGVyIiwiX2NyZWF0ZUl0ZW1zIiwiaXRlbVNvcnQiLCJleHRlcm5hbCIsImRyYXdDYXJldCIsImdldENhcmV0UG9zaXRpb24iLCJ4MyIsInkzIiwidGl0bGVBbGlnbiIsInRpdGxlQ29sb3IiLCJfZHJhd0NvbG9yQm94IiwibXVsdGlLZXlCYWNrZ3JvdW5kIiwic3Ryb2tlUmVjdCIsImRyYXdCb2R5IiwiYm9keUFsaWduIiwiZmlsbExpbmVPZlRleHQiLCJkcmF3Rm9vdGVyIiwiZm9vdGVyQWxpZ24iLCJmb290ZXJDb2xvciIsInF1YWRyYXRpY0N1cnZlVG8iLCJfdXBkYXRlQW5pbWF0aW9uVGFyZ2V0IiwiX3dpbGxSZW5kZXIiLCJnbG9iYWxBbHBoYSIsIl9wb3NpdGlvbkNoYW5nZWQiLCJfaWdub3JlUmVwbGF5RXZlbnRzIiwieWgiLCJhZnRlckluaXQiLCJhZnRlckRyYXciLCJ2aCIsIkNvbG9ycyIsIkRlY2ltYXRpb24iLCJGaWxsZXIiLCJMZWdlbmQiLCJTdWJUaXRsZSIsIlRpdGxlIiwiVG9vbHRpcCIsIk1oIiwiYWRkSWZTdHJpbmciLCJraCIsImxhc3RJbmRleE9mIiwiU2giLCJ2YWxpZEluZGV4Iiwid28iLCJ3aCIsIl9zdGFydFZhbHVlIiwiX3ZhbHVlUmFuZ2UiLCJfYWRkZWRMYWJlbHMiLCJDaCIsInN0ZXAiLCJwcmVjaXNpb24iLCJtYXhUaWNrcyIsIm1heERpZ2l0cyIsImluY2x1ZGVCb3VuZHMiLCJDbyIsInNlIiwiX2VuZFZhbHVlIiwiaGFuZGxlVGlja1JhbmdlT3B0aW9ucyIsImdldFRpY2tMaW1pdCIsInN0ZXBTaXplIiwiY29tcHV0ZVRpY2tMaW1pdCIsImtzIiwiU2UiLCJCdCIsImNoYW5nZUV4cG9uZW50IiwiUG8iLCJEbyIsIlBoIiwiRGgiLCJTcyIsIl96ZXJvIiwid3MiLCJPaCIsIk9vIiwiQWgiLCJfcG9pbnRMYWJlbHMiLCJjZW50ZXJQb2ludExhYmVscyIsImdldFBvaW50TGFiZWxDb250ZXh0IiwiZ2V0UG9pbnRQb3NpdGlvbiIsImRyYXdpbmdBcmVhIiwiVGgiLCJzZXRDZW50ZXJQb2ludCIsIl9wb2ludExhYmVsSXRlbXMiLCJFaCIsIkxoIiwiZXh0cmEiLCJhZGRpdGlvbmFsQW5nbGUiLCJ6aCIsIkloIiwiRmgiLCJSaCIsIkJoIiwiV2giLCJlciIsIk5oIiwiVmgiLCJDcyIsImFuaW1hdGUiLCJnZXRWYWx1ZUZvckRpc3RhbmNlRnJvbUNlbnRlciIsImdldEJhc2VQb3NpdGlvbiIsImdldFBvaW50TGFiZWxQb3NpdGlvbiIsInVpIiwibWlsbGlzZWNvbmQiLCJjb21tb24iLCJzdGVwcyIsInNlY29uZCIsIm1pbnV0ZSIsImhvdXIiLCJkYXkiLCJ3ZWVrIiwibW9udGgiLCJxdWFydGVyIiwieWVhciIsIkFvIiwiVG8iLCJfYWRhcHRlciIsInBhcnNlciIsImlzb1dlZWtkYXkiLCJfcGFyc2VPcHRzIiwiTG8iLCJNQVhfU0FGRV9JTlRFR0VSIiwiSGgiLCJqaCIsIlJvIiwiWWgiLCJFbyIsIlBzIiwiYWRhcHRlcnMiLCJ0aW1lIiwidW5pdCIsIm1pblVuaXQiLCJkaXNwbGF5Rm9ybWF0cyIsIl91bml0IiwiX21ham9yVW5pdCIsIl9vZmZzZXRzIiwiX25vcm1hbGl6ZWQiLCJkYXRlIiwibm9ybWFsaXplZCIsIl9nZXRMYWJlbEJvdW5kcyIsImdldExhYmVsVGltZXN0YW1wcyIsIl9nZW5lcmF0ZSIsIl9nZXRMYWJlbENhcGFjaXR5IiwiaW5pdE9mZnNldHMiLCJvZmZzZXRBZnRlckF1dG9za2lwIiwiZ2V0RGVjaW1hbEZvclZhbHVlIiwiZmFjdG9yIiwiZ2V0RGF0YVRpbWVzdGFtcHMiLCJ0b29sdGlwRm9ybWF0IiwiZGF0ZXRpbWUiLCJfdGlja0Zvcm1hdEZ1bmN0aW9uIiwiX2dldExhYmVsU2l6ZSIsImVpIiwiRHMiLCJfdGFibGUiLCJfbWluUG9zIiwiX3RhYmxlUmFuZ2UiLCJfZ2V0VGltZXN0YW1wc0ZvclRhYmxlIiwiYnVpbGRMb29rdXBUYWJsZSIsIiRoIiwiQ2F0ZWdvcnlTY2FsZSIsIkxpbmVhclNjYWxlIiwiTG9nYXJpdGhtaWNTY2FsZSIsIlJhZGlhbExpbmVhclNjYWxlIiwiVGltZVNjYWxlIiwiVGltZVNlcmllc1NjYWxlIiwiaXIiLCJBcyIsInNyIiwiTnQiLCJuciIsIm9yIiwiRXMiLCJiZCIsInJlZ2lzdGVyYWJsZXMiLCJ4ZCIsInByb3ZpZGUiLCJ1c2VWYWx1ZSIsIlVoIiwiY29sb3JzY2hlbWVzT3B0aW9ucyIsIlRzIiwic2V0Q29sb3JzY2hlbWVzT3B0aW9ucyIsInBDb2xvcnNjaGVtZXNPcHRpb25zIiwiZ2V0Q29sb3JzY2hlbWVzT3B0aW9ucyIsIsm1ZmFjIiwiybVwcm92IiwiUnMiLCJ0b2tlbiIsImZhY3RvcnkiLCJwcm92aWRlZEluIiwiX2QiLCJjaGFydENsaWNrIiwiZ2kiLCJjaGFydEhvdmVyIiwic3VicyIsInRoZW1lT3ZlcnJpZGVzIiwianQiLCJ6cyIsInpvbmUiLCJJcyIsInRoZW1lU2VydmljZSIsIm9wdGlvbmFsIiwicGxhdGZvcm1JZCIsIkJzIiwiaXNCcm93c2VyIiwiTnMiLCJuYXRpdmVFbGVtZW50IiwicGlwZSIsIkxzIiwic3Vic2NyaWJlIiwidGhlbWVDaGFuZ2VkIiwibmdPbkNoYW5nZXMiLCJldmVyeSIsImlzRmlyc3RDaGFuZ2UiLCJnZXRDaGFydENvbmZpZ3VyYXRpb24iLCJuZ09uRGVzdHJveSIsInVuc3Vic2NyaWJlIiwicnVuT3V0c2lkZUFuZ3VsYXIiLCJoaWRlRGF0YXNldCIsImlzRGF0YXNldEhpZGRlbiIsImdldENoYXJ0T3B0aW9ucyIsIm9ic2VydmVkIiwib2JzZXJ2ZXJzIiwicnVuIiwiZW1pdCIsImdldENoYXJ0RGF0YSIsIsm1ZGlyIiwiV3MiLCJzZWxlY3RvcnMiLCJpbnB1dHMiLCJvdXRwdXRzIiwiZXhwb3J0QXMiLCJmZWF0dXJlcyIsIkZzIl0sInNvdXJjZXMiOlsibm9kZV9tb2R1bGVzL0BrdXJrbGUvY29sb3IvZGlzdC9jb2xvci5lc20uanMiLCJub2RlX21vZHVsZXMvY2hhcnQuanMvZGlzdC9jaHVua3MvaGVscGVycy5kYXRhc2V0LmpzIiwibm9kZV9tb2R1bGVzL2NoYXJ0LmpzL2Rpc3QvY2hhcnQuanMiLCJub2RlX21vZHVsZXMvZXMtdG9vbGtpdC9kaXN0L3ByZWRpY2F0ZS9pc1BsYWluT2JqZWN0Lm1qcyIsIm5vZGVfbW9kdWxlcy9lcy10b29sa2l0L2Rpc3QvX2ludGVybmFsL2lzVW5zYWZlUHJvcGVydHkubWpzIiwibm9kZV9tb2R1bGVzL2VzLXRvb2xraXQvZGlzdC9vYmplY3QvbWVyZ2UubWpzIiwibm9kZV9tb2R1bGVzL25nMi1jaGFydHMvZmVzbTIwMjIvbmcyLWNoYXJ0cy5tanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyohXG4gKiBAa3Vya2xlL2NvbG9yIHYwLjMuNFxuICogaHR0cHM6Ly9naXRodWIuY29tL2t1cmtsZS9jb2xvciNyZWFkbWVcbiAqIChjKSAyMDI0IEp1a2thIEt1cmtlbGFcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZVxuICovXG5mdW5jdGlvbiByb3VuZCh2KSB7XG4gIHJldHVybiB2ICsgMC41IHwgMDtcbn1cbmNvbnN0IGxpbSA9ICh2LCBsLCBoKSA9PiBNYXRoLm1heChNYXRoLm1pbih2LCBoKSwgbCk7XG5mdW5jdGlvbiBwMmIodikge1xuICByZXR1cm4gbGltKHJvdW5kKHYgKiAyLjU1KSwgMCwgMjU1KTtcbn1cbmZ1bmN0aW9uIGIycCh2KSB7XG4gIHJldHVybiBsaW0ocm91bmQodiAvIDIuNTUpLCAwLCAxMDApO1xufVxuZnVuY3Rpb24gbjJiKHYpIHtcbiAgcmV0dXJuIGxpbShyb3VuZCh2ICogMjU1KSwgMCwgMjU1KTtcbn1cbmZ1bmN0aW9uIGIybih2KSB7XG4gIHJldHVybiBsaW0ocm91bmQodiAvIDIuNTUpIC8gMTAwLCAwLCAxKTtcbn1cbmZ1bmN0aW9uIG4ycCh2KSB7XG4gIHJldHVybiBsaW0ocm91bmQodiAqIDEwMCksIDAsIDEwMCk7XG59XG5jb25zdCBtYXAkMSA9IHtcbiAgMDogMCxcbiAgMTogMSxcbiAgMjogMixcbiAgMzogMyxcbiAgNDogNCxcbiAgNTogNSxcbiAgNjogNixcbiAgNzogNyxcbiAgODogOCxcbiAgOTogOSxcbiAgQTogMTAsXG4gIEI6IDExLFxuICBDOiAxMixcbiAgRDogMTMsXG4gIEU6IDE0LFxuICBGOiAxNSxcbiAgYTogMTAsXG4gIGI6IDExLFxuICBjOiAxMixcbiAgZDogMTMsXG4gIGU6IDE0LFxuICBmOiAxNVxufTtcbmNvbnN0IGhleCA9IFsuLi4nMDEyMzQ1Njc4OUFCQ0RFRiddO1xuY29uc3QgaDEgPSBiID0+IGhleFtiICYgMHhGXTtcbmNvbnN0IGgyID0gYiA9PiBoZXhbKGIgJiAweEYwKSA+PiA0XSArIGhleFtiICYgMHhGXTtcbmNvbnN0IGVxID0gYiA9PiAoYiAmIDB4RjApID4+IDQgPT09IChiICYgMHhGKTtcbmNvbnN0IGlzU2hvcnQgPSB2ID0+IGVxKHYucikgJiYgZXEodi5nKSAmJiBlcSh2LmIpICYmIGVxKHYuYSk7XG5mdW5jdGlvbiBoZXhQYXJzZShzdHIpIHtcbiAgdmFyIGxlbiA9IHN0ci5sZW5ndGg7XG4gIHZhciByZXQ7XG4gIGlmIChzdHJbMF0gPT09ICcjJykge1xuICAgIGlmIChsZW4gPT09IDQgfHwgbGVuID09PSA1KSB7XG4gICAgICByZXQgPSB7XG4gICAgICAgIHI6IDI1NSAmIG1hcCQxW3N0clsxXV0gKiAxNyxcbiAgICAgICAgZzogMjU1ICYgbWFwJDFbc3RyWzJdXSAqIDE3LFxuICAgICAgICBiOiAyNTUgJiBtYXAkMVtzdHJbM11dICogMTcsXG4gICAgICAgIGE6IGxlbiA9PT0gNSA/IG1hcCQxW3N0cls0XV0gKiAxNyA6IDI1NVxuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKGxlbiA9PT0gNyB8fCBsZW4gPT09IDkpIHtcbiAgICAgIHJldCA9IHtcbiAgICAgICAgcjogbWFwJDFbc3RyWzFdXSA8PCA0IHwgbWFwJDFbc3RyWzJdXSxcbiAgICAgICAgZzogbWFwJDFbc3RyWzNdXSA8PCA0IHwgbWFwJDFbc3RyWzRdXSxcbiAgICAgICAgYjogbWFwJDFbc3RyWzVdXSA8PCA0IHwgbWFwJDFbc3RyWzZdXSxcbiAgICAgICAgYTogbGVuID09PSA5ID8gbWFwJDFbc3RyWzddXSA8PCA0IHwgbWFwJDFbc3RyWzhdXSA6IDI1NVxuICAgICAgfTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJldDtcbn1cbmNvbnN0IGFscGhhID0gKGEsIGYpID0+IGEgPCAyNTUgPyBmKGEpIDogJyc7XG5mdW5jdGlvbiBoZXhTdHJpbmcodikge1xuICB2YXIgZiA9IGlzU2hvcnQodikgPyBoMSA6IGgyO1xuICByZXR1cm4gdiA/ICcjJyArIGYodi5yKSArIGYodi5nKSArIGYodi5iKSArIGFscGhhKHYuYSwgZikgOiB1bmRlZmluZWQ7XG59XG5jb25zdCBIVUVfUkUgPSAvXihoc2xhP3xod2J8aHN2KVxcKFxccyooWy0rLmVcXGRdKykoPzpkZWcpP1tcXHMsXSsoWy0rLmVcXGRdKyklW1xccyxdKyhbLSsuZVxcZF0rKSUoPzpbXFxzLF0rKFstKy5lXFxkXSspKCUpPyk/XFxzKlxcKSQvO1xuZnVuY3Rpb24gaHNsMnJnYm4oaCwgcywgbCkge1xuICBjb25zdCBhID0gcyAqIE1hdGgubWluKGwsIDEgLSBsKTtcbiAgY29uc3QgZiA9IChuLCBrID0gKG4gKyBoIC8gMzApICUgMTIpID0+IGwgLSBhICogTWF0aC5tYXgoTWF0aC5taW4oayAtIDMsIDkgLSBrLCAxKSwgLTEpO1xuICByZXR1cm4gW2YoMCksIGYoOCksIGYoNCldO1xufVxuZnVuY3Rpb24gaHN2MnJnYm4oaCwgcywgdikge1xuICBjb25zdCBmID0gKG4sIGsgPSAobiArIGggLyA2MCkgJSA2KSA9PiB2IC0gdiAqIHMgKiBNYXRoLm1heChNYXRoLm1pbihrLCA0IC0gaywgMSksIDApO1xuICByZXR1cm4gW2YoNSksIGYoMyksIGYoMSldO1xufVxuZnVuY3Rpb24gaHdiMnJnYm4oaCwgdywgYikge1xuICBjb25zdCByZ2IgPSBoc2wycmdibihoLCAxLCAwLjUpO1xuICBsZXQgaTtcbiAgaWYgKHcgKyBiID4gMSkge1xuICAgIGkgPSAxIC8gKHcgKyBiKTtcbiAgICB3ICo9IGk7XG4gICAgYiAqPSBpO1xuICB9XG4gIGZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHtcbiAgICByZ2JbaV0gKj0gMSAtIHcgLSBiO1xuICAgIHJnYltpXSArPSB3O1xuICB9XG4gIHJldHVybiByZ2I7XG59XG5mdW5jdGlvbiBodWVWYWx1ZShyLCBnLCBiLCBkLCBtYXgpIHtcbiAgaWYgKHIgPT09IG1heCkge1xuICAgIHJldHVybiAoZyAtIGIpIC8gZCArIChnIDwgYiA/IDYgOiAwKTtcbiAgfVxuICBpZiAoZyA9PT0gbWF4KSB7XG4gICAgcmV0dXJuIChiIC0gcikgLyBkICsgMjtcbiAgfVxuICByZXR1cm4gKHIgLSBnKSAvIGQgKyA0O1xufVxuZnVuY3Rpb24gcmdiMmhzbCh2KSB7XG4gIGNvbnN0IHJhbmdlID0gMjU1O1xuICBjb25zdCByID0gdi5yIC8gcmFuZ2U7XG4gIGNvbnN0IGcgPSB2LmcgLyByYW5nZTtcbiAgY29uc3QgYiA9IHYuYiAvIHJhbmdlO1xuICBjb25zdCBtYXggPSBNYXRoLm1heChyLCBnLCBiKTtcbiAgY29uc3QgbWluID0gTWF0aC5taW4ociwgZywgYik7XG4gIGNvbnN0IGwgPSAobWF4ICsgbWluKSAvIDI7XG4gIGxldCBoLCBzLCBkO1xuICBpZiAobWF4ICE9PSBtaW4pIHtcbiAgICBkID0gbWF4IC0gbWluO1xuICAgIHMgPSBsID4gMC41ID8gZCAvICgyIC0gbWF4IC0gbWluKSA6IGQgLyAobWF4ICsgbWluKTtcbiAgICBoID0gaHVlVmFsdWUociwgZywgYiwgZCwgbWF4KTtcbiAgICBoID0gaCAqIDYwICsgMC41O1xuICB9XG4gIHJldHVybiBbaCB8IDAsIHMgfHwgMCwgbF07XG59XG5mdW5jdGlvbiBjYWxsbihmLCBhLCBiLCBjKSB7XG4gIHJldHVybiAoQXJyYXkuaXNBcnJheShhKSA/IGYoYVswXSwgYVsxXSwgYVsyXSkgOiBmKGEsIGIsIGMpKS5tYXAobjJiKTtcbn1cbmZ1bmN0aW9uIGhzbDJyZ2IoaCwgcywgbCkge1xuICByZXR1cm4gY2FsbG4oaHNsMnJnYm4sIGgsIHMsIGwpO1xufVxuZnVuY3Rpb24gaHdiMnJnYihoLCB3LCBiKSB7XG4gIHJldHVybiBjYWxsbihod2IycmdibiwgaCwgdywgYik7XG59XG5mdW5jdGlvbiBoc3YycmdiKGgsIHMsIHYpIHtcbiAgcmV0dXJuIGNhbGxuKGhzdjJyZ2JuLCBoLCBzLCB2KTtcbn1cbmZ1bmN0aW9uIGh1ZShoKSB7XG4gIHJldHVybiAoaCAlIDM2MCArIDM2MCkgJSAzNjA7XG59XG5mdW5jdGlvbiBodWVQYXJzZShzdHIpIHtcbiAgY29uc3QgbSA9IEhVRV9SRS5leGVjKHN0cik7XG4gIGxldCBhID0gMjU1O1xuICBsZXQgdjtcbiAgaWYgKCFtKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChtWzVdICE9PSB2KSB7XG4gICAgYSA9IG1bNl0gPyBwMmIoK21bNV0pIDogbjJiKCttWzVdKTtcbiAgfVxuICBjb25zdCBoID0gaHVlKCttWzJdKTtcbiAgY29uc3QgcDEgPSArbVszXSAvIDEwMDtcbiAgY29uc3QgcDIgPSArbVs0XSAvIDEwMDtcbiAgaWYgKG1bMV0gPT09ICdod2InKSB7XG4gICAgdiA9IGh3YjJyZ2IoaCwgcDEsIHAyKTtcbiAgfSBlbHNlIGlmIChtWzFdID09PSAnaHN2Jykge1xuICAgIHYgPSBoc3YycmdiKGgsIHAxLCBwMik7XG4gIH0gZWxzZSB7XG4gICAgdiA9IGhzbDJyZ2IoaCwgcDEsIHAyKTtcbiAgfVxuICByZXR1cm4ge1xuICAgIHI6IHZbMF0sXG4gICAgZzogdlsxXSxcbiAgICBiOiB2WzJdLFxuICAgIGE6IGFcbiAgfTtcbn1cbmZ1bmN0aW9uIHJvdGF0ZSh2LCBkZWcpIHtcbiAgdmFyIGggPSByZ2IyaHNsKHYpO1xuICBoWzBdID0gaHVlKGhbMF0gKyBkZWcpO1xuICBoID0gaHNsMnJnYihoKTtcbiAgdi5yID0gaFswXTtcbiAgdi5nID0gaFsxXTtcbiAgdi5iID0gaFsyXTtcbn1cbmZ1bmN0aW9uIGhzbFN0cmluZyh2KSB7XG4gIGlmICghdikge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBhID0gcmdiMmhzbCh2KTtcbiAgY29uc3QgaCA9IGFbMF07XG4gIGNvbnN0IHMgPSBuMnAoYVsxXSk7XG4gIGNvbnN0IGwgPSBuMnAoYVsyXSk7XG4gIHJldHVybiB2LmEgPCAyNTUgPyBgaHNsYSgke2h9LCAke3N9JSwgJHtsfSUsICR7YjJuKHYuYSl9KWAgOiBgaHNsKCR7aH0sICR7c30lLCAke2x9JSlgO1xufVxuY29uc3QgbWFwID0ge1xuICB4OiAnZGFyaycsXG4gIFo6ICdsaWdodCcsXG4gIFk6ICdyZScsXG4gIFg6ICdibHUnLFxuICBXOiAnZ3InLFxuICBWOiAnbWVkaXVtJyxcbiAgVTogJ3NsYXRlJyxcbiAgQTogJ2VlJyxcbiAgVDogJ29sJyxcbiAgUzogJ29yJyxcbiAgQjogJ3JhJyxcbiAgQzogJ2xhdGVnJyxcbiAgRDogJ2lnaHRzJyxcbiAgUjogJ2luJyxcbiAgUTogJ3R1cnF1b2lzJyxcbiAgRTogJ2hpJyxcbiAgUDogJ3JvJyxcbiAgTzogJ2FsJyxcbiAgTjogJ2xlJyxcbiAgTTogJ2RlJyxcbiAgTDogJ3llbGxvJyxcbiAgRjogJ2VuJyxcbiAgSzogJ2NoJyxcbiAgRzogJ2Fya3MnLFxuICBIOiAnZWEnLFxuICBJOiAnaWdodGcnLFxuICBKOiAnd2gnXG59O1xuY29uc3QgbmFtZXMkMSA9IHtcbiAgT2ljZVhlOiAnZjBmOGZmJyxcbiAgYW50aXF1ZXdFdGU6ICdmYWViZDcnLFxuICBhcXVhOiAnZmZmZicsXG4gIGFxdWFtYXJSZTogJzdmZmZkNCcsXG4gIGF6dVk6ICdmMGZmZmYnLFxuICBiZWlnZTogJ2Y1ZjVkYycsXG4gIGJpc3F1ZTogJ2ZmZTRjNCcsXG4gIGJsYWNrOiAnMCcsXG4gIGJsYW5LZWRPbW9uZDogJ2ZmZWJjZCcsXG4gIFhlOiAnZmYnLFxuICBYZXZpVGV0OiAnOGEyYmUyJyxcbiAgYlB3bjogJ2E1MmEyYScsXG4gIGJ1cmx5d29vZDogJ2RlYjg4NycsXG4gIGNhTXRYZTogJzVmOWVhMCcsXG4gIEthcnRZdXNlOiAnN2ZmZjAwJyxcbiAgS29jVGF0ZTogJ2QyNjkxZScsXG4gIGNTTzogJ2ZmN2Y1MCcsXG4gIGNTbmZsb3dlclhlOiAnNjQ5NWVkJyxcbiAgY1Nuc2lsazogJ2ZmZjhkYycsXG4gIGNyaW1zb246ICdkYzE0M2MnLFxuICBjeWFuOiAnZmZmZicsXG4gIHhYZTogJzhiJyxcbiAgeGN5YW46ICc4YjhiJyxcbiAgeGdUTW5QZDogJ2I4ODYwYicsXG4gIHhXYXk6ICdhOWE5YTknLFxuICB4Z1lGOiAnNjQwMCcsXG4gIHhnWXk6ICdhOWE5YTknLFxuICB4a2hha2k6ICdiZGI3NmInLFxuICB4bWFnRnRhOiAnOGIwMDhiJyxcbiAgeFRpdmVnWUY6ICc1NTZiMmYnLFxuICB4U2FuZ2U6ICdmZjhjMDAnLFxuICB4U2NFZDogJzk5MzJjYycsXG4gIHhZZDogJzhiMDAwMCcsXG4gIHhzT21vbjogJ2U5OTY3YScsXG4gIHhzSGdZRjogJzhmYmM4ZicsXG4gIHhVWGU6ICc0ODNkOGInLFxuICB4VVdheTogJzJmNGY0ZicsXG4gIHhVZ1l5OiAnMmY0ZjRmJyxcbiAgeFFlOiAnY2VkMScsXG4gIHh2aVRldDogJzk0MDBkMycsXG4gIGRBcHBSazogJ2ZmMTQ5MycsXG4gIGRBcHNreVhlOiAnYmZmZicsXG4gIGRpbVdheTogJzY5Njk2OScsXG4gIGRpbWdZeTogJzY5Njk2OScsXG4gIGRvZGdlclhlOiAnMWU5MGZmJyxcbiAgZmlZYnJpY2s6ICdiMjIyMjInLFxuICBmbFNPd0V0ZTogJ2ZmZmFmMCcsXG4gIGZvWXN0V0FuOiAnMjI4YjIyJyxcbiAgZnVLc2lhOiAnZmYwMGZmJyxcbiAgZ2FSc2JTbzogJ2RjZGNkYycsXG4gIGdob3N0d0V0ZTogJ2Y4ZjhmZicsXG4gIGdUZDogJ2ZmZDcwMCcsXG4gIGdUTW5QZDogJ2RhYTUyMCcsXG4gIFdheTogJzgwODA4MCcsXG4gIGdZRjogJzgwMDAnLFxuICBnWUZMdzogJ2FkZmYyZicsXG4gIGdZeTogJzgwODA4MCcsXG4gIGhvbmV5TXc6ICdmMGZmZjAnLFxuICBob3RwUms6ICdmZjY5YjQnLFxuICBSZGlhbllkOiAnY2Q1YzVjJyxcbiAgUmRpZ286ICc0YjAwODInLFxuICBpdlN5OiAnZmZmZmYwJyxcbiAga2hha2k6ICdmMGU2OGMnLFxuICBsYXZGTXI6ICdlNmU2ZmEnLFxuICBsYXZGTXJYc2g6ICdmZmYwZjUnLFxuICBsYXduZ1lGOiAnN2NmYzAwJyxcbiAgTm1vbmNFZmZvbjogJ2ZmZmFjZCcsXG4gIFpYZTogJ2FkZDhlNicsXG4gIFpjU086ICdmMDgwODAnLFxuICBaY3lhbjogJ2UwZmZmZicsXG4gIFpnVE1uUGRMdzogJ2ZhZmFkMicsXG4gIFpXYXk6ICdkM2QzZDMnLFxuICBaZ1lGOiAnOTBlZTkwJyxcbiAgWmdZeTogJ2QzZDNkMycsXG4gIFpwUms6ICdmZmI2YzEnLFxuICBac09tb246ICdmZmEwN2EnLFxuICBac0hnWUY6ICcyMGIyYWEnLFxuICBac2t5WGU6ICc4N2NlZmEnLFxuICBaVVdheTogJzc3ODg5OScsXG4gIFpVZ1l5OiAnNzc4ODk5JyxcbiAgWnN0QWxYZTogJ2IwYzRkZScsXG4gIFpMdzogJ2ZmZmZlMCcsXG4gIGxpbWU6ICdmZjAwJyxcbiAgbGltZWdZRjogJzMyY2QzMicsXG4gIGxSRjogJ2ZhZjBlNicsXG4gIG1hZ0Z0YTogJ2ZmMDBmZicsXG4gIG1hUG9uOiAnODAwMDAwJyxcbiAgVmFxdWFtYXJSZTogJzY2Y2RhYScsXG4gIFZYZTogJ2NkJyxcbiAgVlNjRWQ6ICdiYTU1ZDMnLFxuICBWcHVycE46ICc5MzcwZGInLFxuICBWc0hnWUY6ICczY2IzNzEnLFxuICBWVVhlOiAnN2I2OGVlJyxcbiAgVnNwclJnZ1lGOiAnZmE5YScsXG4gIFZRZTogJzQ4ZDFjYycsXG4gIFZ2aVRldFlkOiAnYzcxNTg1JyxcbiAgbWlkbmlnaHRYZTogJzE5MTk3MCcsXG4gIG1SdGNZYW06ICdmNWZmZmEnLFxuICBtaXN0eVBzZTogJ2ZmZTRlMScsXG4gIG1vY2Nhc1I6ICdmZmU0YjUnLFxuICBuYXZham93RXRlOiAnZmZkZWFkJyxcbiAgbmF2eTogJzgwJyxcbiAgVGRsYWNlOiAnZmRmNWU2JyxcbiAgVGl2ZTogJzgwODAwMCcsXG4gIFRpdmVkQmI6ICc2YjhlMjMnLFxuICBTYW5nZTogJ2ZmYTUwMCcsXG4gIFNhbmdlWWQ6ICdmZjQ1MDAnLFxuICBTY0VkOiAnZGE3MGQ2JyxcbiAgcE9lZ1RNblBkOiAnZWVlOGFhJyxcbiAgcE9lZ1lGOiAnOThmYjk4JyxcbiAgcE9lUWU6ICdhZmVlZWUnLFxuICBwT2V2aVRldFlkOiAnZGI3MDkzJyxcbiAgcGFwYXlhd0VwOiAnZmZlZmQ1JyxcbiAgcEhLcHVmZjogJ2ZmZGFiOScsXG4gIHBlcnU6ICdjZDg1M2YnLFxuICBwUms6ICdmZmMwY2InLFxuICBwbHVtOiAnZGRhMGRkJyxcbiAgcG93TXJYZTogJ2IwZTBlNicsXG4gIHB1cnBOOiAnODAwMDgwJyxcbiAgWWJlY2NhcHVycE46ICc2NjMzOTknLFxuICBZZDogJ2ZmMDAwMCcsXG4gIFBzeWJyb3duOiAnYmM4ZjhmJyxcbiAgUHlPWGU6ICc0MTY5ZTEnLFxuICBzYWRkTmJQd246ICc4YjQ1MTMnLFxuICBzT21vbjogJ2ZhODA3MicsXG4gIHNhbmR5YlB3bjogJ2Y0YTQ2MCcsXG4gIHNIZ1lGOiAnMmU4YjU3JyxcbiAgc0hzaGVsbDogJ2ZmZjVlZScsXG4gIHNpRm5hOiAnYTA1MjJkJyxcbiAgc2lsdmVyOiAnYzBjMGMwJyxcbiAgc2t5WGU6ICc4N2NlZWInLFxuICBVWGU6ICc2YTVhY2QnLFxuICBVV2F5OiAnNzA4MDkwJyxcbiAgVWdZeTogJzcwODA5MCcsXG4gIHNub3c6ICdmZmZhZmEnLFxuICBzcHJSZ2dZRjogJ2ZmN2YnLFxuICBzdEFsWGU6ICc0NjgyYjQnLFxuICB0YW46ICdkMmI0OGMnLFxuICB0ZU86ICc4MDgwJyxcbiAgdEVzdE46ICdkOGJmZDgnLFxuICB0b21hdG86ICdmZjYzNDcnLFxuICBRZTogJzQwZTBkMCcsXG4gIHZpVGV0OiAnZWU4MmVlJyxcbiAgSkh0OiAnZjVkZWIzJyxcbiAgd0V0ZTogJ2ZmZmZmZicsXG4gIHdFdGVzbW9rZTogJ2Y1ZjVmNScsXG4gIEx3OiAnZmZmZjAwJyxcbiAgTHdnWUY6ICc5YWNkMzInXG59O1xuZnVuY3Rpb24gdW5wYWNrKCkge1xuICBjb25zdCB1bnBhY2tlZCA9IHt9O1xuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMobmFtZXMkMSk7XG4gIGNvbnN0IHRrZXlzID0gT2JqZWN0LmtleXMobWFwKTtcbiAgbGV0IGksIGosIGssIG9rLCBuaztcbiAgZm9yIChpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICBvayA9IG5rID0ga2V5c1tpXTtcbiAgICBmb3IgKGogPSAwOyBqIDwgdGtleXMubGVuZ3RoOyBqKyspIHtcbiAgICAgIGsgPSB0a2V5c1tqXTtcbiAgICAgIG5rID0gbmsucmVwbGFjZShrLCBtYXBba10pO1xuICAgIH1cbiAgICBrID0gcGFyc2VJbnQobmFtZXMkMVtva10sIDE2KTtcbiAgICB1bnBhY2tlZFtua10gPSBbayA+PiAxNiAmIDB4RkYsIGsgPj4gOCAmIDB4RkYsIGsgJiAweEZGXTtcbiAgfVxuICByZXR1cm4gdW5wYWNrZWQ7XG59XG5sZXQgbmFtZXM7XG5mdW5jdGlvbiBuYW1lUGFyc2Uoc3RyKSB7XG4gIGlmICghbmFtZXMpIHtcbiAgICBuYW1lcyA9IHVucGFjaygpO1xuICAgIG5hbWVzLnRyYW5zcGFyZW50ID0gWzAsIDAsIDAsIDBdO1xuICB9XG4gIGNvbnN0IGEgPSBuYW1lc1tzdHIudG9Mb3dlckNhc2UoKV07XG4gIHJldHVybiBhICYmIHtcbiAgICByOiBhWzBdLFxuICAgIGc6IGFbMV0sXG4gICAgYjogYVsyXSxcbiAgICBhOiBhLmxlbmd0aCA9PT0gNCA/IGFbM10gOiAyNTVcbiAgfTtcbn1cbmNvbnN0IFJHQl9SRSA9IC9ecmdiYT9cXChcXHMqKFstKy5cXGRdKykoJSk/W1xccyxdKyhbLSsuZVxcZF0rKSglKT9bXFxzLF0rKFstKy5lXFxkXSspKCUpPyg/OltcXHMsL10rKFstKy5lXFxkXSspKCUpPyk/XFxzKlxcKSQvO1xuZnVuY3Rpb24gcmdiUGFyc2Uoc3RyKSB7XG4gIGNvbnN0IG0gPSBSR0JfUkUuZXhlYyhzdHIpO1xuICBsZXQgYSA9IDI1NTtcbiAgbGV0IHIsIGcsIGI7XG4gIGlmICghbSkge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAobVs3XSAhPT0gcikge1xuICAgIGNvbnN0IHYgPSArbVs3XTtcbiAgICBhID0gbVs4XSA/IHAyYih2KSA6IGxpbSh2ICogMjU1LCAwLCAyNTUpO1xuICB9XG4gIHIgPSArbVsxXTtcbiAgZyA9ICttWzNdO1xuICBiID0gK21bNV07XG4gIHIgPSAyNTUgJiAobVsyXSA/IHAyYihyKSA6IGxpbShyLCAwLCAyNTUpKTtcbiAgZyA9IDI1NSAmIChtWzRdID8gcDJiKGcpIDogbGltKGcsIDAsIDI1NSkpO1xuICBiID0gMjU1ICYgKG1bNl0gPyBwMmIoYikgOiBsaW0oYiwgMCwgMjU1KSk7XG4gIHJldHVybiB7XG4gICAgcjogcixcbiAgICBnOiBnLFxuICAgIGI6IGIsXG4gICAgYTogYVxuICB9O1xufVxuZnVuY3Rpb24gcmdiU3RyaW5nKHYpIHtcbiAgcmV0dXJuIHYgJiYgKHYuYSA8IDI1NSA/IGByZ2JhKCR7di5yfSwgJHt2Lmd9LCAke3YuYn0sICR7YjJuKHYuYSl9KWAgOiBgcmdiKCR7di5yfSwgJHt2Lmd9LCAke3YuYn0pYCk7XG59XG5jb25zdCB0byA9IHYgPT4gdiA8PSAwLjAwMzEzMDggPyB2ICogMTIuOTIgOiBNYXRoLnBvdyh2LCAxLjAgLyAyLjQpICogMS4wNTUgLSAwLjA1NTtcbmNvbnN0IGZyb20gPSB2ID0+IHYgPD0gMC4wNDA0NSA/IHYgLyAxMi45MiA6IE1hdGgucG93KCh2ICsgMC4wNTUpIC8gMS4wNTUsIDIuNCk7XG5mdW5jdGlvbiBpbnRlcnBvbGF0ZShyZ2IxLCByZ2IyLCB0KSB7XG4gIGNvbnN0IHIgPSBmcm9tKGIybihyZ2IxLnIpKTtcbiAgY29uc3QgZyA9IGZyb20oYjJuKHJnYjEuZykpO1xuICBjb25zdCBiID0gZnJvbShiMm4ocmdiMS5iKSk7XG4gIHJldHVybiB7XG4gICAgcjogbjJiKHRvKHIgKyB0ICogKGZyb20oYjJuKHJnYjIucikpIC0gcikpKSxcbiAgICBnOiBuMmIodG8oZyArIHQgKiAoZnJvbShiMm4ocmdiMi5nKSkgLSBnKSkpLFxuICAgIGI6IG4yYih0byhiICsgdCAqIChmcm9tKGIybihyZ2IyLmIpKSAtIGIpKSksXG4gICAgYTogcmdiMS5hICsgdCAqIChyZ2IyLmEgLSByZ2IxLmEpXG4gIH07XG59XG5mdW5jdGlvbiBtb2RIU0wodiwgaSwgcmF0aW8pIHtcbiAgaWYgKHYpIHtcbiAgICBsZXQgdG1wID0gcmdiMmhzbCh2KTtcbiAgICB0bXBbaV0gPSBNYXRoLm1heCgwLCBNYXRoLm1pbih0bXBbaV0gKyB0bXBbaV0gKiByYXRpbywgaSA9PT0gMCA/IDM2MCA6IDEpKTtcbiAgICB0bXAgPSBoc2wycmdiKHRtcCk7XG4gICAgdi5yID0gdG1wWzBdO1xuICAgIHYuZyA9IHRtcFsxXTtcbiAgICB2LmIgPSB0bXBbMl07XG4gIH1cbn1cbmZ1bmN0aW9uIGNsb25lKHYsIHByb3RvKSB7XG4gIHJldHVybiB2ID8gT2JqZWN0LmFzc2lnbihwcm90byB8fCB7fSwgdikgOiB2O1xufVxuZnVuY3Rpb24gZnJvbU9iamVjdChpbnB1dCkge1xuICB2YXIgdiA9IHtcbiAgICByOiAwLFxuICAgIGc6IDAsXG4gICAgYjogMCxcbiAgICBhOiAyNTVcbiAgfTtcbiAgaWYgKEFycmF5LmlzQXJyYXkoaW5wdXQpKSB7XG4gICAgaWYgKGlucHV0Lmxlbmd0aCA+PSAzKSB7XG4gICAgICB2ID0ge1xuICAgICAgICByOiBpbnB1dFswXSxcbiAgICAgICAgZzogaW5wdXRbMV0sXG4gICAgICAgIGI6IGlucHV0WzJdLFxuICAgICAgICBhOiAyNTVcbiAgICAgIH07XG4gICAgICBpZiAoaW5wdXQubGVuZ3RoID4gMykge1xuICAgICAgICB2LmEgPSBuMmIoaW5wdXRbM10pO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB2ID0gY2xvbmUoaW5wdXQsIHtcbiAgICAgIHI6IDAsXG4gICAgICBnOiAwLFxuICAgICAgYjogMCxcbiAgICAgIGE6IDFcbiAgICB9KTtcbiAgICB2LmEgPSBuMmIodi5hKTtcbiAgfVxuICByZXR1cm4gdjtcbn1cbmZ1bmN0aW9uIGZ1bmN0aW9uUGFyc2Uoc3RyKSB7XG4gIGlmIChzdHIuY2hhckF0KDApID09PSAncicpIHtcbiAgICByZXR1cm4gcmdiUGFyc2Uoc3RyKTtcbiAgfVxuICByZXR1cm4gaHVlUGFyc2Uoc3RyKTtcbn1cbmNsYXNzIENvbG9yIHtcbiAgY29uc3RydWN0b3IoaW5wdXQpIHtcbiAgICBpZiAoaW5wdXQgaW5zdGFuY2VvZiBDb2xvcikge1xuICAgICAgcmV0dXJuIGlucHV0O1xuICAgIH1cbiAgICBjb25zdCB0eXBlID0gdHlwZW9mIGlucHV0O1xuICAgIGxldCB2O1xuICAgIGlmICh0eXBlID09PSAnb2JqZWN0Jykge1xuICAgICAgdiA9IGZyb21PYmplY3QoaW5wdXQpO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHYgPSBoZXhQYXJzZShpbnB1dCkgfHwgbmFtZVBhcnNlKGlucHV0KSB8fCBmdW5jdGlvblBhcnNlKGlucHV0KTtcbiAgICB9XG4gICAgdGhpcy5fcmdiID0gdjtcbiAgICB0aGlzLl92YWxpZCA9ICEhdjtcbiAgfVxuICBnZXQgdmFsaWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbGlkO1xuICB9XG4gIGdldCByZ2IoKSB7XG4gICAgdmFyIHYgPSBjbG9uZSh0aGlzLl9yZ2IpO1xuICAgIGlmICh2KSB7XG4gICAgICB2LmEgPSBiMm4odi5hKTtcbiAgICB9XG4gICAgcmV0dXJuIHY7XG4gIH1cbiAgc2V0IHJnYihvYmopIHtcbiAgICB0aGlzLl9yZ2IgPSBmcm9tT2JqZWN0KG9iaik7XG4gIH1cbiAgcmdiU3RyaW5nKCkge1xuICAgIHJldHVybiB0aGlzLl92YWxpZCA/IHJnYlN0cmluZyh0aGlzLl9yZ2IpIDogdW5kZWZpbmVkO1xuICB9XG4gIGhleFN0cmluZygpIHtcbiAgICByZXR1cm4gdGhpcy5fdmFsaWQgPyBoZXhTdHJpbmcodGhpcy5fcmdiKSA6IHVuZGVmaW5lZDtcbiAgfVxuICBoc2xTdHJpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbGlkID8gaHNsU3RyaW5nKHRoaXMuX3JnYikgOiB1bmRlZmluZWQ7XG4gIH1cbiAgbWl4KGNvbG9yLCB3ZWlnaHQpIHtcbiAgICBpZiAoY29sb3IpIHtcbiAgICAgIGNvbnN0IGMxID0gdGhpcy5yZ2I7XG4gICAgICBjb25zdCBjMiA9IGNvbG9yLnJnYjtcbiAgICAgIGxldCB3MjtcbiAgICAgIGNvbnN0IHAgPSB3ZWlnaHQgPT09IHcyID8gMC41IDogd2VpZ2h0O1xuICAgICAgY29uc3QgdyA9IDIgKiBwIC0gMTtcbiAgICAgIGNvbnN0IGEgPSBjMS5hIC0gYzIuYTtcbiAgICAgIGNvbnN0IHcxID0gKCh3ICogYSA9PT0gLTEgPyB3IDogKHcgKyBhKSAvICgxICsgdyAqIGEpKSArIDEpIC8gMi4wO1xuICAgICAgdzIgPSAxIC0gdzE7XG4gICAgICBjMS5yID0gMHhGRiAmIHcxICogYzEuciArIHcyICogYzIuciArIDAuNTtcbiAgICAgIGMxLmcgPSAweEZGICYgdzEgKiBjMS5nICsgdzIgKiBjMi5nICsgMC41O1xuICAgICAgYzEuYiA9IDB4RkYgJiB3MSAqIGMxLmIgKyB3MiAqIGMyLmIgKyAwLjU7XG4gICAgICBjMS5hID0gcCAqIGMxLmEgKyAoMSAtIHApICogYzIuYTtcbiAgICAgIHRoaXMucmdiID0gYzE7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIGludGVycG9sYXRlKGNvbG9yLCB0KSB7XG4gICAgaWYgKGNvbG9yKSB7XG4gICAgICB0aGlzLl9yZ2IgPSBpbnRlcnBvbGF0ZSh0aGlzLl9yZ2IsIGNvbG9yLl9yZ2IsIHQpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICBjbG9uZSgpIHtcbiAgICByZXR1cm4gbmV3IENvbG9yKHRoaXMucmdiKTtcbiAgfVxuICBhbHBoYShhKSB7XG4gICAgdGhpcy5fcmdiLmEgPSBuMmIoYSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgY2xlYXJlcihyYXRpbykge1xuICAgIGNvbnN0IHJnYiA9IHRoaXMuX3JnYjtcbiAgICByZ2IuYSAqPSAxIC0gcmF0aW87XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgZ3JleXNjYWxlKCkge1xuICAgIGNvbnN0IHJnYiA9IHRoaXMuX3JnYjtcbiAgICBjb25zdCB2YWwgPSByb3VuZChyZ2IuciAqIDAuMyArIHJnYi5nICogMC41OSArIHJnYi5iICogMC4xMSk7XG4gICAgcmdiLnIgPSByZ2IuZyA9IHJnYi5iID0gdmFsO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIG9wYXF1ZXIocmF0aW8pIHtcbiAgICBjb25zdCByZ2IgPSB0aGlzLl9yZ2I7XG4gICAgcmdiLmEgKj0gMSArIHJhdGlvO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIG5lZ2F0ZSgpIHtcbiAgICBjb25zdCB2ID0gdGhpcy5fcmdiO1xuICAgIHYuciA9IDI1NSAtIHYucjtcbiAgICB2LmcgPSAyNTUgLSB2Lmc7XG4gICAgdi5iID0gMjU1IC0gdi5iO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIGxpZ2h0ZW4ocmF0aW8pIHtcbiAgICBtb2RIU0wodGhpcy5fcmdiLCAyLCByYXRpbyk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgZGFya2VuKHJhdGlvKSB7XG4gICAgbW9kSFNMKHRoaXMuX3JnYiwgMiwgLXJhdGlvKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICBzYXR1cmF0ZShyYXRpbykge1xuICAgIG1vZEhTTCh0aGlzLl9yZ2IsIDEsIHJhdGlvKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICBkZXNhdHVyYXRlKHJhdGlvKSB7XG4gICAgbW9kSFNMKHRoaXMuX3JnYiwgMSwgLXJhdGlvKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICByb3RhdGUoZGVnKSB7XG4gICAgcm90YXRlKHRoaXMuX3JnYiwgZGVnKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxufVxuZnVuY3Rpb24gaW5kZXhfZXNtKGlucHV0KSB7XG4gIHJldHVybiBuZXcgQ29sb3IoaW5wdXQpO1xufVxuZXhwb3J0IHsgQ29sb3IsIGIybiwgYjJwLCBpbmRleF9lc20gYXMgZGVmYXVsdCwgaGV4UGFyc2UsIGhleFN0cmluZywgaHNsMnJnYiwgaHNsU3RyaW5nLCBoc3YycmdiLCBodWVQYXJzZSwgaHdiMnJnYiwgbGltLCBuMmIsIG4ycCwgbmFtZVBhcnNlLCBwMmIsIHJnYjJoc2wsIHJnYlBhcnNlLCByZ2JTdHJpbmcsIHJvdGF0ZSwgcm91bmQgfTsiLCIvKiFcbiAqIENoYXJ0LmpzIHY0LjUuMVxuICogaHR0cHM6Ly93d3cuY2hhcnRqcy5vcmdcbiAqIChjKSAyMDI1IENoYXJ0LmpzIENvbnRyaWJ1dG9yc1xuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlXG4gKi9cbmltcG9ydCB7IENvbG9yIH0gZnJvbSAnQGt1cmtsZS9jb2xvcic7XG5cbi8qKlxuICogQG5hbWVzcGFjZSBDaGFydC5oZWxwZXJzXG4gKi8gLyoqXG4gICAgKiBBbiBlbXB0eSBmdW5jdGlvbiB0aGF0IGNhbiBiZSB1c2VkLCBmb3IgZXhhbXBsZSwgZm9yIG9wdGlvbmFsIGNhbGxiYWNrLlxuICAgICovXG5mdW5jdGlvbiBub29wKCkge1xuICAvKiBub29wICovfVxuLyoqXG4gKiBSZXR1cm5zIGEgdW5pcXVlIGlkLCBzZXF1ZW50aWFsbHkgZ2VuZXJhdGVkIGZyb20gYSBnbG9iYWwgdmFyaWFibGUuXG4gKi9cbmNvbnN0IHVpZCA9ICgoKSA9PiB7XG4gIGxldCBpZCA9IDA7XG4gIHJldHVybiAoKSA9PiBpZCsrO1xufSkoKTtcbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIGB2YWx1ZWAgaXMgbmVpdGhlciBudWxsIG5vciB1bmRlZmluZWQsIGVsc2UgcmV0dXJucyBmYWxzZS5cbiAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byB0ZXN0LlxuICogQHNpbmNlIDIuNy4wXG4gKi9cbmZ1bmN0aW9uIGlzTnVsbE9yVW5kZWYodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQ7XG59XG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiBgdmFsdWVgIGlzIGFuIGFycmF5IChpbmNsdWRpbmcgdHlwZWQgYXJyYXlzKSwgZWxzZSByZXR1cm5zIGZhbHNlLlxuICogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbHVlIHRvIHRlc3QuXG4gKiBAZnVuY3Rpb25cbiAqL1xuZnVuY3Rpb24gaXNBcnJheSh2YWx1ZSkge1xuICBpZiAoQXJyYXkuaXNBcnJheSAmJiBBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGNvbnN0IHR5cGUgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpO1xuICBpZiAodHlwZS5zbGljZSgwLCA3KSA9PT0gJ1tvYmplY3QnICYmIHR5cGUuc2xpY2UoLTYpID09PSAnQXJyYXldJykge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIGB2YWx1ZWAgaXMgYW4gb2JqZWN0IChleGNsdWRpbmcgbnVsbCksIGVsc2UgcmV0dXJucyBmYWxzZS5cbiAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byB0ZXN0LlxuICogQHNpbmNlIDIuNy4wXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0KHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPT0gbnVsbCAmJiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpID09PSAnW29iamVjdCBPYmplY3RdJztcbn1cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIGB2YWx1ZWAgaXMgYSBmaW5pdGUgbnVtYmVyLCBlbHNlIHJldHVybnMgZmFsc2VcbiAqIEBwYXJhbSB2YWx1ZSAgLSBUaGUgdmFsdWUgdG8gdGVzdC5cbiAqL1xuZnVuY3Rpb24gaXNOdW1iZXJGaW5pdGUodmFsdWUpIHtcbiAgcmV0dXJuICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInIHx8IHZhbHVlIGluc3RhbmNlb2YgTnVtYmVyKSAmJiBpc0Zpbml0ZSgrdmFsdWUpO1xufVxuLyoqXG4gKiBSZXR1cm5zIGB2YWx1ZWAgaWYgZmluaXRlLCBlbHNlIHJldHVybnMgYGRlZmF1bHRWYWx1ZWAuXG4gKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gcmV0dXJuIGlmIGRlZmluZWQuXG4gKiBAcGFyYW0gZGVmYXVsdFZhbHVlIC0gVGhlIHZhbHVlIHRvIHJldHVybiBpZiBgdmFsdWVgIGlzIG5vdCBmaW5pdGUuXG4gKi9cbmZ1bmN0aW9uIGZpbml0ZU9yRGVmYXVsdCh2YWx1ZSwgZGVmYXVsdFZhbHVlKSB7XG4gIHJldHVybiBpc051bWJlckZpbml0ZSh2YWx1ZSkgPyB2YWx1ZSA6IGRlZmF1bHRWYWx1ZTtcbn1cbi8qKlxuICogUmV0dXJucyBgdmFsdWVgIGlmIGRlZmluZWQsIGVsc2UgcmV0dXJucyBgZGVmYXVsdFZhbHVlYC5cbiAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byByZXR1cm4gaWYgZGVmaW5lZC5cbiAqIEBwYXJhbSBkZWZhdWx0VmFsdWUgLSBUaGUgdmFsdWUgdG8gcmV0dXJuIGlmIGB2YWx1ZWAgaXMgdW5kZWZpbmVkLlxuICovXG5mdW5jdGlvbiB2YWx1ZU9yRGVmYXVsdCh2YWx1ZSwgZGVmYXVsdFZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnID8gZGVmYXVsdFZhbHVlIDogdmFsdWU7XG59XG5jb25zdCB0b1BlcmNlbnRhZ2UgPSAodmFsdWUsIGRpbWVuc2lvbikgPT4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiB2YWx1ZS5lbmRzV2l0aCgnJScpID8gcGFyc2VGbG9hdCh2YWx1ZSkgLyAxMDAgOiArdmFsdWUgLyBkaW1lbnNpb247XG5jb25zdCB0b0RpbWVuc2lvbiA9ICh2YWx1ZSwgZGltZW5zaW9uKSA9PiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHZhbHVlLmVuZHNXaXRoKCclJykgPyBwYXJzZUZsb2F0KHZhbHVlKSAvIDEwMCAqIGRpbWVuc2lvbiA6ICt2YWx1ZTtcbi8qKlxuICogQ2FsbHMgYGZuYCB3aXRoIHRoZSBnaXZlbiBgYXJnc2AgaW4gdGhlIHNjb3BlIGRlZmluZWQgYnkgYHRoaXNBcmdgIGFuZCByZXR1cm5zIHRoZVxuICogdmFsdWUgcmV0dXJuZWQgYnkgYGZuYC4gSWYgYGZuYCBpcyBub3QgYSBmdW5jdGlvbiwgdGhpcyBtZXRob2QgcmV0dXJucyB1bmRlZmluZWQuXG4gKiBAcGFyYW0gZm4gLSBUaGUgZnVuY3Rpb24gdG8gY2FsbC5cbiAqIEBwYXJhbSBhcmdzIC0gVGhlIGFyZ3VtZW50cyB3aXRoIHdoaWNoIGBmbmAgc2hvdWxkIGJlIGNhbGxlZC5cbiAqIEBwYXJhbSBbdGhpc0FyZ10gLSBUaGUgdmFsdWUgb2YgYHRoaXNgIHByb3ZpZGVkIGZvciB0aGUgY2FsbCB0byBgZm5gLlxuICovXG5mdW5jdGlvbiBjYWxsYmFjayhmbiwgYXJncywgdGhpc0FyZykge1xuICBpZiAoZm4gJiYgdHlwZW9mIGZuLmNhbGwgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gZm4uYXBwbHkodGhpc0FyZywgYXJncyk7XG4gIH1cbn1cbmZ1bmN0aW9uIGVhY2gobG9vcGFibGUsIGZuLCB0aGlzQXJnLCByZXZlcnNlKSB7XG4gIGxldCBpLCBsZW4sIGtleXM7XG4gIGlmIChpc0FycmF5KGxvb3BhYmxlKSkge1xuICAgIGxlbiA9IGxvb3BhYmxlLmxlbmd0aDtcbiAgICBpZiAocmV2ZXJzZSkge1xuICAgICAgZm9yIChpID0gbGVuIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgZm4uY2FsbCh0aGlzQXJnLCBsb29wYWJsZVtpXSwgaSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBmbi5jYWxsKHRoaXNBcmcsIGxvb3BhYmxlW2ldLCBpKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSBpZiAoaXNPYmplY3QobG9vcGFibGUpKSB7XG4gICAga2V5cyA9IE9iamVjdC5rZXlzKGxvb3BhYmxlKTtcbiAgICBsZW4gPSBrZXlzLmxlbmd0aDtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGZuLmNhbGwodGhpc0FyZywgbG9vcGFibGVba2V5c1tpXV0sIGtleXNbaV0pO1xuICAgIH1cbiAgfVxufVxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGBhMGAgYW5kIGBhMWAgYXJyYXlzIGhhdmUgdGhlIHNhbWUgY29udGVudCwgZWxzZSByZXR1cm5zIGZhbHNlLlxuICogQHBhcmFtIGEwIC0gVGhlIGFycmF5IHRvIGNvbXBhcmVcbiAqIEBwYXJhbSBhMSAtIFRoZSBhcnJheSB0byBjb21wYXJlXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBfZWxlbWVudHNFcXVhbChhMCwgYTEpIHtcbiAgbGV0IGksIGlsZW4sIHYwLCB2MTtcbiAgaWYgKCFhMCB8fCAhYTEgfHwgYTAubGVuZ3RoICE9PSBhMS5sZW5ndGgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgZm9yIChpID0gMCwgaWxlbiA9IGEwLmxlbmd0aDsgaSA8IGlsZW47ICsraSkge1xuICAgIHYwID0gYTBbaV07XG4gICAgdjEgPSBhMVtpXTtcbiAgICBpZiAodjAuZGF0YXNldEluZGV4ICE9PSB2MS5kYXRhc2V0SW5kZXggfHwgdjAuaW5kZXggIT09IHYxLmluZGV4KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlO1xufVxuLyoqXG4gKiBSZXR1cm5zIGEgZGVlcCBjb3B5IG9mIGBzb3VyY2VgIHdpdGhvdXQga2VlcGluZyByZWZlcmVuY2VzIG9uIG9iamVjdHMgYW5kIGFycmF5cy5cbiAqIEBwYXJhbSBzb3VyY2UgLSBUaGUgdmFsdWUgdG8gY2xvbmUuXG4gKi9cbmZ1bmN0aW9uIGNsb25lKHNvdXJjZSkge1xuICBpZiAoaXNBcnJheShzb3VyY2UpKSB7XG4gICAgcmV0dXJuIHNvdXJjZS5tYXAoY2xvbmUpO1xuICB9XG4gIGlmIChpc09iamVjdChzb3VyY2UpKSB7XG4gICAgY29uc3QgdGFyZ2V0ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTtcbiAgICBjb25zdCBrbGVuID0ga2V5cy5sZW5ndGg7XG4gICAgbGV0IGsgPSAwO1xuICAgIGZvciAoOyBrIDwga2xlbjsgKytrKSB7XG4gICAgICB0YXJnZXRba2V5c1trXV0gPSBjbG9uZShzb3VyY2Vba2V5c1trXV0pO1xuICAgIH1cbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9XG4gIHJldHVybiBzb3VyY2U7XG59XG5mdW5jdGlvbiBpc1ZhbGlkS2V5KGtleSkge1xuICByZXR1cm4gWydfX3Byb3RvX18nLCAncHJvdG90eXBlJywgJ2NvbnN0cnVjdG9yJ10uaW5kZXhPZihrZXkpID09PSAtMTtcbn1cbi8qKlxuICogVGhlIGRlZmF1bHQgbWVyZ2VyIHdoZW4gQ2hhcnQuaGVscGVycy5tZXJnZSBpcyBjYWxsZWQgd2l0aG91dCBtZXJnZXIgb3B0aW9uLlxuICogTm90ZShTQik6IGFsc28gdXNlZCBieSBtZXJnZUNvbmZpZyBhbmQgbWVyZ2VTY2FsZUNvbmZpZyBhcyBmYWxsYmFjay5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIF9tZXJnZXIoa2V5LCB0YXJnZXQsIHNvdXJjZSwgb3B0aW9ucykge1xuICBpZiAoIWlzVmFsaWRLZXkoa2V5KSkge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCB0dmFsID0gdGFyZ2V0W2tleV07XG4gIGNvbnN0IHN2YWwgPSBzb3VyY2Vba2V5XTtcbiAgaWYgKGlzT2JqZWN0KHR2YWwpICYmIGlzT2JqZWN0KHN2YWwpKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11c2UtYmVmb3JlLWRlZmluZVxuICAgIG1lcmdlKHR2YWwsIHN2YWwsIG9wdGlvbnMpO1xuICB9IGVsc2Uge1xuICAgIHRhcmdldFtrZXldID0gY2xvbmUoc3ZhbCk7XG4gIH1cbn1cbmZ1bmN0aW9uIG1lcmdlKHRhcmdldCwgc291cmNlLCBvcHRpb25zKSB7XG4gIGNvbnN0IHNvdXJjZXMgPSBpc0FycmF5KHNvdXJjZSkgPyBzb3VyY2UgOiBbc291cmNlXTtcbiAgY29uc3QgaWxlbiA9IHNvdXJjZXMubGVuZ3RoO1xuICBpZiAoIWlzT2JqZWN0KHRhcmdldCkpIHtcbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICBjb25zdCBtZXJnZXIgPSBvcHRpb25zLm1lcmdlciB8fCBfbWVyZ2VyO1xuICBsZXQgY3VycmVudDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbGVuOyArK2kpIHtcbiAgICBjdXJyZW50ID0gc291cmNlc1tpXTtcbiAgICBpZiAoIWlzT2JqZWN0KGN1cnJlbnQpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGN1cnJlbnQpO1xuICAgIGZvciAobGV0IGsgPSAwLCBrbGVuID0ga2V5cy5sZW5ndGg7IGsgPCBrbGVuOyArK2spIHtcbiAgICAgIG1lcmdlcihrZXlzW2tdLCB0YXJnZXQsIGN1cnJlbnQsIG9wdGlvbnMpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdGFyZ2V0O1xufVxuZnVuY3Rpb24gbWVyZ2VJZih0YXJnZXQsIHNvdXJjZSkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVzZS1iZWZvcmUtZGVmaW5lXG4gIHJldHVybiBtZXJnZSh0YXJnZXQsIHNvdXJjZSwge1xuICAgIG1lcmdlcjogX21lcmdlcklmXG4gIH0pO1xufVxuLyoqXG4gKiBNZXJnZXMgc291cmNlW2tleV0gaW4gdGFyZ2V0W2tleV0gb25seSBpZiB0YXJnZXRba2V5XSBpcyB1bmRlZmluZWQuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBfbWVyZ2VySWYoa2V5LCB0YXJnZXQsIHNvdXJjZSkge1xuICBpZiAoIWlzVmFsaWRLZXkoa2V5KSkge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCB0dmFsID0gdGFyZ2V0W2tleV07XG4gIGNvbnN0IHN2YWwgPSBzb3VyY2Vba2V5XTtcbiAgaWYgKGlzT2JqZWN0KHR2YWwpICYmIGlzT2JqZWN0KHN2YWwpKSB7XG4gICAgbWVyZ2VJZih0dmFsLCBzdmFsKTtcbiAgfSBlbHNlIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRhcmdldCwga2V5KSkge1xuICAgIHRhcmdldFtrZXldID0gY2xvbmUoc3ZhbCk7XG4gIH1cbn1cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gX2RlcHJlY2F0ZWQoc2NvcGUsIHZhbHVlLCBwcmV2aW91cywgY3VycmVudCkge1xuICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgIGNvbnNvbGUud2FybihzY29wZSArICc6IFwiJyArIHByZXZpb3VzICsgJ1wiIGlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgXCInICsgY3VycmVudCArICdcIiBpbnN0ZWFkJyk7XG4gIH1cbn1cbi8vIHJlc29sdmVPYmplY3RLZXkgcmVzb2x2ZXIgY2FjaGVcbmNvbnN0IGtleVJlc29sdmVycyA9IHtcbiAgLy8gQ2hhcnQuaGVscGVycy5jb3JlIHJlc29sdmVPYmplY3RLZXkgc2hvdWxkIHJlc29sdmUgZW1wdHkga2V5IHRvIHJvb3Qgb2JqZWN0XG4gICcnOiB2ID0+IHYsXG4gIC8vIGRlZmF1bHQgcmVzb2x2ZXJzXG4gIHg6IG8gPT4gby54LFxuICB5OiBvID0+IG8ueVxufTtcbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gX3NwbGl0S2V5KGtleSkge1xuICBjb25zdCBwYXJ0cyA9IGtleS5zcGxpdCgnLicpO1xuICBjb25zdCBrZXlzID0gW107XG4gIGxldCB0bXAgPSAnJztcbiAgZm9yIChjb25zdCBwYXJ0IG9mIHBhcnRzKSB7XG4gICAgdG1wICs9IHBhcnQ7XG4gICAgaWYgKHRtcC5lbmRzV2l0aCgnXFxcXCcpKSB7XG4gICAgICB0bXAgPSB0bXAuc2xpY2UoMCwgLTEpICsgJy4nO1xuICAgIH0gZWxzZSB7XG4gICAgICBrZXlzLnB1c2godG1wKTtcbiAgICAgIHRtcCA9ICcnO1xuICAgIH1cbiAgfVxuICByZXR1cm4ga2V5cztcbn1cbmZ1bmN0aW9uIF9nZXRLZXlSZXNvbHZlcihrZXkpIHtcbiAgY29uc3Qga2V5cyA9IF9zcGxpdEtleShrZXkpO1xuICByZXR1cm4gb2JqID0+IHtcbiAgICBmb3IgKGNvbnN0IGsgb2Yga2V5cykge1xuICAgICAgaWYgKGsgPT09ICcnKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgb2JqID0gb2JqICYmIG9ialtrXTtcbiAgICB9XG4gICAgcmV0dXJuIG9iajtcbiAgfTtcbn1cbmZ1bmN0aW9uIHJlc29sdmVPYmplY3RLZXkob2JqLCBrZXkpIHtcbiAgY29uc3QgcmVzb2x2ZXIgPSBrZXlSZXNvbHZlcnNba2V5XSB8fCAoa2V5UmVzb2x2ZXJzW2tleV0gPSBfZ2V0S2V5UmVzb2x2ZXIoa2V5KSk7XG4gIHJldHVybiByZXNvbHZlcihvYmopO1xufVxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBfY2FwaXRhbGl6ZShzdHIpIHtcbiAgcmV0dXJuIHN0ci5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHN0ci5zbGljZSgxKTtcbn1cbmNvbnN0IGRlZmluZWQgPSB2YWx1ZSA9PiB0eXBlb2YgdmFsdWUgIT09ICd1bmRlZmluZWQnO1xuY29uc3QgaXNGdW5jdGlvbiA9IHZhbHVlID0+IHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJztcbi8vIEFkYXB0ZWQgZnJvbSBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8zMTEyODg1NS9jb21wYXJpbmctZWNtYTYtc2V0cy1mb3ItZXF1YWxpdHkjMzExMjkzODRcbmNvbnN0IHNldHNFcXVhbCA9IChhLCBiKSA9PiB7XG4gIGlmIChhLnNpemUgIT09IGIuc2l6ZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBmb3IgKGNvbnN0IGl0ZW0gb2YgYSkge1xuICAgIGlmICghYi5oYXMoaXRlbSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59O1xuLyoqXG4gKiBAcGFyYW0gZSAtIFRoZSBldmVudFxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gX2lzQ2xpY2tFdmVudChlKSB7XG4gIHJldHVybiBlLnR5cGUgPT09ICdtb3VzZXVwJyB8fCBlLnR5cGUgPT09ICdjbGljaycgfHwgZS50eXBlID09PSAnY29udGV4dG1lbnUnO1xufVxuXG4vKipcbiAqIEBhbGlhcyBDaGFydC5oZWxwZXJzLm1hdGhcbiAqIEBuYW1lc3BhY2VcbiAqL1xuY29uc3QgUEkgPSBNYXRoLlBJO1xuY29uc3QgVEFVID0gMiAqIFBJO1xuY29uc3QgUElUQVUgPSBUQVUgKyBQSTtcbmNvbnN0IElORklOSVRZID0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO1xuY29uc3QgUkFEX1BFUl9ERUcgPSBQSSAvIDE4MDtcbmNvbnN0IEhBTEZfUEkgPSBQSSAvIDI7XG5jb25zdCBRVUFSVEVSX1BJID0gUEkgLyA0O1xuY29uc3QgVFdPX1RISVJEU19QSSA9IFBJICogMiAvIDM7XG5jb25zdCBsb2cxMCA9IE1hdGgubG9nMTA7XG5jb25zdCBzaWduID0gTWF0aC5zaWduO1xuZnVuY3Rpb24gYWxtb3N0RXF1YWxzKHgsIHksIGVwc2lsb24pIHtcbiAgcmV0dXJuIE1hdGguYWJzKHggLSB5KSA8IGVwc2lsb247XG59XG4vKipcbiAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBuaWNlIG51bWJlciBhbGdvcml0aG0gdXNlZCBpbiBkZXRlcm1pbmluZyB3aGVyZSBheGlzIGxhYmVscyB3aWxsIGdvXG4gKi9cbmZ1bmN0aW9uIG5pY2VOdW0ocmFuZ2UpIHtcbiAgY29uc3Qgcm91bmRlZFJhbmdlID0gTWF0aC5yb3VuZChyYW5nZSk7XG4gIHJhbmdlID0gYWxtb3N0RXF1YWxzKHJhbmdlLCByb3VuZGVkUmFuZ2UsIHJhbmdlIC8gMTAwMCkgPyByb3VuZGVkUmFuZ2UgOiByYW5nZTtcbiAgY29uc3QgbmljZVJhbmdlID0gTWF0aC5wb3coMTAsIE1hdGguZmxvb3IobG9nMTAocmFuZ2UpKSk7XG4gIGNvbnN0IGZyYWN0aW9uID0gcmFuZ2UgLyBuaWNlUmFuZ2U7XG4gIGNvbnN0IG5pY2VGcmFjdGlvbiA9IGZyYWN0aW9uIDw9IDEgPyAxIDogZnJhY3Rpb24gPD0gMiA/IDIgOiBmcmFjdGlvbiA8PSA1ID8gNSA6IDEwO1xuICByZXR1cm4gbmljZUZyYWN0aW9uICogbmljZVJhbmdlO1xufVxuLyoqXG4gKiBSZXR1cm5zIGFuIGFycmF5IG9mIGZhY3RvcnMgc29ydGVkIGZyb20gMSB0byBzcXJ0KHZhbHVlKVxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gX2ZhY3Rvcml6ZSh2YWx1ZSkge1xuICBjb25zdCByZXN1bHQgPSBbXTtcbiAgY29uc3Qgc3FydCA9IE1hdGguc3FydCh2YWx1ZSk7XG4gIGxldCBpO1xuICBmb3IgKGkgPSAxOyBpIDwgc3FydDsgaSsrKSB7XG4gICAgaWYgKHZhbHVlICUgaSA9PT0gMCkge1xuICAgICAgcmVzdWx0LnB1c2goaSk7XG4gICAgICByZXN1bHQucHVzaCh2YWx1ZSAvIGkpO1xuICAgIH1cbiAgfVxuICBpZiAoc3FydCA9PT0gKHNxcnQgfCAwKSkge1xuICAgIHJlc3VsdC5wdXNoKHNxcnQpO1xuICB9XG4gIHJlc3VsdC5zb3J0KChhLCBiKSA9PiBhIC0gYikucG9wKCk7XG4gIHJldHVybiByZXN1bHQ7XG59XG4vKipcbiAqIFZlcmlmaWVzIHRoYXQgYXR0ZW1wdGluZyB0byBjb2VyY2UgbiB0byBzdHJpbmcgb3IgbnVtYmVyIHdvbid0IHRocm93IGEgVHlwZUVycm9yLlxuICovXG5mdW5jdGlvbiBpc05vblByaW1pdGl2ZShuKSB7XG4gIHJldHVybiB0eXBlb2YgbiA9PT0gJ3N5bWJvbCcgfHwgdHlwZW9mIG4gPT09ICdvYmplY3QnICYmIG4gIT09IG51bGwgJiYgIShTeW1ib2wudG9QcmltaXRpdmUgaW4gbiB8fCAndG9TdHJpbmcnIGluIG4gfHwgJ3ZhbHVlT2YnIGluIG4pO1xufVxuZnVuY3Rpb24gaXNOdW1iZXIobikge1xuICByZXR1cm4gIWlzTm9uUHJpbWl0aXZlKG4pICYmICFpc05hTihwYXJzZUZsb2F0KG4pKSAmJiBpc0Zpbml0ZShuKTtcbn1cbmZ1bmN0aW9uIGFsbW9zdFdob2xlKHgsIGVwc2lsb24pIHtcbiAgY29uc3Qgcm91bmRlZCA9IE1hdGgucm91bmQoeCk7XG4gIHJldHVybiByb3VuZGVkIC0gZXBzaWxvbiA8PSB4ICYmIHJvdW5kZWQgKyBlcHNpbG9uID49IHg7XG59XG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIF9zZXRNaW5BbmRNYXhCeUtleShhcnJheSwgdGFyZ2V0LCBwcm9wZXJ0eSkge1xuICBsZXQgaSwgaWxlbiwgdmFsdWU7XG4gIGZvciAoaSA9IDAsIGlsZW4gPSBhcnJheS5sZW5ndGg7IGkgPCBpbGVuOyBpKyspIHtcbiAgICB2YWx1ZSA9IGFycmF5W2ldW3Byb3BlcnR5XTtcbiAgICBpZiAoIWlzTmFOKHZhbHVlKSkge1xuICAgICAgdGFyZ2V0Lm1pbiA9IE1hdGgubWluKHRhcmdldC5taW4sIHZhbHVlKTtcbiAgICAgIHRhcmdldC5tYXggPSBNYXRoLm1heCh0YXJnZXQubWF4LCB2YWx1ZSk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiB0b1JhZGlhbnMoZGVncmVlcykge1xuICByZXR1cm4gZGVncmVlcyAqIChQSSAvIDE4MCk7XG59XG5mdW5jdGlvbiB0b0RlZ3JlZXMocmFkaWFucykge1xuICByZXR1cm4gcmFkaWFucyAqICgxODAgLyBQSSk7XG59XG4vKipcbiAqIFJldHVybnMgdGhlIG51bWJlciBvZiBkZWNpbWFsIHBsYWNlc1xuICogaS5lLiB0aGUgbnVtYmVyIG9mIGRpZ2l0cyBhZnRlciB0aGUgZGVjaW1hbCBwb2ludCwgb2YgdGhlIHZhbHVlIG9mIHRoaXMgTnVtYmVyLlxuICogQHBhcmFtIHggLSBBIG51bWJlci5cbiAqIEByZXR1cm5zIFRoZSBudW1iZXIgb2YgZGVjaW1hbCBwbGFjZXMuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBfZGVjaW1hbFBsYWNlcyh4KSB7XG4gIGlmICghaXNOdW1iZXJGaW5pdGUoeCkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgbGV0IGUgPSAxO1xuICBsZXQgcCA9IDA7XG4gIHdoaWxlIChNYXRoLnJvdW5kKHggKiBlKSAvIGUgIT09IHgpIHtcbiAgICBlICo9IDEwO1xuICAgIHArKztcbiAgfVxuICByZXR1cm4gcDtcbn1cbi8vIEdldHMgdGhlIGFuZ2xlIGZyb20gdmVydGljYWwgdXByaWdodCB0byB0aGUgcG9pbnQgYWJvdXQgYSBjZW50cmUuXG5mdW5jdGlvbiBnZXRBbmdsZUZyb21Qb2ludChjZW50cmVQb2ludCwgYW5nbGVQb2ludCkge1xuICBjb25zdCBkaXN0YW5jZUZyb21YQ2VudGVyID0gYW5nbGVQb2ludC54IC0gY2VudHJlUG9pbnQueDtcbiAgY29uc3QgZGlzdGFuY2VGcm9tWUNlbnRlciA9IGFuZ2xlUG9pbnQueSAtIGNlbnRyZVBvaW50Lnk7XG4gIGNvbnN0IHJhZGlhbERpc3RhbmNlRnJvbUNlbnRlciA9IE1hdGguc3FydChkaXN0YW5jZUZyb21YQ2VudGVyICogZGlzdGFuY2VGcm9tWENlbnRlciArIGRpc3RhbmNlRnJvbVlDZW50ZXIgKiBkaXN0YW5jZUZyb21ZQ2VudGVyKTtcbiAgbGV0IGFuZ2xlID0gTWF0aC5hdGFuMihkaXN0YW5jZUZyb21ZQ2VudGVyLCBkaXN0YW5jZUZyb21YQ2VudGVyKTtcbiAgaWYgKGFuZ2xlIDwgLTAuNSAqIFBJKSB7XG4gICAgYW5nbGUgKz0gVEFVOyAvLyBtYWtlIHN1cmUgdGhlIHJldHVybmVkIGFuZ2xlIGlzIGluIHRoZSByYW5nZSBvZiAoLVBJLzIsIDNQSS8yXVxuICB9XG4gIHJldHVybiB7XG4gICAgYW5nbGUsXG4gICAgZGlzdGFuY2U6IHJhZGlhbERpc3RhbmNlRnJvbUNlbnRlclxuICB9O1xufVxuZnVuY3Rpb24gZGlzdGFuY2VCZXR3ZWVuUG9pbnRzKHB0MSwgcHQyKSB7XG4gIHJldHVybiBNYXRoLnNxcnQoTWF0aC5wb3cocHQyLnggLSBwdDEueCwgMikgKyBNYXRoLnBvdyhwdDIueSAtIHB0MS55LCAyKSk7XG59XG4vKipcbiAqIFNob3J0ZXN0IGRpc3RhbmNlIGJldHdlZW4gYW5nbGVzLCBpbiBlaXRoZXIgZGlyZWN0aW9uLlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gX2FuZ2xlRGlmZihhLCBiKSB7XG4gIHJldHVybiAoYSAtIGIgKyBQSVRBVSkgJSBUQVUgLSBQSTtcbn1cbi8qKlxuICogTm9ybWFsaXplIGFuZ2xlIHRvIGJlIGJldHdlZW4gMCBhbmQgMipQSVxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gX25vcm1hbGl6ZUFuZ2xlKGEpIHtcbiAgcmV0dXJuIChhICUgVEFVICsgVEFVKSAlIFRBVTtcbn1cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gX2FuZ2xlQmV0d2VlbihhbmdsZSwgc3RhcnQsIGVuZCwgc2FtZUFuZ2xlSXNGdWxsQ2lyY2xlKSB7XG4gIGNvbnN0IGEgPSBfbm9ybWFsaXplQW5nbGUoYW5nbGUpO1xuICBjb25zdCBzID0gX25vcm1hbGl6ZUFuZ2xlKHN0YXJ0KTtcbiAgY29uc3QgZSA9IF9ub3JtYWxpemVBbmdsZShlbmQpO1xuICBjb25zdCBhbmdsZVRvU3RhcnQgPSBfbm9ybWFsaXplQW5nbGUocyAtIGEpO1xuICBjb25zdCBhbmdsZVRvRW5kID0gX25vcm1hbGl6ZUFuZ2xlKGUgLSBhKTtcbiAgY29uc3Qgc3RhcnRUb0FuZ2xlID0gX25vcm1hbGl6ZUFuZ2xlKGEgLSBzKTtcbiAgY29uc3QgZW5kVG9BbmdsZSA9IF9ub3JtYWxpemVBbmdsZShhIC0gZSk7XG4gIHJldHVybiBhID09PSBzIHx8IGEgPT09IGUgfHwgc2FtZUFuZ2xlSXNGdWxsQ2lyY2xlICYmIHMgPT09IGUgfHwgYW5nbGVUb1N0YXJ0ID4gYW5nbGVUb0VuZCAmJiBzdGFydFRvQW5nbGUgPCBlbmRUb0FuZ2xlO1xufVxuLyoqXG4gKiBMaW1pdCBgdmFsdWVgIGJldHdlZW4gYG1pbmAgYW5kIGBtYXhgXG4gKiBAcGFyYW0gdmFsdWVcbiAqIEBwYXJhbSBtaW5cbiAqIEBwYXJhbSBtYXhcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIF9saW1pdFZhbHVlKHZhbHVlLCBtaW4sIG1heCkge1xuICByZXR1cm4gTWF0aC5tYXgobWluLCBNYXRoLm1pbihtYXgsIHZhbHVlKSk7XG59XG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gX2ludDE2UmFuZ2UodmFsdWUpIHtcbiAgcmV0dXJuIF9saW1pdFZhbHVlKHZhbHVlLCAtMzI3NjgsIDMyNzY3KTtcbn1cbi8qKlxuICogQHBhcmFtIHZhbHVlXG4gKiBAcGFyYW0gc3RhcnRcbiAqIEBwYXJhbSBlbmRcbiAqIEBwYXJhbSBbZXBzaWxvbl1cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIF9pc0JldHdlZW4odmFsdWUsIHN0YXJ0LCBlbmQsIGVwc2lsb24gPSAxZS02KSB7XG4gIHJldHVybiB2YWx1ZSA+PSBNYXRoLm1pbihzdGFydCwgZW5kKSAtIGVwc2lsb24gJiYgdmFsdWUgPD0gTWF0aC5tYXgoc3RhcnQsIGVuZCkgKyBlcHNpbG9uO1xufVxuZnVuY3Rpb24gX2xvb2t1cCh0YWJsZSwgdmFsdWUsIGNtcCkge1xuICBjbXAgPSBjbXAgfHwgKGluZGV4ID0+IHRhYmxlW2luZGV4XSA8IHZhbHVlKTtcbiAgbGV0IGhpID0gdGFibGUubGVuZ3RoIC0gMTtcbiAgbGV0IGxvID0gMDtcbiAgbGV0IG1pZDtcbiAgd2hpbGUgKGhpIC0gbG8gPiAxKSB7XG4gICAgbWlkID0gbG8gKyBoaSA+PiAxO1xuICAgIGlmIChjbXAobWlkKSkge1xuICAgICAgbG8gPSBtaWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGhpID0gbWlkO1xuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIGxvLFxuICAgIGhpXG4gIH07XG59XG4vKipcbiAqIEJpbmFyeSBzZWFyY2hcbiAqIEBwYXJhbSB0YWJsZSAtIHRoZSB0YWJsZSBzZWFyY2guIG11c3QgYmUgc29ydGVkIVxuICogQHBhcmFtIGtleSAtIHByb3BlcnR5IG5hbWUgZm9yIHRoZSB2YWx1ZSBpbiBlYWNoIGVudHJ5XG4gKiBAcGFyYW0gdmFsdWUgLSB2YWx1ZSB0byBmaW5kXG4gKiBAcGFyYW0gbGFzdCAtIGxvb2t1cCBsYXN0IGluZGV4XG4gKiBAcHJpdmF0ZVxuICovXG5jb25zdCBfbG9va3VwQnlLZXkgPSAodGFibGUsIGtleSwgdmFsdWUsIGxhc3QpID0+IF9sb29rdXAodGFibGUsIHZhbHVlLCBsYXN0ID8gaW5kZXggPT4ge1xuICBjb25zdCB0aSA9IHRhYmxlW2luZGV4XVtrZXldO1xuICByZXR1cm4gdGkgPCB2YWx1ZSB8fCB0aSA9PT0gdmFsdWUgJiYgdGFibGVbaW5kZXggKyAxXVtrZXldID09PSB2YWx1ZTtcbn0gOiBpbmRleCA9PiB0YWJsZVtpbmRleF1ba2V5XSA8IHZhbHVlKTtcbi8qKlxuICogUmV2ZXJzZSBiaW5hcnkgc2VhcmNoXG4gKiBAcGFyYW0gdGFibGUgLSB0aGUgdGFibGUgc2VhcmNoLiBtdXN0IGJlIHNvcnRlZCFcbiAqIEBwYXJhbSBrZXkgLSBwcm9wZXJ0eSBuYW1lIGZvciB0aGUgdmFsdWUgaW4gZWFjaCBlbnRyeVxuICogQHBhcmFtIHZhbHVlIC0gdmFsdWUgdG8gZmluZFxuICogQHByaXZhdGVcbiAqL1xuY29uc3QgX3Jsb29rdXBCeUtleSA9ICh0YWJsZSwga2V5LCB2YWx1ZSkgPT4gX2xvb2t1cCh0YWJsZSwgdmFsdWUsIGluZGV4ID0+IHRhYmxlW2luZGV4XVtrZXldID49IHZhbHVlKTtcbi8qKlxuICogUmV0dXJuIHN1YnNldCBvZiBgdmFsdWVzYCBiZXR3ZWVuIGBtaW5gIGFuZCBgbWF4YCBpbmNsdXNpdmUuXG4gKiBWYWx1ZXMgYXJlIGFzc3VtZWQgdG8gYmUgaW4gc29ydGVkIG9yZGVyLlxuICogQHBhcmFtIHZhbHVlcyAtIHNvcnRlZCBhcnJheSBvZiB2YWx1ZXNcbiAqIEBwYXJhbSBtaW4gLSBtaW4gdmFsdWVcbiAqIEBwYXJhbSBtYXggLSBtYXggdmFsdWVcbiAqL1xuZnVuY3Rpb24gX2ZpbHRlckJldHdlZW4odmFsdWVzLCBtaW4sIG1heCkge1xuICBsZXQgc3RhcnQgPSAwO1xuICBsZXQgZW5kID0gdmFsdWVzLmxlbmd0aDtcbiAgd2hpbGUgKHN0YXJ0IDwgZW5kICYmIHZhbHVlc1tzdGFydF0gPCBtaW4pIHtcbiAgICBzdGFydCsrO1xuICB9XG4gIHdoaWxlIChlbmQgPiBzdGFydCAmJiB2YWx1ZXNbZW5kIC0gMV0gPiBtYXgpIHtcbiAgICBlbmQtLTtcbiAgfVxuICByZXR1cm4gc3RhcnQgPiAwIHx8IGVuZCA8IHZhbHVlcy5sZW5ndGggPyB2YWx1ZXMuc2xpY2Uoc3RhcnQsIGVuZCkgOiB2YWx1ZXM7XG59XG5jb25zdCBhcnJheUV2ZW50cyA9IFsncHVzaCcsICdwb3AnLCAnc2hpZnQnLCAnc3BsaWNlJywgJ3Vuc2hpZnQnXTtcbmZ1bmN0aW9uIGxpc3RlbkFycmF5RXZlbnRzKGFycmF5LCBsaXN0ZW5lcikge1xuICBpZiAoYXJyYXkuX2NoYXJ0anMpIHtcbiAgICBhcnJheS5fY2hhcnRqcy5saXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG4gICAgcmV0dXJuO1xuICB9XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShhcnJheSwgJ19jaGFydGpzJywge1xuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICB2YWx1ZToge1xuICAgICAgbGlzdGVuZXJzOiBbbGlzdGVuZXJdXG4gICAgfVxuICB9KTtcbiAgYXJyYXlFdmVudHMuZm9yRWFjaChrZXkgPT4ge1xuICAgIGNvbnN0IG1ldGhvZCA9ICdfb25EYXRhJyArIF9jYXBpdGFsaXplKGtleSk7XG4gICAgY29uc3QgYmFzZSA9IGFycmF5W2tleV07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGFycmF5LCBrZXksIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgdmFsdWUoLi4uYXJncykge1xuICAgICAgICBjb25zdCByZXMgPSBiYXNlLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICBhcnJheS5fY2hhcnRqcy5saXN0ZW5lcnMuZm9yRWFjaChvYmplY3QgPT4ge1xuICAgICAgICAgIGlmICh0eXBlb2Ygb2JqZWN0W21ldGhvZF0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIG9iamVjdFttZXRob2RdKC4uLmFyZ3MpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gdW5saXN0ZW5BcnJheUV2ZW50cyhhcnJheSwgbGlzdGVuZXIpIHtcbiAgY29uc3Qgc3R1YiA9IGFycmF5Ll9jaGFydGpzO1xuICBpZiAoIXN0dWIpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgbGlzdGVuZXJzID0gc3R1Yi5saXN0ZW5lcnM7XG4gIGNvbnN0IGluZGV4ID0gbGlzdGVuZXJzLmluZGV4T2YobGlzdGVuZXIpO1xuICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgbGlzdGVuZXJzLnNwbGljZShpbmRleCwgMSk7XG4gIH1cbiAgaWYgKGxpc3RlbmVycy5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGFycmF5RXZlbnRzLmZvckVhY2goa2V5ID0+IHtcbiAgICBkZWxldGUgYXJyYXlba2V5XTtcbiAgfSk7XG4gIGRlbGV0ZSBhcnJheS5fY2hhcnRqcztcbn1cbi8qKlxuICogQHBhcmFtIGl0ZW1zXG4gKi9cbmZ1bmN0aW9uIF9hcnJheVVuaXF1ZShpdGVtcykge1xuICBjb25zdCBzZXQgPSBuZXcgU2V0KGl0ZW1zKTtcbiAgaWYgKHNldC5zaXplID09PSBpdGVtcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gaXRlbXM7XG4gIH1cbiAgcmV0dXJuIEFycmF5LmZyb20oc2V0KTtcbn1cbmZ1bmN0aW9uIGZvbnRTdHJpbmcocGl4ZWxTaXplLCBmb250U3R5bGUsIGZvbnRGYW1pbHkpIHtcbiAgcmV0dXJuIGZvbnRTdHlsZSArICcgJyArIHBpeGVsU2l6ZSArICdweCAnICsgZm9udEZhbWlseTtcbn1cbi8qKlxuKiBSZXF1ZXN0IGFuaW1hdGlvbiBwb2x5ZmlsbFxuKi9cbmNvbnN0IHJlcXVlc3RBbmltRnJhbWUgPSBmdW5jdGlvbiAoKSB7XG4gIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgIH07XG4gIH1cbiAgcmV0dXJuIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU7XG59KCk7XG4vKipcbiAqIFRocm90dGxlcyBjYWxsaW5nIGBmbmAgb25jZSBwZXIgYW5pbWF0aW9uIGZyYW1lXG4gKiBMYXRlc3QgYXJndW1lbnRzIGFyZSB1c2VkIG9uIHRoZSBhY3R1YWwgY2FsbFxuICovXG5mdW5jdGlvbiB0aHJvdHRsZWQoZm4sIHRoaXNBcmcpIHtcbiAgbGV0IGFyZ3NUb1VzZSA9IFtdO1xuICBsZXQgdGlja2luZyA9IGZhbHNlO1xuICByZXR1cm4gZnVuY3Rpb24gKC4uLmFyZ3MpIHtcbiAgICAvLyBTYXZlIHRoZSBhcmdzIGZvciB1c2UgbGF0ZXJcbiAgICBhcmdzVG9Vc2UgPSBhcmdzO1xuICAgIGlmICghdGlja2luZykge1xuICAgICAgdGlja2luZyA9IHRydWU7XG4gICAgICByZXF1ZXN0QW5pbUZyYW1lLmNhbGwod2luZG93LCAoKSA9PiB7XG4gICAgICAgIHRpY2tpbmcgPSBmYWxzZTtcbiAgICAgICAgZm4uYXBwbHkodGhpc0FyZywgYXJnc1RvVXNlKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcbn1cbi8qKlxuICogRGVib3VuY2VzIGNhbGxpbmcgYGZuYCBmb3IgYGRlbGF5YCBtc1xuICovXG5mdW5jdGlvbiBkZWJvdW5jZShmbiwgZGVsYXkpIHtcbiAgbGV0IHRpbWVvdXQ7XG4gIHJldHVybiBmdW5jdGlvbiAoLi4uYXJncykge1xuICAgIGlmIChkZWxheSkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgdGltZW91dCA9IHNldFRpbWVvdXQoZm4sIGRlbGF5LCBhcmdzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZm4uYXBwbHkodGhpcywgYXJncyk7XG4gICAgfVxuICAgIHJldHVybiBkZWxheTtcbiAgfTtcbn1cbi8qKlxuICogQ29udmVydHMgJ3N0YXJ0JyB0byAnbGVmdCcsICdlbmQnIHRvICdyaWdodCcgYW5kIG90aGVycyB0byAnY2VudGVyJ1xuICogQHByaXZhdGVcbiAqL1xuY29uc3QgX3RvTGVmdFJpZ2h0Q2VudGVyID0gYWxpZ24gPT4gYWxpZ24gPT09ICdzdGFydCcgPyAnbGVmdCcgOiBhbGlnbiA9PT0gJ2VuZCcgPyAncmlnaHQnIDogJ2NlbnRlcic7XG4vKipcbiAqIFJldHVybnMgYHN0YXJ0YCwgYGVuZGAgb3IgYChzdGFydCArIGVuZCkgLyAyYCBkZXBlbmRpbmcgb24gYGFsaWduYC4gRGVmYXVsdHMgdG8gYGNlbnRlcmBcbiAqIEBwcml2YXRlXG4gKi9cbmNvbnN0IF9hbGlnblN0YXJ0RW5kID0gKGFsaWduLCBzdGFydCwgZW5kKSA9PiBhbGlnbiA9PT0gJ3N0YXJ0JyA/IHN0YXJ0IDogYWxpZ24gPT09ICdlbmQnID8gZW5kIDogKHN0YXJ0ICsgZW5kKSAvIDI7XG4vKipcbiAqIFJldHVybnMgYGxlZnRgLCBgcmlnaHRgIG9yIGAobGVmdCArIHJpZ2h0KSAvIDJgIGRlcGVuZGluZyBvbiBgYWxpZ25gLiBEZWZhdWx0cyB0byBgbGVmdGBcbiAqIEBwcml2YXRlXG4gKi9cbmNvbnN0IF90ZXh0WCA9IChhbGlnbiwgbGVmdCwgcmlnaHQsIHJ0bCkgPT4ge1xuICBjb25zdCBjaGVjayA9IHJ0bCA/ICdsZWZ0JyA6ICdyaWdodCc7XG4gIHJldHVybiBhbGlnbiA9PT0gY2hlY2sgPyByaWdodCA6IGFsaWduID09PSAnY2VudGVyJyA/IChsZWZ0ICsgcmlnaHQpIC8gMiA6IGxlZnQ7XG59O1xuLyoqXG4gKiBSZXR1cm4gc3RhcnQgYW5kIGNvdW50IG9mIHZpc2libGUgcG9pbnRzLlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gX2dldFN0YXJ0QW5kQ291bnRPZlZpc2libGVQb2ludHMobWV0YSwgcG9pbnRzLCBhbmltYXRpb25zRGlzYWJsZWQpIHtcbiAgY29uc3QgcG9pbnRDb3VudCA9IHBvaW50cy5sZW5ndGg7XG4gIGxldCBzdGFydCA9IDA7XG4gIGxldCBjb3VudCA9IHBvaW50Q291bnQ7XG4gIGlmIChtZXRhLl9zb3J0ZWQpIHtcbiAgICBjb25zdCB7XG4gICAgICBpU2NhbGUsXG4gICAgICB2U2NhbGUsXG4gICAgICBfcGFyc2VkXG4gICAgfSA9IG1ldGE7XG4gICAgY29uc3Qgc3BhbkdhcHMgPSBtZXRhLmRhdGFzZXQgPyBtZXRhLmRhdGFzZXQub3B0aW9ucyA/IG1ldGEuZGF0YXNldC5vcHRpb25zLnNwYW5HYXBzIDogbnVsbCA6IG51bGw7XG4gICAgY29uc3QgYXhpcyA9IGlTY2FsZS5heGlzO1xuICAgIGNvbnN0IHtcbiAgICAgIG1pbixcbiAgICAgIG1heCxcbiAgICAgIG1pbkRlZmluZWQsXG4gICAgICBtYXhEZWZpbmVkXG4gICAgfSA9IGlTY2FsZS5nZXRVc2VyQm91bmRzKCk7XG4gICAgaWYgKG1pbkRlZmluZWQpIHtcbiAgICAgIHN0YXJ0ID0gTWF0aC5taW4oXG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIE5lZWQgdG8gdHlwZSBfcGFyc2VkXG4gICAgICBfbG9va3VwQnlLZXkoX3BhcnNlZCwgYXhpcywgbWluKS5sbyxcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgTmVlZCB0byBmaXggdHlwZXMgb24gX2xvb2t1cEJ5S2V5XG4gICAgICBhbmltYXRpb25zRGlzYWJsZWQgPyBwb2ludENvdW50IDogX2xvb2t1cEJ5S2V5KHBvaW50cywgYXhpcywgaVNjYWxlLmdldFBpeGVsRm9yVmFsdWUobWluKSkubG8pO1xuICAgICAgaWYgKHNwYW5HYXBzKSB7XG4gICAgICAgIGNvbnN0IGRpc3RhbmNlVG9EZWZpbmVkTG8gPSBfcGFyc2VkLnNsaWNlKDAsIHN0YXJ0ICsgMSkucmV2ZXJzZSgpLmZpbmRJbmRleChwb2ludCA9PiAhaXNOdWxsT3JVbmRlZihwb2ludFt2U2NhbGUuYXhpc10pKTtcbiAgICAgICAgc3RhcnQgLT0gTWF0aC5tYXgoMCwgZGlzdGFuY2VUb0RlZmluZWRMbyk7XG4gICAgICB9XG4gICAgICBzdGFydCA9IF9saW1pdFZhbHVlKHN0YXJ0LCAwLCBwb2ludENvdW50IC0gMSk7XG4gICAgfVxuICAgIGlmIChtYXhEZWZpbmVkKSB7XG4gICAgICBsZXQgZW5kID0gTWF0aC5tYXgoXG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIE5lZWQgdG8gdHlwZSBfcGFyc2VkXG4gICAgICBfbG9va3VwQnlLZXkoX3BhcnNlZCwgaVNjYWxlLmF4aXMsIG1heCwgdHJ1ZSkuaGkgKyAxLFxuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBOZWVkIHRvIGZpeCB0eXBlcyBvbiBfbG9va3VwQnlLZXlcbiAgICAgIGFuaW1hdGlvbnNEaXNhYmxlZCA/IDAgOiBfbG9va3VwQnlLZXkocG9pbnRzLCBheGlzLCBpU2NhbGUuZ2V0UGl4ZWxGb3JWYWx1ZShtYXgpLCB0cnVlKS5oaSArIDEpO1xuICAgICAgaWYgKHNwYW5HYXBzKSB7XG4gICAgICAgIGNvbnN0IGRpc3RhbmNlVG9EZWZpbmVkSGkgPSBfcGFyc2VkLnNsaWNlKGVuZCAtIDEpLmZpbmRJbmRleChwb2ludCA9PiAhaXNOdWxsT3JVbmRlZihwb2ludFt2U2NhbGUuYXhpc10pKTtcbiAgICAgICAgZW5kICs9IE1hdGgubWF4KDAsIGRpc3RhbmNlVG9EZWZpbmVkSGkpO1xuICAgICAgfVxuICAgICAgY291bnQgPSBfbGltaXRWYWx1ZShlbmQsIHN0YXJ0LCBwb2ludENvdW50KSAtIHN0YXJ0O1xuICAgIH0gZWxzZSB7XG4gICAgICBjb3VudCA9IHBvaW50Q291bnQgLSBzdGFydDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBzdGFydCxcbiAgICBjb3VudFxuICB9O1xufVxuLyoqXG4gKiBDaGVja3MgaWYgdGhlIHNjYWxlIHJhbmdlcyBoYXZlIGNoYW5nZWQuXG4gKiBAcGFyYW0ge29iamVjdH0gbWV0YSAtIGRhdGFzZXQgbWV0YS5cbiAqIEByZXR1cm5zIHtib29sZWFufVxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gX3NjYWxlUmFuZ2VzQ2hhbmdlZChtZXRhKSB7XG4gIGNvbnN0IHtcbiAgICB4U2NhbGUsXG4gICAgeVNjYWxlLFxuICAgIF9zY2FsZVJhbmdlc1xuICB9ID0gbWV0YTtcbiAgY29uc3QgbmV3UmFuZ2VzID0ge1xuICAgIHhtaW46IHhTY2FsZS5taW4sXG4gICAgeG1heDogeFNjYWxlLm1heCxcbiAgICB5bWluOiB5U2NhbGUubWluLFxuICAgIHltYXg6IHlTY2FsZS5tYXhcbiAgfTtcbiAgaWYgKCFfc2NhbGVSYW5nZXMpIHtcbiAgICBtZXRhLl9zY2FsZVJhbmdlcyA9IG5ld1JhbmdlcztcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBjb25zdCBjaGFuZ2VkID0gX3NjYWxlUmFuZ2VzLnhtaW4gIT09IHhTY2FsZS5taW4gfHwgX3NjYWxlUmFuZ2VzLnhtYXggIT09IHhTY2FsZS5tYXggfHwgX3NjYWxlUmFuZ2VzLnltaW4gIT09IHlTY2FsZS5taW4gfHwgX3NjYWxlUmFuZ2VzLnltYXggIT09IHlTY2FsZS5tYXg7XG4gIE9iamVjdC5hc3NpZ24oX3NjYWxlUmFuZ2VzLCBuZXdSYW5nZXMpO1xuICByZXR1cm4gY2hhbmdlZDtcbn1cbmNvbnN0IGF0RWRnZSA9IHQgPT4gdCA9PT0gMCB8fCB0ID09PSAxO1xuY29uc3QgZWxhc3RpY0luID0gKHQsIHMsIHApID0+IC0oTWF0aC5wb3coMiwgMTAgKiAodCAtPSAxKSkgKiBNYXRoLnNpbigodCAtIHMpICogVEFVIC8gcCkpO1xuY29uc3QgZWxhc3RpY091dCA9ICh0LCBzLCBwKSA9PiBNYXRoLnBvdygyLCAtMTAgKiB0KSAqIE1hdGguc2luKCh0IC0gcykgKiBUQVUgLyBwKSArIDE7XG4vKipcbiAqIEVhc2luZyBmdW5jdGlvbnMgYWRhcHRlZCBmcm9tIFJvYmVydCBQZW5uZXIncyBlYXNpbmcgZXF1YXRpb25zLlxuICogQG5hbWVzcGFjZSBDaGFydC5oZWxwZXJzLmVhc2luZy5lZmZlY3RzXG4gKiBAc2VlIGh0dHA6Ly93d3cucm9iZXJ0cGVubmVyLmNvbS9lYXNpbmcvXG4gKi9cbmNvbnN0IGVmZmVjdHMgPSB7XG4gIGxpbmVhcjogdCA9PiB0LFxuICBlYXNlSW5RdWFkOiB0ID0+IHQgKiB0LFxuICBlYXNlT3V0UXVhZDogdCA9PiAtdCAqICh0IC0gMiksXG4gIGVhc2VJbk91dFF1YWQ6IHQgPT4gKHQgLz0gMC41KSA8IDEgPyAwLjUgKiB0ICogdCA6IC0wLjUgKiAoLS10ICogKHQgLSAyKSAtIDEpLFxuICBlYXNlSW5DdWJpYzogdCA9PiB0ICogdCAqIHQsXG4gIGVhc2VPdXRDdWJpYzogdCA9PiAodCAtPSAxKSAqIHQgKiB0ICsgMSxcbiAgZWFzZUluT3V0Q3ViaWM6IHQgPT4gKHQgLz0gMC41KSA8IDEgPyAwLjUgKiB0ICogdCAqIHQgOiAwLjUgKiAoKHQgLT0gMikgKiB0ICogdCArIDIpLFxuICBlYXNlSW5RdWFydDogdCA9PiB0ICogdCAqIHQgKiB0LFxuICBlYXNlT3V0UXVhcnQ6IHQgPT4gLSgodCAtPSAxKSAqIHQgKiB0ICogdCAtIDEpLFxuICBlYXNlSW5PdXRRdWFydDogdCA9PiAodCAvPSAwLjUpIDwgMSA/IDAuNSAqIHQgKiB0ICogdCAqIHQgOiAtMC41ICogKCh0IC09IDIpICogdCAqIHQgKiB0IC0gMiksXG4gIGVhc2VJblF1aW50OiB0ID0+IHQgKiB0ICogdCAqIHQgKiB0LFxuICBlYXNlT3V0UXVpbnQ6IHQgPT4gKHQgLT0gMSkgKiB0ICogdCAqIHQgKiB0ICsgMSxcbiAgZWFzZUluT3V0UXVpbnQ6IHQgPT4gKHQgLz0gMC41KSA8IDEgPyAwLjUgKiB0ICogdCAqIHQgKiB0ICogdCA6IDAuNSAqICgodCAtPSAyKSAqIHQgKiB0ICogdCAqIHQgKyAyKSxcbiAgZWFzZUluU2luZTogdCA9PiAtTWF0aC5jb3ModCAqIEhBTEZfUEkpICsgMSxcbiAgZWFzZU91dFNpbmU6IHQgPT4gTWF0aC5zaW4odCAqIEhBTEZfUEkpLFxuICBlYXNlSW5PdXRTaW5lOiB0ID0+IC0wLjUgKiAoTWF0aC5jb3MoUEkgKiB0KSAtIDEpLFxuICBlYXNlSW5FeHBvOiB0ID0+IHQgPT09IDAgPyAwIDogTWF0aC5wb3coMiwgMTAgKiAodCAtIDEpKSxcbiAgZWFzZU91dEV4cG86IHQgPT4gdCA9PT0gMSA/IDEgOiAtTWF0aC5wb3coMiwgLTEwICogdCkgKyAxLFxuICBlYXNlSW5PdXRFeHBvOiB0ID0+IGF0RWRnZSh0KSA/IHQgOiB0IDwgMC41ID8gMC41ICogTWF0aC5wb3coMiwgMTAgKiAodCAqIDIgLSAxKSkgOiAwLjUgKiAoLU1hdGgucG93KDIsIC0xMCAqICh0ICogMiAtIDEpKSArIDIpLFxuICBlYXNlSW5DaXJjOiB0ID0+IHQgPj0gMSA/IHQgOiAtKE1hdGguc3FydCgxIC0gdCAqIHQpIC0gMSksXG4gIGVhc2VPdXRDaXJjOiB0ID0+IE1hdGguc3FydCgxIC0gKHQgLT0gMSkgKiB0KSxcbiAgZWFzZUluT3V0Q2lyYzogdCA9PiAodCAvPSAwLjUpIDwgMSA/IC0wLjUgKiAoTWF0aC5zcXJ0KDEgLSB0ICogdCkgLSAxKSA6IDAuNSAqIChNYXRoLnNxcnQoMSAtICh0IC09IDIpICogdCkgKyAxKSxcbiAgZWFzZUluRWxhc3RpYzogdCA9PiBhdEVkZ2UodCkgPyB0IDogZWxhc3RpY0luKHQsIDAuMDc1LCAwLjMpLFxuICBlYXNlT3V0RWxhc3RpYzogdCA9PiBhdEVkZ2UodCkgPyB0IDogZWxhc3RpY091dCh0LCAwLjA3NSwgMC4zKSxcbiAgZWFzZUluT3V0RWxhc3RpYyh0KSB7XG4gICAgY29uc3QgcyA9IDAuMTEyNTtcbiAgICBjb25zdCBwID0gMC40NTtcbiAgICByZXR1cm4gYXRFZGdlKHQpID8gdCA6IHQgPCAwLjUgPyAwLjUgKiBlbGFzdGljSW4odCAqIDIsIHMsIHApIDogMC41ICsgMC41ICogZWxhc3RpY091dCh0ICogMiAtIDEsIHMsIHApO1xuICB9LFxuICBlYXNlSW5CYWNrKHQpIHtcbiAgICBjb25zdCBzID0gMS43MDE1ODtcbiAgICByZXR1cm4gdCAqIHQgKiAoKHMgKyAxKSAqIHQgLSBzKTtcbiAgfSxcbiAgZWFzZU91dEJhY2sodCkge1xuICAgIGNvbnN0IHMgPSAxLjcwMTU4O1xuICAgIHJldHVybiAodCAtPSAxKSAqIHQgKiAoKHMgKyAxKSAqIHQgKyBzKSArIDE7XG4gIH0sXG4gIGVhc2VJbk91dEJhY2sodCkge1xuICAgIGxldCBzID0gMS43MDE1ODtcbiAgICBpZiAoKHQgLz0gMC41KSA8IDEpIHtcbiAgICAgIHJldHVybiAwLjUgKiAodCAqIHQgKiAoKChzICo9IDEuNTI1KSArIDEpICogdCAtIHMpKTtcbiAgICB9XG4gICAgcmV0dXJuIDAuNSAqICgodCAtPSAyKSAqIHQgKiAoKChzICo9IDEuNTI1KSArIDEpICogdCArIHMpICsgMik7XG4gIH0sXG4gIGVhc2VJbkJvdW5jZTogdCA9PiAxIC0gZWZmZWN0cy5lYXNlT3V0Qm91bmNlKDEgLSB0KSxcbiAgZWFzZU91dEJvdW5jZSh0KSB7XG4gICAgY29uc3QgbSA9IDcuNTYyNTtcbiAgICBjb25zdCBkID0gMi43NTtcbiAgICBpZiAodCA8IDEgLyBkKSB7XG4gICAgICByZXR1cm4gbSAqIHQgKiB0O1xuICAgIH1cbiAgICBpZiAodCA8IDIgLyBkKSB7XG4gICAgICByZXR1cm4gbSAqICh0IC09IDEuNSAvIGQpICogdCArIDAuNzU7XG4gICAgfVxuICAgIGlmICh0IDwgMi41IC8gZCkge1xuICAgICAgcmV0dXJuIG0gKiAodCAtPSAyLjI1IC8gZCkgKiB0ICsgMC45Mzc1O1xuICAgIH1cbiAgICByZXR1cm4gbSAqICh0IC09IDIuNjI1IC8gZCkgKiB0ICsgMC45ODQzNzU7XG4gIH0sXG4gIGVhc2VJbk91dEJvdW5jZTogdCA9PiB0IDwgMC41ID8gZWZmZWN0cy5lYXNlSW5Cb3VuY2UodCAqIDIpICogMC41IDogZWZmZWN0cy5lYXNlT3V0Qm91bmNlKHQgKiAyIC0gMSkgKiAwLjUgKyAwLjVcbn07XG5mdW5jdGlvbiBpc1BhdHRlcm5PckdyYWRpZW50KHZhbHVlKSB7XG4gIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgY29uc3QgdHlwZSA9IHZhbHVlLnRvU3RyaW5nKCk7XG4gICAgcmV0dXJuIHR5cGUgPT09ICdbb2JqZWN0IENhbnZhc1BhdHRlcm5dJyB8fCB0eXBlID09PSAnW29iamVjdCBDYW52YXNHcmFkaWVudF0nO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIGNvbG9yKHZhbHVlKSB7XG4gIHJldHVybiBpc1BhdHRlcm5PckdyYWRpZW50KHZhbHVlKSA/IHZhbHVlIDogbmV3IENvbG9yKHZhbHVlKTtcbn1cbmZ1bmN0aW9uIGdldEhvdmVyQ29sb3IodmFsdWUpIHtcbiAgcmV0dXJuIGlzUGF0dGVybk9yR3JhZGllbnQodmFsdWUpID8gdmFsdWUgOiBuZXcgQ29sb3IodmFsdWUpLnNhdHVyYXRlKDAuNSkuZGFya2VuKDAuMSkuaGV4U3RyaW5nKCk7XG59XG5jb25zdCBudW1iZXJzID0gWyd4JywgJ3knLCAnYm9yZGVyV2lkdGgnLCAncmFkaXVzJywgJ3RlbnNpb24nXTtcbmNvbnN0IGNvbG9ycyA9IFsnY29sb3InLCAnYm9yZGVyQ29sb3InLCAnYmFja2dyb3VuZENvbG9yJ107XG5mdW5jdGlvbiBhcHBseUFuaW1hdGlvbnNEZWZhdWx0cyhkZWZhdWx0cykge1xuICBkZWZhdWx0cy5zZXQoJ2FuaW1hdGlvbicsIHtcbiAgICBkZWxheTogdW5kZWZpbmVkLFxuICAgIGR1cmF0aW9uOiAxMDAwLFxuICAgIGVhc2luZzogJ2Vhc2VPdXRRdWFydCcsXG4gICAgZm46IHVuZGVmaW5lZCxcbiAgICBmcm9tOiB1bmRlZmluZWQsXG4gICAgbG9vcDogdW5kZWZpbmVkLFxuICAgIHRvOiB1bmRlZmluZWQsXG4gICAgdHlwZTogdW5kZWZpbmVkXG4gIH0pO1xuICBkZWZhdWx0cy5kZXNjcmliZSgnYW5pbWF0aW9uJywge1xuICAgIF9mYWxsYmFjazogZmFsc2UsXG4gICAgX2luZGV4YWJsZTogZmFsc2UsXG4gICAgX3NjcmlwdGFibGU6IG5hbWUgPT4gbmFtZSAhPT0gJ29uUHJvZ3Jlc3MnICYmIG5hbWUgIT09ICdvbkNvbXBsZXRlJyAmJiBuYW1lICE9PSAnZm4nXG4gIH0pO1xuICBkZWZhdWx0cy5zZXQoJ2FuaW1hdGlvbnMnLCB7XG4gICAgY29sb3JzOiB7XG4gICAgICB0eXBlOiAnY29sb3InLFxuICAgICAgcHJvcGVydGllczogY29sb3JzXG4gICAgfSxcbiAgICBudW1iZXJzOiB7XG4gICAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICAgIHByb3BlcnRpZXM6IG51bWJlcnNcbiAgICB9XG4gIH0pO1xuICBkZWZhdWx0cy5kZXNjcmliZSgnYW5pbWF0aW9ucycsIHtcbiAgICBfZmFsbGJhY2s6ICdhbmltYXRpb24nXG4gIH0pO1xuICBkZWZhdWx0cy5zZXQoJ3RyYW5zaXRpb25zJywge1xuICAgIGFjdGl2ZToge1xuICAgICAgYW5pbWF0aW9uOiB7XG4gICAgICAgIGR1cmF0aW9uOiA0MDBcbiAgICAgIH1cbiAgICB9LFxuICAgIHJlc2l6ZToge1xuICAgICAgYW5pbWF0aW9uOiB7XG4gICAgICAgIGR1cmF0aW9uOiAwXG4gICAgICB9XG4gICAgfSxcbiAgICBzaG93OiB7XG4gICAgICBhbmltYXRpb25zOiB7XG4gICAgICAgIGNvbG9yczoge1xuICAgICAgICAgIGZyb206ICd0cmFuc3BhcmVudCdcbiAgICAgICAgfSxcbiAgICAgICAgdmlzaWJsZToge1xuICAgICAgICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICAgICAgICBkdXJhdGlvbjogMFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBoaWRlOiB7XG4gICAgICBhbmltYXRpb25zOiB7XG4gICAgICAgIGNvbG9yczoge1xuICAgICAgICAgIHRvOiAndHJhbnNwYXJlbnQnXG4gICAgICAgIH0sXG4gICAgICAgIHZpc2libGU6IHtcbiAgICAgICAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgICAgICAgZWFzaW5nOiAnbGluZWFyJyxcbiAgICAgICAgICBmbjogdiA9PiB2IHwgMFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn1cbmZ1bmN0aW9uIGFwcGx5TGF5b3V0c0RlZmF1bHRzKGRlZmF1bHRzKSB7XG4gIGRlZmF1bHRzLnNldCgnbGF5b3V0Jywge1xuICAgIGF1dG9QYWRkaW5nOiB0cnVlLFxuICAgIHBhZGRpbmc6IHtcbiAgICAgIHRvcDogMCxcbiAgICAgIHJpZ2h0OiAwLFxuICAgICAgYm90dG9tOiAwLFxuICAgICAgbGVmdDogMFxuICAgIH1cbiAgfSk7XG59XG5jb25zdCBpbnRsQ2FjaGUgPSBuZXcgTWFwKCk7XG5mdW5jdGlvbiBnZXROdW1iZXJGb3JtYXQobG9jYWxlLCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICBjb25zdCBjYWNoZUtleSA9IGxvY2FsZSArIEpTT04uc3RyaW5naWZ5KG9wdGlvbnMpO1xuICBsZXQgZm9ybWF0dGVyID0gaW50bENhY2hlLmdldChjYWNoZUtleSk7XG4gIGlmICghZm9ybWF0dGVyKSB7XG4gICAgZm9ybWF0dGVyID0gbmV3IEludGwuTnVtYmVyRm9ybWF0KGxvY2FsZSwgb3B0aW9ucyk7XG4gICAgaW50bENhY2hlLnNldChjYWNoZUtleSwgZm9ybWF0dGVyKTtcbiAgfVxuICByZXR1cm4gZm9ybWF0dGVyO1xufVxuZnVuY3Rpb24gZm9ybWF0TnVtYmVyKG51bSwgbG9jYWxlLCBvcHRpb25zKSB7XG4gIHJldHVybiBnZXROdW1iZXJGb3JtYXQobG9jYWxlLCBvcHRpb25zKS5mb3JtYXQobnVtKTtcbn1cbmNvbnN0IGZvcm1hdHRlcnMgPSB7XG4gIHZhbHVlcyh2YWx1ZSkge1xuICAgIHJldHVybiBpc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogJycgKyB2YWx1ZTtcbiAgfSxcbiAgbnVtZXJpYyh0aWNrVmFsdWUsIGluZGV4LCB0aWNrcykge1xuICAgIGlmICh0aWNrVmFsdWUgPT09IDApIHtcbiAgICAgIHJldHVybiAnMCc7XG4gICAgfVxuICAgIGNvbnN0IGxvY2FsZSA9IHRoaXMuY2hhcnQub3B0aW9ucy5sb2NhbGU7XG4gICAgbGV0IG5vdGF0aW9uO1xuICAgIGxldCBkZWx0YSA9IHRpY2tWYWx1ZTtcbiAgICBpZiAodGlja3MubGVuZ3RoID4gMSkge1xuICAgICAgY29uc3QgbWF4VGljayA9IE1hdGgubWF4KE1hdGguYWJzKHRpY2tzWzBdLnZhbHVlKSwgTWF0aC5hYnModGlja3NbdGlja3MubGVuZ3RoIC0gMV0udmFsdWUpKTtcbiAgICAgIGlmIChtYXhUaWNrIDwgMWUtNCB8fCBtYXhUaWNrID4gMWUrMTUpIHtcbiAgICAgICAgbm90YXRpb24gPSAnc2NpZW50aWZpYyc7XG4gICAgICB9XG4gICAgICBkZWx0YSA9IGNhbGN1bGF0ZURlbHRhKHRpY2tWYWx1ZSwgdGlja3MpO1xuICAgIH1cbiAgICBjb25zdCBsb2dEZWx0YSA9IGxvZzEwKE1hdGguYWJzKGRlbHRhKSk7XG4gICAgY29uc3QgbnVtRGVjaW1hbCA9IGlzTmFOKGxvZ0RlbHRhKSA/IDEgOiBNYXRoLm1heChNYXRoLm1pbigtMSAqIE1hdGguZmxvb3IobG9nRGVsdGEpLCAyMCksIDApO1xuICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICBub3RhdGlvbixcbiAgICAgIG1pbmltdW1GcmFjdGlvbkRpZ2l0czogbnVtRGVjaW1hbCxcbiAgICAgIG1heGltdW1GcmFjdGlvbkRpZ2l0czogbnVtRGVjaW1hbFxuICAgIH07XG4gICAgT2JqZWN0LmFzc2lnbihvcHRpb25zLCB0aGlzLm9wdGlvbnMudGlja3MuZm9ybWF0KTtcbiAgICByZXR1cm4gZm9ybWF0TnVtYmVyKHRpY2tWYWx1ZSwgbG9jYWxlLCBvcHRpb25zKTtcbiAgfSxcbiAgbG9nYXJpdGhtaWModGlja1ZhbHVlLCBpbmRleCwgdGlja3MpIHtcbiAgICBpZiAodGlja1ZhbHVlID09PSAwKSB7XG4gICAgICByZXR1cm4gJzAnO1xuICAgIH1cbiAgICBjb25zdCByZW1haW4gPSB0aWNrc1tpbmRleF0uc2lnbmlmaWNhbmQgfHwgdGlja1ZhbHVlIC8gTWF0aC5wb3coMTAsIE1hdGguZmxvb3IobG9nMTAodGlja1ZhbHVlKSkpO1xuICAgIGlmIChbMSwgMiwgMywgNSwgMTAsIDE1XS5pbmNsdWRlcyhyZW1haW4pIHx8IGluZGV4ID4gMC44ICogdGlja3MubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gZm9ybWF0dGVycy5udW1lcmljLmNhbGwodGhpcywgdGlja1ZhbHVlLCBpbmRleCwgdGlja3MpO1xuICAgIH1cbiAgICByZXR1cm4gJyc7XG4gIH1cbn07XG5mdW5jdGlvbiBjYWxjdWxhdGVEZWx0YSh0aWNrVmFsdWUsIHRpY2tzKSB7XG4gIGxldCBkZWx0YSA9IHRpY2tzLmxlbmd0aCA+IDMgPyB0aWNrc1syXS52YWx1ZSAtIHRpY2tzWzFdLnZhbHVlIDogdGlja3NbMV0udmFsdWUgLSB0aWNrc1swXS52YWx1ZTtcbiAgaWYgKE1hdGguYWJzKGRlbHRhKSA+PSAxICYmIHRpY2tWYWx1ZSAhPT0gTWF0aC5mbG9vcih0aWNrVmFsdWUpKSB7XG4gICAgZGVsdGEgPSB0aWNrVmFsdWUgLSBNYXRoLmZsb29yKHRpY2tWYWx1ZSk7XG4gIH1cbiAgcmV0dXJuIGRlbHRhO1xufVxudmFyIFRpY2tzID0ge1xuICBmb3JtYXR0ZXJzXG59O1xuZnVuY3Rpb24gYXBwbHlTY2FsZURlZmF1bHRzKGRlZmF1bHRzKSB7XG4gIGRlZmF1bHRzLnNldCgnc2NhbGUnLCB7XG4gICAgZGlzcGxheTogdHJ1ZSxcbiAgICBvZmZzZXQ6IGZhbHNlLFxuICAgIHJldmVyc2U6IGZhbHNlLFxuICAgIGJlZ2luQXRaZXJvOiBmYWxzZSxcbiAgICBib3VuZHM6ICd0aWNrcycsXG4gICAgY2xpcDogdHJ1ZSxcbiAgICBncmFjZTogMCxcbiAgICBncmlkOiB7XG4gICAgICBkaXNwbGF5OiB0cnVlLFxuICAgICAgbGluZVdpZHRoOiAxLFxuICAgICAgZHJhd09uQ2hhcnRBcmVhOiB0cnVlLFxuICAgICAgZHJhd1RpY2tzOiB0cnVlLFxuICAgICAgdGlja0xlbmd0aDogOCxcbiAgICAgIHRpY2tXaWR0aDogKF9jdHgsIG9wdGlvbnMpID0+IG9wdGlvbnMubGluZVdpZHRoLFxuICAgICAgdGlja0NvbG9yOiAoX2N0eCwgb3B0aW9ucykgPT4gb3B0aW9ucy5jb2xvcixcbiAgICAgIG9mZnNldDogZmFsc2VcbiAgICB9LFxuICAgIGJvcmRlcjoge1xuICAgICAgZGlzcGxheTogdHJ1ZSxcbiAgICAgIGRhc2g6IFtdLFxuICAgICAgZGFzaE9mZnNldDogMC4wLFxuICAgICAgd2lkdGg6IDFcbiAgICB9LFxuICAgIHRpdGxlOiB7XG4gICAgICBkaXNwbGF5OiBmYWxzZSxcbiAgICAgIHRleHQ6ICcnLFxuICAgICAgcGFkZGluZzoge1xuICAgICAgICB0b3A6IDQsXG4gICAgICAgIGJvdHRvbTogNFxuICAgICAgfVxuICAgIH0sXG4gICAgdGlja3M6IHtcbiAgICAgIG1pblJvdGF0aW9uOiAwLFxuICAgICAgbWF4Um90YXRpb246IDUwLFxuICAgICAgbWlycm9yOiBmYWxzZSxcbiAgICAgIHRleHRTdHJva2VXaWR0aDogMCxcbiAgICAgIHRleHRTdHJva2VDb2xvcjogJycsXG4gICAgICBwYWRkaW5nOiAzLFxuICAgICAgZGlzcGxheTogdHJ1ZSxcbiAgICAgIGF1dG9Ta2lwOiB0cnVlLFxuICAgICAgYXV0b1NraXBQYWRkaW5nOiAzLFxuICAgICAgbGFiZWxPZmZzZXQ6IDAsXG4gICAgICBjYWxsYmFjazogVGlja3MuZm9ybWF0dGVycy52YWx1ZXMsXG4gICAgICBtaW5vcjoge30sXG4gICAgICBtYWpvcjoge30sXG4gICAgICBhbGlnbjogJ2NlbnRlcicsXG4gICAgICBjcm9zc0FsaWduOiAnbmVhcicsXG4gICAgICBzaG93TGFiZWxCYWNrZHJvcDogZmFsc2UsXG4gICAgICBiYWNrZHJvcENvbG9yOiAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjc1KScsXG4gICAgICBiYWNrZHJvcFBhZGRpbmc6IDJcbiAgICB9XG4gIH0pO1xuICBkZWZhdWx0cy5yb3V0ZSgnc2NhbGUudGlja3MnLCAnY29sb3InLCAnJywgJ2NvbG9yJyk7XG4gIGRlZmF1bHRzLnJvdXRlKCdzY2FsZS5ncmlkJywgJ2NvbG9yJywgJycsICdib3JkZXJDb2xvcicpO1xuICBkZWZhdWx0cy5yb3V0ZSgnc2NhbGUuYm9yZGVyJywgJ2NvbG9yJywgJycsICdib3JkZXJDb2xvcicpO1xuICBkZWZhdWx0cy5yb3V0ZSgnc2NhbGUudGl0bGUnLCAnY29sb3InLCAnJywgJ2NvbG9yJyk7XG4gIGRlZmF1bHRzLmRlc2NyaWJlKCdzY2FsZScsIHtcbiAgICBfZmFsbGJhY2s6IGZhbHNlLFxuICAgIF9zY3JpcHRhYmxlOiBuYW1lID0+ICFuYW1lLnN0YXJ0c1dpdGgoJ2JlZm9yZScpICYmICFuYW1lLnN0YXJ0c1dpdGgoJ2FmdGVyJykgJiYgbmFtZSAhPT0gJ2NhbGxiYWNrJyAmJiBuYW1lICE9PSAncGFyc2VyJyxcbiAgICBfaW5kZXhhYmxlOiBuYW1lID0+IG5hbWUgIT09ICdib3JkZXJEYXNoJyAmJiBuYW1lICE9PSAndGlja0JvcmRlckRhc2gnICYmIG5hbWUgIT09ICdkYXNoJ1xuICB9KTtcbiAgZGVmYXVsdHMuZGVzY3JpYmUoJ3NjYWxlcycsIHtcbiAgICBfZmFsbGJhY2s6ICdzY2FsZSdcbiAgfSk7XG4gIGRlZmF1bHRzLmRlc2NyaWJlKCdzY2FsZS50aWNrcycsIHtcbiAgICBfc2NyaXB0YWJsZTogbmFtZSA9PiBuYW1lICE9PSAnYmFja2Ryb3BQYWRkaW5nJyAmJiBuYW1lICE9PSAnY2FsbGJhY2snLFxuICAgIF9pbmRleGFibGU6IG5hbWUgPT4gbmFtZSAhPT0gJ2JhY2tkcm9wUGFkZGluZydcbiAgfSk7XG59XG5jb25zdCBvdmVycmlkZXMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuY29uc3QgZGVzY3JpcHRvcnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuZnVuY3Rpb24gZ2V0U2NvcGUkMShub2RlLCBrZXkpIHtcbiAgaWYgKCFrZXkpIHtcbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuICBjb25zdCBrZXlzID0ga2V5LnNwbGl0KCcuJyk7XG4gIGZvciAobGV0IGkgPSAwLCBuID0ga2V5cy5sZW5ndGg7IGkgPCBuOyArK2kpIHtcbiAgICBjb25zdCBrID0ga2V5c1tpXTtcbiAgICBub2RlID0gbm9kZVtrXSB8fCAobm9kZVtrXSA9IE9iamVjdC5jcmVhdGUobnVsbCkpO1xuICB9XG4gIHJldHVybiBub2RlO1xufVxuZnVuY3Rpb24gc2V0KHJvb3QsIHNjb3BlLCB2YWx1ZXMpIHtcbiAgaWYgKHR5cGVvZiBzY29wZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gbWVyZ2UoZ2V0U2NvcGUkMShyb290LCBzY29wZSksIHZhbHVlcyk7XG4gIH1cbiAgcmV0dXJuIG1lcmdlKGdldFNjb3BlJDEocm9vdCwgJycpLCBzY29wZSk7XG59XG5jbGFzcyBEZWZhdWx0cyB7XG4gIGNvbnN0cnVjdG9yKF9kZXNjcmlwdG9ycywgX2FwcGxpZXJzKSB7XG4gICAgdGhpcy5hbmltYXRpb24gPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5iYWNrZ3JvdW5kQ29sb3IgPSAncmdiYSgwLDAsMCwwLjEpJztcbiAgICB0aGlzLmJvcmRlckNvbG9yID0gJ3JnYmEoMCwwLDAsMC4xKSc7XG4gICAgdGhpcy5jb2xvciA9ICcjNjY2JztcbiAgICB0aGlzLmRhdGFzZXRzID0ge307XG4gICAgdGhpcy5kZXZpY2VQaXhlbFJhdGlvID0gY29udGV4dCA9PiBjb250ZXh0LmNoYXJ0LnBsYXRmb3JtLmdldERldmljZVBpeGVsUmF0aW8oKTtcbiAgICB0aGlzLmVsZW1lbnRzID0ge307XG4gICAgdGhpcy5ldmVudHMgPSBbJ21vdXNlbW92ZScsICdtb3VzZW91dCcsICdjbGljaycsICd0b3VjaHN0YXJ0JywgJ3RvdWNobW92ZSddO1xuICAgIHRoaXMuZm9udCA9IHtcbiAgICAgIGZhbWlseTogXCInSGVsdmV0aWNhIE5ldWUnLCAnSGVsdmV0aWNhJywgJ0FyaWFsJywgc2Fucy1zZXJpZlwiLFxuICAgICAgc2l6ZTogMTIsXG4gICAgICBzdHlsZTogJ25vcm1hbCcsXG4gICAgICBsaW5lSGVpZ2h0OiAxLjIsXG4gICAgICB3ZWlnaHQ6IG51bGxcbiAgICB9O1xuICAgIHRoaXMuaG92ZXIgPSB7fTtcbiAgICB0aGlzLmhvdmVyQmFja2dyb3VuZENvbG9yID0gKGN0eCwgb3B0aW9ucykgPT4gZ2V0SG92ZXJDb2xvcihvcHRpb25zLmJhY2tncm91bmRDb2xvcik7XG4gICAgdGhpcy5ob3ZlckJvcmRlckNvbG9yID0gKGN0eCwgb3B0aW9ucykgPT4gZ2V0SG92ZXJDb2xvcihvcHRpb25zLmJvcmRlckNvbG9yKTtcbiAgICB0aGlzLmhvdmVyQ29sb3IgPSAoY3R4LCBvcHRpb25zKSA9PiBnZXRIb3ZlckNvbG9yKG9wdGlvbnMuY29sb3IpO1xuICAgIHRoaXMuaW5kZXhBeGlzID0gJ3gnO1xuICAgIHRoaXMuaW50ZXJhY3Rpb24gPSB7XG4gICAgICBtb2RlOiAnbmVhcmVzdCcsXG4gICAgICBpbnRlcnNlY3Q6IHRydWUsXG4gICAgICBpbmNsdWRlSW52aXNpYmxlOiBmYWxzZVxuICAgIH07XG4gICAgdGhpcy5tYWludGFpbkFzcGVjdFJhdGlvID0gdHJ1ZTtcbiAgICB0aGlzLm9uSG92ZXIgPSBudWxsO1xuICAgIHRoaXMub25DbGljayA9IG51bGw7XG4gICAgdGhpcy5wYXJzaW5nID0gdHJ1ZTtcbiAgICB0aGlzLnBsdWdpbnMgPSB7fTtcbiAgICB0aGlzLnJlc3BvbnNpdmUgPSB0cnVlO1xuICAgIHRoaXMuc2NhbGUgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5zY2FsZXMgPSB7fTtcbiAgICB0aGlzLnNob3dMaW5lID0gdHJ1ZTtcbiAgICB0aGlzLmRyYXdBY3RpdmVFbGVtZW50c09uVG9wID0gdHJ1ZTtcbiAgICB0aGlzLmRlc2NyaWJlKF9kZXNjcmlwdG9ycyk7XG4gICAgdGhpcy5hcHBseShfYXBwbGllcnMpO1xuICB9XG4gIHNldChzY29wZSwgdmFsdWVzKSB7XG4gICAgcmV0dXJuIHNldCh0aGlzLCBzY29wZSwgdmFsdWVzKTtcbiAgfVxuICBnZXQoc2NvcGUpIHtcbiAgICByZXR1cm4gZ2V0U2NvcGUkMSh0aGlzLCBzY29wZSk7XG4gIH1cbiAgZGVzY3JpYmUoc2NvcGUsIHZhbHVlcykge1xuICAgIHJldHVybiBzZXQoZGVzY3JpcHRvcnMsIHNjb3BlLCB2YWx1ZXMpO1xuICB9XG4gIG92ZXJyaWRlKHNjb3BlLCB2YWx1ZXMpIHtcbiAgICByZXR1cm4gc2V0KG92ZXJyaWRlcywgc2NvcGUsIHZhbHVlcyk7XG4gIH1cbiAgcm91dGUoc2NvcGUsIG5hbWUsIHRhcmdldFNjb3BlLCB0YXJnZXROYW1lKSB7XG4gICAgY29uc3Qgc2NvcGVPYmplY3QgPSBnZXRTY29wZSQxKHRoaXMsIHNjb3BlKTtcbiAgICBjb25zdCB0YXJnZXRTY29wZU9iamVjdCA9IGdldFNjb3BlJDEodGhpcywgdGFyZ2V0U2NvcGUpO1xuICAgIGNvbnN0IHByaXZhdGVOYW1lID0gJ18nICsgbmFtZTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhzY29wZU9iamVjdCwge1xuICAgICAgW3ByaXZhdGVOYW1lXToge1xuICAgICAgICB2YWx1ZTogc2NvcGVPYmplY3RbbmFtZV0sXG4gICAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgICB9LFxuICAgICAgW25hbWVdOiB7XG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGdldCgpIHtcbiAgICAgICAgICBjb25zdCBsb2NhbCA9IHRoaXNbcHJpdmF0ZU5hbWVdO1xuICAgICAgICAgIGNvbnN0IHRhcmdldCA9IHRhcmdldFNjb3BlT2JqZWN0W3RhcmdldE5hbWVdO1xuICAgICAgICAgIGlmIChpc09iamVjdChsb2NhbCkpIHtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCB0YXJnZXQsIGxvY2FsKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHZhbHVlT3JEZWZhdWx0KGxvY2FsLCB0YXJnZXQpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgICB0aGlzW3ByaXZhdGVOYW1lXSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgYXBwbHkoYXBwbGllcnMpIHtcbiAgICBhcHBsaWVycy5mb3JFYWNoKGFwcGx5ID0+IGFwcGx5KHRoaXMpKTtcbiAgfVxufVxudmFyIGRlZmF1bHRzID0gLyogI19fUFVSRV9fICovbmV3IERlZmF1bHRzKHtcbiAgX3NjcmlwdGFibGU6IG5hbWUgPT4gIW5hbWUuc3RhcnRzV2l0aCgnb24nKSxcbiAgX2luZGV4YWJsZTogbmFtZSA9PiBuYW1lICE9PSAnZXZlbnRzJyxcbiAgaG92ZXI6IHtcbiAgICBfZmFsbGJhY2s6ICdpbnRlcmFjdGlvbidcbiAgfSxcbiAgaW50ZXJhY3Rpb246IHtcbiAgICBfc2NyaXB0YWJsZTogZmFsc2UsXG4gICAgX2luZGV4YWJsZTogZmFsc2VcbiAgfVxufSwgW2FwcGx5QW5pbWF0aW9uc0RlZmF1bHRzLCBhcHBseUxheW91dHNEZWZhdWx0cywgYXBwbHlTY2FsZURlZmF1bHRzXSk7XG5cbi8qKlxuICogQ29udmVydHMgdGhlIGdpdmVuIGZvbnQgb2JqZWN0IGludG8gYSBDU1MgZm9udCBzdHJpbmcuXG4gKiBAcGFyYW0gZm9udCAtIEEgZm9udCBvYmplY3QuXG4gKiBAcmV0dXJuIFRoZSBDU1MgZm9udCBzdHJpbmcuIFNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvZm9udFxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gdG9Gb250U3RyaW5nKGZvbnQpIHtcbiAgaWYgKCFmb250IHx8IGlzTnVsbE9yVW5kZWYoZm9udC5zaXplKSB8fCBpc051bGxPclVuZGVmKGZvbnQuZmFtaWx5KSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiAoZm9udC5zdHlsZSA/IGZvbnQuc3R5bGUgKyAnICcgOiAnJykgKyAoZm9udC53ZWlnaHQgPyBmb250LndlaWdodCArICcgJyA6ICcnKSArIGZvbnQuc2l6ZSArICdweCAnICsgZm9udC5mYW1pbHk7XG59XG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIF9tZWFzdXJlVGV4dChjdHgsIGRhdGEsIGdjLCBsb25nZXN0LCBzdHJpbmcpIHtcbiAgbGV0IHRleHRXaWR0aCA9IGRhdGFbc3RyaW5nXTtcbiAgaWYgKCF0ZXh0V2lkdGgpIHtcbiAgICB0ZXh0V2lkdGggPSBkYXRhW3N0cmluZ10gPSBjdHgubWVhc3VyZVRleHQoc3RyaW5nKS53aWR0aDtcbiAgICBnYy5wdXNoKHN0cmluZyk7XG4gIH1cbiAgaWYgKHRleHRXaWR0aCA+IGxvbmdlc3QpIHtcbiAgICBsb25nZXN0ID0gdGV4dFdpZHRoO1xuICB9XG4gIHJldHVybiBsb25nZXN0O1xufVxuLyoqXG4gKiBAcHJpdmF0ZVxuICovIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG5mdW5jdGlvbiBfbG9uZ2VzdFRleHQoY3R4LCBmb250LCBhcnJheU9mVGhpbmdzLCBjYWNoZSkge1xuICBjYWNoZSA9IGNhY2hlIHx8IHt9O1xuICBsZXQgZGF0YSA9IGNhY2hlLmRhdGEgPSBjYWNoZS5kYXRhIHx8IHt9O1xuICBsZXQgZ2MgPSBjYWNoZS5nYXJiYWdlQ29sbGVjdCA9IGNhY2hlLmdhcmJhZ2VDb2xsZWN0IHx8IFtdO1xuICBpZiAoY2FjaGUuZm9udCAhPT0gZm9udCkge1xuICAgIGRhdGEgPSBjYWNoZS5kYXRhID0ge307XG4gICAgZ2MgPSBjYWNoZS5nYXJiYWdlQ29sbGVjdCA9IFtdO1xuICAgIGNhY2hlLmZvbnQgPSBmb250O1xuICB9XG4gIGN0eC5zYXZlKCk7XG4gIGN0eC5mb250ID0gZm9udDtcbiAgbGV0IGxvbmdlc3QgPSAwO1xuICBjb25zdCBpbGVuID0gYXJyYXlPZlRoaW5ncy5sZW5ndGg7XG4gIGxldCBpLCBqLCBqbGVuLCB0aGluZywgbmVzdGVkVGhpbmc7XG4gIGZvciAoaSA9IDA7IGkgPCBpbGVuOyBpKyspIHtcbiAgICB0aGluZyA9IGFycmF5T2ZUaGluZ3NbaV07XG4gICAgLy8gVW5kZWZpbmVkIHN0cmluZ3MgYW5kIGFycmF5cyBzaG91bGQgbm90IGJlIG1lYXN1cmVkXG4gICAgaWYgKHRoaW5nICE9PSB1bmRlZmluZWQgJiYgdGhpbmcgIT09IG51bGwgJiYgIWlzQXJyYXkodGhpbmcpKSB7XG4gICAgICBsb25nZXN0ID0gX21lYXN1cmVUZXh0KGN0eCwgZGF0YSwgZ2MsIGxvbmdlc3QsIHRoaW5nKTtcbiAgICB9IGVsc2UgaWYgKGlzQXJyYXkodGhpbmcpKSB7XG4gICAgICAvLyBpZiBpdCBpcyBhbiBhcnJheSBsZXRzIG1lYXN1cmUgZWFjaCBlbGVtZW50XG4gICAgICAvLyB0byBkbyBtYXliZSBzaW1wbGlmeSB0aGlzIGZ1bmN0aW9uIGEgYml0IHNvIHdlIGNhbiBkbyB0aGlzIG1vcmUgcmVjdXJzaXZlbHk/XG4gICAgICBmb3IgKGogPSAwLCBqbGVuID0gdGhpbmcubGVuZ3RoOyBqIDwgamxlbjsgaisrKSB7XG4gICAgICAgIG5lc3RlZFRoaW5nID0gdGhpbmdbal07XG4gICAgICAgIC8vIFVuZGVmaW5lZCBzdHJpbmdzIGFuZCBhcnJheXMgc2hvdWxkIG5vdCBiZSBtZWFzdXJlZFxuICAgICAgICBpZiAobmVzdGVkVGhpbmcgIT09IHVuZGVmaW5lZCAmJiBuZXN0ZWRUaGluZyAhPT0gbnVsbCAmJiAhaXNBcnJheShuZXN0ZWRUaGluZykpIHtcbiAgICAgICAgICBsb25nZXN0ID0gX21lYXN1cmVUZXh0KGN0eCwgZGF0YSwgZ2MsIGxvbmdlc3QsIG5lc3RlZFRoaW5nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBjdHgucmVzdG9yZSgpO1xuICBjb25zdCBnY0xlbiA9IGdjLmxlbmd0aCAvIDI7XG4gIGlmIChnY0xlbiA+IGFycmF5T2ZUaGluZ3MubGVuZ3RoKSB7XG4gICAgZm9yIChpID0gMDsgaSA8IGdjTGVuOyBpKyspIHtcbiAgICAgIGRlbGV0ZSBkYXRhW2djW2ldXTtcbiAgICB9XG4gICAgZ2Muc3BsaWNlKDAsIGdjTGVuKTtcbiAgfVxuICByZXR1cm4gbG9uZ2VzdDtcbn1cbi8qKlxuICogUmV0dXJucyB0aGUgYWxpZ25lZCBwaXhlbCB2YWx1ZSB0byBhdm9pZCBhbnRpLWFsaWFzaW5nIGJsdXJcbiAqIEBwYXJhbSBjaGFydCAtIFRoZSBjaGFydCBpbnN0YW5jZS5cbiAqIEBwYXJhbSBwaXhlbCAtIEEgcGl4ZWwgdmFsdWUuXG4gKiBAcGFyYW0gd2lkdGggLSBUaGUgd2lkdGggb2YgdGhlIGVsZW1lbnQuXG4gKiBAcmV0dXJucyBUaGUgYWxpZ25lZCBwaXhlbCB2YWx1ZS5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIF9hbGlnblBpeGVsKGNoYXJ0LCBwaXhlbCwgd2lkdGgpIHtcbiAgY29uc3QgZGV2aWNlUGl4ZWxSYXRpbyA9IGNoYXJ0LmN1cnJlbnREZXZpY2VQaXhlbFJhdGlvO1xuICBjb25zdCBoYWxmV2lkdGggPSB3aWR0aCAhPT0gMCA/IE1hdGgubWF4KHdpZHRoIC8gMiwgMC41KSA6IDA7XG4gIHJldHVybiBNYXRoLnJvdW5kKChwaXhlbCAtIGhhbGZXaWR0aCkgKiBkZXZpY2VQaXhlbFJhdGlvKSAvIGRldmljZVBpeGVsUmF0aW8gKyBoYWxmV2lkdGg7XG59XG4vKipcbiAqIENsZWFycyB0aGUgZW50aXJlIGNhbnZhcy5cbiAqL1xuZnVuY3Rpb24gY2xlYXJDYW52YXMoY2FudmFzLCBjdHgpIHtcbiAgaWYgKCFjdHggJiYgIWNhbnZhcykge1xuICAgIHJldHVybjtcbiAgfVxuICBjdHggPSBjdHggfHwgY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG4gIGN0eC5zYXZlKCk7XG4gIC8vIGNhbnZhcy53aWR0aCBhbmQgY2FudmFzLmhlaWdodCBkbyBub3QgY29uc2lkZXIgdGhlIGNhbnZhcyB0cmFuc2Zvcm0sXG4gIC8vIHdoaWxlIGNsZWFyUmVjdCBkb2VzXG4gIGN0eC5yZXNldFRyYW5zZm9ybSgpO1xuICBjdHguY2xlYXJSZWN0KDAsIDAsIGNhbnZhcy53aWR0aCwgY2FudmFzLmhlaWdodCk7XG4gIGN0eC5yZXN0b3JlKCk7XG59XG5mdW5jdGlvbiBkcmF3UG9pbnQoY3R4LCBvcHRpb25zLCB4LCB5KSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgZHJhd1BvaW50TGVnZW5kKGN0eCwgb3B0aW9ucywgeCwgeSwgbnVsbCk7XG59XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuZnVuY3Rpb24gZHJhd1BvaW50TGVnZW5kKGN0eCwgb3B0aW9ucywgeCwgeSwgdykge1xuICBsZXQgdHlwZSwgeE9mZnNldCwgeU9mZnNldCwgc2l6ZSwgY29ybmVyUmFkaXVzLCB3aWR0aCwgeE9mZnNldFcsIHlPZmZzZXRXO1xuICBjb25zdCBzdHlsZSA9IG9wdGlvbnMucG9pbnRTdHlsZTtcbiAgY29uc3Qgcm90YXRpb24gPSBvcHRpb25zLnJvdGF0aW9uO1xuICBjb25zdCByYWRpdXMgPSBvcHRpb25zLnJhZGl1cztcbiAgbGV0IHJhZCA9IChyb3RhdGlvbiB8fCAwKSAqIFJBRF9QRVJfREVHO1xuICBpZiAoc3R5bGUgJiYgdHlwZW9mIHN0eWxlID09PSAnb2JqZWN0Jykge1xuICAgIHR5cGUgPSBzdHlsZS50b1N0cmluZygpO1xuICAgIGlmICh0eXBlID09PSAnW29iamVjdCBIVE1MSW1hZ2VFbGVtZW50XScgfHwgdHlwZSA9PT0gJ1tvYmplY3QgSFRNTENhbnZhc0VsZW1lbnRdJykge1xuICAgICAgY3R4LnNhdmUoKTtcbiAgICAgIGN0eC50cmFuc2xhdGUoeCwgeSk7XG4gICAgICBjdHgucm90YXRlKHJhZCk7XG4gICAgICBjdHguZHJhd0ltYWdlKHN0eWxlLCAtc3R5bGUud2lkdGggLyAyLCAtc3R5bGUuaGVpZ2h0IC8gMiwgc3R5bGUud2lkdGgsIHN0eWxlLmhlaWdodCk7XG4gICAgICBjdHgucmVzdG9yZSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuICBpZiAoaXNOYU4ocmFkaXVzKSB8fCByYWRpdXMgPD0gMCkge1xuICAgIHJldHVybjtcbiAgfVxuICBjdHguYmVnaW5QYXRoKCk7XG4gIHN3aXRjaCAoc3R5bGUpIHtcbiAgICAvLyBEZWZhdWx0IGluY2x1ZGVzIGNpcmNsZVxuICAgIGRlZmF1bHQ6XG4gICAgICBpZiAodykge1xuICAgICAgICBjdHguZWxsaXBzZSh4LCB5LCB3IC8gMiwgcmFkaXVzLCAwLCAwLCBUQVUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY3R4LmFyYyh4LCB5LCByYWRpdXMsIDAsIFRBVSk7XG4gICAgICB9XG4gICAgICBjdHguY2xvc2VQYXRoKCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICd0cmlhbmdsZSc6XG4gICAgICB3aWR0aCA9IHcgPyB3IC8gMiA6IHJhZGl1cztcbiAgICAgIGN0eC5tb3ZlVG8oeCArIE1hdGguc2luKHJhZCkgKiB3aWR0aCwgeSAtIE1hdGguY29zKHJhZCkgKiByYWRpdXMpO1xuICAgICAgcmFkICs9IFRXT19USElSRFNfUEk7XG4gICAgICBjdHgubGluZVRvKHggKyBNYXRoLnNpbihyYWQpICogd2lkdGgsIHkgLSBNYXRoLmNvcyhyYWQpICogcmFkaXVzKTtcbiAgICAgIHJhZCArPSBUV09fVEhJUkRTX1BJO1xuICAgICAgY3R4LmxpbmVUbyh4ICsgTWF0aC5zaW4ocmFkKSAqIHdpZHRoLCB5IC0gTWF0aC5jb3MocmFkKSAqIHJhZGl1cyk7XG4gICAgICBjdHguY2xvc2VQYXRoKCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdyZWN0Um91bmRlZCc6XG4gICAgICAvLyBOT1RFOiB0aGUgcm91bmRlZCByZWN0IGltcGxlbWVudGF0aW9uIGNoYW5nZWQgdG8gdXNlIGBhcmNgIGluc3RlYWQgb2ZcbiAgICAgIC8vIGBxdWFkcmF0aWNDdXJ2ZVRvYCBzaW5jZSBpdCBnZW5lcmF0ZXMgYmV0dGVyIHJlc3VsdHMgd2hlbiByZWN0IGlzXG4gICAgICAvLyBhbG1vc3QgYSBjaXJjbGUuIDAuNTE2IChpbnN0ZWFkIG9mIDAuNSkgcHJvZHVjZXMgcmVzdWx0cyB3aXRoIHZpc3VhbGx5XG4gICAgICAvLyBjbG9zZXIgcHJvcG9ydGlvbiB0byB0aGUgcHJldmlvdXMgaW1wbCBhbmQgaXQgaXMgaW5zY3JpYmVkIGluIHRoZVxuICAgICAgLy8gY2lyY2xlIHdpdGggYHJhZGl1c2AuIEZvciBtb3JlIGRldGFpbHMsIHNlZSB0aGUgZm9sbG93aW5nIFBSczpcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9jaGFydGpzL0NoYXJ0LmpzL2lzc3Vlcy81NTk3XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vY2hhcnRqcy9DaGFydC5qcy9pc3N1ZXMvNTg1OFxuICAgICAgY29ybmVyUmFkaXVzID0gcmFkaXVzICogMC41MTY7XG4gICAgICBzaXplID0gcmFkaXVzIC0gY29ybmVyUmFkaXVzO1xuICAgICAgeE9mZnNldCA9IE1hdGguY29zKHJhZCArIFFVQVJURVJfUEkpICogc2l6ZTtcbiAgICAgIHhPZmZzZXRXID0gTWF0aC5jb3MocmFkICsgUVVBUlRFUl9QSSkgKiAodyA/IHcgLyAyIC0gY29ybmVyUmFkaXVzIDogc2l6ZSk7XG4gICAgICB5T2Zmc2V0ID0gTWF0aC5zaW4ocmFkICsgUVVBUlRFUl9QSSkgKiBzaXplO1xuICAgICAgeU9mZnNldFcgPSBNYXRoLnNpbihyYWQgKyBRVUFSVEVSX1BJKSAqICh3ID8gdyAvIDIgLSBjb3JuZXJSYWRpdXMgOiBzaXplKTtcbiAgICAgIGN0eC5hcmMoeCAtIHhPZmZzZXRXLCB5IC0geU9mZnNldCwgY29ybmVyUmFkaXVzLCByYWQgLSBQSSwgcmFkIC0gSEFMRl9QSSk7XG4gICAgICBjdHguYXJjKHggKyB5T2Zmc2V0VywgeSAtIHhPZmZzZXQsIGNvcm5lclJhZGl1cywgcmFkIC0gSEFMRl9QSSwgcmFkKTtcbiAgICAgIGN0eC5hcmMoeCArIHhPZmZzZXRXLCB5ICsgeU9mZnNldCwgY29ybmVyUmFkaXVzLCByYWQsIHJhZCArIEhBTEZfUEkpO1xuICAgICAgY3R4LmFyYyh4IC0geU9mZnNldFcsIHkgKyB4T2Zmc2V0LCBjb3JuZXJSYWRpdXMsIHJhZCArIEhBTEZfUEksIHJhZCArIFBJKTtcbiAgICAgIGN0eC5jbG9zZVBhdGgoKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3JlY3QnOlxuICAgICAgaWYgKCFyb3RhdGlvbikge1xuICAgICAgICBzaXplID0gTWF0aC5TUVJUMV8yICogcmFkaXVzO1xuICAgICAgICB3aWR0aCA9IHcgPyB3IC8gMiA6IHNpemU7XG4gICAgICAgIGN0eC5yZWN0KHggLSB3aWR0aCwgeSAtIHNpemUsIDIgKiB3aWR0aCwgMiAqIHNpemUpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHJhZCArPSBRVUFSVEVSX1BJO1xuICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICBjYXNlICdyZWN0Um90JzpcbiAgICAgIHhPZmZzZXRXID0gTWF0aC5jb3MocmFkKSAqICh3ID8gdyAvIDIgOiByYWRpdXMpO1xuICAgICAgeE9mZnNldCA9IE1hdGguY29zKHJhZCkgKiByYWRpdXM7XG4gICAgICB5T2Zmc2V0ID0gTWF0aC5zaW4ocmFkKSAqIHJhZGl1cztcbiAgICAgIHlPZmZzZXRXID0gTWF0aC5zaW4ocmFkKSAqICh3ID8gdyAvIDIgOiByYWRpdXMpO1xuICAgICAgY3R4Lm1vdmVUbyh4IC0geE9mZnNldFcsIHkgLSB5T2Zmc2V0KTtcbiAgICAgIGN0eC5saW5lVG8oeCArIHlPZmZzZXRXLCB5IC0geE9mZnNldCk7XG4gICAgICBjdHgubGluZVRvKHggKyB4T2Zmc2V0VywgeSArIHlPZmZzZXQpO1xuICAgICAgY3R4LmxpbmVUbyh4IC0geU9mZnNldFcsIHkgKyB4T2Zmc2V0KTtcbiAgICAgIGN0eC5jbG9zZVBhdGgoKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2Nyb3NzUm90JzpcbiAgICAgIHJhZCArPSBRVUFSVEVSX1BJO1xuICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICBjYXNlICdjcm9zcyc6XG4gICAgICB4T2Zmc2V0VyA9IE1hdGguY29zKHJhZCkgKiAodyA/IHcgLyAyIDogcmFkaXVzKTtcbiAgICAgIHhPZmZzZXQgPSBNYXRoLmNvcyhyYWQpICogcmFkaXVzO1xuICAgICAgeU9mZnNldCA9IE1hdGguc2luKHJhZCkgKiByYWRpdXM7XG4gICAgICB5T2Zmc2V0VyA9IE1hdGguc2luKHJhZCkgKiAodyA/IHcgLyAyIDogcmFkaXVzKTtcbiAgICAgIGN0eC5tb3ZlVG8oeCAtIHhPZmZzZXRXLCB5IC0geU9mZnNldCk7XG4gICAgICBjdHgubGluZVRvKHggKyB4T2Zmc2V0VywgeSArIHlPZmZzZXQpO1xuICAgICAgY3R4Lm1vdmVUbyh4ICsgeU9mZnNldFcsIHkgLSB4T2Zmc2V0KTtcbiAgICAgIGN0eC5saW5lVG8oeCAtIHlPZmZzZXRXLCB5ICsgeE9mZnNldCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdzdGFyJzpcbiAgICAgIHhPZmZzZXRXID0gTWF0aC5jb3MocmFkKSAqICh3ID8gdyAvIDIgOiByYWRpdXMpO1xuICAgICAgeE9mZnNldCA9IE1hdGguY29zKHJhZCkgKiByYWRpdXM7XG4gICAgICB5T2Zmc2V0ID0gTWF0aC5zaW4ocmFkKSAqIHJhZGl1cztcbiAgICAgIHlPZmZzZXRXID0gTWF0aC5zaW4ocmFkKSAqICh3ID8gdyAvIDIgOiByYWRpdXMpO1xuICAgICAgY3R4Lm1vdmVUbyh4IC0geE9mZnNldFcsIHkgLSB5T2Zmc2V0KTtcbiAgICAgIGN0eC5saW5lVG8oeCArIHhPZmZzZXRXLCB5ICsgeU9mZnNldCk7XG4gICAgICBjdHgubW92ZVRvKHggKyB5T2Zmc2V0VywgeSAtIHhPZmZzZXQpO1xuICAgICAgY3R4LmxpbmVUbyh4IC0geU9mZnNldFcsIHkgKyB4T2Zmc2V0KTtcbiAgICAgIHJhZCArPSBRVUFSVEVSX1BJO1xuICAgICAgeE9mZnNldFcgPSBNYXRoLmNvcyhyYWQpICogKHcgPyB3IC8gMiA6IHJhZGl1cyk7XG4gICAgICB4T2Zmc2V0ID0gTWF0aC5jb3MocmFkKSAqIHJhZGl1cztcbiAgICAgIHlPZmZzZXQgPSBNYXRoLnNpbihyYWQpICogcmFkaXVzO1xuICAgICAgeU9mZnNldFcgPSBNYXRoLnNpbihyYWQpICogKHcgPyB3IC8gMiA6IHJhZGl1cyk7XG4gICAgICBjdHgubW92ZVRvKHggLSB4T2Zmc2V0VywgeSAtIHlPZmZzZXQpO1xuICAgICAgY3R4LmxpbmVUbyh4ICsgeE9mZnNldFcsIHkgKyB5T2Zmc2V0KTtcbiAgICAgIGN0eC5tb3ZlVG8oeCArIHlPZmZzZXRXLCB5IC0geE9mZnNldCk7XG4gICAgICBjdHgubGluZVRvKHggLSB5T2Zmc2V0VywgeSArIHhPZmZzZXQpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnbGluZSc6XG4gICAgICB4T2Zmc2V0ID0gdyA/IHcgLyAyIDogTWF0aC5jb3MocmFkKSAqIHJhZGl1cztcbiAgICAgIHlPZmZzZXQgPSBNYXRoLnNpbihyYWQpICogcmFkaXVzO1xuICAgICAgY3R4Lm1vdmVUbyh4IC0geE9mZnNldCwgeSAtIHlPZmZzZXQpO1xuICAgICAgY3R4LmxpbmVUbyh4ICsgeE9mZnNldCwgeSArIHlPZmZzZXQpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnZGFzaCc6XG4gICAgICBjdHgubW92ZVRvKHgsIHkpO1xuICAgICAgY3R4LmxpbmVUbyh4ICsgTWF0aC5jb3MocmFkKSAqICh3ID8gdyAvIDIgOiByYWRpdXMpLCB5ICsgTWF0aC5zaW4ocmFkKSAqIHJhZGl1cyk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIGZhbHNlOlxuICAgICAgY3R4LmNsb3NlUGF0aCgpO1xuICAgICAgYnJlYWs7XG4gIH1cbiAgY3R4LmZpbGwoKTtcbiAgaWYgKG9wdGlvbnMuYm9yZGVyV2lkdGggPiAwKSB7XG4gICAgY3R4LnN0cm9rZSgpO1xuICB9XG59XG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcG9pbnQgaXMgaW5zaWRlIHRoZSByZWN0YW5nbGVcbiAqIEBwYXJhbSBwb2ludCAtIFRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcGFyYW0gYXJlYSAtIFRoZSByZWN0YW5nbGVcbiAqIEBwYXJhbSBtYXJnaW4gLSBhbGxvd2VkIG1hcmdpblxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gX2lzUG9pbnRJbkFyZWEocG9pbnQsIGFyZWEsIG1hcmdpbikge1xuICBtYXJnaW4gPSBtYXJnaW4gfHwgMC41OyAvLyBtYXJnaW4gLSBkZWZhdWx0IGlzIHRvIG1hdGNoIHJvdW5kZWQgZGVjaW1hbHNcbiAgcmV0dXJuICFhcmVhIHx8IHBvaW50ICYmIHBvaW50LnggPiBhcmVhLmxlZnQgLSBtYXJnaW4gJiYgcG9pbnQueCA8IGFyZWEucmlnaHQgKyBtYXJnaW4gJiYgcG9pbnQueSA+IGFyZWEudG9wIC0gbWFyZ2luICYmIHBvaW50LnkgPCBhcmVhLmJvdHRvbSArIG1hcmdpbjtcbn1cbmZ1bmN0aW9uIGNsaXBBcmVhKGN0eCwgYXJlYSkge1xuICBjdHguc2F2ZSgpO1xuICBjdHguYmVnaW5QYXRoKCk7XG4gIGN0eC5yZWN0KGFyZWEubGVmdCwgYXJlYS50b3AsIGFyZWEucmlnaHQgLSBhcmVhLmxlZnQsIGFyZWEuYm90dG9tIC0gYXJlYS50b3ApO1xuICBjdHguY2xpcCgpO1xufVxuZnVuY3Rpb24gdW5jbGlwQXJlYShjdHgpIHtcbiAgY3R4LnJlc3RvcmUoKTtcbn1cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gX3N0ZXBwZWRMaW5lVG8oY3R4LCBwcmV2aW91cywgdGFyZ2V0LCBmbGlwLCBtb2RlKSB7XG4gIGlmICghcHJldmlvdXMpIHtcbiAgICByZXR1cm4gY3R4LmxpbmVUbyh0YXJnZXQueCwgdGFyZ2V0LnkpO1xuICB9XG4gIGlmIChtb2RlID09PSAnbWlkZGxlJykge1xuICAgIGNvbnN0IG1pZHBvaW50ID0gKHByZXZpb3VzLnggKyB0YXJnZXQueCkgLyAyLjA7XG4gICAgY3R4LmxpbmVUbyhtaWRwb2ludCwgcHJldmlvdXMueSk7XG4gICAgY3R4LmxpbmVUbyhtaWRwb2ludCwgdGFyZ2V0LnkpO1xuICB9IGVsc2UgaWYgKG1vZGUgPT09ICdhZnRlcicgIT09ICEhZmxpcCkge1xuICAgIGN0eC5saW5lVG8ocHJldmlvdXMueCwgdGFyZ2V0LnkpO1xuICB9IGVsc2Uge1xuICAgIGN0eC5saW5lVG8odGFyZ2V0LngsIHByZXZpb3VzLnkpO1xuICB9XG4gIGN0eC5saW5lVG8odGFyZ2V0LngsIHRhcmdldC55KTtcbn1cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gX2JlemllckN1cnZlVG8oY3R4LCBwcmV2aW91cywgdGFyZ2V0LCBmbGlwKSB7XG4gIGlmICghcHJldmlvdXMpIHtcbiAgICByZXR1cm4gY3R4LmxpbmVUbyh0YXJnZXQueCwgdGFyZ2V0LnkpO1xuICB9XG4gIGN0eC5iZXppZXJDdXJ2ZVRvKGZsaXAgPyBwcmV2aW91cy5jcDF4IDogcHJldmlvdXMuY3AyeCwgZmxpcCA/IHByZXZpb3VzLmNwMXkgOiBwcmV2aW91cy5jcDJ5LCBmbGlwID8gdGFyZ2V0LmNwMnggOiB0YXJnZXQuY3AxeCwgZmxpcCA/IHRhcmdldC5jcDJ5IDogdGFyZ2V0LmNwMXksIHRhcmdldC54LCB0YXJnZXQueSk7XG59XG5mdW5jdGlvbiBzZXRSZW5kZXJPcHRzKGN0eCwgb3B0cykge1xuICBpZiAob3B0cy50cmFuc2xhdGlvbikge1xuICAgIGN0eC50cmFuc2xhdGUob3B0cy50cmFuc2xhdGlvblswXSwgb3B0cy50cmFuc2xhdGlvblsxXSk7XG4gIH1cbiAgaWYgKCFpc051bGxPclVuZGVmKG9wdHMucm90YXRpb24pKSB7XG4gICAgY3R4LnJvdGF0ZShvcHRzLnJvdGF0aW9uKTtcbiAgfVxuICBpZiAob3B0cy5jb2xvcikge1xuICAgIGN0eC5maWxsU3R5bGUgPSBvcHRzLmNvbG9yO1xuICB9XG4gIGlmIChvcHRzLnRleHRBbGlnbikge1xuICAgIGN0eC50ZXh0QWxpZ24gPSBvcHRzLnRleHRBbGlnbjtcbiAgfVxuICBpZiAob3B0cy50ZXh0QmFzZWxpbmUpIHtcbiAgICBjdHgudGV4dEJhc2VsaW5lID0gb3B0cy50ZXh0QmFzZWxpbmU7XG4gIH1cbn1cbmZ1bmN0aW9uIGRlY29yYXRlVGV4dChjdHgsIHgsIHksIGxpbmUsIG9wdHMpIHtcbiAgaWYgKG9wdHMuc3RyaWtldGhyb3VnaCB8fCBvcHRzLnVuZGVybGluZSkge1xuICAgIC8qKlxuICAgICogTm93IHRoYXQgSUUxMSBzdXBwb3J0IGhhcyBiZWVuIGRyb3BwZWQsIHdlIGNhbiB1c2UgbW9yZVxuICAgICogb2YgdGhlIFRleHRNZXRyaWNzIG9iamVjdC4gVGhlIGFjdHVhbCBib3VuZGluZyBib3hlc1xuICAgICogYXJlIHVuZmxhZ2dlZCBpbiBDaHJvbWUsIEZpcmVmb3gsIEVkZ2UsIGFuZCBTYWZhcmkgc28gdGhleVxuICAgICogY2FuIGJlIHNhZmVseSB1c2VkLlxuICAgICogU2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9UZXh0TWV0cmljcyNCcm93c2VyX2NvbXBhdGliaWxpdHlcbiAgICAqL1xuICAgIGNvbnN0IG1ldHJpY3MgPSBjdHgubWVhc3VyZVRleHQobGluZSk7XG4gICAgY29uc3QgbGVmdCA9IHggLSBtZXRyaWNzLmFjdHVhbEJvdW5kaW5nQm94TGVmdDtcbiAgICBjb25zdCByaWdodCA9IHggKyBtZXRyaWNzLmFjdHVhbEJvdW5kaW5nQm94UmlnaHQ7XG4gICAgY29uc3QgdG9wID0geSAtIG1ldHJpY3MuYWN0dWFsQm91bmRpbmdCb3hBc2NlbnQ7XG4gICAgY29uc3QgYm90dG9tID0geSArIG1ldHJpY3MuYWN0dWFsQm91bmRpbmdCb3hEZXNjZW50O1xuICAgIGNvbnN0IHlEZWNvcmF0aW9uID0gb3B0cy5zdHJpa2V0aHJvdWdoID8gKHRvcCArIGJvdHRvbSkgLyAyIDogYm90dG9tO1xuICAgIGN0eC5zdHJva2VTdHlsZSA9IGN0eC5maWxsU3R5bGU7XG4gICAgY3R4LmJlZ2luUGF0aCgpO1xuICAgIGN0eC5saW5lV2lkdGggPSBvcHRzLmRlY29yYXRpb25XaWR0aCB8fCAyO1xuICAgIGN0eC5tb3ZlVG8obGVmdCwgeURlY29yYXRpb24pO1xuICAgIGN0eC5saW5lVG8ocmlnaHQsIHlEZWNvcmF0aW9uKTtcbiAgICBjdHguc3Ryb2tlKCk7XG4gIH1cbn1cbmZ1bmN0aW9uIGRyYXdCYWNrZHJvcChjdHgsIG9wdHMpIHtcbiAgY29uc3Qgb2xkQ29sb3IgPSBjdHguZmlsbFN0eWxlO1xuICBjdHguZmlsbFN0eWxlID0gb3B0cy5jb2xvcjtcbiAgY3R4LmZpbGxSZWN0KG9wdHMubGVmdCwgb3B0cy50b3AsIG9wdHMud2lkdGgsIG9wdHMuaGVpZ2h0KTtcbiAgY3R4LmZpbGxTdHlsZSA9IG9sZENvbG9yO1xufVxuLyoqXG4gKiBSZW5kZXIgdGV4dCBvbnRvIHRoZSBjYW52YXNcbiAqL1xuZnVuY3Rpb24gcmVuZGVyVGV4dChjdHgsIHRleHQsIHgsIHksIGZvbnQsIG9wdHMgPSB7fSkge1xuICBjb25zdCBsaW5lcyA9IGlzQXJyYXkodGV4dCkgPyB0ZXh0IDogW3RleHRdO1xuICBjb25zdCBzdHJva2UgPSBvcHRzLnN0cm9rZVdpZHRoID4gMCAmJiBvcHRzLnN0cm9rZUNvbG9yICE9PSAnJztcbiAgbGV0IGksIGxpbmU7XG4gIGN0eC5zYXZlKCk7XG4gIGN0eC5mb250ID0gZm9udC5zdHJpbmc7XG4gIHNldFJlbmRlck9wdHMoY3R4LCBvcHRzKTtcbiAgZm9yIChpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgKytpKSB7XG4gICAgbGluZSA9IGxpbmVzW2ldO1xuICAgIGlmIChvcHRzLmJhY2tkcm9wKSB7XG4gICAgICBkcmF3QmFja2Ryb3AoY3R4LCBvcHRzLmJhY2tkcm9wKTtcbiAgICB9XG4gICAgaWYgKHN0cm9rZSkge1xuICAgICAgaWYgKG9wdHMuc3Ryb2tlQ29sb3IpIHtcbiAgICAgICAgY3R4LnN0cm9rZVN0eWxlID0gb3B0cy5zdHJva2VDb2xvcjtcbiAgICAgIH1cbiAgICAgIGlmICghaXNOdWxsT3JVbmRlZihvcHRzLnN0cm9rZVdpZHRoKSkge1xuICAgICAgICBjdHgubGluZVdpZHRoID0gb3B0cy5zdHJva2VXaWR0aDtcbiAgICAgIH1cbiAgICAgIGN0eC5zdHJva2VUZXh0KGxpbmUsIHgsIHksIG9wdHMubWF4V2lkdGgpO1xuICAgIH1cbiAgICBjdHguZmlsbFRleHQobGluZSwgeCwgeSwgb3B0cy5tYXhXaWR0aCk7XG4gICAgZGVjb3JhdGVUZXh0KGN0eCwgeCwgeSwgbGluZSwgb3B0cyk7XG4gICAgeSArPSBOdW1iZXIoZm9udC5saW5lSGVpZ2h0KTtcbiAgfVxuICBjdHgucmVzdG9yZSgpO1xufVxuLyoqXG4gKiBBZGQgYSBwYXRoIG9mIGEgcmVjdGFuZ2xlIHdpdGggcm91bmRlZCBjb3JuZXJzIHRvIHRoZSBjdXJyZW50IHN1Yi1wYXRoXG4gKiBAcGFyYW0gY3R4IC0gQ29udGV4dFxuICogQHBhcmFtIHJlY3QgLSBCb3VuZGluZyByZWN0XG4gKi9cbmZ1bmN0aW9uIGFkZFJvdW5kZWRSZWN0UGF0aChjdHgsIHJlY3QpIHtcbiAgY29uc3Qge1xuICAgIHgsXG4gICAgeSxcbiAgICB3LFxuICAgIGgsXG4gICAgcmFkaXVzXG4gIH0gPSByZWN0O1xuICAvLyB0b3AgbGVmdCBhcmNcbiAgY3R4LmFyYyh4ICsgcmFkaXVzLnRvcExlZnQsIHkgKyByYWRpdXMudG9wTGVmdCwgcmFkaXVzLnRvcExlZnQsIDEuNSAqIFBJLCBQSSwgdHJ1ZSk7XG4gIC8vIGxpbmUgZnJvbSB0b3AgbGVmdCB0byBib3R0b20gbGVmdFxuICBjdHgubGluZVRvKHgsIHkgKyBoIC0gcmFkaXVzLmJvdHRvbUxlZnQpO1xuICAvLyBib3R0b20gbGVmdCBhcmNcbiAgY3R4LmFyYyh4ICsgcmFkaXVzLmJvdHRvbUxlZnQsIHkgKyBoIC0gcmFkaXVzLmJvdHRvbUxlZnQsIHJhZGl1cy5ib3R0b21MZWZ0LCBQSSwgSEFMRl9QSSwgdHJ1ZSk7XG4gIC8vIGxpbmUgZnJvbSBib3R0b20gbGVmdCB0byBib3R0b20gcmlnaHRcbiAgY3R4LmxpbmVUbyh4ICsgdyAtIHJhZGl1cy5ib3R0b21SaWdodCwgeSArIGgpO1xuICAvLyBib3R0b20gcmlnaHQgYXJjXG4gIGN0eC5hcmMoeCArIHcgLSByYWRpdXMuYm90dG9tUmlnaHQsIHkgKyBoIC0gcmFkaXVzLmJvdHRvbVJpZ2h0LCByYWRpdXMuYm90dG9tUmlnaHQsIEhBTEZfUEksIDAsIHRydWUpO1xuICAvLyBsaW5lIGZyb20gYm90dG9tIHJpZ2h0IHRvIHRvcCByaWdodFxuICBjdHgubGluZVRvKHggKyB3LCB5ICsgcmFkaXVzLnRvcFJpZ2h0KTtcbiAgLy8gdG9wIHJpZ2h0IGFyY1xuICBjdHguYXJjKHggKyB3IC0gcmFkaXVzLnRvcFJpZ2h0LCB5ICsgcmFkaXVzLnRvcFJpZ2h0LCByYWRpdXMudG9wUmlnaHQsIDAsIC1IQUxGX1BJLCB0cnVlKTtcbiAgLy8gbGluZSBmcm9tIHRvcCByaWdodCB0byB0b3AgbGVmdFxuICBjdHgubGluZVRvKHggKyByYWRpdXMudG9wTGVmdCwgeSk7XG59XG5jb25zdCBMSU5FX0hFSUdIVCA9IC9eKG5vcm1hbHwoXFxkKyg/OlxcLlxcZCspPykocHh8ZW18JSk/KSQvO1xuY29uc3QgRk9OVF9TVFlMRSA9IC9eKG5vcm1hbHxpdGFsaWN8aW5pdGlhbHxpbmhlcml0fHVuc2V0fChvYmxpcXVlKCAtP1swLTldP1swLTldZGVnKT8pKSQvO1xuLyoqXG4gKiBAYWxpYXMgQ2hhcnQuaGVscGVycy5vcHRpb25zXG4gKiBAbmFtZXNwYWNlXG4gKi8gLyoqXG4gICAgKiBDb252ZXJ0cyB0aGUgZ2l2ZW4gbGluZSBoZWlnaHQgYHZhbHVlYCBpbiBwaXhlbHMgZm9yIGEgc3BlY2lmaWMgZm9udCBgc2l6ZWAuXG4gICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgbGluZUhlaWdodCB0byBwYXJzZSAoZWcuIDEuNiwgJzE0cHgnLCAnNzUlJywgJzEuNmVtJykuXG4gICAgKiBAcGFyYW0gc2l6ZSAtIFRoZSBmb250IHNpemUgKGluIHBpeGVscykgdXNlZCB0byByZXNvbHZlIHJlbGF0aXZlIGB2YWx1ZWAuXG4gICAgKiBAcmV0dXJucyBUaGUgZWZmZWN0aXZlIGxpbmUgaGVpZ2h0IGluIHBpeGVscyAoc2l6ZSAqIDEuMiBpZiB2YWx1ZSBpcyBpbnZhbGlkKS5cbiAgICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL2xpbmUtaGVpZ2h0XG4gICAgKiBAc2luY2UgMi43LjBcbiAgICAqL1xuZnVuY3Rpb24gdG9MaW5lSGVpZ2h0KHZhbHVlLCBzaXplKSB7XG4gIGNvbnN0IG1hdGNoZXMgPSAoJycgKyB2YWx1ZSkubWF0Y2goTElORV9IRUlHSFQpO1xuICBpZiAoIW1hdGNoZXMgfHwgbWF0Y2hlc1sxXSA9PT0gJ25vcm1hbCcpIHtcbiAgICByZXR1cm4gc2l6ZSAqIDEuMjtcbiAgfVxuICB2YWx1ZSA9ICttYXRjaGVzWzJdO1xuICBzd2l0Y2ggKG1hdGNoZXNbM10pIHtcbiAgICBjYXNlICdweCc6XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgY2FzZSAnJSc6XG4gICAgICB2YWx1ZSAvPSAxMDA7XG4gICAgICBicmVhaztcbiAgfVxuICByZXR1cm4gc2l6ZSAqIHZhbHVlO1xufVxuY29uc3QgbnVtYmVyT3JaZXJvID0gdiA9PiArdiB8fCAwO1xuZnVuY3Rpb24gX3JlYWRWYWx1ZVRvUHJvcHModmFsdWUsIHByb3BzKSB7XG4gIGNvbnN0IHJldCA9IHt9O1xuICBjb25zdCBvYmpQcm9wcyA9IGlzT2JqZWN0KHByb3BzKTtcbiAgY29uc3Qga2V5cyA9IG9ialByb3BzID8gT2JqZWN0LmtleXMocHJvcHMpIDogcHJvcHM7XG4gIGNvbnN0IHJlYWQgPSBpc09iamVjdCh2YWx1ZSkgPyBvYmpQcm9wcyA/IHByb3AgPT4gdmFsdWVPckRlZmF1bHQodmFsdWVbcHJvcF0sIHZhbHVlW3Byb3BzW3Byb3BdXSkgOiBwcm9wID0+IHZhbHVlW3Byb3BdIDogKCkgPT4gdmFsdWU7XG4gIGZvciAoY29uc3QgcHJvcCBvZiBrZXlzKSB7XG4gICAgcmV0W3Byb3BdID0gbnVtYmVyT3JaZXJvKHJlYWQocHJvcCkpO1xuICB9XG4gIHJldHVybiByZXQ7XG59XG4vKipcbiAqIENvbnZlcnRzIHRoZSBnaXZlbiB2YWx1ZSBpbnRvIGEgVFJCTCBvYmplY3QuXG4gKiBAcGFyYW0gdmFsdWUgLSBJZiBhIG51bWJlciwgc2V0IHRoZSB2YWx1ZSB0byBhbGwgVFJCTCBjb21wb25lbnQsXG4gKiAgZWxzZSwgaWYgYW4gb2JqZWN0LCB1c2UgZGVmaW5lZCBwcm9wZXJ0aWVzIGFuZCBzZXRzIHVuZGVmaW5lZCBvbmVzIHRvIDAuXG4gKiAgeCAvIHkgYXJlIHNob3J0aGFuZHMgZm9yIHNhbWUgdmFsdWUgZm9yIGxlZnQvcmlnaHQgYW5kIHRvcC9ib3R0b20uXG4gKiBAcmV0dXJucyBUaGUgcGFkZGluZyB2YWx1ZXMgKHRvcCwgcmlnaHQsIGJvdHRvbSwgbGVmdClcbiAqIEBzaW5jZSAzLjAuMFxuICovXG5mdW5jdGlvbiB0b1RSQkwodmFsdWUpIHtcbiAgcmV0dXJuIF9yZWFkVmFsdWVUb1Byb3BzKHZhbHVlLCB7XG4gICAgdG9wOiAneScsXG4gICAgcmlnaHQ6ICd4JyxcbiAgICBib3R0b206ICd5JyxcbiAgICBsZWZ0OiAneCdcbiAgfSk7XG59XG4vKipcbiAqIENvbnZlcnRzIHRoZSBnaXZlbiB2YWx1ZSBpbnRvIGEgVFJCTCBjb3JuZXJzIG9iamVjdCAoc2ltaWxhciB3aXRoIGNzcyBib3JkZXItcmFkaXVzKS5cbiAqIEBwYXJhbSB2YWx1ZSAtIElmIGEgbnVtYmVyLCBzZXQgdGhlIHZhbHVlIHRvIGFsbCBUUkJMIGNvcm5lciBjb21wb25lbnRzLFxuICogIGVsc2UsIGlmIGFuIG9iamVjdCwgdXNlIGRlZmluZWQgcHJvcGVydGllcyBhbmQgc2V0cyB1bmRlZmluZWQgb25lcyB0byAwLlxuICogQHJldHVybnMgVGhlIFRSQkwgY29ybmVyIHZhbHVlcyAodG9wTGVmdCwgdG9wUmlnaHQsIGJvdHRvbUxlZnQsIGJvdHRvbVJpZ2h0KVxuICogQHNpbmNlIDMuMC4wXG4gKi9cbmZ1bmN0aW9uIHRvVFJCTENvcm5lcnModmFsdWUpIHtcbiAgcmV0dXJuIF9yZWFkVmFsdWVUb1Byb3BzKHZhbHVlLCBbJ3RvcExlZnQnLCAndG9wUmlnaHQnLCAnYm90dG9tTGVmdCcsICdib3R0b21SaWdodCddKTtcbn1cbi8qKlxuICogQ29udmVydHMgdGhlIGdpdmVuIHZhbHVlIGludG8gYSBwYWRkaW5nIG9iamVjdCB3aXRoIHByZS1jb21wdXRlZCB3aWR0aC9oZWlnaHQuXG4gKiBAcGFyYW0gdmFsdWUgLSBJZiBhIG51bWJlciwgc2V0IHRoZSB2YWx1ZSB0byBhbGwgVFJCTCBjb21wb25lbnQsXG4gKiAgZWxzZSwgaWYgYW4gb2JqZWN0LCB1c2UgZGVmaW5lZCBwcm9wZXJ0aWVzIGFuZCBzZXRzIHVuZGVmaW5lZCBvbmVzIHRvIDAuXG4gKiAgeCAvIHkgYXJlIHNob3J0aGFuZHMgZm9yIHNhbWUgdmFsdWUgZm9yIGxlZnQvcmlnaHQgYW5kIHRvcC9ib3R0b20uXG4gKiBAcmV0dXJucyBUaGUgcGFkZGluZyB2YWx1ZXMgKHRvcCwgcmlnaHQsIGJvdHRvbSwgbGVmdCwgd2lkdGgsIGhlaWdodClcbiAqIEBzaW5jZSAyLjcuMFxuICovXG5mdW5jdGlvbiB0b1BhZGRpbmcodmFsdWUpIHtcbiAgY29uc3Qgb2JqID0gdG9UUkJMKHZhbHVlKTtcbiAgb2JqLndpZHRoID0gb2JqLmxlZnQgKyBvYmoucmlnaHQ7XG4gIG9iai5oZWlnaHQgPSBvYmoudG9wICsgb2JqLmJvdHRvbTtcbiAgcmV0dXJuIG9iajtcbn1cbi8qKlxuICogUGFyc2VzIGZvbnQgb3B0aW9ucyBhbmQgcmV0dXJucyB0aGUgZm9udCBvYmplY3QuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIEEgb2JqZWN0IHRoYXQgY29udGFpbnMgZm9udCBvcHRpb25zIHRvIGJlIHBhcnNlZC5cbiAqIEBwYXJhbSBmYWxsYmFjayAtIEEgb2JqZWN0IHRoYXQgY29udGFpbnMgZmFsbGJhY2sgZm9udCBvcHRpb25zLlxuICogQHJldHVybiBUaGUgZm9udCBvYmplY3QuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiB0b0ZvbnQob3B0aW9ucywgZmFsbGJhY2spIHtcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIGZhbGxiYWNrID0gZmFsbGJhY2sgfHwgZGVmYXVsdHMuZm9udDtcbiAgbGV0IHNpemUgPSB2YWx1ZU9yRGVmYXVsdChvcHRpb25zLnNpemUsIGZhbGxiYWNrLnNpemUpO1xuICBpZiAodHlwZW9mIHNpemUgPT09ICdzdHJpbmcnKSB7XG4gICAgc2l6ZSA9IHBhcnNlSW50KHNpemUsIDEwKTtcbiAgfVxuICBsZXQgc3R5bGUgPSB2YWx1ZU9yRGVmYXVsdChvcHRpb25zLnN0eWxlLCBmYWxsYmFjay5zdHlsZSk7XG4gIGlmIChzdHlsZSAmJiAhKCcnICsgc3R5bGUpLm1hdGNoKEZPTlRfU1RZTEUpKSB7XG4gICAgY29uc29sZS53YXJuKCdJbnZhbGlkIGZvbnQgc3R5bGUgc3BlY2lmaWVkOiBcIicgKyBzdHlsZSArICdcIicpO1xuICAgIHN0eWxlID0gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IGZvbnQgPSB7XG4gICAgZmFtaWx5OiB2YWx1ZU9yRGVmYXVsdChvcHRpb25zLmZhbWlseSwgZmFsbGJhY2suZmFtaWx5KSxcbiAgICBsaW5lSGVpZ2h0OiB0b0xpbmVIZWlnaHQodmFsdWVPckRlZmF1bHQob3B0aW9ucy5saW5lSGVpZ2h0LCBmYWxsYmFjay5saW5lSGVpZ2h0KSwgc2l6ZSksXG4gICAgc2l6ZSxcbiAgICBzdHlsZSxcbiAgICB3ZWlnaHQ6IHZhbHVlT3JEZWZhdWx0KG9wdGlvbnMud2VpZ2h0LCBmYWxsYmFjay53ZWlnaHQpLFxuICAgIHN0cmluZzogJydcbiAgfTtcbiAgZm9udC5zdHJpbmcgPSB0b0ZvbnRTdHJpbmcoZm9udCk7XG4gIHJldHVybiBmb250O1xufVxuLyoqXG4gKiBFdmFsdWF0ZXMgdGhlIGdpdmVuIGBpbnB1dHNgIHNlcXVlbnRpYWxseSBhbmQgcmV0dXJucyB0aGUgZmlyc3QgZGVmaW5lZCB2YWx1ZS5cbiAqIEBwYXJhbSBpbnB1dHMgLSBBbiBhcnJheSBvZiB2YWx1ZXMsIGZhbGxpbmcgYmFjayB0byB0aGUgbGFzdCB2YWx1ZS5cbiAqIEBwYXJhbSBjb250ZXh0IC0gSWYgZGVmaW5lZCBhbmQgdGhlIGN1cnJlbnQgdmFsdWUgaXMgYSBmdW5jdGlvbiwgdGhlIHZhbHVlXG4gKiBpcyBjYWxsZWQgd2l0aCBgY29udGV4dGAgYXMgZmlyc3QgYXJndW1lbnQgYW5kIHRoZSByZXN1bHQgYmVjb21lcyB0aGUgbmV3IGlucHV0LlxuICogQHBhcmFtIGluZGV4IC0gSWYgZGVmaW5lZCBhbmQgdGhlIGN1cnJlbnQgdmFsdWUgaXMgYW4gYXJyYXksIHRoZSB2YWx1ZVxuICogYXQgYGluZGV4YCBiZWNvbWUgdGhlIG5ldyBpbnB1dC5cbiAqIEBwYXJhbSBpbmZvIC0gb2JqZWN0IHRvIHJldHVybiBpbmZvcm1hdGlvbiBhYm91dCByZXNvbHV0aW9uIGluXG4gKiBAcGFyYW0gaW5mby5jYWNoZWFibGUgLSBXaWxsIGJlIHNldCB0byBgZmFsc2VgIGlmIG9wdGlvbiBpcyBub3QgY2FjaGVhYmxlLlxuICogQHNpbmNlIDIuNy4wXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmUoaW5wdXRzLCBjb250ZXh0LCBpbmRleCwgaW5mbykge1xuICBsZXQgY2FjaGVhYmxlID0gdHJ1ZTtcbiAgbGV0IGksIGlsZW4sIHZhbHVlO1xuICBmb3IgKGkgPSAwLCBpbGVuID0gaW5wdXRzLmxlbmd0aDsgaSA8IGlsZW47ICsraSkge1xuICAgIHZhbHVlID0gaW5wdXRzW2ldO1xuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKGNvbnRleHQgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHZhbHVlID0gdmFsdWUoY29udGV4dCk7XG4gICAgICBjYWNoZWFibGUgPSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGluZGV4ICE9PSB1bmRlZmluZWQgJiYgaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHZhbHVlID0gdmFsdWVbaW5kZXggJSB2YWx1ZS5sZW5ndGhdO1xuICAgICAgY2FjaGVhYmxlID0gZmFsc2U7XG4gICAgfVxuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoaW5mbyAmJiAhY2FjaGVhYmxlKSB7XG4gICAgICAgIGluZm8uY2FjaGVhYmxlID0gZmFsc2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICB9XG59XG4vKipcbiAqIEBwYXJhbSBtaW5tYXhcbiAqIEBwYXJhbSBncmFjZVxuICogQHBhcmFtIGJlZ2luQXRaZXJvXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBfYWRkR3JhY2UobWlubWF4LCBncmFjZSwgYmVnaW5BdFplcm8pIHtcbiAgY29uc3Qge1xuICAgIG1pbixcbiAgICBtYXhcbiAgfSA9IG1pbm1heDtcbiAgY29uc3QgY2hhbmdlID0gdG9EaW1lbnNpb24oZ3JhY2UsIChtYXggLSBtaW4pIC8gMik7XG4gIGNvbnN0IGtlZXBaZXJvID0gKHZhbHVlLCBhZGQpID0+IGJlZ2luQXRaZXJvICYmIHZhbHVlID09PSAwID8gMCA6IHZhbHVlICsgYWRkO1xuICByZXR1cm4ge1xuICAgIG1pbjoga2VlcFplcm8obWluLCAtTWF0aC5hYnMoY2hhbmdlKSksXG4gICAgbWF4OiBrZWVwWmVybyhtYXgsIGNoYW5nZSlcbiAgfTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUNvbnRleHQocGFyZW50Q29udGV4dCwgY29udGV4dCkge1xuICByZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKHBhcmVudENvbnRleHQpLCBjb250ZXh0KTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgUHJveHkgZm9yIHJlc29sdmluZyByYXcgdmFsdWVzIGZvciBvcHRpb25zLlxuICogQHBhcmFtIHNjb3BlcyAtIFRoZSBvcHRpb24gc2NvcGVzIHRvIGxvb2sgZm9yIHZhbHVlcywgaW4gcmVzb2x1dGlvbiBvcmRlclxuICogQHBhcmFtIHByZWZpeGVzIC0gVGhlIHByZWZpeGVzIGZvciB2YWx1ZXMsIGluIHJlc29sdXRpb24gb3JkZXIuXG4gKiBAcGFyYW0gcm9vdFNjb3BlcyAtIFRoZSByb290IG9wdGlvbiBzY29wZXNcbiAqIEBwYXJhbSBmYWxsYmFjayAtIFBhcmVudCBzY29wZXMgZmFsbGJhY2tcbiAqIEBwYXJhbSBnZXRUYXJnZXQgLSBjYWxsYmFjayBmb3IgZ2V0dGluZyB0aGUgdGFyZ2V0IGZvciBjaGFuZ2VkIHZhbHVlc1xuICogQHJldHVybnMgUHJveHlcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIF9jcmVhdGVSZXNvbHZlcihzY29wZXMsIHByZWZpeGVzID0gWycnXSwgcm9vdFNjb3BlcywgZmFsbGJhY2ssIGdldFRhcmdldCA9ICgpID0+IHNjb3Blc1swXSkge1xuICBjb25zdCBmaW5hbFJvb3RTY29wZXMgPSByb290U2NvcGVzIHx8IHNjb3BlcztcbiAgaWYgKHR5cGVvZiBmYWxsYmFjayA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBmYWxsYmFjayA9IF9yZXNvbHZlKCdfZmFsbGJhY2snLCBzY29wZXMpO1xuICB9XG4gIGNvbnN0IGNhY2hlID0ge1xuICAgIFtTeW1ib2wudG9TdHJpbmdUYWddOiAnT2JqZWN0JyxcbiAgICBfY2FjaGVhYmxlOiB0cnVlLFxuICAgIF9zY29wZXM6IHNjb3BlcyxcbiAgICBfcm9vdFNjb3BlczogZmluYWxSb290U2NvcGVzLFxuICAgIF9mYWxsYmFjazogZmFsbGJhY2ssXG4gICAgX2dldFRhcmdldDogZ2V0VGFyZ2V0LFxuICAgIG92ZXJyaWRlOiBzY29wZSA9PiBfY3JlYXRlUmVzb2x2ZXIoW3Njb3BlLCAuLi5zY29wZXNdLCBwcmVmaXhlcywgZmluYWxSb290U2NvcGVzLCBmYWxsYmFjaylcbiAgfTtcbiAgcmV0dXJuIG5ldyBQcm94eShjYWNoZSwge1xuICAgIC8qKlxuICAgICogQSB0cmFwIGZvciB0aGUgZGVsZXRlIG9wZXJhdG9yLlxuICAgICovXG4gICAgZGVsZXRlUHJvcGVydHkodGFyZ2V0LCBwcm9wKSB7XG4gICAgICBkZWxldGUgdGFyZ2V0W3Byb3BdOyAvLyByZW1vdmUgZnJvbSBjYWNoZVxuICAgICAgZGVsZXRlIHRhcmdldC5fa2V5czsgLy8gcmVtb3ZlIGNhY2hlZCBrZXlzXG4gICAgICBkZWxldGUgc2NvcGVzWzBdW3Byb3BdOyAvLyByZW1vdmUgZnJvbSB0b3AgbGV2ZWwgc2NvcGVcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sXG4gICAgLyoqXG4gICAgKiBBIHRyYXAgZm9yIGdldHRpbmcgcHJvcGVydHkgdmFsdWVzLlxuICAgICovXG4gICAgZ2V0KHRhcmdldCwgcHJvcCkge1xuICAgICAgcmV0dXJuIF9jYWNoZWQodGFyZ2V0LCBwcm9wLCAoKSA9PiBfcmVzb2x2ZVdpdGhQcmVmaXhlcyhwcm9wLCBwcmVmaXhlcywgc2NvcGVzLCB0YXJnZXQpKTtcbiAgICB9LFxuICAgIC8qKlxuICAgICogQSB0cmFwIGZvciBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLlxuICAgICogQWxzbyB1c2VkIGJ5IE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5cbiAgICAqL1xuICAgIGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIHByb3ApIHtcbiAgICAgIHJldHVybiBSZWZsZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQuX3Njb3Blc1swXSwgcHJvcCk7XG4gICAgfSxcbiAgICAvKipcbiAgICAqIEEgdHJhcCBmb3IgT2JqZWN0LmdldFByb3RvdHlwZU9mLlxuICAgICovXG4gICAgZ2V0UHJvdG90eXBlT2YoKSB7XG4gICAgICByZXR1cm4gUmVmbGVjdC5nZXRQcm90b3R5cGVPZihzY29wZXNbMF0pO1xuICAgIH0sXG4gICAgLyoqXG4gICAgKiBBIHRyYXAgZm9yIHRoZSBpbiBvcGVyYXRvci5cbiAgICAqL1xuICAgIGhhcyh0YXJnZXQsIHByb3ApIHtcbiAgICAgIHJldHVybiBnZXRLZXlzRnJvbUFsbFNjb3Blcyh0YXJnZXQpLmluY2x1ZGVzKHByb3ApO1xuICAgIH0sXG4gICAgLyoqXG4gICAgKiBBIHRyYXAgZm9yIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIGFuZCBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzLlxuICAgICovXG4gICAgb3duS2V5cyh0YXJnZXQpIHtcbiAgICAgIHJldHVybiBnZXRLZXlzRnJvbUFsbFNjb3Blcyh0YXJnZXQpO1xuICAgIH0sXG4gICAgLyoqXG4gICAgKiBBIHRyYXAgZm9yIHNldHRpbmcgcHJvcGVydHkgdmFsdWVzLlxuICAgICovXG4gICAgc2V0KHRhcmdldCwgcHJvcCwgdmFsdWUpIHtcbiAgICAgIGNvbnN0IHN0b3JhZ2UgPSB0YXJnZXQuX3N0b3JhZ2UgfHwgKHRhcmdldC5fc3RvcmFnZSA9IGdldFRhcmdldCgpKTtcbiAgICAgIHRhcmdldFtwcm9wXSA9IHN0b3JhZ2VbcHJvcF0gPSB2YWx1ZTsgLy8gc2V0IHRvIHRvcCBsZXZlbCBzY29wZSArIGNhY2hlXG4gICAgICBkZWxldGUgdGFyZ2V0Ll9rZXlzOyAvLyByZW1vdmUgY2FjaGVkIGtleXNcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG59XG4vKipcbiAqIFJldHVybnMgYW4gUHJveHkgZm9yIHJlc29sdmluZyBvcHRpb24gdmFsdWVzIHdpdGggY29udGV4dC5cbiAqIEBwYXJhbSBwcm94eSAtIFRoZSBQcm94eSByZXR1cm5lZCBieSBgX2NyZWF0ZVJlc29sdmVyYFxuICogQHBhcmFtIGNvbnRleHQgLSBDb250ZXh0IG9iamVjdCBmb3Igc2NyaXB0YWJsZS9pbmRleGFibGUgb3B0aW9uc1xuICogQHBhcmFtIHN1YlByb3h5IC0gVGhlIHByb3h5IHByb3ZpZGVkIGZvciBzY3JpcHRhYmxlIG9wdGlvbnNcbiAqIEBwYXJhbSBkZXNjcmlwdG9yRGVmYXVsdHMgLSBEZWZhdWx0cyBmb3IgZGVzY3JpcHRvcnNcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIF9hdHRhY2hDb250ZXh0KHByb3h5LCBjb250ZXh0LCBzdWJQcm94eSwgZGVzY3JpcHRvckRlZmF1bHRzKSB7XG4gIGNvbnN0IGNhY2hlID0ge1xuICAgIF9jYWNoZWFibGU6IGZhbHNlLFxuICAgIF9wcm94eTogcHJveHksXG4gICAgX2NvbnRleHQ6IGNvbnRleHQsXG4gICAgX3N1YlByb3h5OiBzdWJQcm94eSxcbiAgICBfc3RhY2s6IG5ldyBTZXQoKSxcbiAgICBfZGVzY3JpcHRvcnM6IF9kZXNjcmlwdG9ycyhwcm94eSwgZGVzY3JpcHRvckRlZmF1bHRzKSxcbiAgICBzZXRDb250ZXh0OiBjdHggPT4gX2F0dGFjaENvbnRleHQocHJveHksIGN0eCwgc3ViUHJveHksIGRlc2NyaXB0b3JEZWZhdWx0cyksXG4gICAgb3ZlcnJpZGU6IHNjb3BlID0+IF9hdHRhY2hDb250ZXh0KHByb3h5Lm92ZXJyaWRlKHNjb3BlKSwgY29udGV4dCwgc3ViUHJveHksIGRlc2NyaXB0b3JEZWZhdWx0cylcbiAgfTtcbiAgcmV0dXJuIG5ldyBQcm94eShjYWNoZSwge1xuICAgIC8qKlxuICAgICogQSB0cmFwIGZvciB0aGUgZGVsZXRlIG9wZXJhdG9yLlxuICAgICovXG4gICAgZGVsZXRlUHJvcGVydHkodGFyZ2V0LCBwcm9wKSB7XG4gICAgICBkZWxldGUgdGFyZ2V0W3Byb3BdOyAvLyByZW1vdmUgZnJvbSBjYWNoZVxuICAgICAgZGVsZXRlIHByb3h5W3Byb3BdOyAvLyByZW1vdmUgZnJvbSBwcm94eVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSxcbiAgICAvKipcbiAgICAqIEEgdHJhcCBmb3IgZ2V0dGluZyBwcm9wZXJ0eSB2YWx1ZXMuXG4gICAgKi9cbiAgICBnZXQodGFyZ2V0LCBwcm9wLCByZWNlaXZlcikge1xuICAgICAgcmV0dXJuIF9jYWNoZWQodGFyZ2V0LCBwcm9wLCAoKSA9PiBfcmVzb2x2ZVdpdGhDb250ZXh0KHRhcmdldCwgcHJvcCwgcmVjZWl2ZXIpKTtcbiAgICB9LFxuICAgIC8qKlxuICAgICogQSB0cmFwIGZvciBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLlxuICAgICogQWxzbyB1c2VkIGJ5IE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5cbiAgICAqL1xuICAgIGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIHByb3ApIHtcbiAgICAgIHJldHVybiB0YXJnZXQuX2Rlc2NyaXB0b3JzLmFsbEtleXMgPyBSZWZsZWN0Lmhhcyhwcm94eSwgcHJvcCkgPyB7XG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgICAgfSA6IHVuZGVmaW5lZCA6IFJlZmxlY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHByb3h5LCBwcm9wKTtcbiAgICB9LFxuICAgIC8qKlxuICAgICogQSB0cmFwIGZvciBPYmplY3QuZ2V0UHJvdG90eXBlT2YuXG4gICAgKi9cbiAgICBnZXRQcm90b3R5cGVPZigpIHtcbiAgICAgIHJldHVybiBSZWZsZWN0LmdldFByb3RvdHlwZU9mKHByb3h5KTtcbiAgICB9LFxuICAgIC8qKlxuICAgICogQSB0cmFwIGZvciB0aGUgaW4gb3BlcmF0b3IuXG4gICAgKi9cbiAgICBoYXModGFyZ2V0LCBwcm9wKSB7XG4gICAgICByZXR1cm4gUmVmbGVjdC5oYXMocHJveHksIHByb3ApO1xuICAgIH0sXG4gICAgLyoqXG4gICAgKiBBIHRyYXAgZm9yIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIGFuZCBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzLlxuICAgICovXG4gICAgb3duS2V5cygpIHtcbiAgICAgIHJldHVybiBSZWZsZWN0Lm93bktleXMocHJveHkpO1xuICAgIH0sXG4gICAgLyoqXG4gICAgKiBBIHRyYXAgZm9yIHNldHRpbmcgcHJvcGVydHkgdmFsdWVzLlxuICAgICovXG4gICAgc2V0KHRhcmdldCwgcHJvcCwgdmFsdWUpIHtcbiAgICAgIHByb3h5W3Byb3BdID0gdmFsdWU7IC8vIHNldCB0byBwcm94eVxuICAgICAgZGVsZXRlIHRhcmdldFtwcm9wXTsgLy8gcmVtb3ZlIGZyb20gY2FjaGVcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG59XG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIF9kZXNjcmlwdG9ycyhwcm94eSwgZGVmYXVsdHMgPSB7XG4gIHNjcmlwdGFibGU6IHRydWUsXG4gIGluZGV4YWJsZTogdHJ1ZVxufSkge1xuICBjb25zdCB7XG4gICAgX3NjcmlwdGFibGUgPSBkZWZhdWx0cy5zY3JpcHRhYmxlLFxuICAgIF9pbmRleGFibGUgPSBkZWZhdWx0cy5pbmRleGFibGUsXG4gICAgX2FsbEtleXMgPSBkZWZhdWx0cy5hbGxLZXlzXG4gIH0gPSBwcm94eTtcbiAgcmV0dXJuIHtcbiAgICBhbGxLZXlzOiBfYWxsS2V5cyxcbiAgICBzY3JpcHRhYmxlOiBfc2NyaXB0YWJsZSxcbiAgICBpbmRleGFibGU6IF9pbmRleGFibGUsXG4gICAgaXNTY3JpcHRhYmxlOiBpc0Z1bmN0aW9uKF9zY3JpcHRhYmxlKSA/IF9zY3JpcHRhYmxlIDogKCkgPT4gX3NjcmlwdGFibGUsXG4gICAgaXNJbmRleGFibGU6IGlzRnVuY3Rpb24oX2luZGV4YWJsZSkgPyBfaW5kZXhhYmxlIDogKCkgPT4gX2luZGV4YWJsZVxuICB9O1xufVxuY29uc3QgcmVhZEtleSA9IChwcmVmaXgsIG5hbWUpID0+IHByZWZpeCA/IHByZWZpeCArIF9jYXBpdGFsaXplKG5hbWUpIDogbmFtZTtcbmNvbnN0IG5lZWRzU3ViUmVzb2x2ZXIgPSAocHJvcCwgdmFsdWUpID0+IGlzT2JqZWN0KHZhbHVlKSAmJiBwcm9wICE9PSAnYWRhcHRlcnMnICYmIChPYmplY3QuZ2V0UHJvdG90eXBlT2YodmFsdWUpID09PSBudWxsIHx8IHZhbHVlLmNvbnN0cnVjdG9yID09PSBPYmplY3QpO1xuZnVuY3Rpb24gX2NhY2hlZCh0YXJnZXQsIHByb3AsIHJlc29sdmUpIHtcbiAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0YXJnZXQsIHByb3ApIHx8IHByb3AgPT09ICdjb25zdHJ1Y3RvcicpIHtcbiAgICByZXR1cm4gdGFyZ2V0W3Byb3BdO1xuICB9XG4gIGNvbnN0IHZhbHVlID0gcmVzb2x2ZSgpO1xuICAvLyBjYWNoZSB0aGUgcmVzb2x2ZWQgdmFsdWVcbiAgdGFyZ2V0W3Byb3BdID0gdmFsdWU7XG4gIHJldHVybiB2YWx1ZTtcbn1cbmZ1bmN0aW9uIF9yZXNvbHZlV2l0aENvbnRleHQodGFyZ2V0LCBwcm9wLCByZWNlaXZlcikge1xuICBjb25zdCB7XG4gICAgX3Byb3h5LFxuICAgIF9jb250ZXh0LFxuICAgIF9zdWJQcm94eSxcbiAgICBfZGVzY3JpcHRvcnM6IGRlc2NyaXB0b3JzXG4gIH0gPSB0YXJnZXQ7XG4gIGxldCB2YWx1ZSA9IF9wcm94eVtwcm9wXTsgLy8gcmVzb2x2ZSBmcm9tIHByb3h5XG4gIC8vIHJlc29sdmUgd2l0aCBjb250ZXh0XG4gIGlmIChpc0Z1bmN0aW9uKHZhbHVlKSAmJiBkZXNjcmlwdG9ycy5pc1NjcmlwdGFibGUocHJvcCkpIHtcbiAgICB2YWx1ZSA9IF9yZXNvbHZlU2NyaXB0YWJsZShwcm9wLCB2YWx1ZSwgdGFyZ2V0LCByZWNlaXZlcik7XG4gIH1cbiAgaWYgKGlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aCkge1xuICAgIHZhbHVlID0gX3Jlc29sdmVBcnJheShwcm9wLCB2YWx1ZSwgdGFyZ2V0LCBkZXNjcmlwdG9ycy5pc0luZGV4YWJsZSk7XG4gIH1cbiAgaWYgKG5lZWRzU3ViUmVzb2x2ZXIocHJvcCwgdmFsdWUpKSB7XG4gICAgLy8gaWYgdGhlIHJlc29sdmVkIHZhbHVlIGlzIGFuIG9iamVjdCwgY3JlYXRlIGEgc3ViIHJlc29sdmVyIGZvciBpdFxuICAgIHZhbHVlID0gX2F0dGFjaENvbnRleHQodmFsdWUsIF9jb250ZXh0LCBfc3ViUHJveHkgJiYgX3N1YlByb3h5W3Byb3BdLCBkZXNjcmlwdG9ycyk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuZnVuY3Rpb24gX3Jlc29sdmVTY3JpcHRhYmxlKHByb3AsIGdldFZhbHVlLCB0YXJnZXQsIHJlY2VpdmVyKSB7XG4gIGNvbnN0IHtcbiAgICBfcHJveHksXG4gICAgX2NvbnRleHQsXG4gICAgX3N1YlByb3h5LFxuICAgIF9zdGFja1xuICB9ID0gdGFyZ2V0O1xuICBpZiAoX3N0YWNrLmhhcyhwcm9wKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignUmVjdXJzaW9uIGRldGVjdGVkOiAnICsgQXJyYXkuZnJvbShfc3RhY2spLmpvaW4oJy0+JykgKyAnLT4nICsgcHJvcCk7XG4gIH1cbiAgX3N0YWNrLmFkZChwcm9wKTtcbiAgbGV0IHZhbHVlID0gZ2V0VmFsdWUoX2NvbnRleHQsIF9zdWJQcm94eSB8fCByZWNlaXZlcik7XG4gIF9zdGFjay5kZWxldGUocHJvcCk7XG4gIGlmIChuZWVkc1N1YlJlc29sdmVyKHByb3AsIHZhbHVlKSkge1xuICAgIC8vIFdoZW4gc2NyaXB0YWJsZSBvcHRpb24gcmV0dXJucyBhbiBvYmplY3QsIGNyZWF0ZSBhIHJlc29sdmVyIG9uIHRoYXQuXG4gICAgdmFsdWUgPSBjcmVhdGVTdWJSZXNvbHZlcihfcHJveHkuX3Njb3BlcywgX3Byb3h5LCBwcm9wLCB2YWx1ZSk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuZnVuY3Rpb24gX3Jlc29sdmVBcnJheShwcm9wLCB2YWx1ZSwgdGFyZ2V0LCBpc0luZGV4YWJsZSkge1xuICBjb25zdCB7XG4gICAgX3Byb3h5LFxuICAgIF9jb250ZXh0LFxuICAgIF9zdWJQcm94eSxcbiAgICBfZGVzY3JpcHRvcnM6IGRlc2NyaXB0b3JzXG4gIH0gPSB0YXJnZXQ7XG4gIGlmICh0eXBlb2YgX2NvbnRleHQuaW5kZXggIT09ICd1bmRlZmluZWQnICYmIGlzSW5kZXhhYmxlKHByb3ApKSB7XG4gICAgcmV0dXJuIHZhbHVlW19jb250ZXh0LmluZGV4ICUgdmFsdWUubGVuZ3RoXTtcbiAgfSBlbHNlIGlmIChpc09iamVjdCh2YWx1ZVswXSkpIHtcbiAgICAvLyBBcnJheSBvZiBvYmplY3RzLCByZXR1cm4gYXJyYXkgb3IgcmVzb2x2ZXJzXG4gICAgY29uc3QgYXJyID0gdmFsdWU7XG4gICAgY29uc3Qgc2NvcGVzID0gX3Byb3h5Ll9zY29wZXMuZmlsdGVyKHMgPT4gcyAhPT0gYXJyKTtcbiAgICB2YWx1ZSA9IFtdO1xuICAgIGZvciAoY29uc3QgaXRlbSBvZiBhcnIpIHtcbiAgICAgIGNvbnN0IHJlc29sdmVyID0gY3JlYXRlU3ViUmVzb2x2ZXIoc2NvcGVzLCBfcHJveHksIHByb3AsIGl0ZW0pO1xuICAgICAgdmFsdWUucHVzaChfYXR0YWNoQ29udGV4dChyZXNvbHZlciwgX2NvbnRleHQsIF9zdWJQcm94eSAmJiBfc3ViUHJveHlbcHJvcF0sIGRlc2NyaXB0b3JzKSk7XG4gICAgfVxuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cbmZ1bmN0aW9uIHJlc29sdmVGYWxsYmFjayhmYWxsYmFjaywgcHJvcCwgdmFsdWUpIHtcbiAgcmV0dXJuIGlzRnVuY3Rpb24oZmFsbGJhY2spID8gZmFsbGJhY2socHJvcCwgdmFsdWUpIDogZmFsbGJhY2s7XG59XG5jb25zdCBnZXRTY29wZSA9IChrZXksIHBhcmVudCkgPT4ga2V5ID09PSB0cnVlID8gcGFyZW50IDogdHlwZW9mIGtleSA9PT0gJ3N0cmluZycgPyByZXNvbHZlT2JqZWN0S2V5KHBhcmVudCwga2V5KSA6IHVuZGVmaW5lZDtcbmZ1bmN0aW9uIGFkZFNjb3BlcyhzZXQsIHBhcmVudFNjb3Blcywga2V5LCBwYXJlbnRGYWxsYmFjaywgdmFsdWUpIHtcbiAgZm9yIChjb25zdCBwYXJlbnQgb2YgcGFyZW50U2NvcGVzKSB7XG4gICAgY29uc3Qgc2NvcGUgPSBnZXRTY29wZShrZXksIHBhcmVudCk7XG4gICAgaWYgKHNjb3BlKSB7XG4gICAgICBzZXQuYWRkKHNjb3BlKTtcbiAgICAgIGNvbnN0IGZhbGxiYWNrID0gcmVzb2x2ZUZhbGxiYWNrKHNjb3BlLl9mYWxsYmFjaywga2V5LCB2YWx1ZSk7XG4gICAgICBpZiAodHlwZW9mIGZhbGxiYWNrICE9PSAndW5kZWZpbmVkJyAmJiBmYWxsYmFjayAhPT0ga2V5ICYmIGZhbGxiYWNrICE9PSBwYXJlbnRGYWxsYmFjaykge1xuICAgICAgICAvLyBXaGVuIHdlIHJlYWNoIHRoZSBkZXNjcmlwdG9yIHRoYXQgZGVmaW5lcyBhIG5ldyBfZmFsbGJhY2ssIHJldHVybiB0aGF0LlxuICAgICAgICAvLyBUaGUgZmFsbGJhY2sgd2lsbCByZXN1bWUgdG8gdGhhdCBuZXcgc2NvcGUuXG4gICAgICAgIHJldHVybiBmYWxsYmFjaztcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHNjb3BlID09PSBmYWxzZSAmJiB0eXBlb2YgcGFyZW50RmFsbGJhY2sgIT09ICd1bmRlZmluZWQnICYmIGtleSAhPT0gcGFyZW50RmFsbGJhY2spIHtcbiAgICAgIC8vIEZhbGxiYWNrIHRvIGBmYWxzZWAgcmVzdWx0cyB0byBgZmFsc2VgLCB3aGVuIGZhbGxpbmcgYmFjayB0byBkaWZmZXJlbnQga2V5LlxuICAgICAgLy8gRm9yIGV4YW1wbGUgYGludGVyYWN0aW9uYCBmcm9tIGBob3ZlcmAgb3IgYHBsdWdpbnMudG9vbHRpcGAgYW5kIGBhbmltYXRpb25gIGZyb20gYGFuaW1hdGlvbnNgXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gY3JlYXRlU3ViUmVzb2x2ZXIocGFyZW50U2NvcGVzLCByZXNvbHZlciwgcHJvcCwgdmFsdWUpIHtcbiAgY29uc3Qgcm9vdFNjb3BlcyA9IHJlc29sdmVyLl9yb290U2NvcGVzO1xuICBjb25zdCBmYWxsYmFjayA9IHJlc29sdmVGYWxsYmFjayhyZXNvbHZlci5fZmFsbGJhY2ssIHByb3AsIHZhbHVlKTtcbiAgY29uc3QgYWxsU2NvcGVzID0gWy4uLnBhcmVudFNjb3BlcywgLi4ucm9vdFNjb3Blc107XG4gIGNvbnN0IHNldCA9IG5ldyBTZXQoKTtcbiAgc2V0LmFkZCh2YWx1ZSk7XG4gIGxldCBrZXkgPSBhZGRTY29wZXNGcm9tS2V5KHNldCwgYWxsU2NvcGVzLCBwcm9wLCBmYWxsYmFjayB8fCBwcm9wLCB2YWx1ZSk7XG4gIGlmIChrZXkgPT09IG51bGwpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKHR5cGVvZiBmYWxsYmFjayAhPT0gJ3VuZGVmaW5lZCcgJiYgZmFsbGJhY2sgIT09IHByb3ApIHtcbiAgICBrZXkgPSBhZGRTY29wZXNGcm9tS2V5KHNldCwgYWxsU2NvcGVzLCBmYWxsYmFjaywga2V5LCB2YWx1ZSk7XG4gICAgaWYgKGtleSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gX2NyZWF0ZVJlc29sdmVyKEFycmF5LmZyb20oc2V0KSwgWycnXSwgcm9vdFNjb3BlcywgZmFsbGJhY2ssICgpID0+IHN1YkdldFRhcmdldChyZXNvbHZlciwgcHJvcCwgdmFsdWUpKTtcbn1cbmZ1bmN0aW9uIGFkZFNjb3Blc0Zyb21LZXkoc2V0LCBhbGxTY29wZXMsIGtleSwgZmFsbGJhY2ssIGl0ZW0pIHtcbiAgd2hpbGUgKGtleSkge1xuICAgIGtleSA9IGFkZFNjb3BlcyhzZXQsIGFsbFNjb3Blcywga2V5LCBmYWxsYmFjaywgaXRlbSk7XG4gIH1cbiAgcmV0dXJuIGtleTtcbn1cbmZ1bmN0aW9uIHN1YkdldFRhcmdldChyZXNvbHZlciwgcHJvcCwgdmFsdWUpIHtcbiAgY29uc3QgcGFyZW50ID0gcmVzb2x2ZXIuX2dldFRhcmdldCgpO1xuICBpZiAoIShwcm9wIGluIHBhcmVudCkpIHtcbiAgICBwYXJlbnRbcHJvcF0gPSB7fTtcbiAgfVxuICBjb25zdCB0YXJnZXQgPSBwYXJlbnRbcHJvcF07XG4gIGlmIChpc0FycmF5KHRhcmdldCkgJiYgaXNPYmplY3QodmFsdWUpKSB7XG4gICAgLy8gRm9yIGFycmF5IG9mIG9iamVjdHMsIHRoZSBvYmplY3QgaXMgdXNlZCB0byBzdG9yZSB1cGRhdGVkIHZhbHVlc1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICByZXR1cm4gdGFyZ2V0IHx8IHt9O1xufVxuZnVuY3Rpb24gX3Jlc29sdmVXaXRoUHJlZml4ZXMocHJvcCwgcHJlZml4ZXMsIHNjb3BlcywgcHJveHkpIHtcbiAgbGV0IHZhbHVlO1xuICBmb3IgKGNvbnN0IHByZWZpeCBvZiBwcmVmaXhlcykge1xuICAgIHZhbHVlID0gX3Jlc29sdmUocmVhZEtleShwcmVmaXgsIHByb3ApLCBzY29wZXMpO1xuICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gbmVlZHNTdWJSZXNvbHZlcihwcm9wLCB2YWx1ZSkgPyBjcmVhdGVTdWJSZXNvbHZlcihzY29wZXMsIHByb3h5LCBwcm9wLCB2YWx1ZSkgOiB2YWx1ZTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIF9yZXNvbHZlKGtleSwgc2NvcGVzKSB7XG4gIGZvciAoY29uc3Qgc2NvcGUgb2Ygc2NvcGVzKSB7XG4gICAgaWYgKCFzY29wZSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IHZhbHVlID0gc2NvcGVba2V5XTtcbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gZ2V0S2V5c0Zyb21BbGxTY29wZXModGFyZ2V0KSB7XG4gIGxldCBrZXlzID0gdGFyZ2V0Ll9rZXlzO1xuICBpZiAoIWtleXMpIHtcbiAgICBrZXlzID0gdGFyZ2V0Ll9rZXlzID0gcmVzb2x2ZUtleXNGcm9tQWxsU2NvcGVzKHRhcmdldC5fc2NvcGVzKTtcbiAgfVxuICByZXR1cm4ga2V5cztcbn1cbmZ1bmN0aW9uIHJlc29sdmVLZXlzRnJvbUFsbFNjb3BlcyhzY29wZXMpIHtcbiAgY29uc3Qgc2V0ID0gbmV3IFNldCgpO1xuICBmb3IgKGNvbnN0IHNjb3BlIG9mIHNjb3Blcykge1xuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHNjb3BlKS5maWx0ZXIoayA9PiAhay5zdGFydHNXaXRoKCdfJykpKSB7XG4gICAgICBzZXQuYWRkKGtleSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBBcnJheS5mcm9tKHNldCk7XG59XG5mdW5jdGlvbiBfcGFyc2VPYmplY3REYXRhUmFkaWFsU2NhbGUobWV0YSwgZGF0YSwgc3RhcnQsIGNvdW50KSB7XG4gIGNvbnN0IHtcbiAgICBpU2NhbGVcbiAgfSA9IG1ldGE7XG4gIGNvbnN0IHtcbiAgICBrZXkgPSAncidcbiAgfSA9IHRoaXMuX3BhcnNpbmc7XG4gIGNvbnN0IHBhcnNlZCA9IG5ldyBBcnJheShjb3VudCk7XG4gIGxldCBpLCBpbGVuLCBpbmRleCwgaXRlbTtcbiAgZm9yIChpID0gMCwgaWxlbiA9IGNvdW50OyBpIDwgaWxlbjsgKytpKSB7XG4gICAgaW5kZXggPSBpICsgc3RhcnQ7XG4gICAgaXRlbSA9IGRhdGFbaW5kZXhdO1xuICAgIHBhcnNlZFtpXSA9IHtcbiAgICAgIHI6IGlTY2FsZS5wYXJzZShyZXNvbHZlT2JqZWN0S2V5KGl0ZW0sIGtleSksIGluZGV4KVxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHBhcnNlZDtcbn1cbmNvbnN0IEVQU0lMT04gPSBOdW1iZXIuRVBTSUxPTiB8fCAxZS0xNDtcbmNvbnN0IGdldFBvaW50ID0gKHBvaW50cywgaSkgPT4gaSA8IHBvaW50cy5sZW5ndGggJiYgIXBvaW50c1tpXS5za2lwICYmIHBvaW50c1tpXTtcbmNvbnN0IGdldFZhbHVlQXhpcyA9IGluZGV4QXhpcyA9PiBpbmRleEF4aXMgPT09ICd4JyA/ICd5JyA6ICd4JztcbmZ1bmN0aW9uIHNwbGluZUN1cnZlKGZpcnN0UG9pbnQsIG1pZGRsZVBvaW50LCBhZnRlclBvaW50LCB0KSB7XG4gIC8vIFByb3BzIHRvIFJvYiBTcGVuY2VyIGF0IHNjYWxlZCBpbm5vdmF0aW9uIGZvciBoaXMgcG9zdCBvbiBzcGxpbmluZyBiZXR3ZWVuIHBvaW50c1xuICAvLyBodHRwOi8vc2NhbGVkaW5ub3ZhdGlvbi5jb20vYW5hbHl0aWNzL3NwbGluZXMvYWJvdXRTcGxpbmVzLmh0bWxcbiAgLy8gVGhpcyBmdW5jdGlvbiBtdXN0IGFsc28gcmVzcGVjdCBcInNraXBwZWRcIiBwb2ludHNcbiAgY29uc3QgcHJldmlvdXMgPSBmaXJzdFBvaW50LnNraXAgPyBtaWRkbGVQb2ludCA6IGZpcnN0UG9pbnQ7XG4gIGNvbnN0IGN1cnJlbnQgPSBtaWRkbGVQb2ludDtcbiAgY29uc3QgbmV4dCA9IGFmdGVyUG9pbnQuc2tpcCA/IG1pZGRsZVBvaW50IDogYWZ0ZXJQb2ludDtcbiAgY29uc3QgZDAxID0gZGlzdGFuY2VCZXR3ZWVuUG9pbnRzKGN1cnJlbnQsIHByZXZpb3VzKTtcbiAgY29uc3QgZDEyID0gZGlzdGFuY2VCZXR3ZWVuUG9pbnRzKG5leHQsIGN1cnJlbnQpO1xuICBsZXQgczAxID0gZDAxIC8gKGQwMSArIGQxMik7XG4gIGxldCBzMTIgPSBkMTIgLyAoZDAxICsgZDEyKTtcbiAgLy8gSWYgYWxsIHBvaW50cyBhcmUgdGhlIHNhbWUsIHMwMSAmIHMwMiB3aWxsIGJlIGluZlxuICBzMDEgPSBpc05hTihzMDEpID8gMCA6IHMwMTtcbiAgczEyID0gaXNOYU4oczEyKSA/IDAgOiBzMTI7XG4gIGNvbnN0IGZhID0gdCAqIHMwMTsgLy8gc2NhbGluZyBmYWN0b3IgZm9yIHRyaWFuZ2xlIFRhXG4gIGNvbnN0IGZiID0gdCAqIHMxMjtcbiAgcmV0dXJuIHtcbiAgICBwcmV2aW91czoge1xuICAgICAgeDogY3VycmVudC54IC0gZmEgKiAobmV4dC54IC0gcHJldmlvdXMueCksXG4gICAgICB5OiBjdXJyZW50LnkgLSBmYSAqIChuZXh0LnkgLSBwcmV2aW91cy55KVxuICAgIH0sXG4gICAgbmV4dDoge1xuICAgICAgeDogY3VycmVudC54ICsgZmIgKiAobmV4dC54IC0gcHJldmlvdXMueCksXG4gICAgICB5OiBjdXJyZW50LnkgKyBmYiAqIChuZXh0LnkgLSBwcmV2aW91cy55KVxuICAgIH1cbiAgfTtcbn1cbi8qKlxuICogQWRqdXN0IHRhbmdlbnRzIHRvIGVuc3VyZSBtb25vdG9uaWMgcHJvcGVydGllc1xuICovXG5mdW5jdGlvbiBtb25vdG9uZUFkanVzdChwb2ludHMsIGRlbHRhSywgbUspIHtcbiAgY29uc3QgcG9pbnRzTGVuID0gcG9pbnRzLmxlbmd0aDtcbiAgbGV0IGFscGhhSywgYmV0YUssIHRhdUssIHNxdWFyZWRNYWduaXR1ZGUsIHBvaW50Q3VycmVudDtcbiAgbGV0IHBvaW50QWZ0ZXIgPSBnZXRQb2ludChwb2ludHMsIDApO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHBvaW50c0xlbiAtIDE7ICsraSkge1xuICAgIHBvaW50Q3VycmVudCA9IHBvaW50QWZ0ZXI7XG4gICAgcG9pbnRBZnRlciA9IGdldFBvaW50KHBvaW50cywgaSArIDEpO1xuICAgIGlmICghcG9pbnRDdXJyZW50IHx8ICFwb2ludEFmdGVyKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKGFsbW9zdEVxdWFscyhkZWx0YUtbaV0sIDAsIEVQU0lMT04pKSB7XG4gICAgICBtS1tpXSA9IG1LW2kgKyAxXSA9IDA7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgYWxwaGFLID0gbUtbaV0gLyBkZWx0YUtbaV07XG4gICAgYmV0YUsgPSBtS1tpICsgMV0gLyBkZWx0YUtbaV07XG4gICAgc3F1YXJlZE1hZ25pdHVkZSA9IE1hdGgucG93KGFscGhhSywgMikgKyBNYXRoLnBvdyhiZXRhSywgMik7XG4gICAgaWYgKHNxdWFyZWRNYWduaXR1ZGUgPD0gOSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIHRhdUsgPSAzIC8gTWF0aC5zcXJ0KHNxdWFyZWRNYWduaXR1ZGUpO1xuICAgIG1LW2ldID0gYWxwaGFLICogdGF1SyAqIGRlbHRhS1tpXTtcbiAgICBtS1tpICsgMV0gPSBiZXRhSyAqIHRhdUsgKiBkZWx0YUtbaV07XG4gIH1cbn1cbmZ1bmN0aW9uIG1vbm90b25lQ29tcHV0ZShwb2ludHMsIG1LLCBpbmRleEF4aXMgPSAneCcpIHtcbiAgY29uc3QgdmFsdWVBeGlzID0gZ2V0VmFsdWVBeGlzKGluZGV4QXhpcyk7XG4gIGNvbnN0IHBvaW50c0xlbiA9IHBvaW50cy5sZW5ndGg7XG4gIGxldCBkZWx0YSwgcG9pbnRCZWZvcmUsIHBvaW50Q3VycmVudDtcbiAgbGV0IHBvaW50QWZ0ZXIgPSBnZXRQb2ludChwb2ludHMsIDApO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHBvaW50c0xlbjsgKytpKSB7XG4gICAgcG9pbnRCZWZvcmUgPSBwb2ludEN1cnJlbnQ7XG4gICAgcG9pbnRDdXJyZW50ID0gcG9pbnRBZnRlcjtcbiAgICBwb2ludEFmdGVyID0gZ2V0UG9pbnQocG9pbnRzLCBpICsgMSk7XG4gICAgaWYgKCFwb2ludEN1cnJlbnQpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBpUGl4ZWwgPSBwb2ludEN1cnJlbnRbaW5kZXhBeGlzXTtcbiAgICBjb25zdCB2UGl4ZWwgPSBwb2ludEN1cnJlbnRbdmFsdWVBeGlzXTtcbiAgICBpZiAocG9pbnRCZWZvcmUpIHtcbiAgICAgIGRlbHRhID0gKGlQaXhlbCAtIHBvaW50QmVmb3JlW2luZGV4QXhpc10pIC8gMztcbiAgICAgIHBvaW50Q3VycmVudFtgY3AxJHtpbmRleEF4aXN9YF0gPSBpUGl4ZWwgLSBkZWx0YTtcbiAgICAgIHBvaW50Q3VycmVudFtgY3AxJHt2YWx1ZUF4aXN9YF0gPSB2UGl4ZWwgLSBkZWx0YSAqIG1LW2ldO1xuICAgIH1cbiAgICBpZiAocG9pbnRBZnRlcikge1xuICAgICAgZGVsdGEgPSAocG9pbnRBZnRlcltpbmRleEF4aXNdIC0gaVBpeGVsKSAvIDM7XG4gICAgICBwb2ludEN1cnJlbnRbYGNwMiR7aW5kZXhBeGlzfWBdID0gaVBpeGVsICsgZGVsdGE7XG4gICAgICBwb2ludEN1cnJlbnRbYGNwMiR7dmFsdWVBeGlzfWBdID0gdlBpeGVsICsgZGVsdGEgKiBtS1tpXTtcbiAgICB9XG4gIH1cbn1cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBjYWxjdWxhdGVzIELDqXppZXIgY29udHJvbCBwb2ludHMgaW4gYSBzaW1pbGFyIHdheSB0aGFuIHxzcGxpbmVDdXJ2ZXwsXG4gKiBidXQgcHJlc2VydmVzIG1vbm90b25pY2l0eSBvZiB0aGUgcHJvdmlkZWQgZGF0YSBhbmQgZW5zdXJlcyBubyBsb2NhbCBleHRyZW11bXMgYXJlIGFkZGVkXG4gKiBiZXR3ZWVuIHRoZSBkYXRhc2V0IGRpc2NyZXRlIHBvaW50cyBkdWUgdG8gdGhlIGludGVycG9sYXRpb24uXG4gKiBTZWUgOiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Nb25vdG9uZV9jdWJpY19pbnRlcnBvbGF0aW9uXG4gKi9cbmZ1bmN0aW9uIHNwbGluZUN1cnZlTW9ub3RvbmUocG9pbnRzLCBpbmRleEF4aXMgPSAneCcpIHtcbiAgY29uc3QgdmFsdWVBeGlzID0gZ2V0VmFsdWVBeGlzKGluZGV4QXhpcyk7XG4gIGNvbnN0IHBvaW50c0xlbiA9IHBvaW50cy5sZW5ndGg7XG4gIGNvbnN0IGRlbHRhSyA9IEFycmF5KHBvaW50c0xlbikuZmlsbCgwKTtcbiAgY29uc3QgbUsgPSBBcnJheShwb2ludHNMZW4pO1xuICAvLyBDYWxjdWxhdGUgc2xvcGVzIChkZWx0YUspIGFuZCBpbml0aWFsaXplIHRhbmdlbnRzIChtSylcbiAgbGV0IGksIHBvaW50QmVmb3JlLCBwb2ludEN1cnJlbnQ7XG4gIGxldCBwb2ludEFmdGVyID0gZ2V0UG9pbnQocG9pbnRzLCAwKTtcbiAgZm9yIChpID0gMDsgaSA8IHBvaW50c0xlbjsgKytpKSB7XG4gICAgcG9pbnRCZWZvcmUgPSBwb2ludEN1cnJlbnQ7XG4gICAgcG9pbnRDdXJyZW50ID0gcG9pbnRBZnRlcjtcbiAgICBwb2ludEFmdGVyID0gZ2V0UG9pbnQocG9pbnRzLCBpICsgMSk7XG4gICAgaWYgKCFwb2ludEN1cnJlbnQpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAocG9pbnRBZnRlcikge1xuICAgICAgY29uc3Qgc2xvcGVEZWx0YSA9IHBvaW50QWZ0ZXJbaW5kZXhBeGlzXSAtIHBvaW50Q3VycmVudFtpbmRleEF4aXNdO1xuICAgICAgLy8gSW4gdGhlIGNhc2Ugb2YgdHdvIHBvaW50cyB0aGF0IGFwcGVhciBhdCB0aGUgc2FtZSB4IHBpeGVsLCBzbG9wZURlbHRhWCBpcyAwXG4gICAgICBkZWx0YUtbaV0gPSBzbG9wZURlbHRhICE9PSAwID8gKHBvaW50QWZ0ZXJbdmFsdWVBeGlzXSAtIHBvaW50Q3VycmVudFt2YWx1ZUF4aXNdKSAvIHNsb3BlRGVsdGEgOiAwO1xuICAgIH1cbiAgICBtS1tpXSA9ICFwb2ludEJlZm9yZSA/IGRlbHRhS1tpXSA6ICFwb2ludEFmdGVyID8gZGVsdGFLW2kgLSAxXSA6IHNpZ24oZGVsdGFLW2kgLSAxXSkgIT09IHNpZ24oZGVsdGFLW2ldKSA/IDAgOiAoZGVsdGFLW2kgLSAxXSArIGRlbHRhS1tpXSkgLyAyO1xuICB9XG4gIG1vbm90b25lQWRqdXN0KHBvaW50cywgZGVsdGFLLCBtSyk7XG4gIG1vbm90b25lQ29tcHV0ZShwb2ludHMsIG1LLCBpbmRleEF4aXMpO1xufVxuZnVuY3Rpb24gY2FwQ29udHJvbFBvaW50KHB0LCBtaW4sIG1heCkge1xuICByZXR1cm4gTWF0aC5tYXgoTWF0aC5taW4ocHQsIG1heCksIG1pbik7XG59XG5mdW5jdGlvbiBjYXBCZXppZXJQb2ludHMocG9pbnRzLCBhcmVhKSB7XG4gIGxldCBpLCBpbGVuLCBwb2ludCwgaW5BcmVhLCBpbkFyZWFQcmV2O1xuICBsZXQgaW5BcmVhTmV4dCA9IF9pc1BvaW50SW5BcmVhKHBvaW50c1swXSwgYXJlYSk7XG4gIGZvciAoaSA9IDAsIGlsZW4gPSBwb2ludHMubGVuZ3RoOyBpIDwgaWxlbjsgKytpKSB7XG4gICAgaW5BcmVhUHJldiA9IGluQXJlYTtcbiAgICBpbkFyZWEgPSBpbkFyZWFOZXh0O1xuICAgIGluQXJlYU5leHQgPSBpIDwgaWxlbiAtIDEgJiYgX2lzUG9pbnRJbkFyZWEocG9pbnRzW2kgKyAxXSwgYXJlYSk7XG4gICAgaWYgKCFpbkFyZWEpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBwb2ludCA9IHBvaW50c1tpXTtcbiAgICBpZiAoaW5BcmVhUHJldikge1xuICAgICAgcG9pbnQuY3AxeCA9IGNhcENvbnRyb2xQb2ludChwb2ludC5jcDF4LCBhcmVhLmxlZnQsIGFyZWEucmlnaHQpO1xuICAgICAgcG9pbnQuY3AxeSA9IGNhcENvbnRyb2xQb2ludChwb2ludC5jcDF5LCBhcmVhLnRvcCwgYXJlYS5ib3R0b20pO1xuICAgIH1cbiAgICBpZiAoaW5BcmVhTmV4dCkge1xuICAgICAgcG9pbnQuY3AyeCA9IGNhcENvbnRyb2xQb2ludChwb2ludC5jcDJ4LCBhcmVhLmxlZnQsIGFyZWEucmlnaHQpO1xuICAgICAgcG9pbnQuY3AyeSA9IGNhcENvbnRyb2xQb2ludChwb2ludC5jcDJ5LCBhcmVhLnRvcCwgYXJlYS5ib3R0b20pO1xuICAgIH1cbiAgfVxufVxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBfdXBkYXRlQmV6aWVyQ29udHJvbFBvaW50cyhwb2ludHMsIG9wdGlvbnMsIGFyZWEsIGxvb3AsIGluZGV4QXhpcykge1xuICBsZXQgaSwgaWxlbiwgcG9pbnQsIGNvbnRyb2xQb2ludHM7XG4gIC8vIE9ubHkgY29uc2lkZXIgcG9pbnRzIHRoYXQgYXJlIGRyYXduIGluIGNhc2UgdGhlIHNwYW5HYXBzIG9wdGlvbiBpcyB1c2VkXG4gIGlmIChvcHRpb25zLnNwYW5HYXBzKSB7XG4gICAgcG9pbnRzID0gcG9pbnRzLmZpbHRlcihwdCA9PiAhcHQuc2tpcCk7XG4gIH1cbiAgaWYgKG9wdGlvbnMuY3ViaWNJbnRlcnBvbGF0aW9uTW9kZSA9PT0gJ21vbm90b25lJykge1xuICAgIHNwbGluZUN1cnZlTW9ub3RvbmUocG9pbnRzLCBpbmRleEF4aXMpO1xuICB9IGVsc2Uge1xuICAgIGxldCBwcmV2ID0gbG9vcCA/IHBvaW50c1twb2ludHMubGVuZ3RoIC0gMV0gOiBwb2ludHNbMF07XG4gICAgZm9yIChpID0gMCwgaWxlbiA9IHBvaW50cy5sZW5ndGg7IGkgPCBpbGVuOyArK2kpIHtcbiAgICAgIHBvaW50ID0gcG9pbnRzW2ldO1xuICAgICAgY29udHJvbFBvaW50cyA9IHNwbGluZUN1cnZlKHByZXYsIHBvaW50LCBwb2ludHNbTWF0aC5taW4oaSArIDEsIGlsZW4gLSAobG9vcCA/IDAgOiAxKSkgJSBpbGVuXSwgb3B0aW9ucy50ZW5zaW9uKTtcbiAgICAgIHBvaW50LmNwMXggPSBjb250cm9sUG9pbnRzLnByZXZpb3VzLng7XG4gICAgICBwb2ludC5jcDF5ID0gY29udHJvbFBvaW50cy5wcmV2aW91cy55O1xuICAgICAgcG9pbnQuY3AyeCA9IGNvbnRyb2xQb2ludHMubmV4dC54O1xuICAgICAgcG9pbnQuY3AyeSA9IGNvbnRyb2xQb2ludHMubmV4dC55O1xuICAgICAgcHJldiA9IHBvaW50O1xuICAgIH1cbiAgfVxuICBpZiAob3B0aW9ucy5jYXBCZXppZXJQb2ludHMpIHtcbiAgICBjYXBCZXppZXJQb2ludHMocG9pbnRzLCBhcmVhKTtcbiAgfVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIF9pc0RvbVN1cHBvcnRlZCgpIHtcbiAgcmV0dXJuIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCc7XG59XG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIF9nZXRQYXJlbnROb2RlKGRvbU5vZGUpIHtcbiAgbGV0IHBhcmVudCA9IGRvbU5vZGUucGFyZW50Tm9kZTtcbiAgaWYgKHBhcmVudCAmJiBwYXJlbnQudG9TdHJpbmcoKSA9PT0gJ1tvYmplY3QgU2hhZG93Um9vdF0nKSB7XG4gICAgcGFyZW50ID0gcGFyZW50Lmhvc3Q7XG4gIH1cbiAgcmV0dXJuIHBhcmVudDtcbn1cbi8qKlxuICogY29udmVydCBtYXgtd2lkdGgvbWF4LWhlaWdodCB2YWx1ZXMgdGhhdCBtYXkgYmUgcGVyY2VudGFnZXMgaW50byBhIG51bWJlclxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gcGFyc2VNYXhTdHlsZShzdHlsZVZhbHVlLCBub2RlLCBwYXJlbnRQcm9wZXJ0eSkge1xuICBsZXQgdmFsdWVJblBpeGVscztcbiAgaWYgKHR5cGVvZiBzdHlsZVZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIHZhbHVlSW5QaXhlbHMgPSBwYXJzZUludChzdHlsZVZhbHVlLCAxMCk7XG4gICAgaWYgKHN0eWxlVmFsdWUuaW5kZXhPZignJScpICE9PSAtMSkge1xuICAgICAgLy8gcGVyY2VudGFnZSAqIHNpemUgaW4gZGltZW5zaW9uXG4gICAgICB2YWx1ZUluUGl4ZWxzID0gdmFsdWVJblBpeGVscyAvIDEwMCAqIG5vZGUucGFyZW50Tm9kZVtwYXJlbnRQcm9wZXJ0eV07XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhbHVlSW5QaXhlbHMgPSBzdHlsZVZhbHVlO1xuICB9XG4gIHJldHVybiB2YWx1ZUluUGl4ZWxzO1xufVxuY29uc3QgZ2V0Q29tcHV0ZWRTdHlsZSA9IGVsZW1lbnQgPT4gZWxlbWVudC5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCwgbnVsbCk7XG5mdW5jdGlvbiBnZXRTdHlsZShlbCwgcHJvcGVydHkpIHtcbiAgcmV0dXJuIGdldENvbXB1dGVkU3R5bGUoZWwpLmdldFByb3BlcnR5VmFsdWUocHJvcGVydHkpO1xufVxuY29uc3QgcG9zaXRpb25zID0gWyd0b3AnLCAncmlnaHQnLCAnYm90dG9tJywgJ2xlZnQnXTtcbmZ1bmN0aW9uIGdldFBvc2l0aW9uZWRTdHlsZShzdHlsZXMsIHN0eWxlLCBzdWZmaXgpIHtcbiAgY29uc3QgcmVzdWx0ID0ge307XG4gIHN1ZmZpeCA9IHN1ZmZpeCA/ICctJyArIHN1ZmZpeCA6ICcnO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IDQ7IGkrKykge1xuICAgIGNvbnN0IHBvcyA9IHBvc2l0aW9uc1tpXTtcbiAgICByZXN1bHRbcG9zXSA9IHBhcnNlRmxvYXQoc3R5bGVzW3N0eWxlICsgJy0nICsgcG9zICsgc3VmZml4XSkgfHwgMDtcbiAgfVxuICByZXN1bHQud2lkdGggPSByZXN1bHQubGVmdCArIHJlc3VsdC5yaWdodDtcbiAgcmVzdWx0LmhlaWdodCA9IHJlc3VsdC50b3AgKyByZXN1bHQuYm90dG9tO1xuICByZXR1cm4gcmVzdWx0O1xufVxuY29uc3QgdXNlT2Zmc2V0UG9zID0gKHgsIHksIHRhcmdldCkgPT4gKHggPiAwIHx8IHkgPiAwKSAmJiAoIXRhcmdldCB8fCAhdGFyZ2V0LnNoYWRvd1Jvb3QpO1xuLyoqXG4gKiBAcGFyYW0gZVxuICogQHBhcmFtIGNhbnZhc1xuICogQHJldHVybnMgQ2FudmFzIHBvc2l0aW9uXG4gKi9cbmZ1bmN0aW9uIGdldENhbnZhc1Bvc2l0aW9uKGUsIGNhbnZhcykge1xuICBjb25zdCB0b3VjaGVzID0gZS50b3VjaGVzO1xuICBjb25zdCBzb3VyY2UgPSB0b3VjaGVzICYmIHRvdWNoZXMubGVuZ3RoID8gdG91Y2hlc1swXSA6IGU7XG4gIGNvbnN0IHtcbiAgICBvZmZzZXRYLFxuICAgIG9mZnNldFlcbiAgfSA9IHNvdXJjZTtcbiAgbGV0IGJveCA9IGZhbHNlO1xuICBsZXQgeCwgeTtcbiAgaWYgKHVzZU9mZnNldFBvcyhvZmZzZXRYLCBvZmZzZXRZLCBlLnRhcmdldCkpIHtcbiAgICB4ID0gb2Zmc2V0WDtcbiAgICB5ID0gb2Zmc2V0WTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCByZWN0ID0gY2FudmFzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIHggPSBzb3VyY2UuY2xpZW50WCAtIHJlY3QubGVmdDtcbiAgICB5ID0gc291cmNlLmNsaWVudFkgLSByZWN0LnRvcDtcbiAgICBib3ggPSB0cnVlO1xuICB9XG4gIHJldHVybiB7XG4gICAgeCxcbiAgICB5LFxuICAgIGJveFxuICB9O1xufVxuLyoqXG4gKiBHZXRzIGFuIGV2ZW50J3MgeCwgeSBjb29yZGluYXRlcywgcmVsYXRpdmUgdG8gdGhlIGNoYXJ0IGFyZWFcbiAqIEBwYXJhbSBldmVudFxuICogQHBhcmFtIGNoYXJ0XG4gKiBAcmV0dXJucyB4IGFuZCB5IGNvb3JkaW5hdGVzIG9mIHRoZSBldmVudFxuICovXG5mdW5jdGlvbiBnZXRSZWxhdGl2ZVBvc2l0aW9uKGV2ZW50LCBjaGFydCkge1xuICBpZiAoJ25hdGl2ZScgaW4gZXZlbnQpIHtcbiAgICByZXR1cm4gZXZlbnQ7XG4gIH1cbiAgY29uc3Qge1xuICAgIGNhbnZhcyxcbiAgICBjdXJyZW50RGV2aWNlUGl4ZWxSYXRpb1xuICB9ID0gY2hhcnQ7XG4gIGNvbnN0IHN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZShjYW52YXMpO1xuICBjb25zdCBib3JkZXJCb3ggPSBzdHlsZS5ib3hTaXppbmcgPT09ICdib3JkZXItYm94JztcbiAgY29uc3QgcGFkZGluZ3MgPSBnZXRQb3NpdGlvbmVkU3R5bGUoc3R5bGUsICdwYWRkaW5nJyk7XG4gIGNvbnN0IGJvcmRlcnMgPSBnZXRQb3NpdGlvbmVkU3R5bGUoc3R5bGUsICdib3JkZXInLCAnd2lkdGgnKTtcbiAgY29uc3Qge1xuICAgIHgsXG4gICAgeSxcbiAgICBib3hcbiAgfSA9IGdldENhbnZhc1Bvc2l0aW9uKGV2ZW50LCBjYW52YXMpO1xuICBjb25zdCB4T2Zmc2V0ID0gcGFkZGluZ3MubGVmdCArIChib3ggJiYgYm9yZGVycy5sZWZ0KTtcbiAgY29uc3QgeU9mZnNldCA9IHBhZGRpbmdzLnRvcCArIChib3ggJiYgYm9yZGVycy50b3ApO1xuICBsZXQge1xuICAgIHdpZHRoLFxuICAgIGhlaWdodFxuICB9ID0gY2hhcnQ7XG4gIGlmIChib3JkZXJCb3gpIHtcbiAgICB3aWR0aCAtPSBwYWRkaW5ncy53aWR0aCArIGJvcmRlcnMud2lkdGg7XG4gICAgaGVpZ2h0IC09IHBhZGRpbmdzLmhlaWdodCArIGJvcmRlcnMuaGVpZ2h0O1xuICB9XG4gIHJldHVybiB7XG4gICAgeDogTWF0aC5yb3VuZCgoeCAtIHhPZmZzZXQpIC8gd2lkdGggKiBjYW52YXMud2lkdGggLyBjdXJyZW50RGV2aWNlUGl4ZWxSYXRpbyksXG4gICAgeTogTWF0aC5yb3VuZCgoeSAtIHlPZmZzZXQpIC8gaGVpZ2h0ICogY2FudmFzLmhlaWdodCAvIGN1cnJlbnREZXZpY2VQaXhlbFJhdGlvKVxuICB9O1xufVxuZnVuY3Rpb24gZ2V0Q29udGFpbmVyU2l6ZShjYW52YXMsIHdpZHRoLCBoZWlnaHQpIHtcbiAgbGV0IG1heFdpZHRoLCBtYXhIZWlnaHQ7XG4gIGlmICh3aWR0aCA9PT0gdW5kZWZpbmVkIHx8IGhlaWdodCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgY29uc3QgY29udGFpbmVyID0gY2FudmFzICYmIF9nZXRQYXJlbnROb2RlKGNhbnZhcyk7XG4gICAgaWYgKCFjb250YWluZXIpIHtcbiAgICAgIHdpZHRoID0gY2FudmFzLmNsaWVudFdpZHRoO1xuICAgICAgaGVpZ2h0ID0gY2FudmFzLmNsaWVudEhlaWdodDtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgcmVjdCA9IGNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsgLy8gdGhpcyBpcyB0aGUgYm9yZGVyIGJveCBvZiB0aGUgY29udGFpbmVyXG4gICAgICBjb25zdCBjb250YWluZXJTdHlsZSA9IGdldENvbXB1dGVkU3R5bGUoY29udGFpbmVyKTtcbiAgICAgIGNvbnN0IGNvbnRhaW5lckJvcmRlciA9IGdldFBvc2l0aW9uZWRTdHlsZShjb250YWluZXJTdHlsZSwgJ2JvcmRlcicsICd3aWR0aCcpO1xuICAgICAgY29uc3QgY29udGFpbmVyUGFkZGluZyA9IGdldFBvc2l0aW9uZWRTdHlsZShjb250YWluZXJTdHlsZSwgJ3BhZGRpbmcnKTtcbiAgICAgIHdpZHRoID0gcmVjdC53aWR0aCAtIGNvbnRhaW5lclBhZGRpbmcud2lkdGggLSBjb250YWluZXJCb3JkZXIud2lkdGg7XG4gICAgICBoZWlnaHQgPSByZWN0LmhlaWdodCAtIGNvbnRhaW5lclBhZGRpbmcuaGVpZ2h0IC0gY29udGFpbmVyQm9yZGVyLmhlaWdodDtcbiAgICAgIG1heFdpZHRoID0gcGFyc2VNYXhTdHlsZShjb250YWluZXJTdHlsZS5tYXhXaWR0aCwgY29udGFpbmVyLCAnY2xpZW50V2lkdGgnKTtcbiAgICAgIG1heEhlaWdodCA9IHBhcnNlTWF4U3R5bGUoY29udGFpbmVyU3R5bGUubWF4SGVpZ2h0LCBjb250YWluZXIsICdjbGllbnRIZWlnaHQnKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHQsXG4gICAgbWF4V2lkdGg6IG1heFdpZHRoIHx8IElORklOSVRZLFxuICAgIG1heEhlaWdodDogbWF4SGVpZ2h0IHx8IElORklOSVRZXG4gIH07XG59XG5jb25zdCByb3VuZDEgPSB2ID0+IE1hdGgucm91bmQodiAqIDEwKSAvIDEwO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbmZ1bmN0aW9uIGdldE1heGltdW1TaXplKGNhbnZhcywgYmJXaWR0aCwgYmJIZWlnaHQsIGFzcGVjdFJhdGlvKSB7XG4gIGNvbnN0IHN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZShjYW52YXMpO1xuICBjb25zdCBtYXJnaW5zID0gZ2V0UG9zaXRpb25lZFN0eWxlKHN0eWxlLCAnbWFyZ2luJyk7XG4gIGNvbnN0IG1heFdpZHRoID0gcGFyc2VNYXhTdHlsZShzdHlsZS5tYXhXaWR0aCwgY2FudmFzLCAnY2xpZW50V2lkdGgnKSB8fCBJTkZJTklUWTtcbiAgY29uc3QgbWF4SGVpZ2h0ID0gcGFyc2VNYXhTdHlsZShzdHlsZS5tYXhIZWlnaHQsIGNhbnZhcywgJ2NsaWVudEhlaWdodCcpIHx8IElORklOSVRZO1xuICBjb25zdCBjb250YWluZXJTaXplID0gZ2V0Q29udGFpbmVyU2l6ZShjYW52YXMsIGJiV2lkdGgsIGJiSGVpZ2h0KTtcbiAgbGV0IHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHRcbiAgfSA9IGNvbnRhaW5lclNpemU7XG4gIGlmIChzdHlsZS5ib3hTaXppbmcgPT09ICdjb250ZW50LWJveCcpIHtcbiAgICBjb25zdCBib3JkZXJzID0gZ2V0UG9zaXRpb25lZFN0eWxlKHN0eWxlLCAnYm9yZGVyJywgJ3dpZHRoJyk7XG4gICAgY29uc3QgcGFkZGluZ3MgPSBnZXRQb3NpdGlvbmVkU3R5bGUoc3R5bGUsICdwYWRkaW5nJyk7XG4gICAgd2lkdGggLT0gcGFkZGluZ3Mud2lkdGggKyBib3JkZXJzLndpZHRoO1xuICAgIGhlaWdodCAtPSBwYWRkaW5ncy5oZWlnaHQgKyBib3JkZXJzLmhlaWdodDtcbiAgfVxuICB3aWR0aCA9IE1hdGgubWF4KDAsIHdpZHRoIC0gbWFyZ2lucy53aWR0aCk7XG4gIGhlaWdodCA9IE1hdGgubWF4KDAsIGFzcGVjdFJhdGlvID8gd2lkdGggLyBhc3BlY3RSYXRpbyA6IGhlaWdodCAtIG1hcmdpbnMuaGVpZ2h0KTtcbiAgd2lkdGggPSByb3VuZDEoTWF0aC5taW4od2lkdGgsIG1heFdpZHRoLCBjb250YWluZXJTaXplLm1heFdpZHRoKSk7XG4gIGhlaWdodCA9IHJvdW5kMShNYXRoLm1pbihoZWlnaHQsIG1heEhlaWdodCwgY29udGFpbmVyU2l6ZS5tYXhIZWlnaHQpKTtcbiAgaWYgKHdpZHRoICYmICFoZWlnaHQpIHtcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vY2hhcnRqcy9DaGFydC5qcy9pc3N1ZXMvNDY1OVxuICAgIC8vIElmIHRoZSBjYW52YXMgaGFzIHdpZHRoLCBidXQgbm8gaGVpZ2h0LCBkZWZhdWx0IHRvIGFzcGVjdFJhdGlvIG9mIDIgKGNhbnZhcyBkZWZhdWx0KVxuICAgIGhlaWdodCA9IHJvdW5kMSh3aWR0aCAvIDIpO1xuICB9XG4gIGNvbnN0IG1haW50YWluSGVpZ2h0ID0gYmJXaWR0aCAhPT0gdW5kZWZpbmVkIHx8IGJiSGVpZ2h0ICE9PSB1bmRlZmluZWQ7XG4gIGlmIChtYWludGFpbkhlaWdodCAmJiBhc3BlY3RSYXRpbyAmJiBjb250YWluZXJTaXplLmhlaWdodCAmJiBoZWlnaHQgPiBjb250YWluZXJTaXplLmhlaWdodCkge1xuICAgIGhlaWdodCA9IGNvbnRhaW5lclNpemUuaGVpZ2h0O1xuICAgIHdpZHRoID0gcm91bmQxKE1hdGguZmxvb3IoaGVpZ2h0ICogYXNwZWN0UmF0aW8pKTtcbiAgfVxuICByZXR1cm4ge1xuICAgIHdpZHRoLFxuICAgIGhlaWdodFxuICB9O1xufVxuLyoqXG4gKiBAcGFyYW0gY2hhcnRcbiAqIEBwYXJhbSBmb3JjZVJhdGlvXG4gKiBAcGFyYW0gZm9yY2VTdHlsZVxuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgY2FudmFzIGNvbnRleHQgc2l6ZSBvciB0cmFuc2Zvcm1hdGlvbiBoYXMgY2hhbmdlZC5cbiAqL1xuZnVuY3Rpb24gcmV0aW5hU2NhbGUoY2hhcnQsIGZvcmNlUmF0aW8sIGZvcmNlU3R5bGUpIHtcbiAgY29uc3QgcGl4ZWxSYXRpbyA9IGZvcmNlUmF0aW8gfHwgMTtcbiAgY29uc3QgZGV2aWNlSGVpZ2h0ID0gcm91bmQxKGNoYXJ0LmhlaWdodCAqIHBpeGVsUmF0aW8pO1xuICBjb25zdCBkZXZpY2VXaWR0aCA9IHJvdW5kMShjaGFydC53aWR0aCAqIHBpeGVsUmF0aW8pO1xuICBjaGFydC5oZWlnaHQgPSByb3VuZDEoY2hhcnQuaGVpZ2h0KTtcbiAgY2hhcnQud2lkdGggPSByb3VuZDEoY2hhcnQud2lkdGgpO1xuICBjb25zdCBjYW52YXMgPSBjaGFydC5jYW52YXM7XG4gIC8vIElmIG5vIHN0eWxlIGhhcyBiZWVuIHNldCBvbiB0aGUgY2FudmFzLCB0aGUgcmVuZGVyIHNpemUgaXMgdXNlZCBhcyBkaXNwbGF5IHNpemUsXG4gIC8vIG1ha2luZyB0aGUgY2hhcnQgdmlzdWFsbHkgYmlnZ2VyLCBzbyBsZXQncyBlbmZvcmNlIGl0IHRvIHRoZSBcImNvcnJlY3RcIiB2YWx1ZXMuXG4gIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vY2hhcnRqcy9DaGFydC5qcy9pc3N1ZXMvMzU3NVxuICBpZiAoY2FudmFzLnN0eWxlICYmIChmb3JjZVN0eWxlIHx8ICFjYW52YXMuc3R5bGUuaGVpZ2h0ICYmICFjYW52YXMuc3R5bGUud2lkdGgpKSB7XG4gICAgY2FudmFzLnN0eWxlLmhlaWdodCA9IGAke2NoYXJ0LmhlaWdodH1weGA7XG4gICAgY2FudmFzLnN0eWxlLndpZHRoID0gYCR7Y2hhcnQud2lkdGh9cHhgO1xuICB9XG4gIGlmIChjaGFydC5jdXJyZW50RGV2aWNlUGl4ZWxSYXRpbyAhPT0gcGl4ZWxSYXRpbyB8fCBjYW52YXMuaGVpZ2h0ICE9PSBkZXZpY2VIZWlnaHQgfHwgY2FudmFzLndpZHRoICE9PSBkZXZpY2VXaWR0aCkge1xuICAgIGNoYXJ0LmN1cnJlbnREZXZpY2VQaXhlbFJhdGlvID0gcGl4ZWxSYXRpbztcbiAgICBjYW52YXMuaGVpZ2h0ID0gZGV2aWNlSGVpZ2h0O1xuICAgIGNhbnZhcy53aWR0aCA9IGRldmljZVdpZHRoO1xuICAgIGNoYXJ0LmN0eC5zZXRUcmFuc2Zvcm0ocGl4ZWxSYXRpbywgMCwgMCwgcGl4ZWxSYXRpbywgMCwgMCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuLyoqXG4gKiBEZXRlY3RzIHN1cHBvcnQgZm9yIG9wdGlvbnMgb2JqZWN0IGFyZ3VtZW50IGluIGFkZEV2ZW50TGlzdGVuZXIuXG4gKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRXZlbnRUYXJnZXQvYWRkRXZlbnRMaXN0ZW5lciNTYWZlbHlfZGV0ZWN0aW5nX29wdGlvbl9zdXBwb3J0XG4gKiBAcHJpdmF0ZVxuICovXG5jb25zdCBzdXBwb3J0c0V2ZW50TGlzdGVuZXJPcHRpb25zID0gZnVuY3Rpb24gKCkge1xuICBsZXQgcGFzc2l2ZVN1cHBvcnRlZCA9IGZhbHNlO1xuICB0cnkge1xuICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICBnZXQgcGFzc2l2ZSgpIHtcbiAgICAgICAgcGFzc2l2ZVN1cHBvcnRlZCA9IHRydWU7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGlmIChfaXNEb21TdXBwb3J0ZWQoKSkge1xuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Rlc3QnLCBudWxsLCBvcHRpb25zKTtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCd0ZXN0JywgbnVsbCwgb3B0aW9ucyk7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgLy8gY29udGludWUgcmVnYXJkbGVzcyBvZiBlcnJvclxuICB9XG4gIHJldHVybiBwYXNzaXZlU3VwcG9ydGVkO1xufSgpO1xuLyoqXG4gKiBUaGUgXCJ1c2VkXCIgc2l6ZSBpcyB0aGUgZmluYWwgdmFsdWUgb2YgYSBkaW1lbnNpb24gcHJvcGVydHkgYWZ0ZXIgYWxsIGNhbGN1bGF0aW9ucyBoYXZlXG4gKiBiZWVuIHBlcmZvcm1lZC4gVGhpcyBtZXRob2QgdXNlcyB0aGUgY29tcHV0ZWQgc3R5bGUgb2YgYGVsZW1lbnRgIGJ1dCByZXR1cm5zIHVuZGVmaW5lZFxuICogaWYgdGhlIGNvbXB1dGVkIHN0eWxlIGlzIG5vdCBleHByZXNzZWQgaW4gcGl4ZWxzLiBUaGF0IGNhbiBoYXBwZW4gaW4gc29tZSBjYXNlcyB3aGVyZVxuICogYGVsZW1lbnRgIGhhcyBhIHNpemUgcmVsYXRpdmUgdG8gaXRzIHBhcmVudCBhbmQgdGhpcyBsYXN0IG9uZSBpcyBub3QgeWV0IGRpc3BsYXllZCxcbiAqIGZvciBleGFtcGxlIGJlY2F1c2Ugb2YgYGRpc3BsYXk6IG5vbmVgIG9uIGEgcGFyZW50IG5vZGUuXG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy91c2VkX3ZhbHVlXG4gKiBAcmV0dXJucyBTaXplIGluIHBpeGVscyBvciB1bmRlZmluZWQgaWYgdW5rbm93bi5cbiAqL1xuZnVuY3Rpb24gcmVhZFVzZWRTaXplKGVsZW1lbnQsIHByb3BlcnR5KSB7XG4gIGNvbnN0IHZhbHVlID0gZ2V0U3R5bGUoZWxlbWVudCwgcHJvcGVydHkpO1xuICBjb25zdCBtYXRjaGVzID0gdmFsdWUgJiYgdmFsdWUubWF0Y2goL14oXFxkKykoXFwuXFxkKyk/cHgkLyk7XG4gIHJldHVybiBtYXRjaGVzID8gK21hdGNoZXNbMV0gOiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gX3BvaW50SW5MaW5lKHAxLCBwMiwgdCwgbW9kZSkge1xuICByZXR1cm4ge1xuICAgIHg6IHAxLnggKyB0ICogKHAyLnggLSBwMS54KSxcbiAgICB5OiBwMS55ICsgdCAqIChwMi55IC0gcDEueSlcbiAgfTtcbn1cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gX3N0ZXBwZWRJbnRlcnBvbGF0aW9uKHAxLCBwMiwgdCwgbW9kZSkge1xuICByZXR1cm4ge1xuICAgIHg6IHAxLnggKyB0ICogKHAyLnggLSBwMS54KSxcbiAgICB5OiBtb2RlID09PSAnbWlkZGxlJyA/IHQgPCAwLjUgPyBwMS55IDogcDIueSA6IG1vZGUgPT09ICdhZnRlcicgPyB0IDwgMSA/IHAxLnkgOiBwMi55IDogdCA+IDAgPyBwMi55IDogcDEueVxuICB9O1xufVxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBfYmV6aWVySW50ZXJwb2xhdGlvbihwMSwgcDIsIHQsIG1vZGUpIHtcbiAgY29uc3QgY3AxID0ge1xuICAgIHg6IHAxLmNwMngsXG4gICAgeTogcDEuY3AyeVxuICB9O1xuICBjb25zdCBjcDIgPSB7XG4gICAgeDogcDIuY3AxeCxcbiAgICB5OiBwMi5jcDF5XG4gIH07XG4gIGNvbnN0IGEgPSBfcG9pbnRJbkxpbmUocDEsIGNwMSwgdCk7XG4gIGNvbnN0IGIgPSBfcG9pbnRJbkxpbmUoY3AxLCBjcDIsIHQpO1xuICBjb25zdCBjID0gX3BvaW50SW5MaW5lKGNwMiwgcDIsIHQpO1xuICBjb25zdCBkID0gX3BvaW50SW5MaW5lKGEsIGIsIHQpO1xuICBjb25zdCBlID0gX3BvaW50SW5MaW5lKGIsIGMsIHQpO1xuICByZXR1cm4gX3BvaW50SW5MaW5lKGQsIGUsIHQpO1xufVxuY29uc3QgZ2V0UmlnaHRUb0xlZnRBZGFwdGVyID0gZnVuY3Rpb24gKHJlY3RYLCB3aWR0aCkge1xuICByZXR1cm4ge1xuICAgIHgoeCkge1xuICAgICAgcmV0dXJuIHJlY3RYICsgcmVjdFggKyB3aWR0aCAtIHg7XG4gICAgfSxcbiAgICBzZXRXaWR0aCh3KSB7XG4gICAgICB3aWR0aCA9IHc7XG4gICAgfSxcbiAgICB0ZXh0QWxpZ24oYWxpZ24pIHtcbiAgICAgIGlmIChhbGlnbiA9PT0gJ2NlbnRlcicpIHtcbiAgICAgICAgcmV0dXJuIGFsaWduO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFsaWduID09PSAncmlnaHQnID8gJ2xlZnQnIDogJ3JpZ2h0JztcbiAgICB9LFxuICAgIHhQbHVzKHgsIHZhbHVlKSB7XG4gICAgICByZXR1cm4geCAtIHZhbHVlO1xuICAgIH0sXG4gICAgbGVmdEZvckx0cih4LCBpdGVtV2lkdGgpIHtcbiAgICAgIHJldHVybiB4IC0gaXRlbVdpZHRoO1xuICAgIH1cbiAgfTtcbn07XG5jb25zdCBnZXRMZWZ0VG9SaWdodEFkYXB0ZXIgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB7XG4gICAgeCh4KSB7XG4gICAgICByZXR1cm4geDtcbiAgICB9LFxuICAgIHNldFdpZHRoKHcpIHt9LFxuICAgIHRleHRBbGlnbihhbGlnbikge1xuICAgICAgcmV0dXJuIGFsaWduO1xuICAgIH0sXG4gICAgeFBsdXMoeCwgdmFsdWUpIHtcbiAgICAgIHJldHVybiB4ICsgdmFsdWU7XG4gICAgfSxcbiAgICBsZWZ0Rm9yTHRyKHgsIF9pdGVtV2lkdGgpIHtcbiAgICAgIHJldHVybiB4O1xuICAgIH1cbiAgfTtcbn07XG5mdW5jdGlvbiBnZXRSdGxBZGFwdGVyKHJ0bCwgcmVjdFgsIHdpZHRoKSB7XG4gIHJldHVybiBydGwgPyBnZXRSaWdodFRvTGVmdEFkYXB0ZXIocmVjdFgsIHdpZHRoKSA6IGdldExlZnRUb1JpZ2h0QWRhcHRlcigpO1xufVxuZnVuY3Rpb24gb3ZlcnJpZGVUZXh0RGlyZWN0aW9uKGN0eCwgZGlyZWN0aW9uKSB7XG4gIGxldCBzdHlsZSwgb3JpZ2luYWw7XG4gIGlmIChkaXJlY3Rpb24gPT09ICdsdHInIHx8IGRpcmVjdGlvbiA9PT0gJ3J0bCcpIHtcbiAgICBzdHlsZSA9IGN0eC5jYW52YXMuc3R5bGU7XG4gICAgb3JpZ2luYWwgPSBbc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgnZGlyZWN0aW9uJyksIHN0eWxlLmdldFByb3BlcnR5UHJpb3JpdHkoJ2RpcmVjdGlvbicpXTtcbiAgICBzdHlsZS5zZXRQcm9wZXJ0eSgnZGlyZWN0aW9uJywgZGlyZWN0aW9uLCAnaW1wb3J0YW50Jyk7XG4gICAgY3R4LnByZXZUZXh0RGlyZWN0aW9uID0gb3JpZ2luYWw7XG4gIH1cbn1cbmZ1bmN0aW9uIHJlc3RvcmVUZXh0RGlyZWN0aW9uKGN0eCwgb3JpZ2luYWwpIHtcbiAgaWYgKG9yaWdpbmFsICE9PSB1bmRlZmluZWQpIHtcbiAgICBkZWxldGUgY3R4LnByZXZUZXh0RGlyZWN0aW9uO1xuICAgIGN0eC5jYW52YXMuc3R5bGUuc2V0UHJvcGVydHkoJ2RpcmVjdGlvbicsIG9yaWdpbmFsWzBdLCBvcmlnaW5hbFsxXSk7XG4gIH1cbn1cbmZ1bmN0aW9uIHByb3BlcnR5Rm4ocHJvcGVydHkpIHtcbiAgaWYgKHByb3BlcnR5ID09PSAnYW5nbGUnKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGJldHdlZW46IF9hbmdsZUJldHdlZW4sXG4gICAgICBjb21wYXJlOiBfYW5nbGVEaWZmLFxuICAgICAgbm9ybWFsaXplOiBfbm9ybWFsaXplQW5nbGVcbiAgICB9O1xuICB9XG4gIHJldHVybiB7XG4gICAgYmV0d2VlbjogX2lzQmV0d2VlbixcbiAgICBjb21wYXJlOiAoYSwgYikgPT4gYSAtIGIsXG4gICAgbm9ybWFsaXplOiB4ID0+IHhcbiAgfTtcbn1cbmZ1bmN0aW9uIG5vcm1hbGl6ZVNlZ21lbnQoe1xuICBzdGFydCxcbiAgZW5kLFxuICBjb3VudCxcbiAgbG9vcCxcbiAgc3R5bGVcbn0pIHtcbiAgcmV0dXJuIHtcbiAgICBzdGFydDogc3RhcnQgJSBjb3VudCxcbiAgICBlbmQ6IGVuZCAlIGNvdW50LFxuICAgIGxvb3A6IGxvb3AgJiYgKGVuZCAtIHN0YXJ0ICsgMSkgJSBjb3VudCA9PT0gMCxcbiAgICBzdHlsZVxuICB9O1xufVxuZnVuY3Rpb24gZ2V0U2VnbWVudChzZWdtZW50LCBwb2ludHMsIGJvdW5kcykge1xuICBjb25zdCB7XG4gICAgcHJvcGVydHksXG4gICAgc3RhcnQ6IHN0YXJ0Qm91bmQsXG4gICAgZW5kOiBlbmRCb3VuZFxuICB9ID0gYm91bmRzO1xuICBjb25zdCB7XG4gICAgYmV0d2VlbixcbiAgICBub3JtYWxpemVcbiAgfSA9IHByb3BlcnR5Rm4ocHJvcGVydHkpO1xuICBjb25zdCBjb3VudCA9IHBvaW50cy5sZW5ndGg7XG4gIGxldCB7XG4gICAgc3RhcnQsXG4gICAgZW5kLFxuICAgIGxvb3BcbiAgfSA9IHNlZ21lbnQ7XG4gIGxldCBpLCBpbGVuO1xuICBpZiAobG9vcCkge1xuICAgIHN0YXJ0ICs9IGNvdW50O1xuICAgIGVuZCArPSBjb3VudDtcbiAgICBmb3IgKGkgPSAwLCBpbGVuID0gY291bnQ7IGkgPCBpbGVuOyArK2kpIHtcbiAgICAgIGlmICghYmV0d2Vlbihub3JtYWxpemUocG9pbnRzW3N0YXJ0ICUgY291bnRdW3Byb3BlcnR5XSksIHN0YXJ0Qm91bmQsIGVuZEJvdW5kKSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHN0YXJ0LS07XG4gICAgICBlbmQtLTtcbiAgICB9XG4gICAgc3RhcnQgJT0gY291bnQ7XG4gICAgZW5kICU9IGNvdW50O1xuICB9XG4gIGlmIChlbmQgPCBzdGFydCkge1xuICAgIGVuZCArPSBjb3VudDtcbiAgfVxuICByZXR1cm4ge1xuICAgIHN0YXJ0LFxuICAgIGVuZCxcbiAgICBsb29wLFxuICAgIHN0eWxlOiBzZWdtZW50LnN0eWxlXG4gIH07XG59XG5mdW5jdGlvbiBfYm91bmRTZWdtZW50KHNlZ21lbnQsIHBvaW50cywgYm91bmRzKSB7XG4gIGlmICghYm91bmRzKSB7XG4gICAgcmV0dXJuIFtzZWdtZW50XTtcbiAgfVxuICBjb25zdCB7XG4gICAgcHJvcGVydHksXG4gICAgc3RhcnQ6IHN0YXJ0Qm91bmQsXG4gICAgZW5kOiBlbmRCb3VuZFxuICB9ID0gYm91bmRzO1xuICBjb25zdCBjb3VudCA9IHBvaW50cy5sZW5ndGg7XG4gIGNvbnN0IHtcbiAgICBjb21wYXJlLFxuICAgIGJldHdlZW4sXG4gICAgbm9ybWFsaXplXG4gIH0gPSBwcm9wZXJ0eUZuKHByb3BlcnR5KTtcbiAgY29uc3Qge1xuICAgIHN0YXJ0LFxuICAgIGVuZCxcbiAgICBsb29wLFxuICAgIHN0eWxlXG4gIH0gPSBnZXRTZWdtZW50KHNlZ21lbnQsIHBvaW50cywgYm91bmRzKTtcbiAgY29uc3QgcmVzdWx0ID0gW107XG4gIGxldCBpbnNpZGUgPSBmYWxzZTtcbiAgbGV0IHN1YlN0YXJ0ID0gbnVsbDtcbiAgbGV0IHZhbHVlLCBwb2ludCwgcHJldlZhbHVlO1xuICBjb25zdCBzdGFydElzQmVmb3JlID0gKCkgPT4gYmV0d2VlbihzdGFydEJvdW5kLCBwcmV2VmFsdWUsIHZhbHVlKSAmJiBjb21wYXJlKHN0YXJ0Qm91bmQsIHByZXZWYWx1ZSkgIT09IDA7XG4gIGNvbnN0IGVuZElzQmVmb3JlID0gKCkgPT4gY29tcGFyZShlbmRCb3VuZCwgdmFsdWUpID09PSAwIHx8IGJldHdlZW4oZW5kQm91bmQsIHByZXZWYWx1ZSwgdmFsdWUpO1xuICBjb25zdCBzaG91bGRTdGFydCA9ICgpID0+IGluc2lkZSB8fCBzdGFydElzQmVmb3JlKCk7XG4gIGNvbnN0IHNob3VsZFN0b3AgPSAoKSA9PiAhaW5zaWRlIHx8IGVuZElzQmVmb3JlKCk7XG4gIGZvciAobGV0IGkgPSBzdGFydCwgcHJldiA9IHN0YXJ0OyBpIDw9IGVuZDsgKytpKSB7XG4gICAgcG9pbnQgPSBwb2ludHNbaSAlIGNvdW50XTtcbiAgICBpZiAocG9pbnQuc2tpcCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIHZhbHVlID0gbm9ybWFsaXplKHBvaW50W3Byb3BlcnR5XSk7XG4gICAgaWYgKHZhbHVlID09PSBwcmV2VmFsdWUpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpbnNpZGUgPSBiZXR3ZWVuKHZhbHVlLCBzdGFydEJvdW5kLCBlbmRCb3VuZCk7XG4gICAgaWYgKHN1YlN0YXJ0ID09PSBudWxsICYmIHNob3VsZFN0YXJ0KCkpIHtcbiAgICAgIHN1YlN0YXJ0ID0gY29tcGFyZSh2YWx1ZSwgc3RhcnRCb3VuZCkgPT09IDAgPyBpIDogcHJldjtcbiAgICB9XG4gICAgaWYgKHN1YlN0YXJ0ICE9PSBudWxsICYmIHNob3VsZFN0b3AoKSkge1xuICAgICAgcmVzdWx0LnB1c2gobm9ybWFsaXplU2VnbWVudCh7XG4gICAgICAgIHN0YXJ0OiBzdWJTdGFydCxcbiAgICAgICAgZW5kOiBpLFxuICAgICAgICBsb29wLFxuICAgICAgICBjb3VudCxcbiAgICAgICAgc3R5bGVcbiAgICAgIH0pKTtcbiAgICAgIHN1YlN0YXJ0ID0gbnVsbDtcbiAgICB9XG4gICAgcHJldiA9IGk7XG4gICAgcHJldlZhbHVlID0gdmFsdWU7XG4gIH1cbiAgaWYgKHN1YlN0YXJ0ICE9PSBudWxsKSB7XG4gICAgcmVzdWx0LnB1c2gobm9ybWFsaXplU2VnbWVudCh7XG4gICAgICBzdGFydDogc3ViU3RhcnQsXG4gICAgICBlbmQsXG4gICAgICBsb29wLFxuICAgICAgY291bnQsXG4gICAgICBzdHlsZVxuICAgIH0pKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuZnVuY3Rpb24gX2JvdW5kU2VnbWVudHMobGluZSwgYm91bmRzKSB7XG4gIGNvbnN0IHJlc3VsdCA9IFtdO1xuICBjb25zdCBzZWdtZW50cyA9IGxpbmUuc2VnbWVudHM7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc2VnbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBzdWIgPSBfYm91bmRTZWdtZW50KHNlZ21lbnRzW2ldLCBsaW5lLnBvaW50cywgYm91bmRzKTtcbiAgICBpZiAoc3ViLmxlbmd0aCkge1xuICAgICAgcmVzdWx0LnB1c2goLi4uc3ViKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cbmZ1bmN0aW9uIGZpbmRTdGFydEFuZEVuZChwb2ludHMsIGNvdW50LCBsb29wLCBzcGFuR2Fwcykge1xuICBsZXQgc3RhcnQgPSAwO1xuICBsZXQgZW5kID0gY291bnQgLSAxO1xuICBpZiAobG9vcCAmJiAhc3BhbkdhcHMpIHtcbiAgICB3aGlsZSAoc3RhcnQgPCBjb3VudCAmJiAhcG9pbnRzW3N0YXJ0XS5za2lwKSB7XG4gICAgICBzdGFydCsrO1xuICAgIH1cbiAgfVxuICB3aGlsZSAoc3RhcnQgPCBjb3VudCAmJiBwb2ludHNbc3RhcnRdLnNraXApIHtcbiAgICBzdGFydCsrO1xuICB9XG4gIHN0YXJ0ICU9IGNvdW50O1xuICBpZiAobG9vcCkge1xuICAgIGVuZCArPSBzdGFydDtcbiAgfVxuICB3aGlsZSAoZW5kID4gc3RhcnQgJiYgcG9pbnRzW2VuZCAlIGNvdW50XS5za2lwKSB7XG4gICAgZW5kLS07XG4gIH1cbiAgZW5kICU9IGNvdW50O1xuICByZXR1cm4ge1xuICAgIHN0YXJ0LFxuICAgIGVuZFxuICB9O1xufVxuZnVuY3Rpb24gc29saWRTZWdtZW50cyhwb2ludHMsIHN0YXJ0LCBtYXgsIGxvb3ApIHtcbiAgY29uc3QgY291bnQgPSBwb2ludHMubGVuZ3RoO1xuICBjb25zdCByZXN1bHQgPSBbXTtcbiAgbGV0IGxhc3QgPSBzdGFydDtcbiAgbGV0IHByZXYgPSBwb2ludHNbc3RhcnRdO1xuICBsZXQgZW5kO1xuICBmb3IgKGVuZCA9IHN0YXJ0ICsgMTsgZW5kIDw9IG1heDsgKytlbmQpIHtcbiAgICBjb25zdCBjdXIgPSBwb2ludHNbZW5kICUgY291bnRdO1xuICAgIGlmIChjdXIuc2tpcCB8fCBjdXIuc3RvcCkge1xuICAgICAgaWYgKCFwcmV2LnNraXApIHtcbiAgICAgICAgbG9vcCA9IGZhbHNlO1xuICAgICAgICByZXN1bHQucHVzaCh7XG4gICAgICAgICAgc3RhcnQ6IHN0YXJ0ICUgY291bnQsXG4gICAgICAgICAgZW5kOiAoZW5kIC0gMSkgJSBjb3VudCxcbiAgICAgICAgICBsb29wXG4gICAgICAgIH0pO1xuICAgICAgICBzdGFydCA9IGxhc3QgPSBjdXIuc3RvcCA/IGVuZCA6IG51bGw7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGxhc3QgPSBlbmQ7XG4gICAgICBpZiAocHJldi5za2lwKSB7XG4gICAgICAgIHN0YXJ0ID0gZW5kO1xuICAgICAgfVxuICAgIH1cbiAgICBwcmV2ID0gY3VyO1xuICB9XG4gIGlmIChsYXN0ICE9PSBudWxsKSB7XG4gICAgcmVzdWx0LnB1c2goe1xuICAgICAgc3RhcnQ6IHN0YXJ0ICUgY291bnQsXG4gICAgICBlbmQ6IGxhc3QgJSBjb3VudCxcbiAgICAgIGxvb3BcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuZnVuY3Rpb24gX2NvbXB1dGVTZWdtZW50cyhsaW5lLCBzZWdtZW50T3B0aW9ucykge1xuICBjb25zdCBwb2ludHMgPSBsaW5lLnBvaW50cztcbiAgY29uc3Qgc3BhbkdhcHMgPSBsaW5lLm9wdGlvbnMuc3BhbkdhcHM7XG4gIGNvbnN0IGNvdW50ID0gcG9pbnRzLmxlbmd0aDtcbiAgaWYgKCFjb3VudCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICBjb25zdCBsb29wID0gISFsaW5lLl9sb29wO1xuICBjb25zdCB7XG4gICAgc3RhcnQsXG4gICAgZW5kXG4gIH0gPSBmaW5kU3RhcnRBbmRFbmQocG9pbnRzLCBjb3VudCwgbG9vcCwgc3BhbkdhcHMpO1xuICBpZiAoc3BhbkdhcHMgPT09IHRydWUpIHtcbiAgICByZXR1cm4gc3BsaXRCeVN0eWxlcyhsaW5lLCBbe1xuICAgICAgc3RhcnQsXG4gICAgICBlbmQsXG4gICAgICBsb29wXG4gICAgfV0sIHBvaW50cywgc2VnbWVudE9wdGlvbnMpO1xuICB9XG4gIGNvbnN0IG1heCA9IGVuZCA8IHN0YXJ0ID8gZW5kICsgY291bnQgOiBlbmQ7XG4gIGNvbnN0IGNvbXBsZXRlTG9vcCA9ICEhbGluZS5fZnVsbExvb3AgJiYgc3RhcnQgPT09IDAgJiYgZW5kID09PSBjb3VudCAtIDE7XG4gIHJldHVybiBzcGxpdEJ5U3R5bGVzKGxpbmUsIHNvbGlkU2VnbWVudHMocG9pbnRzLCBzdGFydCwgbWF4LCBjb21wbGV0ZUxvb3ApLCBwb2ludHMsIHNlZ21lbnRPcHRpb25zKTtcbn1cbmZ1bmN0aW9uIHNwbGl0QnlTdHlsZXMobGluZSwgc2VnbWVudHMsIHBvaW50cywgc2VnbWVudE9wdGlvbnMpIHtcbiAgaWYgKCFzZWdtZW50T3B0aW9ucyB8fCAhc2VnbWVudE9wdGlvbnMuc2V0Q29udGV4dCB8fCAhcG9pbnRzKSB7XG4gICAgcmV0dXJuIHNlZ21lbnRzO1xuICB9XG4gIHJldHVybiBkb1NwbGl0QnlTdHlsZXMobGluZSwgc2VnbWVudHMsIHBvaW50cywgc2VnbWVudE9wdGlvbnMpO1xufVxuZnVuY3Rpb24gZG9TcGxpdEJ5U3R5bGVzKGxpbmUsIHNlZ21lbnRzLCBwb2ludHMsIHNlZ21lbnRPcHRpb25zKSB7XG4gIGNvbnN0IGNoYXJ0Q29udGV4dCA9IGxpbmUuX2NoYXJ0LmdldENvbnRleHQoKTtcbiAgY29uc3QgYmFzZVN0eWxlID0gcmVhZFN0eWxlKGxpbmUub3B0aW9ucyk7XG4gIGNvbnN0IHtcbiAgICBfZGF0YXNldEluZGV4OiBkYXRhc2V0SW5kZXgsXG4gICAgb3B0aW9uczoge1xuICAgICAgc3BhbkdhcHNcbiAgICB9XG4gIH0gPSBsaW5lO1xuICBjb25zdCBjb3VudCA9IHBvaW50cy5sZW5ndGg7XG4gIGNvbnN0IHJlc3VsdCA9IFtdO1xuICBsZXQgcHJldlN0eWxlID0gYmFzZVN0eWxlO1xuICBsZXQgc3RhcnQgPSBzZWdtZW50c1swXS5zdGFydDtcbiAgbGV0IGkgPSBzdGFydDtcbiAgZnVuY3Rpb24gYWRkU3R5bGUocywgZSwgbCwgc3QpIHtcbiAgICBjb25zdCBkaXIgPSBzcGFuR2FwcyA/IC0xIDogMTtcbiAgICBpZiAocyA9PT0gZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzICs9IGNvdW50O1xuICAgIHdoaWxlIChwb2ludHNbcyAlIGNvdW50XS5za2lwKSB7XG4gICAgICBzIC09IGRpcjtcbiAgICB9XG4gICAgd2hpbGUgKHBvaW50c1tlICUgY291bnRdLnNraXApIHtcbiAgICAgIGUgKz0gZGlyO1xuICAgIH1cbiAgICBpZiAocyAlIGNvdW50ICE9PSBlICUgY291bnQpIHtcbiAgICAgIHJlc3VsdC5wdXNoKHtcbiAgICAgICAgc3RhcnQ6IHMgJSBjb3VudCxcbiAgICAgICAgZW5kOiBlICUgY291bnQsXG4gICAgICAgIGxvb3A6IGwsXG4gICAgICAgIHN0eWxlOiBzdFxuICAgICAgfSk7XG4gICAgICBwcmV2U3R5bGUgPSBzdDtcbiAgICAgIHN0YXJ0ID0gZSAlIGNvdW50O1xuICAgIH1cbiAgfVxuICBmb3IgKGNvbnN0IHNlZ21lbnQgb2Ygc2VnbWVudHMpIHtcbiAgICBzdGFydCA9IHNwYW5HYXBzID8gc3RhcnQgOiBzZWdtZW50LnN0YXJ0O1xuICAgIGxldCBwcmV2ID0gcG9pbnRzW3N0YXJ0ICUgY291bnRdO1xuICAgIGxldCBzdHlsZTtcbiAgICBmb3IgKGkgPSBzdGFydCArIDE7IGkgPD0gc2VnbWVudC5lbmQ7IGkrKykge1xuICAgICAgY29uc3QgcHQgPSBwb2ludHNbaSAlIGNvdW50XTtcbiAgICAgIHN0eWxlID0gcmVhZFN0eWxlKHNlZ21lbnRPcHRpb25zLnNldENvbnRleHQoY3JlYXRlQ29udGV4dChjaGFydENvbnRleHQsIHtcbiAgICAgICAgdHlwZTogJ3NlZ21lbnQnLFxuICAgICAgICBwMDogcHJldixcbiAgICAgICAgcDE6IHB0LFxuICAgICAgICBwMERhdGFJbmRleDogKGkgLSAxKSAlIGNvdW50LFxuICAgICAgICBwMURhdGFJbmRleDogaSAlIGNvdW50LFxuICAgICAgICBkYXRhc2V0SW5kZXhcbiAgICAgIH0pKSk7XG4gICAgICBpZiAoc3R5bGVDaGFuZ2VkKHN0eWxlLCBwcmV2U3R5bGUpKSB7XG4gICAgICAgIGFkZFN0eWxlKHN0YXJ0LCBpIC0gMSwgc2VnbWVudC5sb29wLCBwcmV2U3R5bGUpO1xuICAgICAgfVxuICAgICAgcHJldiA9IHB0O1xuICAgICAgcHJldlN0eWxlID0gc3R5bGU7XG4gICAgfVxuICAgIGlmIChzdGFydCA8IGkgLSAxKSB7XG4gICAgICBhZGRTdHlsZShzdGFydCwgaSAtIDEsIHNlZ21lbnQubG9vcCwgcHJldlN0eWxlKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cbmZ1bmN0aW9uIHJlYWRTdHlsZShvcHRpb25zKSB7XG4gIHJldHVybiB7XG4gICAgYmFja2dyb3VuZENvbG9yOiBvcHRpb25zLmJhY2tncm91bmRDb2xvcixcbiAgICBib3JkZXJDYXBTdHlsZTogb3B0aW9ucy5ib3JkZXJDYXBTdHlsZSxcbiAgICBib3JkZXJEYXNoOiBvcHRpb25zLmJvcmRlckRhc2gsXG4gICAgYm9yZGVyRGFzaE9mZnNldDogb3B0aW9ucy5ib3JkZXJEYXNoT2Zmc2V0LFxuICAgIGJvcmRlckpvaW5TdHlsZTogb3B0aW9ucy5ib3JkZXJKb2luU3R5bGUsXG4gICAgYm9yZGVyV2lkdGg6IG9wdGlvbnMuYm9yZGVyV2lkdGgsXG4gICAgYm9yZGVyQ29sb3I6IG9wdGlvbnMuYm9yZGVyQ29sb3JcbiAgfTtcbn1cbmZ1bmN0aW9uIHN0eWxlQ2hhbmdlZChzdHlsZSwgcHJldlN0eWxlKSB7XG4gIGlmICghcHJldlN0eWxlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IGNhY2hlID0gW107XG4gIGNvbnN0IHJlcGxhY2VyID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICBpZiAoIWlzUGF0dGVybk9yR3JhZGllbnQodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIGlmICghY2FjaGUuaW5jbHVkZXModmFsdWUpKSB7XG4gICAgICBjYWNoZS5wdXNoKHZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIGNhY2hlLmluZGV4T2YodmFsdWUpO1xuICB9O1xuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoc3R5bGUsIHJlcGxhY2VyKSAhPT0gSlNPTi5zdHJpbmdpZnkocHJldlN0eWxlLCByZXBsYWNlcik7XG59XG5mdW5jdGlvbiBnZXRTaXplRm9yQXJlYShzY2FsZSwgY2hhcnRBcmVhLCBmaWVsZCkge1xuICByZXR1cm4gc2NhbGUub3B0aW9ucy5jbGlwID8gc2NhbGVbZmllbGRdIDogY2hhcnRBcmVhW2ZpZWxkXTtcbn1cbmZ1bmN0aW9uIGdldERhdGFzZXRBcmVhKG1ldGEsIGNoYXJ0QXJlYSkge1xuICBjb25zdCB7XG4gICAgeFNjYWxlLFxuICAgIHlTY2FsZVxuICB9ID0gbWV0YTtcbiAgaWYgKHhTY2FsZSAmJiB5U2NhbGUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbGVmdDogZ2V0U2l6ZUZvckFyZWEoeFNjYWxlLCBjaGFydEFyZWEsICdsZWZ0JyksXG4gICAgICByaWdodDogZ2V0U2l6ZUZvckFyZWEoeFNjYWxlLCBjaGFydEFyZWEsICdyaWdodCcpLFxuICAgICAgdG9wOiBnZXRTaXplRm9yQXJlYSh5U2NhbGUsIGNoYXJ0QXJlYSwgJ3RvcCcpLFxuICAgICAgYm90dG9tOiBnZXRTaXplRm9yQXJlYSh5U2NhbGUsIGNoYXJ0QXJlYSwgJ2JvdHRvbScpXG4gICAgfTtcbiAgfVxuICByZXR1cm4gY2hhcnRBcmVhO1xufVxuZnVuY3Rpb24gZ2V0RGF0YXNldENsaXBBcmVhKGNoYXJ0LCBtZXRhKSB7XG4gIGNvbnN0IGNsaXAgPSBtZXRhLl9jbGlwO1xuICBpZiAoY2xpcC5kaXNhYmxlZCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBjb25zdCBhcmVhID0gZ2V0RGF0YXNldEFyZWEobWV0YSwgY2hhcnQuY2hhcnRBcmVhKTtcbiAgcmV0dXJuIHtcbiAgICBsZWZ0OiBjbGlwLmxlZnQgPT09IGZhbHNlID8gMCA6IGFyZWEubGVmdCAtIChjbGlwLmxlZnQgPT09IHRydWUgPyAwIDogY2xpcC5sZWZ0KSxcbiAgICByaWdodDogY2xpcC5yaWdodCA9PT0gZmFsc2UgPyBjaGFydC53aWR0aCA6IGFyZWEucmlnaHQgKyAoY2xpcC5yaWdodCA9PT0gdHJ1ZSA/IDAgOiBjbGlwLnJpZ2h0KSxcbiAgICB0b3A6IGNsaXAudG9wID09PSBmYWxzZSA/IDAgOiBhcmVhLnRvcCAtIChjbGlwLnRvcCA9PT0gdHJ1ZSA/IDAgOiBjbGlwLnRvcCksXG4gICAgYm90dG9tOiBjbGlwLmJvdHRvbSA9PT0gZmFsc2UgPyBjaGFydC5oZWlnaHQgOiBhcmVhLmJvdHRvbSArIChjbGlwLmJvdHRvbSA9PT0gdHJ1ZSA/IDAgOiBjbGlwLmJvdHRvbSlcbiAgfTtcbn1cbmV4cG9ydCB7IHVuY2xpcEFyZWEgYXMgJCwgX3Jsb29rdXBCeUtleSBhcyBBLCBfbG9va3VwQnlLZXkgYXMgQiwgX2lzUG9pbnRJbkFyZWEgYXMgQywgZ2V0QW5nbGVGcm9tUG9pbnQgYXMgRCwgdG9QYWRkaW5nIGFzIEUsIGVhY2ggYXMgRiwgZ2V0TWF4aW11bVNpemUgYXMgRywgSEFMRl9QSSBhcyBILCBfZ2V0UGFyZW50Tm9kZSBhcyBJLCByZWFkVXNlZFNpemUgYXMgSiwgc3VwcG9ydHNFdmVudExpc3RlbmVyT3B0aW9ucyBhcyBLLCB0aHJvdHRsZWQgYXMgTCwgX2lzRG9tU3VwcG9ydGVkIGFzIE0sIF9mYWN0b3JpemUgYXMgTiwgZmluaXRlT3JEZWZhdWx0IGFzIE8sIFBJIGFzIFAsIGNhbGxiYWNrIGFzIFEsIF9hZGRHcmFjZSBhcyBSLCBfbGltaXRWYWx1ZSBhcyBTLCBUQVUgYXMgVCwgdG9EZWdyZWVzIGFzIFUsIF9tZWFzdXJlVGV4dCBhcyBWLCBfaW50MTZSYW5nZSBhcyBXLCBfYWxpZ25QaXhlbCBhcyBYLCBjbGlwQXJlYSBhcyBZLCByZW5kZXJUZXh0IGFzIFosIF9hcnJheVVuaXF1ZSBhcyBfLCByZXNvbHZlIGFzIGEsIGdldFN0eWxlIGFzIGEkLCB0b0ZvbnQgYXMgYTAsIF90b0xlZnRSaWdodENlbnRlciBhcyBhMSwgX2FsaWduU3RhcnRFbmQgYXMgYTIsIG92ZXJyaWRlcyBhcyBhMywgbWVyZ2UgYXMgYTQsIF9jYXBpdGFsaXplIGFzIGE1LCBkZXNjcmlwdG9ycyBhcyBhNiwgaXNGdW5jdGlvbiBhcyBhNywgX2F0dGFjaENvbnRleHQgYXMgYTgsIF9jcmVhdGVSZXNvbHZlciBhcyBhOSwgZ2V0UnRsQWRhcHRlciBhcyBhQSwgb3ZlcnJpZGVUZXh0RGlyZWN0aW9uIGFzIGFCLCBfdGV4dFggYXMgYUMsIHJlc3RvcmVUZXh0RGlyZWN0aW9uIGFzIGFELCBkcmF3UG9pbnRMZWdlbmQgYXMgYUUsIGRpc3RhbmNlQmV0d2VlblBvaW50cyBhcyBhRiwgbm9vcCBhcyBhRywgX3NldE1pbkFuZE1heEJ5S2V5IGFzIGFILCBuaWNlTnVtIGFzIGFJLCBhbG1vc3RXaG9sZSBhcyBhSiwgYWxtb3N0RXF1YWxzIGFzIGFLLCBfZGVjaW1hbFBsYWNlcyBhcyBhTCwgVGlja3MgYXMgYU0sIGxvZzEwIGFzIGFOLCBfbG9uZ2VzdFRleHQgYXMgYU8sIF9maWx0ZXJCZXR3ZWVuIGFzIGFQLCBfbG9va3VwIGFzIGFRLCBpc1BhdHRlcm5PckdyYWRpZW50IGFzIGFSLCBnZXRIb3ZlckNvbG9yIGFzIGFTLCBjbG9uZSBhcyBhVCwgX21lcmdlciBhcyBhVSwgX21lcmdlcklmIGFzIGFWLCBfZGVwcmVjYXRlZCBhcyBhVywgX3NwbGl0S2V5IGFzIGFYLCB0b0ZvbnRTdHJpbmcgYXMgYVksIHNwbGluZUN1cnZlIGFzIGFaLCBzcGxpbmVDdXJ2ZU1vbm90b25lIGFzIGFfLCBfZGVzY3JpcHRvcnMgYXMgYWEsIG1lcmdlSWYgYXMgYWIsIHVpZCBhcyBhYywgZGVib3VuY2UgYXMgYWQsIHJldGluYVNjYWxlIGFzIGFlLCBjbGVhckNhbnZhcyBhcyBhZiwgc2V0c0VxdWFsIGFzIGFnLCBnZXREYXRhc2V0Q2xpcEFyZWEgYXMgYWgsIF9lbGVtZW50c0VxdWFsIGFzIGFpLCBfaXNDbGlja0V2ZW50IGFzIGFqLCBfaXNCZXR3ZWVuIGFzIGFrLCBfbm9ybWFsaXplQW5nbGUgYXMgYWwsIF9yZWFkVmFsdWVUb1Byb3BzIGFzIGFtLCBfdXBkYXRlQmV6aWVyQ29udHJvbFBvaW50cyBhcyBhbiwgX2NvbXB1dGVTZWdtZW50cyBhcyBhbywgX2JvdW5kU2VnbWVudHMgYXMgYXAsIF9zdGVwcGVkSW50ZXJwb2xhdGlvbiBhcyBhcSwgX2JlemllckludGVycG9sYXRpb24gYXMgYXIsIF9wb2ludEluTGluZSBhcyBhcywgX3N0ZXBwZWRMaW5lVG8gYXMgYXQsIF9iZXppZXJDdXJ2ZVRvIGFzIGF1LCBkcmF3UG9pbnQgYXMgYXYsIGFkZFJvdW5kZWRSZWN0UGF0aCBhcyBhdywgdG9UUkJMIGFzIGF4LCB0b1RSQkxDb3JuZXJzIGFzIGF5LCBfYm91bmRTZWdtZW50IGFzIGF6LCBpc0FycmF5IGFzIGIsIGZvbnRTdHJpbmcgYXMgYjAsIHRvTGluZUhlaWdodCBhcyBiMSwgUElUQVUgYXMgYjIsIElORklOSVRZIGFzIGIzLCBSQURfUEVSX0RFRyBhcyBiNCwgUVVBUlRFUl9QSSBhcyBiNSwgVFdPX1RISVJEU19QSSBhcyBiNiwgX2FuZ2xlRGlmZiBhcyBiNywgY29sb3IgYXMgYywgZGVmYXVsdHMgYXMgZCwgZWZmZWN0cyBhcyBlLCByZXNvbHZlT2JqZWN0S2V5IGFzIGYsIGlzTnVtYmVyRmluaXRlIGFzIGcsIGRlZmluZWQgYXMgaCwgaXNPYmplY3QgYXMgaSwgY3JlYXRlQ29udGV4dCBhcyBqLCBpc051bGxPclVuZGVmIGFzIGssIGxpc3RlbkFycmF5RXZlbnRzIGFzIGwsIHRvUGVyY2VudGFnZSBhcyBtLCB0b0RpbWVuc2lvbiBhcyBuLCBmb3JtYXROdW1iZXIgYXMgbywgX2FuZ2xlQmV0d2VlbiBhcyBwLCBfZ2V0U3RhcnRBbmRDb3VudE9mVmlzaWJsZVBvaW50cyBhcyBxLCByZXF1ZXN0QW5pbUZyYW1lIGFzIHIsIHNpZ24gYXMgcywgdG9SYWRpYW5zIGFzIHQsIHVubGlzdGVuQXJyYXlFdmVudHMgYXMgdSwgdmFsdWVPckRlZmF1bHQgYXMgdiwgX3NjYWxlUmFuZ2VzQ2hhbmdlZCBhcyB3LCBpc051bWJlciBhcyB4LCBfcGFyc2VPYmplY3REYXRhUmFkaWFsU2NhbGUgYXMgeSwgZ2V0UmVsYXRpdmVQb3NpdGlvbiBhcyB6IH07XG4iLCIvKiFcbiAqIENoYXJ0LmpzIHY0LjUuMVxuICogaHR0cHM6Ly93d3cuY2hhcnRqcy5vcmdcbiAqIChjKSAyMDI1IENoYXJ0LmpzIENvbnRyaWJ1dG9yc1xuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlXG4gKi9cbmltcG9ydCB7IHIgYXMgcmVxdWVzdEFuaW1GcmFtZSwgYSBhcyByZXNvbHZlLCBlIGFzIGVmZmVjdHMsIGMgYXMgY29sb3IsIGkgYXMgaXNPYmplY3QsIGQgYXMgZGVmYXVsdHMsIGIgYXMgaXNBcnJheSwgdiBhcyB2YWx1ZU9yRGVmYXVsdCwgdSBhcyB1bmxpc3RlbkFycmF5RXZlbnRzLCBsIGFzIGxpc3RlbkFycmF5RXZlbnRzLCBmIGFzIHJlc29sdmVPYmplY3RLZXksIGcgYXMgaXNOdW1iZXJGaW5pdGUsIGggYXMgZGVmaW5lZCwgcyBhcyBzaWduLCBqIGFzIGNyZWF0ZUNvbnRleHQsIGsgYXMgaXNOdWxsT3JVbmRlZiwgXyBhcyBfYXJyYXlVbmlxdWUsIHQgYXMgdG9SYWRpYW5zLCBtIGFzIHRvUGVyY2VudGFnZSwgbiBhcyB0b0RpbWVuc2lvbiwgVCBhcyBUQVUsIG8gYXMgZm9ybWF0TnVtYmVyLCBwIGFzIF9hbmdsZUJldHdlZW4sIEggYXMgSEFMRl9QSSwgUCBhcyBQSSwgcSBhcyBfZ2V0U3RhcnRBbmRDb3VudE9mVmlzaWJsZVBvaW50cywgdyBhcyBfc2NhbGVSYW5nZXNDaGFuZ2VkLCB4IGFzIGlzTnVtYmVyLCB5IGFzIF9wYXJzZU9iamVjdERhdGFSYWRpYWxTY2FsZSwgeiBhcyBnZXRSZWxhdGl2ZVBvc2l0aW9uLCBBIGFzIF9ybG9va3VwQnlLZXksIEIgYXMgX2xvb2t1cEJ5S2V5LCBDIGFzIF9pc1BvaW50SW5BcmVhLCBEIGFzIGdldEFuZ2xlRnJvbVBvaW50LCBFIGFzIHRvUGFkZGluZywgRiBhcyBlYWNoLCBHIGFzIGdldE1heGltdW1TaXplLCBJIGFzIF9nZXRQYXJlbnROb2RlLCBKIGFzIHJlYWRVc2VkU2l6ZSwgSyBhcyBzdXBwb3J0c0V2ZW50TGlzdGVuZXJPcHRpb25zLCBMIGFzIHRocm90dGxlZCwgTSBhcyBfaXNEb21TdXBwb3J0ZWQsIE4gYXMgX2ZhY3Rvcml6ZSwgTyBhcyBmaW5pdGVPckRlZmF1bHQsIFEgYXMgY2FsbGJhY2ssIFIgYXMgX2FkZEdyYWNlLCBTIGFzIF9saW1pdFZhbHVlLCBVIGFzIHRvRGVncmVlcywgViBhcyBfbWVhc3VyZVRleHQsIFcgYXMgX2ludDE2UmFuZ2UsIFggYXMgX2FsaWduUGl4ZWwsIFkgYXMgY2xpcEFyZWEsIFogYXMgcmVuZGVyVGV4dCwgJCBhcyB1bmNsaXBBcmVhLCBhMCBhcyB0b0ZvbnQsIGExIGFzIF90b0xlZnRSaWdodENlbnRlciwgYTIgYXMgX2FsaWduU3RhcnRFbmQsIGEzIGFzIG92ZXJyaWRlcywgYTQgYXMgbWVyZ2UsIGE1IGFzIF9jYXBpdGFsaXplLCBhNiBhcyBkZXNjcmlwdG9ycywgYTcgYXMgaXNGdW5jdGlvbiwgYTggYXMgX2F0dGFjaENvbnRleHQsIGE5IGFzIF9jcmVhdGVSZXNvbHZlciwgYWEgYXMgX2Rlc2NyaXB0b3JzLCBhYiBhcyBtZXJnZUlmLCBhYyBhcyB1aWQsIGFkIGFzIGRlYm91bmNlLCBhZSBhcyByZXRpbmFTY2FsZSwgYWYgYXMgY2xlYXJDYW52YXMsIGFnIGFzIHNldHNFcXVhbCwgYWggYXMgZ2V0RGF0YXNldENsaXBBcmVhLCBhaSBhcyBfZWxlbWVudHNFcXVhbCwgYWogYXMgX2lzQ2xpY2tFdmVudCwgYWsgYXMgX2lzQmV0d2VlbiwgYWwgYXMgX25vcm1hbGl6ZUFuZ2xlLCBhbSBhcyBfcmVhZFZhbHVlVG9Qcm9wcywgYW4gYXMgX3VwZGF0ZUJlemllckNvbnRyb2xQb2ludHMsIGFvIGFzIF9jb21wdXRlU2VnbWVudHMsIGFwIGFzIF9ib3VuZFNlZ21lbnRzLCBhcSBhcyBfc3RlcHBlZEludGVycG9sYXRpb24sIGFyIGFzIF9iZXppZXJJbnRlcnBvbGF0aW9uLCBhcyBhcyBfcG9pbnRJbkxpbmUsIGF0IGFzIF9zdGVwcGVkTGluZVRvLCBhdSBhcyBfYmV6aWVyQ3VydmVUbywgYXYgYXMgZHJhd1BvaW50LCBhdyBhcyBhZGRSb3VuZGVkUmVjdFBhdGgsIGF4IGFzIHRvVFJCTCwgYXkgYXMgdG9UUkJMQ29ybmVycywgYXogYXMgX2JvdW5kU2VnbWVudCwgYUEgYXMgZ2V0UnRsQWRhcHRlciwgYUIgYXMgb3ZlcnJpZGVUZXh0RGlyZWN0aW9uLCBhQyBhcyBfdGV4dFgsIGFEIGFzIHJlc3RvcmVUZXh0RGlyZWN0aW9uLCBhRSBhcyBkcmF3UG9pbnRMZWdlbmQsIGFGIGFzIGRpc3RhbmNlQmV0d2VlblBvaW50cywgYUcgYXMgbm9vcCwgYUggYXMgX3NldE1pbkFuZE1heEJ5S2V5LCBhSSBhcyBuaWNlTnVtLCBhSiBhcyBhbG1vc3RXaG9sZSwgYUsgYXMgYWxtb3N0RXF1YWxzLCBhTCBhcyBfZGVjaW1hbFBsYWNlcywgYU0gYXMgVGlja3MsIGFOIGFzIGxvZzEwLCBhTyBhcyBfbG9uZ2VzdFRleHQsIGFQIGFzIF9maWx0ZXJCZXR3ZWVuLCBhUSBhcyBfbG9va3VwIH0gZnJvbSAnLi9jaHVua3MvaGVscGVycy5kYXRhc2V0LmpzJztcbmltcG9ydCAnQGt1cmtsZS9jb2xvcic7XG5jbGFzcyBBbmltYXRvciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuX3JlcXVlc3QgPSBudWxsO1xuICAgIHRoaXMuX2NoYXJ0cyA9IG5ldyBNYXAoKTtcbiAgICB0aGlzLl9ydW5uaW5nID0gZmFsc2U7XG4gICAgdGhpcy5fbGFzdERhdGUgPSB1bmRlZmluZWQ7XG4gIH1cbiAgX25vdGlmeShjaGFydCwgYW5pbXMsIGRhdGUsIHR5cGUpIHtcbiAgICBjb25zdCBjYWxsYmFja3MgPSBhbmltcy5saXN0ZW5lcnNbdHlwZV07XG4gICAgY29uc3QgbnVtU3RlcHMgPSBhbmltcy5kdXJhdGlvbjtcbiAgICBjYWxsYmFja3MuZm9yRWFjaChmbiA9PiBmbih7XG4gICAgICBjaGFydCxcbiAgICAgIGluaXRpYWw6IGFuaW1zLmluaXRpYWwsXG4gICAgICBudW1TdGVwcyxcbiAgICAgIGN1cnJlbnRTdGVwOiBNYXRoLm1pbihkYXRlIC0gYW5pbXMuc3RhcnQsIG51bVN0ZXBzKVxuICAgIH0pKTtcbiAgfVxuICBfcmVmcmVzaCgpIHtcbiAgICBpZiAodGhpcy5fcmVxdWVzdCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9ydW5uaW5nID0gdHJ1ZTtcbiAgICB0aGlzLl9yZXF1ZXN0ID0gcmVxdWVzdEFuaW1GcmFtZS5jYWxsKHdpbmRvdywgKCkgPT4ge1xuICAgICAgdGhpcy5fdXBkYXRlKCk7XG4gICAgICB0aGlzLl9yZXF1ZXN0ID0gbnVsbDtcbiAgICAgIGlmICh0aGlzLl9ydW5uaW5nKSB7XG4gICAgICAgIHRoaXMuX3JlZnJlc2goKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICBfdXBkYXRlKGRhdGUgPSBEYXRlLm5vdygpKSB7XG4gICAgbGV0IHJlbWFpbmluZyA9IDA7XG4gICAgdGhpcy5fY2hhcnRzLmZvckVhY2goKGFuaW1zLCBjaGFydCkgPT4ge1xuICAgICAgaWYgKCFhbmltcy5ydW5uaW5nIHx8ICFhbmltcy5pdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgaXRlbXMgPSBhbmltcy5pdGVtcztcbiAgICAgIGxldCBpID0gaXRlbXMubGVuZ3RoIC0gMTtcbiAgICAgIGxldCBkcmF3ID0gZmFsc2U7XG4gICAgICBsZXQgaXRlbTtcbiAgICAgIGZvciAoOyBpID49IDA7IC0taSkge1xuICAgICAgICBpdGVtID0gaXRlbXNbaV07XG4gICAgICAgIGlmIChpdGVtLl9hY3RpdmUpIHtcbiAgICAgICAgICBpZiAoaXRlbS5fdG90YWwgPiBhbmltcy5kdXJhdGlvbikge1xuICAgICAgICAgICAgYW5pbXMuZHVyYXRpb24gPSBpdGVtLl90b3RhbDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaXRlbS50aWNrKGRhdGUpO1xuICAgICAgICAgIGRyYXcgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGl0ZW1zW2ldID0gaXRlbXNbaXRlbXMubGVuZ3RoIC0gMV07XG4gICAgICAgICAgaXRlbXMucG9wKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChkcmF3KSB7XG4gICAgICAgIGNoYXJ0LmRyYXcoKTtcbiAgICAgICAgdGhpcy5fbm90aWZ5KGNoYXJ0LCBhbmltcywgZGF0ZSwgJ3Byb2dyZXNzJyk7XG4gICAgICB9XG4gICAgICBpZiAoIWl0ZW1zLmxlbmd0aCkge1xuICAgICAgICBhbmltcy5ydW5uaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX25vdGlmeShjaGFydCwgYW5pbXMsIGRhdGUsICdjb21wbGV0ZScpO1xuICAgICAgICBhbmltcy5pbml0aWFsID0gZmFsc2U7XG4gICAgICB9XG4gICAgICByZW1haW5pbmcgKz0gaXRlbXMubGVuZ3RoO1xuICAgIH0pO1xuICAgIHRoaXMuX2xhc3REYXRlID0gZGF0ZTtcbiAgICBpZiAocmVtYWluaW5nID09PSAwKSB7XG4gICAgICB0aGlzLl9ydW5uaW5nID0gZmFsc2U7XG4gICAgfVxuICB9XG4gIF9nZXRBbmltcyhjaGFydCkge1xuICAgIGNvbnN0IGNoYXJ0cyA9IHRoaXMuX2NoYXJ0cztcbiAgICBsZXQgYW5pbXMgPSBjaGFydHMuZ2V0KGNoYXJ0KTtcbiAgICBpZiAoIWFuaW1zKSB7XG4gICAgICBhbmltcyA9IHtcbiAgICAgICAgcnVubmluZzogZmFsc2UsXG4gICAgICAgIGluaXRpYWw6IHRydWUsXG4gICAgICAgIGl0ZW1zOiBbXSxcbiAgICAgICAgbGlzdGVuZXJzOiB7XG4gICAgICAgICAgY29tcGxldGU6IFtdLFxuICAgICAgICAgIHByb2dyZXNzOiBbXVxuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY2hhcnRzLnNldChjaGFydCwgYW5pbXMpO1xuICAgIH1cbiAgICByZXR1cm4gYW5pbXM7XG4gIH1cbiAgbGlzdGVuKGNoYXJ0LCBldmVudCwgY2IpIHtcbiAgICB0aGlzLl9nZXRBbmltcyhjaGFydCkubGlzdGVuZXJzW2V2ZW50XS5wdXNoKGNiKTtcbiAgfVxuICBhZGQoY2hhcnQsIGl0ZW1zKSB7XG4gICAgaWYgKCFpdGVtcyB8fCAhaXRlbXMubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX2dldEFuaW1zKGNoYXJ0KS5pdGVtcy5wdXNoKC4uLml0ZW1zKTtcbiAgfVxuICBoYXMoY2hhcnQpIHtcbiAgICByZXR1cm4gdGhpcy5fZ2V0QW5pbXMoY2hhcnQpLml0ZW1zLmxlbmd0aCA+IDA7XG4gIH1cbiAgc3RhcnQoY2hhcnQpIHtcbiAgICBjb25zdCBhbmltcyA9IHRoaXMuX2NoYXJ0cy5nZXQoY2hhcnQpO1xuICAgIGlmICghYW5pbXMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgYW5pbXMucnVubmluZyA9IHRydWU7XG4gICAgYW5pbXMuc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGFuaW1zLmR1cmF0aW9uID0gYW5pbXMuaXRlbXMucmVkdWNlKChhY2MsIGN1cikgPT4gTWF0aC5tYXgoYWNjLCBjdXIuX2R1cmF0aW9uKSwgMCk7XG4gICAgdGhpcy5fcmVmcmVzaCgpO1xuICB9XG4gIHJ1bm5pbmcoY2hhcnQpIHtcbiAgICBpZiAoIXRoaXMuX3J1bm5pbmcpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgYW5pbXMgPSB0aGlzLl9jaGFydHMuZ2V0KGNoYXJ0KTtcbiAgICBpZiAoIWFuaW1zIHx8ICFhbmltcy5ydW5uaW5nIHx8ICFhbmltcy5pdGVtcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgc3RvcChjaGFydCkge1xuICAgIGNvbnN0IGFuaW1zID0gdGhpcy5fY2hhcnRzLmdldChjaGFydCk7XG4gICAgaWYgKCFhbmltcyB8fCAhYW5pbXMuaXRlbXMubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGl0ZW1zID0gYW5pbXMuaXRlbXM7XG4gICAgbGV0IGkgPSBpdGVtcy5sZW5ndGggLSAxO1xuICAgIGZvciAoOyBpID49IDA7IC0taSkge1xuICAgICAgaXRlbXNbaV0uY2FuY2VsKCk7XG4gICAgfVxuICAgIGFuaW1zLml0ZW1zID0gW107XG4gICAgdGhpcy5fbm90aWZ5KGNoYXJ0LCBhbmltcywgRGF0ZS5ub3coKSwgJ2NvbXBsZXRlJyk7XG4gIH1cbiAgcmVtb3ZlKGNoYXJ0KSB7XG4gICAgcmV0dXJuIHRoaXMuX2NoYXJ0cy5kZWxldGUoY2hhcnQpO1xuICB9XG59XG52YXIgYW5pbWF0b3IgPSAvKiAjX19QVVJFX18gKi9uZXcgQW5pbWF0b3IoKTtcbmNvbnN0IHRyYW5zcGFyZW50ID0gJ3RyYW5zcGFyZW50JztcbmNvbnN0IGludGVycG9sYXRvcnMgPSB7XG4gIGJvb2xlYW4oZnJvbSwgdG8sIGZhY3Rvcikge1xuICAgIHJldHVybiBmYWN0b3IgPiAwLjUgPyB0byA6IGZyb207XG4gIH0sXG4gIGNvbG9yKGZyb20sIHRvLCBmYWN0b3IpIHtcbiAgICBjb25zdCBjMCA9IGNvbG9yKGZyb20gfHwgdHJhbnNwYXJlbnQpO1xuICAgIGNvbnN0IGMxID0gYzAudmFsaWQgJiYgY29sb3IodG8gfHwgdHJhbnNwYXJlbnQpO1xuICAgIHJldHVybiBjMSAmJiBjMS52YWxpZCA/IGMxLm1peChjMCwgZmFjdG9yKS5oZXhTdHJpbmcoKSA6IHRvO1xuICB9LFxuICBudW1iZXIoZnJvbSwgdG8sIGZhY3Rvcikge1xuICAgIHJldHVybiBmcm9tICsgKHRvIC0gZnJvbSkgKiBmYWN0b3I7XG4gIH1cbn07XG5jbGFzcyBBbmltYXRpb24ge1xuICBjb25zdHJ1Y3RvcihjZmcsIHRhcmdldCwgcHJvcCwgdG8pIHtcbiAgICBjb25zdCBjdXJyZW50VmFsdWUgPSB0YXJnZXRbcHJvcF07XG4gICAgdG8gPSByZXNvbHZlKFtjZmcudG8sIHRvLCBjdXJyZW50VmFsdWUsIGNmZy5mcm9tXSk7XG4gICAgY29uc3QgZnJvbSA9IHJlc29sdmUoW2NmZy5mcm9tLCBjdXJyZW50VmFsdWUsIHRvXSk7XG4gICAgdGhpcy5fYWN0aXZlID0gdHJ1ZTtcbiAgICB0aGlzLl9mbiA9IGNmZy5mbiB8fCBpbnRlcnBvbGF0b3JzW2NmZy50eXBlIHx8IHR5cGVvZiBmcm9tXTtcbiAgICB0aGlzLl9lYXNpbmcgPSBlZmZlY3RzW2NmZy5lYXNpbmddIHx8IGVmZmVjdHMubGluZWFyO1xuICAgIHRoaXMuX3N0YXJ0ID0gTWF0aC5mbG9vcihEYXRlLm5vdygpICsgKGNmZy5kZWxheSB8fCAwKSk7XG4gICAgdGhpcy5fZHVyYXRpb24gPSB0aGlzLl90b3RhbCA9IE1hdGguZmxvb3IoY2ZnLmR1cmF0aW9uKTtcbiAgICB0aGlzLl9sb29wID0gISFjZmcubG9vcDtcbiAgICB0aGlzLl90YXJnZXQgPSB0YXJnZXQ7XG4gICAgdGhpcy5fcHJvcCA9IHByb3A7XG4gICAgdGhpcy5fZnJvbSA9IGZyb207XG4gICAgdGhpcy5fdG8gPSB0bztcbiAgICB0aGlzLl9wcm9taXNlcyA9IHVuZGVmaW5lZDtcbiAgfVxuICBhY3RpdmUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2FjdGl2ZTtcbiAgfVxuICB1cGRhdGUoY2ZnLCB0bywgZGF0ZSkge1xuICAgIGlmICh0aGlzLl9hY3RpdmUpIHtcbiAgICAgIHRoaXMuX25vdGlmeShmYWxzZSk7XG4gICAgICBjb25zdCBjdXJyZW50VmFsdWUgPSB0aGlzLl90YXJnZXRbdGhpcy5fcHJvcF07XG4gICAgICBjb25zdCBlbGFwc2VkID0gZGF0ZSAtIHRoaXMuX3N0YXJ0O1xuICAgICAgY29uc3QgcmVtYWluID0gdGhpcy5fZHVyYXRpb24gLSBlbGFwc2VkO1xuICAgICAgdGhpcy5fc3RhcnQgPSBkYXRlO1xuICAgICAgdGhpcy5fZHVyYXRpb24gPSBNYXRoLmZsb29yKE1hdGgubWF4KHJlbWFpbiwgY2ZnLmR1cmF0aW9uKSk7XG4gICAgICB0aGlzLl90b3RhbCArPSBlbGFwc2VkO1xuICAgICAgdGhpcy5fbG9vcCA9ICEhY2ZnLmxvb3A7XG4gICAgICB0aGlzLl90byA9IHJlc29sdmUoW2NmZy50bywgdG8sIGN1cnJlbnRWYWx1ZSwgY2ZnLmZyb21dKTtcbiAgICAgIHRoaXMuX2Zyb20gPSByZXNvbHZlKFtjZmcuZnJvbSwgY3VycmVudFZhbHVlLCB0b10pO1xuICAgIH1cbiAgfVxuICBjYW5jZWwoKSB7XG4gICAgaWYgKHRoaXMuX2FjdGl2ZSkge1xuICAgICAgdGhpcy50aWNrKERhdGUubm93KCkpO1xuICAgICAgdGhpcy5fYWN0aXZlID0gZmFsc2U7XG4gICAgICB0aGlzLl9ub3RpZnkoZmFsc2UpO1xuICAgIH1cbiAgfVxuICB0aWNrKGRhdGUpIHtcbiAgICBjb25zdCBlbGFwc2VkID0gZGF0ZSAtIHRoaXMuX3N0YXJ0O1xuICAgIGNvbnN0IGR1cmF0aW9uID0gdGhpcy5fZHVyYXRpb247XG4gICAgY29uc3QgcHJvcCA9IHRoaXMuX3Byb3A7XG4gICAgY29uc3QgZnJvbSA9IHRoaXMuX2Zyb207XG4gICAgY29uc3QgbG9vcCA9IHRoaXMuX2xvb3A7XG4gICAgY29uc3QgdG8gPSB0aGlzLl90bztcbiAgICBsZXQgZmFjdG9yO1xuICAgIHRoaXMuX2FjdGl2ZSA9IGZyb20gIT09IHRvICYmIChsb29wIHx8IGVsYXBzZWQgPCBkdXJhdGlvbik7XG4gICAgaWYgKCF0aGlzLl9hY3RpdmUpIHtcbiAgICAgIHRoaXMuX3RhcmdldFtwcm9wXSA9IHRvO1xuICAgICAgdGhpcy5fbm90aWZ5KHRydWUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoZWxhcHNlZCA8IDApIHtcbiAgICAgIHRoaXMuX3RhcmdldFtwcm9wXSA9IGZyb207XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGZhY3RvciA9IGVsYXBzZWQgLyBkdXJhdGlvbiAlIDI7XG4gICAgZmFjdG9yID0gbG9vcCAmJiBmYWN0b3IgPiAxID8gMiAtIGZhY3RvciA6IGZhY3RvcjtcbiAgICBmYWN0b3IgPSB0aGlzLl9lYXNpbmcoTWF0aC5taW4oMSwgTWF0aC5tYXgoMCwgZmFjdG9yKSkpO1xuICAgIHRoaXMuX3RhcmdldFtwcm9wXSA9IHRoaXMuX2ZuKGZyb20sIHRvLCBmYWN0b3IpO1xuICB9XG4gIHdhaXQoKSB7XG4gICAgY29uc3QgcHJvbWlzZXMgPSB0aGlzLl9wcm9taXNlcyB8fCAodGhpcy5fcHJvbWlzZXMgPSBbXSk7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXMsIHJlaikgPT4ge1xuICAgICAgcHJvbWlzZXMucHVzaCh7XG4gICAgICAgIHJlcyxcbiAgICAgICAgcmVqXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuICBfbm90aWZ5KHJlc29sdmVkKSB7XG4gICAgY29uc3QgbWV0aG9kID0gcmVzb2x2ZWQgPyAncmVzJyA6ICdyZWonO1xuICAgIGNvbnN0IHByb21pc2VzID0gdGhpcy5fcHJvbWlzZXMgfHwgW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcm9taXNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgcHJvbWlzZXNbaV1bbWV0aG9kXSgpO1xuICAgIH1cbiAgfVxufVxuY2xhc3MgQW5pbWF0aW9ucyB7XG4gIGNvbnN0cnVjdG9yKGNoYXJ0LCBjb25maWcpIHtcbiAgICB0aGlzLl9jaGFydCA9IGNoYXJ0O1xuICAgIHRoaXMuX3Byb3BlcnRpZXMgPSBuZXcgTWFwKCk7XG4gICAgdGhpcy5jb25maWd1cmUoY29uZmlnKTtcbiAgfVxuICBjb25maWd1cmUoY29uZmlnKSB7XG4gICAgaWYgKCFpc09iamVjdChjb25maWcpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGFuaW1hdGlvbk9wdGlvbnMgPSBPYmplY3Qua2V5cyhkZWZhdWx0cy5hbmltYXRpb24pO1xuICAgIGNvbnN0IGFuaW1hdGVkUHJvcHMgPSB0aGlzLl9wcm9wZXJ0aWVzO1xuICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGNvbmZpZykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgY29uc3QgY2ZnID0gY29uZmlnW2tleV07XG4gICAgICBpZiAoIWlzT2JqZWN0KGNmZykpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgcmVzb2x2ZWQgPSB7fTtcbiAgICAgIGZvciAoY29uc3Qgb3B0aW9uIG9mIGFuaW1hdGlvbk9wdGlvbnMpIHtcbiAgICAgICAgcmVzb2x2ZWRbb3B0aW9uXSA9IGNmZ1tvcHRpb25dO1xuICAgICAgfVxuICAgICAgKGlzQXJyYXkoY2ZnLnByb3BlcnRpZXMpICYmIGNmZy5wcm9wZXJ0aWVzIHx8IFtrZXldKS5mb3JFYWNoKHByb3AgPT4ge1xuICAgICAgICBpZiAocHJvcCA9PT0ga2V5IHx8ICFhbmltYXRlZFByb3BzLmhhcyhwcm9wKSkge1xuICAgICAgICAgIGFuaW1hdGVkUHJvcHMuc2V0KHByb3AsIHJlc29sdmVkKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbiAgX2FuaW1hdGVPcHRpb25zKHRhcmdldCwgdmFsdWVzKSB7XG4gICAgY29uc3QgbmV3T3B0aW9ucyA9IHZhbHVlcy5vcHRpb25zO1xuICAgIGNvbnN0IG9wdGlvbnMgPSByZXNvbHZlVGFyZ2V0T3B0aW9ucyh0YXJnZXQsIG5ld09wdGlvbnMpO1xuICAgIGlmICghb3B0aW9ucykge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICBjb25zdCBhbmltYXRpb25zID0gdGhpcy5fY3JlYXRlQW5pbWF0aW9ucyhvcHRpb25zLCBuZXdPcHRpb25zKTtcbiAgICBpZiAobmV3T3B0aW9ucy4kc2hhcmVkKSB7XG4gICAgICBhd2FpdEFsbCh0YXJnZXQub3B0aW9ucy4kYW5pbWF0aW9ucywgbmV3T3B0aW9ucykudGhlbigoKSA9PiB7XG4gICAgICAgIHRhcmdldC5vcHRpb25zID0gbmV3T3B0aW9ucztcbiAgICAgIH0sICgpID0+IHt9KTtcbiAgICB9XG4gICAgcmV0dXJuIGFuaW1hdGlvbnM7XG4gIH1cbiAgX2NyZWF0ZUFuaW1hdGlvbnModGFyZ2V0LCB2YWx1ZXMpIHtcbiAgICBjb25zdCBhbmltYXRlZFByb3BzID0gdGhpcy5fcHJvcGVydGllcztcbiAgICBjb25zdCBhbmltYXRpb25zID0gW107XG4gICAgY29uc3QgcnVubmluZyA9IHRhcmdldC4kYW5pbWF0aW9ucyB8fCAodGFyZ2V0LiRhbmltYXRpb25zID0ge30pO1xuICAgIGNvbnN0IHByb3BzID0gT2JqZWN0LmtleXModmFsdWVzKTtcbiAgICBjb25zdCBkYXRlID0gRGF0ZS5ub3coKTtcbiAgICBsZXQgaTtcbiAgICBmb3IgKGkgPSBwcm9wcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgY29uc3QgcHJvcCA9IHByb3BzW2ldO1xuICAgICAgaWYgKHByb3AuY2hhckF0KDApID09PSAnJCcpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAocHJvcCA9PT0gJ29wdGlvbnMnKSB7XG4gICAgICAgIGFuaW1hdGlvbnMucHVzaCguLi50aGlzLl9hbmltYXRlT3B0aW9ucyh0YXJnZXQsIHZhbHVlcykpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHZhbHVlID0gdmFsdWVzW3Byb3BdO1xuICAgICAgbGV0IGFuaW1hdGlvbiA9IHJ1bm5pbmdbcHJvcF07XG4gICAgICBjb25zdCBjZmcgPSBhbmltYXRlZFByb3BzLmdldChwcm9wKTtcbiAgICAgIGlmIChhbmltYXRpb24pIHtcbiAgICAgICAgaWYgKGNmZyAmJiBhbmltYXRpb24uYWN0aXZlKCkpIHtcbiAgICAgICAgICBhbmltYXRpb24udXBkYXRlKGNmZywgdmFsdWUsIGRhdGUpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGFuaW1hdGlvbi5jYW5jZWwoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCFjZmcgfHwgIWNmZy5kdXJhdGlvbikge1xuICAgICAgICB0YXJnZXRbcHJvcF0gPSB2YWx1ZTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBydW5uaW5nW3Byb3BdID0gYW5pbWF0aW9uID0gbmV3IEFuaW1hdGlvbihjZmcsIHRhcmdldCwgcHJvcCwgdmFsdWUpO1xuICAgICAgYW5pbWF0aW9ucy5wdXNoKGFuaW1hdGlvbik7XG4gICAgfVxuICAgIHJldHVybiBhbmltYXRpb25zO1xuICB9XG4gIHVwZGF0ZSh0YXJnZXQsIHZhbHVlcykge1xuICAgIGlmICh0aGlzLl9wcm9wZXJ0aWVzLnNpemUgPT09IDApIHtcbiAgICAgIE9iamVjdC5hc3NpZ24odGFyZ2V0LCB2YWx1ZXMpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBhbmltYXRpb25zID0gdGhpcy5fY3JlYXRlQW5pbWF0aW9ucyh0YXJnZXQsIHZhbHVlcyk7XG4gICAgaWYgKGFuaW1hdGlvbnMubGVuZ3RoKSB7XG4gICAgICBhbmltYXRvci5hZGQodGhpcy5fY2hhcnQsIGFuaW1hdGlvbnMpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBhd2FpdEFsbChhbmltYXRpb25zLCBwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IHJ1bm5pbmcgPSBbXTtcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHByb3BlcnRpZXMpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBhbmltID0gYW5pbWF0aW9uc1trZXlzW2ldXTtcbiAgICBpZiAoYW5pbSAmJiBhbmltLmFjdGl2ZSgpKSB7XG4gICAgICBydW5uaW5nLnB1c2goYW5pbS53YWl0KCkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gUHJvbWlzZS5hbGwocnVubmluZyk7XG59XG5mdW5jdGlvbiByZXNvbHZlVGFyZ2V0T3B0aW9ucyh0YXJnZXQsIG5ld09wdGlvbnMpIHtcbiAgaWYgKCFuZXdPcHRpb25zKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGxldCBvcHRpb25zID0gdGFyZ2V0Lm9wdGlvbnM7XG4gIGlmICghb3B0aW9ucykge1xuICAgIHRhcmdldC5vcHRpb25zID0gbmV3T3B0aW9ucztcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKG9wdGlvbnMuJHNoYXJlZCkge1xuICAgIHRhcmdldC5vcHRpb25zID0gb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMsIHtcbiAgICAgICRzaGFyZWQ6IGZhbHNlLFxuICAgICAgJGFuaW1hdGlvbnM6IHt9XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIG9wdGlvbnM7XG59XG5mdW5jdGlvbiBzY2FsZUNsaXAoc2NhbGUsIGFsbG93ZWRPdmVyZmxvdykge1xuICBjb25zdCBvcHRzID0gc2NhbGUgJiYgc2NhbGUub3B0aW9ucyB8fCB7fTtcbiAgY29uc3QgcmV2ZXJzZSA9IG9wdHMucmV2ZXJzZTtcbiAgY29uc3QgbWluID0gb3B0cy5taW4gPT09IHVuZGVmaW5lZCA/IGFsbG93ZWRPdmVyZmxvdyA6IDA7XG4gIGNvbnN0IG1heCA9IG9wdHMubWF4ID09PSB1bmRlZmluZWQgPyBhbGxvd2VkT3ZlcmZsb3cgOiAwO1xuICByZXR1cm4ge1xuICAgIHN0YXJ0OiByZXZlcnNlID8gbWF4IDogbWluLFxuICAgIGVuZDogcmV2ZXJzZSA/IG1pbiA6IG1heFxuICB9O1xufVxuZnVuY3Rpb24gZGVmYXVsdENsaXAoeFNjYWxlLCB5U2NhbGUsIGFsbG93ZWRPdmVyZmxvdykge1xuICBpZiAoYWxsb3dlZE92ZXJmbG93ID09PSBmYWxzZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBjb25zdCB4ID0gc2NhbGVDbGlwKHhTY2FsZSwgYWxsb3dlZE92ZXJmbG93KTtcbiAgY29uc3QgeSA9IHNjYWxlQ2xpcCh5U2NhbGUsIGFsbG93ZWRPdmVyZmxvdyk7XG4gIHJldHVybiB7XG4gICAgdG9wOiB5LmVuZCxcbiAgICByaWdodDogeC5lbmQsXG4gICAgYm90dG9tOiB5LnN0YXJ0LFxuICAgIGxlZnQ6IHguc3RhcnRcbiAgfTtcbn1cbmZ1bmN0aW9uIHRvQ2xpcCh2YWx1ZSkge1xuICBsZXQgdCwgciwgYiwgbDtcbiAgaWYgKGlzT2JqZWN0KHZhbHVlKSkge1xuICAgIHQgPSB2YWx1ZS50b3A7XG4gICAgciA9IHZhbHVlLnJpZ2h0O1xuICAgIGIgPSB2YWx1ZS5ib3R0b207XG4gICAgbCA9IHZhbHVlLmxlZnQ7XG4gIH0gZWxzZSB7XG4gICAgdCA9IHIgPSBiID0gbCA9IHZhbHVlO1xuICB9XG4gIHJldHVybiB7XG4gICAgdG9wOiB0LFxuICAgIHJpZ2h0OiByLFxuICAgIGJvdHRvbTogYixcbiAgICBsZWZ0OiBsLFxuICAgIGRpc2FibGVkOiB2YWx1ZSA9PT0gZmFsc2VcbiAgfTtcbn1cbmZ1bmN0aW9uIGdldFNvcnRlZERhdGFzZXRJbmRpY2VzKGNoYXJ0LCBmaWx0ZXJWaXNpYmxlKSB7XG4gIGNvbnN0IGtleXMgPSBbXTtcbiAgY29uc3QgbWV0YXNldHMgPSBjaGFydC5fZ2V0U29ydGVkRGF0YXNldE1ldGFzKGZpbHRlclZpc2libGUpO1xuICBsZXQgaSwgaWxlbjtcbiAgZm9yIChpID0gMCwgaWxlbiA9IG1ldGFzZXRzLmxlbmd0aDsgaSA8IGlsZW47ICsraSkge1xuICAgIGtleXMucHVzaChtZXRhc2V0c1tpXS5pbmRleCk7XG4gIH1cbiAgcmV0dXJuIGtleXM7XG59XG5mdW5jdGlvbiBhcHBseVN0YWNrKHN0YWNrLCB2YWx1ZSwgZHNJbmRleCwgb3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IGtleXMgPSBzdGFjay5rZXlzO1xuICBjb25zdCBzaW5nbGVNb2RlID0gb3B0aW9ucy5tb2RlID09PSAnc2luZ2xlJztcbiAgbGV0IGksIGlsZW4sIGRhdGFzZXRJbmRleCwgb3RoZXJWYWx1ZTtcbiAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGxldCBmb3VuZCA9IGZhbHNlO1xuICBmb3IgKGkgPSAwLCBpbGVuID0ga2V5cy5sZW5ndGg7IGkgPCBpbGVuOyArK2kpIHtcbiAgICBkYXRhc2V0SW5kZXggPSAra2V5c1tpXTtcbiAgICBpZiAoZGF0YXNldEluZGV4ID09PSBkc0luZGV4KSB7XG4gICAgICBmb3VuZCA9IHRydWU7XG4gICAgICBpZiAob3B0aW9ucy5hbGwpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgb3RoZXJWYWx1ZSA9IHN0YWNrLnZhbHVlc1tkYXRhc2V0SW5kZXhdO1xuICAgIGlmIChpc051bWJlckZpbml0ZShvdGhlclZhbHVlKSAmJiAoc2luZ2xlTW9kZSB8fCB2YWx1ZSA9PT0gMCB8fCBzaWduKHZhbHVlKSA9PT0gc2lnbihvdGhlclZhbHVlKSkpIHtcbiAgICAgIHZhbHVlICs9IG90aGVyVmFsdWU7XG4gICAgfVxuICB9XG4gIGlmICghZm91bmQgJiYgIW9wdGlvbnMuYWxsKSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuZnVuY3Rpb24gY29udmVydE9iamVjdERhdGFUb0FycmF5KGRhdGEsIG1ldGEpIHtcbiAgY29uc3Qge1xuICAgIGlTY2FsZSxcbiAgICB2U2NhbGVcbiAgfSA9IG1ldGE7XG4gIGNvbnN0IGlBeGlzS2V5ID0gaVNjYWxlLmF4aXMgPT09ICd4JyA/ICd4JyA6ICd5JztcbiAgY29uc3QgdkF4aXNLZXkgPSB2U2NhbGUuYXhpcyA9PT0gJ3gnID8gJ3gnIDogJ3knO1xuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoZGF0YSk7XG4gIGNvbnN0IGFkYXRhID0gbmV3IEFycmF5KGtleXMubGVuZ3RoKTtcbiAgbGV0IGksIGlsZW4sIGtleTtcbiAgZm9yIChpID0gMCwgaWxlbiA9IGtleXMubGVuZ3RoOyBpIDwgaWxlbjsgKytpKSB7XG4gICAga2V5ID0ga2V5c1tpXTtcbiAgICBhZGF0YVtpXSA9IHtcbiAgICAgIFtpQXhpc0tleV06IGtleSxcbiAgICAgIFt2QXhpc0tleV06IGRhdGFba2V5XVxuICAgIH07XG4gIH1cbiAgcmV0dXJuIGFkYXRhO1xufVxuZnVuY3Rpb24gaXNTdGFja2VkKHNjYWxlLCBtZXRhKSB7XG4gIGNvbnN0IHN0YWNrZWQgPSBzY2FsZSAmJiBzY2FsZS5vcHRpb25zLnN0YWNrZWQ7XG4gIHJldHVybiBzdGFja2VkIHx8IHN0YWNrZWQgPT09IHVuZGVmaW5lZCAmJiBtZXRhLnN0YWNrICE9PSB1bmRlZmluZWQ7XG59XG5mdW5jdGlvbiBnZXRTdGFja0tleShpbmRleFNjYWxlLCB2YWx1ZVNjYWxlLCBtZXRhKSB7XG4gIHJldHVybiBgJHtpbmRleFNjYWxlLmlkfS4ke3ZhbHVlU2NhbGUuaWR9LiR7bWV0YS5zdGFjayB8fCBtZXRhLnR5cGV9YDtcbn1cbmZ1bmN0aW9uIGdldFVzZXJCb3VuZHMoc2NhbGUpIHtcbiAgY29uc3Qge1xuICAgIG1pbixcbiAgICBtYXgsXG4gICAgbWluRGVmaW5lZCxcbiAgICBtYXhEZWZpbmVkXG4gIH0gPSBzY2FsZS5nZXRVc2VyQm91bmRzKCk7XG4gIHJldHVybiB7XG4gICAgbWluOiBtaW5EZWZpbmVkID8gbWluIDogTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZLFxuICAgIG1heDogbWF4RGVmaW5lZCA/IG1heCA6IE51bWJlci5QT1NJVElWRV9JTkZJTklUWVxuICB9O1xufVxuZnVuY3Rpb24gZ2V0T3JDcmVhdGVTdGFjayhzdGFja3MsIHN0YWNrS2V5LCBpbmRleFZhbHVlKSB7XG4gIGNvbnN0IHN1YlN0YWNrID0gc3RhY2tzW3N0YWNrS2V5XSB8fCAoc3RhY2tzW3N0YWNrS2V5XSA9IHt9KTtcbiAgcmV0dXJuIHN1YlN0YWNrW2luZGV4VmFsdWVdIHx8IChzdWJTdGFja1tpbmRleFZhbHVlXSA9IHt9KTtcbn1cbmZ1bmN0aW9uIGdldExhc3RJbmRleEluU3RhY2soc3RhY2ssIHZTY2FsZSwgcG9zaXRpdmUsIHR5cGUpIHtcbiAgZm9yIChjb25zdCBtZXRhIG9mIHZTY2FsZS5nZXRNYXRjaGluZ1Zpc2libGVNZXRhcyh0eXBlKS5yZXZlcnNlKCkpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHN0YWNrW21ldGEuaW5kZXhdO1xuICAgIGlmIChwb3NpdGl2ZSAmJiB2YWx1ZSA+IDAgfHwgIXBvc2l0aXZlICYmIHZhbHVlIDwgMCkge1xuICAgICAgcmV0dXJuIG1ldGEuaW5kZXg7XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsO1xufVxuZnVuY3Rpb24gdXBkYXRlU3RhY2tzKGNvbnRyb2xsZXIsIHBhcnNlZCkge1xuICBjb25zdCB7XG4gICAgY2hhcnQsXG4gICAgX2NhY2hlZE1ldGE6IG1ldGFcbiAgfSA9IGNvbnRyb2xsZXI7XG4gIGNvbnN0IHN0YWNrcyA9IGNoYXJ0Ll9zdGFja3MgfHwgKGNoYXJ0Ll9zdGFja3MgPSB7fSk7XG4gIGNvbnN0IHtcbiAgICBpU2NhbGUsXG4gICAgdlNjYWxlLFxuICAgIGluZGV4OiBkYXRhc2V0SW5kZXhcbiAgfSA9IG1ldGE7XG4gIGNvbnN0IGlBeGlzID0gaVNjYWxlLmF4aXM7XG4gIGNvbnN0IHZBeGlzID0gdlNjYWxlLmF4aXM7XG4gIGNvbnN0IGtleSA9IGdldFN0YWNrS2V5KGlTY2FsZSwgdlNjYWxlLCBtZXRhKTtcbiAgY29uc3QgaWxlbiA9IHBhcnNlZC5sZW5ndGg7XG4gIGxldCBzdGFjaztcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbGVuOyArK2kpIHtcbiAgICBjb25zdCBpdGVtID0gcGFyc2VkW2ldO1xuICAgIGNvbnN0IHtcbiAgICAgIFtpQXhpc106IGluZGV4LFxuICAgICAgW3ZBeGlzXTogdmFsdWVcbiAgICB9ID0gaXRlbTtcbiAgICBjb25zdCBpdGVtU3RhY2tzID0gaXRlbS5fc3RhY2tzIHx8IChpdGVtLl9zdGFja3MgPSB7fSk7XG4gICAgc3RhY2sgPSBpdGVtU3RhY2tzW3ZBeGlzXSA9IGdldE9yQ3JlYXRlU3RhY2soc3RhY2tzLCBrZXksIGluZGV4KTtcbiAgICBzdGFja1tkYXRhc2V0SW5kZXhdID0gdmFsdWU7XG4gICAgc3RhY2suX3RvcCA9IGdldExhc3RJbmRleEluU3RhY2soc3RhY2ssIHZTY2FsZSwgdHJ1ZSwgbWV0YS50eXBlKTtcbiAgICBzdGFjay5fYm90dG9tID0gZ2V0TGFzdEluZGV4SW5TdGFjayhzdGFjaywgdlNjYWxlLCBmYWxzZSwgbWV0YS50eXBlKTtcbiAgICBjb25zdCB2aXN1YWxWYWx1ZXMgPSBzdGFjay5fdmlzdWFsVmFsdWVzIHx8IChzdGFjay5fdmlzdWFsVmFsdWVzID0ge30pO1xuICAgIHZpc3VhbFZhbHVlc1tkYXRhc2V0SW5kZXhdID0gdmFsdWU7XG4gIH1cbn1cbmZ1bmN0aW9uIGdldEZpcnN0U2NhbGVJZChjaGFydCwgYXhpcykge1xuICBjb25zdCBzY2FsZXMgPSBjaGFydC5zY2FsZXM7XG4gIHJldHVybiBPYmplY3Qua2V5cyhzY2FsZXMpLmZpbHRlcihrZXkgPT4gc2NhbGVzW2tleV0uYXhpcyA9PT0gYXhpcykuc2hpZnQoKTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZURhdGFzZXRDb250ZXh0KHBhcmVudCwgaW5kZXgpIHtcbiAgcmV0dXJuIGNyZWF0ZUNvbnRleHQocGFyZW50LCB7XG4gICAgYWN0aXZlOiBmYWxzZSxcbiAgICBkYXRhc2V0OiB1bmRlZmluZWQsXG4gICAgZGF0YXNldEluZGV4OiBpbmRleCxcbiAgICBpbmRleCxcbiAgICBtb2RlOiAnZGVmYXVsdCcsXG4gICAgdHlwZTogJ2RhdGFzZXQnXG4gIH0pO1xufVxuZnVuY3Rpb24gY3JlYXRlRGF0YUNvbnRleHQocGFyZW50LCBpbmRleCwgZWxlbWVudCkge1xuICByZXR1cm4gY3JlYXRlQ29udGV4dChwYXJlbnQsIHtcbiAgICBhY3RpdmU6IGZhbHNlLFxuICAgIGRhdGFJbmRleDogaW5kZXgsXG4gICAgcGFyc2VkOiB1bmRlZmluZWQsXG4gICAgcmF3OiB1bmRlZmluZWQsXG4gICAgZWxlbWVudCxcbiAgICBpbmRleCxcbiAgICBtb2RlOiAnZGVmYXVsdCcsXG4gICAgdHlwZTogJ2RhdGEnXG4gIH0pO1xufVxuZnVuY3Rpb24gY2xlYXJTdGFja3MobWV0YSwgaXRlbXMpIHtcbiAgY29uc3QgZGF0YXNldEluZGV4ID0gbWV0YS5jb250cm9sbGVyLmluZGV4O1xuICBjb25zdCBheGlzID0gbWV0YS52U2NhbGUgJiYgbWV0YS52U2NhbGUuYXhpcztcbiAgaWYgKCFheGlzKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGl0ZW1zID0gaXRlbXMgfHwgbWV0YS5fcGFyc2VkO1xuICBmb3IgKGNvbnN0IHBhcnNlZCBvZiBpdGVtcykge1xuICAgIGNvbnN0IHN0YWNrcyA9IHBhcnNlZC5fc3RhY2tzO1xuICAgIGlmICghc3RhY2tzIHx8IHN0YWNrc1theGlzXSA9PT0gdW5kZWZpbmVkIHx8IHN0YWNrc1theGlzXVtkYXRhc2V0SW5kZXhdID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZGVsZXRlIHN0YWNrc1theGlzXVtkYXRhc2V0SW5kZXhdO1xuICAgIGlmIChzdGFja3NbYXhpc10uX3Zpc3VhbFZhbHVlcyAhPT0gdW5kZWZpbmVkICYmIHN0YWNrc1theGlzXS5fdmlzdWFsVmFsdWVzW2RhdGFzZXRJbmRleF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgZGVsZXRlIHN0YWNrc1theGlzXS5fdmlzdWFsVmFsdWVzW2RhdGFzZXRJbmRleF07XG4gICAgfVxuICB9XG59XG5jb25zdCBpc0RpcmVjdFVwZGF0ZU1vZGUgPSBtb2RlID0+IG1vZGUgPT09ICdyZXNldCcgfHwgbW9kZSA9PT0gJ25vbmUnO1xuY29uc3QgY2xvbmVJZk5vdFNoYXJlZCA9IChjYWNoZWQsIHNoYXJlZCkgPT4gc2hhcmVkID8gY2FjaGVkIDogT2JqZWN0LmFzc2lnbih7fSwgY2FjaGVkKTtcbmNvbnN0IGNyZWF0ZVN0YWNrID0gKGNhblN0YWNrLCBtZXRhLCBjaGFydCkgPT4gY2FuU3RhY2sgJiYgIW1ldGEuaGlkZGVuICYmIG1ldGEuX3N0YWNrZWQgJiYge1xuICBrZXlzOiBnZXRTb3J0ZWREYXRhc2V0SW5kaWNlcyhjaGFydCwgdHJ1ZSksXG4gIHZhbHVlczogbnVsbFxufTtcbmxldCBEYXRhc2V0Q29udHJvbGxlciA9IC8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICBjbGFzcyBEYXRhc2V0Q29udHJvbGxlciB7XG4gICAgc3RhdGljIGRlZmF1bHRzID0ge307XG4gICAgc3RhdGljIGRhdGFzZXRFbGVtZW50VHlwZSA9IG51bGw7XG4gICAgc3RhdGljIGRhdGFFbGVtZW50VHlwZSA9IG51bGw7XG4gICAgY29uc3RydWN0b3IoY2hhcnQsIGRhdGFzZXRJbmRleCkge1xuICAgICAgdGhpcy5jaGFydCA9IGNoYXJ0O1xuICAgICAgdGhpcy5fY3R4ID0gY2hhcnQuY3R4O1xuICAgICAgdGhpcy5pbmRleCA9IGRhdGFzZXRJbmRleDtcbiAgICAgIHRoaXMuX2NhY2hlZERhdGFPcHRzID0ge307XG4gICAgICB0aGlzLl9jYWNoZWRNZXRhID0gdGhpcy5nZXRNZXRhKCk7XG4gICAgICB0aGlzLl90eXBlID0gdGhpcy5fY2FjaGVkTWV0YS50eXBlO1xuICAgICAgdGhpcy5vcHRpb25zID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fcGFyc2luZyA9IGZhbHNlO1xuICAgICAgdGhpcy5fZGF0YSA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX29iamVjdERhdGEgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl9zaGFyZWRPcHRpb25zID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fZHJhd1N0YXJ0ID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fZHJhd0NvdW50ID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5lbmFibGVPcHRpb25TaGFyaW5nID0gZmFsc2U7XG4gICAgICB0aGlzLnN1cHBvcnRzRGVjaW1hdGlvbiA9IGZhbHNlO1xuICAgICAgdGhpcy4kY29udGV4dCA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX3N5bmNMaXN0ID0gW107XG4gICAgICB0aGlzLmRhdGFzZXRFbGVtZW50VHlwZSA9IG5ldy50YXJnZXQuZGF0YXNldEVsZW1lbnRUeXBlO1xuICAgICAgdGhpcy5kYXRhRWxlbWVudFR5cGUgPSBuZXcudGFyZ2V0LmRhdGFFbGVtZW50VHlwZTtcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZSgpO1xuICAgIH1cbiAgICBpbml0aWFsaXplKCkge1xuICAgICAgY29uc3QgbWV0YSA9IHRoaXMuX2NhY2hlZE1ldGE7XG4gICAgICB0aGlzLmNvbmZpZ3VyZSgpO1xuICAgICAgdGhpcy5saW5rU2NhbGVzKCk7XG4gICAgICBtZXRhLl9zdGFja2VkID0gaXNTdGFja2VkKG1ldGEudlNjYWxlLCBtZXRhKTtcbiAgICAgIHRoaXMuYWRkRWxlbWVudHMoKTtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuZmlsbCAmJiAhdGhpcy5jaGFydC5pc1BsdWdpbkVuYWJsZWQoJ2ZpbGxlcicpKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcIlRyaWVkIHRvIHVzZSB0aGUgJ2ZpbGwnIG9wdGlvbiB3aXRob3V0IHRoZSAnRmlsbGVyJyBwbHVnaW4gZW5hYmxlZC4gUGxlYXNlIGltcG9ydCBhbmQgcmVnaXN0ZXIgdGhlICdGaWxsZXInIHBsdWdpbiBhbmQgbWFrZSBzdXJlIGl0IGlzIG5vdCBkaXNhYmxlZCBpbiB0aGUgb3B0aW9uc1wiKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdXBkYXRlSW5kZXgoZGF0YXNldEluZGV4KSB7XG4gICAgICBpZiAodGhpcy5pbmRleCAhPT0gZGF0YXNldEluZGV4KSB7XG4gICAgICAgIGNsZWFyU3RhY2tzKHRoaXMuX2NhY2hlZE1ldGEpO1xuICAgICAgfVxuICAgICAgdGhpcy5pbmRleCA9IGRhdGFzZXRJbmRleDtcbiAgICB9XG4gICAgbGlua1NjYWxlcygpIHtcbiAgICAgIGNvbnN0IGNoYXJ0ID0gdGhpcy5jaGFydDtcbiAgICAgIGNvbnN0IG1ldGEgPSB0aGlzLl9jYWNoZWRNZXRhO1xuICAgICAgY29uc3QgZGF0YXNldCA9IHRoaXMuZ2V0RGF0YXNldCgpO1xuICAgICAgY29uc3QgY2hvb3NlSWQgPSAoYXhpcywgeCwgeSwgcikgPT4gYXhpcyA9PT0gJ3gnID8geCA6IGF4aXMgPT09ICdyJyA/IHIgOiB5O1xuICAgICAgY29uc3QgeGlkID0gbWV0YS54QXhpc0lEID0gdmFsdWVPckRlZmF1bHQoZGF0YXNldC54QXhpc0lELCBnZXRGaXJzdFNjYWxlSWQoY2hhcnQsICd4JykpO1xuICAgICAgY29uc3QgeWlkID0gbWV0YS55QXhpc0lEID0gdmFsdWVPckRlZmF1bHQoZGF0YXNldC55QXhpc0lELCBnZXRGaXJzdFNjYWxlSWQoY2hhcnQsICd5JykpO1xuICAgICAgY29uc3QgcmlkID0gbWV0YS5yQXhpc0lEID0gdmFsdWVPckRlZmF1bHQoZGF0YXNldC5yQXhpc0lELCBnZXRGaXJzdFNjYWxlSWQoY2hhcnQsICdyJykpO1xuICAgICAgY29uc3QgaW5kZXhBeGlzID0gbWV0YS5pbmRleEF4aXM7XG4gICAgICBjb25zdCBpaWQgPSBtZXRhLmlBeGlzSUQgPSBjaG9vc2VJZChpbmRleEF4aXMsIHhpZCwgeWlkLCByaWQpO1xuICAgICAgY29uc3QgdmlkID0gbWV0YS52QXhpc0lEID0gY2hvb3NlSWQoaW5kZXhBeGlzLCB5aWQsIHhpZCwgcmlkKTtcbiAgICAgIG1ldGEueFNjYWxlID0gdGhpcy5nZXRTY2FsZUZvcklkKHhpZCk7XG4gICAgICBtZXRhLnlTY2FsZSA9IHRoaXMuZ2V0U2NhbGVGb3JJZCh5aWQpO1xuICAgICAgbWV0YS5yU2NhbGUgPSB0aGlzLmdldFNjYWxlRm9ySWQocmlkKTtcbiAgICAgIG1ldGEuaVNjYWxlID0gdGhpcy5nZXRTY2FsZUZvcklkKGlpZCk7XG4gICAgICBtZXRhLnZTY2FsZSA9IHRoaXMuZ2V0U2NhbGVGb3JJZCh2aWQpO1xuICAgIH1cbiAgICBnZXREYXRhc2V0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuY2hhcnQuZGF0YS5kYXRhc2V0c1t0aGlzLmluZGV4XTtcbiAgICB9XG4gICAgZ2V0TWV0YSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmNoYXJ0LmdldERhdGFzZXRNZXRhKHRoaXMuaW5kZXgpO1xuICAgIH1cbiAgICBnZXRTY2FsZUZvcklkKHNjYWxlSUQpIHtcbiAgICAgIHJldHVybiB0aGlzLmNoYXJ0LnNjYWxlc1tzY2FsZUlEXTtcbiAgICB9XG4gICAgX2dldE90aGVyU2NhbGUoc2NhbGUpIHtcbiAgICAgIGNvbnN0IG1ldGEgPSB0aGlzLl9jYWNoZWRNZXRhO1xuICAgICAgcmV0dXJuIHNjYWxlID09PSBtZXRhLmlTY2FsZSA/IG1ldGEudlNjYWxlIDogbWV0YS5pU2NhbGU7XG4gICAgfVxuICAgIHJlc2V0KCkge1xuICAgICAgdGhpcy5fdXBkYXRlKCdyZXNldCcpO1xuICAgIH1cbiAgICBfZGVzdHJveSgpIHtcbiAgICAgIGNvbnN0IG1ldGEgPSB0aGlzLl9jYWNoZWRNZXRhO1xuICAgICAgaWYgKHRoaXMuX2RhdGEpIHtcbiAgICAgICAgdW5saXN0ZW5BcnJheUV2ZW50cyh0aGlzLl9kYXRhLCB0aGlzKTtcbiAgICAgIH1cbiAgICAgIGlmIChtZXRhLl9zdGFja2VkKSB7XG4gICAgICAgIGNsZWFyU3RhY2tzKG1ldGEpO1xuICAgICAgfVxuICAgIH1cbiAgICBfZGF0YUNoZWNrKCkge1xuICAgICAgY29uc3QgZGF0YXNldCA9IHRoaXMuZ2V0RGF0YXNldCgpO1xuICAgICAgY29uc3QgZGF0YSA9IGRhdGFzZXQuZGF0YSB8fCAoZGF0YXNldC5kYXRhID0gW10pO1xuICAgICAgY29uc3QgX2RhdGEgPSB0aGlzLl9kYXRhO1xuICAgICAgaWYgKGlzT2JqZWN0KGRhdGEpKSB7XG4gICAgICAgIGNvbnN0IG1ldGEgPSB0aGlzLl9jYWNoZWRNZXRhO1xuICAgICAgICB0aGlzLl9kYXRhID0gY29udmVydE9iamVjdERhdGFUb0FycmF5KGRhdGEsIG1ldGEpO1xuICAgICAgfSBlbHNlIGlmIChfZGF0YSAhPT0gZGF0YSkge1xuICAgICAgICBpZiAoX2RhdGEpIHtcbiAgICAgICAgICB1bmxpc3RlbkFycmF5RXZlbnRzKF9kYXRhLCB0aGlzKTtcbiAgICAgICAgICBjb25zdCBtZXRhID0gdGhpcy5fY2FjaGVkTWV0YTtcbiAgICAgICAgICBjbGVhclN0YWNrcyhtZXRhKTtcbiAgICAgICAgICBtZXRhLl9wYXJzZWQgPSBbXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGF0YSAmJiBPYmplY3QuaXNFeHRlbnNpYmxlKGRhdGEpKSB7XG4gICAgICAgICAgbGlzdGVuQXJyYXlFdmVudHMoZGF0YSwgdGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc3luY0xpc3QgPSBbXTtcbiAgICAgICAgdGhpcy5fZGF0YSA9IGRhdGE7XG4gICAgICB9XG4gICAgfVxuICAgIGFkZEVsZW1lbnRzKCkge1xuICAgICAgY29uc3QgbWV0YSA9IHRoaXMuX2NhY2hlZE1ldGE7XG4gICAgICB0aGlzLl9kYXRhQ2hlY2soKTtcbiAgICAgIGlmICh0aGlzLmRhdGFzZXRFbGVtZW50VHlwZSkge1xuICAgICAgICBtZXRhLmRhdGFzZXQgPSBuZXcgdGhpcy5kYXRhc2V0RWxlbWVudFR5cGUoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgYnVpbGRPclVwZGF0ZUVsZW1lbnRzKHJlc2V0TmV3RWxlbWVudHMpIHtcbiAgICAgIGNvbnN0IG1ldGEgPSB0aGlzLl9jYWNoZWRNZXRhO1xuICAgICAgY29uc3QgZGF0YXNldCA9IHRoaXMuZ2V0RGF0YXNldCgpO1xuICAgICAgbGV0IHN0YWNrQ2hhbmdlZCA9IGZhbHNlO1xuICAgICAgdGhpcy5fZGF0YUNoZWNrKCk7XG4gICAgICBjb25zdCBvbGRTdGFja2VkID0gbWV0YS5fc3RhY2tlZDtcbiAgICAgIG1ldGEuX3N0YWNrZWQgPSBpc1N0YWNrZWQobWV0YS52U2NhbGUsIG1ldGEpO1xuICAgICAgaWYgKG1ldGEuc3RhY2sgIT09IGRhdGFzZXQuc3RhY2spIHtcbiAgICAgICAgc3RhY2tDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgY2xlYXJTdGFja3MobWV0YSk7XG4gICAgICAgIG1ldGEuc3RhY2sgPSBkYXRhc2V0LnN0YWNrO1xuICAgICAgfVxuICAgICAgdGhpcy5fcmVzeW5jRWxlbWVudHMocmVzZXROZXdFbGVtZW50cyk7XG4gICAgICBpZiAoc3RhY2tDaGFuZ2VkIHx8IG9sZFN0YWNrZWQgIT09IG1ldGEuX3N0YWNrZWQpIHtcbiAgICAgICAgdXBkYXRlU3RhY2tzKHRoaXMsIG1ldGEuX3BhcnNlZCk7XG4gICAgICAgIG1ldGEuX3N0YWNrZWQgPSBpc1N0YWNrZWQobWV0YS52U2NhbGUsIG1ldGEpO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25maWd1cmUoKSB7XG4gICAgICBjb25zdCBjb25maWcgPSB0aGlzLmNoYXJ0LmNvbmZpZztcbiAgICAgIGNvbnN0IHNjb3BlS2V5cyA9IGNvbmZpZy5kYXRhc2V0U2NvcGVLZXlzKHRoaXMuX3R5cGUpO1xuICAgICAgY29uc3Qgc2NvcGVzID0gY29uZmlnLmdldE9wdGlvblNjb3Blcyh0aGlzLmdldERhdGFzZXQoKSwgc2NvcGVLZXlzLCB0cnVlKTtcbiAgICAgIHRoaXMub3B0aW9ucyA9IGNvbmZpZy5jcmVhdGVSZXNvbHZlcihzY29wZXMsIHRoaXMuZ2V0Q29udGV4dCgpKTtcbiAgICAgIHRoaXMuX3BhcnNpbmcgPSB0aGlzLm9wdGlvbnMucGFyc2luZztcbiAgICAgIHRoaXMuX2NhY2hlZERhdGFPcHRzID0ge307XG4gICAgfVxuICAgIHBhcnNlKHN0YXJ0LCBjb3VudCkge1xuICAgICAgY29uc3Qge1xuICAgICAgICBfY2FjaGVkTWV0YTogbWV0YSxcbiAgICAgICAgX2RhdGE6IGRhdGFcbiAgICAgIH0gPSB0aGlzO1xuICAgICAgY29uc3Qge1xuICAgICAgICBpU2NhbGUsXG4gICAgICAgIF9zdGFja2VkXG4gICAgICB9ID0gbWV0YTtcbiAgICAgIGNvbnN0IGlBeGlzID0gaVNjYWxlLmF4aXM7XG4gICAgICBsZXQgc29ydGVkID0gc3RhcnQgPT09IDAgJiYgY291bnQgPT09IGRhdGEubGVuZ3RoID8gdHJ1ZSA6IG1ldGEuX3NvcnRlZDtcbiAgICAgIGxldCBwcmV2ID0gc3RhcnQgPiAwICYmIG1ldGEuX3BhcnNlZFtzdGFydCAtIDFdO1xuICAgICAgbGV0IGksIGN1ciwgcGFyc2VkO1xuICAgICAgaWYgKHRoaXMuX3BhcnNpbmcgPT09IGZhbHNlKSB7XG4gICAgICAgIG1ldGEuX3BhcnNlZCA9IGRhdGE7XG4gICAgICAgIG1ldGEuX3NvcnRlZCA9IHRydWU7XG4gICAgICAgIHBhcnNlZCA9IGRhdGE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoaXNBcnJheShkYXRhW3N0YXJ0XSkpIHtcbiAgICAgICAgICBwYXJzZWQgPSB0aGlzLnBhcnNlQXJyYXlEYXRhKG1ldGEsIGRhdGEsIHN0YXJ0LCBjb3VudCk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNPYmplY3QoZGF0YVtzdGFydF0pKSB7XG4gICAgICAgICAgcGFyc2VkID0gdGhpcy5wYXJzZU9iamVjdERhdGEobWV0YSwgZGF0YSwgc3RhcnQsIGNvdW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwYXJzZWQgPSB0aGlzLnBhcnNlUHJpbWl0aXZlRGF0YShtZXRhLCBkYXRhLCBzdGFydCwgY291bnQpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGlzTm90SW5PcmRlckNvbXBhcmVkVG9QcmV2ID0gKCkgPT4gY3VyW2lBeGlzXSA9PT0gbnVsbCB8fCBwcmV2ICYmIGN1cltpQXhpc10gPCBwcmV2W2lBeGlzXTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyArK2kpIHtcbiAgICAgICAgICBtZXRhLl9wYXJzZWRbaSArIHN0YXJ0XSA9IGN1ciA9IHBhcnNlZFtpXTtcbiAgICAgICAgICBpZiAoc29ydGVkKSB7XG4gICAgICAgICAgICBpZiAoaXNOb3RJbk9yZGVyQ29tcGFyZWRUb1ByZXYoKSkge1xuICAgICAgICAgICAgICBzb3J0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHByZXYgPSBjdXI7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG1ldGEuX3NvcnRlZCA9IHNvcnRlZDtcbiAgICAgIH1cbiAgICAgIGlmIChfc3RhY2tlZCkge1xuICAgICAgICB1cGRhdGVTdGFja3ModGhpcywgcGFyc2VkKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcGFyc2VQcmltaXRpdmVEYXRhKG1ldGEsIGRhdGEsIHN0YXJ0LCBjb3VudCkge1xuICAgICAgY29uc3Qge1xuICAgICAgICBpU2NhbGUsXG4gICAgICAgIHZTY2FsZVxuICAgICAgfSA9IG1ldGE7XG4gICAgICBjb25zdCBpQXhpcyA9IGlTY2FsZS5heGlzO1xuICAgICAgY29uc3QgdkF4aXMgPSB2U2NhbGUuYXhpcztcbiAgICAgIGNvbnN0IGxhYmVscyA9IGlTY2FsZS5nZXRMYWJlbHMoKTtcbiAgICAgIGNvbnN0IHNpbmdsZVNjYWxlID0gaVNjYWxlID09PSB2U2NhbGU7XG4gICAgICBjb25zdCBwYXJzZWQgPSBuZXcgQXJyYXkoY291bnQpO1xuICAgICAgbGV0IGksIGlsZW4sIGluZGV4O1xuICAgICAgZm9yIChpID0gMCwgaWxlbiA9IGNvdW50OyBpIDwgaWxlbjsgKytpKSB7XG4gICAgICAgIGluZGV4ID0gaSArIHN0YXJ0O1xuICAgICAgICBwYXJzZWRbaV0gPSB7XG4gICAgICAgICAgW2lBeGlzXTogc2luZ2xlU2NhbGUgfHwgaVNjYWxlLnBhcnNlKGxhYmVsc1tpbmRleF0sIGluZGV4KSxcbiAgICAgICAgICBbdkF4aXNdOiB2U2NhbGUucGFyc2UoZGF0YVtpbmRleF0sIGluZGV4KVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHBhcnNlZDtcbiAgICB9XG4gICAgcGFyc2VBcnJheURhdGEobWV0YSwgZGF0YSwgc3RhcnQsIGNvdW50KSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHhTY2FsZSxcbiAgICAgICAgeVNjYWxlXG4gICAgICB9ID0gbWV0YTtcbiAgICAgIGNvbnN0IHBhcnNlZCA9IG5ldyBBcnJheShjb3VudCk7XG4gICAgICBsZXQgaSwgaWxlbiwgaW5kZXgsIGl0ZW07XG4gICAgICBmb3IgKGkgPSAwLCBpbGVuID0gY291bnQ7IGkgPCBpbGVuOyArK2kpIHtcbiAgICAgICAgaW5kZXggPSBpICsgc3RhcnQ7XG4gICAgICAgIGl0ZW0gPSBkYXRhW2luZGV4XTtcbiAgICAgICAgcGFyc2VkW2ldID0ge1xuICAgICAgICAgIHg6IHhTY2FsZS5wYXJzZShpdGVtWzBdLCBpbmRleCksXG4gICAgICAgICAgeTogeVNjYWxlLnBhcnNlKGl0ZW1bMV0sIGluZGV4KVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHBhcnNlZDtcbiAgICB9XG4gICAgcGFyc2VPYmplY3REYXRhKG1ldGEsIGRhdGEsIHN0YXJ0LCBjb3VudCkge1xuICAgICAgY29uc3Qge1xuICAgICAgICB4U2NhbGUsXG4gICAgICAgIHlTY2FsZVxuICAgICAgfSA9IG1ldGE7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHhBeGlzS2V5ID0gJ3gnLFxuICAgICAgICB5QXhpc0tleSA9ICd5J1xuICAgICAgfSA9IHRoaXMuX3BhcnNpbmc7XG4gICAgICBjb25zdCBwYXJzZWQgPSBuZXcgQXJyYXkoY291bnQpO1xuICAgICAgbGV0IGksIGlsZW4sIGluZGV4LCBpdGVtO1xuICAgICAgZm9yIChpID0gMCwgaWxlbiA9IGNvdW50OyBpIDwgaWxlbjsgKytpKSB7XG4gICAgICAgIGluZGV4ID0gaSArIHN0YXJ0O1xuICAgICAgICBpdGVtID0gZGF0YVtpbmRleF07XG4gICAgICAgIHBhcnNlZFtpXSA9IHtcbiAgICAgICAgICB4OiB4U2NhbGUucGFyc2UocmVzb2x2ZU9iamVjdEtleShpdGVtLCB4QXhpc0tleSksIGluZGV4KSxcbiAgICAgICAgICB5OiB5U2NhbGUucGFyc2UocmVzb2x2ZU9iamVjdEtleShpdGVtLCB5QXhpc0tleSksIGluZGV4KVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHBhcnNlZDtcbiAgICB9XG4gICAgZ2V0UGFyc2VkKGluZGV4KSB7XG4gICAgICByZXR1cm4gdGhpcy5fY2FjaGVkTWV0YS5fcGFyc2VkW2luZGV4XTtcbiAgICB9XG4gICAgZ2V0RGF0YUVsZW1lbnQoaW5kZXgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9jYWNoZWRNZXRhLmRhdGFbaW5kZXhdO1xuICAgIH1cbiAgICBhcHBseVN0YWNrKHNjYWxlLCBwYXJzZWQsIG1vZGUpIHtcbiAgICAgIGNvbnN0IGNoYXJ0ID0gdGhpcy5jaGFydDtcbiAgICAgIGNvbnN0IG1ldGEgPSB0aGlzLl9jYWNoZWRNZXRhO1xuICAgICAgY29uc3QgdmFsdWUgPSBwYXJzZWRbc2NhbGUuYXhpc107XG4gICAgICBjb25zdCBzdGFjayA9IHtcbiAgICAgICAga2V5czogZ2V0U29ydGVkRGF0YXNldEluZGljZXMoY2hhcnQsIHRydWUpLFxuICAgICAgICB2YWx1ZXM6IHBhcnNlZC5fc3RhY2tzW3NjYWxlLmF4aXNdLl92aXN1YWxWYWx1ZXNcbiAgICAgIH07XG4gICAgICByZXR1cm4gYXBwbHlTdGFjayhzdGFjaywgdmFsdWUsIG1ldGEuaW5kZXgsIHtcbiAgICAgICAgbW9kZVxuICAgICAgfSk7XG4gICAgfVxuICAgIHVwZGF0ZVJhbmdlRnJvbVBhcnNlZChyYW5nZSwgc2NhbGUsIHBhcnNlZCwgc3RhY2spIHtcbiAgICAgIGNvbnN0IHBhcnNlZFZhbHVlID0gcGFyc2VkW3NjYWxlLmF4aXNdO1xuICAgICAgbGV0IHZhbHVlID0gcGFyc2VkVmFsdWUgPT09IG51bGwgPyBOYU4gOiBwYXJzZWRWYWx1ZTtcbiAgICAgIGNvbnN0IHZhbHVlcyA9IHN0YWNrICYmIHBhcnNlZC5fc3RhY2tzW3NjYWxlLmF4aXNdO1xuICAgICAgaWYgKHN0YWNrICYmIHZhbHVlcykge1xuICAgICAgICBzdGFjay52YWx1ZXMgPSB2YWx1ZXM7XG4gICAgICAgIHZhbHVlID0gYXBwbHlTdGFjayhzdGFjaywgcGFyc2VkVmFsdWUsIHRoaXMuX2NhY2hlZE1ldGEuaW5kZXgpO1xuICAgICAgfVxuICAgICAgcmFuZ2UubWluID0gTWF0aC5taW4ocmFuZ2UubWluLCB2YWx1ZSk7XG4gICAgICByYW5nZS5tYXggPSBNYXRoLm1heChyYW5nZS5tYXgsIHZhbHVlKTtcbiAgICB9XG4gICAgZ2V0TWluTWF4KHNjYWxlLCBjYW5TdGFjaykge1xuICAgICAgY29uc3QgbWV0YSA9IHRoaXMuX2NhY2hlZE1ldGE7XG4gICAgICBjb25zdCBfcGFyc2VkID0gbWV0YS5fcGFyc2VkO1xuICAgICAgY29uc3Qgc29ydGVkID0gbWV0YS5fc29ydGVkICYmIHNjYWxlID09PSBtZXRhLmlTY2FsZTtcbiAgICAgIGNvbnN0IGlsZW4gPSBfcGFyc2VkLmxlbmd0aDtcbiAgICAgIGNvbnN0IG90aGVyU2NhbGUgPSB0aGlzLl9nZXRPdGhlclNjYWxlKHNjYWxlKTtcbiAgICAgIGNvbnN0IHN0YWNrID0gY3JlYXRlU3RhY2soY2FuU3RhY2ssIG1ldGEsIHRoaXMuY2hhcnQpO1xuICAgICAgY29uc3QgcmFuZ2UgPSB7XG4gICAgICAgIG1pbjogTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLFxuICAgICAgICBtYXg6IE51bWJlci5ORUdBVElWRV9JTkZJTklUWVxuICAgICAgfTtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgbWluOiBvdGhlck1pbixcbiAgICAgICAgbWF4OiBvdGhlck1heFxuICAgICAgfSA9IGdldFVzZXJCb3VuZHMob3RoZXJTY2FsZSk7XG4gICAgICBsZXQgaSwgcGFyc2VkO1xuICAgICAgZnVuY3Rpb24gX3NraXAoKSB7XG4gICAgICAgIHBhcnNlZCA9IF9wYXJzZWRbaV07XG4gICAgICAgIGNvbnN0IG90aGVyVmFsdWUgPSBwYXJzZWRbb3RoZXJTY2FsZS5heGlzXTtcbiAgICAgICAgcmV0dXJuICFpc051bWJlckZpbml0ZShwYXJzZWRbc2NhbGUuYXhpc10pIHx8IG90aGVyTWluID4gb3RoZXJWYWx1ZSB8fCBvdGhlck1heCA8IG90aGVyVmFsdWU7XG4gICAgICB9XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgaWxlbjsgKytpKSB7XG4gICAgICAgIGlmIChfc2tpcCgpKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy51cGRhdGVSYW5nZUZyb21QYXJzZWQocmFuZ2UsIHNjYWxlLCBwYXJzZWQsIHN0YWNrKTtcbiAgICAgICAgaWYgKHNvcnRlZCkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoc29ydGVkKSB7XG4gICAgICAgIGZvciAoaSA9IGlsZW4gLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICAgIGlmIChfc2tpcCgpKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy51cGRhdGVSYW5nZUZyb21QYXJzZWQocmFuZ2UsIHNjYWxlLCBwYXJzZWQsIHN0YWNrKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJhbmdlO1xuICAgIH1cbiAgICBnZXRBbGxQYXJzZWRWYWx1ZXMoc2NhbGUpIHtcbiAgICAgIGNvbnN0IHBhcnNlZCA9IHRoaXMuX2NhY2hlZE1ldGEuX3BhcnNlZDtcbiAgICAgIGNvbnN0IHZhbHVlcyA9IFtdO1xuICAgICAgbGV0IGksIGlsZW4sIHZhbHVlO1xuICAgICAgZm9yIChpID0gMCwgaWxlbiA9IHBhcnNlZC5sZW5ndGg7IGkgPCBpbGVuOyArK2kpIHtcbiAgICAgICAgdmFsdWUgPSBwYXJzZWRbaV1bc2NhbGUuYXhpc107XG4gICAgICAgIGlmIChpc051bWJlckZpbml0ZSh2YWx1ZSkpIHtcbiAgICAgICAgICB2YWx1ZXMucHVzaCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWx1ZXM7XG4gICAgfVxuICAgIGdldE1heE92ZXJmbG93KCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBnZXRMYWJlbEFuZFZhbHVlKGluZGV4KSB7XG4gICAgICBjb25zdCBtZXRhID0gdGhpcy5fY2FjaGVkTWV0YTtcbiAgICAgIGNvbnN0IGlTY2FsZSA9IG1ldGEuaVNjYWxlO1xuICAgICAgY29uc3QgdlNjYWxlID0gbWV0YS52U2NhbGU7XG4gICAgICBjb25zdCBwYXJzZWQgPSB0aGlzLmdldFBhcnNlZChpbmRleCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBsYWJlbDogaVNjYWxlID8gJycgKyBpU2NhbGUuZ2V0TGFiZWxGb3JWYWx1ZShwYXJzZWRbaVNjYWxlLmF4aXNdKSA6ICcnLFxuICAgICAgICB2YWx1ZTogdlNjYWxlID8gJycgKyB2U2NhbGUuZ2V0TGFiZWxGb3JWYWx1ZShwYXJzZWRbdlNjYWxlLmF4aXNdKSA6ICcnXG4gICAgICB9O1xuICAgIH1cbiAgICBfdXBkYXRlKG1vZGUpIHtcbiAgICAgIGNvbnN0IG1ldGEgPSB0aGlzLl9jYWNoZWRNZXRhO1xuICAgICAgdGhpcy51cGRhdGUobW9kZSB8fCAnZGVmYXVsdCcpO1xuICAgICAgbWV0YS5fY2xpcCA9IHRvQ2xpcCh2YWx1ZU9yRGVmYXVsdCh0aGlzLm9wdGlvbnMuY2xpcCwgZGVmYXVsdENsaXAobWV0YS54U2NhbGUsIG1ldGEueVNjYWxlLCB0aGlzLmdldE1heE92ZXJmbG93KCkpKSk7XG4gICAgfVxuICAgIHVwZGF0ZShtb2RlKSB7fVxuICAgIGRyYXcoKSB7XG4gICAgICBjb25zdCBjdHggPSB0aGlzLl9jdHg7XG4gICAgICBjb25zdCBjaGFydCA9IHRoaXMuY2hhcnQ7XG4gICAgICBjb25zdCBtZXRhID0gdGhpcy5fY2FjaGVkTWV0YTtcbiAgICAgIGNvbnN0IGVsZW1lbnRzID0gbWV0YS5kYXRhIHx8IFtdO1xuICAgICAgY29uc3QgYXJlYSA9IGNoYXJ0LmNoYXJ0QXJlYTtcbiAgICAgIGNvbnN0IGFjdGl2ZSA9IFtdO1xuICAgICAgY29uc3Qgc3RhcnQgPSB0aGlzLl9kcmF3U3RhcnQgfHwgMDtcbiAgICAgIGNvbnN0IGNvdW50ID0gdGhpcy5fZHJhd0NvdW50IHx8IGVsZW1lbnRzLmxlbmd0aCAtIHN0YXJ0O1xuICAgICAgY29uc3QgZHJhd0FjdGl2ZUVsZW1lbnRzT25Ub3AgPSB0aGlzLm9wdGlvbnMuZHJhd0FjdGl2ZUVsZW1lbnRzT25Ub3A7XG4gICAgICBsZXQgaTtcbiAgICAgIGlmIChtZXRhLmRhdGFzZXQpIHtcbiAgICAgICAgbWV0YS5kYXRhc2V0LmRyYXcoY3R4LCBhcmVhLCBzdGFydCwgY291bnQpO1xuICAgICAgfVxuICAgICAgZm9yIChpID0gc3RhcnQ7IGkgPCBzdGFydCArIGNvdW50OyArK2kpIHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IGVsZW1lbnRzW2ldO1xuICAgICAgICBpZiAoZWxlbWVudC5oaWRkZW4pIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZWxlbWVudC5hY3RpdmUgJiYgZHJhd0FjdGl2ZUVsZW1lbnRzT25Ub3ApIHtcbiAgICAgICAgICBhY3RpdmUucHVzaChlbGVtZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBlbGVtZW50LmRyYXcoY3R4LCBhcmVhKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZm9yIChpID0gMDsgaSA8IGFjdGl2ZS5sZW5ndGg7ICsraSkge1xuICAgICAgICBhY3RpdmVbaV0uZHJhdyhjdHgsIGFyZWEpO1xuICAgICAgfVxuICAgIH1cbiAgICBnZXRTdHlsZShpbmRleCwgYWN0aXZlKSB7XG4gICAgICBjb25zdCBtb2RlID0gYWN0aXZlID8gJ2FjdGl2ZScgOiAnZGVmYXVsdCc7XG4gICAgICByZXR1cm4gaW5kZXggPT09IHVuZGVmaW5lZCAmJiB0aGlzLl9jYWNoZWRNZXRhLmRhdGFzZXQgPyB0aGlzLnJlc29sdmVEYXRhc2V0RWxlbWVudE9wdGlvbnMobW9kZSkgOiB0aGlzLnJlc29sdmVEYXRhRWxlbWVudE9wdGlvbnMoaW5kZXggfHwgMCwgbW9kZSk7XG4gICAgfVxuICAgIGdldENvbnRleHQoaW5kZXgsIGFjdGl2ZSwgbW9kZSkge1xuICAgICAgY29uc3QgZGF0YXNldCA9IHRoaXMuZ2V0RGF0YXNldCgpO1xuICAgICAgbGV0IGNvbnRleHQ7XG4gICAgICBpZiAoaW5kZXggPj0gMCAmJiBpbmRleCA8IHRoaXMuX2NhY2hlZE1ldGEuZGF0YS5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMuX2NhY2hlZE1ldGEuZGF0YVtpbmRleF07XG4gICAgICAgIGNvbnRleHQgPSBlbGVtZW50LiRjb250ZXh0IHx8IChlbGVtZW50LiRjb250ZXh0ID0gY3JlYXRlRGF0YUNvbnRleHQodGhpcy5nZXRDb250ZXh0KCksIGluZGV4LCBlbGVtZW50KSk7XG4gICAgICAgIGNvbnRleHQucGFyc2VkID0gdGhpcy5nZXRQYXJzZWQoaW5kZXgpO1xuICAgICAgICBjb250ZXh0LnJhdyA9IGRhdGFzZXQuZGF0YVtpbmRleF07XG4gICAgICAgIGNvbnRleHQuaW5kZXggPSBjb250ZXh0LmRhdGFJbmRleCA9IGluZGV4O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29udGV4dCA9IHRoaXMuJGNvbnRleHQgfHwgKHRoaXMuJGNvbnRleHQgPSBjcmVhdGVEYXRhc2V0Q29udGV4dCh0aGlzLmNoYXJ0LmdldENvbnRleHQoKSwgdGhpcy5pbmRleCkpO1xuICAgICAgICBjb250ZXh0LmRhdGFzZXQgPSBkYXRhc2V0O1xuICAgICAgICBjb250ZXh0LmluZGV4ID0gY29udGV4dC5kYXRhc2V0SW5kZXggPSB0aGlzLmluZGV4O1xuICAgICAgfVxuICAgICAgY29udGV4dC5hY3RpdmUgPSAhIWFjdGl2ZTtcbiAgICAgIGNvbnRleHQubW9kZSA9IG1vZGU7XG4gICAgICByZXR1cm4gY29udGV4dDtcbiAgICB9XG4gICAgcmVzb2x2ZURhdGFzZXRFbGVtZW50T3B0aW9ucyhtb2RlKSB7XG4gICAgICByZXR1cm4gdGhpcy5fcmVzb2x2ZUVsZW1lbnRPcHRpb25zKHRoaXMuZGF0YXNldEVsZW1lbnRUeXBlLmlkLCBtb2RlKTtcbiAgICB9XG4gICAgcmVzb2x2ZURhdGFFbGVtZW50T3B0aW9ucyhpbmRleCwgbW9kZSkge1xuICAgICAgcmV0dXJuIHRoaXMuX3Jlc29sdmVFbGVtZW50T3B0aW9ucyh0aGlzLmRhdGFFbGVtZW50VHlwZS5pZCwgbW9kZSwgaW5kZXgpO1xuICAgIH1cbiAgICBfcmVzb2x2ZUVsZW1lbnRPcHRpb25zKGVsZW1lbnRUeXBlLCBtb2RlID0gJ2RlZmF1bHQnLCBpbmRleCkge1xuICAgICAgY29uc3QgYWN0aXZlID0gbW9kZSA9PT0gJ2FjdGl2ZSc7XG4gICAgICBjb25zdCBjYWNoZSA9IHRoaXMuX2NhY2hlZERhdGFPcHRzO1xuICAgICAgY29uc3QgY2FjaGVLZXkgPSBlbGVtZW50VHlwZSArICctJyArIG1vZGU7XG4gICAgICBjb25zdCBjYWNoZWQgPSBjYWNoZVtjYWNoZUtleV07XG4gICAgICBjb25zdCBzaGFyaW5nID0gdGhpcy5lbmFibGVPcHRpb25TaGFyaW5nICYmIGRlZmluZWQoaW5kZXgpO1xuICAgICAgaWYgKGNhY2hlZCkge1xuICAgICAgICByZXR1cm4gY2xvbmVJZk5vdFNoYXJlZChjYWNoZWQsIHNoYXJpbmcpO1xuICAgICAgfVxuICAgICAgY29uc3QgY29uZmlnID0gdGhpcy5jaGFydC5jb25maWc7XG4gICAgICBjb25zdCBzY29wZUtleXMgPSBjb25maWcuZGF0YXNldEVsZW1lbnRTY29wZUtleXModGhpcy5fdHlwZSwgZWxlbWVudFR5cGUpO1xuICAgICAgY29uc3QgcHJlZml4ZXMgPSBhY3RpdmUgPyBbYCR7ZWxlbWVudFR5cGV9SG92ZXJgLCAnaG92ZXInLCBlbGVtZW50VHlwZSwgJyddIDogW2VsZW1lbnRUeXBlLCAnJ107XG4gICAgICBjb25zdCBzY29wZXMgPSBjb25maWcuZ2V0T3B0aW9uU2NvcGVzKHRoaXMuZ2V0RGF0YXNldCgpLCBzY29wZUtleXMpO1xuICAgICAgY29uc3QgbmFtZXMgPSBPYmplY3Qua2V5cyhkZWZhdWx0cy5lbGVtZW50c1tlbGVtZW50VHlwZV0pO1xuICAgICAgY29uc3QgY29udGV4dCA9ICgpID0+IHRoaXMuZ2V0Q29udGV4dChpbmRleCwgYWN0aXZlLCBtb2RlKTtcbiAgICAgIGNvbnN0IHZhbHVlcyA9IGNvbmZpZy5yZXNvbHZlTmFtZWRPcHRpb25zKHNjb3BlcywgbmFtZXMsIGNvbnRleHQsIHByZWZpeGVzKTtcbiAgICAgIGlmICh2YWx1ZXMuJHNoYXJlZCkge1xuICAgICAgICB2YWx1ZXMuJHNoYXJlZCA9IHNoYXJpbmc7XG4gICAgICAgIGNhY2hlW2NhY2hlS2V5XSA9IE9iamVjdC5mcmVlemUoY2xvbmVJZk5vdFNoYXJlZCh2YWx1ZXMsIHNoYXJpbmcpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWx1ZXM7XG4gICAgfVxuICAgIF9yZXNvbHZlQW5pbWF0aW9ucyhpbmRleCwgdHJhbnNpdGlvbiwgYWN0aXZlKSB7XG4gICAgICBjb25zdCBjaGFydCA9IHRoaXMuY2hhcnQ7XG4gICAgICBjb25zdCBjYWNoZSA9IHRoaXMuX2NhY2hlZERhdGFPcHRzO1xuICAgICAgY29uc3QgY2FjaGVLZXkgPSBgYW5pbWF0aW9uLSR7dHJhbnNpdGlvbn1gO1xuICAgICAgY29uc3QgY2FjaGVkID0gY2FjaGVbY2FjaGVLZXldO1xuICAgICAgaWYgKGNhY2hlZCkge1xuICAgICAgICByZXR1cm4gY2FjaGVkO1xuICAgICAgfVxuICAgICAgbGV0IG9wdGlvbnM7XG4gICAgICBpZiAoY2hhcnQub3B0aW9ucy5hbmltYXRpb24gIT09IGZhbHNlKSB7XG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuY2hhcnQuY29uZmlnO1xuICAgICAgICBjb25zdCBzY29wZUtleXMgPSBjb25maWcuZGF0YXNldEFuaW1hdGlvblNjb3BlS2V5cyh0aGlzLl90eXBlLCB0cmFuc2l0aW9uKTtcbiAgICAgICAgY29uc3Qgc2NvcGVzID0gY29uZmlnLmdldE9wdGlvblNjb3Blcyh0aGlzLmdldERhdGFzZXQoKSwgc2NvcGVLZXlzKTtcbiAgICAgICAgb3B0aW9ucyA9IGNvbmZpZy5jcmVhdGVSZXNvbHZlcihzY29wZXMsIHRoaXMuZ2V0Q29udGV4dChpbmRleCwgYWN0aXZlLCB0cmFuc2l0aW9uKSk7XG4gICAgICB9XG4gICAgICBjb25zdCBhbmltYXRpb25zID0gbmV3IEFuaW1hdGlvbnMoY2hhcnQsIG9wdGlvbnMgJiYgb3B0aW9ucy5hbmltYXRpb25zKTtcbiAgICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMuX2NhY2hlYWJsZSkge1xuICAgICAgICBjYWNoZVtjYWNoZUtleV0gPSBPYmplY3QuZnJlZXplKGFuaW1hdGlvbnMpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFuaW1hdGlvbnM7XG4gICAgfVxuICAgIGdldFNoYXJlZE9wdGlvbnMob3B0aW9ucykge1xuICAgICAgaWYgKCFvcHRpb25zLiRzaGFyZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuX3NoYXJlZE9wdGlvbnMgfHwgKHRoaXMuX3NoYXJlZE9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zKSk7XG4gICAgfVxuICAgIGluY2x1ZGVPcHRpb25zKG1vZGUsIHNoYXJlZE9wdGlvbnMpIHtcbiAgICAgIHJldHVybiAhc2hhcmVkT3B0aW9ucyB8fCBpc0RpcmVjdFVwZGF0ZU1vZGUobW9kZSkgfHwgdGhpcy5jaGFydC5fYW5pbWF0aW9uc0Rpc2FibGVkO1xuICAgIH1cbiAgICBfZ2V0U2hhcmVkT3B0aW9ucyhzdGFydCwgbW9kZSkge1xuICAgICAgY29uc3QgZmlyc3RPcHRzID0gdGhpcy5yZXNvbHZlRGF0YUVsZW1lbnRPcHRpb25zKHN0YXJ0LCBtb2RlKTtcbiAgICAgIGNvbnN0IHByZXZpb3VzbHlTaGFyZWRPcHRpb25zID0gdGhpcy5fc2hhcmVkT3B0aW9ucztcbiAgICAgIGNvbnN0IHNoYXJlZE9wdGlvbnMgPSB0aGlzLmdldFNoYXJlZE9wdGlvbnMoZmlyc3RPcHRzKTtcbiAgICAgIGNvbnN0IGluY2x1ZGVPcHRpb25zID0gdGhpcy5pbmNsdWRlT3B0aW9ucyhtb2RlLCBzaGFyZWRPcHRpb25zKSB8fCBzaGFyZWRPcHRpb25zICE9PSBwcmV2aW91c2x5U2hhcmVkT3B0aW9ucztcbiAgICAgIHRoaXMudXBkYXRlU2hhcmVkT3B0aW9ucyhzaGFyZWRPcHRpb25zLCBtb2RlLCBmaXJzdE9wdHMpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc2hhcmVkT3B0aW9ucyxcbiAgICAgICAgaW5jbHVkZU9wdGlvbnNcbiAgICAgIH07XG4gICAgfVxuICAgIHVwZGF0ZUVsZW1lbnQoZWxlbWVudCwgaW5kZXgsIHByb3BlcnRpZXMsIG1vZGUpIHtcbiAgICAgIGlmIChpc0RpcmVjdFVwZGF0ZU1vZGUobW9kZSkpIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihlbGVtZW50LCBwcm9wZXJ0aWVzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX3Jlc29sdmVBbmltYXRpb25zKGluZGV4LCBtb2RlKS51cGRhdGUoZWxlbWVudCwgcHJvcGVydGllcyk7XG4gICAgICB9XG4gICAgfVxuICAgIHVwZGF0ZVNoYXJlZE9wdGlvbnMoc2hhcmVkT3B0aW9ucywgbW9kZSwgbmV3T3B0aW9ucykge1xuICAgICAgaWYgKHNoYXJlZE9wdGlvbnMgJiYgIWlzRGlyZWN0VXBkYXRlTW9kZShtb2RlKSkge1xuICAgICAgICB0aGlzLl9yZXNvbHZlQW5pbWF0aW9ucyh1bmRlZmluZWQsIG1vZGUpLnVwZGF0ZShzaGFyZWRPcHRpb25zLCBuZXdPcHRpb25zKTtcbiAgICAgIH1cbiAgICB9XG4gICAgX3NldFN0eWxlKGVsZW1lbnQsIGluZGV4LCBtb2RlLCBhY3RpdmUpIHtcbiAgICAgIGVsZW1lbnQuYWN0aXZlID0gYWN0aXZlO1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuZ2V0U3R5bGUoaW5kZXgsIGFjdGl2ZSk7XG4gICAgICB0aGlzLl9yZXNvbHZlQW5pbWF0aW9ucyhpbmRleCwgbW9kZSwgYWN0aXZlKS51cGRhdGUoZWxlbWVudCwge1xuICAgICAgICBvcHRpb25zOiAhYWN0aXZlICYmIHRoaXMuZ2V0U2hhcmVkT3B0aW9ucyhvcHRpb25zKSB8fCBvcHRpb25zXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmVtb3ZlSG92ZXJTdHlsZShlbGVtZW50LCBkYXRhc2V0SW5kZXgsIGluZGV4KSB7XG4gICAgICB0aGlzLl9zZXRTdHlsZShlbGVtZW50LCBpbmRleCwgJ2FjdGl2ZScsIGZhbHNlKTtcbiAgICB9XG4gICAgc2V0SG92ZXJTdHlsZShlbGVtZW50LCBkYXRhc2V0SW5kZXgsIGluZGV4KSB7XG4gICAgICB0aGlzLl9zZXRTdHlsZShlbGVtZW50LCBpbmRleCwgJ2FjdGl2ZScsIHRydWUpO1xuICAgIH1cbiAgICBfcmVtb3ZlRGF0YXNldEhvdmVyU3R5bGUoKSB7XG4gICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5fY2FjaGVkTWV0YS5kYXRhc2V0O1xuICAgICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgICAgdGhpcy5fc2V0U3R5bGUoZWxlbWVudCwgdW5kZWZpbmVkLCAnYWN0aXZlJywgZmFsc2UpO1xuICAgICAgfVxuICAgIH1cbiAgICBfc2V0RGF0YXNldEhvdmVyU3R5bGUoKSB7XG4gICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5fY2FjaGVkTWV0YS5kYXRhc2V0O1xuICAgICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgICAgdGhpcy5fc2V0U3R5bGUoZWxlbWVudCwgdW5kZWZpbmVkLCAnYWN0aXZlJywgdHJ1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIF9yZXN5bmNFbGVtZW50cyhyZXNldE5ld0VsZW1lbnRzKSB7XG4gICAgICBjb25zdCBkYXRhID0gdGhpcy5fZGF0YTtcbiAgICAgIGNvbnN0IGVsZW1lbnRzID0gdGhpcy5fY2FjaGVkTWV0YS5kYXRhO1xuICAgICAgZm9yIChjb25zdCBbbWV0aG9kLCBhcmcxLCBhcmcyXSBvZiB0aGlzLl9zeW5jTGlzdCkge1xuICAgICAgICB0aGlzW21ldGhvZF0oYXJnMSwgYXJnMik7XG4gICAgICB9XG4gICAgICB0aGlzLl9zeW5jTGlzdCA9IFtdO1xuICAgICAgY29uc3QgbnVtTWV0YSA9IGVsZW1lbnRzLmxlbmd0aDtcbiAgICAgIGNvbnN0IG51bURhdGEgPSBkYXRhLmxlbmd0aDtcbiAgICAgIGNvbnN0IGNvdW50ID0gTWF0aC5taW4obnVtRGF0YSwgbnVtTWV0YSk7XG4gICAgICBpZiAoY291bnQpIHtcbiAgICAgICAgdGhpcy5wYXJzZSgwLCBjb3VudCk7XG4gICAgICB9XG4gICAgICBpZiAobnVtRGF0YSA+IG51bU1ldGEpIHtcbiAgICAgICAgdGhpcy5faW5zZXJ0RWxlbWVudHMobnVtTWV0YSwgbnVtRGF0YSAtIG51bU1ldGEsIHJlc2V0TmV3RWxlbWVudHMpO1xuICAgICAgfSBlbHNlIGlmIChudW1EYXRhIDwgbnVtTWV0YSkge1xuICAgICAgICB0aGlzLl9yZW1vdmVFbGVtZW50cyhudW1EYXRhLCBudW1NZXRhIC0gbnVtRGF0YSk7XG4gICAgICB9XG4gICAgfVxuICAgIF9pbnNlcnRFbGVtZW50cyhzdGFydCwgY291bnQsIHJlc2V0TmV3RWxlbWVudHMgPSB0cnVlKSB7XG4gICAgICBjb25zdCBtZXRhID0gdGhpcy5fY2FjaGVkTWV0YTtcbiAgICAgIGNvbnN0IGRhdGEgPSBtZXRhLmRhdGE7XG4gICAgICBjb25zdCBlbmQgPSBzdGFydCArIGNvdW50O1xuICAgICAgbGV0IGk7XG4gICAgICBjb25zdCBtb3ZlID0gYXJyID0+IHtcbiAgICAgICAgYXJyLmxlbmd0aCArPSBjb3VudDtcbiAgICAgICAgZm9yIChpID0gYXJyLmxlbmd0aCAtIDE7IGkgPj0gZW5kOyBpLS0pIHtcbiAgICAgICAgICBhcnJbaV0gPSBhcnJbaSAtIGNvdW50XTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIG1vdmUoZGF0YSk7XG4gICAgICBmb3IgKGkgPSBzdGFydDsgaSA8IGVuZDsgKytpKSB7XG4gICAgICAgIGRhdGFbaV0gPSBuZXcgdGhpcy5kYXRhRWxlbWVudFR5cGUoKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLl9wYXJzaW5nKSB7XG4gICAgICAgIG1vdmUobWV0YS5fcGFyc2VkKTtcbiAgICAgIH1cbiAgICAgIHRoaXMucGFyc2Uoc3RhcnQsIGNvdW50KTtcbiAgICAgIGlmIChyZXNldE5ld0VsZW1lbnRzKSB7XG4gICAgICAgIHRoaXMudXBkYXRlRWxlbWVudHMoZGF0YSwgc3RhcnQsIGNvdW50LCAncmVzZXQnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdXBkYXRlRWxlbWVudHMoZWxlbWVudCwgc3RhcnQsIGNvdW50LCBtb2RlKSB7fVxuICAgIF9yZW1vdmVFbGVtZW50cyhzdGFydCwgY291bnQpIHtcbiAgICAgIGNvbnN0IG1ldGEgPSB0aGlzLl9jYWNoZWRNZXRhO1xuICAgICAgaWYgKHRoaXMuX3BhcnNpbmcpIHtcbiAgICAgICAgY29uc3QgcmVtb3ZlZCA9IG1ldGEuX3BhcnNlZC5zcGxpY2Uoc3RhcnQsIGNvdW50KTtcbiAgICAgICAgaWYgKG1ldGEuX3N0YWNrZWQpIHtcbiAgICAgICAgICBjbGVhclN0YWNrcyhtZXRhLCByZW1vdmVkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbWV0YS5kYXRhLnNwbGljZShzdGFydCwgY291bnQpO1xuICAgIH1cbiAgICBfc3luYyhhcmdzKSB7XG4gICAgICBpZiAodGhpcy5fcGFyc2luZykge1xuICAgICAgICB0aGlzLl9zeW5jTGlzdC5wdXNoKGFyZ3MpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgW21ldGhvZCwgYXJnMSwgYXJnMl0gPSBhcmdzO1xuICAgICAgICB0aGlzW21ldGhvZF0oYXJnMSwgYXJnMik7XG4gICAgICB9XG4gICAgICB0aGlzLmNoYXJ0Ll9kYXRhQ2hhbmdlcy5wdXNoKFt0aGlzLmluZGV4LCAuLi5hcmdzXSk7XG4gICAgfVxuICAgIF9vbkRhdGFQdXNoKCkge1xuICAgICAgY29uc3QgY291bnQgPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgdGhpcy5fc3luYyhbJ19pbnNlcnRFbGVtZW50cycsIHRoaXMuZ2V0RGF0YXNldCgpLmRhdGEubGVuZ3RoIC0gY291bnQsIGNvdW50XSk7XG4gICAgfVxuICAgIF9vbkRhdGFQb3AoKSB7XG4gICAgICB0aGlzLl9zeW5jKFsnX3JlbW92ZUVsZW1lbnRzJywgdGhpcy5fY2FjaGVkTWV0YS5kYXRhLmxlbmd0aCAtIDEsIDFdKTtcbiAgICB9XG4gICAgX29uRGF0YVNoaWZ0KCkge1xuICAgICAgdGhpcy5fc3luYyhbJ19yZW1vdmVFbGVtZW50cycsIDAsIDFdKTtcbiAgICB9XG4gICAgX29uRGF0YVNwbGljZShzdGFydCwgY291bnQpIHtcbiAgICAgIGlmIChjb3VudCkge1xuICAgICAgICB0aGlzLl9zeW5jKFsnX3JlbW92ZUVsZW1lbnRzJywgc3RhcnQsIGNvdW50XSk7XG4gICAgICB9XG4gICAgICBjb25zdCBuZXdDb3VudCA9IGFyZ3VtZW50cy5sZW5ndGggLSAyO1xuICAgICAgaWYgKG5ld0NvdW50KSB7XG4gICAgICAgIHRoaXMuX3N5bmMoWydfaW5zZXJ0RWxlbWVudHMnLCBzdGFydCwgbmV3Q291bnRdKTtcbiAgICAgIH1cbiAgICB9XG4gICAgX29uRGF0YVVuc2hpZnQoKSB7XG4gICAgICB0aGlzLl9zeW5jKFsnX2luc2VydEVsZW1lbnRzJywgMCwgYXJndW1lbnRzLmxlbmd0aF0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gRGF0YXNldENvbnRyb2xsZXI7XG59KSgpO1xuZnVuY3Rpb24gZ2V0QWxsU2NhbGVWYWx1ZXMoc2NhbGUsIHR5cGUpIHtcbiAgaWYgKCFzY2FsZS5fY2FjaGUuJGJhcikge1xuICAgIGNvbnN0IHZpc2libGVNZXRhcyA9IHNjYWxlLmdldE1hdGNoaW5nVmlzaWJsZU1ldGFzKHR5cGUpO1xuICAgIGxldCB2YWx1ZXMgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMCwgaWxlbiA9IHZpc2libGVNZXRhcy5sZW5ndGg7IGkgPCBpbGVuOyBpKyspIHtcbiAgICAgIHZhbHVlcyA9IHZhbHVlcy5jb25jYXQodmlzaWJsZU1ldGFzW2ldLmNvbnRyb2xsZXIuZ2V0QWxsUGFyc2VkVmFsdWVzKHNjYWxlKSk7XG4gICAgfVxuICAgIHNjYWxlLl9jYWNoZS4kYmFyID0gX2FycmF5VW5pcXVlKHZhbHVlcy5zb3J0KChhLCBiKSA9PiBhIC0gYikpO1xuICB9XG4gIHJldHVybiBzY2FsZS5fY2FjaGUuJGJhcjtcbn1cbmZ1bmN0aW9uIGNvbXB1dGVNaW5TYW1wbGVTaXplKG1ldGEpIHtcbiAgY29uc3Qgc2NhbGUgPSBtZXRhLmlTY2FsZTtcbiAgY29uc3QgdmFsdWVzID0gZ2V0QWxsU2NhbGVWYWx1ZXMoc2NhbGUsIG1ldGEudHlwZSk7XG4gIGxldCBtaW4gPSBzY2FsZS5fbGVuZ3RoO1xuICBsZXQgaSwgaWxlbiwgY3VyciwgcHJldjtcbiAgY29uc3QgdXBkYXRlTWluQW5kUHJldiA9ICgpID0+IHtcbiAgICBpZiAoY3VyciA9PT0gMzI3NjcgfHwgY3VyciA9PT0gLTMyNzY4KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChkZWZpbmVkKHByZXYpKSB7XG4gICAgICBtaW4gPSBNYXRoLm1pbihtaW4sIE1hdGguYWJzKGN1cnIgLSBwcmV2KSB8fCBtaW4pO1xuICAgIH1cbiAgICBwcmV2ID0gY3VycjtcbiAgfTtcbiAgZm9yIChpID0gMCwgaWxlbiA9IHZhbHVlcy5sZW5ndGg7IGkgPCBpbGVuOyArK2kpIHtcbiAgICBjdXJyID0gc2NhbGUuZ2V0UGl4ZWxGb3JWYWx1ZSh2YWx1ZXNbaV0pO1xuICAgIHVwZGF0ZU1pbkFuZFByZXYoKTtcbiAgfVxuICBwcmV2ID0gdW5kZWZpbmVkO1xuICBmb3IgKGkgPSAwLCBpbGVuID0gc2NhbGUudGlja3MubGVuZ3RoOyBpIDwgaWxlbjsgKytpKSB7XG4gICAgY3VyciA9IHNjYWxlLmdldFBpeGVsRm9yVGljayhpKTtcbiAgICB1cGRhdGVNaW5BbmRQcmV2KCk7XG4gIH1cbiAgcmV0dXJuIG1pbjtcbn1cbmZ1bmN0aW9uIGNvbXB1dGVGaXRDYXRlZ29yeVRyYWl0cyhpbmRleCwgcnVsZXIsIG9wdGlvbnMsIHN0YWNrQ291bnQpIHtcbiAgY29uc3QgdGhpY2tuZXNzID0gb3B0aW9ucy5iYXJUaGlja25lc3M7XG4gIGxldCBzaXplLCByYXRpbztcbiAgaWYgKGlzTnVsbE9yVW5kZWYodGhpY2tuZXNzKSkge1xuICAgIHNpemUgPSBydWxlci5taW4gKiBvcHRpb25zLmNhdGVnb3J5UGVyY2VudGFnZTtcbiAgICByYXRpbyA9IG9wdGlvbnMuYmFyUGVyY2VudGFnZTtcbiAgfSBlbHNlIHtcbiAgICBzaXplID0gdGhpY2tuZXNzICogc3RhY2tDb3VudDtcbiAgICByYXRpbyA9IDE7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBjaHVuazogc2l6ZSAvIHN0YWNrQ291bnQsXG4gICAgcmF0aW8sXG4gICAgc3RhcnQ6IHJ1bGVyLnBpeGVsc1tpbmRleF0gLSBzaXplIC8gMlxuICB9O1xufVxuZnVuY3Rpb24gY29tcHV0ZUZsZXhDYXRlZ29yeVRyYWl0cyhpbmRleCwgcnVsZXIsIG9wdGlvbnMsIHN0YWNrQ291bnQpIHtcbiAgY29uc3QgcGl4ZWxzID0gcnVsZXIucGl4ZWxzO1xuICBjb25zdCBjdXJyID0gcGl4ZWxzW2luZGV4XTtcbiAgbGV0IHByZXYgPSBpbmRleCA+IDAgPyBwaXhlbHNbaW5kZXggLSAxXSA6IG51bGw7XG4gIGxldCBuZXh0ID0gaW5kZXggPCBwaXhlbHMubGVuZ3RoIC0gMSA/IHBpeGVsc1tpbmRleCArIDFdIDogbnVsbDtcbiAgY29uc3QgcGVyY2VudCA9IG9wdGlvbnMuY2F0ZWdvcnlQZXJjZW50YWdlO1xuICBpZiAocHJldiA9PT0gbnVsbCkge1xuICAgIHByZXYgPSBjdXJyIC0gKG5leHQgPT09IG51bGwgPyBydWxlci5lbmQgLSBydWxlci5zdGFydCA6IG5leHQgLSBjdXJyKTtcbiAgfVxuICBpZiAobmV4dCA9PT0gbnVsbCkge1xuICAgIG5leHQgPSBjdXJyICsgY3VyciAtIHByZXY7XG4gIH1cbiAgY29uc3Qgc3RhcnQgPSBjdXJyIC0gKGN1cnIgLSBNYXRoLm1pbihwcmV2LCBuZXh0KSkgLyAyICogcGVyY2VudDtcbiAgY29uc3Qgc2l6ZSA9IE1hdGguYWJzKG5leHQgLSBwcmV2KSAvIDIgKiBwZXJjZW50O1xuICByZXR1cm4ge1xuICAgIGNodW5rOiBzaXplIC8gc3RhY2tDb3VudCxcbiAgICByYXRpbzogb3B0aW9ucy5iYXJQZXJjZW50YWdlLFxuICAgIHN0YXJ0XG4gIH07XG59XG5mdW5jdGlvbiBwYXJzZUZsb2F0QmFyKGVudHJ5LCBpdGVtLCB2U2NhbGUsIGkpIHtcbiAgY29uc3Qgc3RhcnRWYWx1ZSA9IHZTY2FsZS5wYXJzZShlbnRyeVswXSwgaSk7XG4gIGNvbnN0IGVuZFZhbHVlID0gdlNjYWxlLnBhcnNlKGVudHJ5WzFdLCBpKTtcbiAgY29uc3QgbWluID0gTWF0aC5taW4oc3RhcnRWYWx1ZSwgZW5kVmFsdWUpO1xuICBjb25zdCBtYXggPSBNYXRoLm1heChzdGFydFZhbHVlLCBlbmRWYWx1ZSk7XG4gIGxldCBiYXJTdGFydCA9IG1pbjtcbiAgbGV0IGJhckVuZCA9IG1heDtcbiAgaWYgKE1hdGguYWJzKG1pbikgPiBNYXRoLmFicyhtYXgpKSB7XG4gICAgYmFyU3RhcnQgPSBtYXg7XG4gICAgYmFyRW5kID0gbWluO1xuICB9XG4gIGl0ZW1bdlNjYWxlLmF4aXNdID0gYmFyRW5kO1xuICBpdGVtLl9jdXN0b20gPSB7XG4gICAgYmFyU3RhcnQsXG4gICAgYmFyRW5kLFxuICAgIHN0YXJ0OiBzdGFydFZhbHVlLFxuICAgIGVuZDogZW5kVmFsdWUsXG4gICAgbWluLFxuICAgIG1heFxuICB9O1xufVxuZnVuY3Rpb24gcGFyc2VWYWx1ZShlbnRyeSwgaXRlbSwgdlNjYWxlLCBpKSB7XG4gIGlmIChpc0FycmF5KGVudHJ5KSkge1xuICAgIHBhcnNlRmxvYXRCYXIoZW50cnksIGl0ZW0sIHZTY2FsZSwgaSk7XG4gIH0gZWxzZSB7XG4gICAgaXRlbVt2U2NhbGUuYXhpc10gPSB2U2NhbGUucGFyc2UoZW50cnksIGkpO1xuICB9XG4gIHJldHVybiBpdGVtO1xufVxuZnVuY3Rpb24gcGFyc2VBcnJheU9yUHJpbWl0aXZlKG1ldGEsIGRhdGEsIHN0YXJ0LCBjb3VudCkge1xuICBjb25zdCBpU2NhbGUgPSBtZXRhLmlTY2FsZTtcbiAgY29uc3QgdlNjYWxlID0gbWV0YS52U2NhbGU7XG4gIGNvbnN0IGxhYmVscyA9IGlTY2FsZS5nZXRMYWJlbHMoKTtcbiAgY29uc3Qgc2luZ2xlU2NhbGUgPSBpU2NhbGUgPT09IHZTY2FsZTtcbiAgY29uc3QgcGFyc2VkID0gW107XG4gIGxldCBpLCBpbGVuLCBpdGVtLCBlbnRyeTtcbiAgZm9yIChpID0gc3RhcnQsIGlsZW4gPSBzdGFydCArIGNvdW50OyBpIDwgaWxlbjsgKytpKSB7XG4gICAgZW50cnkgPSBkYXRhW2ldO1xuICAgIGl0ZW0gPSB7fTtcbiAgICBpdGVtW2lTY2FsZS5heGlzXSA9IHNpbmdsZVNjYWxlIHx8IGlTY2FsZS5wYXJzZShsYWJlbHNbaV0sIGkpO1xuICAgIHBhcnNlZC5wdXNoKHBhcnNlVmFsdWUoZW50cnksIGl0ZW0sIHZTY2FsZSwgaSkpO1xuICB9XG4gIHJldHVybiBwYXJzZWQ7XG59XG5mdW5jdGlvbiBpc0Zsb2F0QmFyKGN1c3RvbSkge1xuICByZXR1cm4gY3VzdG9tICYmIGN1c3RvbS5iYXJTdGFydCAhPT0gdW5kZWZpbmVkICYmIGN1c3RvbS5iYXJFbmQgIT09IHVuZGVmaW5lZDtcbn1cbmZ1bmN0aW9uIGJhclNpZ24oc2l6ZSwgdlNjYWxlLCBhY3R1YWxCYXNlKSB7XG4gIGlmIChzaXplICE9PSAwKSB7XG4gICAgcmV0dXJuIHNpZ24oc2l6ZSk7XG4gIH1cbiAgcmV0dXJuICh2U2NhbGUuaXNIb3Jpem9udGFsKCkgPyAxIDogLTEpICogKHZTY2FsZS5taW4gPj0gYWN0dWFsQmFzZSA/IDEgOiAtMSk7XG59XG5mdW5jdGlvbiBib3JkZXJQcm9wcyhwcm9wZXJ0aWVzKSB7XG4gIGxldCByZXZlcnNlLCBzdGFydCwgZW5kLCB0b3AsIGJvdHRvbTtcbiAgaWYgKHByb3BlcnRpZXMuaG9yaXpvbnRhbCkge1xuICAgIHJldmVyc2UgPSBwcm9wZXJ0aWVzLmJhc2UgPiBwcm9wZXJ0aWVzLng7XG4gICAgc3RhcnQgPSAnbGVmdCc7XG4gICAgZW5kID0gJ3JpZ2h0JztcbiAgfSBlbHNlIHtcbiAgICByZXZlcnNlID0gcHJvcGVydGllcy5iYXNlIDwgcHJvcGVydGllcy55O1xuICAgIHN0YXJ0ID0gJ2JvdHRvbSc7XG4gICAgZW5kID0gJ3RvcCc7XG4gIH1cbiAgaWYgKHJldmVyc2UpIHtcbiAgICB0b3AgPSAnZW5kJztcbiAgICBib3R0b20gPSAnc3RhcnQnO1xuICB9IGVsc2Uge1xuICAgIHRvcCA9ICdzdGFydCc7XG4gICAgYm90dG9tID0gJ2VuZCc7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBzdGFydCxcbiAgICBlbmQsXG4gICAgcmV2ZXJzZSxcbiAgICB0b3AsXG4gICAgYm90dG9tXG4gIH07XG59XG5mdW5jdGlvbiBzZXRCb3JkZXJTa2lwcGVkKHByb3BlcnRpZXMsIG9wdGlvbnMsIHN0YWNrLCBpbmRleCkge1xuICBsZXQgZWRnZSA9IG9wdGlvbnMuYm9yZGVyU2tpcHBlZDtcbiAgY29uc3QgcmVzID0ge307XG4gIGlmICghZWRnZSkge1xuICAgIHByb3BlcnRpZXMuYm9yZGVyU2tpcHBlZCA9IHJlcztcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKGVkZ2UgPT09IHRydWUpIHtcbiAgICBwcm9wZXJ0aWVzLmJvcmRlclNraXBwZWQgPSB7XG4gICAgICB0b3A6IHRydWUsXG4gICAgICByaWdodDogdHJ1ZSxcbiAgICAgIGJvdHRvbTogdHJ1ZSxcbiAgICAgIGxlZnQ6IHRydWVcbiAgICB9O1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCB7XG4gICAgc3RhcnQsXG4gICAgZW5kLFxuICAgIHJldmVyc2UsXG4gICAgdG9wLFxuICAgIGJvdHRvbVxuICB9ID0gYm9yZGVyUHJvcHMocHJvcGVydGllcyk7XG4gIGlmIChlZGdlID09PSAnbWlkZGxlJyAmJiBzdGFjaykge1xuICAgIHByb3BlcnRpZXMuZW5hYmxlQm9yZGVyUmFkaXVzID0gdHJ1ZTtcbiAgICBpZiAoKHN0YWNrLl90b3AgfHwgMCkgPT09IGluZGV4KSB7XG4gICAgICBlZGdlID0gdG9wO1xuICAgIH0gZWxzZSBpZiAoKHN0YWNrLl9ib3R0b20gfHwgMCkgPT09IGluZGV4KSB7XG4gICAgICBlZGdlID0gYm90dG9tO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXNbcGFyc2VFZGdlKGJvdHRvbSwgc3RhcnQsIGVuZCwgcmV2ZXJzZSldID0gdHJ1ZTtcbiAgICAgIGVkZ2UgPSB0b3A7XG4gICAgfVxuICB9XG4gIHJlc1twYXJzZUVkZ2UoZWRnZSwgc3RhcnQsIGVuZCwgcmV2ZXJzZSldID0gdHJ1ZTtcbiAgcHJvcGVydGllcy5ib3JkZXJTa2lwcGVkID0gcmVzO1xufVxuZnVuY3Rpb24gcGFyc2VFZGdlKGVkZ2UsIGEsIGIsIHJldmVyc2UpIHtcbiAgaWYgKHJldmVyc2UpIHtcbiAgICBlZGdlID0gc3dhcChlZGdlLCBhLCBiKTtcbiAgICBlZGdlID0gc3RhcnRFbmQoZWRnZSwgYiwgYSk7XG4gIH0gZWxzZSB7XG4gICAgZWRnZSA9IHN0YXJ0RW5kKGVkZ2UsIGEsIGIpO1xuICB9XG4gIHJldHVybiBlZGdlO1xufVxuZnVuY3Rpb24gc3dhcChvcmlnLCB2MSwgdjIpIHtcbiAgcmV0dXJuIG9yaWcgPT09IHYxID8gdjIgOiBvcmlnID09PSB2MiA/IHYxIDogb3JpZztcbn1cbmZ1bmN0aW9uIHN0YXJ0RW5kKHYsIHN0YXJ0LCBlbmQpIHtcbiAgcmV0dXJuIHYgPT09ICdzdGFydCcgPyBzdGFydCA6IHYgPT09ICdlbmQnID8gZW5kIDogdjtcbn1cbmZ1bmN0aW9uIHNldEluZmxhdGVBbW91bnQocHJvcGVydGllcywge1xuICBpbmZsYXRlQW1vdW50XG59LCByYXRpbykge1xuICBwcm9wZXJ0aWVzLmluZmxhdGVBbW91bnQgPSBpbmZsYXRlQW1vdW50ID09PSAnYXV0bycgPyByYXRpbyA9PT0gMSA/IDAuMzMgOiAwIDogaW5mbGF0ZUFtb3VudDtcbn1cbmxldCBCYXJDb250cm9sbGVyID0gLyojX19QVVJFX18qLygoKSA9PiB7XG4gIGNsYXNzIEJhckNvbnRyb2xsZXIgZXh0ZW5kcyBEYXRhc2V0Q29udHJvbGxlciB7XG4gICAgc3RhdGljIGlkID0gJ2Jhcic7XG4gICAgc3RhdGljIGRlZmF1bHRzID0ge1xuICAgICAgZGF0YXNldEVsZW1lbnRUeXBlOiBmYWxzZSxcbiAgICAgIGRhdGFFbGVtZW50VHlwZTogJ2JhcicsXG4gICAgICBjYXRlZ29yeVBlcmNlbnRhZ2U6IDAuOCxcbiAgICAgIGJhclBlcmNlbnRhZ2U6IDAuOSxcbiAgICAgIGdyb3VwZWQ6IHRydWUsXG4gICAgICBhbmltYXRpb25zOiB7XG4gICAgICAgIG51bWJlcnM6IHtcbiAgICAgICAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiBbJ3gnLCAneScsICdiYXNlJywgJ3dpZHRoJywgJ2hlaWdodCddXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIHN0YXRpYyBvdmVycmlkZXMgPSB7XG4gICAgICBzY2FsZXM6IHtcbiAgICAgICAgX2luZGV4Xzoge1xuICAgICAgICAgIHR5cGU6ICdjYXRlZ29yeScsXG4gICAgICAgICAgb2Zmc2V0OiB0cnVlLFxuICAgICAgICAgIGdyaWQ6IHtcbiAgICAgICAgICAgIG9mZnNldDogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgX3ZhbHVlXzoge1xuICAgICAgICAgIHR5cGU6ICdsaW5lYXInLFxuICAgICAgICAgIGJlZ2luQXRaZXJvOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIHBhcnNlUHJpbWl0aXZlRGF0YShtZXRhLCBkYXRhLCBzdGFydCwgY291bnQpIHtcbiAgICAgIHJldHVybiBwYXJzZUFycmF5T3JQcmltaXRpdmUobWV0YSwgZGF0YSwgc3RhcnQsIGNvdW50KTtcbiAgICB9XG4gICAgcGFyc2VBcnJheURhdGEobWV0YSwgZGF0YSwgc3RhcnQsIGNvdW50KSB7XG4gICAgICByZXR1cm4gcGFyc2VBcnJheU9yUHJpbWl0aXZlKG1ldGEsIGRhdGEsIHN0YXJ0LCBjb3VudCk7XG4gICAgfVxuICAgIHBhcnNlT2JqZWN0RGF0YShtZXRhLCBkYXRhLCBzdGFydCwgY291bnQpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgaVNjYWxlLFxuICAgICAgICB2U2NhbGVcbiAgICAgIH0gPSBtZXRhO1xuICAgICAgY29uc3Qge1xuICAgICAgICB4QXhpc0tleSA9ICd4JyxcbiAgICAgICAgeUF4aXNLZXkgPSAneSdcbiAgICAgIH0gPSB0aGlzLl9wYXJzaW5nO1xuICAgICAgY29uc3QgaUF4aXNLZXkgPSBpU2NhbGUuYXhpcyA9PT0gJ3gnID8geEF4aXNLZXkgOiB5QXhpc0tleTtcbiAgICAgIGNvbnN0IHZBeGlzS2V5ID0gdlNjYWxlLmF4aXMgPT09ICd4JyA/IHhBeGlzS2V5IDogeUF4aXNLZXk7XG4gICAgICBjb25zdCBwYXJzZWQgPSBbXTtcbiAgICAgIGxldCBpLCBpbGVuLCBpdGVtLCBvYmo7XG4gICAgICBmb3IgKGkgPSBzdGFydCwgaWxlbiA9IHN0YXJ0ICsgY291bnQ7IGkgPCBpbGVuOyArK2kpIHtcbiAgICAgICAgb2JqID0gZGF0YVtpXTtcbiAgICAgICAgaXRlbSA9IHt9O1xuICAgICAgICBpdGVtW2lTY2FsZS5heGlzXSA9IGlTY2FsZS5wYXJzZShyZXNvbHZlT2JqZWN0S2V5KG9iaiwgaUF4aXNLZXkpLCBpKTtcbiAgICAgICAgcGFyc2VkLnB1c2gocGFyc2VWYWx1ZShyZXNvbHZlT2JqZWN0S2V5KG9iaiwgdkF4aXNLZXkpLCBpdGVtLCB2U2NhbGUsIGkpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBwYXJzZWQ7XG4gICAgfVxuICAgIHVwZGF0ZVJhbmdlRnJvbVBhcnNlZChyYW5nZSwgc2NhbGUsIHBhcnNlZCwgc3RhY2spIHtcbiAgICAgIHN1cGVyLnVwZGF0ZVJhbmdlRnJvbVBhcnNlZChyYW5nZSwgc2NhbGUsIHBhcnNlZCwgc3RhY2spO1xuICAgICAgY29uc3QgY3VzdG9tID0gcGFyc2VkLl9jdXN0b207XG4gICAgICBpZiAoY3VzdG9tICYmIHNjYWxlID09PSB0aGlzLl9jYWNoZWRNZXRhLnZTY2FsZSkge1xuICAgICAgICByYW5nZS5taW4gPSBNYXRoLm1pbihyYW5nZS5taW4sIGN1c3RvbS5taW4pO1xuICAgICAgICByYW5nZS5tYXggPSBNYXRoLm1heChyYW5nZS5tYXgsIGN1c3RvbS5tYXgpO1xuICAgICAgfVxuICAgIH1cbiAgICBnZXRNYXhPdmVyZmxvdygpIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgICBnZXRMYWJlbEFuZFZhbHVlKGluZGV4KSB7XG4gICAgICBjb25zdCBtZXRhID0gdGhpcy5fY2FjaGVkTWV0YTtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgaVNjYWxlLFxuICAgICAgICB2U2NhbGVcbiAgICAgIH0gPSBtZXRhO1xuICAgICAgY29uc3QgcGFyc2VkID0gdGhpcy5nZXRQYXJzZWQoaW5kZXgpO1xuICAgICAgY29uc3QgY3VzdG9tID0gcGFyc2VkLl9jdXN0b207XG4gICAgICBjb25zdCB2YWx1ZSA9IGlzRmxvYXRCYXIoY3VzdG9tKSA/ICdbJyArIGN1c3RvbS5zdGFydCArICcsICcgKyBjdXN0b20uZW5kICsgJ10nIDogJycgKyB2U2NhbGUuZ2V0TGFiZWxGb3JWYWx1ZShwYXJzZWRbdlNjYWxlLmF4aXNdKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGxhYmVsOiAnJyArIGlTY2FsZS5nZXRMYWJlbEZvclZhbHVlKHBhcnNlZFtpU2NhbGUuYXhpc10pLFxuICAgICAgICB2YWx1ZVxuICAgICAgfTtcbiAgICB9XG4gICAgaW5pdGlhbGl6ZSgpIHtcbiAgICAgIHRoaXMuZW5hYmxlT3B0aW9uU2hhcmluZyA9IHRydWU7XG4gICAgICBzdXBlci5pbml0aWFsaXplKCk7XG4gICAgICBjb25zdCBtZXRhID0gdGhpcy5fY2FjaGVkTWV0YTtcbiAgICAgIG1ldGEuc3RhY2sgPSB0aGlzLmdldERhdGFzZXQoKS5zdGFjaztcbiAgICB9XG4gICAgdXBkYXRlKG1vZGUpIHtcbiAgICAgIGNvbnN0IG1ldGEgPSB0aGlzLl9jYWNoZWRNZXRhO1xuICAgICAgdGhpcy51cGRhdGVFbGVtZW50cyhtZXRhLmRhdGEsIDAsIG1ldGEuZGF0YS5sZW5ndGgsIG1vZGUpO1xuICAgIH1cbiAgICB1cGRhdGVFbGVtZW50cyhiYXJzLCBzdGFydCwgY291bnQsIG1vZGUpIHtcbiAgICAgIGNvbnN0IHJlc2V0ID0gbW9kZSA9PT0gJ3Jlc2V0JztcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgaW5kZXgsXG4gICAgICAgIF9jYWNoZWRNZXRhOiB7XG4gICAgICAgICAgdlNjYWxlXG4gICAgICAgIH1cbiAgICAgIH0gPSB0aGlzO1xuICAgICAgY29uc3QgYmFzZSA9IHZTY2FsZS5nZXRCYXNlUGl4ZWwoKTtcbiAgICAgIGNvbnN0IGhvcml6b250YWwgPSB2U2NhbGUuaXNIb3Jpem9udGFsKCk7XG4gICAgICBjb25zdCBydWxlciA9IHRoaXMuX2dldFJ1bGVyKCk7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHNoYXJlZE9wdGlvbnMsXG4gICAgICAgIGluY2x1ZGVPcHRpb25zXG4gICAgICB9ID0gdGhpcy5fZ2V0U2hhcmVkT3B0aW9ucyhzdGFydCwgbW9kZSk7XG4gICAgICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPCBzdGFydCArIGNvdW50OyBpKyspIHtcbiAgICAgICAgY29uc3QgcGFyc2VkID0gdGhpcy5nZXRQYXJzZWQoaSk7XG4gICAgICAgIGNvbnN0IHZwaXhlbHMgPSByZXNldCB8fCBpc051bGxPclVuZGVmKHBhcnNlZFt2U2NhbGUuYXhpc10pID8ge1xuICAgICAgICAgIGJhc2UsXG4gICAgICAgICAgaGVhZDogYmFzZVxuICAgICAgICB9IDogdGhpcy5fY2FsY3VsYXRlQmFyVmFsdWVQaXhlbHMoaSk7XG4gICAgICAgIGNvbnN0IGlwaXhlbHMgPSB0aGlzLl9jYWxjdWxhdGVCYXJJbmRleFBpeGVscyhpLCBydWxlcik7XG4gICAgICAgIGNvbnN0IHN0YWNrID0gKHBhcnNlZC5fc3RhY2tzIHx8IHt9KVt2U2NhbGUuYXhpc107XG4gICAgICAgIGNvbnN0IHByb3BlcnRpZXMgPSB7XG4gICAgICAgICAgaG9yaXpvbnRhbCxcbiAgICAgICAgICBiYXNlOiB2cGl4ZWxzLmJhc2UsXG4gICAgICAgICAgZW5hYmxlQm9yZGVyUmFkaXVzOiAhc3RhY2sgfHwgaXNGbG9hdEJhcihwYXJzZWQuX2N1c3RvbSkgfHwgaW5kZXggPT09IHN0YWNrLl90b3AgfHwgaW5kZXggPT09IHN0YWNrLl9ib3R0b20sXG4gICAgICAgICAgeDogaG9yaXpvbnRhbCA/IHZwaXhlbHMuaGVhZCA6IGlwaXhlbHMuY2VudGVyLFxuICAgICAgICAgIHk6IGhvcml6b250YWwgPyBpcGl4ZWxzLmNlbnRlciA6IHZwaXhlbHMuaGVhZCxcbiAgICAgICAgICBoZWlnaHQ6IGhvcml6b250YWwgPyBpcGl4ZWxzLnNpemUgOiBNYXRoLmFicyh2cGl4ZWxzLnNpemUpLFxuICAgICAgICAgIHdpZHRoOiBob3Jpem9udGFsID8gTWF0aC5hYnModnBpeGVscy5zaXplKSA6IGlwaXhlbHMuc2l6ZVxuICAgICAgICB9O1xuICAgICAgICBpZiAoaW5jbHVkZU9wdGlvbnMpIHtcbiAgICAgICAgICBwcm9wZXJ0aWVzLm9wdGlvbnMgPSBzaGFyZWRPcHRpb25zIHx8IHRoaXMucmVzb2x2ZURhdGFFbGVtZW50T3B0aW9ucyhpLCBiYXJzW2ldLmFjdGl2ZSA/ICdhY3RpdmUnIDogbW9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHByb3BlcnRpZXMub3B0aW9ucyB8fCBiYXJzW2ldLm9wdGlvbnM7XG4gICAgICAgIHNldEJvcmRlclNraXBwZWQocHJvcGVydGllcywgb3B0aW9ucywgc3RhY2ssIGluZGV4KTtcbiAgICAgICAgc2V0SW5mbGF0ZUFtb3VudChwcm9wZXJ0aWVzLCBvcHRpb25zLCBydWxlci5yYXRpbyk7XG4gICAgICAgIHRoaXMudXBkYXRlRWxlbWVudChiYXJzW2ldLCBpLCBwcm9wZXJ0aWVzLCBtb2RlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgX2dldFN0YWNrcyhsYXN0LCBkYXRhSW5kZXgpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgaVNjYWxlXG4gICAgICB9ID0gdGhpcy5fY2FjaGVkTWV0YTtcbiAgICAgIGNvbnN0IG1ldGFzZXRzID0gaVNjYWxlLmdldE1hdGNoaW5nVmlzaWJsZU1ldGFzKHRoaXMuX3R5cGUpLmZpbHRlcihtZXRhID0+IG1ldGEuY29udHJvbGxlci5vcHRpb25zLmdyb3VwZWQpO1xuICAgICAgY29uc3Qgc3RhY2tlZCA9IGlTY2FsZS5vcHRpb25zLnN0YWNrZWQ7XG4gICAgICBjb25zdCBzdGFja3MgPSBbXTtcbiAgICAgIGNvbnN0IGN1cnJlbnRQYXJzZWQgPSB0aGlzLl9jYWNoZWRNZXRhLmNvbnRyb2xsZXIuZ2V0UGFyc2VkKGRhdGFJbmRleCk7XG4gICAgICBjb25zdCBpU2NhbGVWYWx1ZSA9IGN1cnJlbnRQYXJzZWQgJiYgY3VycmVudFBhcnNlZFtpU2NhbGUuYXhpc107XG4gICAgICBjb25zdCBza2lwTnVsbCA9IG1ldGEgPT4ge1xuICAgICAgICBjb25zdCBwYXJzZWQgPSBtZXRhLl9wYXJzZWQuZmluZChpdGVtID0+IGl0ZW1baVNjYWxlLmF4aXNdID09PSBpU2NhbGVWYWx1ZSk7XG4gICAgICAgIGNvbnN0IHZhbCA9IHBhcnNlZCAmJiBwYXJzZWRbbWV0YS52U2NhbGUuYXhpc107XG4gICAgICAgIGlmIChpc051bGxPclVuZGVmKHZhbCkgfHwgaXNOYU4odmFsKSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgZm9yIChjb25zdCBtZXRhIG9mIG1ldGFzZXRzKSB7XG4gICAgICAgIGlmIChkYXRhSW5kZXggIT09IHVuZGVmaW5lZCAmJiBza2lwTnVsbChtZXRhKSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdGFja2VkID09PSBmYWxzZSB8fCBzdGFja3MuaW5kZXhPZihtZXRhLnN0YWNrKSA9PT0gLTEgfHwgc3RhY2tlZCA9PT0gdW5kZWZpbmVkICYmIG1ldGEuc3RhY2sgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHN0YWNrcy5wdXNoKG1ldGEuc3RhY2spO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtZXRhLmluZGV4ID09PSBsYXN0KSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghc3RhY2tzLmxlbmd0aCkge1xuICAgICAgICBzdGFja3MucHVzaCh1bmRlZmluZWQpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHN0YWNrcztcbiAgICB9XG4gICAgX2dldFN0YWNrQ291bnQoaW5kZXgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9nZXRTdGFja3ModW5kZWZpbmVkLCBpbmRleCkubGVuZ3RoO1xuICAgIH1cbiAgICBfZ2V0QXhpc0NvdW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2dldEF4aXMoKS5sZW5ndGg7XG4gICAgfVxuICAgIGdldEZpcnN0U2NhbGVJZEZvckluZGV4QXhpcygpIHtcbiAgICAgIGNvbnN0IHNjYWxlcyA9IHRoaXMuY2hhcnQuc2NhbGVzO1xuICAgICAgY29uc3QgaW5kZXhTY2FsZUlkID0gdGhpcy5jaGFydC5vcHRpb25zLmluZGV4QXhpcztcbiAgICAgIHJldHVybiBPYmplY3Qua2V5cyhzY2FsZXMpLmZpbHRlcihrZXkgPT4gc2NhbGVzW2tleV0uYXhpcyA9PT0gaW5kZXhTY2FsZUlkKS5zaGlmdCgpO1xuICAgIH1cbiAgICBfZ2V0QXhpcygpIHtcbiAgICAgIGNvbnN0IGF4aXMgPSB7fTtcbiAgICAgIGNvbnN0IGZpcnN0U2NhbGVBeGlzSWQgPSB0aGlzLmdldEZpcnN0U2NhbGVJZEZvckluZGV4QXhpcygpO1xuICAgICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIHRoaXMuY2hhcnQuZGF0YS5kYXRhc2V0cykge1xuICAgICAgICBheGlzW3ZhbHVlT3JEZWZhdWx0KHRoaXMuY2hhcnQub3B0aW9ucy5pbmRleEF4aXMgPT09ICd4JyA/IGRhdGFzZXQueEF4aXNJRCA6IGRhdGFzZXQueUF4aXNJRCwgZmlyc3RTY2FsZUF4aXNJZCldID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBPYmplY3Qua2V5cyhheGlzKTtcbiAgICB9XG4gICAgX2dldFN0YWNrSW5kZXgoZGF0YXNldEluZGV4LCBuYW1lLCBkYXRhSW5kZXgpIHtcbiAgICAgIGNvbnN0IHN0YWNrcyA9IHRoaXMuX2dldFN0YWNrcyhkYXRhc2V0SW5kZXgsIGRhdGFJbmRleCk7XG4gICAgICBjb25zdCBpbmRleCA9IG5hbWUgIT09IHVuZGVmaW5lZCA/IHN0YWNrcy5pbmRleE9mKG5hbWUpIDogLTE7XG4gICAgICByZXR1cm4gaW5kZXggPT09IC0xID8gc3RhY2tzLmxlbmd0aCAtIDEgOiBpbmRleDtcbiAgICB9XG4gICAgX2dldFJ1bGVyKCkge1xuICAgICAgY29uc3Qgb3B0cyA9IHRoaXMub3B0aW9ucztcbiAgICAgIGNvbnN0IG1ldGEgPSB0aGlzLl9jYWNoZWRNZXRhO1xuICAgICAgY29uc3QgaVNjYWxlID0gbWV0YS5pU2NhbGU7XG4gICAgICBjb25zdCBwaXhlbHMgPSBbXTtcbiAgICAgIGxldCBpLCBpbGVuO1xuICAgICAgZm9yIChpID0gMCwgaWxlbiA9IG1ldGEuZGF0YS5sZW5ndGg7IGkgPCBpbGVuOyArK2kpIHtcbiAgICAgICAgcGl4ZWxzLnB1c2goaVNjYWxlLmdldFBpeGVsRm9yVmFsdWUodGhpcy5nZXRQYXJzZWQoaSlbaVNjYWxlLmF4aXNdLCBpKSk7XG4gICAgICB9XG4gICAgICBjb25zdCBiYXJUaGlja25lc3MgPSBvcHRzLmJhclRoaWNrbmVzcztcbiAgICAgIGNvbnN0IG1pbiA9IGJhclRoaWNrbmVzcyB8fCBjb21wdXRlTWluU2FtcGxlU2l6ZShtZXRhKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG1pbixcbiAgICAgICAgcGl4ZWxzLFxuICAgICAgICBzdGFydDogaVNjYWxlLl9zdGFydFBpeGVsLFxuICAgICAgICBlbmQ6IGlTY2FsZS5fZW5kUGl4ZWwsXG4gICAgICAgIHN0YWNrQ291bnQ6IHRoaXMuX2dldFN0YWNrQ291bnQoKSxcbiAgICAgICAgc2NhbGU6IGlTY2FsZSxcbiAgICAgICAgZ3JvdXBlZDogb3B0cy5ncm91cGVkLFxuICAgICAgICByYXRpbzogYmFyVGhpY2tuZXNzID8gMSA6IG9wdHMuY2F0ZWdvcnlQZXJjZW50YWdlICogb3B0cy5iYXJQZXJjZW50YWdlXG4gICAgICB9O1xuICAgIH1cbiAgICBfY2FsY3VsYXRlQmFyVmFsdWVQaXhlbHMoaW5kZXgpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgX2NhY2hlZE1ldGE6IHtcbiAgICAgICAgICB2U2NhbGUsXG4gICAgICAgICAgX3N0YWNrZWQsXG4gICAgICAgICAgaW5kZXg6IGRhdGFzZXRJbmRleFxuICAgICAgICB9LFxuICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgYmFzZTogYmFzZVZhbHVlLFxuICAgICAgICAgIG1pbkJhckxlbmd0aFxuICAgICAgICB9XG4gICAgICB9ID0gdGhpcztcbiAgICAgIGNvbnN0IGFjdHVhbEJhc2UgPSBiYXNlVmFsdWUgfHwgMDtcbiAgICAgIGNvbnN0IHBhcnNlZCA9IHRoaXMuZ2V0UGFyc2VkKGluZGV4KTtcbiAgICAgIGNvbnN0IGN1c3RvbSA9IHBhcnNlZC5fY3VzdG9tO1xuICAgICAgY29uc3QgZmxvYXRpbmcgPSBpc0Zsb2F0QmFyKGN1c3RvbSk7XG4gICAgICBsZXQgdmFsdWUgPSBwYXJzZWRbdlNjYWxlLmF4aXNdO1xuICAgICAgbGV0IHN0YXJ0ID0gMDtcbiAgICAgIGxldCBsZW5ndGggPSBfc3RhY2tlZCA/IHRoaXMuYXBwbHlTdGFjayh2U2NhbGUsIHBhcnNlZCwgX3N0YWNrZWQpIDogdmFsdWU7XG4gICAgICBsZXQgaGVhZCwgc2l6ZTtcbiAgICAgIGlmIChsZW5ndGggIT09IHZhbHVlKSB7XG4gICAgICAgIHN0YXJ0ID0gbGVuZ3RoIC0gdmFsdWU7XG4gICAgICAgIGxlbmd0aCA9IHZhbHVlO1xuICAgICAgfVxuICAgICAgaWYgKGZsb2F0aW5nKSB7XG4gICAgICAgIHZhbHVlID0gY3VzdG9tLmJhclN0YXJ0O1xuICAgICAgICBsZW5ndGggPSBjdXN0b20uYmFyRW5kIC0gY3VzdG9tLmJhclN0YXJ0O1xuICAgICAgICBpZiAodmFsdWUgIT09IDAgJiYgc2lnbih2YWx1ZSkgIT09IHNpZ24oY3VzdG9tLmJhckVuZCkpIHtcbiAgICAgICAgICBzdGFydCA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgc3RhcnQgKz0gdmFsdWU7XG4gICAgICB9XG4gICAgICBjb25zdCBzdGFydFZhbHVlID0gIWlzTnVsbE9yVW5kZWYoYmFzZVZhbHVlKSAmJiAhZmxvYXRpbmcgPyBiYXNlVmFsdWUgOiBzdGFydDtcbiAgICAgIGxldCBiYXNlID0gdlNjYWxlLmdldFBpeGVsRm9yVmFsdWUoc3RhcnRWYWx1ZSk7XG4gICAgICBpZiAodGhpcy5jaGFydC5nZXREYXRhVmlzaWJpbGl0eShpbmRleCkpIHtcbiAgICAgICAgaGVhZCA9IHZTY2FsZS5nZXRQaXhlbEZvclZhbHVlKHN0YXJ0ICsgbGVuZ3RoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhlYWQgPSBiYXNlO1xuICAgICAgfVxuICAgICAgc2l6ZSA9IGhlYWQgLSBiYXNlO1xuICAgICAgaWYgKE1hdGguYWJzKHNpemUpIDwgbWluQmFyTGVuZ3RoKSB7XG4gICAgICAgIHNpemUgPSBiYXJTaWduKHNpemUsIHZTY2FsZSwgYWN0dWFsQmFzZSkgKiBtaW5CYXJMZW5ndGg7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gYWN0dWFsQmFzZSkge1xuICAgICAgICAgIGJhc2UgLT0gc2l6ZSAvIDI7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3RhcnRQaXhlbCA9IHZTY2FsZS5nZXRQaXhlbEZvckRlY2ltYWwoMCk7XG4gICAgICAgIGNvbnN0IGVuZFBpeGVsID0gdlNjYWxlLmdldFBpeGVsRm9yRGVjaW1hbCgxKTtcbiAgICAgICAgY29uc3QgbWluID0gTWF0aC5taW4oc3RhcnRQaXhlbCwgZW5kUGl4ZWwpO1xuICAgICAgICBjb25zdCBtYXggPSBNYXRoLm1heChzdGFydFBpeGVsLCBlbmRQaXhlbCk7XG4gICAgICAgIGJhc2UgPSBNYXRoLm1heChNYXRoLm1pbihiYXNlLCBtYXgpLCBtaW4pO1xuICAgICAgICBoZWFkID0gYmFzZSArIHNpemU7XG4gICAgICAgIGlmIChfc3RhY2tlZCAmJiAhZmxvYXRpbmcpIHtcbiAgICAgICAgICBwYXJzZWQuX3N0YWNrc1t2U2NhbGUuYXhpc10uX3Zpc3VhbFZhbHVlc1tkYXRhc2V0SW5kZXhdID0gdlNjYWxlLmdldFZhbHVlRm9yUGl4ZWwoaGVhZCkgLSB2U2NhbGUuZ2V0VmFsdWVGb3JQaXhlbChiYXNlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGJhc2UgPT09IHZTY2FsZS5nZXRQaXhlbEZvclZhbHVlKGFjdHVhbEJhc2UpKSB7XG4gICAgICAgIGNvbnN0IGhhbGZHcmlkID0gc2lnbihzaXplKSAqIHZTY2FsZS5nZXRMaW5lV2lkdGhGb3JWYWx1ZShhY3R1YWxCYXNlKSAvIDI7XG4gICAgICAgIGJhc2UgKz0gaGFsZkdyaWQ7XG4gICAgICAgIHNpemUgLT0gaGFsZkdyaWQ7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzaXplLFxuICAgICAgICBiYXNlLFxuICAgICAgICBoZWFkLFxuICAgICAgICBjZW50ZXI6IGhlYWQgKyBzaXplIC8gMlxuICAgICAgfTtcbiAgICB9XG4gICAgX2NhbGN1bGF0ZUJhckluZGV4UGl4ZWxzKGluZGV4LCBydWxlcikge1xuICAgICAgY29uc3Qgc2NhbGUgPSBydWxlci5zY2FsZTtcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgICBjb25zdCBza2lwTnVsbCA9IG9wdGlvbnMuc2tpcE51bGw7XG4gICAgICBjb25zdCBtYXhCYXJUaGlja25lc3MgPSB2YWx1ZU9yRGVmYXVsdChvcHRpb25zLm1heEJhclRoaWNrbmVzcywgSW5maW5pdHkpO1xuICAgICAgbGV0IGNlbnRlciwgc2l6ZTtcbiAgICAgIGNvbnN0IGF4aXNDb3VudCA9IHRoaXMuX2dldEF4aXNDb3VudCgpO1xuICAgICAgaWYgKHJ1bGVyLmdyb3VwZWQpIHtcbiAgICAgICAgY29uc3Qgc3RhY2tDb3VudCA9IHNraXBOdWxsID8gdGhpcy5fZ2V0U3RhY2tDb3VudChpbmRleCkgOiBydWxlci5zdGFja0NvdW50O1xuICAgICAgICBjb25zdCByYW5nZSA9IG9wdGlvbnMuYmFyVGhpY2tuZXNzID09PSAnZmxleCcgPyBjb21wdXRlRmxleENhdGVnb3J5VHJhaXRzKGluZGV4LCBydWxlciwgb3B0aW9ucywgc3RhY2tDb3VudCAqIGF4aXNDb3VudCkgOiBjb21wdXRlRml0Q2F0ZWdvcnlUcmFpdHMoaW5kZXgsIHJ1bGVyLCBvcHRpb25zLCBzdGFja0NvdW50ICogYXhpc0NvdW50KTtcbiAgICAgICAgY29uc3QgYXhpc0lEID0gdGhpcy5jaGFydC5vcHRpb25zLmluZGV4QXhpcyA9PT0gJ3gnID8gdGhpcy5nZXREYXRhc2V0KCkueEF4aXNJRCA6IHRoaXMuZ2V0RGF0YXNldCgpLnlBeGlzSUQ7XG4gICAgICAgIGNvbnN0IGF4aXNOdW1iZXIgPSB0aGlzLl9nZXRBeGlzKCkuaW5kZXhPZih2YWx1ZU9yRGVmYXVsdChheGlzSUQsIHRoaXMuZ2V0Rmlyc3RTY2FsZUlkRm9ySW5kZXhBeGlzKCkpKTtcbiAgICAgICAgY29uc3Qgc3RhY2tJbmRleCA9IHRoaXMuX2dldFN0YWNrSW5kZXgodGhpcy5pbmRleCwgdGhpcy5fY2FjaGVkTWV0YS5zdGFjaywgc2tpcE51bGwgPyBpbmRleCA6IHVuZGVmaW5lZCkgKyBheGlzTnVtYmVyO1xuICAgICAgICBjZW50ZXIgPSByYW5nZS5zdGFydCArIHJhbmdlLmNodW5rICogc3RhY2tJbmRleCArIHJhbmdlLmNodW5rIC8gMjtcbiAgICAgICAgc2l6ZSA9IE1hdGgubWluKG1heEJhclRoaWNrbmVzcywgcmFuZ2UuY2h1bmsgKiByYW5nZS5yYXRpbyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjZW50ZXIgPSBzY2FsZS5nZXRQaXhlbEZvclZhbHVlKHRoaXMuZ2V0UGFyc2VkKGluZGV4KVtzY2FsZS5heGlzXSwgaW5kZXgpO1xuICAgICAgICBzaXplID0gTWF0aC5taW4obWF4QmFyVGhpY2tuZXNzLCBydWxlci5taW4gKiBydWxlci5yYXRpbyk7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBiYXNlOiBjZW50ZXIgLSBzaXplIC8gMixcbiAgICAgICAgaGVhZDogY2VudGVyICsgc2l6ZSAvIDIsXG4gICAgICAgIGNlbnRlcixcbiAgICAgICAgc2l6ZVxuICAgICAgfTtcbiAgICB9XG4gICAgZHJhdygpIHtcbiAgICAgIGNvbnN0IG1ldGEgPSB0aGlzLl9jYWNoZWRNZXRhO1xuICAgICAgY29uc3QgdlNjYWxlID0gbWV0YS52U2NhbGU7XG4gICAgICBjb25zdCByZWN0cyA9IG1ldGEuZGF0YTtcbiAgICAgIGNvbnN0IGlsZW4gPSByZWN0cy5sZW5ndGg7XG4gICAgICBsZXQgaSA9IDA7XG4gICAgICBmb3IgKDsgaSA8IGlsZW47ICsraSkge1xuICAgICAgICBpZiAodGhpcy5nZXRQYXJzZWQoaSlbdlNjYWxlLmF4aXNdICE9PSBudWxsICYmICFyZWN0c1tpXS5oaWRkZW4pIHtcbiAgICAgICAgICByZWN0c1tpXS5kcmF3KHRoaXMuX2N0eCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIEJhckNvbnRyb2xsZXI7XG59KSgpO1xubGV0IEJ1YmJsZUNvbnRyb2xsZXIgPSAvKiNfX1BVUkVfXyovKCgpID0+IHtcbiAgY2xhc3MgQnViYmxlQ29udHJvbGxlciBleHRlbmRzIERhdGFzZXRDb250cm9sbGVyIHtcbiAgICBzdGF0aWMgaWQgPSAnYnViYmxlJztcbiAgICBzdGF0aWMgZGVmYXVsdHMgPSB7XG4gICAgICBkYXRhc2V0RWxlbWVudFR5cGU6IGZhbHNlLFxuICAgICAgZGF0YUVsZW1lbnRUeXBlOiAncG9pbnQnLFxuICAgICAgYW5pbWF0aW9uczoge1xuICAgICAgICBudW1iZXJzOiB7XG4gICAgICAgICAgdHlwZTogJ251bWJlcicsXG4gICAgICAgICAgcHJvcGVydGllczogWyd4JywgJ3knLCAnYm9yZGVyV2lkdGgnLCAncmFkaXVzJ11cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgc3RhdGljIG92ZXJyaWRlcyA9IHtcbiAgICAgIHNjYWxlczoge1xuICAgICAgICB4OiB7XG4gICAgICAgICAgdHlwZTogJ2xpbmVhcidcbiAgICAgICAgfSxcbiAgICAgICAgeToge1xuICAgICAgICAgIHR5cGU6ICdsaW5lYXInXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIGluaXRpYWxpemUoKSB7XG4gICAgICB0aGlzLmVuYWJsZU9wdGlvblNoYXJpbmcgPSB0cnVlO1xuICAgICAgc3VwZXIuaW5pdGlhbGl6ZSgpO1xuICAgIH1cbiAgICBwYXJzZVByaW1pdGl2ZURhdGEobWV0YSwgZGF0YSwgc3RhcnQsIGNvdW50KSB7XG4gICAgICBjb25zdCBwYXJzZWQgPSBzdXBlci5wYXJzZVByaW1pdGl2ZURhdGEobWV0YSwgZGF0YSwgc3RhcnQsIGNvdW50KTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFyc2VkLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHBhcnNlZFtpXS5fY3VzdG9tID0gdGhpcy5yZXNvbHZlRGF0YUVsZW1lbnRPcHRpb25zKGkgKyBzdGFydCkucmFkaXVzO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHBhcnNlZDtcbiAgICB9XG4gICAgcGFyc2VBcnJheURhdGEobWV0YSwgZGF0YSwgc3RhcnQsIGNvdW50KSB7XG4gICAgICBjb25zdCBwYXJzZWQgPSBzdXBlci5wYXJzZUFycmF5RGF0YShtZXRhLCBkYXRhLCBzdGFydCwgY291bnQpO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXJzZWQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgaXRlbSA9IGRhdGFbc3RhcnQgKyBpXTtcbiAgICAgICAgcGFyc2VkW2ldLl9jdXN0b20gPSB2YWx1ZU9yRGVmYXVsdChpdGVtWzJdLCB0aGlzLnJlc29sdmVEYXRhRWxlbWVudE9wdGlvbnMoaSArIHN0YXJ0KS5yYWRpdXMpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHBhcnNlZDtcbiAgICB9XG4gICAgcGFyc2VPYmplY3REYXRhKG1ldGEsIGRhdGEsIHN0YXJ0LCBjb3VudCkge1xuICAgICAgY29uc3QgcGFyc2VkID0gc3VwZXIucGFyc2VPYmplY3REYXRhKG1ldGEsIGRhdGEsIHN0YXJ0LCBjb3VudCk7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhcnNlZC5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBpdGVtID0gZGF0YVtzdGFydCArIGldO1xuICAgICAgICBwYXJzZWRbaV0uX2N1c3RvbSA9IHZhbHVlT3JEZWZhdWx0KGl0ZW0gJiYgaXRlbS5yICYmICtpdGVtLnIsIHRoaXMucmVzb2x2ZURhdGFFbGVtZW50T3B0aW9ucyhpICsgc3RhcnQpLnJhZGl1cyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcGFyc2VkO1xuICAgIH1cbiAgICBnZXRNYXhPdmVyZmxvdygpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLl9jYWNoZWRNZXRhLmRhdGE7XG4gICAgICBsZXQgbWF4ID0gMDtcbiAgICAgIGZvciAobGV0IGkgPSBkYXRhLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIG1heCA9IE1hdGgubWF4KG1heCwgZGF0YVtpXS5zaXplKHRoaXMucmVzb2x2ZURhdGFFbGVtZW50T3B0aW9ucyhpKSkgLyAyKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBtYXggPiAwICYmIG1heDtcbiAgICB9XG4gICAgZ2V0TGFiZWxBbmRWYWx1ZShpbmRleCkge1xuICAgICAgY29uc3QgbWV0YSA9IHRoaXMuX2NhY2hlZE1ldGE7XG4gICAgICBjb25zdCBsYWJlbHMgPSB0aGlzLmNoYXJ0LmRhdGEubGFiZWxzIHx8IFtdO1xuICAgICAgY29uc3Qge1xuICAgICAgICB4U2NhbGUsXG4gICAgICAgIHlTY2FsZVxuICAgICAgfSA9IG1ldGE7XG4gICAgICBjb25zdCBwYXJzZWQgPSB0aGlzLmdldFBhcnNlZChpbmRleCk7XG4gICAgICBjb25zdCB4ID0geFNjYWxlLmdldExhYmVsRm9yVmFsdWUocGFyc2VkLngpO1xuICAgICAgY29uc3QgeSA9IHlTY2FsZS5nZXRMYWJlbEZvclZhbHVlKHBhcnNlZC55KTtcbiAgICAgIGNvbnN0IHIgPSBwYXJzZWQuX2N1c3RvbTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGxhYmVsOiBsYWJlbHNbaW5kZXhdIHx8ICcnLFxuICAgICAgICB2YWx1ZTogJygnICsgeCArICcsICcgKyB5ICsgKHIgPyAnLCAnICsgciA6ICcnKSArICcpJ1xuICAgICAgfTtcbiAgICB9XG4gICAgdXBkYXRlKG1vZGUpIHtcbiAgICAgIGNvbnN0IHBvaW50cyA9IHRoaXMuX2NhY2hlZE1ldGEuZGF0YTtcbiAgICAgIHRoaXMudXBkYXRlRWxlbWVudHMocG9pbnRzLCAwLCBwb2ludHMubGVuZ3RoLCBtb2RlKTtcbiAgICB9XG4gICAgdXBkYXRlRWxlbWVudHMocG9pbnRzLCBzdGFydCwgY291bnQsIG1vZGUpIHtcbiAgICAgIGNvbnN0IHJlc2V0ID0gbW9kZSA9PT0gJ3Jlc2V0JztcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgaVNjYWxlLFxuICAgICAgICB2U2NhbGVcbiAgICAgIH0gPSB0aGlzLl9jYWNoZWRNZXRhO1xuICAgICAgY29uc3Qge1xuICAgICAgICBzaGFyZWRPcHRpb25zLFxuICAgICAgICBpbmNsdWRlT3B0aW9uc1xuICAgICAgfSA9IHRoaXMuX2dldFNoYXJlZE9wdGlvbnMoc3RhcnQsIG1vZGUpO1xuICAgICAgY29uc3QgaUF4aXMgPSBpU2NhbGUuYXhpcztcbiAgICAgIGNvbnN0IHZBeGlzID0gdlNjYWxlLmF4aXM7XG4gICAgICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPCBzdGFydCArIGNvdW50OyBpKyspIHtcbiAgICAgICAgY29uc3QgcG9pbnQgPSBwb2ludHNbaV07XG4gICAgICAgIGNvbnN0IHBhcnNlZCA9ICFyZXNldCAmJiB0aGlzLmdldFBhcnNlZChpKTtcbiAgICAgICAgY29uc3QgcHJvcGVydGllcyA9IHt9O1xuICAgICAgICBjb25zdCBpUGl4ZWwgPSBwcm9wZXJ0aWVzW2lBeGlzXSA9IHJlc2V0ID8gaVNjYWxlLmdldFBpeGVsRm9yRGVjaW1hbCgwLjUpIDogaVNjYWxlLmdldFBpeGVsRm9yVmFsdWUocGFyc2VkW2lBeGlzXSk7XG4gICAgICAgIGNvbnN0IHZQaXhlbCA9IHByb3BlcnRpZXNbdkF4aXNdID0gcmVzZXQgPyB2U2NhbGUuZ2V0QmFzZVBpeGVsKCkgOiB2U2NhbGUuZ2V0UGl4ZWxGb3JWYWx1ZShwYXJzZWRbdkF4aXNdKTtcbiAgICAgICAgcHJvcGVydGllcy5za2lwID0gaXNOYU4oaVBpeGVsKSB8fCBpc05hTih2UGl4ZWwpO1xuICAgICAgICBpZiAoaW5jbHVkZU9wdGlvbnMpIHtcbiAgICAgICAgICBwcm9wZXJ0aWVzLm9wdGlvbnMgPSBzaGFyZWRPcHRpb25zIHx8IHRoaXMucmVzb2x2ZURhdGFFbGVtZW50T3B0aW9ucyhpLCBwb2ludC5hY3RpdmUgPyAnYWN0aXZlJyA6IG1vZGUpO1xuICAgICAgICAgIGlmIChyZXNldCkge1xuICAgICAgICAgICAgcHJvcGVydGllcy5vcHRpb25zLnJhZGl1cyA9IDA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMudXBkYXRlRWxlbWVudChwb2ludCwgaSwgcHJvcGVydGllcywgbW9kZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJlc29sdmVEYXRhRWxlbWVudE9wdGlvbnMoaW5kZXgsIG1vZGUpIHtcbiAgICAgIGNvbnN0IHBhcnNlZCA9IHRoaXMuZ2V0UGFyc2VkKGluZGV4KTtcbiAgICAgIGxldCB2YWx1ZXMgPSBzdXBlci5yZXNvbHZlRGF0YUVsZW1lbnRPcHRpb25zKGluZGV4LCBtb2RlKTtcbiAgICAgIGlmICh2YWx1ZXMuJHNoYXJlZCkge1xuICAgICAgICB2YWx1ZXMgPSBPYmplY3QuYXNzaWduKHt9LCB2YWx1ZXMsIHtcbiAgICAgICAgICAkc2hhcmVkOiBmYWxzZVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJhZGl1cyA9IHZhbHVlcy5yYWRpdXM7XG4gICAgICBpZiAobW9kZSAhPT0gJ2FjdGl2ZScpIHtcbiAgICAgICAgdmFsdWVzLnJhZGl1cyA9IDA7XG4gICAgICB9XG4gICAgICB2YWx1ZXMucmFkaXVzICs9IHZhbHVlT3JEZWZhdWx0KHBhcnNlZCAmJiBwYXJzZWQuX2N1c3RvbSwgcmFkaXVzKTtcbiAgICAgIHJldHVybiB2YWx1ZXM7XG4gICAgfVxuICB9XG4gIHJldHVybiBCdWJibGVDb250cm9sbGVyO1xufSkoKTtcbmZ1bmN0aW9uIGdldFJhdGlvQW5kT2Zmc2V0KHJvdGF0aW9uLCBjaXJjdW1mZXJlbmNlLCBjdXRvdXQpIHtcbiAgbGV0IHJhdGlvWCA9IDE7XG4gIGxldCByYXRpb1kgPSAxO1xuICBsZXQgb2Zmc2V0WCA9IDA7XG4gIGxldCBvZmZzZXRZID0gMDtcbiAgaWYgKGNpcmN1bWZlcmVuY2UgPCBUQVUpIHtcbiAgICBjb25zdCBzdGFydEFuZ2xlID0gcm90YXRpb247XG4gICAgY29uc3QgZW5kQW5nbGUgPSBzdGFydEFuZ2xlICsgY2lyY3VtZmVyZW5jZTtcbiAgICBjb25zdCBzdGFydFggPSBNYXRoLmNvcyhzdGFydEFuZ2xlKTtcbiAgICBjb25zdCBzdGFydFkgPSBNYXRoLnNpbihzdGFydEFuZ2xlKTtcbiAgICBjb25zdCBlbmRYID0gTWF0aC5jb3MoZW5kQW5nbGUpO1xuICAgIGNvbnN0IGVuZFkgPSBNYXRoLnNpbihlbmRBbmdsZSk7XG4gICAgY29uc3QgY2FsY01heCA9IChhbmdsZSwgYSwgYikgPT4gX2FuZ2xlQmV0d2VlbihhbmdsZSwgc3RhcnRBbmdsZSwgZW5kQW5nbGUsIHRydWUpID8gMSA6IE1hdGgubWF4KGEsIGEgKiBjdXRvdXQsIGIsIGIgKiBjdXRvdXQpO1xuICAgIGNvbnN0IGNhbGNNaW4gPSAoYW5nbGUsIGEsIGIpID0+IF9hbmdsZUJldHdlZW4oYW5nbGUsIHN0YXJ0QW5nbGUsIGVuZEFuZ2xlLCB0cnVlKSA/IC0xIDogTWF0aC5taW4oYSwgYSAqIGN1dG91dCwgYiwgYiAqIGN1dG91dCk7XG4gICAgY29uc3QgbWF4WCA9IGNhbGNNYXgoMCwgc3RhcnRYLCBlbmRYKTtcbiAgICBjb25zdCBtYXhZID0gY2FsY01heChIQUxGX1BJLCBzdGFydFksIGVuZFkpO1xuICAgIGNvbnN0IG1pblggPSBjYWxjTWluKFBJLCBzdGFydFgsIGVuZFgpO1xuICAgIGNvbnN0IG1pblkgPSBjYWxjTWluKFBJICsgSEFMRl9QSSwgc3RhcnRZLCBlbmRZKTtcbiAgICByYXRpb1ggPSAobWF4WCAtIG1pblgpIC8gMjtcbiAgICByYXRpb1kgPSAobWF4WSAtIG1pblkpIC8gMjtcbiAgICBvZmZzZXRYID0gLShtYXhYICsgbWluWCkgLyAyO1xuICAgIG9mZnNldFkgPSAtKG1heFkgKyBtaW5ZKSAvIDI7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICByYXRpb1gsXG4gICAgcmF0aW9ZLFxuICAgIG9mZnNldFgsXG4gICAgb2Zmc2V0WVxuICB9O1xufVxubGV0IERvdWdobnV0Q29udHJvbGxlciA9IC8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICBjbGFzcyBEb3VnaG51dENvbnRyb2xsZXIgZXh0ZW5kcyBEYXRhc2V0Q29udHJvbGxlciB7XG4gICAgc3RhdGljIGlkID0gJ2RvdWdobnV0JztcbiAgICBzdGF0aWMgZGVmYXVsdHMgPSB7XG4gICAgICBkYXRhc2V0RWxlbWVudFR5cGU6IGZhbHNlLFxuICAgICAgZGF0YUVsZW1lbnRUeXBlOiAnYXJjJyxcbiAgICAgIGFuaW1hdGlvbjoge1xuICAgICAgICBhbmltYXRlUm90YXRlOiB0cnVlLFxuICAgICAgICBhbmltYXRlU2NhbGU6IGZhbHNlXG4gICAgICB9LFxuICAgICAgYW5pbWF0aW9uczoge1xuICAgICAgICBudW1iZXJzOiB7XG4gICAgICAgICAgdHlwZTogJ251bWJlcicsXG4gICAgICAgICAgcHJvcGVydGllczogWydjaXJjdW1mZXJlbmNlJywgJ2VuZEFuZ2xlJywgJ2lubmVyUmFkaXVzJywgJ291dGVyUmFkaXVzJywgJ3N0YXJ0QW5nbGUnLCAneCcsICd5JywgJ29mZnNldCcsICdib3JkZXJXaWR0aCcsICdzcGFjaW5nJ11cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGN1dG91dDogJzUwJScsXG4gICAgICByb3RhdGlvbjogMCxcbiAgICAgIGNpcmN1bWZlcmVuY2U6IDM2MCxcbiAgICAgIHJhZGl1czogJzEwMCUnLFxuICAgICAgc3BhY2luZzogMCxcbiAgICAgIGluZGV4QXhpczogJ3InXG4gICAgfTtcbiAgICBzdGF0aWMgZGVzY3JpcHRvcnMgPSB7XG4gICAgICBfc2NyaXB0YWJsZTogbmFtZSA9PiBuYW1lICE9PSAnc3BhY2luZycsXG4gICAgICBfaW5kZXhhYmxlOiBuYW1lID0+IG5hbWUgIT09ICdzcGFjaW5nJyAmJiAhbmFtZS5zdGFydHNXaXRoKCdib3JkZXJEYXNoJykgJiYgIW5hbWUuc3RhcnRzV2l0aCgnaG92ZXJCb3JkZXJEYXNoJylcbiAgICB9O1xuICAgIHN0YXRpYyBvdmVycmlkZXMgPSB7XG4gICAgICBhc3BlY3RSYXRpbzogMSxcbiAgICAgIHBsdWdpbnM6IHtcbiAgICAgICAgbGVnZW5kOiB7XG4gICAgICAgICAgbGFiZWxzOiB7XG4gICAgICAgICAgICBnZW5lcmF0ZUxhYmVscyhjaGFydCkge1xuICAgICAgICAgICAgICBjb25zdCBkYXRhID0gY2hhcnQuZGF0YTtcbiAgICAgICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgICAgIGxhYmVsczoge1xuICAgICAgICAgICAgICAgICAgcG9pbnRTdHlsZSxcbiAgICAgICAgICAgICAgICAgIHRleHRBbGlnbixcbiAgICAgICAgICAgICAgICAgIGNvbG9yLFxuICAgICAgICAgICAgICAgICAgdXNlQm9yZGVyUmFkaXVzLFxuICAgICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9ID0gY2hhcnQubGVnZW5kLm9wdGlvbnM7XG4gICAgICAgICAgICAgIGlmIChkYXRhLmxhYmVscy5sZW5ndGggJiYgZGF0YS5kYXRhc2V0cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGF0YS5sYWJlbHMubWFwKChsYWJlbCwgaSkgPT4ge1xuICAgICAgICAgICAgICAgICAgY29uc3QgbWV0YSA9IGNoYXJ0LmdldERhdGFzZXRNZXRhKDApO1xuICAgICAgICAgICAgICAgICAgY29uc3Qgc3R5bGUgPSBtZXRhLmNvbnRyb2xsZXIuZ2V0U3R5bGUoaSk7XG4gICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICB0ZXh0OiBsYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgZmlsbFN0eWxlOiBzdHlsZS5iYWNrZ3JvdW5kQ29sb3IsXG4gICAgICAgICAgICAgICAgICAgIGZvbnRDb2xvcjogY29sb3IsXG4gICAgICAgICAgICAgICAgICAgIGhpZGRlbjogIWNoYXJ0LmdldERhdGFWaXNpYmlsaXR5KGkpLFxuICAgICAgICAgICAgICAgICAgICBsaW5lRGFzaDogc3R5bGUuYm9yZGVyRGFzaCxcbiAgICAgICAgICAgICAgICAgICAgbGluZURhc2hPZmZzZXQ6IHN0eWxlLmJvcmRlckRhc2hPZmZzZXQsXG4gICAgICAgICAgICAgICAgICAgIGxpbmVKb2luOiBzdHlsZS5ib3JkZXJKb2luU3R5bGUsXG4gICAgICAgICAgICAgICAgICAgIGxpbmVXaWR0aDogc3R5bGUuYm9yZGVyV2lkdGgsXG4gICAgICAgICAgICAgICAgICAgIHN0cm9rZVN0eWxlOiBzdHlsZS5ib3JkZXJDb2xvcixcbiAgICAgICAgICAgICAgICAgICAgdGV4dEFsaWduOiB0ZXh0QWxpZ24sXG4gICAgICAgICAgICAgICAgICAgIHBvaW50U3R5bGU6IHBvaW50U3R5bGUsXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogdXNlQm9yZGVyUmFkaXVzICYmIChib3JkZXJSYWRpdXMgfHwgc3R5bGUuYm9yZGVyUmFkaXVzKSxcbiAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGlcbiAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgb25DbGljayhlLCBsZWdlbmRJdGVtLCBsZWdlbmQpIHtcbiAgICAgICAgICAgIGxlZ2VuZC5jaGFydC50b2dnbGVEYXRhVmlzaWJpbGl0eShsZWdlbmRJdGVtLmluZGV4KTtcbiAgICAgICAgICAgIGxlZ2VuZC5jaGFydC51cGRhdGUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0cnVjdG9yKGNoYXJ0LCBkYXRhc2V0SW5kZXgpIHtcbiAgICAgIHN1cGVyKGNoYXJ0LCBkYXRhc2V0SW5kZXgpO1xuICAgICAgdGhpcy5lbmFibGVPcHRpb25TaGFyaW5nID0gdHJ1ZTtcbiAgICAgIHRoaXMuaW5uZXJSYWRpdXMgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLm91dGVyUmFkaXVzID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5vZmZzZXRYID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5vZmZzZXRZID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBsaW5rU2NhbGVzKCkge31cbiAgICBwYXJzZShzdGFydCwgY291bnQpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmdldERhdGFzZXQoKS5kYXRhO1xuICAgICAgY29uc3QgbWV0YSA9IHRoaXMuX2NhY2hlZE1ldGE7XG4gICAgICBpZiAodGhpcy5fcGFyc2luZyA9PT0gZmFsc2UpIHtcbiAgICAgICAgbWV0YS5fcGFyc2VkID0gZGF0YTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBnZXR0ZXIgPSBpID0+ICtkYXRhW2ldO1xuICAgICAgICBpZiAoaXNPYmplY3QoZGF0YVtzdGFydF0pKSB7XG4gICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAga2V5ID0gJ3ZhbHVlJ1xuICAgICAgICAgIH0gPSB0aGlzLl9wYXJzaW5nO1xuICAgICAgICAgIGdldHRlciA9IGkgPT4gK3Jlc29sdmVPYmplY3RLZXkoZGF0YVtpXSwga2V5KTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgaSwgaWxlbjtcbiAgICAgICAgZm9yIChpID0gc3RhcnQsIGlsZW4gPSBzdGFydCArIGNvdW50OyBpIDwgaWxlbjsgKytpKSB7XG4gICAgICAgICAgbWV0YS5fcGFyc2VkW2ldID0gZ2V0dGVyKGkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIF9nZXRSb3RhdGlvbigpIHtcbiAgICAgIHJldHVybiB0b1JhZGlhbnModGhpcy5vcHRpb25zLnJvdGF0aW9uIC0gOTApO1xuICAgIH1cbiAgICBfZ2V0Q2lyY3VtZmVyZW5jZSgpIHtcbiAgICAgIHJldHVybiB0b1JhZGlhbnModGhpcy5vcHRpb25zLmNpcmN1bWZlcmVuY2UpO1xuICAgIH1cbiAgICBfZ2V0Um90YXRpb25FeHRlbnRzKCkge1xuICAgICAgbGV0IG1pbiA9IFRBVTtcbiAgICAgIGxldCBtYXggPSAtVEFVO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNoYXJ0LmRhdGEuZGF0YXNldHMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKHRoaXMuY2hhcnQuaXNEYXRhc2V0VmlzaWJsZShpKSAmJiB0aGlzLmNoYXJ0LmdldERhdGFzZXRNZXRhKGkpLnR5cGUgPT09IHRoaXMuX3R5cGUpIHtcbiAgICAgICAgICBjb25zdCBjb250cm9sbGVyID0gdGhpcy5jaGFydC5nZXREYXRhc2V0TWV0YShpKS5jb250cm9sbGVyO1xuICAgICAgICAgIGNvbnN0IHJvdGF0aW9uID0gY29udHJvbGxlci5fZ2V0Um90YXRpb24oKTtcbiAgICAgICAgICBjb25zdCBjaXJjdW1mZXJlbmNlID0gY29udHJvbGxlci5fZ2V0Q2lyY3VtZmVyZW5jZSgpO1xuICAgICAgICAgIG1pbiA9IE1hdGgubWluKG1pbiwgcm90YXRpb24pO1xuICAgICAgICAgIG1heCA9IE1hdGgubWF4KG1heCwgcm90YXRpb24gKyBjaXJjdW1mZXJlbmNlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcm90YXRpb246IG1pbixcbiAgICAgICAgY2lyY3VtZmVyZW5jZTogbWF4IC0gbWluXG4gICAgICB9O1xuICAgIH1cbiAgICB1cGRhdGUobW9kZSkge1xuICAgICAgY29uc3QgY2hhcnQgPSB0aGlzLmNoYXJ0O1xuICAgICAgY29uc3Qge1xuICAgICAgICBjaGFydEFyZWFcbiAgICAgIH0gPSBjaGFydDtcbiAgICAgIGNvbnN0IG1ldGEgPSB0aGlzLl9jYWNoZWRNZXRhO1xuICAgICAgY29uc3QgYXJjcyA9IG1ldGEuZGF0YTtcbiAgICAgIGNvbnN0IHNwYWNpbmcgPSB0aGlzLmdldE1heEJvcmRlcldpZHRoKCkgKyB0aGlzLmdldE1heE9mZnNldChhcmNzKSArIHRoaXMub3B0aW9ucy5zcGFjaW5nO1xuICAgICAgY29uc3QgbWF4U2l6ZSA9IE1hdGgubWF4KChNYXRoLm1pbihjaGFydEFyZWEud2lkdGgsIGNoYXJ0QXJlYS5oZWlnaHQpIC0gc3BhY2luZykgLyAyLCAwKTtcbiAgICAgIGNvbnN0IGN1dG91dCA9IE1hdGgubWluKHRvUGVyY2VudGFnZSh0aGlzLm9wdGlvbnMuY3V0b3V0LCBtYXhTaXplKSwgMSk7XG4gICAgICBjb25zdCBjaGFydFdlaWdodCA9IHRoaXMuX2dldFJpbmdXZWlnaHQodGhpcy5pbmRleCk7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGNpcmN1bWZlcmVuY2UsXG4gICAgICAgIHJvdGF0aW9uXG4gICAgICB9ID0gdGhpcy5fZ2V0Um90YXRpb25FeHRlbnRzKCk7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHJhdGlvWCxcbiAgICAgICAgcmF0aW9ZLFxuICAgICAgICBvZmZzZXRYLFxuICAgICAgICBvZmZzZXRZXG4gICAgICB9ID0gZ2V0UmF0aW9BbmRPZmZzZXQocm90YXRpb24sIGNpcmN1bWZlcmVuY2UsIGN1dG91dCk7XG4gICAgICBjb25zdCBtYXhXaWR0aCA9IChjaGFydEFyZWEud2lkdGggLSBzcGFjaW5nKSAvIHJhdGlvWDtcbiAgICAgIGNvbnN0IG1heEhlaWdodCA9IChjaGFydEFyZWEuaGVpZ2h0IC0gc3BhY2luZykgLyByYXRpb1k7XG4gICAgICBjb25zdCBtYXhSYWRpdXMgPSBNYXRoLm1heChNYXRoLm1pbihtYXhXaWR0aCwgbWF4SGVpZ2h0KSAvIDIsIDApO1xuICAgICAgY29uc3Qgb3V0ZXJSYWRpdXMgPSB0b0RpbWVuc2lvbih0aGlzLm9wdGlvbnMucmFkaXVzLCBtYXhSYWRpdXMpO1xuICAgICAgY29uc3QgaW5uZXJSYWRpdXMgPSBNYXRoLm1heChvdXRlclJhZGl1cyAqIGN1dG91dCwgMCk7XG4gICAgICBjb25zdCByYWRpdXNMZW5ndGggPSAob3V0ZXJSYWRpdXMgLSBpbm5lclJhZGl1cykgLyB0aGlzLl9nZXRWaXNpYmxlRGF0YXNldFdlaWdodFRvdGFsKCk7XG4gICAgICB0aGlzLm9mZnNldFggPSBvZmZzZXRYICogb3V0ZXJSYWRpdXM7XG4gICAgICB0aGlzLm9mZnNldFkgPSBvZmZzZXRZICogb3V0ZXJSYWRpdXM7XG4gICAgICBtZXRhLnRvdGFsID0gdGhpcy5jYWxjdWxhdGVUb3RhbCgpO1xuICAgICAgdGhpcy5vdXRlclJhZGl1cyA9IG91dGVyUmFkaXVzIC0gcmFkaXVzTGVuZ3RoICogdGhpcy5fZ2V0UmluZ1dlaWdodE9mZnNldCh0aGlzLmluZGV4KTtcbiAgICAgIHRoaXMuaW5uZXJSYWRpdXMgPSBNYXRoLm1heCh0aGlzLm91dGVyUmFkaXVzIC0gcmFkaXVzTGVuZ3RoICogY2hhcnRXZWlnaHQsIDApO1xuICAgICAgdGhpcy51cGRhdGVFbGVtZW50cyhhcmNzLCAwLCBhcmNzLmxlbmd0aCwgbW9kZSk7XG4gICAgfVxuICAgIF9jaXJjdW1mZXJlbmNlKGksIHJlc2V0KSB7XG4gICAgICBjb25zdCBvcHRzID0gdGhpcy5vcHRpb25zO1xuICAgICAgY29uc3QgbWV0YSA9IHRoaXMuX2NhY2hlZE1ldGE7XG4gICAgICBjb25zdCBjaXJjdW1mZXJlbmNlID0gdGhpcy5fZ2V0Q2lyY3VtZmVyZW5jZSgpO1xuICAgICAgaWYgKHJlc2V0ICYmIG9wdHMuYW5pbWF0aW9uLmFuaW1hdGVSb3RhdGUgfHwgIXRoaXMuY2hhcnQuZ2V0RGF0YVZpc2liaWxpdHkoaSkgfHwgbWV0YS5fcGFyc2VkW2ldID09PSBudWxsIHx8IG1ldGEuZGF0YVtpXS5oaWRkZW4pIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5jYWxjdWxhdGVDaXJjdW1mZXJlbmNlKG1ldGEuX3BhcnNlZFtpXSAqIGNpcmN1bWZlcmVuY2UgLyBUQVUpO1xuICAgIH1cbiAgICB1cGRhdGVFbGVtZW50cyhhcmNzLCBzdGFydCwgY291bnQsIG1vZGUpIHtcbiAgICAgIGNvbnN0IHJlc2V0ID0gbW9kZSA9PT0gJ3Jlc2V0JztcbiAgICAgIGNvbnN0IGNoYXJ0ID0gdGhpcy5jaGFydDtcbiAgICAgIGNvbnN0IGNoYXJ0QXJlYSA9IGNoYXJ0LmNoYXJ0QXJlYTtcbiAgICAgIGNvbnN0IG9wdHMgPSBjaGFydC5vcHRpb25zO1xuICAgICAgY29uc3QgYW5pbWF0aW9uT3B0cyA9IG9wdHMuYW5pbWF0aW9uO1xuICAgICAgY29uc3QgY2VudGVyWCA9IChjaGFydEFyZWEubGVmdCArIGNoYXJ0QXJlYS5yaWdodCkgLyAyO1xuICAgICAgY29uc3QgY2VudGVyWSA9IChjaGFydEFyZWEudG9wICsgY2hhcnRBcmVhLmJvdHRvbSkgLyAyO1xuICAgICAgY29uc3QgYW5pbWF0ZVNjYWxlID0gcmVzZXQgJiYgYW5pbWF0aW9uT3B0cy5hbmltYXRlU2NhbGU7XG4gICAgICBjb25zdCBpbm5lclJhZGl1cyA9IGFuaW1hdGVTY2FsZSA/IDAgOiB0aGlzLmlubmVyUmFkaXVzO1xuICAgICAgY29uc3Qgb3V0ZXJSYWRpdXMgPSBhbmltYXRlU2NhbGUgPyAwIDogdGhpcy5vdXRlclJhZGl1cztcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgc2hhcmVkT3B0aW9ucyxcbiAgICAgICAgaW5jbHVkZU9wdGlvbnNcbiAgICAgIH0gPSB0aGlzLl9nZXRTaGFyZWRPcHRpb25zKHN0YXJ0LCBtb2RlKTtcbiAgICAgIGxldCBzdGFydEFuZ2xlID0gdGhpcy5fZ2V0Um90YXRpb24oKTtcbiAgICAgIGxldCBpO1xuICAgICAgZm9yIChpID0gMDsgaSA8IHN0YXJ0OyArK2kpIHtcbiAgICAgICAgc3RhcnRBbmdsZSArPSB0aGlzLl9jaXJjdW1mZXJlbmNlKGksIHJlc2V0KTtcbiAgICAgIH1cbiAgICAgIGZvciAoaSA9IHN0YXJ0OyBpIDwgc3RhcnQgKyBjb3VudDsgKytpKSB7XG4gICAgICAgIGNvbnN0IGNpcmN1bWZlcmVuY2UgPSB0aGlzLl9jaXJjdW1mZXJlbmNlKGksIHJlc2V0KTtcbiAgICAgICAgY29uc3QgYXJjID0gYXJjc1tpXTtcbiAgICAgICAgY29uc3QgcHJvcGVydGllcyA9IHtcbiAgICAgICAgICB4OiBjZW50ZXJYICsgdGhpcy5vZmZzZXRYLFxuICAgICAgICAgIHk6IGNlbnRlclkgKyB0aGlzLm9mZnNldFksXG4gICAgICAgICAgc3RhcnRBbmdsZSxcbiAgICAgICAgICBlbmRBbmdsZTogc3RhcnRBbmdsZSArIGNpcmN1bWZlcmVuY2UsXG4gICAgICAgICAgY2lyY3VtZmVyZW5jZSxcbiAgICAgICAgICBvdXRlclJhZGl1cyxcbiAgICAgICAgICBpbm5lclJhZGl1c1xuICAgICAgICB9O1xuICAgICAgICBpZiAoaW5jbHVkZU9wdGlvbnMpIHtcbiAgICAgICAgICBwcm9wZXJ0aWVzLm9wdGlvbnMgPSBzaGFyZWRPcHRpb25zIHx8IHRoaXMucmVzb2x2ZURhdGFFbGVtZW50T3B0aW9ucyhpLCBhcmMuYWN0aXZlID8gJ2FjdGl2ZScgOiBtb2RlKTtcbiAgICAgICAgfVxuICAgICAgICBzdGFydEFuZ2xlICs9IGNpcmN1bWZlcmVuY2U7XG4gICAgICAgIHRoaXMudXBkYXRlRWxlbWVudChhcmMsIGksIHByb3BlcnRpZXMsIG1vZGUpO1xuICAgICAgfVxuICAgIH1cbiAgICBjYWxjdWxhdGVUb3RhbCgpIHtcbiAgICAgIGNvbnN0IG1ldGEgPSB0aGlzLl9jYWNoZWRNZXRhO1xuICAgICAgY29uc3QgbWV0YURhdGEgPSBtZXRhLmRhdGE7XG4gICAgICBsZXQgdG90YWwgPSAwO1xuICAgICAgbGV0IGk7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgbWV0YURhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBtZXRhLl9wYXJzZWRbaV07XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiAhaXNOYU4odmFsdWUpICYmIHRoaXMuY2hhcnQuZ2V0RGF0YVZpc2liaWxpdHkoaSkgJiYgIW1ldGFEYXRhW2ldLmhpZGRlbikge1xuICAgICAgICAgIHRvdGFsICs9IE1hdGguYWJzKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRvdGFsO1xuICAgIH1cbiAgICBjYWxjdWxhdGVDaXJjdW1mZXJlbmNlKHZhbHVlKSB7XG4gICAgICBjb25zdCB0b3RhbCA9IHRoaXMuX2NhY2hlZE1ldGEudG90YWw7XG4gICAgICBpZiAodG90YWwgPiAwICYmICFpc05hTih2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIFRBVSAqIChNYXRoLmFicyh2YWx1ZSkgLyB0b3RhbCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgZ2V0TGFiZWxBbmRWYWx1ZShpbmRleCkge1xuICAgICAgY29uc3QgbWV0YSA9IHRoaXMuX2NhY2hlZE1ldGE7XG4gICAgICBjb25zdCBjaGFydCA9IHRoaXMuY2hhcnQ7XG4gICAgICBjb25zdCBsYWJlbHMgPSBjaGFydC5kYXRhLmxhYmVscyB8fCBbXTtcbiAgICAgIGNvbnN0IHZhbHVlID0gZm9ybWF0TnVtYmVyKG1ldGEuX3BhcnNlZFtpbmRleF0sIGNoYXJ0Lm9wdGlvbnMubG9jYWxlKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGxhYmVsOiBsYWJlbHNbaW5kZXhdIHx8ICcnLFxuICAgICAgICB2YWx1ZVxuICAgICAgfTtcbiAgICB9XG4gICAgZ2V0TWF4Qm9yZGVyV2lkdGgoYXJjcykge1xuICAgICAgbGV0IG1heCA9IDA7XG4gICAgICBjb25zdCBjaGFydCA9IHRoaXMuY2hhcnQ7XG4gICAgICBsZXQgaSwgaWxlbiwgbWV0YSwgY29udHJvbGxlciwgb3B0aW9ucztcbiAgICAgIGlmICghYXJjcykge1xuICAgICAgICBmb3IgKGkgPSAwLCBpbGVuID0gY2hhcnQuZGF0YS5kYXRhc2V0cy5sZW5ndGg7IGkgPCBpbGVuOyArK2kpIHtcbiAgICAgICAgICBpZiAoY2hhcnQuaXNEYXRhc2V0VmlzaWJsZShpKSkge1xuICAgICAgICAgICAgbWV0YSA9IGNoYXJ0LmdldERhdGFzZXRNZXRhKGkpO1xuICAgICAgICAgICAgYXJjcyA9IG1ldGEuZGF0YTtcbiAgICAgICAgICAgIGNvbnRyb2xsZXIgPSBtZXRhLmNvbnRyb2xsZXI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghYXJjcykge1xuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH1cbiAgICAgIGZvciAoaSA9IDAsIGlsZW4gPSBhcmNzLmxlbmd0aDsgaSA8IGlsZW47ICsraSkge1xuICAgICAgICBvcHRpb25zID0gY29udHJvbGxlci5yZXNvbHZlRGF0YUVsZW1lbnRPcHRpb25zKGkpO1xuICAgICAgICBpZiAob3B0aW9ucy5ib3JkZXJBbGlnbiAhPT0gJ2lubmVyJykge1xuICAgICAgICAgIG1heCA9IE1hdGgubWF4KG1heCwgb3B0aW9ucy5ib3JkZXJXaWR0aCB8fCAwLCBvcHRpb25zLmhvdmVyQm9yZGVyV2lkdGggfHwgMCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBtYXg7XG4gICAgfVxuICAgIGdldE1heE9mZnNldChhcmNzKSB7XG4gICAgICBsZXQgbWF4ID0gMDtcbiAgICAgIGZvciAobGV0IGkgPSAwLCBpbGVuID0gYXJjcy5sZW5ndGg7IGkgPCBpbGVuOyArK2kpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMucmVzb2x2ZURhdGFFbGVtZW50T3B0aW9ucyhpKTtcbiAgICAgICAgbWF4ID0gTWF0aC5tYXgobWF4LCBvcHRpb25zLm9mZnNldCB8fCAwLCBvcHRpb25zLmhvdmVyT2Zmc2V0IHx8IDApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG1heDtcbiAgICB9XG4gICAgX2dldFJpbmdXZWlnaHRPZmZzZXQoZGF0YXNldEluZGV4KSB7XG4gICAgICBsZXQgcmluZ1dlaWdodE9mZnNldCA9IDA7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGFzZXRJbmRleDsgKytpKSB7XG4gICAgICAgIGlmICh0aGlzLmNoYXJ0LmlzRGF0YXNldFZpc2libGUoaSkpIHtcbiAgICAgICAgICByaW5nV2VpZ2h0T2Zmc2V0ICs9IHRoaXMuX2dldFJpbmdXZWlnaHQoaSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByaW5nV2VpZ2h0T2Zmc2V0O1xuICAgIH1cbiAgICBfZ2V0UmluZ1dlaWdodChkYXRhc2V0SW5kZXgpIHtcbiAgICAgIHJldHVybiBNYXRoLm1heCh2YWx1ZU9yRGVmYXVsdCh0aGlzLmNoYXJ0LmRhdGEuZGF0YXNldHNbZGF0YXNldEluZGV4XS53ZWlnaHQsIDEpLCAwKTtcbiAgICB9XG4gICAgX2dldFZpc2libGVEYXRhc2V0V2VpZ2h0VG90YWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZ2V0UmluZ1dlaWdodE9mZnNldCh0aGlzLmNoYXJ0LmRhdGEuZGF0YXNldHMubGVuZ3RoKSB8fCAxO1xuICAgIH1cbiAgfVxuICByZXR1cm4gRG91Z2hudXRDb250cm9sbGVyO1xufSkoKTtcbmxldCBMaW5lQ29udHJvbGxlciA9IC8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICBjbGFzcyBMaW5lQ29udHJvbGxlciBleHRlbmRzIERhdGFzZXRDb250cm9sbGVyIHtcbiAgICBzdGF0aWMgaWQgPSAnbGluZSc7XG4gICAgc3RhdGljIGRlZmF1bHRzID0ge1xuICAgICAgZGF0YXNldEVsZW1lbnRUeXBlOiAnbGluZScsXG4gICAgICBkYXRhRWxlbWVudFR5cGU6ICdwb2ludCcsXG4gICAgICBzaG93TGluZTogdHJ1ZSxcbiAgICAgIHNwYW5HYXBzOiBmYWxzZVxuICAgIH07XG4gICAgc3RhdGljIG92ZXJyaWRlcyA9IHtcbiAgICAgIHNjYWxlczoge1xuICAgICAgICBfaW5kZXhfOiB7XG4gICAgICAgICAgdHlwZTogJ2NhdGVnb3J5J1xuICAgICAgICB9LFxuICAgICAgICBfdmFsdWVfOiB7XG4gICAgICAgICAgdHlwZTogJ2xpbmVhcidcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgaW5pdGlhbGl6ZSgpIHtcbiAgICAgIHRoaXMuZW5hYmxlT3B0aW9uU2hhcmluZyA9IHRydWU7XG4gICAgICB0aGlzLnN1cHBvcnRzRGVjaW1hdGlvbiA9IHRydWU7XG4gICAgICBzdXBlci5pbml0aWFsaXplKCk7XG4gICAgfVxuICAgIHVwZGF0ZShtb2RlKSB7XG4gICAgICBjb25zdCBtZXRhID0gdGhpcy5fY2FjaGVkTWV0YTtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgZGF0YXNldDogbGluZSxcbiAgICAgICAgZGF0YTogcG9pbnRzID0gW10sXG4gICAgICAgIF9kYXRhc2V0XG4gICAgICB9ID0gbWV0YTtcbiAgICAgIGNvbnN0IGFuaW1hdGlvbnNEaXNhYmxlZCA9IHRoaXMuY2hhcnQuX2FuaW1hdGlvbnNEaXNhYmxlZDtcbiAgICAgIGxldCB7XG4gICAgICAgIHN0YXJ0LFxuICAgICAgICBjb3VudFxuICAgICAgfSA9IF9nZXRTdGFydEFuZENvdW50T2ZWaXNpYmxlUG9pbnRzKG1ldGEsIHBvaW50cywgYW5pbWF0aW9uc0Rpc2FibGVkKTtcbiAgICAgIHRoaXMuX2RyYXdTdGFydCA9IHN0YXJ0O1xuICAgICAgdGhpcy5fZHJhd0NvdW50ID0gY291bnQ7XG4gICAgICBpZiAoX3NjYWxlUmFuZ2VzQ2hhbmdlZChtZXRhKSkge1xuICAgICAgICBzdGFydCA9IDA7XG4gICAgICAgIGNvdW50ID0gcG9pbnRzLmxlbmd0aDtcbiAgICAgIH1cbiAgICAgIGxpbmUuX2NoYXJ0ID0gdGhpcy5jaGFydDtcbiAgICAgIGxpbmUuX2RhdGFzZXRJbmRleCA9IHRoaXMuaW5kZXg7XG4gICAgICBsaW5lLl9kZWNpbWF0ZWQgPSAhIV9kYXRhc2V0Ll9kZWNpbWF0ZWQ7XG4gICAgICBsaW5lLnBvaW50cyA9IHBvaW50cztcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLnJlc29sdmVEYXRhc2V0RWxlbWVudE9wdGlvbnMobW9kZSk7XG4gICAgICBpZiAoIXRoaXMub3B0aW9ucy5zaG93TGluZSkge1xuICAgICAgICBvcHRpb25zLmJvcmRlcldpZHRoID0gMDtcbiAgICAgIH1cbiAgICAgIG9wdGlvbnMuc2VnbWVudCA9IHRoaXMub3B0aW9ucy5zZWdtZW50O1xuICAgICAgdGhpcy51cGRhdGVFbGVtZW50KGxpbmUsIHVuZGVmaW5lZCwge1xuICAgICAgICBhbmltYXRlZDogIWFuaW1hdGlvbnNEaXNhYmxlZCxcbiAgICAgICAgb3B0aW9uc1xuICAgICAgfSwgbW9kZSk7XG4gICAgICB0aGlzLnVwZGF0ZUVsZW1lbnRzKHBvaW50cywgc3RhcnQsIGNvdW50LCBtb2RlKTtcbiAgICB9XG4gICAgdXBkYXRlRWxlbWVudHMocG9pbnRzLCBzdGFydCwgY291bnQsIG1vZGUpIHtcbiAgICAgIGNvbnN0IHJlc2V0ID0gbW9kZSA9PT0gJ3Jlc2V0JztcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgaVNjYWxlLFxuICAgICAgICB2U2NhbGUsXG4gICAgICAgIF9zdGFja2VkLFxuICAgICAgICBfZGF0YXNldFxuICAgICAgfSA9IHRoaXMuX2NhY2hlZE1ldGE7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHNoYXJlZE9wdGlvbnMsXG4gICAgICAgIGluY2x1ZGVPcHRpb25zXG4gICAgICB9ID0gdGhpcy5fZ2V0U2hhcmVkT3B0aW9ucyhzdGFydCwgbW9kZSk7XG4gICAgICBjb25zdCBpQXhpcyA9IGlTY2FsZS5heGlzO1xuICAgICAgY29uc3QgdkF4aXMgPSB2U2NhbGUuYXhpcztcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgc3BhbkdhcHMsXG4gICAgICAgIHNlZ21lbnRcbiAgICAgIH0gPSB0aGlzLm9wdGlvbnM7XG4gICAgICBjb25zdCBtYXhHYXBMZW5ndGggPSBpc051bWJlcihzcGFuR2FwcykgPyBzcGFuR2FwcyA6IE51bWJlci5QT1NJVElWRV9JTkZJTklUWTtcbiAgICAgIGNvbnN0IGRpcmVjdFVwZGF0ZSA9IHRoaXMuY2hhcnQuX2FuaW1hdGlvbnNEaXNhYmxlZCB8fCByZXNldCB8fCBtb2RlID09PSAnbm9uZSc7XG4gICAgICBjb25zdCBlbmQgPSBzdGFydCArIGNvdW50O1xuICAgICAgY29uc3QgcG9pbnRzQ291bnQgPSBwb2ludHMubGVuZ3RoO1xuICAgICAgbGV0IHByZXZQYXJzZWQgPSBzdGFydCA+IDAgJiYgdGhpcy5nZXRQYXJzZWQoc3RhcnQgLSAxKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG9pbnRzQ291bnQ7ICsraSkge1xuICAgICAgICBjb25zdCBwb2ludCA9IHBvaW50c1tpXTtcbiAgICAgICAgY29uc3QgcHJvcGVydGllcyA9IGRpcmVjdFVwZGF0ZSA/IHBvaW50IDoge307XG4gICAgICAgIGlmIChpIDwgc3RhcnQgfHwgaSA+PSBlbmQpIHtcbiAgICAgICAgICBwcm9wZXJ0aWVzLnNraXAgPSB0cnVlO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IHRoaXMuZ2V0UGFyc2VkKGkpO1xuICAgICAgICBjb25zdCBudWxsRGF0YSA9IGlzTnVsbE9yVW5kZWYocGFyc2VkW3ZBeGlzXSk7XG4gICAgICAgIGNvbnN0IGlQaXhlbCA9IHByb3BlcnRpZXNbaUF4aXNdID0gaVNjYWxlLmdldFBpeGVsRm9yVmFsdWUocGFyc2VkW2lBeGlzXSwgaSk7XG4gICAgICAgIGNvbnN0IHZQaXhlbCA9IHByb3BlcnRpZXNbdkF4aXNdID0gcmVzZXQgfHwgbnVsbERhdGEgPyB2U2NhbGUuZ2V0QmFzZVBpeGVsKCkgOiB2U2NhbGUuZ2V0UGl4ZWxGb3JWYWx1ZShfc3RhY2tlZCA/IHRoaXMuYXBwbHlTdGFjayh2U2NhbGUsIHBhcnNlZCwgX3N0YWNrZWQpIDogcGFyc2VkW3ZBeGlzXSwgaSk7XG4gICAgICAgIHByb3BlcnRpZXMuc2tpcCA9IGlzTmFOKGlQaXhlbCkgfHwgaXNOYU4odlBpeGVsKSB8fCBudWxsRGF0YTtcbiAgICAgICAgcHJvcGVydGllcy5zdG9wID0gaSA+IDAgJiYgTWF0aC5hYnMocGFyc2VkW2lBeGlzXSAtIHByZXZQYXJzZWRbaUF4aXNdKSA+IG1heEdhcExlbmd0aDtcbiAgICAgICAgaWYgKHNlZ21lbnQpIHtcbiAgICAgICAgICBwcm9wZXJ0aWVzLnBhcnNlZCA9IHBhcnNlZDtcbiAgICAgICAgICBwcm9wZXJ0aWVzLnJhdyA9IF9kYXRhc2V0LmRhdGFbaV07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGluY2x1ZGVPcHRpb25zKSB7XG4gICAgICAgICAgcHJvcGVydGllcy5vcHRpb25zID0gc2hhcmVkT3B0aW9ucyB8fCB0aGlzLnJlc29sdmVEYXRhRWxlbWVudE9wdGlvbnMoaSwgcG9pbnQuYWN0aXZlID8gJ2FjdGl2ZScgOiBtb2RlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWRpcmVjdFVwZGF0ZSkge1xuICAgICAgICAgIHRoaXMudXBkYXRlRWxlbWVudChwb2ludCwgaSwgcHJvcGVydGllcywgbW9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgcHJldlBhcnNlZCA9IHBhcnNlZDtcbiAgICAgIH1cbiAgICB9XG4gICAgZ2V0TWF4T3ZlcmZsb3coKSB7XG4gICAgICBjb25zdCBtZXRhID0gdGhpcy5fY2FjaGVkTWV0YTtcbiAgICAgIGNvbnN0IGRhdGFzZXQgPSBtZXRhLmRhdGFzZXQ7XG4gICAgICBjb25zdCBib3JkZXIgPSBkYXRhc2V0Lm9wdGlvbnMgJiYgZGF0YXNldC5vcHRpb25zLmJvcmRlcldpZHRoIHx8IDA7XG4gICAgICBjb25zdCBkYXRhID0gbWV0YS5kYXRhIHx8IFtdO1xuICAgICAgaWYgKCFkYXRhLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gYm9yZGVyO1xuICAgICAgfVxuICAgICAgY29uc3QgZmlyc3RQb2ludCA9IGRhdGFbMF0uc2l6ZSh0aGlzLnJlc29sdmVEYXRhRWxlbWVudE9wdGlvbnMoMCkpO1xuICAgICAgY29uc3QgbGFzdFBvaW50ID0gZGF0YVtkYXRhLmxlbmd0aCAtIDFdLnNpemUodGhpcy5yZXNvbHZlRGF0YUVsZW1lbnRPcHRpb25zKGRhdGEubGVuZ3RoIC0gMSkpO1xuICAgICAgcmV0dXJuIE1hdGgubWF4KGJvcmRlciwgZmlyc3RQb2ludCwgbGFzdFBvaW50KSAvIDI7XG4gICAgfVxuICAgIGRyYXcoKSB7XG4gICAgICBjb25zdCBtZXRhID0gdGhpcy5fY2FjaGVkTWV0YTtcbiAgICAgIG1ldGEuZGF0YXNldC51cGRhdGVDb250cm9sUG9pbnRzKHRoaXMuY2hhcnQuY2hhcnRBcmVhLCBtZXRhLmlTY2FsZS5heGlzKTtcbiAgICAgIHN1cGVyLmRyYXcoKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIExpbmVDb250cm9sbGVyO1xufSkoKTtcbmxldCBQb2xhckFyZWFDb250cm9sbGVyID0gLyojX19QVVJFX18qLygoKSA9PiB7XG4gIGNsYXNzIFBvbGFyQXJlYUNvbnRyb2xsZXIgZXh0ZW5kcyBEYXRhc2V0Q29udHJvbGxlciB7XG4gICAgc3RhdGljIGlkID0gJ3BvbGFyQXJlYSc7XG4gICAgc3RhdGljIGRlZmF1bHRzID0ge1xuICAgICAgZGF0YUVsZW1lbnRUeXBlOiAnYXJjJyxcbiAgICAgIGFuaW1hdGlvbjoge1xuICAgICAgICBhbmltYXRlUm90YXRlOiB0cnVlLFxuICAgICAgICBhbmltYXRlU2NhbGU6IHRydWVcbiAgICAgIH0sXG4gICAgICBhbmltYXRpb25zOiB7XG4gICAgICAgIG51bWJlcnM6IHtcbiAgICAgICAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiBbJ3gnLCAneScsICdzdGFydEFuZ2xlJywgJ2VuZEFuZ2xlJywgJ2lubmVyUmFkaXVzJywgJ291dGVyUmFkaXVzJ11cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGluZGV4QXhpczogJ3InLFxuICAgICAgc3RhcnRBbmdsZTogMFxuICAgIH07XG4gICAgc3RhdGljIG92ZXJyaWRlcyA9IHtcbiAgICAgIGFzcGVjdFJhdGlvOiAxLFxuICAgICAgcGx1Z2luczoge1xuICAgICAgICBsZWdlbmQ6IHtcbiAgICAgICAgICBsYWJlbHM6IHtcbiAgICAgICAgICAgIGdlbmVyYXRlTGFiZWxzKGNoYXJ0KSB7XG4gICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBjaGFydC5kYXRhO1xuICAgICAgICAgICAgICBpZiAoZGF0YS5sYWJlbHMubGVuZ3RoICYmIGRhdGEuZGF0YXNldHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgICAgICAgbGFiZWxzOiB7XG4gICAgICAgICAgICAgICAgICAgIHBvaW50U3R5bGUsXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSA9IGNoYXJ0LmxlZ2VuZC5vcHRpb25zO1xuICAgICAgICAgICAgICAgIHJldHVybiBkYXRhLmxhYmVscy5tYXAoKGxhYmVsLCBpKSA9PiB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBtZXRhID0gY2hhcnQuZ2V0RGF0YXNldE1ldGEoMCk7XG4gICAgICAgICAgICAgICAgICBjb25zdCBzdHlsZSA9IG1ldGEuY29udHJvbGxlci5nZXRTdHlsZShpKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHRleHQ6IGxhYmVsLFxuICAgICAgICAgICAgICAgICAgICBmaWxsU3R5bGU6IHN0eWxlLmJhY2tncm91bmRDb2xvcixcbiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlU3R5bGU6IHN0eWxlLmJvcmRlckNvbG9yLFxuICAgICAgICAgICAgICAgICAgICBmb250Q29sb3I6IGNvbG9yLFxuICAgICAgICAgICAgICAgICAgICBsaW5lV2lkdGg6IHN0eWxlLmJvcmRlcldpZHRoLFxuICAgICAgICAgICAgICAgICAgICBwb2ludFN0eWxlOiBwb2ludFN0eWxlLFxuICAgICAgICAgICAgICAgICAgICBoaWRkZW46ICFjaGFydC5nZXREYXRhVmlzaWJpbGl0eShpKSxcbiAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGlcbiAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgb25DbGljayhlLCBsZWdlbmRJdGVtLCBsZWdlbmQpIHtcbiAgICAgICAgICAgIGxlZ2VuZC5jaGFydC50b2dnbGVEYXRhVmlzaWJpbGl0eShsZWdlbmRJdGVtLmluZGV4KTtcbiAgICAgICAgICAgIGxlZ2VuZC5jaGFydC51cGRhdGUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBzY2FsZXM6IHtcbiAgICAgICAgcjoge1xuICAgICAgICAgIHR5cGU6ICdyYWRpYWxMaW5lYXInLFxuICAgICAgICAgIGFuZ2xlTGluZXM6IHtcbiAgICAgICAgICAgIGRpc3BsYXk6IGZhbHNlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBiZWdpbkF0WmVybzogdHJ1ZSxcbiAgICAgICAgICBncmlkOiB7XG4gICAgICAgICAgICBjaXJjdWxhcjogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgcG9pbnRMYWJlbHM6IHtcbiAgICAgICAgICAgIGRpc3BsYXk6IGZhbHNlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzdGFydEFuZ2xlOiAwXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0cnVjdG9yKGNoYXJ0LCBkYXRhc2V0SW5kZXgpIHtcbiAgICAgIHN1cGVyKGNoYXJ0LCBkYXRhc2V0SW5kZXgpO1xuICAgICAgdGhpcy5pbm5lclJhZGl1cyA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMub3V0ZXJSYWRpdXMgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGdldExhYmVsQW5kVmFsdWUoaW5kZXgpIHtcbiAgICAgIGNvbnN0IG1ldGEgPSB0aGlzLl9jYWNoZWRNZXRhO1xuICAgICAgY29uc3QgY2hhcnQgPSB0aGlzLmNoYXJ0O1xuICAgICAgY29uc3QgbGFiZWxzID0gY2hhcnQuZGF0YS5sYWJlbHMgfHwgW107XG4gICAgICBjb25zdCB2YWx1ZSA9IGZvcm1hdE51bWJlcihtZXRhLl9wYXJzZWRbaW5kZXhdLnIsIGNoYXJ0Lm9wdGlvbnMubG9jYWxlKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGxhYmVsOiBsYWJlbHNbaW5kZXhdIHx8ICcnLFxuICAgICAgICB2YWx1ZVxuICAgICAgfTtcbiAgICB9XG4gICAgcGFyc2VPYmplY3REYXRhKG1ldGEsIGRhdGEsIHN0YXJ0LCBjb3VudCkge1xuICAgICAgcmV0dXJuIF9wYXJzZU9iamVjdERhdGFSYWRpYWxTY2FsZS5iaW5kKHRoaXMpKG1ldGEsIGRhdGEsIHN0YXJ0LCBjb3VudCk7XG4gICAgfVxuICAgIHVwZGF0ZShtb2RlKSB7XG4gICAgICBjb25zdCBhcmNzID0gdGhpcy5fY2FjaGVkTWV0YS5kYXRhO1xuICAgICAgdGhpcy5fdXBkYXRlUmFkaXVzKCk7XG4gICAgICB0aGlzLnVwZGF0ZUVsZW1lbnRzKGFyY3MsIDAsIGFyY3MubGVuZ3RoLCBtb2RlKTtcbiAgICB9XG4gICAgZ2V0TWluTWF4KCkge1xuICAgICAgY29uc3QgbWV0YSA9IHRoaXMuX2NhY2hlZE1ldGE7XG4gICAgICBjb25zdCByYW5nZSA9IHtcbiAgICAgICAgbWluOiBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksXG4gICAgICAgIG1heDogTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZXG4gICAgICB9O1xuICAgICAgbWV0YS5kYXRhLmZvckVhY2goKGVsZW1lbnQsIGluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IHRoaXMuZ2V0UGFyc2VkKGluZGV4KS5yO1xuICAgICAgICBpZiAoIWlzTmFOKHBhcnNlZCkgJiYgdGhpcy5jaGFydC5nZXREYXRhVmlzaWJpbGl0eShpbmRleCkpIHtcbiAgICAgICAgICBpZiAocGFyc2VkIDwgcmFuZ2UubWluKSB7XG4gICAgICAgICAgICByYW5nZS5taW4gPSBwYXJzZWQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChwYXJzZWQgPiByYW5nZS5tYXgpIHtcbiAgICAgICAgICAgIHJhbmdlLm1heCA9IHBhcnNlZDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJhbmdlO1xuICAgIH1cbiAgICBfdXBkYXRlUmFkaXVzKCkge1xuICAgICAgY29uc3QgY2hhcnQgPSB0aGlzLmNoYXJ0O1xuICAgICAgY29uc3QgY2hhcnRBcmVhID0gY2hhcnQuY2hhcnRBcmVhO1xuICAgICAgY29uc3Qgb3B0cyA9IGNoYXJ0Lm9wdGlvbnM7XG4gICAgICBjb25zdCBtaW5TaXplID0gTWF0aC5taW4oY2hhcnRBcmVhLnJpZ2h0IC0gY2hhcnRBcmVhLmxlZnQsIGNoYXJ0QXJlYS5ib3R0b20gLSBjaGFydEFyZWEudG9wKTtcbiAgICAgIGNvbnN0IG91dGVyUmFkaXVzID0gTWF0aC5tYXgobWluU2l6ZSAvIDIsIDApO1xuICAgICAgY29uc3QgaW5uZXJSYWRpdXMgPSBNYXRoLm1heChvcHRzLmN1dG91dFBlcmNlbnRhZ2UgPyBvdXRlclJhZGl1cyAvIDEwMCAqIG9wdHMuY3V0b3V0UGVyY2VudGFnZSA6IDEsIDApO1xuICAgICAgY29uc3QgcmFkaXVzTGVuZ3RoID0gKG91dGVyUmFkaXVzIC0gaW5uZXJSYWRpdXMpIC8gY2hhcnQuZ2V0VmlzaWJsZURhdGFzZXRDb3VudCgpO1xuICAgICAgdGhpcy5vdXRlclJhZGl1cyA9IG91dGVyUmFkaXVzIC0gcmFkaXVzTGVuZ3RoICogdGhpcy5pbmRleDtcbiAgICAgIHRoaXMuaW5uZXJSYWRpdXMgPSB0aGlzLm91dGVyUmFkaXVzIC0gcmFkaXVzTGVuZ3RoO1xuICAgIH1cbiAgICB1cGRhdGVFbGVtZW50cyhhcmNzLCBzdGFydCwgY291bnQsIG1vZGUpIHtcbiAgICAgIGNvbnN0IHJlc2V0ID0gbW9kZSA9PT0gJ3Jlc2V0JztcbiAgICAgIGNvbnN0IGNoYXJ0ID0gdGhpcy5jaGFydDtcbiAgICAgIGNvbnN0IG9wdHMgPSBjaGFydC5vcHRpb25zO1xuICAgICAgY29uc3QgYW5pbWF0aW9uT3B0cyA9IG9wdHMuYW5pbWF0aW9uO1xuICAgICAgY29uc3Qgc2NhbGUgPSB0aGlzLl9jYWNoZWRNZXRhLnJTY2FsZTtcbiAgICAgIGNvbnN0IGNlbnRlclggPSBzY2FsZS54Q2VudGVyO1xuICAgICAgY29uc3QgY2VudGVyWSA9IHNjYWxlLnlDZW50ZXI7XG4gICAgICBjb25zdCBkYXRhc2V0U3RhcnRBbmdsZSA9IHNjYWxlLmdldEluZGV4QW5nbGUoMCkgLSAwLjUgKiBQSTtcbiAgICAgIGxldCBhbmdsZSA9IGRhdGFzZXRTdGFydEFuZ2xlO1xuICAgICAgbGV0IGk7XG4gICAgICBjb25zdCBkZWZhdWx0QW5nbGUgPSAzNjAgLyB0aGlzLmNvdW50VmlzaWJsZUVsZW1lbnRzKCk7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgc3RhcnQ7ICsraSkge1xuICAgICAgICBhbmdsZSArPSB0aGlzLl9jb21wdXRlQW5nbGUoaSwgbW9kZSwgZGVmYXVsdEFuZ2xlKTtcbiAgICAgIH1cbiAgICAgIGZvciAoaSA9IHN0YXJ0OyBpIDwgc3RhcnQgKyBjb3VudDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGFyYyA9IGFyY3NbaV07XG4gICAgICAgIGxldCBzdGFydEFuZ2xlID0gYW5nbGU7XG4gICAgICAgIGxldCBlbmRBbmdsZSA9IGFuZ2xlICsgdGhpcy5fY29tcHV0ZUFuZ2xlKGksIG1vZGUsIGRlZmF1bHRBbmdsZSk7XG4gICAgICAgIGxldCBvdXRlclJhZGl1cyA9IGNoYXJ0LmdldERhdGFWaXNpYmlsaXR5KGkpID8gc2NhbGUuZ2V0RGlzdGFuY2VGcm9tQ2VudGVyRm9yVmFsdWUodGhpcy5nZXRQYXJzZWQoaSkucikgOiAwO1xuICAgICAgICBhbmdsZSA9IGVuZEFuZ2xlO1xuICAgICAgICBpZiAocmVzZXQpIHtcbiAgICAgICAgICBpZiAoYW5pbWF0aW9uT3B0cy5hbmltYXRlU2NhbGUpIHtcbiAgICAgICAgICAgIG91dGVyUmFkaXVzID0gMDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGFuaW1hdGlvbk9wdHMuYW5pbWF0ZVJvdGF0ZSkge1xuICAgICAgICAgICAgc3RhcnRBbmdsZSA9IGVuZEFuZ2xlID0gZGF0YXNldFN0YXJ0QW5nbGU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHByb3BlcnRpZXMgPSB7XG4gICAgICAgICAgeDogY2VudGVyWCxcbiAgICAgICAgICB5OiBjZW50ZXJZLFxuICAgICAgICAgIGlubmVyUmFkaXVzOiAwLFxuICAgICAgICAgIG91dGVyUmFkaXVzLFxuICAgICAgICAgIHN0YXJ0QW5nbGUsXG4gICAgICAgICAgZW5kQW5nbGUsXG4gICAgICAgICAgb3B0aW9uczogdGhpcy5yZXNvbHZlRGF0YUVsZW1lbnRPcHRpb25zKGksIGFyYy5hY3RpdmUgPyAnYWN0aXZlJyA6IG1vZGUpXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMudXBkYXRlRWxlbWVudChhcmMsIGksIHByb3BlcnRpZXMsIG1vZGUpO1xuICAgICAgfVxuICAgIH1cbiAgICBjb3VudFZpc2libGVFbGVtZW50cygpIHtcbiAgICAgIGNvbnN0IG1ldGEgPSB0aGlzLl9jYWNoZWRNZXRhO1xuICAgICAgbGV0IGNvdW50ID0gMDtcbiAgICAgIG1ldGEuZGF0YS5mb3JFYWNoKChlbGVtZW50LCBpbmRleCkgPT4ge1xuICAgICAgICBpZiAoIWlzTmFOKHRoaXMuZ2V0UGFyc2VkKGluZGV4KS5yKSAmJiB0aGlzLmNoYXJ0LmdldERhdGFWaXNpYmlsaXR5KGluZGV4KSkge1xuICAgICAgICAgIGNvdW50Kys7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGNvdW50O1xuICAgIH1cbiAgICBfY29tcHV0ZUFuZ2xlKGluZGV4LCBtb2RlLCBkZWZhdWx0QW5nbGUpIHtcbiAgICAgIHJldHVybiB0aGlzLmNoYXJ0LmdldERhdGFWaXNpYmlsaXR5KGluZGV4KSA/IHRvUmFkaWFucyh0aGlzLnJlc29sdmVEYXRhRWxlbWVudE9wdGlvbnMoaW5kZXgsIG1vZGUpLmFuZ2xlIHx8IGRlZmF1bHRBbmdsZSkgOiAwO1xuICAgIH1cbiAgfVxuICByZXR1cm4gUG9sYXJBcmVhQ29udHJvbGxlcjtcbn0pKCk7XG5sZXQgUGllQ29udHJvbGxlciA9IC8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICBjbGFzcyBQaWVDb250cm9sbGVyIGV4dGVuZHMgRG91Z2hudXRDb250cm9sbGVyIHtcbiAgICBzdGF0aWMgaWQgPSAncGllJztcbiAgICBzdGF0aWMgZGVmYXVsdHMgPSB7XG4gICAgICBjdXRvdXQ6IDAsXG4gICAgICByb3RhdGlvbjogMCxcbiAgICAgIGNpcmN1bWZlcmVuY2U6IDM2MCxcbiAgICAgIHJhZGl1czogJzEwMCUnXG4gICAgfTtcbiAgfVxuICByZXR1cm4gUGllQ29udHJvbGxlcjtcbn0pKCk7XG5sZXQgUmFkYXJDb250cm9sbGVyID0gLyojX19QVVJFX18qLygoKSA9PiB7XG4gIGNsYXNzIFJhZGFyQ29udHJvbGxlciBleHRlbmRzIERhdGFzZXRDb250cm9sbGVyIHtcbiAgICBzdGF0aWMgaWQgPSAncmFkYXInO1xuICAgIHN0YXRpYyBkZWZhdWx0cyA9IHtcbiAgICAgIGRhdGFzZXRFbGVtZW50VHlwZTogJ2xpbmUnLFxuICAgICAgZGF0YUVsZW1lbnRUeXBlOiAncG9pbnQnLFxuICAgICAgaW5kZXhBeGlzOiAncicsXG4gICAgICBzaG93TGluZTogdHJ1ZSxcbiAgICAgIGVsZW1lbnRzOiB7XG4gICAgICAgIGxpbmU6IHtcbiAgICAgICAgICBmaWxsOiAnc3RhcnQnXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIHN0YXRpYyBvdmVycmlkZXMgPSB7XG4gICAgICBhc3BlY3RSYXRpbzogMSxcbiAgICAgIHNjYWxlczoge1xuICAgICAgICByOiB7XG4gICAgICAgICAgdHlwZTogJ3JhZGlhbExpbmVhcidcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgZ2V0TGFiZWxBbmRWYWx1ZShpbmRleCkge1xuICAgICAgY29uc3QgdlNjYWxlID0gdGhpcy5fY2FjaGVkTWV0YS52U2NhbGU7XG4gICAgICBjb25zdCBwYXJzZWQgPSB0aGlzLmdldFBhcnNlZChpbmRleCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBsYWJlbDogdlNjYWxlLmdldExhYmVscygpW2luZGV4XSxcbiAgICAgICAgdmFsdWU6ICcnICsgdlNjYWxlLmdldExhYmVsRm9yVmFsdWUocGFyc2VkW3ZTY2FsZS5heGlzXSlcbiAgICAgIH07XG4gICAgfVxuICAgIHBhcnNlT2JqZWN0RGF0YShtZXRhLCBkYXRhLCBzdGFydCwgY291bnQpIHtcbiAgICAgIHJldHVybiBfcGFyc2VPYmplY3REYXRhUmFkaWFsU2NhbGUuYmluZCh0aGlzKShtZXRhLCBkYXRhLCBzdGFydCwgY291bnQpO1xuICAgIH1cbiAgICB1cGRhdGUobW9kZSkge1xuICAgICAgY29uc3QgbWV0YSA9IHRoaXMuX2NhY2hlZE1ldGE7XG4gICAgICBjb25zdCBsaW5lID0gbWV0YS5kYXRhc2V0O1xuICAgICAgY29uc3QgcG9pbnRzID0gbWV0YS5kYXRhIHx8IFtdO1xuICAgICAgY29uc3QgbGFiZWxzID0gbWV0YS5pU2NhbGUuZ2V0TGFiZWxzKCk7XG4gICAgICBsaW5lLnBvaW50cyA9IHBvaW50cztcbiAgICAgIGlmIChtb2RlICE9PSAncmVzaXplJykge1xuICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5yZXNvbHZlRGF0YXNldEVsZW1lbnRPcHRpb25zKG1vZGUpO1xuICAgICAgICBpZiAoIXRoaXMub3B0aW9ucy5zaG93TGluZSkge1xuICAgICAgICAgIG9wdGlvbnMuYm9yZGVyV2lkdGggPSAwO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHByb3BlcnRpZXMgPSB7XG4gICAgICAgICAgX2xvb3A6IHRydWUsXG4gICAgICAgICAgX2Z1bGxMb29wOiBsYWJlbHMubGVuZ3RoID09PSBwb2ludHMubGVuZ3RoLFxuICAgICAgICAgIG9wdGlvbnNcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy51cGRhdGVFbGVtZW50KGxpbmUsIHVuZGVmaW5lZCwgcHJvcGVydGllcywgbW9kZSk7XG4gICAgICB9XG4gICAgICB0aGlzLnVwZGF0ZUVsZW1lbnRzKHBvaW50cywgMCwgcG9pbnRzLmxlbmd0aCwgbW9kZSk7XG4gICAgfVxuICAgIHVwZGF0ZUVsZW1lbnRzKHBvaW50cywgc3RhcnQsIGNvdW50LCBtb2RlKSB7XG4gICAgICBjb25zdCBzY2FsZSA9IHRoaXMuX2NhY2hlZE1ldGEuclNjYWxlO1xuICAgICAgY29uc3QgcmVzZXQgPSBtb2RlID09PSAncmVzZXQnO1xuICAgICAgZm9yIChsZXQgaSA9IHN0YXJ0OyBpIDwgc3RhcnQgKyBjb3VudDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHBvaW50ID0gcG9pbnRzW2ldO1xuICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5yZXNvbHZlRGF0YUVsZW1lbnRPcHRpb25zKGksIHBvaW50LmFjdGl2ZSA/ICdhY3RpdmUnIDogbW9kZSk7XG4gICAgICAgIGNvbnN0IHBvaW50UG9zaXRpb24gPSBzY2FsZS5nZXRQb2ludFBvc2l0aW9uRm9yVmFsdWUoaSwgdGhpcy5nZXRQYXJzZWQoaSkucik7XG4gICAgICAgIGNvbnN0IHggPSByZXNldCA/IHNjYWxlLnhDZW50ZXIgOiBwb2ludFBvc2l0aW9uLng7XG4gICAgICAgIGNvbnN0IHkgPSByZXNldCA/IHNjYWxlLnlDZW50ZXIgOiBwb2ludFBvc2l0aW9uLnk7XG4gICAgICAgIGNvbnN0IHByb3BlcnRpZXMgPSB7XG4gICAgICAgICAgeCxcbiAgICAgICAgICB5LFxuICAgICAgICAgIGFuZ2xlOiBwb2ludFBvc2l0aW9uLmFuZ2xlLFxuICAgICAgICAgIHNraXA6IGlzTmFOKHgpIHx8IGlzTmFOKHkpLFxuICAgICAgICAgIG9wdGlvbnNcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy51cGRhdGVFbGVtZW50KHBvaW50LCBpLCBwcm9wZXJ0aWVzLCBtb2RlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIFJhZGFyQ29udHJvbGxlcjtcbn0pKCk7XG5sZXQgU2NhdHRlckNvbnRyb2xsZXIgPSAvKiNfX1BVUkVfXyovKCgpID0+IHtcbiAgY2xhc3MgU2NhdHRlckNvbnRyb2xsZXIgZXh0ZW5kcyBEYXRhc2V0Q29udHJvbGxlciB7XG4gICAgc3RhdGljIGlkID0gJ3NjYXR0ZXInO1xuICAgIHN0YXRpYyBkZWZhdWx0cyA9IHtcbiAgICAgIGRhdGFzZXRFbGVtZW50VHlwZTogZmFsc2UsXG4gICAgICBkYXRhRWxlbWVudFR5cGU6ICdwb2ludCcsXG4gICAgICBzaG93TGluZTogZmFsc2UsXG4gICAgICBmaWxsOiBmYWxzZVxuICAgIH07XG4gICAgc3RhdGljIG92ZXJyaWRlcyA9IHtcbiAgICAgIGludGVyYWN0aW9uOiB7XG4gICAgICAgIG1vZGU6ICdwb2ludCdcbiAgICAgIH0sXG4gICAgICBzY2FsZXM6IHtcbiAgICAgICAgeDoge1xuICAgICAgICAgIHR5cGU6ICdsaW5lYXInXG4gICAgICAgIH0sXG4gICAgICAgIHk6IHtcbiAgICAgICAgICB0eXBlOiAnbGluZWFyJ1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICBnZXRMYWJlbEFuZFZhbHVlKGluZGV4KSB7XG4gICAgICBjb25zdCBtZXRhID0gdGhpcy5fY2FjaGVkTWV0YTtcbiAgICAgIGNvbnN0IGxhYmVscyA9IHRoaXMuY2hhcnQuZGF0YS5sYWJlbHMgfHwgW107XG4gICAgICBjb25zdCB7XG4gICAgICAgIHhTY2FsZSxcbiAgICAgICAgeVNjYWxlXG4gICAgICB9ID0gbWV0YTtcbiAgICAgIGNvbnN0IHBhcnNlZCA9IHRoaXMuZ2V0UGFyc2VkKGluZGV4KTtcbiAgICAgIGNvbnN0IHggPSB4U2NhbGUuZ2V0TGFiZWxGb3JWYWx1ZShwYXJzZWQueCk7XG4gICAgICBjb25zdCB5ID0geVNjYWxlLmdldExhYmVsRm9yVmFsdWUocGFyc2VkLnkpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbGFiZWw6IGxhYmVsc1tpbmRleF0gfHwgJycsXG4gICAgICAgIHZhbHVlOiAnKCcgKyB4ICsgJywgJyArIHkgKyAnKSdcbiAgICAgIH07XG4gICAgfVxuICAgIHVwZGF0ZShtb2RlKSB7XG4gICAgICBjb25zdCBtZXRhID0gdGhpcy5fY2FjaGVkTWV0YTtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgZGF0YTogcG9pbnRzID0gW11cbiAgICAgIH0gPSBtZXRhO1xuICAgICAgY29uc3QgYW5pbWF0aW9uc0Rpc2FibGVkID0gdGhpcy5jaGFydC5fYW5pbWF0aW9uc0Rpc2FibGVkO1xuICAgICAgbGV0IHtcbiAgICAgICAgc3RhcnQsXG4gICAgICAgIGNvdW50XG4gICAgICB9ID0gX2dldFN0YXJ0QW5kQ291bnRPZlZpc2libGVQb2ludHMobWV0YSwgcG9pbnRzLCBhbmltYXRpb25zRGlzYWJsZWQpO1xuICAgICAgdGhpcy5fZHJhd1N0YXJ0ID0gc3RhcnQ7XG4gICAgICB0aGlzLl9kcmF3Q291bnQgPSBjb3VudDtcbiAgICAgIGlmIChfc2NhbGVSYW5nZXNDaGFuZ2VkKG1ldGEpKSB7XG4gICAgICAgIHN0YXJ0ID0gMDtcbiAgICAgICAgY291bnQgPSBwb2ludHMubGVuZ3RoO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5zaG93TGluZSkge1xuICAgICAgICBpZiAoIXRoaXMuZGF0YXNldEVsZW1lbnRUeXBlKSB7XG4gICAgICAgICAgdGhpcy5hZGRFbGVtZW50cygpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICBkYXRhc2V0OiBsaW5lLFxuICAgICAgICAgIF9kYXRhc2V0XG4gICAgICAgIH0gPSBtZXRhO1xuICAgICAgICBsaW5lLl9jaGFydCA9IHRoaXMuY2hhcnQ7XG4gICAgICAgIGxpbmUuX2RhdGFzZXRJbmRleCA9IHRoaXMuaW5kZXg7XG4gICAgICAgIGxpbmUuX2RlY2ltYXRlZCA9ICEhX2RhdGFzZXQuX2RlY2ltYXRlZDtcbiAgICAgICAgbGluZS5wb2ludHMgPSBwb2ludHM7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLnJlc29sdmVEYXRhc2V0RWxlbWVudE9wdGlvbnMobW9kZSk7XG4gICAgICAgIG9wdGlvbnMuc2VnbWVudCA9IHRoaXMub3B0aW9ucy5zZWdtZW50O1xuICAgICAgICB0aGlzLnVwZGF0ZUVsZW1lbnQobGluZSwgdW5kZWZpbmVkLCB7XG4gICAgICAgICAgYW5pbWF0ZWQ6ICFhbmltYXRpb25zRGlzYWJsZWQsXG4gICAgICAgICAgb3B0aW9uc1xuICAgICAgICB9LCBtb2RlKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5kYXRhc2V0RWxlbWVudFR5cGUpIHtcbiAgICAgICAgZGVsZXRlIG1ldGEuZGF0YXNldDtcbiAgICAgICAgdGhpcy5kYXRhc2V0RWxlbWVudFR5cGUgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHRoaXMudXBkYXRlRWxlbWVudHMocG9pbnRzLCBzdGFydCwgY291bnQsIG1vZGUpO1xuICAgIH1cbiAgICBhZGRFbGVtZW50cygpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgc2hvd0xpbmVcbiAgICAgIH0gPSB0aGlzLm9wdGlvbnM7XG4gICAgICBpZiAoIXRoaXMuZGF0YXNldEVsZW1lbnRUeXBlICYmIHNob3dMaW5lKSB7XG4gICAgICAgIHRoaXMuZGF0YXNldEVsZW1lbnRUeXBlID0gdGhpcy5jaGFydC5yZWdpc3RyeS5nZXRFbGVtZW50KCdsaW5lJyk7XG4gICAgICB9XG4gICAgICBzdXBlci5hZGRFbGVtZW50cygpO1xuICAgIH1cbiAgICB1cGRhdGVFbGVtZW50cyhwb2ludHMsIHN0YXJ0LCBjb3VudCwgbW9kZSkge1xuICAgICAgY29uc3QgcmVzZXQgPSBtb2RlID09PSAncmVzZXQnO1xuICAgICAgY29uc3Qge1xuICAgICAgICBpU2NhbGUsXG4gICAgICAgIHZTY2FsZSxcbiAgICAgICAgX3N0YWNrZWQsXG4gICAgICAgIF9kYXRhc2V0XG4gICAgICB9ID0gdGhpcy5fY2FjaGVkTWV0YTtcbiAgICAgIGNvbnN0IGZpcnN0T3B0cyA9IHRoaXMucmVzb2x2ZURhdGFFbGVtZW50T3B0aW9ucyhzdGFydCwgbW9kZSk7XG4gICAgICBjb25zdCBzaGFyZWRPcHRpb25zID0gdGhpcy5nZXRTaGFyZWRPcHRpb25zKGZpcnN0T3B0cyk7XG4gICAgICBjb25zdCBpbmNsdWRlT3B0aW9ucyA9IHRoaXMuaW5jbHVkZU9wdGlvbnMobW9kZSwgc2hhcmVkT3B0aW9ucyk7XG4gICAgICBjb25zdCBpQXhpcyA9IGlTY2FsZS5heGlzO1xuICAgICAgY29uc3QgdkF4aXMgPSB2U2NhbGUuYXhpcztcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgc3BhbkdhcHMsXG4gICAgICAgIHNlZ21lbnRcbiAgICAgIH0gPSB0aGlzLm9wdGlvbnM7XG4gICAgICBjb25zdCBtYXhHYXBMZW5ndGggPSBpc051bWJlcihzcGFuR2FwcykgPyBzcGFuR2FwcyA6IE51bWJlci5QT1NJVElWRV9JTkZJTklUWTtcbiAgICAgIGNvbnN0IGRpcmVjdFVwZGF0ZSA9IHRoaXMuY2hhcnQuX2FuaW1hdGlvbnNEaXNhYmxlZCB8fCByZXNldCB8fCBtb2RlID09PSAnbm9uZSc7XG4gICAgICBsZXQgcHJldlBhcnNlZCA9IHN0YXJ0ID4gMCAmJiB0aGlzLmdldFBhcnNlZChzdGFydCAtIDEpO1xuICAgICAgZm9yIChsZXQgaSA9IHN0YXJ0OyBpIDwgc3RhcnQgKyBjb3VudDsgKytpKSB7XG4gICAgICAgIGNvbnN0IHBvaW50ID0gcG9pbnRzW2ldO1xuICAgICAgICBjb25zdCBwYXJzZWQgPSB0aGlzLmdldFBhcnNlZChpKTtcbiAgICAgICAgY29uc3QgcHJvcGVydGllcyA9IGRpcmVjdFVwZGF0ZSA/IHBvaW50IDoge307XG4gICAgICAgIGNvbnN0IG51bGxEYXRhID0gaXNOdWxsT3JVbmRlZihwYXJzZWRbdkF4aXNdKTtcbiAgICAgICAgY29uc3QgaVBpeGVsID0gcHJvcGVydGllc1tpQXhpc10gPSBpU2NhbGUuZ2V0UGl4ZWxGb3JWYWx1ZShwYXJzZWRbaUF4aXNdLCBpKTtcbiAgICAgICAgY29uc3QgdlBpeGVsID0gcHJvcGVydGllc1t2QXhpc10gPSByZXNldCB8fCBudWxsRGF0YSA/IHZTY2FsZS5nZXRCYXNlUGl4ZWwoKSA6IHZTY2FsZS5nZXRQaXhlbEZvclZhbHVlKF9zdGFja2VkID8gdGhpcy5hcHBseVN0YWNrKHZTY2FsZSwgcGFyc2VkLCBfc3RhY2tlZCkgOiBwYXJzZWRbdkF4aXNdLCBpKTtcbiAgICAgICAgcHJvcGVydGllcy5za2lwID0gaXNOYU4oaVBpeGVsKSB8fCBpc05hTih2UGl4ZWwpIHx8IG51bGxEYXRhO1xuICAgICAgICBwcm9wZXJ0aWVzLnN0b3AgPSBpID4gMCAmJiBNYXRoLmFicyhwYXJzZWRbaUF4aXNdIC0gcHJldlBhcnNlZFtpQXhpc10pID4gbWF4R2FwTGVuZ3RoO1xuICAgICAgICBpZiAoc2VnbWVudCkge1xuICAgICAgICAgIHByb3BlcnRpZXMucGFyc2VkID0gcGFyc2VkO1xuICAgICAgICAgIHByb3BlcnRpZXMucmF3ID0gX2RhdGFzZXQuZGF0YVtpXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5jbHVkZU9wdGlvbnMpIHtcbiAgICAgICAgICBwcm9wZXJ0aWVzLm9wdGlvbnMgPSBzaGFyZWRPcHRpb25zIHx8IHRoaXMucmVzb2x2ZURhdGFFbGVtZW50T3B0aW9ucyhpLCBwb2ludC5hY3RpdmUgPyAnYWN0aXZlJyA6IG1vZGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghZGlyZWN0VXBkYXRlKSB7XG4gICAgICAgICAgdGhpcy51cGRhdGVFbGVtZW50KHBvaW50LCBpLCBwcm9wZXJ0aWVzLCBtb2RlKTtcbiAgICAgICAgfVxuICAgICAgICBwcmV2UGFyc2VkID0gcGFyc2VkO1xuICAgICAgfVxuICAgICAgdGhpcy51cGRhdGVTaGFyZWRPcHRpb25zKHNoYXJlZE9wdGlvbnMsIG1vZGUsIGZpcnN0T3B0cyk7XG4gICAgfVxuICAgIGdldE1heE92ZXJmbG93KCkge1xuICAgICAgY29uc3QgbWV0YSA9IHRoaXMuX2NhY2hlZE1ldGE7XG4gICAgICBjb25zdCBkYXRhID0gbWV0YS5kYXRhIHx8IFtdO1xuICAgICAgaWYgKCF0aGlzLm9wdGlvbnMuc2hvd0xpbmUpIHtcbiAgICAgICAgbGV0IG1heCA9IDA7XG4gICAgICAgIGZvciAobGV0IGkgPSBkYXRhLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgICAgbWF4ID0gTWF0aC5tYXgobWF4LCBkYXRhW2ldLnNpemUodGhpcy5yZXNvbHZlRGF0YUVsZW1lbnRPcHRpb25zKGkpKSAvIDIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtYXggPiAwICYmIG1heDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRhdGFzZXQgPSBtZXRhLmRhdGFzZXQ7XG4gICAgICBjb25zdCBib3JkZXIgPSBkYXRhc2V0Lm9wdGlvbnMgJiYgZGF0YXNldC5vcHRpb25zLmJvcmRlcldpZHRoIHx8IDA7XG4gICAgICBpZiAoIWRhdGEubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBib3JkZXI7XG4gICAgICB9XG4gICAgICBjb25zdCBmaXJzdFBvaW50ID0gZGF0YVswXS5zaXplKHRoaXMucmVzb2x2ZURhdGFFbGVtZW50T3B0aW9ucygwKSk7XG4gICAgICBjb25zdCBsYXN0UG9pbnQgPSBkYXRhW2RhdGEubGVuZ3RoIC0gMV0uc2l6ZSh0aGlzLnJlc29sdmVEYXRhRWxlbWVudE9wdGlvbnMoZGF0YS5sZW5ndGggLSAxKSk7XG4gICAgICByZXR1cm4gTWF0aC5tYXgoYm9yZGVyLCBmaXJzdFBvaW50LCBsYXN0UG9pbnQpIC8gMjtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIFNjYXR0ZXJDb250cm9sbGVyO1xufSkoKTtcbnZhciBjb250cm9sbGVycyA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXplKHtcbiAgX19wcm90b19fOiBudWxsLFxuICBCYXJDb250cm9sbGVyOiBCYXJDb250cm9sbGVyLFxuICBCdWJibGVDb250cm9sbGVyOiBCdWJibGVDb250cm9sbGVyLFxuICBEb3VnaG51dENvbnRyb2xsZXI6IERvdWdobnV0Q29udHJvbGxlcixcbiAgTGluZUNvbnRyb2xsZXI6IExpbmVDb250cm9sbGVyLFxuICBQaWVDb250cm9sbGVyOiBQaWVDb250cm9sbGVyLFxuICBQb2xhckFyZWFDb250cm9sbGVyOiBQb2xhckFyZWFDb250cm9sbGVyLFxuICBSYWRhckNvbnRyb2xsZXI6IFJhZGFyQ29udHJvbGxlcixcbiAgU2NhdHRlckNvbnRyb2xsZXI6IFNjYXR0ZXJDb250cm9sbGVyXG59KTtcblxuLyoqXG4gKiBAbmFtZXNwYWNlIENoYXJ0Ll9hZGFwdGVyc1xuICogQHNpbmNlIDIuOC4wXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBhYnN0cmFjdCgpIHtcbiAgdGhyb3cgbmV3IEVycm9yKCdUaGlzIG1ldGhvZCBpcyBub3QgaW1wbGVtZW50ZWQ6IENoZWNrIHRoYXQgYSBjb21wbGV0ZSBkYXRlIGFkYXB0ZXIgaXMgcHJvdmlkZWQuJyk7XG59XG4vKipcbiAqIERhdGUgYWRhcHRlciAoY3VycmVudCB1c2VkIGJ5IHRoZSB0aW1lIHNjYWxlKVxuICogQG5hbWVzcGFjZSBDaGFydC5fYWRhcHRlcnMuX2RhdGVcbiAqIEBtZW1iZXJvZiBDaGFydC5fYWRhcHRlcnNcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIERhdGVBZGFwdGVyQmFzZSB7XG4gIC8qKlxuICAqIE92ZXJyaWRlIGRlZmF1bHQgZGF0ZSBhZGFwdGVyIG1ldGhvZHMuXG4gICogQWNjZXB0cyB0eXBlIHBhcmFtZXRlciB0byBkZWZpbmUgb3B0aW9ucyB0eXBlLlxuICAqIEBleGFtcGxlXG4gICogQ2hhcnQuX2FkYXB0ZXJzLl9kYXRlLm92ZXJyaWRlPHtteUFkYXB0ZXJPcHRpb246IHN0cmluZ30+KHtcbiAgKiAgIGluaXQoKSB7XG4gICogICAgIGNvbnNvbGUubG9nKHRoaXMub3B0aW9ucy5teUFkYXB0ZXJPcHRpb24pO1xuICAqICAgfVxuICAqIH0pXG4gICovXG4gIHN0YXRpYyBvdmVycmlkZShtZW1iZXJzKSB7XG4gICAgT2JqZWN0LmFzc2lnbihEYXRlQWRhcHRlckJhc2UucHJvdG90eXBlLCBtZW1iZXJzKTtcbiAgfVxuICBvcHRpb25zO1xuICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgfVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uXG4gIGluaXQoKSB7fVxuICBmb3JtYXRzKCkge1xuICAgIHJldHVybiBhYnN0cmFjdCgpO1xuICB9XG4gIHBhcnNlKCkge1xuICAgIHJldHVybiBhYnN0cmFjdCgpO1xuICB9XG4gIGZvcm1hdCgpIHtcbiAgICByZXR1cm4gYWJzdHJhY3QoKTtcbiAgfVxuICBhZGQoKSB7XG4gICAgcmV0dXJuIGFic3RyYWN0KCk7XG4gIH1cbiAgZGlmZigpIHtcbiAgICByZXR1cm4gYWJzdHJhY3QoKTtcbiAgfVxuICBzdGFydE9mKCkge1xuICAgIHJldHVybiBhYnN0cmFjdCgpO1xuICB9XG4gIGVuZE9mKCkge1xuICAgIHJldHVybiBhYnN0cmFjdCgpO1xuICB9XG59XG52YXIgYWRhcHRlcnMgPSB7XG4gIF9kYXRlOiBEYXRlQWRhcHRlckJhc2Vcbn07XG5mdW5jdGlvbiBiaW5hcnlTZWFyY2gobWV0YXNldCwgYXhpcywgdmFsdWUsIGludGVyc2VjdCkge1xuICBjb25zdCB7XG4gICAgY29udHJvbGxlcixcbiAgICBkYXRhLFxuICAgIF9zb3J0ZWRcbiAgfSA9IG1ldGFzZXQ7XG4gIGNvbnN0IGlTY2FsZSA9IGNvbnRyb2xsZXIuX2NhY2hlZE1ldGEuaVNjYWxlO1xuICBjb25zdCBzcGFuR2FwcyA9IG1ldGFzZXQuZGF0YXNldCA/IG1ldGFzZXQuZGF0YXNldC5vcHRpb25zID8gbWV0YXNldC5kYXRhc2V0Lm9wdGlvbnMuc3BhbkdhcHMgOiBudWxsIDogbnVsbDtcbiAgaWYgKGlTY2FsZSAmJiBheGlzID09PSBpU2NhbGUuYXhpcyAmJiBheGlzICE9PSAncicgJiYgX3NvcnRlZCAmJiBkYXRhLmxlbmd0aCkge1xuICAgIGNvbnN0IGxvb2t1cE1ldGhvZCA9IGlTY2FsZS5fcmV2ZXJzZVBpeGVscyA/IF9ybG9va3VwQnlLZXkgOiBfbG9va3VwQnlLZXk7XG4gICAgaWYgKCFpbnRlcnNlY3QpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGxvb2t1cE1ldGhvZChkYXRhLCBheGlzLCB2YWx1ZSk7XG4gICAgICBpZiAoc3BhbkdhcHMpIHtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgIHZTY2FsZVxuICAgICAgICB9ID0gY29udHJvbGxlci5fY2FjaGVkTWV0YTtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgIF9wYXJzZWRcbiAgICAgICAgfSA9IG1ldGFzZXQ7XG4gICAgICAgIGNvbnN0IGRpc3RhbmNlVG9EZWZpbmVkTG8gPSBfcGFyc2VkLnNsaWNlKDAsIHJlc3VsdC5sbyArIDEpLnJldmVyc2UoKS5maW5kSW5kZXgocG9pbnQgPT4gIWlzTnVsbE9yVW5kZWYocG9pbnRbdlNjYWxlLmF4aXNdKSk7XG4gICAgICAgIHJlc3VsdC5sbyAtPSBNYXRoLm1heCgwLCBkaXN0YW5jZVRvRGVmaW5lZExvKTtcbiAgICAgICAgY29uc3QgZGlzdGFuY2VUb0RlZmluZWRIaSA9IF9wYXJzZWQuc2xpY2UocmVzdWx0LmhpKS5maW5kSW5kZXgocG9pbnQgPT4gIWlzTnVsbE9yVW5kZWYocG9pbnRbdlNjYWxlLmF4aXNdKSk7XG4gICAgICAgIHJlc3VsdC5oaSArPSBNYXRoLm1heCgwLCBkaXN0YW5jZVRvRGVmaW5lZEhpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSBlbHNlIGlmIChjb250cm9sbGVyLl9zaGFyZWRPcHRpb25zKSB7XG4gICAgICBjb25zdCBlbCA9IGRhdGFbMF07XG4gICAgICBjb25zdCByYW5nZSA9IHR5cGVvZiBlbC5nZXRSYW5nZSA9PT0gJ2Z1bmN0aW9uJyAmJiBlbC5nZXRSYW5nZShheGlzKTtcbiAgICAgIGlmIChyYW5nZSkge1xuICAgICAgICBjb25zdCBzdGFydCA9IGxvb2t1cE1ldGhvZChkYXRhLCBheGlzLCB2YWx1ZSAtIHJhbmdlKTtcbiAgICAgICAgY29uc3QgZW5kID0gbG9va3VwTWV0aG9kKGRhdGEsIGF4aXMsIHZhbHVlICsgcmFuZ2UpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGxvOiBzdGFydC5sbyxcbiAgICAgICAgICBoaTogZW5kLmhpXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiB7XG4gICAgbG86IDAsXG4gICAgaGk6IGRhdGEubGVuZ3RoIC0gMVxuICB9O1xufVxuZnVuY3Rpb24gZXZhbHVhdGVJbnRlcmFjdGlvbkl0ZW1zKGNoYXJ0LCBheGlzLCBwb3NpdGlvbiwgaGFuZGxlciwgaW50ZXJzZWN0KSB7XG4gIGNvbnN0IG1ldGFzZXRzID0gY2hhcnQuZ2V0U29ydGVkVmlzaWJsZURhdGFzZXRNZXRhcygpO1xuICBjb25zdCB2YWx1ZSA9IHBvc2l0aW9uW2F4aXNdO1xuICBmb3IgKGxldCBpID0gMCwgaWxlbiA9IG1ldGFzZXRzLmxlbmd0aDsgaSA8IGlsZW47ICsraSkge1xuICAgIGNvbnN0IHtcbiAgICAgIGluZGV4LFxuICAgICAgZGF0YVxuICAgIH0gPSBtZXRhc2V0c1tpXTtcbiAgICBjb25zdCB7XG4gICAgICBsbyxcbiAgICAgIGhpXG4gICAgfSA9IGJpbmFyeVNlYXJjaChtZXRhc2V0c1tpXSwgYXhpcywgdmFsdWUsIGludGVyc2VjdCk7XG4gICAgZm9yIChsZXQgaiA9IGxvOyBqIDw9IGhpOyArK2opIHtcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSBkYXRhW2pdO1xuICAgICAgaWYgKCFlbGVtZW50LnNraXApIHtcbiAgICAgICAgaGFuZGxlcihlbGVtZW50LCBpbmRleCwgaik7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBnZXREaXN0YW5jZU1ldHJpY0ZvckF4aXMoYXhpcykge1xuICBjb25zdCB1c2VYID0gYXhpcy5pbmRleE9mKCd4JykgIT09IC0xO1xuICBjb25zdCB1c2VZID0gYXhpcy5pbmRleE9mKCd5JykgIT09IC0xO1xuICByZXR1cm4gZnVuY3Rpb24gKHB0MSwgcHQyKSB7XG4gICAgY29uc3QgZGVsdGFYID0gdXNlWCA/IE1hdGguYWJzKHB0MS54IC0gcHQyLngpIDogMDtcbiAgICBjb25zdCBkZWx0YVkgPSB1c2VZID8gTWF0aC5hYnMocHQxLnkgLSBwdDIueSkgOiAwO1xuICAgIHJldHVybiBNYXRoLnNxcnQoTWF0aC5wb3coZGVsdGFYLCAyKSArIE1hdGgucG93KGRlbHRhWSwgMikpO1xuICB9O1xufVxuZnVuY3Rpb24gZ2V0SW50ZXJzZWN0SXRlbXMoY2hhcnQsIHBvc2l0aW9uLCBheGlzLCB1c2VGaW5hbFBvc2l0aW9uLCBpbmNsdWRlSW52aXNpYmxlKSB7XG4gIGNvbnN0IGl0ZW1zID0gW107XG4gIGlmICghaW5jbHVkZUludmlzaWJsZSAmJiAhY2hhcnQuaXNQb2ludEluQXJlYShwb3NpdGlvbikpIHtcbiAgICByZXR1cm4gaXRlbXM7XG4gIH1cbiAgY29uc3QgZXZhbHVhdGlvbkZ1bmMgPSBmdW5jdGlvbiAoZWxlbWVudCwgZGF0YXNldEluZGV4LCBpbmRleCkge1xuICAgIGlmICghaW5jbHVkZUludmlzaWJsZSAmJiAhX2lzUG9pbnRJbkFyZWEoZWxlbWVudCwgY2hhcnQuY2hhcnRBcmVhLCAwKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoZWxlbWVudC5pblJhbmdlKHBvc2l0aW9uLngsIHBvc2l0aW9uLnksIHVzZUZpbmFsUG9zaXRpb24pKSB7XG4gICAgICBpdGVtcy5wdXNoKHtcbiAgICAgICAgZWxlbWVudCxcbiAgICAgICAgZGF0YXNldEluZGV4LFxuICAgICAgICBpbmRleFxuICAgICAgfSk7XG4gICAgfVxuICB9O1xuICBldmFsdWF0ZUludGVyYWN0aW9uSXRlbXMoY2hhcnQsIGF4aXMsIHBvc2l0aW9uLCBldmFsdWF0aW9uRnVuYywgdHJ1ZSk7XG4gIHJldHVybiBpdGVtcztcbn1cbmZ1bmN0aW9uIGdldE5lYXJlc3RSYWRpYWxJdGVtcyhjaGFydCwgcG9zaXRpb24sIGF4aXMsIHVzZUZpbmFsUG9zaXRpb24pIHtcbiAgbGV0IGl0ZW1zID0gW107XG4gIGZ1bmN0aW9uIGV2YWx1YXRpb25GdW5jKGVsZW1lbnQsIGRhdGFzZXRJbmRleCwgaW5kZXgpIHtcbiAgICBjb25zdCB7XG4gICAgICBzdGFydEFuZ2xlLFxuICAgICAgZW5kQW5nbGVcbiAgICB9ID0gZWxlbWVudC5nZXRQcm9wcyhbJ3N0YXJ0QW5nbGUnLCAnZW5kQW5nbGUnXSwgdXNlRmluYWxQb3NpdGlvbik7XG4gICAgY29uc3Qge1xuICAgICAgYW5nbGVcbiAgICB9ID0gZ2V0QW5nbGVGcm9tUG9pbnQoZWxlbWVudCwge1xuICAgICAgeDogcG9zaXRpb24ueCxcbiAgICAgIHk6IHBvc2l0aW9uLnlcbiAgICB9KTtcbiAgICBpZiAoX2FuZ2xlQmV0d2VlbihhbmdsZSwgc3RhcnRBbmdsZSwgZW5kQW5nbGUpKSB7XG4gICAgICBpdGVtcy5wdXNoKHtcbiAgICAgICAgZWxlbWVudCxcbiAgICAgICAgZGF0YXNldEluZGV4LFxuICAgICAgICBpbmRleFxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIGV2YWx1YXRlSW50ZXJhY3Rpb25JdGVtcyhjaGFydCwgYXhpcywgcG9zaXRpb24sIGV2YWx1YXRpb25GdW5jKTtcbiAgcmV0dXJuIGl0ZW1zO1xufVxuZnVuY3Rpb24gZ2V0TmVhcmVzdENhcnRlc2lhbkl0ZW1zKGNoYXJ0LCBwb3NpdGlvbiwgYXhpcywgaW50ZXJzZWN0LCB1c2VGaW5hbFBvc2l0aW9uLCBpbmNsdWRlSW52aXNpYmxlKSB7XG4gIGxldCBpdGVtcyA9IFtdO1xuICBjb25zdCBkaXN0YW5jZU1ldHJpYyA9IGdldERpc3RhbmNlTWV0cmljRm9yQXhpcyhheGlzKTtcbiAgbGV0IG1pbkRpc3RhbmNlID0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO1xuICBmdW5jdGlvbiBldmFsdWF0aW9uRnVuYyhlbGVtZW50LCBkYXRhc2V0SW5kZXgsIGluZGV4KSB7XG4gICAgY29uc3QgaW5SYW5nZSA9IGVsZW1lbnQuaW5SYW5nZShwb3NpdGlvbi54LCBwb3NpdGlvbi55LCB1c2VGaW5hbFBvc2l0aW9uKTtcbiAgICBpZiAoaW50ZXJzZWN0ICYmICFpblJhbmdlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGNlbnRlciA9IGVsZW1lbnQuZ2V0Q2VudGVyUG9pbnQodXNlRmluYWxQb3NpdGlvbik7XG4gICAgY29uc3QgcG9pbnRJbkFyZWEgPSAhIWluY2x1ZGVJbnZpc2libGUgfHwgY2hhcnQuaXNQb2ludEluQXJlYShjZW50ZXIpO1xuICAgIGlmICghcG9pbnRJbkFyZWEgJiYgIWluUmFuZ2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZGlzdGFuY2UgPSBkaXN0YW5jZU1ldHJpYyhwb3NpdGlvbiwgY2VudGVyKTtcbiAgICBpZiAoZGlzdGFuY2UgPCBtaW5EaXN0YW5jZSkge1xuICAgICAgaXRlbXMgPSBbe1xuICAgICAgICBlbGVtZW50LFxuICAgICAgICBkYXRhc2V0SW5kZXgsXG4gICAgICAgIGluZGV4XG4gICAgICB9XTtcbiAgICAgIG1pbkRpc3RhbmNlID0gZGlzdGFuY2U7XG4gICAgfSBlbHNlIGlmIChkaXN0YW5jZSA9PT0gbWluRGlzdGFuY2UpIHtcbiAgICAgIGl0ZW1zLnB1c2goe1xuICAgICAgICBlbGVtZW50LFxuICAgICAgICBkYXRhc2V0SW5kZXgsXG4gICAgICAgIGluZGV4XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgZXZhbHVhdGVJbnRlcmFjdGlvbkl0ZW1zKGNoYXJ0LCBheGlzLCBwb3NpdGlvbiwgZXZhbHVhdGlvbkZ1bmMpO1xuICByZXR1cm4gaXRlbXM7XG59XG5mdW5jdGlvbiBnZXROZWFyZXN0SXRlbXMoY2hhcnQsIHBvc2l0aW9uLCBheGlzLCBpbnRlcnNlY3QsIHVzZUZpbmFsUG9zaXRpb24sIGluY2x1ZGVJbnZpc2libGUpIHtcbiAgaWYgKCFpbmNsdWRlSW52aXNpYmxlICYmICFjaGFydC5pc1BvaW50SW5BcmVhKHBvc2l0aW9uKSkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICByZXR1cm4gYXhpcyA9PT0gJ3InICYmICFpbnRlcnNlY3QgPyBnZXROZWFyZXN0UmFkaWFsSXRlbXMoY2hhcnQsIHBvc2l0aW9uLCBheGlzLCB1c2VGaW5hbFBvc2l0aW9uKSA6IGdldE5lYXJlc3RDYXJ0ZXNpYW5JdGVtcyhjaGFydCwgcG9zaXRpb24sIGF4aXMsIGludGVyc2VjdCwgdXNlRmluYWxQb3NpdGlvbiwgaW5jbHVkZUludmlzaWJsZSk7XG59XG5mdW5jdGlvbiBnZXRBeGlzSXRlbXMoY2hhcnQsIHBvc2l0aW9uLCBheGlzLCBpbnRlcnNlY3QsIHVzZUZpbmFsUG9zaXRpb24pIHtcbiAgY29uc3QgaXRlbXMgPSBbXTtcbiAgY29uc3QgcmFuZ2VNZXRob2QgPSBheGlzID09PSAneCcgPyAnaW5YUmFuZ2UnIDogJ2luWVJhbmdlJztcbiAgbGV0IGludGVyc2VjdHNJdGVtID0gZmFsc2U7XG4gIGV2YWx1YXRlSW50ZXJhY3Rpb25JdGVtcyhjaGFydCwgYXhpcywgcG9zaXRpb24sIChlbGVtZW50LCBkYXRhc2V0SW5kZXgsIGluZGV4KSA9PiB7XG4gICAgaWYgKGVsZW1lbnRbcmFuZ2VNZXRob2RdICYmIGVsZW1lbnRbcmFuZ2VNZXRob2RdKHBvc2l0aW9uW2F4aXNdLCB1c2VGaW5hbFBvc2l0aW9uKSkge1xuICAgICAgaXRlbXMucHVzaCh7XG4gICAgICAgIGVsZW1lbnQsXG4gICAgICAgIGRhdGFzZXRJbmRleCxcbiAgICAgICAgaW5kZXhcbiAgICAgIH0pO1xuICAgICAgaW50ZXJzZWN0c0l0ZW0gPSBpbnRlcnNlY3RzSXRlbSB8fCBlbGVtZW50LmluUmFuZ2UocG9zaXRpb24ueCwgcG9zaXRpb24ueSwgdXNlRmluYWxQb3NpdGlvbik7XG4gICAgfVxuICB9KTtcbiAgaWYgKGludGVyc2VjdCAmJiAhaW50ZXJzZWN0c0l0ZW0pIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgcmV0dXJuIGl0ZW1zO1xufVxudmFyIEludGVyYWN0aW9uID0ge1xuICBldmFsdWF0ZUludGVyYWN0aW9uSXRlbXMsXG4gIG1vZGVzOiB7XG4gICAgaW5kZXgoY2hhcnQsIGUsIG9wdGlvbnMsIHVzZUZpbmFsUG9zaXRpb24pIHtcbiAgICAgIGNvbnN0IHBvc2l0aW9uID0gZ2V0UmVsYXRpdmVQb3NpdGlvbihlLCBjaGFydCk7XG4gICAgICBjb25zdCBheGlzID0gb3B0aW9ucy5heGlzIHx8ICd4JztcbiAgICAgIGNvbnN0IGluY2x1ZGVJbnZpc2libGUgPSBvcHRpb25zLmluY2x1ZGVJbnZpc2libGUgfHwgZmFsc2U7XG4gICAgICBjb25zdCBpdGVtcyA9IG9wdGlvbnMuaW50ZXJzZWN0ID8gZ2V0SW50ZXJzZWN0SXRlbXMoY2hhcnQsIHBvc2l0aW9uLCBheGlzLCB1c2VGaW5hbFBvc2l0aW9uLCBpbmNsdWRlSW52aXNpYmxlKSA6IGdldE5lYXJlc3RJdGVtcyhjaGFydCwgcG9zaXRpb24sIGF4aXMsIGZhbHNlLCB1c2VGaW5hbFBvc2l0aW9uLCBpbmNsdWRlSW52aXNpYmxlKTtcbiAgICAgIGNvbnN0IGVsZW1lbnRzID0gW107XG4gICAgICBpZiAoIWl0ZW1zLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgICBjaGFydC5nZXRTb3J0ZWRWaXNpYmxlRGF0YXNldE1ldGFzKCkuZm9yRWFjaChtZXRhID0+IHtcbiAgICAgICAgY29uc3QgaW5kZXggPSBpdGVtc1swXS5pbmRleDtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IG1ldGEuZGF0YVtpbmRleF07XG4gICAgICAgIGlmIChlbGVtZW50ICYmICFlbGVtZW50LnNraXApIHtcbiAgICAgICAgICBlbGVtZW50cy5wdXNoKHtcbiAgICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgICBkYXRhc2V0SW5kZXg6IG1ldGEuaW5kZXgsXG4gICAgICAgICAgICBpbmRleFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBlbGVtZW50cztcbiAgICB9LFxuICAgIGRhdGFzZXQoY2hhcnQsIGUsIG9wdGlvbnMsIHVzZUZpbmFsUG9zaXRpb24pIHtcbiAgICAgIGNvbnN0IHBvc2l0aW9uID0gZ2V0UmVsYXRpdmVQb3NpdGlvbihlLCBjaGFydCk7XG4gICAgICBjb25zdCBheGlzID0gb3B0aW9ucy5heGlzIHx8ICd4eSc7XG4gICAgICBjb25zdCBpbmNsdWRlSW52aXNpYmxlID0gb3B0aW9ucy5pbmNsdWRlSW52aXNpYmxlIHx8IGZhbHNlO1xuICAgICAgbGV0IGl0ZW1zID0gb3B0aW9ucy5pbnRlcnNlY3QgPyBnZXRJbnRlcnNlY3RJdGVtcyhjaGFydCwgcG9zaXRpb24sIGF4aXMsIHVzZUZpbmFsUG9zaXRpb24sIGluY2x1ZGVJbnZpc2libGUpIDogZ2V0TmVhcmVzdEl0ZW1zKGNoYXJ0LCBwb3NpdGlvbiwgYXhpcywgZmFsc2UsIHVzZUZpbmFsUG9zaXRpb24sIGluY2x1ZGVJbnZpc2libGUpO1xuICAgICAgaWYgKGl0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgZGF0YXNldEluZGV4ID0gaXRlbXNbMF0uZGF0YXNldEluZGV4O1xuICAgICAgICBjb25zdCBkYXRhID0gY2hhcnQuZ2V0RGF0YXNldE1ldGEoZGF0YXNldEluZGV4KS5kYXRhO1xuICAgICAgICBpdGVtcyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICBpdGVtcy5wdXNoKHtcbiAgICAgICAgICAgIGVsZW1lbnQ6IGRhdGFbaV0sXG4gICAgICAgICAgICBkYXRhc2V0SW5kZXgsXG4gICAgICAgICAgICBpbmRleDogaVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gaXRlbXM7XG4gICAgfSxcbiAgICBwb2ludChjaGFydCwgZSwgb3B0aW9ucywgdXNlRmluYWxQb3NpdGlvbikge1xuICAgICAgY29uc3QgcG9zaXRpb24gPSBnZXRSZWxhdGl2ZVBvc2l0aW9uKGUsIGNoYXJ0KTtcbiAgICAgIGNvbnN0IGF4aXMgPSBvcHRpb25zLmF4aXMgfHwgJ3h5JztcbiAgICAgIGNvbnN0IGluY2x1ZGVJbnZpc2libGUgPSBvcHRpb25zLmluY2x1ZGVJbnZpc2libGUgfHwgZmFsc2U7XG4gICAgICByZXR1cm4gZ2V0SW50ZXJzZWN0SXRlbXMoY2hhcnQsIHBvc2l0aW9uLCBheGlzLCB1c2VGaW5hbFBvc2l0aW9uLCBpbmNsdWRlSW52aXNpYmxlKTtcbiAgICB9LFxuICAgIG5lYXJlc3QoY2hhcnQsIGUsIG9wdGlvbnMsIHVzZUZpbmFsUG9zaXRpb24pIHtcbiAgICAgIGNvbnN0IHBvc2l0aW9uID0gZ2V0UmVsYXRpdmVQb3NpdGlvbihlLCBjaGFydCk7XG4gICAgICBjb25zdCBheGlzID0gb3B0aW9ucy5heGlzIHx8ICd4eSc7XG4gICAgICBjb25zdCBpbmNsdWRlSW52aXNpYmxlID0gb3B0aW9ucy5pbmNsdWRlSW52aXNpYmxlIHx8IGZhbHNlO1xuICAgICAgcmV0dXJuIGdldE5lYXJlc3RJdGVtcyhjaGFydCwgcG9zaXRpb24sIGF4aXMsIG9wdGlvbnMuaW50ZXJzZWN0LCB1c2VGaW5hbFBvc2l0aW9uLCBpbmNsdWRlSW52aXNpYmxlKTtcbiAgICB9LFxuICAgIHgoY2hhcnQsIGUsIG9wdGlvbnMsIHVzZUZpbmFsUG9zaXRpb24pIHtcbiAgICAgIGNvbnN0IHBvc2l0aW9uID0gZ2V0UmVsYXRpdmVQb3NpdGlvbihlLCBjaGFydCk7XG4gICAgICByZXR1cm4gZ2V0QXhpc0l0ZW1zKGNoYXJ0LCBwb3NpdGlvbiwgJ3gnLCBvcHRpb25zLmludGVyc2VjdCwgdXNlRmluYWxQb3NpdGlvbik7XG4gICAgfSxcbiAgICB5KGNoYXJ0LCBlLCBvcHRpb25zLCB1c2VGaW5hbFBvc2l0aW9uKSB7XG4gICAgICBjb25zdCBwb3NpdGlvbiA9IGdldFJlbGF0aXZlUG9zaXRpb24oZSwgY2hhcnQpO1xuICAgICAgcmV0dXJuIGdldEF4aXNJdGVtcyhjaGFydCwgcG9zaXRpb24sICd5Jywgb3B0aW9ucy5pbnRlcnNlY3QsIHVzZUZpbmFsUG9zaXRpb24pO1xuICAgIH1cbiAgfVxufTtcbmNvbnN0IFNUQVRJQ19QT1NJVElPTlMgPSBbJ2xlZnQnLCAndG9wJywgJ3JpZ2h0JywgJ2JvdHRvbSddO1xuZnVuY3Rpb24gZmlsdGVyQnlQb3NpdGlvbihhcnJheSwgcG9zaXRpb24pIHtcbiAgcmV0dXJuIGFycmF5LmZpbHRlcih2ID0+IHYucG9zID09PSBwb3NpdGlvbik7XG59XG5mdW5jdGlvbiBmaWx0ZXJEeW5hbWljUG9zaXRpb25CeUF4aXMoYXJyYXksIGF4aXMpIHtcbiAgcmV0dXJuIGFycmF5LmZpbHRlcih2ID0+IFNUQVRJQ19QT1NJVElPTlMuaW5kZXhPZih2LnBvcykgPT09IC0xICYmIHYuYm94LmF4aXMgPT09IGF4aXMpO1xufVxuZnVuY3Rpb24gc29ydEJ5V2VpZ2h0KGFycmF5LCByZXZlcnNlKSB7XG4gIHJldHVybiBhcnJheS5zb3J0KChhLCBiKSA9PiB7XG4gICAgY29uc3QgdjAgPSByZXZlcnNlID8gYiA6IGE7XG4gICAgY29uc3QgdjEgPSByZXZlcnNlID8gYSA6IGI7XG4gICAgcmV0dXJuIHYwLndlaWdodCA9PT0gdjEud2VpZ2h0ID8gdjAuaW5kZXggLSB2MS5pbmRleCA6IHYwLndlaWdodCAtIHYxLndlaWdodDtcbiAgfSk7XG59XG5mdW5jdGlvbiB3cmFwQm94ZXMoYm94ZXMpIHtcbiAgY29uc3QgbGF5b3V0Qm94ZXMgPSBbXTtcbiAgbGV0IGksIGlsZW4sIGJveCwgcG9zLCBzdGFjaywgc3RhY2tXZWlnaHQ7XG4gIGZvciAoaSA9IDAsIGlsZW4gPSAoYm94ZXMgfHwgW10pLmxlbmd0aDsgaSA8IGlsZW47ICsraSkge1xuICAgIGJveCA9IGJveGVzW2ldO1xuICAgICh7XG4gICAgICBwb3NpdGlvbjogcG9zLFxuICAgICAgb3B0aW9uczoge1xuICAgICAgICBzdGFjayxcbiAgICAgICAgc3RhY2tXZWlnaHQgPSAxXG4gICAgICB9XG4gICAgfSA9IGJveCk7XG4gICAgbGF5b3V0Qm94ZXMucHVzaCh7XG4gICAgICBpbmRleDogaSxcbiAgICAgIGJveCxcbiAgICAgIHBvcyxcbiAgICAgIGhvcml6b250YWw6IGJveC5pc0hvcml6b250YWwoKSxcbiAgICAgIHdlaWdodDogYm94LndlaWdodCxcbiAgICAgIHN0YWNrOiBzdGFjayAmJiBwb3MgKyBzdGFjayxcbiAgICAgIHN0YWNrV2VpZ2h0XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIGxheW91dEJveGVzO1xufVxuZnVuY3Rpb24gYnVpbGRTdGFja3MobGF5b3V0cykge1xuICBjb25zdCBzdGFja3MgPSB7fTtcbiAgZm9yIChjb25zdCB3cmFwIG9mIGxheW91dHMpIHtcbiAgICBjb25zdCB7XG4gICAgICBzdGFjayxcbiAgICAgIHBvcyxcbiAgICAgIHN0YWNrV2VpZ2h0XG4gICAgfSA9IHdyYXA7XG4gICAgaWYgKCFzdGFjayB8fCAhU1RBVElDX1BPU0lUSU9OUy5pbmNsdWRlcyhwb3MpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3QgX3N0YWNrID0gc3RhY2tzW3N0YWNrXSB8fCAoc3RhY2tzW3N0YWNrXSA9IHtcbiAgICAgIGNvdW50OiAwLFxuICAgICAgcGxhY2VkOiAwLFxuICAgICAgd2VpZ2h0OiAwLFxuICAgICAgc2l6ZTogMFxuICAgIH0pO1xuICAgIF9zdGFjay5jb3VudCsrO1xuICAgIF9zdGFjay53ZWlnaHQgKz0gc3RhY2tXZWlnaHQ7XG4gIH1cbiAgcmV0dXJuIHN0YWNrcztcbn1cbmZ1bmN0aW9uIHNldExheW91dERpbXMobGF5b3V0cywgcGFyYW1zKSB7XG4gIGNvbnN0IHN0YWNrcyA9IGJ1aWxkU3RhY2tzKGxheW91dHMpO1xuICBjb25zdCB7XG4gICAgdkJveE1heFdpZHRoLFxuICAgIGhCb3hNYXhIZWlnaHRcbiAgfSA9IHBhcmFtcztcbiAgbGV0IGksIGlsZW4sIGxheW91dDtcbiAgZm9yIChpID0gMCwgaWxlbiA9IGxheW91dHMubGVuZ3RoOyBpIDwgaWxlbjsgKytpKSB7XG4gICAgbGF5b3V0ID0gbGF5b3V0c1tpXTtcbiAgICBjb25zdCB7XG4gICAgICBmdWxsU2l6ZVxuICAgIH0gPSBsYXlvdXQuYm94O1xuICAgIGNvbnN0IHN0YWNrID0gc3RhY2tzW2xheW91dC5zdGFja107XG4gICAgY29uc3QgZmFjdG9yID0gc3RhY2sgJiYgbGF5b3V0LnN0YWNrV2VpZ2h0IC8gc3RhY2sud2VpZ2h0O1xuICAgIGlmIChsYXlvdXQuaG9yaXpvbnRhbCkge1xuICAgICAgbGF5b3V0LndpZHRoID0gZmFjdG9yID8gZmFjdG9yICogdkJveE1heFdpZHRoIDogZnVsbFNpemUgJiYgcGFyYW1zLmF2YWlsYWJsZVdpZHRoO1xuICAgICAgbGF5b3V0LmhlaWdodCA9IGhCb3hNYXhIZWlnaHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxheW91dC53aWR0aCA9IHZCb3hNYXhXaWR0aDtcbiAgICAgIGxheW91dC5oZWlnaHQgPSBmYWN0b3IgPyBmYWN0b3IgKiBoQm94TWF4SGVpZ2h0IDogZnVsbFNpemUgJiYgcGFyYW1zLmF2YWlsYWJsZUhlaWdodDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHN0YWNrcztcbn1cbmZ1bmN0aW9uIGJ1aWxkTGF5b3V0Qm94ZXMoYm94ZXMpIHtcbiAgY29uc3QgbGF5b3V0Qm94ZXMgPSB3cmFwQm94ZXMoYm94ZXMpO1xuICBjb25zdCBmdWxsU2l6ZSA9IHNvcnRCeVdlaWdodChsYXlvdXRCb3hlcy5maWx0ZXIod3JhcCA9PiB3cmFwLmJveC5mdWxsU2l6ZSksIHRydWUpO1xuICBjb25zdCBsZWZ0ID0gc29ydEJ5V2VpZ2h0KGZpbHRlckJ5UG9zaXRpb24obGF5b3V0Qm94ZXMsICdsZWZ0JyksIHRydWUpO1xuICBjb25zdCByaWdodCA9IHNvcnRCeVdlaWdodChmaWx0ZXJCeVBvc2l0aW9uKGxheW91dEJveGVzLCAncmlnaHQnKSk7XG4gIGNvbnN0IHRvcCA9IHNvcnRCeVdlaWdodChmaWx0ZXJCeVBvc2l0aW9uKGxheW91dEJveGVzLCAndG9wJyksIHRydWUpO1xuICBjb25zdCBib3R0b20gPSBzb3J0QnlXZWlnaHQoZmlsdGVyQnlQb3NpdGlvbihsYXlvdXRCb3hlcywgJ2JvdHRvbScpKTtcbiAgY29uc3QgY2VudGVySG9yaXpvbnRhbCA9IGZpbHRlckR5bmFtaWNQb3NpdGlvbkJ5QXhpcyhsYXlvdXRCb3hlcywgJ3gnKTtcbiAgY29uc3QgY2VudGVyVmVydGljYWwgPSBmaWx0ZXJEeW5hbWljUG9zaXRpb25CeUF4aXMobGF5b3V0Qm94ZXMsICd5Jyk7XG4gIHJldHVybiB7XG4gICAgZnVsbFNpemUsXG4gICAgbGVmdEFuZFRvcDogbGVmdC5jb25jYXQodG9wKSxcbiAgICByaWdodEFuZEJvdHRvbTogcmlnaHQuY29uY2F0KGNlbnRlclZlcnRpY2FsKS5jb25jYXQoYm90dG9tKS5jb25jYXQoY2VudGVySG9yaXpvbnRhbCksXG4gICAgY2hhcnRBcmVhOiBmaWx0ZXJCeVBvc2l0aW9uKGxheW91dEJveGVzLCAnY2hhcnRBcmVhJyksXG4gICAgdmVydGljYWw6IGxlZnQuY29uY2F0KHJpZ2h0KS5jb25jYXQoY2VudGVyVmVydGljYWwpLFxuICAgIGhvcml6b250YWw6IHRvcC5jb25jYXQoYm90dG9tKS5jb25jYXQoY2VudGVySG9yaXpvbnRhbClcbiAgfTtcbn1cbmZ1bmN0aW9uIGdldENvbWJpbmVkTWF4KG1heFBhZGRpbmcsIGNoYXJ0QXJlYSwgYSwgYikge1xuICByZXR1cm4gTWF0aC5tYXgobWF4UGFkZGluZ1thXSwgY2hhcnRBcmVhW2FdKSArIE1hdGgubWF4KG1heFBhZGRpbmdbYl0sIGNoYXJ0QXJlYVtiXSk7XG59XG5mdW5jdGlvbiB1cGRhdGVNYXhQYWRkaW5nKG1heFBhZGRpbmcsIGJveFBhZGRpbmcpIHtcbiAgbWF4UGFkZGluZy50b3AgPSBNYXRoLm1heChtYXhQYWRkaW5nLnRvcCwgYm94UGFkZGluZy50b3ApO1xuICBtYXhQYWRkaW5nLmxlZnQgPSBNYXRoLm1heChtYXhQYWRkaW5nLmxlZnQsIGJveFBhZGRpbmcubGVmdCk7XG4gIG1heFBhZGRpbmcuYm90dG9tID0gTWF0aC5tYXgobWF4UGFkZGluZy5ib3R0b20sIGJveFBhZGRpbmcuYm90dG9tKTtcbiAgbWF4UGFkZGluZy5yaWdodCA9IE1hdGgubWF4KG1heFBhZGRpbmcucmlnaHQsIGJveFBhZGRpbmcucmlnaHQpO1xufVxuZnVuY3Rpb24gdXBkYXRlRGltcyhjaGFydEFyZWEsIHBhcmFtcywgbGF5b3V0LCBzdGFja3MpIHtcbiAgY29uc3Qge1xuICAgIHBvcyxcbiAgICBib3hcbiAgfSA9IGxheW91dDtcbiAgY29uc3QgbWF4UGFkZGluZyA9IGNoYXJ0QXJlYS5tYXhQYWRkaW5nO1xuICBpZiAoIWlzT2JqZWN0KHBvcykpIHtcbiAgICBpZiAobGF5b3V0LnNpemUpIHtcbiAgICAgIGNoYXJ0QXJlYVtwb3NdIC09IGxheW91dC5zaXplO1xuICAgIH1cbiAgICBjb25zdCBzdGFjayA9IHN0YWNrc1tsYXlvdXQuc3RhY2tdIHx8IHtcbiAgICAgIHNpemU6IDAsXG4gICAgICBjb3VudDogMVxuICAgIH07XG4gICAgc3RhY2suc2l6ZSA9IE1hdGgubWF4KHN0YWNrLnNpemUsIGxheW91dC5ob3Jpem9udGFsID8gYm94LmhlaWdodCA6IGJveC53aWR0aCk7XG4gICAgbGF5b3V0LnNpemUgPSBzdGFjay5zaXplIC8gc3RhY2suY291bnQ7XG4gICAgY2hhcnRBcmVhW3Bvc10gKz0gbGF5b3V0LnNpemU7XG4gIH1cbiAgaWYgKGJveC5nZXRQYWRkaW5nKSB7XG4gICAgdXBkYXRlTWF4UGFkZGluZyhtYXhQYWRkaW5nLCBib3guZ2V0UGFkZGluZygpKTtcbiAgfVxuICBjb25zdCBuZXdXaWR0aCA9IE1hdGgubWF4KDAsIHBhcmFtcy5vdXRlcldpZHRoIC0gZ2V0Q29tYmluZWRNYXgobWF4UGFkZGluZywgY2hhcnRBcmVhLCAnbGVmdCcsICdyaWdodCcpKTtcbiAgY29uc3QgbmV3SGVpZ2h0ID0gTWF0aC5tYXgoMCwgcGFyYW1zLm91dGVySGVpZ2h0IC0gZ2V0Q29tYmluZWRNYXgobWF4UGFkZGluZywgY2hhcnRBcmVhLCAndG9wJywgJ2JvdHRvbScpKTtcbiAgY29uc3Qgd2lkdGhDaGFuZ2VkID0gbmV3V2lkdGggIT09IGNoYXJ0QXJlYS53O1xuICBjb25zdCBoZWlnaHRDaGFuZ2VkID0gbmV3SGVpZ2h0ICE9PSBjaGFydEFyZWEuaDtcbiAgY2hhcnRBcmVhLncgPSBuZXdXaWR0aDtcbiAgY2hhcnRBcmVhLmggPSBuZXdIZWlnaHQ7XG4gIHJldHVybiBsYXlvdXQuaG9yaXpvbnRhbCA/IHtcbiAgICBzYW1lOiB3aWR0aENoYW5nZWQsXG4gICAgb3RoZXI6IGhlaWdodENoYW5nZWRcbiAgfSA6IHtcbiAgICBzYW1lOiBoZWlnaHRDaGFuZ2VkLFxuICAgIG90aGVyOiB3aWR0aENoYW5nZWRcbiAgfTtcbn1cbmZ1bmN0aW9uIGhhbmRsZU1heFBhZGRpbmcoY2hhcnRBcmVhKSB7XG4gIGNvbnN0IG1heFBhZGRpbmcgPSBjaGFydEFyZWEubWF4UGFkZGluZztcbiAgZnVuY3Rpb24gdXBkYXRlUG9zKHBvcykge1xuICAgIGNvbnN0IGNoYW5nZSA9IE1hdGgubWF4KG1heFBhZGRpbmdbcG9zXSAtIGNoYXJ0QXJlYVtwb3NdLCAwKTtcbiAgICBjaGFydEFyZWFbcG9zXSArPSBjaGFuZ2U7XG4gICAgcmV0dXJuIGNoYW5nZTtcbiAgfVxuICBjaGFydEFyZWEueSArPSB1cGRhdGVQb3MoJ3RvcCcpO1xuICBjaGFydEFyZWEueCArPSB1cGRhdGVQb3MoJ2xlZnQnKTtcbiAgdXBkYXRlUG9zKCdyaWdodCcpO1xuICB1cGRhdGVQb3MoJ2JvdHRvbScpO1xufVxuZnVuY3Rpb24gZ2V0TWFyZ2lucyhob3Jpem9udGFsLCBjaGFydEFyZWEpIHtcbiAgY29uc3QgbWF4UGFkZGluZyA9IGNoYXJ0QXJlYS5tYXhQYWRkaW5nO1xuICBmdW5jdGlvbiBtYXJnaW5Gb3JQb3NpdGlvbnMocG9zaXRpb25zKSB7XG4gICAgY29uc3QgbWFyZ2luID0ge1xuICAgICAgbGVmdDogMCxcbiAgICAgIHRvcDogMCxcbiAgICAgIHJpZ2h0OiAwLFxuICAgICAgYm90dG9tOiAwXG4gICAgfTtcbiAgICBwb3NpdGlvbnMuZm9yRWFjaChwb3MgPT4ge1xuICAgICAgbWFyZ2luW3Bvc10gPSBNYXRoLm1heChjaGFydEFyZWFbcG9zXSwgbWF4UGFkZGluZ1twb3NdKTtcbiAgICB9KTtcbiAgICByZXR1cm4gbWFyZ2luO1xuICB9XG4gIHJldHVybiBob3Jpem9udGFsID8gbWFyZ2luRm9yUG9zaXRpb25zKFsnbGVmdCcsICdyaWdodCddKSA6IG1hcmdpbkZvclBvc2l0aW9ucyhbJ3RvcCcsICdib3R0b20nXSk7XG59XG5mdW5jdGlvbiBmaXRCb3hlcyhib3hlcywgY2hhcnRBcmVhLCBwYXJhbXMsIHN0YWNrcykge1xuICBjb25zdCByZWZpdEJveGVzID0gW107XG4gIGxldCBpLCBpbGVuLCBsYXlvdXQsIGJveCwgcmVmaXQsIGNoYW5nZWQ7XG4gIGZvciAoaSA9IDAsIGlsZW4gPSBib3hlcy5sZW5ndGgsIHJlZml0ID0gMDsgaSA8IGlsZW47ICsraSkge1xuICAgIGxheW91dCA9IGJveGVzW2ldO1xuICAgIGJveCA9IGxheW91dC5ib3g7XG4gICAgYm94LnVwZGF0ZShsYXlvdXQud2lkdGggfHwgY2hhcnRBcmVhLncsIGxheW91dC5oZWlnaHQgfHwgY2hhcnRBcmVhLmgsIGdldE1hcmdpbnMobGF5b3V0Lmhvcml6b250YWwsIGNoYXJ0QXJlYSkpO1xuICAgIGNvbnN0IHtcbiAgICAgIHNhbWUsXG4gICAgICBvdGhlclxuICAgIH0gPSB1cGRhdGVEaW1zKGNoYXJ0QXJlYSwgcGFyYW1zLCBsYXlvdXQsIHN0YWNrcyk7XG4gICAgcmVmaXQgfD0gc2FtZSAmJiByZWZpdEJveGVzLmxlbmd0aDtcbiAgICBjaGFuZ2VkID0gY2hhbmdlZCB8fCBvdGhlcjtcbiAgICBpZiAoIWJveC5mdWxsU2l6ZSkge1xuICAgICAgcmVmaXRCb3hlcy5wdXNoKGxheW91dCk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZWZpdCAmJiBmaXRCb3hlcyhyZWZpdEJveGVzLCBjaGFydEFyZWEsIHBhcmFtcywgc3RhY2tzKSB8fCBjaGFuZ2VkO1xufVxuZnVuY3Rpb24gc2V0Qm94RGltcyhib3gsIGxlZnQsIHRvcCwgd2lkdGgsIGhlaWdodCkge1xuICBib3gudG9wID0gdG9wO1xuICBib3gubGVmdCA9IGxlZnQ7XG4gIGJveC5yaWdodCA9IGxlZnQgKyB3aWR0aDtcbiAgYm94LmJvdHRvbSA9IHRvcCArIGhlaWdodDtcbiAgYm94LndpZHRoID0gd2lkdGg7XG4gIGJveC5oZWlnaHQgPSBoZWlnaHQ7XG59XG5mdW5jdGlvbiBwbGFjZUJveGVzKGJveGVzLCBjaGFydEFyZWEsIHBhcmFtcywgc3RhY2tzKSB7XG4gIGNvbnN0IHVzZXJQYWRkaW5nID0gcGFyYW1zLnBhZGRpbmc7XG4gIGxldCB7XG4gICAgeCxcbiAgICB5XG4gIH0gPSBjaGFydEFyZWE7XG4gIGZvciAoY29uc3QgbGF5b3V0IG9mIGJveGVzKSB7XG4gICAgY29uc3QgYm94ID0gbGF5b3V0LmJveDtcbiAgICBjb25zdCBzdGFjayA9IHN0YWNrc1tsYXlvdXQuc3RhY2tdIHx8IHtcbiAgICAgIGNvdW50OiAxLFxuICAgICAgcGxhY2VkOiAwLFxuICAgICAgd2VpZ2h0OiAxXG4gICAgfTtcbiAgICBjb25zdCB3ZWlnaHQgPSBsYXlvdXQuc3RhY2tXZWlnaHQgLyBzdGFjay53ZWlnaHQgfHwgMTtcbiAgICBpZiAobGF5b3V0Lmhvcml6b250YWwpIHtcbiAgICAgIGNvbnN0IHdpZHRoID0gY2hhcnRBcmVhLncgKiB3ZWlnaHQ7XG4gICAgICBjb25zdCBoZWlnaHQgPSBzdGFjay5zaXplIHx8IGJveC5oZWlnaHQ7XG4gICAgICBpZiAoZGVmaW5lZChzdGFjay5zdGFydCkpIHtcbiAgICAgICAgeSA9IHN0YWNrLnN0YXJ0O1xuICAgICAgfVxuICAgICAgaWYgKGJveC5mdWxsU2l6ZSkge1xuICAgICAgICBzZXRCb3hEaW1zKGJveCwgdXNlclBhZGRpbmcubGVmdCwgeSwgcGFyYW1zLm91dGVyV2lkdGggLSB1c2VyUGFkZGluZy5yaWdodCAtIHVzZXJQYWRkaW5nLmxlZnQsIGhlaWdodCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXRCb3hEaW1zKGJveCwgY2hhcnRBcmVhLmxlZnQgKyBzdGFjay5wbGFjZWQsIHksIHdpZHRoLCBoZWlnaHQpO1xuICAgICAgfVxuICAgICAgc3RhY2suc3RhcnQgPSB5O1xuICAgICAgc3RhY2sucGxhY2VkICs9IHdpZHRoO1xuICAgICAgeSA9IGJveC5ib3R0b207XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGhlaWdodCA9IGNoYXJ0QXJlYS5oICogd2VpZ2h0O1xuICAgICAgY29uc3Qgd2lkdGggPSBzdGFjay5zaXplIHx8IGJveC53aWR0aDtcbiAgICAgIGlmIChkZWZpbmVkKHN0YWNrLnN0YXJ0KSkge1xuICAgICAgICB4ID0gc3RhY2suc3RhcnQ7XG4gICAgICB9XG4gICAgICBpZiAoYm94LmZ1bGxTaXplKSB7XG4gICAgICAgIHNldEJveERpbXMoYm94LCB4LCB1c2VyUGFkZGluZy50b3AsIHdpZHRoLCBwYXJhbXMub3V0ZXJIZWlnaHQgLSB1c2VyUGFkZGluZy5ib3R0b20gLSB1c2VyUGFkZGluZy50b3ApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2V0Qm94RGltcyhib3gsIHgsIGNoYXJ0QXJlYS50b3AgKyBzdGFjay5wbGFjZWQsIHdpZHRoLCBoZWlnaHQpO1xuICAgICAgfVxuICAgICAgc3RhY2suc3RhcnQgPSB4O1xuICAgICAgc3RhY2sucGxhY2VkICs9IGhlaWdodDtcbiAgICAgIHggPSBib3gucmlnaHQ7XG4gICAgfVxuICB9XG4gIGNoYXJ0QXJlYS54ID0geDtcbiAgY2hhcnRBcmVhLnkgPSB5O1xufVxudmFyIGxheW91dHMgPSB7XG4gIGFkZEJveChjaGFydCwgaXRlbSkge1xuICAgIGlmICghY2hhcnQuYm94ZXMpIHtcbiAgICAgIGNoYXJ0LmJveGVzID0gW107XG4gICAgfVxuICAgIGl0ZW0uZnVsbFNpemUgPSBpdGVtLmZ1bGxTaXplIHx8IGZhbHNlO1xuICAgIGl0ZW0ucG9zaXRpb24gPSBpdGVtLnBvc2l0aW9uIHx8ICd0b3AnO1xuICAgIGl0ZW0ud2VpZ2h0ID0gaXRlbS53ZWlnaHQgfHwgMDtcbiAgICBpdGVtLl9sYXllcnMgPSBpdGVtLl9sYXllcnMgfHwgZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIFt7XG4gICAgICAgIHo6IDAsXG4gICAgICAgIGRyYXcoY2hhcnRBcmVhKSB7XG4gICAgICAgICAgaXRlbS5kcmF3KGNoYXJ0QXJlYSk7XG4gICAgICAgIH1cbiAgICAgIH1dO1xuICAgIH07XG4gICAgY2hhcnQuYm94ZXMucHVzaChpdGVtKTtcbiAgfSxcbiAgcmVtb3ZlQm94KGNoYXJ0LCBsYXlvdXRJdGVtKSB7XG4gICAgY29uc3QgaW5kZXggPSBjaGFydC5ib3hlcyA/IGNoYXJ0LmJveGVzLmluZGV4T2YobGF5b3V0SXRlbSkgOiAtMTtcbiAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICBjaGFydC5ib3hlcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cbiAgfSxcbiAgY29uZmlndXJlKGNoYXJ0LCBpdGVtLCBvcHRpb25zKSB7XG4gICAgaXRlbS5mdWxsU2l6ZSA9IG9wdGlvbnMuZnVsbFNpemU7XG4gICAgaXRlbS5wb3NpdGlvbiA9IG9wdGlvbnMucG9zaXRpb247XG4gICAgaXRlbS53ZWlnaHQgPSBvcHRpb25zLndlaWdodDtcbiAgfSxcbiAgdXBkYXRlKGNoYXJ0LCB3aWR0aCwgaGVpZ2h0LCBtaW5QYWRkaW5nKSB7XG4gICAgaWYgKCFjaGFydCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBwYWRkaW5nID0gdG9QYWRkaW5nKGNoYXJ0Lm9wdGlvbnMubGF5b3V0LnBhZGRpbmcpO1xuICAgIGNvbnN0IGF2YWlsYWJsZVdpZHRoID0gTWF0aC5tYXgod2lkdGggLSBwYWRkaW5nLndpZHRoLCAwKTtcbiAgICBjb25zdCBhdmFpbGFibGVIZWlnaHQgPSBNYXRoLm1heChoZWlnaHQgLSBwYWRkaW5nLmhlaWdodCwgMCk7XG4gICAgY29uc3QgYm94ZXMgPSBidWlsZExheW91dEJveGVzKGNoYXJ0LmJveGVzKTtcbiAgICBjb25zdCB2ZXJ0aWNhbEJveGVzID0gYm94ZXMudmVydGljYWw7XG4gICAgY29uc3QgaG9yaXpvbnRhbEJveGVzID0gYm94ZXMuaG9yaXpvbnRhbDtcbiAgICBlYWNoKGNoYXJ0LmJveGVzLCBib3ggPT4ge1xuICAgICAgaWYgKHR5cGVvZiBib3guYmVmb3JlTGF5b3V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGJveC5iZWZvcmVMYXlvdXQoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCB2aXNpYmxlVmVydGljYWxCb3hDb3VudCA9IHZlcnRpY2FsQm94ZXMucmVkdWNlKCh0b3RhbCwgd3JhcCkgPT4gd3JhcC5ib3gub3B0aW9ucyAmJiB3cmFwLmJveC5vcHRpb25zLmRpc3BsYXkgPT09IGZhbHNlID8gdG90YWwgOiB0b3RhbCArIDEsIDApIHx8IDE7XG4gICAgY29uc3QgcGFyYW1zID0gT2JqZWN0LmZyZWV6ZSh7XG4gICAgICBvdXRlcldpZHRoOiB3aWR0aCxcbiAgICAgIG91dGVySGVpZ2h0OiBoZWlnaHQsXG4gICAgICBwYWRkaW5nLFxuICAgICAgYXZhaWxhYmxlV2lkdGgsXG4gICAgICBhdmFpbGFibGVIZWlnaHQsXG4gICAgICB2Qm94TWF4V2lkdGg6IGF2YWlsYWJsZVdpZHRoIC8gMiAvIHZpc2libGVWZXJ0aWNhbEJveENvdW50LFxuICAgICAgaEJveE1heEhlaWdodDogYXZhaWxhYmxlSGVpZ2h0IC8gMlxuICAgIH0pO1xuICAgIGNvbnN0IG1heFBhZGRpbmcgPSBPYmplY3QuYXNzaWduKHt9LCBwYWRkaW5nKTtcbiAgICB1cGRhdGVNYXhQYWRkaW5nKG1heFBhZGRpbmcsIHRvUGFkZGluZyhtaW5QYWRkaW5nKSk7XG4gICAgY29uc3QgY2hhcnRBcmVhID0gT2JqZWN0LmFzc2lnbih7XG4gICAgICBtYXhQYWRkaW5nLFxuICAgICAgdzogYXZhaWxhYmxlV2lkdGgsXG4gICAgICBoOiBhdmFpbGFibGVIZWlnaHQsXG4gICAgICB4OiBwYWRkaW5nLmxlZnQsXG4gICAgICB5OiBwYWRkaW5nLnRvcFxuICAgIH0sIHBhZGRpbmcpO1xuICAgIGNvbnN0IHN0YWNrcyA9IHNldExheW91dERpbXModmVydGljYWxCb3hlcy5jb25jYXQoaG9yaXpvbnRhbEJveGVzKSwgcGFyYW1zKTtcbiAgICBmaXRCb3hlcyhib3hlcy5mdWxsU2l6ZSwgY2hhcnRBcmVhLCBwYXJhbXMsIHN0YWNrcyk7XG4gICAgZml0Qm94ZXModmVydGljYWxCb3hlcywgY2hhcnRBcmVhLCBwYXJhbXMsIHN0YWNrcyk7XG4gICAgaWYgKGZpdEJveGVzKGhvcml6b250YWxCb3hlcywgY2hhcnRBcmVhLCBwYXJhbXMsIHN0YWNrcykpIHtcbiAgICAgIGZpdEJveGVzKHZlcnRpY2FsQm94ZXMsIGNoYXJ0QXJlYSwgcGFyYW1zLCBzdGFja3MpO1xuICAgIH1cbiAgICBoYW5kbGVNYXhQYWRkaW5nKGNoYXJ0QXJlYSk7XG4gICAgcGxhY2VCb3hlcyhib3hlcy5sZWZ0QW5kVG9wLCBjaGFydEFyZWEsIHBhcmFtcywgc3RhY2tzKTtcbiAgICBjaGFydEFyZWEueCArPSBjaGFydEFyZWEudztcbiAgICBjaGFydEFyZWEueSArPSBjaGFydEFyZWEuaDtcbiAgICBwbGFjZUJveGVzKGJveGVzLnJpZ2h0QW5kQm90dG9tLCBjaGFydEFyZWEsIHBhcmFtcywgc3RhY2tzKTtcbiAgICBjaGFydC5jaGFydEFyZWEgPSB7XG4gICAgICBsZWZ0OiBjaGFydEFyZWEubGVmdCxcbiAgICAgIHRvcDogY2hhcnRBcmVhLnRvcCxcbiAgICAgIHJpZ2h0OiBjaGFydEFyZWEubGVmdCArIGNoYXJ0QXJlYS53LFxuICAgICAgYm90dG9tOiBjaGFydEFyZWEudG9wICsgY2hhcnRBcmVhLmgsXG4gICAgICBoZWlnaHQ6IGNoYXJ0QXJlYS5oLFxuICAgICAgd2lkdGg6IGNoYXJ0QXJlYS53XG4gICAgfTtcbiAgICBlYWNoKGJveGVzLmNoYXJ0QXJlYSwgbGF5b3V0ID0+IHtcbiAgICAgIGNvbnN0IGJveCA9IGxheW91dC5ib3g7XG4gICAgICBPYmplY3QuYXNzaWduKGJveCwgY2hhcnQuY2hhcnRBcmVhKTtcbiAgICAgIGJveC51cGRhdGUoY2hhcnRBcmVhLncsIGNoYXJ0QXJlYS5oLCB7XG4gICAgICAgIGxlZnQ6IDAsXG4gICAgICAgIHRvcDogMCxcbiAgICAgICAgcmlnaHQ6IDAsXG4gICAgICAgIGJvdHRvbTogMFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn07XG5jbGFzcyBCYXNlUGxhdGZvcm0ge1xuICBhY3F1aXJlQ29udGV4dChjYW52YXMsIGFzcGVjdFJhdGlvKSB7fVxuICByZWxlYXNlQ29udGV4dChjb250ZXh0KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGFkZEV2ZW50TGlzdGVuZXIoY2hhcnQsIHR5cGUsIGxpc3RlbmVyKSB7fVxuICByZW1vdmVFdmVudExpc3RlbmVyKGNoYXJ0LCB0eXBlLCBsaXN0ZW5lcikge31cbiAgZ2V0RGV2aWNlUGl4ZWxSYXRpbygpIHtcbiAgICByZXR1cm4gMTtcbiAgfVxuICBnZXRNYXhpbXVtU2l6ZShlbGVtZW50LCB3aWR0aCwgaGVpZ2h0LCBhc3BlY3RSYXRpbykge1xuICAgIHdpZHRoID0gTWF0aC5tYXgoMCwgd2lkdGggfHwgZWxlbWVudC53aWR0aCk7XG4gICAgaGVpZ2h0ID0gaGVpZ2h0IHx8IGVsZW1lbnQuaGVpZ2h0O1xuICAgIHJldHVybiB7XG4gICAgICB3aWR0aCxcbiAgICAgIGhlaWdodDogTWF0aC5tYXgoMCwgYXNwZWN0UmF0aW8gPyBNYXRoLmZsb29yKHdpZHRoIC8gYXNwZWN0UmF0aW8pIDogaGVpZ2h0KVxuICAgIH07XG4gIH1cbiAgaXNBdHRhY2hlZChjYW52YXMpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICB1cGRhdGVDb25maWcoY29uZmlnKSB7fVxufVxuY2xhc3MgQmFzaWNQbGF0Zm9ybSBleHRlbmRzIEJhc2VQbGF0Zm9ybSB7XG4gIGFjcXVpcmVDb250ZXh0KGl0ZW0pIHtcbiAgICByZXR1cm4gaXRlbSAmJiBpdGVtLmdldENvbnRleHQgJiYgaXRlbS5nZXRDb250ZXh0KCcyZCcpIHx8IG51bGw7XG4gIH1cbiAgdXBkYXRlQ29uZmlnKGNvbmZpZykge1xuICAgIGNvbmZpZy5vcHRpb25zLmFuaW1hdGlvbiA9IGZhbHNlO1xuICB9XG59XG5jb25zdCBFWFBBTkRPX0tFWSA9ICckY2hhcnRqcyc7XG5jb25zdCBFVkVOVF9UWVBFUyA9IHtcbiAgdG91Y2hzdGFydDogJ21vdXNlZG93bicsXG4gIHRvdWNobW92ZTogJ21vdXNlbW92ZScsXG4gIHRvdWNoZW5kOiAnbW91c2V1cCcsXG4gIHBvaW50ZXJlbnRlcjogJ21vdXNlZW50ZXInLFxuICBwb2ludGVyZG93bjogJ21vdXNlZG93bicsXG4gIHBvaW50ZXJtb3ZlOiAnbW91c2Vtb3ZlJyxcbiAgcG9pbnRlcnVwOiAnbW91c2V1cCcsXG4gIHBvaW50ZXJsZWF2ZTogJ21vdXNlb3V0JyxcbiAgcG9pbnRlcm91dDogJ21vdXNlb3V0J1xufTtcbmNvbnN0IGlzTnVsbE9yRW1wdHkgPSB2YWx1ZSA9PiB2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gJyc7XG5mdW5jdGlvbiBpbml0Q2FudmFzKGNhbnZhcywgYXNwZWN0UmF0aW8pIHtcbiAgY29uc3Qgc3R5bGUgPSBjYW52YXMuc3R5bGU7XG4gIGNvbnN0IHJlbmRlckhlaWdodCA9IGNhbnZhcy5nZXRBdHRyaWJ1dGUoJ2hlaWdodCcpO1xuICBjb25zdCByZW5kZXJXaWR0aCA9IGNhbnZhcy5nZXRBdHRyaWJ1dGUoJ3dpZHRoJyk7XG4gIGNhbnZhc1tFWFBBTkRPX0tFWV0gPSB7XG4gICAgaW5pdGlhbDoge1xuICAgICAgaGVpZ2h0OiByZW5kZXJIZWlnaHQsXG4gICAgICB3aWR0aDogcmVuZGVyV2lkdGgsXG4gICAgICBzdHlsZToge1xuICAgICAgICBkaXNwbGF5OiBzdHlsZS5kaXNwbGF5LFxuICAgICAgICBoZWlnaHQ6IHN0eWxlLmhlaWdodCxcbiAgICAgICAgd2lkdGg6IHN0eWxlLndpZHRoXG4gICAgICB9XG4gICAgfVxuICB9O1xuICBzdHlsZS5kaXNwbGF5ID0gc3R5bGUuZGlzcGxheSB8fCAnYmxvY2snO1xuICBzdHlsZS5ib3hTaXppbmcgPSBzdHlsZS5ib3hTaXppbmcgfHwgJ2JvcmRlci1ib3gnO1xuICBpZiAoaXNOdWxsT3JFbXB0eShyZW5kZXJXaWR0aCkpIHtcbiAgICBjb25zdCBkaXNwbGF5V2lkdGggPSByZWFkVXNlZFNpemUoY2FudmFzLCAnd2lkdGgnKTtcbiAgICBpZiAoZGlzcGxheVdpZHRoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNhbnZhcy53aWR0aCA9IGRpc3BsYXlXaWR0aDtcbiAgICB9XG4gIH1cbiAgaWYgKGlzTnVsbE9yRW1wdHkocmVuZGVySGVpZ2h0KSkge1xuICAgIGlmIChjYW52YXMuc3R5bGUuaGVpZ2h0ID09PSAnJykge1xuICAgICAgY2FudmFzLmhlaWdodCA9IGNhbnZhcy53aWR0aCAvIChhc3BlY3RSYXRpbyB8fCAyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZGlzcGxheUhlaWdodCA9IHJlYWRVc2VkU2l6ZShjYW52YXMsICdoZWlnaHQnKTtcbiAgICAgIGlmIChkaXNwbGF5SGVpZ2h0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY2FudmFzLmhlaWdodCA9IGRpc3BsYXlIZWlnaHQ7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBjYW52YXM7XG59XG5jb25zdCBldmVudExpc3RlbmVyT3B0aW9ucyA9IHN1cHBvcnRzRXZlbnRMaXN0ZW5lck9wdGlvbnMgPyB7XG4gIHBhc3NpdmU6IHRydWVcbn0gOiBmYWxzZTtcbmZ1bmN0aW9uIGFkZExpc3RlbmVyKG5vZGUsIHR5cGUsIGxpc3RlbmVyKSB7XG4gIGlmIChub2RlKSB7XG4gICAgbm9kZS5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyLCBldmVudExpc3RlbmVyT3B0aW9ucyk7XG4gIH1cbn1cbmZ1bmN0aW9uIHJlbW92ZUxpc3RlbmVyKGNoYXJ0LCB0eXBlLCBsaXN0ZW5lcikge1xuICBpZiAoY2hhcnQgJiYgY2hhcnQuY2FudmFzKSB7XG4gICAgY2hhcnQuY2FudmFzLnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgbGlzdGVuZXIsIGV2ZW50TGlzdGVuZXJPcHRpb25zKTtcbiAgfVxufVxuZnVuY3Rpb24gZnJvbU5hdGl2ZUV2ZW50KGV2ZW50LCBjaGFydCkge1xuICBjb25zdCB0eXBlID0gRVZFTlRfVFlQRVNbZXZlbnQudHlwZV0gfHwgZXZlbnQudHlwZTtcbiAgY29uc3Qge1xuICAgIHgsXG4gICAgeVxuICB9ID0gZ2V0UmVsYXRpdmVQb3NpdGlvbihldmVudCwgY2hhcnQpO1xuICByZXR1cm4ge1xuICAgIHR5cGUsXG4gICAgY2hhcnQsXG4gICAgbmF0aXZlOiBldmVudCxcbiAgICB4OiB4ICE9PSB1bmRlZmluZWQgPyB4IDogbnVsbCxcbiAgICB5OiB5ICE9PSB1bmRlZmluZWQgPyB5IDogbnVsbFxuICB9O1xufVxuZnVuY3Rpb24gbm9kZUxpc3RDb250YWlucyhub2RlTGlzdCwgY2FudmFzKSB7XG4gIGZvciAoY29uc3Qgbm9kZSBvZiBub2RlTGlzdCkge1xuICAgIGlmIChub2RlID09PSBjYW52YXMgfHwgbm9kZS5jb250YWlucyhjYW52YXMpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGNyZWF0ZUF0dGFjaE9ic2VydmVyKGNoYXJ0LCB0eXBlLCBsaXN0ZW5lcikge1xuICBjb25zdCBjYW52YXMgPSBjaGFydC5jYW52YXM7XG4gIGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoZW50cmllcyA9PiB7XG4gICAgbGV0IHRyaWdnZXIgPSBmYWxzZTtcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJpZXMpIHtcbiAgICAgIHRyaWdnZXIgPSB0cmlnZ2VyIHx8IG5vZGVMaXN0Q29udGFpbnMoZW50cnkuYWRkZWROb2RlcywgY2FudmFzKTtcbiAgICAgIHRyaWdnZXIgPSB0cmlnZ2VyICYmICFub2RlTGlzdENvbnRhaW5zKGVudHJ5LnJlbW92ZWROb2RlcywgY2FudmFzKTtcbiAgICB9XG4gICAgaWYgKHRyaWdnZXIpIHtcbiAgICAgIGxpc3RlbmVyKCk7XG4gICAgfVxuICB9KTtcbiAgb2JzZXJ2ZXIub2JzZXJ2ZShkb2N1bWVudCwge1xuICAgIGNoaWxkTGlzdDogdHJ1ZSxcbiAgICBzdWJ0cmVlOiB0cnVlXG4gIH0pO1xuICByZXR1cm4gb2JzZXJ2ZXI7XG59XG5mdW5jdGlvbiBjcmVhdGVEZXRhY2hPYnNlcnZlcihjaGFydCwgdHlwZSwgbGlzdGVuZXIpIHtcbiAgY29uc3QgY2FudmFzID0gY2hhcnQuY2FudmFzO1xuICBjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKGVudHJpZXMgPT4ge1xuICAgIGxldCB0cmlnZ2VyID0gZmFsc2U7XG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7XG4gICAgICB0cmlnZ2VyID0gdHJpZ2dlciB8fCBub2RlTGlzdENvbnRhaW5zKGVudHJ5LnJlbW92ZWROb2RlcywgY2FudmFzKTtcbiAgICAgIHRyaWdnZXIgPSB0cmlnZ2VyICYmICFub2RlTGlzdENvbnRhaW5zKGVudHJ5LmFkZGVkTm9kZXMsIGNhbnZhcyk7XG4gICAgfVxuICAgIGlmICh0cmlnZ2VyKSB7XG4gICAgICBsaXN0ZW5lcigpO1xuICAgIH1cbiAgfSk7XG4gIG9ic2VydmVyLm9ic2VydmUoZG9jdW1lbnQsIHtcbiAgICBjaGlsZExpc3Q6IHRydWUsXG4gICAgc3VidHJlZTogdHJ1ZVxuICB9KTtcbiAgcmV0dXJuIG9ic2VydmVyO1xufVxuY29uc3QgZHJwTGlzdGVuaW5nQ2hhcnRzID0gbmV3IE1hcCgpO1xubGV0IG9sZERldmljZVBpeGVsUmF0aW8gPSAwO1xuZnVuY3Rpb24gb25XaW5kb3dSZXNpemUoKSB7XG4gIGNvbnN0IGRwciA9IHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvO1xuICBpZiAoZHByID09PSBvbGREZXZpY2VQaXhlbFJhdGlvKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIG9sZERldmljZVBpeGVsUmF0aW8gPSBkcHI7XG4gIGRycExpc3RlbmluZ0NoYXJ0cy5mb3JFYWNoKChyZXNpemUsIGNoYXJ0KSA9PiB7XG4gICAgaWYgKGNoYXJ0LmN1cnJlbnREZXZpY2VQaXhlbFJhdGlvICE9PSBkcHIpIHtcbiAgICAgIHJlc2l6ZSgpO1xuICAgIH1cbiAgfSk7XG59XG5mdW5jdGlvbiBsaXN0ZW5EZXZpY2VQaXhlbFJhdGlvQ2hhbmdlcyhjaGFydCwgcmVzaXplKSB7XG4gIGlmICghZHJwTGlzdGVuaW5nQ2hhcnRzLnNpemUpIHtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgb25XaW5kb3dSZXNpemUpO1xuICB9XG4gIGRycExpc3RlbmluZ0NoYXJ0cy5zZXQoY2hhcnQsIHJlc2l6ZSk7XG59XG5mdW5jdGlvbiB1bmxpc3RlbkRldmljZVBpeGVsUmF0aW9DaGFuZ2VzKGNoYXJ0KSB7XG4gIGRycExpc3RlbmluZ0NoYXJ0cy5kZWxldGUoY2hhcnQpO1xuICBpZiAoIWRycExpc3RlbmluZ0NoYXJ0cy5zaXplKSB7XG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIG9uV2luZG93UmVzaXplKTtcbiAgfVxufVxuZnVuY3Rpb24gY3JlYXRlUmVzaXplT2JzZXJ2ZXIoY2hhcnQsIHR5cGUsIGxpc3RlbmVyKSB7XG4gIGNvbnN0IGNhbnZhcyA9IGNoYXJ0LmNhbnZhcztcbiAgY29uc3QgY29udGFpbmVyID0gY2FudmFzICYmIF9nZXRQYXJlbnROb2RlKGNhbnZhcyk7XG4gIGlmICghY29udGFpbmVyKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IHJlc2l6ZSA9IHRocm90dGxlZCgod2lkdGgsIGhlaWdodCkgPT4ge1xuICAgIGNvbnN0IHcgPSBjb250YWluZXIuY2xpZW50V2lkdGg7XG4gICAgbGlzdGVuZXIod2lkdGgsIGhlaWdodCk7XG4gICAgaWYgKHcgPCBjb250YWluZXIuY2xpZW50V2lkdGgpIHtcbiAgICAgIGxpc3RlbmVyKCk7XG4gICAgfVxuICB9LCB3aW5kb3cpO1xuICBjb25zdCBvYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcihlbnRyaWVzID0+IHtcbiAgICBjb25zdCBlbnRyeSA9IGVudHJpZXNbMF07XG4gICAgY29uc3Qgd2lkdGggPSBlbnRyeS5jb250ZW50UmVjdC53aWR0aDtcbiAgICBjb25zdCBoZWlnaHQgPSBlbnRyeS5jb250ZW50UmVjdC5oZWlnaHQ7XG4gICAgaWYgKHdpZHRoID09PSAwICYmIGhlaWdodCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICByZXNpemUod2lkdGgsIGhlaWdodCk7XG4gIH0pO1xuICBvYnNlcnZlci5vYnNlcnZlKGNvbnRhaW5lcik7XG4gIGxpc3RlbkRldmljZVBpeGVsUmF0aW9DaGFuZ2VzKGNoYXJ0LCByZXNpemUpO1xuICByZXR1cm4gb2JzZXJ2ZXI7XG59XG5mdW5jdGlvbiByZWxlYXNlT2JzZXJ2ZXIoY2hhcnQsIHR5cGUsIG9ic2VydmVyKSB7XG4gIGlmIChvYnNlcnZlcikge1xuICAgIG9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgfVxuICBpZiAodHlwZSA9PT0gJ3Jlc2l6ZScpIHtcbiAgICB1bmxpc3RlbkRldmljZVBpeGVsUmF0aW9DaGFuZ2VzKGNoYXJ0KTtcbiAgfVxufVxuZnVuY3Rpb24gY3JlYXRlUHJveHlBbmRMaXN0ZW4oY2hhcnQsIHR5cGUsIGxpc3RlbmVyKSB7XG4gIGNvbnN0IGNhbnZhcyA9IGNoYXJ0LmNhbnZhcztcbiAgY29uc3QgcHJveHkgPSB0aHJvdHRsZWQoZXZlbnQgPT4ge1xuICAgIGlmIChjaGFydC5jdHggIT09IG51bGwpIHtcbiAgICAgIGxpc3RlbmVyKGZyb21OYXRpdmVFdmVudChldmVudCwgY2hhcnQpKTtcbiAgICB9XG4gIH0sIGNoYXJ0KTtcbiAgYWRkTGlzdGVuZXIoY2FudmFzLCB0eXBlLCBwcm94eSk7XG4gIHJldHVybiBwcm94eTtcbn1cbmNsYXNzIERvbVBsYXRmb3JtIGV4dGVuZHMgQmFzZVBsYXRmb3JtIHtcbiAgYWNxdWlyZUNvbnRleHQoY2FudmFzLCBhc3BlY3RSYXRpbykge1xuICAgIGNvbnN0IGNvbnRleHQgPSBjYW52YXMgJiYgY2FudmFzLmdldENvbnRleHQgJiYgY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG4gICAgaWYgKGNvbnRleHQgJiYgY29udGV4dC5jYW52YXMgPT09IGNhbnZhcykge1xuICAgICAgaW5pdENhbnZhcyhjYW52YXMsIGFzcGVjdFJhdGlvKTtcbiAgICAgIHJldHVybiBjb250ZXh0O1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZWxlYXNlQ29udGV4dChjb250ZXh0KSB7XG4gICAgY29uc3QgY2FudmFzID0gY29udGV4dC5jYW52YXM7XG4gICAgaWYgKCFjYW52YXNbRVhQQU5ET19LRVldKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGluaXRpYWwgPSBjYW52YXNbRVhQQU5ET19LRVldLmluaXRpYWw7XG4gICAgWydoZWlnaHQnLCAnd2lkdGgnXS5mb3JFYWNoKHByb3AgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSBpbml0aWFsW3Byb3BdO1xuICAgICAgaWYgKGlzTnVsbE9yVW5kZWYodmFsdWUpKSB7XG4gICAgICAgIGNhbnZhcy5yZW1vdmVBdHRyaWJ1dGUocHJvcCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjYW52YXMuc2V0QXR0cmlidXRlKHByb3AsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBzdHlsZSA9IGluaXRpYWwuc3R5bGUgfHwge307XG4gICAgT2JqZWN0LmtleXMoc3R5bGUpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGNhbnZhcy5zdHlsZVtrZXldID0gc3R5bGVba2V5XTtcbiAgICB9KTtcbiAgICBjYW52YXMud2lkdGggPSBjYW52YXMud2lkdGg7XG4gICAgZGVsZXRlIGNhbnZhc1tFWFBBTkRPX0tFWV07XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgYWRkRXZlbnRMaXN0ZW5lcihjaGFydCwgdHlwZSwgbGlzdGVuZXIpIHtcbiAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoY2hhcnQsIHR5cGUpO1xuICAgIGNvbnN0IHByb3hpZXMgPSBjaGFydC4kcHJveGllcyB8fCAoY2hhcnQuJHByb3hpZXMgPSB7fSk7XG4gICAgY29uc3QgaGFuZGxlcnMgPSB7XG4gICAgICBhdHRhY2g6IGNyZWF0ZUF0dGFjaE9ic2VydmVyLFxuICAgICAgZGV0YWNoOiBjcmVhdGVEZXRhY2hPYnNlcnZlcixcbiAgICAgIHJlc2l6ZTogY3JlYXRlUmVzaXplT2JzZXJ2ZXJcbiAgICB9O1xuICAgIGNvbnN0IGhhbmRsZXIgPSBoYW5kbGVyc1t0eXBlXSB8fCBjcmVhdGVQcm94eUFuZExpc3RlbjtcbiAgICBwcm94aWVzW3R5cGVdID0gaGFuZGxlcihjaGFydCwgdHlwZSwgbGlzdGVuZXIpO1xuICB9XG4gIHJlbW92ZUV2ZW50TGlzdGVuZXIoY2hhcnQsIHR5cGUpIHtcbiAgICBjb25zdCBwcm94aWVzID0gY2hhcnQuJHByb3hpZXMgfHwgKGNoYXJ0LiRwcm94aWVzID0ge30pO1xuICAgIGNvbnN0IHByb3h5ID0gcHJveGllc1t0eXBlXTtcbiAgICBpZiAoIXByb3h5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGhhbmRsZXJzID0ge1xuICAgICAgYXR0YWNoOiByZWxlYXNlT2JzZXJ2ZXIsXG4gICAgICBkZXRhY2g6IHJlbGVhc2VPYnNlcnZlcixcbiAgICAgIHJlc2l6ZTogcmVsZWFzZU9ic2VydmVyXG4gICAgfTtcbiAgICBjb25zdCBoYW5kbGVyID0gaGFuZGxlcnNbdHlwZV0gfHwgcmVtb3ZlTGlzdGVuZXI7XG4gICAgaGFuZGxlcihjaGFydCwgdHlwZSwgcHJveHkpO1xuICAgIHByb3hpZXNbdHlwZV0gPSB1bmRlZmluZWQ7XG4gIH1cbiAgZ2V0RGV2aWNlUGl4ZWxSYXRpbygpIHtcbiAgICByZXR1cm4gd2luZG93LmRldmljZVBpeGVsUmF0aW87XG4gIH1cbiAgZ2V0TWF4aW11bVNpemUoY2FudmFzLCB3aWR0aCwgaGVpZ2h0LCBhc3BlY3RSYXRpbykge1xuICAgIHJldHVybiBnZXRNYXhpbXVtU2l6ZShjYW52YXMsIHdpZHRoLCBoZWlnaHQsIGFzcGVjdFJhdGlvKTtcbiAgfVxuICBpc0F0dGFjaGVkKGNhbnZhcykge1xuICAgIGNvbnN0IGNvbnRhaW5lciA9IGNhbnZhcyAmJiBfZ2V0UGFyZW50Tm9kZShjYW52YXMpO1xuICAgIHJldHVybiAhIShjb250YWluZXIgJiYgY29udGFpbmVyLmlzQ29ubmVjdGVkKTtcbiAgfVxufVxuZnVuY3Rpb24gX2RldGVjdFBsYXRmb3JtKGNhbnZhcykge1xuICBpZiAoIV9pc0RvbVN1cHBvcnRlZCgpIHx8IHR5cGVvZiBPZmZzY3JlZW5DYW52YXMgIT09ICd1bmRlZmluZWQnICYmIGNhbnZhcyBpbnN0YW5jZW9mIE9mZnNjcmVlbkNhbnZhcykge1xuICAgIHJldHVybiBCYXNpY1BsYXRmb3JtO1xuICB9XG4gIHJldHVybiBEb21QbGF0Zm9ybTtcbn1cbmNsYXNzIEVsZW1lbnQge1xuICBzdGF0aWMgZGVmYXVsdHMgPSB7fTtcbiAgc3RhdGljIGRlZmF1bHRSb3V0ZXMgPSB1bmRlZmluZWQ7XG4gIHg7XG4gIHk7XG4gIGFjdGl2ZSA9IGZhbHNlO1xuICBvcHRpb25zO1xuICAkYW5pbWF0aW9ucztcbiAgdG9vbHRpcFBvc2l0aW9uKHVzZUZpbmFsUG9zaXRpb24pIHtcbiAgICBjb25zdCB7XG4gICAgICB4LFxuICAgICAgeVxuICAgIH0gPSB0aGlzLmdldFByb3BzKFsneCcsICd5J10sIHVzZUZpbmFsUG9zaXRpb24pO1xuICAgIHJldHVybiB7XG4gICAgICB4LFxuICAgICAgeVxuICAgIH07XG4gIH1cbiAgaGFzVmFsdWUoKSB7XG4gICAgcmV0dXJuIGlzTnVtYmVyKHRoaXMueCkgJiYgaXNOdW1iZXIodGhpcy55KTtcbiAgfVxuICBnZXRQcm9wcyhwcm9wcywgZmluYWwpIHtcbiAgICBjb25zdCBhbmltcyA9IHRoaXMuJGFuaW1hdGlvbnM7XG4gICAgaWYgKCFmaW5hbCB8fCAhYW5pbXMpIHtcbiAgICAgIC8vIGxldCdzIG5vdCBjcmVhdGUgYW4gb2JqZWN0LCBpZiBub3QgbmVlZGVkXG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgY29uc3QgcmV0ID0ge307XG4gICAgcHJvcHMuZm9yRWFjaChwcm9wID0+IHtcbiAgICAgIHJldFtwcm9wXSA9IGFuaW1zW3Byb3BdICYmIGFuaW1zW3Byb3BdLmFjdGl2ZSgpID8gYW5pbXNbcHJvcF0uX3RvIDogdGhpc1twcm9wXTtcbiAgICB9KTtcbiAgICByZXR1cm4gcmV0O1xuICB9XG59XG5mdW5jdGlvbiBhdXRvU2tpcChzY2FsZSwgdGlja3MpIHtcbiAgY29uc3QgdGlja09wdHMgPSBzY2FsZS5vcHRpb25zLnRpY2tzO1xuICBjb25zdCBkZXRlcm1pbmVkTWF4VGlja3MgPSBkZXRlcm1pbmVNYXhUaWNrcyhzY2FsZSk7XG4gIGNvbnN0IHRpY2tzTGltaXQgPSBNYXRoLm1pbih0aWNrT3B0cy5tYXhUaWNrc0xpbWl0IHx8IGRldGVybWluZWRNYXhUaWNrcywgZGV0ZXJtaW5lZE1heFRpY2tzKTtcbiAgY29uc3QgbWFqb3JJbmRpY2VzID0gdGlja09wdHMubWFqb3IuZW5hYmxlZCA/IGdldE1ham9ySW5kaWNlcyh0aWNrcykgOiBbXTtcbiAgY29uc3QgbnVtTWFqb3JJbmRpY2VzID0gbWFqb3JJbmRpY2VzLmxlbmd0aDtcbiAgY29uc3QgZmlyc3QgPSBtYWpvckluZGljZXNbMF07XG4gIGNvbnN0IGxhc3QgPSBtYWpvckluZGljZXNbbnVtTWFqb3JJbmRpY2VzIC0gMV07XG4gIGNvbnN0IG5ld1RpY2tzID0gW107XG4gIGlmIChudW1NYWpvckluZGljZXMgPiB0aWNrc0xpbWl0KSB7XG4gICAgc2tpcE1ham9ycyh0aWNrcywgbmV3VGlja3MsIG1ham9ySW5kaWNlcywgbnVtTWFqb3JJbmRpY2VzIC8gdGlja3NMaW1pdCk7XG4gICAgcmV0dXJuIG5ld1RpY2tzO1xuICB9XG4gIGNvbnN0IHNwYWNpbmcgPSBjYWxjdWxhdGVTcGFjaW5nKG1ham9ySW5kaWNlcywgdGlja3MsIHRpY2tzTGltaXQpO1xuICBpZiAobnVtTWFqb3JJbmRpY2VzID4gMCkge1xuICAgIGxldCBpLCBpbGVuO1xuICAgIGNvbnN0IGF2Z01ham9yU3BhY2luZyA9IG51bU1ham9ySW5kaWNlcyA+IDEgPyBNYXRoLnJvdW5kKChsYXN0IC0gZmlyc3QpIC8gKG51bU1ham9ySW5kaWNlcyAtIDEpKSA6IG51bGw7XG4gICAgc2tpcCh0aWNrcywgbmV3VGlja3MsIHNwYWNpbmcsIGlzTnVsbE9yVW5kZWYoYXZnTWFqb3JTcGFjaW5nKSA/IDAgOiBmaXJzdCAtIGF2Z01ham9yU3BhY2luZywgZmlyc3QpO1xuICAgIGZvciAoaSA9IDAsIGlsZW4gPSBudW1NYWpvckluZGljZXMgLSAxOyBpIDwgaWxlbjsgaSsrKSB7XG4gICAgICBza2lwKHRpY2tzLCBuZXdUaWNrcywgc3BhY2luZywgbWFqb3JJbmRpY2VzW2ldLCBtYWpvckluZGljZXNbaSArIDFdKTtcbiAgICB9XG4gICAgc2tpcCh0aWNrcywgbmV3VGlja3MsIHNwYWNpbmcsIGxhc3QsIGlzTnVsbE9yVW5kZWYoYXZnTWFqb3JTcGFjaW5nKSA/IHRpY2tzLmxlbmd0aCA6IGxhc3QgKyBhdmdNYWpvclNwYWNpbmcpO1xuICAgIHJldHVybiBuZXdUaWNrcztcbiAgfVxuICBza2lwKHRpY2tzLCBuZXdUaWNrcywgc3BhY2luZyk7XG4gIHJldHVybiBuZXdUaWNrcztcbn1cbmZ1bmN0aW9uIGRldGVybWluZU1heFRpY2tzKHNjYWxlKSB7XG4gIGNvbnN0IG9mZnNldCA9IHNjYWxlLm9wdGlvbnMub2Zmc2V0O1xuICBjb25zdCB0aWNrTGVuZ3RoID0gc2NhbGUuX3RpY2tTaXplKCk7XG4gIGNvbnN0IG1heFNjYWxlID0gc2NhbGUuX2xlbmd0aCAvIHRpY2tMZW5ndGggKyAob2Zmc2V0ID8gMCA6IDEpO1xuICBjb25zdCBtYXhDaGFydCA9IHNjYWxlLl9tYXhMZW5ndGggLyB0aWNrTGVuZ3RoO1xuICByZXR1cm4gTWF0aC5mbG9vcihNYXRoLm1pbihtYXhTY2FsZSwgbWF4Q2hhcnQpKTtcbn1cbmZ1bmN0aW9uIGNhbGN1bGF0ZVNwYWNpbmcobWFqb3JJbmRpY2VzLCB0aWNrcywgdGlja3NMaW1pdCkge1xuICBjb25zdCBldmVuTWFqb3JTcGFjaW5nID0gZ2V0RXZlblNwYWNpbmcobWFqb3JJbmRpY2VzKTtcbiAgY29uc3Qgc3BhY2luZyA9IHRpY2tzLmxlbmd0aCAvIHRpY2tzTGltaXQ7XG4gIGlmICghZXZlbk1ham9yU3BhY2luZykge1xuICAgIHJldHVybiBNYXRoLm1heChzcGFjaW5nLCAxKTtcbiAgfVxuICBjb25zdCBmYWN0b3JzID0gX2ZhY3Rvcml6ZShldmVuTWFqb3JTcGFjaW5nKTtcbiAgZm9yIChsZXQgaSA9IDAsIGlsZW4gPSBmYWN0b3JzLmxlbmd0aCAtIDE7IGkgPCBpbGVuOyBpKyspIHtcbiAgICBjb25zdCBmYWN0b3IgPSBmYWN0b3JzW2ldO1xuICAgIGlmIChmYWN0b3IgPiBzcGFjaW5nKSB7XG4gICAgICByZXR1cm4gZmFjdG9yO1xuICAgIH1cbiAgfVxuICByZXR1cm4gTWF0aC5tYXgoc3BhY2luZywgMSk7XG59XG5mdW5jdGlvbiBnZXRNYWpvckluZGljZXModGlja3MpIHtcbiAgY29uc3QgcmVzdWx0ID0gW107XG4gIGxldCBpLCBpbGVuO1xuICBmb3IgKGkgPSAwLCBpbGVuID0gdGlja3MubGVuZ3RoOyBpIDwgaWxlbjsgaSsrKSB7XG4gICAgaWYgKHRpY2tzW2ldLm1ham9yKSB7XG4gICAgICByZXN1bHQucHVzaChpKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cbmZ1bmN0aW9uIHNraXBNYWpvcnModGlja3MsIG5ld1RpY2tzLCBtYWpvckluZGljZXMsIHNwYWNpbmcpIHtcbiAgbGV0IGNvdW50ID0gMDtcbiAgbGV0IG5leHQgPSBtYWpvckluZGljZXNbMF07XG4gIGxldCBpO1xuICBzcGFjaW5nID0gTWF0aC5jZWlsKHNwYWNpbmcpO1xuICBmb3IgKGkgPSAwOyBpIDwgdGlja3MubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoaSA9PT0gbmV4dCkge1xuICAgICAgbmV3VGlja3MucHVzaCh0aWNrc1tpXSk7XG4gICAgICBjb3VudCsrO1xuICAgICAgbmV4dCA9IG1ham9ySW5kaWNlc1tjb3VudCAqIHNwYWNpbmddO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gc2tpcCh0aWNrcywgbmV3VGlja3MsIHNwYWNpbmcsIG1ham9yU3RhcnQsIG1ham9yRW5kKSB7XG4gIGNvbnN0IHN0YXJ0ID0gdmFsdWVPckRlZmF1bHQobWFqb3JTdGFydCwgMCk7XG4gIGNvbnN0IGVuZCA9IE1hdGgubWluKHZhbHVlT3JEZWZhdWx0KG1ham9yRW5kLCB0aWNrcy5sZW5ndGgpLCB0aWNrcy5sZW5ndGgpO1xuICBsZXQgY291bnQgPSAwO1xuICBsZXQgbGVuZ3RoLCBpLCBuZXh0O1xuICBzcGFjaW5nID0gTWF0aC5jZWlsKHNwYWNpbmcpO1xuICBpZiAobWFqb3JFbmQpIHtcbiAgICBsZW5ndGggPSBtYWpvckVuZCAtIG1ham9yU3RhcnQ7XG4gICAgc3BhY2luZyA9IGxlbmd0aCAvIE1hdGguZmxvb3IobGVuZ3RoIC8gc3BhY2luZyk7XG4gIH1cbiAgbmV4dCA9IHN0YXJ0O1xuICB3aGlsZSAobmV4dCA8IDApIHtcbiAgICBjb3VudCsrO1xuICAgIG5leHQgPSBNYXRoLnJvdW5kKHN0YXJ0ICsgY291bnQgKiBzcGFjaW5nKTtcbiAgfVxuICBmb3IgKGkgPSBNYXRoLm1heChzdGFydCwgMCk7IGkgPCBlbmQ7IGkrKykge1xuICAgIGlmIChpID09PSBuZXh0KSB7XG4gICAgICBuZXdUaWNrcy5wdXNoKHRpY2tzW2ldKTtcbiAgICAgIGNvdW50Kys7XG4gICAgICBuZXh0ID0gTWF0aC5yb3VuZChzdGFydCArIGNvdW50ICogc3BhY2luZyk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBnZXRFdmVuU3BhY2luZyhhcnIpIHtcbiAgY29uc3QgbGVuID0gYXJyLmxlbmd0aDtcbiAgbGV0IGksIGRpZmY7XG4gIGlmIChsZW4gPCAyKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGZvciAoZGlmZiA9IGFyclswXSwgaSA9IDE7IGkgPCBsZW47ICsraSkge1xuICAgIGlmIChhcnJbaV0gLSBhcnJbaSAtIDFdICE9PSBkaWZmKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIHJldHVybiBkaWZmO1xufVxuY29uc3QgcmV2ZXJzZUFsaWduID0gYWxpZ24gPT4gYWxpZ24gPT09ICdsZWZ0JyA/ICdyaWdodCcgOiBhbGlnbiA9PT0gJ3JpZ2h0JyA/ICdsZWZ0JyA6IGFsaWduO1xuY29uc3Qgb2Zmc2V0RnJvbUVkZ2UgPSAoc2NhbGUsIGVkZ2UsIG9mZnNldCkgPT4gZWRnZSA9PT0gJ3RvcCcgfHwgZWRnZSA9PT0gJ2xlZnQnID8gc2NhbGVbZWRnZV0gKyBvZmZzZXQgOiBzY2FsZVtlZGdlXSAtIG9mZnNldDtcbmNvbnN0IGdldFRpY2tzTGltaXQgPSAodGlja3NMZW5ndGgsIG1heFRpY2tzTGltaXQpID0+IE1hdGgubWluKG1heFRpY2tzTGltaXQgfHwgdGlja3NMZW5ndGgsIHRpY2tzTGVuZ3RoKTtcbmZ1bmN0aW9uIHNhbXBsZShhcnIsIG51bUl0ZW1zKSB7XG4gIGNvbnN0IHJlc3VsdCA9IFtdO1xuICBjb25zdCBpbmNyZW1lbnQgPSBhcnIubGVuZ3RoIC8gbnVtSXRlbXM7XG4gIGNvbnN0IGxlbiA9IGFyci5sZW5ndGg7XG4gIGxldCBpID0gMDtcbiAgZm9yICg7IGkgPCBsZW47IGkgKz0gaW5jcmVtZW50KSB7XG4gICAgcmVzdWx0LnB1c2goYXJyW01hdGguZmxvb3IoaSldKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuZnVuY3Rpb24gZ2V0UGl4ZWxGb3JHcmlkTGluZShzY2FsZSwgaW5kZXgsIG9mZnNldEdyaWRMaW5lcykge1xuICBjb25zdCBsZW5ndGggPSBzY2FsZS50aWNrcy5sZW5ndGg7XG4gIGNvbnN0IHZhbGlkSW5kZXggPSBNYXRoLm1pbihpbmRleCwgbGVuZ3RoIC0gMSk7XG4gIGNvbnN0IHN0YXJ0ID0gc2NhbGUuX3N0YXJ0UGl4ZWw7XG4gIGNvbnN0IGVuZCA9IHNjYWxlLl9lbmRQaXhlbDtcbiAgY29uc3QgZXBzaWxvbiA9IDFlLTY7XG4gIGxldCBsaW5lVmFsdWUgPSBzY2FsZS5nZXRQaXhlbEZvclRpY2sodmFsaWRJbmRleCk7XG4gIGxldCBvZmZzZXQ7XG4gIGlmIChvZmZzZXRHcmlkTGluZXMpIHtcbiAgICBpZiAobGVuZ3RoID09PSAxKSB7XG4gICAgICBvZmZzZXQgPSBNYXRoLm1heChsaW5lVmFsdWUgLSBzdGFydCwgZW5kIC0gbGluZVZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKGluZGV4ID09PSAwKSB7XG4gICAgICBvZmZzZXQgPSAoc2NhbGUuZ2V0UGl4ZWxGb3JUaWNrKDEpIC0gbGluZVZhbHVlKSAvIDI7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9mZnNldCA9IChsaW5lVmFsdWUgLSBzY2FsZS5nZXRQaXhlbEZvclRpY2sodmFsaWRJbmRleCAtIDEpKSAvIDI7XG4gICAgfVxuICAgIGxpbmVWYWx1ZSArPSB2YWxpZEluZGV4IDwgaW5kZXggPyBvZmZzZXQgOiAtb2Zmc2V0O1xuICAgIGlmIChsaW5lVmFsdWUgPCBzdGFydCAtIGVwc2lsb24gfHwgbGluZVZhbHVlID4gZW5kICsgZXBzaWxvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbGluZVZhbHVlO1xufVxuZnVuY3Rpb24gZ2FyYmFnZUNvbGxlY3QoY2FjaGVzLCBsZW5ndGgpIHtcbiAgZWFjaChjYWNoZXMsIGNhY2hlID0+IHtcbiAgICBjb25zdCBnYyA9IGNhY2hlLmdjO1xuICAgIGNvbnN0IGdjTGVuID0gZ2MubGVuZ3RoIC8gMjtcbiAgICBsZXQgaTtcbiAgICBpZiAoZ2NMZW4gPiBsZW5ndGgpIHtcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBnY0xlbjsgKytpKSB7XG4gICAgICAgIGRlbGV0ZSBjYWNoZS5kYXRhW2djW2ldXTtcbiAgICAgIH1cbiAgICAgIGdjLnNwbGljZSgwLCBnY0xlbik7XG4gICAgfVxuICB9KTtcbn1cbmZ1bmN0aW9uIGdldFRpY2tNYXJrTGVuZ3RoKG9wdGlvbnMpIHtcbiAgcmV0dXJuIG9wdGlvbnMuZHJhd1RpY2tzID8gb3B0aW9ucy50aWNrTGVuZ3RoIDogMDtcbn1cbmZ1bmN0aW9uIGdldFRpdGxlSGVpZ2h0KG9wdGlvbnMsIGZhbGxiYWNrKSB7XG4gIGlmICghb3B0aW9ucy5kaXNwbGF5KSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cbiAgY29uc3QgZm9udCA9IHRvRm9udChvcHRpb25zLmZvbnQsIGZhbGxiYWNrKTtcbiAgY29uc3QgcGFkZGluZyA9IHRvUGFkZGluZyhvcHRpb25zLnBhZGRpbmcpO1xuICBjb25zdCBsaW5lcyA9IGlzQXJyYXkob3B0aW9ucy50ZXh0KSA/IG9wdGlvbnMudGV4dC5sZW5ndGggOiAxO1xuICByZXR1cm4gbGluZXMgKiBmb250LmxpbmVIZWlnaHQgKyBwYWRkaW5nLmhlaWdodDtcbn1cbmZ1bmN0aW9uIGNyZWF0ZVNjYWxlQ29udGV4dChwYXJlbnQsIHNjYWxlKSB7XG4gIHJldHVybiBjcmVhdGVDb250ZXh0KHBhcmVudCwge1xuICAgIHNjYWxlLFxuICAgIHR5cGU6ICdzY2FsZSdcbiAgfSk7XG59XG5mdW5jdGlvbiBjcmVhdGVUaWNrQ29udGV4dChwYXJlbnQsIGluZGV4LCB0aWNrKSB7XG4gIHJldHVybiBjcmVhdGVDb250ZXh0KHBhcmVudCwge1xuICAgIHRpY2ssXG4gICAgaW5kZXgsXG4gICAgdHlwZTogJ3RpY2snXG4gIH0pO1xufVxuZnVuY3Rpb24gdGl0bGVBbGlnbihhbGlnbiwgcG9zaXRpb24sIHJldmVyc2UpIHtcbiAgbGV0IHJldCA9IF90b0xlZnRSaWdodENlbnRlcihhbGlnbik7XG4gIGlmIChyZXZlcnNlICYmIHBvc2l0aW9uICE9PSAncmlnaHQnIHx8ICFyZXZlcnNlICYmIHBvc2l0aW9uID09PSAncmlnaHQnKSB7XG4gICAgcmV0ID0gcmV2ZXJzZUFsaWduKHJldCk7XG4gIH1cbiAgcmV0dXJuIHJldDtcbn1cbmZ1bmN0aW9uIHRpdGxlQXJncyhzY2FsZSwgb2Zmc2V0LCBwb3NpdGlvbiwgYWxpZ24pIHtcbiAgY29uc3Qge1xuICAgIHRvcCxcbiAgICBsZWZ0LFxuICAgIGJvdHRvbSxcbiAgICByaWdodCxcbiAgICBjaGFydFxuICB9ID0gc2NhbGU7XG4gIGNvbnN0IHtcbiAgICBjaGFydEFyZWEsXG4gICAgc2NhbGVzXG4gIH0gPSBjaGFydDtcbiAgbGV0IHJvdGF0aW9uID0gMDtcbiAgbGV0IG1heFdpZHRoLCB0aXRsZVgsIHRpdGxlWTtcbiAgY29uc3QgaGVpZ2h0ID0gYm90dG9tIC0gdG9wO1xuICBjb25zdCB3aWR0aCA9IHJpZ2h0IC0gbGVmdDtcbiAgaWYgKHNjYWxlLmlzSG9yaXpvbnRhbCgpKSB7XG4gICAgdGl0bGVYID0gX2FsaWduU3RhcnRFbmQoYWxpZ24sIGxlZnQsIHJpZ2h0KTtcbiAgICBpZiAoaXNPYmplY3QocG9zaXRpb24pKSB7XG4gICAgICBjb25zdCBwb3NpdGlvbkF4aXNJRCA9IE9iamVjdC5rZXlzKHBvc2l0aW9uKVswXTtcbiAgICAgIGNvbnN0IHZhbHVlID0gcG9zaXRpb25bcG9zaXRpb25BeGlzSURdO1xuICAgICAgdGl0bGVZID0gc2NhbGVzW3Bvc2l0aW9uQXhpc0lEXS5nZXRQaXhlbEZvclZhbHVlKHZhbHVlKSArIGhlaWdodCAtIG9mZnNldDtcbiAgICB9IGVsc2UgaWYgKHBvc2l0aW9uID09PSAnY2VudGVyJykge1xuICAgICAgdGl0bGVZID0gKGNoYXJ0QXJlYS5ib3R0b20gKyBjaGFydEFyZWEudG9wKSAvIDIgKyBoZWlnaHQgLSBvZmZzZXQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRpdGxlWSA9IG9mZnNldEZyb21FZGdlKHNjYWxlLCBwb3NpdGlvbiwgb2Zmc2V0KTtcbiAgICB9XG4gICAgbWF4V2lkdGggPSByaWdodCAtIGxlZnQ7XG4gIH0gZWxzZSB7XG4gICAgaWYgKGlzT2JqZWN0KHBvc2l0aW9uKSkge1xuICAgICAgY29uc3QgcG9zaXRpb25BeGlzSUQgPSBPYmplY3Qua2V5cyhwb3NpdGlvbilbMF07XG4gICAgICBjb25zdCB2YWx1ZSA9IHBvc2l0aW9uW3Bvc2l0aW9uQXhpc0lEXTtcbiAgICAgIHRpdGxlWCA9IHNjYWxlc1twb3NpdGlvbkF4aXNJRF0uZ2V0UGl4ZWxGb3JWYWx1ZSh2YWx1ZSkgLSB3aWR0aCArIG9mZnNldDtcbiAgICB9IGVsc2UgaWYgKHBvc2l0aW9uID09PSAnY2VudGVyJykge1xuICAgICAgdGl0bGVYID0gKGNoYXJ0QXJlYS5sZWZ0ICsgY2hhcnRBcmVhLnJpZ2h0KSAvIDIgLSB3aWR0aCArIG9mZnNldDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGl0bGVYID0gb2Zmc2V0RnJvbUVkZ2Uoc2NhbGUsIHBvc2l0aW9uLCBvZmZzZXQpO1xuICAgIH1cbiAgICB0aXRsZVkgPSBfYWxpZ25TdGFydEVuZChhbGlnbiwgYm90dG9tLCB0b3ApO1xuICAgIHJvdGF0aW9uID0gcG9zaXRpb24gPT09ICdsZWZ0JyA/IC1IQUxGX1BJIDogSEFMRl9QSTtcbiAgfVxuICByZXR1cm4ge1xuICAgIHRpdGxlWCxcbiAgICB0aXRsZVksXG4gICAgbWF4V2lkdGgsXG4gICAgcm90YXRpb25cbiAgfTtcbn1cbmNsYXNzIFNjYWxlIGV4dGVuZHMgRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKGNmZykge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5pZCA9IGNmZy5pZDtcbiAgICB0aGlzLnR5cGUgPSBjZmcudHlwZTtcbiAgICB0aGlzLm9wdGlvbnMgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5jdHggPSBjZmcuY3R4O1xuICAgIHRoaXMuY2hhcnQgPSBjZmcuY2hhcnQ7XG4gICAgdGhpcy50b3AgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5ib3R0b20gPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5sZWZ0ID0gdW5kZWZpbmVkO1xuICAgIHRoaXMucmlnaHQgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy53aWR0aCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmhlaWdodCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLl9tYXJnaW5zID0ge1xuICAgICAgbGVmdDogMCxcbiAgICAgIHJpZ2h0OiAwLFxuICAgICAgdG9wOiAwLFxuICAgICAgYm90dG9tOiAwXG4gICAgfTtcbiAgICB0aGlzLm1heFdpZHRoID0gdW5kZWZpbmVkO1xuICAgIHRoaXMubWF4SGVpZ2h0ID0gdW5kZWZpbmVkO1xuICAgIHRoaXMucGFkZGluZ1RvcCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnBhZGRpbmdCb3R0b20gPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5wYWRkaW5nTGVmdCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnBhZGRpbmdSaWdodCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmF4aXMgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5sYWJlbFJvdGF0aW9uID0gdW5kZWZpbmVkO1xuICAgIHRoaXMubWluID0gdW5kZWZpbmVkO1xuICAgIHRoaXMubWF4ID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuX3JhbmdlID0gdW5kZWZpbmVkO1xuICAgIHRoaXMudGlja3MgPSBbXTtcbiAgICB0aGlzLl9ncmlkTGluZUl0ZW1zID0gbnVsbDtcbiAgICB0aGlzLl9sYWJlbEl0ZW1zID0gbnVsbDtcbiAgICB0aGlzLl9sYWJlbFNpemVzID0gbnVsbDtcbiAgICB0aGlzLl9sZW5ndGggPSAwO1xuICAgIHRoaXMuX21heExlbmd0aCA9IDA7XG4gICAgdGhpcy5fbG9uZ2VzdFRleHRDYWNoZSA9IHt9O1xuICAgIHRoaXMuX3N0YXJ0UGl4ZWwgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5fZW5kUGl4ZWwgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5fcmV2ZXJzZVBpeGVscyA9IGZhbHNlO1xuICAgIHRoaXMuX3VzZXJNYXggPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5fdXNlck1pbiA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLl9zdWdnZXN0ZWRNYXggPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5fc3VnZ2VzdGVkTWluID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuX3RpY2tzTGVuZ3RoID0gMDtcbiAgICB0aGlzLl9ib3JkZXJWYWx1ZSA9IDA7XG4gICAgdGhpcy5fY2FjaGUgPSB7fTtcbiAgICB0aGlzLl9kYXRhTGltaXRzQ2FjaGVkID0gZmFsc2U7XG4gICAgdGhpcy4kY29udGV4dCA9IHVuZGVmaW5lZDtcbiAgfVxuICBpbml0KG9wdGlvbnMpIHtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zLnNldENvbnRleHQodGhpcy5nZXRDb250ZXh0KCkpO1xuICAgIHRoaXMuYXhpcyA9IG9wdGlvbnMuYXhpcztcbiAgICB0aGlzLl91c2VyTWluID0gdGhpcy5wYXJzZShvcHRpb25zLm1pbik7XG4gICAgdGhpcy5fdXNlck1heCA9IHRoaXMucGFyc2Uob3B0aW9ucy5tYXgpO1xuICAgIHRoaXMuX3N1Z2dlc3RlZE1pbiA9IHRoaXMucGFyc2Uob3B0aW9ucy5zdWdnZXN0ZWRNaW4pO1xuICAgIHRoaXMuX3N1Z2dlc3RlZE1heCA9IHRoaXMucGFyc2Uob3B0aW9ucy5zdWdnZXN0ZWRNYXgpO1xuICB9XG4gIHBhcnNlKHJhdywgaW5kZXgpIHtcbiAgICByZXR1cm4gcmF3O1xuICB9XG4gIGdldFVzZXJCb3VuZHMoKSB7XG4gICAgbGV0IHtcbiAgICAgIF91c2VyTWluLFxuICAgICAgX3VzZXJNYXgsXG4gICAgICBfc3VnZ2VzdGVkTWluLFxuICAgICAgX3N1Z2dlc3RlZE1heFxuICAgIH0gPSB0aGlzO1xuICAgIF91c2VyTWluID0gZmluaXRlT3JEZWZhdWx0KF91c2VyTWluLCBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpO1xuICAgIF91c2VyTWF4ID0gZmluaXRlT3JEZWZhdWx0KF91c2VyTWF4LCBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFkpO1xuICAgIF9zdWdnZXN0ZWRNaW4gPSBmaW5pdGVPckRlZmF1bHQoX3N1Z2dlc3RlZE1pbiwgTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKTtcbiAgICBfc3VnZ2VzdGVkTWF4ID0gZmluaXRlT3JEZWZhdWx0KF9zdWdnZXN0ZWRNYXgsIE51bWJlci5ORUdBVElWRV9JTkZJTklUWSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1pbjogZmluaXRlT3JEZWZhdWx0KF91c2VyTWluLCBfc3VnZ2VzdGVkTWluKSxcbiAgICAgIG1heDogZmluaXRlT3JEZWZhdWx0KF91c2VyTWF4LCBfc3VnZ2VzdGVkTWF4KSxcbiAgICAgIG1pbkRlZmluZWQ6IGlzTnVtYmVyRmluaXRlKF91c2VyTWluKSxcbiAgICAgIG1heERlZmluZWQ6IGlzTnVtYmVyRmluaXRlKF91c2VyTWF4KVxuICAgIH07XG4gIH1cbiAgZ2V0TWluTWF4KGNhblN0YWNrKSB7XG4gICAgbGV0IHtcbiAgICAgIG1pbixcbiAgICAgIG1heCxcbiAgICAgIG1pbkRlZmluZWQsXG4gICAgICBtYXhEZWZpbmVkXG4gICAgfSA9IHRoaXMuZ2V0VXNlckJvdW5kcygpO1xuICAgIGxldCByYW5nZTtcbiAgICBpZiAobWluRGVmaW5lZCAmJiBtYXhEZWZpbmVkKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBtaW4sXG4gICAgICAgIG1heFxuICAgICAgfTtcbiAgICB9XG4gICAgY29uc3QgbWV0YXMgPSB0aGlzLmdldE1hdGNoaW5nVmlzaWJsZU1ldGFzKCk7XG4gICAgZm9yIChsZXQgaSA9IDAsIGlsZW4gPSBtZXRhcy5sZW5ndGg7IGkgPCBpbGVuOyArK2kpIHtcbiAgICAgIHJhbmdlID0gbWV0YXNbaV0uY29udHJvbGxlci5nZXRNaW5NYXgodGhpcywgY2FuU3RhY2spO1xuICAgICAgaWYgKCFtaW5EZWZpbmVkKSB7XG4gICAgICAgIG1pbiA9IE1hdGgubWluKG1pbiwgcmFuZ2UubWluKTtcbiAgICAgIH1cbiAgICAgIGlmICghbWF4RGVmaW5lZCkge1xuICAgICAgICBtYXggPSBNYXRoLm1heChtYXgsIHJhbmdlLm1heCk7XG4gICAgICB9XG4gICAgfVxuICAgIG1pbiA9IG1heERlZmluZWQgJiYgbWluID4gbWF4ID8gbWF4IDogbWluO1xuICAgIG1heCA9IG1pbkRlZmluZWQgJiYgbWluID4gbWF4ID8gbWluIDogbWF4O1xuICAgIHJldHVybiB7XG4gICAgICBtaW46IGZpbml0ZU9yRGVmYXVsdChtaW4sIGZpbml0ZU9yRGVmYXVsdChtYXgsIG1pbikpLFxuICAgICAgbWF4OiBmaW5pdGVPckRlZmF1bHQobWF4LCBmaW5pdGVPckRlZmF1bHQobWluLCBtYXgpKVxuICAgIH07XG4gIH1cbiAgZ2V0UGFkZGluZygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbGVmdDogdGhpcy5wYWRkaW5nTGVmdCB8fCAwLFxuICAgICAgdG9wOiB0aGlzLnBhZGRpbmdUb3AgfHwgMCxcbiAgICAgIHJpZ2h0OiB0aGlzLnBhZGRpbmdSaWdodCB8fCAwLFxuICAgICAgYm90dG9tOiB0aGlzLnBhZGRpbmdCb3R0b20gfHwgMFxuICAgIH07XG4gIH1cbiAgZ2V0VGlja3MoKSB7XG4gICAgcmV0dXJuIHRoaXMudGlja3M7XG4gIH1cbiAgZ2V0TGFiZWxzKCkge1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLmNoYXJ0LmRhdGE7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5sYWJlbHMgfHwgKHRoaXMuaXNIb3Jpem9udGFsKCkgPyBkYXRhLnhMYWJlbHMgOiBkYXRhLnlMYWJlbHMpIHx8IGRhdGEubGFiZWxzIHx8IFtdO1xuICB9XG4gIGdldExhYmVsSXRlbXMoY2hhcnRBcmVhID0gdGhpcy5jaGFydC5jaGFydEFyZWEpIHtcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuX2xhYmVsSXRlbXMgfHwgKHRoaXMuX2xhYmVsSXRlbXMgPSB0aGlzLl9jb21wdXRlTGFiZWxJdGVtcyhjaGFydEFyZWEpKTtcbiAgICByZXR1cm4gaXRlbXM7XG4gIH1cbiAgYmVmb3JlTGF5b3V0KCkge1xuICAgIHRoaXMuX2NhY2hlID0ge307XG4gICAgdGhpcy5fZGF0YUxpbWl0c0NhY2hlZCA9IGZhbHNlO1xuICB9XG4gIGJlZm9yZVVwZGF0ZSgpIHtcbiAgICBjYWxsYmFjayh0aGlzLm9wdGlvbnMuYmVmb3JlVXBkYXRlLCBbdGhpc10pO1xuICB9XG4gIHVwZGF0ZShtYXhXaWR0aCwgbWF4SGVpZ2h0LCBtYXJnaW5zKSB7XG4gICAgY29uc3Qge1xuICAgICAgYmVnaW5BdFplcm8sXG4gICAgICBncmFjZSxcbiAgICAgIHRpY2tzOiB0aWNrT3B0c1xuICAgIH0gPSB0aGlzLm9wdGlvbnM7XG4gICAgY29uc3Qgc2FtcGxlU2l6ZSA9IHRpY2tPcHRzLnNhbXBsZVNpemU7XG4gICAgdGhpcy5iZWZvcmVVcGRhdGUoKTtcbiAgICB0aGlzLm1heFdpZHRoID0gbWF4V2lkdGg7XG4gICAgdGhpcy5tYXhIZWlnaHQgPSBtYXhIZWlnaHQ7XG4gICAgdGhpcy5fbWFyZ2lucyA9IG1hcmdpbnMgPSBPYmplY3QuYXNzaWduKHtcbiAgICAgIGxlZnQ6IDAsXG4gICAgICByaWdodDogMCxcbiAgICAgIHRvcDogMCxcbiAgICAgIGJvdHRvbTogMFxuICAgIH0sIG1hcmdpbnMpO1xuICAgIHRoaXMudGlja3MgPSBudWxsO1xuICAgIHRoaXMuX2xhYmVsU2l6ZXMgPSBudWxsO1xuICAgIHRoaXMuX2dyaWRMaW5lSXRlbXMgPSBudWxsO1xuICAgIHRoaXMuX2xhYmVsSXRlbXMgPSBudWxsO1xuICAgIHRoaXMuYmVmb3JlU2V0RGltZW5zaW9ucygpO1xuICAgIHRoaXMuc2V0RGltZW5zaW9ucygpO1xuICAgIHRoaXMuYWZ0ZXJTZXREaW1lbnNpb25zKCk7XG4gICAgdGhpcy5fbWF4TGVuZ3RoID0gdGhpcy5pc0hvcml6b250YWwoKSA/IHRoaXMud2lkdGggKyBtYXJnaW5zLmxlZnQgKyBtYXJnaW5zLnJpZ2h0IDogdGhpcy5oZWlnaHQgKyBtYXJnaW5zLnRvcCArIG1hcmdpbnMuYm90dG9tO1xuICAgIGlmICghdGhpcy5fZGF0YUxpbWl0c0NhY2hlZCkge1xuICAgICAgdGhpcy5iZWZvcmVEYXRhTGltaXRzKCk7XG4gICAgICB0aGlzLmRldGVybWluZURhdGFMaW1pdHMoKTtcbiAgICAgIHRoaXMuYWZ0ZXJEYXRhTGltaXRzKCk7XG4gICAgICB0aGlzLl9yYW5nZSA9IF9hZGRHcmFjZSh0aGlzLCBncmFjZSwgYmVnaW5BdFplcm8pO1xuICAgICAgdGhpcy5fZGF0YUxpbWl0c0NhY2hlZCA9IHRydWU7XG4gICAgfVxuICAgIHRoaXMuYmVmb3JlQnVpbGRUaWNrcygpO1xuICAgIHRoaXMudGlja3MgPSB0aGlzLmJ1aWxkVGlja3MoKSB8fCBbXTtcbiAgICB0aGlzLmFmdGVyQnVpbGRUaWNrcygpO1xuICAgIGNvbnN0IHNhbXBsaW5nRW5hYmxlZCA9IHNhbXBsZVNpemUgPCB0aGlzLnRpY2tzLmxlbmd0aDtcbiAgICB0aGlzLl9jb252ZXJ0VGlja3NUb0xhYmVscyhzYW1wbGluZ0VuYWJsZWQgPyBzYW1wbGUodGhpcy50aWNrcywgc2FtcGxlU2l6ZSkgOiB0aGlzLnRpY2tzKTtcbiAgICB0aGlzLmNvbmZpZ3VyZSgpO1xuICAgIHRoaXMuYmVmb3JlQ2FsY3VsYXRlTGFiZWxSb3RhdGlvbigpO1xuICAgIHRoaXMuY2FsY3VsYXRlTGFiZWxSb3RhdGlvbigpO1xuICAgIHRoaXMuYWZ0ZXJDYWxjdWxhdGVMYWJlbFJvdGF0aW9uKCk7XG4gICAgaWYgKHRpY2tPcHRzLmRpc3BsYXkgJiYgKHRpY2tPcHRzLmF1dG9Ta2lwIHx8IHRpY2tPcHRzLnNvdXJjZSA9PT0gJ2F1dG8nKSkge1xuICAgICAgdGhpcy50aWNrcyA9IGF1dG9Ta2lwKHRoaXMsIHRoaXMudGlja3MpO1xuICAgICAgdGhpcy5fbGFiZWxTaXplcyA9IG51bGw7XG4gICAgICB0aGlzLmFmdGVyQXV0b1NraXAoKTtcbiAgICB9XG4gICAgaWYgKHNhbXBsaW5nRW5hYmxlZCkge1xuICAgICAgdGhpcy5fY29udmVydFRpY2tzVG9MYWJlbHModGhpcy50aWNrcyk7XG4gICAgfVxuICAgIHRoaXMuYmVmb3JlRml0KCk7XG4gICAgdGhpcy5maXQoKTtcbiAgICB0aGlzLmFmdGVyRml0KCk7XG4gICAgdGhpcy5hZnRlclVwZGF0ZSgpO1xuICB9XG4gIGNvbmZpZ3VyZSgpIHtcbiAgICBsZXQgcmV2ZXJzZVBpeGVscyA9IHRoaXMub3B0aW9ucy5yZXZlcnNlO1xuICAgIGxldCBzdGFydFBpeGVsLCBlbmRQaXhlbDtcbiAgICBpZiAodGhpcy5pc0hvcml6b250YWwoKSkge1xuICAgICAgc3RhcnRQaXhlbCA9IHRoaXMubGVmdDtcbiAgICAgIGVuZFBpeGVsID0gdGhpcy5yaWdodDtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhcnRQaXhlbCA9IHRoaXMudG9wO1xuICAgICAgZW5kUGl4ZWwgPSB0aGlzLmJvdHRvbTtcbiAgICAgIHJldmVyc2VQaXhlbHMgPSAhcmV2ZXJzZVBpeGVscztcbiAgICB9XG4gICAgdGhpcy5fc3RhcnRQaXhlbCA9IHN0YXJ0UGl4ZWw7XG4gICAgdGhpcy5fZW5kUGl4ZWwgPSBlbmRQaXhlbDtcbiAgICB0aGlzLl9yZXZlcnNlUGl4ZWxzID0gcmV2ZXJzZVBpeGVscztcbiAgICB0aGlzLl9sZW5ndGggPSBlbmRQaXhlbCAtIHN0YXJ0UGl4ZWw7XG4gICAgdGhpcy5fYWxpZ25Ub1BpeGVscyA9IHRoaXMub3B0aW9ucy5hbGlnblRvUGl4ZWxzO1xuICB9XG4gIGFmdGVyVXBkYXRlKCkge1xuICAgIGNhbGxiYWNrKHRoaXMub3B0aW9ucy5hZnRlclVwZGF0ZSwgW3RoaXNdKTtcbiAgfVxuICBiZWZvcmVTZXREaW1lbnNpb25zKCkge1xuICAgIGNhbGxiYWNrKHRoaXMub3B0aW9ucy5iZWZvcmVTZXREaW1lbnNpb25zLCBbdGhpc10pO1xuICB9XG4gIHNldERpbWVuc2lvbnMoKSB7XG4gICAgaWYgKHRoaXMuaXNIb3Jpem9udGFsKCkpIHtcbiAgICAgIHRoaXMud2lkdGggPSB0aGlzLm1heFdpZHRoO1xuICAgICAgdGhpcy5sZWZ0ID0gMDtcbiAgICAgIHRoaXMucmlnaHQgPSB0aGlzLndpZHRoO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmhlaWdodCA9IHRoaXMubWF4SGVpZ2h0O1xuICAgICAgdGhpcy50b3AgPSAwO1xuICAgICAgdGhpcy5ib3R0b20gPSB0aGlzLmhlaWdodDtcbiAgICB9XG4gICAgdGhpcy5wYWRkaW5nTGVmdCA9IDA7XG4gICAgdGhpcy5wYWRkaW5nVG9wID0gMDtcbiAgICB0aGlzLnBhZGRpbmdSaWdodCA9IDA7XG4gICAgdGhpcy5wYWRkaW5nQm90dG9tID0gMDtcbiAgfVxuICBhZnRlclNldERpbWVuc2lvbnMoKSB7XG4gICAgY2FsbGJhY2sodGhpcy5vcHRpb25zLmFmdGVyU2V0RGltZW5zaW9ucywgW3RoaXNdKTtcbiAgfVxuICBfY2FsbEhvb2tzKG5hbWUpIHtcbiAgICB0aGlzLmNoYXJ0Lm5vdGlmeVBsdWdpbnMobmFtZSwgdGhpcy5nZXRDb250ZXh0KCkpO1xuICAgIGNhbGxiYWNrKHRoaXMub3B0aW9uc1tuYW1lXSwgW3RoaXNdKTtcbiAgfVxuICBiZWZvcmVEYXRhTGltaXRzKCkge1xuICAgIHRoaXMuX2NhbGxIb29rcygnYmVmb3JlRGF0YUxpbWl0cycpO1xuICB9XG4gIGRldGVybWluZURhdGFMaW1pdHMoKSB7fVxuICBhZnRlckRhdGFMaW1pdHMoKSB7XG4gICAgdGhpcy5fY2FsbEhvb2tzKCdhZnRlckRhdGFMaW1pdHMnKTtcbiAgfVxuICBiZWZvcmVCdWlsZFRpY2tzKCkge1xuICAgIHRoaXMuX2NhbGxIb29rcygnYmVmb3JlQnVpbGRUaWNrcycpO1xuICB9XG4gIGJ1aWxkVGlja3MoKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIGFmdGVyQnVpbGRUaWNrcygpIHtcbiAgICB0aGlzLl9jYWxsSG9va3MoJ2FmdGVyQnVpbGRUaWNrcycpO1xuICB9XG4gIGJlZm9yZVRpY2tUb0xhYmVsQ29udmVyc2lvbigpIHtcbiAgICBjYWxsYmFjayh0aGlzLm9wdGlvbnMuYmVmb3JlVGlja1RvTGFiZWxDb252ZXJzaW9uLCBbdGhpc10pO1xuICB9XG4gIGdlbmVyYXRlVGlja0xhYmVscyh0aWNrcykge1xuICAgIGNvbnN0IHRpY2tPcHRzID0gdGhpcy5vcHRpb25zLnRpY2tzO1xuICAgIGxldCBpLCBpbGVuLCB0aWNrO1xuICAgIGZvciAoaSA9IDAsIGlsZW4gPSB0aWNrcy5sZW5ndGg7IGkgPCBpbGVuOyBpKyspIHtcbiAgICAgIHRpY2sgPSB0aWNrc1tpXTtcbiAgICAgIHRpY2subGFiZWwgPSBjYWxsYmFjayh0aWNrT3B0cy5jYWxsYmFjaywgW3RpY2sudmFsdWUsIGksIHRpY2tzXSwgdGhpcyk7XG4gICAgfVxuICB9XG4gIGFmdGVyVGlja1RvTGFiZWxDb252ZXJzaW9uKCkge1xuICAgIGNhbGxiYWNrKHRoaXMub3B0aW9ucy5hZnRlclRpY2tUb0xhYmVsQ29udmVyc2lvbiwgW3RoaXNdKTtcbiAgfVxuICBiZWZvcmVDYWxjdWxhdGVMYWJlbFJvdGF0aW9uKCkge1xuICAgIGNhbGxiYWNrKHRoaXMub3B0aW9ucy5iZWZvcmVDYWxjdWxhdGVMYWJlbFJvdGF0aW9uLCBbdGhpc10pO1xuICB9XG4gIGNhbGN1bGF0ZUxhYmVsUm90YXRpb24oKSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICBjb25zdCB0aWNrT3B0cyA9IG9wdGlvbnMudGlja3M7XG4gICAgY29uc3QgbnVtVGlja3MgPSBnZXRUaWNrc0xpbWl0KHRoaXMudGlja3MubGVuZ3RoLCBvcHRpb25zLnRpY2tzLm1heFRpY2tzTGltaXQpO1xuICAgIGNvbnN0IG1pblJvdGF0aW9uID0gdGlja09wdHMubWluUm90YXRpb24gfHwgMDtcbiAgICBjb25zdCBtYXhSb3RhdGlvbiA9IHRpY2tPcHRzLm1heFJvdGF0aW9uO1xuICAgIGxldCBsYWJlbFJvdGF0aW9uID0gbWluUm90YXRpb247XG4gICAgbGV0IHRpY2tXaWR0aCwgbWF4SGVpZ2h0LCBtYXhMYWJlbERpYWdvbmFsO1xuICAgIGlmICghdGhpcy5faXNWaXNpYmxlKCkgfHwgIXRpY2tPcHRzLmRpc3BsYXkgfHwgbWluUm90YXRpb24gPj0gbWF4Um90YXRpb24gfHwgbnVtVGlja3MgPD0gMSB8fCAhdGhpcy5pc0hvcml6b250YWwoKSkge1xuICAgICAgdGhpcy5sYWJlbFJvdGF0aW9uID0gbWluUm90YXRpb247XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGxhYmVsU2l6ZXMgPSB0aGlzLl9nZXRMYWJlbFNpemVzKCk7XG4gICAgY29uc3QgbWF4TGFiZWxXaWR0aCA9IGxhYmVsU2l6ZXMud2lkZXN0LndpZHRoO1xuICAgIGNvbnN0IG1heExhYmVsSGVpZ2h0ID0gbGFiZWxTaXplcy5oaWdoZXN0LmhlaWdodDtcbiAgICBjb25zdCBtYXhXaWR0aCA9IF9saW1pdFZhbHVlKHRoaXMuY2hhcnQud2lkdGggLSBtYXhMYWJlbFdpZHRoLCAwLCB0aGlzLm1heFdpZHRoKTtcbiAgICB0aWNrV2lkdGggPSBvcHRpb25zLm9mZnNldCA/IHRoaXMubWF4V2lkdGggLyBudW1UaWNrcyA6IG1heFdpZHRoIC8gKG51bVRpY2tzIC0gMSk7XG4gICAgaWYgKG1heExhYmVsV2lkdGggKyA2ID4gdGlja1dpZHRoKSB7XG4gICAgICB0aWNrV2lkdGggPSBtYXhXaWR0aCAvIChudW1UaWNrcyAtIChvcHRpb25zLm9mZnNldCA/IDAuNSA6IDEpKTtcbiAgICAgIG1heEhlaWdodCA9IHRoaXMubWF4SGVpZ2h0IC0gZ2V0VGlja01hcmtMZW5ndGgob3B0aW9ucy5ncmlkKSAtIHRpY2tPcHRzLnBhZGRpbmcgLSBnZXRUaXRsZUhlaWdodChvcHRpb25zLnRpdGxlLCB0aGlzLmNoYXJ0Lm9wdGlvbnMuZm9udCk7XG4gICAgICBtYXhMYWJlbERpYWdvbmFsID0gTWF0aC5zcXJ0KG1heExhYmVsV2lkdGggKiBtYXhMYWJlbFdpZHRoICsgbWF4TGFiZWxIZWlnaHQgKiBtYXhMYWJlbEhlaWdodCk7XG4gICAgICBsYWJlbFJvdGF0aW9uID0gdG9EZWdyZWVzKE1hdGgubWluKE1hdGguYXNpbihfbGltaXRWYWx1ZSgobGFiZWxTaXplcy5oaWdoZXN0LmhlaWdodCArIDYpIC8gdGlja1dpZHRoLCAtMSwgMSkpLCBNYXRoLmFzaW4oX2xpbWl0VmFsdWUobWF4SGVpZ2h0IC8gbWF4TGFiZWxEaWFnb25hbCwgLTEsIDEpKSAtIE1hdGguYXNpbihfbGltaXRWYWx1ZShtYXhMYWJlbEhlaWdodCAvIG1heExhYmVsRGlhZ29uYWwsIC0xLCAxKSkpKTtcbiAgICAgIGxhYmVsUm90YXRpb24gPSBNYXRoLm1heChtaW5Sb3RhdGlvbiwgTWF0aC5taW4obWF4Um90YXRpb24sIGxhYmVsUm90YXRpb24pKTtcbiAgICB9XG4gICAgdGhpcy5sYWJlbFJvdGF0aW9uID0gbGFiZWxSb3RhdGlvbjtcbiAgfVxuICBhZnRlckNhbGN1bGF0ZUxhYmVsUm90YXRpb24oKSB7XG4gICAgY2FsbGJhY2sodGhpcy5vcHRpb25zLmFmdGVyQ2FsY3VsYXRlTGFiZWxSb3RhdGlvbiwgW3RoaXNdKTtcbiAgfVxuICBhZnRlckF1dG9Ta2lwKCkge31cbiAgYmVmb3JlRml0KCkge1xuICAgIGNhbGxiYWNrKHRoaXMub3B0aW9ucy5iZWZvcmVGaXQsIFt0aGlzXSk7XG4gIH1cbiAgZml0KCkge1xuICAgIGNvbnN0IG1pblNpemUgPSB7XG4gICAgICB3aWR0aDogMCxcbiAgICAgIGhlaWdodDogMFxuICAgIH07XG4gICAgY29uc3Qge1xuICAgICAgY2hhcnQsXG4gICAgICBvcHRpb25zOiB7XG4gICAgICAgIHRpY2tzOiB0aWNrT3B0cyxcbiAgICAgICAgdGl0bGU6IHRpdGxlT3B0cyxcbiAgICAgICAgZ3JpZDogZ3JpZE9wdHNcbiAgICAgIH1cbiAgICB9ID0gdGhpcztcbiAgICBjb25zdCBkaXNwbGF5ID0gdGhpcy5faXNWaXNpYmxlKCk7XG4gICAgY29uc3QgaXNIb3Jpem9udGFsID0gdGhpcy5pc0hvcml6b250YWwoKTtcbiAgICBpZiAoZGlzcGxheSkge1xuICAgICAgY29uc3QgdGl0bGVIZWlnaHQgPSBnZXRUaXRsZUhlaWdodCh0aXRsZU9wdHMsIGNoYXJ0Lm9wdGlvbnMuZm9udCk7XG4gICAgICBpZiAoaXNIb3Jpem9udGFsKSB7XG4gICAgICAgIG1pblNpemUud2lkdGggPSB0aGlzLm1heFdpZHRoO1xuICAgICAgICBtaW5TaXplLmhlaWdodCA9IGdldFRpY2tNYXJrTGVuZ3RoKGdyaWRPcHRzKSArIHRpdGxlSGVpZ2h0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbWluU2l6ZS5oZWlnaHQgPSB0aGlzLm1heEhlaWdodDtcbiAgICAgICAgbWluU2l6ZS53aWR0aCA9IGdldFRpY2tNYXJrTGVuZ3RoKGdyaWRPcHRzKSArIHRpdGxlSGVpZ2h0O1xuICAgICAgfVxuICAgICAgaWYgKHRpY2tPcHRzLmRpc3BsYXkgJiYgdGhpcy50aWNrcy5sZW5ndGgpIHtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgIGZpcnN0LFxuICAgICAgICAgIGxhc3QsXG4gICAgICAgICAgd2lkZXN0LFxuICAgICAgICAgIGhpZ2hlc3RcbiAgICAgICAgfSA9IHRoaXMuX2dldExhYmVsU2l6ZXMoKTtcbiAgICAgICAgY29uc3QgdGlja1BhZGRpbmcgPSB0aWNrT3B0cy5wYWRkaW5nICogMjtcbiAgICAgICAgY29uc3QgYW5nbGVSYWRpYW5zID0gdG9SYWRpYW5zKHRoaXMubGFiZWxSb3RhdGlvbik7XG4gICAgICAgIGNvbnN0IGNvcyA9IE1hdGguY29zKGFuZ2xlUmFkaWFucyk7XG4gICAgICAgIGNvbnN0IHNpbiA9IE1hdGguc2luKGFuZ2xlUmFkaWFucyk7XG4gICAgICAgIGlmIChpc0hvcml6b250YWwpIHtcbiAgICAgICAgICBjb25zdCBsYWJlbEhlaWdodCA9IHRpY2tPcHRzLm1pcnJvciA/IDAgOiBzaW4gKiB3aWRlc3Qud2lkdGggKyBjb3MgKiBoaWdoZXN0LmhlaWdodDtcbiAgICAgICAgICBtaW5TaXplLmhlaWdodCA9IE1hdGgubWluKHRoaXMubWF4SGVpZ2h0LCBtaW5TaXplLmhlaWdodCArIGxhYmVsSGVpZ2h0ICsgdGlja1BhZGRpbmcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGxhYmVsV2lkdGggPSB0aWNrT3B0cy5taXJyb3IgPyAwIDogY29zICogd2lkZXN0LndpZHRoICsgc2luICogaGlnaGVzdC5oZWlnaHQ7XG4gICAgICAgICAgbWluU2l6ZS53aWR0aCA9IE1hdGgubWluKHRoaXMubWF4V2lkdGgsIG1pblNpemUud2lkdGggKyBsYWJlbFdpZHRoICsgdGlja1BhZGRpbmcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2NhbGN1bGF0ZVBhZGRpbmcoZmlyc3QsIGxhc3QsIHNpbiwgY29zKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5faGFuZGxlTWFyZ2lucygpO1xuICAgIGlmIChpc0hvcml6b250YWwpIHtcbiAgICAgIHRoaXMud2lkdGggPSB0aGlzLl9sZW5ndGggPSBjaGFydC53aWR0aCAtIHRoaXMuX21hcmdpbnMubGVmdCAtIHRoaXMuX21hcmdpbnMucmlnaHQ7XG4gICAgICB0aGlzLmhlaWdodCA9IG1pblNpemUuaGVpZ2h0O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLndpZHRoID0gbWluU2l6ZS53aWR0aDtcbiAgICAgIHRoaXMuaGVpZ2h0ID0gdGhpcy5fbGVuZ3RoID0gY2hhcnQuaGVpZ2h0IC0gdGhpcy5fbWFyZ2lucy50b3AgLSB0aGlzLl9tYXJnaW5zLmJvdHRvbTtcbiAgICB9XG4gIH1cbiAgX2NhbGN1bGF0ZVBhZGRpbmcoZmlyc3QsIGxhc3QsIHNpbiwgY29zKSB7XG4gICAgY29uc3Qge1xuICAgICAgdGlja3M6IHtcbiAgICAgICAgYWxpZ24sXG4gICAgICAgIHBhZGRpbmdcbiAgICAgIH0sXG4gICAgICBwb3NpdGlvblxuICAgIH0gPSB0aGlzLm9wdGlvbnM7XG4gICAgY29uc3QgaXNSb3RhdGVkID0gdGhpcy5sYWJlbFJvdGF0aW9uICE9PSAwO1xuICAgIGNvbnN0IGxhYmVsc0JlbG93VGlja3MgPSBwb3NpdGlvbiAhPT0gJ3RvcCcgJiYgdGhpcy5heGlzID09PSAneCc7XG4gICAgaWYgKHRoaXMuaXNIb3Jpem9udGFsKCkpIHtcbiAgICAgIGNvbnN0IG9mZnNldExlZnQgPSB0aGlzLmdldFBpeGVsRm9yVGljaygwKSAtIHRoaXMubGVmdDtcbiAgICAgIGNvbnN0IG9mZnNldFJpZ2h0ID0gdGhpcy5yaWdodCAtIHRoaXMuZ2V0UGl4ZWxGb3JUaWNrKHRoaXMudGlja3MubGVuZ3RoIC0gMSk7XG4gICAgICBsZXQgcGFkZGluZ0xlZnQgPSAwO1xuICAgICAgbGV0IHBhZGRpbmdSaWdodCA9IDA7XG4gICAgICBpZiAoaXNSb3RhdGVkKSB7XG4gICAgICAgIGlmIChsYWJlbHNCZWxvd1RpY2tzKSB7XG4gICAgICAgICAgcGFkZGluZ0xlZnQgPSBjb3MgKiBmaXJzdC53aWR0aDtcbiAgICAgICAgICBwYWRkaW5nUmlnaHQgPSBzaW4gKiBsYXN0LmhlaWdodDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwYWRkaW5nTGVmdCA9IHNpbiAqIGZpcnN0LmhlaWdodDtcbiAgICAgICAgICBwYWRkaW5nUmlnaHQgPSBjb3MgKiBsYXN0LndpZHRoO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGFsaWduID09PSAnc3RhcnQnKSB7XG4gICAgICAgIHBhZGRpbmdSaWdodCA9IGxhc3Qud2lkdGg7XG4gICAgICB9IGVsc2UgaWYgKGFsaWduID09PSAnZW5kJykge1xuICAgICAgICBwYWRkaW5nTGVmdCA9IGZpcnN0LndpZHRoO1xuICAgICAgfSBlbHNlIGlmIChhbGlnbiAhPT0gJ2lubmVyJykge1xuICAgICAgICBwYWRkaW5nTGVmdCA9IGZpcnN0LndpZHRoIC8gMjtcbiAgICAgICAgcGFkZGluZ1JpZ2h0ID0gbGFzdC53aWR0aCAvIDI7XG4gICAgICB9XG4gICAgICB0aGlzLnBhZGRpbmdMZWZ0ID0gTWF0aC5tYXgoKHBhZGRpbmdMZWZ0IC0gb2Zmc2V0TGVmdCArIHBhZGRpbmcpICogdGhpcy53aWR0aCAvICh0aGlzLndpZHRoIC0gb2Zmc2V0TGVmdCksIDApO1xuICAgICAgdGhpcy5wYWRkaW5nUmlnaHQgPSBNYXRoLm1heCgocGFkZGluZ1JpZ2h0IC0gb2Zmc2V0UmlnaHQgKyBwYWRkaW5nKSAqIHRoaXMud2lkdGggLyAodGhpcy53aWR0aCAtIG9mZnNldFJpZ2h0KSwgMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBwYWRkaW5nVG9wID0gbGFzdC5oZWlnaHQgLyAyO1xuICAgICAgbGV0IHBhZGRpbmdCb3R0b20gPSBmaXJzdC5oZWlnaHQgLyAyO1xuICAgICAgaWYgKGFsaWduID09PSAnc3RhcnQnKSB7XG4gICAgICAgIHBhZGRpbmdUb3AgPSAwO1xuICAgICAgICBwYWRkaW5nQm90dG9tID0gZmlyc3QuaGVpZ2h0O1xuICAgICAgfSBlbHNlIGlmIChhbGlnbiA9PT0gJ2VuZCcpIHtcbiAgICAgICAgcGFkZGluZ1RvcCA9IGxhc3QuaGVpZ2h0O1xuICAgICAgICBwYWRkaW5nQm90dG9tID0gMDtcbiAgICAgIH1cbiAgICAgIHRoaXMucGFkZGluZ1RvcCA9IHBhZGRpbmdUb3AgKyBwYWRkaW5nO1xuICAgICAgdGhpcy5wYWRkaW5nQm90dG9tID0gcGFkZGluZ0JvdHRvbSArIHBhZGRpbmc7XG4gICAgfVxuICB9XG4gIF9oYW5kbGVNYXJnaW5zKCkge1xuICAgIGlmICh0aGlzLl9tYXJnaW5zKSB7XG4gICAgICB0aGlzLl9tYXJnaW5zLmxlZnQgPSBNYXRoLm1heCh0aGlzLnBhZGRpbmdMZWZ0LCB0aGlzLl9tYXJnaW5zLmxlZnQpO1xuICAgICAgdGhpcy5fbWFyZ2lucy50b3AgPSBNYXRoLm1heCh0aGlzLnBhZGRpbmdUb3AsIHRoaXMuX21hcmdpbnMudG9wKTtcbiAgICAgIHRoaXMuX21hcmdpbnMucmlnaHQgPSBNYXRoLm1heCh0aGlzLnBhZGRpbmdSaWdodCwgdGhpcy5fbWFyZ2lucy5yaWdodCk7XG4gICAgICB0aGlzLl9tYXJnaW5zLmJvdHRvbSA9IE1hdGgubWF4KHRoaXMucGFkZGluZ0JvdHRvbSwgdGhpcy5fbWFyZ2lucy5ib3R0b20pO1xuICAgIH1cbiAgfVxuICBhZnRlckZpdCgpIHtcbiAgICBjYWxsYmFjayh0aGlzLm9wdGlvbnMuYWZ0ZXJGaXQsIFt0aGlzXSk7XG4gIH1cbiAgaXNIb3Jpem9udGFsKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIGF4aXMsXG4gICAgICBwb3NpdGlvblxuICAgIH0gPSB0aGlzLm9wdGlvbnM7XG4gICAgcmV0dXJuIHBvc2l0aW9uID09PSAndG9wJyB8fCBwb3NpdGlvbiA9PT0gJ2JvdHRvbScgfHwgYXhpcyA9PT0gJ3gnO1xuICB9XG4gIGlzRnVsbFNpemUoKSB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5mdWxsU2l6ZTtcbiAgfVxuICBfY29udmVydFRpY2tzVG9MYWJlbHModGlja3MpIHtcbiAgICB0aGlzLmJlZm9yZVRpY2tUb0xhYmVsQ29udmVyc2lvbigpO1xuICAgIHRoaXMuZ2VuZXJhdGVUaWNrTGFiZWxzKHRpY2tzKTtcbiAgICBsZXQgaSwgaWxlbjtcbiAgICBmb3IgKGkgPSAwLCBpbGVuID0gdGlja3MubGVuZ3RoOyBpIDwgaWxlbjsgaSsrKSB7XG4gICAgICBpZiAoaXNOdWxsT3JVbmRlZih0aWNrc1tpXS5sYWJlbCkpIHtcbiAgICAgICAgdGlja3Muc3BsaWNlKGksIDEpO1xuICAgICAgICBpbGVuLS07XG4gICAgICAgIGktLTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5hZnRlclRpY2tUb0xhYmVsQ29udmVyc2lvbigpO1xuICB9XG4gIF9nZXRMYWJlbFNpemVzKCkge1xuICAgIGxldCBsYWJlbFNpemVzID0gdGhpcy5fbGFiZWxTaXplcztcbiAgICBpZiAoIWxhYmVsU2l6ZXMpIHtcbiAgICAgIGNvbnN0IHNhbXBsZVNpemUgPSB0aGlzLm9wdGlvbnMudGlja3Muc2FtcGxlU2l6ZTtcbiAgICAgIGxldCB0aWNrcyA9IHRoaXMudGlja3M7XG4gICAgICBpZiAoc2FtcGxlU2l6ZSA8IHRpY2tzLmxlbmd0aCkge1xuICAgICAgICB0aWNrcyA9IHNhbXBsZSh0aWNrcywgc2FtcGxlU2l6ZSk7XG4gICAgICB9XG4gICAgICB0aGlzLl9sYWJlbFNpemVzID0gbGFiZWxTaXplcyA9IHRoaXMuX2NvbXB1dGVMYWJlbFNpemVzKHRpY2tzLCB0aWNrcy5sZW5ndGgsIHRoaXMub3B0aW9ucy50aWNrcy5tYXhUaWNrc0xpbWl0KTtcbiAgICB9XG4gICAgcmV0dXJuIGxhYmVsU2l6ZXM7XG4gIH1cbiAgX2NvbXB1dGVMYWJlbFNpemVzKHRpY2tzLCBsZW5ndGgsIG1heFRpY2tzTGltaXQpIHtcbiAgICBjb25zdCB7XG4gICAgICBjdHgsXG4gICAgICBfbG9uZ2VzdFRleHRDYWNoZTogY2FjaGVzXG4gICAgfSA9IHRoaXM7XG4gICAgY29uc3Qgd2lkdGhzID0gW107XG4gICAgY29uc3QgaGVpZ2h0cyA9IFtdO1xuICAgIGNvbnN0IGluY3JlbWVudCA9IE1hdGguZmxvb3IobGVuZ3RoIC8gZ2V0VGlja3NMaW1pdChsZW5ndGgsIG1heFRpY2tzTGltaXQpKTtcbiAgICBsZXQgd2lkZXN0TGFiZWxTaXplID0gMDtcbiAgICBsZXQgaGlnaGVzdExhYmVsU2l6ZSA9IDA7XG4gICAgbGV0IGksIGosIGpsZW4sIGxhYmVsLCB0aWNrRm9udCwgZm9udFN0cmluZywgY2FjaGUsIGxpbmVIZWlnaHQsIHdpZHRoLCBoZWlnaHQsIG5lc3RlZExhYmVsO1xuICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkgKz0gaW5jcmVtZW50KSB7XG4gICAgICBsYWJlbCA9IHRpY2tzW2ldLmxhYmVsO1xuICAgICAgdGlja0ZvbnQgPSB0aGlzLl9yZXNvbHZlVGlja0ZvbnRPcHRpb25zKGkpO1xuICAgICAgY3R4LmZvbnQgPSBmb250U3RyaW5nID0gdGlja0ZvbnQuc3RyaW5nO1xuICAgICAgY2FjaGUgPSBjYWNoZXNbZm9udFN0cmluZ10gPSBjYWNoZXNbZm9udFN0cmluZ10gfHwge1xuICAgICAgICBkYXRhOiB7fSxcbiAgICAgICAgZ2M6IFtdXG4gICAgICB9O1xuICAgICAgbGluZUhlaWdodCA9IHRpY2tGb250LmxpbmVIZWlnaHQ7XG4gICAgICB3aWR0aCA9IGhlaWdodCA9IDA7XG4gICAgICBpZiAoIWlzTnVsbE9yVW5kZWYobGFiZWwpICYmICFpc0FycmF5KGxhYmVsKSkge1xuICAgICAgICB3aWR0aCA9IF9tZWFzdXJlVGV4dChjdHgsIGNhY2hlLmRhdGEsIGNhY2hlLmdjLCB3aWR0aCwgbGFiZWwpO1xuICAgICAgICBoZWlnaHQgPSBsaW5lSGVpZ2h0O1xuICAgICAgfSBlbHNlIGlmIChpc0FycmF5KGxhYmVsKSkge1xuICAgICAgICBmb3IgKGogPSAwLCBqbGVuID0gbGFiZWwubGVuZ3RoOyBqIDwgamxlbjsgKytqKSB7XG4gICAgICAgICAgbmVzdGVkTGFiZWwgPSBsYWJlbFtqXTtcbiAgICAgICAgICBpZiAoIWlzTnVsbE9yVW5kZWYobmVzdGVkTGFiZWwpICYmICFpc0FycmF5KG5lc3RlZExhYmVsKSkge1xuICAgICAgICAgICAgd2lkdGggPSBfbWVhc3VyZVRleHQoY3R4LCBjYWNoZS5kYXRhLCBjYWNoZS5nYywgd2lkdGgsIG5lc3RlZExhYmVsKTtcbiAgICAgICAgICAgIGhlaWdodCArPSBsaW5lSGVpZ2h0O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgd2lkdGhzLnB1c2god2lkdGgpO1xuICAgICAgaGVpZ2h0cy5wdXNoKGhlaWdodCk7XG4gICAgICB3aWRlc3RMYWJlbFNpemUgPSBNYXRoLm1heCh3aWR0aCwgd2lkZXN0TGFiZWxTaXplKTtcbiAgICAgIGhpZ2hlc3RMYWJlbFNpemUgPSBNYXRoLm1heChoZWlnaHQsIGhpZ2hlc3RMYWJlbFNpemUpO1xuICAgIH1cbiAgICBnYXJiYWdlQ29sbGVjdChjYWNoZXMsIGxlbmd0aCk7XG4gICAgY29uc3Qgd2lkZXN0ID0gd2lkdGhzLmluZGV4T2Yod2lkZXN0TGFiZWxTaXplKTtcbiAgICBjb25zdCBoaWdoZXN0ID0gaGVpZ2h0cy5pbmRleE9mKGhpZ2hlc3RMYWJlbFNpemUpO1xuICAgIGNvbnN0IHZhbHVlQXQgPSBpZHggPT4gKHtcbiAgICAgIHdpZHRoOiB3aWR0aHNbaWR4XSB8fCAwLFxuICAgICAgaGVpZ2h0OiBoZWlnaHRzW2lkeF0gfHwgMFxuICAgIH0pO1xuICAgIHJldHVybiB7XG4gICAgICBmaXJzdDogdmFsdWVBdCgwKSxcbiAgICAgIGxhc3Q6IHZhbHVlQXQobGVuZ3RoIC0gMSksXG4gICAgICB3aWRlc3Q6IHZhbHVlQXQod2lkZXN0KSxcbiAgICAgIGhpZ2hlc3Q6IHZhbHVlQXQoaGlnaGVzdCksXG4gICAgICB3aWR0aHMsXG4gICAgICBoZWlnaHRzXG4gICAgfTtcbiAgfVxuICBnZXRMYWJlbEZvclZhbHVlKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIGdldFBpeGVsRm9yVmFsdWUodmFsdWUsIGluZGV4KSB7XG4gICAgcmV0dXJuIE5hTjtcbiAgfVxuICBnZXRWYWx1ZUZvclBpeGVsKHBpeGVsKSB7fVxuICBnZXRQaXhlbEZvclRpY2soaW5kZXgpIHtcbiAgICBjb25zdCB0aWNrcyA9IHRoaXMudGlja3M7XG4gICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+IHRpY2tzLmxlbmd0aCAtIDEpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5nZXRQaXhlbEZvclZhbHVlKHRpY2tzW2luZGV4XS52YWx1ZSk7XG4gIH1cbiAgZ2V0UGl4ZWxGb3JEZWNpbWFsKGRlY2ltYWwpIHtcbiAgICBpZiAodGhpcy5fcmV2ZXJzZVBpeGVscykge1xuICAgICAgZGVjaW1hbCA9IDEgLSBkZWNpbWFsO1xuICAgIH1cbiAgICBjb25zdCBwaXhlbCA9IHRoaXMuX3N0YXJ0UGl4ZWwgKyBkZWNpbWFsICogdGhpcy5fbGVuZ3RoO1xuICAgIHJldHVybiBfaW50MTZSYW5nZSh0aGlzLl9hbGlnblRvUGl4ZWxzID8gX2FsaWduUGl4ZWwodGhpcy5jaGFydCwgcGl4ZWwsIDApIDogcGl4ZWwpO1xuICB9XG4gIGdldERlY2ltYWxGb3JQaXhlbChwaXhlbCkge1xuICAgIGNvbnN0IGRlY2ltYWwgPSAocGl4ZWwgLSB0aGlzLl9zdGFydFBpeGVsKSAvIHRoaXMuX2xlbmd0aDtcbiAgICByZXR1cm4gdGhpcy5fcmV2ZXJzZVBpeGVscyA/IDEgLSBkZWNpbWFsIDogZGVjaW1hbDtcbiAgfVxuICBnZXRCYXNlUGl4ZWwoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UGl4ZWxGb3JWYWx1ZSh0aGlzLmdldEJhc2VWYWx1ZSgpKTtcbiAgfVxuICBnZXRCYXNlVmFsdWUoKSB7XG4gICAgY29uc3Qge1xuICAgICAgbWluLFxuICAgICAgbWF4XG4gICAgfSA9IHRoaXM7XG4gICAgcmV0dXJuIG1pbiA8IDAgJiYgbWF4IDwgMCA/IG1heCA6IG1pbiA+IDAgJiYgbWF4ID4gMCA/IG1pbiA6IDA7XG4gIH1cbiAgZ2V0Q29udGV4dChpbmRleCkge1xuICAgIGNvbnN0IHRpY2tzID0gdGhpcy50aWNrcyB8fCBbXTtcbiAgICBpZiAoaW5kZXggPj0gMCAmJiBpbmRleCA8IHRpY2tzLmxlbmd0aCkge1xuICAgICAgY29uc3QgdGljayA9IHRpY2tzW2luZGV4XTtcbiAgICAgIHJldHVybiB0aWNrLiRjb250ZXh0IHx8ICh0aWNrLiRjb250ZXh0ID0gY3JlYXRlVGlja0NvbnRleHQodGhpcy5nZXRDb250ZXh0KCksIGluZGV4LCB0aWNrKSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLiRjb250ZXh0IHx8ICh0aGlzLiRjb250ZXh0ID0gY3JlYXRlU2NhbGVDb250ZXh0KHRoaXMuY2hhcnQuZ2V0Q29udGV4dCgpLCB0aGlzKSk7XG4gIH1cbiAgX3RpY2tTaXplKCkge1xuICAgIGNvbnN0IG9wdGlvblRpY2tzID0gdGhpcy5vcHRpb25zLnRpY2tzO1xuICAgIGNvbnN0IHJvdCA9IHRvUmFkaWFucyh0aGlzLmxhYmVsUm90YXRpb24pO1xuICAgIGNvbnN0IGNvcyA9IE1hdGguYWJzKE1hdGguY29zKHJvdCkpO1xuICAgIGNvbnN0IHNpbiA9IE1hdGguYWJzKE1hdGguc2luKHJvdCkpO1xuICAgIGNvbnN0IGxhYmVsU2l6ZXMgPSB0aGlzLl9nZXRMYWJlbFNpemVzKCk7XG4gICAgY29uc3QgcGFkZGluZyA9IG9wdGlvblRpY2tzLmF1dG9Ta2lwUGFkZGluZyB8fCAwO1xuICAgIGNvbnN0IHcgPSBsYWJlbFNpemVzID8gbGFiZWxTaXplcy53aWRlc3Qud2lkdGggKyBwYWRkaW5nIDogMDtcbiAgICBjb25zdCBoID0gbGFiZWxTaXplcyA/IGxhYmVsU2l6ZXMuaGlnaGVzdC5oZWlnaHQgKyBwYWRkaW5nIDogMDtcbiAgICByZXR1cm4gdGhpcy5pc0hvcml6b250YWwoKSA/IGggKiBjb3MgPiB3ICogc2luID8gdyAvIGNvcyA6IGggLyBzaW4gOiBoICogc2luIDwgdyAqIGNvcyA/IGggLyBjb3MgOiB3IC8gc2luO1xuICB9XG4gIF9pc1Zpc2libGUoKSB7XG4gICAgY29uc3QgZGlzcGxheSA9IHRoaXMub3B0aW9ucy5kaXNwbGF5O1xuICAgIGlmIChkaXNwbGF5ICE9PSAnYXV0bycpIHtcbiAgICAgIHJldHVybiAhIWRpc3BsYXk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmdldE1hdGNoaW5nVmlzaWJsZU1ldGFzKCkubGVuZ3RoID4gMDtcbiAgfVxuICBfY29tcHV0ZUdyaWRMaW5lSXRlbXMoY2hhcnRBcmVhKSB7XG4gICAgY29uc3QgYXhpcyA9IHRoaXMuYXhpcztcbiAgICBjb25zdCBjaGFydCA9IHRoaXMuY2hhcnQ7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICBjb25zdCB7XG4gICAgICBncmlkLFxuICAgICAgcG9zaXRpb24sXG4gICAgICBib3JkZXJcbiAgICB9ID0gb3B0aW9ucztcbiAgICBjb25zdCBvZmZzZXQgPSBncmlkLm9mZnNldDtcbiAgICBjb25zdCBpc0hvcml6b250YWwgPSB0aGlzLmlzSG9yaXpvbnRhbCgpO1xuICAgIGNvbnN0IHRpY2tzID0gdGhpcy50aWNrcztcbiAgICBjb25zdCB0aWNrc0xlbmd0aCA9IHRpY2tzLmxlbmd0aCArIChvZmZzZXQgPyAxIDogMCk7XG4gICAgY29uc3QgdGwgPSBnZXRUaWNrTWFya0xlbmd0aChncmlkKTtcbiAgICBjb25zdCBpdGVtcyA9IFtdO1xuICAgIGNvbnN0IGJvcmRlck9wdHMgPSBib3JkZXIuc2V0Q29udGV4dCh0aGlzLmdldENvbnRleHQoKSk7XG4gICAgY29uc3QgYXhpc1dpZHRoID0gYm9yZGVyT3B0cy5kaXNwbGF5ID8gYm9yZGVyT3B0cy53aWR0aCA6IDA7XG4gICAgY29uc3QgYXhpc0hhbGZXaWR0aCA9IGF4aXNXaWR0aCAvIDI7XG4gICAgY29uc3QgYWxpZ25Cb3JkZXJWYWx1ZSA9IGZ1bmN0aW9uIChwaXhlbCkge1xuICAgICAgcmV0dXJuIF9hbGlnblBpeGVsKGNoYXJ0LCBwaXhlbCwgYXhpc1dpZHRoKTtcbiAgICB9O1xuICAgIGxldCBib3JkZXJWYWx1ZSwgaSwgbGluZVZhbHVlLCBhbGlnbmVkTGluZVZhbHVlO1xuICAgIGxldCB0eDEsIHR5MSwgdHgyLCB0eTIsIHgxLCB5MSwgeDIsIHkyO1xuICAgIGlmIChwb3NpdGlvbiA9PT0gJ3RvcCcpIHtcbiAgICAgIGJvcmRlclZhbHVlID0gYWxpZ25Cb3JkZXJWYWx1ZSh0aGlzLmJvdHRvbSk7XG4gICAgICB0eTEgPSB0aGlzLmJvdHRvbSAtIHRsO1xuICAgICAgdHkyID0gYm9yZGVyVmFsdWUgLSBheGlzSGFsZldpZHRoO1xuICAgICAgeTEgPSBhbGlnbkJvcmRlclZhbHVlKGNoYXJ0QXJlYS50b3ApICsgYXhpc0hhbGZXaWR0aDtcbiAgICAgIHkyID0gY2hhcnRBcmVhLmJvdHRvbTtcbiAgICB9IGVsc2UgaWYgKHBvc2l0aW9uID09PSAnYm90dG9tJykge1xuICAgICAgYm9yZGVyVmFsdWUgPSBhbGlnbkJvcmRlclZhbHVlKHRoaXMudG9wKTtcbiAgICAgIHkxID0gY2hhcnRBcmVhLnRvcDtcbiAgICAgIHkyID0gYWxpZ25Cb3JkZXJWYWx1ZShjaGFydEFyZWEuYm90dG9tKSAtIGF4aXNIYWxmV2lkdGg7XG4gICAgICB0eTEgPSBib3JkZXJWYWx1ZSArIGF4aXNIYWxmV2lkdGg7XG4gICAgICB0eTIgPSB0aGlzLnRvcCArIHRsO1xuICAgIH0gZWxzZSBpZiAocG9zaXRpb24gPT09ICdsZWZ0Jykge1xuICAgICAgYm9yZGVyVmFsdWUgPSBhbGlnbkJvcmRlclZhbHVlKHRoaXMucmlnaHQpO1xuICAgICAgdHgxID0gdGhpcy5yaWdodCAtIHRsO1xuICAgICAgdHgyID0gYm9yZGVyVmFsdWUgLSBheGlzSGFsZldpZHRoO1xuICAgICAgeDEgPSBhbGlnbkJvcmRlclZhbHVlKGNoYXJ0QXJlYS5sZWZ0KSArIGF4aXNIYWxmV2lkdGg7XG4gICAgICB4MiA9IGNoYXJ0QXJlYS5yaWdodDtcbiAgICB9IGVsc2UgaWYgKHBvc2l0aW9uID09PSAncmlnaHQnKSB7XG4gICAgICBib3JkZXJWYWx1ZSA9IGFsaWduQm9yZGVyVmFsdWUodGhpcy5sZWZ0KTtcbiAgICAgIHgxID0gY2hhcnRBcmVhLmxlZnQ7XG4gICAgICB4MiA9IGFsaWduQm9yZGVyVmFsdWUoY2hhcnRBcmVhLnJpZ2h0KSAtIGF4aXNIYWxmV2lkdGg7XG4gICAgICB0eDEgPSBib3JkZXJWYWx1ZSArIGF4aXNIYWxmV2lkdGg7XG4gICAgICB0eDIgPSB0aGlzLmxlZnQgKyB0bDtcbiAgICB9IGVsc2UgaWYgKGF4aXMgPT09ICd4Jykge1xuICAgICAgaWYgKHBvc2l0aW9uID09PSAnY2VudGVyJykge1xuICAgICAgICBib3JkZXJWYWx1ZSA9IGFsaWduQm9yZGVyVmFsdWUoKGNoYXJ0QXJlYS50b3AgKyBjaGFydEFyZWEuYm90dG9tKSAvIDIgKyAwLjUpO1xuICAgICAgfSBlbHNlIGlmIChpc09iamVjdChwb3NpdGlvbikpIHtcbiAgICAgICAgY29uc3QgcG9zaXRpb25BeGlzSUQgPSBPYmplY3Qua2V5cyhwb3NpdGlvbilbMF07XG4gICAgICAgIGNvbnN0IHZhbHVlID0gcG9zaXRpb25bcG9zaXRpb25BeGlzSURdO1xuICAgICAgICBib3JkZXJWYWx1ZSA9IGFsaWduQm9yZGVyVmFsdWUodGhpcy5jaGFydC5zY2FsZXNbcG9zaXRpb25BeGlzSURdLmdldFBpeGVsRm9yVmFsdWUodmFsdWUpKTtcbiAgICAgIH1cbiAgICAgIHkxID0gY2hhcnRBcmVhLnRvcDtcbiAgICAgIHkyID0gY2hhcnRBcmVhLmJvdHRvbTtcbiAgICAgIHR5MSA9IGJvcmRlclZhbHVlICsgYXhpc0hhbGZXaWR0aDtcbiAgICAgIHR5MiA9IHR5MSArIHRsO1xuICAgIH0gZWxzZSBpZiAoYXhpcyA9PT0gJ3knKSB7XG4gICAgICBpZiAocG9zaXRpb24gPT09ICdjZW50ZXInKSB7XG4gICAgICAgIGJvcmRlclZhbHVlID0gYWxpZ25Cb3JkZXJWYWx1ZSgoY2hhcnRBcmVhLmxlZnQgKyBjaGFydEFyZWEucmlnaHQpIC8gMik7XG4gICAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KHBvc2l0aW9uKSkge1xuICAgICAgICBjb25zdCBwb3NpdGlvbkF4aXNJRCA9IE9iamVjdC5rZXlzKHBvc2l0aW9uKVswXTtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBwb3NpdGlvbltwb3NpdGlvbkF4aXNJRF07XG4gICAgICAgIGJvcmRlclZhbHVlID0gYWxpZ25Cb3JkZXJWYWx1ZSh0aGlzLmNoYXJ0LnNjYWxlc1twb3NpdGlvbkF4aXNJRF0uZ2V0UGl4ZWxGb3JWYWx1ZSh2YWx1ZSkpO1xuICAgICAgfVxuICAgICAgdHgxID0gYm9yZGVyVmFsdWUgLSBheGlzSGFsZldpZHRoO1xuICAgICAgdHgyID0gdHgxIC0gdGw7XG4gICAgICB4MSA9IGNoYXJ0QXJlYS5sZWZ0O1xuICAgICAgeDIgPSBjaGFydEFyZWEucmlnaHQ7XG4gICAgfVxuICAgIGNvbnN0IGxpbWl0ID0gdmFsdWVPckRlZmF1bHQob3B0aW9ucy50aWNrcy5tYXhUaWNrc0xpbWl0LCB0aWNrc0xlbmd0aCk7XG4gICAgY29uc3Qgc3RlcCA9IE1hdGgubWF4KDEsIE1hdGguY2VpbCh0aWNrc0xlbmd0aCAvIGxpbWl0KSk7XG4gICAgZm9yIChpID0gMDsgaSA8IHRpY2tzTGVuZ3RoOyBpICs9IHN0ZXApIHtcbiAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoaSk7XG4gICAgICBjb25zdCBvcHRzQXRJbmRleCA9IGdyaWQuc2V0Q29udGV4dChjb250ZXh0KTtcbiAgICAgIGNvbnN0IG9wdHNBdEluZGV4Qm9yZGVyID0gYm9yZGVyLnNldENvbnRleHQoY29udGV4dCk7XG4gICAgICBjb25zdCBsaW5lV2lkdGggPSBvcHRzQXRJbmRleC5saW5lV2lkdGg7XG4gICAgICBjb25zdCBsaW5lQ29sb3IgPSBvcHRzQXRJbmRleC5jb2xvcjtcbiAgICAgIGNvbnN0IGJvcmRlckRhc2ggPSBvcHRzQXRJbmRleEJvcmRlci5kYXNoIHx8IFtdO1xuICAgICAgY29uc3QgYm9yZGVyRGFzaE9mZnNldCA9IG9wdHNBdEluZGV4Qm9yZGVyLmRhc2hPZmZzZXQ7XG4gICAgICBjb25zdCB0aWNrV2lkdGggPSBvcHRzQXRJbmRleC50aWNrV2lkdGg7XG4gICAgICBjb25zdCB0aWNrQ29sb3IgPSBvcHRzQXRJbmRleC50aWNrQ29sb3I7XG4gICAgICBjb25zdCB0aWNrQm9yZGVyRGFzaCA9IG9wdHNBdEluZGV4LnRpY2tCb3JkZXJEYXNoIHx8IFtdO1xuICAgICAgY29uc3QgdGlja0JvcmRlckRhc2hPZmZzZXQgPSBvcHRzQXRJbmRleC50aWNrQm9yZGVyRGFzaE9mZnNldDtcbiAgICAgIGxpbmVWYWx1ZSA9IGdldFBpeGVsRm9yR3JpZExpbmUodGhpcywgaSwgb2Zmc2V0KTtcbiAgICAgIGlmIChsaW5lVmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGFsaWduZWRMaW5lVmFsdWUgPSBfYWxpZ25QaXhlbChjaGFydCwgbGluZVZhbHVlLCBsaW5lV2lkdGgpO1xuICAgICAgaWYgKGlzSG9yaXpvbnRhbCkge1xuICAgICAgICB0eDEgPSB0eDIgPSB4MSA9IHgyID0gYWxpZ25lZExpbmVWYWx1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHR5MSA9IHR5MiA9IHkxID0geTIgPSBhbGlnbmVkTGluZVZhbHVlO1xuICAgICAgfVxuICAgICAgaXRlbXMucHVzaCh7XG4gICAgICAgIHR4MSxcbiAgICAgICAgdHkxLFxuICAgICAgICB0eDIsXG4gICAgICAgIHR5MixcbiAgICAgICAgeDEsXG4gICAgICAgIHkxLFxuICAgICAgICB4MixcbiAgICAgICAgeTIsXG4gICAgICAgIHdpZHRoOiBsaW5lV2lkdGgsXG4gICAgICAgIGNvbG9yOiBsaW5lQ29sb3IsXG4gICAgICAgIGJvcmRlckRhc2gsXG4gICAgICAgIGJvcmRlckRhc2hPZmZzZXQsXG4gICAgICAgIHRpY2tXaWR0aCxcbiAgICAgICAgdGlja0NvbG9yLFxuICAgICAgICB0aWNrQm9yZGVyRGFzaCxcbiAgICAgICAgdGlja0JvcmRlckRhc2hPZmZzZXRcbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLl90aWNrc0xlbmd0aCA9IHRpY2tzTGVuZ3RoO1xuICAgIHRoaXMuX2JvcmRlclZhbHVlID0gYm9yZGVyVmFsdWU7XG4gICAgcmV0dXJuIGl0ZW1zO1xuICB9XG4gIF9jb21wdXRlTGFiZWxJdGVtcyhjaGFydEFyZWEpIHtcbiAgICBjb25zdCBheGlzID0gdGhpcy5heGlzO1xuICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgY29uc3Qge1xuICAgICAgcG9zaXRpb24sXG4gICAgICB0aWNrczogb3B0aW9uVGlja3NcbiAgICB9ID0gb3B0aW9ucztcbiAgICBjb25zdCBpc0hvcml6b250YWwgPSB0aGlzLmlzSG9yaXpvbnRhbCgpO1xuICAgIGNvbnN0IHRpY2tzID0gdGhpcy50aWNrcztcbiAgICBjb25zdCB7XG4gICAgICBhbGlnbixcbiAgICAgIGNyb3NzQWxpZ24sXG4gICAgICBwYWRkaW5nLFxuICAgICAgbWlycm9yXG4gICAgfSA9IG9wdGlvblRpY2tzO1xuICAgIGNvbnN0IHRsID0gZ2V0VGlja01hcmtMZW5ndGgob3B0aW9ucy5ncmlkKTtcbiAgICBjb25zdCB0aWNrQW5kUGFkZGluZyA9IHRsICsgcGFkZGluZztcbiAgICBjb25zdCBoVGlja0FuZFBhZGRpbmcgPSBtaXJyb3IgPyAtcGFkZGluZyA6IHRpY2tBbmRQYWRkaW5nO1xuICAgIGNvbnN0IHJvdGF0aW9uID0gLXRvUmFkaWFucyh0aGlzLmxhYmVsUm90YXRpb24pO1xuICAgIGNvbnN0IGl0ZW1zID0gW107XG4gICAgbGV0IGksIGlsZW4sIHRpY2ssIGxhYmVsLCB4LCB5LCB0ZXh0QWxpZ24sIHBpeGVsLCBmb250LCBsaW5lSGVpZ2h0LCBsaW5lQ291bnQsIHRleHRPZmZzZXQ7XG4gICAgbGV0IHRleHRCYXNlbGluZSA9ICdtaWRkbGUnO1xuICAgIGlmIChwb3NpdGlvbiA9PT0gJ3RvcCcpIHtcbiAgICAgIHkgPSB0aGlzLmJvdHRvbSAtIGhUaWNrQW5kUGFkZGluZztcbiAgICAgIHRleHRBbGlnbiA9IHRoaXMuX2dldFhBeGlzTGFiZWxBbGlnbm1lbnQoKTtcbiAgICB9IGVsc2UgaWYgKHBvc2l0aW9uID09PSAnYm90dG9tJykge1xuICAgICAgeSA9IHRoaXMudG9wICsgaFRpY2tBbmRQYWRkaW5nO1xuICAgICAgdGV4dEFsaWduID0gdGhpcy5fZ2V0WEF4aXNMYWJlbEFsaWdubWVudCgpO1xuICAgIH0gZWxzZSBpZiAocG9zaXRpb24gPT09ICdsZWZ0Jykge1xuICAgICAgY29uc3QgcmV0ID0gdGhpcy5fZ2V0WUF4aXNMYWJlbEFsaWdubWVudCh0bCk7XG4gICAgICB0ZXh0QWxpZ24gPSByZXQudGV4dEFsaWduO1xuICAgICAgeCA9IHJldC54O1xuICAgIH0gZWxzZSBpZiAocG9zaXRpb24gPT09ICdyaWdodCcpIHtcbiAgICAgIGNvbnN0IHJldCA9IHRoaXMuX2dldFlBeGlzTGFiZWxBbGlnbm1lbnQodGwpO1xuICAgICAgdGV4dEFsaWduID0gcmV0LnRleHRBbGlnbjtcbiAgICAgIHggPSByZXQueDtcbiAgICB9IGVsc2UgaWYgKGF4aXMgPT09ICd4Jykge1xuICAgICAgaWYgKHBvc2l0aW9uID09PSAnY2VudGVyJykge1xuICAgICAgICB5ID0gKGNoYXJ0QXJlYS50b3AgKyBjaGFydEFyZWEuYm90dG9tKSAvIDIgKyB0aWNrQW5kUGFkZGluZztcbiAgICAgIH0gZWxzZSBpZiAoaXNPYmplY3QocG9zaXRpb24pKSB7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9uQXhpc0lEID0gT2JqZWN0LmtleXMocG9zaXRpb24pWzBdO1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHBvc2l0aW9uW3Bvc2l0aW9uQXhpc0lEXTtcbiAgICAgICAgeSA9IHRoaXMuY2hhcnQuc2NhbGVzW3Bvc2l0aW9uQXhpc0lEXS5nZXRQaXhlbEZvclZhbHVlKHZhbHVlKSArIHRpY2tBbmRQYWRkaW5nO1xuICAgICAgfVxuICAgICAgdGV4dEFsaWduID0gdGhpcy5fZ2V0WEF4aXNMYWJlbEFsaWdubWVudCgpO1xuICAgIH0gZWxzZSBpZiAoYXhpcyA9PT0gJ3knKSB7XG4gICAgICBpZiAocG9zaXRpb24gPT09ICdjZW50ZXInKSB7XG4gICAgICAgIHggPSAoY2hhcnRBcmVhLmxlZnQgKyBjaGFydEFyZWEucmlnaHQpIC8gMiAtIHRpY2tBbmRQYWRkaW5nO1xuICAgICAgfSBlbHNlIGlmIChpc09iamVjdChwb3NpdGlvbikpIHtcbiAgICAgICAgY29uc3QgcG9zaXRpb25BeGlzSUQgPSBPYmplY3Qua2V5cyhwb3NpdGlvbilbMF07XG4gICAgICAgIGNvbnN0IHZhbHVlID0gcG9zaXRpb25bcG9zaXRpb25BeGlzSURdO1xuICAgICAgICB4ID0gdGhpcy5jaGFydC5zY2FsZXNbcG9zaXRpb25BeGlzSURdLmdldFBpeGVsRm9yVmFsdWUodmFsdWUpO1xuICAgICAgfVxuICAgICAgdGV4dEFsaWduID0gdGhpcy5fZ2V0WUF4aXNMYWJlbEFsaWdubWVudCh0bCkudGV4dEFsaWduO1xuICAgIH1cbiAgICBpZiAoYXhpcyA9PT0gJ3knKSB7XG4gICAgICBpZiAoYWxpZ24gPT09ICdzdGFydCcpIHtcbiAgICAgICAgdGV4dEJhc2VsaW5lID0gJ3RvcCc7XG4gICAgICB9IGVsc2UgaWYgKGFsaWduID09PSAnZW5kJykge1xuICAgICAgICB0ZXh0QmFzZWxpbmUgPSAnYm90dG9tJztcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgbGFiZWxTaXplcyA9IHRoaXMuX2dldExhYmVsU2l6ZXMoKTtcbiAgICBmb3IgKGkgPSAwLCBpbGVuID0gdGlja3MubGVuZ3RoOyBpIDwgaWxlbjsgKytpKSB7XG4gICAgICB0aWNrID0gdGlja3NbaV07XG4gICAgICBsYWJlbCA9IHRpY2subGFiZWw7XG4gICAgICBjb25zdCBvcHRzQXRJbmRleCA9IG9wdGlvblRpY2tzLnNldENvbnRleHQodGhpcy5nZXRDb250ZXh0KGkpKTtcbiAgICAgIHBpeGVsID0gdGhpcy5nZXRQaXhlbEZvclRpY2soaSkgKyBvcHRpb25UaWNrcy5sYWJlbE9mZnNldDtcbiAgICAgIGZvbnQgPSB0aGlzLl9yZXNvbHZlVGlja0ZvbnRPcHRpb25zKGkpO1xuICAgICAgbGluZUhlaWdodCA9IGZvbnQubGluZUhlaWdodDtcbiAgICAgIGxpbmVDb3VudCA9IGlzQXJyYXkobGFiZWwpID8gbGFiZWwubGVuZ3RoIDogMTtcbiAgICAgIGNvbnN0IGhhbGZDb3VudCA9IGxpbmVDb3VudCAvIDI7XG4gICAgICBjb25zdCBjb2xvciA9IG9wdHNBdEluZGV4LmNvbG9yO1xuICAgICAgY29uc3Qgc3Ryb2tlQ29sb3IgPSBvcHRzQXRJbmRleC50ZXh0U3Ryb2tlQ29sb3I7XG4gICAgICBjb25zdCBzdHJva2VXaWR0aCA9IG9wdHNBdEluZGV4LnRleHRTdHJva2VXaWR0aDtcbiAgICAgIGxldCB0aWNrVGV4dEFsaWduID0gdGV4dEFsaWduO1xuICAgICAgaWYgKGlzSG9yaXpvbnRhbCkge1xuICAgICAgICB4ID0gcGl4ZWw7XG4gICAgICAgIGlmICh0ZXh0QWxpZ24gPT09ICdpbm5lcicpIHtcbiAgICAgICAgICBpZiAoaSA9PT0gaWxlbiAtIDEpIHtcbiAgICAgICAgICAgIHRpY2tUZXh0QWxpZ24gPSAhdGhpcy5vcHRpb25zLnJldmVyc2UgPyAncmlnaHQnIDogJ2xlZnQnO1xuICAgICAgICAgIH0gZWxzZSBpZiAoaSA9PT0gMCkge1xuICAgICAgICAgICAgdGlja1RleHRBbGlnbiA9ICF0aGlzLm9wdGlvbnMucmV2ZXJzZSA/ICdsZWZ0JyA6ICdyaWdodCc7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRpY2tUZXh0QWxpZ24gPSAnY2VudGVyJztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBvc2l0aW9uID09PSAndG9wJykge1xuICAgICAgICAgIGlmIChjcm9zc0FsaWduID09PSAnbmVhcicgfHwgcm90YXRpb24gIT09IDApIHtcbiAgICAgICAgICAgIHRleHRPZmZzZXQgPSAtbGluZUNvdW50ICogbGluZUhlaWdodCArIGxpbmVIZWlnaHQgLyAyO1xuICAgICAgICAgIH0gZWxzZSBpZiAoY3Jvc3NBbGlnbiA9PT0gJ2NlbnRlcicpIHtcbiAgICAgICAgICAgIHRleHRPZmZzZXQgPSAtbGFiZWxTaXplcy5oaWdoZXN0LmhlaWdodCAvIDIgLSBoYWxmQ291bnQgKiBsaW5lSGVpZ2h0ICsgbGluZUhlaWdodDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGV4dE9mZnNldCA9IC1sYWJlbFNpemVzLmhpZ2hlc3QuaGVpZ2h0ICsgbGluZUhlaWdodCAvIDI7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChjcm9zc0FsaWduID09PSAnbmVhcicgfHwgcm90YXRpb24gIT09IDApIHtcbiAgICAgICAgICAgIHRleHRPZmZzZXQgPSBsaW5lSGVpZ2h0IC8gMjtcbiAgICAgICAgICB9IGVsc2UgaWYgKGNyb3NzQWxpZ24gPT09ICdjZW50ZXInKSB7XG4gICAgICAgICAgICB0ZXh0T2Zmc2V0ID0gbGFiZWxTaXplcy5oaWdoZXN0LmhlaWdodCAvIDIgLSBoYWxmQ291bnQgKiBsaW5lSGVpZ2h0O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0ZXh0T2Zmc2V0ID0gbGFiZWxTaXplcy5oaWdoZXN0LmhlaWdodCAtIGxpbmVDb3VudCAqIGxpbmVIZWlnaHQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChtaXJyb3IpIHtcbiAgICAgICAgICB0ZXh0T2Zmc2V0ICo9IC0xO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyb3RhdGlvbiAhPT0gMCAmJiAhb3B0c0F0SW5kZXguc2hvd0xhYmVsQmFja2Ryb3ApIHtcbiAgICAgICAgICB4ICs9IGxpbmVIZWlnaHQgLyAyICogTWF0aC5zaW4ocm90YXRpb24pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB5ID0gcGl4ZWw7XG4gICAgICAgIHRleHRPZmZzZXQgPSAoMSAtIGxpbmVDb3VudCkgKiBsaW5lSGVpZ2h0IC8gMjtcbiAgICAgIH1cbiAgICAgIGxldCBiYWNrZHJvcDtcbiAgICAgIGlmIChvcHRzQXRJbmRleC5zaG93TGFiZWxCYWNrZHJvcCkge1xuICAgICAgICBjb25zdCBsYWJlbFBhZGRpbmcgPSB0b1BhZGRpbmcob3B0c0F0SW5kZXguYmFja2Ryb3BQYWRkaW5nKTtcbiAgICAgICAgY29uc3QgaGVpZ2h0ID0gbGFiZWxTaXplcy5oZWlnaHRzW2ldO1xuICAgICAgICBjb25zdCB3aWR0aCA9IGxhYmVsU2l6ZXMud2lkdGhzW2ldO1xuICAgICAgICBsZXQgdG9wID0gdGV4dE9mZnNldCAtIGxhYmVsUGFkZGluZy50b3A7XG4gICAgICAgIGxldCBsZWZ0ID0gMCAtIGxhYmVsUGFkZGluZy5sZWZ0O1xuICAgICAgICBzd2l0Y2ggKHRleHRCYXNlbGluZSkge1xuICAgICAgICAgIGNhc2UgJ21pZGRsZSc6XG4gICAgICAgICAgICB0b3AgLT0gaGVpZ2h0IC8gMjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ2JvdHRvbSc6XG4gICAgICAgICAgICB0b3AgLT0gaGVpZ2h0O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoICh0ZXh0QWxpZ24pIHtcbiAgICAgICAgICBjYXNlICdjZW50ZXInOlxuICAgICAgICAgICAgbGVmdCAtPSB3aWR0aCAvIDI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdyaWdodCc6XG4gICAgICAgICAgICBsZWZ0IC09IHdpZHRoO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnaW5uZXInOlxuICAgICAgICAgICAgaWYgKGkgPT09IGlsZW4gLSAxKSB7XG4gICAgICAgICAgICAgIGxlZnQgLT0gd2lkdGg7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGkgPiAwKSB7XG4gICAgICAgICAgICAgIGxlZnQgLT0gd2lkdGggLyAyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgYmFja2Ryb3AgPSB7XG4gICAgICAgICAgbGVmdCxcbiAgICAgICAgICB0b3AsXG4gICAgICAgICAgd2lkdGg6IHdpZHRoICsgbGFiZWxQYWRkaW5nLndpZHRoLFxuICAgICAgICAgIGhlaWdodDogaGVpZ2h0ICsgbGFiZWxQYWRkaW5nLmhlaWdodCxcbiAgICAgICAgICBjb2xvcjogb3B0c0F0SW5kZXguYmFja2Ryb3BDb2xvclxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgaXRlbXMucHVzaCh7XG4gICAgICAgIGxhYmVsLFxuICAgICAgICBmb250LFxuICAgICAgICB0ZXh0T2Zmc2V0LFxuICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgcm90YXRpb24sXG4gICAgICAgICAgY29sb3IsXG4gICAgICAgICAgc3Ryb2tlQ29sb3IsXG4gICAgICAgICAgc3Ryb2tlV2lkdGgsXG4gICAgICAgICAgdGV4dEFsaWduOiB0aWNrVGV4dEFsaWduLFxuICAgICAgICAgIHRleHRCYXNlbGluZSxcbiAgICAgICAgICB0cmFuc2xhdGlvbjogW3gsIHldLFxuICAgICAgICAgIGJhY2tkcm9wXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gaXRlbXM7XG4gIH1cbiAgX2dldFhBeGlzTGFiZWxBbGlnbm1lbnQoKSB7XG4gICAgY29uc3Qge1xuICAgICAgcG9zaXRpb24sXG4gICAgICB0aWNrc1xuICAgIH0gPSB0aGlzLm9wdGlvbnM7XG4gICAgY29uc3Qgcm90YXRpb24gPSAtdG9SYWRpYW5zKHRoaXMubGFiZWxSb3RhdGlvbik7XG4gICAgaWYgKHJvdGF0aW9uKSB7XG4gICAgICByZXR1cm4gcG9zaXRpb24gPT09ICd0b3AnID8gJ2xlZnQnIDogJ3JpZ2h0JztcbiAgICB9XG4gICAgbGV0IGFsaWduID0gJ2NlbnRlcic7XG4gICAgaWYgKHRpY2tzLmFsaWduID09PSAnc3RhcnQnKSB7XG4gICAgICBhbGlnbiA9ICdsZWZ0JztcbiAgICB9IGVsc2UgaWYgKHRpY2tzLmFsaWduID09PSAnZW5kJykge1xuICAgICAgYWxpZ24gPSAncmlnaHQnO1xuICAgIH0gZWxzZSBpZiAodGlja3MuYWxpZ24gPT09ICdpbm5lcicpIHtcbiAgICAgIGFsaWduID0gJ2lubmVyJztcbiAgICB9XG4gICAgcmV0dXJuIGFsaWduO1xuICB9XG4gIF9nZXRZQXhpc0xhYmVsQWxpZ25tZW50KHRsKSB7XG4gICAgY29uc3Qge1xuICAgICAgcG9zaXRpb24sXG4gICAgICB0aWNrczoge1xuICAgICAgICBjcm9zc0FsaWduLFxuICAgICAgICBtaXJyb3IsXG4gICAgICAgIHBhZGRpbmdcbiAgICAgIH1cbiAgICB9ID0gdGhpcy5vcHRpb25zO1xuICAgIGNvbnN0IGxhYmVsU2l6ZXMgPSB0aGlzLl9nZXRMYWJlbFNpemVzKCk7XG4gICAgY29uc3QgdGlja0FuZFBhZGRpbmcgPSB0bCArIHBhZGRpbmc7XG4gICAgY29uc3Qgd2lkZXN0ID0gbGFiZWxTaXplcy53aWRlc3Qud2lkdGg7XG4gICAgbGV0IHRleHRBbGlnbjtcbiAgICBsZXQgeDtcbiAgICBpZiAocG9zaXRpb24gPT09ICdsZWZ0Jykge1xuICAgICAgaWYgKG1pcnJvcikge1xuICAgICAgICB4ID0gdGhpcy5yaWdodCArIHBhZGRpbmc7XG4gICAgICAgIGlmIChjcm9zc0FsaWduID09PSAnbmVhcicpIHtcbiAgICAgICAgICB0ZXh0QWxpZ24gPSAnbGVmdCc7XG4gICAgICAgIH0gZWxzZSBpZiAoY3Jvc3NBbGlnbiA9PT0gJ2NlbnRlcicpIHtcbiAgICAgICAgICB0ZXh0QWxpZ24gPSAnY2VudGVyJztcbiAgICAgICAgICB4ICs9IHdpZGVzdCAvIDI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGV4dEFsaWduID0gJ3JpZ2h0JztcbiAgICAgICAgICB4ICs9IHdpZGVzdDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgeCA9IHRoaXMucmlnaHQgLSB0aWNrQW5kUGFkZGluZztcbiAgICAgICAgaWYgKGNyb3NzQWxpZ24gPT09ICduZWFyJykge1xuICAgICAgICAgIHRleHRBbGlnbiA9ICdyaWdodCc7XG4gICAgICAgIH0gZWxzZSBpZiAoY3Jvc3NBbGlnbiA9PT0gJ2NlbnRlcicpIHtcbiAgICAgICAgICB0ZXh0QWxpZ24gPSAnY2VudGVyJztcbiAgICAgICAgICB4IC09IHdpZGVzdCAvIDI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGV4dEFsaWduID0gJ2xlZnQnO1xuICAgICAgICAgIHggPSB0aGlzLmxlZnQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHBvc2l0aW9uID09PSAncmlnaHQnKSB7XG4gICAgICBpZiAobWlycm9yKSB7XG4gICAgICAgIHggPSB0aGlzLmxlZnQgKyBwYWRkaW5nO1xuICAgICAgICBpZiAoY3Jvc3NBbGlnbiA9PT0gJ25lYXInKSB7XG4gICAgICAgICAgdGV4dEFsaWduID0gJ3JpZ2h0JztcbiAgICAgICAgfSBlbHNlIGlmIChjcm9zc0FsaWduID09PSAnY2VudGVyJykge1xuICAgICAgICAgIHRleHRBbGlnbiA9ICdjZW50ZXInO1xuICAgICAgICAgIHggLT0gd2lkZXN0IC8gMjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0ZXh0QWxpZ24gPSAnbGVmdCc7XG4gICAgICAgICAgeCAtPSB3aWRlc3Q7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHggPSB0aGlzLmxlZnQgKyB0aWNrQW5kUGFkZGluZztcbiAgICAgICAgaWYgKGNyb3NzQWxpZ24gPT09ICduZWFyJykge1xuICAgICAgICAgIHRleHRBbGlnbiA9ICdsZWZ0JztcbiAgICAgICAgfSBlbHNlIGlmIChjcm9zc0FsaWduID09PSAnY2VudGVyJykge1xuICAgICAgICAgIHRleHRBbGlnbiA9ICdjZW50ZXInO1xuICAgICAgICAgIHggKz0gd2lkZXN0IC8gMjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0ZXh0QWxpZ24gPSAncmlnaHQnO1xuICAgICAgICAgIHggPSB0aGlzLnJpZ2h0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRleHRBbGlnbiA9ICdyaWdodCc7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICB0ZXh0QWxpZ24sXG4gICAgICB4XG4gICAgfTtcbiAgfVxuICBfY29tcHV0ZUxhYmVsQXJlYSgpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zLnRpY2tzLm1pcnJvcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBjaGFydCA9IHRoaXMuY2hhcnQ7XG4gICAgY29uc3QgcG9zaXRpb24gPSB0aGlzLm9wdGlvbnMucG9zaXRpb247XG4gICAgaWYgKHBvc2l0aW9uID09PSAnbGVmdCcgfHwgcG9zaXRpb24gPT09ICdyaWdodCcpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRvcDogMCxcbiAgICAgICAgbGVmdDogdGhpcy5sZWZ0LFxuICAgICAgICBib3R0b206IGNoYXJ0LmhlaWdodCxcbiAgICAgICAgcmlnaHQ6IHRoaXMucmlnaHRcbiAgICAgIH07XG4gICAgfVxuICAgIGlmIChwb3NpdGlvbiA9PT0gJ3RvcCcgfHwgcG9zaXRpb24gPT09ICdib3R0b20nKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0b3A6IHRoaXMudG9wLFxuICAgICAgICBsZWZ0OiAwLFxuICAgICAgICBib3R0b206IHRoaXMuYm90dG9tLFxuICAgICAgICByaWdodDogY2hhcnQud2lkdGhcbiAgICAgIH07XG4gICAgfVxuICB9XG4gIGRyYXdCYWNrZ3JvdW5kKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIGN0eCxcbiAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgYmFja2dyb3VuZENvbG9yXG4gICAgICB9LFxuICAgICAgbGVmdCxcbiAgICAgIHRvcCxcbiAgICAgIHdpZHRoLFxuICAgICAgaGVpZ2h0XG4gICAgfSA9IHRoaXM7XG4gICAgaWYgKGJhY2tncm91bmRDb2xvcikge1xuICAgICAgY3R4LnNhdmUoKTtcbiAgICAgIGN0eC5maWxsU3R5bGUgPSBiYWNrZ3JvdW5kQ29sb3I7XG4gICAgICBjdHguZmlsbFJlY3QobGVmdCwgdG9wLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICAgIGN0eC5yZXN0b3JlKCk7XG4gICAgfVxuICB9XG4gIGdldExpbmVXaWR0aEZvclZhbHVlKHZhbHVlKSB7XG4gICAgY29uc3QgZ3JpZCA9IHRoaXMub3B0aW9ucy5ncmlkO1xuICAgIGlmICghdGhpcy5faXNWaXNpYmxlKCkgfHwgIWdyaWQuZGlzcGxheSkge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICAgIGNvbnN0IHRpY2tzID0gdGhpcy50aWNrcztcbiAgICBjb25zdCBpbmRleCA9IHRpY2tzLmZpbmRJbmRleCh0ID0+IHQudmFsdWUgPT09IHZhbHVlKTtcbiAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgY29uc3Qgb3B0cyA9IGdyaWQuc2V0Q29udGV4dCh0aGlzLmdldENvbnRleHQoaW5kZXgpKTtcbiAgICAgIHJldHVybiBvcHRzLmxpbmVXaWR0aDtcbiAgICB9XG4gICAgcmV0dXJuIDA7XG4gIH1cbiAgZHJhd0dyaWQoY2hhcnRBcmVhKSB7XG4gICAgY29uc3QgZ3JpZCA9IHRoaXMub3B0aW9ucy5ncmlkO1xuICAgIGNvbnN0IGN0eCA9IHRoaXMuY3R4O1xuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5fZ3JpZExpbmVJdGVtcyB8fCAodGhpcy5fZ3JpZExpbmVJdGVtcyA9IHRoaXMuX2NvbXB1dGVHcmlkTGluZUl0ZW1zKGNoYXJ0QXJlYSkpO1xuICAgIGxldCBpLCBpbGVuO1xuICAgIGNvbnN0IGRyYXdMaW5lID0gKHAxLCBwMiwgc3R5bGUpID0+IHtcbiAgICAgIGlmICghc3R5bGUud2lkdGggfHwgIXN0eWxlLmNvbG9yKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGN0eC5zYXZlKCk7XG4gICAgICBjdHgubGluZVdpZHRoID0gc3R5bGUud2lkdGg7XG4gICAgICBjdHguc3Ryb2tlU3R5bGUgPSBzdHlsZS5jb2xvcjtcbiAgICAgIGN0eC5zZXRMaW5lRGFzaChzdHlsZS5ib3JkZXJEYXNoIHx8IFtdKTtcbiAgICAgIGN0eC5saW5lRGFzaE9mZnNldCA9IHN0eWxlLmJvcmRlckRhc2hPZmZzZXQ7XG4gICAgICBjdHguYmVnaW5QYXRoKCk7XG4gICAgICBjdHgubW92ZVRvKHAxLngsIHAxLnkpO1xuICAgICAgY3R4LmxpbmVUbyhwMi54LCBwMi55KTtcbiAgICAgIGN0eC5zdHJva2UoKTtcbiAgICAgIGN0eC5yZXN0b3JlKCk7XG4gICAgfTtcbiAgICBpZiAoZ3JpZC5kaXNwbGF5KSB7XG4gICAgICBmb3IgKGkgPSAwLCBpbGVuID0gaXRlbXMubGVuZ3RoOyBpIDwgaWxlbjsgKytpKSB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSBpdGVtc1tpXTtcbiAgICAgICAgaWYgKGdyaWQuZHJhd09uQ2hhcnRBcmVhKSB7XG4gICAgICAgICAgZHJhd0xpbmUoe1xuICAgICAgICAgICAgeDogaXRlbS54MSxcbiAgICAgICAgICAgIHk6IGl0ZW0ueTFcbiAgICAgICAgICB9LCB7XG4gICAgICAgICAgICB4OiBpdGVtLngyLFxuICAgICAgICAgICAgeTogaXRlbS55MlxuICAgICAgICAgIH0sIGl0ZW0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChncmlkLmRyYXdUaWNrcykge1xuICAgICAgICAgIGRyYXdMaW5lKHtcbiAgICAgICAgICAgIHg6IGl0ZW0udHgxLFxuICAgICAgICAgICAgeTogaXRlbS50eTFcbiAgICAgICAgICB9LCB7XG4gICAgICAgICAgICB4OiBpdGVtLnR4MixcbiAgICAgICAgICAgIHk6IGl0ZW0udHkyXG4gICAgICAgICAgfSwge1xuICAgICAgICAgICAgY29sb3I6IGl0ZW0udGlja0NvbG9yLFxuICAgICAgICAgICAgd2lkdGg6IGl0ZW0udGlja1dpZHRoLFxuICAgICAgICAgICAgYm9yZGVyRGFzaDogaXRlbS50aWNrQm9yZGVyRGFzaCxcbiAgICAgICAgICAgIGJvcmRlckRhc2hPZmZzZXQ6IGl0ZW0udGlja0JvcmRlckRhc2hPZmZzZXRcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBkcmF3Qm9yZGVyKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIGNoYXJ0LFxuICAgICAgY3R4LFxuICAgICAgb3B0aW9uczoge1xuICAgICAgICBib3JkZXIsXG4gICAgICAgIGdyaWRcbiAgICAgIH1cbiAgICB9ID0gdGhpcztcbiAgICBjb25zdCBib3JkZXJPcHRzID0gYm9yZGVyLnNldENvbnRleHQodGhpcy5nZXRDb250ZXh0KCkpO1xuICAgIGNvbnN0IGF4aXNXaWR0aCA9IGJvcmRlci5kaXNwbGF5ID8gYm9yZGVyT3B0cy53aWR0aCA6IDA7XG4gICAgaWYgKCFheGlzV2lkdGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgbGFzdExpbmVXaWR0aCA9IGdyaWQuc2V0Q29udGV4dCh0aGlzLmdldENvbnRleHQoMCkpLmxpbmVXaWR0aDtcbiAgICBjb25zdCBib3JkZXJWYWx1ZSA9IHRoaXMuX2JvcmRlclZhbHVlO1xuICAgIGxldCB4MSwgeDIsIHkxLCB5MjtcbiAgICBpZiAodGhpcy5pc0hvcml6b250YWwoKSkge1xuICAgICAgeDEgPSBfYWxpZ25QaXhlbChjaGFydCwgdGhpcy5sZWZ0LCBheGlzV2lkdGgpIC0gYXhpc1dpZHRoIC8gMjtcbiAgICAgIHgyID0gX2FsaWduUGl4ZWwoY2hhcnQsIHRoaXMucmlnaHQsIGxhc3RMaW5lV2lkdGgpICsgbGFzdExpbmVXaWR0aCAvIDI7XG4gICAgICB5MSA9IHkyID0gYm9yZGVyVmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHkxID0gX2FsaWduUGl4ZWwoY2hhcnQsIHRoaXMudG9wLCBheGlzV2lkdGgpIC0gYXhpc1dpZHRoIC8gMjtcbiAgICAgIHkyID0gX2FsaWduUGl4ZWwoY2hhcnQsIHRoaXMuYm90dG9tLCBsYXN0TGluZVdpZHRoKSArIGxhc3RMaW5lV2lkdGggLyAyO1xuICAgICAgeDEgPSB4MiA9IGJvcmRlclZhbHVlO1xuICAgIH1cbiAgICBjdHguc2F2ZSgpO1xuICAgIGN0eC5saW5lV2lkdGggPSBib3JkZXJPcHRzLndpZHRoO1xuICAgIGN0eC5zdHJva2VTdHlsZSA9IGJvcmRlck9wdHMuY29sb3I7XG4gICAgY3R4LmJlZ2luUGF0aCgpO1xuICAgIGN0eC5tb3ZlVG8oeDEsIHkxKTtcbiAgICBjdHgubGluZVRvKHgyLCB5Mik7XG4gICAgY3R4LnN0cm9rZSgpO1xuICAgIGN0eC5yZXN0b3JlKCk7XG4gIH1cbiAgZHJhd0xhYmVscyhjaGFydEFyZWEpIHtcbiAgICBjb25zdCBvcHRpb25UaWNrcyA9IHRoaXMub3B0aW9ucy50aWNrcztcbiAgICBpZiAoIW9wdGlvblRpY2tzLmRpc3BsYXkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgY3R4ID0gdGhpcy5jdHg7XG4gICAgY29uc3QgYXJlYSA9IHRoaXMuX2NvbXB1dGVMYWJlbEFyZWEoKTtcbiAgICBpZiAoYXJlYSkge1xuICAgICAgY2xpcEFyZWEoY3R4LCBhcmVhKTtcbiAgICB9XG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLmdldExhYmVsSXRlbXMoY2hhcnRBcmVhKTtcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHtcbiAgICAgIGNvbnN0IHJlbmRlclRleHRPcHRpb25zID0gaXRlbS5vcHRpb25zO1xuICAgICAgY29uc3QgdGlja0ZvbnQgPSBpdGVtLmZvbnQ7XG4gICAgICBjb25zdCBsYWJlbCA9IGl0ZW0ubGFiZWw7XG4gICAgICBjb25zdCB5ID0gaXRlbS50ZXh0T2Zmc2V0O1xuICAgICAgcmVuZGVyVGV4dChjdHgsIGxhYmVsLCAwLCB5LCB0aWNrRm9udCwgcmVuZGVyVGV4dE9wdGlvbnMpO1xuICAgIH1cbiAgICBpZiAoYXJlYSkge1xuICAgICAgdW5jbGlwQXJlYShjdHgpO1xuICAgIH1cbiAgfVxuICBkcmF3VGl0bGUoKSB7XG4gICAgY29uc3Qge1xuICAgICAgY3R4LFxuICAgICAgb3B0aW9uczoge1xuICAgICAgICBwb3NpdGlvbixcbiAgICAgICAgdGl0bGUsXG4gICAgICAgIHJldmVyc2VcbiAgICAgIH1cbiAgICB9ID0gdGhpcztcbiAgICBpZiAoIXRpdGxlLmRpc3BsYXkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZm9udCA9IHRvRm9udCh0aXRsZS5mb250KTtcbiAgICBjb25zdCBwYWRkaW5nID0gdG9QYWRkaW5nKHRpdGxlLnBhZGRpbmcpO1xuICAgIGNvbnN0IGFsaWduID0gdGl0bGUuYWxpZ247XG4gICAgbGV0IG9mZnNldCA9IGZvbnQubGluZUhlaWdodCAvIDI7XG4gICAgaWYgKHBvc2l0aW9uID09PSAnYm90dG9tJyB8fCBwb3NpdGlvbiA9PT0gJ2NlbnRlcicgfHwgaXNPYmplY3QocG9zaXRpb24pKSB7XG4gICAgICBvZmZzZXQgKz0gcGFkZGluZy5ib3R0b207XG4gICAgICBpZiAoaXNBcnJheSh0aXRsZS50ZXh0KSkge1xuICAgICAgICBvZmZzZXQgKz0gZm9udC5saW5lSGVpZ2h0ICogKHRpdGxlLnRleHQubGVuZ3RoIC0gMSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG9mZnNldCArPSBwYWRkaW5nLnRvcDtcbiAgICB9XG4gICAgY29uc3Qge1xuICAgICAgdGl0bGVYLFxuICAgICAgdGl0bGVZLFxuICAgICAgbWF4V2lkdGgsXG4gICAgICByb3RhdGlvblxuICAgIH0gPSB0aXRsZUFyZ3ModGhpcywgb2Zmc2V0LCBwb3NpdGlvbiwgYWxpZ24pO1xuICAgIHJlbmRlclRleHQoY3R4LCB0aXRsZS50ZXh0LCAwLCAwLCBmb250LCB7XG4gICAgICBjb2xvcjogdGl0bGUuY29sb3IsXG4gICAgICBtYXhXaWR0aCxcbiAgICAgIHJvdGF0aW9uLFxuICAgICAgdGV4dEFsaWduOiB0aXRsZUFsaWduKGFsaWduLCBwb3NpdGlvbiwgcmV2ZXJzZSksXG4gICAgICB0ZXh0QmFzZWxpbmU6ICdtaWRkbGUnLFxuICAgICAgdHJhbnNsYXRpb246IFt0aXRsZVgsIHRpdGxlWV1cbiAgICB9KTtcbiAgfVxuICBkcmF3KGNoYXJ0QXJlYSkge1xuICAgIGlmICghdGhpcy5faXNWaXNpYmxlKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5kcmF3QmFja2dyb3VuZCgpO1xuICAgIHRoaXMuZHJhd0dyaWQoY2hhcnRBcmVhKTtcbiAgICB0aGlzLmRyYXdCb3JkZXIoKTtcbiAgICB0aGlzLmRyYXdUaXRsZSgpO1xuICAgIHRoaXMuZHJhd0xhYmVscyhjaGFydEFyZWEpO1xuICB9XG4gIF9sYXllcnMoKSB7XG4gICAgY29uc3Qgb3B0cyA9IHRoaXMub3B0aW9ucztcbiAgICBjb25zdCB0eiA9IG9wdHMudGlja3MgJiYgb3B0cy50aWNrcy56IHx8IDA7XG4gICAgY29uc3QgZ3ogPSB2YWx1ZU9yRGVmYXVsdChvcHRzLmdyaWQgJiYgb3B0cy5ncmlkLnosIC0xKTtcbiAgICBjb25zdCBieiA9IHZhbHVlT3JEZWZhdWx0KG9wdHMuYm9yZGVyICYmIG9wdHMuYm9yZGVyLnosIDApO1xuICAgIGlmICghdGhpcy5faXNWaXNpYmxlKCkgfHwgdGhpcy5kcmF3ICE9PSBTY2FsZS5wcm90b3R5cGUuZHJhdykge1xuICAgICAgcmV0dXJuIFt7XG4gICAgICAgIHo6IHR6LFxuICAgICAgICBkcmF3OiBjaGFydEFyZWEgPT4ge1xuICAgICAgICAgIHRoaXMuZHJhdyhjaGFydEFyZWEpO1xuICAgICAgICB9XG4gICAgICB9XTtcbiAgICB9XG4gICAgcmV0dXJuIFt7XG4gICAgICB6OiBneixcbiAgICAgIGRyYXc6IGNoYXJ0QXJlYSA9PiB7XG4gICAgICAgIHRoaXMuZHJhd0JhY2tncm91bmQoKTtcbiAgICAgICAgdGhpcy5kcmF3R3JpZChjaGFydEFyZWEpO1xuICAgICAgICB0aGlzLmRyYXdUaXRsZSgpO1xuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIHo6IGJ6LFxuICAgICAgZHJhdzogKCkgPT4ge1xuICAgICAgICB0aGlzLmRyYXdCb3JkZXIoKTtcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICB6OiB0eixcbiAgICAgIGRyYXc6IGNoYXJ0QXJlYSA9PiB7XG4gICAgICAgIHRoaXMuZHJhd0xhYmVscyhjaGFydEFyZWEpO1xuICAgICAgfVxuICAgIH1dO1xuICB9XG4gIGdldE1hdGNoaW5nVmlzaWJsZU1ldGFzKHR5cGUpIHtcbiAgICBjb25zdCBtZXRhcyA9IHRoaXMuY2hhcnQuZ2V0U29ydGVkVmlzaWJsZURhdGFzZXRNZXRhcygpO1xuICAgIGNvbnN0IGF4aXNJRCA9IHRoaXMuYXhpcyArICdBeGlzSUQnO1xuICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgIGxldCBpLCBpbGVuO1xuICAgIGZvciAoaSA9IDAsIGlsZW4gPSBtZXRhcy5sZW5ndGg7IGkgPCBpbGVuOyArK2kpIHtcbiAgICAgIGNvbnN0IG1ldGEgPSBtZXRhc1tpXTtcbiAgICAgIGlmIChtZXRhW2F4aXNJRF0gPT09IHRoaXMuaWQgJiYgKCF0eXBlIHx8IG1ldGEudHlwZSA9PT0gdHlwZSkpIHtcbiAgICAgICAgcmVzdWx0LnB1c2gobWV0YSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgX3Jlc29sdmVUaWNrRm9udE9wdGlvbnMoaW5kZXgpIHtcbiAgICBjb25zdCBvcHRzID0gdGhpcy5vcHRpb25zLnRpY2tzLnNldENvbnRleHQodGhpcy5nZXRDb250ZXh0KGluZGV4KSk7XG4gICAgcmV0dXJuIHRvRm9udChvcHRzLmZvbnQpO1xuICB9XG4gIF9tYXhEaWdpdHMoKSB7XG4gICAgY29uc3QgZm9udFNpemUgPSB0aGlzLl9yZXNvbHZlVGlja0ZvbnRPcHRpb25zKDApLmxpbmVIZWlnaHQ7XG4gICAgcmV0dXJuICh0aGlzLmlzSG9yaXpvbnRhbCgpID8gdGhpcy53aWR0aCA6IHRoaXMuaGVpZ2h0KSAvIGZvbnRTaXplO1xuICB9XG59XG5jbGFzcyBUeXBlZFJlZ2lzdHJ5IHtcbiAgY29uc3RydWN0b3IodHlwZSwgc2NvcGUsIG92ZXJyaWRlKSB7XG4gICAgdGhpcy50eXBlID0gdHlwZTtcbiAgICB0aGlzLnNjb3BlID0gc2NvcGU7XG4gICAgdGhpcy5vdmVycmlkZSA9IG92ZXJyaWRlO1xuICAgIHRoaXMuaXRlbXMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICB9XG4gIGlzRm9yVHlwZSh0eXBlKSB7XG4gICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaXNQcm90b3R5cGVPZi5jYWxsKHRoaXMudHlwZS5wcm90b3R5cGUsIHR5cGUucHJvdG90eXBlKTtcbiAgfVxuICByZWdpc3RlcihpdGVtKSB7XG4gICAgY29uc3QgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoaXRlbSk7XG4gICAgbGV0IHBhcmVudFNjb3BlO1xuICAgIGlmIChpc0lDaGFydENvbXBvbmVudChwcm90bykpIHtcbiAgICAgIHBhcmVudFNjb3BlID0gdGhpcy5yZWdpc3Rlcihwcm90byk7XG4gICAgfVxuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5pdGVtcztcbiAgICBjb25zdCBpZCA9IGl0ZW0uaWQ7XG4gICAgY29uc3Qgc2NvcGUgPSB0aGlzLnNjb3BlICsgJy4nICsgaWQ7XG4gICAgaWYgKCFpZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjbGFzcyBkb2VzIG5vdCBoYXZlIGlkOiAnICsgaXRlbSk7XG4gICAgfVxuICAgIGlmIChpZCBpbiBpdGVtcykge1xuICAgICAgcmV0dXJuIHNjb3BlO1xuICAgIH1cbiAgICBpdGVtc1tpZF0gPSBpdGVtO1xuICAgIHJlZ2lzdGVyRGVmYXVsdHMoaXRlbSwgc2NvcGUsIHBhcmVudFNjb3BlKTtcbiAgICBpZiAodGhpcy5vdmVycmlkZSkge1xuICAgICAgZGVmYXVsdHMub3ZlcnJpZGUoaXRlbS5pZCwgaXRlbS5vdmVycmlkZXMpO1xuICAgIH1cbiAgICByZXR1cm4gc2NvcGU7XG4gIH1cbiAgZ2V0KGlkKSB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbXNbaWRdO1xuICB9XG4gIHVucmVnaXN0ZXIoaXRlbSkge1xuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5pdGVtcztcbiAgICBjb25zdCBpZCA9IGl0ZW0uaWQ7XG4gICAgY29uc3Qgc2NvcGUgPSB0aGlzLnNjb3BlO1xuICAgIGlmIChpZCBpbiBpdGVtcykge1xuICAgICAgZGVsZXRlIGl0ZW1zW2lkXTtcbiAgICB9XG4gICAgaWYgKHNjb3BlICYmIGlkIGluIGRlZmF1bHRzW3Njb3BlXSkge1xuICAgICAgZGVsZXRlIGRlZmF1bHRzW3Njb3BlXVtpZF07XG4gICAgICBpZiAodGhpcy5vdmVycmlkZSkge1xuICAgICAgICBkZWxldGUgb3ZlcnJpZGVzW2lkXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIHJlZ2lzdGVyRGVmYXVsdHMoaXRlbSwgc2NvcGUsIHBhcmVudFNjb3BlKSB7XG4gIGNvbnN0IGl0ZW1EZWZhdWx0cyA9IG1lcmdlKE9iamVjdC5jcmVhdGUobnVsbCksIFtwYXJlbnRTY29wZSA/IGRlZmF1bHRzLmdldChwYXJlbnRTY29wZSkgOiB7fSwgZGVmYXVsdHMuZ2V0KHNjb3BlKSwgaXRlbS5kZWZhdWx0c10pO1xuICBkZWZhdWx0cy5zZXQoc2NvcGUsIGl0ZW1EZWZhdWx0cyk7XG4gIGlmIChpdGVtLmRlZmF1bHRSb3V0ZXMpIHtcbiAgICByb3V0ZURlZmF1bHRzKHNjb3BlLCBpdGVtLmRlZmF1bHRSb3V0ZXMpO1xuICB9XG4gIGlmIChpdGVtLmRlc2NyaXB0b3JzKSB7XG4gICAgZGVmYXVsdHMuZGVzY3JpYmUoc2NvcGUsIGl0ZW0uZGVzY3JpcHRvcnMpO1xuICB9XG59XG5mdW5jdGlvbiByb3V0ZURlZmF1bHRzKHNjb3BlLCByb3V0ZXMpIHtcbiAgT2JqZWN0LmtleXMocm91dGVzKS5mb3JFYWNoKHByb3BlcnR5ID0+IHtcbiAgICBjb25zdCBwcm9wZXJ0eVBhcnRzID0gcHJvcGVydHkuc3BsaXQoJy4nKTtcbiAgICBjb25zdCBzb3VyY2VOYW1lID0gcHJvcGVydHlQYXJ0cy5wb3AoKTtcbiAgICBjb25zdCBzb3VyY2VTY29wZSA9IFtzY29wZV0uY29uY2F0KHByb3BlcnR5UGFydHMpLmpvaW4oJy4nKTtcbiAgICBjb25zdCBwYXJ0cyA9IHJvdXRlc1twcm9wZXJ0eV0uc3BsaXQoJy4nKTtcbiAgICBjb25zdCB0YXJnZXROYW1lID0gcGFydHMucG9wKCk7XG4gICAgY29uc3QgdGFyZ2V0U2NvcGUgPSBwYXJ0cy5qb2luKCcuJyk7XG4gICAgZGVmYXVsdHMucm91dGUoc291cmNlU2NvcGUsIHNvdXJjZU5hbWUsIHRhcmdldFNjb3BlLCB0YXJnZXROYW1lKTtcbiAgfSk7XG59XG5mdW5jdGlvbiBpc0lDaGFydENvbXBvbmVudChwcm90bykge1xuICByZXR1cm4gJ2lkJyBpbiBwcm90byAmJiAnZGVmYXVsdHMnIGluIHByb3RvO1xufVxuY2xhc3MgUmVnaXN0cnkge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmNvbnRyb2xsZXJzID0gbmV3IFR5cGVkUmVnaXN0cnkoRGF0YXNldENvbnRyb2xsZXIsICdkYXRhc2V0cycsIHRydWUpO1xuICAgIHRoaXMuZWxlbWVudHMgPSBuZXcgVHlwZWRSZWdpc3RyeShFbGVtZW50LCAnZWxlbWVudHMnKTtcbiAgICB0aGlzLnBsdWdpbnMgPSBuZXcgVHlwZWRSZWdpc3RyeShPYmplY3QsICdwbHVnaW5zJyk7XG4gICAgdGhpcy5zY2FsZXMgPSBuZXcgVHlwZWRSZWdpc3RyeShTY2FsZSwgJ3NjYWxlcycpO1xuICAgIHRoaXMuX3R5cGVkUmVnaXN0cmllcyA9IFt0aGlzLmNvbnRyb2xsZXJzLCB0aGlzLnNjYWxlcywgdGhpcy5lbGVtZW50c107XG4gIH1cbiAgYWRkKC4uLmFyZ3MpIHtcbiAgICB0aGlzLl9lYWNoKCdyZWdpc3RlcicsIGFyZ3MpO1xuICB9XG4gIHJlbW92ZSguLi5hcmdzKSB7XG4gICAgdGhpcy5fZWFjaCgndW5yZWdpc3RlcicsIGFyZ3MpO1xuICB9XG4gIGFkZENvbnRyb2xsZXJzKC4uLmFyZ3MpIHtcbiAgICB0aGlzLl9lYWNoKCdyZWdpc3RlcicsIGFyZ3MsIHRoaXMuY29udHJvbGxlcnMpO1xuICB9XG4gIGFkZEVsZW1lbnRzKC4uLmFyZ3MpIHtcbiAgICB0aGlzLl9lYWNoKCdyZWdpc3RlcicsIGFyZ3MsIHRoaXMuZWxlbWVudHMpO1xuICB9XG4gIGFkZFBsdWdpbnMoLi4uYXJncykge1xuICAgIHRoaXMuX2VhY2goJ3JlZ2lzdGVyJywgYXJncywgdGhpcy5wbHVnaW5zKTtcbiAgfVxuICBhZGRTY2FsZXMoLi4uYXJncykge1xuICAgIHRoaXMuX2VhY2goJ3JlZ2lzdGVyJywgYXJncywgdGhpcy5zY2FsZXMpO1xuICB9XG4gIGdldENvbnRyb2xsZXIoaWQpIHtcbiAgICByZXR1cm4gdGhpcy5fZ2V0KGlkLCB0aGlzLmNvbnRyb2xsZXJzLCAnY29udHJvbGxlcicpO1xuICB9XG4gIGdldEVsZW1lbnQoaWQpIHtcbiAgICByZXR1cm4gdGhpcy5fZ2V0KGlkLCB0aGlzLmVsZW1lbnRzLCAnZWxlbWVudCcpO1xuICB9XG4gIGdldFBsdWdpbihpZCkge1xuICAgIHJldHVybiB0aGlzLl9nZXQoaWQsIHRoaXMucGx1Z2lucywgJ3BsdWdpbicpO1xuICB9XG4gIGdldFNjYWxlKGlkKSB7XG4gICAgcmV0dXJuIHRoaXMuX2dldChpZCwgdGhpcy5zY2FsZXMsICdzY2FsZScpO1xuICB9XG4gIHJlbW92ZUNvbnRyb2xsZXJzKC4uLmFyZ3MpIHtcbiAgICB0aGlzLl9lYWNoKCd1bnJlZ2lzdGVyJywgYXJncywgdGhpcy5jb250cm9sbGVycyk7XG4gIH1cbiAgcmVtb3ZlRWxlbWVudHMoLi4uYXJncykge1xuICAgIHRoaXMuX2VhY2goJ3VucmVnaXN0ZXInLCBhcmdzLCB0aGlzLmVsZW1lbnRzKTtcbiAgfVxuICByZW1vdmVQbHVnaW5zKC4uLmFyZ3MpIHtcbiAgICB0aGlzLl9lYWNoKCd1bnJlZ2lzdGVyJywgYXJncywgdGhpcy5wbHVnaW5zKTtcbiAgfVxuICByZW1vdmVTY2FsZXMoLi4uYXJncykge1xuICAgIHRoaXMuX2VhY2goJ3VucmVnaXN0ZXInLCBhcmdzLCB0aGlzLnNjYWxlcyk7XG4gIH1cbiAgX2VhY2gobWV0aG9kLCBhcmdzLCB0eXBlZFJlZ2lzdHJ5KSB7XG4gICAgWy4uLmFyZ3NdLmZvckVhY2goYXJnID0+IHtcbiAgICAgIGNvbnN0IHJlZyA9IHR5cGVkUmVnaXN0cnkgfHwgdGhpcy5fZ2V0UmVnaXN0cnlGb3JUeXBlKGFyZyk7XG4gICAgICBpZiAodHlwZWRSZWdpc3RyeSB8fCByZWcuaXNGb3JUeXBlKGFyZykgfHwgcmVnID09PSB0aGlzLnBsdWdpbnMgJiYgYXJnLmlkKSB7XG4gICAgICAgIHRoaXMuX2V4ZWMobWV0aG9kLCByZWcsIGFyZyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlYWNoKGFyZywgaXRlbSA9PiB7XG4gICAgICAgICAgY29uc3QgaXRlbVJlZyA9IHR5cGVkUmVnaXN0cnkgfHwgdGhpcy5fZ2V0UmVnaXN0cnlGb3JUeXBlKGl0ZW0pO1xuICAgICAgICAgIHRoaXMuX2V4ZWMobWV0aG9kLCBpdGVtUmVnLCBpdGVtKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgX2V4ZWMobWV0aG9kLCByZWdpc3RyeSwgY29tcG9uZW50KSB7XG4gICAgY29uc3QgY2FtZWxNZXRob2QgPSBfY2FwaXRhbGl6ZShtZXRob2QpO1xuICAgIGNhbGxiYWNrKGNvbXBvbmVudFsnYmVmb3JlJyArIGNhbWVsTWV0aG9kXSwgW10sIGNvbXBvbmVudCk7XG4gICAgcmVnaXN0cnlbbWV0aG9kXShjb21wb25lbnQpO1xuICAgIGNhbGxiYWNrKGNvbXBvbmVudFsnYWZ0ZXInICsgY2FtZWxNZXRob2RdLCBbXSwgY29tcG9uZW50KTtcbiAgfVxuICBfZ2V0UmVnaXN0cnlGb3JUeXBlKHR5cGUpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuX3R5cGVkUmVnaXN0cmllcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgcmVnID0gdGhpcy5fdHlwZWRSZWdpc3RyaWVzW2ldO1xuICAgICAgaWYgKHJlZy5pc0ZvclR5cGUodHlwZSkpIHtcbiAgICAgICAgcmV0dXJuIHJlZztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMucGx1Z2lucztcbiAgfVxuICBfZ2V0KGlkLCB0eXBlZFJlZ2lzdHJ5LCB0eXBlKSB7XG4gICAgY29uc3QgaXRlbSA9IHR5cGVkUmVnaXN0cnkuZ2V0KGlkKTtcbiAgICBpZiAoaXRlbSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1wiJyArIGlkICsgJ1wiIGlzIG5vdCBhIHJlZ2lzdGVyZWQgJyArIHR5cGUgKyAnLicpO1xuICAgIH1cbiAgICByZXR1cm4gaXRlbTtcbiAgfVxufVxudmFyIHJlZ2lzdHJ5ID0gLyogI19fUFVSRV9fICovbmV3IFJlZ2lzdHJ5KCk7XG5jbGFzcyBQbHVnaW5TZXJ2aWNlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5faW5pdCA9IHVuZGVmaW5lZDtcbiAgfVxuICBub3RpZnkoY2hhcnQsIGhvb2ssIGFyZ3MsIGZpbHRlcikge1xuICAgIGlmIChob29rID09PSAnYmVmb3JlSW5pdCcpIHtcbiAgICAgIHRoaXMuX2luaXQgPSB0aGlzLl9jcmVhdGVEZXNjcmlwdG9ycyhjaGFydCwgdHJ1ZSk7XG4gICAgICB0aGlzLl9ub3RpZnkodGhpcy5faW5pdCwgY2hhcnQsICdpbnN0YWxsJyk7XG4gICAgfVxuICAgIGlmICh0aGlzLl9pbml0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZGVzY3JpcHRvcnMgPSBmaWx0ZXIgPyB0aGlzLl9kZXNjcmlwdG9ycyhjaGFydCkuZmlsdGVyKGZpbHRlcikgOiB0aGlzLl9kZXNjcmlwdG9ycyhjaGFydCk7XG4gICAgY29uc3QgcmVzdWx0ID0gdGhpcy5fbm90aWZ5KGRlc2NyaXB0b3JzLCBjaGFydCwgaG9vaywgYXJncyk7XG4gICAgaWYgKGhvb2sgPT09ICdhZnRlckRlc3Ryb3knKSB7XG4gICAgICB0aGlzLl9ub3RpZnkoZGVzY3JpcHRvcnMsIGNoYXJ0LCAnc3RvcCcpO1xuICAgICAgdGhpcy5fbm90aWZ5KHRoaXMuX2luaXQsIGNoYXJ0LCAndW5pbnN0YWxsJyk7XG4gICAgICB0aGlzLl9pbml0ID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIF9ub3RpZnkoZGVzY3JpcHRvcnMsIGNoYXJ0LCBob29rLCBhcmdzKSB7XG4gICAgYXJncyA9IGFyZ3MgfHwge307XG4gICAgZm9yIChjb25zdCBkZXNjcmlwdG9yIG9mIGRlc2NyaXB0b3JzKSB7XG4gICAgICBjb25zdCBwbHVnaW4gPSBkZXNjcmlwdG9yLnBsdWdpbjtcbiAgICAgIGNvbnN0IG1ldGhvZCA9IHBsdWdpbltob29rXTtcbiAgICAgIGNvbnN0IHBhcmFtcyA9IFtjaGFydCwgYXJncywgZGVzY3JpcHRvci5vcHRpb25zXTtcbiAgICAgIGlmIChjYWxsYmFjayhtZXRob2QsIHBhcmFtcywgcGx1Z2luKSA9PT0gZmFsc2UgJiYgYXJncy5jYW5jZWxhYmxlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaW52YWxpZGF0ZSgpIHtcbiAgICBpZiAoIWlzTnVsbE9yVW5kZWYodGhpcy5fY2FjaGUpKSB7XG4gICAgICB0aGlzLl9vbGRDYWNoZSA9IHRoaXMuX2NhY2hlO1xuICAgICAgdGhpcy5fY2FjaGUgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG4gIF9kZXNjcmlwdG9ycyhjaGFydCkge1xuICAgIGlmICh0aGlzLl9jYWNoZSkge1xuICAgICAgcmV0dXJuIHRoaXMuX2NhY2hlO1xuICAgIH1cbiAgICBjb25zdCBkZXNjcmlwdG9ycyA9IHRoaXMuX2NhY2hlID0gdGhpcy5fY3JlYXRlRGVzY3JpcHRvcnMoY2hhcnQpO1xuICAgIHRoaXMuX25vdGlmeVN0YXRlQ2hhbmdlcyhjaGFydCk7XG4gICAgcmV0dXJuIGRlc2NyaXB0b3JzO1xuICB9XG4gIF9jcmVhdGVEZXNjcmlwdG9ycyhjaGFydCwgYWxsKSB7XG4gICAgY29uc3QgY29uZmlnID0gY2hhcnQgJiYgY2hhcnQuY29uZmlnO1xuICAgIGNvbnN0IG9wdGlvbnMgPSB2YWx1ZU9yRGVmYXVsdChjb25maWcub3B0aW9ucyAmJiBjb25maWcub3B0aW9ucy5wbHVnaW5zLCB7fSk7XG4gICAgY29uc3QgcGx1Z2lucyA9IGFsbFBsdWdpbnMoY29uZmlnKTtcbiAgICByZXR1cm4gb3B0aW9ucyA9PT0gZmFsc2UgJiYgIWFsbCA/IFtdIDogY3JlYXRlRGVzY3JpcHRvcnMoY2hhcnQsIHBsdWdpbnMsIG9wdGlvbnMsIGFsbCk7XG4gIH1cbiAgX25vdGlmeVN0YXRlQ2hhbmdlcyhjaGFydCkge1xuICAgIGNvbnN0IHByZXZpb3VzRGVzY3JpcHRvcnMgPSB0aGlzLl9vbGRDYWNoZSB8fCBbXTtcbiAgICBjb25zdCBkZXNjcmlwdG9ycyA9IHRoaXMuX2NhY2hlO1xuICAgIGNvbnN0IGRpZmYgPSAoYSwgYikgPT4gYS5maWx0ZXIoeCA9PiAhYi5zb21lKHkgPT4geC5wbHVnaW4uaWQgPT09IHkucGx1Z2luLmlkKSk7XG4gICAgdGhpcy5fbm90aWZ5KGRpZmYocHJldmlvdXNEZXNjcmlwdG9ycywgZGVzY3JpcHRvcnMpLCBjaGFydCwgJ3N0b3AnKTtcbiAgICB0aGlzLl9ub3RpZnkoZGlmZihkZXNjcmlwdG9ycywgcHJldmlvdXNEZXNjcmlwdG9ycyksIGNoYXJ0LCAnc3RhcnQnKTtcbiAgfVxufVxuZnVuY3Rpb24gYWxsUGx1Z2lucyhjb25maWcpIHtcbiAgY29uc3QgbG9jYWxJZHMgPSB7fTtcbiAgY29uc3QgcGx1Z2lucyA9IFtdO1xuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMocmVnaXN0cnkucGx1Z2lucy5pdGVtcyk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgIHBsdWdpbnMucHVzaChyZWdpc3RyeS5nZXRQbHVnaW4oa2V5c1tpXSkpO1xuICB9XG4gIGNvbnN0IGxvY2FsID0gY29uZmlnLnBsdWdpbnMgfHwgW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbG9jYWwubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBwbHVnaW4gPSBsb2NhbFtpXTtcbiAgICBpZiAocGx1Z2lucy5pbmRleE9mKHBsdWdpbikgPT09IC0xKSB7XG4gICAgICBwbHVnaW5zLnB1c2gocGx1Z2luKTtcbiAgICAgIGxvY2FsSWRzW3BsdWdpbi5pZF0gPSB0cnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIHBsdWdpbnMsXG4gICAgbG9jYWxJZHNcbiAgfTtcbn1cbmZ1bmN0aW9uIGdldE9wdHMob3B0aW9ucywgYWxsKSB7XG4gIGlmICghYWxsICYmIG9wdGlvbnMgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgaWYgKG9wdGlvbnMgPT09IHRydWUpIHtcbiAgICByZXR1cm4ge307XG4gIH1cbiAgcmV0dXJuIG9wdGlvbnM7XG59XG5mdW5jdGlvbiBjcmVhdGVEZXNjcmlwdG9ycyhjaGFydCwge1xuICBwbHVnaW5zLFxuICBsb2NhbElkc1xufSwgb3B0aW9ucywgYWxsKSB7XG4gIGNvbnN0IHJlc3VsdCA9IFtdO1xuICBjb25zdCBjb250ZXh0ID0gY2hhcnQuZ2V0Q29udGV4dCgpO1xuICBmb3IgKGNvbnN0IHBsdWdpbiBvZiBwbHVnaW5zKSB7XG4gICAgY29uc3QgaWQgPSBwbHVnaW4uaWQ7XG4gICAgY29uc3Qgb3B0cyA9IGdldE9wdHMob3B0aW9uc1tpZF0sIGFsbCk7XG4gICAgaWYgKG9wdHMgPT09IG51bGwpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICByZXN1bHQucHVzaCh7XG4gICAgICBwbHVnaW4sXG4gICAgICBvcHRpb25zOiBwbHVnaW5PcHRzKGNoYXJ0LmNvbmZpZywge1xuICAgICAgICBwbHVnaW4sXG4gICAgICAgIGxvY2FsOiBsb2NhbElkc1tpZF1cbiAgICAgIH0sIG9wdHMsIGNvbnRleHQpXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cbmZ1bmN0aW9uIHBsdWdpbk9wdHMoY29uZmlnLCB7XG4gIHBsdWdpbixcbiAgbG9jYWxcbn0sIG9wdHMsIGNvbnRleHQpIHtcbiAgY29uc3Qga2V5cyA9IGNvbmZpZy5wbHVnaW5TY29wZUtleXMocGx1Z2luKTtcbiAgY29uc3Qgc2NvcGVzID0gY29uZmlnLmdldE9wdGlvblNjb3BlcyhvcHRzLCBrZXlzKTtcbiAgaWYgKGxvY2FsICYmIHBsdWdpbi5kZWZhdWx0cykge1xuICAgIHNjb3Blcy5wdXNoKHBsdWdpbi5kZWZhdWx0cyk7XG4gIH1cbiAgcmV0dXJuIGNvbmZpZy5jcmVhdGVSZXNvbHZlcihzY29wZXMsIGNvbnRleHQsIFsnJ10sIHtcbiAgICBzY3JpcHRhYmxlOiBmYWxzZSxcbiAgICBpbmRleGFibGU6IGZhbHNlLFxuICAgIGFsbEtleXM6IHRydWVcbiAgfSk7XG59XG5mdW5jdGlvbiBnZXRJbmRleEF4aXModHlwZSwgb3B0aW9ucykge1xuICBjb25zdCBkYXRhc2V0RGVmYXVsdHMgPSBkZWZhdWx0cy5kYXRhc2V0c1t0eXBlXSB8fCB7fTtcbiAgY29uc3QgZGF0YXNldE9wdGlvbnMgPSAob3B0aW9ucy5kYXRhc2V0cyB8fCB7fSlbdHlwZV0gfHwge307XG4gIHJldHVybiBkYXRhc2V0T3B0aW9ucy5pbmRleEF4aXMgfHwgb3B0aW9ucy5pbmRleEF4aXMgfHwgZGF0YXNldERlZmF1bHRzLmluZGV4QXhpcyB8fCAneCc7XG59XG5mdW5jdGlvbiBnZXRBeGlzRnJvbURlZmF1bHRTY2FsZUlEKGlkLCBpbmRleEF4aXMpIHtcbiAgbGV0IGF4aXMgPSBpZDtcbiAgaWYgKGlkID09PSAnX2luZGV4XycpIHtcbiAgICBheGlzID0gaW5kZXhBeGlzO1xuICB9IGVsc2UgaWYgKGlkID09PSAnX3ZhbHVlXycpIHtcbiAgICBheGlzID0gaW5kZXhBeGlzID09PSAneCcgPyAneScgOiAneCc7XG4gIH1cbiAgcmV0dXJuIGF4aXM7XG59XG5mdW5jdGlvbiBnZXREZWZhdWx0U2NhbGVJREZyb21BeGlzKGF4aXMsIGluZGV4QXhpcykge1xuICByZXR1cm4gYXhpcyA9PT0gaW5kZXhBeGlzID8gJ19pbmRleF8nIDogJ192YWx1ZV8nO1xufVxuZnVuY3Rpb24gaWRNYXRjaGVzQXhpcyhpZCkge1xuICBpZiAoaWQgPT09ICd4JyB8fCBpZCA9PT0gJ3knIHx8IGlkID09PSAncicpIHtcbiAgICByZXR1cm4gaWQ7XG4gIH1cbn1cbmZ1bmN0aW9uIGF4aXNGcm9tUG9zaXRpb24ocG9zaXRpb24pIHtcbiAgaWYgKHBvc2l0aW9uID09PSAndG9wJyB8fCBwb3NpdGlvbiA9PT0gJ2JvdHRvbScpIHtcbiAgICByZXR1cm4gJ3gnO1xuICB9XG4gIGlmIChwb3NpdGlvbiA9PT0gJ2xlZnQnIHx8IHBvc2l0aW9uID09PSAncmlnaHQnKSB7XG4gICAgcmV0dXJuICd5JztcbiAgfVxufVxuZnVuY3Rpb24gZGV0ZXJtaW5lQXhpcyhpZCwgLi4uc2NhbGVPcHRpb25zKSB7XG4gIGlmIChpZE1hdGNoZXNBeGlzKGlkKSkge1xuICAgIHJldHVybiBpZDtcbiAgfVxuICBmb3IgKGNvbnN0IG9wdHMgb2Ygc2NhbGVPcHRpb25zKSB7XG4gICAgY29uc3QgYXhpcyA9IG9wdHMuYXhpcyB8fCBheGlzRnJvbVBvc2l0aW9uKG9wdHMucG9zaXRpb24pIHx8IGlkLmxlbmd0aCA+IDEgJiYgaWRNYXRjaGVzQXhpcyhpZFswXS50b0xvd2VyQ2FzZSgpKTtcbiAgICBpZiAoYXhpcykge1xuICAgICAgcmV0dXJuIGF4aXM7XG4gICAgfVxuICB9XG4gIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGRldGVybWluZSB0eXBlIG9mICcke2lkfScgYXhpcy4gUGxlYXNlIHByb3ZpZGUgJ2F4aXMnIG9yICdwb3NpdGlvbicgb3B0aW9uLmApO1xufVxuZnVuY3Rpb24gZ2V0QXhpc0Zyb21EYXRhc2V0KGlkLCBheGlzLCBkYXRhc2V0KSB7XG4gIGlmIChkYXRhc2V0W2F4aXMgKyAnQXhpc0lEJ10gPT09IGlkKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGF4aXNcbiAgICB9O1xuICB9XG59XG5mdW5jdGlvbiByZXRyaWV2ZUF4aXNGcm9tRGF0YXNldHMoaWQsIGNvbmZpZykge1xuICBpZiAoY29uZmlnLmRhdGEgJiYgY29uZmlnLmRhdGEuZGF0YXNldHMpIHtcbiAgICBjb25zdCBib3VuZERzID0gY29uZmlnLmRhdGEuZGF0YXNldHMuZmlsdGVyKGQgPT4gZC54QXhpc0lEID09PSBpZCB8fCBkLnlBeGlzSUQgPT09IGlkKTtcbiAgICBpZiAoYm91bmREcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBnZXRBeGlzRnJvbURhdGFzZXQoaWQsICd4JywgYm91bmREc1swXSkgfHwgZ2V0QXhpc0Zyb21EYXRhc2V0KGlkLCAneScsIGJvdW5kRHNbMF0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4ge307XG59XG5mdW5jdGlvbiBtZXJnZVNjYWxlQ29uZmlnKGNvbmZpZywgb3B0aW9ucykge1xuICBjb25zdCBjaGFydERlZmF1bHRzID0gb3ZlcnJpZGVzW2NvbmZpZy50eXBlXSB8fCB7XG4gICAgc2NhbGVzOiB7fVxuICB9O1xuICBjb25zdCBjb25maWdTY2FsZXMgPSBvcHRpb25zLnNjYWxlcyB8fCB7fTtcbiAgY29uc3QgY2hhcnRJbmRleEF4aXMgPSBnZXRJbmRleEF4aXMoY29uZmlnLnR5cGUsIG9wdGlvbnMpO1xuICBjb25zdCBzY2FsZXMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBPYmplY3Qua2V5cyhjb25maWdTY2FsZXMpLmZvckVhY2goaWQgPT4ge1xuICAgIGNvbnN0IHNjYWxlQ29uZiA9IGNvbmZpZ1NjYWxlc1tpZF07XG4gICAgaWYgKCFpc09iamVjdChzY2FsZUNvbmYpKSB7XG4gICAgICByZXR1cm4gY29uc29sZS5lcnJvcihgSW52YWxpZCBzY2FsZSBjb25maWd1cmF0aW9uIGZvciBzY2FsZTogJHtpZH1gKTtcbiAgICB9XG4gICAgaWYgKHNjYWxlQ29uZi5fcHJveHkpIHtcbiAgICAgIHJldHVybiBjb25zb2xlLndhcm4oYElnbm9yaW5nIHJlc29sdmVyIHBhc3NlZCBhcyBvcHRpb25zIGZvciBzY2FsZTogJHtpZH1gKTtcbiAgICB9XG4gICAgY29uc3QgYXhpcyA9IGRldGVybWluZUF4aXMoaWQsIHNjYWxlQ29uZiwgcmV0cmlldmVBeGlzRnJvbURhdGFzZXRzKGlkLCBjb25maWcpLCBkZWZhdWx0cy5zY2FsZXNbc2NhbGVDb25mLnR5cGVdKTtcbiAgICBjb25zdCBkZWZhdWx0SWQgPSBnZXREZWZhdWx0U2NhbGVJREZyb21BeGlzKGF4aXMsIGNoYXJ0SW5kZXhBeGlzKTtcbiAgICBjb25zdCBkZWZhdWx0U2NhbGVPcHRpb25zID0gY2hhcnREZWZhdWx0cy5zY2FsZXMgfHwge307XG4gICAgc2NhbGVzW2lkXSA9IG1lcmdlSWYoT2JqZWN0LmNyZWF0ZShudWxsKSwgW3tcbiAgICAgIGF4aXNcbiAgICB9LCBzY2FsZUNvbmYsIGRlZmF1bHRTY2FsZU9wdGlvbnNbYXhpc10sIGRlZmF1bHRTY2FsZU9wdGlvbnNbZGVmYXVsdElkXV0pO1xuICB9KTtcbiAgY29uZmlnLmRhdGEuZGF0YXNldHMuZm9yRWFjaChkYXRhc2V0ID0+IHtcbiAgICBjb25zdCB0eXBlID0gZGF0YXNldC50eXBlIHx8IGNvbmZpZy50eXBlO1xuICAgIGNvbnN0IGluZGV4QXhpcyA9IGRhdGFzZXQuaW5kZXhBeGlzIHx8IGdldEluZGV4QXhpcyh0eXBlLCBvcHRpb25zKTtcbiAgICBjb25zdCBkYXRhc2V0RGVmYXVsdHMgPSBvdmVycmlkZXNbdHlwZV0gfHwge307XG4gICAgY29uc3QgZGVmYXVsdFNjYWxlT3B0aW9ucyA9IGRhdGFzZXREZWZhdWx0cy5zY2FsZXMgfHwge307XG4gICAgT2JqZWN0LmtleXMoZGVmYXVsdFNjYWxlT3B0aW9ucykuZm9yRWFjaChkZWZhdWx0SUQgPT4ge1xuICAgICAgY29uc3QgYXhpcyA9IGdldEF4aXNGcm9tRGVmYXVsdFNjYWxlSUQoZGVmYXVsdElELCBpbmRleEF4aXMpO1xuICAgICAgY29uc3QgaWQgPSBkYXRhc2V0W2F4aXMgKyAnQXhpc0lEJ10gfHwgYXhpcztcbiAgICAgIHNjYWxlc1tpZF0gPSBzY2FsZXNbaWRdIHx8IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICBtZXJnZUlmKHNjYWxlc1tpZF0sIFt7XG4gICAgICAgIGF4aXNcbiAgICAgIH0sIGNvbmZpZ1NjYWxlc1tpZF0sIGRlZmF1bHRTY2FsZU9wdGlvbnNbZGVmYXVsdElEXV0pO1xuICAgIH0pO1xuICB9KTtcbiAgT2JqZWN0LmtleXMoc2NhbGVzKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgY29uc3Qgc2NhbGUgPSBzY2FsZXNba2V5XTtcbiAgICBtZXJnZUlmKHNjYWxlLCBbZGVmYXVsdHMuc2NhbGVzW3NjYWxlLnR5cGVdLCBkZWZhdWx0cy5zY2FsZV0pO1xuICB9KTtcbiAgcmV0dXJuIHNjYWxlcztcbn1cbmZ1bmN0aW9uIGluaXRPcHRpb25zKGNvbmZpZykge1xuICBjb25zdCBvcHRpb25zID0gY29uZmlnLm9wdGlvbnMgfHwgKGNvbmZpZy5vcHRpb25zID0ge30pO1xuICBvcHRpb25zLnBsdWdpbnMgPSB2YWx1ZU9yRGVmYXVsdChvcHRpb25zLnBsdWdpbnMsIHt9KTtcbiAgb3B0aW9ucy5zY2FsZXMgPSBtZXJnZVNjYWxlQ29uZmlnKGNvbmZpZywgb3B0aW9ucyk7XG59XG5mdW5jdGlvbiBpbml0RGF0YShkYXRhKSB7XG4gIGRhdGEgPSBkYXRhIHx8IHt9O1xuICBkYXRhLmRhdGFzZXRzID0gZGF0YS5kYXRhc2V0cyB8fCBbXTtcbiAgZGF0YS5sYWJlbHMgPSBkYXRhLmxhYmVscyB8fCBbXTtcbiAgcmV0dXJuIGRhdGE7XG59XG5mdW5jdGlvbiBpbml0Q29uZmlnKGNvbmZpZykge1xuICBjb25maWcgPSBjb25maWcgfHwge307XG4gIGNvbmZpZy5kYXRhID0gaW5pdERhdGEoY29uZmlnLmRhdGEpO1xuICBpbml0T3B0aW9ucyhjb25maWcpO1xuICByZXR1cm4gY29uZmlnO1xufVxuY29uc3Qga2V5Q2FjaGUgPSBuZXcgTWFwKCk7XG5jb25zdCBrZXlzQ2FjaGVkID0gbmV3IFNldCgpO1xuZnVuY3Rpb24gY2FjaGVkS2V5cyhjYWNoZUtleSwgZ2VuZXJhdGUpIHtcbiAgbGV0IGtleXMgPSBrZXlDYWNoZS5nZXQoY2FjaGVLZXkpO1xuICBpZiAoIWtleXMpIHtcbiAgICBrZXlzID0gZ2VuZXJhdGUoKTtcbiAgICBrZXlDYWNoZS5zZXQoY2FjaGVLZXksIGtleXMpO1xuICAgIGtleXNDYWNoZWQuYWRkKGtleXMpO1xuICB9XG4gIHJldHVybiBrZXlzO1xufVxuY29uc3QgYWRkSWZGb3VuZCA9IChzZXQsIG9iaiwga2V5KSA9PiB7XG4gIGNvbnN0IG9wdHMgPSByZXNvbHZlT2JqZWN0S2V5KG9iaiwga2V5KTtcbiAgaWYgKG9wdHMgIT09IHVuZGVmaW5lZCkge1xuICAgIHNldC5hZGQob3B0cyk7XG4gIH1cbn07XG5jbGFzcyBDb25maWcge1xuICBjb25zdHJ1Y3Rvcihjb25maWcpIHtcbiAgICB0aGlzLl9jb25maWcgPSBpbml0Q29uZmlnKGNvbmZpZyk7XG4gICAgdGhpcy5fc2NvcGVDYWNoZSA9IG5ldyBNYXAoKTtcbiAgICB0aGlzLl9yZXNvbHZlckNhY2hlID0gbmV3IE1hcCgpO1xuICB9XG4gIGdldCBwbGF0Zm9ybSgpIHtcbiAgICByZXR1cm4gdGhpcy5fY29uZmlnLnBsYXRmb3JtO1xuICB9XG4gIGdldCB0eXBlKCkge1xuICAgIHJldHVybiB0aGlzLl9jb25maWcudHlwZTtcbiAgfVxuICBzZXQgdHlwZSh0eXBlKSB7XG4gICAgdGhpcy5fY29uZmlnLnR5cGUgPSB0eXBlO1xuICB9XG4gIGdldCBkYXRhKCkge1xuICAgIHJldHVybiB0aGlzLl9jb25maWcuZGF0YTtcbiAgfVxuICBzZXQgZGF0YShkYXRhKSB7XG4gICAgdGhpcy5fY29uZmlnLmRhdGEgPSBpbml0RGF0YShkYXRhKTtcbiAgfVxuICBnZXQgb3B0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5fY29uZmlnLm9wdGlvbnM7XG4gIH1cbiAgc2V0IG9wdGlvbnMob3B0aW9ucykge1xuICAgIHRoaXMuX2NvbmZpZy5vcHRpb25zID0gb3B0aW9ucztcbiAgfVxuICBnZXQgcGx1Z2lucygpIHtcbiAgICByZXR1cm4gdGhpcy5fY29uZmlnLnBsdWdpbnM7XG4gIH1cbiAgdXBkYXRlKCkge1xuICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuX2NvbmZpZztcbiAgICB0aGlzLmNsZWFyQ2FjaGUoKTtcbiAgICBpbml0T3B0aW9ucyhjb25maWcpO1xuICB9XG4gIGNsZWFyQ2FjaGUoKSB7XG4gICAgdGhpcy5fc2NvcGVDYWNoZS5jbGVhcigpO1xuICAgIHRoaXMuX3Jlc29sdmVyQ2FjaGUuY2xlYXIoKTtcbiAgfVxuICBkYXRhc2V0U2NvcGVLZXlzKGRhdGFzZXRUeXBlKSB7XG4gICAgcmV0dXJuIGNhY2hlZEtleXMoZGF0YXNldFR5cGUsICgpID0+IFtbYGRhdGFzZXRzLiR7ZGF0YXNldFR5cGV9YCwgJyddXSk7XG4gIH1cbiAgZGF0YXNldEFuaW1hdGlvblNjb3BlS2V5cyhkYXRhc2V0VHlwZSwgdHJhbnNpdGlvbikge1xuICAgIHJldHVybiBjYWNoZWRLZXlzKGAke2RhdGFzZXRUeXBlfS50cmFuc2l0aW9uLiR7dHJhbnNpdGlvbn1gLCAoKSA9PiBbW2BkYXRhc2V0cy4ke2RhdGFzZXRUeXBlfS50cmFuc2l0aW9ucy4ke3RyYW5zaXRpb259YCwgYHRyYW5zaXRpb25zLiR7dHJhbnNpdGlvbn1gXSwgW2BkYXRhc2V0cy4ke2RhdGFzZXRUeXBlfWAsICcnXV0pO1xuICB9XG4gIGRhdGFzZXRFbGVtZW50U2NvcGVLZXlzKGRhdGFzZXRUeXBlLCBlbGVtZW50VHlwZSkge1xuICAgIHJldHVybiBjYWNoZWRLZXlzKGAke2RhdGFzZXRUeXBlfS0ke2VsZW1lbnRUeXBlfWAsICgpID0+IFtbYGRhdGFzZXRzLiR7ZGF0YXNldFR5cGV9LmVsZW1lbnRzLiR7ZWxlbWVudFR5cGV9YCwgYGRhdGFzZXRzLiR7ZGF0YXNldFR5cGV9YCwgYGVsZW1lbnRzLiR7ZWxlbWVudFR5cGV9YCwgJyddXSk7XG4gIH1cbiAgcGx1Z2luU2NvcGVLZXlzKHBsdWdpbikge1xuICAgIGNvbnN0IGlkID0gcGx1Z2luLmlkO1xuICAgIGNvbnN0IHR5cGUgPSB0aGlzLnR5cGU7XG4gICAgcmV0dXJuIGNhY2hlZEtleXMoYCR7dHlwZX0tcGx1Z2luLSR7aWR9YCwgKCkgPT4gW1tgcGx1Z2lucy4ke2lkfWAsIC4uLihwbHVnaW4uYWRkaXRpb25hbE9wdGlvblNjb3BlcyB8fCBbXSldXSk7XG4gIH1cbiAgX2NhY2hlZFNjb3BlcyhtYWluU2NvcGUsIHJlc2V0Q2FjaGUpIHtcbiAgICBjb25zdCBfc2NvcGVDYWNoZSA9IHRoaXMuX3Njb3BlQ2FjaGU7XG4gICAgbGV0IGNhY2hlID0gX3Njb3BlQ2FjaGUuZ2V0KG1haW5TY29wZSk7XG4gICAgaWYgKCFjYWNoZSB8fCByZXNldENhY2hlKSB7XG4gICAgICBjYWNoZSA9IG5ldyBNYXAoKTtcbiAgICAgIF9zY29wZUNhY2hlLnNldChtYWluU2NvcGUsIGNhY2hlKTtcbiAgICB9XG4gICAgcmV0dXJuIGNhY2hlO1xuICB9XG4gIGdldE9wdGlvblNjb3BlcyhtYWluU2NvcGUsIGtleUxpc3RzLCByZXNldENhY2hlKSB7XG4gICAgY29uc3Qge1xuICAgICAgb3B0aW9ucyxcbiAgICAgIHR5cGVcbiAgICB9ID0gdGhpcztcbiAgICBjb25zdCBjYWNoZSA9IHRoaXMuX2NhY2hlZFNjb3BlcyhtYWluU2NvcGUsIHJlc2V0Q2FjaGUpO1xuICAgIGNvbnN0IGNhY2hlZCA9IGNhY2hlLmdldChrZXlMaXN0cyk7XG4gICAgaWYgKGNhY2hlZCkge1xuICAgICAgcmV0dXJuIGNhY2hlZDtcbiAgICB9XG4gICAgY29uc3Qgc2NvcGVzID0gbmV3IFNldCgpO1xuICAgIGtleUxpc3RzLmZvckVhY2goa2V5cyA9PiB7XG4gICAgICBpZiAobWFpblNjb3BlKSB7XG4gICAgICAgIHNjb3Blcy5hZGQobWFpblNjb3BlKTtcbiAgICAgICAga2V5cy5mb3JFYWNoKGtleSA9PiBhZGRJZkZvdW5kKHNjb3BlcywgbWFpblNjb3BlLCBrZXkpKTtcbiAgICAgIH1cbiAgICAgIGtleXMuZm9yRWFjaChrZXkgPT4gYWRkSWZGb3VuZChzY29wZXMsIG9wdGlvbnMsIGtleSkpO1xuICAgICAga2V5cy5mb3JFYWNoKGtleSA9PiBhZGRJZkZvdW5kKHNjb3Blcywgb3ZlcnJpZGVzW3R5cGVdIHx8IHt9LCBrZXkpKTtcbiAgICAgIGtleXMuZm9yRWFjaChrZXkgPT4gYWRkSWZGb3VuZChzY29wZXMsIGRlZmF1bHRzLCBrZXkpKTtcbiAgICAgIGtleXMuZm9yRWFjaChrZXkgPT4gYWRkSWZGb3VuZChzY29wZXMsIGRlc2NyaXB0b3JzLCBrZXkpKTtcbiAgICB9KTtcbiAgICBjb25zdCBhcnJheSA9IEFycmF5LmZyb20oc2NvcGVzKTtcbiAgICBpZiAoYXJyYXkubGVuZ3RoID09PSAwKSB7XG4gICAgICBhcnJheS5wdXNoKE9iamVjdC5jcmVhdGUobnVsbCkpO1xuICAgIH1cbiAgICBpZiAoa2V5c0NhY2hlZC5oYXMoa2V5TGlzdHMpKSB7XG4gICAgICBjYWNoZS5zZXQoa2V5TGlzdHMsIGFycmF5KTtcbiAgICB9XG4gICAgcmV0dXJuIGFycmF5O1xuICB9XG4gIGNoYXJ0T3B0aW9uU2NvcGVzKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIG9wdGlvbnMsXG4gICAgICB0eXBlXG4gICAgfSA9IHRoaXM7XG4gICAgcmV0dXJuIFtvcHRpb25zLCBvdmVycmlkZXNbdHlwZV0gfHwge30sIGRlZmF1bHRzLmRhdGFzZXRzW3R5cGVdIHx8IHt9LCB7XG4gICAgICB0eXBlXG4gICAgfSwgZGVmYXVsdHMsIGRlc2NyaXB0b3JzXTtcbiAgfVxuICByZXNvbHZlTmFtZWRPcHRpb25zKHNjb3BlcywgbmFtZXMsIGNvbnRleHQsIHByZWZpeGVzID0gWycnXSkge1xuICAgIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAgICRzaGFyZWQ6IHRydWVcbiAgICB9O1xuICAgIGNvbnN0IHtcbiAgICAgIHJlc29sdmVyLFxuICAgICAgc3ViUHJlZml4ZXNcbiAgICB9ID0gZ2V0UmVzb2x2ZXIodGhpcy5fcmVzb2x2ZXJDYWNoZSwgc2NvcGVzLCBwcmVmaXhlcyk7XG4gICAgbGV0IG9wdGlvbnMgPSByZXNvbHZlcjtcbiAgICBpZiAobmVlZENvbnRleHQocmVzb2x2ZXIsIG5hbWVzKSkge1xuICAgICAgcmVzdWx0LiRzaGFyZWQgPSBmYWxzZTtcbiAgICAgIGNvbnRleHQgPSBpc0Z1bmN0aW9uKGNvbnRleHQpID8gY29udGV4dCgpIDogY29udGV4dDtcbiAgICAgIGNvbnN0IHN1YlJlc29sdmVyID0gdGhpcy5jcmVhdGVSZXNvbHZlcihzY29wZXMsIGNvbnRleHQsIHN1YlByZWZpeGVzKTtcbiAgICAgIG9wdGlvbnMgPSBfYXR0YWNoQ29udGV4dChyZXNvbHZlciwgY29udGV4dCwgc3ViUmVzb2x2ZXIpO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHByb3Agb2YgbmFtZXMpIHtcbiAgICAgIHJlc3VsdFtwcm9wXSA9IG9wdGlvbnNbcHJvcF07XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgY3JlYXRlUmVzb2x2ZXIoc2NvcGVzLCBjb250ZXh0LCBwcmVmaXhlcyA9IFsnJ10sIGRlc2NyaXB0b3JEZWZhdWx0cykge1xuICAgIGNvbnN0IHtcbiAgICAgIHJlc29sdmVyXG4gICAgfSA9IGdldFJlc29sdmVyKHRoaXMuX3Jlc29sdmVyQ2FjaGUsIHNjb3BlcywgcHJlZml4ZXMpO1xuICAgIHJldHVybiBpc09iamVjdChjb250ZXh0KSA/IF9hdHRhY2hDb250ZXh0KHJlc29sdmVyLCBjb250ZXh0LCB1bmRlZmluZWQsIGRlc2NyaXB0b3JEZWZhdWx0cykgOiByZXNvbHZlcjtcbiAgfVxufVxuZnVuY3Rpb24gZ2V0UmVzb2x2ZXIocmVzb2x2ZXJDYWNoZSwgc2NvcGVzLCBwcmVmaXhlcykge1xuICBsZXQgY2FjaGUgPSByZXNvbHZlckNhY2hlLmdldChzY29wZXMpO1xuICBpZiAoIWNhY2hlKSB7XG4gICAgY2FjaGUgPSBuZXcgTWFwKCk7XG4gICAgcmVzb2x2ZXJDYWNoZS5zZXQoc2NvcGVzLCBjYWNoZSk7XG4gIH1cbiAgY29uc3QgY2FjaGVLZXkgPSBwcmVmaXhlcy5qb2luKCk7XG4gIGxldCBjYWNoZWQgPSBjYWNoZS5nZXQoY2FjaGVLZXkpO1xuICBpZiAoIWNhY2hlZCkge1xuICAgIGNvbnN0IHJlc29sdmVyID0gX2NyZWF0ZVJlc29sdmVyKHNjb3BlcywgcHJlZml4ZXMpO1xuICAgIGNhY2hlZCA9IHtcbiAgICAgIHJlc29sdmVyLFxuICAgICAgc3ViUHJlZml4ZXM6IHByZWZpeGVzLmZpbHRlcihwID0+ICFwLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ2hvdmVyJykpXG4gICAgfTtcbiAgICBjYWNoZS5zZXQoY2FjaGVLZXksIGNhY2hlZCk7XG4gIH1cbiAgcmV0dXJuIGNhY2hlZDtcbn1cbmNvbnN0IGhhc0Z1bmN0aW9uID0gdmFsdWUgPT4gaXNPYmplY3QodmFsdWUpICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHZhbHVlKS5zb21lKGtleSA9PiBpc0Z1bmN0aW9uKHZhbHVlW2tleV0pKTtcbmZ1bmN0aW9uIG5lZWRDb250ZXh0KHByb3h5LCBuYW1lcykge1xuICBjb25zdCB7XG4gICAgaXNTY3JpcHRhYmxlLFxuICAgIGlzSW5kZXhhYmxlXG4gIH0gPSBfZGVzY3JpcHRvcnMocHJveHkpO1xuICBmb3IgKGNvbnN0IHByb3Agb2YgbmFtZXMpIHtcbiAgICBjb25zdCBzY3JpcHRhYmxlID0gaXNTY3JpcHRhYmxlKHByb3ApO1xuICAgIGNvbnN0IGluZGV4YWJsZSA9IGlzSW5kZXhhYmxlKHByb3ApO1xuICAgIGNvbnN0IHZhbHVlID0gKGluZGV4YWJsZSB8fCBzY3JpcHRhYmxlKSAmJiBwcm94eVtwcm9wXTtcbiAgICBpZiAoc2NyaXB0YWJsZSAmJiAoaXNGdW5jdGlvbih2YWx1ZSkgfHwgaGFzRnVuY3Rpb24odmFsdWUpKSB8fCBpbmRleGFibGUgJiYgaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG52YXIgdmVyc2lvbiA9IFwiNC41LjFcIjtcbmNvbnN0IEtOT1dOX1BPU0lUSU9OUyA9IFsndG9wJywgJ2JvdHRvbScsICdsZWZ0JywgJ3JpZ2h0JywgJ2NoYXJ0QXJlYSddO1xuZnVuY3Rpb24gcG9zaXRpb25Jc0hvcml6b250YWwocG9zaXRpb24sIGF4aXMpIHtcbiAgcmV0dXJuIHBvc2l0aW9uID09PSAndG9wJyB8fCBwb3NpdGlvbiA9PT0gJ2JvdHRvbScgfHwgS05PV05fUE9TSVRJT05TLmluZGV4T2YocG9zaXRpb24pID09PSAtMSAmJiBheGlzID09PSAneCc7XG59XG5mdW5jdGlvbiBjb21wYXJlMkxldmVsKGwxLCBsMikge1xuICByZXR1cm4gZnVuY3Rpb24gKGEsIGIpIHtcbiAgICByZXR1cm4gYVtsMV0gPT09IGJbbDFdID8gYVtsMl0gLSBiW2wyXSA6IGFbbDFdIC0gYltsMV07XG4gIH07XG59XG5mdW5jdGlvbiBvbkFuaW1hdGlvbnNDb21wbGV0ZShjb250ZXh0KSB7XG4gIGNvbnN0IGNoYXJ0ID0gY29udGV4dC5jaGFydDtcbiAgY29uc3QgYW5pbWF0aW9uT3B0aW9ucyA9IGNoYXJ0Lm9wdGlvbnMuYW5pbWF0aW9uO1xuICBjaGFydC5ub3RpZnlQbHVnaW5zKCdhZnRlclJlbmRlcicpO1xuICBjYWxsYmFjayhhbmltYXRpb25PcHRpb25zICYmIGFuaW1hdGlvbk9wdGlvbnMub25Db21wbGV0ZSwgW2NvbnRleHRdLCBjaGFydCk7XG59XG5mdW5jdGlvbiBvbkFuaW1hdGlvblByb2dyZXNzKGNvbnRleHQpIHtcbiAgY29uc3QgY2hhcnQgPSBjb250ZXh0LmNoYXJ0O1xuICBjb25zdCBhbmltYXRpb25PcHRpb25zID0gY2hhcnQub3B0aW9ucy5hbmltYXRpb247XG4gIGNhbGxiYWNrKGFuaW1hdGlvbk9wdGlvbnMgJiYgYW5pbWF0aW9uT3B0aW9ucy5vblByb2dyZXNzLCBbY29udGV4dF0sIGNoYXJ0KTtcbn1cbmZ1bmN0aW9uIGdldENhbnZhcyhpdGVtKSB7XG4gIGlmIChfaXNEb21TdXBwb3J0ZWQoKSAmJiB0eXBlb2YgaXRlbSA9PT0gJ3N0cmluZycpIHtcbiAgICBpdGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaXRlbSk7XG4gIH0gZWxzZSBpZiAoaXRlbSAmJiBpdGVtLmxlbmd0aCkge1xuICAgIGl0ZW0gPSBpdGVtWzBdO1xuICB9XG4gIGlmIChpdGVtICYmIGl0ZW0uY2FudmFzKSB7XG4gICAgaXRlbSA9IGl0ZW0uY2FudmFzO1xuICB9XG4gIHJldHVybiBpdGVtO1xufVxuY29uc3QgaW5zdGFuY2VzID0ge307XG5jb25zdCBnZXRDaGFydCA9IGtleSA9PiB7XG4gIGNvbnN0IGNhbnZhcyA9IGdldENhbnZhcyhrZXkpO1xuICByZXR1cm4gT2JqZWN0LnZhbHVlcyhpbnN0YW5jZXMpLmZpbHRlcihjID0+IGMuY2FudmFzID09PSBjYW52YXMpLnBvcCgpO1xufTtcbmZ1bmN0aW9uIG1vdmVOdW1lcmljS2V5cyhvYmosIHN0YXJ0LCBtb3ZlKSB7XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvYmopO1xuICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgY29uc3QgaW50S2V5ID0gK2tleTtcbiAgICBpZiAoaW50S2V5ID49IHN0YXJ0KSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IG9ialtrZXldO1xuICAgICAgZGVsZXRlIG9ialtrZXldO1xuICAgICAgaWYgKG1vdmUgPiAwIHx8IGludEtleSA+IHN0YXJ0KSB7XG4gICAgICAgIG9ialtpbnRLZXkgKyBtb3ZlXSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gZGV0ZXJtaW5lTGFzdEV2ZW50KGUsIGxhc3RFdmVudCwgaW5DaGFydEFyZWEsIGlzQ2xpY2spIHtcbiAgaWYgKCFpbkNoYXJ0QXJlYSB8fCBlLnR5cGUgPT09ICdtb3VzZW91dCcpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBpZiAoaXNDbGljaykge1xuICAgIHJldHVybiBsYXN0RXZlbnQ7XG4gIH1cbiAgcmV0dXJuIGU7XG59XG5sZXQgQ2hhcnQgPSAvKiNfX1BVUkVfXyovKCgpID0+IHtcbiAgY2xhc3MgQ2hhcnQge1xuICAgIHN0YXRpYyBkZWZhdWx0cyA9IGRlZmF1bHRzO1xuICAgIHN0YXRpYyBpbnN0YW5jZXMgPSBpbnN0YW5jZXM7XG4gICAgc3RhdGljIG92ZXJyaWRlcyA9IG92ZXJyaWRlcztcbiAgICBzdGF0aWMgcmVnaXN0cnkgPSByZWdpc3RyeTtcbiAgICBzdGF0aWMgdmVyc2lvbiA9IHZlcnNpb247XG4gICAgc3RhdGljIGdldENoYXJ0ID0gZ2V0Q2hhcnQ7XG4gICAgc3RhdGljIHJlZ2lzdGVyKC4uLml0ZW1zKSB7XG4gICAgICByZWdpc3RyeS5hZGQoLi4uaXRlbXMpO1xuICAgICAgaW52YWxpZGF0ZVBsdWdpbnMoKTtcbiAgICB9XG4gICAgc3RhdGljIHVucmVnaXN0ZXIoLi4uaXRlbXMpIHtcbiAgICAgIHJlZ2lzdHJ5LnJlbW92ZSguLi5pdGVtcyk7XG4gICAgICBpbnZhbGlkYXRlUGx1Z2lucygpO1xuICAgIH1cbiAgICBjb25zdHJ1Y3RvcihpdGVtLCB1c2VyQ29uZmlnKSB7XG4gICAgICBjb25zdCBjb25maWcgPSB0aGlzLmNvbmZpZyA9IG5ldyBDb25maWcodXNlckNvbmZpZyk7XG4gICAgICBjb25zdCBpbml0aWFsQ2FudmFzID0gZ2V0Q2FudmFzKGl0ZW0pO1xuICAgICAgY29uc3QgZXhpc3RpbmdDaGFydCA9IGdldENoYXJ0KGluaXRpYWxDYW52YXMpO1xuICAgICAgaWYgKGV4aXN0aW5nQ2hhcnQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW52YXMgaXMgYWxyZWFkeSBpbiB1c2UuIENoYXJ0IHdpdGggSUQgXFwnJyArIGV4aXN0aW5nQ2hhcnQuaWQgKyAnXFwnJyArICcgbXVzdCBiZSBkZXN0cm95ZWQgYmVmb3JlIHRoZSBjYW52YXMgd2l0aCBJRCBcXCcnICsgZXhpc3RpbmdDaGFydC5jYW52YXMuaWQgKyAnXFwnIGNhbiBiZSByZXVzZWQuJyk7XG4gICAgICB9XG4gICAgICBjb25zdCBvcHRpb25zID0gY29uZmlnLmNyZWF0ZVJlc29sdmVyKGNvbmZpZy5jaGFydE9wdGlvblNjb3BlcygpLCB0aGlzLmdldENvbnRleHQoKSk7XG4gICAgICB0aGlzLnBsYXRmb3JtID0gbmV3IChjb25maWcucGxhdGZvcm0gfHwgX2RldGVjdFBsYXRmb3JtKGluaXRpYWxDYW52YXMpKSgpO1xuICAgICAgdGhpcy5wbGF0Zm9ybS51cGRhdGVDb25maWcoY29uZmlnKTtcbiAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLnBsYXRmb3JtLmFjcXVpcmVDb250ZXh0KGluaXRpYWxDYW52YXMsIG9wdGlvbnMuYXNwZWN0UmF0aW8pO1xuICAgICAgY29uc3QgY2FudmFzID0gY29udGV4dCAmJiBjb250ZXh0LmNhbnZhcztcbiAgICAgIGNvbnN0IGhlaWdodCA9IGNhbnZhcyAmJiBjYW52YXMuaGVpZ2h0O1xuICAgICAgY29uc3Qgd2lkdGggPSBjYW52YXMgJiYgY2FudmFzLndpZHRoO1xuICAgICAgdGhpcy5pZCA9IHVpZCgpO1xuICAgICAgdGhpcy5jdHggPSBjb250ZXh0O1xuICAgICAgdGhpcy5jYW52YXMgPSBjYW52YXM7XG4gICAgICB0aGlzLndpZHRoID0gd2lkdGg7XG4gICAgICB0aGlzLmhlaWdodCA9IGhlaWdodDtcbiAgICAgIHRoaXMuX29wdGlvbnMgPSBvcHRpb25zO1xuICAgICAgdGhpcy5fYXNwZWN0UmF0aW8gPSB0aGlzLmFzcGVjdFJhdGlvO1xuICAgICAgdGhpcy5fbGF5ZXJzID0gW107XG4gICAgICB0aGlzLl9tZXRhc2V0cyA9IFtdO1xuICAgICAgdGhpcy5fc3RhY2tzID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5ib3hlcyA9IFtdO1xuICAgICAgdGhpcy5jdXJyZW50RGV2aWNlUGl4ZWxSYXRpbyA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuY2hhcnRBcmVhID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fYWN0aXZlID0gW107XG4gICAgICB0aGlzLl9sYXN0RXZlbnQgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl9saXN0ZW5lcnMgPSB7fTtcbiAgICAgIHRoaXMuX3Jlc3BvbnNpdmVMaXN0ZW5lcnMgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl9zb3J0ZWRNZXRhc2V0cyA9IFtdO1xuICAgICAgdGhpcy5zY2FsZXMgPSB7fTtcbiAgICAgIHRoaXMuX3BsdWdpbnMgPSBuZXcgUGx1Z2luU2VydmljZSgpO1xuICAgICAgdGhpcy4kcHJveGllcyA9IHt9O1xuICAgICAgdGhpcy5faGlkZGVuSW5kaWNlcyA9IHt9O1xuICAgICAgdGhpcy5hdHRhY2hlZCA9IGZhbHNlO1xuICAgICAgdGhpcy5fYW5pbWF0aW9uc0Rpc2FibGVkID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy4kY29udGV4dCA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX2RvUmVzaXplID0gZGVib3VuY2UobW9kZSA9PiB0aGlzLnVwZGF0ZShtb2RlKSwgb3B0aW9ucy5yZXNpemVEZWxheSB8fCAwKTtcbiAgICAgIHRoaXMuX2RhdGFDaGFuZ2VzID0gW107XG4gICAgICBpbnN0YW5jZXNbdGhpcy5pZF0gPSB0aGlzO1xuICAgICAgaWYgKCFjb250ZXh0IHx8ICFjYW52YXMpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihcIkZhaWxlZCB0byBjcmVhdGUgY2hhcnQ6IGNhbid0IGFjcXVpcmUgY29udGV4dCBmcm9tIHRoZSBnaXZlbiBpdGVtXCIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBhbmltYXRvci5saXN0ZW4odGhpcywgJ2NvbXBsZXRlJywgb25BbmltYXRpb25zQ29tcGxldGUpO1xuICAgICAgYW5pbWF0b3IubGlzdGVuKHRoaXMsICdwcm9ncmVzcycsIG9uQW5pbWF0aW9uUHJvZ3Jlc3MpO1xuICAgICAgdGhpcy5faW5pdGlhbGl6ZSgpO1xuICAgICAgaWYgKHRoaXMuYXR0YWNoZWQpIHtcbiAgICAgICAgdGhpcy51cGRhdGUoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZ2V0IGFzcGVjdFJhdGlvKCkge1xuICAgICAgY29uc3Qge1xuICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgYXNwZWN0UmF0aW8sXG4gICAgICAgICAgbWFpbnRhaW5Bc3BlY3RSYXRpb1xuICAgICAgICB9LFxuICAgICAgICB3aWR0aCxcbiAgICAgICAgaGVpZ2h0LFxuICAgICAgICBfYXNwZWN0UmF0aW9cbiAgICAgIH0gPSB0aGlzO1xuICAgICAgaWYgKCFpc051bGxPclVuZGVmKGFzcGVjdFJhdGlvKSkge1xuICAgICAgICByZXR1cm4gYXNwZWN0UmF0aW87XG4gICAgICB9XG4gICAgICBpZiAobWFpbnRhaW5Bc3BlY3RSYXRpbyAmJiBfYXNwZWN0UmF0aW8pIHtcbiAgICAgICAgcmV0dXJuIF9hc3BlY3RSYXRpbztcbiAgICAgIH1cbiAgICAgIHJldHVybiBoZWlnaHQgPyB3aWR0aCAvIGhlaWdodCA6IG51bGw7XG4gICAgfVxuICAgIGdldCBkYXRhKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY29uZmlnLmRhdGE7XG4gICAgfVxuICAgIHNldCBkYXRhKGRhdGEpIHtcbiAgICAgIHRoaXMuY29uZmlnLmRhdGEgPSBkYXRhO1xuICAgIH1cbiAgICBnZXQgb3B0aW9ucygpIHtcbiAgICAgIHJldHVybiB0aGlzLl9vcHRpb25zO1xuICAgIH1cbiAgICBzZXQgb3B0aW9ucyhvcHRpb25zKSB7XG4gICAgICB0aGlzLmNvbmZpZy5vcHRpb25zID0gb3B0aW9ucztcbiAgICB9XG4gICAgZ2V0IHJlZ2lzdHJ5KCkge1xuICAgICAgcmV0dXJuIHJlZ2lzdHJ5O1xuICAgIH1cbiAgICBfaW5pdGlhbGl6ZSgpIHtcbiAgICAgIHRoaXMubm90aWZ5UGx1Z2lucygnYmVmb3JlSW5pdCcpO1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5yZXNwb25zaXZlKSB7XG4gICAgICAgIHRoaXMucmVzaXplKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXRpbmFTY2FsZSh0aGlzLCB0aGlzLm9wdGlvbnMuZGV2aWNlUGl4ZWxSYXRpbyk7XG4gICAgICB9XG4gICAgICB0aGlzLmJpbmRFdmVudHMoKTtcbiAgICAgIHRoaXMubm90aWZ5UGx1Z2lucygnYWZ0ZXJJbml0Jyk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgY2xlYXIoKSB7XG4gICAgICBjbGVhckNhbnZhcyh0aGlzLmNhbnZhcywgdGhpcy5jdHgpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIHN0b3AoKSB7XG4gICAgICBhbmltYXRvci5zdG9wKHRoaXMpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIHJlc2l6ZSh3aWR0aCwgaGVpZ2h0KSB7XG4gICAgICBpZiAoIWFuaW1hdG9yLnJ1bm5pbmcodGhpcykpIHtcbiAgICAgICAgdGhpcy5fcmVzaXplKHdpZHRoLCBoZWlnaHQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fcmVzaXplQmVmb3JlRHJhdyA9IHtcbiAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICBoZWlnaHRcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gICAgX3Jlc2l6ZSh3aWR0aCwgaGVpZ2h0KSB7XG4gICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgICAgY29uc3QgY2FudmFzID0gdGhpcy5jYW52YXM7XG4gICAgICBjb25zdCBhc3BlY3RSYXRpbyA9IG9wdGlvbnMubWFpbnRhaW5Bc3BlY3RSYXRpbyAmJiB0aGlzLmFzcGVjdFJhdGlvO1xuICAgICAgY29uc3QgbmV3U2l6ZSA9IHRoaXMucGxhdGZvcm0uZ2V0TWF4aW11bVNpemUoY2FudmFzLCB3aWR0aCwgaGVpZ2h0LCBhc3BlY3RSYXRpbyk7XG4gICAgICBjb25zdCBuZXdSYXRpbyA9IG9wdGlvbnMuZGV2aWNlUGl4ZWxSYXRpbyB8fCB0aGlzLnBsYXRmb3JtLmdldERldmljZVBpeGVsUmF0aW8oKTtcbiAgICAgIGNvbnN0IG1vZGUgPSB0aGlzLndpZHRoID8gJ3Jlc2l6ZScgOiAnYXR0YWNoJztcbiAgICAgIHRoaXMud2lkdGggPSBuZXdTaXplLndpZHRoO1xuICAgICAgdGhpcy5oZWlnaHQgPSBuZXdTaXplLmhlaWdodDtcbiAgICAgIHRoaXMuX2FzcGVjdFJhdGlvID0gdGhpcy5hc3BlY3RSYXRpbztcbiAgICAgIGlmICghcmV0aW5hU2NhbGUodGhpcywgbmV3UmF0aW8sIHRydWUpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMubm90aWZ5UGx1Z2lucygncmVzaXplJywge1xuICAgICAgICBzaXplOiBuZXdTaXplXG4gICAgICB9KTtcbiAgICAgIGNhbGxiYWNrKG9wdGlvbnMub25SZXNpemUsIFt0aGlzLCBuZXdTaXplXSwgdGhpcyk7XG4gICAgICBpZiAodGhpcy5hdHRhY2hlZCkge1xuICAgICAgICBpZiAodGhpcy5fZG9SZXNpemUobW9kZSkpIHtcbiAgICAgICAgICB0aGlzLnJlbmRlcigpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGVuc3VyZVNjYWxlc0hhdmVJRHMoKSB7XG4gICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgICAgY29uc3Qgc2NhbGVzT3B0aW9ucyA9IG9wdGlvbnMuc2NhbGVzIHx8IHt9O1xuICAgICAgZWFjaChzY2FsZXNPcHRpb25zLCAoYXhpc09wdGlvbnMsIGF4aXNJRCkgPT4ge1xuICAgICAgICBheGlzT3B0aW9ucy5pZCA9IGF4aXNJRDtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBidWlsZE9yVXBkYXRlU2NhbGVzKCkge1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICAgIGNvbnN0IHNjYWxlT3B0cyA9IG9wdGlvbnMuc2NhbGVzO1xuICAgICAgY29uc3Qgc2NhbGVzID0gdGhpcy5zY2FsZXM7XG4gICAgICBjb25zdCB1cGRhdGVkID0gT2JqZWN0LmtleXMoc2NhbGVzKS5yZWR1Y2UoKG9iaiwgaWQpID0+IHtcbiAgICAgICAgb2JqW2lkXSA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gb2JqO1xuICAgICAgfSwge30pO1xuICAgICAgbGV0IGl0ZW1zID0gW107XG4gICAgICBpZiAoc2NhbGVPcHRzKSB7XG4gICAgICAgIGl0ZW1zID0gaXRlbXMuY29uY2F0KE9iamVjdC5rZXlzKHNjYWxlT3B0cykubWFwKGlkID0+IHtcbiAgICAgICAgICBjb25zdCBzY2FsZU9wdGlvbnMgPSBzY2FsZU9wdHNbaWRdO1xuICAgICAgICAgIGNvbnN0IGF4aXMgPSBkZXRlcm1pbmVBeGlzKGlkLCBzY2FsZU9wdGlvbnMpO1xuICAgICAgICAgIGNvbnN0IGlzUmFkaWFsID0gYXhpcyA9PT0gJ3InO1xuICAgICAgICAgIGNvbnN0IGlzSG9yaXpvbnRhbCA9IGF4aXMgPT09ICd4JztcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgb3B0aW9uczogc2NhbGVPcHRpb25zLFxuICAgICAgICAgICAgZHBvc2l0aW9uOiBpc1JhZGlhbCA/ICdjaGFydEFyZWEnIDogaXNIb3Jpem9udGFsID8gJ2JvdHRvbScgOiAnbGVmdCcsXG4gICAgICAgICAgICBkdHlwZTogaXNSYWRpYWwgPyAncmFkaWFsTGluZWFyJyA6IGlzSG9yaXpvbnRhbCA/ICdjYXRlZ29yeScgOiAnbGluZWFyJ1xuICAgICAgICAgIH07XG4gICAgICAgIH0pKTtcbiAgICAgIH1cbiAgICAgIGVhY2goaXRlbXMsIGl0ZW0gPT4ge1xuICAgICAgICBjb25zdCBzY2FsZU9wdGlvbnMgPSBpdGVtLm9wdGlvbnM7XG4gICAgICAgIGNvbnN0IGlkID0gc2NhbGVPcHRpb25zLmlkO1xuICAgICAgICBjb25zdCBheGlzID0gZGV0ZXJtaW5lQXhpcyhpZCwgc2NhbGVPcHRpb25zKTtcbiAgICAgICAgY29uc3Qgc2NhbGVUeXBlID0gdmFsdWVPckRlZmF1bHQoc2NhbGVPcHRpb25zLnR5cGUsIGl0ZW0uZHR5cGUpO1xuICAgICAgICBpZiAoc2NhbGVPcHRpb25zLnBvc2l0aW9uID09PSB1bmRlZmluZWQgfHwgcG9zaXRpb25Jc0hvcml6b250YWwoc2NhbGVPcHRpb25zLnBvc2l0aW9uLCBheGlzKSAhPT0gcG9zaXRpb25Jc0hvcml6b250YWwoaXRlbS5kcG9zaXRpb24pKSB7XG4gICAgICAgICAgc2NhbGVPcHRpb25zLnBvc2l0aW9uID0gaXRlbS5kcG9zaXRpb247XG4gICAgICAgIH1cbiAgICAgICAgdXBkYXRlZFtpZF0gPSB0cnVlO1xuICAgICAgICBsZXQgc2NhbGUgPSBudWxsO1xuICAgICAgICBpZiAoaWQgaW4gc2NhbGVzICYmIHNjYWxlc1tpZF0udHlwZSA9PT0gc2NhbGVUeXBlKSB7XG4gICAgICAgICAgc2NhbGUgPSBzY2FsZXNbaWRdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHNjYWxlQ2xhc3MgPSByZWdpc3RyeS5nZXRTY2FsZShzY2FsZVR5cGUpO1xuICAgICAgICAgIHNjYWxlID0gbmV3IHNjYWxlQ2xhc3Moe1xuICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICB0eXBlOiBzY2FsZVR5cGUsXG4gICAgICAgICAgICBjdHg6IHRoaXMuY3R4LFxuICAgICAgICAgICAgY2hhcnQ6IHRoaXNcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBzY2FsZXNbc2NhbGUuaWRdID0gc2NhbGU7XG4gICAgICAgIH1cbiAgICAgICAgc2NhbGUuaW5pdChzY2FsZU9wdGlvbnMsIG9wdGlvbnMpO1xuICAgICAgfSk7XG4gICAgICBlYWNoKHVwZGF0ZWQsIChoYXNVcGRhdGVkLCBpZCkgPT4ge1xuICAgICAgICBpZiAoIWhhc1VwZGF0ZWQpIHtcbiAgICAgICAgICBkZWxldGUgc2NhbGVzW2lkXTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBlYWNoKHNjYWxlcywgc2NhbGUgPT4ge1xuICAgICAgICBsYXlvdXRzLmNvbmZpZ3VyZSh0aGlzLCBzY2FsZSwgc2NhbGUub3B0aW9ucyk7XG4gICAgICAgIGxheW91dHMuYWRkQm94KHRoaXMsIHNjYWxlKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBfdXBkYXRlTWV0YXNldHMoKSB7XG4gICAgICBjb25zdCBtZXRhc2V0cyA9IHRoaXMuX21ldGFzZXRzO1xuICAgICAgY29uc3QgbnVtRGF0YSA9IHRoaXMuZGF0YS5kYXRhc2V0cy5sZW5ndGg7XG4gICAgICBjb25zdCBudW1NZXRhID0gbWV0YXNldHMubGVuZ3RoO1xuICAgICAgbWV0YXNldHMuc29ydCgoYSwgYikgPT4gYS5pbmRleCAtIGIuaW5kZXgpO1xuICAgICAgaWYgKG51bU1ldGEgPiBudW1EYXRhKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSBudW1EYXRhOyBpIDwgbnVtTWV0YTsgKytpKSB7XG4gICAgICAgICAgdGhpcy5fZGVzdHJveURhdGFzZXRNZXRhKGkpO1xuICAgICAgICB9XG4gICAgICAgIG1ldGFzZXRzLnNwbGljZShudW1EYXRhLCBudW1NZXRhIC0gbnVtRGF0YSk7XG4gICAgICB9XG4gICAgICB0aGlzLl9zb3J0ZWRNZXRhc2V0cyA9IG1ldGFzZXRzLnNsaWNlKDApLnNvcnQoY29tcGFyZTJMZXZlbCgnb3JkZXInLCAnaW5kZXgnKSk7XG4gICAgfVxuICAgIF9yZW1vdmVVbnJlZmVyZW5jZWRNZXRhc2V0cygpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgX21ldGFzZXRzOiBtZXRhc2V0cyxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIGRhdGFzZXRzXG4gICAgICAgIH1cbiAgICAgIH0gPSB0aGlzO1xuICAgICAgaWYgKG1ldGFzZXRzLmxlbmd0aCA+IGRhdGFzZXRzLmxlbmd0aCkge1xuICAgICAgICBkZWxldGUgdGhpcy5fc3RhY2tzO1xuICAgICAgfVxuICAgICAgbWV0YXNldHMuZm9yRWFjaCgobWV0YSwgaW5kZXgpID0+IHtcbiAgICAgICAgaWYgKGRhdGFzZXRzLmZpbHRlcih4ID0+IHggPT09IG1ldGEuX2RhdGFzZXQpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHRoaXMuX2Rlc3Ryb3lEYXRhc2V0TWV0YShpbmRleCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICBidWlsZE9yVXBkYXRlQ29udHJvbGxlcnMoKSB7XG4gICAgICBjb25zdCBuZXdDb250cm9sbGVycyA9IFtdO1xuICAgICAgY29uc3QgZGF0YXNldHMgPSB0aGlzLmRhdGEuZGF0YXNldHM7XG4gICAgICBsZXQgaSwgaWxlbjtcbiAgICAgIHRoaXMuX3JlbW92ZVVucmVmZXJlbmNlZE1ldGFzZXRzKCk7XG4gICAgICBmb3IgKGkgPSAwLCBpbGVuID0gZGF0YXNldHMubGVuZ3RoOyBpIDwgaWxlbjsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGRhdGFzZXQgPSBkYXRhc2V0c1tpXTtcbiAgICAgICAgbGV0IG1ldGEgPSB0aGlzLmdldERhdGFzZXRNZXRhKGkpO1xuICAgICAgICBjb25zdCB0eXBlID0gZGF0YXNldC50eXBlIHx8IHRoaXMuY29uZmlnLnR5cGU7XG4gICAgICAgIGlmIChtZXRhLnR5cGUgJiYgbWV0YS50eXBlICE9PSB0eXBlKSB7XG4gICAgICAgICAgdGhpcy5fZGVzdHJveURhdGFzZXRNZXRhKGkpO1xuICAgICAgICAgIG1ldGEgPSB0aGlzLmdldERhdGFzZXRNZXRhKGkpO1xuICAgICAgICB9XG4gICAgICAgIG1ldGEudHlwZSA9IHR5cGU7XG4gICAgICAgIG1ldGEuaW5kZXhBeGlzID0gZGF0YXNldC5pbmRleEF4aXMgfHwgZ2V0SW5kZXhBeGlzKHR5cGUsIHRoaXMub3B0aW9ucyk7XG4gICAgICAgIG1ldGEub3JkZXIgPSBkYXRhc2V0Lm9yZGVyIHx8IDA7XG4gICAgICAgIG1ldGEuaW5kZXggPSBpO1xuICAgICAgICBtZXRhLmxhYmVsID0gJycgKyBkYXRhc2V0LmxhYmVsO1xuICAgICAgICBtZXRhLnZpc2libGUgPSB0aGlzLmlzRGF0YXNldFZpc2libGUoaSk7XG4gICAgICAgIGlmIChtZXRhLmNvbnRyb2xsZXIpIHtcbiAgICAgICAgICBtZXRhLmNvbnRyb2xsZXIudXBkYXRlSW5kZXgoaSk7XG4gICAgICAgICAgbWV0YS5jb250cm9sbGVyLmxpbmtTY2FsZXMoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBDb250cm9sbGVyQ2xhc3MgPSByZWdpc3RyeS5nZXRDb250cm9sbGVyKHR5cGUpO1xuICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIGRhdGFzZXRFbGVtZW50VHlwZSxcbiAgICAgICAgICAgIGRhdGFFbGVtZW50VHlwZVxuICAgICAgICAgIH0gPSBkZWZhdWx0cy5kYXRhc2V0c1t0eXBlXTtcbiAgICAgICAgICBPYmplY3QuYXNzaWduKENvbnRyb2xsZXJDbGFzcywge1xuICAgICAgICAgICAgZGF0YUVsZW1lbnRUeXBlOiByZWdpc3RyeS5nZXRFbGVtZW50KGRhdGFFbGVtZW50VHlwZSksXG4gICAgICAgICAgICBkYXRhc2V0RWxlbWVudFR5cGU6IGRhdGFzZXRFbGVtZW50VHlwZSAmJiByZWdpc3RyeS5nZXRFbGVtZW50KGRhdGFzZXRFbGVtZW50VHlwZSlcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBtZXRhLmNvbnRyb2xsZXIgPSBuZXcgQ29udHJvbGxlckNsYXNzKHRoaXMsIGkpO1xuICAgICAgICAgIG5ld0NvbnRyb2xsZXJzLnB1c2gobWV0YS5jb250cm9sbGVyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5fdXBkYXRlTWV0YXNldHMoKTtcbiAgICAgIHJldHVybiBuZXdDb250cm9sbGVycztcbiAgICB9XG4gICAgX3Jlc2V0RWxlbWVudHMoKSB7XG4gICAgICBlYWNoKHRoaXMuZGF0YS5kYXRhc2V0cywgKGRhdGFzZXQsIGRhdGFzZXRJbmRleCkgPT4ge1xuICAgICAgICB0aGlzLmdldERhdGFzZXRNZXRhKGRhdGFzZXRJbmRleCkuY29udHJvbGxlci5yZXNldCgpO1xuICAgICAgfSwgdGhpcyk7XG4gICAgfVxuICAgIHJlc2V0KCkge1xuICAgICAgdGhpcy5fcmVzZXRFbGVtZW50cygpO1xuICAgICAgdGhpcy5ub3RpZnlQbHVnaW5zKCdyZXNldCcpO1xuICAgIH1cbiAgICB1cGRhdGUobW9kZSkge1xuICAgICAgY29uc3QgY29uZmlnID0gdGhpcy5jb25maWc7XG4gICAgICBjb25maWcudXBkYXRlKCk7XG4gICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5fb3B0aW9ucyA9IGNvbmZpZy5jcmVhdGVSZXNvbHZlcihjb25maWcuY2hhcnRPcHRpb25TY29wZXMoKSwgdGhpcy5nZXRDb250ZXh0KCkpO1xuICAgICAgY29uc3QgYW5pbXNEaXNhYmxlZCA9IHRoaXMuX2FuaW1hdGlvbnNEaXNhYmxlZCA9ICFvcHRpb25zLmFuaW1hdGlvbjtcbiAgICAgIHRoaXMuX3VwZGF0ZVNjYWxlcygpO1xuICAgICAgdGhpcy5fY2hlY2tFdmVudEJpbmRpbmdzKCk7XG4gICAgICB0aGlzLl91cGRhdGVIaWRkZW5JbmRpY2VzKCk7XG4gICAgICB0aGlzLl9wbHVnaW5zLmludmFsaWRhdGUoKTtcbiAgICAgIGlmICh0aGlzLm5vdGlmeVBsdWdpbnMoJ2JlZm9yZVVwZGF0ZScsIHtcbiAgICAgICAgbW9kZSxcbiAgICAgICAgY2FuY2VsYWJsZTogdHJ1ZVxuICAgICAgfSkgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG5ld0NvbnRyb2xsZXJzID0gdGhpcy5idWlsZE9yVXBkYXRlQ29udHJvbGxlcnMoKTtcbiAgICAgIHRoaXMubm90aWZ5UGx1Z2lucygnYmVmb3JlRWxlbWVudHNVcGRhdGUnKTtcbiAgICAgIGxldCBtaW5QYWRkaW5nID0gMDtcbiAgICAgIGZvciAobGV0IGkgPSAwLCBpbGVuID0gdGhpcy5kYXRhLmRhdGFzZXRzLmxlbmd0aDsgaSA8IGlsZW47IGkrKykge1xuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgY29udHJvbGxlclxuICAgICAgICB9ID0gdGhpcy5nZXREYXRhc2V0TWV0YShpKTtcbiAgICAgICAgY29uc3QgcmVzZXQgPSAhYW5pbXNEaXNhYmxlZCAmJiBuZXdDb250cm9sbGVycy5pbmRleE9mKGNvbnRyb2xsZXIpID09PSAtMTtcbiAgICAgICAgY29udHJvbGxlci5idWlsZE9yVXBkYXRlRWxlbWVudHMocmVzZXQpO1xuICAgICAgICBtaW5QYWRkaW5nID0gTWF0aC5tYXgoK2NvbnRyb2xsZXIuZ2V0TWF4T3ZlcmZsb3coKSwgbWluUGFkZGluZyk7XG4gICAgICB9XG4gICAgICBtaW5QYWRkaW5nID0gdGhpcy5fbWluUGFkZGluZyA9IG9wdGlvbnMubGF5b3V0LmF1dG9QYWRkaW5nID8gbWluUGFkZGluZyA6IDA7XG4gICAgICB0aGlzLl91cGRhdGVMYXlvdXQobWluUGFkZGluZyk7XG4gICAgICBpZiAoIWFuaW1zRGlzYWJsZWQpIHtcbiAgICAgICAgZWFjaChuZXdDb250cm9sbGVycywgY29udHJvbGxlciA9PiB7XG4gICAgICAgICAgY29udHJvbGxlci5yZXNldCgpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX3VwZGF0ZURhdGFzZXRzKG1vZGUpO1xuICAgICAgdGhpcy5ub3RpZnlQbHVnaW5zKCdhZnRlclVwZGF0ZScsIHtcbiAgICAgICAgbW9kZVxuICAgICAgfSk7XG4gICAgICB0aGlzLl9sYXllcnMuc29ydChjb21wYXJlMkxldmVsKCd6JywgJ19pZHgnKSk7XG4gICAgICBjb25zdCB7XG4gICAgICAgIF9hY3RpdmUsXG4gICAgICAgIF9sYXN0RXZlbnRcbiAgICAgIH0gPSB0aGlzO1xuICAgICAgaWYgKF9sYXN0RXZlbnQpIHtcbiAgICAgICAgdGhpcy5fZXZlbnRIYW5kbGVyKF9sYXN0RXZlbnQsIHRydWUpO1xuICAgICAgfSBlbHNlIGlmIChfYWN0aXZlLmxlbmd0aCkge1xuICAgICAgICB0aGlzLl91cGRhdGVIb3ZlclN0eWxlcyhfYWN0aXZlLCBfYWN0aXZlLCB0cnVlKTtcbiAgICAgIH1cbiAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgfVxuICAgIF91cGRhdGVTY2FsZXMoKSB7XG4gICAgICBlYWNoKHRoaXMuc2NhbGVzLCBzY2FsZSA9PiB7XG4gICAgICAgIGxheW91dHMucmVtb3ZlQm94KHRoaXMsIHNjYWxlKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5lbnN1cmVTY2FsZXNIYXZlSURzKCk7XG4gICAgICB0aGlzLmJ1aWxkT3JVcGRhdGVTY2FsZXMoKTtcbiAgICB9XG4gICAgX2NoZWNrRXZlbnRCaW5kaW5ncygpIHtcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgICBjb25zdCBleGlzdGluZ0V2ZW50cyA9IG5ldyBTZXQoT2JqZWN0LmtleXModGhpcy5fbGlzdGVuZXJzKSk7XG4gICAgICBjb25zdCBuZXdFdmVudHMgPSBuZXcgU2V0KG9wdGlvbnMuZXZlbnRzKTtcbiAgICAgIGlmICghc2V0c0VxdWFsKGV4aXN0aW5nRXZlbnRzLCBuZXdFdmVudHMpIHx8ICEhdGhpcy5fcmVzcG9uc2l2ZUxpc3RlbmVycyAhPT0gb3B0aW9ucy5yZXNwb25zaXZlKSB7XG4gICAgICAgIHRoaXMudW5iaW5kRXZlbnRzKCk7XG4gICAgICAgIHRoaXMuYmluZEV2ZW50cygpO1xuICAgICAgfVxuICAgIH1cbiAgICBfdXBkYXRlSGlkZGVuSW5kaWNlcygpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgX2hpZGRlbkluZGljZXNcbiAgICAgIH0gPSB0aGlzO1xuICAgICAgY29uc3QgY2hhbmdlcyA9IHRoaXMuX2dldFVuaWZvcm1EYXRhQ2hhbmdlcygpIHx8IFtdO1xuICAgICAgZm9yIChjb25zdCB7XG4gICAgICAgIG1ldGhvZCxcbiAgICAgICAgc3RhcnQsXG4gICAgICAgIGNvdW50XG4gICAgICB9IG9mIGNoYW5nZXMpIHtcbiAgICAgICAgY29uc3QgbW92ZSA9IG1ldGhvZCA9PT0gJ19yZW1vdmVFbGVtZW50cycgPyAtY291bnQgOiBjb3VudDtcbiAgICAgICAgbW92ZU51bWVyaWNLZXlzKF9oaWRkZW5JbmRpY2VzLCBzdGFydCwgbW92ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIF9nZXRVbmlmb3JtRGF0YUNoYW5nZXMoKSB7XG4gICAgICBjb25zdCBfZGF0YUNoYW5nZXMgPSB0aGlzLl9kYXRhQ2hhbmdlcztcbiAgICAgIGlmICghX2RhdGFDaGFuZ2VzIHx8ICFfZGF0YUNoYW5nZXMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2RhdGFDaGFuZ2VzID0gW107XG4gICAgICBjb25zdCBkYXRhc2V0Q291bnQgPSB0aGlzLmRhdGEuZGF0YXNldHMubGVuZ3RoO1xuICAgICAgY29uc3QgbWFrZVNldCA9IGlkeCA9PiBuZXcgU2V0KF9kYXRhQ2hhbmdlcy5maWx0ZXIoYyA9PiBjWzBdID09PSBpZHgpLm1hcCgoYywgaSkgPT4gaSArICcsJyArIGMuc3BsaWNlKDEpLmpvaW4oJywnKSkpO1xuICAgICAgY29uc3QgY2hhbmdlU2V0ID0gbWFrZVNldCgwKTtcbiAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgZGF0YXNldENvdW50OyBpKyspIHtcbiAgICAgICAgaWYgKCFzZXRzRXF1YWwoY2hhbmdlU2V0LCBtYWtlU2V0KGkpKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIEFycmF5LmZyb20oY2hhbmdlU2V0KS5tYXAoYyA9PiBjLnNwbGl0KCcsJykpLm1hcChhID0+ICh7XG4gICAgICAgIG1ldGhvZDogYVsxXSxcbiAgICAgICAgc3RhcnQ6ICthWzJdLFxuICAgICAgICBjb3VudDogK2FbM11cbiAgICAgIH0pKTtcbiAgICB9XG4gICAgX3VwZGF0ZUxheW91dChtaW5QYWRkaW5nKSB7XG4gICAgICBpZiAodGhpcy5ub3RpZnlQbHVnaW5zKCdiZWZvcmVMYXlvdXQnLCB7XG4gICAgICAgIGNhbmNlbGFibGU6IHRydWVcbiAgICAgIH0pID09PSBmYWxzZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBsYXlvdXRzLnVwZGF0ZSh0aGlzLCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCwgbWluUGFkZGluZyk7XG4gICAgICBjb25zdCBhcmVhID0gdGhpcy5jaGFydEFyZWE7XG4gICAgICBjb25zdCBub0FyZWEgPSBhcmVhLndpZHRoIDw9IDAgfHwgYXJlYS5oZWlnaHQgPD0gMDtcbiAgICAgIHRoaXMuX2xheWVycyA9IFtdO1xuICAgICAgZWFjaCh0aGlzLmJveGVzLCBib3ggPT4ge1xuICAgICAgICBpZiAobm9BcmVhICYmIGJveC5wb3NpdGlvbiA9PT0gJ2NoYXJ0QXJlYScpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGJveC5jb25maWd1cmUpIHtcbiAgICAgICAgICBib3guY29uZmlndXJlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fbGF5ZXJzLnB1c2goLi4uYm94Ll9sYXllcnMoKSk7XG4gICAgICB9LCB0aGlzKTtcbiAgICAgIHRoaXMuX2xheWVycy5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgICBpdGVtLl9pZHggPSBpbmRleDtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5ub3RpZnlQbHVnaW5zKCdhZnRlckxheW91dCcpO1xuICAgIH1cbiAgICBfdXBkYXRlRGF0YXNldHMobW9kZSkge1xuICAgICAgaWYgKHRoaXMubm90aWZ5UGx1Z2lucygnYmVmb3JlRGF0YXNldHNVcGRhdGUnLCB7XG4gICAgICAgIG1vZGUsXG4gICAgICAgIGNhbmNlbGFibGU6IHRydWVcbiAgICAgIH0pID09PSBmYWxzZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gMCwgaWxlbiA9IHRoaXMuZGF0YS5kYXRhc2V0cy5sZW5ndGg7IGkgPCBpbGVuOyArK2kpIHtcbiAgICAgICAgdGhpcy5nZXREYXRhc2V0TWV0YShpKS5jb250cm9sbGVyLmNvbmZpZ3VyZSgpO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDAsIGlsZW4gPSB0aGlzLmRhdGEuZGF0YXNldHMubGVuZ3RoOyBpIDwgaWxlbjsgKytpKSB7XG4gICAgICAgIHRoaXMuX3VwZGF0ZURhdGFzZXQoaSwgaXNGdW5jdGlvbihtb2RlKSA/IG1vZGUoe1xuICAgICAgICAgIGRhdGFzZXRJbmRleDogaVxuICAgICAgICB9KSA6IG1vZGUpO1xuICAgICAgfVxuICAgICAgdGhpcy5ub3RpZnlQbHVnaW5zKCdhZnRlckRhdGFzZXRzVXBkYXRlJywge1xuICAgICAgICBtb2RlXG4gICAgICB9KTtcbiAgICB9XG4gICAgX3VwZGF0ZURhdGFzZXQoaW5kZXgsIG1vZGUpIHtcbiAgICAgIGNvbnN0IG1ldGEgPSB0aGlzLmdldERhdGFzZXRNZXRhKGluZGV4KTtcbiAgICAgIGNvbnN0IGFyZ3MgPSB7XG4gICAgICAgIG1ldGEsXG4gICAgICAgIGluZGV4LFxuICAgICAgICBtb2RlLFxuICAgICAgICBjYW5jZWxhYmxlOiB0cnVlXG4gICAgICB9O1xuICAgICAgaWYgKHRoaXMubm90aWZ5UGx1Z2lucygnYmVmb3JlRGF0YXNldFVwZGF0ZScsIGFyZ3MpID09PSBmYWxzZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBtZXRhLmNvbnRyb2xsZXIuX3VwZGF0ZShtb2RlKTtcbiAgICAgIGFyZ3MuY2FuY2VsYWJsZSA9IGZhbHNlO1xuICAgICAgdGhpcy5ub3RpZnlQbHVnaW5zKCdhZnRlckRhdGFzZXRVcGRhdGUnLCBhcmdzKTtcbiAgICB9XG4gICAgcmVuZGVyKCkge1xuICAgICAgaWYgKHRoaXMubm90aWZ5UGx1Z2lucygnYmVmb3JlUmVuZGVyJywge1xuICAgICAgICBjYW5jZWxhYmxlOiB0cnVlXG4gICAgICB9KSA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGFuaW1hdG9yLmhhcyh0aGlzKSkge1xuICAgICAgICBpZiAodGhpcy5hdHRhY2hlZCAmJiAhYW5pbWF0b3IucnVubmluZyh0aGlzKSkge1xuICAgICAgICAgIGFuaW1hdG9yLnN0YXJ0KHRoaXMpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmRyYXcoKTtcbiAgICAgICAgb25BbmltYXRpb25zQ29tcGxldGUoe1xuICAgICAgICAgIGNoYXJ0OiB0aGlzXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICBkcmF3KCkge1xuICAgICAgbGV0IGk7XG4gICAgICBpZiAodGhpcy5fcmVzaXplQmVmb3JlRHJhdykge1xuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgaGVpZ2h0XG4gICAgICAgIH0gPSB0aGlzLl9yZXNpemVCZWZvcmVEcmF3O1xuICAgICAgICB0aGlzLl9yZXNpemVCZWZvcmVEcmF3ID0gbnVsbDtcbiAgICAgICAgdGhpcy5fcmVzaXplKHdpZHRoLCBoZWlnaHQpO1xuICAgICAgfVxuICAgICAgdGhpcy5jbGVhcigpO1xuICAgICAgaWYgKHRoaXMud2lkdGggPD0gMCB8fCB0aGlzLmhlaWdodCA8PSAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLm5vdGlmeVBsdWdpbnMoJ2JlZm9yZURyYXcnLCB7XG4gICAgICAgIGNhbmNlbGFibGU6IHRydWVcbiAgICAgIH0pID09PSBmYWxzZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBsYXllcnMgPSB0aGlzLl9sYXllcnM7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgbGF5ZXJzLmxlbmd0aCAmJiBsYXllcnNbaV0ueiA8PSAwOyArK2kpIHtcbiAgICAgICAgbGF5ZXJzW2ldLmRyYXcodGhpcy5jaGFydEFyZWEpO1xuICAgICAgfVxuICAgICAgdGhpcy5fZHJhd0RhdGFzZXRzKCk7XG4gICAgICBmb3IgKDsgaSA8IGxheWVycy5sZW5ndGg7ICsraSkge1xuICAgICAgICBsYXllcnNbaV0uZHJhdyh0aGlzLmNoYXJ0QXJlYSk7XG4gICAgICB9XG4gICAgICB0aGlzLm5vdGlmeVBsdWdpbnMoJ2FmdGVyRHJhdycpO1xuICAgIH1cbiAgICBfZ2V0U29ydGVkRGF0YXNldE1ldGFzKGZpbHRlclZpc2libGUpIHtcbiAgICAgIGNvbnN0IG1ldGFzZXRzID0gdGhpcy5fc29ydGVkTWV0YXNldHM7XG4gICAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICAgIGxldCBpLCBpbGVuO1xuICAgICAgZm9yIChpID0gMCwgaWxlbiA9IG1ldGFzZXRzLmxlbmd0aDsgaSA8IGlsZW47ICsraSkge1xuICAgICAgICBjb25zdCBtZXRhID0gbWV0YXNldHNbaV07XG4gICAgICAgIGlmICghZmlsdGVyVmlzaWJsZSB8fCBtZXRhLnZpc2libGUpIHtcbiAgICAgICAgICByZXN1bHQucHVzaChtZXRhKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgZ2V0U29ydGVkVmlzaWJsZURhdGFzZXRNZXRhcygpIHtcbiAgICAgIHJldHVybiB0aGlzLl9nZXRTb3J0ZWREYXRhc2V0TWV0YXModHJ1ZSk7XG4gICAgfVxuICAgIF9kcmF3RGF0YXNldHMoKSB7XG4gICAgICBpZiAodGhpcy5ub3RpZnlQbHVnaW5zKCdiZWZvcmVEYXRhc2V0c0RyYXcnLCB7XG4gICAgICAgIGNhbmNlbGFibGU6IHRydWVcbiAgICAgIH0pID09PSBmYWxzZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBtZXRhc2V0cyA9IHRoaXMuZ2V0U29ydGVkVmlzaWJsZURhdGFzZXRNZXRhcygpO1xuICAgICAgZm9yIChsZXQgaSA9IG1ldGFzZXRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHRoaXMuX2RyYXdEYXRhc2V0KG1ldGFzZXRzW2ldKTtcbiAgICAgIH1cbiAgICAgIHRoaXMubm90aWZ5UGx1Z2lucygnYWZ0ZXJEYXRhc2V0c0RyYXcnKTtcbiAgICB9XG4gICAgX2RyYXdEYXRhc2V0KG1ldGEpIHtcbiAgICAgIGNvbnN0IGN0eCA9IHRoaXMuY3R4O1xuICAgICAgY29uc3QgYXJncyA9IHtcbiAgICAgICAgbWV0YSxcbiAgICAgICAgaW5kZXg6IG1ldGEuaW5kZXgsXG4gICAgICAgIGNhbmNlbGFibGU6IHRydWVcbiAgICAgIH07XG4gICAgICBjb25zdCBjbGlwID0gZ2V0RGF0YXNldENsaXBBcmVhKHRoaXMsIG1ldGEpO1xuICAgICAgaWYgKHRoaXMubm90aWZ5UGx1Z2lucygnYmVmb3JlRGF0YXNldERyYXcnLCBhcmdzKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGNsaXApIHtcbiAgICAgICAgY2xpcEFyZWEoY3R4LCBjbGlwKTtcbiAgICAgIH1cbiAgICAgIG1ldGEuY29udHJvbGxlci5kcmF3KCk7XG4gICAgICBpZiAoY2xpcCkge1xuICAgICAgICB1bmNsaXBBcmVhKGN0eCk7XG4gICAgICB9XG4gICAgICBhcmdzLmNhbmNlbGFibGUgPSBmYWxzZTtcbiAgICAgIHRoaXMubm90aWZ5UGx1Z2lucygnYWZ0ZXJEYXRhc2V0RHJhdycsIGFyZ3MpO1xuICAgIH1cbiAgICBpc1BvaW50SW5BcmVhKHBvaW50KSB7XG4gICAgICByZXR1cm4gX2lzUG9pbnRJbkFyZWEocG9pbnQsIHRoaXMuY2hhcnRBcmVhLCB0aGlzLl9taW5QYWRkaW5nKTtcbiAgICB9XG4gICAgZ2V0RWxlbWVudHNBdEV2ZW50Rm9yTW9kZShlLCBtb2RlLCBvcHRpb25zLCB1c2VGaW5hbFBvc2l0aW9uKSB7XG4gICAgICBjb25zdCBtZXRob2QgPSBJbnRlcmFjdGlvbi5tb2Rlc1ttb2RlXTtcbiAgICAgIGlmICh0eXBlb2YgbWV0aG9kID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiBtZXRob2QodGhpcywgZSwgb3B0aW9ucywgdXNlRmluYWxQb3NpdGlvbik7XG4gICAgICB9XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIGdldERhdGFzZXRNZXRhKGRhdGFzZXRJbmRleCkge1xuICAgICAgY29uc3QgZGF0YXNldCA9IHRoaXMuZGF0YS5kYXRhc2V0c1tkYXRhc2V0SW5kZXhdO1xuICAgICAgY29uc3QgbWV0YXNldHMgPSB0aGlzLl9tZXRhc2V0cztcbiAgICAgIGxldCBtZXRhID0gbWV0YXNldHMuZmlsdGVyKHggPT4geCAmJiB4Ll9kYXRhc2V0ID09PSBkYXRhc2V0KS5wb3AoKTtcbiAgICAgIGlmICghbWV0YSkge1xuICAgICAgICBtZXRhID0ge1xuICAgICAgICAgIHR5cGU6IG51bGwsXG4gICAgICAgICAgZGF0YTogW10sXG4gICAgICAgICAgZGF0YXNldDogbnVsbCxcbiAgICAgICAgICBjb250cm9sbGVyOiBudWxsLFxuICAgICAgICAgIGhpZGRlbjogbnVsbCxcbiAgICAgICAgICB4QXhpc0lEOiBudWxsLFxuICAgICAgICAgIHlBeGlzSUQ6IG51bGwsXG4gICAgICAgICAgb3JkZXI6IGRhdGFzZXQgJiYgZGF0YXNldC5vcmRlciB8fCAwLFxuICAgICAgICAgIGluZGV4OiBkYXRhc2V0SW5kZXgsXG4gICAgICAgICAgX2RhdGFzZXQ6IGRhdGFzZXQsXG4gICAgICAgICAgX3BhcnNlZDogW10sXG4gICAgICAgICAgX3NvcnRlZDogZmFsc2VcbiAgICAgICAgfTtcbiAgICAgICAgbWV0YXNldHMucHVzaChtZXRhKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBtZXRhO1xuICAgIH1cbiAgICBnZXRDb250ZXh0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuJGNvbnRleHQgfHwgKHRoaXMuJGNvbnRleHQgPSBjcmVhdGVDb250ZXh0KG51bGwsIHtcbiAgICAgICAgY2hhcnQ6IHRoaXMsXG4gICAgICAgIHR5cGU6ICdjaGFydCdcbiAgICAgIH0pKTtcbiAgICB9XG4gICAgZ2V0VmlzaWJsZURhdGFzZXRDb3VudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFNvcnRlZFZpc2libGVEYXRhc2V0TWV0YXMoKS5sZW5ndGg7XG4gICAgfVxuICAgIGlzRGF0YXNldFZpc2libGUoZGF0YXNldEluZGV4KSB7XG4gICAgICBjb25zdCBkYXRhc2V0ID0gdGhpcy5kYXRhLmRhdGFzZXRzW2RhdGFzZXRJbmRleF07XG4gICAgICBpZiAoIWRhdGFzZXQpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgY29uc3QgbWV0YSA9IHRoaXMuZ2V0RGF0YXNldE1ldGEoZGF0YXNldEluZGV4KTtcbiAgICAgIHJldHVybiB0eXBlb2YgbWV0YS5oaWRkZW4gPT09ICdib29sZWFuJyA/ICFtZXRhLmhpZGRlbiA6ICFkYXRhc2V0LmhpZGRlbjtcbiAgICB9XG4gICAgc2V0RGF0YXNldFZpc2liaWxpdHkoZGF0YXNldEluZGV4LCB2aXNpYmxlKSB7XG4gICAgICBjb25zdCBtZXRhID0gdGhpcy5nZXREYXRhc2V0TWV0YShkYXRhc2V0SW5kZXgpO1xuICAgICAgbWV0YS5oaWRkZW4gPSAhdmlzaWJsZTtcbiAgICB9XG4gICAgdG9nZ2xlRGF0YVZpc2liaWxpdHkoaW5kZXgpIHtcbiAgICAgIHRoaXMuX2hpZGRlbkluZGljZXNbaW5kZXhdID0gIXRoaXMuX2hpZGRlbkluZGljZXNbaW5kZXhdO1xuICAgIH1cbiAgICBnZXREYXRhVmlzaWJpbGl0eShpbmRleCkge1xuICAgICAgcmV0dXJuICF0aGlzLl9oaWRkZW5JbmRpY2VzW2luZGV4XTtcbiAgICB9XG4gICAgX3VwZGF0ZVZpc2liaWxpdHkoZGF0YXNldEluZGV4LCBkYXRhSW5kZXgsIHZpc2libGUpIHtcbiAgICAgIGNvbnN0IG1vZGUgPSB2aXNpYmxlID8gJ3Nob3cnIDogJ2hpZGUnO1xuICAgICAgY29uc3QgbWV0YSA9IHRoaXMuZ2V0RGF0YXNldE1ldGEoZGF0YXNldEluZGV4KTtcbiAgICAgIGNvbnN0IGFuaW1zID0gbWV0YS5jb250cm9sbGVyLl9yZXNvbHZlQW5pbWF0aW9ucyh1bmRlZmluZWQsIG1vZGUpO1xuICAgICAgaWYgKGRlZmluZWQoZGF0YUluZGV4KSkge1xuICAgICAgICBtZXRhLmRhdGFbZGF0YUluZGV4XS5oaWRkZW4gPSAhdmlzaWJsZTtcbiAgICAgICAgdGhpcy51cGRhdGUoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2V0RGF0YXNldFZpc2liaWxpdHkoZGF0YXNldEluZGV4LCB2aXNpYmxlKTtcbiAgICAgICAgYW5pbXMudXBkYXRlKG1ldGEsIHtcbiAgICAgICAgICB2aXNpYmxlXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnVwZGF0ZShjdHggPT4gY3R4LmRhdGFzZXRJbmRleCA9PT0gZGF0YXNldEluZGV4ID8gbW9kZSA6IHVuZGVmaW5lZCk7XG4gICAgICB9XG4gICAgfVxuICAgIGhpZGUoZGF0YXNldEluZGV4LCBkYXRhSW5kZXgpIHtcbiAgICAgIHRoaXMuX3VwZGF0ZVZpc2liaWxpdHkoZGF0YXNldEluZGV4LCBkYXRhSW5kZXgsIGZhbHNlKTtcbiAgICB9XG4gICAgc2hvdyhkYXRhc2V0SW5kZXgsIGRhdGFJbmRleCkge1xuICAgICAgdGhpcy5fdXBkYXRlVmlzaWJpbGl0eShkYXRhc2V0SW5kZXgsIGRhdGFJbmRleCwgdHJ1ZSk7XG4gICAgfVxuICAgIF9kZXN0cm95RGF0YXNldE1ldGEoZGF0YXNldEluZGV4KSB7XG4gICAgICBjb25zdCBtZXRhID0gdGhpcy5fbWV0YXNldHNbZGF0YXNldEluZGV4XTtcbiAgICAgIGlmIChtZXRhICYmIG1ldGEuY29udHJvbGxlcikge1xuICAgICAgICBtZXRhLmNvbnRyb2xsZXIuX2Rlc3Ryb3koKTtcbiAgICAgIH1cbiAgICAgIGRlbGV0ZSB0aGlzLl9tZXRhc2V0c1tkYXRhc2V0SW5kZXhdO1xuICAgIH1cbiAgICBfc3RvcCgpIHtcbiAgICAgIGxldCBpLCBpbGVuO1xuICAgICAgdGhpcy5zdG9wKCk7XG4gICAgICBhbmltYXRvci5yZW1vdmUodGhpcyk7XG4gICAgICBmb3IgKGkgPSAwLCBpbGVuID0gdGhpcy5kYXRhLmRhdGFzZXRzLmxlbmd0aDsgaSA8IGlsZW47ICsraSkge1xuICAgICAgICB0aGlzLl9kZXN0cm95RGF0YXNldE1ldGEoaSk7XG4gICAgICB9XG4gICAgfVxuICAgIGRlc3Ryb3koKSB7XG4gICAgICB0aGlzLm5vdGlmeVBsdWdpbnMoJ2JlZm9yZURlc3Ryb3knKTtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgY2FudmFzLFxuICAgICAgICBjdHhcbiAgICAgIH0gPSB0aGlzO1xuICAgICAgdGhpcy5fc3RvcCgpO1xuICAgICAgdGhpcy5jb25maWcuY2xlYXJDYWNoZSgpO1xuICAgICAgaWYgKGNhbnZhcykge1xuICAgICAgICB0aGlzLnVuYmluZEV2ZW50cygpO1xuICAgICAgICBjbGVhckNhbnZhcyhjYW52YXMsIGN0eCk7XG4gICAgICAgIHRoaXMucGxhdGZvcm0ucmVsZWFzZUNvbnRleHQoY3R4KTtcbiAgICAgICAgdGhpcy5jYW52YXMgPSBudWxsO1xuICAgICAgICB0aGlzLmN0eCA9IG51bGw7XG4gICAgICB9XG4gICAgICBkZWxldGUgaW5zdGFuY2VzW3RoaXMuaWRdO1xuICAgICAgdGhpcy5ub3RpZnlQbHVnaW5zKCdhZnRlckRlc3Ryb3knKTtcbiAgICB9XG4gICAgdG9CYXNlNjRJbWFnZSguLi5hcmdzKSB7XG4gICAgICByZXR1cm4gdGhpcy5jYW52YXMudG9EYXRhVVJMKC4uLmFyZ3MpO1xuICAgIH1cbiAgICBiaW5kRXZlbnRzKCkge1xuICAgICAgdGhpcy5iaW5kVXNlckV2ZW50cygpO1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5yZXNwb25zaXZlKSB7XG4gICAgICAgIHRoaXMuYmluZFJlc3BvbnNpdmVFdmVudHMoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuYXR0YWNoZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBiaW5kVXNlckV2ZW50cygpIHtcbiAgICAgIGNvbnN0IGxpc3RlbmVycyA9IHRoaXMuX2xpc3RlbmVycztcbiAgICAgIGNvbnN0IHBsYXRmb3JtID0gdGhpcy5wbGF0Zm9ybTtcbiAgICAgIGNvbnN0IF9hZGQgPSAodHlwZSwgbGlzdGVuZXIpID0+IHtcbiAgICAgICAgcGxhdGZvcm0uYWRkRXZlbnRMaXN0ZW5lcih0aGlzLCB0eXBlLCBsaXN0ZW5lcik7XG4gICAgICAgIGxpc3RlbmVyc1t0eXBlXSA9IGxpc3RlbmVyO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGxpc3RlbmVyID0gKGUsIHgsIHkpID0+IHtcbiAgICAgICAgZS5vZmZzZXRYID0geDtcbiAgICAgICAgZS5vZmZzZXRZID0geTtcbiAgICAgICAgdGhpcy5fZXZlbnRIYW5kbGVyKGUpO1xuICAgICAgfTtcbiAgICAgIGVhY2godGhpcy5vcHRpb25zLmV2ZW50cywgdHlwZSA9PiBfYWRkKHR5cGUsIGxpc3RlbmVyKSk7XG4gICAgfVxuICAgIGJpbmRSZXNwb25zaXZlRXZlbnRzKCkge1xuICAgICAgaWYgKCF0aGlzLl9yZXNwb25zaXZlTGlzdGVuZXJzKSB7XG4gICAgICAgIHRoaXMuX3Jlc3BvbnNpdmVMaXN0ZW5lcnMgPSB7fTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGxpc3RlbmVycyA9IHRoaXMuX3Jlc3BvbnNpdmVMaXN0ZW5lcnM7XG4gICAgICBjb25zdCBwbGF0Zm9ybSA9IHRoaXMucGxhdGZvcm07XG4gICAgICBjb25zdCBfYWRkID0gKHR5cGUsIGxpc3RlbmVyKSA9PiB7XG4gICAgICAgIHBsYXRmb3JtLmFkZEV2ZW50TGlzdGVuZXIodGhpcywgdHlwZSwgbGlzdGVuZXIpO1xuICAgICAgICBsaXN0ZW5lcnNbdHlwZV0gPSBsaXN0ZW5lcjtcbiAgICAgIH07XG4gICAgICBjb25zdCBfcmVtb3ZlID0gKHR5cGUsIGxpc3RlbmVyKSA9PiB7XG4gICAgICAgIGlmIChsaXN0ZW5lcnNbdHlwZV0pIHtcbiAgICAgICAgICBwbGF0Zm9ybS5yZW1vdmVFdmVudExpc3RlbmVyKHRoaXMsIHR5cGUsIGxpc3RlbmVyKTtcbiAgICAgICAgICBkZWxldGUgbGlzdGVuZXJzW3R5cGVdO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY29uc3QgbGlzdGVuZXIgPSAod2lkdGgsIGhlaWdodCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5jYW52YXMpIHtcbiAgICAgICAgICB0aGlzLnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGxldCBkZXRhY2hlZDtcbiAgICAgIGNvbnN0IGF0dGFjaGVkID0gKCkgPT4ge1xuICAgICAgICBfcmVtb3ZlKCdhdHRhY2gnLCBhdHRhY2hlZCk7XG4gICAgICAgIHRoaXMuYXR0YWNoZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLnJlc2l6ZSgpO1xuICAgICAgICBfYWRkKCdyZXNpemUnLCBsaXN0ZW5lcik7XG4gICAgICAgIF9hZGQoJ2RldGFjaCcsIGRldGFjaGVkKTtcbiAgICAgIH07XG4gICAgICBkZXRhY2hlZCA9ICgpID0+IHtcbiAgICAgICAgdGhpcy5hdHRhY2hlZCA9IGZhbHNlO1xuICAgICAgICBfcmVtb3ZlKCdyZXNpemUnLCBsaXN0ZW5lcik7XG4gICAgICAgIHRoaXMuX3N0b3AoKTtcbiAgICAgICAgdGhpcy5fcmVzaXplKDAsIDApO1xuICAgICAgICBfYWRkKCdhdHRhY2gnLCBhdHRhY2hlZCk7XG4gICAgICB9O1xuICAgICAgaWYgKHBsYXRmb3JtLmlzQXR0YWNoZWQodGhpcy5jYW52YXMpKSB7XG4gICAgICAgIGF0dGFjaGVkKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZXRhY2hlZCgpO1xuICAgICAgfVxuICAgIH1cbiAgICB1bmJpbmRFdmVudHMoKSB7XG4gICAgICBlYWNoKHRoaXMuX2xpc3RlbmVycywgKGxpc3RlbmVyLCB0eXBlKSA9PiB7XG4gICAgICAgIHRoaXMucGxhdGZvcm0ucmVtb3ZlRXZlbnRMaXN0ZW5lcih0aGlzLCB0eXBlLCBsaXN0ZW5lcik7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuX2xpc3RlbmVycyA9IHt9O1xuICAgICAgZWFjaCh0aGlzLl9yZXNwb25zaXZlTGlzdGVuZXJzLCAobGlzdGVuZXIsIHR5cGUpID0+IHtcbiAgICAgICAgdGhpcy5wbGF0Zm9ybS5yZW1vdmVFdmVudExpc3RlbmVyKHRoaXMsIHR5cGUsIGxpc3RlbmVyKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5fcmVzcG9uc2l2ZUxpc3RlbmVycyA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdXBkYXRlSG92ZXJTdHlsZShpdGVtcywgbW9kZSwgZW5hYmxlZCkge1xuICAgICAgY29uc3QgcHJlZml4ID0gZW5hYmxlZCA/ICdzZXQnIDogJ3JlbW92ZSc7XG4gICAgICBsZXQgbWV0YSwgaXRlbSwgaSwgaWxlbjtcbiAgICAgIGlmIChtb2RlID09PSAnZGF0YXNldCcpIHtcbiAgICAgICAgbWV0YSA9IHRoaXMuZ2V0RGF0YXNldE1ldGEoaXRlbXNbMF0uZGF0YXNldEluZGV4KTtcbiAgICAgICAgbWV0YS5jb250cm9sbGVyWydfJyArIHByZWZpeCArICdEYXRhc2V0SG92ZXJTdHlsZSddKCk7XG4gICAgICB9XG4gICAgICBmb3IgKGkgPSAwLCBpbGVuID0gaXRlbXMubGVuZ3RoOyBpIDwgaWxlbjsgKytpKSB7XG4gICAgICAgIGl0ZW0gPSBpdGVtc1tpXTtcbiAgICAgICAgY29uc3QgY29udHJvbGxlciA9IGl0ZW0gJiYgdGhpcy5nZXREYXRhc2V0TWV0YShpdGVtLmRhdGFzZXRJbmRleCkuY29udHJvbGxlcjtcbiAgICAgICAgaWYgKGNvbnRyb2xsZXIpIHtcbiAgICAgICAgICBjb250cm9sbGVyW3ByZWZpeCArICdIb3ZlclN0eWxlJ10oaXRlbS5lbGVtZW50LCBpdGVtLmRhdGFzZXRJbmRleCwgaXRlbS5pbmRleCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgZ2V0QWN0aXZlRWxlbWVudHMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fYWN0aXZlIHx8IFtdO1xuICAgIH1cbiAgICBzZXRBY3RpdmVFbGVtZW50cyhhY3RpdmVFbGVtZW50cykge1xuICAgICAgY29uc3QgbGFzdEFjdGl2ZSA9IHRoaXMuX2FjdGl2ZSB8fCBbXTtcbiAgICAgIGNvbnN0IGFjdGl2ZSA9IGFjdGl2ZUVsZW1lbnRzLm1hcCgoe1xuICAgICAgICBkYXRhc2V0SW5kZXgsXG4gICAgICAgIGluZGV4XG4gICAgICB9KSA9PiB7XG4gICAgICAgIGNvbnN0IG1ldGEgPSB0aGlzLmdldERhdGFzZXRNZXRhKGRhdGFzZXRJbmRleCk7XG4gICAgICAgIGlmICghbWV0YSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gZGF0YXNldCBmb3VuZCBhdCBpbmRleCAnICsgZGF0YXNldEluZGV4KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGRhdGFzZXRJbmRleCxcbiAgICAgICAgICBlbGVtZW50OiBtZXRhLmRhdGFbaW5kZXhdLFxuICAgICAgICAgIGluZGV4XG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGNoYW5nZWQgPSAhX2VsZW1lbnRzRXF1YWwoYWN0aXZlLCBsYXN0QWN0aXZlKTtcbiAgICAgIGlmIChjaGFuZ2VkKSB7XG4gICAgICAgIHRoaXMuX2FjdGl2ZSA9IGFjdGl2ZTtcbiAgICAgICAgdGhpcy5fbGFzdEV2ZW50ID0gbnVsbDtcbiAgICAgICAgdGhpcy5fdXBkYXRlSG92ZXJTdHlsZXMoYWN0aXZlLCBsYXN0QWN0aXZlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgbm90aWZ5UGx1Z2lucyhob29rLCBhcmdzLCBmaWx0ZXIpIHtcbiAgICAgIHJldHVybiB0aGlzLl9wbHVnaW5zLm5vdGlmeSh0aGlzLCBob29rLCBhcmdzLCBmaWx0ZXIpO1xuICAgIH1cbiAgICBpc1BsdWdpbkVuYWJsZWQocGx1Z2luSWQpIHtcbiAgICAgIHJldHVybiB0aGlzLl9wbHVnaW5zLl9jYWNoZS5maWx0ZXIocCA9PiBwLnBsdWdpbi5pZCA9PT0gcGx1Z2luSWQpLmxlbmd0aCA9PT0gMTtcbiAgICB9XG4gICAgX3VwZGF0ZUhvdmVyU3R5bGVzKGFjdGl2ZSwgbGFzdEFjdGl2ZSwgcmVwbGF5KSB7XG4gICAgICBjb25zdCBob3Zlck9wdGlvbnMgPSB0aGlzLm9wdGlvbnMuaG92ZXI7XG4gICAgICBjb25zdCBkaWZmID0gKGEsIGIpID0+IGEuZmlsdGVyKHggPT4gIWIuc29tZSh5ID0+IHguZGF0YXNldEluZGV4ID09PSB5LmRhdGFzZXRJbmRleCAmJiB4LmluZGV4ID09PSB5LmluZGV4KSk7XG4gICAgICBjb25zdCBkZWFjdGl2YXRlZCA9IGRpZmYobGFzdEFjdGl2ZSwgYWN0aXZlKTtcbiAgICAgIGNvbnN0IGFjdGl2YXRlZCA9IHJlcGxheSA/IGFjdGl2ZSA6IGRpZmYoYWN0aXZlLCBsYXN0QWN0aXZlKTtcbiAgICAgIGlmIChkZWFjdGl2YXRlZC5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy51cGRhdGVIb3ZlclN0eWxlKGRlYWN0aXZhdGVkLCBob3Zlck9wdGlvbnMubW9kZSwgZmFsc2UpO1xuICAgICAgfVxuICAgICAgaWYgKGFjdGl2YXRlZC5sZW5ndGggJiYgaG92ZXJPcHRpb25zLm1vZGUpIHtcbiAgICAgICAgdGhpcy51cGRhdGVIb3ZlclN0eWxlKGFjdGl2YXRlZCwgaG92ZXJPcHRpb25zLm1vZGUsIHRydWUpO1xuICAgICAgfVxuICAgIH1cbiAgICBfZXZlbnRIYW5kbGVyKGUsIHJlcGxheSkge1xuICAgICAgY29uc3QgYXJncyA9IHtcbiAgICAgICAgZXZlbnQ6IGUsXG4gICAgICAgIHJlcGxheSxcbiAgICAgICAgY2FuY2VsYWJsZTogdHJ1ZSxcbiAgICAgICAgaW5DaGFydEFyZWE6IHRoaXMuaXNQb2ludEluQXJlYShlKVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGV2ZW50RmlsdGVyID0gcGx1Z2luID0+IChwbHVnaW4ub3B0aW9ucy5ldmVudHMgfHwgdGhpcy5vcHRpb25zLmV2ZW50cykuaW5jbHVkZXMoZS5uYXRpdmUudHlwZSk7XG4gICAgICBpZiAodGhpcy5ub3RpZnlQbHVnaW5zKCdiZWZvcmVFdmVudCcsIGFyZ3MsIGV2ZW50RmlsdGVyKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgY2hhbmdlZCA9IHRoaXMuX2hhbmRsZUV2ZW50KGUsIHJlcGxheSwgYXJncy5pbkNoYXJ0QXJlYSk7XG4gICAgICBhcmdzLmNhbmNlbGFibGUgPSBmYWxzZTtcbiAgICAgIHRoaXMubm90aWZ5UGx1Z2lucygnYWZ0ZXJFdmVudCcsIGFyZ3MsIGV2ZW50RmlsdGVyKTtcbiAgICAgIGlmIChjaGFuZ2VkIHx8IGFyZ3MuY2hhbmdlZCkge1xuICAgICAgICB0aGlzLnJlbmRlcigpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIF9oYW5kbGVFdmVudChlLCByZXBsYXksIGluQ2hhcnRBcmVhKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIF9hY3RpdmU6IGxhc3RBY3RpdmUgPSBbXSxcbiAgICAgICAgb3B0aW9uc1xuICAgICAgfSA9IHRoaXM7XG4gICAgICBjb25zdCB1c2VGaW5hbFBvc2l0aW9uID0gcmVwbGF5O1xuICAgICAgY29uc3QgYWN0aXZlID0gdGhpcy5fZ2V0QWN0aXZlRWxlbWVudHMoZSwgbGFzdEFjdGl2ZSwgaW5DaGFydEFyZWEsIHVzZUZpbmFsUG9zaXRpb24pO1xuICAgICAgY29uc3QgaXNDbGljayA9IF9pc0NsaWNrRXZlbnQoZSk7XG4gICAgICBjb25zdCBsYXN0RXZlbnQgPSBkZXRlcm1pbmVMYXN0RXZlbnQoZSwgdGhpcy5fbGFzdEV2ZW50LCBpbkNoYXJ0QXJlYSwgaXNDbGljayk7XG4gICAgICBpZiAoaW5DaGFydEFyZWEpIHtcbiAgICAgICAgdGhpcy5fbGFzdEV2ZW50ID0gbnVsbDtcbiAgICAgICAgY2FsbGJhY2sob3B0aW9ucy5vbkhvdmVyLCBbZSwgYWN0aXZlLCB0aGlzXSwgdGhpcyk7XG4gICAgICAgIGlmIChpc0NsaWNrKSB7XG4gICAgICAgICAgY2FsbGJhY2sob3B0aW9ucy5vbkNsaWNrLCBbZSwgYWN0aXZlLCB0aGlzXSwgdGhpcyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbnN0IGNoYW5nZWQgPSAhX2VsZW1lbnRzRXF1YWwoYWN0aXZlLCBsYXN0QWN0aXZlKTtcbiAgICAgIGlmIChjaGFuZ2VkIHx8IHJlcGxheSkge1xuICAgICAgICB0aGlzLl9hY3RpdmUgPSBhY3RpdmU7XG4gICAgICAgIHRoaXMuX3VwZGF0ZUhvdmVyU3R5bGVzKGFjdGl2ZSwgbGFzdEFjdGl2ZSwgcmVwbGF5KTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2xhc3RFdmVudCA9IGxhc3RFdmVudDtcbiAgICAgIHJldHVybiBjaGFuZ2VkO1xuICAgIH1cbiAgICBfZ2V0QWN0aXZlRWxlbWVudHMoZSwgbGFzdEFjdGl2ZSwgaW5DaGFydEFyZWEsIHVzZUZpbmFsUG9zaXRpb24pIHtcbiAgICAgIGlmIChlLnR5cGUgPT09ICdtb3VzZW91dCcpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgICAgaWYgKCFpbkNoYXJ0QXJlYSkge1xuICAgICAgICByZXR1cm4gbGFzdEFjdGl2ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGhvdmVyT3B0aW9ucyA9IHRoaXMub3B0aW9ucy5ob3ZlcjtcbiAgICAgIHJldHVybiB0aGlzLmdldEVsZW1lbnRzQXRFdmVudEZvck1vZGUoZSwgaG92ZXJPcHRpb25zLm1vZGUsIGhvdmVyT3B0aW9ucywgdXNlRmluYWxQb3NpdGlvbik7XG4gICAgfVxuICB9XG4gIHJldHVybiBDaGFydDtcbn0pKCk7XG5mdW5jdGlvbiBpbnZhbGlkYXRlUGx1Z2lucygpIHtcbiAgcmV0dXJuIGVhY2goQ2hhcnQuaW5zdGFuY2VzLCBjaGFydCA9PiBjaGFydC5fcGx1Z2lucy5pbnZhbGlkYXRlKCkpO1xufVxuZnVuY3Rpb24gY2xpcFNlbGYoY3R4LCBlbGVtZW50LCBlbmRBbmdsZSkge1xuICBjb25zdCB7XG4gICAgc3RhcnRBbmdsZSxcbiAgICB4LFxuICAgIHksXG4gICAgb3V0ZXJSYWRpdXMsXG4gICAgaW5uZXJSYWRpdXMsXG4gICAgb3B0aW9uc1xuICB9ID0gZWxlbWVudDtcbiAgY29uc3Qge1xuICAgIGJvcmRlcldpZHRoLFxuICAgIGJvcmRlckpvaW5TdHlsZVxuICB9ID0gb3B0aW9ucztcbiAgY29uc3Qgb3V0ZXJBbmdsZUNsaXAgPSBNYXRoLm1pbihib3JkZXJXaWR0aCAvIG91dGVyUmFkaXVzLCBfbm9ybWFsaXplQW5nbGUoc3RhcnRBbmdsZSAtIGVuZEFuZ2xlKSk7XG4gIGN0eC5iZWdpblBhdGgoKTtcbiAgY3R4LmFyYyh4LCB5LCBvdXRlclJhZGl1cyAtIGJvcmRlcldpZHRoIC8gMiwgc3RhcnRBbmdsZSArIG91dGVyQW5nbGVDbGlwIC8gMiwgZW5kQW5nbGUgLSBvdXRlckFuZ2xlQ2xpcCAvIDIpO1xuICBpZiAoaW5uZXJSYWRpdXMgPiAwKSB7XG4gICAgY29uc3QgaW5uZXJBbmdsZUNsaXAgPSBNYXRoLm1pbihib3JkZXJXaWR0aCAvIGlubmVyUmFkaXVzLCBfbm9ybWFsaXplQW5nbGUoc3RhcnRBbmdsZSAtIGVuZEFuZ2xlKSk7XG4gICAgY3R4LmFyYyh4LCB5LCBpbm5lclJhZGl1cyArIGJvcmRlcldpZHRoIC8gMiwgZW5kQW5nbGUgLSBpbm5lckFuZ2xlQ2xpcCAvIDIsIHN0YXJ0QW5nbGUgKyBpbm5lckFuZ2xlQ2xpcCAvIDIsIHRydWUpO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGNsaXBXaWR0aCA9IE1hdGgubWluKGJvcmRlcldpZHRoIC8gMiwgb3V0ZXJSYWRpdXMgKiBfbm9ybWFsaXplQW5nbGUoc3RhcnRBbmdsZSAtIGVuZEFuZ2xlKSk7XG4gICAgaWYgKGJvcmRlckpvaW5TdHlsZSA9PT0gJ3JvdW5kJykge1xuICAgICAgY3R4LmFyYyh4LCB5LCBjbGlwV2lkdGgsIGVuZEFuZ2xlIC0gUEkgLyAyLCBzdGFydEFuZ2xlICsgUEkgLyAyLCB0cnVlKTtcbiAgICB9IGVsc2UgaWYgKGJvcmRlckpvaW5TdHlsZSA9PT0gJ2JldmVsJykge1xuICAgICAgY29uc3QgciA9IDIgKiBjbGlwV2lkdGggKiBjbGlwV2lkdGg7XG4gICAgICBjb25zdCBlbmRYID0gLXIgKiBNYXRoLmNvcyhlbmRBbmdsZSArIFBJIC8gMikgKyB4O1xuICAgICAgY29uc3QgZW5kWSA9IC1yICogTWF0aC5zaW4oZW5kQW5nbGUgKyBQSSAvIDIpICsgeTtcbiAgICAgIGNvbnN0IHN0YXJ0WCA9IHIgKiBNYXRoLmNvcyhzdGFydEFuZ2xlICsgUEkgLyAyKSArIHg7XG4gICAgICBjb25zdCBzdGFydFkgPSByICogTWF0aC5zaW4oc3RhcnRBbmdsZSArIFBJIC8gMikgKyB5O1xuICAgICAgY3R4LmxpbmVUbyhlbmRYLCBlbmRZKTtcbiAgICAgIGN0eC5saW5lVG8oc3RhcnRYLCBzdGFydFkpO1xuICAgIH1cbiAgfVxuICBjdHguY2xvc2VQYXRoKCk7XG4gIGN0eC5tb3ZlVG8oMCwgMCk7XG4gIGN0eC5yZWN0KDAsIDAsIGN0eC5jYW52YXMud2lkdGgsIGN0eC5jYW52YXMuaGVpZ2h0KTtcbiAgY3R4LmNsaXAoJ2V2ZW5vZGQnKTtcbn1cbmZ1bmN0aW9uIGNsaXBBcmMoY3R4LCBlbGVtZW50LCBlbmRBbmdsZSkge1xuICBjb25zdCB7XG4gICAgc3RhcnRBbmdsZSxcbiAgICBwaXhlbE1hcmdpbixcbiAgICB4LFxuICAgIHksXG4gICAgb3V0ZXJSYWRpdXMsXG4gICAgaW5uZXJSYWRpdXNcbiAgfSA9IGVsZW1lbnQ7XG4gIGxldCBhbmdsZU1hcmdpbiA9IHBpeGVsTWFyZ2luIC8gb3V0ZXJSYWRpdXM7XG4gIC8vIERyYXcgYW4gaW5uZXIgYm9yZGVyIGJ5IGNsaXBwaW5nIHRoZSBhcmMgYW5kIGRyYXdpbmcgYSBkb3VibGUtd2lkdGggYm9yZGVyXG4gIC8vIEVubGFyZ2UgdGhlIGNsaXBwaW5nIGFyYyBieSAwLjMzIHBpeGVscyB0byBlbGltaW5hdGUgZ2xpdGNoZXMgYmV0d2VlbiBib3JkZXJzXG4gIGN0eC5iZWdpblBhdGgoKTtcbiAgY3R4LmFyYyh4LCB5LCBvdXRlclJhZGl1cywgc3RhcnRBbmdsZSAtIGFuZ2xlTWFyZ2luLCBlbmRBbmdsZSArIGFuZ2xlTWFyZ2luKTtcbiAgaWYgKGlubmVyUmFkaXVzID4gcGl4ZWxNYXJnaW4pIHtcbiAgICBhbmdsZU1hcmdpbiA9IHBpeGVsTWFyZ2luIC8gaW5uZXJSYWRpdXM7XG4gICAgY3R4LmFyYyh4LCB5LCBpbm5lclJhZGl1cywgZW5kQW5nbGUgKyBhbmdsZU1hcmdpbiwgc3RhcnRBbmdsZSAtIGFuZ2xlTWFyZ2luLCB0cnVlKTtcbiAgfSBlbHNlIHtcbiAgICBjdHguYXJjKHgsIHksIHBpeGVsTWFyZ2luLCBlbmRBbmdsZSArIEhBTEZfUEksIHN0YXJ0QW5nbGUgLSBIQUxGX1BJKTtcbiAgfVxuICBjdHguY2xvc2VQYXRoKCk7XG4gIGN0eC5jbGlwKCk7XG59XG5mdW5jdGlvbiB0b1JhZGl1c0Nvcm5lcnModmFsdWUpIHtcbiAgcmV0dXJuIF9yZWFkVmFsdWVUb1Byb3BzKHZhbHVlLCBbJ291dGVyU3RhcnQnLCAnb3V0ZXJFbmQnLCAnaW5uZXJTdGFydCcsICdpbm5lckVuZCddKTtcbn1cbi8qKlxuICogUGFyc2UgYm9yZGVyIHJhZGl1cyBmcm9tIHRoZSBwcm92aWRlZCBvcHRpb25zXG4gKi9cbmZ1bmN0aW9uIHBhcnNlQm9yZGVyUmFkaXVzJDEoYXJjLCBpbm5lclJhZGl1cywgb3V0ZXJSYWRpdXMsIGFuZ2xlRGVsdGEpIHtcbiAgY29uc3QgbyA9IHRvUmFkaXVzQ29ybmVycyhhcmMub3B0aW9ucy5ib3JkZXJSYWRpdXMpO1xuICBjb25zdCBoYWxmVGhpY2tuZXNzID0gKG91dGVyUmFkaXVzIC0gaW5uZXJSYWRpdXMpIC8gMjtcbiAgY29uc3QgaW5uZXJMaW1pdCA9IE1hdGgubWluKGhhbGZUaGlja25lc3MsIGFuZ2xlRGVsdGEgKiBpbm5lclJhZGl1cyAvIDIpO1xuICAvLyBPdXRlciBsaW1pdHMgYXJlIGNvbXBsaWNhdGVkLiBXZSB3YW50IHRvIGNvbXB1dGUgdGhlIGF2YWlsYWJsZSBhbmd1bGFyIGRpc3RhbmNlIGF0XG4gIC8vIGEgcmFkaXVzIG9mIG91dGVyUmFkaXVzIC0gYm9yZGVyUmFkaXVzIGJlY2F1c2UgZm9yIHNtYWxsIGFuZ3VsYXIgZGlzdGFuY2VzLCB0aGlzIHRlcm0gbGltaXRzLlxuICAvLyBXZSBjb21wdXRlIGF0IHIgPSBvdXRlclJhZGl1cyAtIGJvcmRlclJhZGl1cyBiZWNhdXNlIHRoaXMgY2lyY2xlIGRlZmluZXMgdGhlIGNlbnRlciBvZiB0aGUgYm9yZGVyIGNvcm5lcnMuXG4gIC8vXG4gIC8vIElmIHRoZSBib3JkZXJSYWRpdXMgaXMgbGFyZ2UsIHRoYXQgdmFsdWUgY2FuIGJlY29tZSBuZWdhdGl2ZS5cbiAgLy8gVGhpcyBjYXVzZXMgdGhlIG91dGVyIGJvcmRlcnMgdG8gbG9zZSB0aGVpciByYWRpdXMgZW50aXJlbHksIHdoaWNoIGlzIHJhdGhlciB1bmV4cGVjdGVkLiBUbyBzb2x2ZSB0aGF0LCBpZiBib3JkZXJSYWRpdXMgPiBvdXRlclJhZGl1c1xuICAvLyB3ZSBrbm93IHRoYXQgdGhlIHRoaWNrbmVzcyB0ZXJtIHdpbGwgZG9taW5hdGUgYW5kIGNvbXB1dGUgdGhlIGxpbWl0cyBhdCB0aGF0IHBvaW50XG4gIGNvbnN0IGNvbXB1dGVPdXRlckxpbWl0ID0gdmFsID0+IHtcbiAgICBjb25zdCBvdXRlckFyY0xpbWl0ID0gKG91dGVyUmFkaXVzIC0gTWF0aC5taW4oaGFsZlRoaWNrbmVzcywgdmFsKSkgKiBhbmdsZURlbHRhIC8gMjtcbiAgICByZXR1cm4gX2xpbWl0VmFsdWUodmFsLCAwLCBNYXRoLm1pbihoYWxmVGhpY2tuZXNzLCBvdXRlckFyY0xpbWl0KSk7XG4gIH07XG4gIHJldHVybiB7XG4gICAgb3V0ZXJTdGFydDogY29tcHV0ZU91dGVyTGltaXQoby5vdXRlclN0YXJ0KSxcbiAgICBvdXRlckVuZDogY29tcHV0ZU91dGVyTGltaXQoby5vdXRlckVuZCksXG4gICAgaW5uZXJTdGFydDogX2xpbWl0VmFsdWUoby5pbm5lclN0YXJ0LCAwLCBpbm5lckxpbWl0KSxcbiAgICBpbm5lckVuZDogX2xpbWl0VmFsdWUoby5pbm5lckVuZCwgMCwgaW5uZXJMaW1pdClcbiAgfTtcbn1cbi8qKlxuICogQ29udmVydCAociwg8J2cgykgdG8gKHgsIHkpXG4gKi9cbmZ1bmN0aW9uIHJUaGV0YVRvWFkociwgdGhldGEsIHgsIHkpIHtcbiAgcmV0dXJuIHtcbiAgICB4OiB4ICsgciAqIE1hdGguY29zKHRoZXRhKSxcbiAgICB5OiB5ICsgciAqIE1hdGguc2luKHRoZXRhKVxuICB9O1xufVxuLyoqXG4gKiBQYXRoIHRoZSBhcmMsIHJlc3BlY3RpbmcgYm9yZGVyIHJhZGl1cyBieSBzZXBhcmF0aW5nIGludG8gbGVmdCBhbmQgcmlnaHQgaGFsdmVzLlxuICpcbiAqICAgU3RhcnQgICAgICBFbmRcbiAqXG4gKiAgICAxLS0tPmEtLS0+MiAgICBPdXRlclxuICogICAvICAgICAgICAgICBcXFxuICogICA4ICAgICAgICAgICAzXG4gKiAgIHwgICAgICAgICAgIHxcbiAqICAgfCAgICAgICAgICAgfFxuICogICA3ICAgICAgICAgICA0XG4gKiAgIFxcICAgICAgICAgICAvXG4gKiAgICA2PC0tLWI8LS0tNSAgICBJbm5lclxuICovXG5mdW5jdGlvbiBwYXRoQXJjKGN0eCwgZWxlbWVudCwgb2Zmc2V0LCBzcGFjaW5nLCBlbmQsIGNpcmN1bGFyKSB7XG4gIGNvbnN0IHtcbiAgICB4LFxuICAgIHksXG4gICAgc3RhcnRBbmdsZTogc3RhcnQsXG4gICAgcGl4ZWxNYXJnaW4sXG4gICAgaW5uZXJSYWRpdXM6IGlubmVyUlxuICB9ID0gZWxlbWVudDtcbiAgY29uc3Qgb3V0ZXJSYWRpdXMgPSBNYXRoLm1heChlbGVtZW50Lm91dGVyUmFkaXVzICsgc3BhY2luZyArIG9mZnNldCAtIHBpeGVsTWFyZ2luLCAwKTtcbiAgY29uc3QgaW5uZXJSYWRpdXMgPSBpbm5lclIgPiAwID8gaW5uZXJSICsgc3BhY2luZyArIG9mZnNldCArIHBpeGVsTWFyZ2luIDogMDtcbiAgbGV0IHNwYWNpbmdPZmZzZXQgPSAwO1xuICBjb25zdCBhbHBoYSA9IGVuZCAtIHN0YXJ0O1xuICBpZiAoc3BhY2luZykge1xuICAgIC8vIFdoZW4gc3BhY2luZyBpcyBwcmVzZW50LCBpdCBpcyB0aGUgc2FtZSBmb3IgYWxsIGl0ZW1zXG4gICAgLy8gU28gd2UgYWRqdXN0IHRoZSBzdGFydCBhbmQgZW5kIGFuZ2xlIG9mIHRoZSBhcmMgc3VjaCB0aGF0XG4gICAgLy8gdGhlIGRpc3RhbmNlIGlzIHRoZSBzYW1lIGFzIGl0IHdvdWxkIGJlIHdpdGhvdXQgdGhlIHNwYWNpbmdcbiAgICBjb25zdCBub1NwYWNpbmdJbm5lclJhZGl1cyA9IGlubmVyUiA+IDAgPyBpbm5lclIgLSBzcGFjaW5nIDogMDtcbiAgICBjb25zdCBub1NwYWNpbmdPdXRlclJhZGl1cyA9IG91dGVyUmFkaXVzID4gMCA/IG91dGVyUmFkaXVzIC0gc3BhY2luZyA6IDA7XG4gICAgY29uc3QgYXZOb2dTcGFjaW5nUmFkaXVzID0gKG5vU3BhY2luZ0lubmVyUmFkaXVzICsgbm9TcGFjaW5nT3V0ZXJSYWRpdXMpIC8gMjtcbiAgICBjb25zdCBhZGp1c3RlZEFuZ2xlID0gYXZOb2dTcGFjaW5nUmFkaXVzICE9PSAwID8gYWxwaGEgKiBhdk5vZ1NwYWNpbmdSYWRpdXMgLyAoYXZOb2dTcGFjaW5nUmFkaXVzICsgc3BhY2luZykgOiBhbHBoYTtcbiAgICBzcGFjaW5nT2Zmc2V0ID0gKGFscGhhIC0gYWRqdXN0ZWRBbmdsZSkgLyAyO1xuICB9XG4gIGNvbnN0IGJldGEgPSBNYXRoLm1heCgwLjAwMSwgYWxwaGEgKiBvdXRlclJhZGl1cyAtIG9mZnNldCAvIFBJKSAvIG91dGVyUmFkaXVzO1xuICBjb25zdCBhbmdsZU9mZnNldCA9IChhbHBoYSAtIGJldGEpIC8gMjtcbiAgY29uc3Qgc3RhcnRBbmdsZSA9IHN0YXJ0ICsgYW5nbGVPZmZzZXQgKyBzcGFjaW5nT2Zmc2V0O1xuICBjb25zdCBlbmRBbmdsZSA9IGVuZCAtIGFuZ2xlT2Zmc2V0IC0gc3BhY2luZ09mZnNldDtcbiAgY29uc3Qge1xuICAgIG91dGVyU3RhcnQsXG4gICAgb3V0ZXJFbmQsXG4gICAgaW5uZXJTdGFydCxcbiAgICBpbm5lckVuZFxuICB9ID0gcGFyc2VCb3JkZXJSYWRpdXMkMShlbGVtZW50LCBpbm5lclJhZGl1cywgb3V0ZXJSYWRpdXMsIGVuZEFuZ2xlIC0gc3RhcnRBbmdsZSk7XG4gIGNvbnN0IG91dGVyU3RhcnRBZGp1c3RlZFJhZGl1cyA9IG91dGVyUmFkaXVzIC0gb3V0ZXJTdGFydDtcbiAgY29uc3Qgb3V0ZXJFbmRBZGp1c3RlZFJhZGl1cyA9IG91dGVyUmFkaXVzIC0gb3V0ZXJFbmQ7XG4gIGNvbnN0IG91dGVyU3RhcnRBZGp1c3RlZEFuZ2xlID0gc3RhcnRBbmdsZSArIG91dGVyU3RhcnQgLyBvdXRlclN0YXJ0QWRqdXN0ZWRSYWRpdXM7XG4gIGNvbnN0IG91dGVyRW5kQWRqdXN0ZWRBbmdsZSA9IGVuZEFuZ2xlIC0gb3V0ZXJFbmQgLyBvdXRlckVuZEFkanVzdGVkUmFkaXVzO1xuICBjb25zdCBpbm5lclN0YXJ0QWRqdXN0ZWRSYWRpdXMgPSBpbm5lclJhZGl1cyArIGlubmVyU3RhcnQ7XG4gIGNvbnN0IGlubmVyRW5kQWRqdXN0ZWRSYWRpdXMgPSBpbm5lclJhZGl1cyArIGlubmVyRW5kO1xuICBjb25zdCBpbm5lclN0YXJ0QWRqdXN0ZWRBbmdsZSA9IHN0YXJ0QW5nbGUgKyBpbm5lclN0YXJ0IC8gaW5uZXJTdGFydEFkanVzdGVkUmFkaXVzO1xuICBjb25zdCBpbm5lckVuZEFkanVzdGVkQW5nbGUgPSBlbmRBbmdsZSAtIGlubmVyRW5kIC8gaW5uZXJFbmRBZGp1c3RlZFJhZGl1cztcbiAgY3R4LmJlZ2luUGF0aCgpO1xuICBpZiAoY2lyY3VsYXIpIHtcbiAgICAvLyBUaGUgZmlyc3QgYXJjIHNlZ21lbnRzIGZyb20gcG9pbnQgMSB0byBwb2ludCBhIHRvIHBvaW50IDJcbiAgICBjb25zdCBvdXRlck1pZEFkanVzdGVkQW5nbGUgPSAob3V0ZXJTdGFydEFkanVzdGVkQW5nbGUgKyBvdXRlckVuZEFkanVzdGVkQW5nbGUpIC8gMjtcbiAgICBjdHguYXJjKHgsIHksIG91dGVyUmFkaXVzLCBvdXRlclN0YXJ0QWRqdXN0ZWRBbmdsZSwgb3V0ZXJNaWRBZGp1c3RlZEFuZ2xlKTtcbiAgICBjdHguYXJjKHgsIHksIG91dGVyUmFkaXVzLCBvdXRlck1pZEFkanVzdGVkQW5nbGUsIG91dGVyRW5kQWRqdXN0ZWRBbmdsZSk7XG4gICAgLy8gVGhlIGNvcm5lciBzZWdtZW50IGZyb20gcG9pbnQgMiB0byBwb2ludCAzXG4gICAgaWYgKG91dGVyRW5kID4gMCkge1xuICAgICAgY29uc3QgcENlbnRlciA9IHJUaGV0YVRvWFkob3V0ZXJFbmRBZGp1c3RlZFJhZGl1cywgb3V0ZXJFbmRBZGp1c3RlZEFuZ2xlLCB4LCB5KTtcbiAgICAgIGN0eC5hcmMocENlbnRlci54LCBwQ2VudGVyLnksIG91dGVyRW5kLCBvdXRlckVuZEFkanVzdGVkQW5nbGUsIGVuZEFuZ2xlICsgSEFMRl9QSSk7XG4gICAgfVxuICAgIC8vIFRoZSBsaW5lIGZyb20gcG9pbnQgMyB0byBwb2ludCA0XG4gICAgY29uc3QgcDQgPSByVGhldGFUb1hZKGlubmVyRW5kQWRqdXN0ZWRSYWRpdXMsIGVuZEFuZ2xlLCB4LCB5KTtcbiAgICBjdHgubGluZVRvKHA0LngsIHA0LnkpO1xuICAgIC8vIFRoZSBjb3JuZXIgc2VnbWVudCBmcm9tIHBvaW50IDQgdG8gcG9pbnQgNVxuICAgIGlmIChpbm5lckVuZCA+IDApIHtcbiAgICAgIGNvbnN0IHBDZW50ZXIgPSByVGhldGFUb1hZKGlubmVyRW5kQWRqdXN0ZWRSYWRpdXMsIGlubmVyRW5kQWRqdXN0ZWRBbmdsZSwgeCwgeSk7XG4gICAgICBjdHguYXJjKHBDZW50ZXIueCwgcENlbnRlci55LCBpbm5lckVuZCwgZW5kQW5nbGUgKyBIQUxGX1BJLCBpbm5lckVuZEFkanVzdGVkQW5nbGUgKyBNYXRoLlBJKTtcbiAgICB9XG4gICAgLy8gVGhlIGlubmVyIGFyYyBmcm9tIHBvaW50IDUgdG8gcG9pbnQgYiB0byBwb2ludCA2XG4gICAgY29uc3QgaW5uZXJNaWRBZGp1c3RlZEFuZ2xlID0gKGVuZEFuZ2xlIC0gaW5uZXJFbmQgLyBpbm5lclJhZGl1cyArIChzdGFydEFuZ2xlICsgaW5uZXJTdGFydCAvIGlubmVyUmFkaXVzKSkgLyAyO1xuICAgIGN0eC5hcmMoeCwgeSwgaW5uZXJSYWRpdXMsIGVuZEFuZ2xlIC0gaW5uZXJFbmQgLyBpbm5lclJhZGl1cywgaW5uZXJNaWRBZGp1c3RlZEFuZ2xlLCB0cnVlKTtcbiAgICBjdHguYXJjKHgsIHksIGlubmVyUmFkaXVzLCBpbm5lck1pZEFkanVzdGVkQW5nbGUsIHN0YXJ0QW5nbGUgKyBpbm5lclN0YXJ0IC8gaW5uZXJSYWRpdXMsIHRydWUpO1xuICAgIC8vIFRoZSBjb3JuZXIgc2VnbWVudCBmcm9tIHBvaW50IDYgdG8gcG9pbnQgN1xuICAgIGlmIChpbm5lclN0YXJ0ID4gMCkge1xuICAgICAgY29uc3QgcENlbnRlciA9IHJUaGV0YVRvWFkoaW5uZXJTdGFydEFkanVzdGVkUmFkaXVzLCBpbm5lclN0YXJ0QWRqdXN0ZWRBbmdsZSwgeCwgeSk7XG4gICAgICBjdHguYXJjKHBDZW50ZXIueCwgcENlbnRlci55LCBpbm5lclN0YXJ0LCBpbm5lclN0YXJ0QWRqdXN0ZWRBbmdsZSArIE1hdGguUEksIHN0YXJ0QW5nbGUgLSBIQUxGX1BJKTtcbiAgICB9XG4gICAgLy8gVGhlIGxpbmUgZnJvbSBwb2ludCA3IHRvIHBvaW50IDhcbiAgICBjb25zdCBwOCA9IHJUaGV0YVRvWFkob3V0ZXJTdGFydEFkanVzdGVkUmFkaXVzLCBzdGFydEFuZ2xlLCB4LCB5KTtcbiAgICBjdHgubGluZVRvKHA4LngsIHA4LnkpO1xuICAgIC8vIFRoZSBjb3JuZXIgc2VnbWVudCBmcm9tIHBvaW50IDggdG8gcG9pbnQgMVxuICAgIGlmIChvdXRlclN0YXJ0ID4gMCkge1xuICAgICAgY29uc3QgcENlbnRlciA9IHJUaGV0YVRvWFkob3V0ZXJTdGFydEFkanVzdGVkUmFkaXVzLCBvdXRlclN0YXJ0QWRqdXN0ZWRBbmdsZSwgeCwgeSk7XG4gICAgICBjdHguYXJjKHBDZW50ZXIueCwgcENlbnRlci55LCBvdXRlclN0YXJ0LCBzdGFydEFuZ2xlIC0gSEFMRl9QSSwgb3V0ZXJTdGFydEFkanVzdGVkQW5nbGUpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBjdHgubW92ZVRvKHgsIHkpO1xuICAgIGNvbnN0IG91dGVyU3RhcnRYID0gTWF0aC5jb3Mob3V0ZXJTdGFydEFkanVzdGVkQW5nbGUpICogb3V0ZXJSYWRpdXMgKyB4O1xuICAgIGNvbnN0IG91dGVyU3RhcnRZID0gTWF0aC5zaW4ob3V0ZXJTdGFydEFkanVzdGVkQW5nbGUpICogb3V0ZXJSYWRpdXMgKyB5O1xuICAgIGN0eC5saW5lVG8ob3V0ZXJTdGFydFgsIG91dGVyU3RhcnRZKTtcbiAgICBjb25zdCBvdXRlckVuZFggPSBNYXRoLmNvcyhvdXRlckVuZEFkanVzdGVkQW5nbGUpICogb3V0ZXJSYWRpdXMgKyB4O1xuICAgIGNvbnN0IG91dGVyRW5kWSA9IE1hdGguc2luKG91dGVyRW5kQWRqdXN0ZWRBbmdsZSkgKiBvdXRlclJhZGl1cyArIHk7XG4gICAgY3R4LmxpbmVUbyhvdXRlckVuZFgsIG91dGVyRW5kWSk7XG4gIH1cbiAgY3R4LmNsb3NlUGF0aCgpO1xufVxuZnVuY3Rpb24gZHJhd0FyYyhjdHgsIGVsZW1lbnQsIG9mZnNldCwgc3BhY2luZywgY2lyY3VsYXIpIHtcbiAgY29uc3Qge1xuICAgIGZ1bGxDaXJjbGVzLFxuICAgIHN0YXJ0QW5nbGUsXG4gICAgY2lyY3VtZmVyZW5jZVxuICB9ID0gZWxlbWVudDtcbiAgbGV0IGVuZEFuZ2xlID0gZWxlbWVudC5lbmRBbmdsZTtcbiAgaWYgKGZ1bGxDaXJjbGVzKSB7XG4gICAgcGF0aEFyYyhjdHgsIGVsZW1lbnQsIG9mZnNldCwgc3BhY2luZywgZW5kQW5nbGUsIGNpcmN1bGFyKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZ1bGxDaXJjbGVzOyArK2kpIHtcbiAgICAgIGN0eC5maWxsKCk7XG4gICAgfVxuICAgIGlmICghaXNOYU4oY2lyY3VtZmVyZW5jZSkpIHtcbiAgICAgIGVuZEFuZ2xlID0gc3RhcnRBbmdsZSArIChjaXJjdW1mZXJlbmNlICUgVEFVIHx8IFRBVSk7XG4gICAgfVxuICB9XG4gIHBhdGhBcmMoY3R4LCBlbGVtZW50LCBvZmZzZXQsIHNwYWNpbmcsIGVuZEFuZ2xlLCBjaXJjdWxhcik7XG4gIGN0eC5maWxsKCk7XG4gIHJldHVybiBlbmRBbmdsZTtcbn1cbmZ1bmN0aW9uIGRyYXdCb3JkZXIoY3R4LCBlbGVtZW50LCBvZmZzZXQsIHNwYWNpbmcsIGNpcmN1bGFyKSB7XG4gIGNvbnN0IHtcbiAgICBmdWxsQ2lyY2xlcyxcbiAgICBzdGFydEFuZ2xlLFxuICAgIGNpcmN1bWZlcmVuY2UsXG4gICAgb3B0aW9uc1xuICB9ID0gZWxlbWVudDtcbiAgY29uc3Qge1xuICAgIGJvcmRlcldpZHRoLFxuICAgIGJvcmRlckpvaW5TdHlsZSxcbiAgICBib3JkZXJEYXNoLFxuICAgIGJvcmRlckRhc2hPZmZzZXQsXG4gICAgYm9yZGVyUmFkaXVzXG4gIH0gPSBvcHRpb25zO1xuICBjb25zdCBpbm5lciA9IG9wdGlvbnMuYm9yZGVyQWxpZ24gPT09ICdpbm5lcic7XG4gIGlmICghYm9yZGVyV2lkdGgpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY3R4LnNldExpbmVEYXNoKGJvcmRlckRhc2ggfHwgW10pO1xuICBjdHgubGluZURhc2hPZmZzZXQgPSBib3JkZXJEYXNoT2Zmc2V0O1xuICBpZiAoaW5uZXIpIHtcbiAgICBjdHgubGluZVdpZHRoID0gYm9yZGVyV2lkdGggKiAyO1xuICAgIGN0eC5saW5lSm9pbiA9IGJvcmRlckpvaW5TdHlsZSB8fCAncm91bmQnO1xuICB9IGVsc2Uge1xuICAgIGN0eC5saW5lV2lkdGggPSBib3JkZXJXaWR0aDtcbiAgICBjdHgubGluZUpvaW4gPSBib3JkZXJKb2luU3R5bGUgfHwgJ2JldmVsJztcbiAgfVxuICBsZXQgZW5kQW5nbGUgPSBlbGVtZW50LmVuZEFuZ2xlO1xuICBpZiAoZnVsbENpcmNsZXMpIHtcbiAgICBwYXRoQXJjKGN0eCwgZWxlbWVudCwgb2Zmc2V0LCBzcGFjaW5nLCBlbmRBbmdsZSwgY2lyY3VsYXIpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZnVsbENpcmNsZXM7ICsraSkge1xuICAgICAgY3R4LnN0cm9rZSgpO1xuICAgIH1cbiAgICBpZiAoIWlzTmFOKGNpcmN1bWZlcmVuY2UpKSB7XG4gICAgICBlbmRBbmdsZSA9IHN0YXJ0QW5nbGUgKyAoY2lyY3VtZmVyZW5jZSAlIFRBVSB8fCBUQVUpO1xuICAgIH1cbiAgfVxuICBpZiAoaW5uZXIpIHtcbiAgICBjbGlwQXJjKGN0eCwgZWxlbWVudCwgZW5kQW5nbGUpO1xuICB9XG4gIGlmIChvcHRpb25zLnNlbGZKb2luICYmIGVuZEFuZ2xlIC0gc3RhcnRBbmdsZSA+PSBQSSAmJiBib3JkZXJSYWRpdXMgPT09IDAgJiYgYm9yZGVySm9pblN0eWxlICE9PSAnbWl0ZXInKSB7XG4gICAgY2xpcFNlbGYoY3R4LCBlbGVtZW50LCBlbmRBbmdsZSk7XG4gIH1cbiAgaWYgKCFmdWxsQ2lyY2xlcykge1xuICAgIHBhdGhBcmMoY3R4LCBlbGVtZW50LCBvZmZzZXQsIHNwYWNpbmcsIGVuZEFuZ2xlLCBjaXJjdWxhcik7XG4gICAgY3R4LnN0cm9rZSgpO1xuICB9XG59XG5jbGFzcyBBcmNFbGVtZW50IGV4dGVuZHMgRWxlbWVudCB7XG4gIHN0YXRpYyBpZCA9ICdhcmMnO1xuICBzdGF0aWMgZGVmYXVsdHMgPSB7XG4gICAgYm9yZGVyQWxpZ246ICdjZW50ZXInLFxuICAgIGJvcmRlckNvbG9yOiAnI2ZmZicsXG4gICAgYm9yZGVyRGFzaDogW10sXG4gICAgYm9yZGVyRGFzaE9mZnNldDogMCxcbiAgICBib3JkZXJKb2luU3R5bGU6IHVuZGVmaW5lZCxcbiAgICBib3JkZXJSYWRpdXM6IDAsXG4gICAgYm9yZGVyV2lkdGg6IDIsXG4gICAgb2Zmc2V0OiAwLFxuICAgIHNwYWNpbmc6IDAsXG4gICAgYW5nbGU6IHVuZGVmaW5lZCxcbiAgICBjaXJjdWxhcjogdHJ1ZSxcbiAgICBzZWxmSm9pbjogZmFsc2VcbiAgfTtcbiAgc3RhdGljIGRlZmF1bHRSb3V0ZXMgPSB7XG4gICAgYmFja2dyb3VuZENvbG9yOiAnYmFja2dyb3VuZENvbG9yJ1xuICB9O1xuICBzdGF0aWMgZGVzY3JpcHRvcnMgPSB7XG4gICAgX3NjcmlwdGFibGU6IHRydWUsXG4gICAgX2luZGV4YWJsZTogbmFtZSA9PiBuYW1lICE9PSAnYm9yZGVyRGFzaCdcbiAgfTtcbiAgY2lyY3VtZmVyZW5jZTtcbiAgZW5kQW5nbGU7XG4gIGZ1bGxDaXJjbGVzO1xuICBpbm5lclJhZGl1cztcbiAgb3V0ZXJSYWRpdXM7XG4gIHBpeGVsTWFyZ2luO1xuICBzdGFydEFuZ2xlO1xuICBjb25zdHJ1Y3RvcihjZmcpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMub3B0aW9ucyA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmNpcmN1bWZlcmVuY2UgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5zdGFydEFuZ2xlID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuZW5kQW5nbGUgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5pbm5lclJhZGl1cyA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLm91dGVyUmFkaXVzID0gdW5kZWZpbmVkO1xuICAgIHRoaXMucGl4ZWxNYXJnaW4gPSAwO1xuICAgIHRoaXMuZnVsbENpcmNsZXMgPSAwO1xuICAgIGlmIChjZmcpIHtcbiAgICAgIE9iamVjdC5hc3NpZ24odGhpcywgY2ZnKTtcbiAgICB9XG4gIH1cbiAgaW5SYW5nZShjaGFydFgsIGNoYXJ0WSwgdXNlRmluYWxQb3NpdGlvbikge1xuICAgIGNvbnN0IHBvaW50ID0gdGhpcy5nZXRQcm9wcyhbJ3gnLCAneSddLCB1c2VGaW5hbFBvc2l0aW9uKTtcbiAgICBjb25zdCB7XG4gICAgICBhbmdsZSxcbiAgICAgIGRpc3RhbmNlXG4gICAgfSA9IGdldEFuZ2xlRnJvbVBvaW50KHBvaW50LCB7XG4gICAgICB4OiBjaGFydFgsXG4gICAgICB5OiBjaGFydFlcbiAgICB9KTtcbiAgICBjb25zdCB7XG4gICAgICBzdGFydEFuZ2xlLFxuICAgICAgZW5kQW5nbGUsXG4gICAgICBpbm5lclJhZGl1cyxcbiAgICAgIG91dGVyUmFkaXVzLFxuICAgICAgY2lyY3VtZmVyZW5jZVxuICAgIH0gPSB0aGlzLmdldFByb3BzKFsnc3RhcnRBbmdsZScsICdlbmRBbmdsZScsICdpbm5lclJhZGl1cycsICdvdXRlclJhZGl1cycsICdjaXJjdW1mZXJlbmNlJ10sIHVzZUZpbmFsUG9zaXRpb24pO1xuICAgIGNvbnN0IHJBZGp1c3QgPSAodGhpcy5vcHRpb25zLnNwYWNpbmcgKyB0aGlzLm9wdGlvbnMuYm9yZGVyV2lkdGgpIC8gMjtcbiAgICBjb25zdCBfY2lyY3VtZmVyZW5jZSA9IHZhbHVlT3JEZWZhdWx0KGNpcmN1bWZlcmVuY2UsIGVuZEFuZ2xlIC0gc3RhcnRBbmdsZSk7XG4gICAgY29uc3Qgbm9uWmVyb0JldHdlZW4gPSBfYW5nbGVCZXR3ZWVuKGFuZ2xlLCBzdGFydEFuZ2xlLCBlbmRBbmdsZSkgJiYgc3RhcnRBbmdsZSAhPT0gZW5kQW5nbGU7XG4gICAgY29uc3QgYmV0d2VlbkFuZ2xlcyA9IF9jaXJjdW1mZXJlbmNlID49IFRBVSB8fCBub25aZXJvQmV0d2VlbjtcbiAgICBjb25zdCB3aXRoaW5SYWRpdXMgPSBfaXNCZXR3ZWVuKGRpc3RhbmNlLCBpbm5lclJhZGl1cyArIHJBZGp1c3QsIG91dGVyUmFkaXVzICsgckFkanVzdCk7XG4gICAgcmV0dXJuIGJldHdlZW5BbmdsZXMgJiYgd2l0aGluUmFkaXVzO1xuICB9XG4gIGdldENlbnRlclBvaW50KHVzZUZpbmFsUG9zaXRpb24pIHtcbiAgICBjb25zdCB7XG4gICAgICB4LFxuICAgICAgeSxcbiAgICAgIHN0YXJ0QW5nbGUsXG4gICAgICBlbmRBbmdsZSxcbiAgICAgIGlubmVyUmFkaXVzLFxuICAgICAgb3V0ZXJSYWRpdXNcbiAgICB9ID0gdGhpcy5nZXRQcm9wcyhbJ3gnLCAneScsICdzdGFydEFuZ2xlJywgJ2VuZEFuZ2xlJywgJ2lubmVyUmFkaXVzJywgJ291dGVyUmFkaXVzJ10sIHVzZUZpbmFsUG9zaXRpb24pO1xuICAgIGNvbnN0IHtcbiAgICAgIG9mZnNldCxcbiAgICAgIHNwYWNpbmdcbiAgICB9ID0gdGhpcy5vcHRpb25zO1xuICAgIGNvbnN0IGhhbGZBbmdsZSA9IChzdGFydEFuZ2xlICsgZW5kQW5nbGUpIC8gMjtcbiAgICBjb25zdCBoYWxmUmFkaXVzID0gKGlubmVyUmFkaXVzICsgb3V0ZXJSYWRpdXMgKyBzcGFjaW5nICsgb2Zmc2V0KSAvIDI7XG4gICAgcmV0dXJuIHtcbiAgICAgIHg6IHggKyBNYXRoLmNvcyhoYWxmQW5nbGUpICogaGFsZlJhZGl1cyxcbiAgICAgIHk6IHkgKyBNYXRoLnNpbihoYWxmQW5nbGUpICogaGFsZlJhZGl1c1xuICAgIH07XG4gIH1cbiAgdG9vbHRpcFBvc2l0aW9uKHVzZUZpbmFsUG9zaXRpb24pIHtcbiAgICByZXR1cm4gdGhpcy5nZXRDZW50ZXJQb2ludCh1c2VGaW5hbFBvc2l0aW9uKTtcbiAgfVxuICBkcmF3KGN0eCkge1xuICAgIGNvbnN0IHtcbiAgICAgIG9wdGlvbnMsXG4gICAgICBjaXJjdW1mZXJlbmNlXG4gICAgfSA9IHRoaXM7XG4gICAgY29uc3Qgb2Zmc2V0ID0gKG9wdGlvbnMub2Zmc2V0IHx8IDApIC8gNDtcbiAgICBjb25zdCBzcGFjaW5nID0gKG9wdGlvbnMuc3BhY2luZyB8fCAwKSAvIDI7XG4gICAgY29uc3QgY2lyY3VsYXIgPSBvcHRpb25zLmNpcmN1bGFyO1xuICAgIHRoaXMucGl4ZWxNYXJnaW4gPSBvcHRpb25zLmJvcmRlckFsaWduID09PSAnaW5uZXInID8gMC4zMyA6IDA7XG4gICAgdGhpcy5mdWxsQ2lyY2xlcyA9IGNpcmN1bWZlcmVuY2UgPiBUQVUgPyBNYXRoLmZsb29yKGNpcmN1bWZlcmVuY2UgLyBUQVUpIDogMDtcbiAgICBpZiAoY2lyY3VtZmVyZW5jZSA9PT0gMCB8fCB0aGlzLmlubmVyUmFkaXVzIDwgMCB8fCB0aGlzLm91dGVyUmFkaXVzIDwgMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjdHguc2F2ZSgpO1xuICAgIGNvbnN0IGhhbGZBbmdsZSA9ICh0aGlzLnN0YXJ0QW5nbGUgKyB0aGlzLmVuZEFuZ2xlKSAvIDI7XG4gICAgY3R4LnRyYW5zbGF0ZShNYXRoLmNvcyhoYWxmQW5nbGUpICogb2Zmc2V0LCBNYXRoLnNpbihoYWxmQW5nbGUpICogb2Zmc2V0KTtcbiAgICBjb25zdCBmaXggPSAxIC0gTWF0aC5zaW4oTWF0aC5taW4oUEksIGNpcmN1bWZlcmVuY2UgfHwgMCkpO1xuICAgIGNvbnN0IHJhZGl1c09mZnNldCA9IG9mZnNldCAqIGZpeDtcbiAgICBjdHguZmlsbFN0eWxlID0gb3B0aW9ucy5iYWNrZ3JvdW5kQ29sb3I7XG4gICAgY3R4LnN0cm9rZVN0eWxlID0gb3B0aW9ucy5ib3JkZXJDb2xvcjtcbiAgICBkcmF3QXJjKGN0eCwgdGhpcywgcmFkaXVzT2Zmc2V0LCBzcGFjaW5nLCBjaXJjdWxhcik7XG4gICAgZHJhd0JvcmRlcihjdHgsIHRoaXMsIHJhZGl1c09mZnNldCwgc3BhY2luZywgY2lyY3VsYXIpO1xuICAgIGN0eC5yZXN0b3JlKCk7XG4gIH1cbn1cbmZ1bmN0aW9uIHNldFN0eWxlKGN0eCwgb3B0aW9ucywgc3R5bGUgPSBvcHRpb25zKSB7XG4gIGN0eC5saW5lQ2FwID0gdmFsdWVPckRlZmF1bHQoc3R5bGUuYm9yZGVyQ2FwU3R5bGUsIG9wdGlvbnMuYm9yZGVyQ2FwU3R5bGUpO1xuICBjdHguc2V0TGluZURhc2godmFsdWVPckRlZmF1bHQoc3R5bGUuYm9yZGVyRGFzaCwgb3B0aW9ucy5ib3JkZXJEYXNoKSk7XG4gIGN0eC5saW5lRGFzaE9mZnNldCA9IHZhbHVlT3JEZWZhdWx0KHN0eWxlLmJvcmRlckRhc2hPZmZzZXQsIG9wdGlvbnMuYm9yZGVyRGFzaE9mZnNldCk7XG4gIGN0eC5saW5lSm9pbiA9IHZhbHVlT3JEZWZhdWx0KHN0eWxlLmJvcmRlckpvaW5TdHlsZSwgb3B0aW9ucy5ib3JkZXJKb2luU3R5bGUpO1xuICBjdHgubGluZVdpZHRoID0gdmFsdWVPckRlZmF1bHQoc3R5bGUuYm9yZGVyV2lkdGgsIG9wdGlvbnMuYm9yZGVyV2lkdGgpO1xuICBjdHguc3Ryb2tlU3R5bGUgPSB2YWx1ZU9yRGVmYXVsdChzdHlsZS5ib3JkZXJDb2xvciwgb3B0aW9ucy5ib3JkZXJDb2xvcik7XG59XG5mdW5jdGlvbiBsaW5lVG8oY3R4LCBwcmV2aW91cywgdGFyZ2V0KSB7XG4gIGN0eC5saW5lVG8odGFyZ2V0LngsIHRhcmdldC55KTtcbn1cbmZ1bmN0aW9uIGdldExpbmVNZXRob2Qob3B0aW9ucykge1xuICBpZiAob3B0aW9ucy5zdGVwcGVkKSB7XG4gICAgcmV0dXJuIF9zdGVwcGVkTGluZVRvO1xuICB9XG4gIGlmIChvcHRpb25zLnRlbnNpb24gfHwgb3B0aW9ucy5jdWJpY0ludGVycG9sYXRpb25Nb2RlID09PSAnbW9ub3RvbmUnKSB7XG4gICAgcmV0dXJuIF9iZXppZXJDdXJ2ZVRvO1xuICB9XG4gIHJldHVybiBsaW5lVG87XG59XG5mdW5jdGlvbiBwYXRoVmFycyhwb2ludHMsIHNlZ21lbnQsIHBhcmFtcyA9IHt9KSB7XG4gIGNvbnN0IGNvdW50ID0gcG9pbnRzLmxlbmd0aDtcbiAgY29uc3Qge1xuICAgIHN0YXJ0OiBwYXJhbXNTdGFydCA9IDAsXG4gICAgZW5kOiBwYXJhbXNFbmQgPSBjb3VudCAtIDFcbiAgfSA9IHBhcmFtcztcbiAgY29uc3Qge1xuICAgIHN0YXJ0OiBzZWdtZW50U3RhcnQsXG4gICAgZW5kOiBzZWdtZW50RW5kXG4gIH0gPSBzZWdtZW50O1xuICBjb25zdCBzdGFydCA9IE1hdGgubWF4KHBhcmFtc1N0YXJ0LCBzZWdtZW50U3RhcnQpO1xuICBjb25zdCBlbmQgPSBNYXRoLm1pbihwYXJhbXNFbmQsIHNlZ21lbnRFbmQpO1xuICBjb25zdCBvdXRzaWRlID0gcGFyYW1zU3RhcnQgPCBzZWdtZW50U3RhcnQgJiYgcGFyYW1zRW5kIDwgc2VnbWVudFN0YXJ0IHx8IHBhcmFtc1N0YXJ0ID4gc2VnbWVudEVuZCAmJiBwYXJhbXNFbmQgPiBzZWdtZW50RW5kO1xuICByZXR1cm4ge1xuICAgIGNvdW50LFxuICAgIHN0YXJ0LFxuICAgIGxvb3A6IHNlZ21lbnQubG9vcCxcbiAgICBpbGVuOiBlbmQgPCBzdGFydCAmJiAhb3V0c2lkZSA/IGNvdW50ICsgZW5kIC0gc3RhcnQgOiBlbmQgLSBzdGFydFxuICB9O1xufVxuZnVuY3Rpb24gcGF0aFNlZ21lbnQoY3R4LCBsaW5lLCBzZWdtZW50LCBwYXJhbXMpIHtcbiAgY29uc3Qge1xuICAgIHBvaW50cyxcbiAgICBvcHRpb25zXG4gIH0gPSBsaW5lO1xuICBjb25zdCB7XG4gICAgY291bnQsXG4gICAgc3RhcnQsXG4gICAgbG9vcCxcbiAgICBpbGVuXG4gIH0gPSBwYXRoVmFycyhwb2ludHMsIHNlZ21lbnQsIHBhcmFtcyk7XG4gIGNvbnN0IGxpbmVNZXRob2QgPSBnZXRMaW5lTWV0aG9kKG9wdGlvbnMpO1xuICBsZXQge1xuICAgIG1vdmUgPSB0cnVlLFxuICAgIHJldmVyc2VcbiAgfSA9IHBhcmFtcyB8fCB7fTtcbiAgbGV0IGksIHBvaW50LCBwcmV2O1xuICBmb3IgKGkgPSAwOyBpIDw9IGlsZW47ICsraSkge1xuICAgIHBvaW50ID0gcG9pbnRzWyhzdGFydCArIChyZXZlcnNlID8gaWxlbiAtIGkgOiBpKSkgJSBjb3VudF07XG4gICAgaWYgKHBvaW50LnNraXApIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH0gZWxzZSBpZiAobW92ZSkge1xuICAgICAgY3R4Lm1vdmVUbyhwb2ludC54LCBwb2ludC55KTtcbiAgICAgIG1vdmUgPSBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGluZU1ldGhvZChjdHgsIHByZXYsIHBvaW50LCByZXZlcnNlLCBvcHRpb25zLnN0ZXBwZWQpO1xuICAgIH1cbiAgICBwcmV2ID0gcG9pbnQ7XG4gIH1cbiAgaWYgKGxvb3ApIHtcbiAgICBwb2ludCA9IHBvaW50c1soc3RhcnQgKyAocmV2ZXJzZSA/IGlsZW4gOiAwKSkgJSBjb3VudF07XG4gICAgbGluZU1ldGhvZChjdHgsIHByZXYsIHBvaW50LCByZXZlcnNlLCBvcHRpb25zLnN0ZXBwZWQpO1xuICB9XG4gIHJldHVybiAhIWxvb3A7XG59XG5mdW5jdGlvbiBmYXN0UGF0aFNlZ21lbnQoY3R4LCBsaW5lLCBzZWdtZW50LCBwYXJhbXMpIHtcbiAgY29uc3QgcG9pbnRzID0gbGluZS5wb2ludHM7XG4gIGNvbnN0IHtcbiAgICBjb3VudCxcbiAgICBzdGFydCxcbiAgICBpbGVuXG4gIH0gPSBwYXRoVmFycyhwb2ludHMsIHNlZ21lbnQsIHBhcmFtcyk7XG4gIGNvbnN0IHtcbiAgICBtb3ZlID0gdHJ1ZSxcbiAgICByZXZlcnNlXG4gIH0gPSBwYXJhbXMgfHwge307XG4gIGxldCBhdmdYID0gMDtcbiAgbGV0IGNvdW50WCA9IDA7XG4gIGxldCBpLCBwb2ludCwgcHJldlgsIG1pblksIG1heFksIGxhc3RZO1xuICBjb25zdCBwb2ludEluZGV4ID0gaW5kZXggPT4gKHN0YXJ0ICsgKHJldmVyc2UgPyBpbGVuIC0gaW5kZXggOiBpbmRleCkpICUgY291bnQ7XG4gIGNvbnN0IGRyYXdYID0gKCkgPT4ge1xuICAgIGlmIChtaW5ZICE9PSBtYXhZKSB7XG4gICAgICBjdHgubGluZVRvKGF2Z1gsIG1heFkpO1xuICAgICAgY3R4LmxpbmVUbyhhdmdYLCBtaW5ZKTtcbiAgICAgIGN0eC5saW5lVG8oYXZnWCwgbGFzdFkpO1xuICAgIH1cbiAgfTtcbiAgaWYgKG1vdmUpIHtcbiAgICBwb2ludCA9IHBvaW50c1twb2ludEluZGV4KDApXTtcbiAgICBjdHgubW92ZVRvKHBvaW50LngsIHBvaW50LnkpO1xuICB9XG4gIGZvciAoaSA9IDA7IGkgPD0gaWxlbjsgKytpKSB7XG4gICAgcG9pbnQgPSBwb2ludHNbcG9pbnRJbmRleChpKV07XG4gICAgaWYgKHBvaW50LnNraXApIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCB4ID0gcG9pbnQueDtcbiAgICBjb25zdCB5ID0gcG9pbnQueTtcbiAgICBjb25zdCB0cnVuY1ggPSB4IHwgMDtcbiAgICBpZiAodHJ1bmNYID09PSBwcmV2WCkge1xuICAgICAgaWYgKHkgPCBtaW5ZKSB7XG4gICAgICAgIG1pblkgPSB5O1xuICAgICAgfSBlbHNlIGlmICh5ID4gbWF4WSkge1xuICAgICAgICBtYXhZID0geTtcbiAgICAgIH1cbiAgICAgIGF2Z1ggPSAoY291bnRYICogYXZnWCArIHgpIC8gKytjb3VudFg7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRyYXdYKCk7XG4gICAgICBjdHgubGluZVRvKHgsIHkpO1xuICAgICAgcHJldlggPSB0cnVuY1g7XG4gICAgICBjb3VudFggPSAwO1xuICAgICAgbWluWSA9IG1heFkgPSB5O1xuICAgIH1cbiAgICBsYXN0WSA9IHk7XG4gIH1cbiAgZHJhd1goKTtcbn1cbmZ1bmN0aW9uIF9nZXRTZWdtZW50TWV0aG9kKGxpbmUpIHtcbiAgY29uc3Qgb3B0cyA9IGxpbmUub3B0aW9ucztcbiAgY29uc3QgYm9yZGVyRGFzaCA9IG9wdHMuYm9yZGVyRGFzaCAmJiBvcHRzLmJvcmRlckRhc2gubGVuZ3RoO1xuICBjb25zdCB1c2VGYXN0UGF0aCA9ICFsaW5lLl9kZWNpbWF0ZWQgJiYgIWxpbmUuX2xvb3AgJiYgIW9wdHMudGVuc2lvbiAmJiBvcHRzLmN1YmljSW50ZXJwb2xhdGlvbk1vZGUgIT09ICdtb25vdG9uZScgJiYgIW9wdHMuc3RlcHBlZCAmJiAhYm9yZGVyRGFzaDtcbiAgcmV0dXJuIHVzZUZhc3RQYXRoID8gZmFzdFBhdGhTZWdtZW50IDogcGF0aFNlZ21lbnQ7XG59XG5mdW5jdGlvbiBfZ2V0SW50ZXJwb2xhdGlvbk1ldGhvZChvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zLnN0ZXBwZWQpIHtcbiAgICByZXR1cm4gX3N0ZXBwZWRJbnRlcnBvbGF0aW9uO1xuICB9XG4gIGlmIChvcHRpb25zLnRlbnNpb24gfHwgb3B0aW9ucy5jdWJpY0ludGVycG9sYXRpb25Nb2RlID09PSAnbW9ub3RvbmUnKSB7XG4gICAgcmV0dXJuIF9iZXppZXJJbnRlcnBvbGF0aW9uO1xuICB9XG4gIHJldHVybiBfcG9pbnRJbkxpbmU7XG59XG5mdW5jdGlvbiBzdHJva2VQYXRoV2l0aENhY2hlKGN0eCwgbGluZSwgc3RhcnQsIGNvdW50KSB7XG4gIGxldCBwYXRoID0gbGluZS5fcGF0aDtcbiAgaWYgKCFwYXRoKSB7XG4gICAgcGF0aCA9IGxpbmUuX3BhdGggPSBuZXcgUGF0aDJEKCk7XG4gICAgaWYgKGxpbmUucGF0aChwYXRoLCBzdGFydCwgY291bnQpKSB7XG4gICAgICBwYXRoLmNsb3NlUGF0aCgpO1xuICAgIH1cbiAgfVxuICBzZXRTdHlsZShjdHgsIGxpbmUub3B0aW9ucyk7XG4gIGN0eC5zdHJva2UocGF0aCk7XG59XG5mdW5jdGlvbiBzdHJva2VQYXRoRGlyZWN0KGN0eCwgbGluZSwgc3RhcnQsIGNvdW50KSB7XG4gIGNvbnN0IHtcbiAgICBzZWdtZW50cyxcbiAgICBvcHRpb25zXG4gIH0gPSBsaW5lO1xuICBjb25zdCBzZWdtZW50TWV0aG9kID0gX2dldFNlZ21lbnRNZXRob2QobGluZSk7XG4gIGZvciAoY29uc3Qgc2VnbWVudCBvZiBzZWdtZW50cykge1xuICAgIHNldFN0eWxlKGN0eCwgb3B0aW9ucywgc2VnbWVudC5zdHlsZSk7XG4gICAgY3R4LmJlZ2luUGF0aCgpO1xuICAgIGlmIChzZWdtZW50TWV0aG9kKGN0eCwgbGluZSwgc2VnbWVudCwge1xuICAgICAgc3RhcnQsXG4gICAgICBlbmQ6IHN0YXJ0ICsgY291bnQgLSAxXG4gICAgfSkpIHtcbiAgICAgIGN0eC5jbG9zZVBhdGgoKTtcbiAgICB9XG4gICAgY3R4LnN0cm9rZSgpO1xuICB9XG59XG5jb25zdCB1c2VQYXRoMkQgPSB0eXBlb2YgUGF0aDJEID09PSAnZnVuY3Rpb24nO1xuZnVuY3Rpb24gZHJhdyhjdHgsIGxpbmUsIHN0YXJ0LCBjb3VudCkge1xuICBpZiAodXNlUGF0aDJEICYmICFsaW5lLm9wdGlvbnMuc2VnbWVudCkge1xuICAgIHN0cm9rZVBhdGhXaXRoQ2FjaGUoY3R4LCBsaW5lLCBzdGFydCwgY291bnQpO1xuICB9IGVsc2Uge1xuICAgIHN0cm9rZVBhdGhEaXJlY3QoY3R4LCBsaW5lLCBzdGFydCwgY291bnQpO1xuICB9XG59XG5sZXQgTGluZUVsZW1lbnQgPSAvKiNfX1BVUkVfXyovKCgpID0+IHtcbiAgY2xhc3MgTGluZUVsZW1lbnQgZXh0ZW5kcyBFbGVtZW50IHtcbiAgICBzdGF0aWMgaWQgPSAnbGluZSc7XG4gICAgc3RhdGljIGRlZmF1bHRzID0ge1xuICAgICAgYm9yZGVyQ2FwU3R5bGU6ICdidXR0JyxcbiAgICAgIGJvcmRlckRhc2g6IFtdLFxuICAgICAgYm9yZGVyRGFzaE9mZnNldDogMCxcbiAgICAgIGJvcmRlckpvaW5TdHlsZTogJ21pdGVyJyxcbiAgICAgIGJvcmRlcldpZHRoOiAzLFxuICAgICAgY2FwQmV6aWVyUG9pbnRzOiB0cnVlLFxuICAgICAgY3ViaWNJbnRlcnBvbGF0aW9uTW9kZTogJ2RlZmF1bHQnLFxuICAgICAgZmlsbDogZmFsc2UsXG4gICAgICBzcGFuR2FwczogZmFsc2UsXG4gICAgICBzdGVwcGVkOiBmYWxzZSxcbiAgICAgIHRlbnNpb246IDBcbiAgICB9O1xuICAgIHN0YXRpYyBkZWZhdWx0Um91dGVzID0ge1xuICAgICAgYmFja2dyb3VuZENvbG9yOiAnYmFja2dyb3VuZENvbG9yJyxcbiAgICAgIGJvcmRlckNvbG9yOiAnYm9yZGVyQ29sb3InXG4gICAgfTtcbiAgICBzdGF0aWMgZGVzY3JpcHRvcnMgPSB7XG4gICAgICBfc2NyaXB0YWJsZTogdHJ1ZSxcbiAgICAgIF9pbmRleGFibGU6IG5hbWUgPT4gbmFtZSAhPT0gJ2JvcmRlckRhc2gnICYmIG5hbWUgIT09ICdmaWxsJ1xuICAgIH07XG4gICAgY29uc3RydWN0b3IoY2ZnKSB7XG4gICAgICBzdXBlcigpO1xuICAgICAgdGhpcy5hbmltYXRlZCA9IHRydWU7XG4gICAgICB0aGlzLm9wdGlvbnMgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl9jaGFydCA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX2xvb3AgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl9mdWxsTG9vcCA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX3BhdGggPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl9wb2ludHMgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl9zZWdtZW50cyA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX2RlY2ltYXRlZCA9IGZhbHNlO1xuICAgICAgdGhpcy5fcG9pbnRzVXBkYXRlZCA9IGZhbHNlO1xuICAgICAgdGhpcy5fZGF0YXNldEluZGV4ID0gdW5kZWZpbmVkO1xuICAgICAgaWYgKGNmZykge1xuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGNmZyk7XG4gICAgICB9XG4gICAgfVxuICAgIHVwZGF0ZUNvbnRyb2xQb2ludHMoY2hhcnRBcmVhLCBpbmRleEF4aXMpIHtcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgICBpZiAoKG9wdGlvbnMudGVuc2lvbiB8fCBvcHRpb25zLmN1YmljSW50ZXJwb2xhdGlvbk1vZGUgPT09ICdtb25vdG9uZScpICYmICFvcHRpb25zLnN0ZXBwZWQgJiYgIXRoaXMuX3BvaW50c1VwZGF0ZWQpIHtcbiAgICAgICAgY29uc3QgbG9vcCA9IG9wdGlvbnMuc3BhbkdhcHMgPyB0aGlzLl9sb29wIDogdGhpcy5fZnVsbExvb3A7XG4gICAgICAgIF91cGRhdGVCZXppZXJDb250cm9sUG9pbnRzKHRoaXMuX3BvaW50cywgb3B0aW9ucywgY2hhcnRBcmVhLCBsb29wLCBpbmRleEF4aXMpO1xuICAgICAgICB0aGlzLl9wb2ludHNVcGRhdGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgc2V0IHBvaW50cyhwb2ludHMpIHtcbiAgICAgIHRoaXMuX3BvaW50cyA9IHBvaW50cztcbiAgICAgIGRlbGV0ZSB0aGlzLl9zZWdtZW50cztcbiAgICAgIGRlbGV0ZSB0aGlzLl9wYXRoO1xuICAgICAgdGhpcy5fcG9pbnRzVXBkYXRlZCA9IGZhbHNlO1xuICAgIH1cbiAgICBnZXQgcG9pbnRzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3BvaW50cztcbiAgICB9XG4gICAgZ2V0IHNlZ21lbnRzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3NlZ21lbnRzIHx8ICh0aGlzLl9zZWdtZW50cyA9IF9jb21wdXRlU2VnbWVudHModGhpcywgdGhpcy5vcHRpb25zLnNlZ21lbnQpKTtcbiAgICB9XG4gICAgZmlyc3QoKSB7XG4gICAgICBjb25zdCBzZWdtZW50cyA9IHRoaXMuc2VnbWVudHM7XG4gICAgICBjb25zdCBwb2ludHMgPSB0aGlzLnBvaW50cztcbiAgICAgIHJldHVybiBzZWdtZW50cy5sZW5ndGggJiYgcG9pbnRzW3NlZ21lbnRzWzBdLnN0YXJ0XTtcbiAgICB9XG4gICAgbGFzdCgpIHtcbiAgICAgIGNvbnN0IHNlZ21lbnRzID0gdGhpcy5zZWdtZW50cztcbiAgICAgIGNvbnN0IHBvaW50cyA9IHRoaXMucG9pbnRzO1xuICAgICAgY29uc3QgY291bnQgPSBzZWdtZW50cy5sZW5ndGg7XG4gICAgICByZXR1cm4gY291bnQgJiYgcG9pbnRzW3NlZ21lbnRzW2NvdW50IC0gMV0uZW5kXTtcbiAgICB9XG4gICAgaW50ZXJwb2xhdGUocG9pbnQsIHByb3BlcnR5KSB7XG4gICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgICAgY29uc3QgdmFsdWUgPSBwb2ludFtwcm9wZXJ0eV07XG4gICAgICBjb25zdCBwb2ludHMgPSB0aGlzLnBvaW50cztcbiAgICAgIGNvbnN0IHNlZ21lbnRzID0gX2JvdW5kU2VnbWVudHModGhpcywge1xuICAgICAgICBwcm9wZXJ0eSxcbiAgICAgICAgc3RhcnQ6IHZhbHVlLFxuICAgICAgICBlbmQ6IHZhbHVlXG4gICAgICB9KTtcbiAgICAgIGlmICghc2VnbWVudHMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgICAgY29uc3QgX2ludGVycG9sYXRlID0gX2dldEludGVycG9sYXRpb25NZXRob2Qob3B0aW9ucyk7XG4gICAgICBsZXQgaSwgaWxlbjtcbiAgICAgIGZvciAoaSA9IDAsIGlsZW4gPSBzZWdtZW50cy5sZW5ndGg7IGkgPCBpbGVuOyArK2kpIHtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgIHN0YXJ0LFxuICAgICAgICAgIGVuZFxuICAgICAgICB9ID0gc2VnbWVudHNbaV07XG4gICAgICAgIGNvbnN0IHAxID0gcG9pbnRzW3N0YXJ0XTtcbiAgICAgICAgY29uc3QgcDIgPSBwb2ludHNbZW5kXTtcbiAgICAgICAgaWYgKHAxID09PSBwMikge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKHAxKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0ID0gTWF0aC5hYnMoKHZhbHVlIC0gcDFbcHJvcGVydHldKSAvIChwMltwcm9wZXJ0eV0gLSBwMVtwcm9wZXJ0eV0pKTtcbiAgICAgICAgY29uc3QgaW50ZXJwb2xhdGVkID0gX2ludGVycG9sYXRlKHAxLCBwMiwgdCwgb3B0aW9ucy5zdGVwcGVkKTtcbiAgICAgICAgaW50ZXJwb2xhdGVkW3Byb3BlcnR5XSA9IHBvaW50W3Byb3BlcnR5XTtcbiAgICAgICAgcmVzdWx0LnB1c2goaW50ZXJwb2xhdGVkKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQubGVuZ3RoID09PSAxID8gcmVzdWx0WzBdIDogcmVzdWx0O1xuICAgIH1cbiAgICBwYXRoU2VnbWVudChjdHgsIHNlZ21lbnQsIHBhcmFtcykge1xuICAgICAgY29uc3Qgc2VnbWVudE1ldGhvZCA9IF9nZXRTZWdtZW50TWV0aG9kKHRoaXMpO1xuICAgICAgcmV0dXJuIHNlZ21lbnRNZXRob2QoY3R4LCB0aGlzLCBzZWdtZW50LCBwYXJhbXMpO1xuICAgIH1cbiAgICBwYXRoKGN0eCwgc3RhcnQsIGNvdW50KSB7XG4gICAgICBjb25zdCBzZWdtZW50cyA9IHRoaXMuc2VnbWVudHM7XG4gICAgICBjb25zdCBzZWdtZW50TWV0aG9kID0gX2dldFNlZ21lbnRNZXRob2QodGhpcyk7XG4gICAgICBsZXQgbG9vcCA9IHRoaXMuX2xvb3A7XG4gICAgICBzdGFydCA9IHN0YXJ0IHx8IDA7XG4gICAgICBjb3VudCA9IGNvdW50IHx8IHRoaXMucG9pbnRzLmxlbmd0aCAtIHN0YXJ0O1xuICAgICAgZm9yIChjb25zdCBzZWdtZW50IG9mIHNlZ21lbnRzKSB7XG4gICAgICAgIGxvb3AgJj0gc2VnbWVudE1ldGhvZChjdHgsIHRoaXMsIHNlZ21lbnQsIHtcbiAgICAgICAgICBzdGFydCxcbiAgICAgICAgICBlbmQ6IHN0YXJ0ICsgY291bnQgLSAxXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuICEhbG9vcDtcbiAgICB9XG4gICAgZHJhdyhjdHgsIGNoYXJ0QXJlYSwgc3RhcnQsIGNvdW50KSB7XG4gICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zIHx8IHt9O1xuICAgICAgY29uc3QgcG9pbnRzID0gdGhpcy5wb2ludHMgfHwgW107XG4gICAgICBpZiAocG9pbnRzLmxlbmd0aCAmJiBvcHRpb25zLmJvcmRlcldpZHRoKSB7XG4gICAgICAgIGN0eC5zYXZlKCk7XG4gICAgICAgIGRyYXcoY3R4LCB0aGlzLCBzdGFydCwgY291bnQpO1xuICAgICAgICBjdHgucmVzdG9yZSgpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuYW5pbWF0ZWQpIHtcbiAgICAgICAgdGhpcy5fcG9pbnRzVXBkYXRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9wYXRoID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gTGluZUVsZW1lbnQ7XG59KSgpO1xuZnVuY3Rpb24gaW5SYW5nZSQxKGVsLCBwb3MsIGF4aXMsIHVzZUZpbmFsUG9zaXRpb24pIHtcbiAgY29uc3Qgb3B0aW9ucyA9IGVsLm9wdGlvbnM7XG4gIGNvbnN0IHtcbiAgICBbYXhpc106IHZhbHVlXG4gIH0gPSBlbC5nZXRQcm9wcyhbYXhpc10sIHVzZUZpbmFsUG9zaXRpb24pO1xuICByZXR1cm4gTWF0aC5hYnMocG9zIC0gdmFsdWUpIDwgb3B0aW9ucy5yYWRpdXMgKyBvcHRpb25zLmhpdFJhZGl1cztcbn1cbmxldCBQb2ludEVsZW1lbnQgPSAvKiNfX1BVUkVfXyovKCgpID0+IHtcbiAgY2xhc3MgUG9pbnRFbGVtZW50IGV4dGVuZHMgRWxlbWVudCB7XG4gICAgc3RhdGljIGlkID0gJ3BvaW50JztcbiAgICBwYXJzZWQ7XG4gICAgc2tpcDtcbiAgICBzdG9wO1xuICAgIC8qKlxuICAgICogQHR5cGUge2FueX1cbiAgICAqL1xuICAgIHN0YXRpYyBkZWZhdWx0cyA9IHtcbiAgICAgIGJvcmRlcldpZHRoOiAxLFxuICAgICAgaGl0UmFkaXVzOiAxLFxuICAgICAgaG92ZXJCb3JkZXJXaWR0aDogMSxcbiAgICAgIGhvdmVyUmFkaXVzOiA0LFxuICAgICAgcG9pbnRTdHlsZTogJ2NpcmNsZScsXG4gICAgICByYWRpdXM6IDMsXG4gICAgICByb3RhdGlvbjogMFxuICAgIH07XG4gICAgLyoqXG4gICAgKiBAdHlwZSB7YW55fVxuICAgICovXG4gICAgc3RhdGljIGRlZmF1bHRSb3V0ZXMgPSB7XG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6ICdiYWNrZ3JvdW5kQ29sb3InLFxuICAgICAgYm9yZGVyQ29sb3I6ICdib3JkZXJDb2xvcidcbiAgICB9O1xuICAgIGNvbnN0cnVjdG9yKGNmZykge1xuICAgICAgc3VwZXIoKTtcbiAgICAgIHRoaXMub3B0aW9ucyA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMucGFyc2VkID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5za2lwID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5zdG9wID0gdW5kZWZpbmVkO1xuICAgICAgaWYgKGNmZykge1xuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGNmZyk7XG4gICAgICB9XG4gICAgfVxuICAgIGluUmFuZ2UobW91c2VYLCBtb3VzZVksIHVzZUZpbmFsUG9zaXRpb24pIHtcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHgsXG4gICAgICAgIHlcbiAgICAgIH0gPSB0aGlzLmdldFByb3BzKFsneCcsICd5J10sIHVzZUZpbmFsUG9zaXRpb24pO1xuICAgICAgcmV0dXJuIE1hdGgucG93KG1vdXNlWCAtIHgsIDIpICsgTWF0aC5wb3cobW91c2VZIC0geSwgMikgPCBNYXRoLnBvdyhvcHRpb25zLmhpdFJhZGl1cyArIG9wdGlvbnMucmFkaXVzLCAyKTtcbiAgICB9XG4gICAgaW5YUmFuZ2UobW91c2VYLCB1c2VGaW5hbFBvc2l0aW9uKSB7XG4gICAgICByZXR1cm4gaW5SYW5nZSQxKHRoaXMsIG1vdXNlWCwgJ3gnLCB1c2VGaW5hbFBvc2l0aW9uKTtcbiAgICB9XG4gICAgaW5ZUmFuZ2UobW91c2VZLCB1c2VGaW5hbFBvc2l0aW9uKSB7XG4gICAgICByZXR1cm4gaW5SYW5nZSQxKHRoaXMsIG1vdXNlWSwgJ3knLCB1c2VGaW5hbFBvc2l0aW9uKTtcbiAgICB9XG4gICAgZ2V0Q2VudGVyUG9pbnQodXNlRmluYWxQb3NpdGlvbikge1xuICAgICAgY29uc3Qge1xuICAgICAgICB4LFxuICAgICAgICB5XG4gICAgICB9ID0gdGhpcy5nZXRQcm9wcyhbJ3gnLCAneSddLCB1c2VGaW5hbFBvc2l0aW9uKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHgsXG4gICAgICAgIHlcbiAgICAgIH07XG4gICAgfVxuICAgIHNpemUob3B0aW9ucykge1xuICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwgdGhpcy5vcHRpb25zIHx8IHt9O1xuICAgICAgbGV0IHJhZGl1cyA9IG9wdGlvbnMucmFkaXVzIHx8IDA7XG4gICAgICByYWRpdXMgPSBNYXRoLm1heChyYWRpdXMsIHJhZGl1cyAmJiBvcHRpb25zLmhvdmVyUmFkaXVzIHx8IDApO1xuICAgICAgY29uc3QgYm9yZGVyV2lkdGggPSByYWRpdXMgJiYgb3B0aW9ucy5ib3JkZXJXaWR0aCB8fCAwO1xuICAgICAgcmV0dXJuIChyYWRpdXMgKyBib3JkZXJXaWR0aCkgKiAyO1xuICAgIH1cbiAgICBkcmF3KGN0eCwgYXJlYSkge1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICAgIGlmICh0aGlzLnNraXAgfHwgb3B0aW9ucy5yYWRpdXMgPCAwLjEgfHwgIV9pc1BvaW50SW5BcmVhKHRoaXMsIGFyZWEsIHRoaXMuc2l6ZShvcHRpb25zKSAvIDIpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGN0eC5zdHJva2VTdHlsZSA9IG9wdGlvbnMuYm9yZGVyQ29sb3I7XG4gICAgICBjdHgubGluZVdpZHRoID0gb3B0aW9ucy5ib3JkZXJXaWR0aDtcbiAgICAgIGN0eC5maWxsU3R5bGUgPSBvcHRpb25zLmJhY2tncm91bmRDb2xvcjtcbiAgICAgIGRyYXdQb2ludChjdHgsIG9wdGlvbnMsIHRoaXMueCwgdGhpcy55KTtcbiAgICB9XG4gICAgZ2V0UmFuZ2UoKSB7XG4gICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zIHx8IHt9O1xuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBGYWxsYmFja3Mgc2hvdWxkIG5ldmVyIGJlIGhpdCBpbiBwcmFjdGljZVxuICAgICAgcmV0dXJuIG9wdGlvbnMucmFkaXVzICsgb3B0aW9ucy5oaXRSYWRpdXM7XG4gICAgfVxuICB9XG4gIHJldHVybiBQb2ludEVsZW1lbnQ7XG59KSgpO1xuZnVuY3Rpb24gZ2V0QmFyQm91bmRzKGJhciwgdXNlRmluYWxQb3NpdGlvbikge1xuICBjb25zdCB7XG4gICAgeCxcbiAgICB5LFxuICAgIGJhc2UsXG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0XG4gIH0gPSBiYXIuZ2V0UHJvcHMoWyd4JywgJ3knLCAnYmFzZScsICd3aWR0aCcsICdoZWlnaHQnXSwgdXNlRmluYWxQb3NpdGlvbik7XG4gIGxldCBsZWZ0LCByaWdodCwgdG9wLCBib3R0b20sIGhhbGY7XG4gIGlmIChiYXIuaG9yaXpvbnRhbCkge1xuICAgIGhhbGYgPSBoZWlnaHQgLyAyO1xuICAgIGxlZnQgPSBNYXRoLm1pbih4LCBiYXNlKTtcbiAgICByaWdodCA9IE1hdGgubWF4KHgsIGJhc2UpO1xuICAgIHRvcCA9IHkgLSBoYWxmO1xuICAgIGJvdHRvbSA9IHkgKyBoYWxmO1xuICB9IGVsc2Uge1xuICAgIGhhbGYgPSB3aWR0aCAvIDI7XG4gICAgbGVmdCA9IHggLSBoYWxmO1xuICAgIHJpZ2h0ID0geCArIGhhbGY7XG4gICAgdG9wID0gTWF0aC5taW4oeSwgYmFzZSk7XG4gICAgYm90dG9tID0gTWF0aC5tYXgoeSwgYmFzZSk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBsZWZ0LFxuICAgIHRvcCxcbiAgICByaWdodCxcbiAgICBib3R0b21cbiAgfTtcbn1cbmZ1bmN0aW9uIHNraXBPckxpbWl0KHNraXAsIHZhbHVlLCBtaW4sIG1heCkge1xuICByZXR1cm4gc2tpcCA/IDAgOiBfbGltaXRWYWx1ZSh2YWx1ZSwgbWluLCBtYXgpO1xufVxuZnVuY3Rpb24gcGFyc2VCb3JkZXJXaWR0aChiYXIsIG1heFcsIG1heEgpIHtcbiAgY29uc3QgdmFsdWUgPSBiYXIub3B0aW9ucy5ib3JkZXJXaWR0aDtcbiAgY29uc3Qgc2tpcCA9IGJhci5ib3JkZXJTa2lwcGVkO1xuICBjb25zdCBvID0gdG9UUkJMKHZhbHVlKTtcbiAgcmV0dXJuIHtcbiAgICB0OiBza2lwT3JMaW1pdChza2lwLnRvcCwgby50b3AsIDAsIG1heEgpLFxuICAgIHI6IHNraXBPckxpbWl0KHNraXAucmlnaHQsIG8ucmlnaHQsIDAsIG1heFcpLFxuICAgIGI6IHNraXBPckxpbWl0KHNraXAuYm90dG9tLCBvLmJvdHRvbSwgMCwgbWF4SCksXG4gICAgbDogc2tpcE9yTGltaXQoc2tpcC5sZWZ0LCBvLmxlZnQsIDAsIG1heFcpXG4gIH07XG59XG5mdW5jdGlvbiBwYXJzZUJvcmRlclJhZGl1cyhiYXIsIG1heFcsIG1heEgpIHtcbiAgY29uc3Qge1xuICAgIGVuYWJsZUJvcmRlclJhZGl1c1xuICB9ID0gYmFyLmdldFByb3BzKFsnZW5hYmxlQm9yZGVyUmFkaXVzJ10pO1xuICBjb25zdCB2YWx1ZSA9IGJhci5vcHRpb25zLmJvcmRlclJhZGl1cztcbiAgY29uc3QgbyA9IHRvVFJCTENvcm5lcnModmFsdWUpO1xuICBjb25zdCBtYXhSID0gTWF0aC5taW4obWF4VywgbWF4SCk7XG4gIGNvbnN0IHNraXAgPSBiYXIuYm9yZGVyU2tpcHBlZDtcbiAgY29uc3QgZW5hYmxlQm9yZGVyID0gZW5hYmxlQm9yZGVyUmFkaXVzIHx8IGlzT2JqZWN0KHZhbHVlKTtcbiAgcmV0dXJuIHtcbiAgICB0b3BMZWZ0OiBza2lwT3JMaW1pdCghZW5hYmxlQm9yZGVyIHx8IHNraXAudG9wIHx8IHNraXAubGVmdCwgby50b3BMZWZ0LCAwLCBtYXhSKSxcbiAgICB0b3BSaWdodDogc2tpcE9yTGltaXQoIWVuYWJsZUJvcmRlciB8fCBza2lwLnRvcCB8fCBza2lwLnJpZ2h0LCBvLnRvcFJpZ2h0LCAwLCBtYXhSKSxcbiAgICBib3R0b21MZWZ0OiBza2lwT3JMaW1pdCghZW5hYmxlQm9yZGVyIHx8IHNraXAuYm90dG9tIHx8IHNraXAubGVmdCwgby5ib3R0b21MZWZ0LCAwLCBtYXhSKSxcbiAgICBib3R0b21SaWdodDogc2tpcE9yTGltaXQoIWVuYWJsZUJvcmRlciB8fCBza2lwLmJvdHRvbSB8fCBza2lwLnJpZ2h0LCBvLmJvdHRvbVJpZ2h0LCAwLCBtYXhSKVxuICB9O1xufVxuZnVuY3Rpb24gYm91bmRpbmdSZWN0cyhiYXIpIHtcbiAgY29uc3QgYm91bmRzID0gZ2V0QmFyQm91bmRzKGJhcik7XG4gIGNvbnN0IHdpZHRoID0gYm91bmRzLnJpZ2h0IC0gYm91bmRzLmxlZnQ7XG4gIGNvbnN0IGhlaWdodCA9IGJvdW5kcy5ib3R0b20gLSBib3VuZHMudG9wO1xuICBjb25zdCBib3JkZXIgPSBwYXJzZUJvcmRlcldpZHRoKGJhciwgd2lkdGggLyAyLCBoZWlnaHQgLyAyKTtcbiAgY29uc3QgcmFkaXVzID0gcGFyc2VCb3JkZXJSYWRpdXMoYmFyLCB3aWR0aCAvIDIsIGhlaWdodCAvIDIpO1xuICByZXR1cm4ge1xuICAgIG91dGVyOiB7XG4gICAgICB4OiBib3VuZHMubGVmdCxcbiAgICAgIHk6IGJvdW5kcy50b3AsXG4gICAgICB3OiB3aWR0aCxcbiAgICAgIGg6IGhlaWdodCxcbiAgICAgIHJhZGl1c1xuICAgIH0sXG4gICAgaW5uZXI6IHtcbiAgICAgIHg6IGJvdW5kcy5sZWZ0ICsgYm9yZGVyLmwsXG4gICAgICB5OiBib3VuZHMudG9wICsgYm9yZGVyLnQsXG4gICAgICB3OiB3aWR0aCAtIGJvcmRlci5sIC0gYm9yZGVyLnIsXG4gICAgICBoOiBoZWlnaHQgLSBib3JkZXIudCAtIGJvcmRlci5iLFxuICAgICAgcmFkaXVzOiB7XG4gICAgICAgIHRvcExlZnQ6IE1hdGgubWF4KDAsIHJhZGl1cy50b3BMZWZ0IC0gTWF0aC5tYXgoYm9yZGVyLnQsIGJvcmRlci5sKSksXG4gICAgICAgIHRvcFJpZ2h0OiBNYXRoLm1heCgwLCByYWRpdXMudG9wUmlnaHQgLSBNYXRoLm1heChib3JkZXIudCwgYm9yZGVyLnIpKSxcbiAgICAgICAgYm90dG9tTGVmdDogTWF0aC5tYXgoMCwgcmFkaXVzLmJvdHRvbUxlZnQgLSBNYXRoLm1heChib3JkZXIuYiwgYm9yZGVyLmwpKSxcbiAgICAgICAgYm90dG9tUmlnaHQ6IE1hdGgubWF4KDAsIHJhZGl1cy5ib3R0b21SaWdodCAtIE1hdGgubWF4KGJvcmRlci5iLCBib3JkZXIucikpXG4gICAgICB9XG4gICAgfVxuICB9O1xufVxuZnVuY3Rpb24gaW5SYW5nZShiYXIsIHgsIHksIHVzZUZpbmFsUG9zaXRpb24pIHtcbiAgY29uc3Qgc2tpcFggPSB4ID09PSBudWxsO1xuICBjb25zdCBza2lwWSA9IHkgPT09IG51bGw7XG4gIGNvbnN0IHNraXBCb3RoID0gc2tpcFggJiYgc2tpcFk7XG4gIGNvbnN0IGJvdW5kcyA9IGJhciAmJiAhc2tpcEJvdGggJiYgZ2V0QmFyQm91bmRzKGJhciwgdXNlRmluYWxQb3NpdGlvbik7XG4gIHJldHVybiBib3VuZHMgJiYgKHNraXBYIHx8IF9pc0JldHdlZW4oeCwgYm91bmRzLmxlZnQsIGJvdW5kcy5yaWdodCkpICYmIChza2lwWSB8fCBfaXNCZXR3ZWVuKHksIGJvdW5kcy50b3AsIGJvdW5kcy5ib3R0b20pKTtcbn1cbmZ1bmN0aW9uIGhhc1JhZGl1cyhyYWRpdXMpIHtcbiAgcmV0dXJuIHJhZGl1cy50b3BMZWZ0IHx8IHJhZGl1cy50b3BSaWdodCB8fCByYWRpdXMuYm90dG9tTGVmdCB8fCByYWRpdXMuYm90dG9tUmlnaHQ7XG59XG5mdW5jdGlvbiBhZGROb3JtYWxSZWN0UGF0aChjdHgsIHJlY3QpIHtcbiAgY3R4LnJlY3QocmVjdC54LCByZWN0LnksIHJlY3QudywgcmVjdC5oKTtcbn1cbmZ1bmN0aW9uIGluZmxhdGVSZWN0KHJlY3QsIGFtb3VudCwgcmVmUmVjdCA9IHt9KSB7XG4gIGNvbnN0IHggPSByZWN0LnggIT09IHJlZlJlY3QueCA/IC1hbW91bnQgOiAwO1xuICBjb25zdCB5ID0gcmVjdC55ICE9PSByZWZSZWN0LnkgPyAtYW1vdW50IDogMDtcbiAgY29uc3QgdyA9IChyZWN0LnggKyByZWN0LncgIT09IHJlZlJlY3QueCArIHJlZlJlY3QudyA/IGFtb3VudCA6IDApIC0geDtcbiAgY29uc3QgaCA9IChyZWN0LnkgKyByZWN0LmggIT09IHJlZlJlY3QueSArIHJlZlJlY3QuaCA/IGFtb3VudCA6IDApIC0geTtcbiAgcmV0dXJuIHtcbiAgICB4OiByZWN0LnggKyB4LFxuICAgIHk6IHJlY3QueSArIHksXG4gICAgdzogcmVjdC53ICsgdyxcbiAgICBoOiByZWN0LmggKyBoLFxuICAgIHJhZGl1czogcmVjdC5yYWRpdXNcbiAgfTtcbn1cbmNsYXNzIEJhckVsZW1lbnQgZXh0ZW5kcyBFbGVtZW50IHtcbiAgc3RhdGljIGlkID0gJ2Jhcic7XG4gIHN0YXRpYyBkZWZhdWx0cyA9IHtcbiAgICBib3JkZXJTa2lwcGVkOiAnc3RhcnQnLFxuICAgIGJvcmRlcldpZHRoOiAwLFxuICAgIGJvcmRlclJhZGl1czogMCxcbiAgICBpbmZsYXRlQW1vdW50OiAnYXV0bycsXG4gICAgcG9pbnRTdHlsZTogdW5kZWZpbmVkXG4gIH07XG4gIHN0YXRpYyBkZWZhdWx0Um91dGVzID0ge1xuICAgIGJhY2tncm91bmRDb2xvcjogJ2JhY2tncm91bmRDb2xvcicsXG4gICAgYm9yZGVyQ29sb3I6ICdib3JkZXJDb2xvcidcbiAgfTtcbiAgY29uc3RydWN0b3IoY2ZnKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLm9wdGlvbnMgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5ob3Jpem9udGFsID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuYmFzZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLndpZHRoID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuaGVpZ2h0ID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuaW5mbGF0ZUFtb3VudCA9IHVuZGVmaW5lZDtcbiAgICBpZiAoY2ZnKSB7XG4gICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGNmZyk7XG4gICAgfVxuICB9XG4gIGRyYXcoY3R4KSB7XG4gICAgY29uc3Qge1xuICAgICAgaW5mbGF0ZUFtb3VudCxcbiAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgYm9yZGVyQ29sb3IsXG4gICAgICAgIGJhY2tncm91bmRDb2xvclxuICAgICAgfVxuICAgIH0gPSB0aGlzO1xuICAgIGNvbnN0IHtcbiAgICAgIGlubmVyLFxuICAgICAgb3V0ZXJcbiAgICB9ID0gYm91bmRpbmdSZWN0cyh0aGlzKTtcbiAgICBjb25zdCBhZGRSZWN0UGF0aCA9IGhhc1JhZGl1cyhvdXRlci5yYWRpdXMpID8gYWRkUm91bmRlZFJlY3RQYXRoIDogYWRkTm9ybWFsUmVjdFBhdGg7XG4gICAgY3R4LnNhdmUoKTtcbiAgICBpZiAob3V0ZXIudyAhPT0gaW5uZXIudyB8fCBvdXRlci5oICE9PSBpbm5lci5oKSB7XG4gICAgICBjdHguYmVnaW5QYXRoKCk7XG4gICAgICBhZGRSZWN0UGF0aChjdHgsIGluZmxhdGVSZWN0KG91dGVyLCBpbmZsYXRlQW1vdW50LCBpbm5lcikpO1xuICAgICAgY3R4LmNsaXAoKTtcbiAgICAgIGFkZFJlY3RQYXRoKGN0eCwgaW5mbGF0ZVJlY3QoaW5uZXIsIC1pbmZsYXRlQW1vdW50LCBvdXRlcikpO1xuICAgICAgY3R4LmZpbGxTdHlsZSA9IGJvcmRlckNvbG9yO1xuICAgICAgY3R4LmZpbGwoJ2V2ZW5vZGQnKTtcbiAgICB9XG4gICAgY3R4LmJlZ2luUGF0aCgpO1xuICAgIGFkZFJlY3RQYXRoKGN0eCwgaW5mbGF0ZVJlY3QoaW5uZXIsIGluZmxhdGVBbW91bnQpKTtcbiAgICBjdHguZmlsbFN0eWxlID0gYmFja2dyb3VuZENvbG9yO1xuICAgIGN0eC5maWxsKCk7XG4gICAgY3R4LnJlc3RvcmUoKTtcbiAgfVxuICBpblJhbmdlKG1vdXNlWCwgbW91c2VZLCB1c2VGaW5hbFBvc2l0aW9uKSB7XG4gICAgcmV0dXJuIGluUmFuZ2UodGhpcywgbW91c2VYLCBtb3VzZVksIHVzZUZpbmFsUG9zaXRpb24pO1xuICB9XG4gIGluWFJhbmdlKG1vdXNlWCwgdXNlRmluYWxQb3NpdGlvbikge1xuICAgIHJldHVybiBpblJhbmdlKHRoaXMsIG1vdXNlWCwgbnVsbCwgdXNlRmluYWxQb3NpdGlvbik7XG4gIH1cbiAgaW5ZUmFuZ2UobW91c2VZLCB1c2VGaW5hbFBvc2l0aW9uKSB7XG4gICAgcmV0dXJuIGluUmFuZ2UodGhpcywgbnVsbCwgbW91c2VZLCB1c2VGaW5hbFBvc2l0aW9uKTtcbiAgfVxuICBnZXRDZW50ZXJQb2ludCh1c2VGaW5hbFBvc2l0aW9uKSB7XG4gICAgY29uc3Qge1xuICAgICAgeCxcbiAgICAgIHksXG4gICAgICBiYXNlLFxuICAgICAgaG9yaXpvbnRhbFxuICAgIH0gPSB0aGlzLmdldFByb3BzKFsneCcsICd5JywgJ2Jhc2UnLCAnaG9yaXpvbnRhbCddLCB1c2VGaW5hbFBvc2l0aW9uKTtcbiAgICByZXR1cm4ge1xuICAgICAgeDogaG9yaXpvbnRhbCA/ICh4ICsgYmFzZSkgLyAyIDogeCxcbiAgICAgIHk6IGhvcml6b250YWwgPyB5IDogKHkgKyBiYXNlKSAvIDJcbiAgICB9O1xuICB9XG4gIGdldFJhbmdlKGF4aXMpIHtcbiAgICByZXR1cm4gYXhpcyA9PT0gJ3gnID8gdGhpcy53aWR0aCAvIDIgOiB0aGlzLmhlaWdodCAvIDI7XG4gIH1cbn1cbnZhciBlbGVtZW50cyA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXplKHtcbiAgX19wcm90b19fOiBudWxsLFxuICBBcmNFbGVtZW50OiBBcmNFbGVtZW50LFxuICBCYXJFbGVtZW50OiBCYXJFbGVtZW50LFxuICBMaW5lRWxlbWVudDogTGluZUVsZW1lbnQsXG4gIFBvaW50RWxlbWVudDogUG9pbnRFbGVtZW50XG59KTtcbmNvbnN0IEJPUkRFUl9DT0xPUlMgPSBbJ3JnYig1NCwgMTYyLCAyMzUpJywgJ3JnYigyNTUsIDk5LCAxMzIpJywgJ3JnYigyNTUsIDE1OSwgNjQpJywgJ3JnYigyNTUsIDIwNSwgODYpJywgJ3JnYig3NSwgMTkyLCAxOTIpJywgJ3JnYigxNTMsIDEwMiwgMjU1KScsICdyZ2IoMjAxLCAyMDMsIDIwNyknIC8vIGdyZXlcbl07XG4vLyBCb3JkZXIgY29sb3JzIHdpdGggNTAlIHRyYW5zcGFyZW5jeVxuY29uc3QgQkFDS0dST1VORF9DT0xPUlMgPSAvKiAjX19QVVJFX18gKi9CT1JERVJfQ09MT1JTLm1hcChjb2xvciA9PiBjb2xvci5yZXBsYWNlKCdyZ2IoJywgJ3JnYmEoJykucmVwbGFjZSgnKScsICcsIDAuNSknKSk7XG5mdW5jdGlvbiBnZXRCb3JkZXJDb2xvcihpKSB7XG4gIHJldHVybiBCT1JERVJfQ09MT1JTW2kgJSBCT1JERVJfQ09MT1JTLmxlbmd0aF07XG59XG5mdW5jdGlvbiBnZXRCYWNrZ3JvdW5kQ29sb3IoaSkge1xuICByZXR1cm4gQkFDS0dST1VORF9DT0xPUlNbaSAlIEJBQ0tHUk9VTkRfQ09MT1JTLmxlbmd0aF07XG59XG5mdW5jdGlvbiBjb2xvcml6ZURlZmF1bHREYXRhc2V0KGRhdGFzZXQsIGkpIHtcbiAgZGF0YXNldC5ib3JkZXJDb2xvciA9IGdldEJvcmRlckNvbG9yKGkpO1xuICBkYXRhc2V0LmJhY2tncm91bmRDb2xvciA9IGdldEJhY2tncm91bmRDb2xvcihpKTtcbiAgcmV0dXJuICsraTtcbn1cbmZ1bmN0aW9uIGNvbG9yaXplRG91Z2hudXREYXRhc2V0KGRhdGFzZXQsIGkpIHtcbiAgZGF0YXNldC5iYWNrZ3JvdW5kQ29sb3IgPSBkYXRhc2V0LmRhdGEubWFwKCgpID0+IGdldEJvcmRlckNvbG9yKGkrKykpO1xuICByZXR1cm4gaTtcbn1cbmZ1bmN0aW9uIGNvbG9yaXplUG9sYXJBcmVhRGF0YXNldChkYXRhc2V0LCBpKSB7XG4gIGRhdGFzZXQuYmFja2dyb3VuZENvbG9yID0gZGF0YXNldC5kYXRhLm1hcCgoKSA9PiBnZXRCYWNrZ3JvdW5kQ29sb3IoaSsrKSk7XG4gIHJldHVybiBpO1xufVxuZnVuY3Rpb24gZ2V0Q29sb3JpemVyKGNoYXJ0KSB7XG4gIGxldCBpID0gMDtcbiAgcmV0dXJuIChkYXRhc2V0LCBkYXRhc2V0SW5kZXgpID0+IHtcbiAgICBjb25zdCBjb250cm9sbGVyID0gY2hhcnQuZ2V0RGF0YXNldE1ldGEoZGF0YXNldEluZGV4KS5jb250cm9sbGVyO1xuICAgIGlmIChjb250cm9sbGVyIGluc3RhbmNlb2YgRG91Z2hudXRDb250cm9sbGVyKSB7XG4gICAgICBpID0gY29sb3JpemVEb3VnaG51dERhdGFzZXQoZGF0YXNldCwgaSk7XG4gICAgfSBlbHNlIGlmIChjb250cm9sbGVyIGluc3RhbmNlb2YgUG9sYXJBcmVhQ29udHJvbGxlcikge1xuICAgICAgaSA9IGNvbG9yaXplUG9sYXJBcmVhRGF0YXNldChkYXRhc2V0LCBpKTtcbiAgICB9IGVsc2UgaWYgKGNvbnRyb2xsZXIpIHtcbiAgICAgIGkgPSBjb2xvcml6ZURlZmF1bHREYXRhc2V0KGRhdGFzZXQsIGkpO1xuICAgIH1cbiAgfTtcbn1cbmZ1bmN0aW9uIGNvbnRhaW5zQ29sb3JzRGVmaW5pdGlvbnMoZGVzY3JpcHRvcnMpIHtcbiAgbGV0IGs7XG4gIGZvciAoayBpbiBkZXNjcmlwdG9ycykge1xuICAgIGlmIChkZXNjcmlwdG9yc1trXS5ib3JkZXJDb2xvciB8fCBkZXNjcmlwdG9yc1trXS5iYWNrZ3JvdW5kQ29sb3IpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiBjb250YWluc0NvbG9yc0RlZmluaXRpb24oZGVzY3JpcHRvcikge1xuICByZXR1cm4gZGVzY3JpcHRvciAmJiAoZGVzY3JpcHRvci5ib3JkZXJDb2xvciB8fCBkZXNjcmlwdG9yLmJhY2tncm91bmRDb2xvcik7XG59XG5mdW5jdGlvbiBjb250YWluc0RlZmF1bHRDb2xvcnNEZWZlbml0aW9ucygpIHtcbiAgcmV0dXJuIGRlZmF1bHRzLmJvcmRlckNvbG9yICE9PSAncmdiYSgwLDAsMCwwLjEpJyB8fCBkZWZhdWx0cy5iYWNrZ3JvdW5kQ29sb3IgIT09ICdyZ2JhKDAsMCwwLDAuMSknO1xufVxudmFyIHBsdWdpbl9jb2xvcnMgPSB7XG4gIGlkOiAnY29sb3JzJyxcbiAgZGVmYXVsdHM6IHtcbiAgICBlbmFibGVkOiB0cnVlLFxuICAgIGZvcmNlT3ZlcnJpZGU6IGZhbHNlXG4gIH0sXG4gIGJlZm9yZUxheW91dChjaGFydCwgX2FyZ3MsIG9wdGlvbnMpIHtcbiAgICBpZiAoIW9wdGlvbnMuZW5hYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB7XG4gICAgICBkYXRhOiB7XG4gICAgICAgIGRhdGFzZXRzXG4gICAgICB9LFxuICAgICAgb3B0aW9uczogY2hhcnRPcHRpb25zXG4gICAgfSA9IGNoYXJ0LmNvbmZpZztcbiAgICBjb25zdCB7XG4gICAgICBlbGVtZW50c1xuICAgIH0gPSBjaGFydE9wdGlvbnM7XG4gICAgY29uc3QgY29udGFpbnNDb2xvckRlZmVuaXRpb24gPSBjb250YWluc0NvbG9yc0RlZmluaXRpb25zKGRhdGFzZXRzKSB8fCBjb250YWluc0NvbG9yc0RlZmluaXRpb24oY2hhcnRPcHRpb25zKSB8fCBlbGVtZW50cyAmJiBjb250YWluc0NvbG9yc0RlZmluaXRpb25zKGVsZW1lbnRzKSB8fCBjb250YWluc0RlZmF1bHRDb2xvcnNEZWZlbml0aW9ucygpO1xuICAgIGlmICghb3B0aW9ucy5mb3JjZU92ZXJyaWRlICYmIGNvbnRhaW5zQ29sb3JEZWZlbml0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGNvbG9yaXplciA9IGdldENvbG9yaXplcihjaGFydCk7XG4gICAgZGF0YXNldHMuZm9yRWFjaChjb2xvcml6ZXIpO1xuICB9XG59O1xuZnVuY3Rpb24gbHR0YkRlY2ltYXRpb24oZGF0YSwgc3RhcnQsIGNvdW50LCBhdmFpbGFibGVXaWR0aCwgb3B0aW9ucykge1xuICBjb25zdCBzYW1wbGVzID0gb3B0aW9ucy5zYW1wbGVzIHx8IGF2YWlsYWJsZVdpZHRoO1xuICBpZiAoc2FtcGxlcyA+PSBjb3VudCkge1xuICAgIHJldHVybiBkYXRhLnNsaWNlKHN0YXJ0LCBzdGFydCArIGNvdW50KTtcbiAgfVxuICBjb25zdCBkZWNpbWF0ZWQgPSBbXTtcbiAgY29uc3QgYnVja2V0V2lkdGggPSAoY291bnQgLSAyKSAvIChzYW1wbGVzIC0gMik7XG4gIGxldCBzYW1wbGVkSW5kZXggPSAwO1xuICBjb25zdCBlbmRJbmRleCA9IHN0YXJ0ICsgY291bnQgLSAxO1xuICBsZXQgYSA9IHN0YXJ0O1xuICBsZXQgaSwgbWF4QXJlYVBvaW50LCBtYXhBcmVhLCBhcmVhLCBuZXh0QTtcbiAgZGVjaW1hdGVkW3NhbXBsZWRJbmRleCsrXSA9IGRhdGFbYV07XG4gIGZvciAoaSA9IDA7IGkgPCBzYW1wbGVzIC0gMjsgaSsrKSB7XG4gICAgbGV0IGF2Z1ggPSAwO1xuICAgIGxldCBhdmdZID0gMDtcbiAgICBsZXQgajtcbiAgICBjb25zdCBhdmdSYW5nZVN0YXJ0ID0gTWF0aC5mbG9vcigoaSArIDEpICogYnVja2V0V2lkdGgpICsgMSArIHN0YXJ0O1xuICAgIGNvbnN0IGF2Z1JhbmdlRW5kID0gTWF0aC5taW4oTWF0aC5mbG9vcigoaSArIDIpICogYnVja2V0V2lkdGgpICsgMSwgY291bnQpICsgc3RhcnQ7XG4gICAgY29uc3QgYXZnUmFuZ2VMZW5ndGggPSBhdmdSYW5nZUVuZCAtIGF2Z1JhbmdlU3RhcnQ7XG4gICAgZm9yIChqID0gYXZnUmFuZ2VTdGFydDsgaiA8IGF2Z1JhbmdlRW5kOyBqKyspIHtcbiAgICAgIGF2Z1ggKz0gZGF0YVtqXS54O1xuICAgICAgYXZnWSArPSBkYXRhW2pdLnk7XG4gICAgfVxuICAgIGF2Z1ggLz0gYXZnUmFuZ2VMZW5ndGg7XG4gICAgYXZnWSAvPSBhdmdSYW5nZUxlbmd0aDtcbiAgICBjb25zdCByYW5nZU9mZnMgPSBNYXRoLmZsb29yKGkgKiBidWNrZXRXaWR0aCkgKyAxICsgc3RhcnQ7XG4gICAgY29uc3QgcmFuZ2VUbyA9IE1hdGgubWluKE1hdGguZmxvb3IoKGkgKyAxKSAqIGJ1Y2tldFdpZHRoKSArIDEsIGNvdW50KSArIHN0YXJ0O1xuICAgIGNvbnN0IHtcbiAgICAgIHg6IHBvaW50QXgsXG4gICAgICB5OiBwb2ludEF5XG4gICAgfSA9IGRhdGFbYV07XG4gICAgbWF4QXJlYSA9IGFyZWEgPSAtMTtcbiAgICBmb3IgKGogPSByYW5nZU9mZnM7IGogPCByYW5nZVRvOyBqKyspIHtcbiAgICAgIGFyZWEgPSAwLjUgKiBNYXRoLmFicygocG9pbnRBeCAtIGF2Z1gpICogKGRhdGFbal0ueSAtIHBvaW50QXkpIC0gKHBvaW50QXggLSBkYXRhW2pdLngpICogKGF2Z1kgLSBwb2ludEF5KSk7XG4gICAgICBpZiAoYXJlYSA+IG1heEFyZWEpIHtcbiAgICAgICAgbWF4QXJlYSA9IGFyZWE7XG4gICAgICAgIG1heEFyZWFQb2ludCA9IGRhdGFbal07XG4gICAgICAgIG5leHRBID0gajtcbiAgICAgIH1cbiAgICB9XG4gICAgZGVjaW1hdGVkW3NhbXBsZWRJbmRleCsrXSA9IG1heEFyZWFQb2ludDtcbiAgICBhID0gbmV4dEE7XG4gIH1cbiAgZGVjaW1hdGVkW3NhbXBsZWRJbmRleCsrXSA9IGRhdGFbZW5kSW5kZXhdO1xuICByZXR1cm4gZGVjaW1hdGVkO1xufVxuZnVuY3Rpb24gbWluTWF4RGVjaW1hdGlvbihkYXRhLCBzdGFydCwgY291bnQsIGF2YWlsYWJsZVdpZHRoKSB7XG4gIGxldCBhdmdYID0gMDtcbiAgbGV0IGNvdW50WCA9IDA7XG4gIGxldCBpLCBwb2ludCwgeCwgeSwgcHJldlgsIG1pbkluZGV4LCBtYXhJbmRleCwgc3RhcnRJbmRleCwgbWluWSwgbWF4WTtcbiAgY29uc3QgZGVjaW1hdGVkID0gW107XG4gIGNvbnN0IGVuZEluZGV4ID0gc3RhcnQgKyBjb3VudCAtIDE7XG4gIGNvbnN0IHhNaW4gPSBkYXRhW3N0YXJ0XS54O1xuICBjb25zdCB4TWF4ID0gZGF0YVtlbmRJbmRleF0ueDtcbiAgY29uc3QgZHggPSB4TWF4IC0geE1pbjtcbiAgZm9yIChpID0gc3RhcnQ7IGkgPCBzdGFydCArIGNvdW50OyArK2kpIHtcbiAgICBwb2ludCA9IGRhdGFbaV07XG4gICAgeCA9IChwb2ludC54IC0geE1pbikgLyBkeCAqIGF2YWlsYWJsZVdpZHRoO1xuICAgIHkgPSBwb2ludC55O1xuICAgIGNvbnN0IHRydW5jWCA9IHggfCAwO1xuICAgIGlmICh0cnVuY1ggPT09IHByZXZYKSB7XG4gICAgICBpZiAoeSA8IG1pblkpIHtcbiAgICAgICAgbWluWSA9IHk7XG4gICAgICAgIG1pbkluZGV4ID0gaTtcbiAgICAgIH0gZWxzZSBpZiAoeSA+IG1heFkpIHtcbiAgICAgICAgbWF4WSA9IHk7XG4gICAgICAgIG1heEluZGV4ID0gaTtcbiAgICAgIH1cbiAgICAgIGF2Z1ggPSAoY291bnRYICogYXZnWCArIHBvaW50LngpIC8gKytjb3VudFg7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGxhc3RJbmRleCA9IGkgLSAxO1xuICAgICAgaWYgKCFpc051bGxPclVuZGVmKG1pbkluZGV4KSAmJiAhaXNOdWxsT3JVbmRlZihtYXhJbmRleCkpIHtcbiAgICAgICAgY29uc3QgaW50ZXJtZWRpYXRlSW5kZXgxID0gTWF0aC5taW4obWluSW5kZXgsIG1heEluZGV4KTtcbiAgICAgICAgY29uc3QgaW50ZXJtZWRpYXRlSW5kZXgyID0gTWF0aC5tYXgobWluSW5kZXgsIG1heEluZGV4KTtcbiAgICAgICAgaWYgKGludGVybWVkaWF0ZUluZGV4MSAhPT0gc3RhcnRJbmRleCAmJiBpbnRlcm1lZGlhdGVJbmRleDEgIT09IGxhc3RJbmRleCkge1xuICAgICAgICAgIGRlY2ltYXRlZC5wdXNoKHtcbiAgICAgICAgICAgIC4uLmRhdGFbaW50ZXJtZWRpYXRlSW5kZXgxXSxcbiAgICAgICAgICAgIHg6IGF2Z1hcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW50ZXJtZWRpYXRlSW5kZXgyICE9PSBzdGFydEluZGV4ICYmIGludGVybWVkaWF0ZUluZGV4MiAhPT0gbGFzdEluZGV4KSB7XG4gICAgICAgICAgZGVjaW1hdGVkLnB1c2goe1xuICAgICAgICAgICAgLi4uZGF0YVtpbnRlcm1lZGlhdGVJbmRleDJdLFxuICAgICAgICAgICAgeDogYXZnWFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoaSA+IDAgJiYgbGFzdEluZGV4ICE9PSBzdGFydEluZGV4KSB7XG4gICAgICAgIGRlY2ltYXRlZC5wdXNoKGRhdGFbbGFzdEluZGV4XSk7XG4gICAgICB9XG4gICAgICBkZWNpbWF0ZWQucHVzaChwb2ludCk7XG4gICAgICBwcmV2WCA9IHRydW5jWDtcbiAgICAgIGNvdW50WCA9IDA7XG4gICAgICBtaW5ZID0gbWF4WSA9IHk7XG4gICAgICBtaW5JbmRleCA9IG1heEluZGV4ID0gc3RhcnRJbmRleCA9IGk7XG4gICAgfVxuICB9XG4gIHJldHVybiBkZWNpbWF0ZWQ7XG59XG5mdW5jdGlvbiBjbGVhbkRlY2ltYXRlZERhdGFzZXQoZGF0YXNldCkge1xuICBpZiAoZGF0YXNldC5fZGVjaW1hdGVkKSB7XG4gICAgY29uc3QgZGF0YSA9IGRhdGFzZXQuX2RhdGE7XG4gICAgZGVsZXRlIGRhdGFzZXQuX2RlY2ltYXRlZDtcbiAgICBkZWxldGUgZGF0YXNldC5fZGF0YTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZGF0YXNldCwgJ2RhdGEnLCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICB2YWx1ZTogZGF0YVxuICAgIH0pO1xuICB9XG59XG5mdW5jdGlvbiBjbGVhbkRlY2ltYXRlZERhdGEoY2hhcnQpIHtcbiAgY2hhcnQuZGF0YS5kYXRhc2V0cy5mb3JFYWNoKGRhdGFzZXQgPT4ge1xuICAgIGNsZWFuRGVjaW1hdGVkRGF0YXNldChkYXRhc2V0KTtcbiAgfSk7XG59XG5mdW5jdGlvbiBnZXRTdGFydEFuZENvdW50T2ZWaXNpYmxlUG9pbnRzU2ltcGxpZmllZChtZXRhLCBwb2ludHMpIHtcbiAgY29uc3QgcG9pbnRDb3VudCA9IHBvaW50cy5sZW5ndGg7XG4gIGxldCBzdGFydCA9IDA7XG4gIGxldCBjb3VudDtcbiAgY29uc3Qge1xuICAgIGlTY2FsZVxuICB9ID0gbWV0YTtcbiAgY29uc3Qge1xuICAgIG1pbixcbiAgICBtYXgsXG4gICAgbWluRGVmaW5lZCxcbiAgICBtYXhEZWZpbmVkXG4gIH0gPSBpU2NhbGUuZ2V0VXNlckJvdW5kcygpO1xuICBpZiAobWluRGVmaW5lZCkge1xuICAgIHN0YXJ0ID0gX2xpbWl0VmFsdWUoX2xvb2t1cEJ5S2V5KHBvaW50cywgaVNjYWxlLmF4aXMsIG1pbikubG8sIDAsIHBvaW50Q291bnQgLSAxKTtcbiAgfVxuICBpZiAobWF4RGVmaW5lZCkge1xuICAgIGNvdW50ID0gX2xpbWl0VmFsdWUoX2xvb2t1cEJ5S2V5KHBvaW50cywgaVNjYWxlLmF4aXMsIG1heCkuaGkgKyAxLCBzdGFydCwgcG9pbnRDb3VudCkgLSBzdGFydDtcbiAgfSBlbHNlIHtcbiAgICBjb3VudCA9IHBvaW50Q291bnQgLSBzdGFydDtcbiAgfVxuICByZXR1cm4ge1xuICAgIHN0YXJ0LFxuICAgIGNvdW50XG4gIH07XG59XG52YXIgcGx1Z2luX2RlY2ltYXRpb24gPSB7XG4gIGlkOiAnZGVjaW1hdGlvbicsXG4gIGRlZmF1bHRzOiB7XG4gICAgYWxnb3JpdGhtOiAnbWluLW1heCcsXG4gICAgZW5hYmxlZDogZmFsc2VcbiAgfSxcbiAgYmVmb3JlRWxlbWVudHNVcGRhdGU6IChjaGFydCwgYXJncywgb3B0aW9ucykgPT4ge1xuICAgIGlmICghb3B0aW9ucy5lbmFibGVkKSB7XG4gICAgICBjbGVhbkRlY2ltYXRlZERhdGEoY2hhcnQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBhdmFpbGFibGVXaWR0aCA9IGNoYXJ0LndpZHRoO1xuICAgIGNoYXJ0LmRhdGEuZGF0YXNldHMuZm9yRWFjaCgoZGF0YXNldCwgZGF0YXNldEluZGV4KSA9PiB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIF9kYXRhLFxuICAgICAgICBpbmRleEF4aXNcbiAgICAgIH0gPSBkYXRhc2V0O1xuICAgICAgY29uc3QgbWV0YSA9IGNoYXJ0LmdldERhdGFzZXRNZXRhKGRhdGFzZXRJbmRleCk7XG4gICAgICBjb25zdCBkYXRhID0gX2RhdGEgfHwgZGF0YXNldC5kYXRhO1xuICAgICAgaWYgKHJlc29sdmUoW2luZGV4QXhpcywgY2hhcnQub3B0aW9ucy5pbmRleEF4aXNdKSA9PT0gJ3knKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICghbWV0YS5jb250cm9sbGVyLnN1cHBvcnRzRGVjaW1hdGlvbikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCB4QXhpcyA9IGNoYXJ0LnNjYWxlc1ttZXRhLnhBeGlzSURdO1xuICAgICAgaWYgKHhBeGlzLnR5cGUgIT09ICdsaW5lYXInICYmIHhBeGlzLnR5cGUgIT09ICd0aW1lJykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoY2hhcnQub3B0aW9ucy5wYXJzaW5nKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGxldCB7XG4gICAgICAgIHN0YXJ0LFxuICAgICAgICBjb3VudFxuICAgICAgfSA9IGdldFN0YXJ0QW5kQ291bnRPZlZpc2libGVQb2ludHNTaW1wbGlmaWVkKG1ldGEsIGRhdGEpO1xuICAgICAgY29uc3QgdGhyZXNob2xkID0gb3B0aW9ucy50aHJlc2hvbGQgfHwgNCAqIGF2YWlsYWJsZVdpZHRoO1xuICAgICAgaWYgKGNvdW50IDw9IHRocmVzaG9sZCkge1xuICAgICAgICBjbGVhbkRlY2ltYXRlZERhdGFzZXQoZGF0YXNldCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChpc051bGxPclVuZGVmKF9kYXRhKSkge1xuICAgICAgICBkYXRhc2V0Ll9kYXRhID0gZGF0YTtcbiAgICAgICAgZGVsZXRlIGRhdGFzZXQuZGF0YTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGRhdGFzZXQsICdkYXRhJywge1xuICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2RlY2ltYXRlZDtcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNldDogZnVuY3Rpb24gKGQpIHtcbiAgICAgICAgICAgIHRoaXMuX2RhdGEgPSBkO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBsZXQgZGVjaW1hdGVkO1xuICAgICAgc3dpdGNoIChvcHRpb25zLmFsZ29yaXRobSkge1xuICAgICAgICBjYXNlICdsdHRiJzpcbiAgICAgICAgICBkZWNpbWF0ZWQgPSBsdHRiRGVjaW1hdGlvbihkYXRhLCBzdGFydCwgY291bnQsIGF2YWlsYWJsZVdpZHRoLCBvcHRpb25zKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnbWluLW1heCc6XG4gICAgICAgICAgZGVjaW1hdGVkID0gbWluTWF4RGVjaW1hdGlvbihkYXRhLCBzdGFydCwgY291bnQsIGF2YWlsYWJsZVdpZHRoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIGRlY2ltYXRpb24gYWxnb3JpdGhtICcke29wdGlvbnMuYWxnb3JpdGhtfSdgKTtcbiAgICAgIH1cbiAgICAgIGRhdGFzZXQuX2RlY2ltYXRlZCA9IGRlY2ltYXRlZDtcbiAgICB9KTtcbiAgfSxcbiAgZGVzdHJveShjaGFydCkge1xuICAgIGNsZWFuRGVjaW1hdGVkRGF0YShjaGFydCk7XG4gIH1cbn07XG5mdW5jdGlvbiBfc2VnbWVudHMobGluZSwgdGFyZ2V0LCBwcm9wZXJ0eSkge1xuICBjb25zdCBzZWdtZW50cyA9IGxpbmUuc2VnbWVudHM7XG4gIGNvbnN0IHBvaW50cyA9IGxpbmUucG9pbnRzO1xuICBjb25zdCB0cG9pbnRzID0gdGFyZ2V0LnBvaW50cztcbiAgY29uc3QgcGFydHMgPSBbXTtcbiAgZm9yIChjb25zdCBzZWdtZW50IG9mIHNlZ21lbnRzKSB7XG4gICAgbGV0IHtcbiAgICAgIHN0YXJ0LFxuICAgICAgZW5kXG4gICAgfSA9IHNlZ21lbnQ7XG4gICAgZW5kID0gX2ZpbmRTZWdtZW50RW5kKHN0YXJ0LCBlbmQsIHBvaW50cyk7XG4gICAgY29uc3QgYm91bmRzID0gX2dldEJvdW5kcyhwcm9wZXJ0eSwgcG9pbnRzW3N0YXJ0XSwgcG9pbnRzW2VuZF0sIHNlZ21lbnQubG9vcCk7XG4gICAgaWYgKCF0YXJnZXQuc2VnbWVudHMpIHtcbiAgICAgIHBhcnRzLnB1c2goe1xuICAgICAgICBzb3VyY2U6IHNlZ21lbnQsXG4gICAgICAgIHRhcmdldDogYm91bmRzLFxuICAgICAgICBzdGFydDogcG9pbnRzW3N0YXJ0XSxcbiAgICAgICAgZW5kOiBwb2ludHNbZW5kXVxuICAgICAgfSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3QgdGFyZ2V0U2VnbWVudHMgPSBfYm91bmRTZWdtZW50cyh0YXJnZXQsIGJvdW5kcyk7XG4gICAgZm9yIChjb25zdCB0Z3Qgb2YgdGFyZ2V0U2VnbWVudHMpIHtcbiAgICAgIGNvbnN0IHN1YkJvdW5kcyA9IF9nZXRCb3VuZHMocHJvcGVydHksIHRwb2ludHNbdGd0LnN0YXJ0XSwgdHBvaW50c1t0Z3QuZW5kXSwgdGd0Lmxvb3ApO1xuICAgICAgY29uc3QgZmlsbFNvdXJjZXMgPSBfYm91bmRTZWdtZW50KHNlZ21lbnQsIHBvaW50cywgc3ViQm91bmRzKTtcbiAgICAgIGZvciAoY29uc3QgZmlsbFNvdXJjZSBvZiBmaWxsU291cmNlcykge1xuICAgICAgICBwYXJ0cy5wdXNoKHtcbiAgICAgICAgICBzb3VyY2U6IGZpbGxTb3VyY2UsXG4gICAgICAgICAgdGFyZ2V0OiB0Z3QsXG4gICAgICAgICAgc3RhcnQ6IHtcbiAgICAgICAgICAgIFtwcm9wZXJ0eV06IF9nZXRFZGdlKGJvdW5kcywgc3ViQm91bmRzLCAnc3RhcnQnLCBNYXRoLm1heClcbiAgICAgICAgICB9LFxuICAgICAgICAgIGVuZDoge1xuICAgICAgICAgICAgW3Byb3BlcnR5XTogX2dldEVkZ2UoYm91bmRzLCBzdWJCb3VuZHMsICdlbmQnLCBNYXRoLm1pbilcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcGFydHM7XG59XG5mdW5jdGlvbiBfZ2V0Qm91bmRzKHByb3BlcnR5LCBmaXJzdCwgbGFzdCwgbG9vcCkge1xuICBpZiAobG9vcCkge1xuICAgIHJldHVybjtcbiAgfVxuICBsZXQgc3RhcnQgPSBmaXJzdFtwcm9wZXJ0eV07XG4gIGxldCBlbmQgPSBsYXN0W3Byb3BlcnR5XTtcbiAgaWYgKHByb3BlcnR5ID09PSAnYW5nbGUnKSB7XG4gICAgc3RhcnQgPSBfbm9ybWFsaXplQW5nbGUoc3RhcnQpO1xuICAgIGVuZCA9IF9ub3JtYWxpemVBbmdsZShlbmQpO1xuICB9XG4gIHJldHVybiB7XG4gICAgcHJvcGVydHksXG4gICAgc3RhcnQsXG4gICAgZW5kXG4gIH07XG59XG5mdW5jdGlvbiBfcG9pbnRzRnJvbVNlZ21lbnRzKGJvdW5kYXJ5LCBsaW5lKSB7XG4gIGNvbnN0IHtcbiAgICB4ID0gbnVsbCxcbiAgICB5ID0gbnVsbFxuICB9ID0gYm91bmRhcnkgfHwge307XG4gIGNvbnN0IGxpbmVQb2ludHMgPSBsaW5lLnBvaW50cztcbiAgY29uc3QgcG9pbnRzID0gW107XG4gIGxpbmUuc2VnbWVudHMuZm9yRWFjaCgoe1xuICAgIHN0YXJ0LFxuICAgIGVuZFxuICB9KSA9PiB7XG4gICAgZW5kID0gX2ZpbmRTZWdtZW50RW5kKHN0YXJ0LCBlbmQsIGxpbmVQb2ludHMpO1xuICAgIGNvbnN0IGZpcnN0ID0gbGluZVBvaW50c1tzdGFydF07XG4gICAgY29uc3QgbGFzdCA9IGxpbmVQb2ludHNbZW5kXTtcbiAgICBpZiAoeSAhPT0gbnVsbCkge1xuICAgICAgcG9pbnRzLnB1c2goe1xuICAgICAgICB4OiBmaXJzdC54LFxuICAgICAgICB5XG4gICAgICB9KTtcbiAgICAgIHBvaW50cy5wdXNoKHtcbiAgICAgICAgeDogbGFzdC54LFxuICAgICAgICB5XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKHggIT09IG51bGwpIHtcbiAgICAgIHBvaW50cy5wdXNoKHtcbiAgICAgICAgeCxcbiAgICAgICAgeTogZmlyc3QueVxuICAgICAgfSk7XG4gICAgICBwb2ludHMucHVzaCh7XG4gICAgICAgIHgsXG4gICAgICAgIHk6IGxhc3QueVxuICAgICAgfSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHBvaW50cztcbn1cbmZ1bmN0aW9uIF9maW5kU2VnbWVudEVuZChzdGFydCwgZW5kLCBwb2ludHMpIHtcbiAgZm9yICg7IGVuZCA+IHN0YXJ0OyBlbmQtLSkge1xuICAgIGNvbnN0IHBvaW50ID0gcG9pbnRzW2VuZF07XG4gICAgaWYgKCFpc05hTihwb2ludC54KSAmJiAhaXNOYU4ocG9pbnQueSkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZW5kO1xufVxuZnVuY3Rpb24gX2dldEVkZ2UoYSwgYiwgcHJvcCwgZm4pIHtcbiAgaWYgKGEgJiYgYikge1xuICAgIHJldHVybiBmbihhW3Byb3BdLCBiW3Byb3BdKTtcbiAgfVxuICByZXR1cm4gYSA/IGFbcHJvcF0gOiBiID8gYltwcm9wXSA6IDA7XG59XG5mdW5jdGlvbiBfY3JlYXRlQm91bmRhcnlMaW5lKGJvdW5kYXJ5LCBsaW5lKSB7XG4gIGxldCBwb2ludHMgPSBbXTtcbiAgbGV0IF9sb29wID0gZmFsc2U7XG4gIGlmIChpc0FycmF5KGJvdW5kYXJ5KSkge1xuICAgIF9sb29wID0gdHJ1ZTtcbiAgICBwb2ludHMgPSBib3VuZGFyeTtcbiAgfSBlbHNlIHtcbiAgICBwb2ludHMgPSBfcG9pbnRzRnJvbVNlZ21lbnRzKGJvdW5kYXJ5LCBsaW5lKTtcbiAgfVxuICByZXR1cm4gcG9pbnRzLmxlbmd0aCA/IG5ldyBMaW5lRWxlbWVudCh7XG4gICAgcG9pbnRzLFxuICAgIG9wdGlvbnM6IHtcbiAgICAgIHRlbnNpb246IDBcbiAgICB9LFxuICAgIF9sb29wLFxuICAgIF9mdWxsTG9vcDogX2xvb3BcbiAgfSkgOiBudWxsO1xufVxuZnVuY3Rpb24gX3Nob3VsZEFwcGx5RmlsbChzb3VyY2UpIHtcbiAgcmV0dXJuIHNvdXJjZSAmJiBzb3VyY2UuZmlsbCAhPT0gZmFsc2U7XG59XG5mdW5jdGlvbiBfcmVzb2x2ZVRhcmdldChzb3VyY2VzLCBpbmRleCwgcHJvcGFnYXRlKSB7XG4gIGNvbnN0IHNvdXJjZSA9IHNvdXJjZXNbaW5kZXhdO1xuICBsZXQgZmlsbCA9IHNvdXJjZS5maWxsO1xuICBjb25zdCB2aXNpdGVkID0gW2luZGV4XTtcbiAgbGV0IHRhcmdldDtcbiAgaWYgKCFwcm9wYWdhdGUpIHtcbiAgICByZXR1cm4gZmlsbDtcbiAgfVxuICB3aGlsZSAoZmlsbCAhPT0gZmFsc2UgJiYgdmlzaXRlZC5pbmRleE9mKGZpbGwpID09PSAtMSkge1xuICAgIGlmICghaXNOdW1iZXJGaW5pdGUoZmlsbCkpIHtcbiAgICAgIHJldHVybiBmaWxsO1xuICAgIH1cbiAgICB0YXJnZXQgPSBzb3VyY2VzW2ZpbGxdO1xuICAgIGlmICghdGFyZ2V0KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmICh0YXJnZXQudmlzaWJsZSkge1xuICAgICAgcmV0dXJuIGZpbGw7XG4gICAgfVxuICAgIHZpc2l0ZWQucHVzaChmaWxsKTtcbiAgICBmaWxsID0gdGFyZ2V0LmZpbGw7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gX2RlY29kZUZpbGwobGluZSwgaW5kZXgsIGNvdW50KSB7XG4gIGNvbnN0IGZpbGwgPSBwYXJzZUZpbGxPcHRpb24obGluZSk7XG4gIGlmIChpc09iamVjdChmaWxsKSkge1xuICAgIHJldHVybiBpc05hTihmaWxsLnZhbHVlKSA/IGZhbHNlIDogZmlsbDtcbiAgfVxuICBsZXQgdGFyZ2V0ID0gcGFyc2VGbG9hdChmaWxsKTtcbiAgaWYgKGlzTnVtYmVyRmluaXRlKHRhcmdldCkgJiYgTWF0aC5mbG9vcih0YXJnZXQpID09PSB0YXJnZXQpIHtcbiAgICByZXR1cm4gZGVjb2RlVGFyZ2V0SW5kZXgoZmlsbFswXSwgaW5kZXgsIHRhcmdldCwgY291bnQpO1xuICB9XG4gIHJldHVybiBbJ29yaWdpbicsICdzdGFydCcsICdlbmQnLCAnc3RhY2snLCAnc2hhcGUnXS5pbmRleE9mKGZpbGwpID49IDAgJiYgZmlsbDtcbn1cbmZ1bmN0aW9uIGRlY29kZVRhcmdldEluZGV4KGZpcnN0Q2gsIGluZGV4LCB0YXJnZXQsIGNvdW50KSB7XG4gIGlmIChmaXJzdENoID09PSAnLScgfHwgZmlyc3RDaCA9PT0gJysnKSB7XG4gICAgdGFyZ2V0ID0gaW5kZXggKyB0YXJnZXQ7XG4gIH1cbiAgaWYgKHRhcmdldCA9PT0gaW5kZXggfHwgdGFyZ2V0IDwgMCB8fCB0YXJnZXQgPj0gY291bnQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHRhcmdldDtcbn1cbmZ1bmN0aW9uIF9nZXRUYXJnZXRQaXhlbChmaWxsLCBzY2FsZSkge1xuICBsZXQgcGl4ZWwgPSBudWxsO1xuICBpZiAoZmlsbCA9PT0gJ3N0YXJ0Jykge1xuICAgIHBpeGVsID0gc2NhbGUuYm90dG9tO1xuICB9IGVsc2UgaWYgKGZpbGwgPT09ICdlbmQnKSB7XG4gICAgcGl4ZWwgPSBzY2FsZS50b3A7XG4gIH0gZWxzZSBpZiAoaXNPYmplY3QoZmlsbCkpIHtcbiAgICBwaXhlbCA9IHNjYWxlLmdldFBpeGVsRm9yVmFsdWUoZmlsbC52YWx1ZSk7XG4gIH0gZWxzZSBpZiAoc2NhbGUuZ2V0QmFzZVBpeGVsKSB7XG4gICAgcGl4ZWwgPSBzY2FsZS5nZXRCYXNlUGl4ZWwoKTtcbiAgfVxuICByZXR1cm4gcGl4ZWw7XG59XG5mdW5jdGlvbiBfZ2V0VGFyZ2V0VmFsdWUoZmlsbCwgc2NhbGUsIHN0YXJ0VmFsdWUpIHtcbiAgbGV0IHZhbHVlO1xuICBpZiAoZmlsbCA9PT0gJ3N0YXJ0Jykge1xuICAgIHZhbHVlID0gc3RhcnRWYWx1ZTtcbiAgfSBlbHNlIGlmIChmaWxsID09PSAnZW5kJykge1xuICAgIHZhbHVlID0gc2NhbGUub3B0aW9ucy5yZXZlcnNlID8gc2NhbGUubWluIDogc2NhbGUubWF4O1xuICB9IGVsc2UgaWYgKGlzT2JqZWN0KGZpbGwpKSB7XG4gICAgdmFsdWUgPSBmaWxsLnZhbHVlO1xuICB9IGVsc2Uge1xuICAgIHZhbHVlID0gc2NhbGUuZ2V0QmFzZVZhbHVlKCk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuZnVuY3Rpb24gcGFyc2VGaWxsT3B0aW9uKGxpbmUpIHtcbiAgY29uc3Qgb3B0aW9ucyA9IGxpbmUub3B0aW9ucztcbiAgY29uc3QgZmlsbE9wdGlvbiA9IG9wdGlvbnMuZmlsbDtcbiAgbGV0IGZpbGwgPSB2YWx1ZU9yRGVmYXVsdChmaWxsT3B0aW9uICYmIGZpbGxPcHRpb24udGFyZ2V0LCBmaWxsT3B0aW9uKTtcbiAgaWYgKGZpbGwgPT09IHVuZGVmaW5lZCkge1xuICAgIGZpbGwgPSAhIW9wdGlvbnMuYmFja2dyb3VuZENvbG9yO1xuICB9XG4gIGlmIChmaWxsID09PSBmYWxzZSB8fCBmaWxsID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChmaWxsID09PSB0cnVlKSB7XG4gICAgcmV0dXJuICdvcmlnaW4nO1xuICB9XG4gIHJldHVybiBmaWxsO1xufVxuZnVuY3Rpb24gX2J1aWxkU3RhY2tMaW5lKHNvdXJjZSkge1xuICBjb25zdCB7XG4gICAgc2NhbGUsXG4gICAgaW5kZXgsXG4gICAgbGluZVxuICB9ID0gc291cmNlO1xuICBjb25zdCBwb2ludHMgPSBbXTtcbiAgY29uc3Qgc2VnbWVudHMgPSBsaW5lLnNlZ21lbnRzO1xuICBjb25zdCBzb3VyY2VQb2ludHMgPSBsaW5lLnBvaW50cztcbiAgY29uc3QgbGluZXNCZWxvdyA9IGdldExpbmVzQmVsb3coc2NhbGUsIGluZGV4KTtcbiAgbGluZXNCZWxvdy5wdXNoKF9jcmVhdGVCb3VuZGFyeUxpbmUoe1xuICAgIHg6IG51bGwsXG4gICAgeTogc2NhbGUuYm90dG9tXG4gIH0sIGxpbmUpKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZWdtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IHNlZ21lbnQgPSBzZWdtZW50c1tpXTtcbiAgICBmb3IgKGxldCBqID0gc2VnbWVudC5zdGFydDsgaiA8PSBzZWdtZW50LmVuZDsgaisrKSB7XG4gICAgICBhZGRQb2ludHNCZWxvdyhwb2ludHMsIHNvdXJjZVBvaW50c1tqXSwgbGluZXNCZWxvdyk7XG4gICAgfVxuICB9XG4gIHJldHVybiBuZXcgTGluZUVsZW1lbnQoe1xuICAgIHBvaW50cyxcbiAgICBvcHRpb25zOiB7fVxuICB9KTtcbn1cbmZ1bmN0aW9uIGdldExpbmVzQmVsb3coc2NhbGUsIGluZGV4KSB7XG4gIGNvbnN0IGJlbG93ID0gW107XG4gIGNvbnN0IG1ldGFzID0gc2NhbGUuZ2V0TWF0Y2hpbmdWaXNpYmxlTWV0YXMoJ2xpbmUnKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBtZXRhcy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IG1ldGEgPSBtZXRhc1tpXTtcbiAgICBpZiAobWV0YS5pbmRleCA9PT0gaW5kZXgpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBpZiAoIW1ldGEuaGlkZGVuKSB7XG4gICAgICBiZWxvdy51bnNoaWZ0KG1ldGEuZGF0YXNldCk7XG4gICAgfVxuICB9XG4gIHJldHVybiBiZWxvdztcbn1cbmZ1bmN0aW9uIGFkZFBvaW50c0JlbG93KHBvaW50cywgc291cmNlUG9pbnQsIGxpbmVzQmVsb3cpIHtcbiAgY29uc3QgcG9zdHBvbmVkID0gW107XG4gIGZvciAobGV0IGogPSAwOyBqIDwgbGluZXNCZWxvdy5sZW5ndGg7IGorKykge1xuICAgIGNvbnN0IGxpbmUgPSBsaW5lc0JlbG93W2pdO1xuICAgIGNvbnN0IHtcbiAgICAgIGZpcnN0LFxuICAgICAgbGFzdCxcbiAgICAgIHBvaW50XG4gICAgfSA9IGZpbmRQb2ludChsaW5lLCBzb3VyY2VQb2ludCwgJ3gnKTtcbiAgICBpZiAoIXBvaW50IHx8IGZpcnN0ICYmIGxhc3QpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoZmlyc3QpIHtcbiAgICAgIHBvc3Rwb25lZC51bnNoaWZ0KHBvaW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcG9pbnRzLnB1c2gocG9pbnQpO1xuICAgICAgaWYgKCFsYXN0KSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBwb2ludHMucHVzaCguLi5wb3N0cG9uZWQpO1xufVxuZnVuY3Rpb24gZmluZFBvaW50KGxpbmUsIHNvdXJjZVBvaW50LCBwcm9wZXJ0eSkge1xuICBjb25zdCBwb2ludCA9IGxpbmUuaW50ZXJwb2xhdGUoc291cmNlUG9pbnQsIHByb3BlcnR5KTtcbiAgaWYgKCFwb2ludCkge1xuICAgIHJldHVybiB7fTtcbiAgfVxuICBjb25zdCBwb2ludFZhbHVlID0gcG9pbnRbcHJvcGVydHldO1xuICBjb25zdCBzZWdtZW50cyA9IGxpbmUuc2VnbWVudHM7XG4gIGNvbnN0IGxpbmVQb2ludHMgPSBsaW5lLnBvaW50cztcbiAgbGV0IGZpcnN0ID0gZmFsc2U7XG4gIGxldCBsYXN0ID0gZmFsc2U7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc2VnbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBzZWdtZW50ID0gc2VnbWVudHNbaV07XG4gICAgY29uc3QgZmlyc3RWYWx1ZSA9IGxpbmVQb2ludHNbc2VnbWVudC5zdGFydF1bcHJvcGVydHldO1xuICAgIGNvbnN0IGxhc3RWYWx1ZSA9IGxpbmVQb2ludHNbc2VnbWVudC5lbmRdW3Byb3BlcnR5XTtcbiAgICBpZiAoX2lzQmV0d2Vlbihwb2ludFZhbHVlLCBmaXJzdFZhbHVlLCBsYXN0VmFsdWUpKSB7XG4gICAgICBmaXJzdCA9IHBvaW50VmFsdWUgPT09IGZpcnN0VmFsdWU7XG4gICAgICBsYXN0ID0gcG9pbnRWYWx1ZSA9PT0gbGFzdFZhbHVlO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiB7XG4gICAgZmlyc3QsXG4gICAgbGFzdCxcbiAgICBwb2ludFxuICB9O1xufVxuY2xhc3Mgc2ltcGxlQXJjIHtcbiAgY29uc3RydWN0b3Iob3B0cykge1xuICAgIHRoaXMueCA9IG9wdHMueDtcbiAgICB0aGlzLnkgPSBvcHRzLnk7XG4gICAgdGhpcy5yYWRpdXMgPSBvcHRzLnJhZGl1cztcbiAgfVxuICBwYXRoU2VnbWVudChjdHgsIGJvdW5kcywgb3B0cykge1xuICAgIGNvbnN0IHtcbiAgICAgIHgsXG4gICAgICB5LFxuICAgICAgcmFkaXVzXG4gICAgfSA9IHRoaXM7XG4gICAgYm91bmRzID0gYm91bmRzIHx8IHtcbiAgICAgIHN0YXJ0OiAwLFxuICAgICAgZW5kOiBUQVVcbiAgICB9O1xuICAgIGN0eC5hcmMoeCwgeSwgcmFkaXVzLCBib3VuZHMuZW5kLCBib3VuZHMuc3RhcnQsIHRydWUpO1xuICAgIHJldHVybiAhb3B0cy5ib3VuZHM7XG4gIH1cbiAgaW50ZXJwb2xhdGUocG9pbnQpIHtcbiAgICBjb25zdCB7XG4gICAgICB4LFxuICAgICAgeSxcbiAgICAgIHJhZGl1c1xuICAgIH0gPSB0aGlzO1xuICAgIGNvbnN0IGFuZ2xlID0gcG9pbnQuYW5nbGU7XG4gICAgcmV0dXJuIHtcbiAgICAgIHg6IHggKyBNYXRoLmNvcyhhbmdsZSkgKiByYWRpdXMsXG4gICAgICB5OiB5ICsgTWF0aC5zaW4oYW5nbGUpICogcmFkaXVzLFxuICAgICAgYW5nbGVcbiAgICB9O1xuICB9XG59XG5mdW5jdGlvbiBfZ2V0VGFyZ2V0KHNvdXJjZSkge1xuICBjb25zdCB7XG4gICAgY2hhcnQsXG4gICAgZmlsbCxcbiAgICBsaW5lXG4gIH0gPSBzb3VyY2U7XG4gIGlmIChpc051bWJlckZpbml0ZShmaWxsKSkge1xuICAgIHJldHVybiBnZXRMaW5lQnlJbmRleChjaGFydCwgZmlsbCk7XG4gIH1cbiAgaWYgKGZpbGwgPT09ICdzdGFjaycpIHtcbiAgICByZXR1cm4gX2J1aWxkU3RhY2tMaW5lKHNvdXJjZSk7XG4gIH1cbiAgaWYgKGZpbGwgPT09ICdzaGFwZScpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBjb25zdCBib3VuZGFyeSA9IGNvbXB1dGVCb3VuZGFyeShzb3VyY2UpO1xuICBpZiAoYm91bmRhcnkgaW5zdGFuY2VvZiBzaW1wbGVBcmMpIHtcbiAgICByZXR1cm4gYm91bmRhcnk7XG4gIH1cbiAgcmV0dXJuIF9jcmVhdGVCb3VuZGFyeUxpbmUoYm91bmRhcnksIGxpbmUpO1xufVxuZnVuY3Rpb24gZ2V0TGluZUJ5SW5kZXgoY2hhcnQsIGluZGV4KSB7XG4gIGNvbnN0IG1ldGEgPSBjaGFydC5nZXREYXRhc2V0TWV0YShpbmRleCk7XG4gIGNvbnN0IHZpc2libGUgPSBtZXRhICYmIGNoYXJ0LmlzRGF0YXNldFZpc2libGUoaW5kZXgpO1xuICByZXR1cm4gdmlzaWJsZSA/IG1ldGEuZGF0YXNldCA6IG51bGw7XG59XG5mdW5jdGlvbiBjb21wdXRlQm91bmRhcnkoc291cmNlKSB7XG4gIGNvbnN0IHNjYWxlID0gc291cmNlLnNjYWxlIHx8IHt9O1xuICBpZiAoc2NhbGUuZ2V0UG9pbnRQb3NpdGlvbkZvclZhbHVlKSB7XG4gICAgcmV0dXJuIGNvbXB1dGVDaXJjdWxhckJvdW5kYXJ5KHNvdXJjZSk7XG4gIH1cbiAgcmV0dXJuIGNvbXB1dGVMaW5lYXJCb3VuZGFyeShzb3VyY2UpO1xufVxuZnVuY3Rpb24gY29tcHV0ZUxpbmVhckJvdW5kYXJ5KHNvdXJjZSkge1xuICBjb25zdCB7XG4gICAgc2NhbGUgPSB7fSxcbiAgICBmaWxsXG4gIH0gPSBzb3VyY2U7XG4gIGNvbnN0IHBpeGVsID0gX2dldFRhcmdldFBpeGVsKGZpbGwsIHNjYWxlKTtcbiAgaWYgKGlzTnVtYmVyRmluaXRlKHBpeGVsKSkge1xuICAgIGNvbnN0IGhvcml6b250YWwgPSBzY2FsZS5pc0hvcml6b250YWwoKTtcbiAgICByZXR1cm4ge1xuICAgICAgeDogaG9yaXpvbnRhbCA/IHBpeGVsIDogbnVsbCxcbiAgICAgIHk6IGhvcml6b250YWwgPyBudWxsIDogcGl4ZWxcbiAgICB9O1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuZnVuY3Rpb24gY29tcHV0ZUNpcmN1bGFyQm91bmRhcnkoc291cmNlKSB7XG4gIGNvbnN0IHtcbiAgICBzY2FsZSxcbiAgICBmaWxsXG4gIH0gPSBzb3VyY2U7XG4gIGNvbnN0IG9wdGlvbnMgPSBzY2FsZS5vcHRpb25zO1xuICBjb25zdCBsZW5ndGggPSBzY2FsZS5nZXRMYWJlbHMoKS5sZW5ndGg7XG4gIGNvbnN0IHN0YXJ0ID0gb3B0aW9ucy5yZXZlcnNlID8gc2NhbGUubWF4IDogc2NhbGUubWluO1xuICBjb25zdCB2YWx1ZSA9IF9nZXRUYXJnZXRWYWx1ZShmaWxsLCBzY2FsZSwgc3RhcnQpO1xuICBjb25zdCB0YXJnZXQgPSBbXTtcbiAgaWYgKG9wdGlvbnMuZ3JpZC5jaXJjdWxhcikge1xuICAgIGNvbnN0IGNlbnRlciA9IHNjYWxlLmdldFBvaW50UG9zaXRpb25Gb3JWYWx1ZSgwLCBzdGFydCk7XG4gICAgcmV0dXJuIG5ldyBzaW1wbGVBcmMoe1xuICAgICAgeDogY2VudGVyLngsXG4gICAgICB5OiBjZW50ZXIueSxcbiAgICAgIHJhZGl1czogc2NhbGUuZ2V0RGlzdGFuY2VGcm9tQ2VudGVyRm9yVmFsdWUodmFsdWUpXG4gICAgfSk7XG4gIH1cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgIHRhcmdldC5wdXNoKHNjYWxlLmdldFBvaW50UG9zaXRpb25Gb3JWYWx1ZShpLCB2YWx1ZSkpO1xuICB9XG4gIHJldHVybiB0YXJnZXQ7XG59XG5mdW5jdGlvbiBfZHJhd2ZpbGwoY3R4LCBzb3VyY2UsIGFyZWEpIHtcbiAgY29uc3QgdGFyZ2V0ID0gX2dldFRhcmdldChzb3VyY2UpO1xuICBjb25zdCB7XG4gICAgY2hhcnQsXG4gICAgaW5kZXgsXG4gICAgbGluZSxcbiAgICBzY2FsZSxcbiAgICBheGlzXG4gIH0gPSBzb3VyY2U7XG4gIGNvbnN0IGxpbmVPcHRzID0gbGluZS5vcHRpb25zO1xuICBjb25zdCBmaWxsT3B0aW9uID0gbGluZU9wdHMuZmlsbDtcbiAgY29uc3QgY29sb3IgPSBsaW5lT3B0cy5iYWNrZ3JvdW5kQ29sb3I7XG4gIGNvbnN0IHtcbiAgICBhYm92ZSA9IGNvbG9yLFxuICAgIGJlbG93ID0gY29sb3JcbiAgfSA9IGZpbGxPcHRpb24gfHwge307XG4gIGNvbnN0IG1ldGEgPSBjaGFydC5nZXREYXRhc2V0TWV0YShpbmRleCk7XG4gIGNvbnN0IGNsaXAgPSBnZXREYXRhc2V0Q2xpcEFyZWEoY2hhcnQsIG1ldGEpO1xuICBpZiAodGFyZ2V0ICYmIGxpbmUucG9pbnRzLmxlbmd0aCkge1xuICAgIGNsaXBBcmVhKGN0eCwgYXJlYSk7XG4gICAgZG9GaWxsKGN0eCwge1xuICAgICAgbGluZSxcbiAgICAgIHRhcmdldCxcbiAgICAgIGFib3ZlLFxuICAgICAgYmVsb3csXG4gICAgICBhcmVhLFxuICAgICAgc2NhbGUsXG4gICAgICBheGlzLFxuICAgICAgY2xpcFxuICAgIH0pO1xuICAgIHVuY2xpcEFyZWEoY3R4KTtcbiAgfVxufVxuZnVuY3Rpb24gZG9GaWxsKGN0eCwgY2ZnKSB7XG4gIGNvbnN0IHtcbiAgICBsaW5lLFxuICAgIHRhcmdldCxcbiAgICBhYm92ZSxcbiAgICBiZWxvdyxcbiAgICBhcmVhLFxuICAgIHNjYWxlLFxuICAgIGNsaXBcbiAgfSA9IGNmZztcbiAgY29uc3QgcHJvcGVydHkgPSBsaW5lLl9sb29wID8gJ2FuZ2xlJyA6IGNmZy5heGlzO1xuICBjdHguc2F2ZSgpO1xuICBsZXQgZmlsbENvbG9yID0gYmVsb3c7XG4gIGlmIChiZWxvdyAhPT0gYWJvdmUpIHtcbiAgICBpZiAocHJvcGVydHkgPT09ICd4Jykge1xuICAgICAgY2xpcFZlcnRpY2FsKGN0eCwgdGFyZ2V0LCBhcmVhLnRvcCk7XG4gICAgICBmaWxsKGN0eCwge1xuICAgICAgICBsaW5lLFxuICAgICAgICB0YXJnZXQsXG4gICAgICAgIGNvbG9yOiBhYm92ZSxcbiAgICAgICAgc2NhbGUsXG4gICAgICAgIHByb3BlcnR5LFxuICAgICAgICBjbGlwXG4gICAgICB9KTtcbiAgICAgIGN0eC5yZXN0b3JlKCk7XG4gICAgICBjdHguc2F2ZSgpO1xuICAgICAgY2xpcFZlcnRpY2FsKGN0eCwgdGFyZ2V0LCBhcmVhLmJvdHRvbSk7XG4gICAgfSBlbHNlIGlmIChwcm9wZXJ0eSA9PT0gJ3knKSB7XG4gICAgICBjbGlwSG9yaXpvbnRhbChjdHgsIHRhcmdldCwgYXJlYS5sZWZ0KTtcbiAgICAgIGZpbGwoY3R4LCB7XG4gICAgICAgIGxpbmUsXG4gICAgICAgIHRhcmdldCxcbiAgICAgICAgY29sb3I6IGJlbG93LFxuICAgICAgICBzY2FsZSxcbiAgICAgICAgcHJvcGVydHksXG4gICAgICAgIGNsaXBcbiAgICAgIH0pO1xuICAgICAgY3R4LnJlc3RvcmUoKTtcbiAgICAgIGN0eC5zYXZlKCk7XG4gICAgICBjbGlwSG9yaXpvbnRhbChjdHgsIHRhcmdldCwgYXJlYS5yaWdodCk7XG4gICAgICBmaWxsQ29sb3IgPSBhYm92ZTtcbiAgICB9XG4gIH1cbiAgZmlsbChjdHgsIHtcbiAgICBsaW5lLFxuICAgIHRhcmdldCxcbiAgICBjb2xvcjogZmlsbENvbG9yLFxuICAgIHNjYWxlLFxuICAgIHByb3BlcnR5LFxuICAgIGNsaXBcbiAgfSk7XG4gIGN0eC5yZXN0b3JlKCk7XG59XG5mdW5jdGlvbiBjbGlwVmVydGljYWwoY3R4LCB0YXJnZXQsIGNsaXBZKSB7XG4gIGNvbnN0IHtcbiAgICBzZWdtZW50cyxcbiAgICBwb2ludHNcbiAgfSA9IHRhcmdldDtcbiAgbGV0IGZpcnN0ID0gdHJ1ZTtcbiAgbGV0IGxpbmVMb29wID0gZmFsc2U7XG4gIGN0eC5iZWdpblBhdGgoKTtcbiAgZm9yIChjb25zdCBzZWdtZW50IG9mIHNlZ21lbnRzKSB7XG4gICAgY29uc3Qge1xuICAgICAgc3RhcnQsXG4gICAgICBlbmRcbiAgICB9ID0gc2VnbWVudDtcbiAgICBjb25zdCBmaXJzdFBvaW50ID0gcG9pbnRzW3N0YXJ0XTtcbiAgICBjb25zdCBsYXN0UG9pbnQgPSBwb2ludHNbX2ZpbmRTZWdtZW50RW5kKHN0YXJ0LCBlbmQsIHBvaW50cyldO1xuICAgIGlmIChmaXJzdCkge1xuICAgICAgY3R4Lm1vdmVUbyhmaXJzdFBvaW50LngsIGZpcnN0UG9pbnQueSk7XG4gICAgICBmaXJzdCA9IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICBjdHgubGluZVRvKGZpcnN0UG9pbnQueCwgY2xpcFkpO1xuICAgICAgY3R4LmxpbmVUbyhmaXJzdFBvaW50LngsIGZpcnN0UG9pbnQueSk7XG4gICAgfVxuICAgIGxpbmVMb29wID0gISF0YXJnZXQucGF0aFNlZ21lbnQoY3R4LCBzZWdtZW50LCB7XG4gICAgICBtb3ZlOiBsaW5lTG9vcFxuICAgIH0pO1xuICAgIGlmIChsaW5lTG9vcCkge1xuICAgICAgY3R4LmNsb3NlUGF0aCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjdHgubGluZVRvKGxhc3RQb2ludC54LCBjbGlwWSk7XG4gICAgfVxuICB9XG4gIGN0eC5saW5lVG8odGFyZ2V0LmZpcnN0KCkueCwgY2xpcFkpO1xuICBjdHguY2xvc2VQYXRoKCk7XG4gIGN0eC5jbGlwKCk7XG59XG5mdW5jdGlvbiBjbGlwSG9yaXpvbnRhbChjdHgsIHRhcmdldCwgY2xpcFgpIHtcbiAgY29uc3Qge1xuICAgIHNlZ21lbnRzLFxuICAgIHBvaW50c1xuICB9ID0gdGFyZ2V0O1xuICBsZXQgZmlyc3QgPSB0cnVlO1xuICBsZXQgbGluZUxvb3AgPSBmYWxzZTtcbiAgY3R4LmJlZ2luUGF0aCgpO1xuICBmb3IgKGNvbnN0IHNlZ21lbnQgb2Ygc2VnbWVudHMpIHtcbiAgICBjb25zdCB7XG4gICAgICBzdGFydCxcbiAgICAgIGVuZFxuICAgIH0gPSBzZWdtZW50O1xuICAgIGNvbnN0IGZpcnN0UG9pbnQgPSBwb2ludHNbc3RhcnRdO1xuICAgIGNvbnN0IGxhc3RQb2ludCA9IHBvaW50c1tfZmluZFNlZ21lbnRFbmQoc3RhcnQsIGVuZCwgcG9pbnRzKV07XG4gICAgaWYgKGZpcnN0KSB7XG4gICAgICBjdHgubW92ZVRvKGZpcnN0UG9pbnQueCwgZmlyc3RQb2ludC55KTtcbiAgICAgIGZpcnN0ID0gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIGN0eC5saW5lVG8oY2xpcFgsIGZpcnN0UG9pbnQueSk7XG4gICAgICBjdHgubGluZVRvKGZpcnN0UG9pbnQueCwgZmlyc3RQb2ludC55KTtcbiAgICB9XG4gICAgbGluZUxvb3AgPSAhIXRhcmdldC5wYXRoU2VnbWVudChjdHgsIHNlZ21lbnQsIHtcbiAgICAgIG1vdmU6IGxpbmVMb29wXG4gICAgfSk7XG4gICAgaWYgKGxpbmVMb29wKSB7XG4gICAgICBjdHguY2xvc2VQYXRoKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGN0eC5saW5lVG8oY2xpcFgsIGxhc3RQb2ludC55KTtcbiAgICB9XG4gIH1cbiAgY3R4LmxpbmVUbyhjbGlwWCwgdGFyZ2V0LmZpcnN0KCkueSk7XG4gIGN0eC5jbG9zZVBhdGgoKTtcbiAgY3R4LmNsaXAoKTtcbn1cbmZ1bmN0aW9uIGZpbGwoY3R4LCBjZmcpIHtcbiAgY29uc3Qge1xuICAgIGxpbmUsXG4gICAgdGFyZ2V0LFxuICAgIHByb3BlcnR5LFxuICAgIGNvbG9yLFxuICAgIHNjYWxlLFxuICAgIGNsaXBcbiAgfSA9IGNmZztcbiAgY29uc3Qgc2VnbWVudHMgPSBfc2VnbWVudHMobGluZSwgdGFyZ2V0LCBwcm9wZXJ0eSk7XG4gIGZvciAoY29uc3Qge1xuICAgIHNvdXJjZTogc3JjLFxuICAgIHRhcmdldDogdGd0LFxuICAgIHN0YXJ0LFxuICAgIGVuZFxuICB9IG9mIHNlZ21lbnRzKSB7XG4gICAgY29uc3Qge1xuICAgICAgc3R5bGU6IHtcbiAgICAgICAgYmFja2dyb3VuZENvbG9yID0gY29sb3JcbiAgICAgIH0gPSB7fVxuICAgIH0gPSBzcmM7XG4gICAgY29uc3Qgbm90U2hhcGUgPSB0YXJnZXQgIT09IHRydWU7XG4gICAgY3R4LnNhdmUoKTtcbiAgICBjdHguZmlsbFN0eWxlID0gYmFja2dyb3VuZENvbG9yO1xuICAgIGNsaXBCb3VuZHMoY3R4LCBzY2FsZSwgY2xpcCwgbm90U2hhcGUgJiYgX2dldEJvdW5kcyhwcm9wZXJ0eSwgc3RhcnQsIGVuZCkpO1xuICAgIGN0eC5iZWdpblBhdGgoKTtcbiAgICBjb25zdCBsaW5lTG9vcCA9ICEhbGluZS5wYXRoU2VnbWVudChjdHgsIHNyYyk7XG4gICAgbGV0IGxvb3A7XG4gICAgaWYgKG5vdFNoYXBlKSB7XG4gICAgICBpZiAobGluZUxvb3ApIHtcbiAgICAgICAgY3R4LmNsb3NlUGF0aCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW50ZXJwb2xhdGVkTGluZVRvKGN0eCwgdGFyZ2V0LCBlbmQsIHByb3BlcnR5KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHRhcmdldExvb3AgPSAhIXRhcmdldC5wYXRoU2VnbWVudChjdHgsIHRndCwge1xuICAgICAgICBtb3ZlOiBsaW5lTG9vcCxcbiAgICAgICAgcmV2ZXJzZTogdHJ1ZVxuICAgICAgfSk7XG4gICAgICBsb29wID0gbGluZUxvb3AgJiYgdGFyZ2V0TG9vcDtcbiAgICAgIGlmICghbG9vcCkge1xuICAgICAgICBpbnRlcnBvbGF0ZWRMaW5lVG8oY3R4LCB0YXJnZXQsIHN0YXJ0LCBwcm9wZXJ0eSk7XG4gICAgICB9XG4gICAgfVxuICAgIGN0eC5jbG9zZVBhdGgoKTtcbiAgICBjdHguZmlsbChsb29wID8gJ2V2ZW5vZGQnIDogJ25vbnplcm8nKTtcbiAgICBjdHgucmVzdG9yZSgpO1xuICB9XG59XG5mdW5jdGlvbiBjbGlwQm91bmRzKGN0eCwgc2NhbGUsIGNsaXAsIGJvdW5kcykge1xuICBjb25zdCBjaGFydEFyZWEgPSBzY2FsZS5jaGFydC5jaGFydEFyZWE7XG4gIGNvbnN0IHtcbiAgICBwcm9wZXJ0eSxcbiAgICBzdGFydCxcbiAgICBlbmRcbiAgfSA9IGJvdW5kcyB8fCB7fTtcbiAgaWYgKHByb3BlcnR5ID09PSAneCcgfHwgcHJvcGVydHkgPT09ICd5Jykge1xuICAgIGxldCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b207XG4gICAgaWYgKHByb3BlcnR5ID09PSAneCcpIHtcbiAgICAgIGxlZnQgPSBzdGFydDtcbiAgICAgIHRvcCA9IGNoYXJ0QXJlYS50b3A7XG4gICAgICByaWdodCA9IGVuZDtcbiAgICAgIGJvdHRvbSA9IGNoYXJ0QXJlYS5ib3R0b207XG4gICAgfSBlbHNlIHtcbiAgICAgIGxlZnQgPSBjaGFydEFyZWEubGVmdDtcbiAgICAgIHRvcCA9IHN0YXJ0O1xuICAgICAgcmlnaHQgPSBjaGFydEFyZWEucmlnaHQ7XG4gICAgICBib3R0b20gPSBlbmQ7XG4gICAgfVxuICAgIGN0eC5iZWdpblBhdGgoKTtcbiAgICBpZiAoY2xpcCkge1xuICAgICAgbGVmdCA9IE1hdGgubWF4KGxlZnQsIGNsaXAubGVmdCk7XG4gICAgICByaWdodCA9IE1hdGgubWluKHJpZ2h0LCBjbGlwLnJpZ2h0KTtcbiAgICAgIHRvcCA9IE1hdGgubWF4KHRvcCwgY2xpcC50b3ApO1xuICAgICAgYm90dG9tID0gTWF0aC5taW4oYm90dG9tLCBjbGlwLmJvdHRvbSk7XG4gICAgfVxuICAgIGN0eC5yZWN0KGxlZnQsIHRvcCwgcmlnaHQgLSBsZWZ0LCBib3R0b20gLSB0b3ApO1xuICAgIGN0eC5jbGlwKCk7XG4gIH1cbn1cbmZ1bmN0aW9uIGludGVycG9sYXRlZExpbmVUbyhjdHgsIHRhcmdldCwgcG9pbnQsIHByb3BlcnR5KSB7XG4gIGNvbnN0IGludGVycG9sYXRlZFBvaW50ID0gdGFyZ2V0LmludGVycG9sYXRlKHBvaW50LCBwcm9wZXJ0eSk7XG4gIGlmIChpbnRlcnBvbGF0ZWRQb2ludCkge1xuICAgIGN0eC5saW5lVG8oaW50ZXJwb2xhdGVkUG9pbnQueCwgaW50ZXJwb2xhdGVkUG9pbnQueSk7XG4gIH1cbn1cbnZhciBpbmRleCA9IHtcbiAgaWQ6ICdmaWxsZXInLFxuICBhZnRlckRhdGFzZXRzVXBkYXRlKGNoYXJ0LCBfYXJncywgb3B0aW9ucykge1xuICAgIGNvbnN0IGNvdW50ID0gKGNoYXJ0LmRhdGEuZGF0YXNldHMgfHwgW10pLmxlbmd0aDtcbiAgICBjb25zdCBzb3VyY2VzID0gW107XG4gICAgbGV0IG1ldGEsIGksIGxpbmUsIHNvdXJjZTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7ICsraSkge1xuICAgICAgbWV0YSA9IGNoYXJ0LmdldERhdGFzZXRNZXRhKGkpO1xuICAgICAgbGluZSA9IG1ldGEuZGF0YXNldDtcbiAgICAgIHNvdXJjZSA9IG51bGw7XG4gICAgICBpZiAobGluZSAmJiBsaW5lLm9wdGlvbnMgJiYgbGluZSBpbnN0YW5jZW9mIExpbmVFbGVtZW50KSB7XG4gICAgICAgIHNvdXJjZSA9IHtcbiAgICAgICAgICB2aXNpYmxlOiBjaGFydC5pc0RhdGFzZXRWaXNpYmxlKGkpLFxuICAgICAgICAgIGluZGV4OiBpLFxuICAgICAgICAgIGZpbGw6IF9kZWNvZGVGaWxsKGxpbmUsIGksIGNvdW50KSxcbiAgICAgICAgICBjaGFydCxcbiAgICAgICAgICBheGlzOiBtZXRhLmNvbnRyb2xsZXIub3B0aW9ucy5pbmRleEF4aXMsXG4gICAgICAgICAgc2NhbGU6IG1ldGEudlNjYWxlLFxuICAgICAgICAgIGxpbmVcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIG1ldGEuJGZpbGxlciA9IHNvdXJjZTtcbiAgICAgIHNvdXJjZXMucHVzaChzb3VyY2UpO1xuICAgIH1cbiAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7ICsraSkge1xuICAgICAgc291cmNlID0gc291cmNlc1tpXTtcbiAgICAgIGlmICghc291cmNlIHx8IHNvdXJjZS5maWxsID09PSBmYWxzZSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHNvdXJjZS5maWxsID0gX3Jlc29sdmVUYXJnZXQoc291cmNlcywgaSwgb3B0aW9ucy5wcm9wYWdhdGUpO1xuICAgIH1cbiAgfSxcbiAgYmVmb3JlRHJhdyhjaGFydCwgX2FyZ3MsIG9wdGlvbnMpIHtcbiAgICBjb25zdCBkcmF3ID0gb3B0aW9ucy5kcmF3VGltZSA9PT0gJ2JlZm9yZURyYXcnO1xuICAgIGNvbnN0IG1ldGFzZXRzID0gY2hhcnQuZ2V0U29ydGVkVmlzaWJsZURhdGFzZXRNZXRhcygpO1xuICAgIGNvbnN0IGFyZWEgPSBjaGFydC5jaGFydEFyZWE7XG4gICAgZm9yIChsZXQgaSA9IG1ldGFzZXRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICBjb25zdCBzb3VyY2UgPSBtZXRhc2V0c1tpXS4kZmlsbGVyO1xuICAgICAgaWYgKCFzb3VyY2UpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBzb3VyY2UubGluZS51cGRhdGVDb250cm9sUG9pbnRzKGFyZWEsIHNvdXJjZS5heGlzKTtcbiAgICAgIGlmIChkcmF3ICYmIHNvdXJjZS5maWxsKSB7XG4gICAgICAgIF9kcmF3ZmlsbChjaGFydC5jdHgsIHNvdXJjZSwgYXJlYSk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuICBiZWZvcmVEYXRhc2V0c0RyYXcoY2hhcnQsIF9hcmdzLCBvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMuZHJhd1RpbWUgIT09ICdiZWZvcmVEYXRhc2V0c0RyYXcnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG1ldGFzZXRzID0gY2hhcnQuZ2V0U29ydGVkVmlzaWJsZURhdGFzZXRNZXRhcygpO1xuICAgIGZvciAobGV0IGkgPSBtZXRhc2V0cy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgY29uc3Qgc291cmNlID0gbWV0YXNldHNbaV0uJGZpbGxlcjtcbiAgICAgIGlmIChfc2hvdWxkQXBwbHlGaWxsKHNvdXJjZSkpIHtcbiAgICAgICAgX2RyYXdmaWxsKGNoYXJ0LmN0eCwgc291cmNlLCBjaGFydC5jaGFydEFyZWEpO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgYmVmb3JlRGF0YXNldERyYXcoY2hhcnQsIGFyZ3MsIG9wdGlvbnMpIHtcbiAgICBjb25zdCBzb3VyY2UgPSBhcmdzLm1ldGEuJGZpbGxlcjtcbiAgICBpZiAoIV9zaG91bGRBcHBseUZpbGwoc291cmNlKSB8fCBvcHRpb25zLmRyYXdUaW1lICE9PSAnYmVmb3JlRGF0YXNldERyYXcnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIF9kcmF3ZmlsbChjaGFydC5jdHgsIHNvdXJjZSwgY2hhcnQuY2hhcnRBcmVhKTtcbiAgfSxcbiAgZGVmYXVsdHM6IHtcbiAgICBwcm9wYWdhdGU6IHRydWUsXG4gICAgZHJhd1RpbWU6ICdiZWZvcmVEYXRhc2V0RHJhdydcbiAgfVxufTtcbmNvbnN0IGdldEJveFNpemUgPSAobGFiZWxPcHRzLCBmb250U2l6ZSkgPT4ge1xuICBsZXQge1xuICAgIGJveEhlaWdodCA9IGZvbnRTaXplLFxuICAgIGJveFdpZHRoID0gZm9udFNpemVcbiAgfSA9IGxhYmVsT3B0cztcbiAgaWYgKGxhYmVsT3B0cy51c2VQb2ludFN0eWxlKSB7XG4gICAgYm94SGVpZ2h0ID0gTWF0aC5taW4oYm94SGVpZ2h0LCBmb250U2l6ZSk7XG4gICAgYm94V2lkdGggPSBsYWJlbE9wdHMucG9pbnRTdHlsZVdpZHRoIHx8IE1hdGgubWluKGJveFdpZHRoLCBmb250U2l6ZSk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBib3hXaWR0aCxcbiAgICBib3hIZWlnaHQsXG4gICAgaXRlbUhlaWdodDogTWF0aC5tYXgoZm9udFNpemUsIGJveEhlaWdodClcbiAgfTtcbn07XG5jb25zdCBpdGVtc0VxdWFsID0gKGEsIGIpID0+IGEgIT09IG51bGwgJiYgYiAhPT0gbnVsbCAmJiBhLmRhdGFzZXRJbmRleCA9PT0gYi5kYXRhc2V0SW5kZXggJiYgYS5pbmRleCA9PT0gYi5pbmRleDtcbmNsYXNzIExlZ2VuZCBleHRlbmRzIEVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcihjb25maWcpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuX2FkZGVkID0gZmFsc2U7XG4gICAgdGhpcy5sZWdlbmRIaXRCb3hlcyA9IFtdO1xuICAgIHRoaXMuX2hvdmVyZWRJdGVtID0gbnVsbDtcbiAgICB0aGlzLmRvdWdobnV0TW9kZSA9IGZhbHNlO1xuICAgIHRoaXMuY2hhcnQgPSBjb25maWcuY2hhcnQ7XG4gICAgdGhpcy5vcHRpb25zID0gY29uZmlnLm9wdGlvbnM7XG4gICAgdGhpcy5jdHggPSBjb25maWcuY3R4O1xuICAgIHRoaXMubGVnZW5kSXRlbXMgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5jb2x1bW5TaXplcyA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmxpbmVXaWR0aHMgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5tYXhIZWlnaHQgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5tYXhXaWR0aCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnRvcCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmJvdHRvbSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmxlZnQgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5yaWdodCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmhlaWdodCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLndpZHRoID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuX21hcmdpbnMgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5wb3NpdGlvbiA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLndlaWdodCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmZ1bGxTaXplID0gdW5kZWZpbmVkO1xuICB9XG4gIHVwZGF0ZShtYXhXaWR0aCwgbWF4SGVpZ2h0LCBtYXJnaW5zKSB7XG4gICAgdGhpcy5tYXhXaWR0aCA9IG1heFdpZHRoO1xuICAgIHRoaXMubWF4SGVpZ2h0ID0gbWF4SGVpZ2h0O1xuICAgIHRoaXMuX21hcmdpbnMgPSBtYXJnaW5zO1xuICAgIHRoaXMuc2V0RGltZW5zaW9ucygpO1xuICAgIHRoaXMuYnVpbGRMYWJlbHMoKTtcbiAgICB0aGlzLmZpdCgpO1xuICB9XG4gIHNldERpbWVuc2lvbnMoKSB7XG4gICAgaWYgKHRoaXMuaXNIb3Jpem9udGFsKCkpIHtcbiAgICAgIHRoaXMud2lkdGggPSB0aGlzLm1heFdpZHRoO1xuICAgICAgdGhpcy5sZWZ0ID0gdGhpcy5fbWFyZ2lucy5sZWZ0O1xuICAgICAgdGhpcy5yaWdodCA9IHRoaXMud2lkdGg7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaGVpZ2h0ID0gdGhpcy5tYXhIZWlnaHQ7XG4gICAgICB0aGlzLnRvcCA9IHRoaXMuX21hcmdpbnMudG9wO1xuICAgICAgdGhpcy5ib3R0b20gPSB0aGlzLmhlaWdodDtcbiAgICB9XG4gIH1cbiAgYnVpbGRMYWJlbHMoKSB7XG4gICAgY29uc3QgbGFiZWxPcHRzID0gdGhpcy5vcHRpb25zLmxhYmVscyB8fCB7fTtcbiAgICBsZXQgbGVnZW5kSXRlbXMgPSBjYWxsYmFjayhsYWJlbE9wdHMuZ2VuZXJhdGVMYWJlbHMsIFt0aGlzLmNoYXJ0XSwgdGhpcykgfHwgW107XG4gICAgaWYgKGxhYmVsT3B0cy5maWx0ZXIpIHtcbiAgICAgIGxlZ2VuZEl0ZW1zID0gbGVnZW5kSXRlbXMuZmlsdGVyKGl0ZW0gPT4gbGFiZWxPcHRzLmZpbHRlcihpdGVtLCB0aGlzLmNoYXJ0LmRhdGEpKTtcbiAgICB9XG4gICAgaWYgKGxhYmVsT3B0cy5zb3J0KSB7XG4gICAgICBsZWdlbmRJdGVtcyA9IGxlZ2VuZEl0ZW1zLnNvcnQoKGEsIGIpID0+IGxhYmVsT3B0cy5zb3J0KGEsIGIsIHRoaXMuY2hhcnQuZGF0YSkpO1xuICAgIH1cbiAgICBpZiAodGhpcy5vcHRpb25zLnJldmVyc2UpIHtcbiAgICAgIGxlZ2VuZEl0ZW1zLnJldmVyc2UoKTtcbiAgICB9XG4gICAgdGhpcy5sZWdlbmRJdGVtcyA9IGxlZ2VuZEl0ZW1zO1xuICB9XG4gIGZpdCgpIHtcbiAgICBjb25zdCB7XG4gICAgICBvcHRpb25zLFxuICAgICAgY3R4XG4gICAgfSA9IHRoaXM7XG4gICAgaWYgKCFvcHRpb25zLmRpc3BsYXkpIHtcbiAgICAgIHRoaXMud2lkdGggPSB0aGlzLmhlaWdodCA9IDA7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGxhYmVsT3B0cyA9IG9wdGlvbnMubGFiZWxzO1xuICAgIGNvbnN0IGxhYmVsRm9udCA9IHRvRm9udChsYWJlbE9wdHMuZm9udCk7XG4gICAgY29uc3QgZm9udFNpemUgPSBsYWJlbEZvbnQuc2l6ZTtcbiAgICBjb25zdCB0aXRsZUhlaWdodCA9IHRoaXMuX2NvbXB1dGVUaXRsZUhlaWdodCgpO1xuICAgIGNvbnN0IHtcbiAgICAgIGJveFdpZHRoLFxuICAgICAgaXRlbUhlaWdodFxuICAgIH0gPSBnZXRCb3hTaXplKGxhYmVsT3B0cywgZm9udFNpemUpO1xuICAgIGxldCB3aWR0aCwgaGVpZ2h0O1xuICAgIGN0eC5mb250ID0gbGFiZWxGb250LnN0cmluZztcbiAgICBpZiAodGhpcy5pc0hvcml6b250YWwoKSkge1xuICAgICAgd2lkdGggPSB0aGlzLm1heFdpZHRoO1xuICAgICAgaGVpZ2h0ID0gdGhpcy5fZml0Um93cyh0aXRsZUhlaWdodCwgZm9udFNpemUsIGJveFdpZHRoLCBpdGVtSGVpZ2h0KSArIDEwO1xuICAgIH0gZWxzZSB7XG4gICAgICBoZWlnaHQgPSB0aGlzLm1heEhlaWdodDtcbiAgICAgIHdpZHRoID0gdGhpcy5fZml0Q29scyh0aXRsZUhlaWdodCwgbGFiZWxGb250LCBib3hXaWR0aCwgaXRlbUhlaWdodCkgKyAxMDtcbiAgICB9XG4gICAgdGhpcy53aWR0aCA9IE1hdGgubWluKHdpZHRoLCBvcHRpb25zLm1heFdpZHRoIHx8IHRoaXMubWF4V2lkdGgpO1xuICAgIHRoaXMuaGVpZ2h0ID0gTWF0aC5taW4oaGVpZ2h0LCBvcHRpb25zLm1heEhlaWdodCB8fCB0aGlzLm1heEhlaWdodCk7XG4gIH1cbiAgX2ZpdFJvd3ModGl0bGVIZWlnaHQsIGZvbnRTaXplLCBib3hXaWR0aCwgaXRlbUhlaWdodCkge1xuICAgIGNvbnN0IHtcbiAgICAgIGN0eCxcbiAgICAgIG1heFdpZHRoLFxuICAgICAgb3B0aW9uczoge1xuICAgICAgICBsYWJlbHM6IHtcbiAgICAgICAgICBwYWRkaW5nXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9ID0gdGhpcztcbiAgICBjb25zdCBoaXRib3hlcyA9IHRoaXMubGVnZW5kSGl0Qm94ZXMgPSBbXTtcbiAgICBjb25zdCBsaW5lV2lkdGhzID0gdGhpcy5saW5lV2lkdGhzID0gWzBdO1xuICAgIGNvbnN0IGxpbmVIZWlnaHQgPSBpdGVtSGVpZ2h0ICsgcGFkZGluZztcbiAgICBsZXQgdG90YWxIZWlnaHQgPSB0aXRsZUhlaWdodDtcbiAgICBjdHgudGV4dEFsaWduID0gJ2xlZnQnO1xuICAgIGN0eC50ZXh0QmFzZWxpbmUgPSAnbWlkZGxlJztcbiAgICBsZXQgcm93ID0gLTE7XG4gICAgbGV0IHRvcCA9IC1saW5lSGVpZ2h0O1xuICAgIHRoaXMubGVnZW5kSXRlbXMuZm9yRWFjaCgobGVnZW5kSXRlbSwgaSkgPT4ge1xuICAgICAgY29uc3QgaXRlbVdpZHRoID0gYm94V2lkdGggKyBmb250U2l6ZSAvIDIgKyBjdHgubWVhc3VyZVRleHQobGVnZW5kSXRlbS50ZXh0KS53aWR0aDtcbiAgICAgIGlmIChpID09PSAwIHx8IGxpbmVXaWR0aHNbbGluZVdpZHRocy5sZW5ndGggLSAxXSArIGl0ZW1XaWR0aCArIDIgKiBwYWRkaW5nID4gbWF4V2lkdGgpIHtcbiAgICAgICAgdG90YWxIZWlnaHQgKz0gbGluZUhlaWdodDtcbiAgICAgICAgbGluZVdpZHRoc1tsaW5lV2lkdGhzLmxlbmd0aCAtIChpID4gMCA/IDAgOiAxKV0gPSAwO1xuICAgICAgICB0b3AgKz0gbGluZUhlaWdodDtcbiAgICAgICAgcm93Kys7XG4gICAgICB9XG4gICAgICBoaXRib3hlc1tpXSA9IHtcbiAgICAgICAgbGVmdDogMCxcbiAgICAgICAgdG9wLFxuICAgICAgICByb3csXG4gICAgICAgIHdpZHRoOiBpdGVtV2lkdGgsXG4gICAgICAgIGhlaWdodDogaXRlbUhlaWdodFxuICAgICAgfTtcbiAgICAgIGxpbmVXaWR0aHNbbGluZVdpZHRocy5sZW5ndGggLSAxXSArPSBpdGVtV2lkdGggKyBwYWRkaW5nO1xuICAgIH0pO1xuICAgIHJldHVybiB0b3RhbEhlaWdodDtcbiAgfVxuICBfZml0Q29scyh0aXRsZUhlaWdodCwgbGFiZWxGb250LCBib3hXaWR0aCwgX2l0ZW1IZWlnaHQpIHtcbiAgICBjb25zdCB7XG4gICAgICBjdHgsXG4gICAgICBtYXhIZWlnaHQsXG4gICAgICBvcHRpb25zOiB7XG4gICAgICAgIGxhYmVsczoge1xuICAgICAgICAgIHBhZGRpbmdcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gPSB0aGlzO1xuICAgIGNvbnN0IGhpdGJveGVzID0gdGhpcy5sZWdlbmRIaXRCb3hlcyA9IFtdO1xuICAgIGNvbnN0IGNvbHVtblNpemVzID0gdGhpcy5jb2x1bW5TaXplcyA9IFtdO1xuICAgIGNvbnN0IGhlaWdodExpbWl0ID0gbWF4SGVpZ2h0IC0gdGl0bGVIZWlnaHQ7XG4gICAgbGV0IHRvdGFsV2lkdGggPSBwYWRkaW5nO1xuICAgIGxldCBjdXJyZW50Q29sV2lkdGggPSAwO1xuICAgIGxldCBjdXJyZW50Q29sSGVpZ2h0ID0gMDtcbiAgICBsZXQgbGVmdCA9IDA7XG4gICAgbGV0IGNvbCA9IDA7XG4gICAgdGhpcy5sZWdlbmRJdGVtcy5mb3JFYWNoKChsZWdlbmRJdGVtLCBpKSA9PiB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGl0ZW1XaWR0aCxcbiAgICAgICAgaXRlbUhlaWdodFxuICAgICAgfSA9IGNhbGN1bGF0ZUl0ZW1TaXplKGJveFdpZHRoLCBsYWJlbEZvbnQsIGN0eCwgbGVnZW5kSXRlbSwgX2l0ZW1IZWlnaHQpO1xuICAgICAgaWYgKGkgPiAwICYmIGN1cnJlbnRDb2xIZWlnaHQgKyBpdGVtSGVpZ2h0ICsgMiAqIHBhZGRpbmcgPiBoZWlnaHRMaW1pdCkge1xuICAgICAgICB0b3RhbFdpZHRoICs9IGN1cnJlbnRDb2xXaWR0aCArIHBhZGRpbmc7XG4gICAgICAgIGNvbHVtblNpemVzLnB1c2goe1xuICAgICAgICAgIHdpZHRoOiBjdXJyZW50Q29sV2lkdGgsXG4gICAgICAgICAgaGVpZ2h0OiBjdXJyZW50Q29sSGVpZ2h0XG4gICAgICAgIH0pO1xuICAgICAgICBsZWZ0ICs9IGN1cnJlbnRDb2xXaWR0aCArIHBhZGRpbmc7XG4gICAgICAgIGNvbCsrO1xuICAgICAgICBjdXJyZW50Q29sV2lkdGggPSBjdXJyZW50Q29sSGVpZ2h0ID0gMDtcbiAgICAgIH1cbiAgICAgIGhpdGJveGVzW2ldID0ge1xuICAgICAgICBsZWZ0LFxuICAgICAgICB0b3A6IGN1cnJlbnRDb2xIZWlnaHQsXG4gICAgICAgIGNvbCxcbiAgICAgICAgd2lkdGg6IGl0ZW1XaWR0aCxcbiAgICAgICAgaGVpZ2h0OiBpdGVtSGVpZ2h0XG4gICAgICB9O1xuICAgICAgY3VycmVudENvbFdpZHRoID0gTWF0aC5tYXgoY3VycmVudENvbFdpZHRoLCBpdGVtV2lkdGgpO1xuICAgICAgY3VycmVudENvbEhlaWdodCArPSBpdGVtSGVpZ2h0ICsgcGFkZGluZztcbiAgICB9KTtcbiAgICB0b3RhbFdpZHRoICs9IGN1cnJlbnRDb2xXaWR0aDtcbiAgICBjb2x1bW5TaXplcy5wdXNoKHtcbiAgICAgIHdpZHRoOiBjdXJyZW50Q29sV2lkdGgsXG4gICAgICBoZWlnaHQ6IGN1cnJlbnRDb2xIZWlnaHRcbiAgICB9KTtcbiAgICByZXR1cm4gdG90YWxXaWR0aDtcbiAgfVxuICBhZGp1c3RIaXRCb3hlcygpIHtcbiAgICBpZiAoIXRoaXMub3B0aW9ucy5kaXNwbGF5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHRpdGxlSGVpZ2h0ID0gdGhpcy5fY29tcHV0ZVRpdGxlSGVpZ2h0KCk7XG4gICAgY29uc3Qge1xuICAgICAgbGVnZW5kSGl0Qm94ZXM6IGhpdGJveGVzLFxuICAgICAgb3B0aW9uczoge1xuICAgICAgICBhbGlnbixcbiAgICAgICAgbGFiZWxzOiB7XG4gICAgICAgICAgcGFkZGluZ1xuICAgICAgICB9LFxuICAgICAgICBydGxcbiAgICAgIH1cbiAgICB9ID0gdGhpcztcbiAgICBjb25zdCBydGxIZWxwZXIgPSBnZXRSdGxBZGFwdGVyKHJ0bCwgdGhpcy5sZWZ0LCB0aGlzLndpZHRoKTtcbiAgICBpZiAodGhpcy5pc0hvcml6b250YWwoKSkge1xuICAgICAgbGV0IHJvdyA9IDA7XG4gICAgICBsZXQgbGVmdCA9IF9hbGlnblN0YXJ0RW5kKGFsaWduLCB0aGlzLmxlZnQgKyBwYWRkaW5nLCB0aGlzLnJpZ2h0IC0gdGhpcy5saW5lV2lkdGhzW3Jvd10pO1xuICAgICAgZm9yIChjb25zdCBoaXRib3ggb2YgaGl0Ym94ZXMpIHtcbiAgICAgICAgaWYgKHJvdyAhPT0gaGl0Ym94LnJvdykge1xuICAgICAgICAgIHJvdyA9IGhpdGJveC5yb3c7XG4gICAgICAgICAgbGVmdCA9IF9hbGlnblN0YXJ0RW5kKGFsaWduLCB0aGlzLmxlZnQgKyBwYWRkaW5nLCB0aGlzLnJpZ2h0IC0gdGhpcy5saW5lV2lkdGhzW3Jvd10pO1xuICAgICAgICB9XG4gICAgICAgIGhpdGJveC50b3AgKz0gdGhpcy50b3AgKyB0aXRsZUhlaWdodCArIHBhZGRpbmc7XG4gICAgICAgIGhpdGJveC5sZWZ0ID0gcnRsSGVscGVyLmxlZnRGb3JMdHIocnRsSGVscGVyLngobGVmdCksIGhpdGJveC53aWR0aCk7XG4gICAgICAgIGxlZnQgKz0gaGl0Ym94LndpZHRoICsgcGFkZGluZztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IGNvbCA9IDA7XG4gICAgICBsZXQgdG9wID0gX2FsaWduU3RhcnRFbmQoYWxpZ24sIHRoaXMudG9wICsgdGl0bGVIZWlnaHQgKyBwYWRkaW5nLCB0aGlzLmJvdHRvbSAtIHRoaXMuY29sdW1uU2l6ZXNbY29sXS5oZWlnaHQpO1xuICAgICAgZm9yIChjb25zdCBoaXRib3ggb2YgaGl0Ym94ZXMpIHtcbiAgICAgICAgaWYgKGhpdGJveC5jb2wgIT09IGNvbCkge1xuICAgICAgICAgIGNvbCA9IGhpdGJveC5jb2w7XG4gICAgICAgICAgdG9wID0gX2FsaWduU3RhcnRFbmQoYWxpZ24sIHRoaXMudG9wICsgdGl0bGVIZWlnaHQgKyBwYWRkaW5nLCB0aGlzLmJvdHRvbSAtIHRoaXMuY29sdW1uU2l6ZXNbY29sXS5oZWlnaHQpO1xuICAgICAgICB9XG4gICAgICAgIGhpdGJveC50b3AgPSB0b3A7XG4gICAgICAgIGhpdGJveC5sZWZ0ICs9IHRoaXMubGVmdCArIHBhZGRpbmc7XG4gICAgICAgIGhpdGJveC5sZWZ0ID0gcnRsSGVscGVyLmxlZnRGb3JMdHIocnRsSGVscGVyLngoaGl0Ym94LmxlZnQpLCBoaXRib3gud2lkdGgpO1xuICAgICAgICB0b3AgKz0gaGl0Ym94LmhlaWdodCArIHBhZGRpbmc7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlzSG9yaXpvbnRhbCgpIHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLnBvc2l0aW9uID09PSAndG9wJyB8fCB0aGlzLm9wdGlvbnMucG9zaXRpb24gPT09ICdib3R0b20nO1xuICB9XG4gIGRyYXcoKSB7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5kaXNwbGF5KSB7XG4gICAgICBjb25zdCBjdHggPSB0aGlzLmN0eDtcbiAgICAgIGNsaXBBcmVhKGN0eCwgdGhpcyk7XG4gICAgICB0aGlzLl9kcmF3KCk7XG4gICAgICB1bmNsaXBBcmVhKGN0eCk7XG4gICAgfVxuICB9XG4gIF9kcmF3KCkge1xuICAgIGNvbnN0IHtcbiAgICAgIG9wdGlvbnM6IG9wdHMsXG4gICAgICBjb2x1bW5TaXplcyxcbiAgICAgIGxpbmVXaWR0aHMsXG4gICAgICBjdHhcbiAgICB9ID0gdGhpcztcbiAgICBjb25zdCB7XG4gICAgICBhbGlnbixcbiAgICAgIGxhYmVsczogbGFiZWxPcHRzXG4gICAgfSA9IG9wdHM7XG4gICAgY29uc3QgZGVmYXVsdENvbG9yID0gZGVmYXVsdHMuY29sb3I7XG4gICAgY29uc3QgcnRsSGVscGVyID0gZ2V0UnRsQWRhcHRlcihvcHRzLnJ0bCwgdGhpcy5sZWZ0LCB0aGlzLndpZHRoKTtcbiAgICBjb25zdCBsYWJlbEZvbnQgPSB0b0ZvbnQobGFiZWxPcHRzLmZvbnQpO1xuICAgIGNvbnN0IHtcbiAgICAgIHBhZGRpbmdcbiAgICB9ID0gbGFiZWxPcHRzO1xuICAgIGNvbnN0IGZvbnRTaXplID0gbGFiZWxGb250LnNpemU7XG4gICAgY29uc3QgaGFsZkZvbnRTaXplID0gZm9udFNpemUgLyAyO1xuICAgIGxldCBjdXJzb3I7XG4gICAgdGhpcy5kcmF3VGl0bGUoKTtcbiAgICBjdHgudGV4dEFsaWduID0gcnRsSGVscGVyLnRleHRBbGlnbignbGVmdCcpO1xuICAgIGN0eC50ZXh0QmFzZWxpbmUgPSAnbWlkZGxlJztcbiAgICBjdHgubGluZVdpZHRoID0gMC41O1xuICAgIGN0eC5mb250ID0gbGFiZWxGb250LnN0cmluZztcbiAgICBjb25zdCB7XG4gICAgICBib3hXaWR0aCxcbiAgICAgIGJveEhlaWdodCxcbiAgICAgIGl0ZW1IZWlnaHRcbiAgICB9ID0gZ2V0Qm94U2l6ZShsYWJlbE9wdHMsIGZvbnRTaXplKTtcbiAgICBjb25zdCBkcmF3TGVnZW5kQm94ID0gZnVuY3Rpb24gKHgsIHksIGxlZ2VuZEl0ZW0pIHtcbiAgICAgIGlmIChpc05hTihib3hXaWR0aCkgfHwgYm94V2lkdGggPD0gMCB8fCBpc05hTihib3hIZWlnaHQpIHx8IGJveEhlaWdodCA8IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY3R4LnNhdmUoKTtcbiAgICAgIGNvbnN0IGxpbmVXaWR0aCA9IHZhbHVlT3JEZWZhdWx0KGxlZ2VuZEl0ZW0ubGluZVdpZHRoLCAxKTtcbiAgICAgIGN0eC5maWxsU3R5bGUgPSB2YWx1ZU9yRGVmYXVsdChsZWdlbmRJdGVtLmZpbGxTdHlsZSwgZGVmYXVsdENvbG9yKTtcbiAgICAgIGN0eC5saW5lQ2FwID0gdmFsdWVPckRlZmF1bHQobGVnZW5kSXRlbS5saW5lQ2FwLCAnYnV0dCcpO1xuICAgICAgY3R4LmxpbmVEYXNoT2Zmc2V0ID0gdmFsdWVPckRlZmF1bHQobGVnZW5kSXRlbS5saW5lRGFzaE9mZnNldCwgMCk7XG4gICAgICBjdHgubGluZUpvaW4gPSB2YWx1ZU9yRGVmYXVsdChsZWdlbmRJdGVtLmxpbmVKb2luLCAnbWl0ZXInKTtcbiAgICAgIGN0eC5saW5lV2lkdGggPSBsaW5lV2lkdGg7XG4gICAgICBjdHguc3Ryb2tlU3R5bGUgPSB2YWx1ZU9yRGVmYXVsdChsZWdlbmRJdGVtLnN0cm9rZVN0eWxlLCBkZWZhdWx0Q29sb3IpO1xuICAgICAgY3R4LnNldExpbmVEYXNoKHZhbHVlT3JEZWZhdWx0KGxlZ2VuZEl0ZW0ubGluZURhc2gsIFtdKSk7XG4gICAgICBpZiAobGFiZWxPcHRzLnVzZVBvaW50U3R5bGUpIHtcbiAgICAgICAgY29uc3QgZHJhd09wdGlvbnMgPSB7XG4gICAgICAgICAgcmFkaXVzOiBib3hIZWlnaHQgKiBNYXRoLlNRUlQyIC8gMixcbiAgICAgICAgICBwb2ludFN0eWxlOiBsZWdlbmRJdGVtLnBvaW50U3R5bGUsXG4gICAgICAgICAgcm90YXRpb246IGxlZ2VuZEl0ZW0ucm90YXRpb24sXG4gICAgICAgICAgYm9yZGVyV2lkdGg6IGxpbmVXaWR0aFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBjZW50ZXJYID0gcnRsSGVscGVyLnhQbHVzKHgsIGJveFdpZHRoIC8gMik7XG4gICAgICAgIGNvbnN0IGNlbnRlclkgPSB5ICsgaGFsZkZvbnRTaXplO1xuICAgICAgICBkcmF3UG9pbnRMZWdlbmQoY3R4LCBkcmF3T3B0aW9ucywgY2VudGVyWCwgY2VudGVyWSwgbGFiZWxPcHRzLnBvaW50U3R5bGVXaWR0aCAmJiBib3hXaWR0aCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCB5Qm94VG9wID0geSArIE1hdGgubWF4KChmb250U2l6ZSAtIGJveEhlaWdodCkgLyAyLCAwKTtcbiAgICAgICAgY29uc3QgeEJveExlZnQgPSBydGxIZWxwZXIubGVmdEZvckx0cih4LCBib3hXaWR0aCk7XG4gICAgICAgIGNvbnN0IGJvcmRlclJhZGl1cyA9IHRvVFJCTENvcm5lcnMobGVnZW5kSXRlbS5ib3JkZXJSYWRpdXMpO1xuICAgICAgICBjdHguYmVnaW5QYXRoKCk7XG4gICAgICAgIGlmIChPYmplY3QudmFsdWVzKGJvcmRlclJhZGl1cykuc29tZSh2ID0+IHYgIT09IDApKSB7XG4gICAgICAgICAgYWRkUm91bmRlZFJlY3RQYXRoKGN0eCwge1xuICAgICAgICAgICAgeDogeEJveExlZnQsXG4gICAgICAgICAgICB5OiB5Qm94VG9wLFxuICAgICAgICAgICAgdzogYm94V2lkdGgsXG4gICAgICAgICAgICBoOiBib3hIZWlnaHQsXG4gICAgICAgICAgICByYWRpdXM6IGJvcmRlclJhZGl1c1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGN0eC5yZWN0KHhCb3hMZWZ0LCB5Qm94VG9wLCBib3hXaWR0aCwgYm94SGVpZ2h0KTtcbiAgICAgICAgfVxuICAgICAgICBjdHguZmlsbCgpO1xuICAgICAgICBpZiAobGluZVdpZHRoICE9PSAwKSB7XG4gICAgICAgICAgY3R4LnN0cm9rZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjdHgucmVzdG9yZSgpO1xuICAgIH07XG4gICAgY29uc3QgZmlsbFRleHQgPSBmdW5jdGlvbiAoeCwgeSwgbGVnZW5kSXRlbSkge1xuICAgICAgcmVuZGVyVGV4dChjdHgsIGxlZ2VuZEl0ZW0udGV4dCwgeCwgeSArIGl0ZW1IZWlnaHQgLyAyLCBsYWJlbEZvbnQsIHtcbiAgICAgICAgc3RyaWtldGhyb3VnaDogbGVnZW5kSXRlbS5oaWRkZW4sXG4gICAgICAgIHRleHRBbGlnbjogcnRsSGVscGVyLnRleHRBbGlnbihsZWdlbmRJdGVtLnRleHRBbGlnbilcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgaXNIb3Jpem9udGFsID0gdGhpcy5pc0hvcml6b250YWwoKTtcbiAgICBjb25zdCB0aXRsZUhlaWdodCA9IHRoaXMuX2NvbXB1dGVUaXRsZUhlaWdodCgpO1xuICAgIGlmIChpc0hvcml6b250YWwpIHtcbiAgICAgIGN1cnNvciA9IHtcbiAgICAgICAgeDogX2FsaWduU3RhcnRFbmQoYWxpZ24sIHRoaXMubGVmdCArIHBhZGRpbmcsIHRoaXMucmlnaHQgLSBsaW5lV2lkdGhzWzBdKSxcbiAgICAgICAgeTogdGhpcy50b3AgKyBwYWRkaW5nICsgdGl0bGVIZWlnaHQsXG4gICAgICAgIGxpbmU6IDBcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGN1cnNvciA9IHtcbiAgICAgICAgeDogdGhpcy5sZWZ0ICsgcGFkZGluZyxcbiAgICAgICAgeTogX2FsaWduU3RhcnRFbmQoYWxpZ24sIHRoaXMudG9wICsgdGl0bGVIZWlnaHQgKyBwYWRkaW5nLCB0aGlzLmJvdHRvbSAtIGNvbHVtblNpemVzWzBdLmhlaWdodCksXG4gICAgICAgIGxpbmU6IDBcbiAgICAgIH07XG4gICAgfVxuICAgIG92ZXJyaWRlVGV4dERpcmVjdGlvbih0aGlzLmN0eCwgb3B0cy50ZXh0RGlyZWN0aW9uKTtcbiAgICBjb25zdCBsaW5lSGVpZ2h0ID0gaXRlbUhlaWdodCArIHBhZGRpbmc7XG4gICAgdGhpcy5sZWdlbmRJdGVtcy5mb3JFYWNoKChsZWdlbmRJdGVtLCBpKSA9PiB7XG4gICAgICBjdHguc3Ryb2tlU3R5bGUgPSBsZWdlbmRJdGVtLmZvbnRDb2xvcjtcbiAgICAgIGN0eC5maWxsU3R5bGUgPSBsZWdlbmRJdGVtLmZvbnRDb2xvcjtcbiAgICAgIGNvbnN0IHRleHRXaWR0aCA9IGN0eC5tZWFzdXJlVGV4dChsZWdlbmRJdGVtLnRleHQpLndpZHRoO1xuICAgICAgY29uc3QgdGV4dEFsaWduID0gcnRsSGVscGVyLnRleHRBbGlnbihsZWdlbmRJdGVtLnRleHRBbGlnbiB8fCAobGVnZW5kSXRlbS50ZXh0QWxpZ24gPSBsYWJlbE9wdHMudGV4dEFsaWduKSk7XG4gICAgICBjb25zdCB3aWR0aCA9IGJveFdpZHRoICsgaGFsZkZvbnRTaXplICsgdGV4dFdpZHRoO1xuICAgICAgbGV0IHggPSBjdXJzb3IueDtcbiAgICAgIGxldCB5ID0gY3Vyc29yLnk7XG4gICAgICBydGxIZWxwZXIuc2V0V2lkdGgodGhpcy53aWR0aCk7XG4gICAgICBpZiAoaXNIb3Jpem9udGFsKSB7XG4gICAgICAgIGlmIChpID4gMCAmJiB4ICsgd2lkdGggKyBwYWRkaW5nID4gdGhpcy5yaWdodCkge1xuICAgICAgICAgIHkgPSBjdXJzb3IueSArPSBsaW5lSGVpZ2h0O1xuICAgICAgICAgIGN1cnNvci5saW5lKys7XG4gICAgICAgICAgeCA9IGN1cnNvci54ID0gX2FsaWduU3RhcnRFbmQoYWxpZ24sIHRoaXMubGVmdCArIHBhZGRpbmcsIHRoaXMucmlnaHQgLSBsaW5lV2lkdGhzW2N1cnNvci5saW5lXSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaSA+IDAgJiYgeSArIGxpbmVIZWlnaHQgPiB0aGlzLmJvdHRvbSkge1xuICAgICAgICB4ID0gY3Vyc29yLnggPSB4ICsgY29sdW1uU2l6ZXNbY3Vyc29yLmxpbmVdLndpZHRoICsgcGFkZGluZztcbiAgICAgICAgY3Vyc29yLmxpbmUrKztcbiAgICAgICAgeSA9IGN1cnNvci55ID0gX2FsaWduU3RhcnRFbmQoYWxpZ24sIHRoaXMudG9wICsgdGl0bGVIZWlnaHQgKyBwYWRkaW5nLCB0aGlzLmJvdHRvbSAtIGNvbHVtblNpemVzW2N1cnNvci5saW5lXS5oZWlnaHQpO1xuICAgICAgfVxuICAgICAgY29uc3QgcmVhbFggPSBydGxIZWxwZXIueCh4KTtcbiAgICAgIGRyYXdMZWdlbmRCb3gocmVhbFgsIHksIGxlZ2VuZEl0ZW0pO1xuICAgICAgeCA9IF90ZXh0WCh0ZXh0QWxpZ24sIHggKyBib3hXaWR0aCArIGhhbGZGb250U2l6ZSwgaXNIb3Jpem9udGFsID8geCArIHdpZHRoIDogdGhpcy5yaWdodCwgb3B0cy5ydGwpO1xuICAgICAgZmlsbFRleHQocnRsSGVscGVyLngoeCksIHksIGxlZ2VuZEl0ZW0pO1xuICAgICAgaWYgKGlzSG9yaXpvbnRhbCkge1xuICAgICAgICBjdXJzb3IueCArPSB3aWR0aCArIHBhZGRpbmc7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBsZWdlbmRJdGVtLnRleHQgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGNvbnN0IGZvbnRMaW5lSGVpZ2h0ID0gbGFiZWxGb250LmxpbmVIZWlnaHQ7XG4gICAgICAgIGN1cnNvci55ICs9IGNhbGN1bGF0ZUxlZ2VuZEl0ZW1IZWlnaHQobGVnZW5kSXRlbSwgZm9udExpbmVIZWlnaHQpICsgcGFkZGluZztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGN1cnNvci55ICs9IGxpbmVIZWlnaHQ7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmVzdG9yZVRleHREaXJlY3Rpb24odGhpcy5jdHgsIG9wdHMudGV4dERpcmVjdGlvbik7XG4gIH1cbiAgZHJhd1RpdGxlKCkge1xuICAgIGNvbnN0IG9wdHMgPSB0aGlzLm9wdGlvbnM7XG4gICAgY29uc3QgdGl0bGVPcHRzID0gb3B0cy50aXRsZTtcbiAgICBjb25zdCB0aXRsZUZvbnQgPSB0b0ZvbnQodGl0bGVPcHRzLmZvbnQpO1xuICAgIGNvbnN0IHRpdGxlUGFkZGluZyA9IHRvUGFkZGluZyh0aXRsZU9wdHMucGFkZGluZyk7XG4gICAgaWYgKCF0aXRsZU9wdHMuZGlzcGxheSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBydGxIZWxwZXIgPSBnZXRSdGxBZGFwdGVyKG9wdHMucnRsLCB0aGlzLmxlZnQsIHRoaXMud2lkdGgpO1xuICAgIGNvbnN0IGN0eCA9IHRoaXMuY3R4O1xuICAgIGNvbnN0IHBvc2l0aW9uID0gdGl0bGVPcHRzLnBvc2l0aW9uO1xuICAgIGNvbnN0IGhhbGZGb250U2l6ZSA9IHRpdGxlRm9udC5zaXplIC8gMjtcbiAgICBjb25zdCB0b3BQYWRkaW5nUGx1c0hhbGZGb250U2l6ZSA9IHRpdGxlUGFkZGluZy50b3AgKyBoYWxmRm9udFNpemU7XG4gICAgbGV0IHk7XG4gICAgbGV0IGxlZnQgPSB0aGlzLmxlZnQ7XG4gICAgbGV0IG1heFdpZHRoID0gdGhpcy53aWR0aDtcbiAgICBpZiAodGhpcy5pc0hvcml6b250YWwoKSkge1xuICAgICAgbWF4V2lkdGggPSBNYXRoLm1heCguLi50aGlzLmxpbmVXaWR0aHMpO1xuICAgICAgeSA9IHRoaXMudG9wICsgdG9wUGFkZGluZ1BsdXNIYWxmRm9udFNpemU7XG4gICAgICBsZWZ0ID0gX2FsaWduU3RhcnRFbmQob3B0cy5hbGlnbiwgbGVmdCwgdGhpcy5yaWdodCAtIG1heFdpZHRoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgbWF4SGVpZ2h0ID0gdGhpcy5jb2x1bW5TaXplcy5yZWR1Y2UoKGFjYywgc2l6ZSkgPT4gTWF0aC5tYXgoYWNjLCBzaXplLmhlaWdodCksIDApO1xuICAgICAgeSA9IHRvcFBhZGRpbmdQbHVzSGFsZkZvbnRTaXplICsgX2FsaWduU3RhcnRFbmQob3B0cy5hbGlnbiwgdGhpcy50b3AsIHRoaXMuYm90dG9tIC0gbWF4SGVpZ2h0IC0gb3B0cy5sYWJlbHMucGFkZGluZyAtIHRoaXMuX2NvbXB1dGVUaXRsZUhlaWdodCgpKTtcbiAgICB9XG4gICAgY29uc3QgeCA9IF9hbGlnblN0YXJ0RW5kKHBvc2l0aW9uLCBsZWZ0LCBsZWZ0ICsgbWF4V2lkdGgpO1xuICAgIGN0eC50ZXh0QWxpZ24gPSBydGxIZWxwZXIudGV4dEFsaWduKF90b0xlZnRSaWdodENlbnRlcihwb3NpdGlvbikpO1xuICAgIGN0eC50ZXh0QmFzZWxpbmUgPSAnbWlkZGxlJztcbiAgICBjdHguc3Ryb2tlU3R5bGUgPSB0aXRsZU9wdHMuY29sb3I7XG4gICAgY3R4LmZpbGxTdHlsZSA9IHRpdGxlT3B0cy5jb2xvcjtcbiAgICBjdHguZm9udCA9IHRpdGxlRm9udC5zdHJpbmc7XG4gICAgcmVuZGVyVGV4dChjdHgsIHRpdGxlT3B0cy50ZXh0LCB4LCB5LCB0aXRsZUZvbnQpO1xuICB9XG4gIF9jb21wdXRlVGl0bGVIZWlnaHQoKSB7XG4gICAgY29uc3QgdGl0bGVPcHRzID0gdGhpcy5vcHRpb25zLnRpdGxlO1xuICAgIGNvbnN0IHRpdGxlRm9udCA9IHRvRm9udCh0aXRsZU9wdHMuZm9udCk7XG4gICAgY29uc3QgdGl0bGVQYWRkaW5nID0gdG9QYWRkaW5nKHRpdGxlT3B0cy5wYWRkaW5nKTtcbiAgICByZXR1cm4gdGl0bGVPcHRzLmRpc3BsYXkgPyB0aXRsZUZvbnQubGluZUhlaWdodCArIHRpdGxlUGFkZGluZy5oZWlnaHQgOiAwO1xuICB9XG4gIF9nZXRMZWdlbmRJdGVtQXQoeCwgeSkge1xuICAgIGxldCBpLCBoaXRCb3gsIGxoO1xuICAgIGlmIChfaXNCZXR3ZWVuKHgsIHRoaXMubGVmdCwgdGhpcy5yaWdodCkgJiYgX2lzQmV0d2Vlbih5LCB0aGlzLnRvcCwgdGhpcy5ib3R0b20pKSB7XG4gICAgICBsaCA9IHRoaXMubGVnZW5kSGl0Qm94ZXM7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgbGgubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaGl0Qm94ID0gbGhbaV07XG4gICAgICAgIGlmIChfaXNCZXR3ZWVuKHgsIGhpdEJveC5sZWZ0LCBoaXRCb3gubGVmdCArIGhpdEJveC53aWR0aCkgJiYgX2lzQmV0d2Vlbih5LCBoaXRCb3gudG9wLCBoaXRCb3gudG9wICsgaGl0Qm94LmhlaWdodCkpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5sZWdlbmRJdGVtc1tpXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBoYW5kbGVFdmVudChlKSB7XG4gICAgY29uc3Qgb3B0cyA9IHRoaXMub3B0aW9ucztcbiAgICBpZiAoIWlzTGlzdGVuZWQoZS50eXBlLCBvcHRzKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBob3ZlcmVkSXRlbSA9IHRoaXMuX2dldExlZ2VuZEl0ZW1BdChlLngsIGUueSk7XG4gICAgaWYgKGUudHlwZSA9PT0gJ21vdXNlbW92ZScgfHwgZS50eXBlID09PSAnbW91c2VvdXQnKSB7XG4gICAgICBjb25zdCBwcmV2aW91cyA9IHRoaXMuX2hvdmVyZWRJdGVtO1xuICAgICAgY29uc3Qgc2FtZUl0ZW0gPSBpdGVtc0VxdWFsKHByZXZpb3VzLCBob3ZlcmVkSXRlbSk7XG4gICAgICBpZiAocHJldmlvdXMgJiYgIXNhbWVJdGVtKSB7XG4gICAgICAgIGNhbGxiYWNrKG9wdHMub25MZWF2ZSwgW2UsIHByZXZpb3VzLCB0aGlzXSwgdGhpcyk7XG4gICAgICB9XG4gICAgICB0aGlzLl9ob3ZlcmVkSXRlbSA9IGhvdmVyZWRJdGVtO1xuICAgICAgaWYgKGhvdmVyZWRJdGVtICYmICFzYW1lSXRlbSkge1xuICAgICAgICBjYWxsYmFjayhvcHRzLm9uSG92ZXIsIFtlLCBob3ZlcmVkSXRlbSwgdGhpc10sIHRoaXMpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaG92ZXJlZEl0ZW0pIHtcbiAgICAgIGNhbGxiYWNrKG9wdHMub25DbGljaywgW2UsIGhvdmVyZWRJdGVtLCB0aGlzXSwgdGhpcyk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBjYWxjdWxhdGVJdGVtU2l6ZShib3hXaWR0aCwgbGFiZWxGb250LCBjdHgsIGxlZ2VuZEl0ZW0sIF9pdGVtSGVpZ2h0KSB7XG4gIGNvbnN0IGl0ZW1XaWR0aCA9IGNhbGN1bGF0ZUl0ZW1XaWR0aChsZWdlbmRJdGVtLCBib3hXaWR0aCwgbGFiZWxGb250LCBjdHgpO1xuICBjb25zdCBpdGVtSGVpZ2h0ID0gY2FsY3VsYXRlSXRlbUhlaWdodChfaXRlbUhlaWdodCwgbGVnZW5kSXRlbSwgbGFiZWxGb250LmxpbmVIZWlnaHQpO1xuICByZXR1cm4ge1xuICAgIGl0ZW1XaWR0aCxcbiAgICBpdGVtSGVpZ2h0XG4gIH07XG59XG5mdW5jdGlvbiBjYWxjdWxhdGVJdGVtV2lkdGgobGVnZW5kSXRlbSwgYm94V2lkdGgsIGxhYmVsRm9udCwgY3R4KSB7XG4gIGxldCBsZWdlbmRJdGVtVGV4dCA9IGxlZ2VuZEl0ZW0udGV4dDtcbiAgaWYgKGxlZ2VuZEl0ZW1UZXh0ICYmIHR5cGVvZiBsZWdlbmRJdGVtVGV4dCAhPT0gJ3N0cmluZycpIHtcbiAgICBsZWdlbmRJdGVtVGV4dCA9IGxlZ2VuZEl0ZW1UZXh0LnJlZHVjZSgoYSwgYikgPT4gYS5sZW5ndGggPiBiLmxlbmd0aCA/IGEgOiBiKTtcbiAgfVxuICByZXR1cm4gYm94V2lkdGggKyBsYWJlbEZvbnQuc2l6ZSAvIDIgKyBjdHgubWVhc3VyZVRleHQobGVnZW5kSXRlbVRleHQpLndpZHRoO1xufVxuZnVuY3Rpb24gY2FsY3VsYXRlSXRlbUhlaWdodChfaXRlbUhlaWdodCwgbGVnZW5kSXRlbSwgZm9udExpbmVIZWlnaHQpIHtcbiAgbGV0IGl0ZW1IZWlnaHQgPSBfaXRlbUhlaWdodDtcbiAgaWYgKHR5cGVvZiBsZWdlbmRJdGVtLnRleHQgIT09ICdzdHJpbmcnKSB7XG4gICAgaXRlbUhlaWdodCA9IGNhbGN1bGF0ZUxlZ2VuZEl0ZW1IZWlnaHQobGVnZW5kSXRlbSwgZm9udExpbmVIZWlnaHQpO1xuICB9XG4gIHJldHVybiBpdGVtSGVpZ2h0O1xufVxuZnVuY3Rpb24gY2FsY3VsYXRlTGVnZW5kSXRlbUhlaWdodChsZWdlbmRJdGVtLCBmb250TGluZUhlaWdodCkge1xuICBjb25zdCBsYWJlbEhlaWdodCA9IGxlZ2VuZEl0ZW0udGV4dCA/IGxlZ2VuZEl0ZW0udGV4dC5sZW5ndGggOiAwO1xuICByZXR1cm4gZm9udExpbmVIZWlnaHQgKiBsYWJlbEhlaWdodDtcbn1cbmZ1bmN0aW9uIGlzTGlzdGVuZWQodHlwZSwgb3B0cykge1xuICBpZiAoKHR5cGUgPT09ICdtb3VzZW1vdmUnIHx8IHR5cGUgPT09ICdtb3VzZW91dCcpICYmIChvcHRzLm9uSG92ZXIgfHwgb3B0cy5vbkxlYXZlKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmIChvcHRzLm9uQ2xpY2sgJiYgKHR5cGUgPT09ICdjbGljaycgfHwgdHlwZSA9PT0gJ21vdXNldXAnKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cbnZhciBwbHVnaW5fbGVnZW5kID0ge1xuICBpZDogJ2xlZ2VuZCcsXG4gIF9lbGVtZW50OiBMZWdlbmQsXG4gIHN0YXJ0KGNoYXJ0LCBfYXJncywgb3B0aW9ucykge1xuICAgIGNvbnN0IGxlZ2VuZCA9IGNoYXJ0LmxlZ2VuZCA9IG5ldyBMZWdlbmQoe1xuICAgICAgY3R4OiBjaGFydC5jdHgsXG4gICAgICBvcHRpb25zLFxuICAgICAgY2hhcnRcbiAgICB9KTtcbiAgICBsYXlvdXRzLmNvbmZpZ3VyZShjaGFydCwgbGVnZW5kLCBvcHRpb25zKTtcbiAgICBsYXlvdXRzLmFkZEJveChjaGFydCwgbGVnZW5kKTtcbiAgfSxcbiAgc3RvcChjaGFydCkge1xuICAgIGxheW91dHMucmVtb3ZlQm94KGNoYXJ0LCBjaGFydC5sZWdlbmQpO1xuICAgIGRlbGV0ZSBjaGFydC5sZWdlbmQ7XG4gIH0sXG4gIGJlZm9yZVVwZGF0ZShjaGFydCwgX2FyZ3MsIG9wdGlvbnMpIHtcbiAgICBjb25zdCBsZWdlbmQgPSBjaGFydC5sZWdlbmQ7XG4gICAgbGF5b3V0cy5jb25maWd1cmUoY2hhcnQsIGxlZ2VuZCwgb3B0aW9ucyk7XG4gICAgbGVnZW5kLm9wdGlvbnMgPSBvcHRpb25zO1xuICB9LFxuICBhZnRlclVwZGF0ZShjaGFydCkge1xuICAgIGNvbnN0IGxlZ2VuZCA9IGNoYXJ0LmxlZ2VuZDtcbiAgICBsZWdlbmQuYnVpbGRMYWJlbHMoKTtcbiAgICBsZWdlbmQuYWRqdXN0SGl0Qm94ZXMoKTtcbiAgfSxcbiAgYWZ0ZXJFdmVudChjaGFydCwgYXJncykge1xuICAgIGlmICghYXJncy5yZXBsYXkpIHtcbiAgICAgIGNoYXJ0LmxlZ2VuZC5oYW5kbGVFdmVudChhcmdzLmV2ZW50KTtcbiAgICB9XG4gIH0sXG4gIGRlZmF1bHRzOiB7XG4gICAgZGlzcGxheTogdHJ1ZSxcbiAgICBwb3NpdGlvbjogJ3RvcCcsXG4gICAgYWxpZ246ICdjZW50ZXInLFxuICAgIGZ1bGxTaXplOiB0cnVlLFxuICAgIHJldmVyc2U6IGZhbHNlLFxuICAgIHdlaWdodDogMTAwMCxcbiAgICBvbkNsaWNrKGUsIGxlZ2VuZEl0ZW0sIGxlZ2VuZCkge1xuICAgICAgY29uc3QgaW5kZXggPSBsZWdlbmRJdGVtLmRhdGFzZXRJbmRleDtcbiAgICAgIGNvbnN0IGNpID0gbGVnZW5kLmNoYXJ0O1xuICAgICAgaWYgKGNpLmlzRGF0YXNldFZpc2libGUoaW5kZXgpKSB7XG4gICAgICAgIGNpLmhpZGUoaW5kZXgpO1xuICAgICAgICBsZWdlbmRJdGVtLmhpZGRlbiA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjaS5zaG93KGluZGV4KTtcbiAgICAgICAgbGVnZW5kSXRlbS5oaWRkZW4gPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9LFxuICAgIG9uSG92ZXI6IG51bGwsXG4gICAgb25MZWF2ZTogbnVsbCxcbiAgICBsYWJlbHM6IHtcbiAgICAgIGNvbG9yOiBjdHggPT4gY3R4LmNoYXJ0Lm9wdGlvbnMuY29sb3IsXG4gICAgICBib3hXaWR0aDogNDAsXG4gICAgICBwYWRkaW5nOiAxMCxcbiAgICAgIGdlbmVyYXRlTGFiZWxzKGNoYXJ0KSB7XG4gICAgICAgIGNvbnN0IGRhdGFzZXRzID0gY2hhcnQuZGF0YS5kYXRhc2V0cztcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgIGxhYmVsczoge1xuICAgICAgICAgICAgdXNlUG9pbnRTdHlsZSxcbiAgICAgICAgICAgIHBvaW50U3R5bGUsXG4gICAgICAgICAgICB0ZXh0QWxpZ24sXG4gICAgICAgICAgICBjb2xvcixcbiAgICAgICAgICAgIHVzZUJvcmRlclJhZGl1cyxcbiAgICAgICAgICAgIGJvcmRlclJhZGl1c1xuICAgICAgICAgIH1cbiAgICAgICAgfSA9IGNoYXJ0LmxlZ2VuZC5vcHRpb25zO1xuICAgICAgICByZXR1cm4gY2hhcnQuX2dldFNvcnRlZERhdGFzZXRNZXRhcygpLm1hcChtZXRhID0+IHtcbiAgICAgICAgICBjb25zdCBzdHlsZSA9IG1ldGEuY29udHJvbGxlci5nZXRTdHlsZSh1c2VQb2ludFN0eWxlID8gMCA6IHVuZGVmaW5lZCk7XG4gICAgICAgICAgY29uc3QgYm9yZGVyV2lkdGggPSB0b1BhZGRpbmcoc3R5bGUuYm9yZGVyV2lkdGgpO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0ZXh0OiBkYXRhc2V0c1ttZXRhLmluZGV4XS5sYWJlbCxcbiAgICAgICAgICAgIGZpbGxTdHlsZTogc3R5bGUuYmFja2dyb3VuZENvbG9yLFxuICAgICAgICAgICAgZm9udENvbG9yOiBjb2xvcixcbiAgICAgICAgICAgIGhpZGRlbjogIW1ldGEudmlzaWJsZSxcbiAgICAgICAgICAgIGxpbmVDYXA6IHN0eWxlLmJvcmRlckNhcFN0eWxlLFxuICAgICAgICAgICAgbGluZURhc2g6IHN0eWxlLmJvcmRlckRhc2gsXG4gICAgICAgICAgICBsaW5lRGFzaE9mZnNldDogc3R5bGUuYm9yZGVyRGFzaE9mZnNldCxcbiAgICAgICAgICAgIGxpbmVKb2luOiBzdHlsZS5ib3JkZXJKb2luU3R5bGUsXG4gICAgICAgICAgICBsaW5lV2lkdGg6IChib3JkZXJXaWR0aC53aWR0aCArIGJvcmRlcldpZHRoLmhlaWdodCkgLyA0LFxuICAgICAgICAgICAgc3Ryb2tlU3R5bGU6IHN0eWxlLmJvcmRlckNvbG9yLFxuICAgICAgICAgICAgcG9pbnRTdHlsZTogcG9pbnRTdHlsZSB8fCBzdHlsZS5wb2ludFN0eWxlLFxuICAgICAgICAgICAgcm90YXRpb246IHN0eWxlLnJvdGF0aW9uLFxuICAgICAgICAgICAgdGV4dEFsaWduOiB0ZXh0QWxpZ24gfHwgc3R5bGUudGV4dEFsaWduLFxuICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiB1c2VCb3JkZXJSYWRpdXMgJiYgKGJvcmRlclJhZGl1cyB8fCBzdHlsZS5ib3JkZXJSYWRpdXMpLFxuICAgICAgICAgICAgZGF0YXNldEluZGV4OiBtZXRhLmluZGV4XG4gICAgICAgICAgfTtcbiAgICAgICAgfSwgdGhpcyk7XG4gICAgICB9XG4gICAgfSxcbiAgICB0aXRsZToge1xuICAgICAgY29sb3I6IGN0eCA9PiBjdHguY2hhcnQub3B0aW9ucy5jb2xvcixcbiAgICAgIGRpc3BsYXk6IGZhbHNlLFxuICAgICAgcG9zaXRpb246ICdjZW50ZXInLFxuICAgICAgdGV4dDogJydcbiAgICB9XG4gIH0sXG4gIGRlc2NyaXB0b3JzOiB7XG4gICAgX3NjcmlwdGFibGU6IG5hbWUgPT4gIW5hbWUuc3RhcnRzV2l0aCgnb24nKSxcbiAgICBsYWJlbHM6IHtcbiAgICAgIF9zY3JpcHRhYmxlOiBuYW1lID0+ICFbJ2dlbmVyYXRlTGFiZWxzJywgJ2ZpbHRlcicsICdzb3J0J10uaW5jbHVkZXMobmFtZSlcbiAgICB9XG4gIH1cbn07XG5jbGFzcyBUaXRsZSBleHRlbmRzIEVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcihjb25maWcpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuY2hhcnQgPSBjb25maWcuY2hhcnQ7XG4gICAgdGhpcy5vcHRpb25zID0gY29uZmlnLm9wdGlvbnM7XG4gICAgdGhpcy5jdHggPSBjb25maWcuY3R4O1xuICAgIHRoaXMuX3BhZGRpbmcgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy50b3AgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5ib3R0b20gPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5sZWZ0ID0gdW5kZWZpbmVkO1xuICAgIHRoaXMucmlnaHQgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy53aWR0aCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmhlaWdodCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnBvc2l0aW9uID0gdW5kZWZpbmVkO1xuICAgIHRoaXMud2VpZ2h0ID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuZnVsbFNpemUgPSB1bmRlZmluZWQ7XG4gIH1cbiAgdXBkYXRlKG1heFdpZHRoLCBtYXhIZWlnaHQpIHtcbiAgICBjb25zdCBvcHRzID0gdGhpcy5vcHRpb25zO1xuICAgIHRoaXMubGVmdCA9IDA7XG4gICAgdGhpcy50b3AgPSAwO1xuICAgIGlmICghb3B0cy5kaXNwbGF5KSB7XG4gICAgICB0aGlzLndpZHRoID0gdGhpcy5oZWlnaHQgPSB0aGlzLnJpZ2h0ID0gdGhpcy5ib3R0b20gPSAwO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLndpZHRoID0gdGhpcy5yaWdodCA9IG1heFdpZHRoO1xuICAgIHRoaXMuaGVpZ2h0ID0gdGhpcy5ib3R0b20gPSBtYXhIZWlnaHQ7XG4gICAgY29uc3QgbGluZUNvdW50ID0gaXNBcnJheShvcHRzLnRleHQpID8gb3B0cy50ZXh0Lmxlbmd0aCA6IDE7XG4gICAgdGhpcy5fcGFkZGluZyA9IHRvUGFkZGluZyhvcHRzLnBhZGRpbmcpO1xuICAgIGNvbnN0IHRleHRTaXplID0gbGluZUNvdW50ICogdG9Gb250KG9wdHMuZm9udCkubGluZUhlaWdodCArIHRoaXMuX3BhZGRpbmcuaGVpZ2h0O1xuICAgIGlmICh0aGlzLmlzSG9yaXpvbnRhbCgpKSB7XG4gICAgICB0aGlzLmhlaWdodCA9IHRleHRTaXplO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLndpZHRoID0gdGV4dFNpemU7XG4gICAgfVxuICB9XG4gIGlzSG9yaXpvbnRhbCgpIHtcbiAgICBjb25zdCBwb3MgPSB0aGlzLm9wdGlvbnMucG9zaXRpb247XG4gICAgcmV0dXJuIHBvcyA9PT0gJ3RvcCcgfHwgcG9zID09PSAnYm90dG9tJztcbiAgfVxuICBfZHJhd0FyZ3Mob2Zmc2V0KSB7XG4gICAgY29uc3Qge1xuICAgICAgdG9wLFxuICAgICAgbGVmdCxcbiAgICAgIGJvdHRvbSxcbiAgICAgIHJpZ2h0LFxuICAgICAgb3B0aW9uc1xuICAgIH0gPSB0aGlzO1xuICAgIGNvbnN0IGFsaWduID0gb3B0aW9ucy5hbGlnbjtcbiAgICBsZXQgcm90YXRpb24gPSAwO1xuICAgIGxldCBtYXhXaWR0aCwgdGl0bGVYLCB0aXRsZVk7XG4gICAgaWYgKHRoaXMuaXNIb3Jpem9udGFsKCkpIHtcbiAgICAgIHRpdGxlWCA9IF9hbGlnblN0YXJ0RW5kKGFsaWduLCBsZWZ0LCByaWdodCk7XG4gICAgICB0aXRsZVkgPSB0b3AgKyBvZmZzZXQ7XG4gICAgICBtYXhXaWR0aCA9IHJpZ2h0IC0gbGVmdDtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKG9wdGlvbnMucG9zaXRpb24gPT09ICdsZWZ0Jykge1xuICAgICAgICB0aXRsZVggPSBsZWZ0ICsgb2Zmc2V0O1xuICAgICAgICB0aXRsZVkgPSBfYWxpZ25TdGFydEVuZChhbGlnbiwgYm90dG9tLCB0b3ApO1xuICAgICAgICByb3RhdGlvbiA9IFBJICogLTAuNTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRpdGxlWCA9IHJpZ2h0IC0gb2Zmc2V0O1xuICAgICAgICB0aXRsZVkgPSBfYWxpZ25TdGFydEVuZChhbGlnbiwgdG9wLCBib3R0b20pO1xuICAgICAgICByb3RhdGlvbiA9IFBJICogMC41O1xuICAgICAgfVxuICAgICAgbWF4V2lkdGggPSBib3R0b20gLSB0b3A7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICB0aXRsZVgsXG4gICAgICB0aXRsZVksXG4gICAgICBtYXhXaWR0aCxcbiAgICAgIHJvdGF0aW9uXG4gICAgfTtcbiAgfVxuICBkcmF3KCkge1xuICAgIGNvbnN0IGN0eCA9IHRoaXMuY3R4O1xuICAgIGNvbnN0IG9wdHMgPSB0aGlzLm9wdGlvbnM7XG4gICAgaWYgKCFvcHRzLmRpc3BsYXkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZm9udE9wdHMgPSB0b0ZvbnQob3B0cy5mb250KTtcbiAgICBjb25zdCBsaW5lSGVpZ2h0ID0gZm9udE9wdHMubGluZUhlaWdodDtcbiAgICBjb25zdCBvZmZzZXQgPSBsaW5lSGVpZ2h0IC8gMiArIHRoaXMuX3BhZGRpbmcudG9wO1xuICAgIGNvbnN0IHtcbiAgICAgIHRpdGxlWCxcbiAgICAgIHRpdGxlWSxcbiAgICAgIG1heFdpZHRoLFxuICAgICAgcm90YXRpb25cbiAgICB9ID0gdGhpcy5fZHJhd0FyZ3Mob2Zmc2V0KTtcbiAgICByZW5kZXJUZXh0KGN0eCwgb3B0cy50ZXh0LCAwLCAwLCBmb250T3B0cywge1xuICAgICAgY29sb3I6IG9wdHMuY29sb3IsXG4gICAgICBtYXhXaWR0aCxcbiAgICAgIHJvdGF0aW9uLFxuICAgICAgdGV4dEFsaWduOiBfdG9MZWZ0UmlnaHRDZW50ZXIob3B0cy5hbGlnbiksXG4gICAgICB0ZXh0QmFzZWxpbmU6ICdtaWRkbGUnLFxuICAgICAgdHJhbnNsYXRpb246IFt0aXRsZVgsIHRpdGxlWV1cbiAgICB9KTtcbiAgfVxufVxuZnVuY3Rpb24gY3JlYXRlVGl0bGUoY2hhcnQsIHRpdGxlT3B0cykge1xuICBjb25zdCB0aXRsZSA9IG5ldyBUaXRsZSh7XG4gICAgY3R4OiBjaGFydC5jdHgsXG4gICAgb3B0aW9uczogdGl0bGVPcHRzLFxuICAgIGNoYXJ0XG4gIH0pO1xuICBsYXlvdXRzLmNvbmZpZ3VyZShjaGFydCwgdGl0bGUsIHRpdGxlT3B0cyk7XG4gIGxheW91dHMuYWRkQm94KGNoYXJ0LCB0aXRsZSk7XG4gIGNoYXJ0LnRpdGxlQmxvY2sgPSB0aXRsZTtcbn1cbnZhciBwbHVnaW5fdGl0bGUgPSB7XG4gIGlkOiAndGl0bGUnLFxuICBfZWxlbWVudDogVGl0bGUsXG4gIHN0YXJ0KGNoYXJ0LCBfYXJncywgb3B0aW9ucykge1xuICAgIGNyZWF0ZVRpdGxlKGNoYXJ0LCBvcHRpb25zKTtcbiAgfSxcbiAgc3RvcChjaGFydCkge1xuICAgIGNvbnN0IHRpdGxlQmxvY2sgPSBjaGFydC50aXRsZUJsb2NrO1xuICAgIGxheW91dHMucmVtb3ZlQm94KGNoYXJ0LCB0aXRsZUJsb2NrKTtcbiAgICBkZWxldGUgY2hhcnQudGl0bGVCbG9jaztcbiAgfSxcbiAgYmVmb3JlVXBkYXRlKGNoYXJ0LCBfYXJncywgb3B0aW9ucykge1xuICAgIGNvbnN0IHRpdGxlID0gY2hhcnQudGl0bGVCbG9jaztcbiAgICBsYXlvdXRzLmNvbmZpZ3VyZShjaGFydCwgdGl0bGUsIG9wdGlvbnMpO1xuICAgIHRpdGxlLm9wdGlvbnMgPSBvcHRpb25zO1xuICB9LFxuICBkZWZhdWx0czoge1xuICAgIGFsaWduOiAnY2VudGVyJyxcbiAgICBkaXNwbGF5OiBmYWxzZSxcbiAgICBmb250OiB7XG4gICAgICB3ZWlnaHQ6ICdib2xkJ1xuICAgIH0sXG4gICAgZnVsbFNpemU6IHRydWUsXG4gICAgcGFkZGluZzogMTAsXG4gICAgcG9zaXRpb246ICd0b3AnLFxuICAgIHRleHQ6ICcnLFxuICAgIHdlaWdodDogMjAwMFxuICB9LFxuICBkZWZhdWx0Um91dGVzOiB7XG4gICAgY29sb3I6ICdjb2xvcidcbiAgfSxcbiAgZGVzY3JpcHRvcnM6IHtcbiAgICBfc2NyaXB0YWJsZTogdHJ1ZSxcbiAgICBfaW5kZXhhYmxlOiBmYWxzZVxuICB9XG59O1xuY29uc3QgbWFwID0gbmV3IFdlYWtNYXAoKTtcbnZhciBwbHVnaW5fc3VidGl0bGUgPSB7XG4gIGlkOiAnc3VidGl0bGUnLFxuICBzdGFydChjaGFydCwgX2FyZ3MsIG9wdGlvbnMpIHtcbiAgICBjb25zdCB0aXRsZSA9IG5ldyBUaXRsZSh7XG4gICAgICBjdHg6IGNoYXJ0LmN0eCxcbiAgICAgIG9wdGlvbnMsXG4gICAgICBjaGFydFxuICAgIH0pO1xuICAgIGxheW91dHMuY29uZmlndXJlKGNoYXJ0LCB0aXRsZSwgb3B0aW9ucyk7XG4gICAgbGF5b3V0cy5hZGRCb3goY2hhcnQsIHRpdGxlKTtcbiAgICBtYXAuc2V0KGNoYXJ0LCB0aXRsZSk7XG4gIH0sXG4gIHN0b3AoY2hhcnQpIHtcbiAgICBsYXlvdXRzLnJlbW92ZUJveChjaGFydCwgbWFwLmdldChjaGFydCkpO1xuICAgIG1hcC5kZWxldGUoY2hhcnQpO1xuICB9LFxuICBiZWZvcmVVcGRhdGUoY2hhcnQsIF9hcmdzLCBvcHRpb25zKSB7XG4gICAgY29uc3QgdGl0bGUgPSBtYXAuZ2V0KGNoYXJ0KTtcbiAgICBsYXlvdXRzLmNvbmZpZ3VyZShjaGFydCwgdGl0bGUsIG9wdGlvbnMpO1xuICAgIHRpdGxlLm9wdGlvbnMgPSBvcHRpb25zO1xuICB9LFxuICBkZWZhdWx0czoge1xuICAgIGFsaWduOiAnY2VudGVyJyxcbiAgICBkaXNwbGF5OiBmYWxzZSxcbiAgICBmb250OiB7XG4gICAgICB3ZWlnaHQ6ICdub3JtYWwnXG4gICAgfSxcbiAgICBmdWxsU2l6ZTogdHJ1ZSxcbiAgICBwYWRkaW5nOiAwLFxuICAgIHBvc2l0aW9uOiAndG9wJyxcbiAgICB0ZXh0OiAnJyxcbiAgICB3ZWlnaHQ6IDE1MDBcbiAgfSxcbiAgZGVmYXVsdFJvdXRlczoge1xuICAgIGNvbG9yOiAnY29sb3InXG4gIH0sXG4gIGRlc2NyaXB0b3JzOiB7XG4gICAgX3NjcmlwdGFibGU6IHRydWUsXG4gICAgX2luZGV4YWJsZTogZmFsc2VcbiAgfVxufTtcbmNvbnN0IHBvc2l0aW9uZXJzID0ge1xuICBhdmVyYWdlKGl0ZW1zKSB7XG4gICAgaWYgKCFpdGVtcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgbGV0IGksIGxlbjtcbiAgICBsZXQgeFNldCA9IG5ldyBTZXQoKTtcbiAgICBsZXQgeSA9IDA7XG4gICAgbGV0IGNvdW50ID0gMDtcbiAgICBmb3IgKGkgPSAwLCBsZW4gPSBpdGVtcy5sZW5ndGg7IGkgPCBsZW47ICsraSkge1xuICAgICAgY29uc3QgZWwgPSBpdGVtc1tpXS5lbGVtZW50O1xuICAgICAgaWYgKGVsICYmIGVsLmhhc1ZhbHVlKCkpIHtcbiAgICAgICAgY29uc3QgcG9zID0gZWwudG9vbHRpcFBvc2l0aW9uKCk7XG4gICAgICAgIHhTZXQuYWRkKHBvcy54KTtcbiAgICAgICAgeSArPSBwb3MueTtcbiAgICAgICAgKytjb3VudDtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGNvdW50ID09PSAwIHx8IHhTZXQuc2l6ZSA9PT0gMCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCB4QXZlcmFnZSA9IFsuLi54U2V0XS5yZWR1Y2UoKGEsIGIpID0+IGEgKyBiKSAvIHhTZXQuc2l6ZTtcbiAgICByZXR1cm4ge1xuICAgICAgeDogeEF2ZXJhZ2UsXG4gICAgICB5OiB5IC8gY291bnRcbiAgICB9O1xuICB9LFxuICBuZWFyZXN0KGl0ZW1zLCBldmVudFBvc2l0aW9uKSB7XG4gICAgaWYgKCFpdGVtcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgbGV0IHggPSBldmVudFBvc2l0aW9uLng7XG4gICAgbGV0IHkgPSBldmVudFBvc2l0aW9uLnk7XG4gICAgbGV0IG1pbkRpc3RhbmNlID0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO1xuICAgIGxldCBpLCBsZW4sIG5lYXJlc3RFbGVtZW50O1xuICAgIGZvciAoaSA9IDAsIGxlbiA9IGl0ZW1zLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7XG4gICAgICBjb25zdCBlbCA9IGl0ZW1zW2ldLmVsZW1lbnQ7XG4gICAgICBpZiAoZWwgJiYgZWwuaGFzVmFsdWUoKSkge1xuICAgICAgICBjb25zdCBjZW50ZXIgPSBlbC5nZXRDZW50ZXJQb2ludCgpO1xuICAgICAgICBjb25zdCBkID0gZGlzdGFuY2VCZXR3ZWVuUG9pbnRzKGV2ZW50UG9zaXRpb24sIGNlbnRlcik7XG4gICAgICAgIGlmIChkIDwgbWluRGlzdGFuY2UpIHtcbiAgICAgICAgICBtaW5EaXN0YW5jZSA9IGQ7XG4gICAgICAgICAgbmVhcmVzdEVsZW1lbnQgPSBlbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAobmVhcmVzdEVsZW1lbnQpIHtcbiAgICAgIGNvbnN0IHRwID0gbmVhcmVzdEVsZW1lbnQudG9vbHRpcFBvc2l0aW9uKCk7XG4gICAgICB4ID0gdHAueDtcbiAgICAgIHkgPSB0cC55O1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgeCxcbiAgICAgIHlcbiAgICB9O1xuICB9XG59O1xuZnVuY3Rpb24gcHVzaE9yQ29uY2F0KGJhc2UsIHRvUHVzaCkge1xuICBpZiAodG9QdXNoKSB7XG4gICAgaWYgKGlzQXJyYXkodG9QdXNoKSkge1xuICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoYmFzZSwgdG9QdXNoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYmFzZS5wdXNoKHRvUHVzaCk7XG4gICAgfVxuICB9XG4gIHJldHVybiBiYXNlO1xufVxuZnVuY3Rpb24gc3BsaXROZXdsaW5lcyhzdHIpIHtcbiAgaWYgKCh0eXBlb2Ygc3RyID09PSAnc3RyaW5nJyB8fCBzdHIgaW5zdGFuY2VvZiBTdHJpbmcpICYmIHN0ci5pbmRleE9mKCdcXG4nKSA+IC0xKSB7XG4gICAgcmV0dXJuIHN0ci5zcGxpdCgnXFxuJyk7XG4gIH1cbiAgcmV0dXJuIHN0cjtcbn1cbmZ1bmN0aW9uIGNyZWF0ZVRvb2x0aXBJdGVtKGNoYXJ0LCBpdGVtKSB7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50LFxuICAgIGRhdGFzZXRJbmRleCxcbiAgICBpbmRleFxuICB9ID0gaXRlbTtcbiAgY29uc3QgY29udHJvbGxlciA9IGNoYXJ0LmdldERhdGFzZXRNZXRhKGRhdGFzZXRJbmRleCkuY29udHJvbGxlcjtcbiAgY29uc3Qge1xuICAgIGxhYmVsLFxuICAgIHZhbHVlXG4gIH0gPSBjb250cm9sbGVyLmdldExhYmVsQW5kVmFsdWUoaW5kZXgpO1xuICByZXR1cm4ge1xuICAgIGNoYXJ0LFxuICAgIGxhYmVsLFxuICAgIHBhcnNlZDogY29udHJvbGxlci5nZXRQYXJzZWQoaW5kZXgpLFxuICAgIHJhdzogY2hhcnQuZGF0YS5kYXRhc2V0c1tkYXRhc2V0SW5kZXhdLmRhdGFbaW5kZXhdLFxuICAgIGZvcm1hdHRlZFZhbHVlOiB2YWx1ZSxcbiAgICBkYXRhc2V0OiBjb250cm9sbGVyLmdldERhdGFzZXQoKSxcbiAgICBkYXRhSW5kZXg6IGluZGV4LFxuICAgIGRhdGFzZXRJbmRleCxcbiAgICBlbGVtZW50XG4gIH07XG59XG5mdW5jdGlvbiBnZXRUb29sdGlwU2l6ZSh0b29sdGlwLCBvcHRpb25zKSB7XG4gIGNvbnN0IGN0eCA9IHRvb2x0aXAuY2hhcnQuY3R4O1xuICBjb25zdCB7XG4gICAgYm9keSxcbiAgICBmb290ZXIsXG4gICAgdGl0bGVcbiAgfSA9IHRvb2x0aXA7XG4gIGNvbnN0IHtcbiAgICBib3hXaWR0aCxcbiAgICBib3hIZWlnaHRcbiAgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IGJvZHlGb250ID0gdG9Gb250KG9wdGlvbnMuYm9keUZvbnQpO1xuICBjb25zdCB0aXRsZUZvbnQgPSB0b0ZvbnQob3B0aW9ucy50aXRsZUZvbnQpO1xuICBjb25zdCBmb290ZXJGb250ID0gdG9Gb250KG9wdGlvbnMuZm9vdGVyRm9udCk7XG4gIGNvbnN0IHRpdGxlTGluZUNvdW50ID0gdGl0bGUubGVuZ3RoO1xuICBjb25zdCBmb290ZXJMaW5lQ291bnQgPSBmb290ZXIubGVuZ3RoO1xuICBjb25zdCBib2R5TGluZUl0ZW1Db3VudCA9IGJvZHkubGVuZ3RoO1xuICBjb25zdCBwYWRkaW5nID0gdG9QYWRkaW5nKG9wdGlvbnMucGFkZGluZyk7XG4gIGxldCBoZWlnaHQgPSBwYWRkaW5nLmhlaWdodDtcbiAgbGV0IHdpZHRoID0gMDtcbiAgbGV0IGNvbWJpbmVkQm9keUxlbmd0aCA9IGJvZHkucmVkdWNlKChjb3VudCwgYm9keUl0ZW0pID0+IGNvdW50ICsgYm9keUl0ZW0uYmVmb3JlLmxlbmd0aCArIGJvZHlJdGVtLmxpbmVzLmxlbmd0aCArIGJvZHlJdGVtLmFmdGVyLmxlbmd0aCwgMCk7XG4gIGNvbWJpbmVkQm9keUxlbmd0aCArPSB0b29sdGlwLmJlZm9yZUJvZHkubGVuZ3RoICsgdG9vbHRpcC5hZnRlckJvZHkubGVuZ3RoO1xuICBpZiAodGl0bGVMaW5lQ291bnQpIHtcbiAgICBoZWlnaHQgKz0gdGl0bGVMaW5lQ291bnQgKiB0aXRsZUZvbnQubGluZUhlaWdodCArICh0aXRsZUxpbmVDb3VudCAtIDEpICogb3B0aW9ucy50aXRsZVNwYWNpbmcgKyBvcHRpb25zLnRpdGxlTWFyZ2luQm90dG9tO1xuICB9XG4gIGlmIChjb21iaW5lZEJvZHlMZW5ndGgpIHtcbiAgICBjb25zdCBib2R5TGluZUhlaWdodCA9IG9wdGlvbnMuZGlzcGxheUNvbG9ycyA/IE1hdGgubWF4KGJveEhlaWdodCwgYm9keUZvbnQubGluZUhlaWdodCkgOiBib2R5Rm9udC5saW5lSGVpZ2h0O1xuICAgIGhlaWdodCArPSBib2R5TGluZUl0ZW1Db3VudCAqIGJvZHlMaW5lSGVpZ2h0ICsgKGNvbWJpbmVkQm9keUxlbmd0aCAtIGJvZHlMaW5lSXRlbUNvdW50KSAqIGJvZHlGb250LmxpbmVIZWlnaHQgKyAoY29tYmluZWRCb2R5TGVuZ3RoIC0gMSkgKiBvcHRpb25zLmJvZHlTcGFjaW5nO1xuICB9XG4gIGlmIChmb290ZXJMaW5lQ291bnQpIHtcbiAgICBoZWlnaHQgKz0gb3B0aW9ucy5mb290ZXJNYXJnaW5Ub3AgKyBmb290ZXJMaW5lQ291bnQgKiBmb290ZXJGb250LmxpbmVIZWlnaHQgKyAoZm9vdGVyTGluZUNvdW50IC0gMSkgKiBvcHRpb25zLmZvb3RlclNwYWNpbmc7XG4gIH1cbiAgbGV0IHdpZHRoUGFkZGluZyA9IDA7XG4gIGNvbnN0IG1heExpbmVXaWR0aCA9IGZ1bmN0aW9uIChsaW5lKSB7XG4gICAgd2lkdGggPSBNYXRoLm1heCh3aWR0aCwgY3R4Lm1lYXN1cmVUZXh0KGxpbmUpLndpZHRoICsgd2lkdGhQYWRkaW5nKTtcbiAgfTtcbiAgY3R4LnNhdmUoKTtcbiAgY3R4LmZvbnQgPSB0aXRsZUZvbnQuc3RyaW5nO1xuICBlYWNoKHRvb2x0aXAudGl0bGUsIG1heExpbmVXaWR0aCk7XG4gIGN0eC5mb250ID0gYm9keUZvbnQuc3RyaW5nO1xuICBlYWNoKHRvb2x0aXAuYmVmb3JlQm9keS5jb25jYXQodG9vbHRpcC5hZnRlckJvZHkpLCBtYXhMaW5lV2lkdGgpO1xuICB3aWR0aFBhZGRpbmcgPSBvcHRpb25zLmRpc3BsYXlDb2xvcnMgPyBib3hXaWR0aCArIDIgKyBvcHRpb25zLmJveFBhZGRpbmcgOiAwO1xuICBlYWNoKGJvZHksIGJvZHlJdGVtID0+IHtcbiAgICBlYWNoKGJvZHlJdGVtLmJlZm9yZSwgbWF4TGluZVdpZHRoKTtcbiAgICBlYWNoKGJvZHlJdGVtLmxpbmVzLCBtYXhMaW5lV2lkdGgpO1xuICAgIGVhY2goYm9keUl0ZW0uYWZ0ZXIsIG1heExpbmVXaWR0aCk7XG4gIH0pO1xuICB3aWR0aFBhZGRpbmcgPSAwO1xuICBjdHguZm9udCA9IGZvb3RlckZvbnQuc3RyaW5nO1xuICBlYWNoKHRvb2x0aXAuZm9vdGVyLCBtYXhMaW5lV2lkdGgpO1xuICBjdHgucmVzdG9yZSgpO1xuICB3aWR0aCArPSBwYWRkaW5nLndpZHRoO1xuICByZXR1cm4ge1xuICAgIHdpZHRoLFxuICAgIGhlaWdodFxuICB9O1xufVxuZnVuY3Rpb24gZGV0ZXJtaW5lWUFsaWduKGNoYXJ0LCBzaXplKSB7XG4gIGNvbnN0IHtcbiAgICB5LFxuICAgIGhlaWdodFxuICB9ID0gc2l6ZTtcbiAgaWYgKHkgPCBoZWlnaHQgLyAyKSB7XG4gICAgcmV0dXJuICd0b3AnO1xuICB9IGVsc2UgaWYgKHkgPiBjaGFydC5oZWlnaHQgLSBoZWlnaHQgLyAyKSB7XG4gICAgcmV0dXJuICdib3R0b20nO1xuICB9XG4gIHJldHVybiAnY2VudGVyJztcbn1cbmZ1bmN0aW9uIGRvZXNOb3RGaXRXaXRoQWxpZ24oeEFsaWduLCBjaGFydCwgb3B0aW9ucywgc2l6ZSkge1xuICBjb25zdCB7XG4gICAgeCxcbiAgICB3aWR0aFxuICB9ID0gc2l6ZTtcbiAgY29uc3QgY2FyZXQgPSBvcHRpb25zLmNhcmV0U2l6ZSArIG9wdGlvbnMuY2FyZXRQYWRkaW5nO1xuICBpZiAoeEFsaWduID09PSAnbGVmdCcgJiYgeCArIHdpZHRoICsgY2FyZXQgPiBjaGFydC53aWR0aCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmICh4QWxpZ24gPT09ICdyaWdodCcgJiYgeCAtIHdpZHRoIC0gY2FyZXQgPCAwKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cbmZ1bmN0aW9uIGRldGVybWluZVhBbGlnbihjaGFydCwgb3B0aW9ucywgc2l6ZSwgeUFsaWduKSB7XG4gIGNvbnN0IHtcbiAgICB4LFxuICAgIHdpZHRoXG4gIH0gPSBzaXplO1xuICBjb25zdCB7XG4gICAgd2lkdGg6IGNoYXJ0V2lkdGgsXG4gICAgY2hhcnRBcmVhOiB7XG4gICAgICBsZWZ0LFxuICAgICAgcmlnaHRcbiAgICB9XG4gIH0gPSBjaGFydDtcbiAgbGV0IHhBbGlnbiA9ICdjZW50ZXInO1xuICBpZiAoeUFsaWduID09PSAnY2VudGVyJykge1xuICAgIHhBbGlnbiA9IHggPD0gKGxlZnQgKyByaWdodCkgLyAyID8gJ2xlZnQnIDogJ3JpZ2h0JztcbiAgfSBlbHNlIGlmICh4IDw9IHdpZHRoIC8gMikge1xuICAgIHhBbGlnbiA9ICdsZWZ0JztcbiAgfSBlbHNlIGlmICh4ID49IGNoYXJ0V2lkdGggLSB3aWR0aCAvIDIpIHtcbiAgICB4QWxpZ24gPSAncmlnaHQnO1xuICB9XG4gIGlmIChkb2VzTm90Rml0V2l0aEFsaWduKHhBbGlnbiwgY2hhcnQsIG9wdGlvbnMsIHNpemUpKSB7XG4gICAgeEFsaWduID0gJ2NlbnRlcic7XG4gIH1cbiAgcmV0dXJuIHhBbGlnbjtcbn1cbmZ1bmN0aW9uIGRldGVybWluZUFsaWdubWVudChjaGFydCwgb3B0aW9ucywgc2l6ZSkge1xuICBjb25zdCB5QWxpZ24gPSBzaXplLnlBbGlnbiB8fCBvcHRpb25zLnlBbGlnbiB8fCBkZXRlcm1pbmVZQWxpZ24oY2hhcnQsIHNpemUpO1xuICByZXR1cm4ge1xuICAgIHhBbGlnbjogc2l6ZS54QWxpZ24gfHwgb3B0aW9ucy54QWxpZ24gfHwgZGV0ZXJtaW5lWEFsaWduKGNoYXJ0LCBvcHRpb25zLCBzaXplLCB5QWxpZ24pLFxuICAgIHlBbGlnblxuICB9O1xufVxuZnVuY3Rpb24gYWxpZ25YKHNpemUsIHhBbGlnbikge1xuICBsZXQge1xuICAgIHgsXG4gICAgd2lkdGhcbiAgfSA9IHNpemU7XG4gIGlmICh4QWxpZ24gPT09ICdyaWdodCcpIHtcbiAgICB4IC09IHdpZHRoO1xuICB9IGVsc2UgaWYgKHhBbGlnbiA9PT0gJ2NlbnRlcicpIHtcbiAgICB4IC09IHdpZHRoIC8gMjtcbiAgfVxuICByZXR1cm4geDtcbn1cbmZ1bmN0aW9uIGFsaWduWShzaXplLCB5QWxpZ24sIHBhZGRpbmdBbmRTaXplKSB7XG4gIGxldCB7XG4gICAgeSxcbiAgICBoZWlnaHRcbiAgfSA9IHNpemU7XG4gIGlmICh5QWxpZ24gPT09ICd0b3AnKSB7XG4gICAgeSArPSBwYWRkaW5nQW5kU2l6ZTtcbiAgfSBlbHNlIGlmICh5QWxpZ24gPT09ICdib3R0b20nKSB7XG4gICAgeSAtPSBoZWlnaHQgKyBwYWRkaW5nQW5kU2l6ZTtcbiAgfSBlbHNlIHtcbiAgICB5IC09IGhlaWdodCAvIDI7XG4gIH1cbiAgcmV0dXJuIHk7XG59XG5mdW5jdGlvbiBnZXRCYWNrZ3JvdW5kUG9pbnQob3B0aW9ucywgc2l6ZSwgYWxpZ25tZW50LCBjaGFydCkge1xuICBjb25zdCB7XG4gICAgY2FyZXRTaXplLFxuICAgIGNhcmV0UGFkZGluZyxcbiAgICBjb3JuZXJSYWRpdXNcbiAgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IHtcbiAgICB4QWxpZ24sXG4gICAgeUFsaWduXG4gIH0gPSBhbGlnbm1lbnQ7XG4gIGNvbnN0IHBhZGRpbmdBbmRTaXplID0gY2FyZXRTaXplICsgY2FyZXRQYWRkaW5nO1xuICBjb25zdCB7XG4gICAgdG9wTGVmdCxcbiAgICB0b3BSaWdodCxcbiAgICBib3R0b21MZWZ0LFxuICAgIGJvdHRvbVJpZ2h0XG4gIH0gPSB0b1RSQkxDb3JuZXJzKGNvcm5lclJhZGl1cyk7XG4gIGxldCB4ID0gYWxpZ25YKHNpemUsIHhBbGlnbik7XG4gIGNvbnN0IHkgPSBhbGlnblkoc2l6ZSwgeUFsaWduLCBwYWRkaW5nQW5kU2l6ZSk7XG4gIGlmICh5QWxpZ24gPT09ICdjZW50ZXInKSB7XG4gICAgaWYgKHhBbGlnbiA9PT0gJ2xlZnQnKSB7XG4gICAgICB4ICs9IHBhZGRpbmdBbmRTaXplO1xuICAgIH0gZWxzZSBpZiAoeEFsaWduID09PSAncmlnaHQnKSB7XG4gICAgICB4IC09IHBhZGRpbmdBbmRTaXplO1xuICAgIH1cbiAgfSBlbHNlIGlmICh4QWxpZ24gPT09ICdsZWZ0Jykge1xuICAgIHggLT0gTWF0aC5tYXgodG9wTGVmdCwgYm90dG9tTGVmdCkgKyBjYXJldFNpemU7XG4gIH0gZWxzZSBpZiAoeEFsaWduID09PSAncmlnaHQnKSB7XG4gICAgeCArPSBNYXRoLm1heCh0b3BSaWdodCwgYm90dG9tUmlnaHQpICsgY2FyZXRTaXplO1xuICB9XG4gIHJldHVybiB7XG4gICAgeDogX2xpbWl0VmFsdWUoeCwgMCwgY2hhcnQud2lkdGggLSBzaXplLndpZHRoKSxcbiAgICB5OiBfbGltaXRWYWx1ZSh5LCAwLCBjaGFydC5oZWlnaHQgLSBzaXplLmhlaWdodClcbiAgfTtcbn1cbmZ1bmN0aW9uIGdldEFsaWduZWRYKHRvb2x0aXAsIGFsaWduLCBvcHRpb25zKSB7XG4gIGNvbnN0IHBhZGRpbmcgPSB0b1BhZGRpbmcob3B0aW9ucy5wYWRkaW5nKTtcbiAgcmV0dXJuIGFsaWduID09PSAnY2VudGVyJyA/IHRvb2x0aXAueCArIHRvb2x0aXAud2lkdGggLyAyIDogYWxpZ24gPT09ICdyaWdodCcgPyB0b29sdGlwLnggKyB0b29sdGlwLndpZHRoIC0gcGFkZGluZy5yaWdodCA6IHRvb2x0aXAueCArIHBhZGRpbmcubGVmdDtcbn1cbmZ1bmN0aW9uIGdldEJlZm9yZUFmdGVyQm9keUxpbmVzKGNhbGxiYWNrKSB7XG4gIHJldHVybiBwdXNoT3JDb25jYXQoW10sIHNwbGl0TmV3bGluZXMoY2FsbGJhY2spKTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZVRvb2x0aXBDb250ZXh0KHBhcmVudCwgdG9vbHRpcCwgdG9vbHRpcEl0ZW1zKSB7XG4gIHJldHVybiBjcmVhdGVDb250ZXh0KHBhcmVudCwge1xuICAgIHRvb2x0aXAsXG4gICAgdG9vbHRpcEl0ZW1zLFxuICAgIHR5cGU6ICd0b29sdGlwJ1xuICB9KTtcbn1cbmZ1bmN0aW9uIG92ZXJyaWRlQ2FsbGJhY2tzKGNhbGxiYWNrcywgY29udGV4dCkge1xuICBjb25zdCBvdmVycmlkZSA9IGNvbnRleHQgJiYgY29udGV4dC5kYXRhc2V0ICYmIGNvbnRleHQuZGF0YXNldC50b29sdGlwICYmIGNvbnRleHQuZGF0YXNldC50b29sdGlwLmNhbGxiYWNrcztcbiAgcmV0dXJuIG92ZXJyaWRlID8gY2FsbGJhY2tzLm92ZXJyaWRlKG92ZXJyaWRlKSA6IGNhbGxiYWNrcztcbn1cbmNvbnN0IGRlZmF1bHRDYWxsYmFja3MgPSB7XG4gIGJlZm9yZVRpdGxlOiBub29wLFxuICB0aXRsZSh0b29sdGlwSXRlbXMpIHtcbiAgICBpZiAodG9vbHRpcEl0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGl0ZW0gPSB0b29sdGlwSXRlbXNbMF07XG4gICAgICBjb25zdCBsYWJlbHMgPSBpdGVtLmNoYXJ0LmRhdGEubGFiZWxzO1xuICAgICAgY29uc3QgbGFiZWxDb3VudCA9IGxhYmVscyA/IGxhYmVscy5sZW5ndGggOiAwO1xuICAgICAgaWYgKHRoaXMgJiYgdGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5tb2RlID09PSAnZGF0YXNldCcpIHtcbiAgICAgICAgcmV0dXJuIGl0ZW0uZGF0YXNldC5sYWJlbCB8fCAnJztcbiAgICAgIH0gZWxzZSBpZiAoaXRlbS5sYWJlbCkge1xuICAgICAgICByZXR1cm4gaXRlbS5sYWJlbDtcbiAgICAgIH0gZWxzZSBpZiAobGFiZWxDb3VudCA+IDAgJiYgaXRlbS5kYXRhSW5kZXggPCBsYWJlbENvdW50KSB7XG4gICAgICAgIHJldHVybiBsYWJlbHNbaXRlbS5kYXRhSW5kZXhdO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gJyc7XG4gIH0sXG4gIGFmdGVyVGl0bGU6IG5vb3AsXG4gIGJlZm9yZUJvZHk6IG5vb3AsXG4gIGJlZm9yZUxhYmVsOiBub29wLFxuICBsYWJlbCh0b29sdGlwSXRlbSkge1xuICAgIGlmICh0aGlzICYmIHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMubW9kZSA9PT0gJ2RhdGFzZXQnKSB7XG4gICAgICByZXR1cm4gdG9vbHRpcEl0ZW0ubGFiZWwgKyAnOiAnICsgdG9vbHRpcEl0ZW0uZm9ybWF0dGVkVmFsdWUgfHwgdG9vbHRpcEl0ZW0uZm9ybWF0dGVkVmFsdWU7XG4gICAgfVxuICAgIGxldCBsYWJlbCA9IHRvb2x0aXBJdGVtLmRhdGFzZXQubGFiZWwgfHwgJyc7XG4gICAgaWYgKGxhYmVsKSB7XG4gICAgICBsYWJlbCArPSAnOiAnO1xuICAgIH1cbiAgICBjb25zdCB2YWx1ZSA9IHRvb2x0aXBJdGVtLmZvcm1hdHRlZFZhbHVlO1xuICAgIGlmICghaXNOdWxsT3JVbmRlZih2YWx1ZSkpIHtcbiAgICAgIGxhYmVsICs9IHZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gbGFiZWw7XG4gIH0sXG4gIGxhYmVsQ29sb3IodG9vbHRpcEl0ZW0pIHtcbiAgICBjb25zdCBtZXRhID0gdG9vbHRpcEl0ZW0uY2hhcnQuZ2V0RGF0YXNldE1ldGEodG9vbHRpcEl0ZW0uZGF0YXNldEluZGV4KTtcbiAgICBjb25zdCBvcHRpb25zID0gbWV0YS5jb250cm9sbGVyLmdldFN0eWxlKHRvb2x0aXBJdGVtLmRhdGFJbmRleCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGJvcmRlckNvbG9yOiBvcHRpb25zLmJvcmRlckNvbG9yLFxuICAgICAgYmFja2dyb3VuZENvbG9yOiBvcHRpb25zLmJhY2tncm91bmRDb2xvcixcbiAgICAgIGJvcmRlcldpZHRoOiBvcHRpb25zLmJvcmRlcldpZHRoLFxuICAgICAgYm9yZGVyRGFzaDogb3B0aW9ucy5ib3JkZXJEYXNoLFxuICAgICAgYm9yZGVyRGFzaE9mZnNldDogb3B0aW9ucy5ib3JkZXJEYXNoT2Zmc2V0LFxuICAgICAgYm9yZGVyUmFkaXVzOiAwXG4gICAgfTtcbiAgfSxcbiAgbGFiZWxUZXh0Q29sb3IoKSB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5ib2R5Q29sb3I7XG4gIH0sXG4gIGxhYmVsUG9pbnRTdHlsZSh0b29sdGlwSXRlbSkge1xuICAgIGNvbnN0IG1ldGEgPSB0b29sdGlwSXRlbS5jaGFydC5nZXREYXRhc2V0TWV0YSh0b29sdGlwSXRlbS5kYXRhc2V0SW5kZXgpO1xuICAgIGNvbnN0IG9wdGlvbnMgPSBtZXRhLmNvbnRyb2xsZXIuZ2V0U3R5bGUodG9vbHRpcEl0ZW0uZGF0YUluZGV4KTtcbiAgICByZXR1cm4ge1xuICAgICAgcG9pbnRTdHlsZTogb3B0aW9ucy5wb2ludFN0eWxlLFxuICAgICAgcm90YXRpb246IG9wdGlvbnMucm90YXRpb25cbiAgICB9O1xuICB9LFxuICBhZnRlckxhYmVsOiBub29wLFxuICBhZnRlckJvZHk6IG5vb3AsXG4gIGJlZm9yZUZvb3Rlcjogbm9vcCxcbiAgZm9vdGVyOiBub29wLFxuICBhZnRlckZvb3Rlcjogbm9vcFxufTtcbmZ1bmN0aW9uIGludm9rZUNhbGxiYWNrV2l0aEZhbGxiYWNrKGNhbGxiYWNrcywgbmFtZSwgY3R4LCBhcmcpIHtcbiAgY29uc3QgcmVzdWx0ID0gY2FsbGJhY2tzW25hbWVdLmNhbGwoY3R4LCBhcmcpO1xuICBpZiAodHlwZW9mIHJlc3VsdCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gZGVmYXVsdENhbGxiYWNrc1tuYW1lXS5jYWxsKGN0eCwgYXJnKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxubGV0IFRvb2x0aXAgPSAvKiNfX1BVUkVfXyovKCgpID0+IHtcbiAgY2xhc3MgVG9vbHRpcCBleHRlbmRzIEVsZW1lbnQge1xuICAgIHN0YXRpYyBwb3NpdGlvbmVycyA9IHBvc2l0aW9uZXJzO1xuICAgIGNvbnN0cnVjdG9yKGNvbmZpZykge1xuICAgICAgc3VwZXIoKTtcbiAgICAgIHRoaXMub3BhY2l0eSA9IDA7XG4gICAgICB0aGlzLl9hY3RpdmUgPSBbXTtcbiAgICAgIHRoaXMuX2V2ZW50UG9zaXRpb24gPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl9zaXplID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fY2FjaGVkQW5pbWF0aW9ucyA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX3Rvb2x0aXBJdGVtcyA9IFtdO1xuICAgICAgdGhpcy4kYW5pbWF0aW9ucyA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuJGNvbnRleHQgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLmNoYXJ0ID0gY29uZmlnLmNoYXJ0O1xuICAgICAgdGhpcy5vcHRpb25zID0gY29uZmlnLm9wdGlvbnM7XG4gICAgICB0aGlzLmRhdGFQb2ludHMgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLnRpdGxlID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5iZWZvcmVCb2R5ID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5ib2R5ID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5hZnRlckJvZHkgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLmZvb3RlciA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMueEFsaWduID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy55QWxpZ24gPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLnggPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLnkgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLmhlaWdodCA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMud2lkdGggPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLmNhcmV0WCA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuY2FyZXRZID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5sYWJlbENvbG9ycyA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMubGFiZWxQb2ludFN0eWxlcyA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMubGFiZWxUZXh0Q29sb3JzID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBpbml0aWFsaXplKG9wdGlvbnMpIHtcbiAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgICB0aGlzLl9jYWNoZWRBbmltYXRpb25zID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy4kY29udGV4dCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgX3Jlc29sdmVBbmltYXRpb25zKCkge1xuICAgICAgY29uc3QgY2FjaGVkID0gdGhpcy5fY2FjaGVkQW5pbWF0aW9ucztcbiAgICAgIGlmIChjYWNoZWQpIHtcbiAgICAgICAgcmV0dXJuIGNhY2hlZDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNoYXJ0ID0gdGhpcy5jaGFydDtcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMuc2V0Q29udGV4dCh0aGlzLmdldENvbnRleHQoKSk7XG4gICAgICBjb25zdCBvcHRzID0gb3B0aW9ucy5lbmFibGVkICYmIGNoYXJ0Lm9wdGlvbnMuYW5pbWF0aW9uICYmIG9wdGlvbnMuYW5pbWF0aW9ucztcbiAgICAgIGNvbnN0IGFuaW1hdGlvbnMgPSBuZXcgQW5pbWF0aW9ucyh0aGlzLmNoYXJ0LCBvcHRzKTtcbiAgICAgIGlmIChvcHRzLl9jYWNoZWFibGUpIHtcbiAgICAgICAgdGhpcy5fY2FjaGVkQW5pbWF0aW9ucyA9IE9iamVjdC5mcmVlemUoYW5pbWF0aW9ucyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYW5pbWF0aW9ucztcbiAgICB9XG4gICAgZ2V0Q29udGV4dCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRjb250ZXh0IHx8ICh0aGlzLiRjb250ZXh0ID0gY3JlYXRlVG9vbHRpcENvbnRleHQodGhpcy5jaGFydC5nZXRDb250ZXh0KCksIHRoaXMsIHRoaXMuX3Rvb2x0aXBJdGVtcykpO1xuICAgIH1cbiAgICBnZXRUaXRsZShjb250ZXh0LCBvcHRpb25zKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGNhbGxiYWNrc1xuICAgICAgfSA9IG9wdGlvbnM7XG4gICAgICBjb25zdCBiZWZvcmVUaXRsZSA9IGludm9rZUNhbGxiYWNrV2l0aEZhbGxiYWNrKGNhbGxiYWNrcywgJ2JlZm9yZVRpdGxlJywgdGhpcywgY29udGV4dCk7XG4gICAgICBjb25zdCB0aXRsZSA9IGludm9rZUNhbGxiYWNrV2l0aEZhbGxiYWNrKGNhbGxiYWNrcywgJ3RpdGxlJywgdGhpcywgY29udGV4dCk7XG4gICAgICBjb25zdCBhZnRlclRpdGxlID0gaW52b2tlQ2FsbGJhY2tXaXRoRmFsbGJhY2soY2FsbGJhY2tzLCAnYWZ0ZXJUaXRsZScsIHRoaXMsIGNvbnRleHQpO1xuICAgICAgbGV0IGxpbmVzID0gW107XG4gICAgICBsaW5lcyA9IHB1c2hPckNvbmNhdChsaW5lcywgc3BsaXROZXdsaW5lcyhiZWZvcmVUaXRsZSkpO1xuICAgICAgbGluZXMgPSBwdXNoT3JDb25jYXQobGluZXMsIHNwbGl0TmV3bGluZXModGl0bGUpKTtcbiAgICAgIGxpbmVzID0gcHVzaE9yQ29uY2F0KGxpbmVzLCBzcGxpdE5ld2xpbmVzKGFmdGVyVGl0bGUpKTtcbiAgICAgIHJldHVybiBsaW5lcztcbiAgICB9XG4gICAgZ2V0QmVmb3JlQm9keSh0b29sdGlwSXRlbXMsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBnZXRCZWZvcmVBZnRlckJvZHlMaW5lcyhpbnZva2VDYWxsYmFja1dpdGhGYWxsYmFjayhvcHRpb25zLmNhbGxiYWNrcywgJ2JlZm9yZUJvZHknLCB0aGlzLCB0b29sdGlwSXRlbXMpKTtcbiAgICB9XG4gICAgZ2V0Qm9keSh0b29sdGlwSXRlbXMsIG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgY2FsbGJhY2tzXG4gICAgICB9ID0gb3B0aW9ucztcbiAgICAgIGNvbnN0IGJvZHlJdGVtcyA9IFtdO1xuICAgICAgZWFjaCh0b29sdGlwSXRlbXMsIGNvbnRleHQgPT4ge1xuICAgICAgICBjb25zdCBib2R5SXRlbSA9IHtcbiAgICAgICAgICBiZWZvcmU6IFtdLFxuICAgICAgICAgIGxpbmVzOiBbXSxcbiAgICAgICAgICBhZnRlcjogW11cbiAgICAgICAgfTtcbiAgICAgICAgY29uc3Qgc2NvcGVkID0gb3ZlcnJpZGVDYWxsYmFja3MoY2FsbGJhY2tzLCBjb250ZXh0KTtcbiAgICAgICAgcHVzaE9yQ29uY2F0KGJvZHlJdGVtLmJlZm9yZSwgc3BsaXROZXdsaW5lcyhpbnZva2VDYWxsYmFja1dpdGhGYWxsYmFjayhzY29wZWQsICdiZWZvcmVMYWJlbCcsIHRoaXMsIGNvbnRleHQpKSk7XG4gICAgICAgIHB1c2hPckNvbmNhdChib2R5SXRlbS5saW5lcywgaW52b2tlQ2FsbGJhY2tXaXRoRmFsbGJhY2soc2NvcGVkLCAnbGFiZWwnLCB0aGlzLCBjb250ZXh0KSk7XG4gICAgICAgIHB1c2hPckNvbmNhdChib2R5SXRlbS5hZnRlciwgc3BsaXROZXdsaW5lcyhpbnZva2VDYWxsYmFja1dpdGhGYWxsYmFjayhzY29wZWQsICdhZnRlckxhYmVsJywgdGhpcywgY29udGV4dCkpKTtcbiAgICAgICAgYm9keUl0ZW1zLnB1c2goYm9keUl0ZW0pO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gYm9keUl0ZW1zO1xuICAgIH1cbiAgICBnZXRBZnRlckJvZHkodG9vbHRpcEl0ZW1zLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gZ2V0QmVmb3JlQWZ0ZXJCb2R5TGluZXMoaW52b2tlQ2FsbGJhY2tXaXRoRmFsbGJhY2sob3B0aW9ucy5jYWxsYmFja3MsICdhZnRlckJvZHknLCB0aGlzLCB0b29sdGlwSXRlbXMpKTtcbiAgICB9XG4gICAgZ2V0Rm9vdGVyKHRvb2x0aXBJdGVtcywgb3B0aW9ucykge1xuICAgICAgY29uc3Qge1xuICAgICAgICBjYWxsYmFja3NcbiAgICAgIH0gPSBvcHRpb25zO1xuICAgICAgY29uc3QgYmVmb3JlRm9vdGVyID0gaW52b2tlQ2FsbGJhY2tXaXRoRmFsbGJhY2soY2FsbGJhY2tzLCAnYmVmb3JlRm9vdGVyJywgdGhpcywgdG9vbHRpcEl0ZW1zKTtcbiAgICAgIGNvbnN0IGZvb3RlciA9IGludm9rZUNhbGxiYWNrV2l0aEZhbGxiYWNrKGNhbGxiYWNrcywgJ2Zvb3RlcicsIHRoaXMsIHRvb2x0aXBJdGVtcyk7XG4gICAgICBjb25zdCBhZnRlckZvb3RlciA9IGludm9rZUNhbGxiYWNrV2l0aEZhbGxiYWNrKGNhbGxiYWNrcywgJ2FmdGVyRm9vdGVyJywgdGhpcywgdG9vbHRpcEl0ZW1zKTtcbiAgICAgIGxldCBsaW5lcyA9IFtdO1xuICAgICAgbGluZXMgPSBwdXNoT3JDb25jYXQobGluZXMsIHNwbGl0TmV3bGluZXMoYmVmb3JlRm9vdGVyKSk7XG4gICAgICBsaW5lcyA9IHB1c2hPckNvbmNhdChsaW5lcywgc3BsaXROZXdsaW5lcyhmb290ZXIpKTtcbiAgICAgIGxpbmVzID0gcHVzaE9yQ29uY2F0KGxpbmVzLCBzcGxpdE5ld2xpbmVzKGFmdGVyRm9vdGVyKSk7XG4gICAgICByZXR1cm4gbGluZXM7XG4gICAgfVxuICAgIF9jcmVhdGVJdGVtcyhvcHRpb25zKSB7XG4gICAgICBjb25zdCBhY3RpdmUgPSB0aGlzLl9hY3RpdmU7XG4gICAgICBjb25zdCBkYXRhID0gdGhpcy5jaGFydC5kYXRhO1xuICAgICAgY29uc3QgbGFiZWxDb2xvcnMgPSBbXTtcbiAgICAgIGNvbnN0IGxhYmVsUG9pbnRTdHlsZXMgPSBbXTtcbiAgICAgIGNvbnN0IGxhYmVsVGV4dENvbG9ycyA9IFtdO1xuICAgICAgbGV0IHRvb2x0aXBJdGVtcyA9IFtdO1xuICAgICAgbGV0IGksIGxlbjtcbiAgICAgIGZvciAoaSA9IDAsIGxlbiA9IGFjdGl2ZS5sZW5ndGg7IGkgPCBsZW47ICsraSkge1xuICAgICAgICB0b29sdGlwSXRlbXMucHVzaChjcmVhdGVUb29sdGlwSXRlbSh0aGlzLmNoYXJ0LCBhY3RpdmVbaV0pKTtcbiAgICAgIH1cbiAgICAgIGlmIChvcHRpb25zLmZpbHRlcikge1xuICAgICAgICB0b29sdGlwSXRlbXMgPSB0b29sdGlwSXRlbXMuZmlsdGVyKChlbGVtZW50LCBpbmRleCwgYXJyYXkpID0+IG9wdGlvbnMuZmlsdGVyKGVsZW1lbnQsIGluZGV4LCBhcnJheSwgZGF0YSkpO1xuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbnMuaXRlbVNvcnQpIHtcbiAgICAgICAgdG9vbHRpcEl0ZW1zID0gdG9vbHRpcEl0ZW1zLnNvcnQoKGEsIGIpID0+IG9wdGlvbnMuaXRlbVNvcnQoYSwgYiwgZGF0YSkpO1xuICAgICAgfVxuICAgICAgZWFjaCh0b29sdGlwSXRlbXMsIGNvbnRleHQgPT4ge1xuICAgICAgICBjb25zdCBzY29wZWQgPSBvdmVycmlkZUNhbGxiYWNrcyhvcHRpb25zLmNhbGxiYWNrcywgY29udGV4dCk7XG4gICAgICAgIGxhYmVsQ29sb3JzLnB1c2goaW52b2tlQ2FsbGJhY2tXaXRoRmFsbGJhY2soc2NvcGVkLCAnbGFiZWxDb2xvcicsIHRoaXMsIGNvbnRleHQpKTtcbiAgICAgICAgbGFiZWxQb2ludFN0eWxlcy5wdXNoKGludm9rZUNhbGxiYWNrV2l0aEZhbGxiYWNrKHNjb3BlZCwgJ2xhYmVsUG9pbnRTdHlsZScsIHRoaXMsIGNvbnRleHQpKTtcbiAgICAgICAgbGFiZWxUZXh0Q29sb3JzLnB1c2goaW52b2tlQ2FsbGJhY2tXaXRoRmFsbGJhY2soc2NvcGVkLCAnbGFiZWxUZXh0Q29sb3InLCB0aGlzLCBjb250ZXh0KSk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMubGFiZWxDb2xvcnMgPSBsYWJlbENvbG9ycztcbiAgICAgIHRoaXMubGFiZWxQb2ludFN0eWxlcyA9IGxhYmVsUG9pbnRTdHlsZXM7XG4gICAgICB0aGlzLmxhYmVsVGV4dENvbG9ycyA9IGxhYmVsVGV4dENvbG9ycztcbiAgICAgIHRoaXMuZGF0YVBvaW50cyA9IHRvb2x0aXBJdGVtcztcbiAgICAgIHJldHVybiB0b29sdGlwSXRlbXM7XG4gICAgfVxuICAgIHVwZGF0ZShjaGFuZ2VkLCByZXBsYXkpIHtcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMuc2V0Q29udGV4dCh0aGlzLmdldENvbnRleHQoKSk7XG4gICAgICBjb25zdCBhY3RpdmUgPSB0aGlzLl9hY3RpdmU7XG4gICAgICBsZXQgcHJvcGVydGllcztcbiAgICAgIGxldCB0b29sdGlwSXRlbXMgPSBbXTtcbiAgICAgIGlmICghYWN0aXZlLmxlbmd0aCkge1xuICAgICAgICBpZiAodGhpcy5vcGFjaXR5ICE9PSAwKSB7XG4gICAgICAgICAgcHJvcGVydGllcyA9IHtcbiAgICAgICAgICAgIG9wYWNpdHk6IDBcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBwb3NpdGlvbiA9IHBvc2l0aW9uZXJzW29wdGlvbnMucG9zaXRpb25dLmNhbGwodGhpcywgYWN0aXZlLCB0aGlzLl9ldmVudFBvc2l0aW9uKTtcbiAgICAgICAgdG9vbHRpcEl0ZW1zID0gdGhpcy5fY3JlYXRlSXRlbXMob3B0aW9ucyk7XG4gICAgICAgIHRoaXMudGl0bGUgPSB0aGlzLmdldFRpdGxlKHRvb2x0aXBJdGVtcywgb3B0aW9ucyk7XG4gICAgICAgIHRoaXMuYmVmb3JlQm9keSA9IHRoaXMuZ2V0QmVmb3JlQm9keSh0b29sdGlwSXRlbXMsIG9wdGlvbnMpO1xuICAgICAgICB0aGlzLmJvZHkgPSB0aGlzLmdldEJvZHkodG9vbHRpcEl0ZW1zLCBvcHRpb25zKTtcbiAgICAgICAgdGhpcy5hZnRlckJvZHkgPSB0aGlzLmdldEFmdGVyQm9keSh0b29sdGlwSXRlbXMsIG9wdGlvbnMpO1xuICAgICAgICB0aGlzLmZvb3RlciA9IHRoaXMuZ2V0Rm9vdGVyKHRvb2x0aXBJdGVtcywgb3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IHNpemUgPSB0aGlzLl9zaXplID0gZ2V0VG9vbHRpcFNpemUodGhpcywgb3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9uQW5kU2l6ZSA9IE9iamVjdC5hc3NpZ24oe30sIHBvc2l0aW9uLCBzaXplKTtcbiAgICAgICAgY29uc3QgYWxpZ25tZW50ID0gZGV0ZXJtaW5lQWxpZ25tZW50KHRoaXMuY2hhcnQsIG9wdGlvbnMsIHBvc2l0aW9uQW5kU2l6ZSk7XG4gICAgICAgIGNvbnN0IGJhY2tncm91bmRQb2ludCA9IGdldEJhY2tncm91bmRQb2ludChvcHRpb25zLCBwb3NpdGlvbkFuZFNpemUsIGFsaWdubWVudCwgdGhpcy5jaGFydCk7XG4gICAgICAgIHRoaXMueEFsaWduID0gYWxpZ25tZW50LnhBbGlnbjtcbiAgICAgICAgdGhpcy55QWxpZ24gPSBhbGlnbm1lbnQueUFsaWduO1xuICAgICAgICBwcm9wZXJ0aWVzID0ge1xuICAgICAgICAgIG9wYWNpdHk6IDEsXG4gICAgICAgICAgeDogYmFja2dyb3VuZFBvaW50LngsXG4gICAgICAgICAgeTogYmFja2dyb3VuZFBvaW50LnksXG4gICAgICAgICAgd2lkdGg6IHNpemUud2lkdGgsXG4gICAgICAgICAgaGVpZ2h0OiBzaXplLmhlaWdodCxcbiAgICAgICAgICBjYXJldFg6IHBvc2l0aW9uLngsXG4gICAgICAgICAgY2FyZXRZOiBwb3NpdGlvbi55XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICB0aGlzLl90b29sdGlwSXRlbXMgPSB0b29sdGlwSXRlbXM7XG4gICAgICB0aGlzLiRjb250ZXh0ID0gdW5kZWZpbmVkO1xuICAgICAgaWYgKHByb3BlcnRpZXMpIHtcbiAgICAgICAgdGhpcy5fcmVzb2x2ZUFuaW1hdGlvbnMoKS51cGRhdGUodGhpcywgcHJvcGVydGllcyk7XG4gICAgICB9XG4gICAgICBpZiAoY2hhbmdlZCAmJiBvcHRpb25zLmV4dGVybmFsKSB7XG4gICAgICAgIG9wdGlvbnMuZXh0ZXJuYWwuY2FsbCh0aGlzLCB7XG4gICAgICAgICAgY2hhcnQ6IHRoaXMuY2hhcnQsXG4gICAgICAgICAgdG9vbHRpcDogdGhpcyxcbiAgICAgICAgICByZXBsYXlcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIGRyYXdDYXJldCh0b29sdGlwUG9pbnQsIGN0eCwgc2l6ZSwgb3B0aW9ucykge1xuICAgICAgY29uc3QgY2FyZXRQb3NpdGlvbiA9IHRoaXMuZ2V0Q2FyZXRQb3NpdGlvbih0b29sdGlwUG9pbnQsIHNpemUsIG9wdGlvbnMpO1xuICAgICAgY3R4LmxpbmVUbyhjYXJldFBvc2l0aW9uLngxLCBjYXJldFBvc2l0aW9uLnkxKTtcbiAgICAgIGN0eC5saW5lVG8oY2FyZXRQb3NpdGlvbi54MiwgY2FyZXRQb3NpdGlvbi55Mik7XG4gICAgICBjdHgubGluZVRvKGNhcmV0UG9zaXRpb24ueDMsIGNhcmV0UG9zaXRpb24ueTMpO1xuICAgIH1cbiAgICBnZXRDYXJldFBvc2l0aW9uKHRvb2x0aXBQb2ludCwgc2l6ZSwgb3B0aW9ucykge1xuICAgICAgY29uc3Qge1xuICAgICAgICB4QWxpZ24sXG4gICAgICAgIHlBbGlnblxuICAgICAgfSA9IHRoaXM7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGNhcmV0U2l6ZSxcbiAgICAgICAgY29ybmVyUmFkaXVzXG4gICAgICB9ID0gb3B0aW9ucztcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgdG9wTGVmdCxcbiAgICAgICAgdG9wUmlnaHQsXG4gICAgICAgIGJvdHRvbUxlZnQsXG4gICAgICAgIGJvdHRvbVJpZ2h0XG4gICAgICB9ID0gdG9UUkJMQ29ybmVycyhjb3JuZXJSYWRpdXMpO1xuICAgICAgY29uc3Qge1xuICAgICAgICB4OiBwdFgsXG4gICAgICAgIHk6IHB0WVxuICAgICAgfSA9IHRvb2x0aXBQb2ludDtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgd2lkdGgsXG4gICAgICAgIGhlaWdodFxuICAgICAgfSA9IHNpemU7XG4gICAgICBsZXQgeDEsIHgyLCB4MywgeTEsIHkyLCB5MztcbiAgICAgIGlmICh5QWxpZ24gPT09ICdjZW50ZXInKSB7XG4gICAgICAgIHkyID0gcHRZICsgaGVpZ2h0IC8gMjtcbiAgICAgICAgaWYgKHhBbGlnbiA9PT0gJ2xlZnQnKSB7XG4gICAgICAgICAgeDEgPSBwdFg7XG4gICAgICAgICAgeDIgPSB4MSAtIGNhcmV0U2l6ZTtcbiAgICAgICAgICB5MSA9IHkyICsgY2FyZXRTaXplO1xuICAgICAgICAgIHkzID0geTIgLSBjYXJldFNpemU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgeDEgPSBwdFggKyB3aWR0aDtcbiAgICAgICAgICB4MiA9IHgxICsgY2FyZXRTaXplO1xuICAgICAgICAgIHkxID0geTIgLSBjYXJldFNpemU7XG4gICAgICAgICAgeTMgPSB5MiArIGNhcmV0U2l6ZTtcbiAgICAgICAgfVxuICAgICAgICB4MyA9IHgxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHhBbGlnbiA9PT0gJ2xlZnQnKSB7XG4gICAgICAgICAgeDIgPSBwdFggKyBNYXRoLm1heCh0b3BMZWZ0LCBib3R0b21MZWZ0KSArIGNhcmV0U2l6ZTtcbiAgICAgICAgfSBlbHNlIGlmICh4QWxpZ24gPT09ICdyaWdodCcpIHtcbiAgICAgICAgICB4MiA9IHB0WCArIHdpZHRoIC0gTWF0aC5tYXgodG9wUmlnaHQsIGJvdHRvbVJpZ2h0KSAtIGNhcmV0U2l6ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB4MiA9IHRoaXMuY2FyZXRYO1xuICAgICAgICB9XG4gICAgICAgIGlmICh5QWxpZ24gPT09ICd0b3AnKSB7XG4gICAgICAgICAgeTEgPSBwdFk7XG4gICAgICAgICAgeTIgPSB5MSAtIGNhcmV0U2l6ZTtcbiAgICAgICAgICB4MSA9IHgyIC0gY2FyZXRTaXplO1xuICAgICAgICAgIHgzID0geDIgKyBjYXJldFNpemU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgeTEgPSBwdFkgKyBoZWlnaHQ7XG4gICAgICAgICAgeTIgPSB5MSArIGNhcmV0U2l6ZTtcbiAgICAgICAgICB4MSA9IHgyICsgY2FyZXRTaXplO1xuICAgICAgICAgIHgzID0geDIgLSBjYXJldFNpemU7XG4gICAgICAgIH1cbiAgICAgICAgeTMgPSB5MTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHgxLFxuICAgICAgICB4MixcbiAgICAgICAgeDMsXG4gICAgICAgIHkxLFxuICAgICAgICB5MixcbiAgICAgICAgeTNcbiAgICAgIH07XG4gICAgfVxuICAgIGRyYXdUaXRsZShwdCwgY3R4LCBvcHRpb25zKSB7XG4gICAgICBjb25zdCB0aXRsZSA9IHRoaXMudGl0bGU7XG4gICAgICBjb25zdCBsZW5ndGggPSB0aXRsZS5sZW5ndGg7XG4gICAgICBsZXQgdGl0bGVGb250LCB0aXRsZVNwYWNpbmcsIGk7XG4gICAgICBpZiAobGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IHJ0bEhlbHBlciA9IGdldFJ0bEFkYXB0ZXIob3B0aW9ucy5ydGwsIHRoaXMueCwgdGhpcy53aWR0aCk7XG4gICAgICAgIHB0LnggPSBnZXRBbGlnbmVkWCh0aGlzLCBvcHRpb25zLnRpdGxlQWxpZ24sIG9wdGlvbnMpO1xuICAgICAgICBjdHgudGV4dEFsaWduID0gcnRsSGVscGVyLnRleHRBbGlnbihvcHRpb25zLnRpdGxlQWxpZ24pO1xuICAgICAgICBjdHgudGV4dEJhc2VsaW5lID0gJ21pZGRsZSc7XG4gICAgICAgIHRpdGxlRm9udCA9IHRvRm9udChvcHRpb25zLnRpdGxlRm9udCk7XG4gICAgICAgIHRpdGxlU3BhY2luZyA9IG9wdGlvbnMudGl0bGVTcGFjaW5nO1xuICAgICAgICBjdHguZmlsbFN0eWxlID0gb3B0aW9ucy50aXRsZUNvbG9yO1xuICAgICAgICBjdHguZm9udCA9IHRpdGxlRm9udC5zdHJpbmc7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgICAgICAgIGN0eC5maWxsVGV4dCh0aXRsZVtpXSwgcnRsSGVscGVyLngocHQueCksIHB0LnkgKyB0aXRsZUZvbnQubGluZUhlaWdodCAvIDIpO1xuICAgICAgICAgIHB0LnkgKz0gdGl0bGVGb250LmxpbmVIZWlnaHQgKyB0aXRsZVNwYWNpbmc7XG4gICAgICAgICAgaWYgKGkgKyAxID09PSBsZW5ndGgpIHtcbiAgICAgICAgICAgIHB0LnkgKz0gb3B0aW9ucy50aXRsZU1hcmdpbkJvdHRvbSAtIHRpdGxlU3BhY2luZztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgX2RyYXdDb2xvckJveChjdHgsIHB0LCBpLCBydGxIZWxwZXIsIG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IGxhYmVsQ29sb3IgPSB0aGlzLmxhYmVsQ29sb3JzW2ldO1xuICAgICAgY29uc3QgbGFiZWxQb2ludFN0eWxlID0gdGhpcy5sYWJlbFBvaW50U3R5bGVzW2ldO1xuICAgICAgY29uc3Qge1xuICAgICAgICBib3hIZWlnaHQsXG4gICAgICAgIGJveFdpZHRoXG4gICAgICB9ID0gb3B0aW9ucztcbiAgICAgIGNvbnN0IGJvZHlGb250ID0gdG9Gb250KG9wdGlvbnMuYm9keUZvbnQpO1xuICAgICAgY29uc3QgY29sb3JYID0gZ2V0QWxpZ25lZFgodGhpcywgJ2xlZnQnLCBvcHRpb25zKTtcbiAgICAgIGNvbnN0IHJ0bENvbG9yWCA9IHJ0bEhlbHBlci54KGNvbG9yWCk7XG4gICAgICBjb25zdCB5T2ZmU2V0ID0gYm94SGVpZ2h0IDwgYm9keUZvbnQubGluZUhlaWdodCA/IChib2R5Rm9udC5saW5lSGVpZ2h0IC0gYm94SGVpZ2h0KSAvIDIgOiAwO1xuICAgICAgY29uc3QgY29sb3JZID0gcHQueSArIHlPZmZTZXQ7XG4gICAgICBpZiAob3B0aW9ucy51c2VQb2ludFN0eWxlKSB7XG4gICAgICAgIGNvbnN0IGRyYXdPcHRpb25zID0ge1xuICAgICAgICAgIHJhZGl1czogTWF0aC5taW4oYm94V2lkdGgsIGJveEhlaWdodCkgLyAyLFxuICAgICAgICAgIHBvaW50U3R5bGU6IGxhYmVsUG9pbnRTdHlsZS5wb2ludFN0eWxlLFxuICAgICAgICAgIHJvdGF0aW9uOiBsYWJlbFBvaW50U3R5bGUucm90YXRpb24sXG4gICAgICAgICAgYm9yZGVyV2lkdGg6IDFcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgY2VudGVyWCA9IHJ0bEhlbHBlci5sZWZ0Rm9yTHRyKHJ0bENvbG9yWCwgYm94V2lkdGgpICsgYm94V2lkdGggLyAyO1xuICAgICAgICBjb25zdCBjZW50ZXJZID0gY29sb3JZICsgYm94SGVpZ2h0IC8gMjtcbiAgICAgICAgY3R4LnN0cm9rZVN0eWxlID0gb3B0aW9ucy5tdWx0aUtleUJhY2tncm91bmQ7XG4gICAgICAgIGN0eC5maWxsU3R5bGUgPSBvcHRpb25zLm11bHRpS2V5QmFja2dyb3VuZDtcbiAgICAgICAgZHJhd1BvaW50KGN0eCwgZHJhd09wdGlvbnMsIGNlbnRlclgsIGNlbnRlclkpO1xuICAgICAgICBjdHguc3Ryb2tlU3R5bGUgPSBsYWJlbENvbG9yLmJvcmRlckNvbG9yO1xuICAgICAgICBjdHguZmlsbFN0eWxlID0gbGFiZWxDb2xvci5iYWNrZ3JvdW5kQ29sb3I7XG4gICAgICAgIGRyYXdQb2ludChjdHgsIGRyYXdPcHRpb25zLCBjZW50ZXJYLCBjZW50ZXJZKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGN0eC5saW5lV2lkdGggPSBpc09iamVjdChsYWJlbENvbG9yLmJvcmRlcldpZHRoKSA/IE1hdGgubWF4KC4uLk9iamVjdC52YWx1ZXMobGFiZWxDb2xvci5ib3JkZXJXaWR0aCkpIDogbGFiZWxDb2xvci5ib3JkZXJXaWR0aCB8fCAxO1xuICAgICAgICBjdHguc3Ryb2tlU3R5bGUgPSBsYWJlbENvbG9yLmJvcmRlckNvbG9yO1xuICAgICAgICBjdHguc2V0TGluZURhc2gobGFiZWxDb2xvci5ib3JkZXJEYXNoIHx8IFtdKTtcbiAgICAgICAgY3R4LmxpbmVEYXNoT2Zmc2V0ID0gbGFiZWxDb2xvci5ib3JkZXJEYXNoT2Zmc2V0IHx8IDA7XG4gICAgICAgIGNvbnN0IG91dGVyWCA9IHJ0bEhlbHBlci5sZWZ0Rm9yTHRyKHJ0bENvbG9yWCwgYm94V2lkdGgpO1xuICAgICAgICBjb25zdCBpbm5lclggPSBydGxIZWxwZXIubGVmdEZvckx0cihydGxIZWxwZXIueFBsdXMocnRsQ29sb3JYLCAxKSwgYm94V2lkdGggLSAyKTtcbiAgICAgICAgY29uc3QgYm9yZGVyUmFkaXVzID0gdG9UUkJMQ29ybmVycyhsYWJlbENvbG9yLmJvcmRlclJhZGl1cyk7XG4gICAgICAgIGlmIChPYmplY3QudmFsdWVzKGJvcmRlclJhZGl1cykuc29tZSh2ID0+IHYgIT09IDApKSB7XG4gICAgICAgICAgY3R4LmJlZ2luUGF0aCgpO1xuICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSBvcHRpb25zLm11bHRpS2V5QmFja2dyb3VuZDtcbiAgICAgICAgICBhZGRSb3VuZGVkUmVjdFBhdGgoY3R4LCB7XG4gICAgICAgICAgICB4OiBvdXRlclgsXG4gICAgICAgICAgICB5OiBjb2xvclksXG4gICAgICAgICAgICB3OiBib3hXaWR0aCxcbiAgICAgICAgICAgIGg6IGJveEhlaWdodCxcbiAgICAgICAgICAgIHJhZGl1czogYm9yZGVyUmFkaXVzXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgY3R4LmZpbGwoKTtcbiAgICAgICAgICBjdHguc3Ryb2tlKCk7XG4gICAgICAgICAgY3R4LmZpbGxTdHlsZSA9IGxhYmVsQ29sb3IuYmFja2dyb3VuZENvbG9yO1xuICAgICAgICAgIGN0eC5iZWdpblBhdGgoKTtcbiAgICAgICAgICBhZGRSb3VuZGVkUmVjdFBhdGgoY3R4LCB7XG4gICAgICAgICAgICB4OiBpbm5lclgsXG4gICAgICAgICAgICB5OiBjb2xvclkgKyAxLFxuICAgICAgICAgICAgdzogYm94V2lkdGggLSAyLFxuICAgICAgICAgICAgaDogYm94SGVpZ2h0IC0gMixcbiAgICAgICAgICAgIHJhZGl1czogYm9yZGVyUmFkaXVzXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgY3R4LmZpbGwoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjdHguZmlsbFN0eWxlID0gb3B0aW9ucy5tdWx0aUtleUJhY2tncm91bmQ7XG4gICAgICAgICAgY3R4LmZpbGxSZWN0KG91dGVyWCwgY29sb3JZLCBib3hXaWR0aCwgYm94SGVpZ2h0KTtcbiAgICAgICAgICBjdHguc3Ryb2tlUmVjdChvdXRlclgsIGNvbG9yWSwgYm94V2lkdGgsIGJveEhlaWdodCk7XG4gICAgICAgICAgY3R4LmZpbGxTdHlsZSA9IGxhYmVsQ29sb3IuYmFja2dyb3VuZENvbG9yO1xuICAgICAgICAgIGN0eC5maWxsUmVjdChpbm5lclgsIGNvbG9yWSArIDEsIGJveFdpZHRoIC0gMiwgYm94SGVpZ2h0IC0gMik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGN0eC5maWxsU3R5bGUgPSB0aGlzLmxhYmVsVGV4dENvbG9yc1tpXTtcbiAgICB9XG4gICAgZHJhd0JvZHkocHQsIGN0eCwgb3B0aW9ucykge1xuICAgICAgY29uc3Qge1xuICAgICAgICBib2R5XG4gICAgICB9ID0gdGhpcztcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgYm9keVNwYWNpbmcsXG4gICAgICAgIGJvZHlBbGlnbixcbiAgICAgICAgZGlzcGxheUNvbG9ycyxcbiAgICAgICAgYm94SGVpZ2h0LFxuICAgICAgICBib3hXaWR0aCxcbiAgICAgICAgYm94UGFkZGluZ1xuICAgICAgfSA9IG9wdGlvbnM7XG4gICAgICBjb25zdCBib2R5Rm9udCA9IHRvRm9udChvcHRpb25zLmJvZHlGb250KTtcbiAgICAgIGxldCBib2R5TGluZUhlaWdodCA9IGJvZHlGb250LmxpbmVIZWlnaHQ7XG4gICAgICBsZXQgeExpbmVQYWRkaW5nID0gMDtcbiAgICAgIGNvbnN0IHJ0bEhlbHBlciA9IGdldFJ0bEFkYXB0ZXIob3B0aW9ucy5ydGwsIHRoaXMueCwgdGhpcy53aWR0aCk7XG4gICAgICBjb25zdCBmaWxsTGluZU9mVGV4dCA9IGZ1bmN0aW9uIChsaW5lKSB7XG4gICAgICAgIGN0eC5maWxsVGV4dChsaW5lLCBydGxIZWxwZXIueChwdC54ICsgeExpbmVQYWRkaW5nKSwgcHQueSArIGJvZHlMaW5lSGVpZ2h0IC8gMik7XG4gICAgICAgIHB0LnkgKz0gYm9keUxpbmVIZWlnaHQgKyBib2R5U3BhY2luZztcbiAgICAgIH07XG4gICAgICBjb25zdCBib2R5QWxpZ25Gb3JDYWxjdWxhdGlvbiA9IHJ0bEhlbHBlci50ZXh0QWxpZ24oYm9keUFsaWduKTtcbiAgICAgIGxldCBib2R5SXRlbSwgdGV4dENvbG9yLCBsaW5lcywgaSwgaiwgaWxlbiwgamxlbjtcbiAgICAgIGN0eC50ZXh0QWxpZ24gPSBib2R5QWxpZ247XG4gICAgICBjdHgudGV4dEJhc2VsaW5lID0gJ21pZGRsZSc7XG4gICAgICBjdHguZm9udCA9IGJvZHlGb250LnN0cmluZztcbiAgICAgIHB0LnggPSBnZXRBbGlnbmVkWCh0aGlzLCBib2R5QWxpZ25Gb3JDYWxjdWxhdGlvbiwgb3B0aW9ucyk7XG4gICAgICBjdHguZmlsbFN0eWxlID0gb3B0aW9ucy5ib2R5Q29sb3I7XG4gICAgICBlYWNoKHRoaXMuYmVmb3JlQm9keSwgZmlsbExpbmVPZlRleHQpO1xuICAgICAgeExpbmVQYWRkaW5nID0gZGlzcGxheUNvbG9ycyAmJiBib2R5QWxpZ25Gb3JDYWxjdWxhdGlvbiAhPT0gJ3JpZ2h0JyA/IGJvZHlBbGlnbiA9PT0gJ2NlbnRlcicgPyBib3hXaWR0aCAvIDIgKyBib3hQYWRkaW5nIDogYm94V2lkdGggKyAyICsgYm94UGFkZGluZyA6IDA7XG4gICAgICBmb3IgKGkgPSAwLCBpbGVuID0gYm9keS5sZW5ndGg7IGkgPCBpbGVuOyArK2kpIHtcbiAgICAgICAgYm9keUl0ZW0gPSBib2R5W2ldO1xuICAgICAgICB0ZXh0Q29sb3IgPSB0aGlzLmxhYmVsVGV4dENvbG9yc1tpXTtcbiAgICAgICAgY3R4LmZpbGxTdHlsZSA9IHRleHRDb2xvcjtcbiAgICAgICAgZWFjaChib2R5SXRlbS5iZWZvcmUsIGZpbGxMaW5lT2ZUZXh0KTtcbiAgICAgICAgbGluZXMgPSBib2R5SXRlbS5saW5lcztcbiAgICAgICAgaWYgKGRpc3BsYXlDb2xvcnMgJiYgbGluZXMubGVuZ3RoKSB7XG4gICAgICAgICAgdGhpcy5fZHJhd0NvbG9yQm94KGN0eCwgcHQsIGksIHJ0bEhlbHBlciwgb3B0aW9ucyk7XG4gICAgICAgICAgYm9keUxpbmVIZWlnaHQgPSBNYXRoLm1heChib2R5Rm9udC5saW5lSGVpZ2h0LCBib3hIZWlnaHQpO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoaiA9IDAsIGpsZW4gPSBsaW5lcy5sZW5ndGg7IGogPCBqbGVuOyArK2opIHtcbiAgICAgICAgICBmaWxsTGluZU9mVGV4dChsaW5lc1tqXSk7XG4gICAgICAgICAgYm9keUxpbmVIZWlnaHQgPSBib2R5Rm9udC5saW5lSGVpZ2h0O1xuICAgICAgICB9XG4gICAgICAgIGVhY2goYm9keUl0ZW0uYWZ0ZXIsIGZpbGxMaW5lT2ZUZXh0KTtcbiAgICAgIH1cbiAgICAgIHhMaW5lUGFkZGluZyA9IDA7XG4gICAgICBib2R5TGluZUhlaWdodCA9IGJvZHlGb250LmxpbmVIZWlnaHQ7XG4gICAgICBlYWNoKHRoaXMuYWZ0ZXJCb2R5LCBmaWxsTGluZU9mVGV4dCk7XG4gICAgICBwdC55IC09IGJvZHlTcGFjaW5nO1xuICAgIH1cbiAgICBkcmF3Rm9vdGVyKHB0LCBjdHgsIG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IGZvb3RlciA9IHRoaXMuZm9vdGVyO1xuICAgICAgY29uc3QgbGVuZ3RoID0gZm9vdGVyLmxlbmd0aDtcbiAgICAgIGxldCBmb290ZXJGb250LCBpO1xuICAgICAgaWYgKGxlbmd0aCkge1xuICAgICAgICBjb25zdCBydGxIZWxwZXIgPSBnZXRSdGxBZGFwdGVyKG9wdGlvbnMucnRsLCB0aGlzLngsIHRoaXMud2lkdGgpO1xuICAgICAgICBwdC54ID0gZ2V0QWxpZ25lZFgodGhpcywgb3B0aW9ucy5mb290ZXJBbGlnbiwgb3B0aW9ucyk7XG4gICAgICAgIHB0LnkgKz0gb3B0aW9ucy5mb290ZXJNYXJnaW5Ub3A7XG4gICAgICAgIGN0eC50ZXh0QWxpZ24gPSBydGxIZWxwZXIudGV4dEFsaWduKG9wdGlvbnMuZm9vdGVyQWxpZ24pO1xuICAgICAgICBjdHgudGV4dEJhc2VsaW5lID0gJ21pZGRsZSc7XG4gICAgICAgIGZvb3RlckZvbnQgPSB0b0ZvbnQob3B0aW9ucy5mb290ZXJGb250KTtcbiAgICAgICAgY3R4LmZpbGxTdHlsZSA9IG9wdGlvbnMuZm9vdGVyQ29sb3I7XG4gICAgICAgIGN0eC5mb250ID0gZm9vdGVyRm9udC5zdHJpbmc7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgICAgICAgIGN0eC5maWxsVGV4dChmb290ZXJbaV0sIHJ0bEhlbHBlci54KHB0LngpLCBwdC55ICsgZm9vdGVyRm9udC5saW5lSGVpZ2h0IC8gMik7XG4gICAgICAgICAgcHQueSArPSBmb290ZXJGb250LmxpbmVIZWlnaHQgKyBvcHRpb25zLmZvb3RlclNwYWNpbmc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgZHJhd0JhY2tncm91bmQocHQsIGN0eCwgdG9vbHRpcFNpemUsIG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgeEFsaWduLFxuICAgICAgICB5QWxpZ25cbiAgICAgIH0gPSB0aGlzO1xuICAgICAgY29uc3Qge1xuICAgICAgICB4LFxuICAgICAgICB5XG4gICAgICB9ID0gcHQ7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHdpZHRoLFxuICAgICAgICBoZWlnaHRcbiAgICAgIH0gPSB0b29sdGlwU2l6ZTtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgdG9wTGVmdCxcbiAgICAgICAgdG9wUmlnaHQsXG4gICAgICAgIGJvdHRvbUxlZnQsXG4gICAgICAgIGJvdHRvbVJpZ2h0XG4gICAgICB9ID0gdG9UUkJMQ29ybmVycyhvcHRpb25zLmNvcm5lclJhZGl1cyk7XG4gICAgICBjdHguZmlsbFN0eWxlID0gb3B0aW9ucy5iYWNrZ3JvdW5kQ29sb3I7XG4gICAgICBjdHguc3Ryb2tlU3R5bGUgPSBvcHRpb25zLmJvcmRlckNvbG9yO1xuICAgICAgY3R4LmxpbmVXaWR0aCA9IG9wdGlvbnMuYm9yZGVyV2lkdGg7XG4gICAgICBjdHguYmVnaW5QYXRoKCk7XG4gICAgICBjdHgubW92ZVRvKHggKyB0b3BMZWZ0LCB5KTtcbiAgICAgIGlmICh5QWxpZ24gPT09ICd0b3AnKSB7XG4gICAgICAgIHRoaXMuZHJhd0NhcmV0KHB0LCBjdHgsIHRvb2x0aXBTaXplLCBvcHRpb25zKTtcbiAgICAgIH1cbiAgICAgIGN0eC5saW5lVG8oeCArIHdpZHRoIC0gdG9wUmlnaHQsIHkpO1xuICAgICAgY3R4LnF1YWRyYXRpY0N1cnZlVG8oeCArIHdpZHRoLCB5LCB4ICsgd2lkdGgsIHkgKyB0b3BSaWdodCk7XG4gICAgICBpZiAoeUFsaWduID09PSAnY2VudGVyJyAmJiB4QWxpZ24gPT09ICdyaWdodCcpIHtcbiAgICAgICAgdGhpcy5kcmF3Q2FyZXQocHQsIGN0eCwgdG9vbHRpcFNpemUsIG9wdGlvbnMpO1xuICAgICAgfVxuICAgICAgY3R4LmxpbmVUbyh4ICsgd2lkdGgsIHkgKyBoZWlnaHQgLSBib3R0b21SaWdodCk7XG4gICAgICBjdHgucXVhZHJhdGljQ3VydmVUbyh4ICsgd2lkdGgsIHkgKyBoZWlnaHQsIHggKyB3aWR0aCAtIGJvdHRvbVJpZ2h0LCB5ICsgaGVpZ2h0KTtcbiAgICAgIGlmICh5QWxpZ24gPT09ICdib3R0b20nKSB7XG4gICAgICAgIHRoaXMuZHJhd0NhcmV0KHB0LCBjdHgsIHRvb2x0aXBTaXplLCBvcHRpb25zKTtcbiAgICAgIH1cbiAgICAgIGN0eC5saW5lVG8oeCArIGJvdHRvbUxlZnQsIHkgKyBoZWlnaHQpO1xuICAgICAgY3R4LnF1YWRyYXRpY0N1cnZlVG8oeCwgeSArIGhlaWdodCwgeCwgeSArIGhlaWdodCAtIGJvdHRvbUxlZnQpO1xuICAgICAgaWYgKHlBbGlnbiA9PT0gJ2NlbnRlcicgJiYgeEFsaWduID09PSAnbGVmdCcpIHtcbiAgICAgICAgdGhpcy5kcmF3Q2FyZXQocHQsIGN0eCwgdG9vbHRpcFNpemUsIG9wdGlvbnMpO1xuICAgICAgfVxuICAgICAgY3R4LmxpbmVUbyh4LCB5ICsgdG9wTGVmdCk7XG4gICAgICBjdHgucXVhZHJhdGljQ3VydmVUbyh4LCB5LCB4ICsgdG9wTGVmdCwgeSk7XG4gICAgICBjdHguY2xvc2VQYXRoKCk7XG4gICAgICBjdHguZmlsbCgpO1xuICAgICAgaWYgKG9wdGlvbnMuYm9yZGVyV2lkdGggPiAwKSB7XG4gICAgICAgIGN0eC5zdHJva2UoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgX3VwZGF0ZUFuaW1hdGlvblRhcmdldChvcHRpb25zKSB7XG4gICAgICBjb25zdCBjaGFydCA9IHRoaXMuY2hhcnQ7XG4gICAgICBjb25zdCBhbmltcyA9IHRoaXMuJGFuaW1hdGlvbnM7XG4gICAgICBjb25zdCBhbmltWCA9IGFuaW1zICYmIGFuaW1zLng7XG4gICAgICBjb25zdCBhbmltWSA9IGFuaW1zICYmIGFuaW1zLnk7XG4gICAgICBpZiAoYW5pbVggfHwgYW5pbVkpIHtcbiAgICAgICAgY29uc3QgcG9zaXRpb24gPSBwb3NpdGlvbmVyc1tvcHRpb25zLnBvc2l0aW9uXS5jYWxsKHRoaXMsIHRoaXMuX2FjdGl2ZSwgdGhpcy5fZXZlbnRQb3NpdGlvbik7XG4gICAgICAgIGlmICghcG9zaXRpb24pIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2l6ZSA9IHRoaXMuX3NpemUgPSBnZXRUb29sdGlwU2l6ZSh0aGlzLCBvcHRpb25zKTtcbiAgICAgICAgY29uc3QgcG9zaXRpb25BbmRTaXplID0gT2JqZWN0LmFzc2lnbih7fSwgcG9zaXRpb24sIHRoaXMuX3NpemUpO1xuICAgICAgICBjb25zdCBhbGlnbm1lbnQgPSBkZXRlcm1pbmVBbGlnbm1lbnQoY2hhcnQsIG9wdGlvbnMsIHBvc2l0aW9uQW5kU2l6ZSk7XG4gICAgICAgIGNvbnN0IHBvaW50ID0gZ2V0QmFja2dyb3VuZFBvaW50KG9wdGlvbnMsIHBvc2l0aW9uQW5kU2l6ZSwgYWxpZ25tZW50LCBjaGFydCk7XG4gICAgICAgIGlmIChhbmltWC5fdG8gIT09IHBvaW50LnggfHwgYW5pbVkuX3RvICE9PSBwb2ludC55KSB7XG4gICAgICAgICAgdGhpcy54QWxpZ24gPSBhbGlnbm1lbnQueEFsaWduO1xuICAgICAgICAgIHRoaXMueUFsaWduID0gYWxpZ25tZW50LnlBbGlnbjtcbiAgICAgICAgICB0aGlzLndpZHRoID0gc2l6ZS53aWR0aDtcbiAgICAgICAgICB0aGlzLmhlaWdodCA9IHNpemUuaGVpZ2h0O1xuICAgICAgICAgIHRoaXMuY2FyZXRYID0gcG9zaXRpb24ueDtcbiAgICAgICAgICB0aGlzLmNhcmV0WSA9IHBvc2l0aW9uLnk7XG4gICAgICAgICAgdGhpcy5fcmVzb2x2ZUFuaW1hdGlvbnMoKS51cGRhdGUodGhpcywgcG9pbnQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIF93aWxsUmVuZGVyKCkge1xuICAgICAgcmV0dXJuICEhdGhpcy5vcGFjaXR5O1xuICAgIH1cbiAgICBkcmF3KGN0eCkge1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9ucy5zZXRDb250ZXh0KHRoaXMuZ2V0Q29udGV4dCgpKTtcbiAgICAgIGxldCBvcGFjaXR5ID0gdGhpcy5vcGFjaXR5O1xuICAgICAgaWYgKCFvcGFjaXR5KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuX3VwZGF0ZUFuaW1hdGlvblRhcmdldChvcHRpb25zKTtcbiAgICAgIGNvbnN0IHRvb2x0aXBTaXplID0ge1xuICAgICAgICB3aWR0aDogdGhpcy53aWR0aCxcbiAgICAgICAgaGVpZ2h0OiB0aGlzLmhlaWdodFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHB0ID0ge1xuICAgICAgICB4OiB0aGlzLngsXG4gICAgICAgIHk6IHRoaXMueVxuICAgICAgfTtcbiAgICAgIG9wYWNpdHkgPSBNYXRoLmFicyhvcGFjaXR5KSA8IDFlLTMgPyAwIDogb3BhY2l0eTtcbiAgICAgIGNvbnN0IHBhZGRpbmcgPSB0b1BhZGRpbmcob3B0aW9ucy5wYWRkaW5nKTtcbiAgICAgIGNvbnN0IGhhc1Rvb2x0aXBDb250ZW50ID0gdGhpcy50aXRsZS5sZW5ndGggfHwgdGhpcy5iZWZvcmVCb2R5Lmxlbmd0aCB8fCB0aGlzLmJvZHkubGVuZ3RoIHx8IHRoaXMuYWZ0ZXJCb2R5Lmxlbmd0aCB8fCB0aGlzLmZvb3Rlci5sZW5ndGg7XG4gICAgICBpZiAob3B0aW9ucy5lbmFibGVkICYmIGhhc1Rvb2x0aXBDb250ZW50KSB7XG4gICAgICAgIGN0eC5zYXZlKCk7XG4gICAgICAgIGN0eC5nbG9iYWxBbHBoYSA9IG9wYWNpdHk7XG4gICAgICAgIHRoaXMuZHJhd0JhY2tncm91bmQocHQsIGN0eCwgdG9vbHRpcFNpemUsIG9wdGlvbnMpO1xuICAgICAgICBvdmVycmlkZVRleHREaXJlY3Rpb24oY3R4LCBvcHRpb25zLnRleHREaXJlY3Rpb24pO1xuICAgICAgICBwdC55ICs9IHBhZGRpbmcudG9wO1xuICAgICAgICB0aGlzLmRyYXdUaXRsZShwdCwgY3R4LCBvcHRpb25zKTtcbiAgICAgICAgdGhpcy5kcmF3Qm9keShwdCwgY3R4LCBvcHRpb25zKTtcbiAgICAgICAgdGhpcy5kcmF3Rm9vdGVyKHB0LCBjdHgsIG9wdGlvbnMpO1xuICAgICAgICByZXN0b3JlVGV4dERpcmVjdGlvbihjdHgsIG9wdGlvbnMudGV4dERpcmVjdGlvbik7XG4gICAgICAgIGN0eC5yZXN0b3JlKCk7XG4gICAgICB9XG4gICAgfVxuICAgIGdldEFjdGl2ZUVsZW1lbnRzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2FjdGl2ZSB8fCBbXTtcbiAgICB9XG4gICAgc2V0QWN0aXZlRWxlbWVudHMoYWN0aXZlRWxlbWVudHMsIGV2ZW50UG9zaXRpb24pIHtcbiAgICAgIGNvbnN0IGxhc3RBY3RpdmUgPSB0aGlzLl9hY3RpdmU7XG4gICAgICBjb25zdCBhY3RpdmUgPSBhY3RpdmVFbGVtZW50cy5tYXAoKHtcbiAgICAgICAgZGF0YXNldEluZGV4LFxuICAgICAgICBpbmRleFxuICAgICAgfSkgPT4ge1xuICAgICAgICBjb25zdCBtZXRhID0gdGhpcy5jaGFydC5nZXREYXRhc2V0TWV0YShkYXRhc2V0SW5kZXgpO1xuICAgICAgICBpZiAoIW1ldGEpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBmaW5kIGEgZGF0YXNldCBhdCBpbmRleCAnICsgZGF0YXNldEluZGV4KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGRhdGFzZXRJbmRleCxcbiAgICAgICAgICBlbGVtZW50OiBtZXRhLmRhdGFbaW5kZXhdLFxuICAgICAgICAgIGluZGV4XG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGNoYW5nZWQgPSAhX2VsZW1lbnRzRXF1YWwobGFzdEFjdGl2ZSwgYWN0aXZlKTtcbiAgICAgIGNvbnN0IHBvc2l0aW9uQ2hhbmdlZCA9IHRoaXMuX3Bvc2l0aW9uQ2hhbmdlZChhY3RpdmUsIGV2ZW50UG9zaXRpb24pO1xuICAgICAgaWYgKGNoYW5nZWQgfHwgcG9zaXRpb25DaGFuZ2VkKSB7XG4gICAgICAgIHRoaXMuX2FjdGl2ZSA9IGFjdGl2ZTtcbiAgICAgICAgdGhpcy5fZXZlbnRQb3NpdGlvbiA9IGV2ZW50UG9zaXRpb247XG4gICAgICAgIHRoaXMuX2lnbm9yZVJlcGxheUV2ZW50cyA9IHRydWU7XG4gICAgICAgIHRoaXMudXBkYXRlKHRydWUpO1xuICAgICAgfVxuICAgIH1cbiAgICBoYW5kbGVFdmVudChlLCByZXBsYXksIGluQ2hhcnRBcmVhID0gdHJ1ZSkge1xuICAgICAgaWYgKHJlcGxheSAmJiB0aGlzLl9pZ25vcmVSZXBsYXlFdmVudHMpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgdGhpcy5faWdub3JlUmVwbGF5RXZlbnRzID0gZmFsc2U7XG4gICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgICAgY29uc3QgbGFzdEFjdGl2ZSA9IHRoaXMuX2FjdGl2ZSB8fCBbXTtcbiAgICAgIGNvbnN0IGFjdGl2ZSA9IHRoaXMuX2dldEFjdGl2ZUVsZW1lbnRzKGUsIGxhc3RBY3RpdmUsIHJlcGxheSwgaW5DaGFydEFyZWEpO1xuICAgICAgY29uc3QgcG9zaXRpb25DaGFuZ2VkID0gdGhpcy5fcG9zaXRpb25DaGFuZ2VkKGFjdGl2ZSwgZSk7XG4gICAgICBjb25zdCBjaGFuZ2VkID0gcmVwbGF5IHx8ICFfZWxlbWVudHNFcXVhbChhY3RpdmUsIGxhc3RBY3RpdmUpIHx8IHBvc2l0aW9uQ2hhbmdlZDtcbiAgICAgIGlmIChjaGFuZ2VkKSB7XG4gICAgICAgIHRoaXMuX2FjdGl2ZSA9IGFjdGl2ZTtcbiAgICAgICAgaWYgKG9wdGlvbnMuZW5hYmxlZCB8fCBvcHRpb25zLmV4dGVybmFsKSB7XG4gICAgICAgICAgdGhpcy5fZXZlbnRQb3NpdGlvbiA9IHtcbiAgICAgICAgICAgIHg6IGUueCxcbiAgICAgICAgICAgIHk6IGUueVxuICAgICAgICAgIH07XG4gICAgICAgICAgdGhpcy51cGRhdGUodHJ1ZSwgcmVwbGF5KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGNoYW5nZWQ7XG4gICAgfVxuICAgIF9nZXRBY3RpdmVFbGVtZW50cyhlLCBsYXN0QWN0aXZlLCByZXBsYXksIGluQ2hhcnRBcmVhKSB7XG4gICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgICAgaWYgKGUudHlwZSA9PT0gJ21vdXNlb3V0Jykge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgICBpZiAoIWluQ2hhcnRBcmVhKSB7XG4gICAgICAgIHJldHVybiBsYXN0QWN0aXZlLmZpbHRlcihpID0+IHRoaXMuY2hhcnQuZGF0YS5kYXRhc2V0c1tpLmRhdGFzZXRJbmRleF0gJiYgdGhpcy5jaGFydC5nZXREYXRhc2V0TWV0YShpLmRhdGFzZXRJbmRleCkuY29udHJvbGxlci5nZXRQYXJzZWQoaS5pbmRleCkgIT09IHVuZGVmaW5lZCk7XG4gICAgICB9XG4gICAgICBjb25zdCBhY3RpdmUgPSB0aGlzLmNoYXJ0LmdldEVsZW1lbnRzQXRFdmVudEZvck1vZGUoZSwgb3B0aW9ucy5tb2RlLCBvcHRpb25zLCByZXBsYXkpO1xuICAgICAgaWYgKG9wdGlvbnMucmV2ZXJzZSkge1xuICAgICAgICBhY3RpdmUucmV2ZXJzZSgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFjdGl2ZTtcbiAgICB9XG4gICAgX3Bvc2l0aW9uQ2hhbmdlZChhY3RpdmUsIGUpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgY2FyZXRYLFxuICAgICAgICBjYXJldFksXG4gICAgICAgIG9wdGlvbnNcbiAgICAgIH0gPSB0aGlzO1xuICAgICAgY29uc3QgcG9zaXRpb24gPSBwb3NpdGlvbmVyc1tvcHRpb25zLnBvc2l0aW9uXS5jYWxsKHRoaXMsIGFjdGl2ZSwgZSk7XG4gICAgICByZXR1cm4gcG9zaXRpb24gIT09IGZhbHNlICYmIChjYXJldFggIT09IHBvc2l0aW9uLnggfHwgY2FyZXRZICE9PSBwb3NpdGlvbi55KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIFRvb2x0aXA7XG59KSgpO1xudmFyIHBsdWdpbl90b29sdGlwID0ge1xuICBpZDogJ3Rvb2x0aXAnLFxuICBfZWxlbWVudDogVG9vbHRpcCxcbiAgcG9zaXRpb25lcnMsXG4gIGFmdGVySW5pdChjaGFydCwgX2FyZ3MsIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucykge1xuICAgICAgY2hhcnQudG9vbHRpcCA9IG5ldyBUb29sdGlwKHtcbiAgICAgICAgY2hhcnQsXG4gICAgICAgIG9wdGlvbnNcbiAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgYmVmb3JlVXBkYXRlKGNoYXJ0LCBfYXJncywgb3B0aW9ucykge1xuICAgIGlmIChjaGFydC50b29sdGlwKSB7XG4gICAgICBjaGFydC50b29sdGlwLmluaXRpYWxpemUob3B0aW9ucyk7XG4gICAgfVxuICB9LFxuICByZXNldChjaGFydCwgX2FyZ3MsIG9wdGlvbnMpIHtcbiAgICBpZiAoY2hhcnQudG9vbHRpcCkge1xuICAgICAgY2hhcnQudG9vbHRpcC5pbml0aWFsaXplKG9wdGlvbnMpO1xuICAgIH1cbiAgfSxcbiAgYWZ0ZXJEcmF3KGNoYXJ0KSB7XG4gICAgY29uc3QgdG9vbHRpcCA9IGNoYXJ0LnRvb2x0aXA7XG4gICAgaWYgKHRvb2x0aXAgJiYgdG9vbHRpcC5fd2lsbFJlbmRlcigpKSB7XG4gICAgICBjb25zdCBhcmdzID0ge1xuICAgICAgICB0b29sdGlwXG4gICAgICB9O1xuICAgICAgaWYgKGNoYXJ0Lm5vdGlmeVBsdWdpbnMoJ2JlZm9yZVRvb2x0aXBEcmF3Jywge1xuICAgICAgICAuLi5hcmdzLFxuICAgICAgICBjYW5jZWxhYmxlOiB0cnVlXG4gICAgICB9KSA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdG9vbHRpcC5kcmF3KGNoYXJ0LmN0eCk7XG4gICAgICBjaGFydC5ub3RpZnlQbHVnaW5zKCdhZnRlclRvb2x0aXBEcmF3JywgYXJncyk7XG4gICAgfVxuICB9LFxuICBhZnRlckV2ZW50KGNoYXJ0LCBhcmdzKSB7XG4gICAgaWYgKGNoYXJ0LnRvb2x0aXApIHtcbiAgICAgIGNvbnN0IHVzZUZpbmFsUG9zaXRpb24gPSBhcmdzLnJlcGxheTtcbiAgICAgIGlmIChjaGFydC50b29sdGlwLmhhbmRsZUV2ZW50KGFyZ3MuZXZlbnQsIHVzZUZpbmFsUG9zaXRpb24sIGFyZ3MuaW5DaGFydEFyZWEpKSB7XG4gICAgICAgIGFyZ3MuY2hhbmdlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9LFxuICBkZWZhdWx0czoge1xuICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgZXh0ZXJuYWw6IG51bGwsXG4gICAgcG9zaXRpb246ICdhdmVyYWdlJyxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICdyZ2JhKDAsMCwwLDAuOCknLFxuICAgIHRpdGxlQ29sb3I6ICcjZmZmJyxcbiAgICB0aXRsZUZvbnQ6IHtcbiAgICAgIHdlaWdodDogJ2JvbGQnXG4gICAgfSxcbiAgICB0aXRsZVNwYWNpbmc6IDIsXG4gICAgdGl0bGVNYXJnaW5Cb3R0b206IDYsXG4gICAgdGl0bGVBbGlnbjogJ2xlZnQnLFxuICAgIGJvZHlDb2xvcjogJyNmZmYnLFxuICAgIGJvZHlTcGFjaW5nOiAyLFxuICAgIGJvZHlGb250OiB7fSxcbiAgICBib2R5QWxpZ246ICdsZWZ0JyxcbiAgICBmb290ZXJDb2xvcjogJyNmZmYnLFxuICAgIGZvb3RlclNwYWNpbmc6IDIsXG4gICAgZm9vdGVyTWFyZ2luVG9wOiA2LFxuICAgIGZvb3RlckZvbnQ6IHtcbiAgICAgIHdlaWdodDogJ2JvbGQnXG4gICAgfSxcbiAgICBmb290ZXJBbGlnbjogJ2xlZnQnLFxuICAgIHBhZGRpbmc6IDYsXG4gICAgY2FyZXRQYWRkaW5nOiAyLFxuICAgIGNhcmV0U2l6ZTogNSxcbiAgICBjb3JuZXJSYWRpdXM6IDYsXG4gICAgYm94SGVpZ2h0OiAoY3R4LCBvcHRzKSA9PiBvcHRzLmJvZHlGb250LnNpemUsXG4gICAgYm94V2lkdGg6IChjdHgsIG9wdHMpID0+IG9wdHMuYm9keUZvbnQuc2l6ZSxcbiAgICBtdWx0aUtleUJhY2tncm91bmQ6ICcjZmZmJyxcbiAgICBkaXNwbGF5Q29sb3JzOiB0cnVlLFxuICAgIGJveFBhZGRpbmc6IDAsXG4gICAgYm9yZGVyQ29sb3I6ICdyZ2JhKDAsMCwwLDApJyxcbiAgICBib3JkZXJXaWR0aDogMCxcbiAgICBhbmltYXRpb246IHtcbiAgICAgIGR1cmF0aW9uOiA0MDAsXG4gICAgICBlYXNpbmc6ICdlYXNlT3V0UXVhcnQnXG4gICAgfSxcbiAgICBhbmltYXRpb25zOiB7XG4gICAgICBudW1iZXJzOiB7XG4gICAgICAgIHR5cGU6ICdudW1iZXInLFxuICAgICAgICBwcm9wZXJ0aWVzOiBbJ3gnLCAneScsICd3aWR0aCcsICdoZWlnaHQnLCAnY2FyZXRYJywgJ2NhcmV0WSddXG4gICAgICB9LFxuICAgICAgb3BhY2l0eToge1xuICAgICAgICBlYXNpbmc6ICdsaW5lYXInLFxuICAgICAgICBkdXJhdGlvbjogMjAwXG4gICAgICB9XG4gICAgfSxcbiAgICBjYWxsYmFja3M6IGRlZmF1bHRDYWxsYmFja3NcbiAgfSxcbiAgZGVmYXVsdFJvdXRlczoge1xuICAgIGJvZHlGb250OiAnZm9udCcsXG4gICAgZm9vdGVyRm9udDogJ2ZvbnQnLFxuICAgIHRpdGxlRm9udDogJ2ZvbnQnXG4gIH0sXG4gIGRlc2NyaXB0b3JzOiB7XG4gICAgX3NjcmlwdGFibGU6IG5hbWUgPT4gbmFtZSAhPT0gJ2ZpbHRlcicgJiYgbmFtZSAhPT0gJ2l0ZW1Tb3J0JyAmJiBuYW1lICE9PSAnZXh0ZXJuYWwnLFxuICAgIF9pbmRleGFibGU6IGZhbHNlLFxuICAgIGNhbGxiYWNrczoge1xuICAgICAgX3NjcmlwdGFibGU6IGZhbHNlLFxuICAgICAgX2luZGV4YWJsZTogZmFsc2VcbiAgICB9LFxuICAgIGFuaW1hdGlvbjoge1xuICAgICAgX2ZhbGxiYWNrOiBmYWxzZVxuICAgIH0sXG4gICAgYW5pbWF0aW9uczoge1xuICAgICAgX2ZhbGxiYWNrOiAnYW5pbWF0aW9uJ1xuICAgIH1cbiAgfSxcbiAgYWRkaXRpb25hbE9wdGlvblNjb3BlczogWydpbnRlcmFjdGlvbiddXG59O1xudmFyIHBsdWdpbnMgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG4gIF9fcHJvdG9fXzogbnVsbCxcbiAgQ29sb3JzOiBwbHVnaW5fY29sb3JzLFxuICBEZWNpbWF0aW9uOiBwbHVnaW5fZGVjaW1hdGlvbixcbiAgRmlsbGVyOiBpbmRleCxcbiAgTGVnZW5kOiBwbHVnaW5fbGVnZW5kLFxuICBTdWJUaXRsZTogcGx1Z2luX3N1YnRpdGxlLFxuICBUaXRsZTogcGx1Z2luX3RpdGxlLFxuICBUb29sdGlwOiBwbHVnaW5fdG9vbHRpcFxufSk7XG5jb25zdCBhZGRJZlN0cmluZyA9IChsYWJlbHMsIHJhdywgaW5kZXgsIGFkZGVkTGFiZWxzKSA9PiB7XG4gIGlmICh0eXBlb2YgcmF3ID09PSAnc3RyaW5nJykge1xuICAgIGluZGV4ID0gbGFiZWxzLnB1c2gocmF3KSAtIDE7XG4gICAgYWRkZWRMYWJlbHMudW5zaGlmdCh7XG4gICAgICBpbmRleCxcbiAgICAgIGxhYmVsOiByYXdcbiAgICB9KTtcbiAgfSBlbHNlIGlmIChpc05hTihyYXcpKSB7XG4gICAgaW5kZXggPSBudWxsO1xuICB9XG4gIHJldHVybiBpbmRleDtcbn07XG5mdW5jdGlvbiBmaW5kT3JBZGRMYWJlbChsYWJlbHMsIHJhdywgaW5kZXgsIGFkZGVkTGFiZWxzKSB7XG4gIGNvbnN0IGZpcnN0ID0gbGFiZWxzLmluZGV4T2YocmF3KTtcbiAgaWYgKGZpcnN0ID09PSAtMSkge1xuICAgIHJldHVybiBhZGRJZlN0cmluZyhsYWJlbHMsIHJhdywgaW5kZXgsIGFkZGVkTGFiZWxzKTtcbiAgfVxuICBjb25zdCBsYXN0ID0gbGFiZWxzLmxhc3RJbmRleE9mKHJhdyk7XG4gIHJldHVybiBmaXJzdCAhPT0gbGFzdCA/IGluZGV4IDogZmlyc3Q7XG59XG5jb25zdCB2YWxpZEluZGV4ID0gKGluZGV4LCBtYXgpID0+IGluZGV4ID09PSBudWxsID8gbnVsbCA6IF9saW1pdFZhbHVlKE1hdGgucm91bmQoaW5kZXgpLCAwLCBtYXgpO1xuZnVuY3Rpb24gX2dldExhYmVsRm9yVmFsdWUodmFsdWUpIHtcbiAgY29uc3QgbGFiZWxzID0gdGhpcy5nZXRMYWJlbHMoKTtcbiAgaWYgKHZhbHVlID49IDAgJiYgdmFsdWUgPCBsYWJlbHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGxhYmVsc1t2YWx1ZV07XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxubGV0IENhdGVnb3J5U2NhbGUgPSAvKiNfX1BVUkVfXyovKCgpID0+IHtcbiAgY2xhc3MgQ2F0ZWdvcnlTY2FsZSBleHRlbmRzIFNjYWxlIHtcbiAgICBzdGF0aWMgaWQgPSAnY2F0ZWdvcnknO1xuICAgIHN0YXRpYyBkZWZhdWx0cyA9IHtcbiAgICAgIHRpY2tzOiB7XG4gICAgICAgIGNhbGxiYWNrOiBfZ2V0TGFiZWxGb3JWYWx1ZVxuICAgICAgfVxuICAgIH07XG4gICAgY29uc3RydWN0b3IoY2ZnKSB7XG4gICAgICBzdXBlcihjZmcpO1xuICAgICAgdGhpcy5fc3RhcnRWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX3ZhbHVlUmFuZ2UgPSAwO1xuICAgICAgdGhpcy5fYWRkZWRMYWJlbHMgPSBbXTtcbiAgICB9XG4gICAgaW5pdChzY2FsZU9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IGFkZGVkID0gdGhpcy5fYWRkZWRMYWJlbHM7XG4gICAgICBpZiAoYWRkZWQubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IGxhYmVscyA9IHRoaXMuZ2V0TGFiZWxzKCk7XG4gICAgICAgIGZvciAoY29uc3Qge1xuICAgICAgICAgIGluZGV4LFxuICAgICAgICAgIGxhYmVsXG4gICAgICAgIH0gb2YgYWRkZWQpIHtcbiAgICAgICAgICBpZiAobGFiZWxzW2luZGV4XSA9PT0gbGFiZWwpIHtcbiAgICAgICAgICAgIGxhYmVscy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9hZGRlZExhYmVscyA9IFtdO1xuICAgICAgfVxuICAgICAgc3VwZXIuaW5pdChzY2FsZU9wdGlvbnMpO1xuICAgIH1cbiAgICBwYXJzZShyYXcsIGluZGV4KSB7XG4gICAgICBpZiAoaXNOdWxsT3JVbmRlZihyYXcpKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY29uc3QgbGFiZWxzID0gdGhpcy5nZXRMYWJlbHMoKTtcbiAgICAgIGluZGV4ID0gaXNGaW5pdGUoaW5kZXgpICYmIGxhYmVsc1tpbmRleF0gPT09IHJhdyA/IGluZGV4IDogZmluZE9yQWRkTGFiZWwobGFiZWxzLCByYXcsIHZhbHVlT3JEZWZhdWx0KGluZGV4LCByYXcpLCB0aGlzLl9hZGRlZExhYmVscyk7XG4gICAgICByZXR1cm4gdmFsaWRJbmRleChpbmRleCwgbGFiZWxzLmxlbmd0aCAtIDEpO1xuICAgIH1cbiAgICBkZXRlcm1pbmVEYXRhTGltaXRzKCkge1xuICAgICAgY29uc3Qge1xuICAgICAgICBtaW5EZWZpbmVkLFxuICAgICAgICBtYXhEZWZpbmVkXG4gICAgICB9ID0gdGhpcy5nZXRVc2VyQm91bmRzKCk7XG4gICAgICBsZXQge1xuICAgICAgICBtaW4sXG4gICAgICAgIG1heFxuICAgICAgfSA9IHRoaXMuZ2V0TWluTWF4KHRydWUpO1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5ib3VuZHMgPT09ICd0aWNrcycpIHtcbiAgICAgICAgaWYgKCFtaW5EZWZpbmVkKSB7XG4gICAgICAgICAgbWluID0gMDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIW1heERlZmluZWQpIHtcbiAgICAgICAgICBtYXggPSB0aGlzLmdldExhYmVscygpLmxlbmd0aCAtIDE7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMubWluID0gbWluO1xuICAgICAgdGhpcy5tYXggPSBtYXg7XG4gICAgfVxuICAgIGJ1aWxkVGlja3MoKSB7XG4gICAgICBjb25zdCBtaW4gPSB0aGlzLm1pbjtcbiAgICAgIGNvbnN0IG1heCA9IHRoaXMubWF4O1xuICAgICAgY29uc3Qgb2Zmc2V0ID0gdGhpcy5vcHRpb25zLm9mZnNldDtcbiAgICAgIGNvbnN0IHRpY2tzID0gW107XG4gICAgICBsZXQgbGFiZWxzID0gdGhpcy5nZXRMYWJlbHMoKTtcbiAgICAgIGxhYmVscyA9IG1pbiA9PT0gMCAmJiBtYXggPT09IGxhYmVscy5sZW5ndGggLSAxID8gbGFiZWxzIDogbGFiZWxzLnNsaWNlKG1pbiwgbWF4ICsgMSk7XG4gICAgICB0aGlzLl92YWx1ZVJhbmdlID0gTWF0aC5tYXgobGFiZWxzLmxlbmd0aCAtIChvZmZzZXQgPyAwIDogMSksIDEpO1xuICAgICAgdGhpcy5fc3RhcnRWYWx1ZSA9IHRoaXMubWluIC0gKG9mZnNldCA/IDAuNSA6IDApO1xuICAgICAgZm9yIChsZXQgdmFsdWUgPSBtaW47IHZhbHVlIDw9IG1heDsgdmFsdWUrKykge1xuICAgICAgICB0aWNrcy5wdXNoKHtcbiAgICAgICAgICB2YWx1ZVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aWNrcztcbiAgICB9XG4gICAgZ2V0TGFiZWxGb3JWYWx1ZSh2YWx1ZSkge1xuICAgICAgcmV0dXJuIF9nZXRMYWJlbEZvclZhbHVlLmNhbGwodGhpcywgdmFsdWUpO1xuICAgIH1cbiAgICBjb25maWd1cmUoKSB7XG4gICAgICBzdXBlci5jb25maWd1cmUoKTtcbiAgICAgIGlmICghdGhpcy5pc0hvcml6b250YWwoKSkge1xuICAgICAgICB0aGlzLl9yZXZlcnNlUGl4ZWxzID0gIXRoaXMuX3JldmVyc2VQaXhlbHM7XG4gICAgICB9XG4gICAgfVxuICAgIGdldFBpeGVsRm9yVmFsdWUodmFsdWUpIHtcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdudW1iZXInKSB7XG4gICAgICAgIHZhbHVlID0gdGhpcy5wYXJzZSh2YWx1ZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBOYU4gOiB0aGlzLmdldFBpeGVsRm9yRGVjaW1hbCgodmFsdWUgLSB0aGlzLl9zdGFydFZhbHVlKSAvIHRoaXMuX3ZhbHVlUmFuZ2UpO1xuICAgIH1cbiAgICBnZXRQaXhlbEZvclRpY2soaW5kZXgpIHtcbiAgICAgIGNvbnN0IHRpY2tzID0gdGhpcy50aWNrcztcbiAgICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPiB0aWNrcy5sZW5ndGggLSAxKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuZ2V0UGl4ZWxGb3JWYWx1ZSh0aWNrc1tpbmRleF0udmFsdWUpO1xuICAgIH1cbiAgICBnZXRWYWx1ZUZvclBpeGVsKHBpeGVsKSB7XG4gICAgICByZXR1cm4gTWF0aC5yb3VuZCh0aGlzLl9zdGFydFZhbHVlICsgdGhpcy5nZXREZWNpbWFsRm9yUGl4ZWwocGl4ZWwpICogdGhpcy5fdmFsdWVSYW5nZSk7XG4gICAgfVxuICAgIGdldEJhc2VQaXhlbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmJvdHRvbTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIENhdGVnb3J5U2NhbGU7XG59KSgpO1xuZnVuY3Rpb24gZ2VuZXJhdGVUaWNrcyQxKGdlbmVyYXRpb25PcHRpb25zLCBkYXRhUmFuZ2UpIHtcbiAgY29uc3QgdGlja3MgPSBbXTtcbiAgY29uc3QgTUlOX1NQQUNJTkcgPSAxZS0xNDtcbiAgY29uc3Qge1xuICAgIGJvdW5kcyxcbiAgICBzdGVwLFxuICAgIG1pbixcbiAgICBtYXgsXG4gICAgcHJlY2lzaW9uLFxuICAgIGNvdW50LFxuICAgIG1heFRpY2tzLFxuICAgIG1heERpZ2l0cyxcbiAgICBpbmNsdWRlQm91bmRzXG4gIH0gPSBnZW5lcmF0aW9uT3B0aW9ucztcbiAgY29uc3QgdW5pdCA9IHN0ZXAgfHwgMTtcbiAgY29uc3QgbWF4U3BhY2VzID0gbWF4VGlja3MgLSAxO1xuICBjb25zdCB7XG4gICAgbWluOiBybWluLFxuICAgIG1heDogcm1heFxuICB9ID0gZGF0YVJhbmdlO1xuICBjb25zdCBtaW5EZWZpbmVkID0gIWlzTnVsbE9yVW5kZWYobWluKTtcbiAgY29uc3QgbWF4RGVmaW5lZCA9ICFpc051bGxPclVuZGVmKG1heCk7XG4gIGNvbnN0IGNvdW50RGVmaW5lZCA9ICFpc051bGxPclVuZGVmKGNvdW50KTtcbiAgY29uc3QgbWluU3BhY2luZyA9IChybWF4IC0gcm1pbikgLyAobWF4RGlnaXRzICsgMSk7XG4gIGxldCBzcGFjaW5nID0gbmljZU51bSgocm1heCAtIHJtaW4pIC8gbWF4U3BhY2VzIC8gdW5pdCkgKiB1bml0O1xuICBsZXQgZmFjdG9yLCBuaWNlTWluLCBuaWNlTWF4LCBudW1TcGFjZXM7XG4gIGlmIChzcGFjaW5nIDwgTUlOX1NQQUNJTkcgJiYgIW1pbkRlZmluZWQgJiYgIW1heERlZmluZWQpIHtcbiAgICByZXR1cm4gW3tcbiAgICAgIHZhbHVlOiBybWluXG4gICAgfSwge1xuICAgICAgdmFsdWU6IHJtYXhcbiAgICB9XTtcbiAgfVxuICBudW1TcGFjZXMgPSBNYXRoLmNlaWwocm1heCAvIHNwYWNpbmcpIC0gTWF0aC5mbG9vcihybWluIC8gc3BhY2luZyk7XG4gIGlmIChudW1TcGFjZXMgPiBtYXhTcGFjZXMpIHtcbiAgICBzcGFjaW5nID0gbmljZU51bShudW1TcGFjZXMgKiBzcGFjaW5nIC8gbWF4U3BhY2VzIC8gdW5pdCkgKiB1bml0O1xuICB9XG4gIGlmICghaXNOdWxsT3JVbmRlZihwcmVjaXNpb24pKSB7XG4gICAgZmFjdG9yID0gTWF0aC5wb3coMTAsIHByZWNpc2lvbik7XG4gICAgc3BhY2luZyA9IE1hdGguY2VpbChzcGFjaW5nICogZmFjdG9yKSAvIGZhY3RvcjtcbiAgfVxuICBpZiAoYm91bmRzID09PSAndGlja3MnKSB7XG4gICAgbmljZU1pbiA9IE1hdGguZmxvb3Iocm1pbiAvIHNwYWNpbmcpICogc3BhY2luZztcbiAgICBuaWNlTWF4ID0gTWF0aC5jZWlsKHJtYXggLyBzcGFjaW5nKSAqIHNwYWNpbmc7XG4gIH0gZWxzZSB7XG4gICAgbmljZU1pbiA9IHJtaW47XG4gICAgbmljZU1heCA9IHJtYXg7XG4gIH1cbiAgaWYgKG1pbkRlZmluZWQgJiYgbWF4RGVmaW5lZCAmJiBzdGVwICYmIGFsbW9zdFdob2xlKChtYXggLSBtaW4pIC8gc3RlcCwgc3BhY2luZyAvIDEwMDApKSB7XG4gICAgbnVtU3BhY2VzID0gTWF0aC5yb3VuZChNYXRoLm1pbigobWF4IC0gbWluKSAvIHNwYWNpbmcsIG1heFRpY2tzKSk7XG4gICAgc3BhY2luZyA9IChtYXggLSBtaW4pIC8gbnVtU3BhY2VzO1xuICAgIG5pY2VNaW4gPSBtaW47XG4gICAgbmljZU1heCA9IG1heDtcbiAgfSBlbHNlIGlmIChjb3VudERlZmluZWQpIHtcbiAgICBuaWNlTWluID0gbWluRGVmaW5lZCA/IG1pbiA6IG5pY2VNaW47XG4gICAgbmljZU1heCA9IG1heERlZmluZWQgPyBtYXggOiBuaWNlTWF4O1xuICAgIG51bVNwYWNlcyA9IGNvdW50IC0gMTtcbiAgICBzcGFjaW5nID0gKG5pY2VNYXggLSBuaWNlTWluKSAvIG51bVNwYWNlcztcbiAgfSBlbHNlIHtcbiAgICBudW1TcGFjZXMgPSAobmljZU1heCAtIG5pY2VNaW4pIC8gc3BhY2luZztcbiAgICBpZiAoYWxtb3N0RXF1YWxzKG51bVNwYWNlcywgTWF0aC5yb3VuZChudW1TcGFjZXMpLCBzcGFjaW5nIC8gMTAwMCkpIHtcbiAgICAgIG51bVNwYWNlcyA9IE1hdGgucm91bmQobnVtU3BhY2VzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbnVtU3BhY2VzID0gTWF0aC5jZWlsKG51bVNwYWNlcyk7XG4gICAgfVxuICB9XG4gIGNvbnN0IGRlY2ltYWxQbGFjZXMgPSBNYXRoLm1heChfZGVjaW1hbFBsYWNlcyhzcGFjaW5nKSwgX2RlY2ltYWxQbGFjZXMobmljZU1pbikpO1xuICBmYWN0b3IgPSBNYXRoLnBvdygxMCwgaXNOdWxsT3JVbmRlZihwcmVjaXNpb24pID8gZGVjaW1hbFBsYWNlcyA6IHByZWNpc2lvbik7XG4gIG5pY2VNaW4gPSBNYXRoLnJvdW5kKG5pY2VNaW4gKiBmYWN0b3IpIC8gZmFjdG9yO1xuICBuaWNlTWF4ID0gTWF0aC5yb3VuZChuaWNlTWF4ICogZmFjdG9yKSAvIGZhY3RvcjtcbiAgbGV0IGogPSAwO1xuICBpZiAobWluRGVmaW5lZCkge1xuICAgIGlmIChpbmNsdWRlQm91bmRzICYmIG5pY2VNaW4gIT09IG1pbikge1xuICAgICAgdGlja3MucHVzaCh7XG4gICAgICAgIHZhbHVlOiBtaW5cbiAgICAgIH0pO1xuICAgICAgaWYgKG5pY2VNaW4gPCBtaW4pIHtcbiAgICAgICAgaisrO1xuICAgICAgfVxuICAgICAgaWYgKGFsbW9zdEVxdWFscyhNYXRoLnJvdW5kKChuaWNlTWluICsgaiAqIHNwYWNpbmcpICogZmFjdG9yKSAvIGZhY3RvciwgbWluLCByZWxhdGl2ZUxhYmVsU2l6ZShtaW4sIG1pblNwYWNpbmcsIGdlbmVyYXRpb25PcHRpb25zKSkpIHtcbiAgICAgICAgaisrO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAobmljZU1pbiA8IG1pbikge1xuICAgICAgaisrO1xuICAgIH1cbiAgfVxuICBmb3IgKDsgaiA8IG51bVNwYWNlczsgKytqKSB7XG4gICAgY29uc3QgdGlja1ZhbHVlID0gTWF0aC5yb3VuZCgobmljZU1pbiArIGogKiBzcGFjaW5nKSAqIGZhY3RvcikgLyBmYWN0b3I7XG4gICAgaWYgKG1heERlZmluZWQgJiYgdGlja1ZhbHVlID4gbWF4KSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdGlja3MucHVzaCh7XG4gICAgICB2YWx1ZTogdGlja1ZhbHVlXG4gICAgfSk7XG4gIH1cbiAgaWYgKG1heERlZmluZWQgJiYgaW5jbHVkZUJvdW5kcyAmJiBuaWNlTWF4ICE9PSBtYXgpIHtcbiAgICBpZiAodGlja3MubGVuZ3RoICYmIGFsbW9zdEVxdWFscyh0aWNrc1t0aWNrcy5sZW5ndGggLSAxXS52YWx1ZSwgbWF4LCByZWxhdGl2ZUxhYmVsU2l6ZShtYXgsIG1pblNwYWNpbmcsIGdlbmVyYXRpb25PcHRpb25zKSkpIHtcbiAgICAgIHRpY2tzW3RpY2tzLmxlbmd0aCAtIDFdLnZhbHVlID0gbWF4O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aWNrcy5wdXNoKHtcbiAgICAgICAgdmFsdWU6IG1heFxuICAgICAgfSk7XG4gICAgfVxuICB9IGVsc2UgaWYgKCFtYXhEZWZpbmVkIHx8IG5pY2VNYXggPT09IG1heCkge1xuICAgIHRpY2tzLnB1c2goe1xuICAgICAgdmFsdWU6IG5pY2VNYXhcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gdGlja3M7XG59XG5mdW5jdGlvbiByZWxhdGl2ZUxhYmVsU2l6ZSh2YWx1ZSwgbWluU3BhY2luZywge1xuICBob3Jpem9udGFsLFxuICBtaW5Sb3RhdGlvblxufSkge1xuICBjb25zdCByYWQgPSB0b1JhZGlhbnMobWluUm90YXRpb24pO1xuICBjb25zdCByYXRpbyA9IChob3Jpem9udGFsID8gTWF0aC5zaW4ocmFkKSA6IE1hdGguY29zKHJhZCkpIHx8IDAuMDAxO1xuICBjb25zdCBsZW5ndGggPSAwLjc1ICogbWluU3BhY2luZyAqICgnJyArIHZhbHVlKS5sZW5ndGg7XG4gIHJldHVybiBNYXRoLm1pbihtaW5TcGFjaW5nIC8gcmF0aW8sIGxlbmd0aCk7XG59XG5jbGFzcyBMaW5lYXJTY2FsZUJhc2UgZXh0ZW5kcyBTY2FsZSB7XG4gIGNvbnN0cnVjdG9yKGNmZykge1xuICAgIHN1cGVyKGNmZyk7XG4gICAgdGhpcy5zdGFydCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmVuZCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLl9zdGFydFZhbHVlID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuX2VuZFZhbHVlID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuX3ZhbHVlUmFuZ2UgPSAwO1xuICB9XG4gIHBhcnNlKHJhdywgaW5kZXgpIHtcbiAgICBpZiAoaXNOdWxsT3JVbmRlZihyYXcpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgaWYgKCh0eXBlb2YgcmF3ID09PSAnbnVtYmVyJyB8fCByYXcgaW5zdGFuY2VvZiBOdW1iZXIpICYmICFpc0Zpbml0ZSgrcmF3KSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiArcmF3O1xuICB9XG4gIGhhbmRsZVRpY2tSYW5nZU9wdGlvbnMoKSB7XG4gICAgY29uc3Qge1xuICAgICAgYmVnaW5BdFplcm9cbiAgICB9ID0gdGhpcy5vcHRpb25zO1xuICAgIGNvbnN0IHtcbiAgICAgIG1pbkRlZmluZWQsXG4gICAgICBtYXhEZWZpbmVkXG4gICAgfSA9IHRoaXMuZ2V0VXNlckJvdW5kcygpO1xuICAgIGxldCB7XG4gICAgICBtaW4sXG4gICAgICBtYXhcbiAgICB9ID0gdGhpcztcbiAgICBjb25zdCBzZXRNaW4gPSB2ID0+IG1pbiA9IG1pbkRlZmluZWQgPyBtaW4gOiB2O1xuICAgIGNvbnN0IHNldE1heCA9IHYgPT4gbWF4ID0gbWF4RGVmaW5lZCA/IG1heCA6IHY7XG4gICAgaWYgKGJlZ2luQXRaZXJvKSB7XG4gICAgICBjb25zdCBtaW5TaWduID0gc2lnbihtaW4pO1xuICAgICAgY29uc3QgbWF4U2lnbiA9IHNpZ24obWF4KTtcbiAgICAgIGlmIChtaW5TaWduIDwgMCAmJiBtYXhTaWduIDwgMCkge1xuICAgICAgICBzZXRNYXgoMCk7XG4gICAgICB9IGVsc2UgaWYgKG1pblNpZ24gPiAwICYmIG1heFNpZ24gPiAwKSB7XG4gICAgICAgIHNldE1pbigwKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKG1pbiA9PT0gbWF4KSB7XG4gICAgICBsZXQgb2Zmc2V0ID0gbWF4ID09PSAwID8gMSA6IE1hdGguYWJzKG1heCAqIDAuMDUpO1xuICAgICAgc2V0TWF4KG1heCArIG9mZnNldCk7XG4gICAgICBpZiAoIWJlZ2luQXRaZXJvKSB7XG4gICAgICAgIHNldE1pbihtaW4gLSBvZmZzZXQpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLm1pbiA9IG1pbjtcbiAgICB0aGlzLm1heCA9IG1heDtcbiAgfVxuICBnZXRUaWNrTGltaXQoKSB7XG4gICAgY29uc3QgdGlja09wdHMgPSB0aGlzLm9wdGlvbnMudGlja3M7XG4gICAgbGV0IHtcbiAgICAgIG1heFRpY2tzTGltaXQsXG4gICAgICBzdGVwU2l6ZVxuICAgIH0gPSB0aWNrT3B0cztcbiAgICBsZXQgbWF4VGlja3M7XG4gICAgaWYgKHN0ZXBTaXplKSB7XG4gICAgICBtYXhUaWNrcyA9IE1hdGguY2VpbCh0aGlzLm1heCAvIHN0ZXBTaXplKSAtIE1hdGguZmxvb3IodGhpcy5taW4gLyBzdGVwU2l6ZSkgKyAxO1xuICAgICAgaWYgKG1heFRpY2tzID4gMTAwMCkge1xuICAgICAgICBjb25zb2xlLndhcm4oYHNjYWxlcy4ke3RoaXMuaWR9LnRpY2tzLnN0ZXBTaXplOiAke3N0ZXBTaXplfSB3b3VsZCByZXN1bHQgZ2VuZXJhdGluZyB1cCB0byAke21heFRpY2tzfSB0aWNrcy4gTGltaXRpbmcgdG8gMTAwMC5gKTtcbiAgICAgICAgbWF4VGlja3MgPSAxMDAwO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBtYXhUaWNrcyA9IHRoaXMuY29tcHV0ZVRpY2tMaW1pdCgpO1xuICAgICAgbWF4VGlja3NMaW1pdCA9IG1heFRpY2tzTGltaXQgfHwgMTE7XG4gICAgfVxuICAgIGlmIChtYXhUaWNrc0xpbWl0KSB7XG4gICAgICBtYXhUaWNrcyA9IE1hdGgubWluKG1heFRpY2tzTGltaXQsIG1heFRpY2tzKTtcbiAgICB9XG4gICAgcmV0dXJuIG1heFRpY2tzO1xuICB9XG4gIGNvbXB1dGVUaWNrTGltaXQoKSB7XG4gICAgcmV0dXJuIE51bWJlci5QT1NJVElWRV9JTkZJTklUWTtcbiAgfVxuICBidWlsZFRpY2tzKCkge1xuICAgIGNvbnN0IG9wdHMgPSB0aGlzLm9wdGlvbnM7XG4gICAgY29uc3QgdGlja09wdHMgPSBvcHRzLnRpY2tzO1xuICAgIGxldCBtYXhUaWNrcyA9IHRoaXMuZ2V0VGlja0xpbWl0KCk7XG4gICAgbWF4VGlja3MgPSBNYXRoLm1heCgyLCBtYXhUaWNrcyk7XG4gICAgY29uc3QgbnVtZXJpY0dlbmVyYXRvck9wdGlvbnMgPSB7XG4gICAgICBtYXhUaWNrcyxcbiAgICAgIGJvdW5kczogb3B0cy5ib3VuZHMsXG4gICAgICBtaW46IG9wdHMubWluLFxuICAgICAgbWF4OiBvcHRzLm1heCxcbiAgICAgIHByZWNpc2lvbjogdGlja09wdHMucHJlY2lzaW9uLFxuICAgICAgc3RlcDogdGlja09wdHMuc3RlcFNpemUsXG4gICAgICBjb3VudDogdGlja09wdHMuY291bnQsXG4gICAgICBtYXhEaWdpdHM6IHRoaXMuX21heERpZ2l0cygpLFxuICAgICAgaG9yaXpvbnRhbDogdGhpcy5pc0hvcml6b250YWwoKSxcbiAgICAgIG1pblJvdGF0aW9uOiB0aWNrT3B0cy5taW5Sb3RhdGlvbiB8fCAwLFxuICAgICAgaW5jbHVkZUJvdW5kczogdGlja09wdHMuaW5jbHVkZUJvdW5kcyAhPT0gZmFsc2VcbiAgICB9O1xuICAgIGNvbnN0IGRhdGFSYW5nZSA9IHRoaXMuX3JhbmdlIHx8IHRoaXM7XG4gICAgY29uc3QgdGlja3MgPSBnZW5lcmF0ZVRpY2tzJDEobnVtZXJpY0dlbmVyYXRvck9wdGlvbnMsIGRhdGFSYW5nZSk7XG4gICAgaWYgKG9wdHMuYm91bmRzID09PSAndGlja3MnKSB7XG4gICAgICBfc2V0TWluQW5kTWF4QnlLZXkodGlja3MsIHRoaXMsICd2YWx1ZScpO1xuICAgIH1cbiAgICBpZiAob3B0cy5yZXZlcnNlKSB7XG4gICAgICB0aWNrcy5yZXZlcnNlKCk7XG4gICAgICB0aGlzLnN0YXJ0ID0gdGhpcy5tYXg7XG4gICAgICB0aGlzLmVuZCA9IHRoaXMubWluO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnN0YXJ0ID0gdGhpcy5taW47XG4gICAgICB0aGlzLmVuZCA9IHRoaXMubWF4O1xuICAgIH1cbiAgICByZXR1cm4gdGlja3M7XG4gIH1cbiAgY29uZmlndXJlKCkge1xuICAgIGNvbnN0IHRpY2tzID0gdGhpcy50aWNrcztcbiAgICBsZXQgc3RhcnQgPSB0aGlzLm1pbjtcbiAgICBsZXQgZW5kID0gdGhpcy5tYXg7XG4gICAgc3VwZXIuY29uZmlndXJlKCk7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5vZmZzZXQgJiYgdGlja3MubGVuZ3RoKSB7XG4gICAgICBjb25zdCBvZmZzZXQgPSAoZW5kIC0gc3RhcnQpIC8gTWF0aC5tYXgodGlja3MubGVuZ3RoIC0gMSwgMSkgLyAyO1xuICAgICAgc3RhcnQgLT0gb2Zmc2V0O1xuICAgICAgZW5kICs9IG9mZnNldDtcbiAgICB9XG4gICAgdGhpcy5fc3RhcnRWYWx1ZSA9IHN0YXJ0O1xuICAgIHRoaXMuX2VuZFZhbHVlID0gZW5kO1xuICAgIHRoaXMuX3ZhbHVlUmFuZ2UgPSBlbmQgLSBzdGFydDtcbiAgfVxuICBnZXRMYWJlbEZvclZhbHVlKHZhbHVlKSB7XG4gICAgcmV0dXJuIGZvcm1hdE51bWJlcih2YWx1ZSwgdGhpcy5jaGFydC5vcHRpb25zLmxvY2FsZSwgdGhpcy5vcHRpb25zLnRpY2tzLmZvcm1hdCk7XG4gIH1cbn1cbmNsYXNzIExpbmVhclNjYWxlIGV4dGVuZHMgTGluZWFyU2NhbGVCYXNlIHtcbiAgc3RhdGljIGlkID0gJ2xpbmVhcic7XG4gIHN0YXRpYyBkZWZhdWx0cyA9IHtcbiAgICB0aWNrczoge1xuICAgICAgY2FsbGJhY2s6IFRpY2tzLmZvcm1hdHRlcnMubnVtZXJpY1xuICAgIH1cbiAgfTtcbiAgZGV0ZXJtaW5lRGF0YUxpbWl0cygpIHtcbiAgICBjb25zdCB7XG4gICAgICBtaW4sXG4gICAgICBtYXhcbiAgICB9ID0gdGhpcy5nZXRNaW5NYXgodHJ1ZSk7XG4gICAgdGhpcy5taW4gPSBpc051bWJlckZpbml0ZShtaW4pID8gbWluIDogMDtcbiAgICB0aGlzLm1heCA9IGlzTnVtYmVyRmluaXRlKG1heCkgPyBtYXggOiAxO1xuICAgIHRoaXMuaGFuZGxlVGlja1JhbmdlT3B0aW9ucygpO1xuICB9XG4gIGNvbXB1dGVUaWNrTGltaXQoKSB7XG4gICAgY29uc3QgaG9yaXpvbnRhbCA9IHRoaXMuaXNIb3Jpem9udGFsKCk7XG4gICAgY29uc3QgbGVuZ3RoID0gaG9yaXpvbnRhbCA/IHRoaXMud2lkdGggOiB0aGlzLmhlaWdodDtcbiAgICBjb25zdCBtaW5Sb3RhdGlvbiA9IHRvUmFkaWFucyh0aGlzLm9wdGlvbnMudGlja3MubWluUm90YXRpb24pO1xuICAgIGNvbnN0IHJhdGlvID0gKGhvcml6b250YWwgPyBNYXRoLnNpbihtaW5Sb3RhdGlvbikgOiBNYXRoLmNvcyhtaW5Sb3RhdGlvbikpIHx8IDAuMDAxO1xuICAgIGNvbnN0IHRpY2tGb250ID0gdGhpcy5fcmVzb2x2ZVRpY2tGb250T3B0aW9ucygwKTtcbiAgICByZXR1cm4gTWF0aC5jZWlsKGxlbmd0aCAvIE1hdGgubWluKDQwLCB0aWNrRm9udC5saW5lSGVpZ2h0IC8gcmF0aW8pKTtcbiAgfVxuICBnZXRQaXhlbEZvclZhbHVlKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gTmFOIDogdGhpcy5nZXRQaXhlbEZvckRlY2ltYWwoKHZhbHVlIC0gdGhpcy5fc3RhcnRWYWx1ZSkgLyB0aGlzLl92YWx1ZVJhbmdlKTtcbiAgfVxuICBnZXRWYWx1ZUZvclBpeGVsKHBpeGVsKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXJ0VmFsdWUgKyB0aGlzLmdldERlY2ltYWxGb3JQaXhlbChwaXhlbCkgKiB0aGlzLl92YWx1ZVJhbmdlO1xuICB9XG59XG5jb25zdCBsb2cxMEZsb29yID0gdiA9PiBNYXRoLmZsb29yKGxvZzEwKHYpKTtcbmNvbnN0IGNoYW5nZUV4cG9uZW50ID0gKHYsIG0pID0+IE1hdGgucG93KDEwLCBsb2cxMEZsb29yKHYpICsgbSk7XG5mdW5jdGlvbiBpc01ham9yKHRpY2tWYWwpIHtcbiAgY29uc3QgcmVtYWluID0gdGlja1ZhbCAvIE1hdGgucG93KDEwLCBsb2cxMEZsb29yKHRpY2tWYWwpKTtcbiAgcmV0dXJuIHJlbWFpbiA9PT0gMTtcbn1cbmZ1bmN0aW9uIHN0ZXBzKG1pbiwgbWF4LCByYW5nZUV4cCkge1xuICBjb25zdCByYW5nZVN0ZXAgPSBNYXRoLnBvdygxMCwgcmFuZ2VFeHApO1xuICBjb25zdCBzdGFydCA9IE1hdGguZmxvb3IobWluIC8gcmFuZ2VTdGVwKTtcbiAgY29uc3QgZW5kID0gTWF0aC5jZWlsKG1heCAvIHJhbmdlU3RlcCk7XG4gIHJldHVybiBlbmQgLSBzdGFydDtcbn1cbmZ1bmN0aW9uIHN0YXJ0RXhwKG1pbiwgbWF4KSB7XG4gIGNvbnN0IHJhbmdlID0gbWF4IC0gbWluO1xuICBsZXQgcmFuZ2VFeHAgPSBsb2cxMEZsb29yKHJhbmdlKTtcbiAgd2hpbGUgKHN0ZXBzKG1pbiwgbWF4LCByYW5nZUV4cCkgPiAxMCkge1xuICAgIHJhbmdlRXhwKys7XG4gIH1cbiAgd2hpbGUgKHN0ZXBzKG1pbiwgbWF4LCByYW5nZUV4cCkgPCAxMCkge1xuICAgIHJhbmdlRXhwLS07XG4gIH1cbiAgcmV0dXJuIE1hdGgubWluKHJhbmdlRXhwLCBsb2cxMEZsb29yKG1pbikpO1xufVxuZnVuY3Rpb24gZ2VuZXJhdGVUaWNrcyhnZW5lcmF0aW9uT3B0aW9ucywge1xuICBtaW4sXG4gIG1heFxufSkge1xuICBtaW4gPSBmaW5pdGVPckRlZmF1bHQoZ2VuZXJhdGlvbk9wdGlvbnMubWluLCBtaW4pO1xuICBjb25zdCB0aWNrcyA9IFtdO1xuICBjb25zdCBtaW5FeHAgPSBsb2cxMEZsb29yKG1pbik7XG4gIGxldCBleHAgPSBzdGFydEV4cChtaW4sIG1heCk7XG4gIGxldCBwcmVjaXNpb24gPSBleHAgPCAwID8gTWF0aC5wb3coMTAsIE1hdGguYWJzKGV4cCkpIDogMTtcbiAgY29uc3Qgc3RlcFNpemUgPSBNYXRoLnBvdygxMCwgZXhwKTtcbiAgY29uc3QgYmFzZSA9IG1pbkV4cCA+IGV4cCA/IE1hdGgucG93KDEwLCBtaW5FeHApIDogMDtcbiAgY29uc3Qgc3RhcnQgPSBNYXRoLnJvdW5kKChtaW4gLSBiYXNlKSAqIHByZWNpc2lvbikgLyBwcmVjaXNpb247XG4gIGNvbnN0IG9mZnNldCA9IE1hdGguZmxvb3IoKG1pbiAtIGJhc2UpIC8gc3RlcFNpemUgLyAxMCkgKiBzdGVwU2l6ZSAqIDEwO1xuICBsZXQgc2lnbmlmaWNhbmQgPSBNYXRoLmZsb29yKChzdGFydCAtIG9mZnNldCkgLyBNYXRoLnBvdygxMCwgZXhwKSk7XG4gIGxldCB2YWx1ZSA9IGZpbml0ZU9yRGVmYXVsdChnZW5lcmF0aW9uT3B0aW9ucy5taW4sIE1hdGgucm91bmQoKGJhc2UgKyBvZmZzZXQgKyBzaWduaWZpY2FuZCAqIE1hdGgucG93KDEwLCBleHApKSAqIHByZWNpc2lvbikgLyBwcmVjaXNpb24pO1xuICB3aGlsZSAodmFsdWUgPCBtYXgpIHtcbiAgICB0aWNrcy5wdXNoKHtcbiAgICAgIHZhbHVlLFxuICAgICAgbWFqb3I6IGlzTWFqb3IodmFsdWUpLFxuICAgICAgc2lnbmlmaWNhbmRcbiAgICB9KTtcbiAgICBpZiAoc2lnbmlmaWNhbmQgPj0gMTApIHtcbiAgICAgIHNpZ25pZmljYW5kID0gc2lnbmlmaWNhbmQgPCAxNSA/IDE1IDogMjA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNpZ25pZmljYW5kKys7XG4gICAgfVxuICAgIGlmIChzaWduaWZpY2FuZCA+PSAyMCkge1xuICAgICAgZXhwKys7XG4gICAgICBzaWduaWZpY2FuZCA9IDI7XG4gICAgICBwcmVjaXNpb24gPSBleHAgPj0gMCA/IDEgOiBwcmVjaXNpb247XG4gICAgfVxuICAgIHZhbHVlID0gTWF0aC5yb3VuZCgoYmFzZSArIG9mZnNldCArIHNpZ25pZmljYW5kICogTWF0aC5wb3coMTAsIGV4cCkpICogcHJlY2lzaW9uKSAvIHByZWNpc2lvbjtcbiAgfVxuICBjb25zdCBsYXN0VGljayA9IGZpbml0ZU9yRGVmYXVsdChnZW5lcmF0aW9uT3B0aW9ucy5tYXgsIHZhbHVlKTtcbiAgdGlja3MucHVzaCh7XG4gICAgdmFsdWU6IGxhc3RUaWNrLFxuICAgIG1ham9yOiBpc01ham9yKGxhc3RUaWNrKSxcbiAgICBzaWduaWZpY2FuZFxuICB9KTtcbiAgcmV0dXJuIHRpY2tzO1xufVxuY2xhc3MgTG9nYXJpdGhtaWNTY2FsZSBleHRlbmRzIFNjYWxlIHtcbiAgc3RhdGljIGlkID0gJ2xvZ2FyaXRobWljJztcbiAgc3RhdGljIGRlZmF1bHRzID0ge1xuICAgIHRpY2tzOiB7XG4gICAgICBjYWxsYmFjazogVGlja3MuZm9ybWF0dGVycy5sb2dhcml0aG1pYyxcbiAgICAgIG1ham9yOiB7XG4gICAgICAgIGVuYWJsZWQ6IHRydWVcbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIGNvbnN0cnVjdG9yKGNmZykge1xuICAgIHN1cGVyKGNmZyk7XG4gICAgdGhpcy5zdGFydCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmVuZCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLl9zdGFydFZhbHVlID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuX3ZhbHVlUmFuZ2UgPSAwO1xuICB9XG4gIHBhcnNlKHJhdywgaW5kZXgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IExpbmVhclNjYWxlQmFzZS5wcm90b3R5cGUucGFyc2UuYXBwbHkodGhpcywgW3JhdywgaW5kZXhdKTtcbiAgICBpZiAodmFsdWUgPT09IDApIHtcbiAgICAgIHRoaXMuX3plcm8gPSB0cnVlO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIGlzTnVtYmVyRmluaXRlKHZhbHVlKSAmJiB2YWx1ZSA+IDAgPyB2YWx1ZSA6IG51bGw7XG4gIH1cbiAgZGV0ZXJtaW5lRGF0YUxpbWl0cygpIHtcbiAgICBjb25zdCB7XG4gICAgICBtaW4sXG4gICAgICBtYXhcbiAgICB9ID0gdGhpcy5nZXRNaW5NYXgodHJ1ZSk7XG4gICAgdGhpcy5taW4gPSBpc051bWJlckZpbml0ZShtaW4pID8gTWF0aC5tYXgoMCwgbWluKSA6IG51bGw7XG4gICAgdGhpcy5tYXggPSBpc051bWJlckZpbml0ZShtYXgpID8gTWF0aC5tYXgoMCwgbWF4KSA6IG51bGw7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5iZWdpbkF0WmVybykge1xuICAgICAgdGhpcy5femVybyA9IHRydWU7XG4gICAgfVxuICAgIGlmICh0aGlzLl96ZXJvICYmIHRoaXMubWluICE9PSB0aGlzLl9zdWdnZXN0ZWRNaW4gJiYgIWlzTnVtYmVyRmluaXRlKHRoaXMuX3VzZXJNaW4pKSB7XG4gICAgICB0aGlzLm1pbiA9IG1pbiA9PT0gY2hhbmdlRXhwb25lbnQodGhpcy5taW4sIDApID8gY2hhbmdlRXhwb25lbnQodGhpcy5taW4sIC0xKSA6IGNoYW5nZUV4cG9uZW50KHRoaXMubWluLCAwKTtcbiAgICB9XG4gICAgdGhpcy5oYW5kbGVUaWNrUmFuZ2VPcHRpb25zKCk7XG4gIH1cbiAgaGFuZGxlVGlja1JhbmdlT3B0aW9ucygpIHtcbiAgICBjb25zdCB7XG4gICAgICBtaW5EZWZpbmVkLFxuICAgICAgbWF4RGVmaW5lZFxuICAgIH0gPSB0aGlzLmdldFVzZXJCb3VuZHMoKTtcbiAgICBsZXQgbWluID0gdGhpcy5taW47XG4gICAgbGV0IG1heCA9IHRoaXMubWF4O1xuICAgIGNvbnN0IHNldE1pbiA9IHYgPT4gbWluID0gbWluRGVmaW5lZCA/IG1pbiA6IHY7XG4gICAgY29uc3Qgc2V0TWF4ID0gdiA9PiBtYXggPSBtYXhEZWZpbmVkID8gbWF4IDogdjtcbiAgICBpZiAobWluID09PSBtYXgpIHtcbiAgICAgIGlmIChtaW4gPD0gMCkge1xuICAgICAgICBzZXRNaW4oMSk7XG4gICAgICAgIHNldE1heCgxMCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXRNaW4oY2hhbmdlRXhwb25lbnQobWluLCAtMSkpO1xuICAgICAgICBzZXRNYXgoY2hhbmdlRXhwb25lbnQobWF4LCArMSkpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAobWluIDw9IDApIHtcbiAgICAgIHNldE1pbihjaGFuZ2VFeHBvbmVudChtYXgsIC0xKSk7XG4gICAgfVxuICAgIGlmIChtYXggPD0gMCkge1xuICAgICAgc2V0TWF4KGNoYW5nZUV4cG9uZW50KG1pbiwgKzEpKTtcbiAgICB9XG4gICAgdGhpcy5taW4gPSBtaW47XG4gICAgdGhpcy5tYXggPSBtYXg7XG4gIH1cbiAgYnVpbGRUaWNrcygpIHtcbiAgICBjb25zdCBvcHRzID0gdGhpcy5vcHRpb25zO1xuICAgIGNvbnN0IGdlbmVyYXRpb25PcHRpb25zID0ge1xuICAgICAgbWluOiB0aGlzLl91c2VyTWluLFxuICAgICAgbWF4OiB0aGlzLl91c2VyTWF4XG4gICAgfTtcbiAgICBjb25zdCB0aWNrcyA9IGdlbmVyYXRlVGlja3MoZ2VuZXJhdGlvbk9wdGlvbnMsIHRoaXMpO1xuICAgIGlmIChvcHRzLmJvdW5kcyA9PT0gJ3RpY2tzJykge1xuICAgICAgX3NldE1pbkFuZE1heEJ5S2V5KHRpY2tzLCB0aGlzLCAndmFsdWUnKTtcbiAgICB9XG4gICAgaWYgKG9wdHMucmV2ZXJzZSkge1xuICAgICAgdGlja3MucmV2ZXJzZSgpO1xuICAgICAgdGhpcy5zdGFydCA9IHRoaXMubWF4O1xuICAgICAgdGhpcy5lbmQgPSB0aGlzLm1pbjtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zdGFydCA9IHRoaXMubWluO1xuICAgICAgdGhpcy5lbmQgPSB0aGlzLm1heDtcbiAgICB9XG4gICAgcmV0dXJuIHRpY2tzO1xuICB9XG4gIGdldExhYmVsRm9yVmFsdWUodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCA/ICcwJyA6IGZvcm1hdE51bWJlcih2YWx1ZSwgdGhpcy5jaGFydC5vcHRpb25zLmxvY2FsZSwgdGhpcy5vcHRpb25zLnRpY2tzLmZvcm1hdCk7XG4gIH1cbiAgY29uZmlndXJlKCkge1xuICAgIGNvbnN0IHN0YXJ0ID0gdGhpcy5taW47XG4gICAgc3VwZXIuY29uZmlndXJlKCk7XG4gICAgdGhpcy5fc3RhcnRWYWx1ZSA9IGxvZzEwKHN0YXJ0KTtcbiAgICB0aGlzLl92YWx1ZVJhbmdlID0gbG9nMTAodGhpcy5tYXgpIC0gbG9nMTAoc3RhcnQpO1xuICB9XG4gIGdldFBpeGVsRm9yVmFsdWUodmFsdWUpIHtcbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gMCkge1xuICAgICAgdmFsdWUgPSB0aGlzLm1pbjtcbiAgICB9XG4gICAgaWYgKHZhbHVlID09PSBudWxsIHx8IGlzTmFOKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIE5hTjtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZ2V0UGl4ZWxGb3JEZWNpbWFsKHZhbHVlID09PSB0aGlzLm1pbiA/IDAgOiAobG9nMTAodmFsdWUpIC0gdGhpcy5fc3RhcnRWYWx1ZSkgLyB0aGlzLl92YWx1ZVJhbmdlKTtcbiAgfVxuICBnZXRWYWx1ZUZvclBpeGVsKHBpeGVsKSB7XG4gICAgY29uc3QgZGVjaW1hbCA9IHRoaXMuZ2V0RGVjaW1hbEZvclBpeGVsKHBpeGVsKTtcbiAgICByZXR1cm4gTWF0aC5wb3coMTAsIHRoaXMuX3N0YXJ0VmFsdWUgKyBkZWNpbWFsICogdGhpcy5fdmFsdWVSYW5nZSk7XG4gIH1cbn1cbmZ1bmN0aW9uIGdldFRpY2tCYWNrZHJvcEhlaWdodChvcHRzKSB7XG4gIGNvbnN0IHRpY2tPcHRzID0gb3B0cy50aWNrcztcbiAgaWYgKHRpY2tPcHRzLmRpc3BsYXkgJiYgb3B0cy5kaXNwbGF5KSB7XG4gICAgY29uc3QgcGFkZGluZyA9IHRvUGFkZGluZyh0aWNrT3B0cy5iYWNrZHJvcFBhZGRpbmcpO1xuICAgIHJldHVybiB2YWx1ZU9yRGVmYXVsdCh0aWNrT3B0cy5mb250ICYmIHRpY2tPcHRzLmZvbnQuc2l6ZSwgZGVmYXVsdHMuZm9udC5zaXplKSArIHBhZGRpbmcuaGVpZ2h0O1xuICB9XG4gIHJldHVybiAwO1xufVxuZnVuY3Rpb24gbWVhc3VyZUxhYmVsU2l6ZShjdHgsIGZvbnQsIGxhYmVsKSB7XG4gIGxhYmVsID0gaXNBcnJheShsYWJlbCkgPyBsYWJlbCA6IFtsYWJlbF07XG4gIHJldHVybiB7XG4gICAgdzogX2xvbmdlc3RUZXh0KGN0eCwgZm9udC5zdHJpbmcsIGxhYmVsKSxcbiAgICBoOiBsYWJlbC5sZW5ndGggKiBmb250LmxpbmVIZWlnaHRcbiAgfTtcbn1cbmZ1bmN0aW9uIGRldGVybWluZUxpbWl0cyhhbmdsZSwgcG9zLCBzaXplLCBtaW4sIG1heCkge1xuICBpZiAoYW5nbGUgPT09IG1pbiB8fCBhbmdsZSA9PT0gbWF4KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXJ0OiBwb3MgLSBzaXplIC8gMixcbiAgICAgIGVuZDogcG9zICsgc2l6ZSAvIDJcbiAgICB9O1xuICB9IGVsc2UgaWYgKGFuZ2xlIDwgbWluIHx8IGFuZ2xlID4gbWF4KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXJ0OiBwb3MgLSBzaXplLFxuICAgICAgZW5kOiBwb3NcbiAgICB9O1xuICB9XG4gIHJldHVybiB7XG4gICAgc3RhcnQ6IHBvcyxcbiAgICBlbmQ6IHBvcyArIHNpemVcbiAgfTtcbn1cbmZ1bmN0aW9uIGZpdFdpdGhQb2ludExhYmVscyhzY2FsZSkge1xuICBjb25zdCBvcmlnID0ge1xuICAgIGw6IHNjYWxlLmxlZnQgKyBzY2FsZS5fcGFkZGluZy5sZWZ0LFxuICAgIHI6IHNjYWxlLnJpZ2h0IC0gc2NhbGUuX3BhZGRpbmcucmlnaHQsXG4gICAgdDogc2NhbGUudG9wICsgc2NhbGUuX3BhZGRpbmcudG9wLFxuICAgIGI6IHNjYWxlLmJvdHRvbSAtIHNjYWxlLl9wYWRkaW5nLmJvdHRvbVxuICB9O1xuICBjb25zdCBsaW1pdHMgPSBPYmplY3QuYXNzaWduKHt9LCBvcmlnKTtcbiAgY29uc3QgbGFiZWxTaXplcyA9IFtdO1xuICBjb25zdCBwYWRkaW5nID0gW107XG4gIGNvbnN0IHZhbHVlQ291bnQgPSBzY2FsZS5fcG9pbnRMYWJlbHMubGVuZ3RoO1xuICBjb25zdCBwb2ludExhYmVsT3B0cyA9IHNjYWxlLm9wdGlvbnMucG9pbnRMYWJlbHM7XG4gIGNvbnN0IGFkZGl0aW9uYWxBbmdsZSA9IHBvaW50TGFiZWxPcHRzLmNlbnRlclBvaW50TGFiZWxzID8gUEkgLyB2YWx1ZUNvdW50IDogMDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZUNvdW50OyBpKyspIHtcbiAgICBjb25zdCBvcHRzID0gcG9pbnRMYWJlbE9wdHMuc2V0Q29udGV4dChzY2FsZS5nZXRQb2ludExhYmVsQ29udGV4dChpKSk7XG4gICAgcGFkZGluZ1tpXSA9IG9wdHMucGFkZGluZztcbiAgICBjb25zdCBwb2ludFBvc2l0aW9uID0gc2NhbGUuZ2V0UG9pbnRQb3NpdGlvbihpLCBzY2FsZS5kcmF3aW5nQXJlYSArIHBhZGRpbmdbaV0sIGFkZGl0aW9uYWxBbmdsZSk7XG4gICAgY29uc3QgcGxGb250ID0gdG9Gb250KG9wdHMuZm9udCk7XG4gICAgY29uc3QgdGV4dFNpemUgPSBtZWFzdXJlTGFiZWxTaXplKHNjYWxlLmN0eCwgcGxGb250LCBzY2FsZS5fcG9pbnRMYWJlbHNbaV0pO1xuICAgIGxhYmVsU2l6ZXNbaV0gPSB0ZXh0U2l6ZTtcbiAgICBjb25zdCBhbmdsZVJhZGlhbnMgPSBfbm9ybWFsaXplQW5nbGUoc2NhbGUuZ2V0SW5kZXhBbmdsZShpKSArIGFkZGl0aW9uYWxBbmdsZSk7XG4gICAgY29uc3QgYW5nbGUgPSBNYXRoLnJvdW5kKHRvRGVncmVlcyhhbmdsZVJhZGlhbnMpKTtcbiAgICBjb25zdCBoTGltaXRzID0gZGV0ZXJtaW5lTGltaXRzKGFuZ2xlLCBwb2ludFBvc2l0aW9uLngsIHRleHRTaXplLncsIDAsIDE4MCk7XG4gICAgY29uc3QgdkxpbWl0cyA9IGRldGVybWluZUxpbWl0cyhhbmdsZSwgcG9pbnRQb3NpdGlvbi55LCB0ZXh0U2l6ZS5oLCA5MCwgMjcwKTtcbiAgICB1cGRhdGVMaW1pdHMobGltaXRzLCBvcmlnLCBhbmdsZVJhZGlhbnMsIGhMaW1pdHMsIHZMaW1pdHMpO1xuICB9XG4gIHNjYWxlLnNldENlbnRlclBvaW50KG9yaWcubCAtIGxpbWl0cy5sLCBsaW1pdHMuciAtIG9yaWcuciwgb3JpZy50IC0gbGltaXRzLnQsIGxpbWl0cy5iIC0gb3JpZy5iKTtcbiAgc2NhbGUuX3BvaW50TGFiZWxJdGVtcyA9IGJ1aWxkUG9pbnRMYWJlbEl0ZW1zKHNjYWxlLCBsYWJlbFNpemVzLCBwYWRkaW5nKTtcbn1cbmZ1bmN0aW9uIHVwZGF0ZUxpbWl0cyhsaW1pdHMsIG9yaWcsIGFuZ2xlLCBoTGltaXRzLCB2TGltaXRzKSB7XG4gIGNvbnN0IHNpbiA9IE1hdGguYWJzKE1hdGguc2luKGFuZ2xlKSk7XG4gIGNvbnN0IGNvcyA9IE1hdGguYWJzKE1hdGguY29zKGFuZ2xlKSk7XG4gIGxldCB4ID0gMDtcbiAgbGV0IHkgPSAwO1xuICBpZiAoaExpbWl0cy5zdGFydCA8IG9yaWcubCkge1xuICAgIHggPSAob3JpZy5sIC0gaExpbWl0cy5zdGFydCkgLyBzaW47XG4gICAgbGltaXRzLmwgPSBNYXRoLm1pbihsaW1pdHMubCwgb3JpZy5sIC0geCk7XG4gIH0gZWxzZSBpZiAoaExpbWl0cy5lbmQgPiBvcmlnLnIpIHtcbiAgICB4ID0gKGhMaW1pdHMuZW5kIC0gb3JpZy5yKSAvIHNpbjtcbiAgICBsaW1pdHMuciA9IE1hdGgubWF4KGxpbWl0cy5yLCBvcmlnLnIgKyB4KTtcbiAgfVxuICBpZiAodkxpbWl0cy5zdGFydCA8IG9yaWcudCkge1xuICAgIHkgPSAob3JpZy50IC0gdkxpbWl0cy5zdGFydCkgLyBjb3M7XG4gICAgbGltaXRzLnQgPSBNYXRoLm1pbihsaW1pdHMudCwgb3JpZy50IC0geSk7XG4gIH0gZWxzZSBpZiAodkxpbWl0cy5lbmQgPiBvcmlnLmIpIHtcbiAgICB5ID0gKHZMaW1pdHMuZW5kIC0gb3JpZy5iKSAvIGNvcztcbiAgICBsaW1pdHMuYiA9IE1hdGgubWF4KGxpbWl0cy5iLCBvcmlnLmIgKyB5KTtcbiAgfVxufVxuZnVuY3Rpb24gY3JlYXRlUG9pbnRMYWJlbEl0ZW0oc2NhbGUsIGluZGV4LCBpdGVtT3B0cykge1xuICBjb25zdCBvdXRlckRpc3RhbmNlID0gc2NhbGUuZHJhd2luZ0FyZWE7XG4gIGNvbnN0IHtcbiAgICBleHRyYSxcbiAgICBhZGRpdGlvbmFsQW5nbGUsXG4gICAgcGFkZGluZyxcbiAgICBzaXplXG4gIH0gPSBpdGVtT3B0cztcbiAgY29uc3QgcG9pbnRMYWJlbFBvc2l0aW9uID0gc2NhbGUuZ2V0UG9pbnRQb3NpdGlvbihpbmRleCwgb3V0ZXJEaXN0YW5jZSArIGV4dHJhICsgcGFkZGluZywgYWRkaXRpb25hbEFuZ2xlKTtcbiAgY29uc3QgYW5nbGUgPSBNYXRoLnJvdW5kKHRvRGVncmVlcyhfbm9ybWFsaXplQW5nbGUocG9pbnRMYWJlbFBvc2l0aW9uLmFuZ2xlICsgSEFMRl9QSSkpKTtcbiAgY29uc3QgeSA9IHlGb3JBbmdsZShwb2ludExhYmVsUG9zaXRpb24ueSwgc2l6ZS5oLCBhbmdsZSk7XG4gIGNvbnN0IHRleHRBbGlnbiA9IGdldFRleHRBbGlnbkZvckFuZ2xlKGFuZ2xlKTtcbiAgY29uc3QgbGVmdCA9IGxlZnRGb3JUZXh0QWxpZ24ocG9pbnRMYWJlbFBvc2l0aW9uLngsIHNpemUudywgdGV4dEFsaWduKTtcbiAgcmV0dXJuIHtcbiAgICB2aXNpYmxlOiB0cnVlLFxuICAgIHg6IHBvaW50TGFiZWxQb3NpdGlvbi54LFxuICAgIHksXG4gICAgdGV4dEFsaWduLFxuICAgIGxlZnQsXG4gICAgdG9wOiB5LFxuICAgIHJpZ2h0OiBsZWZ0ICsgc2l6ZS53LFxuICAgIGJvdHRvbTogeSArIHNpemUuaFxuICB9O1xufVxuZnVuY3Rpb24gaXNOb3RPdmVybGFwcGVkKGl0ZW0sIGFyZWEpIHtcbiAgaWYgKCFhcmVhKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgY29uc3Qge1xuICAgIGxlZnQsXG4gICAgdG9wLFxuICAgIHJpZ2h0LFxuICAgIGJvdHRvbVxuICB9ID0gaXRlbTtcbiAgY29uc3QgYXBleGVzSW5BcmVhID0gX2lzUG9pbnRJbkFyZWEoe1xuICAgIHg6IGxlZnQsXG4gICAgeTogdG9wXG4gIH0sIGFyZWEpIHx8IF9pc1BvaW50SW5BcmVhKHtcbiAgICB4OiBsZWZ0LFxuICAgIHk6IGJvdHRvbVxuICB9LCBhcmVhKSB8fCBfaXNQb2ludEluQXJlYSh7XG4gICAgeDogcmlnaHQsXG4gICAgeTogdG9wXG4gIH0sIGFyZWEpIHx8IF9pc1BvaW50SW5BcmVhKHtcbiAgICB4OiByaWdodCxcbiAgICB5OiBib3R0b21cbiAgfSwgYXJlYSk7XG4gIHJldHVybiAhYXBleGVzSW5BcmVhO1xufVxuZnVuY3Rpb24gYnVpbGRQb2ludExhYmVsSXRlbXMoc2NhbGUsIGxhYmVsU2l6ZXMsIHBhZGRpbmcpIHtcbiAgY29uc3QgaXRlbXMgPSBbXTtcbiAgY29uc3QgdmFsdWVDb3VudCA9IHNjYWxlLl9wb2ludExhYmVscy5sZW5ndGg7XG4gIGNvbnN0IG9wdHMgPSBzY2FsZS5vcHRpb25zO1xuICBjb25zdCB7XG4gICAgY2VudGVyUG9pbnRMYWJlbHMsXG4gICAgZGlzcGxheVxuICB9ID0gb3B0cy5wb2ludExhYmVscztcbiAgY29uc3QgaXRlbU9wdHMgPSB7XG4gICAgZXh0cmE6IGdldFRpY2tCYWNrZHJvcEhlaWdodChvcHRzKSAvIDIsXG4gICAgYWRkaXRpb25hbEFuZ2xlOiBjZW50ZXJQb2ludExhYmVscyA/IFBJIC8gdmFsdWVDb3VudCA6IDBcbiAgfTtcbiAgbGV0IGFyZWE7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsdWVDb3VudDsgaSsrKSB7XG4gICAgaXRlbU9wdHMucGFkZGluZyA9IHBhZGRpbmdbaV07XG4gICAgaXRlbU9wdHMuc2l6ZSA9IGxhYmVsU2l6ZXNbaV07XG4gICAgY29uc3QgaXRlbSA9IGNyZWF0ZVBvaW50TGFiZWxJdGVtKHNjYWxlLCBpLCBpdGVtT3B0cyk7XG4gICAgaXRlbXMucHVzaChpdGVtKTtcbiAgICBpZiAoZGlzcGxheSA9PT0gJ2F1dG8nKSB7XG4gICAgICBpdGVtLnZpc2libGUgPSBpc05vdE92ZXJsYXBwZWQoaXRlbSwgYXJlYSk7XG4gICAgICBpZiAoaXRlbS52aXNpYmxlKSB7XG4gICAgICAgIGFyZWEgPSBpdGVtO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gaXRlbXM7XG59XG5mdW5jdGlvbiBnZXRUZXh0QWxpZ25Gb3JBbmdsZShhbmdsZSkge1xuICBpZiAoYW5nbGUgPT09IDAgfHwgYW5nbGUgPT09IDE4MCkge1xuICAgIHJldHVybiAnY2VudGVyJztcbiAgfSBlbHNlIGlmIChhbmdsZSA8IDE4MCkge1xuICAgIHJldHVybiAnbGVmdCc7XG4gIH1cbiAgcmV0dXJuICdyaWdodCc7XG59XG5mdW5jdGlvbiBsZWZ0Rm9yVGV4dEFsaWduKHgsIHcsIGFsaWduKSB7XG4gIGlmIChhbGlnbiA9PT0gJ3JpZ2h0Jykge1xuICAgIHggLT0gdztcbiAgfSBlbHNlIGlmIChhbGlnbiA9PT0gJ2NlbnRlcicpIHtcbiAgICB4IC09IHcgLyAyO1xuICB9XG4gIHJldHVybiB4O1xufVxuZnVuY3Rpb24geUZvckFuZ2xlKHksIGgsIGFuZ2xlKSB7XG4gIGlmIChhbmdsZSA9PT0gOTAgfHwgYW5nbGUgPT09IDI3MCkge1xuICAgIHkgLT0gaCAvIDI7XG4gIH0gZWxzZSBpZiAoYW5nbGUgPiAyNzAgfHwgYW5nbGUgPCA5MCkge1xuICAgIHkgLT0gaDtcbiAgfVxuICByZXR1cm4geTtcbn1cbmZ1bmN0aW9uIGRyYXdQb2ludExhYmVsQm94KGN0eCwgb3B0cywgaXRlbSkge1xuICBjb25zdCB7XG4gICAgbGVmdCxcbiAgICB0b3AsXG4gICAgcmlnaHQsXG4gICAgYm90dG9tXG4gIH0gPSBpdGVtO1xuICBjb25zdCB7XG4gICAgYmFja2Ryb3BDb2xvclxuICB9ID0gb3B0cztcbiAgaWYgKCFpc051bGxPclVuZGVmKGJhY2tkcm9wQ29sb3IpKSB7XG4gICAgY29uc3QgYm9yZGVyUmFkaXVzID0gdG9UUkJMQ29ybmVycyhvcHRzLmJvcmRlclJhZGl1cyk7XG4gICAgY29uc3QgcGFkZGluZyA9IHRvUGFkZGluZyhvcHRzLmJhY2tkcm9wUGFkZGluZyk7XG4gICAgY3R4LmZpbGxTdHlsZSA9IGJhY2tkcm9wQ29sb3I7XG4gICAgY29uc3QgYmFja2Ryb3BMZWZ0ID0gbGVmdCAtIHBhZGRpbmcubGVmdDtcbiAgICBjb25zdCBiYWNrZHJvcFRvcCA9IHRvcCAtIHBhZGRpbmcudG9wO1xuICAgIGNvbnN0IGJhY2tkcm9wV2lkdGggPSByaWdodCAtIGxlZnQgKyBwYWRkaW5nLndpZHRoO1xuICAgIGNvbnN0IGJhY2tkcm9wSGVpZ2h0ID0gYm90dG9tIC0gdG9wICsgcGFkZGluZy5oZWlnaHQ7XG4gICAgaWYgKE9iamVjdC52YWx1ZXMoYm9yZGVyUmFkaXVzKS5zb21lKHYgPT4gdiAhPT0gMCkpIHtcbiAgICAgIGN0eC5iZWdpblBhdGgoKTtcbiAgICAgIGFkZFJvdW5kZWRSZWN0UGF0aChjdHgsIHtcbiAgICAgICAgeDogYmFja2Ryb3BMZWZ0LFxuICAgICAgICB5OiBiYWNrZHJvcFRvcCxcbiAgICAgICAgdzogYmFja2Ryb3BXaWR0aCxcbiAgICAgICAgaDogYmFja2Ryb3BIZWlnaHQsXG4gICAgICAgIHJhZGl1czogYm9yZGVyUmFkaXVzXG4gICAgICB9KTtcbiAgICAgIGN0eC5maWxsKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGN0eC5maWxsUmVjdChiYWNrZHJvcExlZnQsIGJhY2tkcm9wVG9wLCBiYWNrZHJvcFdpZHRoLCBiYWNrZHJvcEhlaWdodCk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBkcmF3UG9pbnRMYWJlbHMoc2NhbGUsIGxhYmVsQ291bnQpIHtcbiAgY29uc3Qge1xuICAgIGN0eCxcbiAgICBvcHRpb25zOiB7XG4gICAgICBwb2ludExhYmVsc1xuICAgIH1cbiAgfSA9IHNjYWxlO1xuICBmb3IgKGxldCBpID0gbGFiZWxDb3VudCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgY29uc3QgaXRlbSA9IHNjYWxlLl9wb2ludExhYmVsSXRlbXNbaV07XG4gICAgaWYgKCFpdGVtLnZpc2libGUpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBvcHRzQXRJbmRleCA9IHBvaW50TGFiZWxzLnNldENvbnRleHQoc2NhbGUuZ2V0UG9pbnRMYWJlbENvbnRleHQoaSkpO1xuICAgIGRyYXdQb2ludExhYmVsQm94KGN0eCwgb3B0c0F0SW5kZXgsIGl0ZW0pO1xuICAgIGNvbnN0IHBsRm9udCA9IHRvRm9udChvcHRzQXRJbmRleC5mb250KTtcbiAgICBjb25zdCB7XG4gICAgICB4LFxuICAgICAgeSxcbiAgICAgIHRleHRBbGlnblxuICAgIH0gPSBpdGVtO1xuICAgIHJlbmRlclRleHQoY3R4LCBzY2FsZS5fcG9pbnRMYWJlbHNbaV0sIHgsIHkgKyBwbEZvbnQubGluZUhlaWdodCAvIDIsIHBsRm9udCwge1xuICAgICAgY29sb3I6IG9wdHNBdEluZGV4LmNvbG9yLFxuICAgICAgdGV4dEFsaWduOiB0ZXh0QWxpZ24sXG4gICAgICB0ZXh0QmFzZWxpbmU6ICdtaWRkbGUnXG4gICAgfSk7XG4gIH1cbn1cbmZ1bmN0aW9uIHBhdGhSYWRpdXNMaW5lKHNjYWxlLCByYWRpdXMsIGNpcmN1bGFyLCBsYWJlbENvdW50KSB7XG4gIGNvbnN0IHtcbiAgICBjdHhcbiAgfSA9IHNjYWxlO1xuICBpZiAoY2lyY3VsYXIpIHtcbiAgICBjdHguYXJjKHNjYWxlLnhDZW50ZXIsIHNjYWxlLnlDZW50ZXIsIHJhZGl1cywgMCwgVEFVKTtcbiAgfSBlbHNlIHtcbiAgICBsZXQgcG9pbnRQb3NpdGlvbiA9IHNjYWxlLmdldFBvaW50UG9zaXRpb24oMCwgcmFkaXVzKTtcbiAgICBjdHgubW92ZVRvKHBvaW50UG9zaXRpb24ueCwgcG9pbnRQb3NpdGlvbi55KTtcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8IGxhYmVsQ291bnQ7IGkrKykge1xuICAgICAgcG9pbnRQb3NpdGlvbiA9IHNjYWxlLmdldFBvaW50UG9zaXRpb24oaSwgcmFkaXVzKTtcbiAgICAgIGN0eC5saW5lVG8ocG9pbnRQb3NpdGlvbi54LCBwb2ludFBvc2l0aW9uLnkpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gZHJhd1JhZGl1c0xpbmUoc2NhbGUsIGdyaWRMaW5lT3B0cywgcmFkaXVzLCBsYWJlbENvdW50LCBib3JkZXJPcHRzKSB7XG4gIGNvbnN0IGN0eCA9IHNjYWxlLmN0eDtcbiAgY29uc3QgY2lyY3VsYXIgPSBncmlkTGluZU9wdHMuY2lyY3VsYXI7XG4gIGNvbnN0IHtcbiAgICBjb2xvcixcbiAgICBsaW5lV2lkdGhcbiAgfSA9IGdyaWRMaW5lT3B0cztcbiAgaWYgKCFjaXJjdWxhciAmJiAhbGFiZWxDb3VudCB8fCAhY29sb3IgfHwgIWxpbmVXaWR0aCB8fCByYWRpdXMgPCAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGN0eC5zYXZlKCk7XG4gIGN0eC5zdHJva2VTdHlsZSA9IGNvbG9yO1xuICBjdHgubGluZVdpZHRoID0gbGluZVdpZHRoO1xuICBjdHguc2V0TGluZURhc2goYm9yZGVyT3B0cy5kYXNoIHx8IFtdKTtcbiAgY3R4LmxpbmVEYXNoT2Zmc2V0ID0gYm9yZGVyT3B0cy5kYXNoT2Zmc2V0O1xuICBjdHguYmVnaW5QYXRoKCk7XG4gIHBhdGhSYWRpdXNMaW5lKHNjYWxlLCByYWRpdXMsIGNpcmN1bGFyLCBsYWJlbENvdW50KTtcbiAgY3R4LmNsb3NlUGF0aCgpO1xuICBjdHguc3Ryb2tlKCk7XG4gIGN0eC5yZXN0b3JlKCk7XG59XG5mdW5jdGlvbiBjcmVhdGVQb2ludExhYmVsQ29udGV4dChwYXJlbnQsIGluZGV4LCBsYWJlbCkge1xuICByZXR1cm4gY3JlYXRlQ29udGV4dChwYXJlbnQsIHtcbiAgICBsYWJlbCxcbiAgICBpbmRleCxcbiAgICB0eXBlOiAncG9pbnRMYWJlbCdcbiAgfSk7XG59XG5jbGFzcyBSYWRpYWxMaW5lYXJTY2FsZSBleHRlbmRzIExpbmVhclNjYWxlQmFzZSB7XG4gIHN0YXRpYyBpZCA9ICdyYWRpYWxMaW5lYXInO1xuICBzdGF0aWMgZGVmYXVsdHMgPSB7XG4gICAgZGlzcGxheTogdHJ1ZSxcbiAgICBhbmltYXRlOiB0cnVlLFxuICAgIHBvc2l0aW9uOiAnY2hhcnRBcmVhJyxcbiAgICBhbmdsZUxpbmVzOiB7XG4gICAgICBkaXNwbGF5OiB0cnVlLFxuICAgICAgbGluZVdpZHRoOiAxLFxuICAgICAgYm9yZGVyRGFzaDogW10sXG4gICAgICBib3JkZXJEYXNoT2Zmc2V0OiAwLjBcbiAgICB9LFxuICAgIGdyaWQ6IHtcbiAgICAgIGNpcmN1bGFyOiBmYWxzZVxuICAgIH0sXG4gICAgc3RhcnRBbmdsZTogMCxcbiAgICB0aWNrczoge1xuICAgICAgc2hvd0xhYmVsQmFja2Ryb3A6IHRydWUsXG4gICAgICBjYWxsYmFjazogVGlja3MuZm9ybWF0dGVycy5udW1lcmljXG4gICAgfSxcbiAgICBwb2ludExhYmVsczoge1xuICAgICAgYmFja2Ryb3BDb2xvcjogdW5kZWZpbmVkLFxuICAgICAgYmFja2Ryb3BQYWRkaW5nOiAyLFxuICAgICAgZGlzcGxheTogdHJ1ZSxcbiAgICAgIGZvbnQ6IHtcbiAgICAgICAgc2l6ZTogMTBcbiAgICAgIH0sXG4gICAgICBjYWxsYmFjayhsYWJlbCkge1xuICAgICAgICByZXR1cm4gbGFiZWw7XG4gICAgICB9LFxuICAgICAgcGFkZGluZzogNSxcbiAgICAgIGNlbnRlclBvaW50TGFiZWxzOiBmYWxzZVxuICAgIH1cbiAgfTtcbiAgc3RhdGljIGRlZmF1bHRSb3V0ZXMgPSB7XG4gICAgJ2FuZ2xlTGluZXMuY29sb3InOiAnYm9yZGVyQ29sb3InLFxuICAgICdwb2ludExhYmVscy5jb2xvcic6ICdjb2xvcicsXG4gICAgJ3RpY2tzLmNvbG9yJzogJ2NvbG9yJ1xuICB9O1xuICBzdGF0aWMgZGVzY3JpcHRvcnMgPSB7XG4gICAgYW5nbGVMaW5lczoge1xuICAgICAgX2ZhbGxiYWNrOiAnZ3JpZCdcbiAgICB9XG4gIH07XG4gIGNvbnN0cnVjdG9yKGNmZykge1xuICAgIHN1cGVyKGNmZyk7XG4gICAgdGhpcy54Q2VudGVyID0gdW5kZWZpbmVkO1xuICAgIHRoaXMueUNlbnRlciA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmRyYXdpbmdBcmVhID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuX3BvaW50TGFiZWxzID0gW107XG4gICAgdGhpcy5fcG9pbnRMYWJlbEl0ZW1zID0gW107XG4gIH1cbiAgc2V0RGltZW5zaW9ucygpIHtcbiAgICBjb25zdCBwYWRkaW5nID0gdGhpcy5fcGFkZGluZyA9IHRvUGFkZGluZyhnZXRUaWNrQmFja2Ryb3BIZWlnaHQodGhpcy5vcHRpb25zKSAvIDIpO1xuICAgIGNvbnN0IHcgPSB0aGlzLndpZHRoID0gdGhpcy5tYXhXaWR0aCAtIHBhZGRpbmcud2lkdGg7XG4gICAgY29uc3QgaCA9IHRoaXMuaGVpZ2h0ID0gdGhpcy5tYXhIZWlnaHQgLSBwYWRkaW5nLmhlaWdodDtcbiAgICB0aGlzLnhDZW50ZXIgPSBNYXRoLmZsb29yKHRoaXMubGVmdCArIHcgLyAyICsgcGFkZGluZy5sZWZ0KTtcbiAgICB0aGlzLnlDZW50ZXIgPSBNYXRoLmZsb29yKHRoaXMudG9wICsgaCAvIDIgKyBwYWRkaW5nLnRvcCk7XG4gICAgdGhpcy5kcmF3aW5nQXJlYSA9IE1hdGguZmxvb3IoTWF0aC5taW4odywgaCkgLyAyKTtcbiAgfVxuICBkZXRlcm1pbmVEYXRhTGltaXRzKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIG1pbixcbiAgICAgIG1heFxuICAgIH0gPSB0aGlzLmdldE1pbk1heChmYWxzZSk7XG4gICAgdGhpcy5taW4gPSBpc051bWJlckZpbml0ZShtaW4pICYmICFpc05hTihtaW4pID8gbWluIDogMDtcbiAgICB0aGlzLm1heCA9IGlzTnVtYmVyRmluaXRlKG1heCkgJiYgIWlzTmFOKG1heCkgPyBtYXggOiAwO1xuICAgIHRoaXMuaGFuZGxlVGlja1JhbmdlT3B0aW9ucygpO1xuICB9XG4gIGNvbXB1dGVUaWNrTGltaXQoKSB7XG4gICAgcmV0dXJuIE1hdGguY2VpbCh0aGlzLmRyYXdpbmdBcmVhIC8gZ2V0VGlja0JhY2tkcm9wSGVpZ2h0KHRoaXMub3B0aW9ucykpO1xuICB9XG4gIGdlbmVyYXRlVGlja0xhYmVscyh0aWNrcykge1xuICAgIExpbmVhclNjYWxlQmFzZS5wcm90b3R5cGUuZ2VuZXJhdGVUaWNrTGFiZWxzLmNhbGwodGhpcywgdGlja3MpO1xuICAgIHRoaXMuX3BvaW50TGFiZWxzID0gdGhpcy5nZXRMYWJlbHMoKS5tYXAoKHZhbHVlLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgbGFiZWwgPSBjYWxsYmFjayh0aGlzLm9wdGlvbnMucG9pbnRMYWJlbHMuY2FsbGJhY2ssIFt2YWx1ZSwgaW5kZXhdLCB0aGlzKTtcbiAgICAgIHJldHVybiBsYWJlbCB8fCBsYWJlbCA9PT0gMCA/IGxhYmVsIDogJyc7XG4gICAgfSkuZmlsdGVyKCh2LCBpKSA9PiB0aGlzLmNoYXJ0LmdldERhdGFWaXNpYmlsaXR5KGkpKTtcbiAgfVxuICBmaXQoKSB7XG4gICAgY29uc3Qgb3B0cyA9IHRoaXMub3B0aW9ucztcbiAgICBpZiAob3B0cy5kaXNwbGF5ICYmIG9wdHMucG9pbnRMYWJlbHMuZGlzcGxheSkge1xuICAgICAgZml0V2l0aFBvaW50TGFiZWxzKHRoaXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNldENlbnRlclBvaW50KDAsIDAsIDAsIDApO1xuICAgIH1cbiAgfVxuICBzZXRDZW50ZXJQb2ludChsZWZ0TW92ZW1lbnQsIHJpZ2h0TW92ZW1lbnQsIHRvcE1vdmVtZW50LCBib3R0b21Nb3ZlbWVudCkge1xuICAgIHRoaXMueENlbnRlciArPSBNYXRoLmZsb29yKChsZWZ0TW92ZW1lbnQgLSByaWdodE1vdmVtZW50KSAvIDIpO1xuICAgIHRoaXMueUNlbnRlciArPSBNYXRoLmZsb29yKCh0b3BNb3ZlbWVudCAtIGJvdHRvbU1vdmVtZW50KSAvIDIpO1xuICAgIHRoaXMuZHJhd2luZ0FyZWEgLT0gTWF0aC5taW4odGhpcy5kcmF3aW5nQXJlYSAvIDIsIE1hdGgubWF4KGxlZnRNb3ZlbWVudCwgcmlnaHRNb3ZlbWVudCwgdG9wTW92ZW1lbnQsIGJvdHRvbU1vdmVtZW50KSk7XG4gIH1cbiAgZ2V0SW5kZXhBbmdsZShpbmRleCkge1xuICAgIGNvbnN0IGFuZ2xlTXVsdGlwbGllciA9IFRBVSAvICh0aGlzLl9wb2ludExhYmVscy5sZW5ndGggfHwgMSk7XG4gICAgY29uc3Qgc3RhcnRBbmdsZSA9IHRoaXMub3B0aW9ucy5zdGFydEFuZ2xlIHx8IDA7XG4gICAgcmV0dXJuIF9ub3JtYWxpemVBbmdsZShpbmRleCAqIGFuZ2xlTXVsdGlwbGllciArIHRvUmFkaWFucyhzdGFydEFuZ2xlKSk7XG4gIH1cbiAgZ2V0RGlzdGFuY2VGcm9tQ2VudGVyRm9yVmFsdWUodmFsdWUpIHtcbiAgICBpZiAoaXNOdWxsT3JVbmRlZih2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBOYU47XG4gICAgfVxuICAgIGNvbnN0IHNjYWxpbmdGYWN0b3IgPSB0aGlzLmRyYXdpbmdBcmVhIC8gKHRoaXMubWF4IC0gdGhpcy5taW4pO1xuICAgIGlmICh0aGlzLm9wdGlvbnMucmV2ZXJzZSkge1xuICAgICAgcmV0dXJuICh0aGlzLm1heCAtIHZhbHVlKSAqIHNjYWxpbmdGYWN0b3I7XG4gICAgfVxuICAgIHJldHVybiAodmFsdWUgLSB0aGlzLm1pbikgKiBzY2FsaW5nRmFjdG9yO1xuICB9XG4gIGdldFZhbHVlRm9yRGlzdGFuY2VGcm9tQ2VudGVyKGRpc3RhbmNlKSB7XG4gICAgaWYgKGlzTnVsbE9yVW5kZWYoZGlzdGFuY2UpKSB7XG4gICAgICByZXR1cm4gTmFOO1xuICAgIH1cbiAgICBjb25zdCBzY2FsZWREaXN0YW5jZSA9IGRpc3RhbmNlIC8gKHRoaXMuZHJhd2luZ0FyZWEgLyAodGhpcy5tYXggLSB0aGlzLm1pbikpO1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnMucmV2ZXJzZSA/IHRoaXMubWF4IC0gc2NhbGVkRGlzdGFuY2UgOiB0aGlzLm1pbiArIHNjYWxlZERpc3RhbmNlO1xuICB9XG4gIGdldFBvaW50TGFiZWxDb250ZXh0KGluZGV4KSB7XG4gICAgY29uc3QgcG9pbnRMYWJlbHMgPSB0aGlzLl9wb2ludExhYmVscyB8fCBbXTtcbiAgICBpZiAoaW5kZXggPj0gMCAmJiBpbmRleCA8IHBvaW50TGFiZWxzLmxlbmd0aCkge1xuICAgICAgY29uc3QgcG9pbnRMYWJlbCA9IHBvaW50TGFiZWxzW2luZGV4XTtcbiAgICAgIHJldHVybiBjcmVhdGVQb2ludExhYmVsQ29udGV4dCh0aGlzLmdldENvbnRleHQoKSwgaW5kZXgsIHBvaW50TGFiZWwpO1xuICAgIH1cbiAgfVxuICBnZXRQb2ludFBvc2l0aW9uKGluZGV4LCBkaXN0YW5jZUZyb21DZW50ZXIsIGFkZGl0aW9uYWxBbmdsZSA9IDApIHtcbiAgICBjb25zdCBhbmdsZSA9IHRoaXMuZ2V0SW5kZXhBbmdsZShpbmRleCkgLSBIQUxGX1BJICsgYWRkaXRpb25hbEFuZ2xlO1xuICAgIHJldHVybiB7XG4gICAgICB4OiBNYXRoLmNvcyhhbmdsZSkgKiBkaXN0YW5jZUZyb21DZW50ZXIgKyB0aGlzLnhDZW50ZXIsXG4gICAgICB5OiBNYXRoLnNpbihhbmdsZSkgKiBkaXN0YW5jZUZyb21DZW50ZXIgKyB0aGlzLnlDZW50ZXIsXG4gICAgICBhbmdsZVxuICAgIH07XG4gIH1cbiAgZ2V0UG9pbnRQb3NpdGlvbkZvclZhbHVlKGluZGV4LCB2YWx1ZSkge1xuICAgIHJldHVybiB0aGlzLmdldFBvaW50UG9zaXRpb24oaW5kZXgsIHRoaXMuZ2V0RGlzdGFuY2VGcm9tQ2VudGVyRm9yVmFsdWUodmFsdWUpKTtcbiAgfVxuICBnZXRCYXNlUG9zaXRpb24oaW5kZXgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQb2ludFBvc2l0aW9uRm9yVmFsdWUoaW5kZXggfHwgMCwgdGhpcy5nZXRCYXNlVmFsdWUoKSk7XG4gIH1cbiAgZ2V0UG9pbnRMYWJlbFBvc2l0aW9uKGluZGV4KSB7XG4gICAgY29uc3Qge1xuICAgICAgbGVmdCxcbiAgICAgIHRvcCxcbiAgICAgIHJpZ2h0LFxuICAgICAgYm90dG9tXG4gICAgfSA9IHRoaXMuX3BvaW50TGFiZWxJdGVtc1tpbmRleF07XG4gICAgcmV0dXJuIHtcbiAgICAgIGxlZnQsXG4gICAgICB0b3AsXG4gICAgICByaWdodCxcbiAgICAgIGJvdHRvbVxuICAgIH07XG4gIH1cbiAgZHJhd0JhY2tncm91bmQoKSB7XG4gICAgY29uc3Qge1xuICAgICAgYmFja2dyb3VuZENvbG9yLFxuICAgICAgZ3JpZDoge1xuICAgICAgICBjaXJjdWxhclxuICAgICAgfVxuICAgIH0gPSB0aGlzLm9wdGlvbnM7XG4gICAgaWYgKGJhY2tncm91bmRDb2xvcikge1xuICAgICAgY29uc3QgY3R4ID0gdGhpcy5jdHg7XG4gICAgICBjdHguc2F2ZSgpO1xuICAgICAgY3R4LmJlZ2luUGF0aCgpO1xuICAgICAgcGF0aFJhZGl1c0xpbmUodGhpcywgdGhpcy5nZXREaXN0YW5jZUZyb21DZW50ZXJGb3JWYWx1ZSh0aGlzLl9lbmRWYWx1ZSksIGNpcmN1bGFyLCB0aGlzLl9wb2ludExhYmVscy5sZW5ndGgpO1xuICAgICAgY3R4LmNsb3NlUGF0aCgpO1xuICAgICAgY3R4LmZpbGxTdHlsZSA9IGJhY2tncm91bmRDb2xvcjtcbiAgICAgIGN0eC5maWxsKCk7XG4gICAgICBjdHgucmVzdG9yZSgpO1xuICAgIH1cbiAgfVxuICBkcmF3R3JpZCgpIHtcbiAgICBjb25zdCBjdHggPSB0aGlzLmN0eDtcbiAgICBjb25zdCBvcHRzID0gdGhpcy5vcHRpb25zO1xuICAgIGNvbnN0IHtcbiAgICAgIGFuZ2xlTGluZXMsXG4gICAgICBncmlkLFxuICAgICAgYm9yZGVyXG4gICAgfSA9IG9wdHM7XG4gICAgY29uc3QgbGFiZWxDb3VudCA9IHRoaXMuX3BvaW50TGFiZWxzLmxlbmd0aDtcbiAgICBsZXQgaSwgb2Zmc2V0LCBwb3NpdGlvbjtcbiAgICBpZiAob3B0cy5wb2ludExhYmVscy5kaXNwbGF5KSB7XG4gICAgICBkcmF3UG9pbnRMYWJlbHModGhpcywgbGFiZWxDb3VudCk7XG4gICAgfVxuICAgIGlmIChncmlkLmRpc3BsYXkpIHtcbiAgICAgIHRoaXMudGlja3MuZm9yRWFjaCgodGljaywgaW5kZXgpID0+IHtcbiAgICAgICAgaWYgKGluZGV4ICE9PSAwIHx8IGluZGV4ID09PSAwICYmIHRoaXMubWluIDwgMCkge1xuICAgICAgICAgIG9mZnNldCA9IHRoaXMuZ2V0RGlzdGFuY2VGcm9tQ2VudGVyRm9yVmFsdWUodGljay52YWx1ZSk7XG4gICAgICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dChpbmRleCk7XG4gICAgICAgICAgY29uc3Qgb3B0c0F0SW5kZXggPSBncmlkLnNldENvbnRleHQoY29udGV4dCk7XG4gICAgICAgICAgY29uc3Qgb3B0c0F0SW5kZXhCb3JkZXIgPSBib3JkZXIuc2V0Q29udGV4dChjb250ZXh0KTtcbiAgICAgICAgICBkcmF3UmFkaXVzTGluZSh0aGlzLCBvcHRzQXRJbmRleCwgb2Zmc2V0LCBsYWJlbENvdW50LCBvcHRzQXRJbmRleEJvcmRlcik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoYW5nbGVMaW5lcy5kaXNwbGF5KSB7XG4gICAgICBjdHguc2F2ZSgpO1xuICAgICAgZm9yIChpID0gbGFiZWxDb3VudCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgIGNvbnN0IG9wdHNBdEluZGV4ID0gYW5nbGVMaW5lcy5zZXRDb250ZXh0KHRoaXMuZ2V0UG9pbnRMYWJlbENvbnRleHQoaSkpO1xuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgY29sb3IsXG4gICAgICAgICAgbGluZVdpZHRoXG4gICAgICAgIH0gPSBvcHRzQXRJbmRleDtcbiAgICAgICAgaWYgKCFsaW5lV2lkdGggfHwgIWNvbG9yKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgY3R4LmxpbmVXaWR0aCA9IGxpbmVXaWR0aDtcbiAgICAgICAgY3R4LnN0cm9rZVN0eWxlID0gY29sb3I7XG4gICAgICAgIGN0eC5zZXRMaW5lRGFzaChvcHRzQXRJbmRleC5ib3JkZXJEYXNoKTtcbiAgICAgICAgY3R4LmxpbmVEYXNoT2Zmc2V0ID0gb3B0c0F0SW5kZXguYm9yZGVyRGFzaE9mZnNldDtcbiAgICAgICAgb2Zmc2V0ID0gdGhpcy5nZXREaXN0YW5jZUZyb21DZW50ZXJGb3JWYWx1ZShvcHRzLnJldmVyc2UgPyB0aGlzLm1pbiA6IHRoaXMubWF4KTtcbiAgICAgICAgcG9zaXRpb24gPSB0aGlzLmdldFBvaW50UG9zaXRpb24oaSwgb2Zmc2V0KTtcbiAgICAgICAgY3R4LmJlZ2luUGF0aCgpO1xuICAgICAgICBjdHgubW92ZVRvKHRoaXMueENlbnRlciwgdGhpcy55Q2VudGVyKTtcbiAgICAgICAgY3R4LmxpbmVUbyhwb3NpdGlvbi54LCBwb3NpdGlvbi55KTtcbiAgICAgICAgY3R4LnN0cm9rZSgpO1xuICAgICAgfVxuICAgICAgY3R4LnJlc3RvcmUoKTtcbiAgICB9XG4gIH1cbiAgZHJhd0JvcmRlcigpIHt9XG4gIGRyYXdMYWJlbHMoKSB7XG4gICAgY29uc3QgY3R4ID0gdGhpcy5jdHg7XG4gICAgY29uc3Qgb3B0cyA9IHRoaXMub3B0aW9ucztcbiAgICBjb25zdCB0aWNrT3B0cyA9IG9wdHMudGlja3M7XG4gICAgaWYgKCF0aWNrT3B0cy5kaXNwbGF5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHN0YXJ0QW5nbGUgPSB0aGlzLmdldEluZGV4QW5nbGUoMCk7XG4gICAgbGV0IG9mZnNldCwgd2lkdGg7XG4gICAgY3R4LnNhdmUoKTtcbiAgICBjdHgudHJhbnNsYXRlKHRoaXMueENlbnRlciwgdGhpcy55Q2VudGVyKTtcbiAgICBjdHgucm90YXRlKHN0YXJ0QW5nbGUpO1xuICAgIGN0eC50ZXh0QWxpZ24gPSAnY2VudGVyJztcbiAgICBjdHgudGV4dEJhc2VsaW5lID0gJ21pZGRsZSc7XG4gICAgdGhpcy50aWNrcy5mb3JFYWNoKCh0aWNrLCBpbmRleCkgPT4ge1xuICAgICAgaWYgKGluZGV4ID09PSAwICYmIHRoaXMubWluID49IDAgJiYgIW9wdHMucmV2ZXJzZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBvcHRzQXRJbmRleCA9IHRpY2tPcHRzLnNldENvbnRleHQodGhpcy5nZXRDb250ZXh0KGluZGV4KSk7XG4gICAgICBjb25zdCB0aWNrRm9udCA9IHRvRm9udChvcHRzQXRJbmRleC5mb250KTtcbiAgICAgIG9mZnNldCA9IHRoaXMuZ2V0RGlzdGFuY2VGcm9tQ2VudGVyRm9yVmFsdWUodGhpcy50aWNrc1tpbmRleF0udmFsdWUpO1xuICAgICAgaWYgKG9wdHNBdEluZGV4LnNob3dMYWJlbEJhY2tkcm9wKSB7XG4gICAgICAgIGN0eC5mb250ID0gdGlja0ZvbnQuc3RyaW5nO1xuICAgICAgICB3aWR0aCA9IGN0eC5tZWFzdXJlVGV4dCh0aWNrLmxhYmVsKS53aWR0aDtcbiAgICAgICAgY3R4LmZpbGxTdHlsZSA9IG9wdHNBdEluZGV4LmJhY2tkcm9wQ29sb3I7XG4gICAgICAgIGNvbnN0IHBhZGRpbmcgPSB0b1BhZGRpbmcob3B0c0F0SW5kZXguYmFja2Ryb3BQYWRkaW5nKTtcbiAgICAgICAgY3R4LmZpbGxSZWN0KC13aWR0aCAvIDIgLSBwYWRkaW5nLmxlZnQsIC1vZmZzZXQgLSB0aWNrRm9udC5zaXplIC8gMiAtIHBhZGRpbmcudG9wLCB3aWR0aCArIHBhZGRpbmcud2lkdGgsIHRpY2tGb250LnNpemUgKyBwYWRkaW5nLmhlaWdodCk7XG4gICAgICB9XG4gICAgICByZW5kZXJUZXh0KGN0eCwgdGljay5sYWJlbCwgMCwgLW9mZnNldCwgdGlja0ZvbnQsIHtcbiAgICAgICAgY29sb3I6IG9wdHNBdEluZGV4LmNvbG9yLFxuICAgICAgICBzdHJva2VDb2xvcjogb3B0c0F0SW5kZXgudGV4dFN0cm9rZUNvbG9yLFxuICAgICAgICBzdHJva2VXaWR0aDogb3B0c0F0SW5kZXgudGV4dFN0cm9rZVdpZHRoXG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBjdHgucmVzdG9yZSgpO1xuICB9XG4gIGRyYXdUaXRsZSgpIHt9XG59XG5jb25zdCBJTlRFUlZBTFMgPSB7XG4gIG1pbGxpc2Vjb25kOiB7XG4gICAgY29tbW9uOiB0cnVlLFxuICAgIHNpemU6IDEsXG4gICAgc3RlcHM6IDEwMDBcbiAgfSxcbiAgc2Vjb25kOiB7XG4gICAgY29tbW9uOiB0cnVlLFxuICAgIHNpemU6IDEwMDAsXG4gICAgc3RlcHM6IDYwXG4gIH0sXG4gIG1pbnV0ZToge1xuICAgIGNvbW1vbjogdHJ1ZSxcbiAgICBzaXplOiA2MDAwMCxcbiAgICBzdGVwczogNjBcbiAgfSxcbiAgaG91cjoge1xuICAgIGNvbW1vbjogdHJ1ZSxcbiAgICBzaXplOiAzNjAwMDAwLFxuICAgIHN0ZXBzOiAyNFxuICB9LFxuICBkYXk6IHtcbiAgICBjb21tb246IHRydWUsXG4gICAgc2l6ZTogODY0MDAwMDAsXG4gICAgc3RlcHM6IDMwXG4gIH0sXG4gIHdlZWs6IHtcbiAgICBjb21tb246IGZhbHNlLFxuICAgIHNpemU6IDYwNDgwMDAwMCxcbiAgICBzdGVwczogNFxuICB9LFxuICBtb250aDoge1xuICAgIGNvbW1vbjogdHJ1ZSxcbiAgICBzaXplOiAyLjYyOGU5LFxuICAgIHN0ZXBzOiAxMlxuICB9LFxuICBxdWFydGVyOiB7XG4gICAgY29tbW9uOiBmYWxzZSxcbiAgICBzaXplOiA3Ljg4NGU5LFxuICAgIHN0ZXBzOiA0XG4gIH0sXG4gIHllYXI6IHtcbiAgICBjb21tb246IHRydWUsXG4gICAgc2l6ZTogMy4xNTRlMTBcbiAgfVxufTtcbmNvbnN0IFVOSVRTID0gLyogI19fUFVSRV9fICovT2JqZWN0LmtleXMoSU5URVJWQUxTKTtcbmZ1bmN0aW9uIHNvcnRlcihhLCBiKSB7XG4gIHJldHVybiBhIC0gYjtcbn1cbmZ1bmN0aW9uIHBhcnNlKHNjYWxlLCBpbnB1dCkge1xuICBpZiAoaXNOdWxsT3JVbmRlZihpbnB1dCkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCBhZGFwdGVyID0gc2NhbGUuX2FkYXB0ZXI7XG4gIGNvbnN0IHtcbiAgICBwYXJzZXIsXG4gICAgcm91bmQsXG4gICAgaXNvV2Vla2RheVxuICB9ID0gc2NhbGUuX3BhcnNlT3B0cztcbiAgbGV0IHZhbHVlID0gaW5wdXQ7XG4gIGlmICh0eXBlb2YgcGFyc2VyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdmFsdWUgPSBwYXJzZXIodmFsdWUpO1xuICB9XG4gIGlmICghaXNOdW1iZXJGaW5pdGUodmFsdWUpKSB7XG4gICAgdmFsdWUgPSB0eXBlb2YgcGFyc2VyID09PSAnc3RyaW5nJyA/IGFkYXB0ZXIucGFyc2UodmFsdWUsIHBhcnNlcikgOiBhZGFwdGVyLnBhcnNlKHZhbHVlKTtcbiAgfVxuICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBpZiAocm91bmQpIHtcbiAgICB2YWx1ZSA9IHJvdW5kID09PSAnd2VlaycgJiYgKGlzTnVtYmVyKGlzb1dlZWtkYXkpIHx8IGlzb1dlZWtkYXkgPT09IHRydWUpID8gYWRhcHRlci5zdGFydE9mKHZhbHVlLCAnaXNvV2VlaycsIGlzb1dlZWtkYXkpIDogYWRhcHRlci5zdGFydE9mKHZhbHVlLCByb3VuZCk7XG4gIH1cbiAgcmV0dXJuICt2YWx1ZTtcbn1cbmZ1bmN0aW9uIGRldGVybWluZVVuaXRGb3JBdXRvVGlja3MobWluVW5pdCwgbWluLCBtYXgsIGNhcGFjaXR5KSB7XG4gIGNvbnN0IGlsZW4gPSBVTklUUy5sZW5ndGg7XG4gIGZvciAobGV0IGkgPSBVTklUUy5pbmRleE9mKG1pblVuaXQpOyBpIDwgaWxlbiAtIDE7ICsraSkge1xuICAgIGNvbnN0IGludGVydmFsID0gSU5URVJWQUxTW1VOSVRTW2ldXTtcbiAgICBjb25zdCBmYWN0b3IgPSBpbnRlcnZhbC5zdGVwcyA/IGludGVydmFsLnN0ZXBzIDogTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVI7XG4gICAgaWYgKGludGVydmFsLmNvbW1vbiAmJiBNYXRoLmNlaWwoKG1heCAtIG1pbikgLyAoZmFjdG9yICogaW50ZXJ2YWwuc2l6ZSkpIDw9IGNhcGFjaXR5KSB7XG4gICAgICByZXR1cm4gVU5JVFNbaV07XG4gICAgfVxuICB9XG4gIHJldHVybiBVTklUU1tpbGVuIC0gMV07XG59XG5mdW5jdGlvbiBkZXRlcm1pbmVVbml0Rm9yRm9ybWF0dGluZyhzY2FsZSwgbnVtVGlja3MsIG1pblVuaXQsIG1pbiwgbWF4KSB7XG4gIGZvciAobGV0IGkgPSBVTklUUy5sZW5ndGggLSAxOyBpID49IFVOSVRTLmluZGV4T2YobWluVW5pdCk7IGktLSkge1xuICAgIGNvbnN0IHVuaXQgPSBVTklUU1tpXTtcbiAgICBpZiAoSU5URVJWQUxTW3VuaXRdLmNvbW1vbiAmJiBzY2FsZS5fYWRhcHRlci5kaWZmKG1heCwgbWluLCB1bml0KSA+PSBudW1UaWNrcyAtIDEpIHtcbiAgICAgIHJldHVybiB1bml0O1xuICAgIH1cbiAgfVxuICByZXR1cm4gVU5JVFNbbWluVW5pdCA/IFVOSVRTLmluZGV4T2YobWluVW5pdCkgOiAwXTtcbn1cbmZ1bmN0aW9uIGRldGVybWluZU1ham9yVW5pdCh1bml0KSB7XG4gIGZvciAobGV0IGkgPSBVTklUUy5pbmRleE9mKHVuaXQpICsgMSwgaWxlbiA9IFVOSVRTLmxlbmd0aDsgaSA8IGlsZW47ICsraSkge1xuICAgIGlmIChJTlRFUlZBTFNbVU5JVFNbaV1dLmNvbW1vbikge1xuICAgICAgcmV0dXJuIFVOSVRTW2ldO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gYWRkVGljayh0aWNrcywgdGltZSwgdGltZXN0YW1wcykge1xuICBpZiAoIXRpbWVzdGFtcHMpIHtcbiAgICB0aWNrc1t0aW1lXSA9IHRydWU7XG4gIH0gZWxzZSBpZiAodGltZXN0YW1wcy5sZW5ndGgpIHtcbiAgICBjb25zdCB7XG4gICAgICBsbyxcbiAgICAgIGhpXG4gICAgfSA9IF9sb29rdXAodGltZXN0YW1wcywgdGltZSk7XG4gICAgY29uc3QgdGltZXN0YW1wID0gdGltZXN0YW1wc1tsb10gPj0gdGltZSA/IHRpbWVzdGFtcHNbbG9dIDogdGltZXN0YW1wc1toaV07XG4gICAgdGlja3NbdGltZXN0YW1wXSA9IHRydWU7XG4gIH1cbn1cbmZ1bmN0aW9uIHNldE1ham9yVGlja3Moc2NhbGUsIHRpY2tzLCBtYXAsIG1ham9yVW5pdCkge1xuICBjb25zdCBhZGFwdGVyID0gc2NhbGUuX2FkYXB0ZXI7XG4gIGNvbnN0IGZpcnN0ID0gK2FkYXB0ZXIuc3RhcnRPZih0aWNrc1swXS52YWx1ZSwgbWFqb3JVbml0KTtcbiAgY29uc3QgbGFzdCA9IHRpY2tzW3RpY2tzLmxlbmd0aCAtIDFdLnZhbHVlO1xuICBsZXQgbWFqb3IsIGluZGV4O1xuICBmb3IgKG1ham9yID0gZmlyc3Q7IG1ham9yIDw9IGxhc3Q7IG1ham9yID0gK2FkYXB0ZXIuYWRkKG1ham9yLCAxLCBtYWpvclVuaXQpKSB7XG4gICAgaW5kZXggPSBtYXBbbWFqb3JdO1xuICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICB0aWNrc1tpbmRleF0ubWFqb3IgPSB0cnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdGlja3M7XG59XG5mdW5jdGlvbiB0aWNrc0Zyb21UaW1lc3RhbXBzKHNjYWxlLCB2YWx1ZXMsIG1ham9yVW5pdCkge1xuICBjb25zdCB0aWNrcyA9IFtdO1xuICBjb25zdCBtYXAgPSB7fTtcbiAgY29uc3QgaWxlbiA9IHZhbHVlcy5sZW5ndGg7XG4gIGxldCBpLCB2YWx1ZTtcbiAgZm9yIChpID0gMDsgaSA8IGlsZW47ICsraSkge1xuICAgIHZhbHVlID0gdmFsdWVzW2ldO1xuICAgIG1hcFt2YWx1ZV0gPSBpO1xuICAgIHRpY2tzLnB1c2goe1xuICAgICAgdmFsdWUsXG4gICAgICBtYWpvcjogZmFsc2VcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gaWxlbiA9PT0gMCB8fCAhbWFqb3JVbml0ID8gdGlja3MgOiBzZXRNYWpvclRpY2tzKHNjYWxlLCB0aWNrcywgbWFwLCBtYWpvclVuaXQpO1xufVxubGV0IFRpbWVTY2FsZSA9IC8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICBjbGFzcyBUaW1lU2NhbGUgZXh0ZW5kcyBTY2FsZSB7XG4gICAgc3RhdGljIGlkID0gJ3RpbWUnO1xuICAgIHN0YXRpYyBkZWZhdWx0cyA9IHtcbiAgICAgIGJvdW5kczogJ2RhdGEnLFxuICAgICAgYWRhcHRlcnM6IHt9LFxuICAgICAgdGltZToge1xuICAgICAgICBwYXJzZXI6IGZhbHNlLFxuICAgICAgICB1bml0OiBmYWxzZSxcbiAgICAgICAgcm91bmQ6IGZhbHNlLFxuICAgICAgICBpc29XZWVrZGF5OiBmYWxzZSxcbiAgICAgICAgbWluVW5pdDogJ21pbGxpc2Vjb25kJyxcbiAgICAgICAgZGlzcGxheUZvcm1hdHM6IHt9XG4gICAgICB9LFxuICAgICAgdGlja3M6IHtcbiAgICAgICAgc291cmNlOiAnYXV0bycsXG4gICAgICAgIGNhbGxiYWNrOiBmYWxzZSxcbiAgICAgICAgbWFqb3I6IHtcbiAgICAgICAgICBlbmFibGVkOiBmYWxzZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgc3VwZXIocHJvcHMpO1xuICAgICAgdGhpcy5fY2FjaGUgPSB7XG4gICAgICAgIGRhdGE6IFtdLFxuICAgICAgICBsYWJlbHM6IFtdLFxuICAgICAgICBhbGw6IFtdXG4gICAgICB9O1xuICAgICAgdGhpcy5fdW5pdCA9ICdkYXknO1xuICAgICAgdGhpcy5fbWFqb3JVbml0ID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fb2Zmc2V0cyA9IHt9O1xuICAgICAgdGhpcy5fbm9ybWFsaXplZCA9IGZhbHNlO1xuICAgICAgdGhpcy5fcGFyc2VPcHRzID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBpbml0KHNjYWxlT3B0cywgb3B0cyA9IHt9KSB7XG4gICAgICBjb25zdCB0aW1lID0gc2NhbGVPcHRzLnRpbWUgfHwgKHNjYWxlT3B0cy50aW1lID0ge30pO1xuICAgICAgY29uc3QgYWRhcHRlciA9IHRoaXMuX2FkYXB0ZXIgPSBuZXcgYWRhcHRlcnMuX2RhdGUoc2NhbGVPcHRzLmFkYXB0ZXJzLmRhdGUpO1xuICAgICAgYWRhcHRlci5pbml0KG9wdHMpO1xuICAgICAgbWVyZ2VJZih0aW1lLmRpc3BsYXlGb3JtYXRzLCBhZGFwdGVyLmZvcm1hdHMoKSk7XG4gICAgICB0aGlzLl9wYXJzZU9wdHMgPSB7XG4gICAgICAgIHBhcnNlcjogdGltZS5wYXJzZXIsXG4gICAgICAgIHJvdW5kOiB0aW1lLnJvdW5kLFxuICAgICAgICBpc29XZWVrZGF5OiB0aW1lLmlzb1dlZWtkYXlcbiAgICAgIH07XG4gICAgICBzdXBlci5pbml0KHNjYWxlT3B0cyk7XG4gICAgICB0aGlzLl9ub3JtYWxpemVkID0gb3B0cy5ub3JtYWxpemVkO1xuICAgIH1cbiAgICBwYXJzZShyYXcsIGluZGV4KSB7XG4gICAgICBpZiAocmF3ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICByZXR1cm4gcGFyc2UodGhpcywgcmF3KTtcbiAgICB9XG4gICAgYmVmb3JlTGF5b3V0KCkge1xuICAgICAgc3VwZXIuYmVmb3JlTGF5b3V0KCk7XG4gICAgICB0aGlzLl9jYWNoZSA9IHtcbiAgICAgICAgZGF0YTogW10sXG4gICAgICAgIGxhYmVsczogW10sXG4gICAgICAgIGFsbDogW11cbiAgICAgIH07XG4gICAgfVxuICAgIGRldGVybWluZURhdGFMaW1pdHMoKSB7XG4gICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgICAgY29uc3QgYWRhcHRlciA9IHRoaXMuX2FkYXB0ZXI7XG4gICAgICBjb25zdCB1bml0ID0gb3B0aW9ucy50aW1lLnVuaXQgfHwgJ2RheSc7XG4gICAgICBsZXQge1xuICAgICAgICBtaW4sXG4gICAgICAgIG1heCxcbiAgICAgICAgbWluRGVmaW5lZCxcbiAgICAgICAgbWF4RGVmaW5lZFxuICAgICAgfSA9IHRoaXMuZ2V0VXNlckJvdW5kcygpO1xuICAgICAgZnVuY3Rpb24gX2FwcGx5Qm91bmRzKGJvdW5kcykge1xuICAgICAgICBpZiAoIW1pbkRlZmluZWQgJiYgIWlzTmFOKGJvdW5kcy5taW4pKSB7XG4gICAgICAgICAgbWluID0gTWF0aC5taW4obWluLCBib3VuZHMubWluKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIW1heERlZmluZWQgJiYgIWlzTmFOKGJvdW5kcy5tYXgpKSB7XG4gICAgICAgICAgbWF4ID0gTWF0aC5tYXgobWF4LCBib3VuZHMubWF4KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCFtaW5EZWZpbmVkIHx8ICFtYXhEZWZpbmVkKSB7XG4gICAgICAgIF9hcHBseUJvdW5kcyh0aGlzLl9nZXRMYWJlbEJvdW5kcygpKTtcbiAgICAgICAgaWYgKG9wdGlvbnMuYm91bmRzICE9PSAndGlja3MnIHx8IG9wdGlvbnMudGlja3Muc291cmNlICE9PSAnbGFiZWxzJykge1xuICAgICAgICAgIF9hcHBseUJvdW5kcyh0aGlzLmdldE1pbk1heChmYWxzZSkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBtaW4gPSBpc051bWJlckZpbml0ZShtaW4pICYmICFpc05hTihtaW4pID8gbWluIDogK2FkYXB0ZXIuc3RhcnRPZihEYXRlLm5vdygpLCB1bml0KTtcbiAgICAgIG1heCA9IGlzTnVtYmVyRmluaXRlKG1heCkgJiYgIWlzTmFOKG1heCkgPyBtYXggOiArYWRhcHRlci5lbmRPZihEYXRlLm5vdygpLCB1bml0KSArIDE7XG4gICAgICB0aGlzLm1pbiA9IE1hdGgubWluKG1pbiwgbWF4IC0gMSk7XG4gICAgICB0aGlzLm1heCA9IE1hdGgubWF4KG1pbiArIDEsIG1heCk7XG4gICAgfVxuICAgIF9nZXRMYWJlbEJvdW5kcygpIHtcbiAgICAgIGNvbnN0IGFyciA9IHRoaXMuZ2V0TGFiZWxUaW1lc3RhbXBzKCk7XG4gICAgICBsZXQgbWluID0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO1xuICAgICAgbGV0IG1heCA9IE51bWJlci5ORUdBVElWRV9JTkZJTklUWTtcbiAgICAgIGlmIChhcnIubGVuZ3RoKSB7XG4gICAgICAgIG1pbiA9IGFyclswXTtcbiAgICAgICAgbWF4ID0gYXJyW2Fyci5sZW5ndGggLSAxXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIG1pbixcbiAgICAgICAgbWF4XG4gICAgICB9O1xuICAgIH1cbiAgICBidWlsZFRpY2tzKCkge1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICAgIGNvbnN0IHRpbWVPcHRzID0gb3B0aW9ucy50aW1lO1xuICAgICAgY29uc3QgdGlja09wdHMgPSBvcHRpb25zLnRpY2tzO1xuICAgICAgY29uc3QgdGltZXN0YW1wcyA9IHRpY2tPcHRzLnNvdXJjZSA9PT0gJ2xhYmVscycgPyB0aGlzLmdldExhYmVsVGltZXN0YW1wcygpIDogdGhpcy5fZ2VuZXJhdGUoKTtcbiAgICAgIGlmIChvcHRpb25zLmJvdW5kcyA9PT0gJ3RpY2tzJyAmJiB0aW1lc3RhbXBzLmxlbmd0aCkge1xuICAgICAgICB0aGlzLm1pbiA9IHRoaXMuX3VzZXJNaW4gfHwgdGltZXN0YW1wc1swXTtcbiAgICAgICAgdGhpcy5tYXggPSB0aGlzLl91c2VyTWF4IHx8IHRpbWVzdGFtcHNbdGltZXN0YW1wcy5sZW5ndGggLSAxXTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG1pbiA9IHRoaXMubWluO1xuICAgICAgY29uc3QgbWF4ID0gdGhpcy5tYXg7XG4gICAgICBjb25zdCB0aWNrcyA9IF9maWx0ZXJCZXR3ZWVuKHRpbWVzdGFtcHMsIG1pbiwgbWF4KTtcbiAgICAgIHRoaXMuX3VuaXQgPSB0aW1lT3B0cy51bml0IHx8ICh0aWNrT3B0cy5hdXRvU2tpcCA/IGRldGVybWluZVVuaXRGb3JBdXRvVGlja3ModGltZU9wdHMubWluVW5pdCwgdGhpcy5taW4sIHRoaXMubWF4LCB0aGlzLl9nZXRMYWJlbENhcGFjaXR5KG1pbikpIDogZGV0ZXJtaW5lVW5pdEZvckZvcm1hdHRpbmcodGhpcywgdGlja3MubGVuZ3RoLCB0aW1lT3B0cy5taW5Vbml0LCB0aGlzLm1pbiwgdGhpcy5tYXgpKTtcbiAgICAgIHRoaXMuX21ham9yVW5pdCA9ICF0aWNrT3B0cy5tYWpvci5lbmFibGVkIHx8IHRoaXMuX3VuaXQgPT09ICd5ZWFyJyA/IHVuZGVmaW5lZCA6IGRldGVybWluZU1ham9yVW5pdCh0aGlzLl91bml0KTtcbiAgICAgIHRoaXMuaW5pdE9mZnNldHModGltZXN0YW1wcyk7XG4gICAgICBpZiAob3B0aW9ucy5yZXZlcnNlKSB7XG4gICAgICAgIHRpY2tzLnJldmVyc2UoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aWNrc0Zyb21UaW1lc3RhbXBzKHRoaXMsIHRpY2tzLCB0aGlzLl9tYWpvclVuaXQpO1xuICAgIH1cbiAgICBhZnRlckF1dG9Ta2lwKCkge1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5vZmZzZXRBZnRlckF1dG9za2lwKSB7XG4gICAgICAgIHRoaXMuaW5pdE9mZnNldHModGhpcy50aWNrcy5tYXAodGljayA9PiArdGljay52YWx1ZSkpO1xuICAgICAgfVxuICAgIH1cbiAgICBpbml0T2Zmc2V0cyh0aW1lc3RhbXBzID0gW10pIHtcbiAgICAgIGxldCBzdGFydCA9IDA7XG4gICAgICBsZXQgZW5kID0gMDtcbiAgICAgIGxldCBmaXJzdCwgbGFzdDtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMub2Zmc2V0ICYmIHRpbWVzdGFtcHMubGVuZ3RoKSB7XG4gICAgICAgIGZpcnN0ID0gdGhpcy5nZXREZWNpbWFsRm9yVmFsdWUodGltZXN0YW1wc1swXSk7XG4gICAgICAgIGlmICh0aW1lc3RhbXBzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgIHN0YXJ0ID0gMSAtIGZpcnN0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0YXJ0ID0gKHRoaXMuZ2V0RGVjaW1hbEZvclZhbHVlKHRpbWVzdGFtcHNbMV0pIC0gZmlyc3QpIC8gMjtcbiAgICAgICAgfVxuICAgICAgICBsYXN0ID0gdGhpcy5nZXREZWNpbWFsRm9yVmFsdWUodGltZXN0YW1wc1t0aW1lc3RhbXBzLmxlbmd0aCAtIDFdKTtcbiAgICAgICAgaWYgKHRpbWVzdGFtcHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgZW5kID0gbGFzdDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBlbmQgPSAobGFzdCAtIHRoaXMuZ2V0RGVjaW1hbEZvclZhbHVlKHRpbWVzdGFtcHNbdGltZXN0YW1wcy5sZW5ndGggLSAyXSkpIC8gMjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29uc3QgbGltaXQgPSB0aW1lc3RhbXBzLmxlbmd0aCA8IDMgPyAwLjUgOiAwLjI1O1xuICAgICAgc3RhcnQgPSBfbGltaXRWYWx1ZShzdGFydCwgMCwgbGltaXQpO1xuICAgICAgZW5kID0gX2xpbWl0VmFsdWUoZW5kLCAwLCBsaW1pdCk7XG4gICAgICB0aGlzLl9vZmZzZXRzID0ge1xuICAgICAgICBzdGFydCxcbiAgICAgICAgZW5kLFxuICAgICAgICBmYWN0b3I6IDEgLyAoc3RhcnQgKyAxICsgZW5kKVxuICAgICAgfTtcbiAgICB9XG4gICAgX2dlbmVyYXRlKCkge1xuICAgICAgY29uc3QgYWRhcHRlciA9IHRoaXMuX2FkYXB0ZXI7XG4gICAgICBjb25zdCBtaW4gPSB0aGlzLm1pbjtcbiAgICAgIGNvbnN0IG1heCA9IHRoaXMubWF4O1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICAgIGNvbnN0IHRpbWVPcHRzID0gb3B0aW9ucy50aW1lO1xuICAgICAgY29uc3QgbWlub3IgPSB0aW1lT3B0cy51bml0IHx8IGRldGVybWluZVVuaXRGb3JBdXRvVGlja3ModGltZU9wdHMubWluVW5pdCwgbWluLCBtYXgsIHRoaXMuX2dldExhYmVsQ2FwYWNpdHkobWluKSk7XG4gICAgICBjb25zdCBzdGVwU2l6ZSA9IHZhbHVlT3JEZWZhdWx0KG9wdGlvbnMudGlja3Muc3RlcFNpemUsIDEpO1xuICAgICAgY29uc3Qgd2Vla2RheSA9IG1pbm9yID09PSAnd2VlaycgPyB0aW1lT3B0cy5pc29XZWVrZGF5IDogZmFsc2U7XG4gICAgICBjb25zdCBoYXNXZWVrZGF5ID0gaXNOdW1iZXIod2Vla2RheSkgfHwgd2Vla2RheSA9PT0gdHJ1ZTtcbiAgICAgIGNvbnN0IHRpY2tzID0ge307XG4gICAgICBsZXQgZmlyc3QgPSBtaW47XG4gICAgICBsZXQgdGltZSwgY291bnQ7XG4gICAgICBpZiAoaGFzV2Vla2RheSkge1xuICAgICAgICBmaXJzdCA9ICthZGFwdGVyLnN0YXJ0T2YoZmlyc3QsICdpc29XZWVrJywgd2Vla2RheSk7XG4gICAgICB9XG4gICAgICBmaXJzdCA9ICthZGFwdGVyLnN0YXJ0T2YoZmlyc3QsIGhhc1dlZWtkYXkgPyAnZGF5JyA6IG1pbm9yKTtcbiAgICAgIGlmIChhZGFwdGVyLmRpZmYobWF4LCBtaW4sIG1pbm9yKSA+IDEwMDAwMCAqIHN0ZXBTaXplKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihtaW4gKyAnIGFuZCAnICsgbWF4ICsgJyBhcmUgdG9vIGZhciBhcGFydCB3aXRoIHN0ZXBTaXplIG9mICcgKyBzdGVwU2l6ZSArICcgJyArIG1pbm9yKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHRpbWVzdGFtcHMgPSBvcHRpb25zLnRpY2tzLnNvdXJjZSA9PT0gJ2RhdGEnICYmIHRoaXMuZ2V0RGF0YVRpbWVzdGFtcHMoKTtcbiAgICAgIGZvciAodGltZSA9IGZpcnN0LCBjb3VudCA9IDA7IHRpbWUgPCBtYXg7IHRpbWUgPSArYWRhcHRlci5hZGQodGltZSwgc3RlcFNpemUsIG1pbm9yKSwgY291bnQrKykge1xuICAgICAgICBhZGRUaWNrKHRpY2tzLCB0aW1lLCB0aW1lc3RhbXBzKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aW1lID09PSBtYXggfHwgb3B0aW9ucy5ib3VuZHMgPT09ICd0aWNrcycgfHwgY291bnQgPT09IDEpIHtcbiAgICAgICAgYWRkVGljayh0aWNrcywgdGltZSwgdGltZXN0YW1wcyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gT2JqZWN0LmtleXModGlja3MpLnNvcnQoc29ydGVyKS5tYXAoeCA9PiAreCk7XG4gICAgfVxuICAgIGdldExhYmVsRm9yVmFsdWUodmFsdWUpIHtcbiAgICAgIGNvbnN0IGFkYXB0ZXIgPSB0aGlzLl9hZGFwdGVyO1xuICAgICAgY29uc3QgdGltZU9wdHMgPSB0aGlzLm9wdGlvbnMudGltZTtcbiAgICAgIGlmICh0aW1lT3B0cy50b29sdGlwRm9ybWF0KSB7XG4gICAgICAgIHJldHVybiBhZGFwdGVyLmZvcm1hdCh2YWx1ZSwgdGltZU9wdHMudG9vbHRpcEZvcm1hdCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYWRhcHRlci5mb3JtYXQodmFsdWUsIHRpbWVPcHRzLmRpc3BsYXlGb3JtYXRzLmRhdGV0aW1lKTtcbiAgICB9XG4gICAgZm9ybWF0KHZhbHVlLCBmb3JtYXQpIHtcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgICBjb25zdCBmb3JtYXRzID0gb3B0aW9ucy50aW1lLmRpc3BsYXlGb3JtYXRzO1xuICAgICAgY29uc3QgdW5pdCA9IHRoaXMuX3VuaXQ7XG4gICAgICBjb25zdCBmbXQgPSBmb3JtYXQgfHwgZm9ybWF0c1t1bml0XTtcbiAgICAgIHJldHVybiB0aGlzLl9hZGFwdGVyLmZvcm1hdCh2YWx1ZSwgZm10KTtcbiAgICB9XG4gICAgX3RpY2tGb3JtYXRGdW5jdGlvbih0aW1lLCBpbmRleCwgdGlja3MsIGZvcm1hdCkge1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICAgIGNvbnN0IGZvcm1hdHRlciA9IG9wdGlvbnMudGlja3MuY2FsbGJhY2s7XG4gICAgICBpZiAoZm9ybWF0dGVyKSB7XG4gICAgICAgIHJldHVybiBjYWxsYmFjayhmb3JtYXR0ZXIsIFt0aW1lLCBpbmRleCwgdGlja3NdLCB0aGlzKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGZvcm1hdHMgPSBvcHRpb25zLnRpbWUuZGlzcGxheUZvcm1hdHM7XG4gICAgICBjb25zdCB1bml0ID0gdGhpcy5fdW5pdDtcbiAgICAgIGNvbnN0IG1ham9yVW5pdCA9IHRoaXMuX21ham9yVW5pdDtcbiAgICAgIGNvbnN0IG1pbm9yRm9ybWF0ID0gdW5pdCAmJiBmb3JtYXRzW3VuaXRdO1xuICAgICAgY29uc3QgbWFqb3JGb3JtYXQgPSBtYWpvclVuaXQgJiYgZm9ybWF0c1ttYWpvclVuaXRdO1xuICAgICAgY29uc3QgdGljayA9IHRpY2tzW2luZGV4XTtcbiAgICAgIGNvbnN0IG1ham9yID0gbWFqb3JVbml0ICYmIG1ham9yRm9ybWF0ICYmIHRpY2sgJiYgdGljay5tYWpvcjtcbiAgICAgIHJldHVybiB0aGlzLl9hZGFwdGVyLmZvcm1hdCh0aW1lLCBmb3JtYXQgfHwgKG1ham9yID8gbWFqb3JGb3JtYXQgOiBtaW5vckZvcm1hdCkpO1xuICAgIH1cbiAgICBnZW5lcmF0ZVRpY2tMYWJlbHModGlja3MpIHtcbiAgICAgIGxldCBpLCBpbGVuLCB0aWNrO1xuICAgICAgZm9yIChpID0gMCwgaWxlbiA9IHRpY2tzLmxlbmd0aDsgaSA8IGlsZW47ICsraSkge1xuICAgICAgICB0aWNrID0gdGlja3NbaV07XG4gICAgICAgIHRpY2subGFiZWwgPSB0aGlzLl90aWNrRm9ybWF0RnVuY3Rpb24odGljay52YWx1ZSwgaSwgdGlja3MpO1xuICAgICAgfVxuICAgIH1cbiAgICBnZXREZWNpbWFsRm9yVmFsdWUodmFsdWUpIHtcbiAgICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IE5hTiA6ICh2YWx1ZSAtIHRoaXMubWluKSAvICh0aGlzLm1heCAtIHRoaXMubWluKTtcbiAgICB9XG4gICAgZ2V0UGl4ZWxGb3JWYWx1ZSh2YWx1ZSkge1xuICAgICAgY29uc3Qgb2Zmc2V0cyA9IHRoaXMuX29mZnNldHM7XG4gICAgICBjb25zdCBwb3MgPSB0aGlzLmdldERlY2ltYWxGb3JWYWx1ZSh2YWx1ZSk7XG4gICAgICByZXR1cm4gdGhpcy5nZXRQaXhlbEZvckRlY2ltYWwoKG9mZnNldHMuc3RhcnQgKyBwb3MpICogb2Zmc2V0cy5mYWN0b3IpO1xuICAgIH1cbiAgICBnZXRWYWx1ZUZvclBpeGVsKHBpeGVsKSB7XG4gICAgICBjb25zdCBvZmZzZXRzID0gdGhpcy5fb2Zmc2V0cztcbiAgICAgIGNvbnN0IHBvcyA9IHRoaXMuZ2V0RGVjaW1hbEZvclBpeGVsKHBpeGVsKSAvIG9mZnNldHMuZmFjdG9yIC0gb2Zmc2V0cy5lbmQ7XG4gICAgICByZXR1cm4gdGhpcy5taW4gKyBwb3MgKiAodGhpcy5tYXggLSB0aGlzLm1pbik7XG4gICAgfVxuICAgIF9nZXRMYWJlbFNpemUobGFiZWwpIHtcbiAgICAgIGNvbnN0IHRpY2tzT3B0cyA9IHRoaXMub3B0aW9ucy50aWNrcztcbiAgICAgIGNvbnN0IHRpY2tMYWJlbFdpZHRoID0gdGhpcy5jdHgubWVhc3VyZVRleHQobGFiZWwpLndpZHRoO1xuICAgICAgY29uc3QgYW5nbGUgPSB0b1JhZGlhbnModGhpcy5pc0hvcml6b250YWwoKSA/IHRpY2tzT3B0cy5tYXhSb3RhdGlvbiA6IHRpY2tzT3B0cy5taW5Sb3RhdGlvbik7XG4gICAgICBjb25zdCBjb3NSb3RhdGlvbiA9IE1hdGguY29zKGFuZ2xlKTtcbiAgICAgIGNvbnN0IHNpblJvdGF0aW9uID0gTWF0aC5zaW4oYW5nbGUpO1xuICAgICAgY29uc3QgdGlja0ZvbnRTaXplID0gdGhpcy5fcmVzb2x2ZVRpY2tGb250T3B0aW9ucygwKS5zaXplO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdzogdGlja0xhYmVsV2lkdGggKiBjb3NSb3RhdGlvbiArIHRpY2tGb250U2l6ZSAqIHNpblJvdGF0aW9uLFxuICAgICAgICBoOiB0aWNrTGFiZWxXaWR0aCAqIHNpblJvdGF0aW9uICsgdGlja0ZvbnRTaXplICogY29zUm90YXRpb25cbiAgICAgIH07XG4gICAgfVxuICAgIF9nZXRMYWJlbENhcGFjaXR5KGV4YW1wbGVUaW1lKSB7XG4gICAgICBjb25zdCB0aW1lT3B0cyA9IHRoaXMub3B0aW9ucy50aW1lO1xuICAgICAgY29uc3QgZGlzcGxheUZvcm1hdHMgPSB0aW1lT3B0cy5kaXNwbGF5Rm9ybWF0cztcbiAgICAgIGNvbnN0IGZvcm1hdCA9IGRpc3BsYXlGb3JtYXRzW3RpbWVPcHRzLnVuaXRdIHx8IGRpc3BsYXlGb3JtYXRzLm1pbGxpc2Vjb25kO1xuICAgICAgY29uc3QgZXhhbXBsZUxhYmVsID0gdGhpcy5fdGlja0Zvcm1hdEZ1bmN0aW9uKGV4YW1wbGVUaW1lLCAwLCB0aWNrc0Zyb21UaW1lc3RhbXBzKHRoaXMsIFtleGFtcGxlVGltZV0sIHRoaXMuX21ham9yVW5pdCksIGZvcm1hdCk7XG4gICAgICBjb25zdCBzaXplID0gdGhpcy5fZ2V0TGFiZWxTaXplKGV4YW1wbGVMYWJlbCk7XG4gICAgICBjb25zdCBjYXBhY2l0eSA9IE1hdGguZmxvb3IodGhpcy5pc0hvcml6b250YWwoKSA/IHRoaXMud2lkdGggLyBzaXplLncgOiB0aGlzLmhlaWdodCAvIHNpemUuaCkgLSAxO1xuICAgICAgcmV0dXJuIGNhcGFjaXR5ID4gMCA/IGNhcGFjaXR5IDogMTtcbiAgICB9XG4gICAgZ2V0RGF0YVRpbWVzdGFtcHMoKSB7XG4gICAgICBsZXQgdGltZXN0YW1wcyA9IHRoaXMuX2NhY2hlLmRhdGEgfHwgW107XG4gICAgICBsZXQgaSwgaWxlbjtcbiAgICAgIGlmICh0aW1lc3RhbXBzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gdGltZXN0YW1wcztcbiAgICAgIH1cbiAgICAgIGNvbnN0IG1ldGFzID0gdGhpcy5nZXRNYXRjaGluZ1Zpc2libGVNZXRhcygpO1xuICAgICAgaWYgKHRoaXMuX25vcm1hbGl6ZWQgJiYgbWV0YXMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jYWNoZS5kYXRhID0gbWV0YXNbMF0uY29udHJvbGxlci5nZXRBbGxQYXJzZWRWYWx1ZXModGhpcyk7XG4gICAgICB9XG4gICAgICBmb3IgKGkgPSAwLCBpbGVuID0gbWV0YXMubGVuZ3RoOyBpIDwgaWxlbjsgKytpKSB7XG4gICAgICAgIHRpbWVzdGFtcHMgPSB0aW1lc3RhbXBzLmNvbmNhdChtZXRhc1tpXS5jb250cm9sbGVyLmdldEFsbFBhcnNlZFZhbHVlcyh0aGlzKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5fY2FjaGUuZGF0YSA9IHRoaXMubm9ybWFsaXplKHRpbWVzdGFtcHMpO1xuICAgIH1cbiAgICBnZXRMYWJlbFRpbWVzdGFtcHMoKSB7XG4gICAgICBjb25zdCB0aW1lc3RhbXBzID0gdGhpcy5fY2FjaGUubGFiZWxzIHx8IFtdO1xuICAgICAgbGV0IGksIGlsZW47XG4gICAgICBpZiAodGltZXN0YW1wcy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIHRpbWVzdGFtcHM7XG4gICAgICB9XG4gICAgICBjb25zdCBsYWJlbHMgPSB0aGlzLmdldExhYmVscygpO1xuICAgICAgZm9yIChpID0gMCwgaWxlbiA9IGxhYmVscy5sZW5ndGg7IGkgPCBpbGVuOyArK2kpIHtcbiAgICAgICAgdGltZXN0YW1wcy5wdXNoKHBhcnNlKHRoaXMsIGxhYmVsc1tpXSkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuX2NhY2hlLmxhYmVscyA9IHRoaXMuX25vcm1hbGl6ZWQgPyB0aW1lc3RhbXBzIDogdGhpcy5ub3JtYWxpemUodGltZXN0YW1wcyk7XG4gICAgfVxuICAgIG5vcm1hbGl6ZSh2YWx1ZXMpIHtcbiAgICAgIHJldHVybiBfYXJyYXlVbmlxdWUodmFsdWVzLnNvcnQoc29ydGVyKSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBUaW1lU2NhbGU7XG59KSgpO1xuZnVuY3Rpb24gaW50ZXJwb2xhdGUodGFibGUsIHZhbCwgcmV2ZXJzZSkge1xuICBsZXQgbG8gPSAwO1xuICBsZXQgaGkgPSB0YWJsZS5sZW5ndGggLSAxO1xuICBsZXQgcHJldlNvdXJjZSwgbmV4dFNvdXJjZSwgcHJldlRhcmdldCwgbmV4dFRhcmdldDtcbiAgaWYgKHJldmVyc2UpIHtcbiAgICBpZiAodmFsID49IHRhYmxlW2xvXS5wb3MgJiYgdmFsIDw9IHRhYmxlW2hpXS5wb3MpIHtcbiAgICAgICh7XG4gICAgICAgIGxvLFxuICAgICAgICBoaVxuICAgICAgfSA9IF9sb29rdXBCeUtleSh0YWJsZSwgJ3BvcycsIHZhbCkpO1xuICAgIH1cbiAgICAoe1xuICAgICAgcG9zOiBwcmV2U291cmNlLFxuICAgICAgdGltZTogcHJldlRhcmdldFxuICAgIH0gPSB0YWJsZVtsb10pO1xuICAgICh7XG4gICAgICBwb3M6IG5leHRTb3VyY2UsXG4gICAgICB0aW1lOiBuZXh0VGFyZ2V0XG4gICAgfSA9IHRhYmxlW2hpXSk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKHZhbCA+PSB0YWJsZVtsb10udGltZSAmJiB2YWwgPD0gdGFibGVbaGldLnRpbWUpIHtcbiAgICAgICh7XG4gICAgICAgIGxvLFxuICAgICAgICBoaVxuICAgICAgfSA9IF9sb29rdXBCeUtleSh0YWJsZSwgJ3RpbWUnLCB2YWwpKTtcbiAgICB9XG4gICAgKHtcbiAgICAgIHRpbWU6IHByZXZTb3VyY2UsXG4gICAgICBwb3M6IHByZXZUYXJnZXRcbiAgICB9ID0gdGFibGVbbG9dKTtcbiAgICAoe1xuICAgICAgdGltZTogbmV4dFNvdXJjZSxcbiAgICAgIHBvczogbmV4dFRhcmdldFxuICAgIH0gPSB0YWJsZVtoaV0pO1xuICB9XG4gIGNvbnN0IHNwYW4gPSBuZXh0U291cmNlIC0gcHJldlNvdXJjZTtcbiAgcmV0dXJuIHNwYW4gPyBwcmV2VGFyZ2V0ICsgKG5leHRUYXJnZXQgLSBwcmV2VGFyZ2V0KSAqICh2YWwgLSBwcmV2U291cmNlKSAvIHNwYW4gOiBwcmV2VGFyZ2V0O1xufVxuY2xhc3MgVGltZVNlcmllc1NjYWxlIGV4dGVuZHMgVGltZVNjYWxlIHtcbiAgc3RhdGljIGlkID0gJ3RpbWVzZXJpZXMnO1xuICBzdGF0aWMgZGVmYXVsdHMgPSBUaW1lU2NhbGUuZGVmYXVsdHM7XG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuX3RhYmxlID0gW107XG4gICAgdGhpcy5fbWluUG9zID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuX3RhYmxlUmFuZ2UgPSB1bmRlZmluZWQ7XG4gIH1cbiAgaW5pdE9mZnNldHMoKSB7XG4gICAgY29uc3QgdGltZXN0YW1wcyA9IHRoaXMuX2dldFRpbWVzdGFtcHNGb3JUYWJsZSgpO1xuICAgIGNvbnN0IHRhYmxlID0gdGhpcy5fdGFibGUgPSB0aGlzLmJ1aWxkTG9va3VwVGFibGUodGltZXN0YW1wcyk7XG4gICAgdGhpcy5fbWluUG9zID0gaW50ZXJwb2xhdGUodGFibGUsIHRoaXMubWluKTtcbiAgICB0aGlzLl90YWJsZVJhbmdlID0gaW50ZXJwb2xhdGUodGFibGUsIHRoaXMubWF4KSAtIHRoaXMuX21pblBvcztcbiAgICBzdXBlci5pbml0T2Zmc2V0cyh0aW1lc3RhbXBzKTtcbiAgfVxuICBidWlsZExvb2t1cFRhYmxlKHRpbWVzdGFtcHMpIHtcbiAgICBjb25zdCB7XG4gICAgICBtaW4sXG4gICAgICBtYXhcbiAgICB9ID0gdGhpcztcbiAgICBjb25zdCBpdGVtcyA9IFtdO1xuICAgIGNvbnN0IHRhYmxlID0gW107XG4gICAgbGV0IGksIGlsZW4sIHByZXYsIGN1cnIsIG5leHQ7XG4gICAgZm9yIChpID0gMCwgaWxlbiA9IHRpbWVzdGFtcHMubGVuZ3RoOyBpIDwgaWxlbjsgKytpKSB7XG4gICAgICBjdXJyID0gdGltZXN0YW1wc1tpXTtcbiAgICAgIGlmIChjdXJyID49IG1pbiAmJiBjdXJyIDw9IG1heCkge1xuICAgICAgICBpdGVtcy5wdXNoKGN1cnIpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoaXRlbXMubGVuZ3RoIDwgMikge1xuICAgICAgcmV0dXJuIFt7XG4gICAgICAgIHRpbWU6IG1pbixcbiAgICAgICAgcG9zOiAwXG4gICAgICB9LCB7XG4gICAgICAgIHRpbWU6IG1heCxcbiAgICAgICAgcG9zOiAxXG4gICAgICB9XTtcbiAgICB9XG4gICAgZm9yIChpID0gMCwgaWxlbiA9IGl0ZW1zLmxlbmd0aDsgaSA8IGlsZW47ICsraSkge1xuICAgICAgbmV4dCA9IGl0ZW1zW2kgKyAxXTtcbiAgICAgIHByZXYgPSBpdGVtc1tpIC0gMV07XG4gICAgICBjdXJyID0gaXRlbXNbaV07XG4gICAgICBpZiAoTWF0aC5yb3VuZCgobmV4dCArIHByZXYpIC8gMikgIT09IGN1cnIpIHtcbiAgICAgICAgdGFibGUucHVzaCh7XG4gICAgICAgICAgdGltZTogY3VycixcbiAgICAgICAgICBwb3M6IGkgLyAoaWxlbiAtIDEpXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGFibGU7XG4gIH1cbiAgX2dlbmVyYXRlKCkge1xuICAgIGNvbnN0IG1pbiA9IHRoaXMubWluO1xuICAgIGNvbnN0IG1heCA9IHRoaXMubWF4O1xuICAgIGxldCB0aW1lc3RhbXBzID0gc3VwZXIuZ2V0RGF0YVRpbWVzdGFtcHMoKTtcbiAgICBpZiAoIXRpbWVzdGFtcHMuaW5jbHVkZXMobWluKSB8fCAhdGltZXN0YW1wcy5sZW5ndGgpIHtcbiAgICAgIHRpbWVzdGFtcHMuc3BsaWNlKDAsIDAsIG1pbik7XG4gICAgfVxuICAgIGlmICghdGltZXN0YW1wcy5pbmNsdWRlcyhtYXgpIHx8IHRpbWVzdGFtcHMubGVuZ3RoID09PSAxKSB7XG4gICAgICB0aW1lc3RhbXBzLnB1c2gobWF4KTtcbiAgICB9XG4gICAgcmV0dXJuIHRpbWVzdGFtcHMuc29ydCgoYSwgYikgPT4gYSAtIGIpO1xuICB9XG4gIF9nZXRUaW1lc3RhbXBzRm9yVGFibGUoKSB7XG4gICAgbGV0IHRpbWVzdGFtcHMgPSB0aGlzLl9jYWNoZS5hbGwgfHwgW107XG4gICAgaWYgKHRpbWVzdGFtcHMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gdGltZXN0YW1wcztcbiAgICB9XG4gICAgY29uc3QgZGF0YSA9IHRoaXMuZ2V0RGF0YVRpbWVzdGFtcHMoKTtcbiAgICBjb25zdCBsYWJlbCA9IHRoaXMuZ2V0TGFiZWxUaW1lc3RhbXBzKCk7XG4gICAgaWYgKGRhdGEubGVuZ3RoICYmIGxhYmVsLmxlbmd0aCkge1xuICAgICAgdGltZXN0YW1wcyA9IHRoaXMubm9ybWFsaXplKGRhdGEuY29uY2F0KGxhYmVsKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRpbWVzdGFtcHMgPSBkYXRhLmxlbmd0aCA/IGRhdGEgOiBsYWJlbDtcbiAgICB9XG4gICAgdGltZXN0YW1wcyA9IHRoaXMuX2NhY2hlLmFsbCA9IHRpbWVzdGFtcHM7XG4gICAgcmV0dXJuIHRpbWVzdGFtcHM7XG4gIH1cbiAgZ2V0RGVjaW1hbEZvclZhbHVlKHZhbHVlKSB7XG4gICAgcmV0dXJuIChpbnRlcnBvbGF0ZSh0aGlzLl90YWJsZSwgdmFsdWUpIC0gdGhpcy5fbWluUG9zKSAvIHRoaXMuX3RhYmxlUmFuZ2U7XG4gIH1cbiAgZ2V0VmFsdWVGb3JQaXhlbChwaXhlbCkge1xuICAgIGNvbnN0IG9mZnNldHMgPSB0aGlzLl9vZmZzZXRzO1xuICAgIGNvbnN0IGRlY2ltYWwgPSB0aGlzLmdldERlY2ltYWxGb3JQaXhlbChwaXhlbCkgLyBvZmZzZXRzLmZhY3RvciAtIG9mZnNldHMuZW5kO1xuICAgIHJldHVybiBpbnRlcnBvbGF0ZSh0aGlzLl90YWJsZSwgZGVjaW1hbCAqIHRoaXMuX3RhYmxlUmFuZ2UgKyB0aGlzLl9taW5Qb3MsIHRydWUpO1xuICB9XG59XG52YXIgc2NhbGVzID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoe1xuICBfX3Byb3RvX186IG51bGwsXG4gIENhdGVnb3J5U2NhbGU6IENhdGVnb3J5U2NhbGUsXG4gIExpbmVhclNjYWxlOiBMaW5lYXJTY2FsZSxcbiAgTG9nYXJpdGhtaWNTY2FsZTogTG9nYXJpdGhtaWNTY2FsZSxcbiAgUmFkaWFsTGluZWFyU2NhbGU6IFJhZGlhbExpbmVhclNjYWxlLFxuICBUaW1lU2NhbGU6IFRpbWVTY2FsZSxcbiAgVGltZVNlcmllc1NjYWxlOiBUaW1lU2VyaWVzU2NhbGVcbn0pO1xuY29uc3QgcmVnaXN0ZXJhYmxlcyA9IFtjb250cm9sbGVycywgZWxlbWVudHMsIHBsdWdpbnMsIHNjYWxlc107XG5leHBvcnQgeyBBbmltYXRpb24sIEFuaW1hdGlvbnMsIEFyY0VsZW1lbnQsIEJhckNvbnRyb2xsZXIsIEJhckVsZW1lbnQsIEJhc2VQbGF0Zm9ybSwgQmFzaWNQbGF0Zm9ybSwgQnViYmxlQ29udHJvbGxlciwgQ2F0ZWdvcnlTY2FsZSwgQ2hhcnQsIHBsdWdpbl9jb2xvcnMgYXMgQ29sb3JzLCBEYXRhc2V0Q29udHJvbGxlciwgcGx1Z2luX2RlY2ltYXRpb24gYXMgRGVjaW1hdGlvbiwgRG9tUGxhdGZvcm0sIERvdWdobnV0Q29udHJvbGxlciwgRWxlbWVudCwgaW5kZXggYXMgRmlsbGVyLCBJbnRlcmFjdGlvbiwgcGx1Z2luX2xlZ2VuZCBhcyBMZWdlbmQsIExpbmVDb250cm9sbGVyLCBMaW5lRWxlbWVudCwgTGluZWFyU2NhbGUsIExvZ2FyaXRobWljU2NhbGUsIFBpZUNvbnRyb2xsZXIsIFBvaW50RWxlbWVudCwgUG9sYXJBcmVhQ29udHJvbGxlciwgUmFkYXJDb250cm9sbGVyLCBSYWRpYWxMaW5lYXJTY2FsZSwgU2NhbGUsIFNjYXR0ZXJDb250cm9sbGVyLCBwbHVnaW5fc3VidGl0bGUgYXMgU3ViVGl0bGUsIFRpY2tzLCBUaW1lU2NhbGUsIFRpbWVTZXJpZXNTY2FsZSwgcGx1Z2luX3RpdGxlIGFzIFRpdGxlLCBwbHVnaW5fdG9vbHRpcCBhcyBUb29sdGlwLCBhZGFwdGVycyBhcyBfYWRhcHRlcnMsIF9kZXRlY3RQbGF0Zm9ybSwgYW5pbWF0b3IsIGNvbnRyb2xsZXJzLCBkZWZhdWx0cywgZWxlbWVudHMsIGxheW91dHMsIHBsdWdpbnMsIHJlZ2lzdGVyYWJsZXMsIHJlZ2lzdHJ5LCBzY2FsZXMgfTtcbiIsImZ1bmN0aW9uIGlzUGxhaW5PYmplY3QodmFsdWUpIHtcbiAgaWYgKCF2YWx1ZSB8fCB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbHVlKTtcbiAgY29uc3QgaGFzT2JqZWN0UHJvdG90eXBlID0gcHJvdG8gPT09IG51bGwgfHwgcHJvdG8gPT09IE9iamVjdC5wcm90b3R5cGUgfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKHByb3RvKSA9PT0gbnVsbDtcbiAgaWYgKCFoYXNPYmplY3RQcm90b3R5cGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09ICdbb2JqZWN0IE9iamVjdF0nO1xufVxuZXhwb3J0IHsgaXNQbGFpbk9iamVjdCB9OyIsImZ1bmN0aW9uIGlzVW5zYWZlUHJvcGVydHkoa2V5KSB7XG4gIHJldHVybiBrZXkgPT09ICdfX3Byb3RvX18nO1xufVxuZXhwb3J0IHsgaXNVbnNhZmVQcm9wZXJ0eSB9OyIsImltcG9ydCB7IGlzVW5zYWZlUHJvcGVydHkgfSBmcm9tICcuLi9faW50ZXJuYWwvaXNVbnNhZmVQcm9wZXJ0eS5tanMnO1xuaW1wb3J0IHsgaXNQbGFpbk9iamVjdCB9IGZyb20gJy4uL3ByZWRpY2F0ZS9pc1BsYWluT2JqZWN0Lm1qcyc7XG5mdW5jdGlvbiBtZXJnZSh0YXJnZXQsIHNvdXJjZSkge1xuICBjb25zdCBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3Qga2V5ID0gc291cmNlS2V5c1tpXTtcbiAgICBpZiAoaXNVbnNhZmVQcm9wZXJ0eShrZXkpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3Qgc291cmNlVmFsdWUgPSBzb3VyY2Vba2V5XTtcbiAgICBjb25zdCB0YXJnZXRWYWx1ZSA9IHRhcmdldFtrZXldO1xuICAgIGlmIChpc01lcmdlYWJsZVZhbHVlKHNvdXJjZVZhbHVlKSAmJiBpc01lcmdlYWJsZVZhbHVlKHRhcmdldFZhbHVlKSkge1xuICAgICAgdGFyZ2V0W2tleV0gPSBtZXJnZSh0YXJnZXRWYWx1ZSwgc291cmNlVmFsdWUpO1xuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShzb3VyY2VWYWx1ZSkpIHtcbiAgICAgIHRhcmdldFtrZXldID0gbWVyZ2UoW10sIHNvdXJjZVZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKGlzUGxhaW5PYmplY3Qoc291cmNlVmFsdWUpKSB7XG4gICAgICB0YXJnZXRba2V5XSA9IG1lcmdlKHt9LCBzb3VyY2VWYWx1ZSk7XG4gICAgfSBlbHNlIGlmICh0YXJnZXRWYWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHNvdXJjZVZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRhcmdldFtrZXldID0gc291cmNlVmFsdWU7XG4gICAgfVxuICB9XG4gIHJldHVybiB0YXJnZXQ7XG59XG5mdW5jdGlvbiBpc01lcmdlYWJsZVZhbHVlKHZhbHVlKSB7XG4gIHJldHVybiBpc1BsYWluT2JqZWN0KHZhbHVlKSB8fCBBcnJheS5pc0FycmF5KHZhbHVlKTtcbn1cbmV4cG9ydCB7IG1lcmdlIH07IiwiaW1wb3J0ICogYXMgaTAgZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiwgSW5qZWN0YWJsZSwgRXZlbnRFbWl0dGVyLCBpbmplY3QsIEVsZW1lbnRSZWYsIE5nWm9uZSwgUExBVEZPUk1fSUQsIE91dHB1dCwgSW5wdXQsIERpcmVjdGl2ZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgcmVnaXN0ZXJhYmxlcywgQ2hhcnQsIGRlZmF1bHRzIH0gZnJvbSAnY2hhcnQuanMnO1xuaW1wb3J0IHsgbWVyZ2UgfSBmcm9tICdlcy10b29sa2l0JztcbmltcG9ydCB7IGlzUGxhdGZvcm1Ccm93c2VyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5jb25zdCBOR19DSEFSVFNfQ09ORklHVVJBVElPTiA9IC8qI19fUFVSRV9fKi9uZXcgSW5qZWN0aW9uVG9rZW4oJ0NvbmZpZ3VyYXRpb24gZm9yIG5nQ2hhcnRzJyk7XG4vKipcbiAqIFByb3ZpZGUgYWxsIHRoZSBkZWZhdWx0IHJlZ2lzdGVyYWJsZSBhcyBkZWZpbmVkIGJ5IENoYXJ0LmpzXG4gKi9cbmZ1bmN0aW9uIHdpdGhEZWZhdWx0UmVnaXN0ZXJhYmxlcyguLi5yZWdpc3RlcmFibGVzJDEpIHtcbiAgcmV0dXJuIHtcbiAgICByZWdpc3RlcmFibGVzOiBbLi4ucmVnaXN0ZXJhYmxlcywgLi4ucmVnaXN0ZXJhYmxlcyQxXVxuICB9O1xufVxuLyoqXG4gKiBQcm92aWRlIGNvbmZpZ3VyYXRpb24gZm9yIG5nQ2hhcnRzLiBJbiBtb3N0IGNhc2VzLCB5b3UgaGF2ZSB0byBwYXNzIGl0IHNvbWUgcmVnaXN0ZXJhYmxlcy4gU28gZWl0aGVyXG4gKiBgd2l0aERlZmF1bHRSZWdpc3RlcmFibGVzKClgLCBvciBhIGN1c3RvbSBsaXN0IG9mIHJlZ2lzdGVyYWJsZXMgdGFpbG9yZWQgdG8geW91ciBuZWVkcyB0byByZWR1Y2UgYnVuZGxlIHNpemUuXG4gKi9cbmZ1bmN0aW9uIHByb3ZpZGVDaGFydHMoLi4uY29uZmlndXJhdGlvbnMpIHtcbiAgY29uc3QgY29uZmlnID0gY29uZmlndXJhdGlvbnMucmVkdWNlKG1lcmdlLCB7fSk7XG4gIHJldHVybiB7XG4gICAgcHJvdmlkZTogTkdfQ0hBUlRTX0NPTkZJR1VSQVRJT04sXG4gICAgdXNlVmFsdWU6IGNvbmZpZ1xuICB9O1xufVxubGV0IFRoZW1lU2VydmljZSA9IC8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICBjbGFzcyBUaGVtZVNlcnZpY2Uge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgdGhpcy5jb2xvcnNjaGVtZXNPcHRpb25zID0gbmV3IEJlaGF2aW9yU3ViamVjdCh1bmRlZmluZWQpO1xuICAgIH1cbiAgICBzZXRDb2xvcnNjaGVtZXNPcHRpb25zKG9wdGlvbnMpIHtcbiAgICAgIHRoaXMucENvbG9yc2NoZW1lc09wdGlvbnMgPSBvcHRpb25zO1xuICAgICAgdGhpcy5jb2xvcnNjaGVtZXNPcHRpb25zLm5leHQob3B0aW9ucyk7XG4gICAgfVxuICAgIGdldENvbG9yc2NoZW1lc09wdGlvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5wQ29sb3JzY2hlbWVzT3B0aW9ucztcbiAgICB9XG4gICAgc3RhdGljIHtcbiAgICAgIHRoaXMuybVmYWMgPSBmdW5jdGlvbiBUaGVtZVNlcnZpY2VfRmFjdG9yeShfX25nRmFjdG9yeVR5cGVfXykge1xuICAgICAgICByZXR1cm4gbmV3IChfX25nRmFjdG9yeVR5cGVfXyB8fCBUaGVtZVNlcnZpY2UpKCk7XG4gICAgICB9O1xuICAgIH1cbiAgICBzdGF0aWMge1xuICAgICAgdGhpcy7JtXByb3YgPSAvKiBAX19QVVJFX18gKi9pMC7Jtcm1ZGVmaW5lSW5qZWN0YWJsZSh7XG4gICAgICAgIHRva2VuOiBUaGVtZVNlcnZpY2UsXG4gICAgICAgIGZhY3Rvcnk6IFRoZW1lU2VydmljZS7JtWZhYyxcbiAgICAgICAgcHJvdmlkZWRJbjogJ3Jvb3QnXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIFRoZW1lU2VydmljZTtcbn0pKCk7XG4oKCkgPT4ge1xuICAodHlwZW9mIG5nRGV2TW9kZSA9PT0gXCJ1bmRlZmluZWRcIiB8fCBuZ0Rldk1vZGUpICYmIHZvaWQgMDtcbn0pKCk7XG5sZXQgQmFzZUNoYXJ0RGlyZWN0aXZlID0gLyojX19QVVJFX18qLygoKSA9PiB7XG4gIGNsYXNzIEJhc2VDaGFydERpcmVjdGl2ZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICB0aGlzLnR5cGUgPSAnYmFyJztcbiAgICAgIHRoaXMucGx1Z2lucyA9IFtdO1xuICAgICAgdGhpcy5jaGFydENsaWNrID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgdGhpcy5jaGFydEhvdmVyID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgdGhpcy5jdHggPSBudWxsO1xuICAgICAgdGhpcy5zdWJzID0gW107XG4gICAgICB0aGlzLnRoZW1lT3ZlcnJpZGVzID0ge307XG4gICAgICB0aGlzLmVsZW1lbnQgPSBpbmplY3QoRWxlbWVudFJlZik7XG4gICAgICB0aGlzLnpvbmUgPSBpbmplY3QoTmdab25lKTtcbiAgICAgIHRoaXMudGhlbWVTZXJ2aWNlID0gaW5qZWN0KFRoZW1lU2VydmljZSk7XG4gICAgICB0aGlzLmNvbmZpZyA9IGluamVjdChOR19DSEFSVFNfQ09ORklHVVJBVElPTiwge1xuICAgICAgICBvcHRpb25hbDogdHJ1ZVxuICAgICAgfSk7XG4gICAgICB0aGlzLnBsYXRmb3JtSWQgPSBpbmplY3QoUExBVEZPUk1fSUQpO1xuICAgICAgdGhpcy5pc0Jyb3dzZXIgPSBpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpO1xuICAgICAgaWYgKHRoaXMuY29uZmlnPy5yZWdpc3RlcmFibGVzKSB7XG4gICAgICAgIENoYXJ0LnJlZ2lzdGVyKC4uLnRoaXMuY29uZmlnLnJlZ2lzdGVyYWJsZXMpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuY29uZmlnPy5kZWZhdWx0cykge1xuICAgICAgICBkZWZhdWx0cy5zZXQodGhpcy5jb25maWcuZGVmYXVsdHMpO1xuICAgICAgfVxuICAgICAgLy8gT25seSBnZXQgY2FudmFzIGNvbnRleHQgaW4gYnJvd3NlciBlbnZpcm9ubWVudFxuICAgICAgaWYgKHRoaXMuaXNCcm93c2VyKSB7XG4gICAgICAgIHRoaXMuY3R4ID0gdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZ2V0Q29udGV4dCgnMmQnKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc3Vicy5wdXNoKHRoaXMudGhlbWVTZXJ2aWNlLmNvbG9yc2NoZW1lc09wdGlvbnMucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKS5zdWJzY3JpYmUociA9PiB0aGlzLnRoZW1lQ2hhbmdlZChyKSkpO1xuICAgIH1cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzKSB7XG4gICAgICBpZiAoIXRoaXMuaXNCcm93c2VyKSB7XG4gICAgICAgIHJldHVybjsgLy8gU2tpcCBjaGFydCBvcGVyYXRpb25zIGluIFNTUlxuICAgICAgfVxuICAgICAgY29uc3QgcmVxdWlyZVJlbmRlciA9IFsndHlwZSddO1xuICAgICAgY29uc3QgcHJvcGVydHlOYW1lcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGNoYW5nZXMpO1xuICAgICAgaWYgKHByb3BlcnR5TmFtZXMuc29tZShrZXkgPT4gcmVxdWlyZVJlbmRlci5pbmNsdWRlcyhrZXkpKSB8fCBwcm9wZXJ0eU5hbWVzLmV2ZXJ5KGtleSA9PiBjaGFuZ2VzW2tleV0uaXNGaXJzdENoYW5nZSgpKSkge1xuICAgICAgICB0aGlzLnJlbmRlcigpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gRm9yIGxlZ2VuZCBjaGFuZ2VzLCB3ZSBuZWVkIHRvIHVwZGF0ZSB0aGUgY2hhcnQgb3B0aW9ucyBhbmQgcmUtcmVuZGVyXG4gICAgICAgIGlmICh0aGlzLmNoYXJ0ICYmIGNoYW5nZXNbJ2xlZ2VuZCddKSB7XG4gICAgICAgICAgY29uc3QgY29uZmlnID0gdGhpcy5nZXRDaGFydENvbmZpZ3VyYXRpb24oKTtcbiAgICAgICAgICBpZiAoY29uZmlnLm9wdGlvbnMpIHtcbiAgICAgICAgICAgIHRoaXMuY2hhcnQub3B0aW9ucyA9IGNvbmZpZy5vcHRpb25zO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnVwZGF0ZSgpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY2hhcnQpIHtcbiAgICAgICAgICBjb25zdCBjb25maWcgPSB0aGlzLmdldENoYXJ0Q29uZmlndXJhdGlvbigpO1xuICAgICAgICAgIC8vIFVzaW5nIGFzc2lnbiB0byBhdm9pZCBjaGFuZ2luZyB0aGUgb3JpZ2luYWwgb2JqZWN0IHJlZmVyZW5jZVxuICAgICAgICAgIGlmIChjb25maWcuZGF0YSAmJiB0aGlzLmNoYXJ0LmNvbmZpZy5kYXRhKSB7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMuY2hhcnQuY29uZmlnLmRhdGEsIGNvbmZpZy5kYXRhKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGNvbmZpZy5wbHVnaW5zICYmIHRoaXMuY2hhcnQuY29uZmlnLnBsdWdpbnMpIHtcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5jaGFydC5jb25maWcucGx1Z2lucywgY29uZmlnLnBsdWdpbnMpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoY29uZmlnLm9wdGlvbnMgJiYgdGhpcy5jaGFydC5jb25maWcub3B0aW9ucykge1xuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLmNoYXJ0LmNvbmZpZy5vcHRpb25zLCBjb25maWcub3B0aW9ucyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMudXBkYXRlKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICBpZiAodGhpcy5jaGFydCkge1xuICAgICAgICB0aGlzLmNoYXJ0LmRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5jaGFydCA9IHZvaWQgMDtcbiAgICAgIH1cbiAgICAgIHRoaXMuc3Vicy5mb3JFYWNoKHMgPT4gcy51bnN1YnNjcmliZSgpKTtcbiAgICB9XG4gICAgcmVuZGVyKCkge1xuICAgICAgaWYgKCF0aGlzLmlzQnJvd3NlciB8fCAhdGhpcy5jdHgpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmNoYXJ0KSB7XG4gICAgICAgIHRoaXMuY2hhcnQuZGVzdHJveSgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB0aGlzLmNoYXJ0ID0gbmV3IENoYXJ0KHRoaXMuY3R4LCB0aGlzLmdldENoYXJ0Q29uZmlndXJhdGlvbigpKSk7XG4gICAgfVxuICAgIHVwZGF0ZShtb2RlKSB7XG4gICAgICBpZiAodGhpcy5jaGFydCAmJiB0aGlzLmlzQnJvd3Nlcikge1xuICAgICAgICB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4gdGhpcy5jaGFydD8udXBkYXRlKG1vZGUpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaGlkZURhdGFzZXQoaW5kZXgsIGhpZGRlbikge1xuICAgICAgaWYgKHRoaXMuY2hhcnQgJiYgdGhpcy5pc0Jyb3dzZXIpIHtcbiAgICAgICAgdGhpcy5jaGFydC5nZXREYXRhc2V0TWV0YShpbmRleCkuaGlkZGVuID0gaGlkZGVuO1xuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xuICAgICAgfVxuICAgIH1cbiAgICBpc0RhdGFzZXRIaWRkZW4oaW5kZXgpIHtcbiAgICAgIHJldHVybiB0aGlzLmNoYXJ0Py5nZXREYXRhc2V0TWV0YShpbmRleCk/LmhpZGRlbjtcbiAgICB9XG4gICAgdG9CYXNlNjRJbWFnZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmNoYXJ0Py50b0Jhc2U2NEltYWdlKCk7XG4gICAgfVxuICAgIHRoZW1lQ2hhbmdlZChvcHRpb25zKSB7XG4gICAgICB0aGlzLnRoZW1lT3ZlcnJpZGVzID0gb3B0aW9ucztcbiAgICAgIGlmICh0aGlzLmNoYXJ0KSB7XG4gICAgICAgIGlmICh0aGlzLmNoYXJ0LmNvbmZpZy5vcHRpb25zKSB7XG4gICAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLmNoYXJ0LmNvbmZpZy5vcHRpb25zLCB0aGlzLmdldENoYXJ0T3B0aW9ucygpKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xuICAgICAgfVxuICAgIH1cbiAgICBnZXRDaGFydE9wdGlvbnMoKSB7XG4gICAgICByZXR1cm4gW3tcbiAgICAgICAgb25Ib3ZlcjogKGV2ZW50LCBhY3RpdmUpID0+IHtcbiAgICAgICAgICBpZiAoIXRoaXMuY2hhcnRIb3Zlci5vYnNlcnZlZCAmJiAhdGhpcy5jaGFydEhvdmVyLm9ic2VydmVycz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuem9uZS5ydW4oKCkgPT4gdGhpcy5jaGFydEhvdmVyLmVtaXQoe1xuICAgICAgICAgICAgZXZlbnQsXG4gICAgICAgICAgICBhY3RpdmVcbiAgICAgICAgICB9KSk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uQ2xpY2s6IChldmVudCwgYWN0aXZlKSA9PiB7XG4gICAgICAgICAgaWYgKCF0aGlzLmNoYXJ0Q2xpY2sub2JzZXJ2ZWQgJiYgIXRoaXMuY2hhcnRDbGljay5vYnNlcnZlcnM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnpvbmUucnVuKCgpID0+IHRoaXMuY2hhcnRDbGljay5lbWl0KHtcbiAgICAgICAgICAgIGV2ZW50LFxuICAgICAgICAgICAgYWN0aXZlXG4gICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICB9LCB0aGlzLnRoZW1lT3ZlcnJpZGVzID8/IHt9LCB0aGlzLm9wdGlvbnMgPz8ge30sIHtcbiAgICAgICAgcGx1Z2luczoge1xuICAgICAgICAgIGxlZ2VuZDoge1xuICAgICAgICAgICAgZGlzcGxheTogdGhpcy5sZWdlbmRcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1dLnJlZHVjZShtZXJnZSwge30pO1xuICAgIH1cbiAgICBnZXRDaGFydENvbmZpZ3VyYXRpb24oKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiB0aGlzLnR5cGUsXG4gICAgICAgIGRhdGE6IHRoaXMuZ2V0Q2hhcnREYXRhKCksXG4gICAgICAgIG9wdGlvbnM6IHRoaXMuZ2V0Q2hhcnRPcHRpb25zKCksXG4gICAgICAgIHBsdWdpbnM6IHRoaXMucGx1Z2luc1xuICAgICAgfTtcbiAgICB9XG4gICAgZ2V0Q2hhcnREYXRhKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGF0YSA/IHRoaXMuZGF0YSA6IHtcbiAgICAgICAgbGFiZWxzOiB0aGlzLmxhYmVscyB8fCBbXSxcbiAgICAgICAgZGF0YXNldHM6IHRoaXMuZGF0YXNldHMgfHwgW11cbiAgICAgIH07XG4gICAgfVxuICAgIHN0YXRpYyB7XG4gICAgICB0aGlzLsm1ZmFjID0gZnVuY3Rpb24gQmFzZUNoYXJ0RGlyZWN0aXZlX0ZhY3RvcnkoX19uZ0ZhY3RvcnlUeXBlX18pIHtcbiAgICAgICAgcmV0dXJuIG5ldyAoX19uZ0ZhY3RvcnlUeXBlX18gfHwgQmFzZUNoYXJ0RGlyZWN0aXZlKSgpO1xuICAgICAgfTtcbiAgICB9XG4gICAgc3RhdGljIHtcbiAgICAgIHRoaXMuybVkaXIgPSAvKiBAX19QVVJFX18gKi9pMC7Jtcm1ZGVmaW5lRGlyZWN0aXZlKHtcbiAgICAgICAgdHlwZTogQmFzZUNoYXJ0RGlyZWN0aXZlLFxuICAgICAgICBzZWxlY3RvcnM6IFtbXCJjYW52YXNcIiwgXCJiYXNlQ2hhcnRcIiwgXCJcIl1dLFxuICAgICAgICBpbnB1dHM6IHtcbiAgICAgICAgICB0eXBlOiBcInR5cGVcIixcbiAgICAgICAgICBsZWdlbmQ6IFwibGVnZW5kXCIsXG4gICAgICAgICAgZGF0YTogXCJkYXRhXCIsXG4gICAgICAgICAgb3B0aW9uczogXCJvcHRpb25zXCIsXG4gICAgICAgICAgcGx1Z2luczogXCJwbHVnaW5zXCIsXG4gICAgICAgICAgbGFiZWxzOiBcImxhYmVsc1wiLFxuICAgICAgICAgIGRhdGFzZXRzOiBcImRhdGFzZXRzXCJcbiAgICAgICAgfSxcbiAgICAgICAgb3V0cHV0czoge1xuICAgICAgICAgIGNoYXJ0Q2xpY2s6IFwiY2hhcnRDbGlja1wiLFxuICAgICAgICAgIGNoYXJ0SG92ZXI6IFwiY2hhcnRIb3ZlclwiXG4gICAgICAgIH0sXG4gICAgICAgIGV4cG9ydEFzOiBbXCJiYXNlLWNoYXJ0XCJdLFxuICAgICAgICBmZWF0dXJlczogW2kwLsm1ybVOZ09uQ2hhbmdlc0ZlYXR1cmVdXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIEJhc2VDaGFydERpcmVjdGl2ZTtcbn0pKCk7XG4oKCkgPT4ge1xuICAodHlwZW9mIG5nRGV2TW9kZSA9PT0gXCJ1bmRlZmluZWRcIiB8fCBuZ0Rldk1vZGUpICYmIHZvaWQgMDtcbn0pKCk7XG5cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtZnVuY3Rpb24tdHlwZSAqL1xuXG4vKlxuICogUHVibGljIEFQSSBTdXJmYWNlIG9mIG5nMi1jaGFydHNcbiAqL1xuXG4vKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCB7IEJhc2VDaGFydERpcmVjdGl2ZSwgTkdfQ0hBUlRTX0NPTkZJR1VSQVRJT04sIFRoZW1lU2VydmljZSwgcHJvdmlkZUNoYXJ0cywgd2l0aERlZmF1bHRSZWdpc3RlcmFibGVzIH07XG4iXSwibWFwcGluZ3MiOiI7b1RBTUEsUUFBUyxDQUFBQSxHQUFNQyxDQUFBLENBQUcsQ0FBQUMsY0FBQSxHQUFBQyxDQUFBLEtBQUFELENBQUEsaUJBQUFFLENBQUEsTUFDaEIsTUFBTyxDQUFBSCxDQUFBLENBQUksR0FBTSxDQUNuQixFQUNBQyxjQUFBLEdBQUFFLENBQUEsU0FBTSxDQUFBQyxFQUFBLENBQU1DLENBQUNMLENBQUEsQ0FBR00sQ0FBQSxDQUFHQyxDQUFBLEdBQU0sQ0FBQU4sY0FBQSxHQUFBQyxDQUFBLEtBQUFELENBQUEsaUJBQUFF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Q0FBRyxJQUNMLEdBQ01DLEVBQUEsRUFBQWpGLGNBQUEsR0FBQUUsQ0FBQSxPQUFVLENBQ2RnRixNQUFBLENBQVEsU0FDUkMsV0FBQSxDQUFhLFNBQ2JDLElBQUEsQ0FBTSxPQUNOQyxTQUFBLENBQVcsU0FDWEMsSUFBQSxDQUFNLFNBQ05DLEtBQUEsQ0FBTyxTQUNQQyxNQUFBLENBQVEsU0FDUkMsS0FBQSxDQUFPLElBQ1BDLFlBQUEsQ0FBYyxTQUNkQyxFQUFBLENBQUksS0FDSkMsT0FBQSxDQUFTLFNBQ1RDLElBQUEsQ0FBTSxTQUNOQyxTQUFBLENBQVcsU0FDWEMsTUFBQSxDQUFRLFNBQ1JDLFFBQUEsQ0FBVSxTQUNWQyxPQUFBLENBQVMsU0FDVEMsR0FBQSxDQUFLLFNBQ0xDLFdBQUEsQ0FBYSxTQUNiQyxPQUFBLENBQVMsU0FDVEMsT0FBQSxDQUFTLFNBQ1RDLElBQUEsQ0FBTSxPQUNOQyxHQUFBLENBQUssS0FDTEMsS0FBQSxDQUFPLE9BQ1BDLE9BQUEsQ0FBUyxTQUNUQyxJQUFBLENBQU0sU0FDTkMsSUFBQSxDQUFNLE9BQ05DLElBQUEsQ0FBTSxTQUNOQyxNQUFBLENBQVEsU0FDUkMsT0FBQSxDQUFTLFNBQ1RDLFFBQUEsQ0FBVSxTQUNWQyxNQUFBLENBQVEsU0FDUkMsS0FBQSxDQUFPLFNBQ1BDLEdBQUEsQ0FBSyxTQUNMQyxNQUFBLENBQVEsU0FDUkMsTUFBQSxDQUFRLFNBQ1JDLElBQUEsQ0FBTSxTQUNOQyxLQUFBLENBQU8sU0FDUEMsS0FBQSxDQUFPLFNBQ1BDLEdBQUEsQ0FBSyxPQUNMQyxNQUFBLENBQVEsU0FDUkMsTUFBQSxDQUFRLFNBQ1JDLFFBQUEsQ0FBVSxPQUNWQyxNQUFBLENBQVEsU0FDUkMsTUFBQSxDQUFRLFNBQ1JDLFFBQUEsQ0FBVSxTQUNWQyxRQUFBLENBQVUsU0FDVkMsUUFBQSxDQUFVLFNBQ1ZDLFFBQUEsQ0FBVSxTQUNWQyxNQUFBLENBQVEsU0FDUkMsT0FBQSxDQUFTLFNBQ1RDLFNBQUEsQ0FBVyxTQUNYQyxHQUFBLENBQUssU0FDTEMsTUFBQSxDQUFRLFNBQ1JDLEdBQUEsQ0FBSyxTQUNMQyxHQUFBLENBQUssT0FDTEMsS0FBQSxDQUFPLFNBQ1BDLEdBQUEsQ0FBSyxTQUNMQyxPQUFBLENBQVMsU0FDVEMsTUFBQSxDQUFRLFNBQ1JDLE9BQUEsQ0FBUyxTQUNUQyxLQUFBLENBQU8sU0FDUEMsSUFBQSxDQUFNLFNBQ05DLEtBQUEsQ0FBTyxTQUNQQyxNQUFBLENBQVEsU0FDUkMsU0FBQSxDQUFXLFNBQ1hDLE9BQUEsQ0FBUyxTQUNUQyxVQUFBLENBQVksU0FDWkMsR0FBQSxDQUFLLFNBQ0xDLElBQUEsQ0FBTSxTQUNOQyxLQUFBLENBQU8sU0FDUEMsU0FBQSxDQUFXLFNBQ1hDLElBQUEsQ0FBTSxTQUNOQyxJQUFBLENBQU0sU0FDTkMsSUFBQSxDQUFNLFNBQ05DLElBQUEsQ0FBTSxTQUNOQyxNQUFBLENBQVEsU0FDUkMsTUFBQSxDQUFRLFNBQ1JDLE1BQUEsQ0FBUSxTQUNSQyxLQUFBLENBQU8sU0FDUEMsS0FBQSxDQUFPLFNBQ1BDLE9BQUEsQ0FBUyxTQUNUQyxHQUFBLENBQUssU0FDTEMsSUFBQSxDQUFNLE9BQ05DLE9BQUEsQ0FBUyxTQUNUQyxHQUFBLENBQUssU0FDTEMsTUFBQSxDQUFRLFNBQ1JDLEtBQUEsQ0FBTyxTQUNQQyxVQUFBLENBQVksU0FDWkMsR0FBQSxDQUFLLEtBQ0xDLEtBQUEsQ0FBTyxTQUNQQyxNQUFBLENBQVEsU0FDUkMsTUFBQSxDQUFRLFNBQ1JDLElBQUEsQ0FBTSxTQUNOQyxTQUFBLENBQVcsT0FDWEMsR0FBQSxDQUFLLFNBQ0xDLFFBQUEsQ0FBVSxTQUNWQyxVQUFBLENBQVksU0FDWkMsT0FBQSxDQUFTLFNBQ1RDLFFBQUEsQ0FBVSxTQUNWQyxPQUFBLENBQVMsU0FDVEMsVUFBQSxDQUFZLFNBQ1pDLElBQUEsQ0FBTSxLQUNOQyxNQUFBLENBQVEsU0FDUkMsSUFBQSxDQUFNLFNBQ05DLE9BQUEsQ0FBUyxTQUNUQyxLQUFBLENBQU8sU0FDUEMsT0FBQSxDQUFTLFNBQ1RDLElBQUEsQ0FBTSxTQUNOQyxTQUFBLENBQVcsU0FDWEMs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 \ No newline at end of file diff --git a/frontend/dist-instrumented/chunk-UE5BCHDC.js.map b/frontend/dist-instrumented/chunk-UE5BCHDC.js.map new file mode 100644 index 00000000..480304ee --- /dev/null +++ b/frontend/dist-instrumented/chunk-UE5BCHDC.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["node_modules/@kurkle/color/dist/color.esm.js","node_modules/chart.js/dist/chunks/helpers.dataset.js","node_modules/chart.js/dist/chart.js","node_modules/es-toolkit/dist/predicate/isPlainObject.mjs","node_modules/es-toolkit/dist/_internal/isUnsafeProperty.mjs","node_modules/es-toolkit/dist/object/merge.mjs","node_modules/ng2-charts/fesm2022/ng2-charts.mjs"],"sourcesContent":["/*!\n * @kurkle/color v0.3.4\n * https://github.com/kurkle/color#readme\n * (c) 2024 Jukka Kurkela\n * Released under the MIT License\n */\nfunction round(v) {\n return v + 0.5 | 0;\n}\nconst lim = (v, l, h) => Math.max(Math.min(v, h), l);\nfunction p2b(v) {\n return lim(round(v * 2.55), 0, 255);\n}\nfunction b2p(v) {\n return lim(round(v / 2.55), 0, 100);\n}\nfunction n2b(v) {\n return lim(round(v * 255), 0, 255);\n}\nfunction b2n(v) {\n return lim(round(v / 2.55) / 100, 0, 1);\n}\nfunction n2p(v) {\n return lim(round(v * 100), 0, 100);\n}\nconst map$1 = {\n 0: 0,\n 1: 1,\n 2: 2,\n 3: 3,\n 4: 4,\n 5: 5,\n 6: 6,\n 7: 7,\n 8: 8,\n 9: 9,\n A: 10,\n B: 11,\n C: 12,\n D: 13,\n E: 14,\n F: 15,\n a: 10,\n b: 11,\n c: 12,\n d: 13,\n e: 14,\n f: 15\n};\nconst hex = [...'0123456789ABCDEF'];\nconst h1 = b => hex[b & 0xF];\nconst h2 = b => hex[(b & 0xF0) >> 4] + hex[b & 0xF];\nconst eq = b => (b & 0xF0) >> 4 === (b & 0xF);\nconst isShort = v => eq(v.r) && eq(v.g) && eq(v.b) && eq(v.a);\nfunction hexParse(str) {\n var len = str.length;\n var ret;\n if (str[0] === '#') {\n if (len === 4 || len === 5) {\n ret = {\n r: 255 & map$1[str[1]] * 17,\n g: 255 & map$1[str[2]] * 17,\n b: 255 & map$1[str[3]] * 17,\n a: len === 5 ? map$1[str[4]] * 17 : 255\n };\n } else if (len === 7 || len === 9) {\n ret = {\n r: map$1[str[1]] << 4 | map$1[str[2]],\n g: map$1[str[3]] << 4 | map$1[str[4]],\n b: map$1[str[5]] << 4 | map$1[str[6]],\n a: len === 9 ? map$1[str[7]] << 4 | map$1[str[8]] : 255\n };\n }\n }\n return ret;\n}\nconst alpha = (a, f) => a < 255 ? f(a) : '';\nfunction hexString(v) {\n var f = isShort(v) ? h1 : h2;\n return v ? '#' + f(v.r) + f(v.g) + f(v.b) + alpha(v.a, f) : undefined;\n}\nconst HUE_RE = /^(hsla?|hwb|hsv)\\(\\s*([-+.e\\d]+)(?:deg)?[\\s,]+([-+.e\\d]+)%[\\s,]+([-+.e\\d]+)%(?:[\\s,]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\nfunction hsl2rgbn(h, s, l) {\n const a = s * Math.min(l, 1 - l);\n const f = (n, k = (n + h / 30) % 12) => l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1);\n return [f(0), f(8), f(4)];\n}\nfunction hsv2rgbn(h, s, v) {\n const f = (n, k = (n + h / 60) % 6) => v - v * s * Math.max(Math.min(k, 4 - k, 1), 0);\n return [f(5), f(3), f(1)];\n}\nfunction hwb2rgbn(h, w, b) {\n const rgb = hsl2rgbn(h, 1, 0.5);\n let i;\n if (w + b > 1) {\n i = 1 / (w + b);\n w *= i;\n b *= i;\n }\n for (i = 0; i < 3; i++) {\n rgb[i] *= 1 - w - b;\n rgb[i] += w;\n }\n return rgb;\n}\nfunction hueValue(r, g, b, d, max) {\n if (r === max) {\n return (g - b) / d + (g < b ? 6 : 0);\n }\n if (g === max) {\n return (b - r) / d + 2;\n }\n return (r - g) / d + 4;\n}\nfunction rgb2hsl(v) {\n const range = 255;\n const r = v.r / range;\n const g = v.g / range;\n const b = v.b / range;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const l = (max + min) / 2;\n let h, s, d;\n if (max !== min) {\n d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n h = hueValue(r, g, b, d, max);\n h = h * 60 + 0.5;\n }\n return [h | 0, s || 0, l];\n}\nfunction calln(f, a, b, c) {\n return (Array.isArray(a) ? f(a[0], a[1], a[2]) : f(a, b, c)).map(n2b);\n}\nfunction hsl2rgb(h, s, l) {\n return calln(hsl2rgbn, h, s, l);\n}\nfunction hwb2rgb(h, w, b) {\n return calln(hwb2rgbn, h, w, b);\n}\nfunction hsv2rgb(h, s, v) {\n return calln(hsv2rgbn, h, s, v);\n}\nfunction hue(h) {\n return (h % 360 + 360) % 360;\n}\nfunction hueParse(str) {\n const m = HUE_RE.exec(str);\n let a = 255;\n let v;\n if (!m) {\n return;\n }\n if (m[5] !== v) {\n a = m[6] ? p2b(+m[5]) : n2b(+m[5]);\n }\n const h = hue(+m[2]);\n const p1 = +m[3] / 100;\n const p2 = +m[4] / 100;\n if (m[1] === 'hwb') {\n v = hwb2rgb(h, p1, p2);\n } else if (m[1] === 'hsv') {\n v = hsv2rgb(h, p1, p2);\n } else {\n v = hsl2rgb(h, p1, p2);\n }\n return {\n r: v[0],\n g: v[1],\n b: v[2],\n a: a\n };\n}\nfunction rotate(v, deg) {\n var h = rgb2hsl(v);\n h[0] = hue(h[0] + deg);\n h = hsl2rgb(h);\n v.r = h[0];\n v.g = h[1];\n v.b = h[2];\n}\nfunction hslString(v) {\n if (!v) {\n return;\n }\n const a = rgb2hsl(v);\n const h = a[0];\n const s = n2p(a[1]);\n const l = n2p(a[2]);\n return v.a < 255 ? `hsla(${h}, ${s}%, ${l}%, ${b2n(v.a)})` : `hsl(${h}, ${s}%, ${l}%)`;\n}\nconst map = {\n x: 'dark',\n Z: 'light',\n Y: 're',\n X: 'blu',\n W: 'gr',\n V: 'medium',\n U: 'slate',\n A: 'ee',\n T: 'ol',\n S: 'or',\n B: 'ra',\n C: 'lateg',\n D: 'ights',\n R: 'in',\n Q: 'turquois',\n E: 'hi',\n P: 'ro',\n O: 'al',\n N: 'le',\n M: 'de',\n L: 'yello',\n F: 'en',\n K: 'ch',\n G: 'arks',\n H: 'ea',\n I: 'ightg',\n J: 'wh'\n};\nconst names$1 = {\n OiceXe: 'f0f8ff',\n antiquewEte: 'faebd7',\n aqua: 'ffff',\n aquamarRe: '7fffd4',\n azuY: 'f0ffff',\n beige: 'f5f5dc',\n bisque: 'ffe4c4',\n black: '0',\n blanKedOmond: 'ffebcd',\n Xe: 'ff',\n XeviTet: '8a2be2',\n bPwn: 'a52a2a',\n burlywood: 'deb887',\n caMtXe: '5f9ea0',\n KartYuse: '7fff00',\n KocTate: 'd2691e',\n cSO: 'ff7f50',\n cSnflowerXe: '6495ed',\n cSnsilk: 'fff8dc',\n crimson: 'dc143c',\n cyan: 'ffff',\n xXe: '8b',\n xcyan: '8b8b',\n xgTMnPd: 'b8860b',\n xWay: 'a9a9a9',\n xgYF: '6400',\n xgYy: 'a9a9a9',\n xkhaki: 'bdb76b',\n xmagFta: '8b008b',\n xTivegYF: '556b2f',\n xSange: 'ff8c00',\n xScEd: '9932cc',\n xYd: '8b0000',\n xsOmon: 'e9967a',\n xsHgYF: '8fbc8f',\n xUXe: '483d8b',\n xUWay: '2f4f4f',\n xUgYy: '2f4f4f',\n xQe: 'ced1',\n xviTet: '9400d3',\n dAppRk: 'ff1493',\n dApskyXe: 'bfff',\n dimWay: '696969',\n dimgYy: '696969',\n dodgerXe: '1e90ff',\n fiYbrick: 'b22222',\n flSOwEte: 'fffaf0',\n foYstWAn: '228b22',\n fuKsia: 'ff00ff',\n gaRsbSo: 'dcdcdc',\n ghostwEte: 'f8f8ff',\n gTd: 'ffd700',\n gTMnPd: 'daa520',\n Way: '808080',\n gYF: '8000',\n gYFLw: 'adff2f',\n gYy: '808080',\n honeyMw: 'f0fff0',\n hotpRk: 'ff69b4',\n RdianYd: 'cd5c5c',\n Rdigo: '4b0082',\n ivSy: 'fffff0',\n khaki: 'f0e68c',\n lavFMr: 'e6e6fa',\n lavFMrXsh: 'fff0f5',\n lawngYF: '7cfc00',\n NmoncEffon: 'fffacd',\n ZXe: 'add8e6',\n ZcSO: 'f08080',\n Zcyan: 'e0ffff',\n ZgTMnPdLw: 'fafad2',\n ZWay: 'd3d3d3',\n ZgYF: '90ee90',\n ZgYy: 'd3d3d3',\n ZpRk: 'ffb6c1',\n ZsOmon: 'ffa07a',\n ZsHgYF: '20b2aa',\n ZskyXe: '87cefa',\n ZUWay: '778899',\n ZUgYy: '778899',\n ZstAlXe: 'b0c4de',\n ZLw: 'ffffe0',\n lime: 'ff00',\n limegYF: '32cd32',\n lRF: 'faf0e6',\n magFta: 'ff00ff',\n maPon: '800000',\n VaquamarRe: '66cdaa',\n VXe: 'cd',\n VScEd: 'ba55d3',\n VpurpN: '9370db',\n VsHgYF: '3cb371',\n VUXe: '7b68ee',\n VsprRggYF: 'fa9a',\n VQe: '48d1cc',\n VviTetYd: 'c71585',\n midnightXe: '191970',\n mRtcYam: 'f5fffa',\n mistyPse: 'ffe4e1',\n moccasR: 'ffe4b5',\n navajowEte: 'ffdead',\n navy: '80',\n Tdlace: 'fdf5e6',\n Tive: '808000',\n TivedBb: '6b8e23',\n Sange: 'ffa500',\n SangeYd: 'ff4500',\n ScEd: 'da70d6',\n pOegTMnPd: 'eee8aa',\n pOegYF: '98fb98',\n pOeQe: 'afeeee',\n pOeviTetYd: 'db7093',\n papayawEp: 'ffefd5',\n pHKpuff: 'ffdab9',\n peru: 'cd853f',\n pRk: 'ffc0cb',\n plum: 'dda0dd',\n powMrXe: 'b0e0e6',\n purpN: '800080',\n YbeccapurpN: '663399',\n Yd: 'ff0000',\n Psybrown: 'bc8f8f',\n PyOXe: '4169e1',\n saddNbPwn: '8b4513',\n sOmon: 'fa8072',\n sandybPwn: 'f4a460',\n sHgYF: '2e8b57',\n sHshell: 'fff5ee',\n siFna: 'a0522d',\n silver: 'c0c0c0',\n skyXe: '87ceeb',\n UXe: '6a5acd',\n UWay: '708090',\n UgYy: '708090',\n snow: 'fffafa',\n sprRggYF: 'ff7f',\n stAlXe: '4682b4',\n tan: 'd2b48c',\n teO: '8080',\n tEstN: 'd8bfd8',\n tomato: 'ff6347',\n Qe: '40e0d0',\n viTet: 'ee82ee',\n JHt: 'f5deb3',\n wEte: 'ffffff',\n wEtesmoke: 'f5f5f5',\n Lw: 'ffff00',\n LwgYF: '9acd32'\n};\nfunction unpack() {\n const unpacked = {};\n const keys = Object.keys(names$1);\n const tkeys = Object.keys(map);\n let i, j, k, ok, nk;\n for (i = 0; i < keys.length; i++) {\n ok = nk = keys[i];\n for (j = 0; j < tkeys.length; j++) {\n k = tkeys[j];\n nk = nk.replace(k, map[k]);\n }\n k = parseInt(names$1[ok], 16);\n unpacked[nk] = [k >> 16 & 0xFF, k >> 8 & 0xFF, k & 0xFF];\n }\n return unpacked;\n}\nlet names;\nfunction nameParse(str) {\n if (!names) {\n names = unpack();\n names.transparent = [0, 0, 0, 0];\n }\n const a = names[str.toLowerCase()];\n return a && {\n r: a[0],\n g: a[1],\n b: a[2],\n a: a.length === 4 ? a[3] : 255\n };\n}\nconst RGB_RE = /^rgba?\\(\\s*([-+.\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?(?:[\\s,/]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\nfunction rgbParse(str) {\n const m = RGB_RE.exec(str);\n let a = 255;\n let r, g, b;\n if (!m) {\n return;\n }\n if (m[7] !== r) {\n const v = +m[7];\n a = m[8] ? p2b(v) : lim(v * 255, 0, 255);\n }\n r = +m[1];\n g = +m[3];\n b = +m[5];\n r = 255 & (m[2] ? p2b(r) : lim(r, 0, 255));\n g = 255 & (m[4] ? p2b(g) : lim(g, 0, 255));\n b = 255 & (m[6] ? p2b(b) : lim(b, 0, 255));\n return {\n r: r,\n g: g,\n b: b,\n a: a\n };\n}\nfunction rgbString(v) {\n return v && (v.a < 255 ? `rgba(${v.r}, ${v.g}, ${v.b}, ${b2n(v.a)})` : `rgb(${v.r}, ${v.g}, ${v.b})`);\n}\nconst to = v => v <= 0.0031308 ? v * 12.92 : Math.pow(v, 1.0 / 2.4) * 1.055 - 0.055;\nconst from = v => v <= 0.04045 ? v / 12.92 : Math.pow((v + 0.055) / 1.055, 2.4);\nfunction interpolate(rgb1, rgb2, t) {\n const r = from(b2n(rgb1.r));\n const g = from(b2n(rgb1.g));\n const b = from(b2n(rgb1.b));\n return {\n r: n2b(to(r + t * (from(b2n(rgb2.r)) - r))),\n g: n2b(to(g + t * (from(b2n(rgb2.g)) - g))),\n b: n2b(to(b + t * (from(b2n(rgb2.b)) - b))),\n a: rgb1.a + t * (rgb2.a - rgb1.a)\n };\n}\nfunction modHSL(v, i, ratio) {\n if (v) {\n let tmp = rgb2hsl(v);\n tmp[i] = Math.max(0, Math.min(tmp[i] + tmp[i] * ratio, i === 0 ? 360 : 1));\n tmp = hsl2rgb(tmp);\n v.r = tmp[0];\n v.g = tmp[1];\n v.b = tmp[2];\n }\n}\nfunction clone(v, proto) {\n return v ? Object.assign(proto || {}, v) : v;\n}\nfunction fromObject(input) {\n var v = {\n r: 0,\n g: 0,\n b: 0,\n a: 255\n };\n if (Array.isArray(input)) {\n if (input.length >= 3) {\n v = {\n r: input[0],\n g: input[1],\n b: input[2],\n a: 255\n };\n if (input.length > 3) {\n v.a = n2b(input[3]);\n }\n }\n } else {\n v = clone(input, {\n r: 0,\n g: 0,\n b: 0,\n a: 1\n });\n v.a = n2b(v.a);\n }\n return v;\n}\nfunction functionParse(str) {\n if (str.charAt(0) === 'r') {\n return rgbParse(str);\n }\n return hueParse(str);\n}\nclass Color {\n constructor(input) {\n if (input instanceof Color) {\n return input;\n }\n const type = typeof input;\n let v;\n if (type === 'object') {\n v = fromObject(input);\n } else if (type === 'string') {\n v = hexParse(input) || nameParse(input) || functionParse(input);\n }\n this._rgb = v;\n this._valid = !!v;\n }\n get valid() {\n return this._valid;\n }\n get rgb() {\n var v = clone(this._rgb);\n if (v) {\n v.a = b2n(v.a);\n }\n return v;\n }\n set rgb(obj) {\n this._rgb = fromObject(obj);\n }\n rgbString() {\n return this._valid ? rgbString(this._rgb) : undefined;\n }\n hexString() {\n return this._valid ? hexString(this._rgb) : undefined;\n }\n hslString() {\n return this._valid ? hslString(this._rgb) : undefined;\n }\n mix(color, weight) {\n if (color) {\n const c1 = this.rgb;\n const c2 = color.rgb;\n let w2;\n const p = weight === w2 ? 0.5 : weight;\n const w = 2 * p - 1;\n const a = c1.a - c2.a;\n const w1 = ((w * a === -1 ? w : (w + a) / (1 + w * a)) + 1) / 2.0;\n w2 = 1 - w1;\n c1.r = 0xFF & w1 * c1.r + w2 * c2.r + 0.5;\n c1.g = 0xFF & w1 * c1.g + w2 * c2.g + 0.5;\n c1.b = 0xFF & w1 * c1.b + w2 * c2.b + 0.5;\n c1.a = p * c1.a + (1 - p) * c2.a;\n this.rgb = c1;\n }\n return this;\n }\n interpolate(color, t) {\n if (color) {\n this._rgb = interpolate(this._rgb, color._rgb, t);\n }\n return this;\n }\n clone() {\n return new Color(this.rgb);\n }\n alpha(a) {\n this._rgb.a = n2b(a);\n return this;\n }\n clearer(ratio) {\n const rgb = this._rgb;\n rgb.a *= 1 - ratio;\n return this;\n }\n greyscale() {\n const rgb = this._rgb;\n const val = round(rgb.r * 0.3 + rgb.g * 0.59 + rgb.b * 0.11);\n rgb.r = rgb.g = rgb.b = val;\n return this;\n }\n opaquer(ratio) {\n const rgb = this._rgb;\n rgb.a *= 1 + ratio;\n return this;\n }\n negate() {\n const v = this._rgb;\n v.r = 255 - v.r;\n v.g = 255 - v.g;\n v.b = 255 - v.b;\n return this;\n }\n lighten(ratio) {\n modHSL(this._rgb, 2, ratio);\n return this;\n }\n darken(ratio) {\n modHSL(this._rgb, 2, -ratio);\n return this;\n }\n saturate(ratio) {\n modHSL(this._rgb, 1, ratio);\n return this;\n }\n desaturate(ratio) {\n modHSL(this._rgb, 1, -ratio);\n return this;\n }\n rotate(deg) {\n rotate(this._rgb, deg);\n return this;\n }\n}\nfunction index_esm(input) {\n return new Color(input);\n}\nexport { Color, b2n, b2p, index_esm as default, hexParse, hexString, hsl2rgb, hslString, hsv2rgb, hueParse, hwb2rgb, lim, n2b, n2p, nameParse, p2b, rgb2hsl, rgbParse, rgbString, rotate, round };","/*!\n * Chart.js v4.5.1\n * https://www.chartjs.org\n * (c) 2025 Chart.js Contributors\n * Released under the MIT License\n */\nimport { Color } from '@kurkle/color';\n\n/**\n * @namespace Chart.helpers\n */ /**\n * An empty function that can be used, for example, for optional callback.\n */\nfunction noop() {\n /* noop */}\n/**\n * Returns a unique id, sequentially generated from a global variable.\n */\nconst uid = (() => {\n let id = 0;\n return () => id++;\n})();\n/**\n * Returns true if `value` is neither null nor undefined, else returns false.\n * @param value - The value to test.\n * @since 2.7.0\n */\nfunction isNullOrUndef(value) {\n return value === null || value === undefined;\n}\n/**\n * Returns true if `value` is an array (including typed arrays), else returns false.\n * @param value - The value to test.\n * @function\n */\nfunction isArray(value) {\n if (Array.isArray && Array.isArray(value)) {\n return true;\n }\n const type = Object.prototype.toString.call(value);\n if (type.slice(0, 7) === '[object' && type.slice(-6) === 'Array]') {\n return true;\n }\n return false;\n}\n/**\n * Returns true if `value` is an object (excluding null), else returns false.\n * @param value - The value to test.\n * @since 2.7.0\n */\nfunction isObject(value) {\n return value !== null && Object.prototype.toString.call(value) === '[object Object]';\n}\n/**\n * Returns true if `value` is a finite number, else returns false\n * @param value - The value to test.\n */\nfunction isNumberFinite(value) {\n return (typeof value === 'number' || value instanceof Number) && isFinite(+value);\n}\n/**\n * Returns `value` if finite, else returns `defaultValue`.\n * @param value - The value to return if defined.\n * @param defaultValue - The value to return if `value` is not finite.\n */\nfunction finiteOrDefault(value, defaultValue) {\n return isNumberFinite(value) ? value : defaultValue;\n}\n/**\n * Returns `value` if defined, else returns `defaultValue`.\n * @param value - The value to return if defined.\n * @param defaultValue - The value to return if `value` is undefined.\n */\nfunction valueOrDefault(value, defaultValue) {\n return typeof value === 'undefined' ? defaultValue : value;\n}\nconst toPercentage = (value, dimension) => typeof value === 'string' && value.endsWith('%') ? parseFloat(value) / 100 : +value / dimension;\nconst toDimension = (value, dimension) => typeof value === 'string' && value.endsWith('%') ? parseFloat(value) / 100 * dimension : +value;\n/**\n * Calls `fn` with the given `args` in the scope defined by `thisArg` and returns the\n * value returned by `fn`. If `fn` is not a function, this method returns undefined.\n * @param fn - The function to call.\n * @param args - The arguments with which `fn` should be called.\n * @param [thisArg] - The value of `this` provided for the call to `fn`.\n */\nfunction callback(fn, args, thisArg) {\n if (fn && typeof fn.call === 'function') {\n return fn.apply(thisArg, args);\n }\n}\nfunction each(loopable, fn, thisArg, reverse) {\n let i, len, keys;\n if (isArray(loopable)) {\n len = loopable.length;\n if (reverse) {\n for (i = len - 1; i >= 0; i--) {\n fn.call(thisArg, loopable[i], i);\n }\n } else {\n for (i = 0; i < len; i++) {\n fn.call(thisArg, loopable[i], i);\n }\n }\n } else if (isObject(loopable)) {\n keys = Object.keys(loopable);\n len = keys.length;\n for (i = 0; i < len; i++) {\n fn.call(thisArg, loopable[keys[i]], keys[i]);\n }\n }\n}\n/**\n * Returns true if the `a0` and `a1` arrays have the same content, else returns false.\n * @param a0 - The array to compare\n * @param a1 - The array to compare\n * @private\n */\nfunction _elementsEqual(a0, a1) {\n let i, ilen, v0, v1;\n if (!a0 || !a1 || a0.length !== a1.length) {\n return false;\n }\n for (i = 0, ilen = a0.length; i < ilen; ++i) {\n v0 = a0[i];\n v1 = a1[i];\n if (v0.datasetIndex !== v1.datasetIndex || v0.index !== v1.index) {\n return false;\n }\n }\n return true;\n}\n/**\n * Returns a deep copy of `source` without keeping references on objects and arrays.\n * @param source - The value to clone.\n */\nfunction clone(source) {\n if (isArray(source)) {\n return source.map(clone);\n }\n if (isObject(source)) {\n const target = Object.create(null);\n const keys = Object.keys(source);\n const klen = keys.length;\n let k = 0;\n for (; k < klen; ++k) {\n target[keys[k]] = clone(source[keys[k]]);\n }\n return target;\n }\n return source;\n}\nfunction isValidKey(key) {\n return ['__proto__', 'prototype', 'constructor'].indexOf(key) === -1;\n}\n/**\n * The default merger when Chart.helpers.merge is called without merger option.\n * Note(SB): also used by mergeConfig and mergeScaleConfig as fallback.\n * @private\n */\nfunction _merger(key, target, source, options) {\n if (!isValidKey(key)) {\n return;\n }\n const tval = target[key];\n const sval = source[key];\n if (isObject(tval) && isObject(sval)) {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n merge(tval, sval, options);\n } else {\n target[key] = clone(sval);\n }\n}\nfunction merge(target, source, options) {\n const sources = isArray(source) ? source : [source];\n const ilen = sources.length;\n if (!isObject(target)) {\n return target;\n }\n options = options || {};\n const merger = options.merger || _merger;\n let current;\n for (let i = 0; i < ilen; ++i) {\n current = sources[i];\n if (!isObject(current)) {\n continue;\n }\n const keys = Object.keys(current);\n for (let k = 0, klen = keys.length; k < klen; ++k) {\n merger(keys[k], target, current, options);\n }\n }\n return target;\n}\nfunction mergeIf(target, source) {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n return merge(target, source, {\n merger: _mergerIf\n });\n}\n/**\n * Merges source[key] in target[key] only if target[key] is undefined.\n * @private\n */\nfunction _mergerIf(key, target, source) {\n if (!isValidKey(key)) {\n return;\n }\n const tval = target[key];\n const sval = source[key];\n if (isObject(tval) && isObject(sval)) {\n mergeIf(tval, sval);\n } else if (!Object.prototype.hasOwnProperty.call(target, key)) {\n target[key] = clone(sval);\n }\n}\n/**\n * @private\n */\nfunction _deprecated(scope, value, previous, current) {\n if (value !== undefined) {\n console.warn(scope + ': \"' + previous + '\" is deprecated. Please use \"' + current + '\" instead');\n }\n}\n// resolveObjectKey resolver cache\nconst keyResolvers = {\n // Chart.helpers.core resolveObjectKey should resolve empty key to root object\n '': v => v,\n // default resolvers\n x: o => o.x,\n y: o => o.y\n};\n/**\n * @private\n */\nfunction _splitKey(key) {\n const parts = key.split('.');\n const keys = [];\n let tmp = '';\n for (const part of parts) {\n tmp += part;\n if (tmp.endsWith('\\\\')) {\n tmp = tmp.slice(0, -1) + '.';\n } else {\n keys.push(tmp);\n tmp = '';\n }\n }\n return keys;\n}\nfunction _getKeyResolver(key) {\n const keys = _splitKey(key);\n return obj => {\n for (const k of keys) {\n if (k === '') {\n break;\n }\n obj = obj && obj[k];\n }\n return obj;\n };\n}\nfunction resolveObjectKey(obj, key) {\n const resolver = keyResolvers[key] || (keyResolvers[key] = _getKeyResolver(key));\n return resolver(obj);\n}\n/**\n * @private\n */\nfunction _capitalize(str) {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\nconst defined = value => typeof value !== 'undefined';\nconst isFunction = value => typeof value === 'function';\n// Adapted from https://stackoverflow.com/questions/31128855/comparing-ecma6-sets-for-equality#31129384\nconst setsEqual = (a, b) => {\n if (a.size !== b.size) {\n return false;\n }\n for (const item of a) {\n if (!b.has(item)) {\n return false;\n }\n }\n return true;\n};\n/**\n * @param e - The event\n * @private\n */\nfunction _isClickEvent(e) {\n return e.type === 'mouseup' || e.type === 'click' || e.type === 'contextmenu';\n}\n\n/**\n * @alias Chart.helpers.math\n * @namespace\n */\nconst PI = Math.PI;\nconst TAU = 2 * PI;\nconst PITAU = TAU + PI;\nconst INFINITY = Number.POSITIVE_INFINITY;\nconst RAD_PER_DEG = PI / 180;\nconst HALF_PI = PI / 2;\nconst QUARTER_PI = PI / 4;\nconst TWO_THIRDS_PI = PI * 2 / 3;\nconst log10 = Math.log10;\nconst sign = Math.sign;\nfunction almostEquals(x, y, epsilon) {\n return Math.abs(x - y) < epsilon;\n}\n/**\n * Implementation of the nice number algorithm used in determining where axis labels will go\n */\nfunction niceNum(range) {\n const roundedRange = Math.round(range);\n range = almostEquals(range, roundedRange, range / 1000) ? roundedRange : range;\n const niceRange = Math.pow(10, Math.floor(log10(range)));\n const fraction = range / niceRange;\n const niceFraction = fraction <= 1 ? 1 : fraction <= 2 ? 2 : fraction <= 5 ? 5 : 10;\n return niceFraction * niceRange;\n}\n/**\n * Returns an array of factors sorted from 1 to sqrt(value)\n * @private\n */\nfunction _factorize(value) {\n const result = [];\n const sqrt = Math.sqrt(value);\n let i;\n for (i = 1; i < sqrt; i++) {\n if (value % i === 0) {\n result.push(i);\n result.push(value / i);\n }\n }\n if (sqrt === (sqrt | 0)) {\n result.push(sqrt);\n }\n result.sort((a, b) => a - b).pop();\n return result;\n}\n/**\n * Verifies that attempting to coerce n to string or number won't throw a TypeError.\n */\nfunction isNonPrimitive(n) {\n return typeof n === 'symbol' || typeof n === 'object' && n !== null && !(Symbol.toPrimitive in n || 'toString' in n || 'valueOf' in n);\n}\nfunction isNumber(n) {\n return !isNonPrimitive(n) && !isNaN(parseFloat(n)) && isFinite(n);\n}\nfunction almostWhole(x, epsilon) {\n const rounded = Math.round(x);\n return rounded - epsilon <= x && rounded + epsilon >= x;\n}\n/**\n * @private\n */\nfunction _setMinAndMaxByKey(array, target, property) {\n let i, ilen, value;\n for (i = 0, ilen = array.length; i < ilen; i++) {\n value = array[i][property];\n if (!isNaN(value)) {\n target.min = Math.min(target.min, value);\n target.max = Math.max(target.max, value);\n }\n }\n}\nfunction toRadians(degrees) {\n return degrees * (PI / 180);\n}\nfunction toDegrees(radians) {\n return radians * (180 / PI);\n}\n/**\n * Returns the number of decimal places\n * i.e. the number of digits after the decimal point, of the value of this Number.\n * @param x - A number.\n * @returns The number of decimal places.\n * @private\n */\nfunction _decimalPlaces(x) {\n if (!isNumberFinite(x)) {\n return;\n }\n let e = 1;\n let p = 0;\n while (Math.round(x * e) / e !== x) {\n e *= 10;\n p++;\n }\n return p;\n}\n// Gets the angle from vertical upright to the point about a centre.\nfunction getAngleFromPoint(centrePoint, anglePoint) {\n const distanceFromXCenter = anglePoint.x - centrePoint.x;\n const distanceFromYCenter = anglePoint.y - centrePoint.y;\n const radialDistanceFromCenter = Math.sqrt(distanceFromXCenter * distanceFromXCenter + distanceFromYCenter * distanceFromYCenter);\n let angle = Math.atan2(distanceFromYCenter, distanceFromXCenter);\n if (angle < -0.5 * PI) {\n angle += TAU; // make sure the returned angle is in the range of (-PI/2, 3PI/2]\n }\n return {\n angle,\n distance: radialDistanceFromCenter\n };\n}\nfunction distanceBetweenPoints(pt1, pt2) {\n return Math.sqrt(Math.pow(pt2.x - pt1.x, 2) + Math.pow(pt2.y - pt1.y, 2));\n}\n/**\n * Shortest distance between angles, in either direction.\n * @private\n */\nfunction _angleDiff(a, b) {\n return (a - b + PITAU) % TAU - PI;\n}\n/**\n * Normalize angle to be between 0 and 2*PI\n * @private\n */\nfunction _normalizeAngle(a) {\n return (a % TAU + TAU) % TAU;\n}\n/**\n * @private\n */\nfunction _angleBetween(angle, start, end, sameAngleIsFullCircle) {\n const a = _normalizeAngle(angle);\n const s = _normalizeAngle(start);\n const e = _normalizeAngle(end);\n const angleToStart = _normalizeAngle(s - a);\n const angleToEnd = _normalizeAngle(e - a);\n const startToAngle = _normalizeAngle(a - s);\n const endToAngle = _normalizeAngle(a - e);\n return a === s || a === e || sameAngleIsFullCircle && s === e || angleToStart > angleToEnd && startToAngle < endToAngle;\n}\n/**\n * Limit `value` between `min` and `max`\n * @param value\n * @param min\n * @param max\n * @private\n */\nfunction _limitValue(value, min, max) {\n return Math.max(min, Math.min(max, value));\n}\n/**\n * @param {number} value\n * @private\n */\nfunction _int16Range(value) {\n return _limitValue(value, -32768, 32767);\n}\n/**\n * @param value\n * @param start\n * @param end\n * @param [epsilon]\n * @private\n */\nfunction _isBetween(value, start, end, epsilon = 1e-6) {\n return value >= Math.min(start, end) - epsilon && value <= Math.max(start, end) + epsilon;\n}\nfunction _lookup(table, value, cmp) {\n cmp = cmp || (index => table[index] < value);\n let hi = table.length - 1;\n let lo = 0;\n let mid;\n while (hi - lo > 1) {\n mid = lo + hi >> 1;\n if (cmp(mid)) {\n lo = mid;\n } else {\n hi = mid;\n }\n }\n return {\n lo,\n hi\n };\n}\n/**\n * Binary search\n * @param table - the table search. must be sorted!\n * @param key - property name for the value in each entry\n * @param value - value to find\n * @param last - lookup last index\n * @private\n */\nconst _lookupByKey = (table, key, value, last) => _lookup(table, value, last ? index => {\n const ti = table[index][key];\n return ti < value || ti === value && table[index + 1][key] === value;\n} : index => table[index][key] < value);\n/**\n * Reverse binary search\n * @param table - the table search. must be sorted!\n * @param key - property name for the value in each entry\n * @param value - value to find\n * @private\n */\nconst _rlookupByKey = (table, key, value) => _lookup(table, value, index => table[index][key] >= value);\n/**\n * Return subset of `values` between `min` and `max` inclusive.\n * Values are assumed to be in sorted order.\n * @param values - sorted array of values\n * @param min - min value\n * @param max - max value\n */\nfunction _filterBetween(values, min, max) {\n let start = 0;\n let end = values.length;\n while (start < end && values[start] < min) {\n start++;\n }\n while (end > start && values[end - 1] > max) {\n end--;\n }\n return start > 0 || end < values.length ? values.slice(start, end) : values;\n}\nconst arrayEvents = ['push', 'pop', 'shift', 'splice', 'unshift'];\nfunction listenArrayEvents(array, listener) {\n if (array._chartjs) {\n array._chartjs.listeners.push(listener);\n return;\n }\n Object.defineProperty(array, '_chartjs', {\n configurable: true,\n enumerable: false,\n value: {\n listeners: [listener]\n }\n });\n arrayEvents.forEach(key => {\n const method = '_onData' + _capitalize(key);\n const base = array[key];\n Object.defineProperty(array, key, {\n configurable: true,\n enumerable: false,\n value(...args) {\n const res = base.apply(this, args);\n array._chartjs.listeners.forEach(object => {\n if (typeof object[method] === 'function') {\n object[method](...args);\n }\n });\n return res;\n }\n });\n });\n}\nfunction unlistenArrayEvents(array, listener) {\n const stub = array._chartjs;\n if (!stub) {\n return;\n }\n const listeners = stub.listeners;\n const index = listeners.indexOf(listener);\n if (index !== -1) {\n listeners.splice(index, 1);\n }\n if (listeners.length > 0) {\n return;\n }\n arrayEvents.forEach(key => {\n delete array[key];\n });\n delete array._chartjs;\n}\n/**\n * @param items\n */\nfunction _arrayUnique(items) {\n const set = new Set(items);\n if (set.size === items.length) {\n return items;\n }\n return Array.from(set);\n}\nfunction fontString(pixelSize, fontStyle, fontFamily) {\n return fontStyle + ' ' + pixelSize + 'px ' + fontFamily;\n}\n/**\n* Request animation polyfill\n*/\nconst requestAnimFrame = function () {\n if (typeof window === 'undefined') {\n return function (callback) {\n return callback();\n };\n }\n return window.requestAnimationFrame;\n}();\n/**\n * Throttles calling `fn` once per animation frame\n * Latest arguments are used on the actual call\n */\nfunction throttled(fn, thisArg) {\n let argsToUse = [];\n let ticking = false;\n return function (...args) {\n // Save the args for use later\n argsToUse = args;\n if (!ticking) {\n ticking = true;\n requestAnimFrame.call(window, () => {\n ticking = false;\n fn.apply(thisArg, argsToUse);\n });\n }\n };\n}\n/**\n * Debounces calling `fn` for `delay` ms\n */\nfunction debounce(fn, delay) {\n let timeout;\n return function (...args) {\n if (delay) {\n clearTimeout(timeout);\n timeout = setTimeout(fn, delay, args);\n } else {\n fn.apply(this, args);\n }\n return delay;\n };\n}\n/**\n * Converts 'start' to 'left', 'end' to 'right' and others to 'center'\n * @private\n */\nconst _toLeftRightCenter = align => align === 'start' ? 'left' : align === 'end' ? 'right' : 'center';\n/**\n * Returns `start`, `end` or `(start + end) / 2` depending on `align`. Defaults to `center`\n * @private\n */\nconst _alignStartEnd = (align, start, end) => align === 'start' ? start : align === 'end' ? end : (start + end) / 2;\n/**\n * Returns `left`, `right` or `(left + right) / 2` depending on `align`. Defaults to `left`\n * @private\n */\nconst _textX = (align, left, right, rtl) => {\n const check = rtl ? 'left' : 'right';\n return align === check ? right : align === 'center' ? (left + right) / 2 : left;\n};\n/**\n * Return start and count of visible points.\n * @private\n */\nfunction _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled) {\n const pointCount = points.length;\n let start = 0;\n let count = pointCount;\n if (meta._sorted) {\n const {\n iScale,\n vScale,\n _parsed\n } = meta;\n const spanGaps = meta.dataset ? meta.dataset.options ? meta.dataset.options.spanGaps : null : null;\n const axis = iScale.axis;\n const {\n min,\n max,\n minDefined,\n maxDefined\n } = iScale.getUserBounds();\n if (minDefined) {\n start = Math.min(\n // @ts-expect-error Need to type _parsed\n _lookupByKey(_parsed, axis, min).lo,\n // @ts-expect-error Need to fix types on _lookupByKey\n animationsDisabled ? pointCount : _lookupByKey(points, axis, iScale.getPixelForValue(min)).lo);\n if (spanGaps) {\n const distanceToDefinedLo = _parsed.slice(0, start + 1).reverse().findIndex(point => !isNullOrUndef(point[vScale.axis]));\n start -= Math.max(0, distanceToDefinedLo);\n }\n start = _limitValue(start, 0, pointCount - 1);\n }\n if (maxDefined) {\n let end = Math.max(\n // @ts-expect-error Need to type _parsed\n _lookupByKey(_parsed, iScale.axis, max, true).hi + 1,\n // @ts-expect-error Need to fix types on _lookupByKey\n animationsDisabled ? 0 : _lookupByKey(points, axis, iScale.getPixelForValue(max), true).hi + 1);\n if (spanGaps) {\n const distanceToDefinedHi = _parsed.slice(end - 1).findIndex(point => !isNullOrUndef(point[vScale.axis]));\n end += Math.max(0, distanceToDefinedHi);\n }\n count = _limitValue(end, start, pointCount) - start;\n } else {\n count = pointCount - start;\n }\n }\n return {\n start,\n count\n };\n}\n/**\n * Checks if the scale ranges have changed.\n * @param {object} meta - dataset meta.\n * @returns {boolean}\n * @private\n */\nfunction _scaleRangesChanged(meta) {\n const {\n xScale,\n yScale,\n _scaleRanges\n } = meta;\n const newRanges = {\n xmin: xScale.min,\n xmax: xScale.max,\n ymin: yScale.min,\n ymax: yScale.max\n };\n if (!_scaleRanges) {\n meta._scaleRanges = newRanges;\n return true;\n }\n const changed = _scaleRanges.xmin !== xScale.min || _scaleRanges.xmax !== xScale.max || _scaleRanges.ymin !== yScale.min || _scaleRanges.ymax !== yScale.max;\n Object.assign(_scaleRanges, newRanges);\n return changed;\n}\nconst atEdge = t => t === 0 || t === 1;\nconst elasticIn = (t, s, p) => -(Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * TAU / p));\nconst elasticOut = (t, s, p) => Math.pow(2, -10 * t) * Math.sin((t - s) * TAU / p) + 1;\n/**\n * Easing functions adapted from Robert Penner's easing equations.\n * @namespace Chart.helpers.easing.effects\n * @see http://www.robertpenner.com/easing/\n */\nconst effects = {\n linear: t => t,\n easeInQuad: t => t * t,\n easeOutQuad: t => -t * (t - 2),\n easeInOutQuad: t => (t /= 0.5) < 1 ? 0.5 * t * t : -0.5 * (--t * (t - 2) - 1),\n easeInCubic: t => t * t * t,\n easeOutCubic: t => (t -= 1) * t * t + 1,\n easeInOutCubic: t => (t /= 0.5) < 1 ? 0.5 * t * t * t : 0.5 * ((t -= 2) * t * t + 2),\n easeInQuart: t => t * t * t * t,\n easeOutQuart: t => -((t -= 1) * t * t * t - 1),\n easeInOutQuart: t => (t /= 0.5) < 1 ? 0.5 * t * t * t * t : -0.5 * ((t -= 2) * t * t * t - 2),\n easeInQuint: t => t * t * t * t * t,\n easeOutQuint: t => (t -= 1) * t * t * t * t + 1,\n easeInOutQuint: t => (t /= 0.5) < 1 ? 0.5 * t * t * t * t * t : 0.5 * ((t -= 2) * t * t * t * t + 2),\n easeInSine: t => -Math.cos(t * HALF_PI) + 1,\n easeOutSine: t => Math.sin(t * HALF_PI),\n easeInOutSine: t => -0.5 * (Math.cos(PI * t) - 1),\n easeInExpo: t => t === 0 ? 0 : Math.pow(2, 10 * (t - 1)),\n easeOutExpo: t => t === 1 ? 1 : -Math.pow(2, -10 * t) + 1,\n easeInOutExpo: t => atEdge(t) ? t : t < 0.5 ? 0.5 * Math.pow(2, 10 * (t * 2 - 1)) : 0.5 * (-Math.pow(2, -10 * (t * 2 - 1)) + 2),\n easeInCirc: t => t >= 1 ? t : -(Math.sqrt(1 - t * t) - 1),\n easeOutCirc: t => Math.sqrt(1 - (t -= 1) * t),\n easeInOutCirc: t => (t /= 0.5) < 1 ? -0.5 * (Math.sqrt(1 - t * t) - 1) : 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1),\n easeInElastic: t => atEdge(t) ? t : elasticIn(t, 0.075, 0.3),\n easeOutElastic: t => atEdge(t) ? t : elasticOut(t, 0.075, 0.3),\n easeInOutElastic(t) {\n const s = 0.1125;\n const p = 0.45;\n return atEdge(t) ? t : t < 0.5 ? 0.5 * elasticIn(t * 2, s, p) : 0.5 + 0.5 * elasticOut(t * 2 - 1, s, p);\n },\n easeInBack(t) {\n const s = 1.70158;\n return t * t * ((s + 1) * t - s);\n },\n easeOutBack(t) {\n const s = 1.70158;\n return (t -= 1) * t * ((s + 1) * t + s) + 1;\n },\n easeInOutBack(t) {\n let s = 1.70158;\n if ((t /= 0.5) < 1) {\n return 0.5 * (t * t * (((s *= 1.525) + 1) * t - s));\n }\n return 0.5 * ((t -= 2) * t * (((s *= 1.525) + 1) * t + s) + 2);\n },\n easeInBounce: t => 1 - effects.easeOutBounce(1 - t),\n easeOutBounce(t) {\n const m = 7.5625;\n const d = 2.75;\n if (t < 1 / d) {\n return m * t * t;\n }\n if (t < 2 / d) {\n return m * (t -= 1.5 / d) * t + 0.75;\n }\n if (t < 2.5 / d) {\n return m * (t -= 2.25 / d) * t + 0.9375;\n }\n return m * (t -= 2.625 / d) * t + 0.984375;\n },\n easeInOutBounce: t => t < 0.5 ? effects.easeInBounce(t * 2) * 0.5 : effects.easeOutBounce(t * 2 - 1) * 0.5 + 0.5\n};\nfunction isPatternOrGradient(value) {\n if (value && typeof value === 'object') {\n const type = value.toString();\n return type === '[object CanvasPattern]' || type === '[object CanvasGradient]';\n }\n return false;\n}\nfunction color(value) {\n return isPatternOrGradient(value) ? value : new Color(value);\n}\nfunction getHoverColor(value) {\n return isPatternOrGradient(value) ? value : new Color(value).saturate(0.5).darken(0.1).hexString();\n}\nconst numbers = ['x', 'y', 'borderWidth', 'radius', 'tension'];\nconst colors = ['color', 'borderColor', 'backgroundColor'];\nfunction applyAnimationsDefaults(defaults) {\n defaults.set('animation', {\n delay: undefined,\n duration: 1000,\n easing: 'easeOutQuart',\n fn: undefined,\n from: undefined,\n loop: undefined,\n to: undefined,\n type: undefined\n });\n defaults.describe('animation', {\n _fallback: false,\n _indexable: false,\n _scriptable: name => name !== 'onProgress' && name !== 'onComplete' && name !== 'fn'\n });\n defaults.set('animations', {\n colors: {\n type: 'color',\n properties: colors\n },\n numbers: {\n type: 'number',\n properties: numbers\n }\n });\n defaults.describe('animations', {\n _fallback: 'animation'\n });\n defaults.set('transitions', {\n active: {\n animation: {\n duration: 400\n }\n },\n resize: {\n animation: {\n duration: 0\n }\n },\n show: {\n animations: {\n colors: {\n from: 'transparent'\n },\n visible: {\n type: 'boolean',\n duration: 0\n }\n }\n },\n hide: {\n animations: {\n colors: {\n to: 'transparent'\n },\n visible: {\n type: 'boolean',\n easing: 'linear',\n fn: v => v | 0\n }\n }\n }\n });\n}\nfunction applyLayoutsDefaults(defaults) {\n defaults.set('layout', {\n autoPadding: true,\n padding: {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n }\n });\n}\nconst intlCache = new Map();\nfunction getNumberFormat(locale, options) {\n options = options || {};\n const cacheKey = locale + JSON.stringify(options);\n let formatter = intlCache.get(cacheKey);\n if (!formatter) {\n formatter = new Intl.NumberFormat(locale, options);\n intlCache.set(cacheKey, formatter);\n }\n return formatter;\n}\nfunction formatNumber(num, locale, options) {\n return getNumberFormat(locale, options).format(num);\n}\nconst formatters = {\n values(value) {\n return isArray(value) ? value : '' + value;\n },\n numeric(tickValue, index, ticks) {\n if (tickValue === 0) {\n return '0';\n }\n const locale = this.chart.options.locale;\n let notation;\n let delta = tickValue;\n if (ticks.length > 1) {\n const maxTick = Math.max(Math.abs(ticks[0].value), Math.abs(ticks[ticks.length - 1].value));\n if (maxTick < 1e-4 || maxTick > 1e+15) {\n notation = 'scientific';\n }\n delta = calculateDelta(tickValue, ticks);\n }\n const logDelta = log10(Math.abs(delta));\n const numDecimal = isNaN(logDelta) ? 1 : Math.max(Math.min(-1 * Math.floor(logDelta), 20), 0);\n const options = {\n notation,\n minimumFractionDigits: numDecimal,\n maximumFractionDigits: numDecimal\n };\n Object.assign(options, this.options.ticks.format);\n return formatNumber(tickValue, locale, options);\n },\n logarithmic(tickValue, index, ticks) {\n if (tickValue === 0) {\n return '0';\n }\n const remain = ticks[index].significand || tickValue / Math.pow(10, Math.floor(log10(tickValue)));\n if ([1, 2, 3, 5, 10, 15].includes(remain) || index > 0.8 * ticks.length) {\n return formatters.numeric.call(this, tickValue, index, ticks);\n }\n return '';\n }\n};\nfunction calculateDelta(tickValue, ticks) {\n let delta = ticks.length > 3 ? ticks[2].value - ticks[1].value : ticks[1].value - ticks[0].value;\n if (Math.abs(delta) >= 1 && tickValue !== Math.floor(tickValue)) {\n delta = tickValue - Math.floor(tickValue);\n }\n return delta;\n}\nvar Ticks = {\n formatters\n};\nfunction applyScaleDefaults(defaults) {\n defaults.set('scale', {\n display: true,\n offset: false,\n reverse: false,\n beginAtZero: false,\n bounds: 'ticks',\n clip: true,\n grace: 0,\n grid: {\n display: true,\n lineWidth: 1,\n drawOnChartArea: true,\n drawTicks: true,\n tickLength: 8,\n tickWidth: (_ctx, options) => options.lineWidth,\n tickColor: (_ctx, options) => options.color,\n offset: false\n },\n border: {\n display: true,\n dash: [],\n dashOffset: 0.0,\n width: 1\n },\n title: {\n display: false,\n text: '',\n padding: {\n top: 4,\n bottom: 4\n }\n },\n ticks: {\n minRotation: 0,\n maxRotation: 50,\n mirror: false,\n textStrokeWidth: 0,\n textStrokeColor: '',\n padding: 3,\n display: true,\n autoSkip: true,\n autoSkipPadding: 3,\n labelOffset: 0,\n callback: Ticks.formatters.values,\n minor: {},\n major: {},\n align: 'center',\n crossAlign: 'near',\n showLabelBackdrop: false,\n backdropColor: 'rgba(255, 255, 255, 0.75)',\n backdropPadding: 2\n }\n });\n defaults.route('scale.ticks', 'color', '', 'color');\n defaults.route('scale.grid', 'color', '', 'borderColor');\n defaults.route('scale.border', 'color', '', 'borderColor');\n defaults.route('scale.title', 'color', '', 'color');\n defaults.describe('scale', {\n _fallback: false,\n _scriptable: name => !name.startsWith('before') && !name.startsWith('after') && name !== 'callback' && name !== 'parser',\n _indexable: name => name !== 'borderDash' && name !== 'tickBorderDash' && name !== 'dash'\n });\n defaults.describe('scales', {\n _fallback: 'scale'\n });\n defaults.describe('scale.ticks', {\n _scriptable: name => name !== 'backdropPadding' && name !== 'callback',\n _indexable: name => name !== 'backdropPadding'\n });\n}\nconst overrides = Object.create(null);\nconst descriptors = Object.create(null);\nfunction getScope$1(node, key) {\n if (!key) {\n return node;\n }\n const keys = key.split('.');\n for (let i = 0, n = keys.length; i < n; ++i) {\n const k = keys[i];\n node = node[k] || (node[k] = Object.create(null));\n }\n return node;\n}\nfunction set(root, scope, values) {\n if (typeof scope === 'string') {\n return merge(getScope$1(root, scope), values);\n }\n return merge(getScope$1(root, ''), scope);\n}\nclass Defaults {\n constructor(_descriptors, _appliers) {\n this.animation = undefined;\n this.backgroundColor = 'rgba(0,0,0,0.1)';\n this.borderColor = 'rgba(0,0,0,0.1)';\n this.color = '#666';\n this.datasets = {};\n this.devicePixelRatio = context => context.chart.platform.getDevicePixelRatio();\n this.elements = {};\n this.events = ['mousemove', 'mouseout', 'click', 'touchstart', 'touchmove'];\n this.font = {\n family: \"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif\",\n size: 12,\n style: 'normal',\n lineHeight: 1.2,\n weight: null\n };\n this.hover = {};\n this.hoverBackgroundColor = (ctx, options) => getHoverColor(options.backgroundColor);\n this.hoverBorderColor = (ctx, options) => getHoverColor(options.borderColor);\n this.hoverColor = (ctx, options) => getHoverColor(options.color);\n this.indexAxis = 'x';\n this.interaction = {\n mode: 'nearest',\n intersect: true,\n includeInvisible: false\n };\n this.maintainAspectRatio = true;\n this.onHover = null;\n this.onClick = null;\n this.parsing = true;\n this.plugins = {};\n this.responsive = true;\n this.scale = undefined;\n this.scales = {};\n this.showLine = true;\n this.drawActiveElementsOnTop = true;\n this.describe(_descriptors);\n this.apply(_appliers);\n }\n set(scope, values) {\n return set(this, scope, values);\n }\n get(scope) {\n return getScope$1(this, scope);\n }\n describe(scope, values) {\n return set(descriptors, scope, values);\n }\n override(scope, values) {\n return set(overrides, scope, values);\n }\n route(scope, name, targetScope, targetName) {\n const scopeObject = getScope$1(this, scope);\n const targetScopeObject = getScope$1(this, targetScope);\n const privateName = '_' + name;\n Object.defineProperties(scopeObject, {\n [privateName]: {\n value: scopeObject[name],\n writable: true\n },\n [name]: {\n enumerable: true,\n get() {\n const local = this[privateName];\n const target = targetScopeObject[targetName];\n if (isObject(local)) {\n return Object.assign({}, target, local);\n }\n return valueOrDefault(local, target);\n },\n set(value) {\n this[privateName] = value;\n }\n }\n });\n }\n apply(appliers) {\n appliers.forEach(apply => apply(this));\n }\n}\nvar defaults = /* #__PURE__ */new Defaults({\n _scriptable: name => !name.startsWith('on'),\n _indexable: name => name !== 'events',\n hover: {\n _fallback: 'interaction'\n },\n interaction: {\n _scriptable: false,\n _indexable: false\n }\n}, [applyAnimationsDefaults, applyLayoutsDefaults, applyScaleDefaults]);\n\n/**\n * Converts the given font object into a CSS font string.\n * @param font - A font object.\n * @return The CSS font string. See https://developer.mozilla.org/en-US/docs/Web/CSS/font\n * @private\n */\nfunction toFontString(font) {\n if (!font || isNullOrUndef(font.size) || isNullOrUndef(font.family)) {\n return null;\n }\n return (font.style ? font.style + ' ' : '') + (font.weight ? font.weight + ' ' : '') + font.size + 'px ' + font.family;\n}\n/**\n * @private\n */\nfunction _measureText(ctx, data, gc, longest, string) {\n let textWidth = data[string];\n if (!textWidth) {\n textWidth = data[string] = ctx.measureText(string).width;\n gc.push(string);\n }\n if (textWidth > longest) {\n longest = textWidth;\n }\n return longest;\n}\n/**\n * @private\n */ // eslint-disable-next-line complexity\nfunction _longestText(ctx, font, arrayOfThings, cache) {\n cache = cache || {};\n let data = cache.data = cache.data || {};\n let gc = cache.garbageCollect = cache.garbageCollect || [];\n if (cache.font !== font) {\n data = cache.data = {};\n gc = cache.garbageCollect = [];\n cache.font = font;\n }\n ctx.save();\n ctx.font = font;\n let longest = 0;\n const ilen = arrayOfThings.length;\n let i, j, jlen, thing, nestedThing;\n for (i = 0; i < ilen; i++) {\n thing = arrayOfThings[i];\n // Undefined strings and arrays should not be measured\n if (thing !== undefined && thing !== null && !isArray(thing)) {\n longest = _measureText(ctx, data, gc, longest, thing);\n } else if (isArray(thing)) {\n // if it is an array lets measure each element\n // to do maybe simplify this function a bit so we can do this more recursively?\n for (j = 0, jlen = thing.length; j < jlen; j++) {\n nestedThing = thing[j];\n // Undefined strings and arrays should not be measured\n if (nestedThing !== undefined && nestedThing !== null && !isArray(nestedThing)) {\n longest = _measureText(ctx, data, gc, longest, nestedThing);\n }\n }\n }\n }\n ctx.restore();\n const gcLen = gc.length / 2;\n if (gcLen > arrayOfThings.length) {\n for (i = 0; i < gcLen; i++) {\n delete data[gc[i]];\n }\n gc.splice(0, gcLen);\n }\n return longest;\n}\n/**\n * Returns the aligned pixel value to avoid anti-aliasing blur\n * @param chart - The chart instance.\n * @param pixel - A pixel value.\n * @param width - The width of the element.\n * @returns The aligned pixel value.\n * @private\n */\nfunction _alignPixel(chart, pixel, width) {\n const devicePixelRatio = chart.currentDevicePixelRatio;\n const halfWidth = width !== 0 ? Math.max(width / 2, 0.5) : 0;\n return Math.round((pixel - halfWidth) * devicePixelRatio) / devicePixelRatio + halfWidth;\n}\n/**\n * Clears the entire canvas.\n */\nfunction clearCanvas(canvas, ctx) {\n if (!ctx && !canvas) {\n return;\n }\n ctx = ctx || canvas.getContext('2d');\n ctx.save();\n // canvas.width and canvas.height do not consider the canvas transform,\n // while clearRect does\n ctx.resetTransform();\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n ctx.restore();\n}\nfunction drawPoint(ctx, options, x, y) {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n drawPointLegend(ctx, options, x, y, null);\n}\n// eslint-disable-next-line complexity\nfunction drawPointLegend(ctx, options, x, y, w) {\n let type, xOffset, yOffset, size, cornerRadius, width, xOffsetW, yOffsetW;\n const style = options.pointStyle;\n const rotation = options.rotation;\n const radius = options.radius;\n let rad = (rotation || 0) * RAD_PER_DEG;\n if (style && typeof style === 'object') {\n type = style.toString();\n if (type === '[object HTMLImageElement]' || type === '[object HTMLCanvasElement]') {\n ctx.save();\n ctx.translate(x, y);\n ctx.rotate(rad);\n ctx.drawImage(style, -style.width / 2, -style.height / 2, style.width, style.height);\n ctx.restore();\n return;\n }\n }\n if (isNaN(radius) || radius <= 0) {\n return;\n }\n ctx.beginPath();\n switch (style) {\n // Default includes circle\n default:\n if (w) {\n ctx.ellipse(x, y, w / 2, radius, 0, 0, TAU);\n } else {\n ctx.arc(x, y, radius, 0, TAU);\n }\n ctx.closePath();\n break;\n case 'triangle':\n width = w ? w / 2 : radius;\n ctx.moveTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);\n rad += TWO_THIRDS_PI;\n ctx.lineTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);\n rad += TWO_THIRDS_PI;\n ctx.lineTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);\n ctx.closePath();\n break;\n case 'rectRounded':\n // NOTE: the rounded rect implementation changed to use `arc` instead of\n // `quadraticCurveTo` since it generates better results when rect is\n // almost a circle. 0.516 (instead of 0.5) produces results with visually\n // closer proportion to the previous impl and it is inscribed in the\n // circle with `radius`. For more details, see the following PRs:\n // https://github.com/chartjs/Chart.js/issues/5597\n // https://github.com/chartjs/Chart.js/issues/5858\n cornerRadius = radius * 0.516;\n size = radius - cornerRadius;\n xOffset = Math.cos(rad + QUARTER_PI) * size;\n xOffsetW = Math.cos(rad + QUARTER_PI) * (w ? w / 2 - cornerRadius : size);\n yOffset = Math.sin(rad + QUARTER_PI) * size;\n yOffsetW = Math.sin(rad + QUARTER_PI) * (w ? w / 2 - cornerRadius : size);\n ctx.arc(x - xOffsetW, y - yOffset, cornerRadius, rad - PI, rad - HALF_PI);\n ctx.arc(x + yOffsetW, y - xOffset, cornerRadius, rad - HALF_PI, rad);\n ctx.arc(x + xOffsetW, y + yOffset, cornerRadius, rad, rad + HALF_PI);\n ctx.arc(x - yOffsetW, y + xOffset, cornerRadius, rad + HALF_PI, rad + PI);\n ctx.closePath();\n break;\n case 'rect':\n if (!rotation) {\n size = Math.SQRT1_2 * radius;\n width = w ? w / 2 : size;\n ctx.rect(x - width, y - size, 2 * width, 2 * size);\n break;\n }\n rad += QUARTER_PI;\n /* falls through */\n case 'rectRot':\n xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n ctx.moveTo(x - xOffsetW, y - yOffset);\n ctx.lineTo(x + yOffsetW, y - xOffset);\n ctx.lineTo(x + xOffsetW, y + yOffset);\n ctx.lineTo(x - yOffsetW, y + xOffset);\n ctx.closePath();\n break;\n case 'crossRot':\n rad += QUARTER_PI;\n /* falls through */\n case 'cross':\n xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n ctx.moveTo(x - xOffsetW, y - yOffset);\n ctx.lineTo(x + xOffsetW, y + yOffset);\n ctx.moveTo(x + yOffsetW, y - xOffset);\n ctx.lineTo(x - yOffsetW, y + xOffset);\n break;\n case 'star':\n xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n ctx.moveTo(x - xOffsetW, y - yOffset);\n ctx.lineTo(x + xOffsetW, y + yOffset);\n ctx.moveTo(x + yOffsetW, y - xOffset);\n ctx.lineTo(x - yOffsetW, y + xOffset);\n rad += QUARTER_PI;\n xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n ctx.moveTo(x - xOffsetW, y - yOffset);\n ctx.lineTo(x + xOffsetW, y + yOffset);\n ctx.moveTo(x + yOffsetW, y - xOffset);\n ctx.lineTo(x - yOffsetW, y + xOffset);\n break;\n case 'line':\n xOffset = w ? w / 2 : Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n ctx.moveTo(x - xOffset, y - yOffset);\n ctx.lineTo(x + xOffset, y + yOffset);\n break;\n case 'dash':\n ctx.moveTo(x, y);\n ctx.lineTo(x + Math.cos(rad) * (w ? w / 2 : radius), y + Math.sin(rad) * radius);\n break;\n case false:\n ctx.closePath();\n break;\n }\n ctx.fill();\n if (options.borderWidth > 0) {\n ctx.stroke();\n }\n}\n/**\n * Returns true if the point is inside the rectangle\n * @param point - The point to test\n * @param area - The rectangle\n * @param margin - allowed margin\n * @private\n */\nfunction _isPointInArea(point, area, margin) {\n margin = margin || 0.5; // margin - default is to match rounded decimals\n return !area || point && point.x > area.left - margin && point.x < area.right + margin && point.y > area.top - margin && point.y < area.bottom + margin;\n}\nfunction clipArea(ctx, area) {\n ctx.save();\n ctx.beginPath();\n ctx.rect(area.left, area.top, area.right - area.left, area.bottom - area.top);\n ctx.clip();\n}\nfunction unclipArea(ctx) {\n ctx.restore();\n}\n/**\n * @private\n */\nfunction _steppedLineTo(ctx, previous, target, flip, mode) {\n if (!previous) {\n return ctx.lineTo(target.x, target.y);\n }\n if (mode === 'middle') {\n const midpoint = (previous.x + target.x) / 2.0;\n ctx.lineTo(midpoint, previous.y);\n ctx.lineTo(midpoint, target.y);\n } else if (mode === 'after' !== !!flip) {\n ctx.lineTo(previous.x, target.y);\n } else {\n ctx.lineTo(target.x, previous.y);\n }\n ctx.lineTo(target.x, target.y);\n}\n/**\n * @private\n */\nfunction _bezierCurveTo(ctx, previous, target, flip) {\n if (!previous) {\n return ctx.lineTo(target.x, target.y);\n }\n ctx.bezierCurveTo(flip ? previous.cp1x : previous.cp2x, flip ? previous.cp1y : previous.cp2y, flip ? target.cp2x : target.cp1x, flip ? target.cp2y : target.cp1y, target.x, target.y);\n}\nfunction setRenderOpts(ctx, opts) {\n if (opts.translation) {\n ctx.translate(opts.translation[0], opts.translation[1]);\n }\n if (!isNullOrUndef(opts.rotation)) {\n ctx.rotate(opts.rotation);\n }\n if (opts.color) {\n ctx.fillStyle = opts.color;\n }\n if (opts.textAlign) {\n ctx.textAlign = opts.textAlign;\n }\n if (opts.textBaseline) {\n ctx.textBaseline = opts.textBaseline;\n }\n}\nfunction decorateText(ctx, x, y, line, opts) {\n if (opts.strikethrough || opts.underline) {\n /**\n * Now that IE11 support has been dropped, we can use more\n * of the TextMetrics object. The actual bounding boxes\n * are unflagged in Chrome, Firefox, Edge, and Safari so they\n * can be safely used.\n * See https://developer.mozilla.org/en-US/docs/Web/API/TextMetrics#Browser_compatibility\n */\n const metrics = ctx.measureText(line);\n const left = x - metrics.actualBoundingBoxLeft;\n const right = x + metrics.actualBoundingBoxRight;\n const top = y - metrics.actualBoundingBoxAscent;\n const bottom = y + metrics.actualBoundingBoxDescent;\n const yDecoration = opts.strikethrough ? (top + bottom) / 2 : bottom;\n ctx.strokeStyle = ctx.fillStyle;\n ctx.beginPath();\n ctx.lineWidth = opts.decorationWidth || 2;\n ctx.moveTo(left, yDecoration);\n ctx.lineTo(right, yDecoration);\n ctx.stroke();\n }\n}\nfunction drawBackdrop(ctx, opts) {\n const oldColor = ctx.fillStyle;\n ctx.fillStyle = opts.color;\n ctx.fillRect(opts.left, opts.top, opts.width, opts.height);\n ctx.fillStyle = oldColor;\n}\n/**\n * Render text onto the canvas\n */\nfunction renderText(ctx, text, x, y, font, opts = {}) {\n const lines = isArray(text) ? text : [text];\n const stroke = opts.strokeWidth > 0 && opts.strokeColor !== '';\n let i, line;\n ctx.save();\n ctx.font = font.string;\n setRenderOpts(ctx, opts);\n for (i = 0; i < lines.length; ++i) {\n line = lines[i];\n if (opts.backdrop) {\n drawBackdrop(ctx, opts.backdrop);\n }\n if (stroke) {\n if (opts.strokeColor) {\n ctx.strokeStyle = opts.strokeColor;\n }\n if (!isNullOrUndef(opts.strokeWidth)) {\n ctx.lineWidth = opts.strokeWidth;\n }\n ctx.strokeText(line, x, y, opts.maxWidth);\n }\n ctx.fillText(line, x, y, opts.maxWidth);\n decorateText(ctx, x, y, line, opts);\n y += Number(font.lineHeight);\n }\n ctx.restore();\n}\n/**\n * Add a path of a rectangle with rounded corners to the current sub-path\n * @param ctx - Context\n * @param rect - Bounding rect\n */\nfunction addRoundedRectPath(ctx, rect) {\n const {\n x,\n y,\n w,\n h,\n radius\n } = rect;\n // top left arc\n ctx.arc(x + radius.topLeft, y + radius.topLeft, radius.topLeft, 1.5 * PI, PI, true);\n // line from top left to bottom left\n ctx.lineTo(x, y + h - radius.bottomLeft);\n // bottom left arc\n ctx.arc(x + radius.bottomLeft, y + h - radius.bottomLeft, radius.bottomLeft, PI, HALF_PI, true);\n // line from bottom left to bottom right\n ctx.lineTo(x + w - radius.bottomRight, y + h);\n // bottom right arc\n ctx.arc(x + w - radius.bottomRight, y + h - radius.bottomRight, radius.bottomRight, HALF_PI, 0, true);\n // line from bottom right to top right\n ctx.lineTo(x + w, y + radius.topRight);\n // top right arc\n ctx.arc(x + w - radius.topRight, y + radius.topRight, radius.topRight, 0, -HALF_PI, true);\n // line from top right to top left\n ctx.lineTo(x + radius.topLeft, y);\n}\nconst LINE_HEIGHT = /^(normal|(\\d+(?:\\.\\d+)?)(px|em|%)?)$/;\nconst FONT_STYLE = /^(normal|italic|initial|inherit|unset|(oblique( -?[0-9]?[0-9]deg)?))$/;\n/**\n * @alias Chart.helpers.options\n * @namespace\n */ /**\n * Converts the given line height `value` in pixels for a specific font `size`.\n * @param value - The lineHeight to parse (eg. 1.6, '14px', '75%', '1.6em').\n * @param size - The font size (in pixels) used to resolve relative `value`.\n * @returns The effective line height in pixels (size * 1.2 if value is invalid).\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/line-height\n * @since 2.7.0\n */\nfunction toLineHeight(value, size) {\n const matches = ('' + value).match(LINE_HEIGHT);\n if (!matches || matches[1] === 'normal') {\n return size * 1.2;\n }\n value = +matches[2];\n switch (matches[3]) {\n case 'px':\n return value;\n case '%':\n value /= 100;\n break;\n }\n return size * value;\n}\nconst numberOrZero = v => +v || 0;\nfunction _readValueToProps(value, props) {\n const ret = {};\n const objProps = isObject(props);\n const keys = objProps ? Object.keys(props) : props;\n const read = isObject(value) ? objProps ? prop => valueOrDefault(value[prop], value[props[prop]]) : prop => value[prop] : () => value;\n for (const prop of keys) {\n ret[prop] = numberOrZero(read(prop));\n }\n return ret;\n}\n/**\n * Converts the given value into a TRBL object.\n * @param value - If a number, set the value to all TRBL component,\n * else, if an object, use defined properties and sets undefined ones to 0.\n * x / y are shorthands for same value for left/right and top/bottom.\n * @returns The padding values (top, right, bottom, left)\n * @since 3.0.0\n */\nfunction toTRBL(value) {\n return _readValueToProps(value, {\n top: 'y',\n right: 'x',\n bottom: 'y',\n left: 'x'\n });\n}\n/**\n * Converts the given value into a TRBL corners object (similar with css border-radius).\n * @param value - If a number, set the value to all TRBL corner components,\n * else, if an object, use defined properties and sets undefined ones to 0.\n * @returns The TRBL corner values (topLeft, topRight, bottomLeft, bottomRight)\n * @since 3.0.0\n */\nfunction toTRBLCorners(value) {\n return _readValueToProps(value, ['topLeft', 'topRight', 'bottomLeft', 'bottomRight']);\n}\n/**\n * Converts the given value into a padding object with pre-computed width/height.\n * @param value - If a number, set the value to all TRBL component,\n * else, if an object, use defined properties and sets undefined ones to 0.\n * x / y are shorthands for same value for left/right and top/bottom.\n * @returns The padding values (top, right, bottom, left, width, height)\n * @since 2.7.0\n */\nfunction toPadding(value) {\n const obj = toTRBL(value);\n obj.width = obj.left + obj.right;\n obj.height = obj.top + obj.bottom;\n return obj;\n}\n/**\n * Parses font options and returns the font object.\n * @param options - A object that contains font options to be parsed.\n * @param fallback - A object that contains fallback font options.\n * @return The font object.\n * @private\n */\nfunction toFont(options, fallback) {\n options = options || {};\n fallback = fallback || defaults.font;\n let size = valueOrDefault(options.size, fallback.size);\n if (typeof size === 'string') {\n size = parseInt(size, 10);\n }\n let style = valueOrDefault(options.style, fallback.style);\n if (style && !('' + style).match(FONT_STYLE)) {\n console.warn('Invalid font style specified: \"' + style + '\"');\n style = undefined;\n }\n const font = {\n family: valueOrDefault(options.family, fallback.family),\n lineHeight: toLineHeight(valueOrDefault(options.lineHeight, fallback.lineHeight), size),\n size,\n style,\n weight: valueOrDefault(options.weight, fallback.weight),\n string: ''\n };\n font.string = toFontString(font);\n return font;\n}\n/**\n * Evaluates the given `inputs` sequentially and returns the first defined value.\n * @param inputs - An array of values, falling back to the last value.\n * @param context - If defined and the current value is a function, the value\n * is called with `context` as first argument and the result becomes the new input.\n * @param index - If defined and the current value is an array, the value\n * at `index` become the new input.\n * @param info - object to return information about resolution in\n * @param info.cacheable - Will be set to `false` if option is not cacheable.\n * @since 2.7.0\n */\nfunction resolve(inputs, context, index, info) {\n let cacheable = true;\n let i, ilen, value;\n for (i = 0, ilen = inputs.length; i < ilen; ++i) {\n value = inputs[i];\n if (value === undefined) {\n continue;\n }\n if (context !== undefined && typeof value === 'function') {\n value = value(context);\n cacheable = false;\n }\n if (index !== undefined && isArray(value)) {\n value = value[index % value.length];\n cacheable = false;\n }\n if (value !== undefined) {\n if (info && !cacheable) {\n info.cacheable = false;\n }\n return value;\n }\n }\n}\n/**\n * @param minmax\n * @param grace\n * @param beginAtZero\n * @private\n */\nfunction _addGrace(minmax, grace, beginAtZero) {\n const {\n min,\n max\n } = minmax;\n const change = toDimension(grace, (max - min) / 2);\n const keepZero = (value, add) => beginAtZero && value === 0 ? 0 : value + add;\n return {\n min: keepZero(min, -Math.abs(change)),\n max: keepZero(max, change)\n };\n}\nfunction createContext(parentContext, context) {\n return Object.assign(Object.create(parentContext), context);\n}\n\n/**\n * Creates a Proxy for resolving raw values for options.\n * @param scopes - The option scopes to look for values, in resolution order\n * @param prefixes - The prefixes for values, in resolution order.\n * @param rootScopes - The root option scopes\n * @param fallback - Parent scopes fallback\n * @param getTarget - callback for getting the target for changed values\n * @returns Proxy\n * @private\n */\nfunction _createResolver(scopes, prefixes = [''], rootScopes, fallback, getTarget = () => scopes[0]) {\n const finalRootScopes = rootScopes || scopes;\n if (typeof fallback === 'undefined') {\n fallback = _resolve('_fallback', scopes);\n }\n const cache = {\n [Symbol.toStringTag]: 'Object',\n _cacheable: true,\n _scopes: scopes,\n _rootScopes: finalRootScopes,\n _fallback: fallback,\n _getTarget: getTarget,\n override: scope => _createResolver([scope, ...scopes], prefixes, finalRootScopes, fallback)\n };\n return new Proxy(cache, {\n /**\n * A trap for the delete operator.\n */\n deleteProperty(target, prop) {\n delete target[prop]; // remove from cache\n delete target._keys; // remove cached keys\n delete scopes[0][prop]; // remove from top level scope\n return true;\n },\n /**\n * A trap for getting property values.\n */\n get(target, prop) {\n return _cached(target, prop, () => _resolveWithPrefixes(prop, prefixes, scopes, target));\n },\n /**\n * A trap for Object.getOwnPropertyDescriptor.\n * Also used by Object.hasOwnProperty.\n */\n getOwnPropertyDescriptor(target, prop) {\n return Reflect.getOwnPropertyDescriptor(target._scopes[0], prop);\n },\n /**\n * A trap for Object.getPrototypeOf.\n */\n getPrototypeOf() {\n return Reflect.getPrototypeOf(scopes[0]);\n },\n /**\n * A trap for the in operator.\n */\n has(target, prop) {\n return getKeysFromAllScopes(target).includes(prop);\n },\n /**\n * A trap for Object.getOwnPropertyNames and Object.getOwnPropertySymbols.\n */\n ownKeys(target) {\n return getKeysFromAllScopes(target);\n },\n /**\n * A trap for setting property values.\n */\n set(target, prop, value) {\n const storage = target._storage || (target._storage = getTarget());\n target[prop] = storage[prop] = value; // set to top level scope + cache\n delete target._keys; // remove cached keys\n return true;\n }\n });\n}\n/**\n * Returns an Proxy for resolving option values with context.\n * @param proxy - The Proxy returned by `_createResolver`\n * @param context - Context object for scriptable/indexable options\n * @param subProxy - The proxy provided for scriptable options\n * @param descriptorDefaults - Defaults for descriptors\n * @private\n */\nfunction _attachContext(proxy, context, subProxy, descriptorDefaults) {\n const cache = {\n _cacheable: false,\n _proxy: proxy,\n _context: context,\n _subProxy: subProxy,\n _stack: new Set(),\n _descriptors: _descriptors(proxy, descriptorDefaults),\n setContext: ctx => _attachContext(proxy, ctx, subProxy, descriptorDefaults),\n override: scope => _attachContext(proxy.override(scope), context, subProxy, descriptorDefaults)\n };\n return new Proxy(cache, {\n /**\n * A trap for the delete operator.\n */\n deleteProperty(target, prop) {\n delete target[prop]; // remove from cache\n delete proxy[prop]; // remove from proxy\n return true;\n },\n /**\n * A trap for getting property values.\n */\n get(target, prop, receiver) {\n return _cached(target, prop, () => _resolveWithContext(target, prop, receiver));\n },\n /**\n * A trap for Object.getOwnPropertyDescriptor.\n * Also used by Object.hasOwnProperty.\n */\n getOwnPropertyDescriptor(target, prop) {\n return target._descriptors.allKeys ? Reflect.has(proxy, prop) ? {\n enumerable: true,\n configurable: true\n } : undefined : Reflect.getOwnPropertyDescriptor(proxy, prop);\n },\n /**\n * A trap for Object.getPrototypeOf.\n */\n getPrototypeOf() {\n return Reflect.getPrototypeOf(proxy);\n },\n /**\n * A trap for the in operator.\n */\n has(target, prop) {\n return Reflect.has(proxy, prop);\n },\n /**\n * A trap for Object.getOwnPropertyNames and Object.getOwnPropertySymbols.\n */\n ownKeys() {\n return Reflect.ownKeys(proxy);\n },\n /**\n * A trap for setting property values.\n */\n set(target, prop, value) {\n proxy[prop] = value; // set to proxy\n delete target[prop]; // remove from cache\n return true;\n }\n });\n}\n/**\n * @private\n */\nfunction _descriptors(proxy, defaults = {\n scriptable: true,\n indexable: true\n}) {\n const {\n _scriptable = defaults.scriptable,\n _indexable = defaults.indexable,\n _allKeys = defaults.allKeys\n } = proxy;\n return {\n allKeys: _allKeys,\n scriptable: _scriptable,\n indexable: _indexable,\n isScriptable: isFunction(_scriptable) ? _scriptable : () => _scriptable,\n isIndexable: isFunction(_indexable) ? _indexable : () => _indexable\n };\n}\nconst readKey = (prefix, name) => prefix ? prefix + _capitalize(name) : name;\nconst needsSubResolver = (prop, value) => isObject(value) && prop !== 'adapters' && (Object.getPrototypeOf(value) === null || value.constructor === Object);\nfunction _cached(target, prop, resolve) {\n if (Object.prototype.hasOwnProperty.call(target, prop) || prop === 'constructor') {\n return target[prop];\n }\n const value = resolve();\n // cache the resolved value\n target[prop] = value;\n return value;\n}\nfunction _resolveWithContext(target, prop, receiver) {\n const {\n _proxy,\n _context,\n _subProxy,\n _descriptors: descriptors\n } = target;\n let value = _proxy[prop]; // resolve from proxy\n // resolve with context\n if (isFunction(value) && descriptors.isScriptable(prop)) {\n value = _resolveScriptable(prop, value, target, receiver);\n }\n if (isArray(value) && value.length) {\n value = _resolveArray(prop, value, target, descriptors.isIndexable);\n }\n if (needsSubResolver(prop, value)) {\n // if the resolved value is an object, create a sub resolver for it\n value = _attachContext(value, _context, _subProxy && _subProxy[prop], descriptors);\n }\n return value;\n}\nfunction _resolveScriptable(prop, getValue, target, receiver) {\n const {\n _proxy,\n _context,\n _subProxy,\n _stack\n } = target;\n if (_stack.has(prop)) {\n throw new Error('Recursion detected: ' + Array.from(_stack).join('->') + '->' + prop);\n }\n _stack.add(prop);\n let value = getValue(_context, _subProxy || receiver);\n _stack.delete(prop);\n if (needsSubResolver(prop, value)) {\n // When scriptable option returns an object, create a resolver on that.\n value = createSubResolver(_proxy._scopes, _proxy, prop, value);\n }\n return value;\n}\nfunction _resolveArray(prop, value, target, isIndexable) {\n const {\n _proxy,\n _context,\n _subProxy,\n _descriptors: descriptors\n } = target;\n if (typeof _context.index !== 'undefined' && isIndexable(prop)) {\n return value[_context.index % value.length];\n } else if (isObject(value[0])) {\n // Array of objects, return array or resolvers\n const arr = value;\n const scopes = _proxy._scopes.filter(s => s !== arr);\n value = [];\n for (const item of arr) {\n const resolver = createSubResolver(scopes, _proxy, prop, item);\n value.push(_attachContext(resolver, _context, _subProxy && _subProxy[prop], descriptors));\n }\n }\n return value;\n}\nfunction resolveFallback(fallback, prop, value) {\n return isFunction(fallback) ? fallback(prop, value) : fallback;\n}\nconst getScope = (key, parent) => key === true ? parent : typeof key === 'string' ? resolveObjectKey(parent, key) : undefined;\nfunction addScopes(set, parentScopes, key, parentFallback, value) {\n for (const parent of parentScopes) {\n const scope = getScope(key, parent);\n if (scope) {\n set.add(scope);\n const fallback = resolveFallback(scope._fallback, key, value);\n if (typeof fallback !== 'undefined' && fallback !== key && fallback !== parentFallback) {\n // When we reach the descriptor that defines a new _fallback, return that.\n // The fallback will resume to that new scope.\n return fallback;\n }\n } else if (scope === false && typeof parentFallback !== 'undefined' && key !== parentFallback) {\n // Fallback to `false` results to `false`, when falling back to different key.\n // For example `interaction` from `hover` or `plugins.tooltip` and `animation` from `animations`\n return null;\n }\n }\n return false;\n}\nfunction createSubResolver(parentScopes, resolver, prop, value) {\n const rootScopes = resolver._rootScopes;\n const fallback = resolveFallback(resolver._fallback, prop, value);\n const allScopes = [...parentScopes, ...rootScopes];\n const set = new Set();\n set.add(value);\n let key = addScopesFromKey(set, allScopes, prop, fallback || prop, value);\n if (key === null) {\n return false;\n }\n if (typeof fallback !== 'undefined' && fallback !== prop) {\n key = addScopesFromKey(set, allScopes, fallback, key, value);\n if (key === null) {\n return false;\n }\n }\n return _createResolver(Array.from(set), [''], rootScopes, fallback, () => subGetTarget(resolver, prop, value));\n}\nfunction addScopesFromKey(set, allScopes, key, fallback, item) {\n while (key) {\n key = addScopes(set, allScopes, key, fallback, item);\n }\n return key;\n}\nfunction subGetTarget(resolver, prop, value) {\n const parent = resolver._getTarget();\n if (!(prop in parent)) {\n parent[prop] = {};\n }\n const target = parent[prop];\n if (isArray(target) && isObject(value)) {\n // For array of objects, the object is used to store updated values\n return value;\n }\n return target || {};\n}\nfunction _resolveWithPrefixes(prop, prefixes, scopes, proxy) {\n let value;\n for (const prefix of prefixes) {\n value = _resolve(readKey(prefix, prop), scopes);\n if (typeof value !== 'undefined') {\n return needsSubResolver(prop, value) ? createSubResolver(scopes, proxy, prop, value) : value;\n }\n }\n}\nfunction _resolve(key, scopes) {\n for (const scope of scopes) {\n if (!scope) {\n continue;\n }\n const value = scope[key];\n if (typeof value !== 'undefined') {\n return value;\n }\n }\n}\nfunction getKeysFromAllScopes(target) {\n let keys = target._keys;\n if (!keys) {\n keys = target._keys = resolveKeysFromAllScopes(target._scopes);\n }\n return keys;\n}\nfunction resolveKeysFromAllScopes(scopes) {\n const set = new Set();\n for (const scope of scopes) {\n for (const key of Object.keys(scope).filter(k => !k.startsWith('_'))) {\n set.add(key);\n }\n }\n return Array.from(set);\n}\nfunction _parseObjectDataRadialScale(meta, data, start, count) {\n const {\n iScale\n } = meta;\n const {\n key = 'r'\n } = this._parsing;\n const parsed = new Array(count);\n let i, ilen, index, item;\n for (i = 0, ilen = count; i < ilen; ++i) {\n index = i + start;\n item = data[index];\n parsed[i] = {\n r: iScale.parse(resolveObjectKey(item, key), index)\n };\n }\n return parsed;\n}\nconst EPSILON = Number.EPSILON || 1e-14;\nconst getPoint = (points, i) => i < points.length && !points[i].skip && points[i];\nconst getValueAxis = indexAxis => indexAxis === 'x' ? 'y' : 'x';\nfunction splineCurve(firstPoint, middlePoint, afterPoint, t) {\n // Props to Rob Spencer at scaled innovation for his post on splining between points\n // http://scaledinnovation.com/analytics/splines/aboutSplines.html\n // This function must also respect \"skipped\" points\n const previous = firstPoint.skip ? middlePoint : firstPoint;\n const current = middlePoint;\n const next = afterPoint.skip ? middlePoint : afterPoint;\n const d01 = distanceBetweenPoints(current, previous);\n const d12 = distanceBetweenPoints(next, current);\n let s01 = d01 / (d01 + d12);\n let s12 = d12 / (d01 + d12);\n // If all points are the same, s01 & s02 will be inf\n s01 = isNaN(s01) ? 0 : s01;\n s12 = isNaN(s12) ? 0 : s12;\n const fa = t * s01; // scaling factor for triangle Ta\n const fb = t * s12;\n return {\n previous: {\n x: current.x - fa * (next.x - previous.x),\n y: current.y - fa * (next.y - previous.y)\n },\n next: {\n x: current.x + fb * (next.x - previous.x),\n y: current.y + fb * (next.y - previous.y)\n }\n };\n}\n/**\n * Adjust tangents to ensure monotonic properties\n */\nfunction monotoneAdjust(points, deltaK, mK) {\n const pointsLen = points.length;\n let alphaK, betaK, tauK, squaredMagnitude, pointCurrent;\n let pointAfter = getPoint(points, 0);\n for (let i = 0; i < pointsLen - 1; ++i) {\n pointCurrent = pointAfter;\n pointAfter = getPoint(points, i + 1);\n if (!pointCurrent || !pointAfter) {\n continue;\n }\n if (almostEquals(deltaK[i], 0, EPSILON)) {\n mK[i] = mK[i + 1] = 0;\n continue;\n }\n alphaK = mK[i] / deltaK[i];\n betaK = mK[i + 1] / deltaK[i];\n squaredMagnitude = Math.pow(alphaK, 2) + Math.pow(betaK, 2);\n if (squaredMagnitude <= 9) {\n continue;\n }\n tauK = 3 / Math.sqrt(squaredMagnitude);\n mK[i] = alphaK * tauK * deltaK[i];\n mK[i + 1] = betaK * tauK * deltaK[i];\n }\n}\nfunction monotoneCompute(points, mK, indexAxis = 'x') {\n const valueAxis = getValueAxis(indexAxis);\n const pointsLen = points.length;\n let delta, pointBefore, pointCurrent;\n let pointAfter = getPoint(points, 0);\n for (let i = 0; i < pointsLen; ++i) {\n pointBefore = pointCurrent;\n pointCurrent = pointAfter;\n pointAfter = getPoint(points, i + 1);\n if (!pointCurrent) {\n continue;\n }\n const iPixel = pointCurrent[indexAxis];\n const vPixel = pointCurrent[valueAxis];\n if (pointBefore) {\n delta = (iPixel - pointBefore[indexAxis]) / 3;\n pointCurrent[`cp1${indexAxis}`] = iPixel - delta;\n pointCurrent[`cp1${valueAxis}`] = vPixel - delta * mK[i];\n }\n if (pointAfter) {\n delta = (pointAfter[indexAxis] - iPixel) / 3;\n pointCurrent[`cp2${indexAxis}`] = iPixel + delta;\n pointCurrent[`cp2${valueAxis}`] = vPixel + delta * mK[i];\n }\n }\n}\n/**\n * This function calculates Bézier control points in a similar way than |splineCurve|,\n * but preserves monotonicity of the provided data and ensures no local extremums are added\n * between the dataset discrete points due to the interpolation.\n * See : https://en.wikipedia.org/wiki/Monotone_cubic_interpolation\n */\nfunction splineCurveMonotone(points, indexAxis = 'x') {\n const valueAxis = getValueAxis(indexAxis);\n const pointsLen = points.length;\n const deltaK = Array(pointsLen).fill(0);\n const mK = Array(pointsLen);\n // Calculate slopes (deltaK) and initialize tangents (mK)\n let i, pointBefore, pointCurrent;\n let pointAfter = getPoint(points, 0);\n for (i = 0; i < pointsLen; ++i) {\n pointBefore = pointCurrent;\n pointCurrent = pointAfter;\n pointAfter = getPoint(points, i + 1);\n if (!pointCurrent) {\n continue;\n }\n if (pointAfter) {\n const slopeDelta = pointAfter[indexAxis] - pointCurrent[indexAxis];\n // In the case of two points that appear at the same x pixel, slopeDeltaX is 0\n deltaK[i] = slopeDelta !== 0 ? (pointAfter[valueAxis] - pointCurrent[valueAxis]) / slopeDelta : 0;\n }\n mK[i] = !pointBefore ? deltaK[i] : !pointAfter ? deltaK[i - 1] : sign(deltaK[i - 1]) !== sign(deltaK[i]) ? 0 : (deltaK[i - 1] + deltaK[i]) / 2;\n }\n monotoneAdjust(points, deltaK, mK);\n monotoneCompute(points, mK, indexAxis);\n}\nfunction capControlPoint(pt, min, max) {\n return Math.max(Math.min(pt, max), min);\n}\nfunction capBezierPoints(points, area) {\n let i, ilen, point, inArea, inAreaPrev;\n let inAreaNext = _isPointInArea(points[0], area);\n for (i = 0, ilen = points.length; i < ilen; ++i) {\n inAreaPrev = inArea;\n inArea = inAreaNext;\n inAreaNext = i < ilen - 1 && _isPointInArea(points[i + 1], area);\n if (!inArea) {\n continue;\n }\n point = points[i];\n if (inAreaPrev) {\n point.cp1x = capControlPoint(point.cp1x, area.left, area.right);\n point.cp1y = capControlPoint(point.cp1y, area.top, area.bottom);\n }\n if (inAreaNext) {\n point.cp2x = capControlPoint(point.cp2x, area.left, area.right);\n point.cp2y = capControlPoint(point.cp2y, area.top, area.bottom);\n }\n }\n}\n/**\n * @private\n */\nfunction _updateBezierControlPoints(points, options, area, loop, indexAxis) {\n let i, ilen, point, controlPoints;\n // Only consider points that are drawn in case the spanGaps option is used\n if (options.spanGaps) {\n points = points.filter(pt => !pt.skip);\n }\n if (options.cubicInterpolationMode === 'monotone') {\n splineCurveMonotone(points, indexAxis);\n } else {\n let prev = loop ? points[points.length - 1] : points[0];\n for (i = 0, ilen = points.length; i < ilen; ++i) {\n point = points[i];\n controlPoints = splineCurve(prev, point, points[Math.min(i + 1, ilen - (loop ? 0 : 1)) % ilen], options.tension);\n point.cp1x = controlPoints.previous.x;\n point.cp1y = controlPoints.previous.y;\n point.cp2x = controlPoints.next.x;\n point.cp2y = controlPoints.next.y;\n prev = point;\n }\n }\n if (options.capBezierPoints) {\n capBezierPoints(points, area);\n }\n}\n\n/**\n * @private\n */\nfunction _isDomSupported() {\n return typeof window !== 'undefined' && typeof document !== 'undefined';\n}\n/**\n * @private\n */\nfunction _getParentNode(domNode) {\n let parent = domNode.parentNode;\n if (parent && parent.toString() === '[object ShadowRoot]') {\n parent = parent.host;\n }\n return parent;\n}\n/**\n * convert max-width/max-height values that may be percentages into a number\n * @private\n */\nfunction parseMaxStyle(styleValue, node, parentProperty) {\n let valueInPixels;\n if (typeof styleValue === 'string') {\n valueInPixels = parseInt(styleValue, 10);\n if (styleValue.indexOf('%') !== -1) {\n // percentage * size in dimension\n valueInPixels = valueInPixels / 100 * node.parentNode[parentProperty];\n }\n } else {\n valueInPixels = styleValue;\n }\n return valueInPixels;\n}\nconst getComputedStyle = element => element.ownerDocument.defaultView.getComputedStyle(element, null);\nfunction getStyle(el, property) {\n return getComputedStyle(el).getPropertyValue(property);\n}\nconst positions = ['top', 'right', 'bottom', 'left'];\nfunction getPositionedStyle(styles, style, suffix) {\n const result = {};\n suffix = suffix ? '-' + suffix : '';\n for (let i = 0; i < 4; i++) {\n const pos = positions[i];\n result[pos] = parseFloat(styles[style + '-' + pos + suffix]) || 0;\n }\n result.width = result.left + result.right;\n result.height = result.top + result.bottom;\n return result;\n}\nconst useOffsetPos = (x, y, target) => (x > 0 || y > 0) && (!target || !target.shadowRoot);\n/**\n * @param e\n * @param canvas\n * @returns Canvas position\n */\nfunction getCanvasPosition(e, canvas) {\n const touches = e.touches;\n const source = touches && touches.length ? touches[0] : e;\n const {\n offsetX,\n offsetY\n } = source;\n let box = false;\n let x, y;\n if (useOffsetPos(offsetX, offsetY, e.target)) {\n x = offsetX;\n y = offsetY;\n } else {\n const rect = canvas.getBoundingClientRect();\n x = source.clientX - rect.left;\n y = source.clientY - rect.top;\n box = true;\n }\n return {\n x,\n y,\n box\n };\n}\n/**\n * Gets an event's x, y coordinates, relative to the chart area\n * @param event\n * @param chart\n * @returns x and y coordinates of the event\n */\nfunction getRelativePosition(event, chart) {\n if ('native' in event) {\n return event;\n }\n const {\n canvas,\n currentDevicePixelRatio\n } = chart;\n const style = getComputedStyle(canvas);\n const borderBox = style.boxSizing === 'border-box';\n const paddings = getPositionedStyle(style, 'padding');\n const borders = getPositionedStyle(style, 'border', 'width');\n const {\n x,\n y,\n box\n } = getCanvasPosition(event, canvas);\n const xOffset = paddings.left + (box && borders.left);\n const yOffset = paddings.top + (box && borders.top);\n let {\n width,\n height\n } = chart;\n if (borderBox) {\n width -= paddings.width + borders.width;\n height -= paddings.height + borders.height;\n }\n return {\n x: Math.round((x - xOffset) / width * canvas.width / currentDevicePixelRatio),\n y: Math.round((y - yOffset) / height * canvas.height / currentDevicePixelRatio)\n };\n}\nfunction getContainerSize(canvas, width, height) {\n let maxWidth, maxHeight;\n if (width === undefined || height === undefined) {\n const container = canvas && _getParentNode(canvas);\n if (!container) {\n width = canvas.clientWidth;\n height = canvas.clientHeight;\n } else {\n const rect = container.getBoundingClientRect(); // this is the border box of the container\n const containerStyle = getComputedStyle(container);\n const containerBorder = getPositionedStyle(containerStyle, 'border', 'width');\n const containerPadding = getPositionedStyle(containerStyle, 'padding');\n width = rect.width - containerPadding.width - containerBorder.width;\n height = rect.height - containerPadding.height - containerBorder.height;\n maxWidth = parseMaxStyle(containerStyle.maxWidth, container, 'clientWidth');\n maxHeight = parseMaxStyle(containerStyle.maxHeight, container, 'clientHeight');\n }\n }\n return {\n width,\n height,\n maxWidth: maxWidth || INFINITY,\n maxHeight: maxHeight || INFINITY\n };\n}\nconst round1 = v => Math.round(v * 10) / 10;\n// eslint-disable-next-line complexity\nfunction getMaximumSize(canvas, bbWidth, bbHeight, aspectRatio) {\n const style = getComputedStyle(canvas);\n const margins = getPositionedStyle(style, 'margin');\n const maxWidth = parseMaxStyle(style.maxWidth, canvas, 'clientWidth') || INFINITY;\n const maxHeight = parseMaxStyle(style.maxHeight, canvas, 'clientHeight') || INFINITY;\n const containerSize = getContainerSize(canvas, bbWidth, bbHeight);\n let {\n width,\n height\n } = containerSize;\n if (style.boxSizing === 'content-box') {\n const borders = getPositionedStyle(style, 'border', 'width');\n const paddings = getPositionedStyle(style, 'padding');\n width -= paddings.width + borders.width;\n height -= paddings.height + borders.height;\n }\n width = Math.max(0, width - margins.width);\n height = Math.max(0, aspectRatio ? width / aspectRatio : height - margins.height);\n width = round1(Math.min(width, maxWidth, containerSize.maxWidth));\n height = round1(Math.min(height, maxHeight, containerSize.maxHeight));\n if (width && !height) {\n // https://github.com/chartjs/Chart.js/issues/4659\n // If the canvas has width, but no height, default to aspectRatio of 2 (canvas default)\n height = round1(width / 2);\n }\n const maintainHeight = bbWidth !== undefined || bbHeight !== undefined;\n if (maintainHeight && aspectRatio && containerSize.height && height > containerSize.height) {\n height = containerSize.height;\n width = round1(Math.floor(height * aspectRatio));\n }\n return {\n width,\n height\n };\n}\n/**\n * @param chart\n * @param forceRatio\n * @param forceStyle\n * @returns True if the canvas context size or transformation has changed.\n */\nfunction retinaScale(chart, forceRatio, forceStyle) {\n const pixelRatio = forceRatio || 1;\n const deviceHeight = round1(chart.height * pixelRatio);\n const deviceWidth = round1(chart.width * pixelRatio);\n chart.height = round1(chart.height);\n chart.width = round1(chart.width);\n const canvas = chart.canvas;\n // If no style has been set on the canvas, the render size is used as display size,\n // making the chart visually bigger, so let's enforce it to the \"correct\" values.\n // See https://github.com/chartjs/Chart.js/issues/3575\n if (canvas.style && (forceStyle || !canvas.style.height && !canvas.style.width)) {\n canvas.style.height = `${chart.height}px`;\n canvas.style.width = `${chart.width}px`;\n }\n if (chart.currentDevicePixelRatio !== pixelRatio || canvas.height !== deviceHeight || canvas.width !== deviceWidth) {\n chart.currentDevicePixelRatio = pixelRatio;\n canvas.height = deviceHeight;\n canvas.width = deviceWidth;\n chart.ctx.setTransform(pixelRatio, 0, 0, pixelRatio, 0, 0);\n return true;\n }\n return false;\n}\n/**\n * Detects support for options object argument in addEventListener.\n * https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#Safely_detecting_option_support\n * @private\n */\nconst supportsEventListenerOptions = function () {\n let passiveSupported = false;\n try {\n const options = {\n get passive() {\n passiveSupported = true;\n return false;\n }\n };\n if (_isDomSupported()) {\n window.addEventListener('test', null, options);\n window.removeEventListener('test', null, options);\n }\n } catch (e) {\n // continue regardless of error\n }\n return passiveSupported;\n}();\n/**\n * The \"used\" size is the final value of a dimension property after all calculations have\n * been performed. This method uses the computed style of `element` but returns undefined\n * if the computed style is not expressed in pixels. That can happen in some cases where\n * `element` has a size relative to its parent and this last one is not yet displayed,\n * for example because of `display: none` on a parent node.\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/used_value\n * @returns Size in pixels or undefined if unknown.\n */\nfunction readUsedSize(element, property) {\n const value = getStyle(element, property);\n const matches = value && value.match(/^(\\d+)(\\.\\d+)?px$/);\n return matches ? +matches[1] : undefined;\n}\n\n/**\n * @private\n */\nfunction _pointInLine(p1, p2, t, mode) {\n return {\n x: p1.x + t * (p2.x - p1.x),\n y: p1.y + t * (p2.y - p1.y)\n };\n}\n/**\n * @private\n */\nfunction _steppedInterpolation(p1, p2, t, mode) {\n return {\n x: p1.x + t * (p2.x - p1.x),\n y: mode === 'middle' ? t < 0.5 ? p1.y : p2.y : mode === 'after' ? t < 1 ? p1.y : p2.y : t > 0 ? p2.y : p1.y\n };\n}\n/**\n * @private\n */\nfunction _bezierInterpolation(p1, p2, t, mode) {\n const cp1 = {\n x: p1.cp2x,\n y: p1.cp2y\n };\n const cp2 = {\n x: p2.cp1x,\n y: p2.cp1y\n };\n const a = _pointInLine(p1, cp1, t);\n const b = _pointInLine(cp1, cp2, t);\n const c = _pointInLine(cp2, p2, t);\n const d = _pointInLine(a, b, t);\n const e = _pointInLine(b, c, t);\n return _pointInLine(d, e, t);\n}\nconst getRightToLeftAdapter = function (rectX, width) {\n return {\n x(x) {\n return rectX + rectX + width - x;\n },\n setWidth(w) {\n width = w;\n },\n textAlign(align) {\n if (align === 'center') {\n return align;\n }\n return align === 'right' ? 'left' : 'right';\n },\n xPlus(x, value) {\n return x - value;\n },\n leftForLtr(x, itemWidth) {\n return x - itemWidth;\n }\n };\n};\nconst getLeftToRightAdapter = function () {\n return {\n x(x) {\n return x;\n },\n setWidth(w) {},\n textAlign(align) {\n return align;\n },\n xPlus(x, value) {\n return x + value;\n },\n leftForLtr(x, _itemWidth) {\n return x;\n }\n };\n};\nfunction getRtlAdapter(rtl, rectX, width) {\n return rtl ? getRightToLeftAdapter(rectX, width) : getLeftToRightAdapter();\n}\nfunction overrideTextDirection(ctx, direction) {\n let style, original;\n if (direction === 'ltr' || direction === 'rtl') {\n style = ctx.canvas.style;\n original = [style.getPropertyValue('direction'), style.getPropertyPriority('direction')];\n style.setProperty('direction', direction, 'important');\n ctx.prevTextDirection = original;\n }\n}\nfunction restoreTextDirection(ctx, original) {\n if (original !== undefined) {\n delete ctx.prevTextDirection;\n ctx.canvas.style.setProperty('direction', original[0], original[1]);\n }\n}\nfunction propertyFn(property) {\n if (property === 'angle') {\n return {\n between: _angleBetween,\n compare: _angleDiff,\n normalize: _normalizeAngle\n };\n }\n return {\n between: _isBetween,\n compare: (a, b) => a - b,\n normalize: x => x\n };\n}\nfunction normalizeSegment({\n start,\n end,\n count,\n loop,\n style\n}) {\n return {\n start: start % count,\n end: end % count,\n loop: loop && (end - start + 1) % count === 0,\n style\n };\n}\nfunction getSegment(segment, points, bounds) {\n const {\n property,\n start: startBound,\n end: endBound\n } = bounds;\n const {\n between,\n normalize\n } = propertyFn(property);\n const count = points.length;\n let {\n start,\n end,\n loop\n } = segment;\n let i, ilen;\n if (loop) {\n start += count;\n end += count;\n for (i = 0, ilen = count; i < ilen; ++i) {\n if (!between(normalize(points[start % count][property]), startBound, endBound)) {\n break;\n }\n start--;\n end--;\n }\n start %= count;\n end %= count;\n }\n if (end < start) {\n end += count;\n }\n return {\n start,\n end,\n loop,\n style: segment.style\n };\n}\nfunction _boundSegment(segment, points, bounds) {\n if (!bounds) {\n return [segment];\n }\n const {\n property,\n start: startBound,\n end: endBound\n } = bounds;\n const count = points.length;\n const {\n compare,\n between,\n normalize\n } = propertyFn(property);\n const {\n start,\n end,\n loop,\n style\n } = getSegment(segment, points, bounds);\n const result = [];\n let inside = false;\n let subStart = null;\n let value, point, prevValue;\n const startIsBefore = () => between(startBound, prevValue, value) && compare(startBound, prevValue) !== 0;\n const endIsBefore = () => compare(endBound, value) === 0 || between(endBound, prevValue, value);\n const shouldStart = () => inside || startIsBefore();\n const shouldStop = () => !inside || endIsBefore();\n for (let i = start, prev = start; i <= end; ++i) {\n point = points[i % count];\n if (point.skip) {\n continue;\n }\n value = normalize(point[property]);\n if (value === prevValue) {\n continue;\n }\n inside = between(value, startBound, endBound);\n if (subStart === null && shouldStart()) {\n subStart = compare(value, startBound) === 0 ? i : prev;\n }\n if (subStart !== null && shouldStop()) {\n result.push(normalizeSegment({\n start: subStart,\n end: i,\n loop,\n count,\n style\n }));\n subStart = null;\n }\n prev = i;\n prevValue = value;\n }\n if (subStart !== null) {\n result.push(normalizeSegment({\n start: subStart,\n end,\n loop,\n count,\n style\n }));\n }\n return result;\n}\nfunction _boundSegments(line, bounds) {\n const result = [];\n const segments = line.segments;\n for (let i = 0; i < segments.length; i++) {\n const sub = _boundSegment(segments[i], line.points, bounds);\n if (sub.length) {\n result.push(...sub);\n }\n }\n return result;\n}\nfunction findStartAndEnd(points, count, loop, spanGaps) {\n let start = 0;\n let end = count - 1;\n if (loop && !spanGaps) {\n while (start < count && !points[start].skip) {\n start++;\n }\n }\n while (start < count && points[start].skip) {\n start++;\n }\n start %= count;\n if (loop) {\n end += start;\n }\n while (end > start && points[end % count].skip) {\n end--;\n }\n end %= count;\n return {\n start,\n end\n };\n}\nfunction solidSegments(points, start, max, loop) {\n const count = points.length;\n const result = [];\n let last = start;\n let prev = points[start];\n let end;\n for (end = start + 1; end <= max; ++end) {\n const cur = points[end % count];\n if (cur.skip || cur.stop) {\n if (!prev.skip) {\n loop = false;\n result.push({\n start: start % count,\n end: (end - 1) % count,\n loop\n });\n start = last = cur.stop ? end : null;\n }\n } else {\n last = end;\n if (prev.skip) {\n start = end;\n }\n }\n prev = cur;\n }\n if (last !== null) {\n result.push({\n start: start % count,\n end: last % count,\n loop\n });\n }\n return result;\n}\nfunction _computeSegments(line, segmentOptions) {\n const points = line.points;\n const spanGaps = line.options.spanGaps;\n const count = points.length;\n if (!count) {\n return [];\n }\n const loop = !!line._loop;\n const {\n start,\n end\n } = findStartAndEnd(points, count, loop, spanGaps);\n if (spanGaps === true) {\n return splitByStyles(line, [{\n start,\n end,\n loop\n }], points, segmentOptions);\n }\n const max = end < start ? end + count : end;\n const completeLoop = !!line._fullLoop && start === 0 && end === count - 1;\n return splitByStyles(line, solidSegments(points, start, max, completeLoop), points, segmentOptions);\n}\nfunction splitByStyles(line, segments, points, segmentOptions) {\n if (!segmentOptions || !segmentOptions.setContext || !points) {\n return segments;\n }\n return doSplitByStyles(line, segments, points, segmentOptions);\n}\nfunction doSplitByStyles(line, segments, points, segmentOptions) {\n const chartContext = line._chart.getContext();\n const baseStyle = readStyle(line.options);\n const {\n _datasetIndex: datasetIndex,\n options: {\n spanGaps\n }\n } = line;\n const count = points.length;\n const result = [];\n let prevStyle = baseStyle;\n let start = segments[0].start;\n let i = start;\n function addStyle(s, e, l, st) {\n const dir = spanGaps ? -1 : 1;\n if (s === e) {\n return;\n }\n s += count;\n while (points[s % count].skip) {\n s -= dir;\n }\n while (points[e % count].skip) {\n e += dir;\n }\n if (s % count !== e % count) {\n result.push({\n start: s % count,\n end: e % count,\n loop: l,\n style: st\n });\n prevStyle = st;\n start = e % count;\n }\n }\n for (const segment of segments) {\n start = spanGaps ? start : segment.start;\n let prev = points[start % count];\n let style;\n for (i = start + 1; i <= segment.end; i++) {\n const pt = points[i % count];\n style = readStyle(segmentOptions.setContext(createContext(chartContext, {\n type: 'segment',\n p0: prev,\n p1: pt,\n p0DataIndex: (i - 1) % count,\n p1DataIndex: i % count,\n datasetIndex\n })));\n if (styleChanged(style, prevStyle)) {\n addStyle(start, i - 1, segment.loop, prevStyle);\n }\n prev = pt;\n prevStyle = style;\n }\n if (start < i - 1) {\n addStyle(start, i - 1, segment.loop, prevStyle);\n }\n }\n return result;\n}\nfunction readStyle(options) {\n return {\n backgroundColor: options.backgroundColor,\n borderCapStyle: options.borderCapStyle,\n borderDash: options.borderDash,\n borderDashOffset: options.borderDashOffset,\n borderJoinStyle: options.borderJoinStyle,\n borderWidth: options.borderWidth,\n borderColor: options.borderColor\n };\n}\nfunction styleChanged(style, prevStyle) {\n if (!prevStyle) {\n return false;\n }\n const cache = [];\n const replacer = function (key, value) {\n if (!isPatternOrGradient(value)) {\n return value;\n }\n if (!cache.includes(value)) {\n cache.push(value);\n }\n return cache.indexOf(value);\n };\n return JSON.stringify(style, replacer) !== JSON.stringify(prevStyle, replacer);\n}\nfunction getSizeForArea(scale, chartArea, field) {\n return scale.options.clip ? scale[field] : chartArea[field];\n}\nfunction getDatasetArea(meta, chartArea) {\n const {\n xScale,\n yScale\n } = meta;\n if (xScale && yScale) {\n return {\n left: getSizeForArea(xScale, chartArea, 'left'),\n right: getSizeForArea(xScale, chartArea, 'right'),\n top: getSizeForArea(yScale, chartArea, 'top'),\n bottom: getSizeForArea(yScale, chartArea, 'bottom')\n };\n }\n return chartArea;\n}\nfunction getDatasetClipArea(chart, meta) {\n const clip = meta._clip;\n if (clip.disabled) {\n return false;\n }\n const area = getDatasetArea(meta, chart.chartArea);\n return {\n left: clip.left === false ? 0 : area.left - (clip.left === true ? 0 : clip.left),\n right: clip.right === false ? chart.width : area.right + (clip.right === true ? 0 : clip.right),\n top: clip.top === false ? 0 : area.top - (clip.top === true ? 0 : clip.top),\n bottom: clip.bottom === false ? chart.height : area.bottom + (clip.bottom === true ? 0 : clip.bottom)\n };\n}\nexport { unclipArea as $, _rlookupByKey as A, _lookupByKey as B, _isPointInArea as C, getAngleFromPoint as D, toPadding as E, each as F, getMaximumSize as G, HALF_PI as H, _getParentNode as I, readUsedSize as J, supportsEventListenerOptions as K, throttled as L, _isDomSupported as M, _factorize as N, finiteOrDefault as O, PI as P, callback as Q, _addGrace as R, _limitValue as S, TAU as T, toDegrees as U, _measureText as V, _int16Range as W, _alignPixel as X, clipArea as Y, renderText as Z, _arrayUnique as _, resolve as a, getStyle as a$, toFont as a0, _toLeftRightCenter as a1, _alignStartEnd as a2, overrides as a3, merge as a4, _capitalize as a5, descriptors as a6, isFunction as a7, _attachContext as a8, _createResolver as a9, getRtlAdapter as aA, overrideTextDirection as aB, _textX as aC, restoreTextDirection as aD, drawPointLegend as aE, distanceBetweenPoints as aF, noop as aG, _setMinAndMaxByKey as aH, niceNum as aI, almostWhole as aJ, almostEquals as aK, _decimalPlaces as aL, Ticks as aM, log10 as aN, _longestText as aO, _filterBetween as aP, _lookup as aQ, isPatternOrGradient as aR, getHoverColor as aS, clone as aT, _merger as aU, _mergerIf as aV, _deprecated as aW, _splitKey as aX, toFontString as aY, splineCurve as aZ, splineCurveMonotone as a_, _descriptors as aa, mergeIf as ab, uid as ac, debounce as ad, retinaScale as ae, clearCanvas as af, setsEqual as ag, getDatasetClipArea as ah, _elementsEqual as ai, _isClickEvent as aj, _isBetween as ak, _normalizeAngle as al, _readValueToProps as am, _updateBezierControlPoints as an, _computeSegments as ao, _boundSegments as ap, _steppedInterpolation as aq, _bezierInterpolation as ar, _pointInLine as as, _steppedLineTo as at, _bezierCurveTo as au, drawPoint as av, addRoundedRectPath as aw, toTRBL as ax, toTRBLCorners as ay, _boundSegment as az, isArray as b, fontString as b0, toLineHeight as b1, PITAU as b2, INFINITY as b3, RAD_PER_DEG as b4, QUARTER_PI as b5, TWO_THIRDS_PI as b6, _angleDiff as b7, color as c, defaults as d, effects as e, resolveObjectKey as f, isNumberFinite as g, defined as h, isObject as i, createContext as j, isNullOrUndef as k, listenArrayEvents as l, toPercentage as m, toDimension as n, formatNumber as o, _angleBetween as p, _getStartAndCountOfVisiblePoints as q, requestAnimFrame as r, sign as s, toRadians as t, unlistenArrayEvents as u, valueOrDefault as v, _scaleRangesChanged as w, isNumber as x, _parseObjectDataRadialScale as y, getRelativePosition as z };\n","/*!\n * Chart.js v4.5.1\n * https://www.chartjs.org\n * (c) 2025 Chart.js Contributors\n * Released under the MIT License\n */\nimport { r as requestAnimFrame, a as resolve, e as effects, c as color, i as isObject, d as defaults, b as isArray, v as valueOrDefault, u as unlistenArrayEvents, l as listenArrayEvents, f as resolveObjectKey, g as isNumberFinite, h as defined, s as sign, j as createContext, k as isNullOrUndef, _ as _arrayUnique, t as toRadians, m as toPercentage, n as toDimension, T as TAU, o as formatNumber, p as _angleBetween, H as HALF_PI, P as PI, q as _getStartAndCountOfVisiblePoints, w as _scaleRangesChanged, x as isNumber, y as _parseObjectDataRadialScale, z as getRelativePosition, A as _rlookupByKey, B as _lookupByKey, C as _isPointInArea, D as getAngleFromPoint, E as toPadding, F as each, G as getMaximumSize, I as _getParentNode, J as readUsedSize, K as supportsEventListenerOptions, L as throttled, M as _isDomSupported, N as _factorize, O as finiteOrDefault, Q as callback, R as _addGrace, S as _limitValue, U as toDegrees, V as _measureText, W as _int16Range, X as _alignPixel, Y as clipArea, Z as renderText, $ as unclipArea, a0 as toFont, a1 as _toLeftRightCenter, a2 as _alignStartEnd, a3 as overrides, a4 as merge, a5 as _capitalize, a6 as descriptors, a7 as isFunction, a8 as _attachContext, a9 as _createResolver, aa as _descriptors, ab as mergeIf, ac as uid, ad as debounce, ae as retinaScale, af as clearCanvas, ag as setsEqual, ah as getDatasetClipArea, ai as _elementsEqual, aj as _isClickEvent, ak as _isBetween, al as _normalizeAngle, am as _readValueToProps, an as _updateBezierControlPoints, ao as _computeSegments, ap as _boundSegments, aq as _steppedInterpolation, ar as _bezierInterpolation, as as _pointInLine, at as _steppedLineTo, au as _bezierCurveTo, av as drawPoint, aw as addRoundedRectPath, ax as toTRBL, ay as toTRBLCorners, az as _boundSegment, aA as getRtlAdapter, aB as overrideTextDirection, aC as _textX, aD as restoreTextDirection, aE as drawPointLegend, aF as distanceBetweenPoints, aG as noop, aH as _setMinAndMaxByKey, aI as niceNum, aJ as almostWhole, aK as almostEquals, aL as _decimalPlaces, aM as Ticks, aN as log10, aO as _longestText, aP as _filterBetween, aQ as _lookup } from './chunks/helpers.dataset.js';\nimport '@kurkle/color';\nclass Animator {\n constructor() {\n this._request = null;\n this._charts = new Map();\n this._running = false;\n this._lastDate = undefined;\n }\n _notify(chart, anims, date, type) {\n const callbacks = anims.listeners[type];\n const numSteps = anims.duration;\n callbacks.forEach(fn => fn({\n chart,\n initial: anims.initial,\n numSteps,\n currentStep: Math.min(date - anims.start, numSteps)\n }));\n }\n _refresh() {\n if (this._request) {\n return;\n }\n this._running = true;\n this._request = requestAnimFrame.call(window, () => {\n this._update();\n this._request = null;\n if (this._running) {\n this._refresh();\n }\n });\n }\n _update(date = Date.now()) {\n let remaining = 0;\n this._charts.forEach((anims, chart) => {\n if (!anims.running || !anims.items.length) {\n return;\n }\n const items = anims.items;\n let i = items.length - 1;\n let draw = false;\n let item;\n for (; i >= 0; --i) {\n item = items[i];\n if (item._active) {\n if (item._total > anims.duration) {\n anims.duration = item._total;\n }\n item.tick(date);\n draw = true;\n } else {\n items[i] = items[items.length - 1];\n items.pop();\n }\n }\n if (draw) {\n chart.draw();\n this._notify(chart, anims, date, 'progress');\n }\n if (!items.length) {\n anims.running = false;\n this._notify(chart, anims, date, 'complete');\n anims.initial = false;\n }\n remaining += items.length;\n });\n this._lastDate = date;\n if (remaining === 0) {\n this._running = false;\n }\n }\n _getAnims(chart) {\n const charts = this._charts;\n let anims = charts.get(chart);\n if (!anims) {\n anims = {\n running: false,\n initial: true,\n items: [],\n listeners: {\n complete: [],\n progress: []\n }\n };\n charts.set(chart, anims);\n }\n return anims;\n }\n listen(chart, event, cb) {\n this._getAnims(chart).listeners[event].push(cb);\n }\n add(chart, items) {\n if (!items || !items.length) {\n return;\n }\n this._getAnims(chart).items.push(...items);\n }\n has(chart) {\n return this._getAnims(chart).items.length > 0;\n }\n start(chart) {\n const anims = this._charts.get(chart);\n if (!anims) {\n return;\n }\n anims.running = true;\n anims.start = Date.now();\n anims.duration = anims.items.reduce((acc, cur) => Math.max(acc, cur._duration), 0);\n this._refresh();\n }\n running(chart) {\n if (!this._running) {\n return false;\n }\n const anims = this._charts.get(chart);\n if (!anims || !anims.running || !anims.items.length) {\n return false;\n }\n return true;\n }\n stop(chart) {\n const anims = this._charts.get(chart);\n if (!anims || !anims.items.length) {\n return;\n }\n const items = anims.items;\n let i = items.length - 1;\n for (; i >= 0; --i) {\n items[i].cancel();\n }\n anims.items = [];\n this._notify(chart, anims, Date.now(), 'complete');\n }\n remove(chart) {\n return this._charts.delete(chart);\n }\n}\nvar animator = /* #__PURE__ */new Animator();\nconst transparent = 'transparent';\nconst interpolators = {\n boolean(from, to, factor) {\n return factor > 0.5 ? to : from;\n },\n color(from, to, factor) {\n const c0 = color(from || transparent);\n const c1 = c0.valid && color(to || transparent);\n return c1 && c1.valid ? c1.mix(c0, factor).hexString() : to;\n },\n number(from, to, factor) {\n return from + (to - from) * factor;\n }\n};\nclass Animation {\n constructor(cfg, target, prop, to) {\n const currentValue = target[prop];\n to = resolve([cfg.to, to, currentValue, cfg.from]);\n const from = resolve([cfg.from, currentValue, to]);\n this._active = true;\n this._fn = cfg.fn || interpolators[cfg.type || typeof from];\n this._easing = effects[cfg.easing] || effects.linear;\n this._start = Math.floor(Date.now() + (cfg.delay || 0));\n this._duration = this._total = Math.floor(cfg.duration);\n this._loop = !!cfg.loop;\n this._target = target;\n this._prop = prop;\n this._from = from;\n this._to = to;\n this._promises = undefined;\n }\n active() {\n return this._active;\n }\n update(cfg, to, date) {\n if (this._active) {\n this._notify(false);\n const currentValue = this._target[this._prop];\n const elapsed = date - this._start;\n const remain = this._duration - elapsed;\n this._start = date;\n this._duration = Math.floor(Math.max(remain, cfg.duration));\n this._total += elapsed;\n this._loop = !!cfg.loop;\n this._to = resolve([cfg.to, to, currentValue, cfg.from]);\n this._from = resolve([cfg.from, currentValue, to]);\n }\n }\n cancel() {\n if (this._active) {\n this.tick(Date.now());\n this._active = false;\n this._notify(false);\n }\n }\n tick(date) {\n const elapsed = date - this._start;\n const duration = this._duration;\n const prop = this._prop;\n const from = this._from;\n const loop = this._loop;\n const to = this._to;\n let factor;\n this._active = from !== to && (loop || elapsed < duration);\n if (!this._active) {\n this._target[prop] = to;\n this._notify(true);\n return;\n }\n if (elapsed < 0) {\n this._target[prop] = from;\n return;\n }\n factor = elapsed / duration % 2;\n factor = loop && factor > 1 ? 2 - factor : factor;\n factor = this._easing(Math.min(1, Math.max(0, factor)));\n this._target[prop] = this._fn(from, to, factor);\n }\n wait() {\n const promises = this._promises || (this._promises = []);\n return new Promise((res, rej) => {\n promises.push({\n res,\n rej\n });\n });\n }\n _notify(resolved) {\n const method = resolved ? 'res' : 'rej';\n const promises = this._promises || [];\n for (let i = 0; i < promises.length; i++) {\n promises[i][method]();\n }\n }\n}\nclass Animations {\n constructor(chart, config) {\n this._chart = chart;\n this._properties = new Map();\n this.configure(config);\n }\n configure(config) {\n if (!isObject(config)) {\n return;\n }\n const animationOptions = Object.keys(defaults.animation);\n const animatedProps = this._properties;\n Object.getOwnPropertyNames(config).forEach(key => {\n const cfg = config[key];\n if (!isObject(cfg)) {\n return;\n }\n const resolved = {};\n for (const option of animationOptions) {\n resolved[option] = cfg[option];\n }\n (isArray(cfg.properties) && cfg.properties || [key]).forEach(prop => {\n if (prop === key || !animatedProps.has(prop)) {\n animatedProps.set(prop, resolved);\n }\n });\n });\n }\n _animateOptions(target, values) {\n const newOptions = values.options;\n const options = resolveTargetOptions(target, newOptions);\n if (!options) {\n return [];\n }\n const animations = this._createAnimations(options, newOptions);\n if (newOptions.$shared) {\n awaitAll(target.options.$animations, newOptions).then(() => {\n target.options = newOptions;\n }, () => {});\n }\n return animations;\n }\n _createAnimations(target, values) {\n const animatedProps = this._properties;\n const animations = [];\n const running = target.$animations || (target.$animations = {});\n const props = Object.keys(values);\n const date = Date.now();\n let i;\n for (i = props.length - 1; i >= 0; --i) {\n const prop = props[i];\n if (prop.charAt(0) === '$') {\n continue;\n }\n if (prop === 'options') {\n animations.push(...this._animateOptions(target, values));\n continue;\n }\n const value = values[prop];\n let animation = running[prop];\n const cfg = animatedProps.get(prop);\n if (animation) {\n if (cfg && animation.active()) {\n animation.update(cfg, value, date);\n continue;\n } else {\n animation.cancel();\n }\n }\n if (!cfg || !cfg.duration) {\n target[prop] = value;\n continue;\n }\n running[prop] = animation = new Animation(cfg, target, prop, value);\n animations.push(animation);\n }\n return animations;\n }\n update(target, values) {\n if (this._properties.size === 0) {\n Object.assign(target, values);\n return;\n }\n const animations = this._createAnimations(target, values);\n if (animations.length) {\n animator.add(this._chart, animations);\n return true;\n }\n }\n}\nfunction awaitAll(animations, properties) {\n const running = [];\n const keys = Object.keys(properties);\n for (let i = 0; i < keys.length; i++) {\n const anim = animations[keys[i]];\n if (anim && anim.active()) {\n running.push(anim.wait());\n }\n }\n return Promise.all(running);\n}\nfunction resolveTargetOptions(target, newOptions) {\n if (!newOptions) {\n return;\n }\n let options = target.options;\n if (!options) {\n target.options = newOptions;\n return;\n }\n if (options.$shared) {\n target.options = options = Object.assign({}, options, {\n $shared: false,\n $animations: {}\n });\n }\n return options;\n}\nfunction scaleClip(scale, allowedOverflow) {\n const opts = scale && scale.options || {};\n const reverse = opts.reverse;\n const min = opts.min === undefined ? allowedOverflow : 0;\n const max = opts.max === undefined ? allowedOverflow : 0;\n return {\n start: reverse ? max : min,\n end: reverse ? min : max\n };\n}\nfunction defaultClip(xScale, yScale, allowedOverflow) {\n if (allowedOverflow === false) {\n return false;\n }\n const x = scaleClip(xScale, allowedOverflow);\n const y = scaleClip(yScale, allowedOverflow);\n return {\n top: y.end,\n right: x.end,\n bottom: y.start,\n left: x.start\n };\n}\nfunction toClip(value) {\n let t, r, b, l;\n if (isObject(value)) {\n t = value.top;\n r = value.right;\n b = value.bottom;\n l = value.left;\n } else {\n t = r = b = l = value;\n }\n return {\n top: t,\n right: r,\n bottom: b,\n left: l,\n disabled: value === false\n };\n}\nfunction getSortedDatasetIndices(chart, filterVisible) {\n const keys = [];\n const metasets = chart._getSortedDatasetMetas(filterVisible);\n let i, ilen;\n for (i = 0, ilen = metasets.length; i < ilen; ++i) {\n keys.push(metasets[i].index);\n }\n return keys;\n}\nfunction applyStack(stack, value, dsIndex, options = {}) {\n const keys = stack.keys;\n const singleMode = options.mode === 'single';\n let i, ilen, datasetIndex, otherValue;\n if (value === null) {\n return;\n }\n let found = false;\n for (i = 0, ilen = keys.length; i < ilen; ++i) {\n datasetIndex = +keys[i];\n if (datasetIndex === dsIndex) {\n found = true;\n if (options.all) {\n continue;\n }\n break;\n }\n otherValue = stack.values[datasetIndex];\n if (isNumberFinite(otherValue) && (singleMode || value === 0 || sign(value) === sign(otherValue))) {\n value += otherValue;\n }\n }\n if (!found && !options.all) {\n return 0;\n }\n return value;\n}\nfunction convertObjectDataToArray(data, meta) {\n const {\n iScale,\n vScale\n } = meta;\n const iAxisKey = iScale.axis === 'x' ? 'x' : 'y';\n const vAxisKey = vScale.axis === 'x' ? 'x' : 'y';\n const keys = Object.keys(data);\n const adata = new Array(keys.length);\n let i, ilen, key;\n for (i = 0, ilen = keys.length; i < ilen; ++i) {\n key = keys[i];\n adata[i] = {\n [iAxisKey]: key,\n [vAxisKey]: data[key]\n };\n }\n return adata;\n}\nfunction isStacked(scale, meta) {\n const stacked = scale && scale.options.stacked;\n return stacked || stacked === undefined && meta.stack !== undefined;\n}\nfunction getStackKey(indexScale, valueScale, meta) {\n return `${indexScale.id}.${valueScale.id}.${meta.stack || meta.type}`;\n}\nfunction getUserBounds(scale) {\n const {\n min,\n max,\n minDefined,\n maxDefined\n } = scale.getUserBounds();\n return {\n min: minDefined ? min : Number.NEGATIVE_INFINITY,\n max: maxDefined ? max : Number.POSITIVE_INFINITY\n };\n}\nfunction getOrCreateStack(stacks, stackKey, indexValue) {\n const subStack = stacks[stackKey] || (stacks[stackKey] = {});\n return subStack[indexValue] || (subStack[indexValue] = {});\n}\nfunction getLastIndexInStack(stack, vScale, positive, type) {\n for (const meta of vScale.getMatchingVisibleMetas(type).reverse()) {\n const value = stack[meta.index];\n if (positive && value > 0 || !positive && value < 0) {\n return meta.index;\n }\n }\n return null;\n}\nfunction updateStacks(controller, parsed) {\n const {\n chart,\n _cachedMeta: meta\n } = controller;\n const stacks = chart._stacks || (chart._stacks = {});\n const {\n iScale,\n vScale,\n index: datasetIndex\n } = meta;\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n const key = getStackKey(iScale, vScale, meta);\n const ilen = parsed.length;\n let stack;\n for (let i = 0; i < ilen; ++i) {\n const item = parsed[i];\n const {\n [iAxis]: index,\n [vAxis]: value\n } = item;\n const itemStacks = item._stacks || (item._stacks = {});\n stack = itemStacks[vAxis] = getOrCreateStack(stacks, key, index);\n stack[datasetIndex] = value;\n stack._top = getLastIndexInStack(stack, vScale, true, meta.type);\n stack._bottom = getLastIndexInStack(stack, vScale, false, meta.type);\n const visualValues = stack._visualValues || (stack._visualValues = {});\n visualValues[datasetIndex] = value;\n }\n}\nfunction getFirstScaleId(chart, axis) {\n const scales = chart.scales;\n return Object.keys(scales).filter(key => scales[key].axis === axis).shift();\n}\nfunction createDatasetContext(parent, index) {\n return createContext(parent, {\n active: false,\n dataset: undefined,\n datasetIndex: index,\n index,\n mode: 'default',\n type: 'dataset'\n });\n}\nfunction createDataContext(parent, index, element) {\n return createContext(parent, {\n active: false,\n dataIndex: index,\n parsed: undefined,\n raw: undefined,\n element,\n index,\n mode: 'default',\n type: 'data'\n });\n}\nfunction clearStacks(meta, items) {\n const datasetIndex = meta.controller.index;\n const axis = meta.vScale && meta.vScale.axis;\n if (!axis) {\n return;\n }\n items = items || meta._parsed;\n for (const parsed of items) {\n const stacks = parsed._stacks;\n if (!stacks || stacks[axis] === undefined || stacks[axis][datasetIndex] === undefined) {\n return;\n }\n delete stacks[axis][datasetIndex];\n if (stacks[axis]._visualValues !== undefined && stacks[axis]._visualValues[datasetIndex] !== undefined) {\n delete stacks[axis]._visualValues[datasetIndex];\n }\n }\n}\nconst isDirectUpdateMode = mode => mode === 'reset' || mode === 'none';\nconst cloneIfNotShared = (cached, shared) => shared ? cached : Object.assign({}, cached);\nconst createStack = (canStack, meta, chart) => canStack && !meta.hidden && meta._stacked && {\n keys: getSortedDatasetIndices(chart, true),\n values: null\n};\nlet DatasetController = /*#__PURE__*/(() => {\n class DatasetController {\n static defaults = {};\n static datasetElementType = null;\n static dataElementType = null;\n constructor(chart, datasetIndex) {\n this.chart = chart;\n this._ctx = chart.ctx;\n this.index = datasetIndex;\n this._cachedDataOpts = {};\n this._cachedMeta = this.getMeta();\n this._type = this._cachedMeta.type;\n this.options = undefined;\n this._parsing = false;\n this._data = undefined;\n this._objectData = undefined;\n this._sharedOptions = undefined;\n this._drawStart = undefined;\n this._drawCount = undefined;\n this.enableOptionSharing = false;\n this.supportsDecimation = false;\n this.$context = undefined;\n this._syncList = [];\n this.datasetElementType = new.target.datasetElementType;\n this.dataElementType = new.target.dataElementType;\n this.initialize();\n }\n initialize() {\n const meta = this._cachedMeta;\n this.configure();\n this.linkScales();\n meta._stacked = isStacked(meta.vScale, meta);\n this.addElements();\n if (this.options.fill && !this.chart.isPluginEnabled('filler')) {\n console.warn(\"Tried to use the 'fill' option without the 'Filler' plugin enabled. Please import and register the 'Filler' plugin and make sure it is not disabled in the options\");\n }\n }\n updateIndex(datasetIndex) {\n if (this.index !== datasetIndex) {\n clearStacks(this._cachedMeta);\n }\n this.index = datasetIndex;\n }\n linkScales() {\n const chart = this.chart;\n const meta = this._cachedMeta;\n const dataset = this.getDataset();\n const chooseId = (axis, x, y, r) => axis === 'x' ? x : axis === 'r' ? r : y;\n const xid = meta.xAxisID = valueOrDefault(dataset.xAxisID, getFirstScaleId(chart, 'x'));\n const yid = meta.yAxisID = valueOrDefault(dataset.yAxisID, getFirstScaleId(chart, 'y'));\n const rid = meta.rAxisID = valueOrDefault(dataset.rAxisID, getFirstScaleId(chart, 'r'));\n const indexAxis = meta.indexAxis;\n const iid = meta.iAxisID = chooseId(indexAxis, xid, yid, rid);\n const vid = meta.vAxisID = chooseId(indexAxis, yid, xid, rid);\n meta.xScale = this.getScaleForId(xid);\n meta.yScale = this.getScaleForId(yid);\n meta.rScale = this.getScaleForId(rid);\n meta.iScale = this.getScaleForId(iid);\n meta.vScale = this.getScaleForId(vid);\n }\n getDataset() {\n return this.chart.data.datasets[this.index];\n }\n getMeta() {\n return this.chart.getDatasetMeta(this.index);\n }\n getScaleForId(scaleID) {\n return this.chart.scales[scaleID];\n }\n _getOtherScale(scale) {\n const meta = this._cachedMeta;\n return scale === meta.iScale ? meta.vScale : meta.iScale;\n }\n reset() {\n this._update('reset');\n }\n _destroy() {\n const meta = this._cachedMeta;\n if (this._data) {\n unlistenArrayEvents(this._data, this);\n }\n if (meta._stacked) {\n clearStacks(meta);\n }\n }\n _dataCheck() {\n const dataset = this.getDataset();\n const data = dataset.data || (dataset.data = []);\n const _data = this._data;\n if (isObject(data)) {\n const meta = this._cachedMeta;\n this._data = convertObjectDataToArray(data, meta);\n } else if (_data !== data) {\n if (_data) {\n unlistenArrayEvents(_data, this);\n const meta = this._cachedMeta;\n clearStacks(meta);\n meta._parsed = [];\n }\n if (data && Object.isExtensible(data)) {\n listenArrayEvents(data, this);\n }\n this._syncList = [];\n this._data = data;\n }\n }\n addElements() {\n const meta = this._cachedMeta;\n this._dataCheck();\n if (this.datasetElementType) {\n meta.dataset = new this.datasetElementType();\n }\n }\n buildOrUpdateElements(resetNewElements) {\n const meta = this._cachedMeta;\n const dataset = this.getDataset();\n let stackChanged = false;\n this._dataCheck();\n const oldStacked = meta._stacked;\n meta._stacked = isStacked(meta.vScale, meta);\n if (meta.stack !== dataset.stack) {\n stackChanged = true;\n clearStacks(meta);\n meta.stack = dataset.stack;\n }\n this._resyncElements(resetNewElements);\n if (stackChanged || oldStacked !== meta._stacked) {\n updateStacks(this, meta._parsed);\n meta._stacked = isStacked(meta.vScale, meta);\n }\n }\n configure() {\n const config = this.chart.config;\n const scopeKeys = config.datasetScopeKeys(this._type);\n const scopes = config.getOptionScopes(this.getDataset(), scopeKeys, true);\n this.options = config.createResolver(scopes, this.getContext());\n this._parsing = this.options.parsing;\n this._cachedDataOpts = {};\n }\n parse(start, count) {\n const {\n _cachedMeta: meta,\n _data: data\n } = this;\n const {\n iScale,\n _stacked\n } = meta;\n const iAxis = iScale.axis;\n let sorted = start === 0 && count === data.length ? true : meta._sorted;\n let prev = start > 0 && meta._parsed[start - 1];\n let i, cur, parsed;\n if (this._parsing === false) {\n meta._parsed = data;\n meta._sorted = true;\n parsed = data;\n } else {\n if (isArray(data[start])) {\n parsed = this.parseArrayData(meta, data, start, count);\n } else if (isObject(data[start])) {\n parsed = this.parseObjectData(meta, data, start, count);\n } else {\n parsed = this.parsePrimitiveData(meta, data, start, count);\n }\n const isNotInOrderComparedToPrev = () => cur[iAxis] === null || prev && cur[iAxis] < prev[iAxis];\n for (i = 0; i < count; ++i) {\n meta._parsed[i + start] = cur = parsed[i];\n if (sorted) {\n if (isNotInOrderComparedToPrev()) {\n sorted = false;\n }\n prev = cur;\n }\n }\n meta._sorted = sorted;\n }\n if (_stacked) {\n updateStacks(this, parsed);\n }\n }\n parsePrimitiveData(meta, data, start, count) {\n const {\n iScale,\n vScale\n } = meta;\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n const labels = iScale.getLabels();\n const singleScale = iScale === vScale;\n const parsed = new Array(count);\n let i, ilen, index;\n for (i = 0, ilen = count; i < ilen; ++i) {\n index = i + start;\n parsed[i] = {\n [iAxis]: singleScale || iScale.parse(labels[index], index),\n [vAxis]: vScale.parse(data[index], index)\n };\n }\n return parsed;\n }\n parseArrayData(meta, data, start, count) {\n const {\n xScale,\n yScale\n } = meta;\n const parsed = new Array(count);\n let i, ilen, index, item;\n for (i = 0, ilen = count; i < ilen; ++i) {\n index = i + start;\n item = data[index];\n parsed[i] = {\n x: xScale.parse(item[0], index),\n y: yScale.parse(item[1], index)\n };\n }\n return parsed;\n }\n parseObjectData(meta, data, start, count) {\n const {\n xScale,\n yScale\n } = meta;\n const {\n xAxisKey = 'x',\n yAxisKey = 'y'\n } = this._parsing;\n const parsed = new Array(count);\n let i, ilen, index, item;\n for (i = 0, ilen = count; i < ilen; ++i) {\n index = i + start;\n item = data[index];\n parsed[i] = {\n x: xScale.parse(resolveObjectKey(item, xAxisKey), index),\n y: yScale.parse(resolveObjectKey(item, yAxisKey), index)\n };\n }\n return parsed;\n }\n getParsed(index) {\n return this._cachedMeta._parsed[index];\n }\n getDataElement(index) {\n return this._cachedMeta.data[index];\n }\n applyStack(scale, parsed, mode) {\n const chart = this.chart;\n const meta = this._cachedMeta;\n const value = parsed[scale.axis];\n const stack = {\n keys: getSortedDatasetIndices(chart, true),\n values: parsed._stacks[scale.axis]._visualValues\n };\n return applyStack(stack, value, meta.index, {\n mode\n });\n }\n updateRangeFromParsed(range, scale, parsed, stack) {\n const parsedValue = parsed[scale.axis];\n let value = parsedValue === null ? NaN : parsedValue;\n const values = stack && parsed._stacks[scale.axis];\n if (stack && values) {\n stack.values = values;\n value = applyStack(stack, parsedValue, this._cachedMeta.index);\n }\n range.min = Math.min(range.min, value);\n range.max = Math.max(range.max, value);\n }\n getMinMax(scale, canStack) {\n const meta = this._cachedMeta;\n const _parsed = meta._parsed;\n const sorted = meta._sorted && scale === meta.iScale;\n const ilen = _parsed.length;\n const otherScale = this._getOtherScale(scale);\n const stack = createStack(canStack, meta, this.chart);\n const range = {\n min: Number.POSITIVE_INFINITY,\n max: Number.NEGATIVE_INFINITY\n };\n const {\n min: otherMin,\n max: otherMax\n } = getUserBounds(otherScale);\n let i, parsed;\n function _skip() {\n parsed = _parsed[i];\n const otherValue = parsed[otherScale.axis];\n return !isNumberFinite(parsed[scale.axis]) || otherMin > otherValue || otherMax < otherValue;\n }\n for (i = 0; i < ilen; ++i) {\n if (_skip()) {\n continue;\n }\n this.updateRangeFromParsed(range, scale, parsed, stack);\n if (sorted) {\n break;\n }\n }\n if (sorted) {\n for (i = ilen - 1; i >= 0; --i) {\n if (_skip()) {\n continue;\n }\n this.updateRangeFromParsed(range, scale, parsed, stack);\n break;\n }\n }\n return range;\n }\n getAllParsedValues(scale) {\n const parsed = this._cachedMeta._parsed;\n const values = [];\n let i, ilen, value;\n for (i = 0, ilen = parsed.length; i < ilen; ++i) {\n value = parsed[i][scale.axis];\n if (isNumberFinite(value)) {\n values.push(value);\n }\n }\n return values;\n }\n getMaxOverflow() {\n return false;\n }\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const iScale = meta.iScale;\n const vScale = meta.vScale;\n const parsed = this.getParsed(index);\n return {\n label: iScale ? '' + iScale.getLabelForValue(parsed[iScale.axis]) : '',\n value: vScale ? '' + vScale.getLabelForValue(parsed[vScale.axis]) : ''\n };\n }\n _update(mode) {\n const meta = this._cachedMeta;\n this.update(mode || 'default');\n meta._clip = toClip(valueOrDefault(this.options.clip, defaultClip(meta.xScale, meta.yScale, this.getMaxOverflow())));\n }\n update(mode) {}\n draw() {\n const ctx = this._ctx;\n const chart = this.chart;\n const meta = this._cachedMeta;\n const elements = meta.data || [];\n const area = chart.chartArea;\n const active = [];\n const start = this._drawStart || 0;\n const count = this._drawCount || elements.length - start;\n const drawActiveElementsOnTop = this.options.drawActiveElementsOnTop;\n let i;\n if (meta.dataset) {\n meta.dataset.draw(ctx, area, start, count);\n }\n for (i = start; i < start + count; ++i) {\n const element = elements[i];\n if (element.hidden) {\n continue;\n }\n if (element.active && drawActiveElementsOnTop) {\n active.push(element);\n } else {\n element.draw(ctx, area);\n }\n }\n for (i = 0; i < active.length; ++i) {\n active[i].draw(ctx, area);\n }\n }\n getStyle(index, active) {\n const mode = active ? 'active' : 'default';\n return index === undefined && this._cachedMeta.dataset ? this.resolveDatasetElementOptions(mode) : this.resolveDataElementOptions(index || 0, mode);\n }\n getContext(index, active, mode) {\n const dataset = this.getDataset();\n let context;\n if (index >= 0 && index < this._cachedMeta.data.length) {\n const element = this._cachedMeta.data[index];\n context = element.$context || (element.$context = createDataContext(this.getContext(), index, element));\n context.parsed = this.getParsed(index);\n context.raw = dataset.data[index];\n context.index = context.dataIndex = index;\n } else {\n context = this.$context || (this.$context = createDatasetContext(this.chart.getContext(), this.index));\n context.dataset = dataset;\n context.index = context.datasetIndex = this.index;\n }\n context.active = !!active;\n context.mode = mode;\n return context;\n }\n resolveDatasetElementOptions(mode) {\n return this._resolveElementOptions(this.datasetElementType.id, mode);\n }\n resolveDataElementOptions(index, mode) {\n return this._resolveElementOptions(this.dataElementType.id, mode, index);\n }\n _resolveElementOptions(elementType, mode = 'default', index) {\n const active = mode === 'active';\n const cache = this._cachedDataOpts;\n const cacheKey = elementType + '-' + mode;\n const cached = cache[cacheKey];\n const sharing = this.enableOptionSharing && defined(index);\n if (cached) {\n return cloneIfNotShared(cached, sharing);\n }\n const config = this.chart.config;\n const scopeKeys = config.datasetElementScopeKeys(this._type, elementType);\n const prefixes = active ? [`${elementType}Hover`, 'hover', elementType, ''] : [elementType, ''];\n const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n const names = Object.keys(defaults.elements[elementType]);\n const context = () => this.getContext(index, active, mode);\n const values = config.resolveNamedOptions(scopes, names, context, prefixes);\n if (values.$shared) {\n values.$shared = sharing;\n cache[cacheKey] = Object.freeze(cloneIfNotShared(values, sharing));\n }\n return values;\n }\n _resolveAnimations(index, transition, active) {\n const chart = this.chart;\n const cache = this._cachedDataOpts;\n const cacheKey = `animation-${transition}`;\n const cached = cache[cacheKey];\n if (cached) {\n return cached;\n }\n let options;\n if (chart.options.animation !== false) {\n const config = this.chart.config;\n const scopeKeys = config.datasetAnimationScopeKeys(this._type, transition);\n const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n options = config.createResolver(scopes, this.getContext(index, active, transition));\n }\n const animations = new Animations(chart, options && options.animations);\n if (options && options._cacheable) {\n cache[cacheKey] = Object.freeze(animations);\n }\n return animations;\n }\n getSharedOptions(options) {\n if (!options.$shared) {\n return;\n }\n return this._sharedOptions || (this._sharedOptions = Object.assign({}, options));\n }\n includeOptions(mode, sharedOptions) {\n return !sharedOptions || isDirectUpdateMode(mode) || this.chart._animationsDisabled;\n }\n _getSharedOptions(start, mode) {\n const firstOpts = this.resolveDataElementOptions(start, mode);\n const previouslySharedOptions = this._sharedOptions;\n const sharedOptions = this.getSharedOptions(firstOpts);\n const includeOptions = this.includeOptions(mode, sharedOptions) || sharedOptions !== previouslySharedOptions;\n this.updateSharedOptions(sharedOptions, mode, firstOpts);\n return {\n sharedOptions,\n includeOptions\n };\n }\n updateElement(element, index, properties, mode) {\n if (isDirectUpdateMode(mode)) {\n Object.assign(element, properties);\n } else {\n this._resolveAnimations(index, mode).update(element, properties);\n }\n }\n updateSharedOptions(sharedOptions, mode, newOptions) {\n if (sharedOptions && !isDirectUpdateMode(mode)) {\n this._resolveAnimations(undefined, mode).update(sharedOptions, newOptions);\n }\n }\n _setStyle(element, index, mode, active) {\n element.active = active;\n const options = this.getStyle(index, active);\n this._resolveAnimations(index, mode, active).update(element, {\n options: !active && this.getSharedOptions(options) || options\n });\n }\n removeHoverStyle(element, datasetIndex, index) {\n this._setStyle(element, index, 'active', false);\n }\n setHoverStyle(element, datasetIndex, index) {\n this._setStyle(element, index, 'active', true);\n }\n _removeDatasetHoverStyle() {\n const element = this._cachedMeta.dataset;\n if (element) {\n this._setStyle(element, undefined, 'active', false);\n }\n }\n _setDatasetHoverStyle() {\n const element = this._cachedMeta.dataset;\n if (element) {\n this._setStyle(element, undefined, 'active', true);\n }\n }\n _resyncElements(resetNewElements) {\n const data = this._data;\n const elements = this._cachedMeta.data;\n for (const [method, arg1, arg2] of this._syncList) {\n this[method](arg1, arg2);\n }\n this._syncList = [];\n const numMeta = elements.length;\n const numData = data.length;\n const count = Math.min(numData, numMeta);\n if (count) {\n this.parse(0, count);\n }\n if (numData > numMeta) {\n this._insertElements(numMeta, numData - numMeta, resetNewElements);\n } else if (numData < numMeta) {\n this._removeElements(numData, numMeta - numData);\n }\n }\n _insertElements(start, count, resetNewElements = true) {\n const meta = this._cachedMeta;\n const data = meta.data;\n const end = start + count;\n let i;\n const move = arr => {\n arr.length += count;\n for (i = arr.length - 1; i >= end; i--) {\n arr[i] = arr[i - count];\n }\n };\n move(data);\n for (i = start; i < end; ++i) {\n data[i] = new this.dataElementType();\n }\n if (this._parsing) {\n move(meta._parsed);\n }\n this.parse(start, count);\n if (resetNewElements) {\n this.updateElements(data, start, count, 'reset');\n }\n }\n updateElements(element, start, count, mode) {}\n _removeElements(start, count) {\n const meta = this._cachedMeta;\n if (this._parsing) {\n const removed = meta._parsed.splice(start, count);\n if (meta._stacked) {\n clearStacks(meta, removed);\n }\n }\n meta.data.splice(start, count);\n }\n _sync(args) {\n if (this._parsing) {\n this._syncList.push(args);\n } else {\n const [method, arg1, arg2] = args;\n this[method](arg1, arg2);\n }\n this.chart._dataChanges.push([this.index, ...args]);\n }\n _onDataPush() {\n const count = arguments.length;\n this._sync(['_insertElements', this.getDataset().data.length - count, count]);\n }\n _onDataPop() {\n this._sync(['_removeElements', this._cachedMeta.data.length - 1, 1]);\n }\n _onDataShift() {\n this._sync(['_removeElements', 0, 1]);\n }\n _onDataSplice(start, count) {\n if (count) {\n this._sync(['_removeElements', start, count]);\n }\n const newCount = arguments.length - 2;\n if (newCount) {\n this._sync(['_insertElements', start, newCount]);\n }\n }\n _onDataUnshift() {\n this._sync(['_insertElements', 0, arguments.length]);\n }\n }\n return DatasetController;\n})();\nfunction getAllScaleValues(scale, type) {\n if (!scale._cache.$bar) {\n const visibleMetas = scale.getMatchingVisibleMetas(type);\n let values = [];\n for (let i = 0, ilen = visibleMetas.length; i < ilen; i++) {\n values = values.concat(visibleMetas[i].controller.getAllParsedValues(scale));\n }\n scale._cache.$bar = _arrayUnique(values.sort((a, b) => a - b));\n }\n return scale._cache.$bar;\n}\nfunction computeMinSampleSize(meta) {\n const scale = meta.iScale;\n const values = getAllScaleValues(scale, meta.type);\n let min = scale._length;\n let i, ilen, curr, prev;\n const updateMinAndPrev = () => {\n if (curr === 32767 || curr === -32768) {\n return;\n }\n if (defined(prev)) {\n min = Math.min(min, Math.abs(curr - prev) || min);\n }\n prev = curr;\n };\n for (i = 0, ilen = values.length; i < ilen; ++i) {\n curr = scale.getPixelForValue(values[i]);\n updateMinAndPrev();\n }\n prev = undefined;\n for (i = 0, ilen = scale.ticks.length; i < ilen; ++i) {\n curr = scale.getPixelForTick(i);\n updateMinAndPrev();\n }\n return min;\n}\nfunction computeFitCategoryTraits(index, ruler, options, stackCount) {\n const thickness = options.barThickness;\n let size, ratio;\n if (isNullOrUndef(thickness)) {\n size = ruler.min * options.categoryPercentage;\n ratio = options.barPercentage;\n } else {\n size = thickness * stackCount;\n ratio = 1;\n }\n return {\n chunk: size / stackCount,\n ratio,\n start: ruler.pixels[index] - size / 2\n };\n}\nfunction computeFlexCategoryTraits(index, ruler, options, stackCount) {\n const pixels = ruler.pixels;\n const curr = pixels[index];\n let prev = index > 0 ? pixels[index - 1] : null;\n let next = index < pixels.length - 1 ? pixels[index + 1] : null;\n const percent = options.categoryPercentage;\n if (prev === null) {\n prev = curr - (next === null ? ruler.end - ruler.start : next - curr);\n }\n if (next === null) {\n next = curr + curr - prev;\n }\n const start = curr - (curr - Math.min(prev, next)) / 2 * percent;\n const size = Math.abs(next - prev) / 2 * percent;\n return {\n chunk: size / stackCount,\n ratio: options.barPercentage,\n start\n };\n}\nfunction parseFloatBar(entry, item, vScale, i) {\n const startValue = vScale.parse(entry[0], i);\n const endValue = vScale.parse(entry[1], i);\n const min = Math.min(startValue, endValue);\n const max = Math.max(startValue, endValue);\n let barStart = min;\n let barEnd = max;\n if (Math.abs(min) > Math.abs(max)) {\n barStart = max;\n barEnd = min;\n }\n item[vScale.axis] = barEnd;\n item._custom = {\n barStart,\n barEnd,\n start: startValue,\n end: endValue,\n min,\n max\n };\n}\nfunction parseValue(entry, item, vScale, i) {\n if (isArray(entry)) {\n parseFloatBar(entry, item, vScale, i);\n } else {\n item[vScale.axis] = vScale.parse(entry, i);\n }\n return item;\n}\nfunction parseArrayOrPrimitive(meta, data, start, count) {\n const iScale = meta.iScale;\n const vScale = meta.vScale;\n const labels = iScale.getLabels();\n const singleScale = iScale === vScale;\n const parsed = [];\n let i, ilen, item, entry;\n for (i = start, ilen = start + count; i < ilen; ++i) {\n entry = data[i];\n item = {};\n item[iScale.axis] = singleScale || iScale.parse(labels[i], i);\n parsed.push(parseValue(entry, item, vScale, i));\n }\n return parsed;\n}\nfunction isFloatBar(custom) {\n return custom && custom.barStart !== undefined && custom.barEnd !== undefined;\n}\nfunction barSign(size, vScale, actualBase) {\n if (size !== 0) {\n return sign(size);\n }\n return (vScale.isHorizontal() ? 1 : -1) * (vScale.min >= actualBase ? 1 : -1);\n}\nfunction borderProps(properties) {\n let reverse, start, end, top, bottom;\n if (properties.horizontal) {\n reverse = properties.base > properties.x;\n start = 'left';\n end = 'right';\n } else {\n reverse = properties.base < properties.y;\n start = 'bottom';\n end = 'top';\n }\n if (reverse) {\n top = 'end';\n bottom = 'start';\n } else {\n top = 'start';\n bottom = 'end';\n }\n return {\n start,\n end,\n reverse,\n top,\n bottom\n };\n}\nfunction setBorderSkipped(properties, options, stack, index) {\n let edge = options.borderSkipped;\n const res = {};\n if (!edge) {\n properties.borderSkipped = res;\n return;\n }\n if (edge === true) {\n properties.borderSkipped = {\n top: true,\n right: true,\n bottom: true,\n left: true\n };\n return;\n }\n const {\n start,\n end,\n reverse,\n top,\n bottom\n } = borderProps(properties);\n if (edge === 'middle' && stack) {\n properties.enableBorderRadius = true;\n if ((stack._top || 0) === index) {\n edge = top;\n } else if ((stack._bottom || 0) === index) {\n edge = bottom;\n } else {\n res[parseEdge(bottom, start, end, reverse)] = true;\n edge = top;\n }\n }\n res[parseEdge(edge, start, end, reverse)] = true;\n properties.borderSkipped = res;\n}\nfunction parseEdge(edge, a, b, reverse) {\n if (reverse) {\n edge = swap(edge, a, b);\n edge = startEnd(edge, b, a);\n } else {\n edge = startEnd(edge, a, b);\n }\n return edge;\n}\nfunction swap(orig, v1, v2) {\n return orig === v1 ? v2 : orig === v2 ? v1 : orig;\n}\nfunction startEnd(v, start, end) {\n return v === 'start' ? start : v === 'end' ? end : v;\n}\nfunction setInflateAmount(properties, {\n inflateAmount\n}, ratio) {\n properties.inflateAmount = inflateAmount === 'auto' ? ratio === 1 ? 0.33 : 0 : inflateAmount;\n}\nlet BarController = /*#__PURE__*/(() => {\n class BarController extends DatasetController {\n static id = 'bar';\n static defaults = {\n datasetElementType: false,\n dataElementType: 'bar',\n categoryPercentage: 0.8,\n barPercentage: 0.9,\n grouped: true,\n animations: {\n numbers: {\n type: 'number',\n properties: ['x', 'y', 'base', 'width', 'height']\n }\n }\n };\n static overrides = {\n scales: {\n _index_: {\n type: 'category',\n offset: true,\n grid: {\n offset: true\n }\n },\n _value_: {\n type: 'linear',\n beginAtZero: true\n }\n }\n };\n parsePrimitiveData(meta, data, start, count) {\n return parseArrayOrPrimitive(meta, data, start, count);\n }\n parseArrayData(meta, data, start, count) {\n return parseArrayOrPrimitive(meta, data, start, count);\n }\n parseObjectData(meta, data, start, count) {\n const {\n iScale,\n vScale\n } = meta;\n const {\n xAxisKey = 'x',\n yAxisKey = 'y'\n } = this._parsing;\n const iAxisKey = iScale.axis === 'x' ? xAxisKey : yAxisKey;\n const vAxisKey = vScale.axis === 'x' ? xAxisKey : yAxisKey;\n const parsed = [];\n let i, ilen, item, obj;\n for (i = start, ilen = start + count; i < ilen; ++i) {\n obj = data[i];\n item = {};\n item[iScale.axis] = iScale.parse(resolveObjectKey(obj, iAxisKey), i);\n parsed.push(parseValue(resolveObjectKey(obj, vAxisKey), item, vScale, i));\n }\n return parsed;\n }\n updateRangeFromParsed(range, scale, parsed, stack) {\n super.updateRangeFromParsed(range, scale, parsed, stack);\n const custom = parsed._custom;\n if (custom && scale === this._cachedMeta.vScale) {\n range.min = Math.min(range.min, custom.min);\n range.max = Math.max(range.max, custom.max);\n }\n }\n getMaxOverflow() {\n return 0;\n }\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const {\n iScale,\n vScale\n } = meta;\n const parsed = this.getParsed(index);\n const custom = parsed._custom;\n const value = isFloatBar(custom) ? '[' + custom.start + ', ' + custom.end + ']' : '' + vScale.getLabelForValue(parsed[vScale.axis]);\n return {\n label: '' + iScale.getLabelForValue(parsed[iScale.axis]),\n value\n };\n }\n initialize() {\n this.enableOptionSharing = true;\n super.initialize();\n const meta = this._cachedMeta;\n meta.stack = this.getDataset().stack;\n }\n update(mode) {\n const meta = this._cachedMeta;\n this.updateElements(meta.data, 0, meta.data.length, mode);\n }\n updateElements(bars, start, count, mode) {\n const reset = mode === 'reset';\n const {\n index,\n _cachedMeta: {\n vScale\n }\n } = this;\n const base = vScale.getBasePixel();\n const horizontal = vScale.isHorizontal();\n const ruler = this._getRuler();\n const {\n sharedOptions,\n includeOptions\n } = this._getSharedOptions(start, mode);\n for (let i = start; i < start + count; i++) {\n const parsed = this.getParsed(i);\n const vpixels = reset || isNullOrUndef(parsed[vScale.axis]) ? {\n base,\n head: base\n } : this._calculateBarValuePixels(i);\n const ipixels = this._calculateBarIndexPixels(i, ruler);\n const stack = (parsed._stacks || {})[vScale.axis];\n const properties = {\n horizontal,\n base: vpixels.base,\n enableBorderRadius: !stack || isFloatBar(parsed._custom) || index === stack._top || index === stack._bottom,\n x: horizontal ? vpixels.head : ipixels.center,\n y: horizontal ? ipixels.center : vpixels.head,\n height: horizontal ? ipixels.size : Math.abs(vpixels.size),\n width: horizontal ? Math.abs(vpixels.size) : ipixels.size\n };\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, bars[i].active ? 'active' : mode);\n }\n const options = properties.options || bars[i].options;\n setBorderSkipped(properties, options, stack, index);\n setInflateAmount(properties, options, ruler.ratio);\n this.updateElement(bars[i], i, properties, mode);\n }\n }\n _getStacks(last, dataIndex) {\n const {\n iScale\n } = this._cachedMeta;\n const metasets = iScale.getMatchingVisibleMetas(this._type).filter(meta => meta.controller.options.grouped);\n const stacked = iScale.options.stacked;\n const stacks = [];\n const currentParsed = this._cachedMeta.controller.getParsed(dataIndex);\n const iScaleValue = currentParsed && currentParsed[iScale.axis];\n const skipNull = meta => {\n const parsed = meta._parsed.find(item => item[iScale.axis] === iScaleValue);\n const val = parsed && parsed[meta.vScale.axis];\n if (isNullOrUndef(val) || isNaN(val)) {\n return true;\n }\n };\n for (const meta of metasets) {\n if (dataIndex !== undefined && skipNull(meta)) {\n continue;\n }\n if (stacked === false || stacks.indexOf(meta.stack) === -1 || stacked === undefined && meta.stack === undefined) {\n stacks.push(meta.stack);\n }\n if (meta.index === last) {\n break;\n }\n }\n if (!stacks.length) {\n stacks.push(undefined);\n }\n return stacks;\n }\n _getStackCount(index) {\n return this._getStacks(undefined, index).length;\n }\n _getAxisCount() {\n return this._getAxis().length;\n }\n getFirstScaleIdForIndexAxis() {\n const scales = this.chart.scales;\n const indexScaleId = this.chart.options.indexAxis;\n return Object.keys(scales).filter(key => scales[key].axis === indexScaleId).shift();\n }\n _getAxis() {\n const axis = {};\n const firstScaleAxisId = this.getFirstScaleIdForIndexAxis();\n for (const dataset of this.chart.data.datasets) {\n axis[valueOrDefault(this.chart.options.indexAxis === 'x' ? dataset.xAxisID : dataset.yAxisID, firstScaleAxisId)] = true;\n }\n return Object.keys(axis);\n }\n _getStackIndex(datasetIndex, name, dataIndex) {\n const stacks = this._getStacks(datasetIndex, dataIndex);\n const index = name !== undefined ? stacks.indexOf(name) : -1;\n return index === -1 ? stacks.length - 1 : index;\n }\n _getRuler() {\n const opts = this.options;\n const meta = this._cachedMeta;\n const iScale = meta.iScale;\n const pixels = [];\n let i, ilen;\n for (i = 0, ilen = meta.data.length; i < ilen; ++i) {\n pixels.push(iScale.getPixelForValue(this.getParsed(i)[iScale.axis], i));\n }\n const barThickness = opts.barThickness;\n const min = barThickness || computeMinSampleSize(meta);\n return {\n min,\n pixels,\n start: iScale._startPixel,\n end: iScale._endPixel,\n stackCount: this._getStackCount(),\n scale: iScale,\n grouped: opts.grouped,\n ratio: barThickness ? 1 : opts.categoryPercentage * opts.barPercentage\n };\n }\n _calculateBarValuePixels(index) {\n const {\n _cachedMeta: {\n vScale,\n _stacked,\n index: datasetIndex\n },\n options: {\n base: baseValue,\n minBarLength\n }\n } = this;\n const actualBase = baseValue || 0;\n const parsed = this.getParsed(index);\n const custom = parsed._custom;\n const floating = isFloatBar(custom);\n let value = parsed[vScale.axis];\n let start = 0;\n let length = _stacked ? this.applyStack(vScale, parsed, _stacked) : value;\n let head, size;\n if (length !== value) {\n start = length - value;\n length = value;\n }\n if (floating) {\n value = custom.barStart;\n length = custom.barEnd - custom.barStart;\n if (value !== 0 && sign(value) !== sign(custom.barEnd)) {\n start = 0;\n }\n start += value;\n }\n const startValue = !isNullOrUndef(baseValue) && !floating ? baseValue : start;\n let base = vScale.getPixelForValue(startValue);\n if (this.chart.getDataVisibility(index)) {\n head = vScale.getPixelForValue(start + length);\n } else {\n head = base;\n }\n size = head - base;\n if (Math.abs(size) < minBarLength) {\n size = barSign(size, vScale, actualBase) * minBarLength;\n if (value === actualBase) {\n base -= size / 2;\n }\n const startPixel = vScale.getPixelForDecimal(0);\n const endPixel = vScale.getPixelForDecimal(1);\n const min = Math.min(startPixel, endPixel);\n const max = Math.max(startPixel, endPixel);\n base = Math.max(Math.min(base, max), min);\n head = base + size;\n if (_stacked && !floating) {\n parsed._stacks[vScale.axis]._visualValues[datasetIndex] = vScale.getValueForPixel(head) - vScale.getValueForPixel(base);\n }\n }\n if (base === vScale.getPixelForValue(actualBase)) {\n const halfGrid = sign(size) * vScale.getLineWidthForValue(actualBase) / 2;\n base += halfGrid;\n size -= halfGrid;\n }\n return {\n size,\n base,\n head,\n center: head + size / 2\n };\n }\n _calculateBarIndexPixels(index, ruler) {\n const scale = ruler.scale;\n const options = this.options;\n const skipNull = options.skipNull;\n const maxBarThickness = valueOrDefault(options.maxBarThickness, Infinity);\n let center, size;\n const axisCount = this._getAxisCount();\n if (ruler.grouped) {\n const stackCount = skipNull ? this._getStackCount(index) : ruler.stackCount;\n const range = options.barThickness === 'flex' ? computeFlexCategoryTraits(index, ruler, options, stackCount * axisCount) : computeFitCategoryTraits(index, ruler, options, stackCount * axisCount);\n const axisID = this.chart.options.indexAxis === 'x' ? this.getDataset().xAxisID : this.getDataset().yAxisID;\n const axisNumber = this._getAxis().indexOf(valueOrDefault(axisID, this.getFirstScaleIdForIndexAxis()));\n const stackIndex = this._getStackIndex(this.index, this._cachedMeta.stack, skipNull ? index : undefined) + axisNumber;\n center = range.start + range.chunk * stackIndex + range.chunk / 2;\n size = Math.min(maxBarThickness, range.chunk * range.ratio);\n } else {\n center = scale.getPixelForValue(this.getParsed(index)[scale.axis], index);\n size = Math.min(maxBarThickness, ruler.min * ruler.ratio);\n }\n return {\n base: center - size / 2,\n head: center + size / 2,\n center,\n size\n };\n }\n draw() {\n const meta = this._cachedMeta;\n const vScale = meta.vScale;\n const rects = meta.data;\n const ilen = rects.length;\n let i = 0;\n for (; i < ilen; ++i) {\n if (this.getParsed(i)[vScale.axis] !== null && !rects[i].hidden) {\n rects[i].draw(this._ctx);\n }\n }\n }\n }\n return BarController;\n})();\nlet BubbleController = /*#__PURE__*/(() => {\n class BubbleController extends DatasetController {\n static id = 'bubble';\n static defaults = {\n datasetElementType: false,\n dataElementType: 'point',\n animations: {\n numbers: {\n type: 'number',\n properties: ['x', 'y', 'borderWidth', 'radius']\n }\n }\n };\n static overrides = {\n scales: {\n x: {\n type: 'linear'\n },\n y: {\n type: 'linear'\n }\n }\n };\n initialize() {\n this.enableOptionSharing = true;\n super.initialize();\n }\n parsePrimitiveData(meta, data, start, count) {\n const parsed = super.parsePrimitiveData(meta, data, start, count);\n for (let i = 0; i < parsed.length; i++) {\n parsed[i]._custom = this.resolveDataElementOptions(i + start).radius;\n }\n return parsed;\n }\n parseArrayData(meta, data, start, count) {\n const parsed = super.parseArrayData(meta, data, start, count);\n for (let i = 0; i < parsed.length; i++) {\n const item = data[start + i];\n parsed[i]._custom = valueOrDefault(item[2], this.resolveDataElementOptions(i + start).radius);\n }\n return parsed;\n }\n parseObjectData(meta, data, start, count) {\n const parsed = super.parseObjectData(meta, data, start, count);\n for (let i = 0; i < parsed.length; i++) {\n const item = data[start + i];\n parsed[i]._custom = valueOrDefault(item && item.r && +item.r, this.resolveDataElementOptions(i + start).radius);\n }\n return parsed;\n }\n getMaxOverflow() {\n const data = this._cachedMeta.data;\n let max = 0;\n for (let i = data.length - 1; i >= 0; --i) {\n max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) / 2);\n }\n return max > 0 && max;\n }\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const labels = this.chart.data.labels || [];\n const {\n xScale,\n yScale\n } = meta;\n const parsed = this.getParsed(index);\n const x = xScale.getLabelForValue(parsed.x);\n const y = yScale.getLabelForValue(parsed.y);\n const r = parsed._custom;\n return {\n label: labels[index] || '',\n value: '(' + x + ', ' + y + (r ? ', ' + r : '') + ')'\n };\n }\n update(mode) {\n const points = this._cachedMeta.data;\n this.updateElements(points, 0, points.length, mode);\n }\n updateElements(points, start, count, mode) {\n const reset = mode === 'reset';\n const {\n iScale,\n vScale\n } = this._cachedMeta;\n const {\n sharedOptions,\n includeOptions\n } = this._getSharedOptions(start, mode);\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n for (let i = start; i < start + count; i++) {\n const point = points[i];\n const parsed = !reset && this.getParsed(i);\n const properties = {};\n const iPixel = properties[iAxis] = reset ? iScale.getPixelForDecimal(0.5) : iScale.getPixelForValue(parsed[iAxis]);\n const vPixel = properties[vAxis] = reset ? vScale.getBasePixel() : vScale.getPixelForValue(parsed[vAxis]);\n properties.skip = isNaN(iPixel) || isNaN(vPixel);\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n if (reset) {\n properties.options.radius = 0;\n }\n }\n this.updateElement(point, i, properties, mode);\n }\n }\n resolveDataElementOptions(index, mode) {\n const parsed = this.getParsed(index);\n let values = super.resolveDataElementOptions(index, mode);\n if (values.$shared) {\n values = Object.assign({}, values, {\n $shared: false\n });\n }\n const radius = values.radius;\n if (mode !== 'active') {\n values.radius = 0;\n }\n values.radius += valueOrDefault(parsed && parsed._custom, radius);\n return values;\n }\n }\n return BubbleController;\n})();\nfunction getRatioAndOffset(rotation, circumference, cutout) {\n let ratioX = 1;\n let ratioY = 1;\n let offsetX = 0;\n let offsetY = 0;\n if (circumference < TAU) {\n const startAngle = rotation;\n const endAngle = startAngle + circumference;\n const startX = Math.cos(startAngle);\n const startY = Math.sin(startAngle);\n const endX = Math.cos(endAngle);\n const endY = Math.sin(endAngle);\n const calcMax = (angle, a, b) => _angleBetween(angle, startAngle, endAngle, true) ? 1 : Math.max(a, a * cutout, b, b * cutout);\n const calcMin = (angle, a, b) => _angleBetween(angle, startAngle, endAngle, true) ? -1 : Math.min(a, a * cutout, b, b * cutout);\n const maxX = calcMax(0, startX, endX);\n const maxY = calcMax(HALF_PI, startY, endY);\n const minX = calcMin(PI, startX, endX);\n const minY = calcMin(PI + HALF_PI, startY, endY);\n ratioX = (maxX - minX) / 2;\n ratioY = (maxY - minY) / 2;\n offsetX = -(maxX + minX) / 2;\n offsetY = -(maxY + minY) / 2;\n }\n return {\n ratioX,\n ratioY,\n offsetX,\n offsetY\n };\n}\nlet DoughnutController = /*#__PURE__*/(() => {\n class DoughnutController extends DatasetController {\n static id = 'doughnut';\n static defaults = {\n datasetElementType: false,\n dataElementType: 'arc',\n animation: {\n animateRotate: true,\n animateScale: false\n },\n animations: {\n numbers: {\n type: 'number',\n properties: ['circumference', 'endAngle', 'innerRadius', 'outerRadius', 'startAngle', 'x', 'y', 'offset', 'borderWidth', 'spacing']\n }\n },\n cutout: '50%',\n rotation: 0,\n circumference: 360,\n radius: '100%',\n spacing: 0,\n indexAxis: 'r'\n };\n static descriptors = {\n _scriptable: name => name !== 'spacing',\n _indexable: name => name !== 'spacing' && !name.startsWith('borderDash') && !name.startsWith('hoverBorderDash')\n };\n static overrides = {\n aspectRatio: 1,\n plugins: {\n legend: {\n labels: {\n generateLabels(chart) {\n const data = chart.data;\n const {\n labels: {\n pointStyle,\n textAlign,\n color,\n useBorderRadius,\n borderRadius\n }\n } = chart.legend.options;\n if (data.labels.length && data.datasets.length) {\n return data.labels.map((label, i) => {\n const meta = chart.getDatasetMeta(0);\n const style = meta.controller.getStyle(i);\n return {\n text: label,\n fillStyle: style.backgroundColor,\n fontColor: color,\n hidden: !chart.getDataVisibility(i),\n lineDash: style.borderDash,\n lineDashOffset: style.borderDashOffset,\n lineJoin: style.borderJoinStyle,\n lineWidth: style.borderWidth,\n strokeStyle: style.borderColor,\n textAlign: textAlign,\n pointStyle: pointStyle,\n borderRadius: useBorderRadius && (borderRadius || style.borderRadius),\n index: i\n };\n });\n }\n return [];\n }\n },\n onClick(e, legendItem, legend) {\n legend.chart.toggleDataVisibility(legendItem.index);\n legend.chart.update();\n }\n }\n }\n };\n constructor(chart, datasetIndex) {\n super(chart, datasetIndex);\n this.enableOptionSharing = true;\n this.innerRadius = undefined;\n this.outerRadius = undefined;\n this.offsetX = undefined;\n this.offsetY = undefined;\n }\n linkScales() {}\n parse(start, count) {\n const data = this.getDataset().data;\n const meta = this._cachedMeta;\n if (this._parsing === false) {\n meta._parsed = data;\n } else {\n let getter = i => +data[i];\n if (isObject(data[start])) {\n const {\n key = 'value'\n } = this._parsing;\n getter = i => +resolveObjectKey(data[i], key);\n }\n let i, ilen;\n for (i = start, ilen = start + count; i < ilen; ++i) {\n meta._parsed[i] = getter(i);\n }\n }\n }\n _getRotation() {\n return toRadians(this.options.rotation - 90);\n }\n _getCircumference() {\n return toRadians(this.options.circumference);\n }\n _getRotationExtents() {\n let min = TAU;\n let max = -TAU;\n for (let i = 0; i < this.chart.data.datasets.length; ++i) {\n if (this.chart.isDatasetVisible(i) && this.chart.getDatasetMeta(i).type === this._type) {\n const controller = this.chart.getDatasetMeta(i).controller;\n const rotation = controller._getRotation();\n const circumference = controller._getCircumference();\n min = Math.min(min, rotation);\n max = Math.max(max, rotation + circumference);\n }\n }\n return {\n rotation: min,\n circumference: max - min\n };\n }\n update(mode) {\n const chart = this.chart;\n const {\n chartArea\n } = chart;\n const meta = this._cachedMeta;\n const arcs = meta.data;\n const spacing = this.getMaxBorderWidth() + this.getMaxOffset(arcs) + this.options.spacing;\n const maxSize = Math.max((Math.min(chartArea.width, chartArea.height) - spacing) / 2, 0);\n const cutout = Math.min(toPercentage(this.options.cutout, maxSize), 1);\n const chartWeight = this._getRingWeight(this.index);\n const {\n circumference,\n rotation\n } = this._getRotationExtents();\n const {\n ratioX,\n ratioY,\n offsetX,\n offsetY\n } = getRatioAndOffset(rotation, circumference, cutout);\n const maxWidth = (chartArea.width - spacing) / ratioX;\n const maxHeight = (chartArea.height - spacing) / ratioY;\n const maxRadius = Math.max(Math.min(maxWidth, maxHeight) / 2, 0);\n const outerRadius = toDimension(this.options.radius, maxRadius);\n const innerRadius = Math.max(outerRadius * cutout, 0);\n const radiusLength = (outerRadius - innerRadius) / this._getVisibleDatasetWeightTotal();\n this.offsetX = offsetX * outerRadius;\n this.offsetY = offsetY * outerRadius;\n meta.total = this.calculateTotal();\n this.outerRadius = outerRadius - radiusLength * this._getRingWeightOffset(this.index);\n this.innerRadius = Math.max(this.outerRadius - radiusLength * chartWeight, 0);\n this.updateElements(arcs, 0, arcs.length, mode);\n }\n _circumference(i, reset) {\n const opts = this.options;\n const meta = this._cachedMeta;\n const circumference = this._getCircumference();\n if (reset && opts.animation.animateRotate || !this.chart.getDataVisibility(i) || meta._parsed[i] === null || meta.data[i].hidden) {\n return 0;\n }\n return this.calculateCircumference(meta._parsed[i] * circumference / TAU);\n }\n updateElements(arcs, start, count, mode) {\n const reset = mode === 'reset';\n const chart = this.chart;\n const chartArea = chart.chartArea;\n const opts = chart.options;\n const animationOpts = opts.animation;\n const centerX = (chartArea.left + chartArea.right) / 2;\n const centerY = (chartArea.top + chartArea.bottom) / 2;\n const animateScale = reset && animationOpts.animateScale;\n const innerRadius = animateScale ? 0 : this.innerRadius;\n const outerRadius = animateScale ? 0 : this.outerRadius;\n const {\n sharedOptions,\n includeOptions\n } = this._getSharedOptions(start, mode);\n let startAngle = this._getRotation();\n let i;\n for (i = 0; i < start; ++i) {\n startAngle += this._circumference(i, reset);\n }\n for (i = start; i < start + count; ++i) {\n const circumference = this._circumference(i, reset);\n const arc = arcs[i];\n const properties = {\n x: centerX + this.offsetX,\n y: centerY + this.offsetY,\n startAngle,\n endAngle: startAngle + circumference,\n circumference,\n outerRadius,\n innerRadius\n };\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, arc.active ? 'active' : mode);\n }\n startAngle += circumference;\n this.updateElement(arc, i, properties, mode);\n }\n }\n calculateTotal() {\n const meta = this._cachedMeta;\n const metaData = meta.data;\n let total = 0;\n let i;\n for (i = 0; i < metaData.length; i++) {\n const value = meta._parsed[i];\n if (value !== null && !isNaN(value) && this.chart.getDataVisibility(i) && !metaData[i].hidden) {\n total += Math.abs(value);\n }\n }\n return total;\n }\n calculateCircumference(value) {\n const total = this._cachedMeta.total;\n if (total > 0 && !isNaN(value)) {\n return TAU * (Math.abs(value) / total);\n }\n return 0;\n }\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const chart = this.chart;\n const labels = chart.data.labels || [];\n const value = formatNumber(meta._parsed[index], chart.options.locale);\n return {\n label: labels[index] || '',\n value\n };\n }\n getMaxBorderWidth(arcs) {\n let max = 0;\n const chart = this.chart;\n let i, ilen, meta, controller, options;\n if (!arcs) {\n for (i = 0, ilen = chart.data.datasets.length; i < ilen; ++i) {\n if (chart.isDatasetVisible(i)) {\n meta = chart.getDatasetMeta(i);\n arcs = meta.data;\n controller = meta.controller;\n break;\n }\n }\n }\n if (!arcs) {\n return 0;\n }\n for (i = 0, ilen = arcs.length; i < ilen; ++i) {\n options = controller.resolveDataElementOptions(i);\n if (options.borderAlign !== 'inner') {\n max = Math.max(max, options.borderWidth || 0, options.hoverBorderWidth || 0);\n }\n }\n return max;\n }\n getMaxOffset(arcs) {\n let max = 0;\n for (let i = 0, ilen = arcs.length; i < ilen; ++i) {\n const options = this.resolveDataElementOptions(i);\n max = Math.max(max, options.offset || 0, options.hoverOffset || 0);\n }\n return max;\n }\n _getRingWeightOffset(datasetIndex) {\n let ringWeightOffset = 0;\n for (let i = 0; i < datasetIndex; ++i) {\n if (this.chart.isDatasetVisible(i)) {\n ringWeightOffset += this._getRingWeight(i);\n }\n }\n return ringWeightOffset;\n }\n _getRingWeight(datasetIndex) {\n return Math.max(valueOrDefault(this.chart.data.datasets[datasetIndex].weight, 1), 0);\n }\n _getVisibleDatasetWeightTotal() {\n return this._getRingWeightOffset(this.chart.data.datasets.length) || 1;\n }\n }\n return DoughnutController;\n})();\nlet LineController = /*#__PURE__*/(() => {\n class LineController extends DatasetController {\n static id = 'line';\n static defaults = {\n datasetElementType: 'line',\n dataElementType: 'point',\n showLine: true,\n spanGaps: false\n };\n static overrides = {\n scales: {\n _index_: {\n type: 'category'\n },\n _value_: {\n type: 'linear'\n }\n }\n };\n initialize() {\n this.enableOptionSharing = true;\n this.supportsDecimation = true;\n super.initialize();\n }\n update(mode) {\n const meta = this._cachedMeta;\n const {\n dataset: line,\n data: points = [],\n _dataset\n } = meta;\n const animationsDisabled = this.chart._animationsDisabled;\n let {\n start,\n count\n } = _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled);\n this._drawStart = start;\n this._drawCount = count;\n if (_scaleRangesChanged(meta)) {\n start = 0;\n count = points.length;\n }\n line._chart = this.chart;\n line._datasetIndex = this.index;\n line._decimated = !!_dataset._decimated;\n line.points = points;\n const options = this.resolveDatasetElementOptions(mode);\n if (!this.options.showLine) {\n options.borderWidth = 0;\n }\n options.segment = this.options.segment;\n this.updateElement(line, undefined, {\n animated: !animationsDisabled,\n options\n }, mode);\n this.updateElements(points, start, count, mode);\n }\n updateElements(points, start, count, mode) {\n const reset = mode === 'reset';\n const {\n iScale,\n vScale,\n _stacked,\n _dataset\n } = this._cachedMeta;\n const {\n sharedOptions,\n includeOptions\n } = this._getSharedOptions(start, mode);\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n const {\n spanGaps,\n segment\n } = this.options;\n const maxGapLength = isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;\n const directUpdate = this.chart._animationsDisabled || reset || mode === 'none';\n const end = start + count;\n const pointsCount = points.length;\n let prevParsed = start > 0 && this.getParsed(start - 1);\n for (let i = 0; i < pointsCount; ++i) {\n const point = points[i];\n const properties = directUpdate ? point : {};\n if (i < start || i >= end) {\n properties.skip = true;\n continue;\n }\n const parsed = this.getParsed(i);\n const nullData = isNullOrUndef(parsed[vAxis]);\n const iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);\n const vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);\n properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;\n properties.stop = i > 0 && Math.abs(parsed[iAxis] - prevParsed[iAxis]) > maxGapLength;\n if (segment) {\n properties.parsed = parsed;\n properties.raw = _dataset.data[i];\n }\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n }\n if (!directUpdate) {\n this.updateElement(point, i, properties, mode);\n }\n prevParsed = parsed;\n }\n }\n getMaxOverflow() {\n const meta = this._cachedMeta;\n const dataset = meta.dataset;\n const border = dataset.options && dataset.options.borderWidth || 0;\n const data = meta.data || [];\n if (!data.length) {\n return border;\n }\n const firstPoint = data[0].size(this.resolveDataElementOptions(0));\n const lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1));\n return Math.max(border, firstPoint, lastPoint) / 2;\n }\n draw() {\n const meta = this._cachedMeta;\n meta.dataset.updateControlPoints(this.chart.chartArea, meta.iScale.axis);\n super.draw();\n }\n }\n return LineController;\n})();\nlet PolarAreaController = /*#__PURE__*/(() => {\n class PolarAreaController extends DatasetController {\n static id = 'polarArea';\n static defaults = {\n dataElementType: 'arc',\n animation: {\n animateRotate: true,\n animateScale: true\n },\n animations: {\n numbers: {\n type: 'number',\n properties: ['x', 'y', 'startAngle', 'endAngle', 'innerRadius', 'outerRadius']\n }\n },\n indexAxis: 'r',\n startAngle: 0\n };\n static overrides = {\n aspectRatio: 1,\n plugins: {\n legend: {\n labels: {\n generateLabels(chart) {\n const data = chart.data;\n if (data.labels.length && data.datasets.length) {\n const {\n labels: {\n pointStyle,\n color\n }\n } = chart.legend.options;\n return data.labels.map((label, i) => {\n const meta = chart.getDatasetMeta(0);\n const style = meta.controller.getStyle(i);\n return {\n text: label,\n fillStyle: style.backgroundColor,\n strokeStyle: style.borderColor,\n fontColor: color,\n lineWidth: style.borderWidth,\n pointStyle: pointStyle,\n hidden: !chart.getDataVisibility(i),\n index: i\n };\n });\n }\n return [];\n }\n },\n onClick(e, legendItem, legend) {\n legend.chart.toggleDataVisibility(legendItem.index);\n legend.chart.update();\n }\n }\n },\n scales: {\n r: {\n type: 'radialLinear',\n angleLines: {\n display: false\n },\n beginAtZero: true,\n grid: {\n circular: true\n },\n pointLabels: {\n display: false\n },\n startAngle: 0\n }\n }\n };\n constructor(chart, datasetIndex) {\n super(chart, datasetIndex);\n this.innerRadius = undefined;\n this.outerRadius = undefined;\n }\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const chart = this.chart;\n const labels = chart.data.labels || [];\n const value = formatNumber(meta._parsed[index].r, chart.options.locale);\n return {\n label: labels[index] || '',\n value\n };\n }\n parseObjectData(meta, data, start, count) {\n return _parseObjectDataRadialScale.bind(this)(meta, data, start, count);\n }\n update(mode) {\n const arcs = this._cachedMeta.data;\n this._updateRadius();\n this.updateElements(arcs, 0, arcs.length, mode);\n }\n getMinMax() {\n const meta = this._cachedMeta;\n const range = {\n min: Number.POSITIVE_INFINITY,\n max: Number.NEGATIVE_INFINITY\n };\n meta.data.forEach((element, index) => {\n const parsed = this.getParsed(index).r;\n if (!isNaN(parsed) && this.chart.getDataVisibility(index)) {\n if (parsed < range.min) {\n range.min = parsed;\n }\n if (parsed > range.max) {\n range.max = parsed;\n }\n }\n });\n return range;\n }\n _updateRadius() {\n const chart = this.chart;\n const chartArea = chart.chartArea;\n const opts = chart.options;\n const minSize = Math.min(chartArea.right - chartArea.left, chartArea.bottom - chartArea.top);\n const outerRadius = Math.max(minSize / 2, 0);\n const innerRadius = Math.max(opts.cutoutPercentage ? outerRadius / 100 * opts.cutoutPercentage : 1, 0);\n const radiusLength = (outerRadius - innerRadius) / chart.getVisibleDatasetCount();\n this.outerRadius = outerRadius - radiusLength * this.index;\n this.innerRadius = this.outerRadius - radiusLength;\n }\n updateElements(arcs, start, count, mode) {\n const reset = mode === 'reset';\n const chart = this.chart;\n const opts = chart.options;\n const animationOpts = opts.animation;\n const scale = this._cachedMeta.rScale;\n const centerX = scale.xCenter;\n const centerY = scale.yCenter;\n const datasetStartAngle = scale.getIndexAngle(0) - 0.5 * PI;\n let angle = datasetStartAngle;\n let i;\n const defaultAngle = 360 / this.countVisibleElements();\n for (i = 0; i < start; ++i) {\n angle += this._computeAngle(i, mode, defaultAngle);\n }\n for (i = start; i < start + count; i++) {\n const arc = arcs[i];\n let startAngle = angle;\n let endAngle = angle + this._computeAngle(i, mode, defaultAngle);\n let outerRadius = chart.getDataVisibility(i) ? scale.getDistanceFromCenterForValue(this.getParsed(i).r) : 0;\n angle = endAngle;\n if (reset) {\n if (animationOpts.animateScale) {\n outerRadius = 0;\n }\n if (animationOpts.animateRotate) {\n startAngle = endAngle = datasetStartAngle;\n }\n }\n const properties = {\n x: centerX,\n y: centerY,\n innerRadius: 0,\n outerRadius,\n startAngle,\n endAngle,\n options: this.resolveDataElementOptions(i, arc.active ? 'active' : mode)\n };\n this.updateElement(arc, i, properties, mode);\n }\n }\n countVisibleElements() {\n const meta = this._cachedMeta;\n let count = 0;\n meta.data.forEach((element, index) => {\n if (!isNaN(this.getParsed(index).r) && this.chart.getDataVisibility(index)) {\n count++;\n }\n });\n return count;\n }\n _computeAngle(index, mode, defaultAngle) {\n return this.chart.getDataVisibility(index) ? toRadians(this.resolveDataElementOptions(index, mode).angle || defaultAngle) : 0;\n }\n }\n return PolarAreaController;\n})();\nlet PieController = /*#__PURE__*/(() => {\n class PieController extends DoughnutController {\n static id = 'pie';\n static defaults = {\n cutout: 0,\n rotation: 0,\n circumference: 360,\n radius: '100%'\n };\n }\n return PieController;\n})();\nlet RadarController = /*#__PURE__*/(() => {\n class RadarController extends DatasetController {\n static id = 'radar';\n static defaults = {\n datasetElementType: 'line',\n dataElementType: 'point',\n indexAxis: 'r',\n showLine: true,\n elements: {\n line: {\n fill: 'start'\n }\n }\n };\n static overrides = {\n aspectRatio: 1,\n scales: {\n r: {\n type: 'radialLinear'\n }\n }\n };\n getLabelAndValue(index) {\n const vScale = this._cachedMeta.vScale;\n const parsed = this.getParsed(index);\n return {\n label: vScale.getLabels()[index],\n value: '' + vScale.getLabelForValue(parsed[vScale.axis])\n };\n }\n parseObjectData(meta, data, start, count) {\n return _parseObjectDataRadialScale.bind(this)(meta, data, start, count);\n }\n update(mode) {\n const meta = this._cachedMeta;\n const line = meta.dataset;\n const points = meta.data || [];\n const labels = meta.iScale.getLabels();\n line.points = points;\n if (mode !== 'resize') {\n const options = this.resolveDatasetElementOptions(mode);\n if (!this.options.showLine) {\n options.borderWidth = 0;\n }\n const properties = {\n _loop: true,\n _fullLoop: labels.length === points.length,\n options\n };\n this.updateElement(line, undefined, properties, mode);\n }\n this.updateElements(points, 0, points.length, mode);\n }\n updateElements(points, start, count, mode) {\n const scale = this._cachedMeta.rScale;\n const reset = mode === 'reset';\n for (let i = start; i < start + count; i++) {\n const point = points[i];\n const options = this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n const pointPosition = scale.getPointPositionForValue(i, this.getParsed(i).r);\n const x = reset ? scale.xCenter : pointPosition.x;\n const y = reset ? scale.yCenter : pointPosition.y;\n const properties = {\n x,\n y,\n angle: pointPosition.angle,\n skip: isNaN(x) || isNaN(y),\n options\n };\n this.updateElement(point, i, properties, mode);\n }\n }\n }\n return RadarController;\n})();\nlet ScatterController = /*#__PURE__*/(() => {\n class ScatterController extends DatasetController {\n static id = 'scatter';\n static defaults = {\n datasetElementType: false,\n dataElementType: 'point',\n showLine: false,\n fill: false\n };\n static overrides = {\n interaction: {\n mode: 'point'\n },\n scales: {\n x: {\n type: 'linear'\n },\n y: {\n type: 'linear'\n }\n }\n };\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const labels = this.chart.data.labels || [];\n const {\n xScale,\n yScale\n } = meta;\n const parsed = this.getParsed(index);\n const x = xScale.getLabelForValue(parsed.x);\n const y = yScale.getLabelForValue(parsed.y);\n return {\n label: labels[index] || '',\n value: '(' + x + ', ' + y + ')'\n };\n }\n update(mode) {\n const meta = this._cachedMeta;\n const {\n data: points = []\n } = meta;\n const animationsDisabled = this.chart._animationsDisabled;\n let {\n start,\n count\n } = _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled);\n this._drawStart = start;\n this._drawCount = count;\n if (_scaleRangesChanged(meta)) {\n start = 0;\n count = points.length;\n }\n if (this.options.showLine) {\n if (!this.datasetElementType) {\n this.addElements();\n }\n const {\n dataset: line,\n _dataset\n } = meta;\n line._chart = this.chart;\n line._datasetIndex = this.index;\n line._decimated = !!_dataset._decimated;\n line.points = points;\n const options = this.resolveDatasetElementOptions(mode);\n options.segment = this.options.segment;\n this.updateElement(line, undefined, {\n animated: !animationsDisabled,\n options\n }, mode);\n } else if (this.datasetElementType) {\n delete meta.dataset;\n this.datasetElementType = false;\n }\n this.updateElements(points, start, count, mode);\n }\n addElements() {\n const {\n showLine\n } = this.options;\n if (!this.datasetElementType && showLine) {\n this.datasetElementType = this.chart.registry.getElement('line');\n }\n super.addElements();\n }\n updateElements(points, start, count, mode) {\n const reset = mode === 'reset';\n const {\n iScale,\n vScale,\n _stacked,\n _dataset\n } = this._cachedMeta;\n const firstOpts = this.resolveDataElementOptions(start, mode);\n const sharedOptions = this.getSharedOptions(firstOpts);\n const includeOptions = this.includeOptions(mode, sharedOptions);\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n const {\n spanGaps,\n segment\n } = this.options;\n const maxGapLength = isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;\n const directUpdate = this.chart._animationsDisabled || reset || mode === 'none';\n let prevParsed = start > 0 && this.getParsed(start - 1);\n for (let i = start; i < start + count; ++i) {\n const point = points[i];\n const parsed = this.getParsed(i);\n const properties = directUpdate ? point : {};\n const nullData = isNullOrUndef(parsed[vAxis]);\n const iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);\n const vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);\n properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;\n properties.stop = i > 0 && Math.abs(parsed[iAxis] - prevParsed[iAxis]) > maxGapLength;\n if (segment) {\n properties.parsed = parsed;\n properties.raw = _dataset.data[i];\n }\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n }\n if (!directUpdate) {\n this.updateElement(point, i, properties, mode);\n }\n prevParsed = parsed;\n }\n this.updateSharedOptions(sharedOptions, mode, firstOpts);\n }\n getMaxOverflow() {\n const meta = this._cachedMeta;\n const data = meta.data || [];\n if (!this.options.showLine) {\n let max = 0;\n for (let i = data.length - 1; i >= 0; --i) {\n max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) / 2);\n }\n return max > 0 && max;\n }\n const dataset = meta.dataset;\n const border = dataset.options && dataset.options.borderWidth || 0;\n if (!data.length) {\n return border;\n }\n const firstPoint = data[0].size(this.resolveDataElementOptions(0));\n const lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1));\n return Math.max(border, firstPoint, lastPoint) / 2;\n }\n }\n return ScatterController;\n})();\nvar controllers = /*#__PURE__*/Object.freeze({\n __proto__: null,\n BarController: BarController,\n BubbleController: BubbleController,\n DoughnutController: DoughnutController,\n LineController: LineController,\n PieController: PieController,\n PolarAreaController: PolarAreaController,\n RadarController: RadarController,\n ScatterController: ScatterController\n});\n\n/**\n * @namespace Chart._adapters\n * @since 2.8.0\n * @private\n */\nfunction abstract() {\n throw new Error('This method is not implemented: Check that a complete date adapter is provided.');\n}\n/**\n * Date adapter (current used by the time scale)\n * @namespace Chart._adapters._date\n * @memberof Chart._adapters\n * @private\n */\nclass DateAdapterBase {\n /**\n * Override default date adapter methods.\n * Accepts type parameter to define options type.\n * @example\n * Chart._adapters._date.override<{myAdapterOption: string}>({\n * init() {\n * console.log(this.options.myAdapterOption);\n * }\n * })\n */\n static override(members) {\n Object.assign(DateAdapterBase.prototype, members);\n }\n options;\n constructor(options) {\n this.options = options || {};\n }\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n init() {}\n formats() {\n return abstract();\n }\n parse() {\n return abstract();\n }\n format() {\n return abstract();\n }\n add() {\n return abstract();\n }\n diff() {\n return abstract();\n }\n startOf() {\n return abstract();\n }\n endOf() {\n return abstract();\n }\n}\nvar adapters = {\n _date: DateAdapterBase\n};\nfunction binarySearch(metaset, axis, value, intersect) {\n const {\n controller,\n data,\n _sorted\n } = metaset;\n const iScale = controller._cachedMeta.iScale;\n const spanGaps = metaset.dataset ? metaset.dataset.options ? metaset.dataset.options.spanGaps : null : null;\n if (iScale && axis === iScale.axis && axis !== 'r' && _sorted && data.length) {\n const lookupMethod = iScale._reversePixels ? _rlookupByKey : _lookupByKey;\n if (!intersect) {\n const result = lookupMethod(data, axis, value);\n if (spanGaps) {\n const {\n vScale\n } = controller._cachedMeta;\n const {\n _parsed\n } = metaset;\n const distanceToDefinedLo = _parsed.slice(0, result.lo + 1).reverse().findIndex(point => !isNullOrUndef(point[vScale.axis]));\n result.lo -= Math.max(0, distanceToDefinedLo);\n const distanceToDefinedHi = _parsed.slice(result.hi).findIndex(point => !isNullOrUndef(point[vScale.axis]));\n result.hi += Math.max(0, distanceToDefinedHi);\n }\n return result;\n } else if (controller._sharedOptions) {\n const el = data[0];\n const range = typeof el.getRange === 'function' && el.getRange(axis);\n if (range) {\n const start = lookupMethod(data, axis, value - range);\n const end = lookupMethod(data, axis, value + range);\n return {\n lo: start.lo,\n hi: end.hi\n };\n }\n }\n }\n return {\n lo: 0,\n hi: data.length - 1\n };\n}\nfunction evaluateInteractionItems(chart, axis, position, handler, intersect) {\n const metasets = chart.getSortedVisibleDatasetMetas();\n const value = position[axis];\n for (let i = 0, ilen = metasets.length; i < ilen; ++i) {\n const {\n index,\n data\n } = metasets[i];\n const {\n lo,\n hi\n } = binarySearch(metasets[i], axis, value, intersect);\n for (let j = lo; j <= hi; ++j) {\n const element = data[j];\n if (!element.skip) {\n handler(element, index, j);\n }\n }\n }\n}\nfunction getDistanceMetricForAxis(axis) {\n const useX = axis.indexOf('x') !== -1;\n const useY = axis.indexOf('y') !== -1;\n return function (pt1, pt2) {\n const deltaX = useX ? Math.abs(pt1.x - pt2.x) : 0;\n const deltaY = useY ? Math.abs(pt1.y - pt2.y) : 0;\n return Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaY, 2));\n };\n}\nfunction getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) {\n const items = [];\n if (!includeInvisible && !chart.isPointInArea(position)) {\n return items;\n }\n const evaluationFunc = function (element, datasetIndex, index) {\n if (!includeInvisible && !_isPointInArea(element, chart.chartArea, 0)) {\n return;\n }\n if (element.inRange(position.x, position.y, useFinalPosition)) {\n items.push({\n element,\n datasetIndex,\n index\n });\n }\n };\n evaluateInteractionItems(chart, axis, position, evaluationFunc, true);\n return items;\n}\nfunction getNearestRadialItems(chart, position, axis, useFinalPosition) {\n let items = [];\n function evaluationFunc(element, datasetIndex, index) {\n const {\n startAngle,\n endAngle\n } = element.getProps(['startAngle', 'endAngle'], useFinalPosition);\n const {\n angle\n } = getAngleFromPoint(element, {\n x: position.x,\n y: position.y\n });\n if (_angleBetween(angle, startAngle, endAngle)) {\n items.push({\n element,\n datasetIndex,\n index\n });\n }\n }\n evaluateInteractionItems(chart, axis, position, evaluationFunc);\n return items;\n}\nfunction getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {\n let items = [];\n const distanceMetric = getDistanceMetricForAxis(axis);\n let minDistance = Number.POSITIVE_INFINITY;\n function evaluationFunc(element, datasetIndex, index) {\n const inRange = element.inRange(position.x, position.y, useFinalPosition);\n if (intersect && !inRange) {\n return;\n }\n const center = element.getCenterPoint(useFinalPosition);\n const pointInArea = !!includeInvisible || chart.isPointInArea(center);\n if (!pointInArea && !inRange) {\n return;\n }\n const distance = distanceMetric(position, center);\n if (distance < minDistance) {\n items = [{\n element,\n datasetIndex,\n index\n }];\n minDistance = distance;\n } else if (distance === minDistance) {\n items.push({\n element,\n datasetIndex,\n index\n });\n }\n }\n evaluateInteractionItems(chart, axis, position, evaluationFunc);\n return items;\n}\nfunction getNearestItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {\n if (!includeInvisible && !chart.isPointInArea(position)) {\n return [];\n }\n return axis === 'r' && !intersect ? getNearestRadialItems(chart, position, axis, useFinalPosition) : getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible);\n}\nfunction getAxisItems(chart, position, axis, intersect, useFinalPosition) {\n const items = [];\n const rangeMethod = axis === 'x' ? 'inXRange' : 'inYRange';\n let intersectsItem = false;\n evaluateInteractionItems(chart, axis, position, (element, datasetIndex, index) => {\n if (element[rangeMethod] && element[rangeMethod](position[axis], useFinalPosition)) {\n items.push({\n element,\n datasetIndex,\n index\n });\n intersectsItem = intersectsItem || element.inRange(position.x, position.y, useFinalPosition);\n }\n });\n if (intersect && !intersectsItem) {\n return [];\n }\n return items;\n}\nvar Interaction = {\n evaluateInteractionItems,\n modes: {\n index(chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'x';\n const includeInvisible = options.includeInvisible || false;\n const items = options.intersect ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) : getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);\n const elements = [];\n if (!items.length) {\n return [];\n }\n chart.getSortedVisibleDatasetMetas().forEach(meta => {\n const index = items[0].index;\n const element = meta.data[index];\n if (element && !element.skip) {\n elements.push({\n element,\n datasetIndex: meta.index,\n index\n });\n }\n });\n return elements;\n },\n dataset(chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'xy';\n const includeInvisible = options.includeInvisible || false;\n let items = options.intersect ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) : getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);\n if (items.length > 0) {\n const datasetIndex = items[0].datasetIndex;\n const data = chart.getDatasetMeta(datasetIndex).data;\n items = [];\n for (let i = 0; i < data.length; ++i) {\n items.push({\n element: data[i],\n datasetIndex,\n index: i\n });\n }\n }\n return items;\n },\n point(chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'xy';\n const includeInvisible = options.includeInvisible || false;\n return getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible);\n },\n nearest(chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'xy';\n const includeInvisible = options.includeInvisible || false;\n return getNearestItems(chart, position, axis, options.intersect, useFinalPosition, includeInvisible);\n },\n x(chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n return getAxisItems(chart, position, 'x', options.intersect, useFinalPosition);\n },\n y(chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n return getAxisItems(chart, position, 'y', options.intersect, useFinalPosition);\n }\n }\n};\nconst STATIC_POSITIONS = ['left', 'top', 'right', 'bottom'];\nfunction filterByPosition(array, position) {\n return array.filter(v => v.pos === position);\n}\nfunction filterDynamicPositionByAxis(array, axis) {\n return array.filter(v => STATIC_POSITIONS.indexOf(v.pos) === -1 && v.box.axis === axis);\n}\nfunction sortByWeight(array, reverse) {\n return array.sort((a, b) => {\n const v0 = reverse ? b : a;\n const v1 = reverse ? a : b;\n return v0.weight === v1.weight ? v0.index - v1.index : v0.weight - v1.weight;\n });\n}\nfunction wrapBoxes(boxes) {\n const layoutBoxes = [];\n let i, ilen, box, pos, stack, stackWeight;\n for (i = 0, ilen = (boxes || []).length; i < ilen; ++i) {\n box = boxes[i];\n ({\n position: pos,\n options: {\n stack,\n stackWeight = 1\n }\n } = box);\n layoutBoxes.push({\n index: i,\n box,\n pos,\n horizontal: box.isHorizontal(),\n weight: box.weight,\n stack: stack && pos + stack,\n stackWeight\n });\n }\n return layoutBoxes;\n}\nfunction buildStacks(layouts) {\n const stacks = {};\n for (const wrap of layouts) {\n const {\n stack,\n pos,\n stackWeight\n } = wrap;\n if (!stack || !STATIC_POSITIONS.includes(pos)) {\n continue;\n }\n const _stack = stacks[stack] || (stacks[stack] = {\n count: 0,\n placed: 0,\n weight: 0,\n size: 0\n });\n _stack.count++;\n _stack.weight += stackWeight;\n }\n return stacks;\n}\nfunction setLayoutDims(layouts, params) {\n const stacks = buildStacks(layouts);\n const {\n vBoxMaxWidth,\n hBoxMaxHeight\n } = params;\n let i, ilen, layout;\n for (i = 0, ilen = layouts.length; i < ilen; ++i) {\n layout = layouts[i];\n const {\n fullSize\n } = layout.box;\n const stack = stacks[layout.stack];\n const factor = stack && layout.stackWeight / stack.weight;\n if (layout.horizontal) {\n layout.width = factor ? factor * vBoxMaxWidth : fullSize && params.availableWidth;\n layout.height = hBoxMaxHeight;\n } else {\n layout.width = vBoxMaxWidth;\n layout.height = factor ? factor * hBoxMaxHeight : fullSize && params.availableHeight;\n }\n }\n return stacks;\n}\nfunction buildLayoutBoxes(boxes) {\n const layoutBoxes = wrapBoxes(boxes);\n const fullSize = sortByWeight(layoutBoxes.filter(wrap => wrap.box.fullSize), true);\n const left = sortByWeight(filterByPosition(layoutBoxes, 'left'), true);\n const right = sortByWeight(filterByPosition(layoutBoxes, 'right'));\n const top = sortByWeight(filterByPosition(layoutBoxes, 'top'), true);\n const bottom = sortByWeight(filterByPosition(layoutBoxes, 'bottom'));\n const centerHorizontal = filterDynamicPositionByAxis(layoutBoxes, 'x');\n const centerVertical = filterDynamicPositionByAxis(layoutBoxes, 'y');\n return {\n fullSize,\n leftAndTop: left.concat(top),\n rightAndBottom: right.concat(centerVertical).concat(bottom).concat(centerHorizontal),\n chartArea: filterByPosition(layoutBoxes, 'chartArea'),\n vertical: left.concat(right).concat(centerVertical),\n horizontal: top.concat(bottom).concat(centerHorizontal)\n };\n}\nfunction getCombinedMax(maxPadding, chartArea, a, b) {\n return Math.max(maxPadding[a], chartArea[a]) + Math.max(maxPadding[b], chartArea[b]);\n}\nfunction updateMaxPadding(maxPadding, boxPadding) {\n maxPadding.top = Math.max(maxPadding.top, boxPadding.top);\n maxPadding.left = Math.max(maxPadding.left, boxPadding.left);\n maxPadding.bottom = Math.max(maxPadding.bottom, boxPadding.bottom);\n maxPadding.right = Math.max(maxPadding.right, boxPadding.right);\n}\nfunction updateDims(chartArea, params, layout, stacks) {\n const {\n pos,\n box\n } = layout;\n const maxPadding = chartArea.maxPadding;\n if (!isObject(pos)) {\n if (layout.size) {\n chartArea[pos] -= layout.size;\n }\n const stack = stacks[layout.stack] || {\n size: 0,\n count: 1\n };\n stack.size = Math.max(stack.size, layout.horizontal ? box.height : box.width);\n layout.size = stack.size / stack.count;\n chartArea[pos] += layout.size;\n }\n if (box.getPadding) {\n updateMaxPadding(maxPadding, box.getPadding());\n }\n const newWidth = Math.max(0, params.outerWidth - getCombinedMax(maxPadding, chartArea, 'left', 'right'));\n const newHeight = Math.max(0, params.outerHeight - getCombinedMax(maxPadding, chartArea, 'top', 'bottom'));\n const widthChanged = newWidth !== chartArea.w;\n const heightChanged = newHeight !== chartArea.h;\n chartArea.w = newWidth;\n chartArea.h = newHeight;\n return layout.horizontal ? {\n same: widthChanged,\n other: heightChanged\n } : {\n same: heightChanged,\n other: widthChanged\n };\n}\nfunction handleMaxPadding(chartArea) {\n const maxPadding = chartArea.maxPadding;\n function updatePos(pos) {\n const change = Math.max(maxPadding[pos] - chartArea[pos], 0);\n chartArea[pos] += change;\n return change;\n }\n chartArea.y += updatePos('top');\n chartArea.x += updatePos('left');\n updatePos('right');\n updatePos('bottom');\n}\nfunction getMargins(horizontal, chartArea) {\n const maxPadding = chartArea.maxPadding;\n function marginForPositions(positions) {\n const margin = {\n left: 0,\n top: 0,\n right: 0,\n bottom: 0\n };\n positions.forEach(pos => {\n margin[pos] = Math.max(chartArea[pos], maxPadding[pos]);\n });\n return margin;\n }\n return horizontal ? marginForPositions(['left', 'right']) : marginForPositions(['top', 'bottom']);\n}\nfunction fitBoxes(boxes, chartArea, params, stacks) {\n const refitBoxes = [];\n let i, ilen, layout, box, refit, changed;\n for (i = 0, ilen = boxes.length, refit = 0; i < ilen; ++i) {\n layout = boxes[i];\n box = layout.box;\n box.update(layout.width || chartArea.w, layout.height || chartArea.h, getMargins(layout.horizontal, chartArea));\n const {\n same,\n other\n } = updateDims(chartArea, params, layout, stacks);\n refit |= same && refitBoxes.length;\n changed = changed || other;\n if (!box.fullSize) {\n refitBoxes.push(layout);\n }\n }\n return refit && fitBoxes(refitBoxes, chartArea, params, stacks) || changed;\n}\nfunction setBoxDims(box, left, top, width, height) {\n box.top = top;\n box.left = left;\n box.right = left + width;\n box.bottom = top + height;\n box.width = width;\n box.height = height;\n}\nfunction placeBoxes(boxes, chartArea, params, stacks) {\n const userPadding = params.padding;\n let {\n x,\n y\n } = chartArea;\n for (const layout of boxes) {\n const box = layout.box;\n const stack = stacks[layout.stack] || {\n count: 1,\n placed: 0,\n weight: 1\n };\n const weight = layout.stackWeight / stack.weight || 1;\n if (layout.horizontal) {\n const width = chartArea.w * weight;\n const height = stack.size || box.height;\n if (defined(stack.start)) {\n y = stack.start;\n }\n if (box.fullSize) {\n setBoxDims(box, userPadding.left, y, params.outerWidth - userPadding.right - userPadding.left, height);\n } else {\n setBoxDims(box, chartArea.left + stack.placed, y, width, height);\n }\n stack.start = y;\n stack.placed += width;\n y = box.bottom;\n } else {\n const height = chartArea.h * weight;\n const width = stack.size || box.width;\n if (defined(stack.start)) {\n x = stack.start;\n }\n if (box.fullSize) {\n setBoxDims(box, x, userPadding.top, width, params.outerHeight - userPadding.bottom - userPadding.top);\n } else {\n setBoxDims(box, x, chartArea.top + stack.placed, width, height);\n }\n stack.start = x;\n stack.placed += height;\n x = box.right;\n }\n }\n chartArea.x = x;\n chartArea.y = y;\n}\nvar layouts = {\n addBox(chart, item) {\n if (!chart.boxes) {\n chart.boxes = [];\n }\n item.fullSize = item.fullSize || false;\n item.position = item.position || 'top';\n item.weight = item.weight || 0;\n item._layers = item._layers || function () {\n return [{\n z: 0,\n draw(chartArea) {\n item.draw(chartArea);\n }\n }];\n };\n chart.boxes.push(item);\n },\n removeBox(chart, layoutItem) {\n const index = chart.boxes ? chart.boxes.indexOf(layoutItem) : -1;\n if (index !== -1) {\n chart.boxes.splice(index, 1);\n }\n },\n configure(chart, item, options) {\n item.fullSize = options.fullSize;\n item.position = options.position;\n item.weight = options.weight;\n },\n update(chart, width, height, minPadding) {\n if (!chart) {\n return;\n }\n const padding = toPadding(chart.options.layout.padding);\n const availableWidth = Math.max(width - padding.width, 0);\n const availableHeight = Math.max(height - padding.height, 0);\n const boxes = buildLayoutBoxes(chart.boxes);\n const verticalBoxes = boxes.vertical;\n const horizontalBoxes = boxes.horizontal;\n each(chart.boxes, box => {\n if (typeof box.beforeLayout === 'function') {\n box.beforeLayout();\n }\n });\n const visibleVerticalBoxCount = verticalBoxes.reduce((total, wrap) => wrap.box.options && wrap.box.options.display === false ? total : total + 1, 0) || 1;\n const params = Object.freeze({\n outerWidth: width,\n outerHeight: height,\n padding,\n availableWidth,\n availableHeight,\n vBoxMaxWidth: availableWidth / 2 / visibleVerticalBoxCount,\n hBoxMaxHeight: availableHeight / 2\n });\n const maxPadding = Object.assign({}, padding);\n updateMaxPadding(maxPadding, toPadding(minPadding));\n const chartArea = Object.assign({\n maxPadding,\n w: availableWidth,\n h: availableHeight,\n x: padding.left,\n y: padding.top\n }, padding);\n const stacks = setLayoutDims(verticalBoxes.concat(horizontalBoxes), params);\n fitBoxes(boxes.fullSize, chartArea, params, stacks);\n fitBoxes(verticalBoxes, chartArea, params, stacks);\n if (fitBoxes(horizontalBoxes, chartArea, params, stacks)) {\n fitBoxes(verticalBoxes, chartArea, params, stacks);\n }\n handleMaxPadding(chartArea);\n placeBoxes(boxes.leftAndTop, chartArea, params, stacks);\n chartArea.x += chartArea.w;\n chartArea.y += chartArea.h;\n placeBoxes(boxes.rightAndBottom, chartArea, params, stacks);\n chart.chartArea = {\n left: chartArea.left,\n top: chartArea.top,\n right: chartArea.left + chartArea.w,\n bottom: chartArea.top + chartArea.h,\n height: chartArea.h,\n width: chartArea.w\n };\n each(boxes.chartArea, layout => {\n const box = layout.box;\n Object.assign(box, chart.chartArea);\n box.update(chartArea.w, chartArea.h, {\n left: 0,\n top: 0,\n right: 0,\n bottom: 0\n });\n });\n }\n};\nclass BasePlatform {\n acquireContext(canvas, aspectRatio) {}\n releaseContext(context) {\n return false;\n }\n addEventListener(chart, type, listener) {}\n removeEventListener(chart, type, listener) {}\n getDevicePixelRatio() {\n return 1;\n }\n getMaximumSize(element, width, height, aspectRatio) {\n width = Math.max(0, width || element.width);\n height = height || element.height;\n return {\n width,\n height: Math.max(0, aspectRatio ? Math.floor(width / aspectRatio) : height)\n };\n }\n isAttached(canvas) {\n return true;\n }\n updateConfig(config) {}\n}\nclass BasicPlatform extends BasePlatform {\n acquireContext(item) {\n return item && item.getContext && item.getContext('2d') || null;\n }\n updateConfig(config) {\n config.options.animation = false;\n }\n}\nconst EXPANDO_KEY = '$chartjs';\nconst EVENT_TYPES = {\n touchstart: 'mousedown',\n touchmove: 'mousemove',\n touchend: 'mouseup',\n pointerenter: 'mouseenter',\n pointerdown: 'mousedown',\n pointermove: 'mousemove',\n pointerup: 'mouseup',\n pointerleave: 'mouseout',\n pointerout: 'mouseout'\n};\nconst isNullOrEmpty = value => value === null || value === '';\nfunction initCanvas(canvas, aspectRatio) {\n const style = canvas.style;\n const renderHeight = canvas.getAttribute('height');\n const renderWidth = canvas.getAttribute('width');\n canvas[EXPANDO_KEY] = {\n initial: {\n height: renderHeight,\n width: renderWidth,\n style: {\n display: style.display,\n height: style.height,\n width: style.width\n }\n }\n };\n style.display = style.display || 'block';\n style.boxSizing = style.boxSizing || 'border-box';\n if (isNullOrEmpty(renderWidth)) {\n const displayWidth = readUsedSize(canvas, 'width');\n if (displayWidth !== undefined) {\n canvas.width = displayWidth;\n }\n }\n if (isNullOrEmpty(renderHeight)) {\n if (canvas.style.height === '') {\n canvas.height = canvas.width / (aspectRatio || 2);\n } else {\n const displayHeight = readUsedSize(canvas, 'height');\n if (displayHeight !== undefined) {\n canvas.height = displayHeight;\n }\n }\n }\n return canvas;\n}\nconst eventListenerOptions = supportsEventListenerOptions ? {\n passive: true\n} : false;\nfunction addListener(node, type, listener) {\n if (node) {\n node.addEventListener(type, listener, eventListenerOptions);\n }\n}\nfunction removeListener(chart, type, listener) {\n if (chart && chart.canvas) {\n chart.canvas.removeEventListener(type, listener, eventListenerOptions);\n }\n}\nfunction fromNativeEvent(event, chart) {\n const type = EVENT_TYPES[event.type] || event.type;\n const {\n x,\n y\n } = getRelativePosition(event, chart);\n return {\n type,\n chart,\n native: event,\n x: x !== undefined ? x : null,\n y: y !== undefined ? y : null\n };\n}\nfunction nodeListContains(nodeList, canvas) {\n for (const node of nodeList) {\n if (node === canvas || node.contains(canvas)) {\n return true;\n }\n }\n}\nfunction createAttachObserver(chart, type, listener) {\n const canvas = chart.canvas;\n const observer = new MutationObserver(entries => {\n let trigger = false;\n for (const entry of entries) {\n trigger = trigger || nodeListContains(entry.addedNodes, canvas);\n trigger = trigger && !nodeListContains(entry.removedNodes, canvas);\n }\n if (trigger) {\n listener();\n }\n });\n observer.observe(document, {\n childList: true,\n subtree: true\n });\n return observer;\n}\nfunction createDetachObserver(chart, type, listener) {\n const canvas = chart.canvas;\n const observer = new MutationObserver(entries => {\n let trigger = false;\n for (const entry of entries) {\n trigger = trigger || nodeListContains(entry.removedNodes, canvas);\n trigger = trigger && !nodeListContains(entry.addedNodes, canvas);\n }\n if (trigger) {\n listener();\n }\n });\n observer.observe(document, {\n childList: true,\n subtree: true\n });\n return observer;\n}\nconst drpListeningCharts = new Map();\nlet oldDevicePixelRatio = 0;\nfunction onWindowResize() {\n const dpr = window.devicePixelRatio;\n if (dpr === oldDevicePixelRatio) {\n return;\n }\n oldDevicePixelRatio = dpr;\n drpListeningCharts.forEach((resize, chart) => {\n if (chart.currentDevicePixelRatio !== dpr) {\n resize();\n }\n });\n}\nfunction listenDevicePixelRatioChanges(chart, resize) {\n if (!drpListeningCharts.size) {\n window.addEventListener('resize', onWindowResize);\n }\n drpListeningCharts.set(chart, resize);\n}\nfunction unlistenDevicePixelRatioChanges(chart) {\n drpListeningCharts.delete(chart);\n if (!drpListeningCharts.size) {\n window.removeEventListener('resize', onWindowResize);\n }\n}\nfunction createResizeObserver(chart, type, listener) {\n const canvas = chart.canvas;\n const container = canvas && _getParentNode(canvas);\n if (!container) {\n return;\n }\n const resize = throttled((width, height) => {\n const w = container.clientWidth;\n listener(width, height);\n if (w < container.clientWidth) {\n listener();\n }\n }, window);\n const observer = new ResizeObserver(entries => {\n const entry = entries[0];\n const width = entry.contentRect.width;\n const height = entry.contentRect.height;\n if (width === 0 && height === 0) {\n return;\n }\n resize(width, height);\n });\n observer.observe(container);\n listenDevicePixelRatioChanges(chart, resize);\n return observer;\n}\nfunction releaseObserver(chart, type, observer) {\n if (observer) {\n observer.disconnect();\n }\n if (type === 'resize') {\n unlistenDevicePixelRatioChanges(chart);\n }\n}\nfunction createProxyAndListen(chart, type, listener) {\n const canvas = chart.canvas;\n const proxy = throttled(event => {\n if (chart.ctx !== null) {\n listener(fromNativeEvent(event, chart));\n }\n }, chart);\n addListener(canvas, type, proxy);\n return proxy;\n}\nclass DomPlatform extends BasePlatform {\n acquireContext(canvas, aspectRatio) {\n const context = canvas && canvas.getContext && canvas.getContext('2d');\n if (context && context.canvas === canvas) {\n initCanvas(canvas, aspectRatio);\n return context;\n }\n return null;\n }\n releaseContext(context) {\n const canvas = context.canvas;\n if (!canvas[EXPANDO_KEY]) {\n return false;\n }\n const initial = canvas[EXPANDO_KEY].initial;\n ['height', 'width'].forEach(prop => {\n const value = initial[prop];\n if (isNullOrUndef(value)) {\n canvas.removeAttribute(prop);\n } else {\n canvas.setAttribute(prop, value);\n }\n });\n const style = initial.style || {};\n Object.keys(style).forEach(key => {\n canvas.style[key] = style[key];\n });\n canvas.width = canvas.width;\n delete canvas[EXPANDO_KEY];\n return true;\n }\n addEventListener(chart, type, listener) {\n this.removeEventListener(chart, type);\n const proxies = chart.$proxies || (chart.$proxies = {});\n const handlers = {\n attach: createAttachObserver,\n detach: createDetachObserver,\n resize: createResizeObserver\n };\n const handler = handlers[type] || createProxyAndListen;\n proxies[type] = handler(chart, type, listener);\n }\n removeEventListener(chart, type) {\n const proxies = chart.$proxies || (chart.$proxies = {});\n const proxy = proxies[type];\n if (!proxy) {\n return;\n }\n const handlers = {\n attach: releaseObserver,\n detach: releaseObserver,\n resize: releaseObserver\n };\n const handler = handlers[type] || removeListener;\n handler(chart, type, proxy);\n proxies[type] = undefined;\n }\n getDevicePixelRatio() {\n return window.devicePixelRatio;\n }\n getMaximumSize(canvas, width, height, aspectRatio) {\n return getMaximumSize(canvas, width, height, aspectRatio);\n }\n isAttached(canvas) {\n const container = canvas && _getParentNode(canvas);\n return !!(container && container.isConnected);\n }\n}\nfunction _detectPlatform(canvas) {\n if (!_isDomSupported() || typeof OffscreenCanvas !== 'undefined' && canvas instanceof OffscreenCanvas) {\n return BasicPlatform;\n }\n return DomPlatform;\n}\nclass Element {\n static defaults = {};\n static defaultRoutes = undefined;\n x;\n y;\n active = false;\n options;\n $animations;\n tooltipPosition(useFinalPosition) {\n const {\n x,\n y\n } = this.getProps(['x', 'y'], useFinalPosition);\n return {\n x,\n y\n };\n }\n hasValue() {\n return isNumber(this.x) && isNumber(this.y);\n }\n getProps(props, final) {\n const anims = this.$animations;\n if (!final || !anims) {\n // let's not create an object, if not needed\n return this;\n }\n const ret = {};\n props.forEach(prop => {\n ret[prop] = anims[prop] && anims[prop].active() ? anims[prop]._to : this[prop];\n });\n return ret;\n }\n}\nfunction autoSkip(scale, ticks) {\n const tickOpts = scale.options.ticks;\n const determinedMaxTicks = determineMaxTicks(scale);\n const ticksLimit = Math.min(tickOpts.maxTicksLimit || determinedMaxTicks, determinedMaxTicks);\n const majorIndices = tickOpts.major.enabled ? getMajorIndices(ticks) : [];\n const numMajorIndices = majorIndices.length;\n const first = majorIndices[0];\n const last = majorIndices[numMajorIndices - 1];\n const newTicks = [];\n if (numMajorIndices > ticksLimit) {\n skipMajors(ticks, newTicks, majorIndices, numMajorIndices / ticksLimit);\n return newTicks;\n }\n const spacing = calculateSpacing(majorIndices, ticks, ticksLimit);\n if (numMajorIndices > 0) {\n let i, ilen;\n const avgMajorSpacing = numMajorIndices > 1 ? Math.round((last - first) / (numMajorIndices - 1)) : null;\n skip(ticks, newTicks, spacing, isNullOrUndef(avgMajorSpacing) ? 0 : first - avgMajorSpacing, first);\n for (i = 0, ilen = numMajorIndices - 1; i < ilen; i++) {\n skip(ticks, newTicks, spacing, majorIndices[i], majorIndices[i + 1]);\n }\n skip(ticks, newTicks, spacing, last, isNullOrUndef(avgMajorSpacing) ? ticks.length : last + avgMajorSpacing);\n return newTicks;\n }\n skip(ticks, newTicks, spacing);\n return newTicks;\n}\nfunction determineMaxTicks(scale) {\n const offset = scale.options.offset;\n const tickLength = scale._tickSize();\n const maxScale = scale._length / tickLength + (offset ? 0 : 1);\n const maxChart = scale._maxLength / tickLength;\n return Math.floor(Math.min(maxScale, maxChart));\n}\nfunction calculateSpacing(majorIndices, ticks, ticksLimit) {\n const evenMajorSpacing = getEvenSpacing(majorIndices);\n const spacing = ticks.length / ticksLimit;\n if (!evenMajorSpacing) {\n return Math.max(spacing, 1);\n }\n const factors = _factorize(evenMajorSpacing);\n for (let i = 0, ilen = factors.length - 1; i < ilen; i++) {\n const factor = factors[i];\n if (factor > spacing) {\n return factor;\n }\n }\n return Math.max(spacing, 1);\n}\nfunction getMajorIndices(ticks) {\n const result = [];\n let i, ilen;\n for (i = 0, ilen = ticks.length; i < ilen; i++) {\n if (ticks[i].major) {\n result.push(i);\n }\n }\n return result;\n}\nfunction skipMajors(ticks, newTicks, majorIndices, spacing) {\n let count = 0;\n let next = majorIndices[0];\n let i;\n spacing = Math.ceil(spacing);\n for (i = 0; i < ticks.length; i++) {\n if (i === next) {\n newTicks.push(ticks[i]);\n count++;\n next = majorIndices[count * spacing];\n }\n }\n}\nfunction skip(ticks, newTicks, spacing, majorStart, majorEnd) {\n const start = valueOrDefault(majorStart, 0);\n const end = Math.min(valueOrDefault(majorEnd, ticks.length), ticks.length);\n let count = 0;\n let length, i, next;\n spacing = Math.ceil(spacing);\n if (majorEnd) {\n length = majorEnd - majorStart;\n spacing = length / Math.floor(length / spacing);\n }\n next = start;\n while (next < 0) {\n count++;\n next = Math.round(start + count * spacing);\n }\n for (i = Math.max(start, 0); i < end; i++) {\n if (i === next) {\n newTicks.push(ticks[i]);\n count++;\n next = Math.round(start + count * spacing);\n }\n }\n}\nfunction getEvenSpacing(arr) {\n const len = arr.length;\n let i, diff;\n if (len < 2) {\n return false;\n }\n for (diff = arr[0], i = 1; i < len; ++i) {\n if (arr[i] - arr[i - 1] !== diff) {\n return false;\n }\n }\n return diff;\n}\nconst reverseAlign = align => align === 'left' ? 'right' : align === 'right' ? 'left' : align;\nconst offsetFromEdge = (scale, edge, offset) => edge === 'top' || edge === 'left' ? scale[edge] + offset : scale[edge] - offset;\nconst getTicksLimit = (ticksLength, maxTicksLimit) => Math.min(maxTicksLimit || ticksLength, ticksLength);\nfunction sample(arr, numItems) {\n const result = [];\n const increment = arr.length / numItems;\n const len = arr.length;\n let i = 0;\n for (; i < len; i += increment) {\n result.push(arr[Math.floor(i)]);\n }\n return result;\n}\nfunction getPixelForGridLine(scale, index, offsetGridLines) {\n const length = scale.ticks.length;\n const validIndex = Math.min(index, length - 1);\n const start = scale._startPixel;\n const end = scale._endPixel;\n const epsilon = 1e-6;\n let lineValue = scale.getPixelForTick(validIndex);\n let offset;\n if (offsetGridLines) {\n if (length === 1) {\n offset = Math.max(lineValue - start, end - lineValue);\n } else if (index === 0) {\n offset = (scale.getPixelForTick(1) - lineValue) / 2;\n } else {\n offset = (lineValue - scale.getPixelForTick(validIndex - 1)) / 2;\n }\n lineValue += validIndex < index ? offset : -offset;\n if (lineValue < start - epsilon || lineValue > end + epsilon) {\n return;\n }\n }\n return lineValue;\n}\nfunction garbageCollect(caches, length) {\n each(caches, cache => {\n const gc = cache.gc;\n const gcLen = gc.length / 2;\n let i;\n if (gcLen > length) {\n for (i = 0; i < gcLen; ++i) {\n delete cache.data[gc[i]];\n }\n gc.splice(0, gcLen);\n }\n });\n}\nfunction getTickMarkLength(options) {\n return options.drawTicks ? options.tickLength : 0;\n}\nfunction getTitleHeight(options, fallback) {\n if (!options.display) {\n return 0;\n }\n const font = toFont(options.font, fallback);\n const padding = toPadding(options.padding);\n const lines = isArray(options.text) ? options.text.length : 1;\n return lines * font.lineHeight + padding.height;\n}\nfunction createScaleContext(parent, scale) {\n return createContext(parent, {\n scale,\n type: 'scale'\n });\n}\nfunction createTickContext(parent, index, tick) {\n return createContext(parent, {\n tick,\n index,\n type: 'tick'\n });\n}\nfunction titleAlign(align, position, reverse) {\n let ret = _toLeftRightCenter(align);\n if (reverse && position !== 'right' || !reverse && position === 'right') {\n ret = reverseAlign(ret);\n }\n return ret;\n}\nfunction titleArgs(scale, offset, position, align) {\n const {\n top,\n left,\n bottom,\n right,\n chart\n } = scale;\n const {\n chartArea,\n scales\n } = chart;\n let rotation = 0;\n let maxWidth, titleX, titleY;\n const height = bottom - top;\n const width = right - left;\n if (scale.isHorizontal()) {\n titleX = _alignStartEnd(align, left, right);\n if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n titleY = scales[positionAxisID].getPixelForValue(value) + height - offset;\n } else if (position === 'center') {\n titleY = (chartArea.bottom + chartArea.top) / 2 + height - offset;\n } else {\n titleY = offsetFromEdge(scale, position, offset);\n }\n maxWidth = right - left;\n } else {\n if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n titleX = scales[positionAxisID].getPixelForValue(value) - width + offset;\n } else if (position === 'center') {\n titleX = (chartArea.left + chartArea.right) / 2 - width + offset;\n } else {\n titleX = offsetFromEdge(scale, position, offset);\n }\n titleY = _alignStartEnd(align, bottom, top);\n rotation = position === 'left' ? -HALF_PI : HALF_PI;\n }\n return {\n titleX,\n titleY,\n maxWidth,\n rotation\n };\n}\nclass Scale extends Element {\n constructor(cfg) {\n super();\n this.id = cfg.id;\n this.type = cfg.type;\n this.options = undefined;\n this.ctx = cfg.ctx;\n this.chart = cfg.chart;\n this.top = undefined;\n this.bottom = undefined;\n this.left = undefined;\n this.right = undefined;\n this.width = undefined;\n this.height = undefined;\n this._margins = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n };\n this.maxWidth = undefined;\n this.maxHeight = undefined;\n this.paddingTop = undefined;\n this.paddingBottom = undefined;\n this.paddingLeft = undefined;\n this.paddingRight = undefined;\n this.axis = undefined;\n this.labelRotation = undefined;\n this.min = undefined;\n this.max = undefined;\n this._range = undefined;\n this.ticks = [];\n this._gridLineItems = null;\n this._labelItems = null;\n this._labelSizes = null;\n this._length = 0;\n this._maxLength = 0;\n this._longestTextCache = {};\n this._startPixel = undefined;\n this._endPixel = undefined;\n this._reversePixels = false;\n this._userMax = undefined;\n this._userMin = undefined;\n this._suggestedMax = undefined;\n this._suggestedMin = undefined;\n this._ticksLength = 0;\n this._borderValue = 0;\n this._cache = {};\n this._dataLimitsCached = false;\n this.$context = undefined;\n }\n init(options) {\n this.options = options.setContext(this.getContext());\n this.axis = options.axis;\n this._userMin = this.parse(options.min);\n this._userMax = this.parse(options.max);\n this._suggestedMin = this.parse(options.suggestedMin);\n this._suggestedMax = this.parse(options.suggestedMax);\n }\n parse(raw, index) {\n return raw;\n }\n getUserBounds() {\n let {\n _userMin,\n _userMax,\n _suggestedMin,\n _suggestedMax\n } = this;\n _userMin = finiteOrDefault(_userMin, Number.POSITIVE_INFINITY);\n _userMax = finiteOrDefault(_userMax, Number.NEGATIVE_INFINITY);\n _suggestedMin = finiteOrDefault(_suggestedMin, Number.POSITIVE_INFINITY);\n _suggestedMax = finiteOrDefault(_suggestedMax, Number.NEGATIVE_INFINITY);\n return {\n min: finiteOrDefault(_userMin, _suggestedMin),\n max: finiteOrDefault(_userMax, _suggestedMax),\n minDefined: isNumberFinite(_userMin),\n maxDefined: isNumberFinite(_userMax)\n };\n }\n getMinMax(canStack) {\n let {\n min,\n max,\n minDefined,\n maxDefined\n } = this.getUserBounds();\n let range;\n if (minDefined && maxDefined) {\n return {\n min,\n max\n };\n }\n const metas = this.getMatchingVisibleMetas();\n for (let i = 0, ilen = metas.length; i < ilen; ++i) {\n range = metas[i].controller.getMinMax(this, canStack);\n if (!minDefined) {\n min = Math.min(min, range.min);\n }\n if (!maxDefined) {\n max = Math.max(max, range.max);\n }\n }\n min = maxDefined && min > max ? max : min;\n max = minDefined && min > max ? min : max;\n return {\n min: finiteOrDefault(min, finiteOrDefault(max, min)),\n max: finiteOrDefault(max, finiteOrDefault(min, max))\n };\n }\n getPadding() {\n return {\n left: this.paddingLeft || 0,\n top: this.paddingTop || 0,\n right: this.paddingRight || 0,\n bottom: this.paddingBottom || 0\n };\n }\n getTicks() {\n return this.ticks;\n }\n getLabels() {\n const data = this.chart.data;\n return this.options.labels || (this.isHorizontal() ? data.xLabels : data.yLabels) || data.labels || [];\n }\n getLabelItems(chartArea = this.chart.chartArea) {\n const items = this._labelItems || (this._labelItems = this._computeLabelItems(chartArea));\n return items;\n }\n beforeLayout() {\n this._cache = {};\n this._dataLimitsCached = false;\n }\n beforeUpdate() {\n callback(this.options.beforeUpdate, [this]);\n }\n update(maxWidth, maxHeight, margins) {\n const {\n beginAtZero,\n grace,\n ticks: tickOpts\n } = this.options;\n const sampleSize = tickOpts.sampleSize;\n this.beforeUpdate();\n this.maxWidth = maxWidth;\n this.maxHeight = maxHeight;\n this._margins = margins = Object.assign({\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n }, margins);\n this.ticks = null;\n this._labelSizes = null;\n this._gridLineItems = null;\n this._labelItems = null;\n this.beforeSetDimensions();\n this.setDimensions();\n this.afterSetDimensions();\n this._maxLength = this.isHorizontal() ? this.width + margins.left + margins.right : this.height + margins.top + margins.bottom;\n if (!this._dataLimitsCached) {\n this.beforeDataLimits();\n this.determineDataLimits();\n this.afterDataLimits();\n this._range = _addGrace(this, grace, beginAtZero);\n this._dataLimitsCached = true;\n }\n this.beforeBuildTicks();\n this.ticks = this.buildTicks() || [];\n this.afterBuildTicks();\n const samplingEnabled = sampleSize < this.ticks.length;\n this._convertTicksToLabels(samplingEnabled ? sample(this.ticks, sampleSize) : this.ticks);\n this.configure();\n this.beforeCalculateLabelRotation();\n this.calculateLabelRotation();\n this.afterCalculateLabelRotation();\n if (tickOpts.display && (tickOpts.autoSkip || tickOpts.source === 'auto')) {\n this.ticks = autoSkip(this, this.ticks);\n this._labelSizes = null;\n this.afterAutoSkip();\n }\n if (samplingEnabled) {\n this._convertTicksToLabels(this.ticks);\n }\n this.beforeFit();\n this.fit();\n this.afterFit();\n this.afterUpdate();\n }\n configure() {\n let reversePixels = this.options.reverse;\n let startPixel, endPixel;\n if (this.isHorizontal()) {\n startPixel = this.left;\n endPixel = this.right;\n } else {\n startPixel = this.top;\n endPixel = this.bottom;\n reversePixels = !reversePixels;\n }\n this._startPixel = startPixel;\n this._endPixel = endPixel;\n this._reversePixels = reversePixels;\n this._length = endPixel - startPixel;\n this._alignToPixels = this.options.alignToPixels;\n }\n afterUpdate() {\n callback(this.options.afterUpdate, [this]);\n }\n beforeSetDimensions() {\n callback(this.options.beforeSetDimensions, [this]);\n }\n setDimensions() {\n if (this.isHorizontal()) {\n this.width = this.maxWidth;\n this.left = 0;\n this.right = this.width;\n } else {\n this.height = this.maxHeight;\n this.top = 0;\n this.bottom = this.height;\n }\n this.paddingLeft = 0;\n this.paddingTop = 0;\n this.paddingRight = 0;\n this.paddingBottom = 0;\n }\n afterSetDimensions() {\n callback(this.options.afterSetDimensions, [this]);\n }\n _callHooks(name) {\n this.chart.notifyPlugins(name, this.getContext());\n callback(this.options[name], [this]);\n }\n beforeDataLimits() {\n this._callHooks('beforeDataLimits');\n }\n determineDataLimits() {}\n afterDataLimits() {\n this._callHooks('afterDataLimits');\n }\n beforeBuildTicks() {\n this._callHooks('beforeBuildTicks');\n }\n buildTicks() {\n return [];\n }\n afterBuildTicks() {\n this._callHooks('afterBuildTicks');\n }\n beforeTickToLabelConversion() {\n callback(this.options.beforeTickToLabelConversion, [this]);\n }\n generateTickLabels(ticks) {\n const tickOpts = this.options.ticks;\n let i, ilen, tick;\n for (i = 0, ilen = ticks.length; i < ilen; i++) {\n tick = ticks[i];\n tick.label = callback(tickOpts.callback, [tick.value, i, ticks], this);\n }\n }\n afterTickToLabelConversion() {\n callback(this.options.afterTickToLabelConversion, [this]);\n }\n beforeCalculateLabelRotation() {\n callback(this.options.beforeCalculateLabelRotation, [this]);\n }\n calculateLabelRotation() {\n const options = this.options;\n const tickOpts = options.ticks;\n const numTicks = getTicksLimit(this.ticks.length, options.ticks.maxTicksLimit);\n const minRotation = tickOpts.minRotation || 0;\n const maxRotation = tickOpts.maxRotation;\n let labelRotation = minRotation;\n let tickWidth, maxHeight, maxLabelDiagonal;\n if (!this._isVisible() || !tickOpts.display || minRotation >= maxRotation || numTicks <= 1 || !this.isHorizontal()) {\n this.labelRotation = minRotation;\n return;\n }\n const labelSizes = this._getLabelSizes();\n const maxLabelWidth = labelSizes.widest.width;\n const maxLabelHeight = labelSizes.highest.height;\n const maxWidth = _limitValue(this.chart.width - maxLabelWidth, 0, this.maxWidth);\n tickWidth = options.offset ? this.maxWidth / numTicks : maxWidth / (numTicks - 1);\n if (maxLabelWidth + 6 > tickWidth) {\n tickWidth = maxWidth / (numTicks - (options.offset ? 0.5 : 1));\n maxHeight = this.maxHeight - getTickMarkLength(options.grid) - tickOpts.padding - getTitleHeight(options.title, this.chart.options.font);\n maxLabelDiagonal = Math.sqrt(maxLabelWidth * maxLabelWidth + maxLabelHeight * maxLabelHeight);\n labelRotation = toDegrees(Math.min(Math.asin(_limitValue((labelSizes.highest.height + 6) / tickWidth, -1, 1)), Math.asin(_limitValue(maxHeight / maxLabelDiagonal, -1, 1)) - Math.asin(_limitValue(maxLabelHeight / maxLabelDiagonal, -1, 1))));\n labelRotation = Math.max(minRotation, Math.min(maxRotation, labelRotation));\n }\n this.labelRotation = labelRotation;\n }\n afterCalculateLabelRotation() {\n callback(this.options.afterCalculateLabelRotation, [this]);\n }\n afterAutoSkip() {}\n beforeFit() {\n callback(this.options.beforeFit, [this]);\n }\n fit() {\n const minSize = {\n width: 0,\n height: 0\n };\n const {\n chart,\n options: {\n ticks: tickOpts,\n title: titleOpts,\n grid: gridOpts\n }\n } = this;\n const display = this._isVisible();\n const isHorizontal = this.isHorizontal();\n if (display) {\n const titleHeight = getTitleHeight(titleOpts, chart.options.font);\n if (isHorizontal) {\n minSize.width = this.maxWidth;\n minSize.height = getTickMarkLength(gridOpts) + titleHeight;\n } else {\n minSize.height = this.maxHeight;\n minSize.width = getTickMarkLength(gridOpts) + titleHeight;\n }\n if (tickOpts.display && this.ticks.length) {\n const {\n first,\n last,\n widest,\n highest\n } = this._getLabelSizes();\n const tickPadding = tickOpts.padding * 2;\n const angleRadians = toRadians(this.labelRotation);\n const cos = Math.cos(angleRadians);\n const sin = Math.sin(angleRadians);\n if (isHorizontal) {\n const labelHeight = tickOpts.mirror ? 0 : sin * widest.width + cos * highest.height;\n minSize.height = Math.min(this.maxHeight, minSize.height + labelHeight + tickPadding);\n } else {\n const labelWidth = tickOpts.mirror ? 0 : cos * widest.width + sin * highest.height;\n minSize.width = Math.min(this.maxWidth, minSize.width + labelWidth + tickPadding);\n }\n this._calculatePadding(first, last, sin, cos);\n }\n }\n this._handleMargins();\n if (isHorizontal) {\n this.width = this._length = chart.width - this._margins.left - this._margins.right;\n this.height = minSize.height;\n } else {\n this.width = minSize.width;\n this.height = this._length = chart.height - this._margins.top - this._margins.bottom;\n }\n }\n _calculatePadding(first, last, sin, cos) {\n const {\n ticks: {\n align,\n padding\n },\n position\n } = this.options;\n const isRotated = this.labelRotation !== 0;\n const labelsBelowTicks = position !== 'top' && this.axis === 'x';\n if (this.isHorizontal()) {\n const offsetLeft = this.getPixelForTick(0) - this.left;\n const offsetRight = this.right - this.getPixelForTick(this.ticks.length - 1);\n let paddingLeft = 0;\n let paddingRight = 0;\n if (isRotated) {\n if (labelsBelowTicks) {\n paddingLeft = cos * first.width;\n paddingRight = sin * last.height;\n } else {\n paddingLeft = sin * first.height;\n paddingRight = cos * last.width;\n }\n } else if (align === 'start') {\n paddingRight = last.width;\n } else if (align === 'end') {\n paddingLeft = first.width;\n } else if (align !== 'inner') {\n paddingLeft = first.width / 2;\n paddingRight = last.width / 2;\n }\n this.paddingLeft = Math.max((paddingLeft - offsetLeft + padding) * this.width / (this.width - offsetLeft), 0);\n this.paddingRight = Math.max((paddingRight - offsetRight + padding) * this.width / (this.width - offsetRight), 0);\n } else {\n let paddingTop = last.height / 2;\n let paddingBottom = first.height / 2;\n if (align === 'start') {\n paddingTop = 0;\n paddingBottom = first.height;\n } else if (align === 'end') {\n paddingTop = last.height;\n paddingBottom = 0;\n }\n this.paddingTop = paddingTop + padding;\n this.paddingBottom = paddingBottom + padding;\n }\n }\n _handleMargins() {\n if (this._margins) {\n this._margins.left = Math.max(this.paddingLeft, this._margins.left);\n this._margins.top = Math.max(this.paddingTop, this._margins.top);\n this._margins.right = Math.max(this.paddingRight, this._margins.right);\n this._margins.bottom = Math.max(this.paddingBottom, this._margins.bottom);\n }\n }\n afterFit() {\n callback(this.options.afterFit, [this]);\n }\n isHorizontal() {\n const {\n axis,\n position\n } = this.options;\n return position === 'top' || position === 'bottom' || axis === 'x';\n }\n isFullSize() {\n return this.options.fullSize;\n }\n _convertTicksToLabels(ticks) {\n this.beforeTickToLabelConversion();\n this.generateTickLabels(ticks);\n let i, ilen;\n for (i = 0, ilen = ticks.length; i < ilen; i++) {\n if (isNullOrUndef(ticks[i].label)) {\n ticks.splice(i, 1);\n ilen--;\n i--;\n }\n }\n this.afterTickToLabelConversion();\n }\n _getLabelSizes() {\n let labelSizes = this._labelSizes;\n if (!labelSizes) {\n const sampleSize = this.options.ticks.sampleSize;\n let ticks = this.ticks;\n if (sampleSize < ticks.length) {\n ticks = sample(ticks, sampleSize);\n }\n this._labelSizes = labelSizes = this._computeLabelSizes(ticks, ticks.length, this.options.ticks.maxTicksLimit);\n }\n return labelSizes;\n }\n _computeLabelSizes(ticks, length, maxTicksLimit) {\n const {\n ctx,\n _longestTextCache: caches\n } = this;\n const widths = [];\n const heights = [];\n const increment = Math.floor(length / getTicksLimit(length, maxTicksLimit));\n let widestLabelSize = 0;\n let highestLabelSize = 0;\n let i, j, jlen, label, tickFont, fontString, cache, lineHeight, width, height, nestedLabel;\n for (i = 0; i < length; i += increment) {\n label = ticks[i].label;\n tickFont = this._resolveTickFontOptions(i);\n ctx.font = fontString = tickFont.string;\n cache = caches[fontString] = caches[fontString] || {\n data: {},\n gc: []\n };\n lineHeight = tickFont.lineHeight;\n width = height = 0;\n if (!isNullOrUndef(label) && !isArray(label)) {\n width = _measureText(ctx, cache.data, cache.gc, width, label);\n height = lineHeight;\n } else if (isArray(label)) {\n for (j = 0, jlen = label.length; j < jlen; ++j) {\n nestedLabel = label[j];\n if (!isNullOrUndef(nestedLabel) && !isArray(nestedLabel)) {\n width = _measureText(ctx, cache.data, cache.gc, width, nestedLabel);\n height += lineHeight;\n }\n }\n }\n widths.push(width);\n heights.push(height);\n widestLabelSize = Math.max(width, widestLabelSize);\n highestLabelSize = Math.max(height, highestLabelSize);\n }\n garbageCollect(caches, length);\n const widest = widths.indexOf(widestLabelSize);\n const highest = heights.indexOf(highestLabelSize);\n const valueAt = idx => ({\n width: widths[idx] || 0,\n height: heights[idx] || 0\n });\n return {\n first: valueAt(0),\n last: valueAt(length - 1),\n widest: valueAt(widest),\n highest: valueAt(highest),\n widths,\n heights\n };\n }\n getLabelForValue(value) {\n return value;\n }\n getPixelForValue(value, index) {\n return NaN;\n }\n getValueForPixel(pixel) {}\n getPixelForTick(index) {\n const ticks = this.ticks;\n if (index < 0 || index > ticks.length - 1) {\n return null;\n }\n return this.getPixelForValue(ticks[index].value);\n }\n getPixelForDecimal(decimal) {\n if (this._reversePixels) {\n decimal = 1 - decimal;\n }\n const pixel = this._startPixel + decimal * this._length;\n return _int16Range(this._alignToPixels ? _alignPixel(this.chart, pixel, 0) : pixel);\n }\n getDecimalForPixel(pixel) {\n const decimal = (pixel - this._startPixel) / this._length;\n return this._reversePixels ? 1 - decimal : decimal;\n }\n getBasePixel() {\n return this.getPixelForValue(this.getBaseValue());\n }\n getBaseValue() {\n const {\n min,\n max\n } = this;\n return min < 0 && max < 0 ? max : min > 0 && max > 0 ? min : 0;\n }\n getContext(index) {\n const ticks = this.ticks || [];\n if (index >= 0 && index < ticks.length) {\n const tick = ticks[index];\n return tick.$context || (tick.$context = createTickContext(this.getContext(), index, tick));\n }\n return this.$context || (this.$context = createScaleContext(this.chart.getContext(), this));\n }\n _tickSize() {\n const optionTicks = this.options.ticks;\n const rot = toRadians(this.labelRotation);\n const cos = Math.abs(Math.cos(rot));\n const sin = Math.abs(Math.sin(rot));\n const labelSizes = this._getLabelSizes();\n const padding = optionTicks.autoSkipPadding || 0;\n const w = labelSizes ? labelSizes.widest.width + padding : 0;\n const h = labelSizes ? labelSizes.highest.height + padding : 0;\n return this.isHorizontal() ? h * cos > w * sin ? w / cos : h / sin : h * sin < w * cos ? h / cos : w / sin;\n }\n _isVisible() {\n const display = this.options.display;\n if (display !== 'auto') {\n return !!display;\n }\n return this.getMatchingVisibleMetas().length > 0;\n }\n _computeGridLineItems(chartArea) {\n const axis = this.axis;\n const chart = this.chart;\n const options = this.options;\n const {\n grid,\n position,\n border\n } = options;\n const offset = grid.offset;\n const isHorizontal = this.isHorizontal();\n const ticks = this.ticks;\n const ticksLength = ticks.length + (offset ? 1 : 0);\n const tl = getTickMarkLength(grid);\n const items = [];\n const borderOpts = border.setContext(this.getContext());\n const axisWidth = borderOpts.display ? borderOpts.width : 0;\n const axisHalfWidth = axisWidth / 2;\n const alignBorderValue = function (pixel) {\n return _alignPixel(chart, pixel, axisWidth);\n };\n let borderValue, i, lineValue, alignedLineValue;\n let tx1, ty1, tx2, ty2, x1, y1, x2, y2;\n if (position === 'top') {\n borderValue = alignBorderValue(this.bottom);\n ty1 = this.bottom - tl;\n ty2 = borderValue - axisHalfWidth;\n y1 = alignBorderValue(chartArea.top) + axisHalfWidth;\n y2 = chartArea.bottom;\n } else if (position === 'bottom') {\n borderValue = alignBorderValue(this.top);\n y1 = chartArea.top;\n y2 = alignBorderValue(chartArea.bottom) - axisHalfWidth;\n ty1 = borderValue + axisHalfWidth;\n ty2 = this.top + tl;\n } else if (position === 'left') {\n borderValue = alignBorderValue(this.right);\n tx1 = this.right - tl;\n tx2 = borderValue - axisHalfWidth;\n x1 = alignBorderValue(chartArea.left) + axisHalfWidth;\n x2 = chartArea.right;\n } else if (position === 'right') {\n borderValue = alignBorderValue(this.left);\n x1 = chartArea.left;\n x2 = alignBorderValue(chartArea.right) - axisHalfWidth;\n tx1 = borderValue + axisHalfWidth;\n tx2 = this.left + tl;\n } else if (axis === 'x') {\n if (position === 'center') {\n borderValue = alignBorderValue((chartArea.top + chartArea.bottom) / 2 + 0.5);\n } else if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));\n }\n y1 = chartArea.top;\n y2 = chartArea.bottom;\n ty1 = borderValue + axisHalfWidth;\n ty2 = ty1 + tl;\n } else if (axis === 'y') {\n if (position === 'center') {\n borderValue = alignBorderValue((chartArea.left + chartArea.right) / 2);\n } else if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));\n }\n tx1 = borderValue - axisHalfWidth;\n tx2 = tx1 - tl;\n x1 = chartArea.left;\n x2 = chartArea.right;\n }\n const limit = valueOrDefault(options.ticks.maxTicksLimit, ticksLength);\n const step = Math.max(1, Math.ceil(ticksLength / limit));\n for (i = 0; i < ticksLength; i += step) {\n const context = this.getContext(i);\n const optsAtIndex = grid.setContext(context);\n const optsAtIndexBorder = border.setContext(context);\n const lineWidth = optsAtIndex.lineWidth;\n const lineColor = optsAtIndex.color;\n const borderDash = optsAtIndexBorder.dash || [];\n const borderDashOffset = optsAtIndexBorder.dashOffset;\n const tickWidth = optsAtIndex.tickWidth;\n const tickColor = optsAtIndex.tickColor;\n const tickBorderDash = optsAtIndex.tickBorderDash || [];\n const tickBorderDashOffset = optsAtIndex.tickBorderDashOffset;\n lineValue = getPixelForGridLine(this, i, offset);\n if (lineValue === undefined) {\n continue;\n }\n alignedLineValue = _alignPixel(chart, lineValue, lineWidth);\n if (isHorizontal) {\n tx1 = tx2 = x1 = x2 = alignedLineValue;\n } else {\n ty1 = ty2 = y1 = y2 = alignedLineValue;\n }\n items.push({\n tx1,\n ty1,\n tx2,\n ty2,\n x1,\n y1,\n x2,\n y2,\n width: lineWidth,\n color: lineColor,\n borderDash,\n borderDashOffset,\n tickWidth,\n tickColor,\n tickBorderDash,\n tickBorderDashOffset\n });\n }\n this._ticksLength = ticksLength;\n this._borderValue = borderValue;\n return items;\n }\n _computeLabelItems(chartArea) {\n const axis = this.axis;\n const options = this.options;\n const {\n position,\n ticks: optionTicks\n } = options;\n const isHorizontal = this.isHorizontal();\n const ticks = this.ticks;\n const {\n align,\n crossAlign,\n padding,\n mirror\n } = optionTicks;\n const tl = getTickMarkLength(options.grid);\n const tickAndPadding = tl + padding;\n const hTickAndPadding = mirror ? -padding : tickAndPadding;\n const rotation = -toRadians(this.labelRotation);\n const items = [];\n let i, ilen, tick, label, x, y, textAlign, pixel, font, lineHeight, lineCount, textOffset;\n let textBaseline = 'middle';\n if (position === 'top') {\n y = this.bottom - hTickAndPadding;\n textAlign = this._getXAxisLabelAlignment();\n } else if (position === 'bottom') {\n y = this.top + hTickAndPadding;\n textAlign = this._getXAxisLabelAlignment();\n } else if (position === 'left') {\n const ret = this._getYAxisLabelAlignment(tl);\n textAlign = ret.textAlign;\n x = ret.x;\n } else if (position === 'right') {\n const ret = this._getYAxisLabelAlignment(tl);\n textAlign = ret.textAlign;\n x = ret.x;\n } else if (axis === 'x') {\n if (position === 'center') {\n y = (chartArea.top + chartArea.bottom) / 2 + tickAndPadding;\n } else if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n y = this.chart.scales[positionAxisID].getPixelForValue(value) + tickAndPadding;\n }\n textAlign = this._getXAxisLabelAlignment();\n } else if (axis === 'y') {\n if (position === 'center') {\n x = (chartArea.left + chartArea.right) / 2 - tickAndPadding;\n } else if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n x = this.chart.scales[positionAxisID].getPixelForValue(value);\n }\n textAlign = this._getYAxisLabelAlignment(tl).textAlign;\n }\n if (axis === 'y') {\n if (align === 'start') {\n textBaseline = 'top';\n } else if (align === 'end') {\n textBaseline = 'bottom';\n }\n }\n const labelSizes = this._getLabelSizes();\n for (i = 0, ilen = ticks.length; i < ilen; ++i) {\n tick = ticks[i];\n label = tick.label;\n const optsAtIndex = optionTicks.setContext(this.getContext(i));\n pixel = this.getPixelForTick(i) + optionTicks.labelOffset;\n font = this._resolveTickFontOptions(i);\n lineHeight = font.lineHeight;\n lineCount = isArray(label) ? label.length : 1;\n const halfCount = lineCount / 2;\n const color = optsAtIndex.color;\n const strokeColor = optsAtIndex.textStrokeColor;\n const strokeWidth = optsAtIndex.textStrokeWidth;\n let tickTextAlign = textAlign;\n if (isHorizontal) {\n x = pixel;\n if (textAlign === 'inner') {\n if (i === ilen - 1) {\n tickTextAlign = !this.options.reverse ? 'right' : 'left';\n } else if (i === 0) {\n tickTextAlign = !this.options.reverse ? 'left' : 'right';\n } else {\n tickTextAlign = 'center';\n }\n }\n if (position === 'top') {\n if (crossAlign === 'near' || rotation !== 0) {\n textOffset = -lineCount * lineHeight + lineHeight / 2;\n } else if (crossAlign === 'center') {\n textOffset = -labelSizes.highest.height / 2 - halfCount * lineHeight + lineHeight;\n } else {\n textOffset = -labelSizes.highest.height + lineHeight / 2;\n }\n } else {\n if (crossAlign === 'near' || rotation !== 0) {\n textOffset = lineHeight / 2;\n } else if (crossAlign === 'center') {\n textOffset = labelSizes.highest.height / 2 - halfCount * lineHeight;\n } else {\n textOffset = labelSizes.highest.height - lineCount * lineHeight;\n }\n }\n if (mirror) {\n textOffset *= -1;\n }\n if (rotation !== 0 && !optsAtIndex.showLabelBackdrop) {\n x += lineHeight / 2 * Math.sin(rotation);\n }\n } else {\n y = pixel;\n textOffset = (1 - lineCount) * lineHeight / 2;\n }\n let backdrop;\n if (optsAtIndex.showLabelBackdrop) {\n const labelPadding = toPadding(optsAtIndex.backdropPadding);\n const height = labelSizes.heights[i];\n const width = labelSizes.widths[i];\n let top = textOffset - labelPadding.top;\n let left = 0 - labelPadding.left;\n switch (textBaseline) {\n case 'middle':\n top -= height / 2;\n break;\n case 'bottom':\n top -= height;\n break;\n }\n switch (textAlign) {\n case 'center':\n left -= width / 2;\n break;\n case 'right':\n left -= width;\n break;\n case 'inner':\n if (i === ilen - 1) {\n left -= width;\n } else if (i > 0) {\n left -= width / 2;\n }\n break;\n }\n backdrop = {\n left,\n top,\n width: width + labelPadding.width,\n height: height + labelPadding.height,\n color: optsAtIndex.backdropColor\n };\n }\n items.push({\n label,\n font,\n textOffset,\n options: {\n rotation,\n color,\n strokeColor,\n strokeWidth,\n textAlign: tickTextAlign,\n textBaseline,\n translation: [x, y],\n backdrop\n }\n });\n }\n return items;\n }\n _getXAxisLabelAlignment() {\n const {\n position,\n ticks\n } = this.options;\n const rotation = -toRadians(this.labelRotation);\n if (rotation) {\n return position === 'top' ? 'left' : 'right';\n }\n let align = 'center';\n if (ticks.align === 'start') {\n align = 'left';\n } else if (ticks.align === 'end') {\n align = 'right';\n } else if (ticks.align === 'inner') {\n align = 'inner';\n }\n return align;\n }\n _getYAxisLabelAlignment(tl) {\n const {\n position,\n ticks: {\n crossAlign,\n mirror,\n padding\n }\n } = this.options;\n const labelSizes = this._getLabelSizes();\n const tickAndPadding = tl + padding;\n const widest = labelSizes.widest.width;\n let textAlign;\n let x;\n if (position === 'left') {\n if (mirror) {\n x = this.right + padding;\n if (crossAlign === 'near') {\n textAlign = 'left';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x += widest / 2;\n } else {\n textAlign = 'right';\n x += widest;\n }\n } else {\n x = this.right - tickAndPadding;\n if (crossAlign === 'near') {\n textAlign = 'right';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x -= widest / 2;\n } else {\n textAlign = 'left';\n x = this.left;\n }\n }\n } else if (position === 'right') {\n if (mirror) {\n x = this.left + padding;\n if (crossAlign === 'near') {\n textAlign = 'right';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x -= widest / 2;\n } else {\n textAlign = 'left';\n x -= widest;\n }\n } else {\n x = this.left + tickAndPadding;\n if (crossAlign === 'near') {\n textAlign = 'left';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x += widest / 2;\n } else {\n textAlign = 'right';\n x = this.right;\n }\n }\n } else {\n textAlign = 'right';\n }\n return {\n textAlign,\n x\n };\n }\n _computeLabelArea() {\n if (this.options.ticks.mirror) {\n return;\n }\n const chart = this.chart;\n const position = this.options.position;\n if (position === 'left' || position === 'right') {\n return {\n top: 0,\n left: this.left,\n bottom: chart.height,\n right: this.right\n };\n }\n if (position === 'top' || position === 'bottom') {\n return {\n top: this.top,\n left: 0,\n bottom: this.bottom,\n right: chart.width\n };\n }\n }\n drawBackground() {\n const {\n ctx,\n options: {\n backgroundColor\n },\n left,\n top,\n width,\n height\n } = this;\n if (backgroundColor) {\n ctx.save();\n ctx.fillStyle = backgroundColor;\n ctx.fillRect(left, top, width, height);\n ctx.restore();\n }\n }\n getLineWidthForValue(value) {\n const grid = this.options.grid;\n if (!this._isVisible() || !grid.display) {\n return 0;\n }\n const ticks = this.ticks;\n const index = ticks.findIndex(t => t.value === value);\n if (index >= 0) {\n const opts = grid.setContext(this.getContext(index));\n return opts.lineWidth;\n }\n return 0;\n }\n drawGrid(chartArea) {\n const grid = this.options.grid;\n const ctx = this.ctx;\n const items = this._gridLineItems || (this._gridLineItems = this._computeGridLineItems(chartArea));\n let i, ilen;\n const drawLine = (p1, p2, style) => {\n if (!style.width || !style.color) {\n return;\n }\n ctx.save();\n ctx.lineWidth = style.width;\n ctx.strokeStyle = style.color;\n ctx.setLineDash(style.borderDash || []);\n ctx.lineDashOffset = style.borderDashOffset;\n ctx.beginPath();\n ctx.moveTo(p1.x, p1.y);\n ctx.lineTo(p2.x, p2.y);\n ctx.stroke();\n ctx.restore();\n };\n if (grid.display) {\n for (i = 0, ilen = items.length; i < ilen; ++i) {\n const item = items[i];\n if (grid.drawOnChartArea) {\n drawLine({\n x: item.x1,\n y: item.y1\n }, {\n x: item.x2,\n y: item.y2\n }, item);\n }\n if (grid.drawTicks) {\n drawLine({\n x: item.tx1,\n y: item.ty1\n }, {\n x: item.tx2,\n y: item.ty2\n }, {\n color: item.tickColor,\n width: item.tickWidth,\n borderDash: item.tickBorderDash,\n borderDashOffset: item.tickBorderDashOffset\n });\n }\n }\n }\n }\n drawBorder() {\n const {\n chart,\n ctx,\n options: {\n border,\n grid\n }\n } = this;\n const borderOpts = border.setContext(this.getContext());\n const axisWidth = border.display ? borderOpts.width : 0;\n if (!axisWidth) {\n return;\n }\n const lastLineWidth = grid.setContext(this.getContext(0)).lineWidth;\n const borderValue = this._borderValue;\n let x1, x2, y1, y2;\n if (this.isHorizontal()) {\n x1 = _alignPixel(chart, this.left, axisWidth) - axisWidth / 2;\n x2 = _alignPixel(chart, this.right, lastLineWidth) + lastLineWidth / 2;\n y1 = y2 = borderValue;\n } else {\n y1 = _alignPixel(chart, this.top, axisWidth) - axisWidth / 2;\n y2 = _alignPixel(chart, this.bottom, lastLineWidth) + lastLineWidth / 2;\n x1 = x2 = borderValue;\n }\n ctx.save();\n ctx.lineWidth = borderOpts.width;\n ctx.strokeStyle = borderOpts.color;\n ctx.beginPath();\n ctx.moveTo(x1, y1);\n ctx.lineTo(x2, y2);\n ctx.stroke();\n ctx.restore();\n }\n drawLabels(chartArea) {\n const optionTicks = this.options.ticks;\n if (!optionTicks.display) {\n return;\n }\n const ctx = this.ctx;\n const area = this._computeLabelArea();\n if (area) {\n clipArea(ctx, area);\n }\n const items = this.getLabelItems(chartArea);\n for (const item of items) {\n const renderTextOptions = item.options;\n const tickFont = item.font;\n const label = item.label;\n const y = item.textOffset;\n renderText(ctx, label, 0, y, tickFont, renderTextOptions);\n }\n if (area) {\n unclipArea(ctx);\n }\n }\n drawTitle() {\n const {\n ctx,\n options: {\n position,\n title,\n reverse\n }\n } = this;\n if (!title.display) {\n return;\n }\n const font = toFont(title.font);\n const padding = toPadding(title.padding);\n const align = title.align;\n let offset = font.lineHeight / 2;\n if (position === 'bottom' || position === 'center' || isObject(position)) {\n offset += padding.bottom;\n if (isArray(title.text)) {\n offset += font.lineHeight * (title.text.length - 1);\n }\n } else {\n offset += padding.top;\n }\n const {\n titleX,\n titleY,\n maxWidth,\n rotation\n } = titleArgs(this, offset, position, align);\n renderText(ctx, title.text, 0, 0, font, {\n color: title.color,\n maxWidth,\n rotation,\n textAlign: titleAlign(align, position, reverse),\n textBaseline: 'middle',\n translation: [titleX, titleY]\n });\n }\n draw(chartArea) {\n if (!this._isVisible()) {\n return;\n }\n this.drawBackground();\n this.drawGrid(chartArea);\n this.drawBorder();\n this.drawTitle();\n this.drawLabels(chartArea);\n }\n _layers() {\n const opts = this.options;\n const tz = opts.ticks && opts.ticks.z || 0;\n const gz = valueOrDefault(opts.grid && opts.grid.z, -1);\n const bz = valueOrDefault(opts.border && opts.border.z, 0);\n if (!this._isVisible() || this.draw !== Scale.prototype.draw) {\n return [{\n z: tz,\n draw: chartArea => {\n this.draw(chartArea);\n }\n }];\n }\n return [{\n z: gz,\n draw: chartArea => {\n this.drawBackground();\n this.drawGrid(chartArea);\n this.drawTitle();\n }\n }, {\n z: bz,\n draw: () => {\n this.drawBorder();\n }\n }, {\n z: tz,\n draw: chartArea => {\n this.drawLabels(chartArea);\n }\n }];\n }\n getMatchingVisibleMetas(type) {\n const metas = this.chart.getSortedVisibleDatasetMetas();\n const axisID = this.axis + 'AxisID';\n const result = [];\n let i, ilen;\n for (i = 0, ilen = metas.length; i < ilen; ++i) {\n const meta = metas[i];\n if (meta[axisID] === this.id && (!type || meta.type === type)) {\n result.push(meta);\n }\n }\n return result;\n }\n _resolveTickFontOptions(index) {\n const opts = this.options.ticks.setContext(this.getContext(index));\n return toFont(opts.font);\n }\n _maxDigits() {\n const fontSize = this._resolveTickFontOptions(0).lineHeight;\n return (this.isHorizontal() ? this.width : this.height) / fontSize;\n }\n}\nclass TypedRegistry {\n constructor(type, scope, override) {\n this.type = type;\n this.scope = scope;\n this.override = override;\n this.items = Object.create(null);\n }\n isForType(type) {\n return Object.prototype.isPrototypeOf.call(this.type.prototype, type.prototype);\n }\n register(item) {\n const proto = Object.getPrototypeOf(item);\n let parentScope;\n if (isIChartComponent(proto)) {\n parentScope = this.register(proto);\n }\n const items = this.items;\n const id = item.id;\n const scope = this.scope + '.' + id;\n if (!id) {\n throw new Error('class does not have id: ' + item);\n }\n if (id in items) {\n return scope;\n }\n items[id] = item;\n registerDefaults(item, scope, parentScope);\n if (this.override) {\n defaults.override(item.id, item.overrides);\n }\n return scope;\n }\n get(id) {\n return this.items[id];\n }\n unregister(item) {\n const items = this.items;\n const id = item.id;\n const scope = this.scope;\n if (id in items) {\n delete items[id];\n }\n if (scope && id in defaults[scope]) {\n delete defaults[scope][id];\n if (this.override) {\n delete overrides[id];\n }\n }\n }\n}\nfunction registerDefaults(item, scope, parentScope) {\n const itemDefaults = merge(Object.create(null), [parentScope ? defaults.get(parentScope) : {}, defaults.get(scope), item.defaults]);\n defaults.set(scope, itemDefaults);\n if (item.defaultRoutes) {\n routeDefaults(scope, item.defaultRoutes);\n }\n if (item.descriptors) {\n defaults.describe(scope, item.descriptors);\n }\n}\nfunction routeDefaults(scope, routes) {\n Object.keys(routes).forEach(property => {\n const propertyParts = property.split('.');\n const sourceName = propertyParts.pop();\n const sourceScope = [scope].concat(propertyParts).join('.');\n const parts = routes[property].split('.');\n const targetName = parts.pop();\n const targetScope = parts.join('.');\n defaults.route(sourceScope, sourceName, targetScope, targetName);\n });\n}\nfunction isIChartComponent(proto) {\n return 'id' in proto && 'defaults' in proto;\n}\nclass Registry {\n constructor() {\n this.controllers = new TypedRegistry(DatasetController, 'datasets', true);\n this.elements = new TypedRegistry(Element, 'elements');\n this.plugins = new TypedRegistry(Object, 'plugins');\n this.scales = new TypedRegistry(Scale, 'scales');\n this._typedRegistries = [this.controllers, this.scales, this.elements];\n }\n add(...args) {\n this._each('register', args);\n }\n remove(...args) {\n this._each('unregister', args);\n }\n addControllers(...args) {\n this._each('register', args, this.controllers);\n }\n addElements(...args) {\n this._each('register', args, this.elements);\n }\n addPlugins(...args) {\n this._each('register', args, this.plugins);\n }\n addScales(...args) {\n this._each('register', args, this.scales);\n }\n getController(id) {\n return this._get(id, this.controllers, 'controller');\n }\n getElement(id) {\n return this._get(id, this.elements, 'element');\n }\n getPlugin(id) {\n return this._get(id, this.plugins, 'plugin');\n }\n getScale(id) {\n return this._get(id, this.scales, 'scale');\n }\n removeControllers(...args) {\n this._each('unregister', args, this.controllers);\n }\n removeElements(...args) {\n this._each('unregister', args, this.elements);\n }\n removePlugins(...args) {\n this._each('unregister', args, this.plugins);\n }\n removeScales(...args) {\n this._each('unregister', args, this.scales);\n }\n _each(method, args, typedRegistry) {\n [...args].forEach(arg => {\n const reg = typedRegistry || this._getRegistryForType(arg);\n if (typedRegistry || reg.isForType(arg) || reg === this.plugins && arg.id) {\n this._exec(method, reg, arg);\n } else {\n each(arg, item => {\n const itemReg = typedRegistry || this._getRegistryForType(item);\n this._exec(method, itemReg, item);\n });\n }\n });\n }\n _exec(method, registry, component) {\n const camelMethod = _capitalize(method);\n callback(component['before' + camelMethod], [], component);\n registry[method](component);\n callback(component['after' + camelMethod], [], component);\n }\n _getRegistryForType(type) {\n for (let i = 0; i < this._typedRegistries.length; i++) {\n const reg = this._typedRegistries[i];\n if (reg.isForType(type)) {\n return reg;\n }\n }\n return this.plugins;\n }\n _get(id, typedRegistry, type) {\n const item = typedRegistry.get(id);\n if (item === undefined) {\n throw new Error('\"' + id + '\" is not a registered ' + type + '.');\n }\n return item;\n }\n}\nvar registry = /* #__PURE__ */new Registry();\nclass PluginService {\n constructor() {\n this._init = undefined;\n }\n notify(chart, hook, args, filter) {\n if (hook === 'beforeInit') {\n this._init = this._createDescriptors(chart, true);\n this._notify(this._init, chart, 'install');\n }\n if (this._init === undefined) {\n return;\n }\n const descriptors = filter ? this._descriptors(chart).filter(filter) : this._descriptors(chart);\n const result = this._notify(descriptors, chart, hook, args);\n if (hook === 'afterDestroy') {\n this._notify(descriptors, chart, 'stop');\n this._notify(this._init, chart, 'uninstall');\n this._init = undefined;\n }\n return result;\n }\n _notify(descriptors, chart, hook, args) {\n args = args || {};\n for (const descriptor of descriptors) {\n const plugin = descriptor.plugin;\n const method = plugin[hook];\n const params = [chart, args, descriptor.options];\n if (callback(method, params, plugin) === false && args.cancelable) {\n return false;\n }\n }\n return true;\n }\n invalidate() {\n if (!isNullOrUndef(this._cache)) {\n this._oldCache = this._cache;\n this._cache = undefined;\n }\n }\n _descriptors(chart) {\n if (this._cache) {\n return this._cache;\n }\n const descriptors = this._cache = this._createDescriptors(chart);\n this._notifyStateChanges(chart);\n return descriptors;\n }\n _createDescriptors(chart, all) {\n const config = chart && chart.config;\n const options = valueOrDefault(config.options && config.options.plugins, {});\n const plugins = allPlugins(config);\n return options === false && !all ? [] : createDescriptors(chart, plugins, options, all);\n }\n _notifyStateChanges(chart) {\n const previousDescriptors = this._oldCache || [];\n const descriptors = this._cache;\n const diff = (a, b) => a.filter(x => !b.some(y => x.plugin.id === y.plugin.id));\n this._notify(diff(previousDescriptors, descriptors), chart, 'stop');\n this._notify(diff(descriptors, previousDescriptors), chart, 'start');\n }\n}\nfunction allPlugins(config) {\n const localIds = {};\n const plugins = [];\n const keys = Object.keys(registry.plugins.items);\n for (let i = 0; i < keys.length; i++) {\n plugins.push(registry.getPlugin(keys[i]));\n }\n const local = config.plugins || [];\n for (let i = 0; i < local.length; i++) {\n const plugin = local[i];\n if (plugins.indexOf(plugin) === -1) {\n plugins.push(plugin);\n localIds[plugin.id] = true;\n }\n }\n return {\n plugins,\n localIds\n };\n}\nfunction getOpts(options, all) {\n if (!all && options === false) {\n return null;\n }\n if (options === true) {\n return {};\n }\n return options;\n}\nfunction createDescriptors(chart, {\n plugins,\n localIds\n}, options, all) {\n const result = [];\n const context = chart.getContext();\n for (const plugin of plugins) {\n const id = plugin.id;\n const opts = getOpts(options[id], all);\n if (opts === null) {\n continue;\n }\n result.push({\n plugin,\n options: pluginOpts(chart.config, {\n plugin,\n local: localIds[id]\n }, opts, context)\n });\n }\n return result;\n}\nfunction pluginOpts(config, {\n plugin,\n local\n}, opts, context) {\n const keys = config.pluginScopeKeys(plugin);\n const scopes = config.getOptionScopes(opts, keys);\n if (local && plugin.defaults) {\n scopes.push(plugin.defaults);\n }\n return config.createResolver(scopes, context, [''], {\n scriptable: false,\n indexable: false,\n allKeys: true\n });\n}\nfunction getIndexAxis(type, options) {\n const datasetDefaults = defaults.datasets[type] || {};\n const datasetOptions = (options.datasets || {})[type] || {};\n return datasetOptions.indexAxis || options.indexAxis || datasetDefaults.indexAxis || 'x';\n}\nfunction getAxisFromDefaultScaleID(id, indexAxis) {\n let axis = id;\n if (id === '_index_') {\n axis = indexAxis;\n } else if (id === '_value_') {\n axis = indexAxis === 'x' ? 'y' : 'x';\n }\n return axis;\n}\nfunction getDefaultScaleIDFromAxis(axis, indexAxis) {\n return axis === indexAxis ? '_index_' : '_value_';\n}\nfunction idMatchesAxis(id) {\n if (id === 'x' || id === 'y' || id === 'r') {\n return id;\n }\n}\nfunction axisFromPosition(position) {\n if (position === 'top' || position === 'bottom') {\n return 'x';\n }\n if (position === 'left' || position === 'right') {\n return 'y';\n }\n}\nfunction determineAxis(id, ...scaleOptions) {\n if (idMatchesAxis(id)) {\n return id;\n }\n for (const opts of scaleOptions) {\n const axis = opts.axis || axisFromPosition(opts.position) || id.length > 1 && idMatchesAxis(id[0].toLowerCase());\n if (axis) {\n return axis;\n }\n }\n throw new Error(`Cannot determine type of '${id}' axis. Please provide 'axis' or 'position' option.`);\n}\nfunction getAxisFromDataset(id, axis, dataset) {\n if (dataset[axis + 'AxisID'] === id) {\n return {\n axis\n };\n }\n}\nfunction retrieveAxisFromDatasets(id, config) {\n if (config.data && config.data.datasets) {\n const boundDs = config.data.datasets.filter(d => d.xAxisID === id || d.yAxisID === id);\n if (boundDs.length) {\n return getAxisFromDataset(id, 'x', boundDs[0]) || getAxisFromDataset(id, 'y', boundDs[0]);\n }\n }\n return {};\n}\nfunction mergeScaleConfig(config, options) {\n const chartDefaults = overrides[config.type] || {\n scales: {}\n };\n const configScales = options.scales || {};\n const chartIndexAxis = getIndexAxis(config.type, options);\n const scales = Object.create(null);\n Object.keys(configScales).forEach(id => {\n const scaleConf = configScales[id];\n if (!isObject(scaleConf)) {\n return console.error(`Invalid scale configuration for scale: ${id}`);\n }\n if (scaleConf._proxy) {\n return console.warn(`Ignoring resolver passed as options for scale: ${id}`);\n }\n const axis = determineAxis(id, scaleConf, retrieveAxisFromDatasets(id, config), defaults.scales[scaleConf.type]);\n const defaultId = getDefaultScaleIDFromAxis(axis, chartIndexAxis);\n const defaultScaleOptions = chartDefaults.scales || {};\n scales[id] = mergeIf(Object.create(null), [{\n axis\n }, scaleConf, defaultScaleOptions[axis], defaultScaleOptions[defaultId]]);\n });\n config.data.datasets.forEach(dataset => {\n const type = dataset.type || config.type;\n const indexAxis = dataset.indexAxis || getIndexAxis(type, options);\n const datasetDefaults = overrides[type] || {};\n const defaultScaleOptions = datasetDefaults.scales || {};\n Object.keys(defaultScaleOptions).forEach(defaultID => {\n const axis = getAxisFromDefaultScaleID(defaultID, indexAxis);\n const id = dataset[axis + 'AxisID'] || axis;\n scales[id] = scales[id] || Object.create(null);\n mergeIf(scales[id], [{\n axis\n }, configScales[id], defaultScaleOptions[defaultID]]);\n });\n });\n Object.keys(scales).forEach(key => {\n const scale = scales[key];\n mergeIf(scale, [defaults.scales[scale.type], defaults.scale]);\n });\n return scales;\n}\nfunction initOptions(config) {\n const options = config.options || (config.options = {});\n options.plugins = valueOrDefault(options.plugins, {});\n options.scales = mergeScaleConfig(config, options);\n}\nfunction initData(data) {\n data = data || {};\n data.datasets = data.datasets || [];\n data.labels = data.labels || [];\n return data;\n}\nfunction initConfig(config) {\n config = config || {};\n config.data = initData(config.data);\n initOptions(config);\n return config;\n}\nconst keyCache = new Map();\nconst keysCached = new Set();\nfunction cachedKeys(cacheKey, generate) {\n let keys = keyCache.get(cacheKey);\n if (!keys) {\n keys = generate();\n keyCache.set(cacheKey, keys);\n keysCached.add(keys);\n }\n return keys;\n}\nconst addIfFound = (set, obj, key) => {\n const opts = resolveObjectKey(obj, key);\n if (opts !== undefined) {\n set.add(opts);\n }\n};\nclass Config {\n constructor(config) {\n this._config = initConfig(config);\n this._scopeCache = new Map();\n this._resolverCache = new Map();\n }\n get platform() {\n return this._config.platform;\n }\n get type() {\n return this._config.type;\n }\n set type(type) {\n this._config.type = type;\n }\n get data() {\n return this._config.data;\n }\n set data(data) {\n this._config.data = initData(data);\n }\n get options() {\n return this._config.options;\n }\n set options(options) {\n this._config.options = options;\n }\n get plugins() {\n return this._config.plugins;\n }\n update() {\n const config = this._config;\n this.clearCache();\n initOptions(config);\n }\n clearCache() {\n this._scopeCache.clear();\n this._resolverCache.clear();\n }\n datasetScopeKeys(datasetType) {\n return cachedKeys(datasetType, () => [[`datasets.${datasetType}`, '']]);\n }\n datasetAnimationScopeKeys(datasetType, transition) {\n return cachedKeys(`${datasetType}.transition.${transition}`, () => [[`datasets.${datasetType}.transitions.${transition}`, `transitions.${transition}`], [`datasets.${datasetType}`, '']]);\n }\n datasetElementScopeKeys(datasetType, elementType) {\n return cachedKeys(`${datasetType}-${elementType}`, () => [[`datasets.${datasetType}.elements.${elementType}`, `datasets.${datasetType}`, `elements.${elementType}`, '']]);\n }\n pluginScopeKeys(plugin) {\n const id = plugin.id;\n const type = this.type;\n return cachedKeys(`${type}-plugin-${id}`, () => [[`plugins.${id}`, ...(plugin.additionalOptionScopes || [])]]);\n }\n _cachedScopes(mainScope, resetCache) {\n const _scopeCache = this._scopeCache;\n let cache = _scopeCache.get(mainScope);\n if (!cache || resetCache) {\n cache = new Map();\n _scopeCache.set(mainScope, cache);\n }\n return cache;\n }\n getOptionScopes(mainScope, keyLists, resetCache) {\n const {\n options,\n type\n } = this;\n const cache = this._cachedScopes(mainScope, resetCache);\n const cached = cache.get(keyLists);\n if (cached) {\n return cached;\n }\n const scopes = new Set();\n keyLists.forEach(keys => {\n if (mainScope) {\n scopes.add(mainScope);\n keys.forEach(key => addIfFound(scopes, mainScope, key));\n }\n keys.forEach(key => addIfFound(scopes, options, key));\n keys.forEach(key => addIfFound(scopes, overrides[type] || {}, key));\n keys.forEach(key => addIfFound(scopes, defaults, key));\n keys.forEach(key => addIfFound(scopes, descriptors, key));\n });\n const array = Array.from(scopes);\n if (array.length === 0) {\n array.push(Object.create(null));\n }\n if (keysCached.has(keyLists)) {\n cache.set(keyLists, array);\n }\n return array;\n }\n chartOptionScopes() {\n const {\n options,\n type\n } = this;\n return [options, overrides[type] || {}, defaults.datasets[type] || {}, {\n type\n }, defaults, descriptors];\n }\n resolveNamedOptions(scopes, names, context, prefixes = ['']) {\n const result = {\n $shared: true\n };\n const {\n resolver,\n subPrefixes\n } = getResolver(this._resolverCache, scopes, prefixes);\n let options = resolver;\n if (needContext(resolver, names)) {\n result.$shared = false;\n context = isFunction(context) ? context() : context;\n const subResolver = this.createResolver(scopes, context, subPrefixes);\n options = _attachContext(resolver, context, subResolver);\n }\n for (const prop of names) {\n result[prop] = options[prop];\n }\n return result;\n }\n createResolver(scopes, context, prefixes = [''], descriptorDefaults) {\n const {\n resolver\n } = getResolver(this._resolverCache, scopes, prefixes);\n return isObject(context) ? _attachContext(resolver, context, undefined, descriptorDefaults) : resolver;\n }\n}\nfunction getResolver(resolverCache, scopes, prefixes) {\n let cache = resolverCache.get(scopes);\n if (!cache) {\n cache = new Map();\n resolverCache.set(scopes, cache);\n }\n const cacheKey = prefixes.join();\n let cached = cache.get(cacheKey);\n if (!cached) {\n const resolver = _createResolver(scopes, prefixes);\n cached = {\n resolver,\n subPrefixes: prefixes.filter(p => !p.toLowerCase().includes('hover'))\n };\n cache.set(cacheKey, cached);\n }\n return cached;\n}\nconst hasFunction = value => isObject(value) && Object.getOwnPropertyNames(value).some(key => isFunction(value[key]));\nfunction needContext(proxy, names) {\n const {\n isScriptable,\n isIndexable\n } = _descriptors(proxy);\n for (const prop of names) {\n const scriptable = isScriptable(prop);\n const indexable = isIndexable(prop);\n const value = (indexable || scriptable) && proxy[prop];\n if (scriptable && (isFunction(value) || hasFunction(value)) || indexable && isArray(value)) {\n return true;\n }\n }\n return false;\n}\nvar version = \"4.5.1\";\nconst KNOWN_POSITIONS = ['top', 'bottom', 'left', 'right', 'chartArea'];\nfunction positionIsHorizontal(position, axis) {\n return position === 'top' || position === 'bottom' || KNOWN_POSITIONS.indexOf(position) === -1 && axis === 'x';\n}\nfunction compare2Level(l1, l2) {\n return function (a, b) {\n return a[l1] === b[l1] ? a[l2] - b[l2] : a[l1] - b[l1];\n };\n}\nfunction onAnimationsComplete(context) {\n const chart = context.chart;\n const animationOptions = chart.options.animation;\n chart.notifyPlugins('afterRender');\n callback(animationOptions && animationOptions.onComplete, [context], chart);\n}\nfunction onAnimationProgress(context) {\n const chart = context.chart;\n const animationOptions = chart.options.animation;\n callback(animationOptions && animationOptions.onProgress, [context], chart);\n}\nfunction getCanvas(item) {\n if (_isDomSupported() && typeof item === 'string') {\n item = document.getElementById(item);\n } else if (item && item.length) {\n item = item[0];\n }\n if (item && item.canvas) {\n item = item.canvas;\n }\n return item;\n}\nconst instances = {};\nconst getChart = key => {\n const canvas = getCanvas(key);\n return Object.values(instances).filter(c => c.canvas === canvas).pop();\n};\nfunction moveNumericKeys(obj, start, move) {\n const keys = Object.keys(obj);\n for (const key of keys) {\n const intKey = +key;\n if (intKey >= start) {\n const value = obj[key];\n delete obj[key];\n if (move > 0 || intKey > start) {\n obj[intKey + move] = value;\n }\n }\n }\n}\nfunction determineLastEvent(e, lastEvent, inChartArea, isClick) {\n if (!inChartArea || e.type === 'mouseout') {\n return null;\n }\n if (isClick) {\n return lastEvent;\n }\n return e;\n}\nlet Chart = /*#__PURE__*/(() => {\n class Chart {\n static defaults = defaults;\n static instances = instances;\n static overrides = overrides;\n static registry = registry;\n static version = version;\n static getChart = getChart;\n static register(...items) {\n registry.add(...items);\n invalidatePlugins();\n }\n static unregister(...items) {\n registry.remove(...items);\n invalidatePlugins();\n }\n constructor(item, userConfig) {\n const config = this.config = new Config(userConfig);\n const initialCanvas = getCanvas(item);\n const existingChart = getChart(initialCanvas);\n if (existingChart) {\n throw new Error('Canvas is already in use. Chart with ID \\'' + existingChart.id + '\\'' + ' must be destroyed before the canvas with ID \\'' + existingChart.canvas.id + '\\' can be reused.');\n }\n const options = config.createResolver(config.chartOptionScopes(), this.getContext());\n this.platform = new (config.platform || _detectPlatform(initialCanvas))();\n this.platform.updateConfig(config);\n const context = this.platform.acquireContext(initialCanvas, options.aspectRatio);\n const canvas = context && context.canvas;\n const height = canvas && canvas.height;\n const width = canvas && canvas.width;\n this.id = uid();\n this.ctx = context;\n this.canvas = canvas;\n this.width = width;\n this.height = height;\n this._options = options;\n this._aspectRatio = this.aspectRatio;\n this._layers = [];\n this._metasets = [];\n this._stacks = undefined;\n this.boxes = [];\n this.currentDevicePixelRatio = undefined;\n this.chartArea = undefined;\n this._active = [];\n this._lastEvent = undefined;\n this._listeners = {};\n this._responsiveListeners = undefined;\n this._sortedMetasets = [];\n this.scales = {};\n this._plugins = new PluginService();\n this.$proxies = {};\n this._hiddenIndices = {};\n this.attached = false;\n this._animationsDisabled = undefined;\n this.$context = undefined;\n this._doResize = debounce(mode => this.update(mode), options.resizeDelay || 0);\n this._dataChanges = [];\n instances[this.id] = this;\n if (!context || !canvas) {\n console.error(\"Failed to create chart: can't acquire context from the given item\");\n return;\n }\n animator.listen(this, 'complete', onAnimationsComplete);\n animator.listen(this, 'progress', onAnimationProgress);\n this._initialize();\n if (this.attached) {\n this.update();\n }\n }\n get aspectRatio() {\n const {\n options: {\n aspectRatio,\n maintainAspectRatio\n },\n width,\n height,\n _aspectRatio\n } = this;\n if (!isNullOrUndef(aspectRatio)) {\n return aspectRatio;\n }\n if (maintainAspectRatio && _aspectRatio) {\n return _aspectRatio;\n }\n return height ? width / height : null;\n }\n get data() {\n return this.config.data;\n }\n set data(data) {\n this.config.data = data;\n }\n get options() {\n return this._options;\n }\n set options(options) {\n this.config.options = options;\n }\n get registry() {\n return registry;\n }\n _initialize() {\n this.notifyPlugins('beforeInit');\n if (this.options.responsive) {\n this.resize();\n } else {\n retinaScale(this, this.options.devicePixelRatio);\n }\n this.bindEvents();\n this.notifyPlugins('afterInit');\n return this;\n }\n clear() {\n clearCanvas(this.canvas, this.ctx);\n return this;\n }\n stop() {\n animator.stop(this);\n return this;\n }\n resize(width, height) {\n if (!animator.running(this)) {\n this._resize(width, height);\n } else {\n this._resizeBeforeDraw = {\n width,\n height\n };\n }\n }\n _resize(width, height) {\n const options = this.options;\n const canvas = this.canvas;\n const aspectRatio = options.maintainAspectRatio && this.aspectRatio;\n const newSize = this.platform.getMaximumSize(canvas, width, height, aspectRatio);\n const newRatio = options.devicePixelRatio || this.platform.getDevicePixelRatio();\n const mode = this.width ? 'resize' : 'attach';\n this.width = newSize.width;\n this.height = newSize.height;\n this._aspectRatio = this.aspectRatio;\n if (!retinaScale(this, newRatio, true)) {\n return;\n }\n this.notifyPlugins('resize', {\n size: newSize\n });\n callback(options.onResize, [this, newSize], this);\n if (this.attached) {\n if (this._doResize(mode)) {\n this.render();\n }\n }\n }\n ensureScalesHaveIDs() {\n const options = this.options;\n const scalesOptions = options.scales || {};\n each(scalesOptions, (axisOptions, axisID) => {\n axisOptions.id = axisID;\n });\n }\n buildOrUpdateScales() {\n const options = this.options;\n const scaleOpts = options.scales;\n const scales = this.scales;\n const updated = Object.keys(scales).reduce((obj, id) => {\n obj[id] = false;\n return obj;\n }, {});\n let items = [];\n if (scaleOpts) {\n items = items.concat(Object.keys(scaleOpts).map(id => {\n const scaleOptions = scaleOpts[id];\n const axis = determineAxis(id, scaleOptions);\n const isRadial = axis === 'r';\n const isHorizontal = axis === 'x';\n return {\n options: scaleOptions,\n dposition: isRadial ? 'chartArea' : isHorizontal ? 'bottom' : 'left',\n dtype: isRadial ? 'radialLinear' : isHorizontal ? 'category' : 'linear'\n };\n }));\n }\n each(items, item => {\n const scaleOptions = item.options;\n const id = scaleOptions.id;\n const axis = determineAxis(id, scaleOptions);\n const scaleType = valueOrDefault(scaleOptions.type, item.dtype);\n if (scaleOptions.position === undefined || positionIsHorizontal(scaleOptions.position, axis) !== positionIsHorizontal(item.dposition)) {\n scaleOptions.position = item.dposition;\n }\n updated[id] = true;\n let scale = null;\n if (id in scales && scales[id].type === scaleType) {\n scale = scales[id];\n } else {\n const scaleClass = registry.getScale(scaleType);\n scale = new scaleClass({\n id,\n type: scaleType,\n ctx: this.ctx,\n chart: this\n });\n scales[scale.id] = scale;\n }\n scale.init(scaleOptions, options);\n });\n each(updated, (hasUpdated, id) => {\n if (!hasUpdated) {\n delete scales[id];\n }\n });\n each(scales, scale => {\n layouts.configure(this, scale, scale.options);\n layouts.addBox(this, scale);\n });\n }\n _updateMetasets() {\n const metasets = this._metasets;\n const numData = this.data.datasets.length;\n const numMeta = metasets.length;\n metasets.sort((a, b) => a.index - b.index);\n if (numMeta > numData) {\n for (let i = numData; i < numMeta; ++i) {\n this._destroyDatasetMeta(i);\n }\n metasets.splice(numData, numMeta - numData);\n }\n this._sortedMetasets = metasets.slice(0).sort(compare2Level('order', 'index'));\n }\n _removeUnreferencedMetasets() {\n const {\n _metasets: metasets,\n data: {\n datasets\n }\n } = this;\n if (metasets.length > datasets.length) {\n delete this._stacks;\n }\n metasets.forEach((meta, index) => {\n if (datasets.filter(x => x === meta._dataset).length === 0) {\n this._destroyDatasetMeta(index);\n }\n });\n }\n buildOrUpdateControllers() {\n const newControllers = [];\n const datasets = this.data.datasets;\n let i, ilen;\n this._removeUnreferencedMetasets();\n for (i = 0, ilen = datasets.length; i < ilen; i++) {\n const dataset = datasets[i];\n let meta = this.getDatasetMeta(i);\n const type = dataset.type || this.config.type;\n if (meta.type && meta.type !== type) {\n this._destroyDatasetMeta(i);\n meta = this.getDatasetMeta(i);\n }\n meta.type = type;\n meta.indexAxis = dataset.indexAxis || getIndexAxis(type, this.options);\n meta.order = dataset.order || 0;\n meta.index = i;\n meta.label = '' + dataset.label;\n meta.visible = this.isDatasetVisible(i);\n if (meta.controller) {\n meta.controller.updateIndex(i);\n meta.controller.linkScales();\n } else {\n const ControllerClass = registry.getController(type);\n const {\n datasetElementType,\n dataElementType\n } = defaults.datasets[type];\n Object.assign(ControllerClass, {\n dataElementType: registry.getElement(dataElementType),\n datasetElementType: datasetElementType && registry.getElement(datasetElementType)\n });\n meta.controller = new ControllerClass(this, i);\n newControllers.push(meta.controller);\n }\n }\n this._updateMetasets();\n return newControllers;\n }\n _resetElements() {\n each(this.data.datasets, (dataset, datasetIndex) => {\n this.getDatasetMeta(datasetIndex).controller.reset();\n }, this);\n }\n reset() {\n this._resetElements();\n this.notifyPlugins('reset');\n }\n update(mode) {\n const config = this.config;\n config.update();\n const options = this._options = config.createResolver(config.chartOptionScopes(), this.getContext());\n const animsDisabled = this._animationsDisabled = !options.animation;\n this._updateScales();\n this._checkEventBindings();\n this._updateHiddenIndices();\n this._plugins.invalidate();\n if (this.notifyPlugins('beforeUpdate', {\n mode,\n cancelable: true\n }) === false) {\n return;\n }\n const newControllers = this.buildOrUpdateControllers();\n this.notifyPlugins('beforeElementsUpdate');\n let minPadding = 0;\n for (let i = 0, ilen = this.data.datasets.length; i < ilen; i++) {\n const {\n controller\n } = this.getDatasetMeta(i);\n const reset = !animsDisabled && newControllers.indexOf(controller) === -1;\n controller.buildOrUpdateElements(reset);\n minPadding = Math.max(+controller.getMaxOverflow(), minPadding);\n }\n minPadding = this._minPadding = options.layout.autoPadding ? minPadding : 0;\n this._updateLayout(minPadding);\n if (!animsDisabled) {\n each(newControllers, controller => {\n controller.reset();\n });\n }\n this._updateDatasets(mode);\n this.notifyPlugins('afterUpdate', {\n mode\n });\n this._layers.sort(compare2Level('z', '_idx'));\n const {\n _active,\n _lastEvent\n } = this;\n if (_lastEvent) {\n this._eventHandler(_lastEvent, true);\n } else if (_active.length) {\n this._updateHoverStyles(_active, _active, true);\n }\n this.render();\n }\n _updateScales() {\n each(this.scales, scale => {\n layouts.removeBox(this, scale);\n });\n this.ensureScalesHaveIDs();\n this.buildOrUpdateScales();\n }\n _checkEventBindings() {\n const options = this.options;\n const existingEvents = new Set(Object.keys(this._listeners));\n const newEvents = new Set(options.events);\n if (!setsEqual(existingEvents, newEvents) || !!this._responsiveListeners !== options.responsive) {\n this.unbindEvents();\n this.bindEvents();\n }\n }\n _updateHiddenIndices() {\n const {\n _hiddenIndices\n } = this;\n const changes = this._getUniformDataChanges() || [];\n for (const {\n method,\n start,\n count\n } of changes) {\n const move = method === '_removeElements' ? -count : count;\n moveNumericKeys(_hiddenIndices, start, move);\n }\n }\n _getUniformDataChanges() {\n const _dataChanges = this._dataChanges;\n if (!_dataChanges || !_dataChanges.length) {\n return;\n }\n this._dataChanges = [];\n const datasetCount = this.data.datasets.length;\n const makeSet = idx => new Set(_dataChanges.filter(c => c[0] === idx).map((c, i) => i + ',' + c.splice(1).join(',')));\n const changeSet = makeSet(0);\n for (let i = 1; i < datasetCount; i++) {\n if (!setsEqual(changeSet, makeSet(i))) {\n return;\n }\n }\n return Array.from(changeSet).map(c => c.split(',')).map(a => ({\n method: a[1],\n start: +a[2],\n count: +a[3]\n }));\n }\n _updateLayout(minPadding) {\n if (this.notifyPlugins('beforeLayout', {\n cancelable: true\n }) === false) {\n return;\n }\n layouts.update(this, this.width, this.height, minPadding);\n const area = this.chartArea;\n const noArea = area.width <= 0 || area.height <= 0;\n this._layers = [];\n each(this.boxes, box => {\n if (noArea && box.position === 'chartArea') {\n return;\n }\n if (box.configure) {\n box.configure();\n }\n this._layers.push(...box._layers());\n }, this);\n this._layers.forEach((item, index) => {\n item._idx = index;\n });\n this.notifyPlugins('afterLayout');\n }\n _updateDatasets(mode) {\n if (this.notifyPlugins('beforeDatasetsUpdate', {\n mode,\n cancelable: true\n }) === false) {\n return;\n }\n for (let i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n this.getDatasetMeta(i).controller.configure();\n }\n for (let i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n this._updateDataset(i, isFunction(mode) ? mode({\n datasetIndex: i\n }) : mode);\n }\n this.notifyPlugins('afterDatasetsUpdate', {\n mode\n });\n }\n _updateDataset(index, mode) {\n const meta = this.getDatasetMeta(index);\n const args = {\n meta,\n index,\n mode,\n cancelable: true\n };\n if (this.notifyPlugins('beforeDatasetUpdate', args) === false) {\n return;\n }\n meta.controller._update(mode);\n args.cancelable = false;\n this.notifyPlugins('afterDatasetUpdate', args);\n }\n render() {\n if (this.notifyPlugins('beforeRender', {\n cancelable: true\n }) === false) {\n return;\n }\n if (animator.has(this)) {\n if (this.attached && !animator.running(this)) {\n animator.start(this);\n }\n } else {\n this.draw();\n onAnimationsComplete({\n chart: this\n });\n }\n }\n draw() {\n let i;\n if (this._resizeBeforeDraw) {\n const {\n width,\n height\n } = this._resizeBeforeDraw;\n this._resizeBeforeDraw = null;\n this._resize(width, height);\n }\n this.clear();\n if (this.width <= 0 || this.height <= 0) {\n return;\n }\n if (this.notifyPlugins('beforeDraw', {\n cancelable: true\n }) === false) {\n return;\n }\n const layers = this._layers;\n for (i = 0; i < layers.length && layers[i].z <= 0; ++i) {\n layers[i].draw(this.chartArea);\n }\n this._drawDatasets();\n for (; i < layers.length; ++i) {\n layers[i].draw(this.chartArea);\n }\n this.notifyPlugins('afterDraw');\n }\n _getSortedDatasetMetas(filterVisible) {\n const metasets = this._sortedMetasets;\n const result = [];\n let i, ilen;\n for (i = 0, ilen = metasets.length; i < ilen; ++i) {\n const meta = metasets[i];\n if (!filterVisible || meta.visible) {\n result.push(meta);\n }\n }\n return result;\n }\n getSortedVisibleDatasetMetas() {\n return this._getSortedDatasetMetas(true);\n }\n _drawDatasets() {\n if (this.notifyPlugins('beforeDatasetsDraw', {\n cancelable: true\n }) === false) {\n return;\n }\n const metasets = this.getSortedVisibleDatasetMetas();\n for (let i = metasets.length - 1; i >= 0; --i) {\n this._drawDataset(metasets[i]);\n }\n this.notifyPlugins('afterDatasetsDraw');\n }\n _drawDataset(meta) {\n const ctx = this.ctx;\n const args = {\n meta,\n index: meta.index,\n cancelable: true\n };\n const clip = getDatasetClipArea(this, meta);\n if (this.notifyPlugins('beforeDatasetDraw', args) === false) {\n return;\n }\n if (clip) {\n clipArea(ctx, clip);\n }\n meta.controller.draw();\n if (clip) {\n unclipArea(ctx);\n }\n args.cancelable = false;\n this.notifyPlugins('afterDatasetDraw', args);\n }\n isPointInArea(point) {\n return _isPointInArea(point, this.chartArea, this._minPadding);\n }\n getElementsAtEventForMode(e, mode, options, useFinalPosition) {\n const method = Interaction.modes[mode];\n if (typeof method === 'function') {\n return method(this, e, options, useFinalPosition);\n }\n return [];\n }\n getDatasetMeta(datasetIndex) {\n const dataset = this.data.datasets[datasetIndex];\n const metasets = this._metasets;\n let meta = metasets.filter(x => x && x._dataset === dataset).pop();\n if (!meta) {\n meta = {\n type: null,\n data: [],\n dataset: null,\n controller: null,\n hidden: null,\n xAxisID: null,\n yAxisID: null,\n order: dataset && dataset.order || 0,\n index: datasetIndex,\n _dataset: dataset,\n _parsed: [],\n _sorted: false\n };\n metasets.push(meta);\n }\n return meta;\n }\n getContext() {\n return this.$context || (this.$context = createContext(null, {\n chart: this,\n type: 'chart'\n }));\n }\n getVisibleDatasetCount() {\n return this.getSortedVisibleDatasetMetas().length;\n }\n isDatasetVisible(datasetIndex) {\n const dataset = this.data.datasets[datasetIndex];\n if (!dataset) {\n return false;\n }\n const meta = this.getDatasetMeta(datasetIndex);\n return typeof meta.hidden === 'boolean' ? !meta.hidden : !dataset.hidden;\n }\n setDatasetVisibility(datasetIndex, visible) {\n const meta = this.getDatasetMeta(datasetIndex);\n meta.hidden = !visible;\n }\n toggleDataVisibility(index) {\n this._hiddenIndices[index] = !this._hiddenIndices[index];\n }\n getDataVisibility(index) {\n return !this._hiddenIndices[index];\n }\n _updateVisibility(datasetIndex, dataIndex, visible) {\n const mode = visible ? 'show' : 'hide';\n const meta = this.getDatasetMeta(datasetIndex);\n const anims = meta.controller._resolveAnimations(undefined, mode);\n if (defined(dataIndex)) {\n meta.data[dataIndex].hidden = !visible;\n this.update();\n } else {\n this.setDatasetVisibility(datasetIndex, visible);\n anims.update(meta, {\n visible\n });\n this.update(ctx => ctx.datasetIndex === datasetIndex ? mode : undefined);\n }\n }\n hide(datasetIndex, dataIndex) {\n this._updateVisibility(datasetIndex, dataIndex, false);\n }\n show(datasetIndex, dataIndex) {\n this._updateVisibility(datasetIndex, dataIndex, true);\n }\n _destroyDatasetMeta(datasetIndex) {\n const meta = this._metasets[datasetIndex];\n if (meta && meta.controller) {\n meta.controller._destroy();\n }\n delete this._metasets[datasetIndex];\n }\n _stop() {\n let i, ilen;\n this.stop();\n animator.remove(this);\n for (i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n this._destroyDatasetMeta(i);\n }\n }\n destroy() {\n this.notifyPlugins('beforeDestroy');\n const {\n canvas,\n ctx\n } = this;\n this._stop();\n this.config.clearCache();\n if (canvas) {\n this.unbindEvents();\n clearCanvas(canvas, ctx);\n this.platform.releaseContext(ctx);\n this.canvas = null;\n this.ctx = null;\n }\n delete instances[this.id];\n this.notifyPlugins('afterDestroy');\n }\n toBase64Image(...args) {\n return this.canvas.toDataURL(...args);\n }\n bindEvents() {\n this.bindUserEvents();\n if (this.options.responsive) {\n this.bindResponsiveEvents();\n } else {\n this.attached = true;\n }\n }\n bindUserEvents() {\n const listeners = this._listeners;\n const platform = this.platform;\n const _add = (type, listener) => {\n platform.addEventListener(this, type, listener);\n listeners[type] = listener;\n };\n const listener = (e, x, y) => {\n e.offsetX = x;\n e.offsetY = y;\n this._eventHandler(e);\n };\n each(this.options.events, type => _add(type, listener));\n }\n bindResponsiveEvents() {\n if (!this._responsiveListeners) {\n this._responsiveListeners = {};\n }\n const listeners = this._responsiveListeners;\n const platform = this.platform;\n const _add = (type, listener) => {\n platform.addEventListener(this, type, listener);\n listeners[type] = listener;\n };\n const _remove = (type, listener) => {\n if (listeners[type]) {\n platform.removeEventListener(this, type, listener);\n delete listeners[type];\n }\n };\n const listener = (width, height) => {\n if (this.canvas) {\n this.resize(width, height);\n }\n };\n let detached;\n const attached = () => {\n _remove('attach', attached);\n this.attached = true;\n this.resize();\n _add('resize', listener);\n _add('detach', detached);\n };\n detached = () => {\n this.attached = false;\n _remove('resize', listener);\n this._stop();\n this._resize(0, 0);\n _add('attach', attached);\n };\n if (platform.isAttached(this.canvas)) {\n attached();\n } else {\n detached();\n }\n }\n unbindEvents() {\n each(this._listeners, (listener, type) => {\n this.platform.removeEventListener(this, type, listener);\n });\n this._listeners = {};\n each(this._responsiveListeners, (listener, type) => {\n this.platform.removeEventListener(this, type, listener);\n });\n this._responsiveListeners = undefined;\n }\n updateHoverStyle(items, mode, enabled) {\n const prefix = enabled ? 'set' : 'remove';\n let meta, item, i, ilen;\n if (mode === 'dataset') {\n meta = this.getDatasetMeta(items[0].datasetIndex);\n meta.controller['_' + prefix + 'DatasetHoverStyle']();\n }\n for (i = 0, ilen = items.length; i < ilen; ++i) {\n item = items[i];\n const controller = item && this.getDatasetMeta(item.datasetIndex).controller;\n if (controller) {\n controller[prefix + 'HoverStyle'](item.element, item.datasetIndex, item.index);\n }\n }\n }\n getActiveElements() {\n return this._active || [];\n }\n setActiveElements(activeElements) {\n const lastActive = this._active || [];\n const active = activeElements.map(({\n datasetIndex,\n index\n }) => {\n const meta = this.getDatasetMeta(datasetIndex);\n if (!meta) {\n throw new Error('No dataset found at index ' + datasetIndex);\n }\n return {\n datasetIndex,\n element: meta.data[index],\n index\n };\n });\n const changed = !_elementsEqual(active, lastActive);\n if (changed) {\n this._active = active;\n this._lastEvent = null;\n this._updateHoverStyles(active, lastActive);\n }\n }\n notifyPlugins(hook, args, filter) {\n return this._plugins.notify(this, hook, args, filter);\n }\n isPluginEnabled(pluginId) {\n return this._plugins._cache.filter(p => p.plugin.id === pluginId).length === 1;\n }\n _updateHoverStyles(active, lastActive, replay) {\n const hoverOptions = this.options.hover;\n const diff = (a, b) => a.filter(x => !b.some(y => x.datasetIndex === y.datasetIndex && x.index === y.index));\n const deactivated = diff(lastActive, active);\n const activated = replay ? active : diff(active, lastActive);\n if (deactivated.length) {\n this.updateHoverStyle(deactivated, hoverOptions.mode, false);\n }\n if (activated.length && hoverOptions.mode) {\n this.updateHoverStyle(activated, hoverOptions.mode, true);\n }\n }\n _eventHandler(e, replay) {\n const args = {\n event: e,\n replay,\n cancelable: true,\n inChartArea: this.isPointInArea(e)\n };\n const eventFilter = plugin => (plugin.options.events || this.options.events).includes(e.native.type);\n if (this.notifyPlugins('beforeEvent', args, eventFilter) === false) {\n return;\n }\n const changed = this._handleEvent(e, replay, args.inChartArea);\n args.cancelable = false;\n this.notifyPlugins('afterEvent', args, eventFilter);\n if (changed || args.changed) {\n this.render();\n }\n return this;\n }\n _handleEvent(e, replay, inChartArea) {\n const {\n _active: lastActive = [],\n options\n } = this;\n const useFinalPosition = replay;\n const active = this._getActiveElements(e, lastActive, inChartArea, useFinalPosition);\n const isClick = _isClickEvent(e);\n const lastEvent = determineLastEvent(e, this._lastEvent, inChartArea, isClick);\n if (inChartArea) {\n this._lastEvent = null;\n callback(options.onHover, [e, active, this], this);\n if (isClick) {\n callback(options.onClick, [e, active, this], this);\n }\n }\n const changed = !_elementsEqual(active, lastActive);\n if (changed || replay) {\n this._active = active;\n this._updateHoverStyles(active, lastActive, replay);\n }\n this._lastEvent = lastEvent;\n return changed;\n }\n _getActiveElements(e, lastActive, inChartArea, useFinalPosition) {\n if (e.type === 'mouseout') {\n return [];\n }\n if (!inChartArea) {\n return lastActive;\n }\n const hoverOptions = this.options.hover;\n return this.getElementsAtEventForMode(e, hoverOptions.mode, hoverOptions, useFinalPosition);\n }\n }\n return Chart;\n})();\nfunction invalidatePlugins() {\n return each(Chart.instances, chart => chart._plugins.invalidate());\n}\nfunction clipSelf(ctx, element, endAngle) {\n const {\n startAngle,\n x,\n y,\n outerRadius,\n innerRadius,\n options\n } = element;\n const {\n borderWidth,\n borderJoinStyle\n } = options;\n const outerAngleClip = Math.min(borderWidth / outerRadius, _normalizeAngle(startAngle - endAngle));\n ctx.beginPath();\n ctx.arc(x, y, outerRadius - borderWidth / 2, startAngle + outerAngleClip / 2, endAngle - outerAngleClip / 2);\n if (innerRadius > 0) {\n const innerAngleClip = Math.min(borderWidth / innerRadius, _normalizeAngle(startAngle - endAngle));\n ctx.arc(x, y, innerRadius + borderWidth / 2, endAngle - innerAngleClip / 2, startAngle + innerAngleClip / 2, true);\n } else {\n const clipWidth = Math.min(borderWidth / 2, outerRadius * _normalizeAngle(startAngle - endAngle));\n if (borderJoinStyle === 'round') {\n ctx.arc(x, y, clipWidth, endAngle - PI / 2, startAngle + PI / 2, true);\n } else if (borderJoinStyle === 'bevel') {\n const r = 2 * clipWidth * clipWidth;\n const endX = -r * Math.cos(endAngle + PI / 2) + x;\n const endY = -r * Math.sin(endAngle + PI / 2) + y;\n const startX = r * Math.cos(startAngle + PI / 2) + x;\n const startY = r * Math.sin(startAngle + PI / 2) + y;\n ctx.lineTo(endX, endY);\n ctx.lineTo(startX, startY);\n }\n }\n ctx.closePath();\n ctx.moveTo(0, 0);\n ctx.rect(0, 0, ctx.canvas.width, ctx.canvas.height);\n ctx.clip('evenodd');\n}\nfunction clipArc(ctx, element, endAngle) {\n const {\n startAngle,\n pixelMargin,\n x,\n y,\n outerRadius,\n innerRadius\n } = element;\n let angleMargin = pixelMargin / outerRadius;\n // Draw an inner border by clipping the arc and drawing a double-width border\n // Enlarge the clipping arc by 0.33 pixels to eliminate glitches between borders\n ctx.beginPath();\n ctx.arc(x, y, outerRadius, startAngle - angleMargin, endAngle + angleMargin);\n if (innerRadius > pixelMargin) {\n angleMargin = pixelMargin / innerRadius;\n ctx.arc(x, y, innerRadius, endAngle + angleMargin, startAngle - angleMargin, true);\n } else {\n ctx.arc(x, y, pixelMargin, endAngle + HALF_PI, startAngle - HALF_PI);\n }\n ctx.closePath();\n ctx.clip();\n}\nfunction toRadiusCorners(value) {\n return _readValueToProps(value, ['outerStart', 'outerEnd', 'innerStart', 'innerEnd']);\n}\n/**\n * Parse border radius from the provided options\n */\nfunction parseBorderRadius$1(arc, innerRadius, outerRadius, angleDelta) {\n const o = toRadiusCorners(arc.options.borderRadius);\n const halfThickness = (outerRadius - innerRadius) / 2;\n const innerLimit = Math.min(halfThickness, angleDelta * innerRadius / 2);\n // Outer limits are complicated. We want to compute the available angular distance at\n // a radius of outerRadius - borderRadius because for small angular distances, this term limits.\n // We compute at r = outerRadius - borderRadius because this circle defines the center of the border corners.\n //\n // If the borderRadius is large, that value can become negative.\n // This causes the outer borders to lose their radius entirely, which is rather unexpected. To solve that, if borderRadius > outerRadius\n // we know that the thickness term will dominate and compute the limits at that point\n const computeOuterLimit = val => {\n const outerArcLimit = (outerRadius - Math.min(halfThickness, val)) * angleDelta / 2;\n return _limitValue(val, 0, Math.min(halfThickness, outerArcLimit));\n };\n return {\n outerStart: computeOuterLimit(o.outerStart),\n outerEnd: computeOuterLimit(o.outerEnd),\n innerStart: _limitValue(o.innerStart, 0, innerLimit),\n innerEnd: _limitValue(o.innerEnd, 0, innerLimit)\n };\n}\n/**\n * Convert (r, 𝜃) to (x, y)\n */\nfunction rThetaToXY(r, theta, x, y) {\n return {\n x: x + r * Math.cos(theta),\n y: y + r * Math.sin(theta)\n };\n}\n/**\n * Path the arc, respecting border radius by separating into left and right halves.\n *\n * Start End\n *\n * 1--->a--->2 Outer\n * / \\\n * 8 3\n * | |\n * | |\n * 7 4\n * \\ /\n * 6<---b<---5 Inner\n */\nfunction pathArc(ctx, element, offset, spacing, end, circular) {\n const {\n x,\n y,\n startAngle: start,\n pixelMargin,\n innerRadius: innerR\n } = element;\n const outerRadius = Math.max(element.outerRadius + spacing + offset - pixelMargin, 0);\n const innerRadius = innerR > 0 ? innerR + spacing + offset + pixelMargin : 0;\n let spacingOffset = 0;\n const alpha = end - start;\n if (spacing) {\n // When spacing is present, it is the same for all items\n // So we adjust the start and end angle of the arc such that\n // the distance is the same as it would be without the spacing\n const noSpacingInnerRadius = innerR > 0 ? innerR - spacing : 0;\n const noSpacingOuterRadius = outerRadius > 0 ? outerRadius - spacing : 0;\n const avNogSpacingRadius = (noSpacingInnerRadius + noSpacingOuterRadius) / 2;\n const adjustedAngle = avNogSpacingRadius !== 0 ? alpha * avNogSpacingRadius / (avNogSpacingRadius + spacing) : alpha;\n spacingOffset = (alpha - adjustedAngle) / 2;\n }\n const beta = Math.max(0.001, alpha * outerRadius - offset / PI) / outerRadius;\n const angleOffset = (alpha - beta) / 2;\n const startAngle = start + angleOffset + spacingOffset;\n const endAngle = end - angleOffset - spacingOffset;\n const {\n outerStart,\n outerEnd,\n innerStart,\n innerEnd\n } = parseBorderRadius$1(element, innerRadius, outerRadius, endAngle - startAngle);\n const outerStartAdjustedRadius = outerRadius - outerStart;\n const outerEndAdjustedRadius = outerRadius - outerEnd;\n const outerStartAdjustedAngle = startAngle + outerStart / outerStartAdjustedRadius;\n const outerEndAdjustedAngle = endAngle - outerEnd / outerEndAdjustedRadius;\n const innerStartAdjustedRadius = innerRadius + innerStart;\n const innerEndAdjustedRadius = innerRadius + innerEnd;\n const innerStartAdjustedAngle = startAngle + innerStart / innerStartAdjustedRadius;\n const innerEndAdjustedAngle = endAngle - innerEnd / innerEndAdjustedRadius;\n ctx.beginPath();\n if (circular) {\n // The first arc segments from point 1 to point a to point 2\n const outerMidAdjustedAngle = (outerStartAdjustedAngle + outerEndAdjustedAngle) / 2;\n ctx.arc(x, y, outerRadius, outerStartAdjustedAngle, outerMidAdjustedAngle);\n ctx.arc(x, y, outerRadius, outerMidAdjustedAngle, outerEndAdjustedAngle);\n // The corner segment from point 2 to point 3\n if (outerEnd > 0) {\n const pCenter = rThetaToXY(outerEndAdjustedRadius, outerEndAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, outerEnd, outerEndAdjustedAngle, endAngle + HALF_PI);\n }\n // The line from point 3 to point 4\n const p4 = rThetaToXY(innerEndAdjustedRadius, endAngle, x, y);\n ctx.lineTo(p4.x, p4.y);\n // The corner segment from point 4 to point 5\n if (innerEnd > 0) {\n const pCenter = rThetaToXY(innerEndAdjustedRadius, innerEndAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, innerEnd, endAngle + HALF_PI, innerEndAdjustedAngle + Math.PI);\n }\n // The inner arc from point 5 to point b to point 6\n const innerMidAdjustedAngle = (endAngle - innerEnd / innerRadius + (startAngle + innerStart / innerRadius)) / 2;\n ctx.arc(x, y, innerRadius, endAngle - innerEnd / innerRadius, innerMidAdjustedAngle, true);\n ctx.arc(x, y, innerRadius, innerMidAdjustedAngle, startAngle + innerStart / innerRadius, true);\n // The corner segment from point 6 to point 7\n if (innerStart > 0) {\n const pCenter = rThetaToXY(innerStartAdjustedRadius, innerStartAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, innerStart, innerStartAdjustedAngle + Math.PI, startAngle - HALF_PI);\n }\n // The line from point 7 to point 8\n const p8 = rThetaToXY(outerStartAdjustedRadius, startAngle, x, y);\n ctx.lineTo(p8.x, p8.y);\n // The corner segment from point 8 to point 1\n if (outerStart > 0) {\n const pCenter = rThetaToXY(outerStartAdjustedRadius, outerStartAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, outerStart, startAngle - HALF_PI, outerStartAdjustedAngle);\n }\n } else {\n ctx.moveTo(x, y);\n const outerStartX = Math.cos(outerStartAdjustedAngle) * outerRadius + x;\n const outerStartY = Math.sin(outerStartAdjustedAngle) * outerRadius + y;\n ctx.lineTo(outerStartX, outerStartY);\n const outerEndX = Math.cos(outerEndAdjustedAngle) * outerRadius + x;\n const outerEndY = Math.sin(outerEndAdjustedAngle) * outerRadius + y;\n ctx.lineTo(outerEndX, outerEndY);\n }\n ctx.closePath();\n}\nfunction drawArc(ctx, element, offset, spacing, circular) {\n const {\n fullCircles,\n startAngle,\n circumference\n } = element;\n let endAngle = element.endAngle;\n if (fullCircles) {\n pathArc(ctx, element, offset, spacing, endAngle, circular);\n for (let i = 0; i < fullCircles; ++i) {\n ctx.fill();\n }\n if (!isNaN(circumference)) {\n endAngle = startAngle + (circumference % TAU || TAU);\n }\n }\n pathArc(ctx, element, offset, spacing, endAngle, circular);\n ctx.fill();\n return endAngle;\n}\nfunction drawBorder(ctx, element, offset, spacing, circular) {\n const {\n fullCircles,\n startAngle,\n circumference,\n options\n } = element;\n const {\n borderWidth,\n borderJoinStyle,\n borderDash,\n borderDashOffset,\n borderRadius\n } = options;\n const inner = options.borderAlign === 'inner';\n if (!borderWidth) {\n return;\n }\n ctx.setLineDash(borderDash || []);\n ctx.lineDashOffset = borderDashOffset;\n if (inner) {\n ctx.lineWidth = borderWidth * 2;\n ctx.lineJoin = borderJoinStyle || 'round';\n } else {\n ctx.lineWidth = borderWidth;\n ctx.lineJoin = borderJoinStyle || 'bevel';\n }\n let endAngle = element.endAngle;\n if (fullCircles) {\n pathArc(ctx, element, offset, spacing, endAngle, circular);\n for (let i = 0; i < fullCircles; ++i) {\n ctx.stroke();\n }\n if (!isNaN(circumference)) {\n endAngle = startAngle + (circumference % TAU || TAU);\n }\n }\n if (inner) {\n clipArc(ctx, element, endAngle);\n }\n if (options.selfJoin && endAngle - startAngle >= PI && borderRadius === 0 && borderJoinStyle !== 'miter') {\n clipSelf(ctx, element, endAngle);\n }\n if (!fullCircles) {\n pathArc(ctx, element, offset, spacing, endAngle, circular);\n ctx.stroke();\n }\n}\nclass ArcElement extends Element {\n static id = 'arc';\n static defaults = {\n borderAlign: 'center',\n borderColor: '#fff',\n borderDash: [],\n borderDashOffset: 0,\n borderJoinStyle: undefined,\n borderRadius: 0,\n borderWidth: 2,\n offset: 0,\n spacing: 0,\n angle: undefined,\n circular: true,\n selfJoin: false\n };\n static defaultRoutes = {\n backgroundColor: 'backgroundColor'\n };\n static descriptors = {\n _scriptable: true,\n _indexable: name => name !== 'borderDash'\n };\n circumference;\n endAngle;\n fullCircles;\n innerRadius;\n outerRadius;\n pixelMargin;\n startAngle;\n constructor(cfg) {\n super();\n this.options = undefined;\n this.circumference = undefined;\n this.startAngle = undefined;\n this.endAngle = undefined;\n this.innerRadius = undefined;\n this.outerRadius = undefined;\n this.pixelMargin = 0;\n this.fullCircles = 0;\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n inRange(chartX, chartY, useFinalPosition) {\n const point = this.getProps(['x', 'y'], useFinalPosition);\n const {\n angle,\n distance\n } = getAngleFromPoint(point, {\n x: chartX,\n y: chartY\n });\n const {\n startAngle,\n endAngle,\n innerRadius,\n outerRadius,\n circumference\n } = this.getProps(['startAngle', 'endAngle', 'innerRadius', 'outerRadius', 'circumference'], useFinalPosition);\n const rAdjust = (this.options.spacing + this.options.borderWidth) / 2;\n const _circumference = valueOrDefault(circumference, endAngle - startAngle);\n const nonZeroBetween = _angleBetween(angle, startAngle, endAngle) && startAngle !== endAngle;\n const betweenAngles = _circumference >= TAU || nonZeroBetween;\n const withinRadius = _isBetween(distance, innerRadius + rAdjust, outerRadius + rAdjust);\n return betweenAngles && withinRadius;\n }\n getCenterPoint(useFinalPosition) {\n const {\n x,\n y,\n startAngle,\n endAngle,\n innerRadius,\n outerRadius\n } = this.getProps(['x', 'y', 'startAngle', 'endAngle', 'innerRadius', 'outerRadius'], useFinalPosition);\n const {\n offset,\n spacing\n } = this.options;\n const halfAngle = (startAngle + endAngle) / 2;\n const halfRadius = (innerRadius + outerRadius + spacing + offset) / 2;\n return {\n x: x + Math.cos(halfAngle) * halfRadius,\n y: y + Math.sin(halfAngle) * halfRadius\n };\n }\n tooltipPosition(useFinalPosition) {\n return this.getCenterPoint(useFinalPosition);\n }\n draw(ctx) {\n const {\n options,\n circumference\n } = this;\n const offset = (options.offset || 0) / 4;\n const spacing = (options.spacing || 0) / 2;\n const circular = options.circular;\n this.pixelMargin = options.borderAlign === 'inner' ? 0.33 : 0;\n this.fullCircles = circumference > TAU ? Math.floor(circumference / TAU) : 0;\n if (circumference === 0 || this.innerRadius < 0 || this.outerRadius < 0) {\n return;\n }\n ctx.save();\n const halfAngle = (this.startAngle + this.endAngle) / 2;\n ctx.translate(Math.cos(halfAngle) * offset, Math.sin(halfAngle) * offset);\n const fix = 1 - Math.sin(Math.min(PI, circumference || 0));\n const radiusOffset = offset * fix;\n ctx.fillStyle = options.backgroundColor;\n ctx.strokeStyle = options.borderColor;\n drawArc(ctx, this, radiusOffset, spacing, circular);\n drawBorder(ctx, this, radiusOffset, spacing, circular);\n ctx.restore();\n }\n}\nfunction setStyle(ctx, options, style = options) {\n ctx.lineCap = valueOrDefault(style.borderCapStyle, options.borderCapStyle);\n ctx.setLineDash(valueOrDefault(style.borderDash, options.borderDash));\n ctx.lineDashOffset = valueOrDefault(style.borderDashOffset, options.borderDashOffset);\n ctx.lineJoin = valueOrDefault(style.borderJoinStyle, options.borderJoinStyle);\n ctx.lineWidth = valueOrDefault(style.borderWidth, options.borderWidth);\n ctx.strokeStyle = valueOrDefault(style.borderColor, options.borderColor);\n}\nfunction lineTo(ctx, previous, target) {\n ctx.lineTo(target.x, target.y);\n}\nfunction getLineMethod(options) {\n if (options.stepped) {\n return _steppedLineTo;\n }\n if (options.tension || options.cubicInterpolationMode === 'monotone') {\n return _bezierCurveTo;\n }\n return lineTo;\n}\nfunction pathVars(points, segment, params = {}) {\n const count = points.length;\n const {\n start: paramsStart = 0,\n end: paramsEnd = count - 1\n } = params;\n const {\n start: segmentStart,\n end: segmentEnd\n } = segment;\n const start = Math.max(paramsStart, segmentStart);\n const end = Math.min(paramsEnd, segmentEnd);\n const outside = paramsStart < segmentStart && paramsEnd < segmentStart || paramsStart > segmentEnd && paramsEnd > segmentEnd;\n return {\n count,\n start,\n loop: segment.loop,\n ilen: end < start && !outside ? count + end - start : end - start\n };\n}\nfunction pathSegment(ctx, line, segment, params) {\n const {\n points,\n options\n } = line;\n const {\n count,\n start,\n loop,\n ilen\n } = pathVars(points, segment, params);\n const lineMethod = getLineMethod(options);\n let {\n move = true,\n reverse\n } = params || {};\n let i, point, prev;\n for (i = 0; i <= ilen; ++i) {\n point = points[(start + (reverse ? ilen - i : i)) % count];\n if (point.skip) {\n continue;\n } else if (move) {\n ctx.moveTo(point.x, point.y);\n move = false;\n } else {\n lineMethod(ctx, prev, point, reverse, options.stepped);\n }\n prev = point;\n }\n if (loop) {\n point = points[(start + (reverse ? ilen : 0)) % count];\n lineMethod(ctx, prev, point, reverse, options.stepped);\n }\n return !!loop;\n}\nfunction fastPathSegment(ctx, line, segment, params) {\n const points = line.points;\n const {\n count,\n start,\n ilen\n } = pathVars(points, segment, params);\n const {\n move = true,\n reverse\n } = params || {};\n let avgX = 0;\n let countX = 0;\n let i, point, prevX, minY, maxY, lastY;\n const pointIndex = index => (start + (reverse ? ilen - index : index)) % count;\n const drawX = () => {\n if (minY !== maxY) {\n ctx.lineTo(avgX, maxY);\n ctx.lineTo(avgX, minY);\n ctx.lineTo(avgX, lastY);\n }\n };\n if (move) {\n point = points[pointIndex(0)];\n ctx.moveTo(point.x, point.y);\n }\n for (i = 0; i <= ilen; ++i) {\n point = points[pointIndex(i)];\n if (point.skip) {\n continue;\n }\n const x = point.x;\n const y = point.y;\n const truncX = x | 0;\n if (truncX === prevX) {\n if (y < minY) {\n minY = y;\n } else if (y > maxY) {\n maxY = y;\n }\n avgX = (countX * avgX + x) / ++countX;\n } else {\n drawX();\n ctx.lineTo(x, y);\n prevX = truncX;\n countX = 0;\n minY = maxY = y;\n }\n lastY = y;\n }\n drawX();\n}\nfunction _getSegmentMethod(line) {\n const opts = line.options;\n const borderDash = opts.borderDash && opts.borderDash.length;\n const useFastPath = !line._decimated && !line._loop && !opts.tension && opts.cubicInterpolationMode !== 'monotone' && !opts.stepped && !borderDash;\n return useFastPath ? fastPathSegment : pathSegment;\n}\nfunction _getInterpolationMethod(options) {\n if (options.stepped) {\n return _steppedInterpolation;\n }\n if (options.tension || options.cubicInterpolationMode === 'monotone') {\n return _bezierInterpolation;\n }\n return _pointInLine;\n}\nfunction strokePathWithCache(ctx, line, start, count) {\n let path = line._path;\n if (!path) {\n path = line._path = new Path2D();\n if (line.path(path, start, count)) {\n path.closePath();\n }\n }\n setStyle(ctx, line.options);\n ctx.stroke(path);\n}\nfunction strokePathDirect(ctx, line, start, count) {\n const {\n segments,\n options\n } = line;\n const segmentMethod = _getSegmentMethod(line);\n for (const segment of segments) {\n setStyle(ctx, options, segment.style);\n ctx.beginPath();\n if (segmentMethod(ctx, line, segment, {\n start,\n end: start + count - 1\n })) {\n ctx.closePath();\n }\n ctx.stroke();\n }\n}\nconst usePath2D = typeof Path2D === 'function';\nfunction draw(ctx, line, start, count) {\n if (usePath2D && !line.options.segment) {\n strokePathWithCache(ctx, line, start, count);\n } else {\n strokePathDirect(ctx, line, start, count);\n }\n}\nlet LineElement = /*#__PURE__*/(() => {\n class LineElement extends Element {\n static id = 'line';\n static defaults = {\n borderCapStyle: 'butt',\n borderDash: [],\n borderDashOffset: 0,\n borderJoinStyle: 'miter',\n borderWidth: 3,\n capBezierPoints: true,\n cubicInterpolationMode: 'default',\n fill: false,\n spanGaps: false,\n stepped: false,\n tension: 0\n };\n static defaultRoutes = {\n backgroundColor: 'backgroundColor',\n borderColor: 'borderColor'\n };\n static descriptors = {\n _scriptable: true,\n _indexable: name => name !== 'borderDash' && name !== 'fill'\n };\n constructor(cfg) {\n super();\n this.animated = true;\n this.options = undefined;\n this._chart = undefined;\n this._loop = undefined;\n this._fullLoop = undefined;\n this._path = undefined;\n this._points = undefined;\n this._segments = undefined;\n this._decimated = false;\n this._pointsUpdated = false;\n this._datasetIndex = undefined;\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n updateControlPoints(chartArea, indexAxis) {\n const options = this.options;\n if ((options.tension || options.cubicInterpolationMode === 'monotone') && !options.stepped && !this._pointsUpdated) {\n const loop = options.spanGaps ? this._loop : this._fullLoop;\n _updateBezierControlPoints(this._points, options, chartArea, loop, indexAxis);\n this._pointsUpdated = true;\n }\n }\n set points(points) {\n this._points = points;\n delete this._segments;\n delete this._path;\n this._pointsUpdated = false;\n }\n get points() {\n return this._points;\n }\n get segments() {\n return this._segments || (this._segments = _computeSegments(this, this.options.segment));\n }\n first() {\n const segments = this.segments;\n const points = this.points;\n return segments.length && points[segments[0].start];\n }\n last() {\n const segments = this.segments;\n const points = this.points;\n const count = segments.length;\n return count && points[segments[count - 1].end];\n }\n interpolate(point, property) {\n const options = this.options;\n const value = point[property];\n const points = this.points;\n const segments = _boundSegments(this, {\n property,\n start: value,\n end: value\n });\n if (!segments.length) {\n return;\n }\n const result = [];\n const _interpolate = _getInterpolationMethod(options);\n let i, ilen;\n for (i = 0, ilen = segments.length; i < ilen; ++i) {\n const {\n start,\n end\n } = segments[i];\n const p1 = points[start];\n const p2 = points[end];\n if (p1 === p2) {\n result.push(p1);\n continue;\n }\n const t = Math.abs((value - p1[property]) / (p2[property] - p1[property]));\n const interpolated = _interpolate(p1, p2, t, options.stepped);\n interpolated[property] = point[property];\n result.push(interpolated);\n }\n return result.length === 1 ? result[0] : result;\n }\n pathSegment(ctx, segment, params) {\n const segmentMethod = _getSegmentMethod(this);\n return segmentMethod(ctx, this, segment, params);\n }\n path(ctx, start, count) {\n const segments = this.segments;\n const segmentMethod = _getSegmentMethod(this);\n let loop = this._loop;\n start = start || 0;\n count = count || this.points.length - start;\n for (const segment of segments) {\n loop &= segmentMethod(ctx, this, segment, {\n start,\n end: start + count - 1\n });\n }\n return !!loop;\n }\n draw(ctx, chartArea, start, count) {\n const options = this.options || {};\n const points = this.points || [];\n if (points.length && options.borderWidth) {\n ctx.save();\n draw(ctx, this, start, count);\n ctx.restore();\n }\n if (this.animated) {\n this._pointsUpdated = false;\n this._path = undefined;\n }\n }\n }\n return LineElement;\n})();\nfunction inRange$1(el, pos, axis, useFinalPosition) {\n const options = el.options;\n const {\n [axis]: value\n } = el.getProps([axis], useFinalPosition);\n return Math.abs(pos - value) < options.radius + options.hitRadius;\n}\nlet PointElement = /*#__PURE__*/(() => {\n class PointElement extends Element {\n static id = 'point';\n parsed;\n skip;\n stop;\n /**\n * @type {any}\n */\n static defaults = {\n borderWidth: 1,\n hitRadius: 1,\n hoverBorderWidth: 1,\n hoverRadius: 4,\n pointStyle: 'circle',\n radius: 3,\n rotation: 0\n };\n /**\n * @type {any}\n */\n static defaultRoutes = {\n backgroundColor: 'backgroundColor',\n borderColor: 'borderColor'\n };\n constructor(cfg) {\n super();\n this.options = undefined;\n this.parsed = undefined;\n this.skip = undefined;\n this.stop = undefined;\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n inRange(mouseX, mouseY, useFinalPosition) {\n const options = this.options;\n const {\n x,\n y\n } = this.getProps(['x', 'y'], useFinalPosition);\n return Math.pow(mouseX - x, 2) + Math.pow(mouseY - y, 2) < Math.pow(options.hitRadius + options.radius, 2);\n }\n inXRange(mouseX, useFinalPosition) {\n return inRange$1(this, mouseX, 'x', useFinalPosition);\n }\n inYRange(mouseY, useFinalPosition) {\n return inRange$1(this, mouseY, 'y', useFinalPosition);\n }\n getCenterPoint(useFinalPosition) {\n const {\n x,\n y\n } = this.getProps(['x', 'y'], useFinalPosition);\n return {\n x,\n y\n };\n }\n size(options) {\n options = options || this.options || {};\n let radius = options.radius || 0;\n radius = Math.max(radius, radius && options.hoverRadius || 0);\n const borderWidth = radius && options.borderWidth || 0;\n return (radius + borderWidth) * 2;\n }\n draw(ctx, area) {\n const options = this.options;\n if (this.skip || options.radius < 0.1 || !_isPointInArea(this, area, this.size(options) / 2)) {\n return;\n }\n ctx.strokeStyle = options.borderColor;\n ctx.lineWidth = options.borderWidth;\n ctx.fillStyle = options.backgroundColor;\n drawPoint(ctx, options, this.x, this.y);\n }\n getRange() {\n const options = this.options || {};\n // @ts-expect-error Fallbacks should never be hit in practice\n return options.radius + options.hitRadius;\n }\n }\n return PointElement;\n})();\nfunction getBarBounds(bar, useFinalPosition) {\n const {\n x,\n y,\n base,\n width,\n height\n } = bar.getProps(['x', 'y', 'base', 'width', 'height'], useFinalPosition);\n let left, right, top, bottom, half;\n if (bar.horizontal) {\n half = height / 2;\n left = Math.min(x, base);\n right = Math.max(x, base);\n top = y - half;\n bottom = y + half;\n } else {\n half = width / 2;\n left = x - half;\n right = x + half;\n top = Math.min(y, base);\n bottom = Math.max(y, base);\n }\n return {\n left,\n top,\n right,\n bottom\n };\n}\nfunction skipOrLimit(skip, value, min, max) {\n return skip ? 0 : _limitValue(value, min, max);\n}\nfunction parseBorderWidth(bar, maxW, maxH) {\n const value = bar.options.borderWidth;\n const skip = bar.borderSkipped;\n const o = toTRBL(value);\n return {\n t: skipOrLimit(skip.top, o.top, 0, maxH),\n r: skipOrLimit(skip.right, o.right, 0, maxW),\n b: skipOrLimit(skip.bottom, o.bottom, 0, maxH),\n l: skipOrLimit(skip.left, o.left, 0, maxW)\n };\n}\nfunction parseBorderRadius(bar, maxW, maxH) {\n const {\n enableBorderRadius\n } = bar.getProps(['enableBorderRadius']);\n const value = bar.options.borderRadius;\n const o = toTRBLCorners(value);\n const maxR = Math.min(maxW, maxH);\n const skip = bar.borderSkipped;\n const enableBorder = enableBorderRadius || isObject(value);\n return {\n topLeft: skipOrLimit(!enableBorder || skip.top || skip.left, o.topLeft, 0, maxR),\n topRight: skipOrLimit(!enableBorder || skip.top || skip.right, o.topRight, 0, maxR),\n bottomLeft: skipOrLimit(!enableBorder || skip.bottom || skip.left, o.bottomLeft, 0, maxR),\n bottomRight: skipOrLimit(!enableBorder || skip.bottom || skip.right, o.bottomRight, 0, maxR)\n };\n}\nfunction boundingRects(bar) {\n const bounds = getBarBounds(bar);\n const width = bounds.right - bounds.left;\n const height = bounds.bottom - bounds.top;\n const border = parseBorderWidth(bar, width / 2, height / 2);\n const radius = parseBorderRadius(bar, width / 2, height / 2);\n return {\n outer: {\n x: bounds.left,\n y: bounds.top,\n w: width,\n h: height,\n radius\n },\n inner: {\n x: bounds.left + border.l,\n y: bounds.top + border.t,\n w: width - border.l - border.r,\n h: height - border.t - border.b,\n radius: {\n topLeft: Math.max(0, radius.topLeft - Math.max(border.t, border.l)),\n topRight: Math.max(0, radius.topRight - Math.max(border.t, border.r)),\n bottomLeft: Math.max(0, radius.bottomLeft - Math.max(border.b, border.l)),\n bottomRight: Math.max(0, radius.bottomRight - Math.max(border.b, border.r))\n }\n }\n };\n}\nfunction inRange(bar, x, y, useFinalPosition) {\n const skipX = x === null;\n const skipY = y === null;\n const skipBoth = skipX && skipY;\n const bounds = bar && !skipBoth && getBarBounds(bar, useFinalPosition);\n return bounds && (skipX || _isBetween(x, bounds.left, bounds.right)) && (skipY || _isBetween(y, bounds.top, bounds.bottom));\n}\nfunction hasRadius(radius) {\n return radius.topLeft || radius.topRight || radius.bottomLeft || radius.bottomRight;\n}\nfunction addNormalRectPath(ctx, rect) {\n ctx.rect(rect.x, rect.y, rect.w, rect.h);\n}\nfunction inflateRect(rect, amount, refRect = {}) {\n const x = rect.x !== refRect.x ? -amount : 0;\n const y = rect.y !== refRect.y ? -amount : 0;\n const w = (rect.x + rect.w !== refRect.x + refRect.w ? amount : 0) - x;\n const h = (rect.y + rect.h !== refRect.y + refRect.h ? amount : 0) - y;\n return {\n x: rect.x + x,\n y: rect.y + y,\n w: rect.w + w,\n h: rect.h + h,\n radius: rect.radius\n };\n}\nclass BarElement extends Element {\n static id = 'bar';\n static defaults = {\n borderSkipped: 'start',\n borderWidth: 0,\n borderRadius: 0,\n inflateAmount: 'auto',\n pointStyle: undefined\n };\n static defaultRoutes = {\n backgroundColor: 'backgroundColor',\n borderColor: 'borderColor'\n };\n constructor(cfg) {\n super();\n this.options = undefined;\n this.horizontal = undefined;\n this.base = undefined;\n this.width = undefined;\n this.height = undefined;\n this.inflateAmount = undefined;\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n draw(ctx) {\n const {\n inflateAmount,\n options: {\n borderColor,\n backgroundColor\n }\n } = this;\n const {\n inner,\n outer\n } = boundingRects(this);\n const addRectPath = hasRadius(outer.radius) ? addRoundedRectPath : addNormalRectPath;\n ctx.save();\n if (outer.w !== inner.w || outer.h !== inner.h) {\n ctx.beginPath();\n addRectPath(ctx, inflateRect(outer, inflateAmount, inner));\n ctx.clip();\n addRectPath(ctx, inflateRect(inner, -inflateAmount, outer));\n ctx.fillStyle = borderColor;\n ctx.fill('evenodd');\n }\n ctx.beginPath();\n addRectPath(ctx, inflateRect(inner, inflateAmount));\n ctx.fillStyle = backgroundColor;\n ctx.fill();\n ctx.restore();\n }\n inRange(mouseX, mouseY, useFinalPosition) {\n return inRange(this, mouseX, mouseY, useFinalPosition);\n }\n inXRange(mouseX, useFinalPosition) {\n return inRange(this, mouseX, null, useFinalPosition);\n }\n inYRange(mouseY, useFinalPosition) {\n return inRange(this, null, mouseY, useFinalPosition);\n }\n getCenterPoint(useFinalPosition) {\n const {\n x,\n y,\n base,\n horizontal\n } = this.getProps(['x', 'y', 'base', 'horizontal'], useFinalPosition);\n return {\n x: horizontal ? (x + base) / 2 : x,\n y: horizontal ? y : (y + base) / 2\n };\n }\n getRange(axis) {\n return axis === 'x' ? this.width / 2 : this.height / 2;\n }\n}\nvar elements = /*#__PURE__*/Object.freeze({\n __proto__: null,\n ArcElement: ArcElement,\n BarElement: BarElement,\n LineElement: LineElement,\n PointElement: PointElement\n});\nconst BORDER_COLORS = ['rgb(54, 162, 235)', 'rgb(255, 99, 132)', 'rgb(255, 159, 64)', 'rgb(255, 205, 86)', 'rgb(75, 192, 192)', 'rgb(153, 102, 255)', 'rgb(201, 203, 207)' // grey\n];\n// Border colors with 50% transparency\nconst BACKGROUND_COLORS = /* #__PURE__ */BORDER_COLORS.map(color => color.replace('rgb(', 'rgba(').replace(')', ', 0.5)'));\nfunction getBorderColor(i) {\n return BORDER_COLORS[i % BORDER_COLORS.length];\n}\nfunction getBackgroundColor(i) {\n return BACKGROUND_COLORS[i % BACKGROUND_COLORS.length];\n}\nfunction colorizeDefaultDataset(dataset, i) {\n dataset.borderColor = getBorderColor(i);\n dataset.backgroundColor = getBackgroundColor(i);\n return ++i;\n}\nfunction colorizeDoughnutDataset(dataset, i) {\n dataset.backgroundColor = dataset.data.map(() => getBorderColor(i++));\n return i;\n}\nfunction colorizePolarAreaDataset(dataset, i) {\n dataset.backgroundColor = dataset.data.map(() => getBackgroundColor(i++));\n return i;\n}\nfunction getColorizer(chart) {\n let i = 0;\n return (dataset, datasetIndex) => {\n const controller = chart.getDatasetMeta(datasetIndex).controller;\n if (controller instanceof DoughnutController) {\n i = colorizeDoughnutDataset(dataset, i);\n } else if (controller instanceof PolarAreaController) {\n i = colorizePolarAreaDataset(dataset, i);\n } else if (controller) {\n i = colorizeDefaultDataset(dataset, i);\n }\n };\n}\nfunction containsColorsDefinitions(descriptors) {\n let k;\n for (k in descriptors) {\n if (descriptors[k].borderColor || descriptors[k].backgroundColor) {\n return true;\n }\n }\n return false;\n}\nfunction containsColorsDefinition(descriptor) {\n return descriptor && (descriptor.borderColor || descriptor.backgroundColor);\n}\nfunction containsDefaultColorsDefenitions() {\n return defaults.borderColor !== 'rgba(0,0,0,0.1)' || defaults.backgroundColor !== 'rgba(0,0,0,0.1)';\n}\nvar plugin_colors = {\n id: 'colors',\n defaults: {\n enabled: true,\n forceOverride: false\n },\n beforeLayout(chart, _args, options) {\n if (!options.enabled) {\n return;\n }\n const {\n data: {\n datasets\n },\n options: chartOptions\n } = chart.config;\n const {\n elements\n } = chartOptions;\n const containsColorDefenition = containsColorsDefinitions(datasets) || containsColorsDefinition(chartOptions) || elements && containsColorsDefinitions(elements) || containsDefaultColorsDefenitions();\n if (!options.forceOverride && containsColorDefenition) {\n return;\n }\n const colorizer = getColorizer(chart);\n datasets.forEach(colorizer);\n }\n};\nfunction lttbDecimation(data, start, count, availableWidth, options) {\n const samples = options.samples || availableWidth;\n if (samples >= count) {\n return data.slice(start, start + count);\n }\n const decimated = [];\n const bucketWidth = (count - 2) / (samples - 2);\n let sampledIndex = 0;\n const endIndex = start + count - 1;\n let a = start;\n let i, maxAreaPoint, maxArea, area, nextA;\n decimated[sampledIndex++] = data[a];\n for (i = 0; i < samples - 2; i++) {\n let avgX = 0;\n let avgY = 0;\n let j;\n const avgRangeStart = Math.floor((i + 1) * bucketWidth) + 1 + start;\n const avgRangeEnd = Math.min(Math.floor((i + 2) * bucketWidth) + 1, count) + start;\n const avgRangeLength = avgRangeEnd - avgRangeStart;\n for (j = avgRangeStart; j < avgRangeEnd; j++) {\n avgX += data[j].x;\n avgY += data[j].y;\n }\n avgX /= avgRangeLength;\n avgY /= avgRangeLength;\n const rangeOffs = Math.floor(i * bucketWidth) + 1 + start;\n const rangeTo = Math.min(Math.floor((i + 1) * bucketWidth) + 1, count) + start;\n const {\n x: pointAx,\n y: pointAy\n } = data[a];\n maxArea = area = -1;\n for (j = rangeOffs; j < rangeTo; j++) {\n area = 0.5 * Math.abs((pointAx - avgX) * (data[j].y - pointAy) - (pointAx - data[j].x) * (avgY - pointAy));\n if (area > maxArea) {\n maxArea = area;\n maxAreaPoint = data[j];\n nextA = j;\n }\n }\n decimated[sampledIndex++] = maxAreaPoint;\n a = nextA;\n }\n decimated[sampledIndex++] = data[endIndex];\n return decimated;\n}\nfunction minMaxDecimation(data, start, count, availableWidth) {\n let avgX = 0;\n let countX = 0;\n let i, point, x, y, prevX, minIndex, maxIndex, startIndex, minY, maxY;\n const decimated = [];\n const endIndex = start + count - 1;\n const xMin = data[start].x;\n const xMax = data[endIndex].x;\n const dx = xMax - xMin;\n for (i = start; i < start + count; ++i) {\n point = data[i];\n x = (point.x - xMin) / dx * availableWidth;\n y = point.y;\n const truncX = x | 0;\n if (truncX === prevX) {\n if (y < minY) {\n minY = y;\n minIndex = i;\n } else if (y > maxY) {\n maxY = y;\n maxIndex = i;\n }\n avgX = (countX * avgX + point.x) / ++countX;\n } else {\n const lastIndex = i - 1;\n if (!isNullOrUndef(minIndex) && !isNullOrUndef(maxIndex)) {\n const intermediateIndex1 = Math.min(minIndex, maxIndex);\n const intermediateIndex2 = Math.max(minIndex, maxIndex);\n if (intermediateIndex1 !== startIndex && intermediateIndex1 !== lastIndex) {\n decimated.push({\n ...data[intermediateIndex1],\n x: avgX\n });\n }\n if (intermediateIndex2 !== startIndex && intermediateIndex2 !== lastIndex) {\n decimated.push({\n ...data[intermediateIndex2],\n x: avgX\n });\n }\n }\n if (i > 0 && lastIndex !== startIndex) {\n decimated.push(data[lastIndex]);\n }\n decimated.push(point);\n prevX = truncX;\n countX = 0;\n minY = maxY = y;\n minIndex = maxIndex = startIndex = i;\n }\n }\n return decimated;\n}\nfunction cleanDecimatedDataset(dataset) {\n if (dataset._decimated) {\n const data = dataset._data;\n delete dataset._decimated;\n delete dataset._data;\n Object.defineProperty(dataset, 'data', {\n configurable: true,\n enumerable: true,\n writable: true,\n value: data\n });\n }\n}\nfunction cleanDecimatedData(chart) {\n chart.data.datasets.forEach(dataset => {\n cleanDecimatedDataset(dataset);\n });\n}\nfunction getStartAndCountOfVisiblePointsSimplified(meta, points) {\n const pointCount = points.length;\n let start = 0;\n let count;\n const {\n iScale\n } = meta;\n const {\n min,\n max,\n minDefined,\n maxDefined\n } = iScale.getUserBounds();\n if (minDefined) {\n start = _limitValue(_lookupByKey(points, iScale.axis, min).lo, 0, pointCount - 1);\n }\n if (maxDefined) {\n count = _limitValue(_lookupByKey(points, iScale.axis, max).hi + 1, start, pointCount) - start;\n } else {\n count = pointCount - start;\n }\n return {\n start,\n count\n };\n}\nvar plugin_decimation = {\n id: 'decimation',\n defaults: {\n algorithm: 'min-max',\n enabled: false\n },\n beforeElementsUpdate: (chart, args, options) => {\n if (!options.enabled) {\n cleanDecimatedData(chart);\n return;\n }\n const availableWidth = chart.width;\n chart.data.datasets.forEach((dataset, datasetIndex) => {\n const {\n _data,\n indexAxis\n } = dataset;\n const meta = chart.getDatasetMeta(datasetIndex);\n const data = _data || dataset.data;\n if (resolve([indexAxis, chart.options.indexAxis]) === 'y') {\n return;\n }\n if (!meta.controller.supportsDecimation) {\n return;\n }\n const xAxis = chart.scales[meta.xAxisID];\n if (xAxis.type !== 'linear' && xAxis.type !== 'time') {\n return;\n }\n if (chart.options.parsing) {\n return;\n }\n let {\n start,\n count\n } = getStartAndCountOfVisiblePointsSimplified(meta, data);\n const threshold = options.threshold || 4 * availableWidth;\n if (count <= threshold) {\n cleanDecimatedDataset(dataset);\n return;\n }\n if (isNullOrUndef(_data)) {\n dataset._data = data;\n delete dataset.data;\n Object.defineProperty(dataset, 'data', {\n configurable: true,\n enumerable: true,\n get: function () {\n return this._decimated;\n },\n set: function (d) {\n this._data = d;\n }\n });\n }\n let decimated;\n switch (options.algorithm) {\n case 'lttb':\n decimated = lttbDecimation(data, start, count, availableWidth, options);\n break;\n case 'min-max':\n decimated = minMaxDecimation(data, start, count, availableWidth);\n break;\n default:\n throw new Error(`Unsupported decimation algorithm '${options.algorithm}'`);\n }\n dataset._decimated = decimated;\n });\n },\n destroy(chart) {\n cleanDecimatedData(chart);\n }\n};\nfunction _segments(line, target, property) {\n const segments = line.segments;\n const points = line.points;\n const tpoints = target.points;\n const parts = [];\n for (const segment of segments) {\n let {\n start,\n end\n } = segment;\n end = _findSegmentEnd(start, end, points);\n const bounds = _getBounds(property, points[start], points[end], segment.loop);\n if (!target.segments) {\n parts.push({\n source: segment,\n target: bounds,\n start: points[start],\n end: points[end]\n });\n continue;\n }\n const targetSegments = _boundSegments(target, bounds);\n for (const tgt of targetSegments) {\n const subBounds = _getBounds(property, tpoints[tgt.start], tpoints[tgt.end], tgt.loop);\n const fillSources = _boundSegment(segment, points, subBounds);\n for (const fillSource of fillSources) {\n parts.push({\n source: fillSource,\n target: tgt,\n start: {\n [property]: _getEdge(bounds, subBounds, 'start', Math.max)\n },\n end: {\n [property]: _getEdge(bounds, subBounds, 'end', Math.min)\n }\n });\n }\n }\n }\n return parts;\n}\nfunction _getBounds(property, first, last, loop) {\n if (loop) {\n return;\n }\n let start = first[property];\n let end = last[property];\n if (property === 'angle') {\n start = _normalizeAngle(start);\n end = _normalizeAngle(end);\n }\n return {\n property,\n start,\n end\n };\n}\nfunction _pointsFromSegments(boundary, line) {\n const {\n x = null,\n y = null\n } = boundary || {};\n const linePoints = line.points;\n const points = [];\n line.segments.forEach(({\n start,\n end\n }) => {\n end = _findSegmentEnd(start, end, linePoints);\n const first = linePoints[start];\n const last = linePoints[end];\n if (y !== null) {\n points.push({\n x: first.x,\n y\n });\n points.push({\n x: last.x,\n y\n });\n } else if (x !== null) {\n points.push({\n x,\n y: first.y\n });\n points.push({\n x,\n y: last.y\n });\n }\n });\n return points;\n}\nfunction _findSegmentEnd(start, end, points) {\n for (; end > start; end--) {\n const point = points[end];\n if (!isNaN(point.x) && !isNaN(point.y)) {\n break;\n }\n }\n return end;\n}\nfunction _getEdge(a, b, prop, fn) {\n if (a && b) {\n return fn(a[prop], b[prop]);\n }\n return a ? a[prop] : b ? b[prop] : 0;\n}\nfunction _createBoundaryLine(boundary, line) {\n let points = [];\n let _loop = false;\n if (isArray(boundary)) {\n _loop = true;\n points = boundary;\n } else {\n points = _pointsFromSegments(boundary, line);\n }\n return points.length ? new LineElement({\n points,\n options: {\n tension: 0\n },\n _loop,\n _fullLoop: _loop\n }) : null;\n}\nfunction _shouldApplyFill(source) {\n return source && source.fill !== false;\n}\nfunction _resolveTarget(sources, index, propagate) {\n const source = sources[index];\n let fill = source.fill;\n const visited = [index];\n let target;\n if (!propagate) {\n return fill;\n }\n while (fill !== false && visited.indexOf(fill) === -1) {\n if (!isNumberFinite(fill)) {\n return fill;\n }\n target = sources[fill];\n if (!target) {\n return false;\n }\n if (target.visible) {\n return fill;\n }\n visited.push(fill);\n fill = target.fill;\n }\n return false;\n}\nfunction _decodeFill(line, index, count) {\n const fill = parseFillOption(line);\n if (isObject(fill)) {\n return isNaN(fill.value) ? false : fill;\n }\n let target = parseFloat(fill);\n if (isNumberFinite(target) && Math.floor(target) === target) {\n return decodeTargetIndex(fill[0], index, target, count);\n }\n return ['origin', 'start', 'end', 'stack', 'shape'].indexOf(fill) >= 0 && fill;\n}\nfunction decodeTargetIndex(firstCh, index, target, count) {\n if (firstCh === '-' || firstCh === '+') {\n target = index + target;\n }\n if (target === index || target < 0 || target >= count) {\n return false;\n }\n return target;\n}\nfunction _getTargetPixel(fill, scale) {\n let pixel = null;\n if (fill === 'start') {\n pixel = scale.bottom;\n } else if (fill === 'end') {\n pixel = scale.top;\n } else if (isObject(fill)) {\n pixel = scale.getPixelForValue(fill.value);\n } else if (scale.getBasePixel) {\n pixel = scale.getBasePixel();\n }\n return pixel;\n}\nfunction _getTargetValue(fill, scale, startValue) {\n let value;\n if (fill === 'start') {\n value = startValue;\n } else if (fill === 'end') {\n value = scale.options.reverse ? scale.min : scale.max;\n } else if (isObject(fill)) {\n value = fill.value;\n } else {\n value = scale.getBaseValue();\n }\n return value;\n}\nfunction parseFillOption(line) {\n const options = line.options;\n const fillOption = options.fill;\n let fill = valueOrDefault(fillOption && fillOption.target, fillOption);\n if (fill === undefined) {\n fill = !!options.backgroundColor;\n }\n if (fill === false || fill === null) {\n return false;\n }\n if (fill === true) {\n return 'origin';\n }\n return fill;\n}\nfunction _buildStackLine(source) {\n const {\n scale,\n index,\n line\n } = source;\n const points = [];\n const segments = line.segments;\n const sourcePoints = line.points;\n const linesBelow = getLinesBelow(scale, index);\n linesBelow.push(_createBoundaryLine({\n x: null,\n y: scale.bottom\n }, line));\n for (let i = 0; i < segments.length; i++) {\n const segment = segments[i];\n for (let j = segment.start; j <= segment.end; j++) {\n addPointsBelow(points, sourcePoints[j], linesBelow);\n }\n }\n return new LineElement({\n points,\n options: {}\n });\n}\nfunction getLinesBelow(scale, index) {\n const below = [];\n const metas = scale.getMatchingVisibleMetas('line');\n for (let i = 0; i < metas.length; i++) {\n const meta = metas[i];\n if (meta.index === index) {\n break;\n }\n if (!meta.hidden) {\n below.unshift(meta.dataset);\n }\n }\n return below;\n}\nfunction addPointsBelow(points, sourcePoint, linesBelow) {\n const postponed = [];\n for (let j = 0; j < linesBelow.length; j++) {\n const line = linesBelow[j];\n const {\n first,\n last,\n point\n } = findPoint(line, sourcePoint, 'x');\n if (!point || first && last) {\n continue;\n }\n if (first) {\n postponed.unshift(point);\n } else {\n points.push(point);\n if (!last) {\n break;\n }\n }\n }\n points.push(...postponed);\n}\nfunction findPoint(line, sourcePoint, property) {\n const point = line.interpolate(sourcePoint, property);\n if (!point) {\n return {};\n }\n const pointValue = point[property];\n const segments = line.segments;\n const linePoints = line.points;\n let first = false;\n let last = false;\n for (let i = 0; i < segments.length; i++) {\n const segment = segments[i];\n const firstValue = linePoints[segment.start][property];\n const lastValue = linePoints[segment.end][property];\n if (_isBetween(pointValue, firstValue, lastValue)) {\n first = pointValue === firstValue;\n last = pointValue === lastValue;\n break;\n }\n }\n return {\n first,\n last,\n point\n };\n}\nclass simpleArc {\n constructor(opts) {\n this.x = opts.x;\n this.y = opts.y;\n this.radius = opts.radius;\n }\n pathSegment(ctx, bounds, opts) {\n const {\n x,\n y,\n radius\n } = this;\n bounds = bounds || {\n start: 0,\n end: TAU\n };\n ctx.arc(x, y, radius, bounds.end, bounds.start, true);\n return !opts.bounds;\n }\n interpolate(point) {\n const {\n x,\n y,\n radius\n } = this;\n const angle = point.angle;\n return {\n x: x + Math.cos(angle) * radius,\n y: y + Math.sin(angle) * radius,\n angle\n };\n }\n}\nfunction _getTarget(source) {\n const {\n chart,\n fill,\n line\n } = source;\n if (isNumberFinite(fill)) {\n return getLineByIndex(chart, fill);\n }\n if (fill === 'stack') {\n return _buildStackLine(source);\n }\n if (fill === 'shape') {\n return true;\n }\n const boundary = computeBoundary(source);\n if (boundary instanceof simpleArc) {\n return boundary;\n }\n return _createBoundaryLine(boundary, line);\n}\nfunction getLineByIndex(chart, index) {\n const meta = chart.getDatasetMeta(index);\n const visible = meta && chart.isDatasetVisible(index);\n return visible ? meta.dataset : null;\n}\nfunction computeBoundary(source) {\n const scale = source.scale || {};\n if (scale.getPointPositionForValue) {\n return computeCircularBoundary(source);\n }\n return computeLinearBoundary(source);\n}\nfunction computeLinearBoundary(source) {\n const {\n scale = {},\n fill\n } = source;\n const pixel = _getTargetPixel(fill, scale);\n if (isNumberFinite(pixel)) {\n const horizontal = scale.isHorizontal();\n return {\n x: horizontal ? pixel : null,\n y: horizontal ? null : pixel\n };\n }\n return null;\n}\nfunction computeCircularBoundary(source) {\n const {\n scale,\n fill\n } = source;\n const options = scale.options;\n const length = scale.getLabels().length;\n const start = options.reverse ? scale.max : scale.min;\n const value = _getTargetValue(fill, scale, start);\n const target = [];\n if (options.grid.circular) {\n const center = scale.getPointPositionForValue(0, start);\n return new simpleArc({\n x: center.x,\n y: center.y,\n radius: scale.getDistanceFromCenterForValue(value)\n });\n }\n for (let i = 0; i < length; ++i) {\n target.push(scale.getPointPositionForValue(i, value));\n }\n return target;\n}\nfunction _drawfill(ctx, source, area) {\n const target = _getTarget(source);\n const {\n chart,\n index,\n line,\n scale,\n axis\n } = source;\n const lineOpts = line.options;\n const fillOption = lineOpts.fill;\n const color = lineOpts.backgroundColor;\n const {\n above = color,\n below = color\n } = fillOption || {};\n const meta = chart.getDatasetMeta(index);\n const clip = getDatasetClipArea(chart, meta);\n if (target && line.points.length) {\n clipArea(ctx, area);\n doFill(ctx, {\n line,\n target,\n above,\n below,\n area,\n scale,\n axis,\n clip\n });\n unclipArea(ctx);\n }\n}\nfunction doFill(ctx, cfg) {\n const {\n line,\n target,\n above,\n below,\n area,\n scale,\n clip\n } = cfg;\n const property = line._loop ? 'angle' : cfg.axis;\n ctx.save();\n let fillColor = below;\n if (below !== above) {\n if (property === 'x') {\n clipVertical(ctx, target, area.top);\n fill(ctx, {\n line,\n target,\n color: above,\n scale,\n property,\n clip\n });\n ctx.restore();\n ctx.save();\n clipVertical(ctx, target, area.bottom);\n } else if (property === 'y') {\n clipHorizontal(ctx, target, area.left);\n fill(ctx, {\n line,\n target,\n color: below,\n scale,\n property,\n clip\n });\n ctx.restore();\n ctx.save();\n clipHorizontal(ctx, target, area.right);\n fillColor = above;\n }\n }\n fill(ctx, {\n line,\n target,\n color: fillColor,\n scale,\n property,\n clip\n });\n ctx.restore();\n}\nfunction clipVertical(ctx, target, clipY) {\n const {\n segments,\n points\n } = target;\n let first = true;\n let lineLoop = false;\n ctx.beginPath();\n for (const segment of segments) {\n const {\n start,\n end\n } = segment;\n const firstPoint = points[start];\n const lastPoint = points[_findSegmentEnd(start, end, points)];\n if (first) {\n ctx.moveTo(firstPoint.x, firstPoint.y);\n first = false;\n } else {\n ctx.lineTo(firstPoint.x, clipY);\n ctx.lineTo(firstPoint.x, firstPoint.y);\n }\n lineLoop = !!target.pathSegment(ctx, segment, {\n move: lineLoop\n });\n if (lineLoop) {\n ctx.closePath();\n } else {\n ctx.lineTo(lastPoint.x, clipY);\n }\n }\n ctx.lineTo(target.first().x, clipY);\n ctx.closePath();\n ctx.clip();\n}\nfunction clipHorizontal(ctx, target, clipX) {\n const {\n segments,\n points\n } = target;\n let first = true;\n let lineLoop = false;\n ctx.beginPath();\n for (const segment of segments) {\n const {\n start,\n end\n } = segment;\n const firstPoint = points[start];\n const lastPoint = points[_findSegmentEnd(start, end, points)];\n if (first) {\n ctx.moveTo(firstPoint.x, firstPoint.y);\n first = false;\n } else {\n ctx.lineTo(clipX, firstPoint.y);\n ctx.lineTo(firstPoint.x, firstPoint.y);\n }\n lineLoop = !!target.pathSegment(ctx, segment, {\n move: lineLoop\n });\n if (lineLoop) {\n ctx.closePath();\n } else {\n ctx.lineTo(clipX, lastPoint.y);\n }\n }\n ctx.lineTo(clipX, target.first().y);\n ctx.closePath();\n ctx.clip();\n}\nfunction fill(ctx, cfg) {\n const {\n line,\n target,\n property,\n color,\n scale,\n clip\n } = cfg;\n const segments = _segments(line, target, property);\n for (const {\n source: src,\n target: tgt,\n start,\n end\n } of segments) {\n const {\n style: {\n backgroundColor = color\n } = {}\n } = src;\n const notShape = target !== true;\n ctx.save();\n ctx.fillStyle = backgroundColor;\n clipBounds(ctx, scale, clip, notShape && _getBounds(property, start, end));\n ctx.beginPath();\n const lineLoop = !!line.pathSegment(ctx, src);\n let loop;\n if (notShape) {\n if (lineLoop) {\n ctx.closePath();\n } else {\n interpolatedLineTo(ctx, target, end, property);\n }\n const targetLoop = !!target.pathSegment(ctx, tgt, {\n move: lineLoop,\n reverse: true\n });\n loop = lineLoop && targetLoop;\n if (!loop) {\n interpolatedLineTo(ctx, target, start, property);\n }\n }\n ctx.closePath();\n ctx.fill(loop ? 'evenodd' : 'nonzero');\n ctx.restore();\n }\n}\nfunction clipBounds(ctx, scale, clip, bounds) {\n const chartArea = scale.chart.chartArea;\n const {\n property,\n start,\n end\n } = bounds || {};\n if (property === 'x' || property === 'y') {\n let left, top, right, bottom;\n if (property === 'x') {\n left = start;\n top = chartArea.top;\n right = end;\n bottom = chartArea.bottom;\n } else {\n left = chartArea.left;\n top = start;\n right = chartArea.right;\n bottom = end;\n }\n ctx.beginPath();\n if (clip) {\n left = Math.max(left, clip.left);\n right = Math.min(right, clip.right);\n top = Math.max(top, clip.top);\n bottom = Math.min(bottom, clip.bottom);\n }\n ctx.rect(left, top, right - left, bottom - top);\n ctx.clip();\n }\n}\nfunction interpolatedLineTo(ctx, target, point, property) {\n const interpolatedPoint = target.interpolate(point, property);\n if (interpolatedPoint) {\n ctx.lineTo(interpolatedPoint.x, interpolatedPoint.y);\n }\n}\nvar index = {\n id: 'filler',\n afterDatasetsUpdate(chart, _args, options) {\n const count = (chart.data.datasets || []).length;\n const sources = [];\n let meta, i, line, source;\n for (i = 0; i < count; ++i) {\n meta = chart.getDatasetMeta(i);\n line = meta.dataset;\n source = null;\n if (line && line.options && line instanceof LineElement) {\n source = {\n visible: chart.isDatasetVisible(i),\n index: i,\n fill: _decodeFill(line, i, count),\n chart,\n axis: meta.controller.options.indexAxis,\n scale: meta.vScale,\n line\n };\n }\n meta.$filler = source;\n sources.push(source);\n }\n for (i = 0; i < count; ++i) {\n source = sources[i];\n if (!source || source.fill === false) {\n continue;\n }\n source.fill = _resolveTarget(sources, i, options.propagate);\n }\n },\n beforeDraw(chart, _args, options) {\n const draw = options.drawTime === 'beforeDraw';\n const metasets = chart.getSortedVisibleDatasetMetas();\n const area = chart.chartArea;\n for (let i = metasets.length - 1; i >= 0; --i) {\n const source = metasets[i].$filler;\n if (!source) {\n continue;\n }\n source.line.updateControlPoints(area, source.axis);\n if (draw && source.fill) {\n _drawfill(chart.ctx, source, area);\n }\n }\n },\n beforeDatasetsDraw(chart, _args, options) {\n if (options.drawTime !== 'beforeDatasetsDraw') {\n return;\n }\n const metasets = chart.getSortedVisibleDatasetMetas();\n for (let i = metasets.length - 1; i >= 0; --i) {\n const source = metasets[i].$filler;\n if (_shouldApplyFill(source)) {\n _drawfill(chart.ctx, source, chart.chartArea);\n }\n }\n },\n beforeDatasetDraw(chart, args, options) {\n const source = args.meta.$filler;\n if (!_shouldApplyFill(source) || options.drawTime !== 'beforeDatasetDraw') {\n return;\n }\n _drawfill(chart.ctx, source, chart.chartArea);\n },\n defaults: {\n propagate: true,\n drawTime: 'beforeDatasetDraw'\n }\n};\nconst getBoxSize = (labelOpts, fontSize) => {\n let {\n boxHeight = fontSize,\n boxWidth = fontSize\n } = labelOpts;\n if (labelOpts.usePointStyle) {\n boxHeight = Math.min(boxHeight, fontSize);\n boxWidth = labelOpts.pointStyleWidth || Math.min(boxWidth, fontSize);\n }\n return {\n boxWidth,\n boxHeight,\n itemHeight: Math.max(fontSize, boxHeight)\n };\n};\nconst itemsEqual = (a, b) => a !== null && b !== null && a.datasetIndex === b.datasetIndex && a.index === b.index;\nclass Legend extends Element {\n constructor(config) {\n super();\n this._added = false;\n this.legendHitBoxes = [];\n this._hoveredItem = null;\n this.doughnutMode = false;\n this.chart = config.chart;\n this.options = config.options;\n this.ctx = config.ctx;\n this.legendItems = undefined;\n this.columnSizes = undefined;\n this.lineWidths = undefined;\n this.maxHeight = undefined;\n this.maxWidth = undefined;\n this.top = undefined;\n this.bottom = undefined;\n this.left = undefined;\n this.right = undefined;\n this.height = undefined;\n this.width = undefined;\n this._margins = undefined;\n this.position = undefined;\n this.weight = undefined;\n this.fullSize = undefined;\n }\n update(maxWidth, maxHeight, margins) {\n this.maxWidth = maxWidth;\n this.maxHeight = maxHeight;\n this._margins = margins;\n this.setDimensions();\n this.buildLabels();\n this.fit();\n }\n setDimensions() {\n if (this.isHorizontal()) {\n this.width = this.maxWidth;\n this.left = this._margins.left;\n this.right = this.width;\n } else {\n this.height = this.maxHeight;\n this.top = this._margins.top;\n this.bottom = this.height;\n }\n }\n buildLabels() {\n const labelOpts = this.options.labels || {};\n let legendItems = callback(labelOpts.generateLabels, [this.chart], this) || [];\n if (labelOpts.filter) {\n legendItems = legendItems.filter(item => labelOpts.filter(item, this.chart.data));\n }\n if (labelOpts.sort) {\n legendItems = legendItems.sort((a, b) => labelOpts.sort(a, b, this.chart.data));\n }\n if (this.options.reverse) {\n legendItems.reverse();\n }\n this.legendItems = legendItems;\n }\n fit() {\n const {\n options,\n ctx\n } = this;\n if (!options.display) {\n this.width = this.height = 0;\n return;\n }\n const labelOpts = options.labels;\n const labelFont = toFont(labelOpts.font);\n const fontSize = labelFont.size;\n const titleHeight = this._computeTitleHeight();\n const {\n boxWidth,\n itemHeight\n } = getBoxSize(labelOpts, fontSize);\n let width, height;\n ctx.font = labelFont.string;\n if (this.isHorizontal()) {\n width = this.maxWidth;\n height = this._fitRows(titleHeight, fontSize, boxWidth, itemHeight) + 10;\n } else {\n height = this.maxHeight;\n width = this._fitCols(titleHeight, labelFont, boxWidth, itemHeight) + 10;\n }\n this.width = Math.min(width, options.maxWidth || this.maxWidth);\n this.height = Math.min(height, options.maxHeight || this.maxHeight);\n }\n _fitRows(titleHeight, fontSize, boxWidth, itemHeight) {\n const {\n ctx,\n maxWidth,\n options: {\n labels: {\n padding\n }\n }\n } = this;\n const hitboxes = this.legendHitBoxes = [];\n const lineWidths = this.lineWidths = [0];\n const lineHeight = itemHeight + padding;\n let totalHeight = titleHeight;\n ctx.textAlign = 'left';\n ctx.textBaseline = 'middle';\n let row = -1;\n let top = -lineHeight;\n this.legendItems.forEach((legendItem, i) => {\n const itemWidth = boxWidth + fontSize / 2 + ctx.measureText(legendItem.text).width;\n if (i === 0 || lineWidths[lineWidths.length - 1] + itemWidth + 2 * padding > maxWidth) {\n totalHeight += lineHeight;\n lineWidths[lineWidths.length - (i > 0 ? 0 : 1)] = 0;\n top += lineHeight;\n row++;\n }\n hitboxes[i] = {\n left: 0,\n top,\n row,\n width: itemWidth,\n height: itemHeight\n };\n lineWidths[lineWidths.length - 1] += itemWidth + padding;\n });\n return totalHeight;\n }\n _fitCols(titleHeight, labelFont, boxWidth, _itemHeight) {\n const {\n ctx,\n maxHeight,\n options: {\n labels: {\n padding\n }\n }\n } = this;\n const hitboxes = this.legendHitBoxes = [];\n const columnSizes = this.columnSizes = [];\n const heightLimit = maxHeight - titleHeight;\n let totalWidth = padding;\n let currentColWidth = 0;\n let currentColHeight = 0;\n let left = 0;\n let col = 0;\n this.legendItems.forEach((legendItem, i) => {\n const {\n itemWidth,\n itemHeight\n } = calculateItemSize(boxWidth, labelFont, ctx, legendItem, _itemHeight);\n if (i > 0 && currentColHeight + itemHeight + 2 * padding > heightLimit) {\n totalWidth += currentColWidth + padding;\n columnSizes.push({\n width: currentColWidth,\n height: currentColHeight\n });\n left += currentColWidth + padding;\n col++;\n currentColWidth = currentColHeight = 0;\n }\n hitboxes[i] = {\n left,\n top: currentColHeight,\n col,\n width: itemWidth,\n height: itemHeight\n };\n currentColWidth = Math.max(currentColWidth, itemWidth);\n currentColHeight += itemHeight + padding;\n });\n totalWidth += currentColWidth;\n columnSizes.push({\n width: currentColWidth,\n height: currentColHeight\n });\n return totalWidth;\n }\n adjustHitBoxes() {\n if (!this.options.display) {\n return;\n }\n const titleHeight = this._computeTitleHeight();\n const {\n legendHitBoxes: hitboxes,\n options: {\n align,\n labels: {\n padding\n },\n rtl\n }\n } = this;\n const rtlHelper = getRtlAdapter(rtl, this.left, this.width);\n if (this.isHorizontal()) {\n let row = 0;\n let left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);\n for (const hitbox of hitboxes) {\n if (row !== hitbox.row) {\n row = hitbox.row;\n left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);\n }\n hitbox.top += this.top + titleHeight + padding;\n hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(left), hitbox.width);\n left += hitbox.width + padding;\n }\n } else {\n let col = 0;\n let top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);\n for (const hitbox of hitboxes) {\n if (hitbox.col !== col) {\n col = hitbox.col;\n top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);\n }\n hitbox.top = top;\n hitbox.left += this.left + padding;\n hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(hitbox.left), hitbox.width);\n top += hitbox.height + padding;\n }\n }\n }\n isHorizontal() {\n return this.options.position === 'top' || this.options.position === 'bottom';\n }\n draw() {\n if (this.options.display) {\n const ctx = this.ctx;\n clipArea(ctx, this);\n this._draw();\n unclipArea(ctx);\n }\n }\n _draw() {\n const {\n options: opts,\n columnSizes,\n lineWidths,\n ctx\n } = this;\n const {\n align,\n labels: labelOpts\n } = opts;\n const defaultColor = defaults.color;\n const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);\n const labelFont = toFont(labelOpts.font);\n const {\n padding\n } = labelOpts;\n const fontSize = labelFont.size;\n const halfFontSize = fontSize / 2;\n let cursor;\n this.drawTitle();\n ctx.textAlign = rtlHelper.textAlign('left');\n ctx.textBaseline = 'middle';\n ctx.lineWidth = 0.5;\n ctx.font = labelFont.string;\n const {\n boxWidth,\n boxHeight,\n itemHeight\n } = getBoxSize(labelOpts, fontSize);\n const drawLegendBox = function (x, y, legendItem) {\n if (isNaN(boxWidth) || boxWidth <= 0 || isNaN(boxHeight) || boxHeight < 0) {\n return;\n }\n ctx.save();\n const lineWidth = valueOrDefault(legendItem.lineWidth, 1);\n ctx.fillStyle = valueOrDefault(legendItem.fillStyle, defaultColor);\n ctx.lineCap = valueOrDefault(legendItem.lineCap, 'butt');\n ctx.lineDashOffset = valueOrDefault(legendItem.lineDashOffset, 0);\n ctx.lineJoin = valueOrDefault(legendItem.lineJoin, 'miter');\n ctx.lineWidth = lineWidth;\n ctx.strokeStyle = valueOrDefault(legendItem.strokeStyle, defaultColor);\n ctx.setLineDash(valueOrDefault(legendItem.lineDash, []));\n if (labelOpts.usePointStyle) {\n const drawOptions = {\n radius: boxHeight * Math.SQRT2 / 2,\n pointStyle: legendItem.pointStyle,\n rotation: legendItem.rotation,\n borderWidth: lineWidth\n };\n const centerX = rtlHelper.xPlus(x, boxWidth / 2);\n const centerY = y + halfFontSize;\n drawPointLegend(ctx, drawOptions, centerX, centerY, labelOpts.pointStyleWidth && boxWidth);\n } else {\n const yBoxTop = y + Math.max((fontSize - boxHeight) / 2, 0);\n const xBoxLeft = rtlHelper.leftForLtr(x, boxWidth);\n const borderRadius = toTRBLCorners(legendItem.borderRadius);\n ctx.beginPath();\n if (Object.values(borderRadius).some(v => v !== 0)) {\n addRoundedRectPath(ctx, {\n x: xBoxLeft,\n y: yBoxTop,\n w: boxWidth,\n h: boxHeight,\n radius: borderRadius\n });\n } else {\n ctx.rect(xBoxLeft, yBoxTop, boxWidth, boxHeight);\n }\n ctx.fill();\n if (lineWidth !== 0) {\n ctx.stroke();\n }\n }\n ctx.restore();\n };\n const fillText = function (x, y, legendItem) {\n renderText(ctx, legendItem.text, x, y + itemHeight / 2, labelFont, {\n strikethrough: legendItem.hidden,\n textAlign: rtlHelper.textAlign(legendItem.textAlign)\n });\n };\n const isHorizontal = this.isHorizontal();\n const titleHeight = this._computeTitleHeight();\n if (isHorizontal) {\n cursor = {\n x: _alignStartEnd(align, this.left + padding, this.right - lineWidths[0]),\n y: this.top + padding + titleHeight,\n line: 0\n };\n } else {\n cursor = {\n x: this.left + padding,\n y: _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[0].height),\n line: 0\n };\n }\n overrideTextDirection(this.ctx, opts.textDirection);\n const lineHeight = itemHeight + padding;\n this.legendItems.forEach((legendItem, i) => {\n ctx.strokeStyle = legendItem.fontColor;\n ctx.fillStyle = legendItem.fontColor;\n const textWidth = ctx.measureText(legendItem.text).width;\n const textAlign = rtlHelper.textAlign(legendItem.textAlign || (legendItem.textAlign = labelOpts.textAlign));\n const width = boxWidth + halfFontSize + textWidth;\n let x = cursor.x;\n let y = cursor.y;\n rtlHelper.setWidth(this.width);\n if (isHorizontal) {\n if (i > 0 && x + width + padding > this.right) {\n y = cursor.y += lineHeight;\n cursor.line++;\n x = cursor.x = _alignStartEnd(align, this.left + padding, this.right - lineWidths[cursor.line]);\n }\n } else if (i > 0 && y + lineHeight > this.bottom) {\n x = cursor.x = x + columnSizes[cursor.line].width + padding;\n cursor.line++;\n y = cursor.y = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[cursor.line].height);\n }\n const realX = rtlHelper.x(x);\n drawLegendBox(realX, y, legendItem);\n x = _textX(textAlign, x + boxWidth + halfFontSize, isHorizontal ? x + width : this.right, opts.rtl);\n fillText(rtlHelper.x(x), y, legendItem);\n if (isHorizontal) {\n cursor.x += width + padding;\n } else if (typeof legendItem.text !== 'string') {\n const fontLineHeight = labelFont.lineHeight;\n cursor.y += calculateLegendItemHeight(legendItem, fontLineHeight) + padding;\n } else {\n cursor.y += lineHeight;\n }\n });\n restoreTextDirection(this.ctx, opts.textDirection);\n }\n drawTitle() {\n const opts = this.options;\n const titleOpts = opts.title;\n const titleFont = toFont(titleOpts.font);\n const titlePadding = toPadding(titleOpts.padding);\n if (!titleOpts.display) {\n return;\n }\n const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);\n const ctx = this.ctx;\n const position = titleOpts.position;\n const halfFontSize = titleFont.size / 2;\n const topPaddingPlusHalfFontSize = titlePadding.top + halfFontSize;\n let y;\n let left = this.left;\n let maxWidth = this.width;\n if (this.isHorizontal()) {\n maxWidth = Math.max(...this.lineWidths);\n y = this.top + topPaddingPlusHalfFontSize;\n left = _alignStartEnd(opts.align, left, this.right - maxWidth);\n } else {\n const maxHeight = this.columnSizes.reduce((acc, size) => Math.max(acc, size.height), 0);\n y = topPaddingPlusHalfFontSize + _alignStartEnd(opts.align, this.top, this.bottom - maxHeight - opts.labels.padding - this._computeTitleHeight());\n }\n const x = _alignStartEnd(position, left, left + maxWidth);\n ctx.textAlign = rtlHelper.textAlign(_toLeftRightCenter(position));\n ctx.textBaseline = 'middle';\n ctx.strokeStyle = titleOpts.color;\n ctx.fillStyle = titleOpts.color;\n ctx.font = titleFont.string;\n renderText(ctx, titleOpts.text, x, y, titleFont);\n }\n _computeTitleHeight() {\n const titleOpts = this.options.title;\n const titleFont = toFont(titleOpts.font);\n const titlePadding = toPadding(titleOpts.padding);\n return titleOpts.display ? titleFont.lineHeight + titlePadding.height : 0;\n }\n _getLegendItemAt(x, y) {\n let i, hitBox, lh;\n if (_isBetween(x, this.left, this.right) && _isBetween(y, this.top, this.bottom)) {\n lh = this.legendHitBoxes;\n for (i = 0; i < lh.length; ++i) {\n hitBox = lh[i];\n if (_isBetween(x, hitBox.left, hitBox.left + hitBox.width) && _isBetween(y, hitBox.top, hitBox.top + hitBox.height)) {\n return this.legendItems[i];\n }\n }\n }\n return null;\n }\n handleEvent(e) {\n const opts = this.options;\n if (!isListened(e.type, opts)) {\n return;\n }\n const hoveredItem = this._getLegendItemAt(e.x, e.y);\n if (e.type === 'mousemove' || e.type === 'mouseout') {\n const previous = this._hoveredItem;\n const sameItem = itemsEqual(previous, hoveredItem);\n if (previous && !sameItem) {\n callback(opts.onLeave, [e, previous, this], this);\n }\n this._hoveredItem = hoveredItem;\n if (hoveredItem && !sameItem) {\n callback(opts.onHover, [e, hoveredItem, this], this);\n }\n } else if (hoveredItem) {\n callback(opts.onClick, [e, hoveredItem, this], this);\n }\n }\n}\nfunction calculateItemSize(boxWidth, labelFont, ctx, legendItem, _itemHeight) {\n const itemWidth = calculateItemWidth(legendItem, boxWidth, labelFont, ctx);\n const itemHeight = calculateItemHeight(_itemHeight, legendItem, labelFont.lineHeight);\n return {\n itemWidth,\n itemHeight\n };\n}\nfunction calculateItemWidth(legendItem, boxWidth, labelFont, ctx) {\n let legendItemText = legendItem.text;\n if (legendItemText && typeof legendItemText !== 'string') {\n legendItemText = legendItemText.reduce((a, b) => a.length > b.length ? a : b);\n }\n return boxWidth + labelFont.size / 2 + ctx.measureText(legendItemText).width;\n}\nfunction calculateItemHeight(_itemHeight, legendItem, fontLineHeight) {\n let itemHeight = _itemHeight;\n if (typeof legendItem.text !== 'string') {\n itemHeight = calculateLegendItemHeight(legendItem, fontLineHeight);\n }\n return itemHeight;\n}\nfunction calculateLegendItemHeight(legendItem, fontLineHeight) {\n const labelHeight = legendItem.text ? legendItem.text.length : 0;\n return fontLineHeight * labelHeight;\n}\nfunction isListened(type, opts) {\n if ((type === 'mousemove' || type === 'mouseout') && (opts.onHover || opts.onLeave)) {\n return true;\n }\n if (opts.onClick && (type === 'click' || type === 'mouseup')) {\n return true;\n }\n return false;\n}\nvar plugin_legend = {\n id: 'legend',\n _element: Legend,\n start(chart, _args, options) {\n const legend = chart.legend = new Legend({\n ctx: chart.ctx,\n options,\n chart\n });\n layouts.configure(chart, legend, options);\n layouts.addBox(chart, legend);\n },\n stop(chart) {\n layouts.removeBox(chart, chart.legend);\n delete chart.legend;\n },\n beforeUpdate(chart, _args, options) {\n const legend = chart.legend;\n layouts.configure(chart, legend, options);\n legend.options = options;\n },\n afterUpdate(chart) {\n const legend = chart.legend;\n legend.buildLabels();\n legend.adjustHitBoxes();\n },\n afterEvent(chart, args) {\n if (!args.replay) {\n chart.legend.handleEvent(args.event);\n }\n },\n defaults: {\n display: true,\n position: 'top',\n align: 'center',\n fullSize: true,\n reverse: false,\n weight: 1000,\n onClick(e, legendItem, legend) {\n const index = legendItem.datasetIndex;\n const ci = legend.chart;\n if (ci.isDatasetVisible(index)) {\n ci.hide(index);\n legendItem.hidden = true;\n } else {\n ci.show(index);\n legendItem.hidden = false;\n }\n },\n onHover: null,\n onLeave: null,\n labels: {\n color: ctx => ctx.chart.options.color,\n boxWidth: 40,\n padding: 10,\n generateLabels(chart) {\n const datasets = chart.data.datasets;\n const {\n labels: {\n usePointStyle,\n pointStyle,\n textAlign,\n color,\n useBorderRadius,\n borderRadius\n }\n } = chart.legend.options;\n return chart._getSortedDatasetMetas().map(meta => {\n const style = meta.controller.getStyle(usePointStyle ? 0 : undefined);\n const borderWidth = toPadding(style.borderWidth);\n return {\n text: datasets[meta.index].label,\n fillStyle: style.backgroundColor,\n fontColor: color,\n hidden: !meta.visible,\n lineCap: style.borderCapStyle,\n lineDash: style.borderDash,\n lineDashOffset: style.borderDashOffset,\n lineJoin: style.borderJoinStyle,\n lineWidth: (borderWidth.width + borderWidth.height) / 4,\n strokeStyle: style.borderColor,\n pointStyle: pointStyle || style.pointStyle,\n rotation: style.rotation,\n textAlign: textAlign || style.textAlign,\n borderRadius: useBorderRadius && (borderRadius || style.borderRadius),\n datasetIndex: meta.index\n };\n }, this);\n }\n },\n title: {\n color: ctx => ctx.chart.options.color,\n display: false,\n position: 'center',\n text: ''\n }\n },\n descriptors: {\n _scriptable: name => !name.startsWith('on'),\n labels: {\n _scriptable: name => !['generateLabels', 'filter', 'sort'].includes(name)\n }\n }\n};\nclass Title extends Element {\n constructor(config) {\n super();\n this.chart = config.chart;\n this.options = config.options;\n this.ctx = config.ctx;\n this._padding = undefined;\n this.top = undefined;\n this.bottom = undefined;\n this.left = undefined;\n this.right = undefined;\n this.width = undefined;\n this.height = undefined;\n this.position = undefined;\n this.weight = undefined;\n this.fullSize = undefined;\n }\n update(maxWidth, maxHeight) {\n const opts = this.options;\n this.left = 0;\n this.top = 0;\n if (!opts.display) {\n this.width = this.height = this.right = this.bottom = 0;\n return;\n }\n this.width = this.right = maxWidth;\n this.height = this.bottom = maxHeight;\n const lineCount = isArray(opts.text) ? opts.text.length : 1;\n this._padding = toPadding(opts.padding);\n const textSize = lineCount * toFont(opts.font).lineHeight + this._padding.height;\n if (this.isHorizontal()) {\n this.height = textSize;\n } else {\n this.width = textSize;\n }\n }\n isHorizontal() {\n const pos = this.options.position;\n return pos === 'top' || pos === 'bottom';\n }\n _drawArgs(offset) {\n const {\n top,\n left,\n bottom,\n right,\n options\n } = this;\n const align = options.align;\n let rotation = 0;\n let maxWidth, titleX, titleY;\n if (this.isHorizontal()) {\n titleX = _alignStartEnd(align, left, right);\n titleY = top + offset;\n maxWidth = right - left;\n } else {\n if (options.position === 'left') {\n titleX = left + offset;\n titleY = _alignStartEnd(align, bottom, top);\n rotation = PI * -0.5;\n } else {\n titleX = right - offset;\n titleY = _alignStartEnd(align, top, bottom);\n rotation = PI * 0.5;\n }\n maxWidth = bottom - top;\n }\n return {\n titleX,\n titleY,\n maxWidth,\n rotation\n };\n }\n draw() {\n const ctx = this.ctx;\n const opts = this.options;\n if (!opts.display) {\n return;\n }\n const fontOpts = toFont(opts.font);\n const lineHeight = fontOpts.lineHeight;\n const offset = lineHeight / 2 + this._padding.top;\n const {\n titleX,\n titleY,\n maxWidth,\n rotation\n } = this._drawArgs(offset);\n renderText(ctx, opts.text, 0, 0, fontOpts, {\n color: opts.color,\n maxWidth,\n rotation,\n textAlign: _toLeftRightCenter(opts.align),\n textBaseline: 'middle',\n translation: [titleX, titleY]\n });\n }\n}\nfunction createTitle(chart, titleOpts) {\n const title = new Title({\n ctx: chart.ctx,\n options: titleOpts,\n chart\n });\n layouts.configure(chart, title, titleOpts);\n layouts.addBox(chart, title);\n chart.titleBlock = title;\n}\nvar plugin_title = {\n id: 'title',\n _element: Title,\n start(chart, _args, options) {\n createTitle(chart, options);\n },\n stop(chart) {\n const titleBlock = chart.titleBlock;\n layouts.removeBox(chart, titleBlock);\n delete chart.titleBlock;\n },\n beforeUpdate(chart, _args, options) {\n const title = chart.titleBlock;\n layouts.configure(chart, title, options);\n title.options = options;\n },\n defaults: {\n align: 'center',\n display: false,\n font: {\n weight: 'bold'\n },\n fullSize: true,\n padding: 10,\n position: 'top',\n text: '',\n weight: 2000\n },\n defaultRoutes: {\n color: 'color'\n },\n descriptors: {\n _scriptable: true,\n _indexable: false\n }\n};\nconst map = new WeakMap();\nvar plugin_subtitle = {\n id: 'subtitle',\n start(chart, _args, options) {\n const title = new Title({\n ctx: chart.ctx,\n options,\n chart\n });\n layouts.configure(chart, title, options);\n layouts.addBox(chart, title);\n map.set(chart, title);\n },\n stop(chart) {\n layouts.removeBox(chart, map.get(chart));\n map.delete(chart);\n },\n beforeUpdate(chart, _args, options) {\n const title = map.get(chart);\n layouts.configure(chart, title, options);\n title.options = options;\n },\n defaults: {\n align: 'center',\n display: false,\n font: {\n weight: 'normal'\n },\n fullSize: true,\n padding: 0,\n position: 'top',\n text: '',\n weight: 1500\n },\n defaultRoutes: {\n color: 'color'\n },\n descriptors: {\n _scriptable: true,\n _indexable: false\n }\n};\nconst positioners = {\n average(items) {\n if (!items.length) {\n return false;\n }\n let i, len;\n let xSet = new Set();\n let y = 0;\n let count = 0;\n for (i = 0, len = items.length; i < len; ++i) {\n const el = items[i].element;\n if (el && el.hasValue()) {\n const pos = el.tooltipPosition();\n xSet.add(pos.x);\n y += pos.y;\n ++count;\n }\n }\n if (count === 0 || xSet.size === 0) {\n return false;\n }\n const xAverage = [...xSet].reduce((a, b) => a + b) / xSet.size;\n return {\n x: xAverage,\n y: y / count\n };\n },\n nearest(items, eventPosition) {\n if (!items.length) {\n return false;\n }\n let x = eventPosition.x;\n let y = eventPosition.y;\n let minDistance = Number.POSITIVE_INFINITY;\n let i, len, nearestElement;\n for (i = 0, len = items.length; i < len; ++i) {\n const el = items[i].element;\n if (el && el.hasValue()) {\n const center = el.getCenterPoint();\n const d = distanceBetweenPoints(eventPosition, center);\n if (d < minDistance) {\n minDistance = d;\n nearestElement = el;\n }\n }\n }\n if (nearestElement) {\n const tp = nearestElement.tooltipPosition();\n x = tp.x;\n y = tp.y;\n }\n return {\n x,\n y\n };\n }\n};\nfunction pushOrConcat(base, toPush) {\n if (toPush) {\n if (isArray(toPush)) {\n Array.prototype.push.apply(base, toPush);\n } else {\n base.push(toPush);\n }\n }\n return base;\n}\nfunction splitNewlines(str) {\n if ((typeof str === 'string' || str instanceof String) && str.indexOf('\\n') > -1) {\n return str.split('\\n');\n }\n return str;\n}\nfunction createTooltipItem(chart, item) {\n const {\n element,\n datasetIndex,\n index\n } = item;\n const controller = chart.getDatasetMeta(datasetIndex).controller;\n const {\n label,\n value\n } = controller.getLabelAndValue(index);\n return {\n chart,\n label,\n parsed: controller.getParsed(index),\n raw: chart.data.datasets[datasetIndex].data[index],\n formattedValue: value,\n dataset: controller.getDataset(),\n dataIndex: index,\n datasetIndex,\n element\n };\n}\nfunction getTooltipSize(tooltip, options) {\n const ctx = tooltip.chart.ctx;\n const {\n body,\n footer,\n title\n } = tooltip;\n const {\n boxWidth,\n boxHeight\n } = options;\n const bodyFont = toFont(options.bodyFont);\n const titleFont = toFont(options.titleFont);\n const footerFont = toFont(options.footerFont);\n const titleLineCount = title.length;\n const footerLineCount = footer.length;\n const bodyLineItemCount = body.length;\n const padding = toPadding(options.padding);\n let height = padding.height;\n let width = 0;\n let combinedBodyLength = body.reduce((count, bodyItem) => count + bodyItem.before.length + bodyItem.lines.length + bodyItem.after.length, 0);\n combinedBodyLength += tooltip.beforeBody.length + tooltip.afterBody.length;\n if (titleLineCount) {\n height += titleLineCount * titleFont.lineHeight + (titleLineCount - 1) * options.titleSpacing + options.titleMarginBottom;\n }\n if (combinedBodyLength) {\n const bodyLineHeight = options.displayColors ? Math.max(boxHeight, bodyFont.lineHeight) : bodyFont.lineHeight;\n height += bodyLineItemCount * bodyLineHeight + (combinedBodyLength - bodyLineItemCount) * bodyFont.lineHeight + (combinedBodyLength - 1) * options.bodySpacing;\n }\n if (footerLineCount) {\n height += options.footerMarginTop + footerLineCount * footerFont.lineHeight + (footerLineCount - 1) * options.footerSpacing;\n }\n let widthPadding = 0;\n const maxLineWidth = function (line) {\n width = Math.max(width, ctx.measureText(line).width + widthPadding);\n };\n ctx.save();\n ctx.font = titleFont.string;\n each(tooltip.title, maxLineWidth);\n ctx.font = bodyFont.string;\n each(tooltip.beforeBody.concat(tooltip.afterBody), maxLineWidth);\n widthPadding = options.displayColors ? boxWidth + 2 + options.boxPadding : 0;\n each(body, bodyItem => {\n each(bodyItem.before, maxLineWidth);\n each(bodyItem.lines, maxLineWidth);\n each(bodyItem.after, maxLineWidth);\n });\n widthPadding = 0;\n ctx.font = footerFont.string;\n each(tooltip.footer, maxLineWidth);\n ctx.restore();\n width += padding.width;\n return {\n width,\n height\n };\n}\nfunction determineYAlign(chart, size) {\n const {\n y,\n height\n } = size;\n if (y < height / 2) {\n return 'top';\n } else if (y > chart.height - height / 2) {\n return 'bottom';\n }\n return 'center';\n}\nfunction doesNotFitWithAlign(xAlign, chart, options, size) {\n const {\n x,\n width\n } = size;\n const caret = options.caretSize + options.caretPadding;\n if (xAlign === 'left' && x + width + caret > chart.width) {\n return true;\n }\n if (xAlign === 'right' && x - width - caret < 0) {\n return true;\n }\n}\nfunction determineXAlign(chart, options, size, yAlign) {\n const {\n x,\n width\n } = size;\n const {\n width: chartWidth,\n chartArea: {\n left,\n right\n }\n } = chart;\n let xAlign = 'center';\n if (yAlign === 'center') {\n xAlign = x <= (left + right) / 2 ? 'left' : 'right';\n } else if (x <= width / 2) {\n xAlign = 'left';\n } else if (x >= chartWidth - width / 2) {\n xAlign = 'right';\n }\n if (doesNotFitWithAlign(xAlign, chart, options, size)) {\n xAlign = 'center';\n }\n return xAlign;\n}\nfunction determineAlignment(chart, options, size) {\n const yAlign = size.yAlign || options.yAlign || determineYAlign(chart, size);\n return {\n xAlign: size.xAlign || options.xAlign || determineXAlign(chart, options, size, yAlign),\n yAlign\n };\n}\nfunction alignX(size, xAlign) {\n let {\n x,\n width\n } = size;\n if (xAlign === 'right') {\n x -= width;\n } else if (xAlign === 'center') {\n x -= width / 2;\n }\n return x;\n}\nfunction alignY(size, yAlign, paddingAndSize) {\n let {\n y,\n height\n } = size;\n if (yAlign === 'top') {\n y += paddingAndSize;\n } else if (yAlign === 'bottom') {\n y -= height + paddingAndSize;\n } else {\n y -= height / 2;\n }\n return y;\n}\nfunction getBackgroundPoint(options, size, alignment, chart) {\n const {\n caretSize,\n caretPadding,\n cornerRadius\n } = options;\n const {\n xAlign,\n yAlign\n } = alignment;\n const paddingAndSize = caretSize + caretPadding;\n const {\n topLeft,\n topRight,\n bottomLeft,\n bottomRight\n } = toTRBLCorners(cornerRadius);\n let x = alignX(size, xAlign);\n const y = alignY(size, yAlign, paddingAndSize);\n if (yAlign === 'center') {\n if (xAlign === 'left') {\n x += paddingAndSize;\n } else if (xAlign === 'right') {\n x -= paddingAndSize;\n }\n } else if (xAlign === 'left') {\n x -= Math.max(topLeft, bottomLeft) + caretSize;\n } else if (xAlign === 'right') {\n x += Math.max(topRight, bottomRight) + caretSize;\n }\n return {\n x: _limitValue(x, 0, chart.width - size.width),\n y: _limitValue(y, 0, chart.height - size.height)\n };\n}\nfunction getAlignedX(tooltip, align, options) {\n const padding = toPadding(options.padding);\n return align === 'center' ? tooltip.x + tooltip.width / 2 : align === 'right' ? tooltip.x + tooltip.width - padding.right : tooltip.x + padding.left;\n}\nfunction getBeforeAfterBodyLines(callback) {\n return pushOrConcat([], splitNewlines(callback));\n}\nfunction createTooltipContext(parent, tooltip, tooltipItems) {\n return createContext(parent, {\n tooltip,\n tooltipItems,\n type: 'tooltip'\n });\n}\nfunction overrideCallbacks(callbacks, context) {\n const override = context && context.dataset && context.dataset.tooltip && context.dataset.tooltip.callbacks;\n return override ? callbacks.override(override) : callbacks;\n}\nconst defaultCallbacks = {\n beforeTitle: noop,\n title(tooltipItems) {\n if (tooltipItems.length > 0) {\n const item = tooltipItems[0];\n const labels = item.chart.data.labels;\n const labelCount = labels ? labels.length : 0;\n if (this && this.options && this.options.mode === 'dataset') {\n return item.dataset.label || '';\n } else if (item.label) {\n return item.label;\n } else if (labelCount > 0 && item.dataIndex < labelCount) {\n return labels[item.dataIndex];\n }\n }\n return '';\n },\n afterTitle: noop,\n beforeBody: noop,\n beforeLabel: noop,\n label(tooltipItem) {\n if (this && this.options && this.options.mode === 'dataset') {\n return tooltipItem.label + ': ' + tooltipItem.formattedValue || tooltipItem.formattedValue;\n }\n let label = tooltipItem.dataset.label || '';\n if (label) {\n label += ': ';\n }\n const value = tooltipItem.formattedValue;\n if (!isNullOrUndef(value)) {\n label += value;\n }\n return label;\n },\n labelColor(tooltipItem) {\n const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n const options = meta.controller.getStyle(tooltipItem.dataIndex);\n return {\n borderColor: options.borderColor,\n backgroundColor: options.backgroundColor,\n borderWidth: options.borderWidth,\n borderDash: options.borderDash,\n borderDashOffset: options.borderDashOffset,\n borderRadius: 0\n };\n },\n labelTextColor() {\n return this.options.bodyColor;\n },\n labelPointStyle(tooltipItem) {\n const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n const options = meta.controller.getStyle(tooltipItem.dataIndex);\n return {\n pointStyle: options.pointStyle,\n rotation: options.rotation\n };\n },\n afterLabel: noop,\n afterBody: noop,\n beforeFooter: noop,\n footer: noop,\n afterFooter: noop\n};\nfunction invokeCallbackWithFallback(callbacks, name, ctx, arg) {\n const result = callbacks[name].call(ctx, arg);\n if (typeof result === 'undefined') {\n return defaultCallbacks[name].call(ctx, arg);\n }\n return result;\n}\nlet Tooltip = /*#__PURE__*/(() => {\n class Tooltip extends Element {\n static positioners = positioners;\n constructor(config) {\n super();\n this.opacity = 0;\n this._active = [];\n this._eventPosition = undefined;\n this._size = undefined;\n this._cachedAnimations = undefined;\n this._tooltipItems = [];\n this.$animations = undefined;\n this.$context = undefined;\n this.chart = config.chart;\n this.options = config.options;\n this.dataPoints = undefined;\n this.title = undefined;\n this.beforeBody = undefined;\n this.body = undefined;\n this.afterBody = undefined;\n this.footer = undefined;\n this.xAlign = undefined;\n this.yAlign = undefined;\n this.x = undefined;\n this.y = undefined;\n this.height = undefined;\n this.width = undefined;\n this.caretX = undefined;\n this.caretY = undefined;\n this.labelColors = undefined;\n this.labelPointStyles = undefined;\n this.labelTextColors = undefined;\n }\n initialize(options) {\n this.options = options;\n this._cachedAnimations = undefined;\n this.$context = undefined;\n }\n _resolveAnimations() {\n const cached = this._cachedAnimations;\n if (cached) {\n return cached;\n }\n const chart = this.chart;\n const options = this.options.setContext(this.getContext());\n const opts = options.enabled && chart.options.animation && options.animations;\n const animations = new Animations(this.chart, opts);\n if (opts._cacheable) {\n this._cachedAnimations = Object.freeze(animations);\n }\n return animations;\n }\n getContext() {\n return this.$context || (this.$context = createTooltipContext(this.chart.getContext(), this, this._tooltipItems));\n }\n getTitle(context, options) {\n const {\n callbacks\n } = options;\n const beforeTitle = invokeCallbackWithFallback(callbacks, 'beforeTitle', this, context);\n const title = invokeCallbackWithFallback(callbacks, 'title', this, context);\n const afterTitle = invokeCallbackWithFallback(callbacks, 'afterTitle', this, context);\n let lines = [];\n lines = pushOrConcat(lines, splitNewlines(beforeTitle));\n lines = pushOrConcat(lines, splitNewlines(title));\n lines = pushOrConcat(lines, splitNewlines(afterTitle));\n return lines;\n }\n getBeforeBody(tooltipItems, options) {\n return getBeforeAfterBodyLines(invokeCallbackWithFallback(options.callbacks, 'beforeBody', this, tooltipItems));\n }\n getBody(tooltipItems, options) {\n const {\n callbacks\n } = options;\n const bodyItems = [];\n each(tooltipItems, context => {\n const bodyItem = {\n before: [],\n lines: [],\n after: []\n };\n const scoped = overrideCallbacks(callbacks, context);\n pushOrConcat(bodyItem.before, splitNewlines(invokeCallbackWithFallback(scoped, 'beforeLabel', this, context)));\n pushOrConcat(bodyItem.lines, invokeCallbackWithFallback(scoped, 'label', this, context));\n pushOrConcat(bodyItem.after, splitNewlines(invokeCallbackWithFallback(scoped, 'afterLabel', this, context)));\n bodyItems.push(bodyItem);\n });\n return bodyItems;\n }\n getAfterBody(tooltipItems, options) {\n return getBeforeAfterBodyLines(invokeCallbackWithFallback(options.callbacks, 'afterBody', this, tooltipItems));\n }\n getFooter(tooltipItems, options) {\n const {\n callbacks\n } = options;\n const beforeFooter = invokeCallbackWithFallback(callbacks, 'beforeFooter', this, tooltipItems);\n const footer = invokeCallbackWithFallback(callbacks, 'footer', this, tooltipItems);\n const afterFooter = invokeCallbackWithFallback(callbacks, 'afterFooter', this, tooltipItems);\n let lines = [];\n lines = pushOrConcat(lines, splitNewlines(beforeFooter));\n lines = pushOrConcat(lines, splitNewlines(footer));\n lines = pushOrConcat(lines, splitNewlines(afterFooter));\n return lines;\n }\n _createItems(options) {\n const active = this._active;\n const data = this.chart.data;\n const labelColors = [];\n const labelPointStyles = [];\n const labelTextColors = [];\n let tooltipItems = [];\n let i, len;\n for (i = 0, len = active.length; i < len; ++i) {\n tooltipItems.push(createTooltipItem(this.chart, active[i]));\n }\n if (options.filter) {\n tooltipItems = tooltipItems.filter((element, index, array) => options.filter(element, index, array, data));\n }\n if (options.itemSort) {\n tooltipItems = tooltipItems.sort((a, b) => options.itemSort(a, b, data));\n }\n each(tooltipItems, context => {\n const scoped = overrideCallbacks(options.callbacks, context);\n labelColors.push(invokeCallbackWithFallback(scoped, 'labelColor', this, context));\n labelPointStyles.push(invokeCallbackWithFallback(scoped, 'labelPointStyle', this, context));\n labelTextColors.push(invokeCallbackWithFallback(scoped, 'labelTextColor', this, context));\n });\n this.labelColors = labelColors;\n this.labelPointStyles = labelPointStyles;\n this.labelTextColors = labelTextColors;\n this.dataPoints = tooltipItems;\n return tooltipItems;\n }\n update(changed, replay) {\n const options = this.options.setContext(this.getContext());\n const active = this._active;\n let properties;\n let tooltipItems = [];\n if (!active.length) {\n if (this.opacity !== 0) {\n properties = {\n opacity: 0\n };\n }\n } else {\n const position = positioners[options.position].call(this, active, this._eventPosition);\n tooltipItems = this._createItems(options);\n this.title = this.getTitle(tooltipItems, options);\n this.beforeBody = this.getBeforeBody(tooltipItems, options);\n this.body = this.getBody(tooltipItems, options);\n this.afterBody = this.getAfterBody(tooltipItems, options);\n this.footer = this.getFooter(tooltipItems, options);\n const size = this._size = getTooltipSize(this, options);\n const positionAndSize = Object.assign({}, position, size);\n const alignment = determineAlignment(this.chart, options, positionAndSize);\n const backgroundPoint = getBackgroundPoint(options, positionAndSize, alignment, this.chart);\n this.xAlign = alignment.xAlign;\n this.yAlign = alignment.yAlign;\n properties = {\n opacity: 1,\n x: backgroundPoint.x,\n y: backgroundPoint.y,\n width: size.width,\n height: size.height,\n caretX: position.x,\n caretY: position.y\n };\n }\n this._tooltipItems = tooltipItems;\n this.$context = undefined;\n if (properties) {\n this._resolveAnimations().update(this, properties);\n }\n if (changed && options.external) {\n options.external.call(this, {\n chart: this.chart,\n tooltip: this,\n replay\n });\n }\n }\n drawCaret(tooltipPoint, ctx, size, options) {\n const caretPosition = this.getCaretPosition(tooltipPoint, size, options);\n ctx.lineTo(caretPosition.x1, caretPosition.y1);\n ctx.lineTo(caretPosition.x2, caretPosition.y2);\n ctx.lineTo(caretPosition.x3, caretPosition.y3);\n }\n getCaretPosition(tooltipPoint, size, options) {\n const {\n xAlign,\n yAlign\n } = this;\n const {\n caretSize,\n cornerRadius\n } = options;\n const {\n topLeft,\n topRight,\n bottomLeft,\n bottomRight\n } = toTRBLCorners(cornerRadius);\n const {\n x: ptX,\n y: ptY\n } = tooltipPoint;\n const {\n width,\n height\n } = size;\n let x1, x2, x3, y1, y2, y3;\n if (yAlign === 'center') {\n y2 = ptY + height / 2;\n if (xAlign === 'left') {\n x1 = ptX;\n x2 = x1 - caretSize;\n y1 = y2 + caretSize;\n y3 = y2 - caretSize;\n } else {\n x1 = ptX + width;\n x2 = x1 + caretSize;\n y1 = y2 - caretSize;\n y3 = y2 + caretSize;\n }\n x3 = x1;\n } else {\n if (xAlign === 'left') {\n x2 = ptX + Math.max(topLeft, bottomLeft) + caretSize;\n } else if (xAlign === 'right') {\n x2 = ptX + width - Math.max(topRight, bottomRight) - caretSize;\n } else {\n x2 = this.caretX;\n }\n if (yAlign === 'top') {\n y1 = ptY;\n y2 = y1 - caretSize;\n x1 = x2 - caretSize;\n x3 = x2 + caretSize;\n } else {\n y1 = ptY + height;\n y2 = y1 + caretSize;\n x1 = x2 + caretSize;\n x3 = x2 - caretSize;\n }\n y3 = y1;\n }\n return {\n x1,\n x2,\n x3,\n y1,\n y2,\n y3\n };\n }\n drawTitle(pt, ctx, options) {\n const title = this.title;\n const length = title.length;\n let titleFont, titleSpacing, i;\n if (length) {\n const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n pt.x = getAlignedX(this, options.titleAlign, options);\n ctx.textAlign = rtlHelper.textAlign(options.titleAlign);\n ctx.textBaseline = 'middle';\n titleFont = toFont(options.titleFont);\n titleSpacing = options.titleSpacing;\n ctx.fillStyle = options.titleColor;\n ctx.font = titleFont.string;\n for (i = 0; i < length; ++i) {\n ctx.fillText(title[i], rtlHelper.x(pt.x), pt.y + titleFont.lineHeight / 2);\n pt.y += titleFont.lineHeight + titleSpacing;\n if (i + 1 === length) {\n pt.y += options.titleMarginBottom - titleSpacing;\n }\n }\n }\n }\n _drawColorBox(ctx, pt, i, rtlHelper, options) {\n const labelColor = this.labelColors[i];\n const labelPointStyle = this.labelPointStyles[i];\n const {\n boxHeight,\n boxWidth\n } = options;\n const bodyFont = toFont(options.bodyFont);\n const colorX = getAlignedX(this, 'left', options);\n const rtlColorX = rtlHelper.x(colorX);\n const yOffSet = boxHeight < bodyFont.lineHeight ? (bodyFont.lineHeight - boxHeight) / 2 : 0;\n const colorY = pt.y + yOffSet;\n if (options.usePointStyle) {\n const drawOptions = {\n radius: Math.min(boxWidth, boxHeight) / 2,\n pointStyle: labelPointStyle.pointStyle,\n rotation: labelPointStyle.rotation,\n borderWidth: 1\n };\n const centerX = rtlHelper.leftForLtr(rtlColorX, boxWidth) + boxWidth / 2;\n const centerY = colorY + boxHeight / 2;\n ctx.strokeStyle = options.multiKeyBackground;\n ctx.fillStyle = options.multiKeyBackground;\n drawPoint(ctx, drawOptions, centerX, centerY);\n ctx.strokeStyle = labelColor.borderColor;\n ctx.fillStyle = labelColor.backgroundColor;\n drawPoint(ctx, drawOptions, centerX, centerY);\n } else {\n ctx.lineWidth = isObject(labelColor.borderWidth) ? Math.max(...Object.values(labelColor.borderWidth)) : labelColor.borderWidth || 1;\n ctx.strokeStyle = labelColor.borderColor;\n ctx.setLineDash(labelColor.borderDash || []);\n ctx.lineDashOffset = labelColor.borderDashOffset || 0;\n const outerX = rtlHelper.leftForLtr(rtlColorX, boxWidth);\n const innerX = rtlHelper.leftForLtr(rtlHelper.xPlus(rtlColorX, 1), boxWidth - 2);\n const borderRadius = toTRBLCorners(labelColor.borderRadius);\n if (Object.values(borderRadius).some(v => v !== 0)) {\n ctx.beginPath();\n ctx.fillStyle = options.multiKeyBackground;\n addRoundedRectPath(ctx, {\n x: outerX,\n y: colorY,\n w: boxWidth,\n h: boxHeight,\n radius: borderRadius\n });\n ctx.fill();\n ctx.stroke();\n ctx.fillStyle = labelColor.backgroundColor;\n ctx.beginPath();\n addRoundedRectPath(ctx, {\n x: innerX,\n y: colorY + 1,\n w: boxWidth - 2,\n h: boxHeight - 2,\n radius: borderRadius\n });\n ctx.fill();\n } else {\n ctx.fillStyle = options.multiKeyBackground;\n ctx.fillRect(outerX, colorY, boxWidth, boxHeight);\n ctx.strokeRect(outerX, colorY, boxWidth, boxHeight);\n ctx.fillStyle = labelColor.backgroundColor;\n ctx.fillRect(innerX, colorY + 1, boxWidth - 2, boxHeight - 2);\n }\n }\n ctx.fillStyle = this.labelTextColors[i];\n }\n drawBody(pt, ctx, options) {\n const {\n body\n } = this;\n const {\n bodySpacing,\n bodyAlign,\n displayColors,\n boxHeight,\n boxWidth,\n boxPadding\n } = options;\n const bodyFont = toFont(options.bodyFont);\n let bodyLineHeight = bodyFont.lineHeight;\n let xLinePadding = 0;\n const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n const fillLineOfText = function (line) {\n ctx.fillText(line, rtlHelper.x(pt.x + xLinePadding), pt.y + bodyLineHeight / 2);\n pt.y += bodyLineHeight + bodySpacing;\n };\n const bodyAlignForCalculation = rtlHelper.textAlign(bodyAlign);\n let bodyItem, textColor, lines, i, j, ilen, jlen;\n ctx.textAlign = bodyAlign;\n ctx.textBaseline = 'middle';\n ctx.font = bodyFont.string;\n pt.x = getAlignedX(this, bodyAlignForCalculation, options);\n ctx.fillStyle = options.bodyColor;\n each(this.beforeBody, fillLineOfText);\n xLinePadding = displayColors && bodyAlignForCalculation !== 'right' ? bodyAlign === 'center' ? boxWidth / 2 + boxPadding : boxWidth + 2 + boxPadding : 0;\n for (i = 0, ilen = body.length; i < ilen; ++i) {\n bodyItem = body[i];\n textColor = this.labelTextColors[i];\n ctx.fillStyle = textColor;\n each(bodyItem.before, fillLineOfText);\n lines = bodyItem.lines;\n if (displayColors && lines.length) {\n this._drawColorBox(ctx, pt, i, rtlHelper, options);\n bodyLineHeight = Math.max(bodyFont.lineHeight, boxHeight);\n }\n for (j = 0, jlen = lines.length; j < jlen; ++j) {\n fillLineOfText(lines[j]);\n bodyLineHeight = bodyFont.lineHeight;\n }\n each(bodyItem.after, fillLineOfText);\n }\n xLinePadding = 0;\n bodyLineHeight = bodyFont.lineHeight;\n each(this.afterBody, fillLineOfText);\n pt.y -= bodySpacing;\n }\n drawFooter(pt, ctx, options) {\n const footer = this.footer;\n const length = footer.length;\n let footerFont, i;\n if (length) {\n const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n pt.x = getAlignedX(this, options.footerAlign, options);\n pt.y += options.footerMarginTop;\n ctx.textAlign = rtlHelper.textAlign(options.footerAlign);\n ctx.textBaseline = 'middle';\n footerFont = toFont(options.footerFont);\n ctx.fillStyle = options.footerColor;\n ctx.font = footerFont.string;\n for (i = 0; i < length; ++i) {\n ctx.fillText(footer[i], rtlHelper.x(pt.x), pt.y + footerFont.lineHeight / 2);\n pt.y += footerFont.lineHeight + options.footerSpacing;\n }\n }\n }\n drawBackground(pt, ctx, tooltipSize, options) {\n const {\n xAlign,\n yAlign\n } = this;\n const {\n x,\n y\n } = pt;\n const {\n width,\n height\n } = tooltipSize;\n const {\n topLeft,\n topRight,\n bottomLeft,\n bottomRight\n } = toTRBLCorners(options.cornerRadius);\n ctx.fillStyle = options.backgroundColor;\n ctx.strokeStyle = options.borderColor;\n ctx.lineWidth = options.borderWidth;\n ctx.beginPath();\n ctx.moveTo(x + topLeft, y);\n if (yAlign === 'top') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x + width - topRight, y);\n ctx.quadraticCurveTo(x + width, y, x + width, y + topRight);\n if (yAlign === 'center' && xAlign === 'right') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x + width, y + height - bottomRight);\n ctx.quadraticCurveTo(x + width, y + height, x + width - bottomRight, y + height);\n if (yAlign === 'bottom') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x + bottomLeft, y + height);\n ctx.quadraticCurveTo(x, y + height, x, y + height - bottomLeft);\n if (yAlign === 'center' && xAlign === 'left') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x, y + topLeft);\n ctx.quadraticCurveTo(x, y, x + topLeft, y);\n ctx.closePath();\n ctx.fill();\n if (options.borderWidth > 0) {\n ctx.stroke();\n }\n }\n _updateAnimationTarget(options) {\n const chart = this.chart;\n const anims = this.$animations;\n const animX = anims && anims.x;\n const animY = anims && anims.y;\n if (animX || animY) {\n const position = positioners[options.position].call(this, this._active, this._eventPosition);\n if (!position) {\n return;\n }\n const size = this._size = getTooltipSize(this, options);\n const positionAndSize = Object.assign({}, position, this._size);\n const alignment = determineAlignment(chart, options, positionAndSize);\n const point = getBackgroundPoint(options, positionAndSize, alignment, chart);\n if (animX._to !== point.x || animY._to !== point.y) {\n this.xAlign = alignment.xAlign;\n this.yAlign = alignment.yAlign;\n this.width = size.width;\n this.height = size.height;\n this.caretX = position.x;\n this.caretY = position.y;\n this._resolveAnimations().update(this, point);\n }\n }\n }\n _willRender() {\n return !!this.opacity;\n }\n draw(ctx) {\n const options = this.options.setContext(this.getContext());\n let opacity = this.opacity;\n if (!opacity) {\n return;\n }\n this._updateAnimationTarget(options);\n const tooltipSize = {\n width: this.width,\n height: this.height\n };\n const pt = {\n x: this.x,\n y: this.y\n };\n opacity = Math.abs(opacity) < 1e-3 ? 0 : opacity;\n const padding = toPadding(options.padding);\n const hasTooltipContent = this.title.length || this.beforeBody.length || this.body.length || this.afterBody.length || this.footer.length;\n if (options.enabled && hasTooltipContent) {\n ctx.save();\n ctx.globalAlpha = opacity;\n this.drawBackground(pt, ctx, tooltipSize, options);\n overrideTextDirection(ctx, options.textDirection);\n pt.y += padding.top;\n this.drawTitle(pt, ctx, options);\n this.drawBody(pt, ctx, options);\n this.drawFooter(pt, ctx, options);\n restoreTextDirection(ctx, options.textDirection);\n ctx.restore();\n }\n }\n getActiveElements() {\n return this._active || [];\n }\n setActiveElements(activeElements, eventPosition) {\n const lastActive = this._active;\n const active = activeElements.map(({\n datasetIndex,\n index\n }) => {\n const meta = this.chart.getDatasetMeta(datasetIndex);\n if (!meta) {\n throw new Error('Cannot find a dataset at index ' + datasetIndex);\n }\n return {\n datasetIndex,\n element: meta.data[index],\n index\n };\n });\n const changed = !_elementsEqual(lastActive, active);\n const positionChanged = this._positionChanged(active, eventPosition);\n if (changed || positionChanged) {\n this._active = active;\n this._eventPosition = eventPosition;\n this._ignoreReplayEvents = true;\n this.update(true);\n }\n }\n handleEvent(e, replay, inChartArea = true) {\n if (replay && this._ignoreReplayEvents) {\n return false;\n }\n this._ignoreReplayEvents = false;\n const options = this.options;\n const lastActive = this._active || [];\n const active = this._getActiveElements(e, lastActive, replay, inChartArea);\n const positionChanged = this._positionChanged(active, e);\n const changed = replay || !_elementsEqual(active, lastActive) || positionChanged;\n if (changed) {\n this._active = active;\n if (options.enabled || options.external) {\n this._eventPosition = {\n x: e.x,\n y: e.y\n };\n this.update(true, replay);\n }\n }\n return changed;\n }\n _getActiveElements(e, lastActive, replay, inChartArea) {\n const options = this.options;\n if (e.type === 'mouseout') {\n return [];\n }\n if (!inChartArea) {\n return lastActive.filter(i => this.chart.data.datasets[i.datasetIndex] && this.chart.getDatasetMeta(i.datasetIndex).controller.getParsed(i.index) !== undefined);\n }\n const active = this.chart.getElementsAtEventForMode(e, options.mode, options, replay);\n if (options.reverse) {\n active.reverse();\n }\n return active;\n }\n _positionChanged(active, e) {\n const {\n caretX,\n caretY,\n options\n } = this;\n const position = positioners[options.position].call(this, active, e);\n return position !== false && (caretX !== position.x || caretY !== position.y);\n }\n }\n return Tooltip;\n})();\nvar plugin_tooltip = {\n id: 'tooltip',\n _element: Tooltip,\n positioners,\n afterInit(chart, _args, options) {\n if (options) {\n chart.tooltip = new Tooltip({\n chart,\n options\n });\n }\n },\n beforeUpdate(chart, _args, options) {\n if (chart.tooltip) {\n chart.tooltip.initialize(options);\n }\n },\n reset(chart, _args, options) {\n if (chart.tooltip) {\n chart.tooltip.initialize(options);\n }\n },\n afterDraw(chart) {\n const tooltip = chart.tooltip;\n if (tooltip && tooltip._willRender()) {\n const args = {\n tooltip\n };\n if (chart.notifyPlugins('beforeTooltipDraw', {\n ...args,\n cancelable: true\n }) === false) {\n return;\n }\n tooltip.draw(chart.ctx);\n chart.notifyPlugins('afterTooltipDraw', args);\n }\n },\n afterEvent(chart, args) {\n if (chart.tooltip) {\n const useFinalPosition = args.replay;\n if (chart.tooltip.handleEvent(args.event, useFinalPosition, args.inChartArea)) {\n args.changed = true;\n }\n }\n },\n defaults: {\n enabled: true,\n external: null,\n position: 'average',\n backgroundColor: 'rgba(0,0,0,0.8)',\n titleColor: '#fff',\n titleFont: {\n weight: 'bold'\n },\n titleSpacing: 2,\n titleMarginBottom: 6,\n titleAlign: 'left',\n bodyColor: '#fff',\n bodySpacing: 2,\n bodyFont: {},\n bodyAlign: 'left',\n footerColor: '#fff',\n footerSpacing: 2,\n footerMarginTop: 6,\n footerFont: {\n weight: 'bold'\n },\n footerAlign: 'left',\n padding: 6,\n caretPadding: 2,\n caretSize: 5,\n cornerRadius: 6,\n boxHeight: (ctx, opts) => opts.bodyFont.size,\n boxWidth: (ctx, opts) => opts.bodyFont.size,\n multiKeyBackground: '#fff',\n displayColors: true,\n boxPadding: 0,\n borderColor: 'rgba(0,0,0,0)',\n borderWidth: 0,\n animation: {\n duration: 400,\n easing: 'easeOutQuart'\n },\n animations: {\n numbers: {\n type: 'number',\n properties: ['x', 'y', 'width', 'height', 'caretX', 'caretY']\n },\n opacity: {\n easing: 'linear',\n duration: 200\n }\n },\n callbacks: defaultCallbacks\n },\n defaultRoutes: {\n bodyFont: 'font',\n footerFont: 'font',\n titleFont: 'font'\n },\n descriptors: {\n _scriptable: name => name !== 'filter' && name !== 'itemSort' && name !== 'external',\n _indexable: false,\n callbacks: {\n _scriptable: false,\n _indexable: false\n },\n animation: {\n _fallback: false\n },\n animations: {\n _fallback: 'animation'\n }\n },\n additionalOptionScopes: ['interaction']\n};\nvar plugins = /*#__PURE__*/Object.freeze({\n __proto__: null,\n Colors: plugin_colors,\n Decimation: plugin_decimation,\n Filler: index,\n Legend: plugin_legend,\n SubTitle: plugin_subtitle,\n Title: plugin_title,\n Tooltip: plugin_tooltip\n});\nconst addIfString = (labels, raw, index, addedLabels) => {\n if (typeof raw === 'string') {\n index = labels.push(raw) - 1;\n addedLabels.unshift({\n index,\n label: raw\n });\n } else if (isNaN(raw)) {\n index = null;\n }\n return index;\n};\nfunction findOrAddLabel(labels, raw, index, addedLabels) {\n const first = labels.indexOf(raw);\n if (first === -1) {\n return addIfString(labels, raw, index, addedLabels);\n }\n const last = labels.lastIndexOf(raw);\n return first !== last ? index : first;\n}\nconst validIndex = (index, max) => index === null ? null : _limitValue(Math.round(index), 0, max);\nfunction _getLabelForValue(value) {\n const labels = this.getLabels();\n if (value >= 0 && value < labels.length) {\n return labels[value];\n }\n return value;\n}\nlet CategoryScale = /*#__PURE__*/(() => {\n class CategoryScale extends Scale {\n static id = 'category';\n static defaults = {\n ticks: {\n callback: _getLabelForValue\n }\n };\n constructor(cfg) {\n super(cfg);\n this._startValue = undefined;\n this._valueRange = 0;\n this._addedLabels = [];\n }\n init(scaleOptions) {\n const added = this._addedLabels;\n if (added.length) {\n const labels = this.getLabels();\n for (const {\n index,\n label\n } of added) {\n if (labels[index] === label) {\n labels.splice(index, 1);\n }\n }\n this._addedLabels = [];\n }\n super.init(scaleOptions);\n }\n parse(raw, index) {\n if (isNullOrUndef(raw)) {\n return null;\n }\n const labels = this.getLabels();\n index = isFinite(index) && labels[index] === raw ? index : findOrAddLabel(labels, raw, valueOrDefault(index, raw), this._addedLabels);\n return validIndex(index, labels.length - 1);\n }\n determineDataLimits() {\n const {\n minDefined,\n maxDefined\n } = this.getUserBounds();\n let {\n min,\n max\n } = this.getMinMax(true);\n if (this.options.bounds === 'ticks') {\n if (!minDefined) {\n min = 0;\n }\n if (!maxDefined) {\n max = this.getLabels().length - 1;\n }\n }\n this.min = min;\n this.max = max;\n }\n buildTicks() {\n const min = this.min;\n const max = this.max;\n const offset = this.options.offset;\n const ticks = [];\n let labels = this.getLabels();\n labels = min === 0 && max === labels.length - 1 ? labels : labels.slice(min, max + 1);\n this._valueRange = Math.max(labels.length - (offset ? 0 : 1), 1);\n this._startValue = this.min - (offset ? 0.5 : 0);\n for (let value = min; value <= max; value++) {\n ticks.push({\n value\n });\n }\n return ticks;\n }\n getLabelForValue(value) {\n return _getLabelForValue.call(this, value);\n }\n configure() {\n super.configure();\n if (!this.isHorizontal()) {\n this._reversePixels = !this._reversePixels;\n }\n }\n getPixelForValue(value) {\n if (typeof value !== 'number') {\n value = this.parse(value);\n }\n return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n }\n getPixelForTick(index) {\n const ticks = this.ticks;\n if (index < 0 || index > ticks.length - 1) {\n return null;\n }\n return this.getPixelForValue(ticks[index].value);\n }\n getValueForPixel(pixel) {\n return Math.round(this._startValue + this.getDecimalForPixel(pixel) * this._valueRange);\n }\n getBasePixel() {\n return this.bottom;\n }\n }\n return CategoryScale;\n})();\nfunction generateTicks$1(generationOptions, dataRange) {\n const ticks = [];\n const MIN_SPACING = 1e-14;\n const {\n bounds,\n step,\n min,\n max,\n precision,\n count,\n maxTicks,\n maxDigits,\n includeBounds\n } = generationOptions;\n const unit = step || 1;\n const maxSpaces = maxTicks - 1;\n const {\n min: rmin,\n max: rmax\n } = dataRange;\n const minDefined = !isNullOrUndef(min);\n const maxDefined = !isNullOrUndef(max);\n const countDefined = !isNullOrUndef(count);\n const minSpacing = (rmax - rmin) / (maxDigits + 1);\n let spacing = niceNum((rmax - rmin) / maxSpaces / unit) * unit;\n let factor, niceMin, niceMax, numSpaces;\n if (spacing < MIN_SPACING && !minDefined && !maxDefined) {\n return [{\n value: rmin\n }, {\n value: rmax\n }];\n }\n numSpaces = Math.ceil(rmax / spacing) - Math.floor(rmin / spacing);\n if (numSpaces > maxSpaces) {\n spacing = niceNum(numSpaces * spacing / maxSpaces / unit) * unit;\n }\n if (!isNullOrUndef(precision)) {\n factor = Math.pow(10, precision);\n spacing = Math.ceil(spacing * factor) / factor;\n }\n if (bounds === 'ticks') {\n niceMin = Math.floor(rmin / spacing) * spacing;\n niceMax = Math.ceil(rmax / spacing) * spacing;\n } else {\n niceMin = rmin;\n niceMax = rmax;\n }\n if (minDefined && maxDefined && step && almostWhole((max - min) / step, spacing / 1000)) {\n numSpaces = Math.round(Math.min((max - min) / spacing, maxTicks));\n spacing = (max - min) / numSpaces;\n niceMin = min;\n niceMax = max;\n } else if (countDefined) {\n niceMin = minDefined ? min : niceMin;\n niceMax = maxDefined ? max : niceMax;\n numSpaces = count - 1;\n spacing = (niceMax - niceMin) / numSpaces;\n } else {\n numSpaces = (niceMax - niceMin) / spacing;\n if (almostEquals(numSpaces, Math.round(numSpaces), spacing / 1000)) {\n numSpaces = Math.round(numSpaces);\n } else {\n numSpaces = Math.ceil(numSpaces);\n }\n }\n const decimalPlaces = Math.max(_decimalPlaces(spacing), _decimalPlaces(niceMin));\n factor = Math.pow(10, isNullOrUndef(precision) ? decimalPlaces : precision);\n niceMin = Math.round(niceMin * factor) / factor;\n niceMax = Math.round(niceMax * factor) / factor;\n let j = 0;\n if (minDefined) {\n if (includeBounds && niceMin !== min) {\n ticks.push({\n value: min\n });\n if (niceMin < min) {\n j++;\n }\n if (almostEquals(Math.round((niceMin + j * spacing) * factor) / factor, min, relativeLabelSize(min, minSpacing, generationOptions))) {\n j++;\n }\n } else if (niceMin < min) {\n j++;\n }\n }\n for (; j < numSpaces; ++j) {\n const tickValue = Math.round((niceMin + j * spacing) * factor) / factor;\n if (maxDefined && tickValue > max) {\n break;\n }\n ticks.push({\n value: tickValue\n });\n }\n if (maxDefined && includeBounds && niceMax !== max) {\n if (ticks.length && almostEquals(ticks[ticks.length - 1].value, max, relativeLabelSize(max, minSpacing, generationOptions))) {\n ticks[ticks.length - 1].value = max;\n } else {\n ticks.push({\n value: max\n });\n }\n } else if (!maxDefined || niceMax === max) {\n ticks.push({\n value: niceMax\n });\n }\n return ticks;\n}\nfunction relativeLabelSize(value, minSpacing, {\n horizontal,\n minRotation\n}) {\n const rad = toRadians(minRotation);\n const ratio = (horizontal ? Math.sin(rad) : Math.cos(rad)) || 0.001;\n const length = 0.75 * minSpacing * ('' + value).length;\n return Math.min(minSpacing / ratio, length);\n}\nclass LinearScaleBase extends Scale {\n constructor(cfg) {\n super(cfg);\n this.start = undefined;\n this.end = undefined;\n this._startValue = undefined;\n this._endValue = undefined;\n this._valueRange = 0;\n }\n parse(raw, index) {\n if (isNullOrUndef(raw)) {\n return null;\n }\n if ((typeof raw === 'number' || raw instanceof Number) && !isFinite(+raw)) {\n return null;\n }\n return +raw;\n }\n handleTickRangeOptions() {\n const {\n beginAtZero\n } = this.options;\n const {\n minDefined,\n maxDefined\n } = this.getUserBounds();\n let {\n min,\n max\n } = this;\n const setMin = v => min = minDefined ? min : v;\n const setMax = v => max = maxDefined ? max : v;\n if (beginAtZero) {\n const minSign = sign(min);\n const maxSign = sign(max);\n if (minSign < 0 && maxSign < 0) {\n setMax(0);\n } else if (minSign > 0 && maxSign > 0) {\n setMin(0);\n }\n }\n if (min === max) {\n let offset = max === 0 ? 1 : Math.abs(max * 0.05);\n setMax(max + offset);\n if (!beginAtZero) {\n setMin(min - offset);\n }\n }\n this.min = min;\n this.max = max;\n }\n getTickLimit() {\n const tickOpts = this.options.ticks;\n let {\n maxTicksLimit,\n stepSize\n } = tickOpts;\n let maxTicks;\n if (stepSize) {\n maxTicks = Math.ceil(this.max / stepSize) - Math.floor(this.min / stepSize) + 1;\n if (maxTicks > 1000) {\n console.warn(`scales.${this.id}.ticks.stepSize: ${stepSize} would result generating up to ${maxTicks} ticks. Limiting to 1000.`);\n maxTicks = 1000;\n }\n } else {\n maxTicks = this.computeTickLimit();\n maxTicksLimit = maxTicksLimit || 11;\n }\n if (maxTicksLimit) {\n maxTicks = Math.min(maxTicksLimit, maxTicks);\n }\n return maxTicks;\n }\n computeTickLimit() {\n return Number.POSITIVE_INFINITY;\n }\n buildTicks() {\n const opts = this.options;\n const tickOpts = opts.ticks;\n let maxTicks = this.getTickLimit();\n maxTicks = Math.max(2, maxTicks);\n const numericGeneratorOptions = {\n maxTicks,\n bounds: opts.bounds,\n min: opts.min,\n max: opts.max,\n precision: tickOpts.precision,\n step: tickOpts.stepSize,\n count: tickOpts.count,\n maxDigits: this._maxDigits(),\n horizontal: this.isHorizontal(),\n minRotation: tickOpts.minRotation || 0,\n includeBounds: tickOpts.includeBounds !== false\n };\n const dataRange = this._range || this;\n const ticks = generateTicks$1(numericGeneratorOptions, dataRange);\n if (opts.bounds === 'ticks') {\n _setMinAndMaxByKey(ticks, this, 'value');\n }\n if (opts.reverse) {\n ticks.reverse();\n this.start = this.max;\n this.end = this.min;\n } else {\n this.start = this.min;\n this.end = this.max;\n }\n return ticks;\n }\n configure() {\n const ticks = this.ticks;\n let start = this.min;\n let end = this.max;\n super.configure();\n if (this.options.offset && ticks.length) {\n const offset = (end - start) / Math.max(ticks.length - 1, 1) / 2;\n start -= offset;\n end += offset;\n }\n this._startValue = start;\n this._endValue = end;\n this._valueRange = end - start;\n }\n getLabelForValue(value) {\n return formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n }\n}\nclass LinearScale extends LinearScaleBase {\n static id = 'linear';\n static defaults = {\n ticks: {\n callback: Ticks.formatters.numeric\n }\n };\n determineDataLimits() {\n const {\n min,\n max\n } = this.getMinMax(true);\n this.min = isNumberFinite(min) ? min : 0;\n this.max = isNumberFinite(max) ? max : 1;\n this.handleTickRangeOptions();\n }\n computeTickLimit() {\n const horizontal = this.isHorizontal();\n const length = horizontal ? this.width : this.height;\n const minRotation = toRadians(this.options.ticks.minRotation);\n const ratio = (horizontal ? Math.sin(minRotation) : Math.cos(minRotation)) || 0.001;\n const tickFont = this._resolveTickFontOptions(0);\n return Math.ceil(length / Math.min(40, tickFont.lineHeight / ratio));\n }\n getPixelForValue(value) {\n return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n }\n getValueForPixel(pixel) {\n return this._startValue + this.getDecimalForPixel(pixel) * this._valueRange;\n }\n}\nconst log10Floor = v => Math.floor(log10(v));\nconst changeExponent = (v, m) => Math.pow(10, log10Floor(v) + m);\nfunction isMajor(tickVal) {\n const remain = tickVal / Math.pow(10, log10Floor(tickVal));\n return remain === 1;\n}\nfunction steps(min, max, rangeExp) {\n const rangeStep = Math.pow(10, rangeExp);\n const start = Math.floor(min / rangeStep);\n const end = Math.ceil(max / rangeStep);\n return end - start;\n}\nfunction startExp(min, max) {\n const range = max - min;\n let rangeExp = log10Floor(range);\n while (steps(min, max, rangeExp) > 10) {\n rangeExp++;\n }\n while (steps(min, max, rangeExp) < 10) {\n rangeExp--;\n }\n return Math.min(rangeExp, log10Floor(min));\n}\nfunction generateTicks(generationOptions, {\n min,\n max\n}) {\n min = finiteOrDefault(generationOptions.min, min);\n const ticks = [];\n const minExp = log10Floor(min);\n let exp = startExp(min, max);\n let precision = exp < 0 ? Math.pow(10, Math.abs(exp)) : 1;\n const stepSize = Math.pow(10, exp);\n const base = minExp > exp ? Math.pow(10, minExp) : 0;\n const start = Math.round((min - base) * precision) / precision;\n const offset = Math.floor((min - base) / stepSize / 10) * stepSize * 10;\n let significand = Math.floor((start - offset) / Math.pow(10, exp));\n let value = finiteOrDefault(generationOptions.min, Math.round((base + offset + significand * Math.pow(10, exp)) * precision) / precision);\n while (value < max) {\n ticks.push({\n value,\n major: isMajor(value),\n significand\n });\n if (significand >= 10) {\n significand = significand < 15 ? 15 : 20;\n } else {\n significand++;\n }\n if (significand >= 20) {\n exp++;\n significand = 2;\n precision = exp >= 0 ? 1 : precision;\n }\n value = Math.round((base + offset + significand * Math.pow(10, exp)) * precision) / precision;\n }\n const lastTick = finiteOrDefault(generationOptions.max, value);\n ticks.push({\n value: lastTick,\n major: isMajor(lastTick),\n significand\n });\n return ticks;\n}\nclass LogarithmicScale extends Scale {\n static id = 'logarithmic';\n static defaults = {\n ticks: {\n callback: Ticks.formatters.logarithmic,\n major: {\n enabled: true\n }\n }\n };\n constructor(cfg) {\n super(cfg);\n this.start = undefined;\n this.end = undefined;\n this._startValue = undefined;\n this._valueRange = 0;\n }\n parse(raw, index) {\n const value = LinearScaleBase.prototype.parse.apply(this, [raw, index]);\n if (value === 0) {\n this._zero = true;\n return undefined;\n }\n return isNumberFinite(value) && value > 0 ? value : null;\n }\n determineDataLimits() {\n const {\n min,\n max\n } = this.getMinMax(true);\n this.min = isNumberFinite(min) ? Math.max(0, min) : null;\n this.max = isNumberFinite(max) ? Math.max(0, max) : null;\n if (this.options.beginAtZero) {\n this._zero = true;\n }\n if (this._zero && this.min !== this._suggestedMin && !isNumberFinite(this._userMin)) {\n this.min = min === changeExponent(this.min, 0) ? changeExponent(this.min, -1) : changeExponent(this.min, 0);\n }\n this.handleTickRangeOptions();\n }\n handleTickRangeOptions() {\n const {\n minDefined,\n maxDefined\n } = this.getUserBounds();\n let min = this.min;\n let max = this.max;\n const setMin = v => min = minDefined ? min : v;\n const setMax = v => max = maxDefined ? max : v;\n if (min === max) {\n if (min <= 0) {\n setMin(1);\n setMax(10);\n } else {\n setMin(changeExponent(min, -1));\n setMax(changeExponent(max, +1));\n }\n }\n if (min <= 0) {\n setMin(changeExponent(max, -1));\n }\n if (max <= 0) {\n setMax(changeExponent(min, +1));\n }\n this.min = min;\n this.max = max;\n }\n buildTicks() {\n const opts = this.options;\n const generationOptions = {\n min: this._userMin,\n max: this._userMax\n };\n const ticks = generateTicks(generationOptions, this);\n if (opts.bounds === 'ticks') {\n _setMinAndMaxByKey(ticks, this, 'value');\n }\n if (opts.reverse) {\n ticks.reverse();\n this.start = this.max;\n this.end = this.min;\n } else {\n this.start = this.min;\n this.end = this.max;\n }\n return ticks;\n }\n getLabelForValue(value) {\n return value === undefined ? '0' : formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n }\n configure() {\n const start = this.min;\n super.configure();\n this._startValue = log10(start);\n this._valueRange = log10(this.max) - log10(start);\n }\n getPixelForValue(value) {\n if (value === undefined || value === 0) {\n value = this.min;\n }\n if (value === null || isNaN(value)) {\n return NaN;\n }\n return this.getPixelForDecimal(value === this.min ? 0 : (log10(value) - this._startValue) / this._valueRange);\n }\n getValueForPixel(pixel) {\n const decimal = this.getDecimalForPixel(pixel);\n return Math.pow(10, this._startValue + decimal * this._valueRange);\n }\n}\nfunction getTickBackdropHeight(opts) {\n const tickOpts = opts.ticks;\n if (tickOpts.display && opts.display) {\n const padding = toPadding(tickOpts.backdropPadding);\n return valueOrDefault(tickOpts.font && tickOpts.font.size, defaults.font.size) + padding.height;\n }\n return 0;\n}\nfunction measureLabelSize(ctx, font, label) {\n label = isArray(label) ? label : [label];\n return {\n w: _longestText(ctx, font.string, label),\n h: label.length * font.lineHeight\n };\n}\nfunction determineLimits(angle, pos, size, min, max) {\n if (angle === min || angle === max) {\n return {\n start: pos - size / 2,\n end: pos + size / 2\n };\n } else if (angle < min || angle > max) {\n return {\n start: pos - size,\n end: pos\n };\n }\n return {\n start: pos,\n end: pos + size\n };\n}\nfunction fitWithPointLabels(scale) {\n const orig = {\n l: scale.left + scale._padding.left,\n r: scale.right - scale._padding.right,\n t: scale.top + scale._padding.top,\n b: scale.bottom - scale._padding.bottom\n };\n const limits = Object.assign({}, orig);\n const labelSizes = [];\n const padding = [];\n const valueCount = scale._pointLabels.length;\n const pointLabelOpts = scale.options.pointLabels;\n const additionalAngle = pointLabelOpts.centerPointLabels ? PI / valueCount : 0;\n for (let i = 0; i < valueCount; i++) {\n const opts = pointLabelOpts.setContext(scale.getPointLabelContext(i));\n padding[i] = opts.padding;\n const pointPosition = scale.getPointPosition(i, scale.drawingArea + padding[i], additionalAngle);\n const plFont = toFont(opts.font);\n const textSize = measureLabelSize(scale.ctx, plFont, scale._pointLabels[i]);\n labelSizes[i] = textSize;\n const angleRadians = _normalizeAngle(scale.getIndexAngle(i) + additionalAngle);\n const angle = Math.round(toDegrees(angleRadians));\n const hLimits = determineLimits(angle, pointPosition.x, textSize.w, 0, 180);\n const vLimits = determineLimits(angle, pointPosition.y, textSize.h, 90, 270);\n updateLimits(limits, orig, angleRadians, hLimits, vLimits);\n }\n scale.setCenterPoint(orig.l - limits.l, limits.r - orig.r, orig.t - limits.t, limits.b - orig.b);\n scale._pointLabelItems = buildPointLabelItems(scale, labelSizes, padding);\n}\nfunction updateLimits(limits, orig, angle, hLimits, vLimits) {\n const sin = Math.abs(Math.sin(angle));\n const cos = Math.abs(Math.cos(angle));\n let x = 0;\n let y = 0;\n if (hLimits.start < orig.l) {\n x = (orig.l - hLimits.start) / sin;\n limits.l = Math.min(limits.l, orig.l - x);\n } else if (hLimits.end > orig.r) {\n x = (hLimits.end - orig.r) / sin;\n limits.r = Math.max(limits.r, orig.r + x);\n }\n if (vLimits.start < orig.t) {\n y = (orig.t - vLimits.start) / cos;\n limits.t = Math.min(limits.t, orig.t - y);\n } else if (vLimits.end > orig.b) {\n y = (vLimits.end - orig.b) / cos;\n limits.b = Math.max(limits.b, orig.b + y);\n }\n}\nfunction createPointLabelItem(scale, index, itemOpts) {\n const outerDistance = scale.drawingArea;\n const {\n extra,\n additionalAngle,\n padding,\n size\n } = itemOpts;\n const pointLabelPosition = scale.getPointPosition(index, outerDistance + extra + padding, additionalAngle);\n const angle = Math.round(toDegrees(_normalizeAngle(pointLabelPosition.angle + HALF_PI)));\n const y = yForAngle(pointLabelPosition.y, size.h, angle);\n const textAlign = getTextAlignForAngle(angle);\n const left = leftForTextAlign(pointLabelPosition.x, size.w, textAlign);\n return {\n visible: true,\n x: pointLabelPosition.x,\n y,\n textAlign,\n left,\n top: y,\n right: left + size.w,\n bottom: y + size.h\n };\n}\nfunction isNotOverlapped(item, area) {\n if (!area) {\n return true;\n }\n const {\n left,\n top,\n right,\n bottom\n } = item;\n const apexesInArea = _isPointInArea({\n x: left,\n y: top\n }, area) || _isPointInArea({\n x: left,\n y: bottom\n }, area) || _isPointInArea({\n x: right,\n y: top\n }, area) || _isPointInArea({\n x: right,\n y: bottom\n }, area);\n return !apexesInArea;\n}\nfunction buildPointLabelItems(scale, labelSizes, padding) {\n const items = [];\n const valueCount = scale._pointLabels.length;\n const opts = scale.options;\n const {\n centerPointLabels,\n display\n } = opts.pointLabels;\n const itemOpts = {\n extra: getTickBackdropHeight(opts) / 2,\n additionalAngle: centerPointLabels ? PI / valueCount : 0\n };\n let area;\n for (let i = 0; i < valueCount; i++) {\n itemOpts.padding = padding[i];\n itemOpts.size = labelSizes[i];\n const item = createPointLabelItem(scale, i, itemOpts);\n items.push(item);\n if (display === 'auto') {\n item.visible = isNotOverlapped(item, area);\n if (item.visible) {\n area = item;\n }\n }\n }\n return items;\n}\nfunction getTextAlignForAngle(angle) {\n if (angle === 0 || angle === 180) {\n return 'center';\n } else if (angle < 180) {\n return 'left';\n }\n return 'right';\n}\nfunction leftForTextAlign(x, w, align) {\n if (align === 'right') {\n x -= w;\n } else if (align === 'center') {\n x -= w / 2;\n }\n return x;\n}\nfunction yForAngle(y, h, angle) {\n if (angle === 90 || angle === 270) {\n y -= h / 2;\n } else if (angle > 270 || angle < 90) {\n y -= h;\n }\n return y;\n}\nfunction drawPointLabelBox(ctx, opts, item) {\n const {\n left,\n top,\n right,\n bottom\n } = item;\n const {\n backdropColor\n } = opts;\n if (!isNullOrUndef(backdropColor)) {\n const borderRadius = toTRBLCorners(opts.borderRadius);\n const padding = toPadding(opts.backdropPadding);\n ctx.fillStyle = backdropColor;\n const backdropLeft = left - padding.left;\n const backdropTop = top - padding.top;\n const backdropWidth = right - left + padding.width;\n const backdropHeight = bottom - top + padding.height;\n if (Object.values(borderRadius).some(v => v !== 0)) {\n ctx.beginPath();\n addRoundedRectPath(ctx, {\n x: backdropLeft,\n y: backdropTop,\n w: backdropWidth,\n h: backdropHeight,\n radius: borderRadius\n });\n ctx.fill();\n } else {\n ctx.fillRect(backdropLeft, backdropTop, backdropWidth, backdropHeight);\n }\n }\n}\nfunction drawPointLabels(scale, labelCount) {\n const {\n ctx,\n options: {\n pointLabels\n }\n } = scale;\n for (let i = labelCount - 1; i >= 0; i--) {\n const item = scale._pointLabelItems[i];\n if (!item.visible) {\n continue;\n }\n const optsAtIndex = pointLabels.setContext(scale.getPointLabelContext(i));\n drawPointLabelBox(ctx, optsAtIndex, item);\n const plFont = toFont(optsAtIndex.font);\n const {\n x,\n y,\n textAlign\n } = item;\n renderText(ctx, scale._pointLabels[i], x, y + plFont.lineHeight / 2, plFont, {\n color: optsAtIndex.color,\n textAlign: textAlign,\n textBaseline: 'middle'\n });\n }\n}\nfunction pathRadiusLine(scale, radius, circular, labelCount) {\n const {\n ctx\n } = scale;\n if (circular) {\n ctx.arc(scale.xCenter, scale.yCenter, radius, 0, TAU);\n } else {\n let pointPosition = scale.getPointPosition(0, radius);\n ctx.moveTo(pointPosition.x, pointPosition.y);\n for (let i = 1; i < labelCount; i++) {\n pointPosition = scale.getPointPosition(i, radius);\n ctx.lineTo(pointPosition.x, pointPosition.y);\n }\n }\n}\nfunction drawRadiusLine(scale, gridLineOpts, radius, labelCount, borderOpts) {\n const ctx = scale.ctx;\n const circular = gridLineOpts.circular;\n const {\n color,\n lineWidth\n } = gridLineOpts;\n if (!circular && !labelCount || !color || !lineWidth || radius < 0) {\n return;\n }\n ctx.save();\n ctx.strokeStyle = color;\n ctx.lineWidth = lineWidth;\n ctx.setLineDash(borderOpts.dash || []);\n ctx.lineDashOffset = borderOpts.dashOffset;\n ctx.beginPath();\n pathRadiusLine(scale, radius, circular, labelCount);\n ctx.closePath();\n ctx.stroke();\n ctx.restore();\n}\nfunction createPointLabelContext(parent, index, label) {\n return createContext(parent, {\n label,\n index,\n type: 'pointLabel'\n });\n}\nclass RadialLinearScale extends LinearScaleBase {\n static id = 'radialLinear';\n static defaults = {\n display: true,\n animate: true,\n position: 'chartArea',\n angleLines: {\n display: true,\n lineWidth: 1,\n borderDash: [],\n borderDashOffset: 0.0\n },\n grid: {\n circular: false\n },\n startAngle: 0,\n ticks: {\n showLabelBackdrop: true,\n callback: Ticks.formatters.numeric\n },\n pointLabels: {\n backdropColor: undefined,\n backdropPadding: 2,\n display: true,\n font: {\n size: 10\n },\n callback(label) {\n return label;\n },\n padding: 5,\n centerPointLabels: false\n }\n };\n static defaultRoutes = {\n 'angleLines.color': 'borderColor',\n 'pointLabels.color': 'color',\n 'ticks.color': 'color'\n };\n static descriptors = {\n angleLines: {\n _fallback: 'grid'\n }\n };\n constructor(cfg) {\n super(cfg);\n this.xCenter = undefined;\n this.yCenter = undefined;\n this.drawingArea = undefined;\n this._pointLabels = [];\n this._pointLabelItems = [];\n }\n setDimensions() {\n const padding = this._padding = toPadding(getTickBackdropHeight(this.options) / 2);\n const w = this.width = this.maxWidth - padding.width;\n const h = this.height = this.maxHeight - padding.height;\n this.xCenter = Math.floor(this.left + w / 2 + padding.left);\n this.yCenter = Math.floor(this.top + h / 2 + padding.top);\n this.drawingArea = Math.floor(Math.min(w, h) / 2);\n }\n determineDataLimits() {\n const {\n min,\n max\n } = this.getMinMax(false);\n this.min = isNumberFinite(min) && !isNaN(min) ? min : 0;\n this.max = isNumberFinite(max) && !isNaN(max) ? max : 0;\n this.handleTickRangeOptions();\n }\n computeTickLimit() {\n return Math.ceil(this.drawingArea / getTickBackdropHeight(this.options));\n }\n generateTickLabels(ticks) {\n LinearScaleBase.prototype.generateTickLabels.call(this, ticks);\n this._pointLabels = this.getLabels().map((value, index) => {\n const label = callback(this.options.pointLabels.callback, [value, index], this);\n return label || label === 0 ? label : '';\n }).filter((v, i) => this.chart.getDataVisibility(i));\n }\n fit() {\n const opts = this.options;\n if (opts.display && opts.pointLabels.display) {\n fitWithPointLabels(this);\n } else {\n this.setCenterPoint(0, 0, 0, 0);\n }\n }\n setCenterPoint(leftMovement, rightMovement, topMovement, bottomMovement) {\n this.xCenter += Math.floor((leftMovement - rightMovement) / 2);\n this.yCenter += Math.floor((topMovement - bottomMovement) / 2);\n this.drawingArea -= Math.min(this.drawingArea / 2, Math.max(leftMovement, rightMovement, topMovement, bottomMovement));\n }\n getIndexAngle(index) {\n const angleMultiplier = TAU / (this._pointLabels.length || 1);\n const startAngle = this.options.startAngle || 0;\n return _normalizeAngle(index * angleMultiplier + toRadians(startAngle));\n }\n getDistanceFromCenterForValue(value) {\n if (isNullOrUndef(value)) {\n return NaN;\n }\n const scalingFactor = this.drawingArea / (this.max - this.min);\n if (this.options.reverse) {\n return (this.max - value) * scalingFactor;\n }\n return (value - this.min) * scalingFactor;\n }\n getValueForDistanceFromCenter(distance) {\n if (isNullOrUndef(distance)) {\n return NaN;\n }\n const scaledDistance = distance / (this.drawingArea / (this.max - this.min));\n return this.options.reverse ? this.max - scaledDistance : this.min + scaledDistance;\n }\n getPointLabelContext(index) {\n const pointLabels = this._pointLabels || [];\n if (index >= 0 && index < pointLabels.length) {\n const pointLabel = pointLabels[index];\n return createPointLabelContext(this.getContext(), index, pointLabel);\n }\n }\n getPointPosition(index, distanceFromCenter, additionalAngle = 0) {\n const angle = this.getIndexAngle(index) - HALF_PI + additionalAngle;\n return {\n x: Math.cos(angle) * distanceFromCenter + this.xCenter,\n y: Math.sin(angle) * distanceFromCenter + this.yCenter,\n angle\n };\n }\n getPointPositionForValue(index, value) {\n return this.getPointPosition(index, this.getDistanceFromCenterForValue(value));\n }\n getBasePosition(index) {\n return this.getPointPositionForValue(index || 0, this.getBaseValue());\n }\n getPointLabelPosition(index) {\n const {\n left,\n top,\n right,\n bottom\n } = this._pointLabelItems[index];\n return {\n left,\n top,\n right,\n bottom\n };\n }\n drawBackground() {\n const {\n backgroundColor,\n grid: {\n circular\n }\n } = this.options;\n if (backgroundColor) {\n const ctx = this.ctx;\n ctx.save();\n ctx.beginPath();\n pathRadiusLine(this, this.getDistanceFromCenterForValue(this._endValue), circular, this._pointLabels.length);\n ctx.closePath();\n ctx.fillStyle = backgroundColor;\n ctx.fill();\n ctx.restore();\n }\n }\n drawGrid() {\n const ctx = this.ctx;\n const opts = this.options;\n const {\n angleLines,\n grid,\n border\n } = opts;\n const labelCount = this._pointLabels.length;\n let i, offset, position;\n if (opts.pointLabels.display) {\n drawPointLabels(this, labelCount);\n }\n if (grid.display) {\n this.ticks.forEach((tick, index) => {\n if (index !== 0 || index === 0 && this.min < 0) {\n offset = this.getDistanceFromCenterForValue(tick.value);\n const context = this.getContext(index);\n const optsAtIndex = grid.setContext(context);\n const optsAtIndexBorder = border.setContext(context);\n drawRadiusLine(this, optsAtIndex, offset, labelCount, optsAtIndexBorder);\n }\n });\n }\n if (angleLines.display) {\n ctx.save();\n for (i = labelCount - 1; i >= 0; i--) {\n const optsAtIndex = angleLines.setContext(this.getPointLabelContext(i));\n const {\n color,\n lineWidth\n } = optsAtIndex;\n if (!lineWidth || !color) {\n continue;\n }\n ctx.lineWidth = lineWidth;\n ctx.strokeStyle = color;\n ctx.setLineDash(optsAtIndex.borderDash);\n ctx.lineDashOffset = optsAtIndex.borderDashOffset;\n offset = this.getDistanceFromCenterForValue(opts.reverse ? this.min : this.max);\n position = this.getPointPosition(i, offset);\n ctx.beginPath();\n ctx.moveTo(this.xCenter, this.yCenter);\n ctx.lineTo(position.x, position.y);\n ctx.stroke();\n }\n ctx.restore();\n }\n }\n drawBorder() {}\n drawLabels() {\n const ctx = this.ctx;\n const opts = this.options;\n const tickOpts = opts.ticks;\n if (!tickOpts.display) {\n return;\n }\n const startAngle = this.getIndexAngle(0);\n let offset, width;\n ctx.save();\n ctx.translate(this.xCenter, this.yCenter);\n ctx.rotate(startAngle);\n ctx.textAlign = 'center';\n ctx.textBaseline = 'middle';\n this.ticks.forEach((tick, index) => {\n if (index === 0 && this.min >= 0 && !opts.reverse) {\n return;\n }\n const optsAtIndex = tickOpts.setContext(this.getContext(index));\n const tickFont = toFont(optsAtIndex.font);\n offset = this.getDistanceFromCenterForValue(this.ticks[index].value);\n if (optsAtIndex.showLabelBackdrop) {\n ctx.font = tickFont.string;\n width = ctx.measureText(tick.label).width;\n ctx.fillStyle = optsAtIndex.backdropColor;\n const padding = toPadding(optsAtIndex.backdropPadding);\n ctx.fillRect(-width / 2 - padding.left, -offset - tickFont.size / 2 - padding.top, width + padding.width, tickFont.size + padding.height);\n }\n renderText(ctx, tick.label, 0, -offset, tickFont, {\n color: optsAtIndex.color,\n strokeColor: optsAtIndex.textStrokeColor,\n strokeWidth: optsAtIndex.textStrokeWidth\n });\n });\n ctx.restore();\n }\n drawTitle() {}\n}\nconst INTERVALS = {\n millisecond: {\n common: true,\n size: 1,\n steps: 1000\n },\n second: {\n common: true,\n size: 1000,\n steps: 60\n },\n minute: {\n common: true,\n size: 60000,\n steps: 60\n },\n hour: {\n common: true,\n size: 3600000,\n steps: 24\n },\n day: {\n common: true,\n size: 86400000,\n steps: 30\n },\n week: {\n common: false,\n size: 604800000,\n steps: 4\n },\n month: {\n common: true,\n size: 2.628e9,\n steps: 12\n },\n quarter: {\n common: false,\n size: 7.884e9,\n steps: 4\n },\n year: {\n common: true,\n size: 3.154e10\n }\n};\nconst UNITS = /* #__PURE__ */Object.keys(INTERVALS);\nfunction sorter(a, b) {\n return a - b;\n}\nfunction parse(scale, input) {\n if (isNullOrUndef(input)) {\n return null;\n }\n const adapter = scale._adapter;\n const {\n parser,\n round,\n isoWeekday\n } = scale._parseOpts;\n let value = input;\n if (typeof parser === 'function') {\n value = parser(value);\n }\n if (!isNumberFinite(value)) {\n value = typeof parser === 'string' ? adapter.parse(value, parser) : adapter.parse(value);\n }\n if (value === null) {\n return null;\n }\n if (round) {\n value = round === 'week' && (isNumber(isoWeekday) || isoWeekday === true) ? adapter.startOf(value, 'isoWeek', isoWeekday) : adapter.startOf(value, round);\n }\n return +value;\n}\nfunction determineUnitForAutoTicks(minUnit, min, max, capacity) {\n const ilen = UNITS.length;\n for (let i = UNITS.indexOf(minUnit); i < ilen - 1; ++i) {\n const interval = INTERVALS[UNITS[i]];\n const factor = interval.steps ? interval.steps : Number.MAX_SAFE_INTEGER;\n if (interval.common && Math.ceil((max - min) / (factor * interval.size)) <= capacity) {\n return UNITS[i];\n }\n }\n return UNITS[ilen - 1];\n}\nfunction determineUnitForFormatting(scale, numTicks, minUnit, min, max) {\n for (let i = UNITS.length - 1; i >= UNITS.indexOf(minUnit); i--) {\n const unit = UNITS[i];\n if (INTERVALS[unit].common && scale._adapter.diff(max, min, unit) >= numTicks - 1) {\n return unit;\n }\n }\n return UNITS[minUnit ? UNITS.indexOf(minUnit) : 0];\n}\nfunction determineMajorUnit(unit) {\n for (let i = UNITS.indexOf(unit) + 1, ilen = UNITS.length; i < ilen; ++i) {\n if (INTERVALS[UNITS[i]].common) {\n return UNITS[i];\n }\n }\n}\nfunction addTick(ticks, time, timestamps) {\n if (!timestamps) {\n ticks[time] = true;\n } else if (timestamps.length) {\n const {\n lo,\n hi\n } = _lookup(timestamps, time);\n const timestamp = timestamps[lo] >= time ? timestamps[lo] : timestamps[hi];\n ticks[timestamp] = true;\n }\n}\nfunction setMajorTicks(scale, ticks, map, majorUnit) {\n const adapter = scale._adapter;\n const first = +adapter.startOf(ticks[0].value, majorUnit);\n const last = ticks[ticks.length - 1].value;\n let major, index;\n for (major = first; major <= last; major = +adapter.add(major, 1, majorUnit)) {\n index = map[major];\n if (index >= 0) {\n ticks[index].major = true;\n }\n }\n return ticks;\n}\nfunction ticksFromTimestamps(scale, values, majorUnit) {\n const ticks = [];\n const map = {};\n const ilen = values.length;\n let i, value;\n for (i = 0; i < ilen; ++i) {\n value = values[i];\n map[value] = i;\n ticks.push({\n value,\n major: false\n });\n }\n return ilen === 0 || !majorUnit ? ticks : setMajorTicks(scale, ticks, map, majorUnit);\n}\nlet TimeScale = /*#__PURE__*/(() => {\n class TimeScale extends Scale {\n static id = 'time';\n static defaults = {\n bounds: 'data',\n adapters: {},\n time: {\n parser: false,\n unit: false,\n round: false,\n isoWeekday: false,\n minUnit: 'millisecond',\n displayFormats: {}\n },\n ticks: {\n source: 'auto',\n callback: false,\n major: {\n enabled: false\n }\n }\n };\n constructor(props) {\n super(props);\n this._cache = {\n data: [],\n labels: [],\n all: []\n };\n this._unit = 'day';\n this._majorUnit = undefined;\n this._offsets = {};\n this._normalized = false;\n this._parseOpts = undefined;\n }\n init(scaleOpts, opts = {}) {\n const time = scaleOpts.time || (scaleOpts.time = {});\n const adapter = this._adapter = new adapters._date(scaleOpts.adapters.date);\n adapter.init(opts);\n mergeIf(time.displayFormats, adapter.formats());\n this._parseOpts = {\n parser: time.parser,\n round: time.round,\n isoWeekday: time.isoWeekday\n };\n super.init(scaleOpts);\n this._normalized = opts.normalized;\n }\n parse(raw, index) {\n if (raw === undefined) {\n return null;\n }\n return parse(this, raw);\n }\n beforeLayout() {\n super.beforeLayout();\n this._cache = {\n data: [],\n labels: [],\n all: []\n };\n }\n determineDataLimits() {\n const options = this.options;\n const adapter = this._adapter;\n const unit = options.time.unit || 'day';\n let {\n min,\n max,\n minDefined,\n maxDefined\n } = this.getUserBounds();\n function _applyBounds(bounds) {\n if (!minDefined && !isNaN(bounds.min)) {\n min = Math.min(min, bounds.min);\n }\n if (!maxDefined && !isNaN(bounds.max)) {\n max = Math.max(max, bounds.max);\n }\n }\n if (!minDefined || !maxDefined) {\n _applyBounds(this._getLabelBounds());\n if (options.bounds !== 'ticks' || options.ticks.source !== 'labels') {\n _applyBounds(this.getMinMax(false));\n }\n }\n min = isNumberFinite(min) && !isNaN(min) ? min : +adapter.startOf(Date.now(), unit);\n max = isNumberFinite(max) && !isNaN(max) ? max : +adapter.endOf(Date.now(), unit) + 1;\n this.min = Math.min(min, max - 1);\n this.max = Math.max(min + 1, max);\n }\n _getLabelBounds() {\n const arr = this.getLabelTimestamps();\n let min = Number.POSITIVE_INFINITY;\n let max = Number.NEGATIVE_INFINITY;\n if (arr.length) {\n min = arr[0];\n max = arr[arr.length - 1];\n }\n return {\n min,\n max\n };\n }\n buildTicks() {\n const options = this.options;\n const timeOpts = options.time;\n const tickOpts = options.ticks;\n const timestamps = tickOpts.source === 'labels' ? this.getLabelTimestamps() : this._generate();\n if (options.bounds === 'ticks' && timestamps.length) {\n this.min = this._userMin || timestamps[0];\n this.max = this._userMax || timestamps[timestamps.length - 1];\n }\n const min = this.min;\n const max = this.max;\n const ticks = _filterBetween(timestamps, min, max);\n this._unit = timeOpts.unit || (tickOpts.autoSkip ? determineUnitForAutoTicks(timeOpts.minUnit, this.min, this.max, this._getLabelCapacity(min)) : determineUnitForFormatting(this, ticks.length, timeOpts.minUnit, this.min, this.max));\n this._majorUnit = !tickOpts.major.enabled || this._unit === 'year' ? undefined : determineMajorUnit(this._unit);\n this.initOffsets(timestamps);\n if (options.reverse) {\n ticks.reverse();\n }\n return ticksFromTimestamps(this, ticks, this._majorUnit);\n }\n afterAutoSkip() {\n if (this.options.offsetAfterAutoskip) {\n this.initOffsets(this.ticks.map(tick => +tick.value));\n }\n }\n initOffsets(timestamps = []) {\n let start = 0;\n let end = 0;\n let first, last;\n if (this.options.offset && timestamps.length) {\n first = this.getDecimalForValue(timestamps[0]);\n if (timestamps.length === 1) {\n start = 1 - first;\n } else {\n start = (this.getDecimalForValue(timestamps[1]) - first) / 2;\n }\n last = this.getDecimalForValue(timestamps[timestamps.length - 1]);\n if (timestamps.length === 1) {\n end = last;\n } else {\n end = (last - this.getDecimalForValue(timestamps[timestamps.length - 2])) / 2;\n }\n }\n const limit = timestamps.length < 3 ? 0.5 : 0.25;\n start = _limitValue(start, 0, limit);\n end = _limitValue(end, 0, limit);\n this._offsets = {\n start,\n end,\n factor: 1 / (start + 1 + end)\n };\n }\n _generate() {\n const adapter = this._adapter;\n const min = this.min;\n const max = this.max;\n const options = this.options;\n const timeOpts = options.time;\n const minor = timeOpts.unit || determineUnitForAutoTicks(timeOpts.minUnit, min, max, this._getLabelCapacity(min));\n const stepSize = valueOrDefault(options.ticks.stepSize, 1);\n const weekday = minor === 'week' ? timeOpts.isoWeekday : false;\n const hasWeekday = isNumber(weekday) || weekday === true;\n const ticks = {};\n let first = min;\n let time, count;\n if (hasWeekday) {\n first = +adapter.startOf(first, 'isoWeek', weekday);\n }\n first = +adapter.startOf(first, hasWeekday ? 'day' : minor);\n if (adapter.diff(max, min, minor) > 100000 * stepSize) {\n throw new Error(min + ' and ' + max + ' are too far apart with stepSize of ' + stepSize + ' ' + minor);\n }\n const timestamps = options.ticks.source === 'data' && this.getDataTimestamps();\n for (time = first, count = 0; time < max; time = +adapter.add(time, stepSize, minor), count++) {\n addTick(ticks, time, timestamps);\n }\n if (time === max || options.bounds === 'ticks' || count === 1) {\n addTick(ticks, time, timestamps);\n }\n return Object.keys(ticks).sort(sorter).map(x => +x);\n }\n getLabelForValue(value) {\n const adapter = this._adapter;\n const timeOpts = this.options.time;\n if (timeOpts.tooltipFormat) {\n return adapter.format(value, timeOpts.tooltipFormat);\n }\n return adapter.format(value, timeOpts.displayFormats.datetime);\n }\n format(value, format) {\n const options = this.options;\n const formats = options.time.displayFormats;\n const unit = this._unit;\n const fmt = format || formats[unit];\n return this._adapter.format(value, fmt);\n }\n _tickFormatFunction(time, index, ticks, format) {\n const options = this.options;\n const formatter = options.ticks.callback;\n if (formatter) {\n return callback(formatter, [time, index, ticks], this);\n }\n const formats = options.time.displayFormats;\n const unit = this._unit;\n const majorUnit = this._majorUnit;\n const minorFormat = unit && formats[unit];\n const majorFormat = majorUnit && formats[majorUnit];\n const tick = ticks[index];\n const major = majorUnit && majorFormat && tick && tick.major;\n return this._adapter.format(time, format || (major ? majorFormat : minorFormat));\n }\n generateTickLabels(ticks) {\n let i, ilen, tick;\n for (i = 0, ilen = ticks.length; i < ilen; ++i) {\n tick = ticks[i];\n tick.label = this._tickFormatFunction(tick.value, i, ticks);\n }\n }\n getDecimalForValue(value) {\n return value === null ? NaN : (value - this.min) / (this.max - this.min);\n }\n getPixelForValue(value) {\n const offsets = this._offsets;\n const pos = this.getDecimalForValue(value);\n return this.getPixelForDecimal((offsets.start + pos) * offsets.factor);\n }\n getValueForPixel(pixel) {\n const offsets = this._offsets;\n const pos = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n return this.min + pos * (this.max - this.min);\n }\n _getLabelSize(label) {\n const ticksOpts = this.options.ticks;\n const tickLabelWidth = this.ctx.measureText(label).width;\n const angle = toRadians(this.isHorizontal() ? ticksOpts.maxRotation : ticksOpts.minRotation);\n const cosRotation = Math.cos(angle);\n const sinRotation = Math.sin(angle);\n const tickFontSize = this._resolveTickFontOptions(0).size;\n return {\n w: tickLabelWidth * cosRotation + tickFontSize * sinRotation,\n h: tickLabelWidth * sinRotation + tickFontSize * cosRotation\n };\n }\n _getLabelCapacity(exampleTime) {\n const timeOpts = this.options.time;\n const displayFormats = timeOpts.displayFormats;\n const format = displayFormats[timeOpts.unit] || displayFormats.millisecond;\n const exampleLabel = this._tickFormatFunction(exampleTime, 0, ticksFromTimestamps(this, [exampleTime], this._majorUnit), format);\n const size = this._getLabelSize(exampleLabel);\n const capacity = Math.floor(this.isHorizontal() ? this.width / size.w : this.height / size.h) - 1;\n return capacity > 0 ? capacity : 1;\n }\n getDataTimestamps() {\n let timestamps = this._cache.data || [];\n let i, ilen;\n if (timestamps.length) {\n return timestamps;\n }\n const metas = this.getMatchingVisibleMetas();\n if (this._normalized && metas.length) {\n return this._cache.data = metas[0].controller.getAllParsedValues(this);\n }\n for (i = 0, ilen = metas.length; i < ilen; ++i) {\n timestamps = timestamps.concat(metas[i].controller.getAllParsedValues(this));\n }\n return this._cache.data = this.normalize(timestamps);\n }\n getLabelTimestamps() {\n const timestamps = this._cache.labels || [];\n let i, ilen;\n if (timestamps.length) {\n return timestamps;\n }\n const labels = this.getLabels();\n for (i = 0, ilen = labels.length; i < ilen; ++i) {\n timestamps.push(parse(this, labels[i]));\n }\n return this._cache.labels = this._normalized ? timestamps : this.normalize(timestamps);\n }\n normalize(values) {\n return _arrayUnique(values.sort(sorter));\n }\n }\n return TimeScale;\n})();\nfunction interpolate(table, val, reverse) {\n let lo = 0;\n let hi = table.length - 1;\n let prevSource, nextSource, prevTarget, nextTarget;\n if (reverse) {\n if (val >= table[lo].pos && val <= table[hi].pos) {\n ({\n lo,\n hi\n } = _lookupByKey(table, 'pos', val));\n }\n ({\n pos: prevSource,\n time: prevTarget\n } = table[lo]);\n ({\n pos: nextSource,\n time: nextTarget\n } = table[hi]);\n } else {\n if (val >= table[lo].time && val <= table[hi].time) {\n ({\n lo,\n hi\n } = _lookupByKey(table, 'time', val));\n }\n ({\n time: prevSource,\n pos: prevTarget\n } = table[lo]);\n ({\n time: nextSource,\n pos: nextTarget\n } = table[hi]);\n }\n const span = nextSource - prevSource;\n return span ? prevTarget + (nextTarget - prevTarget) * (val - prevSource) / span : prevTarget;\n}\nclass TimeSeriesScale extends TimeScale {\n static id = 'timeseries';\n static defaults = TimeScale.defaults;\n constructor(props) {\n super(props);\n this._table = [];\n this._minPos = undefined;\n this._tableRange = undefined;\n }\n initOffsets() {\n const timestamps = this._getTimestampsForTable();\n const table = this._table = this.buildLookupTable(timestamps);\n this._minPos = interpolate(table, this.min);\n this._tableRange = interpolate(table, this.max) - this._minPos;\n super.initOffsets(timestamps);\n }\n buildLookupTable(timestamps) {\n const {\n min,\n max\n } = this;\n const items = [];\n const table = [];\n let i, ilen, prev, curr, next;\n for (i = 0, ilen = timestamps.length; i < ilen; ++i) {\n curr = timestamps[i];\n if (curr >= min && curr <= max) {\n items.push(curr);\n }\n }\n if (items.length < 2) {\n return [{\n time: min,\n pos: 0\n }, {\n time: max,\n pos: 1\n }];\n }\n for (i = 0, ilen = items.length; i < ilen; ++i) {\n next = items[i + 1];\n prev = items[i - 1];\n curr = items[i];\n if (Math.round((next + prev) / 2) !== curr) {\n table.push({\n time: curr,\n pos: i / (ilen - 1)\n });\n }\n }\n return table;\n }\n _generate() {\n const min = this.min;\n const max = this.max;\n let timestamps = super.getDataTimestamps();\n if (!timestamps.includes(min) || !timestamps.length) {\n timestamps.splice(0, 0, min);\n }\n if (!timestamps.includes(max) || timestamps.length === 1) {\n timestamps.push(max);\n }\n return timestamps.sort((a, b) => a - b);\n }\n _getTimestampsForTable() {\n let timestamps = this._cache.all || [];\n if (timestamps.length) {\n return timestamps;\n }\n const data = this.getDataTimestamps();\n const label = this.getLabelTimestamps();\n if (data.length && label.length) {\n timestamps = this.normalize(data.concat(label));\n } else {\n timestamps = data.length ? data : label;\n }\n timestamps = this._cache.all = timestamps;\n return timestamps;\n }\n getDecimalForValue(value) {\n return (interpolate(this._table, value) - this._minPos) / this._tableRange;\n }\n getValueForPixel(pixel) {\n const offsets = this._offsets;\n const decimal = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n return interpolate(this._table, decimal * this._tableRange + this._minPos, true);\n }\n}\nvar scales = /*#__PURE__*/Object.freeze({\n __proto__: null,\n CategoryScale: CategoryScale,\n LinearScale: LinearScale,\n LogarithmicScale: LogarithmicScale,\n RadialLinearScale: RadialLinearScale,\n TimeScale: TimeScale,\n TimeSeriesScale: TimeSeriesScale\n});\nconst registerables = [controllers, elements, plugins, scales];\nexport { Animation, Animations, ArcElement, BarController, BarElement, BasePlatform, BasicPlatform, BubbleController, CategoryScale, Chart, plugin_colors as Colors, DatasetController, plugin_decimation as Decimation, DomPlatform, DoughnutController, Element, index as Filler, Interaction, plugin_legend as Legend, LineController, LineElement, LinearScale, LogarithmicScale, PieController, PointElement, PolarAreaController, RadarController, RadialLinearScale, Scale, ScatterController, plugin_subtitle as SubTitle, Ticks, TimeScale, TimeSeriesScale, plugin_title as Title, plugin_tooltip as Tooltip, adapters as _adapters, _detectPlatform, animator, controllers, defaults, elements, layouts, plugins, registerables, registry, scales };\n","function isPlainObject(value) {\n if (!value || typeof value !== 'object') {\n return false;\n }\n const proto = Object.getPrototypeOf(value);\n const hasObjectPrototype = proto === null || proto === Object.prototype || Object.getPrototypeOf(proto) === null;\n if (!hasObjectPrototype) {\n return false;\n }\n return Object.prototype.toString.call(value) === '[object Object]';\n}\nexport { isPlainObject };","function isUnsafeProperty(key) {\n return key === '__proto__';\n}\nexport { isUnsafeProperty };","import { isUnsafeProperty } from '../_internal/isUnsafeProperty.mjs';\nimport { isPlainObject } from '../predicate/isPlainObject.mjs';\nfunction merge(target, source) {\n const sourceKeys = Object.keys(source);\n for (let i = 0; i < sourceKeys.length; i++) {\n const key = sourceKeys[i];\n if (isUnsafeProperty(key)) {\n continue;\n }\n const sourceValue = source[key];\n const targetValue = target[key];\n if (isMergeableValue(sourceValue) && isMergeableValue(targetValue)) {\n target[key] = merge(targetValue, sourceValue);\n } else if (Array.isArray(sourceValue)) {\n target[key] = merge([], sourceValue);\n } else if (isPlainObject(sourceValue)) {\n target[key] = merge({}, sourceValue);\n } else if (targetValue === undefined || sourceValue !== undefined) {\n target[key] = sourceValue;\n }\n }\n return target;\n}\nfunction isMergeableValue(value) {\n return isPlainObject(value) || Array.isArray(value);\n}\nexport { merge };","import * as i0 from '@angular/core';\nimport { InjectionToken, Injectable, EventEmitter, inject, ElementRef, NgZone, PLATFORM_ID, Output, Input, Directive } from '@angular/core';\nimport { registerables, Chart, defaults } from 'chart.js';\nimport { merge } from 'es-toolkit';\nimport { isPlatformBrowser } from '@angular/common';\nimport { BehaviorSubject } from 'rxjs';\nimport { distinctUntilChanged } from 'rxjs/operators';\nconst NG_CHARTS_CONFIGURATION = /*#__PURE__*/new InjectionToken('Configuration for ngCharts');\n/**\n * Provide all the default registerable as defined by Chart.js\n */\nfunction withDefaultRegisterables(...registerables$1) {\n return {\n registerables: [...registerables, ...registerables$1]\n };\n}\n/**\n * Provide configuration for ngCharts. In most cases, you have to pass it some registerables. So either\n * `withDefaultRegisterables()`, or a custom list of registerables tailored to your needs to reduce bundle size.\n */\nfunction provideCharts(...configurations) {\n const config = configurations.reduce(merge, {});\n return {\n provide: NG_CHARTS_CONFIGURATION,\n useValue: config\n };\n}\nlet ThemeService = /*#__PURE__*/(() => {\n class ThemeService {\n constructor() {\n this.colorschemesOptions = new BehaviorSubject(undefined);\n }\n setColorschemesOptions(options) {\n this.pColorschemesOptions = options;\n this.colorschemesOptions.next(options);\n }\n getColorschemesOptions() {\n return this.pColorschemesOptions;\n }\n static {\n this.ɵfac = function ThemeService_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || ThemeService)();\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: ThemeService,\n factory: ThemeService.ɵfac,\n providedIn: 'root'\n });\n }\n }\n return ThemeService;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet BaseChartDirective = /*#__PURE__*/(() => {\n class BaseChartDirective {\n constructor() {\n this.type = 'bar';\n this.plugins = [];\n this.chartClick = new EventEmitter();\n this.chartHover = new EventEmitter();\n this.ctx = null;\n this.subs = [];\n this.themeOverrides = {};\n this.element = inject(ElementRef);\n this.zone = inject(NgZone);\n this.themeService = inject(ThemeService);\n this.config = inject(NG_CHARTS_CONFIGURATION, {\n optional: true\n });\n this.platformId = inject(PLATFORM_ID);\n this.isBrowser = isPlatformBrowser(this.platformId);\n if (this.config?.registerables) {\n Chart.register(...this.config.registerables);\n }\n if (this.config?.defaults) {\n defaults.set(this.config.defaults);\n }\n // Only get canvas context in browser environment\n if (this.isBrowser) {\n this.ctx = this.element.nativeElement.getContext('2d');\n }\n this.subs.push(this.themeService.colorschemesOptions.pipe(distinctUntilChanged()).subscribe(r => this.themeChanged(r)));\n }\n ngOnChanges(changes) {\n if (!this.isBrowser) {\n return; // Skip chart operations in SSR\n }\n const requireRender = ['type'];\n const propertyNames = Object.getOwnPropertyNames(changes);\n if (propertyNames.some(key => requireRender.includes(key)) || propertyNames.every(key => changes[key].isFirstChange())) {\n this.render();\n } else {\n // For legend changes, we need to update the chart options and re-render\n if (this.chart && changes['legend']) {\n const config = this.getChartConfiguration();\n if (config.options) {\n this.chart.options = config.options;\n }\n this.update();\n } else if (this.chart) {\n const config = this.getChartConfiguration();\n // Using assign to avoid changing the original object reference\n if (config.data && this.chart.config.data) {\n Object.assign(this.chart.config.data, config.data);\n }\n if (config.plugins && this.chart.config.plugins) {\n Object.assign(this.chart.config.plugins, config.plugins);\n }\n if (config.options && this.chart.config.options) {\n Object.assign(this.chart.config.options, config.options);\n }\n this.update();\n }\n }\n }\n ngOnDestroy() {\n if (this.chart) {\n this.chart.destroy();\n this.chart = void 0;\n }\n this.subs.forEach(s => s.unsubscribe());\n }\n render() {\n if (!this.isBrowser || !this.ctx) {\n return undefined;\n }\n if (this.chart) {\n this.chart.destroy();\n }\n return this.zone.runOutsideAngular(() => this.chart = new Chart(this.ctx, this.getChartConfiguration()));\n }\n update(mode) {\n if (this.chart && this.isBrowser) {\n this.zone.runOutsideAngular(() => this.chart?.update(mode));\n }\n }\n hideDataset(index, hidden) {\n if (this.chart && this.isBrowser) {\n this.chart.getDatasetMeta(index).hidden = hidden;\n this.update();\n }\n }\n isDatasetHidden(index) {\n return this.chart?.getDatasetMeta(index)?.hidden;\n }\n toBase64Image() {\n return this.chart?.toBase64Image();\n }\n themeChanged(options) {\n this.themeOverrides = options;\n if (this.chart) {\n if (this.chart.config.options) {\n Object.assign(this.chart.config.options, this.getChartOptions());\n }\n this.update();\n }\n }\n getChartOptions() {\n return [{\n onHover: (event, active) => {\n if (!this.chartHover.observed && !this.chartHover.observers?.length) {\n return;\n }\n this.zone.run(() => this.chartHover.emit({\n event,\n active\n }));\n },\n onClick: (event, active) => {\n if (!this.chartClick.observed && !this.chartClick.observers?.length) {\n return;\n }\n this.zone.run(() => this.chartClick.emit({\n event,\n active\n }));\n }\n }, this.themeOverrides ?? {}, this.options ?? {}, {\n plugins: {\n legend: {\n display: this.legend\n }\n }\n }].reduce(merge, {});\n }\n getChartConfiguration() {\n return {\n type: this.type,\n data: this.getChartData(),\n options: this.getChartOptions(),\n plugins: this.plugins\n };\n }\n getChartData() {\n return this.data ? this.data : {\n labels: this.labels || [],\n datasets: this.datasets || []\n };\n }\n static {\n this.ɵfac = function BaseChartDirective_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || BaseChartDirective)();\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: BaseChartDirective,\n selectors: [[\"canvas\", \"baseChart\", \"\"]],\n inputs: {\n type: \"type\",\n legend: \"legend\",\n data: \"data\",\n options: \"options\",\n plugins: \"plugins\",\n labels: \"labels\",\n datasets: \"datasets\"\n },\n outputs: {\n chartClick: \"chartClick\",\n chartHover: \"chartHover\"\n },\n exportAs: [\"base-chart\"],\n features: [i0.ɵɵNgOnChangesFeature]\n });\n }\n }\n return BaseChartDirective;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/* eslint-disable @typescript-eslint/no-unsafe-function-type */\n\n/*\n * Public API Surface of ng2-charts\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { BaseChartDirective, NG_CHARTS_CONFIGURATION, ThemeService, provideCharts, withDefaultRegisterables };\n"],"mappings":"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","names":["round","v","lim","l","h","p2b","n2b","v","lim","round","b2n","n2p","map$1","hex","h1","b","h2","eq","isShort","hexParse","str","len","ret","alpha","a","f","hexString","HUE_RE","hsl2rgbn","h","s","l","n","k","hsv2rgbn","hwb2rgbn","w","rgb","i","hueValue","r","g","d","max","rgb2hsl","min","calln","c","hsl2rgb","hwb2rgb","hsv2rgb","hue","hueParse","m","p2b","p1","p2","rotate","deg","hslString","map","names$1","unpack","unpacked","keys","tkeys","j","ok","nk","names","nameParse","RGB_RE","rgbParse","rgbString","to","from","interpolate","rgb1","rgb2","modHSL","ratio","tmp","clone","proto","fromObject","input","functionParse","Color","_Color","type","obj","color","weight","c1","c2","w2","p","w1","val","noop","uid","id","isNullOrUndef","value","isArray","type","isObject","isNumberFinite","finiteOrDefault","defaultValue","valueOrDefault","toPercentage","dimension","toDimension","callback","fn","args","thisArg","each","loopable","reverse","i","len","keys","_elementsEqual","a0","a1","ilen","v0","v1","clone","source","target","klen","k","isValidKey","key","_merger","options","tval","sval","merge","sources","merger","current","mergeIf","_mergerIf","keyResolvers","v","o","_splitKey","key","parts","keys","tmp","part","_getKeyResolver","obj","k","resolveObjectKey","_capitalize","str","defined","value","isFunction","setsEqual","a","b","item","_isClickEvent","PI","TAU","PITAU","INFINITY","RAD_PER_DEG","HALF_PI","QUARTER_PI","TWO_THIRDS_PI","log10","sign","almostEquals","x","y","epsilon","niceNum","range","roundedRange","niceRange","fraction","_factorize","result","sqrt","i","isNonPrimitive","n","isNumber","almostWhole","rounded","_setMinAndMaxByKey","array","target","property","ilen","toRadians","degrees","toDegrees","radians","_decimalPlaces","isNumberFinite","e","p","getAngleFromPoint","centrePoint","anglePoint","distanceFromXCenter","distanceFromYCenter","radialDistanceFromCenter","angle","distanceBetweenPoints","pt1","pt2","_angleDiff","_normalizeAngle","_angleBetween","start","end","sameAngleIsFullCircle","s","angleToStart","angleToEnd","startToAngle","endToAngle","_limitValue","min","max","_int16Range","_isBetween","_lookup","table","cmp","index","hi","lo","mid","_lookupByKey","last","ti","_rlookupByKey","_filterBetween","values","arrayEvents","listenArrayEvents","listener","method","base","args","res","object","unlistenArrayEvents","stub","listeners","_arrayUnique","items","set","requestAnimFrame","callback","throttled","fn","thisArg","argsToUse","ticking","args","debounce","delay","timeout","_toLeftRightCenter","align","_alignStartEnd","start","end","_textX","left","right","rtl","_getStartAndCountOfVisiblePoints","meta","points","animationsDisabled","pointCount","count","iScale","vScale","_parsed","spanGaps","axis","min","max","minDefined","maxDefined","_lookupByKey","distanceToDefinedLo","point","isNullOrUndef","_limitValue","distanceToDefinedHi","_scaleRangesChanged","xScale","yScale","_scaleRanges","newRanges","changed","atEdge","t","elasticIn","s","p","TAU","elasticOut","effects","HALF_PI","PI","isPatternOrGradient","value","type","color","Color","getHoverColor","numbers","colors","applyAnimationsDefaults","defaults","name","v","applyLayoutsDefaults","intlCache","getNumberFormat","locale","options","cacheKey","formatter","formatNumber","num","formatters","isArray","tickValue","index","ticks","notation","delta","maxTick","calculateDelta","logDelta","log10","numDecimal","remain","Ticks","applyScaleDefaults","_ctx","overrides","descriptors","getScope$1","node","key","keys","i","k","set","root","scope","values","merge","Defaults","_descriptors","_appliers","context","ctx","targetScope","targetName","scopeObject","targetScopeObject","privateName","local","target","isObject","valueOrDefault","appliers","apply","toFontString","font","_measureText","data","gc","longest","string","textWidth","_longestText","arrayOfThings","cache","ilen","j","jlen","thing","nestedThing","gcLen","_alignPixel","chart","pixel","width","devicePixelRatio","halfWidth","clearCanvas","canvas","drawPoint","x","y","drawPointLegend","w","xOffset","yOffset","size","cornerRadius","xOffsetW","yOffsetW","style","rotation","radius","rad","RAD_PER_DEG","TWO_THIRDS_PI","QUARTER_PI","_isPointInArea","area","margin","clipArea","unclipArea","_steppedLineTo","previous","flip","mode","midpoint","_bezierCurveTo","setRenderOpts","opts","decorateText","line","metrics","top","bottom","yDecoration","drawBackdrop","oldColor","renderText","text","lines","stroke","addRoundedRectPath","rect","h","LINE_HEIGHT","FONT_STYLE","toLineHeight","matches","numberOrZero","_readValueToProps","props","ret","objProps","read","prop","toTRBL","toTRBLCorners","toPadding","obj","toFont","fallback","resolve","inputs","info","cacheable","_addGrace","minmax","grace","beginAtZero","change","toDimension","keepZero","add","createContext","parentContext","_createResolver","scopes","prefixes","rootScopes","getTarget","finalRootScopes","_resolve","_cached","_resolveWithPrefixes","getKeysFromAllScopes","storage","_attachContext","proxy","subProxy","descriptorDefaults","receiver","_resolveWithContext","_scriptable","_indexable","_allKeys","isFunction","readKey","prefix","_capitalize","needsSubResolver","_proxy","_context","_subProxy","_resolveScriptable","_resolveArray","getValue","_stack","createSubResolver","isIndexable","arr","item","resolver","resolveFallback","getScope","parent","resolveObjectKey","addScopes","parentScopes","parentFallback","allScopes","addScopesFromKey","subGetTarget","resolveKeysFromAllScopes","_parseObjectDataRadialScale","parsed","EPSILON","getPoint","getValueAxis","indexAxis","splineCurve","firstPoint","middlePoint","afterPoint","current","next","d01","distanceBetweenPoints","d12","s01","s12","fa","fb","monotoneAdjust","deltaK","mK","pointsLen","alphaK","betaK","tauK","squaredMagnitude","pointCurrent","pointAfter","almostEquals","monotoneCompute","valueAxis","pointBefore","iPixel","vPixel","splineCurveMonotone","slopeDelta","sign","capControlPoint","pt","capBezierPoints","inArea","inAreaPrev","inAreaNext","_updateBezierControlPoints","loop","controlPoints","prev","_isDomSupported","_getParentNode","domNode","parseMaxStyle","styleValue","parentProperty","valueInPixels","getComputedStyle","element","getStyle","el","property","positions","getPositionedStyle","styles","suffix","result","pos","useOffsetPos","getCanvasPosition","touches","source","offsetX","offsetY","box","getRelativePosition","event","currentDevicePixelRatio","borderBox","paddings","borders","height","getContainerSize","maxWidth","maxHeight","container","containerStyle","containerBorder","containerPadding","INFINITY","round1","getMaximumSize","bbWidth","bbHeight","aspectRatio","margins","containerSize","retinaScale","forceRatio","forceStyle","pixelRatio","deviceHeight","deviceWidth","supportsEventListenerOptions","passiveSupported","readUsedSize","_pointInLine","p1","p2","_steppedInterpolation","_bezierInterpolation","cp1","cp2","a","b","c","d","e","getRightToLeftAdapter","rectX","itemWidth","getLeftToRightAdapter","_itemWidth","getRtlAdapter","overrideTextDirection","direction","original","restoreTextDirection","propertyFn","_angleBetween","_angleDiff","_normalizeAngle","_isBetween","normalizeSegment","getSegment","segment","bounds","startBound","endBound","between","normalize","_boundSegment","compare","inside","subStart","prevValue","startIsBefore","endIsBefore","shouldStart","shouldStop","_boundSegments","segments","sub","findStartAndEnd","solidSegments","last","cur","_computeSegments","segmentOptions","splitByStyles","completeLoop","doSplitByStyles","chartContext","baseStyle","readStyle","datasetIndex","prevStyle","addStyle","l","st","dir","styleChanged","replacer","getSizeForArea","scale","chartArea","field","getDatasetArea","getDatasetClipArea","clip","Animator","chart","anims","date","type","callbacks","numSteps","fn","requestAnimFrame","remaining","items","i","draw","item","charts","event","cb","acc","cur","animator","transparent","interpolators","from","to","factor","c0","color","c1","Animation","cfg","target","prop","currentValue","resolve","effects","elapsed","remain","duration","loop","promises","res","rej","resolved","method","Animations","config","isObject","animationOptions","defaults","animatedProps","key","option","isArray","values","newOptions","options","resolveTargetOptions","animations","awaitAll","running","props","value","animation","properties","keys","anim","scaleClip","scale","allowedOverflow","opts","reverse","min","max","defaultClip","xScale","yScale","x","y","toClip","t","r","b","l","getSortedDatasetIndices","filterVisible","metasets","ilen","applyStack","stack","dsIndex","singleMode","datasetIndex","otherValue","found","isNumberFinite","sign","convertObjectDataToArray","data","meta","iScale","vScale","iAxisKey","vAxisKey","adata","isStacked","stacked","getStackKey","indexScale","valueScale","getUserBounds","minDefined","maxDefined","getOrCreateStack","stacks","stackKey","indexValue","subStack","getLastIndexInStack","positive","updateStacks","controller","parsed","iAxis","vAxis","index","itemStacks","visualValues","getFirstScaleId","axis","scales","createDatasetContext","parent","createContext","createDataContext","element","clearStacks","isDirectUpdateMode","mode","cloneIfNotShared","cached","shared","createStack","canStack","DatasetController","dataset","chooseId","xid","valueOrDefault","yid","rid","indexAxis","iid","vid","scaleID","unlistenArrayEvents","_data","listenArrayEvents","resetNewElements","stackChanged","oldStacked","scopeKeys","scopes","start","count","_stacked","sorted","prev","isNotInOrderComparedToPrev","labels","singleScale","xAxisKey","yAxisKey","resolveObjectKey","range","parsedValue","_parsed","otherScale","otherMin","otherMax","_skip","ctx","elements","area","active","drawActiveElementsOnTop","context","elementType","cache","cacheKey","sharing","defined","prefixes","names","transition","sharedOptions","firstOpts","previouslySharedOptions","includeOptions","arg1","arg2","numMeta","numData","end","move","arr","removed","args","newCount","getAllScaleValues","visibleMetas","_arrayUnique","a","computeMinSampleSize","curr","updateMinAndPrev","computeFitCategoryTraits","ruler","stackCount","thickness","size","ratio","isNullOrUndef","computeFlexCategoryTraits","pixels","next","percent","parseFloatBar","entry","startValue","endValue","barStart","barEnd","parseValue","parseArrayOrPrimitive","isFloatBar","custom","barSign","actualBase","borderProps","top","bottom","setBorderSkipped","edge","parseEdge","swap","startEnd","orig","v1","v2","v","setInflateAmount","inflateAmount","BarController","obj","bars","reset","base","horizontal","vpixels","ipixels","last","dataIndex","currentParsed","iScaleValue","skipNull","val","indexScaleId","firstScaleAxisId","name","barThickness","baseValue","minBarLength","floating","length","head","startPixel","endPixel","halfGrid","maxBarThickness","center","axisCount","axisID","axisNumber","stackIndex","rects","BubbleController","points","point","iPixel","vPixel","radius","getRatioAndOffset","rotation","circumference","cutout","ratioX","ratioY","offsetX","offsetY","TAU","startAngle","endAngle","startX","startY","endX","endY","calcMax","angle","_angleBetween","calcMin","maxX","maxY","HALF_PI","minX","PI","minY","DoughnutController","pointStyle","textAlign","useBorderRadius","borderRadius","label","style","e","legendItem","legend","getter","toRadians","chartArea","arcs","spacing","maxSize","toPercentage","chartWeight","maxWidth","maxHeight","maxRadius","outerRadius","toDimension","innerRadius","radiusLength","animationOpts","centerX","centerY","animateScale","arc","metaData","total","formatNumber","ringWeightOffset","LineController","line","_dataset","animationsDisabled","_getStartAndCountOfVisiblePoints","_scaleRangesChanged","spanGaps","segment","maxGapLength","isNumber","directUpdate","pointsCount","prevParsed","nullData","border","firstPoint","lastPoint","PolarAreaController","_parseObjectDataRadialScale","minSize","datasetStartAngle","defaultAngle","PieController","RadarController","pointPosition","ScatterController","showLine","controllers","abstract","DateAdapterBase","_DateAdapterBase","members","adapters","binarySearch","metaset","intersect","_sorted","lookupMethod","_rlookupByKey","_lookupByKey","el","result","distanceToDefinedLo","distanceToDefinedHi","evaluateInteractionItems","position","handler","lo","hi","j","getDistanceMetricForAxis","useX","useY","pt1","pt2","deltaX","deltaY","getIntersectItems","useFinalPosition","includeInvisible","_isPointInArea","getNearestRadialItems","evaluationFunc","getAngleFromPoint","getNearestCartesianItems","distanceMetric","minDistance","inRange","distance","getNearestItems","getAxisItems","rangeMethod","intersectsItem","Interaction","getRelativePosition","STATIC_POSITIONS","filterByPosition","array","filterDynamicPositionByAxis","sortByWeight","v0","wrapBoxes","boxes","layoutBoxes","box","pos","stackWeight","buildStacks","layouts","wrap","_stack","setLayoutDims","params","vBoxMaxWidth","hBoxMaxHeight","layout","fullSize","buildLayoutBoxes","left","right","centerHorizontal","centerVertical","getCombinedMax","maxPadding","updateMaxPadding","boxPadding","updateDims","newWidth","newHeight","widthChanged","heightChanged","handleMaxPadding","updatePos","change","getMargins","marginForPositions","positions","margin","fitBoxes","refitBoxes","refit","changed","same","other","setBoxDims","width","height","placeBoxes","userPadding","weight","layoutItem","minPadding","padding","toPadding","availableWidth","availableHeight","verticalBoxes","horizontalBoxes","each","visibleVerticalBoxCount","BasePlatform","canvas","aspectRatio","listener","BasicPlatform","EXPANDO_KEY","EVENT_TYPES","isNullOrEmpty","initCanvas","renderHeight","renderWidth","displayWidth","readUsedSize","displayHeight","eventListenerOptions","supportsEventListenerOptions","addListener","node","removeListener","fromNativeEvent","nodeListContains","nodeList","createAttachObserver","observer","entries","trigger","createDetachObserver","drpListeningCharts","oldDevicePixelRatio","onWindowResize","dpr","resize","listenDevicePixelRatioChanges","unlistenDevicePixelRatioChanges","createResizeObserver","container","_getParentNode","throttled","w","releaseObserver","createProxyAndListen","proxy","DomPlatform","initial","proxies","getMaximumSize","_detectPlatform","_isDomSupported","Element","final","ret","autoSkip","ticks","tickOpts","determinedMaxTicks","determineMaxTicks","ticksLimit","majorIndices","getMajorIndices","numMajorIndices","first","newTicks","skipMajors","calculateSpacing","avgMajorSpacing","skip","offset","tickLength","maxScale","maxChart","evenMajorSpacing","getEvenSpacing","factors","_factorize","majorStart","majorEnd","len","diff","reverseAlign","align","offsetFromEdge","getTicksLimit","ticksLength","maxTicksLimit","sample","numItems","increment","getPixelForGridLine","offsetGridLines","validIndex","epsilon","lineValue","garbageCollect","caches","gc","gcLen","getTickMarkLength","getTitleHeight","fallback","font","toFont","createScaleContext","createTickContext","tick","titleAlign","_toLeftRightCenter","titleArgs","titleX","titleY","_alignStartEnd","positionAxisID","Scale","_Scale","raw","_userMin","_userMax","_suggestedMin","_suggestedMax","finiteOrDefault","metas","callback","margins","beginAtZero","grace","sampleSize","_addGrace","samplingEnabled","reversePixels","numTicks","minRotation","maxRotation","labelRotation","tickWidth","maxLabelDiagonal","labelSizes","maxLabelWidth","maxLabelHeight","_limitValue","toDegrees","titleOpts","gridOpts","display","isHorizontal","titleHeight","widest","highest","tickPadding","angleRadians","cos","sin","labelHeight","labelWidth","isRotated","labelsBelowTicks","offsetLeft","offsetRight","paddingLeft","paddingRight","paddingTop","paddingBottom","widths","heights","widestLabelSize","highestLabelSize","jlen","tickFont","fontString","lineHeight","nestedLabel","_measureText","valueAt","idx","pixel","decimal","_int16Range","_alignPixel","optionTicks","rot","h","grid","tl","borderOpts","axisWidth","axisHalfWidth","alignBorderValue","borderValue","alignedLineValue","tx1","ty1","tx2","ty2","x1","y1","x2","y2","limit","step","optsAtIndex","optsAtIndexBorder","lineWidth","lineColor","borderDash","borderDashOffset","tickColor","tickBorderDash","tickBorderDashOffset","crossAlign","mirror","tickAndPadding","hTickAndPadding","lineCount","textOffset","textBaseline","halfCount","strokeColor","strokeWidth","tickTextAlign","backdrop","labelPadding","backgroundColor","drawLine","p1","p2","lastLineWidth","clipArea","renderTextOptions","renderText","unclipArea","title","tz","gz","bz","fontSize","TypedRegistry","scope","override","proto","parentScope","isIChartComponent","id","registerDefaults","overrides","itemDefaults","merge","routeDefaults","routes","property","propertyParts","sourceName","sourceScope","parts","targetName","targetScope","Registry","typedRegistry","arg","reg","itemReg","registry","component","camelMethod","_capitalize","PluginService","hook","filter","descriptors","descriptor","plugin","all","plugins","allPlugins","createDescriptors","previousDescriptors","localIds","local","getOpts","pluginOpts","getIndexAxis","datasetDefaults","getAxisFromDefaultScaleID","getDefaultScaleIDFromAxis","idMatchesAxis","axisFromPosition","determineAxis","scaleOptions","getAxisFromDataset","retrieveAxisFromDatasets","boundDs","d","mergeScaleConfig","chartDefaults","configScales","chartIndexAxis","scaleConf","defaultId","defaultScaleOptions","mergeIf","defaultID","initOptions","initData","initConfig","keyCache","keysCached","cachedKeys","generate","addIfFound","set","Config","datasetType","mainScope","resetCache","_scopeCache","keyLists","resolver","subPrefixes","getResolver","needContext","isFunction","subResolver","_attachContext","descriptorDefaults","resolverCache","_createResolver","p","hasFunction","isScriptable","isIndexable","_descriptors","scriptable","indexable","version","KNOWN_POSITIONS","positionIsHorizontal","compare2Level","l1","l2","onAnimationsComplete","onAnimationProgress","getCanvas","instances","getChart","c","moveNumericKeys","intKey","determineLastEvent","lastEvent","inChartArea","isClick","Chart","invalidatePlugins","userConfig","initialCanvas","existingChart","uid","debounce","maintainAspectRatio","_aspectRatio","retinaScale","clearCanvas","newSize","newRatio","scalesOptions","axisOptions","scaleOpts","updated","isRadial","scaleType","scaleClass","hasUpdated","datasets","newControllers","ControllerClass","datasetElementType","dataElementType","animsDisabled","_active","_lastEvent","existingEvents","newEvents","setsEqual","_hiddenIndices","changes","_dataChanges","datasetCount","makeSet","changeSet","noArea","layers","clip","getDatasetClipArea","visible","listeners","platform","_add","_remove","detached","attached","enabled","prefix","activeElements","lastActive","_elementsEqual","pluginId","replay","hoverOptions","deactivated","activated","eventFilter","_isClickEvent","clipSelf","borderWidth","borderJoinStyle","outerAngleClip","_normalizeAngle","innerAngleClip","clipWidth","clipArc","pixelMargin","angleMargin","toRadiusCorners","_readValueToProps","parseBorderRadius$1","angleDelta","o","halfThickness","innerLimit","computeOuterLimit","outerArcLimit","rThetaToXY","theta","pathArc","circular","innerR","spacingOffset","alpha","noSpacingInnerRadius","noSpacingOuterRadius","avNogSpacingRadius","adjustedAngle","beta","angleOffset","outerStart","outerEnd","innerStart","innerEnd","outerStartAdjustedRadius","outerEndAdjustedRadius","outerStartAdjustedAngle","outerEndAdjustedAngle","innerStartAdjustedRadius","innerEndAdjustedRadius","innerStartAdjustedAngle","innerEndAdjustedAngle","outerMidAdjustedAngle","pCenter","p4","innerMidAdjustedAngle","p8","outerStartX","outerStartY","outerEndX","outerEndY","drawArc","fullCircles","drawBorder","inner","ArcElement","chartX","chartY","rAdjust","_circumference","nonZeroBetween","betweenAngles","withinRadius","_isBetween","halfAngle","halfRadius","fix","radiusOffset","setStyle","lineTo","previous","getLineMethod","_steppedLineTo","_bezierCurveTo","pathVars","paramsStart","paramsEnd","segmentStart","segmentEnd","outside","pathSegment","lineMethod","fastPathSegment","avgX","countX","prevX","lastY","pointIndex","drawX","truncX","_getSegmentMethod","_getInterpolationMethod","_steppedInterpolation","_bezierInterpolation","_pointInLine","strokePathWithCache","path","strokePathDirect","segments","segmentMethod","usePath2D","LineElement","_updateBezierControlPoints","_computeSegments","_boundSegments","_interpolate","interpolated","inRange$1","PointElement","mouseX","mouseY","drawPoint","getBarBounds","bar","half","skipOrLimit","parseBorderWidth","maxW","maxH","toTRBL","parseBorderRadius","enableBorderRadius","toTRBLCorners","maxR","enableBorder","boundingRects","bounds","skipX","skipY","hasRadius","addNormalRectPath","rect","inflateRect","amount","refRect","BarElement","borderColor","outer","addRectPath","addRoundedRectPath","BORDER_COLORS","BACKGROUND_COLORS","getBorderColor","getBackgroundColor","colorizeDefaultDataset","colorizeDoughnutDataset","colorizePolarAreaDataset","getColorizer","containsColorsDefinitions","k","containsColorsDefinition","containsDefaultColorsDefenitions","plugin_colors","_args","chartOptions","containsColorDefenition","colorizer","lttbDecimation","samples","decimated","bucketWidth","sampledIndex","endIndex","maxAreaPoint","maxArea","nextA","avgY","avgRangeStart","avgRangeEnd","avgRangeLength","rangeOffs","rangeTo","pointAx","pointAy","minMaxDecimation","minIndex","maxIndex","startIndex","xMin","dx","lastIndex","intermediateIndex1","intermediateIndex2","__spreadProps","__spreadValues","cleanDecimatedDataset","cleanDecimatedData","getStartAndCountOfVisiblePointsSimplified","pointCount","plugin_decimation","xAxis","threshold","_segments","tpoints","_findSegmentEnd","_getBounds","targetSegments","tgt","subBounds","fillSources","_boundSegment","fillSource","_getEdge","_pointsFromSegments","boundary","linePoints","_createBoundaryLine","_loop","_shouldApplyFill","source","_resolveTarget","sources","propagate","fill","visited","_decodeFill","parseFillOption","decodeTargetIndex","firstCh","_getTargetPixel","_getTargetValue","fillOption","_buildStackLine","sourcePoints","linesBelow","getLinesBelow","addPointsBelow","below","sourcePoint","postponed","findPoint","pointValue","firstValue","lastValue","simpleArc","_getTarget","getLineByIndex","computeBoundary","computeCircularBoundary","computeLinearBoundary","_drawfill","lineOpts","above","doFill","fillColor","clipVertical","clipHorizontal","clipY","lineLoop","clipX","src","notShape","clipBounds","interpolatedLineTo","targetLoop","interpolatedPoint","getBoxSize","labelOpts","boxHeight","boxWidth","itemsEqual","Legend","legendItems","labelFont","itemHeight","hitboxes","lineWidths","totalHeight","row","itemWidth","_itemHeight","columnSizes","heightLimit","totalWidth","currentColWidth","currentColHeight","col","calculateItemSize","rtl","rtlHelper","getRtlAdapter","hitbox","defaultColor","halfFontSize","cursor","drawLegendBox","drawOptions","drawPointLegend","yBoxTop","xBoxLeft","fillText","overrideTextDirection","textWidth","realX","_textX","fontLineHeight","calculateLegendItemHeight","restoreTextDirection","titleFont","titlePadding","topPaddingPlusHalfFontSize","hitBox","lh","isListened","hoveredItem","sameItem","calculateItemWidth","calculateItemHeight","legendItemText","plugin_legend","ci","usePointStyle","Title","textSize","fontOpts","createTitle","plugin_title","titleBlock","map","plugin_subtitle","positioners","xSet","eventPosition","nearestElement","distanceBetweenPoints","tp","pushOrConcat","toPush","splitNewlines","str","createTooltipItem","getTooltipSize","tooltip","body","footer","bodyFont","footerFont","titleLineCount","footerLineCount","bodyLineItemCount","combinedBodyLength","bodyItem","bodyLineHeight","widthPadding","maxLineWidth","determineYAlign","doesNotFitWithAlign","xAlign","caret","determineXAlign","yAlign","chartWidth","determineAlignment","alignX","alignY","paddingAndSize","getBackgroundPoint","alignment","caretSize","caretPadding","cornerRadius","topLeft","topRight","bottomLeft","bottomRight","getAlignedX","getBeforeAfterBodyLines","createTooltipContext","tooltipItems","overrideCallbacks","defaultCallbacks","noop","labelCount","tooltipItem","invokeCallbackWithFallback","Tooltip","beforeTitle","afterTitle","lines","bodyItems","scoped","beforeFooter","afterFooter","labelColors","labelPointStyles","labelTextColors","positionAndSize","backgroundPoint","tooltipPoint","caretPosition","ptX","ptY","x3","y3","pt","titleSpacing","labelColor","labelPointStyle","colorX","rtlColorX","yOffSet","colorY","outerX","innerX","bodySpacing","bodyAlign","displayColors","xLinePadding","fillLineOfText","bodyAlignForCalculation","textColor","tooltipSize","animX","animY","opacity","hasTooltipContent","positionChanged","caretX","caretY","plugin_tooltip","addIfString","addedLabels","findOrAddLabel","_getLabelForValue","CategoryScale","added","generateTicks$1","generationOptions","dataRange","precision","maxTicks","maxDigits","includeBounds","unit","maxSpaces","rmin","rmax","countDefined","minSpacing","niceNum","niceMin","niceMax","numSpaces","almostWhole","almostEquals","decimalPlaces","_decimalPlaces","relativeLabelSize","tickValue","rad","LinearScaleBase","setMin","setMax","minSign","maxSign","stepSize","numericGeneratorOptions","_setMinAndMaxByKey","LinearScale","Ticks","log10Floor","log10","changeExponent","m","isMajor","tickVal","steps","rangeExp","rangeStep","startExp","generateTicks","minExp","exp","significand","lastTick","LogarithmicScale","getTickBackdropHeight","measureLabelSize","_longestText","determineLimits","fitWithPointLabels","limits","valueCount","pointLabelOpts","additionalAngle","plFont","hLimits","vLimits","updateLimits","buildPointLabelItems","createPointLabelItem","itemOpts","outerDistance","extra","pointLabelPosition","yForAngle","getTextAlignForAngle","leftForTextAlign","isNotOverlapped","centerPointLabels","drawPointLabelBox","backdropColor","backdropLeft","backdropTop","backdropWidth","backdropHeight","drawPointLabels","pointLabels","pathRadiusLine","drawRadiusLine","gridLineOpts","createPointLabelContext","RadialLinearScale","leftMovement","rightMovement","topMovement","bottomMovement","angleMultiplier","scalingFactor","scaledDistance","pointLabel","distanceFromCenter","angleLines","INTERVALS","UNITS","sorter","parse","input","adapter","parser","round","isoWeekday","determineUnitForAutoTicks","minUnit","capacity","interval","determineUnitForFormatting","determineMajorUnit","addTick","time","timestamps","_lookup","timestamp","setMajorTicks","majorUnit","major","ticksFromTimestamps","TimeScale","_applyBounds","timeOpts","_filterBetween","minor","weekday","hasWeekday","format","formats","fmt","formatter","minorFormat","majorFormat","offsets","ticksOpts","tickLabelWidth","cosRotation","sinRotation","tickFontSize","exampleTime","displayFormats","exampleLabel","interpolate","table","prevSource","nextSource","prevTarget","nextTarget","span","TimeSeriesScale","registerables","isPlainObject","value","proto","isUnsafeProperty","key","merge","target","source","sourceKeys","i","key","isUnsafeProperty","sourceValue","targetValue","isMergeableValue","isPlainObject","value","NG_CHARTS_CONFIGURATION","InjectionToken","withDefaultRegisterables","registerables$1","registerables","provideCharts","configurations","config","merge","ThemeService","BehaviorSubject","options","__ngFactoryType__","ɵɵdefineInjectable","BaseChartDirective","EventEmitter","inject","ElementRef","NgZone","PLATFORM_ID","isPlatformBrowser","Chart","defaults","distinctUntilChanged","r","changes","requireRender","propertyNames","key","s","mode","index","hidden","event","active","ɵɵdefineDirective","ɵɵNgOnChangesFeature"],"x_google_ignoreList":[0,1,2,3,4,5,6]} \ No newline at end of file diff --git a/frontend/dist-instrumented/chunk-UEYMRICI.js b/frontend/dist-instrumented/chunk-UEYMRICI.js new file mode 100644 index 00000000..84940249 --- /dev/null +++ b/frontend/dist-instrumented/chunk-UEYMRICI.js @@ -0,0 +1,3 @@ +function cov_116wdvtal1(){var path="/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-UEYMRICI.js";var hash="f2be86696f8d64dd4c9c827e3876684cb117123f";var global=new Function("return this")();var gcv="__coverage__";var coverageData={path:"/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-UEYMRICI.js",statementMap:{"0":{start:{line:1,column:374},end:{line:1,column:2219}},"1":{start:{line:1,column:442},end:{line:1,column:502}},"2":{start:{line:1,column:480},end:{line:1,column:501}},"3":{start:{line:1,column:578},end:{line:1,column:635}},"4":{start:{line:1,column:616},end:{line:1,column:634}},"5":{start:{line:1,column:757},end:{line:1,column:821}},"6":{start:{line:1,column:795},end:{line:1,column:820}},"7":{start:{line:1,column:914},end:{line:1,column:975}},"8":{start:{line:1,column:952},end:{line:1,column:974}},"9":{start:{line:1,column:1113},end:{line:1,column:1180}},"10":{start:{line:1,column:1151},end:{line:1,column:1179}},"11":{start:{line:1,column:1265},end:{line:1,column:1322}},"12":{start:{line:1,column:1303},end:{line:1,column:1321}},"13":{start:{line:1,column:1424},end:{line:1,column:1489}},"14":{start:{line:1,column:1462},end:{line:1,column:1488}},"15":{start:{line:1,column:1551},end:{line:1,column:1617}},"16":{start:{line:1,column:1589},end:{line:1,column:1616}},"17":{start:{line:1,column:1704},end:{line:1,column:1764}},"18":{start:{line:1,column:1742},end:{line:1,column:1763}},"19":{start:{line:1,column:1892},end:{line:1,column:1955}},"20":{start:{line:1,column:1930},end:{line:1,column:1954}},"21":{start:{line:1,column:2082},end:{line:1,column:2145}},"22":{start:{line:1,column:2120},end:{line:1,column:2144}}},fnMap:{"0":{name:"(anonymous_0)",decl:{start:{line:1,column:438},end:{line:1,column:439}},loc:{start:{line:1,column:442},end:{line:1,column:502}},line:1},"1":{name:"(anonymous_1)",decl:{start:{line:1,column:477},end:{line:1,column:478}},loc:{start:{line:1,column:480},end:{line:1,column:501}},line:1},"2":{name:"(anonymous_2)",decl:{start:{line:1,column:574},end:{line:1,column:575}},loc:{start:{line:1,column:578},end:{line:1,column:635}},line:1},"3":{name:"(anonymous_3)",decl:{start:{line:1,column:613},end:{line:1,column:614}},loc:{start:{line:1,column:616},end:{line:1,column:634}},line:1},"4":{name:"(anonymous_4)",decl:{start:{line:1,column:753},end:{line:1,column:754}},loc:{start:{line:1,column:757},end:{line:1,column:821}},line:1},"5":{name:"(anonymous_5)",decl:{start:{line:1,column:792},end:{line:1,column:793}},loc:{start:{line:1,column:795},end:{line:1,column:820}},line:1},"6":{name:"(anonymous_6)",decl:{start:{line:1,column:910},end:{line:1,column:911}},loc:{start:{line:1,column:914},end:{line:1,column:975}},line:1},"7":{name:"(anonymous_7)",decl:{start:{line:1,column:949},end:{line:1,column:950}},loc:{start:{line:1,column:952},end:{line:1,column:974}},line:1},"8":{name:"(anonymous_8)",decl:{start:{line:1,column:1109},end:{line:1,column:1110}},loc:{start:{line:1,column:1113},end:{line:1,column:1180}},line:1},"9":{name:"(anonymous_9)",decl:{start:{line:1,column:1148},end:{line:1,column:1149}},loc:{start:{line:1,column:1151},end:{line:1,column:1179}},line:1},"10":{name:"(anonymous_10)",decl:{start:{line:1,column:1261},end:{line:1,column:1262}},loc:{start:{line:1,column:1265},end:{line:1,column:1322}},line:1},"11":{name:"(anonymous_11)",decl:{start:{line:1,column:1300},end:{line:1,column:1301}},loc:{start:{line:1,column:1303},end:{line:1,column:1321}},line:1},"12":{name:"(anonymous_12)",decl:{start:{line:1,column:1420},end:{line:1,column:1421}},loc:{start:{line:1,column:1424},end:{line:1,column:1489}},line:1},"13":{name:"(anonymous_13)",decl:{start:{line:1,column:1459},end:{line:1,column:1460}},loc:{start:{line:1,column:1462},end:{line:1,column:1488}},line:1},"14":{name:"(anonymous_14)",decl:{start:{line:1,column:1547},end:{line:1,column:1548}},loc:{start:{line:1,column:1551},end:{line:1,column:1617}},line:1},"15":{name:"(anonymous_15)",decl:{start:{line:1,column:1586},end:{line:1,column:1587}},loc:{start:{line:1,column:1589},end:{line:1,column:1616}},line:1},"16":{name:"(anonymous_16)",decl:{start:{line:1,column:1700},end:{line:1,column:1701}},loc:{start:{line:1,column:1704},end:{line:1,column:1764}},line:1},"17":{name:"(anonymous_17)",decl:{start:{line:1,column:1739},end:{line:1,column:1740}},loc:{start:{line:1,column:1742},end:{line:1,column:1763}},line:1},"18":{name:"(anonymous_18)",decl:{start:{line:1,column:1888},end:{line:1,column:1889}},loc:{start:{line:1,column:1892},end:{line:1,column:1955}},line:1},"19":{name:"(anonymous_19)",decl:{start:{line:1,column:1927},end:{line:1,column:1928}},loc:{start:{line:1,column:1930},end:{line:1,column:1954}},line:1},"20":{name:"(anonymous_20)",decl:{start:{line:1,column:2078},end:{line:1,column:2079}},loc:{start:{line:1,column:2082},end:{line:1,column:2145}},line:1},"21":{name:"(anonymous_21)",decl:{start:{line:1,column:2117},end:{line:1,column:2118}},loc:{start:{line:1,column:2120},end:{line:1,column:2144}},line:1}},branchMap:{},s:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0},f:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0},b:{},inputSourceMap:{version:3,sources:["src/app/features/main-layout/main-layout.routes.ts"],sourcesContent:["import { Routes } from '@angular/router';\nimport { authGuard } from '../../core/guards/auth.guard';\nimport { roleGuard } from '../../core/guards/role.guard';\nimport { UserRole } from '../../core/models/user-role.enum';\nimport { VIMAR_CLOUD_API_SERVICE } from '../../core/services/vimar-cloud-api.service.interface';\nimport { MyVimarCloudApiFeatureService } from '../my-vimar-integration/services/my-vimar-cloud-api-feature.service';\n\nexport const MAIN_LAYOUT_ROUTES: Routes = [\n {\n path: '',\n providers: [\n MyVimarCloudApiFeatureService,\n { provide: VIMAR_CLOUD_API_SERVICE, useExisting: MyVimarCloudApiFeatureService },\n ],\n loadComponent: () => import('./main-layout.component').then((m) => m.MainLayoutComponent),\n children: [\n {\n path: 'dashboard',\n data: { breadcrumb: 'Dashboard' },\n loadChildren: () => import('../dashboard/dashboard-page.routes').then((m) => m.DASHBOARD_ROUTES)\n },\n {\n path: 'alarms',\n children: [\n {\n path: 'alarm-management',\n data: { breadcrumb: 'Gestione allarmi' },\n canActivate: [authGuard],\n loadChildren: () => import('../alarm-management/alarm-management.routes').then((m) => m.ALARM_MANAGEMENT_ROUTES)\n },\n {\n path: 'alarm-history',\n data: { breadcrumb: 'Storico allarmi' },\n canActivate: [authGuard],\n loadChildren: () => import('../alarm-history/alarm-history.routes').then((m) => m.ALARM_HISTORY_ROUTES)\n },\n {\n path: 'alarm-configuration',\n canActivate: [authGuard, roleGuard],\n data: { requiredRole: UserRole.AMMINISTRATORE, breadcrumb: 'Configurazione allarmi' },\n loadChildren: () => import('../alarm-configuration/alarm-configuration.routes').then((m) => m.ALARM_CONFIGURATION_ROUTES)\n },\n ]\n },\n {\n path: 'analytics',\n data: { breadcrumb: 'Analytics' },\n canActivate: [authGuard],\n loadChildren: () => import('../analytics/analytics.routes').then((m) => m.ANALYTICS_ROUTES)\n },\n {\n path: 'apartment-monitor',\n data: { breadcrumb: 'Monitor appartamenti' },\n canActivate: [authGuard],\n loadChildren: () => import('../apartment-monitor/apartment-monitor.routes').then((m) => m.APARTMENT_MONITOR_ROUTES)\n },\n {\n path: 'device-interaction',\n canActivate: [authGuard],\n loadChildren: () =>\n import('../device-interaction/device-interaction.routes').then((m) => m.DEVICE_INTERACTION_ROUTES)\n },\n {\n path: 'notifications',\n data: { breadcrumb: 'Notifiche' },\n canActivate: [authGuard],\n loadChildren: () => import('../notification/notification.routes').then((m) => m.NOTIFICATION_ROUTES)\n },\n {\n path: 'ward-management',\n data: { requiredRole: UserRole.AMMINISTRATORE, breadcrumb: 'Gestione reparti' },\n canActivate: [authGuard, roleGuard],\n loadChildren: () => import('../ward-management/ward-management.routes').then((m) => m.WARD_MANAGEMENT_ROUTES)\n },\n {\n path: 'user-management',\n data: { requiredRole: UserRole.AMMINISTRATORE, breadcrumb: 'Gestione utenti' },\n canActivate: [authGuard, roleGuard],\n loadChildren: () => import('../user-management/user-management.routes').then((m) => m.USER_MANAGEMENT_ROUTES)\n },\n { path: '**', redirectTo: 'dashboard' }\n ]\n },\n { path: '**', redirectTo: 'dashboard' }\n];"],mappings:"gXAOO,IAAMA,EAA6B,CACtC,CACIC,KAAM,GACNC,UAAW,CACPC,EACA,CAAEC,QAASC,EAAyBC,YAAaH,CAA6B,CAAE,EAEpFI,cAAeA,IAAM,OAAO,qBAAyB,EAAEC,KAAMC,GAAMA,EAAEC,mBAAmB,EACxFC,SAAU,CACN,CACIV,KAAM,YACNW,KAAM,CAAEC,WAAY,WAAW,EAC/BC,aAAcA,IAAM,OAAO,qBAAoC,EAAEN,KAAMC,GAAMA,EAAEM,gBAAgB,GAEnG,CACId,KAAM,SACNU,SAAU,CACN,CACIV,KAAM,mBACNW,KAAM,CAAEC,WAAY,kBAAkB,EACtCG,YAAa,CAACC,CAAS,EACvBH,aAAcA,IAAM,OAAO,qBAA6C,EAAEN,KAAMC,GAAMA,EAAES,uBAAuB,GAEnH,CACIjB,KAAM,gBACNW,KAAM,CAAEC,WAAY,iBAAiB,EACrCG,YAAa,CAACC,CAAS,EACvBH,aAAcA,IAAM,OAAO,qBAAuC,EAAEN,KAAMC,GAAMA,EAAEU,oBAAoB,GAE1G,CACIlB,KAAM,sBACNe,YAAa,CAACC,EAAWG,CAAS,EAClCR,KAAM,CAAES,aAAcC,EAASC,eAAgBV,WAAY,wBAAwB,EACnFC,aAAcA,IAAM,OAAO,qBAAmD,EAAEN,KAAMC,GAAMA,EAAEe,0BAA0B,EAC3H,GAGT,CACIvB,KAAM,YACNW,KAAM,CAAEC,WAAY,WAAW,EAC/BG,YAAa,CAACC,CAAS,EACvBH,aAAcA,IAAM,OAAO,qBAA+B,EAAEN,KAAMC,GAAMA,EAAEgB,gBAAgB,GAE9F,CACIxB,KAAM,oBACNW,KAAM,CAAEC,WAAY,sBAAsB,EAC1CG,YAAa,CAACC,CAAS,EACvBH,aAAcA,IAAM,OAAO,qBAA+C,EAAEN,KAAMC,GAAMA,EAAEiB,wBAAwB,GAEtH,CACIzB,KAAM,qBACNe,YAAa,CAACC,CAAS,EACvBH,aAAcA,IACV,OAAO,qBAAiD,EAAEN,KAAMC,GAAMA,EAAEkB,yBAAyB,GAEzG,CACI1B,KAAM,gBACNW,KAAM,CAAEC,WAAY,WAAW,EAC/BG,YAAa,CAACC,CAAS,EACvBH,aAAcA,IAAM,OAAO,qBAAqC,EAAEN,KAAMC,GAAMA,EAAEmB,mBAAmB,GAEvG,CACI3B,KAAM,kBACNW,KAAM,CAAES,aAAcC,EAASC,eAAgBV,WAAY,kBAAkB,EAC7EG,YAAa,CAACC,EAAWG,CAAS,EAClCN,aAAcA,IAAM,OAAO,qBAA2C,EAAEN,KAAMC,GAAMA,EAAEoB,sBAAsB,GAEhH,CACI5B,KAAM,kBACNW,KAAM,CAAES,aAAcC,EAASC,eAAgBV,WAAY,iBAAiB,EAC5EG,YAAa,CAACC,EAAWG,CAAS,EAClCN,aAAcA,IAAM,OAAO,qBAA2C,EAAEN,KAAMC,GAAMA,EAAEqB,sBAAsB,GAEhH,CAAE7B,KAAM,KAAM8B,WAAY,WAAW,CAAE,GAG/C,CAAE9B,KAAM,KAAM8B,WAAY,WAAW,CAAE",names:["MAIN_LAYOUT_ROUTES","path","providers","MyVimarCloudApiFeatureService","provide","VIMAR_CLOUD_API_SERVICE","useExisting","loadComponent","then","m","MainLayoutComponent","children","data","breadcrumb","loadChildren","DASHBOARD_ROUTES","canActivate","authGuard","ALARM_MANAGEMENT_ROUTES","ALARM_HISTORY_ROUTES","roleGuard","requiredRole","UserRole","AMMINISTRATORE","ALARM_CONFIGURATION_ROUTES","ANALYTICS_ROUTES","APARTMENT_MONITOR_ROUTES","DEVICE_INTERACTION_ROUTES","NOTIFICATION_ROUTES","WARD_MANAGEMENT_ROUTES","USER_MANAGEMENT_ROUTES","redirectTo"]},_coverageSchema:"1a1c01bbd47fc00a2c39e90264f33305004495a9",hash:"f2be86696f8d64dd4c9c827e3876684cb117123f"};var coverage=global[gcv]||(global[gcv]={});if(!coverage[path]||coverage[path].hash!==hash){coverage[path]=coverageData;}var actualCoverage=coverage[path];{// @ts-ignore +cov_116wdvtal1=function(){return actualCoverage;};}return actualCoverage;}cov_116wdvtal1();import{a as e}from"./chunk-KVSAOLHG.js";import{a as i}from"./chunk-4BPWJDJR.js";import{a as t}from"./chunk-K2WBT5ZC.js";import"./chunk-FYGTVJAL.js";import{a as o}from"./chunk-6V7HPFWL.js";import"./chunk-VIBKONAW.js";import{a as r}from"./chunk-65RKWSY3.js";import"./chunk-2S5V5XEE.js";import"./chunk-F6OGAIBI.js";import"./chunk-RYTNMYZW.js";import"./chunk-VCZGUBMY.js";var c=(cov_116wdvtal1().s[0]++,[{path:"",providers:[i,{provide:o,useExisting:i}],loadComponent:()=>{cov_116wdvtal1().f[0]++;cov_116wdvtal1().s[1]++;return import("./chunk-J6KRJBIG.js").then(a=>{cov_116wdvtal1().f[1]++;cov_116wdvtal1().s[2]++;return a.MainLayoutComponent;});},children:[{path:"dashboard",data:{breadcrumb:"Dashboard"},loadChildren:()=>{cov_116wdvtal1().f[2]++;cov_116wdvtal1().s[3]++;return import("./chunk-6XDHGAD3.js").then(a=>{cov_116wdvtal1().f[3]++;cov_116wdvtal1().s[4]++;return a.DASHBOARD_ROUTES;});}},{path:"alarms",children:[{path:"alarm-management",data:{breadcrumb:"Gestione allarmi"},canActivate:[t],loadChildren:()=>{cov_116wdvtal1().f[4]++;cov_116wdvtal1().s[5]++;return import("./chunk-MXFQVIBA.js").then(a=>{cov_116wdvtal1().f[5]++;cov_116wdvtal1().s[6]++;return a.ALARM_MANAGEMENT_ROUTES;});}},{path:"alarm-history",data:{breadcrumb:"Storico allarmi"},canActivate:[t],loadChildren:()=>{cov_116wdvtal1().f[6]++;cov_116wdvtal1().s[7]++;return import("./chunk-QDUTXPLA.js").then(a=>{cov_116wdvtal1().f[7]++;cov_116wdvtal1().s[8]++;return a.ALARM_HISTORY_ROUTES;});}},{path:"alarm-configuration",canActivate:[t,e],data:{requiredRole:r.AMMINISTRATORE,breadcrumb:"Configurazione allarmi"},loadChildren:()=>{cov_116wdvtal1().f[8]++;cov_116wdvtal1().s[9]++;return import("./chunk-J6WV5SBY.js").then(a=>{cov_116wdvtal1().f[9]++;cov_116wdvtal1().s[10]++;return a.ALARM_CONFIGURATION_ROUTES;});}}]},{path:"analytics",data:{breadcrumb:"Analytics"},canActivate:[t],loadChildren:()=>{cov_116wdvtal1().f[10]++;cov_116wdvtal1().s[11]++;return import("./chunk-5JXBE777.js").then(a=>{cov_116wdvtal1().f[11]++;cov_116wdvtal1().s[12]++;return a.ANALYTICS_ROUTES;});}},{path:"apartment-monitor",data:{breadcrumb:"Monitor appartamenti"},canActivate:[t],loadChildren:()=>{cov_116wdvtal1().f[12]++;cov_116wdvtal1().s[13]++;return import("./chunk-DEQFIRW7.js").then(a=>{cov_116wdvtal1().f[13]++;cov_116wdvtal1().s[14]++;return a.APARTMENT_MONITOR_ROUTES;});}},{path:"device-interaction",canActivate:[t],loadChildren:()=>{cov_116wdvtal1().f[14]++;cov_116wdvtal1().s[15]++;return import("./chunk-646IGWEI.js").then(a=>{cov_116wdvtal1().f[15]++;cov_116wdvtal1().s[16]++;return a.DEVICE_INTERACTION_ROUTES;});}},{path:"notifications",data:{breadcrumb:"Notifiche"},canActivate:[t],loadChildren:()=>{cov_116wdvtal1().f[16]++;cov_116wdvtal1().s[17]++;return import("./chunk-4WOV63XI.js").then(a=>{cov_116wdvtal1().f[17]++;cov_116wdvtal1().s[18]++;return a.NOTIFICATION_ROUTES;});}},{path:"ward-management",data:{requiredRole:r.AMMINISTRATORE,breadcrumb:"Gestione reparti"},canActivate:[t,e],loadChildren:()=>{cov_116wdvtal1().f[18]++;cov_116wdvtal1().s[19]++;return import("./chunk-VWERK2XT.js").then(a=>{cov_116wdvtal1().f[19]++;cov_116wdvtal1().s[20]++;return a.WARD_MANAGEMENT_ROUTES;});}},{path:"user-management",data:{requiredRole:r.AMMINISTRATORE,breadcrumb:"Gestione utenti"},canActivate:[t,e],loadChildren:()=>{cov_116wdvtal1().f[20]++;cov_116wdvtal1().s[21]++;return import("./chunk-RKG5ANIH.js").then(a=>{cov_116wdvtal1().f[21]++;cov_116wdvtal1().s[22]++;return a.USER_MANAGEMENT_ROUTES;});}},{path:"**",redirectTo:"dashboard"}]},{path:"**",redirectTo:"dashboard"}]);export{c as MAIN_LAYOUT_ROUTES};//# sourceMappingURL=chunk-UEYMRICI.js.map +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjIiwiY292XzExNndkdnRhbDEiLCJzIiwicGF0aCIsInByb3ZpZGVycyIsImkiLCJwcm92aWRlIiwibyIsInVzZUV4aXN0aW5nIiwibG9hZENvbXBvbmVudCIsImYiLCJ0aGVuIiwiYSIsIk1haW5MYXlvdXRDb21wb25lbnQiLCJjaGlsZHJlbiIsImRhdGEiLCJicmVhZGNydW1iIiwibG9hZENoaWxkcmVuIiwiREFTSEJPQVJEX1JPVVRFUyIsImNhbkFjdGl2YXRlIiwidCIsIkFMQVJNX01BTkFHRU1FTlRfUk9VVEVTIiwiQUxBUk1fSElTVE9SWV9ST1VURVMiLCJlIiwicmVxdWlyZWRSb2xlIiwiciIsIkFNTUlOSVNUUkFUT1JFIiwiQUxBUk1fQ09ORklHVVJBVElPTl9ST1VURVMiLCJBTkFMWVRJQ1NfUk9VVEVTIiwiQVBBUlRNRU5UX01PTklUT1JfUk9VVEVTIiwiREVWSUNFX0lOVEVSQUNUSU9OX1JPVVRFUyIsIk5PVElGSUNBVElPTl9ST1VURVMiLCJXQVJEX01BTkFHRU1FTlRfUk9VVEVTIiwiVVNFUl9NQU5BR0VNRU5UX1JPVVRFUyIsInJlZGlyZWN0VG8iLCJNQUlOX0xBWU9VVF9ST1VURVMiXSwic291cmNlcyI6WyJzcmMvYXBwL2ZlYXR1cmVzL21haW4tbGF5b3V0L21haW4tbGF5b3V0LnJvdXRlcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSb3V0ZXMgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgYXV0aEd1YXJkIH0gZnJvbSAnLi4vLi4vY29yZS9ndWFyZHMvYXV0aC5ndWFyZCc7XG5pbXBvcnQgeyByb2xlR3VhcmQgfSBmcm9tICcuLi8uLi9jb3JlL2d1YXJkcy9yb2xlLmd1YXJkJztcbmltcG9ydCB7IFVzZXJSb2xlIH0gZnJvbSAnLi4vLi4vY29yZS9tb2RlbHMvdXNlci1yb2xlLmVudW0nO1xuaW1wb3J0IHsgVklNQVJfQ0xPVURfQVBJX1NFUlZJQ0UgfSBmcm9tICcuLi8uLi9jb3JlL3NlcnZpY2VzL3ZpbWFyLWNsb3VkLWFwaS5zZXJ2aWNlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBNeVZpbWFyQ2xvdWRBcGlGZWF0dXJlU2VydmljZSB9IGZyb20gJy4uL215LXZpbWFyLWludGVncmF0aW9uL3NlcnZpY2VzL215LXZpbWFyLWNsb3VkLWFwaS1mZWF0dXJlLnNlcnZpY2UnO1xuXG5leHBvcnQgY29uc3QgTUFJTl9MQVlPVVRfUk9VVEVTOiBSb3V0ZXMgPSBbXG4gICAge1xuICAgICAgICBwYXRoOiAnJyxcbiAgICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgICAgICBNeVZpbWFyQ2xvdWRBcGlGZWF0dXJlU2VydmljZSxcbiAgICAgICAgICAgIHsgcHJvdmlkZTogVklNQVJfQ0xPVURfQVBJX1NFUlZJQ0UsIHVzZUV4aXN0aW5nOiBNeVZpbWFyQ2xvdWRBcGlGZWF0dXJlU2VydmljZSB9LFxuICAgICAgICBdLFxuICAgICAgICBsb2FkQ29tcG9uZW50OiAoKSA9PiBpbXBvcnQoJy4vbWFpbi1sYXlvdXQuY29tcG9uZW50JykudGhlbigobSkgPT4gbS5NYWluTGF5b3V0Q29tcG9uZW50KSxcbiAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBwYXRoOiAnZGFzaGJvYXJkJyxcbiAgICAgICAgICAgICAgICBkYXRhOiB7IGJyZWFkY3J1bWI6ICdEYXNoYm9hcmQnIH0sXG4gICAgICAgICAgICAgICAgbG9hZENoaWxkcmVuOiAoKSA9PiBpbXBvcnQoJy4uL2Rhc2hib2FyZC9kYXNoYm9hcmQtcGFnZS5yb3V0ZXMnKS50aGVuKChtKSA9PiBtLkRBU0hCT0FSRF9ST1VURVMpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHBhdGg6ICdhbGFybXMnLFxuICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhdGg6ICdhbGFybS1tYW5hZ2VtZW50JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHsgYnJlYWRjcnVtYjogJ0dlc3Rpb25lIGFsbGFybWknIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBjYW5BY3RpdmF0ZTogW2F1dGhHdWFyZF0sXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2FkQ2hpbGRyZW46ICgpID0+IGltcG9ydCgnLi4vYWxhcm0tbWFuYWdlbWVudC9hbGFybS1tYW5hZ2VtZW50LnJvdXRlcycpLnRoZW4oKG0pID0+IG0uQUxBUk1fTUFOQUdFTUVOVF9ST1VURVMpXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhdGg6ICdhbGFybS1oaXN0b3J5JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHsgYnJlYWRjcnVtYjogJ1N0b3JpY28gYWxsYXJtaScgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbkFjdGl2YXRlOiBbYXV0aEd1YXJkXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRDaGlsZHJlbjogKCkgPT4gaW1wb3J0KCcuLi9hbGFybS1oaXN0b3J5L2FsYXJtLWhpc3Rvcnkucm91dGVzJykudGhlbigobSkgPT4gbS5BTEFSTV9ISVNUT1JZX1JPVVRFUylcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGF0aDogJ2FsYXJtLWNvbmZpZ3VyYXRpb24nLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FuQWN0aXZhdGU6IFthdXRoR3VhcmQsIHJvbGVHdWFyZF0sXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiB7IHJlcXVpcmVkUm9sZTogVXNlclJvbGUuQU1NSU5JU1RSQVRPUkUsIGJyZWFkY3J1bWI6ICdDb25maWd1cmF6aW9uZSBhbGxhcm1pJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgbG9hZENoaWxkcmVuOiAoKSA9PiBpbXBvcnQoJy4uL2FsYXJtLWNvbmZpZ3VyYXRpb24vYWxhcm0tY29uZmlndXJhdGlvbi5yb3V0ZXMnKS50aGVuKChtKSA9PiBtLkFMQVJNX0NPTkZJR1VSQVRJT05fUk9VVEVTKVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcGF0aDogJ2FuYWx5dGljcycsXG4gICAgICAgICAgICAgICAgZGF0YTogeyBicmVhZGNydW1iOiAnQW5hbHl0aWNzJyB9LFxuICAgICAgICAgICAgICAgIGNhbkFjdGl2YXRlOiBbYXV0aEd1YXJkXSxcbiAgICAgICAgICAgICAgICBsb2FkQ2hpbGRyZW46ICgpID0+IGltcG9ydCgnLi4vYW5hbHl0aWNzL2FuYWx5dGljcy5yb3V0ZXMnKS50aGVuKChtKSA9PiBtLkFOQUxZVElDU19ST1VURVMpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHBhdGg6ICdhcGFydG1lbnQtbW9uaXRvcicsXG4gICAgICAgICAgICAgICAgZGF0YTogeyBicmVhZGNydW1iOiAnTW9uaXRvciBhcHBhcnRhbWVudGknIH0sXG4gICAgICAgICAgICAgICAgY2FuQWN0aXZhdGU6IFthdXRoR3VhcmRdLFxuICAgICAgICAgICAgICAgIGxvYWRDaGlsZHJlbjogKCkgPT4gaW1wb3J0KCcuLi9hcGFydG1lbnQtbW9uaXRvci9hcGFydG1lbnQtbW9uaXRvci5yb3V0ZXMnKS50aGVuKChtKSA9PiBtLkFQQVJUTUVOVF9NT05JVE9SX1JPVVRFUylcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcGF0aDogJ2RldmljZS1pbnRlcmFjdGlvbicsXG4gICAgICAgICAgICAgICAgY2FuQWN0aXZhdGU6IFthdXRoR3VhcmRdLFxuICAgICAgICAgICAgICAgIGxvYWRDaGlsZHJlbjogKCkgPT5cbiAgICAgICAgICAgICAgICAgICAgaW1wb3J0KCcuLi9kZXZpY2UtaW50ZXJhY3Rpb24vZGV2aWNlLWludGVyYWN0aW9uLnJvdXRlcycpLnRoZW4oKG0pID0+IG0uREVWSUNFX0lOVEVSQUNUSU9OX1JPVVRFUylcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcGF0aDogJ25vdGlmaWNhdGlvbnMnLFxuICAgICAgICAgICAgICAgIGRhdGE6IHsgYnJlYWRjcnVtYjogJ05vdGlmaWNoZScgfSxcbiAgICAgICAgICAgICAgICBjYW5BY3RpdmF0ZTogW2F1dGhHdWFyZF0sXG4gICAgICAgICAgICAgICAgbG9hZENoaWxkcmVuOiAoKSA9PiBpbXBvcnQoJy4uL25vdGlmaWNhdGlvbi9ub3RpZmljYXRpb24ucm91dGVzJykudGhlbigobSkgPT4gbS5OT1RJRklDQVRJT05fUk9VVEVTKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBwYXRoOiAnd2FyZC1tYW5hZ2VtZW50JyxcbiAgICAgICAgICAgICAgICBkYXRhOiB7IHJlcXVpcmVkUm9sZTogVXNlclJvbGUuQU1NSU5JU1RSQVRPUkUsIGJyZWFkY3J1bWI6ICdHZXN0aW9uZSByZXBhcnRpJyB9LFxuICAgICAgICAgICAgICAgIGNhbkFjdGl2YXRlOiBbYXV0aEd1YXJkLCByb2xlR3VhcmRdLFxuICAgICAgICAgICAgICAgIGxvYWRDaGlsZHJlbjogKCkgPT4gaW1wb3J0KCcuLi93YXJkLW1hbmFnZW1lbnQvd2FyZC1tYW5hZ2VtZW50LnJvdXRlcycpLnRoZW4oKG0pID0+IG0uV0FSRF9NQU5BR0VNRU5UX1JPVVRFUylcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcGF0aDogJ3VzZXItbWFuYWdlbWVudCcsXG4gICAgICAgICAgICAgICAgZGF0YTogeyByZXF1aXJlZFJvbGU6IFVzZXJSb2xlLkFNTUlOSVNUUkFUT1JFLCBicmVhZGNydW1iOiAnR2VzdGlvbmUgdXRlbnRpJyB9LFxuICAgICAgICAgICAgICAgIGNhbkFjdGl2YXRlOiBbYXV0aEd1YXJkLCByb2xlR3VhcmRdLFxuICAgICAgICAgICAgICAgIGxvYWRDaGlsZHJlbjogKCkgPT4gaW1wb3J0KCcuLi91c2VyLW1hbmFnZW1lbnQvdXNlci1tYW5hZ2VtZW50LnJvdXRlcycpLnRoZW4oKG0pID0+IG0uVVNFUl9NQU5BR0VNRU5UX1JPVVRFUylcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7IHBhdGg6ICcqKicsIHJlZGlyZWN0VG86ICdkYXNoYm9hcmQnIH1cbiAgICAgICAgXVxuICAgIH0sXG4gICAgeyBwYXRoOiAnKionLCByZWRpcmVjdFRvOiAnZGFzaGJvYXJkJyB9XG5dOyJdLCJtYXBwaW5ncyI6IjsyY0FPTyxHQUFNLENBQUFBLENBQUEsRUFBQUMsY0FBQSxHQUFBQyxDQUFBLE1BQTZCLENBQ3RDLENBQ0lDLElBQUEsQ0FBTSxHQUNOQyxTQUFBLENBQVcsQ0FDUEMsQ0FBQSxDQUNBLENBQUVDLE9BQUEsQ0FBU0MsQ0FBQSxDQUF5QkMsV0FBQSxDQUFhSCxDQUE2QixDQUFFLEVBRXBGSSxhQUFBLENBQWVBLENBQUEsR0FBTSxDQUFBUixjQUFBLEdBQUFTLENBQUEsS0FBQVQsQ0FBQSxpQkFBQUMsQ0FBQSxvQkFBTyxxQkFBeUIsRUFBRVMsSUFBQSxDQUFNQyxDQUFBLEVBQU0sQ0FBQVgsY0FBQSxHQUFBUyxDQUFBLEtBQUFULENBQUEsaUJBQUFDLENBQUEsYUFBQVUsQ0FBQSxDQUFFQyxtQkFBbUIsQ0FBbkIsQ0FBbUIsSUFDeEZDLFFBQUEsQ0FBVSxDQUNOLENBQ0lYLElBQUEsQ0FBTSxZQUNOWSxJQUFBLENBQU0sQ0FBRUMsVUFBQSxDQUFZLFdBQVcsRUFDL0JDLFlBQUEsQ0FBY0EsQ0FBQSxHQUFNLENBQUFoQixjQUFBLEdBQUFTLENBQUEsS0FBQVQsQ0FBQSxpQkFBQUMsQ0FBQSxvQkFBTyxxQkFBb0MsRUFBRVMsSUFBQSxDQUFNQyxDQUFB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 \ No newline at end of file diff --git a/frontend/dist-instrumented/chunk-UEYMRICI.js.map b/frontend/dist-instrumented/chunk-UEYMRICI.js.map new file mode 100644 index 00000000..98bab291 --- /dev/null +++ b/frontend/dist-instrumented/chunk-UEYMRICI.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["src/app/features/main-layout/main-layout.routes.ts"], + "sourcesContent": ["import { Routes } from '@angular/router';\nimport { authGuard } from '../../core/guards/auth.guard';\nimport { roleGuard } from '../../core/guards/role.guard';\nimport { UserRole } from '../../core/models/user-role.enum';\nimport { VIMAR_CLOUD_API_SERVICE } from '../../core/services/vimar-cloud-api.service.interface';\nimport { MyVimarCloudApiFeatureService } from '../my-vimar-integration/services/my-vimar-cloud-api-feature.service';\n\nexport const MAIN_LAYOUT_ROUTES: Routes = [\n {\n path: '',\n providers: [\n MyVimarCloudApiFeatureService,\n { provide: VIMAR_CLOUD_API_SERVICE, useExisting: MyVimarCloudApiFeatureService },\n ],\n loadComponent: () => import('./main-layout.component').then((m) => m.MainLayoutComponent),\n children: [\n {\n path: 'dashboard',\n data: { breadcrumb: 'Dashboard' },\n loadChildren: () => import('../dashboard/dashboard-page.routes').then((m) => m.DASHBOARD_ROUTES)\n },\n {\n path: 'alarms',\n children: [\n {\n path: 'alarm-management',\n data: { breadcrumb: 'Gestione allarmi' },\n canActivate: [authGuard],\n loadChildren: () => import('../alarm-management/alarm-management.routes').then((m) => m.ALARM_MANAGEMENT_ROUTES)\n },\n {\n path: 'alarm-history',\n data: { breadcrumb: 'Storico allarmi' },\n canActivate: [authGuard],\n loadChildren: () => import('../alarm-history/alarm-history.routes').then((m) => m.ALARM_HISTORY_ROUTES)\n },\n {\n path: 'alarm-configuration',\n canActivate: [authGuard, roleGuard],\n data: { requiredRole: UserRole.AMMINISTRATORE, breadcrumb: 'Configurazione allarmi' },\n loadChildren: () => import('../alarm-configuration/alarm-configuration.routes').then((m) => m.ALARM_CONFIGURATION_ROUTES)\n },\n ]\n },\n {\n path: 'analytics',\n data: { breadcrumb: 'Analytics' },\n canActivate: [authGuard],\n loadChildren: () => import('../analytics/analytics.routes').then((m) => m.ANALYTICS_ROUTES)\n },\n {\n path: 'apartment-monitor',\n data: { breadcrumb: 'Monitor appartamenti' },\n canActivate: [authGuard],\n loadChildren: () => import('../apartment-monitor/apartment-monitor.routes').then((m) => m.APARTMENT_MONITOR_ROUTES)\n },\n {\n path: 'device-interaction',\n canActivate: [authGuard],\n loadChildren: () =>\n import('../device-interaction/device-interaction.routes').then((m) => m.DEVICE_INTERACTION_ROUTES)\n },\n {\n path: 'notifications',\n data: { breadcrumb: 'Notifiche' },\n canActivate: [authGuard],\n loadChildren: () => import('../notification/notification.routes').then((m) => m.NOTIFICATION_ROUTES)\n },\n {\n path: 'ward-management',\n data: { requiredRole: UserRole.AMMINISTRATORE, breadcrumb: 'Gestione reparti' },\n canActivate: [authGuard, roleGuard],\n loadChildren: () => import('../ward-management/ward-management.routes').then((m) => m.WARD_MANAGEMENT_ROUTES)\n },\n {\n path: 'user-management',\n data: { requiredRole: UserRole.AMMINISTRATORE, breadcrumb: 'Gestione utenti' },\n canActivate: [authGuard, roleGuard],\n loadChildren: () => import('../user-management/user-management.routes').then((m) => m.USER_MANAGEMENT_ROUTES)\n },\n { path: '**', redirectTo: 'dashboard' }\n ]\n },\n { path: '**', redirectTo: 'dashboard' }\n];"], + "mappings": "gXAOO,IAAMA,EAA6B,CACtC,CACIC,KAAM,GACNC,UAAW,CACPC,EACA,CAAEC,QAASC,EAAyBC,YAAaH,CAA6B,CAAE,EAEpFI,cAAeA,IAAM,OAAO,qBAAyB,EAAEC,KAAMC,GAAMA,EAAEC,mBAAmB,EACxFC,SAAU,CACN,CACIV,KAAM,YACNW,KAAM,CAAEC,WAAY,WAAW,EAC/BC,aAAcA,IAAM,OAAO,qBAAoC,EAAEN,KAAMC,GAAMA,EAAEM,gBAAgB,GAEnG,CACId,KAAM,SACNU,SAAU,CACN,CACIV,KAAM,mBACNW,KAAM,CAAEC,WAAY,kBAAkB,EACtCG,YAAa,CAACC,CAAS,EACvBH,aAAcA,IAAM,OAAO,qBAA6C,EAAEN,KAAMC,GAAMA,EAAES,uBAAuB,GAEnH,CACIjB,KAAM,gBACNW,KAAM,CAAEC,WAAY,iBAAiB,EACrCG,YAAa,CAACC,CAAS,EACvBH,aAAcA,IAAM,OAAO,qBAAuC,EAAEN,KAAMC,GAAMA,EAAEU,oBAAoB,GAE1G,CACIlB,KAAM,sBACNe,YAAa,CAACC,EAAWG,CAAS,EAClCR,KAAM,CAAES,aAAcC,EAASC,eAAgBV,WAAY,wBAAwB,EACnFC,aAAcA,IAAM,OAAO,qBAAmD,EAAEN,KAAMC,GAAMA,EAAEe,0BAA0B,EAC3H,GAGT,CACIvB,KAAM,YACNW,KAAM,CAAEC,WAAY,WAAW,EAC/BG,YAAa,CAACC,CAAS,EACvBH,aAAcA,IAAM,OAAO,qBAA+B,EAAEN,KAAMC,GAAMA,EAAEgB,gBAAgB,GAE9F,CACIxB,KAAM,oBACNW,KAAM,CAAEC,WAAY,sBAAsB,EAC1CG,YAAa,CAACC,CAAS,EACvBH,aAAcA,IAAM,OAAO,qBAA+C,EAAEN,KAAMC,GAAMA,EAAEiB,wBAAwB,GAEtH,CACIzB,KAAM,qBACNe,YAAa,CAACC,CAAS,EACvBH,aAAcA,IACV,OAAO,qBAAiD,EAAEN,KAAMC,GAAMA,EAAEkB,yBAAyB,GAEzG,CACI1B,KAAM,gBACNW,KAAM,CAAEC,WAAY,WAAW,EAC/BG,YAAa,CAACC,CAAS,EACvBH,aAAcA,IAAM,OAAO,qBAAqC,EAAEN,KAAMC,GAAMA,EAAEmB,mBAAmB,GAEvG,CACI3B,KAAM,kBACNW,KAAM,CAAES,aAAcC,EAASC,eAAgBV,WAAY,kBAAkB,EAC7EG,YAAa,CAACC,EAAWG,CAAS,EAClCN,aAAcA,IAAM,OAAO,qBAA2C,EAAEN,KAAMC,GAAMA,EAAEoB,sBAAsB,GAEhH,CACI5B,KAAM,kBACNW,KAAM,CAAES,aAAcC,EAASC,eAAgBV,WAAY,iBAAiB,EAC5EG,YAAa,CAACC,EAAWG,CAAS,EAClCN,aAAcA,IAAM,OAAO,qBAA2C,EAAEN,KAAMC,GAAMA,EAAEqB,sBAAsB,GAEhH,CAAE7B,KAAM,KAAM8B,WAAY,WAAW,CAAE,GAG/C,CAAE9B,KAAM,KAAM8B,WAAY,WAAW,CAAE", + "names": ["MAIN_LAYOUT_ROUTES", "path", "providers", "MyVimarCloudApiFeatureService", "provide", "VIMAR_CLOUD_API_SERVICE", "useExisting", "loadComponent", "then", "m", "MainLayoutComponent", "children", "data", "breadcrumb", "loadChildren", "DASHBOARD_ROUTES", "canActivate", "authGuard", "ALARM_MANAGEMENT_ROUTES", "ALARM_HISTORY_ROUTES", "roleGuard", "requiredRole", "UserRole", "AMMINISTRATORE", "ALARM_CONFIGURATION_ROUTES", "ANALYTICS_ROUTES", "APARTMENT_MONITOR_ROUTES", "DEVICE_INTERACTION_ROUTES", "NOTIFICATION_ROUTES", "WARD_MANAGEMENT_ROUTES", "USER_MANAGEMENT_ROUTES", "redirectTo"] +} diff --git a/frontend/dist-instrumented/chunk-V5PG7NSI.js b/frontend/dist-instrumented/chunk-V5PG7NSI.js new file mode 100644 index 00000000..7e43d44d --- /dev/null +++ b/frontend/dist-instrumented/chunk-V5PG7NSI.js @@ -0,0 +1,3 @@ +function cov_2rn93yh4x7(){var path="/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-V5PG7NSI.js";var hash="144b607c5b809d0d2305d32811242c701fe4e2f4";var global=new Function("return this")();var gcv="__coverage__";var coverageData={path:"/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-V5PG7NSI.js",statementMap:{"0":{start:{line:1,column:167},end:{line:1,column:633}},"1":{start:{line:1,column:636},end:{line:1,column:1404}},"2":{start:{line:1,column:659},end:{line:1,column:671}},"3":{start:{line:1,column:675},end:{line:1,column:700}},"4":{start:{line:1,column:681},end:{line:1,column:699}},"5":{start:{line:1,column:718},end:{line:1,column:747}},"6":{start:{line:1,column:730},end:{line:1,column:746}},"7":{start:{line:1,column:765},end:{line:1,column:1391}},"8":{start:{line:1,column:1139},end:{line:1,column:1354}},"9":{start:{line:1,column:1392},end:{line:1,column:1400}}},fnMap:{"0":{name:"(anonymous_0)",decl:{start:{line:1,column:637},end:{line:1,column:638}},loc:{start:{line:1,column:641},end:{line:1,column:1401}},line:1},"1":{name:"(anonymous_1)",decl:{start:{line:1,column:677},end:{line:1,column:678}},loc:{start:{line:1,column:681},end:{line:1,column:699}},line:1},"2":{name:"(anonymous_2)",decl:{start:{line:1,column:718},end:{line:1,column:719}},loc:{start:{line:1,column:729},end:{line:1,column:747}},line:1},"3":{name:"(anonymous_3)",decl:{start:{line:1,column:1125},end:{line:1,column:1126}},loc:{start:{line:1,column:1138},end:{line:1,column:1355}},line:1}},branchMap:{"0":{loc:{start:{line:1,column:741},end:{line:1,column:745}},type:"binary-expr",locations:[{start:{line:1,column:741},end:{line:1,column:742}},{start:{line:1,column:744},end:{line:1,column:745}}],line:1},"1":{loc:{start:{line:1,column:1139},end:{line:1,column:1205}},type:"binary-expr",locations:[{start:{line:1,column:1139},end:{line:1,column:1142}},{start:{line:1,column:1145},end:{line:1,column:1204}}],line:1},"2":{loc:{start:{line:1,column:1206},end:{line:1,column:1354}},type:"binary-expr",locations:[{start:{line:1,column:1206},end:{line:1,column:1209}},{start:{line:1,column:1212},end:{line:1,column:1353}}],line:1}},s:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0},f:{"0":0,"1":0,"2":0,"3":0},b:{"0":[0,0],"1":[0,0],"2":[0,0]},inputSourceMap:{version:3,sources:["src/app/shared/components/alarm-table/alarm-priority-indicator.component.ts","src/app/shared/components/alarm-table/alarm-priority-indicator.component.html"],sourcesContent:["import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { AlarmPriority } from '../../../core/alarm/models/alarm-priority.enum';\n\ntype PriorityUi = {\n readonly label: string;\n readonly bubbleClass: string;\n readonly symbolClass: string;\n readonly symbol: string;\n};\n\nconst PRIORITY_UI: Readonly> = {\n [AlarmPriority.WHITE]: {\n label: 'Informativa',\n bubbleClass: 'border-slate-400 text-slate-700',\n symbolClass: 'text-slate-600',\n symbol: 'i',\n },\n [AlarmPriority.GREEN]: {\n label: 'Bassa',\n bubbleClass: 'border-emerald-500 text-emerald-700',\n symbolClass: 'text-emerald-600',\n symbol: '\u2022',\n },\n [AlarmPriority.ORANGE]: {\n label: 'Media',\n bubbleClass: 'border-amber-500 text-amber-700',\n symbolClass: 'text-amber-600',\n symbol: '!',\n },\n [AlarmPriority.RED]: {\n label: 'Alta',\n bubbleClass: 'border-rose-500 text-rose-700',\n symbolClass: 'text-rose-600',\n symbol: '\u25B2',\n },\n};\n\n@Component({\n selector: 'app-alarm-priority-indicator',\n templateUrl: './alarm-priority-indicator.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AlarmPriorityIndicatorComponent {\n public readonly priority = input.required();\n\n public readonly ui = computed(() => PRIORITY_UI[this.priority()]);\n}\n","\n \n {{ priority() }}\n \n {{ ui().symbol }}\n"],mappings:"iKAUA,IAAMA,EAA2D,CAC7D,CAACC,EAAcC,KAAK,EAAG,CACnBC,MAAO,cACPC,YAAa,kCACbC,YAAa,iBACbC,OAAQ,KAEZ,CAACL,EAAcM,KAAK,EAAG,CACnBJ,MAAO,QACPC,YAAa,sCACbC,YAAa,mBACbC,OAAQ,UAEZ,CAACL,EAAcO,MAAM,EAAG,CACpBL,MAAO,QACPC,YAAa,kCACbC,YAAa,iBACbC,OAAQ,KAEZ,CAACL,EAAcQ,GAAG,EAAG,CACjBN,MAAO,OACPC,YAAa,gCACbC,YAAa,gBACbC,OAAQ,WASHI,GAA+B,IAAA,CAAtC,MAAOA,CAA+B,CACxBC,SAAWC,EAAMC,SAAQ,EAEzBC,GAAKC,EAAS,IAAMf,EAAY,KAAKW,SAAQ,CAAE,CAAC,6CAHvDD,EAA+B,2BAA/BA,EAA+BM,UAAA,CAAA,CAAA,8BAAA,CAAA,EAAAC,OAAA,CAAAN,SAAA,CAAA,EAAA,UAAA,CAAA,EAAAO,MAAA,EAAAC,KAAA,EAAAC,OAAA,CAAA,CAAA,EAAA,cAAA,eAAA,SAAA,EAAA,CAAA,EAAA,cAAA,MAAA,UAAA,eAAA,iBAAA,eAAA,SAAA,WAAA,OAAA,cAAA,WAAA,EAAA,CAAA,cAAA,OAAA,EAAA,UAAA,YAAA,cAAA,CAAA,EAAAC,SAAA,SAAAC,EAAAC,EAAA,CAAAD,EAAA,IC1C5CE,EAAA,EAAA,OAAA,CAAA,EAA4F,EAAA,OAAA,CAAA,EAIpFC,EAAA,CAAA,EACJC,EAAA,EACAF,EAAA,EAAA,OAAA,CAAA,EAA2FC,EAAA,CAAA,EAAiBC,EAAA,EAAO,kDAH/GC,EAAA,EAAAC,EAAAL,EAAAT,GAAA,EAAAV,WAAA,EACAuB,EAAA,EAAAE,EAAA,IAAAN,EAAAZ,SAAA,EAAA,GAAA,EAEyCgB,EAAA,EAAAC,EAAAL,EAAAT,GAAA,EAAAT,WAAA,EAA8CsB,EAAA,EAAAG,EAAAP,EAAAT,GAAA,EAAAR,MAAA,+CDoClFI,CAA+B,GAAA",names:["PRIORITY_UI","AlarmPriority","WHITE","label","bubbleClass","symbolClass","symbol","GREEN","ORANGE","RED","AlarmPriorityIndicatorComponent","priority","input","required","ui","computed","selectors","inputs","decls","vars","consts","template","rf","ctx","\u0275\u0275domElementStart","\u0275\u0275text","\u0275\u0275domElementEnd","\u0275\u0275advance","\u0275\u0275classMap","\u0275\u0275textInterpolate1","\u0275\u0275textInterpolate"]},_coverageSchema:"1a1c01bbd47fc00a2c39e90264f33305004495a9",hash:"144b607c5b809d0d2305d32811242c701fe4e2f4"};var coverage=global[gcv]||(global[gcv]={});if(!coverage[path]||coverage[path].hash!==hash){coverage[path]=coverageData;}var actualCoverage=coverage[path];{// @ts-ignore +cov_2rn93yh4x7=function(){return actualCoverage;};}return actualCoverage;}cov_2rn93yh4x7();import{a as i}from"./chunk-ZZLQRDHJ.js";import{Ab as s,Bb as d,Cb as p,Ka as m,Pb as u,Tb as c,Wa as b,gb as o,hb as l,wa as t,zb as n}from"./chunk-RYTNMYZW.js";var f=(cov_2rn93yh4x7().s[0]++,{[i.WHITE]:{label:"Informativa",bubbleClass:"border-slate-400 text-slate-700",symbolClass:"text-slate-600",symbol:"i"},[i.GREEN]:{label:"Bassa",bubbleClass:"border-emerald-500 text-emerald-700",symbolClass:"text-emerald-600",symbol:"\u2022"},[i.ORANGE]:{label:"Media",bubbleClass:"border-amber-500 text-amber-700",symbolClass:"text-amber-600",symbol:"!"},[i.RED]:{label:"Alta",bubbleClass:"border-rose-500 text-rose-700",symbolClass:"text-rose-600",symbol:"\u25B2"}}),I=(cov_2rn93yh4x7().s[1]++,(()=>{cov_2rn93yh4x7().f[0]++;class a{priority=(cov_2rn93yh4x7().s[2]++,c.required());ui=(cov_2rn93yh4x7().s[3]++,u(()=>{cov_2rn93yh4x7().f[1]++;cov_2rn93yh4x7().s[4]++;return f[this.priority()];}));static ɵfac=(cov_2rn93yh4x7().s[5]++,function(r){cov_2rn93yh4x7().f[2]++;cov_2rn93yh4x7().s[6]++;return new((cov_2rn93yh4x7().b[0][0]++,r)||(cov_2rn93yh4x7().b[0][1]++,a))();});static ɵcmp=(cov_2rn93yh4x7().s[7]++,m({type:a,selectors:[["app-alarm-priority-indicator"]],inputs:{priority:[1,"priority"]},decls:5,vars:7,consts:[[1,"inline-flex","items-center","gap-1.5"],[1,"inline-flex","h-5","min-w-5","items-center","justify-center","rounded-full","border","bg-white","px-1","text-[11px]","font-bold"],["aria-hidden","true",1,"text-sm","font-bold","leading-none"]],template:function(r,e){cov_2rn93yh4x7().f[3]++;cov_2rn93yh4x7().s[8]++;(cov_2rn93yh4x7().b[1][0]++,r&1)&&(cov_2rn93yh4x7().b[1][1]++,o(0,"span",0)(1,"span",1),s(2),l(),o(3,"span",2),s(4),l()()),(cov_2rn93yh4x7().b[2][0]++,r&2)&&(cov_2rn93yh4x7().b[2][1]++,b("aria-label","Priorita "+e.ui().label),t(),n(e.ui().bubbleClass),t(),p(" ",e.priority()," "),t(),n(e.ui().symbolClass),t(),d(e.ui().symbol));},encapsulation:2,changeDetection:0}));}cov_2rn93yh4x7().s[9]++;return a;})());export{I as a};//# sourceMappingURL=chunk-V5PG7NSI.js.map +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJmIiwiY292XzJybjkzeWg0eDciLCJzIiwiaSIsIldISVRFIiwibGFiZWwiLCJidWJibGVDbGFzcyIsInN5bWJvbENsYXNzIiwic3ltYm9sIiwiR1JFRU4iLCJPUkFOR0UiLCJSRUQiLCJJIiwiYSIsInByaW9yaXR5IiwiYyIsInJlcXVpcmVkIiwidWkiLCJ1IiwiybVmYWMiLCJyIiwiYiIsIsm1Y21wIiwibSIsInR5cGUiLCJzZWxlY3RvcnMiLCJpbnB1dHMiLCJkZWNscyIsInZhcnMiLCJjb25zdHMiLCJ0ZW1wbGF0ZSIsImUiLCJvIiwibCIsInQiLCJuIiwicCIsImQiLCJlbmNhcHN1bGF0aW9uIiwiY2hhbmdlRGV0ZWN0aW9uIl0sInNvdXJjZXMiOlsic3JjL2FwcC9zaGFyZWQvY29tcG9uZW50cy9hbGFybS10YWJsZS9hbGFybS1wcmlvcml0eS1pbmRpY2F0b3IuY29tcG9uZW50LnRzIiwic3JjL2FwcC9zaGFyZWQvY29tcG9uZW50cy9hbGFybS10YWJsZS9hbGFybS1wcmlvcml0eS1pbmRpY2F0b3IuY29tcG9uZW50Lmh0bWwiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgY29tcHV0ZWQsIGlucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBbGFybVByaW9yaXR5IH0gZnJvbSAnLi4vLi4vLi4vY29yZS9hbGFybS9tb2RlbHMvYWxhcm0tcHJpb3JpdHkuZW51bSc7XG5cbnR5cGUgUHJpb3JpdHlVaSA9IHtcbiAgICByZWFkb25seSBsYWJlbDogc3RyaW5nO1xuICAgIHJlYWRvbmx5IGJ1YmJsZUNsYXNzOiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgc3ltYm9sQ2xhc3M6IHN0cmluZztcbiAgICByZWFkb25seSBzeW1ib2w6IHN0cmluZztcbn07XG5cbmNvbnN0IFBSSU9SSVRZX1VJOiBSZWFkb25seTxSZWNvcmQ8QWxhcm1Qcmlvcml0eSwgUHJpb3JpdHlVaT4+ID0ge1xuICAgIFtBbGFybVByaW9yaXR5LldISVRFXToge1xuICAgICAgICBsYWJlbDogJ0luZm9ybWF0aXZhJyxcbiAgICAgICAgYnViYmxlQ2xhc3M6ICdib3JkZXItc2xhdGUtNDAwIHRleHQtc2xhdGUtNzAwJyxcbiAgICAgICAgc3ltYm9sQ2xhc3M6ICd0ZXh0LXNsYXRlLTYwMCcsXG4gICAgICAgIHN5bWJvbDogJ2knLFxuICAgIH0sXG4gICAgW0FsYXJtUHJpb3JpdHkuR1JFRU5dOiB7XG4gICAgICAgIGxhYmVsOiAnQmFzc2EnLFxuICAgICAgICBidWJibGVDbGFzczogJ2JvcmRlci1lbWVyYWxkLTUwMCB0ZXh0LWVtZXJhbGQtNzAwJyxcbiAgICAgICAgc3ltYm9sQ2xhc3M6ICd0ZXh0LWVtZXJhbGQtNjAwJyxcbiAgICAgICAgc3ltYm9sOiAn4oCiJyxcbiAgICB9LFxuICAgIFtBbGFybVByaW9yaXR5Lk9SQU5HRV06IHtcbiAgICAgICAgbGFiZWw6ICdNZWRpYScsXG4gICAgICAgIGJ1YmJsZUNsYXNzOiAnYm9yZGVyLWFtYmVyLTUwMCB0ZXh0LWFtYmVyLTcwMCcsXG4gICAgICAgIHN5bWJvbENsYXNzOiAndGV4dC1hbWJlci02MDAnLFxuICAgICAgICBzeW1ib2w6ICchJyxcbiAgICB9LFxuICAgIFtBbGFybVByaW9yaXR5LlJFRF06IHtcbiAgICAgICAgbGFiZWw6ICdBbHRhJyxcbiAgICAgICAgYnViYmxlQ2xhc3M6ICdib3JkZXItcm9zZS01MDAgdGV4dC1yb3NlLTcwMCcsXG4gICAgICAgIHN5bWJvbENsYXNzOiAndGV4dC1yb3NlLTYwMCcsXG4gICAgICAgIHN5bWJvbDogJ+KWsicsXG4gICAgfSxcbn07XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnYXBwLWFsYXJtLXByaW9yaXR5LWluZGljYXRvcicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2FsYXJtLXByaW9yaXR5LWluZGljYXRvci5jb21wb25lbnQuaHRtbCcsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIEFsYXJtUHJpb3JpdHlJbmRpY2F0b3JDb21wb25lbnQge1xuICAgIHB1YmxpYyByZWFkb25seSBwcmlvcml0eSA9IGlucHV0LnJlcXVpcmVkPEFsYXJtUHJpb3JpdHk+KCk7XG5cbiAgICBwdWJsaWMgcmVhZG9ubHkgdWkgPSBjb21wdXRlZCgoKSA9PiBQUklPUklUWV9VSVt0aGlzLnByaW9yaXR5KCldKTtcbn1cbiIsIjxzcGFuIGNsYXNzPVwiaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGdhcC0xLjVcIiBbYXR0ci5hcmlhLWxhYmVsXT1cIidQcmlvcml0YSAnICsgdWkoKS5sYWJlbFwiPlxuICAgIDxzcGFuXG4gICAgICAgIGNsYXNzPVwiaW5saW5lLWZsZXggaC01IG1pbi13LTUgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHJvdW5kZWQtZnVsbCBib3JkZXIgYmctd2hpdGUgcHgtMSB0ZXh0LVsxMXB4XSBmb250LWJvbGRcIlxuICAgICAgICBbY2xhc3NdPVwidWkoKS5idWJibGVDbGFzc1wiPlxuICAgICAgICB7eyBwcmlvcml0eSgpIH19XG4gICAgPC9zcGFuPlxuICAgIDxzcGFuIGNsYXNzPVwidGV4dC1zbSBmb250LWJvbGQgbGVhZGluZy1ub25lXCIgW2NsYXNzXT1cInVpKCkuc3ltYm9sQ2xhc3NcIiBhcmlhLWhpZGRlbj1cInRydWVcIj57eyB1aSgpLnN5bWJvbCB9fTwvc3Bhbj5cbjwvc3Bhbj4iXSwibWFwcGluZ3MiOiI7NFBBVUEsR0FBTSxDQUFBQSxDQUFBLEVBQUFDLGNBQUEsR0FBQUMsQ0FBQSxNQUEyRCxDQUM3RCxDQUFDQyxDQUFBLENBQWNDLEtBQUssRUFBRyxDQUNuQkMsS0FBQSxDQUFPLGNBQ1BDLFdBQUEsQ0FBYSxrQ0FDYkMsV0FBQSxDQUFhLGlCQUNiQyxNQUFBLENBQVEsS0FFWixDQUFDTCxDQUFBLENBQWNNLEtBQUssRUFBRyxDQUNuQkosS0FBQSxDQUFPLFFBQ1BDLFdBQUEs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 \ No newline at end of file diff --git a/frontend/dist-instrumented/chunk-V5PG7NSI.js.map b/frontend/dist-instrumented/chunk-V5PG7NSI.js.map new file mode 100644 index 00000000..a84dddd1 --- /dev/null +++ b/frontend/dist-instrumented/chunk-V5PG7NSI.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["src/app/shared/components/alarm-table/alarm-priority-indicator.component.ts", "src/app/shared/components/alarm-table/alarm-priority-indicator.component.html"], + "sourcesContent": ["import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { AlarmPriority } from '../../../core/alarm/models/alarm-priority.enum';\n\ntype PriorityUi = {\n readonly label: string;\n readonly bubbleClass: string;\n readonly symbolClass: string;\n readonly symbol: string;\n};\n\nconst PRIORITY_UI: Readonly> = {\n [AlarmPriority.WHITE]: {\n label: 'Informativa',\n bubbleClass: 'border-slate-400 text-slate-700',\n symbolClass: 'text-slate-600',\n symbol: 'i',\n },\n [AlarmPriority.GREEN]: {\n label: 'Bassa',\n bubbleClass: 'border-emerald-500 text-emerald-700',\n symbolClass: 'text-emerald-600',\n symbol: '•',\n },\n [AlarmPriority.ORANGE]: {\n label: 'Media',\n bubbleClass: 'border-amber-500 text-amber-700',\n symbolClass: 'text-amber-600',\n symbol: '!',\n },\n [AlarmPriority.RED]: {\n label: 'Alta',\n bubbleClass: 'border-rose-500 text-rose-700',\n symbolClass: 'text-rose-600',\n symbol: '▲',\n },\n};\n\n@Component({\n selector: 'app-alarm-priority-indicator',\n templateUrl: './alarm-priority-indicator.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AlarmPriorityIndicatorComponent {\n public readonly priority = input.required();\n\n public readonly ui = computed(() => PRIORITY_UI[this.priority()]);\n}\n", "\n \n {{ priority() }}\n \n {{ ui().symbol }}\n"], + "mappings": "iKAUA,IAAMA,EAA2D,CAC7D,CAACC,EAAcC,KAAK,EAAG,CACnBC,MAAO,cACPC,YAAa,kCACbC,YAAa,iBACbC,OAAQ,KAEZ,CAACL,EAAcM,KAAK,EAAG,CACnBJ,MAAO,QACPC,YAAa,sCACbC,YAAa,mBACbC,OAAQ,UAEZ,CAACL,EAAcO,MAAM,EAAG,CACpBL,MAAO,QACPC,YAAa,kCACbC,YAAa,iBACbC,OAAQ,KAEZ,CAACL,EAAcQ,GAAG,EAAG,CACjBN,MAAO,OACPC,YAAa,gCACbC,YAAa,gBACbC,OAAQ,WASHI,GAA+B,IAAA,CAAtC,MAAOA,CAA+B,CACxBC,SAAWC,EAAMC,SAAQ,EAEzBC,GAAKC,EAAS,IAAMf,EAAY,KAAKW,SAAQ,CAAE,CAAC,6CAHvDD,EAA+B,2BAA/BA,EAA+BM,UAAA,CAAA,CAAA,8BAAA,CAAA,EAAAC,OAAA,CAAAN,SAAA,CAAA,EAAA,UAAA,CAAA,EAAAO,MAAA,EAAAC,KAAA,EAAAC,OAAA,CAAA,CAAA,EAAA,cAAA,eAAA,SAAA,EAAA,CAAA,EAAA,cAAA,MAAA,UAAA,eAAA,iBAAA,eAAA,SAAA,WAAA,OAAA,cAAA,WAAA,EAAA,CAAA,cAAA,OAAA,EAAA,UAAA,YAAA,cAAA,CAAA,EAAAC,SAAA,SAAAC,EAAAC,EAAA,CAAAD,EAAA,IC1C5CE,EAAA,EAAA,OAAA,CAAA,EAA4F,EAAA,OAAA,CAAA,EAIpFC,EAAA,CAAA,EACJC,EAAA,EACAF,EAAA,EAAA,OAAA,CAAA,EAA2FC,EAAA,CAAA,EAAiBC,EAAA,EAAO,kDAH/GC,EAAA,EAAAC,EAAAL,EAAAT,GAAA,EAAAV,WAAA,EACAuB,EAAA,EAAAE,EAAA,IAAAN,EAAAZ,SAAA,EAAA,GAAA,EAEyCgB,EAAA,EAAAC,EAAAL,EAAAT,GAAA,EAAAT,WAAA,EAA8CsB,EAAA,EAAAG,EAAAP,EAAAT,GAAA,EAAAR,MAAA,+CDoClFI,CAA+B,GAAA", + "names": ["PRIORITY_UI", "AlarmPriority", "WHITE", "label", "bubbleClass", "symbolClass", "symbol", "GREEN", "ORANGE", "RED", "AlarmPriorityIndicatorComponent", "priority", "input", "required", "ui", "computed", "selectors", "inputs", "decls", "vars", "consts", "template", "rf", "ctx", "\u0275\u0275domElementStart", "\u0275\u0275text", "\u0275\u0275domElementEnd", "\u0275\u0275advance", "\u0275\u0275classMap", "\u0275\u0275textInterpolate1", "\u0275\u0275textInterpolate"] +} diff --git a/frontend/dist-instrumented/chunk-VCZGUBMY.js b/frontend/dist-instrumented/chunk-VCZGUBMY.js new file mode 100644 index 00000000..80ace2db --- /dev/null +++ b/frontend/dist-instrumented/chunk-VCZGUBMY.js @@ -0,0 +1,3 @@ +function cov_1wv4rv0sry(){var path="/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-VCZGUBMY.js";var hash="080b0455e26233fbcae124eb0273368bac0d7113";var global=new Function("return this")();var gcv="__coverage__";var coverageData={path:"/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-VCZGUBMY.js",statementMap:{"0":{start:{line:1,column:6},end:{line:1,column:27}},"1":{start:{line:1,column:30},end:{line:1,column:53}},"2":{start:{line:1,column:60},end:{line:1,column:92}},"3":{start:{line:1,column:99},end:{line:1,column:127}},"4":{start:{line:1,column:134},end:{line:1,column:165}},"5":{start:{line:1,column:168},end:{line:1,column:205}},"6":{start:{line:1,column:212},end:{line:1,column:293}},"7":{start:{line:1,column:221},end:{line:1,column:293}},"8":{start:{line:1,column:296},end:{line:1,column:406}},"9":{start:{line:1,column:304},end:{line:1,column:349}},"10":{start:{line:1,column:324},end:{line:1,column:349}},"11":{start:{line:1,column:349},end:{line:1,column:397}},"12":{start:{line:1,column:354},end:{line:1,column:397}},"13":{start:{line:1,column:372},end:{line:1,column:397}},"14":{start:{line:1,column:397},end:{line:1,column:405}},"15":{start:{line:1,column:409},end:{line:1,column:425}},"16":{start:{line:1,column:416},end:{line:1,column:425}},"17":{start:{line:1,column:432},end:{line:1,column:487}},"18":{start:{line:1,column:440},end:{line:1,column:486}},"19":{start:{line:1,column:455},end:{line:1,column:486}}},fnMap:{"0":{name:"(anonymous_0)",decl:{start:{line:1,column:212},end:{line:1,column:213}},loc:{start:{line:1,column:221},end:{line:1,column:293}},line:1},"1":{name:"(anonymous_1)",decl:{start:{line:1,column:296},end:{line:1,column:297}},loc:{start:{line:1,column:303},end:{line:1,column:406}},line:1},"2":{name:"(anonymous_2)",decl:{start:{line:1,column:409},end:{line:1,column:410}},loc:{start:{line:1,column:416},end:{line:1,column:425}},line:1},"3":{name:"(anonymous_3)",decl:{start:{line:1,column:432},end:{line:1,column:433}},loc:{start:{line:1,column:439},end:{line:1,column:487}},line:1}},branchMap:{"0":{loc:{start:{line:1,column:221},end:{line:1,column:293}},type:"cond-expr",locations:[{start:{line:1,column:228},end:{line:1,column:286}},{start:{line:1,column:287},end:{line:1,column:293}}],line:1},"1":{loc:{start:{line:1,column:324},end:{line:1,column:348}},type:"binary-expr",locations:[{start:{line:1,column:324},end:{line:1,column:335}},{start:{line:1,column:337},end:{line:1,column:348}}],line:1},"2":{loc:{start:{line:1,column:349},end:{line:1,column:397}},type:"if",locations:[{start:{line:1,column:349},end:{line:1,column:397}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"3":{loc:{start:{line:1,column:372},end:{line:1,column:396}},type:"binary-expr",locations:[{start:{line:1,column:372},end:{line:1,column:383}},{start:{line:1,column:385},end:{line:1,column:396}}],line:1}},s:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0},f:{"0":0,"1":0,"2":0,"3":0},b:{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0]},inputSourceMap:{version:3,sources:[],sourcesContent:[],mappings:"",names:[]},_coverageSchema:"1a1c01bbd47fc00a2c39e90264f33305004495a9",hash:"080b0455e26233fbcae124eb0273368bac0d7113"};var coverage=global[gcv]||(global[gcv]={});if(!coverage[path]||coverage[path].hash!==hash){coverage[path]=coverageData;}var actualCoverage=coverage[path];{// @ts-ignore +cov_1wv4rv0sry=function(){return actualCoverage;};}return actualCoverage;}cov_1wv4rv0sry();var f=(cov_1wv4rv0sry().s[0]++,Object.defineProperty),g=(cov_1wv4rv0sry().s[1]++,Object.defineProperties);var h=(cov_1wv4rv0sry().s[2]++,Object.getOwnPropertyDescriptors);var d=(cov_1wv4rv0sry().s[3]++,Object.getOwnPropertySymbols);var i=(cov_1wv4rv0sry().s[4]++,Object.prototype.hasOwnProperty),j=(cov_1wv4rv0sry().s[5]++,Object.prototype.propertyIsEnumerable);cov_1wv4rv0sry().s[6]++;cov_1wv4rv0sry().s[8]++;cov_1wv4rv0sry().s[15]++;var e=(c,a,b)=>{cov_1wv4rv0sry().f[0]++;cov_1wv4rv0sry().s[7]++;return a in c?(cov_1wv4rv0sry().b[0][0]++,f(c,a,{enumerable:!0,configurable:!0,writable:!0,value:b})):(cov_1wv4rv0sry().b[0][1]++,c[a]=b);},k=(c,a)=>{cov_1wv4rv0sry().f[1]++;cov_1wv4rv0sry().s[9]++;for(var b in a||={}){cov_1wv4rv0sry().s[10]++;(cov_1wv4rv0sry().b[1][0]++,i.call(a,b))&&(cov_1wv4rv0sry().b[1][1]++,e(c,b,a[b]));}cov_1wv4rv0sry().s[11]++;if(d){cov_1wv4rv0sry().b[2][0]++;cov_1wv4rv0sry().s[12]++;for(var b of d(a)){cov_1wv4rv0sry().s[13]++;(cov_1wv4rv0sry().b[3][0]++,j.call(a,b))&&(cov_1wv4rv0sry().b[3][1]++,e(c,b,a[b]));}}else{cov_1wv4rv0sry().b[2][1]++;}cov_1wv4rv0sry().s[14]++;return c;},l=(c,a)=>{cov_1wv4rv0sry().f[2]++;cov_1wv4rv0sry().s[16]++;return g(c,h(a));};cov_1wv4rv0sry().s[17]++;var m=(c,a)=>{cov_1wv4rv0sry().f[3]++;cov_1wv4rv0sry().s[18]++;for(var b in a){cov_1wv4rv0sry().s[19]++;f(c,b,{get:a[b],enumerable:!0});}};export{k as a,l as b,m as c};//# sourceMappingURL=chunk-VCZGUBMY.js.map +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sInNvdXJjZXMiOltdLCJzb3VyY2VzQ29udGVudCI6W10sIm1hcHBpbmdzIjoiIiwiaWdub3JlTGlzdCI6W119 \ No newline at end of file diff --git a/frontend/dist-instrumented/chunk-VCZGUBMY.js.map b/frontend/dist-instrumented/chunk-VCZGUBMY.js.map new file mode 100644 index 00000000..98652118 --- /dev/null +++ b/frontend/dist-instrumented/chunk-VCZGUBMY.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": [], + "sourcesContent": [], + "mappings": "", + "names": [] +} diff --git a/frontend/dist-instrumented/chunk-VIBKONAW.js b/frontend/dist-instrumented/chunk-VIBKONAW.js new file mode 100644 index 00000000..157b047c --- /dev/null +++ b/frontend/dist-instrumented/chunk-VIBKONAW.js @@ -0,0 +1,3 @@ +function cov_2of1a3sb7l(){var path="/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-VIBKONAW.js";var hash="2fa0940687db8d404c8e60d68758a11d89aa6ebe";var global=new Function("return this")();var gcv="__coverage__";var coverageData={path:"/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-VIBKONAW.js",statementMap:{"0":{start:{line:1,column:86},end:{line:1,column:1622}},"1":{start:{line:1,column:115},end:{line:1,column:256}},"2":{start:{line:1,column:275},end:{line:1,column:994}},"3":{start:{line:1,column:1017},end:{line:1,column:1085}},"4":{start:{line:1,column:1070},end:{line:1,column:1085}},"5":{start:{line:1,column:1085},end:{line:1,column:1165}},"6":{start:{line:1,column:1153},end:{line:1,column:1165}},"7":{start:{line:1,column:1171},end:{line:1,column:1186}},"8":{start:{line:1,column:1187},end:{line:1,column:1300}},"9":{start:{line:1,column:1263},end:{line:1,column:1281}},"10":{start:{line:1,column:1326},end:{line:1,column:1493}},"11":{start:{line:1,column:1511},end:{line:1,column:1540}},"12":{start:{line:1,column:1523},end:{line:1,column:1539}},"13":{start:{line:1,column:1559},end:{line:1,column:1609}},"14":{start:{line:1,column:1610},end:{line:1,column:1618}}},fnMap:{"0":{name:"(anonymous_0)",decl:{start:{line:1,column:87},end:{line:1,column:88}},loc:{start:{line:1,column:91},end:{line:1,column:1619}},line:1},"1":{name:"(anonymous_1)",decl:{start:{line:1,column:100},end:{line:1,column:101}},loc:{start:{line:1,column:114},end:{line:1,column:257}},line:1},"2":{name:"(anonymous_2)",decl:{start:{line:1,column:257},end:{line:1,column:258}},loc:{start:{line:1,column:274},end:{line:1,column:995}},line:1},"3":{name:"(anonymous_3)",decl:{start:{line:1,column:995},end:{line:1,column:996}},loc:{start:{line:1,column:1016},end:{line:1,column:1301}},line:1},"4":{name:"(anonymous_4)",decl:{start:{line:1,column:1260},end:{line:1,column:1261}},loc:{start:{line:1,column:1263},end:{line:1,column:1281}},line:1},"5":{name:"(anonymous_5)",decl:{start:{line:1,column:1301},end:{line:1,column:1302}},loc:{start:{line:1,column:1325},end:{line:1,column:1494}},line:1},"6":{name:"(anonymous_6)",decl:{start:{line:1,column:1511},end:{line:1,column:1512}},loc:{start:{line:1,column:1522},end:{line:1,column:1540}},line:1}},branchMap:{"0":{loc:{start:{line:1,column:122},end:{line:1,column:256}},type:"cond-expr",locations:[{start:{line:1,column:137},end:{line:1,column:159}},{start:{line:1,column:160},end:{line:1,column:256}}],line:1},"1":{loc:{start:{line:1,column:160},end:{line:1,column:256}},type:"cond-expr",locations:[{start:{line:1,column:190},end:{line:1,column:207}},{start:{line:1,column:208},end:{line:1,column:256}}],line:1},"2":{loc:{start:{line:1,column:208},end:{line:1,column:256}},type:"binary-expr",locations:[{start:{line:1,column:208},end:{line:1,column:237}},{start:{line:1,column:239},end:{line:1,column:256}}],line:1},"3":{loc:{start:{line:1,column:282},end:{line:1,column:994}},type:"cond-expr",locations:[{start:{line:1,column:295},end:{line:1,column:440}},{start:{line:1,column:441},end:{line:1,column:994}}],line:1},"4":{loc:{start:{line:1,column:295},end:{line:1,column:440}},type:"cond-expr",locations:[{start:{line:1,column:309},end:{line:1,column:369}},{start:{line:1,column:370},end:{line:1,column:440}}],line:1},"5":{loc:{start:{line:1,column:441},end:{line:1,column:994}},type:"cond-expr",locations:[{start:{line:1,column:456},end:{line:1,column:616}},{start:{line:1,column:617},end:{line:1,column:994}}],line:1},"6":{loc:{start:{line:1,column:456},end:{line:1,column:616}},type:"cond-expr",locations:[{start:{line:1,column:470},end:{line:1,column:553}},{start:{line:1,column:554},end:{line:1,column:616}}],line:1},"7":{loc:{start:{line:1,column:617},end:{line:1,column:994}},type:"cond-expr",locations:[{start:{line:1,column:632},end:{line:1,column:790}},{start:{line:1,column:791},end:{line:1,column:994}}],line:1},"8":{loc:{start:{line:1,column:632},end:{line:1,column:790}},type:"cond-expr",locations:[{start:{line:1,column:651},end:{line:1,column:669}},{start:{line:1,column:670},end:{line:1,column:790}}],line:1},"9":{loc:{start:{line:1,column:670},end:{line:1,column:790}},type:"cond-expr",locations:[{start:{line:1,column:684},end:{line:1,column:736}},{start:{line:1,column:737},end:{line:1,column:790}}],line:1},"10":{loc:{start:{line:1,column:791},end:{line:1,column:994}},type:"cond-expr",locations:[{start:{line:1,column:805},end:{line:1,column:948}},{start:{line:1,column:949},end:{line:1,column:994}}],line:1},"11":{loc:{start:{line:1,column:805},end:{line:1,column:948}},type:"cond-expr",locations:[{start:{line:1,column:819},end:{line:1,column:890}},{start:{line:1,column:891},end:{line:1,column:948}}],line:1},"12":{loc:{start:{line:1,column:949},end:{line:1,column:994}},type:"binary-expr",locations:[{start:{line:1,column:949},end:{line:1,column:975}},{start:{line:1,column:977},end:{line:1,column:994}}],line:1},"13":{loc:{start:{line:1,column:1017},end:{line:1,column:1085}},type:"if",locations:[{start:{line:1,column:1017},end:{line:1,column:1085}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"14":{loc:{start:{line:1,column:1020},end:{line:1,column:1069}},type:"binary-expr",locations:[{start:{line:1,column:1020},end:{line:1,column:1044}},{start:{line:1,column:1046},end:{line:1,column:1069}}],line:1},"15":{loc:{start:{line:1,column:1085},end:{line:1,column:1165}},type:"if",locations:[{start:{line:1,column:1085},end:{line:1,column:1165}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"16":{loc:{start:{line:1,column:1088},end:{line:1,column:1152}},type:"binary-expr",locations:[{start:{line:1,column:1088},end:{line:1,column:1112}},{start:{line:1,column:1114},end:{line:1,column:1128}},{start:{line:1,column:1130},end:{line:1,column:1152}}],line:1},"17":{loc:{start:{line:1,column:1194},end:{line:1,column:1300}},type:"cond-expr",locations:[{start:{line:1,column:1232},end:{line:1,column:1233}},{start:{line:1,column:1234},end:{line:1,column:1300}}],line:1},"18":{loc:{start:{line:1,column:1194},end:{line:1,column:1231}},type:"binary-expr",locations:[{start:{line:1,column:1194},end:{line:1,column:1212}},{start:{line:1,column:1214},end:{line:1,column:1231}}],line:1},"19":{loc:{start:{line:1,column:1234},end:{line:1,column:1300}},type:"cond-expr",locations:[{start:{line:1,column:1283},end:{line:1,column:1295}},{start:{line:1,column:1296},end:{line:1,column:1300}}],line:1},"20":{loc:{start:{line:1,column:1234},end:{line:1,column:1282}},type:"binary-expr",locations:[{start:{line:1,column:1234},end:{line:1,column:1250}},{start:{line:1,column:1252},end:{line:1,column:1282}}],line:1},"21":{loc:{start:{line:1,column:1333},end:{line:1,column:1493}},type:"cond-expr",locations:[{start:{line:1,column:1479},end:{line:1,column:1488}},{start:{line:1,column:1489},end:{line:1,column:1493}}],line:1},"22":{loc:{start:{line:1,column:1333},end:{line:1,column:1478}},type:"binary-expr",locations:[{start:{line:1,column:1333},end:{line:1,column:1351}},{start:{line:1,column:1353},end:{line:1,column:1378}},{start:{line:1,column:1380},end:{line:1,column:1398}},{start:{line:1,column:1400},end:{line:1,column:1408}},{start:{line:1,column:1410},end:{line:1,column:1423}},{start:{line:1,column:1425},end:{line:1,column:1451}},{start:{line:1,column:1453},end:{line:1,column:1478}}],line:1},"23":{loc:{start:{line:1,column:1534},end:{line:1,column:1538}},type:"binary-expr",locations:[{start:{line:1,column:1534},end:{line:1,column:1535}},{start:{line:1,column:1537},end:{line:1,column:1538}}],line:1}},s:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0},f:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0},b:{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0],"9":[0,0],"10":[0,0],"11":[0,0],"12":[0,0],"13":[0,0],"14":[0,0],"15":[0,0],"16":[0,0,0],"17":[0,0],"18":[0,0],"19":[0,0],"20":[0,0],"21":[0,0],"22":[0,0,0,0,0,0,0],"23":[0,0]},inputSourceMap:{version:3,sources:["src/app/core/services/api-error-display.service.ts"],sourcesContent:["import { HttpErrorResponse } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\n\nexport interface ApiErrorDisplayOptions {\n fallbackMessage: string;\n actionLabel?: string;\n forbiddenMessage?: string;\n nonHttpStrategy?: 'fallback' | 'message';\n}\n\n@Injectable({ providedIn: 'root' })\nexport class ApiErrorDisplayService {\n public toMessage(error: unknown, options: ApiErrorDisplayOptions): string {\n if (error instanceof HttpErrorResponse) {\n return this.mapHttpError(error, options);\n }\n\n if (options.nonHttpStrategy !== 'message') {\n return options.fallbackMessage;\n }\n\n return this.extractUnknownMessage(error) ?? options.fallbackMessage;\n }\n\n private mapHttpError(error: HttpErrorResponse, options: ApiErrorDisplayOptions): string {\n if (error.status === 0) {\n return options.actionLabel\n ? `Impossibile contattare il server durante ${options.actionLabel}.`\n : 'Impossibile contattare il server. Verifica la connessione e riprova.';\n }\n\n if (error.status === 401) {\n return options.actionLabel\n ? `Sessione scaduta o non valida. Effettua nuovamente il login per ${options.actionLabel}.`\n : 'Sessione scaduta o non valida. Effettua nuovamente il login.';\n }\n\n if (error.status === 403) {\n if (options.forbiddenMessage) {\n return options.forbiddenMessage;\n }\n\n return options.actionLabel\n ? `Non hai i permessi necessari per ${options.actionLabel}.`\n : 'Non hai i permessi necessari per questa operazione.';\n }\n\n if (error.status >= 500) {\n return options.actionLabel\n ? `Errore interno del server durante ${options.actionLabel}. Riprova tra poco.`\n : 'Errore interno del server. Riprova tra qualche istante.';\n }\n\n return this.extractHttpMessage(error) ?? options.fallbackMessage;\n }\n\n private extractHttpMessage(error: HttpErrorResponse): string | null {\n if (typeof error.error === 'string' && error.error.trim().length > 0) {\n return error.error;\n }\n\n if (typeof error.error !== 'object' || error.error === null || !('message' in error.error)) {\n return null;\n }\n\n const message = (error.error as { message?: unknown }).message;\n if (typeof message === 'string' && message.trim().length > 0) {\n return message;\n }\n\n if (Array.isArray(message) && message.every((entry) => typeof entry === 'string')) {\n return message.join('; ');\n }\n\n return null;\n }\n\n private extractUnknownMessage(error: unknown): string | null {\n if (error instanceof Error && error.message.trim().length > 0) {\n return error.message;\n }\n\n if (\n typeof error === 'object' &&\n error !== null &&\n 'message' in error &&\n typeof error.message === 'string' &&\n error.message.trim().length > 0\n ) {\n return error.message;\n }\n\n return null;\n }\n}\n"],mappings:"gFAWA,IAAaA,GAAsB,IAAA,CAA7B,MAAOA,CAAsB,CACxBC,UAAUC,EAAgBC,EAA+B,CAC5D,OAAID,aAAiBE,EACV,KAAKC,aAAaH,EAAOC,CAAO,EAGvCA,EAAQG,kBAAoB,UACrBH,EAAQI,gBAGZ,KAAKC,sBAAsBN,CAAK,GAAKC,EAAQI,eACxD,CAEQF,aAAaH,EAA0BC,EAA+B,CAC1E,OAAID,EAAMO,SAAW,EACVN,EAAQO,YACT,4CAA4CP,EAAQO,WAAW,IAC/D,uEAGNR,EAAMO,SAAW,IACVN,EAAQO,YACT,mEAAmEP,EAAQO,WAAW,IACtF,+DAGNR,EAAMO,SAAW,IACbN,EAAQQ,iBACDR,EAAQQ,iBAGZR,EAAQO,YACT,oCAAoCP,EAAQO,WAAW,IACvD,sDAGNR,EAAMO,QAAU,IACTN,EAAQO,YACT,qCAAqCP,EAAQO,WAAW,sBACxD,0DAGH,KAAKE,mBAAmBV,CAAK,GAAKC,EAAQI,eACrD,CAEQK,mBAAmBV,EAAwB,CAC/C,GAAI,OAAOA,EAAMA,OAAU,UAAYA,EAAMA,MAAMW,KAAI,EAAGC,OAAS,EAC/D,OAAOZ,EAAMA,MAGjB,GAAI,OAAOA,EAAMA,OAAU,UAAYA,EAAMA,QAAU,MAAQ,EAAE,YAAaA,EAAMA,OAChF,OAAO,KAGX,IAAMa,EAAWb,EAAMA,MAAgCa,QACvD,OAAI,OAAOA,GAAY,UAAYA,EAAQF,KAAI,EAAGC,OAAS,EAChDC,EAGPC,MAAMC,QAAQF,CAAO,GAAKA,EAAQG,MAAOC,GAAU,OAAOA,GAAU,QAAQ,EACrEJ,EAAQK,KAAK,IAAI,EAGrB,IACX,CAEQZ,sBAAsBN,EAAc,CAKxC,OAJIA,aAAiBmB,OAASnB,EAAMa,QAAQF,KAAI,EAAGC,OAAS,GAKxD,OAAOZ,GAAU,UACjBA,IAAU,MACV,YAAaA,GACb,OAAOA,EAAMa,SAAY,UACzBb,EAAMa,QAAQF,KAAI,EAAGC,OAAS,EAEvBZ,EAAMa,QAGV,IACX,4CAlFSf,EAAsB,6BAAtBA,EAAsBsB,QAAtBtB,EAAsBuB,UAAAC,WADT,MAAM,CAAA,SACnBxB,CAAsB,GAAA",names:["ApiErrorDisplayService","toMessage","error","options","HttpErrorResponse","mapHttpError","nonHttpStrategy","fallbackMessage","extractUnknownMessage","status","actionLabel","forbiddenMessage","extractHttpMessage","trim","length","message","Array","isArray","every","entry","join","Error","factory","\u0275fac","providedIn"]},_coverageSchema:"1a1c01bbd47fc00a2c39e90264f33305004495a9",hash:"2fa0940687db8d404c8e60d68758a11d89aa6ebe"};var coverage=global[gcv]||(global[gcv]={});if(!coverage[path]||coverage[path].hash!==hash){coverage[path]=coverageData;}var actualCoverage=coverage[path];{// @ts-ignore +cov_2of1a3sb7l=function(){return actualCoverage;};}return actualCoverage;}cov_2of1a3sb7l();import{a as s}from"./chunk-2S5V5XEE.js";import{L as n}from"./chunk-RYTNMYZW.js";var c=(cov_2of1a3sb7l().s[0]++,(()=>{cov_2of1a3sb7l().f[0]++;class a{toMessage(e,t){cov_2of1a3sb7l().f[1]++;cov_2of1a3sb7l().s[1]++;return e instanceof s?(cov_2of1a3sb7l().b[0][0]++,this.mapHttpError(e,t)):(cov_2of1a3sb7l().b[0][1]++,t.nonHttpStrategy!=="message"?(cov_2of1a3sb7l().b[1][0]++,t.fallbackMessage):(cov_2of1a3sb7l().b[1][1]++,(cov_2of1a3sb7l().b[2][0]++,this.extractUnknownMessage(e))??(cov_2of1a3sb7l().b[2][1]++,t.fallbackMessage)));}mapHttpError(e,t){cov_2of1a3sb7l().f[2]++;cov_2of1a3sb7l().s[2]++;return e.status===0?(cov_2of1a3sb7l().b[3][0]++,t.actionLabel?(cov_2of1a3sb7l().b[4][0]++,`Impossibile contattare il server durante ${t.actionLabel}.`):(cov_2of1a3sb7l().b[4][1]++,"Impossibile contattare il server. Verifica la connessione e riprova.")):(cov_2of1a3sb7l().b[3][1]++,e.status===401?(cov_2of1a3sb7l().b[5][0]++,t.actionLabel?(cov_2of1a3sb7l().b[6][0]++,`Sessione scaduta o non valida. Effettua nuovamente il login per ${t.actionLabel}.`):(cov_2of1a3sb7l().b[6][1]++,"Sessione scaduta o non valida. Effettua nuovamente il login.")):(cov_2of1a3sb7l().b[5][1]++,e.status===403?(cov_2of1a3sb7l().b[7][0]++,t.forbiddenMessage?(cov_2of1a3sb7l().b[8][0]++,t.forbiddenMessage):(cov_2of1a3sb7l().b[8][1]++,t.actionLabel?(cov_2of1a3sb7l().b[9][0]++,`Non hai i permessi necessari per ${t.actionLabel}.`):(cov_2of1a3sb7l().b[9][1]++,"Non hai i permessi necessari per questa operazione."))):(cov_2of1a3sb7l().b[7][1]++,e.status>=500?(cov_2of1a3sb7l().b[10][0]++,t.actionLabel?(cov_2of1a3sb7l().b[11][0]++,`Errore interno del server durante ${t.actionLabel}. Riprova tra poco.`):(cov_2of1a3sb7l().b[11][1]++,"Errore interno del server. Riprova tra qualche istante.")):(cov_2of1a3sb7l().b[10][1]++,(cov_2of1a3sb7l().b[12][0]++,this.extractHttpMessage(e))??(cov_2of1a3sb7l().b[12][1]++,t.fallbackMessage)))));}extractHttpMessage(e){cov_2of1a3sb7l().f[3]++;cov_2of1a3sb7l().s[3]++;if((cov_2of1a3sb7l().b[14][0]++,typeof e.error=="string")&&(cov_2of1a3sb7l().b[14][1]++,e.error.trim().length>0)){cov_2of1a3sb7l().b[13][0]++;cov_2of1a3sb7l().s[4]++;return e.error;}else{cov_2of1a3sb7l().b[13][1]++;}cov_2of1a3sb7l().s[5]++;if((cov_2of1a3sb7l().b[16][0]++,typeof e.error!="object")||(cov_2of1a3sb7l().b[16][1]++,e.error===null)||(cov_2of1a3sb7l().b[16][2]++,!("message"in e.error))){cov_2of1a3sb7l().b[15][0]++;cov_2of1a3sb7l().s[6]++;return null;}else{cov_2of1a3sb7l().b[15][1]++;}let t=(cov_2of1a3sb7l().s[7]++,e.error.message);cov_2of1a3sb7l().s[8]++;return(cov_2of1a3sb7l().b[18][0]++,typeof t=="string")&&(cov_2of1a3sb7l().b[18][1]++,t.trim().length>0)?(cov_2of1a3sb7l().b[17][0]++,t):(cov_2of1a3sb7l().b[17][1]++,(cov_2of1a3sb7l().b[20][0]++,Array.isArray(t))&&(cov_2of1a3sb7l().b[20][1]++,t.every(r=>{cov_2of1a3sb7l().f[4]++;cov_2of1a3sb7l().s[9]++;return typeof r=="string";}))?(cov_2of1a3sb7l().b[19][0]++,t.join("; ")):(cov_2of1a3sb7l().b[19][1]++,null));}extractUnknownMessage(e){cov_2of1a3sb7l().f[5]++;cov_2of1a3sb7l().s[10]++;return(cov_2of1a3sb7l().b[22][0]++,e instanceof Error)&&(cov_2of1a3sb7l().b[22][1]++,e.message.trim().length>0)||(cov_2of1a3sb7l().b[22][2]++,typeof e=="object")&&(cov_2of1a3sb7l().b[22][3]++,e!==null)&&(cov_2of1a3sb7l().b[22][4]++,"message"in e)&&(cov_2of1a3sb7l().b[22][5]++,typeof e.message=="string")&&(cov_2of1a3sb7l().b[22][6]++,e.message.trim().length>0)?(cov_2of1a3sb7l().b[21][0]++,e.message):(cov_2of1a3sb7l().b[21][1]++,null);}static ɵfac=(cov_2of1a3sb7l().s[11]++,function(t){cov_2of1a3sb7l().f[6]++;cov_2of1a3sb7l().s[12]++;return new((cov_2of1a3sb7l().b[23][0]++,t)||(cov_2of1a3sb7l().b[23][1]++,a))();});static ɵprov=(cov_2of1a3sb7l().s[13]++,n({token:a,factory:a.ɵfac,providedIn:"root"}));}cov_2of1a3sb7l().s[14]++;return a;})());export{c as a};//# sourceMappingURL=chunk-VIBKONAW.js.map +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjIiwiY292XzJvZjFhM3NiN2wiLCJzIiwiZiIsImEiLCJ0b01lc3NhZ2UiLCJlIiwidCIsImIiLCJtYXBIdHRwRXJyb3IiLCJub25IdHRwU3RyYXRlZ3kiLCJmYWxsYmFja01lc3NhZ2UiLCJleHRyYWN0VW5rbm93bk1lc3NhZ2UiLCJzdGF0dXMiLCJhY3Rpb25MYWJlbCIsImZvcmJpZGRlbk1lc3NhZ2UiLCJleHRyYWN0SHR0cE1lc3NhZ2UiLCJlcnJvciIsInRyaW0iLCJsZW5ndGgiLCJtZXNzYWdlIiwiQXJyYXkiLCJpc0FycmF5IiwiZXZlcnkiLCJyIiwiam9pbiIsIkVycm9yIiwiybVmYWMiLCLJtXByb3YiLCJuIiwidG9rZW4iLCJmYWN0b3J5IiwicHJvdmlkZWRJbiJdLCJzb3VyY2VzIjpbInNyYy9hcHAvY29yZS9zZXJ2aWNlcy9hcGktZXJyb3ItZGlzcGxheS5zZXJ2aWNlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBFcnJvclJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFwaUVycm9yRGlzcGxheU9wdGlvbnMge1xuICAgIGZhbGxiYWNrTWVzc2FnZTogc3RyaW5nO1xuICAgIGFjdGlvbkxhYmVsPzogc3RyaW5nO1xuICAgIGZvcmJpZGRlbk1lc3NhZ2U/OiBzdHJpbmc7XG4gICAgbm9uSHR0cFN0cmF0ZWd5PzogJ2ZhbGxiYWNrJyB8ICdtZXNzYWdlJztcbn1cblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBBcGlFcnJvckRpc3BsYXlTZXJ2aWNlIHtcbiAgICBwdWJsaWMgdG9NZXNzYWdlKGVycm9yOiB1bmtub3duLCBvcHRpb25zOiBBcGlFcnJvckRpc3BsYXlPcHRpb25zKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgSHR0cEVycm9yUmVzcG9uc2UpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1hcEh0dHBFcnJvcihlcnJvciwgb3B0aW9ucyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy5ub25IdHRwU3RyYXRlZ3kgIT09ICdtZXNzYWdlJykge1xuICAgICAgICAgICAgcmV0dXJuIG9wdGlvbnMuZmFsbGJhY2tNZXNzYWdlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZXh0cmFjdFVua25vd25NZXNzYWdlKGVycm9yKSA/PyBvcHRpb25zLmZhbGxiYWNrTWVzc2FnZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG1hcEh0dHBFcnJvcihlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UsIG9wdGlvbnM6IEFwaUVycm9yRGlzcGxheU9wdGlvbnMpOiBzdHJpbmcge1xuICAgICAgICBpZiAoZXJyb3Iuc3RhdHVzID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gb3B0aW9ucy5hY3Rpb25MYWJlbFxuICAgICAgICAgICAgICAgID8gYEltcG9zc2liaWxlIGNvbnRhdHRhcmUgaWwgc2VydmVyIGR1cmFudGUgJHtvcHRpb25zLmFjdGlvbkxhYmVsfS5gXG4gICAgICAgICAgICAgICAgOiAnSW1wb3NzaWJpbGUgY29udGF0dGFyZSBpbCBzZXJ2ZXIuIFZlcmlmaWNhIGxhIGNvbm5lc3Npb25lIGUgcmlwcm92YS4nO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVycm9yLnN0YXR1cyA9PT0gNDAxKSB7XG4gICAgICAgICAgICByZXR1cm4gb3B0aW9ucy5hY3Rpb25MYWJlbFxuICAgICAgICAgICAgICAgID8gYFNlc3Npb25lIHNjYWR1dGEgbyBub24gdmFsaWRhLiBFZmZldHR1YSBudW92YW1lbnRlIGlsIGxvZ2luIHBlciAke29wdGlvbnMuYWN0aW9uTGFiZWx9LmBcbiAgICAgICAgICAgICAgICA6ICdTZXNzaW9uZSBzY2FkdXRhIG8gbm9uIHZhbGlkYS4gRWZmZXR0dWEgbnVvdmFtZW50ZSBpbCBsb2dpbi4nO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVycm9yLnN0YXR1cyA9PT0gNDAzKSB7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5mb3JiaWRkZW5NZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9wdGlvbnMuZm9yYmlkZGVuTWVzc2FnZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIG9wdGlvbnMuYWN0aW9uTGFiZWxcbiAgICAgICAgICAgICAgICA/IGBOb24gaGFpIGkgcGVybWVzc2kgbmVjZXNzYXJpIHBlciAke29wdGlvbnMuYWN0aW9uTGFiZWx9LmBcbiAgICAgICAgICAgICAgICA6ICdOb24gaGFpIGkgcGVybWVzc2kgbmVjZXNzYXJpIHBlciBxdWVzdGEgb3BlcmF6aW9uZS4nO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVycm9yLnN0YXR1cyA+PSA1MDApIHtcbiAgICAgICAgICAgIHJldHVybiBvcHRpb25zLmFjdGlvbkxhYmVsXG4gICAgICAgICAgICAgICAgPyBgRXJyb3JlIGludGVybm8gZGVsIHNlcnZlciBkdXJhbnRlICR7b3B0aW9ucy5hY3Rpb25MYWJlbH0uIFJpcHJvdmEgdHJhIHBvY28uYFxuICAgICAgICAgICAgICAgIDogJ0Vycm9yZSBpbnRlcm5vIGRlbCBzZXJ2ZXIuIFJpcHJvdmEgdHJhIHF1YWxjaGUgaXN0YW50ZS4nO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZXh0cmFjdEh0dHBNZXNzYWdlKGVycm9yKSA/PyBvcHRpb25zLmZhbGxiYWNrTWVzc2FnZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGV4dHJhY3RIdHRwTWVzc2FnZShlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpOiBzdHJpbmcgfCBudWxsIHtcbiAgICAgICAgaWYgKHR5cGVvZiBlcnJvci5lcnJvciA9PT0gJ3N0cmluZycgJiYgZXJyb3IuZXJyb3IudHJpbSgpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHJldHVybiBlcnJvci5lcnJvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgZXJyb3IuZXJyb3IgIT09ICdvYmplY3QnIHx8IGVycm9yLmVycm9yID09PSBudWxsIHx8ICEoJ21lc3NhZ2UnIGluIGVycm9yLmVycm9yKSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBtZXNzYWdlID0gKGVycm9yLmVycm9yIGFzIHsgbWVzc2FnZT86IHVua25vd24gfSkubWVzc2FnZTtcbiAgICAgICAgaWYgKHR5cGVvZiBtZXNzYWdlID09PSAnc3RyaW5nJyAmJiBtZXNzYWdlLnRyaW0oKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KG1lc3NhZ2UpICYmIG1lc3NhZ2UuZXZlcnkoKGVudHJ5KSA9PiB0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnKSkge1xuICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2Uuam9pbignOyAnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHByaXZhdGUgZXh0cmFjdFVua25vd25NZXNzYWdlKGVycm9yOiB1bmtub3duKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yICYmIGVycm9yLm1lc3NhZ2UudHJpbSgpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHJldHVybiBlcnJvci5tZXNzYWdlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdHlwZW9mIGVycm9yID09PSAnb2JqZWN0JyAmJlxuICAgICAgICAgICAgZXJyb3IgIT09IG51bGwgJiZcbiAgICAgICAgICAgICdtZXNzYWdlJyBpbiBlcnJvciAmJlxuICAgICAgICAgICAgdHlwZW9mIGVycm9yLm1lc3NhZ2UgPT09ICdzdHJpbmcnICYmXG4gICAgICAgICAgICBlcnJvci5tZXNzYWdlLnRyaW0oKS5sZW5ndGggPiAwXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIGVycm9yLm1lc3NhZ2U7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG59XG4iXSwibWFwcGluZ3MiOiI7MktBV0EsR0FBYSxDQUFBQSxDQUFBLEVBQUFDLGNBQUEsR0FBQUMsQ0FBQSxPQUFzQixLQUFBRCxjQUFBLEdBQUFFLENBQUEsTUFBN0IsS0FBTyxDQUFBQyxDQUFzQixDQUN4QkMsVUFBVUMsQ0FBQSxDQUFnQkMsQ0FBQSxDQUErQixDQUFBTixjQUFBLEdBQUFFLENBQUEsS0FBQUYsQ0FBQSxpQkFBQUMsQ0FBQSxNQUM1RCxNQUFJLENBQUFJLENBQUEsV0FBaUIsQ0FBQUosQ0FBQSxFQUFBRCxjQUFBLEdBQUFPLENBQUEsU0FDVixLQUFLQyxZQUFBLENBQWFILENBQUEsQ0FBT0MsQ0FBTyxJQUFBTixjQUFBLEdBQUFPLENBQUEsU0FHdkNELENBQUEsQ0FBUUcsZUFBQSxHQUFvQixXQUFBVCxjQUFBLEdBQUFPLENBQUEsU0FDckJELENBQUEsQ0FBUUksZUFBQSxHQUFBVixjQUFBLEdBQUFPLENBQUEsU0FHWixDQUFBUCxjQUFBLEdBQUFPLENBQUEsY0FBS0kscUJBQUEsQ0FBc0JOLENBQUssS0FBQUwsY0FBQSxHQUFBTyxDQUFBLFNBQUtELENBQUEsQ0FBUUksZUFDeEQsS0FFUUYsYUFBYUgsQ0FBQSxDQUEwQkMsQ0FBQSxDQUErQixDQUFBTixjQUFBLEdBQUFFLENBQUEsS0FBQUYsQ0FBQSxpQkFBQUMsQ0FBQSxNQUMxRSxNQUFJLENBQUFJLENBQUEsQ0FBTU8sTUFBQSxHQUFXLEdBQUFaLGNBQUEsR0FBQU8sQ0FBQSxTQUNWRCxDQUFBLENBQVFPLFdBQUEsRUFBQWIsY0FBQSxHQUFBTyxDQUFBLFNBQ1QsNENBQTRDRCxDQUFBLENBQVFPLFdBQVcsTUFBQWIsY0FBQSxHQUFBTyxDQUFBLFNBQy9ELDBF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 \ No newline at end of file diff --git a/frontend/dist-instrumented/chunk-VIBKONAW.js.map b/frontend/dist-instrumented/chunk-VIBKONAW.js.map new file mode 100644 index 00000000..29a89dc9 --- /dev/null +++ b/frontend/dist-instrumented/chunk-VIBKONAW.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["src/app/core/services/api-error-display.service.ts"], + "sourcesContent": ["import { HttpErrorResponse } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\n\nexport interface ApiErrorDisplayOptions {\n fallbackMessage: string;\n actionLabel?: string;\n forbiddenMessage?: string;\n nonHttpStrategy?: 'fallback' | 'message';\n}\n\n@Injectable({ providedIn: 'root' })\nexport class ApiErrorDisplayService {\n public toMessage(error: unknown, options: ApiErrorDisplayOptions): string {\n if (error instanceof HttpErrorResponse) {\n return this.mapHttpError(error, options);\n }\n\n if (options.nonHttpStrategy !== 'message') {\n return options.fallbackMessage;\n }\n\n return this.extractUnknownMessage(error) ?? options.fallbackMessage;\n }\n\n private mapHttpError(error: HttpErrorResponse, options: ApiErrorDisplayOptions): string {\n if (error.status === 0) {\n return options.actionLabel\n ? `Impossibile contattare il server durante ${options.actionLabel}.`\n : 'Impossibile contattare il server. Verifica la connessione e riprova.';\n }\n\n if (error.status === 401) {\n return options.actionLabel\n ? `Sessione scaduta o non valida. Effettua nuovamente il login per ${options.actionLabel}.`\n : 'Sessione scaduta o non valida. Effettua nuovamente il login.';\n }\n\n if (error.status === 403) {\n if (options.forbiddenMessage) {\n return options.forbiddenMessage;\n }\n\n return options.actionLabel\n ? `Non hai i permessi necessari per ${options.actionLabel}.`\n : 'Non hai i permessi necessari per questa operazione.';\n }\n\n if (error.status >= 500) {\n return options.actionLabel\n ? `Errore interno del server durante ${options.actionLabel}. Riprova tra poco.`\n : 'Errore interno del server. Riprova tra qualche istante.';\n }\n\n return this.extractHttpMessage(error) ?? options.fallbackMessage;\n }\n\n private extractHttpMessage(error: HttpErrorResponse): string | null {\n if (typeof error.error === 'string' && error.error.trim().length > 0) {\n return error.error;\n }\n\n if (typeof error.error !== 'object' || error.error === null || !('message' in error.error)) {\n return null;\n }\n\n const message = (error.error as { message?: unknown }).message;\n if (typeof message === 'string' && message.trim().length > 0) {\n return message;\n }\n\n if (Array.isArray(message) && message.every((entry) => typeof entry === 'string')) {\n return message.join('; ');\n }\n\n return null;\n }\n\n private extractUnknownMessage(error: unknown): string | null {\n if (error instanceof Error && error.message.trim().length > 0) {\n return error.message;\n }\n\n if (\n typeof error === 'object' &&\n error !== null &&\n 'message' in error &&\n typeof error.message === 'string' &&\n error.message.trim().length > 0\n ) {\n return error.message;\n }\n\n return null;\n }\n}\n"], + "mappings": "gFAWA,IAAaA,GAAsB,IAAA,CAA7B,MAAOA,CAAsB,CACxBC,UAAUC,EAAgBC,EAA+B,CAC5D,OAAID,aAAiBE,EACV,KAAKC,aAAaH,EAAOC,CAAO,EAGvCA,EAAQG,kBAAoB,UACrBH,EAAQI,gBAGZ,KAAKC,sBAAsBN,CAAK,GAAKC,EAAQI,eACxD,CAEQF,aAAaH,EAA0BC,EAA+B,CAC1E,OAAID,EAAMO,SAAW,EACVN,EAAQO,YACT,4CAA4CP,EAAQO,WAAW,IAC/D,uEAGNR,EAAMO,SAAW,IACVN,EAAQO,YACT,mEAAmEP,EAAQO,WAAW,IACtF,+DAGNR,EAAMO,SAAW,IACbN,EAAQQ,iBACDR,EAAQQ,iBAGZR,EAAQO,YACT,oCAAoCP,EAAQO,WAAW,IACvD,sDAGNR,EAAMO,QAAU,IACTN,EAAQO,YACT,qCAAqCP,EAAQO,WAAW,sBACxD,0DAGH,KAAKE,mBAAmBV,CAAK,GAAKC,EAAQI,eACrD,CAEQK,mBAAmBV,EAAwB,CAC/C,GAAI,OAAOA,EAAMA,OAAU,UAAYA,EAAMA,MAAMW,KAAI,EAAGC,OAAS,EAC/D,OAAOZ,EAAMA,MAGjB,GAAI,OAAOA,EAAMA,OAAU,UAAYA,EAAMA,QAAU,MAAQ,EAAE,YAAaA,EAAMA,OAChF,OAAO,KAGX,IAAMa,EAAWb,EAAMA,MAAgCa,QACvD,OAAI,OAAOA,GAAY,UAAYA,EAAQF,KAAI,EAAGC,OAAS,EAChDC,EAGPC,MAAMC,QAAQF,CAAO,GAAKA,EAAQG,MAAOC,GAAU,OAAOA,GAAU,QAAQ,EACrEJ,EAAQK,KAAK,IAAI,EAGrB,IACX,CAEQZ,sBAAsBN,EAAc,CAKxC,OAJIA,aAAiBmB,OAASnB,EAAMa,QAAQF,KAAI,EAAGC,OAAS,GAKxD,OAAOZ,GAAU,UACjBA,IAAU,MACV,YAAaA,GACb,OAAOA,EAAMa,SAAY,UACzBb,EAAMa,QAAQF,KAAI,EAAGC,OAAS,EAEvBZ,EAAMa,QAGV,IACX,4CAlFSf,EAAsB,6BAAtBA,EAAsBsB,QAAtBtB,EAAsBuB,UAAAC,WADT,MAAM,CAAA,SACnBxB,CAAsB,GAAA", + "names": ["ApiErrorDisplayService", "toMessage", "error", "options", "HttpErrorResponse", "mapHttpError", "nonHttpStrategy", "fallbackMessage", "extractUnknownMessage", "status", "actionLabel", "forbiddenMessage", "extractHttpMessage", "trim", "length", "message", "Array", "isArray", "every", "entry", "join", "Error", "factory", "\u0275fac", "providedIn"] +} diff --git a/frontend/dist-instrumented/chunk-VJLNG5UH.js b/frontend/dist-instrumented/chunk-VJLNG5UH.js new file mode 100644 index 00000000..4d68e5ce --- /dev/null +++ b/frontend/dist-instrumented/chunk-VJLNG5UH.js @@ -0,0 +1,5 @@ +function cov_1s2jxigxia(){var path="/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-VJLNG5UH.js";var hash="94d1f1e71ee6c5ee58f66c760abbb534500a2d8d";var global=new Function("return this")();var gcv="__coverage__";var coverageData={path:"/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-VJLNG5UH.js",statementMap:{"0":{start:{line:1,column:855},end:{line:1,column:866}},"1":{start:{line:1,column:862},end:{line:1,column:866}},"2":{start:{line:1,column:884},end:{line:1,column:975}},"3":{start:{line:1,column:931},end:{line:1,column:942}},"4":{start:{line:1,column:943},end:{line:1,column:974}},"5":{start:{line:1,column:993},end:{line:1,column:1088}},"6":{start:{line:1,column:1096},end:{line:1,column:6510}},"7":{start:{line:1,column:1122},end:{line:1,column:1126}},"8":{start:{line:1,column:1134},end:{line:1,column:1138}},"9":{start:{line:1,column:1154},end:{line:1,column:1159}},"10":{start:{line:1,column:1176},end:{line:1,column:1181}},"11":{start:{line:1,column:1192},end:{line:1,column:1195}},"12":{start:{line:1,column:1206},end:{line:1,column:1209}},"13":{start:{line:1,column:1215},end:{line:1,column:1305}},"14":{start:{line:1,column:1317},end:{line:1,column:1348}},"15":{start:{line:1,column:1360},end:{line:1,column:1418}},"16":{start:{line:1,column:1382},end:{line:1,column:1411}},"17":{start:{line:1,column:1411},end:{line:1,column:1417}},"18":{start:{line:1,column:1424},end:{line:1,column:1456}},"19":{start:{line:1,column:1457},end:{line:1,column:1499}},"20":{start:{line:1,column:1511},end:{line:1,column:1532}},"21":{start:{line:1,column:1550},end:{line:1,column:1579}},"22":{start:{line:1,column:1562},end:{line:1,column:1578}},"23":{start:{line:1,column:1597},end:{line:1,column:6497}},"24":{start:{line:1,column:5248},end:{line:1,column:6427}},"25":{start:{line:1,column:5511},end:{line:1,column:5530}},"26":{start:{line:1,column:5737},end:{line:1,column:5756}},"27":{start:{line:1,column:6079},end:{line:1,column:6098}},"28":{start:{line:1,column:6162},end:{line:1,column:6181}},"29":{start:{line:1,column:6498},end:{line:1,column:6506}},"30":{start:{line:1,column:6518},end:{line:1,column:6529}},"31":{start:{line:1,column:6525},end:{line:1,column:6529}},"32":{start:{line:1,column:6547},end:{line:1,column:6659}},"33":{start:{line:1,column:6594},end:{line:1,column:6605}},"34":{start:{line:1,column:6608},end:{line:1,column:6611}},"35":{start:{line:1,column:6612},end:{line:1,column:6658}},"36":{start:{line:1,column:6677},end:{line:1,column:6769}},"37":{start:{line:1,column:6777},end:{line:1,column:12215}},"38":{start:{line:1,column:6803},end:{line:1,column:6807}},"39":{start:{line:1,column:6815},end:{line:1,column:6819}},"40":{start:{line:1,column:6835},end:{line:1,column:6840}},"41":{start:{line:1,column:6860},end:{line:1,column:6865}},"42":{start:{line:1,column:6876},end:{line:1,column:6879}},"43":{start:{line:1,column:6890},end:{line:1,column:6893}},"44":{start:{line:1,column:6899},end:{line:1,column:6988}},"45":{start:{line:1,column:7000},end:{line:1,column:7030}},"46":{start:{line:1,column:7042},end:{line:1,column:7100}},"47":{start:{line:1,column:7064},end:{line:1,column:7093}},"48":{start:{line:1,column:7093},end:{line:1,column:7099}},"49":{start:{line:1,column:7100},end:{line:1,column:7161}},"50":{start:{line:1,column:7173},end:{line:1,column:7194}},"51":{start:{line:1,column:7215},end:{line:1,column:7270}},"52":{start:{line:1,column:7288},end:{line:1,column:7317}},"53":{start:{line:1,column:7300},end:{line:1,column:7316}},"54":{start:{line:1,column:7335},end:{line:1,column:12202}},"55":{start:{line:1,column:10950},end:{line:1,column:12132}},"56":{start:{line:1,column:11221},end:{line:1,column:11240}},"57":{start:{line:1,column:11447},end:{line:1,column:11466}},"58":{start:{line:1,column:11783},end:{line:1,column:11802}},"59":{start:{line:1,column:11866},end:{line:1,column:11885}},"60":{start:{line:1,column:12203},end:{line:1,column:12211}},"61":{start:{line:1,column:12233},end:{line:1,column:12257}},"62":{start:{line:1,column:12275},end:{line:1,column:12299}},"63":{start:{line:1,column:12317},end:{line:1,column:12365}},"64":{start:{line:1,column:12383},end:{line:1,column:12439}},"65":{start:{line:1,column:12457},end:{line:1,column:12747}},"66":{start:{line:1,column:12573},end:{line:1,column:12576}},"67":{start:{line:1,column:12577},end:{line:1,column:12746}},"68":{start:{line:1,column:12755},end:{line:2,column:102}},"69":{start:{line:1,column:12781},end:{line:1,column:12785}},"70":{start:{line:1,column:12791},end:{line:1,column:12798}},"71":{start:{line:1,column:12809},end:{line:1,column:12812}},"72":{start:{line:1,column:12823},end:{line:1,column:12826}},"73":{start:{line:1,column:12832},end:{line:1,column:12909}},"74":{start:{line:1,column:12927},end:{line:1,column:13009}},"75":{start:{line:1,column:12940},end:{line:1,column:12951}},"76":{start:{line:1,column:12952},end:{line:1,column:13007}},"77":{start:{line:1,column:13021},end:{line:1,column:13046}},"78":{start:{line:1,column:13027},end:{line:1,column:13045}},"79":{start:{line:1,column:13058},end:{line:1,column:13116}},"80":{start:{line:1,column:13080},end:{line:1,column:13109}},"81":{start:{line:1,column:13109},end:{line:1,column:13115}},"82":{start:{line:1,column:13122},end:{line:1,column:13165}},"83":{start:{line:1,column:13166},end:{line:1,column:13188}},"84":{start:{line:1,column:13200},end:{line:1,column:13221}},"85":{start:{line:1,column:13239},end:{line:1,column:13268}},"86":{start:{line:1,column:13251},end:{line:1,column:13267}},"87":{start:{line:1,column:13286},end:{line:2,column:89}},"88":{start:{line:1,column:16265},end:{line:1,column:17671}},"89":{start:{line:1,column:16533},end:{line:1,column:16552}},"90":{start:{line:1,column:16642},end:{line:1,column:16661}},"91":{start:{line:1,column:16912},end:{line:1,column:16931}},"92":{start:{line:1,column:16995},end:{line:1,column:17014}},"93":{start:{line:2,column:90},end:{line:2,column:98}},"94":{start:{line:2,column:109},end:{line:2,column:120}},"95":{start:{line:2,column:116},end:{line:2,column:120}},"96":{start:{line:2,column:138},end:{line:2,column:352}},"97":{start:{line:2,column:152},end:{line:2,column:155}},"98":{start:{line:2,column:156},end:{line:2,column:351}},"99":{start:{line:2,column:283},end:{line:2,column:288}},"100":{start:{line:2,column:294},end:{line:2,column:297}},"101":{start:{line:2,column:298},end:{line:2,column:327}},"102":{start:{line:2,column:352},end:{line:2,column:368}},"103":{start:{line:2,column:386},end:{line:2,column:460}},"104":{start:{line:2,column:478},end:{line:2,column:848}},"105":{start:{line:2,column:492},end:{line:2,column:495}},"106":{start:{line:2,column:496},end:{line:2,column:847}},"107":{start:{line:2,column:735},end:{line:2,column:740}},"108":{start:{line:2,column:746},end:{line:2,column:750}},"109":{start:{line:2,column:751},end:{line:2,column:777}},"110":{start:{line:2,column:866},end:{line:2,column:1440}},"111":{start:{line:2,column:880},end:{line:2,column:883}},"112":{start:{line:2,column:884},end:{line:2,column:1439}},"113":{start:{line:2,column:946},end:{line:2,column:951}},"114":{start:{line:2,column:957},end:{line:2,column:961}},"115":{start:{line:2,column:962},end:{line:2,column:992}},"116":{start:{line:2,column:1095},end:{line:2,column:1100}},"117":{start:{line:2,column:1106},end:{line:2,column:1110}},"118":{start:{line:2,column:1111},end:{line:2,column:1143}},"119":{start:{line:2,column:1252},end:{line:2,column:1257}},"120":{start:{line:2,column:1263},end:{line:2,column:1267}},"121":{start:{line:2,column:1268},end:{line:2,column:1299}},"122":{start:{line:2,column:1440},end:{line:2,column:2092}},"123":{start:{line:2,column:1454},end:{line:2,column:1458}},"124":{start:{line:2,column:1459},end:{line:2,column:2091}},"125":{start:{line:2,column:2110},end:{line:2,column:2339}},"126":{start:{line:2,column:2124},end:{line:2,column:2127}},"127":{start:{line:2,column:2128},end:{line:2,column:2338}},"128":{start:{line:2,column:2180},end:{line:2,column:2194}},"129":{start:{line:2,column:2197},end:{line:2,column:2201}},"130":{start:{line:2,column:2202},end:{line:2,column:2230}},"131":{start:{line:2,column:2339},end:{line:2,column:2960}},"132":{start:{line:2,column:2353},end:{line:2,column:2364}},"133":{start:{line:2,column:2367},end:{line:2,column:2371}},"134":{start:{line:2,column:2372},end:{line:2,column:2959}},"135":{start:{line:2,column:2978},end:{line:2,column:3094}},"136":{start:{line:2,column:3112},end:{line:2,column:3488}},"137":{start:{line:2,column:3126},end:{line:2,column:3129}},"138":{start:{line:2,column:3130},end:{line:2,column:3487}},"139":{start:{line:2,column:3191},end:{line:2,column:3205}},"140":{start:{line:2,column:3208},end:{line:2,column:3212}},"141":{start:{line:2,column:3213},end:{line:2,column:3246}},"142":{start:{line:2,column:3360},end:{line:2,column:3374}},"143":{start:{line:2,column:3377},end:{line:2,column:3381}},"144":{start:{line:2,column:3384},end:{line:2,column:3388}},"145":{start:{line:2,column:3389},end:{line:2,column:3442}},"146":{start:{line:2,column:3488},end:{line:2,column:4132}},"147":{start:{line:2,column:3502},end:{line:2,column:3513}},"148":{start:{line:2,column:3516},end:{line:2,column:3520}},"149":{start:{line:2,column:3521},end:{line:2,column:4131}},"150":{start:{line:2,column:4150},end:{line:2,column:4237}},"151":{start:{line:2,column:4213},end:{line:2,column:4216}},"152":{start:{line:2,column:4217},end:{line:2,column:4236}},"153":{start:{line:2,column:4255},end:{line:2,column:4633}},"154":{start:{line:2,column:4269},end:{line:2,column:4272}},"155":{start:{line:2,column:4273},end:{line:2,column:4632}},"156":{start:{line:2,column:4428},end:{line:2,column:4432}},"157":{start:{line:2,column:4435},end:{line:2,column:4439}},"158":{start:{line:2,column:4440},end:{line:2,column:4471}},"159":{start:{line:2,column:4633},end:{line:2,column:4702}},"160":{start:{line:2,column:4647},end:{line:2,column:4648}},"161":{start:{line:2,column:4649},end:{line:2,column:4701}},"162":{start:{line:2,column:4720},end:{line:2,column:4883}},"163":{start:{line:2,column:4901},end:{line:2,column:5014}},"164":{start:{line:2,column:5032},end:{line:2,column:5305}},"165":{start:{line:2,column:5046},end:{line:2,column:5049}},"166":{start:{line:2,column:5050},end:{line:2,column:5304}},"167":{start:{line:2,column:5175},end:{line:2,column:5189}},"168":{start:{line:2,column:5192},end:{line:2,column:5196}},"169":{start:{line:2,column:5199},end:{line:2,column:5203}},"170":{start:{line:2,column:5204},end:{line:2,column:5259}},"171":{start:{line:2,column:5305},end:{line:2,column:5444}},"172":{start:{line:2,column:5319},end:{line:2,column:5330}},"173":{start:{line:2,column:5333},end:{line:2,column:5337}},"174":{start:{line:2,column:5338},end:{line:2,column:5443}},"175":{start:{line:2,column:5462},end:{line:2,column:5548}},"176":{start:{line:2,column:5525},end:{line:2,column:5528}},"177":{start:{line:2,column:5529},end:{line:2,column:5547}},"178":{start:{line:2,column:5566},end:{line:2,column:5927}},"179":{start:{line:2,column:5580},end:{line:2,column:5583}},"180":{start:{line:2,column:5584},end:{line:2,column:5926}},"181":{start:{line:2,column:5724},end:{line:2,column:5728}},"182":{start:{line:2,column:5731},end:{line:2,column:5735}},"183":{start:{line:2,column:5736},end:{line:2,column:5770}},"184":{start:{line:2,column:5927},end:{line:2,column:5995}},"185":{start:{line:2,column:5941},end:{line:2,column:5942}},"186":{start:{line:2,column:5943},end:{line:2,column:5994}},"187":{start:{line:2,column:6013},end:{line:2,column:6173}},"188":{start:{line:2,column:6191},end:{line:2,column:7020}},"189":{start:{line:2,column:6205},end:{line:2,column:6208}},"190":{start:{line:2,column:6209},end:{line:2,column:7019}},"191":{start:{line:2,column:6353},end:{line:2,column:6358}},"192":{start:{line:2,column:6364},end:{line:2,column:6368}},"193":{start:{line:2,column:6369},end:{line:2,column:6414}},"194":{start:{line:2,column:6543},end:{line:2,column:6548}},"195":{start:{line:2,column:6554},end:{line:2,column:6558}},"196":{start:{line:2,column:6559},end:{line:2,column:6591}},"197":{start:{line:2,column:6723},end:{line:2,column:6728}},"198":{start:{line:2,column:6734},end:{line:2,column:6738}},"199":{start:{line:2,column:6739},end:{line:2,column:6765}},"200":{start:{line:2,column:7020},end:{line:2,column:7373}},"201":{start:{line:2,column:7040},end:{line:2,column:7043}},"202":{start:{line:2,column:7046},end:{line:2,column:7049}},"203":{start:{line:2,column:7050},end:{line:2,column:7372}},"204":{start:{line:2,column:7391},end:{line:2,column:7454}},"205":{start:{line:2,column:7472},end:{line:2,column:7736}},"206":{start:{line:2,column:7486},end:{line:2,column:7489}},"207":{start:{line:2,column:7490},end:{line:2,column:7735}},"208":{start:{line:2,column:7557},end:{line:2,column:7562}},"209":{start:{line:2,column:7568},end:{line:2,column:7571}},"210":{start:{line:2,column:7572},end:{line:2,column:7657}},"211":{start:{line:2,column:7683},end:{line:2,column:7688}},"212":{start:{line:2,column:7694},end:{line:2,column:7697}},"213":{start:{line:2,column:7698},end:{line:2,column:7729}},"214":{start:{line:2,column:7736},end:{line:2,column:7784}},"215":{start:{line:2,column:7750},end:{line:2,column:7753}},"216":{start:{line:2,column:7754},end:{line:2,column:7783}},"217":{start:{line:2,column:7802},end:{line:2,column:8034}},"218":{start:{line:2,column:7816},end:{line:2,column:7819}},"219":{start:{line:2,column:7820},end:{line:2,column:8033}},"220":{start:{line:2,column:7893},end:{line:2,column:7898}},"221":{start:{line:2,column:7904},end:{line:2,column:7907}},"222":{start:{line:2,column:7908},end:{line:2,column:7945}},"223":{start:{line:2,column:7971},end:{line:2,column:7976}},"224":{start:{line:2,column:7982},end:{line:2,column:7985}},"225":{start:{line:2,column:7986},end:{line:2,column:8027}},"226":{start:{line:2,column:8034},end:{line:2,column:8147}},"227":{start:{line:2,column:8048},end:{line:2,column:8051}},"228":{start:{line:2,column:8052},end:{line:2,column:8146}},"229":{start:{line:2,column:8165},end:{line:2,column:8387}},"230":{start:{line:2,column:8179},end:{line:2,column:8182}},"231":{start:{line:2,column:8183},end:{line:2,column:8386}},"232":{start:{line:2,column:8252},end:{line:2,column:8257}},"233":{start:{line:2,column:8263},end:{line:2,column:8266}},"234":{start:{line:2,column:8267},end:{line:2,column:8301}},"235":{start:{line:2,column:8327},end:{line:2,column:8332}},"236":{start:{line:2,column:8338},end:{line:2,column:8341}},"237":{start:{line:2,column:8342},end:{line:2,column:8380}},"238":{start:{line:2,column:8387},end:{line:2,column:8494}},"239":{start:{line:2,column:8401},end:{line:2,column:8404}},"240":{start:{line:2,column:8405},end:{line:2,column:8493}},"241":{start:{line:2,column:8512},end:{line:2,column:8723}},"242":{start:{line:2,column:8526},end:{line:2,column:8529}},"243":{start:{line:2,column:8530},end:{line:2,column:8722}},"244":{start:{line:2,column:8584},end:{line:2,column:8589}},"245":{start:{line:2,column:8595},end:{line:2,column:8598}},"246":{start:{line:2,column:8599},end:{line:2,column:8637}},"247":{start:{line:2,column:8663},end:{line:2,column:8668}},"248":{start:{line:2,column:8674},end:{line:2,column:8677}},"249":{start:{line:2,column:8678},end:{line:2,column:8716}},"250":{start:{line:2,column:8723},end:{line:2,column:8812}},"251":{start:{line:2,column:8737},end:{line:2,column:8740}},"252":{start:{line:2,column:8741},end:{line:2,column:8811}},"253":{start:{line:2,column:8820},end:{line:3,column:106}},"254":{start:{line:2,column:8840},end:{line:2,column:8845}},"255":{start:{line:2,column:8855},end:{line:2,column:8860}},"256":{start:{line:2,column:8868},end:{line:2,column:8885}},"257":{start:{line:2,column:8897},end:{line:2,column:8918}},"258":{start:{line:2,column:8926},end:{line:2,column:8943}},"259":{start:{line:2,column:8960},end:{line:2,column:8967}},"260":{start:{line:2,column:8983},end:{line:2,column:8994}},"261":{start:{line:2,column:9010},end:{line:2,column:9017}},"262":{start:{line:2,column:9038},end:{line:2,column:9045}},"263":{start:{line:2,column:9057},end:{line:2,column:9067}},"264":{start:{line:2,column:9083},end:{line:2,column:9090}},"265":{start:{line:2,column:9119},end:{line:2,column:9126}},"266":{start:{line:2,column:9155},end:{line:2,column:9160}},"267":{start:{line:2,column:9173},end:{line:2,column:9180}},"268":{start:{line:2,column:9206},end:{line:2,column:9213}},"269":{start:{line:2,column:9239},end:{line:2,column:9244}},"270":{start:{line:2,column:9258},end:{line:2,column:9265}},"271":{start:{line:2,column:9280},end:{line:2,column:9285}},"272":{start:{line:2,column:9299},end:{line:2,column:9394}},"273":{start:{line:2,column:9312},end:{line:2,column:9333}},"274":{start:{line:2,column:9334},end:{line:2,column:9392}},"275":{start:{line:2,column:9372},end:{line:2,column:9380}},"276":{start:{line:2,column:9413},end:{line:2,column:9531}},"277":{start:{line:2,column:9426},end:{line:2,column:9452}},"278":{start:{line:2,column:9455},end:{line:2,column:9474}},"279":{start:{line:2,column:9475},end:{line:2,column:9529}},"280":{start:{line:2,column:9514},end:{line:2,column:9522}},"281":{start:{line:2,column:9548},end:{line:2,column:9610}},"282":{start:{line:2,column:9554},end:{line:2,column:9609}},"283":{start:{line:2,column:9627},end:{line:2,column:9694}},"284":{start:{line:2,column:9640},end:{line:2,column:9671}},"285":{start:{line:2,column:9672},end:{line:2,column:9692}},"286":{start:{line:2,column:9714},end:{line:2,column:9784}},"287":{start:{line:2,column:9727},end:{line:2,column:9761}},"288":{start:{line:2,column:9762},end:{line:2,column:9782}},"289":{start:{line:2,column:9796},end:{line:2,column:10378}},"290":{start:{line:2,column:9868},end:{line:2,column:10012}},"291":{start:{line:2,column:9911},end:{line:2,column:10005}},"292":{start:{line:2,column:10005},end:{line:2,column:10011}},"293":{start:{line:2,column:10018},end:{line:2,column:10039}},"294":{start:{line:2,column:10040},end:{line:2,column:10141}},"295":{start:{line:2,column:10060},end:{line:2,column:10068}},"296":{start:{line:2,column:10147},end:{line:2,column:10173}},"297":{start:{line:2,column:10174},end:{line:2,column:10297}},"298":{start:{line:2,column:10196},end:{line:2,column:10224}},"299":{start:{line:2,column:10246},end:{line:2,column:10254}},"300":{start:{line:2,column:10349},end:{line:2,column:10376}},"301":{start:{line:2,column:10393},end:{line:2,column:10438}},"302":{start:{line:2,column:10457},end:{line:2,column:10487}},"303":{start:{line:2,column:10502},end:{line:2,column:10573}},"304":{start:{line:2,column:10532},end:{line:2,column:10566}},"305":{start:{line:2,column:10566},end:{line:2,column:10572}},"306":{start:{line:2,column:10573},end:{line:2,column:10668}},"307":{start:{line:2,column:10688},end:{line:2,column:10719}},"308":{start:{line:2,column:10739},end:{line:2,column:10767}},"309":{start:{line:2,column:10789},end:{line:2,column:10822}},"310":{start:{line:2,column:10843},end:{line:2,column:10875}},"311":{start:{line:2,column:10891},end:{line:2,column:10924}},"312":{start:{line:2,column:10947},end:{line:2,column:11005}},"313":{start:{line:2,column:11020},end:{line:2,column:11081}},"314":{start:{line:2,column:11109},end:{line:2,column:11128}},"315":{start:{line:2,column:11129},end:{line:2,column:11150}},"316":{start:{line:2,column:11177},end:{line:2,column:11196}},"317":{start:{line:2,column:11197},end:{line:2,column:11265}},"318":{start:{line:2,column:11286},end:{line:2,column:11319}},"319":{start:{line:2,column:11336},end:{line:2,column:11388}},"320":{start:{line:2,column:11409},end:{line:2,column:11678}},"321":{start:{line:2,column:11596},end:{line:2,column:11676}},"322":{start:{line:2,column:11711},end:{line:2,column:11732}},"323":{start:{line:2,column:11733},end:{line:2,column:11882}},"324":{start:{line:2,column:11913},end:{line:2,column:12026}},"325":{start:{line:2,column:12047},end:{line:2,column:12126}},"326":{start:{line:2,column:12144},end:{line:2,column:12399}},"327":{start:{line:2,column:12323},end:{line:2,column:12397}},"328":{start:{line:2,column:12429},end:{line:2,column:12447}},"329":{start:{line:2,column:12448},end:{line:2,column:12507}},"330":{start:{line:2,column:12535},end:{line:2,column:12639}},"331":{start:{line:2,column:12657},end:{line:2,column:12735}},"332":{start:{line:2,column:12769},end:{line:2,column:12788}},"333":{start:{line:2,column:12789},end:{line:2,column:13018}},"334":{start:{line:2,column:13046},end:{line:2,column:13073}},"335":{start:{line:2,column:13100},end:{line:2,column:13119}},"336":{start:{line:2,column:13120},end:{line:2,column:13354}},"337":{start:{line:2,column:13379},end:{line:2,column:13398}},"338":{start:{line:2,column:13399},end:{line:2,column:13483}},"339":{start:{line:2,column:13512},end:{line:2,column:13536}},"340":{start:{line:2,column:13554},end:{line:2,column:13583}},"341":{start:{line:2,column:13566},end:{line:2,column:13582}},"342":{start:{line:2,column:13601},end:{line:3,column:93}},"343":{start:{line:2,column:22516},end:{line:2,column:23377}},"344":{start:{line:2,column:23118},end:{line:2,column:23376}},"345":{start:{line:3,column:94},end:{line:3,column:102}}},fnMap:{"0":{name:"(anonymous_0)",decl:{start:{line:1,column:855},end:{line:1,column:856}},loc:{start:{line:1,column:862},end:{line:1,column:866}},line:1},"1":{name:"ce",decl:{start:{line:1,column:876},end:{line:1,column:878}},loc:{start:{line:1,column:883},end:{line:1,column:976}},line:1},"2":{name:"pe",decl:{start:{line:1,column:985},end:{line:1,column:987}},loc:{start:{line:1,column:992},end:{line:1,column:1089}},line:1},"3":{name:"(anonymous_3)",decl:{start:{line:1,column:1097},end:{line:1,column:1098}},loc:{start:{line:1,column:1101},end:{line:1,column:6507}},line:1},"4":{name:"(anonymous_4)",decl:{start:{line:1,column:1306},end:{line:1,column:1307}},loc:{start:{line:1,column:1316},end:{line:1,column:1349}},line:1},"5":{name:"(anonymous_5)",decl:{start:{line:1,column:1349},end:{line:1,column:1350}},loc:{start:{line:1,column:1359},end:{line:1,column:1500}},line:1},"6":{name:"(anonymous_6)",decl:{start:{line:1,column:1500},end:{line:1,column:1501}},loc:{start:{line:1,column:1510},end:{line:1,column:1533}},line:1},"7":{name:"(anonymous_7)",decl:{start:{line:1,column:1550},end:{line:1,column:1551}},loc:{start:{line:1,column:1561},end:{line:1,column:1579}},line:1},"8":{name:"(anonymous_8)",decl:{start:{line:1,column:5234},end:{line:1,column:5235}},loc:{start:{line:1,column:5247},end:{line:1,column:6428}},line:1},"9":{name:"(anonymous_9)",decl:{start:{line:1,column:5500},end:{line:1,column:5501}},loc:{start:{line:1,column:5510},end:{line:1,column:5531}},line:1},"10":{name:"(anonymous_10)",decl:{start:{line:1,column:5726},end:{line:1,column:5727}},loc:{start:{line:1,column:5736},end:{line:1,column:5757}},line:1},"11":{name:"(anonymous_11)",decl:{start:{line:1,column:6068},end:{line:1,column:6069}},loc:{start:{line:1,column:6078},end:{line:1,column:6099}},line:1},"12":{name:"(anonymous_12)",decl:{start:{line:1,column:6151},end:{line:1,column:6152}},loc:{start:{line:1,column:6161},end:{line:1,column:6182}},line:1},"13":{name:"(anonymous_13)",decl:{start:{line:1,column:6518},end:{line:1,column:6519}},loc:{start:{line:1,column:6525},end:{line:1,column:6529}},line:1},"14":{name:"ge",decl:{start:{line:1,column:6539},end:{line:1,column:6541}},loc:{start:{line:1,column:6546},end:{line:1,column:6660}},line:1},"15":{name:"be",decl:{start:{line:1,column:6669},end:{line:1,column:6671}},loc:{start:{line:1,column:6676},end:{line:1,column:6770}},line:1},"16":{name:"(anonymous_16)",decl:{start:{line:1,column:6778},end:{line:1,column:6779}},loc:{start:{line:1,column:6782},end:{line:1,column:12212}},line:1},"17":{name:"(anonymous_17)",decl:{start:{line:1,column:6989},end:{line:1,column:6990}},loc:{start:{line:1,column:6999},end:{line:1,column:7031}},line:1},"18":{name:"(anonymous_18)",decl:{start:{line:1,column:7031},end:{line:1,column:7032}},loc:{start:{line:1,column:7041},end:{line:1,column:7162}},line:1},"19":{name:"(anonymous_19)",decl:{start:{line:1,column:7162},end:{line:1,column:7163}},loc:{start:{line:1,column:7172},end:{line:1,column:7195}},line:1},"20":{name:"(anonymous_20)",decl:{start:{line:1,column:7195},end:{line:1,column:7196}},loc:{start:{line:1,column:7214},end:{line:1,column:7271}},line:1},"21":{name:"(anonymous_21)",decl:{start:{line:1,column:7288},end:{line:1,column:7289}},loc:{start:{line:1,column:7299},end:{line:1,column:7317}},line:1},"22":{name:"(anonymous_22)",decl:{start:{line:1,column:10936},end:{line:1,column:10937}},loc:{start:{line:1,column:10949},end:{line:1,column:12133}},line:1},"23":{name:"(anonymous_23)",decl:{start:{line:1,column:11210},end:{line:1,column:11211}},loc:{start:{line:1,column:11220},end:{line:1,column:11241}},line:1},"24":{name:"(anonymous_24)",decl:{start:{line:1,column:11436},end:{line:1,column:11437}},loc:{start:{line:1,column:11446},end:{line:1,column:11467}},line:1},"25":{name:"(anonymous_25)",decl:{start:{line:1,column:11772},end:{line:1,column:11773}},loc:{start:{line:1,column:11782},end:{line:1,column:11803}},line:1},"26":{name:"(anonymous_26)",decl:{start:{line:1,column:11855},end:{line:1,column:11856}},loc:{start:{line:1,column:11865},end:{line:1,column:11886}},line:1},"27":{name:"_e",decl:{start:{line:1,column:12225},end:{line:1,column:12227}},loc:{start:{line:1,column:12232},end:{line:1,column:12258}},line:1},"28":{name:"fe",decl:{start:{line:1,column:12267},end:{line:1,column:12269}},loc:{start:{line:1,column:12274},end:{line:1,column:12300}},line:1},"29":{name:"xe",decl:{start:{line:1,column:12309},end:{line:1,column:12311}},loc:{start:{line:1,column:12316},end:{line:1,column:12366}},line:1},"30":{name:"ve",decl:{start:{line:1,column:12375},end:{line:1,column:12377}},loc:{start:{line:1,column:12382},end:{line:1,column:12440}},line:1},"31":{name:"he",decl:{start:{line:1,column:12449},end:{line:1,column:12451}},loc:{start:{line:1,column:12456},end:{line:1,column:12748}},line:1},"32":{name:"(anonymous_32)",decl:{start:{line:1,column:12756},end:{line:1,column:12757}},loc:{start:{line:1,column:12760},end:{line:2,column:99}},line:1},"33":{name:"(anonymous_33)",decl:{start:{line:1,column:12929},end:{line:1,column:12930}},loc:{start:{line:1,column:12933},end:{line:1,column:13008}},line:1},"34":{name:"(anonymous_34)",decl:{start:{line:1,column:13023},end:{line:1,column:13024}},loc:{start:{line:1,column:13027},end:{line:1,column:13045}},line:1},"35":{name:"(anonymous_35)",decl:{start:{line:1,column:13047},end:{line:1,column:13048}},loc:{start:{line:1,column:13057},end:{line:1,column:13189}},line:1},"36":{name:"(anonymous_36)",decl:{start:{line:1,column:13189},end:{line:1,column:13190}},loc:{start:{line:1,column:13199},end:{line:1,column:13222}},line:1},"37":{name:"(anonymous_37)",decl:{start:{line:1,column:13239},end:{line:1,column:13240}},loc:{start:{line:1,column:13250},end:{line:1,column:13268}},line:1},"38":{name:"(anonymous_38)",decl:{start:{line:1,column:16251},end:{line:1,column:16252}},loc:{start:{line:1,column:16264},end:{line:1,column:17672}},line:1},"39":{name:"(anonymous_39)",decl:{start:{line:1,column:16522},end:{line:1,column:16523}},loc:{start:{line:1,column:16532},end:{line:1,column:16553}},line:1},"40":{name:"(anonymous_40)",decl:{start:{line:1,column:16631},end:{line:1,column:16632}},loc:{start:{line:1,column:16641},end:{line:1,column:16662}},line:1},"41":{name:"(anonymous_41)",decl:{start:{line:1,column:16901},end:{line:1,column:16902}},loc:{start:{line:1,column:16911},end:{line:1,column:16932}},line:1},"42":{name:"(anonymous_42)",decl:{start:{line:1,column:16984},end:{line:1,column:16985}},loc:{start:{line:1,column:16994},end:{line:1,column:17015}},line:1},"43":{name:"(anonymous_43)",decl:{start:{line:2,column:109},end:{line:2,column:110}},loc:{start:{line:2,column:116},end:{line:2,column:120}},line:2},"44":{name:"Ce",decl:{start:{line:2,column:130},end:{line:2,column:132}},loc:{start:{line:2,column:137},end:{line:2,column:369}},line:2},"45":{name:"(anonymous_45)",decl:{start:{line:2,column:272},end:{line:2,column:273}},loc:{start:{line:2,column:282},end:{line:2,column:328}},line:2},"46":{name:"we",decl:{start:{line:2,column:378},end:{line:2,column:380}},loc:{start:{line:2,column:385},end:{line:2,column:461}},line:2},"47":{name:"Se",decl:{start:{line:2,column:470},end:{line:2,column:472}},loc:{start:{line:2,column:477},end:{line:2,column:849}},line:2},"48":{name:"(anonymous_48)",decl:{start:{line:2,column:724},end:{line:2,column:725}},loc:{start:{line:2,column:734},end:{line:2,column:778}},line:2},"49":{name:"Me",decl:{start:{line:2,column:858},end:{line:2,column:860}},loc:{start:{line:2,column:865},end:{line:2,column:2093}},line:2},"50":{name:"(anonymous_50)",decl:{start:{line:2,column:935},end:{line:2,column:936}},loc:{start:{line:2,column:945},end:{line:2,column:993}},line:2},"51":{name:"(anonymous_51)",decl:{start:{line:2,column:1084},end:{line:2,column:1085}},loc:{start:{line:2,column:1094},end:{line:2,column:1144}},line:2},"52":{name:"(anonymous_52)",decl:{start:{line:2,column:1241},end:{line:2,column:1242}},loc:{start:{line:2,column:1251},end:{line:2,column:1300}},line:2},"53":{name:"ke",decl:{start:{line:2,column:2102},end:{line:2,column:2104}},loc:{start:{line:2,column:2109},end:{line:2,column:2961}},line:2},"54":{name:"(anonymous_54)",decl:{start:{line:2,column:2163},end:{line:2,column:2164}},loc:{start:{line:2,column:2173},end:{line:2,column:2231}},line:2},"55":{name:"ye",decl:{start:{line:2,column:2970},end:{line:2,column:2972}},loc:{start:{line:2,column:2977},end:{line:2,column:3095}},line:2},"56":{name:"We",decl:{start:{line:2,column:3104},end:{line:2,column:3106}},loc:{start:{line:2,column:3111},end:{line:2,column:4133}},line:2},"57":{name:"(anonymous_57)",decl:{start:{line:2,column:3174},end:{line:2,column:3175}},loc:{start:{line:2,column:3184},end:{line:2,column:3247}},line:2},"58":{name:"(anonymous_58)",decl:{start:{line:2,column:3343},end:{line:2,column:3344}},loc:{start:{line:2,column:3353},end:{line:2,column:3443}},line:2},"59":{name:"Ee",decl:{start:{line:2,column:4142},end:{line:2,column:4144}},loc:{start:{line:2,column:4149},end:{line:2,column:4238}},line:2},"60":{name:"Ve",decl:{start:{line:2,column:4247},end:{line:2,column:4249}},loc:{start:{line:2,column:4254},end:{line:2,column:4703}},line:2},"61":{name:"(anonymous_61)",decl:{start:{line:2,column:4411},end:{line:2,column:4412}},loc:{start:{line:2,column:4421},end:{line:2,column:4472}},line:2},"62":{name:"Ae",decl:{start:{line:2,column:4712},end:{line:2,column:4714}},loc:{start:{line:2,column:4719},end:{line:2,column:4884}},line:2},"63":{name:"Ie",decl:{start:{line:2,column:4893},end:{line:2,column:4895}},loc:{start:{line:2,column:4900},end:{line:2,column:5015}},line:2},"64":{name:"De",decl:{start:{line:2,column:5024},end:{line:2,column:5026}},loc:{start:{line:2,column:5031},end:{line:2,column:5445}},line:2},"65":{name:"(anonymous_65)",decl:{start:{line:2,column:5158},end:{line:2,column:5159}},loc:{start:{line:2,column:5168},end:{line:2,column:5260}},line:2},"66":{name:"Te",decl:{start:{line:2,column:5454},end:{line:2,column:5456}},loc:{start:{line:2,column:5461},end:{line:2,column:5549}},line:2},"67":{name:"Pe",decl:{start:{line:2,column:5558},end:{line:2,column:5560}},loc:{start:{line:2,column:5565},end:{line:2,column:5996}},line:2},"68":{name:"(anonymous_68)",decl:{start:{line:2,column:5707},end:{line:2,column:5708}},loc:{start:{line:2,column:5717},end:{line:2,column:5771}},line:2},"69":{name:"Oe",decl:{start:{line:2,column:6005},end:{line:2,column:6007}},loc:{start:{line:2,column:6012},end:{line:2,column:6174}},line:2},"70":{name:"Le",decl:{start:{line:2,column:6183},end:{line:2,column:6185}},loc:{start:{line:2,column:6190},end:{line:2,column:7374}},line:2},"71":{name:"(anonymous_71)",decl:{start:{line:2,column:6342},end:{line:2,column:6343}},loc:{start:{line:2,column:6352},end:{line:2,column:6415}},line:2},"72":{name:"(anonymous_72)",decl:{start:{line:2,column:6532},end:{line:2,column:6533}},loc:{start:{line:2,column:6542},end:{line:2,column:6592}},line:2},"73":{name:"(anonymous_73)",decl:{start:{line:2,column:6712},end:{line:2,column:6713}},loc:{start:{line:2,column:6722},end:{line:2,column:6766}},line:2},"74":{name:"Fe",decl:{start:{line:2,column:7383},end:{line:2,column:7385}},loc:{start:{line:2,column:7390},end:{line:2,column:7455}},line:2},"75":{name:"Ne",decl:{start:{line:2,column:7464},end:{line:2,column:7466}},loc:{start:{line:2,column:7471},end:{line:2,column:7785}},line:2},"76":{name:"(anonymous_76)",decl:{start:{line:2,column:7545},end:{line:2,column:7546}},loc:{start:{line:2,column:7556},end:{line:2,column:7658}},line:2},"77":{name:"(anonymous_77)",decl:{start:{line:2,column:7672},end:{line:2,column:7673}},loc:{start:{line:2,column:7682},end:{line:2,column:7730}},line:2},"78":{name:"je",decl:{start:{line:2,column:7794},end:{line:2,column:7796}},loc:{start:{line:2,column:7801},end:{line:2,column:8148}},line:2},"79":{name:"(anonymous_79)",decl:{start:{line:2,column:7881},end:{line:2,column:7882}},loc:{start:{line:2,column:7892},end:{line:2,column:7946}},line:2},"80":{name:"(anonymous_80)",decl:{start:{line:2,column:7960},end:{line:2,column:7961}},loc:{start:{line:2,column:7970},end:{line:2,column:8028}},line:2},"81":{name:"Ge",decl:{start:{line:2,column:8157},end:{line:2,column:8159}},loc:{start:{line:2,column:8164},end:{line:2,column:8495}},line:2},"82":{name:"(anonymous_82)",decl:{start:{line:2,column:8240},end:{line:2,column:8241}},loc:{start:{line:2,column:8251},end:{line:2,column:8302}},line:2},"83":{name:"(anonymous_83)",decl:{start:{line:2,column:8316},end:{line:2,column:8317}},loc:{start:{line:2,column:8326},end:{line:2,column:8381}},line:2},"84":{name:"ze",decl:{start:{line:2,column:8504},end:{line:2,column:8506}},loc:{start:{line:2,column:8511},end:{line:2,column:8813}},line:2},"85":{name:"(anonymous_85)",decl:{start:{line:2,column:8573},end:{line:2,column:8574}},loc:{start:{line:2,column:8583},end:{line:2,column:8638}},line:2},"86":{name:"(anonymous_86)",decl:{start:{line:2,column:8652},end:{line:2,column:8653}},loc:{start:{line:2,column:8662},end:{line:2,column:8717}},line:2},"87":{name:"(anonymous_87)",decl:{start:{line:2,column:8821},end:{line:2,column:8822}},loc:{start:{line:2,column:8825},end:{line:3,column:103}},line:2},"88":{name:"(anonymous_88)",decl:{start:{line:2,column:9301},end:{line:2,column:9302}},loc:{start:{line:2,column:9305},end:{line:2,column:9393}},line:2},"89":{name:"(anonymous_89)",decl:{start:{line:2,column:9369},end:{line:2,column:9370}},loc:{start:{line:2,column:9372},end:{line:2,column:9380}},line:2},"90":{name:"(anonymous_90)",decl:{start:{line:2,column:9415},end:{line:2,column:9416}},loc:{start:{line:2,column:9419},end:{line:2,column:9530}},line:2},"91":{name:"(anonymous_91)",decl:{start:{line:2,column:9511},end:{line:2,column:9512}},loc:{start:{line:2,column:9514},end:{line:2,column:9522}},line:2},"92":{name:"(anonymous_92)",decl:{start:{line:2,column:9550},end:{line:2,column:9551}},loc:{start:{line:2,column:9554},end:{line:2,column:9609}},line:2},"93":{name:"(anonymous_93)",decl:{start:{line:2,column:9629},end:{line:2,column:9630}},loc:{start:{line:2,column:9633},end:{line:2,column:9693}},line:2},"94":{name:"(anonymous_94)",decl:{start:{line:2,column:9716},end:{line:2,column:9717}},loc:{start:{line:2,column:9720},end:{line:2,column:9783}},line:2},"95":{name:"(anonymous_95)",decl:{start:{line:2,column:9785},end:{line:2,column:9786}},loc:{start:{line:2,column:9795},end:{line:2,column:10379}},line:2},"96":{name:"(anonymous_96)",decl:{start:{line:2,column:9864},end:{line:2,column:9865}},loc:{start:{line:2,column:9867},end:{line:2,column:10298}},line:2},"97":{name:"(anonymous_97)",decl:{start:{line:2,column:10057},end:{line:2,column:10058}},loc:{start:{line:2,column:10060},end:{line:2,column:10068}},line:2},"98":{name:"(anonymous_98)",decl:{start:{line:2,column:10193},end:{line:2,column:10194}},loc:{start:{line:2,column:10196},end:{line:2,column:10224}},line:2},"99":{name:"(anonymous_99)",decl:{start:{line:2,column:10243},end:{line:2,column:10244}},loc:{start:{line:2,column:10246},end:{line:2,column:10254}},line:2},"100":{name:"(anonymous_100)",decl:{start:{line:2,column:10345},end:{line:2,column:10346}},loc:{start:{line:2,column:10348},end:{line:2,column:10377}},line:2},"101":{name:"(anonymous_101)",decl:{start:{line:2,column:10379},end:{line:2,column:10380}},loc:{start:{line:2,column:10392},end:{line:2,column:10439}},line:2},"102":{name:"(anonymous_102)",decl:{start:{line:2,column:10439},end:{line:2,column:10440}},loc:{start:{line:2,column:10456},end:{line:2,column:10488}},line:2},"103":{name:"(anonymous_103)",decl:{start:{line:2,column:10488},end:{line:2,column:10489}},loc:{start:{line:2,column:10501},end:{line:2,column:10669}},line:2},"104":{name:"(anonymous_104)",decl:{start:{line:2,column:10669},end:{line:2,column:10670}},loc:{start:{line:2,column:10687},end:{line:2,column:10720}},line:2},"105":{name:"(anonymous_105)",decl:{start:{line:2,column:10720},end:{line:2,column:10721}},loc:{start:{line:2,column:10738},end:{line:2,column:10768}},line:2},"106":{name:"(anonymous_106)",decl:{start:{line:2,column:10768},end:{line:2,column:10769}},loc:{start:{line:2,column:10788},end:{line:2,column:10823}},line:2},"107":{name:"(anonymous_107)",decl:{start:{line:2,column:10823},end:{line:2,column:10824}},loc:{start:{line:2,column:10842},end:{line:2,column:10876}},line:2},"108":{name:"(anonymous_108)",decl:{start:{line:2,column:10876},end:{line:2,column:10877}},loc:{start:{line:2,column:10890},end:{line:2,column:10925}},line:2},"109":{name:"(anonymous_109)",decl:{start:{line:2,column:10925},end:{line:2,column:10926}},loc:{start:{line:2,column:10946},end:{line:2,column:11006}},line:2},"110":{name:"(anonymous_110)",decl:{start:{line:2,column:11006},end:{line:2,column:11007}},loc:{start:{line:2,column:11019},end:{line:2,column:11082}},line:2},"111":{name:"(anonymous_111)",decl:{start:{line:2,column:11082},end:{line:2,column:11083}},loc:{start:{line:2,column:11102},end:{line:2,column:11151}},line:2},"112":{name:"(anonymous_112)",decl:{start:{line:2,column:11151},end:{line:2,column:11152}},loc:{start:{line:2,column:11170},end:{line:2,column:11266}},line:2},"113":{name:"(anonymous_113)",decl:{start:{line:2,column:11266},end:{line:2,column:11267}},loc:{start:{line:2,column:11285},end:{line:2,column:11320}},line:2},"114":{name:"(anonymous_114)",decl:{start:{line:2,column:11320},end:{line:2,column:11321}},loc:{start:{line:2,column:11335},end:{line:2,column:11389}},line:2},"115":{name:"(anonymous_115)",decl:{start:{line:2,column:11389},end:{line:2,column:11390}},loc:{start:{line:2,column:11408},end:{line:2,column:11679}},line:2},"116":{name:"(anonymous_116)",decl:{start:{line:2,column:11592},end:{line:2,column:11593}},loc:{start:{line:2,column:11595},end:{line:2,column:11677}},line:2},"117":{name:"(anonymous_117)",decl:{start:{line:2,column:11679},end:{line:2,column:11680}},loc:{start:{line:2,column:11704},end:{line:2,column:11883}},line:2},"118":{name:"(anonymous_118)",decl:{start:{line:2,column:11883},end:{line:2,column:11884}},loc:{start:{line:2,column:11912},end:{line:2,column:12027}},line:2},"119":{name:"(anonymous_119)",decl:{start:{line:2,column:12027},end:{line:2,column:12028}},loc:{start:{line:2,column:12046},end:{line:2,column:12127}},line:2},"120":{name:"(anonymous_120)",decl:{start:{line:2,column:12127},end:{line:2,column:12128}},loc:{start:{line:2,column:12143},end:{line:2,column:12400}},line:2},"121":{name:"(anonymous_121)",decl:{start:{line:2,column:12319},end:{line:2,column:12320}},loc:{start:{line:2,column:12322},end:{line:2,column:12398}},line:2},"122":{name:"(anonymous_122)",decl:{start:{line:2,column:12400},end:{line:2,column:12401}},loc:{start:{line:2,column:12422},end:{line:2,column:12508}},line:2},"123":{name:"(anonymous_123)",decl:{start:{line:2,column:12508},end:{line:2,column:12509}},loc:{start:{line:2,column:12534},end:{line:2,column:12640}},line:2},"124":{name:"(anonymous_124)",decl:{start:{line:2,column:12640},end:{line:2,column:12641}},loc:{start:{line:2,column:12656},end:{line:2,column:12736}},line:2},"125":{name:"(anonymous_125)",decl:{start:{line:2,column:12736},end:{line:2,column:12737}},loc:{start:{line:2,column:12762},end:{line:2,column:13019}},line:2},"126":{name:"(anonymous_126)",decl:{start:{line:2,column:13019},end:{line:2,column:13020}},loc:{start:{line:2,column:13045},end:{line:2,column:13074}},line:2},"127":{name:"(anonymous_127)",decl:{start:{line:2,column:13074},end:{line:2,column:13075}},loc:{start:{line:2,column:13093},end:{line:2,column:13355}},line:2},"128":{name:"(anonymous_128)",decl:{start:{line:2,column:13355},end:{line:2,column:13356}},loc:{start:{line:2,column:13372},end:{line:2,column:13484}},line:2},"129":{name:"(anonymous_129)",decl:{start:{line:2,column:13484},end:{line:2,column:13485}},loc:{start:{line:2,column:13511},end:{line:2,column:13537}},line:2},"130":{name:"(anonymous_130)",decl:{start:{line:2,column:13554},end:{line:2,column:13555}},loc:{start:{line:2,column:13565},end:{line:2,column:13583}},line:2},"131":{name:"(anonymous_131)",decl:{start:{line:2,column:22502},end:{line:2,column:22503}},loc:{start:{line:2,column:22515},end:{line:2,column:23378}},line:2}},branchMap:{"0":{loc:{start:{line:1,column:884},end:{line:1,column:975}},type:"if",locations:[{start:{line:1,column:884},end:{line:1,column:975}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1":{loc:{start:{line:1,column:887},end:{line:1,column:919}},type:"binary-expr",locations:[{start:{line:1,column:887},end:{line:1,column:890}},{start:{line:1,column:893},end:{line:1,column:918}}],line:1},"2":{loc:{start:{line:1,column:993},end:{line:1,column:1088}},type:"binary-expr",locations:[{start:{line:1,column:993},end:{line:1,column:996}},{start:{line:1,column:999},end:{line:1,column:1087}}],line:1},"3":{loc:{start:{line:1,column:1360},end:{line:1,column:1418}},type:"if",locations:[{start:{line:1,column:1360},end:{line:1,column:1418}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"4":{loc:{start:{line:1,column:1457},end:{line:1,column:1499}},type:"binary-expr",locations:[{start:{line:1,column:1457},end:{line:1,column:1465}},{start:{line:1,column:1467},end:{line:1,column:1499}}],line:1},"5":{loc:{start:{line:1,column:1573},end:{line:1,column:1577}},type:"binary-expr",locations:[{start:{line:1,column:1573},end:{line:1,column:1574}},{start:{line:1,column:1576},end:{line:1,column:1577}}],line:1},"6":{loc:{start:{line:1,column:5248},end:{line:1,column:6210}},type:"binary-expr",locations:[{start:{line:1,column:5248},end:{line:1,column:5251}},{start:{line:1,column:5254},end:{line:1,column:6209}}],line:1},"7":{loc:{start:{line:1,column:6211},end:{line:1,column:6427}},type:"binary-expr",locations:[{start:{line:1,column:6211},end:{line:1,column:6214}},{start:{line:1,column:6217},end:{line:1,column:6426}}],line:1},"8":{loc:{start:{line:1,column:6321},end:{line:1,column:6391}},type:"cond-expr",locations:[{start:{line:1,column:6386},end:{line:1,column:6388}},{start:{line:1,column:6389},end:{line:1,column:6391}}],line:1},"9":{loc:{start:{line:1,column:6321},end:{line:1,column:6385}},type:"binary-expr",locations:[{start:{line:1,column:6321},end:{line:1,column:6352}},{start:{line:1,column:6354},end:{line:1,column:6385}}],line:1},"10":{loc:{start:{line:1,column:6547},end:{line:1,column:6659}},type:"if",locations:[{start:{line:1,column:6547},end:{line:1,column:6659}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"11":{loc:{start:{line:1,column:6550},end:{line:1,column:6582}},type:"binary-expr",locations:[{start:{line:1,column:6550},end:{line:1,column:6553}},{start:{line:1,column:6556},end:{line:1,column:6581}}],line:1},"12":{loc:{start:{line:1,column:6677},end:{line:1,column:6769}},type:"binary-expr",locations:[{start:{line:1,column:6677},end:{line:1,column:6680}},{start:{line:1,column:6683},end:{line:1,column:6768}}],line:1},"13":{loc:{start:{line:1,column:7042},end:{line:1,column:7100}},type:"if",locations:[{start:{line:1,column:7042},end:{line:1,column:7100}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"14":{loc:{start:{line:1,column:7221},end:{line:1,column:7270}},type:"binary-expr",locations:[{start:{line:1,column:7221},end:{line:1,column:7258}},{start:{line:1,column:7260},end:{line:1,column:7270}}],line:1},"15":{loc:{start:{line:1,column:7311},end:{line:1,column:7315}},type:"binary-expr",locations:[{start:{line:1,column:7311},end:{line:1,column:7312}},{start:{line:1,column:7314},end:{line:1,column:7315}}],line:1},"16":{loc:{start:{line:1,column:10950},end:{line:1,column:11914}},type:"binary-expr",locations:[{start:{line:1,column:10950},end:{line:1,column:10953}},{start:{line:1,column:10956},end:{line:1,column:11913}}],line:1},"17":{loc:{start:{line:1,column:11915},end:{line:1,column:12132}},type:"binary-expr",locations:[{start:{line:1,column:11915},end:{line:1,column:11918}},{start:{line:1,column:11921},end:{line:1,column:12131}}],line:1},"18":{loc:{start:{line:1,column:12028},end:{line:1,column:12096}},type:"cond-expr",locations:[{start:{line:1,column:12091},end:{line:1,column:12093}},{start:{line:1,column:12094},end:{line:1,column:12096}}],line:1},"19":{loc:{start:{line:1,column:12028},end:{line:1,column:12090}},type:"binary-expr",locations:[{start:{line:1,column:12028},end:{line:1,column:12058}},{start:{line:1,column:12060},end:{line:1,column:12090}}],line:1},"20":{loc:{start:{line:1,column:12233},end:{line:1,column:12257}},type:"binary-expr",locations:[{start:{line:1,column:12233},end:{line:1,column:12236}},{start:{line:1,column:12239},end:{line:1,column:12256}}],line:1},"21":{loc:{start:{line:1,column:12275},end:{line:1,column:12299}},type:"binary-expr",locations:[{start:{line:1,column:12275},end:{line:1,column:12278}},{start:{line:1,column:12281},end:{line:1,column:12298}}],line:1},"22":{loc:{start:{line:1,column:12317},end:{line:1,column:12365}},type:"binary-expr",locations:[{start:{line:1,column:12317},end:{line:1,column:12320}},{start:{line:1,column:12322},end:{line:1,column:12365}}],line:1},"23":{loc:{start:{line:1,column:12383},end:{line:1,column:12439}},type:"binary-expr",locations:[{start:{line:1,column:12383},end:{line:1,column:12386}},{start:{line:1,column:12388},end:{line:1,column:12439}}],line:1},"24":{loc:{start:{line:1,column:12457},end:{line:1,column:12747}},type:"if",locations:[{start:{line:1,column:12457},end:{line:1,column:12747}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"25":{loc:{start:{line:1,column:12460},end:{line:1,column:12561}},type:"binary-expr",locations:[{start:{line:1,column:12460},end:{line:1,column:12463}},{start:{line:1,column:12466},end:{line:1,column:12560}}],line:1},"26":{loc:{start:{line:1,column:12584},end:{line:1,column:12660}},type:"cond-expr",locations:[{start:{line:1,column:12656},end:{line:1,column:12657}},{start:{line:1,column:12658},end:{line:1,column:12660}}],line:1},"27":{loc:{start:{line:1,column:12584},end:{line:1,column:12655}},type:"binary-expr",locations:[{start:{line:1,column:12584},end:{line:1,column:12617}},{start:{line:1,column:12619},end:{line:1,column:12655}}],line:1},"28":{loc:{start:{line:1,column:12668},end:{line:1,column:12745}},type:"cond-expr",locations:[{start:{line:1,column:12741},end:{line:1,column:12742}},{start:{line:1,column:12743},end:{line:1,column:12745}}],line:1},"29":{loc:{start:{line:1,column:12668},end:{line:1,column:12740}},type:"binary-expr",locations:[{start:{line:1,column:12668},end:{line:1,column:12701}},{start:{line:1,column:12703},end:{line:1,column:12740}}],line:1},"30":{loc:{start:{line:1,column:12979},end:{line:1,column:12990}},type:"binary-expr",locations:[{start:{line:1,column:12979},end:{line:1,column:12986}},{start:{line:1,column:12988},end:{line:1,column:12990}}],line:1},"31":{loc:{start:{line:1,column:13058},end:{line:1,column:13116}},type:"if",locations:[{start:{line:1,column:13058},end:{line:1,column:13116}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"32":{loc:{start:{line:1,column:13262},end:{line:1,column:13266}},type:"binary-expr",locations:[{start:{line:1,column:13262},end:{line:1,column:13263}},{start:{line:1,column:13265},end:{line:1,column:13266}}],line:1},"33":{loc:{start:{line:1,column:16265},end:{line:1,column:17031}},type:"binary-expr",locations:[{start:{line:1,column:16265},end:{line:1,column:16268}},{start:{line:1,column:16271},end:{line:1,column:17030}}],line:1},"34":{loc:{start:{line:1,column:17032},end:{line:1,column:17671}},type:"binary-expr",locations:[{start:{line:1,column:17032},end:{line:1,column:17035}},{start:{line:1,column:17038},end:{line:1,column:17670}}],line:1},"35":{loc:{start:{line:1,column:17099},end:{line:1,column:17117}},type:"cond-expr",locations:[{start:{line:1,column:17114},end:{line:1,column:17115}},{start:{line:1,column:17116},end:{line:1,column:17117}}],line:1},"36":{loc:{start:{line:1,column:17130},end:{line:1,column:17178}},type:"cond-expr",locations:[{start:{line:1,column:17145},end:{line:1,column:17163}},{start:{line:1,column:17164},end:{line:1,column:17178}}],line:1},"37":{loc:{start:{line:1,column:17218},end:{line:1,column:17282}},type:"cond-expr",locations:[{start:{line:1,column:17277},end:{line:1,column:17279}},{start:{line:1,column:17280},end:{line:1,column:17282}}],line:1},"38":{loc:{start:{line:1,column:17218},end:{line:1,column:17276}},type:"binary-expr",locations:[{start:{line:1,column:17218},end:{line:1,column:17246}},{start:{line:1,column:17248},end:{line:1,column:17276}}],line:1},"39":{loc:{start:{line:1,column:17618},end:{line:1,column:17665}},type:"cond-expr",locations:[{start:{line:1,column:17633},end:{line:1,column:17650}},{start:{line:1,column:17651},end:{line:1,column:17665}}],line:1},"40":{loc:{start:{line:2,column:138},end:{line:2,column:352}},type:"if",locations:[{start:{line:2,column:138},end:{line:2,column:352}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:2},"41":{loc:{start:{line:2,column:352},end:{line:2,column:368}},type:"binary-expr",locations:[{start:{line:2,column:352},end:{line:2,column:355}},{start:{line:2,column:358},end:{line:2,column:367}}],line:2},"42":{loc:{start:{line:2,column:386},end:{line:2,column:460}},type:"binary-expr",locations:[{start:{line:2,column:386},end:{line:2,column:389}},{start:{line:2,column:392},end:{line:2,column:459}}],line:2},"43":{loc:{start:{line:2,column:478},end:{line:2,column:848}},type:"if",locations:[{start:{line:2,column:478},end:{line:2,column:848}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:2},"44":{loc:{start:{line:2,column:866},end:{line:2,column:1440}},type:"if",locations:[{start:{line:2,column:866},end:{line:2,column:1440}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:2},"45":{loc:{start:{line:2,column:1440},end:{line:2,column:2092}},type:"if",locations:[{start:{line:2,column:1440},end:{line:2,column:2092}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:2},"46":{loc:{start:{line:2,column:1466},end:{line:2,column:1660}},type:"cond-expr",locations:[{start:{line:2,column:1491},end:{line:2,column:1572}},{start:{line:2,column:1573},end:{line:2,column:1660}}],line:2},"47":{loc:{start:{line:2,column:1669},end:{line:2,column:1868}},type:"cond-expr",locations:[{start:{line:2,column:1699},end:{line:2,column:1780}},{start:{line:2,column:1781},end:{line:2,column:1868}}],line:2},"48":{loc:{start:{line:2,column:1877},end:{line:2,column:2075}},type:"cond-expr",locations:[{start:{line:2,column:1906},end:{line:2,column:1987}},{start:{line:2,column:1988},end:{line:2,column:2075}}],line:2},"49":{loc:{start:{line:2,column:2110},end:{line:2,column:2339}},type:"if",locations:[{start:{line:2,column:2110},end:{line:2,column:2339}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:2},"50":{loc:{start:{line:2,column:2339},end:{line:2,column:2960}},type:"if",locations:[{start:{line:2,column:2339},end:{line:2,column:2960}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:2},"51":{loc:{start:{line:2,column:2378},end:{line:2,column:2690}},type:"cond-expr",locations:[{start:{line:2,column:2404},end:{line:2,column:2549}},{start:{line:2,column:2550},end:{line:2,column:2690}}],line:2},"52":{loc:{start:{line:2,column:2713},end:{line:2,column:2923}},type:"cond-expr",locations:[{start:{line:2,column:2739},end:{line:2,column:2830}},{start:{line:2,column:2831},end:{line:2,column:2923}}],line:2},"53":{loc:{start:{line:2,column:2978},end:{line:2,column:3094}},type:"binary-expr",locations:[{start:{line:2,column:2978},end:{line:2,column:2981}},{start:{line:2,column:2984},end:{line:2,column:3093}}],line:2},"54":{loc:{start:{line:2,column:3112},end:{line:2,column:3488}},type:"if",locations:[{start:{line:2,column:3112},end:{line:2,column:3488}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:2},"55":{loc:{start:{line:2,column:3488},end:{line:2,column:4132}},type:"if",locations:[{start:{line:2,column:3488},end:{line:2,column:4132}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:2},"56":{loc:{start:{line:2,column:3527},end:{line:2,column:3770}},type:"cond-expr",locations:[{start:{line:2,column:3558},end:{line:2,column:3666}},{start:{line:2,column:3667},end:{line:2,column:3770}}],line:2},"57":{loc:{start:{line:2,column:3779},end:{line:2,column:3884}},type:"cond-expr",locations:[{start:{line:2,column:3810},end:{line:2,column:3846}},{start:{line:2,column:3847},end:{line:2,column:3884}}],line:2},"58":{loc:{start:{line:2,column:3907},end:{line:2,column:4130}},type:"cond-expr",locations:[{start:{line:2,column:3938},end:{line:2,column:4052}},{start:{line:2,column:4053},end:{line:2,column:4130}}],line:2},"59":{loc:{start:{line:2,column:4150},end:{line:2,column:4237}},type:"if",locations:[{start:{line:2,column:4150},end:{line:2,column:4237}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:2},"60":{loc:{start:{line:2,column:4153},end:{line:2,column:4201}},type:"binary-expr",locations:[{start:{line:2,column:4153},end:{line:2,column:4156}},{start:{line:2,column:4159},end:{line:2,column:4200}}],line:2},"61":{loc:{start:{line:2,column:4255},end:{line:2,column:4633}},type:"if",locations:[{start:{line:2,column:4255},end:{line:2,column:4633}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:2},"62":{loc:{start:{line:2,column:4633},end:{line:2,column:4702}},type:"if",locations:[{start:{line:2,column:4633},end:{line:2,column:4702}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:2},"63":{loc:{start:{line:2,column:4671},end:{line:2,column:4700}},type:"cond-expr",locations:[{start:{line:2,column:4695},end:{line:2,column:4697}},{start:{line:2,column:4698},end:{line:2,column:4700}}],line:2},"64":{loc:{start:{line:2,column:4720},end:{line:2,column:4883}},type:"binary-expr",locations:[{start:{line:2,column:4720},end:{line:2,column:4723}},{start:{line:2,column:4726},end:{line:2,column:4882}}],line:2},"65":{loc:{start:{line:2,column:4901},end:{line:2,column:5014}},type:"binary-expr",locations:[{start:{line:2,column:4901},end:{line:2,column:4904}},{start:{line:2,column:4907},end:{line:2,column:5013}}],line:2},"66":{loc:{start:{line:2,column:5032},end:{line:2,column:5305}},type:"if",locations:[{start:{line:2,column:5032},end:{line:2,column:5305}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:2},"67":{loc:{start:{line:2,column:5305},end:{line:2,column:5444}},type:"if",locations:[{start:{line:2,column:5305},end:{line:2,column:5444}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:2},"68":{loc:{start:{line:2,column:5462},end:{line:2,column:5548}},type:"if",locations:[{start:{line:2,column:5462},end:{line:2,column:5548}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:2},"69":{loc:{start:{line:2,column:5465},end:{line:2,column:5513}},type:"binary-expr",locations:[{start:{line:2,column:5465},end:{line:2,column:5468}},{start:{line:2,column:5471},end:{line:2,column:5512}}],line:2},"70":{loc:{start:{line:2,column:5566},end:{line:2,column:5927}},type:"if",locations:[{start:{line:2,column:5566},end:{line:2,column:5927}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:2},"71":{loc:{start:{line:2,column:5927},end:{line:2,column:5995}},type:"if",locations:[{start:{line:2,column:5927},end:{line:2,column:5995}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:2},"72":{loc:{start:{line:2,column:5965},end:{line:2,column:5993}},type:"cond-expr",locations:[{start:{line:2,column:5988},end:{line:2,column:5990}},{start:{line:2,column:5991},end:{line:2,column:5993}}],line:2},"73":{loc:{start:{line:2,column:6013},end:{line:2,column:6173}},type:"binary-expr",locations:[{start:{line:2,column:6013},end:{line:2,column:6016}},{start:{line:2,column:6019},end:{line:2,column:6172}}],line:2},"74":{loc:{start:{line:2,column:6191},end:{line:2,column:7020}},type:"if",locations:[{start:{line:2,column:6191},end:{line:2,column:7020}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:2},"75":{loc:{start:{line:2,column:7020},end:{line:2,column:7373}},type:"if",locations:[{start:{line:2,column:7020},end:{line:2,column:7373}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:2},"76":{loc:{start:{line:2,column:7052},end:{line:2,column:7077}},type:"cond-expr",locations:[{start:{line:2,column:7073},end:{line:2,column:7074}},{start:{line:2,column:7075},end:{line:2,column:7077}}],line:2},"77":{loc:{start:{line:2,column:7261},end:{line:2,column:7287}},type:"cond-expr",locations:[{start:{line:2,column:7282},end:{line:2,column:7284}},{start:{line:2,column:7285},end:{line:2,column:7287}}],line:2},"78":{loc:{start:{line:2,column:7343},end:{line:2,column:7369}},type:"cond-expr",locations:[{start:{line:2,column:7364},end:{line:2,column:7366}},{start:{line:2,column:7367},end:{line:2,column:7369}}],line:2},"79":{loc:{start:{line:2,column:7391},end:{line:2,column:7429}},type:"binary-expr",locations:[{start:{line:2,column:7391},end:{line:2,column:7394}},{start:{line:2,column:7396},end:{line:2,column:7429}}],line:2},"80":{loc:{start:{line:2,column:7430},end:{line:2,column:7454}},type:"binary-expr",locations:[{start:{line:2,column:7430},end:{line:2,column:7433}},{start:{line:2,column:7435},end:{line:2,column:7454}}],line:2},"81":{loc:{start:{line:2,column:7437},end:{line:2,column:7453}},type:"cond-expr",locations:[{start:{line:2,column:7450},end:{line:2,column:7451}},{start:{line:2,column:7452},end:{line:2,column:7453}}],line:2},"82":{loc:{start:{line:2,column:7472},end:{line:2,column:7736}},type:"if",locations:[{start:{line:2,column:7472},end:{line:2,column:7736}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:2},"83":{loc:{start:{line:2,column:7581},end:{line:2,column:7656}},type:"cond-expr",locations:[{start:{line:2,column:7611},end:{line:2,column:7634}},{start:{line:2,column:7635},end:{line:2,column:7656}}],line:2},"84":{loc:{start:{line:2,column:7736},end:{line:2,column:7784}},type:"if",locations:[{start:{line:2,column:7736},end:{line:2,column:7784}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:2},"85":{loc:{start:{line:2,column:7802},end:{line:2,column:8034}},type:"if",locations:[{start:{line:2,column:7802},end:{line:2,column:8034}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:2},"86":{loc:{start:{line:2,column:8034},end:{line:2,column:8147}},type:"if",locations:[{start:{line:2,column:8034},end:{line:2,column:8147}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:2},"87":{loc:{start:{line:2,column:8165},end:{line:2,column:8387}},type:"if",locations:[{start:{line:2,column:8165},end:{line:2,column:8387}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:2},"88":{loc:{start:{line:2,column:8387},end:{line:2,column:8494}},type:"if",locations:[{start:{line:2,column:8387},end:{line:2,column:8494}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:2},"89":{loc:{start:{line:2,column:8512},end:{line:2,column:8723}},type:"if",locations:[{start:{line:2,column:8512},end:{line:2,column:8723}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:2},"90":{loc:{start:{line:2,column:8723},end:{line:2,column:8812}},type:"if",locations:[{start:{line:2,column:8723},end:{line:2,column:8812}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:2},"91":{loc:{start:{line:2,column:9341},end:{line:2,column:9392}},type:"cond-expr",locations:[{start:{line:2,column:9343},end:{line:2,column:9387}},{start:{line:2,column:9388},end:{line:2,column:9392}}],line:2},"92":{loc:{start:{line:2,column:9343},end:{line:2,column:9387}},type:"binary-expr",locations:[{start:{line:2,column:9343},end:{line:2,column:9381}},{start:{line:2,column:9383},end:{line:2,column:9387}}],line:2},"93":{loc:{start:{line:2,column:9481},end:{line:2,column:9529}},type:"cond-expr",locations:[{start:{line:2,column:9488},end:{line:2,column:9492}},{start:{line:2,column:9493},end:{line:2,column:9529}}],line:2},"94":{loc:{start:{line:2,column:9481},end:{line:2,column:9487}},type:"binary-expr",locations:[{start:{line:2,column:9481},end:{line:2,column:9483}},{start:{line:2,column:9485},end:{line:2,column:9487}}],line:2},"95":{loc:{start:{line:2,column:9493},end:{line:2,column:9529}},type:"binary-expr",locations:[{start:{line:2,column:9493},end:{line:2,column:9523}},{start:{line:2,column:9525},end:{line:2,column:9529}}],line:2},"96":{loc:{start:{line:2,column:9554},end:{line:2,column:9609}},type:"cond-expr",locations:[{start:{line:2,column:9585},end:{line:2,column:9589}},{start:{line:2,column:9590},end:{line:2,column:9609}}],line:2},"97":{loc:{start:{line:2,column:9679},end:{line:2,column:9692}},type:"cond-expr",locations:[{start:{line:2,column:9688},end:{line:2,column:9689}},{start:{line:2,column:9690},end:{line:2,column:9692}}],line:2},"98":{loc:{start:{line:2,column:9769},end:{line:2,column:9782}},type:"cond-expr",locations:[{start:{line:2,column:9778},end:{line:2,column:9779}},{start:{line:2,column:9780},end:{line:2,column:9782}}],line:2},"99":{loc:{start:{line:2,column:9868},end:{line:2,column:10012}},type:"if",locations:[{start:{line:2,column:9868},end:{line:2,column:10012}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:2},"100":{loc:{start:{line:2,column:10040},end:{line:2,column:10140}},type:"binary-expr",locations:[{start:{line:2,column:10040},end:{line:2,column:10048}},{start:{line:2,column:10050},end:{line:2,column:10069}},{start:{line:2,column:10072},end:{line:2,column:10139}}],line:2},"101":{loc:{start:{line:2,column:10174},end:{line:2,column:10297}},type:"binary-expr",locations:[{start:{line:2,column:10174},end:{line:2,column:10182}},{start:{line:2,column:10186},end:{line:2,column:10255}},{start:{line:2,column:10257},end:{line:2,column:10259}},{start:{line:2,column:10262},end:{line:2,column:10296}}],line:2},"102":{loc:{start:{line:2,column:10502},end:{line:2,column:10573}},type:"if",locations:[{start:{line:2,column:10502},end:{line:2,column:10573}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:2},"103":{loc:{start:{line:2,column:11129},end:{line:2,column:11150}},type:"binary-expr",locations:[{start:{line:2,column:11129},end:{line:2,column:11130}},{start:{line:2,column:11132},end:{line:2,column:11150}}],line:2},"104":{loc:{start:{line:2,column:11197},end:{line:2,column:11265}},type:"binary-expr",locations:[{start:{line:2,column:11197},end:{line:2,column:11198}},{start:{line:2,column:11201},end:{line:2,column:11264}}],line:2},"105":{loc:{start:{line:2,column:11733},end:{line:2,column:11882}},type:"binary-expr",locations:[{start:{line:2,column:11733},end:{line:2,column:11734}},{start:{line:2,column:11737},end:{line:2,column:11881}}],line:2},"106":{loc:{start:{line:2,column:12448},end:{line:2,column:12507}},type:"binary-expr",locations:[{start:{line:2,column:12448},end:{line:2,column:12449}},{start:{line:2,column:12452},end:{line:2,column:12506}}],line:2},"107":{loc:{start:{line:2,column:12789},end:{line:2,column:13018}},type:"binary-expr",locations:[{start:{line:2,column:12789},end:{line:2,column:12790}},{start:{line:2,column:12793},end:{line:2,column:13017}}],line:2},"108":{loc:{start:{line:2,column:12793},end:{line:2,column:12848}},type:"binary-expr",locations:[{start:{line:2,column:12793},end:{line:2,column:12815}},{start:{line:2,column:12817},end:{line:2,column:12848}}],line:2},"109":{loc:{start:{line:2,column:12849},end:{line:2,column:12921}},type:"binary-expr",locations:[{start:{line:2,column:12849},end:{line:2,column:12875}},{start:{line:2,column:12877},end:{line:2,column:12921}}],line:2},"110":{loc:{start:{line:2,column:12922},end:{line:2,column:12989}},type:"binary-expr",locations:[{start:{line:2,column:12922},end:{line:2,column:12945}},{start:{line:2,column:12947},end:{line:2,column:12989}}],line:2},"111":{loc:{start:{line:2,column:13127},end:{line:2,column:13354}},type:"cond-expr",locations:[{start:{line:2,column:13129},end:{line:2,column:13324}},{start:{line:2,column:13325},end:{line:2,column:13354}}],line:2},"112":{loc:{start:{line:2,column:13129},end:{line:2,column:13324}},type:"cond-expr",locations:[{start:{line:2,column:13152},end:{line:2,column:13190}},{start:{line:2,column:13191},end:{line:2,column:13324}}],line:2},"113":{loc:{start:{line:2,column:13191},end:{line:2,column:13324}},type:"cond-expr",locations:[{start:{line:2,column:13218},end:{line:2,column:13269}},{start:{line:2,column:13270},end:{line:2,column:13324}}],line:2},"114":{loc:{start:{line:2,column:13406},end:{line:2,column:13483}},type:"cond-expr",locations:[{start:{line:2,column:13463},end:{line:2,column:13472}},{start:{line:2,column:13473},end:{line:2,column:13483}}],line:2},"115":{loc:{start:{line:2,column:13406},end:{line:2,column:13462}},type:"binary-expr",locations:[{start:{line:2,column:13406},end:{line:2,column:13407}},{start:{line:2,column:13410},end:{line:2,column:13436}},{start:{line:2,column:13438},end:{line:2,column:13461}}],line:2},"116":{loc:{start:{line:2,column:13577},end:{line:2,column:13581}},type:"binary-expr",locations:[{start:{line:2,column:13577},end:{line:2,column:13578}},{start:{line:2,column:13580},end:{line:2,column:13581}}],line:2},"117":{loc:{start:{line:2,column:22516},end:{line:2,column:23377}},type:"if",locations:[{start:{line:2,column:22516},end:{line:2,column:23377}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:2},"118":{loc:{start:{line:2,column:22519},end:{line:2,column:23100}},type:"binary-expr",locations:[{start:{line:2,column:22519},end:{line:2,column:22522}},{start:{line:2,column:22525},end:{line:2,column:23099}}],line:2},"119":{loc:{start:{line:2,column:23126},end:{line:2,column:23155}},type:"cond-expr",locations:[{start:{line:2,column:23150},end:{line:2,column:23152}},{start:{line:2,column:23153},end:{line:2,column:23155}}],line:2},"120":{loc:{start:{line:2,column:23165},end:{line:2,column:23191}},type:"cond-expr",locations:[{start:{line:2,column:23186},end:{line:2,column:23188}},{start:{line:2,column:23189},end:{line:2,column:23191}}],line:2},"121":{loc:{start:{line:2,column:23200},end:{line:2,column:23226}},type:"cond-expr",locations:[{start:{line:2,column:23221},end:{line:2,column:23223}},{start:{line:2,column:23224},end:{line:2,column:23226}}],line:2},"122":{loc:{start:{line:2,column:23237},end:{line:2,column:23272}},type:"cond-expr",locations:[{start:{line:2,column:23267},end:{line:2,column:23269}},{start:{line:2,column:23270},end:{line:2,column:23272}}],line:2},"123":{loc:{start:{line:2,column:23280},end:{line:2,column:23308}},type:"cond-expr",locations:[{start:{line:2,column:23303},end:{line:2,column:23305}},{start:{line:2,column:23306},end:{line:2,column:23308}}],line:2},"124":{loc:{start:{line:2,column:23318},end:{line:2,column:23343}},type:"cond-expr",locations:[{start:{line:2,column:23338},end:{line:2,column:23340}},{start:{line:2,column:23341},end:{line:2,column:23343}}],line:2},"125":{loc:{start:{line:2,column:23353},end:{line:2,column:23375}},type:"cond-expr",locations:[{start:{line:2,column:23370},end:{line:2,column:23372}},{start:{line:2,column:23373},end:{line:2,column:23375}}],line:2}},s:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"116":0,"117":0,"118":0,"119":0,"120":0,"121":0,"122":0,"123":0,"124":0,"125":0,"126":0,"127":0,"128":0,"129":0,"130":0,"131":0,"132":0,"133":0,"134":0,"135":0,"136":0,"137":0,"138":0,"139":0,"140":0,"141":0,"142":0,"143":0,"144":0,"145":0,"146":0,"147":0,"148":0,"149":0,"150":0,"151":0,"152":0,"153":0,"154":0,"155":0,"156":0,"157":0,"158":0,"159":0,"160":0,"161":0,"162":0,"163":0,"164":0,"165":0,"166":0,"167":0,"168":0,"169":0,"170":0,"171":0,"172":0,"173":0,"174":0,"175":0,"176":0,"177":0,"178":0,"179":0,"180":0,"181":0,"182":0,"183":0,"184":0,"185":0,"186":0,"187":0,"188":0,"189":0,"190":0,"191":0,"192":0,"193":0,"194":0,"195":0,"196":0,"197":0,"198":0,"199":0,"200":0,"201":0,"202":0,"203":0,"204":0,"205":0,"206":0,"207":0,"208":0,"209":0,"210":0,"211":0,"212":0,"213":0,"214":0,"215":0,"216":0,"217":0,"218":0,"219":0,"220":0,"221":0,"222":0,"223":0,"224":0,"225":0,"226":0,"227":0,"228":0,"229":0,"230":0,"231":0,"232":0,"233":0,"234":0,"235":0,"236":0,"237":0,"238":0,"239":0,"240":0,"241":0,"242":0,"243":0,"244":0,"245":0,"246":0,"247":0,"248":0,"249":0,"250":0,"251":0,"252":0,"253":0,"254":0,"255":0,"256":0,"257":0,"258":0,"259":0,"260":0,"261":0,"262":0,"263":0,"264":0,"265":0,"266":0,"267":0,"268":0,"269":0,"270":0,"271":0,"272":0,"273":0,"274":0,"275":0,"276":0,"277":0,"278":0,"279":0,"280":0,"281":0,"282":0,"283":0,"284":0,"285":0,"286":0,"287":0,"288":0,"289":0,"290":0,"291":0,"292":0,"293":0,"294":0,"295":0,"296":0,"297":0,"298":0,"299":0,"300":0,"301":0,"302":0,"303":0,"304":0,"305":0,"306":0,"307":0,"308":0,"309":0,"310":0,"311":0,"312":0,"313":0,"314":0,"315":0,"316":0,"317":0,"318":0,"319":0,"320":0,"321":0,"322":0,"323":0,"324":0,"325":0,"326":0,"327":0,"328":0,"329":0,"330":0,"331":0,"332":0,"333":0,"334":0,"335":0,"336":0,"337":0,"338":0,"339":0,"340":0,"341":0,"342":0,"343":0,"344":0,"345":0},f:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"116":0,"117":0,"118":0,"119":0,"120":0,"121":0,"122":0,"123":0,"124":0,"125":0,"126":0,"127":0,"128":0,"129":0,"130":0,"131":0},b:{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0],"9":[0,0],"10":[0,0],"11":[0,0],"12":[0,0],"13":[0,0],"14":[0,0],"15":[0,0],"16":[0,0],"17":[0,0],"18":[0,0],"19":[0,0],"20":[0,0],"21":[0,0],"22":[0,0],"23":[0,0],"24":[0,0],"25":[0,0],"26":[0,0],"27":[0,0],"28":[0,0],"29":[0,0],"30":[0,0],"31":[0,0],"32":[0,0],"33":[0,0],"34":[0,0],"35":[0,0],"36":[0,0],"37":[0,0],"38":[0,0],"39":[0,0],"40":[0,0],"41":[0,0],"42":[0,0],"43":[0,0],"44":[0,0],"45":[0,0],"46":[0,0],"47":[0,0],"48":[0,0],"49":[0,0],"50":[0,0],"51":[0,0],"52":[0,0],"53":[0,0],"54":[0,0],"55":[0,0],"56":[0,0],"57":[0,0],"58":[0,0],"59":[0,0],"60":[0,0],"61":[0,0],"62":[0,0],"63":[0,0],"64":[0,0],"65":[0,0],"66":[0,0],"67":[0,0],"68":[0,0],"69":[0,0],"70":[0,0],"71":[0,0],"72":[0,0],"73":[0,0],"74":[0,0],"75":[0,0],"76":[0,0],"77":[0,0],"78":[0,0],"79":[0,0],"80":[0,0],"81":[0,0],"82":[0,0],"83":[0,0],"84":[0,0],"85":[0,0],"86":[0,0],"87":[0,0],"88":[0,0],"89":[0,0],"90":[0,0],"91":[0,0],"92":[0,0],"93":[0,0],"94":[0,0],"95":[0,0],"96":[0,0],"97":[0,0],"98":[0,0],"99":[0,0],"100":[0,0,0],"101":[0,0,0,0],"102":[0,0],"103":[0,0],"104":[0,0],"105":[0,0],"106":[0,0],"107":[0,0],"108":[0,0],"109":[0,0],"110":[0,0],"111":[0,0],"112":[0,0],"113":[0,0],"114":[0,0],"115":[0,0,0],"116":[0,0],"117":[0,0],"118":[0,0],"119":[0,0],"120":[0,0],"121":[0,0],"122":[0,0],"123":[0,0],"124":[0,0],"125":[0,0]},inputSourceMap:{version:3,sources:["src/app/features/ward-management/components/assign-ward-dialog-component/assign-ward-dialog-component.ts","src/app/features/ward-management/components/assign-ward-dialog-component/assign-ward-dialog-component.html","src/app/features/ward-management/components/assign-operator-dialog-component/assign-operator-dialog-component.ts","src/app/features/ward-management/components/assign-operator-dialog-component/assign-operator-dialog-component.html","src/app/features/ward-management/components/ward-form-dialog-component/ward-form-dialog-component.ts","src/app/features/ward-management/components/ward-form-dialog-component/ward-form-dialog-component.html","src/app/features/ward-management/components/ward-management-page-component/ward-management-page-component.ts","src/app/features/ward-management/components/ward-management-page-component/ward-management-page-component.html"],sourcesContent:["import { ChangeDetectionStrategy, Component, OnInit, inject, input, output } from '@angular/core';\nimport { FormBuilder, ReactiveFormsModule, Validators } from '@angular/forms';\nimport type { Plant } from '../../models/plant.model';\nimport type { AssignPlantDto } from '../../models/ward-api.dto';\nimport type { Ward } from '../../models/ward.model';\n\n@Component({\n selector: 'app-assign-ward-dialog-component',\n imports: [ReactiveFormsModule],\n templateUrl: './assign-ward-dialog-component.html',\n styleUrl: './assign-ward-dialog-component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AssignWardDialogComponent implements OnInit {\n private readonly formBuilder = inject(FormBuilder);\n\n public readonly wardId = input(0);\n public readonly availableWards = input([]);\n public readonly availablePlants = input([]);\n public readonly submitted = output();\n public readonly cancelled = output();\n\n public readonly form = this.formBuilder.group({\n plantId: this.formBuilder.control(null, { validators: [Validators.required] }),\n });\n\n public ngOnInit(): void {\n this.form.reset({ plantId: null });\n }\n\n public onSubmit(): void {\n if (this.form.invalid) {\n this.form.markAllAsTouched();\n return;\n }\n\n const plantId = this.form.controls.plantId.value;\n if (plantId === null) {\n return;\n }\n\n this.submitted.emit({ plantId });\n }\n\n public onCancel(): void {\n this.cancelled.emit();\n }\n}\n","\n\n \n
\n
\n
\n \n \n \n
\n
\n

\n Assegna appartamento\n

\n

Seleziona un appartamento non ancora assegnato

\n
\n
\n \n
\n\n \n
\n\n \n
\n \n \n \n Reparto: {{ wardId() }}\n
\n\n
\n
\n \n \n

Campo obbligatorio.

\n
\n\n @if (form.controls.plantId.touched && form.controls.plantId.invalid) {\n

\n \n \n \n Seleziona un appartamento.\n

\n }\n
\n
\n\n \n
\n \n \n
\n\n
","import { ChangeDetectionStrategy, Component, OnInit, inject, input, output } from '@angular/core';\nimport { FormBuilder, ReactiveFormsModule, Validators } from '@angular/forms';\nimport type { User } from '../../../../core/models/user.model';\nimport type { AssignOperatorDto } from '../../models/ward-api.dto';\nimport type { Ward } from '../../models/ward.model';\n\n@Component({\n selector: 'app-assign-operator-dialog-component',\n imports: [ReactiveFormsModule],\n templateUrl: './assign-operator-dialog-component.html',\n styleUrl: './assign-operator-dialog-component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AssignOperatorDialogComponent implements OnInit {\n private readonly formBuilder = inject(FormBuilder);\n\n public readonly wardId = input(0);\n public readonly availableWards = input([]);\n public readonly availableOperators = input([]);\n public readonly submitted = output();\n public readonly cancelled = output();\n\n public readonly form = this.formBuilder.group({\n userId: this.formBuilder.control(null, { validators: [Validators.required] }),\n });\n\n public ngOnInit(): void {\n this.form.reset({ userId: null });\n }\n\n public onSubmit(): void {\n if (this.form.invalid) {\n this.form.markAllAsTouched();\n return;\n }\n\n this.submitted.emit({ userId: this.form.controls.userId.value as number });\n }\n\n public onCancel(): void {\n this.cancelled.emit();\n }\n\n public getOperatorLabel(operator: User): string {\n const fullName = `${operator.firstName} ${operator.lastName}`.trim();\n return fullName || operator.username;\n }\n}\n","\n\n \n
\n
\n
\n \n \n \n
\n
\n

\n Assegna operatore sanitario\n

\n

Seleziona un operatore dall'elenco disponibile.

\n
\n
\n \n
\n\n \n
\n\n \n
\n \n \n \n Reparto: {{ wardId() }}\n
\n\n
\n
\n \n \n

Campo obbligatorio.

\n
\n\n @if (form.controls.userId.touched && form.controls.userId.invalid) {\n

\n \n \n \n Seleziona un operatore.\n

\n }\n
\n
\n\n \n
\n \n \n
\n\n
","import { ChangeDetectionStrategy, Component, computed, effect, inject, input, output } from '@angular/core';\nimport { FormBuilder, ReactiveFormsModule, Validators } from '@angular/forms';\nimport type { CreateWardDto } from '../../models/ward-api.dto';\nimport type { Ward } from '../../models/ward.model';\n\n@Component({\n selector: 'app-ward-form-dialog-component',\n imports: [ReactiveFormsModule],\n templateUrl: './ward-form-dialog-component.html',\n styleUrl: './ward-form-dialog-component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class WardFormDialogComponent {\n private readonly formBuilder = inject(FormBuilder);\n\n public readonly ward = input(null);\n public readonly submitted = output();\n public readonly cancelled = output();\n\n public readonly form = this.formBuilder.nonNullable.group({\n name: ['', [Validators.required, Validators.maxLength(100)]],\n });\n\n private readonly syncFormWithWard = effect(() => {\n const ward = this.ward();\n this.form.patchValue({ name: ward?.name ?? '' }, { emitEvent: false });\n });\n\n public readonly isEditMode = computed(() => this.ward() !== null);\n\n public onSubmit(): void {\n if (this.form.invalid) {\n this.form.markAllAsTouched();\n return;\n }\n\n const dto: CreateWardDto = { name: this.form.controls.name.value.trim() };\n this.submitted.emit(dto);\n }\n\n public onCancel(): void {\n this.cancelled.emit();\n }\n}\n","\n\n \n
\n
\n
\n \n @if (isEditMode()) {\n \n } @else {\n \n }\n \n
\n
\n

\n {{ isEditMode() ? 'Modifica reparto' : 'Crea reparto' }}\n

\n

Compila il nome del reparto e conferma.

\n
\n
\n \n
\n\n \n
\n
\n \n \n

Campo obbligatorio. Massimo 100 caratteri.

\n\n @if (form.controls.name.touched && form.controls.name.invalid) {\n

\n \n \n \n \n @if (form.controls.name.errors?.['required']) { Il nome reparto \xE8 obbligatorio. }\n @if (form.controls.name.errors?.['maxlength']) { Il nome non pu\xF2 superare 100 caratteri. }\n \n

\n }\n
\n
\n\n \n
\n \n \n
\n\n
","import { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, OnDestroy, OnInit, computed, inject, signal } from '@angular/core';\nimport { Subject, takeUntil } from 'rxjs';\nimport type { Plant } from '../../models/plant.model';\nimport type { AssignPlantDto, AssignOperatorDto, CreateWardDto, UpdateWardDto } from '../../models/ward-api.dto';\nimport type { RemovePlantEvent, RemoveOperatorEvent } from '../../models/ward-management.events';\nimport type { Ward } from '../../models/ward.model';\nimport type { User } from '../../../../core/models/user.model';\nimport { ConfirmDialogComponent } from '../../../../shared/components/confirm-dialog/confirm-dialog.component';\nimport { WardManagementStore } from '../../services/ward-management.store';\nimport { AssignWardDialogComponent } from '../assign-ward-dialog-component/assign-ward-dialog-component';\nimport { AssignOperatorDialogComponent } from '../assign-operator-dialog-component/assign-operator-dialog-component';\nimport { WardFormDialogComponent } from '../ward-form-dialog-component/ward-form-dialog-component';\n\n@Component({\n selector: 'app-ward-management-page-component',\n imports: [\n AsyncPipe,\n WardFormDialogComponent,\n AssignOperatorDialogComponent,\n AssignWardDialogComponent,\n ConfirmDialogComponent,\n ],\n templateUrl: './ward-management-page-component.html',\n styleUrl: './ward-management-page-component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class WardManagementPageComponent implements OnInit, OnDestroy {\n private readonly store = inject(WardManagementStore);\n private readonly destroy$ = new Subject();\n\n public readonly wards$ = this.store.wards$;\n public readonly isLoading$ = this.store.isLoading$;\n public readonly error$ = this.store.error$;\n\n public readonly snackbarMessage = signal(null);\n public readonly wardDialogMode = signal<'closed' | 'create' | 'edit'>('closed');\n public readonly selectedWardId = signal(null);\n public readonly selectedApartmentId = signal(null);\n public readonly mobileStep = signal<'wards' | 'apartments' | 'operators'>('wards');\n public readonly operatorWardId = signal(null);\n public readonly availableOperatorsFromFetch = signal(null);\n public readonly isLoadingAvailableOperators = signal(false);\n public readonly plantWardId = signal(null);\n public readonly availablePlantsFromFetch = signal(null);\n public readonly isLoadingAvailablePlants = signal(false);\n public readonly confirmState = signal<\n | { kind: 'delete-ward'; wardId: number }\n | { kind: 'remove-operator'; wardId: number; userId: number }\n | { kind: 'remove-plant'; wardId: number; plantId: string }\n | null\n >(null);\n\n public readonly wardsSnapshot = signal([]);\n public readonly selectedWard = computed(() => {\n const wardId = this.selectedWardId();\n if (!wardId) {\n return null;\n }\n\n return this.wardsSnapshot().find((ward) => ward.id === wardId) ?? null;\n });\n\n public readonly selectedApartment = computed(() => {\n const apartmentId = this.selectedApartmentId();\n const ward = this.selectedWard();\n if (!apartmentId || !ward) {\n return null;\n }\n\n return ward.apartments.find((apartment) => apartment.id === apartmentId) ?? null;\n });\n\n public readonly wardDialogValue = computed(() => {\n if (this.wardDialogMode() !== 'edit') {\n return null;\n }\n\n return this.selectedWard();\n });\n\n public readonly availablePlants = computed(() => {\n const fetchedPlants = this.availablePlantsFromFetch();\n if (fetchedPlants !== null) {\n return fetchedPlants;\n }\n\n // Without backend response, we cannot reliably infer global unassigned plants.\n return [];\n });\n\n public readonly availableOperators = computed(() => {\n const fetchedOperators = this.availableOperatorsFromFetch();\n if (fetchedOperators !== null) {\n return fetchedOperators;\n }\n\n // Without backend response, we cannot reliably infer global unassigned operators.\n return [];\n });\n\n public ngOnInit(): void {\n this.store.loadWards();\n\n this.wards$.pipe(takeUntil(this.destroy$)).subscribe((wards) => {\n this.wardsSnapshot.set(wards);\n\n if (wards.length === 0) {\n this.selectedWardId.set(null);\n this.selectedApartmentId.set(null);\n this.mobileStep.set('wards');\n return;\n }\n\n const selectedWardId = this.selectedWardId();\n const selectedWardExists = selectedWardId !== null && wards.some((ward) => ward.id === selectedWardId);\n\n if (!selectedWardExists) {\n this.selectedWardId.set(wards[0].id);\n this.selectedApartmentId.set(null);\n }\n\n const selectedApartmentId = this.selectedApartmentId();\n if (selectedApartmentId !== null) {\n const activeWard = wards.find((ward) => ward.id === this.selectedWardId());\n const apartmentStillExists = activeWard?.apartments.some((apartment) => apartment.id === selectedApartmentId) ?? false;\n if (!apartmentStillExists) {\n this.selectedApartmentId.set(null);\n }\n }\n });\n\n this.error$.pipe(takeUntil(this.destroy$)).subscribe((message) => {\n this.snackbarMessage.set(message);\n });\n }\n\n public ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n public dismissSnackbar(): void {\n this.snackbarMessage.set(null);\n }\n\n public selectWard(wardId: number): void {\n if (this.selectedWardId() === wardId) {\n this.mobileStep.set('apartments');\n return;\n }\n\n this.selectedWardId.set(wardId);\n this.selectedApartmentId.set(null);\n this.mobileStep.set('apartments');\n }\n\n public selectApartment(apartmentId: string): void {\n this.selectedApartmentId.set(apartmentId);\n }\n\n public showWardListStep(): void {\n this.mobileStep.set('wards');\n }\n\n public showApartmentsStep(): void {\n this.mobileStep.set('apartments');\n }\n\n public showOperatorsStep(): void {\n this.mobileStep.set('operators');\n }\n\n public onCreateWard(): void {\n this.wardDialogMode.set('create');\n }\n\n public onCreateWardSubmit(dto: CreateWardDto): void {\n this.store.createWard(dto);\n this.wardDialogMode.set('closed');\n }\n\n public onEditWard(ward: Ward): void {\n this.selectedWardId.set(ward.id);\n this.wardDialogMode.set('edit');\n }\n\n public onEditSelectedWard(): void {\n const ward = this.selectedWard();\n if (!ward) {\n return;\n }\n\n this.onEditWard(ward);\n }\n\n public onEditWardSubmit(dto: UpdateWardDto): void {\n const ward = this.selectedWard();\n if (!ward) {\n return;\n }\n\n this.store.updateWard(ward.id, dto);\n this.wardDialogMode.set('closed');\n }\n\n public onCloseWardDialog(): void {\n this.wardDialogMode.set('closed');\n }\n\n public onDeleteWard(wardId: number): void {\n this.confirmState.set({ kind: 'delete-ward', wardId });\n }\n\n public onAssignOperator(wardId: number): void {\n this.operatorWardId.set(wardId);\n this.availableOperatorsFromFetch.set(null);\n this.isLoadingAvailableOperators.set(true);\n\n this.store.getAvailableUsersForWard(wardId).pipe(takeUntil(this.destroy$)).subscribe((users) => {\n this.availableOperatorsFromFetch.set(users);\n this.isLoadingAvailableOperators.set(false);\n });\n }\n\n public onAssignOperatorSubmit(dto: AssignOperatorDto): void {\n const wardId = this.operatorWardId();\n if (!wardId) {\n return;\n }\n\n this.store.assignOperator(wardId, dto);\n this.operatorWardId.set(null);\n this.availableOperatorsFromFetch.set(null);\n this.isLoadingAvailableOperators.set(false);\n }\n\n public onCloseAssignOperatorDialog(): void {\n this.operatorWardId.set(null);\n this.availableOperatorsFromFetch.set(null);\n this.isLoadingAvailableOperators.set(false);\n }\n\n public onRemoveOperator(event: RemoveOperatorEvent): void {\n this.confirmState.set({ kind: 'remove-operator', wardId: event.wardId, userId: event.userId });\n }\n\n public onAssignPlant(wardId: number): void {\n this.plantWardId.set(wardId);\n this.availablePlantsFromFetch.set(null);\n this.isLoadingAvailablePlants.set(true);\n\n this.store.getAvailablePlantsForWard(wardId).pipe(takeUntil(this.destroy$)).subscribe((plants) => {\n this.availablePlantsFromFetch.set(plants);\n this.isLoadingAvailablePlants.set(false);\n });\n }\n\n public onAssignPlantSubmit(dto: AssignPlantDto): void {\n const wardId = this.plantWardId();\n if (!wardId) {\n return;\n }\n\n this.store.assignPlant(wardId, dto);\n this.plantWardId.set(null);\n }\n\n public onCloseAssignPlantDialog(): void {\n this.plantWardId.set(null);\n this.availablePlantsFromFetch.set(null);\n this.isLoadingAvailablePlants.set(false);\n }\n\n public onRemovePlant(event: RemovePlantEvent): void {\n this.confirmState.set({\n kind: 'remove-plant',\n wardId: event.wardId,\n plantId: event.plantId,\n });\n }\n\n public onConfirmDialogConfirmed(): void {\n const state = this.confirmState();\n if (!state) {\n return;\n }\n\n if (state.kind === 'delete-ward') {\n this.store.deleteWard(state.wardId);\n }\n\n if (state.kind === 'remove-operator') {\n this.store.removeOperator(state.wardId, state.userId);\n }\n\n if (state.kind === 'remove-plant') {\n this.store.removePlant(state.wardId, state.plantId);\n }\n\n this.confirmState.set(null);\n }\n\n public onConfirmDialogCancelled(): void {\n this.confirmState.set(null);\n }\n\n public getConfirmMessage(): string {\n const state = this.confirmState();\n if (!state) {\n return 'Confermi questa operazione?';\n }\n\n if (state.kind === 'delete-ward') {\n return 'Confermi l\\'eliminazione del reparto?';\n }\n\n if (state.kind === 'remove-operator') {\n return 'Confermi la rimozione dell\\'operatore dal reparto?';\n }\n\n return 'Confermi la rimozione dell\\'appartamento dal reparto?';\n }\n\n public getConfirmLabel(): string {\n const state = this.confirmState();\n if (!state) {\n return 'Conferma';\n }\n\n if (state.kind === 'remove-operator' || state.kind === 'remove-plant') {\n return 'Rimuovi';\n }\n\n return 'Conferma';\n }\n\n public getOperatorDisplayName(firstName: string, lastName: string): string {\n return `${firstName} ${lastName}`.trim();\n }\n}\n","
\n\n \n
\n
\n
\n

Organizzazione

\n

Gestione reparti

\n

Navigazione a colonne: Reparti \u2192 Appartamenti \u2192 Operatori.

\n
\n
\n
\n
\n \n Sistema attivo\n
\n
\n
\n\n \n @if (snackbarMessage(); as errorMessage) {\n
\n
\n \n \n \n {{ errorMessage }}\n
\n \n
\n }\n\n \n @if (isLoading$ | async) {\n
\n
\n Caricamento in corso\u2026\n
\n }\n\n @if (wards$ | async; as wards) {\n @if (wards.length === 0) {\n \n \n
\n \n \n \n
\n

Nessun reparto disponibile

\n

Crea il primo reparto dal pannello dei reparti a sinistra.

\n \n \n\n } @else {\n\n \n @if (selectedWard(); as activeWard) {\n
\n
\n \n \n \n
\n

\n Reparto attivo: {{ activeWard.name }}\n

\n
\n }\n\n \n
\n\n \n \n\n \n
\n\n @if (selectedWard(); as activeWard) {\n\n
\n
\n
\n Appartamenti\n

{{ activeWard.name }}

\n
\n
\n \n
\n
\n
\n\n
\n @if (activeWard.apartments.length === 0) {\n \n \n \n \n

Nessun appartamento assegnato

\n
\n } @else {\n
    \n @for (apartment of activeWard.apartments; track apartment.id) {\n
  • \n \n \n \n
\n \n }\n \n }\n \n\n } @else {\n
\n \n \n \n

Seleziona un reparto

\n

Gli appartamenti appariranno qui

\n
\n }\n
\n\n \n
\n\n @if (selectedWard(); as activeWard) {\n\n
\n
\n
\n Operatori\n

{{ activeWard.name }}

\n
\n \n
\n
\n\n
\n @if (activeWard.operators.length === 0) {\n \n \n \n \n

Nessun operatore assegnato

\n
\n } @else {\n
    \n @for (operator of activeWard.operators; track operator.id) {\n
  • \n \n
    \n \n {{ operator.firstName[0] }}{{ operator.lastName[0] }}\n
    \n {{ getOperatorDisplayName(operator.firstName,\n operator.lastName) }}\n \n \n \n
  • \n }\n
\n }\n \n\n } @else {\n
\n \n \n \n

Seleziona un reparto

\n

Gli operatori appariranno qui

\n
\n }\n
\n\n \n\n } \n\n } \n\n \n @if (wardDialogMode() !== 'closed') {\n \n }\n @if (operatorWardId(); as activeWardId) {\n \n }\n @if (plantWardId(); as activeWardId) {\n \n }\n @if (confirmState()) {\n \n }\n\n"],mappings:"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",names:["\u0275\u0275elementStart","\u0275\u0275text","\u0275\u0275elementEnd","\u0275\u0275property","apartment_r1","id","\u0275\u0275advance","\u0275\u0275textInterpolate","name","\u0275\u0275element","AssignWardDialogComponent","formBuilder","inject","FormBuilder","wardId","input","availableWards","availablePlants","submitted","output","cancelled","form","group","plantId","control","validators","Validators","required","ngOnInit","reset","onSubmit","invalid","markAllAsTouched","controls","value","emit","onCancel","selectors","inputs","outputs","decls","vars","consts","template","rf","ctx","\u0275\u0275listener","\u0275\u0275repeaterCreate","AssignWardDialogComponent_For_31_Template","_forTrack0","\u0275\u0275conditionalCreate","AssignWardDialogComponent_Conditional_34_Template","\u0275\u0275repeater","\u0275\u0275conditional","touched","ReactiveFormsModule","\u0275NgNoValidate","NgSelectOption","\u0275NgSelectMultipleOption","SelectControlValueAccessor","NgControlStatus","NgControlStatusGroup","FormGroupDirective","FormControlName","encapsulation","changeDetection","\u0275\u0275elementStart","\u0275\u0275text","\u0275\u0275elementEnd","\u0275\u0275property","operator_r1","id","\u0275\u0275advance","\u0275\u0275textInterpolate","ctx_r1","getOperatorLabel","\u0275\u0275element","AssignOperatorDialogComponent","formBuilder","inject","FormBuilder","wardId","input","availableWards","availableOperators","submitted","output","cancelled","form","group","userId","control","validators","Validators","required","ngOnInit","reset","onSubmit","invalid","markAllAsTouched","emit","controls","value","onCancel","operator","firstName","lastName","trim","username","selectors","inputs","outputs","decls","vars","consts","template","rf","ctx","\u0275\u0275listener","\u0275\u0275repeaterCreate","AssignOperatorDialogComponent_For_31_Template","_forTrack0","\u0275\u0275conditionalCreate","AssignOperatorDialogComponent_Conditional_34_Template","\u0275\u0275repeater","\u0275\u0275conditional","touched","ReactiveFormsModule","\u0275NgNoValidate","NgSelectOption","\u0275NgSelectMultipleOption","SelectControlValueAccessor","NgControlStatus","NgControlStatusGroup","FormGroupDirective","FormControlName","encapsulation","changeDetection","\u0275\u0275element","\u0275\u0275text","\u0275\u0275elementStart","\u0275\u0275elementEnd","\u0275\u0275conditionalCreate","WardFormDialogComponent_Conditional_24_Conditional_4_Template","WardFormDialogComponent_Conditional_24_Conditional_5_Template","\u0275\u0275advance","\u0275\u0275conditional","ctx_r0","form","controls","name","errors","WardFormDialogComponent","formBuilder","inject","FormBuilder","ward","input","submitted","output","cancelled","nonNullable","group","Validators","required","maxLength","syncFormWithWard","effect","patchValue","emitEvent","isEditMode","computed","onSubmit","invalid","markAllAsTouched","dto","value","trim","emit","onCancel","selectors","inputs","outputs","decls","vars","consts","template","rf","ctx","WardFormDialogComponent_Conditional_5_Template","WardFormDialogComponent_Conditional_6_Template","\u0275\u0275listener","WardFormDialogComponent_Conditional_24_Template","\u0275\u0275classMap","\u0275\u0275textInterpolate1","\u0275\u0275property","touched","ReactiveFormsModule","\u0275NgNoValidate","DefaultValueAccessor","NgControlStatus","NgControlStatusGroup","MaxLengthValidator","FormGroupDirective","FormControlName","styles","changeDetection","\u0275\u0275elementStart","\u0275\u0275element","\u0275\u0275elementEnd","\u0275\u0275text","\u0275\u0275listener","\u0275\u0275restoreView","_r1","ctx_r1","\u0275\u0275nextContext","\u0275\u0275resetView","dismissSnackbar","\u0275\u0275advance","\u0275\u0275textInterpolate","ctx","_r3","onCreateWard","_r5","showWardListStep","showApartmentsStep","showOperatorsStep","\u0275\u0275classMap","mobileStep","name","ward_r7","_r6","$implicit","selectWard","id","selectedWardId","\u0275\u0275textInterpolate1","apartments","length","apartment_r11","_r10","selectApartment","activeWard_r9","onRemovePlant","wardId","plantId","selectedApartmentId","\u0275\u0275repeaterCreate","WardManagementPageComponent_Conditional_17_Conditional_1_Conditional_26_Conditional_15_For_2_Template","_forTrack0","\u0275\u0275repeater","_r8","onAssignPlant","\u0275\u0275conditionalCreate","WardManagementPageComponent_Conditional_17_Conditional_1_Conditional_26_Conditional_14_Template","WardManagementPageComponent_Conditional_17_Conditional_1_Conditional_26_Conditional_15_Template","\u0275\u0275conditional","operator_r15","_r14","activeWard_r13","onRemoveOperator","userId","\u0275\u0275textInterpolate2","firstName","lastName","getOperatorDisplayName","WardManagementPageComponent_Conditional_17_Conditional_1_Conditional_29_Conditional_14_For_2_Template","operators","_r12","onAssignOperator","WardManagementPageComponent_Conditional_17_Conditional_1_Conditional_29_Conditional_13_Template","WardManagementPageComponent_Conditional_17_Conditional_1_Conditional_29_Conditional_14_Template","WardManagementPageComponent_Conditional_17_Conditional_1_Conditional_0_Template","_r4","onDeleteWard","selectedWard","onEditSelectedWard","WardManagementPageComponent_Conditional_17_Conditional_1_For_24_Template","WardManagementPageComponent_Conditional_17_Conditional_1_Conditional_26_Template","WardManagementPageComponent_Conditional_17_Conditional_1_Conditional_27_Template","WardManagementPageComponent_Conditional_17_Conditional_1_Conditional_29_Template","WardManagementPageComponent_Conditional_17_Conditional_1_Conditional_30_Template","tmp_3_0","\u0275\u0275classProp","\u0275\u0275property","wards_r16","tmp_9_0","tmp_11_0","WardManagementPageComponent_Conditional_17_Conditional_0_Template","WardManagementPageComponent_Conditional_17_Conditional_1_Template","$event","_r17","wardDialogMode","onCreateWardSubmit","onEditWardSubmit","onCloseWardDialog","wardDialogValue","_r18","onAssignOperatorSubmit","onCloseAssignOperatorDialog","wardsSnapshot","availableOperators","_r19","onAssignPlantSubmit","onCloseAssignPlantDialog","availablePlants","_r20","onConfirmDialogConfirmed","onConfirmDialogCancelled","getConfirmMessage","getConfirmLabel","WardManagementPageComponent","store","inject","WardManagementStore","destroy$","Subject","wards$","isLoading$","error$","snackbarMessage","signal","operatorWardId","availableOperatorsFromFetch","isLoadingAvailableOperators","plantWardId","availablePlantsFromFetch","isLoadingAvailablePlants","confirmState","computed","find","ward","selectedApartment","apartmentId","apartment","fetchedPlants","fetchedOperators","ngOnInit","loadWards","pipe","takeUntil","subscribe","wards","set","some","message","ngOnDestroy","next","complete","dto","createWard","onEditWard","updateWard","kind","getAvailableUsersForWard","users","assignOperator","event","getAvailablePlantsForWard","plants","assignPlant","state","deleteWard","removeOperator","removePlant","trim","selectors","decls","vars","consts","template","rf","WardManagementPageComponent_Conditional_14_Template","WardManagementPageComponent_Conditional_15_Template","WardManagementPageComponent_Conditional_17_Template","WardManagementPageComponent_Conditional_19_Template","WardManagementPageComponent_Conditional_20_Template","WardManagementPageComponent_Conditional_21_Template","WardManagementPageComponent_Conditional_22_Template","tmp_0_0","\u0275\u0275pipeBind1","tmp_2_0","tmp_4_0","tmp_5_0","WardFormDialogComponent","AssignOperatorDialogComponent","AssignWardDialogComponent","ConfirmDialogComponent","AsyncPipe","styles","changeDetection"]},_coverageSchema:"1a1c01bbd47fc00a2c39e90264f33305004495a9",hash:"94d1f1e71ee6c5ee58f66c760abbb534500a2d8d"};var coverage=global[gcv]||(global[gcv]={});if(!coverage[path]||coverage[path].hash!==hash){coverage[path]=coverageData;}var actualCoverage=coverage[path];{// @ts-ignore +cov_1s2jxigxia=function(){return actualCoverage;};}return actualCoverage;}cov_1s2jxigxia();import{d as oe}from"./chunk-ZA5BAUMQ.js";import{a as ae}from"./chunk-BESIDB4Y.js";import"./chunk-54EPVJ7F.js";import"./chunk-6R7YSGCL.js";import"./chunk-666MVPNS.js";import"./chunk-WCZEJQCH.js";import"./chunk-EZ7WFT6U.js";import{a as ne,b as D,c as P,d as O,e as L,f as F,g as N,h as $,i as R,j as q,k as ie,l as j,m as G}from"./chunk-X3YLKFKT.js";import"./chunk-CFHT7CZE.js";import"./chunk-CX4DL26R.js";import"./chunk-ZZLQRDHJ.js";import"./chunk-65RKWSY3.js";import"./chunk-2S5V5XEE.js";import{h as te}from"./chunk-F6OGAIBI.js";import{Ab as r,Bb as S,Cb as H,Db as ee,G as z,Ib as J,Jb as K,Ka as E,Pb as I,Q as W,Sb as y,Tb as k,V as b,W as _,X as p,Y as g,Ya as f,_a as x,ab as V,bb as A,cb as v,d as Y,db as t,eb as n,fb as c,ga as C,ia as Z,jb as w,nb as u,pb as d,wa as l,yb as B,zb as M}from"./chunk-RYTNMYZW.js";import"./chunk-VCZGUBMY.js";cov_1s2jxigxia().s[0]++;var me=(i,s)=>{cov_1s2jxigxia().f[0]++;cov_1s2jxigxia().s[1]++;return s.id;};function ce(i,s){cov_1s2jxigxia().f[1]++;cov_1s2jxigxia().s[2]++;if((cov_1s2jxigxia().b[1][0]++,i&1)&&(cov_1s2jxigxia().b[1][1]++,t(0,"option",21),r(1),n()),i&2){cov_1s2jxigxia().b[0][0]++;let e=(cov_1s2jxigxia().s[3]++,s.$implicit);cov_1s2jxigxia().s[4]++;v("ngValue",e.id),l(),S(e.name);}else{cov_1s2jxigxia().b[0][1]++;}}function pe(i,s){cov_1s2jxigxia().f[2]++;cov_1s2jxigxia().s[5]++;(cov_1s2jxigxia().b[2][0]++,i&1)&&(cov_1s2jxigxia().b[2][1]++,t(0,"p",23),p(),t(1,"svg",27),c(2,"path",28),n(),r(3," Seleziona un appartamento. "),n());}var le=(cov_1s2jxigxia().s[6]++,(()=>{cov_1s2jxigxia().f[3]++;class i{formBuilder=(cov_1s2jxigxia().s[7]++,W(j));wardId=(cov_1s2jxigxia().s[8]++,k(0));availableWards=(cov_1s2jxigxia().s[9]++,k([]));availablePlants=(cov_1s2jxigxia().s[10]++,k([]));submitted=(cov_1s2jxigxia().s[11]++,y());cancelled=(cov_1s2jxigxia().s[12]++,y());form=(cov_1s2jxigxia().s[13]++,this.formBuilder.group({plantId:this.formBuilder.control(null,{validators:[D.required]})}));ngOnInit(){cov_1s2jxigxia().f[4]++;cov_1s2jxigxia().s[14]++;this.form.reset({plantId:null});}onSubmit(){cov_1s2jxigxia().f[5]++;cov_1s2jxigxia().s[15]++;if(this.form.invalid){cov_1s2jxigxia().b[3][0]++;cov_1s2jxigxia().s[16]++;this.form.markAllAsTouched();cov_1s2jxigxia().s[17]++;return;}else{cov_1s2jxigxia().b[3][1]++;}let e=(cov_1s2jxigxia().s[18]++,this.form.controls.plantId.value);cov_1s2jxigxia().s[19]++;(cov_1s2jxigxia().b[4][0]++,e!==null)&&(cov_1s2jxigxia().b[4][1]++,this.submitted.emit({plantId:e}));}onCancel(){cov_1s2jxigxia().f[6]++;cov_1s2jxigxia().s[20]++;this.cancelled.emit();}static ɵfac=(cov_1s2jxigxia().s[21]++,function(o){cov_1s2jxigxia().f[7]++;cov_1s2jxigxia().s[22]++;return new((cov_1s2jxigxia().b[5][0]++,o)||(cov_1s2jxigxia().b[5][1]++,i))();});static ɵcmp=(cov_1s2jxigxia().s[23]++,E({type:i,selectors:[["app-assign-ward-dialog-component"]],inputs:{wardId:[1,"wardId"],availableWards:[1,"availableWards"],availablePlants:[1,"availablePlants"]},outputs:{submitted:"submitted",cancelled:"cancelled"},decls:40,vars:5,consts:[["open","","aria-labelledby","assign-apartment-title",1,"fixed","inset-0","z-50","m-auto","w-[95vw]","max-w-md","overflow-hidden","rounded-2xl","border","border-slate-200","bg-white","p-0","shadow-2xl","backdrop:bg-slate-900/50","focus:outline-none"],[1,"flex","items-center","justify-between","gap-3","border-b","border-slate-100","bg-slate-50","px-5","py-4"],[1,"flex","items-center","gap-3"],[1,"flex","h-8","w-8","shrink-0","items-center","justify-center","rounded-lg","bg-amber-100"],["fill","none","viewBox","0 0 24 24","stroke-width","2","stroke","currentColor",1,"h-4","w-4","text-amber-700"],["stroke-linecap","round","stroke-linejoin","round","d","M2.25 12l8.954-8.955c.44-.439 1.152-.439 1.591 0L21.75 12M4.5 9.75v10.125c0 .621.504 1.125 1.125 1.125H9.75v-4.875c0-.621.504-1.125 1.125-1.125h2.25c.621 0 1.125.504 1.125 1.125V21h4.125c.621 0 1.125-.504 1.125-1.125V9.75M8.25 21h8.25"],["id","assign-apartment-title",1,"text-sm","font-bold","text-slate-900",2,"font-family","'Syne',sans-serif"],[1,"text-xs","text-slate-500"],["type","button","aria-label","Chiudi",1,"flex","h-7","w-7","cursor-pointer","items-center","justify-center","rounded-lg","text-slate-400","transition","hover:bg-slate-100","hover:text-slate-600",3,"click"],["fill","none","viewBox","0 0 24 24","stroke-width","2","stroke","currentColor",1,"h-4","w-4"],["stroke-linecap","round","stroke-linejoin","round","d","M6 18L18 6M6 6l12 12"],[1,"px-5","py-5"],[1,"mb-4","flex","items-center","gap-2","rounded-lg","bg-slate-50","px-3","py-2.5","text-xs","text-slate-500"],["fill","none","viewBox","0 0 24 24","stroke-width","2","stroke","currentColor",1,"h-3.5","w-3.5","shrink-0"],["stroke-linecap","round","stroke-linejoin","round","d","M2.25 21h19.5m-18-18v18m10.5-18v18m6-13.5V21"],[1,"font-semibold","text-slate-700"],[1,"space-y-3",3,"ngSubmit","formGroup"],[1,"space-y-1"],["for","apartment-id",1,"flex","items-center","gap-1","text-xs","font-semibold","uppercase","tracking-wide","text-slate-500"],[1,"text-rose-500"],["id","apartment-id","formControlName","plantId",1,"w-full","rounded-lg","border","border-slate-200","bg-slate-50","px-3","py-2.5","text-sm","text-slate-900","outline-none","transition","hover:border-slate-300","focus:border-amber-300","focus:bg-white","focus:ring-3","focus:ring-amber-100"],[3,"ngValue"],[1,"text-[11px]","text-slate-400"],["role","alert",1,"flex","items-start","gap-2","rounded-lg","border","border-rose-200","bg-rose-50","px-3","py-2","text-xs","text-rose-700"],[1,"flex","items-center","justify-end","gap-2","border-t","border-slate-100","bg-slate-50","px-5","py-3"],["type","button",1,"cursor-pointer","rounded-lg","border","border-slate-200","bg-white","px-4","py-2","text-sm","font-semibold","text-slate-700","transition","hover:bg-slate-50",3,"click"],["type","submit",1,"inline-flex","cursor-pointer","items-center","gap-1.5","rounded-lg","border","border-amber-300","bg-amber-300","px-4","py-2","text-sm","font-bold","text-slate-950","shadow-sm","transition","hover:bg-amber-200","disabled:cursor-not-allowed","disabled:border-slate-300","disabled:bg-slate-200","disabled:text-slate-400",3,"click","disabled"],["fill","currentColor","viewBox","0 0 20 20",1,"mt-0.5","h-3.5","w-3.5","shrink-0"],["fill-rule","evenodd","d","M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7 4a1 1 0 11-2 0 1 1 0 012 0zm-1-9a1 1 0 00-1 1v4a1 1 0 102 0V6a1 1 0 00-1-1z","clip-rule","evenodd"]],template:function(o,a){cov_1s2jxigxia().f[8]++;cov_1s2jxigxia().s[24]++;(cov_1s2jxigxia().b[6][0]++,o&1)&&(cov_1s2jxigxia().b[6][1]++,t(0,"dialog",0)(1,"div",1)(2,"div",2)(3,"div",3),p(),t(4,"svg",4),c(5,"path",5),n()(),g(),t(6,"div")(7,"h2",6),r(8," Assegna appartamento "),n(),t(9,"p",7),r(10,"Seleziona un appartamento non ancora assegnato"),n()()(),t(11,"button",8),u("click",function(){cov_1s2jxigxia().f[9]++;cov_1s2jxigxia().s[25]++;return a.onCancel();}),p(),t(12,"svg",9),c(13,"path",10),n()()(),g(),t(14,"div",11)(15,"div",12),p(),t(16,"svg",13),c(17,"path",14),n(),r(18," Reparto: "),g(),t(19,"span",15),r(20),n()(),t(21,"form",16),u("ngSubmit",function(){cov_1s2jxigxia().f[10]++;cov_1s2jxigxia().s[26]++;return a.onSubmit();}),t(22,"div",17)(23,"label",18),r(24," Appartamento "),t(25,"span",19),r(26,"*"),n()(),t(27,"select",20)(28,"option",21),r(29,"Seleziona un appartamento\u2026"),n(),V(30,ce,2,2,"option",21,me),n(),t(32,"p",22),r(33,"Campo obbligatorio."),n()(),f(34,pe,4,0,"p",23),n()(),t(35,"div",24)(36,"button",25),u("click",function(){cov_1s2jxigxia().f[11]++;cov_1s2jxigxia().s[27]++;return a.onCancel();}),r(37," Annulla "),n(),t(38,"button",26),u("click",function(){cov_1s2jxigxia().f[12]++;cov_1s2jxigxia().s[28]++;return a.onSubmit();}),r(39," Assegna "),n()()()),(cov_1s2jxigxia().b[7][0]++,o&2)&&(cov_1s2jxigxia().b[7][1]++,l(20),S(a.wardId()),l(),v("formGroup",a.form),l(7),v("ngValue",null),l(2),A(a.availablePlants()),l(4),x((cov_1s2jxigxia().b[9][0]++,a.form.controls.plantId.touched)&&(cov_1s2jxigxia().b[9][1]++,a.form.controls.plantId.invalid)?(cov_1s2jxigxia().b[8][0]++,34):(cov_1s2jxigxia().b[8][1]++,-1)),l(4),v("disabled",a.form.invalid));},dependencies:[G,L,R,q,$,P,O,N,F],encapsulation:2,changeDetection:0}));}cov_1s2jxigxia().s[29]++;return i;})());cov_1s2jxigxia().s[30]++;var ue=(i,s)=>{cov_1s2jxigxia().f[13]++;cov_1s2jxigxia().s[31]++;return s.id;};function ge(i,s){cov_1s2jxigxia().f[14]++;cov_1s2jxigxia().s[32]++;if((cov_1s2jxigxia().b[11][0]++,i&1)&&(cov_1s2jxigxia().b[11][1]++,t(0,"option",21),r(1),n()),i&2){cov_1s2jxigxia().b[10][0]++;let e=(cov_1s2jxigxia().s[33]++,s.$implicit),o=(cov_1s2jxigxia().s[34]++,d());cov_1s2jxigxia().s[35]++;v("ngValue",e.id),l(),S(o.getOperatorLabel(e));}else{cov_1s2jxigxia().b[10][1]++;}}function be(i,s){cov_1s2jxigxia().f[15]++;cov_1s2jxigxia().s[36]++;(cov_1s2jxigxia().b[12][0]++,i&1)&&(cov_1s2jxigxia().b[12][1]++,t(0,"p",23),p(),t(1,"svg",27),c(2,"path",28),n(),r(3," Seleziona un operatore. "),n());}var se=(cov_1s2jxigxia().s[37]++,(()=>{cov_1s2jxigxia().f[16]++;class i{formBuilder=(cov_1s2jxigxia().s[38]++,W(j));wardId=(cov_1s2jxigxia().s[39]++,k(0));availableWards=(cov_1s2jxigxia().s[40]++,k([]));availableOperators=(cov_1s2jxigxia().s[41]++,k([]));submitted=(cov_1s2jxigxia().s[42]++,y());cancelled=(cov_1s2jxigxia().s[43]++,y());form=(cov_1s2jxigxia().s[44]++,this.formBuilder.group({userId:this.formBuilder.control(null,{validators:[D.required]})}));ngOnInit(){cov_1s2jxigxia().f[17]++;cov_1s2jxigxia().s[45]++;this.form.reset({userId:null});}onSubmit(){cov_1s2jxigxia().f[18]++;cov_1s2jxigxia().s[46]++;if(this.form.invalid){cov_1s2jxigxia().b[13][0]++;cov_1s2jxigxia().s[47]++;this.form.markAllAsTouched();cov_1s2jxigxia().s[48]++;return;}else{cov_1s2jxigxia().b[13][1]++;}cov_1s2jxigxia().s[49]++;this.submitted.emit({userId:this.form.controls.userId.value});}onCancel(){cov_1s2jxigxia().f[19]++;cov_1s2jxigxia().s[50]++;this.cancelled.emit();}getOperatorLabel(e){cov_1s2jxigxia().f[20]++;cov_1s2jxigxia().s[51]++;return(cov_1s2jxigxia().b[14][0]++,`${e.firstName} ${e.lastName}`.trim())||(cov_1s2jxigxia().b[14][1]++,e.username);}static ɵfac=(cov_1s2jxigxia().s[52]++,function(o){cov_1s2jxigxia().f[21]++;cov_1s2jxigxia().s[53]++;return new((cov_1s2jxigxia().b[15][0]++,o)||(cov_1s2jxigxia().b[15][1]++,i))();});static ɵcmp=(cov_1s2jxigxia().s[54]++,E({type:i,selectors:[["app-assign-operator-dialog-component"]],inputs:{wardId:[1,"wardId"],availableWards:[1,"availableWards"],availableOperators:[1,"availableOperators"]},outputs:{submitted:"submitted",cancelled:"cancelled"},decls:40,vars:5,consts:[["open","","aria-labelledby","assign-operator-title",1,"fixed","inset-0","z-50","m-auto","w-[95vw]","max-w-md","overflow-hidden","rounded-2xl","border","border-slate-200","bg-white","p-0","shadow-2xl","backdrop:bg-slate-900/50","focus:outline-none"],[1,"flex","items-center","justify-between","gap-3","border-b","border-slate-100","bg-slate-50","px-5","py-4"],[1,"flex","items-center","gap-3"],[1,"flex","h-8","w-8","shrink-0","items-center","justify-center","rounded-lg","bg-amber-100"],["fill","none","viewBox","0 0 24 24","stroke-width","2","stroke","currentColor",1,"h-4","w-4","text-amber-700"],["stroke-linecap","round","stroke-linejoin","round","d","M19 7.5v3m0 0v3m0-3h3m-3 0h-3m-2.25-4.125a3.375 3.375 0 11-6.75 0 3.375 3.375 0 016.75 0zM4 19.235v-.11a6.375 6.375 0 0112.75 0v.109A12.318 12.318 0 0110.374 21c-2.331 0-4.512-.645-6.374-1.766z"],["id","assign-operator-title",1,"text-sm","font-bold","text-slate-900",2,"font-family","'Syne',sans-serif"],[1,"text-xs","text-slate-500"],["type","button","aria-label","Chiudi",1,"flex","h-7","w-7","cursor-pointer","items-center","justify-center","rounded-lg","text-slate-400","transition","hover:bg-slate-100","hover:text-slate-600",3,"click"],["fill","none","viewBox","0 0 24 24","stroke-width","2","stroke","currentColor",1,"h-4","w-4"],["stroke-linecap","round","stroke-linejoin","round","d","M6 18L18 6M6 6l12 12"],[1,"px-5","py-5"],[1,"mb-4","flex","items-center","gap-2","rounded-lg","bg-slate-50","px-3","py-2.5","text-xs","text-slate-500"],["fill","none","viewBox","0 0 24 24","stroke-width","2","stroke","currentColor",1,"h-3.5","w-3.5","shrink-0"],["stroke-linecap","round","stroke-linejoin","round","d","M2.25 21h19.5m-18-18v18m10.5-18v18m6-13.5V21"],[1,"font-semibold","text-slate-700"],[1,"space-y-3",3,"ngSubmit","formGroup"],[1,"space-y-1"],["for","operator-id",1,"flex","items-center","gap-1","text-xs","font-semibold","uppercase","tracking-wide","text-slate-500"],[1,"text-rose-500"],["id","operator-id","formControlName","userId",1,"w-full","rounded-lg","border","border-slate-200","bg-slate-50","px-3","py-2.5","text-sm","text-slate-900","outline-none","transition","hover:border-slate-300","focus:border-amber-300","focus:bg-white","focus:ring-3","focus:ring-amber-100"],[3,"ngValue"],[1,"text-[11px]","text-slate-400"],["role","alert",1,"flex","items-start","gap-2","rounded-lg","border","border-rose-200","bg-rose-50","px-3","py-2","text-xs","text-rose-700"],[1,"flex","items-center","justify-end","gap-2","border-t","border-slate-100","bg-slate-50","px-5","py-3"],["type","button",1,"cursor-pointer","rounded-lg","border","border-slate-200","bg-white","px-4","py-2","text-sm","font-semibold","text-slate-700","transition","hover:bg-slate-50",3,"click"],["type","submit",1,"inline-flex","cursor-pointer","items-center","gap-1.5","rounded-lg","border","border-amber-300","bg-amber-300","px-4","py-2","text-sm","font-bold","text-slate-950","shadow-sm","transition","hover:bg-amber-200","disabled:cursor-not-allowed","disabled:border-slate-300","disabled:bg-slate-200","disabled:text-slate-400",3,"click","disabled"],["fill","currentColor","viewBox","0 0 20 20",1,"mt-0.5","h-3.5","w-3.5","shrink-0"],["fill-rule","evenodd","d","M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7 4a1 1 0 11-2 0 1 1 0 012 0zm-1-9a1 1 0 00-1 1v4a1 1 0 102 0V6a1 1 0 00-1-1z","clip-rule","evenodd"]],template:function(o,a){cov_1s2jxigxia().f[22]++;cov_1s2jxigxia().s[55]++;(cov_1s2jxigxia().b[16][0]++,o&1)&&(cov_1s2jxigxia().b[16][1]++,t(0,"dialog",0)(1,"div",1)(2,"div",2)(3,"div",3),p(),t(4,"svg",4),c(5,"path",5),n()(),g(),t(6,"div")(7,"h2",6),r(8," Assegna operatore sanitario "),n(),t(9,"p",7),r(10,"Seleziona un operatore dall'elenco disponibile."),n()()(),t(11,"button",8),u("click",function(){cov_1s2jxigxia().f[23]++;cov_1s2jxigxia().s[56]++;return a.onCancel();}),p(),t(12,"svg",9),c(13,"path",10),n()()(),g(),t(14,"div",11)(15,"div",12),p(),t(16,"svg",13),c(17,"path",14),n(),r(18," Reparto: "),g(),t(19,"span",15),r(20),n()(),t(21,"form",16),u("ngSubmit",function(){cov_1s2jxigxia().f[24]++;cov_1s2jxigxia().s[57]++;return a.onSubmit();}),t(22,"div",17)(23,"label",18),r(24," Operatore "),t(25,"span",19),r(26,"*"),n()(),t(27,"select",20)(28,"option",21),r(29,"Seleziona un operatore\u2026"),n(),V(30,ge,2,2,"option",21,ue),n(),t(32,"p",22),r(33,"Campo obbligatorio."),n()(),f(34,be,4,0,"p",23),n()(),t(35,"div",24)(36,"button",25),u("click",function(){cov_1s2jxigxia().f[25]++;cov_1s2jxigxia().s[58]++;return a.onCancel();}),r(37," Annulla "),n(),t(38,"button",26),u("click",function(){cov_1s2jxigxia().f[26]++;cov_1s2jxigxia().s[59]++;return a.onSubmit();}),r(39," Assegna "),n()()()),(cov_1s2jxigxia().b[17][0]++,o&2)&&(cov_1s2jxigxia().b[17][1]++,l(20),S(a.wardId()),l(),v("formGroup",a.form),l(7),v("ngValue",null),l(2),A(a.availableOperators()),l(4),x((cov_1s2jxigxia().b[19][0]++,a.form.controls.userId.touched)&&(cov_1s2jxigxia().b[19][1]++,a.form.controls.userId.invalid)?(cov_1s2jxigxia().b[18][0]++,34):(cov_1s2jxigxia().b[18][1]++,-1)),l(4),v("disabled",a.form.invalid));},dependencies:[G,L,R,q,$,P,O,N,F],encapsulation:2,changeDetection:0}));}cov_1s2jxigxia().s[60]++;return i;})());function _e(i,s){cov_1s2jxigxia().f[27]++;cov_1s2jxigxia().s[61]++;(cov_1s2jxigxia().b[20][0]++,i&1)&&(cov_1s2jxigxia().b[20][1]++,p(),c(0,"path",5));}function fe(i,s){cov_1s2jxigxia().f[28]++;cov_1s2jxigxia().s[62]++;(cov_1s2jxigxia().b[21][0]++,i&1)&&(cov_1s2jxigxia().b[21][1]++,p(),c(0,"path",6));}function xe(i,s){cov_1s2jxigxia().f[29]++;cov_1s2jxigxia().s[63]++;(cov_1s2jxigxia().b[22][0]++,i&1)&&(cov_1s2jxigxia().b[22][1]++,r(0," Il nome reparto \xE8 obbligatorio. "));}function ve(i,s){cov_1s2jxigxia().f[30]++;cov_1s2jxigxia().s[64]++;(cov_1s2jxigxia().b[23][0]++,i&1)&&(cov_1s2jxigxia().b[23][1]++,r(0," Il nome non pu\xF2 superare 100 caratteri. "));}function he(i,s){cov_1s2jxigxia().f[31]++;cov_1s2jxigxia().s[65]++;if((cov_1s2jxigxia().b[25][0]++,i&1)&&(cov_1s2jxigxia().b[25][1]++,t(0,"p",18),p(),t(1,"svg",22),c(2,"path",23),n(),g(),t(3,"span"),f(4,xe,1,0),f(5,ve,1,0),n()()),i&2){cov_1s2jxigxia().b[24][0]++;let e=(cov_1s2jxigxia().s[66]++,d());cov_1s2jxigxia().s[67]++;l(4),x((cov_1s2jxigxia().b[27][0]++,e.form.controls.name.errors!=null)&&(cov_1s2jxigxia().b[27][1]++,e.form.controls.name.errors.required)?(cov_1s2jxigxia().b[26][0]++,4):(cov_1s2jxigxia().b[26][1]++,-1)),l(),x((cov_1s2jxigxia().b[29][0]++,e.form.controls.name.errors!=null)&&(cov_1s2jxigxia().b[29][1]++,e.form.controls.name.errors.maxlength)?(cov_1s2jxigxia().b[28][0]++,5):(cov_1s2jxigxia().b[28][1]++,-1));}else{cov_1s2jxigxia().b[24][1]++;}}var de=(cov_1s2jxigxia().s[68]++,(()=>{cov_1s2jxigxia().f[32]++;class i{formBuilder=(cov_1s2jxigxia().s[69]++,W(j));ward=(cov_1s2jxigxia().s[70]++,k(null));submitted=(cov_1s2jxigxia().s[71]++,y());cancelled=(cov_1s2jxigxia().s[72]++,y());form=(cov_1s2jxigxia().s[73]++,this.formBuilder.nonNullable.group({name:["",[D.required,D.maxLength(100)]]}));syncFormWithWard=(cov_1s2jxigxia().s[74]++,Z(()=>{cov_1s2jxigxia().f[33]++;let e=(cov_1s2jxigxia().s[75]++,this.ward());cov_1s2jxigxia().s[76]++;this.form.patchValue({name:(cov_1s2jxigxia().b[30][0]++,e?.name)??(cov_1s2jxigxia().b[30][1]++,"")},{emitEvent:!1});}));isEditMode=(cov_1s2jxigxia().s[77]++,I(()=>{cov_1s2jxigxia().f[34]++;cov_1s2jxigxia().s[78]++;return this.ward()!==null;}));onSubmit(){cov_1s2jxigxia().f[35]++;cov_1s2jxigxia().s[79]++;if(this.form.invalid){cov_1s2jxigxia().b[31][0]++;cov_1s2jxigxia().s[80]++;this.form.markAllAsTouched();cov_1s2jxigxia().s[81]++;return;}else{cov_1s2jxigxia().b[31][1]++;}let e=(cov_1s2jxigxia().s[82]++,{name:this.form.controls.name.value.trim()});cov_1s2jxigxia().s[83]++;this.submitted.emit(e);}onCancel(){cov_1s2jxigxia().f[36]++;cov_1s2jxigxia().s[84]++;this.cancelled.emit();}static ɵfac=(cov_1s2jxigxia().s[85]++,function(o){cov_1s2jxigxia().f[37]++;cov_1s2jxigxia().s[86]++;return new((cov_1s2jxigxia().b[32][0]++,o)||(cov_1s2jxigxia().b[32][1]++,i))();});static ɵcmp=(cov_1s2jxigxia().s[87]++,E({type:i,selectors:[["app-ward-form-dialog-component"]],inputs:{ward:[1,"ward"]},outputs:{submitted:"submitted",cancelled:"cancelled"},decls:30,vars:12,consts:[["open","","aria-labelledby","ward-dialog-title",1,"fixed","inset-0","z-10","m-auto","w-[95vw]","max-w-md","overflow-hidden","rounded-2xl","border","border-slate-200","bg-white","p-0","shadow-2xl","backdrop:bg-slate-900/50","focus:outline-none"],[1,"flex","items-center","justify-between","gap-3","border-b","border-slate-100","bg-slate-50","px-5","py-4"],[1,"flex","items-center","gap-3"],[1,"flex","h-8","w-8","shrink-0","items-center","justify-center","rounded-lg"],["fill","none","viewBox","0 0 24 24","stroke-width","2","stroke","currentColor"],["stroke-linecap","round","stroke-linejoin","round","d","M16.862 4.487l1.687-1.688a1.875 1.875 0 112.652 2.652L10.582 16.07a4.5 4.5 0 01-1.897 1.13L6 18l.8-2.685a4.5 4.5 0 011.13-1.897l8.932-8.931zm0 0L19.5 7.125M18 14v4.75A2.25 2.25 0 0115.75 21H5.25A2.25 2.25 0 013 18.75V8.25A2.25 2.25 0 015.25 6H10"],["stroke-linecap","round","stroke-linejoin","round","d","M12 4.5v15m7.5-7.5h-15"],["id","ward-dialog-title",1,"text-sm","font-bold","text-slate-900",2,"font-family","'Syne',sans-serif"],[1,"text-xs","text-slate-500"],["type","button","aria-label","Chiudi",1,"flex","h-7","w-7","cursor-pointer","items-center","justify-center","rounded-lg","text-slate-400","transition","hover:bg-slate-100","hover:text-slate-600",3,"click"],["fill","none","viewBox","0 0 24 24","stroke-width","2","stroke","currentColor",1,"h-4","w-4"],["stroke-linecap","round","stroke-linejoin","round","d","M6 18L18 6M6 6l12 12"],[1,"px-5","py-5",3,"ngSubmit","formGroup"],[1,"space-y-1"],["for","ward-name",1,"flex","items-center","gap-1","text-xs","font-semibold","uppercase","tracking-wide","text-slate-500"],[1,"text-rose-500"],["id","ward-name","type","text","formControlName","name","maxlength","100","placeholder","Es. Reparto autosufficienti",1,"w-full","rounded-lg","border","border-slate-200","bg-slate-50","px-3","py-2.5","text-sm","text-slate-900","outline-none","transition-all","placeholder:text-slate-400","hover:border-slate-300","focus:border-amber-300","focus:bg-white","focus:ring-3","focus:ring-amber-100"],[1,"text-[11px]","text-slate-400"],["role","alert",1,"flex","items-start","gap-2","rounded-lg","border","border-rose-200","bg-rose-50","px-3","py-2","text-xs","text-rose-700"],[1,"flex","items-center","justify-end","gap-2","border-t","border-slate-100","bg-slate-50","px-5","py-3"],["type","button",1,"rounded-lg","border","border-slate-200","bg-white","px-4","py-2","text-sm","font-semibold","text-slate-700","transition","hover:bg-slate-50",3,"click"],["type","submit",3,"click","disabled"],["fill","currentColor","viewBox","0 0 20 20",1,"mt-0.5","h-3.5","w-3.5","shrink-0"],["fill-rule","evenodd","d","M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7 4a1 1 0 11-2 0 1 1 0 012 0zm-1-9a1 1 0 00-1 1v4a1 1 0 102 0V6a1 1 0 00-1-1z","clip-rule","evenodd"]],template:function(o,a){cov_1s2jxigxia().f[38]++;cov_1s2jxigxia().s[88]++;(cov_1s2jxigxia().b[33][0]++,o&1)&&(cov_1s2jxigxia().b[33][1]++,t(0,"dialog",0)(1,"div",1)(2,"div",2)(3,"div",3),p(),t(4,"svg",4),f(5,_e,1,0,":svg:path",5)(6,fe,1,0,":svg:path",6),n()(),g(),t(7,"div")(8,"h2",7),r(9),n(),t(10,"p",8),r(11,"Compila il nome del reparto e conferma."),n()()(),t(12,"button",9),u("click",function(){cov_1s2jxigxia().f[39]++;cov_1s2jxigxia().s[89]++;return a.onCancel();}),p(),t(13,"svg",10),c(14,"path",11),n()()(),g(),t(15,"form",12),u("ngSubmit",function(){cov_1s2jxigxia().f[40]++;cov_1s2jxigxia().s[90]++;return a.onSubmit();}),t(16,"div",13)(17,"label",14),r(18," Nome reparto "),t(19,"span",15),r(20,"*"),n()(),c(21,"input",16),t(22,"p",17),r(23,"Campo obbligatorio. Massimo 100 caratteri."),n(),f(24,he,6,2,"p",18),n()(),t(25,"div",19)(26,"button",20),u("click",function(){cov_1s2jxigxia().f[41]++;cov_1s2jxigxia().s[91]++;return a.onCancel();}),r(27," Annulla "),n(),t(28,"button",21),u("click",function(){cov_1s2jxigxia().f[42]++;cov_1s2jxigxia().s[92]++;return a.onSubmit();}),r(29),n()()()),(cov_1s2jxigxia().b[34][0]++,o&2)&&(cov_1s2jxigxia().b[34][1]++,l(3),M("bg-amber-100"),l(),M("h-4 w-4 text-amber-700"),l(),x(a.isEditMode()?(cov_1s2jxigxia().b[35][0]++,5):(cov_1s2jxigxia().b[35][1]++,6)),l(4),H(" ",a.isEditMode()?(cov_1s2jxigxia().b[36][0]++,"Modifica reparto"):(cov_1s2jxigxia().b[36][1]++,"Crea reparto")," "),l(6),v("formGroup",a.form),l(9),x((cov_1s2jxigxia().b[38][0]++,a.form.controls.name.touched)&&(cov_1s2jxigxia().b[38][1]++,a.form.controls.name.invalid)?(cov_1s2jxigxia().b[37][0]++,24):(cov_1s2jxigxia().b[37][1]++,-1)),l(4),M((a.isEditMode(),"inline-flex items-center gap-1.5 rounded-lg border border-amber-300 bg-amber-300 px-4 py-2 text-sm font-semibold text-slate-900 shadow-sm transition hover:bg-amber-200 disabled:cursor-not-allowed disabled:border-slate-300 disabled:bg-slate-200 disabled:text-slate-400")),v("disabled",a.form.invalid),l(),H(" ",a.isEditMode()?(cov_1s2jxigxia().b[39][0]++,"Salva modifiche"):(cov_1s2jxigxia().b[39][1]++,"Crea reparto")," "));},dependencies:[G,L,ne,P,O,ie,N,F],styles:[`@media(min-width:767px){dialog[_ngcontent-%COMP%]{left:calc(50% + 80px);top:50%;transform:translate(-50%,-50%)}} +/*# sourceMappingURL=ward-form-dialog-component-JO6VBR2J.css.map */`],changeDetection:0}));}cov_1s2jxigxia().s[93]++;return i;})());cov_1s2jxigxia().s[94]++;var Q=(i,s)=>{cov_1s2jxigxia().f[43]++;cov_1s2jxigxia().s[95]++;return s.id;};function Ce(i,s){cov_1s2jxigxia().f[44]++;cov_1s2jxigxia().s[96]++;if(i&1){cov_1s2jxigxia().b[40][0]++;let e=(cov_1s2jxigxia().s[97]++,w());cov_1s2jxigxia().s[98]++;t(0,"div",9)(1,"div",15),p(),t(2,"svg",16),c(3,"path",17),n(),g(),t(4,"span"),r(5),n()(),t(6,"button",18),u("click",function(){cov_1s2jxigxia().f[45]++;cov_1s2jxigxia().s[99]++;b(e);let a=(cov_1s2jxigxia().s[100]++,d());cov_1s2jxigxia().s[101]++;return _(a.dismissSnackbar());}),r(7," Chiudi "),n()();}else{cov_1s2jxigxia().b[40][1]++;}cov_1s2jxigxia().s[102]++;(cov_1s2jxigxia().b[41][0]++,i&2)&&(cov_1s2jxigxia().b[41][1]++,l(5),S(s));}function we(i,s){cov_1s2jxigxia().f[46]++;cov_1s2jxigxia().s[103]++;(cov_1s2jxigxia().b[42][0]++,i&1)&&(cov_1s2jxigxia().b[42][1]++,t(0,"div",10),c(1,"div",19),r(2," Caricamento in corso\u2026 "),n());}function Se(i,s){cov_1s2jxigxia().f[47]++;cov_1s2jxigxia().s[104]++;if(i&1){cov_1s2jxigxia().b[43][0]++;let e=(cov_1s2jxigxia().s[105]++,w());cov_1s2jxigxia().s[106]++;t(0,"div",20)(1,"div",21),p(),t(2,"svg",22),c(3,"path",23),n()(),g(),t(4,"p",24),r(5,"Nessun reparto disponibile"),n(),t(6,"p",25),r(7,"Crea il primo reparto dal pannello dei reparti a sinistra."),n(),t(8,"button",26),u("click",function(){cov_1s2jxigxia().f[48]++;cov_1s2jxigxia().s[107]++;b(e);let a=(cov_1s2jxigxia().s[108]++,d(2));cov_1s2jxigxia().s[109]++;return _(a.onCreateWard());}),p(),t(9,"svg",27),c(10,"path",28),n(),r(11," Nuovo reparto "),n()();}else{cov_1s2jxigxia().b[43][1]++;}}function Me(i,s){cov_1s2jxigxia().f[49]++;cov_1s2jxigxia().s[110]++;if(i&1){cov_1s2jxigxia().b[44][0]++;let e=(cov_1s2jxigxia().s[111]++,w());cov_1s2jxigxia().s[112]++;t(0,"div",29)(1,"div",47)(2,"button",48),u("click",function(){cov_1s2jxigxia().f[50]++;cov_1s2jxigxia().s[113]++;b(e);let a=(cov_1s2jxigxia().s[114]++,d(3));cov_1s2jxigxia().s[115]++;return _(a.showWardListStep());}),p(),t(3,"svg",36),c(4,"path",49),n(),r(5," Reparti "),n(),g(),t(6,"button",48),u("click",function(){cov_1s2jxigxia().f[51]++;cov_1s2jxigxia().s[116]++;b(e);let a=(cov_1s2jxigxia().s[117]++,d(3));cov_1s2jxigxia().s[118]++;return _(a.showApartmentsStep());}),p(),t(7,"svg",36),c(8,"path",50),n(),r(9," Appartamenti "),n(),g(),t(10,"button",48),u("click",function(){cov_1s2jxigxia().f[52]++;cov_1s2jxigxia().s[119]++;b(e);let a=(cov_1s2jxigxia().s[120]++,d(3));cov_1s2jxigxia().s[121]++;return _(a.showOperatorsStep());}),p(),t(11,"svg",36),c(12,"path",51),n(),r(13," Operatori "),n()(),g(),t(14,"p",52),r(15," Reparto attivo: "),t(16,"span",53),r(17),n()()();}else{cov_1s2jxigxia().b[44][1]++;}cov_1s2jxigxia().s[122]++;if(i&2){cov_1s2jxigxia().b[45][0]++;let e=(cov_1s2jxigxia().s[123]++,d(3));cov_1s2jxigxia().s[124]++;l(2),M(e.mobileStep()==="wards"?(cov_1s2jxigxia().b[46][0]++,"flex items-center justify-center gap-1.5 px-3 py-2.5 bg-amber-50 text-amber-700"):(cov_1s2jxigxia().b[46][1]++,"flex items-center justify-center gap-1.5 px-3 py-2.5 text-slate-500 hover:bg-slate-50")),l(4),M(e.mobileStep()==="apartments"?(cov_1s2jxigxia().b[47][0]++,"flex items-center justify-center gap-1.5 px-3 py-2.5 bg-amber-50 text-amber-700"):(cov_1s2jxigxia().b[47][1]++,"flex items-center justify-center gap-1.5 px-3 py-2.5 text-slate-500 hover:bg-slate-50")),l(4),M(e.mobileStep()==="operators"?(cov_1s2jxigxia().b[48][0]++,"flex items-center justify-center gap-1.5 px-3 py-2.5 bg-amber-50 text-amber-700"):(cov_1s2jxigxia().b[48][1]++,"flex items-center justify-center gap-1.5 px-3 py-2.5 text-slate-500 hover:bg-slate-50")),l(7),S(s.name);}else{cov_1s2jxigxia().b[45][1]++;}}function ke(i,s){cov_1s2jxigxia().f[53]++;cov_1s2jxigxia().s[125]++;if(i&1){cov_1s2jxigxia().b[49][0]++;let e=(cov_1s2jxigxia().s[126]++,w());cov_1s2jxigxia().s[127]++;t(0,"li")(1,"button",48),u("click",function(){cov_1s2jxigxia().f[54]++;let a=(cov_1s2jxigxia().s[128]++,b(e).$implicit),m=(cov_1s2jxigxia().s[129]++,d(3));cov_1s2jxigxia().s[130]++;return _(m.selectWard(a.id));}),t(2,"div",54),p(),t(3,"svg",55),c(4,"path",56),n(),g(),t(5,"span",57),r(6),n()(),t(7,"span"),r(8),n()()();}else{cov_1s2jxigxia().b[49][1]++;}cov_1s2jxigxia().s[131]++;if(i&2){cov_1s2jxigxia().b[50][0]++;let e=(cov_1s2jxigxia().s[132]++,s.$implicit),o=(cov_1s2jxigxia().s[133]++,d(3));cov_1s2jxigxia().s[134]++;l(),M(o.selectedWardId()===e.id?(cov_1s2jxigxia().b[51][0]++,"group flex w-full cursor-pointer items-center justify-between rounded-lg px-3 py-2.5 text-left transition bg-amber-300 text-slate-900 shadow-sm"):(cov_1s2jxigxia().b[51][1]++,"group flex w-full cursor-pointer items-center justify-between rounded-lg px-3 py-2.5 text-left transition text-slate-700 hover:bg-slate-50")),l(5),S(e.name),l(),M(o.selectedWardId()===e.id?(cov_1s2jxigxia().b[52][0]++,"ml-1 shrink-0 rounded-full bg-white/30 px-1.5 py-0.5 text-[10px] font-bold text-slate-800"):(cov_1s2jxigxia().b[52][1]++,"ml-1 shrink-0 rounded-full bg-slate-100 px-1.5 py-0.5 text-[10px] font-bold text-slate-500")),l(),H(" ",e.apartments.length," ");}else{cov_1s2jxigxia().b[50][1]++;}}function ye(i,s){cov_1s2jxigxia().f[55]++;cov_1s2jxigxia().s[135]++;(cov_1s2jxigxia().b[53][0]++,i&1)&&(cov_1s2jxigxia().b[53][1]++,t(0,"div",65),p(),t(1,"svg",67),c(2,"path",50),n(),g(),t(3,"p",68),r(4,"Nessun appartamento assegnato"),n()());}function We(i,s){cov_1s2jxigxia().f[56]++;cov_1s2jxigxia().s[136]++;if(i&1){cov_1s2jxigxia().b[54][0]++;let e=(cov_1s2jxigxia().s[137]++,w());cov_1s2jxigxia().s[138]++;t(0,"li")(1,"div")(2,"button",69),u("click",function(){cov_1s2jxigxia().f[57]++;let a=(cov_1s2jxigxia().s[139]++,b(e).$implicit),m=(cov_1s2jxigxia().s[140]++,d(5));cov_1s2jxigxia().s[141]++;return _(m.selectApartment(a.id));}),p(),t(3,"svg",70),c(4,"path",50),n(),g(),t(5,"span",57),r(6),n()(),t(7,"button",71),u("click",function(){cov_1s2jxigxia().f[58]++;let a=(cov_1s2jxigxia().s[142]++,b(e).$implicit),m=(cov_1s2jxigxia().s[143]++,d(2)),h=(cov_1s2jxigxia().s[144]++,d(3));cov_1s2jxigxia().s[145]++;return _(h.onRemovePlant({wardId:m.id,plantId:a.id}));}),p(),t(8,"svg",27),c(9,"path",72),n()()()();}else{cov_1s2jxigxia().b[54][1]++;}cov_1s2jxigxia().s[146]++;if(i&2){cov_1s2jxigxia().b[55][0]++;let e=(cov_1s2jxigxia().s[147]++,s.$implicit),o=(cov_1s2jxigxia().s[148]++,d(5));cov_1s2jxigxia().s[149]++;l(),M(o.selectedApartmentId()===e.id?(cov_1s2jxigxia().b[56][0]++,"group flex items-center justify-between gap-2 rounded-lg px-3 py-2.5 bg-amber-300 text-slate-900 shadow-sm"):(cov_1s2jxigxia().b[56][1]++,"group flex items-center justify-between gap-2 rounded-lg px-3 py-2.5 text-slate-700 hover:bg-slate-50")),l(2),M(o.selectedApartmentId()===e.id?(cov_1s2jxigxia().b[57][0]++,"h-3.5 w-3.5 shrink-0 text-white/70"):(cov_1s2jxigxia().b[57][1]++,"h-3.5 w-3.5 shrink-0 text-slate-400")),l(3),S(e.name),l(),M(o.selectedApartmentId()===e.id?(cov_1s2jxigxia().b[58][0]++,"care-btn care-btn--danger care-btn--icon care-btn--compact h-8 w-8 shrink-0 border-red-300 bg-red-600 text-white"):(cov_1s2jxigxia().b[58][1]++,"care-btn care-btn--danger care-btn--icon care-btn--compact h-8 w-8 shrink-0"));}else{cov_1s2jxigxia().b[55][1]++;}}function Ee(i,s){cov_1s2jxigxia().f[59]++;cov_1s2jxigxia().s[150]++;if((cov_1s2jxigxia().b[60][0]++,i&1)&&(cov_1s2jxigxia().b[60][1]++,t(0,"ul",66),V(1,We,10,7,"li",null,Q),n()),i&2){cov_1s2jxigxia().b[59][0]++;let e=(cov_1s2jxigxia().s[151]++,d());cov_1s2jxigxia().s[152]++;l(),A(e.apartments);}else{cov_1s2jxigxia().b[59][1]++;}}function Ve(i,s){cov_1s2jxigxia().f[60]++;cov_1s2jxigxia().s[153]++;if(i&1){cov_1s2jxigxia().b[61][0]++;let e=(cov_1s2jxigxia().s[154]++,w());cov_1s2jxigxia().s[155]++;t(0,"div",58)(1,"div",59)(2,"div",60)(3,"span",33),r(4,"Appartamenti"),n(),t(5,"h2",61),r(6),n()(),t(7,"div",62)(8,"button",63),u("click",function(){cov_1s2jxigxia().f[61]++;let a=(cov_1s2jxigxia().s[156]++,b(e)),m=(cov_1s2jxigxia().s[157]++,d(3));cov_1s2jxigxia().s[158]++;return _(m.onAssignPlant(a.id));}),p(),t(9,"svg",42),c(10,"path",28),n(),g(),t(11,"span",38),r(12,"Assegna appartamento"),n()()()()(),t(13,"div",64),f(14,ye,5,0,"div",65)(15,Ee,3,0,"ul",66),n();}else{cov_1s2jxigxia().b[61][1]++;}cov_1s2jxigxia().s[159]++;if(i&2){cov_1s2jxigxia().b[62][0]++;let e=(cov_1s2jxigxia().s[160]++,s);cov_1s2jxigxia().s[161]++;l(6),S(e.name),l(8),x(e.apartments.length===0?(cov_1s2jxigxia().b[63][0]++,14):(cov_1s2jxigxia().b[63][1]++,15));}else{cov_1s2jxigxia().b[62][1]++;}}function Ae(i,s){cov_1s2jxigxia().f[62]++;cov_1s2jxigxia().s[162]++;(cov_1s2jxigxia().b[64][0]++,i&1)&&(cov_1s2jxigxia().b[64][1]++,t(0,"div",45),p(),t(1,"svg",73),c(2,"path",74),n(),g(),t(3,"p",75),r(4,"Seleziona un reparto"),n(),t(5,"p",76),r(6,"Gli appartamenti appariranno qui"),n()());}function Ie(i,s){cov_1s2jxigxia().f[63]++;cov_1s2jxigxia().s[163]++;(cov_1s2jxigxia().b[65][0]++,i&1)&&(cov_1s2jxigxia().b[65][1]++,t(0,"div",65),p(),t(1,"svg",67),c(2,"path",51),n(),g(),t(3,"p",68),r(4,"Nessun operatore assegnato"),n()());}function De(i,s){cov_1s2jxigxia().f[64]++;cov_1s2jxigxia().s[164]++;if(i&1){cov_1s2jxigxia().b[66][0]++;let e=(cov_1s2jxigxia().s[165]++,w());cov_1s2jxigxia().s[166]++;t(0,"li")(1,"div",78)(2,"div",79)(3,"div",80),r(4),n(),t(5,"span",57),r(6),n()(),t(7,"button",81),u("click",function(){cov_1s2jxigxia().f[65]++;let a=(cov_1s2jxigxia().s[167]++,b(e).$implicit),m=(cov_1s2jxigxia().s[168]++,d(2)),h=(cov_1s2jxigxia().s[169]++,d(3));cov_1s2jxigxia().s[170]++;return _(h.onRemoveOperator({wardId:m.id,userId:a.id}));}),p(),t(8,"svg",27),c(9,"path",72),n()()()();}else{cov_1s2jxigxia().b[66][1]++;}cov_1s2jxigxia().s[171]++;if(i&2){cov_1s2jxigxia().b[67][0]++;let e=(cov_1s2jxigxia().s[172]++,s.$implicit),o=(cov_1s2jxigxia().s[173]++,d(5));cov_1s2jxigxia().s[174]++;l(4),ee(" ",e.firstName[0],"",e.lastName[0]," "),l(2),S(o.getOperatorDisplayName(e.firstName,e.lastName));}else{cov_1s2jxigxia().b[67][1]++;}}function Te(i,s){cov_1s2jxigxia().f[66]++;cov_1s2jxigxia().s[175]++;if((cov_1s2jxigxia().b[69][0]++,i&1)&&(cov_1s2jxigxia().b[69][1]++,t(0,"ul",66),V(1,De,10,3,"li",null,Q),n()),i&2){cov_1s2jxigxia().b[68][0]++;let e=(cov_1s2jxigxia().s[176]++,d());cov_1s2jxigxia().s[177]++;l(),A(e.operators);}else{cov_1s2jxigxia().b[68][1]++;}}function Pe(i,s){cov_1s2jxigxia().f[67]++;cov_1s2jxigxia().s[178]++;if(i&1){cov_1s2jxigxia().b[70][0]++;let e=(cov_1s2jxigxia().s[179]++,w());cov_1s2jxigxia().s[180]++;t(0,"div",58)(1,"div",59)(2,"div",60)(3,"span",33),r(4,"Operatori"),n(),t(5,"h2",61),r(6),n()(),t(7,"button",77),u("click",function(){cov_1s2jxigxia().f[68]++;let a=(cov_1s2jxigxia().s[181]++,b(e)),m=(cov_1s2jxigxia().s[182]++,d(3));cov_1s2jxigxia().s[183]++;return _(m.onAssignOperator(a.id));}),p(),t(8,"svg",42),c(9,"path",28),n(),g(),t(10,"span",38),r(11,"Aggiungi operatore"),n()()()(),t(12,"div",64),f(13,Ie,5,0,"div",65)(14,Te,3,0,"ul",66),n();}else{cov_1s2jxigxia().b[70][1]++;}cov_1s2jxigxia().s[184]++;if(i&2){cov_1s2jxigxia().b[71][0]++;let e=(cov_1s2jxigxia().s[185]++,s);cov_1s2jxigxia().s[186]++;l(6),S(e.name),l(7),x(e.operators.length===0?(cov_1s2jxigxia().b[72][0]++,13):(cov_1s2jxigxia().b[72][1]++,14));}else{cov_1s2jxigxia().b[71][1]++;}}function Oe(i,s){cov_1s2jxigxia().f[69]++;cov_1s2jxigxia().s[187]++;(cov_1s2jxigxia().b[73][0]++,i&1)&&(cov_1s2jxigxia().b[73][1]++,t(0,"div",45),p(),t(1,"svg",73),c(2,"path",51),n(),g(),t(3,"p",75),r(4,"Seleziona un reparto"),n(),t(5,"p",76),r(6,"Gli operatori appariranno qui"),n()());}function Le(i,s){cov_1s2jxigxia().f[70]++;cov_1s2jxigxia().s[188]++;if(i&1){cov_1s2jxigxia().b[74][0]++;let e=(cov_1s2jxigxia().s[189]++,w());cov_1s2jxigxia().s[190]++;f(0,Me,18,7,"div",29),t(1,"div",30)(2,"aside",31)(3,"div",32)(4,"span",33),r(5,"Reparti"),n(),t(6,"div",34)(7,"button",35),u("click",function(){cov_1s2jxigxia().f[71]++;cov_1s2jxigxia().s[191]++;b(e);let a=(cov_1s2jxigxia().s[192]++,d(2));cov_1s2jxigxia().s[193]++;return _(a.onDeleteWard(a.selectedWard().id));}),p(),t(8,"svg",36),c(9,"path",37),n(),g(),t(10,"span",38),r(11,"Elimina reparto"),n()(),t(12,"button",39),u("click",function(){cov_1s2jxigxia().f[72]++;cov_1s2jxigxia().s[194]++;b(e);let a=(cov_1s2jxigxia().s[195]++,d(2));cov_1s2jxigxia().s[196]++;return _(a.onEditSelectedWard());}),p(),t(13,"svg",36),c(14,"path",40),n(),g(),t(15,"span",38),r(16,"Modifica reparto"),n()(),t(17,"button",41),u("click",function(){cov_1s2jxigxia().f[73]++;cov_1s2jxigxia().s[197]++;b(e);let a=(cov_1s2jxigxia().s[198]++,d(2));cov_1s2jxigxia().s[199]++;return _(a.onCreateWard());}),p(),t(18,"svg",42),c(19,"path",28),n(),g(),t(20,"span",38),r(21,"Nuovo reparto"),n()()()(),t(22,"ul",43),V(23,ke,9,6,"li",null,Q),n()(),t(25,"section",44),f(26,Ve,16,2)(27,Ae,7,0,"div",45),n(),t(28,"section",46),f(29,Pe,15,2)(30,Oe,7,0,"div",45),n()();}else{cov_1s2jxigxia().b[74][1]++;}cov_1s2jxigxia().s[200]++;if(i&2){cov_1s2jxigxia().b[75][0]++;let e,o,a,m=(cov_1s2jxigxia().s[201]++,d()),h=(cov_1s2jxigxia().s[202]++,d());cov_1s2jxigxia().s[203]++;x((e=h.selectedWard())?(cov_1s2jxigxia().b[76][0]++,0):(cov_1s2jxigxia().b[76][1]++,-1),e),l(2),B("hidden",h.mobileStep()!=="wards"),l(5),v("disabled",!h.selectedWard()),l(5),v("disabled",!h.selectedWard()),l(11),A(m),l(2),B("hidden",h.mobileStep()!=="apartments"),l(),x((o=h.selectedWard())?(cov_1s2jxigxia().b[77][0]++,26):(cov_1s2jxigxia().b[77][1]++,27),o),l(2),B("hidden",h.mobileStep()!=="operators"),l(),x((a=h.selectedWard())?(cov_1s2jxigxia().b[78][0]++,29):(cov_1s2jxigxia().b[78][1]++,30),a);}else{cov_1s2jxigxia().b[75][1]++;}}function Fe(i,s){cov_1s2jxigxia().f[74]++;cov_1s2jxigxia().s[204]++;(cov_1s2jxigxia().b[79][0]++,i&1)&&(cov_1s2jxigxia().b[79][1]++,f(0,Se,12,0,"div",20)(1,Le,31,11)),(cov_1s2jxigxia().b[80][0]++,i&2)&&(cov_1s2jxigxia().b[80][1]++,x(s.length===0?(cov_1s2jxigxia().b[81][0]++,0):(cov_1s2jxigxia().b[81][1]++,1)));}function Ne(i,s){cov_1s2jxigxia().f[75]++;cov_1s2jxigxia().s[205]++;if(i&1){cov_1s2jxigxia().b[82][0]++;let e=(cov_1s2jxigxia().s[206]++,w());cov_1s2jxigxia().s[207]++;t(0,"app-ward-form-dialog-component",82),u("submitted",function(a){cov_1s2jxigxia().f[76]++;cov_1s2jxigxia().s[208]++;b(e);let m=(cov_1s2jxigxia().s[209]++,d());cov_1s2jxigxia().s[210]++;return _(m.wardDialogMode()==="create"?(cov_1s2jxigxia().b[83][0]++,m.onCreateWardSubmit(a)):(cov_1s2jxigxia().b[83][1]++,m.onEditWardSubmit(a)));})("cancelled",function(){cov_1s2jxigxia().f[77]++;cov_1s2jxigxia().s[211]++;b(e);let a=(cov_1s2jxigxia().s[212]++,d());cov_1s2jxigxia().s[213]++;return _(a.onCloseWardDialog());}),n();}else{cov_1s2jxigxia().b[82][1]++;}cov_1s2jxigxia().s[214]++;if(i&2){cov_1s2jxigxia().b[84][0]++;let e=(cov_1s2jxigxia().s[215]++,d());cov_1s2jxigxia().s[216]++;v("ward",e.wardDialogValue());}else{cov_1s2jxigxia().b[84][1]++;}}function je(i,s){cov_1s2jxigxia().f[78]++;cov_1s2jxigxia().s[217]++;if(i&1){cov_1s2jxigxia().b[85][0]++;let e=(cov_1s2jxigxia().s[218]++,w());cov_1s2jxigxia().s[219]++;t(0,"app-assign-operator-dialog-component",83),u("submitted",function(a){cov_1s2jxigxia().f[79]++;cov_1s2jxigxia().s[220]++;b(e);let m=(cov_1s2jxigxia().s[221]++,d());cov_1s2jxigxia().s[222]++;return _(m.onAssignOperatorSubmit(a));})("cancelled",function(){cov_1s2jxigxia().f[80]++;cov_1s2jxigxia().s[223]++;b(e);let a=(cov_1s2jxigxia().s[224]++,d());cov_1s2jxigxia().s[225]++;return _(a.onCloseAssignOperatorDialog());}),n();}else{cov_1s2jxigxia().b[85][1]++;}cov_1s2jxigxia().s[226]++;if(i&2){cov_1s2jxigxia().b[86][0]++;let e=(cov_1s2jxigxia().s[227]++,d());cov_1s2jxigxia().s[228]++;v("wardId",s)("availableWards",e.wardsSnapshot())("availableOperators",e.availableOperators());}else{cov_1s2jxigxia().b[86][1]++;}}function Ge(i,s){cov_1s2jxigxia().f[81]++;cov_1s2jxigxia().s[229]++;if(i&1){cov_1s2jxigxia().b[87][0]++;let e=(cov_1s2jxigxia().s[230]++,w());cov_1s2jxigxia().s[231]++;t(0,"app-assign-ward-dialog-component",84),u("submitted",function(a){cov_1s2jxigxia().f[82]++;cov_1s2jxigxia().s[232]++;b(e);let m=(cov_1s2jxigxia().s[233]++,d());cov_1s2jxigxia().s[234]++;return _(m.onAssignPlantSubmit(a));})("cancelled",function(){cov_1s2jxigxia().f[83]++;cov_1s2jxigxia().s[235]++;b(e);let a=(cov_1s2jxigxia().s[236]++,d());cov_1s2jxigxia().s[237]++;return _(a.onCloseAssignPlantDialog());}),n();}else{cov_1s2jxigxia().b[87][1]++;}cov_1s2jxigxia().s[238]++;if(i&2){cov_1s2jxigxia().b[88][0]++;let e=(cov_1s2jxigxia().s[239]++,d());cov_1s2jxigxia().s[240]++;v("wardId",s)("availableWards",e.wardsSnapshot())("availablePlants",e.availablePlants());}else{cov_1s2jxigxia().b[88][1]++;}}function ze(i,s){cov_1s2jxigxia().f[84]++;cov_1s2jxigxia().s[241]++;if(i&1){cov_1s2jxigxia().b[89][0]++;let e=(cov_1s2jxigxia().s[242]++,w());cov_1s2jxigxia().s[243]++;t(0,"app-confirm-dialog",85),u("confirmed",function(){cov_1s2jxigxia().f[85]++;cov_1s2jxigxia().s[244]++;b(e);let a=(cov_1s2jxigxia().s[245]++,d());cov_1s2jxigxia().s[246]++;return _(a.onConfirmDialogConfirmed());})("cancelled",function(){cov_1s2jxigxia().f[86]++;cov_1s2jxigxia().s[247]++;b(e);let a=(cov_1s2jxigxia().s[248]++,d());cov_1s2jxigxia().s[249]++;return _(a.onConfirmDialogCancelled());}),n();}else{cov_1s2jxigxia().b[89][1]++;}cov_1s2jxigxia().s[250]++;if(i&2){cov_1s2jxigxia().b[90][0]++;let e=(cov_1s2jxigxia().s[251]++,d());cov_1s2jxigxia().s[252]++;v("message",e.getConfirmMessage())("confirmLabel",e.getConfirmLabel());}else{cov_1s2jxigxia().b[90][1]++;}}var ut=(cov_1s2jxigxia().s[253]++,(()=>{cov_1s2jxigxia().f[87]++;class i{store=(cov_1s2jxigxia().s[254]++,W(oe));destroy$=(cov_1s2jxigxia().s[255]++,new Y());wards$=(cov_1s2jxigxia().s[256]++,this.store.wards$);isLoading$=(cov_1s2jxigxia().s[257]++,this.store.isLoading$);error$=(cov_1s2jxigxia().s[258]++,this.store.error$);snackbarMessage=(cov_1s2jxigxia().s[259]++,C(null));wardDialogMode=(cov_1s2jxigxia().s[260]++,C("closed"));selectedWardId=(cov_1s2jxigxia().s[261]++,C(null));selectedApartmentId=(cov_1s2jxigxia().s[262]++,C(null));mobileStep=(cov_1s2jxigxia().s[263]++,C("wards"));operatorWardId=(cov_1s2jxigxia().s[264]++,C(null));availableOperatorsFromFetch=(cov_1s2jxigxia().s[265]++,C(null));isLoadingAvailableOperators=(cov_1s2jxigxia().s[266]++,C(!1));plantWardId=(cov_1s2jxigxia().s[267]++,C(null));availablePlantsFromFetch=(cov_1s2jxigxia().s[268]++,C(null));isLoadingAvailablePlants=(cov_1s2jxigxia().s[269]++,C(!1));confirmState=(cov_1s2jxigxia().s[270]++,C(null));wardsSnapshot=(cov_1s2jxigxia().s[271]++,C([]));selectedWard=(cov_1s2jxigxia().s[272]++,I(()=>{cov_1s2jxigxia().f[88]++;let e=(cov_1s2jxigxia().s[273]++,this.selectedWardId());cov_1s2jxigxia().s[274]++;return e?(cov_1s2jxigxia().b[91][0]++,(cov_1s2jxigxia().b[92][0]++,this.wardsSnapshot().find(o=>{cov_1s2jxigxia().f[89]++;cov_1s2jxigxia().s[275]++;return o.id===e;}))??(cov_1s2jxigxia().b[92][1]++,null)):(cov_1s2jxigxia().b[91][1]++,null);}));selectedApartment=(cov_1s2jxigxia().s[276]++,I(()=>{cov_1s2jxigxia().f[90]++;let e=(cov_1s2jxigxia().s[277]++,this.selectedApartmentId()),o=(cov_1s2jxigxia().s[278]++,this.selectedWard());cov_1s2jxigxia().s[279]++;return(cov_1s2jxigxia().b[94][0]++,!e)||(cov_1s2jxigxia().b[94][1]++,!o)?(cov_1s2jxigxia().b[93][0]++,null):(cov_1s2jxigxia().b[93][1]++,(cov_1s2jxigxia().b[95][0]++,o.apartments.find(a=>{cov_1s2jxigxia().f[91]++;cov_1s2jxigxia().s[280]++;return a.id===e;}))??(cov_1s2jxigxia().b[95][1]++,null));}));wardDialogValue=(cov_1s2jxigxia().s[281]++,I(()=>{cov_1s2jxigxia().f[92]++;cov_1s2jxigxia().s[282]++;return this.wardDialogMode()!=="edit"?(cov_1s2jxigxia().b[96][0]++,null):(cov_1s2jxigxia().b[96][1]++,this.selectedWard());}));availablePlants=(cov_1s2jxigxia().s[283]++,I(()=>{cov_1s2jxigxia().f[93]++;let e=(cov_1s2jxigxia().s[284]++,this.availablePlantsFromFetch());cov_1s2jxigxia().s[285]++;return e!==null?(cov_1s2jxigxia().b[97][0]++,e):(cov_1s2jxigxia().b[97][1]++,[]);}));availableOperators=(cov_1s2jxigxia().s[286]++,I(()=>{cov_1s2jxigxia().f[94]++;let e=(cov_1s2jxigxia().s[287]++,this.availableOperatorsFromFetch());cov_1s2jxigxia().s[288]++;return e!==null?(cov_1s2jxigxia().b[98][0]++,e):(cov_1s2jxigxia().b[98][1]++,[]);}));ngOnInit(){cov_1s2jxigxia().f[95]++;cov_1s2jxigxia().s[289]++;this.store.loadWards(),this.wards$.pipe(z(this.destroy$)).subscribe(e=>{cov_1s2jxigxia().f[96]++;cov_1s2jxigxia().s[290]++;if(this.wardsSnapshot.set(e),e.length===0){cov_1s2jxigxia().b[99][0]++;cov_1s2jxigxia().s[291]++;this.selectedWardId.set(null),this.selectedApartmentId.set(null),this.mobileStep.set("wards");cov_1s2jxigxia().s[292]++;return;}else{cov_1s2jxigxia().b[99][1]++;}let o=(cov_1s2jxigxia().s[293]++,this.selectedWardId());cov_1s2jxigxia().s[294]++;(cov_1s2jxigxia().b[100][0]++,o!==null)&&(cov_1s2jxigxia().b[100][1]++,e.some(h=>{cov_1s2jxigxia().f[97]++;cov_1s2jxigxia().s[295]++;return h.id===o;}))||(cov_1s2jxigxia().b[100][2]++,this.selectedWardId.set(e[0].id),this.selectedApartmentId.set(null));let m=(cov_1s2jxigxia().s[296]++,this.selectedApartmentId());cov_1s2jxigxia().s[297]++;(cov_1s2jxigxia().b[101][0]++,m!==null)&&(((cov_1s2jxigxia().b[101][1]++,e.find(T=>{cov_1s2jxigxia().f[98]++;cov_1s2jxigxia().s[298]++;return T.id===this.selectedWardId();})?.apartments.some(T=>{cov_1s2jxigxia().f[99]++;cov_1s2jxigxia().s[299]++;return T.id===m;}))??(cov_1s2jxigxia().b[101][2]++,!1))||(cov_1s2jxigxia().b[101][3]++,this.selectedApartmentId.set(null)));}),this.error$.pipe(z(this.destroy$)).subscribe(e=>{cov_1s2jxigxia().f[100]++;cov_1s2jxigxia().s[300]++;this.snackbarMessage.set(e);});}ngOnDestroy(){cov_1s2jxigxia().f[101]++;cov_1s2jxigxia().s[301]++;this.destroy$.next(),this.destroy$.complete();}dismissSnackbar(){cov_1s2jxigxia().f[102]++;cov_1s2jxigxia().s[302]++;this.snackbarMessage.set(null);}selectWard(e){cov_1s2jxigxia().f[103]++;cov_1s2jxigxia().s[303]++;if(this.selectedWardId()===e){cov_1s2jxigxia().b[102][0]++;cov_1s2jxigxia().s[304]++;this.mobileStep.set("apartments");cov_1s2jxigxia().s[305]++;return;}else{cov_1s2jxigxia().b[102][1]++;}cov_1s2jxigxia().s[306]++;this.selectedWardId.set(e),this.selectedApartmentId.set(null),this.mobileStep.set("apartments");}selectApartment(e){cov_1s2jxigxia().f[104]++;cov_1s2jxigxia().s[307]++;this.selectedApartmentId.set(e);}showWardListStep(){cov_1s2jxigxia().f[105]++;cov_1s2jxigxia().s[308]++;this.mobileStep.set("wards");}showApartmentsStep(){cov_1s2jxigxia().f[106]++;cov_1s2jxigxia().s[309]++;this.mobileStep.set("apartments");}showOperatorsStep(){cov_1s2jxigxia().f[107]++;cov_1s2jxigxia().s[310]++;this.mobileStep.set("operators");}onCreateWard(){cov_1s2jxigxia().f[108]++;cov_1s2jxigxia().s[311]++;this.wardDialogMode.set("create");}onCreateWardSubmit(e){cov_1s2jxigxia().f[109]++;cov_1s2jxigxia().s[312]++;this.store.createWard(e),this.wardDialogMode.set("closed");}onEditWard(e){cov_1s2jxigxia().f[110]++;cov_1s2jxigxia().s[313]++;this.selectedWardId.set(e.id),this.wardDialogMode.set("edit");}onEditSelectedWard(){cov_1s2jxigxia().f[111]++;let e=(cov_1s2jxigxia().s[314]++,this.selectedWard());cov_1s2jxigxia().s[315]++;(cov_1s2jxigxia().b[103][0]++,e)&&(cov_1s2jxigxia().b[103][1]++,this.onEditWard(e));}onEditWardSubmit(e){cov_1s2jxigxia().f[112]++;let o=(cov_1s2jxigxia().s[316]++,this.selectedWard());cov_1s2jxigxia().s[317]++;(cov_1s2jxigxia().b[104][0]++,o)&&(cov_1s2jxigxia().b[104][1]++,this.store.updateWard(o.id,e),this.wardDialogMode.set("closed"));}onCloseWardDialog(){cov_1s2jxigxia().f[113]++;cov_1s2jxigxia().s[318]++;this.wardDialogMode.set("closed");}onDeleteWard(e){cov_1s2jxigxia().f[114]++;cov_1s2jxigxia().s[319]++;this.confirmState.set({kind:"delete-ward",wardId:e});}onAssignOperator(e){cov_1s2jxigxia().f[115]++;cov_1s2jxigxia().s[320]++;this.operatorWardId.set(e),this.availableOperatorsFromFetch.set(null),this.isLoadingAvailableOperators.set(!0),this.store.getAvailableUsersForWard(e).pipe(z(this.destroy$)).subscribe(o=>{cov_1s2jxigxia().f[116]++;cov_1s2jxigxia().s[321]++;this.availableOperatorsFromFetch.set(o),this.isLoadingAvailableOperators.set(!1);});}onAssignOperatorSubmit(e){cov_1s2jxigxia().f[117]++;let o=(cov_1s2jxigxia().s[322]++,this.operatorWardId());cov_1s2jxigxia().s[323]++;(cov_1s2jxigxia().b[105][0]++,o)&&(cov_1s2jxigxia().b[105][1]++,this.store.assignOperator(o,e),this.operatorWardId.set(null),this.availableOperatorsFromFetch.set(null),this.isLoadingAvailableOperators.set(!1));}onCloseAssignOperatorDialog(){cov_1s2jxigxia().f[118]++;cov_1s2jxigxia().s[324]++;this.operatorWardId.set(null),this.availableOperatorsFromFetch.set(null),this.isLoadingAvailableOperators.set(!1);}onRemoveOperator(e){cov_1s2jxigxia().f[119]++;cov_1s2jxigxia().s[325]++;this.confirmState.set({kind:"remove-operator",wardId:e.wardId,userId:e.userId});}onAssignPlant(e){cov_1s2jxigxia().f[120]++;cov_1s2jxigxia().s[326]++;this.plantWardId.set(e),this.availablePlantsFromFetch.set(null),this.isLoadingAvailablePlants.set(!0),this.store.getAvailablePlantsForWard(e).pipe(z(this.destroy$)).subscribe(o=>{cov_1s2jxigxia().f[121]++;cov_1s2jxigxia().s[327]++;this.availablePlantsFromFetch.set(o),this.isLoadingAvailablePlants.set(!1);});}onAssignPlantSubmit(e){cov_1s2jxigxia().f[122]++;let o=(cov_1s2jxigxia().s[328]++,this.plantWardId());cov_1s2jxigxia().s[329]++;(cov_1s2jxigxia().b[106][0]++,o)&&(cov_1s2jxigxia().b[106][1]++,this.store.assignPlant(o,e),this.plantWardId.set(null));}onCloseAssignPlantDialog(){cov_1s2jxigxia().f[123]++;cov_1s2jxigxia().s[330]++;this.plantWardId.set(null),this.availablePlantsFromFetch.set(null),this.isLoadingAvailablePlants.set(!1);}onRemovePlant(e){cov_1s2jxigxia().f[124]++;cov_1s2jxigxia().s[331]++;this.confirmState.set({kind:"remove-plant",wardId:e.wardId,plantId:e.plantId});}onConfirmDialogConfirmed(){cov_1s2jxigxia().f[125]++;let e=(cov_1s2jxigxia().s[332]++,this.confirmState());cov_1s2jxigxia().s[333]++;(cov_1s2jxigxia().b[107][0]++,e)&&(cov_1s2jxigxia().b[107][1]++,(cov_1s2jxigxia().b[108][0]++,e.kind==="delete-ward")&&(cov_1s2jxigxia().b[108][1]++,this.store.deleteWard(e.wardId)),(cov_1s2jxigxia().b[109][0]++,e.kind==="remove-operator")&&(cov_1s2jxigxia().b[109][1]++,this.store.removeOperator(e.wardId,e.userId)),(cov_1s2jxigxia().b[110][0]++,e.kind==="remove-plant")&&(cov_1s2jxigxia().b[110][1]++,this.store.removePlant(e.wardId,e.plantId)),this.confirmState.set(null));}onConfirmDialogCancelled(){cov_1s2jxigxia().f[126]++;cov_1s2jxigxia().s[334]++;this.confirmState.set(null);}getConfirmMessage(){cov_1s2jxigxia().f[127]++;let e=(cov_1s2jxigxia().s[335]++,this.confirmState());cov_1s2jxigxia().s[336]++;return e?(cov_1s2jxigxia().b[111][0]++,e.kind==="delete-ward"?(cov_1s2jxigxia().b[112][0]++,"Confermi l'eliminazione del reparto?"):(cov_1s2jxigxia().b[112][1]++,e.kind==="remove-operator"?(cov_1s2jxigxia().b[113][0]++,"Confermi la rimozione dell'operatore dal reparto?"):(cov_1s2jxigxia().b[113][1]++,"Confermi la rimozione dell'appartamento dal reparto?"))):(cov_1s2jxigxia().b[111][1]++,"Confermi questa operazione?");}getConfirmLabel(){cov_1s2jxigxia().f[128]++;let e=(cov_1s2jxigxia().s[337]++,this.confirmState());cov_1s2jxigxia().s[338]++;return(cov_1s2jxigxia().b[115][0]++,e)&&((cov_1s2jxigxia().b[115][1]++,e.kind==="remove-operator")||(cov_1s2jxigxia().b[115][2]++,e.kind==="remove-plant"))?(cov_1s2jxigxia().b[114][0]++,"Rimuovi"):(cov_1s2jxigxia().b[114][1]++,"Conferma");}getOperatorDisplayName(e,o){cov_1s2jxigxia().f[129]++;cov_1s2jxigxia().s[339]++;return`${e} ${o}`.trim();}static ɵfac=(cov_1s2jxigxia().s[340]++,function(o){cov_1s2jxigxia().f[130]++;cov_1s2jxigxia().s[341]++;return new((cov_1s2jxigxia().b[116][0]++,o)||(cov_1s2jxigxia().b[116][1]++,i))();});static ɵcmp=(cov_1s2jxigxia().s[342]++,E({type:i,selectors:[["app-ward-management-page-component"]],decls:23,vars:11,consts:[["aria-label","Gestione reparti",1,"ward-management-page","care-page","care-dot-grid","sidebar-page"],[1,"care-page__hero"],[1,"flex","items-center","gap-4"],[1,"care-eyebrow"],[1,"care-title"],[1,"care-subtitle"],[1,"flex","items-center","gap-3"],[1,"care-page__header-badge"],[1,"care-page__header-badge-dot"],["role","alert","aria-live","assertive",1,"flex","items-center","justify-between","gap-3","rounded-xl","border","border-red-200","bg-red-50","px-4","py-3","text-sm","text-red-700","shadow-sm"],["aria-live","polite",1,"flex","items-center","gap-3","text-sm","text-slate-500"],[3,"ward"],[3,"wardId","availableWards","availableOperators"],[3,"wardId","availableWards","availablePlants"],["cancelLabel","Annulla",3,"message","confirmLabel"],[1,"flex","items-center","gap-2"],["fill","currentColor","viewBox","0 0 20 20",1,"h-4","w-4","shrink-0","text-red-500"],["fill-rule","evenodd","d","M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7 4a1 1 0 11-2 0 1 1 0 012 0zm-1-9a1 1 0 00-1 1v4a1 1 0 102 0V6a1 1 0 00-1-1z","clip-rule","evenodd"],["type","button",1,"rounded-md","border","border-red-200","bg-white","px-2.5","py-1","text-xs","font-semibold","text-red-600","hover:bg-red-50",3,"click"],[1,"h-4","w-4","animate-spin","rounded-full","border-2","border-slate-200","border-t-slate-500"],[1,"flex","flex-col","items-center","justify-center","rounded-2xl","border","border-slate-200","bg-white/70","p-16","text-center","shadow-sm"],[1,"flex","h-14","w-14","items-center","justify-center","rounded-2xl","bg-slate-100"],["fill","none","viewBox","0 0 24 24","stroke-width","1.5","stroke","currentColor",1,"h-7","w-7","text-slate-400"],["stroke-linecap","round","stroke-linejoin","round","d","M2.25 21h19.5m-18-18v18m10.5-18v18m6-13.5V21M6.75 6.75h.75m-.75 3h.75m-.75 3h.75m3-6h.75m-.75 3h.75m-.75 3h.75M6.75 21v-3.375c0-.621.504-1.125 1.125-1.125h2.25c.621 0 1.125.504 1.125 1.125V21M3 3h12m-.75 4.5H21m-3.75 3.75h.008v.008h-.008v-.008zm0 3h.008v.008h-.008v-.008zm0 3h.008v.008h-.008v-.008z"],[1,"mt-4","text-sm","font-semibold","text-slate-700"],[1,"mt-1","text-xs","text-slate-400"],["type","button",1,"care-btn","care-btn--primary","mt-5","px-4","shadow-sm","focus-visible:outline-2","focus-visible:outline-offset-2","focus-visible:outline-amber-400",3,"click"],["fill","none","viewBox","0 0 24 24","stroke-width","2.5","stroke","currentColor",1,"h-4","w-4"],["stroke-linecap","round","stroke-linejoin","round","d","M12 4.5v15m7.5-7.5h-15"],[1,"overflow-hidden","rounded-xl","border","border-slate-200","bg-white","shadow-sm","lg:hidden"],[1,"flex","min-h-0","flex-1","overflow-hidden","rounded-2xl","border","border-slate-200","bg-white","shadow-sm",2,"min-height","32rem"],["aria-label","Elenco reparti",1,"col-separator","col-scroll","flex","w-60","shrink-0","flex-col","overflow-y-auto","lg:flex"],[1,"flex","items-center","justify-between","border-b","border-slate-100","bg-white/95","px-4","py-3"],[1,"font-display","text-xs","font-bold","uppercase","tracking-widest","text-slate-400"],[1,"flex","items-center","gap-1.5"],["type","button","aria-label","Elimina reparto",1,"care-btn","care-btn--danger","care-btn--icon","care-btn--compact","h-6","w-6","disabled:cursor-not-allowed","disabled:opacity-40",3,"click","disabled"],["fill","none","viewBox","0 0 24 24","stroke-width","2","stroke","currentColor",1,"h-3.5","w-3.5"],["stroke-linecap","round","stroke-linejoin","round","d","M14.74 9l-.346 9m-4.788 0L9.26 9m9.968-3.21c.342.052.682.107 1.022.166m-1.022-.165L18.16 19.673a2.25 2.25 0 01-2.244 2.077H8.084a2.25 2.25 0 01-2.244-2.077L4.772 5.79m14.456 0a48.108 48.108 0 00-3.478-.397m-12 .562c.34-.059.68-.114 1.022-.165m0 0a48.11 48.11 0 013.478-.397m7.5 0v-.916c0-1.18-.91-2.164-2.09-2.201a51.964 51.964 0 00-3.32 0c-1.18.037-2.09 1.022-2.09 2.201v.916m7.5 0a48.667 48.667 0 00-7.5 0"],[1,"sr-only"],["type","button","aria-label","Modifica reparto",1,"care-btn","care-btn--neutral","care-btn--icon","care-btn--compact","h-6","w-6","disabled:cursor-not-allowed","disabled:opacity-40",3,"click","disabled"],["stroke-linecap","round","stroke-linejoin","round","d","M16.862 4.487l1.687-1.688a1.875 1.875 0 112.652 2.652L10.582 16.07a4.5 4.5 0 01-1.897 1.13L6 18l.8-2.685a4.5 4.5 0 011.13-1.897l8.932-8.931zm0 0L19.5 7.125M18 14v4.75A2.25 2.25 0 0115.75 21H5.25A2.25 2.25 0 013 18.75V8.25A2.25 2.25 0 015.25 6H10"],["type","button","aria-label","Nuovo reparto",1,"care-btn","care-btn--primary","care-btn--icon","care-btn--compact","h-6","w-6",3,"click"],["fill","none","viewBox","0 0 24 24","stroke-width","3","stroke","currentColor",1,"h-3.5","w-3.5"],[1,"flex-1","space-y-0.5","p-2"],["aria-label","Dettagli reparto e appartamenti",1,"col-separator","col-scroll","flex","flex-1","flex-col","overflow-y-auto","lg:flex"],[1,"flex","flex-1","flex-col","items-center","justify-center","p-8","text-center"],["aria-label","Operatori assegnati",1,"col-scroll","flex","flex-1","flex-col","overflow-y-auto","lg:flex"],[1,"grid","grid-cols-3","divide-x","divide-slate-100","text-xs","font-semibold"],["type","button",3,"click"],["stroke-linecap","round","stroke-linejoin","round","d","M3.75 6A2.25 2.25 0 016 3.75h2.25A2.25 2.25 0 0110.5 6v2.25a2.25 2.25 0 01-2.25 2.25H6a2.25 2.25 0 01-2.25-2.25V6zm0 9.75A2.25 2.25 0 016 13.5h2.25a2.25 2.25 0 012.25 2.25V18a2.25 2.25 0 01-2.25 2.25H6A2.25 2.25 0 013.75 18v-2.25zm9.75-9.75A2.25 2.25 0 0115.75 3.75H18A2.25 2.25 0 0120.25 6v2.25A2.25 2.25 0 0118 10.5h-2.25a2.25 2.25 0 01-2.25-2.25V6zm0 9.75a2.25 2.25 0 012.25-2.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-2.25A2.25 2.25 0 0113.5 18v-2.25z"],["stroke-linecap","round","stroke-linejoin","round","d","M2.25 12l8.954-8.955c.44-.439 1.152-.439 1.591 0L21.75 12M4.5 9.75v10.125c0 .621.504 1.125 1.125 1.125H9.75v-4.875c0-.621.504-1.125 1.125-1.125h2.25c.621 0 1.125.504 1.125 1.125V21h4.125c.621 0 1.125-.504 1.125-1.125V9.75M8.25 21h8.25"],["stroke-linecap","round","stroke-linejoin","round","d","M15.75 6a3.75 3.75 0 11-7.5 0 3.75 3.75 0 017.5 0zM4.501 20.118a7.5 7.5 0 0114.998 0A17.933 17.933 0 0112 21.75c-2.676 0-5.216-.584-7.499-1.632z"],[1,"border-t","border-slate-100","px-4","py-2","text-xs","text-slate-400"],[1,"font-semibold","text-slate-600"],[1,"flex","min-w-0","items-center","gap-2"],["fill","none","viewBox","0 0 24 24","stroke-width","2","stroke","currentColor",1,"h-3.5","w-3.5","shrink-0"],["stroke-linecap","round","stroke-linejoin","round","d","M2.25 21h19.5m-18-18v18m10.5-18v18m6-13.5V21"],[1,"truncate","text-sm","font-medium"],[1,"border-b","border-slate-100","bg-white/95","px-4","py-3"],[1,"flex","items-start","justify-between","gap-2"],[1,"min-w-0"],[1,"mt-0.5","truncate","text-sm","font-semibold","text-slate-800"],[1,"flex","shrink-0","items-center","gap-1.5"],["type","button","aria-label","Assegna appartamento",1,"care-btn","care-btn--primary","care-btn--icon","care-btn--compact","h-7","w-7",3,"click"],[1,"flex-1","p-3"],[1,"flex","flex-col","items-center","justify-center","rounded-xl","border","border-dashed","border-slate-200","py-12","text-center"],[1,"space-y-0.5"],["fill","none","viewBox","0 0 24 24","stroke-width","1.5","stroke","currentColor",1,"h-8","w-8","text-slate-300"],[1,"mt-3","text-xs","font-medium","text-slate-400"],["type","button",1,"flex","min-w-0","flex-1","cursor-pointer","items-center","gap-2","text-left",3,"click"],["fill","none","viewBox","0 0 24 24","stroke-width","2","stroke","currentColor"],["type","button","aria-label","Rimuovi appartamento",3,"click"],["stroke-linecap","round","stroke-linejoin","round","d","M6 18L18 6M6 6l12 12"],["fill","none","viewBox","0 0 24 24","stroke-width","1.5","stroke","currentColor",1,"h-10","w-10","text-slate-200"],["stroke-linecap","round","stroke-linejoin","round","d","M15.042 21.672L13.684 16.6m0 0l-2.51 2.225.569-9.47 5.227 7.917-3.286-.672zm-7.518-.267A8.25 8.25 0 1120.25 10.5M8.288 14.212A5.25 5.25 0 1117.25 10.5"],[1,"mt-4","text-sm","font-medium","text-slate-400"],[1,"mt-1","text-xs","text-slate-300"],["type","button","aria-label","Aggiungi operatore",1,"care-btn","care-btn--primary","care-btn--icon","care-btn--compact","h-7","w-7",3,"click"],[1,"group","flex","items-center","justify-between","gap-2","rounded-lg","px-3","py-2.5","text-slate-700","hover:bg-slate-50"],[1,"flex","min-w-0","items-center","gap-2.5"],[1,"flex","h-6","w-6","shrink-0","items-center","justify-center","rounded-full","bg-emerald-100","text-[10px]","font-bold","text-emerald-700"],["type","button","aria-label","Rimuovi operatore",1,"care-btn","care-btn--danger","care-btn--icon","care-btn--compact","h-8","w-8","shrink-0",3,"click"],[3,"submitted","cancelled","ward"],[3,"submitted","cancelled","wardId","availableWards","availableOperators"],[3,"submitted","cancelled","wardId","availableWards","availablePlants"],["cancelLabel","Annulla",3,"confirmed","cancelled","message","confirmLabel"]],template:function(o,a){cov_1s2jxigxia().f[131]++;cov_1s2jxigxia().s[343]++;if((cov_1s2jxigxia().b[118][0]++,o&1)&&(cov_1s2jxigxia().b[118][1]++,t(0,"section",0)(1,"header",1)(2,"div",2)(3,"div")(4,"p",3),r(5,"Organizzazione"),n(),t(6,"h1",4),r(7,"Gestione reparti"),n(),t(8,"p",5),r(9,"Navigazione a colonne: Reparti \u2192 Appartamenti \u2192 Operatori."),n()()(),t(10,"div",6)(11,"div",7),c(12,"span",8),r(13," Sistema attivo "),n()()(),f(14,Ce,8,1,"div",9),f(15,we,3,0,"div",10),J(16,"async"),f(17,Fe,2,1),J(18,"async"),f(19,Ne,1,1,"app-ward-form-dialog-component",11),f(20,je,1,3,"app-assign-operator-dialog-component",12),f(21,Ge,1,3,"app-assign-ward-dialog-component",13),f(22,ze,1,2,"app-confirm-dialog",14),n()),o&2){cov_1s2jxigxia().b[117][0]++;let m,h,U,T;cov_1s2jxigxia().s[344]++;l(14),x((m=a.snackbarMessage())?(cov_1s2jxigxia().b[119][0]++,14):(cov_1s2jxigxia().b[119][1]++,-1),m),l(),x(K(16,7,a.isLoading$)?(cov_1s2jxigxia().b[120][0]++,15):(cov_1s2jxigxia().b[120][1]++,-1)),l(2),x((h=K(18,9,a.wards$))?(cov_1s2jxigxia().b[121][0]++,17):(cov_1s2jxigxia().b[121][1]++,-1),h),l(2),x(a.wardDialogMode()!=="closed"?(cov_1s2jxigxia().b[122][0]++,19):(cov_1s2jxigxia().b[122][1]++,-1)),l(),x((U=a.operatorWardId())?(cov_1s2jxigxia().b[123][0]++,20):(cov_1s2jxigxia().b[123][1]++,-1),U),l(),x((T=a.plantWardId())?(cov_1s2jxigxia().b[124][0]++,21):(cov_1s2jxigxia().b[124][1]++,-1),T),l(),x(a.confirmState()?(cov_1s2jxigxia().b[125][0]++,22):(cov_1s2jxigxia().b[125][1]++,-1));}else{cov_1s2jxigxia().b[117][1]++;}},dependencies:[de,se,le,ae,te],styles:[`.ward-management-page[_ngcontent-%COMP%]{gap:1.15rem}.col-separator[_ngcontent-%COMP%]{border-right:1px solid #e2e8f0}.col-scroll[_ngcontent-%COMP%]{scrollbar-width:thin;scrollbar-color:#cbd5e1 transparent}.col-scroll[_ngcontent-%COMP%]::-webkit-scrollbar{width:4px}.col-scroll[_ngcontent-%COMP%]::-webkit-scrollbar-thumb{background:#cbd5e1;border-radius:999px} +/*# sourceMappingURL=ward-management-page-component-OXVHAKTG.css.map */`],changeDetection:0}));}cov_1s2jxigxia().s[345]++;return i;})());export{ut as WardManagementPageComponent};//# sourceMappingURL=chunk-VJLNG5UH.js.map +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ0IiwiciIsIm4iLCJpIiwiY292XzFzMmp4aWd4aWEiLCJiIiwiZSIsInMiLCIkaW1wbGljaXQiLCJ2IiwiaWQiLCJsIiwiUyIsIm5hbWUiLCJwZSIsImYiLCJwIiwiYyIsImxlIiwiZm9ybUJ1aWxkZXIiLCJXIiwiaiIsIndhcmRJZCIsImsiLCJhdmFpbGFibGVXYXJkcyIsImF2YWlsYWJsZVBsYW50cyIsInN1Ym1pdHRlZCIsInkiLCJjYW5jZWxsZWQiLCJmb3JtIiwiZ3JvdXAiLCJwbGFudElkIiwiY29udHJvbCIsInZhbGlkYXRvcnMiLCJEIiwicmVxdWlyZWQiLCJuZ09uSW5pdCIsInJlc2V0Iiwib25TdWJtaXQiLCJpbnZhbGlkIiwibWFya0FsbEFzVG91Y2hlZCIsImNvbnRyb2xzIiwidmFsdWUiLCJlbWl0Iiwib25DYW5jZWwiLCLJtWZhYyIsIm8iLCLJtWNtcCIsIkUiLCJ0eXBlIiwic2VsZWN0b3JzIiwiaW5wdXRzIiwib3V0cHV0cyIsImRlY2xzIiwidmFycyIsImNvbnN0cyIsInRlbXBsYXRlIiwiYSIsImciLCJ1IiwiViIsImNlIiwibWUiLCJBIiwieCIsInRvdWNoZWQiLCJkZXBlbmRlbmNpZXMiLCJHIiwiTCIsIlIiLCJxIiwiJCIsIlAiLCJPIiwiTiIsIkYiLCJlbmNhcHN1bGF0aW9uIiwiY2hhbmdlRGV0ZWN0aW9uIiwidWUiLCJnZSIsImQiLCJnZXRPcGVyYXRvckxhYmVsIiwiYmUiLCJzZSIsImF2YWlsYWJsZU9wZXJhdG9ycyIsInVzZXJJZCIsImZpcnN0TmFtZSIsImxhc3ROYW1lIiwidHJpbSIsInVzZXJuYW1lIiwiX2UiLCJmZSIsInhlIiwidmUiLCJoZSIsImVycm9ycyIsIm1heGxlbmd0aCIsImRlIiwid2FyZCIsIm5vbk51bGxhYmxlIiwibWF4TGVuZ3RoIiwic3luY0Zvcm1XaXRoV2FyZCIsIloiLCJwYXRjaFZhbHVlIiwiZW1pdEV2ZW50IiwiaXNFZGl0TW9kZSIsIkkiLCJNIiwiSCIsIm5lIiwiaWUiLCJzdHlsZXMiLCJRIiwiQ2UiLCJ3IiwiXyIsImRpc21pc3NTbmFja2JhciIsIndlIiwiU2UiLCJvbkNyZWF0ZVdhcmQiLCJNZSIsInNob3dXYXJkTGlzdFN0ZXAiLCJzaG93QXBhcnRtZW50c1N0ZXAiLCJzaG93T3BlcmF0b3JzU3RlcCIsIm1vYmlsZVN0ZXAiLCJrZSIsIm0iLCJzZWxlY3RXYXJkIiwic2VsZWN0ZWRXYXJkSWQiLCJhcGFydG1lbnRzIiwibGVuZ3RoIiwieWUiLCJXZSIsInNlbGVjdEFwYXJ0bWVudCIsImgiLCJvblJlbW92ZVBsYW50Iiwic2VsZWN0ZWRBcGFydG1lbnRJZCIsIkVlIiwiVmUiLCJvbkFzc2lnblBsYW50IiwiQWUiLCJJZSIsIkRlIiwib25SZW1vdmVPcGVyYXRvciIsImVlIiwiZ2V0T3BlcmF0b3JEaXNwbGF5TmFtZSIsIlRlIiwib3BlcmF0b3JzIiwiUGUiLCJvbkFzc2lnbk9wZXJhdG9yIiwiT2UiLCJMZSIsIm9uRGVsZXRlV2FyZCIsInNlbGVjdGVkV2FyZCIsIm9uRWRpdFNlbGVjdGVkV2FyZCIsIkIiLCJGZSIsIk5lIiwid2FyZERpYWxvZ01vZGUiLCJvbkNyZWF0ZVdhcmRTdWJtaXQiLCJvbkVkaXRXYXJkU3VibWl0Iiwib25DbG9zZVdhcmREaWFsb2ciLCJ3YXJkRGlhbG9nVmFsdWUiLCJqZSIsIm9uQXNzaWduT3BlcmF0b3JTdWJtaXQiLCJvbkNsb3NlQXNzaWduT3BlcmF0b3JEaWFsb2ciLCJ3YXJkc1NuYXBzaG90IiwiR2UiLCJvbkFzc2lnblBsYW50U3VibWl0Iiwib25DbG9zZUFzc2lnblBsYW50RGlhbG9nIiwiemUiLCJvbkNvbmZpcm1EaWFsb2dDb25maXJtZWQiLCJvbkNvbmZpcm1EaWFsb2dDYW5jZWxsZWQiLCJnZXRDb25maXJtTWVzc2FnZSIsImdldENvbmZpcm1MYWJlbCIsInV0Iiwic3RvcmUiLCJvZSIsImRlc3Ryb3kkIiwiWSIsIndhcmRzJCIsImlzTG9hZGluZyQiLCJlcnJvciQiLCJzbmFja2Jhck1lc3NhZ2UiLCJDIiwib3BlcmF0b3JXYXJkSWQiLCJhdmFpbGFibGVPcGVyYXRvcnNGcm9tRmV0Y2giLCJpc0xvYWRpbmdBdmFpbGFibGVPcGVyYXRvcnMiLCJwbGFudFdhcmRJZCIsImF2YWlsYWJsZVBsYW50c0Zyb21GZXRjaCIsImlzTG9hZGluZ0F2YWlsYWJsZVBsYW50cyIsImNvbmZpcm1TdGF0ZSIsImZpbmQiLCJzZWxlY3RlZEFwYXJ0bWVudCIsImxvYWRXYXJkcyIsInBpcGUiLCJ6Iiwic3Vic2NyaWJlIiwic2V0Iiwic29tZSIsIlQiLCJuZ09uRGVzdHJveSIsIm5leHQiLCJjb21wbGV0ZSIsImNyZWF0ZVdhcmQiLCJvbkVkaXRXYXJkIiwidXBkYXRlV2FyZCIsImtpbmQiLCJnZXRBdmFpbGFibGVVc2Vyc0ZvcldhcmQiLCJhc3NpZ25PcGVyYXRvciIsImdldEF2YWlsYWJsZVBsYW50c0ZvcldhcmQiLCJhc3NpZ25QbGFudCIsImRlbGV0ZVdhcmQiLCJyZW1vdmVPcGVyYXRvciIsInJlbW92ZVBsYW50IiwiSiIsIlUiLCJLIiwiYWUiLCJ0ZSIsIldhcmRNYW5hZ2VtZW50UGFnZUNvbXBvbmVudCJdLCJzb3VyY2VzIjpbInNyYy9hcHAvZmVhdHVyZXMvd2FyZC1tYW5hZ2VtZW50L2NvbXBvbmVudHMvYXNzaWduLXdhcmQtZGlhbG9nLWNvbXBvbmVudC9hc3NpZ24td2FyZC1kaWFsb2ctY29tcG9uZW50LnRzIiwic3JjL2FwcC9mZWF0dXJlcy93YXJkLW1hbmFnZW1lbnQvY29tcG9uZW50cy9hc3NpZ24td2FyZC1kaWFsb2ctY29tcG9uZW50L2Fzc2lnbi13YXJkLWRpYWxvZy1jb21wb25lbnQuaHRtbCIsInNyYy9hcHAvZmVhdHVyZXMvd2FyZC1tYW5hZ2VtZW50L2NvbXBvbmVudHMvYXNzaWduLW9wZXJhdG9yLWRpYWxvZy1jb21wb25lbnQvYXNzaWduLW9wZXJhdG9yLWRpYWxvZy1jb21wb25lbnQudHMiLCJzcmMvYXBwL2ZlYXR1cmVzL3dhcmQtbWFuYWdlbWVudC9jb21wb25lbnRzL2Fzc2lnbi1vcGVyYXRvci1kaWFsb2ctY29tcG9uZW50L2Fzc2lnbi1vcGVyYXRvci1kaWFsb2ctY29tcG9uZW50Lmh0bWwiLCJzcmMvYXBwL2ZlYXR1cmVzL3dhcmQtbWFuYWdlbWVudC9jb21wb25lbnRzL3dhcmQtZm9ybS1kaWFsb2ctY29tcG9uZW50L3dhcmQtZm9ybS1kaWFsb2ctY29tcG9uZW50LnRzIiwic3JjL2FwcC9mZWF0dXJlcy93YXJkLW1hbmFnZW1lbnQvY29tcG9uZW50cy93YXJkLWZvcm0tZGlhbG9nLWNvbXBvbmVudC93YXJkLWZvcm0tZGlhbG9nLWNvbXBvbmVudC5odG1sIiwic3JjL2FwcC9mZWF0dXJlcy93YXJkLW1hbmFnZW1lbnQvY29tcG9uZW50cy93YXJkLW1hbmFnZW1lbnQtcGFnZS1jb21wb25lbnQvd2FyZC1tYW5hZ2VtZW50LXBhZ2UtY29tcG9uZW50LnRzIiwic3JjL2FwcC9mZWF0dXJlcy93YXJkLW1hbmFnZW1lbnQvY29tcG9uZW50cy93YXJkLW1hbmFnZW1lbnQtcGFnZS1jb21wb25lbnQvd2FyZC1tYW5hZ2VtZW50LXBhZ2UtY29tcG9uZW50Lmh0bWwiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgT25Jbml0LCBpbmplY3QsIGlucHV0LCBvdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHR5cGUgeyBQbGFudCB9IGZyb20gJy4uLy4uL21vZGVscy9wbGFudC5tb2RlbCc7XG5pbXBvcnQgdHlwZSB7IEFzc2lnblBsYW50RHRvIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3dhcmQtYXBpLmR0byc7XG5pbXBvcnQgdHlwZSB7IFdhcmQgfSBmcm9tICcuLi8uLi9tb2RlbHMvd2FyZC5tb2RlbCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1hc3NpZ24td2FyZC1kaWFsb2ctY29tcG9uZW50JyxcbiAgaW1wb3J0czogW1JlYWN0aXZlRm9ybXNNb2R1bGVdLFxuICB0ZW1wbGF0ZVVybDogJy4vYXNzaWduLXdhcmQtZGlhbG9nLWNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL2Fzc2lnbi13YXJkLWRpYWxvZy1jb21wb25lbnQuY3NzJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIEFzc2lnbldhcmREaWFsb2dDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBwcml2YXRlIHJlYWRvbmx5IGZvcm1CdWlsZGVyID0gaW5qZWN0KEZvcm1CdWlsZGVyKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgd2FyZElkID0gaW5wdXQ8bnVtYmVyPigwKTtcbiAgcHVibGljIHJlYWRvbmx5IGF2YWlsYWJsZVdhcmRzID0gaW5wdXQ8V2FyZFtdPihbXSk7XG4gIHB1YmxpYyByZWFkb25seSBhdmFpbGFibGVQbGFudHMgPSBpbnB1dDxQbGFudFtdPihbXSk7XG4gIHB1YmxpYyByZWFkb25seSBzdWJtaXR0ZWQgPSBvdXRwdXQ8QXNzaWduUGxhbnREdG8+KCk7XG4gIHB1YmxpYyByZWFkb25seSBjYW5jZWxsZWQgPSBvdXRwdXQ8dm9pZD4oKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgZm9ybSA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuICAgIHBsYW50SWQ6IHRoaXMuZm9ybUJ1aWxkZXIuY29udHJvbDxzdHJpbmcgfCBudWxsPihudWxsLCB7IHZhbGlkYXRvcnM6IFtWYWxpZGF0b3JzLnJlcXVpcmVkXSB9KSxcbiAgfSk7XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuZm9ybS5yZXNldCh7IHBsYW50SWQ6IG51bGwgfSk7XG4gIH1cblxuICBwdWJsaWMgb25TdWJtaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZm9ybS5pbnZhbGlkKSB7XG4gICAgICB0aGlzLmZvcm0ubWFya0FsbEFzVG91Y2hlZCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHBsYW50SWQgPSB0aGlzLmZvcm0uY29udHJvbHMucGxhbnRJZC52YWx1ZTtcbiAgICBpZiAocGxhbnRJZCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc3VibWl0dGVkLmVtaXQoeyBwbGFudElkIH0pO1xuICB9XG5cbiAgcHVibGljIG9uQ2FuY2VsKCk6IHZvaWQge1xuICAgIHRoaXMuY2FuY2VsbGVkLmVtaXQoKTtcbiAgfVxufVxuIiwiPGRpYWxvZyBvcGVuIGFyaWEtbGFiZWxsZWRieT1cImFzc2lnbi1hcGFydG1lbnQtdGl0bGVcIlxuICAgIGNsYXNzPVwiZml4ZWQgaW5zZXQtMCB6LTUwIG0tYXV0byB3LVs5NXZ3XSBtYXgtdy1tZCBvdmVyZmxvdy1oaWRkZW4gcm91bmRlZC0yeGwgYm9yZGVyIGJvcmRlci1zbGF0ZS0yMDAgYmctd2hpdGUgcC0wIHNoYWRvdy0yeGwgYmFja2Ryb3A6Ymctc2xhdGUtOTAwLzUwIGZvY3VzOm91dGxpbmUtbm9uZVwiPlxuXG4gICAgPCEtLSBIZWFkZXIgLS0+XG4gICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtMyBib3JkZXItYiBib3JkZXItc2xhdGUtMTAwIGJnLXNsYXRlLTUwIHB4LTUgcHktNFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTNcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGgtOCB3LTggc2hyaW5rLTAgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHJvdW5kZWQtbGcgYmctYW1iZXItMTAwXCI+XG4gICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz1cImgtNCB3LTQgdGV4dC1hbWJlci03MDBcIiBmaWxsPVwibm9uZVwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBzdHJva2Utd2lkdGg9XCIyXCJcbiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiY3VycmVudENvbG9yXCI+XG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTIuMjUgMTJsOC45NTQtOC45NTVjLjQ0LS40MzkgMS4xNTItLjQzOSAxLjU5MSAwTDIxLjc1IDEyTTQuNSA5Ljc1djEwLjEyNWMwIC42MjEuNTA0IDEuMTI1IDEuMTI1IDEuMTI1SDkuNzV2LTQuODc1YzAtLjYyMS41MDQtMS4xMjUgMS4xMjUtMS4xMjVoMi4yNWMuNjIxIDAgMS4xMjUuNTA0IDEuMTI1IDEuMTI1VjIxaDQuMTI1Yy42MjEgMCAxLjEyNS0uNTA0IDEuMTI1LTEuMTI1VjkuNzVNOC4yNSAyMWg4LjI1XCIgLz5cbiAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8aDIgaWQ9XCJhc3NpZ24tYXBhcnRtZW50LXRpdGxlXCIgY2xhc3M9XCJ0ZXh0LXNtIGZvbnQtYm9sZCB0ZXh0LXNsYXRlLTkwMFwiXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiZm9udC1mYW1pbHk6J1N5bmUnLHNhbnMtc2VyaWZcIj5cbiAgICAgICAgICAgICAgICAgICAgQXNzZWduYSBhcHBhcnRhbWVudG9cbiAgICAgICAgICAgICAgICA8L2gyPlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidGV4dC14cyB0ZXh0LXNsYXRlLTUwMFwiPlNlbGV6aW9uYSB1biBhcHBhcnRhbWVudG8gbm9uIGFuY29yYSBhc3NlZ25hdG88L3A+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJvbkNhbmNlbCgpXCIgYXJpYS1sYWJlbD1cIkNoaXVkaVwiXG4gICAgICAgICAgICBjbGFzcz1cImZsZXggaC03IHctNyBjdXJzb3ItcG9pbnRlciBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZC1sZyB0ZXh0LXNsYXRlLTQwMCB0cmFuc2l0aW9uIGhvdmVyOmJnLXNsYXRlLTEwMCBob3Zlcjp0ZXh0LXNsYXRlLTYwMFwiPlxuICAgICAgICAgICAgPHN2ZyBjbGFzcz1cImgtNCB3LTRcIiBmaWxsPVwibm9uZVwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCI+XG4gICAgICAgICAgICAgICAgPHBhdGggc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgZD1cIk02IDE4TDE4IDZNNiA2bDEyIDEyXCIgLz5cbiAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gQm9keSAtLT5cbiAgICA8ZGl2IGNsYXNzPVwicHgtNSBweS01XCI+XG5cbiAgICAgICAgPCEtLSBXYXJkIGNvbnRleHQgcGlsbCAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTQgZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgcm91bmRlZC1sZyBiZy1zbGF0ZS01MCBweC0zIHB5LTIuNSB0ZXh0LXhzIHRleHQtc2xhdGUtNTAwXCI+XG4gICAgICAgICAgICA8c3ZnIGNsYXNzPVwiaC0zLjUgdy0zLjUgc2hyaW5rLTBcIiBmaWxsPVwibm9uZVwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBzdHJva2Utd2lkdGg9XCIyXCJcbiAgICAgICAgICAgICAgICBzdHJva2U9XCJjdXJyZW50Q29sb3JcIj5cbiAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBkPVwiTTIuMjUgMjFoMTkuNW0tMTgtMTh2MThtMTAuNS0xOHYxOG02LTEzLjVWMjFcIiAvPlxuICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICBSZXBhcnRvOiA8c3BhbiBjbGFzcz1cImZvbnQtc2VtaWJvbGQgdGV4dC1zbGF0ZS03MDBcIj57eyB3YXJkSWQoKSB9fTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtXCIgKG5nU3VibWl0KT1cIm9uU3VibWl0KClcIiBjbGFzcz1cInNwYWNlLXktM1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNwYWNlLXktMVwiPlxuICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJhcGFydG1lbnQtaWRcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0xIHRleHQteHMgZm9udC1zZW1pYm9sZCB1cHBlcmNhc2UgdHJhY2tpbmctd2lkZSB0ZXh0LXNsYXRlLTUwMFwiPlxuICAgICAgICAgICAgICAgICAgICBBcHBhcnRhbWVudG8gPHNwYW4gY2xhc3M9XCJ0ZXh0LXJvc2UtNTAwXCI+Kjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgIDxzZWxlY3QgaWQ9XCJhcGFydG1lbnQtaWRcIiBmb3JtQ29udHJvbE5hbWU9XCJwbGFudElkXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ3LWZ1bGwgcm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLXNsYXRlLTIwMCBiZy1zbGF0ZS01MCBweC0zIHB5LTIuNSB0ZXh0LXNtIHRleHQtc2xhdGUtOTAwIG91dGxpbmUtbm9uZSB0cmFuc2l0aW9uIGhvdmVyOmJvcmRlci1zbGF0ZS0zMDAgZm9jdXM6Ym9yZGVyLWFtYmVyLTMwMCBmb2N1czpiZy13aGl0ZSBmb2N1czpyaW5nLTMgZm9jdXM6cmluZy1hbWJlci0xMDBcIj5cbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBbbmdWYWx1ZV09XCJudWxsXCI+U2VsZXppb25hIHVuIGFwcGFydGFtZW50b+KApjwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICBAZm9yIChhcGFydG1lbnQgb2YgYXZhaWxhYmxlUGxhbnRzKCk7IHRyYWNrIGFwYXJ0bWVudC5pZCkge1xuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIFtuZ1ZhbHVlXT1cImFwYXJ0bWVudC5pZFwiPnt7IGFwYXJ0bWVudC5uYW1lIH19PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInRleHQtWzExcHhdIHRleHQtc2xhdGUtNDAwXCI+Q2FtcG8gb2JibGlnYXRvcmlvLjwvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICBAaWYgKGZvcm0uY29udHJvbHMucGxhbnRJZC50b3VjaGVkICYmIGZvcm0uY29udHJvbHMucGxhbnRJZC5pbnZhbGlkKSB7XG4gICAgICAgICAgICA8cCByb2xlPVwiYWxlcnRcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBpdGVtcy1zdGFydCBnYXAtMiByb3VuZGVkLWxnIGJvcmRlciBib3JkZXItcm9zZS0yMDAgYmctcm9zZS01MCBweC0zIHB5LTIgdGV4dC14cyB0ZXh0LXJvc2UtNzAwXCI+XG4gICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz1cIm10LTAuNSBoLTMuNSB3LTMuNSBzaHJpbmstMFwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCI+XG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIGZpbGwtcnVsZT1cImV2ZW5vZGRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xOCAxMGE4IDggMCAxMS0xNiAwIDggOCAwIDAxMTYgMHptLTcgNGExIDEgMCAxMS0yIDAgMSAxIDAgMDEyIDB6bS0xLTlhMSAxIDAgMDAtMSAxdjRhMSAxIDAgMTAyIDBWNmExIDEgMCAwMC0xLTF6XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsaXAtcnVsZT1cImV2ZW5vZGRcIiAvPlxuICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgIFNlbGV6aW9uYSB1biBhcHBhcnRhbWVudG8uXG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvZm9ybT5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gRm9vdGVyIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWVuZCBnYXAtMiBib3JkZXItdCBib3JkZXItc2xhdGUtMTAwIGJnLXNsYXRlLTUwIHB4LTUgcHktM1wiPlxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwib25DYW5jZWwoKVwiXG4gICAgICAgICAgICBjbGFzcz1cImN1cnNvci1wb2ludGVyIHJvdW5kZWQtbGcgYm9yZGVyIGJvcmRlci1zbGF0ZS0yMDAgYmctd2hpdGUgcHgtNCBweS0yIHRleHQtc20gZm9udC1zZW1pYm9sZCB0ZXh0LXNsYXRlLTcwMCB0cmFuc2l0aW9uIGhvdmVyOmJnLXNsYXRlLTUwXCI+XG4gICAgICAgICAgICBBbm51bGxhXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiAoY2xpY2spPVwib25TdWJtaXQoKVwiIFtkaXNhYmxlZF09XCJmb3JtLmludmFsaWRcIlxuICAgICAgICAgICAgY2xhc3M9XCJpbmxpbmUtZmxleCBjdXJzb3ItcG9pbnRlciBpdGVtcy1jZW50ZXIgZ2FwLTEuNSByb3VuZGVkLWxnIGJvcmRlciBib3JkZXItYW1iZXItMzAwIGJnLWFtYmVyLTMwMCBweC00IHB5LTIgdGV4dC1zbSBmb250LWJvbGQgdGV4dC1zbGF0ZS05NTAgc2hhZG93LXNtIHRyYW5zaXRpb24gaG92ZXI6YmctYW1iZXItMjAwIGRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZCBkaXNhYmxlZDpib3JkZXItc2xhdGUtMzAwIGRpc2FibGVkOmJnLXNsYXRlLTIwMCBkaXNhYmxlZDp0ZXh0LXNsYXRlLTQwMFwiPlxuICAgICAgICAgICAgQXNzZWduYVxuICAgICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cblxuPC9kaWFsb2c+IiwiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgT25Jbml0LCBpbmplY3QsIGlucHV0LCBvdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHR5cGUgeyBVc2VyIH0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS9tb2RlbHMvdXNlci5tb2RlbCc7XG5pbXBvcnQgdHlwZSB7IEFzc2lnbk9wZXJhdG9yRHRvIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3dhcmQtYXBpLmR0byc7XG5pbXBvcnQgdHlwZSB7IFdhcmQgfSBmcm9tICcuLi8uLi9tb2RlbHMvd2FyZC5tb2RlbCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1hc3NpZ24tb3BlcmF0b3ItZGlhbG9nLWNvbXBvbmVudCcsXG4gIGltcG9ydHM6IFtSZWFjdGl2ZUZvcm1zTW9kdWxlXSxcbiAgdGVtcGxhdGVVcmw6ICcuL2Fzc2lnbi1vcGVyYXRvci1kaWFsb2ctY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vYXNzaWduLW9wZXJhdG9yLWRpYWxvZy1jb21wb25lbnQuY3NzJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIEFzc2lnbk9wZXJhdG9yRGlhbG9nQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgcHJpdmF0ZSByZWFkb25seSBmb3JtQnVpbGRlciA9IGluamVjdChGb3JtQnVpbGRlcik7XG5cbiAgcHVibGljIHJlYWRvbmx5IHdhcmRJZCA9IGlucHV0PG51bWJlcj4oMCk7XG4gIHB1YmxpYyByZWFkb25seSBhdmFpbGFibGVXYXJkcyA9IGlucHV0PFdhcmRbXT4oW10pO1xuICBwdWJsaWMgcmVhZG9ubHkgYXZhaWxhYmxlT3BlcmF0b3JzID0gaW5wdXQ8VXNlcltdPihbXSk7XG4gIHB1YmxpYyByZWFkb25seSBzdWJtaXR0ZWQgPSBvdXRwdXQ8QXNzaWduT3BlcmF0b3JEdG8+KCk7XG4gIHB1YmxpYyByZWFkb25seSBjYW5jZWxsZWQgPSBvdXRwdXQ8dm9pZD4oKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgZm9ybSA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuICAgIHVzZXJJZDogdGhpcy5mb3JtQnVpbGRlci5jb250cm9sPG51bWJlciB8IG51bGw+KG51bGwsIHsgdmFsaWRhdG9yczogW1ZhbGlkYXRvcnMucmVxdWlyZWRdIH0pLFxuICB9KTtcblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5mb3JtLnJlc2V0KHsgdXNlcklkOiBudWxsIH0pO1xuICB9XG5cbiAgcHVibGljIG9uU3VibWl0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmZvcm0uaW52YWxpZCkge1xuICAgICAgdGhpcy5mb3JtLm1hcmtBbGxBc1RvdWNoZWQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnN1Ym1pdHRlZC5lbWl0KHsgdXNlcklkOiB0aGlzLmZvcm0uY29udHJvbHMudXNlcklkLnZhbHVlIGFzIG51bWJlciB9KTtcbiAgfVxuXG4gIHB1YmxpYyBvbkNhbmNlbCgpOiB2b2lkIHtcbiAgICB0aGlzLmNhbmNlbGxlZC5lbWl0KCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0T3BlcmF0b3JMYWJlbChvcGVyYXRvcjogVXNlcik6IHN0cmluZyB7XG4gICAgY29uc3QgZnVsbE5hbWUgPSBgJHtvcGVyYXRvci5maXJzdE5hbWV9ICR7b3BlcmF0b3IubGFzdE5hbWV9YC50cmltKCk7XG4gICAgcmV0dXJuIGZ1bGxOYW1lIHx8IG9wZXJhdG9yLnVzZXJuYW1lO1xuICB9XG59XG4iLCI8ZGlhbG9nIG9wZW4gYXJpYS1sYWJlbGxlZGJ5PVwiYXNzaWduLW9wZXJhdG9yLXRpdGxlXCJcbiAgICBjbGFzcz1cImZpeGVkIGluc2V0LTAgei01MCBtLWF1dG8gdy1bOTV2d10gbWF4LXctbWQgb3ZlcmZsb3ctaGlkZGVuIHJvdW5kZWQtMnhsIGJvcmRlciBib3JkZXItc2xhdGUtMjAwIGJnLXdoaXRlIHAtMCBzaGFkb3ctMnhsIGJhY2tkcm9wOmJnLXNsYXRlLTkwMC81MCBmb2N1czpvdXRsaW5lLW5vbmVcIj5cblxuICAgIDwhLS0gSGVhZGVyIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gZ2FwLTMgYm9yZGVyLWIgYm9yZGVyLXNsYXRlLTEwMCBiZy1zbGF0ZS01MCBweC01IHB5LTRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0zXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBoLTggdy04IHNocmluay0wIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkLWxnIGJnLWFtYmVyLTEwMFwiPlxuICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9XCJoLTQgdy00IHRleHQtYW1iZXItNzAwXCIgZmlsbD1cIm5vbmVcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgc3Ryb2tlLXdpZHRoPVwiMlwiXG4gICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiPlxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xOSA3LjV2M20wIDB2M20wLTNoM20tMyAwaC0zbS0yLjI1LTQuMTI1YTMuMzc1IDMuMzc1IDAgMTEtNi43NSAwIDMuMzc1IDMuMzc1IDAgMDE2Ljc1IDB6TTQgMTkuMjM1di0uMTFhNi4zNzUgNi4zNzUgMCAwMTEyLjc1IDB2LjEwOUExMi4zMTggMTIuMzE4IDAgMDExMC4zNzQgMjFjLTIuMzMxIDAtNC41MTItLjY0NS02LjM3NC0xLjc2NnpcIiAvPlxuICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxoMiBpZD1cImFzc2lnbi1vcGVyYXRvci10aXRsZVwiIGNsYXNzPVwidGV4dC1zbSBmb250LWJvbGQgdGV4dC1zbGF0ZS05MDBcIlxuICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImZvbnQtZmFtaWx5OidTeW5lJyxzYW5zLXNlcmlmXCI+XG4gICAgICAgICAgICAgICAgICAgIEFzc2VnbmEgb3BlcmF0b3JlIHNhbml0YXJpb1xuICAgICAgICAgICAgICAgIDwvaDI+XG4gICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LXhzIHRleHQtc2xhdGUtNTAwXCI+U2VsZXppb25hIHVuIG9wZXJhdG9yZSBkYWxsJ2VsZW5jbyBkaXNwb25pYmlsZS48L3A+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJvbkNhbmNlbCgpXCIgYXJpYS1sYWJlbD1cIkNoaXVkaVwiXG4gICAgICAgICAgICBjbGFzcz1cImZsZXggaC03IHctNyBjdXJzb3ItcG9pbnRlciBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZC1sZyB0ZXh0LXNsYXRlLTQwMCB0cmFuc2l0aW9uIGhvdmVyOmJnLXNsYXRlLTEwMCBob3Zlcjp0ZXh0LXNsYXRlLTYwMFwiPlxuICAgICAgICAgICAgPHN2ZyBjbGFzcz1cImgtNCB3LTRcIiBmaWxsPVwibm9uZVwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCI+XG4gICAgICAgICAgICAgICAgPHBhdGggc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgZD1cIk02IDE4TDE4IDZNNiA2bDEyIDEyXCIgLz5cbiAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gQm9keSAtLT5cbiAgICA8ZGl2IGNsYXNzPVwicHgtNSBweS01XCI+XG5cbiAgICAgICAgPCEtLSBXYXJkIGNvbnRleHQgcGlsbCAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTQgZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgcm91bmRlZC1sZyBiZy1zbGF0ZS01MCBweC0zIHB5LTIuNSB0ZXh0LXhzIHRleHQtc2xhdGUtNTAwXCI+XG4gICAgICAgICAgICA8c3ZnIGNsYXNzPVwiaC0zLjUgdy0zLjUgc2hyaW5rLTBcIiBmaWxsPVwibm9uZVwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBzdHJva2Utd2lkdGg9XCIyXCJcbiAgICAgICAgICAgICAgICBzdHJva2U9XCJjdXJyZW50Q29sb3JcIj5cbiAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBkPVwiTTIuMjUgMjFoMTkuNW0tMTgtMTh2MThtMTAuNS0xOHYxOG02LTEzLjVWMjFcIiAvPlxuICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICBSZXBhcnRvOiA8c3BhbiBjbGFzcz1cImZvbnQtc2VtaWJvbGQgdGV4dC1zbGF0ZS03MDBcIj57eyB3YXJkSWQoKSB9fTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtXCIgKG5nU3VibWl0KT1cIm9uU3VibWl0KClcIiBjbGFzcz1cInNwYWNlLXktM1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNwYWNlLXktMVwiPlxuICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJvcGVyYXRvci1pZFwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEgdGV4dC14cyBmb250LXNlbWlib2xkIHVwcGVyY2FzZSB0cmFja2luZy13aWRlIHRleHQtc2xhdGUtNTAwXCI+XG4gICAgICAgICAgICAgICAgICAgIE9wZXJhdG9yZSA8c3BhbiBjbGFzcz1cInRleHQtcm9zZS01MDBcIj4qPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPHNlbGVjdCBpZD1cIm9wZXJhdG9yLWlkXCIgZm9ybUNvbnRyb2xOYW1lPVwidXNlcklkXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ3LWZ1bGwgcm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLXNsYXRlLTIwMCBiZy1zbGF0ZS01MCBweC0zIHB5LTIuNSB0ZXh0LXNtIHRleHQtc2xhdGUtOTAwIG91dGxpbmUtbm9uZSB0cmFuc2l0aW9uIGhvdmVyOmJvcmRlci1zbGF0ZS0zMDAgZm9jdXM6Ym9yZGVyLWFtYmVyLTMwMCBmb2N1czpiZy13aGl0ZSBmb2N1czpyaW5nLTMgZm9jdXM6cmluZy1hbWJlci0xMDBcIj5cbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBbbmdWYWx1ZV09XCJudWxsXCI+U2VsZXppb25hIHVuIG9wZXJhdG9yZeKApjwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICBAZm9yIChvcGVyYXRvciBvZiBhdmFpbGFibGVPcGVyYXRvcnMoKTsgdHJhY2sgb3BlcmF0b3IuaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBbbmdWYWx1ZV09XCJvcGVyYXRvci5pZFwiPnt7IGdldE9wZXJhdG9yTGFiZWwob3BlcmF0b3IpIH19PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInRleHQtWzExcHhdIHRleHQtc2xhdGUtNDAwXCI+Q2FtcG8gb2JibGlnYXRvcmlvLjwvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICBAaWYgKGZvcm0uY29udHJvbHMudXNlcklkLnRvdWNoZWQgJiYgZm9ybS5jb250cm9scy51c2VySWQuaW52YWxpZCkge1xuICAgICAgICAgICAgPHAgcm9sZT1cImFsZXJ0XCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZsZXggaXRlbXMtc3RhcnQgZ2FwLTIgcm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLXJvc2UtMjAwIGJnLXJvc2UtNTAgcHgtMyBweS0yIHRleHQteHMgdGV4dC1yb3NlLTcwMFwiPlxuICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9XCJtdC0wLjUgaC0zLjUgdy0zLjUgc2hyaW5rLTBcIiBmaWxsPVwiY3VycmVudENvbG9yXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiPlxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBmaWxsLXJ1bGU9XCJldmVub2RkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTggMTBhOCA4IDAgMTEtMTYgMCA4IDggMCAwMTE2IDB6bS03IDRhMSAxIDAgMTEtMiAwIDEgMSAwIDAxMiAwem0tMS05YTEgMSAwIDAwLTEgMXY0YTEgMSAwIDEwMiAwVjZhMSAxIDAgMDAtMS0xelwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGlwLXJ1bGU9XCJldmVub2RkXCIgLz5cbiAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICBTZWxlemlvbmEgdW4gb3BlcmF0b3JlLlxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgfVxuICAgICAgICA8L2Zvcm0+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIEZvb3RlciAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1lbmQgZ2FwLTIgYm9yZGVyLXQgYm9yZGVyLXNsYXRlLTEwMCBiZy1zbGF0ZS01MCBweC01IHB5LTNcIj5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cIm9uQ2FuY2VsKClcIlxuICAgICAgICAgICAgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciByb3VuZGVkLWxnIGJvcmRlciBib3JkZXItc2xhdGUtMjAwIGJnLXdoaXRlIHB4LTQgcHktMiB0ZXh0LXNtIGZvbnQtc2VtaWJvbGQgdGV4dC1zbGF0ZS03MDAgdHJhbnNpdGlvbiBob3ZlcjpiZy1zbGF0ZS01MFwiPlxuICAgICAgICAgICAgQW5udWxsYVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgKGNsaWNrKT1cIm9uU3VibWl0KClcIiBbZGlzYWJsZWRdPVwiZm9ybS5pbnZhbGlkXCJcbiAgICAgICAgICAgIGNsYXNzPVwiaW5saW5lLWZsZXggY3Vyc29yLXBvaW50ZXIgaXRlbXMtY2VudGVyIGdhcC0xLjUgcm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLWFtYmVyLTMwMCBiZy1hbWJlci0zMDAgcHgtNCBweS0yIHRleHQtc20gZm9udC1ib2xkIHRleHQtc2xhdGUtOTUwIHNoYWRvdy1zbSB0cmFuc2l0aW9uIGhvdmVyOmJnLWFtYmVyLTIwMCBkaXNhYmxlZDpjdXJzb3Itbm90LWFsbG93ZWQgZGlzYWJsZWQ6Ym9yZGVyLXNsYXRlLTMwMCBkaXNhYmxlZDpiZy1zbGF0ZS0yMDAgZGlzYWJsZWQ6dGV4dC1zbGF0ZS00MDBcIj5cbiAgICAgICAgICAgIEFzc2VnbmFcbiAgICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG5cbjwvZGlhbG9nPiIsImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGNvbXB1dGVkLCBlZmZlY3QsIGluamVjdCwgaW5wdXQsIG91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgdHlwZSB7IENyZWF0ZVdhcmREdG8gfSBmcm9tICcuLi8uLi9tb2RlbHMvd2FyZC1hcGkuZHRvJztcbmltcG9ydCB0eXBlIHsgV2FyZCB9IGZyb20gJy4uLy4uL21vZGVscy93YXJkLm1vZGVsJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLXdhcmQtZm9ybS1kaWFsb2ctY29tcG9uZW50JyxcbiAgaW1wb3J0czogW1JlYWN0aXZlRm9ybXNNb2R1bGVdLFxuICB0ZW1wbGF0ZVVybDogJy4vd2FyZC1mb3JtLWRpYWxvZy1jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi93YXJkLWZvcm0tZGlhbG9nLWNvbXBvbmVudC5jc3MnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgV2FyZEZvcm1EaWFsb2dDb21wb25lbnQge1xuICBwcml2YXRlIHJlYWRvbmx5IGZvcm1CdWlsZGVyID0gaW5qZWN0KEZvcm1CdWlsZGVyKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgd2FyZCA9IGlucHV0PFdhcmQgfCBudWxsPihudWxsKTtcbiAgcHVibGljIHJlYWRvbmx5IHN1Ym1pdHRlZCA9IG91dHB1dDxDcmVhdGVXYXJkRHRvPigpO1xuICBwdWJsaWMgcmVhZG9ubHkgY2FuY2VsbGVkID0gb3V0cHV0PHZvaWQ+KCk7XG5cbiAgcHVibGljIHJlYWRvbmx5IGZvcm0gPSB0aGlzLmZvcm1CdWlsZGVyLm5vbk51bGxhYmxlLmdyb3VwKHtcbiAgICBuYW1lOiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1heExlbmd0aCgxMDApXV0sXG4gIH0pO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgc3luY0Zvcm1XaXRoV2FyZCA9IGVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3Qgd2FyZCA9IHRoaXMud2FyZCgpO1xuICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHsgbmFtZTogd2FyZD8ubmFtZSA/PyAnJyB9LCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gIH0pO1xuXG4gIHB1YmxpYyByZWFkb25seSBpc0VkaXRNb2RlID0gY29tcHV0ZWQoKCkgPT4gdGhpcy53YXJkKCkgIT09IG51bGwpO1xuXG4gIHB1YmxpYyBvblN1Ym1pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5mb3JtLmludmFsaWQpIHtcbiAgICAgIHRoaXMuZm9ybS5tYXJrQWxsQXNUb3VjaGVkKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZHRvOiBDcmVhdGVXYXJkRHRvID0geyBuYW1lOiB0aGlzLmZvcm0uY29udHJvbHMubmFtZS52YWx1ZS50cmltKCkgfTtcbiAgICB0aGlzLnN1Ym1pdHRlZC5lbWl0KGR0byk7XG4gIH1cblxuICBwdWJsaWMgb25DYW5jZWwoKTogdm9pZCB7XG4gICAgdGhpcy5jYW5jZWxsZWQuZW1pdCgpO1xuICB9XG59XG4iLCI8ZGlhbG9nIG9wZW4gYXJpYS1sYWJlbGxlZGJ5PVwid2FyZC1kaWFsb2ctdGl0bGVcIlxuICAgIGNsYXNzPVwiZml4ZWQgaW5zZXQtMCB6LTEwIG0tYXV0byB3LVs5NXZ3XSBtYXgtdy1tZCBvdmVyZmxvdy1oaWRkZW4gcm91bmRlZC0yeGwgYm9yZGVyIGJvcmRlci1zbGF0ZS0yMDAgYmctd2hpdGUgcC0wIHNoYWRvdy0yeGwgYmFja2Ryb3A6Ymctc2xhdGUtOTAwLzUwIGZvY3VzOm91dGxpbmUtbm9uZVwiPlxuXG4gICAgPCEtLSBIZWFkZXIgLS0+XG4gICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtMyBib3JkZXItYiBib3JkZXItc2xhdGUtMTAwIGJnLXNsYXRlLTUwIHB4LTUgcHktNFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTNcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGgtOCB3LTggc2hyaW5rLTAgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHJvdW5kZWQtbGdcIlxuICAgICAgICAgICAgICAgIFtjbGFzc109XCInYmctYW1iZXItMTAwJ1wiPlxuICAgICAgICAgICAgICAgIDxzdmcgW2NsYXNzXT1cIidoLTQgdy00IHRleHQtYW1iZXItNzAwJ1wiIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAyNCAyNFwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIj5cbiAgICAgICAgICAgICAgICAgICAgQGlmIChpc0VkaXRNb2RlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgPHBhdGggc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTYuODYyIDQuNDg3bDEuNjg3LTEuNjg4YTEuODc1IDEuODc1IDAgMTEyLjY1MiAyLjY1MkwxMC41ODIgMTYuMDdhNC41IDQuNSAwIDAxLTEuODk3IDEuMTNMNiAxOGwuOC0yLjY4NWE0LjUgNC41IDAgMDExLjEzLTEuODk3bDguOTMyLTguOTMxem0wIDBMMTkuNSA3LjEyNU0xOCAxNHY0Ljc1QTIuMjUgMi4yNSAwIDAxMTUuNzUgMjFINS4yNUEyLjI1IDIuMjUgMCAwMTMgMTguNzVWOC4yNUEyLjI1IDIuMjUgMCAwMTUuMjUgNkgxMFwiIC8+XG4gICAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBkPVwiTTEyIDQuNXYxNW03LjUtNy41aC0xNVwiIC8+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8aDIgaWQ9XCJ3YXJkLWRpYWxvZy10aXRsZVwiIGNsYXNzPVwidGV4dC1zbSBmb250LWJvbGQgdGV4dC1zbGF0ZS05MDBcIlxuICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImZvbnQtZmFtaWx5OidTeW5lJyxzYW5zLXNlcmlmXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IGlzRWRpdE1vZGUoKSA/ICdNb2RpZmljYSByZXBhcnRvJyA6ICdDcmVhIHJlcGFydG8nIH19XG4gICAgICAgICAgICAgICAgPC9oMj5cbiAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInRleHQteHMgdGV4dC1zbGF0ZS01MDBcIj5Db21waWxhIGlsIG5vbWUgZGVsIHJlcGFydG8gZSBjb25mZXJtYS48L3A+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJvbkNhbmNlbCgpXCIgYXJpYS1sYWJlbD1cIkNoaXVkaVwiXG4gICAgICAgICAgICBjbGFzcz1cImZsZXggaC03IHctNyBjdXJzb3ItcG9pbnRlciBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZC1sZyB0ZXh0LXNsYXRlLTQwMCB0cmFuc2l0aW9uIGhvdmVyOmJnLXNsYXRlLTEwMCBob3Zlcjp0ZXh0LXNsYXRlLTYwMFwiPlxuICAgICAgICAgICAgPHN2ZyBjbGFzcz1cImgtNCB3LTRcIiBmaWxsPVwibm9uZVwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCI+XG4gICAgICAgICAgICAgICAgPHBhdGggc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgZD1cIk02IDE4TDE4IDZNNiA2bDEyIDEyXCIgLz5cbiAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gRm9ybSAtLT5cbiAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cImZvcm1cIiAobmdTdWJtaXQpPVwib25TdWJtaXQoKVwiIGNsYXNzPVwicHgtNSBweS01XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzcGFjZS15LTFcIj5cbiAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJ3YXJkLW5hbWVcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEgdGV4dC14cyBmb250LXNlbWlib2xkIHVwcGVyY2FzZSB0cmFja2luZy13aWRlIHRleHQtc2xhdGUtNTAwXCI+XG4gICAgICAgICAgICAgICAgTm9tZSByZXBhcnRvIDxzcGFuIGNsYXNzPVwidGV4dC1yb3NlLTUwMFwiPio8L3NwYW4+XG4gICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgPGlucHV0IGlkPVwid2FyZC1uYW1lXCIgdHlwZT1cInRleHRcIiBmb3JtQ29udHJvbE5hbWU9XCJuYW1lXCIgbWF4bGVuZ3RoPVwiMTAwXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInctZnVsbCByb3VuZGVkLWxnIGJvcmRlciBib3JkZXItc2xhdGUtMjAwIGJnLXNsYXRlLTUwIHB4LTMgcHktMi41IHRleHQtc20gdGV4dC1zbGF0ZS05MDAgb3V0bGluZS1ub25lIHRyYW5zaXRpb24tYWxsIHBsYWNlaG9sZGVyOnRleHQtc2xhdGUtNDAwIGhvdmVyOmJvcmRlci1zbGF0ZS0zMDAgZm9jdXM6Ym9yZGVyLWFtYmVyLTMwMCBmb2N1czpiZy13aGl0ZSBmb2N1czpyaW5nLTMgZm9jdXM6cmluZy1hbWJlci0xMDBcIlxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRXMuIFJlcGFydG8gYXV0b3N1ZmZpY2llbnRpXCIgLz5cbiAgICAgICAgICAgIDxwIGNsYXNzPVwidGV4dC1bMTFweF0gdGV4dC1zbGF0ZS00MDBcIj5DYW1wbyBvYmJsaWdhdG9yaW8uIE1hc3NpbW8gMTAwIGNhcmF0dGVyaS48L3A+XG5cbiAgICAgICAgICAgIEBpZiAoZm9ybS5jb250cm9scy5uYW1lLnRvdWNoZWQgJiYgZm9ybS5jb250cm9scy5uYW1lLmludmFsaWQpIHtcbiAgICAgICAgICAgIDxwIHJvbGU9XCJhbGVydFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGl0ZW1zLXN0YXJ0IGdhcC0yIHJvdW5kZWQtbGcgYm9yZGVyIGJvcmRlci1yb3NlLTIwMCBiZy1yb3NlLTUwIHB4LTMgcHktMiB0ZXh0LXhzIHRleHQtcm9zZS03MDBcIj5cbiAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPVwibXQtMC41IGgtMy41IHctMy41IHNocmluay0wXCIgZmlsbD1cImN1cnJlbnRDb2xvclwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIj5cbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbC1ydWxlPVwiZXZlbm9kZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTE4IDEwYTggOCAwIDExLTE2IDAgOCA4IDAgMDExNiAwem0tNyA0YTEgMSAwIDExLTIgMCAxIDEgMCAwMTIgMHptLTEtOWExIDEgMCAwMC0xIDF2NGExIDEgMCAxMDIgMFY2YTEgMSAwIDAwLTEtMXpcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xpcC1ydWxlPVwiZXZlbm9kZFwiIC8+XG4gICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgICAgICAgIEBpZiAoZm9ybS5jb250cm9scy5uYW1lLmVycm9ycz8uWydyZXF1aXJlZCddKSB7IElsIG5vbWUgcmVwYXJ0byDDqCBvYmJsaWdhdG9yaW8uIH1cbiAgICAgICAgICAgICAgICAgICAgQGlmIChmb3JtLmNvbnRyb2xzLm5hbWUuZXJyb3JzPy5bJ21heGxlbmd0aCddKSB7IElsIG5vbWUgbm9uIHB1w7Igc3VwZXJhcmUgMTAwIGNhcmF0dGVyaS4gfVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgPC9mb3JtPlxuXG4gICAgPCEtLSBGb290ZXIgLS0+XG4gICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktZW5kIGdhcC0yIGJvcmRlci10IGJvcmRlci1zbGF0ZS0xMDAgYmctc2xhdGUtNTAgcHgtNSBweS0zXCI+XG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJvbkNhbmNlbCgpXCJcbiAgICAgICAgICAgIGNsYXNzPVwicm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLXNsYXRlLTIwMCBiZy13aGl0ZSBweC00IHB5LTIgdGV4dC1zbSBmb250LXNlbWlib2xkIHRleHQtc2xhdGUtNzAwIHRyYW5zaXRpb24gaG92ZXI6Ymctc2xhdGUtNTBcIj5cbiAgICAgICAgICAgIEFubnVsbGFcbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIChjbGljayk9XCJvblN1Ym1pdCgpXCIgW2Rpc2FibGVkXT1cImZvcm0uaW52YWxpZFwiXG4gICAgICAgICAgICBbY2xhc3NdPVwiaXNFZGl0TW9kZSgpXG4gICAgICAgID8gJ2lubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBnYXAtMS41IHJvdW5kZWQtbGcgYm9yZGVyIGJvcmRlci1hbWJlci0zMDAgYmctYW1iZXItMzAwIHB4LTQgcHktMiB0ZXh0LXNtIGZvbnQtc2VtaWJvbGQgdGV4dC1zbGF0ZS05MDAgc2hhZG93LXNtIHRyYW5zaXRpb24gaG92ZXI6YmctYW1iZXItMjAwIGRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZCBkaXNhYmxlZDpib3JkZXItc2xhdGUtMzAwIGRpc2FibGVkOmJnLXNsYXRlLTIwMCBkaXNhYmxlZDp0ZXh0LXNsYXRlLTQwMCdcbiAgICAgICAgOiAnaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGdhcC0xLjUgcm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLWFtYmVyLTMwMCBiZy1hbWJlci0zMDAgcHgtNCBweS0yIHRleHQtc20gZm9udC1zZW1pYm9sZCB0ZXh0LXNsYXRlLTkwMCBzaGFkb3ctc20gdHJhbnNpdGlvbiBob3ZlcjpiZy1hbWJlci0yMDAgZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkIGRpc2FibGVkOmJvcmRlci1zbGF0ZS0zMDAgZGlzYWJsZWQ6Ymctc2xhdGUtMjAwIGRpc2FibGVkOnRleHQtc2xhdGUtNDAwJ1wiPlxuICAgICAgICAgICAge3sgaXNFZGl0TW9kZSgpID8gJ1NhbHZhIG1vZGlmaWNoZScgOiAnQ3JlYSByZXBhcnRvJyB9fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cblxuPC9kaWFsb2c+IiwiaW1wb3J0IHsgQXN5bmNQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIE9uRGVzdHJveSwgT25Jbml0LCBjb21wdXRlZCwgaW5qZWN0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHR5cGUgeyBQbGFudCB9IGZyb20gJy4uLy4uL21vZGVscy9wbGFudC5tb2RlbCc7XG5pbXBvcnQgdHlwZSB7IEFzc2lnblBsYW50RHRvLCBBc3NpZ25PcGVyYXRvckR0bywgQ3JlYXRlV2FyZER0bywgVXBkYXRlV2FyZER0byB9IGZyb20gJy4uLy4uL21vZGVscy93YXJkLWFwaS5kdG8nO1xuaW1wb3J0IHR5cGUgeyBSZW1vdmVQbGFudEV2ZW50LCBSZW1vdmVPcGVyYXRvckV2ZW50IH0gZnJvbSAnLi4vLi4vbW9kZWxzL3dhcmQtbWFuYWdlbWVudC5ldmVudHMnO1xuaW1wb3J0IHR5cGUgeyBXYXJkIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3dhcmQubW9kZWwnO1xuaW1wb3J0IHR5cGUgeyBVc2VyIH0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS9tb2RlbHMvdXNlci5tb2RlbCc7XG5pbXBvcnQgeyBDb25maXJtRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vLi4vc2hhcmVkL2NvbXBvbmVudHMvY29uZmlybS1kaWFsb2cvY29uZmlybS1kaWFsb2cuY29tcG9uZW50JztcbmltcG9ydCB7IFdhcmRNYW5hZ2VtZW50U3RvcmUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy93YXJkLW1hbmFnZW1lbnQuc3RvcmUnO1xuaW1wb3J0IHsgQXNzaWduV2FyZERpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4uL2Fzc2lnbi13YXJkLWRpYWxvZy1jb21wb25lbnQvYXNzaWduLXdhcmQtZGlhbG9nLWNvbXBvbmVudCc7XG5pbXBvcnQgeyBBc3NpZ25PcGVyYXRvckRpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4uL2Fzc2lnbi1vcGVyYXRvci1kaWFsb2ctY29tcG9uZW50L2Fzc2lnbi1vcGVyYXRvci1kaWFsb2ctY29tcG9uZW50JztcbmltcG9ydCB7IFdhcmRGb3JtRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vd2FyZC1mb3JtLWRpYWxvZy1jb21wb25lbnQvd2FyZC1mb3JtLWRpYWxvZy1jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtd2FyZC1tYW5hZ2VtZW50LXBhZ2UtY29tcG9uZW50JyxcbiAgaW1wb3J0czogW1xuICAgIEFzeW5jUGlwZSxcbiAgICBXYXJkRm9ybURpYWxvZ0NvbXBvbmVudCxcbiAgICBBc3NpZ25PcGVyYXRvckRpYWxvZ0NvbXBvbmVudCxcbiAgICBBc3NpZ25XYXJkRGlhbG9nQ29tcG9uZW50LFxuICAgIENvbmZpcm1EaWFsb2dDb21wb25lbnQsXG4gIF0sXG4gIHRlbXBsYXRlVXJsOiAnLi93YXJkLW1hbmFnZW1lbnQtcGFnZS1jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi93YXJkLW1hbmFnZW1lbnQtcGFnZS1jb21wb25lbnQuY3NzJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFdhcmRNYW5hZ2VtZW50UGFnZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSByZWFkb25seSBzdG9yZSA9IGluamVjdChXYXJkTWFuYWdlbWVudFN0b3JlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgcHVibGljIHJlYWRvbmx5IHdhcmRzJCA9IHRoaXMuc3RvcmUud2FyZHMkO1xuICBwdWJsaWMgcmVhZG9ubHkgaXNMb2FkaW5nJCA9IHRoaXMuc3RvcmUuaXNMb2FkaW5nJDtcbiAgcHVibGljIHJlYWRvbmx5IGVycm9yJCA9IHRoaXMuc3RvcmUuZXJyb3IkO1xuXG4gIHB1YmxpYyByZWFkb25seSBzbmFja2Jhck1lc3NhZ2UgPSBzaWduYWw8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG4gIHB1YmxpYyByZWFkb25seSB3YXJkRGlhbG9nTW9kZSA9IHNpZ25hbDwnY2xvc2VkJyB8ICdjcmVhdGUnIHwgJ2VkaXQnPignY2xvc2VkJyk7XG4gIHB1YmxpYyByZWFkb25seSBzZWxlY3RlZFdhcmRJZCA9IHNpZ25hbDxudW1iZXIgfCBudWxsPihudWxsKTtcbiAgcHVibGljIHJlYWRvbmx5IHNlbGVjdGVkQXBhcnRtZW50SWQgPSBzaWduYWw8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG4gIHB1YmxpYyByZWFkb25seSBtb2JpbGVTdGVwID0gc2lnbmFsPCd3YXJkcycgfCAnYXBhcnRtZW50cycgfCAnb3BlcmF0b3JzJz4oJ3dhcmRzJyk7XG4gIHB1YmxpYyByZWFkb25seSBvcGVyYXRvcldhcmRJZCA9IHNpZ25hbDxudW1iZXIgfCBudWxsPihudWxsKTtcbiAgcHVibGljIHJlYWRvbmx5IGF2YWlsYWJsZU9wZXJhdG9yc0Zyb21GZXRjaCA9IHNpZ25hbDxVc2VyW10gfCBudWxsPihudWxsKTtcbiAgcHVibGljIHJlYWRvbmx5IGlzTG9hZGluZ0F2YWlsYWJsZU9wZXJhdG9ycyA9IHNpZ25hbChmYWxzZSk7XG4gIHB1YmxpYyByZWFkb25seSBwbGFudFdhcmRJZCA9IHNpZ25hbDxudW1iZXIgfCBudWxsPihudWxsKTtcbiAgcHVibGljIHJlYWRvbmx5IGF2YWlsYWJsZVBsYW50c0Zyb21GZXRjaCA9IHNpZ25hbDxQbGFudFtdIHwgbnVsbD4obnVsbCk7XG4gIHB1YmxpYyByZWFkb25seSBpc0xvYWRpbmdBdmFpbGFibGVQbGFudHMgPSBzaWduYWwoZmFsc2UpO1xuICBwdWJsaWMgcmVhZG9ubHkgY29uZmlybVN0YXRlID0gc2lnbmFsPFxuICAgIHwgeyBraW5kOiAnZGVsZXRlLXdhcmQnOyB3YXJkSWQ6IG51bWJlciB9XG4gICAgfCB7IGtpbmQ6ICdyZW1vdmUtb3BlcmF0b3InOyB3YXJkSWQ6IG51bWJlcjsgdXNlcklkOiBudW1iZXIgfVxuICAgIHwgeyBraW5kOiAncmVtb3ZlLXBsYW50Jzsgd2FyZElkOiBudW1iZXI7IHBsYW50SWQ6IHN0cmluZyB9XG4gICAgfCBudWxsXG4gID4obnVsbCk7XG5cbiAgcHVibGljIHJlYWRvbmx5IHdhcmRzU25hcHNob3QgPSBzaWduYWw8V2FyZFtdPihbXSk7XG4gIHB1YmxpYyByZWFkb25seSBzZWxlY3RlZFdhcmQgPSBjb21wdXRlZDxXYXJkIHwgbnVsbD4oKCkgPT4ge1xuICAgIGNvbnN0IHdhcmRJZCA9IHRoaXMuc2VsZWN0ZWRXYXJkSWQoKTtcbiAgICBpZiAoIXdhcmRJZCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMud2FyZHNTbmFwc2hvdCgpLmZpbmQoKHdhcmQpID0+IHdhcmQuaWQgPT09IHdhcmRJZCkgPz8gbnVsbDtcbiAgfSk7XG5cbiAgcHVibGljIHJlYWRvbmx5IHNlbGVjdGVkQXBhcnRtZW50ID0gY29tcHV0ZWQ8UGxhbnQgfCBudWxsPigoKSA9PiB7XG4gICAgY29uc3QgYXBhcnRtZW50SWQgPSB0aGlzLnNlbGVjdGVkQXBhcnRtZW50SWQoKTtcbiAgICBjb25zdCB3YXJkID0gdGhpcy5zZWxlY3RlZFdhcmQoKTtcbiAgICBpZiAoIWFwYXJ0bWVudElkIHx8ICF3YXJkKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gd2FyZC5hcGFydG1lbnRzLmZpbmQoKGFwYXJ0bWVudCkgPT4gYXBhcnRtZW50LmlkID09PSBhcGFydG1lbnRJZCkgPz8gbnVsbDtcbiAgfSk7XG5cbiAgcHVibGljIHJlYWRvbmx5IHdhcmREaWFsb2dWYWx1ZSA9IGNvbXB1dGVkPFdhcmQgfCBudWxsPigoKSA9PiB7XG4gICAgaWYgKHRoaXMud2FyZERpYWxvZ01vZGUoKSAhPT0gJ2VkaXQnKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZFdhcmQoKTtcbiAgfSk7XG5cbiAgcHVibGljIHJlYWRvbmx5IGF2YWlsYWJsZVBsYW50cyA9IGNvbXB1dGVkPFBsYW50W10+KCgpID0+IHtcbiAgICBjb25zdCBmZXRjaGVkUGxhbnRzID0gdGhpcy5hdmFpbGFibGVQbGFudHNGcm9tRmV0Y2goKTtcbiAgICBpZiAoZmV0Y2hlZFBsYW50cyAhPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGZldGNoZWRQbGFudHM7XG4gICAgfVxuXG4gICAgLy8gV2l0aG91dCBiYWNrZW5kIHJlc3BvbnNlLCB3ZSBjYW5ub3QgcmVsaWFibHkgaW5mZXIgZ2xvYmFsIHVuYXNzaWduZWQgcGxhbnRzLlxuICAgIHJldHVybiBbXTtcbiAgfSk7XG5cbiAgcHVibGljIHJlYWRvbmx5IGF2YWlsYWJsZU9wZXJhdG9ycyA9IGNvbXB1dGVkPFVzZXJbXT4oKCkgPT4ge1xuICAgIGNvbnN0IGZldGNoZWRPcGVyYXRvcnMgPSB0aGlzLmF2YWlsYWJsZU9wZXJhdG9yc0Zyb21GZXRjaCgpO1xuICAgIGlmIChmZXRjaGVkT3BlcmF0b3JzICE9PSBudWxsKSB7XG4gICAgICByZXR1cm4gZmV0Y2hlZE9wZXJhdG9ycztcbiAgICB9XG5cbiAgICAvLyBXaXRob3V0IGJhY2tlbmQgcmVzcG9uc2UsIHdlIGNhbm5vdCByZWxpYWJseSBpbmZlciBnbG9iYWwgdW5hc3NpZ25lZCBvcGVyYXRvcnMuXG4gICAgcmV0dXJuIFtdO1xuICB9KTtcblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5zdG9yZS5sb2FkV2FyZHMoKTtcblxuICAgIHRoaXMud2FyZHMkLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKHdhcmRzKSA9PiB7XG4gICAgICB0aGlzLndhcmRzU25hcHNob3Quc2V0KHdhcmRzKTtcblxuICAgICAgaWYgKHdhcmRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkV2FyZElkLnNldChudWxsKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEFwYXJ0bWVudElkLnNldChudWxsKTtcbiAgICAgICAgdGhpcy5tb2JpbGVTdGVwLnNldCgnd2FyZHMnKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzZWxlY3RlZFdhcmRJZCA9IHRoaXMuc2VsZWN0ZWRXYXJkSWQoKTtcbiAgICAgIGNvbnN0IHNlbGVjdGVkV2FyZEV4aXN0cyA9IHNlbGVjdGVkV2FyZElkICE9PSBudWxsICYmIHdhcmRzLnNvbWUoKHdhcmQpID0+IHdhcmQuaWQgPT09IHNlbGVjdGVkV2FyZElkKTtcblxuICAgICAgaWYgKCFzZWxlY3RlZFdhcmRFeGlzdHMpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFdhcmRJZC5zZXQod2FyZHNbMF0uaWQpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkQXBhcnRtZW50SWQuc2V0KG51bGwpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzZWxlY3RlZEFwYXJ0bWVudElkID0gdGhpcy5zZWxlY3RlZEFwYXJ0bWVudElkKCk7XG4gICAgICBpZiAoc2VsZWN0ZWRBcGFydG1lbnRJZCAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCBhY3RpdmVXYXJkID0gd2FyZHMuZmluZCgod2FyZCkgPT4gd2FyZC5pZCA9PT0gdGhpcy5zZWxlY3RlZFdhcmRJZCgpKTtcbiAgICAgICAgY29uc3QgYXBhcnRtZW50U3RpbGxFeGlzdHMgPSBhY3RpdmVXYXJkPy5hcGFydG1lbnRzLnNvbWUoKGFwYXJ0bWVudCkgPT4gYXBhcnRtZW50LmlkID09PSBzZWxlY3RlZEFwYXJ0bWVudElkKSA/PyBmYWxzZTtcbiAgICAgICAgaWYgKCFhcGFydG1lbnRTdGlsbEV4aXN0cykge1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRBcGFydG1lbnRJZC5zZXQobnVsbCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuZXJyb3IkLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKG1lc3NhZ2UpID0+IHtcbiAgICAgIHRoaXMuc25hY2tiYXJNZXNzYWdlLnNldChtZXNzYWdlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gIH1cblxuICBwdWJsaWMgZGlzbWlzc1NuYWNrYmFyKCk6IHZvaWQge1xuICAgIHRoaXMuc25hY2tiYXJNZXNzYWdlLnNldChudWxsKTtcbiAgfVxuXG4gIHB1YmxpYyBzZWxlY3RXYXJkKHdhcmRJZDogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRXYXJkSWQoKSA9PT0gd2FyZElkKSB7XG4gICAgICB0aGlzLm1vYmlsZVN0ZXAuc2V0KCdhcGFydG1lbnRzJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zZWxlY3RlZFdhcmRJZC5zZXQod2FyZElkKTtcbiAgICB0aGlzLnNlbGVjdGVkQXBhcnRtZW50SWQuc2V0KG51bGwpO1xuICAgIHRoaXMubW9iaWxlU3RlcC5zZXQoJ2FwYXJ0bWVudHMnKTtcbiAgfVxuXG4gIHB1YmxpYyBzZWxlY3RBcGFydG1lbnQoYXBhcnRtZW50SWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0ZWRBcGFydG1lbnRJZC5zZXQoYXBhcnRtZW50SWQpO1xuICB9XG5cbiAgcHVibGljIHNob3dXYXJkTGlzdFN0ZXAoKTogdm9pZCB7XG4gICAgdGhpcy5tb2JpbGVTdGVwLnNldCgnd2FyZHMnKTtcbiAgfVxuXG4gIHB1YmxpYyBzaG93QXBhcnRtZW50c1N0ZXAoKTogdm9pZCB7XG4gICAgdGhpcy5tb2JpbGVTdGVwLnNldCgnYXBhcnRtZW50cycpO1xuICB9XG5cbiAgcHVibGljIHNob3dPcGVyYXRvcnNTdGVwKCk6IHZvaWQge1xuICAgIHRoaXMubW9iaWxlU3RlcC5zZXQoJ29wZXJhdG9ycycpO1xuICB9XG5cbiAgcHVibGljIG9uQ3JlYXRlV2FyZCgpOiB2b2lkIHtcbiAgICB0aGlzLndhcmREaWFsb2dNb2RlLnNldCgnY3JlYXRlJyk7XG4gIH1cblxuICBwdWJsaWMgb25DcmVhdGVXYXJkU3VibWl0KGR0bzogQ3JlYXRlV2FyZER0byk6IHZvaWQge1xuICAgIHRoaXMuc3RvcmUuY3JlYXRlV2FyZChkdG8pO1xuICAgIHRoaXMud2FyZERpYWxvZ01vZGUuc2V0KCdjbG9zZWQnKTtcbiAgfVxuXG4gIHB1YmxpYyBvbkVkaXRXYXJkKHdhcmQ6IFdhcmQpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkV2FyZElkLnNldCh3YXJkLmlkKTtcbiAgICB0aGlzLndhcmREaWFsb2dNb2RlLnNldCgnZWRpdCcpO1xuICB9XG5cbiAgcHVibGljIG9uRWRpdFNlbGVjdGVkV2FyZCgpOiB2b2lkIHtcbiAgICBjb25zdCB3YXJkID0gdGhpcy5zZWxlY3RlZFdhcmQoKTtcbiAgICBpZiAoIXdhcmQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLm9uRWRpdFdhcmQod2FyZCk7XG4gIH1cblxuICBwdWJsaWMgb25FZGl0V2FyZFN1Ym1pdChkdG86IFVwZGF0ZVdhcmREdG8pOiB2b2lkIHtcbiAgICBjb25zdCB3YXJkID0gdGhpcy5zZWxlY3RlZFdhcmQoKTtcbiAgICBpZiAoIXdhcmQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnN0b3JlLnVwZGF0ZVdhcmQod2FyZC5pZCwgZHRvKTtcbiAgICB0aGlzLndhcmREaWFsb2dNb2RlLnNldCgnY2xvc2VkJyk7XG4gIH1cblxuICBwdWJsaWMgb25DbG9zZVdhcmREaWFsb2coKTogdm9pZCB7XG4gICAgdGhpcy53YXJkRGlhbG9nTW9kZS5zZXQoJ2Nsb3NlZCcpO1xuICB9XG5cbiAgcHVibGljIG9uRGVsZXRlV2FyZCh3YXJkSWQ6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuY29uZmlybVN0YXRlLnNldCh7IGtpbmQ6ICdkZWxldGUtd2FyZCcsIHdhcmRJZCB9KTtcbiAgfVxuXG4gIHB1YmxpYyBvbkFzc2lnbk9wZXJhdG9yKHdhcmRJZDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5vcGVyYXRvcldhcmRJZC5zZXQod2FyZElkKTtcbiAgICB0aGlzLmF2YWlsYWJsZU9wZXJhdG9yc0Zyb21GZXRjaC5zZXQobnVsbCk7XG4gICAgdGhpcy5pc0xvYWRpbmdBdmFpbGFibGVPcGVyYXRvcnMuc2V0KHRydWUpO1xuXG4gICAgdGhpcy5zdG9yZS5nZXRBdmFpbGFibGVVc2Vyc0ZvcldhcmQod2FyZElkKS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCh1c2VycykgPT4ge1xuICAgICAgdGhpcy5hdmFpbGFibGVPcGVyYXRvcnNGcm9tRmV0Y2guc2V0KHVzZXJzKTtcbiAgICAgIHRoaXMuaXNMb2FkaW5nQXZhaWxhYmxlT3BlcmF0b3JzLnNldChmYWxzZSk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgb25Bc3NpZ25PcGVyYXRvclN1Ym1pdChkdG86IEFzc2lnbk9wZXJhdG9yRHRvKTogdm9pZCB7XG4gICAgY29uc3Qgd2FyZElkID0gdGhpcy5vcGVyYXRvcldhcmRJZCgpO1xuICAgIGlmICghd2FyZElkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zdG9yZS5hc3NpZ25PcGVyYXRvcih3YXJkSWQsIGR0byk7XG4gICAgdGhpcy5vcGVyYXRvcldhcmRJZC5zZXQobnVsbCk7XG4gICAgdGhpcy5hdmFpbGFibGVPcGVyYXRvcnNGcm9tRmV0Y2guc2V0KG51bGwpO1xuICAgIHRoaXMuaXNMb2FkaW5nQXZhaWxhYmxlT3BlcmF0b3JzLnNldChmYWxzZSk7XG4gIH1cblxuICBwdWJsaWMgb25DbG9zZUFzc2lnbk9wZXJhdG9yRGlhbG9nKCk6IHZvaWQge1xuICAgIHRoaXMub3BlcmF0b3JXYXJkSWQuc2V0KG51bGwpO1xuICAgIHRoaXMuYXZhaWxhYmxlT3BlcmF0b3JzRnJvbUZldGNoLnNldChudWxsKTtcbiAgICB0aGlzLmlzTG9hZGluZ0F2YWlsYWJsZU9wZXJhdG9ycy5zZXQoZmFsc2UpO1xuICB9XG5cbiAgcHVibGljIG9uUmVtb3ZlT3BlcmF0b3IoZXZlbnQ6IFJlbW92ZU9wZXJhdG9yRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLmNvbmZpcm1TdGF0ZS5zZXQoeyBraW5kOiAncmVtb3ZlLW9wZXJhdG9yJywgd2FyZElkOiBldmVudC53YXJkSWQsIHVzZXJJZDogZXZlbnQudXNlcklkIH0pO1xuICB9XG5cbiAgcHVibGljIG9uQXNzaWduUGxhbnQod2FyZElkOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLnBsYW50V2FyZElkLnNldCh3YXJkSWQpO1xuICAgIHRoaXMuYXZhaWxhYmxlUGxhbnRzRnJvbUZldGNoLnNldChudWxsKTtcbiAgICB0aGlzLmlzTG9hZGluZ0F2YWlsYWJsZVBsYW50cy5zZXQodHJ1ZSk7XG5cbiAgICB0aGlzLnN0b3JlLmdldEF2YWlsYWJsZVBsYW50c0ZvcldhcmQod2FyZElkKS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChwbGFudHMpID0+IHtcbiAgICAgIHRoaXMuYXZhaWxhYmxlUGxhbnRzRnJvbUZldGNoLnNldChwbGFudHMpO1xuICAgICAgdGhpcy5pc0xvYWRpbmdBdmFpbGFibGVQbGFudHMuc2V0KGZhbHNlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBvbkFzc2lnblBsYW50U3VibWl0KGR0bzogQXNzaWduUGxhbnREdG8pOiB2b2lkIHtcbiAgICBjb25zdCB3YXJkSWQgPSB0aGlzLnBsYW50V2FyZElkKCk7XG4gICAgaWYgKCF3YXJkSWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnN0b3JlLmFzc2lnblBsYW50KHdhcmRJZCwgZHRvKTtcbiAgICB0aGlzLnBsYW50V2FyZElkLnNldChudWxsKTtcbiAgfVxuXG4gIHB1YmxpYyBvbkNsb3NlQXNzaWduUGxhbnREaWFsb2coKTogdm9pZCB7XG4gICAgdGhpcy5wbGFudFdhcmRJZC5zZXQobnVsbCk7XG4gICAgdGhpcy5hdmFpbGFibGVQbGFudHNGcm9tRmV0Y2guc2V0KG51bGwpO1xuICAgIHRoaXMuaXNMb2FkaW5nQXZhaWxhYmxlUGxhbnRzLnNldChmYWxzZSk7XG4gIH1cblxuICBwdWJsaWMgb25SZW1vdmVQbGFudChldmVudDogUmVtb3ZlUGxhbnRFdmVudCk6IHZvaWQge1xuICAgIHRoaXMuY29uZmlybVN0YXRlLnNldCh7XG4gICAgICBraW5kOiAncmVtb3ZlLXBsYW50JyxcbiAgICAgIHdhcmRJZDogZXZlbnQud2FyZElkLFxuICAgICAgcGxhbnRJZDogZXZlbnQucGxhbnRJZCxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBvbkNvbmZpcm1EaWFsb2dDb25maXJtZWQoKTogdm9pZCB7XG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLmNvbmZpcm1TdGF0ZSgpO1xuICAgIGlmICghc3RhdGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoc3RhdGUua2luZCA9PT0gJ2RlbGV0ZS13YXJkJykge1xuICAgICAgdGhpcy5zdG9yZS5kZWxldGVXYXJkKHN0YXRlLndhcmRJZCk7XG4gICAgfVxuXG4gICAgaWYgKHN0YXRlLmtpbmQgPT09ICdyZW1vdmUtb3BlcmF0b3InKSB7XG4gICAgICB0aGlzLnN0b3JlLnJlbW92ZU9wZXJhdG9yKHN0YXRlLndhcmRJZCwgc3RhdGUudXNlcklkKTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdGUua2luZCA9PT0gJ3JlbW92ZS1wbGFudCcpIHtcbiAgICAgIHRoaXMuc3RvcmUucmVtb3ZlUGxhbnQoc3RhdGUud2FyZElkLCBzdGF0ZS5wbGFudElkKTtcbiAgICB9XG5cbiAgICB0aGlzLmNvbmZpcm1TdGF0ZS5zZXQobnVsbCk7XG4gIH1cblxuICBwdWJsaWMgb25Db25maXJtRGlhbG9nQ2FuY2VsbGVkKCk6IHZvaWQge1xuICAgIHRoaXMuY29uZmlybVN0YXRlLnNldChudWxsKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDb25maXJtTWVzc2FnZSgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHN0YXRlID0gdGhpcy5jb25maXJtU3RhdGUoKTtcbiAgICBpZiAoIXN0YXRlKSB7XG4gICAgICByZXR1cm4gJ0NvbmZlcm1pIHF1ZXN0YSBvcGVyYXppb25lPyc7XG4gICAgfVxuXG4gICAgaWYgKHN0YXRlLmtpbmQgPT09ICdkZWxldGUtd2FyZCcpIHtcbiAgICAgIHJldHVybiAnQ29uZmVybWkgbFxcJ2VsaW1pbmF6aW9uZSBkZWwgcmVwYXJ0bz8nO1xuICAgIH1cblxuICAgIGlmIChzdGF0ZS5raW5kID09PSAncmVtb3ZlLW9wZXJhdG9yJykge1xuICAgICAgcmV0dXJuICdDb25mZXJtaSBsYSByaW1vemlvbmUgZGVsbFxcJ29wZXJhdG9yZSBkYWwgcmVwYXJ0bz8nO1xuICAgIH1cblxuICAgIHJldHVybiAnQ29uZmVybWkgbGEgcmltb3ppb25lIGRlbGxcXCdhcHBhcnRhbWVudG8gZGFsIHJlcGFydG8/JztcbiAgfVxuXG4gIHB1YmxpYyBnZXRDb25maXJtTGFiZWwoKTogc3RyaW5nIHtcbiAgICBjb25zdCBzdGF0ZSA9IHRoaXMuY29uZmlybVN0YXRlKCk7XG4gICAgaWYgKCFzdGF0ZSkge1xuICAgICAgcmV0dXJuICdDb25mZXJtYSc7XG4gICAgfVxuXG4gICAgaWYgKHN0YXRlLmtpbmQgPT09ICdyZW1vdmUtb3BlcmF0b3InIHx8IHN0YXRlLmtpbmQgPT09ICdyZW1vdmUtcGxhbnQnKSB7XG4gICAgICByZXR1cm4gJ1JpbXVvdmknO1xuICAgIH1cblxuICAgIHJldHVybiAnQ29uZmVybWEnO1xuICB9XG5cbiAgcHVibGljIGdldE9wZXJhdG9yRGlzcGxheU5hbWUoZmlyc3ROYW1lOiBzdHJpbmcsIGxhc3ROYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHtmaXJzdE5hbWV9ICR7bGFzdE5hbWV9YC50cmltKCk7XG4gIH1cbn1cbiIsIjxzZWN0aW9uIGFyaWEtbGFiZWw9XCJHZXN0aW9uZSByZXBhcnRpXCIgY2xhc3M9XCJ3YXJkLW1hbmFnZW1lbnQtcGFnZSBjYXJlLXBhZ2UgY2FyZS1kb3QtZ3JpZCBzaWRlYmFyLXBhZ2VcIj5cblxuICAgIDwhLS0gUGFnZSBIZWFkZXIgLS0+XG4gICAgPGhlYWRlciBjbGFzcz1cImNhcmUtcGFnZV9faGVyb1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTRcIj5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJjYXJlLWV5ZWJyb3dcIj5Pcmdhbml6emF6aW9uZTwvcD5cbiAgICAgICAgICAgICAgICA8aDEgY2xhc3M9XCJjYXJlLXRpdGxlXCI+R2VzdGlvbmUgcmVwYXJ0aTwvaDE+XG4gICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJjYXJlLXN1YnRpdGxlXCI+TmF2aWdhemlvbmUgYSBjb2xvbm5lOiBSZXBhcnRpIOKGkiBBcHBhcnRhbWVudGkg4oaSIE9wZXJhdG9yaS48L3A+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtM1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmUtcGFnZV9faGVhZGVyLWJhZGdlXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjYXJlLXBhZ2VfX2hlYWRlci1iYWRnZS1kb3RcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgU2lzdGVtYSBhdHRpdm9cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2hlYWRlcj5cblxuICAgIDwhLS0gU25hY2tiYXIgZXJyb3IgLS0+XG4gICAgQGlmIChzbmFja2Jhck1lc3NhZ2UoKTsgYXMgZXJyb3JNZXNzYWdlKSB7XG4gICAgPGRpdiByb2xlPVwiYWxlcnRcIiBhcmlhLWxpdmU9XCJhc3NlcnRpdmVcIlxuICAgICAgICBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtMyByb3VuZGVkLXhsIGJvcmRlciBib3JkZXItcmVkLTIwMCBiZy1yZWQtNTAgcHgtNCBweS0zIHRleHQtc20gdGV4dC1yZWQtNzAwIHNoYWRvdy1zbVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgICAgICAgIDxzdmcgY2xhc3M9XCJoLTQgdy00IHNocmluay0wIHRleHQtcmVkLTUwMFwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCI+XG4gICAgICAgICAgICAgICAgPHBhdGggZmlsbC1ydWxlPVwiZXZlbm9kZFwiXG4gICAgICAgICAgICAgICAgICAgIGQ9XCJNMTggMTBhOCA4IDAgMTEtMTYgMCA4IDggMCAwMTE2IDB6bS03IDRhMSAxIDAgMTEtMiAwIDEgMSAwIDAxMiAwem0tMS05YTEgMSAwIDAwLTEgMXY0YTEgMSAwIDEwMiAwVjZhMSAxIDAgMDAtMS0xelwiXG4gICAgICAgICAgICAgICAgICAgIGNsaXAtcnVsZT1cImV2ZW5vZGRcIiAvPlxuICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICA8c3Bhbj57eyBlcnJvck1lc3NhZ2UgfX08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiZGlzbWlzc1NuYWNrYmFyKClcIlxuICAgICAgICAgICAgY2xhc3M9XCJyb3VuZGVkLW1kIGJvcmRlciBib3JkZXItcmVkLTIwMCBiZy13aGl0ZSBweC0yLjUgcHktMSB0ZXh0LXhzIGZvbnQtc2VtaWJvbGQgdGV4dC1yZWQtNjAwIGhvdmVyOmJnLXJlZC01MFwiPlxuICAgICAgICAgICAgQ2hpdWRpXG4gICAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICAgIH1cblxuICAgIDwhLS0gTG9hZGluZyAtLT5cbiAgICBAaWYgKGlzTG9hZGluZyQgfCBhc3luYykge1xuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMyB0ZXh0LXNtIHRleHQtc2xhdGUtNTAwXCIgYXJpYS1saXZlPVwicG9saXRlXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJoLTQgdy00IGFuaW1hdGUtc3BpbiByb3VuZGVkLWZ1bGwgYm9yZGVyLTIgYm9yZGVyLXNsYXRlLTIwMCBib3JkZXItdC1zbGF0ZS01MDBcIj48L2Rpdj5cbiAgICAgICAgQ2FyaWNhbWVudG8gaW4gY29yc2/igKZcbiAgICA8L2Rpdj5cbiAgICB9XG5cbiAgICBAaWYgKHdhcmRzJCB8IGFzeW5jOyBhcyB3YXJkcykge1xuICAgIEBpZiAod2FyZHMubGVuZ3RoID09PSAwKSB7XG4gICAgPCEtLSBFbXB0eSBzdGF0ZSAtLT5cbiAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZC0yeGwgYm9yZGVyIGJvcmRlci1zbGF0ZS0yMDAgYmctd2hpdGUvNzAgcC0xNiB0ZXh0LWNlbnRlciBzaGFkb3ctc21cIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaC0xNCB3LTE0IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkLTJ4bCBiZy1zbGF0ZS0xMDBcIj5cbiAgICAgICAgICAgIDxzdmcgY2xhc3M9XCJoLTcgdy03IHRleHQtc2xhdGUtNDAwXCIgZmlsbD1cIm5vbmVcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgc3Ryb2tlLXdpZHRoPVwiMS41XCJcbiAgICAgICAgICAgICAgICBzdHJva2U9XCJjdXJyZW50Q29sb3JcIj5cbiAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIlxuICAgICAgICAgICAgICAgICAgICBkPVwiTTIuMjUgMjFoMTkuNW0tMTgtMTh2MThtMTAuNS0xOHYxOG02LTEzLjVWMjFNNi43NSA2Ljc1aC43NW0tLjc1IDNoLjc1bS0uNzUgM2guNzVtMy02aC43NW0tLjc1IDNoLjc1bS0uNzUgM2guNzVNNi43NSAyMXYtMy4zNzVjMC0uNjIxLjUwNC0xLjEyNSAxLjEyNS0xLjEyNWgyLjI1Yy42MjEgMCAxLjEyNS41MDQgMS4xMjUgMS4xMjVWMjFNMyAzaDEybS0uNzUgNC41SDIxbS0zLjc1IDMuNzVoLjAwOHYuMDA4aC0uMDA4di0uMDA4em0wIDNoLjAwOHYuMDA4aC0uMDA4di0uMDA4em0wIDNoLjAwOHYuMDA4aC0uMDA4di0uMDA4elwiIC8+XG4gICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxwIGNsYXNzPVwibXQtNCB0ZXh0LXNtIGZvbnQtc2VtaWJvbGQgdGV4dC1zbGF0ZS03MDBcIj5OZXNzdW4gcmVwYXJ0byBkaXNwb25pYmlsZTwvcD5cbiAgICAgICAgPHAgY2xhc3M9XCJtdC0xIHRleHQteHMgdGV4dC1zbGF0ZS00MDBcIj5DcmVhIGlsIHByaW1vIHJlcGFydG8gZGFsIHBhbm5lbGxvIGRlaSByZXBhcnRpIGEgc2luaXN0cmEuPC9wPlxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwib25DcmVhdGVXYXJkKClcIlxuICAgICAgICAgICAgY2xhc3M9XCJjYXJlLWJ0biBjYXJlLWJ0bi0tcHJpbWFyeSBtdC01IHB4LTQgc2hhZG93LXNtIGZvY3VzLXZpc2libGU6b3V0bGluZS0yIGZvY3VzLXZpc2libGU6b3V0bGluZS1vZmZzZXQtMiBmb2N1cy12aXNpYmxlOm91dGxpbmUtYW1iZXItNDAwXCI+XG4gICAgICAgICAgICA8c3ZnIGNsYXNzPVwiaC00IHctNFwiIGZpbGw9XCJub25lXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIHN0cm9rZS13aWR0aD1cIjIuNVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiPlxuICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIGQ9XCJNMTIgNC41djE1bTcuNS03LjVoLTE1XCIgLz5cbiAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgTnVvdm8gcmVwYXJ0b1xuICAgICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cblxuICAgIH0gQGVsc2Uge1xuXG4gICAgPCEtLSBNb2JpbGUgc3RlcCBzZWxlY3RvciAodmlzaWJsZSBvbmx5IHdoZW4gYSB3YXJkIGlzIHNlbGVjdGVkKSAtLT5cbiAgICBAaWYgKHNlbGVjdGVkV2FyZCgpOyBhcyBhY3RpdmVXYXJkKSB7XG4gICAgPGRpdiBjbGFzcz1cIm92ZXJmbG93LWhpZGRlbiByb3VuZGVkLXhsIGJvcmRlciBib3JkZXItc2xhdGUtMjAwIGJnLXdoaXRlIHNoYWRvdy1zbSBsZzpoaWRkZW5cIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImdyaWQgZ3JpZC1jb2xzLTMgZGl2aWRlLXggZGl2aWRlLXNsYXRlLTEwMCB0ZXh0LXhzIGZvbnQtc2VtaWJvbGRcIj5cbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJzaG93V2FyZExpc3RTdGVwKClcIiBbY2xhc3NdPVwibW9iaWxlU3RlcCgpID09PSAnd2FyZHMnXG4gICAgICAgICAgICAgICAgPyAnZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTEuNSBweC0zIHB5LTIuNSBiZy1hbWJlci01MCB0ZXh0LWFtYmVyLTcwMCdcbiAgICAgICAgICAgICAgICA6ICdmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMS41IHB4LTMgcHktMi41IHRleHQtc2xhdGUtNTAwIGhvdmVyOmJnLXNsYXRlLTUwJ1wiPlxuICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9XCJoLTMuNSB3LTMuNVwiIGZpbGw9XCJub25lXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIj5cbiAgICAgICAgICAgICAgICAgICAgPHBhdGggc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMy43NSA2QTIuMjUgMi4yNSAwIDAxNiAzLjc1aDIuMjVBMi4yNSAyLjI1IDAgMDExMC41IDZ2Mi4yNWEyLjI1IDIuMjUgMCAwMS0yLjI1IDIuMjVINmEyLjI1IDIuMjUgMCAwMS0yLjI1LTIuMjVWNnptMCA5Ljc1QTIuMjUgMi4yNSAwIDAxNiAxMy41aDIuMjVhMi4yNSAyLjI1IDAgMDEyLjI1IDIuMjVWMThhMi4yNSAyLjI1IDAgMDEtMi4yNSAyLjI1SDZBMi4yNSAyLjI1IDAgMDEzLjc1IDE4di0yLjI1em05Ljc1LTkuNzVBMi4yNSAyLjI1IDAgMDExNS43NSAzLjc1SDE4QTIuMjUgMi4yNSAwIDAxMjAuMjUgNnYyLjI1QTIuMjUgMi4yNSAwIDAxMTggMTAuNWgtMi4yNWEyLjI1IDIuMjUgMCAwMS0yLjI1LTIuMjVWNnptMCA5Ljc1YTIuMjUgMi4yNSAwIDAxMi4yNS0yLjI1SDE4YTIuMjUgMi4yNSAwIDAxMi4yNSAyLjI1VjE4QTIuMjUgMi4yNSAwIDAxMTggMjAuMjVoLTIuMjVBMi4yNSAyLjI1IDAgMDExMy41IDE4di0yLjI1elwiIC8+XG4gICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgUmVwYXJ0aVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwic2hvd0FwYXJ0bWVudHNTdGVwKClcIiBbY2xhc3NdPVwibW9iaWxlU3RlcCgpID09PSAnYXBhcnRtZW50cydcbiAgICAgICAgICAgICAgICA/ICdmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMS41IHB4LTMgcHktMi41IGJnLWFtYmVyLTUwIHRleHQtYW1iZXItNzAwJ1xuICAgICAgICAgICAgICAgIDogJ2ZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0xLjUgcHgtMyBweS0yLjUgdGV4dC1zbGF0ZS01MDAgaG92ZXI6Ymctc2xhdGUtNTAnXCI+XG4gICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz1cImgtMy41IHctMy41XCIgZmlsbD1cIm5vbmVcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiPlxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0yLjI1IDEybDguOTU0LTguOTU1Yy40NC0uNDM5IDEuMTUyLS40MzkgMS41OTEgMEwyMS43NSAxMk00LjUgOS43NXYxMC4xMjVjMCAuNjIxLjUwNCAxLjEyNSAxLjEyNSAxLjEyNUg5Ljc1di00Ljg3NWMwLS42MjEuNTA0LTEuMTI1IDEuMTI1LTEuMTI1aDIuMjVjLjYyMSAwIDEuMTI1LjUwNCAxLjEyNSAxLjEyNVYyMWg0LjEyNWMuNjIxIDAgMS4xMjUtLjUwNCAxLjEyNS0xLjEyNVY5Ljc1TTguMjUgMjFoOC4yNVwiIC8+XG4gICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgQXBwYXJ0YW1lbnRpXG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJzaG93T3BlcmF0b3JzU3RlcCgpXCIgW2NsYXNzXT1cIm1vYmlsZVN0ZXAoKSA9PT0gJ29wZXJhdG9ycydcbiAgICAgICAgICAgICAgICA/ICdmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMS41IHB4LTMgcHktMi41IGJnLWFtYmVyLTUwIHRleHQtYW1iZXItNzAwJ1xuICAgICAgICAgICAgICAgIDogJ2ZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0xLjUgcHgtMyBweS0yLjUgdGV4dC1zbGF0ZS01MDAgaG92ZXI6Ymctc2xhdGUtNTAnXCI+XG4gICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz1cImgtMy41IHctMy41XCIgZmlsbD1cIm5vbmVcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiPlxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xNS43NSA2YTMuNzUgMy43NSAwIDExLTcuNSAwIDMuNzUgMy43NSAwIDAxNy41IDB6TTQuNTAxIDIwLjExOGE3LjUgNy41IDAgMDExNC45OTggMEExNy45MzMgMTcuOTMzIDAgMDExMiAyMS43NWMtMi42NzYgMC01LjIxNi0uNTg0LTcuNDk5LTEuNjMyelwiIC8+XG4gICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgT3BlcmF0b3JpXG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxwIGNsYXNzPVwiYm9yZGVyLXQgYm9yZGVyLXNsYXRlLTEwMCBweC00IHB5LTIgdGV4dC14cyB0ZXh0LXNsYXRlLTQwMFwiPlxuICAgICAgICAgICAgUmVwYXJ0byBhdHRpdm86IDxzcGFuIGNsYXNzPVwiZm9udC1zZW1pYm9sZCB0ZXh0LXNsYXRlLTYwMFwiPnt7IGFjdGl2ZVdhcmQubmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgPC9wPlxuICAgIDwvZGl2PlxuICAgIH1cblxuICAgIDwhLS0g4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQIDMtQ09MVU1OIEZJTkRFUiBMQVlPVVQg4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IG1pbi1oLTAgZmxleC0xIG92ZXJmbG93LWhpZGRlbiByb3VuZGVkLTJ4bCBib3JkZXIgYm9yZGVyLXNsYXRlLTIwMCBiZy13aGl0ZSBzaGFkb3ctc21cIlxuICAgICAgICBzdHlsZT1cIm1pbi1oZWlnaHQ6IDMycmVtO1wiPlxuXG4gICAgICAgIDwhLS0g4pSA4pSAIENPTCAxOiBXQVJEIExJU1Qg4pSA4pSAIC0tPlxuICAgICAgICA8YXNpZGUgYXJpYS1sYWJlbD1cIkVsZW5jbyByZXBhcnRpXCJcbiAgICAgICAgICAgIGNsYXNzPVwiY29sLXNlcGFyYXRvciBjb2wtc2Nyb2xsIGZsZXggdy02MCBzaHJpbmstMCBmbGV4LWNvbCBvdmVyZmxvdy15LWF1dG8gbGc6ZmxleFwiXG4gICAgICAgICAgICBbY2xhc3MuaGlkZGVuXT1cIm1vYmlsZVN0ZXAoKSAhPT0gJ3dhcmRzJ1wiPlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIGJvcmRlci1iIGJvcmRlci1zbGF0ZS0xMDAgYmctd2hpdGUvOTUgcHgtNCBweS0zXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb250LWRpc3BsYXkgdGV4dC14cyBmb250LWJvbGQgdXBwZXJjYXNlIHRyYWNraW5nLXdpZGVzdCB0ZXh0LXNsYXRlLTQwMFwiPlJlcGFydGk8L3NwYW4+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0xLjVcIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cIm9uRGVsZXRlV2FyZChzZWxlY3RlZFdhcmQoKSEuaWQpXCIgW2Rpc2FibGVkXT1cIiFzZWxlY3RlZFdhcmQoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiRWxpbWluYSByZXBhcnRvXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2FyZS1idG4gY2FyZS1idG4tLWRhbmdlciBjYXJlLWJ0bi0taWNvbiBjYXJlLWJ0bi0tY29tcGFjdCBoLTYgdy02IGRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZCBkaXNhYmxlZDpvcGFjaXR5LTQwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPVwiaC0zLjUgdy0zLjVcIiBmaWxsPVwibm9uZVwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xNC43NCA5bC0uMzQ2IDltLTQuNzg4IDBMOS4yNiA5bTkuOTY4LTMuMjFjLjM0Mi4wNTIuNjgyLjEwNyAxLjAyMi4xNjZtLTEuMDIyLS4xNjVMMTguMTYgMTkuNjczYTIuMjUgMi4yNSAwIDAxLTIuMjQ0IDIuMDc3SDguMDg0YTIuMjUgMi4yNSAwIDAxLTIuMjQ0LTIuMDc3TDQuNzcyIDUuNzltMTQuNDU2IDBhNDguMTA4IDQ4LjEwOCAwIDAwLTMuNDc4LS4zOTdtLTEyIC41NjJjLjM0LS4wNTkuNjgtLjExNCAxLjAyMi0uMTY1bTAgMGE0OC4xMSA0OC4xMSAwIDAxMy40NzgtLjM5N203LjUgMHYtLjkxNmMwLTEuMTgtLjkxLTIuMTY0LTIuMDktMi4yMDFhNTEuOTY0IDUxLjk2NCAwIDAwLTMuMzIgMGMtMS4xOC4wMzctMi4wOSAxLjAyMi0yLjA5IDIuMjAxdi45MTZtNy41IDBhNDguNjY3IDQ4LjY2NyAwIDAwLTcuNSAwXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzci1vbmx5XCI+RWxpbWluYSByZXBhcnRvPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cIm9uRWRpdFNlbGVjdGVkV2FyZCgpXCIgW2Rpc2FibGVkXT1cIiFzZWxlY3RlZFdhcmQoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiTW9kaWZpY2EgcmVwYXJ0b1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNhcmUtYnRuIGNhcmUtYnRuLS1uZXV0cmFsIGNhcmUtYnRuLS1pY29uIGNhcmUtYnRuLS1jb21wYWN0IGgtNiB3LTYgZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkIGRpc2FibGVkOm9wYWNpdHktNDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9XCJoLTMuNSB3LTMuNVwiIGZpbGw9XCJub25lXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTE2Ljg2MiA0LjQ4N2wxLjY4Ny0xLjY4OGExLjg3NSAxLjg3NSAwIDExMi42NTIgMi42NTJMMTAuNTgyIDE2LjA3YTQuNSA0LjUgMCAwMS0xLjg5NyAxLjEzTDYgMThsLjgtMi42ODVhNC41IDQuNSAwIDAxMS4xMy0xLjg5N2w4LjkzMi04LjkzMXptMCAwTDE5LjUgNy4xMjVNMTggMTR2NC43NUEyLjI1IDIuMjUgMCAwMTE1Ljc1IDIxSDUuMjVBMi4yNSAyLjI1IDAgMDEzIDE4Ljc1VjguMjVBMi4yNSAyLjI1IDAgMDE1LjI1IDZIMTBcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIj5Nb2RpZmljYSByZXBhcnRvPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cIm9uQ3JlYXRlV2FyZCgpXCIgYXJpYS1sYWJlbD1cIk51b3ZvIHJlcGFydG9cIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjYXJlLWJ0biBjYXJlLWJ0bi0tcHJpbWFyeSBjYXJlLWJ0bi0taWNvbiBjYXJlLWJ0bi0tY29tcGFjdCBoLTYgdy02XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPVwiaC0zLjUgdy0zLjVcIiBmaWxsPVwibm9uZVwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBzdHJva2Utd2lkdGg9XCIzXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgZD1cIk0xMiA0LjV2MTVtNy41LTcuNWgtMTVcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIj5OdW92byByZXBhcnRvPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8dWwgY2xhc3M9XCJmbGV4LTEgc3BhY2UteS0wLjUgcC0yXCI+XG4gICAgICAgICAgICAgICAgQGZvciAod2FyZCBvZiB3YXJkczsgdHJhY2sgd2FyZC5pZCkge1xuICAgICAgICAgICAgICAgIDxsaT5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cInNlbGVjdFdhcmQod2FyZC5pZClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cInNlbGVjdGVkV2FyZElkKCkgPT09IHdhcmQuaWRcbiAgICAgICAgICAgICAgICAgICAgPyAnZ3JvdXAgZmxleCB3LWZ1bGwgY3Vyc29yLXBvaW50ZXIgaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiByb3VuZGVkLWxnIHB4LTMgcHktMi41IHRleHQtbGVmdCB0cmFuc2l0aW9uIGJnLWFtYmVyLTMwMCB0ZXh0LXNsYXRlLTkwMCBzaGFkb3ctc20nXG4gICAgICAgICAgICAgICAgICAgIDogJ2dyb3VwIGZsZXggdy1mdWxsIGN1cnNvci1wb2ludGVyIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gcm91bmRlZC1sZyBweC0zIHB5LTIuNSB0ZXh0LWxlZnQgdHJhbnNpdGlvbiB0ZXh0LXNsYXRlLTcwMCBob3ZlcjpiZy1zbGF0ZS01MCdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IG1pbi13LTAgaXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz1cImgtMy41IHctMy41IHNocmluay0wXCIgZmlsbD1cIm5vbmVcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgc3Ryb2tlLXdpZHRoPVwiMlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0yLjI1IDIxaDE5LjVtLTE4LTE4djE4bTEwLjUtMTh2MThtNi0xMy41VjIxXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRydW5jYXRlIHRleHQtc20gZm9udC1tZWRpdW1cIj57eyB3YXJkLm5hbWUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFtjbGFzc109XCJzZWxlY3RlZFdhcmRJZCgpID09PSB3YXJkLmlkXG4gICAgICAgICAgICAgICAgICAgID8gJ21sLTEgc2hyaW5rLTAgcm91bmRlZC1mdWxsIGJnLXdoaXRlLzMwIHB4LTEuNSBweS0wLjUgdGV4dC1bMTBweF0gZm9udC1ib2xkIHRleHQtc2xhdGUtODAwJ1xuICAgICAgICAgICAgICAgICAgICA6ICdtbC0xIHNocmluay0wIHJvdW5kZWQtZnVsbCBiZy1zbGF0ZS0xMDAgcHgtMS41IHB5LTAuNSB0ZXh0LVsxMHB4XSBmb250LWJvbGQgdGV4dC1zbGF0ZS01MDAnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgd2FyZC5hcGFydG1lbnRzLmxlbmd0aCB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvdWw+XG4gICAgICAgIDwvYXNpZGU+XG5cbiAgICAgICAgPCEtLSDilIDilIAgQ09MIDI6IEFQQVJUTUVOVFMg4pSA4pSAIC0tPlxuICAgICAgICA8c2VjdGlvbiBhcmlhLWxhYmVsPVwiRGV0dGFnbGkgcmVwYXJ0byBlIGFwcGFydGFtZW50aVwiXG4gICAgICAgICAgICBjbGFzcz1cImNvbC1zZXBhcmF0b3IgY29sLXNjcm9sbCBmbGV4IGZsZXgtMSBmbGV4LWNvbCBvdmVyZmxvdy15LWF1dG8gbGc6ZmxleFwiXG4gICAgICAgICAgICBbY2xhc3MuaGlkZGVuXT1cIm1vYmlsZVN0ZXAoKSAhPT0gJ2FwYXJ0bWVudHMnXCI+XG5cbiAgICAgICAgICAgIEBpZiAoc2VsZWN0ZWRXYXJkKCk7IGFzIGFjdGl2ZVdhcmQpIHtcblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJvcmRlci1iIGJvcmRlci1zbGF0ZS0xMDAgYmctd2hpdGUvOTUgcHgtNCBweS0zXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtc3RhcnQganVzdGlmeS1iZXR3ZWVuIGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtaW4tdy0wXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9udC1kaXNwbGF5IHRleHQteHMgZm9udC1ib2xkIHVwcGVyY2FzZSB0cmFja2luZy13aWRlc3QgdGV4dC1zbGF0ZS00MDBcIj5BcHBhcnRhbWVudGk8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aDIgY2xhc3M9XCJtdC0wLjUgdHJ1bmNhdGUgdGV4dC1zbSBmb250LXNlbWlib2xkIHRleHQtc2xhdGUtODAwXCI+e3sgYWN0aXZlV2FyZC5uYW1lIH19PC9oMj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IHNocmluay0wIGl0ZW1zLWNlbnRlciBnYXAtMS41XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwib25Bc3NpZ25QbGFudChhY3RpdmVXYXJkLmlkKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjYXJlLWJ0biBjYXJlLWJ0bi0tcHJpbWFyeSBjYXJlLWJ0bi0taWNvbiBjYXJlLWJ0bi0tY29tcGFjdCBoLTcgdy03XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiQXNzZWduYSBhcHBhcnRhbWVudG9cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPVwiaC0zLjUgdy0zLjVcIiBmaWxsPVwibm9uZVwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBzdHJva2Utd2lkdGg9XCIzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiY3VycmVudENvbG9yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIGQ9XCJNMTIgNC41djE1bTcuNS03LjVoLTE1XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIj5Bc3NlZ25hIGFwcGFydGFtZW50bzwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleC0xIHAtM1wiPlxuICAgICAgICAgICAgICAgIEBpZiAoYWN0aXZlV2FyZC5hcGFydG1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkLXhsIGJvcmRlciBib3JkZXItZGFzaGVkIGJvcmRlci1zbGF0ZS0yMDAgcHktMTIgdGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz1cImgtOCB3LTggdGV4dC1zbGF0ZS0zMDBcIiBmaWxsPVwibm9uZVwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBzdHJva2Utd2lkdGg9XCIxLjVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiY3VycmVudENvbG9yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMi4yNSAxMmw4Ljk1NC04Ljk1NWMuNDQtLjQzOSAxLjE1Mi0uNDM5IDEuNTkxIDBMMjEuNzUgMTJNNC41IDkuNzV2MTAuMTI1YzAgLjYyMS41MDQgMS4xMjUgMS4xMjUgMS4xMjVIOS43NXYtNC44NzVjMC0uNjIxLjUwNC0xLjEyNSAxLjEyNS0xLjEyNWgyLjI1Yy42MjEgMCAxLjEyNS41MDQgMS4xMjUgMS4xMjVWMjFoNC4xMjVjLjYyMSAwIDEuMTI1LS41MDQgMS4xMjUtMS4xMjVWOS43NU04LjI1IDIxaDguMjVcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtdC0zIHRleHQteHMgZm9udC1tZWRpdW0gdGV4dC1zbGF0ZS00MDBcIj5OZXNzdW4gYXBwYXJ0YW1lbnRvIGFzc2VnbmF0bzwvcD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJzcGFjZS15LTAuNVwiPlxuICAgICAgICAgICAgICAgICAgICBAZm9yIChhcGFydG1lbnQgb2YgYWN0aXZlV2FyZC5hcGFydG1lbnRzOyB0cmFjayBhcGFydG1lbnQuaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgPGxpPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJzZWxlY3RlZEFwYXJ0bWVudElkKCkgPT09IGFwYXJ0bWVudC5pZFxuICAgICAgICAgICAgICAgICAgICAgICAgPyAnZ3JvdXAgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIGdhcC0yIHJvdW5kZWQtbGcgcHgtMyBweS0yLjUgYmctYW1iZXItMzAwIHRleHQtc2xhdGUtOTAwIHNoYWRvdy1zbSdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogJ2dyb3VwIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtMiByb3VuZGVkLWxnIHB4LTMgcHktMi41IHRleHQtc2xhdGUtNzAwIGhvdmVyOmJnLXNsYXRlLTUwJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJzZWxlY3RBcGFydG1lbnQoYXBhcnRtZW50LmlkKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBtaW4tdy0wIGZsZXgtMSBjdXJzb3ItcG9pbnRlciBpdGVtcy1jZW50ZXIgZ2FwLTIgdGV4dC1sZWZ0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgW2NsYXNzXT1cInNlbGVjdGVkQXBhcnRtZW50SWQoKSA9PT0gYXBhcnRtZW50LmlkID8gJ2gtMy41IHctMy41IHNocmluay0wIHRleHQtd2hpdGUvNzAnIDogJ2gtMy41IHctMy41IHNocmluay0wIHRleHQtc2xhdGUtNDAwJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwibm9uZVwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMi4yNSAxMmw4Ljk1NC04Ljk1NWMuNDQtLjQzOSAxLjE1Mi0uNDM5IDEuNTkxIDBMMjEuNzUgMTJNNC41IDkuNzV2MTAuMTI1YzAgLjYyMS41MDQgMS4xMjUgMS4xMjUgMS4xMjVIOS43NXYtNC44NzVjMC0uNjIxLjUwNC0xLjEyNSAxLjEyNS0xLjEyNWgyLjI1Yy42MjEgMCAxLjEyNS41MDQgMS4xMjUgMS4xMjVWMjFoNC4xMjVjLjYyMSAwIDEuMTI1LS41MDQgMS4xMjUtMS4xMjVWOS43NU04LjI1IDIxaDguMjVcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0cnVuY2F0ZSB0ZXh0LXNtIGZvbnQtbWVkaXVtXCI+e3sgYXBhcnRtZW50Lm5hbWUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uUmVtb3ZlUGxhbnQoeyB3YXJkSWQ6IGFjdGl2ZVdhcmQuaWQsIHBsYW50SWQ6IGFwYXJ0bWVudC5pZCB9KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJSaW11b3ZpIGFwcGFydGFtZW50b1wiIFtjbGFzc109XCJzZWxlY3RlZEFwYXJ0bWVudElkKCkgPT09IGFwYXJ0bWVudC5pZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ2NhcmUtYnRuIGNhcmUtYnRuLS1kYW5nZXIgY2FyZS1idG4tLWljb24gY2FyZS1idG4tLWNvbXBhY3QgaC04IHctOCBzaHJpbmstMCBib3JkZXItcmVkLTMwMCBiZy1yZWQtNjAwIHRleHQtd2hpdGUnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnY2FyZS1idG4gY2FyZS1idG4tLWRhbmdlciBjYXJlLWJ0bi0taWNvbiBjYXJlLWJ0bi0tY29tcGFjdCBoLTggdy04IHNocmluay0wJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPVwiaC00IHctNFwiIGZpbGw9XCJub25lXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIHN0cm9rZS13aWR0aD1cIjIuNVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCJjdXJyZW50Q29sb3JcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIGQ9XCJNNiAxOEwxOCA2TTYgNmwxMiAxMlwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtMSBmbGV4LWNvbCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcC04IHRleHQtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz1cImgtMTAgdy0xMCB0ZXh0LXNsYXRlLTIwMFwiIGZpbGw9XCJub25lXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiXG4gICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiPlxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xNS4wNDIgMjEuNjcyTDEzLjY4NCAxNi42bTAgMGwtMi41MSAyLjIyNS41NjktOS40NyA1LjIyNyA3LjkxNy0zLjI4Ni0uNjcyem0tNy41MTgtLjI2N0E4LjI1IDguMjUgMCAxMTIwLjI1IDEwLjVNOC4yODggMTQuMjEyQTUuMjUgNS4yNSAwIDExMTcuMjUgMTAuNVwiIC8+XG4gICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtdC00IHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1zbGF0ZS00MDBcIj5TZWxlemlvbmEgdW4gcmVwYXJ0bzwvcD5cbiAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm10LTEgdGV4dC14cyB0ZXh0LXNsYXRlLTMwMFwiPkdsaSBhcHBhcnRhbWVudGkgYXBwYXJpcmFubm8gcXVpPC9wPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvc2VjdGlvbj5cblxuICAgICAgICA8IS0tIOKUgOKUgCBDT0wgMzogT1BFUkFUT1JTIOKUgOKUgCAtLT5cbiAgICAgICAgPHNlY3Rpb24gYXJpYS1sYWJlbD1cIk9wZXJhdG9yaSBhc3NlZ25hdGlcIiBjbGFzcz1cImNvbC1zY3JvbGwgZmxleCBmbGV4LTEgZmxleC1jb2wgb3ZlcmZsb3cteS1hdXRvIGxnOmZsZXhcIlxuICAgICAgICAgICAgW2NsYXNzLmhpZGRlbl09XCJtb2JpbGVTdGVwKCkgIT09ICdvcGVyYXRvcnMnXCI+XG5cbiAgICAgICAgICAgIEBpZiAoc2VsZWN0ZWRXYXJkKCk7IGFzIGFjdGl2ZVdhcmQpIHtcblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJvcmRlci1iIGJvcmRlci1zbGF0ZS0xMDAgYmctd2hpdGUvOTUgcHgtNCBweS0zXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtc3RhcnQganVzdGlmeS1iZXR3ZWVuIGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtaW4tdy0wXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9udC1kaXNwbGF5IHRleHQteHMgZm9udC1ib2xkIHVwcGVyY2FzZSB0cmFja2luZy13aWRlc3QgdGV4dC1zbGF0ZS00MDBcIj5PcGVyYXRvcmk8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aDIgY2xhc3M9XCJtdC0wLjUgdHJ1bmNhdGUgdGV4dC1zbSBmb250LXNlbWlib2xkIHRleHQtc2xhdGUtODAwXCI+e3sgYWN0aXZlV2FyZC5uYW1lIH19PC9oMj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJvbkFzc2lnbk9wZXJhdG9yKGFjdGl2ZVdhcmQuaWQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2FyZS1idG4gY2FyZS1idG4tLXByaW1hcnkgY2FyZS1idG4tLWljb24gY2FyZS1idG4tLWNvbXBhY3QgaC03IHctN1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiQWdnaXVuZ2kgb3BlcmF0b3JlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPVwiaC0zLjUgdy0zLjVcIiBmaWxsPVwibm9uZVwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBzdHJva2Utd2lkdGg9XCIzXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgZD1cIk0xMiA0LjV2MTVtNy41LTcuNWgtMTVcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIj5BZ2dpdW5naSBvcGVyYXRvcmU8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LTEgcC0zXCI+XG4gICAgICAgICAgICAgICAgQGlmIChhY3RpdmVXYXJkLm9wZXJhdG9ycy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZC14bCBib3JkZXIgYm9yZGVyLWRhc2hlZCBib3JkZXItc2xhdGUtMjAwIHB5LTEyIHRleHQtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9XCJoLTggdy04IHRleHQtc2xhdGUtMzAwXCIgZmlsbD1cIm5vbmVcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgc3Ryb2tlLXdpZHRoPVwiMS41XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTE1Ljc1IDZhMy43NSAzLjc1IDAgMTEtNy41IDAgMy43NSAzLjc1IDAgMDE3LjUgMHpNNC41MDEgMjAuMTE4YTcuNSA3LjUgMCAwMTE0Ljk5OCAwQTE3LjkzMyAxNy45MzMgMCAwMTEyIDIxLjc1Yy0yLjY3NiAwLTUuMjE2LS41ODQtNy40OTktMS42MzJ6XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibXQtMyB0ZXh0LXhzIGZvbnQtbWVkaXVtIHRleHQtc2xhdGUtNDAwXCI+TmVzc3VuIG9wZXJhdG9yZSBhc3NlZ25hdG88L3A+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwic3BhY2UteS0wLjVcIj5cbiAgICAgICAgICAgICAgICAgICAgQGZvciAob3BlcmF0b3Igb2YgYWN0aXZlV2FyZC5vcGVyYXRvcnM7IHRyYWNrIG9wZXJhdG9yLmlkKSB7XG4gICAgICAgICAgICAgICAgICAgIDxsaT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImdyb3VwIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtMiByb3VuZGVkLWxnIHB4LTMgcHktMi41IHRleHQtc2xhdGUtNzAwIGhvdmVyOmJnLXNsYXRlLTUwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggbWluLXctMCBpdGVtcy1jZW50ZXIgZ2FwLTIuNVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZsZXggaC02IHctNiBzaHJpbmstMCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZC1mdWxsIGJnLWVtZXJhbGQtMTAwIHRleHQtWzEwcHhdIGZvbnQtYm9sZCB0ZXh0LWVtZXJhbGQtNzAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBvcGVyYXRvci5maXJzdE5hbWVbMF0gfX17eyBvcGVyYXRvci5sYXN0TmFtZVswXSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0cnVuY2F0ZSB0ZXh0LXNtIGZvbnQtbWVkaXVtXCI+e3sgZ2V0T3BlcmF0b3JEaXNwbGF5TmFtZShvcGVyYXRvci5maXJzdE5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvci5sYXN0TmFtZSkgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uUmVtb3ZlT3BlcmF0b3IoeyB3YXJkSWQ6IGFjdGl2ZVdhcmQuaWQsIHVzZXJJZDogb3BlcmF0b3IuaWQgfSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiUmltdW92aSBvcGVyYXRvcmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNhcmUtYnRuIGNhcmUtYnRuLS1kYW5nZXIgY2FyZS1idG4tLWljb24gY2FyZS1idG4tLWNvbXBhY3QgaC04IHctOCBzaHJpbmstMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPVwiaC00IHctNFwiIGZpbGw9XCJub25lXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIHN0cm9rZS13aWR0aD1cIjIuNVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCJjdXJyZW50Q29sb3JcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIGQ9XCJNNiAxOEwxOCA2TTYgNmwxMiAxMlwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtMSBmbGV4LWNvbCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcC04IHRleHQtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz1cImgtMTAgdy0xMCB0ZXh0LXNsYXRlLTIwMFwiIGZpbGw9XCJub25lXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiXG4gICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiPlxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xNS43NSA2YTMuNzUgMy43NSAwIDExLTcuNSAwIDMuNzUgMy43NSAwIDAxNy41IDB6TTQuNTAxIDIwLjExOGE3LjUgNy41IDAgMDExNC45OTggMEExNy45MzMgMTcuOTMzIDAgMDExMiAyMS43NWMtMi42NzYgMC01LjIxNi0uNTg0LTcuNDk5LTEuNjMyelwiIC8+XG4gICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtdC00IHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1zbGF0ZS00MDBcIj5TZWxlemlvbmEgdW4gcmVwYXJ0bzwvcD5cbiAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm10LTEgdGV4dC14cyB0ZXh0LXNsYXRlLTMwMFwiPkdsaSBvcGVyYXRvcmkgYXBwYXJpcmFubm8gcXVpPC9wPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvc2VjdGlvbj5cblxuICAgIDwvZGl2PlxuXG4gICAgfSA8IS0tIGNoaXVkZSBAZWxzZSAod2FyZHMubGVuZ3RoID4gMCkgLS0+XG5cbiAgICB9IDwhLS0gY2hpdWRlIEBpZiAod2FyZHMkIHwgYXN5bmM7IGFzIHdhcmRzKSAtLT5cblxuICAgIDwhLS0gRGlhbG9ncyAtLT5cbiAgICBAaWYgKHdhcmREaWFsb2dNb2RlKCkgIT09ICdjbG9zZWQnKSB7XG4gICAgPGFwcC13YXJkLWZvcm0tZGlhbG9nLWNvbXBvbmVudCBbd2FyZF09XCJ3YXJkRGlhbG9nVmFsdWUoKVwiXG4gICAgICAgIChzdWJtaXR0ZWQpPVwid2FyZERpYWxvZ01vZGUoKSA9PT0gJ2NyZWF0ZScgPyBvbkNyZWF0ZVdhcmRTdWJtaXQoJGV2ZW50KSA6IG9uRWRpdFdhcmRTdWJtaXQoJGV2ZW50KVwiXG4gICAgICAgIChjYW5jZWxsZWQpPVwib25DbG9zZVdhcmREaWFsb2coKVwiIC8+XG4gICAgfVxuICAgIEBpZiAob3BlcmF0b3JXYXJkSWQoKTsgYXMgYWN0aXZlV2FyZElkKSB7XG4gICAgPGFwcC1hc3NpZ24tb3BlcmF0b3ItZGlhbG9nLWNvbXBvbmVudCBbd2FyZElkXT1cImFjdGl2ZVdhcmRJZFwiIFthdmFpbGFibGVXYXJkc109XCJ3YXJkc1NuYXBzaG90KClcIlxuICAgICAgICBbYXZhaWxhYmxlT3BlcmF0b3JzXT1cImF2YWlsYWJsZU9wZXJhdG9ycygpXCIgKHN1Ym1pdHRlZCk9XCJvbkFzc2lnbk9wZXJhdG9yU3VibWl0KCRldmVudClcIlxuICAgICAgICAoY2FuY2VsbGVkKT1cIm9uQ2xvc2VBc3NpZ25PcGVyYXRvckRpYWxvZygpXCIgLz5cbiAgICB9XG4gICAgQGlmIChwbGFudFdhcmRJZCgpOyBhcyBhY3RpdmVXYXJkSWQpIHtcbiAgICA8YXBwLWFzc2lnbi13YXJkLWRpYWxvZy1jb21wb25lbnQgW3dhcmRJZF09XCJhY3RpdmVXYXJkSWRcIiBbYXZhaWxhYmxlV2FyZHNdPVwid2FyZHNTbmFwc2hvdCgpXCJcbiAgICAgICAgW2F2YWlsYWJsZVBsYW50c109XCJhdmFpbGFibGVQbGFudHMoKVwiIChzdWJtaXR0ZWQpPVwib25Bc3NpZ25QbGFudFN1Ym1pdCgkZXZlbnQpXCJcbiAgICAgICAgKGNhbmNlbGxlZCk9XCJvbkNsb3NlQXNzaWduUGxhbnREaWFsb2coKVwiIC8+XG4gICAgfVxuICAgIEBpZiAoY29uZmlybVN0YXRlKCkpIHtcbiAgICA8YXBwLWNvbmZpcm0tZGlhbG9nIFttZXNzYWdlXT1cImdldENvbmZpcm1NZXNzYWdlKClcIiBbY29uZmlybUxhYmVsXT1cImdldENvbmZpcm1MYWJlbCgpXCIgY2FuY2VsTGFiZWw9XCJBbm51bGxhXCJcbiAgICAgICAgKGNvbmZpcm1lZCk9XCJvbkNvbmZpcm1EaWFsb2dDb25maXJtZWQoKVwiIChjYW5jZWxsZWQpPVwib25Db25maXJtRGlhbG9nQ2FuY2VsbGVkKClcIiAvPlxuICAgIH1cblxuPC9zZWN0aW9uPiJdLCJtYXBwaW5ncyI6IjtrcENDbURvQkEsQ0FBQSxnQkFBaUNDLENBQUEsSUFBb0JDLENBQUEsSUFBQUMsQ0FBQSxJQUFBQyxjQUFBLEdBQUFDLENBQUEsYUFBQUMsQ0FBQSxFQUFBRixjQUFBLEdBQUFHLENBQUEsTUFBQUEsQ0FBQSxDQUFBQyxTQUFBLEVBQTdDSixjQUFBLEdBQUFHLENBQUEsTUFBQUUsQ0FBQSxXQUFBSCxDQUFBLENBQUFJLEVBQUEsRUFBeUJDLENBQUEsR0FBQUMsQ0FBQSxDQUFBTixDQUFBLENBQUFPLElBQUEsUUFBQVQsY0FBQSxHQUFBQyxDQUFBLG9CQUFBUyxHQUFBWCxDQUFB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 \ No newline at end of file diff --git a/frontend/dist-instrumented/chunk-VJLNG5UH.js.map b/frontend/dist-instrumented/chunk-VJLNG5UH.js.map new file mode 100644 index 00000000..ee2103ad --- /dev/null +++ b/frontend/dist-instrumented/chunk-VJLNG5UH.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["src/app/features/ward-management/components/assign-ward-dialog-component/assign-ward-dialog-component.ts", "src/app/features/ward-management/components/assign-ward-dialog-component/assign-ward-dialog-component.html", "src/app/features/ward-management/components/assign-operator-dialog-component/assign-operator-dialog-component.ts", "src/app/features/ward-management/components/assign-operator-dialog-component/assign-operator-dialog-component.html", "src/app/features/ward-management/components/ward-form-dialog-component/ward-form-dialog-component.ts", "src/app/features/ward-management/components/ward-form-dialog-component/ward-form-dialog-component.html", "src/app/features/ward-management/components/ward-management-page-component/ward-management-page-component.ts", "src/app/features/ward-management/components/ward-management-page-component/ward-management-page-component.html"], + "sourcesContent": ["import { ChangeDetectionStrategy, Component, OnInit, inject, input, output } from '@angular/core';\nimport { FormBuilder, ReactiveFormsModule, Validators } from '@angular/forms';\nimport type { Plant } from '../../models/plant.model';\nimport type { AssignPlantDto } from '../../models/ward-api.dto';\nimport type { Ward } from '../../models/ward.model';\n\n@Component({\n selector: 'app-assign-ward-dialog-component',\n imports: [ReactiveFormsModule],\n templateUrl: './assign-ward-dialog-component.html',\n styleUrl: './assign-ward-dialog-component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AssignWardDialogComponent implements OnInit {\n private readonly formBuilder = inject(FormBuilder);\n\n public readonly wardId = input(0);\n public readonly availableWards = input([]);\n public readonly availablePlants = input([]);\n public readonly submitted = output();\n public readonly cancelled = output();\n\n public readonly form = this.formBuilder.group({\n plantId: this.formBuilder.control(null, { validators: [Validators.required] }),\n });\n\n public ngOnInit(): void {\n this.form.reset({ plantId: null });\n }\n\n public onSubmit(): void {\n if (this.form.invalid) {\n this.form.markAllAsTouched();\n return;\n }\n\n const plantId = this.form.controls.plantId.value;\n if (plantId === null) {\n return;\n }\n\n this.submitted.emit({ plantId });\n }\n\n public onCancel(): void {\n this.cancelled.emit();\n }\n}\n", "\n\n \n
\n
\n
\n \n \n \n
\n
\n

\n Assegna appartamento\n

\n

Seleziona un appartamento non ancora assegnato

\n
\n
\n \n
\n\n \n
\n\n \n
\n \n \n \n Reparto: {{ wardId() }}\n
\n\n
\n
\n \n \n

Campo obbligatorio.

\n
\n\n @if (form.controls.plantId.touched && form.controls.plantId.invalid) {\n

\n \n \n \n Seleziona un appartamento.\n

\n }\n
\n
\n\n \n
\n \n \n
\n\n
", "import { ChangeDetectionStrategy, Component, OnInit, inject, input, output } from '@angular/core';\nimport { FormBuilder, ReactiveFormsModule, Validators } from '@angular/forms';\nimport type { User } from '../../../../core/models/user.model';\nimport type { AssignOperatorDto } from '../../models/ward-api.dto';\nimport type { Ward } from '../../models/ward.model';\n\n@Component({\n selector: 'app-assign-operator-dialog-component',\n imports: [ReactiveFormsModule],\n templateUrl: './assign-operator-dialog-component.html',\n styleUrl: './assign-operator-dialog-component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AssignOperatorDialogComponent implements OnInit {\n private readonly formBuilder = inject(FormBuilder);\n\n public readonly wardId = input(0);\n public readonly availableWards = input([]);\n public readonly availableOperators = input([]);\n public readonly submitted = output();\n public readonly cancelled = output();\n\n public readonly form = this.formBuilder.group({\n userId: this.formBuilder.control(null, { validators: [Validators.required] }),\n });\n\n public ngOnInit(): void {\n this.form.reset({ userId: null });\n }\n\n public onSubmit(): void {\n if (this.form.invalid) {\n this.form.markAllAsTouched();\n return;\n }\n\n this.submitted.emit({ userId: this.form.controls.userId.value as number });\n }\n\n public onCancel(): void {\n this.cancelled.emit();\n }\n\n public getOperatorLabel(operator: User): string {\n const fullName = `${operator.firstName} ${operator.lastName}`.trim();\n return fullName || operator.username;\n }\n}\n", "\n\n \n
\n
\n
\n \n \n \n
\n
\n

\n Assegna operatore sanitario\n

\n

Seleziona un operatore dall'elenco disponibile.

\n
\n
\n \n
\n\n \n
\n\n \n
\n \n \n \n Reparto: {{ wardId() }}\n
\n\n
\n
\n \n \n

Campo obbligatorio.

\n
\n\n @if (form.controls.userId.touched && form.controls.userId.invalid) {\n

\n \n \n \n Seleziona un operatore.\n

\n }\n
\n
\n\n \n
\n \n \n
\n\n
", "import { ChangeDetectionStrategy, Component, computed, effect, inject, input, output } from '@angular/core';\nimport { FormBuilder, ReactiveFormsModule, Validators } from '@angular/forms';\nimport type { CreateWardDto } from '../../models/ward-api.dto';\nimport type { Ward } from '../../models/ward.model';\n\n@Component({\n selector: 'app-ward-form-dialog-component',\n imports: [ReactiveFormsModule],\n templateUrl: './ward-form-dialog-component.html',\n styleUrl: './ward-form-dialog-component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class WardFormDialogComponent {\n private readonly formBuilder = inject(FormBuilder);\n\n public readonly ward = input(null);\n public readonly submitted = output();\n public readonly cancelled = output();\n\n public readonly form = this.formBuilder.nonNullable.group({\n name: ['', [Validators.required, Validators.maxLength(100)]],\n });\n\n private readonly syncFormWithWard = effect(() => {\n const ward = this.ward();\n this.form.patchValue({ name: ward?.name ?? '' }, { emitEvent: false });\n });\n\n public readonly isEditMode = computed(() => this.ward() !== null);\n\n public onSubmit(): void {\n if (this.form.invalid) {\n this.form.markAllAsTouched();\n return;\n }\n\n const dto: CreateWardDto = { name: this.form.controls.name.value.trim() };\n this.submitted.emit(dto);\n }\n\n public onCancel(): void {\n this.cancelled.emit();\n }\n}\n", "\n\n \n
\n
\n
\n \n @if (isEditMode()) {\n \n } @else {\n \n }\n \n
\n
\n

\n {{ isEditMode() ? 'Modifica reparto' : 'Crea reparto' }}\n

\n

Compila il nome del reparto e conferma.

\n
\n
\n \n
\n\n \n
\n
\n \n \n

Campo obbligatorio. Massimo 100 caratteri.

\n\n @if (form.controls.name.touched && form.controls.name.invalid) {\n

\n \n \n \n \n @if (form.controls.name.errors?.['required']) { Il nome reparto è obbligatorio. }\n @if (form.controls.name.errors?.['maxlength']) { Il nome non può superare 100 caratteri. }\n \n

\n }\n
\n
\n\n \n
\n \n \n
\n\n
", "import { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, OnDestroy, OnInit, computed, inject, signal } from '@angular/core';\nimport { Subject, takeUntil } from 'rxjs';\nimport type { Plant } from '../../models/plant.model';\nimport type { AssignPlantDto, AssignOperatorDto, CreateWardDto, UpdateWardDto } from '../../models/ward-api.dto';\nimport type { RemovePlantEvent, RemoveOperatorEvent } from '../../models/ward-management.events';\nimport type { Ward } from '../../models/ward.model';\nimport type { User } from '../../../../core/models/user.model';\nimport { ConfirmDialogComponent } from '../../../../shared/components/confirm-dialog/confirm-dialog.component';\nimport { WardManagementStore } from '../../services/ward-management.store';\nimport { AssignWardDialogComponent } from '../assign-ward-dialog-component/assign-ward-dialog-component';\nimport { AssignOperatorDialogComponent } from '../assign-operator-dialog-component/assign-operator-dialog-component';\nimport { WardFormDialogComponent } from '../ward-form-dialog-component/ward-form-dialog-component';\n\n@Component({\n selector: 'app-ward-management-page-component',\n imports: [\n AsyncPipe,\n WardFormDialogComponent,\n AssignOperatorDialogComponent,\n AssignWardDialogComponent,\n ConfirmDialogComponent,\n ],\n templateUrl: './ward-management-page-component.html',\n styleUrl: './ward-management-page-component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class WardManagementPageComponent implements OnInit, OnDestroy {\n private readonly store = inject(WardManagementStore);\n private readonly destroy$ = new Subject();\n\n public readonly wards$ = this.store.wards$;\n public readonly isLoading$ = this.store.isLoading$;\n public readonly error$ = this.store.error$;\n\n public readonly snackbarMessage = signal(null);\n public readonly wardDialogMode = signal<'closed' | 'create' | 'edit'>('closed');\n public readonly selectedWardId = signal(null);\n public readonly selectedApartmentId = signal(null);\n public readonly mobileStep = signal<'wards' | 'apartments' | 'operators'>('wards');\n public readonly operatorWardId = signal(null);\n public readonly availableOperatorsFromFetch = signal(null);\n public readonly isLoadingAvailableOperators = signal(false);\n public readonly plantWardId = signal(null);\n public readonly availablePlantsFromFetch = signal(null);\n public readonly isLoadingAvailablePlants = signal(false);\n public readonly confirmState = signal<\n | { kind: 'delete-ward'; wardId: number }\n | { kind: 'remove-operator'; wardId: number; userId: number }\n | { kind: 'remove-plant'; wardId: number; plantId: string }\n | null\n >(null);\n\n public readonly wardsSnapshot = signal([]);\n public readonly selectedWard = computed(() => {\n const wardId = this.selectedWardId();\n if (!wardId) {\n return null;\n }\n\n return this.wardsSnapshot().find((ward) => ward.id === wardId) ?? null;\n });\n\n public readonly selectedApartment = computed(() => {\n const apartmentId = this.selectedApartmentId();\n const ward = this.selectedWard();\n if (!apartmentId || !ward) {\n return null;\n }\n\n return ward.apartments.find((apartment) => apartment.id === apartmentId) ?? null;\n });\n\n public readonly wardDialogValue = computed(() => {\n if (this.wardDialogMode() !== 'edit') {\n return null;\n }\n\n return this.selectedWard();\n });\n\n public readonly availablePlants = computed(() => {\n const fetchedPlants = this.availablePlantsFromFetch();\n if (fetchedPlants !== null) {\n return fetchedPlants;\n }\n\n // Without backend response, we cannot reliably infer global unassigned plants.\n return [];\n });\n\n public readonly availableOperators = computed(() => {\n const fetchedOperators = this.availableOperatorsFromFetch();\n if (fetchedOperators !== null) {\n return fetchedOperators;\n }\n\n // Without backend response, we cannot reliably infer global unassigned operators.\n return [];\n });\n\n public ngOnInit(): void {\n this.store.loadWards();\n\n this.wards$.pipe(takeUntil(this.destroy$)).subscribe((wards) => {\n this.wardsSnapshot.set(wards);\n\n if (wards.length === 0) {\n this.selectedWardId.set(null);\n this.selectedApartmentId.set(null);\n this.mobileStep.set('wards');\n return;\n }\n\n const selectedWardId = this.selectedWardId();\n const selectedWardExists = selectedWardId !== null && wards.some((ward) => ward.id === selectedWardId);\n\n if (!selectedWardExists) {\n this.selectedWardId.set(wards[0].id);\n this.selectedApartmentId.set(null);\n }\n\n const selectedApartmentId = this.selectedApartmentId();\n if (selectedApartmentId !== null) {\n const activeWard = wards.find((ward) => ward.id === this.selectedWardId());\n const apartmentStillExists = activeWard?.apartments.some((apartment) => apartment.id === selectedApartmentId) ?? false;\n if (!apartmentStillExists) {\n this.selectedApartmentId.set(null);\n }\n }\n });\n\n this.error$.pipe(takeUntil(this.destroy$)).subscribe((message) => {\n this.snackbarMessage.set(message);\n });\n }\n\n public ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n public dismissSnackbar(): void {\n this.snackbarMessage.set(null);\n }\n\n public selectWard(wardId: number): void {\n if (this.selectedWardId() === wardId) {\n this.mobileStep.set('apartments');\n return;\n }\n\n this.selectedWardId.set(wardId);\n this.selectedApartmentId.set(null);\n this.mobileStep.set('apartments');\n }\n\n public selectApartment(apartmentId: string): void {\n this.selectedApartmentId.set(apartmentId);\n }\n\n public showWardListStep(): void {\n this.mobileStep.set('wards');\n }\n\n public showApartmentsStep(): void {\n this.mobileStep.set('apartments');\n }\n\n public showOperatorsStep(): void {\n this.mobileStep.set('operators');\n }\n\n public onCreateWard(): void {\n this.wardDialogMode.set('create');\n }\n\n public onCreateWardSubmit(dto: CreateWardDto): void {\n this.store.createWard(dto);\n this.wardDialogMode.set('closed');\n }\n\n public onEditWard(ward: Ward): void {\n this.selectedWardId.set(ward.id);\n this.wardDialogMode.set('edit');\n }\n\n public onEditSelectedWard(): void {\n const ward = this.selectedWard();\n if (!ward) {\n return;\n }\n\n this.onEditWard(ward);\n }\n\n public onEditWardSubmit(dto: UpdateWardDto): void {\n const ward = this.selectedWard();\n if (!ward) {\n return;\n }\n\n this.store.updateWard(ward.id, dto);\n this.wardDialogMode.set('closed');\n }\n\n public onCloseWardDialog(): void {\n this.wardDialogMode.set('closed');\n }\n\n public onDeleteWard(wardId: number): void {\n this.confirmState.set({ kind: 'delete-ward', wardId });\n }\n\n public onAssignOperator(wardId: number): void {\n this.operatorWardId.set(wardId);\n this.availableOperatorsFromFetch.set(null);\n this.isLoadingAvailableOperators.set(true);\n\n this.store.getAvailableUsersForWard(wardId).pipe(takeUntil(this.destroy$)).subscribe((users) => {\n this.availableOperatorsFromFetch.set(users);\n this.isLoadingAvailableOperators.set(false);\n });\n }\n\n public onAssignOperatorSubmit(dto: AssignOperatorDto): void {\n const wardId = this.operatorWardId();\n if (!wardId) {\n return;\n }\n\n this.store.assignOperator(wardId, dto);\n this.operatorWardId.set(null);\n this.availableOperatorsFromFetch.set(null);\n this.isLoadingAvailableOperators.set(false);\n }\n\n public onCloseAssignOperatorDialog(): void {\n this.operatorWardId.set(null);\n this.availableOperatorsFromFetch.set(null);\n this.isLoadingAvailableOperators.set(false);\n }\n\n public onRemoveOperator(event: RemoveOperatorEvent): void {\n this.confirmState.set({ kind: 'remove-operator', wardId: event.wardId, userId: event.userId });\n }\n\n public onAssignPlant(wardId: number): void {\n this.plantWardId.set(wardId);\n this.availablePlantsFromFetch.set(null);\n this.isLoadingAvailablePlants.set(true);\n\n this.store.getAvailablePlantsForWard(wardId).pipe(takeUntil(this.destroy$)).subscribe((plants) => {\n this.availablePlantsFromFetch.set(plants);\n this.isLoadingAvailablePlants.set(false);\n });\n }\n\n public onAssignPlantSubmit(dto: AssignPlantDto): void {\n const wardId = this.plantWardId();\n if (!wardId) {\n return;\n }\n\n this.store.assignPlant(wardId, dto);\n this.plantWardId.set(null);\n }\n\n public onCloseAssignPlantDialog(): void {\n this.plantWardId.set(null);\n this.availablePlantsFromFetch.set(null);\n this.isLoadingAvailablePlants.set(false);\n }\n\n public onRemovePlant(event: RemovePlantEvent): void {\n this.confirmState.set({\n kind: 'remove-plant',\n wardId: event.wardId,\n plantId: event.plantId,\n });\n }\n\n public onConfirmDialogConfirmed(): void {\n const state = this.confirmState();\n if (!state) {\n return;\n }\n\n if (state.kind === 'delete-ward') {\n this.store.deleteWard(state.wardId);\n }\n\n if (state.kind === 'remove-operator') {\n this.store.removeOperator(state.wardId, state.userId);\n }\n\n if (state.kind === 'remove-plant') {\n this.store.removePlant(state.wardId, state.plantId);\n }\n\n this.confirmState.set(null);\n }\n\n public onConfirmDialogCancelled(): void {\n this.confirmState.set(null);\n }\n\n public getConfirmMessage(): string {\n const state = this.confirmState();\n if (!state) {\n return 'Confermi questa operazione?';\n }\n\n if (state.kind === 'delete-ward') {\n return 'Confermi l\\'eliminazione del reparto?';\n }\n\n if (state.kind === 'remove-operator') {\n return 'Confermi la rimozione dell\\'operatore dal reparto?';\n }\n\n return 'Confermi la rimozione dell\\'appartamento dal reparto?';\n }\n\n public getConfirmLabel(): string {\n const state = this.confirmState();\n if (!state) {\n return 'Conferma';\n }\n\n if (state.kind === 'remove-operator' || state.kind === 'remove-plant') {\n return 'Rimuovi';\n }\n\n return 'Conferma';\n }\n\n public getOperatorDisplayName(firstName: string, lastName: string): string {\n return `${firstName} ${lastName}`.trim();\n }\n}\n", "
\n\n \n
\n
\n
\n

Organizzazione

\n

Gestione reparti

\n

Navigazione a colonne: Reparti → Appartamenti → Operatori.

\n
\n
\n
\n
\n \n Sistema attivo\n
\n
\n
\n\n \n @if (snackbarMessage(); as errorMessage) {\n
\n
\n \n \n \n {{ errorMessage }}\n
\n \n
\n }\n\n \n @if (isLoading$ | async) {\n
\n
\n Caricamento in corso…\n
\n }\n\n @if (wards$ | async; as wards) {\n @if (wards.length === 0) {\n \n \n
\n \n \n \n
\n

Nessun reparto disponibile

\n

Crea il primo reparto dal pannello dei reparti a sinistra.

\n \n \n\n } @else {\n\n \n @if (selectedWard(); as activeWard) {\n
\n
\n \n \n \n
\n

\n Reparto attivo: {{ activeWard.name }}\n

\n
\n }\n\n \n
\n\n \n \n\n \n
\n\n @if (selectedWard(); as activeWard) {\n\n
\n
\n
\n Appartamenti\n

{{ activeWard.name }}

\n
\n
\n \n
\n
\n
\n\n
\n @if (activeWard.apartments.length === 0) {\n \n \n \n \n

Nessun appartamento assegnato

\n
\n } @else {\n
    \n @for (apartment of activeWard.apartments; track apartment.id) {\n
  • \n \n \n \n
\n \n }\n \n }\n \n\n } @else {\n
\n \n \n \n

Seleziona un reparto

\n

Gli appartamenti appariranno qui

\n
\n }\n
\n\n \n
\n\n @if (selectedWard(); as activeWard) {\n\n
\n
\n
\n Operatori\n

{{ activeWard.name }}

\n
\n \n
\n
\n\n
\n @if (activeWard.operators.length === 0) {\n \n \n \n \n

Nessun operatore assegnato

\n
\n } @else {\n
    \n @for (operator of activeWard.operators; track operator.id) {\n
  • \n \n
    \n \n {{ operator.firstName[0] }}{{ operator.lastName[0] }}\n
    \n {{ getOperatorDisplayName(operator.firstName,\n operator.lastName) }}\n \n \n \n
  • \n }\n
\n }\n \n\n } @else {\n
\n \n \n \n

Seleziona un reparto

\n

Gli operatori appariranno qui

\n
\n }\n
\n\n \n\n } \n\n } \n\n \n @if (wardDialogMode() !== 'closed') {\n \n }\n @if (operatorWardId(); as activeWardId) {\n \n }\n @if (plantWardId(); as activeWardId) {\n \n }\n @if (confirmState()) {\n \n }\n\n"], + "mappings": "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", + "names": ["\u0275\u0275elementStart", "\u0275\u0275text", "\u0275\u0275elementEnd", "\u0275\u0275property", "apartment_r1", "id", "\u0275\u0275advance", "\u0275\u0275textInterpolate", "name", "\u0275\u0275element", "AssignWardDialogComponent", "formBuilder", "inject", "FormBuilder", "wardId", "input", "availableWards", "availablePlants", "submitted", "output", "cancelled", "form", "group", "plantId", "control", "validators", "Validators", "required", "ngOnInit", "reset", "onSubmit", "invalid", "markAllAsTouched", "controls", "value", "emit", "onCancel", "selectors", "inputs", "outputs", "decls", "vars", "consts", "template", "rf", "ctx", "\u0275\u0275listener", "\u0275\u0275repeaterCreate", "AssignWardDialogComponent_For_31_Template", "_forTrack0", "\u0275\u0275conditionalCreate", "AssignWardDialogComponent_Conditional_34_Template", "\u0275\u0275repeater", "\u0275\u0275conditional", "touched", "ReactiveFormsModule", "\u0275NgNoValidate", "NgSelectOption", "\u0275NgSelectMultipleOption", "SelectControlValueAccessor", "NgControlStatus", "NgControlStatusGroup", "FormGroupDirective", "FormControlName", "encapsulation", "changeDetection", "\u0275\u0275elementStart", "\u0275\u0275text", "\u0275\u0275elementEnd", "\u0275\u0275property", "operator_r1", "id", "\u0275\u0275advance", "\u0275\u0275textInterpolate", "ctx_r1", "getOperatorLabel", "\u0275\u0275element", "AssignOperatorDialogComponent", "formBuilder", "inject", "FormBuilder", "wardId", "input", "availableWards", "availableOperators", "submitted", "output", "cancelled", "form", "group", "userId", "control", "validators", "Validators", "required", "ngOnInit", "reset", "onSubmit", "invalid", "markAllAsTouched", "emit", "controls", "value", "onCancel", "operator", "firstName", "lastName", "trim", "username", "selectors", "inputs", "outputs", "decls", "vars", "consts", "template", "rf", "ctx", "\u0275\u0275listener", "\u0275\u0275repeaterCreate", "AssignOperatorDialogComponent_For_31_Template", "_forTrack0", "\u0275\u0275conditionalCreate", "AssignOperatorDialogComponent_Conditional_34_Template", "\u0275\u0275repeater", "\u0275\u0275conditional", "touched", "ReactiveFormsModule", "\u0275NgNoValidate", "NgSelectOption", "\u0275NgSelectMultipleOption", "SelectControlValueAccessor", "NgControlStatus", "NgControlStatusGroup", "FormGroupDirective", "FormControlName", "encapsulation", "changeDetection", "\u0275\u0275element", "\u0275\u0275text", "\u0275\u0275elementStart", "\u0275\u0275elementEnd", "\u0275\u0275conditionalCreate", "WardFormDialogComponent_Conditional_24_Conditional_4_Template", "WardFormDialogComponent_Conditional_24_Conditional_5_Template", "\u0275\u0275advance", "\u0275\u0275conditional", "ctx_r0", "form", "controls", "name", "errors", "WardFormDialogComponent", "formBuilder", "inject", "FormBuilder", "ward", "input", "submitted", "output", "cancelled", "nonNullable", "group", "Validators", "required", "maxLength", "syncFormWithWard", "effect", "patchValue", "emitEvent", "isEditMode", "computed", "onSubmit", "invalid", "markAllAsTouched", "dto", "value", "trim", "emit", "onCancel", "selectors", "inputs", "outputs", "decls", "vars", "consts", "template", "rf", "ctx", "WardFormDialogComponent_Conditional_5_Template", "WardFormDialogComponent_Conditional_6_Template", "\u0275\u0275listener", "WardFormDialogComponent_Conditional_24_Template", "\u0275\u0275classMap", "\u0275\u0275textInterpolate1", "\u0275\u0275property", "touched", "ReactiveFormsModule", "\u0275NgNoValidate", "DefaultValueAccessor", "NgControlStatus", "NgControlStatusGroup", "MaxLengthValidator", "FormGroupDirective", "FormControlName", "styles", "changeDetection", "\u0275\u0275elementStart", "\u0275\u0275element", "\u0275\u0275elementEnd", "\u0275\u0275text", "\u0275\u0275listener", "\u0275\u0275restoreView", "_r1", "ctx_r1", "\u0275\u0275nextContext", "\u0275\u0275resetView", "dismissSnackbar", "\u0275\u0275advance", "\u0275\u0275textInterpolate", "ctx", "_r3", "onCreateWard", "_r5", "showWardListStep", "showApartmentsStep", "showOperatorsStep", "\u0275\u0275classMap", "mobileStep", "name", "ward_r7", "_r6", "$implicit", "selectWard", "id", "selectedWardId", "\u0275\u0275textInterpolate1", "apartments", "length", "apartment_r11", "_r10", "selectApartment", "activeWard_r9", "onRemovePlant", "wardId", "plantId", "selectedApartmentId", "\u0275\u0275repeaterCreate", "WardManagementPageComponent_Conditional_17_Conditional_1_Conditional_26_Conditional_15_For_2_Template", "_forTrack0", "\u0275\u0275repeater", "_r8", "onAssignPlant", "\u0275\u0275conditionalCreate", "WardManagementPageComponent_Conditional_17_Conditional_1_Conditional_26_Conditional_14_Template", "WardManagementPageComponent_Conditional_17_Conditional_1_Conditional_26_Conditional_15_Template", "\u0275\u0275conditional", "operator_r15", "_r14", "activeWard_r13", "onRemoveOperator", "userId", "\u0275\u0275textInterpolate2", "firstName", "lastName", "getOperatorDisplayName", "WardManagementPageComponent_Conditional_17_Conditional_1_Conditional_29_Conditional_14_For_2_Template", "operators", "_r12", "onAssignOperator", "WardManagementPageComponent_Conditional_17_Conditional_1_Conditional_29_Conditional_13_Template", "WardManagementPageComponent_Conditional_17_Conditional_1_Conditional_29_Conditional_14_Template", "WardManagementPageComponent_Conditional_17_Conditional_1_Conditional_0_Template", "_r4", "onDeleteWard", "selectedWard", "onEditSelectedWard", "WardManagementPageComponent_Conditional_17_Conditional_1_For_24_Template", "WardManagementPageComponent_Conditional_17_Conditional_1_Conditional_26_Template", "WardManagementPageComponent_Conditional_17_Conditional_1_Conditional_27_Template", "WardManagementPageComponent_Conditional_17_Conditional_1_Conditional_29_Template", "WardManagementPageComponent_Conditional_17_Conditional_1_Conditional_30_Template", "tmp_3_0", "\u0275\u0275classProp", "\u0275\u0275property", "wards_r16", "tmp_9_0", "tmp_11_0", "WardManagementPageComponent_Conditional_17_Conditional_0_Template", "WardManagementPageComponent_Conditional_17_Conditional_1_Template", "$event", "_r17", "wardDialogMode", "onCreateWardSubmit", "onEditWardSubmit", "onCloseWardDialog", "wardDialogValue", "_r18", "onAssignOperatorSubmit", "onCloseAssignOperatorDialog", "wardsSnapshot", "availableOperators", "_r19", "onAssignPlantSubmit", "onCloseAssignPlantDialog", "availablePlants", "_r20", "onConfirmDialogConfirmed", "onConfirmDialogCancelled", "getConfirmMessage", "getConfirmLabel", "WardManagementPageComponent", "store", "inject", "WardManagementStore", "destroy$", "Subject", "wards$", "isLoading$", "error$", "snackbarMessage", "signal", "operatorWardId", "availableOperatorsFromFetch", "isLoadingAvailableOperators", "plantWardId", "availablePlantsFromFetch", "isLoadingAvailablePlants", "confirmState", "computed", "find", "ward", "selectedApartment", "apartmentId", "apartment", "fetchedPlants", "fetchedOperators", "ngOnInit", "loadWards", "pipe", "takeUntil", "subscribe", "wards", "set", "some", "message", "ngOnDestroy", "next", "complete", "dto", "createWard", "onEditWard", "updateWard", "kind", "getAvailableUsersForWard", "users", "assignOperator", "event", "getAvailablePlantsForWard", "plants", "assignPlant", "state", "deleteWard", "removeOperator", "removePlant", "trim", "selectors", "decls", "vars", "consts", "template", "rf", "WardManagementPageComponent_Conditional_14_Template", "WardManagementPageComponent_Conditional_15_Template", "WardManagementPageComponent_Conditional_17_Template", "WardManagementPageComponent_Conditional_19_Template", "WardManagementPageComponent_Conditional_20_Template", "WardManagementPageComponent_Conditional_21_Template", "WardManagementPageComponent_Conditional_22_Template", "tmp_0_0", "\u0275\u0275pipeBind1", "tmp_2_0", "tmp_4_0", "tmp_5_0", "WardFormDialogComponent", "AssignOperatorDialogComponent", "AssignWardDialogComponent", "ConfirmDialogComponent", "AsyncPipe", "styles", "changeDetection"] +} diff --git a/frontend/dist-instrumented/chunk-VKIXOKIV.js b/frontend/dist-instrumented/chunk-VKIXOKIV.js new file mode 100644 index 00000000..2313ce65 --- /dev/null +++ b/frontend/dist-instrumented/chunk-VKIXOKIV.js @@ -0,0 +1,4 @@ +function cov_iozu183h3(){var path="/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-VKIXOKIV.js";var hash="40ae34738178f53f7310df448215c239eec5bbfb";var global=new Function("return this")();var gcv="__coverage__";var coverageData={path:"/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-VKIXOKIV.js",statementMap:{"0":{start:{line:1,column:460},end:{line:1,column:503}},"1":{start:{line:1,column:520},end:{line:1,column:575}},"2":{start:{line:1,column:592},end:{line:1,column:847}},"3":{start:{line:1,column:648},end:{line:1,column:651}},"4":{start:{line:1,column:652},end:{line:1,column:846}},"5":{start:{line:1,column:864},end:{line:1,column:908}},"6":{start:{line:1,column:925},end:{line:1,column:982}},"7":{start:{line:1,column:999},end:{line:1,column:1255}},"8":{start:{line:1,column:1056},end:{line:1,column:1059}},"9":{start:{line:1,column:1060},end:{line:1,column:1254}},"10":{start:{line:1,column:1272},end:{line:1,column:1345}},"11":{start:{line:1,column:1314},end:{line:1,column:1317}},"12":{start:{line:1,column:1318},end:{line:1,column:1344}},"13":{start:{line:1,column:1352},end:{line:2,column:73}},"14":{start:{line:1,column:1379},end:{line:1,column:1383}},"15":{start:{line:1,column:1394},end:{line:1,column:1507}},"16":{start:{line:1,column:1528},end:{line:1,column:1572}},"17":{start:{line:1,column:1593},end:{line:1,column:1637}},"18":{start:{line:1,column:1649},end:{line:1,column:1757}},"19":{start:{line:1,column:1716},end:{line:1,column:1750}},"20":{start:{line:1,column:1750},end:{line:1,column:1756}},"21":{start:{line:1,column:1757},end:{line:1,column:1795}},"22":{start:{line:1,column:1822},end:{line:1,column:1850}},"23":{start:{line:1,column:1851},end:{line:1,column:1970}},"24":{start:{line:1,column:1899},end:{line:1,column:1938}},"25":{start:{line:1,column:1949},end:{line:1,column:1968}},"26":{start:{line:1,column:2006},end:{line:1,column:2036}},"27":{start:{line:1,column:2029},end:{line:1,column:2036}},"28":{start:{line:1,column:2042},end:{line:1,column:2074}},"29":{start:{line:1,column:2077},end:{line:1,column:2109}},"30":{start:{line:1,column:2110},end:{line:1,column:2195}},"31":{start:{line:1,column:2129},end:{line:1,column:2164}},"32":{start:{line:1,column:2165},end:{line:1,column:2194}},"33":{start:{line:1,column:2195},end:{line:1,column:2280}},"34":{start:{line:1,column:2214},end:{line:1,column:2249}},"35":{start:{line:1,column:2250},end:{line:1,column:2279}},"36":{start:{line:1,column:2298},end:{line:1,column:2359}},"37":{start:{line:1,column:2310},end:{line:1,column:2355}},"38":{start:{line:1,column:2329},end:{line:1,column:2354}},"39":{start:{line:1,column:2377},end:{line:2,column:60}},"40":{start:{line:1,column:3213},end:{line:1,column:4500}},"41":{start:{line:1,column:3478},end:{line:1,column:3497}},"42":{start:{line:2,column:61},end:{line:2,column:69}}},fnMap:{"0":{name:"k",decl:{start:{line:1,column:453},end:{line:1,column:454}},loc:{start:{line:1,column:459},end:{line:1,column:504}},line:1},"1":{name:"N",decl:{start:{line:1,column:513},end:{line:1,column:514}},loc:{start:{line:1,column:519},end:{line:1,column:576}},line:1},"2":{name:"T",decl:{start:{line:1,column:585},end:{line:1,column:586}},loc:{start:{line:1,column:591},end:{line:1,column:848}},line:1},"3":{name:"G",decl:{start:{line:1,column:857},end:{line:1,column:858}},loc:{start:{line:1,column:863},end:{line:1,column:909}},line:1},"4":{name:"I",decl:{start:{line:1,column:918},end:{line:1,column:919}},loc:{start:{line:1,column:924},end:{line:1,column:983}},line:1},"5":{name:"V",decl:{start:{line:1,column:992},end:{line:1,column:993}},loc:{start:{line:1,column:998},end:{line:1,column:1256}},line:1},"6":{name:"B",decl:{start:{line:1,column:1265},end:{line:1,column:1266}},loc:{start:{line:1,column:1271},end:{line:1,column:1346}},line:1},"7":{name:"(anonymous_7)",decl:{start:{line:1,column:1353},end:{line:1,column:1354}},loc:{start:{line:1,column:1357},end:{line:2,column:70}},line:1},"8":{name:"(anonymous_8)",decl:{start:{line:1,column:1508},end:{line:1,column:1509}},loc:{start:{line:1,column:1527},end:{line:1,column:1573}},line:1},"9":{name:"(anonymous_9)",decl:{start:{line:1,column:1573},end:{line:1,column:1574}},loc:{start:{line:1,column:1592},end:{line:1,column:1638}},line:1},"10":{name:"(anonymous_10)",decl:{start:{line:1,column:1638},end:{line:1,column:1639}},loc:{start:{line:1,column:1648},end:{line:1,column:1971}},line:1},"11":{name:"(anonymous_11)",decl:{start:{line:1,column:1895},end:{line:1,column:1896}},loc:{start:{line:1,column:1898},end:{line:1,column:1939}},line:1},"12":{name:"(anonymous_12)",decl:{start:{line:1,column:1946},end:{line:1,column:1947}},loc:{start:{line:1,column:1949},end:{line:1,column:1968}},line:1},"13":{name:"(anonymous_13)",decl:{start:{line:1,column:1971},end:{line:1,column:1972}},loc:{start:{line:1,column:2005},end:{line:1,column:2281}},line:1},"14":{name:"(anonymous_14)",decl:{start:{line:1,column:2299},end:{line:1,column:2300}},loc:{start:{line:1,column:2303},end:{line:1,column:2356}},line:1},"15":{name:"(anonymous_15)",decl:{start:{line:1,column:2317},end:{line:1,column:2318}},loc:{start:{line:1,column:2328},end:{line:1,column:2355}},line:1},"16":{name:"(anonymous_16)",decl:{start:{line:1,column:3199},end:{line:1,column:3200}},loc:{start:{line:1,column:3212},end:{line:1,column:4501}},line:1},"17":{name:"(anonymous_17)",decl:{start:{line:1,column:3467},end:{line:1,column:3468}},loc:{start:{line:1,column:3477},end:{line:1,column:3498}},line:1}},branchMap:{"0":{loc:{start:{line:1,column:460},end:{line:1,column:503}},type:"binary-expr",locations:[{start:{line:1,column:460},end:{line:1,column:463}},{start:{line:1,column:465},end:{line:1,column:503}}],line:1},"1":{loc:{start:{line:1,column:520},end:{line:1,column:575}},type:"binary-expr",locations:[{start:{line:1,column:520},end:{line:1,column:523}},{start:{line:1,column:525},end:{line:1,column:575}}],line:1},"2":{loc:{start:{line:1,column:592},end:{line:1,column:847}},type:"if",locations:[{start:{line:1,column:592},end:{line:1,column:847}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"3":{loc:{start:{line:1,column:595},end:{line:1,column:636}},type:"binary-expr",locations:[{start:{line:1,column:595},end:{line:1,column:598}},{start:{line:1,column:601},end:{line:1,column:635}}],line:1},"4":{loc:{start:{line:1,column:658},end:{line:1,column:845}},type:"cond-expr",locations:[{start:{line:1,column:748},end:{line:1,column:749}},{start:{line:1,column:750},end:{line:1,column:845}}],line:1},"5":{loc:{start:{line:1,column:658},end:{line:1,column:747}},type:"binary-expr",locations:[{start:{line:1,column:658},end:{line:1,column:700}},{start:{line:1,column:702},end:{line:1,column:747}}],line:1},"6":{loc:{start:{line:1,column:750},end:{line:1,column:845}},type:"cond-expr",locations:[{start:{line:1,column:841},end:{line:1,column:842}},{start:{line:1,column:843},end:{line:1,column:845}}],line:1},"7":{loc:{start:{line:1,column:750},end:{line:1,column:840}},type:"binary-expr",locations:[{start:{line:1,column:750},end:{line:1,column:792}},{start:{line:1,column:794},end:{line:1,column:840}}],line:1},"8":{loc:{start:{line:1,column:864},end:{line:1,column:908}},type:"binary-expr",locations:[{start:{line:1,column:864},end:{line:1,column:867}},{start:{line:1,column:869},end:{line:1,column:908}}],line:1},"9":{loc:{start:{line:1,column:925},end:{line:1,column:982}},type:"binary-expr",locations:[{start:{line:1,column:925},end:{line:1,column:928}},{start:{line:1,column:930},end:{line:1,column:982}}],line:1},"10":{loc:{start:{line:1,column:999},end:{line:1,column:1255}},type:"if",locations:[{start:{line:1,column:999},end:{line:1,column:1255}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"11":{loc:{start:{line:1,column:1002},end:{line:1,column:1044}},type:"binary-expr",locations:[{start:{line:1,column:1002},end:{line:1,column:1005}},{start:{line:1,column:1008},end:{line:1,column:1043}}],line:1},"12":{loc:{start:{line:1,column:1066},end:{line:1,column:1253}},type:"cond-expr",locations:[{start:{line:1,column:1156},end:{line:1,column:1157}},{start:{line:1,column:1158},end:{line:1,column:1253}}],line:1},"13":{loc:{start:{line:1,column:1066},end:{line:1,column:1155}},type:"binary-expr",locations:[{start:{line:1,column:1066},end:{line:1,column:1108}},{start:{line:1,column:1110},end:{line:1,column:1155}}],line:1},"14":{loc:{start:{line:1,column:1158},end:{line:1,column:1253}},type:"cond-expr",locations:[{start:{line:1,column:1249},end:{line:1,column:1250}},{start:{line:1,column:1251},end:{line:1,column:1253}}],line:1},"15":{loc:{start:{line:1,column:1158},end:{line:1,column:1248}},type:"binary-expr",locations:[{start:{line:1,column:1158},end:{line:1,column:1200}},{start:{line:1,column:1202},end:{line:1,column:1248}}],line:1},"16":{loc:{start:{line:1,column:1272},end:{line:1,column:1345}},type:"if",locations:[{start:{line:1,column:1272},end:{line:1,column:1345}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"17":{loc:{start:{line:1,column:1275},end:{line:1,column:1302}},type:"binary-expr",locations:[{start:{line:1,column:1275},end:{line:1,column:1278}},{start:{line:1,column:1281},end:{line:1,column:1301}}],line:1},"18":{loc:{start:{line:1,column:1649},end:{line:1,column:1757}},type:"if",locations:[{start:{line:1,column:1649},end:{line:1,column:1757}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"19":{loc:{start:{line:1,column:2006},end:{line:1,column:2036}},type:"if",locations:[{start:{line:1,column:2006},end:{line:1,column:2036}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"20":{loc:{start:{line:1,column:2110},end:{line:1,column:2195}},type:"if",locations:[{start:{line:1,column:2110},end:{line:1,column:2195}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"21":{loc:{start:{line:1,column:2165},end:{line:1,column:2194}},type:"binary-expr",locations:[{start:{line:1,column:2165},end:{line:1,column:2173}},{start:{line:1,column:2175},end:{line:1,column:2194}}],line:1},"22":{loc:{start:{line:1,column:2195},end:{line:1,column:2280}},type:"if",locations:[{start:{line:1,column:2195},end:{line:1,column:2280}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"23":{loc:{start:{line:1,column:2250},end:{line:1,column:2279}},type:"binary-expr",locations:[{start:{line:1,column:2250},end:{line:1,column:2258}},{start:{line:1,column:2260},end:{line:1,column:2279}}],line:1},"24":{loc:{start:{line:1,column:2336},end:{line:1,column:2347}},type:"binary-expr",locations:[{start:{line:1,column:2336},end:{line:1,column:2337}},{start:{line:1,column:2340},end:{line:1,column:2346}}],line:1},"25":{loc:{start:{line:1,column:2349},end:{line:1,column:2353}},type:"binary-expr",locations:[{start:{line:1,column:2349},end:{line:1,column:2350}},{start:{line:1,column:2352},end:{line:1,column:2353}}],line:1},"26":{loc:{start:{line:1,column:3213},end:{line:1,column:3700}},type:"binary-expr",locations:[{start:{line:1,column:3213},end:{line:1,column:3216}},{start:{line:1,column:3219},end:{line:1,column:3699}}],line:1},"27":{loc:{start:{line:1,column:3701},end:{line:1,column:4500}},type:"binary-expr",locations:[{start:{line:1,column:3701},end:{line:1,column:3704}},{start:{line:1,column:3707},end:{line:1,column:4499}}],line:1},"28":{loc:{start:{line:1,column:3762},end:{line:1,column:3838}},type:"binary-expr",locations:[{start:{line:1,column:3762},end:{line:1,column:3799}},{start:{line:1,column:3801},end:{line:1,column:3838}}],line:1},"29":{loc:{start:{line:1,column:3859},end:{line:1,column:3957}},type:"cond-expr",locations:[{start:{line:1,column:3936},end:{line:1,column:3952}},{start:{line:1,column:3953},end:{line:1,column:3957}}],line:1},"30":{loc:{start:{line:1,column:3859},end:{line:1,column:3935}},type:"binary-expr",locations:[{start:{line:1,column:3859},end:{line:1,column:3896}},{start:{line:1,column:3898},end:{line:1,column:3935}}],line:1},"31":{loc:{start:{line:1,column:3965},end:{line:1,column:4047}},type:"cond-expr",locations:[{start:{line:1,column:4042},end:{line:1,column:4044}},{start:{line:1,column:4045},end:{line:1,column:4047}}],line:1},"32":{loc:{start:{line:1,column:3965},end:{line:1,column:4041}},type:"binary-expr",locations:[{start:{line:1,column:3965},end:{line:1,column:4002}},{start:{line:1,column:4004},end:{line:1,column:4041}}],line:1},"33":{loc:{start:{line:1,column:4071},end:{line:1,column:4147}},type:"binary-expr",locations:[{start:{line:1,column:4071},end:{line:1,column:4108}},{start:{line:1,column:4110},end:{line:1,column:4147}}],line:1},"34":{loc:{start:{line:1,column:4168},end:{line:1,column:4266}},type:"cond-expr",locations:[{start:{line:1,column:4245},end:{line:1,column:4261}},{start:{line:1,column:4262},end:{line:1,column:4266}}],line:1},"35":{loc:{start:{line:1,column:4168},end:{line:1,column:4244}},type:"binary-expr",locations:[{start:{line:1,column:4168},end:{line:1,column:4205}},{start:{line:1,column:4207},end:{line:1,column:4244}}],line:1},"36":{loc:{start:{line:1,column:4274},end:{line:1,column:4356}},type:"cond-expr",locations:[{start:{line:1,column:4351},end:{line:1,column:4353}},{start:{line:1,column:4354},end:{line:1,column:4356}}],line:1},"37":{loc:{start:{line:1,column:4274},end:{line:1,column:4350}},type:"binary-expr",locations:[{start:{line:1,column:4274},end:{line:1,column:4311}},{start:{line:1,column:4313},end:{line:1,column:4350}}],line:1},"38":{loc:{start:{line:1,column:4375},end:{line:1,column:4407}},type:"binary-expr",locations:[{start:{line:1,column:4375},end:{line:1,column:4386}},{start:{line:1,column:4388},end:{line:1,column:4407}}],line:1},"39":{loc:{start:{line:1,column:4419},end:{line:1,column:4461}},type:"cond-expr",locations:[{start:{line:1,column:4431},end:{line:1,column:4452}},{start:{line:1,column:4453},end:{line:1,column:4461}}],line:1},"40":{loc:{start:{line:1,column:4473},end:{line:1,column:4498}},type:"cond-expr",locations:[{start:{line:1,column:4493},end:{line:1,column:4495}},{start:{line:1,column:4496},end:{line:1,column:4498}}],line:1}},s:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0},f:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0},b:{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0],"9":[0,0],"10":[0,0],"11":[0,0],"12":[0,0],"13":[0,0],"14":[0,0],"15":[0,0],"16":[0,0],"17":[0,0],"18":[0,0],"19":[0,0],"20":[0,0],"21":[0,0],"22":[0,0],"23":[0,0],"24":[0,0],"25":[0,0],"26":[0,0],"27":[0,0],"28":[0,0],"29":[0,0],"30":[0,0],"31":[0,0],"32":[0,0],"33":[0,0],"34":[0,0],"35":[0,0],"36":[0,0],"37":[0,0],"38":[0,0],"39":[0,0],"40":[0,0]},inputSourceMap:{version:3,sources:["src/app/features/user-auth/components/login/login.component.ts","src/app/features/user-auth/components/login/login.component.html"],sourcesContent:["import { Component, inject } from '@angular/core';\nimport { ReactiveFormsModule, Validators, FormBuilder } from '@angular/forms';\nimport { AuthBaseComponent } from '../auth-base/auth-base.component';\n\n@Component({\n selector: 'app-login',\n imports: [ReactiveFormsModule],\n templateUrl: './login.component.html',\n styleUrls: ['./login.component.css'],\n})\nexport class LoginComponent extends AuthBaseComponent {\n private readonly fb = inject(FormBuilder);\n\n public readonly loginForm = this.fb.nonNullable.group({\n username: ['', [Validators.required, Validators.minLength(3)]],\n password: ['', [Validators.required, Validators.minLength(12)]],\n });\n\n public override onUsernameChange(value: string): void {\n this.loginForm.controls.username.setValue(value);\n }\n\n public onPasswordChange(value: string): void {\n this.loginForm.controls.password.setValue(value);\n }\n\n public override onSubmit(): void {\n this.syncAutofilledCredentialsFromDom();\n\n if (this.loginForm.invalid) {\n this.loginForm.markAllAsTouched();\n return;\n }\n\n this.isLoading = true;\n this.errorType = null;\n\n const { username, password } = this.loginForm.getRawValue();\n\n this.authService.login(username, password).subscribe({\n next: (session) => {\n this.isLoading = false;\n this.handleSuccess(session);\n },\n error: (error) => this.handleError(error),\n });\n }\n\n private syncAutofilledCredentialsFromDom(): void {\n if (typeof document === 'undefined') {\n return;\n }\n\n const usernameControl = this.loginForm.controls.username;\n const passwordControl = this.loginForm.controls.password;\n\n if (!usernameControl.value) {\n const usernameInput = document.getElementById('username') as HTMLInputElement | null;\n if (usernameInput?.value) {\n usernameControl.setValue(usernameInput.value);\n }\n }\n\n if (!passwordControl.value) {\n const passwordInput = document.getElementById('password') as HTMLInputElement | null;\n if (passwordInput?.value) {\n passwordControl.setValue(passwordInput.value);\n }\n }\n }\n}\n","
\n
\n
\n\n
\n

Area Riservata

\n

Benvenuto su View4Life

\n

Accedi con le tue credenziali per gestire monitoraggio e allarmi

\n\n
\n \n \n\n @if (loginForm.controls.username.touched && loginForm.controls.username.invalid) {\n

\n @if (loginForm.controls.username.errors?.['required']) {\n L'username \xE8 obbligatorio.\n } @else if (loginForm.controls.username.errors?.['minlength']) {\n L'username deve avere almeno 3 caratteri.\n }\n

\n }\n\n \n \n\n @if (loginForm.controls.password.touched && loginForm.controls.password.invalid) {\n

\n @if (loginForm.controls.password.errors?.['required']) {\n La password \xE8 obbligatoria.\n } @else if (loginForm.controls.password.errors?.['minlength']) {\n La password deve avere almeno 12 caratteri.\n }\n

\n }\n\n \n\n @if (loginErrorMessage) {\n

{{ loginErrorMessage }}

\n }\n
\n
\n
"],mappings:"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",names:["\u0275\u0275text","\u0275\u0275elementStart","\u0275\u0275conditionalCreate","LoginComponent_Conditional_14_Conditional_1_Template","LoginComponent_Conditional_14_Conditional_2_Template","\u0275\u0275elementEnd","\u0275\u0275advance","\u0275\u0275conditional","ctx_r0","loginForm","controls","username","errors","LoginComponent_Conditional_18_Conditional_1_Template","LoginComponent_Conditional_18_Conditional_2_Template","password","\u0275\u0275textInterpolate","loginErrorMessage","LoginComponent","AuthBaseComponent","fb","inject","FormBuilder","nonNullable","group","Validators","required","minLength","onUsernameChange","value","setValue","onPasswordChange","onSubmit","syncAutofilledCredentialsFromDom","invalid","markAllAsTouched","isLoading","errorType","getRawValue","authService","login","subscribe","next","session","handleSuccess","error","handleError","document","usernameControl","passwordControl","usernameInput","getElementById","passwordInput","__ngFactoryType__","selectors","features","\u0275\u0275InheritDefinitionFeature","decls","vars","consts","template","rf","ctx","\u0275\u0275element","\u0275\u0275listener","LoginComponent_Conditional_14_Template","LoginComponent_Conditional_18_Template","LoginComponent_Conditional_21_Template","\u0275\u0275property","touched","\u0275\u0275textInterpolate1","ReactiveFormsModule","\u0275NgNoValidate","DefaultValueAccessor","NgControlStatus","NgControlStatusGroup","FormGroupDirective","FormControlName","styles"]},_coverageSchema:"1a1c01bbd47fc00a2c39e90264f33305004495a9",hash:"40ae34738178f53f7310df448215c239eec5bbfb"};var coverage=global[gcv]||(global[gcv]={});if(!coverage[path]||coverage[path].hash!==hash){coverage[path]=coverageData;}var actualCoverage=coverage[path];{// @ts-ignore +cov_iozu183h3=function(){return actualCoverage;};}return actualCoverage;}cov_iozu183h3();import{b as E}from"./chunk-AMU5RXFQ.js";import{a as F,b as c,c as M,d as S,e as y,f as P,g as O,l as L,m as A}from"./chunk-X3YLKFKT.js";import"./chunk-FYGTVJAL.js";import"./chunk-65RKWSY3.js";import"./chunk-2S5V5XEE.js";import"./chunk-F6OGAIBI.js";import{Ab as i,Bb as x,Cb as w,Ka as v,Oa as C,Q as h,Wa as p,Ya as d,_a as m,cb as f,db as t,eb as a,fb as u,ka as b,nb as _,pb as g,wa as r}from"./chunk-RYTNMYZW.js";import"./chunk-VCZGUBMY.js";function k(o,l){cov_iozu183h3().f[0]++;cov_iozu183h3().s[0]++;(cov_iozu183h3().b[0][0]++,o&1)&&(cov_iozu183h3().b[0][1]++,i(0," L'username \xE8 obbligatorio. "));}function N(o,l){cov_iozu183h3().f[1]++;cov_iozu183h3().s[1]++;(cov_iozu183h3().b[1][0]++,o&1)&&(cov_iozu183h3().b[1][1]++,i(0," L'username deve avere almeno 3 caratteri. "));}function T(o,l){cov_iozu183h3().f[2]++;cov_iozu183h3().s[2]++;if((cov_iozu183h3().b[3][0]++,o&1)&&(cov_iozu183h3().b[3][1]++,t(0,"p",9),d(1,k,1,0)(2,N,1,0),a()),o&2){cov_iozu183h3().b[2][0]++;let n=(cov_iozu183h3().s[3]++,g());cov_iozu183h3().s[4]++;r(),m((cov_iozu183h3().b[5][0]++,n.loginForm.controls.username.errors!=null)&&(cov_iozu183h3().b[5][1]++,n.loginForm.controls.username.errors.required)?(cov_iozu183h3().b[4][0]++,1):(cov_iozu183h3().b[4][1]++,(cov_iozu183h3().b[7][0]++,n.loginForm.controls.username.errors!=null)&&(cov_iozu183h3().b[7][1]++,n.loginForm.controls.username.errors.minlength)?(cov_iozu183h3().b[6][0]++,2):(cov_iozu183h3().b[6][1]++,-1)));}else{cov_iozu183h3().b[2][1]++;}}function G(o,l){cov_iozu183h3().f[3]++;cov_iozu183h3().s[5]++;(cov_iozu183h3().b[8][0]++,o&1)&&(cov_iozu183h3().b[8][1]++,i(0," La password \xE8 obbligatoria. "));}function I(o,l){cov_iozu183h3().f[4]++;cov_iozu183h3().s[6]++;(cov_iozu183h3().b[9][0]++,o&1)&&(cov_iozu183h3().b[9][1]++,i(0," La password deve avere almeno 12 caratteri. "));}function V(o,l){cov_iozu183h3().f[5]++;cov_iozu183h3().s[7]++;if((cov_iozu183h3().b[11][0]++,o&1)&&(cov_iozu183h3().b[11][1]++,t(0,"p",12),d(1,G,1,0)(2,I,1,0),a()),o&2){cov_iozu183h3().b[10][0]++;let n=(cov_iozu183h3().s[8]++,g());cov_iozu183h3().s[9]++;r(),m((cov_iozu183h3().b[13][0]++,n.loginForm.controls.password.errors!=null)&&(cov_iozu183h3().b[13][1]++,n.loginForm.controls.password.errors.required)?(cov_iozu183h3().b[12][0]++,1):(cov_iozu183h3().b[12][1]++,(cov_iozu183h3().b[15][0]++,n.loginForm.controls.password.errors!=null)&&(cov_iozu183h3().b[15][1]++,n.loginForm.controls.password.errors.minlength)?(cov_iozu183h3().b[14][0]++,2):(cov_iozu183h3().b[14][1]++,-1)));}else{cov_iozu183h3().b[10][1]++;}}function B(o,l){cov_iozu183h3().f[6]++;cov_iozu183h3().s[10]++;if((cov_iozu183h3().b[17][0]++,o&1)&&(cov_iozu183h3().b[17][1]++,t(0,"p",14),i(1),a()),o&2){cov_iozu183h3().b[16][0]++;let n=(cov_iozu183h3().s[11]++,g());cov_iozu183h3().s[12]++;r(),x(n.loginErrorMessage);}else{cov_iozu183h3().b[16][1]++;}}var J=(cov_iozu183h3().s[13]++,(()=>{cov_iozu183h3().f[7]++;class o extends E{fb=(cov_iozu183h3().s[14]++,h(L));loginForm=(cov_iozu183h3().s[15]++,this.fb.nonNullable.group({username:["",[c.required,c.minLength(3)]],password:["",[c.required,c.minLength(12)]]}));onUsernameChange(n){cov_iozu183h3().f[8]++;cov_iozu183h3().s[16]++;this.loginForm.controls.username.setValue(n);}onPasswordChange(n){cov_iozu183h3().f[9]++;cov_iozu183h3().s[17]++;this.loginForm.controls.password.setValue(n);}onSubmit(){cov_iozu183h3().f[10]++;cov_iozu183h3().s[18]++;if(this.syncAutofilledCredentialsFromDom(),this.loginForm.invalid){cov_iozu183h3().b[18][0]++;cov_iozu183h3().s[19]++;this.loginForm.markAllAsTouched();cov_iozu183h3().s[20]++;return;}else{cov_iozu183h3().b[18][1]++;}cov_iozu183h3().s[21]++;this.isLoading=!0,this.errorType=null;let{username:n,password:s}=(cov_iozu183h3().s[22]++,this.loginForm.getRawValue());cov_iozu183h3().s[23]++;this.authService.login(n,s).subscribe({next:e=>{cov_iozu183h3().f[11]++;cov_iozu183h3().s[24]++;this.isLoading=!1,this.handleSuccess(e);},error:e=>{cov_iozu183h3().f[12]++;cov_iozu183h3().s[25]++;return this.handleError(e);}});}syncAutofilledCredentialsFromDom(){cov_iozu183h3().f[13]++;cov_iozu183h3().s[26]++;if(typeof document>"u"){cov_iozu183h3().b[19][0]++;cov_iozu183h3().s[27]++;return;}else{cov_iozu183h3().b[19][1]++;}let n=(cov_iozu183h3().s[28]++,this.loginForm.controls.username),s=(cov_iozu183h3().s[29]++,this.loginForm.controls.password);cov_iozu183h3().s[30]++;if(!n.value){cov_iozu183h3().b[20][0]++;let e=(cov_iozu183h3().s[31]++,document.getElementById("username"));cov_iozu183h3().s[32]++;(cov_iozu183h3().b[21][0]++,e?.value)&&(cov_iozu183h3().b[21][1]++,n.setValue(e.value));}else{cov_iozu183h3().b[20][1]++;}cov_iozu183h3().s[33]++;if(!s.value){cov_iozu183h3().b[22][0]++;let e=(cov_iozu183h3().s[34]++,document.getElementById("password"));cov_iozu183h3().s[35]++;(cov_iozu183h3().b[23][0]++,e?.value)&&(cov_iozu183h3().b[23][1]++,s.setValue(e.value));}else{cov_iozu183h3().b[22][1]++;}}static ɵfac=(cov_iozu183h3().s[36]++,(()=>{cov_iozu183h3().f[14]++;let n;cov_iozu183h3().s[37]++;return function(e){cov_iozu183h3().f[15]++;cov_iozu183h3().s[38]++;return((cov_iozu183h3().b[24][0]++,n)||(cov_iozu183h3().b[24][1]++,n=b(o)))((cov_iozu183h3().b[25][0]++,e)||(cov_iozu183h3().b[25][1]++,o));};})());static ɵcmp=(cov_iozu183h3().s[39]++,v({type:o,selectors:[["app-login"]],features:[C],decls:22,vars:10,consts:[[1,"auth-shell"],["aria-hidden","true",1,"auth-bg-orb","auth-bg-orb-left"],["aria-hidden","true",1,"auth-bg-orb","auth-bg-orb-right"],[1,"auth-card"],[1,"auth-kicker"],[1,"auth-subtitle"],["novalidate","",1,"auth-form",3,"ngSubmit","formGroup"],["for","username"],["id","username","type","text","formControlName","username","placeholder","Inserisci username","autocomplete","username"],["id","username-error","role","alert",1,"auth-field-error"],["for","password"],["id","password","type","password","formControlName","password","placeholder","Inserisci password","autocomplete","current-password"],["id","password-error","role","alert",1,"auth-field-error"],["type","submit",1,"auth-submit",3,"disabled"],["role","alert",1,"auth-error"]],template:function(s,e){cov_iozu183h3().f[16]++;cov_iozu183h3().s[40]++;(cov_iozu183h3().b[26][0]++,s&1)&&(cov_iozu183h3().b[26][1]++,t(0,"section",0),u(1,"div",1)(2,"div",2),t(3,"div",3)(4,"p",4),i(5,"Area Riservata"),a(),t(6,"h1"),i(7,"Benvenuto su View4Life"),a(),t(8,"p",5),i(9,"Accedi con le tue credenziali per gestire monitoraggio e allarmi"),a(),t(10,"form",6),_("ngSubmit",function(){cov_iozu183h3().f[17]++;cov_iozu183h3().s[41]++;return e.onSubmit();}),t(11,"label",7),i(12,"Username"),a(),u(13,"input",8),d(14,T,3,1,"p",9),t(15,"label",10),i(16,"Password"),a(),u(17,"input",11),d(18,V,3,1,"p",12),t(19,"button",13),i(20),a(),d(21,B,2,1,"p",14),a()()()),(cov_iozu183h3().b[27][0]++,s&2)&&(cov_iozu183h3().b[27][1]++,r(10),f("formGroup",e.loginForm),r(3),p("aria-invalid",(cov_iozu183h3().b[28][0]++,e.loginForm.controls.username.invalid)&&(cov_iozu183h3().b[28][1]++,e.loginForm.controls.username.touched))("aria-describedby",(cov_iozu183h3().b[30][0]++,e.loginForm.controls.username.invalid)&&(cov_iozu183h3().b[30][1]++,e.loginForm.controls.username.touched)?(cov_iozu183h3().b[29][0]++,"username-error"):(cov_iozu183h3().b[29][1]++,null)),r(),m((cov_iozu183h3().b[32][0]++,e.loginForm.controls.username.touched)&&(cov_iozu183h3().b[32][1]++,e.loginForm.controls.username.invalid)?(cov_iozu183h3().b[31][0]++,14):(cov_iozu183h3().b[31][1]++,-1)),r(3),p("aria-invalid",(cov_iozu183h3().b[33][0]++,e.loginForm.controls.password.invalid)&&(cov_iozu183h3().b[33][1]++,e.loginForm.controls.password.touched))("aria-describedby",(cov_iozu183h3().b[35][0]++,e.loginForm.controls.password.invalid)&&(cov_iozu183h3().b[35][1]++,e.loginForm.controls.password.touched)?(cov_iozu183h3().b[34][0]++,"password-error"):(cov_iozu183h3().b[34][1]++,null)),r(),m((cov_iozu183h3().b[37][0]++,e.loginForm.controls.password.touched)&&(cov_iozu183h3().b[37][1]++,e.loginForm.controls.password.invalid)?(cov_iozu183h3().b[36][0]++,18):(cov_iozu183h3().b[36][1]++,-1)),r(),f("disabled",(cov_iozu183h3().b[38][0]++,e.isLoading)||(cov_iozu183h3().b[38][1]++,e.loginForm.invalid)),r(),w(" ",e.isLoading?(cov_iozu183h3().b[39][0]++,"Accesso in corso..."):(cov_iozu183h3().b[39][1]++,"Accedi")," "),r(),m(e.loginErrorMessage?(cov_iozu183h3().b[40][0]++,21):(cov_iozu183h3().b[40][1]++,-1)));},dependencies:[A,y,F,M,S,O,P],styles:[`[_nghost-%COMP%]{display:block;min-height:100dvh}.auth-shell[_ngcontent-%COMP%]{--bg: #fef3c7;--card: #fffdf8;--ink: #1f2933;--muted: #5c6470;--accent: #fcd34d;--accent-strong: #fcd34d;--focus: #fcd34d;min-height:100dvh;display:grid;place-items:center;padding:1.5rem;background:radial-gradient(circle at 12% 18%,#fde68a 0 8%,transparent 45%),radial-gradient(circle at 82% 12%,#fcd34d 0 10%,transparent 48%),linear-gradient(140deg,#fff7d1 0%,var(--bg) 46%,#fef3c7 100%);position:relative;overflow:hidden}.auth-bg-orb[_ngcontent-%COMP%]{position:absolute;width:28rem;height:28rem;border-radius:9999px;opacity:.25;filter:blur(24px);pointer-events:none}.auth-bg-orb-left[_ngcontent-%COMP%]{background:#fcd34d;left:-9rem;bottom:-8rem}.auth-bg-orb-right[_ngcontent-%COMP%]{background:#fcd34d;right:-10rem;top:-8rem}.auth-card[_ngcontent-%COMP%]{width:min(92vw,28rem);background:color-mix(in srgb,var(--card) 88%,white 12%);border:1px solid color-mix(in srgb,var(--ink) 18%,transparent 82%);border-radius:1.25rem;box-shadow:0 24px 54px #1118272e,0 3px 12px #fcd34d66;padding:1.9rem;position:relative;z-index:1;animation:_ngcontent-%COMP%_card-enter .26s ease-out}.auth-kicker[_ngcontent-%COMP%]{margin:0;font:700 .72rem/1.1 Avenir Next,Gill Sans,sans-serif;letter-spacing:.13em;text-transform:uppercase;color:var(--accent)}h1[_ngcontent-%COMP%]{margin:.45rem 0 0;font:700 clamp(1.55rem,2.7vw,2rem)/1.12 "Avenir Next","Trebuchet MS",sans-serif;color:var(--ink)}.auth-subtitle[_ngcontent-%COMP%]{margin:.6rem 0 1.35rem;color:var(--muted);font:500 .95rem/1.45 Avenir Next,Gill Sans,sans-serif}.auth-form[_ngcontent-%COMP%]{display:grid;gap:.72rem}label[_ngcontent-%COMP%]{font:600 .82rem/1.2 Avenir Next,Gill Sans,sans-serif;color:#2e3a46}input[_ngcontent-%COMP%]{width:100%;border-radius:.75rem;border:1px solid #b7c3d1;background:#fff;padding:.74rem .86rem;color:#111827;font:500 .94rem/1.2 Avenir Next,Gill Sans,sans-serif;transition:border-color .14s ease,box-shadow .14s ease}input[_ngcontent-%COMP%]::placeholder{color:#7f8b97}input[_ngcontent-%COMP%]:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px color-mix(in srgb,var(--focus) 35%,transparent 65%)}input.ng-invalid.ng-touched[_ngcontent-%COMP%]{border-color:#b91c1c}.auth-field-error[_ngcontent-%COMP%]{margin:-.25rem 0 0;color:#b91c1c;font:600 .82rem/1.35 Avenir Next,Gill Sans,sans-serif}.auth-submit[_ngcontent-%COMP%]{border:0;border-radius:.75rem;padding:.78rem 1rem;margin-top:.4rem;background:linear-gradient(120deg,var(--accent) 0%,var(--accent-strong) 100%);color:#1f2933;font:700 .95rem/1 Avenir Next,Trebuchet MS,sans-serif;cursor:pointer;transition:transform .12s ease,filter .14s ease}.auth-submit[_ngcontent-%COMP%]:hover:not(:disabled){transform:translateY(-1px);filter:brightness(1.05)}.auth-submit[_ngcontent-%COMP%]:disabled{opacity:.68;cursor:not-allowed}.auth-error[_ngcontent-%COMP%]{margin:.35rem 0 0;color:#b91c1c;font:600 .82rem/1.35 Avenir Next,Gill Sans,sans-serif}@keyframes _ngcontent-%COMP%_card-enter{0%{opacity:0;transform:translateY(8px) scale(.985)}to{opacity:1;transform:translateY(0) scale(1)}}@media(max-width:520px){.auth-card[_ngcontent-%COMP%]{padding:1.35rem;border-radius:1rem}.auth-subtitle[_ngcontent-%COMP%]{font-size:.9rem}} +/*# sourceMappingURL=login.component-EPBQEVJA.css.map */`]}));}cov_iozu183h3().s[42]++;return o;})());export{J as LoginComponent};//# sourceMappingURL=chunk-VKIXOKIV.js.map +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJpIiwiTiIsIm8iLCJsIiwiY292X2lvenUxODNoMyIsImYiLCJzIiwiYiIsIlQiLCJ0IiwiZCIsImsiLCJhIiwibiIsImciLCJyIiwibSIsImxvZ2luRm9ybSIsImNvbnRyb2xzIiwidXNlcm5hbWUiLCJlcnJvcnMiLCJyZXF1aXJlZCIsIm1pbmxlbmd0aCIsIkciLCJJIiwiViIsInBhc3N3b3JkIiwiQiIsIngiLCJsb2dpbkVycm9yTWVzc2FnZSIsIkoiLCJFIiwiZmIiLCJoIiwiTCIsIm5vbk51bGxhYmxlIiwiZ3JvdXAiLCJjIiwibWluTGVuZ3RoIiwib25Vc2VybmFtZUNoYW5nZSIsInNldFZhbHVlIiwib25QYXNzd29yZENoYW5nZSIsIm9uU3VibWl0Iiwic3luY0F1dG9maWxsZWRDcmVkZW50aWFsc0Zyb21Eb20iLCJpbnZhbGlkIiwibWFya0FsbEFzVG91Y2hlZCIsImlzTG9hZGluZyIsImVycm9yVHlwZSIsImdldFJhd1ZhbHVlIiwiYXV0aFNlcnZpY2UiLCJsb2dpbiIsInN1YnNjcmliZSIsIm5leHQiLCJlIiwiaGFuZGxlU3VjY2VzcyIsImVycm9yIiwiaGFuZGxlRXJyb3IiLCJkb2N1bWVudCIsInZhbHVlIiwiZ2V0RWxlbWVudEJ5SWQiLCLJtWZhYyIsIsm1Y21wIiwidiIsInR5cGUiLCJzZWxlY3RvcnMiLCJmZWF0dXJlcyIsIkMiLCJkZWNscyIsInZhcnMiLCJjb25zdHMiLCJ0ZW1wbGF0ZSIsInUiLCJfIiwicCIsInRvdWNoZWQiLCJ3IiwiZGVwZW5kZW5jaWVzIiwiQSIsInkiLCJGIiwiTSIsIlMiLCJPIiwiUCIsInN0eWxlcyIsIkxvZ2luQ29tcG9uZW50Il0sInNvdXJjZXMiOlsic3JjL2FwcC9mZWF0dXJlcy91c2VyLWF1dGgvY29tcG9uZW50cy9sb2dpbi9sb2dpbi5jb21wb25lbnQudHMiLCJzcmMvYXBwL2ZlYXR1cmVzL3VzZXItYXV0aC9jb21wb25lbnRzL2xvZ2luL2xvZ2luLmNvbXBvbmVudC5odG1sIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBWYWxpZGF0b3JzLCBGb3JtQnVpbGRlciB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEF1dGhCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi4vYXV0aC1iYXNlL2F1dGgtYmFzZS5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2FwcC1sb2dpbicsXG4gICAgaW1wb3J0czogW1JlYWN0aXZlRm9ybXNNb2R1bGVdLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9sb2dpbi5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vbG9naW4uY29tcG9uZW50LmNzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBMb2dpbkNvbXBvbmVudCBleHRlbmRzIEF1dGhCYXNlQ29tcG9uZW50IHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZiID0gaW5qZWN0KEZvcm1CdWlsZGVyKTtcblxuICAgIHB1YmxpYyByZWFkb25seSBsb2dpbkZvcm0gPSB0aGlzLmZiLm5vbk51bGxhYmxlLmdyb3VwKHtcbiAgICAgICAgdXNlcm5hbWU6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMubWluTGVuZ3RoKDMpXV0sXG4gICAgICAgIHBhc3N3b3JkOiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1pbkxlbmd0aCgxMildXSxcbiAgICB9KTtcblxuICAgIHB1YmxpYyBvdmVycmlkZSBvblVzZXJuYW1lQ2hhbmdlKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5sb2dpbkZvcm0uY29udHJvbHMudXNlcm5hbWUuc2V0VmFsdWUodmFsdWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblBhc3N3b3JkQ2hhbmdlKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5sb2dpbkZvcm0uY29udHJvbHMucGFzc3dvcmQuc2V0VmFsdWUodmFsdWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSBvblN1Ym1pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zeW5jQXV0b2ZpbGxlZENyZWRlbnRpYWxzRnJvbURvbSgpO1xuXG4gICAgICAgIGlmICh0aGlzLmxvZ2luRm9ybS5pbnZhbGlkKSB7XG4gICAgICAgICAgICB0aGlzLmxvZ2luRm9ybS5tYXJrQWxsQXNUb3VjaGVkKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XG4gICAgICAgIHRoaXMuZXJyb3JUeXBlID0gbnVsbDtcblxuICAgICAgICBjb25zdCB7IHVzZXJuYW1lLCBwYXNzd29yZCB9ID0gdGhpcy5sb2dpbkZvcm0uZ2V0UmF3VmFsdWUoKTtcblxuICAgICAgICB0aGlzLmF1dGhTZXJ2aWNlLmxvZ2luKHVzZXJuYW1lLCBwYXNzd29yZCkuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgIG5leHQ6IChzZXNzaW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZVN1Y2Nlc3Moc2Vzc2lvbik7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3I6IChlcnJvcikgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnJvciksXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3luY0F1dG9maWxsZWRDcmVkZW50aWFsc0Zyb21Eb20oKTogdm9pZCB7XG4gICAgICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB1c2VybmFtZUNvbnRyb2wgPSB0aGlzLmxvZ2luRm9ybS5jb250cm9scy51c2VybmFtZTtcbiAgICAgICAgY29uc3QgcGFzc3dvcmRDb250cm9sID0gdGhpcy5sb2dpbkZvcm0uY29udHJvbHMucGFzc3dvcmQ7XG5cbiAgICAgICAgaWYgKCF1c2VybmFtZUNvbnRyb2wudmFsdWUpIHtcbiAgICAgICAgICAgIGNvbnN0IHVzZXJuYW1lSW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndXNlcm5hbWUnKSBhcyBIVE1MSW5wdXRFbGVtZW50IHwgbnVsbDtcbiAgICAgICAgICAgIGlmICh1c2VybmFtZUlucHV0Py52YWx1ZSkge1xuICAgICAgICAgICAgICAgIHVzZXJuYW1lQ29udHJvbC5zZXRWYWx1ZSh1c2VybmFtZUlucHV0LnZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghcGFzc3dvcmRDb250cm9sLnZhbHVlKSB7XG4gICAgICAgICAgICBjb25zdCBwYXNzd29yZElucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Bhc3N3b3JkJykgYXMgSFRNTElucHV0RWxlbWVudCB8IG51bGw7XG4gICAgICAgICAgICBpZiAocGFzc3dvcmRJbnB1dD8udmFsdWUpIHtcbiAgICAgICAgICAgICAgICBwYXNzd29yZENvbnRyb2wuc2V0VmFsdWUocGFzc3dvcmRJbnB1dC52YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCI8c2VjdGlvbiBjbGFzcz1cImF1dGgtc2hlbGxcIj5cbiAgPGRpdiBjbGFzcz1cImF1dGgtYmctb3JiIGF1dGgtYmctb3JiLWxlZnRcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImF1dGgtYmctb3JiIGF1dGgtYmctb3JiLXJpZ2h0XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cImF1dGgtY2FyZFwiPlxuICAgIDxwIGNsYXNzPVwiYXV0aC1raWNrZXJcIj5BcmVhIFJpc2VydmF0YTwvcD5cbiAgICA8aDE+QmVudmVudXRvIHN1IFZpZXc0TGlmZTwvaDE+XG4gICAgPHAgY2xhc3M9XCJhdXRoLXN1YnRpdGxlXCI+QWNjZWRpIGNvbiBsZSB0dWUgY3JlZGVuemlhbGkgcGVyIGdlc3RpcmUgbW9uaXRvcmFnZ2lvIGUgYWxsYXJtaTwvcD5cblxuICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwibG9naW5Gb3JtXCIgKG5nU3VibWl0KT1cIm9uU3VibWl0KClcIiBjbGFzcz1cImF1dGgtZm9ybVwiIG5vdmFsaWRhdGU+XG4gICAgICA8bGFiZWwgZm9yPVwidXNlcm5hbWVcIj5Vc2VybmFtZTwvbGFiZWw+XG4gICAgICA8aW5wdXQgaWQ9XCJ1c2VybmFtZVwiIHR5cGU9XCJ0ZXh0XCIgZm9ybUNvbnRyb2xOYW1lPVwidXNlcm5hbWVcIiBwbGFjZWhvbGRlcj1cIkluc2VyaXNjaSB1c2VybmFtZVwiXG4gICAgICAgIGF1dG9jb21wbGV0ZT1cInVzZXJuYW1lXCJcbiAgICAgICAgW2F0dHIuYXJpYS1pbnZhbGlkXT1cImxvZ2luRm9ybS5jb250cm9scy51c2VybmFtZS5pbnZhbGlkICYmIGxvZ2luRm9ybS5jb250cm9scy51c2VybmFtZS50b3VjaGVkXCJcbiAgICAgICAgW2F0dHIuYXJpYS1kZXNjcmliZWRieV09XCJsb2dpbkZvcm0uY29udHJvbHMudXNlcm5hbWUuaW52YWxpZCAmJiBsb2dpbkZvcm0uY29udHJvbHMudXNlcm5hbWUudG91Y2hlZCA/ICd1c2VybmFtZS1lcnJvcicgOiBudWxsXCIgLz5cblxuICAgICAgQGlmIChsb2dpbkZvcm0uY29udHJvbHMudXNlcm5hbWUudG91Y2hlZCAmJiBsb2dpbkZvcm0uY29udHJvbHMudXNlcm5hbWUuaW52YWxpZCkge1xuICAgICAgPHAgaWQ9XCJ1c2VybmFtZS1lcnJvclwiIGNsYXNzPVwiYXV0aC1maWVsZC1lcnJvclwiIHJvbGU9XCJhbGVydFwiPlxuICAgICAgICBAaWYgKGxvZ2luRm9ybS5jb250cm9scy51c2VybmFtZS5lcnJvcnM/LlsncmVxdWlyZWQnXSkge1xuICAgICAgICBMJ3VzZXJuYW1lIMOoIG9iYmxpZ2F0b3Jpby5cbiAgICAgICAgfSBAZWxzZSBpZiAobG9naW5Gb3JtLmNvbnRyb2xzLnVzZXJuYW1lLmVycm9ycz8uWydtaW5sZW5ndGgnXSkge1xuICAgICAgICBMJ3VzZXJuYW1lIGRldmUgYXZlcmUgYWxtZW5vIDMgY2FyYXR0ZXJpLlxuICAgICAgICB9XG4gICAgICA8L3A+XG4gICAgICB9XG5cbiAgICAgIDxsYWJlbCBmb3I9XCJwYXNzd29yZFwiPlBhc3N3b3JkPC9sYWJlbD5cbiAgICAgIDxpbnB1dCBpZD1cInBhc3N3b3JkXCIgdHlwZT1cInBhc3N3b3JkXCIgZm9ybUNvbnRyb2xOYW1lPVwicGFzc3dvcmRcIiBwbGFjZWhvbGRlcj1cIkluc2VyaXNjaSBwYXNzd29yZFwiXG4gICAgICAgIGF1dG9jb21wbGV0ZT1cImN1cnJlbnQtcGFzc3dvcmRcIlxuICAgICAgICBbYXR0ci5hcmlhLWludmFsaWRdPVwibG9naW5Gb3JtLmNvbnRyb2xzLnBhc3N3b3JkLmludmFsaWQgJiYgbG9naW5Gb3JtLmNvbnRyb2xzLnBhc3N3b3JkLnRvdWNoZWRcIlxuICAgICAgICBbYXR0ci5hcmlhLWRlc2NyaWJlZGJ5XT1cImxvZ2luRm9ybS5jb250cm9scy5wYXNzd29yZC5pbnZhbGlkICYmIGxvZ2luRm9ybS5jb250cm9scy5wYXNzd29yZC50b3VjaGVkID8gJ3Bhc3N3b3JkLWVycm9yJyA6IG51bGxcIiAvPlxuXG4gICAgICBAaWYgKGxvZ2luRm9ybS5jb250cm9scy5wYXNzd29yZC50b3VjaGVkICYmIGxvZ2luRm9ybS5jb250cm9scy5wYXNzd29yZC5pbnZhbGlkKSB7XG4gICAgICA8cCBpZD1cInBhc3N3b3JkLWVycm9yXCIgY2xhc3M9XCJhdXRoLWZpZWxkLWVycm9yXCIgcm9sZT1cImFsZXJ0XCI+XG4gICAgICAgIEBpZiAobG9naW5Gb3JtLmNvbnRyb2xzLnBhc3N3b3JkLmVycm9ycz8uWydyZXF1aXJlZCddKSB7XG4gICAgICAgIExhIHBhc3N3b3JkIMOoIG9iYmxpZ2F0b3JpYS5cbiAgICAgICAgfSBAZWxzZSBpZiAobG9naW5Gb3JtLmNvbnRyb2xzLnBhc3N3b3JkLmVycm9ycz8uWydtaW5sZW5ndGgnXSkge1xuICAgICAgICBMYSBwYXNzd29yZCBkZXZlIGF2ZXJlIGFsbWVubyAxMiBjYXJhdHRlcmkuXG4gICAgICAgIH1cbiAgICAgIDwvcD5cbiAgICAgIH1cblxuICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgW2Rpc2FibGVkXT1cImlzTG9hZGluZyB8fCBsb2dpbkZvcm0uaW52YWxpZFwiIGNsYXNzPVwiYXV0aC1zdWJtaXRcIj5cbiAgICAgICAge3sgaXNMb2FkaW5nID8gJ0FjY2Vzc28gaW4gY29yc28uLi4nIDogJ0FjY2VkaScgfX1cbiAgICAgIDwvYnV0dG9uPlxuXG4gICAgICBAaWYgKGxvZ2luRXJyb3JNZXNzYWdlKSB7XG4gICAgICA8cCBjbGFzcz1cImF1dGgtZXJyb3JcIiByb2xlPVwiYWxlcnRcIj57eyBsb2dpbkVycm9yTWVzc2FnZSB9fTwvcD5cbiAgICAgIH1cbiAgICA8L2Zvcm0+XG4gIDwvZGl2PlxuPC9zZWN0aW9uPiJdLCJtYXBwaW5ncyI6Ijsrb0JDbUJRQSxDQUFBLGlEQUFBQyxFQUFBQyxDQUFBLENBQUFDLENBQUEsRUFBQUMsYUFBQSxHQUFBQyxDQUFBLEtBQUFELENBQUEsZ0JBQUFFLENBQUEsT0FBQUYsYUFBQSxHQUFBRyxDQUFBLFNBQUFMLENBQUEsTUFBQUUsYUFBQSxHQUFBRyxDQUFBLFNBRUFQLENBQUEsNkRBQUFRLEVBQUFOLENBQUEsQ0FBQUMsQ0FBQSxFQUFBQyxhQUFBLEdBQUFDLENBQUEsS0FBQUQsQ0FBQSxnQkFBQUUsQ0FBQSxVQUFBRixhQUFBLEdBQUFHLENBQUEsU0FBQUwsQ0FBQSxNQUFBRSxhQUFBLEdBQUFHLENBQUEsU0FKRkUsQ0FBQSxVQUNFQyxDQUFBLEdBQUFDLENBQUEsTUFBd0QsRUFBQVYsQ0FBQSxNQUsxRFcsQ0FBQSxJQUFBVixDQUFBLElBQUFFLGFBQUEsR0FBQUcsQ0FBQSxhQUFBTSxDQUFBLEVB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 \ No newline at end of file diff --git a/frontend/dist-instrumented/chunk-VKIXOKIV.js.map b/frontend/dist-instrumented/chunk-VKIXOKIV.js.map new file mode 100644 index 00000000..8d5cfbca --- /dev/null +++ b/frontend/dist-instrumented/chunk-VKIXOKIV.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["src/app/features/user-auth/components/login/login.component.ts", "src/app/features/user-auth/components/login/login.component.html"], + "sourcesContent": ["import { Component, inject } from '@angular/core';\nimport { ReactiveFormsModule, Validators, FormBuilder } from '@angular/forms';\nimport { AuthBaseComponent } from '../auth-base/auth-base.component';\n\n@Component({\n selector: 'app-login',\n imports: [ReactiveFormsModule],\n templateUrl: './login.component.html',\n styleUrls: ['./login.component.css'],\n})\nexport class LoginComponent extends AuthBaseComponent {\n private readonly fb = inject(FormBuilder);\n\n public readonly loginForm = this.fb.nonNullable.group({\n username: ['', [Validators.required, Validators.minLength(3)]],\n password: ['', [Validators.required, Validators.minLength(12)]],\n });\n\n public override onUsernameChange(value: string): void {\n this.loginForm.controls.username.setValue(value);\n }\n\n public onPasswordChange(value: string): void {\n this.loginForm.controls.password.setValue(value);\n }\n\n public override onSubmit(): void {\n this.syncAutofilledCredentialsFromDom();\n\n if (this.loginForm.invalid) {\n this.loginForm.markAllAsTouched();\n return;\n }\n\n this.isLoading = true;\n this.errorType = null;\n\n const { username, password } = this.loginForm.getRawValue();\n\n this.authService.login(username, password).subscribe({\n next: (session) => {\n this.isLoading = false;\n this.handleSuccess(session);\n },\n error: (error) => this.handleError(error),\n });\n }\n\n private syncAutofilledCredentialsFromDom(): void {\n if (typeof document === 'undefined') {\n return;\n }\n\n const usernameControl = this.loginForm.controls.username;\n const passwordControl = this.loginForm.controls.password;\n\n if (!usernameControl.value) {\n const usernameInput = document.getElementById('username') as HTMLInputElement | null;\n if (usernameInput?.value) {\n usernameControl.setValue(usernameInput.value);\n }\n }\n\n if (!passwordControl.value) {\n const passwordInput = document.getElementById('password') as HTMLInputElement | null;\n if (passwordInput?.value) {\n passwordControl.setValue(passwordInput.value);\n }\n }\n }\n}\n", "
\n
\n
\n\n
\n

Area Riservata

\n

Benvenuto su View4Life

\n

Accedi con le tue credenziali per gestire monitoraggio e allarmi

\n\n
\n \n \n\n @if (loginForm.controls.username.touched && loginForm.controls.username.invalid) {\n

\n @if (loginForm.controls.username.errors?.['required']) {\n L'username è obbligatorio.\n } @else if (loginForm.controls.username.errors?.['minlength']) {\n L'username deve avere almeno 3 caratteri.\n }\n

\n }\n\n \n \n\n @if (loginForm.controls.password.touched && loginForm.controls.password.invalid) {\n

\n @if (loginForm.controls.password.errors?.['required']) {\n La password è obbligatoria.\n } @else if (loginForm.controls.password.errors?.['minlength']) {\n La password deve avere almeno 12 caratteri.\n }\n

\n }\n\n \n\n @if (loginErrorMessage) {\n

{{ loginErrorMessage }}

\n }\n
\n
\n
"], + "mappings": "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", + "names": ["\u0275\u0275text", "\u0275\u0275elementStart", "\u0275\u0275conditionalCreate", "LoginComponent_Conditional_14_Conditional_1_Template", "LoginComponent_Conditional_14_Conditional_2_Template", "\u0275\u0275elementEnd", "\u0275\u0275advance", "\u0275\u0275conditional", "ctx_r0", "loginForm", "controls", "username", "errors", "LoginComponent_Conditional_18_Conditional_1_Template", "LoginComponent_Conditional_18_Conditional_2_Template", "password", "\u0275\u0275textInterpolate", "loginErrorMessage", "LoginComponent", "AuthBaseComponent", "fb", "inject", "FormBuilder", "nonNullable", "group", "Validators", "required", "minLength", "onUsernameChange", "value", "setValue", "onPasswordChange", "onSubmit", "syncAutofilledCredentialsFromDom", "invalid", "markAllAsTouched", "isLoading", "errorType", "getRawValue", "authService", "login", "subscribe", "next", "session", "handleSuccess", "error", "handleError", "document", "usernameControl", "passwordControl", "usernameInput", "getElementById", "passwordInput", "__ngFactoryType__", "selectors", "features", "\u0275\u0275InheritDefinitionFeature", "decls", "vars", "consts", "template", "rf", "ctx", "\u0275\u0275element", "\u0275\u0275listener", "LoginComponent_Conditional_14_Template", "LoginComponent_Conditional_18_Template", "LoginComponent_Conditional_21_Template", "\u0275\u0275property", "touched", "\u0275\u0275textInterpolate1", "ReactiveFormsModule", "\u0275NgNoValidate", "DefaultValueAccessor", "NgControlStatus", "NgControlStatusGroup", "FormGroupDirective", "FormControlName", "styles"] +} diff --git a/frontend/dist-instrumented/chunk-VWERK2XT.js b/frontend/dist-instrumented/chunk-VWERK2XT.js new file mode 100644 index 00000000..3492540a --- /dev/null +++ b/frontend/dist-instrumented/chunk-VWERK2XT.js @@ -0,0 +1,3 @@ +function cov_2ef0rfkpgb(){var path="/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-VWERK2XT.js";var hash="d2216cf2f7113b9a35691868b470166920179c3f";var global=new Function("return this")();var gcv="__coverage__";var coverageData={path:"/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-VWERK2XT.js",statementMap:{"0":{start:{line:1,column:403},end:{line:1,column:521}},"1":{start:{line:1,column:451},end:{line:1,column:519}},"2":{start:{line:1,column:489},end:{line:1,column:518}}},fnMap:{"0":{name:"(anonymous_0)",decl:{start:{line:1,column:447},end:{line:1,column:448}},loc:{start:{line:1,column:451},end:{line:1,column:519}},line:1},"1":{name:"(anonymous_1)",decl:{start:{line:1,column:486},end:{line:1,column:487}},loc:{start:{line:1,column:489},end:{line:1,column:518}},line:1}},branchMap:{},s:{"0":0,"1":0,"2":0},f:{"0":0,"1":0},b:{},inputSourceMap:{version:3,sources:["src/app/features/ward-management/ward-management.routes.ts"],sourcesContent:["import { Routes } from '@angular/router';\nimport { adminGuard } from '../../core/guards/admin.guard';\nimport { authGuard } from '../../core/guards/auth.guard';\nimport { AssignmentOperationsService } from './services/assignment-operations.service';\nimport { WardManagementStore } from './services/ward-management.store';\nimport { WardOperationsService } from './services/ward-operations.service';\nimport { WardStore } from './services/ward.store';\n\nexport const WARD_MANAGEMENT_ROUTES: Routes = [\n {\n path: '',\n //canActivate: [authGuard, adminGuard],\n providers: [WardStore, WardOperationsService, AssignmentOperationsService, WardManagementStore],\n loadComponent: () =>\n import('./components/ward-management-page-component/ward-management-page-component').then((m) => m.WardManagementPageComponent)\n }\n];\n"],mappings:"6YAQO,IAAMA,EAAiC,CAC5C,CACEC,KAAM,GAENC,UAAW,CAACC,EAAWC,EAAuBC,EAA6BC,CAAmB,EAC9FC,cAAeA,IACb,OAAO,qBAA4E,EAAEC,KAAMC,GAAMA,EAAEC,2BAA2B,EACjI",names:["WARD_MANAGEMENT_ROUTES","path","providers","WardStore","WardOperationsService","AssignmentOperationsService","WardManagementStore","loadComponent","then","m","WardManagementPageComponent"]},_coverageSchema:"1a1c01bbd47fc00a2c39e90264f33305004495a9",hash:"d2216cf2f7113b9a35691868b470166920179c3f"};var coverage=global[gcv]||(global[gcv]={});if(!coverage[path]||coverage[path].hash!==hash){coverage[path]=coverageData;}var actualCoverage=coverage[path];{// @ts-ignore +cov_2ef0rfkpgb=function(){return actualCoverage;};}return actualCoverage;}cov_2ef0rfkpgb();import{a as r,b as o,c as e,d as t}from"./chunk-ZA5BAUMQ.js";import"./chunk-54EPVJ7F.js";import"./chunk-6R7YSGCL.js";import"./chunk-666MVPNS.js";import"./chunk-WCZEJQCH.js";import"./chunk-EZ7WFT6U.js";import"./chunk-CFHT7CZE.js";import"./chunk-CX4DL26R.js";import"./chunk-ZZLQRDHJ.js";import"./chunk-65RKWSY3.js";import"./chunk-2S5V5XEE.js";import"./chunk-RYTNMYZW.js";import"./chunk-VCZGUBMY.js";var d=(cov_2ef0rfkpgb().s[0]++,[{path:"",providers:[r,e,o,t],loadComponent:()=>{cov_2ef0rfkpgb().f[0]++;cov_2ef0rfkpgb().s[1]++;return import("./chunk-VJLNG5UH.js").then(m=>{cov_2ef0rfkpgb().f[1]++;cov_2ef0rfkpgb().s[2]++;return m.WardManagementPageComponent;});}}]);export{d as WARD_MANAGEMENT_ROUTES};//# sourceMappingURL=chunk-VWERK2XT.js.map +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJkIiwiY292XzJlZjByZmtwZ2IiLCJzIiwicGF0aCIsInByb3ZpZGVycyIsInIiLCJlIiwibyIsInQiLCJsb2FkQ29tcG9uZW50IiwiZiIsInRoZW4iLCJtIiwiV2FyZE1hbmFnZW1lbnRQYWdlQ29tcG9uZW50IiwiV0FSRF9NQU5BR0VNRU5UX1JPVVRFUyJdLCJzb3VyY2VzIjpbInNyYy9hcHAvZmVhdHVyZXMvd2FyZC1tYW5hZ2VtZW50L3dhcmQtbWFuYWdlbWVudC5yb3V0ZXMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUm91dGVzIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IGFkbWluR3VhcmQgfSBmcm9tICcuLi8uLi9jb3JlL2d1YXJkcy9hZG1pbi5ndWFyZCc7XG5pbXBvcnQgeyBhdXRoR3VhcmQgfSBmcm9tICcuLi8uLi9jb3JlL2d1YXJkcy9hdXRoLmd1YXJkJztcbmltcG9ydCB7IEFzc2lnbm1lbnRPcGVyYXRpb25zU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvYXNzaWdubWVudC1vcGVyYXRpb25zLnNlcnZpY2UnO1xuaW1wb3J0IHsgV2FyZE1hbmFnZW1lbnRTdG9yZSB9IGZyb20gJy4vc2VydmljZXMvd2FyZC1tYW5hZ2VtZW50LnN0b3JlJztcbmltcG9ydCB7IFdhcmRPcGVyYXRpb25zU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvd2FyZC1vcGVyYXRpb25zLnNlcnZpY2UnO1xuaW1wb3J0IHsgV2FyZFN0b3JlIH0gZnJvbSAnLi9zZXJ2aWNlcy93YXJkLnN0b3JlJztcblxuZXhwb3J0IGNvbnN0IFdBUkRfTUFOQUdFTUVOVF9ST1VURVM6IFJvdXRlcyA9IFtcbiAge1xuICAgIHBhdGg6ICcnLFxuICAgIC8vY2FuQWN0aXZhdGU6IFthdXRoR3VhcmQsIGFkbWluR3VhcmRdLFxuICAgIHByb3ZpZGVyczogW1dhcmRTdG9yZSwgV2FyZE9wZXJhdGlvbnNTZXJ2aWNlLCBBc3NpZ25tZW50T3BlcmF0aW9uc1NlcnZpY2UsIFdhcmRNYW5hZ2VtZW50U3RvcmVdLFxuICAgIGxvYWRDb21wb25lbnQ6ICgpID0+XG4gICAgICBpbXBvcnQoJy4vY29tcG9uZW50cy93YXJkLW1hbmFnZW1lbnQtcGFnZS1jb21wb25lbnQvd2FyZC1tYW5hZ2VtZW50LXBhZ2UtY29tcG9uZW50JykudGhlbigobSkgPT4gbS5XYXJkTWFuYWdlbWVudFBhZ2VDb21wb25lbnQpXG4gIH1cbl07XG4iXSwibWFwcGluZ3MiOiI7d2VBUU8sR0FBTSxDQUFBQSxDQUFBLEVBQUFDLGNBQUEsR0FBQUMsQ0FBQSxNQUFpQyxDQUM1QyxDQUNFQyxJQUFBLENBQU0sR0FFTkMsU0FBQSxDQUFXLENBQUNDLENBQUEsQ0FBV0MsQ0FBQSxDQUF1QkMsQ0FBQSxDQUE2QkMsQ0FBbUIsRUFDOUZDLGFBQUEsQ0FBZUEsQ0FBQSxHQUNiLENBQUFSLGNBQUEsR0FBQVMsQ0FBQSxLQUFBVCxDQUFBLGlCQUFBQyxDQUFBLG9CQUFPLHFCQUE0RSxFQUFFUyxJQUFBLENBQU1DLENBQUEsRUFBTSxDQUFBWCxjQUFBLEdBQUFTLENBQUEsS0FBQVQsQ0FBQSxpQkFBQUMsQ0FBQSxhQUFBVSxDQUFBLENBQUVDLDJCQUEyQixDQUEzQixDQUEyQixJQUNqSSxVQUFBYixDQUFBLElBQUFjLHNCQUFBLEUiLCJpZ25vcmVMaXN0IjpbXX0= \ No newline at end of file diff --git a/frontend/dist-instrumented/chunk-VWERK2XT.js.map b/frontend/dist-instrumented/chunk-VWERK2XT.js.map new file mode 100644 index 00000000..160167f3 --- /dev/null +++ b/frontend/dist-instrumented/chunk-VWERK2XT.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["src/app/features/ward-management/ward-management.routes.ts"], + "sourcesContent": ["import { Routes } from '@angular/router';\nimport { adminGuard } from '../../core/guards/admin.guard';\nimport { authGuard } from '../../core/guards/auth.guard';\nimport { AssignmentOperationsService } from './services/assignment-operations.service';\nimport { WardManagementStore } from './services/ward-management.store';\nimport { WardOperationsService } from './services/ward-operations.service';\nimport { WardStore } from './services/ward.store';\n\nexport const WARD_MANAGEMENT_ROUTES: Routes = [\n {\n path: '',\n //canActivate: [authGuard, adminGuard],\n providers: [WardStore, WardOperationsService, AssignmentOperationsService, WardManagementStore],\n loadComponent: () =>\n import('./components/ward-management-page-component/ward-management-page-component').then((m) => m.WardManagementPageComponent)\n }\n];\n"], + "mappings": "6YAQO,IAAMA,EAAiC,CAC5C,CACEC,KAAM,GAENC,UAAW,CAACC,EAAWC,EAAuBC,EAA6BC,CAAmB,EAC9FC,cAAeA,IACb,OAAO,qBAA4E,EAAEC,KAAMC,GAAMA,EAAEC,2BAA2B,EACjI", + "names": ["WARD_MANAGEMENT_ROUTES", "path", "providers", "WardStore", "WardOperationsService", "AssignmentOperationsService", "WardManagementStore", "loadComponent", "then", "m", "WardManagementPageComponent"] +} diff --git a/frontend/dist-instrumented/chunk-WCZEJQCH.js b/frontend/dist-instrumented/chunk-WCZEJQCH.js new file mode 100644 index 00000000..3d42fa33 --- /dev/null +++ b/frontend/dist-instrumented/chunk-WCZEJQCH.js @@ -0,0 +1,3 @@ +function cov_1p93k5e8ew(){var path="/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-WCZEJQCH.js";var hash="90aa3c43e29a38ecc3661c91a8945bbbfacdde28";var global=new Function("return this")();var gcv="__coverage__";var coverageData={path:"/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-WCZEJQCH.js",statementMap:{"0":{start:{line:1,column:46},end:{line:1,column:48}},"1":{start:{line:1,column:51},end:{line:1,column:76}},"2":{start:{line:1,column:79},end:{line:1,column:96}},"3":{start:{line:1,column:123},end:{line:1,column:127}},"4":{start:{line:1,column:130},end:{line:1,column:134}},"5":{start:{line:1,column:135},end:{line:1,column:154}},"6":{start:{line:1,column:145},end:{line:1,column:154}},"7":{start:{line:1,column:160},end:{line:1,column:167}},"8":{start:{line:1,column:170},end:{line:1,column:192}},"9":{start:{line:1,column:195},end:{line:1,column:253}},"10":{start:{line:1,column:254},end:{line:1,column:270}},"11":{start:{line:1,column:285},end:{line:1,column:353}},"12":{start:{line:1,column:374},end:{line:1,column:378}},"13":{start:{line:1,column:379},end:{line:1,column:403}},"14":{start:{line:1,column:391},end:{line:1,column:403}},"15":{start:{line:1,column:403},end:{line:1,column:534}},"16":{start:{line:1,column:426},end:{line:1,column:436}},"17":{start:{line:1,column:449},end:{line:1,column:464}},"18":{start:{line:1,column:478},end:{line:1,column:488}},"19":{start:{line:1,column:499},end:{line:1,column:514}},"20":{start:{line:1,column:522},end:{line:1,column:533}},"21":{start:{line:1,column:549},end:{line:1,column:657}},"22":{start:{line:1,column:672},end:{line:1,column:690}},"23":{start:{line:1,column:678},end:{line:1,column:690}},"24":{start:{line:1,column:696},end:{line:1,column:700}},"25":{start:{line:1,column:701},end:{line:1,column:722}},"26":{start:{line:1,column:713},end:{line:1,column:722}},"27":{start:{line:1,column:728},end:{line:1,column:737}},"28":{start:{line:1,column:738},end:{line:1,column:777}},"29":{start:{line:1,column:792},end:{line:1,column:817}},"30":{start:{line:1,column:805},end:{line:1,column:817}},"31":{start:{line:1,column:823},end:{line:1,column:827}},"32":{start:{line:1,column:828},end:{line:1,column:866}},"33":{start:{line:1,column:881},end:{line:1,column:937}}},fnMap:{"0":{name:"A",decl:{start:{line:1,column:106},end:{line:1,column:107}},loc:{start:{line:1,column:116},end:{line:1,column:271}},line:1},"1":{name:"f",decl:{start:{line:1,column:280},end:{line:1,column:281}},loc:{start:{line:1,column:284},end:{line:1,column:354}},line:1},"2":{name:"E",decl:{start:{line:1,column:363},end:{line:1,column:364}},loc:{start:{line:1,column:367},end:{line:1,column:535}},line:1},"3":{name:"T",decl:{start:{line:1,column:544},end:{line:1,column:545}},loc:{start:{line:1,column:548},end:{line:1,column:658}},line:1},"4":{name:"N",decl:{start:{line:1,column:667},end:{line:1,column:668}},loc:{start:{line:1,column:671},end:{line:1,column:778}},line:1},"5":{name:"I",decl:{start:{line:1,column:787},end:{line:1,column:788}},loc:{start:{line:1,column:791},end:{line:1,column:867}},line:1},"6":{name:"o",decl:{start:{line:1,column:876},end:{line:1,column:877}},loc:{start:{line:1,column:880},end:{line:1,column:938}},line:1}},branchMap:{"0":{loc:{start:{line:1,column:112},end:{line:1,column:115}},type:"default-arg",locations:[{start:{line:1,column:114},end:{line:1,column:115}}],line:1},"1":{loc:{start:{line:1,column:135},end:{line:1,column:154}},type:"if",locations:[{start:{line:1,column:135},end:{line:1,column:154}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"2":{loc:{start:{line:1,column:138},end:{line:1,column:144}},type:"binary-expr",locations:[{start:{line:1,column:138},end:{line:1,column:140}},{start:{line:1,column:142},end:{line:1,column:144}}],line:1},"3":{loc:{start:{line:1,column:195},end:{line:1,column:253}},type:"cond-expr",locations:[{start:{line:1,column:207},end:{line:1,column:208}},{start:{line:1,column:209},end:{line:1,column:253}}],line:1},"4":{loc:{start:{line:1,column:292},end:{line:1,column:353}},type:"cond-expr",locations:[{start:{line:1,column:311},end:{line:1,column:315}},{start:{line:1,column:316},end:{line:1,column:353}}],line:1},"5":{loc:{start:{line:1,column:316},end:{line:1,column:353}},type:"binary-expr",locations:[{start:{line:1,column:316},end:{line:1,column:347}},{start:{line:1,column:349},end:{line:1,column:353}}],line:1},"6":{loc:{start:{line:1,column:379},end:{line:1,column:403}},type:"if",locations:[{start:{line:1,column:379},end:{line:1,column:403}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"7":{loc:{start:{line:1,column:403},end:{line:1,column:534}},type:"switch",locations:[{start:{line:1,column:413},end:{line:1,column:436}},{start:{line:1,column:436},end:{line:1,column:464}},{start:{line:1,column:464},end:{line:1,column:488}},{start:{line:1,column:488},end:{line:1,column:514}},{start:{line:1,column:514},end:{line:1,column:533}}],line:1},"8":{loc:{start:{line:1,column:556},end:{line:1,column:657}},type:"cond-expr",locations:[{start:{line:1,column:596},end:{line:1,column:607}},{start:{line:1,column:608},end:{line:1,column:657}}],line:1},"9":{loc:{start:{line:1,column:556},end:{line:1,column:595}},type:"binary-expr",locations:[{start:{line:1,column:556},end:{line:1,column:574}},{start:{line:1,column:576},end:{line:1,column:595}}],line:1},"10":{loc:{start:{line:1,column:596},end:{line:1,column:607}},type:"cond-expr",locations:[{start:{line:1,column:601},end:{line:1,column:602}},{start:{line:1,column:603},end:{line:1,column:607}}],line:1},"11":{loc:{start:{line:1,column:608},end:{line:1,column:657}},type:"cond-expr",locations:[{start:{line:1,column:627},end:{line:1,column:631}},{start:{line:1,column:632},end:{line:1,column:657}}],line:1},"12":{loc:{start:{line:1,column:672},end:{line:1,column:690}},type:"if",locations:[{start:{line:1,column:672},end:{line:1,column:690}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"13":{loc:{start:{line:1,column:701},end:{line:1,column:722}},type:"if",locations:[{start:{line:1,column:701},end:{line:1,column:722}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"14":{loc:{start:{line:1,column:745},end:{line:1,column:777}},type:"cond-expr",locations:[{start:{line:1,column:771},end:{line:1,column:772}},{start:{line:1,column:773},end:{line:1,column:777}}],line:1},"15":{loc:{start:{line:1,column:745},end:{line:1,column:770}},type:"binary-expr",locations:[{start:{line:1,column:745},end:{line:1,column:764}},{start:{line:1,column:766},end:{line:1,column:770}}],line:1},"16":{loc:{start:{line:1,column:792},end:{line:1,column:817}},type:"if",locations:[{start:{line:1,column:792},end:{line:1,column:817}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"17":{loc:{start:{line:1,column:835},end:{line:1,column:866}},type:"cond-expr",locations:[{start:{line:1,column:860},end:{line:1,column:861}},{start:{line:1,column:862},end:{line:1,column:866}}],line:1},"18":{loc:{start:{line:1,column:835},end:{line:1,column:859}},type:"binary-expr",locations:[{start:{line:1,column:835},end:{line:1,column:853}},{start:{line:1,column:855},end:{line:1,column:859}}],line:1},"19":{loc:{start:{line:1,column:888},end:{line:1,column:937}},type:"binary-expr",locations:[{start:{line:1,column:888},end:{line:1,column:899}},{start:{line:1,column:901},end:{line:1,column:912}},{start:{line:1,column:914},end:{line:1,column:926}},{start:{line:1,column:928},end:{line:1,column:937}}],line:1}},s:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0},f:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0},b:{"0":[0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0,0,0,0],"8":[0,0],"9":[0,0],"10":[0,0],"11":[0,0],"12":[0,0],"13":[0,0],"14":[0,0],"15":[0,0],"16":[0,0],"17":[0,0],"18":[0,0],"19":[0,0,0,0]},inputSourceMap:{version:3,sources:["src/app/core/notification/utils/notification-title.util.ts"],sourcesContent:["import { AlarmPriority } from '../../alarm/models/alarm-priority.enum';\n\nconst MAX_NOTIFICATION_TITLE_LENGTH = 64;\n\nexport const DEFAULT_TRIGGERED_NOTIFICATION_TITLE = \"C'e un allarme in corso\";\nexport const DEFAULT_RESOLVED_NOTIFICATION_TITLE = 'Allarme risolto';\n\nexport function formatTriggeredNotificationTitle(\n\talarmName: unknown,\n\tpriority: unknown,\n\tmaxLength: number = MAX_NOTIFICATION_TITLE_LENGTH\n): string {\n\tconst normalizedPrioritySymbol = toPrioritySymbol(priority);\n\tconst normalizedAlarmName = normalizeAlarmName(alarmName);\n\tif (!normalizedAlarmName || !normalizedPrioritySymbol) {\n\t\treturn DEFAULT_TRIGGERED_NOTIFICATION_TITLE;\n\t}\n\n\tconst prefix = `${normalizedPrioritySymbol} `;\n\tconst allowedNameLength = Math.max(1, maxLength - prefix.length);\n\tconst compactAlarmName = normalizedAlarmName.length <= allowedNameLength\n\t\t? normalizedAlarmName\n\t\t: `${normalizedAlarmName.slice(0, Math.max(allowedNameLength - 1, 1)).trimEnd()}...`;\n\n\treturn `${prefix}${compactAlarmName}`;\n}\n\nfunction normalizeAlarmName(value: unknown): string | null {\n\tif (typeof value !== 'string') {\n\t\treturn null;\n\t}\n\n\tconst compact = value.replaceAll(/\\s+/g, ' ').trim();\n\treturn compact || null;\n}\n\nfunction toPrioritySymbol(value: unknown): string | null {\n\tconst priority = normalizePriority(value);\n\tif (priority === null) {\n\t\treturn null;\n\t}\n\n\tswitch (priority) {\n\t\tcase AlarmPriority.WHITE:\n\t\t\treturn 'i';\n\t\tcase AlarmPriority.GREEN:\n\t\t\treturn '\u2022';\n\t\tcase AlarmPriority.ORANGE:\n\t\t\treturn '!';\n\t\tcase AlarmPriority.RED:\n\t\t\treturn '\u25B2';\n\t\tdefault:\n\t\t\treturn null;\n\t}\n}\n\nfunction normalizePriority(value: unknown): AlarmPriority | null {\n\tif (typeof value === 'number' && Number.isInteger(value)) {\n\t\treturn isKnownPriority(value) ? value : null;\n\t}\n\n\tif (typeof value !== 'string') {\n\t\treturn null;\n\t}\n\n\treturn normalizePriorityFromString(value.trim().toUpperCase());\n}\n\nfunction normalizePriorityFromString(compact: string): AlarmPriority | null {\n\tif (!compact) {\n\t\treturn null;\n\t}\n\n\tconst enumValue = toEnumPriority(compact);\n\tif (enumValue !== null) {\n\t\treturn enumValue;\n\t}\n\n\tconst parsed = Number(compact);\n\treturn Number.isInteger(parsed) && isKnownPriority(parsed) ? parsed : null;\n}\n\nfunction toEnumPriority(compact: string): AlarmPriority | null {\n\tif (!(compact in AlarmPriority)) {\n\t\treturn null;\n\t}\n\n\tconst enumValue = AlarmPriority[compact as keyof typeof AlarmPriority];\n\treturn typeof enumValue === 'number' && isKnownPriority(enumValue) ? enumValue : null;\n}\n\nfunction isKnownPriority(value: number): value is AlarmPriority {\n\treturn (\n\t\tvalue === AlarmPriority.WHITE ||\n\t\tvalue === AlarmPriority.GREEN ||\n\t\tvalue === AlarmPriority.ORANGE ||\n\t\tvalue === AlarmPriority.RED\n\t);\n}\n"],mappings:"wCAEA,IAAMA,EAAgC,GAEzBC,EAAuC,0BACvCC,EAAsC,kBAE7C,SAAUC,EACfC,EACAC,EACAC,EAAoBN,EAA6B,CAEjD,IAAMO,EAA2BC,EAAiBH,CAAQ,EACpDI,EAAsBC,EAAmBN,CAAS,EACxD,GAAI,CAACK,GAAuB,CAACF,EAC5B,OAAON,EAGR,IAAMU,EAAS,GAAGJ,CAAwB,IACpCK,EAAoBC,KAAKC,IAAI,EAAGR,EAAYK,EAAOI,MAAM,EACzDC,EAAmBP,EAAoBM,QAAUH,EACpDH,EACA,GAAGA,EAAoBQ,MAAM,EAAGJ,KAAKC,IAAIF,EAAoB,EAAG,CAAC,CAAC,EAAEM,QAAO,CAAE,MAEhF,MAAO,GAAGP,CAAM,GAAGK,CAAgB,EACpC,CAEA,SAASN,EAAmBS,EAAc,CACzC,OAAI,OAAOA,GAAU,SACb,KAGQA,EAAMC,WAAW,OAAQ,GAAG,EAAEC,KAAI,GAChC,IACnB,CAEA,SAASb,EAAiBW,EAAc,CACvC,IAAMd,EAAWiB,EAAkBH,CAAK,EACxC,GAAId,IAAa,KAChB,OAAO,KAGR,OAAQA,EAAQ,CACf,KAAKkB,EAAcC,MAClB,MAAO,IACR,KAAKD,EAAcE,MAClB,MAAO,SACR,KAAKF,EAAcG,OAClB,MAAO,IACR,KAAKH,EAAcI,IAClB,MAAO,SACR,QACC,OAAO,IACT,CACD,CAEA,SAASL,EAAkBH,EAAc,CACxC,OAAI,OAAOA,GAAU,UAAYS,OAAOC,UAAUV,CAAK,EAC/CW,EAAgBX,CAAK,EAAIA,EAAQ,KAGrC,OAAOA,GAAU,SACb,KAGDY,EAA4BZ,EAAME,KAAI,EAAGW,YAAW,CAAE,CAC9D,CAEA,SAASD,EAA4BE,EAAe,CACnD,GAAI,CAACA,EACJ,OAAO,KAGR,IAAMC,EAAYC,EAAeF,CAAO,EACxC,GAAIC,IAAc,KACjB,OAAOA,EAGR,IAAME,EAASR,OAAOK,CAAO,EAC7B,OAAOL,OAAOC,UAAUO,CAAM,GAAKN,EAAgBM,CAAM,EAAIA,EAAS,IACvE,CAEA,SAASD,EAAeF,EAAe,CACtC,GAAI,EAAEA,KAAWV,GAChB,OAAO,KAGR,IAAMW,EAAYX,EAAcU,CAAqC,EACrE,OAAO,OAAOC,GAAc,UAAYJ,EAAgBI,CAAS,EAAIA,EAAY,IAClF,CAEA,SAASJ,EAAgBX,EAAa,CACrC,OACCA,IAAUI,EAAcC,OACxBL,IAAUI,EAAcE,OACxBN,IAAUI,EAAcG,QACxBP,IAAUI,EAAcI,GAE1B",names:["MAX_NOTIFICATION_TITLE_LENGTH","DEFAULT_TRIGGERED_NOTIFICATION_TITLE","DEFAULT_RESOLVED_NOTIFICATION_TITLE","formatTriggeredNotificationTitle","alarmName","priority","maxLength","normalizedPrioritySymbol","toPrioritySymbol","normalizedAlarmName","normalizeAlarmName","prefix","allowedNameLength","Math","max","length","compactAlarmName","slice","trimEnd","value","replaceAll","trim","normalizePriority","AlarmPriority","WHITE","GREEN","ORANGE","RED","Number","isInteger","isKnownPriority","normalizePriorityFromString","toUpperCase","compact","enumValue","toEnumPriority","parsed"]},_coverageSchema:"1a1c01bbd47fc00a2c39e90264f33305004495a9",hash:"90aa3c43e29a38ecc3661c91a8945bbbfacdde28"};var coverage=global[gcv]||(global[gcv]={});if(!coverage[path]||coverage[path].hash!==hash){coverage[path]=coverageData;}var actualCoverage=coverage[path];{// @ts-ignore +cov_1p93k5e8ew=function(){return actualCoverage;};}return actualCoverage;}cov_1p93k5e8ew();import{a as t}from"./chunk-ZZLQRDHJ.js";var s=(cov_1p93k5e8ew().s[0]++,64),a=(cov_1p93k5e8ew().s[1]++,"C'e un allarme in corso"),y=(cov_1p93k5e8ew().s[2]++,"Allarme risolto");function A(r,n,e=(cov_1p93k5e8ew().b[0][0]++,s)){cov_1p93k5e8ew().f[0]++;let l=(cov_1p93k5e8ew().s[3]++,E(n)),i=(cov_1p93k5e8ew().s[4]++,f(r));cov_1p93k5e8ew().s[5]++;if((cov_1p93k5e8ew().b[2][0]++,!i)||(cov_1p93k5e8ew().b[2][1]++,!l)){cov_1p93k5e8ew().b[1][0]++;cov_1p93k5e8ew().s[6]++;return a;}else{cov_1p93k5e8ew().b[1][1]++;}let u=(cov_1p93k5e8ew().s[7]++,`${l} `),m=(cov_1p93k5e8ew().s[8]++,Math.max(1,e-u.length)),c=(cov_1p93k5e8ew().s[9]++,i.length<=m?(cov_1p93k5e8ew().b[3][0]++,i):(cov_1p93k5e8ew().b[3][1]++,`${i.slice(0,Math.max(m-1,1)).trimEnd()}...`));cov_1p93k5e8ew().s[10]++;return`${u}${c}`;}function f(r){cov_1p93k5e8ew().f[1]++;cov_1p93k5e8ew().s[11]++;return typeof r!="string"?(cov_1p93k5e8ew().b[4][0]++,null):(cov_1p93k5e8ew().b[4][1]++,(cov_1p93k5e8ew().b[5][0]++,r.replaceAll(/\s+/g," ").trim())||(cov_1p93k5e8ew().b[5][1]++,null));}function E(r){cov_1p93k5e8ew().f[2]++;let n=(cov_1p93k5e8ew().s[12]++,T(r));cov_1p93k5e8ew().s[13]++;if(n===null){cov_1p93k5e8ew().b[6][0]++;cov_1p93k5e8ew().s[14]++;return null;}else{cov_1p93k5e8ew().b[6][1]++;}cov_1p93k5e8ew().s[15]++;switch(n){case t.WHITE:cov_1p93k5e8ew().b[7][0]++;cov_1p93k5e8ew().s[16]++;return"i";case t.GREEN:cov_1p93k5e8ew().b[7][1]++;cov_1p93k5e8ew().s[17]++;return"\u2022";case t.ORANGE:cov_1p93k5e8ew().b[7][2]++;cov_1p93k5e8ew().s[18]++;return"!";case t.RED:cov_1p93k5e8ew().b[7][3]++;cov_1p93k5e8ew().s[19]++;return"\u25B2";default:cov_1p93k5e8ew().b[7][4]++;cov_1p93k5e8ew().s[20]++;return null;}}function T(r){cov_1p93k5e8ew().f[3]++;cov_1p93k5e8ew().s[21]++;return(cov_1p93k5e8ew().b[9][0]++,typeof r=="number")&&(cov_1p93k5e8ew().b[9][1]++,Number.isInteger(r))?(cov_1p93k5e8ew().b[8][0]++,o(r)?(cov_1p93k5e8ew().b[10][0]++,r):(cov_1p93k5e8ew().b[10][1]++,null)):(cov_1p93k5e8ew().b[8][1]++,typeof r!="string"?(cov_1p93k5e8ew().b[11][0]++,null):(cov_1p93k5e8ew().b[11][1]++,N(r.trim().toUpperCase())));}function N(r){cov_1p93k5e8ew().f[4]++;cov_1p93k5e8ew().s[22]++;if(!r){cov_1p93k5e8ew().b[12][0]++;cov_1p93k5e8ew().s[23]++;return null;}else{cov_1p93k5e8ew().b[12][1]++;}let n=(cov_1p93k5e8ew().s[24]++,I(r));cov_1p93k5e8ew().s[25]++;if(n!==null){cov_1p93k5e8ew().b[13][0]++;cov_1p93k5e8ew().s[26]++;return n;}else{cov_1p93k5e8ew().b[13][1]++;}let e=(cov_1p93k5e8ew().s[27]++,Number(r));cov_1p93k5e8ew().s[28]++;return(cov_1p93k5e8ew().b[15][0]++,Number.isInteger(e))&&(cov_1p93k5e8ew().b[15][1]++,o(e))?(cov_1p93k5e8ew().b[14][0]++,e):(cov_1p93k5e8ew().b[14][1]++,null);}function I(r){cov_1p93k5e8ew().f[5]++;cov_1p93k5e8ew().s[29]++;if(!(r in t)){cov_1p93k5e8ew().b[16][0]++;cov_1p93k5e8ew().s[30]++;return null;}else{cov_1p93k5e8ew().b[16][1]++;}let n=(cov_1p93k5e8ew().s[31]++,t[r]);cov_1p93k5e8ew().s[32]++;return(cov_1p93k5e8ew().b[18][0]++,typeof n=="number")&&(cov_1p93k5e8ew().b[18][1]++,o(n))?(cov_1p93k5e8ew().b[17][0]++,n):(cov_1p93k5e8ew().b[17][1]++,null);}function o(r){cov_1p93k5e8ew().f[6]++;cov_1p93k5e8ew().s[33]++;return(cov_1p93k5e8ew().b[19][0]++,r===t.WHITE)||(cov_1p93k5e8ew().b[19][1]++,r===t.GREEN)||(cov_1p93k5e8ew().b[19][2]++,r===t.ORANGE)||(cov_1p93k5e8ew().b[19][3]++,r===t.RED);}export{a,y as b,A as c};//# sourceMappingURL=chunk-WCZEJQCH.js.map +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJzIiwiY292XzFwOTNrNWU4ZXciLCJhIiwieSIsIkEiLCJyIiwibiIsImUiLCJiIiwiZiIsImwiLCJFIiwiaSIsInUiLCJtIiwiTWF0aCIsIm1heCIsImxlbmd0aCIsImMiLCJzbGljZSIsInRyaW1FbmQiLCJyZXBsYWNlQWxsIiwidHJpbSIsIlQiLCJ0IiwiV0hJVEUiLCJHUkVFTiIsIk9SQU5HRSIsIlJFRCIsIk51bWJlciIsImlzSW50ZWdlciIsIm8iLCJOIiwidG9VcHBlckNhc2UiLCJJIl0sInNvdXJjZXMiOlsic3JjL2FwcC9jb3JlL25vdGlmaWNhdGlvbi91dGlscy9ub3RpZmljYXRpb24tdGl0bGUudXRpbC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBbGFybVByaW9yaXR5IH0gZnJvbSAnLi4vLi4vYWxhcm0vbW9kZWxzL2FsYXJtLXByaW9yaXR5LmVudW0nO1xuXG5jb25zdCBNQVhfTk9USUZJQ0FUSU9OX1RJVExFX0xFTkdUSCA9IDY0O1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9UUklHR0VSRURfTk9USUZJQ0FUSU9OX1RJVExFID0gXCJDJ2UgdW4gYWxsYXJtZSBpbiBjb3Jzb1wiO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfUkVTT0xWRURfTk9USUZJQ0FUSU9OX1RJVExFID0gJ0FsbGFybWUgcmlzb2x0byc7XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRUcmlnZ2VyZWROb3RpZmljYXRpb25UaXRsZShcblx0YWxhcm1OYW1lOiB1bmtub3duLFxuXHRwcmlvcml0eTogdW5rbm93bixcblx0bWF4TGVuZ3RoOiBudW1iZXIgPSBNQVhfTk9USUZJQ0FUSU9OX1RJVExFX0xFTkdUSFxuKTogc3RyaW5nIHtcblx0Y29uc3Qgbm9ybWFsaXplZFByaW9yaXR5U3ltYm9sID0gdG9Qcmlvcml0eVN5bWJvbChwcmlvcml0eSk7XG5cdGNvbnN0IG5vcm1hbGl6ZWRBbGFybU5hbWUgPSBub3JtYWxpemVBbGFybU5hbWUoYWxhcm1OYW1lKTtcblx0aWYgKCFub3JtYWxpemVkQWxhcm1OYW1lIHx8ICFub3JtYWxpemVkUHJpb3JpdHlTeW1ib2wpIHtcblx0XHRyZXR1cm4gREVGQVVMVF9UUklHR0VSRURfTk9USUZJQ0FUSU9OX1RJVExFO1xuXHR9XG5cblx0Y29uc3QgcHJlZml4ID0gYCR7bm9ybWFsaXplZFByaW9yaXR5U3ltYm9sfSBgO1xuXHRjb25zdCBhbGxvd2VkTmFtZUxlbmd0aCA9IE1hdGgubWF4KDEsIG1heExlbmd0aCAtIHByZWZpeC5sZW5ndGgpO1xuXHRjb25zdCBjb21wYWN0QWxhcm1OYW1lID0gbm9ybWFsaXplZEFsYXJtTmFtZS5sZW5ndGggPD0gYWxsb3dlZE5hbWVMZW5ndGhcblx0XHQ/IG5vcm1hbGl6ZWRBbGFybU5hbWVcblx0XHQ6IGAke25vcm1hbGl6ZWRBbGFybU5hbWUuc2xpY2UoMCwgTWF0aC5tYXgoYWxsb3dlZE5hbWVMZW5ndGggLSAxLCAxKSkudHJpbUVuZCgpfS4uLmA7XG5cblx0cmV0dXJuIGAke3ByZWZpeH0ke2NvbXBhY3RBbGFybU5hbWV9YDtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplQWxhcm1OYW1lKHZhbHVlOiB1bmtub3duKTogc3RyaW5nIHwgbnVsbCB7XG5cdGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKSB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHRjb25zdCBjb21wYWN0ID0gdmFsdWUucmVwbGFjZUFsbCgvXFxzKy9nLCAnICcpLnRyaW0oKTtcblx0cmV0dXJuIGNvbXBhY3QgfHwgbnVsbDtcbn1cblxuZnVuY3Rpb24gdG9Qcmlvcml0eVN5bWJvbCh2YWx1ZTogdW5rbm93bik6IHN0cmluZyB8IG51bGwge1xuXHRjb25zdCBwcmlvcml0eSA9IG5vcm1hbGl6ZVByaW9yaXR5KHZhbHVlKTtcblx0aWYgKHByaW9yaXR5ID09PSBudWxsKSB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHRzd2l0Y2ggKHByaW9yaXR5KSB7XG5cdFx0Y2FzZSBBbGFybVByaW9yaXR5LldISVRFOlxuXHRcdFx0cmV0dXJuICdpJztcblx0XHRjYXNlIEFsYXJtUHJpb3JpdHkuR1JFRU46XG5cdFx0XHRyZXR1cm4gJ+KAoic7XG5cdFx0Y2FzZSBBbGFybVByaW9yaXR5Lk9SQU5HRTpcblx0XHRcdHJldHVybiAnISc7XG5cdFx0Y2FzZSBBbGFybVByaW9yaXR5LlJFRDpcblx0XHRcdHJldHVybiAn4payJztcblx0XHRkZWZhdWx0OlxuXHRcdFx0cmV0dXJuIG51bGw7XG5cdH1cbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplUHJpb3JpdHkodmFsdWU6IHVua25vd24pOiBBbGFybVByaW9yaXR5IHwgbnVsbCB7XG5cdGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmIE51bWJlci5pc0ludGVnZXIodmFsdWUpKSB7XG5cdFx0cmV0dXJuIGlzS25vd25Qcmlvcml0eSh2YWx1ZSkgPyB2YWx1ZSA6IG51bGw7XG5cdH1cblxuXHRpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJykge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0cmV0dXJuIG5vcm1hbGl6ZVByaW9yaXR5RnJvbVN0cmluZyh2YWx1ZS50cmltKCkudG9VcHBlckNhc2UoKSk7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVByaW9yaXR5RnJvbVN0cmluZyhjb21wYWN0OiBzdHJpbmcpOiBBbGFybVByaW9yaXR5IHwgbnVsbCB7XG5cdGlmICghY29tcGFjdCkge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0Y29uc3QgZW51bVZhbHVlID0gdG9FbnVtUHJpb3JpdHkoY29tcGFjdCk7XG5cdGlmIChlbnVtVmFsdWUgIT09IG51bGwpIHtcblx0XHRyZXR1cm4gZW51bVZhbHVlO1xuXHR9XG5cblx0Y29uc3QgcGFyc2VkID0gTnVtYmVyKGNvbXBhY3QpO1xuXHRyZXR1cm4gTnVtYmVyLmlzSW50ZWdlcihwYXJzZWQpICYmIGlzS25vd25Qcmlvcml0eShwYXJzZWQpID8gcGFyc2VkIDogbnVsbDtcbn1cblxuZnVuY3Rpb24gdG9FbnVtUHJpb3JpdHkoY29tcGFjdDogc3RyaW5nKTogQWxhcm1Qcmlvcml0eSB8IG51bGwge1xuXHRpZiAoIShjb21wYWN0IGluIEFsYXJtUHJpb3JpdHkpKSB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHRjb25zdCBlbnVtVmFsdWUgPSBBbGFybVByaW9yaXR5W2NvbXBhY3QgYXMga2V5b2YgdHlwZW9mIEFsYXJtUHJpb3JpdHldO1xuXHRyZXR1cm4gdHlwZW9mIGVudW1WYWx1ZSA9PT0gJ251bWJlcicgJiYgaXNLbm93blByaW9yaXR5KGVudW1WYWx1ZSkgPyBlbnVtVmFsdWUgOiBudWxsO1xufVxuXG5mdW5jdGlvbiBpc0tub3duUHJpb3JpdHkodmFsdWU6IG51bWJlcik6IHZhbHVlIGlzIEFsYXJtUHJpb3JpdHkge1xuXHRyZXR1cm4gKFxuXHRcdHZhbHVlID09PSBBbGFybVByaW9yaXR5LldISVRFIHx8XG5cdFx0dmFsdWUgPT09IEFsYXJtUHJpb3JpdHkuR1JFRU4gfHxcblx0XHR2YWx1ZSA9PT0gQWxhcm1Qcmlvcml0eS5PUkFOR0UgfHxcblx0XHR2YWx1ZSA9PT0gQWxhcm1Qcmlvcml0eS5SRURcblx0KTtcbn1cbiJdLCJtYXBwaW5ncyI6IjttSUFFQSxHQUFNLENBQUFBLENBQUEsRUFBQUMsY0FBQSxHQUFBRCxDQUFBLE1BQWdDLElBRXpCRSxDQUFBLEVBQUFELGNBQUEsR0FBQUQsQ0FBQSxNQUF1QywyQkFDdkNHLENBQUEsRUFBQUYsY0FBQSxHQUFBRCxDQUFBLE1BQXNDLG1CQUU3QyxRQUFVLENBQUFJLEVBQ2ZDLENBQUEsQ0FDQUMsQ0FBQSxDQUNBQyxDQUFBLEVBQUFOLGNBQUEsR0FBQU8sQ0FBQSxTQUFvQlIsQ0FBQSxFQUE2QixDQUFBQyxjQUFBLEdBQUFRLENBQUEsTUFFakQsR0FBTSxDQUFBQyxDQUFBLEVBQUFULGNBQUEsR0FBQUQsQ0FBQSxNQUEyQlcsQ0FBQSxDQUFpQkwsQ0FBUSxHQUNwRE0sQ0FBQSxFQUFBWCxjQUFBLEdBQUFELENBQUEsTUFBc0JTLENBQUEs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 \ No newline at end of file diff --git a/frontend/dist-instrumented/chunk-WCZEJQCH.js.map b/frontend/dist-instrumented/chunk-WCZEJQCH.js.map new file mode 100644 index 00000000..a30596d0 --- /dev/null +++ b/frontend/dist-instrumented/chunk-WCZEJQCH.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["src/app/core/notification/utils/notification-title.util.ts"], + "sourcesContent": ["import { AlarmPriority } from '../../alarm/models/alarm-priority.enum';\n\nconst MAX_NOTIFICATION_TITLE_LENGTH = 64;\n\nexport const DEFAULT_TRIGGERED_NOTIFICATION_TITLE = \"C'e un allarme in corso\";\nexport const DEFAULT_RESOLVED_NOTIFICATION_TITLE = 'Allarme risolto';\n\nexport function formatTriggeredNotificationTitle(\n\talarmName: unknown,\n\tpriority: unknown,\n\tmaxLength: number = MAX_NOTIFICATION_TITLE_LENGTH\n): string {\n\tconst normalizedPrioritySymbol = toPrioritySymbol(priority);\n\tconst normalizedAlarmName = normalizeAlarmName(alarmName);\n\tif (!normalizedAlarmName || !normalizedPrioritySymbol) {\n\t\treturn DEFAULT_TRIGGERED_NOTIFICATION_TITLE;\n\t}\n\n\tconst prefix = `${normalizedPrioritySymbol} `;\n\tconst allowedNameLength = Math.max(1, maxLength - prefix.length);\n\tconst compactAlarmName = normalizedAlarmName.length <= allowedNameLength\n\t\t? normalizedAlarmName\n\t\t: `${normalizedAlarmName.slice(0, Math.max(allowedNameLength - 1, 1)).trimEnd()}...`;\n\n\treturn `${prefix}${compactAlarmName}`;\n}\n\nfunction normalizeAlarmName(value: unknown): string | null {\n\tif (typeof value !== 'string') {\n\t\treturn null;\n\t}\n\n\tconst compact = value.replaceAll(/\\s+/g, ' ').trim();\n\treturn compact || null;\n}\n\nfunction toPrioritySymbol(value: unknown): string | null {\n\tconst priority = normalizePriority(value);\n\tif (priority === null) {\n\t\treturn null;\n\t}\n\n\tswitch (priority) {\n\t\tcase AlarmPriority.WHITE:\n\t\t\treturn 'i';\n\t\tcase AlarmPriority.GREEN:\n\t\t\treturn '•';\n\t\tcase AlarmPriority.ORANGE:\n\t\t\treturn '!';\n\t\tcase AlarmPriority.RED:\n\t\t\treturn '▲';\n\t\tdefault:\n\t\t\treturn null;\n\t}\n}\n\nfunction normalizePriority(value: unknown): AlarmPriority | null {\n\tif (typeof value === 'number' && Number.isInteger(value)) {\n\t\treturn isKnownPriority(value) ? value : null;\n\t}\n\n\tif (typeof value !== 'string') {\n\t\treturn null;\n\t}\n\n\treturn normalizePriorityFromString(value.trim().toUpperCase());\n}\n\nfunction normalizePriorityFromString(compact: string): AlarmPriority | null {\n\tif (!compact) {\n\t\treturn null;\n\t}\n\n\tconst enumValue = toEnumPriority(compact);\n\tif (enumValue !== null) {\n\t\treturn enumValue;\n\t}\n\n\tconst parsed = Number(compact);\n\treturn Number.isInteger(parsed) && isKnownPriority(parsed) ? parsed : null;\n}\n\nfunction toEnumPriority(compact: string): AlarmPriority | null {\n\tif (!(compact in AlarmPriority)) {\n\t\treturn null;\n\t}\n\n\tconst enumValue = AlarmPriority[compact as keyof typeof AlarmPriority];\n\treturn typeof enumValue === 'number' && isKnownPriority(enumValue) ? enumValue : null;\n}\n\nfunction isKnownPriority(value: number): value is AlarmPriority {\n\treturn (\n\t\tvalue === AlarmPriority.WHITE ||\n\t\tvalue === AlarmPriority.GREEN ||\n\t\tvalue === AlarmPriority.ORANGE ||\n\t\tvalue === AlarmPriority.RED\n\t);\n}\n"], + "mappings": "wCAEA,IAAMA,EAAgC,GAEzBC,EAAuC,0BACvCC,EAAsC,kBAE7C,SAAUC,EACfC,EACAC,EACAC,EAAoBN,EAA6B,CAEjD,IAAMO,EAA2BC,EAAiBH,CAAQ,EACpDI,EAAsBC,EAAmBN,CAAS,EACxD,GAAI,CAACK,GAAuB,CAACF,EAC5B,OAAON,EAGR,IAAMU,EAAS,GAAGJ,CAAwB,IACpCK,EAAoBC,KAAKC,IAAI,EAAGR,EAAYK,EAAOI,MAAM,EACzDC,EAAmBP,EAAoBM,QAAUH,EACpDH,EACA,GAAGA,EAAoBQ,MAAM,EAAGJ,KAAKC,IAAIF,EAAoB,EAAG,CAAC,CAAC,EAAEM,QAAO,CAAE,MAEhF,MAAO,GAAGP,CAAM,GAAGK,CAAgB,EACpC,CAEA,SAASN,EAAmBS,EAAc,CACzC,OAAI,OAAOA,GAAU,SACb,KAGQA,EAAMC,WAAW,OAAQ,GAAG,EAAEC,KAAI,GAChC,IACnB,CAEA,SAASb,EAAiBW,EAAc,CACvC,IAAMd,EAAWiB,EAAkBH,CAAK,EACxC,GAAId,IAAa,KAChB,OAAO,KAGR,OAAQA,EAAQ,CACf,KAAKkB,EAAcC,MAClB,MAAO,IACR,KAAKD,EAAcE,MAClB,MAAO,SACR,KAAKF,EAAcG,OAClB,MAAO,IACR,KAAKH,EAAcI,IAClB,MAAO,SACR,QACC,OAAO,IACT,CACD,CAEA,SAASL,EAAkBH,EAAc,CACxC,OAAI,OAAOA,GAAU,UAAYS,OAAOC,UAAUV,CAAK,EAC/CW,EAAgBX,CAAK,EAAIA,EAAQ,KAGrC,OAAOA,GAAU,SACb,KAGDY,EAA4BZ,EAAME,KAAI,EAAGW,YAAW,CAAE,CAC9D,CAEA,SAASD,EAA4BE,EAAe,CACnD,GAAI,CAACA,EACJ,OAAO,KAGR,IAAMC,EAAYC,EAAeF,CAAO,EACxC,GAAIC,IAAc,KACjB,OAAOA,EAGR,IAAME,EAASR,OAAOK,CAAO,EAC7B,OAAOL,OAAOC,UAAUO,CAAM,GAAKN,EAAgBM,CAAM,EAAIA,EAAS,IACvE,CAEA,SAASD,EAAeF,EAAe,CACtC,GAAI,EAAEA,KAAWV,GAChB,OAAO,KAGR,IAAMW,EAAYX,EAAcU,CAAqC,EACrE,OAAO,OAAOC,GAAc,UAAYJ,EAAgBI,CAAS,EAAIA,EAAY,IAClF,CAEA,SAASJ,EAAgBX,EAAa,CACrC,OACCA,IAAUI,EAAcC,OACxBL,IAAUI,EAAcE,OACxBN,IAAUI,EAAcG,QACxBP,IAAUI,EAAcI,GAE1B", + "names": ["MAX_NOTIFICATION_TITLE_LENGTH", "DEFAULT_TRIGGERED_NOTIFICATION_TITLE", "DEFAULT_RESOLVED_NOTIFICATION_TITLE", "formatTriggeredNotificationTitle", "alarmName", "priority", "maxLength", "normalizedPrioritySymbol", "toPrioritySymbol", "normalizedAlarmName", "normalizeAlarmName", "prefix", "allowedNameLength", "Math", "max", "length", "compactAlarmName", "slice", "trimEnd", "value", "replaceAll", "trim", "normalizePriority", "AlarmPriority", "WHITE", "GREEN", "ORANGE", "RED", "Number", "isInteger", "isKnownPriority", "normalizePriorityFromString", "toUpperCase", "compact", "enumValue", "toEnumPriority", "parsed"] +} diff --git a/frontend/dist-instrumented/chunk-X3YLKFKT.js b/frontend/dist-instrumented/chunk-X3YLKFKT.js new file mode 100644 index 00000000..b00b8638 --- /dev/null +++ b/frontend/dist-instrumented/chunk-X3YLKFKT.js @@ -0,0 +1,3 @@ +function cov_2r2vblf1xu(){var path="/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-X3YLKFKT.js";var hash="9540e25f8d0aa5ce2dc25552c72f9d646ebdb5f2";var global=new Function("return this")();var gcv="__coverage__";var coverageData={path:"/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-X3YLKFKT.js",statementMap:{"0":{start:{line:1,column:345},end:{line:1,column:770}},"1":{start:{line:1,column:390},end:{line:1,column:395}},"2":{start:{line:1,column:406},end:{line:1,column:412}},"3":{start:{line:1,column:430},end:{line:1,column:465}},"4":{start:{line:1,column:483},end:{line:1,column:545}},"5":{start:{line:1,column:567},end:{line:1,column:583}},"6":{start:{line:1,column:604},end:{line:1,column:619}},"7":{start:{line:1,column:640},end:{line:1,column:670}},"8":{start:{line:1,column:688},end:{line:1,column:728}},"9":{start:{line:1,column:700},end:{line:1,column:727}},"10":{start:{line:1,column:746},end:{line:1,column:757}},"11":{start:{line:1,column:758},end:{line:1,column:766}},"12":{start:{line:1,column:774},end:{line:1,column:932}},"13":{start:{line:1,column:816},end:{line:1,column:877}},"14":{start:{line:1,column:828},end:{line:1,column:873}},"15":{start:{line:1,column:847},end:{line:1,column:872}},"16":{start:{line:1,column:895},end:{line:1,column:919}},"17":{start:{line:1,column:920},end:{line:1,column:928}},"18":{start:{line:1,column:935},end:{line:1,column:944}},"19":{start:{line:1,column:952},end:{line:1,column:994}},"20":{start:{line:1,column:981},end:{line:1,column:983}},"21":{start:{line:1,column:1015},end:{line:1,column:1042}},"22":{start:{line:1,column:1043},end:{line:1,column:1086}},"23":{start:{line:1,column:1094},end:{line:1,column:1103}},"24":{start:{line:1,column:1107},end:{line:1,column:2228}},"25":{start:{line:1,column:1160},end:{line:1,column:1162}},"26":{start:{line:1,column:1182},end:{line:1,column:1275}},"27":{start:{line:1,column:1296},end:{line:1,column:1301}},"28":{start:{line:1,column:1302},end:{line:1,column:1329}},"29":{start:{line:1,column:1346},end:{line:1,column:1429}},"30":{start:{line:1,column:1450},end:{line:1,column:1468}},"31":{start:{line:1,column:1488},end:{line:1,column:1546}},"32":{start:{line:1,column:1564},end:{line:1,column:1612}},"33":{start:{line:1,column:1576},end:{line:1,column:1611}},"34":{start:{line:1,column:1630},end:{line:1,column:2215}},"35":{start:{line:1,column:1937},end:{line:1,column:2177}},"36":{start:{line:1,column:1964},end:{line:1,column:2001}},"37":{start:{line:1,column:2022},end:{line:1,column:2042}},"38":{start:{line:1,column:2075},end:{line:1,column:2103}},"39":{start:{line:1,column:2135},end:{line:1,column:2175}},"40":{start:{line:1,column:2216},end:{line:1,column:2224}},"41":{start:{line:1,column:2244},end:{line:1,column:2269}},"42":{start:{line:1,column:2285},end:{line:1,column:2379}},"43":{start:{line:1,column:2387},end:{line:1,column:2396}},"44":{start:{line:1,column:2400},end:{line:1,column:2409}},"45":{start:{line:1,column:2413},end:{line:1,column:2609}},"46":{start:{line:1,column:2613},end:{line:1,column:2970}},"47":{start:{line:1,column:2633},end:{line:1,column:2645}},"48":{start:{line:1,column:2660},end:{line:1,column:2672}},"49":{start:{line:1,column:2692},end:{line:1,column:2704}},"50":{start:{line:1,column:2728},end:{line:1,column:2740}},"51":{start:{line:1,column:2757},end:{line:1,column:2769}},"52":{start:{line:1,column:2790},end:{line:1,column:2802}},"53":{start:{line:1,column:2823},end:{line:1,column:2835}},"54":{start:{line:1,column:2854},end:{line:1,column:2866}},"55":{start:{line:1,column:2891},end:{line:1,column:2901}},"56":{start:{line:1,column:2920},end:{line:1,column:2932}},"57":{start:{line:1,column:2956},end:{line:1,column:2968}},"58":{start:{line:1,column:2986},end:{line:1,column:3116}},"59":{start:{line:1,column:2997},end:{line:1,column:3035}},"60":{start:{line:1,column:3023},end:{line:1,column:3035}},"61":{start:{line:1,column:3041},end:{line:1,column:3060}},"62":{start:{line:1,column:3061},end:{line:1,column:3115}},"63":{start:{line:1,column:3132},end:{line:1,column:3262}},"64":{start:{line:1,column:3143},end:{line:1,column:3181}},"65":{start:{line:1,column:3169},end:{line:1,column:3181}},"66":{start:{line:1,column:3187},end:{line:1,column:3206}},"67":{start:{line:1,column:3207},end:{line:1,column:3261}},"68":{start:{line:1,column:3278},end:{line:1,column:3315}},"69":{start:{line:1,column:3331},end:{line:1,column:3369}},"70":{start:{line:1,column:3385},end:{line:1,column:3437}},"71":{start:{line:1,column:3453},end:{line:1,column:3582}},"72":{start:{line:1,column:3470},end:{line:1,column:3498}},"73":{start:{line:1,column:3499},end:{line:1,column:3581}},"74":{start:{line:1,column:3598},end:{line:1,column:3716}},"75":{start:{line:1,column:3615},end:{line:1,column:3643}},"76":{start:{line:1,column:3644},end:{line:1,column:3715}},"77":{start:{line:1,column:3732},end:{line:1,column:3747}},"78":{start:{line:1,column:3738},end:{line:1,column:3747}},"79":{start:{line:1,column:3755},end:{line:1,column:4006}},"80":{start:{line:1,column:3899},end:{line:1,column:3926}},"81":{start:{line:1,column:3914},end:{line:1,column:3926}},"82":{start:{line:1,column:3932},end:{line:1,column:3939}},"83":{start:{line:1,column:3940},end:{line:1,column:4005}},"84":{start:{line:1,column:4021},end:{line:1,column:4032}},"85":{start:{line:1,column:4048},end:{line:1,column:4062}},"86":{start:{line:1,column:4078},end:{line:1,column:4098}},"87":{start:{line:1,column:4120},end:{line:1,column:4122}},"88":{start:{line:1,column:4123},end:{line:1,column:4203}},"89":{start:{line:1,column:4144},end:{line:1,column:4168}},"90":{start:{line:1,column:4221},end:{line:1,column:4242}},"91":{start:{line:1,column:4237},end:{line:1,column:4241}},"92":{start:{line:1,column:4258},end:{line:1,column:4275}},"93":{start:{line:1,column:4291},end:{line:1,column:4332}},"94":{start:{line:1,column:4307},end:{line:1,column:4331}},"95":{start:{line:1,column:4318},end:{line:1,column:4331}},"96":{start:{line:1,column:4348},end:{line:1,column:4366}},"97":{start:{line:1,column:4354},end:{line:1,column:4366}},"98":{start:{line:1,column:4372},end:{line:1,column:4384}},"99":{start:{line:1,column:4385},end:{line:1,column:4440}},"100":{start:{line:1,column:4421},end:{line:1,column:4439}},"101":{start:{line:1,column:4456},end:{line:1,column:4485}},"102":{start:{line:1,column:4501},end:{line:1,column:4519}},"103":{start:{line:1,column:4507},end:{line:1,column:4519}},"104":{start:{line:1,column:4525},end:{line:1,column:4537}},"105":{start:{line:1,column:4538},end:{line:1,column:4622}},"106":{start:{line:1,column:4580},end:{line:1,column:4595}},"107":{start:{line:1,column:4596},end:{line:1,column:4621}},"108":{start:{line:1,column:4638},end:{line:1,column:4667}},"109":{start:{line:1,column:4685},end:{line:1,column:4736}},"110":{start:{line:1,column:4752},end:{line:1,column:4775}},"111":{start:{line:1,column:4791},end:{line:1,column:4819}},"112":{start:{line:1,column:4835},end:{line:1,column:4869}},"113":{start:{line:1,column:4886},end:{line:1,column:4929}},"114":{start:{line:1,column:4953},end:{line:1,column:4958}},"115":{start:{line:1,column:4959},end:{line:1,column:5005}},"116":{start:{line:1,column:4984},end:{line:1,column:5001}},"117":{start:{line:1,column:5023},end:{line:1,column:5054}},"118":{start:{line:1,column:5046},end:{line:1,column:5053}},"119":{start:{line:1,column:5061},end:{line:1,column:6705}},"120":{start:{line:1,column:5079},end:{line:1,column:5122}},"121":{start:{line:1,column:5135},end:{line:1,column:5178}},"122":{start:{line:1,column:5193},end:{line:1,column:5238}},"123":{start:{line:1,column:5253},end:{line:1,column:5298}},"124":{start:{line:1,column:5314},end:{line:1,column:5360}},"125":{start:{line:1,column:5375},end:{line:1,column:5420}},"126":{start:{line:1,column:5434},end:{line:1,column:5478}},"127":{start:{line:1,column:5494},end:{line:1,column:5540}},"128":{start:{line:1,column:5553},end:{line:1,column:5596}},"129":{start:{line:1,column:5611},end:{line:1,column:5656}},"130":{start:{line:1,column:5670},end:{line:1,column:5714}},"131":{start:{line:1,column:5731},end:{line:1,column:5778}},"132":{start:{line:1,column:5799},end:{line:1,column:5850}},"133":{start:{line:1,column:5870},end:{line:1,column:5920}},"134":{start:{line:1,column:5932},end:{line:1,column:5943}},"135":{start:{line:1,column:6006},end:{line:1,column:6008}},"136":{start:{line:1,column:6029},end:{line:1,column:6031}},"137":{start:{line:1,column:6050},end:{line:1,column:6125}},"138":{start:{line:1,column:6149},end:{line:1,column:6239}},"139":{start:{line:1,column:6256},end:{line:1,column:6294}},"140":{start:{line:1,column:6316},end:{line:1,column:6359}},"141":{start:{line:1,column:6380},end:{line:1,column:6382}},"142":{start:{line:1,column:6405},end:{line:1,column:6437}},"143":{start:{line:1,column:6466},end:{line:1,column:6534}},"144":{start:{line:1,column:6502},end:{line:1,column:6505}},"145":{start:{line:1,column:6551},end:{line:1,column:6573}},"146":{start:{line:1,column:6588},end:{line:1,column:6637}},"147":{start:{line:1,column:6652},end:{line:1,column:6703}},"148":{start:{line:1,column:6708},end:{line:1,column:6785}},"149":{start:{line:1,column:6749},end:{line:1,column:6760}},"150":{start:{line:1,column:6772},end:{line:1,column:6783}},"151":{start:{line:1,column:6788},end:{line:1,column:6846}},"152":{start:{line:1,column:6812},end:{line:1,column:6816}},"153":{start:{line:1,column:6822},end:{line:1,column:6826}},"154":{start:{line:1,column:6841},end:{line:1,column:6845}},"155":{start:{line:1,column:6849},end:{line:1,column:7412}},"156":{start:{line:1,column:6874},end:{line:1,column:6884}},"157":{start:{line:1,column:6901},end:{line:1,column:6968}},"158":{start:{line:1,column:6987},end:{line:1,column:7023}},"159":{start:{line:1,column:7041},end:{line:1,column:7110}},"160":{start:{line:1,column:7125},end:{line:1,column:7157}},"161":{start:{line:1,column:7172},end:{line:1,column:7236}},"162":{start:{line:1,column:7253},end:{line:1,column:7287}},"163":{start:{line:1,column:7304},end:{line:1,column:7338}},"164":{start:{line:1,column:7357},end:{line:1,column:7410}},"165":{start:{line:1,column:7420},end:{line:1,column:7897}},"166":{start:{line:1,column:7459},end:{line:1,column:7467}},"167":{start:{line:1,column:7485},end:{line:1,column:7522}},"168":{start:{line:1,column:7497},end:{line:1,column:7521}},"169":{start:{line:1,column:7540},end:{line:1,column:7884}},"170":{start:{line:1,column:7667},end:{line:1,column:7854}},"171":{start:{line:1,column:7885},end:{line:1,column:7893}},"172":{start:{line:1,column:7901},end:{line:1,column:8496}},"173":{start:{line:1,column:7940},end:{line:1,column:7948}},"174":{start:{line:1,column:7966},end:{line:1,column:8004}},"175":{start:{line:1,column:7978},end:{line:1,column:8003}},"176":{start:{line:1,column:8022},end:{line:1,column:8483}},"177":{start:{line:1,column:8236},end:{line:1,column:8453}},"178":{start:{line:1,column:8484},end:{line:1,column:8492}},"179":{start:{line:1,column:8503},end:{line:1,column:8510}},"180":{start:{line:1,column:8513},end:{line:1,column:8522}},"181":{start:{line:1,column:8525},end:{line:1,column:8534}},"182":{start:{line:1,column:8537},end:{line:1,column:8547}},"183":{start:{line:1,column:8550},end:{line:1,column:8557}},"184":{start:{line:1,column:8560},end:{line:1,column:8642}},"185":{start:{line:1,column:8606},end:{line:1,column:8640}},"186":{start:{line:1,column:8645},end:{line:1,column:8733}},"187":{start:{line:1,column:8694},end:{line:1,column:8731}},"188":{start:{line:1,column:8736},end:{line:1,column:8822}},"189":{start:{line:1,column:8784},end:{line:1,column:8820}},"190":{start:{line:1,column:8825},end:{line:1,column:8909}},"191":{start:{line:1,column:8872},end:{line:1,column:8907}},"192":{start:{line:1,column:8913},end:{line:1,column:8974}},"193":{start:{line:1,column:8951},end:{line:1,column:8972}},"194":{start:{line:1,column:8977},end:{line:1,column:9038}},"195":{start:{line:1,column:9015},end:{line:1,column:9036}},"196":{start:{line:1,column:9054},end:{line:1,column:9087}},"197":{start:{line:1,column:9103},end:{line:1,column:9140}},"198":{start:{line:1,column:9158},end:{line:1,column:9196}},"199":{start:{line:1,column:9212},end:{line:1,column:9249}},"200":{start:{line:1,column:9264},end:{line:1,column:9317}},"201":{start:{line:1,column:9343},end:{line:1,column:9353}},"202":{start:{line:1,column:9354},end:{line:1,column:9406}},"203":{start:{line:1,column:9386},end:{line:1,column:9406}},"204":{start:{line:1,column:9406},end:{line:1,column:9435}},"205":{start:{line:1,column:9415},end:{line:1,column:9435}},"206":{start:{line:1,column:9455},end:{line:1,column:9518}},"207":{start:{line:1,column:9479},end:{line:1,column:9516}},"208":{start:{line:1,column:9496},end:{line:1,column:9516}},"209":{start:{line:1,column:9525},end:{line:1,column:17450}},"210":{start:{line:1,column:9545},end:{line:1,column:9547}},"211":{start:{line:1,column:9577},end:{line:1,column:9581}},"212":{start:{line:1,column:9598},end:{line:1,column:9600}},"213":{start:{line:1,column:9621},end:{line:1,column:9627}},"214":{start:{line:1,column:9646},end:{line:1,column:9650}},"215":{start:{line:1,column:9785},end:{line:1,column:9841}},"216":{start:{line:1,column:9858},end:{line:1,column:9890}},"217":{start:{line:1,column:9908},end:{line:1,column:9955}},"218":{start:{line:1,column:9977},end:{line:1,column:10014}},"219":{start:{line:1,column:10037},end:{line:1,column:10094}},"220":{start:{line:1,column:10108},end:{line:1,column:10127}},"221":{start:{line:1,column:10141},end:{line:1,column:10170}},"222":{start:{line:1,column:10185},end:{line:1,column:10218}},"223":{start:{line:1,column:10191},end:{line:1,column:10217}},"224":{start:{line:1,column:10227},end:{line:1,column:10255}},"225":{start:{line:1,column:10233},end:{line:1,column:10254}},"226":{start:{line:1,column:10271},end:{line:1,column:10280}},"227":{start:{line:1,column:10293},end:{line:1,column:10315}},"228":{start:{line:1,column:10330},end:{line:1,column:10352}},"229":{start:{line:1,column:10367},end:{line:1,column:10388}},"230":{start:{line:1,column:10404},end:{line:1,column:10426}},"231":{start:{line:1,column:10441},end:{line:1,column:10463}},"232":{start:{line:1,column:10486},end:{line:1,column:10517}},"233":{start:{line:1,column:10534},end:{line:1,column:10569}},"234":{start:{line:1,column:10540},end:{line:1,column:10568}},"235":{start:{line:1,column:10580},end:{line:1,column:10610}},"236":{start:{line:1,column:10586},end:{line:1,column:10609}},"237":{start:{line:1,column:10628},end:{line:1,column:10633}},"238":{start:{line:1,column:10646},end:{line:1,column:10666}},"239":{start:{line:1,column:10681},end:{line:1,column:10711}},"240":{start:{line:1,column:10727},end:{line:1,column:10761}},"241":{start:{line:1,column:10733},end:{line:1,column:10760}},"242":{start:{line:1,column:10771},end:{line:1,column:10800}},"243":{start:{line:1,column:10777},end:{line:1,column:10799}},"244":{start:{line:1,column:10817},end:{line:1,column:10822}},"245":{start:{line:1,column:10839},end:{line:1,column:10858}},"246":{start:{line:1,column:10867},end:{line:1,column:10873}},"247":{start:{line:1,column:10881},end:{line:1,column:10908}},"248":{start:{line:1,column:10951},end:{line:1,column:11029}},"249":{start:{line:1,column:11047},end:{line:1,column:11072}},"250":{start:{line:1,column:11095},end:{line:1,column:11125}},"251":{start:{line:1,column:11143},end:{line:1,column:11188}},"252":{start:{line:1,column:11211},end:{line:1,column:11266}},"253":{start:{line:1,column:11287},end:{line:1,column:11332}},"254":{start:{line:1,column:11358},end:{line:1,column:11413}},"255":{start:{line:1,column:11430},end:{line:1,column:11461}},"256":{start:{line:1,column:11483},end:{line:1,column:11519}},"257":{start:{line:1,column:11538},end:{line:1,column:11557}},"258":{start:{line:1,column:11581},end:{line:1,column:11605}},"259":{start:{line:1,column:11632},end:{line:1,column:11649}},"260":{start:{line:1,column:11650},end:{line:1,column:11666}},"261":{start:{line:1,column:11672},end:{line:1,column:11693}},"262":{start:{line:1,column:11694},end:{line:1,column:11815}},"263":{start:{line:1,column:11837},end:{line:1,column:11952}},"264":{start:{line:1,column:11932},end:{line:1,column:11951}},"265":{start:{line:1,column:11976},end:{line:1,column:12095}},"266":{start:{line:1,column:12073},end:{line:1,column:12094}},"267":{start:{line:1,column:12124},end:{line:1,column:12141}},"268":{start:{line:1,column:12142},end:{line:1,column:12182}},"269":{start:{line:1,column:12188},end:{line:1,column:12209}},"270":{start:{line:1,column:12210},end:{line:1,column:12403}},"271":{start:{line:1,column:12233},end:{line:1,column:12303}},"272":{start:{line:1,column:12428},end:{line:1,column:12446}},"273":{start:{line:1,column:12447},end:{line:1,column:12464}},"274":{start:{line:1,column:12470},end:{line:1,column:12491}},"275":{start:{line:1,column:12492},end:{line:1,column:12611}},"276":{start:{line:1,column:12639},end:{line:1,column:12657}},"277":{start:{line:1,column:12658},end:{line:1,column:12697}},"278":{start:{line:1,column:12703},end:{line:1,column:12724}},"279":{start:{line:1,column:12725},end:{line:1,column:12902}},"280":{start:{line:1,column:12748},end:{line:1,column:12801}},"281":{start:{line:1,column:12923},end:{line:1,column:12937}},"282":{start:{line:1,column:12943},end:{line:1,column:12964}},"283":{start:{line:1,column:12965},end:{line:1,column:13131}},"284":{start:{line:1,column:13152},end:{line:1,column:13187}},"285":{start:{line:1,column:13188},end:{line:1,column:13300}},"286":{start:{line:1,column:13242},end:{line:1,column:13277}},"287":{start:{line:1,column:13306},end:{line:1,column:13327}},"288":{start:{line:1,column:13328},end:{line:1,column:13600}},"289":{start:{line:1,column:13594},end:{line:1,column:13599}},"290":{start:{line:1,column:13620},end:{line:1,column:13655}},"291":{start:{line:1,column:13656},end:{line:1,column:13896}},"292":{start:{line:1,column:13693},end:{line:1,column:13727}},"293":{start:{line:1,column:13890},end:{line:1,column:13895}},"294":{start:{line:1,column:13919},end:{line:1,column:14064}},"295":{start:{line:1,column:14078},end:{line:1,column:14092}},"296":{start:{line:1,column:14107},end:{line:1,column:14124}},"297":{start:{line:1,column:14154},end:{line:1,column:14401}},"298":{start:{line:1,column:14222},end:{line:1,column:14256}},"299":{start:{line:1,column:14257},end:{line:1,column:14400}},"300":{start:{line:1,column:14407},end:{line:1,column:14428}},"301":{start:{line:1,column:14429},end:{line:1,column:14678}},"302":{start:{line:1,column:14717},end:{line:1,column:14829}},"303":{start:{line:1,column:14739},end:{line:1,column:14763}},"304":{start:{line:1,column:14850},end:{line:1,column:14893}},"305":{start:{line:1,column:14910},end:{line:1,column:14957}},"306":{start:{line:1,column:14982},end:{line:1,column:15277}},"307":{start:{line:1,column:15006},end:{line:1,column:15098}},"308":{start:{line:1,column:15104},end:{line:1,column:15133}},"309":{start:{line:1,column:15134},end:{line:1,column:15276}},"310":{start:{line:1,column:15184},end:{line:1,column:15274}},"311":{start:{line:1,column:15308},end:{line:1,column:15553}},"312":{start:{line:1,column:15346},end:{line:1,column:15394}},"313":{start:{line:1,column:15400},end:{line:1,column:15504}},"314":{start:{line:1,column:15505},end:{line:1,column:15552}},"315":{start:{line:1,column:15553},end:{line:1,column:15561}},"316":{start:{line:1,column:15580},end:{line:1,column:15663}},"317":{start:{line:1,column:15677},end:{line:1,column:15678}},"318":{start:{line:1,column:15679},end:{line:1,column:15785}},"319":{start:{line:1,column:15766},end:{line:1,column:15779}},"320":{start:{line:1,column:15806},end:{line:1,column:15824}},"321":{start:{line:1,column:15825},end:{line:1,column:15858}},"322":{start:{line:1,column:15873},end:{line:1,column:15899}},"323":{start:{line:1,column:15917},end:{line:1,column:15921}},"324":{start:{line:1,column:15922},end:{line:1,column:15950}},"325":{start:{line:1,column:15938},end:{line:1,column:15950}},"326":{start:{line:1,column:15950},end:{line:1,column:15958}},"327":{start:{line:1,column:15988},end:{line:1,column:16167}},"328":{start:{line:1,column:16187},end:{line:1,column:16235}},"329":{start:{line:1,column:16255},end:{line:1,column:16408}},"330":{start:{line:1,column:16435},end:{line:1,column:16476}},"331":{start:{line:1,column:16463},end:{line:1,column:16475}},"332":{start:{line:1,column:16497},end:{line:1,column:16533}},"333":{start:{line:1,column:16525},end:{line:1,column:16532}},"334":{start:{line:1,column:16556},end:{line:1,column:16594}},"335":{start:{line:1,column:16584},end:{line:1,column:16593}},"336":{start:{line:1,column:16622},end:{line:1,column:16647}},"337":{start:{line:1,column:16650},end:{line:1,column:16667}},"338":{start:{line:1,column:16668},end:{line:1,column:16775}},"339":{start:{line:1,column:16799},end:{line:1,column:16925}},"340":{start:{line:1,column:16944},end:{line:1,column:16946}},"341":{start:{line:1,column:16978},end:{line:1,column:17004}},"342":{start:{line:1,column:17027},end:{line:1,column:17078}},"343":{start:{line:1,column:17101},end:{line:1,column:17167}},"344":{start:{line:1,column:17177},end:{line:1,column:17188}},"345":{start:{line:1,column:17210},end:{line:1,column:17308}},"346":{start:{line:1,column:17335},end:{line:1,column:17448}},"347":{start:{line:1,column:17453},end:{line:1,column:20043}},"348":{start:{line:1,column:17488},end:{line:1,column:17672}},"349":{start:{line:1,column:17703},end:{line:1,column:17840}},"350":{start:{line:1,column:17862},end:{line:1,column:17967}},"351":{start:{line:1,column:17990},end:{line:1,column:18164}},"352":{start:{line:1,column:18186},end:{line:1,column:18389}},"353":{start:{line:1,column:18402},end:{line:1,column:18466}},"354":{start:{line:1,column:18484},end:{line:1,column:18639}},"355":{start:{line:1,column:18525},end:{line:1,column:18606}},"356":{start:{line:1,column:18659},end:{line:1,column:18810}},"357":{start:{line:1,column:18702},end:{line:1,column:18718}},"358":{start:{line:1,column:18719},end:{line:1,column:18776}},"359":{start:{line:1,column:18828},end:{line:1,column:19040}},"360":{start:{line:1,column:18855},end:{line:1,column:18900}},"361":{start:{line:1,column:19055},end:{line:1,column:19120}},"362":{start:{line:1,column:19096},end:{line:1,column:19118}},"363":{start:{line:1,column:19150},end:{line:1,column:19211}},"364":{start:{line:1,column:19181},end:{line:1,column:19210}},"365":{start:{line:1,column:19212},end:{line:1,column:19266}},"366":{start:{line:1,column:19284},end:{line:1,column:19357}},"367":{start:{line:1,column:19329},end:{line:1,column:19345}},"368":{start:{line:1,column:19346},end:{line:1,column:19355}},"369":{start:{line:1,column:19375},end:{line:1,column:19473}},"370":{start:{line:1,column:19398},end:{line:1,column:19471}},"371":{start:{line:1,column:19489},end:{line:1,column:19519}},"372":{start:{line:1,column:19536},end:{line:1,column:19616}},"373":{start:{line:1,column:19581},end:{line:1,column:19616}},"374":{start:{line:1,column:19607},end:{line:1,column:19616}},"375":{start:{line:1,column:19616},end:{line:1,column:19624}},"376":{start:{line:1,column:19646},end:{line:1,column:19648}},"377":{start:{line:1,column:19649},end:{line:1,column:19735}},"378":{start:{line:1,column:19689},end:{line:1,column:19733}},"379":{start:{line:1,column:19763},end:{line:1,column:19764}},"380":{start:{line:1,column:19765},end:{line:1,column:19813}},"381":{start:{line:1,column:19799},end:{line:1,column:19809}},"382":{start:{line:1,column:19837},end:{line:1,column:19914}},"383":{start:{line:1,column:19877},end:{line:1,column:19914}},"384":{start:{line:1,column:19905},end:{line:1,column:19914}},"385":{start:{line:1,column:19914},end:{line:1,column:19971}},"386":{start:{line:1,column:19981},end:{line:1,column:20041}},"387":{start:{line:1,column:20051},end:{line:1,column:20068}},"388":{start:{line:1,column:20076},end:{line:1,column:20102}},"389":{start:{line:1,column:20098},end:{line:1,column:20100}},"390":{start:{line:1,column:20106},end:{line:1,column:20114}},"391":{start:{line:1,column:20132},end:{line:1,column:20151}},"392":{start:{line:1,column:20174},end:{line:1,column:20324}},"393":{start:{line:1,column:20353},end:{line:1,column:20359}},"394":{start:{line:1,column:20360},end:{line:1,column:20516}},"395":{start:{line:1,column:20533},end:{line:1,column:20608}},"396":{start:{line:1,column:20547},end:{line:1,column:20606}},"397":{start:{line:1,column:20626},end:{line:1,column:20801}},"398":{start:{line:1,column:20669},end:{line:1,column:20709}},"399":{start:{line:1,column:20673},end:{line:1,column:20708}},"400":{start:{line:1,column:20710},end:{line:1,column:20800}},"401":{start:{line:1,column:20766},end:{line:1,column:20798}},"402":{start:{line:1,column:20825},end:{line:1,column:20830}},"403":{start:{line:1,column:20831},end:{line:1,column:20928}},"404":{start:{line:1,column:20934},end:{line:1,column:20939}},"405":{start:{line:1,column:20940},end:{line:1,column:21057}},"406":{start:{line:1,column:21063},end:{line:1,column:21093}},"407":{start:{line:1,column:21067},end:{line:1,column:21093}},"408":{start:{line:1,column:21094},end:{line:1,column:21142}},"409":{start:{line:1,column:21165},end:{line:1,column:21167}},"410":{start:{line:1,column:21168},end:{line:1,column:21499}},"411":{start:{line:1,column:21181},end:{line:1,column:21332}},"412":{start:{line:1,column:21210},end:{line:1,column:21215}},"413":{start:{line:1,column:21216},end:{line:1,column:21331}},"414":{start:{line:1,column:21255},end:{line:1,column:21283}},"415":{start:{line:1,column:21267},end:{line:1,column:21282}},"416":{start:{line:1,column:21284},end:{line:1,column:21330}},"417":{start:{line:1,column:21332},end:{line:1,column:21498}},"418":{start:{line:1,column:21366},end:{line:1,column:21371}},"419":{start:{line:1,column:21372},end:{line:1,column:21497}},"420":{start:{line:1,column:21411},end:{line:1,column:21444}},"421":{start:{line:1,column:21423},end:{line:1,column:21443}},"422":{start:{line:1,column:21445},end:{line:1,column:21496}},"423":{start:{line:1,column:21505},end:{line:1,column:21511}},"424":{start:{line:1,column:21512},end:{line:1,column:21569}},"425":{start:{line:1,column:21587},end:{line:1,column:21713}},"426":{start:{line:1,column:21624},end:{line:1,column:21711}},"427":{start:{line:1,column:21731},end:{line:1,column:21880}},"428":{start:{line:1,column:21770},end:{line:1,column:21878}},"429":{start:{line:1,column:21898},end:{line:1,column:22042}},"430":{start:{line:1,column:22066},end:{line:1,column:22130}},"431":{start:{line:1,column:22074},end:{line:1,column:22129}},"432":{start:{line:1,column:22131},end:{line:1,column:22205}},"433":{start:{line:1,column:22179},end:{line:1,column:22203}},"434":{start:{line:1,column:22223},end:{line:1,column:22238}},"435":{start:{line:1,column:22256},end:{line:1,column:22269}},"436":{start:{line:1,column:22287},end:{line:1,column:22326}},"437":{start:{line:1,column:22317},end:{line:1,column:22326}},"438":{start:{line:1,column:22332},end:{line:1,column:22339}},"439":{start:{line:1,column:22340},end:{line:1,column:22396}},"440":{start:{line:1,column:22412},end:{line:1,column:22460}},"441":{start:{line:1,column:22478},end:{line:1,column:22634}},"442":{start:{line:1,column:22523},end:{line:1,column:22532}},"443":{start:{line:1,column:22533},end:{line:1,column:22632}},"444":{start:{line:1,column:22652},end:{line:1,column:22670}},"445":{start:{line:1,column:22658},end:{line:1,column:22670}},"446":{start:{line:1,column:22670},end:{line:1,column:22687}},"447":{start:{line:1,column:22697},end:{line:1,column:22770}},"448":{start:{line:1,column:22718},end:{line:1,column:22754}},"449":{start:{line:1,column:22794},end:{line:1,column:22806}},"450":{start:{line:1,column:22807},end:{line:1,column:22826}},"451":{start:{line:1,column:22850},end:{line:1,column:22862}},"452":{start:{line:1,column:22863},end:{line:1,column:22882}},"453":{start:{line:1,column:22898},end:{line:1,column:22989}},"454":{start:{line:1,column:22996},end:{line:1,column:24613}},"455":{start:{line:1,column:23025},end:{line:1,column:23029}},"456":{start:{line:1,column:23040},end:{line:1,column:23042}},"457":{start:{line:1,column:23072},end:{line:1,column:23074}},"458":{start:{line:1,column:23099},end:{line:1,column:23371}},"459":{start:{line:1,column:23389},end:{line:1,column:23574}},"460":{start:{line:1,column:23500},end:{line:1,column:23542}},"461":{start:{line:1,column:23594},end:{line:1,column:23612}},"462":{start:{line:1,column:23645},end:{line:1,column:23872}},"463":{start:{line:1,column:23905},end:{line:1,column:23913}},"464":{start:{line:1,column:23937},end:{line:1,column:23957}},"465":{start:{line:1,column:23978},end:{line:1,column:24000}},"466":{start:{line:1,column:24024},end:{line:1,column:24044}},"467":{start:{line:1,column:24073},end:{line:1,column:24103}},"468":{start:{line:1,column:24135},end:{line:1,column:24163}},"469":{start:{line:1,column:24205},end:{line:1,column:24422}},"470":{start:{line:1,column:24442},end:{line:1,column:24611}},"471":{start:{line:1,column:24621},end:{line:1,column:24638}},"472":{start:{line:1,column:24624},end:{line:1,column:24638}},"473":{start:{line:1,column:24646},end:{line:1,column:24851}},"474":{start:{line:1,column:24677},end:{line:1,column:24706}},"475":{start:{line:1,column:24689},end:{line:1,column:24705}},"476":{start:{line:1,column:24724},end:{line:1,column:24838}},"477":{start:{line:1,column:24839},end:{line:1,column:24847}},"478":{start:{line:1,column:24859},end:{line:1,column:27498}},"479":{start:{line:1,column:24894},end:{line:1,column:25078}},"480":{start:{line:1,column:25094},end:{line:1,column:25136}},"481":{start:{line:1,column:25150},end:{line:1,column:25358}},"482":{start:{line:1,column:25181},end:{line:1,column:25227}},"483":{start:{line:1,column:25376},end:{line:1,column:25481}},"484":{start:{line:1,column:25505},end:{line:1,column:25525}},"485":{start:{line:1,column:25526},end:{line:1,column:25686}},"486":{start:{line:1,column:25714},end:{line:1,column:25734}},"487":{start:{line:1,column:25735},end:{line:1,column:25980}},"488":{start:{line:1,column:25994},end:{line:1,column:26021}},"489":{start:{line:1,column:26039},end:{line:1,column:26176}},"490":{start:{line:1,column:26071},end:{line:1,column:26143}},"491":{start:{line:1,column:26196},end:{line:1,column:26330}},"492":{start:{line:1,column:26224},end:{line:1,column:26296}},"493":{start:{line:1,column:26348},end:{line:1,column:26553}},"494":{start:{line:1,column:26375},end:{line:1,column:26413}},"495":{start:{line:1,column:26568},end:{line:1,column:26612}},"496":{start:{line:1,column:26596},end:{line:1,column:26611}},"497":{start:{line:1,column:26625},end:{line:1,column:26788}},"498":{start:{line:1,column:26672},end:{line:1,column:26709}},"499":{start:{line:1,column:26805},end:{line:1,column:26831}},"500":{start:{line:1,column:26861},end:{line:1,column:26922}},"501":{start:{line:1,column:26889},end:{line:1,column:26918}},"502":{start:{line:1,column:26923},end:{line:1,column:26977}},"503":{start:{line:1,column:26995},end:{line:1,column:27033}},"504":{start:{line:1,column:27025},end:{line:1,column:27031}},"505":{start:{line:1,column:27049},end:{line:1,column:27125}},"506":{start:{line:1,column:27084},end:{line:1,column:27108}},"507":{start:{line:1,column:27117},end:{line:1,column:27124}},"508":{start:{line:1,column:27142},end:{line:1,column:27187}},"509":{start:{line:1,column:27171},end:{line:1,column:27186}},"510":{start:{line:1,column:27205},end:{line:1,column:27252}},"511":{start:{line:1,column:27227},end:{line:1,column:27251}},"512":{start:{line:1,column:27276},end:{line:1,column:27325}},"513":{start:{line:1,column:27303},end:{line:1,column:27325}},"514":{start:{line:1,column:27316},end:{line:1,column:27325}},"515":{start:{line:1,column:27325},end:{line:1,column:27369}},"516":{start:{line:1,column:27390},end:{line:1,column:27463}},"517":{start:{line:1,column:27473},end:{line:1,column:27496}},"518":{start:{line:1,column:27506},end:{line:1,column:29968}},"519":{start:{line:1,column:27567},end:{line:1,column:27600}},"520":{start:{line:1,column:27618},end:{line:1,column:27648}},"521":{start:{line:1,column:27660},end:{line:1,column:27692}},"522":{start:{line:1,column:27666},end:{line:1,column:27691}},"523":{start:{line:1,column:27712},end:{line:1,column:27717}},"524":{start:{line:1,column:27747},end:{line:1,column:27773}},"525":{start:{line:1,column:27751},end:{line:1,column:27773}},"526":{start:{line:1,column:27785},end:{line:1,column:27787}},"527":{start:{line:1,column:27807},end:{line:1,column:27893}},"528":{start:{line:1,column:27909},end:{line:1,column:27926}},"529":{start:{line:1,column:27941},end:{line:1,column:27957}},"530":{start:{line:1,column:27971},end:{line:1,column:28123}},"531":{start:{line:1,column:28136},end:{line:1,column:28270}},"532":{start:{line:1,column:28291},end:{line:1,column:28302}},"533":{start:{line:1,column:28314},end:{line:1,column:28322}},"534":{start:{line:1,column:28343},end:{line:1,column:28364}},"535":{start:{line:1,column:28365},end:{line:1,column:28472}},"536":{start:{line:1,column:28487},end:{line:1,column:28515}},"537":{start:{line:1,column:28533},end:{line:1,column:28579}},"538":{start:{line:1,column:28596},end:{line:1,column:28623}},"539":{start:{line:1,column:28643},end:{line:1,column:28672}},"540":{start:{line:1,column:28689},end:{line:1,column:28717}},"541":{start:{line:1,column:28734},end:{line:1,column:28762}},"542":{start:{line:1,column:28779},end:{line:1,column:28806}},"543":{start:{line:1,column:28826},end:{line:1,column:28855}},"544":{start:{line:1,column:28873},end:{line:1,column:28906}},"545":{start:{line:1,column:28917},end:{line:1,column:28933}},"546":{start:{line:1,column:28959},end:{line:1,column:29011}},"547":{start:{line:1,column:29024},end:{line:1,column:29174}},"548":{start:{line:1,column:29193},end:{line:1,column:29386}},"549":{start:{line:1,column:29227},end:{line:1,column:29236}},"550":{start:{line:1,column:29239},end:{line:1,column:29260}},"551":{start:{line:1,column:29261},end:{line:1,column:29338}},"552":{start:{line:1,column:29416},end:{line:1,column:29437}},"553":{start:{line:1,column:29438},end:{line:1,column:29486}},"554":{start:{line:1,column:29518},end:{line:1,column:29540}},"555":{start:{line:1,column:29541},end:{line:1,column:29593}},"556":{start:{line:1,column:29617},end:{line:1,column:29731}},"557":{start:{line:1,column:29752},end:{line:1,column:29807}},"558":{start:{line:1,column:29828},end:{line:1,column:29837}},"559":{start:{line:1,column:29855},end:{line:1,column:29911}},"560":{start:{line:1,column:29867},end:{line:1,column:29910}},"561":{start:{line:1,column:29929},end:{line:1,column:29955}},"562":{start:{line:1,column:29956},end:{line:1,column:29964}},"563":{start:{line:1,column:29976},end:{line:1,column:29985}},"564":{start:{line:1,column:29993},end:{line:1,column:30026}},"565":{start:{line:1,column:30022},end:{line:1,column:30024}},"566":{start:{line:1,column:30030},end:{line:1,column:31207}},"567":{start:{line:1,column:30083},end:{line:1,column:30085}},"568":{start:{line:1,column:30109},end:{line:1,column:30113}},"569":{start:{line:1,column:30146},end:{line:1,column:30151}},"570":{start:{line:1,column:30183},end:{line:1,column:30185}},"571":{start:{line:1,column:30206},end:{line:1,column:30208}},"572":{start:{line:1,column:30232},end:{line:1,column:30364}},"573":{start:{line:1,column:30380},end:{line:1,column:30511}},"574":{start:{line:1,column:30526},end:{line:1,column:30565}},"575":{start:{line:1,column:30587},end:{line:1,column:30623}},"576":{start:{line:1,column:30635},end:{line:1,column:30705}},"577":{start:{line:1,column:30726},end:{line:1,column:30777}},"578":{start:{line:1,column:30794},end:{line:1,column:30857}},"579":{start:{line:1,column:30875},end:{line:1,column:30947}},"580":{start:{line:1,column:30887},end:{line:1,column:30946}},"581":{start:{line:1,column:30965},end:{line:1,column:31194}},"582":{start:{line:1,column:31195},end:{line:1,column:31203}},"583":{start:{line:1,column:31215},end:{line:1,column:31248}},"584":{start:{line:1,column:31244},end:{line:1,column:31246}},"585":{start:{line:1,column:31252},end:{line:1,column:31726}},"586":{start:{line:1,column:31282},end:{line:1,column:31286}},"587":{start:{line:1,column:31296},end:{line:1,column:31301}},"588":{start:{line:1,column:31316},end:{line:1,column:31332}},"589":{start:{line:1,column:31350},end:{line:1,column:31411}},"590":{start:{line:1,column:31362},end:{line:1,column:31407}},"591":{start:{line:1,column:31381},end:{line:1,column:31406}},"592":{start:{line:1,column:31429},end:{line:1,column:31713}},"593":{start:{line:1,column:31498},end:{line:1,column:31588}},"594":{start:{line:1,column:31526},end:{line:1,column:31546}},"595":{start:{line:1,column:31568},end:{line:1,column:31586}},"596":{start:{line:1,column:31714},end:{line:1,column:31722}},"597":{start:{line:1,column:31730},end:{line:1,column:31772}},"598":{start:{line:1,column:31759},end:{line:1,column:31761}},"599":{start:{line:1,column:31790},end:{line:1,column:31874}},"600":{start:{line:1,column:31890},end:{line:1,column:31912}},"601":{start:{line:1,column:31920},end:{line:1,column:33275}},"602":{start:{line:1,column:31962},end:{line:1,column:31969}},"603":{start:{line:1,column:31981},end:{line:1,column:31982}},"604":{start:{line:1,column:32002},end:{line:1,column:32021}},"605":{start:{line:1,column:32035},end:{line:1,column:32044}},"606":{start:{line:1,column:32060},end:{line:1,column:32074}},"607":{start:{line:1,column:32086},end:{line:1,column:32091}},"608":{start:{line:1,column:32096},end:{line:1,column:32101}},"609":{start:{line:1,column:32115},end:{line:1,column:32117}},"610":{start:{line:1,column:32143},end:{line:1,column:32342}},"611":{start:{line:1,column:32230},end:{line:1,column:32307}},"612":{start:{line:1,column:32357},end:{line:1,column:32394}},"613":{start:{line:1,column:32400},end:{line:1,column:32420}},"614":{start:{line:1,column:32423},end:{line:1,column:32430}},"615":{start:{line:1,column:32431},end:{line:1,column:32458}},"616":{start:{line:1,column:32479},end:{line:1,column:32546}},"617":{start:{line:1,column:32497},end:{line:1,column:32545}},"618":{start:{line:1,column:32565},end:{line:1,column:32601}},"619":{start:{line:1,column:32618},end:{line:1,column:32710}},"620":{start:{line:1,column:32654},end:{line:1,column:32710}},"621":{start:{line:1,column:32701},end:{line:1,column:32710}},"622":{start:{line:1,column:32710},end:{line:1,column:32721}},"623":{start:{line:1,column:32747},end:{line:1,column:32752}},"624":{start:{line:1,column:32753},end:{line:1,column:32807}},"625":{start:{line:1,column:32825},end:{line:1,column:32886}},"626":{start:{line:1,column:32837},end:{line:1,column:32882}},"627":{start:{line:1,column:32856},end:{line:1,column:32881}},"628":{start:{line:1,column:32904},end:{line:1,column:33262}},"629":{start:{line:1,column:33085},end:{line:1,column:33189}},"630":{start:{line:1,column:33113},end:{line:1,column:33146}},"631":{start:{line:1,column:33167},end:{line:1,column:33187}},"632":{start:{line:1,column:33263},end:{line:1,column:33271}},"633":{start:{line:1,column:33279},end:{line:1,column:34038}},"634":{start:{line:1,column:33342},end:{line:1,column:33444}},"635":{start:{line:1,column:33460},end:{line:1,column:33595}},"636":{start:{line:1,column:33609},end:{line:1,column:33672}},"637":{start:{line:1,column:33693},end:{line:1,column:33758}},"638":{start:{line:1,column:33773},end:{line:1,column:33852}},"639":{start:{line:1,column:33870},end:{line:1,column:33918}},"640":{start:{line:1,column:33882},end:{line:1,column:33917}},"641":{start:{line:1,column:33936},end:{line:1,column:34025}},"642":{start:{line:1,column:34026},end:{line:1,column:34034}},"643":{start:{line:1,column:34042},end:{line:1,column:34084}},"644":{start:{line:1,column:34071},end:{line:1,column:34073}},"645":{start:{line:1,column:34102},end:{line:1,column:34219}},"646":{start:{line:1,column:34235},end:{line:1,column:34257}},"647":{start:{line:1,column:34265},end:{line:1,column:35676}},"648":{start:{line:1,column:34307},end:{line:1,column:34314}},"649":{start:{line:1,column:34326},end:{line:1,column:34327}},"650":{start:{line:1,column:34347},end:{line:1,column:34366}},"651":{start:{line:1,column:34380},end:{line:1,column:34389}},"652":{start:{line:1,column:34404},end:{line:1,column:34417}},"653":{start:{line:1,column:34423},end:{line:1,column:34570}},"654":{start:{line:1,column:34450},end:{line:1,column:34480}},"655":{start:{line:1,column:34459},end:{line:1,column:34479}},"656":{start:{line:1,column:34481},end:{line:1,column:34534}},"657":{start:{line:1,column:34491},end:{line:1,column:34533}},"658":{start:{line:1,column:34540},end:{line:1,column:34570}},"659":{start:{line:1,column:34550},end:{line:1,column:34568}},"660":{start:{line:1,column:34570},end:{line:1,column:34596}},"661":{start:{line:1,column:34617},end:{line:1,column:34910}},"662":{start:{line:1,column:34641},end:{line:1,column:34643}},"663":{start:{line:1,column:34646},end:{line:1,column:34663}},"664":{start:{line:1,column:34664},end:{line:1,column:34892}},"665":{start:{line:1,column:34685},end:{line:1,column:34686}},"666":{start:{line:1,column:34687},end:{line:1,column:34768}},"667":{start:{line:1,column:34697},end:{line:1,column:34698}},"668":{start:{line:1,column:34721},end:{line:1,column:34725}},"669":{start:{line:1,column:34728},end:{line:1,column:34757}},"670":{start:{line:1,column:34758},end:{line:1,column:34767}},"671":{start:{line:1,column:34780},end:{line:1,column:34789}},"672":{start:{line:1,column:34790},end:{line:1,column:34891}},"673":{start:{line:1,column:34800},end:{line:1,column:34801}},"674":{start:{line:1,column:34824},end:{line:1,column:34828}},"675":{start:{line:1,column:34829},end:{line:1,column:34890}},"676":{start:{line:1,column:34850},end:{line:1,column:34879}},"677":{start:{line:1,column:34880},end:{line:1,column:34889}},"678":{start:{line:1,column:34892},end:{line:1,column:34909}},"679":{start:{line:1,column:34936},end:{line:1,column:34966}},"680":{start:{line:1,column:34967},end:{line:1,column:35000}},"681":{start:{line:1,column:35017},end:{line:1,column:35116}},"682":{start:{line:1,column:35053},end:{line:1,column:35116}},"683":{start:{line:1,column:35107},end:{line:1,column:35116}},"684":{start:{line:1,column:35116},end:{line:1,column:35127}},"685":{start:{line:1,column:35153},end:{line:1,column:35158}},"686":{start:{line:1,column:35159},end:{line:1,column:35220}},"687":{start:{line:1,column:35238},end:{line:1,column:35299}},"688":{start:{line:1,column:35250},end:{line:1,column:35295}},"689":{start:{line:1,column:35269},end:{line:1,column:35294}},"690":{start:{line:1,column:35317},end:{line:1,column:35663}},"691":{start:{line:1,column:35492},end:{line:1,column:35590}},"692":{start:{line:1,column:35520},end:{line:1,column:35547}},"693":{start:{line:1,column:35568},end:{line:1,column:35588}},"694":{start:{line:1,column:35664},end:{line:1,column:35672}},"695":{start:{line:1,column:35680},end:{line:1,column:36607}},"696":{start:{line:1,column:35750},end:{line:1,column:35856}},"697":{start:{line:1,column:35872},end:{line:1,column:35988}},"698":{start:{line:1,column:36002},end:{line:1,column:36136}},"699":{start:{line:1,column:36157},end:{line:1,column:36222}},"700":{start:{line:1,column:36239},end:{line:1,column:36307}},"701":{start:{line:1,column:36322},end:{line:1,column:36421}},"702":{start:{line:1,column:36439},end:{line:1,column:36487}},"703":{start:{line:1,column:36451},end:{line:1,column:36486}},"704":{start:{line:1,column:36505},end:{line:1,column:36594}},"705":{start:{line:1,column:36595},end:{line:1,column:36603}},"706":{start:{line:1,column:36623},end:{line:1,column:36665}},"707":{start:{line:1,column:36673},end:{line:1,column:37133}},"708":{start:{line:1,column:36698},end:{line:1,column:36699}},"709":{start:{line:1,column:36734},end:{line:1,column:36921}},"710":{start:{line:1,column:36764},end:{line:1,column:36815}},"711":{start:{line:1,column:36816},end:{line:1,column:36920}},"712":{start:{line:1,column:36934},end:{line:1,column:36959}},"713":{start:{line:1,column:36989},end:{line:1,column:37005}},"714":{start:{line:1,column:37017},end:{line:1,column:37031}},"715":{start:{line:1,column:37049},end:{line:1,column:37078}},"716":{start:{line:1,column:37061},end:{line:1,column:37077}},"717":{start:{line:1,column:37096},end:{line:1,column:37120}},"718":{start:{line:1,column:37121},end:{line:1,column:37129}},"719":{start:{line:1,column:37141},end:{line:1,column:37184}},"720":{start:{line:1,column:37171},end:{line:1,column:37173}},"721":{start:{line:1,column:37188},end:{line:1,column:37691}},"722":{start:{line:1,column:37233},end:{line:1,column:37244}},"723":{start:{line:1,column:37260},end:{line:1,column:37268}},"724":{start:{line:1,column:37263},end:{line:1,column:37268}},"725":{start:{line:1,column:37285},end:{line:1,column:37293}},"726":{start:{line:1,column:37288},end:{line:1,column:37293}},"727":{start:{line:1,column:37311},end:{line:1,column:37372}},"728":{start:{line:1,column:37323},end:{line:1,column:37368}},"729":{start:{line:1,column:37342},end:{line:1,column:37367}},"730":{start:{line:1,column:37390},end:{line:1,column:37678}},"731":{start:{line:1,column:37561},end:{line:1,column:37609}},"732":{start:{line:1,column:37679},end:{line:1,column:37687}},"733":{start:{line:1,column:37699},end:{line:1,column:37824}},"734":{start:{line:1,column:37730},end:{line:1,column:37759}},"735":{start:{line:1,column:37742},end:{line:1,column:37758}},"736":{start:{line:1,column:37777},end:{line:1,column:37788}},"737":{start:{line:1,column:37806},end:{line:1,column:37811}},"738":{start:{line:1,column:37812},end:{line:1,column:37820}},"739":{start:{line:1,column:37840},end:{line:1,column:37923}},"740":{start:{line:1,column:37931},end:{line:1,column:38893}},"741":{start:{line:1,column:37960},end:{line:1,column:37962}},"742":{start:{line:1,column:37987},end:{line:1,column:37992}},"743":{start:{line:1,column:37993},end:{line:1,column:38021}},"744":{start:{line:1,column:38044},end:{line:1,column:38067}},"745":{start:{line:1,column:38070},end:{line:1,column:38072}},"746":{start:{line:1,column:38073},end:{line:1,column:38172}},"747":{start:{line:1,column:38196},end:{line:1,column:38219}},"748":{start:{line:1,column:38220},end:{line:1,column:38238}},"749":{start:{line:1,column:38260},end:{line:1,column:38262}},"750":{start:{line:1,column:38263},end:{line:1,column:38388}},"751":{start:{line:1,column:38408},end:{line:1,column:38440}},"752":{start:{line:1,column:38417},end:{line:1,column:38439}},"753":{start:{line:1,column:38441},end:{line:1,column:38461}},"754":{start:{line:1,column:38487},end:{line:1,column:38489}},"755":{start:{line:1,column:38490},end:{line:1,column:38558}},"756":{start:{line:1,column:38524},end:{line:1,column:38554}},"757":{start:{line:1,column:38577},end:{line:1,column:38604}},"758":{start:{line:1,column:38595},end:{line:1,column:38604}},"759":{start:{line:1,column:38604},end:{line:1,column:38631}},"760":{start:{line:1,column:38622},end:{line:1,column:38631}},"761":{start:{line:1,column:38631},end:{line:1,column:38763}},"762":{start:{line:1,column:38658},end:{line:1,column:38662}},"763":{start:{line:1,column:38665},end:{line:1,column:38685}},"764":{start:{line:1,column:38688},end:{line:1,column:38708}},"765":{start:{line:1,column:38709},end:{line:1,column:38735}},"766":{start:{line:1,column:38741},end:{line:1,column:38763}},"767":{start:{line:1,column:38781},end:{line:1,column:38810}},"768":{start:{line:1,column:38793},end:{line:1,column:38809}},"769":{start:{line:1,column:38829},end:{line:1,column:38880}},"770":{start:{line:1,column:38881},end:{line:1,column:38889}},"771":{start:{line:1,column:38901},end:{line:1,column:39202}},"772":{start:{line:1,column:38936},end:{line:1,column:39078}},"773":{start:{line:1,column:39096},end:{line:1,column:39125}},"774":{start:{line:1,column:39108},end:{line:1,column:39124}},"775":{start:{line:1,column:39143},end:{line:1,column:39154}},"776":{start:{line:1,column:39172},end:{line:1,column:39189}},"777":{start:{line:1,column:39190},end:{line:1,column:39198}}},fnMap:{"0":{name:"(anonymous_0)",decl:{start:{line:1,column:346},end:{line:1,column:347}},loc:{start:{line:1,column:350},end:{line:1,column:767}},line:1},"1":{name:"(anonymous_1)",decl:{start:{line:1,column:390},end:{line:1,column:391}},loc:{start:{line:1,column:393},end:{line:1,column:395}},line:1},"2":{name:"(anonymous_2)",decl:{start:{line:1,column:406},end:{line:1,column:407}},loc:{start:{line:1,column:410},end:{line:1,column:412}},line:1},"3":{name:"(anonymous_3)",decl:{start:{line:1,column:413},end:{line:1,column:414}},loc:{start:{line:1,column:429},end:{line:1,column:466}},line:1},"4":{name:"(anonymous_4)",decl:{start:{line:1,column:466},end:{line:1,column:467}},loc:{start:{line:1,column:482},end:{line:1,column:546}},line:1},"5":{name:"(anonymous_5)",decl:{start:{line:1,column:546},end:{line:1,column:547}},loc:{start:{line:1,column:566},end:{line:1,column:584}},line:1},"6":{name:"(anonymous_6)",decl:{start:{line:1,column:584},end:{line:1,column:585}},loc:{start:{line:1,column:603},end:{line:1,column:620}},line:1},"7":{name:"(anonymous_7)",decl:{start:{line:1,column:620},end:{line:1,column:621}},loc:{start:{line:1,column:639},end:{line:1,column:671}},line:1},"8":{name:"(anonymous_8)",decl:{start:{line:1,column:688},end:{line:1,column:689}},loc:{start:{line:1,column:699},end:{line:1,column:728}},line:1},"9":{name:"(anonymous_9)",decl:{start:{line:1,column:775},end:{line:1,column:776}},loc:{start:{line:1,column:779},end:{line:1,column:929}},line:1},"10":{name:"(anonymous_10)",decl:{start:{line:1,column:817},end:{line:1,column:818}},loc:{start:{line:1,column:821},end:{line:1,column:874}},line:1},"11":{name:"(anonymous_11)",decl:{start:{line:1,column:835},end:{line:1,column:836}},loc:{start:{line:1,column:846},end:{line:1,column:873}},line:1},"12":{name:"(anonymous_12)",decl:{start:{line:1,column:977},end:{line:1,column:978}},loc:{start:{line:1,column:981},end:{line:1,column:983}},line:1},"13":{name:"ot",decl:{start:{line:1,column:1004},end:{line:1,column:1006}},loc:{start:{line:1,column:1008},end:{line:1,column:1087}},line:1},"14":{name:"(anonymous_14)",decl:{start:{line:1,column:1108},end:{line:1,column:1109}},loc:{start:{line:1,column:1112},end:{line:1,column:2225}},line:1},"15":{name:"(anonymous_15)",decl:{start:{line:1,column:1163},end:{line:1,column:1164}},loc:{start:{line:1,column:1181},end:{line:1,column:1276}},line:1},"16":{name:"(anonymous_16)",decl:{start:{line:1,column:1276},end:{line:1,column:1277}},loc:{start:{line:1,column:1289},end:{line:1,column:1330}},line:1},"17":{name:"(anonymous_17)",decl:{start:{line:1,column:1330},end:{line:1,column:1331}},loc:{start:{line:1,column:1345},end:{line:1,column:1430}},line:1},"18":{name:"(anonymous_18)",decl:{start:{line:1,column:1430},end:{line:1,column:1431}},loc:{start:{line:1,column:1449},end:{line:1,column:1469}},line:1},"19":{name:"(anonymous_19)",decl:{start:{line:1,column:1469},end:{line:1,column:1470}},loc:{start:{line:1,column:1487},end:{line:1,column:1547}},line:1},"20":{name:"(anonymous_20)",decl:{start:{line:1,column:1564},end:{line:1,column:1565}},loc:{start:{line:1,column:1575},end:{line:1,column:1612}},line:1},"21":{name:"(anonymous_21)",decl:{start:{line:1,column:1923},end:{line:1,column:1924}},loc:{start:{line:1,column:1936},end:{line:1,column:2178}},line:1},"22":{name:"(anonymous_22)",decl:{start:{line:1,column:1952},end:{line:1,column:1953}},loc:{start:{line:1,column:1963},end:{line:1,column:2002}},line:1},"23":{name:"(anonymous_23)",decl:{start:{line:1,column:2011},end:{line:1,column:2012}},loc:{start:{line:1,column:2021},end:{line:1,column:2043}},line:1},"24":{name:"(anonymous_24)",decl:{start:{line:1,column:2064},end:{line:1,column:2065}},loc:{start:{line:1,column:2074},end:{line:1,column:2104}},line:1},"25":{name:"(anonymous_25)",decl:{start:{line:1,column:2123},end:{line:1,column:2124}},loc:{start:{line:1,column:2134},end:{line:1,column:2176}},line:1},"26":{name:"ae",decl:{start:{line:1,column:2238},end:{line:1,column:2240}},loc:{start:{line:1,column:2243},end:{line:1,column:2270}},line:1},"27":{name:"le",decl:{start:{line:1,column:2279},end:{line:1,column:2281}},loc:{start:{line:1,column:2284},end:{line:1,column:2380}},line:1},"28":{name:"(anonymous_28)",decl:{start:{line:1,column:2619},end:{line:1,column:2620}},loc:{start:{line:1,column:2632},end:{line:1,column:2646}},line:1},"29":{name:"(anonymous_29)",decl:{start:{line:1,column:2646},end:{line:1,column:2647}},loc:{start:{line:1,column:2659},end:{line:1,column:2673}},line:1},"30":{name:"(anonymous_30)",decl:{start:{line:1,column:2673},end:{line:1,column:2674}},loc:{start:{line:1,column:2691},end:{line:1,column:2705}},line:1},"31":{name:"(anonymous_31)",decl:{start:{line:1,column:2705},end:{line:1,column:2706}},loc:{start:{line:1,column:2727},end:{line:1,column:2741}},line:1},"32":{name:"(anonymous_32)",decl:{start:{line:1,column:2741},end:{line:1,column:2742}},loc:{start:{line:1,column:2756},end:{line:1,column:2770}},line:1},"33":{name:"(anonymous_33)",decl:{start:{line:1,column:2770},end:{line:1,column:2771}},loc:{start:{line:1,column:2789},end:{line:1,column:2803}},line:1},"34":{name:"(anonymous_34)",decl:{start:{line:1,column:2803},end:{line:1,column:2804}},loc:{start:{line:1,column:2822},end:{line:1,column:2836}},line:1},"35":{name:"(anonymous_35)",decl:{start:{line:1,column:2836},end:{line:1,column:2837}},loc:{start:{line:1,column:2853},end:{line:1,column:2867}},line:1},"36":{name:"(anonymous_36)",decl:{start:{line:1,column:2867},end:{line:1,column:2868}},loc:{start:{line:1,column:2890},end:{line:1,column:2902}},line:1},"37":{name:"(anonymous_37)",decl:{start:{line:1,column:2902},end:{line:1,column:2903}},loc:{start:{line:1,column:2919},end:{line:1,column:2933}},line:1},"38":{name:"(anonymous_38)",decl:{start:{line:1,column:2933},end:{line:1,column:2934}},loc:{start:{line:1,column:2955},end:{line:1,column:2969}},line:1},"39":{name:"lt",decl:{start:{line:1,column:2980},end:{line:1,column:2982}},loc:{start:{line:1,column:2985},end:{line:1,column:3117}},line:1},"40":{name:"(anonymous_40)",decl:{start:{line:1,column:2993},end:{line:1,column:2994}},loc:{start:{line:1,column:2996},end:{line:1,column:3116}},line:1},"41":{name:"ut",decl:{start:{line:1,column:3126},end:{line:1,column:3128}},loc:{start:{line:1,column:3131},end:{line:1,column:3263}},line:1},"42":{name:"(anonymous_42)",decl:{start:{line:1,column:3139},end:{line:1,column:3140}},loc:{start:{line:1,column:3142},end:{line:1,column:3262}},line:1},"43":{name:"dt",decl:{start:{line:1,column:3272},end:{line:1,column:3274}},loc:{start:{line:1,column:3277},end:{line:1,column:3316}},line:1},"44":{name:"ct",decl:{start:{line:1,column:3325},end:{line:1,column:3327}},loc:{start:{line:1,column:3330},end:{line:1,column:3370}},line:1},"45":{name:"ht",decl:{start:{line:1,column:3379},end:{line:1,column:3381}},loc:{start:{line:1,column:3384},end:{line:1,column:3438}},line:1},"46":{name:"ft",decl:{start:{line:1,column:3447},end:{line:1,column:3449}},loc:{start:{line:1,column:3452},end:{line:1,column:3583}},line:1},"47":{name:"(anonymous_47)",decl:{start:{line:1,column:3460},end:{line:1,column:3461}},loc:{start:{line:1,column:3463},end:{line:1,column:3582}},line:1},"48":{name:"Ge",decl:{start:{line:1,column:3592},end:{line:1,column:3594}},loc:{start:{line:1,column:3597},end:{line:1,column:3717}},line:1},"49":{name:"(anonymous_49)",decl:{start:{line:1,column:3605},end:{line:1,column:3606}},loc:{start:{line:1,column:3608},end:{line:1,column:3716}},line:1},"50":{name:"gt",decl:{start:{line:1,column:3726},end:{line:1,column:3728}},loc:{start:{line:1,column:3731},end:{line:1,column:4007}},line:1},"51":{name:"(anonymous_51)",decl:{start:{line:1,column:3895},end:{line:1,column:3896}},loc:{start:{line:1,column:3898},end:{line:1,column:4006}},line:1},"52":{name:"U",decl:{start:{line:1,column:4016},end:{line:1,column:4017}},loc:{start:{line:1,column:4020},end:{line:1,column:4033}},line:1},"53":{name:"Te",decl:{start:{line:1,column:4042},end:{line:1,column:4044}},loc:{start:{line:1,column:4047},end:{line:1,column:4063}},line:1},"54":{name:"Be",decl:{start:{line:1,column:4072},end:{line:1,column:4074}},loc:{start:{line:1,column:4077},end:{line:1,column:4099}},line:1},"55":{name:"Ue",decl:{start:{line:1,column:4108},end:{line:1,column:4110}},loc:{start:{line:1,column:4113},end:{line:1,column:4204}},line:1},"56":{name:"(anonymous_56)",decl:{start:{line:1,column:4140},end:{line:1,column:4141}},loc:{start:{line:1,column:4143},end:{line:1,column:4169}},line:1},"57":{name:"He",decl:{start:{line:1,column:4213},end:{line:1,column:4215}},loc:{start:{line:1,column:4220},end:{line:1,column:4243}},line:1},"58":{name:"(anonymous_58)",decl:{start:{line:1,column:4234},end:{line:1,column:4235}},loc:{start:{line:1,column:4237},end:{line:1,column:4241}},line:1},"59":{name:"pt",decl:{start:{line:1,column:4252},end:{line:1,column:4254}},loc:{start:{line:1,column:4257},end:{line:1,column:4276}},line:1},"60":{name:"Le",decl:{start:{line:1,column:4285},end:{line:1,column:4287}},loc:{start:{line:1,column:4290},end:{line:1,column:4333}},line:1},"61":{name:"(anonymous_61)",decl:{start:{line:1,column:4304},end:{line:1,column:4305}},loc:{start:{line:1,column:4307},end:{line:1,column:4331}},line:1},"62":{name:"(anonymous_62)",decl:{start:{line:1,column:4315},end:{line:1,column:4316}},loc:{start:{line:1,column:4318},end:{line:1,column:4331}},line:1},"63":{name:"$e",decl:{start:{line:1,column:4342},end:{line:1,column:4344}},loc:{start:{line:1,column:4347},end:{line:1,column:4441}},line:1},"64":{name:"(anonymous_64)",decl:{start:{line:1,column:4409},end:{line:1,column:4410}},loc:{start:{line:1,column:4420},end:{line:1,column:4440}},line:1},"65":{name:"We",decl:{start:{line:1,column:4450},end:{line:1,column:4452}},loc:{start:{line:1,column:4455},end:{line:1,column:4486}},line:1},"66":{name:"qe",decl:{start:{line:1,column:4495},end:{line:1,column:4497}},loc:{start:{line:1,column:4500},end:{line:1,column:4623}},line:1},"67":{name:"(anonymous_67)",decl:{start:{line:1,column:4562},end:{line:1,column:4563}},loc:{start:{line:1,column:4573},end:{line:1,column:4622}},line:1},"68":{name:"ze",decl:{start:{line:1,column:4632},end:{line:1,column:4634}},loc:{start:{line:1,column:4637},end:{line:1,column:4668}},line:1},"69":{name:"Fe",decl:{start:{line:1,column:4677},end:{line:1,column:4679}},loc:{start:{line:1,column:4684},end:{line:1,column:4737}},line:1},"70":{name:"Ze",decl:{start:{line:1,column:4746},end:{line:1,column:4748}},loc:{start:{line:1,column:4751},end:{line:1,column:4776}},line:1},"71":{name:"Xe",decl:{start:{line:1,column:4785},end:{line:1,column:4787}},loc:{start:{line:1,column:4790},end:{line:1,column:4820}},line:1},"72":{name:"ne",decl:{start:{line:1,column:4829},end:{line:1,column:4831}},loc:{start:{line:1,column:4834},end:{line:1,column:4870}},line:1},"73":{name:"H",decl:{start:{line:1,column:4879},end:{line:1,column:4880}},loc:{start:{line:1,column:4885},end:{line:1,column:4930}},line:1},"74":{name:"Ee",decl:{start:{line:1,column:4939},end:{line:1,column:4941}},loc:{start:{line:1,column:4946},end:{line:1,column:5006}},line:1},"75":{name:"(anonymous_75)",decl:{start:{line:1,column:4980},end:{line:1,column:4981}},loc:{start:{line:1,column:4983},end:{line:1,column:5002}},line:1},"76":{name:"we",decl:{start:{line:1,column:5015},end:{line:1,column:5017}},loc:{start:{line:1,column:5022},end:{line:1,column:5055}},line:1},"77":{name:"(anonymous_77)",decl:{start:{line:1,column:5043},end:{line:1,column:5044}},loc:{start:{line:1,column:5046},end:{line:1,column:5053}},line:1},"78":{name:"(anonymous_78)",decl:{start:{line:1,column:5067},end:{line:1,column:5068}},loc:{start:{line:1,column:5078},end:{line:1,column:5123}},line:1},"79":{name:"(anonymous_79)",decl:{start:{line:1,column:5123},end:{line:1,column:5124}},loc:{start:{line:1,column:5134},end:{line:1,column:5179}},line:1},"80":{name:"(anonymous_80)",decl:{start:{line:1,column:5179},end:{line:1,column:5180}},loc:{start:{line:1,column:5192},end:{line:1,column:5239}},line:1},"81":{name:"(anonymous_81)",decl:{start:{line:1,column:5239},end:{line:1,column:5240}},loc:{start:{line:1,column:5252},end:{line:1,column:5299}},line:1},"82":{name:"(anonymous_82)",decl:{start:{line:1,column:5299},end:{line:1,column:5300}},loc:{start:{line:1,column:5313},end:{line:1,column:5361}},line:1},"83":{name:"(anonymous_83)",decl:{start:{line:1,column:5361},end:{line:1,column:5362}},loc:{start:{line:1,column:5374},end:{line:1,column:5421}},line:1},"84":{name:"(anonymous_84)",decl:{start:{line:1,column:5421},end:{line:1,column:5422}},loc:{start:{line:1,column:5433},end:{line:1,column:5479}},line:1},"85":{name:"(anonymous_85)",decl:{start:{line:1,column:5479},end:{line:1,column:5480}},loc:{start:{line:1,column:5493},end:{line:1,column:5541}},line:1},"86":{name:"(anonymous_86)",decl:{start:{line:1,column:5541},end:{line:1,column:5542}},loc:{start:{line:1,column:5552},end:{line:1,column:5597}},line:1},"87":{name:"(anonymous_87)",decl:{start:{line:1,column:5597},end:{line:1,column:5598}},loc:{start:{line:1,column:5610},end:{line:1,column:5657}},line:1},"88":{name:"(anonymous_88)",decl:{start:{line:1,column:5657},end:{line:1,column:5658}},loc:{start:{line:1,column:5669},end:{line:1,column:5715}},line:1},"89":{name:"(anonymous_89)",decl:{start:{line:1,column:5715},end:{line:1,column:5716}},loc:{start:{line:1,column:5730},end:{line:1,column:5779}},line:1},"90":{name:"(anonymous_90)",decl:{start:{line:1,column:5779},end:{line:1,column:5780}},loc:{start:{line:1,column:5798},end:{line:1,column:5851}},line:1},"91":{name:"(anonymous_91)",decl:{start:{line:1,column:5851},end:{line:1,column:5852}},loc:{start:{line:1,column:5869},end:{line:1,column:5921}},line:1},"92":{name:"(anonymous_92)",decl:{start:{line:1,column:5921},end:{line:1,column:5922}},loc:{start:{line:1,column:5931},end:{line:1,column:5944}},line:1},"93":{name:"(anonymous_93)",decl:{start:{line:1,column:6032},end:{line:1,column:6033}},loc:{start:{line:1,column:6049},end:{line:1,column:6126}},line:1},"94":{name:"(anonymous_94)",decl:{start:{line:1,column:6126},end:{line:1,column:6127}},loc:{start:{line:1,column:6148},end:{line:1,column:6240}},line:1},"95":{name:"(anonymous_95)",decl:{start:{line:1,column:6240},end:{line:1,column:6241}},loc:{start:{line:1,column:6255},end:{line:1,column:6295}},line:1},"96":{name:"(anonymous_96)",decl:{start:{line:1,column:6295},end:{line:1,column:6296}},loc:{start:{line:1,column:6315},end:{line:1,column:6360}},line:1},"97":{name:"(anonymous_97)",decl:{start:{line:1,column:6383},end:{line:1,column:6384}},loc:{start:{line:1,column:6404},end:{line:1,column:6438}},line:1},"98":{name:"(anonymous_98)",decl:{start:{line:1,column:6438},end:{line:1,column:6439}},loc:{start:{line:1,column:6465},end:{line:1,column:6535}},line:1},"99":{name:"(anonymous_99)",decl:{start:{line:1,column:6499},end:{line:1,column:6500}},loc:{start:{line:1,column:6502},end:{line:1,column:6505}},line:1},"100":{name:"(anonymous_100)",decl:{start:{line:1,column:6535},end:{line:1,column:6536}},loc:{start:{line:1,column:6550},end:{line:1,column:6574}},line:1},"101":{name:"(anonymous_101)",decl:{start:{line:1,column:6574},end:{line:1,column:6575}},loc:{start:{line:1,column:6587},end:{line:1,column:6638}},line:1},"102":{name:"(anonymous_102)",decl:{start:{line:1,column:6638},end:{line:1,column:6639}},loc:{start:{line:1,column:6651},end:{line:1,column:6704}},line:1},"103":{name:"(anonymous_103)",decl:{start:{line:1,column:6729},end:{line:1,column:6730}},loc:{start:{line:1,column:6748},end:{line:1,column:6761}},line:1},"104":{name:"(anonymous_104)",decl:{start:{line:1,column:6761},end:{line:1,column:6762}},loc:{start:{line:1,column:6771},end:{line:1,column:6784}},line:1},"105":{name:"(anonymous_105)",decl:{start:{line:1,column:6859},end:{line:1,column:6860}},loc:{start:{line:1,column:6873},end:{line:1,column:6885}},line:1},"106":{name:"(anonymous_106)",decl:{start:{line:1,column:6885},end:{line:1,column:6886}},loc:{start:{line:1,column:6900},end:{line:1,column:6969}},line:1},"107":{name:"(anonymous_107)",decl:{start:{line:1,column:6969},end:{line:1,column:6970}},loc:{start:{line:1,column:6986},end:{line:1,column:7024}},line:1},"108":{name:"(anonymous_108)",decl:{start:{line:1,column:7024},end:{line:1,column:7025}},loc:{start:{line:1,column:7040},end:{line:1,column:7111}},line:1},"109":{name:"(anonymous_109)",decl:{start:{line:1,column:7111},end:{line:1,column:7112}},loc:{start:{line:1,column:7124},end:{line:1,column:7158}},line:1},"110":{name:"(anonymous_110)",decl:{start:{line:1,column:7158},end:{line:1,column:7159}},loc:{start:{line:1,column:7171},end:{line:1,column:7237}},line:1},"111":{name:"(anonymous_111)",decl:{start:{line:1,column:7237},end:{line:1,column:7238}},loc:{start:{line:1,column:7252},end:{line:1,column:7288}},line:1},"112":{name:"(anonymous_112)",decl:{start:{line:1,column:7288},end:{line:1,column:7289}},loc:{start:{line:1,column:7303},end:{line:1,column:7339}},line:1},"113":{name:"(anonymous_113)",decl:{start:{line:1,column:7339},end:{line:1,column:7340}},loc:{start:{line:1,column:7356},end:{line:1,column:7411}},line:1},"114":{name:"(anonymous_114)",decl:{start:{line:1,column:7421},end:{line:1,column:7422}},loc:{start:{line:1,column:7425},end:{line:1,column:7894}},line:1},"115":{name:"(anonymous_115)",decl:{start:{line:1,column:7444},end:{line:1,column:7445}},loc:{start:{line:1,column:7458},end:{line:1,column:7468}},line:1},"116":{name:"(anonymous_116)",decl:{start:{line:1,column:7485},end:{line:1,column:7486}},loc:{start:{line:1,column:7496},end:{line:1,column:7522}},line:1},"117":{name:"(anonymous_117)",decl:{start:{line:1,column:7653},end:{line:1,column:7654}},loc:{start:{line:1,column:7666},end:{line:1,column:7855}},line:1},"118":{name:"(anonymous_118)",decl:{start:{line:1,column:7902},end:{line:1,column:7903}},loc:{start:{line:1,column:7906},end:{line:1,column:8493}},line:1},"119":{name:"(anonymous_119)",decl:{start:{line:1,column:7925},end:{line:1,column:7926}},loc:{start:{line:1,column:7939},end:{line:1,column:7949}},line:1},"120":{name:"(anonymous_120)",decl:{start:{line:1,column:7966},end:{line:1,column:7967}},loc:{start:{line:1,column:7977},end:{line:1,column:8004}},line:1},"121":{name:"(anonymous_121)",decl:{start:{line:1,column:8222},end:{line:1,column:8223}},loc:{start:{line:1,column:8235},end:{line:1,column:8454}},line:1},"122":{name:"(anonymous_122)",decl:{start:{line:1,column:8589},end:{line:1,column:8590}},loc:{start:{line:1,column:8605},end:{line:1,column:8641}},line:1},"123":{name:"(anonymous_123)",decl:{start:{line:1,column:8677},end:{line:1,column:8678}},loc:{start:{line:1,column:8693},end:{line:1,column:8732}},line:1},"124":{name:"(anonymous_124)",decl:{start:{line:1,column:8767},end:{line:1,column:8768}},loc:{start:{line:1,column:8783},end:{line:1,column:8821}},line:1},"125":{name:"(anonymous_125)",decl:{start:{line:1,column:8855},end:{line:1,column:8856}},loc:{start:{line:1,column:8871},end:{line:1,column:8908}},line:1},"126":{name:"(anonymous_126)",decl:{start:{line:1,column:8936},end:{line:1,column:8937}},loc:{start:{line:1,column:8950},end:{line:1,column:8973}},line:1},"127":{name:"(anonymous_127)",decl:{start:{line:1,column:9000},end:{line:1,column:9001}},loc:{start:{line:1,column:9014},end:{line:1,column:9037}},line:1},"128":{name:"de",decl:{start:{line:1,column:9048},end:{line:1,column:9050}},loc:{start:{line:1,column:9053},end:{line:1,column:9088}},line:1},"129":{name:"mt",decl:{start:{line:1,column:9097},end:{line:1,column:9099}},loc:{start:{line:1,column:9102},end:{line:1,column:9141}},line:1},"130":{name:"ce",decl:{start:{line:1,column:9150},end:{line:1,column:9152}},loc:{start:{line:1,column:9157},end:{line:1,column:9197}},line:1},"131":{name:"_t",decl:{start:{line:1,column:9206},end:{line:1,column:9208}},loc:{start:{line:1,column:9211},end:{line:1,column:9250}},line:1},"132":{name:"Y",decl:{start:{line:1,column:9259},end:{line:1,column:9260}},loc:{start:{line:1,column:9263},end:{line:1,column:9318}},line:1},"133":{name:"Ye",decl:{start:{line:1,column:9327},end:{line:1,column:9329}},loc:{start:{line:1,column:9336},end:{line:1,column:9436}},line:1},"134":{name:"Ke",decl:{start:{line:1,column:9445},end:{line:1,column:9447}},loc:{start:{line:1,column:9454},end:{line:1,column:9519}},line:1},"135":{name:"(anonymous_135)",decl:{start:{line:1,column:9471},end:{line:1,column:9472}},loc:{start:{line:1,column:9478},end:{line:1,column:9517}},line:1},"136":{name:"(anonymous_136)",decl:{start:{line:1,column:9621},end:{line:1,column:9622}},loc:{start:{line:1,column:9625},end:{line:1,column:9627}},line:1},"137":{name:"(anonymous_137)",decl:{start:{line:1,column:9768},end:{line:1,column:9769}},loc:{start:{line:1,column:9784},end:{line:1,column:9842}},line:1},"138":{name:"(anonymous_138)",decl:{start:{line:1,column:9842},end:{line:1,column:9843}},loc:{start:{line:1,column:9857},end:{line:1,column:9891}},line:1},"139":{name:"(anonymous_139)",decl:{start:{line:1,column:9891},end:{line:1,column:9892}},loc:{start:{line:1,column:9907},end:{line:1,column:9956}},line:1},"140":{name:"(anonymous_140)",decl:{start:{line:1,column:9956},end:{line:1,column:9957}},loc:{start:{line:1,column:9976},end:{line:1,column:10015}},line:1},"141":{name:"(anonymous_141)",decl:{start:{line:1,column:10015},end:{line:1,column:10016}},loc:{start:{line:1,column:10036},end:{line:1,column:10095}},line:1},"142":{name:"(anonymous_142)",decl:{start:{line:1,column:10095},end:{line:1,column:10096}},loc:{start:{line:1,column:10107},end:{line:1,column:10128}},line:1},"143":{name:"(anonymous_143)",decl:{start:{line:1,column:10128},end:{line:1,column:10129}},loc:{start:{line:1,column:10140},end:{line:1,column:10171}},line:1},"144":{name:"(anonymous_144)",decl:{start:{line:1,column:10171},end:{line:1,column:10172}},loc:{start:{line:1,column:10184},end:{line:1,column:10219}},line:1},"145":{name:"(anonymous_145)",decl:{start:{line:1,column:10187},end:{line:1,column:10188}},loc:{start:{line:1,column:10191},end:{line:1,column:10217}},line:1},"146":{name:"(anonymous_146)",decl:{start:{line:1,column:10229},end:{line:1,column:10230}},loc:{start:{line:1,column:10233},end:{line:1,column:10254}},line:1},"147":{name:"(anonymous_147)",decl:{start:{line:1,column:10281},end:{line:1,column:10282}},loc:{start:{line:1,column:10292},end:{line:1,column:10316}},line:1},"148":{name:"(anonymous_148)",decl:{start:{line:1,column:10316},end:{line:1,column:10317}},loc:{start:{line:1,column:10329},end:{line:1,column:10353}},line:1},"149":{name:"(anonymous_149)",decl:{start:{line:1,column:10353},end:{line:1,column:10354}},loc:{start:{line:1,column:10366},end:{line:1,column:10389}},line:1},"150":{name:"(anonymous_150)",decl:{start:{line:1,column:10389},end:{line:1,column:10390}},loc:{start:{line:1,column:10403},end:{line:1,column:10427}},line:1},"151":{name:"(anonymous_151)",decl:{start:{line:1,column:10427},end:{line:1,column:10428}},loc:{start:{line:1,column:10440},end:{line:1,column:10464}},line:1},"152":{name:"(anonymous_152)",decl:{start:{line:1,column:10471},end:{line:1,column:10472}},loc:{start:{line:1,column:10485},end:{line:1,column:10518}},line:1},"153":{name:"(anonymous_153)",decl:{start:{line:1,column:10518},end:{line:1,column:10519}},loc:{start:{line:1,column:10533},end:{line:1,column:10570}},line:1},"154":{name:"(anonymous_154)",decl:{start:{line:1,column:10536},end:{line:1,column:10537}},loc:{start:{line:1,column:10540},end:{line:1,column:10568}},line:1},"155":{name:"(anonymous_155)",decl:{start:{line:1,column:10582},end:{line:1,column:10583}},loc:{start:{line:1,column:10586},end:{line:1,column:10609}},line:1},"156":{name:"(anonymous_156)",decl:{start:{line:1,column:10634},end:{line:1,column:10635}},loc:{start:{line:1,column:10645},end:{line:1,column:10667}},line:1},"157":{name:"(anonymous_157)",decl:{start:{line:1,column:10667},end:{line:1,column:10668}},loc:{start:{line:1,column:10680},end:{line:1,column:10712}},line:1},"158":{name:"(anonymous_158)",decl:{start:{line:1,column:10712},end:{line:1,column:10713}},loc:{start:{line:1,column:10726},end:{line:1,column:10762}},line:1},"159":{name:"(anonymous_159)",decl:{start:{line:1,column:10729},end:{line:1,column:10730}},loc:{start:{line:1,column:10733},end:{line:1,column:10760}},line:1},"160":{name:"(anonymous_160)",decl:{start:{line:1,column:10773},end:{line:1,column:10774}},loc:{start:{line:1,column:10777},end:{line:1,column:10799}},line:1},"161":{name:"(anonymous_161)",decl:{start:{line:1,column:10823},end:{line:1,column:10824}},loc:{start:{line:1,column:10838},end:{line:1,column:10859}},line:1},"162":{name:"(anonymous_162)",decl:{start:{line:1,column:10936},end:{line:1,column:10937}},loc:{start:{line:1,column:10950},end:{line:1,column:11030}},line:1},"163":{name:"(anonymous_163)",decl:{start:{line:1,column:11030},end:{line:1,column:11031}},loc:{start:{line:1,column:11046},end:{line:1,column:11073}},line:1},"164":{name:"(anonymous_164)",decl:{start:{line:1,column:11073},end:{line:1,column:11074}},loc:{start:{line:1,column:11094},end:{line:1,column:11126}},line:1},"165":{name:"(anonymous_165)",decl:{start:{line:1,column:11126},end:{line:1,column:11127}},loc:{start:{line:1,column:11142},end:{line:1,column:11189}},line:1},"166":{name:"(anonymous_166)",decl:{start:{line:1,column:11189},end:{line:1,column:11190}},loc:{start:{line:1,column:11210},end:{line:1,column:11267}},line:1},"167":{name:"(anonymous_167)",decl:{start:{line:1,column:11267},end:{line:1,column:11268}},loc:{start:{line:1,column:11286},end:{line:1,column:11333}},line:1},"168":{name:"(anonymous_168)",decl:{start:{line:1,column:11333},end:{line:1,column:11334}},loc:{start:{line:1,column:11357},end:{line:1,column:11414}},line:1},"169":{name:"(anonymous_169)",decl:{start:{line:1,column:11414},end:{line:1,column:11415}},loc:{start:{line:1,column:11429},end:{line:1,column:11462}},line:1},"170":{name:"(anonymous_170)",decl:{start:{line:1,column:11462},end:{line:1,column:11463}},loc:{start:{line:1,column:11482},end:{line:1,column:11520}},line:1},"171":{name:"(anonymous_171)",decl:{start:{line:1,column:11520},end:{line:1,column:11521}},loc:{start:{line:1,column:11537},end:{line:1,column:11558}},line:1},"172":{name:"(anonymous_172)",decl:{start:{line:1,column:11558},end:{line:1,column:11559}},loc:{start:{line:1,column:11580},end:{line:1,column:11606}},line:1},"173":{name:"(anonymous_173)",decl:{start:{line:1,column:11606},end:{line:1,column:11607}},loc:{start:{line:1,column:11625},end:{line:1,column:11816}},line:1},"174":{name:"(anonymous_174)",decl:{start:{line:1,column:11816},end:{line:1,column:11817}},loc:{start:{line:1,column:11836},end:{line:1,column:11953}},line:1},"175":{name:"(anonymous_175)",decl:{start:{line:1,column:11929},end:{line:1,column:11930}},loc:{start:{line:1,column:11932},end:{line:1,column:11951}},line:1},"176":{name:"(anonymous_176)",decl:{start:{line:1,column:11953},end:{line:1,column:11954}},loc:{start:{line:1,column:11975},end:{line:1,column:12096}},line:1},"177":{name:"(anonymous_177)",decl:{start:{line:1,column:12070},end:{line:1,column:12071}},loc:{start:{line:1,column:12073},end:{line:1,column:12094}},line:1},"178":{name:"(anonymous_178)",decl:{start:{line:1,column:12096},end:{line:1,column:12097}},loc:{start:{line:1,column:12117},end:{line:1,column:12404}},line:1},"179":{name:"(anonymous_179)",decl:{start:{line:1,column:12229},end:{line:1,column:12230}},loc:{start:{line:1,column:12232},end:{line:1,column:12304}},line:1},"180":{name:"(anonymous_180)",decl:{start:{line:1,column:12404},end:{line:1,column:12405}},loc:{start:{line:1,column:12421},end:{line:1,column:12612}},line:1},"181":{name:"(anonymous_181)",decl:{start:{line:1,column:12612},end:{line:1,column:12613}},loc:{start:{line:1,column:12632},end:{line:1,column:12903}},line:1},"182":{name:"(anonymous_182)",decl:{start:{line:1,column:12744},end:{line:1,column:12745}},loc:{start:{line:1,column:12747},end:{line:1,column:12802}},line:1},"183":{name:"(anonymous_183)",decl:{start:{line:1,column:12903},end:{line:1,column:12904}},loc:{start:{line:1,column:12922},end:{line:1,column:13132}},line:1},"184":{name:"(anonymous_184)",decl:{start:{line:1,column:13132},end:{line:1,column:13133}},loc:{start:{line:1,column:13145},end:{line:1,column:13601}},line:1},"185":{name:"(anonymous_185)",decl:{start:{line:1,column:13238},end:{line:1,column:13239}},loc:{start:{line:1,column:13241},end:{line:1,column:13278}},line:1},"186":{name:"(anonymous_186)",decl:{start:{line:1,column:13591},end:{line:1,column:13592}},loc:{start:{line:1,column:13594},end:{line:1,column:13599}},line:1},"187":{name:"(anonymous_187)",decl:{start:{line:1,column:13601},end:{line:1,column:13602}},loc:{start:{line:1,column:13613},end:{line:1,column:13897}},line:1},"188":{name:"(anonymous_188)",decl:{start:{line:1,column:13689},end:{line:1,column:13690}},loc:{start:{line:1,column:13692},end:{line:1,column:13728}},line:1},"189":{name:"(anonymous_189)",decl:{start:{line:1,column:13887},end:{line:1,column:13888}},loc:{start:{line:1,column:13890},end:{line:1,column:13895}},line:1},"190":{name:"(anonymous_190)",decl:{start:{line:1,column:13897},end:{line:1,column:13898}},loc:{start:{line:1,column:13918},end:{line:1,column:14065}},line:1},"191":{name:"(anonymous_191)",decl:{start:{line:1,column:14065},end:{line:1,column:14066}},loc:{start:{line:1,column:14077},end:{line:1,column:14093}},line:1},"192":{name:"(anonymous_192)",decl:{start:{line:1,column:14093},end:{line:1,column:14094}},loc:{start:{line:1,column:14106},end:{line:1,column:14125}},line:1},"193":{name:"(anonymous_193)",decl:{start:{line:1,column:14125},end:{line:1,column:14126}},loc:{start:{line:1,column:14153},end:{line:1,column:14679}},line:1},"194":{name:"(anonymous_194)",decl:{start:{line:1,column:14679},end:{line:1,column:14680}},loc:{start:{line:1,column:14716},end:{line:1,column:14830}},line:1},"195":{name:"(anonymous_195)",decl:{start:{line:1,column:14736},end:{line:1,column:14737}},loc:{start:{line:1,column:14739},end:{line:1,column:14763}},line:1},"196":{name:"(anonymous_196)",decl:{start:{line:1,column:14830},end:{line:1,column:14831}},loc:{start:{line:1,column:14849},end:{line:1,column:14894}},line:1},"197":{name:"(anonymous_197)",decl:{start:{line:1,column:14894},end:{line:1,column:14895}},loc:{start:{line:1,column:14909},end:{line:1,column:14958}},line:1},"198":{name:"(anonymous_198)",decl:{start:{line:1,column:14958},end:{line:1,column:14959}},loc:{start:{line:1,column:14981},end:{line:1,column:15278}},line:1},"199":{name:"(anonymous_199)",decl:{start:{line:1,column:15180},end:{line:1,column:15181}},loc:{start:{line:1,column:15183},end:{line:1,column:15275}},line:1},"200":{name:"(anonymous_200)",decl:{start:{line:1,column:15278},end:{line:1,column:15279}},loc:{start:{line:1,column:15307},end:{line:1,column:15562}},line:1},"201":{name:"(anonymous_201)",decl:{start:{line:1,column:15562},end:{line:1,column:15563}},loc:{start:{line:1,column:15579},end:{line:1,column:15664}},line:1},"202":{name:"(anonymous_202)",decl:{start:{line:1,column:15664},end:{line:1,column:15665}},loc:{start:{line:1,column:15670},end:{line:1,column:15786}},line:1},"203":{name:"(anonymous_203)",decl:{start:{line:1,column:15759},end:{line:1,column:15760}},loc:{start:{line:1,column:15766},end:{line:1,column:15779}},line:1},"204":{name:"(anonymous_204)",decl:{start:{line:1,column:15786},end:{line:1,column:15787}},loc:{start:{line:1,column:15799},end:{line:1,column:15859}},line:1},"205":{name:"(anonymous_205)",decl:{start:{line:1,column:15859},end:{line:1,column:15860}},loc:{start:{line:1,column:15872},end:{line:1,column:15900}},line:1},"206":{name:"(anonymous_206)",decl:{start:{line:1,column:15900},end:{line:1,column:15901}},loc:{start:{line:1,column:15910},end:{line:1,column:15959}},line:1},"207":{name:"(anonymous_207)",decl:{start:{line:1,column:15959},end:{line:1,column:15960}},loc:{start:{line:1,column:15987},end:{line:1,column:16168}},line:1},"208":{name:"(anonymous_208)",decl:{start:{line:1,column:16168},end:{line:1,column:16169}},loc:{start:{line:1,column:16186},end:{line:1,column:16236}},line:1},"209":{name:"(anonymous_209)",decl:{start:{line:1,column:16236},end:{line:1,column:16237}},loc:{start:{line:1,column:16254},end:{line:1,column:16409}},line:1},"210":{name:"(anonymous_210)",decl:{start:{line:1,column:16409},end:{line:1,column:16410}},loc:{start:{line:1,column:16434},end:{line:1,column:16477}},line:1},"211":{name:"(anonymous_211)",decl:{start:{line:1,column:16460},end:{line:1,column:16461}},loc:{start:{line:1,column:16463},end:{line:1,column:16475}},line:1},"212":{name:"(anonymous_212)",decl:{start:{line:1,column:16477},end:{line:1,column:16478}},loc:{start:{line:1,column:16496},end:{line:1,column:16534}},line:1},"213":{name:"(anonymous_213)",decl:{start:{line:1,column:16522},end:{line:1,column:16523}},loc:{start:{line:1,column:16525},end:{line:1,column:16532}},line:1},"214":{name:"(anonymous_214)",decl:{start:{line:1,column:16534},end:{line:1,column:16535}},loc:{start:{line:1,column:16555},end:{line:1,column:16595}},line:1},"215":{name:"(anonymous_215)",decl:{start:{line:1,column:16581},end:{line:1,column:16582}},loc:{start:{line:1,column:16584},end:{line:1,column:16593}},line:1},"216":{name:"(anonymous_216)",decl:{start:{line:1,column:16595},end:{line:1,column:16596}},loc:{start:{line:1,column:16615},end:{line:1,column:16776}},line:1},"217":{name:"(anonymous_217)",decl:{start:{line:1,column:16776},end:{line:1,column:16777}},loc:{start:{line:1,column:16798},end:{line:1,column:16926}},line:1},"218":{name:"(anonymous_218)",decl:{start:{line:1,column:16947},end:{line:1,column:16948}},loc:{start:{line:1,column:16977},end:{line:1,column:17005}},line:1},"219":{name:"(anonymous_219)",decl:{start:{line:1,column:17005},end:{line:1,column:17006}},loc:{start:{line:1,column:17026},end:{line:1,column:17079}},line:1},"220":{name:"(anonymous_220)",decl:{start:{line:1,column:17079},end:{line:1,column:17080}},loc:{start:{line:1,column:17100},end:{line:1,column:17168}},line:1},"221":{name:"(anonymous_221)",decl:{start:{line:1,column:17168},end:{line:1,column:17169}},loc:{start:{line:1,column:17176},end:{line:1,column:17189}},line:1},"222":{name:"(anonymous_222)",decl:{start:{line:1,column:17189},end:{line:1,column:17190}},loc:{start:{line:1,column:17209},end:{line:1,column:17309}},line:1},"223":{name:"(anonymous_223)",decl:{start:{line:1,column:17309},end:{line:1,column:17310}},loc:{start:{line:1,column:17334},end:{line:1,column:17449}},line:1},"224":{name:"(anonymous_224)",decl:{start:{line:1,column:17469},end:{line:1,column:17470}},loc:{start:{line:1,column:17487},end:{line:1,column:17673}},line:1},"225":{name:"(anonymous_225)",decl:{start:{line:1,column:17682},end:{line:1,column:17683}},loc:{start:{line:1,column:17702},end:{line:1,column:17841}},line:1},"226":{name:"(anonymous_226)",decl:{start:{line:1,column:17841},end:{line:1,column:17842}},loc:{start:{line:1,column:17861},end:{line:1,column:17968}},line:1},"227":{name:"(anonymous_227)",decl:{start:{line:1,column:17968},end:{line:1,column:17969}},loc:{start:{line:1,column:17989},end:{line:1,column:18165}},line:1},"228":{name:"(anonymous_228)",decl:{start:{line:1,column:18053},end:{line:1,column:18054}},loc:{start:{line:1,column:18057},end:{line:1,column:18059}},line:1},"229":{name:"(anonymous_229)",decl:{start:{line:1,column:18165},end:{line:1,column:18166}},loc:{start:{line:1,column:18185},end:{line:1,column:18390}},line:1},"230":{name:"(anonymous_230)",decl:{start:{line:1,column:18249},end:{line:1,column:18250}},loc:{start:{line:1,column:18253},end:{line:1,column:18255}},line:1},"231":{name:"(anonymous_231)",decl:{start:{line:1,column:18390},end:{line:1,column:18391}},loc:{start:{line:1,column:18401},end:{line:1,column:18467}},line:1},"232":{name:"(anonymous_232)",decl:{start:{line:1,column:18467},end:{line:1,column:18468}},loc:{start:{line:1,column:18483},end:{line:1,column:18640}},line:1},"233":{name:"(anonymous_233)",decl:{start:{line:1,column:18521},end:{line:1,column:18522}},loc:{start:{line:1,column:18524},end:{line:1,column:18607}},line:1},"234":{name:"(anonymous_234)",decl:{start:{line:1,column:18640},end:{line:1,column:18641}},loc:{start:{line:1,column:18658},end:{line:1,column:18811}},line:1},"235":{name:"(anonymous_235)",decl:{start:{line:1,column:18692},end:{line:1,column:18693}},loc:{start:{line:1,column:18695},end:{line:1,column:18777}},line:1},"236":{name:"(anonymous_236)",decl:{start:{line:1,column:18811},end:{line:1,column:18812}},loc:{start:{line:1,column:18827},end:{line:1,column:19041}},line:1},"237":{name:"(anonymous_237)",decl:{start:{line:1,column:18847},end:{line:1,column:18848}},loc:{start:{line:1,column:18854},end:{line:1,column:18901}},line:1},"238":{name:"(anonymous_238)",decl:{start:{line:1,column:19041},end:{line:1,column:19042}},loc:{start:{line:1,column:19054},end:{line:1,column:19121}},line:1},"239":{name:"(anonymous_239)",decl:{start:{line:1,column:19086},end:{line:1,column:19087}},loc:{start:{line:1,column:19096},end:{line:1,column:19118}},line:1},"240":{name:"(anonymous_240)",decl:{start:{line:1,column:19121},end:{line:1,column:19122}},loc:{start:{line:1,column:19143},end:{line:1,column:19267}},line:1},"241":{name:"(anonymous_241)",decl:{start:{line:1,column:19174},end:{line:1,column:19175}},loc:{start:{line:1,column:19181},end:{line:1,column:19210}},line:1},"242":{name:"(anonymous_242)",decl:{start:{line:1,column:19267},end:{line:1,column:19268}},loc:{start:{line:1,column:19283},end:{line:1,column:19358}},line:1},"243":{name:"(anonymous_243)",decl:{start:{line:1,column:19319},end:{line:1,column:19320}},loc:{start:{line:1,column:19322},end:{line:1,column:19356}},line:1},"244":{name:"(anonymous_244)",decl:{start:{line:1,column:19358},end:{line:1,column:19359}},loc:{start:{line:1,column:19374},end:{line:1,column:19474}},line:1},"245":{name:"(anonymous_245)",decl:{start:{line:1,column:19394},end:{line:1,column:19395}},loc:{start:{line:1,column:19397},end:{line:1,column:19472}},line:1},"246":{name:"(anonymous_246)",decl:{start:{line:1,column:19474},end:{line:1,column:19475}},loc:{start:{line:1,column:19488},end:{line:1,column:19520}},line:1},"247":{name:"(anonymous_247)",decl:{start:{line:1,column:19520},end:{line:1,column:19521}},loc:{start:{line:1,column:19535},end:{line:1,column:19625}},line:1},"248":{name:"(anonymous_248)",decl:{start:{line:1,column:19625},end:{line:1,column:19626}},loc:{start:{line:1,column:19639},end:{line:1,column:19736}},line:1},"249":{name:"(anonymous_249)",decl:{start:{line:1,column:19679},end:{line:1,column:19680}},loc:{start:{line:1,column:19689},end:{line:1,column:19733}},line:1},"250":{name:"(anonymous_250)",decl:{start:{line:1,column:19736},end:{line:1,column:19737}},loc:{start:{line:1,column:19756},end:{line:1,column:19814}},line:1},"251":{name:"(anonymous_251)",decl:{start:{line:1,column:19791},end:{line:1,column:19792}},loc:{start:{line:1,column:19798},end:{line:1,column:19810}},line:1},"252":{name:"(anonymous_252)",decl:{start:{line:1,column:19814},end:{line:1,column:19815}},loc:{start:{line:1,column:19836},end:{line:1,column:19972}},line:1},"253":{name:"(anonymous_253)",decl:{start:{line:1,column:19972},end:{line:1,column:19973}},loc:{start:{line:1,column:19980},end:{line:1,column:20042}},line:1},"254":{name:"(anonymous_254)",decl:{start:{line:1,column:20094},end:{line:1,column:20095}},loc:{start:{line:1,column:20098},end:{line:1,column:20100}},line:1},"255":{name:"vt",decl:{start:{line:1,column:20124},end:{line:1,column:20126}},loc:{start:{line:1,column:20131},end:{line:1,column:20152}},line:1},"256":{name:"Ie",decl:{start:{line:1,column:20161},end:{line:1,column:20163}},loc:{start:{line:1,column:20173},end:{line:1,column:20325}},line:1},"257":{name:"Se",decl:{start:{line:1,column:20334},end:{line:1,column:20336}},loc:{start:{line:1,column:20346},end:{line:1,column:20517}},line:1},"258":{name:"(anonymous_258)",decl:{start:{line:1,column:20353},end:{line:1,column:20354}},loc:{start:{line:1,column:20357},end:{line:1,column:20359}},line:1},"259":{name:"(anonymous_259)",decl:{start:{line:1,column:20508},end:{line:1,column:20509}},loc:{start:{line:1,column:20512},end:{line:1,column:20514}},line:1},"260":{name:"z",decl:{start:{line:1,column:20526},end:{line:1,column:20527}},loc:{start:{line:1,column:20532},end:{line:1,column:20609}},line:1},"261":{name:"(anonymous_261)",decl:{start:{line:1,column:20543},end:{line:1,column:20544}},loc:{start:{line:1,column:20546},end:{line:1,column:20607}},line:1},"262":{name:"yt",decl:{start:{line:1,column:20618},end:{line:1,column:20620}},loc:{start:{line:1,column:20625},end:{line:1,column:20802}},line:1},"263":{name:"(anonymous_263)",decl:{start:{line:1,column:20669},end:{line:1,column:20670}},loc:{start:{line:1,column:20672},end:{line:1,column:20709}},line:1},"264":{name:"(anonymous_264)",decl:{start:{line:1,column:20761},end:{line:1,column:20762}},loc:{start:{line:1,column:20765},end:{line:1,column:20799}},line:1},"265":{name:"fe",decl:{start:{line:1,column:20811},end:{line:1,column:20813}},loc:{start:{line:1,column:20818},end:{line:1,column:21143}},line:1},"266":{name:"(anonymous_266)",decl:{start:{line:1,column:21063},end:{line:1,column:21064}},loc:{start:{line:1,column:21067},end:{line:1,column:21093}},line:1},"267":{name:"Z",decl:{start:{line:1,column:21152},end:{line:1,column:21153}},loc:{start:{line:1,column:21158},end:{line:1,column:21570}},line:1},"268":{name:"(anonymous_268)",decl:{start:{line:1,column:21264},end:{line:1,column:21265}},loc:{start:{line:1,column:21267},end:{line:1,column:21282}},line:1},"269":{name:"(anonymous_269)",decl:{start:{line:1,column:21420},end:{line:1,column:21421}},loc:{start:{line:1,column:21423},end:{line:1,column:21443}},line:1},"270":{name:"(anonymous_270)",decl:{start:{line:1,column:21505},end:{line:1,column:21506}},loc:{start:{line:1,column:21509},end:{line:1,column:21511}},line:1},"271":{name:"Ct",decl:{start:{line:1,column:21579},end:{line:1,column:21581}},loc:{start:{line:1,column:21586},end:{line:1,column:21714}},line:1},"272":{name:"(anonymous_272)",decl:{start:{line:1,column:21620},end:{line:1,column:21621}},loc:{start:{line:1,column:21623},end:{line:1,column:21712}},line:1},"273":{name:"Vt",decl:{start:{line:1,column:21723},end:{line:1,column:21725}},loc:{start:{line:1,column:21730},end:{line:1,column:21881}},line:1},"274":{name:"(anonymous_274)",decl:{start:{line:1,column:21765},end:{line:1,column:21766}},loc:{start:{line:1,column:21769},end:{line:1,column:21879}},line:1},"275":{name:"Qe",decl:{start:{line:1,column:21890},end:{line:1,column:21892}},loc:{start:{line:1,column:21897},end:{line:1,column:22043}},line:1},"276":{name:"Dt",decl:{start:{line:1,column:22052},end:{line:1,column:22054}},loc:{start:{line:1,column:22059},end:{line:1,column:22206}},line:1},"277":{name:"(anonymous_277)",decl:{start:{line:1,column:22066},end:{line:1,column:22067}},loc:{start:{line:1,column:22073},end:{line:1,column:22130}},line:1},"278":{name:"(anonymous_278)",decl:{start:{line:1,column:22174},end:{line:1,column:22175}},loc:{start:{line:1,column:22178},end:{line:1,column:22204}},line:1},"279":{name:"bt",decl:{start:{line:1,column:22215},end:{line:1,column:22217}},loc:{start:{line:1,column:22222},end:{line:1,column:22239}},line:1},"280":{name:"At",decl:{start:{line:1,column:22248},end:{line:1,column:22250}},loc:{start:{line:1,column:22255},end:{line:1,column:22270}},line:1},"281":{name:"Mt",decl:{start:{line:1,column:22279},end:{line:1,column:22281}},loc:{start:{line:1,column:22286},end:{line:1,column:22397}},line:1},"282":{name:"Ft",decl:{start:{line:1,column:22406},end:{line:1,column:22408}},loc:{start:{line:1,column:22411},end:{line:1,column:22461}},line:1},"283":{name:"Et",decl:{start:{line:1,column:22470},end:{line:1,column:22472}},loc:{start:{line:1,column:22477},end:{line:1,column:22635}},line:1},"284":{name:"(anonymous_284)",decl:{start:{line:1,column:22513},end:{line:1,column:22514}},loc:{start:{line:1,column:22516},end:{line:1,column:22633}},line:1},"285":{name:"wt",decl:{start:{line:1,column:22644},end:{line:1,column:22646}},loc:{start:{line:1,column:22651},end:{line:1,column:22771}},line:1},"286":{name:"(anonymous_286)",decl:{start:{line:1,column:22714},end:{line:1,column:22715}},loc:{start:{line:1,column:22717},end:{line:1,column:22755}},line:1},"287":{name:"It",decl:{start:{line:1,column:22780},end:{line:1,column:22782}},loc:{start:{line:1,column:22787},end:{line:1,column:22827}},line:1},"288":{name:"Ne",decl:{start:{line:1,column:22836},end:{line:1,column:22838}},loc:{start:{line:1,column:22843},end:{line:1,column:22883}},line:1},"289":{name:"Oe",decl:{start:{line:1,column:22892},end:{line:1,column:22894}},loc:{start:{line:1,column:22897},end:{line:1,column:22990}},line:1},"290":{name:"(anonymous_290)",decl:{start:{line:1,column:23075},end:{line:1,column:23076}},loc:{start:{line:1,column:23098},end:{line:1,column:23372}},line:1},"291":{name:"(anonymous_291)",decl:{start:{line:1,column:23372},end:{line:1,column:23373}},loc:{start:{line:1,column:23388},end:{line:1,column:23575}},line:1},"292":{name:"(anonymous_292)",decl:{start:{line:1,column:23497},end:{line:1,column:23498}},loc:{start:{line:1,column:23500},end:{line:1,column:23542}},line:1},"293":{name:"(anonymous_293)",decl:{start:{line:1,column:23575},end:{line:1,column:23576}},loc:{start:{line:1,column:23593},end:{line:1,column:23613}},line:1},"294":{name:"(anonymous_294)",decl:{start:{line:1,column:23613},end:{line:1,column:23614}},loc:{start:{line:1,column:23644},end:{line:1,column:23873}},line:1},"295":{name:"(anonymous_295)",decl:{start:{line:1,column:23873},end:{line:1,column:23874}},loc:{start:{line:1,column:23887},end:{line:1,column:23889}},line:1},"296":{name:"(anonymous_296)",decl:{start:{line:1,column:23889},end:{line:1,column:23890}},loc:{start:{line:1,column:23904},end:{line:1,column:23914}},line:1},"297":{name:"(anonymous_297)",decl:{start:{line:1,column:23914},end:{line:1,column:23915}},loc:{start:{line:1,column:23936},end:{line:1,column:23958}},line:1},"298":{name:"(anonymous_298)",decl:{start:{line:1,column:23958},end:{line:1,column:23959}},loc:{start:{line:1,column:23977},end:{line:1,column:24001}},line:1},"299":{name:"(anonymous_299)",decl:{start:{line:1,column:24001},end:{line:1,column:24002}},loc:{start:{line:1,column:24023},end:{line:1,column:24045}},line:1},"300":{name:"(anonymous_300)",decl:{start:{line:1,column:24045},end:{line:1,column:24046}},loc:{start:{line:1,column:24072},end:{line:1,column:24104}},line:1},"301":{name:"(anonymous_301)",decl:{start:{line:1,column:24104},end:{line:1,column:24105}},loc:{start:{line:1,column:24134},end:{line:1,column:24164}},line:1},"302":{name:"(anonymous_302)",decl:{start:{line:1,column:24164},end:{line:1,column:24165}},loc:{start:{line:1,column:24180},end:{line:1,column:24182}},line:1},"303":{name:"(anonymous_303)",decl:{start:{line:1,column:24182},end:{line:1,column:24183}},loc:{start:{line:1,column:24204},end:{line:1,column:24423}},line:1},"304":{name:"(anonymous_304)",decl:{start:{line:1,column:24423},end:{line:1,column:24424}},loc:{start:{line:1,column:24441},end:{line:1,column:24612}},line:1},"305":{name:"(anonymous_305)",decl:{start:{line:1,column:24621},end:{line:1,column:24622}},loc:{start:{line:1,column:24624},end:{line:1,column:24638}},line:1},"306":{name:"(anonymous_306)",decl:{start:{line:1,column:24647},end:{line:1,column:24648}},loc:{start:{line:1,column:24651},end:{line:1,column:24848}},line:1},"307":{name:"(anonymous_307)",decl:{start:{line:1,column:24677},end:{line:1,column:24678}},loc:{start:{line:1,column:24688},end:{line:1,column:24706}},line:1},"308":{name:"(anonymous_308)",decl:{start:{line:1,column:24875},end:{line:1,column:24876}},loc:{start:{line:1,column:24893},end:{line:1,column:25079}},line:1},"309":{name:"(anonymous_309)",decl:{start:{line:1,column:25088},end:{line:1,column:25089}},loc:{start:{line:1,column:25093},end:{line:1,column:25137}},line:1},"310":{name:"(anonymous_310)",decl:{start:{line:1,column:25137},end:{line:1,column:25138}},loc:{start:{line:1,column:25149},end:{line:1,column:25359}},line:1},"311":{name:"(anonymous_311)",decl:{start:{line:1,column:25177},end:{line:1,column:25178}},loc:{start:{line:1,column:25180},end:{line:1,column:25228}},line:1},"312":{name:"(anonymous_312)",decl:{start:{line:1,column:25359},end:{line:1,column:25360}},loc:{start:{line:1,column:25375},end:{line:1,column:25482}},line:1},"313":{name:"(anonymous_313)",decl:{start:{line:1,column:25482},end:{line:1,column:25483}},loc:{start:{line:1,column:25498},end:{line:1,column:25687}},line:1},"314":{name:"(anonymous_314)",decl:{start:{line:1,column:25600},end:{line:1,column:25601}},loc:{start:{line:1,column:25604},end:{line:1,column:25606}},line:1},"315":{name:"(anonymous_315)",decl:{start:{line:1,column:25687},end:{line:1,column:25688}},loc:{start:{line:1,column:25707},end:{line:1,column:25981}},line:1},"316":{name:"(anonymous_316)",decl:{start:{line:1,column:25809},end:{line:1,column:25810}},loc:{start:{line:1,column:25813},end:{line:1,column:25815}},line:1},"317":{name:"(anonymous_317)",decl:{start:{line:1,column:25981},end:{line:1,column:25982}},loc:{start:{line:1,column:25993},end:{line:1,column:26022}},line:1},"318":{name:"(anonymous_318)",decl:{start:{line:1,column:26022},end:{line:1,column:26023}},loc:{start:{line:1,column:26038},end:{line:1,column:26177}},line:1},"319":{name:"(anonymous_319)",decl:{start:{line:1,column:26063},end:{line:1,column:26064}},loc:{start:{line:1,column:26070},end:{line:1,column:26144}},line:1},"320":{name:"(anonymous_320)",decl:{start:{line:1,column:26177},end:{line:1,column:26178}},loc:{start:{line:1,column:26195},end:{line:1,column:26331}},line:1},"321":{name:"(anonymous_321)",decl:{start:{line:1,column:26216},end:{line:1,column:26217}},loc:{start:{line:1,column:26223},end:{line:1,column:26297}},line:1},"322":{name:"(anonymous_322)",decl:{start:{line:1,column:26331},end:{line:1,column:26332}},loc:{start:{line:1,column:26347},end:{line:1,column:26554}},line:1},"323":{name:"(anonymous_323)",decl:{start:{line:1,column:26367},end:{line:1,column:26368}},loc:{start:{line:1,column:26374},end:{line:1,column:26414}},line:1},"324":{name:"(anonymous_324)",decl:{start:{line:1,column:26554},end:{line:1,column:26555}},loc:{start:{line:1,column:26567},end:{line:1,column:26613}},line:1},"325":{name:"(anonymous_325)",decl:{start:{line:1,column:26593},end:{line:1,column:26594}},loc:{start:{line:1,column:26596},end:{line:1,column:26611}},line:1},"326":{name:"(anonymous_326)",decl:{start:{line:1,column:26613},end:{line:1,column:26614}},loc:{start:{line:1,column:26624},end:{line:1,column:26789}},line:1},"327":{name:"(anonymous_327)",decl:{start:{line:1,column:26669},end:{line:1,column:26670}},loc:{start:{line:1,column:26672},end:{line:1,column:26709}},line:1},"328":{name:"(anonymous_328)",decl:{start:{line:1,column:26702},end:{line:1,column:26703}},loc:{start:{line:1,column:26706},end:{line:1,column:26708}},line:1},"329":{name:"(anonymous_329)",decl:{start:{line:1,column:26789},end:{line:1,column:26790}},loc:{start:{line:1,column:26804},end:{line:1,column:26832}},line:1},"330":{name:"(anonymous_330)",decl:{start:{line:1,column:26832},end:{line:1,column:26833}},loc:{start:{line:1,column:26854},end:{line:1,column:26978}},line:1},"331":{name:"(anonymous_331)",decl:{start:{line:1,column:26882},end:{line:1,column:26883}},loc:{start:{line:1,column:26889},end:{line:1,column:26918}},line:1},"332":{name:"(anonymous_332)",decl:{start:{line:1,column:26978},end:{line:1,column:26979}},loc:{start:{line:1,column:26994},end:{line:1,column:27034}},line:1},"333":{name:"(anonymous_333)",decl:{start:{line:1,column:27017},end:{line:1,column:27018}},loc:{start:{line:1,column:27024},end:{line:1,column:27032}},line:1},"334":{name:"(anonymous_334)",decl:{start:{line:1,column:27034},end:{line:1,column:27035}},loc:{start:{line:1,column:27048},end:{line:1,column:27126}},line:1},"335":{name:"(anonymous_335)",decl:{start:{line:1,column:27081},end:{line:1,column:27082}},loc:{start:{line:1,column:27084},end:{line:1,column:27108}},line:1},"336":{name:"(anonymous_336)",decl:{start:{line:1,column:27114},end:{line:1,column:27115}},loc:{start:{line:1,column:27117},end:{line:1,column:27124}},line:1},"337":{name:"(anonymous_337)",decl:{start:{line:1,column:27126},end:{line:1,column:27127}},loc:{start:{line:1,column:27141},end:{line:1,column:27188}},line:1},"338":{name:"(anonymous_338)",decl:{start:{line:1,column:27168},end:{line:1,column:27169}},loc:{start:{line:1,column:27171},end:{line:1,column:27186}},line:1},"339":{name:"(anonymous_339)",decl:{start:{line:1,column:27188},end:{line:1,column:27189}},loc:{start:{line:1,column:27204},end:{line:1,column:27253}},line:1},"340":{name:"(anonymous_340)",decl:{start:{line:1,column:27224},end:{line:1,column:27225}},loc:{start:{line:1,column:27227},end:{line:1,column:27251}},line:1},"341":{name:"(anonymous_341)",decl:{start:{line:1,column:27253},end:{line:1,column:27254}},loc:{start:{line:1,column:27275},end:{line:1,column:27370}},line:1},"342":{name:"(anonymous_342)",decl:{start:{line:1,column:27370},end:{line:1,column:27371}},loc:{start:{line:1,column:27389},end:{line:1,column:27464}},line:1},"343":{name:"(anonymous_343)",decl:{start:{line:1,column:27464},end:{line:1,column:27465}},loc:{start:{line:1,column:27472},end:{line:1,column:27497}},line:1},"344":{name:"(anonymous_344)",decl:{start:{line:1,column:27507},end:{line:1,column:27508}},loc:{start:{line:1,column:27511},end:{line:1,column:29965}},line:1},"345":{name:"(anonymous_345)",decl:{start:{line:1,column:27551},end:{line:1,column:27552}},loc:{start:{line:1,column:27566},end:{line:1,column:27601}},line:1},"346":{name:"(anonymous_346)",decl:{start:{line:1,column:27601},end:{line:1,column:27602}},loc:{start:{line:1,column:27617},end:{line:1,column:27649}},line:1},"347":{name:"(anonymous_347)",decl:{start:{line:1,column:27662},end:{line:1,column:27663}},loc:{start:{line:1,column:27666},end:{line:1,column:27691}},line:1},"348":{name:"(anonymous_348)",decl:{start:{line:1,column:27747},end:{line:1,column:27748}},loc:{start:{line:1,column:27751},end:{line:1,column:27773}},line:1},"349":{name:"(anonymous_349)",decl:{start:{line:1,column:27788},end:{line:1,column:27789}},loc:{start:{line:1,column:27806},end:{line:1,column:27894}},line:1},"350":{name:"(anonymous_350)",decl:{start:{line:1,column:27894},end:{line:1,column:27895}},loc:{start:{line:1,column:27908},end:{line:1,column:27927}},line:1},"351":{name:"(anonymous_351)",decl:{start:{line:1,column:27927},end:{line:1,column:27928}},loc:{start:{line:1,column:27940},end:{line:1,column:27958}},line:1},"352":{name:"(anonymous_352)",decl:{start:{line:1,column:27958},end:{line:1,column:27959}},loc:{start:{line:1,column:27970},end:{line:1,column:28124}},line:1},"353":{name:"(anonymous_353)",decl:{start:{line:1,column:28124},end:{line:1,column:28125}},loc:{start:{line:1,column:28135},end:{line:1,column:28271}},line:1},"354":{name:"(anonymous_354)",decl:{start:{line:1,column:28262},end:{line:1,column:28263}},loc:{start:{line:1,column:28266},end:{line:1,column:28268}},line:1},"355":{name:"(anonymous_355)",decl:{start:{line:1,column:28271},end:{line:1,column:28272}},loc:{start:{line:1,column:28290},end:{line:1,column:28303}},line:1},"356":{name:"(anonymous_356)",decl:{start:{line:1,column:28303},end:{line:1,column:28304}},loc:{start:{line:1,column:28313},end:{line:1,column:28323}},line:1},"357":{name:"(anonymous_357)",decl:{start:{line:1,column:28323},end:{line:1,column:28324}},loc:{start:{line:1,column:28336},end:{line:1,column:28473}},line:1},"358":{name:"(anonymous_358)",decl:{start:{line:1,column:28473},end:{line:1,column:28474}},loc:{start:{line:1,column:28486},end:{line:1,column:28516}},line:1},"359":{name:"(anonymous_359)",decl:{start:{line:1,column:28516},end:{line:1,column:28517}},loc:{start:{line:1,column:28532},end:{line:1,column:28580}},line:1},"360":{name:"(anonymous_360)",decl:{start:{line:1,column:28580},end:{line:1,column:28581}},loc:{start:{line:1,column:28595},end:{line:1,column:28624}},line:1},"361":{name:"(anonymous_361)",decl:{start:{line:1,column:28624},end:{line:1,column:28625}},loc:{start:{line:1,column:28642},end:{line:1,column:28673}},line:1},"362":{name:"(anonymous_362)",decl:{start:{line:1,column:28673},end:{line:1,column:28674}},loc:{start:{line:1,column:28688},end:{line:1,column:28718}},line:1},"363":{name:"(anonymous_363)",decl:{start:{line:1,column:28718},end:{line:1,column:28719}},loc:{start:{line:1,column:28733},end:{line:1,column:28763}},line:1},"364":{name:"(anonymous_364)",decl:{start:{line:1,column:28763},end:{line:1,column:28764}},loc:{start:{line:1,column:28778},end:{line:1,column:28807}},line:1},"365":{name:"(anonymous_365)",decl:{start:{line:1,column:28807},end:{line:1,column:28808}},loc:{start:{line:1,column:28825},end:{line:1,column:28856}},line:1},"366":{name:"(anonymous_366)",decl:{start:{line:1,column:28856},end:{line:1,column:28857}},loc:{start:{line:1,column:28872},end:{line:1,column:28907}},line:1},"367":{name:"(anonymous_367)",decl:{start:{line:1,column:28907},end:{line:1,column:28908}},loc:{start:{line:1,column:28916},end:{line:1,column:28934}},line:1},"368":{name:"(anonymous_368)",decl:{start:{line:1,column:28934},end:{line:1,column:28935}},loc:{start:{line:1,column:28958},end:{line:1,column:29012}},line:1},"369":{name:"(anonymous_369)",decl:{start:{line:1,column:29012},end:{line:1,column:29013}},loc:{start:{line:1,column:29023},end:{line:1,column:29175}},line:1},"370":{name:"(anonymous_370)",decl:{start:{line:1,column:29175},end:{line:1,column:29176}},loc:{start:{line:1,column:29192},end:{line:1,column:29387}},line:1},"371":{name:"(anonymous_371)",decl:{start:{line:1,column:29217},end:{line:1,column:29218}},loc:{start:{line:1,column:29220},end:{line:1,column:29339}},line:1},"372":{name:"(anonymous_372)",decl:{start:{line:1,column:29387},end:{line:1,column:29388}},loc:{start:{line:1,column:29409},end:{line:1,column:29487}},line:1},"373":{name:"(anonymous_373)",decl:{start:{line:1,column:29487},end:{line:1,column:29488}},loc:{start:{line:1,column:29511},end:{line:1,column:29594}},line:1},"374":{name:"(anonymous_374)",decl:{start:{line:1,column:29594},end:{line:1,column:29595}},loc:{start:{line:1,column:29616},end:{line:1,column:29732}},line:1},"375":{name:"(anonymous_375)",decl:{start:{line:1,column:29724},end:{line:1,column:29725}},loc:{start:{line:1,column:29728},end:{line:1,column:29730}},line:1},"376":{name:"(anonymous_376)",decl:{start:{line:1,column:29732},end:{line:1,column:29733}},loc:{start:{line:1,column:29751},end:{line:1,column:29808}},line:1},"377":{name:"(anonymous_377)",decl:{start:{line:1,column:29808},end:{line:1,column:29809}},loc:{start:{line:1,column:29827},end:{line:1,column:29838}},line:1},"378":{name:"(anonymous_378)",decl:{start:{line:1,column:29855},end:{line:1,column:29856}},loc:{start:{line:1,column:29866},end:{line:1,column:29911}},line:1},"379":{name:"(anonymous_379)",decl:{start:{line:1,column:30018},end:{line:1,column:30019}},loc:{start:{line:1,column:30022},end:{line:1,column:30024}},line:1},"380":{name:"(anonymous_380)",decl:{start:{line:1,column:30031},end:{line:1,column:30032}},loc:{start:{line:1,column:30035},end:{line:1,column:31204}},line:1},"381":{name:"(anonymous_381)",decl:{start:{line:1,column:30114},end:{line:1,column:30115}},loc:{start:{line:1,column:30131},end:{line:1,column:30133}},line:1},"382":{name:"(anonymous_382)",decl:{start:{line:1,column:30209},end:{line:1,column:30210}},loc:{start:{line:1,column:30231},end:{line:1,column:30365}},line:1},"383":{name:"(anonymous_383)",decl:{start:{line:1,column:30365},end:{line:1,column:30366}},loc:{start:{line:1,column:30379},end:{line:1,column:30512}},line:1},"384":{name:"(anonymous_384)",decl:{start:{line:1,column:30512},end:{line:1,column:30513}},loc:{start:{line:1,column:30525},end:{line:1,column:30566}},line:1},"385":{name:"(anonymous_385)",decl:{start:{line:1,column:30566},end:{line:1,column:30567}},loc:{start:{line:1,column:30586},end:{line:1,column:30624}},line:1},"386":{name:"(anonymous_386)",decl:{start:{line:1,column:30624},end:{line:1,column:30625}},loc:{start:{line:1,column:30634},end:{line:1,column:30706}},line:1},"387":{name:"(anonymous_387)",decl:{start:{line:1,column:30706},end:{line:1,column:30707}},loc:{start:{line:1,column:30725},end:{line:1,column:30778}},line:1},"388":{name:"(anonymous_388)",decl:{start:{line:1,column:30778},end:{line:1,column:30779}},loc:{start:{line:1,column:30793},end:{line:1,column:30858}},line:1},"389":{name:"(anonymous_389)",decl:{start:{line:1,column:30875},end:{line:1,column:30876}},loc:{start:{line:1,column:30886},end:{line:1,column:30947}},line:1},"390":{name:"(anonymous_390)",decl:{start:{line:1,column:31240},end:{line:1,column:31241}},loc:{start:{line:1,column:31244},end:{line:1,column:31246}},line:1},"391":{name:"(anonymous_391)",decl:{start:{line:1,column:31253},end:{line:1,column:31254}},loc:{start:{line:1,column:31257},end:{line:1,column:31723}},line:1},"392":{name:"(anonymous_392)",decl:{start:{line:1,column:31302},end:{line:1,column:31303}},loc:{start:{line:1,column:31315},end:{line:1,column:31333}},line:1},"393":{name:"(anonymous_393)",decl:{start:{line:1,column:31351},end:{line:1,column:31352}},loc:{start:{line:1,column:31355},end:{line:1,column:31408}},line:1},"394":{name:"(anonymous_394)",decl:{start:{line:1,column:31369},end:{line:1,column:31370}},loc:{start:{line:1,column:31380},end:{line:1,column:31407}},line:1},"395":{name:"(anonymous_395)",decl:{start:{line:1,column:31484},end:{line:1,column:31485}},loc:{start:{line:1,column:31497},end:{line:1,column:31589}},line:1},"396":{name:"(anonymous_396)",decl:{start:{line:1,column:31514},end:{line:1,column:31515}},loc:{start:{line:1,column:31525},end:{line:1,column:31547}},line:1},"397":{name:"(anonymous_397)",decl:{start:{line:1,column:31557},end:{line:1,column:31558}},loc:{start:{line:1,column:31567},end:{line:1,column:31587}},line:1},"398":{name:"(anonymous_398)",decl:{start:{line:1,column:31755},end:{line:1,column:31756}},loc:{start:{line:1,column:31759},end:{line:1,column:31761}},line:1},"399":{name:"tt",decl:{start:{line:1,column:31782},end:{line:1,column:31784}},loc:{start:{line:1,column:31789},end:{line:1,column:31875}},line:1},"400":{name:"jt",decl:{start:{line:1,column:31884},end:{line:1,column:31886}},loc:{start:{line:1,column:31889},end:{line:1,column:31913}},line:1},"401":{name:"(anonymous_401)",decl:{start:{line:1,column:31921},end:{line:1,column:31922}},loc:{start:{line:1,column:31925},end:{line:1,column:33272}},line:1},"402":{name:"(anonymous_402)",decl:{start:{line:1,column:31983},end:{line:1,column:31984}},loc:{start:{line:1,column:32001},end:{line:1,column:32022}},line:1},"403":{name:"(anonymous_403)",decl:{start:{line:1,column:32118},end:{line:1,column:32119}},loc:{start:{line:1,column:32142},end:{line:1,column:32343}},line:1},"404":{name:"(anonymous_404)",decl:{start:{line:1,column:32225},end:{line:1,column:32226}},loc:{start:{line:1,column:32229},end:{line:1,column:32308}},line:1},"405":{name:"(anonymous_405)",decl:{start:{line:1,column:32343},end:{line:1,column:32344}},loc:{start:{line:1,column:32356},end:{line:1,column:32459}},line:1},"406":{name:"(anonymous_406)",decl:{start:{line:1,column:32459},end:{line:1,column:32460}},loc:{start:{line:1,column:32478},end:{line:1,column:32547}},line:1},"407":{name:"(anonymous_407)",decl:{start:{line:1,column:32493},end:{line:1,column:32494}},loc:{start:{line:1,column:32496},end:{line:1,column:32546}},line:1},"408":{name:"(anonymous_408)",decl:{start:{line:1,column:32547},end:{line:1,column:32548}},loc:{start:{line:1,column:32564},end:{line:1,column:32602}},line:1},"409":{name:"(anonymous_409)",decl:{start:{line:1,column:32602},end:{line:1,column:32603}},loc:{start:{line:1,column:32617},end:{line:1,column:32722}},line:1},"410":{name:"(anonymous_410)",decl:{start:{line:1,column:32722},end:{line:1,column:32723}},loc:{start:{line:1,column:32740},end:{line:1,column:32808}},line:1},"411":{name:"(anonymous_411)",decl:{start:{line:1,column:32826},end:{line:1,column:32827}},loc:{start:{line:1,column:32830},end:{line:1,column:32883}},line:1},"412":{name:"(anonymous_412)",decl:{start:{line:1,column:32844},end:{line:1,column:32845}},loc:{start:{line:1,column:32855},end:{line:1,column:32882}},line:1},"413":{name:"(anonymous_413)",decl:{start:{line:1,column:33071},end:{line:1,column:33072}},loc:{start:{line:1,column:33084},end:{line:1,column:33190}},line:1},"414":{name:"(anonymous_414)",decl:{start:{line:1,column:33101},end:{line:1,column:33102}},loc:{start:{line:1,column:33112},end:{line:1,column:33147}},line:1},"415":{name:"(anonymous_415)",decl:{start:{line:1,column:33156},end:{line:1,column:33157}},loc:{start:{line:1,column:33166},end:{line:1,column:33188}},line:1},"416":{name:"(anonymous_416)",decl:{start:{line:1,column:33280},end:{line:1,column:33281}},loc:{start:{line:1,column:33284},end:{line:1,column:34035}},line:1},"417":{name:"(anonymous_417)",decl:{start:{line:1,column:33323},end:{line:1,column:33324}},loc:{start:{line:1,column:33341},end:{line:1,column:33445}},line:1},"418":{name:"(anonymous_418)",decl:{start:{line:1,column:33445},end:{line:1,column:33446}},loc:{start:{line:1,column:33459},end:{line:1,column:33596}},line:1},"419":{name:"(anonymous_419)",decl:{start:{line:1,column:33596},end:{line:1,column:33597}},loc:{start:{line:1,column:33608},end:{line:1,column:33673}},line:1},"420":{name:"(anonymous_420)",decl:{start:{line:1,column:33673},end:{line:1,column:33674}},loc:{start:{line:1,column:33692},end:{line:1,column:33759}},line:1},"421":{name:"(anonymous_421)",decl:{start:{line:1,column:33759},end:{line:1,column:33760}},loc:{start:{line:1,column:33772},end:{line:1,column:33853}},line:1},"422":{name:"(anonymous_422)",decl:{start:{line:1,column:33870},end:{line:1,column:33871}},loc:{start:{line:1,column:33881},end:{line:1,column:33918}},line:1},"423":{name:"(anonymous_423)",decl:{start:{line:1,column:34067},end:{line:1,column:34068}},loc:{start:{line:1,column:34071},end:{line:1,column:34073}},line:1},"424":{name:"xe",decl:{start:{line:1,column:34094},end:{line:1,column:34096}},loc:{start:{line:1,column:34101},end:{line:1,column:34220}},line:1},"425":{name:"Tt",decl:{start:{line:1,column:34229},end:{line:1,column:34231}},loc:{start:{line:1,column:34234},end:{line:1,column:34258}},line:1},"426":{name:"(anonymous_426)",decl:{start:{line:1,column:34266},end:{line:1,column:34267}},loc:{start:{line:1,column:34270},end:{line:1,column:35673}},line:1},"427":{name:"(anonymous_427)",decl:{start:{line:1,column:34328},end:{line:1,column:34329}},loc:{start:{line:1,column:34346},end:{line:1,column:34367}},line:1},"428":{name:"(anonymous_428)",decl:{start:{line:1,column:34390},end:{line:1,column:34391}},loc:{start:{line:1,column:34403},end:{line:1,column:34597}},line:1},"429":{name:"(anonymous_429)",decl:{start:{line:1,column:34456},end:{line:1,column:34457}},loc:{start:{line:1,column:34459},end:{line:1,column:34479}},line:1},"430":{name:"(anonymous_430)",decl:{start:{line:1,column:34483},end:{line:1,column:34484}},loc:{start:{line:1,column:34490},end:{line:1,column:34534}},line:1},"431":{name:"(anonymous_431)",decl:{start:{line:1,column:34542},end:{line:1,column:34543}},loc:{start:{line:1,column:34549},end:{line:1,column:34569}},line:1},"432":{name:"(anonymous_432)",decl:{start:{line:1,column:34597},end:{line:1,column:34598}},loc:{start:{line:1,column:34616},end:{line:1,column:34911}},line:1},"433":{name:"(anonymous_433)",decl:{start:{line:1,column:34631},end:{line:1,column:34632}},loc:{start:{line:1,column:34634},end:{line:1,column:34910}},line:1},"434":{name:"(anonymous_434)",decl:{start:{line:1,column:34911},end:{line:1,column:34912}},loc:{start:{line:1,column:34929},end:{line:1,column:35001}},line:1},"435":{name:"(anonymous_435)",decl:{start:{line:1,column:35001},end:{line:1,column:35002}},loc:{start:{line:1,column:35016},end:{line:1,column:35128}},line:1},"436":{name:"(anonymous_436)",decl:{start:{line:1,column:35128},end:{line:1,column:35129}},loc:{start:{line:1,column:35146},end:{line:1,column:35221}},line:1},"437":{name:"(anonymous_437)",decl:{start:{line:1,column:35239},end:{line:1,column:35240}},loc:{start:{line:1,column:35243},end:{line:1,column:35296}},line:1},"438":{name:"(anonymous_438)",decl:{start:{line:1,column:35257},end:{line:1,column:35258}},loc:{start:{line:1,column:35268},end:{line:1,column:35295}},line:1},"439":{name:"(anonymous_439)",decl:{start:{line:1,column:35478},end:{line:1,column:35479}},loc:{start:{line:1,column:35491},end:{line:1,column:35591}},line:1},"440":{name:"(anonymous_440)",decl:{start:{line:1,column:35508},end:{line:1,column:35509}},loc:{start:{line:1,column:35519},end:{line:1,column:35548}},line:1},"441":{name:"(anonymous_441)",decl:{start:{line:1,column:35557},end:{line:1,column:35558}},loc:{start:{line:1,column:35567},end:{line:1,column:35589}},line:1},"442":{name:"(anonymous_442)",decl:{start:{line:1,column:35681},end:{line:1,column:35682}},loc:{start:{line:1,column:35685},end:{line:1,column:36604}},line:1},"443":{name:"(anonymous_443)",decl:{start:{line:1,column:35731},end:{line:1,column:35732}},loc:{start:{line:1,column:35749},end:{line:1,column:35857}},line:1},"444":{name:"(anonymous_444)",decl:{start:{line:1,column:35857},end:{line:1,column:35858}},loc:{start:{line:1,column:35871},end:{line:1,column:35989}},line:1},"445":{name:"(anonymous_445)",decl:{start:{line:1,column:35989},end:{line:1,column:35990}},loc:{start:{line:1,column:36001},end:{line:1,column:36137}},line:1},"446":{name:"(anonymous_446)",decl:{start:{line:1,column:36137},end:{line:1,column:36138}},loc:{start:{line:1,column:36156},end:{line:1,column:36223}},line:1},"447":{name:"(anonymous_447)",decl:{start:{line:1,column:36223},end:{line:1,column:36224}},loc:{start:{line:1,column:36238},end:{line:1,column:36308}},line:1},"448":{name:"(anonymous_448)",decl:{start:{line:1,column:36308},end:{line:1,column:36309}},loc:{start:{line:1,column:36321},end:{line:1,column:36422}},line:1},"449":{name:"(anonymous_449)",decl:{start:{line:1,column:36439},end:{line:1,column:36440}},loc:{start:{line:1,column:36450},end:{line:1,column:36487}},line:1},"450":{name:"Bt",decl:{start:{line:1,column:36617},end:{line:1,column:36619}},loc:{start:{line:1,column:36622},end:{line:1,column:36666}},line:1},"451":{name:"(anonymous_451)",decl:{start:{line:1,column:36674},end:{line:1,column:36675}},loc:{start:{line:1,column:36678},end:{line:1,column:37130}},line:1},"452":{name:"(anonymous_452)",decl:{start:{line:1,column:36719},end:{line:1,column:36720}},loc:{start:{line:1,column:36733},end:{line:1,column:36922}},line:1},"453":{name:"(anonymous_453)",decl:{start:{line:1,column:36922},end:{line:1,column:36923}},loc:{start:{line:1,column:36933},end:{line:1,column:36960}},line:1},"454":{name:"(anonymous_454)",decl:{start:{line:1,column:36960},end:{line:1,column:36961}},loc:{start:{line:1,column:36988},end:{line:1,column:37006}},line:1},"455":{name:"(anonymous_455)",decl:{start:{line:1,column:37006},end:{line:1,column:37007}},loc:{start:{line:1,column:37016},end:{line:1,column:37032}},line:1},"456":{name:"(anonymous_456)",decl:{start:{line:1,column:37049},end:{line:1,column:37050}},loc:{start:{line:1,column:37060},end:{line:1,column:37078}},line:1},"457":{name:"(anonymous_457)",decl:{start:{line:1,column:37167},end:{line:1,column:37168}},loc:{start:{line:1,column:37171},end:{line:1,column:37173}},line:1},"458":{name:"(anonymous_458)",decl:{start:{line:1,column:37189},end:{line:1,column:37190}},loc:{start:{line:1,column:37193},end:{line:1,column:37688}},line:1},"459":{name:"(anonymous_459)",decl:{start:{line:1,column:37260},end:{line:1,column:37261}},loc:{start:{line:1,column:37263},end:{line:1,column:37268}},line:1},"460":{name:"(anonymous_460)",decl:{start:{line:1,column:37285},end:{line:1,column:37286}},loc:{start:{line:1,column:37288},end:{line:1,column:37293}},line:1},"461":{name:"(anonymous_461)",decl:{start:{line:1,column:37312},end:{line:1,column:37313}},loc:{start:{line:1,column:37316},end:{line:1,column:37369}},line:1},"462":{name:"(anonymous_462)",decl:{start:{line:1,column:37330},end:{line:1,column:37331}},loc:{start:{line:1,column:37341},end:{line:1,column:37368}},line:1},"463":{name:"(anonymous_463)",decl:{start:{line:1,column:37547},end:{line:1,column:37548}},loc:{start:{line:1,column:37560},end:{line:1,column:37610}},line:1},"464":{name:"(anonymous_464)",decl:{start:{line:1,column:37700},end:{line:1,column:37701}},loc:{start:{line:1,column:37704},end:{line:1,column:37821}},line:1},"465":{name:"(anonymous_465)",decl:{start:{line:1,column:37730},end:{line:1,column:37731}},loc:{start:{line:1,column:37741},end:{line:1,column:37759}},line:1},"466":{name:"Pe",decl:{start:{line:1,column:37834},end:{line:1,column:37836}},loc:{start:{line:1,column:37839},end:{line:1,column:37924}},line:1},"467":{name:"(anonymous_467)",decl:{start:{line:1,column:37932},end:{line:1,column:37933}},loc:{start:{line:1,column:37936},end:{line:1,column:38890}},line:1},"468":{name:"(anonymous_468)",decl:{start:{line:1,column:37963},end:{line:1,column:37964}},loc:{start:{line:1,column:37980},end:{line:1,column:38022}},line:1},"469":{name:"(anonymous_469)",decl:{start:{line:1,column:38022},end:{line:1,column:38023}},loc:{start:{line:1,column:38037},end:{line:1,column:38173}},line:1},"470":{name:"(anonymous_470)",decl:{start:{line:1,column:38173},end:{line:1,column:38174}},loc:{start:{line:1,column:38189},end:{line:1,column:38239}},line:1},"471":{name:"(anonymous_471)",decl:{start:{line:1,column:38239},end:{line:1,column:38240}},loc:{start:{line:1,column:38253},end:{line:1,column:38389}},line:1},"472":{name:"(anonymous_472)",decl:{start:{line:1,column:38389},end:{line:1,column:38390}},loc:{start:{line:1,column:38401},end:{line:1,column:38462}},line:1},"473":{name:"(anonymous_473)",decl:{start:{line:1,column:38414},end:{line:1,column:38415}},loc:{start:{line:1,column:38417},end:{line:1,column:38439}},line:1},"474":{name:"(anonymous_474)",decl:{start:{line:1,column:38462},end:{line:1,column:38463}},loc:{start:{line:1,column:38480},end:{line:1,column:38559}},line:1},"475":{name:"(anonymous_475)",decl:{start:{line:1,column:38520},end:{line:1,column:38521}},loc:{start:{line:1,column:38523},end:{line:1,column:38555}},line:1},"476":{name:"(anonymous_476)",decl:{start:{line:1,column:38559},end:{line:1,column:38560}},loc:{start:{line:1,column:38576},end:{line:1,column:38764}},line:1},"477":{name:"(anonymous_477)",decl:{start:{line:1,column:38781},end:{line:1,column:38782}},loc:{start:{line:1,column:38792},end:{line:1,column:38810}},line:1},"478":{name:"(anonymous_478)",decl:{start:{line:1,column:38902},end:{line:1,column:38903}},loc:{start:{line:1,column:38906},end:{line:1,column:39199}},line:1},"479":{name:"(anonymous_479)",decl:{start:{line:1,column:38915},end:{line:1,column:38916}},loc:{start:{line:1,column:38935},end:{line:1,column:39079}},line:1},"480":{name:"(anonymous_480)",decl:{start:{line:1,column:39096},end:{line:1,column:39097}},loc:{start:{line:1,column:39107},end:{line:1,column:39125}},line:1}},branchMap:{"0":{loc:{start:{line:1,column:711},end:{line:1,column:715}},type:"binary-expr",locations:[{start:{line:1,column:711},end:{line:1,column:712}},{start:{line:1,column:714},end:{line:1,column:715}}],line:1},"1":{loc:{start:{line:1,column:854},end:{line:1,column:865}},type:"binary-expr",locations:[{start:{line:1,column:854},end:{line:1,column:855}},{start:{line:1,column:858},end:{line:1,column:864}}],line:1},"2":{loc:{start:{line:1,column:867},end:{line:1,column:871}},type:"binary-expr",locations:[{start:{line:1,column:867},end:{line:1,column:868}},{start:{line:1,column:870},end:{line:1,column:871}}],line:1},"3":{loc:{start:{line:1,column:1015},end:{line:1,column:1042}},type:"cond-expr",locations:[{start:{line:1,column:1020},end:{line:1,column:1039}},{start:{line:1,column:1040},end:{line:1,column:1042}}],line:1},"4":{loc:{start:{line:1,column:1217},end:{line:1,column:1275}},type:"binary-expr",locations:[{start:{line:1,column:1217},end:{line:1,column:1244}},{start:{line:1,column:1247},end:{line:1,column:1274}}],line:1},"5":{loc:{start:{line:1,column:1296},end:{line:1,column:1301}},type:"binary-expr",locations:[{start:{line:1,column:1296},end:{line:1,column:1297}},{start:{line:1,column:1299},end:{line:1,column:1301}}],line:1},"6":{loc:{start:{line:1,column:1346},end:{line:1,column:1429}},type:"binary-expr",locations:[{start:{line:1,column:1347},end:{line:1,column:1369}},{start:{line:1,column:1371},end:{line:1,column:1392}},{start:{line:1,column:1394},end:{line:1,column:1410}},{start:{line:1,column:1413},end:{line:1,column:1429}}],line:1},"7":{loc:{start:{line:1,column:1507},end:{line:1,column:1546}},type:"binary-expr",locations:[{start:{line:1,column:1507},end:{line:1,column:1528}},{start:{line:1,column:1530},end:{line:1,column:1546}}],line:1},"8":{loc:{start:{line:1,column:1587},end:{line:1,column:1591}},type:"binary-expr",locations:[{start:{line:1,column:1587},end:{line:1,column:1588}},{start:{line:1,column:1590},end:{line:1,column:1591}}],line:1},"9":{loc:{start:{line:1,column:1937},end:{line:1,column:2177}},type:"binary-expr",locations:[{start:{line:1,column:1937},end:{line:1,column:1940}},{start:{line:1,column:1942},end:{line:1,column:2177}}],line:1},"10":{loc:{start:{line:1,column:2251},end:{line:1,column:2269}},type:"binary-expr",locations:[{start:{line:1,column:2251},end:{line:1,column:2258}},{start:{line:1,column:2260},end:{line:1,column:2269}}],line:1},"11":{loc:{start:{line:1,column:2292},end:{line:1,column:2379}},type:"cond-expr",locations:[{start:{line:1,column:2300},end:{line:1,column:2304}},{start:{line:1,column:2305},end:{line:1,column:2379}}],line:1},"12":{loc:{start:{line:1,column:2305},end:{line:1,column:2379}},type:"cond-expr",locations:[{start:{line:1,column:2342},end:{line:1,column:2350}},{start:{line:1,column:2351},end:{line:1,column:2379}}],line:1},"13":{loc:{start:{line:1,column:2305},end:{line:1,column:2341}},type:"binary-expr",locations:[{start:{line:1,column:2305},end:{line:1,column:2321}},{start:{line:1,column:2323},end:{line:1,column:2341}}],line:1},"14":{loc:{start:{line:1,column:2351},end:{line:1,column:2379}},type:"cond-expr",locations:[{start:{line:1,column:2368},end:{line:1,column:2374}},{start:{line:1,column:2375},end:{line:1,column:2379}}],line:1},"15":{loc:{start:{line:1,column:2997},end:{line:1,column:3035}},type:"if",locations:[{start:{line:1,column:2997},end:{line:1,column:3035}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"16":{loc:{start:{line:1,column:3000},end:{line:1,column:3022}},type:"binary-expr",locations:[{start:{line:1,column:3000},end:{line:1,column:3013}},{start:{line:1,column:3015},end:{line:1,column:3022}}],line:1},"17":{loc:{start:{line:1,column:3067},end:{line:1,column:3115}},type:"cond-expr",locations:[{start:{line:1,column:3082},end:{line:1,column:3110}},{start:{line:1,column:3111},end:{line:1,column:3115}}],line:1},"18":{loc:{start:{line:1,column:3067},end:{line:1,column:3081}},type:"binary-expr",locations:[{start:{line:1,column:3067},end:{line:1,column:3076}},{start:{line:1,column:3078},end:{line:1,column:3081}}],line:1},"19":{loc:{start:{line:1,column:3143},end:{line:1,column:3181}},type:"if",locations:[{start:{line:1,column:3143},end:{line:1,column:3181}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"20":{loc:{start:{line:1,column:3146},end:{line:1,column:3168}},type:"binary-expr",locations:[{start:{line:1,column:3146},end:{line:1,column:3159}},{start:{line:1,column:3161},end:{line:1,column:3168}}],line:1},"21":{loc:{start:{line:1,column:3213},end:{line:1,column:3261}},type:"cond-expr",locations:[{start:{line:1,column:3228},end:{line:1,column:3256}},{start:{line:1,column:3257},end:{line:1,column:3261}}],line:1},"22":{loc:{start:{line:1,column:3213},end:{line:1,column:3227}},type:"binary-expr",locations:[{start:{line:1,column:3213},end:{line:1,column:3222}},{start:{line:1,column:3224},end:{line:1,column:3227}}],line:1},"23":{loc:{start:{line:1,column:3285},end:{line:1,column:3315}},type:"cond-expr",locations:[{start:{line:1,column:3297},end:{line:1,column:3310}},{start:{line:1,column:3311},end:{line:1,column:3315}}],line:1},"24":{loc:{start:{line:1,column:3338},end:{line:1,column:3369}},type:"cond-expr",locations:[{start:{line:1,column:3351},end:{line:1,column:3355}},{start:{line:1,column:3356},end:{line:1,column:3369}}],line:1},"25":{loc:{start:{line:1,column:3392},end:{line:1,column:3437}},type:"cond-expr",locations:[{start:{line:1,column:3422},end:{line:1,column:3426}},{start:{line:1,column:3427},end:{line:1,column:3437}}],line:1},"26":{loc:{start:{line:1,column:3392},end:{line:1,column:3421}},type:"binary-expr",locations:[{start:{line:1,column:3392},end:{line:1,column:3403}},{start:{line:1,column:3405},end:{line:1,column:3421}}],line:1},"27":{loc:{start:{line:1,column:3470},end:{line:1,column:3498}},type:"binary-expr",locations:[{start:{line:1,column:3470},end:{line:1,column:3485}},{start:{line:1,column:3487},end:{line:1,column:3498}}],line:1},"28":{loc:{start:{line:1,column:3506},end:{line:1,column:3581}},type:"cond-expr",locations:[{start:{line:1,column:3522},end:{line:1,column:3526}},{start:{line:1,column:3527},end:{line:1,column:3581}}],line:1},"29":{loc:{start:{line:1,column:3506},end:{line:1,column:3521}},type:"binary-expr",locations:[{start:{line:1,column:3506},end:{line:1,column:3514}},{start:{line:1,column:3516},end:{line:1,column:3521}}],line:1},"30":{loc:{start:{line:1,column:3527},end:{line:1,column:3581}},type:"cond-expr",locations:[{start:{line:1,column:3531},end:{line:1,column:3576}},{start:{line:1,column:3577},end:{line:1,column:3581}}],line:1},"31":{loc:{start:{line:1,column:3615},end:{line:1,column:3643}},type:"binary-expr",locations:[{start:{line:1,column:3615},end:{line:1,column:3630}},{start:{line:1,column:3632},end:{line:1,column:3643}}],line:1},"32":{loc:{start:{line:1,column:3651},end:{line:1,column:3715}},type:"cond-expr",locations:[{start:{line:1,column:3665},end:{line:1,column:3710}},{start:{line:1,column:3711},end:{line:1,column:3715}}],line:1},"33":{loc:{start:{line:1,column:3651},end:{line:1,column:3664}},type:"binary-expr",locations:[{start:{line:1,column:3651},end:{line:1,column:3659}},{start:{line:1,column:3661},end:{line:1,column:3664}}],line:1},"34":{loc:{start:{line:1,column:3732},end:{line:1,column:3747}},type:"if",locations:[{start:{line:1,column:3732},end:{line:1,column:3747}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"35":{loc:{start:{line:1,column:3762},end:{line:1,column:3894}},type:"cond-expr",locations:[{start:{line:1,column:3782},end:{line:1,column:3872}},{start:{line:1,column:3875},end:{line:1,column:3893}}],line:1},"36":{loc:{start:{line:1,column:3787},end:{line:1,column:3814}},type:"binary-expr",locations:[{start:{line:1,column:3787},end:{line:1,column:3804}},{start:{line:1,column:3807},end:{line:1,column:3813}}],line:1},"37":{loc:{start:{line:1,column:3820},end:{line:1,column:3856}},type:"binary-expr",locations:[{start:{line:1,column:3820},end:{line:1,column:3846}},{start:{line:1,column:3849},end:{line:1,column:3855}}],line:1},"38":{loc:{start:{line:1,column:3899},end:{line:1,column:3926}},type:"if",locations:[{start:{line:1,column:3899},end:{line:1,column:3926}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"39":{loc:{start:{line:1,column:3947},end:{line:1,column:4005}},type:"cond-expr",locations:[{start:{line:1,column:3957},end:{line:1,column:3961}},{start:{line:1,column:3962},end:{line:1,column:4005}}],line:1},"40":{loc:{start:{line:1,column:4085},end:{line:1,column:4098}},type:"cond-expr",locations:[{start:{line:1,column:4091},end:{line:1,column:4096}},{start:{line:1,column:4097},end:{line:1,column:4098}}],line:1},"41":{loc:{start:{line:1,column:4146},end:{line:1,column:4168}},type:"cond-expr",locations:[{start:{line:1,column:4154},end:{line:1,column:4166}},{start:{line:1,column:4167},end:{line:1,column:4168}}],line:1},"42":{loc:{start:{line:1,column:4171},end:{line:1,column:4203}},type:"cond-expr",locations:[{start:{line:1,column:4197},end:{line:1,column:4201}},{start:{line:1,column:4202},end:{line:1,column:4203}}],line:1},"43":{loc:{start:{line:1,column:4307},end:{line:1,column:4331}},type:"cond-expr",locations:[{start:{line:1,column:4313},end:{line:1,column:4314}},{start:{line:1,column:4315},end:{line:1,column:4331}}],line:1},"44":{loc:{start:{line:1,column:4348},end:{line:1,column:4366}},type:"if",locations:[{start:{line:1,column:4348},end:{line:1,column:4366}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"45":{loc:{start:{line:1,column:4392},end:{line:1,column:4440}},type:"cond-expr",locations:[{start:{line:1,column:4404},end:{line:1,column:4408}},{start:{line:1,column:4409},end:{line:1,column:4440}}],line:1},"46":{loc:{start:{line:1,column:4463},end:{line:1,column:4485}},type:"cond-expr",locations:[{start:{line:1,column:4471},end:{line:1,column:4480}},{start:{line:1,column:4481},end:{line:1,column:4485}}],line:1},"47":{loc:{start:{line:1,column:4501},end:{line:1,column:4519}},type:"if",locations:[{start:{line:1,column:4501},end:{line:1,column:4519}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"48":{loc:{start:{line:1,column:4545},end:{line:1,column:4622}},type:"cond-expr",locations:[{start:{line:1,column:4557},end:{line:1,column:4561}},{start:{line:1,column:4562},end:{line:1,column:4622}}],line:1},"49":{loc:{start:{line:1,column:4645},end:{line:1,column:4667}},type:"cond-expr",locations:[{start:{line:1,column:4653},end:{line:1,column:4662}},{start:{line:1,column:4663},end:{line:1,column:4667}}],line:1},"50":{loc:{start:{line:1,column:4692},end:{line:1,column:4736}},type:"cond-expr",locations:[{start:{line:1,column:4701},end:{line:1,column:4704}},{start:{line:1,column:4705},end:{line:1,column:4736}}],line:1},"51":{loc:{start:{line:1,column:4705},end:{line:1,column:4736}},type:"cond-expr",locations:[{start:{line:1,column:4722},end:{line:1,column:4730}},{start:{line:1,column:4731},end:{line:1,column:4736}}],line:1},"52":{loc:{start:{line:1,column:4842},end:{line:1,column:4869}},type:"cond-expr",locations:[{start:{line:1,column:4844},end:{line:1,column:4866}},{start:{line:1,column:4867},end:{line:1,column:4869}}],line:1},"53":{loc:{start:{line:1,column:4844},end:{line:1,column:4866}},type:"cond-expr",locations:[{start:{line:1,column:4861},end:{line:1,column:4862}},{start:{line:1,column:4863},end:{line:1,column:4866}}],line:1},"54":{loc:{start:{line:1,column:4893},end:{line:1,column:4929}},type:"cond-expr",locations:[{start:{line:1,column:4910},end:{line:1,column:4923}},{start:{line:1,column:4924},end:{line:1,column:4929}}],line:1},"55":{loc:{start:{line:1,column:4984},end:{line:1,column:5001}},type:"binary-expr",locations:[{start:{line:1,column:4984},end:{line:1,column:4990}},{start:{line:1,column:4992},end:{line:1,column:5001}}],line:1},"56":{loc:{start:{line:1,column:5086},end:{line:1,column:5122}},type:"cond-expr",locations:[{start:{line:1,column:5099},end:{line:1,column:5117}},{start:{line:1,column:5118},end:{line:1,column:5122}}],line:1},"57":{loc:{start:{line:1,column:5142},end:{line:1,column:5178}},type:"cond-expr",locations:[{start:{line:1,column:5155},end:{line:1,column:5173}},{start:{line:1,column:5174},end:{line:1,column:5178}}],line:1},"58":{loc:{start:{line:1,column:5200},end:{line:1,column:5238}},type:"cond-expr",locations:[{start:{line:1,column:5213},end:{line:1,column:5233}},{start:{line:1,column:5234},end:{line:1,column:5238}}],line:1},"59":{loc:{start:{line:1,column:5260},end:{line:1,column:5298}},type:"cond-expr",locations:[{start:{line:1,column:5273},end:{line:1,column:5293}},{start:{line:1,column:5294},end:{line:1,column:5298}}],line:1},"60":{loc:{start:{line:1,column:5321},end:{line:1,column:5360}},type:"cond-expr",locations:[{start:{line:1,column:5334},end:{line:1,column:5355}},{start:{line:1,column:5356},end:{line:1,column:5360}}],line:1},"61":{loc:{start:{line:1,column:5382},end:{line:1,column:5420}},type:"cond-expr",locations:[{start:{line:1,column:5395},end:{line:1,column:5415}},{start:{line:1,column:5416},end:{line:1,column:5420}}],line:1},"62":{loc:{start:{line:1,column:5441},end:{line:1,column:5478}},type:"cond-expr",locations:[{start:{line:1,column:5454},end:{line:1,column:5473}},{start:{line:1,column:5474},end:{line:1,column:5478}}],line:1},"63":{loc:{start:{line:1,column:5501},end:{line:1,column:5540}},type:"cond-expr",locations:[{start:{line:1,column:5514},end:{line:1,column:5535}},{start:{line:1,column:5536},end:{line:1,column:5540}}],line:1},"64":{loc:{start:{line:1,column:5560},end:{line:1,column:5596}},type:"cond-expr",locations:[{start:{line:1,column:5573},end:{line:1,column:5591}},{start:{line:1,column:5592},end:{line:1,column:5596}}],line:1},"65":{loc:{start:{line:1,column:5618},end:{line:1,column:5656}},type:"cond-expr",locations:[{start:{line:1,column:5631},end:{line:1,column:5651}},{start:{line:1,column:5652},end:{line:1,column:5656}}],line:1},"66":{loc:{start:{line:1,column:5677},end:{line:1,column:5714}},type:"cond-expr",locations:[{start:{line:1,column:5690},end:{line:1,column:5709}},{start:{line:1,column:5710},end:{line:1,column:5714}}],line:1},"67":{loc:{start:{line:1,column:5738},end:{line:1,column:5778}},type:"cond-expr",locations:[{start:{line:1,column:5751},end:{line:1,column:5773}},{start:{line:1,column:5774},end:{line:1,column:5778}}],line:1},"68":{loc:{start:{line:1,column:5806},end:{line:1,column:5850}},type:"cond-expr",locations:[{start:{line:1,column:5819},end:{line:1,column:5845}},{start:{line:1,column:5846},end:{line:1,column:5850}}],line:1},"69":{loc:{start:{line:1,column:5877},end:{line:1,column:5920}},type:"cond-expr",locations:[{start:{line:1,column:5890},end:{line:1,column:5915}},{start:{line:1,column:5916},end:{line:1,column:5920}}],line:1},"70":{loc:{start:{line:1,column:6070},end:{line:1,column:6075}},type:"binary-expr",locations:[{start:{line:1,column:6070},end:{line:1,column:6071}},{start:{line:1,column:6073},end:{line:1,column:6075}}],line:1},"71":{loc:{start:{line:1,column:6174},end:{line:1,column:6179}},type:"binary-expr",locations:[{start:{line:1,column:6174},end:{line:1,column:6175}},{start:{line:1,column:6177},end:{line:1,column:6179}}],line:1},"72":{loc:{start:{line:1,column:6263},end:{line:1,column:6294}},type:"binary-expr",locations:[{start:{line:1,column:6263},end:{line:1,column:6288}},{start:{line:1,column:6290},end:{line:1,column:6294}}],line:1},"73":{loc:{start:{line:1,column:6323},end:{line:1,column:6359}},type:"binary-expr",locations:[{start:{line:1,column:6323},end:{line:1,column:6353}},{start:{line:1,column:6355},end:{line:1,column:6359}}],line:1},"74":{loc:{start:{line:1,column:6541},end:{line:1,column:6549}},type:"default-arg",locations:[{start:{line:1,column:6543},end:{line:1,column:6549}}],line:1},"75":{loc:{start:{line:1,column:6595},end:{line:1,column:6637}},type:"cond-expr",locations:[{start:{line:1,column:6608},end:{line:1,column:6634}},{start:{line:1,column:6635},end:{line:1,column:6637}}],line:1},"76":{loc:{start:{line:1,column:6659},end:{line:1,column:6703}},type:"cond-expr",locations:[{start:{line:1,column:6672},end:{line:1,column:6698}},{start:{line:1,column:6699},end:{line:1,column:6703}}],line:1},"77":{loc:{start:{line:1,column:7508},end:{line:1,column:7512}},type:"binary-expr",locations:[{start:{line:1,column:7508},end:{line:1,column:7509}},{start:{line:1,column:7511},end:{line:1,column:7512}}],line:1},"78":{loc:{start:{line:1,column:7667},end:{line:1,column:7854}},type:"binary-expr",locations:[{start:{line:1,column:7667},end:{line:1,column:7670}},{start:{line:1,column:7672},end:{line:1,column:7854}}],line:1},"79":{loc:{start:{line:1,column:7989},end:{line:1,column:7993}},type:"binary-expr",locations:[{start:{line:1,column:7989},end:{line:1,column:7990}},{start:{line:1,column:7992},end:{line:1,column:7993}}],line:1},"80":{loc:{start:{line:1,column:8236},end:{line:1,column:8453}},type:"binary-expr",locations:[{start:{line:1,column:8236},end:{line:1,column:8239}},{start:{line:1,column:8241},end:{line:1,column:8453}}],line:1},"81":{loc:{start:{line:1,column:9060},end:{line:1,column:9087}},type:"binary-expr",locations:[{start:{line:1,column:9061},end:{line:1,column:9080}},{start:{line:1,column:9083},end:{line:1,column:9087}}],line:1},"82":{loc:{start:{line:1,column:9061},end:{line:1,column:9080}},type:"cond-expr",locations:[{start:{line:1,column:9066},end:{line:1,column:9078}},{start:{line:1,column:9079},end:{line:1,column:9080}}],line:1},"83":{loc:{start:{line:1,column:9110},end:{line:1,column:9140}},type:"cond-expr",locations:[{start:{line:1,column:9127},end:{line:1,column:9132}},{start:{line:1,column:9133},end:{line:1,column:9140}}],line:1},"84":{loc:{start:{line:1,column:9133},end:{line:1,column:9140}},type:"binary-expr",locations:[{start:{line:1,column:9133},end:{line:1,column:9134}},{start:{line:1,column:9136},end:{line:1,column:9140}}],line:1},"85":{loc:{start:{line:1,column:9164},end:{line:1,column:9196}},type:"binary-expr",locations:[{start:{line:1,column:9165},end:{line:1,column:9189}},{start:{line:1,column:9192},end:{line:1,column:9196}}],line:1},"86":{loc:{start:{line:1,column:9165},end:{line:1,column:9189}},type:"cond-expr",locations:[{start:{line:1,column:9170},end:{line:1,column:9187}},{start:{line:1,column:9188},end:{line:1,column:9189}}],line:1},"87":{loc:{start:{line:1,column:9219},end:{line:1,column:9249}},type:"cond-expr",locations:[{start:{line:1,column:9236},end:{line:1,column:9241}},{start:{line:1,column:9242},end:{line:1,column:9249}}],line:1},"88":{loc:{start:{line:1,column:9242},end:{line:1,column:9249}},type:"binary-expr",locations:[{start:{line:1,column:9242},end:{line:1,column:9243}},{start:{line:1,column:9245},end:{line:1,column:9249}}],line:1},"89":{loc:{start:{line:1,column:9271},end:{line:1,column:9317}},type:"binary-expr",locations:[{start:{line:1,column:9271},end:{line:1,column:9278}},{start:{line:1,column:9280},end:{line:1,column:9297}},{start:{line:1,column:9299},end:{line:1,column:9317}}],line:1},"90":{loc:{start:{line:1,column:9354},end:{line:1,column:9406}},type:"if",locations:[{start:{line:1,column:9354},end:{line:1,column:9406}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"91":{loc:{start:{line:1,column:9359},end:{line:1,column:9377}},type:"cond-expr",locations:[{start:{line:1,column:9361},end:{line:1,column:9375}},{start:{line:1,column:9376},end:{line:1,column:9377}}],line:1},"92":{loc:{start:{line:1,column:9406},end:{line:1,column:9435}},type:"if",locations:[{start:{line:1,column:9406},end:{line:1,column:9435}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"93":{loc:{start:{line:1,column:9479},end:{line:1,column:9516}},type:"if",locations:[{start:{line:1,column:9479},end:{line:1,column:9516}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"94":{loc:{start:{line:1,column:10958},end:{line:1,column:11029}},type:"cond-expr",locations:[{start:{line:1,column:10973},end:{line:1,column:10987}},{start:{line:1,column:10988},end:{line:1,column:11029}}],line:1},"95":{loc:{start:{line:1,column:10988},end:{line:1,column:11029}},type:"cond-expr",locations:[{start:{line:1,column:11000},end:{line:1,column:11020}},{start:{line:1,column:11021},end:{line:1,column:11029}}],line:1},"96":{loc:{start:{line:1,column:11620},end:{line:1,column:11624}},type:"default-arg",locations:[{start:{line:1,column:11622},end:{line:1,column:11624}}],line:1},"97":{loc:{start:{line:1,column:11672},end:{line:1,column:11693}},type:"binary-expr",locations:[{start:{line:1,column:11672},end:{line:1,column:11687}},{start:{line:1,column:11689},end:{line:1,column:11693}}],line:1},"98":{loc:{start:{line:1,column:11694},end:{line:1,column:11763}},type:"binary-expr",locations:[{start:{line:1,column:11694},end:{line:1,column:11704}},{start:{line:1,column:11706},end:{line:1,column:11763}}],line:1},"99":{loc:{start:{line:1,column:11764},end:{line:1,column:11815}},type:"binary-expr",locations:[{start:{line:1,column:11764},end:{line:1,column:11765}},{start:{line:1,column:11767},end:{line:1,column:11783}},{start:{line:1,column:11785},end:{line:1,column:11815}}],line:1},"100":{loc:{start:{line:1,column:11831},end:{line:1,column:11835}},type:"default-arg",locations:[{start:{line:1,column:11833},end:{line:1,column:11835}}],line:1},"101":{loc:{start:{line:1,column:11970},end:{line:1,column:11974}},type:"default-arg",locations:[{start:{line:1,column:11972},end:{line:1,column:11974}}],line:1},"102":{loc:{start:{line:1,column:12112},end:{line:1,column:12116}},type:"default-arg",locations:[{start:{line:1,column:12114},end:{line:1,column:12116}}],line:1},"103":{loc:{start:{line:1,column:12188},end:{line:1,column:12209}},type:"binary-expr",locations:[{start:{line:1,column:12188},end:{line:1,column:12203}},{start:{line:1,column:12205},end:{line:1,column:12209}}],line:1},"104":{loc:{start:{line:1,column:12306},end:{line:1,column:12351}},type:"binary-expr",locations:[{start:{line:1,column:12306},end:{line:1,column:12316}},{start:{line:1,column:12318},end:{line:1,column:12351}}],line:1},"105":{loc:{start:{line:1,column:12352},end:{line:1,column:12403}},type:"binary-expr",locations:[{start:{line:1,column:12352},end:{line:1,column:12353}},{start:{line:1,column:12355},end:{line:1,column:12371}},{start:{line:1,column:12373},end:{line:1,column:12403}}],line:1},"106":{loc:{start:{line:1,column:12416},end:{line:1,column:12420}},type:"default-arg",locations:[{start:{line:1,column:12418},end:{line:1,column:12420}}],line:1},"107":{loc:{start:{line:1,column:12470},end:{line:1,column:12491}},type:"binary-expr",locations:[{start:{line:1,column:12470},end:{line:1,column:12485}},{start:{line:1,column:12487},end:{line:1,column:12491}}],line:1},"108":{loc:{start:{line:1,column:12492},end:{line:1,column:12559}},type:"binary-expr",locations:[{start:{line:1,column:12492},end:{line:1,column:12502}},{start:{line:1,column:12504},end:{line:1,column:12559}}],line:1},"109":{loc:{start:{line:1,column:12560},end:{line:1,column:12611}},type:"binary-expr",locations:[{start:{line:1,column:12560},end:{line:1,column:12561}},{start:{line:1,column:12563},end:{line:1,column:12579}},{start:{line:1,column:12581},end:{line:1,column:12611}}],line:1},"110":{loc:{start:{line:1,column:12627},end:{line:1,column:12631}},type:"default-arg",locations:[{start:{line:1,column:12629},end:{line:1,column:12631}}],line:1},"111":{loc:{start:{line:1,column:12703},end:{line:1,column:12724}},type:"binary-expr",locations:[{start:{line:1,column:12703},end:{line:1,column:12718}},{start:{line:1,column:12720},end:{line:1,column:12724}}],line:1},"112":{loc:{start:{line:1,column:12804},end:{line:1,column:12850}},type:"binary-expr",locations:[{start:{line:1,column:12804},end:{line:1,column:12814}},{start:{line:1,column:12816},end:{line:1,column:12850}}],line:1},"113":{loc:{start:{line:1,column:12851},end:{line:1,column:12902}},type:"binary-expr",locations:[{start:{line:1,column:12851},end:{line:1,column:12852}},{start:{line:1,column:12854},end:{line:1,column:12870}},{start:{line:1,column:12872},end:{line:1,column:12902}}],line:1},"114":{loc:{start:{line:1,column:12917},end:{line:1,column:12921}},type:"default-arg",locations:[{start:{line:1,column:12919},end:{line:1,column:12921}}],line:1},"115":{loc:{start:{line:1,column:12943},end:{line:1,column:12964}},type:"binary-expr",locations:[{start:{line:1,column:12943},end:{line:1,column:12958}},{start:{line:1,column:12960},end:{line:1,column:12964}}],line:1},"116":{loc:{start:{line:1,column:12965},end:{line:1,column:13061}},type:"binary-expr",locations:[{start:{line:1,column:12965},end:{line:1,column:12981}},{start:{line:1,column:12984},end:{line:1,column:13060}}],line:1},"117":{loc:{start:{line:1,column:13062},end:{line:1,column:13131}},type:"binary-expr",locations:[{start:{line:1,column:13062},end:{line:1,column:13072}},{start:{line:1,column:13074},end:{line:1,column:13131}}],line:1},"118":{loc:{start:{line:1,column:13140},end:{line:1,column:13144}},type:"default-arg",locations:[{start:{line:1,column:13142},end:{line:1,column:13144}}],line:1},"119":{loc:{start:{line:1,column:13306},end:{line:1,column:13327}},type:"binary-expr",locations:[{start:{line:1,column:13306},end:{line:1,column:13321}},{start:{line:1,column:13323},end:{line:1,column:13327}}],line:1},"120":{loc:{start:{line:1,column:13328},end:{line:1,column:13498}},type:"binary-expr",locations:[{start:{line:1,column:13328},end:{line:1,column:13344}},{start:{line:1,column:13347},end:{line:1,column:13497}}],line:1},"121":{loc:{start:{line:1,column:13608},end:{line:1,column:13612}},type:"default-arg",locations:[{start:{line:1,column:13610},end:{line:1,column:13612}}],line:1},"122":{loc:{start:{line:1,column:13919},end:{line:1,column:14064}},type:"binary-expr",locations:[{start:{line:1,column:13919},end:{line:1,column:13929}},{start:{line:1,column:13932},end:{line:1,column:14063}}],line:1},"123":{loc:{start:{line:1,column:13972},end:{line:1,column:14028}},type:"binary-expr",locations:[{start:{line:1,column:13972},end:{line:1,column:13991}},{start:{line:1,column:13993},end:{line:1,column:14028}}],line:1},"124":{loc:{start:{line:1,column:14148},end:{line:1,column:14152}},type:"default-arg",locations:[{start:{line:1,column:14150},end:{line:1,column:14152}}],line:1},"125":{loc:{start:{line:1,column:14154},end:{line:1,column:14401}},type:"if",locations:[{start:{line:1,column:14154},end:{line:1,column:14401}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"126":{loc:{start:{line:1,column:14326},end:{line:1,column:14400}},type:"binary-expr",locations:[{start:{line:1,column:14327},end:{line:1,column:14342}},{start:{line:1,column:14344},end:{line:1,column:14359}},{start:{line:1,column:14362},end:{line:1,column:14400}}],line:1},"127":{loc:{start:{line:1,column:14407},end:{line:1,column:14428}},type:"binary-expr",locations:[{start:{line:1,column:14407},end:{line:1,column:14422}},{start:{line:1,column:14424},end:{line:1,column:14428}}],line:1},"128":{loc:{start:{line:1,column:14429},end:{line:1,column:14599}},type:"binary-expr",locations:[{start:{line:1,column:14429},end:{line:1,column:14445}},{start:{line:1,column:14448},end:{line:1,column:14598}}],line:1},"129":{loc:{start:{line:1,column:14600},end:{line:1,column:14678}},type:"binary-expr",locations:[{start:{line:1,column:14600},end:{line:1,column:14610}},{start:{line:1,column:14612},end:{line:1,column:14678}}],line:1},"130":{loc:{start:{line:1,column:14699},end:{line:1,column:14715}},type:"default-arg",locations:[{start:{line:1,column:14701},end:{line:1,column:14715}}],line:1},"131":{loc:{start:{line:1,column:14862},end:{line:1,column:14893}},type:"cond-expr",locations:[{start:{line:1,column:14890},end:{line:1,column:14891}},{start:{line:1,column:14892},end:{line:1,column:14893}}],line:1},"132":{loc:{start:{line:1,column:14917},end:{line:1,column:14957}},type:"cond-expr",locations:[{start:{line:1,column:14932},end:{line:1,column:14952}},{start:{line:1,column:14953},end:{line:1,column:14957}}],line:1},"133":{loc:{start:{line:1,column:14982},end:{line:1,column:15277}},type:"if",locations:[{start:{line:1,column:14982},end:{line:1,column:15277}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"134":{loc:{start:{line:1,column:15308},end:{line:1,column:15553}},type:"if",locations:[{start:{line:1,column:15308},end:{line:1,column:15553}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"135":{loc:{start:{line:1,column:15400},end:{line:1,column:15504}},type:"binary-expr",locations:[{start:{line:1,column:15401},end:{line:1,column:15445}},{start:{line:1,column:15447},end:{line:1,column:15499}},{start:{line:1,column:15502},end:{line:1,column:15504}}],line:1},"136":{loc:{start:{line:1,column:15574},end:{line:1,column:15578}},type:"default-arg",locations:[{start:{line:1,column:15576},end:{line:1,column:15578}}],line:1},"137":{loc:{start:{line:1,column:15686},end:{line:1,column:15785}},type:"cond-expr",locations:[{start:{line:1,column:15745},end:{line:1,column:15749}},{start:{line:1,column:15750},end:{line:1,column:15785}}],line:1},"138":{loc:{start:{line:1,column:15686},end:{line:1,column:15744}},type:"binary-expr",locations:[{start:{line:1,column:15686},end:{line:1,column:15693}},{start:{line:1,column:15696},end:{line:1,column:15743}}],line:1},"139":{loc:{start:{line:1,column:15696},end:{line:1,column:15730}},type:"binary-expr",locations:[{start:{line:1,column:15696},end:{line:1,column:15712}},{start:{line:1,column:15715},end:{line:1,column:15729}}],line:1},"140":{loc:{start:{line:1,column:15766},end:{line:1,column:15779}},type:"binary-expr",locations:[{start:{line:1,column:15766},end:{line:1,column:15767}},{start:{line:1,column:15769},end:{line:1,column:15779}}],line:1},"141":{loc:{start:{line:1,column:15806},end:{line:1,column:15824}},type:"cond-expr",locations:[{start:{line:1,column:15808},end:{line:1,column:15819}},{start:{line:1,column:15820},end:{line:1,column:15824}}],line:1},"142":{loc:{start:{line:1,column:15832},end:{line:1,column:15858}},type:"cond-expr",locations:[{start:{line:1,column:15842},end:{line:1,column:15853}},{start:{line:1,column:15854},end:{line:1,column:15858}}],line:1},"143":{loc:{start:{line:1,column:16024},end:{line:1,column:16063}},type:"binary-expr",locations:[{start:{line:1,column:16024},end:{line:1,column:16025}},{start:{line:1,column:16027},end:{line:1,column:16063}}],line:1},"144":{loc:{start:{line:1,column:16064},end:{line:1,column:16111}},type:"binary-expr",locations:[{start:{line:1,column:16065},end:{line:1,column:16066}},{start:{line:1,column:16068},end:{line:1,column:16069}},{start:{line:1,column:16072},end:{line:1,column:16111}}],line:1},"145":{loc:{start:{line:1,column:16112},end:{line:1,column:16167}},type:"binary-expr",locations:[{start:{line:1,column:16112},end:{line:1,column:16124}},{start:{line:1,column:16126},end:{line:1,column:16167}}],line:1},"146":{loc:{start:{line:1,column:16262},end:{line:1,column:16408}},type:"cond-expr",locations:[{start:{line:1,column:16290},end:{line:1,column:16291}},{start:{line:1,column:16292},end:{line:1,column:16408}}],line:1},"147":{loc:{start:{line:1,column:16292},end:{line:1,column:16408}},type:"cond-expr",locations:[{start:{line:1,column:16304},end:{line:1,column:16305}},{start:{line:1,column:16306},end:{line:1,column:16408}}],line:1},"148":{loc:{start:{line:1,column:16306},end:{line:1,column:16408}},type:"cond-expr",locations:[{start:{line:1,column:16372},end:{line:1,column:16373}},{start:{line:1,column:16374},end:{line:1,column:16408}}],line:1},"149":{loc:{start:{line:1,column:16306},end:{line:1,column:16371}},type:"binary-expr",locations:[{start:{line:1,column:16306},end:{line:1,column:16339}},{start:{line:1,column:16341},end:{line:1,column:16371}}],line:1},"150":{loc:{start:{line:1,column:16374},end:{line:1,column:16408}},type:"cond-expr",locations:[{start:{line:1,column:16405},end:{line:1,column:16406}},{start:{line:1,column:16407},end:{line:1,column:16408}}],line:1},"151":{loc:{start:{line:1,column:16684},end:{line:1,column:16730}},type:"binary-expr",locations:[{start:{line:1,column:16684},end:{line:1,column:16694}},{start:{line:1,column:16696},end:{line:1,column:16730}}],line:1},"152":{loc:{start:{line:1,column:16731},end:{line:1,column:16775}},type:"binary-expr",locations:[{start:{line:1,column:16731},end:{line:1,column:16732}},{start:{line:1,column:16734},end:{line:1,column:16775}}],line:1},"153":{loc:{start:{line:1,column:16791},end:{line:1,column:16795}},type:"default-arg",locations:[{start:{line:1,column:16793},end:{line:1,column:16795}}],line:1},"154":{loc:{start:{line:1,column:16880},end:{line:1,column:16925}},type:"binary-expr",locations:[{start:{line:1,column:16880},end:{line:1,column:16890}},{start:{line:1,column:16892},end:{line:1,column:16925}}],line:1},"155":{loc:{start:{line:1,column:17027},end:{line:1,column:17078}},type:"binary-expr",locations:[{start:{line:1,column:17027},end:{line:1,column:17031}},{start:{line:1,column:17033},end:{line:1,column:17049}},{start:{line:1,column:17052},end:{line:1,column:17077}}],line:1},"156":{loc:{start:{line:1,column:17107},end:{line:1,column:17167}},type:"binary-expr",locations:[{start:{line:1,column:17107},end:{line:1,column:17109}},{start:{line:1,column:17111},end:{line:1,column:17132}},{start:{line:1,column:17134},end:{line:1,column:17167}}],line:1},"157":{loc:{start:{line:1,column:17230},end:{line:1,column:17258}},type:"cond-expr",locations:[{start:{line:1,column:17247},end:{line:1,column:17256}},{start:{line:1,column:17257},end:{line:1,column:17258}}],line:1},"158":{loc:{start:{line:1,column:17360},end:{line:1,column:17388}},type:"cond-expr",locations:[{start:{line:1,column:17377},end:{line:1,column:17386}},{start:{line:1,column:17387},end:{line:1,column:17388}}],line:1},"159":{loc:{start:{line:1,column:17710},end:{line:1,column:17840}},type:"cond-expr",locations:[{start:{line:1,column:17727},end:{line:1,column:17743}},{start:{line:1,column:17745},end:{line:1,column:17839}}],line:1},"160":{loc:{start:{line:1,column:17856},end:{line:1,column:17860}},type:"default-arg",locations:[{start:{line:1,column:17858},end:{line:1,column:17860}}],line:1},"161":{loc:{start:{line:1,column:17984},end:{line:1,column:17988}},type:"default-arg",locations:[{start:{line:1,column:17986},end:{line:1,column:17988}}],line:1},"162":{loc:{start:{line:1,column:17990},end:{line:1,column:18060}},type:"binary-expr",locations:[{start:{line:1,column:17990},end:{line:1,column:18006}},{start:{line:1,column:18008},end:{line:1,column:18060}}],line:1},"163":{loc:{start:{line:1,column:18180},end:{line:1,column:18184}},type:"default-arg",locations:[{start:{line:1,column:18182},end:{line:1,column:18184}}],line:1},"164":{loc:{start:{line:1,column:18186},end:{line:1,column:18256}},type:"binary-expr",locations:[{start:{line:1,column:18186},end:{line:1,column:18202}},{start:{line:1,column:18204},end:{line:1,column:18256}}],line:1},"165":{loc:{start:{line:1,column:18281},end:{line:1,column:18309}},type:"binary-expr",locations:[{start:{line:1,column:18281},end:{line:1,column:18282}},{start:{line:1,column:18284},end:{line:1,column:18309}}],line:1},"166":{loc:{start:{line:1,column:18409},end:{line:1,column:18466}},type:"binary-expr",locations:[{start:{line:1,column:18409},end:{line:1,column:18440}},{start:{line:1,column:18442},end:{line:1,column:18466}}],line:1},"167":{loc:{start:{line:1,column:18478},end:{line:1,column:18482}},type:"default-arg",locations:[{start:{line:1,column:18480},end:{line:1,column:18482}}],line:1},"168":{loc:{start:{line:1,column:18653},end:{line:1,column:18657}},type:"default-arg",locations:[{start:{line:1,column:18655},end:{line:1,column:18657}}],line:1},"169":{loc:{start:{line:1,column:18659},end:{line:1,column:18810}},type:"binary-expr",locations:[{start:{line:1,column:18659},end:{line:1,column:18666}},{start:{line:1,column:18669},end:{line:1,column:18809}}],line:1},"170":{loc:{start:{line:1,column:18719},end:{line:1,column:18776}},type:"binary-expr",locations:[{start:{line:1,column:18719},end:{line:1,column:18720}},{start:{line:1,column:18722},end:{line:1,column:18776}}],line:1},"171":{loc:{start:{line:1,column:18817},end:{line:1,column:18821}},type:"default-arg",locations:[{start:{line:1,column:18819},end:{line:1,column:18821}}],line:1},"172":{loc:{start:{line:1,column:18822},end:{line:1,column:18826}},type:"default-arg",locations:[{start:{line:1,column:18824},end:{line:1,column:18826}}],line:1},"173":{loc:{start:{line:1,column:18863},end:{line:1,column:18874}},type:"cond-expr",locations:[{start:{line:1,column:18865},end:{line:1,column:18869}},{start:{line:1,column:18870},end:{line:1,column:18874}}],line:1},"174":{loc:{start:{line:1,column:18991},end:{line:1,column:19040}},type:"binary-expr",locations:[{start:{line:1,column:18991},end:{line:1,column:19008}},{start:{line:1,column:19010},end:{line:1,column:19040}}],line:1},"175":{loc:{start:{line:1,column:19181},end:{line:1,column:19210}},type:"cond-expr",locations:[{start:{line:1,column:19206},end:{line:1,column:19208}},{start:{line:1,column:19209},end:{line:1,column:19210}}],line:1},"176":{loc:{start:{line:1,column:19219},end:{line:1,column:19264}},type:"binary-expr",locations:[{start:{line:1,column:19219},end:{line:1,column:19220}},{start:{line:1,column:19222},end:{line:1,column:19264}}],line:1},"177":{loc:{start:{line:1,column:19346},end:{line:1,column:19355}},type:"binary-expr",locations:[{start:{line:1,column:19346},end:{line:1,column:19347}},{start:{line:1,column:19349},end:{line:1,column:19355}}],line:1},"178":{loc:{start:{line:1,column:19581},end:{line:1,column:19616}},type:"if",locations:[{start:{line:1,column:19581},end:{line:1,column:19616}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"179":{loc:{start:{line:1,column:19584},end:{line:1,column:19606}},type:"binary-expr",locations:[{start:{line:1,column:19584},end:{line:1,column:19600}},{start:{line:1,column:19602},end:{line:1,column:19606}}],line:1},"180":{loc:{start:{line:1,column:19689},end:{line:1,column:19731}},type:"binary-expr",locations:[{start:{line:1,column:19690},end:{line:1,column:19699}},{start:{line:1,column:19701},end:{line:1,column:19714}},{start:{line:1,column:19718},end:{line:1,column:19730}}],line:1},"181":{loc:{start:{line:1,column:19877},end:{line:1,column:19914}},type:"if",locations:[{start:{line:1,column:19877},end:{line:1,column:19914}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"182":{loc:{start:{line:1,column:19921},end:{line:1,column:19971}},type:"binary-expr",locations:[{start:{line:1,column:19921},end:{line:1,column:19956}},{start:{line:1,column:19958},end:{line:1,column:19971}}],line:1},"183":{loc:{start:{line:1,column:19988},end:{line:1,column:20041}},type:"cond-expr",locations:[{start:{line:1,column:20020},end:{line:1,column:20036}},{start:{line:1,column:20037},end:{line:1,column:20041}}],line:1},"184":{loc:{start:{line:1,column:20168},end:{line:1,column:20172}},type:"default-arg",locations:[{start:{line:1,column:20170},end:{line:1,column:20172}}],line:1},"185":{loc:{start:{line:1,column:20218},end:{line:1,column:20292}},type:"binary-expr",locations:[{start:{line:1,column:20219},end:{line:1,column:20229}},{start:{line:1,column:20231},end:{line:1,column:20243}},{start:{line:1,column:20246},end:{line:1,column:20292}}],line:1},"186":{loc:{start:{line:1,column:20341},end:{line:1,column:20345}},type:"default-arg",locations:[{start:{line:1,column:20343},end:{line:1,column:20345}}],line:1},"187":{loc:{start:{line:1,column:20444},end:{line:1,column:20516}},type:"binary-expr",locations:[{start:{line:1,column:20444},end:{line:1,column:20445}},{start:{line:1,column:20448},end:{line:1,column:20515}}],line:1},"188":{loc:{start:{line:1,column:20547},end:{line:1,column:20606}},type:"binary-expr",locations:[{start:{line:1,column:20547},end:{line:1,column:20574}},{start:{line:1,column:20576},end:{line:1,column:20606}}],line:1},"189":{loc:{start:{line:1,column:20626},end:{line:1,column:20801}},type:"if",locations:[{start:{line:1,column:20626},end:{line:1,column:20801}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"190":{loc:{start:{line:1,column:20831},end:{line:1,column:20927}},type:"cond-expr",locations:[{start:{line:1,column:20850},end:{line:1,column:20884}},{start:{line:1,column:20885},end:{line:1,column:20927}}],line:1},"191":{loc:{start:{line:1,column:20885},end:{line:1,column:20927}},type:"binary-expr",locations:[{start:{line:1,column:20885},end:{line:1,column:20905}},{start:{line:1,column:20907},end:{line:1,column:20927}}],line:1},"192":{loc:{start:{line:1,column:20940},end:{line:1,column:21056}},type:"cond-expr",locations:[{start:{line:1,column:20964},end:{line:1,column:21008}},{start:{line:1,column:21009},end:{line:1,column:21056}}],line:1},"193":{loc:{start:{line:1,column:21009},end:{line:1,column:21056}},type:"binary-expr",locations:[{start:{line:1,column:21009},end:{line:1,column:21029}},{start:{line:1,column:21031},end:{line:1,column:21056}}],line:1},"194":{loc:{start:{line:1,column:21168},end:{line:1,column:21499}},type:"if",locations:[{start:{line:1,column:21168},end:{line:1,column:21499}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"195":{loc:{start:{line:1,column:21181},end:{line:1,column:21332}},type:"if",locations:[{start:{line:1,column:21181},end:{line:1,column:21332}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"196":{loc:{start:{line:1,column:21216},end:{line:1,column:21331}},type:"if",locations:[{start:{line:1,column:21216},end:{line:1,column:21331}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"197":{loc:{start:{line:1,column:21219},end:{line:1,column:21247}},type:"binary-expr",locations:[{start:{line:1,column:21219},end:{line:1,column:21235}},{start:{line:1,column:21237},end:{line:1,column:21247}}],line:1},"198":{loc:{start:{line:1,column:21284},end:{line:1,column:21330}},type:"binary-expr",locations:[{start:{line:1,column:21284},end:{line:1,column:21303}},{start:{line:1,column:21306},end:{line:1,column:21329}}],line:1},"199":{loc:{start:{line:1,column:21332},end:{line:1,column:21498}},type:"if",locations:[{start:{line:1,column:21332},end:{line:1,column:21498}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"200":{loc:{start:{line:1,column:21372},end:{line:1,column:21497}},type:"if",locations:[{start:{line:1,column:21372},end:{line:1,column:21497}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"201":{loc:{start:{line:1,column:21375},end:{line:1,column:21403}},type:"binary-expr",locations:[{start:{line:1,column:21375},end:{line:1,column:21391}},{start:{line:1,column:21393},end:{line:1,column:21403}}],line:1},"202":{loc:{start:{line:1,column:21445},end:{line:1,column:21496}},type:"binary-expr",locations:[{start:{line:1,column:21445},end:{line:1,column:21464}},{start:{line:1,column:21467},end:{line:1,column:21495}}],line:1},"203":{loc:{start:{line:1,column:21681},end:{line:1,column:21711}},type:"binary-expr",locations:[{start:{line:1,column:21681},end:{line:1,column:21702}},{start:{line:1,column:21704},end:{line:1,column:21711}}],line:1},"204":{loc:{start:{line:1,column:21791},end:{line:1,column:21837}},type:"binary-expr",locations:[{start:{line:1,column:21791},end:{line:1,column:21810}},{start:{line:1,column:21812},end:{line:1,column:21828}},{start:{line:1,column:21830},end:{line:1,column:21837}}],line:1},"205":{loc:{start:{line:1,column:21838},end:{line:1,column:21878}},type:"binary-expr",locations:[{start:{line:1,column:21838},end:{line:1,column:21859}},{start:{line:1,column:21861},end:{line:1,column:21878}}],line:1},"206":{loc:{start:{line:1,column:21898},end:{line:1,column:21930}},type:"binary-expr",locations:[{start:{line:1,column:21898},end:{line:1,column:21913}},{start:{line:1,column:21915},end:{line:1,column:21930}}],line:1},"207":{loc:{start:{line:1,column:22104},end:{line:1,column:22129}},type:"binary-expr",locations:[{start:{line:1,column:22104},end:{line:1,column:22105}},{start:{line:1,column:22107},end:{line:1,column:22129}}],line:1},"208":{loc:{start:{line:1,column:22287},end:{line:1,column:22326}},type:"if",locations:[{start:{line:1,column:22287},end:{line:1,column:22326}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"209":{loc:{start:{line:1,column:22347},end:{line:1,column:22396}},type:"cond-expr",locations:[{start:{line:1,column:22365},end:{line:1,column:22367}},{start:{line:1,column:22368},end:{line:1,column:22396}}],line:1},"210":{loc:{start:{line:1,column:22533},end:{line:1,column:22632}},type:"binary-expr",locations:[{start:{line:1,column:22533},end:{line:1,column:22554}},{start:{line:1,column:22556},end:{line:1,column:22572}},{start:{line:1,column:22575},end:{line:1,column:22631}}],line:1},"211":{loc:{start:{line:1,column:22652},end:{line:1,column:22670}},type:"if",locations:[{start:{line:1,column:22652},end:{line:1,column:22670}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"212":{loc:{start:{line:1,column:22718},end:{line:1,column:22754}},type:"cond-expr",locations:[{start:{line:1,column:22737},end:{line:1,column:22740}},{start:{line:1,column:22741},end:{line:1,column:22754}}],line:1},"213":{loc:{start:{line:1,column:22741},end:{line:1,column:22754}},type:"cond-expr",locations:[{start:{line:1,column:22747},end:{line:1,column:22750}},{start:{line:1,column:22751},end:{line:1,column:22754}}],line:1},"214":{loc:{start:{line:1,column:22757},end:{line:1,column:22770}},type:"binary-expr",locations:[{start:{line:1,column:22757},end:{line:1,column:22758}},{start:{line:1,column:22760},end:{line:1,column:22761}},{start:{line:1,column:22763},end:{line:1,column:22764}},{start:{line:1,column:22766},end:{line:1,column:22770}}],line:1},"215":{loc:{start:{line:1,column:22807},end:{line:1,column:22826}},type:"binary-expr",locations:[{start:{line:1,column:22807},end:{line:1,column:22811}},{start:{line:1,column:22813},end:{line:1,column:22826}}],line:1},"216":{loc:{start:{line:1,column:22863},end:{line:1,column:22882}},type:"binary-expr",locations:[{start:{line:1,column:22863},end:{line:1,column:22867}},{start:{line:1,column:22869},end:{line:1,column:22882}}],line:1},"217":{loc:{start:{line:1,column:22905},end:{line:1,column:22989}},type:"binary-expr",locations:[{start:{line:1,column:22905},end:{line:1,column:22923}},{start:{line:1,column:22925},end:{line:1,column:22933}},{start:{line:1,column:22935},end:{line:1,column:22960}},{start:{line:1,column:22962},end:{line:1,column:22973}},{start:{line:1,column:22975},end:{line:1,column:22989}}],line:1},"218":{loc:{start:{line:1,column:23087},end:{line:1,column:23093}},type:"default-arg",locations:[{start:{line:1,column:23089},end:{line:1,column:23093}}],line:1},"219":{loc:{start:{line:1,column:23270},end:{line:1,column:23371}},type:"binary-expr",locations:[{start:{line:1,column:23270},end:{line:1,column:23274}},{start:{line:1,column:23277},end:{line:1,column:23290}},{start:{line:1,column:23292},end:{line:1,column:23315}},{start:{line:1,column:23319},end:{line:1,column:23370}}],line:1},"220":{loc:{start:{line:1,column:23319},end:{line:1,column:23370}},type:"cond-expr",locations:[{start:{line:1,column:23325},end:{line:1,column:23350}},{start:{line:1,column:23351},end:{line:1,column:23370}}],line:1},"221":{loc:{start:{line:1,column:23383},end:{line:1,column:23387}},type:"default-arg",locations:[{start:{line:1,column:23385},end:{line:1,column:23387}}],line:1},"222":{loc:{start:{line:1,column:23421},end:{line:1,column:23543}},type:"binary-expr",locations:[{start:{line:1,column:23421},end:{line:1,column:23442}},{start:{line:1,column:23444},end:{line:1,column:23472}},{start:{line:1,column:23474},end:{line:1,column:23543}}],line:1},"223":{loc:{start:{line:1,column:23588},end:{line:1,column:23592}},type:"default-arg",locations:[{start:{line:1,column:23590},end:{line:1,column:23592}}],line:1},"224":{loc:{start:{line:1,column:23619},end:{line:1,column:23638}},type:"default-arg",locations:[{start:{line:1,column:23621},end:{line:1,column:23638}}],line:1},"225":{loc:{start:{line:1,column:23639},end:{line:1,column:23643}},type:"default-arg",locations:[{start:{line:1,column:23641},end:{line:1,column:23643}}],line:1},"226":{loc:{start:{line:1,column:23744},end:{line:1,column:23799}},type:"binary-expr",locations:[{start:{line:1,column:23744},end:{line:1,column:23767}},{start:{line:1,column:23770},end:{line:1,column:23798}}],line:1},"227":{loc:{start:{line:1,column:23823},end:{line:1,column:23872}},type:"binary-expr",locations:[{start:{line:1,column:23823},end:{line:1,column:23840}},{start:{line:1,column:23842},end:{line:1,column:23872}}],line:1},"228":{loc:{start:{line:1,column:24212},end:{line:1,column:24422}},type:"cond-expr",locations:[{start:{line:1,column:24343},end:{line:1,column:24418}},{start:{line:1,column:24420},end:{line:1,column:24422}}],line:1},"229":{loc:{start:{line:1,column:24212},end:{line:1,column:24341}},type:"binary-expr",locations:[{start:{line:1,column:24212},end:{line:1,column:24236}},{start:{line:1,column:24239},end:{line:1,column:24340}}],line:1},"230":{loc:{start:{line:1,column:24239},end:{line:1,column:24277}},type:"binary-expr",locations:[{start:{line:1,column:24239},end:{line:1,column:24257}},{start:{line:1,column:24259},end:{line:1,column:24277}}],line:1},"231":{loc:{start:{line:1,column:24278},end:{line:1,column:24320}},type:"binary-expr",locations:[{start:{line:1,column:24278},end:{line:1,column:24298}},{start:{line:1,column:24300},end:{line:1,column:24320}}],line:1},"232":{loc:{start:{line:1,column:24442},end:{line:1,column:24611}},type:"cond-expr",locations:[{start:{line:1,column:24449},end:{line:1,column:24578}},{start:{line:1,column:24580},end:{line:1,column:24611}}],line:1},"233":{loc:{start:{line:1,column:24487},end:{line:1,column:24578}},type:"cond-expr",locations:[{start:{line:1,column:24498},end:{line:1,column:24538}},{start:{line:1,column:24539},end:{line:1,column:24578}}],line:1},"234":{loc:{start:{line:1,column:24700},end:{line:1,column:24704}},type:"binary-expr",locations:[{start:{line:1,column:24700},end:{line:1,column:24701}},{start:{line:1,column:24703},end:{line:1,column:24704}}],line:1},"235":{loc:{start:{line:1,column:25144},end:{line:1,column:25148}},type:"default-arg",locations:[{start:{line:1,column:25146},end:{line:1,column:25148}}],line:1},"236":{loc:{start:{line:1,column:25150},end:{line:1,column:25278}},type:"cond-expr",locations:[{start:{line:1,column:25167},end:{line:1,column:25229}},{start:{line:1,column:25231},end:{line:1,column:25277}}],line:1},"237":{loc:{start:{line:1,column:25370},end:{line:1,column:25374}},type:"default-arg",locations:[{start:{line:1,column:25372},end:{line:1,column:25374}}],line:1},"238":{loc:{start:{line:1,column:25493},end:{line:1,column:25497}},type:"default-arg",locations:[{start:{line:1,column:25495},end:{line:1,column:25497}}],line:1},"239":{loc:{start:{line:1,column:25526},end:{line:1,column:25536}},type:"binary-expr",locations:[{start:{line:1,column:25526},end:{line:1,column:25529}},{start:{line:1,column:25532},end:{line:1,column:25535}}],line:1},"240":{loc:{start:{line:1,column:25537},end:{line:1,column:25607}},type:"binary-expr",locations:[{start:{line:1,column:25537},end:{line:1,column:25553}},{start:{line:1,column:25555},end:{line:1,column:25607}}],line:1},"241":{loc:{start:{line:1,column:25702},end:{line:1,column:25706}},type:"default-arg",locations:[{start:{line:1,column:25704},end:{line:1,column:25706}}],line:1},"242":{loc:{start:{line:1,column:25735},end:{line:1,column:25745}},type:"binary-expr",locations:[{start:{line:1,column:25735},end:{line:1,column:25738}},{start:{line:1,column:25741},end:{line:1,column:25744}}],line:1},"243":{loc:{start:{line:1,column:25746},end:{line:1,column:25816}},type:"binary-expr",locations:[{start:{line:1,column:25746},end:{line:1,column:25762}},{start:{line:1,column:25764},end:{line:1,column:25816}}],line:1},"244":{loc:{start:{line:1,column:25843},end:{line:1,column:25900}},type:"binary-expr",locations:[{start:{line:1,column:25843},end:{line:1,column:25844}},{start:{line:1,column:25847},end:{line:1,column:25899}}],line:1},"245":{loc:{start:{line:1,column:26033},end:{line:1,column:26037}},type:"default-arg",locations:[{start:{line:1,column:26035},end:{line:1,column:26037}}],line:1},"246":{loc:{start:{line:1,column:26190},end:{line:1,column:26194}},type:"default-arg",locations:[{start:{line:1,column:26192},end:{line:1,column:26194}}],line:1},"247":{loc:{start:{line:1,column:26196},end:{line:1,column:26330}},type:"binary-expr",locations:[{start:{line:1,column:26196},end:{line:1,column:26203}},{start:{line:1,column:26206},end:{line:1,column:26329}}],line:1},"248":{loc:{start:{line:1,column:26224},end:{line:1,column:26296}},type:"binary-expr",locations:[{start:{line:1,column:26224},end:{line:1,column:26234}},{start:{line:1,column:26236},end:{line:1,column:26296}}],line:1},"249":{loc:{start:{line:1,column:26337},end:{line:1,column:26341}},type:"default-arg",locations:[{start:{line:1,column:26339},end:{line:1,column:26341}}],line:1},"250":{loc:{start:{line:1,column:26342},end:{line:1,column:26346}},type:"default-arg",locations:[{start:{line:1,column:26344},end:{line:1,column:26346}}],line:1},"251":{loc:{start:{line:1,column:26504},end:{line:1,column:26553}},type:"binary-expr",locations:[{start:{line:1,column:26504},end:{line:1,column:26521}},{start:{line:1,column:26523},end:{line:1,column:26553}}],line:1},"252":{loc:{start:{line:1,column:26619},end:{line:1,column:26623}},type:"default-arg",locations:[{start:{line:1,column:26621},end:{line:1,column:26623}}],line:1},"253":{loc:{start:{line:1,column:26625},end:{line:1,column:26788}},type:"binary-expr",locations:[{start:{line:1,column:26625},end:{line:1,column:26647}},{start:{line:1,column:26650},end:{line:1,column:26787}}],line:1},"254":{loc:{start:{line:1,column:26812},end:{line:1,column:26831}},type:"cond-expr",locations:[{start:{line:1,column:26816},end:{line:1,column:26829}},{start:{line:1,column:26830},end:{line:1,column:26831}}],line:1},"255":{loc:{start:{line:1,column:26889},end:{line:1,column:26918}},type:"cond-expr",locations:[{start:{line:1,column:26914},end:{line:1,column:26916}},{start:{line:1,column:26917},end:{line:1,column:26918}}],line:1},"256":{loc:{start:{line:1,column:26930},end:{line:1,column:26975}},type:"binary-expr",locations:[{start:{line:1,column:26930},end:{line:1,column:26931}},{start:{line:1,column:26933},end:{line:1,column:26975}}],line:1},"257":{loc:{start:{line:1,column:27084},end:{line:1,column:27108}},type:"binary-expr",locations:[{start:{line:1,column:27084},end:{line:1,column:27093}},{start:{line:1,column:27095},end:{line:1,column:27108}}],line:1},"258":{loc:{start:{line:1,column:27171},end:{line:1,column:27186}},type:"binary-expr",locations:[{start:{line:1,column:27171},end:{line:1,column:27180}},{start:{line:1,column:27182},end:{line:1,column:27186}}],line:1},"259":{loc:{start:{line:1,column:27303},end:{line:1,column:27325}},type:"if",locations:[{start:{line:1,column:27303},end:{line:1,column:27325}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"260":{loc:{start:{line:1,column:27332},end:{line:1,column:27369}},type:"binary-expr",locations:[{start:{line:1,column:27332},end:{line:1,column:27354}},{start:{line:1,column:27356},end:{line:1,column:27369}}],line:1},"261":{loc:{start:{line:1,column:27480},end:{line:1,column:27496}},type:"binary-expr",locations:[{start:{line:1,column:27480},end:{line:1,column:27490}},{start:{line:1,column:27492},end:{line:1,column:27496}}],line:1},"262":{loc:{start:{line:1,column:27996},end:{line:1,column:28123}},type:"binary-expr",locations:[{start:{line:1,column:27996},end:{line:1,column:28020}},{start:{line:1,column:28023},end:{line:1,column:28122}}],line:1},"263":{loc:{start:{line:1,column:28136},end:{line:1,column:28270}},type:"binary-expr",locations:[{start:{line:1,column:28136},end:{line:1,column:28145}},{start:{line:1,column:28148},end:{line:1,column:28269}}],line:1},"264":{loc:{start:{line:1,column:28166},end:{line:1,column:28269}},type:"binary-expr",locations:[{start:{line:1,column:28166},end:{line:1,column:28222}},{start:{line:1,column:28224},end:{line:1,column:28269}}],line:1},"265":{loc:{start:{line:1,column:28536},end:{line:1,column:28551}},type:"binary-expr",locations:[{start:{line:1,column:28536},end:{line:1,column:28545}},{start:{line:1,column:28547},end:{line:1,column:28551}}],line:1},"266":{loc:{start:{line:1,column:28944},end:{line:1,column:28952}},type:"default-arg",locations:[{start:{line:1,column:28946},end:{line:1,column:28952}}],line:1},"267":{loc:{start:{line:1,column:28953},end:{line:1,column:28957}},type:"default-arg",locations:[{start:{line:1,column:28955},end:{line:1,column:28957}}],line:1},"268":{loc:{start:{line:1,column:29261},end:{line:1,column:29338}},type:"binary-expr",locations:[{start:{line:1,column:29261},end:{line:1,column:29266}},{start:{line:1,column:29269},end:{line:1,column:29337}}],line:1},"269":{loc:{start:{line:1,column:29272},end:{line:1,column:29279}},type:"binary-expr",locations:[{start:{line:1,column:29272},end:{line:1,column:29273}},{start:{line:1,column:29275},end:{line:1,column:29279}}],line:1},"270":{loc:{start:{line:1,column:29283},end:{line:1,column:29337}},type:"binary-expr",locations:[{start:{line:1,column:29283},end:{line:1,column:29288}},{start:{line:1,column:29291},end:{line:1,column:29336}}],line:1},"271":{loc:{start:{line:1,column:29541},end:{line:1,column:29593}},type:"binary-expr",locations:[{start:{line:1,column:29541},end:{line:1,column:29542}},{start:{line:1,column:29544},end:{line:1,column:29551}},{start:{line:1,column:29553},end:{line:1,column:29593}}],line:1},"272":{loc:{start:{line:1,column:29771},end:{line:1,column:29807}},type:"binary-expr",locations:[{start:{line:1,column:29771},end:{line:1,column:29784}},{start:{line:1,column:29786},end:{line:1,column:29807}}],line:1},"273":{loc:{start:{line:1,column:29878},end:{line:1,column:29882}},type:"binary-expr",locations:[{start:{line:1,column:29878},end:{line:1,column:29879}},{start:{line:1,column:29881},end:{line:1,column:29882}}],line:1},"274":{loc:{start:{line:1,column:30380},end:{line:1,column:30413}},type:"binary-expr",locations:[{start:{line:1,column:30380},end:{line:1,column:30391}},{start:{line:1,column:30393},end:{line:1,column:30413}}],line:1},"275":{loc:{start:{line:1,column:30414},end:{line:1,column:30511}},type:"binary-expr",locations:[{start:{line:1,column:30414},end:{line:1,column:30434}},{start:{line:1,column:30437},end:{line:1,column:30510}}],line:1},"276":{loc:{start:{line:1,column:30645},end:{line:1,column:30691}},type:"cond-expr",locations:[{start:{line:1,column:30661},end:{line:1,column:30670}},{start:{line:1,column:30671},end:{line:1,column:30691}}],line:1},"277":{loc:{start:{line:1,column:30733},end:{line:1,column:30777}},type:"cond-expr",locations:[{start:{line:1,column:30746},end:{line:1,column:30772}},{start:{line:1,column:30773},end:{line:1,column:30777}}],line:1},"278":{loc:{start:{line:1,column:30898},end:{line:1,column:30902}},type:"binary-expr",locations:[{start:{line:1,column:30898},end:{line:1,column:30899}},{start:{line:1,column:30901},end:{line:1,column:30902}}],line:1},"279":{loc:{start:{line:1,column:31388},end:{line:1,column:31399}},type:"binary-expr",locations:[{start:{line:1,column:31388},end:{line:1,column:31389}},{start:{line:1,column:31392},end:{line:1,column:31398}}],line:1},"280":{loc:{start:{line:1,column:31401},end:{line:1,column:31405}},type:"binary-expr",locations:[{start:{line:1,column:31401},end:{line:1,column:31402}},{start:{line:1,column:31404},end:{line:1,column:31405}}],line:1},"281":{loc:{start:{line:1,column:31498},end:{line:1,column:31588}},type:"binary-expr",locations:[{start:{line:1,column:31498},end:{line:1,column:31501}},{start:{line:1,column:31503},end:{line:1,column:31588}}],line:1},"282":{loc:{start:{line:1,column:31797},end:{line:1,column:31874}},type:"cond-expr",locations:[{start:{line:1,column:31805},end:{line:1,column:31811}},{start:{line:1,column:31813},end:{line:1,column:31873}}],line:1},"283":{loc:{start:{line:1,column:31813},end:{line:1,column:31848}},type:"binary-expr",locations:[{start:{line:1,column:31813},end:{line:1,column:31814}},{start:{line:1,column:31816},end:{line:1,column:31834}},{start:{line:1,column:31837},end:{line:1,column:31847}}],line:1},"284":{loc:{start:{line:1,column:32143},end:{line:1,column:32342}},type:"binary-expr",locations:[{start:{line:1,column:32143},end:{line:1,column:32160}},{start:{line:1,column:32162},end:{line:1,column:32191}},{start:{line:1,column:32194},end:{line:1,column:32341}}],line:1},"285":{loc:{start:{line:1,column:32230},end:{line:1,column:32307}},type:"binary-expr",locations:[{start:{line:1,column:32230},end:{line:1,column:32255}},{start:{line:1,column:32258},end:{line:1,column:32306}}],line:1},"286":{loc:{start:{line:1,column:32654},end:{line:1,column:32710}},type:"if",locations:[{start:{line:1,column:32654},end:{line:1,column:32710}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"287":{loc:{start:{line:1,column:32760},end:{line:1,column:32807}},type:"cond-expr",locations:[{start:{line:1,column:32783},end:{line:1,column:32805}},{start:{line:1,column:32806},end:{line:1,column:32807}}],line:1},"288":{loc:{start:{line:1,column:32863},end:{line:1,column:32874}},type:"binary-expr",locations:[{start:{line:1,column:32863},end:{line:1,column:32864}},{start:{line:1,column:32867},end:{line:1,column:32873}}],line:1},"289":{loc:{start:{line:1,column:32876},end:{line:1,column:32880}},type:"binary-expr",locations:[{start:{line:1,column:32876},end:{line:1,column:32877}},{start:{line:1,column:32879},end:{line:1,column:32880}}],line:1},"290":{loc:{start:{line:1,column:33085},end:{line:1,column:33189}},type:"binary-expr",locations:[{start:{line:1,column:33085},end:{line:1,column:33088}},{start:{line:1,column:33090},end:{line:1,column:33189}}],line:1},"291":{loc:{start:{line:1,column:33390},end:{line:1,column:33444}},type:"binary-expr",locations:[{start:{line:1,column:33390},end:{line:1,column:33402}},{start:{line:1,column:33405},end:{line:1,column:33443}}],line:1},"292":{loc:{start:{line:1,column:33460},end:{line:1,column:33595}},type:"binary-expr",locations:[{start:{line:1,column:33460},end:{line:1,column:33478}},{start:{line:1,column:33481},end:{line:1,column:33594}}],line:1},"293":{loc:{start:{line:1,column:33893},end:{line:1,column:33897}},type:"binary-expr",locations:[{start:{line:1,column:33893},end:{line:1,column:33894}},{start:{line:1,column:33896},end:{line:1,column:33897}}],line:1},"294":{loc:{start:{line:1,column:34109},end:{line:1,column:34219}},type:"cond-expr",locations:[{start:{line:1,column:34117},end:{line:1,column:34123}},{start:{line:1,column:34125},end:{line:1,column:34218}}],line:1},"295":{loc:{start:{line:1,column:34125},end:{line:1,column:34157}},type:"binary-expr",locations:[{start:{line:1,column:34125},end:{line:1,column:34143}},{start:{line:1,column:34146},end:{line:1,column:34156}}],line:1},"296":{loc:{start:{line:1,column:34158},end:{line:1,column:34193}},type:"binary-expr",locations:[{start:{line:1,column:34158},end:{line:1,column:34159}},{start:{line:1,column:34161},end:{line:1,column:34179}},{start:{line:1,column:34182},end:{line:1,column:34192}}],line:1},"297":{loc:{start:{line:1,column:34423},end:{line:1,column:34570}},type:"if",locations:[{start:{line:1,column:34423},end:{line:1,column:34570}},{start:{line:1,column:34540},end:{line:1,column:34570}}],line:1},"298":{loc:{start:{line:1,column:34664},end:{line:1,column:34892}},type:"if",locations:[{start:{line:1,column:34664},end:{line:1,column:34892}},{start:{line:1,column:34773},end:{line:1,column:34892}}],line:1},"299":{loc:{start:{line:1,column:34829},end:{line:1,column:34890}},type:"if",locations:[{start:{line:1,column:34829},end:{line:1,column:34890}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"300":{loc:{start:{line:1,column:35053},end:{line:1,column:35116}},type:"if",locations:[{start:{line:1,column:35053},end:{line:1,column:35116}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"301":{loc:{start:{line:1,column:35166},end:{line:1,column:35220}},type:"cond-expr",locations:[{start:{line:1,column:35189},end:{line:1,column:35218}},{start:{line:1,column:35219},end:{line:1,column:35220}}],line:1},"302":{loc:{start:{line:1,column:35276},end:{line:1,column:35287}},type:"binary-expr",locations:[{start:{line:1,column:35276},end:{line:1,column:35277}},{start:{line:1,column:35280},end:{line:1,column:35286}}],line:1},"303":{loc:{start:{line:1,column:35289},end:{line:1,column:35293}},type:"binary-expr",locations:[{start:{line:1,column:35289},end:{line:1,column:35290}},{start:{line:1,column:35292},end:{line:1,column:35293}}],line:1},"304":{loc:{start:{line:1,column:35492},end:{line:1,column:35590}},type:"binary-expr",locations:[{start:{line:1,column:35492},end:{line:1,column:35495}},{start:{line:1,column:35497},end:{line:1,column:35590}}],line:1},"305":{loc:{start:{line:1,column:35798},end:{line:1,column:35856}},type:"binary-expr",locations:[{start:{line:1,column:35798},end:{line:1,column:35810}},{start:{line:1,column:35813},end:{line:1,column:35855}}],line:1},"306":{loc:{start:{line:1,column:35872},end:{line:1,column:35988}},type:"binary-expr",locations:[{start:{line:1,column:35872},end:{line:1,column:35890}},{start:{line:1,column:35893},end:{line:1,column:35987}}],line:1},"307":{loc:{start:{line:1,column:36002},end:{line:1,column:36136}},type:"cond-expr",locations:[{start:{line:1,column:36016},end:{line:1,column:36110}},{start:{line:1,column:36112},end:{line:1,column:36136}}],line:1},"308":{loc:{start:{line:1,column:36322},end:{line:1,column:36421}},type:"binary-expr",locations:[{start:{line:1,column:36322},end:{line:1,column:36334}},{start:{line:1,column:36337},end:{line:1,column:36420}}],line:1},"309":{loc:{start:{line:1,column:36462},end:{line:1,column:36466}},type:"binary-expr",locations:[{start:{line:1,column:36462},end:{line:1,column:36463}},{start:{line:1,column:36465},end:{line:1,column:36466}}],line:1},"310":{loc:{start:{line:1,column:36630},end:{line:1,column:36665}},type:"cond-expr",locations:[{start:{line:1,column:36649},end:{line:1,column:36650}},{start:{line:1,column:36651},end:{line:1,column:36665}}],line:1},"311":{loc:{start:{line:1,column:36734},end:{line:1,column:36921}},type:"if",locations:[{start:{line:1,column:36734},end:{line:1,column:36921}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"312":{loc:{start:{line:1,column:36862},end:{line:1,column:36901}},type:"cond-expr",locations:[{start:{line:1,column:36876},end:{line:1,column:36899}},{start:{line:1,column:36900},end:{line:1,column:36901}}],line:1},"313":{loc:{start:{line:1,column:37072},end:{line:1,column:37076}},type:"binary-expr",locations:[{start:{line:1,column:37072},end:{line:1,column:37073}},{start:{line:1,column:37075},end:{line:1,column:37076}}],line:1},"314":{loc:{start:{line:1,column:37349},end:{line:1,column:37360}},type:"binary-expr",locations:[{start:{line:1,column:37349},end:{line:1,column:37350}},{start:{line:1,column:37353},end:{line:1,column:37359}}],line:1},"315":{loc:{start:{line:1,column:37362},end:{line:1,column:37366}},type:"binary-expr",locations:[{start:{line:1,column:37362},end:{line:1,column:37363}},{start:{line:1,column:37365},end:{line:1,column:37366}}],line:1},"316":{loc:{start:{line:1,column:37561},end:{line:1,column:37609}},type:"binary-expr",locations:[{start:{line:1,column:37561},end:{line:1,column:37564}},{start:{line:1,column:37566},end:{line:1,column:37609}}],line:1},"317":{loc:{start:{line:1,column:37581},end:{line:1,column:37608}},type:"cond-expr",locations:[{start:{line:1,column:37592},end:{line:1,column:37603}},{start:{line:1,column:37604},end:{line:1,column:37608}}],line:1},"318":{loc:{start:{line:1,column:37753},end:{line:1,column:37757}},type:"binary-expr",locations:[{start:{line:1,column:37753},end:{line:1,column:37754}},{start:{line:1,column:37756},end:{line:1,column:37757}}],line:1},"319":{loc:{start:{line:1,column:37846},end:{line:1,column:37923}},type:"binary-expr",locations:[{start:{line:1,column:37846},end:{line:1,column:37849}},{start:{line:1,column:37852},end:{line:1,column:37878}},{start:{line:1,column:37880},end:{line:1,column:37901}},{start:{line:1,column:37903},end:{line:1,column:37922}}],line:1},"320":{loc:{start:{line:1,column:38030},end:{line:1,column:38036}},type:"default-arg",locations:[{start:{line:1,column:38032},end:{line:1,column:38036}}],line:1},"321":{loc:{start:{line:1,column:38080},end:{line:1,column:38161}},type:"cond-expr",locations:[{start:{line:1,column:38086},end:{line:1,column:38089}},{start:{line:1,column:38090},end:{line:1,column:38161}}],line:1},"322":{loc:{start:{line:1,column:38090},end:{line:1,column:38161}},type:"binary-expr",locations:[{start:{line:1,column:38090},end:{line:1,column:38098}},{start:{line:1,column:38101},end:{line:1,column:38160}}],line:1},"323":{loc:{start:{line:1,column:38182},end:{line:1,column:38188}},type:"default-arg",locations:[{start:{line:1,column:38184},end:{line:1,column:38188}}],line:1},"324":{loc:{start:{line:1,column:38270},end:{line:1,column:38388}},type:"cond-expr",locations:[{start:{line:1,column:38291},end:{line:1,column:38374}},{start:{line:1,column:38376},end:{line:1,column:38388}}],line:1},"325":{loc:{start:{line:1,column:38291},end:{line:1,column:38337}},type:"cond-expr",locations:[{start:{line:1,column:38297},end:{line:1,column:38300}},{start:{line:1,column:38302},end:{line:1,column:38336}}],line:1},"326":{loc:{start:{line:1,column:38577},end:{line:1,column:38604}},type:"if",locations:[{start:{line:1,column:38577},end:{line:1,column:38604}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"327":{loc:{start:{line:1,column:38604},end:{line:1,column:38631}},type:"if",locations:[{start:{line:1,column:38604},end:{line:1,column:38631}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"328":{loc:{start:{line:1,column:38631},end:{line:1,column:38763}},type:"if",locations:[{start:{line:1,column:38631},end:{line:1,column:38763}},{start:{line:1,column:38741},end:{line:1,column:38763}}],line:1},"329":{loc:{start:{line:1,column:38665},end:{line:1,column:38685}},type:"cond-expr",locations:[{start:{line:1,column:38676},end:{line:1,column:38680}},{start:{line:1,column:38681},end:{line:1,column:38685}}],line:1},"330":{loc:{start:{line:1,column:38688},end:{line:1,column:38708}},type:"cond-expr",locations:[{start:{line:1,column:38699},end:{line:1,column:38703}},{start:{line:1,column:38704},end:{line:1,column:38708}}],line:1},"331":{loc:{start:{line:1,column:38804},end:{line:1,column:38808}},type:"binary-expr",locations:[{start:{line:1,column:38804},end:{line:1,column:38805}},{start:{line:1,column:38807},end:{line:1,column:38808}}],line:1},"332":{loc:{start:{line:1,column:38986},end:{line:1,column:39026}},type:"binary-expr",locations:[{start:{line:1,column:38986},end:{line:1,column:39016}},{start:{line:1,column:39018},end:{line:1,column:39026}}],line:1},"333":{loc:{start:{line:1,column:39049},end:{line:1,column:39075}},type:"binary-expr",locations:[{start:{line:1,column:39049},end:{line:1,column:39071}},{start:{line:1,column:39073},end:{line:1,column:39075}}],line:1},"334":{loc:{start:{line:1,column:39119},end:{line:1,column:39123}},type:"binary-expr",locations:[{start:{line:1,column:39119},end:{line:1,column:39120}},{start:{line:1,column:39122},end:{line:1,column:39123}}],line:1}},s:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"116":0,"117":0,"118":0,"119":0,"120":0,"121":0,"122":0,"123":0,"124":0,"125":0,"126":0,"127":0,"128":0,"129":0,"130":0,"131":0,"132":0,"133":0,"134":0,"135":0,"136":0,"137":0,"138":0,"139":0,"140":0,"141":0,"142":0,"143":0,"144":0,"145":0,"146":0,"147":0,"148":0,"149":0,"150":0,"151":0,"152":0,"153":0,"154":0,"155":0,"156":0,"157":0,"158":0,"159":0,"160":0,"161":0,"162":0,"163":0,"164":0,"165":0,"166":0,"167":0,"168":0,"169":0,"170":0,"171":0,"172":0,"173":0,"174":0,"175":0,"176":0,"177":0,"178":0,"179":0,"180":0,"181":0,"182":0,"183":0,"184":0,"185":0,"186":0,"187":0,"188":0,"189":0,"190":0,"191":0,"192":0,"193":0,"194":0,"195":0,"196":0,"197":0,"198":0,"199":0,"200":0,"201":0,"202":0,"203":0,"204":0,"205":0,"206":0,"207":0,"208":0,"209":0,"210":0,"211":0,"212":0,"213":0,"214":0,"215":0,"216":0,"217":0,"218":0,"219":0,"220":0,"221":0,"222":0,"223":0,"224":0,"225":0,"226":0,"227":0,"228":0,"229":0,"230":0,"231":0,"232":0,"233":0,"234":0,"235":0,"236":0,"237":0,"238":0,"239":0,"240":0,"241":0,"242":0,"243":0,"244":0,"245":0,"246":0,"247":0,"248":0,"249":0,"250":0,"251":0,"252":0,"253":0,"254":0,"255":0,"256":0,"257":0,"258":0,"259":0,"260":0,"261":0,"262":0,"263":0,"264":0,"265":0,"266":0,"267":0,"268":0,"269":0,"270":0,"271":0,"272":0,"273":0,"274":0,"275":0,"276":0,"277":0,"278":0,"279":0,"280":0,"281":0,"282":0,"283":0,"284":0,"285":0,"286":0,"287":0,"288":0,"289":0,"290":0,"291":0,"292":0,"293":0,"294":0,"295":0,"296":0,"297":0,"298":0,"299":0,"300":0,"301":0,"302":0,"303":0,"304":0,"305":0,"306":0,"307":0,"308":0,"309":0,"310":0,"311":0,"312":0,"313":0,"314":0,"315":0,"316":0,"317":0,"318":0,"319":0,"320":0,"321":0,"322":0,"323":0,"324":0,"325":0,"326":0,"327":0,"328":0,"329":0,"330":0,"331":0,"332":0,"333":0,"334":0,"335":0,"336":0,"337":0,"338":0,"339":0,"340":0,"341":0,"342":0,"343":0,"344":0,"345":0,"346":0,"347":0,"348":0,"349":0,"350":0,"351":0,"352":0,"353":0,"354":0,"355":0,"356":0,"357":0,"358":0,"359":0,"360":0,"361":0,"362":0,"363":0,"364":0,"365":0,"366":0,"367":0,"368":0,"369":0,"370":0,"371":0,"372":0,"373":0,"374":0,"375":0,"376":0,"377":0,"378":0,"379":0,"380":0,"381":0,"382":0,"383":0,"384":0,"385":0,"386":0,"387":0,"388":0,"389":0,"390":0,"391":0,"392":0,"393":0,"394":0,"395":0,"396":0,"397":0,"398":0,"399":0,"400":0,"401":0,"402":0,"403":0,"404":0,"405":0,"406":0,"407":0,"408":0,"409":0,"410":0,"411":0,"412":0,"413":0,"414":0,"415":0,"416":0,"417":0,"418":0,"419":0,"420":0,"421":0,"422":0,"423":0,"424":0,"425":0,"426":0,"427":0,"428":0,"429":0,"430":0,"431":0,"432":0,"433":0,"434":0,"435":0,"436":0,"437":0,"438":0,"439":0,"440":0,"441":0,"442":0,"443":0,"444":0,"445":0,"446":0,"447":0,"448":0,"449":0,"450":0,"451":0,"452":0,"453":0,"454":0,"455":0,"456":0,"457":0,"458":0,"459":0,"460":0,"461":0,"462":0,"463":0,"464":0,"465":0,"466":0,"467":0,"468":0,"469":0,"470":0,"471":0,"472":0,"473":0,"474":0,"475":0,"476":0,"477":0,"478":0,"479":0,"480":0,"481":0,"482":0,"483":0,"484":0,"485":0,"486":0,"487":0,"488":0,"489":0,"490":0,"491":0,"492":0,"493":0,"494":0,"495":0,"496":0,"497":0,"498":0,"499":0,"500":0,"501":0,"502":0,"503":0,"504":0,"505":0,"506":0,"507":0,"508":0,"509":0,"510":0,"511":0,"512":0,"513":0,"514":0,"515":0,"516":0,"517":0,"518":0,"519":0,"520":0,"521":0,"522":0,"523":0,"524":0,"525":0,"526":0,"527":0,"528":0,"529":0,"530":0,"531":0,"532":0,"533":0,"534":0,"535":0,"536":0,"537":0,"538":0,"539":0,"540":0,"541":0,"542":0,"543":0,"544":0,"545":0,"546":0,"547":0,"548":0,"549":0,"550":0,"551":0,"552":0,"553":0,"554":0,"555":0,"556":0,"557":0,"558":0,"559":0,"560":0,"561":0,"562":0,"563":0,"564":0,"565":0,"566":0,"567":0,"568":0,"569":0,"570":0,"571":0,"572":0,"573":0,"574":0,"575":0,"576":0,"577":0,"578":0,"579":0,"580":0,"581":0,"582":0,"583":0,"584":0,"585":0,"586":0,"587":0,"588":0,"589":0,"590":0,"591":0,"592":0,"593":0,"594":0,"595":0,"596":0,"597":0,"598":0,"599":0,"600":0,"601":0,"602":0,"603":0,"604":0,"605":0,"606":0,"607":0,"608":0,"609":0,"610":0,"611":0,"612":0,"613":0,"614":0,"615":0,"616":0,"617":0,"618":0,"619":0,"620":0,"621":0,"622":0,"623":0,"624":0,"625":0,"626":0,"627":0,"628":0,"629":0,"630":0,"631":0,"632":0,"633":0,"634":0,"635":0,"636":0,"637":0,"638":0,"639":0,"640":0,"641":0,"642":0,"643":0,"644":0,"645":0,"646":0,"647":0,"648":0,"649":0,"650":0,"651":0,"652":0,"653":0,"654":0,"655":0,"656":0,"657":0,"658":0,"659":0,"660":0,"661":0,"662":0,"663":0,"664":0,"665":0,"666":0,"667":0,"668":0,"669":0,"670":0,"671":0,"672":0,"673":0,"674":0,"675":0,"676":0,"677":0,"678":0,"679":0,"680":0,"681":0,"682":0,"683":0,"684":0,"685":0,"686":0,"687":0,"688":0,"689":0,"690":0,"691":0,"692":0,"693":0,"694":0,"695":0,"696":0,"697":0,"698":0,"699":0,"700":0,"701":0,"702":0,"703":0,"704":0,"705":0,"706":0,"707":0,"708":0,"709":0,"710":0,"711":0,"712":0,"713":0,"714":0,"715":0,"716":0,"717":0,"718":0,"719":0,"720":0,"721":0,"722":0,"723":0,"724":0,"725":0,"726":0,"727":0,"728":0,"729":0,"730":0,"731":0,"732":0,"733":0,"734":0,"735":0,"736":0,"737":0,"738":0,"739":0,"740":0,"741":0,"742":0,"743":0,"744":0,"745":0,"746":0,"747":0,"748":0,"749":0,"750":0,"751":0,"752":0,"753":0,"754":0,"755":0,"756":0,"757":0,"758":0,"759":0,"760":0,"761":0,"762":0,"763":0,"764":0,"765":0,"766":0,"767":0,"768":0,"769":0,"770":0,"771":0,"772":0,"773":0,"774":0,"775":0,"776":0,"777":0},f:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"116":0,"117":0,"118":0,"119":0,"120":0,"121":0,"122":0,"123":0,"124":0,"125":0,"126":0,"127":0,"128":0,"129":0,"130":0,"131":0,"132":0,"133":0,"134":0,"135":0,"136":0,"137":0,"138":0,"139":0,"140":0,"141":0,"142":0,"143":0,"144":0,"145":0,"146":0,"147":0,"148":0,"149":0,"150":0,"151":0,"152":0,"153":0,"154":0,"155":0,"156":0,"157":0,"158":0,"159":0,"160":0,"161":0,"162":0,"163":0,"164":0,"165":0,"166":0,"167":0,"168":0,"169":0,"170":0,"171":0,"172":0,"173":0,"174":0,"175":0,"176":0,"177":0,"178":0,"179":0,"180":0,"181":0,"182":0,"183":0,"184":0,"185":0,"186":0,"187":0,"188":0,"189":0,"190":0,"191":0,"192":0,"193":0,"194":0,"195":0,"196":0,"197":0,"198":0,"199":0,"200":0,"201":0,"202":0,"203":0,"204":0,"205":0,"206":0,"207":0,"208":0,"209":0,"210":0,"211":0,"212":0,"213":0,"214":0,"215":0,"216":0,"217":0,"218":0,"219":0,"220":0,"221":0,"222":0,"223":0,"224":0,"225":0,"226":0,"227":0,"228":0,"229":0,"230":0,"231":0,"232":0,"233":0,"234":0,"235":0,"236":0,"237":0,"238":0,"239":0,"240":0,"241":0,"242":0,"243":0,"244":0,"245":0,"246":0,"247":0,"248":0,"249":0,"250":0,"251":0,"252":0,"253":0,"254":0,"255":0,"256":0,"257":0,"258":0,"259":0,"260":0,"261":0,"262":0,"263":0,"264":0,"265":0,"266":0,"267":0,"268":0,"269":0,"270":0,"271":0,"272":0,"273":0,"274":0,"275":0,"276":0,"277":0,"278":0,"279":0,"280":0,"281":0,"282":0,"283":0,"284":0,"285":0,"286":0,"287":0,"288":0,"289":0,"290":0,"291":0,"292":0,"293":0,"294":0,"295":0,"296":0,"297":0,"298":0,"299":0,"300":0,"301":0,"302":0,"303":0,"304":0,"305":0,"306":0,"307":0,"308":0,"309":0,"310":0,"311":0,"312":0,"313":0,"314":0,"315":0,"316":0,"317":0,"318":0,"319":0,"320":0,"321":0,"322":0,"323":0,"324":0,"325":0,"326":0,"327":0,"328":0,"329":0,"330":0,"331":0,"332":0,"333":0,"334":0,"335":0,"336":0,"337":0,"338":0,"339":0,"340":0,"341":0,"342":0,"343":0,"344":0,"345":0,"346":0,"347":0,"348":0,"349":0,"350":0,"351":0,"352":0,"353":0,"354":0,"355":0,"356":0,"357":0,"358":0,"359":0,"360":0,"361":0,"362":0,"363":0,"364":0,"365":0,"366":0,"367":0,"368":0,"369":0,"370":0,"371":0,"372":0,"373":0,"374":0,"375":0,"376":0,"377":0,"378":0,"379":0,"380":0,"381":0,"382":0,"383":0,"384":0,"385":0,"386":0,"387":0,"388":0,"389":0,"390":0,"391":0,"392":0,"393":0,"394":0,"395":0,"396":0,"397":0,"398":0,"399":0,"400":0,"401":0,"402":0,"403":0,"404":0,"405":0,"406":0,"407":0,"408":0,"409":0,"410":0,"411":0,"412":0,"413":0,"414":0,"415":0,"416":0,"417":0,"418":0,"419":0,"420":0,"421":0,"422":0,"423":0,"424":0,"425":0,"426":0,"427":0,"428":0,"429":0,"430":0,"431":0,"432":0,"433":0,"434":0,"435":0,"436":0,"437":0,"438":0,"439":0,"440":0,"441":0,"442":0,"443":0,"444":0,"445":0,"446":0,"447":0,"448":0,"449":0,"450":0,"451":0,"452":0,"453":0,"454":0,"455":0,"456":0,"457":0,"458":0,"459":0,"460":0,"461":0,"462":0,"463":0,"464":0,"465":0,"466":0,"467":0,"468":0,"469":0,"470":0,"471":0,"472":0,"473":0,"474":0,"475":0,"476":0,"477":0,"478":0,"479":0,"480":0},b:{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0,0,0],"7":[0,0],"8":[0,0],"9":[0,0],"10":[0,0],"11":[0,0],"12":[0,0],"13":[0,0],"14":[0,0],"15":[0,0],"16":[0,0],"17":[0,0],"18":[0,0],"19":[0,0],"20":[0,0],"21":[0,0],"22":[0,0],"23":[0,0],"24":[0,0],"25":[0,0],"26":[0,0],"27":[0,0],"28":[0,0],"29":[0,0],"30":[0,0],"31":[0,0],"32":[0,0],"33":[0,0],"34":[0,0],"35":[0,0],"36":[0,0],"37":[0,0],"38":[0,0],"39":[0,0],"40":[0,0],"41":[0,0],"42":[0,0],"43":[0,0],"44":[0,0],"45":[0,0],"46":[0,0],"47":[0,0],"48":[0,0],"49":[0,0],"50":[0,0],"51":[0,0],"52":[0,0],"53":[0,0],"54":[0,0],"55":[0,0],"56":[0,0],"57":[0,0],"58":[0,0],"59":[0,0],"60":[0,0],"61":[0,0],"62":[0,0],"63":[0,0],"64":[0,0],"65":[0,0],"66":[0,0],"67":[0,0],"68":[0,0],"69":[0,0],"70":[0,0],"71":[0,0],"72":[0,0],"73":[0,0],"74":[0],"75":[0,0],"76":[0,0],"77":[0,0],"78":[0,0],"79":[0,0],"80":[0,0],"81":[0,0],"82":[0,0],"83":[0,0],"84":[0,0],"85":[0,0],"86":[0,0],"87":[0,0],"88":[0,0],"89":[0,0,0],"90":[0,0],"91":[0,0],"92":[0,0],"93":[0,0],"94":[0,0],"95":[0,0],"96":[0],"97":[0,0],"98":[0,0],"99":[0,0,0],"100":[0],"101":[0],"102":[0],"103":[0,0],"104":[0,0],"105":[0,0,0],"106":[0],"107":[0,0],"108":[0,0],"109":[0,0,0],"110":[0],"111":[0,0],"112":[0,0],"113":[0,0,0],"114":[0],"115":[0,0],"116":[0,0],"117":[0,0],"118":[0],"119":[0,0],"120":[0,0],"121":[0],"122":[0,0],"123":[0,0],"124":[0],"125":[0,0],"126":[0,0,0],"127":[0,0],"128":[0,0],"129":[0,0],"130":[0],"131":[0,0],"132":[0,0],"133":[0,0],"134":[0,0],"135":[0,0,0],"136":[0],"137":[0,0],"138":[0,0],"139":[0,0],"140":[0,0],"141":[0,0],"142":[0,0],"143":[0,0],"144":[0,0,0],"145":[0,0],"146":[0,0],"147":[0,0],"148":[0,0],"149":[0,0],"150":[0,0],"151":[0,0],"152":[0,0],"153":[0],"154":[0,0],"155":[0,0,0],"156":[0,0,0],"157":[0,0],"158":[0,0],"159":[0,0],"160":[0],"161":[0],"162":[0,0],"163":[0],"164":[0,0],"165":[0,0],"166":[0,0],"167":[0],"168":[0],"169":[0,0],"170":[0,0],"171":[0],"172":[0],"173":[0,0],"174":[0,0],"175":[0,0],"176":[0,0],"177":[0,0],"178":[0,0],"179":[0,0],"180":[0,0,0],"181":[0,0],"182":[0,0],"183":[0,0],"184":[0],"185":[0,0,0],"186":[0],"187":[0,0],"188":[0,0],"189":[0,0],"190":[0,0],"191":[0,0],"192":[0,0],"193":[0,0],"194":[0,0],"195":[0,0],"196":[0,0],"197":[0,0],"198":[0,0],"199":[0,0],"200":[0,0],"201":[0,0],"202":[0,0],"203":[0,0],"204":[0,0,0],"205":[0,0],"206":[0,0],"207":[0,0],"208":[0,0],"209":[0,0],"210":[0,0,0],"211":[0,0],"212":[0,0],"213":[0,0],"214":[0,0,0,0],"215":[0,0],"216":[0,0],"217":[0,0,0,0,0],"218":[0],"219":[0,0,0,0],"220":[0,0],"221":[0],"222":[0,0,0],"223":[0],"224":[0],"225":[0],"226":[0,0],"227":[0,0],"228":[0,0],"229":[0,0],"230":[0,0],"231":[0,0],"232":[0,0],"233":[0,0],"234":[0,0],"235":[0],"236":[0,0],"237":[0],"238":[0],"239":[0,0],"240":[0,0],"241":[0],"242":[0,0],"243":[0,0],"244":[0,0],"245":[0],"246":[0],"247":[0,0],"248":[0,0],"249":[0],"250":[0],"251":[0,0],"252":[0],"253":[0,0],"254":[0,0],"255":[0,0],"256":[0,0],"257":[0,0],"258":[0,0],"259":[0,0],"260":[0,0],"261":[0,0],"262":[0,0],"263":[0,0],"264":[0,0],"265":[0,0],"266":[0],"267":[0],"268":[0,0],"269":[0,0],"270":[0,0],"271":[0,0,0],"272":[0,0],"273":[0,0],"274":[0,0],"275":[0,0],"276":[0,0],"277":[0,0],"278":[0,0],"279":[0,0],"280":[0,0],"281":[0,0],"282":[0,0],"283":[0,0,0],"284":[0,0,0],"285":[0,0],"286":[0,0],"287":[0,0],"288":[0,0],"289":[0,0],"290":[0,0],"291":[0,0],"292":[0,0],"293":[0,0],"294":[0,0],"295":[0,0],"296":[0,0,0],"297":[0,0],"298":[0,0],"299":[0,0],"300":[0,0],"301":[0,0],"302":[0,0],"303":[0,0],"304":[0,0],"305":[0,0],"306":[0,0],"307":[0,0],"308":[0,0],"309":[0,0],"310":[0,0],"311":[0,0],"312":[0,0],"313":[0,0],"314":[0,0],"315":[0,0],"316":[0,0],"317":[0,0],"318":[0,0],"319":[0,0,0,0],"320":[0],"321":[0,0],"322":[0,0],"323":[0],"324":[0,0],"325":[0,0],"326":[0,0],"327":[0,0],"328":[0,0],"329":[0,0],"330":[0,0],"331":[0,0],"332":[0,0],"333":[0,0],"334":[0,0]},inputSourceMap:{version:3,sources:["node_modules/@angular/forms/fesm2022/forms.mjs"],sourcesContent:["/**\n * @license Angular v21.2.4\n * (c) 2010-2026 Google LLC. https://angular.dev/\n * License: MIT\n */\n\nimport * as i0 from '@angular/core';\nimport { Directive, InjectionToken, forwardRef, Optional, Inject, \u0275isPromise as _isPromise, \u0275isSubscribable as _isSubscribable, \u0275RuntimeError as _RuntimeError, Self, Version, untracked, computed, signal, EventEmitter, Input, Host, SkipSelf, booleanAttribute, ChangeDetectorRef, Output, Injectable, inject, ApplicationRef, DestroyRef, afterNextRender, NgModule } from '@angular/core';\nimport { \u0275getDOM as _getDOM } from '@angular/common';\nimport { forkJoin, from, Subject } from 'rxjs';\nimport { map } from 'rxjs/operators';\nlet BaseControlValueAccessor = /*#__PURE__*/(() => {\n class BaseControlValueAccessor {\n _renderer;\n _elementRef;\n onChange = _ => {};\n onTouched = () => {};\n constructor(_renderer, _elementRef) {\n this._renderer = _renderer;\n this._elementRef = _elementRef;\n }\n setProperty(key, value) {\n this._renderer.setProperty(this._elementRef.nativeElement, key, value);\n }\n registerOnTouched(fn) {\n this.onTouched = fn;\n }\n registerOnChange(fn) {\n this.onChange = fn;\n }\n setDisabledState(isDisabled) {\n this.setProperty('disabled', isDisabled);\n }\n static \u0275fac = function BaseControlValueAccessor_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || BaseControlValueAccessor)(i0.\u0275\u0275directiveInject(i0.Renderer2), i0.\u0275\u0275directiveInject(i0.ElementRef));\n };\n static \u0275dir = /* @__PURE__ */i0.\u0275\u0275defineDirective({\n type: BaseControlValueAccessor\n });\n }\n return BaseControlValueAccessor;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet BuiltInControlValueAccessor = /*#__PURE__*/(() => {\n class BuiltInControlValueAccessor extends BaseControlValueAccessor {\n static \u0275fac = /* @__PURE__ */(() => {\n let \u0275BuiltInControlValueAccessor_BaseFactory;\n return function BuiltInControlValueAccessor_Factory(__ngFactoryType__) {\n return (\u0275BuiltInControlValueAccessor_BaseFactory || (\u0275BuiltInControlValueAccessor_BaseFactory = i0.\u0275\u0275getInheritedFactory(BuiltInControlValueAccessor)))(__ngFactoryType__ || BuiltInControlValueAccessor);\n };\n })();\n static \u0275dir = /* @__PURE__ */i0.\u0275\u0275defineDirective({\n type: BuiltInControlValueAccessor,\n features: [i0.\u0275\u0275InheritDefinitionFeature]\n });\n }\n return BuiltInControlValueAccessor;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst NG_VALUE_ACCESSOR = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'NgValueAccessor' : '');\nconst CHECKBOX_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: /*#__PURE__*/forwardRef(() => CheckboxControlValueAccessor),\n multi: true\n};\nlet CheckboxControlValueAccessor = /*#__PURE__*/(() => {\n class CheckboxControlValueAccessor extends BuiltInControlValueAccessor {\n writeValue(value) {\n this.setProperty('checked', value);\n }\n static \u0275fac = /* @__PURE__ */(() => {\n let \u0275CheckboxControlValueAccessor_BaseFactory;\n return function CheckboxControlValueAccessor_Factory(__ngFactoryType__) {\n return (\u0275CheckboxControlValueAccessor_BaseFactory || (\u0275CheckboxControlValueAccessor_BaseFactory = i0.\u0275\u0275getInheritedFactory(CheckboxControlValueAccessor)))(__ngFactoryType__ || CheckboxControlValueAccessor);\n };\n })();\n static \u0275dir = /* @__PURE__ */i0.\u0275\u0275defineDirective({\n type: CheckboxControlValueAccessor,\n selectors: [[\"input\", \"type\", \"checkbox\", \"formControlName\", \"\"], [\"input\", \"type\", \"checkbox\", \"formControl\", \"\"], [\"input\", \"type\", \"checkbox\", \"ngModel\", \"\"]],\n hostBindings: function CheckboxControlValueAccessor_HostBindings(rf, ctx) {\n if (rf & 1) {\n i0.\u0275\u0275listener(\"change\", function CheckboxControlValueAccessor_change_HostBindingHandler($event) {\n return ctx.onChange($event.target.checked);\n })(\"blur\", function CheckboxControlValueAccessor_blur_HostBindingHandler() {\n return ctx.onTouched();\n });\n }\n },\n standalone: false,\n features: [i0.\u0275\u0275ProvidersFeature([CHECKBOX_VALUE_ACCESSOR]), i0.\u0275\u0275InheritDefinitionFeature]\n });\n }\n return CheckboxControlValueAccessor;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst DEFAULT_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: /*#__PURE__*/forwardRef(() => DefaultValueAccessor),\n multi: true\n};\nfunction _isAndroid() {\n const userAgent = _getDOM() ? _getDOM().getUserAgent() : '';\n return /android (\\d+)/.test(userAgent.toLowerCase());\n}\nconst COMPOSITION_BUFFER_MODE = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'CompositionEventMode' : '');\nlet DefaultValueAccessor = /*#__PURE__*/(() => {\n class DefaultValueAccessor extends BaseControlValueAccessor {\n _compositionMode;\n _composing = false;\n constructor(renderer, elementRef, _compositionMode) {\n super(renderer, elementRef);\n this._compositionMode = _compositionMode;\n if (this._compositionMode == null) {\n this._compositionMode = !_isAndroid();\n }\n }\n writeValue(value) {\n const normalizedValue = value == null ? '' : value;\n this.setProperty('value', normalizedValue);\n }\n _handleInput(value) {\n if (!this._compositionMode || this._compositionMode && !this._composing) {\n this.onChange(value);\n }\n }\n _compositionStart() {\n this._composing = true;\n }\n _compositionEnd(value) {\n this._composing = false;\n this._compositionMode && this.onChange(value);\n }\n static \u0275fac = function DefaultValueAccessor_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || DefaultValueAccessor)(i0.\u0275\u0275directiveInject(i0.Renderer2), i0.\u0275\u0275directiveInject(i0.ElementRef), i0.\u0275\u0275directiveInject(COMPOSITION_BUFFER_MODE, 8));\n };\n static \u0275dir = /* @__PURE__ */i0.\u0275\u0275defineDirective({\n type: DefaultValueAccessor,\n selectors: [[\"input\", \"formControlName\", \"\", 3, \"type\", \"checkbox\"], [\"textarea\", \"formControlName\", \"\"], [\"input\", \"formControl\", \"\", 3, \"type\", \"checkbox\"], [\"textarea\", \"formControl\", \"\"], [\"input\", \"ngModel\", \"\", 3, \"type\", \"checkbox\"], [\"textarea\", \"ngModel\", \"\"], [\"\", \"ngDefaultControl\", \"\"]],\n hostBindings: function DefaultValueAccessor_HostBindings(rf, ctx) {\n if (rf & 1) {\n i0.\u0275\u0275listener(\"input\", function DefaultValueAccessor_input_HostBindingHandler($event) {\n return ctx._handleInput($event.target.value);\n })(\"blur\", function DefaultValueAccessor_blur_HostBindingHandler() {\n return ctx.onTouched();\n })(\"compositionstart\", function DefaultValueAccessor_compositionstart_HostBindingHandler() {\n return ctx._compositionStart();\n })(\"compositionend\", function DefaultValueAccessor_compositionend_HostBindingHandler($event) {\n return ctx._compositionEnd($event.target.value);\n });\n }\n },\n standalone: false,\n features: [i0.\u0275\u0275ProvidersFeature([DEFAULT_VALUE_ACCESSOR]), i0.\u0275\u0275InheritDefinitionFeature]\n });\n }\n return DefaultValueAccessor;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nfunction isEmptyInputValue(value) {\n return value == null || lengthOrSize(value) === 0;\n}\nfunction lengthOrSize(value) {\n if (value == null) {\n return null;\n } else if (Array.isArray(value) || typeof value === 'string') {\n return value.length;\n } else if (value instanceof Set) {\n return value.size;\n }\n return null;\n}\nconst NG_VALIDATORS = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'NgValidators' : '');\nconst NG_ASYNC_VALIDATORS = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'NgAsyncValidators' : '');\nconst EMAIL_REGEXP = /^(?=.{1,254}$)(?=.{1,64}@)[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+)*@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\nclass Validators {\n static min(min) {\n return minValidator(min);\n }\n static max(max) {\n return maxValidator(max);\n }\n static required(control) {\n return requiredValidator(control);\n }\n static requiredTrue(control) {\n return requiredTrueValidator(control);\n }\n static email(control) {\n return emailValidator(control);\n }\n static minLength(minLength) {\n return minLengthValidator(minLength);\n }\n static maxLength(maxLength) {\n return maxLengthValidator(maxLength);\n }\n static pattern(pattern) {\n return patternValidator(pattern);\n }\n static nullValidator(control) {\n return nullValidator();\n }\n static compose(validators) {\n return compose(validators);\n }\n static composeAsync(validators) {\n return composeAsync(validators);\n }\n}\nfunction minValidator(min) {\n return control => {\n if (control.value == null || min == null) {\n return null;\n }\n const value = parseFloat(control.value);\n return !isNaN(value) && value < min ? {\n 'min': {\n 'min': min,\n 'actual': control.value\n }\n } : null;\n };\n}\nfunction maxValidator(max) {\n return control => {\n if (control.value == null || max == null) {\n return null;\n }\n const value = parseFloat(control.value);\n return !isNaN(value) && value > max ? {\n 'max': {\n 'max': max,\n 'actual': control.value\n }\n } : null;\n };\n}\nfunction requiredValidator(control) {\n return isEmptyInputValue(control.value) ? {\n 'required': true\n } : null;\n}\nfunction requiredTrueValidator(control) {\n return control.value === true ? null : {\n 'required': true\n };\n}\nfunction emailValidator(control) {\n if (isEmptyInputValue(control.value)) {\n return null;\n }\n return EMAIL_REGEXP.test(control.value) ? null : {\n 'email': true\n };\n}\nfunction minLengthValidator(minLength) {\n return control => {\n const length = control.value?.length ?? lengthOrSize(control.value);\n if (length === null || length === 0) {\n return null;\n }\n return length < minLength ? {\n 'minlength': {\n 'requiredLength': minLength,\n 'actualLength': length\n }\n } : null;\n };\n}\nfunction maxLengthValidator(maxLength) {\n return control => {\n const length = control.value?.length ?? lengthOrSize(control.value);\n if (length !== null && length > maxLength) {\n return {\n 'maxlength': {\n 'requiredLength': maxLength,\n 'actualLength': length\n }\n };\n }\n return null;\n };\n}\nfunction patternValidator(pattern) {\n if (!pattern) return nullValidator;\n let regex;\n let regexStr;\n if (typeof pattern === 'string') {\n regexStr = '';\n if (pattern.charAt(0) !== '^') regexStr += '^';\n regexStr += pattern;\n if (pattern.charAt(pattern.length - 1) !== '$') regexStr += '$';\n regex = new RegExp(regexStr);\n } else {\n regexStr = pattern.toString();\n regex = pattern;\n }\n return control => {\n if (isEmptyInputValue(control.value)) {\n return null;\n }\n const value = control.value;\n return regex.test(value) ? null : {\n 'pattern': {\n 'requiredPattern': regexStr,\n 'actualValue': value\n }\n };\n };\n}\nfunction nullValidator(control) {\n return null;\n}\nfunction isPresent(o) {\n return o != null;\n}\nfunction toObservable(value) {\n const obs = _isPromise(value) ? from(value) : value;\n if ((typeof ngDevMode === 'undefined' || ngDevMode) && !_isSubscribable(obs)) {\n let errorMessage = `Expected async validator to return Promise or Observable.`;\n if (typeof value === 'object') {\n errorMessage += ' Are you using a synchronous validator where an async validator is expected?';\n }\n throw new _RuntimeError(-1101, errorMessage);\n }\n return obs;\n}\nfunction mergeErrors(arrayOfErrors) {\n let res = {};\n arrayOfErrors.forEach(errors => {\n res = errors != null ? {\n ...res,\n ...errors\n } : res;\n });\n return Object.keys(res).length === 0 ? null : res;\n}\nfunction executeValidators(control, validators) {\n return validators.map(validator => validator(control));\n}\nfunction isValidatorFn(validator) {\n return !validator.validate;\n}\nfunction normalizeValidators(validators) {\n return validators.map(validator => {\n return isValidatorFn(validator) ? validator : c => validator.validate(c);\n });\n}\nfunction compose(validators) {\n if (!validators) return null;\n const presentValidators = validators.filter(isPresent);\n if (presentValidators.length == 0) return null;\n return function (control) {\n return mergeErrors(executeValidators(control, presentValidators));\n };\n}\nfunction composeValidators(validators) {\n return validators != null ? compose(normalizeValidators(validators)) : null;\n}\nfunction composeAsync(validators) {\n if (!validators) return null;\n const presentValidators = validators.filter(isPresent);\n if (presentValidators.length == 0) return null;\n return function (control) {\n const observables = executeValidators(control, presentValidators).map(toObservable);\n return forkJoin(observables).pipe(map(mergeErrors));\n };\n}\nfunction composeAsyncValidators(validators) {\n return validators != null ? composeAsync(normalizeValidators(validators)) : null;\n}\nfunction mergeValidators(controlValidators, dirValidator) {\n if (controlValidators === null) return [dirValidator];\n return Array.isArray(controlValidators) ? [...controlValidators, dirValidator] : [controlValidators, dirValidator];\n}\nfunction getControlValidators(control) {\n return control._rawValidators;\n}\nfunction getControlAsyncValidators(control) {\n return control._rawAsyncValidators;\n}\nfunction makeValidatorsArray(validators) {\n if (!validators) return [];\n return Array.isArray(validators) ? validators : [validators];\n}\nfunction hasValidator(validators, validator) {\n return Array.isArray(validators) ? validators.includes(validator) : validators === validator;\n}\nfunction addValidators(validators, currentValidators) {\n const current = makeValidatorsArray(currentValidators);\n const validatorsToAdd = makeValidatorsArray(validators);\n validatorsToAdd.forEach(v => {\n if (!hasValidator(current, v)) {\n current.push(v);\n }\n });\n return current;\n}\nfunction removeValidators(validators, currentValidators) {\n return makeValidatorsArray(currentValidators).filter(v => !hasValidator(validators, v));\n}\nclass AbstractControlDirective {\n get value() {\n return this.control ? this.control.value : null;\n }\n get valid() {\n return this.control ? this.control.valid : null;\n }\n get invalid() {\n return this.control ? this.control.invalid : null;\n }\n get pending() {\n return this.control ? this.control.pending : null;\n }\n get disabled() {\n return this.control ? this.control.disabled : null;\n }\n get enabled() {\n return this.control ? this.control.enabled : null;\n }\n get errors() {\n return this.control ? this.control.errors : null;\n }\n get pristine() {\n return this.control ? this.control.pristine : null;\n }\n get dirty() {\n return this.control ? this.control.dirty : null;\n }\n get touched() {\n return this.control ? this.control.touched : null;\n }\n get status() {\n return this.control ? this.control.status : null;\n }\n get untouched() {\n return this.control ? this.control.untouched : null;\n }\n get statusChanges() {\n return this.control ? this.control.statusChanges : null;\n }\n get valueChanges() {\n return this.control ? this.control.valueChanges : null;\n }\n get path() {\n return null;\n }\n _composedValidatorFn;\n _composedAsyncValidatorFn;\n _rawValidators = [];\n _rawAsyncValidators = [];\n _setValidators(validators) {\n this._rawValidators = validators || [];\n this._composedValidatorFn = composeValidators(this._rawValidators);\n }\n _setAsyncValidators(validators) {\n this._rawAsyncValidators = validators || [];\n this._composedAsyncValidatorFn = composeAsyncValidators(this._rawAsyncValidators);\n }\n get validator() {\n return this._composedValidatorFn || null;\n }\n get asyncValidator() {\n return this._composedAsyncValidatorFn || null;\n }\n _onDestroyCallbacks = [];\n _registerOnDestroy(fn) {\n this._onDestroyCallbacks.push(fn);\n }\n _invokeOnDestroyCallbacks() {\n this._onDestroyCallbacks.forEach(fn => fn());\n this._onDestroyCallbacks = [];\n }\n reset(value = undefined) {\n this.control?.reset(value);\n }\n hasError(errorCode, path) {\n return this.control ? this.control.hasError(errorCode, path) : false;\n }\n getError(errorCode, path) {\n return this.control ? this.control.getError(errorCode, path) : null;\n }\n}\nclass ControlContainer extends AbstractControlDirective {\n name;\n get formDirective() {\n return null;\n }\n get path() {\n return null;\n }\n}\nclass NgControl extends AbstractControlDirective {\n _parent = null;\n name = null;\n valueAccessor = null;\n}\nclass AbstractControlStatus {\n _cd;\n constructor(cd) {\n this._cd = cd;\n }\n get isTouched() {\n this._cd?.control?._touched?.();\n return !!this._cd?.control?.touched;\n }\n get isUntouched() {\n return !!this._cd?.control?.untouched;\n }\n get isPristine() {\n this._cd?.control?._pristine?.();\n return !!this._cd?.control?.pristine;\n }\n get isDirty() {\n return !!this._cd?.control?.dirty;\n }\n get isValid() {\n this._cd?.control?._status?.();\n return !!this._cd?.control?.valid;\n }\n get isInvalid() {\n return !!this._cd?.control?.invalid;\n }\n get isPending() {\n return !!this._cd?.control?.pending;\n }\n get isSubmitted() {\n this._cd?._submitted?.();\n return !!this._cd?.submitted;\n }\n}\nconst ngControlStatusHost = {\n '[class.ng-untouched]': 'isUntouched',\n '[class.ng-touched]': 'isTouched',\n '[class.ng-pristine]': 'isPristine',\n '[class.ng-dirty]': 'isDirty',\n '[class.ng-valid]': 'isValid',\n '[class.ng-invalid]': 'isInvalid',\n '[class.ng-pending]': 'isPending'\n};\nlet NgControlStatus = /*#__PURE__*/(() => {\n class NgControlStatus extends AbstractControlStatus {\n constructor(cd) {\n super(cd);\n }\n static \u0275fac = function NgControlStatus_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || NgControlStatus)(i0.\u0275\u0275directiveInject(NgControl, 2));\n };\n static \u0275dir = /* @__PURE__ */i0.\u0275\u0275defineDirective({\n type: NgControlStatus,\n selectors: [[\"\", \"formControlName\", \"\"], [\"\", \"ngModel\", \"\"], [\"\", \"formControl\", \"\"]],\n hostVars: 14,\n hostBindings: function NgControlStatus_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.\u0275\u0275classProp(\"ng-untouched\", ctx.isUntouched)(\"ng-touched\", ctx.isTouched)(\"ng-pristine\", ctx.isPristine)(\"ng-dirty\", ctx.isDirty)(\"ng-valid\", ctx.isValid)(\"ng-invalid\", ctx.isInvalid)(\"ng-pending\", ctx.isPending);\n }\n },\n standalone: false,\n features: [i0.\u0275\u0275InheritDefinitionFeature]\n });\n }\n return NgControlStatus;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet NgControlStatusGroup = /*#__PURE__*/(() => {\n class NgControlStatusGroup extends AbstractControlStatus {\n constructor(cd) {\n super(cd);\n }\n static \u0275fac = function NgControlStatusGroup_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || NgControlStatusGroup)(i0.\u0275\u0275directiveInject(ControlContainer, 10));\n };\n static \u0275dir = /* @__PURE__ */i0.\u0275\u0275defineDirective({\n type: NgControlStatusGroup,\n selectors: [[\"\", \"formGroupName\", \"\"], [\"\", \"formArrayName\", \"\"], [\"\", \"ngModelGroup\", \"\"], [\"\", \"formGroup\", \"\"], [\"\", \"formArray\", \"\"], [\"form\", 3, \"ngNoForm\", \"\"], [\"\", \"ngForm\", \"\"]],\n hostVars: 16,\n hostBindings: function NgControlStatusGroup_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.\u0275\u0275classProp(\"ng-untouched\", ctx.isUntouched)(\"ng-touched\", ctx.isTouched)(\"ng-pristine\", ctx.isPristine)(\"ng-dirty\", ctx.isDirty)(\"ng-valid\", ctx.isValid)(\"ng-invalid\", ctx.isInvalid)(\"ng-pending\", ctx.isPending)(\"ng-submitted\", ctx.isSubmitted);\n }\n },\n standalone: false,\n features: [i0.\u0275\u0275InheritDefinitionFeature]\n });\n }\n return NgControlStatusGroup;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst formControlNameExample = `\n
\n \n
\n\n In your class:\n\n this.myGroup = new FormGroup({\n firstName: new FormControl()\n });`;\nconst formGroupNameExample = `\n
\n
\n \n
\n
\n\n In your class:\n\n this.myGroup = new FormGroup({\n person: new FormGroup({ firstName: new FormControl() })\n });`;\nconst formArrayNameExample = `\n
\n
\n
\n \n
\n
\n
\n\n In your class:\n\n this.cityArray = new FormArray([new FormControl('SF')]);\n this.myGroup = new FormGroup({\n cities: this.cityArray\n });`;\nconst ngModelGroupExample = `\n
\n
\n \n
\n
`;\nconst ngModelWithFormGroupExample = `\n
\n \n \n
\n`;\nconst VERSION = /* @__PURE__ */new Version('21.2.4');\nfunction controlParentException(nameOrIndex) {\n return new _RuntimeError(1050, `formControlName must be used with a parent formGroup or formArray directive. You'll want to add a formGroup/formArray\n directive and pass it an existing FormGroup/FormArray instance (you can create one in your class).\n\n ${describeFormControl(nameOrIndex)}\n\n Example:\n\n ${formControlNameExample}`);\n}\nfunction describeFormControl(nameOrIndex) {\n if (nameOrIndex == null || nameOrIndex === '') {\n return '';\n }\n const valueType = typeof nameOrIndex === 'string' ? 'name' : 'index';\n return `Affected Form Control ${valueType}: \"${nameOrIndex}\"`;\n}\nfunction ngModelGroupException() {\n return new _RuntimeError(1051, `formControlName cannot be used with an ngModelGroup parent. It is only compatible with parents\n that also have a \"form\" prefix: formGroupName, formArrayName, or formGroup.\n\n Option 1: Update the parent to be formGroupName (reactive form strategy)\n\n ${formGroupNameExample}\n\n Option 2: Use ngModel instead of formControlName (template-driven strategy)\n\n ${ngModelGroupExample}`);\n}\nfunction missingFormException() {\n return new _RuntimeError(1052, `formGroup expects a FormGroup instance. Please pass one in.\n\n Example:\n\n ${formControlNameExample}`);\n}\nfunction groupParentException() {\n return new _RuntimeError(1053, `formGroupName must be used with a parent formGroup directive. You'll want to add a formGroup\n directive and pass it an existing FormGroup instance (you can create one in your class).\n\n Example:\n\n ${formGroupNameExample}`);\n}\nfunction arrayParentException() {\n return new _RuntimeError(1054, `formArrayName must be used with a parent formGroup directive. You'll want to add a formGroup\n directive and pass it an existing FormGroup instance (you can create one in your class).\n\n Example:\n\n ${formArrayNameExample}`);\n}\nconst disabledAttrWarning = `\n It looks like you're using the disabled attribute with a reactive form directive. If you set disabled to true\n when you set up this control in your component class, the disabled attribute will actually be set in the DOM for\n you. We recommend using this approach to avoid 'changed after checked' errors.\n\n Example:\n // Specify the \\`disabled\\` property at control creation time:\n form = new FormGroup({\n first: new FormControl({value: 'Nancy', disabled: true}, Validators.required),\n last: new FormControl('Drew', Validators.required)\n });\n\n // Controls can also be enabled/disabled after creation:\n form.get('first')?.enable();\n form.get('last')?.disable();\n`;\nconst asyncValidatorsDroppedWithOptsWarning = `\n It looks like you're constructing using a FormControl with both an options argument and an\n async validators argument. Mixing these arguments will cause your async validators to be dropped.\n You should either put all your validators in the options object, or in separate validators\n arguments. For example:\n\n // Using validators arguments\n fc = new FormControl(42, Validators.required, myAsyncValidator);\n\n // Using AbstractControlOptions\n fc = new FormControl(42, {validators: Validators.required, asyncValidators: myAV});\n\n // Do NOT mix them: async validators will be dropped!\n fc = new FormControl(42, {validators: Validators.required}, /* Oops! */ myAsyncValidator);\n`;\nfunction ngModelWarning(directiveName) {\n const versionSubDomain = VERSION.major !== '0' ? `v${VERSION.major}.` : '';\n return `\n It looks like you're using ngModel on the same form field as ${directiveName}.\n Support for using the ngModel input property and ngModelChange event with\n reactive form directives has been deprecated in Angular v6 and will be removed\n in a future version of Angular.\n\n For more information on this, see our API docs here:\n https://${versionSubDomain}angular.dev/api/forms/${directiveName === 'formControl' ? 'FormControlDirective' : 'FormControlName'}\n `;\n}\nfunction describeKey(isFormGroup, key) {\n return isFormGroup ? `with name: '${key}'` : `at index: ${key}`;\n}\nfunction noControlsError(isFormGroup) {\n return `\n There are no form controls registered with this ${isFormGroup ? 'group' : 'array'} yet. If you're using ngModel,\n you may want to check next tick (e.g. use setTimeout).\n `;\n}\nfunction missingControlError(isFormGroup, key) {\n return `Cannot find form control ${describeKey(isFormGroup, key)}`;\n}\nfunction missingControlValueError(isFormGroup, key) {\n return `Must supply a value for form control ${describeKey(isFormGroup, key)}`;\n}\nconst VALID = 'VALID';\nconst INVALID = 'INVALID';\nconst PENDING = 'PENDING';\nconst DISABLED = 'DISABLED';\nclass ControlEvent {}\nclass ValueChangeEvent extends ControlEvent {\n value;\n source;\n constructor(value, source) {\n super();\n this.value = value;\n this.source = source;\n }\n}\nclass PristineChangeEvent extends ControlEvent {\n pristine;\n source;\n constructor(pristine, source) {\n super();\n this.pristine = pristine;\n this.source = source;\n }\n}\nclass TouchedChangeEvent extends ControlEvent {\n touched;\n source;\n constructor(touched, source) {\n super();\n this.touched = touched;\n this.source = source;\n }\n}\nclass StatusChangeEvent extends ControlEvent {\n status;\n source;\n constructor(status, source) {\n super();\n this.status = status;\n this.source = source;\n }\n}\nclass FormSubmittedEvent extends ControlEvent {\n source;\n constructor(source) {\n super();\n this.source = source;\n }\n}\nclass FormResetEvent extends ControlEvent {\n source;\n constructor(source) {\n super();\n this.source = source;\n }\n}\nfunction pickValidators(validatorOrOpts) {\n return (isOptionsObj(validatorOrOpts) ? validatorOrOpts.validators : validatorOrOpts) || null;\n}\nfunction coerceToValidator(validator) {\n return Array.isArray(validator) ? composeValidators(validator) : validator || null;\n}\nfunction pickAsyncValidators(asyncValidator, validatorOrOpts) {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n if (isOptionsObj(validatorOrOpts) && asyncValidator) {\n console.warn(asyncValidatorsDroppedWithOptsWarning);\n }\n }\n return (isOptionsObj(validatorOrOpts) ? validatorOrOpts.asyncValidators : asyncValidator) || null;\n}\nfunction coerceToAsyncValidator(asyncValidator) {\n return Array.isArray(asyncValidator) ? composeAsyncValidators(asyncValidator) : asyncValidator || null;\n}\nfunction isOptionsObj(validatorOrOpts) {\n return validatorOrOpts != null && !Array.isArray(validatorOrOpts) && typeof validatorOrOpts === 'object';\n}\nfunction assertControlPresent(parent, isGroup, key) {\n const controls = parent.controls;\n const collection = isGroup ? Object.keys(controls) : controls;\n if (!collection.length) {\n throw new _RuntimeError(1000, typeof ngDevMode === 'undefined' || ngDevMode ? noControlsError(isGroup) : '');\n }\n if (!controls[key]) {\n throw new _RuntimeError(1001, typeof ngDevMode === 'undefined' || ngDevMode ? missingControlError(isGroup, key) : '');\n }\n}\nfunction assertAllValuesPresent(control, isGroup, value) {\n control._forEachChild((_, key) => {\n if (value[key] === undefined) {\n throw new _RuntimeError(1002, typeof ngDevMode === 'undefined' || ngDevMode ? missingControlValueError(isGroup, key) : '');\n }\n });\n}\nclass AbstractControl {\n _pendingDirty = false;\n _hasOwnPendingAsyncValidator = null;\n _pendingTouched = false;\n _onCollectionChange = () => {};\n _updateOn;\n _parent = null;\n _asyncValidationSubscription;\n _composedValidatorFn;\n _composedAsyncValidatorFn;\n _rawValidators;\n _rawAsyncValidators;\n value;\n constructor(validators, asyncValidators) {\n this._assignValidators(validators);\n this._assignAsyncValidators(asyncValidators);\n }\n get validator() {\n return this._composedValidatorFn;\n }\n set validator(validatorFn) {\n this._rawValidators = this._composedValidatorFn = validatorFn;\n }\n get asyncValidator() {\n return this._composedAsyncValidatorFn;\n }\n set asyncValidator(asyncValidatorFn) {\n this._rawAsyncValidators = this._composedAsyncValidatorFn = asyncValidatorFn;\n }\n get parent() {\n return this._parent;\n }\n get status() {\n return untracked(this.statusReactive);\n }\n set status(v) {\n untracked(() => this.statusReactive.set(v));\n }\n _status = /*#__PURE__*/computed(() => this.statusReactive(), ...(ngDevMode ? [{\n debugName: \"_status\"\n }] : []));\n statusReactive = /*#__PURE__*/signal(undefined, ...(ngDevMode ? [{\n debugName: \"statusReactive\"\n }] : []));\n get valid() {\n return this.status === VALID;\n }\n get invalid() {\n return this.status === INVALID;\n }\n get pending() {\n return this.status == PENDING;\n }\n get disabled() {\n return this.status === DISABLED;\n }\n get enabled() {\n return this.status !== DISABLED;\n }\n errors;\n get pristine() {\n return untracked(this.pristineReactive);\n }\n set pristine(v) {\n untracked(() => this.pristineReactive.set(v));\n }\n _pristine = /*#__PURE__*/computed(() => this.pristineReactive(), ...(ngDevMode ? [{\n debugName: \"_pristine\"\n }] : []));\n pristineReactive = /*#__PURE__*/signal(true, ...(ngDevMode ? [{\n debugName: \"pristineReactive\"\n }] : []));\n get dirty() {\n return !this.pristine;\n }\n get touched() {\n return untracked(this.touchedReactive);\n }\n set touched(v) {\n untracked(() => this.touchedReactive.set(v));\n }\n _touched = /*#__PURE__*/computed(() => this.touchedReactive(), ...(ngDevMode ? [{\n debugName: \"_touched\"\n }] : []));\n touchedReactive = /*#__PURE__*/signal(false, ...(ngDevMode ? [{\n debugName: \"touchedReactive\"\n }] : []));\n get untouched() {\n return !this.touched;\n }\n _events = /*#__PURE__*/new Subject();\n events = /*#__PURE__*/this._events.asObservable();\n valueChanges;\n statusChanges;\n get updateOn() {\n return this._updateOn ? this._updateOn : this.parent ? this.parent.updateOn : 'change';\n }\n setValidators(validators) {\n this._assignValidators(validators);\n }\n setAsyncValidators(validators) {\n this._assignAsyncValidators(validators);\n }\n addValidators(validators) {\n this.setValidators(addValidators(validators, this._rawValidators));\n }\n addAsyncValidators(validators) {\n this.setAsyncValidators(addValidators(validators, this._rawAsyncValidators));\n }\n removeValidators(validators) {\n this.setValidators(removeValidators(validators, this._rawValidators));\n }\n removeAsyncValidators(validators) {\n this.setAsyncValidators(removeValidators(validators, this._rawAsyncValidators));\n }\n hasValidator(validator) {\n return hasValidator(this._rawValidators, validator);\n }\n hasAsyncValidator(validator) {\n return hasValidator(this._rawAsyncValidators, validator);\n }\n clearValidators() {\n this.validator = null;\n }\n clearAsyncValidators() {\n this.asyncValidator = null;\n }\n markAsTouched(opts = {}) {\n const changed = this.touched === false;\n this.touched = true;\n const sourceControl = opts.sourceControl ?? this;\n if (!opts.onlySelf) {\n this._parent?.markAsTouched({\n ...opts,\n sourceControl\n });\n }\n if (changed && opts.emitEvent !== false) {\n this._events.next(new TouchedChangeEvent(true, sourceControl));\n }\n }\n markAllAsDirty(opts = {}) {\n this.markAsDirty({\n onlySelf: true,\n emitEvent: opts.emitEvent,\n sourceControl: this\n });\n this._forEachChild(control => control.markAllAsDirty(opts));\n }\n markAllAsTouched(opts = {}) {\n this.markAsTouched({\n onlySelf: true,\n emitEvent: opts.emitEvent,\n sourceControl: this\n });\n this._forEachChild(control => control.markAllAsTouched(opts));\n }\n markAsUntouched(opts = {}) {\n const changed = this.touched === true;\n this.touched = false;\n this._pendingTouched = false;\n const sourceControl = opts.sourceControl ?? this;\n this._forEachChild(control => {\n control.markAsUntouched({\n onlySelf: true,\n emitEvent: opts.emitEvent,\n sourceControl\n });\n });\n if (!opts.onlySelf) {\n this._parent?._updateTouched(opts, sourceControl);\n }\n if (changed && opts.emitEvent !== false) {\n this._events.next(new TouchedChangeEvent(false, sourceControl));\n }\n }\n markAsDirty(opts = {}) {\n const changed = this.pristine === true;\n this.pristine = false;\n const sourceControl = opts.sourceControl ?? this;\n if (!opts.onlySelf) {\n this._parent?.markAsDirty({\n ...opts,\n sourceControl\n });\n }\n if (changed && opts.emitEvent !== false) {\n this._events.next(new PristineChangeEvent(false, sourceControl));\n }\n }\n markAsPristine(opts = {}) {\n const changed = this.pristine === false;\n this.pristine = true;\n this._pendingDirty = false;\n const sourceControl = opts.sourceControl ?? this;\n this._forEachChild(control => {\n control.markAsPristine({\n onlySelf: true,\n emitEvent: opts.emitEvent\n });\n });\n if (!opts.onlySelf) {\n this._parent?._updatePristine(opts, sourceControl);\n }\n if (changed && opts.emitEvent !== false) {\n this._events.next(new PristineChangeEvent(true, sourceControl));\n }\n }\n markAsPending(opts = {}) {\n this.status = PENDING;\n const sourceControl = opts.sourceControl ?? this;\n if (opts.emitEvent !== false) {\n this._events.next(new StatusChangeEvent(this.status, sourceControl));\n this.statusChanges.emit(this.status);\n }\n if (!opts.onlySelf) {\n this._parent?.markAsPending({\n ...opts,\n sourceControl\n });\n }\n }\n disable(opts = {}) {\n const skipPristineCheck = this._parentMarkedDirty(opts.onlySelf);\n this.status = DISABLED;\n this.errors = null;\n this._forEachChild(control => {\n control.disable({\n ...opts,\n onlySelf: true\n });\n });\n this._updateValue();\n const sourceControl = opts.sourceControl ?? this;\n if (opts.emitEvent !== false) {\n this._events.next(new ValueChangeEvent(this.value, sourceControl));\n this._events.next(new StatusChangeEvent(this.status, sourceControl));\n this.valueChanges.emit(this.value);\n this.statusChanges.emit(this.status);\n }\n this._updateAncestors({\n ...opts,\n skipPristineCheck\n }, this);\n this._onDisabledChange.forEach(changeFn => changeFn(true));\n }\n enable(opts = {}) {\n const skipPristineCheck = this._parentMarkedDirty(opts.onlySelf);\n this.status = VALID;\n this._forEachChild(control => {\n control.enable({\n ...opts,\n onlySelf: true\n });\n });\n this.updateValueAndValidity({\n onlySelf: true,\n emitEvent: opts.emitEvent\n });\n this._updateAncestors({\n ...opts,\n skipPristineCheck\n }, this);\n this._onDisabledChange.forEach(changeFn => changeFn(false));\n }\n _updateAncestors(opts, sourceControl) {\n if (!opts.onlySelf) {\n this._parent?.updateValueAndValidity(opts);\n if (!opts.skipPristineCheck) {\n this._parent?._updatePristine({}, sourceControl);\n }\n this._parent?._updateTouched({}, sourceControl);\n }\n }\n setParent(parent) {\n this._parent = parent;\n }\n getRawValue() {\n return this.value;\n }\n updateValueAndValidity(opts = {}) {\n this._setInitialStatus();\n this._updateValue();\n if (this.enabled) {\n const shouldHaveEmitted = this._cancelExistingSubscription();\n this.errors = this._runValidator();\n this.status = this._calculateStatus();\n if (this.status === VALID || this.status === PENDING) {\n this._runAsyncValidator(shouldHaveEmitted, opts.emitEvent);\n }\n }\n const sourceControl = opts.sourceControl ?? this;\n if (opts.emitEvent !== false) {\n this._events.next(new ValueChangeEvent(this.value, sourceControl));\n this._events.next(new StatusChangeEvent(this.status, sourceControl));\n this.valueChanges.emit(this.value);\n this.statusChanges.emit(this.status);\n }\n if (!opts.onlySelf) {\n this._parent?.updateValueAndValidity({\n ...opts,\n sourceControl\n });\n }\n }\n _updateTreeValidity(opts = {\n emitEvent: true\n }) {\n this._forEachChild(ctrl => ctrl._updateTreeValidity(opts));\n this.updateValueAndValidity({\n onlySelf: true,\n emitEvent: opts.emitEvent\n });\n }\n _setInitialStatus() {\n this.status = this._allControlsDisabled() ? DISABLED : VALID;\n }\n _runValidator() {\n return this.validator ? this.validator(this) : null;\n }\n _runAsyncValidator(shouldHaveEmitted, emitEvent) {\n if (this.asyncValidator) {\n this.status = PENDING;\n this._hasOwnPendingAsyncValidator = {\n emitEvent: emitEvent !== false,\n shouldHaveEmitted: shouldHaveEmitted !== false\n };\n const obs = toObservable(this.asyncValidator(this));\n this._asyncValidationSubscription = obs.subscribe(errors => {\n this._hasOwnPendingAsyncValidator = null;\n this.setErrors(errors, {\n emitEvent,\n shouldHaveEmitted\n });\n });\n }\n }\n _cancelExistingSubscription() {\n if (this._asyncValidationSubscription) {\n this._asyncValidationSubscription.unsubscribe();\n const shouldHaveEmitted = (this._hasOwnPendingAsyncValidator?.emitEvent || this._hasOwnPendingAsyncValidator?.shouldHaveEmitted) ?? false;\n this._hasOwnPendingAsyncValidator = null;\n return shouldHaveEmitted;\n }\n return false;\n }\n setErrors(errors, opts = {}) {\n this.errors = errors;\n this._updateControlsErrors(opts.emitEvent !== false, this, opts.shouldHaveEmitted);\n }\n get(path) {\n let currPath = path;\n if (currPath == null) return null;\n if (!Array.isArray(currPath)) currPath = currPath.split('.');\n if (currPath.length === 0) return null;\n return currPath.reduce((control, name) => control && control._find(name), this);\n }\n getError(errorCode, path) {\n const control = path ? this.get(path) : this;\n return control?.errors ? control.errors[errorCode] : null;\n }\n hasError(errorCode, path) {\n return !!this.getError(errorCode, path);\n }\n get root() {\n let x = this;\n while (x._parent) {\n x = x._parent;\n }\n return x;\n }\n _updateControlsErrors(emitEvent, changedControl, shouldHaveEmitted) {\n this.status = this._calculateStatus();\n if (emitEvent) {\n this.statusChanges.emit(this.status);\n }\n if (emitEvent || shouldHaveEmitted) {\n this._events.next(new StatusChangeEvent(this.status, changedControl));\n }\n if (this._parent) {\n this._parent._updateControlsErrors(emitEvent, changedControl, shouldHaveEmitted);\n }\n }\n _initObservables() {\n this.valueChanges = new EventEmitter();\n this.statusChanges = new EventEmitter();\n }\n _calculateStatus() {\n if (this._allControlsDisabled()) return DISABLED;\n if (this.errors) return INVALID;\n if (this._hasOwnPendingAsyncValidator || this._anyControlsHaveStatus(PENDING)) return PENDING;\n if (this._anyControlsHaveStatus(INVALID)) return INVALID;\n return VALID;\n }\n _anyControlsHaveStatus(status) {\n return this._anyControls(control => control.status === status);\n }\n _anyControlsDirty() {\n return this._anyControls(control => control.dirty);\n }\n _anyControlsTouched() {\n return this._anyControls(control => control.touched);\n }\n _updatePristine(opts, changedControl) {\n const newPristine = !this._anyControlsDirty();\n const changed = this.pristine !== newPristine;\n this.pristine = newPristine;\n if (!opts.onlySelf) {\n this._parent?._updatePristine(opts, changedControl);\n }\n if (changed) {\n this._events.next(new PristineChangeEvent(this.pristine, changedControl));\n }\n }\n _updateTouched(opts = {}, changedControl) {\n this.touched = this._anyControlsTouched();\n this._events.next(new TouchedChangeEvent(this.touched, changedControl));\n if (!opts.onlySelf) {\n this._parent?._updateTouched(opts, changedControl);\n }\n }\n _onDisabledChange = [];\n _registerOnCollectionChange(fn) {\n this._onCollectionChange = fn;\n }\n _setUpdateStrategy(opts) {\n if (isOptionsObj(opts) && opts.updateOn != null) {\n this._updateOn = opts.updateOn;\n }\n }\n _parentMarkedDirty(onlySelf) {\n return !onlySelf && !!this._parent?.dirty && !this._parent._anyControlsDirty();\n }\n _find(name) {\n return null;\n }\n _assignValidators(validators) {\n this._rawValidators = Array.isArray(validators) ? validators.slice() : validators;\n this._composedValidatorFn = coerceToValidator(this._rawValidators);\n }\n _assignAsyncValidators(validators) {\n this._rawAsyncValidators = Array.isArray(validators) ? validators.slice() : validators;\n this._composedAsyncValidatorFn = coerceToAsyncValidator(this._rawAsyncValidators);\n }\n}\nclass FormGroup extends AbstractControl {\n constructor(controls, validatorOrOpts, asyncValidator) {\n super(pickValidators(validatorOrOpts), pickAsyncValidators(asyncValidator, validatorOrOpts));\n (typeof ngDevMode === 'undefined' || ngDevMode) && validateFormGroupControls(controls);\n this.controls = controls;\n this._initObservables();\n this._setUpdateStrategy(validatorOrOpts);\n this._setUpControls();\n this.updateValueAndValidity({\n onlySelf: true,\n emitEvent: !!this.asyncValidator\n });\n }\n controls;\n registerControl(name, control) {\n if (this.controls[name]) return this.controls[name];\n this.controls[name] = control;\n control.setParent(this);\n control._registerOnCollectionChange(this._onCollectionChange);\n return control;\n }\n addControl(name, control, options = {}) {\n this.registerControl(name, control);\n this.updateValueAndValidity({\n emitEvent: options.emitEvent\n });\n this._onCollectionChange();\n }\n removeControl(name, options = {}) {\n if (this.controls[name]) this.controls[name]._registerOnCollectionChange(() => {});\n delete this.controls[name];\n this.updateValueAndValidity({\n emitEvent: options.emitEvent\n });\n this._onCollectionChange();\n }\n setControl(name, control, options = {}) {\n if (this.controls[name]) this.controls[name]._registerOnCollectionChange(() => {});\n delete this.controls[name];\n if (control) this.registerControl(name, control);\n this.updateValueAndValidity({\n emitEvent: options.emitEvent\n });\n this._onCollectionChange();\n }\n contains(controlName) {\n return this.controls.hasOwnProperty(controlName) && this.controls[controlName].enabled;\n }\n setValue(value, options = {}) {\n assertAllValuesPresent(this, true, value);\n Object.keys(value).forEach(name => {\n assertControlPresent(this, true, name);\n this.controls[name].setValue(value[name], {\n onlySelf: true,\n emitEvent: options.emitEvent\n });\n });\n this.updateValueAndValidity(options);\n }\n patchValue(value, options = {}) {\n if (value == null) return;\n Object.keys(value).forEach(name => {\n const control = this.controls[name];\n if (control) {\n control.patchValue(value[name], {\n onlySelf: true,\n emitEvent: options.emitEvent\n });\n }\n });\n this.updateValueAndValidity(options);\n }\n reset(value = {}, options = {}) {\n this._forEachChild((control, name) => {\n control.reset(value ? value[name] : null, {\n ...options,\n onlySelf: true\n });\n });\n this._updatePristine(options, this);\n this._updateTouched(options, this);\n this.updateValueAndValidity(options);\n if (options?.emitEvent !== false) {\n this._events.next(new FormResetEvent(this));\n }\n }\n getRawValue() {\n return this._reduceChildren({}, (acc, control, name) => {\n acc[name] = control.getRawValue();\n return acc;\n });\n }\n _syncPendingControls() {\n let subtreeUpdated = this._reduceChildren(false, (updated, child) => {\n return child._syncPendingControls() ? true : updated;\n });\n if (subtreeUpdated) this.updateValueAndValidity({\n onlySelf: true\n });\n return subtreeUpdated;\n }\n _forEachChild(cb) {\n Object.keys(this.controls).forEach(key => {\n const control = this.controls[key];\n control && cb(control, key);\n });\n }\n _setUpControls() {\n this._forEachChild(control => {\n control.setParent(this);\n control._registerOnCollectionChange(this._onCollectionChange);\n });\n }\n _updateValue() {\n this.value = this._reduceValue();\n }\n _anyControls(condition) {\n for (const [controlName, control] of Object.entries(this.controls)) {\n if (this.contains(controlName) && condition(control)) {\n return true;\n }\n }\n return false;\n }\n _reduceValue() {\n let acc = {};\n return this._reduceChildren(acc, (acc, control, name) => {\n if (control.enabled || this.disabled) {\n acc[name] = control.value;\n }\n return acc;\n });\n }\n _reduceChildren(initValue, fn) {\n let res = initValue;\n this._forEachChild((control, name) => {\n res = fn(res, control, name);\n });\n return res;\n }\n _allControlsDisabled() {\n for (const controlName of Object.keys(this.controls)) {\n if (this.controls[controlName].enabled) {\n return false;\n }\n }\n return Object.keys(this.controls).length > 0 || this.disabled;\n }\n _find(name) {\n return this.controls.hasOwnProperty(name) ? this.controls[name] : null;\n }\n}\nfunction validateFormGroupControls(controls) {\n const invalidKeys = Object.keys(controls).filter(key => key.includes('.'));\n if (invalidKeys.length > 0) {\n console.warn(`FormGroup keys cannot include \\`.\\`, please replace the keys for: ${invalidKeys.join(',')}.`);\n }\n}\nconst UntypedFormGroup = FormGroup;\nconst isFormGroup = control => control instanceof FormGroup;\nclass FormRecord extends FormGroup {}\nconst isFormRecord = control => control instanceof FormRecord;\nconst CALL_SET_DISABLED_STATE = /*#__PURE__*/new InjectionToken(typeof ngDevMode === 'undefined' || ngDevMode ? 'CallSetDisabledState' : '', {\n factory: () => setDisabledStateDefault\n});\nconst setDisabledStateDefault = 'always';\nfunction controlPath(name, parent) {\n return [...parent.path, name];\n}\nfunction setUpControl(control, dir, callSetDisabledState = setDisabledStateDefault) {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n if (!control) _throwError(dir, 'Cannot find control with');\n if (!dir.valueAccessor) _throwMissingValueAccessorError(dir);\n }\n setUpValidators(control, dir);\n dir.valueAccessor.writeValue(control.value);\n if (control.disabled || callSetDisabledState === 'always') {\n dir.valueAccessor.setDisabledState?.(control.disabled);\n }\n setUpViewChangePipeline(control, dir);\n setUpModelChangePipeline(control, dir);\n setUpBlurPipeline(control, dir);\n setUpDisabledChangeHandler(control, dir);\n}\nfunction cleanUpControl(control, dir, validateControlPresenceOnChange = true) {\n const noop = () => {\n if (validateControlPresenceOnChange && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n _noControlError(dir);\n }\n };\n dir?.valueAccessor?.registerOnChange(noop);\n dir?.valueAccessor?.registerOnTouched(noop);\n cleanUpValidators(control, dir);\n if (control) {\n dir._invokeOnDestroyCallbacks();\n control._registerOnCollectionChange(() => {});\n }\n}\nfunction registerOnValidatorChange(validators, onChange) {\n validators.forEach(validator => {\n if (validator.registerOnValidatorChange) validator.registerOnValidatorChange(onChange);\n });\n}\nfunction setUpDisabledChangeHandler(control, dir) {\n if (dir.valueAccessor.setDisabledState) {\n const onDisabledChange = isDisabled => {\n dir.valueAccessor.setDisabledState(isDisabled);\n };\n control.registerOnDisabledChange(onDisabledChange);\n dir._registerOnDestroy(() => {\n control._unregisterOnDisabledChange(onDisabledChange);\n });\n }\n}\nfunction setUpValidators(control, dir) {\n const validators = getControlValidators(control);\n if (dir.validator !== null) {\n control.setValidators(mergeValidators(validators, dir.validator));\n } else if (typeof validators === 'function') {\n control.setValidators([validators]);\n }\n const asyncValidators = getControlAsyncValidators(control);\n if (dir.asyncValidator !== null) {\n control.setAsyncValidators(mergeValidators(asyncValidators, dir.asyncValidator));\n } else if (typeof asyncValidators === 'function') {\n control.setAsyncValidators([asyncValidators]);\n }\n const onValidatorChange = () => control.updateValueAndValidity();\n registerOnValidatorChange(dir._rawValidators, onValidatorChange);\n registerOnValidatorChange(dir._rawAsyncValidators, onValidatorChange);\n}\nfunction cleanUpValidators(control, dir) {\n let isControlUpdated = false;\n if (control !== null) {\n if (dir.validator !== null) {\n const validators = getControlValidators(control);\n if (Array.isArray(validators) && validators.length > 0) {\n const updatedValidators = validators.filter(validator => validator !== dir.validator);\n if (updatedValidators.length !== validators.length) {\n isControlUpdated = true;\n control.setValidators(updatedValidators);\n }\n }\n }\n if (dir.asyncValidator !== null) {\n const asyncValidators = getControlAsyncValidators(control);\n if (Array.isArray(asyncValidators) && asyncValidators.length > 0) {\n const updatedAsyncValidators = asyncValidators.filter(asyncValidator => asyncValidator !== dir.asyncValidator);\n if (updatedAsyncValidators.length !== asyncValidators.length) {\n isControlUpdated = true;\n control.setAsyncValidators(updatedAsyncValidators);\n }\n }\n }\n }\n const noop = () => {};\n registerOnValidatorChange(dir._rawValidators, noop);\n registerOnValidatorChange(dir._rawAsyncValidators, noop);\n return isControlUpdated;\n}\nfunction setUpViewChangePipeline(control, dir) {\n dir.valueAccessor.registerOnChange(newValue => {\n control._pendingValue = newValue;\n control._pendingChange = true;\n control._pendingDirty = true;\n if (control.updateOn === 'change') updateControl(control, dir);\n });\n}\nfunction setUpBlurPipeline(control, dir) {\n dir.valueAccessor.registerOnTouched(() => {\n control._pendingTouched = true;\n if (control.updateOn === 'blur' && control._pendingChange) updateControl(control, dir);\n if (control.updateOn !== 'submit') control.markAsTouched();\n });\n}\nfunction updateControl(control, dir) {\n if (control._pendingDirty) control.markAsDirty();\n control.setValue(control._pendingValue, {\n emitModelToViewChange: false\n });\n dir.viewToModelUpdate(control._pendingValue);\n control._pendingChange = false;\n}\nfunction setUpModelChangePipeline(control, dir) {\n const onChange = (newValue, emitModelEvent) => {\n dir.valueAccessor.writeValue(newValue);\n if (emitModelEvent) dir.viewToModelUpdate(newValue);\n };\n control.registerOnChange(onChange);\n dir._registerOnDestroy(() => {\n control._unregisterOnChange(onChange);\n });\n}\nfunction setUpFormContainer(control, dir) {\n if (control == null && (typeof ngDevMode === 'undefined' || ngDevMode)) _throwError(dir, 'Cannot find control with');\n setUpValidators(control, dir);\n}\nfunction cleanUpFormContainer(control, dir) {\n return cleanUpValidators(control, dir);\n}\nfunction _noControlError(dir) {\n return _throwError(dir, 'There is no FormControl instance attached to form control element with');\n}\nfunction _throwError(dir, message) {\n const messageEnd = _describeControlLocation(dir);\n throw new Error(`${message} ${messageEnd}`);\n}\nfunction _describeControlLocation(dir) {\n const path = dir.path;\n if (path && path.length > 1) return `path: '${path.join(' -> ')}'`;\n if (path?.[0]) return `name: '${path}'`;\n return 'unspecified name attribute';\n}\nfunction _throwMissingValueAccessorError(dir) {\n const loc = _describeControlLocation(dir);\n throw new _RuntimeError(-1203, `No value accessor for form control ${loc}.`);\n}\nfunction _throwInvalidValueAccessorError(dir) {\n const loc = _describeControlLocation(dir);\n throw new _RuntimeError(1200, `Value accessor was not provided as an array for form control with ${loc}. ` + `Check that the \\`NG_VALUE_ACCESSOR\\` token is configured as a \\`multi: true\\` provider.`);\n}\nfunction isPropertyUpdated(changes, viewModel) {\n if (!changes.hasOwnProperty('model')) return false;\n const change = changes['model'];\n if (change.isFirstChange()) return true;\n return !Object.is(viewModel, change.currentValue);\n}\nfunction isBuiltInAccessor(valueAccessor) {\n return Object.getPrototypeOf(valueAccessor.constructor) === BuiltInControlValueAccessor;\n}\nfunction syncPendingControls(form, directives) {\n form._syncPendingControls();\n directives.forEach(dir => {\n const control = dir.control;\n if (control.updateOn === 'submit' && control._pendingChange) {\n dir.viewToModelUpdate(control._pendingValue);\n control._pendingChange = false;\n }\n });\n}\nfunction selectValueAccessor(dir, valueAccessors) {\n if (!valueAccessors) return null;\n if (!Array.isArray(valueAccessors) && (typeof ngDevMode === 'undefined' || ngDevMode)) _throwInvalidValueAccessorError(dir);\n let defaultAccessor = undefined;\n let builtinAccessor = undefined;\n let customAccessor = undefined;\n valueAccessors.forEach(v => {\n if (v.constructor === DefaultValueAccessor) {\n defaultAccessor = v;\n } else if (isBuiltInAccessor(v)) {\n if (builtinAccessor && (typeof ngDevMode === 'undefined' || ngDevMode)) _throwError(dir, 'More than one built-in value accessor matches form control with');\n builtinAccessor = v;\n } else {\n if (customAccessor && (typeof ngDevMode === 'undefined' || ngDevMode)) _throwError(dir, 'More than one custom value accessor matches form control with');\n customAccessor = v;\n }\n });\n if (customAccessor) return customAccessor;\n if (builtinAccessor) return builtinAccessor;\n if (defaultAccessor) return defaultAccessor;\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n _throwError(dir, 'No valid value accessor for form control with');\n }\n return null;\n}\nfunction removeListItem$1(list, el) {\n const index = list.indexOf(el);\n if (index > -1) list.splice(index, 1);\n}\nfunction _ngModelWarning(name, type, instance, warningConfig) {\n if (warningConfig === 'never') return;\n if ((warningConfig === null || warningConfig === 'once') && !type._ngModelWarningSentOnce || warningConfig === 'always' && !instance._ngModelWarningSent) {\n console.warn(ngModelWarning(name));\n type._ngModelWarningSentOnce = true;\n instance._ngModelWarningSent = true;\n }\n}\nconst formDirectiveProvider$2 = {\n provide: ControlContainer,\n useExisting: /*#__PURE__*/forwardRef(() => NgForm)\n};\nconst resolvedPromise$1 = /*#__PURE__*/(() => Promise.resolve())();\nlet NgForm = /*#__PURE__*/(() => {\n class NgForm extends ControlContainer {\n callSetDisabledState;\n get submitted() {\n return untracked(this.submittedReactive);\n }\n _submitted = computed(() => this.submittedReactive(), ...(ngDevMode ? [{\n debugName: \"_submitted\"\n }] : []));\n submittedReactive = signal(false, ...(ngDevMode ? [{\n debugName: \"submittedReactive\"\n }] : []));\n _directives = new Set();\n form;\n ngSubmit = new EventEmitter();\n options;\n constructor(validators, asyncValidators, callSetDisabledState) {\n super();\n this.callSetDisabledState = callSetDisabledState;\n this.form = new FormGroup({}, composeValidators(validators), composeAsyncValidators(asyncValidators));\n }\n ngAfterViewInit() {\n this._setUpdateStrategy();\n }\n get formDirective() {\n return this;\n }\n get control() {\n return this.form;\n }\n get path() {\n return [];\n }\n get controls() {\n return this.form.controls;\n }\n addControl(dir) {\n resolvedPromise$1.then(() => {\n const container = this._findContainer(dir.path);\n dir.control = container.registerControl(dir.name, dir.control);\n setUpControl(dir.control, dir, this.callSetDisabledState);\n dir.control.updateValueAndValidity({\n emitEvent: false\n });\n this._directives.add(dir);\n });\n }\n getControl(dir) {\n return this.form.get(dir.path);\n }\n removeControl(dir) {\n resolvedPromise$1.then(() => {\n const container = this._findContainer(dir.path);\n container?.removeControl(dir.name);\n this._directives.delete(dir);\n });\n }\n addFormGroup(dir) {\n resolvedPromise$1.then(() => {\n const container = this._findContainer(dir.path);\n const group = new FormGroup({});\n setUpFormContainer(group, dir);\n container.registerControl(dir.name, group);\n group.updateValueAndValidity({\n emitEvent: false\n });\n });\n }\n removeFormGroup(dir) {\n resolvedPromise$1.then(() => {\n const container = this._findContainer(dir.path);\n container?.removeControl?.(dir.name);\n });\n }\n getFormGroup(dir) {\n return this.form.get(dir.path);\n }\n updateModel(dir, value) {\n resolvedPromise$1.then(() => {\n const ctrl = this.form.get(dir.path);\n ctrl.setValue(value);\n });\n }\n setValue(value) {\n this.control.setValue(value);\n }\n onSubmit($event) {\n this.submittedReactive.set(true);\n syncPendingControls(this.form, this._directives);\n this.ngSubmit.emit($event);\n this.form._events.next(new FormSubmittedEvent(this.control));\n return $event?.target?.method === 'dialog';\n }\n onReset() {\n this.resetForm();\n }\n resetForm(value = undefined) {\n this.form.reset(value);\n this.submittedReactive.set(false);\n }\n _setUpdateStrategy() {\n if (this.options && this.options.updateOn != null) {\n this.form._updateOn = this.options.updateOn;\n }\n }\n _findContainer(path) {\n path.pop();\n return path.length ? this.form.get(path) : this.form;\n }\n static \u0275fac = function NgForm_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || NgForm)(i0.\u0275\u0275directiveInject(NG_VALIDATORS, 10), i0.\u0275\u0275directiveInject(NG_ASYNC_VALIDATORS, 10), i0.\u0275\u0275directiveInject(CALL_SET_DISABLED_STATE, 8));\n };\n static \u0275dir = /* @__PURE__ */i0.\u0275\u0275defineDirective({\n type: NgForm,\n selectors: [[\"form\", 3, \"ngNoForm\", \"\", 3, \"formGroup\", \"\", 3, \"formArray\", \"\"], [\"ng-form\"], [\"\", \"ngForm\", \"\"]],\n hostBindings: function NgForm_HostBindings(rf, ctx) {\n if (rf & 1) {\n i0.\u0275\u0275listener(\"submit\", function NgForm_submit_HostBindingHandler($event) {\n return ctx.onSubmit($event);\n })(\"reset\", function NgForm_reset_HostBindingHandler() {\n return ctx.onReset();\n });\n }\n },\n inputs: {\n options: [0, \"ngFormOptions\", \"options\"]\n },\n outputs: {\n ngSubmit: \"ngSubmit\"\n },\n exportAs: [\"ngForm\"],\n standalone: false,\n features: [i0.\u0275\u0275ProvidersFeature([formDirectiveProvider$2]), i0.\u0275\u0275InheritDefinitionFeature]\n });\n }\n return NgForm;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nfunction removeListItem(list, el) {\n const index = list.indexOf(el);\n if (index > -1) list.splice(index, 1);\n}\nfunction isFormControlState(formState) {\n return typeof formState === 'object' && formState !== null && Object.keys(formState).length === 2 && 'value' in formState && 'disabled' in formState;\n}\nconst FormControl = class FormControl extends AbstractControl {\n defaultValue = null;\n _onChange = [];\n _pendingValue;\n _pendingChange = false;\n constructor(formState = null, validatorOrOpts, asyncValidator) {\n super(pickValidators(validatorOrOpts), pickAsyncValidators(asyncValidator, validatorOrOpts));\n this._applyFormState(formState);\n this._setUpdateStrategy(validatorOrOpts);\n this._initObservables();\n this.updateValueAndValidity({\n onlySelf: true,\n emitEvent: !!this.asyncValidator\n });\n if (isOptionsObj(validatorOrOpts) && (validatorOrOpts.nonNullable || validatorOrOpts.initialValueIsDefault)) {\n if (isFormControlState(formState)) {\n this.defaultValue = formState.value;\n } else {\n this.defaultValue = formState;\n }\n }\n }\n setValue(value, options = {}) {\n this.value = this._pendingValue = value;\n if (this._onChange.length && options.emitModelToViewChange !== false) {\n this._onChange.forEach(changeFn => changeFn(this.value, options.emitViewToModelChange !== false));\n }\n this.updateValueAndValidity(options);\n }\n patchValue(value, options = {}) {\n this.setValue(value, options);\n }\n reset(formState = this.defaultValue, options = {}) {\n this._applyFormState(formState);\n this.markAsPristine(options);\n this.markAsUntouched(options);\n this.setValue(this.value, options);\n if (options.overwriteDefaultValue) {\n this.defaultValue = this.value;\n }\n this._pendingChange = false;\n if (options?.emitEvent !== false) {\n this._events.next(new FormResetEvent(this));\n }\n }\n _updateValue() {}\n _anyControls(condition) {\n return false;\n }\n _allControlsDisabled() {\n return this.disabled;\n }\n registerOnChange(fn) {\n this._onChange.push(fn);\n }\n _unregisterOnChange(fn) {\n removeListItem(this._onChange, fn);\n }\n registerOnDisabledChange(fn) {\n this._onDisabledChange.push(fn);\n }\n _unregisterOnDisabledChange(fn) {\n removeListItem(this._onDisabledChange, fn);\n }\n _forEachChild(cb) {}\n _syncPendingControls() {\n if (this.updateOn === 'submit') {\n if (this._pendingDirty) this.markAsDirty();\n if (this._pendingTouched) this.markAsTouched();\n if (this._pendingChange) {\n this.setValue(this._pendingValue, {\n onlySelf: true,\n emitModelToViewChange: false\n });\n return true;\n }\n }\n return false;\n }\n _applyFormState(formState) {\n if (isFormControlState(formState)) {\n this.value = this._pendingValue = formState.value;\n formState.disabled ? this.disable({\n onlySelf: true,\n emitEvent: false\n }) : this.enable({\n onlySelf: true,\n emitEvent: false\n });\n } else {\n this.value = this._pendingValue = formState;\n }\n }\n};\nconst UntypedFormControl = FormControl;\nconst isFormControl = control => control instanceof FormControl;\nlet AbstractFormGroupDirective = /*#__PURE__*/(() => {\n class AbstractFormGroupDirective extends ControlContainer {\n _parent;\n ngOnInit() {\n this._checkParentType();\n this.formDirective.addFormGroup(this);\n }\n ngOnDestroy() {\n this.formDirective?.removeFormGroup(this);\n }\n get control() {\n return this.formDirective.getFormGroup(this);\n }\n get path() {\n return controlPath(this.name == null ? this.name : this.name.toString(), this._parent);\n }\n get formDirective() {\n return this._parent ? this._parent.formDirective : null;\n }\n _checkParentType() {}\n static \u0275fac = /* @__PURE__ */(() => {\n let \u0275AbstractFormGroupDirective_BaseFactory;\n return function AbstractFormGroupDirective_Factory(__ngFactoryType__) {\n return (\u0275AbstractFormGroupDirective_BaseFactory || (\u0275AbstractFormGroupDirective_BaseFactory = i0.\u0275\u0275getInheritedFactory(AbstractFormGroupDirective)))(__ngFactoryType__ || AbstractFormGroupDirective);\n };\n })();\n static \u0275dir = /* @__PURE__ */i0.\u0275\u0275defineDirective({\n type: AbstractFormGroupDirective,\n standalone: false,\n features: [i0.\u0275\u0275InheritDefinitionFeature]\n });\n }\n return AbstractFormGroupDirective;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nfunction modelParentException() {\n return new _RuntimeError(1350, `\n ngModel cannot be used to register form controls with a parent formGroup directive. Try using\n formGroup's partner directive \"formControlName\" instead. Example:\n\n ${formControlNameExample}\n\n Or, if you'd like to avoid registering this form control, indicate that it's standalone in ngModelOptions:\n\n Example:\n\n ${ngModelWithFormGroupExample}`);\n}\nfunction formGroupNameException() {\n return new _RuntimeError(1351, `\n ngModel cannot be used to register form controls with a parent formGroupName or formArrayName directive.\n\n Option 1: Use formControlName instead of ngModel (reactive strategy):\n\n ${formGroupNameExample}\n\n Option 2: Update ngModel's parent be ngModelGroup (template-driven strategy):\n\n ${ngModelGroupExample}`);\n}\nfunction missingNameException() {\n return new _RuntimeError(1352, `If ngModel is used within a form tag, either the name attribute must be set or the form\n control must be defined as 'standalone' in ngModelOptions.\n\n Example 1: \n Example 2: `);\n}\nfunction modelGroupParentException() {\n return new _RuntimeError(1353, `\n ngModelGroup cannot be used with a parent formGroup directive.\n\n Option 1: Use formGroupName instead of ngModelGroup (reactive strategy):\n\n ${formGroupNameExample}\n\n Option 2: Use a regular form tag instead of the formGroup directive (template-driven strategy):\n\n ${ngModelGroupExample}`);\n}\nconst modelGroupProvider = {\n provide: ControlContainer,\n useExisting: /*#__PURE__*/forwardRef(() => NgModelGroup)\n};\nlet NgModelGroup = /*#__PURE__*/(() => {\n class NgModelGroup extends AbstractFormGroupDirective {\n name = '';\n constructor(parent, validators, asyncValidators) {\n super();\n this._parent = parent;\n this._setValidators(validators);\n this._setAsyncValidators(asyncValidators);\n }\n _checkParentType() {\n if (!(this._parent instanceof NgModelGroup) && !(this._parent instanceof NgForm) && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw modelGroupParentException();\n }\n }\n static \u0275fac = function NgModelGroup_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || NgModelGroup)(i0.\u0275\u0275directiveInject(ControlContainer, 5), i0.\u0275\u0275directiveInject(NG_VALIDATORS, 10), i0.\u0275\u0275directiveInject(NG_ASYNC_VALIDATORS, 10));\n };\n static \u0275dir = /* @__PURE__ */i0.\u0275\u0275defineDirective({\n type: NgModelGroup,\n selectors: [[\"\", \"ngModelGroup\", \"\"]],\n inputs: {\n name: [0, \"ngModelGroup\", \"name\"]\n },\n exportAs: [\"ngModelGroup\"],\n standalone: false,\n features: [i0.\u0275\u0275ProvidersFeature([modelGroupProvider]), i0.\u0275\u0275InheritDefinitionFeature]\n });\n }\n return NgModelGroup;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst formControlBinding$1 = {\n provide: NgControl,\n useExisting: /*#__PURE__*/forwardRef(() => NgModel)\n};\nconst resolvedPromise = /*#__PURE__*/(() => Promise.resolve())();\nlet NgModel = /*#__PURE__*/(() => {\n class NgModel extends NgControl {\n _changeDetectorRef;\n callSetDisabledState;\n control = new FormControl();\n static ngAcceptInputType_isDisabled;\n _registered = false;\n viewModel;\n name = '';\n isDisabled;\n model;\n options;\n update = new EventEmitter();\n constructor(parent, validators, asyncValidators, valueAccessors, _changeDetectorRef, callSetDisabledState) {\n super();\n this._changeDetectorRef = _changeDetectorRef;\n this.callSetDisabledState = callSetDisabledState;\n this._parent = parent;\n this._setValidators(validators);\n this._setAsyncValidators(asyncValidators);\n this.valueAccessor = selectValueAccessor(this, valueAccessors);\n }\n ngOnChanges(changes) {\n this._checkForErrors();\n if (!this._registered || 'name' in changes) {\n if (this._registered) {\n this._checkName();\n if (this.formDirective) {\n const oldName = changes['name'].previousValue;\n this.formDirective.removeControl({\n name: oldName,\n path: this._getPath(oldName)\n });\n }\n }\n this._setUpControl();\n }\n if ('isDisabled' in changes) {\n this._updateDisabled(changes);\n }\n if (isPropertyUpdated(changes, this.viewModel)) {\n this._updateValue(this.model);\n this.viewModel = this.model;\n }\n }\n ngOnDestroy() {\n this.formDirective?.removeControl(this);\n }\n get path() {\n return this._getPath(this.name);\n }\n get formDirective() {\n return this._parent ? this._parent.formDirective : null;\n }\n viewToModelUpdate(newValue) {\n this.viewModel = newValue;\n this.update.emit(newValue);\n }\n _setUpControl() {\n this._setUpdateStrategy();\n this._isStandalone() ? this._setUpStandalone() : this.formDirective.addControl(this);\n this._registered = true;\n }\n _setUpdateStrategy() {\n if (this.options && this.options.updateOn != null) {\n this.control._updateOn = this.options.updateOn;\n }\n }\n _isStandalone() {\n return !this._parent || !!(this.options && this.options.standalone);\n }\n _setUpStandalone() {\n setUpControl(this.control, this, this.callSetDisabledState);\n this.control.updateValueAndValidity({\n emitEvent: false\n });\n }\n _checkForErrors() {\n if ((typeof ngDevMode === 'undefined' || ngDevMode) && !this._isStandalone()) {\n checkParentType$1(this._parent);\n }\n this._checkName();\n }\n _checkName() {\n if (this.options && this.options.name) this.name = this.options.name;\n if (!this._isStandalone() && !this.name && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw missingNameException();\n }\n }\n _updateValue(value) {\n resolvedPromise.then(() => {\n this.control.setValue(value, {\n emitViewToModelChange: false\n });\n this._changeDetectorRef?.markForCheck();\n });\n }\n _updateDisabled(changes) {\n const disabledValue = changes['isDisabled'].currentValue;\n const isDisabled = disabledValue !== 0 && booleanAttribute(disabledValue);\n resolvedPromise.then(() => {\n if (isDisabled && !this.control.disabled) {\n this.control.disable();\n } else if (!isDisabled && this.control.disabled) {\n this.control.enable();\n }\n this._changeDetectorRef?.markForCheck();\n });\n }\n _getPath(controlName) {\n return this._parent ? controlPath(controlName, this._parent) : [controlName];\n }\n static \u0275fac = function NgModel_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || NgModel)(i0.\u0275\u0275directiveInject(ControlContainer, 9), i0.\u0275\u0275directiveInject(NG_VALIDATORS, 10), i0.\u0275\u0275directiveInject(NG_ASYNC_VALIDATORS, 10), i0.\u0275\u0275directiveInject(NG_VALUE_ACCESSOR, 10), i0.\u0275\u0275directiveInject(ChangeDetectorRef, 8), i0.\u0275\u0275directiveInject(CALL_SET_DISABLED_STATE, 8));\n };\n static \u0275dir = /* @__PURE__ */i0.\u0275\u0275defineDirective({\n type: NgModel,\n selectors: [[\"\", \"ngModel\", \"\", 3, \"formControlName\", \"\", 3, \"formControl\", \"\"]],\n inputs: {\n name: \"name\",\n isDisabled: [0, \"disabled\", \"isDisabled\"],\n model: [0, \"ngModel\", \"model\"],\n options: [0, \"ngModelOptions\", \"options\"]\n },\n outputs: {\n update: \"ngModelChange\"\n },\n exportAs: [\"ngModel\"],\n standalone: false,\n features: [i0.\u0275\u0275ProvidersFeature([formControlBinding$1]), i0.\u0275\u0275InheritDefinitionFeature, i0.\u0275\u0275NgOnChangesFeature]\n });\n }\n return NgModel;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nfunction checkParentType$1(parent) {\n if (!(parent instanceof NgModelGroup) && parent instanceof AbstractFormGroupDirective) {\n throw formGroupNameException();\n } else if (!(parent instanceof NgModelGroup) && !(parent instanceof NgForm)) {\n throw modelParentException();\n }\n}\nlet \u0275NgNoValidate = /*#__PURE__*/(() => {\n class \u0275NgNoValidate {\n static \u0275fac = function \u0275NgNoValidate_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || \u0275NgNoValidate)();\n };\n static \u0275dir = /* @__PURE__ */i0.\u0275\u0275defineDirective({\n type: \u0275NgNoValidate,\n selectors: [[\"form\", 3, \"ngNoForm\", \"\", 3, \"ngNativeValidate\", \"\"]],\n hostAttrs: [\"novalidate\", \"\"],\n standalone: false\n });\n }\n return \u0275NgNoValidate;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst NUMBER_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: /*#__PURE__*/forwardRef(() => NumberValueAccessor),\n multi: true\n};\nlet NumberValueAccessor = /*#__PURE__*/(() => {\n class NumberValueAccessor extends BuiltInControlValueAccessor {\n writeValue(value) {\n const normalizedValue = value == null ? '' : value;\n this.setProperty('value', normalizedValue);\n }\n registerOnChange(fn) {\n this.onChange = value => {\n fn(value == '' ? null : parseFloat(value));\n };\n }\n static \u0275fac = /* @__PURE__ */(() => {\n let \u0275NumberValueAccessor_BaseFactory;\n return function NumberValueAccessor_Factory(__ngFactoryType__) {\n return (\u0275NumberValueAccessor_BaseFactory || (\u0275NumberValueAccessor_BaseFactory = i0.\u0275\u0275getInheritedFactory(NumberValueAccessor)))(__ngFactoryType__ || NumberValueAccessor);\n };\n })();\n static \u0275dir = /* @__PURE__ */i0.\u0275\u0275defineDirective({\n type: NumberValueAccessor,\n selectors: [[\"input\", \"type\", \"number\", \"formControlName\", \"\"], [\"input\", \"type\", \"number\", \"formControl\", \"\"], [\"input\", \"type\", \"number\", \"ngModel\", \"\"]],\n hostBindings: function NumberValueAccessor_HostBindings(rf, ctx) {\n if (rf & 1) {\n i0.\u0275\u0275listener(\"input\", function NumberValueAccessor_input_HostBindingHandler($event) {\n return ctx.onChange($event.target.value);\n })(\"blur\", function NumberValueAccessor_blur_HostBindingHandler() {\n return ctx.onTouched();\n });\n }\n },\n standalone: false,\n features: [i0.\u0275\u0275ProvidersFeature([NUMBER_VALUE_ACCESSOR]), i0.\u0275\u0275InheritDefinitionFeature]\n });\n }\n return NumberValueAccessor;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst RADIO_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: /*#__PURE__*/forwardRef(() => RadioControlValueAccessor),\n multi: true\n};\nfunction throwNameError() {\n throw new _RuntimeError(1202, `\n If you define both a name and a formControlName attribute on your radio button, their values\n must match. Ex: \n `);\n}\nlet RadioControlRegistry = /*#__PURE__*/(() => {\n class RadioControlRegistry {\n _accessors = [];\n add(control, accessor) {\n this._accessors.push([control, accessor]);\n }\n remove(accessor) {\n for (let i = this._accessors.length - 1; i >= 0; --i) {\n if (this._accessors[i][1] === accessor) {\n this._accessors.splice(i, 1);\n return;\n }\n }\n }\n select(accessor) {\n this._accessors.forEach(c => {\n if (this._isSameGroup(c, accessor) && c[1] !== accessor) {\n c[1].fireUncheck(accessor.value);\n }\n });\n }\n _isSameGroup(controlPair, accessor) {\n if (!controlPair[0].control) return false;\n return controlPair[0]._parent === accessor._control._parent && controlPair[1].name === accessor.name;\n }\n static \u0275fac = function RadioControlRegistry_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || RadioControlRegistry)();\n };\n static \u0275prov = /* @__PURE__ */i0.\u0275\u0275defineInjectable({\n token: RadioControlRegistry,\n factory: RadioControlRegistry.\u0275fac,\n providedIn: 'root'\n });\n }\n return RadioControlRegistry;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet RadioControlValueAccessor = /*#__PURE__*/(() => {\n class RadioControlValueAccessor extends BuiltInControlValueAccessor {\n _registry;\n _injector;\n _state;\n _control;\n _fn;\n setDisabledStateFired = false;\n onChange = () => {};\n name;\n formControlName;\n value;\n callSetDisabledState = inject(CALL_SET_DISABLED_STATE, {\n optional: true\n }) ?? setDisabledStateDefault;\n constructor(renderer, elementRef, _registry, _injector) {\n super(renderer, elementRef);\n this._registry = _registry;\n this._injector = _injector;\n }\n ngOnInit() {\n this._control = this._injector.get(NgControl);\n this._checkName();\n this._registry.add(this._control, this);\n }\n ngOnDestroy() {\n this._registry.remove(this);\n }\n writeValue(value) {\n this._state = value === this.value;\n this.setProperty('checked', this._state);\n }\n registerOnChange(fn) {\n this._fn = fn;\n this.onChange = () => {\n fn(this.value);\n this._registry.select(this);\n };\n }\n setDisabledState(isDisabled) {\n if (this.setDisabledStateFired || isDisabled || this.callSetDisabledState === 'whenDisabledForLegacyCode') {\n this.setProperty('disabled', isDisabled);\n }\n this.setDisabledStateFired = true;\n }\n fireUncheck(value) {\n this.writeValue(value);\n }\n _checkName() {\n if (this.name && this.formControlName && this.name !== this.formControlName && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throwNameError();\n }\n if (!this.name && this.formControlName) this.name = this.formControlName;\n }\n static \u0275fac = function RadioControlValueAccessor_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || RadioControlValueAccessor)(i0.\u0275\u0275directiveInject(i0.Renderer2), i0.\u0275\u0275directiveInject(i0.ElementRef), i0.\u0275\u0275directiveInject(RadioControlRegistry), i0.\u0275\u0275directiveInject(i0.Injector));\n };\n static \u0275dir = /* @__PURE__ */i0.\u0275\u0275defineDirective({\n type: RadioControlValueAccessor,\n selectors: [[\"input\", \"type\", \"radio\", \"formControlName\", \"\"], [\"input\", \"type\", \"radio\", \"formControl\", \"\"], [\"input\", \"type\", \"radio\", \"ngModel\", \"\"]],\n hostBindings: function RadioControlValueAccessor_HostBindings(rf, ctx) {\n if (rf & 1) {\n i0.\u0275\u0275listener(\"change\", function RadioControlValueAccessor_change_HostBindingHandler() {\n return ctx.onChange();\n })(\"blur\", function RadioControlValueAccessor_blur_HostBindingHandler() {\n return ctx.onTouched();\n });\n }\n },\n inputs: {\n name: \"name\",\n formControlName: \"formControlName\",\n value: \"value\"\n },\n standalone: false,\n features: [i0.\u0275\u0275ProvidersFeature([RADIO_VALUE_ACCESSOR]), i0.\u0275\u0275InheritDefinitionFeature]\n });\n }\n return RadioControlValueAccessor;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst RANGE_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: /*#__PURE__*/forwardRef(() => RangeValueAccessor),\n multi: true\n};\nlet RangeValueAccessor = /*#__PURE__*/(() => {\n class RangeValueAccessor extends BuiltInControlValueAccessor {\n writeValue(value) {\n this.setProperty('value', parseFloat(value));\n }\n registerOnChange(fn) {\n this.onChange = value => {\n fn(value == '' ? null : parseFloat(value));\n };\n }\n static \u0275fac = /* @__PURE__ */(() => {\n let \u0275RangeValueAccessor_BaseFactory;\n return function RangeValueAccessor_Factory(__ngFactoryType__) {\n return (\u0275RangeValueAccessor_BaseFactory || (\u0275RangeValueAccessor_BaseFactory = i0.\u0275\u0275getInheritedFactory(RangeValueAccessor)))(__ngFactoryType__ || RangeValueAccessor);\n };\n })();\n static \u0275dir = /* @__PURE__ */i0.\u0275\u0275defineDirective({\n type: RangeValueAccessor,\n selectors: [[\"input\", \"type\", \"range\", \"formControlName\", \"\"], [\"input\", \"type\", \"range\", \"formControl\", \"\"], [\"input\", \"type\", \"range\", \"ngModel\", \"\"]],\n hostBindings: function RangeValueAccessor_HostBindings(rf, ctx) {\n if (rf & 1) {\n i0.\u0275\u0275listener(\"change\", function RangeValueAccessor_change_HostBindingHandler($event) {\n return ctx.onChange($event.target.value);\n })(\"input\", function RangeValueAccessor_input_HostBindingHandler($event) {\n return ctx.onChange($event.target.value);\n })(\"blur\", function RangeValueAccessor_blur_HostBindingHandler() {\n return ctx.onTouched();\n });\n }\n },\n standalone: false,\n features: [i0.\u0275\u0275ProvidersFeature([RANGE_VALUE_ACCESSOR]), i0.\u0275\u0275InheritDefinitionFeature]\n });\n }\n return RangeValueAccessor;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nclass FormArray extends AbstractControl {\n constructor(controls, validatorOrOpts, asyncValidator) {\n super(pickValidators(validatorOrOpts), pickAsyncValidators(asyncValidator, validatorOrOpts));\n this.controls = controls;\n this._initObservables();\n this._setUpdateStrategy(validatorOrOpts);\n this._setUpControls();\n this.updateValueAndValidity({\n onlySelf: true,\n emitEvent: !!this.asyncValidator\n });\n }\n controls;\n at(index) {\n return this.controls[this._adjustIndex(index)];\n }\n push(control, options = {}) {\n if (Array.isArray(control)) {\n control.forEach(ctrl => {\n this.controls.push(ctrl);\n this._registerControl(ctrl);\n });\n } else {\n this.controls.push(control);\n this._registerControl(control);\n }\n this.updateValueAndValidity({\n emitEvent: options.emitEvent\n });\n this._onCollectionChange();\n }\n insert(index, control, options = {}) {\n this.controls.splice(index, 0, control);\n this._registerControl(control);\n this.updateValueAndValidity({\n emitEvent: options.emitEvent\n });\n }\n removeAt(index, options = {}) {\n let adjustedIndex = this._adjustIndex(index);\n if (adjustedIndex < 0) adjustedIndex = 0;\n if (this.controls[adjustedIndex]) this.controls[adjustedIndex]._registerOnCollectionChange(() => {});\n this.controls.splice(adjustedIndex, 1);\n this.updateValueAndValidity({\n emitEvent: options.emitEvent\n });\n }\n setControl(index, control, options = {}) {\n let adjustedIndex = this._adjustIndex(index);\n if (adjustedIndex < 0) adjustedIndex = 0;\n if (this.controls[adjustedIndex]) this.controls[adjustedIndex]._registerOnCollectionChange(() => {});\n this.controls.splice(adjustedIndex, 1);\n if (control) {\n this.controls.splice(adjustedIndex, 0, control);\n this._registerControl(control);\n }\n this.updateValueAndValidity({\n emitEvent: options.emitEvent\n });\n this._onCollectionChange();\n }\n get length() {\n return this.controls.length;\n }\n setValue(value, options = {}) {\n assertAllValuesPresent(this, false, value);\n value.forEach((newValue, index) => {\n assertControlPresent(this, false, index);\n this.at(index).setValue(newValue, {\n onlySelf: true,\n emitEvent: options.emitEvent\n });\n });\n this.updateValueAndValidity(options);\n }\n patchValue(value, options = {}) {\n if (value == null) return;\n value.forEach((newValue, index) => {\n if (this.at(index)) {\n this.at(index).patchValue(newValue, {\n onlySelf: true,\n emitEvent: options.emitEvent\n });\n }\n });\n this.updateValueAndValidity(options);\n }\n reset(value = [], options = {}) {\n this._forEachChild((control, index) => {\n control.reset(value[index], {\n ...options,\n onlySelf: true\n });\n });\n this._updatePristine(options, this);\n this._updateTouched(options, this);\n this.updateValueAndValidity(options);\n if (options?.emitEvent !== false) {\n this._events.next(new FormResetEvent(this));\n }\n }\n getRawValue() {\n return this.controls.map(control => control.getRawValue());\n }\n clear(options = {}) {\n if (this.controls.length < 1) return;\n this._forEachChild(control => control._registerOnCollectionChange(() => {}));\n this.controls.splice(0);\n this.updateValueAndValidity({\n emitEvent: options.emitEvent\n });\n }\n _adjustIndex(index) {\n return index < 0 ? index + this.length : index;\n }\n _syncPendingControls() {\n let subtreeUpdated = this.controls.reduce((updated, child) => {\n return child._syncPendingControls() ? true : updated;\n }, false);\n if (subtreeUpdated) this.updateValueAndValidity({\n onlySelf: true\n });\n return subtreeUpdated;\n }\n _forEachChild(cb) {\n this.controls.forEach((control, index) => {\n cb(control, index);\n });\n }\n _updateValue() {\n this.value = this.controls.filter(control => control.enabled || this.disabled).map(control => control.value);\n }\n _anyControls(condition) {\n return this.controls.some(control => control.enabled && condition(control));\n }\n _setUpControls() {\n this._forEachChild(control => this._registerControl(control));\n }\n _allControlsDisabled() {\n for (const control of this.controls) {\n if (control.enabled) return false;\n }\n return this.controls.length > 0 || this.disabled;\n }\n _registerControl(control) {\n control.setParent(this);\n control._registerOnCollectionChange(this._onCollectionChange);\n }\n _find(name) {\n return this.at(name) ?? null;\n }\n}\nconst UntypedFormArray = FormArray;\nconst isFormArray = control => control instanceof FormArray;\nlet AbstractFormDirective = /*#__PURE__*/(() => {\n class AbstractFormDirective extends ControlContainer {\n callSetDisabledState;\n get submitted() {\n return untracked(this._submittedReactive);\n }\n set submitted(value) {\n this._submittedReactive.set(value);\n }\n _submitted = computed(() => this._submittedReactive(), ...(ngDevMode ? [{\n debugName: \"_submitted\"\n }] : []));\n _submittedReactive = signal(false, ...(ngDevMode ? [{\n debugName: \"_submittedReactive\"\n }] : []));\n _oldForm;\n _onCollectionChange = () => this._updateDomValue();\n directives = [];\n constructor(validators, asyncValidators, callSetDisabledState) {\n super();\n this.callSetDisabledState = callSetDisabledState;\n this._setValidators(validators);\n this._setAsyncValidators(asyncValidators);\n }\n ngOnChanges(changes) {\n this.onChanges(changes);\n }\n ngOnDestroy() {\n this.onDestroy();\n }\n onChanges(changes) {\n this._checkFormPresent();\n if (changes.hasOwnProperty('form')) {\n this._updateValidators();\n this._updateDomValue();\n this._updateRegistrations();\n this._oldForm = this.form;\n }\n }\n onDestroy() {\n if (this.form) {\n cleanUpValidators(this.form, this);\n if (this.form._onCollectionChange === this._onCollectionChange) {\n this.form._registerOnCollectionChange(() => {});\n }\n }\n }\n get formDirective() {\n return this;\n }\n get path() {\n return [];\n }\n addControl(dir) {\n const ctrl = this.form.get(dir.path);\n setUpControl(ctrl, dir, this.callSetDisabledState);\n ctrl.updateValueAndValidity({\n emitEvent: false\n });\n this.directives.push(dir);\n return ctrl;\n }\n getControl(dir) {\n return this.form.get(dir.path);\n }\n removeControl(dir) {\n cleanUpControl(dir.control || null, dir, false);\n removeListItem$1(this.directives, dir);\n }\n addFormGroup(dir) {\n this._setUpFormContainer(dir);\n }\n removeFormGroup(dir) {\n this._cleanUpFormContainer(dir);\n }\n getFormGroup(dir) {\n return this.form.get(dir.path);\n }\n getFormArray(dir) {\n return this.form.get(dir.path);\n }\n addFormArray(dir) {\n this._setUpFormContainer(dir);\n }\n removeFormArray(dir) {\n this._cleanUpFormContainer(dir);\n }\n updateModel(dir, value) {\n const ctrl = this.form.get(dir.path);\n ctrl.setValue(value);\n }\n onReset() {\n this.resetForm();\n }\n resetForm(value = undefined, options = {}) {\n this.form.reset(value, options);\n this._submittedReactive.set(false);\n }\n onSubmit($event) {\n this.submitted = true;\n syncPendingControls(this.form, this.directives);\n this.ngSubmit.emit($event);\n this.form._events.next(new FormSubmittedEvent(this.control));\n return $event?.target?.method === 'dialog';\n }\n _updateDomValue() {\n this.directives.forEach(dir => {\n const oldCtrl = dir.control;\n const newCtrl = this.form.get(dir.path);\n if (oldCtrl !== newCtrl) {\n cleanUpControl(oldCtrl || null, dir);\n if (isFormControl(newCtrl)) {\n setUpControl(newCtrl, dir, this.callSetDisabledState);\n dir.control = newCtrl;\n }\n }\n });\n this.form._updateTreeValidity({\n emitEvent: false\n });\n }\n _setUpFormContainer(dir) {\n const ctrl = this.form.get(dir.path);\n setUpFormContainer(ctrl, dir);\n ctrl.updateValueAndValidity({\n emitEvent: false\n });\n }\n _cleanUpFormContainer(dir) {\n const ctrl = this.form?.get(dir.path);\n if (ctrl) {\n const isControlUpdated = cleanUpFormContainer(ctrl, dir);\n if (isControlUpdated) {\n ctrl.updateValueAndValidity({\n emitEvent: false\n });\n }\n }\n }\n _updateRegistrations() {\n this.form._registerOnCollectionChange(this._onCollectionChange);\n this._oldForm?._registerOnCollectionChange(() => {});\n }\n _updateValidators() {\n setUpValidators(this.form, this);\n if (this._oldForm) {\n cleanUpValidators(this._oldForm, this);\n }\n }\n _checkFormPresent() {\n if (!this.form && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw missingFormException();\n }\n }\n static \u0275fac = function AbstractFormDirective_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || AbstractFormDirective)(i0.\u0275\u0275directiveInject(NG_VALIDATORS, 10), i0.\u0275\u0275directiveInject(NG_ASYNC_VALIDATORS, 10), i0.\u0275\u0275directiveInject(CALL_SET_DISABLED_STATE, 8));\n };\n static \u0275dir = /* @__PURE__ */i0.\u0275\u0275defineDirective({\n type: AbstractFormDirective,\n features: [i0.\u0275\u0275InheritDefinitionFeature, i0.\u0275\u0275NgOnChangesFeature]\n });\n }\n return AbstractFormDirective;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst formDirectiveProvider$1 = {\n provide: ControlContainer,\n useExisting: /*#__PURE__*/forwardRef(() => FormArrayDirective)\n};\nlet FormArrayDirective = /*#__PURE__*/(() => {\n class FormArrayDirective extends AbstractFormDirective {\n form = null;\n ngSubmit = new EventEmitter();\n get control() {\n return this.form;\n }\n static \u0275fac = /* @__PURE__ */(() => {\n let \u0275FormArrayDirective_BaseFactory;\n return function FormArrayDirective_Factory(__ngFactoryType__) {\n return (\u0275FormArrayDirective_BaseFactory || (\u0275FormArrayDirective_BaseFactory = i0.\u0275\u0275getInheritedFactory(FormArrayDirective)))(__ngFactoryType__ || FormArrayDirective);\n };\n })();\n static \u0275dir = /* @__PURE__ */i0.\u0275\u0275defineDirective({\n type: FormArrayDirective,\n selectors: [[\"\", \"formArray\", \"\"]],\n hostBindings: function FormArrayDirective_HostBindings(rf, ctx) {\n if (rf & 1) {\n i0.\u0275\u0275listener(\"submit\", function FormArrayDirective_submit_HostBindingHandler($event) {\n return ctx.onSubmit($event);\n })(\"reset\", function FormArrayDirective_reset_HostBindingHandler() {\n return ctx.onReset();\n });\n }\n },\n inputs: {\n form: [0, \"formArray\", \"form\"]\n },\n outputs: {\n ngSubmit: \"ngSubmit\"\n },\n exportAs: [\"ngForm\"],\n standalone: false,\n features: [i0.\u0275\u0275ProvidersFeature([formDirectiveProvider$1]), i0.\u0275\u0275InheritDefinitionFeature]\n });\n }\n return FormArrayDirective;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst NG_MODEL_WITH_FORM_CONTROL_WARNING = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'NgModelWithFormControlWarning' : '');\nconst formControlBinding = {\n provide: NgControl,\n useExisting: /*#__PURE__*/forwardRef(() => FormControlDirective)\n};\nlet FormControlDirective = /*#__PURE__*/(() => {\n class FormControlDirective extends NgControl {\n _ngModelWarningConfig;\n callSetDisabledState;\n viewModel;\n form;\n set isDisabled(isDisabled) {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n console.warn(disabledAttrWarning);\n }\n }\n model;\n update = new EventEmitter();\n static _ngModelWarningSentOnce = false;\n _ngModelWarningSent = false;\n constructor(validators, asyncValidators, valueAccessors, _ngModelWarningConfig, callSetDisabledState) {\n super();\n this._ngModelWarningConfig = _ngModelWarningConfig;\n this.callSetDisabledState = callSetDisabledState;\n this._setValidators(validators);\n this._setAsyncValidators(asyncValidators);\n this.valueAccessor = selectValueAccessor(this, valueAccessors);\n }\n ngOnChanges(changes) {\n if (this._isControlChanged(changes)) {\n const previousForm = changes['form'].previousValue;\n if (previousForm) {\n cleanUpControl(previousForm, this, false);\n }\n setUpControl(this.form, this, this.callSetDisabledState);\n this.form.updateValueAndValidity({\n emitEvent: false\n });\n }\n if (isPropertyUpdated(changes, this.viewModel)) {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n _ngModelWarning('formControl', FormControlDirective, this, this._ngModelWarningConfig);\n }\n this.form.setValue(this.model);\n this.viewModel = this.model;\n }\n }\n ngOnDestroy() {\n if (this.form) {\n cleanUpControl(this.form, this, false);\n }\n }\n get path() {\n return [];\n }\n get control() {\n return this.form;\n }\n viewToModelUpdate(newValue) {\n this.viewModel = newValue;\n this.update.emit(newValue);\n }\n _isControlChanged(changes) {\n return changes.hasOwnProperty('form');\n }\n static \u0275fac = function FormControlDirective_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || FormControlDirective)(i0.\u0275\u0275directiveInject(NG_VALIDATORS, 10), i0.\u0275\u0275directiveInject(NG_ASYNC_VALIDATORS, 10), i0.\u0275\u0275directiveInject(NG_VALUE_ACCESSOR, 10), i0.\u0275\u0275directiveInject(NG_MODEL_WITH_FORM_CONTROL_WARNING, 8), i0.\u0275\u0275directiveInject(CALL_SET_DISABLED_STATE, 8));\n };\n static \u0275dir = /* @__PURE__ */i0.\u0275\u0275defineDirective({\n type: FormControlDirective,\n selectors: [[\"\", \"formControl\", \"\"]],\n inputs: {\n form: [0, \"formControl\", \"form\"],\n isDisabled: [0, \"disabled\", \"isDisabled\"],\n model: [0, \"ngModel\", \"model\"]\n },\n outputs: {\n update: \"ngModelChange\"\n },\n exportAs: [\"ngForm\"],\n standalone: false,\n features: [i0.\u0275\u0275ProvidersFeature([formControlBinding]), i0.\u0275\u0275InheritDefinitionFeature, i0.\u0275\u0275NgOnChangesFeature]\n });\n }\n return FormControlDirective;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst formGroupNameProvider = {\n provide: ControlContainer,\n useExisting: /*#__PURE__*/forwardRef(() => FormGroupName)\n};\nlet FormGroupName = /*#__PURE__*/(() => {\n class FormGroupName extends AbstractFormGroupDirective {\n name = null;\n constructor(parent, validators, asyncValidators) {\n super();\n this._parent = parent;\n this._setValidators(validators);\n this._setAsyncValidators(asyncValidators);\n }\n _checkParentType() {\n if (hasInvalidParent(this._parent) && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw groupParentException();\n }\n }\n static \u0275fac = function FormGroupName_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || FormGroupName)(i0.\u0275\u0275directiveInject(ControlContainer, 13), i0.\u0275\u0275directiveInject(NG_VALIDATORS, 10), i0.\u0275\u0275directiveInject(NG_ASYNC_VALIDATORS, 10));\n };\n static \u0275dir = /* @__PURE__ */i0.\u0275\u0275defineDirective({\n type: FormGroupName,\n selectors: [[\"\", \"formGroupName\", \"\"]],\n inputs: {\n name: [0, \"formGroupName\", \"name\"]\n },\n standalone: false,\n features: [i0.\u0275\u0275ProvidersFeature([formGroupNameProvider]), i0.\u0275\u0275InheritDefinitionFeature]\n });\n }\n return FormGroupName;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst formArrayNameProvider = {\n provide: ControlContainer,\n useExisting: /*#__PURE__*/forwardRef(() => FormArrayName)\n};\nlet FormArrayName = /*#__PURE__*/(() => {\n class FormArrayName extends ControlContainer {\n _parent;\n name = null;\n constructor(parent, validators, asyncValidators) {\n super();\n this._parent = parent;\n this._setValidators(validators);\n this._setAsyncValidators(asyncValidators);\n }\n ngOnInit() {\n if (hasInvalidParent(this._parent) && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw arrayParentException();\n }\n this.formDirective.addFormArray(this);\n }\n ngOnDestroy() {\n this.formDirective?.removeFormArray(this);\n }\n get control() {\n return this.formDirective.getFormArray(this);\n }\n get formDirective() {\n return this._parent ? this._parent.formDirective : null;\n }\n get path() {\n return controlPath(this.name == null ? this.name : this.name.toString(), this._parent);\n }\n static \u0275fac = function FormArrayName_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || FormArrayName)(i0.\u0275\u0275directiveInject(ControlContainer, 13), i0.\u0275\u0275directiveInject(NG_VALIDATORS, 10), i0.\u0275\u0275directiveInject(NG_ASYNC_VALIDATORS, 10));\n };\n static \u0275dir = /* @__PURE__ */i0.\u0275\u0275defineDirective({\n type: FormArrayName,\n selectors: [[\"\", \"formArrayName\", \"\"]],\n inputs: {\n name: [0, \"formArrayName\", \"name\"]\n },\n standalone: false,\n features: [i0.\u0275\u0275ProvidersFeature([formArrayNameProvider]), i0.\u0275\u0275InheritDefinitionFeature]\n });\n }\n return FormArrayName;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nfunction hasInvalidParent(parent) {\n return !(parent instanceof FormGroupName) && !(parent instanceof AbstractFormDirective) && !(parent instanceof FormArrayName);\n}\nconst controlNameBinding = {\n provide: NgControl,\n useExisting: /*#__PURE__*/forwardRef(() => FormControlName)\n};\nlet FormControlName = /*#__PURE__*/(() => {\n class FormControlName extends NgControl {\n _ngModelWarningConfig;\n _added = false;\n viewModel;\n control;\n name = null;\n set isDisabled(isDisabled) {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n console.warn(disabledAttrWarning);\n }\n }\n model;\n update = new EventEmitter();\n static _ngModelWarningSentOnce = false;\n _ngModelWarningSent = false;\n constructor(parent, validators, asyncValidators, valueAccessors, _ngModelWarningConfig) {\n super();\n this._ngModelWarningConfig = _ngModelWarningConfig;\n this._parent = parent;\n this._setValidators(validators);\n this._setAsyncValidators(asyncValidators);\n this.valueAccessor = selectValueAccessor(this, valueAccessors);\n }\n ngOnChanges(changes) {\n if (!this._added) this._setUpControl();\n if (isPropertyUpdated(changes, this.viewModel)) {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n _ngModelWarning('formControlName', FormControlName, this, this._ngModelWarningConfig);\n }\n this.viewModel = this.model;\n this.formDirective.updateModel(this, this.model);\n }\n }\n ngOnDestroy() {\n this.formDirective?.removeControl(this);\n }\n viewToModelUpdate(newValue) {\n this.viewModel = newValue;\n this.update.emit(newValue);\n }\n get path() {\n return controlPath(this.name == null ? this.name : this.name.toString(), this._parent);\n }\n get formDirective() {\n return this._parent ? this._parent.formDirective : null;\n }\n _setUpControl() {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n checkParentType(this._parent, this.name);\n }\n this.control = this.formDirective.addControl(this);\n this._added = true;\n }\n static \u0275fac = function FormControlName_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || FormControlName)(i0.\u0275\u0275directiveInject(ControlContainer, 13), i0.\u0275\u0275directiveInject(NG_VALIDATORS, 10), i0.\u0275\u0275directiveInject(NG_ASYNC_VALIDATORS, 10), i0.\u0275\u0275directiveInject(NG_VALUE_ACCESSOR, 10), i0.\u0275\u0275directiveInject(NG_MODEL_WITH_FORM_CONTROL_WARNING, 8));\n };\n static \u0275dir = /* @__PURE__ */i0.\u0275\u0275defineDirective({\n type: FormControlName,\n selectors: [[\"\", \"formControlName\", \"\"]],\n inputs: {\n name: [0, \"formControlName\", \"name\"],\n isDisabled: [0, \"disabled\", \"isDisabled\"],\n model: [0, \"ngModel\", \"model\"]\n },\n outputs: {\n update: \"ngModelChange\"\n },\n standalone: false,\n features: [i0.\u0275\u0275ProvidersFeature([controlNameBinding]), i0.\u0275\u0275InheritDefinitionFeature, i0.\u0275\u0275NgOnChangesFeature]\n });\n }\n return FormControlName;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nfunction checkParentType(parent, name) {\n if (!(parent instanceof FormGroupName) && parent instanceof AbstractFormGroupDirective) {\n throw ngModelGroupException();\n } else if (!(parent instanceof FormGroupName) && !(parent instanceof AbstractFormDirective) && !(parent instanceof FormArrayName)) {\n throw controlParentException(name);\n }\n}\nconst formDirectiveProvider = {\n provide: ControlContainer,\n useExisting: /*#__PURE__*/forwardRef(() => FormGroupDirective)\n};\nlet FormGroupDirective = /*#__PURE__*/(() => {\n class FormGroupDirective extends AbstractFormDirective {\n form = null;\n ngSubmit = new EventEmitter();\n get control() {\n return this.form;\n }\n static \u0275fac = /* @__PURE__ */(() => {\n let \u0275FormGroupDirective_BaseFactory;\n return function FormGroupDirective_Factory(__ngFactoryType__) {\n return (\u0275FormGroupDirective_BaseFactory || (\u0275FormGroupDirective_BaseFactory = i0.\u0275\u0275getInheritedFactory(FormGroupDirective)))(__ngFactoryType__ || FormGroupDirective);\n };\n })();\n static \u0275dir = /* @__PURE__ */i0.\u0275\u0275defineDirective({\n type: FormGroupDirective,\n selectors: [[\"\", \"formGroup\", \"\"]],\n hostBindings: function FormGroupDirective_HostBindings(rf, ctx) {\n if (rf & 1) {\n i0.\u0275\u0275listener(\"submit\", function FormGroupDirective_submit_HostBindingHandler($event) {\n return ctx.onSubmit($event);\n })(\"reset\", function FormGroupDirective_reset_HostBindingHandler() {\n return ctx.onReset();\n });\n }\n },\n inputs: {\n form: [0, \"formGroup\", \"form\"]\n },\n outputs: {\n ngSubmit: \"ngSubmit\"\n },\n exportAs: [\"ngForm\"],\n standalone: false,\n features: [i0.\u0275\u0275ProvidersFeature([formDirectiveProvider]), i0.\u0275\u0275InheritDefinitionFeature]\n });\n }\n return FormGroupDirective;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst SELECT_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: /*#__PURE__*/forwardRef(() => SelectControlValueAccessor),\n multi: true\n};\nfunction _buildValueString$1(id, value) {\n if (id == null) return `${value}`;\n if (value && typeof value === 'object') value = 'Object';\n return `${id}: ${value}`.slice(0, 50);\n}\nfunction _extractId$1(valueString) {\n return valueString.split(':')[0];\n}\nlet SelectControlValueAccessor = /*#__PURE__*/(() => {\n class SelectControlValueAccessor extends BuiltInControlValueAccessor {\n value;\n _optionMap = new Map();\n _idCounter = 0;\n set compareWith(fn) {\n if (typeof fn !== 'function' && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw new _RuntimeError(1201, `compareWith must be a function, but received ${JSON.stringify(fn)}`);\n }\n this._compareWith = fn;\n }\n _compareWith = Object.is;\n appRefInjector = inject(ApplicationRef).injector;\n destroyRef = inject(DestroyRef);\n cdr = inject(ChangeDetectorRef);\n _queuedWrite = false;\n _writeValueAfterRender() {\n if (this._queuedWrite || this.appRefInjector.destroyed) {\n return;\n }\n this._queuedWrite = true;\n afterNextRender({\n write: () => {\n if (this.destroyRef.destroyed) {\n return;\n }\n this._queuedWrite = false;\n this.writeValue(this.value);\n }\n }, {\n injector: this.appRefInjector\n });\n }\n writeValue(value) {\n this.cdr.markForCheck();\n this.value = value;\n const id = this._getOptionId(value);\n const valueString = _buildValueString$1(id, value);\n this.setProperty('value', valueString);\n }\n registerOnChange(fn) {\n this.onChange = valueString => {\n this.value = this._getOptionValue(valueString);\n fn(this.value);\n };\n }\n _registerOption() {\n return (this._idCounter++).toString();\n }\n _getOptionId(value) {\n for (const id of this._optionMap.keys()) {\n if (this._compareWith(this._optionMap.get(id), value)) return id;\n }\n return null;\n }\n _getOptionValue(valueString) {\n const id = _extractId$1(valueString);\n return this._optionMap.has(id) ? this._optionMap.get(id) : valueString;\n }\n static \u0275fac = /* @__PURE__ */(() => {\n let \u0275SelectControlValueAccessor_BaseFactory;\n return function SelectControlValueAccessor_Factory(__ngFactoryType__) {\n return (\u0275SelectControlValueAccessor_BaseFactory || (\u0275SelectControlValueAccessor_BaseFactory = i0.\u0275\u0275getInheritedFactory(SelectControlValueAccessor)))(__ngFactoryType__ || SelectControlValueAccessor);\n };\n })();\n static \u0275dir = /* @__PURE__ */i0.\u0275\u0275defineDirective({\n type: SelectControlValueAccessor,\n selectors: [[\"select\", \"formControlName\", \"\", 3, \"multiple\", \"\"], [\"select\", \"formControl\", \"\", 3, \"multiple\", \"\"], [\"select\", \"ngModel\", \"\", 3, \"multiple\", \"\"]],\n hostBindings: function SelectControlValueAccessor_HostBindings(rf, ctx) {\n if (rf & 1) {\n i0.\u0275\u0275listener(\"change\", function SelectControlValueAccessor_change_HostBindingHandler($event) {\n return ctx.onChange($event.target.value);\n })(\"blur\", function SelectControlValueAccessor_blur_HostBindingHandler() {\n return ctx.onTouched();\n });\n }\n },\n inputs: {\n compareWith: \"compareWith\"\n },\n standalone: false,\n features: [i0.\u0275\u0275ProvidersFeature([SELECT_VALUE_ACCESSOR]), i0.\u0275\u0275InheritDefinitionFeature]\n });\n }\n return SelectControlValueAccessor;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet NgSelectOption = /*#__PURE__*/(() => {\n class NgSelectOption {\n _element;\n _renderer;\n _select;\n id;\n constructor(_element, _renderer, _select) {\n this._element = _element;\n this._renderer = _renderer;\n this._select = _select;\n if (this._select) this.id = this._select._registerOption();\n }\n set ngValue(value) {\n if (this._select == null) return;\n this._select._optionMap.set(this.id, value);\n this._setElementValue(_buildValueString$1(this.id, value));\n this._select._writeValueAfterRender();\n }\n set value(value) {\n this._setElementValue(value);\n this._select?._writeValueAfterRender();\n }\n _setElementValue(value) {\n this._renderer.setProperty(this._element.nativeElement, 'value', value);\n }\n ngOnDestroy() {\n this._select?._optionMap.delete(this.id);\n this._select?._writeValueAfterRender();\n }\n static \u0275fac = function NgSelectOption_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || NgSelectOption)(i0.\u0275\u0275directiveInject(i0.ElementRef), i0.\u0275\u0275directiveInject(i0.Renderer2), i0.\u0275\u0275directiveInject(SelectControlValueAccessor, 9));\n };\n static \u0275dir = /* @__PURE__ */i0.\u0275\u0275defineDirective({\n type: NgSelectOption,\n selectors: [[\"option\"]],\n inputs: {\n ngValue: \"ngValue\",\n value: \"value\"\n },\n standalone: false\n });\n }\n return NgSelectOption;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst SELECT_MULTIPLE_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: /*#__PURE__*/forwardRef(() => SelectMultipleControlValueAccessor),\n multi: true\n};\nfunction _buildValueString(id, value) {\n if (id == null) return `${value}`;\n if (typeof value === 'string') value = `'${value}'`;\n if (value && typeof value === 'object') value = 'Object';\n return `${id}: ${value}`.slice(0, 50);\n}\nfunction _extractId(valueString) {\n return valueString.split(':')[0];\n}\nlet SelectMultipleControlValueAccessor = /*#__PURE__*/(() => {\n class SelectMultipleControlValueAccessor extends BuiltInControlValueAccessor {\n value;\n _optionMap = new Map();\n _idCounter = 0;\n set compareWith(fn) {\n if (typeof fn !== 'function' && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw new _RuntimeError(1201, `compareWith must be a function, but received ${JSON.stringify(fn)}`);\n }\n this._compareWith = fn;\n }\n _compareWith = Object.is;\n writeValue(value) {\n this.value = value;\n let optionSelectedStateSetter;\n if (Array.isArray(value)) {\n const ids = value.map(v => this._getOptionId(v));\n optionSelectedStateSetter = (opt, o) => {\n opt._setSelected(ids.indexOf(o.toString()) > -1);\n };\n } else {\n optionSelectedStateSetter = (opt, o) => {\n opt._setSelected(false);\n };\n }\n this._optionMap.forEach(optionSelectedStateSetter);\n }\n registerOnChange(fn) {\n this.onChange = element => {\n const selected = [];\n const selectedOptions = element.selectedOptions;\n if (selectedOptions !== undefined) {\n const options = selectedOptions;\n for (let i = 0; i < options.length; i++) {\n const opt = options[i];\n const val = this._getOptionValue(opt.value);\n selected.push(val);\n }\n } else {\n const options = element.options;\n for (let i = 0; i < options.length; i++) {\n const opt = options[i];\n if (opt.selected) {\n const val = this._getOptionValue(opt.value);\n selected.push(val);\n }\n }\n }\n this.value = selected;\n fn(selected);\n };\n }\n _registerOption(value) {\n const id = (this._idCounter++).toString();\n this._optionMap.set(id, value);\n return id;\n }\n _getOptionId(value) {\n for (const id of this._optionMap.keys()) {\n if (this._compareWith(this._optionMap.get(id)._value, value)) return id;\n }\n return null;\n }\n _getOptionValue(valueString) {\n const id = _extractId(valueString);\n return this._optionMap.has(id) ? this._optionMap.get(id)._value : valueString;\n }\n static \u0275fac = /* @__PURE__ */(() => {\n let \u0275SelectMultipleControlValueAccessor_BaseFactory;\n return function SelectMultipleControlValueAccessor_Factory(__ngFactoryType__) {\n return (\u0275SelectMultipleControlValueAccessor_BaseFactory || (\u0275SelectMultipleControlValueAccessor_BaseFactory = i0.\u0275\u0275getInheritedFactory(SelectMultipleControlValueAccessor)))(__ngFactoryType__ || SelectMultipleControlValueAccessor);\n };\n })();\n static \u0275dir = /* @__PURE__ */i0.\u0275\u0275defineDirective({\n type: SelectMultipleControlValueAccessor,\n selectors: [[\"select\", \"multiple\", \"\", \"formControlName\", \"\"], [\"select\", \"multiple\", \"\", \"formControl\", \"\"], [\"select\", \"multiple\", \"\", \"ngModel\", \"\"]],\n hostBindings: function SelectMultipleControlValueAccessor_HostBindings(rf, ctx) {\n if (rf & 1) {\n i0.\u0275\u0275listener(\"change\", function SelectMultipleControlValueAccessor_change_HostBindingHandler($event) {\n return ctx.onChange($event.target);\n })(\"blur\", function SelectMultipleControlValueAccessor_blur_HostBindingHandler() {\n return ctx.onTouched();\n });\n }\n },\n inputs: {\n compareWith: \"compareWith\"\n },\n standalone: false,\n features: [i0.\u0275\u0275ProvidersFeature([SELECT_MULTIPLE_VALUE_ACCESSOR]), i0.\u0275\u0275InheritDefinitionFeature]\n });\n }\n return SelectMultipleControlValueAccessor;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet \u0275NgSelectMultipleOption = /*#__PURE__*/(() => {\n class \u0275NgSelectMultipleOption {\n _element;\n _renderer;\n _select;\n id;\n _value;\n constructor(_element, _renderer, _select) {\n this._element = _element;\n this._renderer = _renderer;\n this._select = _select;\n if (this._select) {\n this.id = this._select._registerOption(this);\n }\n }\n set ngValue(value) {\n if (this._select == null) return;\n this._value = value;\n this._setElementValue(_buildValueString(this.id, value));\n this._select.writeValue(this._select.value);\n }\n set value(value) {\n if (this._select) {\n this._value = value;\n this._setElementValue(_buildValueString(this.id, value));\n this._select.writeValue(this._select.value);\n } else {\n this._setElementValue(value);\n }\n }\n _setElementValue(value) {\n this._renderer.setProperty(this._element.nativeElement, 'value', value);\n }\n _setSelected(selected) {\n this._renderer.setProperty(this._element.nativeElement, 'selected', selected);\n }\n ngOnDestroy() {\n if (this._select) {\n this._select._optionMap.delete(this.id);\n this._select.writeValue(this._select.value);\n }\n }\n static \u0275fac = function \u0275NgSelectMultipleOption_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || \u0275NgSelectMultipleOption)(i0.\u0275\u0275directiveInject(i0.ElementRef), i0.\u0275\u0275directiveInject(i0.Renderer2), i0.\u0275\u0275directiveInject(SelectMultipleControlValueAccessor, 9));\n };\n static \u0275dir = /* @__PURE__ */i0.\u0275\u0275defineDirective({\n type: \u0275NgSelectMultipleOption,\n selectors: [[\"option\"]],\n inputs: {\n ngValue: \"ngValue\",\n value: \"value\"\n },\n standalone: false\n });\n }\n return \u0275NgSelectMultipleOption;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nfunction toInteger(value) {\n return typeof value === 'number' ? value : parseInt(value, 10);\n}\nfunction toFloat(value) {\n return typeof value === 'number' ? value : parseFloat(value);\n}\nlet AbstractValidatorDirective = /*#__PURE__*/(() => {\n class AbstractValidatorDirective {\n _validator = nullValidator;\n _onChange;\n _enabled;\n ngOnChanges(changes) {\n if (this.inputName in changes) {\n const input = this.normalizeInput(changes[this.inputName].currentValue);\n this._enabled = this.enabled(input);\n this._validator = this._enabled ? this.createValidator(input) : nullValidator;\n this._onChange?.();\n }\n }\n validate(control) {\n return this._validator(control);\n }\n registerOnValidatorChange(fn) {\n this._onChange = fn;\n }\n enabled(input) {\n return input != null;\n }\n static \u0275fac = function AbstractValidatorDirective_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || AbstractValidatorDirective)();\n };\n static \u0275dir = /* @__PURE__ */i0.\u0275\u0275defineDirective({\n type: AbstractValidatorDirective,\n features: [i0.\u0275\u0275NgOnChangesFeature]\n });\n }\n return AbstractValidatorDirective;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst MAX_VALIDATOR = {\n provide: NG_VALIDATORS,\n useExisting: /*#__PURE__*/forwardRef(() => MaxValidator),\n multi: true\n};\nlet MaxValidator = /*#__PURE__*/(() => {\n class MaxValidator extends AbstractValidatorDirective {\n max;\n inputName = 'max';\n normalizeInput = input => toFloat(input);\n createValidator = max => maxValidator(max);\n static \u0275fac = /* @__PURE__ */(() => {\n let \u0275MaxValidator_BaseFactory;\n return function MaxValidator_Factory(__ngFactoryType__) {\n return (\u0275MaxValidator_BaseFactory || (\u0275MaxValidator_BaseFactory = i0.\u0275\u0275getInheritedFactory(MaxValidator)))(__ngFactoryType__ || MaxValidator);\n };\n })();\n static \u0275dir = /* @__PURE__ */i0.\u0275\u0275defineDirective({\n type: MaxValidator,\n selectors: [[\"input\", \"type\", \"number\", \"max\", \"\", \"formControlName\", \"\"], [\"input\", \"type\", \"number\", \"max\", \"\", \"formControl\", \"\"], [\"input\", \"type\", \"number\", \"max\", \"\", \"ngModel\", \"\"]],\n hostVars: 1,\n hostBindings: function MaxValidator_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.\u0275\u0275attribute(\"max\", ctx._enabled ? ctx.max : null);\n }\n },\n inputs: {\n max: \"max\"\n },\n standalone: false,\n features: [i0.\u0275\u0275ProvidersFeature([MAX_VALIDATOR]), i0.\u0275\u0275InheritDefinitionFeature]\n });\n }\n return MaxValidator;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst MIN_VALIDATOR = {\n provide: NG_VALIDATORS,\n useExisting: /*#__PURE__*/forwardRef(() => MinValidator),\n multi: true\n};\nlet MinValidator = /*#__PURE__*/(() => {\n class MinValidator extends AbstractValidatorDirective {\n min;\n inputName = 'min';\n normalizeInput = input => toFloat(input);\n createValidator = min => minValidator(min);\n static \u0275fac = /* @__PURE__ */(() => {\n let \u0275MinValidator_BaseFactory;\n return function MinValidator_Factory(__ngFactoryType__) {\n return (\u0275MinValidator_BaseFactory || (\u0275MinValidator_BaseFactory = i0.\u0275\u0275getInheritedFactory(MinValidator)))(__ngFactoryType__ || MinValidator);\n };\n })();\n static \u0275dir = /* @__PURE__ */i0.\u0275\u0275defineDirective({\n type: MinValidator,\n selectors: [[\"input\", \"type\", \"number\", \"min\", \"\", \"formControlName\", \"\"], [\"input\", \"type\", \"number\", \"min\", \"\", \"formControl\", \"\"], [\"input\", \"type\", \"number\", \"min\", \"\", \"ngModel\", \"\"]],\n hostVars: 1,\n hostBindings: function MinValidator_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.\u0275\u0275attribute(\"min\", ctx._enabled ? ctx.min : null);\n }\n },\n inputs: {\n min: \"min\"\n },\n standalone: false,\n features: [i0.\u0275\u0275ProvidersFeature([MIN_VALIDATOR]), i0.\u0275\u0275InheritDefinitionFeature]\n });\n }\n return MinValidator;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst REQUIRED_VALIDATOR = {\n provide: NG_VALIDATORS,\n useExisting: /*#__PURE__*/forwardRef(() => RequiredValidator),\n multi: true\n};\nconst CHECKBOX_REQUIRED_VALIDATOR = {\n provide: NG_VALIDATORS,\n useExisting: /*#__PURE__*/forwardRef(() => CheckboxRequiredValidator),\n multi: true\n};\nlet RequiredValidator = /*#__PURE__*/(() => {\n class RequiredValidator extends AbstractValidatorDirective {\n required;\n inputName = 'required';\n normalizeInput = booleanAttribute;\n createValidator = input => requiredValidator;\n enabled(input) {\n return input;\n }\n static \u0275fac = /* @__PURE__ */(() => {\n let \u0275RequiredValidator_BaseFactory;\n return function RequiredValidator_Factory(__ngFactoryType__) {\n return (\u0275RequiredValidator_BaseFactory || (\u0275RequiredValidator_BaseFactory = i0.\u0275\u0275getInheritedFactory(RequiredValidator)))(__ngFactoryType__ || RequiredValidator);\n };\n })();\n static \u0275dir = /* @__PURE__ */i0.\u0275\u0275defineDirective({\n type: RequiredValidator,\n selectors: [[\"\", \"required\", \"\", \"formControlName\", \"\", 3, \"type\", \"checkbox\"], [\"\", \"required\", \"\", \"formControl\", \"\", 3, \"type\", \"checkbox\"], [\"\", \"required\", \"\", \"ngModel\", \"\", 3, \"type\", \"checkbox\"]],\n hostVars: 1,\n hostBindings: function RequiredValidator_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.\u0275\u0275attribute(\"required\", ctx._enabled ? \"\" : null);\n }\n },\n inputs: {\n required: \"required\"\n },\n standalone: false,\n features: [i0.\u0275\u0275ProvidersFeature([REQUIRED_VALIDATOR]), i0.\u0275\u0275InheritDefinitionFeature]\n });\n }\n return RequiredValidator;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet CheckboxRequiredValidator = /*#__PURE__*/(() => {\n class CheckboxRequiredValidator extends RequiredValidator {\n createValidator = input => requiredTrueValidator;\n static \u0275fac = /* @__PURE__ */(() => {\n let \u0275CheckboxRequiredValidator_BaseFactory;\n return function CheckboxRequiredValidator_Factory(__ngFactoryType__) {\n return (\u0275CheckboxRequiredValidator_BaseFactory || (\u0275CheckboxRequiredValidator_BaseFactory = i0.\u0275\u0275getInheritedFactory(CheckboxRequiredValidator)))(__ngFactoryType__ || CheckboxRequiredValidator);\n };\n })();\n static \u0275dir = /* @__PURE__ */i0.\u0275\u0275defineDirective({\n type: CheckboxRequiredValidator,\n selectors: [[\"input\", \"type\", \"checkbox\", \"required\", \"\", \"formControlName\", \"\"], [\"input\", \"type\", \"checkbox\", \"required\", \"\", \"formControl\", \"\"], [\"input\", \"type\", \"checkbox\", \"required\", \"\", \"ngModel\", \"\"]],\n hostVars: 1,\n hostBindings: function CheckboxRequiredValidator_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.\u0275\u0275attribute(\"required\", ctx._enabled ? \"\" : null);\n }\n },\n standalone: false,\n features: [i0.\u0275\u0275ProvidersFeature([CHECKBOX_REQUIRED_VALIDATOR]), i0.\u0275\u0275InheritDefinitionFeature]\n });\n }\n return CheckboxRequiredValidator;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst EMAIL_VALIDATOR = {\n provide: NG_VALIDATORS,\n useExisting: /*#__PURE__*/forwardRef(() => EmailValidator),\n multi: true\n};\nlet EmailValidator = /*#__PURE__*/(() => {\n class EmailValidator extends AbstractValidatorDirective {\n email;\n inputName = 'email';\n normalizeInput = booleanAttribute;\n createValidator = input => emailValidator;\n enabled(input) {\n return input;\n }\n static \u0275fac = /* @__PURE__ */(() => {\n let \u0275EmailValidator_BaseFactory;\n return function EmailValidator_Factory(__ngFactoryType__) {\n return (\u0275EmailValidator_BaseFactory || (\u0275EmailValidator_BaseFactory = i0.\u0275\u0275getInheritedFactory(EmailValidator)))(__ngFactoryType__ || EmailValidator);\n };\n })();\n static \u0275dir = /* @__PURE__ */i0.\u0275\u0275defineDirective({\n type: EmailValidator,\n selectors: [[\"\", \"email\", \"\", \"formControlName\", \"\"], [\"\", \"email\", \"\", \"formControl\", \"\"], [\"\", \"email\", \"\", \"ngModel\", \"\"]],\n inputs: {\n email: \"email\"\n },\n standalone: false,\n features: [i0.\u0275\u0275ProvidersFeature([EMAIL_VALIDATOR]), i0.\u0275\u0275InheritDefinitionFeature]\n });\n }\n return EmailValidator;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst MIN_LENGTH_VALIDATOR = {\n provide: NG_VALIDATORS,\n useExisting: /*#__PURE__*/forwardRef(() => MinLengthValidator),\n multi: true\n};\nlet MinLengthValidator = /*#__PURE__*/(() => {\n class MinLengthValidator extends AbstractValidatorDirective {\n minlength;\n inputName = 'minlength';\n normalizeInput = input => toInteger(input);\n createValidator = minlength => minLengthValidator(minlength);\n static \u0275fac = /* @__PURE__ */(() => {\n let \u0275MinLengthValidator_BaseFactory;\n return function MinLengthValidator_Factory(__ngFactoryType__) {\n return (\u0275MinLengthValidator_BaseFactory || (\u0275MinLengthValidator_BaseFactory = i0.\u0275\u0275getInheritedFactory(MinLengthValidator)))(__ngFactoryType__ || MinLengthValidator);\n };\n })();\n static \u0275dir = /* @__PURE__ */i0.\u0275\u0275defineDirective({\n type: MinLengthValidator,\n selectors: [[\"\", \"minlength\", \"\", \"formControlName\", \"\"], [\"\", \"minlength\", \"\", \"formControl\", \"\"], [\"\", \"minlength\", \"\", \"ngModel\", \"\"]],\n hostVars: 1,\n hostBindings: function MinLengthValidator_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.\u0275\u0275attribute(\"minlength\", ctx._enabled ? ctx.minlength : null);\n }\n },\n inputs: {\n minlength: \"minlength\"\n },\n standalone: false,\n features: [i0.\u0275\u0275ProvidersFeature([MIN_LENGTH_VALIDATOR]), i0.\u0275\u0275InheritDefinitionFeature]\n });\n }\n return MinLengthValidator;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst MAX_LENGTH_VALIDATOR = {\n provide: NG_VALIDATORS,\n useExisting: /*#__PURE__*/forwardRef(() => MaxLengthValidator),\n multi: true\n};\nlet MaxLengthValidator = /*#__PURE__*/(() => {\n class MaxLengthValidator extends AbstractValidatorDirective {\n maxlength;\n inputName = 'maxlength';\n normalizeInput = input => toInteger(input);\n createValidator = maxlength => maxLengthValidator(maxlength);\n static \u0275fac = /* @__PURE__ */(() => {\n let \u0275MaxLengthValidator_BaseFactory;\n return function MaxLengthValidator_Factory(__ngFactoryType__) {\n return (\u0275MaxLengthValidator_BaseFactory || (\u0275MaxLengthValidator_BaseFactory = i0.\u0275\u0275getInheritedFactory(MaxLengthValidator)))(__ngFactoryType__ || MaxLengthValidator);\n };\n })();\n static \u0275dir = /* @__PURE__ */i0.\u0275\u0275defineDirective({\n type: MaxLengthValidator,\n selectors: [[\"\", \"maxlength\", \"\", \"formControlName\", \"\"], [\"\", \"maxlength\", \"\", \"formControl\", \"\"], [\"\", \"maxlength\", \"\", \"ngModel\", \"\"]],\n hostVars: 1,\n hostBindings: function MaxLengthValidator_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.\u0275\u0275attribute(\"maxlength\", ctx._enabled ? ctx.maxlength : null);\n }\n },\n inputs: {\n maxlength: \"maxlength\"\n },\n standalone: false,\n features: [i0.\u0275\u0275ProvidersFeature([MAX_LENGTH_VALIDATOR]), i0.\u0275\u0275InheritDefinitionFeature]\n });\n }\n return MaxLengthValidator;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst PATTERN_VALIDATOR = {\n provide: NG_VALIDATORS,\n useExisting: /*#__PURE__*/forwardRef(() => PatternValidator),\n multi: true\n};\nlet PatternValidator = /*#__PURE__*/(() => {\n class PatternValidator extends AbstractValidatorDirective {\n pattern;\n inputName = 'pattern';\n normalizeInput = input => input;\n createValidator = input => patternValidator(input);\n static \u0275fac = /* @__PURE__ */(() => {\n let \u0275PatternValidator_BaseFactory;\n return function PatternValidator_Factory(__ngFactoryType__) {\n return (\u0275PatternValidator_BaseFactory || (\u0275PatternValidator_BaseFactory = i0.\u0275\u0275getInheritedFactory(PatternValidator)))(__ngFactoryType__ || PatternValidator);\n };\n })();\n static \u0275dir = /* @__PURE__ */i0.\u0275\u0275defineDirective({\n type: PatternValidator,\n selectors: [[\"\", \"pattern\", \"\", \"formControlName\", \"\"], [\"\", \"pattern\", \"\", \"formControl\", \"\"], [\"\", \"pattern\", \"\", \"ngModel\", \"\"]],\n hostVars: 1,\n hostBindings: function PatternValidator_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.\u0275\u0275attribute(\"pattern\", ctx._enabled ? ctx.pattern : null);\n }\n },\n inputs: {\n pattern: \"pattern\"\n },\n standalone: false,\n features: [i0.\u0275\u0275ProvidersFeature([PATTERN_VALIDATOR]), i0.\u0275\u0275InheritDefinitionFeature]\n });\n }\n return PatternValidator;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst SHARED_FORM_DIRECTIVES = [\u0275NgNoValidate, NgSelectOption, \u0275NgSelectMultipleOption, DefaultValueAccessor, NumberValueAccessor, RangeValueAccessor, CheckboxControlValueAccessor, SelectControlValueAccessor, SelectMultipleControlValueAccessor, RadioControlValueAccessor, NgControlStatus, NgControlStatusGroup, RequiredValidator, MinLengthValidator, MaxLengthValidator, PatternValidator, CheckboxRequiredValidator, EmailValidator, MinValidator, MaxValidator];\nconst TEMPLATE_DRIVEN_DIRECTIVES = [NgModel, NgModelGroup, NgForm];\nconst REACTIVE_DRIVEN_DIRECTIVES = [FormControlDirective, FormGroupDirective, FormArrayDirective, FormControlName, FormGroupName, FormArrayName];\nlet \u0275InternalFormsSharedModule = /*#__PURE__*/(() => {\n class \u0275InternalFormsSharedModule {\n static \u0275fac = function \u0275InternalFormsSharedModule_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || \u0275InternalFormsSharedModule)();\n };\n static \u0275mod = /* @__PURE__ */i0.\u0275\u0275defineNgModule({\n type: \u0275InternalFormsSharedModule\n });\n static \u0275inj = /* @__PURE__ */i0.\u0275\u0275defineInjector({});\n }\n return \u0275InternalFormsSharedModule;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nfunction isAbstractControlOptions(options) {\n return !!options && (options.asyncValidators !== undefined || options.validators !== undefined || options.updateOn !== undefined);\n}\nlet FormBuilder = /*#__PURE__*/(() => {\n class FormBuilder {\n useNonNullable = false;\n get nonNullable() {\n const nnfb = new FormBuilder();\n nnfb.useNonNullable = true;\n return nnfb;\n }\n group(controls, options = null) {\n const reducedControls = this._reduceControls(controls);\n let newOptions = {};\n if (isAbstractControlOptions(options)) {\n newOptions = options;\n } else if (options !== null) {\n newOptions.validators = options.validator;\n newOptions.asyncValidators = options.asyncValidator;\n }\n return new FormGroup(reducedControls, newOptions);\n }\n record(controls, options = null) {\n const reducedControls = this._reduceControls(controls);\n return new FormRecord(reducedControls, options);\n }\n control(formState, validatorOrOpts, asyncValidator) {\n let newOptions = {};\n if (!this.useNonNullable) {\n return new FormControl(formState, validatorOrOpts, asyncValidator);\n }\n if (isAbstractControlOptions(validatorOrOpts)) {\n newOptions = validatorOrOpts;\n } else {\n newOptions.validators = validatorOrOpts;\n newOptions.asyncValidators = asyncValidator;\n }\n return new FormControl(formState, {\n ...newOptions,\n nonNullable: true\n });\n }\n array(controls, validatorOrOpts, asyncValidator) {\n const createdControls = controls.map(c => this._createControl(c));\n return new FormArray(createdControls, validatorOrOpts, asyncValidator);\n }\n _reduceControls(controls) {\n const createdControls = {};\n Object.keys(controls).forEach(controlName => {\n createdControls[controlName] = this._createControl(controls[controlName]);\n });\n return createdControls;\n }\n _createControl(controls) {\n if (controls instanceof FormControl) {\n return controls;\n } else if (controls instanceof AbstractControl) {\n return controls;\n } else if (Array.isArray(controls)) {\n const value = controls[0];\n const validator = controls.length > 1 ? controls[1] : null;\n const asyncValidator = controls.length > 2 ? controls[2] : null;\n return this.control(value, validator, asyncValidator);\n } else {\n return this.control(controls);\n }\n }\n static \u0275fac = function FormBuilder_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || FormBuilder)();\n };\n static \u0275prov = /* @__PURE__ */i0.\u0275\u0275defineInjectable({\n token: FormBuilder,\n factory: FormBuilder.\u0275fac,\n providedIn: 'root'\n });\n }\n return FormBuilder;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet NonNullableFormBuilder = /*#__PURE__*/(() => {\n class NonNullableFormBuilder {\n static \u0275fac = function NonNullableFormBuilder_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || NonNullableFormBuilder)();\n };\n static \u0275prov = /* @__PURE__ */i0.\u0275\u0275defineInjectable({\n token: NonNullableFormBuilder,\n factory: () => (() => inject(FormBuilder).nonNullable)(),\n providedIn: 'root'\n });\n }\n return NonNullableFormBuilder;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet UntypedFormBuilder = /*#__PURE__*/(() => {\n class UntypedFormBuilder extends FormBuilder {\n group(controlsConfig, options = null) {\n return super.group(controlsConfig, options);\n }\n control(formState, validatorOrOpts, asyncValidator) {\n return super.control(formState, validatorOrOpts, asyncValidator);\n }\n array(controlsConfig, validatorOrOpts, asyncValidator) {\n return super.array(controlsConfig, validatorOrOpts, asyncValidator);\n }\n static \u0275fac = /* @__PURE__ */(() => {\n let \u0275UntypedFormBuilder_BaseFactory;\n return function UntypedFormBuilder_Factory(__ngFactoryType__) {\n return (\u0275UntypedFormBuilder_BaseFactory || (\u0275UntypedFormBuilder_BaseFactory = i0.\u0275\u0275getInheritedFactory(UntypedFormBuilder)))(__ngFactoryType__ || UntypedFormBuilder);\n };\n })();\n static \u0275prov = /* @__PURE__ */i0.\u0275\u0275defineInjectable({\n token: UntypedFormBuilder,\n factory: UntypedFormBuilder.\u0275fac,\n providedIn: 'root'\n });\n }\n return UntypedFormBuilder;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet FormsModule = /*#__PURE__*/(() => {\n class FormsModule {\n static withConfig(opts) {\n return {\n ngModule: FormsModule,\n providers: [{\n provide: CALL_SET_DISABLED_STATE,\n useValue: opts.callSetDisabledState ?? setDisabledStateDefault\n }]\n };\n }\n static \u0275fac = function FormsModule_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || FormsModule)();\n };\n static \u0275mod = /* @__PURE__ */i0.\u0275\u0275defineNgModule({\n type: FormsModule\n });\n static \u0275inj = /* @__PURE__ */i0.\u0275\u0275defineInjector({\n imports: [\u0275InternalFormsSharedModule]\n });\n }\n return FormsModule;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet ReactiveFormsModule = /*#__PURE__*/(() => {\n class ReactiveFormsModule {\n static withConfig(opts) {\n return {\n ngModule: ReactiveFormsModule,\n providers: [{\n provide: NG_MODEL_WITH_FORM_CONTROL_WARNING,\n useValue: opts.warnOnNgModelWithFormControl ?? 'always'\n }, {\n provide: CALL_SET_DISABLED_STATE,\n useValue: opts.callSetDisabledState ?? setDisabledStateDefault\n }]\n };\n }\n static \u0275fac = function ReactiveFormsModule_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || ReactiveFormsModule)();\n };\n static \u0275mod = /* @__PURE__ */i0.\u0275\u0275defineNgModule({\n type: ReactiveFormsModule\n });\n static \u0275inj = /* @__PURE__ */i0.\u0275\u0275defineInjector({\n imports: [\u0275InternalFormsSharedModule]\n });\n }\n return ReactiveFormsModule;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nexport { AbstractControl, AbstractControlDirective, AbstractFormDirective, AbstractFormGroupDirective, COMPOSITION_BUFFER_MODE, CheckboxControlValueAccessor, CheckboxRequiredValidator, ControlContainer, ControlEvent, DefaultValueAccessor, EmailValidator, FormArray, FormArrayDirective, FormArrayName, FormBuilder, FormControl, FormControlDirective, FormControlName, FormGroup, FormGroupDirective, FormGroupName, FormRecord, FormResetEvent, FormSubmittedEvent, FormsModule, MaxLengthValidator, MaxValidator, MinLengthValidator, MinValidator, NG_ASYNC_VALIDATORS, NG_VALIDATORS, NG_VALUE_ACCESSOR, NgControl, NgControlStatus, NgControlStatusGroup, NgForm, NgModel, NgModelGroup, NgSelectOption, NonNullableFormBuilder, NumberValueAccessor, PatternValidator, PristineChangeEvent, RadioControlValueAccessor, RangeValueAccessor, ReactiveFormsModule, RequiredValidator, SelectControlValueAccessor, SelectMultipleControlValueAccessor, StatusChangeEvent, TouchedChangeEvent, UntypedFormArray, UntypedFormBuilder, UntypedFormControl, UntypedFormGroup, VERSION, Validators, ValueChangeEvent, isFormArray, isFormControl, isFormGroup, isFormRecord, \u0275InternalFormsSharedModule, \u0275NgNoValidate, \u0275NgSelectMultipleOption };\n"],mappings:"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",names:["BaseControlValueAccessor","_","_renderer","_elementRef","key","value","fn","isDisabled","__ngFactoryType__","\u0275\u0275directiveInject","Renderer2","ElementRef","\u0275\u0275defineDirective","BuiltInControlValueAccessor","\u0275BuiltInControlValueAccessor_BaseFactory","\u0275\u0275getInheritedFactory","\u0275\u0275InheritDefinitionFeature","NG_VALUE_ACCESSOR","InjectionToken","DEFAULT_VALUE_ACCESSOR","NG_VALUE_ACCESSOR","forwardRef","DefaultValueAccessor","_isAndroid","userAgent","getDOM","COMPOSITION_BUFFER_MODE","InjectionToken","BaseControlValueAccessor","renderer","elementRef","_compositionMode","value","normalizedValue","__ngFactoryType__","\u0275\u0275directiveInject","Renderer2","ElementRef","\u0275\u0275defineDirective","rf","ctx","\u0275\u0275listener","$event","\u0275\u0275ProvidersFeature","\u0275\u0275InheritDefinitionFeature","isEmptyInputValue","lengthOrSize","NG_VALIDATORS","NG_ASYNC_VALIDATORS","EMAIL_REGEXP","Validators","min","minValidator","max","maxValidator","control","requiredValidator","requiredTrueValidator","emailValidator","minLength","minLengthValidator","maxLength","maxLengthValidator","pattern","patternValidator","nullValidator","validators","compose","composeAsync","length","regex","regexStr","isPresent","o","toObservable","isPromise","from","mergeErrors","arrayOfErrors","res","errors","__spreadValues","executeValidators","validator","isValidatorFn","normalizeValidators","c","presentValidators","composeValidators","observables","forkJoin","map","composeAsyncValidators","mergeValidators","controlValidators","dirValidator","getControlValidators","getControlAsyncValidators","makeValidatorsArray","hasValidator","addValidators","currentValidators","current","v","removeValidators","AbstractControlDirective","fn","errorCode","path","ControlContainer","NgControl","AbstractControlStatus","cd","NgControlStatus","AbstractControlStatus","cd","__ngFactoryType__","\u0275\u0275directiveInject","NgControl","\u0275\u0275defineDirective","rf","ctx","\u0275\u0275classProp","\u0275\u0275InheritDefinitionFeature","NgControlStatusGroup","ControlContainer","VALID","INVALID","PENDING","DISABLED","ControlEvent","ValueChangeEvent","value","source","PristineChangeEvent","pristine","TouchedChangeEvent","touched","StatusChangeEvent","status","FormSubmittedEvent","FormResetEvent","pickValidators","validatorOrOpts","isOptionsObj","coerceToValidator","validator","composeValidators","pickAsyncValidators","asyncValidator","coerceToAsyncValidator","composeAsyncValidators","assertControlPresent","parent","isGroup","key","controls","RuntimeError","assertAllValuesPresent","control","_","AbstractControl","validators","asyncValidators","validatorFn","asyncValidatorFn","untracked","v","computed","signal","Subject","addValidators","removeValidators","hasValidator","opts","changed","sourceControl","__spreadProps","__spreadValues","skipPristineCheck","changeFn","shouldHaveEmitted","ctrl","emitEvent","obs","toObservable","errors","path","currPath","name","errorCode","x","changedControl","EventEmitter","newPristine","fn","onlySelf","FormGroup","options","controlName","acc","subtreeUpdated","updated","child","cb","condition","initValue","res","FormRecord","FormGroup","CALL_SET_DISABLED_STATE","InjectionToken","setDisabledStateDefault","controlPath","name","parent","setUpControl","control","dir","callSetDisabledState","setUpValidators","setUpViewChangePipeline","setUpModelChangePipeline","setUpBlurPipeline","setUpDisabledChangeHandler","cleanUpControl","validateControlPresenceOnChange","noop","cleanUpValidators","registerOnValidatorChange","validators","onChange","validator","onDisabledChange","isDisabled","getControlValidators","mergeValidators","asyncValidators","getControlAsyncValidators","onValidatorChange","isControlUpdated","updatedValidators","updatedAsyncValidators","asyncValidator","newValue","updateControl","emitModelEvent","setUpFormContainer","cleanUpFormContainer","isPropertyUpdated","changes","viewModel","change","isBuiltInAccessor","valueAccessor","BuiltInControlValueAccessor","syncPendingControls","form","directives","dir","control","selectValueAccessor","valueAccessors","defaultAccessor","builtinAccessor","customAccessor","v","DefaultValueAccessor","removeListItem$1","list","el","index","removeListItem","list","el","index","isFormControlState","formState","FormControl","AbstractControl","validatorOrOpts","asyncValidator","pickValidators","pickAsyncValidators","isOptionsObj","value","options","changeFn","FormResetEvent","condition","fn","cb","isFormControl","control","FormControl","\u0275NgNoValidate","__ngFactoryType__","\u0275\u0275defineDirective","FormArray","AbstractControl","controls","validatorOrOpts","asyncValidator","pickValidators","pickAsyncValidators","index","control","options","ctrl","adjustedIndex","value","assertAllValuesPresent","newValue","assertControlPresent","__spreadProps","__spreadValues","FormResetEvent","subtreeUpdated","updated","child","cb","condition","name","AbstractFormDirective","ControlContainer","untracked","value","computed","signal","validators","asyncValidators","callSetDisabledState","changes","cleanUpValidators","dir","ctrl","setUpControl","cleanUpControl","removeListItem$1","options","$event","syncPendingControls","FormSubmittedEvent","oldCtrl","newCtrl","isFormControl","setUpFormContainer","cleanUpFormContainer","setUpValidators","__ngFactoryType__","\u0275\u0275directiveInject","NG_VALIDATORS","NG_ASYNC_VALIDATORS","CALL_SET_DISABLED_STATE","\u0275\u0275defineDirective","\u0275\u0275InheritDefinitionFeature","\u0275\u0275NgOnChangesFeature","NG_MODEL_WITH_FORM_CONTROL_WARNING","InjectionToken","controlNameBinding","NgControl","forwardRef","FormControlName","isDisabled","EventEmitter","parent","validators","asyncValidators","valueAccessors","_ngModelWarningConfig","selectValueAccessor","changes","isPropertyUpdated","newValue","controlPath","__ngFactoryType__","\u0275\u0275directiveInject","ControlContainer","NG_VALIDATORS","NG_ASYNC_VALIDATORS","NG_VALUE_ACCESSOR","NG_MODEL_WITH_FORM_CONTROL_WARNING","\u0275\u0275defineDirective","\u0275\u0275ProvidersFeature","\u0275\u0275InheritDefinitionFeature","\u0275\u0275NgOnChangesFeature","formDirectiveProvider","ControlContainer","forwardRef","FormGroupDirective","AbstractFormDirective","EventEmitter","\u0275FormGroupDirective_BaseFactory","__ngFactoryType__","\u0275\u0275getInheritedFactory","\u0275\u0275defineDirective","rf","ctx","\u0275\u0275listener","$event","\u0275\u0275ProvidersFeature","\u0275\u0275InheritDefinitionFeature","SELECT_VALUE_ACCESSOR","NG_VALUE_ACCESSOR","SelectControlValueAccessor","_buildValueString$1","id","value","_extractId$1","valueString","BuiltInControlValueAccessor","fn","inject","ApplicationRef","DestroyRef","ChangeDetectorRef","afterNextRender","\u0275SelectControlValueAccessor_BaseFactory","NgSelectOption","_element","_renderer","_select","\u0275\u0275directiveInject","ElementRef","Renderer2","SELECT_MULTIPLE_VALUE_ACCESSOR","SelectMultipleControlValueAccessor","_buildValueString","_extractId","optionSelectedStateSetter","ids","v","opt","o","element","selected","selectedOptions","options","i","val","\u0275SelectMultipleControlValueAccessor_BaseFactory","\u0275NgSelectMultipleOption","toInteger","AbstractValidatorDirective","nullValidator","changes","input","control","fn","__ngFactoryType__","\u0275\u0275defineDirective","\u0275\u0275NgOnChangesFeature","MAX_LENGTH_VALIDATOR","NG_VALIDATORS","forwardRef","MaxLengthValidator","AbstractValidatorDirective","input","toInteger","maxlength","maxLengthValidator","\u0275MaxLengthValidator_BaseFactory","__ngFactoryType__","\u0275\u0275getInheritedFactory","\u0275\u0275defineDirective","rf","ctx","\u0275\u0275attribute","\u0275\u0275ProvidersFeature","\u0275\u0275InheritDefinitionFeature","\u0275InternalFormsSharedModule","__ngFactoryType__","\u0275\u0275defineNgModule","\u0275\u0275defineInjector","isAbstractControlOptions","options","FormBuilder","nnfb","controls","reducedControls","newOptions","FormGroup","FormRecord","formState","validatorOrOpts","asyncValidator","FormControl","__spreadProps","__spreadValues","createdControls","c","FormArray","controlName","AbstractControl","value","validator","\u0275\u0275defineInjectable","ReactiveFormsModule","opts","NG_MODEL_WITH_FORM_CONTROL_WARNING","CALL_SET_DISABLED_STATE","setDisabledStateDefault","__ngFactoryType__","\u0275\u0275defineNgModule","\u0275\u0275defineInjector","\u0275InternalFormsSharedModule"],x_google_ignoreList:[0]},_coverageSchema:"1a1c01bbd47fc00a2c39e90264f33305004495a9",hash:"9540e25f8d0aa5ce2dc25552c72f9d646ebdb5f2"};var coverage=global[gcv]||(global[gcv]={});if(!coverage[path]||coverage[path].hash!==hash){coverage[path]=coverageData;}var actualCoverage=coverage[path];{// @ts-ignore +cov_2r2vblf1xu=function(){return actualCoverage;};}return actualCoverage;}cov_2r2vblf1xu();import{$ as ye,Ba as Ce,Ea as F,Fa as a,Fb as _,I as k,K as p,L as ve,La as Q,M as J,Ma as l,O as m,Oa as c,Ob as h,Pb as w,Q as j,Ra as Ve,Ub as Ae,Va as De,Wa as be,Zb as te,ba as b,d as ge,g as pe,ga as A,ja as G,ka as v,m as me,ma as M,nb as E,s as _e,yb as ee}from"./chunk-RYTNMYZW.js";import{a as u,b as d}from"./chunk-VCZGUBMY.js";var Re=(cov_2r2vblf1xu().s[0]++,(()=>{cov_2r2vblf1xu().f[0]++;class n{_renderer;_elementRef;onChange=(cov_2r2vblf1xu().s[1]++,e=>{cov_2r2vblf1xu().f[1]++;});onTouched=(cov_2r2vblf1xu().s[2]++,()=>{cov_2r2vblf1xu().f[2]++;});constructor(e,i){cov_2r2vblf1xu().f[3]++;cov_2r2vblf1xu().s[3]++;this._renderer=e,this._elementRef=i;}setProperty(e,i){cov_2r2vblf1xu().f[4]++;cov_2r2vblf1xu().s[4]++;this._renderer.setProperty(this._elementRef.nativeElement,e,i);}registerOnTouched(e){cov_2r2vblf1xu().f[5]++;cov_2r2vblf1xu().s[5]++;this.onTouched=e;}registerOnChange(e){cov_2r2vblf1xu().f[6]++;cov_2r2vblf1xu().s[6]++;this.onChange=e;}setDisabledState(e){cov_2r2vblf1xu().f[7]++;cov_2r2vblf1xu().s[7]++;this.setProperty("disabled",e);}static ɵfac=(cov_2r2vblf1xu().s[8]++,function(i){cov_2r2vblf1xu().f[8]++;cov_2r2vblf1xu().s[9]++;return new((cov_2r2vblf1xu().b[0][0]++,i)||(cov_2r2vblf1xu().b[0][1]++,n))(a(F),a(M));});static ɵdir=(cov_2r2vblf1xu().s[10]++,l({type:n}));}cov_2r2vblf1xu().s[11]++;return n;})()),se=(cov_2r2vblf1xu().s[12]++,(()=>{cov_2r2vblf1xu().f[9]++;class n extends Re{static ɵfac=(cov_2r2vblf1xu().s[13]++,(()=>{cov_2r2vblf1xu().f[10]++;let e;cov_2r2vblf1xu().s[14]++;return function(r){cov_2r2vblf1xu().f[11]++;cov_2r2vblf1xu().s[15]++;return((cov_2r2vblf1xu().b[1][0]++,e)||(cov_2r2vblf1xu().b[1][1]++,e=v(n)))((cov_2r2vblf1xu().b[2][0]++,r)||(cov_2r2vblf1xu().b[2][1]++,n));};})());static ɵdir=(cov_2r2vblf1xu().s[16]++,l({type:n,features:[c]}));}cov_2r2vblf1xu().s[17]++;return n;})()),X=(cov_2r2vblf1xu().s[18]++,new m(""));var rt=(cov_2r2vblf1xu().s[19]++,{provide:X,useExisting:p(()=>{cov_2r2vblf1xu().f[12]++;cov_2r2vblf1xu().s[20]++;return ke;}),multi:!0});function ot(){cov_2r2vblf1xu().f[13]++;let n=(cov_2r2vblf1xu().s[21]++,te()?(cov_2r2vblf1xu().b[3][0]++,te().getUserAgent()):(cov_2r2vblf1xu().b[3][1]++,""));cov_2r2vblf1xu().s[22]++;return /android (\d+)/.test(n.toLowerCase());}var st=(cov_2r2vblf1xu().s[23]++,new m("")),ke=(cov_2r2vblf1xu().s[24]++,(()=>{cov_2r2vblf1xu().f[14]++;class n extends Re{_compositionMode;_composing=(cov_2r2vblf1xu().s[25]++,!1);constructor(e,i,r){cov_2r2vblf1xu().f[15]++;cov_2r2vblf1xu().s[26]++;super(e,i),this._compositionMode=r,(cov_2r2vblf1xu().b[4][0]++,this._compositionMode==null)&&(cov_2r2vblf1xu().b[4][1]++,this._compositionMode=!ot());}writeValue(e){cov_2r2vblf1xu().f[16]++;let i=(cov_2r2vblf1xu().s[27]++,(cov_2r2vblf1xu().b[5][0]++,e)??(cov_2r2vblf1xu().b[5][1]++,""));cov_2r2vblf1xu().s[28]++;this.setProperty("value",i);}_handleInput(e){cov_2r2vblf1xu().f[17]++;cov_2r2vblf1xu().s[29]++;((cov_2r2vblf1xu().b[6][0]++,!this._compositionMode)||(cov_2r2vblf1xu().b[6][1]++,this._compositionMode)&&(cov_2r2vblf1xu().b[6][2]++,!this._composing))&&(cov_2r2vblf1xu().b[6][3]++,this.onChange(e));}_compositionStart(){cov_2r2vblf1xu().f[18]++;cov_2r2vblf1xu().s[30]++;this._composing=!0;}_compositionEnd(e){cov_2r2vblf1xu().f[19]++;cov_2r2vblf1xu().s[31]++;this._composing=!1,(cov_2r2vblf1xu().b[7][0]++,this._compositionMode)&&(cov_2r2vblf1xu().b[7][1]++,this.onChange(e));}static ɵfac=(cov_2r2vblf1xu().s[32]++,function(i){cov_2r2vblf1xu().f[20]++;cov_2r2vblf1xu().s[33]++;return new((cov_2r2vblf1xu().b[8][0]++,i)||(cov_2r2vblf1xu().b[8][1]++,n))(a(F),a(M),a(st,8));});static ɵdir=(cov_2r2vblf1xu().s[34]++,l({type:n,selectors:[["input","formControlName","",3,"type","checkbox"],["textarea","formControlName",""],["input","formControl","",3,"type","checkbox"],["textarea","formControl",""],["input","ngModel","",3,"type","checkbox"],["textarea","ngModel",""],["","ngDefaultControl",""]],hostBindings:function(i,r){cov_2r2vblf1xu().f[21]++;cov_2r2vblf1xu().s[35]++;(cov_2r2vblf1xu().b[9][0]++,i&1)&&(cov_2r2vblf1xu().b[9][1]++,E("input",function(s){cov_2r2vblf1xu().f[22]++;cov_2r2vblf1xu().s[36]++;return r._handleInput(s.target.value);})("blur",function(){cov_2r2vblf1xu().f[23]++;cov_2r2vblf1xu().s[37]++;return r.onTouched();})("compositionstart",function(){cov_2r2vblf1xu().f[24]++;cov_2r2vblf1xu().s[38]++;return r._compositionStart();})("compositionend",function(s){cov_2r2vblf1xu().f[25]++;cov_2r2vblf1xu().s[39]++;return r._compositionEnd(s.target.value);}));},standalone:!1,features:[_([rt]),c]}));}cov_2r2vblf1xu().s[40]++;return n;})());function ae(n){cov_2r2vblf1xu().f[26]++;cov_2r2vblf1xu().s[41]++;return(cov_2r2vblf1xu().b[10][0]++,n==null)||(cov_2r2vblf1xu().b[10][1]++,le(n)===0);}function le(n){cov_2r2vblf1xu().f[27]++;cov_2r2vblf1xu().s[42]++;return n==null?(cov_2r2vblf1xu().b[11][0]++,null):(cov_2r2vblf1xu().b[11][1]++,(cov_2r2vblf1xu().b[13][0]++,Array.isArray(n))||(cov_2r2vblf1xu().b[13][1]++,typeof n=="string")?(cov_2r2vblf1xu().b[12][0]++,n.length):(cov_2r2vblf1xu().b[12][1]++,n instanceof Set?(cov_2r2vblf1xu().b[14][0]++,n.size):(cov_2r2vblf1xu().b[14][1]++,null)));}cov_2r2vblf1xu().s[46]++;var ue=(cov_2r2vblf1xu().s[43]++,new m("")),je=(cov_2r2vblf1xu().s[44]++,new m("")),at=(cov_2r2vblf1xu().s[45]++,/^(?=.{1,254}$)(?=.{1,64}@)[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+)*@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/),Me=class{static min(t){cov_2r2vblf1xu().f[28]++;cov_2r2vblf1xu().s[47]++;return lt(t);}static max(t){cov_2r2vblf1xu().f[29]++;cov_2r2vblf1xu().s[48]++;return ut(t);}static required(t){cov_2r2vblf1xu().f[30]++;cov_2r2vblf1xu().s[49]++;return dt(t);}static requiredTrue(t){cov_2r2vblf1xu().f[31]++;cov_2r2vblf1xu().s[50]++;return ct(t);}static email(t){cov_2r2vblf1xu().f[32]++;cov_2r2vblf1xu().s[51]++;return ht(t);}static minLength(t){cov_2r2vblf1xu().f[33]++;cov_2r2vblf1xu().s[52]++;return ft(t);}static maxLength(t){cov_2r2vblf1xu().f[34]++;cov_2r2vblf1xu().s[53]++;return Ge(t);}static pattern(t){cov_2r2vblf1xu().f[35]++;cov_2r2vblf1xu().s[54]++;return gt(t);}static nullValidator(t){cov_2r2vblf1xu().f[36]++;cov_2r2vblf1xu().s[55]++;return U();}static compose(t){cov_2r2vblf1xu().f[37]++;cov_2r2vblf1xu().s[56]++;return $e(t);}static composeAsync(t){cov_2r2vblf1xu().f[38]++;cov_2r2vblf1xu().s[57]++;return qe(t);}};function lt(n){cov_2r2vblf1xu().f[39]++;cov_2r2vblf1xu().s[58]++;return t=>{cov_2r2vblf1xu().f[40]++;cov_2r2vblf1xu().s[59]++;if((cov_2r2vblf1xu().b[16][0]++,t.value==null)||(cov_2r2vblf1xu().b[16][1]++,n==null)){cov_2r2vblf1xu().b[15][0]++;cov_2r2vblf1xu().s[60]++;return null;}else{cov_2r2vblf1xu().b[15][1]++;}let e=(cov_2r2vblf1xu().s[61]++,parseFloat(t.value));cov_2r2vblf1xu().s[62]++;return(cov_2r2vblf1xu().b[18][0]++,!isNaN(e))&&(cov_2r2vblf1xu().b[18][1]++,e{cov_2r2vblf1xu().f[42]++;cov_2r2vblf1xu().s[64]++;if((cov_2r2vblf1xu().b[20][0]++,t.value==null)||(cov_2r2vblf1xu().b[20][1]++,n==null)){cov_2r2vblf1xu().b[19][0]++;cov_2r2vblf1xu().s[65]++;return null;}else{cov_2r2vblf1xu().b[19][1]++;}let e=(cov_2r2vblf1xu().s[66]++,parseFloat(t.value));cov_2r2vblf1xu().s[67]++;return(cov_2r2vblf1xu().b[22][0]++,!isNaN(e))&&(cov_2r2vblf1xu().b[22][1]++,e>n)?(cov_2r2vblf1xu().b[21][0]++,{max:{max:n,actual:t.value}}):(cov_2r2vblf1xu().b[21][1]++,null);};}function dt(n){cov_2r2vblf1xu().f[43]++;cov_2r2vblf1xu().s[68]++;return ae(n.value)?(cov_2r2vblf1xu().b[23][0]++,{required:!0}):(cov_2r2vblf1xu().b[23][1]++,null);}function ct(n){cov_2r2vblf1xu().f[44]++;cov_2r2vblf1xu().s[69]++;return n.value===!0?(cov_2r2vblf1xu().b[24][0]++,null):(cov_2r2vblf1xu().b[24][1]++,{required:!0});}function ht(n){cov_2r2vblf1xu().f[45]++;cov_2r2vblf1xu().s[70]++;return(cov_2r2vblf1xu().b[26][0]++,ae(n.value))||(cov_2r2vblf1xu().b[26][1]++,at.test(n.value))?(cov_2r2vblf1xu().b[25][0]++,null):(cov_2r2vblf1xu().b[25][1]++,{email:!0});}function ft(n){cov_2r2vblf1xu().f[46]++;cov_2r2vblf1xu().s[71]++;return t=>{cov_2r2vblf1xu().f[47]++;let e=(cov_2r2vblf1xu().s[72]++,(cov_2r2vblf1xu().b[27][0]++,t.value?.length)??(cov_2r2vblf1xu().b[27][1]++,le(t.value)));cov_2r2vblf1xu().s[73]++;return(cov_2r2vblf1xu().b[29][0]++,e===null)||(cov_2r2vblf1xu().b[29][1]++,e===0)?(cov_2r2vblf1xu().b[28][0]++,null):(cov_2r2vblf1xu().b[28][1]++,e{cov_2r2vblf1xu().f[49]++;let e=(cov_2r2vblf1xu().s[75]++,(cov_2r2vblf1xu().b[31][0]++,t.value?.length)??(cov_2r2vblf1xu().b[31][1]++,le(t.value)));cov_2r2vblf1xu().s[76]++;return(cov_2r2vblf1xu().b[33][0]++,e!==null)&&(cov_2r2vblf1xu().b[33][1]++,e>n)?(cov_2r2vblf1xu().b[32][0]++,{maxlength:{requiredLength:n,actualLength:e}}):(cov_2r2vblf1xu().b[32][1]++,null);};}function gt(n){cov_2r2vblf1xu().f[50]++;cov_2r2vblf1xu().s[77]++;if(!n){cov_2r2vblf1xu().b[34][0]++;cov_2r2vblf1xu().s[78]++;return U;}else{cov_2r2vblf1xu().b[34][1]++;}let t,e;cov_2r2vblf1xu().s[79]++;return typeof n=="string"?(cov_2r2vblf1xu().b[35][0]++,e="",(cov_2r2vblf1xu().b[36][0]++,n.charAt(0)!=="^")&&(cov_2r2vblf1xu().b[36][1]++,e+="^"),e+=n,(cov_2r2vblf1xu().b[37][0]++,n.charAt(n.length-1)!=="$")&&(cov_2r2vblf1xu().b[37][1]++,e+="$"),t=new RegExp(e)):(cov_2r2vblf1xu().b[35][1]++,e=n.toString(),t=n),i=>{cov_2r2vblf1xu().f[51]++;cov_2r2vblf1xu().s[80]++;if(ae(i.value)){cov_2r2vblf1xu().b[38][0]++;cov_2r2vblf1xu().s[81]++;return null;}else{cov_2r2vblf1xu().b[38][1]++;}let r=(cov_2r2vblf1xu().s[82]++,i.value);cov_2r2vblf1xu().s[83]++;return t.test(r)?(cov_2r2vblf1xu().b[39][0]++,null):(cov_2r2vblf1xu().b[39][1]++,{pattern:{requiredPattern:e,actualValue:r}});};}function U(n){cov_2r2vblf1xu().f[52]++;cov_2r2vblf1xu().s[84]++;return null;}function Te(n){cov_2r2vblf1xu().f[53]++;cov_2r2vblf1xu().s[85]++;return n!=null;}function Be(n){cov_2r2vblf1xu().f[54]++;cov_2r2vblf1xu().s[86]++;return Ve(n)?(cov_2r2vblf1xu().b[40][0]++,pe(n)):(cov_2r2vblf1xu().b[40][1]++,n);}function Ue(n){cov_2r2vblf1xu().f[55]++;let t=(cov_2r2vblf1xu().s[87]++,{});cov_2r2vblf1xu().s[88]++;return n.forEach(e=>{cov_2r2vblf1xu().f[56]++;cov_2r2vblf1xu().s[89]++;t=e!=null?(cov_2r2vblf1xu().b[41][0]++,u(u({},t),e)):(cov_2r2vblf1xu().b[41][1]++,t);}),Object.keys(t).length===0?(cov_2r2vblf1xu().b[42][0]++,null):(cov_2r2vblf1xu().b[42][1]++,t);}function He(n,t){cov_2r2vblf1xu().f[57]++;cov_2r2vblf1xu().s[90]++;return t.map(e=>{cov_2r2vblf1xu().f[58]++;cov_2r2vblf1xu().s[91]++;return e(n);});}function pt(n){cov_2r2vblf1xu().f[59]++;cov_2r2vblf1xu().s[92]++;return!n.validate;}function Le(n){cov_2r2vblf1xu().f[60]++;cov_2r2vblf1xu().s[93]++;return n.map(t=>{cov_2r2vblf1xu().f[61]++;cov_2r2vblf1xu().s[94]++;return pt(t)?(cov_2r2vblf1xu().b[43][0]++,t):(cov_2r2vblf1xu().b[43][1]++,e=>{cov_2r2vblf1xu().f[62]++;cov_2r2vblf1xu().s[95]++;return t.validate(e);});});}function $e(n){cov_2r2vblf1xu().f[63]++;cov_2r2vblf1xu().s[96]++;if(!n){cov_2r2vblf1xu().b[44][0]++;cov_2r2vblf1xu().s[97]++;return null;}else{cov_2r2vblf1xu().b[44][1]++;}let t=(cov_2r2vblf1xu().s[98]++,n.filter(Te));cov_2r2vblf1xu().s[99]++;return t.length==0?(cov_2r2vblf1xu().b[45][0]++,null):(cov_2r2vblf1xu().b[45][1]++,function(e){cov_2r2vblf1xu().f[64]++;cov_2r2vblf1xu().s[100]++;return Ue(He(e,t));});}function We(n){cov_2r2vblf1xu().f[65]++;cov_2r2vblf1xu().s[101]++;return n!=null?(cov_2r2vblf1xu().b[46][0]++,$e(Le(n))):(cov_2r2vblf1xu().b[46][1]++,null);}function qe(n){cov_2r2vblf1xu().f[66]++;cov_2r2vblf1xu().s[102]++;if(!n){cov_2r2vblf1xu().b[47][0]++;cov_2r2vblf1xu().s[103]++;return null;}else{cov_2r2vblf1xu().b[47][1]++;}let t=(cov_2r2vblf1xu().s[104]++,n.filter(Te));cov_2r2vblf1xu().s[105]++;return t.length==0?(cov_2r2vblf1xu().b[48][0]++,null):(cov_2r2vblf1xu().b[48][1]++,function(e){cov_2r2vblf1xu().f[67]++;let i=(cov_2r2vblf1xu().s[106]++,He(e,t).map(Be));cov_2r2vblf1xu().s[107]++;return _e(i).pipe(me(Ue));});}function ze(n){cov_2r2vblf1xu().f[68]++;cov_2r2vblf1xu().s[108]++;return n!=null?(cov_2r2vblf1xu().b[49][0]++,qe(Le(n))):(cov_2r2vblf1xu().b[49][1]++,null);}function Fe(n,t){cov_2r2vblf1xu().f[69]++;cov_2r2vblf1xu().s[109]++;return n===null?(cov_2r2vblf1xu().b[50][0]++,[t]):(cov_2r2vblf1xu().b[50][1]++,Array.isArray(n)?(cov_2r2vblf1xu().b[51][0]++,[...n,t]):(cov_2r2vblf1xu().b[51][1]++,[n,t]));}function Ze(n){cov_2r2vblf1xu().f[70]++;cov_2r2vblf1xu().s[110]++;return n._rawValidators;}function Xe(n){cov_2r2vblf1xu().f[71]++;cov_2r2vblf1xu().s[111]++;return n._rawAsyncValidators;}function ne(n){cov_2r2vblf1xu().f[72]++;cov_2r2vblf1xu().s[112]++;return n?(cov_2r2vblf1xu().b[52][0]++,Array.isArray(n)?(cov_2r2vblf1xu().b[53][0]++,n):(cov_2r2vblf1xu().b[53][1]++,[n])):(cov_2r2vblf1xu().b[52][1]++,[]);}function H(n,t){cov_2r2vblf1xu().f[73]++;cov_2r2vblf1xu().s[113]++;return Array.isArray(n)?(cov_2r2vblf1xu().b[54][0]++,n.includes(t)):(cov_2r2vblf1xu().b[54][1]++,n===t);}function Ee(n,t){cov_2r2vblf1xu().f[74]++;let e=(cov_2r2vblf1xu().s[114]++,ne(t));cov_2r2vblf1xu().s[115]++;return ne(n).forEach(r=>{cov_2r2vblf1xu().f[75]++;cov_2r2vblf1xu().s[116]++;(cov_2r2vblf1xu().b[55][0]++,H(e,r))||(cov_2r2vblf1xu().b[55][1]++,e.push(r));}),e;}function we(n,t){cov_2r2vblf1xu().f[76]++;cov_2r2vblf1xu().s[117]++;return ne(t).filter(e=>{cov_2r2vblf1xu().f[77]++;cov_2r2vblf1xu().s[118]++;return!H(n,e);});}cov_2r2vblf1xu().s[119]++;cov_2r2vblf1xu().s[148]++;cov_2r2vblf1xu().s[151]++;cov_2r2vblf1xu().s[155]++;var L=class{get value(){cov_2r2vblf1xu().f[78]++;cov_2r2vblf1xu().s[120]++;return this.control?(cov_2r2vblf1xu().b[56][0]++,this.control.value):(cov_2r2vblf1xu().b[56][1]++,null);}get valid(){cov_2r2vblf1xu().f[79]++;cov_2r2vblf1xu().s[121]++;return this.control?(cov_2r2vblf1xu().b[57][0]++,this.control.valid):(cov_2r2vblf1xu().b[57][1]++,null);}get invalid(){cov_2r2vblf1xu().f[80]++;cov_2r2vblf1xu().s[122]++;return this.control?(cov_2r2vblf1xu().b[58][0]++,this.control.invalid):(cov_2r2vblf1xu().b[58][1]++,null);}get pending(){cov_2r2vblf1xu().f[81]++;cov_2r2vblf1xu().s[123]++;return this.control?(cov_2r2vblf1xu().b[59][0]++,this.control.pending):(cov_2r2vblf1xu().b[59][1]++,null);}get disabled(){cov_2r2vblf1xu().f[82]++;cov_2r2vblf1xu().s[124]++;return this.control?(cov_2r2vblf1xu().b[60][0]++,this.control.disabled):(cov_2r2vblf1xu().b[60][1]++,null);}get enabled(){cov_2r2vblf1xu().f[83]++;cov_2r2vblf1xu().s[125]++;return this.control?(cov_2r2vblf1xu().b[61][0]++,this.control.enabled):(cov_2r2vblf1xu().b[61][1]++,null);}get errors(){cov_2r2vblf1xu().f[84]++;cov_2r2vblf1xu().s[126]++;return this.control?(cov_2r2vblf1xu().b[62][0]++,this.control.errors):(cov_2r2vblf1xu().b[62][1]++,null);}get pristine(){cov_2r2vblf1xu().f[85]++;cov_2r2vblf1xu().s[127]++;return this.control?(cov_2r2vblf1xu().b[63][0]++,this.control.pristine):(cov_2r2vblf1xu().b[63][1]++,null);}get dirty(){cov_2r2vblf1xu().f[86]++;cov_2r2vblf1xu().s[128]++;return this.control?(cov_2r2vblf1xu().b[64][0]++,this.control.dirty):(cov_2r2vblf1xu().b[64][1]++,null);}get touched(){cov_2r2vblf1xu().f[87]++;cov_2r2vblf1xu().s[129]++;return this.control?(cov_2r2vblf1xu().b[65][0]++,this.control.touched):(cov_2r2vblf1xu().b[65][1]++,null);}get status(){cov_2r2vblf1xu().f[88]++;cov_2r2vblf1xu().s[130]++;return this.control?(cov_2r2vblf1xu().b[66][0]++,this.control.status):(cov_2r2vblf1xu().b[66][1]++,null);}get untouched(){cov_2r2vblf1xu().f[89]++;cov_2r2vblf1xu().s[131]++;return this.control?(cov_2r2vblf1xu().b[67][0]++,this.control.untouched):(cov_2r2vblf1xu().b[67][1]++,null);}get statusChanges(){cov_2r2vblf1xu().f[90]++;cov_2r2vblf1xu().s[132]++;return this.control?(cov_2r2vblf1xu().b[68][0]++,this.control.statusChanges):(cov_2r2vblf1xu().b[68][1]++,null);}get valueChanges(){cov_2r2vblf1xu().f[91]++;cov_2r2vblf1xu().s[133]++;return this.control?(cov_2r2vblf1xu().b[69][0]++,this.control.valueChanges):(cov_2r2vblf1xu().b[69][1]++,null);}get path(){cov_2r2vblf1xu().f[92]++;cov_2r2vblf1xu().s[134]++;return null;}_composedValidatorFn;_composedAsyncValidatorFn;_rawValidators=(cov_2r2vblf1xu().s[135]++,[]);_rawAsyncValidators=(cov_2r2vblf1xu().s[136]++,[]);_setValidators(t){cov_2r2vblf1xu().f[93]++;cov_2r2vblf1xu().s[137]++;this._rawValidators=(cov_2r2vblf1xu().b[70][0]++,t)||(cov_2r2vblf1xu().b[70][1]++,[]),this._composedValidatorFn=We(this._rawValidators);}_setAsyncValidators(t){cov_2r2vblf1xu().f[94]++;cov_2r2vblf1xu().s[138]++;this._rawAsyncValidators=(cov_2r2vblf1xu().b[71][0]++,t)||(cov_2r2vblf1xu().b[71][1]++,[]),this._composedAsyncValidatorFn=ze(this._rawAsyncValidators);}get validator(){cov_2r2vblf1xu().f[95]++;cov_2r2vblf1xu().s[139]++;return(cov_2r2vblf1xu().b[72][0]++,this._composedValidatorFn)||(cov_2r2vblf1xu().b[72][1]++,null);}get asyncValidator(){cov_2r2vblf1xu().f[96]++;cov_2r2vblf1xu().s[140]++;return(cov_2r2vblf1xu().b[73][0]++,this._composedAsyncValidatorFn)||(cov_2r2vblf1xu().b[73][1]++,null);}_onDestroyCallbacks=(cov_2r2vblf1xu().s[141]++,[]);_registerOnDestroy(t){cov_2r2vblf1xu().f[97]++;cov_2r2vblf1xu().s[142]++;this._onDestroyCallbacks.push(t);}_invokeOnDestroyCallbacks(){cov_2r2vblf1xu().f[98]++;cov_2r2vblf1xu().s[143]++;this._onDestroyCallbacks.forEach(t=>{cov_2r2vblf1xu().f[99]++;cov_2r2vblf1xu().s[144]++;return t();}),this._onDestroyCallbacks=[];}reset(t=(cov_2r2vblf1xu().b[74][0]++,void 0)){cov_2r2vblf1xu().f[100]++;cov_2r2vblf1xu().s[145]++;this.control?.reset(t);}hasError(t,e){cov_2r2vblf1xu().f[101]++;cov_2r2vblf1xu().s[146]++;return this.control?(cov_2r2vblf1xu().b[75][0]++,this.control.hasError(t,e)):(cov_2r2vblf1xu().b[75][1]++,!1);}getError(t,e){cov_2r2vblf1xu().f[102]++;cov_2r2vblf1xu().s[147]++;return this.control?(cov_2r2vblf1xu().b[76][0]++,this.control.getError(t,e)):(cov_2r2vblf1xu().b[76][1]++,null);}},V=class extends L{name;get formDirective(){cov_2r2vblf1xu().f[103]++;cov_2r2vblf1xu().s[149]++;return null;}get path(){cov_2r2vblf1xu().f[104]++;cov_2r2vblf1xu().s[150]++;return null;}},x=class extends L{_parent=(cov_2r2vblf1xu().s[152]++,null);name=(cov_2r2vblf1xu().s[153]++,null);valueAccessor=(cov_2r2vblf1xu().s[154]++,null);},$=class{_cd;constructor(t){cov_2r2vblf1xu().f[105]++;cov_2r2vblf1xu().s[156]++;this._cd=t;}get isTouched(){cov_2r2vblf1xu().f[106]++;cov_2r2vblf1xu().s[157]++;return this._cd?.control?._touched?.(),!!this._cd?.control?.touched;}get isUntouched(){cov_2r2vblf1xu().f[107]++;cov_2r2vblf1xu().s[158]++;return!!this._cd?.control?.untouched;}get isPristine(){cov_2r2vblf1xu().f[108]++;cov_2r2vblf1xu().s[159]++;return this._cd?.control?._pristine?.(),!!this._cd?.control?.pristine;}get isDirty(){cov_2r2vblf1xu().f[109]++;cov_2r2vblf1xu().s[160]++;return!!this._cd?.control?.dirty;}get isValid(){cov_2r2vblf1xu().f[110]++;cov_2r2vblf1xu().s[161]++;return this._cd?.control?._status?.(),!!this._cd?.control?.valid;}get isInvalid(){cov_2r2vblf1xu().f[111]++;cov_2r2vblf1xu().s[162]++;return!!this._cd?.control?.invalid;}get isPending(){cov_2r2vblf1xu().f[112]++;cov_2r2vblf1xu().s[163]++;return!!this._cd?.control?.pending;}get isSubmitted(){cov_2r2vblf1xu().f[113]++;cov_2r2vblf1xu().s[164]++;return this._cd?._submitted?.(),!!this._cd?.submitted;}};var cn=(cov_2r2vblf1xu().s[165]++,(()=>{cov_2r2vblf1xu().f[114]++;class n extends ${constructor(e){cov_2r2vblf1xu().f[115]++;cov_2r2vblf1xu().s[166]++;super(e);}static ɵfac=(cov_2r2vblf1xu().s[167]++,function(i){cov_2r2vblf1xu().f[116]++;cov_2r2vblf1xu().s[168]++;return new((cov_2r2vblf1xu().b[77][0]++,i)||(cov_2r2vblf1xu().b[77][1]++,n))(a(x,2));});static ɵdir=(cov_2r2vblf1xu().s[169]++,l({type:n,selectors:[["","formControlName",""],["","ngModel",""],["","formControl",""]],hostVars:14,hostBindings:function(i,r){cov_2r2vblf1xu().f[117]++;cov_2r2vblf1xu().s[170]++;(cov_2r2vblf1xu().b[78][0]++,i&2)&&(cov_2r2vblf1xu().b[78][1]++,ee("ng-untouched",r.isUntouched)("ng-touched",r.isTouched)("ng-pristine",r.isPristine)("ng-dirty",r.isDirty)("ng-valid",r.isValid)("ng-invalid",r.isInvalid)("ng-pending",r.isPending));},standalone:!1,features:[c]}));}cov_2r2vblf1xu().s[171]++;return n;})()),hn=(cov_2r2vblf1xu().s[172]++,(()=>{cov_2r2vblf1xu().f[118]++;class n extends ${constructor(e){cov_2r2vblf1xu().f[119]++;cov_2r2vblf1xu().s[173]++;super(e);}static ɵfac=(cov_2r2vblf1xu().s[174]++,function(i){cov_2r2vblf1xu().f[120]++;cov_2r2vblf1xu().s[175]++;return new((cov_2r2vblf1xu().b[79][0]++,i)||(cov_2r2vblf1xu().b[79][1]++,n))(a(V,10));});static ɵdir=(cov_2r2vblf1xu().s[176]++,l({type:n,selectors:[["","formGroupName",""],["","formArrayName",""],["","ngModelGroup",""],["","formGroup",""],["","formArray",""],["form",3,"ngNoForm",""],["","ngForm",""]],hostVars:16,hostBindings:function(i,r){cov_2r2vblf1xu().f[121]++;cov_2r2vblf1xu().s[177]++;(cov_2r2vblf1xu().b[80][0]++,i&2)&&(cov_2r2vblf1xu().b[80][1]++,ee("ng-untouched",r.isUntouched)("ng-touched",r.isTouched)("ng-pristine",r.isPristine)("ng-dirty",r.isDirty)("ng-valid",r.isValid)("ng-invalid",r.isInvalid)("ng-pending",r.isPending)("ng-submitted",r.isSubmitted));},standalone:!1,features:[c]}));}cov_2r2vblf1xu().s[178]++;return n;})());cov_2r2vblf1xu().s[183]++;cov_2r2vblf1xu().s[184]++;cov_2r2vblf1xu().s[186]++;cov_2r2vblf1xu().s[188]++;cov_2r2vblf1xu().s[190]++;cov_2r2vblf1xu().s[192]++;cov_2r2vblf1xu().s[194]++;var I=(cov_2r2vblf1xu().s[179]++,"VALID"),T=(cov_2r2vblf1xu().s[180]++,"INVALID"),y=(cov_2r2vblf1xu().s[181]++,"PENDING"),S=(cov_2r2vblf1xu().s[182]++,"DISABLED"),f=class{},W=class extends f{value;source;constructor(t,e){cov_2r2vblf1xu().f[122]++;cov_2r2vblf1xu().s[185]++;super(),this.value=t,this.source=e;}},N=class extends f{pristine;source;constructor(t,e){cov_2r2vblf1xu().f[123]++;cov_2r2vblf1xu().s[187]++;super(),this.pristine=t,this.source=e;}},O=class extends f{touched;source;constructor(t,e){cov_2r2vblf1xu().f[124]++;cov_2r2vblf1xu().s[189]++;super(),this.touched=t,this.source=e;}},C=class extends f{status;source;constructor(t,e){cov_2r2vblf1xu().f[125]++;cov_2r2vblf1xu().s[191]++;super(),this.status=t,this.source=e;}},ie=class extends f{source;constructor(t){cov_2r2vblf1xu().f[126]++;cov_2r2vblf1xu().s[193]++;super(),this.source=t;}},P=class extends f{source;constructor(t){cov_2r2vblf1xu().f[127]++;cov_2r2vblf1xu().s[195]++;super(),this.source=t;}};function de(n){cov_2r2vblf1xu().f[128]++;cov_2r2vblf1xu().s[196]++;return(cov_2r2vblf1xu().b[81][0]++,Y(n)?(cov_2r2vblf1xu().b[82][0]++,n.validators):(cov_2r2vblf1xu().b[82][1]++,n))||(cov_2r2vblf1xu().b[81][1]++,null);}function mt(n){cov_2r2vblf1xu().f[129]++;cov_2r2vblf1xu().s[197]++;return Array.isArray(n)?(cov_2r2vblf1xu().b[83][0]++,We(n)):(cov_2r2vblf1xu().b[83][1]++,(cov_2r2vblf1xu().b[84][0]++,n)||(cov_2r2vblf1xu().b[84][1]++,null));}function ce(n,t){cov_2r2vblf1xu().f[130]++;cov_2r2vblf1xu().s[198]++;return(cov_2r2vblf1xu().b[85][0]++,Y(t)?(cov_2r2vblf1xu().b[86][0]++,t.asyncValidators):(cov_2r2vblf1xu().b[86][1]++,n))||(cov_2r2vblf1xu().b[85][1]++,null);}function _t(n){cov_2r2vblf1xu().f[131]++;cov_2r2vblf1xu().s[199]++;return Array.isArray(n)?(cov_2r2vblf1xu().b[87][0]++,ze(n)):(cov_2r2vblf1xu().b[87][1]++,(cov_2r2vblf1xu().b[88][0]++,n)||(cov_2r2vblf1xu().b[88][1]++,null));}function Y(n){cov_2r2vblf1xu().f[132]++;cov_2r2vblf1xu().s[200]++;return(cov_2r2vblf1xu().b[89][0]++,n!=null)&&(cov_2r2vblf1xu().b[89][1]++,!Array.isArray(n))&&(cov_2r2vblf1xu().b[89][2]++,typeof n=="object");}function Ye(n,t,e){cov_2r2vblf1xu().f[133]++;let i=(cov_2r2vblf1xu().s[201]++,n.controls);cov_2r2vblf1xu().s[202]++;if(!(t?(cov_2r2vblf1xu().b[91][0]++,Object.keys(i)):(cov_2r2vblf1xu().b[91][1]++,i)).length){cov_2r2vblf1xu().b[90][0]++;cov_2r2vblf1xu().s[203]++;throw new k(1e3,"");}else{cov_2r2vblf1xu().b[90][1]++;}cov_2r2vblf1xu().s[204]++;if(!i[e]){cov_2r2vblf1xu().b[92][0]++;cov_2r2vblf1xu().s[205]++;throw new k(1001,"");}else{cov_2r2vblf1xu().b[92][1]++;}}function Ke(n,t,e){cov_2r2vblf1xu().f[134]++;cov_2r2vblf1xu().s[206]++;n._forEachChild((i,r)=>{cov_2r2vblf1xu().f[135]++;cov_2r2vblf1xu().s[207]++;if(e[r]===void 0){cov_2r2vblf1xu().b[93][0]++;cov_2r2vblf1xu().s[208]++;throw new k(1002,"");}else{cov_2r2vblf1xu().b[93][1]++;}});}cov_2r2vblf1xu().s[209]++;cov_2r2vblf1xu().s[347]++;var D=class{_pendingDirty=(cov_2r2vblf1xu().s[210]++,!1);_hasOwnPendingAsyncValidator=(cov_2r2vblf1xu().s[211]++,null);_pendingTouched=(cov_2r2vblf1xu().s[212]++,!1);_onCollectionChange=(cov_2r2vblf1xu().s[213]++,()=>{cov_2r2vblf1xu().f[136]++;});_updateOn;_parent=(cov_2r2vblf1xu().s[214]++,null);_asyncValidationSubscription;_composedValidatorFn;_composedAsyncValidatorFn;_rawValidators;_rawAsyncValidators;value;constructor(t,e){cov_2r2vblf1xu().f[137]++;cov_2r2vblf1xu().s[215]++;this._assignValidators(t),this._assignAsyncValidators(e);}get validator(){cov_2r2vblf1xu().f[138]++;cov_2r2vblf1xu().s[216]++;return this._composedValidatorFn;}set validator(t){cov_2r2vblf1xu().f[139]++;cov_2r2vblf1xu().s[217]++;this._rawValidators=this._composedValidatorFn=t;}get asyncValidator(){cov_2r2vblf1xu().f[140]++;cov_2r2vblf1xu().s[218]++;return this._composedAsyncValidatorFn;}set asyncValidator(t){cov_2r2vblf1xu().f[141]++;cov_2r2vblf1xu().s[219]++;this._rawAsyncValidators=this._composedAsyncValidatorFn=t;}get parent(){cov_2r2vblf1xu().f[142]++;cov_2r2vblf1xu().s[220]++;return this._parent;}get status(){cov_2r2vblf1xu().f[143]++;cov_2r2vblf1xu().s[221]++;return h(this.statusReactive);}set status(t){cov_2r2vblf1xu().f[144]++;cov_2r2vblf1xu().s[222]++;h(()=>{cov_2r2vblf1xu().f[145]++;cov_2r2vblf1xu().s[223]++;return this.statusReactive.set(t);});}_status=(cov_2r2vblf1xu().s[224]++,w(()=>{cov_2r2vblf1xu().f[146]++;cov_2r2vblf1xu().s[225]++;return this.statusReactive();}));statusReactive=(cov_2r2vblf1xu().s[226]++,A(void 0));get valid(){cov_2r2vblf1xu().f[147]++;cov_2r2vblf1xu().s[227]++;return this.status===I;}get invalid(){cov_2r2vblf1xu().f[148]++;cov_2r2vblf1xu().s[228]++;return this.status===T;}get pending(){cov_2r2vblf1xu().f[149]++;cov_2r2vblf1xu().s[229]++;return this.status==y;}get disabled(){cov_2r2vblf1xu().f[150]++;cov_2r2vblf1xu().s[230]++;return this.status===S;}get enabled(){cov_2r2vblf1xu().f[151]++;cov_2r2vblf1xu().s[231]++;return this.status!==S;}errors;get pristine(){cov_2r2vblf1xu().f[152]++;cov_2r2vblf1xu().s[232]++;return h(this.pristineReactive);}set pristine(t){cov_2r2vblf1xu().f[153]++;cov_2r2vblf1xu().s[233]++;h(()=>{cov_2r2vblf1xu().f[154]++;cov_2r2vblf1xu().s[234]++;return this.pristineReactive.set(t);});}_pristine=(cov_2r2vblf1xu().s[235]++,w(()=>{cov_2r2vblf1xu().f[155]++;cov_2r2vblf1xu().s[236]++;return this.pristineReactive();}));pristineReactive=(cov_2r2vblf1xu().s[237]++,A(!0));get dirty(){cov_2r2vblf1xu().f[156]++;cov_2r2vblf1xu().s[238]++;return!this.pristine;}get touched(){cov_2r2vblf1xu().f[157]++;cov_2r2vblf1xu().s[239]++;return h(this.touchedReactive);}set touched(t){cov_2r2vblf1xu().f[158]++;cov_2r2vblf1xu().s[240]++;h(()=>{cov_2r2vblf1xu().f[159]++;cov_2r2vblf1xu().s[241]++;return this.touchedReactive.set(t);});}_touched=(cov_2r2vblf1xu().s[242]++,w(()=>{cov_2r2vblf1xu().f[160]++;cov_2r2vblf1xu().s[243]++;return this.touchedReactive();}));touchedReactive=(cov_2r2vblf1xu().s[244]++,A(!1));get untouched(){cov_2r2vblf1xu().f[161]++;cov_2r2vblf1xu().s[245]++;return!this.touched;}_events=(cov_2r2vblf1xu().s[246]++,new ge());events=(cov_2r2vblf1xu().s[247]++,this._events.asObservable());valueChanges;statusChanges;get updateOn(){cov_2r2vblf1xu().f[162]++;cov_2r2vblf1xu().s[248]++;return this._updateOn?(cov_2r2vblf1xu().b[94][0]++,this._updateOn):(cov_2r2vblf1xu().b[94][1]++,this.parent?(cov_2r2vblf1xu().b[95][0]++,this.parent.updateOn):(cov_2r2vblf1xu().b[95][1]++,"change"));}setValidators(t){cov_2r2vblf1xu().f[163]++;cov_2r2vblf1xu().s[249]++;this._assignValidators(t);}setAsyncValidators(t){cov_2r2vblf1xu().f[164]++;cov_2r2vblf1xu().s[250]++;this._assignAsyncValidators(t);}addValidators(t){cov_2r2vblf1xu().f[165]++;cov_2r2vblf1xu().s[251]++;this.setValidators(Ee(t,this._rawValidators));}addAsyncValidators(t){cov_2r2vblf1xu().f[166]++;cov_2r2vblf1xu().s[252]++;this.setAsyncValidators(Ee(t,this._rawAsyncValidators));}removeValidators(t){cov_2r2vblf1xu().f[167]++;cov_2r2vblf1xu().s[253]++;this.setValidators(we(t,this._rawValidators));}removeAsyncValidators(t){cov_2r2vblf1xu().f[168]++;cov_2r2vblf1xu().s[254]++;this.setAsyncValidators(we(t,this._rawAsyncValidators));}hasValidator(t){cov_2r2vblf1xu().f[169]++;cov_2r2vblf1xu().s[255]++;return H(this._rawValidators,t);}hasAsyncValidator(t){cov_2r2vblf1xu().f[170]++;cov_2r2vblf1xu().s[256]++;return H(this._rawAsyncValidators,t);}clearValidators(){cov_2r2vblf1xu().f[171]++;cov_2r2vblf1xu().s[257]++;this.validator=null;}clearAsyncValidators(){cov_2r2vblf1xu().f[172]++;cov_2r2vblf1xu().s[258]++;this.asyncValidator=null;}markAsTouched(t=(cov_2r2vblf1xu().b[96][0]++,{})){cov_2r2vblf1xu().f[173]++;let e=(cov_2r2vblf1xu().s[259]++,this.touched===!1);cov_2r2vblf1xu().s[260]++;this.touched=!0;let i=(cov_2r2vblf1xu().s[261]++,(cov_2r2vblf1xu().b[97][0]++,t.sourceControl)??(cov_2r2vblf1xu().b[97][1]++,this));cov_2r2vblf1xu().s[262]++;(cov_2r2vblf1xu().b[98][0]++,t.onlySelf)||(cov_2r2vblf1xu().b[98][1]++,this._parent?.markAsTouched(d(u({},t),{sourceControl:i}))),(cov_2r2vblf1xu().b[99][0]++,e)&&(cov_2r2vblf1xu().b[99][1]++,t.emitEvent!==!1)&&(cov_2r2vblf1xu().b[99][2]++,this._events.next(new O(!0,i)));}markAllAsDirty(t=(cov_2r2vblf1xu().b[100][0]++,{})){cov_2r2vblf1xu().f[174]++;cov_2r2vblf1xu().s[263]++;this.markAsDirty({onlySelf:!0,emitEvent:t.emitEvent,sourceControl:this}),this._forEachChild(e=>{cov_2r2vblf1xu().f[175]++;cov_2r2vblf1xu().s[264]++;return e.markAllAsDirty(t);});}markAllAsTouched(t=(cov_2r2vblf1xu().b[101][0]++,{})){cov_2r2vblf1xu().f[176]++;cov_2r2vblf1xu().s[265]++;this.markAsTouched({onlySelf:!0,emitEvent:t.emitEvent,sourceControl:this}),this._forEachChild(e=>{cov_2r2vblf1xu().f[177]++;cov_2r2vblf1xu().s[266]++;return e.markAllAsTouched(t);});}markAsUntouched(t=(cov_2r2vblf1xu().b[102][0]++,{})){cov_2r2vblf1xu().f[178]++;let e=(cov_2r2vblf1xu().s[267]++,this.touched===!0);cov_2r2vblf1xu().s[268]++;this.touched=!1,this._pendingTouched=!1;let i=(cov_2r2vblf1xu().s[269]++,(cov_2r2vblf1xu().b[103][0]++,t.sourceControl)??(cov_2r2vblf1xu().b[103][1]++,this));cov_2r2vblf1xu().s[270]++;this._forEachChild(r=>{cov_2r2vblf1xu().f[179]++;cov_2r2vblf1xu().s[271]++;r.markAsUntouched({onlySelf:!0,emitEvent:t.emitEvent,sourceControl:i});}),(cov_2r2vblf1xu().b[104][0]++,t.onlySelf)||(cov_2r2vblf1xu().b[104][1]++,this._parent?._updateTouched(t,i)),(cov_2r2vblf1xu().b[105][0]++,e)&&(cov_2r2vblf1xu().b[105][1]++,t.emitEvent!==!1)&&(cov_2r2vblf1xu().b[105][2]++,this._events.next(new O(!1,i)));}markAsDirty(t=(cov_2r2vblf1xu().b[106][0]++,{})){cov_2r2vblf1xu().f[180]++;let e=(cov_2r2vblf1xu().s[272]++,this.pristine===!0);cov_2r2vblf1xu().s[273]++;this.pristine=!1;let i=(cov_2r2vblf1xu().s[274]++,(cov_2r2vblf1xu().b[107][0]++,t.sourceControl)??(cov_2r2vblf1xu().b[107][1]++,this));cov_2r2vblf1xu().s[275]++;(cov_2r2vblf1xu().b[108][0]++,t.onlySelf)||(cov_2r2vblf1xu().b[108][1]++,this._parent?.markAsDirty(d(u({},t),{sourceControl:i}))),(cov_2r2vblf1xu().b[109][0]++,e)&&(cov_2r2vblf1xu().b[109][1]++,t.emitEvent!==!1)&&(cov_2r2vblf1xu().b[109][2]++,this._events.next(new N(!1,i)));}markAsPristine(t=(cov_2r2vblf1xu().b[110][0]++,{})){cov_2r2vblf1xu().f[181]++;let e=(cov_2r2vblf1xu().s[276]++,this.pristine===!1);cov_2r2vblf1xu().s[277]++;this.pristine=!0,this._pendingDirty=!1;let i=(cov_2r2vblf1xu().s[278]++,(cov_2r2vblf1xu().b[111][0]++,t.sourceControl)??(cov_2r2vblf1xu().b[111][1]++,this));cov_2r2vblf1xu().s[279]++;this._forEachChild(r=>{cov_2r2vblf1xu().f[182]++;cov_2r2vblf1xu().s[280]++;r.markAsPristine({onlySelf:!0,emitEvent:t.emitEvent});}),(cov_2r2vblf1xu().b[112][0]++,t.onlySelf)||(cov_2r2vblf1xu().b[112][1]++,this._parent?._updatePristine(t,i)),(cov_2r2vblf1xu().b[113][0]++,e)&&(cov_2r2vblf1xu().b[113][1]++,t.emitEvent!==!1)&&(cov_2r2vblf1xu().b[113][2]++,this._events.next(new N(!0,i)));}markAsPending(t=(cov_2r2vblf1xu().b[114][0]++,{})){cov_2r2vblf1xu().f[183]++;cov_2r2vblf1xu().s[281]++;this.status=y;let e=(cov_2r2vblf1xu().s[282]++,(cov_2r2vblf1xu().b[115][0]++,t.sourceControl)??(cov_2r2vblf1xu().b[115][1]++,this));cov_2r2vblf1xu().s[283]++;(cov_2r2vblf1xu().b[116][0]++,t.emitEvent!==!1)&&(cov_2r2vblf1xu().b[116][1]++,this._events.next(new C(this.status,e)),this.statusChanges.emit(this.status)),(cov_2r2vblf1xu().b[117][0]++,t.onlySelf)||(cov_2r2vblf1xu().b[117][1]++,this._parent?.markAsPending(d(u({},t),{sourceControl:e})));}disable(t=(cov_2r2vblf1xu().b[118][0]++,{})){cov_2r2vblf1xu().f[184]++;let e=(cov_2r2vblf1xu().s[284]++,this._parentMarkedDirty(t.onlySelf));cov_2r2vblf1xu().s[285]++;this.status=S,this.errors=null,this._forEachChild(r=>{cov_2r2vblf1xu().f[185]++;cov_2r2vblf1xu().s[286]++;r.disable(d(u({},t),{onlySelf:!0}));}),this._updateValue();let i=(cov_2r2vblf1xu().s[287]++,(cov_2r2vblf1xu().b[119][0]++,t.sourceControl)??(cov_2r2vblf1xu().b[119][1]++,this));cov_2r2vblf1xu().s[288]++;(cov_2r2vblf1xu().b[120][0]++,t.emitEvent!==!1)&&(cov_2r2vblf1xu().b[120][1]++,this._events.next(new W(this.value,i)),this._events.next(new C(this.status,i)),this.valueChanges.emit(this.value),this.statusChanges.emit(this.status)),this._updateAncestors(d(u({},t),{skipPristineCheck:e}),this),this._onDisabledChange.forEach(r=>{cov_2r2vblf1xu().f[186]++;cov_2r2vblf1xu().s[289]++;return r(!0);});}enable(t=(cov_2r2vblf1xu().b[121][0]++,{})){cov_2r2vblf1xu().f[187]++;let e=(cov_2r2vblf1xu().s[290]++,this._parentMarkedDirty(t.onlySelf));cov_2r2vblf1xu().s[291]++;this.status=I,this._forEachChild(i=>{cov_2r2vblf1xu().f[188]++;cov_2r2vblf1xu().s[292]++;i.enable(d(u({},t),{onlySelf:!0}));}),this.updateValueAndValidity({onlySelf:!0,emitEvent:t.emitEvent}),this._updateAncestors(d(u({},t),{skipPristineCheck:e}),this),this._onDisabledChange.forEach(i=>{cov_2r2vblf1xu().f[189]++;cov_2r2vblf1xu().s[293]++;return i(!1);});}_updateAncestors(t,e){cov_2r2vblf1xu().f[190]++;cov_2r2vblf1xu().s[294]++;(cov_2r2vblf1xu().b[122][0]++,t.onlySelf)||(cov_2r2vblf1xu().b[122][1]++,this._parent?.updateValueAndValidity(t),(cov_2r2vblf1xu().b[123][0]++,t.skipPristineCheck)||(cov_2r2vblf1xu().b[123][1]++,this._parent?._updatePristine({},e)),this._parent?._updateTouched({},e));}setParent(t){cov_2r2vblf1xu().f[191]++;cov_2r2vblf1xu().s[295]++;this._parent=t;}getRawValue(){cov_2r2vblf1xu().f[192]++;cov_2r2vblf1xu().s[296]++;return this.value;}updateValueAndValidity(t=(cov_2r2vblf1xu().b[124][0]++,{})){cov_2r2vblf1xu().f[193]++;cov_2r2vblf1xu().s[297]++;if(this._setInitialStatus(),this._updateValue(),this.enabled){cov_2r2vblf1xu().b[125][0]++;let i=(cov_2r2vblf1xu().s[298]++,this._cancelExistingSubscription());cov_2r2vblf1xu().s[299]++;this.errors=this._runValidator(),this.status=this._calculateStatus(),((cov_2r2vblf1xu().b[126][0]++,this.status===I)||(cov_2r2vblf1xu().b[126][1]++,this.status===y))&&(cov_2r2vblf1xu().b[126][2]++,this._runAsyncValidator(i,t.emitEvent));}else{cov_2r2vblf1xu().b[125][1]++;}let e=(cov_2r2vblf1xu().s[300]++,(cov_2r2vblf1xu().b[127][0]++,t.sourceControl)??(cov_2r2vblf1xu().b[127][1]++,this));cov_2r2vblf1xu().s[301]++;(cov_2r2vblf1xu().b[128][0]++,t.emitEvent!==!1)&&(cov_2r2vblf1xu().b[128][1]++,this._events.next(new W(this.value,e)),this._events.next(new C(this.status,e)),this.valueChanges.emit(this.value),this.statusChanges.emit(this.status)),(cov_2r2vblf1xu().b[129][0]++,t.onlySelf)||(cov_2r2vblf1xu().b[129][1]++,this._parent?.updateValueAndValidity(d(u({},t),{sourceControl:e})));}_updateTreeValidity(t=(cov_2r2vblf1xu().b[130][0]++,{emitEvent:!0})){cov_2r2vblf1xu().f[194]++;cov_2r2vblf1xu().s[302]++;this._forEachChild(e=>{cov_2r2vblf1xu().f[195]++;cov_2r2vblf1xu().s[303]++;return e._updateTreeValidity(t);}),this.updateValueAndValidity({onlySelf:!0,emitEvent:t.emitEvent});}_setInitialStatus(){cov_2r2vblf1xu().f[196]++;cov_2r2vblf1xu().s[304]++;this.status=this._allControlsDisabled()?(cov_2r2vblf1xu().b[131][0]++,S):(cov_2r2vblf1xu().b[131][1]++,I);}_runValidator(){cov_2r2vblf1xu().f[197]++;cov_2r2vblf1xu().s[305]++;return this.validator?(cov_2r2vblf1xu().b[132][0]++,this.validator(this)):(cov_2r2vblf1xu().b[132][1]++,null);}_runAsyncValidator(t,e){cov_2r2vblf1xu().f[198]++;cov_2r2vblf1xu().s[306]++;if(this.asyncValidator){cov_2r2vblf1xu().b[133][0]++;cov_2r2vblf1xu().s[307]++;this.status=y,this._hasOwnPendingAsyncValidator={emitEvent:e!==!1,shouldHaveEmitted:t!==!1};let i=(cov_2r2vblf1xu().s[308]++,Be(this.asyncValidator(this)));cov_2r2vblf1xu().s[309]++;this._asyncValidationSubscription=i.subscribe(r=>{cov_2r2vblf1xu().f[199]++;cov_2r2vblf1xu().s[310]++;this._hasOwnPendingAsyncValidator=null,this.setErrors(r,{emitEvent:e,shouldHaveEmitted:t});});}else{cov_2r2vblf1xu().b[133][1]++;}}_cancelExistingSubscription(){cov_2r2vblf1xu().f[200]++;cov_2r2vblf1xu().s[311]++;if(this._asyncValidationSubscription){cov_2r2vblf1xu().b[134][0]++;cov_2r2vblf1xu().s[312]++;this._asyncValidationSubscription.unsubscribe();let t=(cov_2r2vblf1xu().s[313]++,((cov_2r2vblf1xu().b[135][0]++,this._hasOwnPendingAsyncValidator?.emitEvent)||(cov_2r2vblf1xu().b[135][1]++,this._hasOwnPendingAsyncValidator?.shouldHaveEmitted))??(cov_2r2vblf1xu().b[135][2]++,!1));cov_2r2vblf1xu().s[314]++;return this._hasOwnPendingAsyncValidator=null,t;}else{cov_2r2vblf1xu().b[134][1]++;}cov_2r2vblf1xu().s[315]++;return!1;}setErrors(t,e=(cov_2r2vblf1xu().b[136][0]++,{})){cov_2r2vblf1xu().f[201]++;cov_2r2vblf1xu().s[316]++;this.errors=t,this._updateControlsErrors(e.emitEvent!==!1,this,e.shouldHaveEmitted);}get(t){cov_2r2vblf1xu().f[202]++;let e=(cov_2r2vblf1xu().s[317]++,t);cov_2r2vblf1xu().s[318]++;return(cov_2r2vblf1xu().b[138][0]++,e==null)||(cov_2r2vblf1xu().b[138][1]++,(cov_2r2vblf1xu().b[139][0]++,Array.isArray(e))||(cov_2r2vblf1xu().b[139][1]++,e=e.split(".")),e.length===0)?(cov_2r2vblf1xu().b[137][0]++,null):(cov_2r2vblf1xu().b[137][1]++,e.reduce((i,r)=>{cov_2r2vblf1xu().f[203]++;cov_2r2vblf1xu().s[319]++;return(cov_2r2vblf1xu().b[140][0]++,i)&&(cov_2r2vblf1xu().b[140][1]++,i._find(r));},this));}getError(t,e){cov_2r2vblf1xu().f[204]++;let i=(cov_2r2vblf1xu().s[320]++,e?(cov_2r2vblf1xu().b[141][0]++,this.get(e)):(cov_2r2vblf1xu().b[141][1]++,this));cov_2r2vblf1xu().s[321]++;return i?.errors?(cov_2r2vblf1xu().b[142][0]++,i.errors[t]):(cov_2r2vblf1xu().b[142][1]++,null);}hasError(t,e){cov_2r2vblf1xu().f[205]++;cov_2r2vblf1xu().s[322]++;return!!this.getError(t,e);}get root(){cov_2r2vblf1xu().f[206]++;let t=(cov_2r2vblf1xu().s[323]++,this);cov_2r2vblf1xu().s[324]++;for(;t._parent;){cov_2r2vblf1xu().s[325]++;t=t._parent;}cov_2r2vblf1xu().s[326]++;return t;}_updateControlsErrors(t,e,i){cov_2r2vblf1xu().f[207]++;cov_2r2vblf1xu().s[327]++;this.status=this._calculateStatus(),(cov_2r2vblf1xu().b[143][0]++,t)&&(cov_2r2vblf1xu().b[143][1]++,this.statusChanges.emit(this.status)),((cov_2r2vblf1xu().b[144][0]++,t)||(cov_2r2vblf1xu().b[144][1]++,i))&&(cov_2r2vblf1xu().b[144][2]++,this._events.next(new C(this.status,e))),(cov_2r2vblf1xu().b[145][0]++,this._parent)&&(cov_2r2vblf1xu().b[145][1]++,this._parent._updateControlsErrors(t,e,i));}_initObservables(){cov_2r2vblf1xu().f[208]++;cov_2r2vblf1xu().s[328]++;this.valueChanges=new b(),this.statusChanges=new b();}_calculateStatus(){cov_2r2vblf1xu().f[209]++;cov_2r2vblf1xu().s[329]++;return this._allControlsDisabled()?(cov_2r2vblf1xu().b[146][0]++,S):(cov_2r2vblf1xu().b[146][1]++,this.errors?(cov_2r2vblf1xu().b[147][0]++,T):(cov_2r2vblf1xu().b[147][1]++,(cov_2r2vblf1xu().b[149][0]++,this._hasOwnPendingAsyncValidator)||(cov_2r2vblf1xu().b[149][1]++,this._anyControlsHaveStatus(y))?(cov_2r2vblf1xu().b[148][0]++,y):(cov_2r2vblf1xu().b[148][1]++,this._anyControlsHaveStatus(T)?(cov_2r2vblf1xu().b[150][0]++,T):(cov_2r2vblf1xu().b[150][1]++,I))));}_anyControlsHaveStatus(t){cov_2r2vblf1xu().f[210]++;cov_2r2vblf1xu().s[330]++;return this._anyControls(e=>{cov_2r2vblf1xu().f[211]++;cov_2r2vblf1xu().s[331]++;return e.status===t;});}_anyControlsDirty(){cov_2r2vblf1xu().f[212]++;cov_2r2vblf1xu().s[332]++;return this._anyControls(t=>{cov_2r2vblf1xu().f[213]++;cov_2r2vblf1xu().s[333]++;return t.dirty;});}_anyControlsTouched(){cov_2r2vblf1xu().f[214]++;cov_2r2vblf1xu().s[334]++;return this._anyControls(t=>{cov_2r2vblf1xu().f[215]++;cov_2r2vblf1xu().s[335]++;return t.touched;});}_updatePristine(t,e){cov_2r2vblf1xu().f[216]++;let i=(cov_2r2vblf1xu().s[336]++,!this._anyControlsDirty()),r=(cov_2r2vblf1xu().s[337]++,this.pristine!==i);cov_2r2vblf1xu().s[338]++;this.pristine=i,(cov_2r2vblf1xu().b[151][0]++,t.onlySelf)||(cov_2r2vblf1xu().b[151][1]++,this._parent?._updatePristine(t,e)),(cov_2r2vblf1xu().b[152][0]++,r)&&(cov_2r2vblf1xu().b[152][1]++,this._events.next(new N(this.pristine,e)));}_updateTouched(t=(cov_2r2vblf1xu().b[153][0]++,{}),e){cov_2r2vblf1xu().f[217]++;cov_2r2vblf1xu().s[339]++;this.touched=this._anyControlsTouched(),this._events.next(new O(this.touched,e)),(cov_2r2vblf1xu().b[154][0]++,t.onlySelf)||(cov_2r2vblf1xu().b[154][1]++,this._parent?._updateTouched(t,e));}_onDisabledChange=(cov_2r2vblf1xu().s[340]++,[]);_registerOnCollectionChange(t){cov_2r2vblf1xu().f[218]++;cov_2r2vblf1xu().s[341]++;this._onCollectionChange=t;}_setUpdateStrategy(t){cov_2r2vblf1xu().f[219]++;cov_2r2vblf1xu().s[342]++;(cov_2r2vblf1xu().b[155][0]++,Y(t))&&(cov_2r2vblf1xu().b[155][1]++,t.updateOn!=null)&&(cov_2r2vblf1xu().b[155][2]++,this._updateOn=t.updateOn);}_parentMarkedDirty(t){cov_2r2vblf1xu().f[220]++;cov_2r2vblf1xu().s[343]++;return(cov_2r2vblf1xu().b[156][0]++,!t)&&(cov_2r2vblf1xu().b[156][1]++,!!this._parent?.dirty)&&(cov_2r2vblf1xu().b[156][2]++,!this._parent._anyControlsDirty());}_find(t){cov_2r2vblf1xu().f[221]++;cov_2r2vblf1xu().s[344]++;return null;}_assignValidators(t){cov_2r2vblf1xu().f[222]++;cov_2r2vblf1xu().s[345]++;this._rawValidators=Array.isArray(t)?(cov_2r2vblf1xu().b[157][0]++,t.slice()):(cov_2r2vblf1xu().b[157][1]++,t),this._composedValidatorFn=mt(this._rawValidators);}_assignAsyncValidators(t){cov_2r2vblf1xu().f[223]++;cov_2r2vblf1xu().s[346]++;this._rawAsyncValidators=Array.isArray(t)?(cov_2r2vblf1xu().b[158][0]++,t.slice()):(cov_2r2vblf1xu().b[158][1]++,t),this._composedAsyncValidatorFn=_t(this._rawAsyncValidators);}},q=class extends D{constructor(t,e,i){cov_2r2vblf1xu().f[224]++;cov_2r2vblf1xu().s[348]++;super(de(e),ce(i,e)),this.controls=t,this._initObservables(),this._setUpdateStrategy(e),this._setUpControls(),this.updateValueAndValidity({onlySelf:!0,emitEvent:!!this.asyncValidator});}controls;registerControl(t,e){cov_2r2vblf1xu().f[225]++;cov_2r2vblf1xu().s[349]++;return this.controls[t]?(cov_2r2vblf1xu().b[159][0]++,this.controls[t]):(cov_2r2vblf1xu().b[159][1]++,this.controls[t]=e,e.setParent(this),e._registerOnCollectionChange(this._onCollectionChange),e);}addControl(t,e,i=(cov_2r2vblf1xu().b[160][0]++,{})){cov_2r2vblf1xu().f[226]++;cov_2r2vblf1xu().s[350]++;this.registerControl(t,e),this.updateValueAndValidity({emitEvent:i.emitEvent}),this._onCollectionChange();}removeControl(t,e=(cov_2r2vblf1xu().b[161][0]++,{})){cov_2r2vblf1xu().f[227]++;cov_2r2vblf1xu().s[351]++;(cov_2r2vblf1xu().b[162][0]++,this.controls[t])&&(cov_2r2vblf1xu().b[162][1]++,this.controls[t]._registerOnCollectionChange(()=>{cov_2r2vblf1xu().f[228]++;})),delete this.controls[t],this.updateValueAndValidity({emitEvent:e.emitEvent}),this._onCollectionChange();}setControl(t,e,i=(cov_2r2vblf1xu().b[163][0]++,{})){cov_2r2vblf1xu().f[229]++;cov_2r2vblf1xu().s[352]++;(cov_2r2vblf1xu().b[164][0]++,this.controls[t])&&(cov_2r2vblf1xu().b[164][1]++,this.controls[t]._registerOnCollectionChange(()=>{cov_2r2vblf1xu().f[230]++;})),delete this.controls[t],(cov_2r2vblf1xu().b[165][0]++,e)&&(cov_2r2vblf1xu().b[165][1]++,this.registerControl(t,e)),this.updateValueAndValidity({emitEvent:i.emitEvent}),this._onCollectionChange();}contains(t){cov_2r2vblf1xu().f[231]++;cov_2r2vblf1xu().s[353]++;return(cov_2r2vblf1xu().b[166][0]++,this.controls.hasOwnProperty(t))&&(cov_2r2vblf1xu().b[166][1]++,this.controls[t].enabled);}setValue(t,e=(cov_2r2vblf1xu().b[167][0]++,{})){cov_2r2vblf1xu().f[232]++;cov_2r2vblf1xu().s[354]++;Ke(this,!0,t),Object.keys(t).forEach(i=>{cov_2r2vblf1xu().f[233]++;cov_2r2vblf1xu().s[355]++;Ye(this,!0,i),this.controls[i].setValue(t[i],{onlySelf:!0,emitEvent:e.emitEvent});}),this.updateValueAndValidity(e);}patchValue(t,e=(cov_2r2vblf1xu().b[168][0]++,{})){cov_2r2vblf1xu().f[234]++;cov_2r2vblf1xu().s[356]++;(cov_2r2vblf1xu().b[169][0]++,t!=null)&&(cov_2r2vblf1xu().b[169][1]++,Object.keys(t).forEach(i=>{cov_2r2vblf1xu().f[235]++;let r=(cov_2r2vblf1xu().s[357]++,this.controls[i]);cov_2r2vblf1xu().s[358]++;(cov_2r2vblf1xu().b[170][0]++,r)&&(cov_2r2vblf1xu().b[170][1]++,r.patchValue(t[i],{onlySelf:!0,emitEvent:e.emitEvent}));}),this.updateValueAndValidity(e));}reset(t=(cov_2r2vblf1xu().b[171][0]++,{}),e=(cov_2r2vblf1xu().b[172][0]++,{})){cov_2r2vblf1xu().f[236]++;cov_2r2vblf1xu().s[359]++;this._forEachChild((i,r)=>{cov_2r2vblf1xu().f[237]++;cov_2r2vblf1xu().s[360]++;i.reset(t?(cov_2r2vblf1xu().b[173][0]++,t[r]):(cov_2r2vblf1xu().b[173][1]++,null),d(u({},e),{onlySelf:!0}));}),this._updatePristine(e,this),this._updateTouched(e,this),this.updateValueAndValidity(e),(cov_2r2vblf1xu().b[174][0]++,e?.emitEvent!==!1)&&(cov_2r2vblf1xu().b[174][1]++,this._events.next(new P(this)));}getRawValue(){cov_2r2vblf1xu().f[238]++;cov_2r2vblf1xu().s[361]++;return this._reduceChildren({},(t,e,i)=>{cov_2r2vblf1xu().f[239]++;cov_2r2vblf1xu().s[362]++;return t[i]=e.getRawValue(),t;});}_syncPendingControls(){cov_2r2vblf1xu().f[240]++;let t=(cov_2r2vblf1xu().s[363]++,this._reduceChildren(!1,(e,i)=>{cov_2r2vblf1xu().f[241]++;cov_2r2vblf1xu().s[364]++;return i._syncPendingControls()?(cov_2r2vblf1xu().b[175][0]++,!0):(cov_2r2vblf1xu().b[175][1]++,e);}));cov_2r2vblf1xu().s[365]++;return(cov_2r2vblf1xu().b[176][0]++,t)&&(cov_2r2vblf1xu().b[176][1]++,this.updateValueAndValidity({onlySelf:!0})),t;}_forEachChild(t){cov_2r2vblf1xu().f[242]++;cov_2r2vblf1xu().s[366]++;Object.keys(this.controls).forEach(e=>{cov_2r2vblf1xu().f[243]++;let i=(cov_2r2vblf1xu().s[367]++,this.controls[e]);cov_2r2vblf1xu().s[368]++;(cov_2r2vblf1xu().b[177][0]++,i)&&(cov_2r2vblf1xu().b[177][1]++,t(i,e));});}_setUpControls(){cov_2r2vblf1xu().f[244]++;cov_2r2vblf1xu().s[369]++;this._forEachChild(t=>{cov_2r2vblf1xu().f[245]++;cov_2r2vblf1xu().s[370]++;t.setParent(this),t._registerOnCollectionChange(this._onCollectionChange);});}_updateValue(){cov_2r2vblf1xu().f[246]++;cov_2r2vblf1xu().s[371]++;this.value=this._reduceValue();}_anyControls(t){cov_2r2vblf1xu().f[247]++;cov_2r2vblf1xu().s[372]++;for(let[e,i]of Object.entries(this.controls)){cov_2r2vblf1xu().s[373]++;if((cov_2r2vblf1xu().b[179][0]++,this.contains(e))&&(cov_2r2vblf1xu().b[179][1]++,t(i))){cov_2r2vblf1xu().b[178][0]++;cov_2r2vblf1xu().s[374]++;return!0;}else{cov_2r2vblf1xu().b[178][1]++;}}cov_2r2vblf1xu().s[375]++;return!1;}_reduceValue(){cov_2r2vblf1xu().f[248]++;let t=(cov_2r2vblf1xu().s[376]++,{});cov_2r2vblf1xu().s[377]++;return this._reduceChildren(t,(e,i,r)=>{cov_2r2vblf1xu().f[249]++;cov_2r2vblf1xu().s[378]++;return((cov_2r2vblf1xu().b[180][0]++,i.enabled)||(cov_2r2vblf1xu().b[180][1]++,this.disabled))&&(cov_2r2vblf1xu().b[180][2]++,e[r]=i.value),e;});}_reduceChildren(t,e){cov_2r2vblf1xu().f[250]++;let i=(cov_2r2vblf1xu().s[379]++,t);cov_2r2vblf1xu().s[380]++;return this._forEachChild((r,o)=>{cov_2r2vblf1xu().f[251]++;cov_2r2vblf1xu().s[381]++;i=e(i,r,o);}),i;}_allControlsDisabled(){cov_2r2vblf1xu().f[252]++;cov_2r2vblf1xu().s[382]++;for(let t of Object.keys(this.controls)){cov_2r2vblf1xu().s[383]++;if(this.controls[t].enabled){cov_2r2vblf1xu().b[181][0]++;cov_2r2vblf1xu().s[384]++;return!1;}else{cov_2r2vblf1xu().b[181][1]++;}}cov_2r2vblf1xu().s[385]++;return(cov_2r2vblf1xu().b[182][0]++,Object.keys(this.controls).length>0)||(cov_2r2vblf1xu().b[182][1]++,this.disabled);}_find(t){cov_2r2vblf1xu().f[253]++;cov_2r2vblf1xu().s[386]++;return this.controls.hasOwnProperty(t)?(cov_2r2vblf1xu().b[183][0]++,this.controls[t]):(cov_2r2vblf1xu().b[183][1]++,null);}};cov_2r2vblf1xu().s[387]++;var re=class extends q{};var Je=(cov_2r2vblf1xu().s[388]++,new m("",{factory:()=>{cov_2r2vblf1xu().f[254]++;cov_2r2vblf1xu().s[389]++;return he;}})),he=(cov_2r2vblf1xu().s[390]++,"always");function vt(n,t){cov_2r2vblf1xu().f[255]++;cov_2r2vblf1xu().s[391]++;return[...t.path,n];}function Ie(n,t,e=(cov_2r2vblf1xu().b[184][0]++,he)){cov_2r2vblf1xu().f[256]++;cov_2r2vblf1xu().s[392]++;fe(n,t),t.valueAccessor.writeValue(n.value),((cov_2r2vblf1xu().b[185][0]++,n.disabled)||(cov_2r2vblf1xu().b[185][1]++,e==="always"))&&(cov_2r2vblf1xu().b[185][2]++,t.valueAccessor.setDisabledState?.(n.disabled)),Ct(n,t),Dt(n,t),Vt(n,t),yt(n,t);}function Se(n,t,e=(cov_2r2vblf1xu().b[186][0]++,!0)){cov_2r2vblf1xu().f[257]++;cov_2r2vblf1xu().s[393]++;let i=()=>{cov_2r2vblf1xu().f[258]++;};cov_2r2vblf1xu().s[394]++;t?.valueAccessor?.registerOnChange(i),t?.valueAccessor?.registerOnTouched(i),Z(n,t),(cov_2r2vblf1xu().b[187][0]++,n)&&(cov_2r2vblf1xu().b[187][1]++,t._invokeOnDestroyCallbacks(),n._registerOnCollectionChange(()=>{cov_2r2vblf1xu().f[259]++;}));}function z(n,t){cov_2r2vblf1xu().f[260]++;cov_2r2vblf1xu().s[395]++;n.forEach(e=>{cov_2r2vblf1xu().f[261]++;cov_2r2vblf1xu().s[396]++;(cov_2r2vblf1xu().b[188][0]++,e.registerOnValidatorChange)&&(cov_2r2vblf1xu().b[188][1]++,e.registerOnValidatorChange(t));});}function yt(n,t){cov_2r2vblf1xu().f[262]++;cov_2r2vblf1xu().s[397]++;if(t.valueAccessor.setDisabledState){cov_2r2vblf1xu().b[189][0]++;cov_2r2vblf1xu().s[398]++;let e=i=>{cov_2r2vblf1xu().f[263]++;cov_2r2vblf1xu().s[399]++;t.valueAccessor.setDisabledState(i);};cov_2r2vblf1xu().s[400]++;n.registerOnDisabledChange(e),t._registerOnDestroy(()=>{cov_2r2vblf1xu().f[264]++;cov_2r2vblf1xu().s[401]++;n._unregisterOnDisabledChange(e);});}else{cov_2r2vblf1xu().b[189][1]++;}}function fe(n,t){cov_2r2vblf1xu().f[265]++;let e=(cov_2r2vblf1xu().s[402]++,Ze(n));cov_2r2vblf1xu().s[403]++;t.validator!==null?(cov_2r2vblf1xu().b[190][0]++,n.setValidators(Fe(e,t.validator))):(cov_2r2vblf1xu().b[190][1]++,(cov_2r2vblf1xu().b[191][0]++,typeof e=="function")&&(cov_2r2vblf1xu().b[191][1]++,n.setValidators([e])));let i=(cov_2r2vblf1xu().s[404]++,Xe(n));cov_2r2vblf1xu().s[405]++;t.asyncValidator!==null?(cov_2r2vblf1xu().b[192][0]++,n.setAsyncValidators(Fe(i,t.asyncValidator))):(cov_2r2vblf1xu().b[192][1]++,(cov_2r2vblf1xu().b[193][0]++,typeof i=="function")&&(cov_2r2vblf1xu().b[193][1]++,n.setAsyncValidators([i])));cov_2r2vblf1xu().s[406]++;let r=()=>{cov_2r2vblf1xu().f[266]++;cov_2r2vblf1xu().s[407]++;return n.updateValueAndValidity();};cov_2r2vblf1xu().s[408]++;z(t._rawValidators,r),z(t._rawAsyncValidators,r);}function Z(n,t){cov_2r2vblf1xu().f[267]++;let e=(cov_2r2vblf1xu().s[409]++,!1);cov_2r2vblf1xu().s[410]++;if(n!==null){cov_2r2vblf1xu().b[194][0]++;cov_2r2vblf1xu().s[411]++;if(t.validator!==null){cov_2r2vblf1xu().b[195][0]++;let r=(cov_2r2vblf1xu().s[412]++,Ze(n));cov_2r2vblf1xu().s[413]++;if((cov_2r2vblf1xu().b[197][0]++,Array.isArray(r))&&(cov_2r2vblf1xu().b[197][1]++,r.length>0)){cov_2r2vblf1xu().b[196][0]++;let o=(cov_2r2vblf1xu().s[414]++,r.filter(s=>{cov_2r2vblf1xu().f[268]++;cov_2r2vblf1xu().s[415]++;return s!==t.validator;}));cov_2r2vblf1xu().s[416]++;(cov_2r2vblf1xu().b[198][0]++,o.length!==r.length)&&(cov_2r2vblf1xu().b[198][1]++,e=!0,n.setValidators(o));}else{cov_2r2vblf1xu().b[196][1]++;}}else{cov_2r2vblf1xu().b[195][1]++;}cov_2r2vblf1xu().s[417]++;if(t.asyncValidator!==null){cov_2r2vblf1xu().b[199][0]++;let r=(cov_2r2vblf1xu().s[418]++,Xe(n));cov_2r2vblf1xu().s[419]++;if((cov_2r2vblf1xu().b[201][0]++,Array.isArray(r))&&(cov_2r2vblf1xu().b[201][1]++,r.length>0)){cov_2r2vblf1xu().b[200][0]++;let o=(cov_2r2vblf1xu().s[420]++,r.filter(s=>{cov_2r2vblf1xu().f[269]++;cov_2r2vblf1xu().s[421]++;return s!==t.asyncValidator;}));cov_2r2vblf1xu().s[422]++;(cov_2r2vblf1xu().b[202][0]++,o.length!==r.length)&&(cov_2r2vblf1xu().b[202][1]++,e=!0,n.setAsyncValidators(o));}else{cov_2r2vblf1xu().b[200][1]++;}}else{cov_2r2vblf1xu().b[199][1]++;}}else{cov_2r2vblf1xu().b[194][1]++;}cov_2r2vblf1xu().s[423]++;let i=()=>{cov_2r2vblf1xu().f[270]++;};cov_2r2vblf1xu().s[424]++;return z(t._rawValidators,i),z(t._rawAsyncValidators,i),e;}function Ct(n,t){cov_2r2vblf1xu().f[271]++;cov_2r2vblf1xu().s[425]++;t.valueAccessor.registerOnChange(e=>{cov_2r2vblf1xu().f[272]++;cov_2r2vblf1xu().s[426]++;n._pendingValue=e,n._pendingChange=!0,n._pendingDirty=!0,(cov_2r2vblf1xu().b[203][0]++,n.updateOn==="change")&&(cov_2r2vblf1xu().b[203][1]++,Qe(n,t));});}function Vt(n,t){cov_2r2vblf1xu().f[273]++;cov_2r2vblf1xu().s[427]++;t.valueAccessor.registerOnTouched(()=>{cov_2r2vblf1xu().f[274]++;cov_2r2vblf1xu().s[428]++;n._pendingTouched=!0,(cov_2r2vblf1xu().b[204][0]++,n.updateOn==="blur")&&(cov_2r2vblf1xu().b[204][1]++,n._pendingChange)&&(cov_2r2vblf1xu().b[204][2]++,Qe(n,t)),(cov_2r2vblf1xu().b[205][0]++,n.updateOn!=="submit")&&(cov_2r2vblf1xu().b[205][1]++,n.markAsTouched());});}function Qe(n,t){cov_2r2vblf1xu().f[275]++;cov_2r2vblf1xu().s[429]++;(cov_2r2vblf1xu().b[206][0]++,n._pendingDirty)&&(cov_2r2vblf1xu().b[206][1]++,n.markAsDirty()),n.setValue(n._pendingValue,{emitModelToViewChange:!1}),t.viewToModelUpdate(n._pendingValue),n._pendingChange=!1;}function Dt(n,t){cov_2r2vblf1xu().f[276]++;cov_2r2vblf1xu().s[430]++;let e=(i,r)=>{cov_2r2vblf1xu().f[277]++;cov_2r2vblf1xu().s[431]++;t.valueAccessor.writeValue(i),(cov_2r2vblf1xu().b[207][0]++,r)&&(cov_2r2vblf1xu().b[207][1]++,t.viewToModelUpdate(i));};cov_2r2vblf1xu().s[432]++;n.registerOnChange(e),t._registerOnDestroy(()=>{cov_2r2vblf1xu().f[278]++;cov_2r2vblf1xu().s[433]++;n._unregisterOnChange(e);});}function bt(n,t){cov_2r2vblf1xu().f[279]++;cov_2r2vblf1xu().s[434]++;n==null,fe(n,t);}function At(n,t){cov_2r2vblf1xu().f[280]++;cov_2r2vblf1xu().s[435]++;return Z(n,t);}function Mt(n,t){cov_2r2vblf1xu().f[281]++;cov_2r2vblf1xu().s[436]++;if(!n.hasOwnProperty("model")){cov_2r2vblf1xu().b[208][0]++;cov_2r2vblf1xu().s[437]++;return!1;}else{cov_2r2vblf1xu().b[208][1]++;}let e=(cov_2r2vblf1xu().s[438]++,n.model);cov_2r2vblf1xu().s[439]++;return e.isFirstChange()?(cov_2r2vblf1xu().b[209][0]++,!0):(cov_2r2vblf1xu().b[209][1]++,!Object.is(t,e.currentValue));}function Ft(n){cov_2r2vblf1xu().f[282]++;cov_2r2vblf1xu().s[440]++;return Object.getPrototypeOf(n.constructor)===se;}function Et(n,t){cov_2r2vblf1xu().f[283]++;cov_2r2vblf1xu().s[441]++;n._syncPendingControls(),t.forEach(e=>{cov_2r2vblf1xu().f[284]++;let i=(cov_2r2vblf1xu().s[442]++,e.control);cov_2r2vblf1xu().s[443]++;(cov_2r2vblf1xu().b[210][0]++,i.updateOn==="submit")&&(cov_2r2vblf1xu().b[210][1]++,i._pendingChange)&&(cov_2r2vblf1xu().b[210][2]++,e.viewToModelUpdate(i._pendingValue),i._pendingChange=!1);});}function wt(n,t){cov_2r2vblf1xu().f[285]++;cov_2r2vblf1xu().s[444]++;if(!t){cov_2r2vblf1xu().b[211][0]++;cov_2r2vblf1xu().s[445]++;return null;}else{cov_2r2vblf1xu().b[211][1]++;}cov_2r2vblf1xu().s[446]++;Array.isArray(t);let e,i,r;cov_2r2vblf1xu().s[447]++;return t.forEach(o=>{cov_2r2vblf1xu().f[286]++;cov_2r2vblf1xu().s[448]++;o.constructor===ke?(cov_2r2vblf1xu().b[212][0]++,e=o):(cov_2r2vblf1xu().b[212][1]++,Ft(o)?(cov_2r2vblf1xu().b[213][0]++,i=o):(cov_2r2vblf1xu().b[213][1]++,r=o));}),(cov_2r2vblf1xu().b[214][0]++,r)||(cov_2r2vblf1xu().b[214][1]++,i)||(cov_2r2vblf1xu().b[214][2]++,e)||(cov_2r2vblf1xu().b[214][3]++,null);}function It(n,t){cov_2r2vblf1xu().f[287]++;let e=(cov_2r2vblf1xu().s[449]++,n.indexOf(t));cov_2r2vblf1xu().s[450]++;(cov_2r2vblf1xu().b[215][0]++,e>-1)&&(cov_2r2vblf1xu().b[215][1]++,n.splice(e,1));}function Ne(n,t){cov_2r2vblf1xu().f[288]++;let e=(cov_2r2vblf1xu().s[451]++,n.indexOf(t));cov_2r2vblf1xu().s[452]++;(cov_2r2vblf1xu().b[216][0]++,e>-1)&&(cov_2r2vblf1xu().b[216][1]++,n.splice(e,1));}function Oe(n){cov_2r2vblf1xu().f[289]++;cov_2r2vblf1xu().s[453]++;return(cov_2r2vblf1xu().b[217][0]++,typeof n=="object")&&(cov_2r2vblf1xu().b[217][1]++,n!==null)&&(cov_2r2vblf1xu().b[217][2]++,Object.keys(n).length===2)&&(cov_2r2vblf1xu().b[217][3]++,"value"in n)&&(cov_2r2vblf1xu().b[217][4]++,"disabled"in n);}cov_2r2vblf1xu().s[454]++;var B=class extends D{defaultValue=(cov_2r2vblf1xu().s[455]++,null);_onChange=(cov_2r2vblf1xu().s[456]++,[]);_pendingValue;_pendingChange=(cov_2r2vblf1xu().s[457]++,!1);constructor(t=(cov_2r2vblf1xu().b[218][0]++,null),e,i){cov_2r2vblf1xu().f[290]++;cov_2r2vblf1xu().s[458]++;super(de(e),ce(i,e)),this._applyFormState(t),this._setUpdateStrategy(e),this._initObservables(),this.updateValueAndValidity({onlySelf:!0,emitEvent:!!this.asyncValidator}),(cov_2r2vblf1xu().b[219][0]++,Y(e))&&((cov_2r2vblf1xu().b[219][1]++,e.nonNullable)||(cov_2r2vblf1xu().b[219][2]++,e.initialValueIsDefault))&&(cov_2r2vblf1xu().b[219][3]++,Oe(t)?(cov_2r2vblf1xu().b[220][0]++,this.defaultValue=t.value):(cov_2r2vblf1xu().b[220][1]++,this.defaultValue=t));}setValue(t,e=(cov_2r2vblf1xu().b[221][0]++,{})){cov_2r2vblf1xu().f[291]++;cov_2r2vblf1xu().s[459]++;this.value=this._pendingValue=t,(cov_2r2vblf1xu().b[222][0]++,this._onChange.length)&&(cov_2r2vblf1xu().b[222][1]++,e.emitModelToViewChange!==!1)&&(cov_2r2vblf1xu().b[222][2]++,this._onChange.forEach(i=>{cov_2r2vblf1xu().f[292]++;cov_2r2vblf1xu().s[460]++;return i(this.value,e.emitViewToModelChange!==!1);})),this.updateValueAndValidity(e);}patchValue(t,e=(cov_2r2vblf1xu().b[223][0]++,{})){cov_2r2vblf1xu().f[293]++;cov_2r2vblf1xu().s[461]++;this.setValue(t,e);}reset(t=(cov_2r2vblf1xu().b[224][0]++,this.defaultValue),e=(cov_2r2vblf1xu().b[225][0]++,{})){cov_2r2vblf1xu().f[294]++;cov_2r2vblf1xu().s[462]++;this._applyFormState(t),this.markAsPristine(e),this.markAsUntouched(e),this.setValue(this.value,e),(cov_2r2vblf1xu().b[226][0]++,e.overwriteDefaultValue)&&(cov_2r2vblf1xu().b[226][1]++,this.defaultValue=this.value),this._pendingChange=!1,(cov_2r2vblf1xu().b[227][0]++,e?.emitEvent!==!1)&&(cov_2r2vblf1xu().b[227][1]++,this._events.next(new P(this)));}_updateValue(){cov_2r2vblf1xu().f[295]++;}_anyControls(t){cov_2r2vblf1xu().f[296]++;cov_2r2vblf1xu().s[463]++;return!1;}_allControlsDisabled(){cov_2r2vblf1xu().f[297]++;cov_2r2vblf1xu().s[464]++;return this.disabled;}registerOnChange(t){cov_2r2vblf1xu().f[298]++;cov_2r2vblf1xu().s[465]++;this._onChange.push(t);}_unregisterOnChange(t){cov_2r2vblf1xu().f[299]++;cov_2r2vblf1xu().s[466]++;Ne(this._onChange,t);}registerOnDisabledChange(t){cov_2r2vblf1xu().f[300]++;cov_2r2vblf1xu().s[467]++;this._onDisabledChange.push(t);}_unregisterOnDisabledChange(t){cov_2r2vblf1xu().f[301]++;cov_2r2vblf1xu().s[468]++;Ne(this._onDisabledChange,t);}_forEachChild(t){cov_2r2vblf1xu().f[302]++;}_syncPendingControls(){cov_2r2vblf1xu().f[303]++;cov_2r2vblf1xu().s[469]++;return(cov_2r2vblf1xu().b[229][0]++,this.updateOn==="submit")&&(cov_2r2vblf1xu().b[229][1]++,(cov_2r2vblf1xu().b[230][0]++,this._pendingDirty)&&(cov_2r2vblf1xu().b[230][1]++,this.markAsDirty()),(cov_2r2vblf1xu().b[231][0]++,this._pendingTouched)&&(cov_2r2vblf1xu().b[231][1]++,this.markAsTouched()),this._pendingChange)?(cov_2r2vblf1xu().b[228][0]++,this.setValue(this._pendingValue,{onlySelf:!0,emitModelToViewChange:!1}),!0):(cov_2r2vblf1xu().b[228][1]++,!1);}_applyFormState(t){cov_2r2vblf1xu().f[304]++;cov_2r2vblf1xu().s[470]++;Oe(t)?(cov_2r2vblf1xu().b[232][0]++,this.value=this._pendingValue=t.value,t.disabled?(cov_2r2vblf1xu().b[233][0]++,this.disable({onlySelf:!0,emitEvent:!1})):(cov_2r2vblf1xu().b[233][1]++,this.enable({onlySelf:!0,emitEvent:!1}))):(cov_2r2vblf1xu().b[232][1]++,this.value=this._pendingValue=t);}};cov_2r2vblf1xu().s[471]++;var St=n=>{cov_2r2vblf1xu().f[305]++;cov_2r2vblf1xu().s[472]++;return n instanceof B;};var gn=(cov_2r2vblf1xu().s[473]++,(()=>{cov_2r2vblf1xu().f[306]++;class n{static ɵfac=(cov_2r2vblf1xu().s[474]++,function(i){cov_2r2vblf1xu().f[307]++;cov_2r2vblf1xu().s[475]++;return new((cov_2r2vblf1xu().b[234][0]++,i)||(cov_2r2vblf1xu().b[234][1]++,n))();});static ɵdir=(cov_2r2vblf1xu().s[476]++,l({type:n,selectors:[["form",3,"ngNoForm","",3,"ngNativeValidate",""]],hostAttrs:["novalidate",""],standalone:!1}));}cov_2r2vblf1xu().s[477]++;return n;})());cov_2r2vblf1xu().s[478]++;var oe=class extends D{constructor(t,e,i){cov_2r2vblf1xu().f[308]++;cov_2r2vblf1xu().s[479]++;super(de(e),ce(i,e)),this.controls=t,this._initObservables(),this._setUpdateStrategy(e),this._setUpControls(),this.updateValueAndValidity({onlySelf:!0,emitEvent:!!this.asyncValidator});}controls;at(t){cov_2r2vblf1xu().f[309]++;cov_2r2vblf1xu().s[480]++;return this.controls[this._adjustIndex(t)];}push(t,e=(cov_2r2vblf1xu().b[235][0]++,{})){cov_2r2vblf1xu().f[310]++;cov_2r2vblf1xu().s[481]++;Array.isArray(t)?(cov_2r2vblf1xu().b[236][0]++,t.forEach(i=>{cov_2r2vblf1xu().f[311]++;cov_2r2vblf1xu().s[482]++;this.controls.push(i),this._registerControl(i);})):(cov_2r2vblf1xu().b[236][1]++,this.controls.push(t),this._registerControl(t)),this.updateValueAndValidity({emitEvent:e.emitEvent}),this._onCollectionChange();}insert(t,e,i=(cov_2r2vblf1xu().b[237][0]++,{})){cov_2r2vblf1xu().f[312]++;cov_2r2vblf1xu().s[483]++;this.controls.splice(t,0,e),this._registerControl(e),this.updateValueAndValidity({emitEvent:i.emitEvent});}removeAt(t,e=(cov_2r2vblf1xu().b[238][0]++,{})){cov_2r2vblf1xu().f[313]++;let i=(cov_2r2vblf1xu().s[484]++,this._adjustIndex(t));cov_2r2vblf1xu().s[485]++;(cov_2r2vblf1xu().b[239][0]++,i<0)&&(cov_2r2vblf1xu().b[239][1]++,i=0),(cov_2r2vblf1xu().b[240][0]++,this.controls[i])&&(cov_2r2vblf1xu().b[240][1]++,this.controls[i]._registerOnCollectionChange(()=>{cov_2r2vblf1xu().f[314]++;})),this.controls.splice(i,1),this.updateValueAndValidity({emitEvent:e.emitEvent});}setControl(t,e,i=(cov_2r2vblf1xu().b[241][0]++,{})){cov_2r2vblf1xu().f[315]++;let r=(cov_2r2vblf1xu().s[486]++,this._adjustIndex(t));cov_2r2vblf1xu().s[487]++;(cov_2r2vblf1xu().b[242][0]++,r<0)&&(cov_2r2vblf1xu().b[242][1]++,r=0),(cov_2r2vblf1xu().b[243][0]++,this.controls[r])&&(cov_2r2vblf1xu().b[243][1]++,this.controls[r]._registerOnCollectionChange(()=>{cov_2r2vblf1xu().f[316]++;})),this.controls.splice(r,1),(cov_2r2vblf1xu().b[244][0]++,e)&&(cov_2r2vblf1xu().b[244][1]++,this.controls.splice(r,0,e),this._registerControl(e)),this.updateValueAndValidity({emitEvent:i.emitEvent}),this._onCollectionChange();}get length(){cov_2r2vblf1xu().f[317]++;cov_2r2vblf1xu().s[488]++;return this.controls.length;}setValue(t,e=(cov_2r2vblf1xu().b[245][0]++,{})){cov_2r2vblf1xu().f[318]++;cov_2r2vblf1xu().s[489]++;Ke(this,!1,t),t.forEach((i,r)=>{cov_2r2vblf1xu().f[319]++;cov_2r2vblf1xu().s[490]++;Ye(this,!1,r),this.at(r).setValue(i,{onlySelf:!0,emitEvent:e.emitEvent});}),this.updateValueAndValidity(e);}patchValue(t,e=(cov_2r2vblf1xu().b[246][0]++,{})){cov_2r2vblf1xu().f[320]++;cov_2r2vblf1xu().s[491]++;(cov_2r2vblf1xu().b[247][0]++,t!=null)&&(cov_2r2vblf1xu().b[247][1]++,t.forEach((i,r)=>{cov_2r2vblf1xu().f[321]++;cov_2r2vblf1xu().s[492]++;(cov_2r2vblf1xu().b[248][0]++,this.at(r))&&(cov_2r2vblf1xu().b[248][1]++,this.at(r).patchValue(i,{onlySelf:!0,emitEvent:e.emitEvent}));}),this.updateValueAndValidity(e));}reset(t=(cov_2r2vblf1xu().b[249][0]++,[]),e=(cov_2r2vblf1xu().b[250][0]++,{})){cov_2r2vblf1xu().f[322]++;cov_2r2vblf1xu().s[493]++;this._forEachChild((i,r)=>{cov_2r2vblf1xu().f[323]++;cov_2r2vblf1xu().s[494]++;i.reset(t[r],d(u({},e),{onlySelf:!0}));}),this._updatePristine(e,this),this._updateTouched(e,this),this.updateValueAndValidity(e),(cov_2r2vblf1xu().b[251][0]++,e?.emitEvent!==!1)&&(cov_2r2vblf1xu().b[251][1]++,this._events.next(new P(this)));}getRawValue(){cov_2r2vblf1xu().f[324]++;cov_2r2vblf1xu().s[495]++;return this.controls.map(t=>{cov_2r2vblf1xu().f[325]++;cov_2r2vblf1xu().s[496]++;return t.getRawValue();});}clear(t=(cov_2r2vblf1xu().b[252][0]++,{})){cov_2r2vblf1xu().f[326]++;cov_2r2vblf1xu().s[497]++;(cov_2r2vblf1xu().b[253][0]++,this.controls.length<1)||(cov_2r2vblf1xu().b[253][1]++,this._forEachChild(e=>{cov_2r2vblf1xu().f[327]++;cov_2r2vblf1xu().s[498]++;return e._registerOnCollectionChange(()=>{cov_2r2vblf1xu().f[328]++;});}),this.controls.splice(0),this.updateValueAndValidity({emitEvent:t.emitEvent}));}_adjustIndex(t){cov_2r2vblf1xu().f[329]++;cov_2r2vblf1xu().s[499]++;return t<0?(cov_2r2vblf1xu().b[254][0]++,t+this.length):(cov_2r2vblf1xu().b[254][1]++,t);}_syncPendingControls(){cov_2r2vblf1xu().f[330]++;let t=(cov_2r2vblf1xu().s[500]++,this.controls.reduce((e,i)=>{cov_2r2vblf1xu().f[331]++;cov_2r2vblf1xu().s[501]++;return i._syncPendingControls()?(cov_2r2vblf1xu().b[255][0]++,!0):(cov_2r2vblf1xu().b[255][1]++,e);},!1));cov_2r2vblf1xu().s[502]++;return(cov_2r2vblf1xu().b[256][0]++,t)&&(cov_2r2vblf1xu().b[256][1]++,this.updateValueAndValidity({onlySelf:!0})),t;}_forEachChild(t){cov_2r2vblf1xu().f[332]++;cov_2r2vblf1xu().s[503]++;this.controls.forEach((e,i)=>{cov_2r2vblf1xu().f[333]++;cov_2r2vblf1xu().s[504]++;t(e,i);});}_updateValue(){cov_2r2vblf1xu().f[334]++;cov_2r2vblf1xu().s[505]++;this.value=this.controls.filter(t=>{cov_2r2vblf1xu().f[335]++;cov_2r2vblf1xu().s[506]++;return(cov_2r2vblf1xu().b[257][0]++,t.enabled)||(cov_2r2vblf1xu().b[257][1]++,this.disabled);}).map(t=>{cov_2r2vblf1xu().f[336]++;cov_2r2vblf1xu().s[507]++;return t.value;});}_anyControls(t){cov_2r2vblf1xu().f[337]++;cov_2r2vblf1xu().s[508]++;return this.controls.some(e=>{cov_2r2vblf1xu().f[338]++;cov_2r2vblf1xu().s[509]++;return(cov_2r2vblf1xu().b[258][0]++,e.enabled)&&(cov_2r2vblf1xu().b[258][1]++,t(e));});}_setUpControls(){cov_2r2vblf1xu().f[339]++;cov_2r2vblf1xu().s[510]++;this._forEachChild(t=>{cov_2r2vblf1xu().f[340]++;cov_2r2vblf1xu().s[511]++;return this._registerControl(t);});}_allControlsDisabled(){cov_2r2vblf1xu().f[341]++;cov_2r2vblf1xu().s[512]++;for(let t of this.controls){cov_2r2vblf1xu().s[513]++;if(t.enabled){cov_2r2vblf1xu().b[259][0]++;cov_2r2vblf1xu().s[514]++;return!1;}else{cov_2r2vblf1xu().b[259][1]++;}}cov_2r2vblf1xu().s[515]++;return(cov_2r2vblf1xu().b[260][0]++,this.controls.length>0)||(cov_2r2vblf1xu().b[260][1]++,this.disabled);}_registerControl(t){cov_2r2vblf1xu().f[342]++;cov_2r2vblf1xu().s[516]++;t.setParent(this),t._registerOnCollectionChange(this._onCollectionChange);}_find(t){cov_2r2vblf1xu().f[343]++;cov_2r2vblf1xu().s[517]++;return(cov_2r2vblf1xu().b[261][0]++,this.at(t))??(cov_2r2vblf1xu().b[261][1]++,null);}};var Nt=(cov_2r2vblf1xu().s[518]++,(()=>{cov_2r2vblf1xu().f[344]++;class n extends V{callSetDisabledState;get submitted(){cov_2r2vblf1xu().f[345]++;cov_2r2vblf1xu().s[519]++;return h(this._submittedReactive);}set submitted(e){cov_2r2vblf1xu().f[346]++;cov_2r2vblf1xu().s[520]++;this._submittedReactive.set(e);}_submitted=(cov_2r2vblf1xu().s[521]++,w(()=>{cov_2r2vblf1xu().f[347]++;cov_2r2vblf1xu().s[522]++;return this._submittedReactive();}));_submittedReactive=(cov_2r2vblf1xu().s[523]++,A(!1));_oldForm;_onCollectionChange=(cov_2r2vblf1xu().s[524]++,()=>{cov_2r2vblf1xu().f[348]++;cov_2r2vblf1xu().s[525]++;return this._updateDomValue();});directives=(cov_2r2vblf1xu().s[526]++,[]);constructor(e,i,r){cov_2r2vblf1xu().f[349]++;cov_2r2vblf1xu().s[527]++;super(),this.callSetDisabledState=r,this._setValidators(e),this._setAsyncValidators(i);}ngOnChanges(e){cov_2r2vblf1xu().f[350]++;cov_2r2vblf1xu().s[528]++;this.onChanges(e);}ngOnDestroy(){cov_2r2vblf1xu().f[351]++;cov_2r2vblf1xu().s[529]++;this.onDestroy();}onChanges(e){cov_2r2vblf1xu().f[352]++;cov_2r2vblf1xu().s[530]++;this._checkFormPresent(),(cov_2r2vblf1xu().b[262][0]++,e.hasOwnProperty("form"))&&(cov_2r2vblf1xu().b[262][1]++,this._updateValidators(),this._updateDomValue(),this._updateRegistrations(),this._oldForm=this.form);}onDestroy(){cov_2r2vblf1xu().f[353]++;cov_2r2vblf1xu().s[531]++;(cov_2r2vblf1xu().b[263][0]++,this.form)&&(cov_2r2vblf1xu().b[263][1]++,Z(this.form,this),(cov_2r2vblf1xu().b[264][0]++,this.form._onCollectionChange===this._onCollectionChange)&&(cov_2r2vblf1xu().b[264][1]++,this.form._registerOnCollectionChange(()=>{cov_2r2vblf1xu().f[354]++;})));}get formDirective(){cov_2r2vblf1xu().f[355]++;cov_2r2vblf1xu().s[532]++;return this;}get path(){cov_2r2vblf1xu().f[356]++;cov_2r2vblf1xu().s[533]++;return[];}addControl(e){cov_2r2vblf1xu().f[357]++;let i=(cov_2r2vblf1xu().s[534]++,this.form.get(e.path));cov_2r2vblf1xu().s[535]++;return Ie(i,e,this.callSetDisabledState),i.updateValueAndValidity({emitEvent:!1}),this.directives.push(e),i;}getControl(e){cov_2r2vblf1xu().f[358]++;cov_2r2vblf1xu().s[536]++;return this.form.get(e.path);}removeControl(e){cov_2r2vblf1xu().f[359]++;cov_2r2vblf1xu().s[537]++;Se((cov_2r2vblf1xu().b[265][0]++,e.control)||(cov_2r2vblf1xu().b[265][1]++,null),e,!1),It(this.directives,e);}addFormGroup(e){cov_2r2vblf1xu().f[360]++;cov_2r2vblf1xu().s[538]++;this._setUpFormContainer(e);}removeFormGroup(e){cov_2r2vblf1xu().f[361]++;cov_2r2vblf1xu().s[539]++;this._cleanUpFormContainer(e);}getFormGroup(e){cov_2r2vblf1xu().f[362]++;cov_2r2vblf1xu().s[540]++;return this.form.get(e.path);}getFormArray(e){cov_2r2vblf1xu().f[363]++;cov_2r2vblf1xu().s[541]++;return this.form.get(e.path);}addFormArray(e){cov_2r2vblf1xu().f[364]++;cov_2r2vblf1xu().s[542]++;this._setUpFormContainer(e);}removeFormArray(e){cov_2r2vblf1xu().f[365]++;cov_2r2vblf1xu().s[543]++;this._cleanUpFormContainer(e);}updateModel(e,i){cov_2r2vblf1xu().f[366]++;cov_2r2vblf1xu().s[544]++;this.form.get(e.path).setValue(i);}onReset(){cov_2r2vblf1xu().f[367]++;cov_2r2vblf1xu().s[545]++;this.resetForm();}resetForm(e=(cov_2r2vblf1xu().b[266][0]++,void 0),i=(cov_2r2vblf1xu().b[267][0]++,{})){cov_2r2vblf1xu().f[368]++;cov_2r2vblf1xu().s[546]++;this.form.reset(e,i),this._submittedReactive.set(!1);}onSubmit(e){cov_2r2vblf1xu().f[369]++;cov_2r2vblf1xu().s[547]++;return this.submitted=!0,Et(this.form,this.directives),this.ngSubmit.emit(e),this.form._events.next(new ie(this.control)),e?.target?.method==="dialog";}_updateDomValue(){cov_2r2vblf1xu().f[370]++;cov_2r2vblf1xu().s[548]++;this.directives.forEach(e=>{cov_2r2vblf1xu().f[371]++;let i=(cov_2r2vblf1xu().s[549]++,e.control),r=(cov_2r2vblf1xu().s[550]++,this.form.get(e.path));cov_2r2vblf1xu().s[551]++;(cov_2r2vblf1xu().b[268][0]++,i!==r)&&(cov_2r2vblf1xu().b[268][1]++,Se((cov_2r2vblf1xu().b[269][0]++,i)||(cov_2r2vblf1xu().b[269][1]++,null),e),(cov_2r2vblf1xu().b[270][0]++,St(r))&&(cov_2r2vblf1xu().b[270][1]++,Ie(r,e,this.callSetDisabledState),e.control=r));}),this.form._updateTreeValidity({emitEvent:!1});}_setUpFormContainer(e){cov_2r2vblf1xu().f[372]++;let i=(cov_2r2vblf1xu().s[552]++,this.form.get(e.path));cov_2r2vblf1xu().s[553]++;bt(i,e),i.updateValueAndValidity({emitEvent:!1});}_cleanUpFormContainer(e){cov_2r2vblf1xu().f[373]++;let i=(cov_2r2vblf1xu().s[554]++,this.form?.get(e.path));cov_2r2vblf1xu().s[555]++;(cov_2r2vblf1xu().b[271][0]++,i)&&(cov_2r2vblf1xu().b[271][1]++,At(i,e))&&(cov_2r2vblf1xu().b[271][2]++,i.updateValueAndValidity({emitEvent:!1}));}_updateRegistrations(){cov_2r2vblf1xu().f[374]++;cov_2r2vblf1xu().s[556]++;this.form._registerOnCollectionChange(this._onCollectionChange),this._oldForm?._registerOnCollectionChange(()=>{cov_2r2vblf1xu().f[375]++;});}_updateValidators(){cov_2r2vblf1xu().f[376]++;cov_2r2vblf1xu().s[557]++;fe(this.form,this),(cov_2r2vblf1xu().b[272][0]++,this._oldForm)&&(cov_2r2vblf1xu().b[272][1]++,Z(this._oldForm,this));}_checkFormPresent(){cov_2r2vblf1xu().f[377]++;cov_2r2vblf1xu().s[558]++;this.form;}static ɵfac=(cov_2r2vblf1xu().s[559]++,function(i){cov_2r2vblf1xu().f[378]++;cov_2r2vblf1xu().s[560]++;return new((cov_2r2vblf1xu().b[273][0]++,i)||(cov_2r2vblf1xu().b[273][1]++,n))(a(ue,10),a(je,10),a(Je,8));});static ɵdir=(cov_2r2vblf1xu().s[561]++,l({type:n,features:[c,G]}));}cov_2r2vblf1xu().s[562]++;return n;})());var et=(cov_2r2vblf1xu().s[563]++,new m(""));var Ot=(cov_2r2vblf1xu().s[564]++,{provide:x,useExisting:p(()=>{cov_2r2vblf1xu().f[379]++;cov_2r2vblf1xu().s[565]++;return xt;})}),xt=(cov_2r2vblf1xu().s[566]++,(()=>{cov_2r2vblf1xu().f[380]++;class n extends x{_ngModelWarningConfig;_added=(cov_2r2vblf1xu().s[567]++,!1);viewModel;control;name=(cov_2r2vblf1xu().s[568]++,null);set isDisabled(e){cov_2r2vblf1xu().f[381]++;}model;update=(cov_2r2vblf1xu().s[569]++,new b());static _ngModelWarningSentOnce=(cov_2r2vblf1xu().s[570]++,!1);_ngModelWarningSent=(cov_2r2vblf1xu().s[571]++,!1);constructor(e,i,r,o,s){cov_2r2vblf1xu().f[382]++;cov_2r2vblf1xu().s[572]++;super(),this._ngModelWarningConfig=s,this._parent=e,this._setValidators(i),this._setAsyncValidators(r),this.valueAccessor=wt(this,o);}ngOnChanges(e){cov_2r2vblf1xu().f[383]++;cov_2r2vblf1xu().s[573]++;(cov_2r2vblf1xu().b[274][0]++,this._added)||(cov_2r2vblf1xu().b[274][1]++,this._setUpControl()),(cov_2r2vblf1xu().b[275][0]++,Mt(e,this.viewModel))&&(cov_2r2vblf1xu().b[275][1]++,this.viewModel=this.model,this.formDirective.updateModel(this,this.model));}ngOnDestroy(){cov_2r2vblf1xu().f[384]++;cov_2r2vblf1xu().s[574]++;this.formDirective?.removeControl(this);}viewToModelUpdate(e){cov_2r2vblf1xu().f[385]++;cov_2r2vblf1xu().s[575]++;this.viewModel=e,this.update.emit(e);}get path(){cov_2r2vblf1xu().f[386]++;cov_2r2vblf1xu().s[576]++;return vt(this.name==null?(cov_2r2vblf1xu().b[276][0]++,this.name):(cov_2r2vblf1xu().b[276][1]++,this.name.toString()),this._parent);}get formDirective(){cov_2r2vblf1xu().f[387]++;cov_2r2vblf1xu().s[577]++;return this._parent?(cov_2r2vblf1xu().b[277][0]++,this._parent.formDirective):(cov_2r2vblf1xu().b[277][1]++,null);}_setUpControl(){cov_2r2vblf1xu().f[388]++;cov_2r2vblf1xu().s[578]++;this.control=this.formDirective.addControl(this),this._added=!0;}static ɵfac=(cov_2r2vblf1xu().s[579]++,function(i){cov_2r2vblf1xu().f[389]++;cov_2r2vblf1xu().s[580]++;return new((cov_2r2vblf1xu().b[278][0]++,i)||(cov_2r2vblf1xu().b[278][1]++,n))(a(V,13),a(ue,10),a(je,10),a(X,10),a(et,8));});static ɵdir=(cov_2r2vblf1xu().s[581]++,l({type:n,selectors:[["","formControlName",""]],inputs:{name:[0,"formControlName","name"],isDisabled:[0,"disabled","isDisabled"],model:[0,"ngModel","model"]},outputs:{update:"ngModelChange"},standalone:!1,features:[_([Ot]),c,G]}));}cov_2r2vblf1xu().s[582]++;return n;})());var Pt=(cov_2r2vblf1xu().s[583]++,{provide:V,useExisting:p(()=>{cov_2r2vblf1xu().f[390]++;cov_2r2vblf1xu().s[584]++;return Rt;})}),Rt=(cov_2r2vblf1xu().s[585]++,(()=>{cov_2r2vblf1xu().f[391]++;class n extends Nt{form=(cov_2r2vblf1xu().s[586]++,null);ngSubmit=(cov_2r2vblf1xu().s[587]++,new b());get control(){cov_2r2vblf1xu().f[392]++;cov_2r2vblf1xu().s[588]++;return this.form;}static ɵfac=(cov_2r2vblf1xu().s[589]++,(()=>{cov_2r2vblf1xu().f[393]++;let e;cov_2r2vblf1xu().s[590]++;return function(r){cov_2r2vblf1xu().f[394]++;cov_2r2vblf1xu().s[591]++;return((cov_2r2vblf1xu().b[279][0]++,e)||(cov_2r2vblf1xu().b[279][1]++,e=v(n)))((cov_2r2vblf1xu().b[280][0]++,r)||(cov_2r2vblf1xu().b[280][1]++,n));};})());static ɵdir=(cov_2r2vblf1xu().s[592]++,l({type:n,selectors:[["","formGroup",""]],hostBindings:function(i,r){cov_2r2vblf1xu().f[395]++;cov_2r2vblf1xu().s[593]++;(cov_2r2vblf1xu().b[281][0]++,i&1)&&(cov_2r2vblf1xu().b[281][1]++,E("submit",function(s){cov_2r2vblf1xu().f[396]++;cov_2r2vblf1xu().s[594]++;return r.onSubmit(s);})("reset",function(){cov_2r2vblf1xu().f[397]++;cov_2r2vblf1xu().s[595]++;return r.onReset();}));},inputs:{form:[0,"formGroup","form"]},outputs:{ngSubmit:"ngSubmit"},exportAs:["ngForm"],standalone:!1,features:[_([Pt]),c]}));}cov_2r2vblf1xu().s[596]++;return n;})()),kt=(cov_2r2vblf1xu().s[597]++,{provide:X,useExisting:p(()=>{cov_2r2vblf1xu().f[398]++;cov_2r2vblf1xu().s[598]++;return nt;}),multi:!0});function tt(n,t){cov_2r2vblf1xu().f[399]++;cov_2r2vblf1xu().s[599]++;return n==null?(cov_2r2vblf1xu().b[282][0]++,`${t}`):(cov_2r2vblf1xu().b[282][1]++,(cov_2r2vblf1xu().b[283][0]++,t)&&(cov_2r2vblf1xu().b[283][1]++,typeof t=="object")&&(cov_2r2vblf1xu().b[283][2]++,t="Object"),`${n}: ${t}`.slice(0,50));}function jt(n){cov_2r2vblf1xu().f[400]++;cov_2r2vblf1xu().s[600]++;return n.split(":")[0];}var nt=(cov_2r2vblf1xu().s[601]++,(()=>{cov_2r2vblf1xu().f[401]++;class n extends se{value;_optionMap=(cov_2r2vblf1xu().s[602]++,new Map());_idCounter=(cov_2r2vblf1xu().s[603]++,0);set compareWith(e){cov_2r2vblf1xu().f[402]++;cov_2r2vblf1xu().s[604]++;this._compareWith=e;}_compareWith=(cov_2r2vblf1xu().s[605]++,Object.is);appRefInjector=(cov_2r2vblf1xu().s[606]++,j(De).injector);destroyRef=(cov_2r2vblf1xu().s[607]++,j(ye));cdr=(cov_2r2vblf1xu().s[608]++,j(Ae));_queuedWrite=(cov_2r2vblf1xu().s[609]++,!1);_writeValueAfterRender(){cov_2r2vblf1xu().f[403]++;cov_2r2vblf1xu().s[610]++;(cov_2r2vblf1xu().b[284][0]++,this._queuedWrite)||(cov_2r2vblf1xu().b[284][1]++,this.appRefInjector.destroyed)||(cov_2r2vblf1xu().b[284][2]++,this._queuedWrite=!0,Ce({write:()=>{cov_2r2vblf1xu().f[404]++;cov_2r2vblf1xu().s[611]++;(cov_2r2vblf1xu().b[285][0]++,this.destroyRef.destroyed)||(cov_2r2vblf1xu().b[285][1]++,this._queuedWrite=!1,this.writeValue(this.value));}},{injector:this.appRefInjector}));}writeValue(e){cov_2r2vblf1xu().f[405]++;cov_2r2vblf1xu().s[612]++;this.cdr.markForCheck(),this.value=e;let i=(cov_2r2vblf1xu().s[613]++,this._getOptionId(e)),r=(cov_2r2vblf1xu().s[614]++,tt(i,e));cov_2r2vblf1xu().s[615]++;this.setProperty("value",r);}registerOnChange(e){cov_2r2vblf1xu().f[406]++;cov_2r2vblf1xu().s[616]++;this.onChange=i=>{cov_2r2vblf1xu().f[407]++;cov_2r2vblf1xu().s[617]++;this.value=this._getOptionValue(i),e(this.value);};}_registerOption(){cov_2r2vblf1xu().f[408]++;cov_2r2vblf1xu().s[618]++;return(this._idCounter++).toString();}_getOptionId(e){cov_2r2vblf1xu().f[409]++;cov_2r2vblf1xu().s[619]++;for(let i of this._optionMap.keys()){cov_2r2vblf1xu().s[620]++;if(this._compareWith(this._optionMap.get(i),e)){cov_2r2vblf1xu().b[286][0]++;cov_2r2vblf1xu().s[621]++;return i;}else{cov_2r2vblf1xu().b[286][1]++;}}cov_2r2vblf1xu().s[622]++;return null;}_getOptionValue(e){cov_2r2vblf1xu().f[410]++;let i=(cov_2r2vblf1xu().s[623]++,jt(e));cov_2r2vblf1xu().s[624]++;return this._optionMap.has(i)?(cov_2r2vblf1xu().b[287][0]++,this._optionMap.get(i)):(cov_2r2vblf1xu().b[287][1]++,e);}static ɵfac=(cov_2r2vblf1xu().s[625]++,(()=>{cov_2r2vblf1xu().f[411]++;let e;cov_2r2vblf1xu().s[626]++;return function(r){cov_2r2vblf1xu().f[412]++;cov_2r2vblf1xu().s[627]++;return((cov_2r2vblf1xu().b[288][0]++,e)||(cov_2r2vblf1xu().b[288][1]++,e=v(n)))((cov_2r2vblf1xu().b[289][0]++,r)||(cov_2r2vblf1xu().b[289][1]++,n));};})());static ɵdir=(cov_2r2vblf1xu().s[628]++,l({type:n,selectors:[["select","formControlName","",3,"multiple",""],["select","formControl","",3,"multiple",""],["select","ngModel","",3,"multiple",""]],hostBindings:function(i,r){cov_2r2vblf1xu().f[413]++;cov_2r2vblf1xu().s[629]++;(cov_2r2vblf1xu().b[290][0]++,i&1)&&(cov_2r2vblf1xu().b[290][1]++,E("change",function(s){cov_2r2vblf1xu().f[414]++;cov_2r2vblf1xu().s[630]++;return r.onChange(s.target.value);})("blur",function(){cov_2r2vblf1xu().f[415]++;cov_2r2vblf1xu().s[631]++;return r.onTouched();}));},inputs:{compareWith:"compareWith"},standalone:!1,features:[_([kt]),c]}));}cov_2r2vblf1xu().s[632]++;return n;})()),pn=(cov_2r2vblf1xu().s[633]++,(()=>{cov_2r2vblf1xu().f[416]++;class n{_element;_renderer;_select;id;constructor(e,i,r){cov_2r2vblf1xu().f[417]++;cov_2r2vblf1xu().s[634]++;this._element=e,this._renderer=i,this._select=r,(cov_2r2vblf1xu().b[291][0]++,this._select)&&(cov_2r2vblf1xu().b[291][1]++,this.id=this._select._registerOption());}set ngValue(e){cov_2r2vblf1xu().f[418]++;cov_2r2vblf1xu().s[635]++;(cov_2r2vblf1xu().b[292][0]++,this._select!=null)&&(cov_2r2vblf1xu().b[292][1]++,this._select._optionMap.set(this.id,e),this._setElementValue(tt(this.id,e)),this._select._writeValueAfterRender());}set value(e){cov_2r2vblf1xu().f[419]++;cov_2r2vblf1xu().s[636]++;this._setElementValue(e),this._select?._writeValueAfterRender();}_setElementValue(e){cov_2r2vblf1xu().f[420]++;cov_2r2vblf1xu().s[637]++;this._renderer.setProperty(this._element.nativeElement,"value",e);}ngOnDestroy(){cov_2r2vblf1xu().f[421]++;cov_2r2vblf1xu().s[638]++;this._select?._optionMap.delete(this.id),this._select?._writeValueAfterRender();}static ɵfac=(cov_2r2vblf1xu().s[639]++,function(i){cov_2r2vblf1xu().f[422]++;cov_2r2vblf1xu().s[640]++;return new((cov_2r2vblf1xu().b[293][0]++,i)||(cov_2r2vblf1xu().b[293][1]++,n))(a(M),a(F),a(nt,9));});static ɵdir=(cov_2r2vblf1xu().s[641]++,l({type:n,selectors:[["option"]],inputs:{ngValue:"ngValue",value:"value"},standalone:!1}));}cov_2r2vblf1xu().s[642]++;return n;})()),Gt=(cov_2r2vblf1xu().s[643]++,{provide:X,useExisting:p(()=>{cov_2r2vblf1xu().f[423]++;cov_2r2vblf1xu().s[644]++;return it;}),multi:!0});function xe(n,t){cov_2r2vblf1xu().f[424]++;cov_2r2vblf1xu().s[645]++;return n==null?(cov_2r2vblf1xu().b[294][0]++,`${t}`):(cov_2r2vblf1xu().b[294][1]++,(cov_2r2vblf1xu().b[295][0]++,typeof t=="string")&&(cov_2r2vblf1xu().b[295][1]++,t=`'${t}'`),(cov_2r2vblf1xu().b[296][0]++,t)&&(cov_2r2vblf1xu().b[296][1]++,typeof t=="object")&&(cov_2r2vblf1xu().b[296][2]++,t="Object"),`${n}: ${t}`.slice(0,50));}function Tt(n){cov_2r2vblf1xu().f[425]++;cov_2r2vblf1xu().s[646]++;return n.split(":")[0];}var it=(cov_2r2vblf1xu().s[647]++,(()=>{cov_2r2vblf1xu().f[426]++;class n extends se{value;_optionMap=(cov_2r2vblf1xu().s[648]++,new Map());_idCounter=(cov_2r2vblf1xu().s[649]++,0);set compareWith(e){cov_2r2vblf1xu().f[427]++;cov_2r2vblf1xu().s[650]++;this._compareWith=e;}_compareWith=(cov_2r2vblf1xu().s[651]++,Object.is);writeValue(e){cov_2r2vblf1xu().f[428]++;cov_2r2vblf1xu().s[652]++;this.value=e;let i;cov_2r2vblf1xu().s[653]++;if(Array.isArray(e)){cov_2r2vblf1xu().b[297][0]++;let r=(cov_2r2vblf1xu().s[654]++,e.map(o=>{cov_2r2vblf1xu().f[429]++;cov_2r2vblf1xu().s[655]++;return this._getOptionId(o);}));cov_2r2vblf1xu().s[656]++;i=(o,s)=>{cov_2r2vblf1xu().f[430]++;cov_2r2vblf1xu().s[657]++;o._setSelected(r.indexOf(s.toString())>-1);};}else{cov_2r2vblf1xu().b[297][1]++;cov_2r2vblf1xu().s[658]++;i=(r,o)=>{cov_2r2vblf1xu().f[431]++;cov_2r2vblf1xu().s[659]++;r._setSelected(!1);};}cov_2r2vblf1xu().s[660]++;this._optionMap.forEach(i);}registerOnChange(e){cov_2r2vblf1xu().f[432]++;cov_2r2vblf1xu().s[661]++;this.onChange=i=>{cov_2r2vblf1xu().f[433]++;let r=(cov_2r2vblf1xu().s[662]++,[]),o=(cov_2r2vblf1xu().s[663]++,i.selectedOptions);cov_2r2vblf1xu().s[664]++;if(o!==void 0){cov_2r2vblf1xu().b[298][0]++;let s=(cov_2r2vblf1xu().s[665]++,o);cov_2r2vblf1xu().s[666]++;for(let g=(cov_2r2vblf1xu().s[667]++,0);g{cov_2r2vblf1xu().f[437]++;let e;cov_2r2vblf1xu().s[688]++;return function(r){cov_2r2vblf1xu().f[438]++;cov_2r2vblf1xu().s[689]++;return((cov_2r2vblf1xu().b[302][0]++,e)||(cov_2r2vblf1xu().b[302][1]++,e=v(n)))((cov_2r2vblf1xu().b[303][0]++,r)||(cov_2r2vblf1xu().b[303][1]++,n));};})());static ɵdir=(cov_2r2vblf1xu().s[690]++,l({type:n,selectors:[["select","multiple","","formControlName",""],["select","multiple","","formControl",""],["select","multiple","","ngModel",""]],hostBindings:function(i,r){cov_2r2vblf1xu().f[439]++;cov_2r2vblf1xu().s[691]++;(cov_2r2vblf1xu().b[304][0]++,i&1)&&(cov_2r2vblf1xu().b[304][1]++,E("change",function(s){cov_2r2vblf1xu().f[440]++;cov_2r2vblf1xu().s[692]++;return r.onChange(s.target);})("blur",function(){cov_2r2vblf1xu().f[441]++;cov_2r2vblf1xu().s[693]++;return r.onTouched();}));},inputs:{compareWith:"compareWith"},standalone:!1,features:[_([Gt]),c]}));}cov_2r2vblf1xu().s[694]++;return n;})()),mn=(cov_2r2vblf1xu().s[695]++,(()=>{cov_2r2vblf1xu().f[442]++;class n{_element;_renderer;_select;id;_value;constructor(e,i,r){cov_2r2vblf1xu().f[443]++;cov_2r2vblf1xu().s[696]++;this._element=e,this._renderer=i,this._select=r,(cov_2r2vblf1xu().b[305][0]++,this._select)&&(cov_2r2vblf1xu().b[305][1]++,this.id=this._select._registerOption(this));}set ngValue(e){cov_2r2vblf1xu().f[444]++;cov_2r2vblf1xu().s[697]++;(cov_2r2vblf1xu().b[306][0]++,this._select!=null)&&(cov_2r2vblf1xu().b[306][1]++,this._value=e,this._setElementValue(xe(this.id,e)),this._select.writeValue(this._select.value));}set value(e){cov_2r2vblf1xu().f[445]++;cov_2r2vblf1xu().s[698]++;this._select?(cov_2r2vblf1xu().b[307][0]++,this._value=e,this._setElementValue(xe(this.id,e)),this._select.writeValue(this._select.value)):(cov_2r2vblf1xu().b[307][1]++,this._setElementValue(e));}_setElementValue(e){cov_2r2vblf1xu().f[446]++;cov_2r2vblf1xu().s[699]++;this._renderer.setProperty(this._element.nativeElement,"value",e);}_setSelected(e){cov_2r2vblf1xu().f[447]++;cov_2r2vblf1xu().s[700]++;this._renderer.setProperty(this._element.nativeElement,"selected",e);}ngOnDestroy(){cov_2r2vblf1xu().f[448]++;cov_2r2vblf1xu().s[701]++;(cov_2r2vblf1xu().b[308][0]++,this._select)&&(cov_2r2vblf1xu().b[308][1]++,this._select._optionMap.delete(this.id),this._select.writeValue(this._select.value));}static ɵfac=(cov_2r2vblf1xu().s[702]++,function(i){cov_2r2vblf1xu().f[449]++;cov_2r2vblf1xu().s[703]++;return new((cov_2r2vblf1xu().b[309][0]++,i)||(cov_2r2vblf1xu().b[309][1]++,n))(a(M),a(F),a(it,9));});static ɵdir=(cov_2r2vblf1xu().s[704]++,l({type:n,selectors:[["option"]],inputs:{ngValue:"ngValue",value:"value"},standalone:!1}));}cov_2r2vblf1xu().s[705]++;return n;})());function Bt(n){cov_2r2vblf1xu().f[450]++;cov_2r2vblf1xu().s[706]++;return typeof n=="number"?(cov_2r2vblf1xu().b[310][0]++,n):(cov_2r2vblf1xu().b[310][1]++,parseInt(n,10));}var Ut=(cov_2r2vblf1xu().s[707]++,(()=>{cov_2r2vblf1xu().f[451]++;class n{_validator=(cov_2r2vblf1xu().s[708]++,U);_onChange;_enabled;ngOnChanges(e){cov_2r2vblf1xu().f[452]++;cov_2r2vblf1xu().s[709]++;if(this.inputName in e){cov_2r2vblf1xu().b[311][0]++;let i=(cov_2r2vblf1xu().s[710]++,this.normalizeInput(e[this.inputName].currentValue));cov_2r2vblf1xu().s[711]++;this._enabled=this.enabled(i),this._validator=this._enabled?(cov_2r2vblf1xu().b[312][0]++,this.createValidator(i)):(cov_2r2vblf1xu().b[312][1]++,U),this._onChange?.();}else{cov_2r2vblf1xu().b[311][1]++;}}validate(e){cov_2r2vblf1xu().f[453]++;cov_2r2vblf1xu().s[712]++;return this._validator(e);}registerOnValidatorChange(e){cov_2r2vblf1xu().f[454]++;cov_2r2vblf1xu().s[713]++;this._onChange=e;}enabled(e){cov_2r2vblf1xu().f[455]++;cov_2r2vblf1xu().s[714]++;return e!=null;}static ɵfac=(cov_2r2vblf1xu().s[715]++,function(i){cov_2r2vblf1xu().f[456]++;cov_2r2vblf1xu().s[716]++;return new((cov_2r2vblf1xu().b[313][0]++,i)||(cov_2r2vblf1xu().b[313][1]++,n))();});static ɵdir=(cov_2r2vblf1xu().s[717]++,l({type:n,features:[G]}));}cov_2r2vblf1xu().s[718]++;return n;})());var Ht=(cov_2r2vblf1xu().s[719]++,{provide:ue,useExisting:p(()=>{cov_2r2vblf1xu().f[457]++;cov_2r2vblf1xu().s[720]++;return Lt;}),multi:!0}),Lt=(cov_2r2vblf1xu().s[721]++,(()=>{cov_2r2vblf1xu().f[458]++;class n extends Ut{maxlength;inputName=(cov_2r2vblf1xu().s[722]++,"maxlength");normalizeInput=(cov_2r2vblf1xu().s[723]++,e=>{cov_2r2vblf1xu().f[459]++;cov_2r2vblf1xu().s[724]++;return Bt(e);});createValidator=(cov_2r2vblf1xu().s[725]++,e=>{cov_2r2vblf1xu().f[460]++;cov_2r2vblf1xu().s[726]++;return Ge(e);});static ɵfac=(cov_2r2vblf1xu().s[727]++,(()=>{cov_2r2vblf1xu().f[461]++;let e;cov_2r2vblf1xu().s[728]++;return function(r){cov_2r2vblf1xu().f[462]++;cov_2r2vblf1xu().s[729]++;return((cov_2r2vblf1xu().b[314][0]++,e)||(cov_2r2vblf1xu().b[314][1]++,e=v(n)))((cov_2r2vblf1xu().b[315][0]++,r)||(cov_2r2vblf1xu().b[315][1]++,n));};})());static ɵdir=(cov_2r2vblf1xu().s[730]++,l({type:n,selectors:[["","maxlength","","formControlName",""],["","maxlength","","formControl",""],["","maxlength","","ngModel",""]],hostVars:1,hostBindings:function(i,r){cov_2r2vblf1xu().f[463]++;cov_2r2vblf1xu().s[731]++;(cov_2r2vblf1xu().b[316][0]++,i&2)&&(cov_2r2vblf1xu().b[316][1]++,be("maxlength",r._enabled?(cov_2r2vblf1xu().b[317][0]++,r.maxlength):(cov_2r2vblf1xu().b[317][1]++,null)));},inputs:{maxlength:"maxlength"},standalone:!1,features:[_([Ht]),c]}));}cov_2r2vblf1xu().s[732]++;return n;})());var $t=(cov_2r2vblf1xu().s[733]++,(()=>{cov_2r2vblf1xu().f[464]++;class n{static ɵfac=(cov_2r2vblf1xu().s[734]++,function(i){cov_2r2vblf1xu().f[465]++;cov_2r2vblf1xu().s[735]++;return new((cov_2r2vblf1xu().b[318][0]++,i)||(cov_2r2vblf1xu().b[318][1]++,n))();});static ɵmod=(cov_2r2vblf1xu().s[736]++,Q({type:n}));static ɵinj=(cov_2r2vblf1xu().s[737]++,J({}));}cov_2r2vblf1xu().s[738]++;return n;})());function Pe(n){cov_2r2vblf1xu().f[466]++;cov_2r2vblf1xu().s[739]++;return(cov_2r2vblf1xu().b[319][0]++,!!n)&&((cov_2r2vblf1xu().b[319][1]++,n.asyncValidators!==void 0)||(cov_2r2vblf1xu().b[319][2]++,n.validators!==void 0)||(cov_2r2vblf1xu().b[319][3]++,n.updateOn!==void 0));}var _n=(cov_2r2vblf1xu().s[740]++,(()=>{cov_2r2vblf1xu().f[467]++;class n{useNonNullable=(cov_2r2vblf1xu().s[741]++,!1);get nonNullable(){cov_2r2vblf1xu().f[468]++;let e=(cov_2r2vblf1xu().s[742]++,new n());cov_2r2vblf1xu().s[743]++;return e.useNonNullable=!0,e;}group(e,i=(cov_2r2vblf1xu().b[320][0]++,null)){cov_2r2vblf1xu().f[469]++;let r=(cov_2r2vblf1xu().s[744]++,this._reduceControls(e)),o=(cov_2r2vblf1xu().s[745]++,{});cov_2r2vblf1xu().s[746]++;return Pe(i)?(cov_2r2vblf1xu().b[321][0]++,o=i):(cov_2r2vblf1xu().b[321][1]++,(cov_2r2vblf1xu().b[322][0]++,i!==null)&&(cov_2r2vblf1xu().b[322][1]++,o.validators=i.validator,o.asyncValidators=i.asyncValidator)),new q(r,o);}record(e,i=(cov_2r2vblf1xu().b[323][0]++,null)){cov_2r2vblf1xu().f[470]++;let r=(cov_2r2vblf1xu().s[747]++,this._reduceControls(e));cov_2r2vblf1xu().s[748]++;return new re(r,i);}control(e,i,r){cov_2r2vblf1xu().f[471]++;let o=(cov_2r2vblf1xu().s[749]++,{});cov_2r2vblf1xu().s[750]++;return this.useNonNullable?(cov_2r2vblf1xu().b[324][0]++,Pe(i)?(cov_2r2vblf1xu().b[325][0]++,o=i):(cov_2r2vblf1xu().b[325][1]++,o.validators=i,o.asyncValidators=r),new B(e,d(u({},o),{nonNullable:!0}))):(cov_2r2vblf1xu().b[324][1]++,new B(e,i,r));}array(e,i,r){cov_2r2vblf1xu().f[472]++;let o=(cov_2r2vblf1xu().s[751]++,e.map(s=>{cov_2r2vblf1xu().f[473]++;cov_2r2vblf1xu().s[752]++;return this._createControl(s);}));cov_2r2vblf1xu().s[753]++;return new oe(o,i,r);}_reduceControls(e){cov_2r2vblf1xu().f[474]++;let i=(cov_2r2vblf1xu().s[754]++,{});cov_2r2vblf1xu().s[755]++;return Object.keys(e).forEach(r=>{cov_2r2vblf1xu().f[475]++;cov_2r2vblf1xu().s[756]++;i[r]=this._createControl(e[r]);}),i;}_createControl(e){cov_2r2vblf1xu().f[476]++;cov_2r2vblf1xu().s[757]++;if(e instanceof B){cov_2r2vblf1xu().b[326][0]++;cov_2r2vblf1xu().s[758]++;return e;}else{cov_2r2vblf1xu().b[326][1]++;}cov_2r2vblf1xu().s[759]++;if(e instanceof D){cov_2r2vblf1xu().b[327][0]++;cov_2r2vblf1xu().s[760]++;return e;}else{cov_2r2vblf1xu().b[327][1]++;}cov_2r2vblf1xu().s[761]++;if(Array.isArray(e)){cov_2r2vblf1xu().b[328][0]++;let i=(cov_2r2vblf1xu().s[762]++,e[0]),r=(cov_2r2vblf1xu().s[763]++,e.length>1?(cov_2r2vblf1xu().b[329][0]++,e[1]):(cov_2r2vblf1xu().b[329][1]++,null)),o=(cov_2r2vblf1xu().s[764]++,e.length>2?(cov_2r2vblf1xu().b[330][0]++,e[2]):(cov_2r2vblf1xu().b[330][1]++,null));cov_2r2vblf1xu().s[765]++;return this.control(i,r,o);}else{cov_2r2vblf1xu().b[328][1]++;cov_2r2vblf1xu().s[766]++;return this.control(e);}}static ɵfac=(cov_2r2vblf1xu().s[767]++,function(i){cov_2r2vblf1xu().f[477]++;cov_2r2vblf1xu().s[768]++;return new((cov_2r2vblf1xu().b[331][0]++,i)||(cov_2r2vblf1xu().b[331][1]++,n))();});static ɵprov=(cov_2r2vblf1xu().s[769]++,ve({token:n,factory:n.ɵfac,providedIn:"root"}));}cov_2r2vblf1xu().s[770]++;return n;})());var vn=(cov_2r2vblf1xu().s[771]++,(()=>{cov_2r2vblf1xu().f[478]++;class n{static withConfig(e){cov_2r2vblf1xu().f[479]++;cov_2r2vblf1xu().s[772]++;return{ngModule:n,providers:[{provide:et,useValue:(cov_2r2vblf1xu().b[332][0]++,e.warnOnNgModelWithFormControl)??(cov_2r2vblf1xu().b[332][1]++,"always")},{provide:Je,useValue:(cov_2r2vblf1xu().b[333][0]++,e.callSetDisabledState)??(cov_2r2vblf1xu().b[333][1]++,he)}]};}static ɵfac=(cov_2r2vblf1xu().s[773]++,function(i){cov_2r2vblf1xu().f[480]++;cov_2r2vblf1xu().s[774]++;return new((cov_2r2vblf1xu().b[334][0]++,i)||(cov_2r2vblf1xu().b[334][1]++,n))();});static ɵmod=(cov_2r2vblf1xu().s[775]++,Q({type:n}));static ɵinj=(cov_2r2vblf1xu().s[776]++,J({imports:[$t]}));}cov_2r2vblf1xu().s[777]++;return n;})());export{ke as a,Me as b,cn as c,hn as d,gn as e,xt as f,Rt as g,nt as h,pn as i,mn as j,Lt as k,_n as l,vn as m};//# sourceMappingURL=chunk-X3YLKFKT.js.map +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZSIsImNvdl8ycjJ2YmxmMXh1IiwicyIsImYiLCJuIiwiX3JlbmRlcmVyIiwiX2VsZW1lbnRSZWYiLCJvbkNoYW5nZSIsImUiLCJvblRvdWNoZWQiLCJjb25zdHJ1Y3RvciIsImkiLCJzZXRQcm9wZXJ0eSIsIm5hdGl2ZUVsZW1lbnQiLCJyZWdpc3Rlck9uVG91Y2hlZCIsInJlZ2lzdGVyT25DaGFuZ2UiLCJzZXREaXNhYmxlZFN0YXRlIiwiybVmYWMiLCJiIiwiYSIsIkYiLCJNIiwiybVkaXIiLCJsIiwidHlwZSIsInNlIiwiciIsInYiLCJmZWF0dXJlcyIsImMiLCJYIiwibSIsInJ0IiwicHJvdmlkZSIsInVzZUV4aXN0aW5nIiwicCIsImtlIiwibXVsdGkiLCJvdCIsInRlIiwiZ2V0VXNlckFnZW50IiwidGVzdCIsInRvTG93ZXJDYXNlIiwic3QiLCJfY29tcG9zaXRpb25Nb2RlIiwiX2NvbXBvc2luZyIsIndyaXRlVmFsdWUiLCJfaGFuZGxlSW5wdXQiLCJfY29tcG9zaXRpb25TdGFydCIsIl9jb21wb3NpdGlvbkVuZCIsInNlbGVjdG9ycyIsImhvc3RCaW5kaW5ncyIsIkUiLCJ0YXJnZXQiLCJ2YWx1ZSIsInN0YW5kYWxvbmUiLCJfIiwiYWUiLCJsZSIsIkFycmF5IiwiaXNBcnJheSIsImxlbmd0aCIsIlNldCIsInNpemUiLCJ1ZSIsImplIiwiYXQiLCJNZSIsIm1pbiIsInQiLCJsdCIsIm1heCIsInV0IiwicmVxdWlyZWQiLCJkdCIsInJlcXVpcmVkVHJ1ZSIsImN0IiwiZW1haWwiLCJodCIsIm1pbkxlbmd0aCIsImZ0IiwibWF4TGVuZ3RoIiwiR2UiLCJwYXR0ZXJuIiwiZ3QiLCJudWxsVmFsaWRhdG9yIiwiVSIsImNvbXBvc2UiLCIkZSIsImNvbXBvc2VBc3luYyIsInFlIiwicGFyc2VGbG9hdCIsImlzTmFOIiwiYWN0dWFsIiwibWlubGVuZ3RoIiwicmVxdWlyZWRMZW5ndGgiLCJhY3R1YWxMZW5ndGgiLCJtYXhsZW5ndGgiLCJjaGFyQXQiLCJSZWdFeHAiLCJ0b1N0cmluZyIsInJlcXVpcmVkUGF0dGVybiIsImFjdHVhbFZhbHVlIiwiVGUiLCJCZSIsIlZlIiwicGUiLCJVZSIsImZvckVhY2giLCJ1IiwiT2JqZWN0Iiwia2V5cyIsIkhlIiwibWFwIiwicHQiLCJ2YWxpZGF0ZSIsIkxlIiwiZmlsdGVyIiwiV2UiLCJfZSIsInBpcGUiLCJtZSIsInplIiwiRmUiLCJaZSIsIl9yYXdWYWxpZGF0b3JzIiwiWGUiLCJfcmF3QXN5bmNWYWxpZGF0b3JzIiwibmUiLCJIIiwiaW5jbHVkZXMiLCJFZSIsInB1c2giLCJ3ZSIsIkwiLCJjb250cm9sIiwidmFsaWQiLCJpbnZhbGlkIiwicGVuZGluZyIsImRpc2FibGVkIiwiZW5hYmxlZCIsImVycm9ycyIsInByaXN0aW5lIiwiZGlydHkiLCJ0b3VjaGVkIiwic3RhdHVzIiwidW50b3VjaGVkIiwic3RhdHVzQ2hhbmdlcyIsInZhbHVlQ2hhbmdlcyIsInBhdGgiLCJfY29tcG9zZWRWYWxpZGF0b3JGbiIsIl9jb21wb3NlZEFzeW5jVmFsaWRhdG9yRm4iLCJfc2V0VmFsaWRhdG9ycyIsIl9zZXRBc3luY1ZhbGlkYXRvcnMiLCJ2YWxpZGF0b3IiLCJhc3luY1ZhbGlkYXRvciIsIl9vbkRlc3Ryb3lDYWxsYmFja3MiLCJfcmVnaXN0ZXJPbkRlc3Ryb3kiLCJfaW52b2tlT25EZXN0cm95Q2FsbGJhY2tzIiwicmVzZXQiLCJoYXNFcnJvciIsImdldEVycm9yIiwiViIsIm5hbWUiLCJmb3JtRGlyZWN0aXZlIiwieCIsIl9wYXJlbnQiLCJ2YWx1ZUFjY2Vzc29yIiwiJCIsIl9jZCIsImlzVG91Y2hlZCIsIl90b3VjaGVkIiwiaXNVbnRvdWNoZWQiLCJpc1ByaXN0aW5lIiwiX3ByaXN0aW5lIiwiaXNEaXJ0eSIsImlzVmFsaWQiLCJfc3RhdHVzIiwiaXNJbnZhbGlkIiwiaXNQZW5kaW5nIiwiaXNTdWJtaXR0ZWQiLCJfc3VibWl0dGVkIiwic3VibWl0dGVkIiwiY24iLCJob3N0VmFycyIsImVlIiwiaG4iLCJJIiwiVCIsInkiLCJTIiwiVyIsInNvdXJjZSIsIk4iLCJPIiwiQyIsImllIiwiUCIsImRlIiwiWSIsInZhbGlkYXRvcnMiLCJtdCIsImNlIiwiYXN5bmNWYWxpZGF0b3JzIiwiX3QiLCJZZSIsImNvbnRyb2xzIiwiayIsIktlIiwiX2ZvckVhY2hDaGlsZCIsIkQiLCJfcGVuZGluZ0RpcnR5IiwiX2hhc093blBlbmRpbmdBc3luY1ZhbGlkYXRvciIsIl9wZW5kaW5nVG91Y2hlZCIsIl9vbkNvbGxlY3Rpb25DaGFuZ2UiLCJfdXBkYXRlT24iLCJfYXN5bmNWYWxpZGF0aW9uU3Vic2NyaXB0aW9uIiwiX2Fzc2lnblZhbGlkYXRvcnMiLCJfYXNzaWduQXN5bmNWYWxpZGF0b3JzIiwicGFyZW50IiwiaCIsInN0YXR1c1JlYWN0aXZlIiwic2V0IiwidyIsIkEiLCJwcmlzdGluZVJlYWN0aXZlIiwidG91Y2hlZFJlYWN0aXZlIiwiX2V2ZW50cyIsImdlIiwiZXZlbnRzIiwiYXNPYnNlcnZhYmxlIiwidXBkYXRlT24iLCJzZXRWYWxpZGF0b3JzIiwic2V0QXN5bmNWYWxpZGF0b3JzIiwiYWRkVmFsaWRhdG9ycyIsImFkZEFzeW5jVmFsaWRhdG9ycyIsInJlbW92ZVZhbGlkYXRvcnMiLCJyZW1vdmVBc3luY1ZhbGlkYXRvcnMiLCJoYXNWYWxpZGF0b3IiLCJoYXNBc3luY1ZhbGlkYXRvciIsImNsZWFyVmFsaWRhdG9ycyIsImNsZWFyQXN5bmNWYWxpZGF0b3JzIiwibWFya0FzVG91Y2hlZCIsInNvdXJjZUNvbnRyb2wiLCJvbmx5U2VsZiIsImQiLCJlbWl0RXZlbnQiLCJuZXh0IiwibWFya0FsbEFzRGlydHkiLCJtYXJrQXNEaXJ0eSIsIm1hcmtBbGxBc1RvdWNoZWQiLCJtYXJrQXNVbnRvdWNoZWQiLCJfdXBkYXRlVG91Y2hlZCIsIm1hcmtBc1ByaXN0aW5lIiwiX3VwZGF0ZVByaXN0aW5lIiwibWFya0FzUGVuZGluZyIsImVtaXQiLCJkaXNhYmxlIiwiX3BhcmVudE1hcmtlZERpcnR5IiwiX3VwZGF0ZVZhbHVlIiwiX3VwZGF0ZUFuY2VzdG9ycyIsInNraXBQcmlzdGluZUNoZWNrIiwiX29uRGlzYWJsZWRDaGFuZ2UiLCJlbmFibGUiLCJ1cGRhdGVWYWx1ZUFuZFZhbGlkaXR5Iiwic2V0UGFyZW50IiwiZ2V0UmF3VmFsdWUiLCJfc2V0SW5pdGlhbFN0YXR1cyIsIl9jYW5jZWxFeGlzdGluZ1N1YnNjcmlwdGlvbiIsIl9ydW5WYWxpZGF0b3IiLCJfY2FsY3VsYXRlU3RhdHVzIiwiX3J1bkFzeW5jVmFsaWRhdG9yIiwiX3VwZGF0ZVRyZWVWYWxpZGl0eSIsIl9hbGxDb250cm9sc0Rpc2FibGVkIiwic2hvdWxkSGF2ZUVtaXR0ZWQiLCJzdWJzY3JpYmUiLCJzZXRFcnJvcnMiLCJ1bnN1YnNjcmliZSIsIl91cGRhdGVDb250cm9sc0Vycm9ycyIsImdldCIsInNwbGl0IiwicmVkdWNlIiwiX2ZpbmQiLCJyb290IiwiX2luaXRPYnNlcnZhYmxlcyIsIl9hbnlDb250cm9sc0hhdmVTdGF0dXMiLCJfYW55Q29udHJvbHMiLCJfYW55Q29udHJvbHNEaXJ0eSIsIl9hbnlDb250cm9sc1RvdWNoZWQiLCJfcmVnaXN0ZXJPbkNvbGxlY3Rpb25DaGFuZ2UiLCJfc2V0VXBkYXRlU3RyYXRlZ3kiLCJzbGljZSIsInEiLCJfc2V0VXBDb250cm9scyIsInJlZ2lzdGVyQ29udHJvbCIsImFkZENvbnRyb2wiLCJyZW1vdmVDb250cm9sIiwic2V0Q29udHJvbCIsImNvbnRhaW5zIiwiaGFzT3duUHJvcGVydHkiLCJzZXRWYWx1ZSIsInBhdGNoVmFsdWUiLCJfcmVkdWNlQ2hpbGRyZW4iLCJfc3luY1BlbmRpbmdDb250cm9scyIsIl9yZWR1Y2VWYWx1ZSIsImVudHJpZXMiLCJvIiwicmUiLCJKZSIsImZhY3RvcnkiLCJoZSIsInZ0IiwiSWUiLCJmZSIsIkN0IiwiRHQiLCJWdCIsInl0IiwiU2UiLCJub29wIiwiWiIsInoiLCJyZWdpc3Rlck9uVmFsaWRhdG9yQ2hhbmdlIiwicmVnaXN0ZXJPbkRpc2FibGVkQ2hhbmdlIiwiX3VucmVnaXN0ZXJPbkRpc2FibGVkQ2hhbmdlIiwib25WYWxpZGF0b3JDaGFuZ2UiLCJfcGVuZGluZ1ZhbHVlIiwiX3BlbmRpbmdDaGFuZ2UiLCJRZSIsImVtaXRNb2RlbFRvVmlld0NoYW5nZSIsInZpZXdUb01vZGVsVXBkYXRlIiwiX3VucmVnaXN0ZXJPbkNoYW5nZSIsImJ0IiwiQXQiLCJNdCIsIm1vZGVsIiwiaXNGaXJzdENoYW5nZSIsImlzIiwiY3VycmVudFZhbHVlIiwiRnQiLCJnZXRQcm90b3R5cGVPZiIsIkV0Iiwid3QiLCJJdCIsImluZGV4T2YiLCJzcGxpY2UiLCJOZSIsIk9lIiwiQiIsImRlZmF1bHRWYWx1ZSIsIl9vbkNoYW5nZSIsIl9hcHBseUZvcm1TdGF0ZSIsIm5vbk51bGxhYmxlIiwiaW5pdGlhbFZhbHVlSXNEZWZhdWx0IiwiZW1pdFZpZXdUb01vZGVsQ2hhbmdlIiwib3ZlcndyaXRlRGVmYXVsdFZhbHVlIiwiU3QiLCJnbiIsImhvc3RBdHRycyIsIm9lIiwiX2FkanVzdEluZGV4IiwiX3JlZ2lzdGVyQ29udHJvbCIsImluc2VydCIsInJlbW92ZUF0IiwiY2xlYXIiLCJzb21lIiwiTnQiLCJjYWxsU2V0RGlzYWJsZWRTdGF0ZSIsIl9zdWJtaXR0ZWRSZWFjdGl2ZSIsIl9vbGRGb3JtIiwiX3VwZGF0ZURvbVZhbHVlIiwiZGlyZWN0aXZlcyIsIm5nT25DaGFuZ2VzIiwib25DaGFuZ2VzIiwibmdPbkRlc3Ryb3kiLCJvbkRlc3Ryb3kiLCJfY2hlY2tGb3JtUHJlc2VudCIsIl91cGRhdGVWYWxpZGF0b3JzIiwiX3VwZGF0ZVJlZ2lzdHJhdGlvbnMiLCJmb3JtIiwiZ2V0Q29udHJvbCIsImFkZEZvcm1Hcm91cCIsIl9zZXRVcEZvcm1Db250YWluZXIiLCJyZW1vdmVGb3JtR3JvdXAiLCJfY2xlYW5VcEZvcm1Db250YWluZXIiLCJnZXRGb3JtR3JvdXAiLCJnZXRGb3JtQXJyYXkiLCJhZGRGb3JtQXJyYXkiLCJyZW1vdmVGb3JtQXJyYXkiLCJ1cGRhdGVNb2RlbCIsIm9uUmVzZXQiLCJyZXNldEZvcm0iLCJvblN1Ym1pdCIsIm5nU3VibWl0IiwibWV0aG9kIiwiRyIsImV0IiwiT3QiLCJ4dCIsIl9uZ01vZGVsV2FybmluZ0NvbmZpZyIsIl9hZGRlZCIsInZpZXdNb2RlbCIsImlzRGlzYWJsZWQiLCJ1cGRhdGUiLCJfbmdNb2RlbFdhcm5pbmdTZW50T25jZSIsIl9uZ01vZGVsV2FybmluZ1NlbnQiLCJfc2V0VXBDb250cm9sIiwiaW5wdXRzIiwib3V0cHV0cyIsIlB0IiwiUnQiLCJleHBvcnRBcyIsImt0IiwibnQiLCJ0dCIsImp0IiwiX29wdGlvbk1hcCIsIk1hcCIsIl9pZENvdW50ZXIiLCJjb21wYXJlV2l0aCIsIl9jb21wYXJlV2l0aCIsImFwcFJlZkluamVjdG9yIiwiaiIsIkRlIiwiaW5qZWN0b3IiLCJkZXN0cm95UmVmIiwieWUiLCJjZHIiLCJBZSIsIl9xdWV1ZWRXcml0ZSIsIl93cml0ZVZhbHVlQWZ0ZXJSZW5kZXIiLCJkZXN0cm95ZWQiLCJDZSIsIndyaXRlIiwibWFya0ZvckNoZWNrIiwiX2dldE9wdGlvbklkIiwiX2dldE9wdGlvblZhbHVlIiwiX3JlZ2lzdGVyT3B0aW9uIiwiaGFzIiwicG4iLCJfZWxlbWVudCIsIl9zZWxlY3QiLCJpZCIsIm5nVmFsdWUiLCJfc2V0RWxlbWVudFZhbHVlIiwiZGVsZXRlIiwiR3QiLCJpdCIsInhlIiwiVHQiLCJvcHRpb25TZWxlY3RlZFN0YXRlU2V0dGVyIiwiX3NldFNlbGVjdGVkIiwic2VsZWN0ZWRPcHRpb25zIiwiZyIsIlIiLCJLIiwib3B0aW9ucyIsInNlbGVjdGVkIiwiX3ZhbHVlIiwibW4iLCJCdCIsInBhcnNlSW50IiwiVXQiLCJfdmFsaWRhdG9yIiwiX2VuYWJsZWQiLCJpbnB1dE5hbWUiLCJub3JtYWxpemVJbnB1dCIsImNyZWF0ZVZhbGlkYXRvciIsIkh0IiwiTHQiLCJiZSIsIiR0IiwiybVtb2QiLCJRIiwiybVpbmoiLCJKIiwiUGUiLCJfbiIsInVzZU5vbk51bGxhYmxlIiwiZ3JvdXAiLCJfcmVkdWNlQ29udHJvbHMiLCJyZWNvcmQiLCJhcnJheSIsIl9jcmVhdGVDb250cm9sIiwiybVwcm92IiwidmUiLCJ0b2tlbiIsInByb3ZpZGVkSW4iLCJ2biIsIndpdGhDb25maWciLCJuZ01vZHVsZSIsInByb3ZpZGVycyIsInVzZVZhbHVlIiwid2Fybk9uTmdNb2RlbFdpdGhGb3JtQ29udHJvbCIsImltcG9ydHMiXSwic291cmNlcyI6WyJub2RlX21vZHVsZXMvQGFuZ3VsYXIvZm9ybXMvZmVzbTIwMjIvZm9ybXMubWpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2UgQW5ndWxhciB2MjEuMi40XG4gKiAoYykgMjAxMC0yMDI2IEdvb2dsZSBMTEMuIGh0dHBzOi8vYW5ndWxhci5kZXYvXG4gKiBMaWNlbnNlOiBNSVRcbiAqL1xuXG5pbXBvcnQgKiBhcyBpMCBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERpcmVjdGl2ZSwgSW5qZWN0aW9uVG9rZW4sIGZvcndhcmRSZWYsIE9wdGlvbmFsLCBJbmplY3QsIMm1aXNQcm9taXNlIGFzIF9pc1Byb21pc2UsIMm1aXNTdWJzY3JpYmFibGUgYXMgX2lzU3Vic2NyaWJhYmxlLCDJtVJ1bnRpbWVFcnJvciBhcyBfUnVudGltZUVycm9yLCBTZWxmLCBWZXJzaW9uLCB1bnRyYWNrZWQsIGNvbXB1dGVkLCBzaWduYWwsIEV2ZW50RW1pdHRlciwgSW5wdXQsIEhvc3QsIFNraXBTZWxmLCBib29sZWFuQXR0cmlidXRlLCBDaGFuZ2VEZXRlY3RvclJlZiwgT3V0cHV0LCBJbmplY3RhYmxlLCBpbmplY3QsIEFwcGxpY2F0aW9uUmVmLCBEZXN0cm95UmVmLCBhZnRlck5leHRSZW5kZXIsIE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyDJtWdldERPTSBhcyBfZ2V0RE9NIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IGZvcmtKb2luLCBmcm9tLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5sZXQgQmFzZUNvbnRyb2xWYWx1ZUFjY2Vzc29yID0gLyojX19QVVJFX18qLygoKSA9PiB7XG4gIGNsYXNzIEJhc2VDb250cm9sVmFsdWVBY2Nlc3NvciB7XG4gICAgX3JlbmRlcmVyO1xuICAgIF9lbGVtZW50UmVmO1xuICAgIG9uQ2hhbmdlID0gXyA9PiB7fTtcbiAgICBvblRvdWNoZWQgPSAoKSA9PiB7fTtcbiAgICBjb25zdHJ1Y3RvcihfcmVuZGVyZXIsIF9lbGVtZW50UmVmKSB7XG4gICAgICB0aGlzLl9yZW5kZXJlciA9IF9yZW5kZXJlcjtcbiAgICAgIHRoaXMuX2VsZW1lbnRSZWYgPSBfZWxlbWVudFJlZjtcbiAgICB9XG4gICAgc2V0UHJvcGVydHkoa2V5LCB2YWx1ZSkge1xuICAgICAgdGhpcy5fcmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCBrZXksIHZhbHVlKTtcbiAgICB9XG4gICAgcmVnaXN0ZXJPblRvdWNoZWQoZm4pIHtcbiAgICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gICAgfVxuICAgIHJlZ2lzdGVyT25DaGFuZ2UoZm4pIHtcbiAgICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgICB9XG4gICAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkKSB7XG4gICAgICB0aGlzLnNldFByb3BlcnR5KCdkaXNhYmxlZCcsIGlzRGlzYWJsZWQpO1xuICAgIH1cbiAgICBzdGF0aWMgybVmYWMgPSBmdW5jdGlvbiBCYXNlQ29udHJvbFZhbHVlQWNjZXNzb3JfRmFjdG9yeShfX25nRmFjdG9yeVR5cGVfXykge1xuICAgICAgcmV0dXJuIG5ldyAoX19uZ0ZhY3RvcnlUeXBlX18gfHwgQmFzZUNvbnRyb2xWYWx1ZUFjY2Vzc29yKShpMC7Jtcm1ZGlyZWN0aXZlSW5qZWN0KGkwLlJlbmRlcmVyMiksIGkwLsm1ybVkaXJlY3RpdmVJbmplY3QoaTAuRWxlbWVudFJlZikpO1xuICAgIH07XG4gICAgc3RhdGljIMm1ZGlyID0gLyogQF9fUFVSRV9fICovaTAuybXJtWRlZmluZURpcmVjdGl2ZSh7XG4gICAgICB0eXBlOiBCYXNlQ29udHJvbFZhbHVlQWNjZXNzb3JcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gQmFzZUNvbnRyb2xWYWx1ZUFjY2Vzc29yO1xufSkoKTtcbi8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICAodHlwZW9mIG5nRGV2TW9kZSA9PT0gXCJ1bmRlZmluZWRcIiB8fCBuZ0Rldk1vZGUpICYmIHZvaWQgMDtcbn0pKCk7XG5sZXQgQnVpbHRJbkNvbnRyb2xWYWx1ZUFjY2Vzc29yID0gLyojX19QVVJFX18qLygoKSA9PiB7XG4gIGNsYXNzIEJ1aWx0SW5Db250cm9sVmFsdWVBY2Nlc3NvciBleHRlbmRzIEJhc2VDb250cm9sVmFsdWVBY2Nlc3NvciB7XG4gICAgc3RhdGljIMm1ZmFjID0gLyogQF9fUFVSRV9fICovKCgpID0+IHtcbiAgICAgIGxldCDJtUJ1aWx0SW5Db250cm9sVmFsdWVBY2Nlc3Nvcl9CYXNlRmFjdG9yeTtcbiAgICAgIHJldHVybiBmdW5jdGlvbiBCdWlsdEluQ29udHJvbFZhbHVlQWNjZXNzb3JfRmFjdG9yeShfX25nRmFjdG9yeVR5cGVfXykge1xuICAgICAgICByZXR1cm4gKMm1QnVpbHRJbkNvbnRyb2xWYWx1ZUFjY2Vzc29yX0Jhc2VGYWN0b3J5IHx8ICjJtUJ1aWx0SW5Db250cm9sVmFsdWVBY2Nlc3Nvcl9CYXNlRmFjdG9yeSA9IGkwLsm1ybVnZXRJbmhlcml0ZWRGYWN0b3J5KEJ1aWx0SW5Db250cm9sVmFsdWVBY2Nlc3NvcikpKShfX25nRmFjdG9yeVR5cGVfXyB8fCBCdWlsdEluQ29udHJvbFZhbHVlQWNjZXNzb3IpO1xuICAgICAgfTtcbiAgICB9KSgpO1xuICAgIHN0YXRpYyDJtWRpciA9IC8qIEBfX1BVUkVfXyAqL2kwLsm1ybVkZWZpbmVEaXJlY3RpdmUoe1xuICAgICAgdHlwZTogQnVpbHRJbkNvbnRyb2xWYWx1ZUFjY2Vzc29yLFxuICAgICAgZmVhdHVyZXM6IFtpMC7Jtcm1SW5oZXJpdERlZmluaXRpb25GZWF0dXJlXVxuICAgIH0pO1xuICB9XG4gIHJldHVybiBCdWlsdEluQ29udHJvbFZhbHVlQWNjZXNzb3I7XG59KSgpO1xuLyojX19QVVJFX18qLygoKSA9PiB7XG4gICh0eXBlb2YgbmdEZXZNb2RlID09PSBcInVuZGVmaW5lZFwiIHx8IG5nRGV2TW9kZSkgJiYgdm9pZCAwO1xufSkoKTtcbmNvbnN0IE5HX1ZBTFVFX0FDQ0VTU09SID0gLyojX19QVVJFX18qL25ldyBJbmplY3Rpb25Ub2tlbih0eXBlb2YgbmdEZXZNb2RlICE9PSAndW5kZWZpbmVkJyAmJiBuZ0Rldk1vZGUgPyAnTmdWYWx1ZUFjY2Vzc29yJyA6ICcnKTtcbmNvbnN0IENIRUNLQk9YX1ZBTFVFX0FDQ0VTU09SID0ge1xuICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgdXNlRXhpc3Rpbmc6IC8qI19fUFVSRV9fKi9mb3J3YXJkUmVmKCgpID0+IENoZWNrYm94Q29udHJvbFZhbHVlQWNjZXNzb3IpLFxuICBtdWx0aTogdHJ1ZVxufTtcbmxldCBDaGVja2JveENvbnRyb2xWYWx1ZUFjY2Vzc29yID0gLyojX19QVVJFX18qLygoKSA9PiB7XG4gIGNsYXNzIENoZWNrYm94Q29udHJvbFZhbHVlQWNjZXNzb3IgZXh0ZW5kcyBCdWlsdEluQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuICAgIHdyaXRlVmFsdWUodmFsdWUpIHtcbiAgICAgIHRoaXMuc2V0UHJvcGVydHkoJ2NoZWNrZWQnLCB2YWx1ZSk7XG4gICAgfVxuICAgIHN0YXRpYyDJtWZhYyA9IC8qIEBfX1BVUkVfXyAqLygoKSA9PiB7XG4gICAgICBsZXQgybVDaGVja2JveENvbnRyb2xWYWx1ZUFjY2Vzc29yX0Jhc2VGYWN0b3J5O1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIENoZWNrYm94Q29udHJvbFZhbHVlQWNjZXNzb3JfRmFjdG9yeShfX25nRmFjdG9yeVR5cGVfXykge1xuICAgICAgICByZXR1cm4gKMm1Q2hlY2tib3hDb250cm9sVmFsdWVBY2Nlc3Nvcl9CYXNlRmFjdG9yeSB8fCAoybVDaGVja2JveENvbnRyb2xWYWx1ZUFjY2Vzc29yX0Jhc2VGYWN0b3J5ID0gaTAuybXJtWdldEluaGVyaXRlZEZhY3RvcnkoQ2hlY2tib3hDb250cm9sVmFsdWVBY2Nlc3NvcikpKShfX25nRmFjdG9yeVR5cGVfXyB8fCBDaGVja2JveENvbnRyb2xWYWx1ZUFjY2Vzc29yKTtcbiAgICAgIH07XG4gICAgfSkoKTtcbiAgICBzdGF0aWMgybVkaXIgPSAvKiBAX19QVVJFX18gKi9pMC7Jtcm1ZGVmaW5lRGlyZWN0aXZlKHtcbiAgICAgIHR5cGU6IENoZWNrYm94Q29udHJvbFZhbHVlQWNjZXNzb3IsXG4gICAgICBzZWxlY3RvcnM6IFtbXCJpbnB1dFwiLCBcInR5cGVcIiwgXCJjaGVja2JveFwiLCBcImZvcm1Db250cm9sTmFtZVwiLCBcIlwiXSwgW1wiaW5wdXRcIiwgXCJ0eXBlXCIsIFwiY2hlY2tib3hcIiwgXCJmb3JtQ29udHJvbFwiLCBcIlwiXSwgW1wiaW5wdXRcIiwgXCJ0eXBlXCIsIFwiY2hlY2tib3hcIiwgXCJuZ01vZGVsXCIsIFwiXCJdXSxcbiAgICAgIGhvc3RCaW5kaW5nczogZnVuY3Rpb24gQ2hlY2tib3hDb250cm9sVmFsdWVBY2Nlc3Nvcl9Ib3N0QmluZGluZ3MocmYsIGN0eCkge1xuICAgICAgICBpZiAocmYgJiAxKSB7XG4gICAgICAgICAgaTAuybXJtWxpc3RlbmVyKFwiY2hhbmdlXCIsIGZ1bmN0aW9uIENoZWNrYm94Q29udHJvbFZhbHVlQWNjZXNzb3JfY2hhbmdlX0hvc3RCaW5kaW5nSGFuZGxlcigkZXZlbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBjdHgub25DaGFuZ2UoJGV2ZW50LnRhcmdldC5jaGVja2VkKTtcbiAgICAgICAgICB9KShcImJsdXJcIiwgZnVuY3Rpb24gQ2hlY2tib3hDb250cm9sVmFsdWVBY2Nlc3Nvcl9ibHVyX0hvc3RCaW5kaW5nSGFuZGxlcigpIHtcbiAgICAgICAgICAgIHJldHVybiBjdHgub25Ub3VjaGVkKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBzdGFuZGFsb25lOiBmYWxzZSxcbiAgICAgIGZlYXR1cmVzOiBbaTAuybXJtVByb3ZpZGVyc0ZlYXR1cmUoW0NIRUNLQk9YX1ZBTFVFX0FDQ0VTU09SXSksIGkwLsm1ybVJbmhlcml0RGVmaW5pdGlvbkZlYXR1cmVdXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIENoZWNrYm94Q29udHJvbFZhbHVlQWNjZXNzb3I7XG59KSgpO1xuLyojX19QVVJFX18qLygoKSA9PiB7XG4gICh0eXBlb2YgbmdEZXZNb2RlID09PSBcInVuZGVmaW5lZFwiIHx8IG5nRGV2TW9kZSkgJiYgdm9pZCAwO1xufSkoKTtcbmNvbnN0IERFRkFVTFRfVkFMVUVfQUNDRVNTT1IgPSB7XG4gIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICB1c2VFeGlzdGluZzogLyojX19QVVJFX18qL2ZvcndhcmRSZWYoKCkgPT4gRGVmYXVsdFZhbHVlQWNjZXNzb3IpLFxuICBtdWx0aTogdHJ1ZVxufTtcbmZ1bmN0aW9uIF9pc0FuZHJvaWQoKSB7XG4gIGNvbnN0IHVzZXJBZ2VudCA9IF9nZXRET00oKSA/IF9nZXRET00oKS5nZXRVc2VyQWdlbnQoKSA6ICcnO1xuICByZXR1cm4gL2FuZHJvaWQgKFxcZCspLy50ZXN0KHVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpKTtcbn1cbmNvbnN0IENPTVBPU0lUSU9OX0JVRkZFUl9NT0RFID0gLyojX19QVVJFX18qL25ldyBJbmplY3Rpb25Ub2tlbih0eXBlb2YgbmdEZXZNb2RlICE9PSAndW5kZWZpbmVkJyAmJiBuZ0Rldk1vZGUgPyAnQ29tcG9zaXRpb25FdmVudE1vZGUnIDogJycpO1xubGV0IERlZmF1bHRWYWx1ZUFjY2Vzc29yID0gLyojX19QVVJFX18qLygoKSA9PiB7XG4gIGNsYXNzIERlZmF1bHRWYWx1ZUFjY2Vzc29yIGV4dGVuZHMgQmFzZUNvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcbiAgICBfY29tcG9zaXRpb25Nb2RlO1xuICAgIF9jb21wb3NpbmcgPSBmYWxzZTtcbiAgICBjb25zdHJ1Y3RvcihyZW5kZXJlciwgZWxlbWVudFJlZiwgX2NvbXBvc2l0aW9uTW9kZSkge1xuICAgICAgc3VwZXIocmVuZGVyZXIsIGVsZW1lbnRSZWYpO1xuICAgICAgdGhpcy5fY29tcG9zaXRpb25Nb2RlID0gX2NvbXBvc2l0aW9uTW9kZTtcbiAgICAgIGlmICh0aGlzLl9jb21wb3NpdGlvbk1vZGUgPT0gbnVsbCkge1xuICAgICAgICB0aGlzLl9jb21wb3NpdGlvbk1vZGUgPSAhX2lzQW5kcm9pZCgpO1xuICAgICAgfVxuICAgIH1cbiAgICB3cml0ZVZhbHVlKHZhbHVlKSB7XG4gICAgICBjb25zdCBub3JtYWxpemVkVmFsdWUgPSB2YWx1ZSA9PSBudWxsID8gJycgOiB2YWx1ZTtcbiAgICAgIHRoaXMuc2V0UHJvcGVydHkoJ3ZhbHVlJywgbm9ybWFsaXplZFZhbHVlKTtcbiAgICB9XG4gICAgX2hhbmRsZUlucHV0KHZhbHVlKSB7XG4gICAgICBpZiAoIXRoaXMuX2NvbXBvc2l0aW9uTW9kZSB8fCB0aGlzLl9jb21wb3NpdGlvbk1vZGUgJiYgIXRoaXMuX2NvbXBvc2luZykge1xuICAgICAgICB0aGlzLm9uQ2hhbmdlKHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgX2NvbXBvc2l0aW9uU3RhcnQoKSB7XG4gICAgICB0aGlzLl9jb21wb3NpbmcgPSB0cnVlO1xuICAgIH1cbiAgICBfY29tcG9zaXRpb25FbmQodmFsdWUpIHtcbiAgICAgIHRoaXMuX2NvbXBvc2luZyA9IGZhbHNlO1xuICAgICAgdGhpcy5fY29tcG9zaXRpb25Nb2RlICYmIHRoaXMub25DaGFuZ2UodmFsdWUpO1xuICAgIH1cbiAgICBzdGF0aWMgybVmYWMgPSBmdW5jdGlvbiBEZWZhdWx0VmFsdWVBY2Nlc3Nvcl9GYWN0b3J5KF9fbmdGYWN0b3J5VHlwZV9fKSB7XG4gICAgICByZXR1cm4gbmV3IChfX25nRmFjdG9yeVR5cGVfXyB8fCBEZWZhdWx0VmFsdWVBY2Nlc3NvcikoaTAuybXJtWRpcmVjdGl2ZUluamVjdChpMC5SZW5kZXJlcjIpLCBpMC7Jtcm1ZGlyZWN0aXZlSW5qZWN0KGkwLkVsZW1lbnRSZWYpLCBpMC7Jtcm1ZGlyZWN0aXZlSW5qZWN0KENPTVBPU0lUSU9OX0JVRkZFUl9NT0RFLCA4KSk7XG4gICAgfTtcbiAgICBzdGF0aWMgybVkaXIgPSAvKiBAX19QVVJFX18gKi9pMC7Jtcm1ZGVmaW5lRGlyZWN0aXZlKHtcbiAgICAgIHR5cGU6IERlZmF1bHRWYWx1ZUFjY2Vzc29yLFxuICAgICAgc2VsZWN0b3JzOiBbW1wiaW5wdXRcIiwgXCJmb3JtQ29udHJvbE5hbWVcIiwgXCJcIiwgMywgXCJ0eXBlXCIsIFwiY2hlY2tib3hcIl0sIFtcInRleHRhcmVhXCIsIFwiZm9ybUNvbnRyb2xOYW1lXCIsIFwiXCJdLCBbXCJpbnB1dFwiLCBcImZvcm1Db250cm9sXCIsIFwiXCIsIDMsIFwidHlwZVwiLCBcImNoZWNrYm94XCJdLCBbXCJ0ZXh0YXJlYVwiLCBcImZvcm1Db250cm9sXCIsIFwiXCJdLCBbXCJpbnB1dFwiLCBcIm5nTW9kZWxcIiwgXCJcIiwgMywgXCJ0eXBlXCIsIFwiY2hlY2tib3hcIl0sIFtcInRleHRhcmVhXCIsIFwibmdNb2RlbFwiLCBcIlwiXSwgW1wiXCIsIFwibmdEZWZhdWx0Q29udHJvbFwiLCBcIlwiXV0sXG4gICAgICBob3N0QmluZGluZ3M6IGZ1bmN0aW9uIERlZmF1bHRWYWx1ZUFjY2Vzc29yX0hvc3RCaW5kaW5ncyhyZiwgY3R4KSB7XG4gICAgICAgIGlmIChyZiAmIDEpIHtcbiAgICAgICAgICBpMC7Jtcm1bGlzdGVuZXIoXCJpbnB1dFwiLCBmdW5jdGlvbiBEZWZhdWx0VmFsdWVBY2Nlc3Nvcl9pbnB1dF9Ib3N0QmluZGluZ0hhbmRsZXIoJGV2ZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gY3R4Ll9oYW5kbGVJbnB1dCgkZXZlbnQudGFyZ2V0LnZhbHVlKTtcbiAgICAgICAgICB9KShcImJsdXJcIiwgZnVuY3Rpb24gRGVmYXVsdFZhbHVlQWNjZXNzb3JfYmx1cl9Ib3N0QmluZGluZ0hhbmRsZXIoKSB7XG4gICAgICAgICAgICByZXR1cm4gY3R4Lm9uVG91Y2hlZCgpO1xuICAgICAgICAgIH0pKFwiY29tcG9zaXRpb25zdGFydFwiLCBmdW5jdGlvbiBEZWZhdWx0VmFsdWVBY2Nlc3Nvcl9jb21wb3NpdGlvbnN0YXJ0X0hvc3RCaW5kaW5nSGFuZGxlcigpIHtcbiAgICAgICAgICAgIHJldHVybiBjdHguX2NvbXBvc2l0aW9uU3RhcnQoKTtcbiAgICAgICAgICB9KShcImNvbXBvc2l0aW9uZW5kXCIsIGZ1bmN0aW9uIERlZmF1bHRWYWx1ZUFjY2Vzc29yX2NvbXBvc2l0aW9uZW5kX0hvc3RCaW5kaW5nSGFuZGxlcigkZXZlbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBjdHguX2NvbXBvc2l0aW9uRW5kKCRldmVudC50YXJnZXQudmFsdWUpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgc3RhbmRhbG9uZTogZmFsc2UsXG4gICAgICBmZWF0dXJlczogW2kwLsm1ybVQcm92aWRlcnNGZWF0dXJlKFtERUZBVUxUX1ZBTFVFX0FDQ0VTU09SXSksIGkwLsm1ybVJbmhlcml0RGVmaW5pdGlvbkZlYXR1cmVdXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIERlZmF1bHRWYWx1ZUFjY2Vzc29yO1xufSkoKTtcbi8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICAodHlwZW9mIG5nRGV2TW9kZSA9PT0gXCJ1bmRlZmluZWRcIiB8fCBuZ0Rldk1vZGUpICYmIHZvaWQgMDtcbn0pKCk7XG5mdW5jdGlvbiBpc0VtcHR5SW5wdXRWYWx1ZSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPT0gbnVsbCB8fCBsZW5ndGhPclNpemUodmFsdWUpID09PSAwO1xufVxuZnVuY3Rpb24gbGVuZ3RoT3JTaXplKHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgfHwgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB2YWx1ZS5sZW5ndGg7XG4gIH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBTZXQpIHtcbiAgICByZXR1cm4gdmFsdWUuc2l6ZTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cbmNvbnN0IE5HX1ZBTElEQVRPUlMgPSAvKiNfX1BVUkVfXyovbmV3IEluamVjdGlvblRva2VuKHR5cGVvZiBuZ0Rldk1vZGUgIT09ICd1bmRlZmluZWQnICYmIG5nRGV2TW9kZSA/ICdOZ1ZhbGlkYXRvcnMnIDogJycpO1xuY29uc3QgTkdfQVNZTkNfVkFMSURBVE9SUyA9IC8qI19fUFVSRV9fKi9uZXcgSW5qZWN0aW9uVG9rZW4odHlwZW9mIG5nRGV2TW9kZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbmdEZXZNb2RlID8gJ05nQXN5bmNWYWxpZGF0b3JzJyA6ICcnKTtcbmNvbnN0IEVNQUlMX1JFR0VYUCA9IC9eKD89LnsxLDI1NH0kKSg/PS57MSw2NH1AKVthLXpBLVowLTkhIyQlJicqKy89P15fYHt8fX4tXSsoPzpcXC5bYS16QS1aMC05ISMkJSYnKisvPT9eX2B7fH1+LV0rKSpAW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KD86XFwuW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KSokLztcbmNsYXNzIFZhbGlkYXRvcnMge1xuICBzdGF0aWMgbWluKG1pbikge1xuICAgIHJldHVybiBtaW5WYWxpZGF0b3IobWluKTtcbiAgfVxuICBzdGF0aWMgbWF4KG1heCkge1xuICAgIHJldHVybiBtYXhWYWxpZGF0b3IobWF4KTtcbiAgfVxuICBzdGF0aWMgcmVxdWlyZWQoY29udHJvbCkge1xuICAgIHJldHVybiByZXF1aXJlZFZhbGlkYXRvcihjb250cm9sKTtcbiAgfVxuICBzdGF0aWMgcmVxdWlyZWRUcnVlKGNvbnRyb2wpIHtcbiAgICByZXR1cm4gcmVxdWlyZWRUcnVlVmFsaWRhdG9yKGNvbnRyb2wpO1xuICB9XG4gIHN0YXRpYyBlbWFpbChjb250cm9sKSB7XG4gICAgcmV0dXJuIGVtYWlsVmFsaWRhdG9yKGNvbnRyb2wpO1xuICB9XG4gIHN0YXRpYyBtaW5MZW5ndGgobWluTGVuZ3RoKSB7XG4gICAgcmV0dXJuIG1pbkxlbmd0aFZhbGlkYXRvcihtaW5MZW5ndGgpO1xuICB9XG4gIHN0YXRpYyBtYXhMZW5ndGgobWF4TGVuZ3RoKSB7XG4gICAgcmV0dXJuIG1heExlbmd0aFZhbGlkYXRvcihtYXhMZW5ndGgpO1xuICB9XG4gIHN0YXRpYyBwYXR0ZXJuKHBhdHRlcm4pIHtcbiAgICByZXR1cm4gcGF0dGVyblZhbGlkYXRvcihwYXR0ZXJuKTtcbiAgfVxuICBzdGF0aWMgbnVsbFZhbGlkYXRvcihjb250cm9sKSB7XG4gICAgcmV0dXJuIG51bGxWYWxpZGF0b3IoKTtcbiAgfVxuICBzdGF0aWMgY29tcG9zZSh2YWxpZGF0b3JzKSB7XG4gICAgcmV0dXJuIGNvbXBvc2UodmFsaWRhdG9ycyk7XG4gIH1cbiAgc3RhdGljIGNvbXBvc2VBc3luYyh2YWxpZGF0b3JzKSB7XG4gICAgcmV0dXJuIGNvbXBvc2VBc3luYyh2YWxpZGF0b3JzKTtcbiAgfVxufVxuZnVuY3Rpb24gbWluVmFsaWRhdG9yKG1pbikge1xuICByZXR1cm4gY29udHJvbCA9PiB7XG4gICAgaWYgKGNvbnRyb2wudmFsdWUgPT0gbnVsbCB8fCBtaW4gPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IHZhbHVlID0gcGFyc2VGbG9hdChjb250cm9sLnZhbHVlKTtcbiAgICByZXR1cm4gIWlzTmFOKHZhbHVlKSAmJiB2YWx1ZSA8IG1pbiA/IHtcbiAgICAgICdtaW4nOiB7XG4gICAgICAgICdtaW4nOiBtaW4sXG4gICAgICAgICdhY3R1YWwnOiBjb250cm9sLnZhbHVlXG4gICAgICB9XG4gICAgfSA6IG51bGw7XG4gIH07XG59XG5mdW5jdGlvbiBtYXhWYWxpZGF0b3IobWF4KSB7XG4gIHJldHVybiBjb250cm9sID0+IHtcbiAgICBpZiAoY29udHJvbC52YWx1ZSA9PSBudWxsIHx8IG1heCA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgdmFsdWUgPSBwYXJzZUZsb2F0KGNvbnRyb2wudmFsdWUpO1xuICAgIHJldHVybiAhaXNOYU4odmFsdWUpICYmIHZhbHVlID4gbWF4ID8ge1xuICAgICAgJ21heCc6IHtcbiAgICAgICAgJ21heCc6IG1heCxcbiAgICAgICAgJ2FjdHVhbCc6IGNvbnRyb2wudmFsdWVcbiAgICAgIH1cbiAgICB9IDogbnVsbDtcbiAgfTtcbn1cbmZ1bmN0aW9uIHJlcXVpcmVkVmFsaWRhdG9yKGNvbnRyb2wpIHtcbiAgcmV0dXJuIGlzRW1wdHlJbnB1dFZhbHVlKGNvbnRyb2wudmFsdWUpID8ge1xuICAgICdyZXF1aXJlZCc6IHRydWVcbiAgfSA6IG51bGw7XG59XG5mdW5jdGlvbiByZXF1aXJlZFRydWVWYWxpZGF0b3IoY29udHJvbCkge1xuICByZXR1cm4gY29udHJvbC52YWx1ZSA9PT0gdHJ1ZSA/IG51bGwgOiB7XG4gICAgJ3JlcXVpcmVkJzogdHJ1ZVxuICB9O1xufVxuZnVuY3Rpb24gZW1haWxWYWxpZGF0b3IoY29udHJvbCkge1xuICBpZiAoaXNFbXB0eUlucHV0VmFsdWUoY29udHJvbC52YWx1ZSkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4gRU1BSUxfUkVHRVhQLnRlc3QoY29udHJvbC52YWx1ZSkgPyBudWxsIDoge1xuICAgICdlbWFpbCc6IHRydWVcbiAgfTtcbn1cbmZ1bmN0aW9uIG1pbkxlbmd0aFZhbGlkYXRvcihtaW5MZW5ndGgpIHtcbiAgcmV0dXJuIGNvbnRyb2wgPT4ge1xuICAgIGNvbnN0IGxlbmd0aCA9IGNvbnRyb2wudmFsdWU/Lmxlbmd0aCA/PyBsZW5ndGhPclNpemUoY29udHJvbC52YWx1ZSk7XG4gICAgaWYgKGxlbmd0aCA9PT0gbnVsbCB8fCBsZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gbGVuZ3RoIDwgbWluTGVuZ3RoID8ge1xuICAgICAgJ21pbmxlbmd0aCc6IHtcbiAgICAgICAgJ3JlcXVpcmVkTGVuZ3RoJzogbWluTGVuZ3RoLFxuICAgICAgICAnYWN0dWFsTGVuZ3RoJzogbGVuZ3RoXG4gICAgICB9XG4gICAgfSA6IG51bGw7XG4gIH07XG59XG5mdW5jdGlvbiBtYXhMZW5ndGhWYWxpZGF0b3IobWF4TGVuZ3RoKSB7XG4gIHJldHVybiBjb250cm9sID0+IHtcbiAgICBjb25zdCBsZW5ndGggPSBjb250cm9sLnZhbHVlPy5sZW5ndGggPz8gbGVuZ3RoT3JTaXplKGNvbnRyb2wudmFsdWUpO1xuICAgIGlmIChsZW5ndGggIT09IG51bGwgJiYgbGVuZ3RoID4gbWF4TGVuZ3RoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAnbWF4bGVuZ3RoJzoge1xuICAgICAgICAgICdyZXF1aXJlZExlbmd0aCc6IG1heExlbmd0aCxcbiAgICAgICAgICAnYWN0dWFsTGVuZ3RoJzogbGVuZ3RoXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9O1xufVxuZnVuY3Rpb24gcGF0dGVyblZhbGlkYXRvcihwYXR0ZXJuKSB7XG4gIGlmICghcGF0dGVybikgcmV0dXJuIG51bGxWYWxpZGF0b3I7XG4gIGxldCByZWdleDtcbiAgbGV0IHJlZ2V4U3RyO1xuICBpZiAodHlwZW9mIHBhdHRlcm4gPT09ICdzdHJpbmcnKSB7XG4gICAgcmVnZXhTdHIgPSAnJztcbiAgICBpZiAocGF0dGVybi5jaGFyQXQoMCkgIT09ICdeJykgcmVnZXhTdHIgKz0gJ14nO1xuICAgIHJlZ2V4U3RyICs9IHBhdHRlcm47XG4gICAgaWYgKHBhdHRlcm4uY2hhckF0KHBhdHRlcm4ubGVuZ3RoIC0gMSkgIT09ICckJykgcmVnZXhTdHIgKz0gJyQnO1xuICAgIHJlZ2V4ID0gbmV3IFJlZ0V4cChyZWdleFN0cik7XG4gIH0gZWxzZSB7XG4gICAgcmVnZXhTdHIgPSBwYXR0ZXJuLnRvU3RyaW5nKCk7XG4gICAgcmVnZXggPSBwYXR0ZXJuO1xuICB9XG4gIHJldHVybiBjb250cm9sID0+IHtcbiAgICBpZiAoaXNFbXB0eUlucHV0VmFsdWUoY29udHJvbC52YWx1ZSkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCB2YWx1ZSA9IGNvbnRyb2wudmFsdWU7XG4gICAgcmV0dXJuIHJlZ2V4LnRlc3QodmFsdWUpID8gbnVsbCA6IHtcbiAgICAgICdwYXR0ZXJuJzoge1xuICAgICAgICAncmVxdWlyZWRQYXR0ZXJuJzogcmVnZXhTdHIsXG4gICAgICAgICdhY3R1YWxWYWx1ZSc6IHZhbHVlXG4gICAgICB9XG4gICAgfTtcbiAgfTtcbn1cbmZ1bmN0aW9uIG51bGxWYWxpZGF0b3IoY29udHJvbCkge1xuICByZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIGlzUHJlc2VudChvKSB7XG4gIHJldHVybiBvICE9IG51bGw7XG59XG5mdW5jdGlvbiB0b09ic2VydmFibGUodmFsdWUpIHtcbiAgY29uc3Qgb2JzID0gX2lzUHJvbWlzZSh2YWx1ZSkgPyBmcm9tKHZhbHVlKSA6IHZhbHVlO1xuICBpZiAoKHR5cGVvZiBuZ0Rldk1vZGUgPT09ICd1bmRlZmluZWQnIHx8IG5nRGV2TW9kZSkgJiYgIV9pc1N1YnNjcmliYWJsZShvYnMpKSB7XG4gICAgbGV0IGVycm9yTWVzc2FnZSA9IGBFeHBlY3RlZCBhc3luYyB2YWxpZGF0b3IgdG8gcmV0dXJuIFByb21pc2Ugb3IgT2JzZXJ2YWJsZS5gO1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICBlcnJvck1lc3NhZ2UgKz0gJyBBcmUgeW91IHVzaW5nIGEgc3luY2hyb25vdXMgdmFsaWRhdG9yIHdoZXJlIGFuIGFzeW5jIHZhbGlkYXRvciBpcyBleHBlY3RlZD8nO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgX1J1bnRpbWVFcnJvcigtMTEwMSwgZXJyb3JNZXNzYWdlKTtcbiAgfVxuICByZXR1cm4gb2JzO1xufVxuZnVuY3Rpb24gbWVyZ2VFcnJvcnMoYXJyYXlPZkVycm9ycykge1xuICBsZXQgcmVzID0ge307XG4gIGFycmF5T2ZFcnJvcnMuZm9yRWFjaChlcnJvcnMgPT4ge1xuICAgIHJlcyA9IGVycm9ycyAhPSBudWxsID8ge1xuICAgICAgLi4ucmVzLFxuICAgICAgLi4uZXJyb3JzXG4gICAgfSA6IHJlcztcbiAgfSk7XG4gIHJldHVybiBPYmplY3Qua2V5cyhyZXMpLmxlbmd0aCA9PT0gMCA/IG51bGwgOiByZXM7XG59XG5mdW5jdGlvbiBleGVjdXRlVmFsaWRhdG9ycyhjb250cm9sLCB2YWxpZGF0b3JzKSB7XG4gIHJldHVybiB2YWxpZGF0b3JzLm1hcCh2YWxpZGF0b3IgPT4gdmFsaWRhdG9yKGNvbnRyb2wpKTtcbn1cbmZ1bmN0aW9uIGlzVmFsaWRhdG9yRm4odmFsaWRhdG9yKSB7XG4gIHJldHVybiAhdmFsaWRhdG9yLnZhbGlkYXRlO1xufVxuZnVuY3Rpb24gbm9ybWFsaXplVmFsaWRhdG9ycyh2YWxpZGF0b3JzKSB7XG4gIHJldHVybiB2YWxpZGF0b3JzLm1hcCh2YWxpZGF0b3IgPT4ge1xuICAgIHJldHVybiBpc1ZhbGlkYXRvckZuKHZhbGlkYXRvcikgPyB2YWxpZGF0b3IgOiBjID0+IHZhbGlkYXRvci52YWxpZGF0ZShjKTtcbiAgfSk7XG59XG5mdW5jdGlvbiBjb21wb3NlKHZhbGlkYXRvcnMpIHtcbiAgaWYgKCF2YWxpZGF0b3JzKSByZXR1cm4gbnVsbDtcbiAgY29uc3QgcHJlc2VudFZhbGlkYXRvcnMgPSB2YWxpZGF0b3JzLmZpbHRlcihpc1ByZXNlbnQpO1xuICBpZiAocHJlc2VudFZhbGlkYXRvcnMubGVuZ3RoID09IDApIHJldHVybiBudWxsO1xuICByZXR1cm4gZnVuY3Rpb24gKGNvbnRyb2wpIHtcbiAgICByZXR1cm4gbWVyZ2VFcnJvcnMoZXhlY3V0ZVZhbGlkYXRvcnMoY29udHJvbCwgcHJlc2VudFZhbGlkYXRvcnMpKTtcbiAgfTtcbn1cbmZ1bmN0aW9uIGNvbXBvc2VWYWxpZGF0b3JzKHZhbGlkYXRvcnMpIHtcbiAgcmV0dXJuIHZhbGlkYXRvcnMgIT0gbnVsbCA/IGNvbXBvc2Uobm9ybWFsaXplVmFsaWRhdG9ycyh2YWxpZGF0b3JzKSkgOiBudWxsO1xufVxuZnVuY3Rpb24gY29tcG9zZUFzeW5jKHZhbGlkYXRvcnMpIHtcbiAgaWYgKCF2YWxpZGF0b3JzKSByZXR1cm4gbnVsbDtcbiAgY29uc3QgcHJlc2VudFZhbGlkYXRvcnMgPSB2YWxpZGF0b3JzLmZpbHRlcihpc1ByZXNlbnQpO1xuICBpZiAocHJlc2VudFZhbGlkYXRvcnMubGVuZ3RoID09IDApIHJldHVybiBudWxsO1xuICByZXR1cm4gZnVuY3Rpb24gKGNvbnRyb2wpIHtcbiAgICBjb25zdCBvYnNlcnZhYmxlcyA9IGV4ZWN1dGVWYWxpZGF0b3JzKGNvbnRyb2wsIHByZXNlbnRWYWxpZGF0b3JzKS5tYXAodG9PYnNlcnZhYmxlKTtcbiAgICByZXR1cm4gZm9ya0pvaW4ob2JzZXJ2YWJsZXMpLnBpcGUobWFwKG1lcmdlRXJyb3JzKSk7XG4gIH07XG59XG5mdW5jdGlvbiBjb21wb3NlQXN5bmNWYWxpZGF0b3JzKHZhbGlkYXRvcnMpIHtcbiAgcmV0dXJuIHZhbGlkYXRvcnMgIT0gbnVsbCA/IGNvbXBvc2VBc3luYyhub3JtYWxpemVWYWxpZGF0b3JzKHZhbGlkYXRvcnMpKSA6IG51bGw7XG59XG5mdW5jdGlvbiBtZXJnZVZhbGlkYXRvcnMoY29udHJvbFZhbGlkYXRvcnMsIGRpclZhbGlkYXRvcikge1xuICBpZiAoY29udHJvbFZhbGlkYXRvcnMgPT09IG51bGwpIHJldHVybiBbZGlyVmFsaWRhdG9yXTtcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkoY29udHJvbFZhbGlkYXRvcnMpID8gWy4uLmNvbnRyb2xWYWxpZGF0b3JzLCBkaXJWYWxpZGF0b3JdIDogW2NvbnRyb2xWYWxpZGF0b3JzLCBkaXJWYWxpZGF0b3JdO1xufVxuZnVuY3Rpb24gZ2V0Q29udHJvbFZhbGlkYXRvcnMoY29udHJvbCkge1xuICByZXR1cm4gY29udHJvbC5fcmF3VmFsaWRhdG9ycztcbn1cbmZ1bmN0aW9uIGdldENvbnRyb2xBc3luY1ZhbGlkYXRvcnMoY29udHJvbCkge1xuICByZXR1cm4gY29udHJvbC5fcmF3QXN5bmNWYWxpZGF0b3JzO1xufVxuZnVuY3Rpb24gbWFrZVZhbGlkYXRvcnNBcnJheSh2YWxpZGF0b3JzKSB7XG4gIGlmICghdmFsaWRhdG9ycykgcmV0dXJuIFtdO1xuICByZXR1cm4gQXJyYXkuaXNBcnJheSh2YWxpZGF0b3JzKSA/IHZhbGlkYXRvcnMgOiBbdmFsaWRhdG9yc107XG59XG5mdW5jdGlvbiBoYXNWYWxpZGF0b3IodmFsaWRhdG9ycywgdmFsaWRhdG9yKSB7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KHZhbGlkYXRvcnMpID8gdmFsaWRhdG9ycy5pbmNsdWRlcyh2YWxpZGF0b3IpIDogdmFsaWRhdG9ycyA9PT0gdmFsaWRhdG9yO1xufVxuZnVuY3Rpb24gYWRkVmFsaWRhdG9ycyh2YWxpZGF0b3JzLCBjdXJyZW50VmFsaWRhdG9ycykge1xuICBjb25zdCBjdXJyZW50ID0gbWFrZVZhbGlkYXRvcnNBcnJheShjdXJyZW50VmFsaWRhdG9ycyk7XG4gIGNvbnN0IHZhbGlkYXRvcnNUb0FkZCA9IG1ha2VWYWxpZGF0b3JzQXJyYXkodmFsaWRhdG9ycyk7XG4gIHZhbGlkYXRvcnNUb0FkZC5mb3JFYWNoKHYgPT4ge1xuICAgIGlmICghaGFzVmFsaWRhdG9yKGN1cnJlbnQsIHYpKSB7XG4gICAgICBjdXJyZW50LnB1c2godik7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGN1cnJlbnQ7XG59XG5mdW5jdGlvbiByZW1vdmVWYWxpZGF0b3JzKHZhbGlkYXRvcnMsIGN1cnJlbnRWYWxpZGF0b3JzKSB7XG4gIHJldHVybiBtYWtlVmFsaWRhdG9yc0FycmF5KGN1cnJlbnRWYWxpZGF0b3JzKS5maWx0ZXIodiA9PiAhaGFzVmFsaWRhdG9yKHZhbGlkYXRvcnMsIHYpKTtcbn1cbmNsYXNzIEFic3RyYWN0Q29udHJvbERpcmVjdGl2ZSB7XG4gIGdldCB2YWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5jb250cm9sID8gdGhpcy5jb250cm9sLnZhbHVlIDogbnVsbDtcbiAgfVxuICBnZXQgdmFsaWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29udHJvbCA/IHRoaXMuY29udHJvbC52YWxpZCA6IG51bGw7XG4gIH1cbiAgZ2V0IGludmFsaWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29udHJvbCA/IHRoaXMuY29udHJvbC5pbnZhbGlkIDogbnVsbDtcbiAgfVxuICBnZXQgcGVuZGluZygpIHtcbiAgICByZXR1cm4gdGhpcy5jb250cm9sID8gdGhpcy5jb250cm9sLnBlbmRpbmcgOiBudWxsO1xuICB9XG4gIGdldCBkaXNhYmxlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5jb250cm9sID8gdGhpcy5jb250cm9sLmRpc2FibGVkIDogbnVsbDtcbiAgfVxuICBnZXQgZW5hYmxlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5jb250cm9sID8gdGhpcy5jb250cm9sLmVuYWJsZWQgOiBudWxsO1xuICB9XG4gIGdldCBlcnJvcnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29udHJvbCA/IHRoaXMuY29udHJvbC5lcnJvcnMgOiBudWxsO1xuICB9XG4gIGdldCBwcmlzdGluZSgpIHtcbiAgICByZXR1cm4gdGhpcy5jb250cm9sID8gdGhpcy5jb250cm9sLnByaXN0aW5lIDogbnVsbDtcbiAgfVxuICBnZXQgZGlydHkoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29udHJvbCA/IHRoaXMuY29udHJvbC5kaXJ0eSA6IG51bGw7XG4gIH1cbiAgZ2V0IHRvdWNoZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29udHJvbCA/IHRoaXMuY29udHJvbC50b3VjaGVkIDogbnVsbDtcbiAgfVxuICBnZXQgc3RhdHVzKCkge1xuICAgIHJldHVybiB0aGlzLmNvbnRyb2wgPyB0aGlzLmNvbnRyb2wuc3RhdHVzIDogbnVsbDtcbiAgfVxuICBnZXQgdW50b3VjaGVkKCkge1xuICAgIHJldHVybiB0aGlzLmNvbnRyb2wgPyB0aGlzLmNvbnRyb2wudW50b3VjaGVkIDogbnVsbDtcbiAgfVxuICBnZXQgc3RhdHVzQ2hhbmdlcygpIHtcbiAgICByZXR1cm4gdGhpcy5jb250cm9sID8gdGhpcy5jb250cm9sLnN0YXR1c0NoYW5nZXMgOiBudWxsO1xuICB9XG4gIGdldCB2YWx1ZUNoYW5nZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29udHJvbCA/IHRoaXMuY29udHJvbC52YWx1ZUNoYW5nZXMgOiBudWxsO1xuICB9XG4gIGdldCBwYXRoKCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIF9jb21wb3NlZFZhbGlkYXRvckZuO1xuICBfY29tcG9zZWRBc3luY1ZhbGlkYXRvckZuO1xuICBfcmF3VmFsaWRhdG9ycyA9IFtdO1xuICBfcmF3QXN5bmNWYWxpZGF0b3JzID0gW107XG4gIF9zZXRWYWxpZGF0b3JzKHZhbGlkYXRvcnMpIHtcbiAgICB0aGlzLl9yYXdWYWxpZGF0b3JzID0gdmFsaWRhdG9ycyB8fCBbXTtcbiAgICB0aGlzLl9jb21wb3NlZFZhbGlkYXRvckZuID0gY29tcG9zZVZhbGlkYXRvcnModGhpcy5fcmF3VmFsaWRhdG9ycyk7XG4gIH1cbiAgX3NldEFzeW5jVmFsaWRhdG9ycyh2YWxpZGF0b3JzKSB7XG4gICAgdGhpcy5fcmF3QXN5bmNWYWxpZGF0b3JzID0gdmFsaWRhdG9ycyB8fCBbXTtcbiAgICB0aGlzLl9jb21wb3NlZEFzeW5jVmFsaWRhdG9yRm4gPSBjb21wb3NlQXN5bmNWYWxpZGF0b3JzKHRoaXMuX3Jhd0FzeW5jVmFsaWRhdG9ycyk7XG4gIH1cbiAgZ2V0IHZhbGlkYXRvcigpIHtcbiAgICByZXR1cm4gdGhpcy5fY29tcG9zZWRWYWxpZGF0b3JGbiB8fCBudWxsO1xuICB9XG4gIGdldCBhc3luY1ZhbGlkYXRvcigpIHtcbiAgICByZXR1cm4gdGhpcy5fY29tcG9zZWRBc3luY1ZhbGlkYXRvckZuIHx8IG51bGw7XG4gIH1cbiAgX29uRGVzdHJveUNhbGxiYWNrcyA9IFtdO1xuICBfcmVnaXN0ZXJPbkRlc3Ryb3koZm4pIHtcbiAgICB0aGlzLl9vbkRlc3Ryb3lDYWxsYmFja3MucHVzaChmbik7XG4gIH1cbiAgX2ludm9rZU9uRGVzdHJveUNhbGxiYWNrcygpIHtcbiAgICB0aGlzLl9vbkRlc3Ryb3lDYWxsYmFja3MuZm9yRWFjaChmbiA9PiBmbigpKTtcbiAgICB0aGlzLl9vbkRlc3Ryb3lDYWxsYmFja3MgPSBbXTtcbiAgfVxuICByZXNldCh2YWx1ZSA9IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuY29udHJvbD8ucmVzZXQodmFsdWUpO1xuICB9XG4gIGhhc0Vycm9yKGVycm9yQ29kZSwgcGF0aCkge1xuICAgIHJldHVybiB0aGlzLmNvbnRyb2wgPyB0aGlzLmNvbnRyb2wuaGFzRXJyb3IoZXJyb3JDb2RlLCBwYXRoKSA6IGZhbHNlO1xuICB9XG4gIGdldEVycm9yKGVycm9yQ29kZSwgcGF0aCkge1xuICAgIHJldHVybiB0aGlzLmNvbnRyb2wgPyB0aGlzLmNvbnRyb2wuZ2V0RXJyb3IoZXJyb3JDb2RlLCBwYXRoKSA6IG51bGw7XG4gIH1cbn1cbmNsYXNzIENvbnRyb2xDb250YWluZXIgZXh0ZW5kcyBBYnN0cmFjdENvbnRyb2xEaXJlY3RpdmUge1xuICBuYW1lO1xuICBnZXQgZm9ybURpcmVjdGl2ZSgpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBnZXQgcGF0aCgpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuY2xhc3MgTmdDb250cm9sIGV4dGVuZHMgQWJzdHJhY3RDb250cm9sRGlyZWN0aXZlIHtcbiAgX3BhcmVudCA9IG51bGw7XG4gIG5hbWUgPSBudWxsO1xuICB2YWx1ZUFjY2Vzc29yID0gbnVsbDtcbn1cbmNsYXNzIEFic3RyYWN0Q29udHJvbFN0YXR1cyB7XG4gIF9jZDtcbiAgY29uc3RydWN0b3IoY2QpIHtcbiAgICB0aGlzLl9jZCA9IGNkO1xuICB9XG4gIGdldCBpc1RvdWNoZWQoKSB7XG4gICAgdGhpcy5fY2Q/LmNvbnRyb2w/Ll90b3VjaGVkPy4oKTtcbiAgICByZXR1cm4gISF0aGlzLl9jZD8uY29udHJvbD8udG91Y2hlZDtcbiAgfVxuICBnZXQgaXNVbnRvdWNoZWQoKSB7XG4gICAgcmV0dXJuICEhdGhpcy5fY2Q/LmNvbnRyb2w/LnVudG91Y2hlZDtcbiAgfVxuICBnZXQgaXNQcmlzdGluZSgpIHtcbiAgICB0aGlzLl9jZD8uY29udHJvbD8uX3ByaXN0aW5lPy4oKTtcbiAgICByZXR1cm4gISF0aGlzLl9jZD8uY29udHJvbD8ucHJpc3RpbmU7XG4gIH1cbiAgZ2V0IGlzRGlydHkoKSB7XG4gICAgcmV0dXJuICEhdGhpcy5fY2Q/LmNvbnRyb2w/LmRpcnR5O1xuICB9XG4gIGdldCBpc1ZhbGlkKCkge1xuICAgIHRoaXMuX2NkPy5jb250cm9sPy5fc3RhdHVzPy4oKTtcbiAgICByZXR1cm4gISF0aGlzLl9jZD8uY29udHJvbD8udmFsaWQ7XG4gIH1cbiAgZ2V0IGlzSW52YWxpZCgpIHtcbiAgICByZXR1cm4gISF0aGlzLl9jZD8uY29udHJvbD8uaW52YWxpZDtcbiAgfVxuICBnZXQgaXNQZW5kaW5nKCkge1xuICAgIHJldHVybiAhIXRoaXMuX2NkPy5jb250cm9sPy5wZW5kaW5nO1xuICB9XG4gIGdldCBpc1N1Ym1pdHRlZCgpIHtcbiAgICB0aGlzLl9jZD8uX3N1Ym1pdHRlZD8uKCk7XG4gICAgcmV0dXJuICEhdGhpcy5fY2Q/LnN1Ym1pdHRlZDtcbiAgfVxufVxuY29uc3QgbmdDb250cm9sU3RhdHVzSG9zdCA9IHtcbiAgJ1tjbGFzcy5uZy11bnRvdWNoZWRdJzogJ2lzVW50b3VjaGVkJyxcbiAgJ1tjbGFzcy5uZy10b3VjaGVkXSc6ICdpc1RvdWNoZWQnLFxuICAnW2NsYXNzLm5nLXByaXN0aW5lXSc6ICdpc1ByaXN0aW5lJyxcbiAgJ1tjbGFzcy5uZy1kaXJ0eV0nOiAnaXNEaXJ0eScsXG4gICdbY2xhc3MubmctdmFsaWRdJzogJ2lzVmFsaWQnLFxuICAnW2NsYXNzLm5nLWludmFsaWRdJzogJ2lzSW52YWxpZCcsXG4gICdbY2xhc3MubmctcGVuZGluZ10nOiAnaXNQZW5kaW5nJ1xufTtcbmxldCBOZ0NvbnRyb2xTdGF0dXMgPSAvKiNfX1BVUkVfXyovKCgpID0+IHtcbiAgY2xhc3MgTmdDb250cm9sU3RhdHVzIGV4dGVuZHMgQWJzdHJhY3RDb250cm9sU3RhdHVzIHtcbiAgICBjb25zdHJ1Y3RvcihjZCkge1xuICAgICAgc3VwZXIoY2QpO1xuICAgIH1cbiAgICBzdGF0aWMgybVmYWMgPSBmdW5jdGlvbiBOZ0NvbnRyb2xTdGF0dXNfRmFjdG9yeShfX25nRmFjdG9yeVR5cGVfXykge1xuICAgICAgcmV0dXJuIG5ldyAoX19uZ0ZhY3RvcnlUeXBlX18gfHwgTmdDb250cm9sU3RhdHVzKShpMC7Jtcm1ZGlyZWN0aXZlSW5qZWN0KE5nQ29udHJvbCwgMikpO1xuICAgIH07XG4gICAgc3RhdGljIMm1ZGlyID0gLyogQF9fUFVSRV9fICovaTAuybXJtWRlZmluZURpcmVjdGl2ZSh7XG4gICAgICB0eXBlOiBOZ0NvbnRyb2xTdGF0dXMsXG4gICAgICBzZWxlY3RvcnM6IFtbXCJcIiwgXCJmb3JtQ29udHJvbE5hbWVcIiwgXCJcIl0sIFtcIlwiLCBcIm5nTW9kZWxcIiwgXCJcIl0sIFtcIlwiLCBcImZvcm1Db250cm9sXCIsIFwiXCJdXSxcbiAgICAgIGhvc3RWYXJzOiAxNCxcbiAgICAgIGhvc3RCaW5kaW5nczogZnVuY3Rpb24gTmdDb250cm9sU3RhdHVzX0hvc3RCaW5kaW5ncyhyZiwgY3R4KSB7XG4gICAgICAgIGlmIChyZiAmIDIpIHtcbiAgICAgICAgICBpMC7Jtcm1Y2xhc3NQcm9wKFwibmctdW50b3VjaGVkXCIsIGN0eC5pc1VudG91Y2hlZCkoXCJuZy10b3VjaGVkXCIsIGN0eC5pc1RvdWNoZWQpKFwibmctcHJpc3RpbmVcIiwgY3R4LmlzUHJpc3RpbmUpKFwibmctZGlydHlcIiwgY3R4LmlzRGlydHkpKFwibmctdmFsaWRcIiwgY3R4LmlzVmFsaWQpKFwibmctaW52YWxpZFwiLCBjdHguaXNJbnZhbGlkKShcIm5nLXBlbmRpbmdcIiwgY3R4LmlzUGVuZGluZyk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBzdGFuZGFsb25lOiBmYWxzZSxcbiAgICAgIGZlYXR1cmVzOiBbaTAuybXJtUluaGVyaXREZWZpbml0aW9uRmVhdHVyZV1cbiAgICB9KTtcbiAgfVxuICByZXR1cm4gTmdDb250cm9sU3RhdHVzO1xufSkoKTtcbi8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICAodHlwZW9mIG5nRGV2TW9kZSA9PT0gXCJ1bmRlZmluZWRcIiB8fCBuZ0Rldk1vZGUpICYmIHZvaWQgMDtcbn0pKCk7XG5sZXQgTmdDb250cm9sU3RhdHVzR3JvdXAgPSAvKiNfX1BVUkVfXyovKCgpID0+IHtcbiAgY2xhc3MgTmdDb250cm9sU3RhdHVzR3JvdXAgZXh0ZW5kcyBBYnN0cmFjdENvbnRyb2xTdGF0dXMge1xuICAgIGNvbnN0cnVjdG9yKGNkKSB7XG4gICAgICBzdXBlcihjZCk7XG4gICAgfVxuICAgIHN0YXRpYyDJtWZhYyA9IGZ1bmN0aW9uIE5nQ29udHJvbFN0YXR1c0dyb3VwX0ZhY3RvcnkoX19uZ0ZhY3RvcnlUeXBlX18pIHtcbiAgICAgIHJldHVybiBuZXcgKF9fbmdGYWN0b3J5VHlwZV9fIHx8IE5nQ29udHJvbFN0YXR1c0dyb3VwKShpMC7Jtcm1ZGlyZWN0aXZlSW5qZWN0KENvbnRyb2xDb250YWluZXIsIDEwKSk7XG4gICAgfTtcbiAgICBzdGF0aWMgybVkaXIgPSAvKiBAX19QVVJFX18gKi9pMC7Jtcm1ZGVmaW5lRGlyZWN0aXZlKHtcbiAgICAgIHR5cGU6IE5nQ29udHJvbFN0YXR1c0dyb3VwLFxuICAgICAgc2VsZWN0b3JzOiBbW1wiXCIsIFwiZm9ybUdyb3VwTmFtZVwiLCBcIlwiXSwgW1wiXCIsIFwiZm9ybUFycmF5TmFtZVwiLCBcIlwiXSwgW1wiXCIsIFwibmdNb2RlbEdyb3VwXCIsIFwiXCJdLCBbXCJcIiwgXCJmb3JtR3JvdXBcIiwgXCJcIl0sIFtcIlwiLCBcImZvcm1BcnJheVwiLCBcIlwiXSwgW1wiZm9ybVwiLCAzLCBcIm5nTm9Gb3JtXCIsIFwiXCJdLCBbXCJcIiwgXCJuZ0Zvcm1cIiwgXCJcIl1dLFxuICAgICAgaG9zdFZhcnM6IDE2LFxuICAgICAgaG9zdEJpbmRpbmdzOiBmdW5jdGlvbiBOZ0NvbnRyb2xTdGF0dXNHcm91cF9Ib3N0QmluZGluZ3MocmYsIGN0eCkge1xuICAgICAgICBpZiAocmYgJiAyKSB7XG4gICAgICAgICAgaTAuybXJtWNsYXNzUHJvcChcIm5nLXVudG91Y2hlZFwiLCBjdHguaXNVbnRvdWNoZWQpKFwibmctdG91Y2hlZFwiLCBjdHguaXNUb3VjaGVkKShcIm5nLXByaXN0aW5lXCIsIGN0eC5pc1ByaXN0aW5lKShcIm5nLWRpcnR5XCIsIGN0eC5pc0RpcnR5KShcIm5nLXZhbGlkXCIsIGN0eC5pc1ZhbGlkKShcIm5nLWludmFsaWRcIiwgY3R4LmlzSW52YWxpZCkoXCJuZy1wZW5kaW5nXCIsIGN0eC5pc1BlbmRpbmcpKFwibmctc3VibWl0dGVkXCIsIGN0eC5pc1N1Ym1pdHRlZCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBzdGFuZGFsb25lOiBmYWxzZSxcbiAgICAgIGZlYXR1cmVzOiBbaTAuybXJtUluaGVyaXREZWZpbml0aW9uRmVhdHVyZV1cbiAgICB9KTtcbiAgfVxuICByZXR1cm4gTmdDb250cm9sU3RhdHVzR3JvdXA7XG59KSgpO1xuLyojX19QVVJFX18qLygoKSA9PiB7XG4gICh0eXBlb2YgbmdEZXZNb2RlID09PSBcInVuZGVmaW5lZFwiIHx8IG5nRGV2TW9kZSkgJiYgdm9pZCAwO1xufSkoKTtcbmNvbnN0IGZvcm1Db250cm9sTmFtZUV4YW1wbGUgPSBgXG4gIDxkaXYgW2Zvcm1Hcm91cF09XCJteUdyb3VwXCI+XG4gICAgPGlucHV0IGZvcm1Db250cm9sTmFtZT1cImZpcnN0TmFtZVwiPlxuICA8L2Rpdj5cblxuICBJbiB5b3VyIGNsYXNzOlxuXG4gIHRoaXMubXlHcm91cCA9IG5ldyBGb3JtR3JvdXAoe1xuICAgICAgZmlyc3ROYW1lOiBuZXcgRm9ybUNvbnRyb2woKVxuICB9KTtgO1xuY29uc3QgZm9ybUdyb3VwTmFtZUV4YW1wbGUgPSBgXG4gIDxkaXYgW2Zvcm1Hcm91cF09XCJteUdyb3VwXCI+XG4gICAgICA8ZGl2IGZvcm1Hcm91cE5hbWU9XCJwZXJzb25cIj5cbiAgICAgICAgPGlucHV0IGZvcm1Db250cm9sTmFtZT1cImZpcnN0TmFtZVwiPlxuICAgICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIEluIHlvdXIgY2xhc3M6XG5cbiAgdGhpcy5teUdyb3VwID0gbmV3IEZvcm1Hcm91cCh7XG4gICAgICBwZXJzb246IG5ldyBGb3JtR3JvdXAoeyBmaXJzdE5hbWU6IG5ldyBGb3JtQ29udHJvbCgpIH0pXG4gIH0pO2A7XG5jb25zdCBmb3JtQXJyYXlOYW1lRXhhbXBsZSA9IGBcbiAgPGRpdiBbZm9ybUdyb3VwXT1cIm15R3JvdXBcIj5cbiAgICA8ZGl2IGZvcm1BcnJheU5hbWU9XCJjaXRpZXNcIj5cbiAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGNpdHkgb2YgY2l0eUFycmF5LmNvbnRyb2xzOyBpbmRleCBhcyBpXCI+XG4gICAgICAgIDxpbnB1dCBbZm9ybUNvbnRyb2xOYW1lXT1cImlcIj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICBJbiB5b3VyIGNsYXNzOlxuXG4gIHRoaXMuY2l0eUFycmF5ID0gbmV3IEZvcm1BcnJheShbbmV3IEZvcm1Db250cm9sKCdTRicpXSk7XG4gIHRoaXMubXlHcm91cCA9IG5ldyBGb3JtR3JvdXAoe1xuICAgIGNpdGllczogdGhpcy5jaXR5QXJyYXlcbiAgfSk7YDtcbmNvbnN0IG5nTW9kZWxHcm91cEV4YW1wbGUgPSBgXG4gIDxmb3JtPlxuICAgICAgPGRpdiBuZ01vZGVsR3JvdXA9XCJwZXJzb25cIj5cbiAgICAgICAgPGlucHV0IFsobmdNb2RlbCldPVwicGVyc29uLm5hbWVcIiBuYW1lPVwiZmlyc3ROYW1lXCI+XG4gICAgICA8L2Rpdj5cbiAgPC9mb3JtPmA7XG5jb25zdCBuZ01vZGVsV2l0aEZvcm1Hcm91cEV4YW1wbGUgPSBgXG4gIDxkaXYgW2Zvcm1Hcm91cF09XCJteUdyb3VwXCI+XG4gICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwiZmlyc3ROYW1lXCI+XG4gICAgICA8aW5wdXQgWyhuZ01vZGVsKV09XCJzaG93TW9yZUNvbnRyb2xzXCIgW25nTW9kZWxPcHRpb25zXT1cIntzdGFuZGFsb25lOiB0cnVlfVwiPlxuICA8L2Rpdj5cbmA7XG5jb25zdCBWRVJTSU9OID0gLyogQF9fUFVSRV9fICovbmV3IFZlcnNpb24oJzIxLjIuNCcpO1xuZnVuY3Rpb24gY29udHJvbFBhcmVudEV4Y2VwdGlvbihuYW1lT3JJbmRleCkge1xuICByZXR1cm4gbmV3IF9SdW50aW1lRXJyb3IoMTA1MCwgYGZvcm1Db250cm9sTmFtZSBtdXN0IGJlIHVzZWQgd2l0aCBhIHBhcmVudCBmb3JtR3JvdXAgb3IgZm9ybUFycmF5IGRpcmVjdGl2ZS4gWW91J2xsIHdhbnQgdG8gYWRkIGEgZm9ybUdyb3VwL2Zvcm1BcnJheVxuICAgICAgZGlyZWN0aXZlIGFuZCBwYXNzIGl0IGFuIGV4aXN0aW5nIEZvcm1Hcm91cC9Gb3JtQXJyYXkgaW5zdGFuY2UgKHlvdSBjYW4gY3JlYXRlIG9uZSBpbiB5b3VyIGNsYXNzKS5cblxuICAgICAgJHtkZXNjcmliZUZvcm1Db250cm9sKG5hbWVPckluZGV4KX1cblxuICAgIEV4YW1wbGU6XG5cbiAgICAke2Zvcm1Db250cm9sTmFtZUV4YW1wbGV9YCk7XG59XG5mdW5jdGlvbiBkZXNjcmliZUZvcm1Db250cm9sKG5hbWVPckluZGV4KSB7XG4gIGlmIChuYW1lT3JJbmRleCA9PSBudWxsIHx8IG5hbWVPckluZGV4ID09PSAnJykge1xuICAgIHJldHVybiAnJztcbiAgfVxuICBjb25zdCB2YWx1ZVR5cGUgPSB0eXBlb2YgbmFtZU9ySW5kZXggPT09ICdzdHJpbmcnID8gJ25hbWUnIDogJ2luZGV4JztcbiAgcmV0dXJuIGBBZmZlY3RlZCBGb3JtIENvbnRyb2wgJHt2YWx1ZVR5cGV9OiBcIiR7bmFtZU9ySW5kZXh9XCJgO1xufVxuZnVuY3Rpb24gbmdNb2RlbEdyb3VwRXhjZXB0aW9uKCkge1xuICByZXR1cm4gbmV3IF9SdW50aW1lRXJyb3IoMTA1MSwgYGZvcm1Db250cm9sTmFtZSBjYW5ub3QgYmUgdXNlZCB3aXRoIGFuIG5nTW9kZWxHcm91cCBwYXJlbnQuIEl0IGlzIG9ubHkgY29tcGF0aWJsZSB3aXRoIHBhcmVudHNcbiAgICAgIHRoYXQgYWxzbyBoYXZlIGEgXCJmb3JtXCIgcHJlZml4OiBmb3JtR3JvdXBOYW1lLCBmb3JtQXJyYXlOYW1lLCBvciBmb3JtR3JvdXAuXG5cbiAgICAgIE9wdGlvbiAxOiAgVXBkYXRlIHRoZSBwYXJlbnQgdG8gYmUgZm9ybUdyb3VwTmFtZSAocmVhY3RpdmUgZm9ybSBzdHJhdGVneSlcblxuICAgICAgJHtmb3JtR3JvdXBOYW1lRXhhbXBsZX1cblxuICAgICAgT3B0aW9uIDI6IFVzZSBuZ01vZGVsIGluc3RlYWQgb2YgZm9ybUNvbnRyb2xOYW1lICh0ZW1wbGF0ZS1kcml2ZW4gc3RyYXRlZ3kpXG5cbiAgICAgICR7bmdNb2RlbEdyb3VwRXhhbXBsZX1gKTtcbn1cbmZ1bmN0aW9uIG1pc3NpbmdGb3JtRXhjZXB0aW9uKCkge1xuICByZXR1cm4gbmV3IF9SdW50aW1lRXJyb3IoMTA1MiwgYGZvcm1Hcm91cCBleHBlY3RzIGEgRm9ybUdyb3VwIGluc3RhbmNlLiBQbGVhc2UgcGFzcyBvbmUgaW4uXG5cbiAgICAgIEV4YW1wbGU6XG5cbiAgICAgICR7Zm9ybUNvbnRyb2xOYW1lRXhhbXBsZX1gKTtcbn1cbmZ1bmN0aW9uIGdyb3VwUGFyZW50RXhjZXB0aW9uKCkge1xuICByZXR1cm4gbmV3IF9SdW50aW1lRXJyb3IoMTA1MywgYGZvcm1Hcm91cE5hbWUgbXVzdCBiZSB1c2VkIHdpdGggYSBwYXJlbnQgZm9ybUdyb3VwIGRpcmVjdGl2ZS4gIFlvdSdsbCB3YW50IHRvIGFkZCBhIGZvcm1Hcm91cFxuICAgIGRpcmVjdGl2ZSBhbmQgcGFzcyBpdCBhbiBleGlzdGluZyBGb3JtR3JvdXAgaW5zdGFuY2UgKHlvdSBjYW4gY3JlYXRlIG9uZSBpbiB5b3VyIGNsYXNzKS5cblxuICAgIEV4YW1wbGU6XG5cbiAgICAke2Zvcm1Hcm91cE5hbWVFeGFtcGxlfWApO1xufVxuZnVuY3Rpb24gYXJyYXlQYXJlbnRFeGNlcHRpb24oKSB7XG4gIHJldHVybiBuZXcgX1J1bnRpbWVFcnJvcigxMDU0LCBgZm9ybUFycmF5TmFtZSBtdXN0IGJlIHVzZWQgd2l0aCBhIHBhcmVudCBmb3JtR3JvdXAgZGlyZWN0aXZlLiAgWW91J2xsIHdhbnQgdG8gYWRkIGEgZm9ybUdyb3VwXG4gICAgICBkaXJlY3RpdmUgYW5kIHBhc3MgaXQgYW4gZXhpc3RpbmcgRm9ybUdyb3VwIGluc3RhbmNlICh5b3UgY2FuIGNyZWF0ZSBvbmUgaW4geW91ciBjbGFzcykuXG5cbiAgICAgIEV4YW1wbGU6XG5cbiAgICAgICR7Zm9ybUFycmF5TmFtZUV4YW1wbGV9YCk7XG59XG5jb25zdCBkaXNhYmxlZEF0dHJXYXJuaW5nID0gYFxuICBJdCBsb29rcyBsaWtlIHlvdSdyZSB1c2luZyB0aGUgZGlzYWJsZWQgYXR0cmlidXRlIHdpdGggYSByZWFjdGl2ZSBmb3JtIGRpcmVjdGl2ZS4gSWYgeW91IHNldCBkaXNhYmxlZCB0byB0cnVlXG4gIHdoZW4geW91IHNldCB1cCB0aGlzIGNvbnRyb2wgaW4geW91ciBjb21wb25lbnQgY2xhc3MsIHRoZSBkaXNhYmxlZCBhdHRyaWJ1dGUgd2lsbCBhY3R1YWxseSBiZSBzZXQgaW4gdGhlIERPTSBmb3JcbiAgeW91LiBXZSByZWNvbW1lbmQgdXNpbmcgdGhpcyBhcHByb2FjaCB0byBhdm9pZCAnY2hhbmdlZCBhZnRlciBjaGVja2VkJyBlcnJvcnMuXG5cbiAgRXhhbXBsZTpcbiAgLy8gU3BlY2lmeSB0aGUgXFxgZGlzYWJsZWRcXGAgcHJvcGVydHkgYXQgY29udHJvbCBjcmVhdGlvbiB0aW1lOlxuICBmb3JtID0gbmV3IEZvcm1Hcm91cCh7XG4gICAgZmlyc3Q6IG5ldyBGb3JtQ29udHJvbCh7dmFsdWU6ICdOYW5jeScsIGRpc2FibGVkOiB0cnVlfSwgVmFsaWRhdG9ycy5yZXF1aXJlZCksXG4gICAgbGFzdDogbmV3IEZvcm1Db250cm9sKCdEcmV3JywgVmFsaWRhdG9ycy5yZXF1aXJlZClcbiAgfSk7XG5cbiAgLy8gQ29udHJvbHMgY2FuIGFsc28gYmUgZW5hYmxlZC9kaXNhYmxlZCBhZnRlciBjcmVhdGlvbjpcbiAgZm9ybS5nZXQoJ2ZpcnN0Jyk/LmVuYWJsZSgpO1xuICBmb3JtLmdldCgnbGFzdCcpPy5kaXNhYmxlKCk7XG5gO1xuY29uc3QgYXN5bmNWYWxpZGF0b3JzRHJvcHBlZFdpdGhPcHRzV2FybmluZyA9IGBcbiAgSXQgbG9va3MgbGlrZSB5b3UncmUgY29uc3RydWN0aW5nIHVzaW5nIGEgRm9ybUNvbnRyb2wgd2l0aCBib3RoIGFuIG9wdGlvbnMgYXJndW1lbnQgYW5kIGFuXG4gIGFzeW5jIHZhbGlkYXRvcnMgYXJndW1lbnQuIE1peGluZyB0aGVzZSBhcmd1bWVudHMgd2lsbCBjYXVzZSB5b3VyIGFzeW5jIHZhbGlkYXRvcnMgdG8gYmUgZHJvcHBlZC5cbiAgWW91IHNob3VsZCBlaXRoZXIgcHV0IGFsbCB5b3VyIHZhbGlkYXRvcnMgaW4gdGhlIG9wdGlvbnMgb2JqZWN0LCBvciBpbiBzZXBhcmF0ZSB2YWxpZGF0b3JzXG4gIGFyZ3VtZW50cy4gRm9yIGV4YW1wbGU6XG5cbiAgLy8gVXNpbmcgdmFsaWRhdG9ycyBhcmd1bWVudHNcbiAgZmMgPSBuZXcgRm9ybUNvbnRyb2woNDIsIFZhbGlkYXRvcnMucmVxdWlyZWQsIG15QXN5bmNWYWxpZGF0b3IpO1xuXG4gIC8vIFVzaW5nIEFic3RyYWN0Q29udHJvbE9wdGlvbnNcbiAgZmMgPSBuZXcgRm9ybUNvbnRyb2woNDIsIHt2YWxpZGF0b3JzOiBWYWxpZGF0b3JzLnJlcXVpcmVkLCBhc3luY1ZhbGlkYXRvcnM6IG15QVZ9KTtcblxuICAvLyBEbyBOT1QgbWl4IHRoZW06IGFzeW5jIHZhbGlkYXRvcnMgd2lsbCBiZSBkcm9wcGVkIVxuICBmYyA9IG5ldyBGb3JtQ29udHJvbCg0Miwge3ZhbGlkYXRvcnM6IFZhbGlkYXRvcnMucmVxdWlyZWR9LCAvKiBPb3BzISAqLyBteUFzeW5jVmFsaWRhdG9yKTtcbmA7XG5mdW5jdGlvbiBuZ01vZGVsV2FybmluZyhkaXJlY3RpdmVOYW1lKSB7XG4gIGNvbnN0IHZlcnNpb25TdWJEb21haW4gPSBWRVJTSU9OLm1ham9yICE9PSAnMCcgPyBgdiR7VkVSU0lPTi5tYWpvcn0uYCA6ICcnO1xuICByZXR1cm4gYFxuICBJdCBsb29rcyBsaWtlIHlvdSdyZSB1c2luZyBuZ01vZGVsIG9uIHRoZSBzYW1lIGZvcm0gZmllbGQgYXMgJHtkaXJlY3RpdmVOYW1lfS5cbiAgU3VwcG9ydCBmb3IgdXNpbmcgdGhlIG5nTW9kZWwgaW5wdXQgcHJvcGVydHkgYW5kIG5nTW9kZWxDaGFuZ2UgZXZlbnQgd2l0aFxuICByZWFjdGl2ZSBmb3JtIGRpcmVjdGl2ZXMgaGFzIGJlZW4gZGVwcmVjYXRlZCBpbiBBbmd1bGFyIHY2IGFuZCB3aWxsIGJlIHJlbW92ZWRcbiAgaW4gYSBmdXR1cmUgdmVyc2lvbiBvZiBBbmd1bGFyLlxuXG4gIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoaXMsIHNlZSBvdXIgQVBJIGRvY3MgaGVyZTpcbiAgaHR0cHM6Ly8ke3ZlcnNpb25TdWJEb21haW59YW5ndWxhci5kZXYvYXBpL2Zvcm1zLyR7ZGlyZWN0aXZlTmFtZSA9PT0gJ2Zvcm1Db250cm9sJyA/ICdGb3JtQ29udHJvbERpcmVjdGl2ZScgOiAnRm9ybUNvbnRyb2xOYW1lJ31cbiAgYDtcbn1cbmZ1bmN0aW9uIGRlc2NyaWJlS2V5KGlzRm9ybUdyb3VwLCBrZXkpIHtcbiAgcmV0dXJuIGlzRm9ybUdyb3VwID8gYHdpdGggbmFtZTogJyR7a2V5fSdgIDogYGF0IGluZGV4OiAke2tleX1gO1xufVxuZnVuY3Rpb24gbm9Db250cm9sc0Vycm9yKGlzRm9ybUdyb3VwKSB7XG4gIHJldHVybiBgXG4gICAgVGhlcmUgYXJlIG5vIGZvcm0gY29udHJvbHMgcmVnaXN0ZXJlZCB3aXRoIHRoaXMgJHtpc0Zvcm1Hcm91cCA/ICdncm91cCcgOiAnYXJyYXknfSB5ZXQuIElmIHlvdSdyZSB1c2luZyBuZ01vZGVsLFxuICAgIHlvdSBtYXkgd2FudCB0byBjaGVjayBuZXh0IHRpY2sgKGUuZy4gdXNlIHNldFRpbWVvdXQpLlxuICBgO1xufVxuZnVuY3Rpb24gbWlzc2luZ0NvbnRyb2xFcnJvcihpc0Zvcm1Hcm91cCwga2V5KSB7XG4gIHJldHVybiBgQ2Fubm90IGZpbmQgZm9ybSBjb250cm9sICR7ZGVzY3JpYmVLZXkoaXNGb3JtR3JvdXAsIGtleSl9YDtcbn1cbmZ1bmN0aW9uIG1pc3NpbmdDb250cm9sVmFsdWVFcnJvcihpc0Zvcm1Hcm91cCwga2V5KSB7XG4gIHJldHVybiBgTXVzdCBzdXBwbHkgYSB2YWx1ZSBmb3IgZm9ybSBjb250cm9sICR7ZGVzY3JpYmVLZXkoaXNGb3JtR3JvdXAsIGtleSl9YDtcbn1cbmNvbnN0IFZBTElEID0gJ1ZBTElEJztcbmNvbnN0IElOVkFMSUQgPSAnSU5WQUxJRCc7XG5jb25zdCBQRU5ESU5HID0gJ1BFTkRJTkcnO1xuY29uc3QgRElTQUJMRUQgPSAnRElTQUJMRUQnO1xuY2xhc3MgQ29udHJvbEV2ZW50IHt9XG5jbGFzcyBWYWx1ZUNoYW5nZUV2ZW50IGV4dGVuZHMgQ29udHJvbEV2ZW50IHtcbiAgdmFsdWU7XG4gIHNvdXJjZTtcbiAgY29uc3RydWN0b3IodmFsdWUsIHNvdXJjZSkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMuc291cmNlID0gc291cmNlO1xuICB9XG59XG5jbGFzcyBQcmlzdGluZUNoYW5nZUV2ZW50IGV4dGVuZHMgQ29udHJvbEV2ZW50IHtcbiAgcHJpc3RpbmU7XG4gIHNvdXJjZTtcbiAgY29uc3RydWN0b3IocHJpc3RpbmUsIHNvdXJjZSkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5wcmlzdGluZSA9IHByaXN0aW5lO1xuICAgIHRoaXMuc291cmNlID0gc291cmNlO1xuICB9XG59XG5jbGFzcyBUb3VjaGVkQ2hhbmdlRXZlbnQgZXh0ZW5kcyBDb250cm9sRXZlbnQge1xuICB0b3VjaGVkO1xuICBzb3VyY2U7XG4gIGNvbnN0cnVjdG9yKHRvdWNoZWQsIHNvdXJjZSkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy50b3VjaGVkID0gdG91Y2hlZDtcbiAgICB0aGlzLnNvdXJjZSA9IHNvdXJjZTtcbiAgfVxufVxuY2xhc3MgU3RhdHVzQ2hhbmdlRXZlbnQgZXh0ZW5kcyBDb250cm9sRXZlbnQge1xuICBzdGF0dXM7XG4gIHNvdXJjZTtcbiAgY29uc3RydWN0b3Ioc3RhdHVzLCBzb3VyY2UpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuc3RhdHVzID0gc3RhdHVzO1xuICAgIHRoaXMuc291cmNlID0gc291cmNlO1xuICB9XG59XG5jbGFzcyBGb3JtU3VibWl0dGVkRXZlbnQgZXh0ZW5kcyBDb250cm9sRXZlbnQge1xuICBzb3VyY2U7XG4gIGNvbnN0cnVjdG9yKHNvdXJjZSkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5zb3VyY2UgPSBzb3VyY2U7XG4gIH1cbn1cbmNsYXNzIEZvcm1SZXNldEV2ZW50IGV4dGVuZHMgQ29udHJvbEV2ZW50IHtcbiAgc291cmNlO1xuICBjb25zdHJ1Y3Rvcihzb3VyY2UpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuc291cmNlID0gc291cmNlO1xuICB9XG59XG5mdW5jdGlvbiBwaWNrVmFsaWRhdG9ycyh2YWxpZGF0b3JPck9wdHMpIHtcbiAgcmV0dXJuIChpc09wdGlvbnNPYmoodmFsaWRhdG9yT3JPcHRzKSA/IHZhbGlkYXRvck9yT3B0cy52YWxpZGF0b3JzIDogdmFsaWRhdG9yT3JPcHRzKSB8fCBudWxsO1xufVxuZnVuY3Rpb24gY29lcmNlVG9WYWxpZGF0b3IodmFsaWRhdG9yKSB7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KHZhbGlkYXRvcikgPyBjb21wb3NlVmFsaWRhdG9ycyh2YWxpZGF0b3IpIDogdmFsaWRhdG9yIHx8IG51bGw7XG59XG5mdW5jdGlvbiBwaWNrQXN5bmNWYWxpZGF0b3JzKGFzeW5jVmFsaWRhdG9yLCB2YWxpZGF0b3JPck9wdHMpIHtcbiAgaWYgKHR5cGVvZiBuZ0Rldk1vZGUgPT09ICd1bmRlZmluZWQnIHx8IG5nRGV2TW9kZSkge1xuICAgIGlmIChpc09wdGlvbnNPYmoodmFsaWRhdG9yT3JPcHRzKSAmJiBhc3luY1ZhbGlkYXRvcikge1xuICAgICAgY29uc29sZS53YXJuKGFzeW5jVmFsaWRhdG9yc0Ryb3BwZWRXaXRoT3B0c1dhcm5pbmcpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gKGlzT3B0aW9uc09iaih2YWxpZGF0b3JPck9wdHMpID8gdmFsaWRhdG9yT3JPcHRzLmFzeW5jVmFsaWRhdG9ycyA6IGFzeW5jVmFsaWRhdG9yKSB8fCBudWxsO1xufVxuZnVuY3Rpb24gY29lcmNlVG9Bc3luY1ZhbGlkYXRvcihhc3luY1ZhbGlkYXRvcikge1xuICByZXR1cm4gQXJyYXkuaXNBcnJheShhc3luY1ZhbGlkYXRvcikgPyBjb21wb3NlQXN5bmNWYWxpZGF0b3JzKGFzeW5jVmFsaWRhdG9yKSA6IGFzeW5jVmFsaWRhdG9yIHx8IG51bGw7XG59XG5mdW5jdGlvbiBpc09wdGlvbnNPYmoodmFsaWRhdG9yT3JPcHRzKSB7XG4gIHJldHVybiB2YWxpZGF0b3JPck9wdHMgIT0gbnVsbCAmJiAhQXJyYXkuaXNBcnJheSh2YWxpZGF0b3JPck9wdHMpICYmIHR5cGVvZiB2YWxpZGF0b3JPck9wdHMgPT09ICdvYmplY3QnO1xufVxuZnVuY3Rpb24gYXNzZXJ0Q29udHJvbFByZXNlbnQocGFyZW50LCBpc0dyb3VwLCBrZXkpIHtcbiAgY29uc3QgY29udHJvbHMgPSBwYXJlbnQuY29udHJvbHM7XG4gIGNvbnN0IGNvbGxlY3Rpb24gPSBpc0dyb3VwID8gT2JqZWN0LmtleXMoY29udHJvbHMpIDogY29udHJvbHM7XG4gIGlmICghY29sbGVjdGlvbi5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgX1J1bnRpbWVFcnJvcigxMDAwLCB0eXBlb2YgbmdEZXZNb2RlID09PSAndW5kZWZpbmVkJyB8fCBuZ0Rldk1vZGUgPyBub0NvbnRyb2xzRXJyb3IoaXNHcm91cCkgOiAnJyk7XG4gIH1cbiAgaWYgKCFjb250cm9sc1trZXldKSB7XG4gICAgdGhyb3cgbmV3IF9SdW50aW1lRXJyb3IoMTAwMSwgdHlwZW9mIG5nRGV2TW9kZSA9PT0gJ3VuZGVmaW5lZCcgfHwgbmdEZXZNb2RlID8gbWlzc2luZ0NvbnRyb2xFcnJvcihpc0dyb3VwLCBrZXkpIDogJycpO1xuICB9XG59XG5mdW5jdGlvbiBhc3NlcnRBbGxWYWx1ZXNQcmVzZW50KGNvbnRyb2wsIGlzR3JvdXAsIHZhbHVlKSB7XG4gIGNvbnRyb2wuX2ZvckVhY2hDaGlsZCgoXywga2V5KSA9PiB7XG4gICAgaWYgKHZhbHVlW2tleV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IF9SdW50aW1lRXJyb3IoMTAwMiwgdHlwZW9mIG5nRGV2TW9kZSA9PT0gJ3VuZGVmaW5lZCcgfHwgbmdEZXZNb2RlID8gbWlzc2luZ0NvbnRyb2xWYWx1ZUVycm9yKGlzR3JvdXAsIGtleSkgOiAnJyk7XG4gICAgfVxuICB9KTtcbn1cbmNsYXNzIEFic3RyYWN0Q29udHJvbCB7XG4gIF9wZW5kaW5nRGlydHkgPSBmYWxzZTtcbiAgX2hhc093blBlbmRpbmdBc3luY1ZhbGlkYXRvciA9IG51bGw7XG4gIF9wZW5kaW5nVG91Y2hlZCA9IGZhbHNlO1xuICBfb25Db2xsZWN0aW9uQ2hhbmdlID0gKCkgPT4ge307XG4gIF91cGRhdGVPbjtcbiAgX3BhcmVudCA9IG51bGw7XG4gIF9hc3luY1ZhbGlkYXRpb25TdWJzY3JpcHRpb247XG4gIF9jb21wb3NlZFZhbGlkYXRvckZuO1xuICBfY29tcG9zZWRBc3luY1ZhbGlkYXRvckZuO1xuICBfcmF3VmFsaWRhdG9ycztcbiAgX3Jhd0FzeW5jVmFsaWRhdG9ycztcbiAgdmFsdWU7XG4gIGNvbnN0cnVjdG9yKHZhbGlkYXRvcnMsIGFzeW5jVmFsaWRhdG9ycykge1xuICAgIHRoaXMuX2Fzc2lnblZhbGlkYXRvcnModmFsaWRhdG9ycyk7XG4gICAgdGhpcy5fYXNzaWduQXN5bmNWYWxpZGF0b3JzKGFzeW5jVmFsaWRhdG9ycyk7XG4gIH1cbiAgZ2V0IHZhbGlkYXRvcigpIHtcbiAgICByZXR1cm4gdGhpcy5fY29tcG9zZWRWYWxpZGF0b3JGbjtcbiAgfVxuICBzZXQgdmFsaWRhdG9yKHZhbGlkYXRvckZuKSB7XG4gICAgdGhpcy5fcmF3VmFsaWRhdG9ycyA9IHRoaXMuX2NvbXBvc2VkVmFsaWRhdG9yRm4gPSB2YWxpZGF0b3JGbjtcbiAgfVxuICBnZXQgYXN5bmNWYWxpZGF0b3IoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbXBvc2VkQXN5bmNWYWxpZGF0b3JGbjtcbiAgfVxuICBzZXQgYXN5bmNWYWxpZGF0b3IoYXN5bmNWYWxpZGF0b3JGbikge1xuICAgIHRoaXMuX3Jhd0FzeW5jVmFsaWRhdG9ycyA9IHRoaXMuX2NvbXBvc2VkQXN5bmNWYWxpZGF0b3JGbiA9IGFzeW5jVmFsaWRhdG9yRm47XG4gIH1cbiAgZ2V0IHBhcmVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5fcGFyZW50O1xuICB9XG4gIGdldCBzdGF0dXMoKSB7XG4gICAgcmV0dXJuIHVudHJhY2tlZCh0aGlzLnN0YXR1c1JlYWN0aXZlKTtcbiAgfVxuICBzZXQgc3RhdHVzKHYpIHtcbiAgICB1bnRyYWNrZWQoKCkgPT4gdGhpcy5zdGF0dXNSZWFjdGl2ZS5zZXQodikpO1xuICB9XG4gIF9zdGF0dXMgPSAvKiNfX1BVUkVfXyovY29tcHV0ZWQoKCkgPT4gdGhpcy5zdGF0dXNSZWFjdGl2ZSgpLCAuLi4obmdEZXZNb2RlID8gW3tcbiAgICBkZWJ1Z05hbWU6IFwiX3N0YXR1c1wiXG4gIH1dIDogW10pKTtcbiAgc3RhdHVzUmVhY3RpdmUgPSAvKiNfX1BVUkVfXyovc2lnbmFsKHVuZGVmaW5lZCwgLi4uKG5nRGV2TW9kZSA/IFt7XG4gICAgZGVidWdOYW1lOiBcInN0YXR1c1JlYWN0aXZlXCJcbiAgfV0gOiBbXSkpO1xuICBnZXQgdmFsaWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdHVzID09PSBWQUxJRDtcbiAgfVxuICBnZXQgaW52YWxpZCgpIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0dXMgPT09IElOVkFMSUQ7XG4gIH1cbiAgZ2V0IHBlbmRpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdHVzID09IFBFTkRJTkc7XG4gIH1cbiAgZ2V0IGRpc2FibGVkKCkge1xuICAgIHJldHVybiB0aGlzLnN0YXR1cyA9PT0gRElTQUJMRUQ7XG4gIH1cbiAgZ2V0IGVuYWJsZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdHVzICE9PSBESVNBQkxFRDtcbiAgfVxuICBlcnJvcnM7XG4gIGdldCBwcmlzdGluZSgpIHtcbiAgICByZXR1cm4gdW50cmFja2VkKHRoaXMucHJpc3RpbmVSZWFjdGl2ZSk7XG4gIH1cbiAgc2V0IHByaXN0aW5lKHYpIHtcbiAgICB1bnRyYWNrZWQoKCkgPT4gdGhpcy5wcmlzdGluZVJlYWN0aXZlLnNldCh2KSk7XG4gIH1cbiAgX3ByaXN0aW5lID0gLyojX19QVVJFX18qL2NvbXB1dGVkKCgpID0+IHRoaXMucHJpc3RpbmVSZWFjdGl2ZSgpLCAuLi4obmdEZXZNb2RlID8gW3tcbiAgICBkZWJ1Z05hbWU6IFwiX3ByaXN0aW5lXCJcbiAgfV0gOiBbXSkpO1xuICBwcmlzdGluZVJlYWN0aXZlID0gLyojX19QVVJFX18qL3NpZ25hbCh0cnVlLCAuLi4obmdEZXZNb2RlID8gW3tcbiAgICBkZWJ1Z05hbWU6IFwicHJpc3RpbmVSZWFjdGl2ZVwiXG4gIH1dIDogW10pKTtcbiAgZ2V0IGRpcnR5KCkge1xuICAgIHJldHVybiAhdGhpcy5wcmlzdGluZTtcbiAgfVxuICBnZXQgdG91Y2hlZCgpIHtcbiAgICByZXR1cm4gdW50cmFja2VkKHRoaXMudG91Y2hlZFJlYWN0aXZlKTtcbiAgfVxuICBzZXQgdG91Y2hlZCh2KSB7XG4gICAgdW50cmFja2VkKCgpID0+IHRoaXMudG91Y2hlZFJlYWN0aXZlLnNldCh2KSk7XG4gIH1cbiAgX3RvdWNoZWQgPSAvKiNfX1BVUkVfXyovY29tcHV0ZWQoKCkgPT4gdGhpcy50b3VjaGVkUmVhY3RpdmUoKSwgLi4uKG5nRGV2TW9kZSA/IFt7XG4gICAgZGVidWdOYW1lOiBcIl90b3VjaGVkXCJcbiAgfV0gOiBbXSkpO1xuICB0b3VjaGVkUmVhY3RpdmUgPSAvKiNfX1BVUkVfXyovc2lnbmFsKGZhbHNlLCAuLi4obmdEZXZNb2RlID8gW3tcbiAgICBkZWJ1Z05hbWU6IFwidG91Y2hlZFJlYWN0aXZlXCJcbiAgfV0gOiBbXSkpO1xuICBnZXQgdW50b3VjaGVkKCkge1xuICAgIHJldHVybiAhdGhpcy50b3VjaGVkO1xuICB9XG4gIF9ldmVudHMgPSAvKiNfX1BVUkVfXyovbmV3IFN1YmplY3QoKTtcbiAgZXZlbnRzID0gLyojX19QVVJFX18qL3RoaXMuX2V2ZW50cy5hc09ic2VydmFibGUoKTtcbiAgdmFsdWVDaGFuZ2VzO1xuICBzdGF0dXNDaGFuZ2VzO1xuICBnZXQgdXBkYXRlT24oKSB7XG4gICAgcmV0dXJuIHRoaXMuX3VwZGF0ZU9uID8gdGhpcy5fdXBkYXRlT24gOiB0aGlzLnBhcmVudCA/IHRoaXMucGFyZW50LnVwZGF0ZU9uIDogJ2NoYW5nZSc7XG4gIH1cbiAgc2V0VmFsaWRhdG9ycyh2YWxpZGF0b3JzKSB7XG4gICAgdGhpcy5fYXNzaWduVmFsaWRhdG9ycyh2YWxpZGF0b3JzKTtcbiAgfVxuICBzZXRBc3luY1ZhbGlkYXRvcnModmFsaWRhdG9ycykge1xuICAgIHRoaXMuX2Fzc2lnbkFzeW5jVmFsaWRhdG9ycyh2YWxpZGF0b3JzKTtcbiAgfVxuICBhZGRWYWxpZGF0b3JzKHZhbGlkYXRvcnMpIHtcbiAgICB0aGlzLnNldFZhbGlkYXRvcnMoYWRkVmFsaWRhdG9ycyh2YWxpZGF0b3JzLCB0aGlzLl9yYXdWYWxpZGF0b3JzKSk7XG4gIH1cbiAgYWRkQXN5bmNWYWxpZGF0b3JzKHZhbGlkYXRvcnMpIHtcbiAgICB0aGlzLnNldEFzeW5jVmFsaWRhdG9ycyhhZGRWYWxpZGF0b3JzKHZhbGlkYXRvcnMsIHRoaXMuX3Jhd0FzeW5jVmFsaWRhdG9ycykpO1xuICB9XG4gIHJlbW92ZVZhbGlkYXRvcnModmFsaWRhdG9ycykge1xuICAgIHRoaXMuc2V0VmFsaWRhdG9ycyhyZW1vdmVWYWxpZGF0b3JzKHZhbGlkYXRvcnMsIHRoaXMuX3Jhd1ZhbGlkYXRvcnMpKTtcbiAgfVxuICByZW1vdmVBc3luY1ZhbGlkYXRvcnModmFsaWRhdG9ycykge1xuICAgIHRoaXMuc2V0QXN5bmNWYWxpZGF0b3JzKHJlbW92ZVZhbGlkYXRvcnModmFsaWRhdG9ycywgdGhpcy5fcmF3QXN5bmNWYWxpZGF0b3JzKSk7XG4gIH1cbiAgaGFzVmFsaWRhdG9yKHZhbGlkYXRvcikge1xuICAgIHJldHVybiBoYXNWYWxpZGF0b3IodGhpcy5fcmF3VmFsaWRhdG9ycywgdmFsaWRhdG9yKTtcbiAgfVxuICBoYXNBc3luY1ZhbGlkYXRvcih2YWxpZGF0b3IpIHtcbiAgICByZXR1cm4gaGFzVmFsaWRhdG9yKHRoaXMuX3Jhd0FzeW5jVmFsaWRhdG9ycywgdmFsaWRhdG9yKTtcbiAgfVxuICBjbGVhclZhbGlkYXRvcnMoKSB7XG4gICAgdGhpcy52YWxpZGF0b3IgPSBudWxsO1xuICB9XG4gIGNsZWFyQXN5bmNWYWxpZGF0b3JzKCkge1xuICAgIHRoaXMuYXN5bmNWYWxpZGF0b3IgPSBudWxsO1xuICB9XG4gIG1hcmtBc1RvdWNoZWQob3B0cyA9IHt9KSB7XG4gICAgY29uc3QgY2hhbmdlZCA9IHRoaXMudG91Y2hlZCA9PT0gZmFsc2U7XG4gICAgdGhpcy50b3VjaGVkID0gdHJ1ZTtcbiAgICBjb25zdCBzb3VyY2VDb250cm9sID0gb3B0cy5zb3VyY2VDb250cm9sID8/IHRoaXM7XG4gICAgaWYgKCFvcHRzLm9ubHlTZWxmKSB7XG4gICAgICB0aGlzLl9wYXJlbnQ/Lm1hcmtBc1RvdWNoZWQoe1xuICAgICAgICAuLi5vcHRzLFxuICAgICAgICBzb3VyY2VDb250cm9sXG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKGNoYW5nZWQgJiYgb3B0cy5lbWl0RXZlbnQgIT09IGZhbHNlKSB7XG4gICAgICB0aGlzLl9ldmVudHMubmV4dChuZXcgVG91Y2hlZENoYW5nZUV2ZW50KHRydWUsIHNvdXJjZUNvbnRyb2wpKTtcbiAgICB9XG4gIH1cbiAgbWFya0FsbEFzRGlydHkob3B0cyA9IHt9KSB7XG4gICAgdGhpcy5tYXJrQXNEaXJ0eSh7XG4gICAgICBvbmx5U2VsZjogdHJ1ZSxcbiAgICAgIGVtaXRFdmVudDogb3B0cy5lbWl0RXZlbnQsXG4gICAgICBzb3VyY2VDb250cm9sOiB0aGlzXG4gICAgfSk7XG4gICAgdGhpcy5fZm9yRWFjaENoaWxkKGNvbnRyb2wgPT4gY29udHJvbC5tYXJrQWxsQXNEaXJ0eShvcHRzKSk7XG4gIH1cbiAgbWFya0FsbEFzVG91Y2hlZChvcHRzID0ge30pIHtcbiAgICB0aGlzLm1hcmtBc1RvdWNoZWQoe1xuICAgICAgb25seVNlbGY6IHRydWUsXG4gICAgICBlbWl0RXZlbnQ6IG9wdHMuZW1pdEV2ZW50LFxuICAgICAgc291cmNlQ29udHJvbDogdGhpc1xuICAgIH0pO1xuICAgIHRoaXMuX2ZvckVhY2hDaGlsZChjb250cm9sID0+IGNvbnRyb2wubWFya0FsbEFzVG91Y2hlZChvcHRzKSk7XG4gIH1cbiAgbWFya0FzVW50b3VjaGVkKG9wdHMgPSB7fSkge1xuICAgIGNvbnN0IGNoYW5nZWQgPSB0aGlzLnRvdWNoZWQgPT09IHRydWU7XG4gICAgdGhpcy50b3VjaGVkID0gZmFsc2U7XG4gICAgdGhpcy5fcGVuZGluZ1RvdWNoZWQgPSBmYWxzZTtcbiAgICBjb25zdCBzb3VyY2VDb250cm9sID0gb3B0cy5zb3VyY2VDb250cm9sID8/IHRoaXM7XG4gICAgdGhpcy5fZm9yRWFjaENoaWxkKGNvbnRyb2wgPT4ge1xuICAgICAgY29udHJvbC5tYXJrQXNVbnRvdWNoZWQoe1xuICAgICAgICBvbmx5U2VsZjogdHJ1ZSxcbiAgICAgICAgZW1pdEV2ZW50OiBvcHRzLmVtaXRFdmVudCxcbiAgICAgICAgc291cmNlQ29udHJvbFxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgaWYgKCFvcHRzLm9ubHlTZWxmKSB7XG4gICAgICB0aGlzLl9wYXJlbnQ/Ll91cGRhdGVUb3VjaGVkKG9wdHMsIHNvdXJjZUNvbnRyb2wpO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlZCAmJiBvcHRzLmVtaXRFdmVudCAhPT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuX2V2ZW50cy5uZXh0KG5ldyBUb3VjaGVkQ2hhbmdlRXZlbnQoZmFsc2UsIHNvdXJjZUNvbnRyb2wpKTtcbiAgICB9XG4gIH1cbiAgbWFya0FzRGlydHkob3B0cyA9IHt9KSB7XG4gICAgY29uc3QgY2hhbmdlZCA9IHRoaXMucHJpc3RpbmUgPT09IHRydWU7XG4gICAgdGhpcy5wcmlzdGluZSA9IGZhbHNlO1xuICAgIGNvbnN0IHNvdXJjZUNvbnRyb2wgPSBvcHRzLnNvdXJjZUNvbnRyb2wgPz8gdGhpcztcbiAgICBpZiAoIW9wdHMub25seVNlbGYpIHtcbiAgICAgIHRoaXMuX3BhcmVudD8ubWFya0FzRGlydHkoe1xuICAgICAgICAuLi5vcHRzLFxuICAgICAgICBzb3VyY2VDb250cm9sXG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKGNoYW5nZWQgJiYgb3B0cy5lbWl0RXZlbnQgIT09IGZhbHNlKSB7XG4gICAgICB0aGlzLl9ldmVudHMubmV4dChuZXcgUHJpc3RpbmVDaGFuZ2VFdmVudChmYWxzZSwgc291cmNlQ29udHJvbCkpO1xuICAgIH1cbiAgfVxuICBtYXJrQXNQcmlzdGluZShvcHRzID0ge30pIHtcbiAgICBjb25zdCBjaGFuZ2VkID0gdGhpcy5wcmlzdGluZSA9PT0gZmFsc2U7XG4gICAgdGhpcy5wcmlzdGluZSA9IHRydWU7XG4gICAgdGhpcy5fcGVuZGluZ0RpcnR5ID0gZmFsc2U7XG4gICAgY29uc3Qgc291cmNlQ29udHJvbCA9IG9wdHMuc291cmNlQ29udHJvbCA/PyB0aGlzO1xuICAgIHRoaXMuX2ZvckVhY2hDaGlsZChjb250cm9sID0+IHtcbiAgICAgIGNvbnRyb2wubWFya0FzUHJpc3RpbmUoe1xuICAgICAgICBvbmx5U2VsZjogdHJ1ZSxcbiAgICAgICAgZW1pdEV2ZW50OiBvcHRzLmVtaXRFdmVudFxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgaWYgKCFvcHRzLm9ubHlTZWxmKSB7XG4gICAgICB0aGlzLl9wYXJlbnQ/Ll91cGRhdGVQcmlzdGluZShvcHRzLCBzb3VyY2VDb250cm9sKTtcbiAgICB9XG4gICAgaWYgKGNoYW5nZWQgJiYgb3B0cy5lbWl0RXZlbnQgIT09IGZhbHNlKSB7XG4gICAgICB0aGlzLl9ldmVudHMubmV4dChuZXcgUHJpc3RpbmVDaGFuZ2VFdmVudCh0cnVlLCBzb3VyY2VDb250cm9sKSk7XG4gICAgfVxuICB9XG4gIG1hcmtBc1BlbmRpbmcob3B0cyA9IHt9KSB7XG4gICAgdGhpcy5zdGF0dXMgPSBQRU5ESU5HO1xuICAgIGNvbnN0IHNvdXJjZUNvbnRyb2wgPSBvcHRzLnNvdXJjZUNvbnRyb2wgPz8gdGhpcztcbiAgICBpZiAob3B0cy5lbWl0RXZlbnQgIT09IGZhbHNlKSB7XG4gICAgICB0aGlzLl9ldmVudHMubmV4dChuZXcgU3RhdHVzQ2hhbmdlRXZlbnQodGhpcy5zdGF0dXMsIHNvdXJjZUNvbnRyb2wpKTtcbiAgICAgIHRoaXMuc3RhdHVzQ2hhbmdlcy5lbWl0KHRoaXMuc3RhdHVzKTtcbiAgICB9XG4gICAgaWYgKCFvcHRzLm9ubHlTZWxmKSB7XG4gICAgICB0aGlzLl9wYXJlbnQ/Lm1hcmtBc1BlbmRpbmcoe1xuICAgICAgICAuLi5vcHRzLFxuICAgICAgICBzb3VyY2VDb250cm9sXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgZGlzYWJsZShvcHRzID0ge30pIHtcbiAgICBjb25zdCBza2lwUHJpc3RpbmVDaGVjayA9IHRoaXMuX3BhcmVudE1hcmtlZERpcnR5KG9wdHMub25seVNlbGYpO1xuICAgIHRoaXMuc3RhdHVzID0gRElTQUJMRUQ7XG4gICAgdGhpcy5lcnJvcnMgPSBudWxsO1xuICAgIHRoaXMuX2ZvckVhY2hDaGlsZChjb250cm9sID0+IHtcbiAgICAgIGNvbnRyb2wuZGlzYWJsZSh7XG4gICAgICAgIC4uLm9wdHMsXG4gICAgICAgIG9ubHlTZWxmOiB0cnVlXG4gICAgICB9KTtcbiAgICB9KTtcbiAgICB0aGlzLl91cGRhdGVWYWx1ZSgpO1xuICAgIGNvbnN0IHNvdXJjZUNvbnRyb2wgPSBvcHRzLnNvdXJjZUNvbnRyb2wgPz8gdGhpcztcbiAgICBpZiAob3B0cy5lbWl0RXZlbnQgIT09IGZhbHNlKSB7XG4gICAgICB0aGlzLl9ldmVudHMubmV4dChuZXcgVmFsdWVDaGFuZ2VFdmVudCh0aGlzLnZhbHVlLCBzb3VyY2VDb250cm9sKSk7XG4gICAgICB0aGlzLl9ldmVudHMubmV4dChuZXcgU3RhdHVzQ2hhbmdlRXZlbnQodGhpcy5zdGF0dXMsIHNvdXJjZUNvbnRyb2wpKTtcbiAgICAgIHRoaXMudmFsdWVDaGFuZ2VzLmVtaXQodGhpcy52YWx1ZSk7XG4gICAgICB0aGlzLnN0YXR1c0NoYW5nZXMuZW1pdCh0aGlzLnN0YXR1cyk7XG4gICAgfVxuICAgIHRoaXMuX3VwZGF0ZUFuY2VzdG9ycyh7XG4gICAgICAuLi5vcHRzLFxuICAgICAgc2tpcFByaXN0aW5lQ2hlY2tcbiAgICB9LCB0aGlzKTtcbiAgICB0aGlzLl9vbkRpc2FibGVkQ2hhbmdlLmZvckVhY2goY2hhbmdlRm4gPT4gY2hhbmdlRm4odHJ1ZSkpO1xuICB9XG4gIGVuYWJsZShvcHRzID0ge30pIHtcbiAgICBjb25zdCBza2lwUHJpc3RpbmVDaGVjayA9IHRoaXMuX3BhcmVudE1hcmtlZERpcnR5KG9wdHMub25seVNlbGYpO1xuICAgIHRoaXMuc3RhdHVzID0gVkFMSUQ7XG4gICAgdGhpcy5fZm9yRWFjaENoaWxkKGNvbnRyb2wgPT4ge1xuICAgICAgY29udHJvbC5lbmFibGUoe1xuICAgICAgICAuLi5vcHRzLFxuICAgICAgICBvbmx5U2VsZjogdHJ1ZVxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtcbiAgICAgIG9ubHlTZWxmOiB0cnVlLFxuICAgICAgZW1pdEV2ZW50OiBvcHRzLmVtaXRFdmVudFxuICAgIH0pO1xuICAgIHRoaXMuX3VwZGF0ZUFuY2VzdG9ycyh7XG4gICAgICAuLi5vcHRzLFxuICAgICAgc2tpcFByaXN0aW5lQ2hlY2tcbiAgICB9LCB0aGlzKTtcbiAgICB0aGlzLl9vbkRpc2FibGVkQ2hhbmdlLmZvckVhY2goY2hhbmdlRm4gPT4gY2hhbmdlRm4oZmFsc2UpKTtcbiAgfVxuICBfdXBkYXRlQW5jZXN0b3JzKG9wdHMsIHNvdXJjZUNvbnRyb2wpIHtcbiAgICBpZiAoIW9wdHMub25seVNlbGYpIHtcbiAgICAgIHRoaXMuX3BhcmVudD8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eShvcHRzKTtcbiAgICAgIGlmICghb3B0cy5za2lwUHJpc3RpbmVDaGVjaykge1xuICAgICAgICB0aGlzLl9wYXJlbnQ/Ll91cGRhdGVQcmlzdGluZSh7fSwgc291cmNlQ29udHJvbCk7XG4gICAgICB9XG4gICAgICB0aGlzLl9wYXJlbnQ/Ll91cGRhdGVUb3VjaGVkKHt9LCBzb3VyY2VDb250cm9sKTtcbiAgICB9XG4gIH1cbiAgc2V0UGFyZW50KHBhcmVudCkge1xuICAgIHRoaXMuX3BhcmVudCA9IHBhcmVudDtcbiAgfVxuICBnZXRSYXdWYWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZTtcbiAgfVxuICB1cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KG9wdHMgPSB7fSkge1xuICAgIHRoaXMuX3NldEluaXRpYWxTdGF0dXMoKTtcbiAgICB0aGlzLl91cGRhdGVWYWx1ZSgpO1xuICAgIGlmICh0aGlzLmVuYWJsZWQpIHtcbiAgICAgIGNvbnN0IHNob3VsZEhhdmVFbWl0dGVkID0gdGhpcy5fY2FuY2VsRXhpc3RpbmdTdWJzY3JpcHRpb24oKTtcbiAgICAgIHRoaXMuZXJyb3JzID0gdGhpcy5fcnVuVmFsaWRhdG9yKCk7XG4gICAgICB0aGlzLnN0YXR1cyA9IHRoaXMuX2NhbGN1bGF0ZVN0YXR1cygpO1xuICAgICAgaWYgKHRoaXMuc3RhdHVzID09PSBWQUxJRCB8fCB0aGlzLnN0YXR1cyA9PT0gUEVORElORykge1xuICAgICAgICB0aGlzLl9ydW5Bc3luY1ZhbGlkYXRvcihzaG91bGRIYXZlRW1pdHRlZCwgb3B0cy5lbWl0RXZlbnQpO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBzb3VyY2VDb250cm9sID0gb3B0cy5zb3VyY2VDb250cm9sID8/IHRoaXM7XG4gICAgaWYgKG9wdHMuZW1pdEV2ZW50ICE9PSBmYWxzZSkge1xuICAgICAgdGhpcy5fZXZlbnRzLm5leHQobmV3IFZhbHVlQ2hhbmdlRXZlbnQodGhpcy52YWx1ZSwgc291cmNlQ29udHJvbCkpO1xuICAgICAgdGhpcy5fZXZlbnRzLm5leHQobmV3IFN0YXR1c0NoYW5nZUV2ZW50KHRoaXMuc3RhdHVzLCBzb3VyY2VDb250cm9sKSk7XG4gICAgICB0aGlzLnZhbHVlQ2hhbmdlcy5lbWl0KHRoaXMudmFsdWUpO1xuICAgICAgdGhpcy5zdGF0dXNDaGFuZ2VzLmVtaXQodGhpcy5zdGF0dXMpO1xuICAgIH1cbiAgICBpZiAoIW9wdHMub25seVNlbGYpIHtcbiAgICAgIHRoaXMuX3BhcmVudD8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7XG4gICAgICAgIC4uLm9wdHMsXG4gICAgICAgIHNvdXJjZUNvbnRyb2xcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICBfdXBkYXRlVHJlZVZhbGlkaXR5KG9wdHMgPSB7XG4gICAgZW1pdEV2ZW50OiB0cnVlXG4gIH0pIHtcbiAgICB0aGlzLl9mb3JFYWNoQ2hpbGQoY3RybCA9PiBjdHJsLl91cGRhdGVUcmVlVmFsaWRpdHkob3B0cykpO1xuICAgIHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7XG4gICAgICBvbmx5U2VsZjogdHJ1ZSxcbiAgICAgIGVtaXRFdmVudDogb3B0cy5lbWl0RXZlbnRcbiAgICB9KTtcbiAgfVxuICBfc2V0SW5pdGlhbFN0YXR1cygpIHtcbiAgICB0aGlzLnN0YXR1cyA9IHRoaXMuX2FsbENvbnRyb2xzRGlzYWJsZWQoKSA/IERJU0FCTEVEIDogVkFMSUQ7XG4gIH1cbiAgX3J1blZhbGlkYXRvcigpIHtcbiAgICByZXR1cm4gdGhpcy52YWxpZGF0b3IgPyB0aGlzLnZhbGlkYXRvcih0aGlzKSA6IG51bGw7XG4gIH1cbiAgX3J1bkFzeW5jVmFsaWRhdG9yKHNob3VsZEhhdmVFbWl0dGVkLCBlbWl0RXZlbnQpIHtcbiAgICBpZiAodGhpcy5hc3luY1ZhbGlkYXRvcikge1xuICAgICAgdGhpcy5zdGF0dXMgPSBQRU5ESU5HO1xuICAgICAgdGhpcy5faGFzT3duUGVuZGluZ0FzeW5jVmFsaWRhdG9yID0ge1xuICAgICAgICBlbWl0RXZlbnQ6IGVtaXRFdmVudCAhPT0gZmFsc2UsXG4gICAgICAgIHNob3VsZEhhdmVFbWl0dGVkOiBzaG91bGRIYXZlRW1pdHRlZCAhPT0gZmFsc2VcbiAgICAgIH07XG4gICAgICBjb25zdCBvYnMgPSB0b09ic2VydmFibGUodGhpcy5hc3luY1ZhbGlkYXRvcih0aGlzKSk7XG4gICAgICB0aGlzLl9hc3luY1ZhbGlkYXRpb25TdWJzY3JpcHRpb24gPSBvYnMuc3Vic2NyaWJlKGVycm9ycyA9PiB7XG4gICAgICAgIHRoaXMuX2hhc093blBlbmRpbmdBc3luY1ZhbGlkYXRvciA9IG51bGw7XG4gICAgICAgIHRoaXMuc2V0RXJyb3JzKGVycm9ycywge1xuICAgICAgICAgIGVtaXRFdmVudCxcbiAgICAgICAgICBzaG91bGRIYXZlRW1pdHRlZFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICBfY2FuY2VsRXhpc3RpbmdTdWJzY3JpcHRpb24oKSB7XG4gICAgaWYgKHRoaXMuX2FzeW5jVmFsaWRhdGlvblN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5fYXN5bmNWYWxpZGF0aW9uU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICBjb25zdCBzaG91bGRIYXZlRW1pdHRlZCA9ICh0aGlzLl9oYXNPd25QZW5kaW5nQXN5bmNWYWxpZGF0b3I/LmVtaXRFdmVudCB8fCB0aGlzLl9oYXNPd25QZW5kaW5nQXN5bmNWYWxpZGF0b3I/LnNob3VsZEhhdmVFbWl0dGVkKSA/PyBmYWxzZTtcbiAgICAgIHRoaXMuX2hhc093blBlbmRpbmdBc3luY1ZhbGlkYXRvciA9IG51bGw7XG4gICAgICByZXR1cm4gc2hvdWxkSGF2ZUVtaXR0ZWQ7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBzZXRFcnJvcnMoZXJyb3JzLCBvcHRzID0ge30pIHtcbiAgICB0aGlzLmVycm9ycyA9IGVycm9ycztcbiAgICB0aGlzLl91cGRhdGVDb250cm9sc0Vycm9ycyhvcHRzLmVtaXRFdmVudCAhPT0gZmFsc2UsIHRoaXMsIG9wdHMuc2hvdWxkSGF2ZUVtaXR0ZWQpO1xuICB9XG4gIGdldChwYXRoKSB7XG4gICAgbGV0IGN1cnJQYXRoID0gcGF0aDtcbiAgICBpZiAoY3VyclBhdGggPT0gbnVsbCkgcmV0dXJuIG51bGw7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGN1cnJQYXRoKSkgY3VyclBhdGggPSBjdXJyUGF0aC5zcGxpdCgnLicpO1xuICAgIGlmIChjdXJyUGF0aC5sZW5ndGggPT09IDApIHJldHVybiBudWxsO1xuICAgIHJldHVybiBjdXJyUGF0aC5yZWR1Y2UoKGNvbnRyb2wsIG5hbWUpID0+IGNvbnRyb2wgJiYgY29udHJvbC5fZmluZChuYW1lKSwgdGhpcyk7XG4gIH1cbiAgZ2V0RXJyb3IoZXJyb3JDb2RlLCBwYXRoKSB7XG4gICAgY29uc3QgY29udHJvbCA9IHBhdGggPyB0aGlzLmdldChwYXRoKSA6IHRoaXM7XG4gICAgcmV0dXJuIGNvbnRyb2w/LmVycm9ycyA/IGNvbnRyb2wuZXJyb3JzW2Vycm9yQ29kZV0gOiBudWxsO1xuICB9XG4gIGhhc0Vycm9yKGVycm9yQ29kZSwgcGF0aCkge1xuICAgIHJldHVybiAhIXRoaXMuZ2V0RXJyb3IoZXJyb3JDb2RlLCBwYXRoKTtcbiAgfVxuICBnZXQgcm9vdCgpIHtcbiAgICBsZXQgeCA9IHRoaXM7XG4gICAgd2hpbGUgKHguX3BhcmVudCkge1xuICAgICAgeCA9IHguX3BhcmVudDtcbiAgICB9XG4gICAgcmV0dXJuIHg7XG4gIH1cbiAgX3VwZGF0ZUNvbnRyb2xzRXJyb3JzKGVtaXRFdmVudCwgY2hhbmdlZENvbnRyb2wsIHNob3VsZEhhdmVFbWl0dGVkKSB7XG4gICAgdGhpcy5zdGF0dXMgPSB0aGlzLl9jYWxjdWxhdGVTdGF0dXMoKTtcbiAgICBpZiAoZW1pdEV2ZW50KSB7XG4gICAgICB0aGlzLnN0YXR1c0NoYW5nZXMuZW1pdCh0aGlzLnN0YXR1cyk7XG4gICAgfVxuICAgIGlmIChlbWl0RXZlbnQgfHwgc2hvdWxkSGF2ZUVtaXR0ZWQpIHtcbiAgICAgIHRoaXMuX2V2ZW50cy5uZXh0KG5ldyBTdGF0dXNDaGFuZ2VFdmVudCh0aGlzLnN0YXR1cywgY2hhbmdlZENvbnRyb2wpKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuX3BhcmVudCkge1xuICAgICAgdGhpcy5fcGFyZW50Ll91cGRhdGVDb250cm9sc0Vycm9ycyhlbWl0RXZlbnQsIGNoYW5nZWRDb250cm9sLCBzaG91bGRIYXZlRW1pdHRlZCk7XG4gICAgfVxuICB9XG4gIF9pbml0T2JzZXJ2YWJsZXMoKSB7XG4gICAgdGhpcy52YWx1ZUNoYW5nZXMgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgdGhpcy5zdGF0dXNDaGFuZ2VzID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICB9XG4gIF9jYWxjdWxhdGVTdGF0dXMoKSB7XG4gICAgaWYgKHRoaXMuX2FsbENvbnRyb2xzRGlzYWJsZWQoKSkgcmV0dXJuIERJU0FCTEVEO1xuICAgIGlmICh0aGlzLmVycm9ycykgcmV0dXJuIElOVkFMSUQ7XG4gICAgaWYgKHRoaXMuX2hhc093blBlbmRpbmdBc3luY1ZhbGlkYXRvciB8fCB0aGlzLl9hbnlDb250cm9sc0hhdmVTdGF0dXMoUEVORElORykpIHJldHVybiBQRU5ESU5HO1xuICAgIGlmICh0aGlzLl9hbnlDb250cm9sc0hhdmVTdGF0dXMoSU5WQUxJRCkpIHJldHVybiBJTlZBTElEO1xuICAgIHJldHVybiBWQUxJRDtcbiAgfVxuICBfYW55Q29udHJvbHNIYXZlU3RhdHVzKHN0YXR1cykge1xuICAgIHJldHVybiB0aGlzLl9hbnlDb250cm9scyhjb250cm9sID0+IGNvbnRyb2wuc3RhdHVzID09PSBzdGF0dXMpO1xuICB9XG4gIF9hbnlDb250cm9sc0RpcnR5KCkge1xuICAgIHJldHVybiB0aGlzLl9hbnlDb250cm9scyhjb250cm9sID0+IGNvbnRyb2wuZGlydHkpO1xuICB9XG4gIF9hbnlDb250cm9sc1RvdWNoZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2FueUNvbnRyb2xzKGNvbnRyb2wgPT4gY29udHJvbC50b3VjaGVkKTtcbiAgfVxuICBfdXBkYXRlUHJpc3RpbmUob3B0cywgY2hhbmdlZENvbnRyb2wpIHtcbiAgICBjb25zdCBuZXdQcmlzdGluZSA9ICF0aGlzLl9hbnlDb250cm9sc0RpcnR5KCk7XG4gICAgY29uc3QgY2hhbmdlZCA9IHRoaXMucHJpc3RpbmUgIT09IG5ld1ByaXN0aW5lO1xuICAgIHRoaXMucHJpc3RpbmUgPSBuZXdQcmlzdGluZTtcbiAgICBpZiAoIW9wdHMub25seVNlbGYpIHtcbiAgICAgIHRoaXMuX3BhcmVudD8uX3VwZGF0ZVByaXN0aW5lKG9wdHMsIGNoYW5nZWRDb250cm9sKTtcbiAgICB9XG4gICAgaWYgKGNoYW5nZWQpIHtcbiAgICAgIHRoaXMuX2V2ZW50cy5uZXh0KG5ldyBQcmlzdGluZUNoYW5nZUV2ZW50KHRoaXMucHJpc3RpbmUsIGNoYW5nZWRDb250cm9sKSk7XG4gICAgfVxuICB9XG4gIF91cGRhdGVUb3VjaGVkKG9wdHMgPSB7fSwgY2hhbmdlZENvbnRyb2wpIHtcbiAgICB0aGlzLnRvdWNoZWQgPSB0aGlzLl9hbnlDb250cm9sc1RvdWNoZWQoKTtcbiAgICB0aGlzLl9ldmVudHMubmV4dChuZXcgVG91Y2hlZENoYW5nZUV2ZW50KHRoaXMudG91Y2hlZCwgY2hhbmdlZENvbnRyb2wpKTtcbiAgICBpZiAoIW9wdHMub25seVNlbGYpIHtcbiAgICAgIHRoaXMuX3BhcmVudD8uX3VwZGF0ZVRvdWNoZWQob3B0cywgY2hhbmdlZENvbnRyb2wpO1xuICAgIH1cbiAgfVxuICBfb25EaXNhYmxlZENoYW5nZSA9IFtdO1xuICBfcmVnaXN0ZXJPbkNvbGxlY3Rpb25DaGFuZ2UoZm4pIHtcbiAgICB0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2UgPSBmbjtcbiAgfVxuICBfc2V0VXBkYXRlU3RyYXRlZ3kob3B0cykge1xuICAgIGlmIChpc09wdGlvbnNPYmoob3B0cykgJiYgb3B0cy51cGRhdGVPbiAhPSBudWxsKSB7XG4gICAgICB0aGlzLl91cGRhdGVPbiA9IG9wdHMudXBkYXRlT247XG4gICAgfVxuICB9XG4gIF9wYXJlbnRNYXJrZWREaXJ0eShvbmx5U2VsZikge1xuICAgIHJldHVybiAhb25seVNlbGYgJiYgISF0aGlzLl9wYXJlbnQ/LmRpcnR5ICYmICF0aGlzLl9wYXJlbnQuX2FueUNvbnRyb2xzRGlydHkoKTtcbiAgfVxuICBfZmluZChuYW1lKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgX2Fzc2lnblZhbGlkYXRvcnModmFsaWRhdG9ycykge1xuICAgIHRoaXMuX3Jhd1ZhbGlkYXRvcnMgPSBBcnJheS5pc0FycmF5KHZhbGlkYXRvcnMpID8gdmFsaWRhdG9ycy5zbGljZSgpIDogdmFsaWRhdG9ycztcbiAgICB0aGlzLl9jb21wb3NlZFZhbGlkYXRvckZuID0gY29lcmNlVG9WYWxpZGF0b3IodGhpcy5fcmF3VmFsaWRhdG9ycyk7XG4gIH1cbiAgX2Fzc2lnbkFzeW5jVmFsaWRhdG9ycyh2YWxpZGF0b3JzKSB7XG4gICAgdGhpcy5fcmF3QXN5bmNWYWxpZGF0b3JzID0gQXJyYXkuaXNBcnJheSh2YWxpZGF0b3JzKSA/IHZhbGlkYXRvcnMuc2xpY2UoKSA6IHZhbGlkYXRvcnM7XG4gICAgdGhpcy5fY29tcG9zZWRBc3luY1ZhbGlkYXRvckZuID0gY29lcmNlVG9Bc3luY1ZhbGlkYXRvcih0aGlzLl9yYXdBc3luY1ZhbGlkYXRvcnMpO1xuICB9XG59XG5jbGFzcyBGb3JtR3JvdXAgZXh0ZW5kcyBBYnN0cmFjdENvbnRyb2wge1xuICBjb25zdHJ1Y3Rvcihjb250cm9scywgdmFsaWRhdG9yT3JPcHRzLCBhc3luY1ZhbGlkYXRvcikge1xuICAgIHN1cGVyKHBpY2tWYWxpZGF0b3JzKHZhbGlkYXRvck9yT3B0cyksIHBpY2tBc3luY1ZhbGlkYXRvcnMoYXN5bmNWYWxpZGF0b3IsIHZhbGlkYXRvck9yT3B0cykpO1xuICAgICh0eXBlb2YgbmdEZXZNb2RlID09PSAndW5kZWZpbmVkJyB8fCBuZ0Rldk1vZGUpICYmIHZhbGlkYXRlRm9ybUdyb3VwQ29udHJvbHMoY29udHJvbHMpO1xuICAgIHRoaXMuY29udHJvbHMgPSBjb250cm9scztcbiAgICB0aGlzLl9pbml0T2JzZXJ2YWJsZXMoKTtcbiAgICB0aGlzLl9zZXRVcGRhdGVTdHJhdGVneSh2YWxpZGF0b3JPck9wdHMpO1xuICAgIHRoaXMuX3NldFVwQ29udHJvbHMoKTtcbiAgICB0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe1xuICAgICAgb25seVNlbGY6IHRydWUsXG4gICAgICBlbWl0RXZlbnQ6ICEhdGhpcy5hc3luY1ZhbGlkYXRvclxuICAgIH0pO1xuICB9XG4gIGNvbnRyb2xzO1xuICByZWdpc3RlckNvbnRyb2wobmFtZSwgY29udHJvbCkge1xuICAgIGlmICh0aGlzLmNvbnRyb2xzW25hbWVdKSByZXR1cm4gdGhpcy5jb250cm9sc1tuYW1lXTtcbiAgICB0aGlzLmNvbnRyb2xzW25hbWVdID0gY29udHJvbDtcbiAgICBjb250cm9sLnNldFBhcmVudCh0aGlzKTtcbiAgICBjb250cm9sLl9yZWdpc3Rlck9uQ29sbGVjdGlvbkNoYW5nZSh0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2UpO1xuICAgIHJldHVybiBjb250cm9sO1xuICB9XG4gIGFkZENvbnRyb2wobmFtZSwgY29udHJvbCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgdGhpcy5yZWdpc3RlckNvbnRyb2wobmFtZSwgY29udHJvbCk7XG4gICAgdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtcbiAgICAgIGVtaXRFdmVudDogb3B0aW9ucy5lbWl0RXZlbnRcbiAgICB9KTtcbiAgICB0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2UoKTtcbiAgfVxuICByZW1vdmVDb250cm9sKG5hbWUsIG9wdGlvbnMgPSB7fSkge1xuICAgIGlmICh0aGlzLmNvbnRyb2xzW25hbWVdKSB0aGlzLmNvbnRyb2xzW25hbWVdLl9yZWdpc3Rlck9uQ29sbGVjdGlvbkNoYW5nZSgoKSA9PiB7fSk7XG4gICAgZGVsZXRlIHRoaXMuY29udHJvbHNbbmFtZV07XG4gICAgdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtcbiAgICAgIGVtaXRFdmVudDogb3B0aW9ucy5lbWl0RXZlbnRcbiAgICB9KTtcbiAgICB0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2UoKTtcbiAgfVxuICBzZXRDb250cm9sKG5hbWUsIGNvbnRyb2wsIG9wdGlvbnMgPSB7fSkge1xuICAgIGlmICh0aGlzLmNvbnRyb2xzW25hbWVdKSB0aGlzLmNvbnRyb2xzW25hbWVdLl9yZWdpc3Rlck9uQ29sbGVjdGlvbkNoYW5nZSgoKSA9PiB7fSk7XG4gICAgZGVsZXRlIHRoaXMuY29udHJvbHNbbmFtZV07XG4gICAgaWYgKGNvbnRyb2wpIHRoaXMucmVnaXN0ZXJDb250cm9sKG5hbWUsIGNvbnRyb2wpO1xuICAgIHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7XG4gICAgICBlbWl0RXZlbnQ6IG9wdGlvbnMuZW1pdEV2ZW50XG4gICAgfSk7XG4gICAgdGhpcy5fb25Db2xsZWN0aW9uQ2hhbmdlKCk7XG4gIH1cbiAgY29udGFpbnMoY29udHJvbE5hbWUpIHtcbiAgICByZXR1cm4gdGhpcy5jb250cm9scy5oYXNPd25Qcm9wZXJ0eShjb250cm9sTmFtZSkgJiYgdGhpcy5jb250cm9sc1tjb250cm9sTmFtZV0uZW5hYmxlZDtcbiAgfVxuICBzZXRWYWx1ZSh2YWx1ZSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgYXNzZXJ0QWxsVmFsdWVzUHJlc2VudCh0aGlzLCB0cnVlLCB2YWx1ZSk7XG4gICAgT2JqZWN0LmtleXModmFsdWUpLmZvckVhY2gobmFtZSA9PiB7XG4gICAgICBhc3NlcnRDb250cm9sUHJlc2VudCh0aGlzLCB0cnVlLCBuYW1lKTtcbiAgICAgIHRoaXMuY29udHJvbHNbbmFtZV0uc2V0VmFsdWUodmFsdWVbbmFtZV0sIHtcbiAgICAgICAgb25seVNlbGY6IHRydWUsXG4gICAgICAgIGVtaXRFdmVudDogb3B0aW9ucy5lbWl0RXZlbnRcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eShvcHRpb25zKTtcbiAgfVxuICBwYXRjaFZhbHVlKHZhbHVlLCBvcHRpb25zID0ge30pIHtcbiAgICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuO1xuICAgIE9iamVjdC5rZXlzKHZhbHVlKS5mb3JFYWNoKG5hbWUgPT4ge1xuICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMuY29udHJvbHNbbmFtZV07XG4gICAgICBpZiAoY29udHJvbCkge1xuICAgICAgICBjb250cm9sLnBhdGNoVmFsdWUodmFsdWVbbmFtZV0sIHtcbiAgICAgICAgICBvbmx5U2VsZjogdHJ1ZSxcbiAgICAgICAgICBlbWl0RXZlbnQ6IG9wdGlvbnMuZW1pdEV2ZW50XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eShvcHRpb25zKTtcbiAgfVxuICByZXNldCh2YWx1ZSA9IHt9LCBvcHRpb25zID0ge30pIHtcbiAgICB0aGlzLl9mb3JFYWNoQ2hpbGQoKGNvbnRyb2wsIG5hbWUpID0+IHtcbiAgICAgIGNvbnRyb2wucmVzZXQodmFsdWUgPyB2YWx1ZVtuYW1lXSA6IG51bGwsIHtcbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgb25seVNlbGY6IHRydWVcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHRoaXMuX3VwZGF0ZVByaXN0aW5lKG9wdGlvbnMsIHRoaXMpO1xuICAgIHRoaXMuX3VwZGF0ZVRvdWNoZWQob3B0aW9ucywgdGhpcyk7XG4gICAgdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KG9wdGlvbnMpO1xuICAgIGlmIChvcHRpb25zPy5lbWl0RXZlbnQgIT09IGZhbHNlKSB7XG4gICAgICB0aGlzLl9ldmVudHMubmV4dChuZXcgRm9ybVJlc2V0RXZlbnQodGhpcykpO1xuICAgIH1cbiAgfVxuICBnZXRSYXdWYWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fcmVkdWNlQ2hpbGRyZW4oe30sIChhY2MsIGNvbnRyb2wsIG5hbWUpID0+IHtcbiAgICAgIGFjY1tuYW1lXSA9IGNvbnRyb2wuZ2V0UmF3VmFsdWUoKTtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSk7XG4gIH1cbiAgX3N5bmNQZW5kaW5nQ29udHJvbHMoKSB7XG4gICAgbGV0IHN1YnRyZWVVcGRhdGVkID0gdGhpcy5fcmVkdWNlQ2hpbGRyZW4oZmFsc2UsICh1cGRhdGVkLCBjaGlsZCkgPT4ge1xuICAgICAgcmV0dXJuIGNoaWxkLl9zeW5jUGVuZGluZ0NvbnRyb2xzKCkgPyB0cnVlIDogdXBkYXRlZDtcbiAgICB9KTtcbiAgICBpZiAoc3VidHJlZVVwZGF0ZWQpIHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7XG4gICAgICBvbmx5U2VsZjogdHJ1ZVxuICAgIH0pO1xuICAgIHJldHVybiBzdWJ0cmVlVXBkYXRlZDtcbiAgfVxuICBfZm9yRWFjaENoaWxkKGNiKSB7XG4gICAgT2JqZWN0LmtleXModGhpcy5jb250cm9scykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMuY29udHJvbHNba2V5XTtcbiAgICAgIGNvbnRyb2wgJiYgY2IoY29udHJvbCwga2V5KTtcbiAgICB9KTtcbiAgfVxuICBfc2V0VXBDb250cm9scygpIHtcbiAgICB0aGlzLl9mb3JFYWNoQ2hpbGQoY29udHJvbCA9PiB7XG4gICAgICBjb250cm9sLnNldFBhcmVudCh0aGlzKTtcbiAgICAgIGNvbnRyb2wuX3JlZ2lzdGVyT25Db2xsZWN0aW9uQ2hhbmdlKHRoaXMuX29uQ29sbGVjdGlvbkNoYW5nZSk7XG4gICAgfSk7XG4gIH1cbiAgX3VwZGF0ZVZhbHVlKCkge1xuICAgIHRoaXMudmFsdWUgPSB0aGlzLl9yZWR1Y2VWYWx1ZSgpO1xuICB9XG4gIF9hbnlDb250cm9scyhjb25kaXRpb24pIHtcbiAgICBmb3IgKGNvbnN0IFtjb250cm9sTmFtZSwgY29udHJvbF0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5jb250cm9scykpIHtcbiAgICAgIGlmICh0aGlzLmNvbnRhaW5zKGNvbnRyb2xOYW1lKSAmJiBjb25kaXRpb24oY29udHJvbCkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBfcmVkdWNlVmFsdWUoKSB7XG4gICAgbGV0IGFjYyA9IHt9O1xuICAgIHJldHVybiB0aGlzLl9yZWR1Y2VDaGlsZHJlbihhY2MsIChhY2MsIGNvbnRyb2wsIG5hbWUpID0+IHtcbiAgICAgIGlmIChjb250cm9sLmVuYWJsZWQgfHwgdGhpcy5kaXNhYmxlZCkge1xuICAgICAgICBhY2NbbmFtZV0gPSBjb250cm9sLnZhbHVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9KTtcbiAgfVxuICBfcmVkdWNlQ2hpbGRyZW4oaW5pdFZhbHVlLCBmbikge1xuICAgIGxldCByZXMgPSBpbml0VmFsdWU7XG4gICAgdGhpcy5fZm9yRWFjaENoaWxkKChjb250cm9sLCBuYW1lKSA9PiB7XG4gICAgICByZXMgPSBmbihyZXMsIGNvbnRyb2wsIG5hbWUpO1xuICAgIH0pO1xuICAgIHJldHVybiByZXM7XG4gIH1cbiAgX2FsbENvbnRyb2xzRGlzYWJsZWQoKSB7XG4gICAgZm9yIChjb25zdCBjb250cm9sTmFtZSBvZiBPYmplY3Qua2V5cyh0aGlzLmNvbnRyb2xzKSkge1xuICAgICAgaWYgKHRoaXMuY29udHJvbHNbY29udHJvbE5hbWVdLmVuYWJsZWQpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5jb250cm9scykubGVuZ3RoID4gMCB8fCB0aGlzLmRpc2FibGVkO1xuICB9XG4gIF9maW5kKG5hbWUpIHtcbiAgICByZXR1cm4gdGhpcy5jb250cm9scy5oYXNPd25Qcm9wZXJ0eShuYW1lKSA/IHRoaXMuY29udHJvbHNbbmFtZV0gOiBudWxsO1xuICB9XG59XG5mdW5jdGlvbiB2YWxpZGF0ZUZvcm1Hcm91cENvbnRyb2xzKGNvbnRyb2xzKSB7XG4gIGNvbnN0IGludmFsaWRLZXlzID0gT2JqZWN0LmtleXMoY29udHJvbHMpLmZpbHRlcihrZXkgPT4ga2V5LmluY2x1ZGVzKCcuJykpO1xuICBpZiAoaW52YWxpZEtleXMubGVuZ3RoID4gMCkge1xuICAgIGNvbnNvbGUud2FybihgRm9ybUdyb3VwIGtleXMgY2Fubm90IGluY2x1ZGUgXFxgLlxcYCwgcGxlYXNlIHJlcGxhY2UgdGhlIGtleXMgZm9yOiAke2ludmFsaWRLZXlzLmpvaW4oJywnKX0uYCk7XG4gIH1cbn1cbmNvbnN0IFVudHlwZWRGb3JtR3JvdXAgPSBGb3JtR3JvdXA7XG5jb25zdCBpc0Zvcm1Hcm91cCA9IGNvbnRyb2wgPT4gY29udHJvbCBpbnN0YW5jZW9mIEZvcm1Hcm91cDtcbmNsYXNzIEZvcm1SZWNvcmQgZXh0ZW5kcyBGb3JtR3JvdXAge31cbmNvbnN0IGlzRm9ybVJlY29yZCA9IGNvbnRyb2wgPT4gY29udHJvbCBpbnN0YW5jZW9mIEZvcm1SZWNvcmQ7XG5jb25zdCBDQUxMX1NFVF9ESVNBQkxFRF9TVEFURSA9IC8qI19fUFVSRV9fKi9uZXcgSW5qZWN0aW9uVG9rZW4odHlwZW9mIG5nRGV2TW9kZSA9PT0gJ3VuZGVmaW5lZCcgfHwgbmdEZXZNb2RlID8gJ0NhbGxTZXREaXNhYmxlZFN0YXRlJyA6ICcnLCB7XG4gIGZhY3Rvcnk6ICgpID0+IHNldERpc2FibGVkU3RhdGVEZWZhdWx0XG59KTtcbmNvbnN0IHNldERpc2FibGVkU3RhdGVEZWZhdWx0ID0gJ2Fsd2F5cyc7XG5mdW5jdGlvbiBjb250cm9sUGF0aChuYW1lLCBwYXJlbnQpIHtcbiAgcmV0dXJuIFsuLi5wYXJlbnQucGF0aCwgbmFtZV07XG59XG5mdW5jdGlvbiBzZXRVcENvbnRyb2woY29udHJvbCwgZGlyLCBjYWxsU2V0RGlzYWJsZWRTdGF0ZSA9IHNldERpc2FibGVkU3RhdGVEZWZhdWx0KSB7XG4gIGlmICh0eXBlb2YgbmdEZXZNb2RlID09PSAndW5kZWZpbmVkJyB8fCBuZ0Rldk1vZGUpIHtcbiAgICBpZiAoIWNvbnRyb2wpIF90aHJvd0Vycm9yKGRpciwgJ0Nhbm5vdCBmaW5kIGNvbnRyb2wgd2l0aCcpO1xuICAgIGlmICghZGlyLnZhbHVlQWNjZXNzb3IpIF90aHJvd01pc3NpbmdWYWx1ZUFjY2Vzc29yRXJyb3IoZGlyKTtcbiAgfVxuICBzZXRVcFZhbGlkYXRvcnMoY29udHJvbCwgZGlyKTtcbiAgZGlyLnZhbHVlQWNjZXNzb3Iud3JpdGVWYWx1ZShjb250cm9sLnZhbHVlKTtcbiAgaWYgKGNvbnRyb2wuZGlzYWJsZWQgfHwgY2FsbFNldERpc2FibGVkU3RhdGUgPT09ICdhbHdheXMnKSB7XG4gICAgZGlyLnZhbHVlQWNjZXNzb3Iuc2V0RGlzYWJsZWRTdGF0ZT8uKGNvbnRyb2wuZGlzYWJsZWQpO1xuICB9XG4gIHNldFVwVmlld0NoYW5nZVBpcGVsaW5lKGNvbnRyb2wsIGRpcik7XG4gIHNldFVwTW9kZWxDaGFuZ2VQaXBlbGluZShjb250cm9sLCBkaXIpO1xuICBzZXRVcEJsdXJQaXBlbGluZShjb250cm9sLCBkaXIpO1xuICBzZXRVcERpc2FibGVkQ2hhbmdlSGFuZGxlcihjb250cm9sLCBkaXIpO1xufVxuZnVuY3Rpb24gY2xlYW5VcENvbnRyb2woY29udHJvbCwgZGlyLCB2YWxpZGF0ZUNvbnRyb2xQcmVzZW5jZU9uQ2hhbmdlID0gdHJ1ZSkge1xuICBjb25zdCBub29wID0gKCkgPT4ge1xuICAgIGlmICh2YWxpZGF0ZUNvbnRyb2xQcmVzZW5jZU9uQ2hhbmdlICYmICh0eXBlb2YgbmdEZXZNb2RlID09PSAndW5kZWZpbmVkJyB8fCBuZ0Rldk1vZGUpKSB7XG4gICAgICBfbm9Db250cm9sRXJyb3IoZGlyKTtcbiAgICB9XG4gIH07XG4gIGRpcj8udmFsdWVBY2Nlc3Nvcj8ucmVnaXN0ZXJPbkNoYW5nZShub29wKTtcbiAgZGlyPy52YWx1ZUFjY2Vzc29yPy5yZWdpc3Rlck9uVG91Y2hlZChub29wKTtcbiAgY2xlYW5VcFZhbGlkYXRvcnMoY29udHJvbCwgZGlyKTtcbiAgaWYgKGNvbnRyb2wpIHtcbiAgICBkaXIuX2ludm9rZU9uRGVzdHJveUNhbGxiYWNrcygpO1xuICAgIGNvbnRyb2wuX3JlZ2lzdGVyT25Db2xsZWN0aW9uQ2hhbmdlKCgpID0+IHt9KTtcbiAgfVxufVxuZnVuY3Rpb24gcmVnaXN0ZXJPblZhbGlkYXRvckNoYW5nZSh2YWxpZGF0b3JzLCBvbkNoYW5nZSkge1xuICB2YWxpZGF0b3JzLmZvckVhY2godmFsaWRhdG9yID0+IHtcbiAgICBpZiAodmFsaWRhdG9yLnJlZ2lzdGVyT25WYWxpZGF0b3JDaGFuZ2UpIHZhbGlkYXRvci5yZWdpc3Rlck9uVmFsaWRhdG9yQ2hhbmdlKG9uQ2hhbmdlKTtcbiAgfSk7XG59XG5mdW5jdGlvbiBzZXRVcERpc2FibGVkQ2hhbmdlSGFuZGxlcihjb250cm9sLCBkaXIpIHtcbiAgaWYgKGRpci52YWx1ZUFjY2Vzc29yLnNldERpc2FibGVkU3RhdGUpIHtcbiAgICBjb25zdCBvbkRpc2FibGVkQ2hhbmdlID0gaXNEaXNhYmxlZCA9PiB7XG4gICAgICBkaXIudmFsdWVBY2Nlc3Nvci5zZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQpO1xuICAgIH07XG4gICAgY29udHJvbC5yZWdpc3Rlck9uRGlzYWJsZWRDaGFuZ2Uob25EaXNhYmxlZENoYW5nZSk7XG4gICAgZGlyLl9yZWdpc3Rlck9uRGVzdHJveSgoKSA9PiB7XG4gICAgICBjb250cm9sLl91bnJlZ2lzdGVyT25EaXNhYmxlZENoYW5nZShvbkRpc2FibGVkQ2hhbmdlKTtcbiAgICB9KTtcbiAgfVxufVxuZnVuY3Rpb24gc2V0VXBWYWxpZGF0b3JzKGNvbnRyb2wsIGRpcikge1xuICBjb25zdCB2YWxpZGF0b3JzID0gZ2V0Q29udHJvbFZhbGlkYXRvcnMoY29udHJvbCk7XG4gIGlmIChkaXIudmFsaWRhdG9yICE9PSBudWxsKSB7XG4gICAgY29udHJvbC5zZXRWYWxpZGF0b3JzKG1lcmdlVmFsaWRhdG9ycyh2YWxpZGF0b3JzLCBkaXIudmFsaWRhdG9yKSk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIHZhbGlkYXRvcnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjb250cm9sLnNldFZhbGlkYXRvcnMoW3ZhbGlkYXRvcnNdKTtcbiAgfVxuICBjb25zdCBhc3luY1ZhbGlkYXRvcnMgPSBnZXRDb250cm9sQXN5bmNWYWxpZGF0b3JzKGNvbnRyb2wpO1xuICBpZiAoZGlyLmFzeW5jVmFsaWRhdG9yICE9PSBudWxsKSB7XG4gICAgY29udHJvbC5zZXRBc3luY1ZhbGlkYXRvcnMobWVyZ2VWYWxpZGF0b3JzKGFzeW5jVmFsaWRhdG9ycywgZGlyLmFzeW5jVmFsaWRhdG9yKSk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGFzeW5jVmFsaWRhdG9ycyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNvbnRyb2wuc2V0QXN5bmNWYWxpZGF0b3JzKFthc3luY1ZhbGlkYXRvcnNdKTtcbiAgfVxuICBjb25zdCBvblZhbGlkYXRvckNoYW5nZSA9ICgpID0+IGNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICByZWdpc3Rlck9uVmFsaWRhdG9yQ2hhbmdlKGRpci5fcmF3VmFsaWRhdG9ycywgb25WYWxpZGF0b3JDaGFuZ2UpO1xuICByZWdpc3Rlck9uVmFsaWRhdG9yQ2hhbmdlKGRpci5fcmF3QXN5bmNWYWxpZGF0b3JzLCBvblZhbGlkYXRvckNoYW5nZSk7XG59XG5mdW5jdGlvbiBjbGVhblVwVmFsaWRhdG9ycyhjb250cm9sLCBkaXIpIHtcbiAgbGV0IGlzQ29udHJvbFVwZGF0ZWQgPSBmYWxzZTtcbiAgaWYgKGNvbnRyb2wgIT09IG51bGwpIHtcbiAgICBpZiAoZGlyLnZhbGlkYXRvciAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgdmFsaWRhdG9ycyA9IGdldENvbnRyb2xWYWxpZGF0b3JzKGNvbnRyb2wpO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsaWRhdG9ycykgJiYgdmFsaWRhdG9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IHVwZGF0ZWRWYWxpZGF0b3JzID0gdmFsaWRhdG9ycy5maWx0ZXIodmFsaWRhdG9yID0+IHZhbGlkYXRvciAhPT0gZGlyLnZhbGlkYXRvcik7XG4gICAgICAgIGlmICh1cGRhdGVkVmFsaWRhdG9ycy5sZW5ndGggIT09IHZhbGlkYXRvcnMubGVuZ3RoKSB7XG4gICAgICAgICAgaXNDb250cm9sVXBkYXRlZCA9IHRydWU7XG4gICAgICAgICAgY29udHJvbC5zZXRWYWxpZGF0b3JzKHVwZGF0ZWRWYWxpZGF0b3JzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZGlyLmFzeW5jVmFsaWRhdG9yICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBhc3luY1ZhbGlkYXRvcnMgPSBnZXRDb250cm9sQXN5bmNWYWxpZGF0b3JzKGNvbnRyb2wpO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYXN5bmNWYWxpZGF0b3JzKSAmJiBhc3luY1ZhbGlkYXRvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCB1cGRhdGVkQXN5bmNWYWxpZGF0b3JzID0gYXN5bmNWYWxpZGF0b3JzLmZpbHRlcihhc3luY1ZhbGlkYXRvciA9PiBhc3luY1ZhbGlkYXRvciAhPT0gZGlyLmFzeW5jVmFsaWRhdG9yKTtcbiAgICAgICAgaWYgKHVwZGF0ZWRBc3luY1ZhbGlkYXRvcnMubGVuZ3RoICE9PSBhc3luY1ZhbGlkYXRvcnMubGVuZ3RoKSB7XG4gICAgICAgICAgaXNDb250cm9sVXBkYXRlZCA9IHRydWU7XG4gICAgICAgICAgY29udHJvbC5zZXRBc3luY1ZhbGlkYXRvcnModXBkYXRlZEFzeW5jVmFsaWRhdG9ycyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgY29uc3Qgbm9vcCA9ICgpID0+IHt9O1xuICByZWdpc3Rlck9uVmFsaWRhdG9yQ2hhbmdlKGRpci5fcmF3VmFsaWRhdG9ycywgbm9vcCk7XG4gIHJlZ2lzdGVyT25WYWxpZGF0b3JDaGFuZ2UoZGlyLl9yYXdBc3luY1ZhbGlkYXRvcnMsIG5vb3ApO1xuICByZXR1cm4gaXNDb250cm9sVXBkYXRlZDtcbn1cbmZ1bmN0aW9uIHNldFVwVmlld0NoYW5nZVBpcGVsaW5lKGNvbnRyb2wsIGRpcikge1xuICBkaXIudmFsdWVBY2Nlc3Nvci5yZWdpc3Rlck9uQ2hhbmdlKG5ld1ZhbHVlID0+IHtcbiAgICBjb250cm9sLl9wZW5kaW5nVmFsdWUgPSBuZXdWYWx1ZTtcbiAgICBjb250cm9sLl9wZW5kaW5nQ2hhbmdlID0gdHJ1ZTtcbiAgICBjb250cm9sLl9wZW5kaW5nRGlydHkgPSB0cnVlO1xuICAgIGlmIChjb250cm9sLnVwZGF0ZU9uID09PSAnY2hhbmdlJykgdXBkYXRlQ29udHJvbChjb250cm9sLCBkaXIpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIHNldFVwQmx1clBpcGVsaW5lKGNvbnRyb2wsIGRpcikge1xuICBkaXIudmFsdWVBY2Nlc3Nvci5yZWdpc3Rlck9uVG91Y2hlZCgoKSA9PiB7XG4gICAgY29udHJvbC5fcGVuZGluZ1RvdWNoZWQgPSB0cnVlO1xuICAgIGlmIChjb250cm9sLnVwZGF0ZU9uID09PSAnYmx1cicgJiYgY29udHJvbC5fcGVuZGluZ0NoYW5nZSkgdXBkYXRlQ29udHJvbChjb250cm9sLCBkaXIpO1xuICAgIGlmIChjb250cm9sLnVwZGF0ZU9uICE9PSAnc3VibWl0JykgY29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XG4gIH0pO1xufVxuZnVuY3Rpb24gdXBkYXRlQ29udHJvbChjb250cm9sLCBkaXIpIHtcbiAgaWYgKGNvbnRyb2wuX3BlbmRpbmdEaXJ0eSkgY29udHJvbC5tYXJrQXNEaXJ0eSgpO1xuICBjb250cm9sLnNldFZhbHVlKGNvbnRyb2wuX3BlbmRpbmdWYWx1ZSwge1xuICAgIGVtaXRNb2RlbFRvVmlld0NoYW5nZTogZmFsc2VcbiAgfSk7XG4gIGRpci52aWV3VG9Nb2RlbFVwZGF0ZShjb250cm9sLl9wZW5kaW5nVmFsdWUpO1xuICBjb250cm9sLl9wZW5kaW5nQ2hhbmdlID0gZmFsc2U7XG59XG5mdW5jdGlvbiBzZXRVcE1vZGVsQ2hhbmdlUGlwZWxpbmUoY29udHJvbCwgZGlyKSB7XG4gIGNvbnN0IG9uQ2hhbmdlID0gKG5ld1ZhbHVlLCBlbWl0TW9kZWxFdmVudCkgPT4ge1xuICAgIGRpci52YWx1ZUFjY2Vzc29yLndyaXRlVmFsdWUobmV3VmFsdWUpO1xuICAgIGlmIChlbWl0TW9kZWxFdmVudCkgZGlyLnZpZXdUb01vZGVsVXBkYXRlKG5ld1ZhbHVlKTtcbiAgfTtcbiAgY29udHJvbC5yZWdpc3Rlck9uQ2hhbmdlKG9uQ2hhbmdlKTtcbiAgZGlyLl9yZWdpc3Rlck9uRGVzdHJveSgoKSA9PiB7XG4gICAgY29udHJvbC5fdW5yZWdpc3Rlck9uQ2hhbmdlKG9uQ2hhbmdlKTtcbiAgfSk7XG59XG5mdW5jdGlvbiBzZXRVcEZvcm1Db250YWluZXIoY29udHJvbCwgZGlyKSB7XG4gIGlmIChjb250cm9sID09IG51bGwgJiYgKHR5cGVvZiBuZ0Rldk1vZGUgPT09ICd1bmRlZmluZWQnIHx8IG5nRGV2TW9kZSkpIF90aHJvd0Vycm9yKGRpciwgJ0Nhbm5vdCBmaW5kIGNvbnRyb2wgd2l0aCcpO1xuICBzZXRVcFZhbGlkYXRvcnMoY29udHJvbCwgZGlyKTtcbn1cbmZ1bmN0aW9uIGNsZWFuVXBGb3JtQ29udGFpbmVyKGNvbnRyb2wsIGRpcikge1xuICByZXR1cm4gY2xlYW5VcFZhbGlkYXRvcnMoY29udHJvbCwgZGlyKTtcbn1cbmZ1bmN0aW9uIF9ub0NvbnRyb2xFcnJvcihkaXIpIHtcbiAgcmV0dXJuIF90aHJvd0Vycm9yKGRpciwgJ1RoZXJlIGlzIG5vIEZvcm1Db250cm9sIGluc3RhbmNlIGF0dGFjaGVkIHRvIGZvcm0gY29udHJvbCBlbGVtZW50IHdpdGgnKTtcbn1cbmZ1bmN0aW9uIF90aHJvd0Vycm9yKGRpciwgbWVzc2FnZSkge1xuICBjb25zdCBtZXNzYWdlRW5kID0gX2Rlc2NyaWJlQ29udHJvbExvY2F0aW9uKGRpcik7XG4gIHRocm93IG5ldyBFcnJvcihgJHttZXNzYWdlfSAke21lc3NhZ2VFbmR9YCk7XG59XG5mdW5jdGlvbiBfZGVzY3JpYmVDb250cm9sTG9jYXRpb24oZGlyKSB7XG4gIGNvbnN0IHBhdGggPSBkaXIucGF0aDtcbiAgaWYgKHBhdGggJiYgcGF0aC5sZW5ndGggPiAxKSByZXR1cm4gYHBhdGg6ICcke3BhdGguam9pbignIC0+ICcpfSdgO1xuICBpZiAocGF0aD8uWzBdKSByZXR1cm4gYG5hbWU6ICcke3BhdGh9J2A7XG4gIHJldHVybiAndW5zcGVjaWZpZWQgbmFtZSBhdHRyaWJ1dGUnO1xufVxuZnVuY3Rpb24gX3Rocm93TWlzc2luZ1ZhbHVlQWNjZXNzb3JFcnJvcihkaXIpIHtcbiAgY29uc3QgbG9jID0gX2Rlc2NyaWJlQ29udHJvbExvY2F0aW9uKGRpcik7XG4gIHRocm93IG5ldyBfUnVudGltZUVycm9yKC0xMjAzLCBgTm8gdmFsdWUgYWNjZXNzb3IgZm9yIGZvcm0gY29udHJvbCAke2xvY30uYCk7XG59XG5mdW5jdGlvbiBfdGhyb3dJbnZhbGlkVmFsdWVBY2Nlc3NvckVycm9yKGRpcikge1xuICBjb25zdCBsb2MgPSBfZGVzY3JpYmVDb250cm9sTG9jYXRpb24oZGlyKTtcbiAgdGhyb3cgbmV3IF9SdW50aW1lRXJyb3IoMTIwMCwgYFZhbHVlIGFjY2Vzc29yIHdhcyBub3QgcHJvdmlkZWQgYXMgYW4gYXJyYXkgZm9yIGZvcm0gY29udHJvbCB3aXRoICR7bG9jfS4gYCArIGBDaGVjayB0aGF0IHRoZSBcXGBOR19WQUxVRV9BQ0NFU1NPUlxcYCB0b2tlbiBpcyBjb25maWd1cmVkIGFzIGEgXFxgbXVsdGk6IHRydWVcXGAgcHJvdmlkZXIuYCk7XG59XG5mdW5jdGlvbiBpc1Byb3BlcnR5VXBkYXRlZChjaGFuZ2VzLCB2aWV3TW9kZWwpIHtcbiAgaWYgKCFjaGFuZ2VzLmhhc093blByb3BlcnR5KCdtb2RlbCcpKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IGNoYW5nZSA9IGNoYW5nZXNbJ21vZGVsJ107XG4gIGlmIChjaGFuZ2UuaXNGaXJzdENoYW5nZSgpKSByZXR1cm4gdHJ1ZTtcbiAgcmV0dXJuICFPYmplY3QuaXModmlld01vZGVsLCBjaGFuZ2UuY3VycmVudFZhbHVlKTtcbn1cbmZ1bmN0aW9uIGlzQnVpbHRJbkFjY2Vzc29yKHZhbHVlQWNjZXNzb3IpIHtcbiAgcmV0dXJuIE9iamVjdC5nZXRQcm90b3R5cGVPZih2YWx1ZUFjY2Vzc29yLmNvbnN0cnVjdG9yKSA9PT0gQnVpbHRJbkNvbnRyb2xWYWx1ZUFjY2Vzc29yO1xufVxuZnVuY3Rpb24gc3luY1BlbmRpbmdDb250cm9scyhmb3JtLCBkaXJlY3RpdmVzKSB7XG4gIGZvcm0uX3N5bmNQZW5kaW5nQ29udHJvbHMoKTtcbiAgZGlyZWN0aXZlcy5mb3JFYWNoKGRpciA9PiB7XG4gICAgY29uc3QgY29udHJvbCA9IGRpci5jb250cm9sO1xuICAgIGlmIChjb250cm9sLnVwZGF0ZU9uID09PSAnc3VibWl0JyAmJiBjb250cm9sLl9wZW5kaW5nQ2hhbmdlKSB7XG4gICAgICBkaXIudmlld1RvTW9kZWxVcGRhdGUoY29udHJvbC5fcGVuZGluZ1ZhbHVlKTtcbiAgICAgIGNvbnRyb2wuX3BlbmRpbmdDaGFuZ2UgPSBmYWxzZTtcbiAgICB9XG4gIH0pO1xufVxuZnVuY3Rpb24gc2VsZWN0VmFsdWVBY2Nlc3NvcihkaXIsIHZhbHVlQWNjZXNzb3JzKSB7XG4gIGlmICghdmFsdWVBY2Nlc3NvcnMpIHJldHVybiBudWxsO1xuICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWVBY2Nlc3NvcnMpICYmICh0eXBlb2YgbmdEZXZNb2RlID09PSAndW5kZWZpbmVkJyB8fCBuZ0Rldk1vZGUpKSBfdGhyb3dJbnZhbGlkVmFsdWVBY2Nlc3NvckVycm9yKGRpcik7XG4gIGxldCBkZWZhdWx0QWNjZXNzb3IgPSB1bmRlZmluZWQ7XG4gIGxldCBidWlsdGluQWNjZXNzb3IgPSB1bmRlZmluZWQ7XG4gIGxldCBjdXN0b21BY2Nlc3NvciA9IHVuZGVmaW5lZDtcbiAgdmFsdWVBY2Nlc3NvcnMuZm9yRWFjaCh2ID0+IHtcbiAgICBpZiAodi5jb25zdHJ1Y3RvciA9PT0gRGVmYXVsdFZhbHVlQWNjZXNzb3IpIHtcbiAgICAgIGRlZmF1bHRBY2Nlc3NvciA9IHY7XG4gICAgfSBlbHNlIGlmIChpc0J1aWx0SW5BY2Nlc3Nvcih2KSkge1xuICAgICAgaWYgKGJ1aWx0aW5BY2Nlc3NvciAmJiAodHlwZW9mIG5nRGV2TW9kZSA9PT0gJ3VuZGVmaW5lZCcgfHwgbmdEZXZNb2RlKSkgX3Rocm93RXJyb3IoZGlyLCAnTW9yZSB0aGFuIG9uZSBidWlsdC1pbiB2YWx1ZSBhY2Nlc3NvciBtYXRjaGVzIGZvcm0gY29udHJvbCB3aXRoJyk7XG4gICAgICBidWlsdGluQWNjZXNzb3IgPSB2O1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoY3VzdG9tQWNjZXNzb3IgJiYgKHR5cGVvZiBuZ0Rldk1vZGUgPT09ICd1bmRlZmluZWQnIHx8IG5nRGV2TW9kZSkpIF90aHJvd0Vycm9yKGRpciwgJ01vcmUgdGhhbiBvbmUgY3VzdG9tIHZhbHVlIGFjY2Vzc29yIG1hdGNoZXMgZm9ybSBjb250cm9sIHdpdGgnKTtcbiAgICAgIGN1c3RvbUFjY2Vzc29yID0gdjtcbiAgICB9XG4gIH0pO1xuICBpZiAoY3VzdG9tQWNjZXNzb3IpIHJldHVybiBjdXN0b21BY2Nlc3NvcjtcbiAgaWYgKGJ1aWx0aW5BY2Nlc3NvcikgcmV0dXJuIGJ1aWx0aW5BY2Nlc3NvcjtcbiAgaWYgKGRlZmF1bHRBY2Nlc3NvcikgcmV0dXJuIGRlZmF1bHRBY2Nlc3NvcjtcbiAgaWYgKHR5cGVvZiBuZ0Rldk1vZGUgPT09ICd1bmRlZmluZWQnIHx8IG5nRGV2TW9kZSkge1xuICAgIF90aHJvd0Vycm9yKGRpciwgJ05vIHZhbGlkIHZhbHVlIGFjY2Vzc29yIGZvciBmb3JtIGNvbnRyb2wgd2l0aCcpO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuZnVuY3Rpb24gcmVtb3ZlTGlzdEl0ZW0kMShsaXN0LCBlbCkge1xuICBjb25zdCBpbmRleCA9IGxpc3QuaW5kZXhPZihlbCk7XG4gIGlmIChpbmRleCA+IC0xKSBsaXN0LnNwbGljZShpbmRleCwgMSk7XG59XG5mdW5jdGlvbiBfbmdNb2RlbFdhcm5pbmcobmFtZSwgdHlwZSwgaW5zdGFuY2UsIHdhcm5pbmdDb25maWcpIHtcbiAgaWYgKHdhcm5pbmdDb25maWcgPT09ICduZXZlcicpIHJldHVybjtcbiAgaWYgKCh3YXJuaW5nQ29uZmlnID09PSBudWxsIHx8IHdhcm5pbmdDb25maWcgPT09ICdvbmNlJykgJiYgIXR5cGUuX25nTW9kZWxXYXJuaW5nU2VudE9uY2UgfHwgd2FybmluZ0NvbmZpZyA9PT0gJ2Fsd2F5cycgJiYgIWluc3RhbmNlLl9uZ01vZGVsV2FybmluZ1NlbnQpIHtcbiAgICBjb25zb2xlLndhcm4obmdNb2RlbFdhcm5pbmcobmFtZSkpO1xuICAgIHR5cGUuX25nTW9kZWxXYXJuaW5nU2VudE9uY2UgPSB0cnVlO1xuICAgIGluc3RhbmNlLl9uZ01vZGVsV2FybmluZ1NlbnQgPSB0cnVlO1xuICB9XG59XG5jb25zdCBmb3JtRGlyZWN0aXZlUHJvdmlkZXIkMiA9IHtcbiAgcHJvdmlkZTogQ29udHJvbENvbnRhaW5lcixcbiAgdXNlRXhpc3Rpbmc6IC8qI19fUFVSRV9fKi9mb3J3YXJkUmVmKCgpID0+IE5nRm9ybSlcbn07XG5jb25zdCByZXNvbHZlZFByb21pc2UkMSA9IC8qI19fUFVSRV9fKi8oKCkgPT4gUHJvbWlzZS5yZXNvbHZlKCkpKCk7XG5sZXQgTmdGb3JtID0gLyojX19QVVJFX18qLygoKSA9PiB7XG4gIGNsYXNzIE5nRm9ybSBleHRlbmRzIENvbnRyb2xDb250YWluZXIge1xuICAgIGNhbGxTZXREaXNhYmxlZFN0YXRlO1xuICAgIGdldCBzdWJtaXR0ZWQoKSB7XG4gICAgICByZXR1cm4gdW50cmFja2VkKHRoaXMuc3VibWl0dGVkUmVhY3RpdmUpO1xuICAgIH1cbiAgICBfc3VibWl0dGVkID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5zdWJtaXR0ZWRSZWFjdGl2ZSgpLCAuLi4obmdEZXZNb2RlID8gW3tcbiAgICAgIGRlYnVnTmFtZTogXCJfc3VibWl0dGVkXCJcbiAgICB9XSA6IFtdKSk7XG4gICAgc3VibWl0dGVkUmVhY3RpdmUgPSBzaWduYWwoZmFsc2UsIC4uLihuZ0Rldk1vZGUgPyBbe1xuICAgICAgZGVidWdOYW1lOiBcInN1Ym1pdHRlZFJlYWN0aXZlXCJcbiAgICB9XSA6IFtdKSk7XG4gICAgX2RpcmVjdGl2ZXMgPSBuZXcgU2V0KCk7XG4gICAgZm9ybTtcbiAgICBuZ1N1Ym1pdCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICBvcHRpb25zO1xuICAgIGNvbnN0cnVjdG9yKHZhbGlkYXRvcnMsIGFzeW5jVmFsaWRhdG9ycywgY2FsbFNldERpc2FibGVkU3RhdGUpIHtcbiAgICAgIHN1cGVyKCk7XG4gICAgICB0aGlzLmNhbGxTZXREaXNhYmxlZFN0YXRlID0gY2FsbFNldERpc2FibGVkU3RhdGU7XG4gICAgICB0aGlzLmZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9LCBjb21wb3NlVmFsaWRhdG9ycyh2YWxpZGF0b3JzKSwgY29tcG9zZUFzeW5jVmFsaWRhdG9ycyhhc3luY1ZhbGlkYXRvcnMpKTtcbiAgICB9XG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgdGhpcy5fc2V0VXBkYXRlU3RyYXRlZ3koKTtcbiAgICB9XG4gICAgZ2V0IGZvcm1EaXJlY3RpdmUoKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgZ2V0IGNvbnRyb2woKSB7XG4gICAgICByZXR1cm4gdGhpcy5mb3JtO1xuICAgIH1cbiAgICBnZXQgcGF0aCgpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgZ2V0IGNvbnRyb2xzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZm9ybS5jb250cm9scztcbiAgICB9XG4gICAgYWRkQ29udHJvbChkaXIpIHtcbiAgICAgIHJlc29sdmVkUHJvbWlzZSQxLnRoZW4oKCkgPT4ge1xuICAgICAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLl9maW5kQ29udGFpbmVyKGRpci5wYXRoKTtcbiAgICAgICAgZGlyLmNvbnRyb2wgPSBjb250YWluZXIucmVnaXN0ZXJDb250cm9sKGRpci5uYW1lLCBkaXIuY29udHJvbCk7XG4gICAgICAgIHNldFVwQ29udHJvbChkaXIuY29udHJvbCwgZGlyLCB0aGlzLmNhbGxTZXREaXNhYmxlZFN0YXRlKTtcbiAgICAgICAgZGlyLmNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7XG4gICAgICAgICAgZW1pdEV2ZW50OiBmYWxzZVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fZGlyZWN0aXZlcy5hZGQoZGlyKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBnZXRDb250cm9sKGRpcikge1xuICAgICAgcmV0dXJuIHRoaXMuZm9ybS5nZXQoZGlyLnBhdGgpO1xuICAgIH1cbiAgICByZW1vdmVDb250cm9sKGRpcikge1xuICAgICAgcmVzb2x2ZWRQcm9taXNlJDEudGhlbigoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuX2ZpbmRDb250YWluZXIoZGlyLnBhdGgpO1xuICAgICAgICBjb250YWluZXI/LnJlbW92ZUNvbnRyb2woZGlyLm5hbWUpO1xuICAgICAgICB0aGlzLl9kaXJlY3RpdmVzLmRlbGV0ZShkaXIpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIGFkZEZvcm1Hcm91cChkaXIpIHtcbiAgICAgIHJlc29sdmVkUHJvbWlzZSQxLnRoZW4oKCkgPT4ge1xuICAgICAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLl9maW5kQ29udGFpbmVyKGRpci5wYXRoKTtcbiAgICAgICAgY29uc3QgZ3JvdXAgPSBuZXcgRm9ybUdyb3VwKHt9KTtcbiAgICAgICAgc2V0VXBGb3JtQ29udGFpbmVyKGdyb3VwLCBkaXIpO1xuICAgICAgICBjb250YWluZXIucmVnaXN0ZXJDb250cm9sKGRpci5uYW1lLCBncm91cCk7XG4gICAgICAgIGdyb3VwLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe1xuICAgICAgICAgIGVtaXRFdmVudDogZmFsc2VcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmVtb3ZlRm9ybUdyb3VwKGRpcikge1xuICAgICAgcmVzb2x2ZWRQcm9taXNlJDEudGhlbigoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuX2ZpbmRDb250YWluZXIoZGlyLnBhdGgpO1xuICAgICAgICBjb250YWluZXI/LnJlbW92ZUNvbnRyb2w/LihkaXIubmFtZSk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgZ2V0Rm9ybUdyb3VwKGRpcikge1xuICAgICAgcmV0dXJuIHRoaXMuZm9ybS5nZXQoZGlyLnBhdGgpO1xuICAgIH1cbiAgICB1cGRhdGVNb2RlbChkaXIsIHZhbHVlKSB7XG4gICAgICByZXNvbHZlZFByb21pc2UkMS50aGVuKCgpID0+IHtcbiAgICAgICAgY29uc3QgY3RybCA9IHRoaXMuZm9ybS5nZXQoZGlyLnBhdGgpO1xuICAgICAgICBjdHJsLnNldFZhbHVlKHZhbHVlKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBzZXRWYWx1ZSh2YWx1ZSkge1xuICAgICAgdGhpcy5jb250cm9sLnNldFZhbHVlKHZhbHVlKTtcbiAgICB9XG4gICAgb25TdWJtaXQoJGV2ZW50KSB7XG4gICAgICB0aGlzLnN1Ym1pdHRlZFJlYWN0aXZlLnNldCh0cnVlKTtcbiAgICAgIHN5bmNQZW5kaW5nQ29udHJvbHModGhpcy5mb3JtLCB0aGlzLl9kaXJlY3RpdmVzKTtcbiAgICAgIHRoaXMubmdTdWJtaXQuZW1pdCgkZXZlbnQpO1xuICAgICAgdGhpcy5mb3JtLl9ldmVudHMubmV4dChuZXcgRm9ybVN1Ym1pdHRlZEV2ZW50KHRoaXMuY29udHJvbCkpO1xuICAgICAgcmV0dXJuICRldmVudD8udGFyZ2V0Py5tZXRob2QgPT09ICdkaWFsb2cnO1xuICAgIH1cbiAgICBvblJlc2V0KCkge1xuICAgICAgdGhpcy5yZXNldEZvcm0oKTtcbiAgICB9XG4gICAgcmVzZXRGb3JtKHZhbHVlID0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmZvcm0ucmVzZXQodmFsdWUpO1xuICAgICAgdGhpcy5zdWJtaXR0ZWRSZWFjdGl2ZS5zZXQoZmFsc2UpO1xuICAgIH1cbiAgICBfc2V0VXBkYXRlU3RyYXRlZ3koKSB7XG4gICAgICBpZiAodGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy51cGRhdGVPbiAhPSBudWxsKSB7XG4gICAgICAgIHRoaXMuZm9ybS5fdXBkYXRlT24gPSB0aGlzLm9wdGlvbnMudXBkYXRlT247XG4gICAgICB9XG4gICAgfVxuICAgIF9maW5kQ29udGFpbmVyKHBhdGgpIHtcbiAgICAgIHBhdGgucG9wKCk7XG4gICAgICByZXR1cm4gcGF0aC5sZW5ndGggPyB0aGlzLmZvcm0uZ2V0KHBhdGgpIDogdGhpcy5mb3JtO1xuICAgIH1cbiAgICBzdGF0aWMgybVmYWMgPSBmdW5jdGlvbiBOZ0Zvcm1fRmFjdG9yeShfX25nRmFjdG9yeVR5cGVfXykge1xuICAgICAgcmV0dXJuIG5ldyAoX19uZ0ZhY3RvcnlUeXBlX18gfHwgTmdGb3JtKShpMC7Jtcm1ZGlyZWN0aXZlSW5qZWN0KE5HX1ZBTElEQVRPUlMsIDEwKSwgaTAuybXJtWRpcmVjdGl2ZUluamVjdChOR19BU1lOQ19WQUxJREFUT1JTLCAxMCksIGkwLsm1ybVkaXJlY3RpdmVJbmplY3QoQ0FMTF9TRVRfRElTQUJMRURfU1RBVEUsIDgpKTtcbiAgICB9O1xuICAgIHN0YXRpYyDJtWRpciA9IC8qIEBfX1BVUkVfXyAqL2kwLsm1ybVkZWZpbmVEaXJlY3RpdmUoe1xuICAgICAgdHlwZTogTmdGb3JtLFxuICAgICAgc2VsZWN0b3JzOiBbW1wiZm9ybVwiLCAzLCBcIm5nTm9Gb3JtXCIsIFwiXCIsIDMsIFwiZm9ybUdyb3VwXCIsIFwiXCIsIDMsIFwiZm9ybUFycmF5XCIsIFwiXCJdLCBbXCJuZy1mb3JtXCJdLCBbXCJcIiwgXCJuZ0Zvcm1cIiwgXCJcIl1dLFxuICAgICAgaG9zdEJpbmRpbmdzOiBmdW5jdGlvbiBOZ0Zvcm1fSG9zdEJpbmRpbmdzKHJmLCBjdHgpIHtcbiAgICAgICAgaWYgKHJmICYgMSkge1xuICAgICAgICAgIGkwLsm1ybVsaXN0ZW5lcihcInN1Ym1pdFwiLCBmdW5jdGlvbiBOZ0Zvcm1fc3VibWl0X0hvc3RCaW5kaW5nSGFuZGxlcigkZXZlbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBjdHgub25TdWJtaXQoJGV2ZW50KTtcbiAgICAgICAgICB9KShcInJlc2V0XCIsIGZ1bmN0aW9uIE5nRm9ybV9yZXNldF9Ib3N0QmluZGluZ0hhbmRsZXIoKSB7XG4gICAgICAgICAgICByZXR1cm4gY3R4Lm9uUmVzZXQoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGlucHV0czoge1xuICAgICAgICBvcHRpb25zOiBbMCwgXCJuZ0Zvcm1PcHRpb25zXCIsIFwib3B0aW9uc1wiXVxuICAgICAgfSxcbiAgICAgIG91dHB1dHM6IHtcbiAgICAgICAgbmdTdWJtaXQ6IFwibmdTdWJtaXRcIlxuICAgICAgfSxcbiAgICAgIGV4cG9ydEFzOiBbXCJuZ0Zvcm1cIl0sXG4gICAgICBzdGFuZGFsb25lOiBmYWxzZSxcbiAgICAgIGZlYXR1cmVzOiBbaTAuybXJtVByb3ZpZGVyc0ZlYXR1cmUoW2Zvcm1EaXJlY3RpdmVQcm92aWRlciQyXSksIGkwLsm1ybVJbmhlcml0RGVmaW5pdGlvbkZlYXR1cmVdXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIE5nRm9ybTtcbn0pKCk7XG4vKiNfX1BVUkVfXyovKCgpID0+IHtcbiAgKHR5cGVvZiBuZ0Rldk1vZGUgPT09IFwidW5kZWZpbmVkXCIgfHwgbmdEZXZNb2RlKSAmJiB2b2lkIDA7XG59KSgpO1xuZnVuY3Rpb24gcmVtb3ZlTGlzdEl0ZW0obGlzdCwgZWwpIHtcbiAgY29uc3QgaW5kZXggPSBsaXN0LmluZGV4T2YoZWwpO1xuICBpZiAoaW5kZXggPiAtMSkgbGlzdC5zcGxpY2UoaW5kZXgsIDEpO1xufVxuZnVuY3Rpb24gaXNGb3JtQ29udHJvbFN0YXRlKGZvcm1TdGF0ZSkge1xuICByZXR1cm4gdHlwZW9mIGZvcm1TdGF0ZSA9PT0gJ29iamVjdCcgJiYgZm9ybVN0YXRlICE9PSBudWxsICYmIE9iamVjdC5rZXlzKGZvcm1TdGF0ZSkubGVuZ3RoID09PSAyICYmICd2YWx1ZScgaW4gZm9ybVN0YXRlICYmICdkaXNhYmxlZCcgaW4gZm9ybVN0YXRlO1xufVxuY29uc3QgRm9ybUNvbnRyb2wgPSBjbGFzcyBGb3JtQ29udHJvbCBleHRlbmRzIEFic3RyYWN0Q29udHJvbCB7XG4gIGRlZmF1bHRWYWx1ZSA9IG51bGw7XG4gIF9vbkNoYW5nZSA9IFtdO1xuICBfcGVuZGluZ1ZhbHVlO1xuICBfcGVuZGluZ0NoYW5nZSA9IGZhbHNlO1xuICBjb25zdHJ1Y3Rvcihmb3JtU3RhdGUgPSBudWxsLCB2YWxpZGF0b3JPck9wdHMsIGFzeW5jVmFsaWRhdG9yKSB7XG4gICAgc3VwZXIocGlja1ZhbGlkYXRvcnModmFsaWRhdG9yT3JPcHRzKSwgcGlja0FzeW5jVmFsaWRhdG9ycyhhc3luY1ZhbGlkYXRvciwgdmFsaWRhdG9yT3JPcHRzKSk7XG4gICAgdGhpcy5fYXBwbHlGb3JtU3RhdGUoZm9ybVN0YXRlKTtcbiAgICB0aGlzLl9zZXRVcGRhdGVTdHJhdGVneSh2YWxpZGF0b3JPck9wdHMpO1xuICAgIHRoaXMuX2luaXRPYnNlcnZhYmxlcygpO1xuICAgIHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7XG4gICAgICBvbmx5U2VsZjogdHJ1ZSxcbiAgICAgIGVtaXRFdmVudDogISF0aGlzLmFzeW5jVmFsaWRhdG9yXG4gICAgfSk7XG4gICAgaWYgKGlzT3B0aW9uc09iaih2YWxpZGF0b3JPck9wdHMpICYmICh2YWxpZGF0b3JPck9wdHMubm9uTnVsbGFibGUgfHwgdmFsaWRhdG9yT3JPcHRzLmluaXRpYWxWYWx1ZUlzRGVmYXVsdCkpIHtcbiAgICAgIGlmIChpc0Zvcm1Db250cm9sU3RhdGUoZm9ybVN0YXRlKSkge1xuICAgICAgICB0aGlzLmRlZmF1bHRWYWx1ZSA9IGZvcm1TdGF0ZS52YWx1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZGVmYXVsdFZhbHVlID0gZm9ybVN0YXRlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBzZXRWYWx1ZSh2YWx1ZSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgdGhpcy52YWx1ZSA9IHRoaXMuX3BlbmRpbmdWYWx1ZSA9IHZhbHVlO1xuICAgIGlmICh0aGlzLl9vbkNoYW5nZS5sZW5ndGggJiYgb3B0aW9ucy5lbWl0TW9kZWxUb1ZpZXdDaGFuZ2UgIT09IGZhbHNlKSB7XG4gICAgICB0aGlzLl9vbkNoYW5nZS5mb3JFYWNoKGNoYW5nZUZuID0+IGNoYW5nZUZuKHRoaXMudmFsdWUsIG9wdGlvbnMuZW1pdFZpZXdUb01vZGVsQ2hhbmdlICE9PSBmYWxzZSkpO1xuICAgIH1cbiAgICB0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkob3B0aW9ucyk7XG4gIH1cbiAgcGF0Y2hWYWx1ZSh2YWx1ZSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgdGhpcy5zZXRWYWx1ZSh2YWx1ZSwgb3B0aW9ucyk7XG4gIH1cbiAgcmVzZXQoZm9ybVN0YXRlID0gdGhpcy5kZWZhdWx0VmFsdWUsIG9wdGlvbnMgPSB7fSkge1xuICAgIHRoaXMuX2FwcGx5Rm9ybVN0YXRlKGZvcm1TdGF0ZSk7XG4gICAgdGhpcy5tYXJrQXNQcmlzdGluZShvcHRpb25zKTtcbiAgICB0aGlzLm1hcmtBc1VudG91Y2hlZChvcHRpb25zKTtcbiAgICB0aGlzLnNldFZhbHVlKHRoaXMudmFsdWUsIG9wdGlvbnMpO1xuICAgIGlmIChvcHRpb25zLm92ZXJ3cml0ZURlZmF1bHRWYWx1ZSkge1xuICAgICAgdGhpcy5kZWZhdWx0VmFsdWUgPSB0aGlzLnZhbHVlO1xuICAgIH1cbiAgICB0aGlzLl9wZW5kaW5nQ2hhbmdlID0gZmFsc2U7XG4gICAgaWYgKG9wdGlvbnM/LmVtaXRFdmVudCAhPT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuX2V2ZW50cy5uZXh0KG5ldyBGb3JtUmVzZXRFdmVudCh0aGlzKSk7XG4gICAgfVxuICB9XG4gIF91cGRhdGVWYWx1ZSgpIHt9XG4gIF9hbnlDb250cm9scyhjb25kaXRpb24pIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgX2FsbENvbnRyb2xzRGlzYWJsZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGlzYWJsZWQ7XG4gIH1cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbikge1xuICAgIHRoaXMuX29uQ2hhbmdlLnB1c2goZm4pO1xuICB9XG4gIF91bnJlZ2lzdGVyT25DaGFuZ2UoZm4pIHtcbiAgICByZW1vdmVMaXN0SXRlbSh0aGlzLl9vbkNoYW5nZSwgZm4pO1xuICB9XG4gIHJlZ2lzdGVyT25EaXNhYmxlZENoYW5nZShmbikge1xuICAgIHRoaXMuX29uRGlzYWJsZWRDaGFuZ2UucHVzaChmbik7XG4gIH1cbiAgX3VucmVnaXN0ZXJPbkRpc2FibGVkQ2hhbmdlKGZuKSB7XG4gICAgcmVtb3ZlTGlzdEl0ZW0odGhpcy5fb25EaXNhYmxlZENoYW5nZSwgZm4pO1xuICB9XG4gIF9mb3JFYWNoQ2hpbGQoY2IpIHt9XG4gIF9zeW5jUGVuZGluZ0NvbnRyb2xzKCkge1xuICAgIGlmICh0aGlzLnVwZGF0ZU9uID09PSAnc3VibWl0Jykge1xuICAgICAgaWYgKHRoaXMuX3BlbmRpbmdEaXJ0eSkgdGhpcy5tYXJrQXNEaXJ0eSgpO1xuICAgICAgaWYgKHRoaXMuX3BlbmRpbmdUb3VjaGVkKSB0aGlzLm1hcmtBc1RvdWNoZWQoKTtcbiAgICAgIGlmICh0aGlzLl9wZW5kaW5nQ2hhbmdlKSB7XG4gICAgICAgIHRoaXMuc2V0VmFsdWUodGhpcy5fcGVuZGluZ1ZhbHVlLCB7XG4gICAgICAgICAgb25seVNlbGY6IHRydWUsXG4gICAgICAgICAgZW1pdE1vZGVsVG9WaWV3Q2hhbmdlOiBmYWxzZVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBfYXBwbHlGb3JtU3RhdGUoZm9ybVN0YXRlKSB7XG4gICAgaWYgKGlzRm9ybUNvbnRyb2xTdGF0ZShmb3JtU3RhdGUpKSB7XG4gICAgICB0aGlzLnZhbHVlID0gdGhpcy5fcGVuZGluZ1ZhbHVlID0gZm9ybVN0YXRlLnZhbHVlO1xuICAgICAgZm9ybVN0YXRlLmRpc2FibGVkID8gdGhpcy5kaXNhYmxlKHtcbiAgICAgICAgb25seVNlbGY6IHRydWUsXG4gICAgICAgIGVtaXRFdmVudDogZmFsc2VcbiAgICAgIH0pIDogdGhpcy5lbmFibGUoe1xuICAgICAgICBvbmx5U2VsZjogdHJ1ZSxcbiAgICAgICAgZW1pdEV2ZW50OiBmYWxzZVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudmFsdWUgPSB0aGlzLl9wZW5kaW5nVmFsdWUgPSBmb3JtU3RhdGU7XG4gICAgfVxuICB9XG59O1xuY29uc3QgVW50eXBlZEZvcm1Db250cm9sID0gRm9ybUNvbnRyb2w7XG5jb25zdCBpc0Zvcm1Db250cm9sID0gY29udHJvbCA9PiBjb250cm9sIGluc3RhbmNlb2YgRm9ybUNvbnRyb2w7XG5sZXQgQWJzdHJhY3RGb3JtR3JvdXBEaXJlY3RpdmUgPSAvKiNfX1BVUkVfXyovKCgpID0+IHtcbiAgY2xhc3MgQWJzdHJhY3RGb3JtR3JvdXBEaXJlY3RpdmUgZXh0ZW5kcyBDb250cm9sQ29udGFpbmVyIHtcbiAgICBfcGFyZW50O1xuICAgIG5nT25Jbml0KCkge1xuICAgICAgdGhpcy5fY2hlY2tQYXJlbnRUeXBlKCk7XG4gICAgICB0aGlzLmZvcm1EaXJlY3RpdmUuYWRkRm9ybUdyb3VwKHRoaXMpO1xuICAgIH1cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgIHRoaXMuZm9ybURpcmVjdGl2ZT8ucmVtb3ZlRm9ybUdyb3VwKHRoaXMpO1xuICAgIH1cbiAgICBnZXQgY29udHJvbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmZvcm1EaXJlY3RpdmUuZ2V0Rm9ybUdyb3VwKHRoaXMpO1xuICAgIH1cbiAgICBnZXQgcGF0aCgpIHtcbiAgICAgIHJldHVybiBjb250cm9sUGF0aCh0aGlzLm5hbWUgPT0gbnVsbCA/IHRoaXMubmFtZSA6IHRoaXMubmFtZS50b1N0cmluZygpLCB0aGlzLl9wYXJlbnQpO1xuICAgIH1cbiAgICBnZXQgZm9ybURpcmVjdGl2ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9wYXJlbnQgPyB0aGlzLl9wYXJlbnQuZm9ybURpcmVjdGl2ZSA6IG51bGw7XG4gICAgfVxuICAgIF9jaGVja1BhcmVudFR5cGUoKSB7fVxuICAgIHN0YXRpYyDJtWZhYyA9IC8qIEBfX1BVUkVfXyAqLygoKSA9PiB7XG4gICAgICBsZXQgybVBYnN0cmFjdEZvcm1Hcm91cERpcmVjdGl2ZV9CYXNlRmFjdG9yeTtcbiAgICAgIHJldHVybiBmdW5jdGlvbiBBYnN0cmFjdEZvcm1Hcm91cERpcmVjdGl2ZV9GYWN0b3J5KF9fbmdGYWN0b3J5VHlwZV9fKSB7XG4gICAgICAgIHJldHVybiAoybVBYnN0cmFjdEZvcm1Hcm91cERpcmVjdGl2ZV9CYXNlRmFjdG9yeSB8fCAoybVBYnN0cmFjdEZvcm1Hcm91cERpcmVjdGl2ZV9CYXNlRmFjdG9yeSA9IGkwLsm1ybVnZXRJbmhlcml0ZWRGYWN0b3J5KEFic3RyYWN0Rm9ybUdyb3VwRGlyZWN0aXZlKSkpKF9fbmdGYWN0b3J5VHlwZV9fIHx8IEFic3RyYWN0Rm9ybUdyb3VwRGlyZWN0aXZlKTtcbiAgICAgIH07XG4gICAgfSkoKTtcbiAgICBzdGF0aWMgybVkaXIgPSAvKiBAX19QVVJFX18gKi9pMC7Jtcm1ZGVmaW5lRGlyZWN0aXZlKHtcbiAgICAgIHR5cGU6IEFic3RyYWN0Rm9ybUdyb3VwRGlyZWN0aXZlLFxuICAgICAgc3RhbmRhbG9uZTogZmFsc2UsXG4gICAgICBmZWF0dXJlczogW2kwLsm1ybVJbmhlcml0RGVmaW5pdGlvbkZlYXR1cmVdXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIEFic3RyYWN0Rm9ybUdyb3VwRGlyZWN0aXZlO1xufSkoKTtcbi8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICAodHlwZW9mIG5nRGV2TW9kZSA9PT0gXCJ1bmRlZmluZWRcIiB8fCBuZ0Rldk1vZGUpICYmIHZvaWQgMDtcbn0pKCk7XG5mdW5jdGlvbiBtb2RlbFBhcmVudEV4Y2VwdGlvbigpIHtcbiAgcmV0dXJuIG5ldyBfUnVudGltZUVycm9yKDEzNTAsIGBcbiAgICBuZ01vZGVsIGNhbm5vdCBiZSB1c2VkIHRvIHJlZ2lzdGVyIGZvcm0gY29udHJvbHMgd2l0aCBhIHBhcmVudCBmb3JtR3JvdXAgZGlyZWN0aXZlLiAgVHJ5IHVzaW5nXG4gICAgZm9ybUdyb3VwJ3MgcGFydG5lciBkaXJlY3RpdmUgXCJmb3JtQ29udHJvbE5hbWVcIiBpbnN0ZWFkLiAgRXhhbXBsZTpcblxuICAgICR7Zm9ybUNvbnRyb2xOYW1lRXhhbXBsZX1cblxuICAgIE9yLCBpZiB5b3UnZCBsaWtlIHRvIGF2b2lkIHJlZ2lzdGVyaW5nIHRoaXMgZm9ybSBjb250cm9sLCBpbmRpY2F0ZSB0aGF0IGl0J3Mgc3RhbmRhbG9uZSBpbiBuZ01vZGVsT3B0aW9uczpcblxuICAgIEV4YW1wbGU6XG5cbiAgICAke25nTW9kZWxXaXRoRm9ybUdyb3VwRXhhbXBsZX1gKTtcbn1cbmZ1bmN0aW9uIGZvcm1Hcm91cE5hbWVFeGNlcHRpb24oKSB7XG4gIHJldHVybiBuZXcgX1J1bnRpbWVFcnJvcigxMzUxLCBgXG4gICAgbmdNb2RlbCBjYW5ub3QgYmUgdXNlZCB0byByZWdpc3RlciBmb3JtIGNvbnRyb2xzIHdpdGggYSBwYXJlbnQgZm9ybUdyb3VwTmFtZSBvciBmb3JtQXJyYXlOYW1lIGRpcmVjdGl2ZS5cblxuICAgIE9wdGlvbiAxOiBVc2UgZm9ybUNvbnRyb2xOYW1lIGluc3RlYWQgb2YgbmdNb2RlbCAocmVhY3RpdmUgc3RyYXRlZ3kpOlxuXG4gICAgJHtmb3JtR3JvdXBOYW1lRXhhbXBsZX1cblxuICAgIE9wdGlvbiAyOiAgVXBkYXRlIG5nTW9kZWwncyBwYXJlbnQgYmUgbmdNb2RlbEdyb3VwICh0ZW1wbGF0ZS1kcml2ZW4gc3RyYXRlZ3kpOlxuXG4gICAgJHtuZ01vZGVsR3JvdXBFeGFtcGxlfWApO1xufVxuZnVuY3Rpb24gbWlzc2luZ05hbWVFeGNlcHRpb24oKSB7XG4gIHJldHVybiBuZXcgX1J1bnRpbWVFcnJvcigxMzUyLCBgSWYgbmdNb2RlbCBpcyB1c2VkIHdpdGhpbiBhIGZvcm0gdGFnLCBlaXRoZXIgdGhlIG5hbWUgYXR0cmlidXRlIG11c3QgYmUgc2V0IG9yIHRoZSBmb3JtXG4gICAgY29udHJvbCBtdXN0IGJlIGRlZmluZWQgYXMgJ3N0YW5kYWxvbmUnIGluIG5nTW9kZWxPcHRpb25zLlxuXG4gICAgRXhhbXBsZSAxOiA8aW5wdXQgWyhuZ01vZGVsKV09XCJwZXJzb24uZmlyc3ROYW1lXCIgbmFtZT1cImZpcnN0XCI+XG4gICAgRXhhbXBsZSAyOiA8aW5wdXQgWyhuZ01vZGVsKV09XCJwZXJzb24uZmlyc3ROYW1lXCIgW25nTW9kZWxPcHRpb25zXT1cIntzdGFuZGFsb25lOiB0cnVlfVwiPmApO1xufVxuZnVuY3Rpb24gbW9kZWxHcm91cFBhcmVudEV4Y2VwdGlvbigpIHtcbiAgcmV0dXJuIG5ldyBfUnVudGltZUVycm9yKDEzNTMsIGBcbiAgICBuZ01vZGVsR3JvdXAgY2Fubm90IGJlIHVzZWQgd2l0aCBhIHBhcmVudCBmb3JtR3JvdXAgZGlyZWN0aXZlLlxuXG4gICAgT3B0aW9uIDE6IFVzZSBmb3JtR3JvdXBOYW1lIGluc3RlYWQgb2YgbmdNb2RlbEdyb3VwIChyZWFjdGl2ZSBzdHJhdGVneSk6XG5cbiAgICAke2Zvcm1Hcm91cE5hbWVFeGFtcGxlfVxuXG4gICAgT3B0aW9uIDI6ICBVc2UgYSByZWd1bGFyIGZvcm0gdGFnIGluc3RlYWQgb2YgdGhlIGZvcm1Hcm91cCBkaXJlY3RpdmUgKHRlbXBsYXRlLWRyaXZlbiBzdHJhdGVneSk6XG5cbiAgICAke25nTW9kZWxHcm91cEV4YW1wbGV9YCk7XG59XG5jb25zdCBtb2RlbEdyb3VwUHJvdmlkZXIgPSB7XG4gIHByb3ZpZGU6IENvbnRyb2xDb250YWluZXIsXG4gIHVzZUV4aXN0aW5nOiAvKiNfX1BVUkVfXyovZm9yd2FyZFJlZigoKSA9PiBOZ01vZGVsR3JvdXApXG59O1xubGV0IE5nTW9kZWxHcm91cCA9IC8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICBjbGFzcyBOZ01vZGVsR3JvdXAgZXh0ZW5kcyBBYnN0cmFjdEZvcm1Hcm91cERpcmVjdGl2ZSB7XG4gICAgbmFtZSA9ICcnO1xuICAgIGNvbnN0cnVjdG9yKHBhcmVudCwgdmFsaWRhdG9ycywgYXN5bmNWYWxpZGF0b3JzKSB7XG4gICAgICBzdXBlcigpO1xuICAgICAgdGhpcy5fcGFyZW50ID0gcGFyZW50O1xuICAgICAgdGhpcy5fc2V0VmFsaWRhdG9ycyh2YWxpZGF0b3JzKTtcbiAgICAgIHRoaXMuX3NldEFzeW5jVmFsaWRhdG9ycyhhc3luY1ZhbGlkYXRvcnMpO1xuICAgIH1cbiAgICBfY2hlY2tQYXJlbnRUeXBlKCkge1xuICAgICAgaWYgKCEodGhpcy5fcGFyZW50IGluc3RhbmNlb2YgTmdNb2RlbEdyb3VwKSAmJiAhKHRoaXMuX3BhcmVudCBpbnN0YW5jZW9mIE5nRm9ybSkgJiYgKHR5cGVvZiBuZ0Rldk1vZGUgPT09ICd1bmRlZmluZWQnIHx8IG5nRGV2TW9kZSkpIHtcbiAgICAgICAgdGhyb3cgbW9kZWxHcm91cFBhcmVudEV4Y2VwdGlvbigpO1xuICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgybVmYWMgPSBmdW5jdGlvbiBOZ01vZGVsR3JvdXBfRmFjdG9yeShfX25nRmFjdG9yeVR5cGVfXykge1xuICAgICAgcmV0dXJuIG5ldyAoX19uZ0ZhY3RvcnlUeXBlX18gfHwgTmdNb2RlbEdyb3VwKShpMC7Jtcm1ZGlyZWN0aXZlSW5qZWN0KENvbnRyb2xDb250YWluZXIsIDUpLCBpMC7Jtcm1ZGlyZWN0aXZlSW5qZWN0KE5HX1ZBTElEQVRPUlMsIDEwKSwgaTAuybXJtWRpcmVjdGl2ZUluamVjdChOR19BU1lOQ19WQUxJREFUT1JTLCAxMCkpO1xuICAgIH07XG4gICAgc3RhdGljIMm1ZGlyID0gLyogQF9fUFVSRV9fICovaTAuybXJtWRlZmluZURpcmVjdGl2ZSh7XG4gICAgICB0eXBlOiBOZ01vZGVsR3JvdXAsXG4gICAgICBzZWxlY3RvcnM6IFtbXCJcIiwgXCJuZ01vZGVsR3JvdXBcIiwgXCJcIl1dLFxuICAgICAgaW5wdXRzOiB7XG4gICAgICAgIG5hbWU6IFswLCBcIm5nTW9kZWxHcm91cFwiLCBcIm5hbWVcIl1cbiAgICAgIH0sXG4gICAgICBleHBvcnRBczogW1wibmdNb2RlbEdyb3VwXCJdLFxuICAgICAgc3RhbmRhbG9uZTogZmFsc2UsXG4gICAgICBmZWF0dXJlczogW2kwLsm1ybVQcm92aWRlcnNGZWF0dXJlKFttb2RlbEdyb3VwUHJvdmlkZXJdKSwgaTAuybXJtUluaGVyaXREZWZpbml0aW9uRmVhdHVyZV1cbiAgICB9KTtcbiAgfVxuICByZXR1cm4gTmdNb2RlbEdyb3VwO1xufSkoKTtcbi8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICAodHlwZW9mIG5nRGV2TW9kZSA9PT0gXCJ1bmRlZmluZWRcIiB8fCBuZ0Rldk1vZGUpICYmIHZvaWQgMDtcbn0pKCk7XG5jb25zdCBmb3JtQ29udHJvbEJpbmRpbmckMSA9IHtcbiAgcHJvdmlkZTogTmdDb250cm9sLFxuICB1c2VFeGlzdGluZzogLyojX19QVVJFX18qL2ZvcndhcmRSZWYoKCkgPT4gTmdNb2RlbClcbn07XG5jb25zdCByZXNvbHZlZFByb21pc2UgPSAvKiNfX1BVUkVfXyovKCgpID0+IFByb21pc2UucmVzb2x2ZSgpKSgpO1xubGV0IE5nTW9kZWwgPSAvKiNfX1BVUkVfXyovKCgpID0+IHtcbiAgY2xhc3MgTmdNb2RlbCBleHRlbmRzIE5nQ29udHJvbCB7XG4gICAgX2NoYW5nZURldGVjdG9yUmVmO1xuICAgIGNhbGxTZXREaXNhYmxlZFN0YXRlO1xuICAgIGNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woKTtcbiAgICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfaXNEaXNhYmxlZDtcbiAgICBfcmVnaXN0ZXJlZCA9IGZhbHNlO1xuICAgIHZpZXdNb2RlbDtcbiAgICBuYW1lID0gJyc7XG4gICAgaXNEaXNhYmxlZDtcbiAgICBtb2RlbDtcbiAgICBvcHRpb25zO1xuICAgIHVwZGF0ZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICBjb25zdHJ1Y3RvcihwYXJlbnQsIHZhbGlkYXRvcnMsIGFzeW5jVmFsaWRhdG9ycywgdmFsdWVBY2Nlc3NvcnMsIF9jaGFuZ2VEZXRlY3RvclJlZiwgY2FsbFNldERpc2FibGVkU3RhdGUpIHtcbiAgICAgIHN1cGVyKCk7XG4gICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZiA9IF9jaGFuZ2VEZXRlY3RvclJlZjtcbiAgICAgIHRoaXMuY2FsbFNldERpc2FibGVkU3RhdGUgPSBjYWxsU2V0RGlzYWJsZWRTdGF0ZTtcbiAgICAgIHRoaXMuX3BhcmVudCA9IHBhcmVudDtcbiAgICAgIHRoaXMuX3NldFZhbGlkYXRvcnModmFsaWRhdG9ycyk7XG4gICAgICB0aGlzLl9zZXRBc3luY1ZhbGlkYXRvcnMoYXN5bmNWYWxpZGF0b3JzKTtcbiAgICAgIHRoaXMudmFsdWVBY2Nlc3NvciA9IHNlbGVjdFZhbHVlQWNjZXNzb3IodGhpcywgdmFsdWVBY2Nlc3NvcnMpO1xuICAgIH1cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzKSB7XG4gICAgICB0aGlzLl9jaGVja0ZvckVycm9ycygpO1xuICAgICAgaWYgKCF0aGlzLl9yZWdpc3RlcmVkIHx8ICduYW1lJyBpbiBjaGFuZ2VzKSB7XG4gICAgICAgIGlmICh0aGlzLl9yZWdpc3RlcmVkKSB7XG4gICAgICAgICAgdGhpcy5fY2hlY2tOYW1lKCk7XG4gICAgICAgICAgaWYgKHRoaXMuZm9ybURpcmVjdGl2ZSkge1xuICAgICAgICAgICAgY29uc3Qgb2xkTmFtZSA9IGNoYW5nZXNbJ25hbWUnXS5wcmV2aW91c1ZhbHVlO1xuICAgICAgICAgICAgdGhpcy5mb3JtRGlyZWN0aXZlLnJlbW92ZUNvbnRyb2woe1xuICAgICAgICAgICAgICBuYW1lOiBvbGROYW1lLFxuICAgICAgICAgICAgICBwYXRoOiB0aGlzLl9nZXRQYXRoKG9sZE5hbWUpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc2V0VXBDb250cm9sKCk7XG4gICAgICB9XG4gICAgICBpZiAoJ2lzRGlzYWJsZWQnIGluIGNoYW5nZXMpIHtcbiAgICAgICAgdGhpcy5fdXBkYXRlRGlzYWJsZWQoY2hhbmdlcyk7XG4gICAgICB9XG4gICAgICBpZiAoaXNQcm9wZXJ0eVVwZGF0ZWQoY2hhbmdlcywgdGhpcy52aWV3TW9kZWwpKSB7XG4gICAgICAgIHRoaXMuX3VwZGF0ZVZhbHVlKHRoaXMubW9kZWwpO1xuICAgICAgICB0aGlzLnZpZXdNb2RlbCA9IHRoaXMubW9kZWw7XG4gICAgICB9XG4gICAgfVxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgdGhpcy5mb3JtRGlyZWN0aXZlPy5yZW1vdmVDb250cm9sKHRoaXMpO1xuICAgIH1cbiAgICBnZXQgcGF0aCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9nZXRQYXRoKHRoaXMubmFtZSk7XG4gICAgfVxuICAgIGdldCBmb3JtRGlyZWN0aXZlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3BhcmVudCA/IHRoaXMuX3BhcmVudC5mb3JtRGlyZWN0aXZlIDogbnVsbDtcbiAgICB9XG4gICAgdmlld1RvTW9kZWxVcGRhdGUobmV3VmFsdWUpIHtcbiAgICAgIHRoaXMudmlld01vZGVsID0gbmV3VmFsdWU7XG4gICAgICB0aGlzLnVwZGF0ZS5lbWl0KG5ld1ZhbHVlKTtcbiAgICB9XG4gICAgX3NldFVwQ29udHJvbCgpIHtcbiAgICAgIHRoaXMuX3NldFVwZGF0ZVN0cmF0ZWd5KCk7XG4gICAgICB0aGlzLl9pc1N0YW5kYWxvbmUoKSA/IHRoaXMuX3NldFVwU3RhbmRhbG9uZSgpIDogdGhpcy5mb3JtRGlyZWN0aXZlLmFkZENvbnRyb2wodGhpcyk7XG4gICAgICB0aGlzLl9yZWdpc3RlcmVkID0gdHJ1ZTtcbiAgICB9XG4gICAgX3NldFVwZGF0ZVN0cmF0ZWd5KCkge1xuICAgICAgaWYgKHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMudXBkYXRlT24gIT0gbnVsbCkge1xuICAgICAgICB0aGlzLmNvbnRyb2wuX3VwZGF0ZU9uID0gdGhpcy5vcHRpb25zLnVwZGF0ZU9uO1xuICAgICAgfVxuICAgIH1cbiAgICBfaXNTdGFuZGFsb25lKCkge1xuICAgICAgcmV0dXJuICF0aGlzLl9wYXJlbnQgfHwgISEodGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5zdGFuZGFsb25lKTtcbiAgICB9XG4gICAgX3NldFVwU3RhbmRhbG9uZSgpIHtcbiAgICAgIHNldFVwQ29udHJvbCh0aGlzLmNvbnRyb2wsIHRoaXMsIHRoaXMuY2FsbFNldERpc2FibGVkU3RhdGUpO1xuICAgICAgdGhpcy5jb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe1xuICAgICAgICBlbWl0RXZlbnQ6IGZhbHNlXG4gICAgICB9KTtcbiAgICB9XG4gICAgX2NoZWNrRm9yRXJyb3JzKCkge1xuICAgICAgaWYgKCh0eXBlb2YgbmdEZXZNb2RlID09PSAndW5kZWZpbmVkJyB8fCBuZ0Rldk1vZGUpICYmICF0aGlzLl9pc1N0YW5kYWxvbmUoKSkge1xuICAgICAgICBjaGVja1BhcmVudFR5cGUkMSh0aGlzLl9wYXJlbnQpO1xuICAgICAgfVxuICAgICAgdGhpcy5fY2hlY2tOYW1lKCk7XG4gICAgfVxuICAgIF9jaGVja05hbWUoKSB7XG4gICAgICBpZiAodGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5uYW1lKSB0aGlzLm5hbWUgPSB0aGlzLm9wdGlvbnMubmFtZTtcbiAgICAgIGlmICghdGhpcy5faXNTdGFuZGFsb25lKCkgJiYgIXRoaXMubmFtZSAmJiAodHlwZW9mIG5nRGV2TW9kZSA9PT0gJ3VuZGVmaW5lZCcgfHwgbmdEZXZNb2RlKSkge1xuICAgICAgICB0aHJvdyBtaXNzaW5nTmFtZUV4Y2VwdGlvbigpO1xuICAgICAgfVxuICAgIH1cbiAgICBfdXBkYXRlVmFsdWUodmFsdWUpIHtcbiAgICAgIHJlc29sdmVkUHJvbWlzZS50aGVuKCgpID0+IHtcbiAgICAgICAgdGhpcy5jb250cm9sLnNldFZhbHVlKHZhbHVlLCB7XG4gICAgICAgICAgZW1pdFZpZXdUb01vZGVsQ2hhbmdlOiBmYWxzZVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY/Lm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIF91cGRhdGVEaXNhYmxlZChjaGFuZ2VzKSB7XG4gICAgICBjb25zdCBkaXNhYmxlZFZhbHVlID0gY2hhbmdlc1snaXNEaXNhYmxlZCddLmN1cnJlbnRWYWx1ZTtcbiAgICAgIGNvbnN0IGlzRGlzYWJsZWQgPSBkaXNhYmxlZFZhbHVlICE9PSAwICYmIGJvb2xlYW5BdHRyaWJ1dGUoZGlzYWJsZWRWYWx1ZSk7XG4gICAgICByZXNvbHZlZFByb21pc2UudGhlbigoKSA9PiB7XG4gICAgICAgIGlmIChpc0Rpc2FibGVkICYmICF0aGlzLmNvbnRyb2wuZGlzYWJsZWQpIHtcbiAgICAgICAgICB0aGlzLmNvbnRyb2wuZGlzYWJsZSgpO1xuICAgICAgICB9IGVsc2UgaWYgKCFpc0Rpc2FibGVkICYmIHRoaXMuY29udHJvbC5kaXNhYmxlZCkge1xuICAgICAgICAgIHRoaXMuY29udHJvbC5lbmFibGUoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj8ubWFya0ZvckNoZWNrKCk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgX2dldFBhdGgoY29udHJvbE5hbWUpIHtcbiAgICAgIHJldHVybiB0aGlzLl9wYXJlbnQgPyBjb250cm9sUGF0aChjb250cm9sTmFtZSwgdGhpcy5fcGFyZW50KSA6IFtjb250cm9sTmFtZV07XG4gICAgfVxuICAgIHN0YXRpYyDJtWZhYyA9IGZ1bmN0aW9uIE5nTW9kZWxfRmFjdG9yeShfX25nRmFjdG9yeVR5cGVfXykge1xuICAgICAgcmV0dXJuIG5ldyAoX19uZ0ZhY3RvcnlUeXBlX18gfHwgTmdNb2RlbCkoaTAuybXJtWRpcmVjdGl2ZUluamVjdChDb250cm9sQ29udGFpbmVyLCA5KSwgaTAuybXJtWRpcmVjdGl2ZUluamVjdChOR19WQUxJREFUT1JTLCAxMCksIGkwLsm1ybVkaXJlY3RpdmVJbmplY3QoTkdfQVNZTkNfVkFMSURBVE9SUywgMTApLCBpMC7Jtcm1ZGlyZWN0aXZlSW5qZWN0KE5HX1ZBTFVFX0FDQ0VTU09SLCAxMCksIGkwLsm1ybVkaXJlY3RpdmVJbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYsIDgpLCBpMC7Jtcm1ZGlyZWN0aXZlSW5qZWN0KENBTExfU0VUX0RJU0FCTEVEX1NUQVRFLCA4KSk7XG4gICAgfTtcbiAgICBzdGF0aWMgybVkaXIgPSAvKiBAX19QVVJFX18gKi9pMC7Jtcm1ZGVmaW5lRGlyZWN0aXZlKHtcbiAgICAgIHR5cGU6IE5nTW9kZWwsXG4gICAgICBzZWxlY3RvcnM6IFtbXCJcIiwgXCJuZ01vZGVsXCIsIFwiXCIsIDMsIFwiZm9ybUNvbnRyb2xOYW1lXCIsIFwiXCIsIDMsIFwiZm9ybUNvbnRyb2xcIiwgXCJcIl1dLFxuICAgICAgaW5wdXRzOiB7XG4gICAgICAgIG5hbWU6IFwibmFtZVwiLFxuICAgICAgICBpc0Rpc2FibGVkOiBbMCwgXCJkaXNhYmxlZFwiLCBcImlzRGlzYWJsZWRcIl0sXG4gICAgICAgIG1vZGVsOiBbMCwgXCJuZ01vZGVsXCIsIFwibW9kZWxcIl0sXG4gICAgICAgIG9wdGlvbnM6IFswLCBcIm5nTW9kZWxPcHRpb25zXCIsIFwib3B0aW9uc1wiXVxuICAgICAgfSxcbiAgICAgIG91dHB1dHM6IHtcbiAgICAgICAgdXBkYXRlOiBcIm5nTW9kZWxDaGFuZ2VcIlxuICAgICAgfSxcbiAgICAgIGV4cG9ydEFzOiBbXCJuZ01vZGVsXCJdLFxuICAgICAgc3RhbmRhbG9uZTogZmFsc2UsXG4gICAgICBmZWF0dXJlczogW2kwLsm1ybVQcm92aWRlcnNGZWF0dXJlKFtmb3JtQ29udHJvbEJpbmRpbmckMV0pLCBpMC7Jtcm1SW5oZXJpdERlZmluaXRpb25GZWF0dXJlLCBpMC7Jtcm1TmdPbkNoYW5nZXNGZWF0dXJlXVxuICAgIH0pO1xuICB9XG4gIHJldHVybiBOZ01vZGVsO1xufSkoKTtcbi8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICAodHlwZW9mIG5nRGV2TW9kZSA9PT0gXCJ1bmRlZmluZWRcIiB8fCBuZ0Rldk1vZGUpICYmIHZvaWQgMDtcbn0pKCk7XG5mdW5jdGlvbiBjaGVja1BhcmVudFR5cGUkMShwYXJlbnQpIHtcbiAgaWYgKCEocGFyZW50IGluc3RhbmNlb2YgTmdNb2RlbEdyb3VwKSAmJiBwYXJlbnQgaW5zdGFuY2VvZiBBYnN0cmFjdEZvcm1Hcm91cERpcmVjdGl2ZSkge1xuICAgIHRocm93IGZvcm1Hcm91cE5hbWVFeGNlcHRpb24oKTtcbiAgfSBlbHNlIGlmICghKHBhcmVudCBpbnN0YW5jZW9mIE5nTW9kZWxHcm91cCkgJiYgIShwYXJlbnQgaW5zdGFuY2VvZiBOZ0Zvcm0pKSB7XG4gICAgdGhyb3cgbW9kZWxQYXJlbnRFeGNlcHRpb24oKTtcbiAgfVxufVxubGV0IMm1TmdOb1ZhbGlkYXRlID0gLyojX19QVVJFX18qLygoKSA9PiB7XG4gIGNsYXNzIMm1TmdOb1ZhbGlkYXRlIHtcbiAgICBzdGF0aWMgybVmYWMgPSBmdW5jdGlvbiDJtU5nTm9WYWxpZGF0ZV9GYWN0b3J5KF9fbmdGYWN0b3J5VHlwZV9fKSB7XG4gICAgICByZXR1cm4gbmV3IChfX25nRmFjdG9yeVR5cGVfXyB8fCDJtU5nTm9WYWxpZGF0ZSkoKTtcbiAgICB9O1xuICAgIHN0YXRpYyDJtWRpciA9IC8qIEBfX1BVUkVfXyAqL2kwLsm1ybVkZWZpbmVEaXJlY3RpdmUoe1xuICAgICAgdHlwZTogybVOZ05vVmFsaWRhdGUsXG4gICAgICBzZWxlY3RvcnM6IFtbXCJmb3JtXCIsIDMsIFwibmdOb0Zvcm1cIiwgXCJcIiwgMywgXCJuZ05hdGl2ZVZhbGlkYXRlXCIsIFwiXCJdXSxcbiAgICAgIGhvc3RBdHRyczogW1wibm92YWxpZGF0ZVwiLCBcIlwiXSxcbiAgICAgIHN0YW5kYWxvbmU6IGZhbHNlXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIMm1TmdOb1ZhbGlkYXRlO1xufSkoKTtcbi8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICAodHlwZW9mIG5nRGV2TW9kZSA9PT0gXCJ1bmRlZmluZWRcIiB8fCBuZ0Rldk1vZGUpICYmIHZvaWQgMDtcbn0pKCk7XG5jb25zdCBOVU1CRVJfVkFMVUVfQUNDRVNTT1IgPSB7XG4gIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICB1c2VFeGlzdGluZzogLyojX19QVVJFX18qL2ZvcndhcmRSZWYoKCkgPT4gTnVtYmVyVmFsdWVBY2Nlc3NvciksXG4gIG11bHRpOiB0cnVlXG59O1xubGV0IE51bWJlclZhbHVlQWNjZXNzb3IgPSAvKiNfX1BVUkVfXyovKCgpID0+IHtcbiAgY2xhc3MgTnVtYmVyVmFsdWVBY2Nlc3NvciBleHRlbmRzIEJ1aWx0SW5Db250cm9sVmFsdWVBY2Nlc3NvciB7XG4gICAgd3JpdGVWYWx1ZSh2YWx1ZSkge1xuICAgICAgY29uc3Qgbm9ybWFsaXplZFZhbHVlID0gdmFsdWUgPT0gbnVsbCA/ICcnIDogdmFsdWU7XG4gICAgICB0aGlzLnNldFByb3BlcnR5KCd2YWx1ZScsIG5vcm1hbGl6ZWRWYWx1ZSk7XG4gICAgfVxuICAgIHJlZ2lzdGVyT25DaGFuZ2UoZm4pIHtcbiAgICAgIHRoaXMub25DaGFuZ2UgPSB2YWx1ZSA9PiB7XG4gICAgICAgIGZuKHZhbHVlID09ICcnID8gbnVsbCA6IHBhcnNlRmxvYXQodmFsdWUpKTtcbiAgICAgIH07XG4gICAgfVxuICAgIHN0YXRpYyDJtWZhYyA9IC8qIEBfX1BVUkVfXyAqLygoKSA9PiB7XG4gICAgICBsZXQgybVOdW1iZXJWYWx1ZUFjY2Vzc29yX0Jhc2VGYWN0b3J5O1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIE51bWJlclZhbHVlQWNjZXNzb3JfRmFjdG9yeShfX25nRmFjdG9yeVR5cGVfXykge1xuICAgICAgICByZXR1cm4gKMm1TnVtYmVyVmFsdWVBY2Nlc3Nvcl9CYXNlRmFjdG9yeSB8fCAoybVOdW1iZXJWYWx1ZUFjY2Vzc29yX0Jhc2VGYWN0b3J5ID0gaTAuybXJtWdldEluaGVyaXRlZEZhY3RvcnkoTnVtYmVyVmFsdWVBY2Nlc3NvcikpKShfX25nRmFjdG9yeVR5cGVfXyB8fCBOdW1iZXJWYWx1ZUFjY2Vzc29yKTtcbiAgICAgIH07XG4gICAgfSkoKTtcbiAgICBzdGF0aWMgybVkaXIgPSAvKiBAX19QVVJFX18gKi9pMC7Jtcm1ZGVmaW5lRGlyZWN0aXZlKHtcbiAgICAgIHR5cGU6IE51bWJlclZhbHVlQWNjZXNzb3IsXG4gICAgICBzZWxlY3RvcnM6IFtbXCJpbnB1dFwiLCBcInR5cGVcIiwgXCJudW1iZXJcIiwgXCJmb3JtQ29udHJvbE5hbWVcIiwgXCJcIl0sIFtcImlucHV0XCIsIFwidHlwZVwiLCBcIm51bWJlclwiLCBcImZvcm1Db250cm9sXCIsIFwiXCJdLCBbXCJpbnB1dFwiLCBcInR5cGVcIiwgXCJudW1iZXJcIiwgXCJuZ01vZGVsXCIsIFwiXCJdXSxcbiAgICAgIGhvc3RCaW5kaW5nczogZnVuY3Rpb24gTnVtYmVyVmFsdWVBY2Nlc3Nvcl9Ib3N0QmluZGluZ3MocmYsIGN0eCkge1xuICAgICAgICBpZiAocmYgJiAxKSB7XG4gICAgICAgICAgaTAuybXJtWxpc3RlbmVyKFwiaW5wdXRcIiwgZnVuY3Rpb24gTnVtYmVyVmFsdWVBY2Nlc3Nvcl9pbnB1dF9Ib3N0QmluZGluZ0hhbmRsZXIoJGV2ZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gY3R4Lm9uQ2hhbmdlKCRldmVudC50YXJnZXQudmFsdWUpO1xuICAgICAgICAgIH0pKFwiYmx1clwiLCBmdW5jdGlvbiBOdW1iZXJWYWx1ZUFjY2Vzc29yX2JsdXJfSG9zdEJpbmRpbmdIYW5kbGVyKCkge1xuICAgICAgICAgICAgcmV0dXJuIGN0eC5vblRvdWNoZWQoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHN0YW5kYWxvbmU6IGZhbHNlLFxuICAgICAgZmVhdHVyZXM6IFtpMC7Jtcm1UHJvdmlkZXJzRmVhdHVyZShbTlVNQkVSX1ZBTFVFX0FDQ0VTU09SXSksIGkwLsm1ybVJbmhlcml0RGVmaW5pdGlvbkZlYXR1cmVdXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIE51bWJlclZhbHVlQWNjZXNzb3I7XG59KSgpO1xuLyojX19QVVJFX18qLygoKSA9PiB7XG4gICh0eXBlb2YgbmdEZXZNb2RlID09PSBcInVuZGVmaW5lZFwiIHx8IG5nRGV2TW9kZSkgJiYgdm9pZCAwO1xufSkoKTtcbmNvbnN0IFJBRElPX1ZBTFVFX0FDQ0VTU09SID0ge1xuICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgdXNlRXhpc3Rpbmc6IC8qI19fUFVSRV9fKi9mb3J3YXJkUmVmKCgpID0+IFJhZGlvQ29udHJvbFZhbHVlQWNjZXNzb3IpLFxuICBtdWx0aTogdHJ1ZVxufTtcbmZ1bmN0aW9uIHRocm93TmFtZUVycm9yKCkge1xuICB0aHJvdyBuZXcgX1J1bnRpbWVFcnJvcigxMjAyLCBgXG4gICAgICBJZiB5b3UgZGVmaW5lIGJvdGggYSBuYW1lIGFuZCBhIGZvcm1Db250cm9sTmFtZSBhdHRyaWJ1dGUgb24geW91ciByYWRpbyBidXR0b24sIHRoZWlyIHZhbHVlc1xuICAgICAgbXVzdCBtYXRjaC4gRXg6IDxpbnB1dCB0eXBlPVwicmFkaW9cIiBmb3JtQ29udHJvbE5hbWU9XCJmb29kXCIgbmFtZT1cImZvb2RcIj5cbiAgICBgKTtcbn1cbmxldCBSYWRpb0NvbnRyb2xSZWdpc3RyeSA9IC8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICBjbGFzcyBSYWRpb0NvbnRyb2xSZWdpc3RyeSB7XG4gICAgX2FjY2Vzc29ycyA9IFtdO1xuICAgIGFkZChjb250cm9sLCBhY2Nlc3Nvcikge1xuICAgICAgdGhpcy5fYWNjZXNzb3JzLnB1c2goW2NvbnRyb2wsIGFjY2Vzc29yXSk7XG4gICAgfVxuICAgIHJlbW92ZShhY2Nlc3Nvcikge1xuICAgICAgZm9yIChsZXQgaSA9IHRoaXMuX2FjY2Vzc29ycy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICBpZiAodGhpcy5fYWNjZXNzb3JzW2ldWzFdID09PSBhY2Nlc3Nvcikge1xuICAgICAgICAgIHRoaXMuX2FjY2Vzc29ycy5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHNlbGVjdChhY2Nlc3Nvcikge1xuICAgICAgdGhpcy5fYWNjZXNzb3JzLmZvckVhY2goYyA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9pc1NhbWVHcm91cChjLCBhY2Nlc3NvcikgJiYgY1sxXSAhPT0gYWNjZXNzb3IpIHtcbiAgICAgICAgICBjWzFdLmZpcmVVbmNoZWNrKGFjY2Vzc29yLnZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIF9pc1NhbWVHcm91cChjb250cm9sUGFpciwgYWNjZXNzb3IpIHtcbiAgICAgIGlmICghY29udHJvbFBhaXJbMF0uY29udHJvbCkgcmV0dXJuIGZhbHNlO1xuICAgICAgcmV0dXJuIGNvbnRyb2xQYWlyWzBdLl9wYXJlbnQgPT09IGFjY2Vzc29yLl9jb250cm9sLl9wYXJlbnQgJiYgY29udHJvbFBhaXJbMV0ubmFtZSA9PT0gYWNjZXNzb3IubmFtZTtcbiAgICB9XG4gICAgc3RhdGljIMm1ZmFjID0gZnVuY3Rpb24gUmFkaW9Db250cm9sUmVnaXN0cnlfRmFjdG9yeShfX25nRmFjdG9yeVR5cGVfXykge1xuICAgICAgcmV0dXJuIG5ldyAoX19uZ0ZhY3RvcnlUeXBlX18gfHwgUmFkaW9Db250cm9sUmVnaXN0cnkpKCk7XG4gICAgfTtcbiAgICBzdGF0aWMgybVwcm92ID0gLyogQF9fUFVSRV9fICovaTAuybXJtWRlZmluZUluamVjdGFibGUoe1xuICAgICAgdG9rZW46IFJhZGlvQ29udHJvbFJlZ2lzdHJ5LFxuICAgICAgZmFjdG9yeTogUmFkaW9Db250cm9sUmVnaXN0cnkuybVmYWMsXG4gICAgICBwcm92aWRlZEluOiAncm9vdCdcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gUmFkaW9Db250cm9sUmVnaXN0cnk7XG59KSgpO1xuLyojX19QVVJFX18qLygoKSA9PiB7XG4gICh0eXBlb2YgbmdEZXZNb2RlID09PSBcInVuZGVmaW5lZFwiIHx8IG5nRGV2TW9kZSkgJiYgdm9pZCAwO1xufSkoKTtcbmxldCBSYWRpb0NvbnRyb2xWYWx1ZUFjY2Vzc29yID0gLyojX19QVVJFX18qLygoKSA9PiB7XG4gIGNsYXNzIFJhZGlvQ29udHJvbFZhbHVlQWNjZXNzb3IgZXh0ZW5kcyBCdWlsdEluQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuICAgIF9yZWdpc3RyeTtcbiAgICBfaW5qZWN0b3I7XG4gICAgX3N0YXRlO1xuICAgIF9jb250cm9sO1xuICAgIF9mbjtcbiAgICBzZXREaXNhYmxlZFN0YXRlRmlyZWQgPSBmYWxzZTtcbiAgICBvbkNoYW5nZSA9ICgpID0+IHt9O1xuICAgIG5hbWU7XG4gICAgZm9ybUNvbnRyb2xOYW1lO1xuICAgIHZhbHVlO1xuICAgIGNhbGxTZXREaXNhYmxlZFN0YXRlID0gaW5qZWN0KENBTExfU0VUX0RJU0FCTEVEX1NUQVRFLCB7XG4gICAgICBvcHRpb25hbDogdHJ1ZVxuICAgIH0pID8/IHNldERpc2FibGVkU3RhdGVEZWZhdWx0O1xuICAgIGNvbnN0cnVjdG9yKHJlbmRlcmVyLCBlbGVtZW50UmVmLCBfcmVnaXN0cnksIF9pbmplY3Rvcikge1xuICAgICAgc3VwZXIocmVuZGVyZXIsIGVsZW1lbnRSZWYpO1xuICAgICAgdGhpcy5fcmVnaXN0cnkgPSBfcmVnaXN0cnk7XG4gICAgICB0aGlzLl9pbmplY3RvciA9IF9pbmplY3RvcjtcbiAgICB9XG4gICAgbmdPbkluaXQoKSB7XG4gICAgICB0aGlzLl9jb250cm9sID0gdGhpcy5faW5qZWN0b3IuZ2V0KE5nQ29udHJvbCk7XG4gICAgICB0aGlzLl9jaGVja05hbWUoKTtcbiAgICAgIHRoaXMuX3JlZ2lzdHJ5LmFkZCh0aGlzLl9jb250cm9sLCB0aGlzKTtcbiAgICB9XG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICB0aGlzLl9yZWdpc3RyeS5yZW1vdmUodGhpcyk7XG4gICAgfVxuICAgIHdyaXRlVmFsdWUodmFsdWUpIHtcbiAgICAgIHRoaXMuX3N0YXRlID0gdmFsdWUgPT09IHRoaXMudmFsdWU7XG4gICAgICB0aGlzLnNldFByb3BlcnR5KCdjaGVja2VkJywgdGhpcy5fc3RhdGUpO1xuICAgIH1cbiAgICByZWdpc3Rlck9uQ2hhbmdlKGZuKSB7XG4gICAgICB0aGlzLl9mbiA9IGZuO1xuICAgICAgdGhpcy5vbkNoYW5nZSA9ICgpID0+IHtcbiAgICAgICAgZm4odGhpcy52YWx1ZSk7XG4gICAgICAgIHRoaXMuX3JlZ2lzdHJ5LnNlbGVjdCh0aGlzKTtcbiAgICAgIH07XG4gICAgfVxuICAgIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZCkge1xuICAgICAgaWYgKHRoaXMuc2V0RGlzYWJsZWRTdGF0ZUZpcmVkIHx8IGlzRGlzYWJsZWQgfHwgdGhpcy5jYWxsU2V0RGlzYWJsZWRTdGF0ZSA9PT0gJ3doZW5EaXNhYmxlZEZvckxlZ2FjeUNvZGUnKSB7XG4gICAgICAgIHRoaXMuc2V0UHJvcGVydHkoJ2Rpc2FibGVkJywgaXNEaXNhYmxlZCk7XG4gICAgICB9XG4gICAgICB0aGlzLnNldERpc2FibGVkU3RhdGVGaXJlZCA9IHRydWU7XG4gICAgfVxuICAgIGZpcmVVbmNoZWNrKHZhbHVlKSB7XG4gICAgICB0aGlzLndyaXRlVmFsdWUodmFsdWUpO1xuICAgIH1cbiAgICBfY2hlY2tOYW1lKCkge1xuICAgICAgaWYgKHRoaXMubmFtZSAmJiB0aGlzLmZvcm1Db250cm9sTmFtZSAmJiB0aGlzLm5hbWUgIT09IHRoaXMuZm9ybUNvbnRyb2xOYW1lICYmICh0eXBlb2YgbmdEZXZNb2RlID09PSAndW5kZWZpbmVkJyB8fCBuZ0Rldk1vZGUpKSB7XG4gICAgICAgIHRocm93TmFtZUVycm9yKCk7XG4gICAgICB9XG4gICAgICBpZiAoIXRoaXMubmFtZSAmJiB0aGlzLmZvcm1Db250cm9sTmFtZSkgdGhpcy5uYW1lID0gdGhpcy5mb3JtQ29udHJvbE5hbWU7XG4gICAgfVxuICAgIHN0YXRpYyDJtWZhYyA9IGZ1bmN0aW9uIFJhZGlvQ29udHJvbFZhbHVlQWNjZXNzb3JfRmFjdG9yeShfX25nRmFjdG9yeVR5cGVfXykge1xuICAgICAgcmV0dXJuIG5ldyAoX19uZ0ZhY3RvcnlUeXBlX18gfHwgUmFkaW9Db250cm9sVmFsdWVBY2Nlc3NvcikoaTAuybXJtWRpcmVjdGl2ZUluamVjdChpMC5SZW5kZXJlcjIpLCBpMC7Jtcm1ZGlyZWN0aXZlSW5qZWN0KGkwLkVsZW1lbnRSZWYpLCBpMC7Jtcm1ZGlyZWN0aXZlSW5qZWN0KFJhZGlvQ29udHJvbFJlZ2lzdHJ5KSwgaTAuybXJtWRpcmVjdGl2ZUluamVjdChpMC5JbmplY3RvcikpO1xuICAgIH07XG4gICAgc3RhdGljIMm1ZGlyID0gLyogQF9fUFVSRV9fICovaTAuybXJtWRlZmluZURpcmVjdGl2ZSh7XG4gICAgICB0eXBlOiBSYWRpb0NvbnRyb2xWYWx1ZUFjY2Vzc29yLFxuICAgICAgc2VsZWN0b3JzOiBbW1wiaW5wdXRcIiwgXCJ0eXBlXCIsIFwicmFkaW9cIiwgXCJmb3JtQ29udHJvbE5hbWVcIiwgXCJcIl0sIFtcImlucHV0XCIsIFwidHlwZVwiLCBcInJhZGlvXCIsIFwiZm9ybUNvbnRyb2xcIiwgXCJcIl0sIFtcImlucHV0XCIsIFwidHlwZVwiLCBcInJhZGlvXCIsIFwibmdNb2RlbFwiLCBcIlwiXV0sXG4gICAgICBob3N0QmluZGluZ3M6IGZ1bmN0aW9uIFJhZGlvQ29udHJvbFZhbHVlQWNjZXNzb3JfSG9zdEJpbmRpbmdzKHJmLCBjdHgpIHtcbiAgICAgICAgaWYgKHJmICYgMSkge1xuICAgICAgICAgIGkwLsm1ybVsaXN0ZW5lcihcImNoYW5nZVwiLCBmdW5jdGlvbiBSYWRpb0NvbnRyb2xWYWx1ZUFjY2Vzc29yX2NoYW5nZV9Ib3N0QmluZGluZ0hhbmRsZXIoKSB7XG4gICAgICAgICAgICByZXR1cm4gY3R4Lm9uQ2hhbmdlKCk7XG4gICAgICAgICAgfSkoXCJibHVyXCIsIGZ1bmN0aW9uIFJhZGlvQ29udHJvbFZhbHVlQWNjZXNzb3JfYmx1cl9Ib3N0QmluZGluZ0hhbmRsZXIoKSB7XG4gICAgICAgICAgICByZXR1cm4gY3R4Lm9uVG91Y2hlZCgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgaW5wdXRzOiB7XG4gICAgICAgIG5hbWU6IFwibmFtZVwiLFxuICAgICAgICBmb3JtQ29udHJvbE5hbWU6IFwiZm9ybUNvbnRyb2xOYW1lXCIsXG4gICAgICAgIHZhbHVlOiBcInZhbHVlXCJcbiAgICAgIH0sXG4gICAgICBzdGFuZGFsb25lOiBmYWxzZSxcbiAgICAgIGZlYXR1cmVzOiBbaTAuybXJtVByb3ZpZGVyc0ZlYXR1cmUoW1JBRElPX1ZBTFVFX0FDQ0VTU09SXSksIGkwLsm1ybVJbmhlcml0RGVmaW5pdGlvbkZlYXR1cmVdXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIFJhZGlvQ29udHJvbFZhbHVlQWNjZXNzb3I7XG59KSgpO1xuLyojX19QVVJFX18qLygoKSA9PiB7XG4gICh0eXBlb2YgbmdEZXZNb2RlID09PSBcInVuZGVmaW5lZFwiIHx8IG5nRGV2TW9kZSkgJiYgdm9pZCAwO1xufSkoKTtcbmNvbnN0IFJBTkdFX1ZBTFVFX0FDQ0VTU09SID0ge1xuICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgdXNlRXhpc3Rpbmc6IC8qI19fUFVSRV9fKi9mb3J3YXJkUmVmKCgpID0+IFJhbmdlVmFsdWVBY2Nlc3NvciksXG4gIG11bHRpOiB0cnVlXG59O1xubGV0IFJhbmdlVmFsdWVBY2Nlc3NvciA9IC8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICBjbGFzcyBSYW5nZVZhbHVlQWNjZXNzb3IgZXh0ZW5kcyBCdWlsdEluQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuICAgIHdyaXRlVmFsdWUodmFsdWUpIHtcbiAgICAgIHRoaXMuc2V0UHJvcGVydHkoJ3ZhbHVlJywgcGFyc2VGbG9hdCh2YWx1ZSkpO1xuICAgIH1cbiAgICByZWdpc3Rlck9uQ2hhbmdlKGZuKSB7XG4gICAgICB0aGlzLm9uQ2hhbmdlID0gdmFsdWUgPT4ge1xuICAgICAgICBmbih2YWx1ZSA9PSAnJyA/IG51bGwgOiBwYXJzZUZsb2F0KHZhbHVlKSk7XG4gICAgICB9O1xuICAgIH1cbiAgICBzdGF0aWMgybVmYWMgPSAvKiBAX19QVVJFX18gKi8oKCkgPT4ge1xuICAgICAgbGV0IMm1UmFuZ2VWYWx1ZUFjY2Vzc29yX0Jhc2VGYWN0b3J5O1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIFJhbmdlVmFsdWVBY2Nlc3Nvcl9GYWN0b3J5KF9fbmdGYWN0b3J5VHlwZV9fKSB7XG4gICAgICAgIHJldHVybiAoybVSYW5nZVZhbHVlQWNjZXNzb3JfQmFzZUZhY3RvcnkgfHwgKMm1UmFuZ2VWYWx1ZUFjY2Vzc29yX0Jhc2VGYWN0b3J5ID0gaTAuybXJtWdldEluaGVyaXRlZEZhY3RvcnkoUmFuZ2VWYWx1ZUFjY2Vzc29yKSkpKF9fbmdGYWN0b3J5VHlwZV9fIHx8IFJhbmdlVmFsdWVBY2Nlc3Nvcik7XG4gICAgICB9O1xuICAgIH0pKCk7XG4gICAgc3RhdGljIMm1ZGlyID0gLyogQF9fUFVSRV9fICovaTAuybXJtWRlZmluZURpcmVjdGl2ZSh7XG4gICAgICB0eXBlOiBSYW5nZVZhbHVlQWNjZXNzb3IsXG4gICAgICBzZWxlY3RvcnM6IFtbXCJpbnB1dFwiLCBcInR5cGVcIiwgXCJyYW5nZVwiLCBcImZvcm1Db250cm9sTmFtZVwiLCBcIlwiXSwgW1wiaW5wdXRcIiwgXCJ0eXBlXCIsIFwicmFuZ2VcIiwgXCJmb3JtQ29udHJvbFwiLCBcIlwiXSwgW1wiaW5wdXRcIiwgXCJ0eXBlXCIsIFwicmFuZ2VcIiwgXCJuZ01vZGVsXCIsIFwiXCJdXSxcbiAgICAgIGhvc3RCaW5kaW5nczogZnVuY3Rpb24gUmFuZ2VWYWx1ZUFjY2Vzc29yX0hvc3RCaW5kaW5ncyhyZiwgY3R4KSB7XG4gICAgICAgIGlmIChyZiAmIDEpIHtcbiAgICAgICAgICBpMC7Jtcm1bGlzdGVuZXIoXCJjaGFuZ2VcIiwgZnVuY3Rpb24gUmFuZ2VWYWx1ZUFjY2Vzc29yX2NoYW5nZV9Ib3N0QmluZGluZ0hhbmRsZXIoJGV2ZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gY3R4Lm9uQ2hhbmdlKCRldmVudC50YXJnZXQudmFsdWUpO1xuICAgICAgICAgIH0pKFwiaW5wdXRcIiwgZnVuY3Rpb24gUmFuZ2VWYWx1ZUFjY2Vzc29yX2lucHV0X0hvc3RCaW5kaW5nSGFuZGxlcigkZXZlbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBjdHgub25DaGFuZ2UoJGV2ZW50LnRhcmdldC52YWx1ZSk7XG4gICAgICAgICAgfSkoXCJibHVyXCIsIGZ1bmN0aW9uIFJhbmdlVmFsdWVBY2Nlc3Nvcl9ibHVyX0hvc3RCaW5kaW5nSGFuZGxlcigpIHtcbiAgICAgICAgICAgIHJldHVybiBjdHgub25Ub3VjaGVkKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBzdGFuZGFsb25lOiBmYWxzZSxcbiAgICAgIGZlYXR1cmVzOiBbaTAuybXJtVByb3ZpZGVyc0ZlYXR1cmUoW1JBTkdFX1ZBTFVFX0FDQ0VTU09SXSksIGkwLsm1ybVJbmhlcml0RGVmaW5pdGlvbkZlYXR1cmVdXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIFJhbmdlVmFsdWVBY2Nlc3Nvcjtcbn0pKCk7XG4vKiNfX1BVUkVfXyovKCgpID0+IHtcbiAgKHR5cGVvZiBuZ0Rldk1vZGUgPT09IFwidW5kZWZpbmVkXCIgfHwgbmdEZXZNb2RlKSAmJiB2b2lkIDA7XG59KSgpO1xuY2xhc3MgRm9ybUFycmF5IGV4dGVuZHMgQWJzdHJhY3RDb250cm9sIHtcbiAgY29uc3RydWN0b3IoY29udHJvbHMsIHZhbGlkYXRvck9yT3B0cywgYXN5bmNWYWxpZGF0b3IpIHtcbiAgICBzdXBlcihwaWNrVmFsaWRhdG9ycyh2YWxpZGF0b3JPck9wdHMpLCBwaWNrQXN5bmNWYWxpZGF0b3JzKGFzeW5jVmFsaWRhdG9yLCB2YWxpZGF0b3JPck9wdHMpKTtcbiAgICB0aGlzLmNvbnRyb2xzID0gY29udHJvbHM7XG4gICAgdGhpcy5faW5pdE9ic2VydmFibGVzKCk7XG4gICAgdGhpcy5fc2V0VXBkYXRlU3RyYXRlZ3kodmFsaWRhdG9yT3JPcHRzKTtcbiAgICB0aGlzLl9zZXRVcENvbnRyb2xzKCk7XG4gICAgdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtcbiAgICAgIG9ubHlTZWxmOiB0cnVlLFxuICAgICAgZW1pdEV2ZW50OiAhIXRoaXMuYXN5bmNWYWxpZGF0b3JcbiAgICB9KTtcbiAgfVxuICBjb250cm9scztcbiAgYXQoaW5kZXgpIHtcbiAgICByZXR1cm4gdGhpcy5jb250cm9sc1t0aGlzLl9hZGp1c3RJbmRleChpbmRleCldO1xuICB9XG4gIHB1c2goY29udHJvbCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoY29udHJvbCkpIHtcbiAgICAgIGNvbnRyb2wuZm9yRWFjaChjdHJsID0+IHtcbiAgICAgICAgdGhpcy5jb250cm9scy5wdXNoKGN0cmwpO1xuICAgICAgICB0aGlzLl9yZWdpc3RlckNvbnRyb2woY3RybCk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb250cm9scy5wdXNoKGNvbnRyb2wpO1xuICAgICAgdGhpcy5fcmVnaXN0ZXJDb250cm9sKGNvbnRyb2wpO1xuICAgIH1cbiAgICB0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe1xuICAgICAgZW1pdEV2ZW50OiBvcHRpb25zLmVtaXRFdmVudFxuICAgIH0pO1xuICAgIHRoaXMuX29uQ29sbGVjdGlvbkNoYW5nZSgpO1xuICB9XG4gIGluc2VydChpbmRleCwgY29udHJvbCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgdGhpcy5jb250cm9scy5zcGxpY2UoaW5kZXgsIDAsIGNvbnRyb2wpO1xuICAgIHRoaXMuX3JlZ2lzdGVyQ29udHJvbChjb250cm9sKTtcbiAgICB0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe1xuICAgICAgZW1pdEV2ZW50OiBvcHRpb25zLmVtaXRFdmVudFxuICAgIH0pO1xuICB9XG4gIHJlbW92ZUF0KGluZGV4LCBvcHRpb25zID0ge30pIHtcbiAgICBsZXQgYWRqdXN0ZWRJbmRleCA9IHRoaXMuX2FkanVzdEluZGV4KGluZGV4KTtcbiAgICBpZiAoYWRqdXN0ZWRJbmRleCA8IDApIGFkanVzdGVkSW5kZXggPSAwO1xuICAgIGlmICh0aGlzLmNvbnRyb2xzW2FkanVzdGVkSW5kZXhdKSB0aGlzLmNvbnRyb2xzW2FkanVzdGVkSW5kZXhdLl9yZWdpc3Rlck9uQ29sbGVjdGlvbkNoYW5nZSgoKSA9PiB7fSk7XG4gICAgdGhpcy5jb250cm9scy5zcGxpY2UoYWRqdXN0ZWRJbmRleCwgMSk7XG4gICAgdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtcbiAgICAgIGVtaXRFdmVudDogb3B0aW9ucy5lbWl0RXZlbnRcbiAgICB9KTtcbiAgfVxuICBzZXRDb250cm9sKGluZGV4LCBjb250cm9sLCBvcHRpb25zID0ge30pIHtcbiAgICBsZXQgYWRqdXN0ZWRJbmRleCA9IHRoaXMuX2FkanVzdEluZGV4KGluZGV4KTtcbiAgICBpZiAoYWRqdXN0ZWRJbmRleCA8IDApIGFkanVzdGVkSW5kZXggPSAwO1xuICAgIGlmICh0aGlzLmNvbnRyb2xzW2FkanVzdGVkSW5kZXhdKSB0aGlzLmNvbnRyb2xzW2FkanVzdGVkSW5kZXhdLl9yZWdpc3Rlck9uQ29sbGVjdGlvbkNoYW5nZSgoKSA9PiB7fSk7XG4gICAgdGhpcy5jb250cm9scy5zcGxpY2UoYWRqdXN0ZWRJbmRleCwgMSk7XG4gICAgaWYgKGNvbnRyb2wpIHtcbiAgICAgIHRoaXMuY29udHJvbHMuc3BsaWNlKGFkanVzdGVkSW5kZXgsIDAsIGNvbnRyb2wpO1xuICAgICAgdGhpcy5fcmVnaXN0ZXJDb250cm9sKGNvbnRyb2wpO1xuICAgIH1cbiAgICB0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe1xuICAgICAgZW1pdEV2ZW50OiBvcHRpb25zLmVtaXRFdmVudFxuICAgIH0pO1xuICAgIHRoaXMuX29uQ29sbGVjdGlvbkNoYW5nZSgpO1xuICB9XG4gIGdldCBsZW5ndGgoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29udHJvbHMubGVuZ3RoO1xuICB9XG4gIHNldFZhbHVlKHZhbHVlLCBvcHRpb25zID0ge30pIHtcbiAgICBhc3NlcnRBbGxWYWx1ZXNQcmVzZW50KHRoaXMsIGZhbHNlLCB2YWx1ZSk7XG4gICAgdmFsdWUuZm9yRWFjaCgobmV3VmFsdWUsIGluZGV4KSA9PiB7XG4gICAgICBhc3NlcnRDb250cm9sUHJlc2VudCh0aGlzLCBmYWxzZSwgaW5kZXgpO1xuICAgICAgdGhpcy5hdChpbmRleCkuc2V0VmFsdWUobmV3VmFsdWUsIHtcbiAgICAgICAgb25seVNlbGY6IHRydWUsXG4gICAgICAgIGVtaXRFdmVudDogb3B0aW9ucy5lbWl0RXZlbnRcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eShvcHRpb25zKTtcbiAgfVxuICBwYXRjaFZhbHVlKHZhbHVlLCBvcHRpb25zID0ge30pIHtcbiAgICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuO1xuICAgIHZhbHVlLmZvckVhY2goKG5ld1ZhbHVlLCBpbmRleCkgPT4ge1xuICAgICAgaWYgKHRoaXMuYXQoaW5kZXgpKSB7XG4gICAgICAgIHRoaXMuYXQoaW5kZXgpLnBhdGNoVmFsdWUobmV3VmFsdWUsIHtcbiAgICAgICAgICBvbmx5U2VsZjogdHJ1ZSxcbiAgICAgICAgICBlbWl0RXZlbnQ6IG9wdGlvbnMuZW1pdEV2ZW50XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eShvcHRpb25zKTtcbiAgfVxuICByZXNldCh2YWx1ZSA9IFtdLCBvcHRpb25zID0ge30pIHtcbiAgICB0aGlzLl9mb3JFYWNoQ2hpbGQoKGNvbnRyb2wsIGluZGV4KSA9PiB7XG4gICAgICBjb250cm9sLnJlc2V0KHZhbHVlW2luZGV4XSwge1xuICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICBvbmx5U2VsZjogdHJ1ZVxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgdGhpcy5fdXBkYXRlUHJpc3RpbmUob3B0aW9ucywgdGhpcyk7XG4gICAgdGhpcy5fdXBkYXRlVG91Y2hlZChvcHRpb25zLCB0aGlzKTtcbiAgICB0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkob3B0aW9ucyk7XG4gICAgaWYgKG9wdGlvbnM/LmVtaXRFdmVudCAhPT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuX2V2ZW50cy5uZXh0KG5ldyBGb3JtUmVzZXRFdmVudCh0aGlzKSk7XG4gICAgfVxuICB9XG4gIGdldFJhd1ZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLmNvbnRyb2xzLm1hcChjb250cm9sID0+IGNvbnRyb2wuZ2V0UmF3VmFsdWUoKSk7XG4gIH1cbiAgY2xlYXIob3B0aW9ucyA9IHt9KSB7XG4gICAgaWYgKHRoaXMuY29udHJvbHMubGVuZ3RoIDwgMSkgcmV0dXJuO1xuICAgIHRoaXMuX2ZvckVhY2hDaGlsZChjb250cm9sID0+IGNvbnRyb2wuX3JlZ2lzdGVyT25Db2xsZWN0aW9uQ2hhbmdlKCgpID0+IHt9KSk7XG4gICAgdGhpcy5jb250cm9scy5zcGxpY2UoMCk7XG4gICAgdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtcbiAgICAgIGVtaXRFdmVudDogb3B0aW9ucy5lbWl0RXZlbnRcbiAgICB9KTtcbiAgfVxuICBfYWRqdXN0SW5kZXgoaW5kZXgpIHtcbiAgICByZXR1cm4gaW5kZXggPCAwID8gaW5kZXggKyB0aGlzLmxlbmd0aCA6IGluZGV4O1xuICB9XG4gIF9zeW5jUGVuZGluZ0NvbnRyb2xzKCkge1xuICAgIGxldCBzdWJ0cmVlVXBkYXRlZCA9IHRoaXMuY29udHJvbHMucmVkdWNlKCh1cGRhdGVkLCBjaGlsZCkgPT4ge1xuICAgICAgcmV0dXJuIGNoaWxkLl9zeW5jUGVuZGluZ0NvbnRyb2xzKCkgPyB0cnVlIDogdXBkYXRlZDtcbiAgICB9LCBmYWxzZSk7XG4gICAgaWYgKHN1YnRyZWVVcGRhdGVkKSB0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe1xuICAgICAgb25seVNlbGY6IHRydWVcbiAgICB9KTtcbiAgICByZXR1cm4gc3VidHJlZVVwZGF0ZWQ7XG4gIH1cbiAgX2ZvckVhY2hDaGlsZChjYikge1xuICAgIHRoaXMuY29udHJvbHMuZm9yRWFjaCgoY29udHJvbCwgaW5kZXgpID0+IHtcbiAgICAgIGNiKGNvbnRyb2wsIGluZGV4KTtcbiAgICB9KTtcbiAgfVxuICBfdXBkYXRlVmFsdWUoKSB7XG4gICAgdGhpcy52YWx1ZSA9IHRoaXMuY29udHJvbHMuZmlsdGVyKGNvbnRyb2wgPT4gY29udHJvbC5lbmFibGVkIHx8IHRoaXMuZGlzYWJsZWQpLm1hcChjb250cm9sID0+IGNvbnRyb2wudmFsdWUpO1xuICB9XG4gIF9hbnlDb250cm9scyhjb25kaXRpb24pIHtcbiAgICByZXR1cm4gdGhpcy5jb250cm9scy5zb21lKGNvbnRyb2wgPT4gY29udHJvbC5lbmFibGVkICYmIGNvbmRpdGlvbihjb250cm9sKSk7XG4gIH1cbiAgX3NldFVwQ29udHJvbHMoKSB7XG4gICAgdGhpcy5fZm9yRWFjaENoaWxkKGNvbnRyb2wgPT4gdGhpcy5fcmVnaXN0ZXJDb250cm9sKGNvbnRyb2wpKTtcbiAgfVxuICBfYWxsQ29udHJvbHNEaXNhYmxlZCgpIHtcbiAgICBmb3IgKGNvbnN0IGNvbnRyb2wgb2YgdGhpcy5jb250cm9scykge1xuICAgICAgaWYgKGNvbnRyb2wuZW5hYmxlZCkgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jb250cm9scy5sZW5ndGggPiAwIHx8IHRoaXMuZGlzYWJsZWQ7XG4gIH1cbiAgX3JlZ2lzdGVyQ29udHJvbChjb250cm9sKSB7XG4gICAgY29udHJvbC5zZXRQYXJlbnQodGhpcyk7XG4gICAgY29udHJvbC5fcmVnaXN0ZXJPbkNvbGxlY3Rpb25DaGFuZ2UodGhpcy5fb25Db2xsZWN0aW9uQ2hhbmdlKTtcbiAgfVxuICBfZmluZChuYW1lKSB7XG4gICAgcmV0dXJuIHRoaXMuYXQobmFtZSkgPz8gbnVsbDtcbiAgfVxufVxuY29uc3QgVW50eXBlZEZvcm1BcnJheSA9IEZvcm1BcnJheTtcbmNvbnN0IGlzRm9ybUFycmF5ID0gY29udHJvbCA9PiBjb250cm9sIGluc3RhbmNlb2YgRm9ybUFycmF5O1xubGV0IEFic3RyYWN0Rm9ybURpcmVjdGl2ZSA9IC8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICBjbGFzcyBBYnN0cmFjdEZvcm1EaXJlY3RpdmUgZXh0ZW5kcyBDb250cm9sQ29udGFpbmVyIHtcbiAgICBjYWxsU2V0RGlzYWJsZWRTdGF0ZTtcbiAgICBnZXQgc3VibWl0dGVkKCkge1xuICAgICAgcmV0dXJuIHVudHJhY2tlZCh0aGlzLl9zdWJtaXR0ZWRSZWFjdGl2ZSk7XG4gICAgfVxuICAgIHNldCBzdWJtaXR0ZWQodmFsdWUpIHtcbiAgICAgIHRoaXMuX3N1Ym1pdHRlZFJlYWN0aXZlLnNldCh2YWx1ZSk7XG4gICAgfVxuICAgIF9zdWJtaXR0ZWQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLl9zdWJtaXR0ZWRSZWFjdGl2ZSgpLCAuLi4obmdEZXZNb2RlID8gW3tcbiAgICAgIGRlYnVnTmFtZTogXCJfc3VibWl0dGVkXCJcbiAgICB9XSA6IFtdKSk7XG4gICAgX3N1Ym1pdHRlZFJlYWN0aXZlID0gc2lnbmFsKGZhbHNlLCAuLi4obmdEZXZNb2RlID8gW3tcbiAgICAgIGRlYnVnTmFtZTogXCJfc3VibWl0dGVkUmVhY3RpdmVcIlxuICAgIH1dIDogW10pKTtcbiAgICBfb2xkRm9ybTtcbiAgICBfb25Db2xsZWN0aW9uQ2hhbmdlID0gKCkgPT4gdGhpcy5fdXBkYXRlRG9tVmFsdWUoKTtcbiAgICBkaXJlY3RpdmVzID0gW107XG4gICAgY29uc3RydWN0b3IodmFsaWRhdG9ycywgYXN5bmNWYWxpZGF0b3JzLCBjYWxsU2V0RGlzYWJsZWRTdGF0ZSkge1xuICAgICAgc3VwZXIoKTtcbiAgICAgIHRoaXMuY2FsbFNldERpc2FibGVkU3RhdGUgPSBjYWxsU2V0RGlzYWJsZWRTdGF0ZTtcbiAgICAgIHRoaXMuX3NldFZhbGlkYXRvcnModmFsaWRhdG9ycyk7XG4gICAgICB0aGlzLl9zZXRBc3luY1ZhbGlkYXRvcnMoYXN5bmNWYWxpZGF0b3JzKTtcbiAgICB9XG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlcykge1xuICAgICAgdGhpcy5vbkNoYW5nZXMoY2hhbmdlcyk7XG4gICAgfVxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgdGhpcy5vbkRlc3Ryb3koKTtcbiAgICB9XG4gICAgb25DaGFuZ2VzKGNoYW5nZXMpIHtcbiAgICAgIHRoaXMuX2NoZWNrRm9ybVByZXNlbnQoKTtcbiAgICAgIGlmIChjaGFuZ2VzLmhhc093blByb3BlcnR5KCdmb3JtJykpIHtcbiAgICAgICAgdGhpcy5fdXBkYXRlVmFsaWRhdG9ycygpO1xuICAgICAgICB0aGlzLl91cGRhdGVEb21WYWx1ZSgpO1xuICAgICAgICB0aGlzLl91cGRhdGVSZWdpc3RyYXRpb25zKCk7XG4gICAgICAgIHRoaXMuX29sZEZvcm0gPSB0aGlzLmZvcm07XG4gICAgICB9XG4gICAgfVxuICAgIG9uRGVzdHJveSgpIHtcbiAgICAgIGlmICh0aGlzLmZvcm0pIHtcbiAgICAgICAgY2xlYW5VcFZhbGlkYXRvcnModGhpcy5mb3JtLCB0aGlzKTtcbiAgICAgICAgaWYgKHRoaXMuZm9ybS5fb25Db2xsZWN0aW9uQ2hhbmdlID09PSB0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2UpIHtcbiAgICAgICAgICB0aGlzLmZvcm0uX3JlZ2lzdGVyT25Db2xsZWN0aW9uQ2hhbmdlKCgpID0+IHt9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBnZXQgZm9ybURpcmVjdGl2ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBnZXQgcGF0aCgpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgYWRkQ29udHJvbChkaXIpIHtcbiAgICAgIGNvbnN0IGN0cmwgPSB0aGlzLmZvcm0uZ2V0KGRpci5wYXRoKTtcbiAgICAgIHNldFVwQ29udHJvbChjdHJsLCBkaXIsIHRoaXMuY2FsbFNldERpc2FibGVkU3RhdGUpO1xuICAgICAgY3RybC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtcbiAgICAgICAgZW1pdEV2ZW50OiBmYWxzZVxuICAgICAgfSk7XG4gICAgICB0aGlzLmRpcmVjdGl2ZXMucHVzaChkaXIpO1xuICAgICAgcmV0dXJuIGN0cmw7XG4gICAgfVxuICAgIGdldENvbnRyb2woZGlyKSB7XG4gICAgICByZXR1cm4gdGhpcy5mb3JtLmdldChkaXIucGF0aCk7XG4gICAgfVxuICAgIHJlbW92ZUNvbnRyb2woZGlyKSB7XG4gICAgICBjbGVhblVwQ29udHJvbChkaXIuY29udHJvbCB8fCBudWxsLCBkaXIsIGZhbHNlKTtcbiAgICAgIHJlbW92ZUxpc3RJdGVtJDEodGhpcy5kaXJlY3RpdmVzLCBkaXIpO1xuICAgIH1cbiAgICBhZGRGb3JtR3JvdXAoZGlyKSB7XG4gICAgICB0aGlzLl9zZXRVcEZvcm1Db250YWluZXIoZGlyKTtcbiAgICB9XG4gICAgcmVtb3ZlRm9ybUdyb3VwKGRpcikge1xuICAgICAgdGhpcy5fY2xlYW5VcEZvcm1Db250YWluZXIoZGlyKTtcbiAgICB9XG4gICAgZ2V0Rm9ybUdyb3VwKGRpcikge1xuICAgICAgcmV0dXJuIHRoaXMuZm9ybS5nZXQoZGlyLnBhdGgpO1xuICAgIH1cbiAgICBnZXRGb3JtQXJyYXkoZGlyKSB7XG4gICAgICByZXR1cm4gdGhpcy5mb3JtLmdldChkaXIucGF0aCk7XG4gICAgfVxuICAgIGFkZEZvcm1BcnJheShkaXIpIHtcbiAgICAgIHRoaXMuX3NldFVwRm9ybUNvbnRhaW5lcihkaXIpO1xuICAgIH1cbiAgICByZW1vdmVGb3JtQXJyYXkoZGlyKSB7XG4gICAgICB0aGlzLl9jbGVhblVwRm9ybUNvbnRhaW5lcihkaXIpO1xuICAgIH1cbiAgICB1cGRhdGVNb2RlbChkaXIsIHZhbHVlKSB7XG4gICAgICBjb25zdCBjdHJsID0gdGhpcy5mb3JtLmdldChkaXIucGF0aCk7XG4gICAgICBjdHJsLnNldFZhbHVlKHZhbHVlKTtcbiAgICB9XG4gICAgb25SZXNldCgpIHtcbiAgICAgIHRoaXMucmVzZXRGb3JtKCk7XG4gICAgfVxuICAgIHJlc2V0Rm9ybSh2YWx1ZSA9IHVuZGVmaW5lZCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICB0aGlzLmZvcm0ucmVzZXQodmFsdWUsIG9wdGlvbnMpO1xuICAgICAgdGhpcy5fc3VibWl0dGVkUmVhY3RpdmUuc2V0KGZhbHNlKTtcbiAgICB9XG4gICAgb25TdWJtaXQoJGV2ZW50KSB7XG4gICAgICB0aGlzLnN1Ym1pdHRlZCA9IHRydWU7XG4gICAgICBzeW5jUGVuZGluZ0NvbnRyb2xzKHRoaXMuZm9ybSwgdGhpcy5kaXJlY3RpdmVzKTtcbiAgICAgIHRoaXMubmdTdWJtaXQuZW1pdCgkZXZlbnQpO1xuICAgICAgdGhpcy5mb3JtLl9ldmVudHMubmV4dChuZXcgRm9ybVN1Ym1pdHRlZEV2ZW50KHRoaXMuY29udHJvbCkpO1xuICAgICAgcmV0dXJuICRldmVudD8udGFyZ2V0Py5tZXRob2QgPT09ICdkaWFsb2cnO1xuICAgIH1cbiAgICBfdXBkYXRlRG9tVmFsdWUoKSB7XG4gICAgICB0aGlzLmRpcmVjdGl2ZXMuZm9yRWFjaChkaXIgPT4ge1xuICAgICAgICBjb25zdCBvbGRDdHJsID0gZGlyLmNvbnRyb2w7XG4gICAgICAgIGNvbnN0IG5ld0N0cmwgPSB0aGlzLmZvcm0uZ2V0KGRpci5wYXRoKTtcbiAgICAgICAgaWYgKG9sZEN0cmwgIT09IG5ld0N0cmwpIHtcbiAgICAgICAgICBjbGVhblVwQ29udHJvbChvbGRDdHJsIHx8IG51bGwsIGRpcik7XG4gICAgICAgICAgaWYgKGlzRm9ybUNvbnRyb2wobmV3Q3RybCkpIHtcbiAgICAgICAgICAgIHNldFVwQ29udHJvbChuZXdDdHJsLCBkaXIsIHRoaXMuY2FsbFNldERpc2FibGVkU3RhdGUpO1xuICAgICAgICAgICAgZGlyLmNvbnRyb2wgPSBuZXdDdHJsO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICB0aGlzLmZvcm0uX3VwZGF0ZVRyZWVWYWxpZGl0eSh7XG4gICAgICAgIGVtaXRFdmVudDogZmFsc2VcbiAgICAgIH0pO1xuICAgIH1cbiAgICBfc2V0VXBGb3JtQ29udGFpbmVyKGRpcikge1xuICAgICAgY29uc3QgY3RybCA9IHRoaXMuZm9ybS5nZXQoZGlyLnBhdGgpO1xuICAgICAgc2V0VXBGb3JtQ29udGFpbmVyKGN0cmwsIGRpcik7XG4gICAgICBjdHJsLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe1xuICAgICAgICBlbWl0RXZlbnQ6IGZhbHNlXG4gICAgICB9KTtcbiAgICB9XG4gICAgX2NsZWFuVXBGb3JtQ29udGFpbmVyKGRpcikge1xuICAgICAgY29uc3QgY3RybCA9IHRoaXMuZm9ybT8uZ2V0KGRpci5wYXRoKTtcbiAgICAgIGlmIChjdHJsKSB7XG4gICAgICAgIGNvbnN0IGlzQ29udHJvbFVwZGF0ZWQgPSBjbGVhblVwRm9ybUNvbnRhaW5lcihjdHJsLCBkaXIpO1xuICAgICAgICBpZiAoaXNDb250cm9sVXBkYXRlZCkge1xuICAgICAgICAgIGN0cmwudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7XG4gICAgICAgICAgICBlbWl0RXZlbnQ6IGZhbHNlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgX3VwZGF0ZVJlZ2lzdHJhdGlvbnMoKSB7XG4gICAgICB0aGlzLmZvcm0uX3JlZ2lzdGVyT25Db2xsZWN0aW9uQ2hhbmdlKHRoaXMuX29uQ29sbGVjdGlvbkNoYW5nZSk7XG4gICAgICB0aGlzLl9vbGRGb3JtPy5fcmVnaXN0ZXJPbkNvbGxlY3Rpb25DaGFuZ2UoKCkgPT4ge30pO1xuICAgIH1cbiAgICBfdXBkYXRlVmFsaWRhdG9ycygpIHtcbiAgICAgIHNldFVwVmFsaWRhdG9ycyh0aGlzLmZvcm0sIHRoaXMpO1xuICAgICAgaWYgKHRoaXMuX29sZEZvcm0pIHtcbiAgICAgICAgY2xlYW5VcFZhbGlkYXRvcnModGhpcy5fb2xkRm9ybSwgdGhpcyk7XG4gICAgICB9XG4gICAgfVxuICAgIF9jaGVja0Zvcm1QcmVzZW50KCkge1xuICAgICAgaWYgKCF0aGlzLmZvcm0gJiYgKHR5cGVvZiBuZ0Rldk1vZGUgPT09ICd1bmRlZmluZWQnIHx8IG5nRGV2TW9kZSkpIHtcbiAgICAgICAgdGhyb3cgbWlzc2luZ0Zvcm1FeGNlcHRpb24oKTtcbiAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIMm1ZmFjID0gZnVuY3Rpb24gQWJzdHJhY3RGb3JtRGlyZWN0aXZlX0ZhY3RvcnkoX19uZ0ZhY3RvcnlUeXBlX18pIHtcbiAgICAgIHJldHVybiBuZXcgKF9fbmdGYWN0b3J5VHlwZV9fIHx8IEFic3RyYWN0Rm9ybURpcmVjdGl2ZSkoaTAuybXJtWRpcmVjdGl2ZUluamVjdChOR19WQUxJREFUT1JTLCAxMCksIGkwLsm1ybVkaXJlY3RpdmVJbmplY3QoTkdfQVNZTkNfVkFMSURBVE9SUywgMTApLCBpMC7Jtcm1ZGlyZWN0aXZlSW5qZWN0KENBTExfU0VUX0RJU0FCTEVEX1NUQVRFLCA4KSk7XG4gICAgfTtcbiAgICBzdGF0aWMgybVkaXIgPSAvKiBAX19QVVJFX18gKi9pMC7Jtcm1ZGVmaW5lRGlyZWN0aXZlKHtcbiAgICAgIHR5cGU6IEFic3RyYWN0Rm9ybURpcmVjdGl2ZSxcbiAgICAgIGZlYXR1cmVzOiBbaTAuybXJtUluaGVyaXREZWZpbml0aW9uRmVhdHVyZSwgaTAuybXJtU5nT25DaGFuZ2VzRmVhdHVyZV1cbiAgICB9KTtcbiAgfVxuICByZXR1cm4gQWJzdHJhY3RGb3JtRGlyZWN0aXZlO1xufSkoKTtcbi8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICAodHlwZW9mIG5nRGV2TW9kZSA9PT0gXCJ1bmRlZmluZWRcIiB8fCBuZ0Rldk1vZGUpICYmIHZvaWQgMDtcbn0pKCk7XG5jb25zdCBmb3JtRGlyZWN0aXZlUHJvdmlkZXIkMSA9IHtcbiAgcHJvdmlkZTogQ29udHJvbENvbnRhaW5lcixcbiAgdXNlRXhpc3Rpbmc6IC8qI19fUFVSRV9fKi9mb3J3YXJkUmVmKCgpID0+IEZvcm1BcnJheURpcmVjdGl2ZSlcbn07XG5sZXQgRm9ybUFycmF5RGlyZWN0aXZlID0gLyojX19QVVJFX18qLygoKSA9PiB7XG4gIGNsYXNzIEZvcm1BcnJheURpcmVjdGl2ZSBleHRlbmRzIEFic3RyYWN0Rm9ybURpcmVjdGl2ZSB7XG4gICAgZm9ybSA9IG51bGw7XG4gICAgbmdTdWJtaXQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgZ2V0IGNvbnRyb2woKSB7XG4gICAgICByZXR1cm4gdGhpcy5mb3JtO1xuICAgIH1cbiAgICBzdGF0aWMgybVmYWMgPSAvKiBAX19QVVJFX18gKi8oKCkgPT4ge1xuICAgICAgbGV0IMm1Rm9ybUFycmF5RGlyZWN0aXZlX0Jhc2VGYWN0b3J5O1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIEZvcm1BcnJheURpcmVjdGl2ZV9GYWN0b3J5KF9fbmdGYWN0b3J5VHlwZV9fKSB7XG4gICAgICAgIHJldHVybiAoybVGb3JtQXJyYXlEaXJlY3RpdmVfQmFzZUZhY3RvcnkgfHwgKMm1Rm9ybUFycmF5RGlyZWN0aXZlX0Jhc2VGYWN0b3J5ID0gaTAuybXJtWdldEluaGVyaXRlZEZhY3RvcnkoRm9ybUFycmF5RGlyZWN0aXZlKSkpKF9fbmdGYWN0b3J5VHlwZV9fIHx8IEZvcm1BcnJheURpcmVjdGl2ZSk7XG4gICAgICB9O1xuICAgIH0pKCk7XG4gICAgc3RhdGljIMm1ZGlyID0gLyogQF9fUFVSRV9fICovaTAuybXJtWRlZmluZURpcmVjdGl2ZSh7XG4gICAgICB0eXBlOiBGb3JtQXJyYXlEaXJlY3RpdmUsXG4gICAgICBzZWxlY3RvcnM6IFtbXCJcIiwgXCJmb3JtQXJyYXlcIiwgXCJcIl1dLFxuICAgICAgaG9zdEJpbmRpbmdzOiBmdW5jdGlvbiBGb3JtQXJyYXlEaXJlY3RpdmVfSG9zdEJpbmRpbmdzKHJmLCBjdHgpIHtcbiAgICAgICAgaWYgKHJmICYgMSkge1xuICAgICAgICAgIGkwLsm1ybVsaXN0ZW5lcihcInN1Ym1pdFwiLCBmdW5jdGlvbiBGb3JtQXJyYXlEaXJlY3RpdmVfc3VibWl0X0hvc3RCaW5kaW5nSGFuZGxlcigkZXZlbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBjdHgub25TdWJtaXQoJGV2ZW50KTtcbiAgICAgICAgICB9KShcInJlc2V0XCIsIGZ1bmN0aW9uIEZvcm1BcnJheURpcmVjdGl2ZV9yZXNldF9Ib3N0QmluZGluZ0hhbmRsZXIoKSB7XG4gICAgICAgICAgICByZXR1cm4gY3R4Lm9uUmVzZXQoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGlucHV0czoge1xuICAgICAgICBmb3JtOiBbMCwgXCJmb3JtQXJyYXlcIiwgXCJmb3JtXCJdXG4gICAgICB9LFxuICAgICAgb3V0cHV0czoge1xuICAgICAgICBuZ1N1Ym1pdDogXCJuZ1N1Ym1pdFwiXG4gICAgICB9LFxuICAgICAgZXhwb3J0QXM6IFtcIm5nRm9ybVwiXSxcbiAgICAgIHN0YW5kYWxvbmU6IGZhbHNlLFxuICAgICAgZmVhdHVyZXM6IFtpMC7Jtcm1UHJvdmlkZXJzRmVhdHVyZShbZm9ybURpcmVjdGl2ZVByb3ZpZGVyJDFdKSwgaTAuybXJtUluaGVyaXREZWZpbml0aW9uRmVhdHVyZV1cbiAgICB9KTtcbiAgfVxuICByZXR1cm4gRm9ybUFycmF5RGlyZWN0aXZlO1xufSkoKTtcbi8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICAodHlwZW9mIG5nRGV2TW9kZSA9PT0gXCJ1bmRlZmluZWRcIiB8fCBuZ0Rldk1vZGUpICYmIHZvaWQgMDtcbn0pKCk7XG5jb25zdCBOR19NT0RFTF9XSVRIX0ZPUk1fQ09OVFJPTF9XQVJOSU5HID0gLyojX19QVVJFX18qL25ldyBJbmplY3Rpb25Ub2tlbih0eXBlb2YgbmdEZXZNb2RlICE9PSAndW5kZWZpbmVkJyAmJiBuZ0Rldk1vZGUgPyAnTmdNb2RlbFdpdGhGb3JtQ29udHJvbFdhcm5pbmcnIDogJycpO1xuY29uc3QgZm9ybUNvbnRyb2xCaW5kaW5nID0ge1xuICBwcm92aWRlOiBOZ0NvbnRyb2wsXG4gIHVzZUV4aXN0aW5nOiAvKiNfX1BVUkVfXyovZm9yd2FyZFJlZigoKSA9PiBGb3JtQ29udHJvbERpcmVjdGl2ZSlcbn07XG5sZXQgRm9ybUNvbnRyb2xEaXJlY3RpdmUgPSAvKiNfX1BVUkVfXyovKCgpID0+IHtcbiAgY2xhc3MgRm9ybUNvbnRyb2xEaXJlY3RpdmUgZXh0ZW5kcyBOZ0NvbnRyb2wge1xuICAgIF9uZ01vZGVsV2FybmluZ0NvbmZpZztcbiAgICBjYWxsU2V0RGlzYWJsZWRTdGF0ZTtcbiAgICB2aWV3TW9kZWw7XG4gICAgZm9ybTtcbiAgICBzZXQgaXNEaXNhYmxlZChpc0Rpc2FibGVkKSB7XG4gICAgICBpZiAodHlwZW9mIG5nRGV2TW9kZSA9PT0gJ3VuZGVmaW5lZCcgfHwgbmdEZXZNb2RlKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihkaXNhYmxlZEF0dHJXYXJuaW5nKTtcbiAgICAgIH1cbiAgICB9XG4gICAgbW9kZWw7XG4gICAgdXBkYXRlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIHN0YXRpYyBfbmdNb2RlbFdhcm5pbmdTZW50T25jZSA9IGZhbHNlO1xuICAgIF9uZ01vZGVsV2FybmluZ1NlbnQgPSBmYWxzZTtcbiAgICBjb25zdHJ1Y3Rvcih2YWxpZGF0b3JzLCBhc3luY1ZhbGlkYXRvcnMsIHZhbHVlQWNjZXNzb3JzLCBfbmdNb2RlbFdhcm5pbmdDb25maWcsIGNhbGxTZXREaXNhYmxlZFN0YXRlKSB7XG4gICAgICBzdXBlcigpO1xuICAgICAgdGhpcy5fbmdNb2RlbFdhcm5pbmdDb25maWcgPSBfbmdNb2RlbFdhcm5pbmdDb25maWc7XG4gICAgICB0aGlzLmNhbGxTZXREaXNhYmxlZFN0YXRlID0gY2FsbFNldERpc2FibGVkU3RhdGU7XG4gICAgICB0aGlzLl9zZXRWYWxpZGF0b3JzKHZhbGlkYXRvcnMpO1xuICAgICAgdGhpcy5fc2V0QXN5bmNWYWxpZGF0b3JzKGFzeW5jVmFsaWRhdG9ycyk7XG4gICAgICB0aGlzLnZhbHVlQWNjZXNzb3IgPSBzZWxlY3RWYWx1ZUFjY2Vzc29yKHRoaXMsIHZhbHVlQWNjZXNzb3JzKTtcbiAgICB9XG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlcykge1xuICAgICAgaWYgKHRoaXMuX2lzQ29udHJvbENoYW5nZWQoY2hhbmdlcykpIHtcbiAgICAgICAgY29uc3QgcHJldmlvdXNGb3JtID0gY2hhbmdlc1snZm9ybSddLnByZXZpb3VzVmFsdWU7XG4gICAgICAgIGlmIChwcmV2aW91c0Zvcm0pIHtcbiAgICAgICAgICBjbGVhblVwQ29udHJvbChwcmV2aW91c0Zvcm0sIHRoaXMsIGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgICBzZXRVcENvbnRyb2wodGhpcy5mb3JtLCB0aGlzLCB0aGlzLmNhbGxTZXREaXNhYmxlZFN0YXRlKTtcbiAgICAgICAgdGhpcy5mb3JtLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe1xuICAgICAgICAgIGVtaXRFdmVudDogZmFsc2VcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAoaXNQcm9wZXJ0eVVwZGF0ZWQoY2hhbmdlcywgdGhpcy52aWV3TW9kZWwpKSB7XG4gICAgICAgIGlmICh0eXBlb2YgbmdEZXZNb2RlID09PSAndW5kZWZpbmVkJyB8fCBuZ0Rldk1vZGUpIHtcbiAgICAgICAgICBfbmdNb2RlbFdhcm5pbmcoJ2Zvcm1Db250cm9sJywgRm9ybUNvbnRyb2xEaXJlY3RpdmUsIHRoaXMsIHRoaXMuX25nTW9kZWxXYXJuaW5nQ29uZmlnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZvcm0uc2V0VmFsdWUodGhpcy5tb2RlbCk7XG4gICAgICAgIHRoaXMudmlld01vZGVsID0gdGhpcy5tb2RlbDtcbiAgICAgIH1cbiAgICB9XG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICBpZiAodGhpcy5mb3JtKSB7XG4gICAgICAgIGNsZWFuVXBDb250cm9sKHRoaXMuZm9ybSwgdGhpcywgZmFsc2UpO1xuICAgICAgfVxuICAgIH1cbiAgICBnZXQgcGF0aCgpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgZ2V0IGNvbnRyb2woKSB7XG4gICAgICByZXR1cm4gdGhpcy5mb3JtO1xuICAgIH1cbiAgICB2aWV3VG9Nb2RlbFVwZGF0ZShuZXdWYWx1ZSkge1xuICAgICAgdGhpcy52aWV3TW9kZWwgPSBuZXdWYWx1ZTtcbiAgICAgIHRoaXMudXBkYXRlLmVtaXQobmV3VmFsdWUpO1xuICAgIH1cbiAgICBfaXNDb250cm9sQ2hhbmdlZChjaGFuZ2VzKSB7XG4gICAgICByZXR1cm4gY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgnZm9ybScpO1xuICAgIH1cbiAgICBzdGF0aWMgybVmYWMgPSBmdW5jdGlvbiBGb3JtQ29udHJvbERpcmVjdGl2ZV9GYWN0b3J5KF9fbmdGYWN0b3J5VHlwZV9fKSB7XG4gICAgICByZXR1cm4gbmV3IChfX25nRmFjdG9yeVR5cGVfXyB8fCBGb3JtQ29udHJvbERpcmVjdGl2ZSkoaTAuybXJtWRpcmVjdGl2ZUluamVjdChOR19WQUxJREFUT1JTLCAxMCksIGkwLsm1ybVkaXJlY3RpdmVJbmplY3QoTkdfQVNZTkNfVkFMSURBVE9SUywgMTApLCBpMC7Jtcm1ZGlyZWN0aXZlSW5qZWN0KE5HX1ZBTFVFX0FDQ0VTU09SLCAxMCksIGkwLsm1ybVkaXJlY3RpdmVJbmplY3QoTkdfTU9ERUxfV0lUSF9GT1JNX0NPTlRST0xfV0FSTklORywgOCksIGkwLsm1ybVkaXJlY3RpdmVJbmplY3QoQ0FMTF9TRVRfRElTQUJMRURfU1RBVEUsIDgpKTtcbiAgICB9O1xuICAgIHN0YXRpYyDJtWRpciA9IC8qIEBfX1BVUkVfXyAqL2kwLsm1ybVkZWZpbmVEaXJlY3RpdmUoe1xuICAgICAgdHlwZTogRm9ybUNvbnRyb2xEaXJlY3RpdmUsXG4gICAgICBzZWxlY3RvcnM6IFtbXCJcIiwgXCJmb3JtQ29udHJvbFwiLCBcIlwiXV0sXG4gICAgICBpbnB1dHM6IHtcbiAgICAgICAgZm9ybTogWzAsIFwiZm9ybUNvbnRyb2xcIiwgXCJmb3JtXCJdLFxuICAgICAgICBpc0Rpc2FibGVkOiBbMCwgXCJkaXNhYmxlZFwiLCBcImlzRGlzYWJsZWRcIl0sXG4gICAgICAgIG1vZGVsOiBbMCwgXCJuZ01vZGVsXCIsIFwibW9kZWxcIl1cbiAgICAgIH0sXG4gICAgICBvdXRwdXRzOiB7XG4gICAgICAgIHVwZGF0ZTogXCJuZ01vZGVsQ2hhbmdlXCJcbiAgICAgIH0sXG4gICAgICBleHBvcnRBczogW1wibmdGb3JtXCJdLFxuICAgICAgc3RhbmRhbG9uZTogZmFsc2UsXG4gICAgICBmZWF0dXJlczogW2kwLsm1ybVQcm92aWRlcnNGZWF0dXJlKFtmb3JtQ29udHJvbEJpbmRpbmddKSwgaTAuybXJtUluaGVyaXREZWZpbml0aW9uRmVhdHVyZSwgaTAuybXJtU5nT25DaGFuZ2VzRmVhdHVyZV1cbiAgICB9KTtcbiAgfVxuICByZXR1cm4gRm9ybUNvbnRyb2xEaXJlY3RpdmU7XG59KSgpO1xuLyojX19QVVJFX18qLygoKSA9PiB7XG4gICh0eXBlb2YgbmdEZXZNb2RlID09PSBcInVuZGVmaW5lZFwiIHx8IG5nRGV2TW9kZSkgJiYgdm9pZCAwO1xufSkoKTtcbmNvbnN0IGZvcm1Hcm91cE5hbWVQcm92aWRlciA9IHtcbiAgcHJvdmlkZTogQ29udHJvbENvbnRhaW5lcixcbiAgdXNlRXhpc3Rpbmc6IC8qI19fUFVSRV9fKi9mb3J3YXJkUmVmKCgpID0+IEZvcm1Hcm91cE5hbWUpXG59O1xubGV0IEZvcm1Hcm91cE5hbWUgPSAvKiNfX1BVUkVfXyovKCgpID0+IHtcbiAgY2xhc3MgRm9ybUdyb3VwTmFtZSBleHRlbmRzIEFic3RyYWN0Rm9ybUdyb3VwRGlyZWN0aXZlIHtcbiAgICBuYW1lID0gbnVsbDtcbiAgICBjb25zdHJ1Y3RvcihwYXJlbnQsIHZhbGlkYXRvcnMsIGFzeW5jVmFsaWRhdG9ycykge1xuICAgICAgc3VwZXIoKTtcbiAgICAgIHRoaXMuX3BhcmVudCA9IHBhcmVudDtcbiAgICAgIHRoaXMuX3NldFZhbGlkYXRvcnModmFsaWRhdG9ycyk7XG4gICAgICB0aGlzLl9zZXRBc3luY1ZhbGlkYXRvcnMoYXN5bmNWYWxpZGF0b3JzKTtcbiAgICB9XG4gICAgX2NoZWNrUGFyZW50VHlwZSgpIHtcbiAgICAgIGlmIChoYXNJbnZhbGlkUGFyZW50KHRoaXMuX3BhcmVudCkgJiYgKHR5cGVvZiBuZ0Rldk1vZGUgPT09ICd1bmRlZmluZWQnIHx8IG5nRGV2TW9kZSkpIHtcbiAgICAgICAgdGhyb3cgZ3JvdXBQYXJlbnRFeGNlcHRpb24oKTtcbiAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIMm1ZmFjID0gZnVuY3Rpb24gRm9ybUdyb3VwTmFtZV9GYWN0b3J5KF9fbmdGYWN0b3J5VHlwZV9fKSB7XG4gICAgICByZXR1cm4gbmV3IChfX25nRmFjdG9yeVR5cGVfXyB8fCBGb3JtR3JvdXBOYW1lKShpMC7Jtcm1ZGlyZWN0aXZlSW5qZWN0KENvbnRyb2xDb250YWluZXIsIDEzKSwgaTAuybXJtWRpcmVjdGl2ZUluamVjdChOR19WQUxJREFUT1JTLCAxMCksIGkwLsm1ybVkaXJlY3RpdmVJbmplY3QoTkdfQVNZTkNfVkFMSURBVE9SUywgMTApKTtcbiAgICB9O1xuICAgIHN0YXRpYyDJtWRpciA9IC8qIEBfX1BVUkVfXyAqL2kwLsm1ybVkZWZpbmVEaXJlY3RpdmUoe1xuICAgICAgdHlwZTogRm9ybUdyb3VwTmFtZSxcbiAgICAgIHNlbGVjdG9yczogW1tcIlwiLCBcImZvcm1Hcm91cE5hbWVcIiwgXCJcIl1dLFxuICAgICAgaW5wdXRzOiB7XG4gICAgICAgIG5hbWU6IFswLCBcImZvcm1Hcm91cE5hbWVcIiwgXCJuYW1lXCJdXG4gICAgICB9LFxuICAgICAgc3RhbmRhbG9uZTogZmFsc2UsXG4gICAgICBmZWF0dXJlczogW2kwLsm1ybVQcm92aWRlcnNGZWF0dXJlKFtmb3JtR3JvdXBOYW1lUHJvdmlkZXJdKSwgaTAuybXJtUluaGVyaXREZWZpbml0aW9uRmVhdHVyZV1cbiAgICB9KTtcbiAgfVxuICByZXR1cm4gRm9ybUdyb3VwTmFtZTtcbn0pKCk7XG4vKiNfX1BVUkVfXyovKCgpID0+IHtcbiAgKHR5cGVvZiBuZ0Rldk1vZGUgPT09IFwidW5kZWZpbmVkXCIgfHwgbmdEZXZNb2RlKSAmJiB2b2lkIDA7XG59KSgpO1xuY29uc3QgZm9ybUFycmF5TmFtZVByb3ZpZGVyID0ge1xuICBwcm92aWRlOiBDb250cm9sQ29udGFpbmVyLFxuICB1c2VFeGlzdGluZzogLyojX19QVVJFX18qL2ZvcndhcmRSZWYoKCkgPT4gRm9ybUFycmF5TmFtZSlcbn07XG5sZXQgRm9ybUFycmF5TmFtZSA9IC8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICBjbGFzcyBGb3JtQXJyYXlOYW1lIGV4dGVuZHMgQ29udHJvbENvbnRhaW5lciB7XG4gICAgX3BhcmVudDtcbiAgICBuYW1lID0gbnVsbDtcbiAgICBjb25zdHJ1Y3RvcihwYXJlbnQsIHZhbGlkYXRvcnMsIGFzeW5jVmFsaWRhdG9ycykge1xuICAgICAgc3VwZXIoKTtcbiAgICAgIHRoaXMuX3BhcmVudCA9IHBhcmVudDtcbiAgICAgIHRoaXMuX3NldFZhbGlkYXRvcnModmFsaWRhdG9ycyk7XG4gICAgICB0aGlzLl9zZXRBc3luY1ZhbGlkYXRvcnMoYXN5bmNWYWxpZGF0b3JzKTtcbiAgICB9XG4gICAgbmdPbkluaXQoKSB7XG4gICAgICBpZiAoaGFzSW52YWxpZFBhcmVudCh0aGlzLl9wYXJlbnQpICYmICh0eXBlb2YgbmdEZXZNb2RlID09PSAndW5kZWZpbmVkJyB8fCBuZ0Rldk1vZGUpKSB7XG4gICAgICAgIHRocm93IGFycmF5UGFyZW50RXhjZXB0aW9uKCk7XG4gICAgICB9XG4gICAgICB0aGlzLmZvcm1EaXJlY3RpdmUuYWRkRm9ybUFycmF5KHRoaXMpO1xuICAgIH1cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgIHRoaXMuZm9ybURpcmVjdGl2ZT8ucmVtb3ZlRm9ybUFycmF5KHRoaXMpO1xuICAgIH1cbiAgICBnZXQgY29udHJvbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmZvcm1EaXJlY3RpdmUuZ2V0Rm9ybUFycmF5KHRoaXMpO1xuICAgIH1cbiAgICBnZXQgZm9ybURpcmVjdGl2ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9wYXJlbnQgPyB0aGlzLl9wYXJlbnQuZm9ybURpcmVjdGl2ZSA6IG51bGw7XG4gICAgfVxuICAgIGdldCBwYXRoKCkge1xuICAgICAgcmV0dXJuIGNvbnRyb2xQYXRoKHRoaXMubmFtZSA9PSBudWxsID8gdGhpcy5uYW1lIDogdGhpcy5uYW1lLnRvU3RyaW5nKCksIHRoaXMuX3BhcmVudCk7XG4gICAgfVxuICAgIHN0YXRpYyDJtWZhYyA9IGZ1bmN0aW9uIEZvcm1BcnJheU5hbWVfRmFjdG9yeShfX25nRmFjdG9yeVR5cGVfXykge1xuICAgICAgcmV0dXJuIG5ldyAoX19uZ0ZhY3RvcnlUeXBlX18gfHwgRm9ybUFycmF5TmFtZSkoaTAuybXJtWRpcmVjdGl2ZUluamVjdChDb250cm9sQ29udGFpbmVyLCAxMyksIGkwLsm1ybVkaXJlY3RpdmVJbmplY3QoTkdfVkFMSURBVE9SUywgMTApLCBpMC7Jtcm1ZGlyZWN0aXZlSW5qZWN0KE5HX0FTWU5DX1ZBTElEQVRPUlMsIDEwKSk7XG4gICAgfTtcbiAgICBzdGF0aWMgybVkaXIgPSAvKiBAX19QVVJFX18gKi9pMC7Jtcm1ZGVmaW5lRGlyZWN0aXZlKHtcbiAgICAgIHR5cGU6IEZvcm1BcnJheU5hbWUsXG4gICAgICBzZWxlY3RvcnM6IFtbXCJcIiwgXCJmb3JtQXJyYXlOYW1lXCIsIFwiXCJdXSxcbiAgICAgIGlucHV0czoge1xuICAgICAgICBuYW1lOiBbMCwgXCJmb3JtQXJyYXlOYW1lXCIsIFwibmFtZVwiXVxuICAgICAgfSxcbiAgICAgIHN0YW5kYWxvbmU6IGZhbHNlLFxuICAgICAgZmVhdHVyZXM6IFtpMC7Jtcm1UHJvdmlkZXJzRmVhdHVyZShbZm9ybUFycmF5TmFtZVByb3ZpZGVyXSksIGkwLsm1ybVJbmhlcml0RGVmaW5pdGlvbkZlYXR1cmVdXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIEZvcm1BcnJheU5hbWU7XG59KSgpO1xuLyojX19QVVJFX18qLygoKSA9PiB7XG4gICh0eXBlb2YgbmdEZXZNb2RlID09PSBcInVuZGVmaW5lZFwiIHx8IG5nRGV2TW9kZSkgJiYgdm9pZCAwO1xufSkoKTtcbmZ1bmN0aW9uIGhhc0ludmFsaWRQYXJlbnQocGFyZW50KSB7XG4gIHJldHVybiAhKHBhcmVudCBpbnN0YW5jZW9mIEZvcm1Hcm91cE5hbWUpICYmICEocGFyZW50IGluc3RhbmNlb2YgQWJzdHJhY3RGb3JtRGlyZWN0aXZlKSAmJiAhKHBhcmVudCBpbnN0YW5jZW9mIEZvcm1BcnJheU5hbWUpO1xufVxuY29uc3QgY29udHJvbE5hbWVCaW5kaW5nID0ge1xuICBwcm92aWRlOiBOZ0NvbnRyb2wsXG4gIHVzZUV4aXN0aW5nOiAvKiNfX1BVUkVfXyovZm9yd2FyZFJlZigoKSA9PiBGb3JtQ29udHJvbE5hbWUpXG59O1xubGV0IEZvcm1Db250cm9sTmFtZSA9IC8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICBjbGFzcyBGb3JtQ29udHJvbE5hbWUgZXh0ZW5kcyBOZ0NvbnRyb2wge1xuICAgIF9uZ01vZGVsV2FybmluZ0NvbmZpZztcbiAgICBfYWRkZWQgPSBmYWxzZTtcbiAgICB2aWV3TW9kZWw7XG4gICAgY29udHJvbDtcbiAgICBuYW1lID0gbnVsbDtcbiAgICBzZXQgaXNEaXNhYmxlZChpc0Rpc2FibGVkKSB7XG4gICAgICBpZiAodHlwZW9mIG5nRGV2TW9kZSA9PT0gJ3VuZGVmaW5lZCcgfHwgbmdEZXZNb2RlKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihkaXNhYmxlZEF0dHJXYXJuaW5nKTtcbiAgICAgIH1cbiAgICB9XG4gICAgbW9kZWw7XG4gICAgdXBkYXRlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIHN0YXRpYyBfbmdNb2RlbFdhcm5pbmdTZW50T25jZSA9IGZhbHNlO1xuICAgIF9uZ01vZGVsV2FybmluZ1NlbnQgPSBmYWxzZTtcbiAgICBjb25zdHJ1Y3RvcihwYXJlbnQsIHZhbGlkYXRvcnMsIGFzeW5jVmFsaWRhdG9ycywgdmFsdWVBY2Nlc3NvcnMsIF9uZ01vZGVsV2FybmluZ0NvbmZpZykge1xuICAgICAgc3VwZXIoKTtcbiAgICAgIHRoaXMuX25nTW9kZWxXYXJuaW5nQ29uZmlnID0gX25nTW9kZWxXYXJuaW5nQ29uZmlnO1xuICAgICAgdGhpcy5fcGFyZW50ID0gcGFyZW50O1xuICAgICAgdGhpcy5fc2V0VmFsaWRhdG9ycyh2YWxpZGF0b3JzKTtcbiAgICAgIHRoaXMuX3NldEFzeW5jVmFsaWRhdG9ycyhhc3luY1ZhbGlkYXRvcnMpO1xuICAgICAgdGhpcy52YWx1ZUFjY2Vzc29yID0gc2VsZWN0VmFsdWVBY2Nlc3Nvcih0aGlzLCB2YWx1ZUFjY2Vzc29ycyk7XG4gICAgfVxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXMpIHtcbiAgICAgIGlmICghdGhpcy5fYWRkZWQpIHRoaXMuX3NldFVwQ29udHJvbCgpO1xuICAgICAgaWYgKGlzUHJvcGVydHlVcGRhdGVkKGNoYW5nZXMsIHRoaXMudmlld01vZGVsKSkge1xuICAgICAgICBpZiAodHlwZW9mIG5nRGV2TW9kZSA9PT0gJ3VuZGVmaW5lZCcgfHwgbmdEZXZNb2RlKSB7XG4gICAgICAgICAgX25nTW9kZWxXYXJuaW5nKCdmb3JtQ29udHJvbE5hbWUnLCBGb3JtQ29udHJvbE5hbWUsIHRoaXMsIHRoaXMuX25nTW9kZWxXYXJuaW5nQ29uZmlnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnZpZXdNb2RlbCA9IHRoaXMubW9kZWw7XG4gICAgICAgIHRoaXMuZm9ybURpcmVjdGl2ZS51cGRhdGVNb2RlbCh0aGlzLCB0aGlzLm1vZGVsKTtcbiAgICAgIH1cbiAgICB9XG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICB0aGlzLmZvcm1EaXJlY3RpdmU/LnJlbW92ZUNvbnRyb2wodGhpcyk7XG4gICAgfVxuICAgIHZpZXdUb01vZGVsVXBkYXRlKG5ld1ZhbHVlKSB7XG4gICAgICB0aGlzLnZpZXdNb2RlbCA9IG5ld1ZhbHVlO1xuICAgICAgdGhpcy51cGRhdGUuZW1pdChuZXdWYWx1ZSk7XG4gICAgfVxuICAgIGdldCBwYXRoKCkge1xuICAgICAgcmV0dXJuIGNvbnRyb2xQYXRoKHRoaXMubmFtZSA9PSBudWxsID8gdGhpcy5uYW1lIDogdGhpcy5uYW1lLnRvU3RyaW5nKCksIHRoaXMuX3BhcmVudCk7XG4gICAgfVxuICAgIGdldCBmb3JtRGlyZWN0aXZlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3BhcmVudCA/IHRoaXMuX3BhcmVudC5mb3JtRGlyZWN0aXZlIDogbnVsbDtcbiAgICB9XG4gICAgX3NldFVwQ29udHJvbCgpIHtcbiAgICAgIGlmICh0eXBlb2YgbmdEZXZNb2RlID09PSAndW5kZWZpbmVkJyB8fCBuZ0Rldk1vZGUpIHtcbiAgICAgICAgY2hlY2tQYXJlbnRUeXBlKHRoaXMuX3BhcmVudCwgdGhpcy5uYW1lKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuY29udHJvbCA9IHRoaXMuZm9ybURpcmVjdGl2ZS5hZGRDb250cm9sKHRoaXMpO1xuICAgICAgdGhpcy5fYWRkZWQgPSB0cnVlO1xuICAgIH1cbiAgICBzdGF0aWMgybVmYWMgPSBmdW5jdGlvbiBGb3JtQ29udHJvbE5hbWVfRmFjdG9yeShfX25nRmFjdG9yeVR5cGVfXykge1xuICAgICAgcmV0dXJuIG5ldyAoX19uZ0ZhY3RvcnlUeXBlX18gfHwgRm9ybUNvbnRyb2xOYW1lKShpMC7Jtcm1ZGlyZWN0aXZlSW5qZWN0KENvbnRyb2xDb250YWluZXIsIDEzKSwgaTAuybXJtWRpcmVjdGl2ZUluamVjdChOR19WQUxJREFUT1JTLCAxMCksIGkwLsm1ybVkaXJlY3RpdmVJbmplY3QoTkdfQVNZTkNfVkFMSURBVE9SUywgMTApLCBpMC7Jtcm1ZGlyZWN0aXZlSW5qZWN0KE5HX1ZBTFVFX0FDQ0VTU09SLCAxMCksIGkwLsm1ybVkaXJlY3RpdmVJbmplY3QoTkdfTU9ERUxfV0lUSF9GT1JNX0NPTlRST0xfV0FSTklORywgOCkpO1xuICAgIH07XG4gICAgc3RhdGljIMm1ZGlyID0gLyogQF9fUFVSRV9fICovaTAuybXJtWRlZmluZURpcmVjdGl2ZSh7XG4gICAgICB0eXBlOiBGb3JtQ29udHJvbE5hbWUsXG4gICAgICBzZWxlY3RvcnM6IFtbXCJcIiwgXCJmb3JtQ29udHJvbE5hbWVcIiwgXCJcIl1dLFxuICAgICAgaW5wdXRzOiB7XG4gICAgICAgIG5hbWU6IFswLCBcImZvcm1Db250cm9sTmFtZVwiLCBcIm5hbWVcIl0sXG4gICAgICAgIGlzRGlzYWJsZWQ6IFswLCBcImRpc2FibGVkXCIsIFwiaXNEaXNhYmxlZFwiXSxcbiAgICAgICAgbW9kZWw6IFswLCBcIm5nTW9kZWxcIiwgXCJtb2RlbFwiXVxuICAgICAgfSxcbiAgICAgIG91dHB1dHM6IHtcbiAgICAgICAgdXBkYXRlOiBcIm5nTW9kZWxDaGFuZ2VcIlxuICAgICAgfSxcbiAgICAgIHN0YW5kYWxvbmU6IGZhbHNlLFxuICAgICAgZmVhdHVyZXM6IFtpMC7Jtcm1UHJvdmlkZXJzRmVhdHVyZShbY29udHJvbE5hbWVCaW5kaW5nXSksIGkwLsm1ybVJbmhlcml0RGVmaW5pdGlvbkZlYXR1cmUsIGkwLsm1ybVOZ09uQ2hhbmdlc0ZlYXR1cmVdXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIEZvcm1Db250cm9sTmFtZTtcbn0pKCk7XG4vKiNfX1BVUkVfXyovKCgpID0+IHtcbiAgKHR5cGVvZiBuZ0Rldk1vZGUgPT09IFwidW5kZWZpbmVkXCIgfHwgbmdEZXZNb2RlKSAmJiB2b2lkIDA7XG59KSgpO1xuZnVuY3Rpb24gY2hlY2tQYXJlbnRUeXBlKHBhcmVudCwgbmFtZSkge1xuICBpZiAoIShwYXJlbnQgaW5zdGFuY2VvZiBGb3JtR3JvdXBOYW1lKSAmJiBwYXJlbnQgaW5zdGFuY2VvZiBBYnN0cmFjdEZvcm1Hcm91cERpcmVjdGl2ZSkge1xuICAgIHRocm93IG5nTW9kZWxHcm91cEV4Y2VwdGlvbigpO1xuICB9IGVsc2UgaWYgKCEocGFyZW50IGluc3RhbmNlb2YgRm9ybUdyb3VwTmFtZSkgJiYgIShwYXJlbnQgaW5zdGFuY2VvZiBBYnN0cmFjdEZvcm1EaXJlY3RpdmUpICYmICEocGFyZW50IGluc3RhbmNlb2YgRm9ybUFycmF5TmFtZSkpIHtcbiAgICB0aHJvdyBjb250cm9sUGFyZW50RXhjZXB0aW9uKG5hbWUpO1xuICB9XG59XG5jb25zdCBmb3JtRGlyZWN0aXZlUHJvdmlkZXIgPSB7XG4gIHByb3ZpZGU6IENvbnRyb2xDb250YWluZXIsXG4gIHVzZUV4aXN0aW5nOiAvKiNfX1BVUkVfXyovZm9yd2FyZFJlZigoKSA9PiBGb3JtR3JvdXBEaXJlY3RpdmUpXG59O1xubGV0IEZvcm1Hcm91cERpcmVjdGl2ZSA9IC8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICBjbGFzcyBGb3JtR3JvdXBEaXJlY3RpdmUgZXh0ZW5kcyBBYnN0cmFjdEZvcm1EaXJlY3RpdmUge1xuICAgIGZvcm0gPSBudWxsO1xuICAgIG5nU3VibWl0ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIGdldCBjb250cm9sKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZm9ybTtcbiAgICB9XG4gICAgc3RhdGljIMm1ZmFjID0gLyogQF9fUFVSRV9fICovKCgpID0+IHtcbiAgICAgIGxldCDJtUZvcm1Hcm91cERpcmVjdGl2ZV9CYXNlRmFjdG9yeTtcbiAgICAgIHJldHVybiBmdW5jdGlvbiBGb3JtR3JvdXBEaXJlY3RpdmVfRmFjdG9yeShfX25nRmFjdG9yeVR5cGVfXykge1xuICAgICAgICByZXR1cm4gKMm1Rm9ybUdyb3VwRGlyZWN0aXZlX0Jhc2VGYWN0b3J5IHx8ICjJtUZvcm1Hcm91cERpcmVjdGl2ZV9CYXNlRmFjdG9yeSA9IGkwLsm1ybVnZXRJbmhlcml0ZWRGYWN0b3J5KEZvcm1Hcm91cERpcmVjdGl2ZSkpKShfX25nRmFjdG9yeVR5cGVfXyB8fCBGb3JtR3JvdXBEaXJlY3RpdmUpO1xuICAgICAgfTtcbiAgICB9KSgpO1xuICAgIHN0YXRpYyDJtWRpciA9IC8qIEBfX1BVUkVfXyAqL2kwLsm1ybVkZWZpbmVEaXJlY3RpdmUoe1xuICAgICAgdHlwZTogRm9ybUdyb3VwRGlyZWN0aXZlLFxuICAgICAgc2VsZWN0b3JzOiBbW1wiXCIsIFwiZm9ybUdyb3VwXCIsIFwiXCJdXSxcbiAgICAgIGhvc3RCaW5kaW5nczogZnVuY3Rpb24gRm9ybUdyb3VwRGlyZWN0aXZlX0hvc3RCaW5kaW5ncyhyZiwgY3R4KSB7XG4gICAgICAgIGlmIChyZiAmIDEpIHtcbiAgICAgICAgICBpMC7Jtcm1bGlzdGVuZXIoXCJzdWJtaXRcIiwgZnVuY3Rpb24gRm9ybUdyb3VwRGlyZWN0aXZlX3N1Ym1pdF9Ib3N0QmluZGluZ0hhbmRsZXIoJGV2ZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gY3R4Lm9uU3VibWl0KCRldmVudCk7XG4gICAgICAgICAgfSkoXCJyZXNldFwiLCBmdW5jdGlvbiBGb3JtR3JvdXBEaXJlY3RpdmVfcmVzZXRfSG9zdEJpbmRpbmdIYW5kbGVyKCkge1xuICAgICAgICAgICAgcmV0dXJuIGN0eC5vblJlc2V0KCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBpbnB1dHM6IHtcbiAgICAgICAgZm9ybTogWzAsIFwiZm9ybUdyb3VwXCIsIFwiZm9ybVwiXVxuICAgICAgfSxcbiAgICAgIG91dHB1dHM6IHtcbiAgICAgICAgbmdTdWJtaXQ6IFwibmdTdWJtaXRcIlxuICAgICAgfSxcbiAgICAgIGV4cG9ydEFzOiBbXCJuZ0Zvcm1cIl0sXG4gICAgICBzdGFuZGFsb25lOiBmYWxzZSxcbiAgICAgIGZlYXR1cmVzOiBbaTAuybXJtVByb3ZpZGVyc0ZlYXR1cmUoW2Zvcm1EaXJlY3RpdmVQcm92aWRlcl0pLCBpMC7Jtcm1SW5oZXJpdERlZmluaXRpb25GZWF0dXJlXVxuICAgIH0pO1xuICB9XG4gIHJldHVybiBGb3JtR3JvdXBEaXJlY3RpdmU7XG59KSgpO1xuLyojX19QVVJFX18qLygoKSA9PiB7XG4gICh0eXBlb2YgbmdEZXZNb2RlID09PSBcInVuZGVmaW5lZFwiIHx8IG5nRGV2TW9kZSkgJiYgdm9pZCAwO1xufSkoKTtcbmNvbnN0IFNFTEVDVF9WQUxVRV9BQ0NFU1NPUiA9IHtcbiAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gIHVzZUV4aXN0aW5nOiAvKiNfX1BVUkVfXyovZm9yd2FyZFJlZigoKSA9PiBTZWxlY3RDb250cm9sVmFsdWVBY2Nlc3NvciksXG4gIG11bHRpOiB0cnVlXG59O1xuZnVuY3Rpb24gX2J1aWxkVmFsdWVTdHJpbmckMShpZCwgdmFsdWUpIHtcbiAgaWYgKGlkID09IG51bGwpIHJldHVybiBgJHt2YWx1ZX1gO1xuICBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JykgdmFsdWUgPSAnT2JqZWN0JztcbiAgcmV0dXJuIGAke2lkfTogJHt2YWx1ZX1gLnNsaWNlKDAsIDUwKTtcbn1cbmZ1bmN0aW9uIF9leHRyYWN0SWQkMSh2YWx1ZVN0cmluZykge1xuICByZXR1cm4gdmFsdWVTdHJpbmcuc3BsaXQoJzonKVswXTtcbn1cbmxldCBTZWxlY3RDb250cm9sVmFsdWVBY2Nlc3NvciA9IC8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICBjbGFzcyBTZWxlY3RDb250cm9sVmFsdWVBY2Nlc3NvciBleHRlbmRzIEJ1aWx0SW5Db250cm9sVmFsdWVBY2Nlc3NvciB7XG4gICAgdmFsdWU7XG4gICAgX29wdGlvbk1hcCA9IG5ldyBNYXAoKTtcbiAgICBfaWRDb3VudGVyID0gMDtcbiAgICBzZXQgY29tcGFyZVdpdGgoZm4pIHtcbiAgICAgIGlmICh0eXBlb2YgZm4gIT09ICdmdW5jdGlvbicgJiYgKHR5cGVvZiBuZ0Rldk1vZGUgPT09ICd1bmRlZmluZWQnIHx8IG5nRGV2TW9kZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IF9SdW50aW1lRXJyb3IoMTIwMSwgYGNvbXBhcmVXaXRoIG11c3QgYmUgYSBmdW5jdGlvbiwgYnV0IHJlY2VpdmVkICR7SlNPTi5zdHJpbmdpZnkoZm4pfWApO1xuICAgICAgfVxuICAgICAgdGhpcy5fY29tcGFyZVdpdGggPSBmbjtcbiAgICB9XG4gICAgX2NvbXBhcmVXaXRoID0gT2JqZWN0LmlzO1xuICAgIGFwcFJlZkluamVjdG9yID0gaW5qZWN0KEFwcGxpY2F0aW9uUmVmKS5pbmplY3RvcjtcbiAgICBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuICAgIGNkciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG4gICAgX3F1ZXVlZFdyaXRlID0gZmFsc2U7XG4gICAgX3dyaXRlVmFsdWVBZnRlclJlbmRlcigpIHtcbiAgICAgIGlmICh0aGlzLl9xdWV1ZWRXcml0ZSB8fCB0aGlzLmFwcFJlZkluamVjdG9yLmRlc3Ryb3llZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLl9xdWV1ZWRXcml0ZSA9IHRydWU7XG4gICAgICBhZnRlck5leHRSZW5kZXIoe1xuICAgICAgICB3cml0ZTogKCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLmRlc3Ryb3lSZWYuZGVzdHJveWVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuX3F1ZXVlZFdyaXRlID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy53cml0ZVZhbHVlKHRoaXMudmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9LCB7XG4gICAgICAgIGluamVjdG9yOiB0aGlzLmFwcFJlZkluamVjdG9yXG4gICAgICB9KTtcbiAgICB9XG4gICAgd3JpdGVWYWx1ZSh2YWx1ZSkge1xuICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICBjb25zdCBpZCA9IHRoaXMuX2dldE9wdGlvbklkKHZhbHVlKTtcbiAgICAgIGNvbnN0IHZhbHVlU3RyaW5nID0gX2J1aWxkVmFsdWVTdHJpbmckMShpZCwgdmFsdWUpO1xuICAgICAgdGhpcy5zZXRQcm9wZXJ0eSgndmFsdWUnLCB2YWx1ZVN0cmluZyk7XG4gICAgfVxuICAgIHJlZ2lzdGVyT25DaGFuZ2UoZm4pIHtcbiAgICAgIHRoaXMub25DaGFuZ2UgPSB2YWx1ZVN0cmluZyA9PiB7XG4gICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLl9nZXRPcHRpb25WYWx1ZSh2YWx1ZVN0cmluZyk7XG4gICAgICAgIGZuKHRoaXMudmFsdWUpO1xuICAgICAgfTtcbiAgICB9XG4gICAgX3JlZ2lzdGVyT3B0aW9uKCkge1xuICAgICAgcmV0dXJuICh0aGlzLl9pZENvdW50ZXIrKykudG9TdHJpbmcoKTtcbiAgICB9XG4gICAgX2dldE9wdGlvbklkKHZhbHVlKSB7XG4gICAgICBmb3IgKGNvbnN0IGlkIG9mIHRoaXMuX29wdGlvbk1hcC5rZXlzKCkpIHtcbiAgICAgICAgaWYgKHRoaXMuX2NvbXBhcmVXaXRoKHRoaXMuX29wdGlvbk1hcC5nZXQoaWQpLCB2YWx1ZSkpIHJldHVybiBpZDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBfZ2V0T3B0aW9uVmFsdWUodmFsdWVTdHJpbmcpIHtcbiAgICAgIGNvbnN0IGlkID0gX2V4dHJhY3RJZCQxKHZhbHVlU3RyaW5nKTtcbiAgICAgIHJldHVybiB0aGlzLl9vcHRpb25NYXAuaGFzKGlkKSA/IHRoaXMuX29wdGlvbk1hcC5nZXQoaWQpIDogdmFsdWVTdHJpbmc7XG4gICAgfVxuICAgIHN0YXRpYyDJtWZhYyA9IC8qIEBfX1BVUkVfXyAqLygoKSA9PiB7XG4gICAgICBsZXQgybVTZWxlY3RDb250cm9sVmFsdWVBY2Nlc3Nvcl9CYXNlRmFjdG9yeTtcbiAgICAgIHJldHVybiBmdW5jdGlvbiBTZWxlY3RDb250cm9sVmFsdWVBY2Nlc3Nvcl9GYWN0b3J5KF9fbmdGYWN0b3J5VHlwZV9fKSB7XG4gICAgICAgIHJldHVybiAoybVTZWxlY3RDb250cm9sVmFsdWVBY2Nlc3Nvcl9CYXNlRmFjdG9yeSB8fCAoybVTZWxlY3RDb250cm9sVmFsdWVBY2Nlc3Nvcl9CYXNlRmFjdG9yeSA9IGkwLsm1ybVnZXRJbmhlcml0ZWRGYWN0b3J5KFNlbGVjdENvbnRyb2xWYWx1ZUFjY2Vzc29yKSkpKF9fbmdGYWN0b3J5VHlwZV9fIHx8IFNlbGVjdENvbnRyb2xWYWx1ZUFjY2Vzc29yKTtcbiAgICAgIH07XG4gICAgfSkoKTtcbiAgICBzdGF0aWMgybVkaXIgPSAvKiBAX19QVVJFX18gKi9pMC7Jtcm1ZGVmaW5lRGlyZWN0aXZlKHtcbiAgICAgIHR5cGU6IFNlbGVjdENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxuICAgICAgc2VsZWN0b3JzOiBbW1wic2VsZWN0XCIsIFwiZm9ybUNvbnRyb2xOYW1lXCIsIFwiXCIsIDMsIFwibXVsdGlwbGVcIiwgXCJcIl0sIFtcInNlbGVjdFwiLCBcImZvcm1Db250cm9sXCIsIFwiXCIsIDMsIFwibXVsdGlwbGVcIiwgXCJcIl0sIFtcInNlbGVjdFwiLCBcIm5nTW9kZWxcIiwgXCJcIiwgMywgXCJtdWx0aXBsZVwiLCBcIlwiXV0sXG4gICAgICBob3N0QmluZGluZ3M6IGZ1bmN0aW9uIFNlbGVjdENvbnRyb2xWYWx1ZUFjY2Vzc29yX0hvc3RCaW5kaW5ncyhyZiwgY3R4KSB7XG4gICAgICAgIGlmIChyZiAmIDEpIHtcbiAgICAgICAgICBpMC7Jtcm1bGlzdGVuZXIoXCJjaGFuZ2VcIiwgZnVuY3Rpb24gU2VsZWN0Q29udHJvbFZhbHVlQWNjZXNzb3JfY2hhbmdlX0hvc3RCaW5kaW5nSGFuZGxlcigkZXZlbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBjdHgub25DaGFuZ2UoJGV2ZW50LnRhcmdldC52YWx1ZSk7XG4gICAgICAgICAgfSkoXCJibHVyXCIsIGZ1bmN0aW9uIFNlbGVjdENvbnRyb2xWYWx1ZUFjY2Vzc29yX2JsdXJfSG9zdEJpbmRpbmdIYW5kbGVyKCkge1xuICAgICAgICAgICAgcmV0dXJuIGN0eC5vblRvdWNoZWQoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGlucHV0czoge1xuICAgICAgICBjb21wYXJlV2l0aDogXCJjb21wYXJlV2l0aFwiXG4gICAgICB9LFxuICAgICAgc3RhbmRhbG9uZTogZmFsc2UsXG4gICAgICBmZWF0dXJlczogW2kwLsm1ybVQcm92aWRlcnNGZWF0dXJlKFtTRUxFQ1RfVkFMVUVfQUNDRVNTT1JdKSwgaTAuybXJtUluaGVyaXREZWZpbml0aW9uRmVhdHVyZV1cbiAgICB9KTtcbiAgfVxuICByZXR1cm4gU2VsZWN0Q29udHJvbFZhbHVlQWNjZXNzb3I7XG59KSgpO1xuLyojX19QVVJFX18qLygoKSA9PiB7XG4gICh0eXBlb2YgbmdEZXZNb2RlID09PSBcInVuZGVmaW5lZFwiIHx8IG5nRGV2TW9kZSkgJiYgdm9pZCAwO1xufSkoKTtcbmxldCBOZ1NlbGVjdE9wdGlvbiA9IC8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICBjbGFzcyBOZ1NlbGVjdE9wdGlvbiB7XG4gICAgX2VsZW1lbnQ7XG4gICAgX3JlbmRlcmVyO1xuICAgIF9zZWxlY3Q7XG4gICAgaWQ7XG4gICAgY29uc3RydWN0b3IoX2VsZW1lbnQsIF9yZW5kZXJlciwgX3NlbGVjdCkge1xuICAgICAgdGhpcy5fZWxlbWVudCA9IF9lbGVtZW50O1xuICAgICAgdGhpcy5fcmVuZGVyZXIgPSBfcmVuZGVyZXI7XG4gICAgICB0aGlzLl9zZWxlY3QgPSBfc2VsZWN0O1xuICAgICAgaWYgKHRoaXMuX3NlbGVjdCkgdGhpcy5pZCA9IHRoaXMuX3NlbGVjdC5fcmVnaXN0ZXJPcHRpb24oKTtcbiAgICB9XG4gICAgc2V0IG5nVmFsdWUodmFsdWUpIHtcbiAgICAgIGlmICh0aGlzLl9zZWxlY3QgPT0gbnVsbCkgcmV0dXJuO1xuICAgICAgdGhpcy5fc2VsZWN0Ll9vcHRpb25NYXAuc2V0KHRoaXMuaWQsIHZhbHVlKTtcbiAgICAgIHRoaXMuX3NldEVsZW1lbnRWYWx1ZShfYnVpbGRWYWx1ZVN0cmluZyQxKHRoaXMuaWQsIHZhbHVlKSk7XG4gICAgICB0aGlzLl9zZWxlY3QuX3dyaXRlVmFsdWVBZnRlclJlbmRlcigpO1xuICAgIH1cbiAgICBzZXQgdmFsdWUodmFsdWUpIHtcbiAgICAgIHRoaXMuX3NldEVsZW1lbnRWYWx1ZSh2YWx1ZSk7XG4gICAgICB0aGlzLl9zZWxlY3Q/Ll93cml0ZVZhbHVlQWZ0ZXJSZW5kZXIoKTtcbiAgICB9XG4gICAgX3NldEVsZW1lbnRWYWx1ZSh2YWx1ZSkge1xuICAgICAgdGhpcy5fcmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LCAndmFsdWUnLCB2YWx1ZSk7XG4gICAgfVxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgdGhpcy5fc2VsZWN0Py5fb3B0aW9uTWFwLmRlbGV0ZSh0aGlzLmlkKTtcbiAgICAgIHRoaXMuX3NlbGVjdD8uX3dyaXRlVmFsdWVBZnRlclJlbmRlcigpO1xuICAgIH1cbiAgICBzdGF0aWMgybVmYWMgPSBmdW5jdGlvbiBOZ1NlbGVjdE9wdGlvbl9GYWN0b3J5KF9fbmdGYWN0b3J5VHlwZV9fKSB7XG4gICAgICByZXR1cm4gbmV3IChfX25nRmFjdG9yeVR5cGVfXyB8fCBOZ1NlbGVjdE9wdGlvbikoaTAuybXJtWRpcmVjdGl2ZUluamVjdChpMC5FbGVtZW50UmVmKSwgaTAuybXJtWRpcmVjdGl2ZUluamVjdChpMC5SZW5kZXJlcjIpLCBpMC7Jtcm1ZGlyZWN0aXZlSW5qZWN0KFNlbGVjdENvbnRyb2xWYWx1ZUFjY2Vzc29yLCA5KSk7XG4gICAgfTtcbiAgICBzdGF0aWMgybVkaXIgPSAvKiBAX19QVVJFX18gKi9pMC7Jtcm1ZGVmaW5lRGlyZWN0aXZlKHtcbiAgICAgIHR5cGU6IE5nU2VsZWN0T3B0aW9uLFxuICAgICAgc2VsZWN0b3JzOiBbW1wib3B0aW9uXCJdXSxcbiAgICAgIGlucHV0czoge1xuICAgICAgICBuZ1ZhbHVlOiBcIm5nVmFsdWVcIixcbiAgICAgICAgdmFsdWU6IFwidmFsdWVcIlxuICAgICAgfSxcbiAgICAgIHN0YW5kYWxvbmU6IGZhbHNlXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIE5nU2VsZWN0T3B0aW9uO1xufSkoKTtcbi8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICAodHlwZW9mIG5nRGV2TW9kZSA9PT0gXCJ1bmRlZmluZWRcIiB8fCBuZ0Rldk1vZGUpICYmIHZvaWQgMDtcbn0pKCk7XG5jb25zdCBTRUxFQ1RfTVVMVElQTEVfVkFMVUVfQUNDRVNTT1IgPSB7XG4gIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICB1c2VFeGlzdGluZzogLyojX19QVVJFX18qL2ZvcndhcmRSZWYoKCkgPT4gU2VsZWN0TXVsdGlwbGVDb250cm9sVmFsdWVBY2Nlc3NvciksXG4gIG11bHRpOiB0cnVlXG59O1xuZnVuY3Rpb24gX2J1aWxkVmFsdWVTdHJpbmcoaWQsIHZhbHVlKSB7XG4gIGlmIChpZCA9PSBudWxsKSByZXR1cm4gYCR7dmFsdWV9YDtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHZhbHVlID0gYCcke3ZhbHVlfSdgO1xuICBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JykgdmFsdWUgPSAnT2JqZWN0JztcbiAgcmV0dXJuIGAke2lkfTogJHt2YWx1ZX1gLnNsaWNlKDAsIDUwKTtcbn1cbmZ1bmN0aW9uIF9leHRyYWN0SWQodmFsdWVTdHJpbmcpIHtcbiAgcmV0dXJuIHZhbHVlU3RyaW5nLnNwbGl0KCc6JylbMF07XG59XG5sZXQgU2VsZWN0TXVsdGlwbGVDb250cm9sVmFsdWVBY2Nlc3NvciA9IC8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICBjbGFzcyBTZWxlY3RNdWx0aXBsZUNvbnRyb2xWYWx1ZUFjY2Vzc29yIGV4dGVuZHMgQnVpbHRJbkNvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcbiAgICB2YWx1ZTtcbiAgICBfb3B0aW9uTWFwID0gbmV3IE1hcCgpO1xuICAgIF9pZENvdW50ZXIgPSAwO1xuICAgIHNldCBjb21wYXJlV2l0aChmbikge1xuICAgICAgaWYgKHR5cGVvZiBmbiAhPT0gJ2Z1bmN0aW9uJyAmJiAodHlwZW9mIG5nRGV2TW9kZSA9PT0gJ3VuZGVmaW5lZCcgfHwgbmdEZXZNb2RlKSkge1xuICAgICAgICB0aHJvdyBuZXcgX1J1bnRpbWVFcnJvcigxMjAxLCBgY29tcGFyZVdpdGggbXVzdCBiZSBhIGZ1bmN0aW9uLCBidXQgcmVjZWl2ZWQgJHtKU09OLnN0cmluZ2lmeShmbil9YCk7XG4gICAgICB9XG4gICAgICB0aGlzLl9jb21wYXJlV2l0aCA9IGZuO1xuICAgIH1cbiAgICBfY29tcGFyZVdpdGggPSBPYmplY3QuaXM7XG4gICAgd3JpdGVWYWx1ZSh2YWx1ZSkge1xuICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgbGV0IG9wdGlvblNlbGVjdGVkU3RhdGVTZXR0ZXI7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgY29uc3QgaWRzID0gdmFsdWUubWFwKHYgPT4gdGhpcy5fZ2V0T3B0aW9uSWQodikpO1xuICAgICAgICBvcHRpb25TZWxlY3RlZFN0YXRlU2V0dGVyID0gKG9wdCwgbykgPT4ge1xuICAgICAgICAgIG9wdC5fc2V0U2VsZWN0ZWQoaWRzLmluZGV4T2Yoby50b1N0cmluZygpKSA+IC0xKTtcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9wdGlvblNlbGVjdGVkU3RhdGVTZXR0ZXIgPSAob3B0LCBvKSA9PiB7XG4gICAgICAgICAgb3B0Ll9zZXRTZWxlY3RlZChmYWxzZSk7XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICB0aGlzLl9vcHRpb25NYXAuZm9yRWFjaChvcHRpb25TZWxlY3RlZFN0YXRlU2V0dGVyKTtcbiAgICB9XG4gICAgcmVnaXN0ZXJPbkNoYW5nZShmbikge1xuICAgICAgdGhpcy5vbkNoYW5nZSA9IGVsZW1lbnQgPT4ge1xuICAgICAgICBjb25zdCBzZWxlY3RlZCA9IFtdO1xuICAgICAgICBjb25zdCBzZWxlY3RlZE9wdGlvbnMgPSBlbGVtZW50LnNlbGVjdGVkT3B0aW9ucztcbiAgICAgICAgaWYgKHNlbGVjdGVkT3B0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHNlbGVjdGVkT3B0aW9ucztcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9wdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IG9wdCA9IG9wdGlvbnNbaV07XG4gICAgICAgICAgICBjb25zdCB2YWwgPSB0aGlzLl9nZXRPcHRpb25WYWx1ZShvcHQudmFsdWUpO1xuICAgICAgICAgICAgc2VsZWN0ZWQucHVzaCh2YWwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBvcHRpb25zID0gZWxlbWVudC5vcHRpb25zO1xuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3B0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3Qgb3B0ID0gb3B0aW9uc1tpXTtcbiAgICAgICAgICAgIGlmIChvcHQuc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgY29uc3QgdmFsID0gdGhpcy5fZ2V0T3B0aW9uVmFsdWUob3B0LnZhbHVlKTtcbiAgICAgICAgICAgICAgc2VsZWN0ZWQucHVzaCh2YWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLnZhbHVlID0gc2VsZWN0ZWQ7XG4gICAgICAgIGZuKHNlbGVjdGVkKTtcbiAgICAgIH07XG4gICAgfVxuICAgIF9yZWdpc3Rlck9wdGlvbih2YWx1ZSkge1xuICAgICAgY29uc3QgaWQgPSAodGhpcy5faWRDb3VudGVyKyspLnRvU3RyaW5nKCk7XG4gICAgICB0aGlzLl9vcHRpb25NYXAuc2V0KGlkLCB2YWx1ZSk7XG4gICAgICByZXR1cm4gaWQ7XG4gICAgfVxuICAgIF9nZXRPcHRpb25JZCh2YWx1ZSkge1xuICAgICAgZm9yIChjb25zdCBpZCBvZiB0aGlzLl9vcHRpb25NYXAua2V5cygpKSB7XG4gICAgICAgIGlmICh0aGlzLl9jb21wYXJlV2l0aCh0aGlzLl9vcHRpb25NYXAuZ2V0KGlkKS5fdmFsdWUsIHZhbHVlKSkgcmV0dXJuIGlkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIF9nZXRPcHRpb25WYWx1ZSh2YWx1ZVN0cmluZykge1xuICAgICAgY29uc3QgaWQgPSBfZXh0cmFjdElkKHZhbHVlU3RyaW5nKTtcbiAgICAgIHJldHVybiB0aGlzLl9vcHRpb25NYXAuaGFzKGlkKSA/IHRoaXMuX29wdGlvbk1hcC5nZXQoaWQpLl92YWx1ZSA6IHZhbHVlU3RyaW5nO1xuICAgIH1cbiAgICBzdGF0aWMgybVmYWMgPSAvKiBAX19QVVJFX18gKi8oKCkgPT4ge1xuICAgICAgbGV0IMm1U2VsZWN0TXVsdGlwbGVDb250cm9sVmFsdWVBY2Nlc3Nvcl9CYXNlRmFjdG9yeTtcbiAgICAgIHJldHVybiBmdW5jdGlvbiBTZWxlY3RNdWx0aXBsZUNvbnRyb2xWYWx1ZUFjY2Vzc29yX0ZhY3RvcnkoX19uZ0ZhY3RvcnlUeXBlX18pIHtcbiAgICAgICAgcmV0dXJuICjJtVNlbGVjdE11bHRpcGxlQ29udHJvbFZhbHVlQWNjZXNzb3JfQmFzZUZhY3RvcnkgfHwgKMm1U2VsZWN0TXVsdGlwbGVDb250cm9sVmFsdWVBY2Nlc3Nvcl9CYXNlRmFjdG9yeSA9IGkwLsm1ybVnZXRJbmhlcml0ZWRGYWN0b3J5KFNlbGVjdE11bHRpcGxlQ29udHJvbFZhbHVlQWNjZXNzb3IpKSkoX19uZ0ZhY3RvcnlUeXBlX18gfHwgU2VsZWN0TXVsdGlwbGVDb250cm9sVmFsdWVBY2Nlc3Nvcik7XG4gICAgICB9O1xuICAgIH0pKCk7XG4gICAgc3RhdGljIMm1ZGlyID0gLyogQF9fUFVSRV9fICovaTAuybXJtWRlZmluZURpcmVjdGl2ZSh7XG4gICAgICB0eXBlOiBTZWxlY3RNdWx0aXBsZUNvbnRyb2xWYWx1ZUFjY2Vzc29yLFxuICAgICAgc2VsZWN0b3JzOiBbW1wic2VsZWN0XCIsIFwibXVsdGlwbGVcIiwgXCJcIiwgXCJmb3JtQ29udHJvbE5hbWVcIiwgXCJcIl0sIFtcInNlbGVjdFwiLCBcIm11bHRpcGxlXCIsIFwiXCIsIFwiZm9ybUNvbnRyb2xcIiwgXCJcIl0sIFtcInNlbGVjdFwiLCBcIm11bHRpcGxlXCIsIFwiXCIsIFwibmdNb2RlbFwiLCBcIlwiXV0sXG4gICAgICBob3N0QmluZGluZ3M6IGZ1bmN0aW9uIFNlbGVjdE11bHRpcGxlQ29udHJvbFZhbHVlQWNjZXNzb3JfSG9zdEJpbmRpbmdzKHJmLCBjdHgpIHtcbiAgICAgICAgaWYgKHJmICYgMSkge1xuICAgICAgICAgIGkwLsm1ybVsaXN0ZW5lcihcImNoYW5nZVwiLCBmdW5jdGlvbiBTZWxlY3RNdWx0aXBsZUNvbnRyb2xWYWx1ZUFjY2Vzc29yX2NoYW5nZV9Ib3N0QmluZGluZ0hhbmRsZXIoJGV2ZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gY3R4Lm9uQ2hhbmdlKCRldmVudC50YXJnZXQpO1xuICAgICAgICAgIH0pKFwiYmx1clwiLCBmdW5jdGlvbiBTZWxlY3RNdWx0aXBsZUNvbnRyb2xWYWx1ZUFjY2Vzc29yX2JsdXJfSG9zdEJpbmRpbmdIYW5kbGVyKCkge1xuICAgICAgICAgICAgcmV0dXJuIGN0eC5vblRvdWNoZWQoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGlucHV0czoge1xuICAgICAgICBjb21wYXJlV2l0aDogXCJjb21wYXJlV2l0aFwiXG4gICAgICB9LFxuICAgICAgc3RhbmRhbG9uZTogZmFsc2UsXG4gICAgICBmZWF0dXJlczogW2kwLsm1ybVQcm92aWRlcnNGZWF0dXJlKFtTRUxFQ1RfTVVMVElQTEVfVkFMVUVfQUNDRVNTT1JdKSwgaTAuybXJtUluaGVyaXREZWZpbml0aW9uRmVhdHVyZV1cbiAgICB9KTtcbiAgfVxuICByZXR1cm4gU2VsZWN0TXVsdGlwbGVDb250cm9sVmFsdWVBY2Nlc3Nvcjtcbn0pKCk7XG4vKiNfX1BVUkVfXyovKCgpID0+IHtcbiAgKHR5cGVvZiBuZ0Rldk1vZGUgPT09IFwidW5kZWZpbmVkXCIgfHwgbmdEZXZNb2RlKSAmJiB2b2lkIDA7XG59KSgpO1xubGV0IMm1TmdTZWxlY3RNdWx0aXBsZU9wdGlvbiA9IC8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICBjbGFzcyDJtU5nU2VsZWN0TXVsdGlwbGVPcHRpb24ge1xuICAgIF9lbGVtZW50O1xuICAgIF9yZW5kZXJlcjtcbiAgICBfc2VsZWN0O1xuICAgIGlkO1xuICAgIF92YWx1ZTtcbiAgICBjb25zdHJ1Y3RvcihfZWxlbWVudCwgX3JlbmRlcmVyLCBfc2VsZWN0KSB7XG4gICAgICB0aGlzLl9lbGVtZW50ID0gX2VsZW1lbnQ7XG4gICAgICB0aGlzLl9yZW5kZXJlciA9IF9yZW5kZXJlcjtcbiAgICAgIHRoaXMuX3NlbGVjdCA9IF9zZWxlY3Q7XG4gICAgICBpZiAodGhpcy5fc2VsZWN0KSB7XG4gICAgICAgIHRoaXMuaWQgPSB0aGlzLl9zZWxlY3QuX3JlZ2lzdGVyT3B0aW9uKHRoaXMpO1xuICAgICAgfVxuICAgIH1cbiAgICBzZXQgbmdWYWx1ZSh2YWx1ZSkge1xuICAgICAgaWYgKHRoaXMuX3NlbGVjdCA9PSBudWxsKSByZXR1cm47XG4gICAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuICAgICAgdGhpcy5fc2V0RWxlbWVudFZhbHVlKF9idWlsZFZhbHVlU3RyaW5nKHRoaXMuaWQsIHZhbHVlKSk7XG4gICAgICB0aGlzLl9zZWxlY3Qud3JpdGVWYWx1ZSh0aGlzLl9zZWxlY3QudmFsdWUpO1xuICAgIH1cbiAgICBzZXQgdmFsdWUodmFsdWUpIHtcbiAgICAgIGlmICh0aGlzLl9zZWxlY3QpIHtcbiAgICAgICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5fc2V0RWxlbWVudFZhbHVlKF9idWlsZFZhbHVlU3RyaW5nKHRoaXMuaWQsIHZhbHVlKSk7XG4gICAgICAgIHRoaXMuX3NlbGVjdC53cml0ZVZhbHVlKHRoaXMuX3NlbGVjdC52YWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9zZXRFbGVtZW50VmFsdWUodmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgICBfc2V0RWxlbWVudFZhbHVlKHZhbHVlKSB7XG4gICAgICB0aGlzLl9yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsICd2YWx1ZScsIHZhbHVlKTtcbiAgICB9XG4gICAgX3NldFNlbGVjdGVkKHNlbGVjdGVkKSB7XG4gICAgICB0aGlzLl9yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsICdzZWxlY3RlZCcsIHNlbGVjdGVkKTtcbiAgICB9XG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICBpZiAodGhpcy5fc2VsZWN0KSB7XG4gICAgICAgIHRoaXMuX3NlbGVjdC5fb3B0aW9uTWFwLmRlbGV0ZSh0aGlzLmlkKTtcbiAgICAgICAgdGhpcy5fc2VsZWN0LndyaXRlVmFsdWUodGhpcy5fc2VsZWN0LnZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIMm1ZmFjID0gZnVuY3Rpb24gybVOZ1NlbGVjdE11bHRpcGxlT3B0aW9uX0ZhY3RvcnkoX19uZ0ZhY3RvcnlUeXBlX18pIHtcbiAgICAgIHJldHVybiBuZXcgKF9fbmdGYWN0b3J5VHlwZV9fIHx8IMm1TmdTZWxlY3RNdWx0aXBsZU9wdGlvbikoaTAuybXJtWRpcmVjdGl2ZUluamVjdChpMC5FbGVtZW50UmVmKSwgaTAuybXJtWRpcmVjdGl2ZUluamVjdChpMC5SZW5kZXJlcjIpLCBpMC7Jtcm1ZGlyZWN0aXZlSW5qZWN0KFNlbGVjdE11bHRpcGxlQ29udHJvbFZhbHVlQWNjZXNzb3IsIDkpKTtcbiAgICB9O1xuICAgIHN0YXRpYyDJtWRpciA9IC8qIEBfX1BVUkVfXyAqL2kwLsm1ybVkZWZpbmVEaXJlY3RpdmUoe1xuICAgICAgdHlwZTogybVOZ1NlbGVjdE11bHRpcGxlT3B0aW9uLFxuICAgICAgc2VsZWN0b3JzOiBbW1wib3B0aW9uXCJdXSxcbiAgICAgIGlucHV0czoge1xuICAgICAgICBuZ1ZhbHVlOiBcIm5nVmFsdWVcIixcbiAgICAgICAgdmFsdWU6IFwidmFsdWVcIlxuICAgICAgfSxcbiAgICAgIHN0YW5kYWxvbmU6IGZhbHNlXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIMm1TmdTZWxlY3RNdWx0aXBsZU9wdGlvbjtcbn0pKCk7XG4vKiNfX1BVUkVfXyovKCgpID0+IHtcbiAgKHR5cGVvZiBuZ0Rldk1vZGUgPT09IFwidW5kZWZpbmVkXCIgfHwgbmdEZXZNb2RlKSAmJiB2b2lkIDA7XG59KSgpO1xuZnVuY3Rpb24gdG9JbnRlZ2VyKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInID8gdmFsdWUgOiBwYXJzZUludCh2YWx1ZSwgMTApO1xufVxuZnVuY3Rpb24gdG9GbG9hdCh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyA/IHZhbHVlIDogcGFyc2VGbG9hdCh2YWx1ZSk7XG59XG5sZXQgQWJzdHJhY3RWYWxpZGF0b3JEaXJlY3RpdmUgPSAvKiNfX1BVUkVfXyovKCgpID0+IHtcbiAgY2xhc3MgQWJzdHJhY3RWYWxpZGF0b3JEaXJlY3RpdmUge1xuICAgIF92YWxpZGF0b3IgPSBudWxsVmFsaWRhdG9yO1xuICAgIF9vbkNoYW5nZTtcbiAgICBfZW5hYmxlZDtcbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzKSB7XG4gICAgICBpZiAodGhpcy5pbnB1dE5hbWUgaW4gY2hhbmdlcykge1xuICAgICAgICBjb25zdCBpbnB1dCA9IHRoaXMubm9ybWFsaXplSW5wdXQoY2hhbmdlc1t0aGlzLmlucHV0TmFtZV0uY3VycmVudFZhbHVlKTtcbiAgICAgICAgdGhpcy5fZW5hYmxlZCA9IHRoaXMuZW5hYmxlZChpbnB1dCk7XG4gICAgICAgIHRoaXMuX3ZhbGlkYXRvciA9IHRoaXMuX2VuYWJsZWQgPyB0aGlzLmNyZWF0ZVZhbGlkYXRvcihpbnB1dCkgOiBudWxsVmFsaWRhdG9yO1xuICAgICAgICB0aGlzLl9vbkNoYW5nZT8uKCk7XG4gICAgICB9XG4gICAgfVxuICAgIHZhbGlkYXRlKGNvbnRyb2wpIHtcbiAgICAgIHJldHVybiB0aGlzLl92YWxpZGF0b3IoY29udHJvbCk7XG4gICAgfVxuICAgIHJlZ2lzdGVyT25WYWxpZGF0b3JDaGFuZ2UoZm4pIHtcbiAgICAgIHRoaXMuX29uQ2hhbmdlID0gZm47XG4gICAgfVxuICAgIGVuYWJsZWQoaW5wdXQpIHtcbiAgICAgIHJldHVybiBpbnB1dCAhPSBudWxsO1xuICAgIH1cbiAgICBzdGF0aWMgybVmYWMgPSBmdW5jdGlvbiBBYnN0cmFjdFZhbGlkYXRvckRpcmVjdGl2ZV9GYWN0b3J5KF9fbmdGYWN0b3J5VHlwZV9fKSB7XG4gICAgICByZXR1cm4gbmV3IChfX25nRmFjdG9yeVR5cGVfXyB8fCBBYnN0cmFjdFZhbGlkYXRvckRpcmVjdGl2ZSkoKTtcbiAgICB9O1xuICAgIHN0YXRpYyDJtWRpciA9IC8qIEBfX1BVUkVfXyAqL2kwLsm1ybVkZWZpbmVEaXJlY3RpdmUoe1xuICAgICAgdHlwZTogQWJzdHJhY3RWYWxpZGF0b3JEaXJlY3RpdmUsXG4gICAgICBmZWF0dXJlczogW2kwLsm1ybVOZ09uQ2hhbmdlc0ZlYXR1cmVdXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIEFic3RyYWN0VmFsaWRhdG9yRGlyZWN0aXZlO1xufSkoKTtcbi8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICAodHlwZW9mIG5nRGV2TW9kZSA9PT0gXCJ1bmRlZmluZWRcIiB8fCBuZ0Rldk1vZGUpICYmIHZvaWQgMDtcbn0pKCk7XG5jb25zdCBNQVhfVkFMSURBVE9SID0ge1xuICBwcm92aWRlOiBOR19WQUxJREFUT1JTLFxuICB1c2VFeGlzdGluZzogLyojX19QVVJFX18qL2ZvcndhcmRSZWYoKCkgPT4gTWF4VmFsaWRhdG9yKSxcbiAgbXVsdGk6IHRydWVcbn07XG5sZXQgTWF4VmFsaWRhdG9yID0gLyojX19QVVJFX18qLygoKSA9PiB7XG4gIGNsYXNzIE1heFZhbGlkYXRvciBleHRlbmRzIEFic3RyYWN0VmFsaWRhdG9yRGlyZWN0aXZlIHtcbiAgICBtYXg7XG4gICAgaW5wdXROYW1lID0gJ21heCc7XG4gICAgbm9ybWFsaXplSW5wdXQgPSBpbnB1dCA9PiB0b0Zsb2F0KGlucHV0KTtcbiAgICBjcmVhdGVWYWxpZGF0b3IgPSBtYXggPT4gbWF4VmFsaWRhdG9yKG1heCk7XG4gICAgc3RhdGljIMm1ZmFjID0gLyogQF9fUFVSRV9fICovKCgpID0+IHtcbiAgICAgIGxldCDJtU1heFZhbGlkYXRvcl9CYXNlRmFjdG9yeTtcbiAgICAgIHJldHVybiBmdW5jdGlvbiBNYXhWYWxpZGF0b3JfRmFjdG9yeShfX25nRmFjdG9yeVR5cGVfXykge1xuICAgICAgICByZXR1cm4gKMm1TWF4VmFsaWRhdG9yX0Jhc2VGYWN0b3J5IHx8ICjJtU1heFZhbGlkYXRvcl9CYXNlRmFjdG9yeSA9IGkwLsm1ybVnZXRJbmhlcml0ZWRGYWN0b3J5KE1heFZhbGlkYXRvcikpKShfX25nRmFjdG9yeVR5cGVfXyB8fCBNYXhWYWxpZGF0b3IpO1xuICAgICAgfTtcbiAgICB9KSgpO1xuICAgIHN0YXRpYyDJtWRpciA9IC8qIEBfX1BVUkVfXyAqL2kwLsm1ybVkZWZpbmVEaXJlY3RpdmUoe1xuICAgICAgdHlwZTogTWF4VmFsaWRhdG9yLFxuICAgICAgc2VsZWN0b3JzOiBbW1wiaW5wdXRcIiwgXCJ0eXBlXCIsIFwibnVtYmVyXCIsIFwibWF4XCIsIFwiXCIsIFwiZm9ybUNvbnRyb2xOYW1lXCIsIFwiXCJdLCBbXCJpbnB1dFwiLCBcInR5cGVcIiwgXCJudW1iZXJcIiwgXCJtYXhcIiwgXCJcIiwgXCJmb3JtQ29udHJvbFwiLCBcIlwiXSwgW1wiaW5wdXRcIiwgXCJ0eXBlXCIsIFwibnVtYmVyXCIsIFwibWF4XCIsIFwiXCIsIFwibmdNb2RlbFwiLCBcIlwiXV0sXG4gICAgICBob3N0VmFyczogMSxcbiAgICAgIGhvc3RCaW5kaW5nczogZnVuY3Rpb24gTWF4VmFsaWRhdG9yX0hvc3RCaW5kaW5ncyhyZiwgY3R4KSB7XG4gICAgICAgIGlmIChyZiAmIDIpIHtcbiAgICAgICAgICBpMC7Jtcm1YXR0cmlidXRlKFwibWF4XCIsIGN0eC5fZW5hYmxlZCA/IGN0eC5tYXggOiBudWxsKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGlucHV0czoge1xuICAgICAgICBtYXg6IFwibWF4XCJcbiAgICAgIH0sXG4gICAgICBzdGFuZGFsb25lOiBmYWxzZSxcbiAgICAgIGZlYXR1cmVzOiBbaTAuybXJtVByb3ZpZGVyc0ZlYXR1cmUoW01BWF9WQUxJREFUT1JdKSwgaTAuybXJtUluaGVyaXREZWZpbml0aW9uRmVhdHVyZV1cbiAgICB9KTtcbiAgfVxuICByZXR1cm4gTWF4VmFsaWRhdG9yO1xufSkoKTtcbi8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICAodHlwZW9mIG5nRGV2TW9kZSA9PT0gXCJ1bmRlZmluZWRcIiB8fCBuZ0Rldk1vZGUpICYmIHZvaWQgMDtcbn0pKCk7XG5jb25zdCBNSU5fVkFMSURBVE9SID0ge1xuICBwcm92aWRlOiBOR19WQUxJREFUT1JTLFxuICB1c2VFeGlzdGluZzogLyojX19QVVJFX18qL2ZvcndhcmRSZWYoKCkgPT4gTWluVmFsaWRhdG9yKSxcbiAgbXVsdGk6IHRydWVcbn07XG5sZXQgTWluVmFsaWRhdG9yID0gLyojX19QVVJFX18qLygoKSA9PiB7XG4gIGNsYXNzIE1pblZhbGlkYXRvciBleHRlbmRzIEFic3RyYWN0VmFsaWRhdG9yRGlyZWN0aXZlIHtcbiAgICBtaW47XG4gICAgaW5wdXROYW1lID0gJ21pbic7XG4gICAgbm9ybWFsaXplSW5wdXQgPSBpbnB1dCA9PiB0b0Zsb2F0KGlucHV0KTtcbiAgICBjcmVhdGVWYWxpZGF0b3IgPSBtaW4gPT4gbWluVmFsaWRhdG9yKG1pbik7XG4gICAgc3RhdGljIMm1ZmFjID0gLyogQF9fUFVSRV9fICovKCgpID0+IHtcbiAgICAgIGxldCDJtU1pblZhbGlkYXRvcl9CYXNlRmFjdG9yeTtcbiAgICAgIHJldHVybiBmdW5jdGlvbiBNaW5WYWxpZGF0b3JfRmFjdG9yeShfX25nRmFjdG9yeVR5cGVfXykge1xuICAgICAgICByZXR1cm4gKMm1TWluVmFsaWRhdG9yX0Jhc2VGYWN0b3J5IHx8ICjJtU1pblZhbGlkYXRvcl9CYXNlRmFjdG9yeSA9IGkwLsm1ybVnZXRJbmhlcml0ZWRGYWN0b3J5KE1pblZhbGlkYXRvcikpKShfX25nRmFjdG9yeVR5cGVfXyB8fCBNaW5WYWxpZGF0b3IpO1xuICAgICAgfTtcbiAgICB9KSgpO1xuICAgIHN0YXRpYyDJtWRpciA9IC8qIEBfX1BVUkVfXyAqL2kwLsm1ybVkZWZpbmVEaXJlY3RpdmUoe1xuICAgICAgdHlwZTogTWluVmFsaWRhdG9yLFxuICAgICAgc2VsZWN0b3JzOiBbW1wiaW5wdXRcIiwgXCJ0eXBlXCIsIFwibnVtYmVyXCIsIFwibWluXCIsIFwiXCIsIFwiZm9ybUNvbnRyb2xOYW1lXCIsIFwiXCJdLCBbXCJpbnB1dFwiLCBcInR5cGVcIiwgXCJudW1iZXJcIiwgXCJtaW5cIiwgXCJcIiwgXCJmb3JtQ29udHJvbFwiLCBcIlwiXSwgW1wiaW5wdXRcIiwgXCJ0eXBlXCIsIFwibnVtYmVyXCIsIFwibWluXCIsIFwiXCIsIFwibmdNb2RlbFwiLCBcIlwiXV0sXG4gICAgICBob3N0VmFyczogMSxcbiAgICAgIGhvc3RCaW5kaW5nczogZnVuY3Rpb24gTWluVmFsaWRhdG9yX0hvc3RCaW5kaW5ncyhyZiwgY3R4KSB7XG4gICAgICAgIGlmIChyZiAmIDIpIHtcbiAgICAgICAgICBpMC7Jtcm1YXR0cmlidXRlKFwibWluXCIsIGN0eC5fZW5hYmxlZCA/IGN0eC5taW4gOiBudWxsKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGlucHV0czoge1xuICAgICAgICBtaW46IFwibWluXCJcbiAgICAgIH0sXG4gICAgICBzdGFuZGFsb25lOiBmYWxzZSxcbiAgICAgIGZlYXR1cmVzOiBbaTAuybXJtVByb3ZpZGVyc0ZlYXR1cmUoW01JTl9WQUxJREFUT1JdKSwgaTAuybXJtUluaGVyaXREZWZpbml0aW9uRmVhdHVyZV1cbiAgICB9KTtcbiAgfVxuICByZXR1cm4gTWluVmFsaWRhdG9yO1xufSkoKTtcbi8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICAodHlwZW9mIG5nRGV2TW9kZSA9PT0gXCJ1bmRlZmluZWRcIiB8fCBuZ0Rldk1vZGUpICYmIHZvaWQgMDtcbn0pKCk7XG5jb25zdCBSRVFVSVJFRF9WQUxJREFUT1IgPSB7XG4gIHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsXG4gIHVzZUV4aXN0aW5nOiAvKiNfX1BVUkVfXyovZm9yd2FyZFJlZigoKSA9PiBSZXF1aXJlZFZhbGlkYXRvciksXG4gIG11bHRpOiB0cnVlXG59O1xuY29uc3QgQ0hFQ0tCT1hfUkVRVUlSRURfVkFMSURBVE9SID0ge1xuICBwcm92aWRlOiBOR19WQUxJREFUT1JTLFxuICB1c2VFeGlzdGluZzogLyojX19QVVJFX18qL2ZvcndhcmRSZWYoKCkgPT4gQ2hlY2tib3hSZXF1aXJlZFZhbGlkYXRvciksXG4gIG11bHRpOiB0cnVlXG59O1xubGV0IFJlcXVpcmVkVmFsaWRhdG9yID0gLyojX19QVVJFX18qLygoKSA9PiB7XG4gIGNsYXNzIFJlcXVpcmVkVmFsaWRhdG9yIGV4dGVuZHMgQWJzdHJhY3RWYWxpZGF0b3JEaXJlY3RpdmUge1xuICAgIHJlcXVpcmVkO1xuICAgIGlucHV0TmFtZSA9ICdyZXF1aXJlZCc7XG4gICAgbm9ybWFsaXplSW5wdXQgPSBib29sZWFuQXR0cmlidXRlO1xuICAgIGNyZWF0ZVZhbGlkYXRvciA9IGlucHV0ID0+IHJlcXVpcmVkVmFsaWRhdG9yO1xuICAgIGVuYWJsZWQoaW5wdXQpIHtcbiAgICAgIHJldHVybiBpbnB1dDtcbiAgICB9XG4gICAgc3RhdGljIMm1ZmFjID0gLyogQF9fUFVSRV9fICovKCgpID0+IHtcbiAgICAgIGxldCDJtVJlcXVpcmVkVmFsaWRhdG9yX0Jhc2VGYWN0b3J5O1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIFJlcXVpcmVkVmFsaWRhdG9yX0ZhY3RvcnkoX19uZ0ZhY3RvcnlUeXBlX18pIHtcbiAgICAgICAgcmV0dXJuICjJtVJlcXVpcmVkVmFsaWRhdG9yX0Jhc2VGYWN0b3J5IHx8ICjJtVJlcXVpcmVkVmFsaWRhdG9yX0Jhc2VGYWN0b3J5ID0gaTAuybXJtWdldEluaGVyaXRlZEZhY3RvcnkoUmVxdWlyZWRWYWxpZGF0b3IpKSkoX19uZ0ZhY3RvcnlUeXBlX18gfHwgUmVxdWlyZWRWYWxpZGF0b3IpO1xuICAgICAgfTtcbiAgICB9KSgpO1xuICAgIHN0YXRpYyDJtWRpciA9IC8qIEBfX1BVUkVfXyAqL2kwLsm1ybVkZWZpbmVEaXJlY3RpdmUoe1xuICAgICAgdHlwZTogUmVxdWlyZWRWYWxpZGF0b3IsXG4gICAgICBzZWxlY3RvcnM6IFtbXCJcIiwgXCJyZXF1aXJlZFwiLCBcIlwiLCBcImZvcm1Db250cm9sTmFtZVwiLCBcIlwiLCAzLCBcInR5cGVcIiwgXCJjaGVja2JveFwiXSwgW1wiXCIsIFwicmVxdWlyZWRcIiwgXCJcIiwgXCJmb3JtQ29udHJvbFwiLCBcIlwiLCAzLCBcInR5cGVcIiwgXCJjaGVja2JveFwiXSwgW1wiXCIsIFwicmVxdWlyZWRcIiwgXCJcIiwgXCJuZ01vZGVsXCIsIFwiXCIsIDMsIFwidHlwZVwiLCBcImNoZWNrYm94XCJdXSxcbiAgICAgIGhvc3RWYXJzOiAxLFxuICAgICAgaG9zdEJpbmRpbmdzOiBmdW5jdGlvbiBSZXF1aXJlZFZhbGlkYXRvcl9Ib3N0QmluZGluZ3MocmYsIGN0eCkge1xuICAgICAgICBpZiAocmYgJiAyKSB7XG4gICAgICAgICAgaTAuybXJtWF0dHJpYnV0ZShcInJlcXVpcmVkXCIsIGN0eC5fZW5hYmxlZCA/IFwiXCIgOiBudWxsKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGlucHV0czoge1xuICAgICAgICByZXF1aXJlZDogXCJyZXF1aXJlZFwiXG4gICAgICB9LFxuICAgICAgc3RhbmRhbG9uZTogZmFsc2UsXG4gICAgICBmZWF0dXJlczogW2kwLsm1ybVQcm92aWRlcnNGZWF0dXJlKFtSRVFVSVJFRF9WQUxJREFUT1JdKSwgaTAuybXJtUluaGVyaXREZWZpbml0aW9uRmVhdHVyZV1cbiAgICB9KTtcbiAgfVxuICByZXR1cm4gUmVxdWlyZWRWYWxpZGF0b3I7XG59KSgpO1xuLyojX19QVVJFX18qLygoKSA9PiB7XG4gICh0eXBlb2YgbmdEZXZNb2RlID09PSBcInVuZGVmaW5lZFwiIHx8IG5nRGV2TW9kZSkgJiYgdm9pZCAwO1xufSkoKTtcbmxldCBDaGVja2JveFJlcXVpcmVkVmFsaWRhdG9yID0gLyojX19QVVJFX18qLygoKSA9PiB7XG4gIGNsYXNzIENoZWNrYm94UmVxdWlyZWRWYWxpZGF0b3IgZXh0ZW5kcyBSZXF1aXJlZFZhbGlkYXRvciB7XG4gICAgY3JlYXRlVmFsaWRhdG9yID0gaW5wdXQgPT4gcmVxdWlyZWRUcnVlVmFsaWRhdG9yO1xuICAgIHN0YXRpYyDJtWZhYyA9IC8qIEBfX1BVUkVfXyAqLygoKSA9PiB7XG4gICAgICBsZXQgybVDaGVja2JveFJlcXVpcmVkVmFsaWRhdG9yX0Jhc2VGYWN0b3J5O1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIENoZWNrYm94UmVxdWlyZWRWYWxpZGF0b3JfRmFjdG9yeShfX25nRmFjdG9yeVR5cGVfXykge1xuICAgICAgICByZXR1cm4gKMm1Q2hlY2tib3hSZXF1aXJlZFZhbGlkYXRvcl9CYXNlRmFjdG9yeSB8fCAoybVDaGVja2JveFJlcXVpcmVkVmFsaWRhdG9yX0Jhc2VGYWN0b3J5ID0gaTAuybXJtWdldEluaGVyaXRlZEZhY3RvcnkoQ2hlY2tib3hSZXF1aXJlZFZhbGlkYXRvcikpKShfX25nRmFjdG9yeVR5cGVfXyB8fCBDaGVja2JveFJlcXVpcmVkVmFsaWRhdG9yKTtcbiAgICAgIH07XG4gICAgfSkoKTtcbiAgICBzdGF0aWMgybVkaXIgPSAvKiBAX19QVVJFX18gKi9pMC7Jtcm1ZGVmaW5lRGlyZWN0aXZlKHtcbiAgICAgIHR5cGU6IENoZWNrYm94UmVxdWlyZWRWYWxpZGF0b3IsXG4gICAgICBzZWxlY3RvcnM6IFtbXCJpbnB1dFwiLCBcInR5cGVcIiwgXCJjaGVja2JveFwiLCBcInJlcXVpcmVkXCIsIFwiXCIsIFwiZm9ybUNvbnRyb2xOYW1lXCIsIFwiXCJdLCBbXCJpbnB1dFwiLCBcInR5cGVcIiwgXCJjaGVja2JveFwiLCBcInJlcXVpcmVkXCIsIFwiXCIsIFwiZm9ybUNvbnRyb2xcIiwgXCJcIl0sIFtcImlucHV0XCIsIFwidHlwZVwiLCBcImNoZWNrYm94XCIsIFwicmVxdWlyZWRcIiwgXCJcIiwgXCJuZ01vZGVsXCIsIFwiXCJdXSxcbiAgICAgIGhvc3RWYXJzOiAxLFxuICAgICAgaG9zdEJpbmRpbmdzOiBmdW5jdGlvbiBDaGVja2JveFJlcXVpcmVkVmFsaWRhdG9yX0hvc3RCaW5kaW5ncyhyZiwgY3R4KSB7XG4gICAgICAgIGlmIChyZiAmIDIpIHtcbiAgICAgICAgICBpMC7Jtcm1YXR0cmlidXRlKFwicmVxdWlyZWRcIiwgY3R4Ll9lbmFibGVkID8gXCJcIiA6IG51bGwpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgc3RhbmRhbG9uZTogZmFsc2UsXG4gICAgICBmZWF0dXJlczogW2kwLsm1ybVQcm92aWRlcnNGZWF0dXJlKFtDSEVDS0JPWF9SRVFVSVJFRF9WQUxJREFUT1JdKSwgaTAuybXJtUluaGVyaXREZWZpbml0aW9uRmVhdHVyZV1cbiAgICB9KTtcbiAgfVxuICByZXR1cm4gQ2hlY2tib3hSZXF1aXJlZFZhbGlkYXRvcjtcbn0pKCk7XG4vKiNfX1BVUkVfXyovKCgpID0+IHtcbiAgKHR5cGVvZiBuZ0Rldk1vZGUgPT09IFwidW5kZWZpbmVkXCIgfHwgbmdEZXZNb2RlKSAmJiB2b2lkIDA7XG59KSgpO1xuY29uc3QgRU1BSUxfVkFMSURBVE9SID0ge1xuICBwcm92aWRlOiBOR19WQUxJREFUT1JTLFxuICB1c2VFeGlzdGluZzogLyojX19QVVJFX18qL2ZvcndhcmRSZWYoKCkgPT4gRW1haWxWYWxpZGF0b3IpLFxuICBtdWx0aTogdHJ1ZVxufTtcbmxldCBFbWFpbFZhbGlkYXRvciA9IC8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICBjbGFzcyBFbWFpbFZhbGlkYXRvciBleHRlbmRzIEFic3RyYWN0VmFsaWRhdG9yRGlyZWN0aXZlIHtcbiAgICBlbWFpbDtcbiAgICBpbnB1dE5hbWUgPSAnZW1haWwnO1xuICAgIG5vcm1hbGl6ZUlucHV0ID0gYm9vbGVhbkF0dHJpYnV0ZTtcbiAgICBjcmVhdGVWYWxpZGF0b3IgPSBpbnB1dCA9PiBlbWFpbFZhbGlkYXRvcjtcbiAgICBlbmFibGVkKGlucHV0KSB7XG4gICAgICByZXR1cm4gaW5wdXQ7XG4gICAgfVxuICAgIHN0YXRpYyDJtWZhYyA9IC8qIEBfX1BVUkVfXyAqLygoKSA9PiB7XG4gICAgICBsZXQgybVFbWFpbFZhbGlkYXRvcl9CYXNlRmFjdG9yeTtcbiAgICAgIHJldHVybiBmdW5jdGlvbiBFbWFpbFZhbGlkYXRvcl9GYWN0b3J5KF9fbmdGYWN0b3J5VHlwZV9fKSB7XG4gICAgICAgIHJldHVybiAoybVFbWFpbFZhbGlkYXRvcl9CYXNlRmFjdG9yeSB8fCAoybVFbWFpbFZhbGlkYXRvcl9CYXNlRmFjdG9yeSA9IGkwLsm1ybVnZXRJbmhlcml0ZWRGYWN0b3J5KEVtYWlsVmFsaWRhdG9yKSkpKF9fbmdGYWN0b3J5VHlwZV9fIHx8IEVtYWlsVmFsaWRhdG9yKTtcbiAgICAgIH07XG4gICAgfSkoKTtcbiAgICBzdGF0aWMgybVkaXIgPSAvKiBAX19QVVJFX18gKi9pMC7Jtcm1ZGVmaW5lRGlyZWN0aXZlKHtcbiAgICAgIHR5cGU6IEVtYWlsVmFsaWRhdG9yLFxuICAgICAgc2VsZWN0b3JzOiBbW1wiXCIsIFwiZW1haWxcIiwgXCJcIiwgXCJmb3JtQ29udHJvbE5hbWVcIiwgXCJcIl0sIFtcIlwiLCBcImVtYWlsXCIsIFwiXCIsIFwiZm9ybUNvbnRyb2xcIiwgXCJcIl0sIFtcIlwiLCBcImVtYWlsXCIsIFwiXCIsIFwibmdNb2RlbFwiLCBcIlwiXV0sXG4gICAgICBpbnB1dHM6IHtcbiAgICAgICAgZW1haWw6IFwiZW1haWxcIlxuICAgICAgfSxcbiAgICAgIHN0YW5kYWxvbmU6IGZhbHNlLFxuICAgICAgZmVhdHVyZXM6IFtpMC7Jtcm1UHJvdmlkZXJzRmVhdHVyZShbRU1BSUxfVkFMSURBVE9SXSksIGkwLsm1ybVJbmhlcml0RGVmaW5pdGlvbkZlYXR1cmVdXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIEVtYWlsVmFsaWRhdG9yO1xufSkoKTtcbi8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICAodHlwZW9mIG5nRGV2TW9kZSA9PT0gXCJ1bmRlZmluZWRcIiB8fCBuZ0Rldk1vZGUpICYmIHZvaWQgMDtcbn0pKCk7XG5jb25zdCBNSU5fTEVOR1RIX1ZBTElEQVRPUiA9IHtcbiAgcHJvdmlkZTogTkdfVkFMSURBVE9SUyxcbiAgdXNlRXhpc3Rpbmc6IC8qI19fUFVSRV9fKi9mb3J3YXJkUmVmKCgpID0+IE1pbkxlbmd0aFZhbGlkYXRvciksXG4gIG11bHRpOiB0cnVlXG59O1xubGV0IE1pbkxlbmd0aFZhbGlkYXRvciA9IC8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICBjbGFzcyBNaW5MZW5ndGhWYWxpZGF0b3IgZXh0ZW5kcyBBYnN0cmFjdFZhbGlkYXRvckRpcmVjdGl2ZSB7XG4gICAgbWlubGVuZ3RoO1xuICAgIGlucHV0TmFtZSA9ICdtaW5sZW5ndGgnO1xuICAgIG5vcm1hbGl6ZUlucHV0ID0gaW5wdXQgPT4gdG9JbnRlZ2VyKGlucHV0KTtcbiAgICBjcmVhdGVWYWxpZGF0b3IgPSBtaW5sZW5ndGggPT4gbWluTGVuZ3RoVmFsaWRhdG9yKG1pbmxlbmd0aCk7XG4gICAgc3RhdGljIMm1ZmFjID0gLyogQF9fUFVSRV9fICovKCgpID0+IHtcbiAgICAgIGxldCDJtU1pbkxlbmd0aFZhbGlkYXRvcl9CYXNlRmFjdG9yeTtcbiAgICAgIHJldHVybiBmdW5jdGlvbiBNaW5MZW5ndGhWYWxpZGF0b3JfRmFjdG9yeShfX25nRmFjdG9yeVR5cGVfXykge1xuICAgICAgICByZXR1cm4gKMm1TWluTGVuZ3RoVmFsaWRhdG9yX0Jhc2VGYWN0b3J5IHx8ICjJtU1pbkxlbmd0aFZhbGlkYXRvcl9CYXNlRmFjdG9yeSA9IGkwLsm1ybVnZXRJbmhlcml0ZWRGYWN0b3J5KE1pbkxlbmd0aFZhbGlkYXRvcikpKShfX25nRmFjdG9yeVR5cGVfXyB8fCBNaW5MZW5ndGhWYWxpZGF0b3IpO1xuICAgICAgfTtcbiAgICB9KSgpO1xuICAgIHN0YXRpYyDJtWRpciA9IC8qIEBfX1BVUkVfXyAqL2kwLsm1ybVkZWZpbmVEaXJlY3RpdmUoe1xuICAgICAgdHlwZTogTWluTGVuZ3RoVmFsaWRhdG9yLFxuICAgICAgc2VsZWN0b3JzOiBbW1wiXCIsIFwibWlubGVuZ3RoXCIsIFwiXCIsIFwiZm9ybUNvbnRyb2xOYW1lXCIsIFwiXCJdLCBbXCJcIiwgXCJtaW5sZW5ndGhcIiwgXCJcIiwgXCJmb3JtQ29udHJvbFwiLCBcIlwiXSwgW1wiXCIsIFwibWlubGVuZ3RoXCIsIFwiXCIsIFwibmdNb2RlbFwiLCBcIlwiXV0sXG4gICAgICBob3N0VmFyczogMSxcbiAgICAgIGhvc3RCaW5kaW5nczogZnVuY3Rpb24gTWluTGVuZ3RoVmFsaWRhdG9yX0hvc3RCaW5kaW5ncyhyZiwgY3R4KSB7XG4gICAgICAgIGlmIChyZiAmIDIpIHtcbiAgICAgICAgICBpMC7Jtcm1YXR0cmlidXRlKFwibWlubGVuZ3RoXCIsIGN0eC5fZW5hYmxlZCA/IGN0eC5taW5sZW5ndGggOiBudWxsKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGlucHV0czoge1xuICAgICAgICBtaW5sZW5ndGg6IFwibWlubGVuZ3RoXCJcbiAgICAgIH0sXG4gICAgICBzdGFuZGFsb25lOiBmYWxzZSxcbiAgICAgIGZlYXR1cmVzOiBbaTAuybXJtVByb3ZpZGVyc0ZlYXR1cmUoW01JTl9MRU5HVEhfVkFMSURBVE9SXSksIGkwLsm1ybVJbmhlcml0RGVmaW5pdGlvbkZlYXR1cmVdXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIE1pbkxlbmd0aFZhbGlkYXRvcjtcbn0pKCk7XG4vKiNfX1BVUkVfXyovKCgpID0+IHtcbiAgKHR5cGVvZiBuZ0Rldk1vZGUgPT09IFwidW5kZWZpbmVkXCIgfHwgbmdEZXZNb2RlKSAmJiB2b2lkIDA7XG59KSgpO1xuY29uc3QgTUFYX0xFTkdUSF9WQUxJREFUT1IgPSB7XG4gIHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsXG4gIHVzZUV4aXN0aW5nOiAvKiNfX1BVUkVfXyovZm9yd2FyZFJlZigoKSA9PiBNYXhMZW5ndGhWYWxpZGF0b3IpLFxuICBtdWx0aTogdHJ1ZVxufTtcbmxldCBNYXhMZW5ndGhWYWxpZGF0b3IgPSAvKiNfX1BVUkVfXyovKCgpID0+IHtcbiAgY2xhc3MgTWF4TGVuZ3RoVmFsaWRhdG9yIGV4dGVuZHMgQWJzdHJhY3RWYWxpZGF0b3JEaXJlY3RpdmUge1xuICAgIG1heGxlbmd0aDtcbiAgICBpbnB1dE5hbWUgPSAnbWF4bGVuZ3RoJztcbiAgICBub3JtYWxpemVJbnB1dCA9IGlucHV0ID0+IHRvSW50ZWdlcihpbnB1dCk7XG4gICAgY3JlYXRlVmFsaWRhdG9yID0gbWF4bGVuZ3RoID0+IG1heExlbmd0aFZhbGlkYXRvcihtYXhsZW5ndGgpO1xuICAgIHN0YXRpYyDJtWZhYyA9IC8qIEBfX1BVUkVfXyAqLygoKSA9PiB7XG4gICAgICBsZXQgybVNYXhMZW5ndGhWYWxpZGF0b3JfQmFzZUZhY3Rvcnk7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gTWF4TGVuZ3RoVmFsaWRhdG9yX0ZhY3RvcnkoX19uZ0ZhY3RvcnlUeXBlX18pIHtcbiAgICAgICAgcmV0dXJuICjJtU1heExlbmd0aFZhbGlkYXRvcl9CYXNlRmFjdG9yeSB8fCAoybVNYXhMZW5ndGhWYWxpZGF0b3JfQmFzZUZhY3RvcnkgPSBpMC7Jtcm1Z2V0SW5oZXJpdGVkRmFjdG9yeShNYXhMZW5ndGhWYWxpZGF0b3IpKSkoX19uZ0ZhY3RvcnlUeXBlX18gfHwgTWF4TGVuZ3RoVmFsaWRhdG9yKTtcbiAgICAgIH07XG4gICAgfSkoKTtcbiAgICBzdGF0aWMgybVkaXIgPSAvKiBAX19QVVJFX18gKi9pMC7Jtcm1ZGVmaW5lRGlyZWN0aXZlKHtcbiAgICAgIHR5cGU6IE1heExlbmd0aFZhbGlkYXRvcixcbiAgICAgIHNlbGVjdG9yczogW1tcIlwiLCBcIm1heGxlbmd0aFwiLCBcIlwiLCBcImZvcm1Db250cm9sTmFtZVwiLCBcIlwiXSwgW1wiXCIsIFwibWF4bGVuZ3RoXCIsIFwiXCIsIFwiZm9ybUNvbnRyb2xcIiwgXCJcIl0sIFtcIlwiLCBcIm1heGxlbmd0aFwiLCBcIlwiLCBcIm5nTW9kZWxcIiwgXCJcIl1dLFxuICAgICAgaG9zdFZhcnM6IDEsXG4gICAgICBob3N0QmluZGluZ3M6IGZ1bmN0aW9uIE1heExlbmd0aFZhbGlkYXRvcl9Ib3N0QmluZGluZ3MocmYsIGN0eCkge1xuICAgICAgICBpZiAocmYgJiAyKSB7XG4gICAgICAgICAgaTAuybXJtWF0dHJpYnV0ZShcIm1heGxlbmd0aFwiLCBjdHguX2VuYWJsZWQgPyBjdHgubWF4bGVuZ3RoIDogbnVsbCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBpbnB1dHM6IHtcbiAgICAgICAgbWF4bGVuZ3RoOiBcIm1heGxlbmd0aFwiXG4gICAgICB9LFxuICAgICAgc3RhbmRhbG9uZTogZmFsc2UsXG4gICAgICBmZWF0dXJlczogW2kwLsm1ybVQcm92aWRlcnNGZWF0dXJlKFtNQVhfTEVOR1RIX1ZBTElEQVRPUl0pLCBpMC7Jtcm1SW5oZXJpdERlZmluaXRpb25GZWF0dXJlXVxuICAgIH0pO1xuICB9XG4gIHJldHVybiBNYXhMZW5ndGhWYWxpZGF0b3I7XG59KSgpO1xuLyojX19QVVJFX18qLygoKSA9PiB7XG4gICh0eXBlb2YgbmdEZXZNb2RlID09PSBcInVuZGVmaW5lZFwiIHx8IG5nRGV2TW9kZSkgJiYgdm9pZCAwO1xufSkoKTtcbmNvbnN0IFBBVFRFUk5fVkFMSURBVE9SID0ge1xuICBwcm92aWRlOiBOR19WQUxJREFUT1JTLFxuICB1c2VFeGlzdGluZzogLyojX19QVVJFX18qL2ZvcndhcmRSZWYoKCkgPT4gUGF0dGVyblZhbGlkYXRvciksXG4gIG11bHRpOiB0cnVlXG59O1xubGV0IFBhdHRlcm5WYWxpZGF0b3IgPSAvKiNfX1BVUkVfXyovKCgpID0+IHtcbiAgY2xhc3MgUGF0dGVyblZhbGlkYXRvciBleHRlbmRzIEFic3RyYWN0VmFsaWRhdG9yRGlyZWN0aXZlIHtcbiAgICBwYXR0ZXJuO1xuICAgIGlucHV0TmFtZSA9ICdwYXR0ZXJuJztcbiAgICBub3JtYWxpemVJbnB1dCA9IGlucHV0ID0+IGlucHV0O1xuICAgIGNyZWF0ZVZhbGlkYXRvciA9IGlucHV0ID0+IHBhdHRlcm5WYWxpZGF0b3IoaW5wdXQpO1xuICAgIHN0YXRpYyDJtWZhYyA9IC8qIEBfX1BVUkVfXyAqLygoKSA9PiB7XG4gICAgICBsZXQgybVQYXR0ZXJuVmFsaWRhdG9yX0Jhc2VGYWN0b3J5O1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIFBhdHRlcm5WYWxpZGF0b3JfRmFjdG9yeShfX25nRmFjdG9yeVR5cGVfXykge1xuICAgICAgICByZXR1cm4gKMm1UGF0dGVyblZhbGlkYXRvcl9CYXNlRmFjdG9yeSB8fCAoybVQYXR0ZXJuVmFsaWRhdG9yX0Jhc2VGYWN0b3J5ID0gaTAuybXJtWdldEluaGVyaXRlZEZhY3RvcnkoUGF0dGVyblZhbGlkYXRvcikpKShfX25nRmFjdG9yeVR5cGVfXyB8fCBQYXR0ZXJuVmFsaWRhdG9yKTtcbiAgICAgIH07XG4gICAgfSkoKTtcbiAgICBzdGF0aWMgybVkaXIgPSAvKiBAX19QVVJFX18gKi9pMC7Jtcm1ZGVmaW5lRGlyZWN0aXZlKHtcbiAgICAgIHR5cGU6IFBhdHRlcm5WYWxpZGF0b3IsXG4gICAgICBzZWxlY3RvcnM6IFtbXCJcIiwgXCJwYXR0ZXJuXCIsIFwiXCIsIFwiZm9ybUNvbnRyb2xOYW1lXCIsIFwiXCJdLCBbXCJcIiwgXCJwYXR0ZXJuXCIsIFwiXCIsIFwiZm9ybUNvbnRyb2xcIiwgXCJcIl0sIFtcIlwiLCBcInBhdHRlcm5cIiwgXCJcIiwgXCJuZ01vZGVsXCIsIFwiXCJdXSxcbiAgICAgIGhvc3RWYXJzOiAxLFxuICAgICAgaG9zdEJpbmRpbmdzOiBmdW5jdGlvbiBQYXR0ZXJuVmFsaWRhdG9yX0hvc3RCaW5kaW5ncyhyZiwgY3R4KSB7XG4gICAgICAgIGlmIChyZiAmIDIpIHtcbiAgICAgICAgICBpMC7Jtcm1YXR0cmlidXRlKFwicGF0dGVyblwiLCBjdHguX2VuYWJsZWQgPyBjdHgucGF0dGVybiA6IG51bGwpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgaW5wdXRzOiB7XG4gICAgICAgIHBhdHRlcm46IFwicGF0dGVyblwiXG4gICAgICB9LFxuICAgICAgc3RhbmRhbG9uZTogZmFsc2UsXG4gICAgICBmZWF0dXJlczogW2kwLsm1ybVQcm92aWRlcnNGZWF0dXJlKFtQQVRURVJOX1ZBTElEQVRPUl0pLCBpMC7Jtcm1SW5oZXJpdERlZmluaXRpb25GZWF0dXJlXVxuICAgIH0pO1xuICB9XG4gIHJldHVybiBQYXR0ZXJuVmFsaWRhdG9yO1xufSkoKTtcbi8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICAodHlwZW9mIG5nRGV2TW9kZSA9PT0gXCJ1bmRlZmluZWRcIiB8fCBuZ0Rldk1vZGUpICYmIHZvaWQgMDtcbn0pKCk7XG5jb25zdCBTSEFSRURfRk9STV9ESVJFQ1RJVkVTID0gW8m1TmdOb1ZhbGlkYXRlLCBOZ1NlbGVjdE9wdGlvbiwgybVOZ1NlbGVjdE11bHRpcGxlT3B0aW9uLCBEZWZhdWx0VmFsdWVBY2Nlc3NvciwgTnVtYmVyVmFsdWVBY2Nlc3NvciwgUmFuZ2VWYWx1ZUFjY2Vzc29yLCBDaGVja2JveENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBTZWxlY3RDb250cm9sVmFsdWVBY2Nlc3NvciwgU2VsZWN0TXVsdGlwbGVDb250cm9sVmFsdWVBY2Nlc3NvciwgUmFkaW9Db250cm9sVmFsdWVBY2Nlc3NvciwgTmdDb250cm9sU3RhdHVzLCBOZ0NvbnRyb2xTdGF0dXNHcm91cCwgUmVxdWlyZWRWYWxpZGF0b3IsIE1pbkxlbmd0aFZhbGlkYXRvciwgTWF4TGVuZ3RoVmFsaWRhdG9yLCBQYXR0ZXJuVmFsaWRhdG9yLCBDaGVja2JveFJlcXVpcmVkVmFsaWRhdG9yLCBFbWFpbFZhbGlkYXRvciwgTWluVmFsaWRhdG9yLCBNYXhWYWxpZGF0b3JdO1xuY29uc3QgVEVNUExBVEVfRFJJVkVOX0RJUkVDVElWRVMgPSBbTmdNb2RlbCwgTmdNb2RlbEdyb3VwLCBOZ0Zvcm1dO1xuY29uc3QgUkVBQ1RJVkVfRFJJVkVOX0RJUkVDVElWRVMgPSBbRm9ybUNvbnRyb2xEaXJlY3RpdmUsIEZvcm1Hcm91cERpcmVjdGl2ZSwgRm9ybUFycmF5RGlyZWN0aXZlLCBGb3JtQ29udHJvbE5hbWUsIEZvcm1Hcm91cE5hbWUsIEZvcm1BcnJheU5hbWVdO1xubGV0IMm1SW50ZXJuYWxGb3Jtc1NoYXJlZE1vZHVsZSA9IC8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICBjbGFzcyDJtUludGVybmFsRm9ybXNTaGFyZWRNb2R1bGUge1xuICAgIHN0YXRpYyDJtWZhYyA9IGZ1bmN0aW9uIMm1SW50ZXJuYWxGb3Jtc1NoYXJlZE1vZHVsZV9GYWN0b3J5KF9fbmdGYWN0b3J5VHlwZV9fKSB7XG4gICAgICByZXR1cm4gbmV3IChfX25nRmFjdG9yeVR5cGVfXyB8fCDJtUludGVybmFsRm9ybXNTaGFyZWRNb2R1bGUpKCk7XG4gICAgfTtcbiAgICBzdGF0aWMgybVtb2QgPSAvKiBAX19QVVJFX18gKi9pMC7Jtcm1ZGVmaW5lTmdNb2R1bGUoe1xuICAgICAgdHlwZTogybVJbnRlcm5hbEZvcm1zU2hhcmVkTW9kdWxlXG4gICAgfSk7XG4gICAgc3RhdGljIMm1aW5qID0gLyogQF9fUFVSRV9fICovaTAuybXJtWRlZmluZUluamVjdG9yKHt9KTtcbiAgfVxuICByZXR1cm4gybVJbnRlcm5hbEZvcm1zU2hhcmVkTW9kdWxlO1xufSkoKTtcbi8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICAodHlwZW9mIG5nRGV2TW9kZSA9PT0gXCJ1bmRlZmluZWRcIiB8fCBuZ0Rldk1vZGUpICYmIHZvaWQgMDtcbn0pKCk7XG5mdW5jdGlvbiBpc0Fic3RyYWN0Q29udHJvbE9wdGlvbnMob3B0aW9ucykge1xuICByZXR1cm4gISFvcHRpb25zICYmIChvcHRpb25zLmFzeW5jVmFsaWRhdG9ycyAhPT0gdW5kZWZpbmVkIHx8IG9wdGlvbnMudmFsaWRhdG9ycyAhPT0gdW5kZWZpbmVkIHx8IG9wdGlvbnMudXBkYXRlT24gIT09IHVuZGVmaW5lZCk7XG59XG5sZXQgRm9ybUJ1aWxkZXIgPSAvKiNfX1BVUkVfXyovKCgpID0+IHtcbiAgY2xhc3MgRm9ybUJ1aWxkZXIge1xuICAgIHVzZU5vbk51bGxhYmxlID0gZmFsc2U7XG4gICAgZ2V0IG5vbk51bGxhYmxlKCkge1xuICAgICAgY29uc3Qgbm5mYiA9IG5ldyBGb3JtQnVpbGRlcigpO1xuICAgICAgbm5mYi51c2VOb25OdWxsYWJsZSA9IHRydWU7XG4gICAgICByZXR1cm4gbm5mYjtcbiAgICB9XG4gICAgZ3JvdXAoY29udHJvbHMsIG9wdGlvbnMgPSBudWxsKSB7XG4gICAgICBjb25zdCByZWR1Y2VkQ29udHJvbHMgPSB0aGlzLl9yZWR1Y2VDb250cm9scyhjb250cm9scyk7XG4gICAgICBsZXQgbmV3T3B0aW9ucyA9IHt9O1xuICAgICAgaWYgKGlzQWJzdHJhY3RDb250cm9sT3B0aW9ucyhvcHRpb25zKSkge1xuICAgICAgICBuZXdPcHRpb25zID0gb3B0aW9ucztcbiAgICAgIH0gZWxzZSBpZiAob3B0aW9ucyAhPT0gbnVsbCkge1xuICAgICAgICBuZXdPcHRpb25zLnZhbGlkYXRvcnMgPSBvcHRpb25zLnZhbGlkYXRvcjtcbiAgICAgICAgbmV3T3B0aW9ucy5hc3luY1ZhbGlkYXRvcnMgPSBvcHRpb25zLmFzeW5jVmFsaWRhdG9yO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5ldyBGb3JtR3JvdXAocmVkdWNlZENvbnRyb2xzLCBuZXdPcHRpb25zKTtcbiAgICB9XG4gICAgcmVjb3JkKGNvbnRyb2xzLCBvcHRpb25zID0gbnVsbCkge1xuICAgICAgY29uc3QgcmVkdWNlZENvbnRyb2xzID0gdGhpcy5fcmVkdWNlQ29udHJvbHMoY29udHJvbHMpO1xuICAgICAgcmV0dXJuIG5ldyBGb3JtUmVjb3JkKHJlZHVjZWRDb250cm9scywgb3B0aW9ucyk7XG4gICAgfVxuICAgIGNvbnRyb2woZm9ybVN0YXRlLCB2YWxpZGF0b3JPck9wdHMsIGFzeW5jVmFsaWRhdG9yKSB7XG4gICAgICBsZXQgbmV3T3B0aW9ucyA9IHt9O1xuICAgICAgaWYgKCF0aGlzLnVzZU5vbk51bGxhYmxlKSB7XG4gICAgICAgIHJldHVybiBuZXcgRm9ybUNvbnRyb2woZm9ybVN0YXRlLCB2YWxpZGF0b3JPck9wdHMsIGFzeW5jVmFsaWRhdG9yKTtcbiAgICAgIH1cbiAgICAgIGlmIChpc0Fic3RyYWN0Q29udHJvbE9wdGlvbnModmFsaWRhdG9yT3JPcHRzKSkge1xuICAgICAgICBuZXdPcHRpb25zID0gdmFsaWRhdG9yT3JPcHRzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV3T3B0aW9ucy52YWxpZGF0b3JzID0gdmFsaWRhdG9yT3JPcHRzO1xuICAgICAgICBuZXdPcHRpb25zLmFzeW5jVmFsaWRhdG9ycyA9IGFzeW5jVmFsaWRhdG9yO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5ldyBGb3JtQ29udHJvbChmb3JtU3RhdGUsIHtcbiAgICAgICAgLi4ubmV3T3B0aW9ucyxcbiAgICAgICAgbm9uTnVsbGFibGU6IHRydWVcbiAgICAgIH0pO1xuICAgIH1cbiAgICBhcnJheShjb250cm9scywgdmFsaWRhdG9yT3JPcHRzLCBhc3luY1ZhbGlkYXRvcikge1xuICAgICAgY29uc3QgY3JlYXRlZENvbnRyb2xzID0gY29udHJvbHMubWFwKGMgPT4gdGhpcy5fY3JlYXRlQ29udHJvbChjKSk7XG4gICAgICByZXR1cm4gbmV3IEZvcm1BcnJheShjcmVhdGVkQ29udHJvbHMsIHZhbGlkYXRvck9yT3B0cywgYXN5bmNWYWxpZGF0b3IpO1xuICAgIH1cbiAgICBfcmVkdWNlQ29udHJvbHMoY29udHJvbHMpIHtcbiAgICAgIGNvbnN0IGNyZWF0ZWRDb250cm9scyA9IHt9O1xuICAgICAgT2JqZWN0LmtleXMoY29udHJvbHMpLmZvckVhY2goY29udHJvbE5hbWUgPT4ge1xuICAgICAgICBjcmVhdGVkQ29udHJvbHNbY29udHJvbE5hbWVdID0gdGhpcy5fY3JlYXRlQ29udHJvbChjb250cm9sc1tjb250cm9sTmFtZV0pO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gY3JlYXRlZENvbnRyb2xzO1xuICAgIH1cbiAgICBfY3JlYXRlQ29udHJvbChjb250cm9scykge1xuICAgICAgaWYgKGNvbnRyb2xzIGluc3RhbmNlb2YgRm9ybUNvbnRyb2wpIHtcbiAgICAgICAgcmV0dXJuIGNvbnRyb2xzO1xuICAgICAgfSBlbHNlIGlmIChjb250cm9scyBpbnN0YW5jZW9mIEFic3RyYWN0Q29udHJvbCkge1xuICAgICAgICByZXR1cm4gY29udHJvbHM7XG4gICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoY29udHJvbHMpKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gY29udHJvbHNbMF07XG4gICAgICAgIGNvbnN0IHZhbGlkYXRvciA9IGNvbnRyb2xzLmxlbmd0aCA+IDEgPyBjb250cm9sc1sxXSA6IG51bGw7XG4gICAgICAgIGNvbnN0IGFzeW5jVmFsaWRhdG9yID0gY29udHJvbHMubGVuZ3RoID4gMiA/IGNvbnRyb2xzWzJdIDogbnVsbDtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udHJvbCh2YWx1ZSwgdmFsaWRhdG9yLCBhc3luY1ZhbGlkYXRvcik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5jb250cm9sKGNvbnRyb2xzKTtcbiAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIMm1ZmFjID0gZnVuY3Rpb24gRm9ybUJ1aWxkZXJfRmFjdG9yeShfX25nRmFjdG9yeVR5cGVfXykge1xuICAgICAgcmV0dXJuIG5ldyAoX19uZ0ZhY3RvcnlUeXBlX18gfHwgRm9ybUJ1aWxkZXIpKCk7XG4gICAgfTtcbiAgICBzdGF0aWMgybVwcm92ID0gLyogQF9fUFVSRV9fICovaTAuybXJtWRlZmluZUluamVjdGFibGUoe1xuICAgICAgdG9rZW46IEZvcm1CdWlsZGVyLFxuICAgICAgZmFjdG9yeTogRm9ybUJ1aWxkZXIuybVmYWMsXG4gICAgICBwcm92aWRlZEluOiAncm9vdCdcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gRm9ybUJ1aWxkZXI7XG59KSgpO1xuLyojX19QVVJFX18qLygoKSA9PiB7XG4gICh0eXBlb2YgbmdEZXZNb2RlID09PSBcInVuZGVmaW5lZFwiIHx8IG5nRGV2TW9kZSkgJiYgdm9pZCAwO1xufSkoKTtcbmxldCBOb25OdWxsYWJsZUZvcm1CdWlsZGVyID0gLyojX19QVVJFX18qLygoKSA9PiB7XG4gIGNsYXNzIE5vbk51bGxhYmxlRm9ybUJ1aWxkZXIge1xuICAgIHN0YXRpYyDJtWZhYyA9IGZ1bmN0aW9uIE5vbk51bGxhYmxlRm9ybUJ1aWxkZXJfRmFjdG9yeShfX25nRmFjdG9yeVR5cGVfXykge1xuICAgICAgcmV0dXJuIG5ldyAoX19uZ0ZhY3RvcnlUeXBlX18gfHwgTm9uTnVsbGFibGVGb3JtQnVpbGRlcikoKTtcbiAgICB9O1xuICAgIHN0YXRpYyDJtXByb3YgPSAvKiBAX19QVVJFX18gKi9pMC7Jtcm1ZGVmaW5lSW5qZWN0YWJsZSh7XG4gICAgICB0b2tlbjogTm9uTnVsbGFibGVGb3JtQnVpbGRlcixcbiAgICAgIGZhY3Rvcnk6ICgpID0+ICgoKSA9PiBpbmplY3QoRm9ybUJ1aWxkZXIpLm5vbk51bGxhYmxlKSgpLFxuICAgICAgcHJvdmlkZWRJbjogJ3Jvb3QnXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIE5vbk51bGxhYmxlRm9ybUJ1aWxkZXI7XG59KSgpO1xuLyojX19QVVJFX18qLygoKSA9PiB7XG4gICh0eXBlb2YgbmdEZXZNb2RlID09PSBcInVuZGVmaW5lZFwiIHx8IG5nRGV2TW9kZSkgJiYgdm9pZCAwO1xufSkoKTtcbmxldCBVbnR5cGVkRm9ybUJ1aWxkZXIgPSAvKiNfX1BVUkVfXyovKCgpID0+IHtcbiAgY2xhc3MgVW50eXBlZEZvcm1CdWlsZGVyIGV4dGVuZHMgRm9ybUJ1aWxkZXIge1xuICAgIGdyb3VwKGNvbnRyb2xzQ29uZmlnLCBvcHRpb25zID0gbnVsbCkge1xuICAgICAgcmV0dXJuIHN1cGVyLmdyb3VwKGNvbnRyb2xzQ29uZmlnLCBvcHRpb25zKTtcbiAgICB9XG4gICAgY29udHJvbChmb3JtU3RhdGUsIHZhbGlkYXRvck9yT3B0cywgYXN5bmNWYWxpZGF0b3IpIHtcbiAgICAgIHJldHVybiBzdXBlci5jb250cm9sKGZvcm1TdGF0ZSwgdmFsaWRhdG9yT3JPcHRzLCBhc3luY1ZhbGlkYXRvcik7XG4gICAgfVxuICAgIGFycmF5KGNvbnRyb2xzQ29uZmlnLCB2YWxpZGF0b3JPck9wdHMsIGFzeW5jVmFsaWRhdG9yKSB7XG4gICAgICByZXR1cm4gc3VwZXIuYXJyYXkoY29udHJvbHNDb25maWcsIHZhbGlkYXRvck9yT3B0cywgYXN5bmNWYWxpZGF0b3IpO1xuICAgIH1cbiAgICBzdGF0aWMgybVmYWMgPSAvKiBAX19QVVJFX18gKi8oKCkgPT4ge1xuICAgICAgbGV0IMm1VW50eXBlZEZvcm1CdWlsZGVyX0Jhc2VGYWN0b3J5O1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIFVudHlwZWRGb3JtQnVpbGRlcl9GYWN0b3J5KF9fbmdGYWN0b3J5VHlwZV9fKSB7XG4gICAgICAgIHJldHVybiAoybVVbnR5cGVkRm9ybUJ1aWxkZXJfQmFzZUZhY3RvcnkgfHwgKMm1VW50eXBlZEZvcm1CdWlsZGVyX0Jhc2VGYWN0b3J5ID0gaTAuybXJtWdldEluaGVyaXRlZEZhY3RvcnkoVW50eXBlZEZvcm1CdWlsZGVyKSkpKF9fbmdGYWN0b3J5VHlwZV9fIHx8IFVudHlwZWRGb3JtQnVpbGRlcik7XG4gICAgICB9O1xuICAgIH0pKCk7XG4gICAgc3RhdGljIMm1cHJvdiA9IC8qIEBfX1BVUkVfXyAqL2kwLsm1ybVkZWZpbmVJbmplY3RhYmxlKHtcbiAgICAgIHRva2VuOiBVbnR5cGVkRm9ybUJ1aWxkZXIsXG4gICAgICBmYWN0b3J5OiBVbnR5cGVkRm9ybUJ1aWxkZXIuybVmYWMsXG4gICAgICBwcm92aWRlZEluOiAncm9vdCdcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gVW50eXBlZEZvcm1CdWlsZGVyO1xufSkoKTtcbi8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICAodHlwZW9mIG5nRGV2TW9kZSA9PT0gXCJ1bmRlZmluZWRcIiB8fCBuZ0Rldk1vZGUpICYmIHZvaWQgMDtcbn0pKCk7XG5sZXQgRm9ybXNNb2R1bGUgPSAvKiNfX1BVUkVfXyovKCgpID0+IHtcbiAgY2xhc3MgRm9ybXNNb2R1bGUge1xuICAgIHN0YXRpYyB3aXRoQ29uZmlnKG9wdHMpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5nTW9kdWxlOiBGb3Jtc01vZHVsZSxcbiAgICAgICAgcHJvdmlkZXJzOiBbe1xuICAgICAgICAgIHByb3ZpZGU6IENBTExfU0VUX0RJU0FCTEVEX1NUQVRFLFxuICAgICAgICAgIHVzZVZhbHVlOiBvcHRzLmNhbGxTZXREaXNhYmxlZFN0YXRlID8/IHNldERpc2FibGVkU3RhdGVEZWZhdWx0XG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgIH1cbiAgICBzdGF0aWMgybVmYWMgPSBmdW5jdGlvbiBGb3Jtc01vZHVsZV9GYWN0b3J5KF9fbmdGYWN0b3J5VHlwZV9fKSB7XG4gICAgICByZXR1cm4gbmV3IChfX25nRmFjdG9yeVR5cGVfXyB8fCBGb3Jtc01vZHVsZSkoKTtcbiAgICB9O1xuICAgIHN0YXRpYyDJtW1vZCA9IC8qIEBfX1BVUkVfXyAqL2kwLsm1ybVkZWZpbmVOZ01vZHVsZSh7XG4gICAgICB0eXBlOiBGb3Jtc01vZHVsZVxuICAgIH0pO1xuICAgIHN0YXRpYyDJtWluaiA9IC8qIEBfX1BVUkVfXyAqL2kwLsm1ybVkZWZpbmVJbmplY3Rvcih7XG4gICAgICBpbXBvcnRzOiBbybVJbnRlcm5hbEZvcm1zU2hhcmVkTW9kdWxlXVxuICAgIH0pO1xuICB9XG4gIHJldHVybiBGb3Jtc01vZHVsZTtcbn0pKCk7XG4vKiNfX1BVUkVfXyovKCgpID0+IHtcbiAgKHR5cGVvZiBuZ0Rldk1vZGUgPT09IFwidW5kZWZpbmVkXCIgfHwgbmdEZXZNb2RlKSAmJiB2b2lkIDA7XG59KSgpO1xubGV0IFJlYWN0aXZlRm9ybXNNb2R1bGUgPSAvKiNfX1BVUkVfXyovKCgpID0+IHtcbiAgY2xhc3MgUmVhY3RpdmVGb3Jtc01vZHVsZSB7XG4gICAgc3RhdGljIHdpdGhDb25maWcob3B0cykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmdNb2R1bGU6IFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgICAgIHByb3ZpZGVyczogW3tcbiAgICAgICAgICBwcm92aWRlOiBOR19NT0RFTF9XSVRIX0ZPUk1fQ09OVFJPTF9XQVJOSU5HLFxuICAgICAgICAgIHVzZVZhbHVlOiBvcHRzLndhcm5Pbk5nTW9kZWxXaXRoRm9ybUNvbnRyb2wgPz8gJ2Fsd2F5cydcbiAgICAgICAgfSwge1xuICAgICAgICAgIHByb3ZpZGU6IENBTExfU0VUX0RJU0FCTEVEX1NUQVRFLFxuICAgICAgICAgIHVzZVZhbHVlOiBvcHRzLmNhbGxTZXREaXNhYmxlZFN0YXRlID8/IHNldERpc2FibGVkU3RhdGVEZWZhdWx0XG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgIH1cbiAgICBzdGF0aWMgybVmYWMgPSBmdW5jdGlvbiBSZWFjdGl2ZUZvcm1zTW9kdWxlX0ZhY3RvcnkoX19uZ0ZhY3RvcnlUeXBlX18pIHtcbiAgICAgIHJldHVybiBuZXcgKF9fbmdGYWN0b3J5VHlwZV9fIHx8IFJlYWN0aXZlRm9ybXNNb2R1bGUpKCk7XG4gICAgfTtcbiAgICBzdGF0aWMgybVtb2QgPSAvKiBAX19QVVJFX18gKi9pMC7Jtcm1ZGVmaW5lTmdNb2R1bGUoe1xuICAgICAgdHlwZTogUmVhY3RpdmVGb3Jtc01vZHVsZVxuICAgIH0pO1xuICAgIHN0YXRpYyDJtWluaiA9IC8qIEBfX1BVUkVfXyAqL2kwLsm1ybVkZWZpbmVJbmplY3Rvcih7XG4gICAgICBpbXBvcnRzOiBbybVJbnRlcm5hbEZvcm1zU2hhcmVkTW9kdWxlXVxuICAgIH0pO1xuICB9XG4gIHJldHVybiBSZWFjdGl2ZUZvcm1zTW9kdWxlO1xufSkoKTtcbi8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICAodHlwZW9mIG5nRGV2TW9kZSA9PT0gXCJ1bmRlZmluZWRcIiB8fCBuZ0Rldk1vZGUpICYmIHZvaWQgMDtcbn0pKCk7XG5leHBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEFic3RyYWN0Q29udHJvbERpcmVjdGl2ZSwgQWJzdHJhY3RGb3JtRGlyZWN0aXZlLCBBYnN0cmFjdEZvcm1Hcm91cERpcmVjdGl2ZSwgQ09NUE9TSVRJT05fQlVGRkVSX01PREUsIENoZWNrYm94Q29udHJvbFZhbHVlQWNjZXNzb3IsIENoZWNrYm94UmVxdWlyZWRWYWxpZGF0b3IsIENvbnRyb2xDb250YWluZXIsIENvbnRyb2xFdmVudCwgRGVmYXVsdFZhbHVlQWNjZXNzb3IsIEVtYWlsVmFsaWRhdG9yLCBGb3JtQXJyYXksIEZvcm1BcnJheURpcmVjdGl2ZSwgRm9ybUFycmF5TmFtZSwgRm9ybUJ1aWxkZXIsIEZvcm1Db250cm9sLCBGb3JtQ29udHJvbERpcmVjdGl2ZSwgRm9ybUNvbnRyb2xOYW1lLCBGb3JtR3JvdXAsIEZvcm1Hcm91cERpcmVjdGl2ZSwgRm9ybUdyb3VwTmFtZSwgRm9ybVJlY29yZCwgRm9ybVJlc2V0RXZlbnQsIEZvcm1TdWJtaXR0ZWRFdmVudCwgRm9ybXNNb2R1bGUsIE1heExlbmd0aFZhbGlkYXRvciwgTWF4VmFsaWRhdG9yLCBNaW5MZW5ndGhWYWxpZGF0b3IsIE1pblZhbGlkYXRvciwgTkdfQVNZTkNfVkFMSURBVE9SUywgTkdfVkFMSURBVE9SUywgTkdfVkFMVUVfQUNDRVNTT1IsIE5nQ29udHJvbCwgTmdDb250cm9sU3RhdHVzLCBOZ0NvbnRyb2xTdGF0dXNHcm91cCwgTmdGb3JtLCBOZ01vZGVsLCBOZ01vZGVsR3JvdXAsIE5nU2VsZWN0T3B0aW9uLCBOb25OdWxsYWJsZUZvcm1CdWlsZGVyLCBOdW1iZXJWYWx1ZUFjY2Vzc29yLCBQYXR0ZXJuVmFsaWRhdG9yLCBQcmlzdGluZUNoYW5nZUV2ZW50LCBSYWRpb0NvbnRyb2xWYWx1ZUFjY2Vzc29yLCBSYW5nZVZhbHVlQWNjZXNzb3IsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIFJlcXVpcmVkVmFsaWRhdG9yLCBTZWxlY3RDb250cm9sVmFsdWVBY2Nlc3NvciwgU2VsZWN0TXVsdGlwbGVDb250cm9sVmFsdWVBY2Nlc3NvciwgU3RhdHVzQ2hhbmdlRXZlbnQsIFRvdWNoZWRDaGFuZ2VFdmVudCwgVW50eXBlZEZvcm1BcnJheSwgVW50eXBlZEZvcm1CdWlsZGVyLCBVbnR5cGVkRm9ybUNvbnRyb2wsIFVudHlwZWRGb3JtR3JvdXAsIFZFUlNJT04sIFZhbGlkYXRvcnMsIFZhbHVlQ2hhbmdlRXZlbnQsIGlzRm9ybUFycmF5LCBpc0Zvcm1Db250cm9sLCBpc0Zvcm1Hcm91cCwgaXNGb3JtUmVjb3JkLCDJtUludGVybmFsRm9ybXNTaGFyZWRNb2R1bGUsIMm1TmdOb1ZhbGlkYXRlLCDJtU5nU2VsZWN0TXVsdGlwbGVPcHRpb24gfTtcbiJdLCJtYXBwaW5ncyI6Ijs2YUFXQSxHQUFJLENBQUFBLEVBQUEsRUFBQUMsY0FBQSxHQUFBQyxDQUFBLE9BQXlDLElBQU0sQ0FBQUQsY0FBQSxHQUFBRSxDQUFBLE1BQ2pELEtBQU0sQ0FBQUMsQ0FBeUIsQ0FDN0JDLFNBQUEsQ0FDQUMsV0FBQSxDQUNBQyxRQUFBLEVBQUFOLGNBQUEsR0FBQUMsQ0FBQSxNQUFXTSxDQUFBLEVBQUssQ0FBQVAsY0FBQSxH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ZSxDQUFBLENBQ1Z1ZSxTQUFBLENBQVcsQ0FBQyxDQUNWMWMsT0FBQSxDQUFTMlcsRUFBQSxDQUNUZ0csUUFBQSxDQUFVLENBQUEzZSxjQUFBLEdBQUFpQixDQUFBLFdBQUFWLENBQUEsQ0FBS3FlLDRCQUFBLElBQUE1ZSxjQUFBLEdBQUFpQixDQUFBLFdBQWdDLFFBQ2pELEdBQUcsQ0FDRGUsT0FBQSxDQUFTbVIsRUFBQSxDQUNUd0wsUUFBQSxDQUFVLENBQUEzZSxjQUFBLEdBQUFpQixDQUFBLFdBQUFWLENBQUEsQ0FBS3VXLG9CQUFBLElBQUE5VyxjQUFBLEdBQUFpQixDQUFBLFdBQXdCb1MsRUFDekMsRUFBQyxDQUNILENBQ0YsRUFDQSxNQUFPLENBQUFyUyxJQUFBLEVBQUFoQixjQUFBLEdBQUFDLENBQUEsUUFBTyxTQUFxQ1MsQ0FBQSxDQUFtQixDQUFBVixjQUFBLEdBQUFFLENBQUEsT0FBQUYsQ0FBQSxpQkFBQUMsQ0FBQSxRQUNwRSxNQUFPLEtBQUssQ0FBQUQsY0FBQSxHQUFBaUIsQ0FBQSxXQUFBUCxDQUFBLElBQUFWLGNBQUEsR0FBQWlCLENBQUEsV0FBcUJkLENBQUEsSUFDbkMsSUFDQSxNQUFPLENBQUFvZCxJQUFBLEVBQUF2ZCxjQUFBLEdBQUFDLENBQUEsUUFBeUJ1ZCxDQUFBLENBQWlCLENBQy9DamMsSUFBQSxDQUFNcEIsQ0FDUixDQUFDLEdBQ0QsTUFBTyxDQUFBc2QsSUFBQSxFQUFBemQsY0FBQSxHQUFBQyxDQUFBLFFBQXlCeWQsQ0FBQSxDQUFpQixDQUMvQ21CLE9BQUEsQ0FBUyxDQUFDdkIsRUFBMEIsQ0FDdEMsQ0FBQyxDQUNILEdBQ0F0ZCxjQUFBLEdBQUFDLENBQUEsY0FBTyxDQUFBRSxDQUNULElBQUcsVUFBQWdDLEVBQUEsSUFBQWpCLENBQUEsQ0FBQWdELEVBQUEsSUFBQWpELENBQUEsQ0FBQXFLLEVBQUEsSUFBQTFKLENBQUEsQ0FBQTZKLEVBQUEsSUFBQTJELENBQUEsQ0FBQWdILEVBQUEsSUFBQTdWLENBQUEsQ0FBQXNZLEVBQUEsSUFBQTNZLENBQUEsQ0FBQXVaLEVBQUEsSUFBQTJDLENBQUEsQ0FBQXhDLEVBQUEsSUFBQWpNLENBQUEsQ0FBQTJOLEVBQUEsSUFBQTVhLENBQUEsQ0FBQWdjLEVBQUEsSUFBQXJDLENBQUEsQ0FBQStDLEVBQUEsSUFBQXRRLENBQUEsQ0FBQThRLEVBQUEsSUFBQXRjLENBQUEsQ0FBQWlkLEVBQUEsSUFBQXpjLENBQUEsRSIsImlnbm9yZUxpc3QiOltdfQ== \ No newline at end of file diff --git a/frontend/dist-instrumented/chunk-X3YLKFKT.js.map b/frontend/dist-instrumented/chunk-X3YLKFKT.js.map new file mode 100644 index 00000000..d18f4353 --- /dev/null +++ b/frontend/dist-instrumented/chunk-X3YLKFKT.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["node_modules/@angular/forms/fesm2022/forms.mjs"],"sourcesContent":["/**\n * @license Angular v21.2.4\n * (c) 2010-2026 Google LLC. https://angular.dev/\n * License: MIT\n */\n\nimport * as i0 from '@angular/core';\nimport { Directive, InjectionToken, forwardRef, Optional, Inject, ɵisPromise as _isPromise, ɵisSubscribable as _isSubscribable, ɵRuntimeError as _RuntimeError, Self, Version, untracked, computed, signal, EventEmitter, Input, Host, SkipSelf, booleanAttribute, ChangeDetectorRef, Output, Injectable, inject, ApplicationRef, DestroyRef, afterNextRender, NgModule } from '@angular/core';\nimport { ɵgetDOM as _getDOM } from '@angular/common';\nimport { forkJoin, from, Subject } from 'rxjs';\nimport { map } from 'rxjs/operators';\nlet BaseControlValueAccessor = /*#__PURE__*/(() => {\n class BaseControlValueAccessor {\n _renderer;\n _elementRef;\n onChange = _ => {};\n onTouched = () => {};\n constructor(_renderer, _elementRef) {\n this._renderer = _renderer;\n this._elementRef = _elementRef;\n }\n setProperty(key, value) {\n this._renderer.setProperty(this._elementRef.nativeElement, key, value);\n }\n registerOnTouched(fn) {\n this.onTouched = fn;\n }\n registerOnChange(fn) {\n this.onChange = fn;\n }\n setDisabledState(isDisabled) {\n this.setProperty('disabled', isDisabled);\n }\n static ɵfac = function BaseControlValueAccessor_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || BaseControlValueAccessor)(i0.ɵɵdirectiveInject(i0.Renderer2), i0.ɵɵdirectiveInject(i0.ElementRef));\n };\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: BaseControlValueAccessor\n });\n }\n return BaseControlValueAccessor;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet BuiltInControlValueAccessor = /*#__PURE__*/(() => {\n class BuiltInControlValueAccessor extends BaseControlValueAccessor {\n static ɵfac = /* @__PURE__ */(() => {\n let ɵBuiltInControlValueAccessor_BaseFactory;\n return function BuiltInControlValueAccessor_Factory(__ngFactoryType__) {\n return (ɵBuiltInControlValueAccessor_BaseFactory || (ɵBuiltInControlValueAccessor_BaseFactory = i0.ɵɵgetInheritedFactory(BuiltInControlValueAccessor)))(__ngFactoryType__ || BuiltInControlValueAccessor);\n };\n })();\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: BuiltInControlValueAccessor,\n features: [i0.ɵɵInheritDefinitionFeature]\n });\n }\n return BuiltInControlValueAccessor;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst NG_VALUE_ACCESSOR = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'NgValueAccessor' : '');\nconst CHECKBOX_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: /*#__PURE__*/forwardRef(() => CheckboxControlValueAccessor),\n multi: true\n};\nlet CheckboxControlValueAccessor = /*#__PURE__*/(() => {\n class CheckboxControlValueAccessor extends BuiltInControlValueAccessor {\n writeValue(value) {\n this.setProperty('checked', value);\n }\n static ɵfac = /* @__PURE__ */(() => {\n let ɵCheckboxControlValueAccessor_BaseFactory;\n return function CheckboxControlValueAccessor_Factory(__ngFactoryType__) {\n return (ɵCheckboxControlValueAccessor_BaseFactory || (ɵCheckboxControlValueAccessor_BaseFactory = i0.ɵɵgetInheritedFactory(CheckboxControlValueAccessor)))(__ngFactoryType__ || CheckboxControlValueAccessor);\n };\n })();\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: CheckboxControlValueAccessor,\n selectors: [[\"input\", \"type\", \"checkbox\", \"formControlName\", \"\"], [\"input\", \"type\", \"checkbox\", \"formControl\", \"\"], [\"input\", \"type\", \"checkbox\", \"ngModel\", \"\"]],\n hostBindings: function CheckboxControlValueAccessor_HostBindings(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵlistener(\"change\", function CheckboxControlValueAccessor_change_HostBindingHandler($event) {\n return ctx.onChange($event.target.checked);\n })(\"blur\", function CheckboxControlValueAccessor_blur_HostBindingHandler() {\n return ctx.onTouched();\n });\n }\n },\n standalone: false,\n features: [i0.ɵɵProvidersFeature([CHECKBOX_VALUE_ACCESSOR]), i0.ɵɵInheritDefinitionFeature]\n });\n }\n return CheckboxControlValueAccessor;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst DEFAULT_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: /*#__PURE__*/forwardRef(() => DefaultValueAccessor),\n multi: true\n};\nfunction _isAndroid() {\n const userAgent = _getDOM() ? _getDOM().getUserAgent() : '';\n return /android (\\d+)/.test(userAgent.toLowerCase());\n}\nconst COMPOSITION_BUFFER_MODE = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'CompositionEventMode' : '');\nlet DefaultValueAccessor = /*#__PURE__*/(() => {\n class DefaultValueAccessor extends BaseControlValueAccessor {\n _compositionMode;\n _composing = false;\n constructor(renderer, elementRef, _compositionMode) {\n super(renderer, elementRef);\n this._compositionMode = _compositionMode;\n if (this._compositionMode == null) {\n this._compositionMode = !_isAndroid();\n }\n }\n writeValue(value) {\n const normalizedValue = value == null ? '' : value;\n this.setProperty('value', normalizedValue);\n }\n _handleInput(value) {\n if (!this._compositionMode || this._compositionMode && !this._composing) {\n this.onChange(value);\n }\n }\n _compositionStart() {\n this._composing = true;\n }\n _compositionEnd(value) {\n this._composing = false;\n this._compositionMode && this.onChange(value);\n }\n static ɵfac = function DefaultValueAccessor_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || DefaultValueAccessor)(i0.ɵɵdirectiveInject(i0.Renderer2), i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(COMPOSITION_BUFFER_MODE, 8));\n };\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: DefaultValueAccessor,\n selectors: [[\"input\", \"formControlName\", \"\", 3, \"type\", \"checkbox\"], [\"textarea\", \"formControlName\", \"\"], [\"input\", \"formControl\", \"\", 3, \"type\", \"checkbox\"], [\"textarea\", \"formControl\", \"\"], [\"input\", \"ngModel\", \"\", 3, \"type\", \"checkbox\"], [\"textarea\", \"ngModel\", \"\"], [\"\", \"ngDefaultControl\", \"\"]],\n hostBindings: function DefaultValueAccessor_HostBindings(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵlistener(\"input\", function DefaultValueAccessor_input_HostBindingHandler($event) {\n return ctx._handleInput($event.target.value);\n })(\"blur\", function DefaultValueAccessor_blur_HostBindingHandler() {\n return ctx.onTouched();\n })(\"compositionstart\", function DefaultValueAccessor_compositionstart_HostBindingHandler() {\n return ctx._compositionStart();\n })(\"compositionend\", function DefaultValueAccessor_compositionend_HostBindingHandler($event) {\n return ctx._compositionEnd($event.target.value);\n });\n }\n },\n standalone: false,\n features: [i0.ɵɵProvidersFeature([DEFAULT_VALUE_ACCESSOR]), i0.ɵɵInheritDefinitionFeature]\n });\n }\n return DefaultValueAccessor;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nfunction isEmptyInputValue(value) {\n return value == null || lengthOrSize(value) === 0;\n}\nfunction lengthOrSize(value) {\n if (value == null) {\n return null;\n } else if (Array.isArray(value) || typeof value === 'string') {\n return value.length;\n } else if (value instanceof Set) {\n return value.size;\n }\n return null;\n}\nconst NG_VALIDATORS = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'NgValidators' : '');\nconst NG_ASYNC_VALIDATORS = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'NgAsyncValidators' : '');\nconst EMAIL_REGEXP = /^(?=.{1,254}$)(?=.{1,64}@)[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+)*@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\nclass Validators {\n static min(min) {\n return minValidator(min);\n }\n static max(max) {\n return maxValidator(max);\n }\n static required(control) {\n return requiredValidator(control);\n }\n static requiredTrue(control) {\n return requiredTrueValidator(control);\n }\n static email(control) {\n return emailValidator(control);\n }\n static minLength(minLength) {\n return minLengthValidator(minLength);\n }\n static maxLength(maxLength) {\n return maxLengthValidator(maxLength);\n }\n static pattern(pattern) {\n return patternValidator(pattern);\n }\n static nullValidator(control) {\n return nullValidator();\n }\n static compose(validators) {\n return compose(validators);\n }\n static composeAsync(validators) {\n return composeAsync(validators);\n }\n}\nfunction minValidator(min) {\n return control => {\n if (control.value == null || min == null) {\n return null;\n }\n const value = parseFloat(control.value);\n return !isNaN(value) && value < min ? {\n 'min': {\n 'min': min,\n 'actual': control.value\n }\n } : null;\n };\n}\nfunction maxValidator(max) {\n return control => {\n if (control.value == null || max == null) {\n return null;\n }\n const value = parseFloat(control.value);\n return !isNaN(value) && value > max ? {\n 'max': {\n 'max': max,\n 'actual': control.value\n }\n } : null;\n };\n}\nfunction requiredValidator(control) {\n return isEmptyInputValue(control.value) ? {\n 'required': true\n } : null;\n}\nfunction requiredTrueValidator(control) {\n return control.value === true ? null : {\n 'required': true\n };\n}\nfunction emailValidator(control) {\n if (isEmptyInputValue(control.value)) {\n return null;\n }\n return EMAIL_REGEXP.test(control.value) ? null : {\n 'email': true\n };\n}\nfunction minLengthValidator(minLength) {\n return control => {\n const length = control.value?.length ?? lengthOrSize(control.value);\n if (length === null || length === 0) {\n return null;\n }\n return length < minLength ? {\n 'minlength': {\n 'requiredLength': minLength,\n 'actualLength': length\n }\n } : null;\n };\n}\nfunction maxLengthValidator(maxLength) {\n return control => {\n const length = control.value?.length ?? lengthOrSize(control.value);\n if (length !== null && length > maxLength) {\n return {\n 'maxlength': {\n 'requiredLength': maxLength,\n 'actualLength': length\n }\n };\n }\n return null;\n };\n}\nfunction patternValidator(pattern) {\n if (!pattern) return nullValidator;\n let regex;\n let regexStr;\n if (typeof pattern === 'string') {\n regexStr = '';\n if (pattern.charAt(0) !== '^') regexStr += '^';\n regexStr += pattern;\n if (pattern.charAt(pattern.length - 1) !== '$') regexStr += '$';\n regex = new RegExp(regexStr);\n } else {\n regexStr = pattern.toString();\n regex = pattern;\n }\n return control => {\n if (isEmptyInputValue(control.value)) {\n return null;\n }\n const value = control.value;\n return regex.test(value) ? null : {\n 'pattern': {\n 'requiredPattern': regexStr,\n 'actualValue': value\n }\n };\n };\n}\nfunction nullValidator(control) {\n return null;\n}\nfunction isPresent(o) {\n return o != null;\n}\nfunction toObservable(value) {\n const obs = _isPromise(value) ? from(value) : value;\n if ((typeof ngDevMode === 'undefined' || ngDevMode) && !_isSubscribable(obs)) {\n let errorMessage = `Expected async validator to return Promise or Observable.`;\n if (typeof value === 'object') {\n errorMessage += ' Are you using a synchronous validator where an async validator is expected?';\n }\n throw new _RuntimeError(-1101, errorMessage);\n }\n return obs;\n}\nfunction mergeErrors(arrayOfErrors) {\n let res = {};\n arrayOfErrors.forEach(errors => {\n res = errors != null ? {\n ...res,\n ...errors\n } : res;\n });\n return Object.keys(res).length === 0 ? null : res;\n}\nfunction executeValidators(control, validators) {\n return validators.map(validator => validator(control));\n}\nfunction isValidatorFn(validator) {\n return !validator.validate;\n}\nfunction normalizeValidators(validators) {\n return validators.map(validator => {\n return isValidatorFn(validator) ? validator : c => validator.validate(c);\n });\n}\nfunction compose(validators) {\n if (!validators) return null;\n const presentValidators = validators.filter(isPresent);\n if (presentValidators.length == 0) return null;\n return function (control) {\n return mergeErrors(executeValidators(control, presentValidators));\n };\n}\nfunction composeValidators(validators) {\n return validators != null ? compose(normalizeValidators(validators)) : null;\n}\nfunction composeAsync(validators) {\n if (!validators) return null;\n const presentValidators = validators.filter(isPresent);\n if (presentValidators.length == 0) return null;\n return function (control) {\n const observables = executeValidators(control, presentValidators).map(toObservable);\n return forkJoin(observables).pipe(map(mergeErrors));\n };\n}\nfunction composeAsyncValidators(validators) {\n return validators != null ? composeAsync(normalizeValidators(validators)) : null;\n}\nfunction mergeValidators(controlValidators, dirValidator) {\n if (controlValidators === null) return [dirValidator];\n return Array.isArray(controlValidators) ? [...controlValidators, dirValidator] : [controlValidators, dirValidator];\n}\nfunction getControlValidators(control) {\n return control._rawValidators;\n}\nfunction getControlAsyncValidators(control) {\n return control._rawAsyncValidators;\n}\nfunction makeValidatorsArray(validators) {\n if (!validators) return [];\n return Array.isArray(validators) ? validators : [validators];\n}\nfunction hasValidator(validators, validator) {\n return Array.isArray(validators) ? validators.includes(validator) : validators === validator;\n}\nfunction addValidators(validators, currentValidators) {\n const current = makeValidatorsArray(currentValidators);\n const validatorsToAdd = makeValidatorsArray(validators);\n validatorsToAdd.forEach(v => {\n if (!hasValidator(current, v)) {\n current.push(v);\n }\n });\n return current;\n}\nfunction removeValidators(validators, currentValidators) {\n return makeValidatorsArray(currentValidators).filter(v => !hasValidator(validators, v));\n}\nclass AbstractControlDirective {\n get value() {\n return this.control ? this.control.value : null;\n }\n get valid() {\n return this.control ? this.control.valid : null;\n }\n get invalid() {\n return this.control ? this.control.invalid : null;\n }\n get pending() {\n return this.control ? this.control.pending : null;\n }\n get disabled() {\n return this.control ? this.control.disabled : null;\n }\n get enabled() {\n return this.control ? this.control.enabled : null;\n }\n get errors() {\n return this.control ? this.control.errors : null;\n }\n get pristine() {\n return this.control ? this.control.pristine : null;\n }\n get dirty() {\n return this.control ? this.control.dirty : null;\n }\n get touched() {\n return this.control ? this.control.touched : null;\n }\n get status() {\n return this.control ? this.control.status : null;\n }\n get untouched() {\n return this.control ? this.control.untouched : null;\n }\n get statusChanges() {\n return this.control ? this.control.statusChanges : null;\n }\n get valueChanges() {\n return this.control ? this.control.valueChanges : null;\n }\n get path() {\n return null;\n }\n _composedValidatorFn;\n _composedAsyncValidatorFn;\n _rawValidators = [];\n _rawAsyncValidators = [];\n _setValidators(validators) {\n this._rawValidators = validators || [];\n this._composedValidatorFn = composeValidators(this._rawValidators);\n }\n _setAsyncValidators(validators) {\n this._rawAsyncValidators = validators || [];\n this._composedAsyncValidatorFn = composeAsyncValidators(this._rawAsyncValidators);\n }\n get validator() {\n return this._composedValidatorFn || null;\n }\n get asyncValidator() {\n return this._composedAsyncValidatorFn || null;\n }\n _onDestroyCallbacks = [];\n _registerOnDestroy(fn) {\n this._onDestroyCallbacks.push(fn);\n }\n _invokeOnDestroyCallbacks() {\n this._onDestroyCallbacks.forEach(fn => fn());\n this._onDestroyCallbacks = [];\n }\n reset(value = undefined) {\n this.control?.reset(value);\n }\n hasError(errorCode, path) {\n return this.control ? this.control.hasError(errorCode, path) : false;\n }\n getError(errorCode, path) {\n return this.control ? this.control.getError(errorCode, path) : null;\n }\n}\nclass ControlContainer extends AbstractControlDirective {\n name;\n get formDirective() {\n return null;\n }\n get path() {\n return null;\n }\n}\nclass NgControl extends AbstractControlDirective {\n _parent = null;\n name = null;\n valueAccessor = null;\n}\nclass AbstractControlStatus {\n _cd;\n constructor(cd) {\n this._cd = cd;\n }\n get isTouched() {\n this._cd?.control?._touched?.();\n return !!this._cd?.control?.touched;\n }\n get isUntouched() {\n return !!this._cd?.control?.untouched;\n }\n get isPristine() {\n this._cd?.control?._pristine?.();\n return !!this._cd?.control?.pristine;\n }\n get isDirty() {\n return !!this._cd?.control?.dirty;\n }\n get isValid() {\n this._cd?.control?._status?.();\n return !!this._cd?.control?.valid;\n }\n get isInvalid() {\n return !!this._cd?.control?.invalid;\n }\n get isPending() {\n return !!this._cd?.control?.pending;\n }\n get isSubmitted() {\n this._cd?._submitted?.();\n return !!this._cd?.submitted;\n }\n}\nconst ngControlStatusHost = {\n '[class.ng-untouched]': 'isUntouched',\n '[class.ng-touched]': 'isTouched',\n '[class.ng-pristine]': 'isPristine',\n '[class.ng-dirty]': 'isDirty',\n '[class.ng-valid]': 'isValid',\n '[class.ng-invalid]': 'isInvalid',\n '[class.ng-pending]': 'isPending'\n};\nlet NgControlStatus = /*#__PURE__*/(() => {\n class NgControlStatus extends AbstractControlStatus {\n constructor(cd) {\n super(cd);\n }\n static ɵfac = function NgControlStatus_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || NgControlStatus)(i0.ɵɵdirectiveInject(NgControl, 2));\n };\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: NgControlStatus,\n selectors: [[\"\", \"formControlName\", \"\"], [\"\", \"ngModel\", \"\"], [\"\", \"formControl\", \"\"]],\n hostVars: 14,\n hostBindings: function NgControlStatus_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵclassProp(\"ng-untouched\", ctx.isUntouched)(\"ng-touched\", ctx.isTouched)(\"ng-pristine\", ctx.isPristine)(\"ng-dirty\", ctx.isDirty)(\"ng-valid\", ctx.isValid)(\"ng-invalid\", ctx.isInvalid)(\"ng-pending\", ctx.isPending);\n }\n },\n standalone: false,\n features: [i0.ɵɵInheritDefinitionFeature]\n });\n }\n return NgControlStatus;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet NgControlStatusGroup = /*#__PURE__*/(() => {\n class NgControlStatusGroup extends AbstractControlStatus {\n constructor(cd) {\n super(cd);\n }\n static ɵfac = function NgControlStatusGroup_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || NgControlStatusGroup)(i0.ɵɵdirectiveInject(ControlContainer, 10));\n };\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: NgControlStatusGroup,\n selectors: [[\"\", \"formGroupName\", \"\"], [\"\", \"formArrayName\", \"\"], [\"\", \"ngModelGroup\", \"\"], [\"\", \"formGroup\", \"\"], [\"\", \"formArray\", \"\"], [\"form\", 3, \"ngNoForm\", \"\"], [\"\", \"ngForm\", \"\"]],\n hostVars: 16,\n hostBindings: function NgControlStatusGroup_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵclassProp(\"ng-untouched\", ctx.isUntouched)(\"ng-touched\", ctx.isTouched)(\"ng-pristine\", ctx.isPristine)(\"ng-dirty\", ctx.isDirty)(\"ng-valid\", ctx.isValid)(\"ng-invalid\", ctx.isInvalid)(\"ng-pending\", ctx.isPending)(\"ng-submitted\", ctx.isSubmitted);\n }\n },\n standalone: false,\n features: [i0.ɵɵInheritDefinitionFeature]\n });\n }\n return NgControlStatusGroup;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst formControlNameExample = `\n
\n \n
\n\n In your class:\n\n this.myGroup = new FormGroup({\n firstName: new FormControl()\n });`;\nconst formGroupNameExample = `\n
\n
\n \n
\n
\n\n In your class:\n\n this.myGroup = new FormGroup({\n person: new FormGroup({ firstName: new FormControl() })\n });`;\nconst formArrayNameExample = `\n
\n
\n
\n \n
\n
\n
\n\n In your class:\n\n this.cityArray = new FormArray([new FormControl('SF')]);\n this.myGroup = new FormGroup({\n cities: this.cityArray\n });`;\nconst ngModelGroupExample = `\n
\n
\n \n
\n
`;\nconst ngModelWithFormGroupExample = `\n
\n \n \n
\n`;\nconst VERSION = /* @__PURE__ */new Version('21.2.4');\nfunction controlParentException(nameOrIndex) {\n return new _RuntimeError(1050, `formControlName must be used with a parent formGroup or formArray directive. You'll want to add a formGroup/formArray\n directive and pass it an existing FormGroup/FormArray instance (you can create one in your class).\n\n ${describeFormControl(nameOrIndex)}\n\n Example:\n\n ${formControlNameExample}`);\n}\nfunction describeFormControl(nameOrIndex) {\n if (nameOrIndex == null || nameOrIndex === '') {\n return '';\n }\n const valueType = typeof nameOrIndex === 'string' ? 'name' : 'index';\n return `Affected Form Control ${valueType}: \"${nameOrIndex}\"`;\n}\nfunction ngModelGroupException() {\n return new _RuntimeError(1051, `formControlName cannot be used with an ngModelGroup parent. It is only compatible with parents\n that also have a \"form\" prefix: formGroupName, formArrayName, or formGroup.\n\n Option 1: Update the parent to be formGroupName (reactive form strategy)\n\n ${formGroupNameExample}\n\n Option 2: Use ngModel instead of formControlName (template-driven strategy)\n\n ${ngModelGroupExample}`);\n}\nfunction missingFormException() {\n return new _RuntimeError(1052, `formGroup expects a FormGroup instance. Please pass one in.\n\n Example:\n\n ${formControlNameExample}`);\n}\nfunction groupParentException() {\n return new _RuntimeError(1053, `formGroupName must be used with a parent formGroup directive. You'll want to add a formGroup\n directive and pass it an existing FormGroup instance (you can create one in your class).\n\n Example:\n\n ${formGroupNameExample}`);\n}\nfunction arrayParentException() {\n return new _RuntimeError(1054, `formArrayName must be used with a parent formGroup directive. You'll want to add a formGroup\n directive and pass it an existing FormGroup instance (you can create one in your class).\n\n Example:\n\n ${formArrayNameExample}`);\n}\nconst disabledAttrWarning = `\n It looks like you're using the disabled attribute with a reactive form directive. If you set disabled to true\n when you set up this control in your component class, the disabled attribute will actually be set in the DOM for\n you. We recommend using this approach to avoid 'changed after checked' errors.\n\n Example:\n // Specify the \\`disabled\\` property at control creation time:\n form = new FormGroup({\n first: new FormControl({value: 'Nancy', disabled: true}, Validators.required),\n last: new FormControl('Drew', Validators.required)\n });\n\n // Controls can also be enabled/disabled after creation:\n form.get('first')?.enable();\n form.get('last')?.disable();\n`;\nconst asyncValidatorsDroppedWithOptsWarning = `\n It looks like you're constructing using a FormControl with both an options argument and an\n async validators argument. Mixing these arguments will cause your async validators to be dropped.\n You should either put all your validators in the options object, or in separate validators\n arguments. For example:\n\n // Using validators arguments\n fc = new FormControl(42, Validators.required, myAsyncValidator);\n\n // Using AbstractControlOptions\n fc = new FormControl(42, {validators: Validators.required, asyncValidators: myAV});\n\n // Do NOT mix them: async validators will be dropped!\n fc = new FormControl(42, {validators: Validators.required}, /* Oops! */ myAsyncValidator);\n`;\nfunction ngModelWarning(directiveName) {\n const versionSubDomain = VERSION.major !== '0' ? `v${VERSION.major}.` : '';\n return `\n It looks like you're using ngModel on the same form field as ${directiveName}.\n Support for using the ngModel input property and ngModelChange event with\n reactive form directives has been deprecated in Angular v6 and will be removed\n in a future version of Angular.\n\n For more information on this, see our API docs here:\n https://${versionSubDomain}angular.dev/api/forms/${directiveName === 'formControl' ? 'FormControlDirective' : 'FormControlName'}\n `;\n}\nfunction describeKey(isFormGroup, key) {\n return isFormGroup ? `with name: '${key}'` : `at index: ${key}`;\n}\nfunction noControlsError(isFormGroup) {\n return `\n There are no form controls registered with this ${isFormGroup ? 'group' : 'array'} yet. If you're using ngModel,\n you may want to check next tick (e.g. use setTimeout).\n `;\n}\nfunction missingControlError(isFormGroup, key) {\n return `Cannot find form control ${describeKey(isFormGroup, key)}`;\n}\nfunction missingControlValueError(isFormGroup, key) {\n return `Must supply a value for form control ${describeKey(isFormGroup, key)}`;\n}\nconst VALID = 'VALID';\nconst INVALID = 'INVALID';\nconst PENDING = 'PENDING';\nconst DISABLED = 'DISABLED';\nclass ControlEvent {}\nclass ValueChangeEvent extends ControlEvent {\n value;\n source;\n constructor(value, source) {\n super();\n this.value = value;\n this.source = source;\n }\n}\nclass PristineChangeEvent extends ControlEvent {\n pristine;\n source;\n constructor(pristine, source) {\n super();\n this.pristine = pristine;\n this.source = source;\n }\n}\nclass TouchedChangeEvent extends ControlEvent {\n touched;\n source;\n constructor(touched, source) {\n super();\n this.touched = touched;\n this.source = source;\n }\n}\nclass StatusChangeEvent extends ControlEvent {\n status;\n source;\n constructor(status, source) {\n super();\n this.status = status;\n this.source = source;\n }\n}\nclass FormSubmittedEvent extends ControlEvent {\n source;\n constructor(source) {\n super();\n this.source = source;\n }\n}\nclass FormResetEvent extends ControlEvent {\n source;\n constructor(source) {\n super();\n this.source = source;\n }\n}\nfunction pickValidators(validatorOrOpts) {\n return (isOptionsObj(validatorOrOpts) ? validatorOrOpts.validators : validatorOrOpts) || null;\n}\nfunction coerceToValidator(validator) {\n return Array.isArray(validator) ? composeValidators(validator) : validator || null;\n}\nfunction pickAsyncValidators(asyncValidator, validatorOrOpts) {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n if (isOptionsObj(validatorOrOpts) && asyncValidator) {\n console.warn(asyncValidatorsDroppedWithOptsWarning);\n }\n }\n return (isOptionsObj(validatorOrOpts) ? validatorOrOpts.asyncValidators : asyncValidator) || null;\n}\nfunction coerceToAsyncValidator(asyncValidator) {\n return Array.isArray(asyncValidator) ? composeAsyncValidators(asyncValidator) : asyncValidator || null;\n}\nfunction isOptionsObj(validatorOrOpts) {\n return validatorOrOpts != null && !Array.isArray(validatorOrOpts) && typeof validatorOrOpts === 'object';\n}\nfunction assertControlPresent(parent, isGroup, key) {\n const controls = parent.controls;\n const collection = isGroup ? Object.keys(controls) : controls;\n if (!collection.length) {\n throw new _RuntimeError(1000, typeof ngDevMode === 'undefined' || ngDevMode ? noControlsError(isGroup) : '');\n }\n if (!controls[key]) {\n throw new _RuntimeError(1001, typeof ngDevMode === 'undefined' || ngDevMode ? missingControlError(isGroup, key) : '');\n }\n}\nfunction assertAllValuesPresent(control, isGroup, value) {\n control._forEachChild((_, key) => {\n if (value[key] === undefined) {\n throw new _RuntimeError(1002, typeof ngDevMode === 'undefined' || ngDevMode ? missingControlValueError(isGroup, key) : '');\n }\n });\n}\nclass AbstractControl {\n _pendingDirty = false;\n _hasOwnPendingAsyncValidator = null;\n _pendingTouched = false;\n _onCollectionChange = () => {};\n _updateOn;\n _parent = null;\n _asyncValidationSubscription;\n _composedValidatorFn;\n _composedAsyncValidatorFn;\n _rawValidators;\n _rawAsyncValidators;\n value;\n constructor(validators, asyncValidators) {\n this._assignValidators(validators);\n this._assignAsyncValidators(asyncValidators);\n }\n get validator() {\n return this._composedValidatorFn;\n }\n set validator(validatorFn) {\n this._rawValidators = this._composedValidatorFn = validatorFn;\n }\n get asyncValidator() {\n return this._composedAsyncValidatorFn;\n }\n set asyncValidator(asyncValidatorFn) {\n this._rawAsyncValidators = this._composedAsyncValidatorFn = asyncValidatorFn;\n }\n get parent() {\n return this._parent;\n }\n get status() {\n return untracked(this.statusReactive);\n }\n set status(v) {\n untracked(() => this.statusReactive.set(v));\n }\n _status = /*#__PURE__*/computed(() => this.statusReactive(), ...(ngDevMode ? [{\n debugName: \"_status\"\n }] : []));\n statusReactive = /*#__PURE__*/signal(undefined, ...(ngDevMode ? [{\n debugName: \"statusReactive\"\n }] : []));\n get valid() {\n return this.status === VALID;\n }\n get invalid() {\n return this.status === INVALID;\n }\n get pending() {\n return this.status == PENDING;\n }\n get disabled() {\n return this.status === DISABLED;\n }\n get enabled() {\n return this.status !== DISABLED;\n }\n errors;\n get pristine() {\n return untracked(this.pristineReactive);\n }\n set pristine(v) {\n untracked(() => this.pristineReactive.set(v));\n }\n _pristine = /*#__PURE__*/computed(() => this.pristineReactive(), ...(ngDevMode ? [{\n debugName: \"_pristine\"\n }] : []));\n pristineReactive = /*#__PURE__*/signal(true, ...(ngDevMode ? [{\n debugName: \"pristineReactive\"\n }] : []));\n get dirty() {\n return !this.pristine;\n }\n get touched() {\n return untracked(this.touchedReactive);\n }\n set touched(v) {\n untracked(() => this.touchedReactive.set(v));\n }\n _touched = /*#__PURE__*/computed(() => this.touchedReactive(), ...(ngDevMode ? [{\n debugName: \"_touched\"\n }] : []));\n touchedReactive = /*#__PURE__*/signal(false, ...(ngDevMode ? [{\n debugName: \"touchedReactive\"\n }] : []));\n get untouched() {\n return !this.touched;\n }\n _events = /*#__PURE__*/new Subject();\n events = /*#__PURE__*/this._events.asObservable();\n valueChanges;\n statusChanges;\n get updateOn() {\n return this._updateOn ? this._updateOn : this.parent ? this.parent.updateOn : 'change';\n }\n setValidators(validators) {\n this._assignValidators(validators);\n }\n setAsyncValidators(validators) {\n this._assignAsyncValidators(validators);\n }\n addValidators(validators) {\n this.setValidators(addValidators(validators, this._rawValidators));\n }\n addAsyncValidators(validators) {\n this.setAsyncValidators(addValidators(validators, this._rawAsyncValidators));\n }\n removeValidators(validators) {\n this.setValidators(removeValidators(validators, this._rawValidators));\n }\n removeAsyncValidators(validators) {\n this.setAsyncValidators(removeValidators(validators, this._rawAsyncValidators));\n }\n hasValidator(validator) {\n return hasValidator(this._rawValidators, validator);\n }\n hasAsyncValidator(validator) {\n return hasValidator(this._rawAsyncValidators, validator);\n }\n clearValidators() {\n this.validator = null;\n }\n clearAsyncValidators() {\n this.asyncValidator = null;\n }\n markAsTouched(opts = {}) {\n const changed = this.touched === false;\n this.touched = true;\n const sourceControl = opts.sourceControl ?? this;\n if (!opts.onlySelf) {\n this._parent?.markAsTouched({\n ...opts,\n sourceControl\n });\n }\n if (changed && opts.emitEvent !== false) {\n this._events.next(new TouchedChangeEvent(true, sourceControl));\n }\n }\n markAllAsDirty(opts = {}) {\n this.markAsDirty({\n onlySelf: true,\n emitEvent: opts.emitEvent,\n sourceControl: this\n });\n this._forEachChild(control => control.markAllAsDirty(opts));\n }\n markAllAsTouched(opts = {}) {\n this.markAsTouched({\n onlySelf: true,\n emitEvent: opts.emitEvent,\n sourceControl: this\n });\n this._forEachChild(control => control.markAllAsTouched(opts));\n }\n markAsUntouched(opts = {}) {\n const changed = this.touched === true;\n this.touched = false;\n this._pendingTouched = false;\n const sourceControl = opts.sourceControl ?? this;\n this._forEachChild(control => {\n control.markAsUntouched({\n onlySelf: true,\n emitEvent: opts.emitEvent,\n sourceControl\n });\n });\n if (!opts.onlySelf) {\n this._parent?._updateTouched(opts, sourceControl);\n }\n if (changed && opts.emitEvent !== false) {\n this._events.next(new TouchedChangeEvent(false, sourceControl));\n }\n }\n markAsDirty(opts = {}) {\n const changed = this.pristine === true;\n this.pristine = false;\n const sourceControl = opts.sourceControl ?? this;\n if (!opts.onlySelf) {\n this._parent?.markAsDirty({\n ...opts,\n sourceControl\n });\n }\n if (changed && opts.emitEvent !== false) {\n this._events.next(new PristineChangeEvent(false, sourceControl));\n }\n }\n markAsPristine(opts = {}) {\n const changed = this.pristine === false;\n this.pristine = true;\n this._pendingDirty = false;\n const sourceControl = opts.sourceControl ?? this;\n this._forEachChild(control => {\n control.markAsPristine({\n onlySelf: true,\n emitEvent: opts.emitEvent\n });\n });\n if (!opts.onlySelf) {\n this._parent?._updatePristine(opts, sourceControl);\n }\n if (changed && opts.emitEvent !== false) {\n this._events.next(new PristineChangeEvent(true, sourceControl));\n }\n }\n markAsPending(opts = {}) {\n this.status = PENDING;\n const sourceControl = opts.sourceControl ?? this;\n if (opts.emitEvent !== false) {\n this._events.next(new StatusChangeEvent(this.status, sourceControl));\n this.statusChanges.emit(this.status);\n }\n if (!opts.onlySelf) {\n this._parent?.markAsPending({\n ...opts,\n sourceControl\n });\n }\n }\n disable(opts = {}) {\n const skipPristineCheck = this._parentMarkedDirty(opts.onlySelf);\n this.status = DISABLED;\n this.errors = null;\n this._forEachChild(control => {\n control.disable({\n ...opts,\n onlySelf: true\n });\n });\n this._updateValue();\n const sourceControl = opts.sourceControl ?? this;\n if (opts.emitEvent !== false) {\n this._events.next(new ValueChangeEvent(this.value, sourceControl));\n this._events.next(new StatusChangeEvent(this.status, sourceControl));\n this.valueChanges.emit(this.value);\n this.statusChanges.emit(this.status);\n }\n this._updateAncestors({\n ...opts,\n skipPristineCheck\n }, this);\n this._onDisabledChange.forEach(changeFn => changeFn(true));\n }\n enable(opts = {}) {\n const skipPristineCheck = this._parentMarkedDirty(opts.onlySelf);\n this.status = VALID;\n this._forEachChild(control => {\n control.enable({\n ...opts,\n onlySelf: true\n });\n });\n this.updateValueAndValidity({\n onlySelf: true,\n emitEvent: opts.emitEvent\n });\n this._updateAncestors({\n ...opts,\n skipPristineCheck\n }, this);\n this._onDisabledChange.forEach(changeFn => changeFn(false));\n }\n _updateAncestors(opts, sourceControl) {\n if (!opts.onlySelf) {\n this._parent?.updateValueAndValidity(opts);\n if (!opts.skipPristineCheck) {\n this._parent?._updatePristine({}, sourceControl);\n }\n this._parent?._updateTouched({}, sourceControl);\n }\n }\n setParent(parent) {\n this._parent = parent;\n }\n getRawValue() {\n return this.value;\n }\n updateValueAndValidity(opts = {}) {\n this._setInitialStatus();\n this._updateValue();\n if (this.enabled) {\n const shouldHaveEmitted = this._cancelExistingSubscription();\n this.errors = this._runValidator();\n this.status = this._calculateStatus();\n if (this.status === VALID || this.status === PENDING) {\n this._runAsyncValidator(shouldHaveEmitted, opts.emitEvent);\n }\n }\n const sourceControl = opts.sourceControl ?? this;\n if (opts.emitEvent !== false) {\n this._events.next(new ValueChangeEvent(this.value, sourceControl));\n this._events.next(new StatusChangeEvent(this.status, sourceControl));\n this.valueChanges.emit(this.value);\n this.statusChanges.emit(this.status);\n }\n if (!opts.onlySelf) {\n this._parent?.updateValueAndValidity({\n ...opts,\n sourceControl\n });\n }\n }\n _updateTreeValidity(opts = {\n emitEvent: true\n }) {\n this._forEachChild(ctrl => ctrl._updateTreeValidity(opts));\n this.updateValueAndValidity({\n onlySelf: true,\n emitEvent: opts.emitEvent\n });\n }\n _setInitialStatus() {\n this.status = this._allControlsDisabled() ? DISABLED : VALID;\n }\n _runValidator() {\n return this.validator ? this.validator(this) : null;\n }\n _runAsyncValidator(shouldHaveEmitted, emitEvent) {\n if (this.asyncValidator) {\n this.status = PENDING;\n this._hasOwnPendingAsyncValidator = {\n emitEvent: emitEvent !== false,\n shouldHaveEmitted: shouldHaveEmitted !== false\n };\n const obs = toObservable(this.asyncValidator(this));\n this._asyncValidationSubscription = obs.subscribe(errors => {\n this._hasOwnPendingAsyncValidator = null;\n this.setErrors(errors, {\n emitEvent,\n shouldHaveEmitted\n });\n });\n }\n }\n _cancelExistingSubscription() {\n if (this._asyncValidationSubscription) {\n this._asyncValidationSubscription.unsubscribe();\n const shouldHaveEmitted = (this._hasOwnPendingAsyncValidator?.emitEvent || this._hasOwnPendingAsyncValidator?.shouldHaveEmitted) ?? false;\n this._hasOwnPendingAsyncValidator = null;\n return shouldHaveEmitted;\n }\n return false;\n }\n setErrors(errors, opts = {}) {\n this.errors = errors;\n this._updateControlsErrors(opts.emitEvent !== false, this, opts.shouldHaveEmitted);\n }\n get(path) {\n let currPath = path;\n if (currPath == null) return null;\n if (!Array.isArray(currPath)) currPath = currPath.split('.');\n if (currPath.length === 0) return null;\n return currPath.reduce((control, name) => control && control._find(name), this);\n }\n getError(errorCode, path) {\n const control = path ? this.get(path) : this;\n return control?.errors ? control.errors[errorCode] : null;\n }\n hasError(errorCode, path) {\n return !!this.getError(errorCode, path);\n }\n get root() {\n let x = this;\n while (x._parent) {\n x = x._parent;\n }\n return x;\n }\n _updateControlsErrors(emitEvent, changedControl, shouldHaveEmitted) {\n this.status = this._calculateStatus();\n if (emitEvent) {\n this.statusChanges.emit(this.status);\n }\n if (emitEvent || shouldHaveEmitted) {\n this._events.next(new StatusChangeEvent(this.status, changedControl));\n }\n if (this._parent) {\n this._parent._updateControlsErrors(emitEvent, changedControl, shouldHaveEmitted);\n }\n }\n _initObservables() {\n this.valueChanges = new EventEmitter();\n this.statusChanges = new EventEmitter();\n }\n _calculateStatus() {\n if (this._allControlsDisabled()) return DISABLED;\n if (this.errors) return INVALID;\n if (this._hasOwnPendingAsyncValidator || this._anyControlsHaveStatus(PENDING)) return PENDING;\n if (this._anyControlsHaveStatus(INVALID)) return INVALID;\n return VALID;\n }\n _anyControlsHaveStatus(status) {\n return this._anyControls(control => control.status === status);\n }\n _anyControlsDirty() {\n return this._anyControls(control => control.dirty);\n }\n _anyControlsTouched() {\n return this._anyControls(control => control.touched);\n }\n _updatePristine(opts, changedControl) {\n const newPristine = !this._anyControlsDirty();\n const changed = this.pristine !== newPristine;\n this.pristine = newPristine;\n if (!opts.onlySelf) {\n this._parent?._updatePristine(opts, changedControl);\n }\n if (changed) {\n this._events.next(new PristineChangeEvent(this.pristine, changedControl));\n }\n }\n _updateTouched(opts = {}, changedControl) {\n this.touched = this._anyControlsTouched();\n this._events.next(new TouchedChangeEvent(this.touched, changedControl));\n if (!opts.onlySelf) {\n this._parent?._updateTouched(opts, changedControl);\n }\n }\n _onDisabledChange = [];\n _registerOnCollectionChange(fn) {\n this._onCollectionChange = fn;\n }\n _setUpdateStrategy(opts) {\n if (isOptionsObj(opts) && opts.updateOn != null) {\n this._updateOn = opts.updateOn;\n }\n }\n _parentMarkedDirty(onlySelf) {\n return !onlySelf && !!this._parent?.dirty && !this._parent._anyControlsDirty();\n }\n _find(name) {\n return null;\n }\n _assignValidators(validators) {\n this._rawValidators = Array.isArray(validators) ? validators.slice() : validators;\n this._composedValidatorFn = coerceToValidator(this._rawValidators);\n }\n _assignAsyncValidators(validators) {\n this._rawAsyncValidators = Array.isArray(validators) ? validators.slice() : validators;\n this._composedAsyncValidatorFn = coerceToAsyncValidator(this._rawAsyncValidators);\n }\n}\nclass FormGroup extends AbstractControl {\n constructor(controls, validatorOrOpts, asyncValidator) {\n super(pickValidators(validatorOrOpts), pickAsyncValidators(asyncValidator, validatorOrOpts));\n (typeof ngDevMode === 'undefined' || ngDevMode) && validateFormGroupControls(controls);\n this.controls = controls;\n this._initObservables();\n this._setUpdateStrategy(validatorOrOpts);\n this._setUpControls();\n this.updateValueAndValidity({\n onlySelf: true,\n emitEvent: !!this.asyncValidator\n });\n }\n controls;\n registerControl(name, control) {\n if (this.controls[name]) return this.controls[name];\n this.controls[name] = control;\n control.setParent(this);\n control._registerOnCollectionChange(this._onCollectionChange);\n return control;\n }\n addControl(name, control, options = {}) {\n this.registerControl(name, control);\n this.updateValueAndValidity({\n emitEvent: options.emitEvent\n });\n this._onCollectionChange();\n }\n removeControl(name, options = {}) {\n if (this.controls[name]) this.controls[name]._registerOnCollectionChange(() => {});\n delete this.controls[name];\n this.updateValueAndValidity({\n emitEvent: options.emitEvent\n });\n this._onCollectionChange();\n }\n setControl(name, control, options = {}) {\n if (this.controls[name]) this.controls[name]._registerOnCollectionChange(() => {});\n delete this.controls[name];\n if (control) this.registerControl(name, control);\n this.updateValueAndValidity({\n emitEvent: options.emitEvent\n });\n this._onCollectionChange();\n }\n contains(controlName) {\n return this.controls.hasOwnProperty(controlName) && this.controls[controlName].enabled;\n }\n setValue(value, options = {}) {\n assertAllValuesPresent(this, true, value);\n Object.keys(value).forEach(name => {\n assertControlPresent(this, true, name);\n this.controls[name].setValue(value[name], {\n onlySelf: true,\n emitEvent: options.emitEvent\n });\n });\n this.updateValueAndValidity(options);\n }\n patchValue(value, options = {}) {\n if (value == null) return;\n Object.keys(value).forEach(name => {\n const control = this.controls[name];\n if (control) {\n control.patchValue(value[name], {\n onlySelf: true,\n emitEvent: options.emitEvent\n });\n }\n });\n this.updateValueAndValidity(options);\n }\n reset(value = {}, options = {}) {\n this._forEachChild((control, name) => {\n control.reset(value ? value[name] : null, {\n ...options,\n onlySelf: true\n });\n });\n this._updatePristine(options, this);\n this._updateTouched(options, this);\n this.updateValueAndValidity(options);\n if (options?.emitEvent !== false) {\n this._events.next(new FormResetEvent(this));\n }\n }\n getRawValue() {\n return this._reduceChildren({}, (acc, control, name) => {\n acc[name] = control.getRawValue();\n return acc;\n });\n }\n _syncPendingControls() {\n let subtreeUpdated = this._reduceChildren(false, (updated, child) => {\n return child._syncPendingControls() ? true : updated;\n });\n if (subtreeUpdated) this.updateValueAndValidity({\n onlySelf: true\n });\n return subtreeUpdated;\n }\n _forEachChild(cb) {\n Object.keys(this.controls).forEach(key => {\n const control = this.controls[key];\n control && cb(control, key);\n });\n }\n _setUpControls() {\n this._forEachChild(control => {\n control.setParent(this);\n control._registerOnCollectionChange(this._onCollectionChange);\n });\n }\n _updateValue() {\n this.value = this._reduceValue();\n }\n _anyControls(condition) {\n for (const [controlName, control] of Object.entries(this.controls)) {\n if (this.contains(controlName) && condition(control)) {\n return true;\n }\n }\n return false;\n }\n _reduceValue() {\n let acc = {};\n return this._reduceChildren(acc, (acc, control, name) => {\n if (control.enabled || this.disabled) {\n acc[name] = control.value;\n }\n return acc;\n });\n }\n _reduceChildren(initValue, fn) {\n let res = initValue;\n this._forEachChild((control, name) => {\n res = fn(res, control, name);\n });\n return res;\n }\n _allControlsDisabled() {\n for (const controlName of Object.keys(this.controls)) {\n if (this.controls[controlName].enabled) {\n return false;\n }\n }\n return Object.keys(this.controls).length > 0 || this.disabled;\n }\n _find(name) {\n return this.controls.hasOwnProperty(name) ? this.controls[name] : null;\n }\n}\nfunction validateFormGroupControls(controls) {\n const invalidKeys = Object.keys(controls).filter(key => key.includes('.'));\n if (invalidKeys.length > 0) {\n console.warn(`FormGroup keys cannot include \\`.\\`, please replace the keys for: ${invalidKeys.join(',')}.`);\n }\n}\nconst UntypedFormGroup = FormGroup;\nconst isFormGroup = control => control instanceof FormGroup;\nclass FormRecord extends FormGroup {}\nconst isFormRecord = control => control instanceof FormRecord;\nconst CALL_SET_DISABLED_STATE = /*#__PURE__*/new InjectionToken(typeof ngDevMode === 'undefined' || ngDevMode ? 'CallSetDisabledState' : '', {\n factory: () => setDisabledStateDefault\n});\nconst setDisabledStateDefault = 'always';\nfunction controlPath(name, parent) {\n return [...parent.path, name];\n}\nfunction setUpControl(control, dir, callSetDisabledState = setDisabledStateDefault) {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n if (!control) _throwError(dir, 'Cannot find control with');\n if (!dir.valueAccessor) _throwMissingValueAccessorError(dir);\n }\n setUpValidators(control, dir);\n dir.valueAccessor.writeValue(control.value);\n if (control.disabled || callSetDisabledState === 'always') {\n dir.valueAccessor.setDisabledState?.(control.disabled);\n }\n setUpViewChangePipeline(control, dir);\n setUpModelChangePipeline(control, dir);\n setUpBlurPipeline(control, dir);\n setUpDisabledChangeHandler(control, dir);\n}\nfunction cleanUpControl(control, dir, validateControlPresenceOnChange = true) {\n const noop = () => {\n if (validateControlPresenceOnChange && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n _noControlError(dir);\n }\n };\n dir?.valueAccessor?.registerOnChange(noop);\n dir?.valueAccessor?.registerOnTouched(noop);\n cleanUpValidators(control, dir);\n if (control) {\n dir._invokeOnDestroyCallbacks();\n control._registerOnCollectionChange(() => {});\n }\n}\nfunction registerOnValidatorChange(validators, onChange) {\n validators.forEach(validator => {\n if (validator.registerOnValidatorChange) validator.registerOnValidatorChange(onChange);\n });\n}\nfunction setUpDisabledChangeHandler(control, dir) {\n if (dir.valueAccessor.setDisabledState) {\n const onDisabledChange = isDisabled => {\n dir.valueAccessor.setDisabledState(isDisabled);\n };\n control.registerOnDisabledChange(onDisabledChange);\n dir._registerOnDestroy(() => {\n control._unregisterOnDisabledChange(onDisabledChange);\n });\n }\n}\nfunction setUpValidators(control, dir) {\n const validators = getControlValidators(control);\n if (dir.validator !== null) {\n control.setValidators(mergeValidators(validators, dir.validator));\n } else if (typeof validators === 'function') {\n control.setValidators([validators]);\n }\n const asyncValidators = getControlAsyncValidators(control);\n if (dir.asyncValidator !== null) {\n control.setAsyncValidators(mergeValidators(asyncValidators, dir.asyncValidator));\n } else if (typeof asyncValidators === 'function') {\n control.setAsyncValidators([asyncValidators]);\n }\n const onValidatorChange = () => control.updateValueAndValidity();\n registerOnValidatorChange(dir._rawValidators, onValidatorChange);\n registerOnValidatorChange(dir._rawAsyncValidators, onValidatorChange);\n}\nfunction cleanUpValidators(control, dir) {\n let isControlUpdated = false;\n if (control !== null) {\n if (dir.validator !== null) {\n const validators = getControlValidators(control);\n if (Array.isArray(validators) && validators.length > 0) {\n const updatedValidators = validators.filter(validator => validator !== dir.validator);\n if (updatedValidators.length !== validators.length) {\n isControlUpdated = true;\n control.setValidators(updatedValidators);\n }\n }\n }\n if (dir.asyncValidator !== null) {\n const asyncValidators = getControlAsyncValidators(control);\n if (Array.isArray(asyncValidators) && asyncValidators.length > 0) {\n const updatedAsyncValidators = asyncValidators.filter(asyncValidator => asyncValidator !== dir.asyncValidator);\n if (updatedAsyncValidators.length !== asyncValidators.length) {\n isControlUpdated = true;\n control.setAsyncValidators(updatedAsyncValidators);\n }\n }\n }\n }\n const noop = () => {};\n registerOnValidatorChange(dir._rawValidators, noop);\n registerOnValidatorChange(dir._rawAsyncValidators, noop);\n return isControlUpdated;\n}\nfunction setUpViewChangePipeline(control, dir) {\n dir.valueAccessor.registerOnChange(newValue => {\n control._pendingValue = newValue;\n control._pendingChange = true;\n control._pendingDirty = true;\n if (control.updateOn === 'change') updateControl(control, dir);\n });\n}\nfunction setUpBlurPipeline(control, dir) {\n dir.valueAccessor.registerOnTouched(() => {\n control._pendingTouched = true;\n if (control.updateOn === 'blur' && control._pendingChange) updateControl(control, dir);\n if (control.updateOn !== 'submit') control.markAsTouched();\n });\n}\nfunction updateControl(control, dir) {\n if (control._pendingDirty) control.markAsDirty();\n control.setValue(control._pendingValue, {\n emitModelToViewChange: false\n });\n dir.viewToModelUpdate(control._pendingValue);\n control._pendingChange = false;\n}\nfunction setUpModelChangePipeline(control, dir) {\n const onChange = (newValue, emitModelEvent) => {\n dir.valueAccessor.writeValue(newValue);\n if (emitModelEvent) dir.viewToModelUpdate(newValue);\n };\n control.registerOnChange(onChange);\n dir._registerOnDestroy(() => {\n control._unregisterOnChange(onChange);\n });\n}\nfunction setUpFormContainer(control, dir) {\n if (control == null && (typeof ngDevMode === 'undefined' || ngDevMode)) _throwError(dir, 'Cannot find control with');\n setUpValidators(control, dir);\n}\nfunction cleanUpFormContainer(control, dir) {\n return cleanUpValidators(control, dir);\n}\nfunction _noControlError(dir) {\n return _throwError(dir, 'There is no FormControl instance attached to form control element with');\n}\nfunction _throwError(dir, message) {\n const messageEnd = _describeControlLocation(dir);\n throw new Error(`${message} ${messageEnd}`);\n}\nfunction _describeControlLocation(dir) {\n const path = dir.path;\n if (path && path.length > 1) return `path: '${path.join(' -> ')}'`;\n if (path?.[0]) return `name: '${path}'`;\n return 'unspecified name attribute';\n}\nfunction _throwMissingValueAccessorError(dir) {\n const loc = _describeControlLocation(dir);\n throw new _RuntimeError(-1203, `No value accessor for form control ${loc}.`);\n}\nfunction _throwInvalidValueAccessorError(dir) {\n const loc = _describeControlLocation(dir);\n throw new _RuntimeError(1200, `Value accessor was not provided as an array for form control with ${loc}. ` + `Check that the \\`NG_VALUE_ACCESSOR\\` token is configured as a \\`multi: true\\` provider.`);\n}\nfunction isPropertyUpdated(changes, viewModel) {\n if (!changes.hasOwnProperty('model')) return false;\n const change = changes['model'];\n if (change.isFirstChange()) return true;\n return !Object.is(viewModel, change.currentValue);\n}\nfunction isBuiltInAccessor(valueAccessor) {\n return Object.getPrototypeOf(valueAccessor.constructor) === BuiltInControlValueAccessor;\n}\nfunction syncPendingControls(form, directives) {\n form._syncPendingControls();\n directives.forEach(dir => {\n const control = dir.control;\n if (control.updateOn === 'submit' && control._pendingChange) {\n dir.viewToModelUpdate(control._pendingValue);\n control._pendingChange = false;\n }\n });\n}\nfunction selectValueAccessor(dir, valueAccessors) {\n if (!valueAccessors) return null;\n if (!Array.isArray(valueAccessors) && (typeof ngDevMode === 'undefined' || ngDevMode)) _throwInvalidValueAccessorError(dir);\n let defaultAccessor = undefined;\n let builtinAccessor = undefined;\n let customAccessor = undefined;\n valueAccessors.forEach(v => {\n if (v.constructor === DefaultValueAccessor) {\n defaultAccessor = v;\n } else if (isBuiltInAccessor(v)) {\n if (builtinAccessor && (typeof ngDevMode === 'undefined' || ngDevMode)) _throwError(dir, 'More than one built-in value accessor matches form control with');\n builtinAccessor = v;\n } else {\n if (customAccessor && (typeof ngDevMode === 'undefined' || ngDevMode)) _throwError(dir, 'More than one custom value accessor matches form control with');\n customAccessor = v;\n }\n });\n if (customAccessor) return customAccessor;\n if (builtinAccessor) return builtinAccessor;\n if (defaultAccessor) return defaultAccessor;\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n _throwError(dir, 'No valid value accessor for form control with');\n }\n return null;\n}\nfunction removeListItem$1(list, el) {\n const index = list.indexOf(el);\n if (index > -1) list.splice(index, 1);\n}\nfunction _ngModelWarning(name, type, instance, warningConfig) {\n if (warningConfig === 'never') return;\n if ((warningConfig === null || warningConfig === 'once') && !type._ngModelWarningSentOnce || warningConfig === 'always' && !instance._ngModelWarningSent) {\n console.warn(ngModelWarning(name));\n type._ngModelWarningSentOnce = true;\n instance._ngModelWarningSent = true;\n }\n}\nconst formDirectiveProvider$2 = {\n provide: ControlContainer,\n useExisting: /*#__PURE__*/forwardRef(() => NgForm)\n};\nconst resolvedPromise$1 = /*#__PURE__*/(() => Promise.resolve())();\nlet NgForm = /*#__PURE__*/(() => {\n class NgForm extends ControlContainer {\n callSetDisabledState;\n get submitted() {\n return untracked(this.submittedReactive);\n }\n _submitted = computed(() => this.submittedReactive(), ...(ngDevMode ? [{\n debugName: \"_submitted\"\n }] : []));\n submittedReactive = signal(false, ...(ngDevMode ? [{\n debugName: \"submittedReactive\"\n }] : []));\n _directives = new Set();\n form;\n ngSubmit = new EventEmitter();\n options;\n constructor(validators, asyncValidators, callSetDisabledState) {\n super();\n this.callSetDisabledState = callSetDisabledState;\n this.form = new FormGroup({}, composeValidators(validators), composeAsyncValidators(asyncValidators));\n }\n ngAfterViewInit() {\n this._setUpdateStrategy();\n }\n get formDirective() {\n return this;\n }\n get control() {\n return this.form;\n }\n get path() {\n return [];\n }\n get controls() {\n return this.form.controls;\n }\n addControl(dir) {\n resolvedPromise$1.then(() => {\n const container = this._findContainer(dir.path);\n dir.control = container.registerControl(dir.name, dir.control);\n setUpControl(dir.control, dir, this.callSetDisabledState);\n dir.control.updateValueAndValidity({\n emitEvent: false\n });\n this._directives.add(dir);\n });\n }\n getControl(dir) {\n return this.form.get(dir.path);\n }\n removeControl(dir) {\n resolvedPromise$1.then(() => {\n const container = this._findContainer(dir.path);\n container?.removeControl(dir.name);\n this._directives.delete(dir);\n });\n }\n addFormGroup(dir) {\n resolvedPromise$1.then(() => {\n const container = this._findContainer(dir.path);\n const group = new FormGroup({});\n setUpFormContainer(group, dir);\n container.registerControl(dir.name, group);\n group.updateValueAndValidity({\n emitEvent: false\n });\n });\n }\n removeFormGroup(dir) {\n resolvedPromise$1.then(() => {\n const container = this._findContainer(dir.path);\n container?.removeControl?.(dir.name);\n });\n }\n getFormGroup(dir) {\n return this.form.get(dir.path);\n }\n updateModel(dir, value) {\n resolvedPromise$1.then(() => {\n const ctrl = this.form.get(dir.path);\n ctrl.setValue(value);\n });\n }\n setValue(value) {\n this.control.setValue(value);\n }\n onSubmit($event) {\n this.submittedReactive.set(true);\n syncPendingControls(this.form, this._directives);\n this.ngSubmit.emit($event);\n this.form._events.next(new FormSubmittedEvent(this.control));\n return $event?.target?.method === 'dialog';\n }\n onReset() {\n this.resetForm();\n }\n resetForm(value = undefined) {\n this.form.reset(value);\n this.submittedReactive.set(false);\n }\n _setUpdateStrategy() {\n if (this.options && this.options.updateOn != null) {\n this.form._updateOn = this.options.updateOn;\n }\n }\n _findContainer(path) {\n path.pop();\n return path.length ? this.form.get(path) : this.form;\n }\n static ɵfac = function NgForm_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || NgForm)(i0.ɵɵdirectiveInject(NG_VALIDATORS, 10), i0.ɵɵdirectiveInject(NG_ASYNC_VALIDATORS, 10), i0.ɵɵdirectiveInject(CALL_SET_DISABLED_STATE, 8));\n };\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: NgForm,\n selectors: [[\"form\", 3, \"ngNoForm\", \"\", 3, \"formGroup\", \"\", 3, \"formArray\", \"\"], [\"ng-form\"], [\"\", \"ngForm\", \"\"]],\n hostBindings: function NgForm_HostBindings(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵlistener(\"submit\", function NgForm_submit_HostBindingHandler($event) {\n return ctx.onSubmit($event);\n })(\"reset\", function NgForm_reset_HostBindingHandler() {\n return ctx.onReset();\n });\n }\n },\n inputs: {\n options: [0, \"ngFormOptions\", \"options\"]\n },\n outputs: {\n ngSubmit: \"ngSubmit\"\n },\n exportAs: [\"ngForm\"],\n standalone: false,\n features: [i0.ɵɵProvidersFeature([formDirectiveProvider$2]), i0.ɵɵInheritDefinitionFeature]\n });\n }\n return NgForm;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nfunction removeListItem(list, el) {\n const index = list.indexOf(el);\n if (index > -1) list.splice(index, 1);\n}\nfunction isFormControlState(formState) {\n return typeof formState === 'object' && formState !== null && Object.keys(formState).length === 2 && 'value' in formState && 'disabled' in formState;\n}\nconst FormControl = class FormControl extends AbstractControl {\n defaultValue = null;\n _onChange = [];\n _pendingValue;\n _pendingChange = false;\n constructor(formState = null, validatorOrOpts, asyncValidator) {\n super(pickValidators(validatorOrOpts), pickAsyncValidators(asyncValidator, validatorOrOpts));\n this._applyFormState(formState);\n this._setUpdateStrategy(validatorOrOpts);\n this._initObservables();\n this.updateValueAndValidity({\n onlySelf: true,\n emitEvent: !!this.asyncValidator\n });\n if (isOptionsObj(validatorOrOpts) && (validatorOrOpts.nonNullable || validatorOrOpts.initialValueIsDefault)) {\n if (isFormControlState(formState)) {\n this.defaultValue = formState.value;\n } else {\n this.defaultValue = formState;\n }\n }\n }\n setValue(value, options = {}) {\n this.value = this._pendingValue = value;\n if (this._onChange.length && options.emitModelToViewChange !== false) {\n this._onChange.forEach(changeFn => changeFn(this.value, options.emitViewToModelChange !== false));\n }\n this.updateValueAndValidity(options);\n }\n patchValue(value, options = {}) {\n this.setValue(value, options);\n }\n reset(formState = this.defaultValue, options = {}) {\n this._applyFormState(formState);\n this.markAsPristine(options);\n this.markAsUntouched(options);\n this.setValue(this.value, options);\n if (options.overwriteDefaultValue) {\n this.defaultValue = this.value;\n }\n this._pendingChange = false;\n if (options?.emitEvent !== false) {\n this._events.next(new FormResetEvent(this));\n }\n }\n _updateValue() {}\n _anyControls(condition) {\n return false;\n }\n _allControlsDisabled() {\n return this.disabled;\n }\n registerOnChange(fn) {\n this._onChange.push(fn);\n }\n _unregisterOnChange(fn) {\n removeListItem(this._onChange, fn);\n }\n registerOnDisabledChange(fn) {\n this._onDisabledChange.push(fn);\n }\n _unregisterOnDisabledChange(fn) {\n removeListItem(this._onDisabledChange, fn);\n }\n _forEachChild(cb) {}\n _syncPendingControls() {\n if (this.updateOn === 'submit') {\n if (this._pendingDirty) this.markAsDirty();\n if (this._pendingTouched) this.markAsTouched();\n if (this._pendingChange) {\n this.setValue(this._pendingValue, {\n onlySelf: true,\n emitModelToViewChange: false\n });\n return true;\n }\n }\n return false;\n }\n _applyFormState(formState) {\n if (isFormControlState(formState)) {\n this.value = this._pendingValue = formState.value;\n formState.disabled ? this.disable({\n onlySelf: true,\n emitEvent: false\n }) : this.enable({\n onlySelf: true,\n emitEvent: false\n });\n } else {\n this.value = this._pendingValue = formState;\n }\n }\n};\nconst UntypedFormControl = FormControl;\nconst isFormControl = control => control instanceof FormControl;\nlet AbstractFormGroupDirective = /*#__PURE__*/(() => {\n class AbstractFormGroupDirective extends ControlContainer {\n _parent;\n ngOnInit() {\n this._checkParentType();\n this.formDirective.addFormGroup(this);\n }\n ngOnDestroy() {\n this.formDirective?.removeFormGroup(this);\n }\n get control() {\n return this.formDirective.getFormGroup(this);\n }\n get path() {\n return controlPath(this.name == null ? this.name : this.name.toString(), this._parent);\n }\n get formDirective() {\n return this._parent ? this._parent.formDirective : null;\n }\n _checkParentType() {}\n static ɵfac = /* @__PURE__ */(() => {\n let ɵAbstractFormGroupDirective_BaseFactory;\n return function AbstractFormGroupDirective_Factory(__ngFactoryType__) {\n return (ɵAbstractFormGroupDirective_BaseFactory || (ɵAbstractFormGroupDirective_BaseFactory = i0.ɵɵgetInheritedFactory(AbstractFormGroupDirective)))(__ngFactoryType__ || AbstractFormGroupDirective);\n };\n })();\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: AbstractFormGroupDirective,\n standalone: false,\n features: [i0.ɵɵInheritDefinitionFeature]\n });\n }\n return AbstractFormGroupDirective;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nfunction modelParentException() {\n return new _RuntimeError(1350, `\n ngModel cannot be used to register form controls with a parent formGroup directive. Try using\n formGroup's partner directive \"formControlName\" instead. Example:\n\n ${formControlNameExample}\n\n Or, if you'd like to avoid registering this form control, indicate that it's standalone in ngModelOptions:\n\n Example:\n\n ${ngModelWithFormGroupExample}`);\n}\nfunction formGroupNameException() {\n return new _RuntimeError(1351, `\n ngModel cannot be used to register form controls with a parent formGroupName or formArrayName directive.\n\n Option 1: Use formControlName instead of ngModel (reactive strategy):\n\n ${formGroupNameExample}\n\n Option 2: Update ngModel's parent be ngModelGroup (template-driven strategy):\n\n ${ngModelGroupExample}`);\n}\nfunction missingNameException() {\n return new _RuntimeError(1352, `If ngModel is used within a form tag, either the name attribute must be set or the form\n control must be defined as 'standalone' in ngModelOptions.\n\n Example 1: \n Example 2: `);\n}\nfunction modelGroupParentException() {\n return new _RuntimeError(1353, `\n ngModelGroup cannot be used with a parent formGroup directive.\n\n Option 1: Use formGroupName instead of ngModelGroup (reactive strategy):\n\n ${formGroupNameExample}\n\n Option 2: Use a regular form tag instead of the formGroup directive (template-driven strategy):\n\n ${ngModelGroupExample}`);\n}\nconst modelGroupProvider = {\n provide: ControlContainer,\n useExisting: /*#__PURE__*/forwardRef(() => NgModelGroup)\n};\nlet NgModelGroup = /*#__PURE__*/(() => {\n class NgModelGroup extends AbstractFormGroupDirective {\n name = '';\n constructor(parent, validators, asyncValidators) {\n super();\n this._parent = parent;\n this._setValidators(validators);\n this._setAsyncValidators(asyncValidators);\n }\n _checkParentType() {\n if (!(this._parent instanceof NgModelGroup) && !(this._parent instanceof NgForm) && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw modelGroupParentException();\n }\n }\n static ɵfac = function NgModelGroup_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || NgModelGroup)(i0.ɵɵdirectiveInject(ControlContainer, 5), i0.ɵɵdirectiveInject(NG_VALIDATORS, 10), i0.ɵɵdirectiveInject(NG_ASYNC_VALIDATORS, 10));\n };\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: NgModelGroup,\n selectors: [[\"\", \"ngModelGroup\", \"\"]],\n inputs: {\n name: [0, \"ngModelGroup\", \"name\"]\n },\n exportAs: [\"ngModelGroup\"],\n standalone: false,\n features: [i0.ɵɵProvidersFeature([modelGroupProvider]), i0.ɵɵInheritDefinitionFeature]\n });\n }\n return NgModelGroup;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst formControlBinding$1 = {\n provide: NgControl,\n useExisting: /*#__PURE__*/forwardRef(() => NgModel)\n};\nconst resolvedPromise = /*#__PURE__*/(() => Promise.resolve())();\nlet NgModel = /*#__PURE__*/(() => {\n class NgModel extends NgControl {\n _changeDetectorRef;\n callSetDisabledState;\n control = new FormControl();\n static ngAcceptInputType_isDisabled;\n _registered = false;\n viewModel;\n name = '';\n isDisabled;\n model;\n options;\n update = new EventEmitter();\n constructor(parent, validators, asyncValidators, valueAccessors, _changeDetectorRef, callSetDisabledState) {\n super();\n this._changeDetectorRef = _changeDetectorRef;\n this.callSetDisabledState = callSetDisabledState;\n this._parent = parent;\n this._setValidators(validators);\n this._setAsyncValidators(asyncValidators);\n this.valueAccessor = selectValueAccessor(this, valueAccessors);\n }\n ngOnChanges(changes) {\n this._checkForErrors();\n if (!this._registered || 'name' in changes) {\n if (this._registered) {\n this._checkName();\n if (this.formDirective) {\n const oldName = changes['name'].previousValue;\n this.formDirective.removeControl({\n name: oldName,\n path: this._getPath(oldName)\n });\n }\n }\n this._setUpControl();\n }\n if ('isDisabled' in changes) {\n this._updateDisabled(changes);\n }\n if (isPropertyUpdated(changes, this.viewModel)) {\n this._updateValue(this.model);\n this.viewModel = this.model;\n }\n }\n ngOnDestroy() {\n this.formDirective?.removeControl(this);\n }\n get path() {\n return this._getPath(this.name);\n }\n get formDirective() {\n return this._parent ? this._parent.formDirective : null;\n }\n viewToModelUpdate(newValue) {\n this.viewModel = newValue;\n this.update.emit(newValue);\n }\n _setUpControl() {\n this._setUpdateStrategy();\n this._isStandalone() ? this._setUpStandalone() : this.formDirective.addControl(this);\n this._registered = true;\n }\n _setUpdateStrategy() {\n if (this.options && this.options.updateOn != null) {\n this.control._updateOn = this.options.updateOn;\n }\n }\n _isStandalone() {\n return !this._parent || !!(this.options && this.options.standalone);\n }\n _setUpStandalone() {\n setUpControl(this.control, this, this.callSetDisabledState);\n this.control.updateValueAndValidity({\n emitEvent: false\n });\n }\n _checkForErrors() {\n if ((typeof ngDevMode === 'undefined' || ngDevMode) && !this._isStandalone()) {\n checkParentType$1(this._parent);\n }\n this._checkName();\n }\n _checkName() {\n if (this.options && this.options.name) this.name = this.options.name;\n if (!this._isStandalone() && !this.name && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw missingNameException();\n }\n }\n _updateValue(value) {\n resolvedPromise.then(() => {\n this.control.setValue(value, {\n emitViewToModelChange: false\n });\n this._changeDetectorRef?.markForCheck();\n });\n }\n _updateDisabled(changes) {\n const disabledValue = changes['isDisabled'].currentValue;\n const isDisabled = disabledValue !== 0 && booleanAttribute(disabledValue);\n resolvedPromise.then(() => {\n if (isDisabled && !this.control.disabled) {\n this.control.disable();\n } else if (!isDisabled && this.control.disabled) {\n this.control.enable();\n }\n this._changeDetectorRef?.markForCheck();\n });\n }\n _getPath(controlName) {\n return this._parent ? controlPath(controlName, this._parent) : [controlName];\n }\n static ɵfac = function NgModel_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || NgModel)(i0.ɵɵdirectiveInject(ControlContainer, 9), i0.ɵɵdirectiveInject(NG_VALIDATORS, 10), i0.ɵɵdirectiveInject(NG_ASYNC_VALIDATORS, 10), i0.ɵɵdirectiveInject(NG_VALUE_ACCESSOR, 10), i0.ɵɵdirectiveInject(ChangeDetectorRef, 8), i0.ɵɵdirectiveInject(CALL_SET_DISABLED_STATE, 8));\n };\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: NgModel,\n selectors: [[\"\", \"ngModel\", \"\", 3, \"formControlName\", \"\", 3, \"formControl\", \"\"]],\n inputs: {\n name: \"name\",\n isDisabled: [0, \"disabled\", \"isDisabled\"],\n model: [0, \"ngModel\", \"model\"],\n options: [0, \"ngModelOptions\", \"options\"]\n },\n outputs: {\n update: \"ngModelChange\"\n },\n exportAs: [\"ngModel\"],\n standalone: false,\n features: [i0.ɵɵProvidersFeature([formControlBinding$1]), i0.ɵɵInheritDefinitionFeature, i0.ɵɵNgOnChangesFeature]\n });\n }\n return NgModel;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nfunction checkParentType$1(parent) {\n if (!(parent instanceof NgModelGroup) && parent instanceof AbstractFormGroupDirective) {\n throw formGroupNameException();\n } else if (!(parent instanceof NgModelGroup) && !(parent instanceof NgForm)) {\n throw modelParentException();\n }\n}\nlet ɵNgNoValidate = /*#__PURE__*/(() => {\n class ɵNgNoValidate {\n static ɵfac = function ɵNgNoValidate_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || ɵNgNoValidate)();\n };\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: ɵNgNoValidate,\n selectors: [[\"form\", 3, \"ngNoForm\", \"\", 3, \"ngNativeValidate\", \"\"]],\n hostAttrs: [\"novalidate\", \"\"],\n standalone: false\n });\n }\n return ɵNgNoValidate;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst NUMBER_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: /*#__PURE__*/forwardRef(() => NumberValueAccessor),\n multi: true\n};\nlet NumberValueAccessor = /*#__PURE__*/(() => {\n class NumberValueAccessor extends BuiltInControlValueAccessor {\n writeValue(value) {\n const normalizedValue = value == null ? '' : value;\n this.setProperty('value', normalizedValue);\n }\n registerOnChange(fn) {\n this.onChange = value => {\n fn(value == '' ? null : parseFloat(value));\n };\n }\n static ɵfac = /* @__PURE__ */(() => {\n let ɵNumberValueAccessor_BaseFactory;\n return function NumberValueAccessor_Factory(__ngFactoryType__) {\n return (ɵNumberValueAccessor_BaseFactory || (ɵNumberValueAccessor_BaseFactory = i0.ɵɵgetInheritedFactory(NumberValueAccessor)))(__ngFactoryType__ || NumberValueAccessor);\n };\n })();\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: NumberValueAccessor,\n selectors: [[\"input\", \"type\", \"number\", \"formControlName\", \"\"], [\"input\", \"type\", \"number\", \"formControl\", \"\"], [\"input\", \"type\", \"number\", \"ngModel\", \"\"]],\n hostBindings: function NumberValueAccessor_HostBindings(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵlistener(\"input\", function NumberValueAccessor_input_HostBindingHandler($event) {\n return ctx.onChange($event.target.value);\n })(\"blur\", function NumberValueAccessor_blur_HostBindingHandler() {\n return ctx.onTouched();\n });\n }\n },\n standalone: false,\n features: [i0.ɵɵProvidersFeature([NUMBER_VALUE_ACCESSOR]), i0.ɵɵInheritDefinitionFeature]\n });\n }\n return NumberValueAccessor;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst RADIO_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: /*#__PURE__*/forwardRef(() => RadioControlValueAccessor),\n multi: true\n};\nfunction throwNameError() {\n throw new _RuntimeError(1202, `\n If you define both a name and a formControlName attribute on your radio button, their values\n must match. Ex: \n `);\n}\nlet RadioControlRegistry = /*#__PURE__*/(() => {\n class RadioControlRegistry {\n _accessors = [];\n add(control, accessor) {\n this._accessors.push([control, accessor]);\n }\n remove(accessor) {\n for (let i = this._accessors.length - 1; i >= 0; --i) {\n if (this._accessors[i][1] === accessor) {\n this._accessors.splice(i, 1);\n return;\n }\n }\n }\n select(accessor) {\n this._accessors.forEach(c => {\n if (this._isSameGroup(c, accessor) && c[1] !== accessor) {\n c[1].fireUncheck(accessor.value);\n }\n });\n }\n _isSameGroup(controlPair, accessor) {\n if (!controlPair[0].control) return false;\n return controlPair[0]._parent === accessor._control._parent && controlPair[1].name === accessor.name;\n }\n static ɵfac = function RadioControlRegistry_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || RadioControlRegistry)();\n };\n static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: RadioControlRegistry,\n factory: RadioControlRegistry.ɵfac,\n providedIn: 'root'\n });\n }\n return RadioControlRegistry;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet RadioControlValueAccessor = /*#__PURE__*/(() => {\n class RadioControlValueAccessor extends BuiltInControlValueAccessor {\n _registry;\n _injector;\n _state;\n _control;\n _fn;\n setDisabledStateFired = false;\n onChange = () => {};\n name;\n formControlName;\n value;\n callSetDisabledState = inject(CALL_SET_DISABLED_STATE, {\n optional: true\n }) ?? setDisabledStateDefault;\n constructor(renderer, elementRef, _registry, _injector) {\n super(renderer, elementRef);\n this._registry = _registry;\n this._injector = _injector;\n }\n ngOnInit() {\n this._control = this._injector.get(NgControl);\n this._checkName();\n this._registry.add(this._control, this);\n }\n ngOnDestroy() {\n this._registry.remove(this);\n }\n writeValue(value) {\n this._state = value === this.value;\n this.setProperty('checked', this._state);\n }\n registerOnChange(fn) {\n this._fn = fn;\n this.onChange = () => {\n fn(this.value);\n this._registry.select(this);\n };\n }\n setDisabledState(isDisabled) {\n if (this.setDisabledStateFired || isDisabled || this.callSetDisabledState === 'whenDisabledForLegacyCode') {\n this.setProperty('disabled', isDisabled);\n }\n this.setDisabledStateFired = true;\n }\n fireUncheck(value) {\n this.writeValue(value);\n }\n _checkName() {\n if (this.name && this.formControlName && this.name !== this.formControlName && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throwNameError();\n }\n if (!this.name && this.formControlName) this.name = this.formControlName;\n }\n static ɵfac = function RadioControlValueAccessor_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || RadioControlValueAccessor)(i0.ɵɵdirectiveInject(i0.Renderer2), i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(RadioControlRegistry), i0.ɵɵdirectiveInject(i0.Injector));\n };\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: RadioControlValueAccessor,\n selectors: [[\"input\", \"type\", \"radio\", \"formControlName\", \"\"], [\"input\", \"type\", \"radio\", \"formControl\", \"\"], [\"input\", \"type\", \"radio\", \"ngModel\", \"\"]],\n hostBindings: function RadioControlValueAccessor_HostBindings(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵlistener(\"change\", function RadioControlValueAccessor_change_HostBindingHandler() {\n return ctx.onChange();\n })(\"blur\", function RadioControlValueAccessor_blur_HostBindingHandler() {\n return ctx.onTouched();\n });\n }\n },\n inputs: {\n name: \"name\",\n formControlName: \"formControlName\",\n value: \"value\"\n },\n standalone: false,\n features: [i0.ɵɵProvidersFeature([RADIO_VALUE_ACCESSOR]), i0.ɵɵInheritDefinitionFeature]\n });\n }\n return RadioControlValueAccessor;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst RANGE_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: /*#__PURE__*/forwardRef(() => RangeValueAccessor),\n multi: true\n};\nlet RangeValueAccessor = /*#__PURE__*/(() => {\n class RangeValueAccessor extends BuiltInControlValueAccessor {\n writeValue(value) {\n this.setProperty('value', parseFloat(value));\n }\n registerOnChange(fn) {\n this.onChange = value => {\n fn(value == '' ? null : parseFloat(value));\n };\n }\n static ɵfac = /* @__PURE__ */(() => {\n let ɵRangeValueAccessor_BaseFactory;\n return function RangeValueAccessor_Factory(__ngFactoryType__) {\n return (ɵRangeValueAccessor_BaseFactory || (ɵRangeValueAccessor_BaseFactory = i0.ɵɵgetInheritedFactory(RangeValueAccessor)))(__ngFactoryType__ || RangeValueAccessor);\n };\n })();\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: RangeValueAccessor,\n selectors: [[\"input\", \"type\", \"range\", \"formControlName\", \"\"], [\"input\", \"type\", \"range\", \"formControl\", \"\"], [\"input\", \"type\", \"range\", \"ngModel\", \"\"]],\n hostBindings: function RangeValueAccessor_HostBindings(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵlistener(\"change\", function RangeValueAccessor_change_HostBindingHandler($event) {\n return ctx.onChange($event.target.value);\n })(\"input\", function RangeValueAccessor_input_HostBindingHandler($event) {\n return ctx.onChange($event.target.value);\n })(\"blur\", function RangeValueAccessor_blur_HostBindingHandler() {\n return ctx.onTouched();\n });\n }\n },\n standalone: false,\n features: [i0.ɵɵProvidersFeature([RANGE_VALUE_ACCESSOR]), i0.ɵɵInheritDefinitionFeature]\n });\n }\n return RangeValueAccessor;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nclass FormArray extends AbstractControl {\n constructor(controls, validatorOrOpts, asyncValidator) {\n super(pickValidators(validatorOrOpts), pickAsyncValidators(asyncValidator, validatorOrOpts));\n this.controls = controls;\n this._initObservables();\n this._setUpdateStrategy(validatorOrOpts);\n this._setUpControls();\n this.updateValueAndValidity({\n onlySelf: true,\n emitEvent: !!this.asyncValidator\n });\n }\n controls;\n at(index) {\n return this.controls[this._adjustIndex(index)];\n }\n push(control, options = {}) {\n if (Array.isArray(control)) {\n control.forEach(ctrl => {\n this.controls.push(ctrl);\n this._registerControl(ctrl);\n });\n } else {\n this.controls.push(control);\n this._registerControl(control);\n }\n this.updateValueAndValidity({\n emitEvent: options.emitEvent\n });\n this._onCollectionChange();\n }\n insert(index, control, options = {}) {\n this.controls.splice(index, 0, control);\n this._registerControl(control);\n this.updateValueAndValidity({\n emitEvent: options.emitEvent\n });\n }\n removeAt(index, options = {}) {\n let adjustedIndex = this._adjustIndex(index);\n if (adjustedIndex < 0) adjustedIndex = 0;\n if (this.controls[adjustedIndex]) this.controls[adjustedIndex]._registerOnCollectionChange(() => {});\n this.controls.splice(adjustedIndex, 1);\n this.updateValueAndValidity({\n emitEvent: options.emitEvent\n });\n }\n setControl(index, control, options = {}) {\n let adjustedIndex = this._adjustIndex(index);\n if (adjustedIndex < 0) adjustedIndex = 0;\n if (this.controls[adjustedIndex]) this.controls[adjustedIndex]._registerOnCollectionChange(() => {});\n this.controls.splice(adjustedIndex, 1);\n if (control) {\n this.controls.splice(adjustedIndex, 0, control);\n this._registerControl(control);\n }\n this.updateValueAndValidity({\n emitEvent: options.emitEvent\n });\n this._onCollectionChange();\n }\n get length() {\n return this.controls.length;\n }\n setValue(value, options = {}) {\n assertAllValuesPresent(this, false, value);\n value.forEach((newValue, index) => {\n assertControlPresent(this, false, index);\n this.at(index).setValue(newValue, {\n onlySelf: true,\n emitEvent: options.emitEvent\n });\n });\n this.updateValueAndValidity(options);\n }\n patchValue(value, options = {}) {\n if (value == null) return;\n value.forEach((newValue, index) => {\n if (this.at(index)) {\n this.at(index).patchValue(newValue, {\n onlySelf: true,\n emitEvent: options.emitEvent\n });\n }\n });\n this.updateValueAndValidity(options);\n }\n reset(value = [], options = {}) {\n this._forEachChild((control, index) => {\n control.reset(value[index], {\n ...options,\n onlySelf: true\n });\n });\n this._updatePristine(options, this);\n this._updateTouched(options, this);\n this.updateValueAndValidity(options);\n if (options?.emitEvent !== false) {\n this._events.next(new FormResetEvent(this));\n }\n }\n getRawValue() {\n return this.controls.map(control => control.getRawValue());\n }\n clear(options = {}) {\n if (this.controls.length < 1) return;\n this._forEachChild(control => control._registerOnCollectionChange(() => {}));\n this.controls.splice(0);\n this.updateValueAndValidity({\n emitEvent: options.emitEvent\n });\n }\n _adjustIndex(index) {\n return index < 0 ? index + this.length : index;\n }\n _syncPendingControls() {\n let subtreeUpdated = this.controls.reduce((updated, child) => {\n return child._syncPendingControls() ? true : updated;\n }, false);\n if (subtreeUpdated) this.updateValueAndValidity({\n onlySelf: true\n });\n return subtreeUpdated;\n }\n _forEachChild(cb) {\n this.controls.forEach((control, index) => {\n cb(control, index);\n });\n }\n _updateValue() {\n this.value = this.controls.filter(control => control.enabled || this.disabled).map(control => control.value);\n }\n _anyControls(condition) {\n return this.controls.some(control => control.enabled && condition(control));\n }\n _setUpControls() {\n this._forEachChild(control => this._registerControl(control));\n }\n _allControlsDisabled() {\n for (const control of this.controls) {\n if (control.enabled) return false;\n }\n return this.controls.length > 0 || this.disabled;\n }\n _registerControl(control) {\n control.setParent(this);\n control._registerOnCollectionChange(this._onCollectionChange);\n }\n _find(name) {\n return this.at(name) ?? null;\n }\n}\nconst UntypedFormArray = FormArray;\nconst isFormArray = control => control instanceof FormArray;\nlet AbstractFormDirective = /*#__PURE__*/(() => {\n class AbstractFormDirective extends ControlContainer {\n callSetDisabledState;\n get submitted() {\n return untracked(this._submittedReactive);\n }\n set submitted(value) {\n this._submittedReactive.set(value);\n }\n _submitted = computed(() => this._submittedReactive(), ...(ngDevMode ? [{\n debugName: \"_submitted\"\n }] : []));\n _submittedReactive = signal(false, ...(ngDevMode ? [{\n debugName: \"_submittedReactive\"\n }] : []));\n _oldForm;\n _onCollectionChange = () => this._updateDomValue();\n directives = [];\n constructor(validators, asyncValidators, callSetDisabledState) {\n super();\n this.callSetDisabledState = callSetDisabledState;\n this._setValidators(validators);\n this._setAsyncValidators(asyncValidators);\n }\n ngOnChanges(changes) {\n this.onChanges(changes);\n }\n ngOnDestroy() {\n this.onDestroy();\n }\n onChanges(changes) {\n this._checkFormPresent();\n if (changes.hasOwnProperty('form')) {\n this._updateValidators();\n this._updateDomValue();\n this._updateRegistrations();\n this._oldForm = this.form;\n }\n }\n onDestroy() {\n if (this.form) {\n cleanUpValidators(this.form, this);\n if (this.form._onCollectionChange === this._onCollectionChange) {\n this.form._registerOnCollectionChange(() => {});\n }\n }\n }\n get formDirective() {\n return this;\n }\n get path() {\n return [];\n }\n addControl(dir) {\n const ctrl = this.form.get(dir.path);\n setUpControl(ctrl, dir, this.callSetDisabledState);\n ctrl.updateValueAndValidity({\n emitEvent: false\n });\n this.directives.push(dir);\n return ctrl;\n }\n getControl(dir) {\n return this.form.get(dir.path);\n }\n removeControl(dir) {\n cleanUpControl(dir.control || null, dir, false);\n removeListItem$1(this.directives, dir);\n }\n addFormGroup(dir) {\n this._setUpFormContainer(dir);\n }\n removeFormGroup(dir) {\n this._cleanUpFormContainer(dir);\n }\n getFormGroup(dir) {\n return this.form.get(dir.path);\n }\n getFormArray(dir) {\n return this.form.get(dir.path);\n }\n addFormArray(dir) {\n this._setUpFormContainer(dir);\n }\n removeFormArray(dir) {\n this._cleanUpFormContainer(dir);\n }\n updateModel(dir, value) {\n const ctrl = this.form.get(dir.path);\n ctrl.setValue(value);\n }\n onReset() {\n this.resetForm();\n }\n resetForm(value = undefined, options = {}) {\n this.form.reset(value, options);\n this._submittedReactive.set(false);\n }\n onSubmit($event) {\n this.submitted = true;\n syncPendingControls(this.form, this.directives);\n this.ngSubmit.emit($event);\n this.form._events.next(new FormSubmittedEvent(this.control));\n return $event?.target?.method === 'dialog';\n }\n _updateDomValue() {\n this.directives.forEach(dir => {\n const oldCtrl = dir.control;\n const newCtrl = this.form.get(dir.path);\n if (oldCtrl !== newCtrl) {\n cleanUpControl(oldCtrl || null, dir);\n if (isFormControl(newCtrl)) {\n setUpControl(newCtrl, dir, this.callSetDisabledState);\n dir.control = newCtrl;\n }\n }\n });\n this.form._updateTreeValidity({\n emitEvent: false\n });\n }\n _setUpFormContainer(dir) {\n const ctrl = this.form.get(dir.path);\n setUpFormContainer(ctrl, dir);\n ctrl.updateValueAndValidity({\n emitEvent: false\n });\n }\n _cleanUpFormContainer(dir) {\n const ctrl = this.form?.get(dir.path);\n if (ctrl) {\n const isControlUpdated = cleanUpFormContainer(ctrl, dir);\n if (isControlUpdated) {\n ctrl.updateValueAndValidity({\n emitEvent: false\n });\n }\n }\n }\n _updateRegistrations() {\n this.form._registerOnCollectionChange(this._onCollectionChange);\n this._oldForm?._registerOnCollectionChange(() => {});\n }\n _updateValidators() {\n setUpValidators(this.form, this);\n if (this._oldForm) {\n cleanUpValidators(this._oldForm, this);\n }\n }\n _checkFormPresent() {\n if (!this.form && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw missingFormException();\n }\n }\n static ɵfac = function AbstractFormDirective_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || AbstractFormDirective)(i0.ɵɵdirectiveInject(NG_VALIDATORS, 10), i0.ɵɵdirectiveInject(NG_ASYNC_VALIDATORS, 10), i0.ɵɵdirectiveInject(CALL_SET_DISABLED_STATE, 8));\n };\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: AbstractFormDirective,\n features: [i0.ɵɵInheritDefinitionFeature, i0.ɵɵNgOnChangesFeature]\n });\n }\n return AbstractFormDirective;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst formDirectiveProvider$1 = {\n provide: ControlContainer,\n useExisting: /*#__PURE__*/forwardRef(() => FormArrayDirective)\n};\nlet FormArrayDirective = /*#__PURE__*/(() => {\n class FormArrayDirective extends AbstractFormDirective {\n form = null;\n ngSubmit = new EventEmitter();\n get control() {\n return this.form;\n }\n static ɵfac = /* @__PURE__ */(() => {\n let ɵFormArrayDirective_BaseFactory;\n return function FormArrayDirective_Factory(__ngFactoryType__) {\n return (ɵFormArrayDirective_BaseFactory || (ɵFormArrayDirective_BaseFactory = i0.ɵɵgetInheritedFactory(FormArrayDirective)))(__ngFactoryType__ || FormArrayDirective);\n };\n })();\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: FormArrayDirective,\n selectors: [[\"\", \"formArray\", \"\"]],\n hostBindings: function FormArrayDirective_HostBindings(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵlistener(\"submit\", function FormArrayDirective_submit_HostBindingHandler($event) {\n return ctx.onSubmit($event);\n })(\"reset\", function FormArrayDirective_reset_HostBindingHandler() {\n return ctx.onReset();\n });\n }\n },\n inputs: {\n form: [0, \"formArray\", \"form\"]\n },\n outputs: {\n ngSubmit: \"ngSubmit\"\n },\n exportAs: [\"ngForm\"],\n standalone: false,\n features: [i0.ɵɵProvidersFeature([formDirectiveProvider$1]), i0.ɵɵInheritDefinitionFeature]\n });\n }\n return FormArrayDirective;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst NG_MODEL_WITH_FORM_CONTROL_WARNING = /*#__PURE__*/new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'NgModelWithFormControlWarning' : '');\nconst formControlBinding = {\n provide: NgControl,\n useExisting: /*#__PURE__*/forwardRef(() => FormControlDirective)\n};\nlet FormControlDirective = /*#__PURE__*/(() => {\n class FormControlDirective extends NgControl {\n _ngModelWarningConfig;\n callSetDisabledState;\n viewModel;\n form;\n set isDisabled(isDisabled) {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n console.warn(disabledAttrWarning);\n }\n }\n model;\n update = new EventEmitter();\n static _ngModelWarningSentOnce = false;\n _ngModelWarningSent = false;\n constructor(validators, asyncValidators, valueAccessors, _ngModelWarningConfig, callSetDisabledState) {\n super();\n this._ngModelWarningConfig = _ngModelWarningConfig;\n this.callSetDisabledState = callSetDisabledState;\n this._setValidators(validators);\n this._setAsyncValidators(asyncValidators);\n this.valueAccessor = selectValueAccessor(this, valueAccessors);\n }\n ngOnChanges(changes) {\n if (this._isControlChanged(changes)) {\n const previousForm = changes['form'].previousValue;\n if (previousForm) {\n cleanUpControl(previousForm, this, false);\n }\n setUpControl(this.form, this, this.callSetDisabledState);\n this.form.updateValueAndValidity({\n emitEvent: false\n });\n }\n if (isPropertyUpdated(changes, this.viewModel)) {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n _ngModelWarning('formControl', FormControlDirective, this, this._ngModelWarningConfig);\n }\n this.form.setValue(this.model);\n this.viewModel = this.model;\n }\n }\n ngOnDestroy() {\n if (this.form) {\n cleanUpControl(this.form, this, false);\n }\n }\n get path() {\n return [];\n }\n get control() {\n return this.form;\n }\n viewToModelUpdate(newValue) {\n this.viewModel = newValue;\n this.update.emit(newValue);\n }\n _isControlChanged(changes) {\n return changes.hasOwnProperty('form');\n }\n static ɵfac = function FormControlDirective_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || FormControlDirective)(i0.ɵɵdirectiveInject(NG_VALIDATORS, 10), i0.ɵɵdirectiveInject(NG_ASYNC_VALIDATORS, 10), i0.ɵɵdirectiveInject(NG_VALUE_ACCESSOR, 10), i0.ɵɵdirectiveInject(NG_MODEL_WITH_FORM_CONTROL_WARNING, 8), i0.ɵɵdirectiveInject(CALL_SET_DISABLED_STATE, 8));\n };\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: FormControlDirective,\n selectors: [[\"\", \"formControl\", \"\"]],\n inputs: {\n form: [0, \"formControl\", \"form\"],\n isDisabled: [0, \"disabled\", \"isDisabled\"],\n model: [0, \"ngModel\", \"model\"]\n },\n outputs: {\n update: \"ngModelChange\"\n },\n exportAs: [\"ngForm\"],\n standalone: false,\n features: [i0.ɵɵProvidersFeature([formControlBinding]), i0.ɵɵInheritDefinitionFeature, i0.ɵɵNgOnChangesFeature]\n });\n }\n return FormControlDirective;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst formGroupNameProvider = {\n provide: ControlContainer,\n useExisting: /*#__PURE__*/forwardRef(() => FormGroupName)\n};\nlet FormGroupName = /*#__PURE__*/(() => {\n class FormGroupName extends AbstractFormGroupDirective {\n name = null;\n constructor(parent, validators, asyncValidators) {\n super();\n this._parent = parent;\n this._setValidators(validators);\n this._setAsyncValidators(asyncValidators);\n }\n _checkParentType() {\n if (hasInvalidParent(this._parent) && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw groupParentException();\n }\n }\n static ɵfac = function FormGroupName_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || FormGroupName)(i0.ɵɵdirectiveInject(ControlContainer, 13), i0.ɵɵdirectiveInject(NG_VALIDATORS, 10), i0.ɵɵdirectiveInject(NG_ASYNC_VALIDATORS, 10));\n };\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: FormGroupName,\n selectors: [[\"\", \"formGroupName\", \"\"]],\n inputs: {\n name: [0, \"formGroupName\", \"name\"]\n },\n standalone: false,\n features: [i0.ɵɵProvidersFeature([formGroupNameProvider]), i0.ɵɵInheritDefinitionFeature]\n });\n }\n return FormGroupName;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst formArrayNameProvider = {\n provide: ControlContainer,\n useExisting: /*#__PURE__*/forwardRef(() => FormArrayName)\n};\nlet FormArrayName = /*#__PURE__*/(() => {\n class FormArrayName extends ControlContainer {\n _parent;\n name = null;\n constructor(parent, validators, asyncValidators) {\n super();\n this._parent = parent;\n this._setValidators(validators);\n this._setAsyncValidators(asyncValidators);\n }\n ngOnInit() {\n if (hasInvalidParent(this._parent) && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw arrayParentException();\n }\n this.formDirective.addFormArray(this);\n }\n ngOnDestroy() {\n this.formDirective?.removeFormArray(this);\n }\n get control() {\n return this.formDirective.getFormArray(this);\n }\n get formDirective() {\n return this._parent ? this._parent.formDirective : null;\n }\n get path() {\n return controlPath(this.name == null ? this.name : this.name.toString(), this._parent);\n }\n static ɵfac = function FormArrayName_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || FormArrayName)(i0.ɵɵdirectiveInject(ControlContainer, 13), i0.ɵɵdirectiveInject(NG_VALIDATORS, 10), i0.ɵɵdirectiveInject(NG_ASYNC_VALIDATORS, 10));\n };\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: FormArrayName,\n selectors: [[\"\", \"formArrayName\", \"\"]],\n inputs: {\n name: [0, \"formArrayName\", \"name\"]\n },\n standalone: false,\n features: [i0.ɵɵProvidersFeature([formArrayNameProvider]), i0.ɵɵInheritDefinitionFeature]\n });\n }\n return FormArrayName;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nfunction hasInvalidParent(parent) {\n return !(parent instanceof FormGroupName) && !(parent instanceof AbstractFormDirective) && !(parent instanceof FormArrayName);\n}\nconst controlNameBinding = {\n provide: NgControl,\n useExisting: /*#__PURE__*/forwardRef(() => FormControlName)\n};\nlet FormControlName = /*#__PURE__*/(() => {\n class FormControlName extends NgControl {\n _ngModelWarningConfig;\n _added = false;\n viewModel;\n control;\n name = null;\n set isDisabled(isDisabled) {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n console.warn(disabledAttrWarning);\n }\n }\n model;\n update = new EventEmitter();\n static _ngModelWarningSentOnce = false;\n _ngModelWarningSent = false;\n constructor(parent, validators, asyncValidators, valueAccessors, _ngModelWarningConfig) {\n super();\n this._ngModelWarningConfig = _ngModelWarningConfig;\n this._parent = parent;\n this._setValidators(validators);\n this._setAsyncValidators(asyncValidators);\n this.valueAccessor = selectValueAccessor(this, valueAccessors);\n }\n ngOnChanges(changes) {\n if (!this._added) this._setUpControl();\n if (isPropertyUpdated(changes, this.viewModel)) {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n _ngModelWarning('formControlName', FormControlName, this, this._ngModelWarningConfig);\n }\n this.viewModel = this.model;\n this.formDirective.updateModel(this, this.model);\n }\n }\n ngOnDestroy() {\n this.formDirective?.removeControl(this);\n }\n viewToModelUpdate(newValue) {\n this.viewModel = newValue;\n this.update.emit(newValue);\n }\n get path() {\n return controlPath(this.name == null ? this.name : this.name.toString(), this._parent);\n }\n get formDirective() {\n return this._parent ? this._parent.formDirective : null;\n }\n _setUpControl() {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n checkParentType(this._parent, this.name);\n }\n this.control = this.formDirective.addControl(this);\n this._added = true;\n }\n static ɵfac = function FormControlName_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || FormControlName)(i0.ɵɵdirectiveInject(ControlContainer, 13), i0.ɵɵdirectiveInject(NG_VALIDATORS, 10), i0.ɵɵdirectiveInject(NG_ASYNC_VALIDATORS, 10), i0.ɵɵdirectiveInject(NG_VALUE_ACCESSOR, 10), i0.ɵɵdirectiveInject(NG_MODEL_WITH_FORM_CONTROL_WARNING, 8));\n };\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: FormControlName,\n selectors: [[\"\", \"formControlName\", \"\"]],\n inputs: {\n name: [0, \"formControlName\", \"name\"],\n isDisabled: [0, \"disabled\", \"isDisabled\"],\n model: [0, \"ngModel\", \"model\"]\n },\n outputs: {\n update: \"ngModelChange\"\n },\n standalone: false,\n features: [i0.ɵɵProvidersFeature([controlNameBinding]), i0.ɵɵInheritDefinitionFeature, i0.ɵɵNgOnChangesFeature]\n });\n }\n return FormControlName;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nfunction checkParentType(parent, name) {\n if (!(parent instanceof FormGroupName) && parent instanceof AbstractFormGroupDirective) {\n throw ngModelGroupException();\n } else if (!(parent instanceof FormGroupName) && !(parent instanceof AbstractFormDirective) && !(parent instanceof FormArrayName)) {\n throw controlParentException(name);\n }\n}\nconst formDirectiveProvider = {\n provide: ControlContainer,\n useExisting: /*#__PURE__*/forwardRef(() => FormGroupDirective)\n};\nlet FormGroupDirective = /*#__PURE__*/(() => {\n class FormGroupDirective extends AbstractFormDirective {\n form = null;\n ngSubmit = new EventEmitter();\n get control() {\n return this.form;\n }\n static ɵfac = /* @__PURE__ */(() => {\n let ɵFormGroupDirective_BaseFactory;\n return function FormGroupDirective_Factory(__ngFactoryType__) {\n return (ɵFormGroupDirective_BaseFactory || (ɵFormGroupDirective_BaseFactory = i0.ɵɵgetInheritedFactory(FormGroupDirective)))(__ngFactoryType__ || FormGroupDirective);\n };\n })();\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: FormGroupDirective,\n selectors: [[\"\", \"formGroup\", \"\"]],\n hostBindings: function FormGroupDirective_HostBindings(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵlistener(\"submit\", function FormGroupDirective_submit_HostBindingHandler($event) {\n return ctx.onSubmit($event);\n })(\"reset\", function FormGroupDirective_reset_HostBindingHandler() {\n return ctx.onReset();\n });\n }\n },\n inputs: {\n form: [0, \"formGroup\", \"form\"]\n },\n outputs: {\n ngSubmit: \"ngSubmit\"\n },\n exportAs: [\"ngForm\"],\n standalone: false,\n features: [i0.ɵɵProvidersFeature([formDirectiveProvider]), i0.ɵɵInheritDefinitionFeature]\n });\n }\n return FormGroupDirective;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst SELECT_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: /*#__PURE__*/forwardRef(() => SelectControlValueAccessor),\n multi: true\n};\nfunction _buildValueString$1(id, value) {\n if (id == null) return `${value}`;\n if (value && typeof value === 'object') value = 'Object';\n return `${id}: ${value}`.slice(0, 50);\n}\nfunction _extractId$1(valueString) {\n return valueString.split(':')[0];\n}\nlet SelectControlValueAccessor = /*#__PURE__*/(() => {\n class SelectControlValueAccessor extends BuiltInControlValueAccessor {\n value;\n _optionMap = new Map();\n _idCounter = 0;\n set compareWith(fn) {\n if (typeof fn !== 'function' && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw new _RuntimeError(1201, `compareWith must be a function, but received ${JSON.stringify(fn)}`);\n }\n this._compareWith = fn;\n }\n _compareWith = Object.is;\n appRefInjector = inject(ApplicationRef).injector;\n destroyRef = inject(DestroyRef);\n cdr = inject(ChangeDetectorRef);\n _queuedWrite = false;\n _writeValueAfterRender() {\n if (this._queuedWrite || this.appRefInjector.destroyed) {\n return;\n }\n this._queuedWrite = true;\n afterNextRender({\n write: () => {\n if (this.destroyRef.destroyed) {\n return;\n }\n this._queuedWrite = false;\n this.writeValue(this.value);\n }\n }, {\n injector: this.appRefInjector\n });\n }\n writeValue(value) {\n this.cdr.markForCheck();\n this.value = value;\n const id = this._getOptionId(value);\n const valueString = _buildValueString$1(id, value);\n this.setProperty('value', valueString);\n }\n registerOnChange(fn) {\n this.onChange = valueString => {\n this.value = this._getOptionValue(valueString);\n fn(this.value);\n };\n }\n _registerOption() {\n return (this._idCounter++).toString();\n }\n _getOptionId(value) {\n for (const id of this._optionMap.keys()) {\n if (this._compareWith(this._optionMap.get(id), value)) return id;\n }\n return null;\n }\n _getOptionValue(valueString) {\n const id = _extractId$1(valueString);\n return this._optionMap.has(id) ? this._optionMap.get(id) : valueString;\n }\n static ɵfac = /* @__PURE__ */(() => {\n let ɵSelectControlValueAccessor_BaseFactory;\n return function SelectControlValueAccessor_Factory(__ngFactoryType__) {\n return (ɵSelectControlValueAccessor_BaseFactory || (ɵSelectControlValueAccessor_BaseFactory = i0.ɵɵgetInheritedFactory(SelectControlValueAccessor)))(__ngFactoryType__ || SelectControlValueAccessor);\n };\n })();\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: SelectControlValueAccessor,\n selectors: [[\"select\", \"formControlName\", \"\", 3, \"multiple\", \"\"], [\"select\", \"formControl\", \"\", 3, \"multiple\", \"\"], [\"select\", \"ngModel\", \"\", 3, \"multiple\", \"\"]],\n hostBindings: function SelectControlValueAccessor_HostBindings(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵlistener(\"change\", function SelectControlValueAccessor_change_HostBindingHandler($event) {\n return ctx.onChange($event.target.value);\n })(\"blur\", function SelectControlValueAccessor_blur_HostBindingHandler() {\n return ctx.onTouched();\n });\n }\n },\n inputs: {\n compareWith: \"compareWith\"\n },\n standalone: false,\n features: [i0.ɵɵProvidersFeature([SELECT_VALUE_ACCESSOR]), i0.ɵɵInheritDefinitionFeature]\n });\n }\n return SelectControlValueAccessor;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet NgSelectOption = /*#__PURE__*/(() => {\n class NgSelectOption {\n _element;\n _renderer;\n _select;\n id;\n constructor(_element, _renderer, _select) {\n this._element = _element;\n this._renderer = _renderer;\n this._select = _select;\n if (this._select) this.id = this._select._registerOption();\n }\n set ngValue(value) {\n if (this._select == null) return;\n this._select._optionMap.set(this.id, value);\n this._setElementValue(_buildValueString$1(this.id, value));\n this._select._writeValueAfterRender();\n }\n set value(value) {\n this._setElementValue(value);\n this._select?._writeValueAfterRender();\n }\n _setElementValue(value) {\n this._renderer.setProperty(this._element.nativeElement, 'value', value);\n }\n ngOnDestroy() {\n this._select?._optionMap.delete(this.id);\n this._select?._writeValueAfterRender();\n }\n static ɵfac = function NgSelectOption_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || NgSelectOption)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i0.Renderer2), i0.ɵɵdirectiveInject(SelectControlValueAccessor, 9));\n };\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: NgSelectOption,\n selectors: [[\"option\"]],\n inputs: {\n ngValue: \"ngValue\",\n value: \"value\"\n },\n standalone: false\n });\n }\n return NgSelectOption;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst SELECT_MULTIPLE_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: /*#__PURE__*/forwardRef(() => SelectMultipleControlValueAccessor),\n multi: true\n};\nfunction _buildValueString(id, value) {\n if (id == null) return `${value}`;\n if (typeof value === 'string') value = `'${value}'`;\n if (value && typeof value === 'object') value = 'Object';\n return `${id}: ${value}`.slice(0, 50);\n}\nfunction _extractId(valueString) {\n return valueString.split(':')[0];\n}\nlet SelectMultipleControlValueAccessor = /*#__PURE__*/(() => {\n class SelectMultipleControlValueAccessor extends BuiltInControlValueAccessor {\n value;\n _optionMap = new Map();\n _idCounter = 0;\n set compareWith(fn) {\n if (typeof fn !== 'function' && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw new _RuntimeError(1201, `compareWith must be a function, but received ${JSON.stringify(fn)}`);\n }\n this._compareWith = fn;\n }\n _compareWith = Object.is;\n writeValue(value) {\n this.value = value;\n let optionSelectedStateSetter;\n if (Array.isArray(value)) {\n const ids = value.map(v => this._getOptionId(v));\n optionSelectedStateSetter = (opt, o) => {\n opt._setSelected(ids.indexOf(o.toString()) > -1);\n };\n } else {\n optionSelectedStateSetter = (opt, o) => {\n opt._setSelected(false);\n };\n }\n this._optionMap.forEach(optionSelectedStateSetter);\n }\n registerOnChange(fn) {\n this.onChange = element => {\n const selected = [];\n const selectedOptions = element.selectedOptions;\n if (selectedOptions !== undefined) {\n const options = selectedOptions;\n for (let i = 0; i < options.length; i++) {\n const opt = options[i];\n const val = this._getOptionValue(opt.value);\n selected.push(val);\n }\n } else {\n const options = element.options;\n for (let i = 0; i < options.length; i++) {\n const opt = options[i];\n if (opt.selected) {\n const val = this._getOptionValue(opt.value);\n selected.push(val);\n }\n }\n }\n this.value = selected;\n fn(selected);\n };\n }\n _registerOption(value) {\n const id = (this._idCounter++).toString();\n this._optionMap.set(id, value);\n return id;\n }\n _getOptionId(value) {\n for (const id of this._optionMap.keys()) {\n if (this._compareWith(this._optionMap.get(id)._value, value)) return id;\n }\n return null;\n }\n _getOptionValue(valueString) {\n const id = _extractId(valueString);\n return this._optionMap.has(id) ? this._optionMap.get(id)._value : valueString;\n }\n static ɵfac = /* @__PURE__ */(() => {\n let ɵSelectMultipleControlValueAccessor_BaseFactory;\n return function SelectMultipleControlValueAccessor_Factory(__ngFactoryType__) {\n return (ɵSelectMultipleControlValueAccessor_BaseFactory || (ɵSelectMultipleControlValueAccessor_BaseFactory = i0.ɵɵgetInheritedFactory(SelectMultipleControlValueAccessor)))(__ngFactoryType__ || SelectMultipleControlValueAccessor);\n };\n })();\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: SelectMultipleControlValueAccessor,\n selectors: [[\"select\", \"multiple\", \"\", \"formControlName\", \"\"], [\"select\", \"multiple\", \"\", \"formControl\", \"\"], [\"select\", \"multiple\", \"\", \"ngModel\", \"\"]],\n hostBindings: function SelectMultipleControlValueAccessor_HostBindings(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵlistener(\"change\", function SelectMultipleControlValueAccessor_change_HostBindingHandler($event) {\n return ctx.onChange($event.target);\n })(\"blur\", function SelectMultipleControlValueAccessor_blur_HostBindingHandler() {\n return ctx.onTouched();\n });\n }\n },\n inputs: {\n compareWith: \"compareWith\"\n },\n standalone: false,\n features: [i0.ɵɵProvidersFeature([SELECT_MULTIPLE_VALUE_ACCESSOR]), i0.ɵɵInheritDefinitionFeature]\n });\n }\n return SelectMultipleControlValueAccessor;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet ɵNgSelectMultipleOption = /*#__PURE__*/(() => {\n class ɵNgSelectMultipleOption {\n _element;\n _renderer;\n _select;\n id;\n _value;\n constructor(_element, _renderer, _select) {\n this._element = _element;\n this._renderer = _renderer;\n this._select = _select;\n if (this._select) {\n this.id = this._select._registerOption(this);\n }\n }\n set ngValue(value) {\n if (this._select == null) return;\n this._value = value;\n this._setElementValue(_buildValueString(this.id, value));\n this._select.writeValue(this._select.value);\n }\n set value(value) {\n if (this._select) {\n this._value = value;\n this._setElementValue(_buildValueString(this.id, value));\n this._select.writeValue(this._select.value);\n } else {\n this._setElementValue(value);\n }\n }\n _setElementValue(value) {\n this._renderer.setProperty(this._element.nativeElement, 'value', value);\n }\n _setSelected(selected) {\n this._renderer.setProperty(this._element.nativeElement, 'selected', selected);\n }\n ngOnDestroy() {\n if (this._select) {\n this._select._optionMap.delete(this.id);\n this._select.writeValue(this._select.value);\n }\n }\n static ɵfac = function ɵNgSelectMultipleOption_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || ɵNgSelectMultipleOption)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i0.Renderer2), i0.ɵɵdirectiveInject(SelectMultipleControlValueAccessor, 9));\n };\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: ɵNgSelectMultipleOption,\n selectors: [[\"option\"]],\n inputs: {\n ngValue: \"ngValue\",\n value: \"value\"\n },\n standalone: false\n });\n }\n return ɵNgSelectMultipleOption;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nfunction toInteger(value) {\n return typeof value === 'number' ? value : parseInt(value, 10);\n}\nfunction toFloat(value) {\n return typeof value === 'number' ? value : parseFloat(value);\n}\nlet AbstractValidatorDirective = /*#__PURE__*/(() => {\n class AbstractValidatorDirective {\n _validator = nullValidator;\n _onChange;\n _enabled;\n ngOnChanges(changes) {\n if (this.inputName in changes) {\n const input = this.normalizeInput(changes[this.inputName].currentValue);\n this._enabled = this.enabled(input);\n this._validator = this._enabled ? this.createValidator(input) : nullValidator;\n this._onChange?.();\n }\n }\n validate(control) {\n return this._validator(control);\n }\n registerOnValidatorChange(fn) {\n this._onChange = fn;\n }\n enabled(input) {\n return input != null;\n }\n static ɵfac = function AbstractValidatorDirective_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || AbstractValidatorDirective)();\n };\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: AbstractValidatorDirective,\n features: [i0.ɵɵNgOnChangesFeature]\n });\n }\n return AbstractValidatorDirective;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst MAX_VALIDATOR = {\n provide: NG_VALIDATORS,\n useExisting: /*#__PURE__*/forwardRef(() => MaxValidator),\n multi: true\n};\nlet MaxValidator = /*#__PURE__*/(() => {\n class MaxValidator extends AbstractValidatorDirective {\n max;\n inputName = 'max';\n normalizeInput = input => toFloat(input);\n createValidator = max => maxValidator(max);\n static ɵfac = /* @__PURE__ */(() => {\n let ɵMaxValidator_BaseFactory;\n return function MaxValidator_Factory(__ngFactoryType__) {\n return (ɵMaxValidator_BaseFactory || (ɵMaxValidator_BaseFactory = i0.ɵɵgetInheritedFactory(MaxValidator)))(__ngFactoryType__ || MaxValidator);\n };\n })();\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MaxValidator,\n selectors: [[\"input\", \"type\", \"number\", \"max\", \"\", \"formControlName\", \"\"], [\"input\", \"type\", \"number\", \"max\", \"\", \"formControl\", \"\"], [\"input\", \"type\", \"number\", \"max\", \"\", \"ngModel\", \"\"]],\n hostVars: 1,\n hostBindings: function MaxValidator_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵattribute(\"max\", ctx._enabled ? ctx.max : null);\n }\n },\n inputs: {\n max: \"max\"\n },\n standalone: false,\n features: [i0.ɵɵProvidersFeature([MAX_VALIDATOR]), i0.ɵɵInheritDefinitionFeature]\n });\n }\n return MaxValidator;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst MIN_VALIDATOR = {\n provide: NG_VALIDATORS,\n useExisting: /*#__PURE__*/forwardRef(() => MinValidator),\n multi: true\n};\nlet MinValidator = /*#__PURE__*/(() => {\n class MinValidator extends AbstractValidatorDirective {\n min;\n inputName = 'min';\n normalizeInput = input => toFloat(input);\n createValidator = min => minValidator(min);\n static ɵfac = /* @__PURE__ */(() => {\n let ɵMinValidator_BaseFactory;\n return function MinValidator_Factory(__ngFactoryType__) {\n return (ɵMinValidator_BaseFactory || (ɵMinValidator_BaseFactory = i0.ɵɵgetInheritedFactory(MinValidator)))(__ngFactoryType__ || MinValidator);\n };\n })();\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MinValidator,\n selectors: [[\"input\", \"type\", \"number\", \"min\", \"\", \"formControlName\", \"\"], [\"input\", \"type\", \"number\", \"min\", \"\", \"formControl\", \"\"], [\"input\", \"type\", \"number\", \"min\", \"\", \"ngModel\", \"\"]],\n hostVars: 1,\n hostBindings: function MinValidator_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵattribute(\"min\", ctx._enabled ? ctx.min : null);\n }\n },\n inputs: {\n min: \"min\"\n },\n standalone: false,\n features: [i0.ɵɵProvidersFeature([MIN_VALIDATOR]), i0.ɵɵInheritDefinitionFeature]\n });\n }\n return MinValidator;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst REQUIRED_VALIDATOR = {\n provide: NG_VALIDATORS,\n useExisting: /*#__PURE__*/forwardRef(() => RequiredValidator),\n multi: true\n};\nconst CHECKBOX_REQUIRED_VALIDATOR = {\n provide: NG_VALIDATORS,\n useExisting: /*#__PURE__*/forwardRef(() => CheckboxRequiredValidator),\n multi: true\n};\nlet RequiredValidator = /*#__PURE__*/(() => {\n class RequiredValidator extends AbstractValidatorDirective {\n required;\n inputName = 'required';\n normalizeInput = booleanAttribute;\n createValidator = input => requiredValidator;\n enabled(input) {\n return input;\n }\n static ɵfac = /* @__PURE__ */(() => {\n let ɵRequiredValidator_BaseFactory;\n return function RequiredValidator_Factory(__ngFactoryType__) {\n return (ɵRequiredValidator_BaseFactory || (ɵRequiredValidator_BaseFactory = i0.ɵɵgetInheritedFactory(RequiredValidator)))(__ngFactoryType__ || RequiredValidator);\n };\n })();\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: RequiredValidator,\n selectors: [[\"\", \"required\", \"\", \"formControlName\", \"\", 3, \"type\", \"checkbox\"], [\"\", \"required\", \"\", \"formControl\", \"\", 3, \"type\", \"checkbox\"], [\"\", \"required\", \"\", \"ngModel\", \"\", 3, \"type\", \"checkbox\"]],\n hostVars: 1,\n hostBindings: function RequiredValidator_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵattribute(\"required\", ctx._enabled ? \"\" : null);\n }\n },\n inputs: {\n required: \"required\"\n },\n standalone: false,\n features: [i0.ɵɵProvidersFeature([REQUIRED_VALIDATOR]), i0.ɵɵInheritDefinitionFeature]\n });\n }\n return RequiredValidator;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet CheckboxRequiredValidator = /*#__PURE__*/(() => {\n class CheckboxRequiredValidator extends RequiredValidator {\n createValidator = input => requiredTrueValidator;\n static ɵfac = /* @__PURE__ */(() => {\n let ɵCheckboxRequiredValidator_BaseFactory;\n return function CheckboxRequiredValidator_Factory(__ngFactoryType__) {\n return (ɵCheckboxRequiredValidator_BaseFactory || (ɵCheckboxRequiredValidator_BaseFactory = i0.ɵɵgetInheritedFactory(CheckboxRequiredValidator)))(__ngFactoryType__ || CheckboxRequiredValidator);\n };\n })();\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: CheckboxRequiredValidator,\n selectors: [[\"input\", \"type\", \"checkbox\", \"required\", \"\", \"formControlName\", \"\"], [\"input\", \"type\", \"checkbox\", \"required\", \"\", \"formControl\", \"\"], [\"input\", \"type\", \"checkbox\", \"required\", \"\", \"ngModel\", \"\"]],\n hostVars: 1,\n hostBindings: function CheckboxRequiredValidator_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵattribute(\"required\", ctx._enabled ? \"\" : null);\n }\n },\n standalone: false,\n features: [i0.ɵɵProvidersFeature([CHECKBOX_REQUIRED_VALIDATOR]), i0.ɵɵInheritDefinitionFeature]\n });\n }\n return CheckboxRequiredValidator;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst EMAIL_VALIDATOR = {\n provide: NG_VALIDATORS,\n useExisting: /*#__PURE__*/forwardRef(() => EmailValidator),\n multi: true\n};\nlet EmailValidator = /*#__PURE__*/(() => {\n class EmailValidator extends AbstractValidatorDirective {\n email;\n inputName = 'email';\n normalizeInput = booleanAttribute;\n createValidator = input => emailValidator;\n enabled(input) {\n return input;\n }\n static ɵfac = /* @__PURE__ */(() => {\n let ɵEmailValidator_BaseFactory;\n return function EmailValidator_Factory(__ngFactoryType__) {\n return (ɵEmailValidator_BaseFactory || (ɵEmailValidator_BaseFactory = i0.ɵɵgetInheritedFactory(EmailValidator)))(__ngFactoryType__ || EmailValidator);\n };\n })();\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: EmailValidator,\n selectors: [[\"\", \"email\", \"\", \"formControlName\", \"\"], [\"\", \"email\", \"\", \"formControl\", \"\"], [\"\", \"email\", \"\", \"ngModel\", \"\"]],\n inputs: {\n email: \"email\"\n },\n standalone: false,\n features: [i0.ɵɵProvidersFeature([EMAIL_VALIDATOR]), i0.ɵɵInheritDefinitionFeature]\n });\n }\n return EmailValidator;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst MIN_LENGTH_VALIDATOR = {\n provide: NG_VALIDATORS,\n useExisting: /*#__PURE__*/forwardRef(() => MinLengthValidator),\n multi: true\n};\nlet MinLengthValidator = /*#__PURE__*/(() => {\n class MinLengthValidator extends AbstractValidatorDirective {\n minlength;\n inputName = 'minlength';\n normalizeInput = input => toInteger(input);\n createValidator = minlength => minLengthValidator(minlength);\n static ɵfac = /* @__PURE__ */(() => {\n let ɵMinLengthValidator_BaseFactory;\n return function MinLengthValidator_Factory(__ngFactoryType__) {\n return (ɵMinLengthValidator_BaseFactory || (ɵMinLengthValidator_BaseFactory = i0.ɵɵgetInheritedFactory(MinLengthValidator)))(__ngFactoryType__ || MinLengthValidator);\n };\n })();\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MinLengthValidator,\n selectors: [[\"\", \"minlength\", \"\", \"formControlName\", \"\"], [\"\", \"minlength\", \"\", \"formControl\", \"\"], [\"\", \"minlength\", \"\", \"ngModel\", \"\"]],\n hostVars: 1,\n hostBindings: function MinLengthValidator_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵattribute(\"minlength\", ctx._enabled ? ctx.minlength : null);\n }\n },\n inputs: {\n minlength: \"minlength\"\n },\n standalone: false,\n features: [i0.ɵɵProvidersFeature([MIN_LENGTH_VALIDATOR]), i0.ɵɵInheritDefinitionFeature]\n });\n }\n return MinLengthValidator;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst MAX_LENGTH_VALIDATOR = {\n provide: NG_VALIDATORS,\n useExisting: /*#__PURE__*/forwardRef(() => MaxLengthValidator),\n multi: true\n};\nlet MaxLengthValidator = /*#__PURE__*/(() => {\n class MaxLengthValidator extends AbstractValidatorDirective {\n maxlength;\n inputName = 'maxlength';\n normalizeInput = input => toInteger(input);\n createValidator = maxlength => maxLengthValidator(maxlength);\n static ɵfac = /* @__PURE__ */(() => {\n let ɵMaxLengthValidator_BaseFactory;\n return function MaxLengthValidator_Factory(__ngFactoryType__) {\n return (ɵMaxLengthValidator_BaseFactory || (ɵMaxLengthValidator_BaseFactory = i0.ɵɵgetInheritedFactory(MaxLengthValidator)))(__ngFactoryType__ || MaxLengthValidator);\n };\n })();\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MaxLengthValidator,\n selectors: [[\"\", \"maxlength\", \"\", \"formControlName\", \"\"], [\"\", \"maxlength\", \"\", \"formControl\", \"\"], [\"\", \"maxlength\", \"\", \"ngModel\", \"\"]],\n hostVars: 1,\n hostBindings: function MaxLengthValidator_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵattribute(\"maxlength\", ctx._enabled ? ctx.maxlength : null);\n }\n },\n inputs: {\n maxlength: \"maxlength\"\n },\n standalone: false,\n features: [i0.ɵɵProvidersFeature([MAX_LENGTH_VALIDATOR]), i0.ɵɵInheritDefinitionFeature]\n });\n }\n return MaxLengthValidator;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst PATTERN_VALIDATOR = {\n provide: NG_VALIDATORS,\n useExisting: /*#__PURE__*/forwardRef(() => PatternValidator),\n multi: true\n};\nlet PatternValidator = /*#__PURE__*/(() => {\n class PatternValidator extends AbstractValidatorDirective {\n pattern;\n inputName = 'pattern';\n normalizeInput = input => input;\n createValidator = input => patternValidator(input);\n static ɵfac = /* @__PURE__ */(() => {\n let ɵPatternValidator_BaseFactory;\n return function PatternValidator_Factory(__ngFactoryType__) {\n return (ɵPatternValidator_BaseFactory || (ɵPatternValidator_BaseFactory = i0.ɵɵgetInheritedFactory(PatternValidator)))(__ngFactoryType__ || PatternValidator);\n };\n })();\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: PatternValidator,\n selectors: [[\"\", \"pattern\", \"\", \"formControlName\", \"\"], [\"\", \"pattern\", \"\", \"formControl\", \"\"], [\"\", \"pattern\", \"\", \"ngModel\", \"\"]],\n hostVars: 1,\n hostBindings: function PatternValidator_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵattribute(\"pattern\", ctx._enabled ? ctx.pattern : null);\n }\n },\n inputs: {\n pattern: \"pattern\"\n },\n standalone: false,\n features: [i0.ɵɵProvidersFeature([PATTERN_VALIDATOR]), i0.ɵɵInheritDefinitionFeature]\n });\n }\n return PatternValidator;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst SHARED_FORM_DIRECTIVES = [ɵNgNoValidate, NgSelectOption, ɵNgSelectMultipleOption, DefaultValueAccessor, NumberValueAccessor, RangeValueAccessor, CheckboxControlValueAccessor, SelectControlValueAccessor, SelectMultipleControlValueAccessor, RadioControlValueAccessor, NgControlStatus, NgControlStatusGroup, RequiredValidator, MinLengthValidator, MaxLengthValidator, PatternValidator, CheckboxRequiredValidator, EmailValidator, MinValidator, MaxValidator];\nconst TEMPLATE_DRIVEN_DIRECTIVES = [NgModel, NgModelGroup, NgForm];\nconst REACTIVE_DRIVEN_DIRECTIVES = [FormControlDirective, FormGroupDirective, FormArrayDirective, FormControlName, FormGroupName, FormArrayName];\nlet ɵInternalFormsSharedModule = /*#__PURE__*/(() => {\n class ɵInternalFormsSharedModule {\n static ɵfac = function ɵInternalFormsSharedModule_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || ɵInternalFormsSharedModule)();\n };\n static ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: ɵInternalFormsSharedModule\n });\n static ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({});\n }\n return ɵInternalFormsSharedModule;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nfunction isAbstractControlOptions(options) {\n return !!options && (options.asyncValidators !== undefined || options.validators !== undefined || options.updateOn !== undefined);\n}\nlet FormBuilder = /*#__PURE__*/(() => {\n class FormBuilder {\n useNonNullable = false;\n get nonNullable() {\n const nnfb = new FormBuilder();\n nnfb.useNonNullable = true;\n return nnfb;\n }\n group(controls, options = null) {\n const reducedControls = this._reduceControls(controls);\n let newOptions = {};\n if (isAbstractControlOptions(options)) {\n newOptions = options;\n } else if (options !== null) {\n newOptions.validators = options.validator;\n newOptions.asyncValidators = options.asyncValidator;\n }\n return new FormGroup(reducedControls, newOptions);\n }\n record(controls, options = null) {\n const reducedControls = this._reduceControls(controls);\n return new FormRecord(reducedControls, options);\n }\n control(formState, validatorOrOpts, asyncValidator) {\n let newOptions = {};\n if (!this.useNonNullable) {\n return new FormControl(formState, validatorOrOpts, asyncValidator);\n }\n if (isAbstractControlOptions(validatorOrOpts)) {\n newOptions = validatorOrOpts;\n } else {\n newOptions.validators = validatorOrOpts;\n newOptions.asyncValidators = asyncValidator;\n }\n return new FormControl(formState, {\n ...newOptions,\n nonNullable: true\n });\n }\n array(controls, validatorOrOpts, asyncValidator) {\n const createdControls = controls.map(c => this._createControl(c));\n return new FormArray(createdControls, validatorOrOpts, asyncValidator);\n }\n _reduceControls(controls) {\n const createdControls = {};\n Object.keys(controls).forEach(controlName => {\n createdControls[controlName] = this._createControl(controls[controlName]);\n });\n return createdControls;\n }\n _createControl(controls) {\n if (controls instanceof FormControl) {\n return controls;\n } else if (controls instanceof AbstractControl) {\n return controls;\n } else if (Array.isArray(controls)) {\n const value = controls[0];\n const validator = controls.length > 1 ? controls[1] : null;\n const asyncValidator = controls.length > 2 ? controls[2] : null;\n return this.control(value, validator, asyncValidator);\n } else {\n return this.control(controls);\n }\n }\n static ɵfac = function FormBuilder_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || FormBuilder)();\n };\n static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: FormBuilder,\n factory: FormBuilder.ɵfac,\n providedIn: 'root'\n });\n }\n return FormBuilder;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet NonNullableFormBuilder = /*#__PURE__*/(() => {\n class NonNullableFormBuilder {\n static ɵfac = function NonNullableFormBuilder_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || NonNullableFormBuilder)();\n };\n static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: NonNullableFormBuilder,\n factory: () => (() => inject(FormBuilder).nonNullable)(),\n providedIn: 'root'\n });\n }\n return NonNullableFormBuilder;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet UntypedFormBuilder = /*#__PURE__*/(() => {\n class UntypedFormBuilder extends FormBuilder {\n group(controlsConfig, options = null) {\n return super.group(controlsConfig, options);\n }\n control(formState, validatorOrOpts, asyncValidator) {\n return super.control(formState, validatorOrOpts, asyncValidator);\n }\n array(controlsConfig, validatorOrOpts, asyncValidator) {\n return super.array(controlsConfig, validatorOrOpts, asyncValidator);\n }\n static ɵfac = /* @__PURE__ */(() => {\n let ɵUntypedFormBuilder_BaseFactory;\n return function UntypedFormBuilder_Factory(__ngFactoryType__) {\n return (ɵUntypedFormBuilder_BaseFactory || (ɵUntypedFormBuilder_BaseFactory = i0.ɵɵgetInheritedFactory(UntypedFormBuilder)))(__ngFactoryType__ || UntypedFormBuilder);\n };\n })();\n static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: UntypedFormBuilder,\n factory: UntypedFormBuilder.ɵfac,\n providedIn: 'root'\n });\n }\n return UntypedFormBuilder;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet FormsModule = /*#__PURE__*/(() => {\n class FormsModule {\n static withConfig(opts) {\n return {\n ngModule: FormsModule,\n providers: [{\n provide: CALL_SET_DISABLED_STATE,\n useValue: opts.callSetDisabledState ?? setDisabledStateDefault\n }]\n };\n }\n static ɵfac = function FormsModule_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || FormsModule)();\n };\n static ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: FormsModule\n });\n static ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n imports: [ɵInternalFormsSharedModule]\n });\n }\n return FormsModule;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet ReactiveFormsModule = /*#__PURE__*/(() => {\n class ReactiveFormsModule {\n static withConfig(opts) {\n return {\n ngModule: ReactiveFormsModule,\n providers: [{\n provide: NG_MODEL_WITH_FORM_CONTROL_WARNING,\n useValue: opts.warnOnNgModelWithFormControl ?? 'always'\n }, {\n provide: CALL_SET_DISABLED_STATE,\n useValue: opts.callSetDisabledState ?? setDisabledStateDefault\n }]\n };\n }\n static ɵfac = function ReactiveFormsModule_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || ReactiveFormsModule)();\n };\n static ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: ReactiveFormsModule\n });\n static ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n imports: [ɵInternalFormsSharedModule]\n });\n }\n return ReactiveFormsModule;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nexport { AbstractControl, AbstractControlDirective, AbstractFormDirective, AbstractFormGroupDirective, COMPOSITION_BUFFER_MODE, CheckboxControlValueAccessor, CheckboxRequiredValidator, ControlContainer, ControlEvent, DefaultValueAccessor, EmailValidator, FormArray, FormArrayDirective, FormArrayName, FormBuilder, FormControl, FormControlDirective, FormControlName, FormGroup, FormGroupDirective, FormGroupName, FormRecord, FormResetEvent, FormSubmittedEvent, FormsModule, MaxLengthValidator, MaxValidator, MinLengthValidator, MinValidator, NG_ASYNC_VALIDATORS, NG_VALIDATORS, NG_VALUE_ACCESSOR, NgControl, NgControlStatus, NgControlStatusGroup, NgForm, NgModel, NgModelGroup, NgSelectOption, NonNullableFormBuilder, NumberValueAccessor, PatternValidator, PristineChangeEvent, RadioControlValueAccessor, RangeValueAccessor, ReactiveFormsModule, RequiredValidator, SelectControlValueAccessor, SelectMultipleControlValueAccessor, StatusChangeEvent, TouchedChangeEvent, UntypedFormArray, UntypedFormBuilder, UntypedFormControl, UntypedFormGroup, VERSION, Validators, ValueChangeEvent, isFormArray, isFormControl, isFormGroup, isFormRecord, ɵInternalFormsSharedModule, ɵNgNoValidate, ɵNgSelectMultipleOption };\n"],"mappings":"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","names":["BaseControlValueAccessor","_","_renderer","_elementRef","key","value","fn","isDisabled","__ngFactoryType__","ɵɵdirectiveInject","Renderer2","ElementRef","ɵɵdefineDirective","BuiltInControlValueAccessor","ɵBuiltInControlValueAccessor_BaseFactory","ɵɵgetInheritedFactory","ɵɵInheritDefinitionFeature","NG_VALUE_ACCESSOR","InjectionToken","DEFAULT_VALUE_ACCESSOR","NG_VALUE_ACCESSOR","forwardRef","DefaultValueAccessor","_isAndroid","userAgent","getDOM","COMPOSITION_BUFFER_MODE","InjectionToken","BaseControlValueAccessor","renderer","elementRef","_compositionMode","value","normalizedValue","__ngFactoryType__","ɵɵdirectiveInject","Renderer2","ElementRef","ɵɵdefineDirective","rf","ctx","ɵɵlistener","$event","ɵɵProvidersFeature","ɵɵInheritDefinitionFeature","isEmptyInputValue","lengthOrSize","NG_VALIDATORS","NG_ASYNC_VALIDATORS","EMAIL_REGEXP","Validators","min","minValidator","max","maxValidator","control","requiredValidator","requiredTrueValidator","emailValidator","minLength","minLengthValidator","maxLength","maxLengthValidator","pattern","patternValidator","nullValidator","validators","compose","composeAsync","length","regex","regexStr","isPresent","o","toObservable","isPromise","from","mergeErrors","arrayOfErrors","res","errors","__spreadValues","executeValidators","validator","isValidatorFn","normalizeValidators","c","presentValidators","composeValidators","observables","forkJoin","map","composeAsyncValidators","mergeValidators","controlValidators","dirValidator","getControlValidators","getControlAsyncValidators","makeValidatorsArray","hasValidator","addValidators","currentValidators","current","v","removeValidators","AbstractControlDirective","fn","errorCode","path","ControlContainer","NgControl","AbstractControlStatus","cd","NgControlStatus","AbstractControlStatus","cd","__ngFactoryType__","ɵɵdirectiveInject","NgControl","ɵɵdefineDirective","rf","ctx","ɵɵclassProp","ɵɵInheritDefinitionFeature","NgControlStatusGroup","ControlContainer","VALID","INVALID","PENDING","DISABLED","ControlEvent","ValueChangeEvent","value","source","PristineChangeEvent","pristine","TouchedChangeEvent","touched","StatusChangeEvent","status","FormSubmittedEvent","FormResetEvent","pickValidators","validatorOrOpts","isOptionsObj","coerceToValidator","validator","composeValidators","pickAsyncValidators","asyncValidator","coerceToAsyncValidator","composeAsyncValidators","assertControlPresent","parent","isGroup","key","controls","RuntimeError","assertAllValuesPresent","control","_","AbstractControl","validators","asyncValidators","validatorFn","asyncValidatorFn","untracked","v","computed","signal","Subject","addValidators","removeValidators","hasValidator","opts","changed","sourceControl","__spreadProps","__spreadValues","skipPristineCheck","changeFn","shouldHaveEmitted","ctrl","emitEvent","obs","toObservable","errors","path","currPath","name","errorCode","x","changedControl","EventEmitter","newPristine","fn","onlySelf","FormGroup","options","controlName","acc","subtreeUpdated","updated","child","cb","condition","initValue","res","FormRecord","FormGroup","CALL_SET_DISABLED_STATE","InjectionToken","setDisabledStateDefault","controlPath","name","parent","setUpControl","control","dir","callSetDisabledState","setUpValidators","setUpViewChangePipeline","setUpModelChangePipeline","setUpBlurPipeline","setUpDisabledChangeHandler","cleanUpControl","validateControlPresenceOnChange","noop","cleanUpValidators","registerOnValidatorChange","validators","onChange","validator","onDisabledChange","isDisabled","getControlValidators","mergeValidators","asyncValidators","getControlAsyncValidators","onValidatorChange","isControlUpdated","updatedValidators","updatedAsyncValidators","asyncValidator","newValue","updateControl","emitModelEvent","setUpFormContainer","cleanUpFormContainer","isPropertyUpdated","changes","viewModel","change","isBuiltInAccessor","valueAccessor","BuiltInControlValueAccessor","syncPendingControls","form","directives","dir","control","selectValueAccessor","valueAccessors","defaultAccessor","builtinAccessor","customAccessor","v","DefaultValueAccessor","removeListItem$1","list","el","index","removeListItem","list","el","index","isFormControlState","formState","FormControl","AbstractControl","validatorOrOpts","asyncValidator","pickValidators","pickAsyncValidators","isOptionsObj","value","options","changeFn","FormResetEvent","condition","fn","cb","isFormControl","control","FormControl","ɵNgNoValidate","__ngFactoryType__","ɵɵdefineDirective","FormArray","AbstractControl","controls","validatorOrOpts","asyncValidator","pickValidators","pickAsyncValidators","index","control","options","ctrl","adjustedIndex","value","assertAllValuesPresent","newValue","assertControlPresent","__spreadProps","__spreadValues","FormResetEvent","subtreeUpdated","updated","child","cb","condition","name","AbstractFormDirective","ControlContainer","untracked","value","computed","signal","validators","asyncValidators","callSetDisabledState","changes","cleanUpValidators","dir","ctrl","setUpControl","cleanUpControl","removeListItem$1","options","$event","syncPendingControls","FormSubmittedEvent","oldCtrl","newCtrl","isFormControl","setUpFormContainer","cleanUpFormContainer","setUpValidators","__ngFactoryType__","ɵɵdirectiveInject","NG_VALIDATORS","NG_ASYNC_VALIDATORS","CALL_SET_DISABLED_STATE","ɵɵdefineDirective","ɵɵInheritDefinitionFeature","ɵɵNgOnChangesFeature","NG_MODEL_WITH_FORM_CONTROL_WARNING","InjectionToken","controlNameBinding","NgControl","forwardRef","FormControlName","isDisabled","EventEmitter","parent","validators","asyncValidators","valueAccessors","_ngModelWarningConfig","selectValueAccessor","changes","isPropertyUpdated","newValue","controlPath","__ngFactoryType__","ɵɵdirectiveInject","ControlContainer","NG_VALIDATORS","NG_ASYNC_VALIDATORS","NG_VALUE_ACCESSOR","NG_MODEL_WITH_FORM_CONTROL_WARNING","ɵɵdefineDirective","ɵɵProvidersFeature","ɵɵInheritDefinitionFeature","ɵɵNgOnChangesFeature","formDirectiveProvider","ControlContainer","forwardRef","FormGroupDirective","AbstractFormDirective","EventEmitter","ɵFormGroupDirective_BaseFactory","__ngFactoryType__","ɵɵgetInheritedFactory","ɵɵdefineDirective","rf","ctx","ɵɵlistener","$event","ɵɵProvidersFeature","ɵɵInheritDefinitionFeature","SELECT_VALUE_ACCESSOR","NG_VALUE_ACCESSOR","SelectControlValueAccessor","_buildValueString$1","id","value","_extractId$1","valueString","BuiltInControlValueAccessor","fn","inject","ApplicationRef","DestroyRef","ChangeDetectorRef","afterNextRender","ɵSelectControlValueAccessor_BaseFactory","NgSelectOption","_element","_renderer","_select","ɵɵdirectiveInject","ElementRef","Renderer2","SELECT_MULTIPLE_VALUE_ACCESSOR","SelectMultipleControlValueAccessor","_buildValueString","_extractId","optionSelectedStateSetter","ids","v","opt","o","element","selected","selectedOptions","options","i","val","ɵSelectMultipleControlValueAccessor_BaseFactory","ɵNgSelectMultipleOption","toInteger","AbstractValidatorDirective","nullValidator","changes","input","control","fn","__ngFactoryType__","ɵɵdefineDirective","ɵɵNgOnChangesFeature","MAX_LENGTH_VALIDATOR","NG_VALIDATORS","forwardRef","MaxLengthValidator","AbstractValidatorDirective","input","toInteger","maxlength","maxLengthValidator","ɵMaxLengthValidator_BaseFactory","__ngFactoryType__","ɵɵgetInheritedFactory","ɵɵdefineDirective","rf","ctx","ɵɵattribute","ɵɵProvidersFeature","ɵɵInheritDefinitionFeature","ɵInternalFormsSharedModule","__ngFactoryType__","ɵɵdefineNgModule","ɵɵdefineInjector","isAbstractControlOptions","options","FormBuilder","nnfb","controls","reducedControls","newOptions","FormGroup","FormRecord","formState","validatorOrOpts","asyncValidator","FormControl","__spreadProps","__spreadValues","createdControls","c","FormArray","controlName","AbstractControl","value","validator","ɵɵdefineInjectable","ReactiveFormsModule","opts","NG_MODEL_WITH_FORM_CONTROL_WARNING","CALL_SET_DISABLED_STATE","setDisabledStateDefault","__ngFactoryType__","ɵɵdefineNgModule","ɵɵdefineInjector","ɵInternalFormsSharedModule"],"x_google_ignoreList":[0]} \ No newline at end of file diff --git a/frontend/dist-instrumented/chunk-X4Y2U43G.js b/frontend/dist-instrumented/chunk-X4Y2U43G.js new file mode 100644 index 00000000..e983d702 --- /dev/null +++ b/frontend/dist-instrumented/chunk-X4Y2U43G.js @@ -0,0 +1,4 @@ +function cov_yv6cytx4t(){var path="/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-X4Y2U43G.js";var hash="77b92ef6e7dcb9b4186143c126259523f3e22dcd";var global=new Function("return this")();var gcv="__coverage__";var coverageData={path:"/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-X4Y2U43G.js",statementMap:{"0":{start:{line:1,column:739},end:{line:1,column:750}},"1":{start:{line:1,column:746},end:{line:1,column:750}},"2":{start:{line:1,column:767},end:{line:1,column:872}},"3":{start:{line:1,column:825},end:{line:1,column:828}},"4":{start:{line:1,column:829},end:{line:1,column:871}},"5":{start:{line:1,column:889},end:{line:1,column:1014}},"6":{start:{line:1,column:987},end:{line:1,column:990}},"7":{start:{line:1,column:991},end:{line:1,column:1013}},"8":{start:{line:1,column:1031},end:{line:1,column:1121}},"9":{start:{line:1,column:1138},end:{line:1,column:1352}},"10":{start:{line:1,column:1369},end:{line:1,column:1712}},"11":{start:{line:1,column:1383},end:{line:1,column:1386}},"12":{start:{line:1,column:1387},end:{line:1,column:1711}},"13":{start:{line:1,column:1652},end:{line:1,column:1666}},"14":{start:{line:1,column:1669},end:{line:1,column:1673}},"15":{start:{line:1,column:1674},end:{line:1,column:1701}},"16":{start:{line:1,column:1712},end:{line:1,column:2289}},"17":{start:{line:1,column:1726},end:{line:1,column:1737}},"18":{start:{line:1,column:1738},end:{line:1,column:2288}},"19":{start:{line:1,column:2306},end:{line:1,column:2635}},"20":{start:{line:1,column:2320},end:{line:1,column:2323}},"21":{start:{line:1,column:2324},end:{line:1,column:2634}},"22":{start:{line:1,column:2433},end:{line:1,column:2438}},"23":{start:{line:1,column:2444},end:{line:1,column:2448}},"24":{start:{line:1,column:2449},end:{line:1,column:2477}},"25":{start:{line:1,column:2566},end:{line:1,column:2571}},"26":{start:{line:1,column:2577},end:{line:1,column:2581}},"27":{start:{line:1,column:2582},end:{line:1,column:2606}},"28":{start:{line:1,column:2635},end:{line:1,column:2864}},"29":{start:{line:1,column:2649},end:{line:1,column:2653}},"30":{start:{line:1,column:2654},end:{line:1,column:2863}},"31":{start:{line:1,column:2881},end:{line:1,column:3075}},"32":{start:{line:1,column:2970},end:{line:1,column:2971}},"33":{start:{line:1,column:2974},end:{line:1,column:2977}},"34":{start:{line:1,column:2978},end:{line:1,column:3074}},"35":{start:{line:1,column:3092},end:{line:1,column:3170}},"36":{start:{line:1,column:3178},end:{line:2,column:107}},"37":{start:{line:1,column:3215},end:{line:1,column:3219}},"38":{start:{line:1,column:3235},end:{line:1,column:3239}},"39":{start:{line:1,column:3270},end:{line:1,column:3274}},"40":{start:{line:1,column:3286},end:{line:1,column:3290}},"41":{start:{line:1,column:3299},end:{line:1,column:3482}},"42":{start:{line:1,column:3486},end:{line:1,column:3540}},"43":{start:{line:1,column:3546},end:{line:1,column:3633}},"44":{start:{line:1,column:3559},end:{line:1,column:3568}},"45":{start:{line:1,column:3569},end:{line:1,column:3631}},"46":{start:{line:1,column:3648},end:{line:1,column:3683}},"47":{start:{line:1,column:3654},end:{line:1,column:3682}},"48":{start:{line:1,column:3694},end:{line:1,column:3725}},"49":{start:{line:1,column:3700},end:{line:1,column:3724}},"50":{start:{line:1,column:3738},end:{line:1,column:3770}},"51":{start:{line:1,column:3744},end:{line:1,column:3769}},"52":{start:{line:1,column:3782},end:{line:1,column:3963}},"53":{start:{line:1,column:3921},end:{line:1,column:3961}},"54":{start:{line:1,column:3977},end:{line:1,column:4020}},"55":{start:{line:1,column:4034},end:{line:1,column:4072}},"56":{start:{line:1,column:4090},end:{line:1,column:4132}},"57":{start:{line:1,column:4150},end:{line:1,column:4179}},"58":{start:{line:1,column:4162},end:{line:1,column:4178}},"59":{start:{line:1,column:4197},end:{line:2,column:94}},"60":{start:{line:1,column:7160},end:{line:1,column:7496}},"61":{start:{line:1,column:7439},end:{line:1,column:7495}},"62":{start:{line:2,column:95},end:{line:2,column:103}}},fnMap:{"0":{name:"(anonymous_0)",decl:{start:{line:1,column:739},end:{line:1,column:740}},loc:{start:{line:1,column:746},end:{line:1,column:750}},line:1},"1":{name:"O",decl:{start:{line:1,column:760},end:{line:1,column:761}},loc:{start:{line:1,column:766},end:{line:1,column:873}},line:1},"2":{name:"q",decl:{start:{line:1,column:882},end:{line:1,column:883}},loc:{start:{line:1,column:888},end:{line:1,column:1015}},line:1},"3":{name:"H",decl:{start:{line:1,column:1024},end:{line:1,column:1025}},loc:{start:{line:1,column:1030},end:{line:1,column:1122}},line:1},"4":{name:"U",decl:{start:{line:1,column:1131},end:{line:1,column:1132}},loc:{start:{line:1,column:1137},end:{line:1,column:1353}},line:1},"5":{name:"J",decl:{start:{line:1,column:1362},end:{line:1,column:1363}},loc:{start:{line:1,column:1368},end:{line:1,column:2290}},line:1},"6":{name:"(anonymous_6)",decl:{start:{line:1,column:1635},end:{line:1,column:1636}},loc:{start:{line:1,column:1645},end:{line:1,column:1702}},line:1},"7":{name:"Q",decl:{start:{line:1,column:2299},end:{line:1,column:2300}},loc:{start:{line:1,column:2305},end:{line:1,column:2865}},line:1},"8":{name:"(anonymous_8)",decl:{start:{line:1,column:2422},end:{line:1,column:2423}},loc:{start:{line:1,column:2432},end:{line:1,column:2478}},line:1},"9":{name:"(anonymous_9)",decl:{start:{line:1,column:2555},end:{line:1,column:2556}},loc:{start:{line:1,column:2565},end:{line:1,column:2607}},line:1},"10":{name:"K",decl:{start:{line:1,column:2874},end:{line:1,column:2875}},loc:{start:{line:1,column:2880},end:{line:1,column:3076}},line:1},"11":{name:"W",decl:{start:{line:1,column:3085},end:{line:1,column:3086}},loc:{start:{line:1,column:3091},end:{line:1,column:3171}},line:1},"12":{name:"(anonymous_12)",decl:{start:{line:1,column:3179},end:{line:1,column:3180}},loc:{start:{line:1,column:3183},end:{line:2,column:104}},line:1},"13":{name:"(anonymous_13)",decl:{start:{line:1,column:3548},end:{line:1,column:3549}},loc:{start:{line:1,column:3552},end:{line:1,column:3632}},line:1},"14":{name:"(anonymous_14)",decl:{start:{line:1,column:3650},end:{line:1,column:3651}},loc:{start:{line:1,column:3654},end:{line:1,column:3682}},line:1},"15":{name:"(anonymous_15)",decl:{start:{line:1,column:3696},end:{line:1,column:3697}},loc:{start:{line:1,column:3700},end:{line:1,column:3724}},line:1},"16":{name:"(anonymous_16)",decl:{start:{line:1,column:3740},end:{line:1,column:3741}},loc:{start:{line:1,column:3744},end:{line:1,column:3769}},line:1},"17":{name:"(anonymous_17)",decl:{start:{line:1,column:3771},end:{line:1,column:3772}},loc:{start:{line:1,column:3781},end:{line:1,column:3964}},line:1},"18":{name:"(anonymous_18)",decl:{start:{line:1,column:3916},end:{line:1,column:3917}},loc:{start:{line:1,column:3920},end:{line:1,column:3962}},line:1},"19":{name:"(anonymous_19)",decl:{start:{line:1,column:3964},end:{line:1,column:3965}},loc:{start:{line:1,column:3976},end:{line:1,column:4021}},line:1},"20":{name:"(anonymous_20)",decl:{start:{line:1,column:4021},end:{line:1,column:4022}},loc:{start:{line:1,column:4033},end:{line:1,column:4073}},line:1},"21":{name:"(anonymous_21)",decl:{start:{line:1,column:4073},end:{line:1,column:4074}},loc:{start:{line:1,column:4089},end:{line:1,column:4133}},line:1},"22":{name:"(anonymous_22)",decl:{start:{line:1,column:4150},end:{line:1,column:4151}},loc:{start:{line:1,column:4161},end:{line:1,column:4179}},line:1},"23":{name:"(anonymous_23)",decl:{start:{line:1,column:7146},end:{line:1,column:7147}},loc:{start:{line:1,column:7159},end:{line:1,column:7497}},line:1}},branchMap:{"0":{loc:{start:{line:1,column:767},end:{line:1,column:872}},type:"if",locations:[{start:{line:1,column:767},end:{line:1,column:872}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"1":{loc:{start:{line:1,column:770},end:{line:1,column:813}},type:"binary-expr",locations:[{start:{line:1,column:770},end:{line:1,column:773}},{start:{line:1,column:776},end:{line:1,column:812}}],line:1},"2":{loc:{start:{line:1,column:889},end:{line:1,column:1014}},type:"if",locations:[{start:{line:1,column:889},end:{line:1,column:1014}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"3":{loc:{start:{line:1,column:892},end:{line:1,column:975}},type:"binary-expr",locations:[{start:{line:1,column:892},end:{line:1,column:895}},{start:{line:1,column:898},end:{line:1,column:974}}],line:1},"4":{loc:{start:{line:1,column:1031},end:{line:1,column:1121}},type:"binary-expr",locations:[{start:{line:1,column:1031},end:{line:1,column:1034}},{start:{line:1,column:1037},end:{line:1,column:1120}}],line:1},"5":{loc:{start:{line:1,column:1138},end:{line:1,column:1352}},type:"binary-expr",locations:[{start:{line:1,column:1138},end:{line:1,column:1141}},{start:{line:1,column:1144},end:{line:1,column:1351}}],line:1},"6":{loc:{start:{line:1,column:1369},end:{line:1,column:1712}},type:"if",locations:[{start:{line:1,column:1369},end:{line:1,column:1712}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"7":{loc:{start:{line:1,column:1712},end:{line:1,column:2289}},type:"if",locations:[{start:{line:1,column:1712},end:{line:1,column:2289}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"8":{loc:{start:{line:1,column:1844},end:{line:1,column:2103}},type:"cond-expr",locations:[{start:{line:1,column:1856},end:{line:1,column:1981}},{start:{line:1,column:1982},end:{line:1,column:2103}}],line:1},"9":{loc:{start:{line:1,column:2194},end:{line:1,column:2225}},type:"cond-expr",locations:[{start:{line:1,column:2206},end:{line:1,column:2215}},{start:{line:1,column:2216},end:{line:1,column:2225}}],line:1},"10":{loc:{start:{line:1,column:2306},end:{line:1,column:2635}},type:"if",locations:[{start:{line:1,column:2306},end:{line:1,column:2635}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"11":{loc:{start:{line:1,column:2635},end:{line:1,column:2864}},type:"if",locations:[{start:{line:1,column:2635},end:{line:1,column:2864}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"12":{loc:{start:{line:1,column:2881},end:{line:1,column:3075}},type:"if",locations:[{start:{line:1,column:2881},end:{line:1,column:3075}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"13":{loc:{start:{line:1,column:2884},end:{line:1,column:2958}},type:"binary-expr",locations:[{start:{line:1,column:2884},end:{line:1,column:2887}},{start:{line:1,column:2890},end:{line:1,column:2957}}],line:1},"14":{loc:{start:{line:1,column:2980},end:{line:1,column:2999}},type:"cond-expr",locations:[{start:{line:1,column:2995},end:{line:1,column:2996}},{start:{line:1,column:2997},end:{line:1,column:2999}}],line:1},"15":{loc:{start:{line:1,column:3007},end:{line:1,column:3025}},type:"cond-expr",locations:[{start:{line:1,column:3021},end:{line:1,column:3022}},{start:{line:1,column:3023},end:{line:1,column:3025}}],line:1},"16":{loc:{start:{line:1,column:3033},end:{line:1,column:3073}},type:"cond-expr",locations:[{start:{line:1,column:3070},end:{line:1,column:3071}},{start:{line:1,column:3072},end:{line:1,column:3073}}],line:1},"17":{loc:{start:{line:1,column:3033},end:{line:1,column:3069}},type:"binary-expr",locations:[{start:{line:1,column:3033},end:{line:1,column:3052}},{start:{line:1,column:3054},end:{line:1,column:3069}}],line:1},"18":{loc:{start:{line:1,column:3092},end:{line:1,column:3170}},type:"binary-expr",locations:[{start:{line:1,column:3092},end:{line:1,column:3095}},{start:{line:1,column:3098},end:{line:1,column:3169}}],line:1},"19":{loc:{start:{line:1,column:3576},end:{line:1,column:3631}},type:"cond-expr",locations:[{start:{line:1,column:3578},end:{line:1,column:3628}},{start:{line:1,column:3629},end:{line:1,column:3631}}],line:1},"20":{loc:{start:{line:1,column:3654},end:{line:1,column:3682}},type:"binary-expr",locations:[{start:{line:1,column:3654},end:{line:1,column:3678}},{start:{line:1,column:3680},end:{line:1,column:3682}}],line:1},"21":{loc:{start:{line:1,column:3700},end:{line:1,column:3724}},type:"binary-expr",locations:[{start:{line:1,column:3700},end:{line:1,column:3720}},{start:{line:1,column:3722},end:{line:1,column:3724}}],line:1},"22":{loc:{start:{line:1,column:3744},end:{line:1,column:3769}},type:"binary-expr",locations:[{start:{line:1,column:3744},end:{line:1,column:3766}},{start:{line:1,column:3768},end:{line:1,column:3769}}],line:1},"23":{loc:{start:{line:1,column:4173},end:{line:1,column:4177}},type:"binary-expr",locations:[{start:{line:1,column:4173},end:{line:1,column:4174}},{start:{line:1,column:4176},end:{line:1,column:4177}}],line:1},"24":{loc:{start:{line:1,column:7160},end:{line:1,column:7496}},type:"if",locations:[{start:{line:1,column:7160},end:{line:1,column:7496}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"25":{loc:{start:{line:1,column:7163},end:{line:1,column:7427}},type:"binary-expr",locations:[{start:{line:1,column:7163},end:{line:1,column:7166}},{start:{line:1,column:7169},end:{line:1,column:7426}}],line:1},"26":{loc:{start:{line:1,column:7446},end:{line:1,column:7468}},type:"cond-expr",locations:[{start:{line:1,column:7464},end:{line:1,column:7465}},{start:{line:1,column:7466},end:{line:1,column:7468}}],line:1},"27":{loc:{start:{line:1,column:7476},end:{line:1,column:7492}},type:"cond-expr",locations:[{start:{line:1,column:7487},end:{line:1,column:7489}},{start:{line:1,column:7490},end:{line:1,column:7492}}],line:1}},s:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0},f:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0},b:{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0],"9":[0,0],"10":[0,0],"11":[0,0],"12":[0,0],"13":[0,0],"14":[0,0],"15":[0,0],"16":[0,0],"17":[0,0],"18":[0,0],"19":[0,0],"20":[0,0],"21":[0,0],"22":[0,0],"23":[0,0],"24":[0,0],"25":[0,0],"26":[0,0],"27":[0,0]},inputSourceMap:{version:3,sources:["src/app/features/alarm-management/components/alarm-page-management-component/alarm-page-management-component.ts","src/app/features/alarm-management/components/alarm-page-management-component/alarm-page-management-component.html"],sourcesContent:["import { ChangeDetectionStrategy, Component, DestroyRef, computed, OnInit, inject } from '@angular/core';\nimport { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';\nimport { AlarmListVm } from '../../models/alarm-list-vm.model';\nimport { AlarmManagementService } from '../../services/alarm-management.service';\nimport { AlarmManagementTablePresenterService } from '../../services/alarm-management-table-presenter.service';\nimport { AlarmManagementRefreshService } from '../../../../core/alarm/services/alarm-management-refresh.service';\nimport { AlarmTableShellComponent } from '../../../../shared/components/alarm-table/alarm-table-shell.component';\nimport { AlarmPriorityIndicatorComponent } from '../../../../shared/components/alarm-table/alarm-priority-indicator.component';\nimport { AlarmActionButtonComponent } from '../../../../shared/components/alarm-table/alarm-action-button.component';\nimport { ElapsedTimePipe } from '../../../../shared/pipes/elapsed-time.pipe';\nimport { AlarmTableColumn } from '../../../../shared/models/alarm-table.model';\n\n@Component({\n selector: 'app-alarm-page-management-component',\n imports: [AlarmTableShellComponent, AlarmPriorityIndicatorComponent, AlarmActionButtonComponent, ElapsedTimePipe],\n templateUrl: './alarm-page-management-component.html',\n styleUrl: './alarm-page-management-component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AlarmPageManagementComponent implements OnInit {\n private readonly alarmManagementService = inject(AlarmManagementService);\n private readonly tablePresenter = inject(AlarmManagementTablePresenterService);\n private readonly alarmManagementRefreshService = inject(AlarmManagementRefreshService);\n private readonly destroyRef = inject(DestroyRef);\n\n public readonly columns: readonly AlarmTableColumn[] = [\n { id: 'priority', label: 'Priorit\xE0' },\n { id: 'name', label: 'Nome' },\n { id: 'location', label: 'Luogo' },\n { id: 'status', label: 'Stato' },\n { id: 'openedAt', label: 'Scattato' },\n { id: 'actions', label: 'Azioni' },\n ];\n\n public readonly vm = toSignal(this.alarmManagementService.vm$, {\n initialValue: null,\n });\n\n public readonly rows = computed(() => {\n const vmState = this.vm();\n if (!vmState) {\n return [];\n }\n\n return this.tablePresenter.toRows(vmState.alarms, vmState.resolvingId);\n });\n\n public readonly canGoPrevious = computed(() => this.vm()?.canGoPrevious ?? false);\n public readonly canGoNext = computed(() => this.vm()?.canGoNext ?? false);\n public readonly currentPage = computed(() => this.vm()?.currentPage ?? 1);\n\n public ngOnInit(): void {\n this.alarmManagementService.initialize();\n\n this.alarmManagementRefreshService\n .getRefreshRequested$()\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n this.alarmManagementService.initialize();\n });\n }\n\n public onResolve(activeAlarmId: string): void {\n this.alarmManagementService.resolveAlarm(activeAlarmId);\n }\n\n public onNextPage(): void {\n this.alarmManagementService.nextPage();\n }\n\n public onPreviousPage(): void {\n this.alarmManagementService.previousPage();\n }\n}\n","
\n
\n
\n

Allarmi

\n

Gestione allarmi attivi

\n

Monitora gli eventi e marca gli allarmi gia presi in carico.

\n
\n\n @if (rows().length > 0) {\n \n \n {{ rows().length }} in tabella\n \n }\n
\n\n @if (vm(); as vmState) {\n @if (vmState.resolveError) {\n
\n \n \n \n {{ vmState.resolveError }}\n
\n }\n\n @if (vmState.isResolving) {\n
\n
\n Risoluzione allarme in corso...\n
\n }\n\n @if (rows().length === 0 && !vmState.resolveError) {\n \n
\n \n \n \n
\n

Nessun allarme attivo al momento.

\n

Quando verranno rilevati nuovi eventi, compariranno qui.

\n \n } @else {\n \n @for (row of rows(); track row.id) {\n \n \n \n \n {{ row.name }}\n {{ row.location }}\n \n \n {{ row.status }}\n \n \n {{ row.openedAt | elapsedTime }}\n \n \n \n \n }\n \n\n \n }\n } @else {\n
\n
\n Caricamento allarmi in corso...\n
\n }\n
"],mappings:"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",names:["\u0275\u0275elementStart","\u0275\u0275element","\u0275\u0275text","\u0275\u0275elementEnd","\u0275\u0275advance","\u0275\u0275textInterpolate1","ctx_r0","rows","length","\u0275\u0275textInterpolate","vmState_r2","resolveError","\u0275\u0275listener","row_r5","\u0275\u0275restoreView","_r4","$implicit","\u0275\u0275nextContext","\u0275\u0275resetView","onResolve","id","\u0275\u0275property","priority","name","location","\u0275\u0275classMap","isManaged","status","\u0275\u0275pipeBind1","openedAt","actionLabel","isActionDisabled","actionAriaLabel","\u0275\u0275repeaterCreate","AlarmPageManagementComponent_Conditional_10_Conditional_3_For_2_Template","_forTrack0","_r3","onPreviousPage","onNextPage","columns","\u0275\u0275repeater","canGoPrevious","currentPage","canGoNext","\u0275\u0275conditionalCreate","AlarmPageManagementComponent_Conditional_10_Conditional_0_Template","AlarmPageManagementComponent_Conditional_10_Conditional_1_Template","AlarmPageManagementComponent_Conditional_10_Conditional_2_Template","AlarmPageManagementComponent_Conditional_10_Conditional_3_Template","\u0275\u0275conditional","isResolving","AlarmPageManagementComponent","alarmManagementService","inject","AlarmManagementService","tablePresenter","AlarmManagementTablePresenterService","alarmManagementRefreshService","AlarmManagementRefreshService","destroyRef","DestroyRef","label","vm","toSignal","vm$","initialValue","computed","vmState","toRows","alarms","resolvingId","ngOnInit","initialize","getRefreshRequested$","pipe","takeUntilDestroyed","subscribe","activeAlarmId","resolveAlarm","nextPage","previousPage","selectors","decls","vars","consts","template","rf","ctx","AlarmPageManagementComponent_Conditional_9_Template","AlarmPageManagementComponent_Conditional_10_Template","AlarmPageManagementComponent_Conditional_11_Template","tmp_1_0","AlarmTableShellComponent","AlarmPriorityIndicatorComponent","AlarmActionButtonComponent","ElapsedTimePipe","styles","changeDetection"]},_coverageSchema:"1a1c01bbd47fc00a2c39e90264f33305004495a9",hash:"77b92ef6e7dcb9b4186143c126259523f3e22dcd"};var coverage=global[gcv]||(global[gcv]={});if(!coverage[path]||coverage[path].hash!==hash){coverage[path]=coverageData;}var actualCoverage=coverage[path];{// @ts-ignore +cov_yv6cytx4t=function(){return actualCoverage;};}return actualCoverage;}cov_yv6cytx4t();import{a as z,b as I}from"./chunk-SM2XKLUA.js";import{a as B}from"./chunk-O5PEFBSV.js";import{a as j}from"./chunk-GNETQW7L.js";import{a as L}from"./chunk-SNRTUDXT.js";import{a as $}from"./chunk-V5PG7NSI.js";import"./chunk-CFHT7CZE.js";import{a as V,b as D}from"./chunk-NAQGW5AE.js";import"./chunk-VIBKONAW.js";import{a as G}from"./chunk-JOEDXNZS.js";import"./chunk-CX4DL26R.js";import"./chunk-ZZLQRDHJ.js";import"./chunk-65RKWSY3.js";import"./chunk-2S5V5XEE.js";import{$ as y,Ab as r,Bb as v,Cb as h,Ib as R,Jb as N,Ka as w,Pb as x,Q as _,V as b,W as f,Wa as A,X as S,Y as M,Ya as c,_a as p,ab as E,bb as T,cb as g,db as a,eb as n,fb as s,jb as P,nb as C,pb as d,wa as i,zb as k}from"./chunk-RYTNMYZW.js";import"./chunk-VCZGUBMY.js";cov_yv6cytx4t().s[0]++;var F=(t,o)=>{cov_yv6cytx4t().f[0]++;cov_yv6cytx4t().s[1]++;return o.id;};function O(t,o){cov_yv6cytx4t().f[1]++;cov_yv6cytx4t().s[2]++;if((cov_yv6cytx4t().b[1][0]++,t&1)&&(cov_yv6cytx4t().b[1][1]++,a(0,"span",5),s(1,"span",7),r(2),n()),t&2){cov_yv6cytx4t().b[0][0]++;let e=(cov_yv6cytx4t().s[3]++,d());cov_yv6cytx4t().s[4]++;i(2),h(" ",e.rows().length," in tabella ");}else{cov_yv6cytx4t().b[0][1]++;}}function q(t,o){cov_yv6cytx4t().f[2]++;cov_yv6cytx4t().s[5]++;if((cov_yv6cytx4t().b[3][0]++,t&1)&&(cov_yv6cytx4t().b[3][1]++,a(0,"div",8),S(),a(1,"svg",11),s(2,"path",12),n(),M(),a(3,"span"),r(4),n()()),t&2){cov_yv6cytx4t().b[2][0]++;let e=(cov_yv6cytx4t().s[6]++,d());cov_yv6cytx4t().s[7]++;i(4),v(e.resolveError);}else{cov_yv6cytx4t().b[2][1]++;}}function H(t,o){cov_yv6cytx4t().f[3]++;cov_yv6cytx4t().s[8]++;(cov_yv6cytx4t().b[4][0]++,t&1)&&(cov_yv6cytx4t().b[4][1]++,a(0,"div",9),s(1,"div",13),a(2,"span"),r(3,"Risoluzione allarme in corso..."),n()());}function U(t,o){cov_yv6cytx4t().f[4]++;cov_yv6cytx4t().s[9]++;(cov_yv6cytx4t().b[5][0]++,t&1)&&(cov_yv6cytx4t().b[5][1]++,a(0,"div",10)(1,"div",14),S(),a(2,"svg",15),s(3,"path",16),n()(),M(),a(4,"p",17),r(5,"Nessun allarme attivo al momento."),n(),a(6,"p",18),r(7,"Quando verranno rilevati nuovi eventi, compariranno qui."),n()());}function J(t,o){cov_yv6cytx4t().f[5]++;cov_yv6cytx4t().s[10]++;if(t&1){cov_yv6cytx4t().b[6][0]++;let e=(cov_yv6cytx4t().s[11]++,P());cov_yv6cytx4t().s[12]++;a(0,"tr",20)(1,"td",25),s(2,"app-alarm-priority-indicator",26),n(),a(3,"td",27),r(4),n(),a(5,"td",28),r(6),n(),a(7,"td",25)(8,"span"),r(9),n()(),a(10,"td",28),r(11),R(12,"elapsedTime"),n(),a(13,"td",25)(14,"app-alarm-action-button",29),C("pressed",function(){cov_yv6cytx4t().f[6]++;let m=(cov_yv6cytx4t().s[13]++,b(e).$implicit),u=(cov_yv6cytx4t().s[14]++,d(3));cov_yv6cytx4t().s[15]++;return f(u.onResolve(m.id));}),n()()();}else{cov_yv6cytx4t().b[6][1]++;}cov_yv6cytx4t().s[16]++;if(t&2){cov_yv6cytx4t().b[7][0]++;let e=(cov_yv6cytx4t().s[17]++,o.$implicit);cov_yv6cytx4t().s[18]++;A("data-testid","alarm-row-"+e.id),i(2),g("priority",e.priority),i(2),v(e.name),i(2),v(e.location),i(2),k(e.isManaged?(cov_yv6cytx4t().b[8][0]++,"inline-flex items-center rounded-full border border-slate-200 bg-slate-100 px-2.5 py-1 text-xs font-semibold text-slate-600"):(cov_yv6cytx4t().b[8][1]++,"inline-flex items-center rounded-full border border-rose-700 bg-rose-50 px-2.5 py-1 text-xs font-semibold text-rose-700")),i(),h(" ",e.status," "),i(2),v(N(12,12,e.openedAt)),i(3),g("label",e.actionLabel)("tone",e.isManaged?(cov_yv6cytx4t().b[9][0]++,"neutral"):(cov_yv6cytx4t().b[9][1]++,"primary"))("disabled",e.isActionDisabled)("ariaLabel",e.actionAriaLabel);}else{cov_yv6cytx4t().b[7][1]++;}}function Q(t,o){cov_yv6cytx4t().f[7]++;cov_yv6cytx4t().s[19]++;if(t&1){cov_yv6cytx4t().b[10][0]++;let e=(cov_yv6cytx4t().s[20]++,P());cov_yv6cytx4t().s[21]++;a(0,"app-alarm-table-shell",19),E(1,J,15,14,"tr",20,F),n(),a(3,"nav",21)(4,"button",22),C("click",function(){cov_yv6cytx4t().f[8]++;cov_yv6cytx4t().s[22]++;b(e);let m=(cov_yv6cytx4t().s[23]++,d(2));cov_yv6cytx4t().s[24]++;return f(m.onPreviousPage());}),r(5," Precedente "),n(),a(6,"span",23),r(7),n(),a(8,"button",24),C("click",function(){cov_yv6cytx4t().f[9]++;cov_yv6cytx4t().s[25]++;b(e);let m=(cov_yv6cytx4t().s[26]++,d(2));cov_yv6cytx4t().s[27]++;return f(m.onNextPage());}),r(9," Successiva "),n()();}else{cov_yv6cytx4t().b[10][1]++;}cov_yv6cytx4t().s[28]++;if(t&2){cov_yv6cytx4t().b[11][0]++;let e=(cov_yv6cytx4t().s[29]++,d(2));cov_yv6cytx4t().s[30]++;g("title","Allarmi attivi")("caption","Tabella allarmi attivi")("columns",e.columns),i(),T(e.rows()),i(3),g("disabled",!e.canGoPrevious()),i(3),h("Pagina ",e.currentPage()," "),i(),g("disabled",!e.canGoNext());}else{cov_yv6cytx4t().b[11][1]++;}}function K(t,o){cov_yv6cytx4t().f[10]++;cov_yv6cytx4t().s[31]++;if((cov_yv6cytx4t().b[13][0]++,t&1)&&(cov_yv6cytx4t().b[13][1]++,c(0,q,5,1,"div",8),c(1,H,4,0,"div",9),c(2,U,8,0,"div",10)(3,Q,10,6)),t&2){cov_yv6cytx4t().b[12][0]++;let e=(cov_yv6cytx4t().s[32]++,o),l=(cov_yv6cytx4t().s[33]++,d());cov_yv6cytx4t().s[34]++;p(e.resolveError?(cov_yv6cytx4t().b[14][0]++,0):(cov_yv6cytx4t().b[14][1]++,-1)),i(),p(e.isResolving?(cov_yv6cytx4t().b[15][0]++,1):(cov_yv6cytx4t().b[15][1]++,-1)),i(),p((cov_yv6cytx4t().b[17][0]++,l.rows().length===0)&&(cov_yv6cytx4t().b[17][1]++,!e.resolveError)?(cov_yv6cytx4t().b[16][0]++,2):(cov_yv6cytx4t().b[16][1]++,3));}else{cov_yv6cytx4t().b[12][1]++;}}function W(t,o){cov_yv6cytx4t().f[11]++;cov_yv6cytx4t().s[35]++;(cov_yv6cytx4t().b[18][0]++,t&1)&&(cov_yv6cytx4t().b[18][1]++,a(0,"div",6),s(1,"div",30),r(2," Caricamento allarmi in corso... "),n());}var de=(cov_yv6cytx4t().s[36]++,(()=>{cov_yv6cytx4t().f[12]++;class t{alarmManagementService=(cov_yv6cytx4t().s[37]++,_(z));tablePresenter=(cov_yv6cytx4t().s[38]++,_(I));alarmManagementRefreshService=(cov_yv6cytx4t().s[39]++,_(G));destroyRef=(cov_yv6cytx4t().s[40]++,_(y));columns=(cov_yv6cytx4t().s[41]++,[{id:"priority",label:"Priorit\xE0"},{id:"name",label:"Nome"},{id:"location",label:"Luogo"},{id:"status",label:"Stato"},{id:"openedAt",label:"Scattato"},{id:"actions",label:"Azioni"}]);vm=(cov_yv6cytx4t().s[42]++,D(this.alarmManagementService.vm$,{initialValue:null}));rows=(cov_yv6cytx4t().s[43]++,x(()=>{cov_yv6cytx4t().f[13]++;let e=(cov_yv6cytx4t().s[44]++,this.vm());cov_yv6cytx4t().s[45]++;return e?(cov_yv6cytx4t().b[19][0]++,this.tablePresenter.toRows(e.alarms,e.resolvingId)):(cov_yv6cytx4t().b[19][1]++,[]);}));canGoPrevious=(cov_yv6cytx4t().s[46]++,x(()=>{cov_yv6cytx4t().f[14]++;cov_yv6cytx4t().s[47]++;return(cov_yv6cytx4t().b[20][0]++,this.vm()?.canGoPrevious)??(cov_yv6cytx4t().b[20][1]++,!1);}));canGoNext=(cov_yv6cytx4t().s[48]++,x(()=>{cov_yv6cytx4t().f[15]++;cov_yv6cytx4t().s[49]++;return(cov_yv6cytx4t().b[21][0]++,this.vm()?.canGoNext)??(cov_yv6cytx4t().b[21][1]++,!1);}));currentPage=(cov_yv6cytx4t().s[50]++,x(()=>{cov_yv6cytx4t().f[16]++;cov_yv6cytx4t().s[51]++;return(cov_yv6cytx4t().b[22][0]++,this.vm()?.currentPage)??(cov_yv6cytx4t().b[22][1]++,1);}));ngOnInit(){cov_yv6cytx4t().f[17]++;cov_yv6cytx4t().s[52]++;this.alarmManagementService.initialize(),this.alarmManagementRefreshService.getRefreshRequested$().pipe(V(this.destroyRef)).subscribe(()=>{cov_yv6cytx4t().f[18]++;cov_yv6cytx4t().s[53]++;this.alarmManagementService.initialize();});}onResolve(e){cov_yv6cytx4t().f[19]++;cov_yv6cytx4t().s[54]++;this.alarmManagementService.resolveAlarm(e);}onNextPage(){cov_yv6cytx4t().f[20]++;cov_yv6cytx4t().s[55]++;this.alarmManagementService.nextPage();}onPreviousPage(){cov_yv6cytx4t().f[21]++;cov_yv6cytx4t().s[56]++;this.alarmManagementService.previousPage();}static ɵfac=(cov_yv6cytx4t().s[57]++,function(l){cov_yv6cytx4t().f[22]++;cov_yv6cytx4t().s[58]++;return new((cov_yv6cytx4t().b[23][0]++,l)||(cov_yv6cytx4t().b[23][1]++,t))();});static ɵcmp=(cov_yv6cytx4t().s[59]++,w({type:t,selectors:[["app-alarm-page-management-component"]],decls:12,vars:2,consts:[["aria-label","Gestione allarmi",1,"alarm-management-page","care-page","care-dot-grid","sidebar-page"],[1,"care-page__hero"],[1,"care-eyebrow"],[1,"care-title"],[1,"care-subtitle"],[1,"care-page__header-badge"],["aria-live","polite",1,"rounded-xl","border","border-slate-200","bg-white","px-4","py-3","text-sm","text-slate-600","shadow-sm"],[1,"care-page__header-badge-dot"],["role","alert","aria-live","assertive",1,"alarm-management__error","flex","items-center","gap-3","rounded-xl","border","border-red-200","bg-red-50","px-4","py-3","text-sm","text-red-700","shadow-sm"],["aria-live","polite",1,"alarm-management__status","flex","items-center","gap-3","rounded-xl","border","border-sky-200","bg-sky-50","px-4","py-3","text-sm","font-medium","text-sky-700","shadow-sm"],[1,"alarm-management__empty","mt-3","flex","flex-col","items-center","justify-center","rounded-2xl","border","border-slate-200","bg-white/70","p-14","text-center","shadow-sm","backdrop-blur-sm"],["fill","currentColor","viewBox","0 0 20 20","aria-hidden","true",1,"h-4","w-4","flex-shrink-0","text-red-500"],["fill-rule","evenodd","d","M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7 4a1 1 0 11-2 0 1 1 0 012 0zm-1-9a1 1 0 00-1 1v4a1 1 0 102 0V6a1 1 0 00-1-1z","clip-rule","evenodd"],[1,"h-4","w-4","animate-spin","rounded-full","border-2","border-sky-200","border-t-sky-600"],[1,"flex","h-14","w-14","items-center","justify-center","rounded-2xl","bg-slate-100"],["fill","none","viewBox","0 0 24 24","stroke-width","1.5","stroke","currentColor","aria-hidden","true",1,"h-7","w-7","text-slate-400"],["stroke-linecap","round","stroke-linejoin","round","d","M15 19.128a9.38 9.38 0 002.625.372 9.337 9.337 0 004.121-.952 4.125 4.125 0 00-7.533-2.493M15 19.128v-.003c0-1.113-.285-2.16-.786-3.07M15 19.128v.106A12.318 12.318 0 018.624 21c-2.331 0-4.512-.645-6.374-1.766l-.001-.109a6.375 6.375 0 0111.964-3.07M12 6.375a3.375 3.375 0 11-6.75 0 3.375 3.375 0 016.75 0zm8.25 2.25a2.625 2.625 0 11-5.25 0 2.625 2.625 0 015.25 0z"],[1,"mt-4","text-sm","font-semibold","text-slate-700"],[1,"mt-1","text-xs","text-slate-500"],[3,"title","caption","columns"],[1,"group","transition-colors","hover:bg-slate-50/80"],["aria-label","Navigazione pagine allarmi attivi",1,"care-pagination"],["type","button","aria-label","Pagina precedente allarmi attivi",1,"care-pagination__button",3,"click","disabled"],["aria-live","polite",1,"care-pagination__status"],["type","button","aria-label","Pagina successiva allarmi attivi",1,"care-pagination__button",3,"click","disabled"],[1,"px-5","py-3.5","align-middle"],[3,"priority"],[1,"px-5","py-3.5","align-middle","text-sm","font-semibold","text-slate-900"],[1,"px-5","py-3.5","align-middle","text-sm","text-slate-700"],[3,"pressed","label","tone","disabled","ariaLabel"],[1,"h-4","w-4","animate-spin","rounded-full","border-2","border-slate-200","border-t-slate-500"]],template:function(l,m){cov_yv6cytx4t().f[23]++;cov_yv6cytx4t().s[60]++;if((cov_yv6cytx4t().b[25][0]++,l&1)&&(cov_yv6cytx4t().b[25][1]++,a(0,"section",0)(1,"header",1)(2,"div")(3,"p",2),r(4,"Allarmi"),n(),a(5,"h1",3),r(6,"Gestione allarmi attivi"),n(),a(7,"p",4),r(8,"Monitora gli eventi e marca gli allarmi gia presi in carico."),n()(),c(9,O,3,1,"span",5),n(),c(10,K,4,3)(11,W,3,0,"div",6),n()),l&2){cov_yv6cytx4t().b[24][0]++;let u;cov_yv6cytx4t().s[61]++;i(9),p(m.rows().length>0?(cov_yv6cytx4t().b[26][0]++,9):(cov_yv6cytx4t().b[26][1]++,-1)),i(),p((u=m.vm())?(cov_yv6cytx4t().b[27][0]++,10):(cov_yv6cytx4t().b[27][1]++,11),u);}else{cov_yv6cytx4t().b[24][1]++;}},dependencies:[L,$,j,B],styles:[`.alarm-management__status[_ngcontent-%COMP%], .alarm-management__error[_ngcontent-%COMP%], .alarm-management__empty[_ngcontent-%COMP%]{margin-top:.75rem} +/*# sourceMappingURL=alarm-page-management-component-VFEDTETJ.css.map */`],changeDetection:0}));}cov_yv6cytx4t().s[62]++;return t;})());export{de as AlarmPageManagementComponent};//# sourceMappingURL=chunk-X4Y2U43G.js.map +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJhIiwicyIsInIiLCJuIiwidCIsImNvdl95djZjeXR4NHQiLCJiIiwiZSIsImQiLCJpIiwiaCIsInJvd3MiLCJsZW5ndGgiLCJxIiwibyIsImYiLCJTIiwiTSIsInYiLCJyZXNvbHZlRXJyb3IiLCJIIiwiVSIsIkoiLCJQIiwiUiIsIkMiLCJtIiwiJGltcGxpY2l0IiwidSIsIm9uUmVzb2x2ZSIsImlkIiwiQSIsImciLCJwcmlvcml0eSIsIm5hbWUiLCJsb2NhdGlvbiIsImsiLCJpc01hbmFnZWQiLCJzdGF0dXMiLCJOIiwib3BlbmVkQXQiLCJhY3Rpb25MYWJlbCIsImlzQWN0aW9uRGlzYWJsZWQiLCJhY3Rpb25BcmlhTGFiZWwiLCJRIiwiRSIsIkYiLCJvblByZXZpb3VzUGFnZSIsIm9uTmV4dFBhZ2UiLCJjb2x1bW5zIiwiVCIsImNhbkdvUHJldmlvdXMiLCJjdXJyZW50UGFnZSIsImNhbkdvTmV4dCIsIksiLCJjIiwibCIsInAiLCJpc1Jlc29sdmluZyIsIlciLCJkZSIsImFsYXJtTWFuYWdlbWVudFNlcnZpY2UiLCJfIiwieiIsInRhYmxlUHJlc2VudGVyIiwiSSIsImFsYXJtTWFuYWdlbWVudFJlZnJlc2hTZXJ2aWNlIiwiRyIsImRlc3Ryb3lSZWYiLCJ5IiwibGFiZWwiLCJ2bSIsIkQiLCJ2bSQiLCJpbml0aWFsVmFsdWUiLCJ4IiwidG9Sb3dzIiwiYWxhcm1zIiwicmVzb2x2aW5nSWQiLCJuZ09uSW5pdCIsImluaXRpYWxpemUiLCJnZXRSZWZyZXNoUmVxdWVzdGVkJCIsInBpcGUiLCJWIiwic3Vic2NyaWJlIiwicmVzb2x2ZUFsYXJtIiwibmV4dFBhZ2UiLCJwcmV2aW91c1BhZ2UiLCLJtWZhYyIsIsm1Y21wIiwidyIsInR5cGUiLCJzZWxlY3RvcnMiLCJkZWNscyIsInZhcnMiLCJjb25zdHMiLCJ0ZW1wbGF0ZSIsIk8iLCJkZXBlbmRlbmNpZXMiLCJMIiwiJCIsImoiLCJCIiwic3R5bGVzIiwiY2hhbmdlRGV0ZWN0aW9uIiwiQWxhcm1QYWdlTWFuYWdlbWVudENvbXBvbmVudCJdLCJzb3VyY2VzIjpbInNyYy9hcHAvZmVhdHVyZXMvYWxhcm0tbWFuYWdlbWVudC9jb21wb25lbnRzL2FsYXJtLXBhZ2UtbWFuYWdlbWVudC1jb21wb25lbnQvYWxhcm0tcGFnZS1tYW5hZ2VtZW50LWNvbXBvbmVudC50cyIsInNyYy9hcHAvZmVhdHVyZXMvYWxhcm0tbWFuYWdlbWVudC9jb21wb25lbnRzL2FsYXJtLXBhZ2UtbWFuYWdlbWVudC1jb21wb25lbnQvYWxhcm0tcGFnZS1tYW5hZ2VtZW50LWNvbXBvbmVudC5odG1sIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIERlc3Ryb3lSZWYsIGNvbXB1dGVkLCBPbkluaXQsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkLCB0b1NpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IEFsYXJtTGlzdFZtIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2FsYXJtLWxpc3Qtdm0ubW9kZWwnO1xuaW1wb3J0IHsgQWxhcm1NYW5hZ2VtZW50U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2FsYXJtLW1hbmFnZW1lbnQuc2VydmljZSc7XG5pbXBvcnQgeyBBbGFybU1hbmFnZW1lbnRUYWJsZVByZXNlbnRlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hbGFybS1tYW5hZ2VtZW50LXRhYmxlLXByZXNlbnRlci5zZXJ2aWNlJztcbmltcG9ydCB7IEFsYXJtTWFuYWdlbWVudFJlZnJlc2hTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS9hbGFybS9zZXJ2aWNlcy9hbGFybS1tYW5hZ2VtZW50LXJlZnJlc2guc2VydmljZSc7XG5pbXBvcnQgeyBBbGFybVRhYmxlU2hlbGxDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi8uLi9zaGFyZWQvY29tcG9uZW50cy9hbGFybS10YWJsZS9hbGFybS10YWJsZS1zaGVsbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQWxhcm1Qcmlvcml0eUluZGljYXRvckNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uLy4uL3NoYXJlZC9jb21wb25lbnRzL2FsYXJtLXRhYmxlL2FsYXJtLXByaW9yaXR5LWluZGljYXRvci5jb21wb25lbnQnO1xuaW1wb3J0IHsgQWxhcm1BY3Rpb25CdXR0b25Db21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi8uLi9zaGFyZWQvY29tcG9uZW50cy9hbGFybS10YWJsZS9hbGFybS1hY3Rpb24tYnV0dG9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBFbGFwc2VkVGltZVBpcGUgfSBmcm9tICcuLi8uLi8uLi8uLi9zaGFyZWQvcGlwZXMvZWxhcHNlZC10aW1lLnBpcGUnO1xuaW1wb3J0IHsgQWxhcm1UYWJsZUNvbHVtbiB9IGZyb20gJy4uLy4uLy4uLy4uL3NoYXJlZC9tb2RlbHMvYWxhcm0tdGFibGUubW9kZWwnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtYWxhcm0tcGFnZS1tYW5hZ2VtZW50LWNvbXBvbmVudCcsXG4gIGltcG9ydHM6IFtBbGFybVRhYmxlU2hlbGxDb21wb25lbnQsIEFsYXJtUHJpb3JpdHlJbmRpY2F0b3JDb21wb25lbnQsIEFsYXJtQWN0aW9uQnV0dG9uQ29tcG9uZW50LCBFbGFwc2VkVGltZVBpcGVdLFxuICB0ZW1wbGF0ZVVybDogJy4vYWxhcm0tcGFnZS1tYW5hZ2VtZW50LWNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL2FsYXJtLXBhZ2UtbWFuYWdlbWVudC1jb21wb25lbnQuY3NzJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIEFsYXJtUGFnZU1hbmFnZW1lbnRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBwcml2YXRlIHJlYWRvbmx5IGFsYXJtTWFuYWdlbWVudFNlcnZpY2UgPSBpbmplY3QoQWxhcm1NYW5hZ2VtZW50U2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgdGFibGVQcmVzZW50ZXIgPSBpbmplY3QoQWxhcm1NYW5hZ2VtZW50VGFibGVQcmVzZW50ZXJTZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBhbGFybU1hbmFnZW1lbnRSZWZyZXNoU2VydmljZSA9IGluamVjdChBbGFybU1hbmFnZW1lbnRSZWZyZXNoU2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgY29sdW1uczogcmVhZG9ubHkgQWxhcm1UYWJsZUNvbHVtbltdID0gW1xuICAgIHsgaWQ6ICdwcmlvcml0eScsIGxhYmVsOiAnUHJpb3JpdMOgJyB9LFxuICAgIHsgaWQ6ICduYW1lJywgbGFiZWw6ICdOb21lJyB9LFxuICAgIHsgaWQ6ICdsb2NhdGlvbicsIGxhYmVsOiAnTHVvZ28nIH0sXG4gICAgeyBpZDogJ3N0YXR1cycsIGxhYmVsOiAnU3RhdG8nIH0sXG4gICAgeyBpZDogJ29wZW5lZEF0JywgbGFiZWw6ICdTY2F0dGF0bycgfSxcbiAgICB7IGlkOiAnYWN0aW9ucycsIGxhYmVsOiAnQXppb25pJyB9LFxuICBdO1xuXG4gIHB1YmxpYyByZWFkb25seSB2bSA9IHRvU2lnbmFsPEFsYXJtTGlzdFZtIHwgbnVsbD4odGhpcy5hbGFybU1hbmFnZW1lbnRTZXJ2aWNlLnZtJCwge1xuICAgIGluaXRpYWxWYWx1ZTogbnVsbCxcbiAgfSk7XG5cbiAgcHVibGljIHJlYWRvbmx5IHJvd3MgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3Qgdm1TdGF0ZSA9IHRoaXMudm0oKTtcbiAgICBpZiAoIXZtU3RhdGUpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy50YWJsZVByZXNlbnRlci50b1Jvd3Modm1TdGF0ZS5hbGFybXMsIHZtU3RhdGUucmVzb2x2aW5nSWQpO1xuICB9KTtcblxuICBwdWJsaWMgcmVhZG9ubHkgY2FuR29QcmV2aW91cyA9IGNvbXB1dGVkKCgpID0+IHRoaXMudm0oKT8uY2FuR29QcmV2aW91cyA/PyBmYWxzZSk7XG4gIHB1YmxpYyByZWFkb25seSBjYW5Hb05leHQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnZtKCk/LmNhbkdvTmV4dCA/PyBmYWxzZSk7XG4gIHB1YmxpYyByZWFkb25seSBjdXJyZW50UGFnZSA9IGNvbXB1dGVkKCgpID0+IHRoaXMudm0oKT8uY3VycmVudFBhZ2UgPz8gMSk7XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuYWxhcm1NYW5hZ2VtZW50U2VydmljZS5pbml0aWFsaXplKCk7XG5cbiAgICB0aGlzLmFsYXJtTWFuYWdlbWVudFJlZnJlc2hTZXJ2aWNlXG4gICAgICAuZ2V0UmVmcmVzaFJlcXVlc3RlZCQoKVxuICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5hbGFybU1hbmFnZW1lbnRTZXJ2aWNlLmluaXRpYWxpemUoKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG9uUmVzb2x2ZShhY3RpdmVBbGFybUlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmFsYXJtTWFuYWdlbWVudFNlcnZpY2UucmVzb2x2ZUFsYXJtKGFjdGl2ZUFsYXJtSWQpO1xuICB9XG5cbiAgcHVibGljIG9uTmV4dFBhZ2UoKTogdm9pZCB7XG4gICAgdGhpcy5hbGFybU1hbmFnZW1lbnRTZXJ2aWNlLm5leHRQYWdlKCk7XG4gIH1cblxuICBwdWJsaWMgb25QcmV2aW91c1BhZ2UoKTogdm9pZCB7XG4gICAgdGhpcy5hbGFybU1hbmFnZW1lbnRTZXJ2aWNlLnByZXZpb3VzUGFnZSgpO1xuICB9XG59XG4iLCI8c2VjdGlvbiBhcmlhLWxhYmVsPVwiR2VzdGlvbmUgYWxsYXJtaVwiIGNsYXNzPVwiYWxhcm0tbWFuYWdlbWVudC1wYWdlIGNhcmUtcGFnZSBjYXJlLWRvdC1ncmlkIHNpZGViYXItcGFnZVwiPlxuICAgIDxoZWFkZXIgY2xhc3M9XCJjYXJlLXBhZ2VfX2hlcm9cIj5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIDxwIGNsYXNzPVwiY2FyZS1leWVicm93XCI+QWxsYXJtaTwvcD5cbiAgICAgICAgICAgIDxoMSBjbGFzcz1cImNhcmUtdGl0bGVcIj5HZXN0aW9uZSBhbGxhcm1pIGF0dGl2aTwvaDE+XG4gICAgICAgICAgICA8cCBjbGFzcz1cImNhcmUtc3VidGl0bGVcIj5Nb25pdG9yYSBnbGkgZXZlbnRpIGUgbWFyY2EgZ2xpIGFsbGFybWkgZ2lhIHByZXNpIGluIGNhcmljby48L3A+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIEBpZiAocm93cygpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJjYXJlLXBhZ2VfX2hlYWRlci1iYWRnZVwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjYXJlLXBhZ2VfX2hlYWRlci1iYWRnZS1kb3RcIj48L3NwYW4+XG4gICAgICAgICAgICB7eyByb3dzKCkubGVuZ3RoIH19IGluIHRhYmVsbGFcbiAgICAgICAgPC9zcGFuPlxuICAgICAgICB9XG4gICAgPC9oZWFkZXI+XG5cbiAgICBAaWYgKHZtKCk7IGFzIHZtU3RhdGUpIHtcbiAgICBAaWYgKHZtU3RhdGUucmVzb2x2ZUVycm9yKSB7XG4gICAgPGRpdiBjbGFzcz1cImFsYXJtLW1hbmFnZW1lbnRfX2Vycm9yIGZsZXggaXRlbXMtY2VudGVyIGdhcC0zIHJvdW5kZWQteGwgYm9yZGVyIGJvcmRlci1yZWQtMjAwIGJnLXJlZC01MCBweC00IHB5LTMgdGV4dC1zbSB0ZXh0LXJlZC03MDAgc2hhZG93LXNtXCJcbiAgICAgICAgcm9sZT1cImFsZXJ0XCIgYXJpYS1saXZlPVwiYXNzZXJ0aXZlXCI+XG4gICAgICAgIDxzdmcgY2xhc3M9XCJoLTQgdy00IGZsZXgtc2hyaW5rLTAgdGV4dC1yZWQtNTAwXCIgZmlsbD1cImN1cnJlbnRDb2xvclwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICAgICAgICAgIDxwYXRoIGZpbGwtcnVsZT1cImV2ZW5vZGRcIlxuICAgICAgICAgICAgICAgIGQ9XCJNMTggMTBhOCA4IDAgMTEtMTYgMCA4IDggMCAwMTE2IDB6bS03IDRhMSAxIDAgMTEtMiAwIDEgMSAwIDAxMiAwem0tMS05YTEgMSAwIDAwLTEgMXY0YTEgMSAwIDEwMiAwVjZhMSAxIDAgMDAtMS0xelwiXG4gICAgICAgICAgICAgICAgY2xpcC1ydWxlPVwiZXZlbm9kZFwiIC8+XG4gICAgICAgIDwvc3ZnPlxuICAgICAgICA8c3Bhbj57eyB2bVN0YXRlLnJlc29sdmVFcnJvciB9fTwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgICB9XG5cbiAgICBAaWYgKHZtU3RhdGUuaXNSZXNvbHZpbmcpIHtcbiAgICA8ZGl2IGNsYXNzPVwiYWxhcm0tbWFuYWdlbWVudF9fc3RhdHVzIGZsZXggaXRlbXMtY2VudGVyIGdhcC0zIHJvdW5kZWQteGwgYm9yZGVyIGJvcmRlci1za3ktMjAwIGJnLXNreS01MCBweC00IHB5LTMgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LXNreS03MDAgc2hhZG93LXNtXCJcbiAgICAgICAgYXJpYS1saXZlPVwicG9saXRlXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJoLTQgdy00IGFuaW1hdGUtc3BpbiByb3VuZGVkLWZ1bGwgYm9yZGVyLTIgYm9yZGVyLXNreS0yMDAgYm9yZGVyLXQtc2t5LTYwMFwiPjwvZGl2PlxuICAgICAgICA8c3Bhbj5SaXNvbHV6aW9uZSBhbGxhcm1lIGluIGNvcnNvLi4uPC9zcGFuPlxuICAgIDwvZGl2PlxuICAgIH1cblxuICAgIEBpZiAocm93cygpLmxlbmd0aCA9PT0gMCAmJiAhdm1TdGF0ZS5yZXNvbHZlRXJyb3IpIHtcbiAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiYWxhcm0tbWFuYWdlbWVudF9fZW1wdHkgbXQtMyBmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkLTJ4bCBib3JkZXIgYm9yZGVyLXNsYXRlLTIwMCBiZy13aGl0ZS83MCBwLTE0IHRleHQtY2VudGVyIHNoYWRvdy1zbSBiYWNrZHJvcC1ibHVyLXNtXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGgtMTQgdy0xNCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZC0yeGwgYmctc2xhdGUtMTAwXCI+XG4gICAgICAgICAgICA8c3ZnIGNsYXNzPVwiaC03IHctNyB0ZXh0LXNsYXRlLTQwMFwiIGZpbGw9XCJub25lXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiXG4gICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgPHBhdGggc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgZD1cIk0xNSAxOS4xMjhhOS4zOCA5LjM4IDAgMDAyLjYyNS4zNzIgOS4zMzcgOS4zMzcgMCAwMDQuMTIxLS45NTIgNC4xMjUgNC4xMjUgMCAwMC03LjUzMy0yLjQ5M00xNSAxOS4xMjh2LS4wMDNjMC0xLjExMy0uMjg1LTIuMTYtLjc4Ni0zLjA3TTE1IDE5LjEyOHYuMTA2QTEyLjMxOCAxMi4zMTggMCAwMTguNjI0IDIxYy0yLjMzMSAwLTQuNTEyLS42NDUtNi4zNzQtMS43NjZsLS4wMDEtLjEwOWE2LjM3NSA2LjM3NSAwIDAxMTEuOTY0LTMuMDdNMTIgNi4zNzVhMy4zNzUgMy4zNzUgMCAxMS02Ljc1IDAgMy4zNzUgMy4zNzUgMCAwMTYuNzUgMHptOC4yNSAyLjI1YTIuNjI1IDIuNjI1IDAgMTEtNS4yNSAwIDIuNjI1IDIuNjI1IDAgMDE1LjI1IDB6XCIgLz5cbiAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPHAgY2xhc3M9XCJtdC00IHRleHQtc20gZm9udC1zZW1pYm9sZCB0ZXh0LXNsYXRlLTcwMFwiPk5lc3N1biBhbGxhcm1lIGF0dGl2byBhbCBtb21lbnRvLjwvcD5cbiAgICAgICAgPHAgY2xhc3M9XCJtdC0xIHRleHQteHMgdGV4dC1zbGF0ZS01MDBcIj5RdWFuZG8gdmVycmFubm8gcmlsZXZhdGkgbnVvdmkgZXZlbnRpLCBjb21wYXJpcmFubm8gcXVpLjwvcD5cbiAgICA8L2Rpdj5cbiAgICB9IEBlbHNlIHtcbiAgICA8YXBwLWFsYXJtLXRhYmxlLXNoZWxsIFt0aXRsZV09XCInQWxsYXJtaSBhdHRpdmknXCIgW2NhcHRpb25dPVwiJ1RhYmVsbGEgYWxsYXJtaSBhdHRpdmknXCIgW2NvbHVtbnNdPVwiY29sdW1uc1wiPlxuICAgICAgICBAZm9yIChyb3cgb2Ygcm93cygpOyB0cmFjayByb3cuaWQpIHtcbiAgICAgICAgPHRyIGNsYXNzPVwiZ3JvdXAgdHJhbnNpdGlvbi1jb2xvcnMgaG92ZXI6Ymctc2xhdGUtNTAvODBcIiBbYXR0ci5kYXRhLXRlc3RpZF09XCInYWxhcm0tcm93LScgKyByb3cuaWRcIj5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cInB4LTUgcHktMy41IGFsaWduLW1pZGRsZVwiPlxuICAgICAgICAgICAgICAgIDxhcHAtYWxhcm0tcHJpb3JpdHktaW5kaWNhdG9yIFtwcmlvcml0eV09XCJyb3cucHJpb3JpdHlcIiAvPlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cInB4LTUgcHktMy41IGFsaWduLW1pZGRsZSB0ZXh0LXNtIGZvbnQtc2VtaWJvbGQgdGV4dC1zbGF0ZS05MDBcIj57eyByb3cubmFtZSB9fTwvdGQ+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJweC01IHB5LTMuNSBhbGlnbi1taWRkbGUgdGV4dC1zbSB0ZXh0LXNsYXRlLTcwMFwiPnt7IHJvdy5sb2NhdGlvbiB9fTwvdGQ+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJweC01IHB5LTMuNSBhbGlnbi1taWRkbGVcIj5cbiAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwicm93LmlzTWFuYWdlZFxuICAgICAgICAgICAgICAgICAgICA/ICdpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIgcm91bmRlZC1mdWxsIGJvcmRlciBib3JkZXItc2xhdGUtMjAwIGJnLXNsYXRlLTEwMCBweC0yLjUgcHktMSB0ZXh0LXhzIGZvbnQtc2VtaWJvbGQgdGV4dC1zbGF0ZS02MDAnXG4gICAgICAgICAgICAgICAgICAgIDogJ2lubGluZS1mbGV4IGl0ZW1zLWNlbnRlciByb3VuZGVkLWZ1bGwgYm9yZGVyIGJvcmRlci1yb3NlLTcwMCBiZy1yb3NlLTUwIHB4LTIuNSBweS0xIHRleHQteHMgZm9udC1zZW1pYm9sZCB0ZXh0LXJvc2UtNzAwJ1wiPlxuICAgICAgICAgICAgICAgICAgICB7eyByb3cuc3RhdHVzIH19XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cInB4LTUgcHktMy41IGFsaWduLW1pZGRsZSB0ZXh0LXNtIHRleHQtc2xhdGUtNzAwXCI+e3sgcm93Lm9wZW5lZEF0IHwgZWxhcHNlZFRpbWUgfX08L3RkPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwicHgtNSBweS0zLjUgYWxpZ24tbWlkZGxlXCI+XG4gICAgICAgICAgICAgICAgPGFwcC1hbGFybS1hY3Rpb24tYnV0dG9uIFtsYWJlbF09XCJyb3cuYWN0aW9uTGFiZWxcIiBbdG9uZV09XCJyb3cuaXNNYW5hZ2VkID8gJ25ldXRyYWwnIDogJ3ByaW1hcnknXCJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInJvdy5pc0FjdGlvbkRpc2FibGVkXCIgW2FyaWFMYWJlbF09XCJyb3cuYWN0aW9uQXJpYUxhYmVsXCIgKHByZXNzZWQpPVwib25SZXNvbHZlKHJvdy5pZClcIiAvPlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgPC90cj5cbiAgICAgICAgfVxuICAgIDwvYXBwLWFsYXJtLXRhYmxlLXNoZWxsPlxuXG4gICAgPG5hdiBhcmlhLWxhYmVsPVwiTmF2aWdhemlvbmUgcGFnaW5lIGFsbGFybWkgYXR0aXZpXCIgY2xhc3M9XCJjYXJlLXBhZ2luYXRpb25cIj5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjYXJlLXBhZ2luYXRpb25fX2J1dHRvblwiIFtkaXNhYmxlZF09XCIhY2FuR29QcmV2aW91cygpXCIgKGNsaWNrKT1cIm9uUHJldmlvdXNQYWdlKClcIlxuICAgICAgICAgICAgYXJpYS1sYWJlbD1cIlBhZ2luYSBwcmVjZWRlbnRlIGFsbGFybWkgYXR0aXZpXCI+XG4gICAgICAgICAgICBQcmVjZWRlbnRlXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImNhcmUtcGFnaW5hdGlvbl9fc3RhdHVzXCIgYXJpYS1saXZlPVwicG9saXRlXCI+UGFnaW5hIHt7IGN1cnJlbnRQYWdlKCkgfX0gPC9zcGFuPlxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImNhcmUtcGFnaW5hdGlvbl9fYnV0dG9uXCIgW2Rpc2FibGVkXT1cIiFjYW5Hb05leHQoKVwiIChjbGljayk9XCJvbk5leHRQYWdlKClcIlxuICAgICAgICAgICAgYXJpYS1sYWJlbD1cIlBhZ2luYSBzdWNjZXNzaXZhIGFsbGFybWkgYXR0aXZpXCI+XG4gICAgICAgICAgICBTdWNjZXNzaXZhXG4gICAgICAgIDwvYnV0dG9uPlxuICAgIDwvbmF2PlxuICAgIH1cbiAgICB9IEBlbHNlIHtcbiAgICA8ZGl2IGNsYXNzPVwicm91bmRlZC14bCBib3JkZXIgYm9yZGVyLXNsYXRlLTIwMCBiZy13aGl0ZSBweC00IHB5LTMgdGV4dC1zbSB0ZXh0LXNsYXRlLTYwMCBzaGFkb3ctc21cIlxuICAgICAgICBhcmlhLWxpdmU9XCJwb2xpdGVcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImgtNCB3LTQgYW5pbWF0ZS1zcGluIHJvdW5kZWQtZnVsbCBib3JkZXItMiBib3JkZXItc2xhdGUtMjAwIGJvcmRlci10LXNsYXRlLTUwMFwiPjwvZGl2PlxuICAgICAgICBDYXJpY2FtZW50byBhbGxhcm1pIGluIGNvcnNvLi4uXG4gICAgPC9kaXY+XG4gICAgfVxuPC9zZWN0aW9uPiJdLCJtYXBwaW5ncyI6IjtvaENDU1FBLENBQUEsYUFDSUMsQ0FBQSxhQUNBQyxDQUFBLElBQ0pDLENBQUEsSUFBQUMsQ0FBQSxJQUFBQyxhQUFBLEdBQUFDLENBQUEsYUFBQUMsQ0FBQSxFQUFBRixhQUFBLEdBQUFKLENBQUEsTUFBQU8sQ0FBQSxJQURJSCxhQUFBLEdBQUFKLENBQUEsTUFBQVEsQ0FBQSxJQUFBQyxDQUFBLEtBQUFILENBQUEsQ0FBQUksSUFBQSxHQUFBQyxNQUFBLHVCQUFBUCxhQUFBLEdBQUFDLENBQUEsb0JBQUFPLEVBQUFULENBQUEsQ0FBQVUsQ0FBQSxFQUFBVCxhQUFBLEdBQUFVLENBQUEsS0FBQVYsQ0FBQSxnQkFBQUosQ0FBQSxVQUFBSSxhQUFBLEdBQUFDLENBQUEsU0FBQUYsQ0FBQSxNQUFBQyxhQUFBLEdBQUFDLENBQUEsU0FPUk4sQ0FBQSxZQUFBZ0IsQ0FBQSxHQUVJaEIsQ0FBQSxhQUNJQyxDQUFBLGNBR0pFLENBQUEsR0FBQWMsQ0FBQSxHQUNBakIsQ0FBQSxXQUFNRSxDQUFBLElBQTBCQyxDQUFBLEdBQU8sR0FBQUMsQ0FBQSxJQUFBQyxhQUFBLEdBQUFDLENBQUEsYUFBQUMsQ0FBQSxFQUFBRixhQUFBLEdBQUFKLENBQUEsTUFBQU8sQ0FBQSxJQUFqQ0gsYUFBQSxHQUFBSixDQUFBLE1BQUFRLENBQUEsSUFBQVMsQ0FBQSxDQUFBWCxDQUFBLENBQUFZLFlBQUEsUUFBQWQsYUFBQSxHQUFBQyxDQUFBLG9CQUFBYyxFQUFBaEIsQ0FBQSxDQUFBVSxDQUFBLEVBQUFULGFBQUEsR0FBQVUsQ0FBQSxL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 \ No newline at end of file diff --git a/frontend/dist-instrumented/chunk-X4Y2U43G.js.map b/frontend/dist-instrumented/chunk-X4Y2U43G.js.map new file mode 100644 index 00000000..83ab5cdc --- /dev/null +++ b/frontend/dist-instrumented/chunk-X4Y2U43G.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["src/app/features/alarm-management/components/alarm-page-management-component/alarm-page-management-component.ts", "src/app/features/alarm-management/components/alarm-page-management-component/alarm-page-management-component.html"], + "sourcesContent": ["import { ChangeDetectionStrategy, Component, DestroyRef, computed, OnInit, inject } from '@angular/core';\nimport { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';\nimport { AlarmListVm } from '../../models/alarm-list-vm.model';\nimport { AlarmManagementService } from '../../services/alarm-management.service';\nimport { AlarmManagementTablePresenterService } from '../../services/alarm-management-table-presenter.service';\nimport { AlarmManagementRefreshService } from '../../../../core/alarm/services/alarm-management-refresh.service';\nimport { AlarmTableShellComponent } from '../../../../shared/components/alarm-table/alarm-table-shell.component';\nimport { AlarmPriorityIndicatorComponent } from '../../../../shared/components/alarm-table/alarm-priority-indicator.component';\nimport { AlarmActionButtonComponent } from '../../../../shared/components/alarm-table/alarm-action-button.component';\nimport { ElapsedTimePipe } from '../../../../shared/pipes/elapsed-time.pipe';\nimport { AlarmTableColumn } from '../../../../shared/models/alarm-table.model';\n\n@Component({\n selector: 'app-alarm-page-management-component',\n imports: [AlarmTableShellComponent, AlarmPriorityIndicatorComponent, AlarmActionButtonComponent, ElapsedTimePipe],\n templateUrl: './alarm-page-management-component.html',\n styleUrl: './alarm-page-management-component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AlarmPageManagementComponent implements OnInit {\n private readonly alarmManagementService = inject(AlarmManagementService);\n private readonly tablePresenter = inject(AlarmManagementTablePresenterService);\n private readonly alarmManagementRefreshService = inject(AlarmManagementRefreshService);\n private readonly destroyRef = inject(DestroyRef);\n\n public readonly columns: readonly AlarmTableColumn[] = [\n { id: 'priority', label: 'Priorità' },\n { id: 'name', label: 'Nome' },\n { id: 'location', label: 'Luogo' },\n { id: 'status', label: 'Stato' },\n { id: 'openedAt', label: 'Scattato' },\n { id: 'actions', label: 'Azioni' },\n ];\n\n public readonly vm = toSignal(this.alarmManagementService.vm$, {\n initialValue: null,\n });\n\n public readonly rows = computed(() => {\n const vmState = this.vm();\n if (!vmState) {\n return [];\n }\n\n return this.tablePresenter.toRows(vmState.alarms, vmState.resolvingId);\n });\n\n public readonly canGoPrevious = computed(() => this.vm()?.canGoPrevious ?? false);\n public readonly canGoNext = computed(() => this.vm()?.canGoNext ?? false);\n public readonly currentPage = computed(() => this.vm()?.currentPage ?? 1);\n\n public ngOnInit(): void {\n this.alarmManagementService.initialize();\n\n this.alarmManagementRefreshService\n .getRefreshRequested$()\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n this.alarmManagementService.initialize();\n });\n }\n\n public onResolve(activeAlarmId: string): void {\n this.alarmManagementService.resolveAlarm(activeAlarmId);\n }\n\n public onNextPage(): void {\n this.alarmManagementService.nextPage();\n }\n\n public onPreviousPage(): void {\n this.alarmManagementService.previousPage();\n }\n}\n", "
\n
\n
\n

Allarmi

\n

Gestione allarmi attivi

\n

Monitora gli eventi e marca gli allarmi gia presi in carico.

\n
\n\n @if (rows().length > 0) {\n \n \n {{ rows().length }} in tabella\n \n }\n
\n\n @if (vm(); as vmState) {\n @if (vmState.resolveError) {\n
\n \n \n \n {{ vmState.resolveError }}\n
\n }\n\n @if (vmState.isResolving) {\n
\n
\n Risoluzione allarme in corso...\n
\n }\n\n @if (rows().length === 0 && !vmState.resolveError) {\n \n
\n \n \n \n
\n

Nessun allarme attivo al momento.

\n

Quando verranno rilevati nuovi eventi, compariranno qui.

\n \n } @else {\n \n @for (row of rows(); track row.id) {\n \n \n \n \n {{ row.name }}\n {{ row.location }}\n \n \n {{ row.status }}\n \n \n {{ row.openedAt | elapsedTime }}\n \n \n \n \n }\n \n\n \n }\n } @else {\n
\n
\n Caricamento allarmi in corso...\n
\n }\n
"], + "mappings": "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", + "names": ["\u0275\u0275elementStart", "\u0275\u0275element", "\u0275\u0275text", "\u0275\u0275elementEnd", "\u0275\u0275advance", "\u0275\u0275textInterpolate1", "ctx_r0", "rows", "length", "\u0275\u0275textInterpolate", "vmState_r2", "resolveError", "\u0275\u0275listener", "row_r5", "\u0275\u0275restoreView", "_r4", "$implicit", "\u0275\u0275nextContext", "\u0275\u0275resetView", "onResolve", "id", "\u0275\u0275property", "priority", "name", "location", "\u0275\u0275classMap", "isManaged", "status", "\u0275\u0275pipeBind1", "openedAt", "actionLabel", "isActionDisabled", "actionAriaLabel", "\u0275\u0275repeaterCreate", "AlarmPageManagementComponent_Conditional_10_Conditional_3_For_2_Template", "_forTrack0", "_r3", "onPreviousPage", "onNextPage", "columns", "\u0275\u0275repeater", "canGoPrevious", "currentPage", "canGoNext", "\u0275\u0275conditionalCreate", "AlarmPageManagementComponent_Conditional_10_Conditional_0_Template", "AlarmPageManagementComponent_Conditional_10_Conditional_1_Template", "AlarmPageManagementComponent_Conditional_10_Conditional_2_Template", "AlarmPageManagementComponent_Conditional_10_Conditional_3_Template", "\u0275\u0275conditional", "isResolving", "AlarmPageManagementComponent", "alarmManagementService", "inject", "AlarmManagementService", "tablePresenter", "AlarmManagementTablePresenterService", "alarmManagementRefreshService", "AlarmManagementRefreshService", "destroyRef", "DestroyRef", "label", "vm", "toSignal", "vm$", "initialValue", "computed", "vmState", "toRows", "alarms", "resolvingId", "ngOnInit", "initialize", "getRefreshRequested$", "pipe", "takeUntilDestroyed", "subscribe", "activeAlarmId", "resolveAlarm", "nextPage", "previousPage", "selectors", "decls", "vars", "consts", "template", "rf", "ctx", "AlarmPageManagementComponent_Conditional_9_Template", "AlarmPageManagementComponent_Conditional_10_Template", "AlarmPageManagementComponent_Conditional_11_Template", "tmp_1_0", "AlarmTableShellComponent", "AlarmPriorityIndicatorComponent", "AlarmActionButtonComponent", "ElapsedTimePipe", "styles", "changeDetection"] +} diff --git a/frontend/dist-instrumented/chunk-YUDTQWM3.js b/frontend/dist-instrumented/chunk-YUDTQWM3.js new file mode 100644 index 00000000..37ab7ef4 --- /dev/null +++ b/frontend/dist-instrumented/chunk-YUDTQWM3.js @@ -0,0 +1,4 @@ +function cov_1uhrzghtkx(){var path="/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-YUDTQWM3.js";var hash="d9df6a25b2966079af3da50dff76348a87630b79";var global=new Function("return this")();var gcv="__coverage__";var coverageData={path:"/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-YUDTQWM3.js",statementMap:{"0":{start:{line:1,column:467},end:{line:1,column:510}},"1":{start:{line:1,column:527},end:{line:1,column:582}},"2":{start:{line:1,column:599},end:{line:1,column:879}},"3":{start:{line:1,column:656},end:{line:1,column:659}},"4":{start:{line:1,column:660},end:{line:1,column:878}},"5":{start:{line:1,column:896},end:{line:1,column:951}},"6":{start:{line:1,column:968},end:{line:1,column:1036}},"7":{start:{line:1,column:1053},end:{line:1,column:1369}},"8":{start:{line:1,column:1110},end:{line:1,column:1113}},"9":{start:{line:1,column:1114},end:{line:1,column:1368}},"10":{start:{line:1,column:1386},end:{line:1,column:1436}},"11":{start:{line:1,column:1453},end:{line:1,column:1516}},"12":{start:{line:1,column:1533},end:{line:1,column:1606}},"13":{start:{line:1,column:1623},end:{line:1,column:2007}},"14":{start:{line:1,column:1689},end:{line:1,column:1692}},"15":{start:{line:1,column:1693},end:{line:1,column:2006}},"16":{start:{line:1,column:2024},end:{line:1,column:2097}},"17":{start:{line:1,column:2066},end:{line:1,column:2069}},"18":{start:{line:1,column:2070},end:{line:1,column:2096}},"19":{start:{line:1,column:2111},end:{line:1,column:2250}},"20":{start:{line:1,column:2128},end:{line:1,column:2161}},"21":{start:{line:1,column:2164},end:{line:1,column:2191}},"22":{start:{line:1,column:2192},end:{line:1,column:2249}},"23":{start:{line:1,column:2257},end:{line:2,column:80}},"24":{start:{line:1,column:2284},end:{line:1,column:2288}},"25":{start:{line:1,column:2305},end:{line:1,column:2492}},"26":{start:{line:1,column:2513},end:{line:1,column:2563}},"27":{start:{line:1,column:2588},end:{line:1,column:2647}},"28":{start:{line:1,column:2671},end:{line:1,column:2724}},"29":{start:{line:1,column:2736},end:{line:1,column:2816}},"30":{start:{line:1,column:2769},end:{line:1,column:2809}},"31":{start:{line:1,column:2809},end:{line:1,column:2815}},"32":{start:{line:1,column:2866},end:{line:1,column:2900}},"33":{start:{line:1,column:2901},end:{line:1,column:3109}},"34":{start:{line:1,column:3006},end:{line:1,column:3027}},"35":{start:{line:1,column:3040},end:{line:1,column:3106}},"36":{start:{line:1,column:3127},end:{line:1,column:3188}},"37":{start:{line:1,column:3139},end:{line:1,column:3184}},"38":{start:{line:1,column:3158},end:{line:1,column:3183}},"39":{start:{line:1,column:3206},end:{line:2,column:67}},"40":{start:{line:1,column:4389},end:{line:1,column:6889}},"41":{start:{line:1,column:4987},end:{line:1,column:5006}},"42":{start:{line:2,column:68},end:{line:2,column:76}}},fnMap:{"0":{name:"L",decl:{start:{line:1,column:460},end:{line:1,column:461}},loc:{start:{line:1,column:466},end:{line:1,column:511}},line:1},"1":{name:"G",decl:{start:{line:1,column:520},end:{line:1,column:521}},loc:{start:{line:1,column:526},end:{line:1,column:583}},line:1},"2":{name:"I",decl:{start:{line:1,column:592},end:{line:1,column:593}},loc:{start:{line:1,column:598},end:{line:1,column:880}},line:1},"3":{name:"q",decl:{start:{line:1,column:889},end:{line:1,column:890}},loc:{start:{line:1,column:895},end:{line:1,column:952}},line:1},"4":{name:"R",decl:{start:{line:1,column:961},end:{line:1,column:962}},loc:{start:{line:1,column:967},end:{line:1,column:1037}},line:1},"5":{name:"D",decl:{start:{line:1,column:1046},end:{line:1,column:1047}},loc:{start:{line:1,column:1052},end:{line:1,column:1370}},line:1},"6":{name:"V",decl:{start:{line:1,column:1379},end:{line:1,column:1380}},loc:{start:{line:1,column:1385},end:{line:1,column:1437}},line:1},"7":{name:"z",decl:{start:{line:1,column:1446},end:{line:1,column:1447}},loc:{start:{line:1,column:1452},end:{line:1,column:1517}},line:1},"8":{name:"U",decl:{start:{line:1,column:1526},end:{line:1,column:1527}},loc:{start:{line:1,column:1532},end:{line:1,column:1607}},line:1},"9":{name:"B",decl:{start:{line:1,column:1616},end:{line:1,column:1617}},loc:{start:{line:1,column:1622},end:{line:1,column:2008}},line:1},"10":{name:"Y",decl:{start:{line:1,column:2017},end:{line:1,column:2018}},loc:{start:{line:1,column:2023},end:{line:1,column:2098}},line:1},"11":{name:"K",decl:{start:{line:1,column:2107},end:{line:1,column:2108}},loc:{start:{line:1,column:2110},end:{line:1,column:2251}},line:1},"12":{name:"(anonymous_12)",decl:{start:{line:1,column:2118},end:{line:1,column:2119}},loc:{start:{line:1,column:2121},end:{line:1,column:2250}},line:1},"13":{name:"(anonymous_13)",decl:{start:{line:1,column:2258},end:{line:1,column:2259}},loc:{start:{line:1,column:2262},end:{line:2,column:77}},line:1},"14":{name:"(anonymous_14)",decl:{start:{line:1,column:2493},end:{line:1,column:2494}},loc:{start:{line:1,column:2512},end:{line:1,column:2564}},line:1},"15":{name:"(anonymous_15)",decl:{start:{line:1,column:2564},end:{line:1,column:2565}},loc:{start:{line:1,column:2587},end:{line:1,column:2648}},line:1},"16":{name:"(anonymous_16)",decl:{start:{line:1,column:2648},end:{line:1,column:2649}},loc:{start:{line:1,column:2670},end:{line:1,column:2725}},line:1},"17":{name:"(anonymous_17)",decl:{start:{line:1,column:2725},end:{line:1,column:2726}},loc:{start:{line:1,column:2735},end:{line:1,column:3110}},line:1},"18":{name:"(anonymous_18)",decl:{start:{line:1,column:3002},end:{line:1,column:3003}},loc:{start:{line:1,column:3005},end:{line:1,column:3028}},line:1},"19":{name:"(anonymous_19)",decl:{start:{line:1,column:3035},end:{line:1,column:3036}},loc:{start:{line:1,column:3039},end:{line:1,column:3107}},line:1},"20":{name:"(anonymous_20)",decl:{start:{line:1,column:3128},end:{line:1,column:3129}},loc:{start:{line:1,column:3132},end:{line:1,column:3185}},line:1},"21":{name:"(anonymous_21)",decl:{start:{line:1,column:3146},end:{line:1,column:3147}},loc:{start:{line:1,column:3157},end:{line:1,column:3184}},line:1},"22":{name:"(anonymous_22)",decl:{start:{line:1,column:4375},end:{line:1,column:4376}},loc:{start:{line:1,column:4388},end:{line:1,column:6890}},line:1},"23":{name:"(anonymous_23)",decl:{start:{line:1,column:4976},end:{line:1,column:4977}},loc:{start:{line:1,column:4986},end:{line:1,column:5007}},line:1}},branchMap:{"0":{loc:{start:{line:1,column:467},end:{line:1,column:510}},type:"binary-expr",locations:[{start:{line:1,column:467},end:{line:1,column:470}},{start:{line:1,column:472},end:{line:1,column:510}}],line:1},"1":{loc:{start:{line:1,column:527},end:{line:1,column:582}},type:"binary-expr",locations:[{start:{line:1,column:527},end:{line:1,column:530}},{start:{line:1,column:532},end:{line:1,column:582}}],line:1},"2":{loc:{start:{line:1,column:599},end:{line:1,column:879}},type:"if",locations:[{start:{line:1,column:599},end:{line:1,column:879}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"3":{loc:{start:{line:1,column:602},end:{line:1,column:644}},type:"binary-expr",locations:[{start:{line:1,column:602},end:{line:1,column:605}},{start:{line:1,column:608},end:{line:1,column:643}}],line:1},"4":{loc:{start:{line:1,column:666},end:{line:1,column:877}},type:"cond-expr",locations:[{start:{line:1,column:768},end:{line:1,column:769}},{start:{line:1,column:770},end:{line:1,column:877}}],line:1},"5":{loc:{start:{line:1,column:666},end:{line:1,column:767}},type:"binary-expr",locations:[{start:{line:1,column:666},end:{line:1,column:714}},{start:{line:1,column:716},end:{line:1,column:767}}],line:1},"6":{loc:{start:{line:1,column:770},end:{line:1,column:877}},type:"cond-expr",locations:[{start:{line:1,column:873},end:{line:1,column:874}},{start:{line:1,column:875},end:{line:1,column:877}}],line:1},"7":{loc:{start:{line:1,column:770},end:{line:1,column:872}},type:"binary-expr",locations:[{start:{line:1,column:770},end:{line:1,column:818}},{start:{line:1,column:820},end:{line:1,column:872}}],line:1},"8":{loc:{start:{line:1,column:896},end:{line:1,column:951}},type:"binary-expr",locations:[{start:{line:1,column:896},end:{line:1,column:899}},{start:{line:1,column:901},end:{line:1,column:951}}],line:1},"9":{loc:{start:{line:1,column:968},end:{line:1,column:1036}},type:"binary-expr",locations:[{start:{line:1,column:968},end:{line:1,column:971}},{start:{line:1,column:973},end:{line:1,column:1036}}],line:1},"10":{loc:{start:{line:1,column:1053},end:{line:1,column:1369}},type:"if",locations:[{start:{line:1,column:1053},end:{line:1,column:1369}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"11":{loc:{start:{line:1,column:1056},end:{line:1,column:1098}},type:"binary-expr",locations:[{start:{line:1,column:1056},end:{line:1,column:1059}},{start:{line:1,column:1062},end:{line:1,column:1097}}],line:1},"12":{loc:{start:{line:1,column:1120},end:{line:1,column:1367}},type:"cond-expr",locations:[{start:{line:1,column:1240},end:{line:1,column:1241}},{start:{line:1,column:1242},end:{line:1,column:1367}}],line:1},"13":{loc:{start:{line:1,column:1120},end:{line:1,column:1239}},type:"binary-expr",locations:[{start:{line:1,column:1120},end:{line:1,column:1177}},{start:{line:1,column:1179},end:{line:1,column:1239}}],line:1},"14":{loc:{start:{line:1,column:1242},end:{line:1,column:1367}},type:"cond-expr",locations:[{start:{line:1,column:1363},end:{line:1,column:1364}},{start:{line:1,column:1365},end:{line:1,column:1367}}],line:1},"15":{loc:{start:{line:1,column:1242},end:{line:1,column:1362}},type:"binary-expr",locations:[{start:{line:1,column:1242},end:{line:1,column:1299}},{start:{line:1,column:1301},end:{line:1,column:1362}}],line:1},"16":{loc:{start:{line:1,column:1386},end:{line:1,column:1436}},type:"binary-expr",locations:[{start:{line:1,column:1386},end:{line:1,column:1389}},{start:{line:1,column:1391},end:{line:1,column:1436}}],line:1},"17":{loc:{start:{line:1,column:1453},end:{line:1,column:1516}},type:"binary-expr",locations:[{start:{line:1,column:1453},end:{line:1,column:1456}},{start:{line:1,column:1458},end:{line:1,column:1516}}],line:1},"18":{loc:{start:{line:1,column:1533},end:{line:1,column:1606}},type:"binary-expr",locations:[{start:{line:1,column:1533},end:{line:1,column:1536}},{start:{line:1,column:1538},end:{line:1,column:1606}}],line:1},"19":{loc:{start:{line:1,column:1623},end:{line:1,column:2007}},type:"if",locations:[{start:{line:1,column:1623},end:{line:1,column:2007}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"20":{loc:{start:{line:1,column:1626},end:{line:1,column:1677}},type:"binary-expr",locations:[{start:{line:1,column:1626},end:{line:1,column:1629}},{start:{line:1,column:1632},end:{line:1,column:1676}}],line:1},"21":{loc:{start:{line:1,column:1699},end:{line:1,column:2005}},type:"cond-expr",locations:[{start:{line:1,column:1807},end:{line:1,column:1808}},{start:{line:1,column:1809},end:{line:1,column:2005}}],line:1},"22":{loc:{start:{line:1,column:1699},end:{line:1,column:1806}},type:"binary-expr",locations:[{start:{line:1,column:1699},end:{line:1,column:1750}},{start:{line:1,column:1752},end:{line:1,column:1806}}],line:1},"23":{loc:{start:{line:1,column:1809},end:{line:1,column:2005}},type:"cond-expr",locations:[{start:{line:1,column:1918},end:{line:1,column:1919}},{start:{line:1,column:1920},end:{line:1,column:2005}}],line:1},"24":{loc:{start:{line:1,column:1809},end:{line:1,column:1917}},type:"binary-expr",locations:[{start:{line:1,column:1809},end:{line:1,column:1860}},{start:{line:1,column:1862},end:{line:1,column:1917}}],line:1},"25":{loc:{start:{line:1,column:1920},end:{line:1,column:2005}},type:"cond-expr",locations:[{start:{line:1,column:2001},end:{line:1,column:2002}},{start:{line:1,column:2003},end:{line:1,column:2005}}],line:1},"26":{loc:{start:{line:1,column:1920},end:{line:1,column:2000}},type:"binary-expr",locations:[{start:{line:1,column:1920},end:{line:1,column:1950}},{start:{line:1,column:1952},end:{line:1,column:2000}}],line:1},"27":{loc:{start:{line:1,column:2024},end:{line:1,column:2097}},type:"if",locations:[{start:{line:1,column:2024},end:{line:1,column:2097}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"28":{loc:{start:{line:1,column:2027},end:{line:1,column:2054}},type:"binary-expr",locations:[{start:{line:1,column:2027},end:{line:1,column:2030}},{start:{line:1,column:2033},end:{line:1,column:2053}}],line:1},"29":{loc:{start:{line:1,column:2198},end:{line:1,column:2249}},type:"cond-expr",locations:[{start:{line:1,column:2205},end:{line:1,column:2209}},{start:{line:1,column:2210},end:{line:1,column:2249}}],line:1},"30":{loc:{start:{line:1,column:2198},end:{line:1,column:2204}},type:"binary-expr",locations:[{start:{line:1,column:2198},end:{line:1,column:2200}},{start:{line:1,column:2202},end:{line:1,column:2204}}],line:1},"31":{loc:{start:{line:1,column:2210},end:{line:1,column:2249}},type:"cond-expr",locations:[{start:{line:1,column:2216},end:{line:1,column:2244}},{start:{line:1,column:2245},end:{line:1,column:2249}}],line:1},"32":{loc:{start:{line:1,column:2736},end:{line:1,column:2816}},type:"if",locations:[{start:{line:1,column:2736},end:{line:1,column:2816}},{start:{line:undefined,column:undefined},end:{line:undefined,column:undefined}}],line:1},"33":{loc:{start:{line:1,column:3165},end:{line:1,column:3176}},type:"binary-expr",locations:[{start:{line:1,column:3165},end:{line:1,column:3166}},{start:{line:1,column:3169},end:{line:1,column:3175}}],line:1},"34":{loc:{start:{line:1,column:3178},end:{line:1,column:3182}},type:"binary-expr",locations:[{start:{line:1,column:3178},end:{line:1,column:3179}},{start:{line:1,column:3181},end:{line:1,column:3182}}],line:1},"35":{loc:{start:{line:1,column:4389},end:{line:1,column:5301}},type:"binary-expr",locations:[{start:{line:1,column:4389},end:{line:1,column:4392}},{start:{line:1,column:4395},end:{line:1,column:5300}}],line:1},"36":{loc:{start:{line:1,column:5302},end:{line:1,column:6889}},type:"binary-expr",locations:[{start:{line:1,column:5302},end:{line:1,column:5305}},{start:{line:1,column:5308},end:{line:1,column:6888}}],line:1},"37":{loc:{start:{line:1,column:5369},end:{line:1,column:5457}},type:"binary-expr",locations:[{start:{line:1,column:5369},end:{line:1,column:5412}},{start:{line:1,column:5414},end:{line:1,column:5457}}],line:1},"38":{loc:{start:{line:1,column:5478},end:{line:1,column:5588}},type:"cond-expr",locations:[{start:{line:1,column:5567},end:{line:1,column:5583}},{start:{line:1,column:5584},end:{line:1,column:5588}}],line:1},"39":{loc:{start:{line:1,column:5478},end:{line:1,column:5566}},type:"binary-expr",locations:[{start:{line:1,column:5478},end:{line:1,column:5521}},{start:{line:1,column:5523},end:{line:1,column:5566}}],line:1},"40":{loc:{start:{line:1,column:5596},end:{line:1,column:5690}},type:"cond-expr",locations:[{start:{line:1,column:5685},end:{line:1,column:5687}},{start:{line:1,column:5688},end:{line:1,column:5690}}],line:1},"41":{loc:{start:{line:1,column:5596},end:{line:1,column:5684}},type:"binary-expr",locations:[{start:{line:1,column:5596},end:{line:1,column:5639}},{start:{line:1,column:5641},end:{line:1,column:5684}}],line:1},"42":{loc:{start:{line:1,column:5714},end:{line:1,column:5820}},type:"binary-expr",locations:[{start:{line:1,column:5714},end:{line:1,column:5766}},{start:{line:1,column:5768},end:{line:1,column:5820}}],line:1},"43":{loc:{start:{line:1,column:5841},end:{line:1,column:5978}},type:"cond-expr",locations:[{start:{line:1,column:5948},end:{line:1,column:5973}},{start:{line:1,column:5974},end:{line:1,column:5978}}],line:1},"44":{loc:{start:{line:1,column:5841},end:{line:1,column:5947}},type:"binary-expr",locations:[{start:{line:1,column:5841},end:{line:1,column:5893}},{start:{line:1,column:5895},end:{line:1,column:5947}}],line:1},"45":{loc:{start:{line:1,column:5986},end:{line:1,column:6098}},type:"cond-expr",locations:[{start:{line:1,column:6093},end:{line:1,column:6095}},{start:{line:1,column:6096},end:{line:1,column:6098}}],line:1},"46":{loc:{start:{line:1,column:5986},end:{line:1,column:6092}},type:"binary-expr",locations:[{start:{line:1,column:5986},end:{line:1,column:6038}},{start:{line:1,column:6040},end:{line:1,column:6092}}],line:1},"47":{loc:{start:{line:1,column:6122},end:{line:1,column:6304}},type:"binary-expr",locations:[{start:{line:1,column:6123},end:{line:1,column:6169}},{start:{line:1,column:6171},end:{line:1,column:6255}},{start:{line:1,column:6258},end:{line:1,column:6304}}],line:1},"48":{loc:{start:{line:1,column:6174},end:{line:1,column:6254}},type:"binary-expr",locations:[{start:{line:1,column:6174},end:{line:1,column:6204}},{start:{line:1,column:6206},end:{line:1,column:6254}}],line:1},"49":{loc:{start:{line:1,column:6325},end:{line:1,column:6528}},type:"cond-expr",locations:[{start:{line:1,column:6504},end:{line:1,column:6523}},{start:{line:1,column:6524},end:{line:1,column:6528}}],line:1},"50":{loc:{start:{line:1,column:6325},end:{line:1,column:6503}},type:"binary-expr",locations:[{start:{line:1,column:6326},end:{line:1,column:6372}},{start:{line:1,column:6374},end:{line:1,column:6404}},{start:{line:1,column:6406},end:{line:1,column:6454}},{start:{line:1,column:6457},end:{line:1,column:6503}}],line:1},"51":{loc:{start:{line:1,column:6536},end:{line:1,column:6720}},type:"cond-expr",locations:[{start:{line:1,column:6715},end:{line:1,column:6717}},{start:{line:1,column:6718},end:{line:1,column:6720}}],line:1},"52":{loc:{start:{line:1,column:6536},end:{line:1,column:6714}},type:"binary-expr",locations:[{start:{line:1,column:6536},end:{line:1,column:6582}},{start:{line:1,column:6585},end:{line:1,column:6631}},{start:{line:1,column:6633},end:{line:1,column:6663}},{start:{line:1,column:6665},end:{line:1,column:6713}}],line:1},"53":{loc:{start:{line:1,column:6739},end:{line:1,column:6777}},type:"binary-expr",locations:[{start:{line:1,column:6739},end:{line:1,column:6750}},{start:{line:1,column:6752},end:{line:1,column:6777}}],line:1},"54":{loc:{start:{line:1,column:6789},end:{line:1,column:6850}},type:"cond-expr",locations:[{start:{line:1,column:6801},end:{line:1,column:6828}},{start:{line:1,column:6829},end:{line:1,column:6850}}],line:1},"55":{loc:{start:{line:1,column:6862},end:{line:1,column:6887}},type:"cond-expr",locations:[{start:{line:1,column:6882},end:{line:1,column:6884}},{start:{line:1,column:6885},end:{line:1,column:6887}}],line:1}},s:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0},f:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0},b:{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0],"9":[0,0],"10":[0,0],"11":[0,0],"12":[0,0],"13":[0,0],"14":[0,0],"15":[0,0],"16":[0,0],"17":[0,0],"18":[0,0],"19":[0,0],"20":[0,0],"21":[0,0],"22":[0,0],"23":[0,0],"24":[0,0],"25":[0,0],"26":[0,0],"27":[0,0],"28":[0,0],"29":[0,0],"30":[0,0],"31":[0,0],"32":[0,0],"33":[0,0],"34":[0,0],"35":[0,0],"36":[0,0],"37":[0,0],"38":[0,0],"39":[0,0],"40":[0,0],"41":[0,0],"42":[0,0],"43":[0,0],"44":[0,0],"45":[0,0],"46":[0,0],"47":[0,0,0],"48":[0,0],"49":[0,0],"50":[0,0,0,0],"51":[0,0],"52":[0,0,0,0],"53":[0,0],"54":[0,0],"55":[0,0]},inputSourceMap:{version:3,sources:["src/app/features/user-auth/components/first-access/first-access.component.ts","src/app/features/user-auth/components/first-access/first-access.component.html"],sourcesContent:["import { Component, inject } from '@angular/core';\nimport { ReactiveFormsModule, Validators, FormBuilder, ValidatorFn, AbstractControl, ValidationErrors } from '@angular/forms';\nimport { AuthBaseComponent } from '../auth-base/auth-base.component';\nimport { AuthErrorType } from '../../models/auth-error-type.enum';\n\nfunction newPasswordDiffersFromTempPassword(): ValidatorFn {\n\treturn (control: AbstractControl): ValidationErrors | null => {\n\t\tconst tempPassword = control.get('temporaryPassword')?.value as string;\n\t\tconst newPassword = control.get('newPassword')?.value as string;\n\n\t\tif (!tempPassword || !newPassword) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn tempPassword === newPassword ? { sameAsTemporaryPassword: true } : null;\n\t};\n}\n\n@Component({\n\tselector: 'app-first-access',\n\timports: [ReactiveFormsModule],\n\ttemplateUrl: './first-access.component.html',\n\tstyleUrls: ['./first-access.component.css'],\n})\nexport class FirstAccessComponent extends AuthBaseComponent {\n\tprivate readonly fb = inject(FormBuilder);\n\n\tpublic readonly firstAccessForm = this.fb.nonNullable.group(\n\t\t{\n\t\t\tusername: ['', [Validators.required, Validators.minLength(3)]],\n\t\t\ttemporaryPassword: ['', [Validators.required, Validators.minLength(12)]],\n\t\t\tnewPassword: ['', [Validators.required, Validators.minLength(12)]],\n\t\t},\n\t\t{ validators: [newPasswordDiffersFromTempPassword()] }\n\t);\n\n\n\tpublic override onUsernameChange(value: string): void {\n\t\tthis.firstAccessForm.controls.username.setValue(value);\n\t}\n\n\tpublic onTempPasswordChange(value: string): void {\n\t\tthis.firstAccessForm.controls.temporaryPassword.setValue(value);\n\t}\n\n\tpublic onNewPasswordChange(value: string): void {\n\t\tthis.firstAccessForm.controls.newPassword.setValue(value);\n\t}\n\n\tpublic override onSubmit(): void {\n\t\tif (this.firstAccessForm.invalid) {\n\t\t\tthis.firstAccessForm.markAllAsTouched();\n\t\t\treturn;\n\t\t}\n\n\t\tconst { username, temporaryPassword, newPassword } = this.firstAccessForm.getRawValue();\n\n\t\tthis.isLoading = true;\n\t\tthis.errorType = null;\n\n\t\tthis.authService.setFirstAccessPassword(username, temporaryPassword, newPassword).subscribe({\n\t\t\tnext: (session) => {\n\t\t\t\tthis.handleSuccess(session);\n\t\t\t},\n\t\t\terror: () => {\n\t\t\t\tthis.isLoading = false;\n\t\t\t\tthis.errorType = AuthErrorType.USERNAME_OR_TEMP_PASSWORD_WRONG;\n\t\t\t},\n\t\t});\n\t}\n\n}\n","
\n
\n
\n\n
\n

Primo accesso

\n

Imposta la tua password personale

\n

\n Hai appena effettuato il primo login con una password temporanea. Conferma le credenziali e scegli una nuova\n password per continuare.\n

\n\n
    \n
  • Usa l'username assegnato all'account.
  • \n
  • Inserisci la password temporanea ricevuta.
  • \n
  • La nuova password deve avere almeno 12 caratteri ed essere diversa da quella temporanea.
  • \n
\n\n
\n \n \n\n @if (firstAccessForm.controls.username.touched && firstAccessForm.controls.username.invalid) {\n

\n @if (firstAccessForm.controls.username.errors?.['required']) {\n L'username \xE8 obbligatorio.\n } @else if (firstAccessForm.controls.username.errors?.['minlength']) {\n L'username deve avere almeno 3 caratteri.\n }\n

\n }\n\n \n \n\n @if (firstAccessForm.controls.temporaryPassword.touched && firstAccessForm.controls.temporaryPassword.invalid) {\n

\n @if (firstAccessForm.controls.temporaryPassword.errors?.['required']) {\n La password temporanea \xE8 obbligatoria.\n } @else if (firstAccessForm.controls.temporaryPassword.errors?.['minlength']) {\n La password temporanea deve avere almeno 12 caratteri.\n }\n

\n }\n\n \n \n @if (firstAccessForm.controls.newPassword.touched && (firstAccessForm.controls.newPassword.invalid ||\n firstAccessForm.errors?.['sameAsTemporaryPassword'])) {\n

\n @if (firstAccessForm.controls.newPassword.errors?.['required']) {\n La nuova password \xE8 obbligatoria.\n } @else if (firstAccessForm.controls.newPassword.errors?.['minlength']) {\n La nuova password deve avere almeno 12 caratteri.\n } @else if (firstAccessForm.errors?.['sameAsTemporaryPassword']) {\n La nuova password deve essere diversa da quella temporanea.\n }\n

\n }\n\n \n\n @if (loginErrorMessage) {\n

{{ loginErrorMessage }}

\n }\n
\n
\n
"],mappings:"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",names:["\u0275\u0275text","\u0275\u0275elementStart","\u0275\u0275conditionalCreate","FirstAccessComponent_Conditional_21_Conditional_1_Template","FirstAccessComponent_Conditional_21_Conditional_2_Template","\u0275\u0275elementEnd","\u0275\u0275advance","\u0275\u0275conditional","ctx_r0","firstAccessForm","controls","username","errors","FirstAccessComponent_Conditional_25_Conditional_1_Template","FirstAccessComponent_Conditional_25_Conditional_2_Template","temporaryPassword","FirstAccessComponent_Conditional_29_Conditional_1_Template","FirstAccessComponent_Conditional_29_Conditional_2_Template","FirstAccessComponent_Conditional_29_Conditional_3_Template","newPassword","\u0275\u0275textInterpolate","loginErrorMessage","newPasswordDiffersFromTempPassword","control","tempPassword","get","value","sameAsTemporaryPassword","FirstAccessComponent","AuthBaseComponent","fb","inject","FormBuilder","nonNullable","group","Validators","required","minLength","validators","onUsernameChange","setValue","onTempPasswordChange","onNewPasswordChange","onSubmit","invalid","markAllAsTouched","getRawValue","isLoading","errorType","authService","setFirstAccessPassword","subscribe","next","session","handleSuccess","error","AuthErrorType","USERNAME_OR_TEMP_PASSWORD_WRONG","__ngFactoryType__","selectors","features","\u0275\u0275InheritDefinitionFeature","decls","vars","consts","template","rf","ctx","\u0275\u0275element","\u0275\u0275listener","FirstAccessComponent_Conditional_21_Template","FirstAccessComponent_Conditional_25_Template","FirstAccessComponent_Conditional_29_Template","FirstAccessComponent_Conditional_32_Template","\u0275\u0275property","touched","\u0275\u0275textInterpolate1","ReactiveFormsModule","\u0275NgNoValidate","DefaultValueAccessor","NgControlStatus","NgControlStatusGroup","FormGroupDirective","FormControlName","styles"]},_coverageSchema:"1a1c01bbd47fc00a2c39e90264f33305004495a9",hash:"d9df6a25b2966079af3da50dff76348a87630b79"};var coverage=global[gcv]||(global[gcv]={});if(!coverage[path]||coverage[path].hash!==hash){coverage[path]=coverageData;}var actualCoverage=coverage[path];{// @ts-ignore +cov_1uhrzghtkx=function(){return actualCoverage;};}return actualCoverage;}cov_1uhrzghtkx();import{a as N,b as k}from"./chunk-AMU5RXFQ.js";import{a as F,b as d,c as y,d as x,e as S,f as M,g as O,l as T,m as E}from"./chunk-X3YLKFKT.js";import"./chunk-FYGTVJAL.js";import"./chunk-65RKWSY3.js";import"./chunk-2S5V5XEE.js";import"./chunk-F6OGAIBI.js";import{Ab as o,Bb as C,Cb as P,Ka as v,Oa as _,Q as w,Wa as f,Ya as c,_a as l,cb as g,db as n,eb as s,fb as u,ka as b,nb as A,pb as p,wa as a}from"./chunk-RYTNMYZW.js";import"./chunk-VCZGUBMY.js";function L(e,i){cov_1uhrzghtkx().f[0]++;cov_1uhrzghtkx().s[0]++;(cov_1uhrzghtkx().b[0][0]++,e&1)&&(cov_1uhrzghtkx().b[0][1]++,o(0," L'username \xE8 obbligatorio. "));}function G(e,i){cov_1uhrzghtkx().f[1]++;cov_1uhrzghtkx().s[1]++;(cov_1uhrzghtkx().b[1][0]++,e&1)&&(cov_1uhrzghtkx().b[1][1]++,o(0," L'username deve avere almeno 3 caratteri. "));}function I(e,i){cov_1uhrzghtkx().f[2]++;cov_1uhrzghtkx().s[2]++;if((cov_1uhrzghtkx().b[3][0]++,e&1)&&(cov_1uhrzghtkx().b[3][1]++,n(0,"p",10),c(1,L,1,0)(2,G,1,0),s()),e&2){cov_1uhrzghtkx().b[2][0]++;let t=(cov_1uhrzghtkx().s[3]++,p());cov_1uhrzghtkx().s[4]++;a(),l((cov_1uhrzghtkx().b[5][0]++,t.firstAccessForm.controls.username.errors!=null)&&(cov_1uhrzghtkx().b[5][1]++,t.firstAccessForm.controls.username.errors.required)?(cov_1uhrzghtkx().b[4][0]++,1):(cov_1uhrzghtkx().b[4][1]++,(cov_1uhrzghtkx().b[7][0]++,t.firstAccessForm.controls.username.errors!=null)&&(cov_1uhrzghtkx().b[7][1]++,t.firstAccessForm.controls.username.errors.minlength)?(cov_1uhrzghtkx().b[6][0]++,2):(cov_1uhrzghtkx().b[6][1]++,-1)));}else{cov_1uhrzghtkx().b[2][1]++;}}function q(e,i){cov_1uhrzghtkx().f[3]++;cov_1uhrzghtkx().s[5]++;(cov_1uhrzghtkx().b[8][0]++,e&1)&&(cov_1uhrzghtkx().b[8][1]++,o(0," La password temporanea \xE8 obbligatoria. "));}function R(e,i){cov_1uhrzghtkx().f[4]++;cov_1uhrzghtkx().s[6]++;(cov_1uhrzghtkx().b[9][0]++,e&1)&&(cov_1uhrzghtkx().b[9][1]++,o(0," La password temporanea deve avere almeno 12 caratteri. "));}function D(e,i){cov_1uhrzghtkx().f[5]++;cov_1uhrzghtkx().s[7]++;if((cov_1uhrzghtkx().b[11][0]++,e&1)&&(cov_1uhrzghtkx().b[11][1]++,n(0,"p",13),c(1,q,1,0)(2,R,1,0),s()),e&2){cov_1uhrzghtkx().b[10][0]++;let t=(cov_1uhrzghtkx().s[8]++,p());cov_1uhrzghtkx().s[9]++;a(),l((cov_1uhrzghtkx().b[13][0]++,t.firstAccessForm.controls.temporaryPassword.errors!=null)&&(cov_1uhrzghtkx().b[13][1]++,t.firstAccessForm.controls.temporaryPassword.errors.required)?(cov_1uhrzghtkx().b[12][0]++,1):(cov_1uhrzghtkx().b[12][1]++,(cov_1uhrzghtkx().b[15][0]++,t.firstAccessForm.controls.temporaryPassword.errors!=null)&&(cov_1uhrzghtkx().b[15][1]++,t.firstAccessForm.controls.temporaryPassword.errors.minlength)?(cov_1uhrzghtkx().b[14][0]++,2):(cov_1uhrzghtkx().b[14][1]++,-1)));}else{cov_1uhrzghtkx().b[10][1]++;}}function V(e,i){cov_1uhrzghtkx().f[6]++;cov_1uhrzghtkx().s[10]++;(cov_1uhrzghtkx().b[16][0]++,e&1)&&(cov_1uhrzghtkx().b[16][1]++,o(0," La nuova password \xE8 obbligatoria. "));}function z(e,i){cov_1uhrzghtkx().f[7]++;cov_1uhrzghtkx().s[11]++;(cov_1uhrzghtkx().b[17][0]++,e&1)&&(cov_1uhrzghtkx().b[17][1]++,o(0," La nuova password deve avere almeno 12 caratteri. "));}function U(e,i){cov_1uhrzghtkx().f[8]++;cov_1uhrzghtkx().s[12]++;(cov_1uhrzghtkx().b[18][0]++,e&1)&&(cov_1uhrzghtkx().b[18][1]++,o(0," La nuova password deve essere diversa da quella temporanea. "));}function B(e,i){cov_1uhrzghtkx().f[9]++;cov_1uhrzghtkx().s[13]++;if((cov_1uhrzghtkx().b[20][0]++,e&1)&&(cov_1uhrzghtkx().b[20][1]++,n(0,"p",16),c(1,V,1,0)(2,z,1,0)(3,U,1,0),s()),e&2){cov_1uhrzghtkx().b[19][0]++;let t=(cov_1uhrzghtkx().s[14]++,p());cov_1uhrzghtkx().s[15]++;a(),l((cov_1uhrzghtkx().b[22][0]++,t.firstAccessForm.controls.newPassword.errors!=null)&&(cov_1uhrzghtkx().b[22][1]++,t.firstAccessForm.controls.newPassword.errors.required)?(cov_1uhrzghtkx().b[21][0]++,1):(cov_1uhrzghtkx().b[21][1]++,(cov_1uhrzghtkx().b[24][0]++,t.firstAccessForm.controls.newPassword.errors!=null)&&(cov_1uhrzghtkx().b[24][1]++,t.firstAccessForm.controls.newPassword.errors.minlength)?(cov_1uhrzghtkx().b[23][0]++,2):(cov_1uhrzghtkx().b[23][1]++,(cov_1uhrzghtkx().b[26][0]++,t.firstAccessForm.errors!=null)&&(cov_1uhrzghtkx().b[26][1]++,t.firstAccessForm.errors.sameAsTemporaryPassword)?(cov_1uhrzghtkx().b[25][0]++,3):(cov_1uhrzghtkx().b[25][1]++,-1))));}else{cov_1uhrzghtkx().b[19][1]++;}}function Y(e,i){cov_1uhrzghtkx().f[10]++;cov_1uhrzghtkx().s[16]++;if((cov_1uhrzghtkx().b[28][0]++,e&1)&&(cov_1uhrzghtkx().b[28][1]++,n(0,"p",18),o(1),s()),e&2){cov_1uhrzghtkx().b[27][0]++;let t=(cov_1uhrzghtkx().s[17]++,p());cov_1uhrzghtkx().s[18]++;a(),C(t.loginErrorMessage);}else{cov_1uhrzghtkx().b[27][1]++;}}function K(){cov_1uhrzghtkx().f[11]++;cov_1uhrzghtkx().s[19]++;return e=>{cov_1uhrzghtkx().f[12]++;let i=(cov_1uhrzghtkx().s[20]++,e.get("temporaryPassword")?.value),t=(cov_1uhrzghtkx().s[21]++,e.get("newPassword")?.value);cov_1uhrzghtkx().s[22]++;return(cov_1uhrzghtkx().b[30][0]++,!i)||(cov_1uhrzghtkx().b[30][1]++,!t)?(cov_1uhrzghtkx().b[29][0]++,null):(cov_1uhrzghtkx().b[29][1]++,i===t?(cov_1uhrzghtkx().b[31][0]++,{sameAsTemporaryPassword:!0}):(cov_1uhrzghtkx().b[31][1]++,null));};}var $=(cov_1uhrzghtkx().s[23]++,(()=>{cov_1uhrzghtkx().f[13]++;class e extends k{fb=(cov_1uhrzghtkx().s[24]++,w(T));firstAccessForm=(cov_1uhrzghtkx().s[25]++,this.fb.nonNullable.group({username:["",[d.required,d.minLength(3)]],temporaryPassword:["",[d.required,d.minLength(12)]],newPassword:["",[d.required,d.minLength(12)]]},{validators:[K()]}));onUsernameChange(t){cov_1uhrzghtkx().f[14]++;cov_1uhrzghtkx().s[26]++;this.firstAccessForm.controls.username.setValue(t);}onTempPasswordChange(t){cov_1uhrzghtkx().f[15]++;cov_1uhrzghtkx().s[27]++;this.firstAccessForm.controls.temporaryPassword.setValue(t);}onNewPasswordChange(t){cov_1uhrzghtkx().f[16]++;cov_1uhrzghtkx().s[28]++;this.firstAccessForm.controls.newPassword.setValue(t);}onSubmit(){cov_1uhrzghtkx().f[17]++;cov_1uhrzghtkx().s[29]++;if(this.firstAccessForm.invalid){cov_1uhrzghtkx().b[32][0]++;cov_1uhrzghtkx().s[30]++;this.firstAccessForm.markAllAsTouched();cov_1uhrzghtkx().s[31]++;return;}else{cov_1uhrzghtkx().b[32][1]++;}let{username:t,temporaryPassword:m,newPassword:r}=(cov_1uhrzghtkx().s[32]++,this.firstAccessForm.getRawValue());cov_1uhrzghtkx().s[33]++;this.isLoading=!0,this.errorType=null,this.authService.setFirstAccessPassword(t,m,r).subscribe({next:h=>{cov_1uhrzghtkx().f[18]++;cov_1uhrzghtkx().s[34]++;this.handleSuccess(h);},error:()=>{cov_1uhrzghtkx().f[19]++;cov_1uhrzghtkx().s[35]++;this.isLoading=!1,this.errorType=N.USERNAME_OR_TEMP_PASSWORD_WRONG;}});}static ɵfac=(cov_1uhrzghtkx().s[36]++,(()=>{cov_1uhrzghtkx().f[20]++;let t;cov_1uhrzghtkx().s[37]++;return function(r){cov_1uhrzghtkx().f[21]++;cov_1uhrzghtkx().s[38]++;return((cov_1uhrzghtkx().b[33][0]++,t)||(cov_1uhrzghtkx().b[33][1]++,t=b(e)))((cov_1uhrzghtkx().b[34][0]++,r)||(cov_1uhrzghtkx().b[34][1]++,e));};})());static ɵcmp=(cov_1uhrzghtkx().s[39]++,v({type:e,selectors:[["app-first-access"]],features:[_],decls:33,vars:13,consts:[[1,"auth-shell"],["aria-hidden","true",1,"auth-bg-orb","auth-bg-orb-left"],["aria-hidden","true",1,"auth-bg-orb","auth-bg-orb-right"],[1,"auth-card"],[1,"auth-kicker"],[1,"auth-subtitle"],["aria-label","Indicazioni per il primo accesso",1,"auth-hints"],["novalidate","",1,"auth-form",3,"ngSubmit","formGroup"],["for","username"],["id","username","type","text","formControlName","username","placeholder","Inserisci username","autocomplete","username"],["id","username-error","role","alert",1,"auth-field-error"],["for","temporaryPassword"],["id","temporaryPassword","type","password","formControlName","temporaryPassword","placeholder","Inserisci password temporanea","autocomplete","current-password"],["id","temporaryPassword-error","role","alert",1,"auth-field-error"],["for","newPassword"],["id","newPassword","type","password","formControlName","newPassword","placeholder","Scegli una nuova password","autocomplete","new-password"],["id","newPassword-error","role","alert",1,"auth-field-error"],["type","submit",1,"auth-submit",3,"disabled"],["role","alert",1,"auth-error"]],template:function(m,r){cov_1uhrzghtkx().f[22]++;cov_1uhrzghtkx().s[40]++;(cov_1uhrzghtkx().b[35][0]++,m&1)&&(cov_1uhrzghtkx().b[35][1]++,n(0,"section",0),u(1,"div",1)(2,"div",2),n(3,"div",3)(4,"p",4),o(5,"Primo accesso"),s(),n(6,"h1"),o(7,"Imposta la tua password personale"),s(),n(8,"p",5),o(9," Hai appena effettuato il primo login con una password temporanea. Conferma le credenziali e scegli una nuova password per continuare. "),s(),n(10,"ul",6)(11,"li"),o(12,"Usa l'username assegnato all'account."),s(),n(13,"li"),o(14,"Inserisci la password temporanea ricevuta."),s(),n(15,"li"),o(16,"La nuova password deve avere almeno 12 caratteri ed essere diversa da quella temporanea."),s()(),n(17,"form",7),A("ngSubmit",function(){cov_1uhrzghtkx().f[23]++;cov_1uhrzghtkx().s[41]++;return r.onSubmit();}),n(18,"label",8),o(19,"Username"),s(),u(20,"input",9),c(21,I,3,1,"p",10),n(22,"label",11),o(23,"Password temporanea"),s(),u(24,"input",12),c(25,D,3,1,"p",13),n(26,"label",14),o(27,"Nuova password"),s(),u(28,"input",15),c(29,B,4,1,"p",16),n(30,"button",17),o(31),s(),c(32,Y,2,1,"p",18),s()()()),(cov_1uhrzghtkx().b[36][0]++,m&2)&&(cov_1uhrzghtkx().b[36][1]++,a(17),g("formGroup",r.firstAccessForm),a(3),f("aria-invalid",(cov_1uhrzghtkx().b[37][0]++,r.firstAccessForm.controls.username.invalid)&&(cov_1uhrzghtkx().b[37][1]++,r.firstAccessForm.controls.username.touched))("aria-describedby",(cov_1uhrzghtkx().b[39][0]++,r.firstAccessForm.controls.username.invalid)&&(cov_1uhrzghtkx().b[39][1]++,r.firstAccessForm.controls.username.touched)?(cov_1uhrzghtkx().b[38][0]++,"username-error"):(cov_1uhrzghtkx().b[38][1]++,null)),a(),l((cov_1uhrzghtkx().b[41][0]++,r.firstAccessForm.controls.username.touched)&&(cov_1uhrzghtkx().b[41][1]++,r.firstAccessForm.controls.username.invalid)?(cov_1uhrzghtkx().b[40][0]++,21):(cov_1uhrzghtkx().b[40][1]++,-1)),a(3),f("aria-invalid",(cov_1uhrzghtkx().b[42][0]++,r.firstAccessForm.controls.temporaryPassword.invalid)&&(cov_1uhrzghtkx().b[42][1]++,r.firstAccessForm.controls.temporaryPassword.touched))("aria-describedby",(cov_1uhrzghtkx().b[44][0]++,r.firstAccessForm.controls.temporaryPassword.invalid)&&(cov_1uhrzghtkx().b[44][1]++,r.firstAccessForm.controls.temporaryPassword.touched)?(cov_1uhrzghtkx().b[43][0]++,"temporaryPassword-error"):(cov_1uhrzghtkx().b[43][1]++,null)),a(),l((cov_1uhrzghtkx().b[46][0]++,r.firstAccessForm.controls.temporaryPassword.touched)&&(cov_1uhrzghtkx().b[46][1]++,r.firstAccessForm.controls.temporaryPassword.invalid)?(cov_1uhrzghtkx().b[45][0]++,25):(cov_1uhrzghtkx().b[45][1]++,-1)),a(3),f("aria-invalid",((cov_1uhrzghtkx().b[47][0]++,r.firstAccessForm.controls.newPassword.invalid)||(cov_1uhrzghtkx().b[47][1]++,!!((cov_1uhrzghtkx().b[48][0]++,r.firstAccessForm.errors!=null)&&(cov_1uhrzghtkx().b[48][1]++,r.firstAccessForm.errors.sameAsTemporaryPassword))))&&(cov_1uhrzghtkx().b[47][2]++,r.firstAccessForm.controls.newPassword.touched))("aria-describedby",((cov_1uhrzghtkx().b[50][0]++,r.firstAccessForm.controls.newPassword.invalid)||(cov_1uhrzghtkx().b[50][1]++,r.firstAccessForm.errors!=null)&&(cov_1uhrzghtkx().b[50][2]++,r.firstAccessForm.errors.sameAsTemporaryPassword))&&(cov_1uhrzghtkx().b[50][3]++,r.firstAccessForm.controls.newPassword.touched)?(cov_1uhrzghtkx().b[49][0]++,"newPassword-error"):(cov_1uhrzghtkx().b[49][1]++,null)),a(),l((cov_1uhrzghtkx().b[52][0]++,r.firstAccessForm.controls.newPassword.touched)&&((cov_1uhrzghtkx().b[52][1]++,r.firstAccessForm.controls.newPassword.invalid)||(cov_1uhrzghtkx().b[52][2]++,r.firstAccessForm.errors!=null)&&(cov_1uhrzghtkx().b[52][3]++,r.firstAccessForm.errors.sameAsTemporaryPassword))?(cov_1uhrzghtkx().b[51][0]++,29):(cov_1uhrzghtkx().b[51][1]++,-1)),a(),g("disabled",(cov_1uhrzghtkx().b[53][0]++,r.isLoading)||(cov_1uhrzghtkx().b[53][1]++,r.firstAccessForm.invalid)),a(),P(" ",r.isLoading?(cov_1uhrzghtkx().b[54][0]++,"Aggiornamento in corso..."):(cov_1uhrzghtkx().b[54][1]++,"Conferma e continua")," "),a(),l(r.loginErrorMessage?(cov_1uhrzghtkx().b[55][0]++,32):(cov_1uhrzghtkx().b[55][1]++,-1)));},dependencies:[E,S,F,y,x,O,M],styles:[`[_nghost-%COMP%]{display:block;min-height:100dvh}.auth-shell[_ngcontent-%COMP%]{--bg: #fef3c7;--card: #fffdf8;--ink: #1f2933;--muted: #5c6470;--accent: #fcd34d;--accent-strong: #fcd34d;--focus: #fcd34d;min-height:100dvh;display:grid;place-items:center;padding:1.5rem;background:radial-gradient(circle at 12% 18%,#fde68a 0 8%,transparent 45%),radial-gradient(circle at 82% 12%,#fcd34d 0 10%,transparent 48%),linear-gradient(140deg,#fff7d1 0%,var(--bg) 46%,#fef3c7 100%);position:relative;overflow:hidden}.auth-bg-orb[_ngcontent-%COMP%]{position:absolute;width:28rem;height:28rem;border-radius:9999px;opacity:.25;filter:blur(24px);pointer-events:none}.auth-bg-orb-left[_ngcontent-%COMP%]{background:#fcd34d;left:-9rem;bottom:-8rem}.auth-bg-orb-right[_ngcontent-%COMP%]{background:#fcd34d;right:-10rem;top:-8rem}.auth-card[_ngcontent-%COMP%]{width:min(92vw,32rem);background:color-mix(in srgb,var(--card) 88%,white 12%);border:1px solid color-mix(in srgb,var(--ink) 18%,transparent 82%);border-radius:1.25rem;box-shadow:0 24px 54px #1118272e,0 3px 12px #fcd34d66;padding:1.9rem;position:relative;z-index:1;animation:_ngcontent-%COMP%_card-enter .26s ease-out}.auth-kicker[_ngcontent-%COMP%]{margin:0;font:700 .72rem/1.1 Avenir Next,Gill Sans,sans-serif;letter-spacing:.13em;text-transform:uppercase;color:var(--accent)}h1[_ngcontent-%COMP%]{margin:.45rem 0 0;font:700 clamp(1.55rem,2.7vw,2rem)/1.12 "Avenir Next","Trebuchet MS",sans-serif;color:var(--ink)}.auth-subtitle[_ngcontent-%COMP%]{margin:.6rem 0 1rem;color:var(--muted);font:500 .95rem/1.45 Avenir Next,Gill Sans,sans-serif}.auth-hints[_ngcontent-%COMP%]{margin:0 0 1.2rem;padding:0 0 0 1.15rem;display:grid;gap:.45rem;color:#32404d;font:500 .88rem/1.45 Avenir Next,Gill Sans,sans-serif}.auth-form[_ngcontent-%COMP%]{display:grid;gap:.72rem}label[_ngcontent-%COMP%]{font:600 .82rem/1.2 Avenir Next,Gill Sans,sans-serif;color:#2e3a46}input[_ngcontent-%COMP%]{width:100%;border-radius:.75rem;border:1px solid #b7c3d1;background:#fff;padding:.74rem .86rem;color:#111827;font:500 .94rem/1.2 Avenir Next,Gill Sans,sans-serif;transition:border-color .14s ease,box-shadow .14s ease}input[_ngcontent-%COMP%]::placeholder{color:#7f8b97}input[_ngcontent-%COMP%]:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px color-mix(in srgb,var(--focus) 35%,transparent 65%)}input.ng-invalid.ng-touched[_ngcontent-%COMP%]{border-color:#b91c1c}.auth-field-error[_ngcontent-%COMP%]{margin:-.25rem 0 0;color:#b91c1c;font:600 .82rem/1.35 Avenir Next,Gill Sans,sans-serif}.auth-submit[_ngcontent-%COMP%]{border:0;border-radius:.75rem;padding:.78rem 1rem;margin-top:.4rem;background:linear-gradient(120deg,var(--accent) 0%,var(--accent-strong) 100%);color:#1f2933;font:700 .95rem/1 Avenir Next,Trebuchet MS,sans-serif;cursor:pointer;transition:transform .12s ease,filter .14s ease}.auth-submit[_ngcontent-%COMP%]:hover:not(:disabled){transform:translateY(-1px);filter:brightness(1.05)}.auth-submit[_ngcontent-%COMP%]:disabled{opacity:.68;cursor:not-allowed}.auth-error[_ngcontent-%COMP%]{margin:.35rem 0 0;color:#b91c1c;font:600 .82rem/1.35 Avenir Next,Gill Sans,sans-serif}@keyframes _ngcontent-%COMP%_card-enter{0%{opacity:0;transform:translateY(8px) scale(.985)}to{opacity:1;transform:translateY(0) scale(1)}}@media(max-width:520px){.auth-card[_ngcontent-%COMP%]{padding:1.35rem;border-radius:1rem}.auth-subtitle[_ngcontent-%COMP%]{font-size:.9rem}.auth-hints[_ngcontent-%COMP%]{font-size:.84rem}} +/*# sourceMappingURL=first-access.component-RNKKNA3X.css.map */`]}));}cov_1uhrzghtkx().s[42]++;return e;})());export{$ as FirstAccessComponent};//# sourceMappingURL=chunk-YUDTQWM3.js.map +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJvIiwiRyIsImUiLCJpIiwiY292XzF1aHJ6Z2h0a3giLCJmIiwicyIsImIiLCJJIiwibiIsImMiLCJMIiwidCIsInAiLCJhIiwibCIsImZpcnN0QWNjZXNzRm9ybSIsImNvbnRyb2xzIiwidXNlcm5hbWUiLCJlcnJvcnMiLCJyZXF1aXJlZCIsIm1pbmxlbmd0aCIsInEiLCJSIiwiRCIsInRlbXBvcmFyeVBhc3N3b3JkIiwiViIsInoiLCJVIiwiQiIsIm5ld1Bhc3N3b3JkIiwic2FtZUFzVGVtcG9yYXJ5UGFzc3dvcmQiLCJZIiwiQyIsImxvZ2luRXJyb3JNZXNzYWdlIiwiSyIsImdldCIsInZhbHVlIiwiJCIsImsiLCJmYiIsInciLCJUIiwibm9uTnVsbGFibGUiLCJncm91cCIsImQiLCJtaW5MZW5ndGgiLCJ2YWxpZGF0b3JzIiwib25Vc2VybmFtZUNoYW5nZSIsInNldFZhbHVlIiwib25UZW1wUGFzc3dvcmRDaGFuZ2UiLCJvbk5ld1Bhc3N3b3JkQ2hhbmdlIiwib25TdWJtaXQiLCJpbnZhbGlkIiwibWFya0FsbEFzVG91Y2hlZCIsIm0iLCJyIiwiZ2V0UmF3VmFsdWUiLCJpc0xvYWRpbmciLCJlcnJvclR5cGUiLCJhdXRoU2VydmljZSIsInNldEZpcnN0QWNjZXNzUGFzc3dvcmQiLCJzdWJzY3JpYmUiLCJuZXh0IiwiaCIsImhhbmRsZVN1Y2Nlc3MiLCJlcnJvciIsIk4iLCJVU0VSTkFNRV9PUl9URU1QX1BBU1NXT1JEX1dST05HIiwiybVmYWMiLCLJtWNtcCIsInYiLCJ0eXBlIiwic2VsZWN0b3JzIiwiZmVhdHVyZXMiLCJfIiwiZGVjbHMiLCJ2YXJzIiwiY29uc3RzIiwidGVtcGxhdGUiLCJ1IiwiQSIsImciLCJ0b3VjaGVkIiwiUCIsImRlcGVuZGVuY2llcyIsIkUiLCJTIiwiRiIsInkiLCJ4IiwiTyIsIk0iLCJzdHlsZXMiLCJGaXJzdEFjY2Vzc0NvbXBvbmVudCJdLCJzb3VyY2VzIjpbInNyYy9hcHAvZmVhdHVyZXMvdXNlci1hdXRoL2NvbXBvbmVudHMvZmlyc3QtYWNjZXNzL2ZpcnN0LWFjY2Vzcy5jb21wb25lbnQudHMiLCJzcmMvYXBwL2ZlYXR1cmVzL3VzZXItYXV0aC9jb21wb25lbnRzL2ZpcnN0LWFjY2Vzcy9maXJzdC1hY2Nlc3MuY29tcG9uZW50Lmh0bWwiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJlYWN0aXZlRm9ybXNNb2R1bGUsIFZhbGlkYXRvcnMsIEZvcm1CdWlsZGVyLCBWYWxpZGF0b3JGbiwgQWJzdHJhY3RDb250cm9sLCBWYWxpZGF0aW9uRXJyb3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQXV0aEJhc2VDb21wb25lbnQgfSBmcm9tICcuLi9hdXRoLWJhc2UvYXV0aC1iYXNlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBdXRoRXJyb3JUeXBlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2F1dGgtZXJyb3ItdHlwZS5lbnVtJztcblxuZnVuY3Rpb24gbmV3UGFzc3dvcmREaWZmZXJzRnJvbVRlbXBQYXNzd29yZCgpOiBWYWxpZGF0b3JGbiB7XG5cdHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xuXHRcdGNvbnN0IHRlbXBQYXNzd29yZCA9IGNvbnRyb2wuZ2V0KCd0ZW1wb3JhcnlQYXNzd29yZCcpPy52YWx1ZSBhcyBzdHJpbmc7XG5cdFx0Y29uc3QgbmV3UGFzc3dvcmQgPSBjb250cm9sLmdldCgnbmV3UGFzc3dvcmQnKT8udmFsdWUgYXMgc3RyaW5nO1xuXG5cdFx0aWYgKCF0ZW1wUGFzc3dvcmQgfHwgIW5ld1Bhc3N3b3JkKSB7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGVtcFBhc3N3b3JkID09PSBuZXdQYXNzd29yZCA/IHsgc2FtZUFzVGVtcG9yYXJ5UGFzc3dvcmQ6IHRydWUgfSA6IG51bGw7XG5cdH07XG59XG5cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogJ2FwcC1maXJzdC1hY2Nlc3MnLFxuXHRpbXBvcnRzOiBbUmVhY3RpdmVGb3Jtc01vZHVsZV0sXG5cdHRlbXBsYXRlVXJsOiAnLi9maXJzdC1hY2Nlc3MuY29tcG9uZW50Lmh0bWwnLFxuXHRzdHlsZVVybHM6IFsnLi9maXJzdC1hY2Nlc3MuY29tcG9uZW50LmNzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBGaXJzdEFjY2Vzc0NvbXBvbmVudCBleHRlbmRzIEF1dGhCYXNlQ29tcG9uZW50IHtcblx0cHJpdmF0ZSByZWFkb25seSBmYiA9IGluamVjdChGb3JtQnVpbGRlcik7XG5cblx0cHVibGljIHJlYWRvbmx5IGZpcnN0QWNjZXNzRm9ybSA9IHRoaXMuZmIubm9uTnVsbGFibGUuZ3JvdXAoXG5cdFx0e1xuXHRcdFx0dXNlcm5hbWU6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMubWluTGVuZ3RoKDMpXV0sXG5cdFx0XHR0ZW1wb3JhcnlQYXNzd29yZDogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5taW5MZW5ndGgoMTIpXV0sXG5cdFx0XHRuZXdQYXNzd29yZDogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5taW5MZW5ndGgoMTIpXV0sXG5cdFx0fSxcblx0XHR7IHZhbGlkYXRvcnM6IFtuZXdQYXNzd29yZERpZmZlcnNGcm9tVGVtcFBhc3N3b3JkKCldIH1cblx0KTtcblxuXG5cdHB1YmxpYyBvdmVycmlkZSBvblVzZXJuYW1lQ2hhbmdlKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcblx0XHR0aGlzLmZpcnN0QWNjZXNzRm9ybS5jb250cm9scy51c2VybmFtZS5zZXRWYWx1ZSh2YWx1ZSk7XG5cdH1cblxuXHRwdWJsaWMgb25UZW1wUGFzc3dvcmRDaGFuZ2UodmFsdWU6IHN0cmluZyk6IHZvaWQge1xuXHRcdHRoaXMuZmlyc3RBY2Nlc3NGb3JtLmNvbnRyb2xzLnRlbXBvcmFyeVBhc3N3b3JkLnNldFZhbHVlKHZhbHVlKTtcblx0fVxuXG5cdHB1YmxpYyBvbk5ld1Bhc3N3b3JkQ2hhbmdlKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcblx0XHR0aGlzLmZpcnN0QWNjZXNzRm9ybS5jb250cm9scy5uZXdQYXNzd29yZC5zZXRWYWx1ZSh2YWx1ZSk7XG5cdH1cblxuXHRwdWJsaWMgb3ZlcnJpZGUgb25TdWJtaXQoKTogdm9pZCB7XG5cdFx0aWYgKHRoaXMuZmlyc3RBY2Nlc3NGb3JtLmludmFsaWQpIHtcblx0XHRcdHRoaXMuZmlyc3RBY2Nlc3NGb3JtLm1hcmtBbGxBc1RvdWNoZWQoKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCB7IHVzZXJuYW1lLCB0ZW1wb3JhcnlQYXNzd29yZCwgbmV3UGFzc3dvcmQgfSA9IHRoaXMuZmlyc3RBY2Nlc3NGb3JtLmdldFJhd1ZhbHVlKCk7XG5cblx0XHR0aGlzLmlzTG9hZGluZyA9IHRydWU7XG5cdFx0dGhpcy5lcnJvclR5cGUgPSBudWxsO1xuXG5cdFx0dGhpcy5hdXRoU2VydmljZS5zZXRGaXJzdEFjY2Vzc1Bhc3N3b3JkKHVzZXJuYW1lLCB0ZW1wb3JhcnlQYXNzd29yZCwgbmV3UGFzc3dvcmQpLnN1YnNjcmliZSh7XG5cdFx0XHRuZXh0OiAoc2Vzc2lvbikgPT4ge1xuXHRcdFx0XHR0aGlzLmhhbmRsZVN1Y2Nlc3Moc2Vzc2lvbik7XG5cdFx0XHR9LFxuXHRcdFx0ZXJyb3I6ICgpID0+IHtcblx0XHRcdFx0dGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcblx0XHRcdFx0dGhpcy5lcnJvclR5cGUgPSBBdXRoRXJyb3JUeXBlLlVTRVJOQU1FX09SX1RFTVBfUEFTU1dPUkRfV1JPTkc7XG5cdFx0XHR9LFxuXHRcdH0pO1xuXHR9XG5cbn1cbiIsIjxzZWN0aW9uIGNsYXNzPVwiYXV0aC1zaGVsbFwiPlxuICA8ZGl2IGNsYXNzPVwiYXV0aC1iZy1vcmIgYXV0aC1iZy1vcmItbGVmdFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiYXV0aC1iZy1vcmIgYXV0aC1iZy1vcmItcmlnaHRcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwiYXV0aC1jYXJkXCI+XG4gICAgPHAgY2xhc3M9XCJhdXRoLWtpY2tlclwiPlByaW1vIGFjY2Vzc288L3A+XG4gICAgPGgxPkltcG9zdGEgbGEgdHVhIHBhc3N3b3JkIHBlcnNvbmFsZTwvaDE+XG4gICAgPHAgY2xhc3M9XCJhdXRoLXN1YnRpdGxlXCI+XG4gICAgICBIYWkgYXBwZW5hIGVmZmV0dHVhdG8gaWwgcHJpbW8gbG9naW4gY29uIHVuYSBwYXNzd29yZCB0ZW1wb3JhbmVhLiBDb25mZXJtYSBsZSBjcmVkZW56aWFsaSBlIHNjZWdsaSB1bmEgbnVvdmFcbiAgICAgIHBhc3N3b3JkIHBlciBjb250aW51YXJlLlxuICAgIDwvcD5cblxuICAgIDx1bCBjbGFzcz1cImF1dGgtaGludHNcIiBhcmlhLWxhYmVsPVwiSW5kaWNhemlvbmkgcGVyIGlsIHByaW1vIGFjY2Vzc29cIj5cbiAgICAgIDxsaT5Vc2EgbCd1c2VybmFtZSBhc3NlZ25hdG8gYWxsJ2FjY291bnQuPC9saT5cbiAgICAgIDxsaT5JbnNlcmlzY2kgbGEgcGFzc3dvcmQgdGVtcG9yYW5lYSByaWNldnV0YS48L2xpPlxuICAgICAgPGxpPkxhIG51b3ZhIHBhc3N3b3JkIGRldmUgYXZlcmUgYWxtZW5vIDEyIGNhcmF0dGVyaSBlZCBlc3NlcmUgZGl2ZXJzYSBkYSBxdWVsbGEgdGVtcG9yYW5lYS48L2xpPlxuICAgIDwvdWw+XG5cbiAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cImZpcnN0QWNjZXNzRm9ybVwiIChuZ1N1Ym1pdCk9XCJvblN1Ym1pdCgpXCIgY2xhc3M9XCJhdXRoLWZvcm1cIiBub3ZhbGlkYXRlPlxuICAgICAgPGxhYmVsIGZvcj1cInVzZXJuYW1lXCI+VXNlcm5hbWU8L2xhYmVsPlxuICAgICAgPGlucHV0IGlkPVwidXNlcm5hbWVcIiB0eXBlPVwidGV4dFwiIGZvcm1Db250cm9sTmFtZT1cInVzZXJuYW1lXCIgcGxhY2Vob2xkZXI9XCJJbnNlcmlzY2kgdXNlcm5hbWVcIlxuICAgICAgICBhdXRvY29tcGxldGU9XCJ1c2VybmFtZVwiXG4gICAgICAgIFthdHRyLmFyaWEtaW52YWxpZF09XCJmaXJzdEFjY2Vzc0Zvcm0uY29udHJvbHMudXNlcm5hbWUuaW52YWxpZCAmJiBmaXJzdEFjY2Vzc0Zvcm0uY29udHJvbHMudXNlcm5hbWUudG91Y2hlZFwiXG4gICAgICAgIFthdHRyLmFyaWEtZGVzY3JpYmVkYnldPVwiZmlyc3RBY2Nlc3NGb3JtLmNvbnRyb2xzLnVzZXJuYW1lLmludmFsaWQgJiYgZmlyc3RBY2Nlc3NGb3JtLmNvbnRyb2xzLnVzZXJuYW1lLnRvdWNoZWQgPyAndXNlcm5hbWUtZXJyb3InIDogbnVsbFwiIC8+XG5cbiAgICAgIEBpZiAoZmlyc3RBY2Nlc3NGb3JtLmNvbnRyb2xzLnVzZXJuYW1lLnRvdWNoZWQgJiYgZmlyc3RBY2Nlc3NGb3JtLmNvbnRyb2xzLnVzZXJuYW1lLmludmFsaWQpIHtcbiAgICAgIDxwIGlkPVwidXNlcm5hbWUtZXJyb3JcIiBjbGFzcz1cImF1dGgtZmllbGQtZXJyb3JcIiByb2xlPVwiYWxlcnRcIj5cbiAgICAgICAgQGlmIChmaXJzdEFjY2Vzc0Zvcm0uY29udHJvbHMudXNlcm5hbWUuZXJyb3JzPy5bJ3JlcXVpcmVkJ10pIHtcbiAgICAgICAgTCd1c2VybmFtZSDDqCBvYmJsaWdhdG9yaW8uXG4gICAgICAgIH0gQGVsc2UgaWYgKGZpcnN0QWNjZXNzRm9ybS5jb250cm9scy51c2VybmFtZS5lcnJvcnM/LlsnbWlubGVuZ3RoJ10pIHtcbiAgICAgICAgTCd1c2VybmFtZSBkZXZlIGF2ZXJlIGFsbWVubyAzIGNhcmF0dGVyaS5cbiAgICAgICAgfVxuICAgICAgPC9wPlxuICAgICAgfVxuXG4gICAgICA8bGFiZWwgZm9yPVwidGVtcG9yYXJ5UGFzc3dvcmRcIj5QYXNzd29yZCB0ZW1wb3JhbmVhPC9sYWJlbD5cbiAgICAgIDxpbnB1dCBpZD1cInRlbXBvcmFyeVBhc3N3b3JkXCIgdHlwZT1cInBhc3N3b3JkXCIgZm9ybUNvbnRyb2xOYW1lPVwidGVtcG9yYXJ5UGFzc3dvcmRcIlxuICAgICAgICBwbGFjZWhvbGRlcj1cIkluc2VyaXNjaSBwYXNzd29yZCB0ZW1wb3JhbmVhXCIgYXV0b2NvbXBsZXRlPVwiY3VycmVudC1wYXNzd29yZFwiXG4gICAgICAgIFthdHRyLmFyaWEtaW52YWxpZF09XCJmaXJzdEFjY2Vzc0Zvcm0uY29udHJvbHMudGVtcG9yYXJ5UGFzc3dvcmQuaW52YWxpZCAmJiBmaXJzdEFjY2Vzc0Zvcm0uY29udHJvbHMudGVtcG9yYXJ5UGFzc3dvcmQudG91Y2hlZFwiXG4gICAgICAgIFthdHRyLmFyaWEtZGVzY3JpYmVkYnldPVwiZmlyc3RBY2Nlc3NGb3JtLmNvbnRyb2xzLnRlbXBvcmFyeVBhc3N3b3JkLmludmFsaWQgJiYgZmlyc3RBY2Nlc3NGb3JtLmNvbnRyb2xzLnRlbXBvcmFyeVBhc3N3b3JkLnRvdWNoZWQgPyAndGVtcG9yYXJ5UGFzc3dvcmQtZXJyb3InIDogbnVsbFwiIC8+XG5cbiAgICAgIEBpZiAoZmlyc3RBY2Nlc3NGb3JtLmNvbnRyb2xzLnRlbXBvcmFyeVBhc3N3b3JkLnRvdWNoZWQgJiYgZmlyc3RBY2Nlc3NGb3JtLmNvbnRyb2xzLnRlbXBvcmFyeVBhc3N3b3JkLmludmFsaWQpIHtcbiAgICAgIDxwIGlkPVwidGVtcG9yYXJ5UGFzc3dvcmQtZXJyb3JcIiBjbGFzcz1cImF1dGgtZmllbGQtZXJyb3JcIiByb2xlPVwiYWxlcnRcIj5cbiAgICAgICAgQGlmIChmaXJzdEFjY2Vzc0Zvcm0uY29udHJvbHMudGVtcG9yYXJ5UGFzc3dvcmQuZXJyb3JzPy5bJ3JlcXVpcmVkJ10pIHtcbiAgICAgICAgTGEgcGFzc3dvcmQgdGVtcG9yYW5lYSDDqCBvYmJsaWdhdG9yaWEuXG4gICAgICAgIH0gQGVsc2UgaWYgKGZpcnN0QWNjZXNzRm9ybS5jb250cm9scy50ZW1wb3JhcnlQYXNzd29yZC5lcnJvcnM/LlsnbWlubGVuZ3RoJ10pIHtcbiAgICAgICAgTGEgcGFzc3dvcmQgdGVtcG9yYW5lYSBkZXZlIGF2ZXJlIGFsbWVubyAxMiBjYXJhdHRlcmkuXG4gICAgICAgIH1cbiAgICAgIDwvcD5cbiAgICAgIH1cblxuICAgICAgPGxhYmVsIGZvcj1cIm5ld1Bhc3N3b3JkXCI+TnVvdmEgcGFzc3dvcmQ8L2xhYmVsPlxuICAgICAgPGlucHV0IGlkPVwibmV3UGFzc3dvcmRcIiB0eXBlPVwicGFzc3dvcmRcIiBmb3JtQ29udHJvbE5hbWU9XCJuZXdQYXNzd29yZFwiIHBsYWNlaG9sZGVyPVwiU2NlZ2xpIHVuYSBudW92YSBwYXNzd29yZFwiXG4gICAgICAgIGF1dG9jb21wbGV0ZT1cIm5ldy1wYXNzd29yZFwiXG4gICAgICAgIFthdHRyLmFyaWEtaW52YWxpZF09XCIoZmlyc3RBY2Nlc3NGb3JtLmNvbnRyb2xzLm5ld1Bhc3N3b3JkLmludmFsaWQgfHwgISFmaXJzdEFjY2Vzc0Zvcm0uZXJyb3JzPy5bJ3NhbWVBc1RlbXBvcmFyeVBhc3N3b3JkJ10pICYmIGZpcnN0QWNjZXNzRm9ybS5jb250cm9scy5uZXdQYXNzd29yZC50b3VjaGVkXCJcbiAgICAgICAgW2F0dHIuYXJpYS1kZXNjcmliZWRieV09XCIoZmlyc3RBY2Nlc3NGb3JtLmNvbnRyb2xzLm5ld1Bhc3N3b3JkLmludmFsaWQgfHwgISFmaXJzdEFjY2Vzc0Zvcm0uZXJyb3JzPy5bJ3NhbWVBc1RlbXBvcmFyeVBhc3N3b3JkJ10pICYmIGZpcnN0QWNjZXNzRm9ybS5jb250cm9scy5uZXdQYXNzd29yZC50b3VjaGVkID8gJ25ld1Bhc3N3b3JkLWVycm9yJyA6IG51bGxcIiAvPlxuICAgICAgQGlmIChmaXJzdEFjY2Vzc0Zvcm0uY29udHJvbHMubmV3UGFzc3dvcmQudG91Y2hlZCAmJiAoZmlyc3RBY2Nlc3NGb3JtLmNvbnRyb2xzLm5ld1Bhc3N3b3JkLmludmFsaWQgfHxcbiAgICAgIGZpcnN0QWNjZXNzRm9ybS5lcnJvcnM/Llsnc2FtZUFzVGVtcG9yYXJ5UGFzc3dvcmQnXSkpIHtcbiAgICAgIDxwIGlkPVwibmV3UGFzc3dvcmQtZXJyb3JcIiBjbGFzcz1cImF1dGgtZmllbGQtZXJyb3JcIiByb2xlPVwiYWxlcnRcIj5cbiAgICAgICAgQGlmIChmaXJzdEFjY2Vzc0Zvcm0uY29udHJvbHMubmV3UGFzc3dvcmQuZXJyb3JzPy5bJ3JlcXVpcmVkJ10pIHtcbiAgICAgICAgTGEgbnVvdmEgcGFzc3dvcmQgw6ggb2JibGlnYXRvcmlhLlxuICAgICAgICB9IEBlbHNlIGlmIChmaXJzdEFjY2Vzc0Zvcm0uY29udHJvbHMubmV3UGFzc3dvcmQuZXJyb3JzPy5bJ21pbmxlbmd0aCddKSB7XG4gICAgICAgIExhIG51b3ZhIHBhc3N3b3JkIGRldmUgYXZlcmUgYWxtZW5vIDEyIGNhcmF0dGVyaS5cbiAgICAgICAgfSBAZWxzZSBpZiAoZmlyc3RBY2Nlc3NGb3JtLmVycm9ycz8uWydzYW1lQXNUZW1wb3JhcnlQYXNzd29yZCddKSB7XG4gICAgICAgIExhIG51b3ZhIHBhc3N3b3JkIGRldmUgZXNzZXJlIGRpdmVyc2EgZGEgcXVlbGxhIHRlbXBvcmFuZWEuXG4gICAgICAgIH1cbiAgICAgIDwvcD5cbiAgICAgIH1cblxuICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgW2Rpc2FibGVkXT1cImlzTG9hZGluZyB8fCBmaXJzdEFjY2Vzc0Zvcm0uaW52YWxpZFwiIGNsYXNzPVwiYXV0aC1zdWJtaXRcIj5cbiAgICAgICAge3sgaXNMb2FkaW5nID8gJ0FnZ2lvcm5hbWVudG8gaW4gY29yc28uLi4nIDogJ0NvbmZlcm1hIGUgY29udGludWEnIH19XG4gICAgICA8L2J1dHRvbj5cblxuICAgICAgQGlmIChsb2dpbkVycm9yTWVzc2FnZSkge1xuICAgICAgPHAgY2xhc3M9XCJhdXRoLWVycm9yXCIgcm9sZT1cImFsZXJ0XCI+e3sgbG9naW5FcnJvck1lc3NhZ2UgfX08L3A+XG4gICAgICB9XG4gICAgPC9mb3JtPlxuICA8L2Rpdj5cbjwvc2VjdGlvbj4iXSwi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 \ No newline at end of file diff --git a/frontend/dist-instrumented/chunk-YUDTQWM3.js.map b/frontend/dist-instrumented/chunk-YUDTQWM3.js.map new file mode 100644 index 00000000..35e74670 --- /dev/null +++ b/frontend/dist-instrumented/chunk-YUDTQWM3.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["src/app/features/user-auth/components/first-access/first-access.component.ts", "src/app/features/user-auth/components/first-access/first-access.component.html"], + "sourcesContent": ["import { Component, inject } from '@angular/core';\nimport { ReactiveFormsModule, Validators, FormBuilder, ValidatorFn, AbstractControl, ValidationErrors } from '@angular/forms';\nimport { AuthBaseComponent } from '../auth-base/auth-base.component';\nimport { AuthErrorType } from '../../models/auth-error-type.enum';\n\nfunction newPasswordDiffersFromTempPassword(): ValidatorFn {\n\treturn (control: AbstractControl): ValidationErrors | null => {\n\t\tconst tempPassword = control.get('temporaryPassword')?.value as string;\n\t\tconst newPassword = control.get('newPassword')?.value as string;\n\n\t\tif (!tempPassword || !newPassword) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn tempPassword === newPassword ? { sameAsTemporaryPassword: true } : null;\n\t};\n}\n\n@Component({\n\tselector: 'app-first-access',\n\timports: [ReactiveFormsModule],\n\ttemplateUrl: './first-access.component.html',\n\tstyleUrls: ['./first-access.component.css'],\n})\nexport class FirstAccessComponent extends AuthBaseComponent {\n\tprivate readonly fb = inject(FormBuilder);\n\n\tpublic readonly firstAccessForm = this.fb.nonNullable.group(\n\t\t{\n\t\t\tusername: ['', [Validators.required, Validators.minLength(3)]],\n\t\t\ttemporaryPassword: ['', [Validators.required, Validators.minLength(12)]],\n\t\t\tnewPassword: ['', [Validators.required, Validators.minLength(12)]],\n\t\t},\n\t\t{ validators: [newPasswordDiffersFromTempPassword()] }\n\t);\n\n\n\tpublic override onUsernameChange(value: string): void {\n\t\tthis.firstAccessForm.controls.username.setValue(value);\n\t}\n\n\tpublic onTempPasswordChange(value: string): void {\n\t\tthis.firstAccessForm.controls.temporaryPassword.setValue(value);\n\t}\n\n\tpublic onNewPasswordChange(value: string): void {\n\t\tthis.firstAccessForm.controls.newPassword.setValue(value);\n\t}\n\n\tpublic override onSubmit(): void {\n\t\tif (this.firstAccessForm.invalid) {\n\t\t\tthis.firstAccessForm.markAllAsTouched();\n\t\t\treturn;\n\t\t}\n\n\t\tconst { username, temporaryPassword, newPassword } = this.firstAccessForm.getRawValue();\n\n\t\tthis.isLoading = true;\n\t\tthis.errorType = null;\n\n\t\tthis.authService.setFirstAccessPassword(username, temporaryPassword, newPassword).subscribe({\n\t\t\tnext: (session) => {\n\t\t\t\tthis.handleSuccess(session);\n\t\t\t},\n\t\t\terror: () => {\n\t\t\t\tthis.isLoading = false;\n\t\t\t\tthis.errorType = AuthErrorType.USERNAME_OR_TEMP_PASSWORD_WRONG;\n\t\t\t},\n\t\t});\n\t}\n\n}\n", "
\n
\n
\n\n
\n

Primo accesso

\n

Imposta la tua password personale

\n

\n Hai appena effettuato il primo login con una password temporanea. Conferma le credenziali e scegli una nuova\n password per continuare.\n

\n\n
    \n
  • Usa l'username assegnato all'account.
  • \n
  • Inserisci la password temporanea ricevuta.
  • \n
  • La nuova password deve avere almeno 12 caratteri ed essere diversa da quella temporanea.
  • \n
\n\n
\n \n \n\n @if (firstAccessForm.controls.username.touched && firstAccessForm.controls.username.invalid) {\n

\n @if (firstAccessForm.controls.username.errors?.['required']) {\n L'username è obbligatorio.\n } @else if (firstAccessForm.controls.username.errors?.['minlength']) {\n L'username deve avere almeno 3 caratteri.\n }\n

\n }\n\n \n \n\n @if (firstAccessForm.controls.temporaryPassword.touched && firstAccessForm.controls.temporaryPassword.invalid) {\n

\n @if (firstAccessForm.controls.temporaryPassword.errors?.['required']) {\n La password temporanea è obbligatoria.\n } @else if (firstAccessForm.controls.temporaryPassword.errors?.['minlength']) {\n La password temporanea deve avere almeno 12 caratteri.\n }\n

\n }\n\n \n \n @if (firstAccessForm.controls.newPassword.touched && (firstAccessForm.controls.newPassword.invalid ||\n firstAccessForm.errors?.['sameAsTemporaryPassword'])) {\n

\n @if (firstAccessForm.controls.newPassword.errors?.['required']) {\n La nuova password è obbligatoria.\n } @else if (firstAccessForm.controls.newPassword.errors?.['minlength']) {\n La nuova password deve avere almeno 12 caratteri.\n } @else if (firstAccessForm.errors?.['sameAsTemporaryPassword']) {\n La nuova password deve essere diversa da quella temporanea.\n }\n

\n }\n\n \n\n @if (loginErrorMessage) {\n

{{ loginErrorMessage }}

\n }\n
\n
\n
"], + "mappings": "wdC4BQA,EAAA,EAAA,iCAAA,uBAEAA,EAAA,EAAA,6CAAA,2BAJFC,EAAA,EAAA,IAAA,EAAA,EACEC,EAAA,EAAAC,EAAA,EAAA,CAAA,EAA8D,EAAAC,EAAA,EAAA,CAAA,EAKhEC,EAAA,kBALEC,EAAA,EAAAC,EAAAC,EAAAC,gBAAAC,SAAAC,SAAAC,QAAA,MAAAJ,EAAAC,gBAAAC,SAAAC,SAAAC,OAAA,SAAA,EAAAJ,EAAAC,gBAAAC,SAAAC,SAAAC,QAAA,MAAAJ,EAAAC,gBAAAC,SAAAC,SAAAC,OAAA,UAAA,EAAA,EAAA,wBAiBAZ,EAAA,EAAA,6CAAA,uBAEAA,EAAA,EAAA,0DAAA,2BAJFC,EAAA,EAAA,IAAA,EAAA,EACEC,EAAA,EAAAW,EAAA,EAAA,CAAA,EAAuE,EAAAC,EAAA,EAAA,CAAA,EAKzET,EAAA,kBALEC,EAAA,EAAAC,EAAAC,EAAAC,gBAAAC,SAAAK,kBAAAH,QAAA,MAAAJ,EAAAC,gBAAAC,SAAAK,kBAAAH,OAAA,SAAA,EAAAJ,EAAAC,gBAAAC,SAAAK,kBAAAH,QAAA,MAAAJ,EAAAC,gBAAAC,SAAAK,kBAAAH,OAAA,UAAA,EAAA,EAAA,wBAiBAZ,EAAA,EAAA,wCAAA,uBAEAA,EAAA,EAAA,qDAAA,uBAEAA,EAAA,EAAA,+DAAA,2BANFC,EAAA,EAAA,IAAA,EAAA,EACEC,EAAA,EAAAc,EAAA,EAAA,CAAA,EAAiE,EAAAC,EAAA,EAAA,CAAA,EAEQ,EAAAC,EAAA,EAAA,CAAA,EAK3Eb,EAAA,kBAPEC,EAAA,EAAAC,EAAAC,EAAAC,gBAAAC,SAAAS,YAAAP,QAAA,MAAAJ,EAAAC,gBAAAC,SAAAS,YAAAP,OAAA,SAAA,EAAAJ,EAAAC,gBAAAC,SAAAS,YAAAP,QAAA,MAAAJ,EAAAC,gBAAAC,SAAAS,YAAAP,OAAA,UAAA,EAAAJ,EAAAC,gBAAAG,QAAA,MAAAJ,EAAAC,gBAAAG,OAAA,wBAAA,EAAA,EAAA,4BAeFX,EAAA,EAAA,IAAA,EAAA,EAAmCD,EAAA,CAAA,EAAuBK,EAAA,kBAAvBC,EAAA,EAAAc,EAAAZ,EAAAa,iBAAA,GDrEzC,SAASC,GAAkC,CAC1C,OAAQC,GAAqD,CAC5D,IAAMC,EAAeD,EAAQE,IAAI,mBAAmB,GAAGC,MACjDP,EAAcI,EAAQE,IAAI,aAAa,GAAGC,MAEhD,MAAI,CAACF,GAAgB,CAACL,EACd,KAGDK,IAAiBL,EAAc,CAAEQ,wBAAyB,EAAI,EAAK,IAC3E,CACD,CAQA,IAAaC,GAAqB,IAAA,CAA5B,MAAOA,UAA6BC,CAAiB,CACzCC,GAAKC,EAAOC,CAAW,EAExBvB,gBAAkB,KAAKqB,GAAGG,YAAYC,MACrD,CACCvB,SAAU,CAAC,GAAI,CAACwB,EAAWC,SAAUD,EAAWE,UAAU,CAAC,CAAC,CAAC,EAC7DtB,kBAAmB,CAAC,GAAI,CAACoB,EAAWC,SAAUD,EAAWE,UAAU,EAAE,CAAC,CAAC,EACvElB,YAAa,CAAC,GAAI,CAACgB,EAAWC,SAAUD,EAAWE,UAAU,EAAE,CAAC,CAAC,GAElE,CAAEC,WAAY,CAAChB,EAAkC,CAAE,CAAC,CAAE,EAIvCiB,iBAAiBb,EAAa,CAC7C,KAAKjB,gBAAgBC,SAASC,SAAS6B,SAASd,CAAK,CACtD,CAEOe,qBAAqBf,EAAa,CACxC,KAAKjB,gBAAgBC,SAASK,kBAAkByB,SAASd,CAAK,CAC/D,CAEOgB,oBAAoBhB,EAAa,CACvC,KAAKjB,gBAAgBC,SAASS,YAAYqB,SAASd,CAAK,CACzD,CAEgBiB,UAAQ,CACvB,GAAI,KAAKlC,gBAAgBmC,QAAS,CACjC,KAAKnC,gBAAgBoC,iBAAgB,EACrC,MACD,CAEA,GAAM,CAAElC,SAAAA,EAAUI,kBAAAA,EAAmBI,YAAAA,CAAW,EAAK,KAAKV,gBAAgBqC,YAAW,EAErF,KAAKC,UAAY,GACjB,KAAKC,UAAY,KAEjB,KAAKC,YAAYC,uBAAuBvC,EAAUI,EAAmBI,CAAW,EAAEgC,UAAU,CAC3FC,KAAOC,GAAW,CACjB,KAAKC,cAAcD,CAAO,CAC3B,EACAE,MAAOA,IAAK,CACX,KAAKR,UAAY,GACjB,KAAKC,UAAYQ,EAAcC,+BAChC,EACA,CACF,gEA7CY7B,CAAoB,IAAA8B,GAApB9B,CAAoB,CAAA,CAAA,GAAA,2BAApBA,EAAoB+B,UAAA,CAAA,CAAA,kBAAA,CAAA,EAAAC,SAAA,CAAAC,CAAA,EAAAC,MAAA,GAAAC,KAAA,GAAAC,OAAA,CAAA,CAAA,EAAA,YAAA,EAAA,CAAA,cAAA,OAAA,EAAA,cAAA,kBAAA,EAAA,CAAA,cAAA,OAAA,EAAA,cAAA,mBAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,aAAA,EAAA,CAAA,EAAA,eAAA,EAAA,CAAA,aAAA,mCAAA,EAAA,YAAA,EAAA,CAAA,aAAA,GAAA,EAAA,YAAA,EAAA,WAAA,WAAA,EAAA,CAAA,MAAA,UAAA,EAAA,CAAA,KAAA,WAAA,OAAA,OAAA,kBAAA,WAAA,cAAA,qBAAA,eAAA,UAAA,EAAA,CAAA,KAAA,iBAAA,OAAA,QAAA,EAAA,kBAAA,EAAA,CAAA,MAAA,mBAAA,EAAA,CAAA,KAAA,oBAAA,OAAA,WAAA,kBAAA,oBAAA,cAAA,gCAAA,eAAA,kBAAA,EAAA,CAAA,KAAA,0BAAA,OAAA,QAAA,EAAA,kBAAA,EAAA,CAAA,MAAA,aAAA,EAAA,CAAA,KAAA,cAAA,OAAA,WAAA,kBAAA,cAAA,cAAA,4BAAA,eAAA,cAAA,EAAA,CAAA,KAAA,oBAAA,OAAA,QAAA,EAAA,kBAAA,EAAA,CAAA,OAAA,SAAA,EAAA,cAAA,EAAA,UAAA,EAAA,CAAA,OAAA,QAAA,EAAA,YAAA,CAAA,EAAAC,SAAA,SAAAC,EAAAC,EAAA,CAAAD,EAAA,ICxBjCjE,EAAA,EAAA,UAAA,CAAA,EACEmE,EAAA,EAAA,MAAA,CAAA,EAAmE,EAAA,MAAA,CAAA,EAGnEnE,EAAA,EAAA,MAAA,CAAA,EAAuB,EAAA,IAAA,CAAA,EACED,EAAA,EAAA,eAAA,EAAaK,EAAA,EACpCJ,EAAA,EAAA,IAAA,EAAID,EAAA,EAAA,mCAAA,EAAiCK,EAAA,EACrCJ,EAAA,EAAA,IAAA,CAAA,EACED,EAAA,EAAA,yIAAA,EAEFK,EAAA,EAEAJ,EAAA,GAAA,KAAA,CAAA,EAAqE,GAAA,IAAA,EAC/DD,EAAA,GAAA,uCAAA,EAAqCK,EAAA,EACzCJ,EAAA,GAAA,IAAA,EAAID,EAAA,GAAA,4CAAA,EAA0CK,EAAA,EAC9CJ,EAAA,GAAA,IAAA,EAAID,EAAA,GAAA,0FAAA,EAAwFK,EAAA,EAAK,EAGnGJ,EAAA,GAAA,OAAA,CAAA,EAAoCoE,EAAA,WAAA,UAAA,CAAA,OAAYF,EAAAxB,SAAA,CAAU,CAAA,EACxD1C,EAAA,GAAA,QAAA,CAAA,EAAsBD,EAAA,GAAA,UAAA,EAAQK,EAAA,EAC9B+D,EAAA,GAAA,QAAA,CAAA,EAKAlE,EAAA,GAAAoE,EAAA,EAAA,EAAA,IAAA,EAAA,EAUArE,EAAA,GAAA,QAAA,EAAA,EAA+BD,EAAA,GAAA,qBAAA,EAAmBK,EAAA,EAClD+D,EAAA,GAAA,QAAA,EAAA,EAKAlE,EAAA,GAAAqE,EAAA,EAAA,EAAA,IAAA,EAAA,EAUAtE,EAAA,GAAA,QAAA,EAAA,EAAyBD,EAAA,GAAA,gBAAA,EAAcK,EAAA,EACvC+D,EAAA,GAAA,QAAA,EAAA,EAIAlE,EAAA,GAAAsE,EAAA,EAAA,EAAA,IAAA,EAAA,EAaAvE,EAAA,GAAA,SAAA,EAAA,EACED,EAAA,EAAA,EACFK,EAAA,EAEAH,EAAA,GAAAuE,EAAA,EAAA,EAAA,IAAA,EAAA,EAGFpE,EAAA,EAAO,EACH,SA3DEC,EAAA,EAAA,EAAAoE,EAAA,YAAAP,EAAA1D,eAAA,EAIFH,EAAA,CAAA,gPAGFA,EAAA,EAAAC,EAAA4D,EAAA1D,gBAAAC,SAAAC,SAAAgE,SAAAR,EAAA1D,gBAAAC,SAAAC,SAAAiC,QAAA,GAAA,EAAA,EAaEtC,EAAA,CAAA,6RAGFA,EAAA,EAAAC,EAAA4D,EAAA1D,gBAAAC,SAAAK,kBAAA4D,SAAAR,EAAA1D,gBAAAC,SAAAK,kBAAA6B,QAAA,GAAA,EAAA,EAaEtC,EAAA,CAAA,2aAEFA,EAAA,EAAAC,EAAA4D,EAAA1D,gBAAAC,SAAAS,YAAAwD,UAAAR,EAAA1D,gBAAAC,SAAAS,YAAAyB,SAAAuB,EAAA1D,gBAAAG,QAAA,MAAAuD,EAAA1D,gBAAAG,OAAA,yBAAA,GAAA,EAAA,EAasBN,EAAA,EAAAoE,EAAA,WAAAP,EAAApB,WAAAoB,EAAA1D,gBAAAmC,OAAA,EACpBtC,EAAA,EAAAsE,EAAA,IAAAT,EAAApB,UAAA,4BAAA,sBAAA,GAAA,EAGFzC,EAAA,EAAAC,EAAA4D,EAAA9C,kBAAA,GAAA,EAAA,kBDrDKwD,EAAmBC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,CAAA,EAAAC,OAAA,CAAA;gEAAA,CAAA,CAAA,SAIjBxD,CAAqB,GAAA", + "names": ["\u0275\u0275text", "\u0275\u0275elementStart", "\u0275\u0275conditionalCreate", "FirstAccessComponent_Conditional_21_Conditional_1_Template", "FirstAccessComponent_Conditional_21_Conditional_2_Template", "\u0275\u0275elementEnd", "\u0275\u0275advance", "\u0275\u0275conditional", "ctx_r0", "firstAccessForm", "controls", "username", "errors", "FirstAccessComponent_Conditional_25_Conditional_1_Template", "FirstAccessComponent_Conditional_25_Conditional_2_Template", "temporaryPassword", "FirstAccessComponent_Conditional_29_Conditional_1_Template", "FirstAccessComponent_Conditional_29_Conditional_2_Template", "FirstAccessComponent_Conditional_29_Conditional_3_Template", "newPassword", "\u0275\u0275textInterpolate", "loginErrorMessage", "newPasswordDiffersFromTempPassword", "control", "tempPassword", "get", "value", "sameAsTemporaryPassword", "FirstAccessComponent", "AuthBaseComponent", "fb", "inject", "FormBuilder", "nonNullable", "group", "Validators", "required", "minLength", "validators", "onUsernameChange", "setValue", "onTempPasswordChange", "onNewPasswordChange", "onSubmit", "invalid", "markAllAsTouched", "getRawValue", "isLoading", "errorType", "authService", "setFirstAccessPassword", "subscribe", "next", "session", "handleSuccess", "error", "AuthErrorType", "USERNAME_OR_TEMP_PASSWORD_WRONG", "__ngFactoryType__", "selectors", "features", "\u0275\u0275InheritDefinitionFeature", "decls", "vars", "consts", "template", "rf", "ctx", "\u0275\u0275element", "\u0275\u0275listener", "FirstAccessComponent_Conditional_21_Template", "FirstAccessComponent_Conditional_25_Template", "FirstAccessComponent_Conditional_29_Template", "FirstAccessComponent_Conditional_32_Template", "\u0275\u0275property", "touched", "\u0275\u0275textInterpolate1", "ReactiveFormsModule", "\u0275NgNoValidate", "DefaultValueAccessor", "NgControlStatus", "NgControlStatusGroup", "FormGroupDirective", "FormControlName", "styles"] +} diff --git a/frontend/dist-instrumented/chunk-ZA5BAUMQ.js b/frontend/dist-instrumented/chunk-ZA5BAUMQ.js new file mode 100644 index 00000000..97fe2dc2 --- /dev/null +++ b/frontend/dist-instrumented/chunk-ZA5BAUMQ.js @@ -0,0 +1,3 @@ +function cov_1onqm6v8iq(){var path="/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-ZA5BAUMQ.js";var hash="ea289950877617e332cb88d14dcbcbd3f661f4be";var global=new Function("return this")();var gcv="__coverage__";var coverageData={path:"/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-ZA5BAUMQ.js",statementMap:{"0":{start:{line:1,column:330},end:{line:1,column:364}},"1":{start:{line:1,column:367},end:{line:1,column:1371}},"2":{start:{line:1,column:388},end:{line:1,column:396}},"3":{start:{line:1,column:404},end:{line:1,column:435}},"4":{start:{line:1,column:426},end:{line:1,column:433}},"5":{start:{line:1,column:447},end:{line:1,column:482}},"6":{start:{line:1,column:469},end:{line:1,column:480}},"7":{start:{line:1,column:490},end:{line:1,column:521}},"8":{start:{line:1,column:512},end:{line:1,column:519}},"9":{start:{line:1,column:534},end:{line:1,column:580}},"10":{start:{line:1,column:593},end:{line:1,column:617}},"11":{start:{line:1,column:637},end:{line:1,column:667}},"12":{start:{line:1,column:685},end:{line:1,column:702}},"13":{start:{line:1,column:703},end:{line:1,column:764}},"14":{start:{line:1,column:786},end:{line:1,column:803}},"15":{start:{line:1,column:804},end:{line:1,column:882}},"16":{start:{line:1,column:840},end:{line:1,column:855}},"17":{start:{line:1,column:903},end:{line:1,column:920}},"18":{start:{line:1,column:921},end:{line:1,column:995}},"19":{start:{line:1,column:960},end:{line:1,column:968}},"20":{start:{line:1,column:1018},end:{line:1,column:1118}},"21":{start:{line:1,column:1049},end:{line:1,column:1117}},"22":{start:{line:1,column:1091},end:{line:1,column:1114}},"23":{start:{line:1,column:1119},end:{line:1,column:1167}},"24":{start:{line:1,column:1182},end:{line:1,column:1210}},"25":{start:{line:1,column:1223},end:{line:1,column:1260}},"26":{start:{line:1,column:1278},end:{line:1,column:1307}},"27":{start:{line:1,column:1290},end:{line:1,column:1306}},"28":{start:{line:1,column:1326},end:{line:1,column:1358}},"29":{start:{line:1,column:1359},end:{line:1,column:1367}},"30":{start:{line:1,column:1378},end:{line:1,column:3219}},"31":{start:{line:1,column:1396},end:{line:1,column:1400}},"32":{start:{line:1,column:1407},end:{line:1,column:1411}},"33":{start:{line:1,column:1437},end:{line:1,column:1455}},"34":{start:{line:1,column:1491},end:{line:1,column:1567}},"35":{start:{line:1,column:1540},end:{line:1,column:1552}},"36":{start:{line:1,column:1561},end:{line:1,column:1565}},"37":{start:{line:1,column:1568},end:{line:1,column:1669}},"38":{start:{line:1,column:1615},end:{line:1,column:1640}},"39":{start:{line:1,column:1627},end:{line:1,column:1639}},"40":{start:{line:1,column:1647},end:{line:1,column:1667}},"41":{start:{line:1,column:1704},end:{line:1,column:1751}},"42":{start:{line:1,column:1742},end:{line:1,column:1750}},"43":{start:{line:1,column:1754},end:{line:1,column:1794}},"44":{start:{line:1,column:1788},end:{line:1,column:1792}},"45":{start:{line:1,column:1795},end:{line:1,column:1898}},"46":{start:{line:1,column:1845},end:{line:1,column:1870}},"47":{start:{line:1,column:1857},end:{line:1,column:1869}},"48":{start:{line:1,column:1877},end:{line:1,column:1896}},"49":{start:{line:1,column:1919},end:{line:1,column:1978}},"50":{start:{line:1,column:1999},end:{line:1,column:2060}},"51":{start:{line:1,column:2078},end:{line:1,column:2134}},"52":{start:{line:1,column:2152},end:{line:1,column:2210}},"53":{start:{line:1,column:2226},end:{line:1,column:2515}},"54":{start:{line:1,column:2246},end:{line:1,column:2265}},"55":{start:{line:1,column:2272},end:{line:1,column:2318}},"56":{start:{line:1,column:2302},end:{line:1,column:2316}},"57":{start:{line:1,column:2325},end:{line:1,column:2347}},"58":{start:{line:1,column:2355},end:{line:1,column:2380}},"59":{start:{line:1,column:2388},end:{line:1,column:2448}},"60":{start:{line:1,column:2466},end:{line:1,column:2512}},"61":{start:{line:1,column:2526},end:{line:1,column:2764}},"62":{start:{line:1,column:2678},end:{line:1,column:2761}},"63":{start:{line:1,column:2781},end:{line:1,column:2821}},"64":{start:{line:1,column:2798},end:{line:1,column:2819}},"65":{start:{line:1,column:2837},end:{line:1,column:2945}},"66":{start:{line:1,column:2854},end:{line:1,column:2943}},"67":{start:{line:1,column:2965},end:{line:1,column:3108}},"68":{start:{line:1,column:3126},end:{line:1,column:3155}},"69":{start:{line:1,column:3138},end:{line:1,column:3154}},"70":{start:{line:1,column:3174},end:{line:1,column:3206}},"71":{start:{line:1,column:3207},end:{line:1,column:3215}},"72":{start:{line:1,column:3226},end:{line:1,column:5070}},"73":{start:{line:1,column:3244},end:{line:1,column:3248}},"74":{start:{line:1,column:3255},end:{line:1,column:3259}},"75":{start:{line:1,column:3272},end:{line:1,column:3484}},"76":{start:{line:1,column:3309},end:{line:1,column:3355}},"77":{start:{line:1,column:3339},end:{line:1,column:3353}},"78":{start:{line:1,column:3362},end:{line:1,column:3384}},"79":{start:{line:1,column:3392},end:{line:1,column:3417}},"80":{start:{line:1,column:3435},end:{line:1,column:3481}},"81":{start:{line:1,column:3499},end:{line:1,column:3785}},"82":{start:{line:1,column:3539},end:{line:1,column:3588}},"83":{start:{line:1,column:3596},end:{line:1,column:3621}},"84":{start:{line:1,column:3638},end:{line:1,column:3783}},"85":{start:{line:1,column:3802},end:{line:1,column:3997}},"86":{start:{line:1,column:3844},end:{line:1,column:3897}},"87":{start:{line:1,column:3905},end:{line:1,column:3930}},"88":{start:{line:1,column:3948},end:{line:1,column:3994}},"89":{start:{line:1,column:4012},end:{line:1,column:4177}},"90":{start:{line:1,column:4053},end:{line:1,column:4077}},"91":{start:{line:1,column:4085},end:{line:1,column:4110}},"92":{start:{line:1,column:4128},end:{line:1,column:4174}},"93":{start:{line:1,column:4188},end:{line:1,column:4426}},"94":{start:{line:1,column:4340},end:{line:1,column:4423}},"95":{start:{line:1,column:4458},end:{line:1,column:4508}},"96":{start:{line:1,column:4496},end:{line:1,column:4507}},"97":{start:{line:1,column:4509},end:{line:1,column:4619}},"98":{start:{line:1,column:4636},end:{line:1,column:4676}},"99":{start:{line:1,column:4653},end:{line:1,column:4674}},"100":{start:{line:1,column:4692},end:{line:1,column:4800}},"101":{start:{line:1,column:4709},end:{line:1,column:4798}},"102":{start:{line:1,column:4820},end:{line:1,column:4959}},"103":{start:{line:1,column:4977},end:{line:1,column:5006}},"104":{start:{line:1,column:4989},end:{line:1,column:5005}},"105":{start:{line:1,column:5025},end:{line:1,column:5057}},"106":{start:{line:1,column:5058},end:{line:1,column:5066}},"107":{start:{line:1,column:5078},end:{line:1,column:6846}},"108":{start:{line:1,column:5102},end:{line:1,column:5106}},"109":{start:{line:1,column:5122},end:{line:1,column:5126}},"110":{start:{line:1,column:5152},end:{line:1,column:5156}},"111":{start:{line:1,column:5166},end:{line:1,column:5171}},"112":{start:{line:1,column:5179},end:{line:1,column:5200}},"113":{start:{line:1,column:5212},end:{line:1,column:5237}},"114":{start:{line:1,column:5245},end:{line:1,column:5266}},"115":{start:{line:1,column:5281},end:{line:1,column:5326}},"116":{start:{line:1,column:5339},end:{line:1,column:5435}},"117":{start:{line:1,column:5450},end:{line:1,column:5548}},"118":{start:{line:1,column:5565},end:{line:1,column:5665}},"119":{start:{line:1,column:5680},end:{line:1,column:5778}},"120":{start:{line:1,column:5799},end:{line:1,column:5913}},"121":{start:{line:1,column:5934},end:{line:1,column:6048}},"122":{start:{line:1,column:6066},end:{line:1,column:6177}},"123":{start:{line:1,column:6195},end:{line:1,column:6306}},"124":{start:{line:1,column:6336},end:{line:1,column:6472}},"125":{start:{line:1,column:6413},end:{line:1,column:6469}},"126":{start:{line:1,column:6501},end:{line:1,column:6636}},"127":{start:{line:1,column:6577},end:{line:1,column:6633}},"128":{start:{line:1,column:6656},end:{line:1,column:6735}},"129":{start:{line:1,column:6753},end:{line:1,column:6782}},"130":{start:{line:1,column:6765},end:{line:1,column:6781}},"131":{start:{line:1,column:6801},end:{line:1,column:6833}},"132":{start:{line:1,column:6834},end:{line:1,column:6842}}},fnMap:{"0":{name:"(anonymous_0)",decl:{start:{line:1,column:368},end:{line:1,column:369}},loc:{start:{line:1,column:372},end:{line:1,column:1368}},line:1},"1":{name:"(anonymous_1)",decl:{start:{line:1,column:423},end:{line:1,column:424}},loc:{start:{line:1,column:426},end:{line:1,column:433}},line:1},"2":{name:"(anonymous_2)",decl:{start:{line:1,column:466},end:{line:1,column:467}},loc:{start:{line:1,column:469},end:{line:1,column:480}},line:1},"3":{name:"(anonymous_3)",decl:{start:{line:1,column:509},end:{line:1,column:510}},loc:{start:{line:1,column:512},end:{line:1,column:519}},line:1},"4":{name:"(anonymous_4)",decl:{start:{line:1,column:522},end:{line:1,column:523}},loc:{start:{line:1,column:533},end:{line:1,column:581}},line:1},"5":{name:"(anonymous_5)",decl:{start:{line:1,column:581},end:{line:1,column:582}},loc:{start:{line:1,column:592},end:{line:1,column:618}},line:1},"6":{name:"(anonymous_6)",decl:{start:{line:1,column:618},end:{line:1,column:619}},loc:{start:{line:1,column:636},end:{line:1,column:668}},line:1},"7":{name:"(anonymous_7)",decl:{start:{line:1,column:668},end:{line:1,column:669}},loc:{start:{line:1,column:678},end:{line:1,column:765}},line:1},"8":{name:"(anonymous_8)",decl:{start:{line:1,column:765},end:{line:1,column:766}},loc:{start:{line:1,column:779},end:{line:1,column:883}},line:1},"9":{name:"(anonymous_9)",decl:{start:{line:1,column:837},end:{line:1,column:838}},loc:{start:{line:1,column:840},end:{line:1,column:855}},line:1},"10":{name:"(anonymous_10)",decl:{start:{line:1,column:883},end:{line:1,column:884}},loc:{start:{line:1,column:896},end:{line:1,column:996}},line:1},"11":{name:"(anonymous_11)",decl:{start:{line:1,column:957},end:{line:1,column:958}},loc:{start:{line:1,column:960},end:{line:1,column:968}},line:1},"12":{name:"(anonymous_12)",decl:{start:{line:1,column:996},end:{line:1,column:997}},loc:{start:{line:1,column:1011},end:{line:1,column:1168}},line:1},"13":{name:"(anonymous_13)",decl:{start:{line:1,column:1046},end:{line:1,column:1047}},loc:{start:{line:1,column:1049},end:{line:1,column:1117}},line:1},"14":{name:"(anonymous_14)",decl:{start:{line:1,column:1088},end:{line:1,column:1089}},loc:{start:{line:1,column:1091},end:{line:1,column:1114}},line:1},"15":{name:"(anonymous_15)",decl:{start:{line:1,column:1168},end:{line:1,column:1169}},loc:{start:{line:1,column:1181},end:{line:1,column:1211}},line:1},"16":{name:"(anonymous_16)",decl:{start:{line:1,column:1211},end:{line:1,column:1212}},loc:{start:{line:1,column:1222},end:{line:1,column:1261}},line:1},"17":{name:"(anonymous_17)",decl:{start:{line:1,column:1278},end:{line:1,column:1279}},loc:{start:{line:1,column:1289},end:{line:1,column:1307}},line:1},"18":{name:"(anonymous_18)",decl:{start:{line:1,column:1379},end:{line:1,column:1380}},loc:{start:{line:1,column:1383},end:{line:1,column:3216}},line:1},"19":{name:"(anonymous_19)",decl:{start:{line:1,column:1456},end:{line:1,column:1457}},loc:{start:{line:1,column:1484},end:{line:1,column:1670}},line:1},"20":{name:"(anonymous_20)",decl:{start:{line:1,column:1537},end:{line:1,column:1538}},loc:{start:{line:1,column:1540},end:{line:1,column:1552}},line:1},"21":{name:"(anonymous_21)",decl:{start:{line:1,column:1558},end:{line:1,column:1559}},loc:{start:{line:1,column:1561},end:{line:1,column:1565}},line:1},"22":{name:"(anonymous_22)",decl:{start:{line:1,column:1612},end:{line:1,column:1613}},loc:{start:{line:1,column:1615},end:{line:1,column:1640}},line:1},"23":{name:"(anonymous_23)",decl:{start:{line:1,column:1624},end:{line:1,column:1625}},loc:{start:{line:1,column:1627},end:{line:1,column:1639}},line:1},"24":{name:"(anonymous_24)",decl:{start:{line:1,column:1644},end:{line:1,column:1645}},loc:{start:{line:1,column:1647},end:{line:1,column:1667}},line:1},"25":{name:"(anonymous_25)",decl:{start:{line:1,column:1670},end:{line:1,column:1671}},loc:{start:{line:1,column:1697},end:{line:1,column:1899}},line:1},"26":{name:"(anonymous_26)",decl:{start:{line:1,column:1739},end:{line:1,column:1740}},loc:{start:{line:1,column:1742},end:{line:1,column:1750}},line:1},"27":{name:"(anonymous_27)",decl:{start:{line:1,column:1785},end:{line:1,column:1786}},loc:{start:{line:1,column:1788},end:{line:1,column:1792}},line:1},"28":{name:"(anonymous_28)",decl:{start:{line:1,column:1842},end:{line:1,column:1843}},loc:{start:{line:1,column:1845},end:{line:1,column:1870}},line:1},"29":{name:"(anonymous_29)",decl:{start:{line:1,column:1854},end:{line:1,column:1855}},loc:{start:{line:1,column:1857},end:{line:1,column:1869}},line:1},"30":{name:"(anonymous_30)",decl:{start:{line:1,column:1874},end:{line:1,column:1875}},loc:{start:{line:1,column:1877},end:{line:1,column:1896}},line:1},"31":{name:"(anonymous_31)",decl:{start:{line:1,column:1899},end:{line:1,column:1900}},loc:{start:{line:1,column:1918},end:{line:1,column:1979}},line:1},"32":{name:"(anonymous_32)",decl:{start:{line:1,column:1979},end:{line:1,column:1980}},loc:{start:{line:1,column:1998},end:{line:1,column:2061}},line:1},"33":{name:"(anonymous_33)",decl:{start:{line:1,column:2061},end:{line:1,column:2062}},loc:{start:{line:1,column:2077},end:{line:1,column:2135}},line:1},"34":{name:"(anonymous_34)",decl:{start:{line:1,column:2135},end:{line:1,column:2136}},loc:{start:{line:1,column:2151},end:{line:1,column:2211}},line:1},"35":{name:"(anonymous_35)",decl:{start:{line:1,column:2211},end:{line:1,column:2212}},loc:{start:{line:1,column:2225},end:{line:1,column:2516}},line:1},"36":{name:"(anonymous_36)",decl:{start:{line:1,column:2242},end:{line:1,column:2243}},loc:{start:{line:1,column:2246},end:{line:1,column:2265}},line:1},"37":{name:"(anonymous_37)",decl:{start:{line:1,column:2269},end:{line:1,column:2270}},loc:{start:{line:1,column:2272},end:{line:1,column:2318}},line:1},"38":{name:"(anonymous_38)",decl:{start:{line:1,column:2299},end:{line:1,column:2300}},loc:{start:{line:1,column:2302},end:{line:1,column:2316}},line:1},"39":{name:"(anonymous_39)",decl:{start:{line:1,column:2322},end:{line:1,column:2323}},loc:{start:{line:1,column:2325},end:{line:1,column:2347}},line:1},"40":{name:"(anonymous_40)",decl:{start:{line:1,column:2351},end:{line:1,column:2352}},loc:{start:{line:1,column:2355},end:{line:1,column:2380}},line:1},"41":{name:"(anonymous_41)",decl:{start:{line:1,column:2384},end:{line:1,column:2385}},loc:{start:{line:1,column:2388},end:{line:1,column:2448}},line:1},"42":{name:"(anonymous_42)",decl:{start:{line:1,column:2452},end:{line:1,column:2453}},loc:{start:{line:1,column:2456},end:{line:1,column:2458}},line:1},"43":{name:"(anonymous_43)",decl:{start:{line:1,column:2462},end:{line:1,column:2463}},loc:{start:{line:1,column:2466},end:{line:1,column:2512}},line:1},"44":{name:"(anonymous_44)",decl:{start:{line:1,column:2516},end:{line:1,column:2517}},loc:{start:{line:1,column:2525},end:{line:1,column:2765}},line:1},"45":{name:"(anonymous_45)",decl:{start:{line:1,column:2641},end:{line:1,column:2642}},loc:{start:{line:1,column:2678},end:{line:1,column:2761}},line:1},"46":{name:"(anonymous_46)",decl:{start:{line:1,column:2765},end:{line:1,column:2766}},loc:{start:{line:1,column:2780},end:{line:1,column:2822}},line:1},"47":{name:"(anonymous_47)",decl:{start:{line:1,column:2794},end:{line:1,column:2795}},loc:{start:{line:1,column:2798},end:{line:1,column:2819}},line:1},"48":{name:"(anonymous_48)",decl:{start:{line:1,column:2822},end:{line:1,column:2823}},loc:{start:{line:1,column:2836},end:{line:1,column:2946}},line:1},"49":{name:"(anonymous_49)",decl:{start:{line:1,column:2850},end:{line:1,column:2851}},loc:{start:{line:1,column:2854},end:{line:1,column:2943}},line:1},"50":{name:"(anonymous_50)",decl:{start:{line:1,column:2946},end:{line:1,column:2947}},loc:{start:{line:1,column:2964},end:{line:1,column:3109}},line:1},"51":{name:"(anonymous_51)",decl:{start:{line:1,column:3126},end:{line:1,column:3127}},loc:{start:{line:1,column:3137},end:{line:1,column:3155}},line:1},"52":{name:"(anonymous_52)",decl:{start:{line:1,column:3227},end:{line:1,column:3228}},loc:{start:{line:1,column:3231},end:{line:1,column:5067}},line:1},"53":{name:"(anonymous_53)",decl:{start:{line:1,column:3260},end:{line:1,column:3261}},loc:{start:{line:1,column:3271},end:{line:1,column:3485}},line:1},"54":{name:"(anonymous_54)",decl:{start:{line:1,column:3306},end:{line:1,column:3307}},loc:{start:{line:1,column:3309},end:{line:1,column:3355}},line:1},"55":{name:"(anonymous_55)",decl:{start:{line:1,column:3336},end:{line:1,column:3337}},loc:{start:{line:1,column:3339},end:{line:1,column:3353}},line:1},"56":{name:"(anonymous_56)",decl:{start:{line:1,column:3359},end:{line:1,column:3360}},loc:{start:{line:1,column:3362},end:{line:1,column:3384}},line:1},"57":{name:"(anonymous_57)",decl:{start:{line:1,column:3388},end:{line:1,column:3389}},loc:{start:{line:1,column:3392},end:{line:1,column:3417}},line:1},"58":{name:"(anonymous_58)",decl:{start:{line:1,column:3421},end:{line:1,column:3422}},loc:{start:{line:1,column:3425},end:{line:1,column:3427}},line:1},"59":{name:"(anonymous_59)",decl:{start:{line:1,column:3431},end:{line:1,column:3432}},loc:{start:{line:1,column:3435},end:{line:1,column:3481}},line:1},"60":{name:"(anonymous_60)",decl:{start:{line:1,column:3485},end:{line:1,column:3486}},loc:{start:{line:1,column:3498},end:{line:1,column:3786}},line:1},"61":{name:"(anonymous_61)",decl:{start:{line:1,column:3536},end:{line:1,column:3537}},loc:{start:{line:1,column:3539},end:{line:1,column:3588}},line:1},"62":{name:"(anonymous_62)",decl:{start:{line:1,column:3592},end:{line:1,column:3593}},loc:{start:{line:1,column:3596},end:{line:1,column:3621}},line:1},"63":{name:"(anonymous_63)",decl:{start:{line:1,column:3625},end:{line:1,column:3626}},loc:{start:{line:1,column:3629},end:{line:1,column:3631}},line:1},"64":{name:"(anonymous_64)",decl:{start:{line:1,column:3635},end:{line:1,column:3636}},loc:{start:{line:1,column:3638},end:{line:1,column:3783}},line:1},"65":{name:"(anonymous_65)",decl:{start:{line:1,column:3786},end:{line:1,column:3787}},loc:{start:{line:1,column:3801},end:{line:1,column:3998}},line:1},"66":{name:"(anonymous_66)",decl:{start:{line:1,column:3841},end:{line:1,column:3842}},loc:{start:{line:1,column:3844},end:{line:1,column:3897}},line:1},"67":{name:"(anonymous_67)",decl:{start:{line:1,column:3901},end:{line:1,column:3902}},loc:{start:{line:1,column:3905},end:{line:1,column:3930}},line:1},"68":{name:"(anonymous_68)",decl:{start:{line:1,column:3934},end:{line:1,column:3935}},loc:{start:{line:1,column:3938},end:{line:1,column:3940}},line:1},"69":{name:"(anonymous_69)",decl:{start:{line:1,column:3944},end:{line:1,column:3945}},loc:{start:{line:1,column:3948},end:{line:1,column:3994}},line:1},"70":{name:"(anonymous_70)",decl:{start:{line:1,column:3998},end:{line:1,column:3999}},loc:{start:{line:1,column:4011},end:{line:1,column:4178}},line:1},"71":{name:"(anonymous_71)",decl:{start:{line:1,column:4049},end:{line:1,column:4050}},loc:{start:{line:1,column:4053},end:{line:1,column:4077}},line:1},"72":{name:"(anonymous_72)",decl:{start:{line:1,column:4081},end:{line:1,column:4082}},loc:{start:{line:1,column:4085},end:{line:1,column:4110}},line:1},"73":{name:"(anonymous_73)",decl:{start:{line:1,column:4114},end:{line:1,column:4115}},loc:{start:{line:1,column:4118},end:{line:1,column:4120}},line:1},"74":{name:"(anonymous_74)",decl:{start:{line:1,column:4124},end:{line:1,column:4125}},loc:{start:{line:1,column:4128},end:{line:1,column:4174}},line:1},"75":{name:"(anonymous_75)",decl:{start:{line:1,column:4178},end:{line:1,column:4179}},loc:{start:{line:1,column:4187},end:{line:1,column:4427}},line:1},"76":{name:"(anonymous_76)",decl:{start:{line:1,column:4303},end:{line:1,column:4304}},loc:{start:{line:1,column:4340},end:{line:1,column:4423}},line:1},"77":{name:"(anonymous_77)",decl:{start:{line:1,column:4427},end:{line:1,column:4428}},loc:{start:{line:1,column:4451},end:{line:1,column:4620}},line:1},"78":{name:"(anonymous_78)",decl:{start:{line:1,column:4493},end:{line:1,column:4494}},loc:{start:{line:1,column:4496},end:{line:1,column:4507}},line:1},"79":{name:"(anonymous_79)",decl:{start:{line:1,column:4620},end:{line:1,column:4621}},loc:{start:{line:1,column:4635},end:{line:1,column:4677}},line:1},"80":{name:"(anonymous_80)",decl:{start:{line:1,column:4649},end:{line:1,column:4650}},loc:{start:{line:1,column:4653},end:{line:1,column:4674}},line:1},"81":{name:"(anonymous_81)",decl:{start:{line:1,column:4677},end:{line:1,column:4678}},loc:{start:{line:1,column:4691},end:{line:1,column:4801}},line:1},"82":{name:"(anonymous_82)",decl:{start:{line:1,column:4705},end:{line:1,column:4706}},loc:{start:{line:1,column:4709},end:{line:1,column:4798}},line:1},"83":{name:"(anonymous_83)",decl:{start:{line:1,column:4801},end:{line:1,column:4802}},loc:{start:{line:1,column:4819},end:{line:1,column:4960}},line:1},"84":{name:"(anonymous_84)",decl:{start:{line:1,column:4977},end:{line:1,column:4978}},loc:{start:{line:1,column:4988},end:{line:1,column:5006}},line:1},"85":{name:"(anonymous_85)",decl:{start:{line:1,column:5079},end:{line:1,column:5080}},loc:{start:{line:1,column:5083},end:{line:1,column:6843}},line:1},"86":{name:"(anonymous_86)",decl:{start:{line:1,column:5267},end:{line:1,column:5268}},loc:{start:{line:1,column:5280},end:{line:1,column:5327}},line:1},"87":{name:"(anonymous_87)",decl:{start:{line:1,column:5327},end:{line:1,column:5328}},loc:{start:{line:1,column:5338},end:{line:1,column:5436}},line:1},"88":{name:"(anonymous_88)",decl:{start:{line:1,column:5436},end:{line:1,column:5437}},loc:{start:{line:1,column:5449},end:{line:1,column:5549}},line:1},"89":{name:"(anonymous_89)",decl:{start:{line:1,column:5549},end:{line:1,column:5550}},loc:{start:{line:1,column:5564},end:{line:1,column:5666}},line:1},"90":{name:"(anonymous_90)",decl:{start:{line:1,column:5666},end:{line:1,column:5667}},loc:{start:{line:1,column:5679},end:{line:1,column:5779}},line:1},"91":{name:"(anonymous_91)",decl:{start:{line:1,column:5779},end:{line:1,column:5780}},loc:{start:{line:1,column:5798},end:{line:1,column:5914}},line:1},"92":{name:"(anonymous_92)",decl:{start:{line:1,column:5914},end:{line:1,column:5915}},loc:{start:{line:1,column:5933},end:{line:1,column:6049}},line:1},"93":{name:"(anonymous_93)",decl:{start:{line:1,column:6049},end:{line:1,column:6050}},loc:{start:{line:1,column:6065},end:{line:1,column:6178}},line:1},"94":{name:"(anonymous_94)",decl:{start:{line:1,column:6178},end:{line:1,column:6179}},loc:{start:{line:1,column:6194},end:{line:1,column:6307}},line:1},"95":{name:"(anonymous_95)",decl:{start:{line:1,column:6307},end:{line:1,column:6308}},loc:{start:{line:1,column:6335},end:{line:1,column:6473}},line:1},"96":{name:"(anonymous_96)",decl:{start:{line:1,column:6409},end:{line:1,column:6410}},loc:{start:{line:1,column:6413},end:{line:1,column:6469}},line:1},"97":{name:"(anonymous_97)",decl:{start:{line:1,column:6473},end:{line:1,column:6474}},loc:{start:{line:1,column:6500},end:{line:1,column:6637}},line:1},"98":{name:"(anonymous_98)",decl:{start:{line:1,column:6573},end:{line:1,column:6574}},loc:{start:{line:1,column:6577},end:{line:1,column:6633}},line:1},"99":{name:"(anonymous_99)",decl:{start:{line:1,column:6637},end:{line:1,column:6638}},loc:{start:{line:1,column:6655},end:{line:1,column:6736}},line:1},"100":{name:"(anonymous_100)",decl:{start:{line:1,column:6753},end:{line:1,column:6754}},loc:{start:{line:1,column:6764},end:{line:1,column:6782}},line:1}},branchMap:{"0":{loc:{start:{line:1,column:840},end:{line:1,column:855}},type:"cond-expr",locations:[{start:{line:1,column:852},end:{line:1,column:853}},{start:{line:1,column:854},end:{line:1,column:855}}],line:1},"1":{loc:{start:{line:1,column:1091},end:{line:1,column:1114}},type:"cond-expr",locations:[{start:{line:1,column:1100},end:{line:1,column:1112}},{start:{line:1,column:1113},end:{line:1,column:1114}}],line:1},"2":{loc:{start:{line:1,column:1301},end:{line:1,column:1305}},type:"binary-expr",locations:[{start:{line:1,column:1301},end:{line:1,column:1302}},{start:{line:1,column:1304},end:{line:1,column:1305}}],line:1},"3":{loc:{start:{line:1,column:1763},end:{line:1,column:1779}},type:"binary-expr",locations:[{start:{line:1,column:1763},end:{line:1,column:1775}},{start:{line:1,column:1777},end:{line:1,column:1779}}],line:1},"4":{loc:{start:{line:1,column:2272},end:{line:1,column:2318}},type:"cond-expr",locations:[{start:{line:1,column:2285},end:{line:1,column:2290}},{start:{line:1,column:2291},end:{line:1,column:2318}}],line:1},"5":{loc:{start:{line:1,column:2972},end:{line:1,column:3108}},type:"cond-expr",locations:[{start:{line:1,column:3022},end:{line:1,column:3029}},{start:{line:1,column:3030},end:{line:1,column:3108}}],line:1},"6":{loc:{start:{line:1,column:2972},end:{line:1,column:3021}},type:"binary-expr",locations:[{start:{line:1,column:2972},end:{line:1,column:2986}},{start:{line:1,column:2988},end:{line:1,column:3012}},{start:{line:1,column:3014},end:{line:1,column:3021}}],line:1},"7":{loc:{start:{line:1,column:3030},end:{line:1,column:3108}},type:"cond-expr",locations:[{start:{line:1,column:3056},end:{line:1,column:3065}},{start:{line:1,column:3066},end:{line:1,column:3108}}],line:1},"8":{loc:{start:{line:1,column:3030},end:{line:1,column:3055}},type:"binary-expr",locations:[{start:{line:1,column:3030},end:{line:1,column:3044}},{start:{line:1,column:3046},end:{line:1,column:3055}}],line:1},"9":{loc:{start:{line:1,column:3149},end:{line:1,column:3153}},type:"binary-expr",locations:[{start:{line:1,column:3149},end:{line:1,column:3150}},{start:{line:1,column:3152},end:{line:1,column:3153}}],line:1},"10":{loc:{start:{line:1,column:3309},end:{line:1,column:3355}},type:"cond-expr",locations:[{start:{line:1,column:3322},end:{line:1,column:3327}},{start:{line:1,column:3328},end:{line:1,column:3355}}],line:1},"11":{loc:{start:{line:1,column:3638},end:{line:1,column:3783}},type:"cond-expr",locations:[{start:{line:1,column:3670},end:{line:1,column:3733}},{start:{line:1,column:3736},end:{line:1,column:3782}}],line:1},"12":{loc:{start:{line:1,column:3638},end:{line:1,column:3668}},type:"binary-expr",locations:[{start:{line:1,column:3638},end:{line:1,column:3652}},{start:{line:1,column:3654},end:{line:1,column:3668}}],line:1},"13":{loc:{start:{line:1,column:4547},end:{line:1,column:4578}},type:"binary-expr",locations:[{start:{line:1,column:4547},end:{line:1,column:4559}},{start:{line:1,column:4561},end:{line:1,column:4574}},{start:{line:1,column:4576},end:{line:1,column:4578}}],line:1},"14":{loc:{start:{line:1,column:4589},end:{line:1,column:4618}},type:"binary-expr",locations:[{start:{line:1,column:4589},end:{line:1,column:4600}},{start:{line:1,column:4602},end:{line:1,column:4614}},{start:{line:1,column:4616},end:{line:1,column:4618}}],line:1},"15":{loc:{start:{line:1,column:4827},end:{line:1,column:4959}},type:"cond-expr",locations:[{start:{line:1,column:4877},end:{line:1,column:4884}},{start:{line:1,column:4885},end:{line:1,column:4959}}],line:1},"16":{loc:{start:{line:1,column:4827},end:{line:1,column:4876}},type:"binary-expr",locations:[{start:{line:1,column:4827},end:{line:1,column:4841}},{start:{line:1,column:4843},end:{line:1,column:4867}},{start:{line:1,column:4869},end:{line:1,column:4876}}],line:1},"17":{loc:{start:{line:1,column:4885},end:{line:1,column:4959}},type:"cond-expr",locations:[{start:{line:1,column:4911},end:{line:1,column:4920}},{start:{line:1,column:4921},end:{line:1,column:4959}}],line:1},"18":{loc:{start:{line:1,column:4885},end:{line:1,column:4910}},type:"binary-expr",locations:[{start:{line:1,column:4885},end:{line:1,column:4899}},{start:{line:1,column:4901},end:{line:1,column:4910}}],line:1},"19":{loc:{start:{line:1,column:5000},end:{line:1,column:5004}},type:"binary-expr",locations:[{start:{line:1,column:5000},end:{line:1,column:5001}},{start:{line:1,column:5003},end:{line:1,column:5004}}],line:1},"20":{loc:{start:{line:1,column:6663},end:{line:1,column:6735}},type:"cond-expr",locations:[{start:{line:1,column:6693},end:{line:1,column:6702}},{start:{line:1,column:6703},end:{line:1,column:6735}}],line:1},"21":{loc:{start:{line:1,column:6663},end:{line:1,column:6692}},type:"binary-expr",locations:[{start:{line:1,column:6663},end:{line:1,column:6681}},{start:{line:1,column:6683},end:{line:1,column:6692}}],line:1},"22":{loc:{start:{line:1,column:6776},end:{line:1,column:6780}},type:"binary-expr",locations:[{start:{line:1,column:6776},end:{line:1,column:6777}},{start:{line:1,column:6779},end:{line:1,column:6780}}],line:1}},s:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"116":0,"117":0,"118":0,"119":0,"120":0,"121":0,"122":0,"123":0,"124":0,"125":0,"126":0,"127":0,"128":0,"129":0,"130":0,"131":0,"132":0},f:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0},b:{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0,0],"7":[0,0],"8":[0,0],"9":[0,0],"10":[0,0],"11":[0,0],"12":[0,0],"13":[0,0,0],"14":[0,0,0],"15":[0,0],"16":[0,0,0],"17":[0,0],"18":[0,0],"19":[0,0],"20":[0,0],"21":[0,0],"22":[0,0]},inputSourceMap:{version:3,sources:["src/app/features/ward-management/services/ward.store.ts","src/app/features/ward-management/services/assignment-operations.service.ts","src/app/features/ward-management/services/ward-operations.service.ts","src/app/features/ward-management/services/ward-management.store.ts"],sourcesContent:["import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable, map } from 'rxjs';\nimport type { Plant } from '../models/plant.model';\nimport type { WardManagementState } from '../models/ward-management-state.model';\nimport type { Ward } from '../models/ward.model';\n\nconst INITIAL_STATE: WardManagementState = {\n wards: [],\n isLoading: false,\n error: null,\n};\n\n@Injectable()\nexport class WardStore {\n private readonly state$ = new BehaviorSubject(INITIAL_STATE);\n\n public readonly wards$: Observable = this.state$.pipe(map((state) => state.wards));\n public readonly isLoading$: Observable = this.state$.pipe(\n map((state) => state.isLoading),\n );\n public readonly error$: Observable = this.state$.pipe(map((state) => state.error));\n\n\n private setState(partial: Partial): void {\n this.state$.next({ ...this.state$.value, ...partial });\n }\n\n public setWards(wards: Ward[]): void {\n this.setState({ wards });\n }\n\n public getWardsSnapshot(): Ward[] {\n return this.state$.value.wards;\n }\n\n public addWard(ward: Ward): void {\n const current = this.state$.value;\n this.setState({\n wards: [...current.wards, ward],\n isLoading: false, error: null\n });\n }\n\n public replaceWard(ward: Ward): void {\n const current = this.state$.value;\n this.setState({\n wards: current.wards.map((currentWard) => (currentWard.id === ward.id ? ward : currentWard)),\n isLoading: false,\n error: null,\n });\n }\n\n public removeWard(wardId: number): void {\n const current = this.state$.value;\n this.setState({\n wards: current.wards.filter((ward) => ward.id !== wardId),\n isLoading: false,\n error: null,\n });\n }\n\n public patchPlant(plantId: string, patch: Partial): void {\n const current = this.state$.value;\n const wards = current.wards.map((ward) => ({\n ...ward,\n apartments: ward.apartments.map((apartment) =>\n apartment.id === plantId ? { ...apartment, ...patch } : apartment,\n ),\n }));\n\n this.setState({\n wards,\n isLoading: false,\n error: null\n });\n }\n\n public setLoading(value: boolean): void {\n this.setState({ isLoading: value });\n }\n\n public setError(message: string | null): void {\n this.setState({ error: message, isLoading: false });\n }\n\n\n}\n","import { HttpErrorResponse } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\nimport { EMPTY, Observable, catchError, forkJoin, map, of, switchMap, tap } from 'rxjs';\nimport { EventSubscriptionService } from '../../../core/alarm/services/event-subscription.service';\nimport { UserRole } from '../../../core/models/user-role.enum';\nimport type {\n AssignPlantDto,\n AssignOperatorDto,\n WardPlantDto,\n WardSummaryDto,\n WardUserDto,\n} from '../models/ward-api.dto';\nimport type { Ward } from '../models/ward.model';\nimport { WardApiService } from './ward-api.service';\nimport { WardStore } from './ward.store';\n\n@Injectable()\nexport class AssignmentOperationsService {\n private readonly api = inject(WardApiService);\n private readonly store = inject(WardStore);\n private readonly eventSubscriptionService = inject(EventSubscriptionService, { optional: true });\n\n public getAvailablePlantsForWard(wardId: number): Observable {\n const assignedPlantIds = new Set(\n this.store\n .getWardsSnapshot()\n .flatMap((ward) => ward.apartments)\n .map((apartment) => apartment.id),\n );\n\n return this.api.getAvailablePlants().pipe(\n map((plants) => plants.filter((plant) => !assignedPlantIds.has(plant.id))),\n map((plants) => this.toApartments(plants)),\n );\n }\n\n public getAvailableUsersForWard(wardId: number): Observable {\n const ward = this.store.getWardsSnapshot().find((w) => w.id === wardId);\n const assignedUserIds = new Set((ward?.operators ?? []).map((operator) => operator.id));\n\n return this.api.getAvailableOperators\n ().pipe(\n map((users) => users.filter((user) => !assignedUserIds.has(user.id))),\n map((users) => this.toOperators(users)),\n );\n }\n\n public assignOperator(wardId: number, dto: AssignOperatorDto): Observable {\n return this.reloadAfter(this.api.assignOperatorToWard(wardId, dto));\n }\n\n public removeOperator(wardId: number, userId: number): Observable {\n return this.reloadAfter(this.api.removeOperatorFromWard(wardId, userId));\n }\n\n public assignPlant(wardId: number, dto: AssignPlantDto): Observable {\n return this.reloadAfter(this.api.assignPlantToWard(wardId, dto));\n }\n\n public removePlant(wardId: number, plantId: string): Observable {\n return this.reloadAfter(this.api.removePlantFromWard(wardId, plantId));\n }\n\n private reloadAfter(operation$: Observable): Observable {\n return operation$.pipe(\n switchMap(() => this.api.getWards()),\n switchMap((wardSummaries) => {\n if (wardSummaries.length === 0) {\n return of([] as Ward[]);\n }\n\n return forkJoin(wardSummaries.map((wardSummary) => this.toWard(wardSummary)));\n }),\n tap((wards) => this.store.setWards(wards)),\n tap(() => this.store.setLoading(false)),\n tap(() => this.eventSubscriptionService?.refreshWardRoomSubscription()),\n map(() => void 0),\n catchError((error) => {\n this.store.setError(this.getErrorMessage(error));\n return EMPTY;\n }),\n );\n }\n\n private toWard(wardSummary: WardSummaryDto): Observable {\n return forkJoin({\n apartmentsDto: this.api.getPlantsByWardId(wardSummary.id),\n operatorsDto: this.api.getOperatorsByWardId(wardSummary.id),\n }).pipe(\n map(({ apartmentsDto, operatorsDto }) => ({\n id: wardSummary.id,\n name: wardSummary.name,\n apartments: this.toApartments(apartmentsDto),\n operators: this.toOperators(operatorsDto),\n })),\n );\n }\n\n private toApartments(apartmentsDto: WardPlantDto[]): Ward['apartments'] {\n return apartmentsDto.map((plant) => ({\n id: plant.id,\n name: plant.name,\n }));\n }\n\n private toOperators(operatorsDto: WardUserDto[]): Ward['operators'] {\n return operatorsDto.map((user) => ({\n id: user.id,\n firstName: user.username,\n lastName: '',\n username: user.username,\n role: UserRole.OPERATORE_SANITARIO,\n }));\n }\n\n private getErrorMessage(error: unknown): string {\n if (error instanceof HttpErrorResponse && typeof error.error === 'string' && error.error) {\n return error.error;\n }\n\n if (error instanceof HttpErrorResponse && error.message) {\n return error.message;\n }\n\n return 'Operazione di assegnazione non riuscita.';\n }\n}\n","import { HttpErrorResponse } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\nimport { EMPTY, Observable, catchError, forkJoin, map, of, switchMap, tap } from 'rxjs';\nimport { UserRole } from '../../../core/models/user-role.enum';\nimport type {\n CreateWardDto,\n UpdateWardDto,\n WardPlantDto,\n WardSummaryDto,\n WardUserDto,\n} from '../models/ward-api.dto';\nimport type { Ward } from '../models/ward.model';\nimport { WardApiService } from './ward-api.service';\nimport { WardStore } from './ward.store';\n\n@Injectable()\nexport class WardOperationsService {\n private readonly api = inject(WardApiService);\n private readonly store = inject(WardStore);\n\n public loadWards(): Observable {\n return this.api.getWards().pipe(\n switchMap((wardSummaries) => {\n if (wardSummaries.length === 0) {\n return of([] as Ward[]);\n }\n\n return forkJoin(wardSummaries.map((wardSummary) => this.toWard(wardSummary)));\n }),\n tap((wards) => this.store.setWards(wards)),\n tap(() => this.store.setLoading(false)),\n map(() => void 0),\n catchError((error) => {\n this.store.setError(this.getErrorMessage(error));\n return EMPTY;\n }),\n );\n }\n\n public createWard(dto: CreateWardDto): Observable {\n return this.api.createWard(dto).pipe(\n tap((ward) => this.store.addWard(this.normalizeMutationWard(ward))),\n tap(() => this.store.setLoading(false)),\n map(() => void 0),\n catchError((error) => {\n if (error instanceof HttpErrorResponse && error.status === 409) {\n this.store.setError('Esiste gia un reparto con questo nome.');\n return EMPTY;\n }\n\n this.store.setError(this.getErrorMessage(error));\n return EMPTY;\n }),\n );\n }\n\n public updateWard(wardId: number, dto: UpdateWardDto): Observable {\n return this.api.updateWard(wardId, dto).pipe(\n tap((ward) => this.store.replaceWard(this.normalizeMutationWard(ward))),\n tap(() => this.store.setLoading(false)),\n map(() => void 0),\n catchError((error) => {\n this.store.setError(this.getErrorMessage(error));\n return EMPTY;\n }),\n );\n }\n\n public deleteWard(wardId: number): Observable {\n return this.api.deleteWard(wardId).pipe(\n tap(() => this.store.removeWard(wardId)),\n tap(() => this.store.setLoading(false)),\n map(() => void 0),\n catchError((error) => {\n this.store.setError(this.getErrorMessage(error));\n return EMPTY;\n }),\n );\n }\n\n private toWard(wardSummary: WardSummaryDto): Observable {\n return forkJoin({\n apartmentsDto: this.api.getPlantsByWardId(wardSummary.id),\n operatorsDto: this.api.getOperatorsByWardId(wardSummary.id),\n }).pipe(\n map(({ apartmentsDto, operatorsDto }) => ({\n id: wardSummary.id,\n name: wardSummary.name,\n apartments: this.toApartments(apartmentsDto),\n operators: this.toOperators(operatorsDto),\n })),\n );\n }\n\n private normalizeMutationWard(ward: Ward): Ward {\n const currentWard = this.store.getWardsSnapshot().find((item) => item.id === ward.id);\n\n return {\n id: ward.id,\n name: ward.name,\n apartments: ward.apartments ?? currentWard?.apartments ?? [],\n operators: ward.operators ?? currentWard?.operators ?? [],\n };\n }\n\n private toApartments(apartmentsDto: WardPlantDto[]): Ward['apartments'] {\n return apartmentsDto.map((plant) => ({\n id: plant.id,\n name: plant.name,\n }));\n }\n\n private toOperators(operatorsDto: WardUserDto[]): Ward['operators'] {\n return operatorsDto.map((user) => ({\n id: user.id,\n firstName: user.username,\n lastName: '',\n username: user.username,\n role: UserRole.OPERATORE_SANITARIO,\n }));\n }\n\n private getErrorMessage(error: unknown): string {\n if (error instanceof HttpErrorResponse && typeof error.error === 'string' && error.error) {\n return error.error;\n }\n\n if (error instanceof HttpErrorResponse && error.message) {\n return error.message;\n }\n\n return 'Operazione sui reparti non riuscita.';\n }\n}\n","import { Injectable, OnDestroy, inject } from '@angular/core';\nimport { Observable, Subject, catchError, of, takeUntil } from 'rxjs';\nimport type { User } from '../../../core/models/user.model';\nimport type { AssignPlantDto, AssignOperatorDto, CreateWardDto, UpdateWardDto } from '../models/ward-api.dto';\nimport type { Plant } from '../models/plant.model';\nimport { AssignmentOperationsService } from './assignment-operations.service';\nimport { WardOperationsService } from './ward-operations.service';\nimport { WardStore } from './ward.store';\n\n@Injectable()\nexport class WardManagementStore implements OnDestroy {\n private readonly wardStore = inject(WardStore);\n private readonly wardOperations = inject(WardOperationsService);\n private readonly wardAssignmentOperations = inject(AssignmentOperationsService);\n private readonly destroy$ = new Subject();\n\n public readonly wards$ = this.wardStore.wards$;\n public readonly isLoading$ = this.wardStore.isLoading$;\n public readonly error$ = this.wardStore.error$;\n\n public ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n public loadWards(): void {\n this.wardStore.setLoading(true);\n this.wardOperations\n .loadWards()\n .pipe(takeUntil(this.destroy$))\n .subscribe();\n }\n\n public createWard(dto: CreateWardDto): void {\n this.wardStore.setLoading(true);\n this.wardOperations\n .createWard(dto)\n .pipe(takeUntil(this.destroy$))\n .subscribe();\n }\n\n public updateWard(wardId: number, dto: UpdateWardDto): void {\n this.wardStore.setLoading(true);\n this.wardOperations\n .updateWard(wardId, dto)\n .pipe(takeUntil(this.destroy$))\n .subscribe();\n }\n\n public deleteWard(wardId: number): void {\n this.wardStore.setLoading(true);\n this.wardOperations\n .deleteWard(wardId)\n .pipe(takeUntil(this.destroy$))\n .subscribe();\n }\n\n public assignOperator(wardId: number, dto: AssignOperatorDto): void {\n this.wardStore.setLoading(true);\n this.wardAssignmentOperations\n .assignOperator(wardId, dto)\n .pipe(takeUntil(this.destroy$))\n .subscribe();\n }\n\n public removeOperator(wardId: number, userId: number): void {\n this.wardStore.setLoading(true);\n this.wardAssignmentOperations\n .removeOperator(wardId, userId)\n .pipe(takeUntil(this.destroy$))\n .subscribe();\n }\n\n public assignPlant(wardId: number, dto: AssignPlantDto): void {\n this.wardStore.setLoading(true);\n this.wardAssignmentOperations\n .assignPlant(wardId, dto)\n .pipe(takeUntil(this.destroy$))\n .subscribe();\n }\n\n public removePlant(wardId: number, plantId: string): void {\n this.wardStore.setLoading(true);\n this.wardAssignmentOperations\n .removePlant(wardId, plantId)\n .pipe(takeUntil(this.destroy$))\n .subscribe();\n }\n\n public getAvailablePlantsForWard(wardId: number): Observable {\n return this.wardAssignmentOperations.getAvailablePlantsForWard(wardId).pipe(\n catchError((error) => {\n this.wardStore.setError(this.getErrorMessage(error));\n return of(null);\n }),\n );\n }\n\n public getAvailableUsersForWard(wardId: number): Observable {\n return this.wardAssignmentOperations.getAvailableUsersForWard(wardId).pipe(\n catchError((error) => {\n this.wardStore.setError(this.getErrorMessage(error));\n return of(null);\n }),\n );\n }\n\n private getErrorMessage(error: unknown): string {\n if (error instanceof Error && error.message) {\n return error.message;\n }\n\n return 'Operazione plant non riuscita.';\n }\n}\n"],mappings:"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",names:["INITIAL_STATE","wards","isLoading","error","WardStore","state$","BehaviorSubject","wards$","pipe","map","state","isLoading$","error$","setState","partial","next","__spreadValues","value","setWards","getWardsSnapshot","addWard","ward","current","replaceWard","currentWard","id","removeWard","wardId","filter","patchPlant","plantId","patch","__spreadProps","apartments","apartment","setLoading","setError","message","factory","\u0275fac","AssignmentOperationsService","api","inject","WardApiService","store","WardStore","eventSubscriptionService","EventSubscriptionService","optional","getAvailablePlantsForWard","wardId","assignedPlantIds","Set","getWardsSnapshot","flatMap","ward","apartments","map","apartment","id","getAvailablePlants","pipe","plants","filter","plant","has","toApartments","getAvailableUsersForWard","find","w","assignedUserIds","operators","operator","getAvailableOperators","users","user","toOperators","assignOperator","dto","reloadAfter","assignOperatorToWard","removeOperator","userId","removeOperatorFromWard","assignPlant","assignPlantToWard","removePlant","plantId","removePlantFromWard","operation$","switchMap","getWards","wardSummaries","length","of","forkJoin","wardSummary","toWard","tap","wards","setWards","setLoading","refreshWardRoomSubscription","catchError","error","setError","getErrorMessage","EMPTY","apartmentsDto","getPlantsByWardId","operatorsDto","getOperatorsByWardId","name","firstName","username","lastName","role","UserRole","OPERATORE_SANITARIO","HttpErrorResponse","message","factory","\u0275fac","WardOperationsService","api","inject","WardApiService","store","WardStore","loadWards","getWards","pipe","switchMap","wardSummaries","length","of","forkJoin","map","wardSummary","toWard","tap","wards","setWards","setLoading","catchError","error","setError","getErrorMessage","EMPTY","createWard","dto","ward","addWard","normalizeMutationWard","HttpErrorResponse","status","updateWard","wardId","replaceWard","deleteWard","removeWard","apartmentsDto","getPlantsByWardId","id","operatorsDto","getOperatorsByWardId","name","apartments","toApartments","operators","toOperators","currentWard","getWardsSnapshot","find","item","plant","user","firstName","username","lastName","role","UserRole","OPERATORE_SANITARIO","message","factory","\u0275fac","WardManagementStore","wardStore","inject","WardStore","wardOperations","WardOperationsService","wardAssignmentOperations","AssignmentOperationsService","destroy$","Subject","wards$","isLoading$","error$","ngOnDestroy","next","complete","loadWards","setLoading","pipe","takeUntil","subscribe","createWard","dto","updateWard","wardId","deleteWard","assignOperator","removeOperator","userId","assignPlant","removePlant","plantId","getAvailablePlantsForWard","catchError","error","setError","getErrorMessage","of","getAvailableUsersForWard","Error","message","factory","\u0275fac"]},_coverageSchema:"1a1c01bbd47fc00a2c39e90264f33305004495a9",hash:"ea289950877617e332cb88d14dcbcbd3f661f4be"};var coverage=global[gcv]||(global[gcv]={});if(!coverage[path]||coverage[path].hash!==hash){coverage[path]=coverageData;}var actualCoverage=coverage[path];{// @ts-ignore +cov_1onqm6v8iq=function(){return actualCoverage;};}return actualCoverage;}cov_1onqm6v8iq();import{a as S}from"./chunk-54EPVJ7F.js";import{a as L}from"./chunk-6R7YSGCL.js";import{a as O}from"./chunk-65RKWSY3.js";import{a as c}from"./chunk-2S5V5XEE.js";import{F as W,G as d,H as i,L as m,Q as n,d as E,e as $,f as h,h as l,m as a,s as g,w as p}from"./chunk-RYTNMYZW.js";import{a as u,b as A}from"./chunk-VCZGUBMY.js";var P=(cov_1onqm6v8iq().s[0]++,{wards:[],isLoading:!1,error:null}),f=(cov_1onqm6v8iq().s[1]++,(()=>{cov_1onqm6v8iq().f[0]++;class s{state$=(cov_1onqm6v8iq().s[2]++,new $(P));wards$=(cov_1onqm6v8iq().s[3]++,this.state$.pipe(a(t=>{cov_1onqm6v8iq().f[1]++;cov_1onqm6v8iq().s[4]++;return t.wards;})));isLoading$=(cov_1onqm6v8iq().s[5]++,this.state$.pipe(a(t=>{cov_1onqm6v8iq().f[2]++;cov_1onqm6v8iq().s[6]++;return t.isLoading;})));error$=(cov_1onqm6v8iq().s[7]++,this.state$.pipe(a(t=>{cov_1onqm6v8iq().f[3]++;cov_1onqm6v8iq().s[8]++;return t.error;})));setState(t){cov_1onqm6v8iq().f[4]++;cov_1onqm6v8iq().s[9]++;this.state$.next(u(u({},this.state$.value),t));}setWards(t){cov_1onqm6v8iq().f[5]++;cov_1onqm6v8iq().s[10]++;this.setState({wards:t});}getWardsSnapshot(){cov_1onqm6v8iq().f[6]++;cov_1onqm6v8iq().s[11]++;return this.state$.value.wards;}addWard(t){cov_1onqm6v8iq().f[7]++;let r=(cov_1onqm6v8iq().s[12]++,this.state$.value);cov_1onqm6v8iq().s[13]++;this.setState({wards:[...r.wards,t],isLoading:!1,error:null});}replaceWard(t){cov_1onqm6v8iq().f[8]++;let r=(cov_1onqm6v8iq().s[14]++,this.state$.value);cov_1onqm6v8iq().s[15]++;this.setState({wards:r.wards.map(e=>{cov_1onqm6v8iq().f[9]++;cov_1onqm6v8iq().s[16]++;return e.id===t.id?(cov_1onqm6v8iq().b[0][0]++,t):(cov_1onqm6v8iq().b[0][1]++,e);}),isLoading:!1,error:null});}removeWard(t){cov_1onqm6v8iq().f[10]++;let r=(cov_1onqm6v8iq().s[17]++,this.state$.value);cov_1onqm6v8iq().s[18]++;this.setState({wards:r.wards.filter(e=>{cov_1onqm6v8iq().f[11]++;cov_1onqm6v8iq().s[19]++;return e.id!==t;}),isLoading:!1,error:null});}patchPlant(t,r){cov_1onqm6v8iq().f[12]++;let o=(cov_1onqm6v8iq().s[20]++,this.state$.value.wards.map(v=>{cov_1onqm6v8iq().f[13]++;cov_1onqm6v8iq().s[21]++;return A(u({},v),{apartments:v.apartments.map(b=>{cov_1onqm6v8iq().f[14]++;cov_1onqm6v8iq().s[22]++;return b.id===t?(cov_1onqm6v8iq().b[1][0]++,u(u({},b),r)):(cov_1onqm6v8iq().b[1][1]++,b);})});}));cov_1onqm6v8iq().s[23]++;this.setState({wards:o,isLoading:!1,error:null});}setLoading(t){cov_1onqm6v8iq().f[15]++;cov_1onqm6v8iq().s[24]++;this.setState({isLoading:t});}setError(t){cov_1onqm6v8iq().f[16]++;cov_1onqm6v8iq().s[25]++;this.setState({error:t,isLoading:!1});}static ɵfac=(cov_1onqm6v8iq().s[26]++,function(r){cov_1onqm6v8iq().f[17]++;cov_1onqm6v8iq().s[27]++;return new((cov_1onqm6v8iq().b[2][0]++,r)||(cov_1onqm6v8iq().b[2][1]++,s))();});static ɵprov=(cov_1onqm6v8iq().s[28]++,m({token:s,factory:s.ɵfac}));}cov_1onqm6v8iq().s[29]++;return s;})());var I=(cov_1onqm6v8iq().s[30]++,(()=>{cov_1onqm6v8iq().f[18]++;class s{api=(cov_1onqm6v8iq().s[31]++,n(S));store=(cov_1onqm6v8iq().s[32]++,n(f));eventSubscriptionService=(cov_1onqm6v8iq().s[33]++,n(L,{optional:!0}));getAvailablePlantsForWard(t){cov_1onqm6v8iq().f[19]++;let r=(cov_1onqm6v8iq().s[34]++,new Set(this.store.getWardsSnapshot().flatMap(e=>{cov_1onqm6v8iq().f[20]++;cov_1onqm6v8iq().s[35]++;return e.apartments;}).map(e=>{cov_1onqm6v8iq().f[21]++;cov_1onqm6v8iq().s[36]++;return e.id;})));cov_1onqm6v8iq().s[37]++;return this.api.getAvailablePlants().pipe(a(e=>{cov_1onqm6v8iq().f[22]++;cov_1onqm6v8iq().s[38]++;return e.filter(o=>{cov_1onqm6v8iq().f[23]++;cov_1onqm6v8iq().s[39]++;return!r.has(o.id);});}),a(e=>{cov_1onqm6v8iq().f[24]++;cov_1onqm6v8iq().s[40]++;return this.toApartments(e);}));}getAvailableUsersForWard(t){cov_1onqm6v8iq().f[25]++;let r=(cov_1onqm6v8iq().s[41]++,this.store.getWardsSnapshot().find(o=>{cov_1onqm6v8iq().f[26]++;cov_1onqm6v8iq().s[42]++;return o.id===t;})),e=(cov_1onqm6v8iq().s[43]++,new Set(((cov_1onqm6v8iq().b[3][0]++,r?.operators)??(cov_1onqm6v8iq().b[3][1]++,[])).map(o=>{cov_1onqm6v8iq().f[27]++;cov_1onqm6v8iq().s[44]++;return o.id;})));cov_1onqm6v8iq().s[45]++;return this.api.getAvailableOperators().pipe(a(o=>{cov_1onqm6v8iq().f[28]++;cov_1onqm6v8iq().s[46]++;return o.filter(v=>{cov_1onqm6v8iq().f[29]++;cov_1onqm6v8iq().s[47]++;return!e.has(v.id);});}),a(o=>{cov_1onqm6v8iq().f[30]++;cov_1onqm6v8iq().s[48]++;return this.toOperators(o);}));}assignOperator(t,r){cov_1onqm6v8iq().f[31]++;cov_1onqm6v8iq().s[49]++;return this.reloadAfter(this.api.assignOperatorToWard(t,r));}removeOperator(t,r){cov_1onqm6v8iq().f[32]++;cov_1onqm6v8iq().s[50]++;return this.reloadAfter(this.api.removeOperatorFromWard(t,r));}assignPlant(t,r){cov_1onqm6v8iq().f[33]++;cov_1onqm6v8iq().s[51]++;return this.reloadAfter(this.api.assignPlantToWard(t,r));}removePlant(t,r){cov_1onqm6v8iq().f[34]++;cov_1onqm6v8iq().s[52]++;return this.reloadAfter(this.api.removePlantFromWard(t,r));}reloadAfter(t){cov_1onqm6v8iq().f[35]++;cov_1onqm6v8iq().s[53]++;return t.pipe(W(()=>{cov_1onqm6v8iq().f[36]++;cov_1onqm6v8iq().s[54]++;return this.api.getWards();}),W(r=>{cov_1onqm6v8iq().f[37]++;cov_1onqm6v8iq().s[55]++;return r.length===0?(cov_1onqm6v8iq().b[4][0]++,l([])):(cov_1onqm6v8iq().b[4][1]++,g(r.map(e=>{cov_1onqm6v8iq().f[38]++;cov_1onqm6v8iq().s[56]++;return this.toWard(e);})));}),i(r=>{cov_1onqm6v8iq().f[39]++;cov_1onqm6v8iq().s[57]++;return this.store.setWards(r);}),i(()=>{cov_1onqm6v8iq().f[40]++;cov_1onqm6v8iq().s[58]++;return this.store.setLoading(!1);}),i(()=>{cov_1onqm6v8iq().f[41]++;cov_1onqm6v8iq().s[59]++;return this.eventSubscriptionService?.refreshWardRoomSubscription();}),a(()=>{cov_1onqm6v8iq().f[42]++;}),p(r=>{cov_1onqm6v8iq().f[43]++;cov_1onqm6v8iq().s[60]++;return this.store.setError(this.getErrorMessage(r)),h;}));}toWard(t){cov_1onqm6v8iq().f[44]++;cov_1onqm6v8iq().s[61]++;return g({apartmentsDto:this.api.getPlantsByWardId(t.id),operatorsDto:this.api.getOperatorsByWardId(t.id)}).pipe(a(({apartmentsDto:r,operatorsDto:e})=>{cov_1onqm6v8iq().f[45]++;cov_1onqm6v8iq().s[62]++;return{id:t.id,name:t.name,apartments:this.toApartments(r),operators:this.toOperators(e)};}));}toApartments(t){cov_1onqm6v8iq().f[46]++;cov_1onqm6v8iq().s[63]++;return t.map(r=>{cov_1onqm6v8iq().f[47]++;cov_1onqm6v8iq().s[64]++;return{id:r.id,name:r.name};});}toOperators(t){cov_1onqm6v8iq().f[48]++;cov_1onqm6v8iq().s[65]++;return t.map(r=>{cov_1onqm6v8iq().f[49]++;cov_1onqm6v8iq().s[66]++;return{id:r.id,firstName:r.username,lastName:"",username:r.username,role:O.OPERATORE_SANITARIO};});}getErrorMessage(t){cov_1onqm6v8iq().f[50]++;cov_1onqm6v8iq().s[67]++;return(cov_1onqm6v8iq().b[6][0]++,t instanceof c)&&(cov_1onqm6v8iq().b[6][1]++,typeof t.error=="string")&&(cov_1onqm6v8iq().b[6][2]++,t.error)?(cov_1onqm6v8iq().b[5][0]++,t.error):(cov_1onqm6v8iq().b[5][1]++,(cov_1onqm6v8iq().b[8][0]++,t instanceof c)&&(cov_1onqm6v8iq().b[8][1]++,t.message)?(cov_1onqm6v8iq().b[7][0]++,t.message):(cov_1onqm6v8iq().b[7][1]++,"Operazione di assegnazione non riuscita."));}static ɵfac=(cov_1onqm6v8iq().s[68]++,function(r){cov_1onqm6v8iq().f[51]++;cov_1onqm6v8iq().s[69]++;return new((cov_1onqm6v8iq().b[9][0]++,r)||(cov_1onqm6v8iq().b[9][1]++,s))();});static ɵprov=(cov_1onqm6v8iq().s[70]++,m({token:s,factory:s.ɵfac}));}cov_1onqm6v8iq().s[71]++;return s;})());var y=(cov_1onqm6v8iq().s[72]++,(()=>{cov_1onqm6v8iq().f[52]++;class s{api=(cov_1onqm6v8iq().s[73]++,n(S));store=(cov_1onqm6v8iq().s[74]++,n(f));loadWards(){cov_1onqm6v8iq().f[53]++;cov_1onqm6v8iq().s[75]++;return this.api.getWards().pipe(W(t=>{cov_1onqm6v8iq().f[54]++;cov_1onqm6v8iq().s[76]++;return t.length===0?(cov_1onqm6v8iq().b[10][0]++,l([])):(cov_1onqm6v8iq().b[10][1]++,g(t.map(r=>{cov_1onqm6v8iq().f[55]++;cov_1onqm6v8iq().s[77]++;return this.toWard(r);})));}),i(t=>{cov_1onqm6v8iq().f[56]++;cov_1onqm6v8iq().s[78]++;return this.store.setWards(t);}),i(()=>{cov_1onqm6v8iq().f[57]++;cov_1onqm6v8iq().s[79]++;return this.store.setLoading(!1);}),a(()=>{cov_1onqm6v8iq().f[58]++;}),p(t=>{cov_1onqm6v8iq().f[59]++;cov_1onqm6v8iq().s[80]++;return this.store.setError(this.getErrorMessage(t)),h;}));}createWard(t){cov_1onqm6v8iq().f[60]++;cov_1onqm6v8iq().s[81]++;return this.api.createWard(t).pipe(i(r=>{cov_1onqm6v8iq().f[61]++;cov_1onqm6v8iq().s[82]++;return this.store.addWard(this.normalizeMutationWard(r));}),i(()=>{cov_1onqm6v8iq().f[62]++;cov_1onqm6v8iq().s[83]++;return this.store.setLoading(!1);}),a(()=>{cov_1onqm6v8iq().f[63]++;}),p(r=>{cov_1onqm6v8iq().f[64]++;cov_1onqm6v8iq().s[84]++;return(cov_1onqm6v8iq().b[12][0]++,r instanceof c)&&(cov_1onqm6v8iq().b[12][1]++,r.status===409)?(cov_1onqm6v8iq().b[11][0]++,this.store.setError("Esiste gia un reparto con questo nome."),h):(cov_1onqm6v8iq().b[11][1]++,this.store.setError(this.getErrorMessage(r)),h);}));}updateWard(t,r){cov_1onqm6v8iq().f[65]++;cov_1onqm6v8iq().s[85]++;return this.api.updateWard(t,r).pipe(i(e=>{cov_1onqm6v8iq().f[66]++;cov_1onqm6v8iq().s[86]++;return this.store.replaceWard(this.normalizeMutationWard(e));}),i(()=>{cov_1onqm6v8iq().f[67]++;cov_1onqm6v8iq().s[87]++;return this.store.setLoading(!1);}),a(()=>{cov_1onqm6v8iq().f[68]++;}),p(e=>{cov_1onqm6v8iq().f[69]++;cov_1onqm6v8iq().s[88]++;return this.store.setError(this.getErrorMessage(e)),h;}));}deleteWard(t){cov_1onqm6v8iq().f[70]++;cov_1onqm6v8iq().s[89]++;return this.api.deleteWard(t).pipe(i(()=>{cov_1onqm6v8iq().f[71]++;cov_1onqm6v8iq().s[90]++;return this.store.removeWard(t);}),i(()=>{cov_1onqm6v8iq().f[72]++;cov_1onqm6v8iq().s[91]++;return this.store.setLoading(!1);}),a(()=>{cov_1onqm6v8iq().f[73]++;}),p(r=>{cov_1onqm6v8iq().f[74]++;cov_1onqm6v8iq().s[92]++;return this.store.setError(this.getErrorMessage(r)),h;}));}toWard(t){cov_1onqm6v8iq().f[75]++;cov_1onqm6v8iq().s[93]++;return g({apartmentsDto:this.api.getPlantsByWardId(t.id),operatorsDto:this.api.getOperatorsByWardId(t.id)}).pipe(a(({apartmentsDto:r,operatorsDto:e})=>{cov_1onqm6v8iq().f[76]++;cov_1onqm6v8iq().s[94]++;return{id:t.id,name:t.name,apartments:this.toApartments(r),operators:this.toOperators(e)};}));}normalizeMutationWard(t){cov_1onqm6v8iq().f[77]++;let r=(cov_1onqm6v8iq().s[95]++,this.store.getWardsSnapshot().find(e=>{cov_1onqm6v8iq().f[78]++;cov_1onqm6v8iq().s[96]++;return e.id===t.id;}));cov_1onqm6v8iq().s[97]++;return{id:t.id,name:t.name,apartments:(cov_1onqm6v8iq().b[13][0]++,t.apartments)??(cov_1onqm6v8iq().b[13][1]++,r?.apartments)??(cov_1onqm6v8iq().b[13][2]++,[]),operators:(cov_1onqm6v8iq().b[14][0]++,t.operators)??(cov_1onqm6v8iq().b[14][1]++,r?.operators)??(cov_1onqm6v8iq().b[14][2]++,[])};}toApartments(t){cov_1onqm6v8iq().f[79]++;cov_1onqm6v8iq().s[98]++;return t.map(r=>{cov_1onqm6v8iq().f[80]++;cov_1onqm6v8iq().s[99]++;return{id:r.id,name:r.name};});}toOperators(t){cov_1onqm6v8iq().f[81]++;cov_1onqm6v8iq().s[100]++;return t.map(r=>{cov_1onqm6v8iq().f[82]++;cov_1onqm6v8iq().s[101]++;return{id:r.id,firstName:r.username,lastName:"",username:r.username,role:O.OPERATORE_SANITARIO};});}getErrorMessage(t){cov_1onqm6v8iq().f[83]++;cov_1onqm6v8iq().s[102]++;return(cov_1onqm6v8iq().b[16][0]++,t instanceof c)&&(cov_1onqm6v8iq().b[16][1]++,typeof t.error=="string")&&(cov_1onqm6v8iq().b[16][2]++,t.error)?(cov_1onqm6v8iq().b[15][0]++,t.error):(cov_1onqm6v8iq().b[15][1]++,(cov_1onqm6v8iq().b[18][0]++,t instanceof c)&&(cov_1onqm6v8iq().b[18][1]++,t.message)?(cov_1onqm6v8iq().b[17][0]++,t.message):(cov_1onqm6v8iq().b[17][1]++,"Operazione sui reparti non riuscita."));}static ɵfac=(cov_1onqm6v8iq().s[103]++,function(r){cov_1onqm6v8iq().f[84]++;cov_1onqm6v8iq().s[104]++;return new((cov_1onqm6v8iq().b[19][0]++,r)||(cov_1onqm6v8iq().b[19][1]++,s))();});static ɵprov=(cov_1onqm6v8iq().s[105]++,m({token:s,factory:s.ɵfac}));}cov_1onqm6v8iq().s[106]++;return s;})());var et=(cov_1onqm6v8iq().s[107]++,(()=>{cov_1onqm6v8iq().f[85]++;class s{wardStore=(cov_1onqm6v8iq().s[108]++,n(f));wardOperations=(cov_1onqm6v8iq().s[109]++,n(y));wardAssignmentOperations=(cov_1onqm6v8iq().s[110]++,n(I));destroy$=(cov_1onqm6v8iq().s[111]++,new E());wards$=(cov_1onqm6v8iq().s[112]++,this.wardStore.wards$);isLoading$=(cov_1onqm6v8iq().s[113]++,this.wardStore.isLoading$);error$=(cov_1onqm6v8iq().s[114]++,this.wardStore.error$);ngOnDestroy(){cov_1onqm6v8iq().f[86]++;cov_1onqm6v8iq().s[115]++;this.destroy$.next(),this.destroy$.complete();}loadWards(){cov_1onqm6v8iq().f[87]++;cov_1onqm6v8iq().s[116]++;this.wardStore.setLoading(!0),this.wardOperations.loadWards().pipe(d(this.destroy$)).subscribe();}createWard(t){cov_1onqm6v8iq().f[88]++;cov_1onqm6v8iq().s[117]++;this.wardStore.setLoading(!0),this.wardOperations.createWard(t).pipe(d(this.destroy$)).subscribe();}updateWard(t,r){cov_1onqm6v8iq().f[89]++;cov_1onqm6v8iq().s[118]++;this.wardStore.setLoading(!0),this.wardOperations.updateWard(t,r).pipe(d(this.destroy$)).subscribe();}deleteWard(t){cov_1onqm6v8iq().f[90]++;cov_1onqm6v8iq().s[119]++;this.wardStore.setLoading(!0),this.wardOperations.deleteWard(t).pipe(d(this.destroy$)).subscribe();}assignOperator(t,r){cov_1onqm6v8iq().f[91]++;cov_1onqm6v8iq().s[120]++;this.wardStore.setLoading(!0),this.wardAssignmentOperations.assignOperator(t,r).pipe(d(this.destroy$)).subscribe();}removeOperator(t,r){cov_1onqm6v8iq().f[92]++;cov_1onqm6v8iq().s[121]++;this.wardStore.setLoading(!0),this.wardAssignmentOperations.removeOperator(t,r).pipe(d(this.destroy$)).subscribe();}assignPlant(t,r){cov_1onqm6v8iq().f[93]++;cov_1onqm6v8iq().s[122]++;this.wardStore.setLoading(!0),this.wardAssignmentOperations.assignPlant(t,r).pipe(d(this.destroy$)).subscribe();}removePlant(t,r){cov_1onqm6v8iq().f[94]++;cov_1onqm6v8iq().s[123]++;this.wardStore.setLoading(!0),this.wardAssignmentOperations.removePlant(t,r).pipe(d(this.destroy$)).subscribe();}getAvailablePlantsForWard(t){cov_1onqm6v8iq().f[95]++;cov_1onqm6v8iq().s[124]++;return this.wardAssignmentOperations.getAvailablePlantsForWard(t).pipe(p(r=>{cov_1onqm6v8iq().f[96]++;cov_1onqm6v8iq().s[125]++;return this.wardStore.setError(this.getErrorMessage(r)),l(null);}));}getAvailableUsersForWard(t){cov_1onqm6v8iq().f[97]++;cov_1onqm6v8iq().s[126]++;return this.wardAssignmentOperations.getAvailableUsersForWard(t).pipe(p(r=>{cov_1onqm6v8iq().f[98]++;cov_1onqm6v8iq().s[127]++;return this.wardStore.setError(this.getErrorMessage(r)),l(null);}));}getErrorMessage(t){cov_1onqm6v8iq().f[99]++;cov_1onqm6v8iq().s[128]++;return(cov_1onqm6v8iq().b[21][0]++,t instanceof Error)&&(cov_1onqm6v8iq().b[21][1]++,t.message)?(cov_1onqm6v8iq().b[20][0]++,t.message):(cov_1onqm6v8iq().b[20][1]++,"Operazione plant non riuscita.");}static ɵfac=(cov_1onqm6v8iq().s[129]++,function(r){cov_1onqm6v8iq().f[100]++;cov_1onqm6v8iq().s[130]++;return new((cov_1onqm6v8iq().b[22][0]++,r)||(cov_1onqm6v8iq().b[22][1]++,s))();});static ɵprov=(cov_1onqm6v8iq().s[131]++,m({token:s,factory:s.ɵfac}));}cov_1onqm6v8iq().s[132]++;return s;})());export{f as a,I as b,y as c,et as d};//# sourceMappingURL=chunk-ZA5BAUMQ.js.map +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJQIiwiY292XzFvbnFtNnY4aXEiLCJzIiwid2FyZHMiLCJpc0xvYWRpbmciLCJlcnJvciIsImYiLCJzdGF0ZSQiLCIkIiwid2FyZHMkIiwicGlwZSIsImEiLCJ0IiwiaXNMb2FkaW5nJCIsImVycm9yJCIsInNldFN0YXRlIiwibmV4dCIsInUiLCJ2YWx1ZSIsInNldFdhcmRzIiwiZ2V0V2FyZHNTbmFwc2hvdCIsImFkZFdhcmQiLCJyIiwicmVwbGFjZVdhcmQiLCJtYXAiLCJlIiwiaWQiLCJiIiwicmVtb3ZlV2FyZCIsImZpbHRlciIsInBhdGNoUGxhbnQiLCJvIiwidiIsIkEiLCJhcGFydG1lbnRzIiwic2V0TG9hZGluZyIsInNldEVycm9yIiwiybVmYWMiLCLJtXByb3YiLCJtIiwidG9rZW4iLCJmYWN0b3J5IiwiSSIsImFwaSIsIm4iLCJTIiwic3RvcmUiLCJldmVudFN1YnNjcmlwdGlvblNlcnZpY2UiLCJMIiwib3B0aW9uYWwiLCJnZXRBdmFpbGFibGVQbGFudHNGb3JXYXJkIiwiU2V0IiwiZmxhdE1hcCIsImdldEF2YWlsYWJsZVBsYW50cyIsImhhcyIsInRvQXBhcnRtZW50cyIsImdldEF2YWlsYWJsZVVzZXJzRm9yV2FyZCIsImZpbmQiLCJvcGVyYXRvcnMiLCJnZXRBdmFpbGFibGVPcGVyYXRvcnMiLCJ0b09wZXJhdG9ycyIsImFzc2lnbk9wZXJhdG9yIiwicmVsb2FkQWZ0ZXIiLCJhc3NpZ25PcGVyYXRvclRvV2FyZCIsInJlbW92ZU9wZXJhdG9yIiwicmVtb3ZlT3BlcmF0b3JGcm9tV2FyZCIsImFzc2lnblBsYW50IiwiYXNzaWduUGxhbnRUb1dhcmQiLCJyZW1vdmVQbGFudCIsInJlbW92ZVBsYW50RnJvbVdhcmQiLCJXIiwiZ2V0V2FyZHMiLCJsZW5ndGgiLCJsIiwiZyIsInRvV2FyZCIsImkiLCJyZWZyZXNoV2FyZFJvb21TdWJzY3JpcHRpb24iLCJwIiwiZ2V0RXJyb3JNZXNzYWdlIiwiaCIsImFwYXJ0bWVudHNEdG8iLCJnZXRQbGFudHNCeVdhcmRJZCIsIm9wZXJhdG9yc0R0byIsImdldE9wZXJhdG9yc0J5V2FyZElkIiwibmFtZSIsImZpcnN0TmFtZSIsInVzZXJuYW1lIiwibGFzdE5hbWUiLCJyb2xlIiwiTyIsIk9QRVJBVE9SRV9TQU5JVEFSSU8iLCJjIiwibWVzc2FnZSIsInkiLCJsb2FkV2FyZHMiLCJjcmVhdGVXYXJkIiwibm9ybWFsaXplTXV0YXRpb25XYXJkIiwic3RhdHVzIiwidXBkYXRlV2FyZCIsImRlbGV0ZVdhcmQiLCJldCIsIndhcmRTdG9yZSIsIndhcmRPcGVyYXRpb25zIiwid2FyZEFzc2lnbm1lbnRPcGVyYXRpb25zIiwiZGVzdHJveSQiLCJFIiwibmdPbkRlc3Ryb3kiLCJjb21wbGV0ZSIsImQiLCJzdWJzY3JpYmUiLCJFcnJvciJdLCJzb3VyY2VzIjpbInNyYy9hcHAvZmVhdHVyZXMvd2FyZC1tYW5hZ2VtZW50L3NlcnZpY2VzL3dhcmQuc3RvcmUudHMiLCJzcmMvYXBwL2ZlYXR1cmVzL3dhcmQtbWFuYWdlbWVudC9zZXJ2aWNlcy9hc3NpZ25tZW50LW9wZXJhdGlvbnMuc2VydmljZS50cyIsInNyYy9hcHAvZmVhdHVyZXMvd2FyZC1tYW5hZ2VtZW50L3NlcnZpY2VzL3dhcmQtb3BlcmF0aW9ucy5zZXJ2aWNlLnRzIiwic3JjL2FwcC9mZWF0dXJlcy93YXJkLW1hbmFnZW1lbnQvc2VydmljZXMvd2FyZC1tYW5hZ2VtZW50LnN0b3JlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgbWFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgdHlwZSB7IFBsYW50IH0gZnJvbSAnLi4vbW9kZWxzL3BsYW50Lm1vZGVsJztcbmltcG9ydCB0eXBlIHsgV2FyZE1hbmFnZW1lbnRTdGF0ZSB9IGZyb20gJy4uL21vZGVscy93YXJkLW1hbmFnZW1lbnQtc3RhdGUubW9kZWwnO1xuaW1wb3J0IHR5cGUgeyBXYXJkIH0gZnJvbSAnLi4vbW9kZWxzL3dhcmQubW9kZWwnO1xuXG5jb25zdCBJTklUSUFMX1NUQVRFOiBXYXJkTWFuYWdlbWVudFN0YXRlID0ge1xuICB3YXJkczogW10sXG4gIGlzTG9hZGluZzogZmFsc2UsXG4gIGVycm9yOiBudWxsLFxufTtcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFdhcmRTdG9yZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgc3RhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxXYXJkTWFuYWdlbWVudFN0YXRlPihJTklUSUFMX1NUQVRFKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgd2FyZHMkOiBPYnNlcnZhYmxlPFdhcmRbXT4gPSB0aGlzLnN0YXRlJC5waXBlKG1hcCgoc3RhdGUpID0+IHN0YXRlLndhcmRzKSk7XG4gIHB1YmxpYyByZWFkb25seSBpc0xvYWRpbmckOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gdGhpcy5zdGF0ZSQucGlwZShcbiAgICBtYXAoKHN0YXRlKSA9PiBzdGF0ZS5pc0xvYWRpbmcpLFxuICApO1xuICBwdWJsaWMgcmVhZG9ubHkgZXJyb3IkOiBPYnNlcnZhYmxlPHN0cmluZyB8IG51bGw+ID0gdGhpcy5zdGF0ZSQucGlwZShtYXAoKHN0YXRlKSA9PiBzdGF0ZS5lcnJvcikpO1xuXG5cbiAgcHJpdmF0ZSBzZXRTdGF0ZShwYXJ0aWFsOiBQYXJ0aWFsPFdhcmRNYW5hZ2VtZW50U3RhdGU+KTogdm9pZCB7XG4gICAgdGhpcy5zdGF0ZSQubmV4dCh7IC4uLnRoaXMuc3RhdGUkLnZhbHVlLCAuLi5wYXJ0aWFsIH0pO1xuICB9XG5cbiAgcHVibGljIHNldFdhcmRzKHdhcmRzOiBXYXJkW10pOiB2b2lkIHtcbiAgICB0aGlzLnNldFN0YXRlKHsgd2FyZHMgfSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0V2FyZHNTbmFwc2hvdCgpOiBXYXJkW10ge1xuICAgIHJldHVybiB0aGlzLnN0YXRlJC52YWx1ZS53YXJkcztcbiAgfVxuXG4gIHB1YmxpYyBhZGRXYXJkKHdhcmQ6IFdhcmQpOiB2b2lkIHtcbiAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5zdGF0ZSQudmFsdWU7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICB3YXJkczogWy4uLmN1cnJlbnQud2FyZHMsIHdhcmRdLFxuICAgICAgaXNMb2FkaW5nOiBmYWxzZSwgZXJyb3I6IG51bGxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyByZXBsYWNlV2FyZCh3YXJkOiBXYXJkKTogdm9pZCB7XG4gICAgY29uc3QgY3VycmVudCA9IHRoaXMuc3RhdGUkLnZhbHVlO1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgd2FyZHM6IGN1cnJlbnQud2FyZHMubWFwKChjdXJyZW50V2FyZCkgPT4gKGN1cnJlbnRXYXJkLmlkID09PSB3YXJkLmlkID8gd2FyZCA6IGN1cnJlbnRXYXJkKSksXG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgZXJyb3I6IG51bGwsXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgcmVtb3ZlV2FyZCh3YXJkSWQ6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLnN0YXRlJC52YWx1ZTtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIHdhcmRzOiBjdXJyZW50LndhcmRzLmZpbHRlcigod2FyZCkgPT4gd2FyZC5pZCAhPT0gd2FyZElkKSxcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICBlcnJvcjogbnVsbCxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBwYXRjaFBsYW50KHBsYW50SWQ6IHN0cmluZywgcGF0Y2g6IFBhcnRpYWw8UGxhbnQ+KTogdm9pZCB7XG4gICAgY29uc3QgY3VycmVudCA9IHRoaXMuc3RhdGUkLnZhbHVlO1xuICAgIGNvbnN0IHdhcmRzID0gY3VycmVudC53YXJkcy5tYXAoKHdhcmQpID0+ICh7XG4gICAgICAuLi53YXJkLFxuICAgICAgYXBhcnRtZW50czogd2FyZC5hcGFydG1lbnRzLm1hcCgoYXBhcnRtZW50KSA9PlxuICAgICAgICBhcGFydG1lbnQuaWQgPT09IHBsYW50SWQgPyB7IC4uLmFwYXJ0bWVudCwgLi4ucGF0Y2ggfSA6IGFwYXJ0bWVudCxcbiAgICAgICksXG4gICAgfSkpO1xuXG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICB3YXJkcyxcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICBlcnJvcjogbnVsbFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHNldExvYWRpbmcodmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLnNldFN0YXRlKHsgaXNMb2FkaW5nOiB2YWx1ZSB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRFcnJvcihtZXNzYWdlOiBzdHJpbmcgfCBudWxsKTogdm9pZCB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7IGVycm9yOiBtZXNzYWdlLCBpc0xvYWRpbmc6IGZhbHNlIH0pO1xuICB9XG5cblxufVxuIiwiaW1wb3J0IHsgSHR0cEVycm9yUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBJbmplY3RhYmxlLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEVNUFRZLCBPYnNlcnZhYmxlLCBjYXRjaEVycm9yLCBmb3JrSm9pbiwgbWFwLCBvZiwgc3dpdGNoTWFwLCB0YXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEV2ZW50U3Vic2NyaXB0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2NvcmUvYWxhcm0vc2VydmljZXMvZXZlbnQtc3Vic2NyaXB0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgVXNlclJvbGUgfSBmcm9tICcuLi8uLi8uLi9jb3JlL21vZGVscy91c2VyLXJvbGUuZW51bSc7XG5pbXBvcnQgdHlwZSB7XG4gIEFzc2lnblBsYW50RHRvLFxuICBBc3NpZ25PcGVyYXRvckR0byxcbiAgV2FyZFBsYW50RHRvLFxuICBXYXJkU3VtbWFyeUR0byxcbiAgV2FyZFVzZXJEdG8sXG59IGZyb20gJy4uL21vZGVscy93YXJkLWFwaS5kdG8nO1xuaW1wb3J0IHR5cGUgeyBXYXJkIH0gZnJvbSAnLi4vbW9kZWxzL3dhcmQubW9kZWwnO1xuaW1wb3J0IHsgV2FyZEFwaVNlcnZpY2UgfSBmcm9tICcuL3dhcmQtYXBpLnNlcnZpY2UnO1xuaW1wb3J0IHsgV2FyZFN0b3JlIH0gZnJvbSAnLi93YXJkLnN0b3JlJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEFzc2lnbm1lbnRPcGVyYXRpb25zU2VydmljZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgYXBpID0gaW5qZWN0KFdhcmRBcGlTZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBzdG9yZSA9IGluamVjdChXYXJkU3RvcmUpO1xuICBwcml2YXRlIHJlYWRvbmx5IGV2ZW50U3Vic2NyaXB0aW9uU2VydmljZSA9IGluamVjdChFdmVudFN1YnNjcmlwdGlvblNlcnZpY2UsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG5cbiAgcHVibGljIGdldEF2YWlsYWJsZVBsYW50c0ZvcldhcmQod2FyZElkOiBudW1iZXIpOiBPYnNlcnZhYmxlPFdhcmRbJ2FwYXJ0bWVudHMnXT4ge1xuICAgIGNvbnN0IGFzc2lnbmVkUGxhbnRJZHMgPSBuZXcgU2V0KFxuICAgICAgdGhpcy5zdG9yZVxuICAgICAgICAuZ2V0V2FyZHNTbmFwc2hvdCgpXG4gICAgICAgIC5mbGF0TWFwKCh3YXJkKSA9PiB3YXJkLmFwYXJ0bWVudHMpXG4gICAgICAgIC5tYXAoKGFwYXJ0bWVudCkgPT4gYXBhcnRtZW50LmlkKSxcbiAgICApO1xuXG4gICAgcmV0dXJuIHRoaXMuYXBpLmdldEF2YWlsYWJsZVBsYW50cygpLnBpcGUoXG4gICAgICBtYXAoKHBsYW50cykgPT4gcGxhbnRzLmZpbHRlcigocGxhbnQpID0+ICFhc3NpZ25lZFBsYW50SWRzLmhhcyhwbGFudC5pZCkpKSxcbiAgICAgIG1hcCgocGxhbnRzKSA9PiB0aGlzLnRvQXBhcnRtZW50cyhwbGFudHMpKSxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGdldEF2YWlsYWJsZVVzZXJzRm9yV2FyZCh3YXJkSWQ6IG51bWJlcik6IE9ic2VydmFibGU8V2FyZFsnb3BlcmF0b3JzJ10+IHtcbiAgICBjb25zdCB3YXJkID0gdGhpcy5zdG9yZS5nZXRXYXJkc1NuYXBzaG90KCkuZmluZCgodykgPT4gdy5pZCA9PT0gd2FyZElkKTtcbiAgICBjb25zdCBhc3NpZ25lZFVzZXJJZHMgPSBuZXcgU2V0KCh3YXJkPy5vcGVyYXRvcnMgPz8gW10pLm1hcCgob3BlcmF0b3IpID0+IG9wZXJhdG9yLmlkKSk7XG5cbiAgICByZXR1cm4gdGhpcy5hcGkuZ2V0QXZhaWxhYmxlT3BlcmF0b3JzXG4gICAgICAoKS5waXBlKFxuICAgICAgICBtYXAoKHVzZXJzKSA9PiB1c2Vycy5maWx0ZXIoKHVzZXIpID0+ICFhc3NpZ25lZFVzZXJJZHMuaGFzKHVzZXIuaWQpKSksXG4gICAgICAgIG1hcCgodXNlcnMpID0+IHRoaXMudG9PcGVyYXRvcnModXNlcnMpKSxcbiAgICAgICk7XG4gIH1cblxuICBwdWJsaWMgYXNzaWduT3BlcmF0b3Iod2FyZElkOiBudW1iZXIsIGR0bzogQXNzaWduT3BlcmF0b3JEdG8pOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5yZWxvYWRBZnRlcih0aGlzLmFwaS5hc3NpZ25PcGVyYXRvclRvV2FyZCh3YXJkSWQsIGR0bykpO1xuICB9XG5cbiAgcHVibGljIHJlbW92ZU9wZXJhdG9yKHdhcmRJZDogbnVtYmVyLCB1c2VySWQ6IG51bWJlcik6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLnJlbG9hZEFmdGVyKHRoaXMuYXBpLnJlbW92ZU9wZXJhdG9yRnJvbVdhcmQod2FyZElkLCB1c2VySWQpKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3NpZ25QbGFudCh3YXJkSWQ6IG51bWJlciwgZHRvOiBBc3NpZ25QbGFudER0byk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLnJlbG9hZEFmdGVyKHRoaXMuYXBpLmFzc2lnblBsYW50VG9XYXJkKHdhcmRJZCwgZHRvKSk7XG4gIH1cblxuICBwdWJsaWMgcmVtb3ZlUGxhbnQod2FyZElkOiBudW1iZXIsIHBsYW50SWQ6IHN0cmluZyk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLnJlbG9hZEFmdGVyKHRoaXMuYXBpLnJlbW92ZVBsYW50RnJvbVdhcmQod2FyZElkLCBwbGFudElkKSk7XG4gIH1cblxuICBwcml2YXRlIHJlbG9hZEFmdGVyKG9wZXJhdGlvbiQ6IE9ic2VydmFibGU8dm9pZD4pOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICByZXR1cm4gb3BlcmF0aW9uJC5waXBlKFxuICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuYXBpLmdldFdhcmRzKCkpLFxuICAgICAgc3dpdGNoTWFwKCh3YXJkU3VtbWFyaWVzKSA9PiB7XG4gICAgICAgIGlmICh3YXJkU3VtbWFyaWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiBvZihbXSBhcyBXYXJkW10pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZvcmtKb2luKHdhcmRTdW1tYXJpZXMubWFwKCh3YXJkU3VtbWFyeSkgPT4gdGhpcy50b1dhcmQod2FyZFN1bW1hcnkpKSk7XG4gICAgICB9KSxcbiAgICAgIHRhcCgod2FyZHMpID0+IHRoaXMuc3RvcmUuc2V0V2FyZHMod2FyZHMpKSxcbiAgICAgIHRhcCgoKSA9PiB0aGlzLnN0b3JlLnNldExvYWRpbmcoZmFsc2UpKSxcbiAgICAgIHRhcCgoKSA9PiB0aGlzLmV2ZW50U3Vic2NyaXB0aW9uU2VydmljZT8ucmVmcmVzaFdhcmRSb29tU3Vic2NyaXB0aW9uKCkpLFxuICAgICAgbWFwKCgpID0+IHZvaWQgMCksXG4gICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xuICAgICAgICB0aGlzLnN0b3JlLnNldEVycm9yKHRoaXMuZ2V0RXJyb3JNZXNzYWdlKGVycm9yKSk7XG4gICAgICAgIHJldHVybiBFTVBUWTtcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHRvV2FyZCh3YXJkU3VtbWFyeTogV2FyZFN1bW1hcnlEdG8pOiBPYnNlcnZhYmxlPFdhcmQ+IHtcbiAgICByZXR1cm4gZm9ya0pvaW4oe1xuICAgICAgYXBhcnRtZW50c0R0bzogdGhpcy5hcGkuZ2V0UGxhbnRzQnlXYXJkSWQod2FyZFN1bW1hcnkuaWQpLFxuICAgICAgb3BlcmF0b3JzRHRvOiB0aGlzLmFwaS5nZXRPcGVyYXRvcnNCeVdhcmRJZCh3YXJkU3VtbWFyeS5pZCksXG4gICAgfSkucGlwZShcbiAgICAgIG1hcCgoeyBhcGFydG1lbnRzRHRvLCBvcGVyYXRvcnNEdG8gfSkgPT4gKHtcbiAgICAgICAgaWQ6IHdhcmRTdW1tYXJ5LmlkLFxuICAgICAgICBuYW1lOiB3YXJkU3VtbWFyeS5uYW1lLFxuICAgICAgICBhcGFydG1lbnRzOiB0aGlzLnRvQXBhcnRtZW50cyhhcGFydG1lbnRzRHRvKSxcbiAgICAgICAgb3BlcmF0b3JzOiB0aGlzLnRvT3BlcmF0b3JzKG9wZXJhdG9yc0R0byksXG4gICAgICB9KSksXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgdG9BcGFydG1lbnRzKGFwYXJ0bWVudHNEdG86IFdhcmRQbGFudER0b1tdKTogV2FyZFsnYXBhcnRtZW50cyddIHtcbiAgICByZXR1cm4gYXBhcnRtZW50c0R0by5tYXAoKHBsYW50KSA9PiAoe1xuICAgICAgaWQ6IHBsYW50LmlkLFxuICAgICAgbmFtZTogcGxhbnQubmFtZSxcbiAgICB9KSk7XG4gIH1cblxuICBwcml2YXRlIHRvT3BlcmF0b3JzKG9wZXJhdG9yc0R0bzogV2FyZFVzZXJEdG9bXSk6IFdhcmRbJ29wZXJhdG9ycyddIHtcbiAgICByZXR1cm4gb3BlcmF0b3JzRHRvLm1hcCgodXNlcikgPT4gKHtcbiAgICAgIGlkOiB1c2VyLmlkLFxuICAgICAgZmlyc3ROYW1lOiB1c2VyLnVzZXJuYW1lLFxuICAgICAgbGFzdE5hbWU6ICcnLFxuICAgICAgdXNlcm5hbWU6IHVzZXIudXNlcm5hbWUsXG4gICAgICByb2xlOiBVc2VyUm9sZS5PUEVSQVRPUkVfU0FOSVRBUklPLFxuICAgIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RXJyb3JNZXNzYWdlKGVycm9yOiB1bmtub3duKTogc3RyaW5nIHtcbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBIdHRwRXJyb3JSZXNwb25zZSAmJiB0eXBlb2YgZXJyb3IuZXJyb3IgPT09ICdzdHJpbmcnICYmIGVycm9yLmVycm9yKSB7XG4gICAgICByZXR1cm4gZXJyb3IuZXJyb3I7XG4gICAgfVxuXG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgSHR0cEVycm9yUmVzcG9uc2UgJiYgZXJyb3IubWVzc2FnZSkge1xuICAgICAgcmV0dXJuIGVycm9yLm1lc3NhZ2U7XG4gICAgfVxuXG4gICAgcmV0dXJuICdPcGVyYXppb25lIGRpIGFzc2VnbmF6aW9uZSBub24gcml1c2NpdGEuJztcbiAgfVxufVxuIiwiaW1wb3J0IHsgSHR0cEVycm9yUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBJbmplY3RhYmxlLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEVNUFRZLCBPYnNlcnZhYmxlLCBjYXRjaEVycm9yLCBmb3JrSm9pbiwgbWFwLCBvZiwgc3dpdGNoTWFwLCB0YXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFVzZXJSb2xlIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9tb2RlbHMvdXNlci1yb2xlLmVudW0nO1xuaW1wb3J0IHR5cGUge1xuICBDcmVhdGVXYXJkRHRvLFxuICBVcGRhdGVXYXJkRHRvLFxuICBXYXJkUGxhbnREdG8sXG4gIFdhcmRTdW1tYXJ5RHRvLFxuICBXYXJkVXNlckR0byxcbn0gZnJvbSAnLi4vbW9kZWxzL3dhcmQtYXBpLmR0byc7XG5pbXBvcnQgdHlwZSB7IFdhcmQgfSBmcm9tICcuLi9tb2RlbHMvd2FyZC5tb2RlbCc7XG5pbXBvcnQgeyBXYXJkQXBpU2VydmljZSB9IGZyb20gJy4vd2FyZC1hcGkuc2VydmljZSc7XG5pbXBvcnQgeyBXYXJkU3RvcmUgfSBmcm9tICcuL3dhcmQuc3RvcmUnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgV2FyZE9wZXJhdGlvbnNTZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBhcGkgPSBpbmplY3QoV2FyZEFwaVNlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IHN0b3JlID0gaW5qZWN0KFdhcmRTdG9yZSk7XG5cbiAgcHVibGljIGxvYWRXYXJkcygpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5hcGkuZ2V0V2FyZHMoKS5waXBlKFxuICAgICAgc3dpdGNoTWFwKCh3YXJkU3VtbWFyaWVzKSA9PiB7XG4gICAgICAgIGlmICh3YXJkU3VtbWFyaWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiBvZihbXSBhcyBXYXJkW10pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZvcmtKb2luKHdhcmRTdW1tYXJpZXMubWFwKCh3YXJkU3VtbWFyeSkgPT4gdGhpcy50b1dhcmQod2FyZFN1bW1hcnkpKSk7XG4gICAgICB9KSxcbiAgICAgIHRhcCgod2FyZHMpID0+IHRoaXMuc3RvcmUuc2V0V2FyZHMod2FyZHMpKSxcbiAgICAgIHRhcCgoKSA9PiB0aGlzLnN0b3JlLnNldExvYWRpbmcoZmFsc2UpKSxcbiAgICAgIG1hcCgoKSA9PiB2b2lkIDApLFxuICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcbiAgICAgICAgdGhpcy5zdG9yZS5zZXRFcnJvcih0aGlzLmdldEVycm9yTWVzc2FnZShlcnJvcikpO1xuICAgICAgICByZXR1cm4gRU1QVFk7XG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGNyZWF0ZVdhcmQoZHRvOiBDcmVhdGVXYXJkRHRvKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuYXBpLmNyZWF0ZVdhcmQoZHRvKS5waXBlKFxuICAgICAgdGFwKCh3YXJkKSA9PiB0aGlzLnN0b3JlLmFkZFdhcmQodGhpcy5ub3JtYWxpemVNdXRhdGlvbldhcmQod2FyZCkpKSxcbiAgICAgIHRhcCgoKSA9PiB0aGlzLnN0b3JlLnNldExvYWRpbmcoZmFsc2UpKSxcbiAgICAgIG1hcCgoKSA9PiB2b2lkIDApLFxuICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgSHR0cEVycm9yUmVzcG9uc2UgJiYgZXJyb3Iuc3RhdHVzID09PSA0MDkpIHtcbiAgICAgICAgICB0aGlzLnN0b3JlLnNldEVycm9yKCdFc2lzdGUgZ2lhIHVuIHJlcGFydG8gY29uIHF1ZXN0byBub21lLicpO1xuICAgICAgICAgIHJldHVybiBFTVBUWTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc3RvcmUuc2V0RXJyb3IodGhpcy5nZXRFcnJvck1lc3NhZ2UoZXJyb3IpKTtcbiAgICAgICAgcmV0dXJuIEVNUFRZO1xuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVXYXJkKHdhcmRJZDogbnVtYmVyLCBkdG86IFVwZGF0ZVdhcmREdG8pOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5hcGkudXBkYXRlV2FyZCh3YXJkSWQsIGR0bykucGlwZShcbiAgICAgIHRhcCgod2FyZCkgPT4gdGhpcy5zdG9yZS5yZXBsYWNlV2FyZCh0aGlzLm5vcm1hbGl6ZU11dGF0aW9uV2FyZCh3YXJkKSkpLFxuICAgICAgdGFwKCgpID0+IHRoaXMuc3RvcmUuc2V0TG9hZGluZyhmYWxzZSkpLFxuICAgICAgbWFwKCgpID0+IHZvaWQgMCksXG4gICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xuICAgICAgICB0aGlzLnN0b3JlLnNldEVycm9yKHRoaXMuZ2V0RXJyb3JNZXNzYWdlKGVycm9yKSk7XG4gICAgICAgIHJldHVybiBFTVBUWTtcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgZGVsZXRlV2FyZCh3YXJkSWQ6IG51bWJlcik6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmFwaS5kZWxldGVXYXJkKHdhcmRJZCkucGlwZShcbiAgICAgIHRhcCgoKSA9PiB0aGlzLnN0b3JlLnJlbW92ZVdhcmQod2FyZElkKSksXG4gICAgICB0YXAoKCkgPT4gdGhpcy5zdG9yZS5zZXRMb2FkaW5nKGZhbHNlKSksXG4gICAgICBtYXAoKCkgPT4gdm9pZCAwKSxcbiAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XG4gICAgICAgIHRoaXMuc3RvcmUuc2V0RXJyb3IodGhpcy5nZXRFcnJvck1lc3NhZ2UoZXJyb3IpKTtcbiAgICAgICAgcmV0dXJuIEVNUFRZO1xuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgdG9XYXJkKHdhcmRTdW1tYXJ5OiBXYXJkU3VtbWFyeUR0byk6IE9ic2VydmFibGU8V2FyZD4ge1xuICAgIHJldHVybiBmb3JrSm9pbih7XG4gICAgICBhcGFydG1lbnRzRHRvOiB0aGlzLmFwaS5nZXRQbGFudHNCeVdhcmRJZCh3YXJkU3VtbWFyeS5pZCksXG4gICAgICBvcGVyYXRvcnNEdG86IHRoaXMuYXBpLmdldE9wZXJhdG9yc0J5V2FyZElkKHdhcmRTdW1tYXJ5LmlkKSxcbiAgICB9KS5waXBlKFxuICAgICAgbWFwKCh7IGFwYXJ0bWVudHNEdG8sIG9wZXJhdG9yc0R0byB9KSA9PiAoe1xuICAgICAgICBpZDogd2FyZFN1bW1hcnkuaWQsXG4gICAgICAgIG5hbWU6IHdhcmRTdW1tYXJ5Lm5hbWUsXG4gICAgICAgIGFwYXJ0bWVudHM6IHRoaXMudG9BcGFydG1lbnRzKGFwYXJ0bWVudHNEdG8pLFxuICAgICAgICBvcGVyYXRvcnM6IHRoaXMudG9PcGVyYXRvcnMob3BlcmF0b3JzRHRvKSxcbiAgICAgIH0pKSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBub3JtYWxpemVNdXRhdGlvbldhcmQod2FyZDogV2FyZCk6IFdhcmQge1xuICAgIGNvbnN0IGN1cnJlbnRXYXJkID0gdGhpcy5zdG9yZS5nZXRXYXJkc1NuYXBzaG90KCkuZmluZCgoaXRlbSkgPT4gaXRlbS5pZCA9PT0gd2FyZC5pZCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IHdhcmQuaWQsXG4gICAgICBuYW1lOiB3YXJkLm5hbWUsXG4gICAgICBhcGFydG1lbnRzOiB3YXJkLmFwYXJ0bWVudHMgPz8gY3VycmVudFdhcmQ/LmFwYXJ0bWVudHMgPz8gW10sXG4gICAgICBvcGVyYXRvcnM6IHdhcmQub3BlcmF0b3JzID8/IGN1cnJlbnRXYXJkPy5vcGVyYXRvcnMgPz8gW10sXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgdG9BcGFydG1lbnRzKGFwYXJ0bWVudHNEdG86IFdhcmRQbGFudER0b1tdKTogV2FyZFsnYXBhcnRtZW50cyddIHtcbiAgICByZXR1cm4gYXBhcnRtZW50c0R0by5tYXAoKHBsYW50KSA9PiAoe1xuICAgICAgaWQ6IHBsYW50LmlkLFxuICAgICAgbmFtZTogcGxhbnQubmFtZSxcbiAgICB9KSk7XG4gIH1cblxuICBwcml2YXRlIHRvT3BlcmF0b3JzKG9wZXJhdG9yc0R0bzogV2FyZFVzZXJEdG9bXSk6IFdhcmRbJ29wZXJhdG9ycyddIHtcbiAgICByZXR1cm4gb3BlcmF0b3JzRHRvLm1hcCgodXNlcikgPT4gKHtcbiAgICAgIGlkOiB1c2VyLmlkLFxuICAgICAgZmlyc3ROYW1lOiB1c2VyLnVzZXJuYW1lLFxuICAgICAgbGFzdE5hbWU6ICcnLFxuICAgICAgdXNlcm5hbWU6IHVzZXIudXNlcm5hbWUsXG4gICAgICByb2xlOiBVc2VyUm9sZS5PUEVSQVRPUkVfU0FOSVRBUklPLFxuICAgIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RXJyb3JNZXNzYWdlKGVycm9yOiB1bmtub3duKTogc3RyaW5nIHtcbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBIdHRwRXJyb3JSZXNwb25zZSAmJiB0eXBlb2YgZXJyb3IuZXJyb3IgPT09ICdzdHJpbmcnICYmIGVycm9yLmVycm9yKSB7XG4gICAgICByZXR1cm4gZXJyb3IuZXJyb3I7XG4gICAgfVxuXG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgSHR0cEVycm9yUmVzcG9uc2UgJiYgZXJyb3IubWVzc2FnZSkge1xuICAgICAgcmV0dXJuIGVycm9yLm1lc3NhZ2U7XG4gICAgfVxuXG4gICAgcmV0dXJuICdPcGVyYXppb25lIHN1aSByZXBhcnRpIG5vbiByaXVzY2l0YS4nO1xuICB9XG59XG4iLCJpbXBvcnQgeyBJbmplY3RhYmxlLCBPbkRlc3Ryb3ksIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCwgY2F0Y2hFcnJvciwgb2YsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHR5cGUgeyBVc2VyIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9tb2RlbHMvdXNlci5tb2RlbCc7XG5pbXBvcnQgdHlwZSB7IEFzc2lnblBsYW50RHRvLCBBc3NpZ25PcGVyYXRvckR0bywgQ3JlYXRlV2FyZER0bywgVXBkYXRlV2FyZER0byB9IGZyb20gJy4uL21vZGVscy93YXJkLWFwaS5kdG8nO1xuaW1wb3J0IHR5cGUgeyBQbGFudCB9IGZyb20gJy4uL21vZGVscy9wbGFudC5tb2RlbCc7XG5pbXBvcnQgeyBBc3NpZ25tZW50T3BlcmF0aW9uc1NlcnZpY2UgfSBmcm9tICcuL2Fzc2lnbm1lbnQtb3BlcmF0aW9ucy5zZXJ2aWNlJztcbmltcG9ydCB7IFdhcmRPcGVyYXRpb25zU2VydmljZSB9IGZyb20gJy4vd2FyZC1vcGVyYXRpb25zLnNlcnZpY2UnO1xuaW1wb3J0IHsgV2FyZFN0b3JlIH0gZnJvbSAnLi93YXJkLnN0b3JlJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFdhcmRNYW5hZ2VtZW50U3RvcmUgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgd2FyZFN0b3JlID0gaW5qZWN0KFdhcmRTdG9yZSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSB3YXJkT3BlcmF0aW9ucyA9IGluamVjdChXYXJkT3BlcmF0aW9uc1NlcnZpY2UpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgd2FyZEFzc2lnbm1lbnRPcGVyYXRpb25zID0gaW5qZWN0KEFzc2lnbm1lbnRPcGVyYXRpb25zU2VydmljZSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICBwdWJsaWMgcmVhZG9ubHkgd2FyZHMkID0gdGhpcy53YXJkU3RvcmUud2FyZHMkO1xuICAgIHB1YmxpYyByZWFkb25seSBpc0xvYWRpbmckID0gdGhpcy53YXJkU3RvcmUuaXNMb2FkaW5nJDtcbiAgICBwdWJsaWMgcmVhZG9ubHkgZXJyb3IkID0gdGhpcy53YXJkU3RvcmUuZXJyb3IkO1xuXG4gICAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICAgICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBsb2FkV2FyZHMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMud2FyZFN0b3JlLnNldExvYWRpbmcodHJ1ZSk7XG4gICAgICAgIHRoaXMud2FyZE9wZXJhdGlvbnNcbiAgICAgICAgICAgIC5sb2FkV2FyZHMoKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjcmVhdGVXYXJkKGR0bzogQ3JlYXRlV2FyZER0byk6IHZvaWQge1xuICAgICAgICB0aGlzLndhcmRTdG9yZS5zZXRMb2FkaW5nKHRydWUpO1xuICAgICAgICB0aGlzLndhcmRPcGVyYXRpb25zXG4gICAgICAgICAgICAuY3JlYXRlV2FyZChkdG8pXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHVwZGF0ZVdhcmQod2FyZElkOiBudW1iZXIsIGR0bzogVXBkYXRlV2FyZER0byk6IHZvaWQge1xuICAgICAgICB0aGlzLndhcmRTdG9yZS5zZXRMb2FkaW5nKHRydWUpO1xuICAgICAgICB0aGlzLndhcmRPcGVyYXRpb25zXG4gICAgICAgICAgICAudXBkYXRlV2FyZCh3YXJkSWQsIGR0bylcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZGVsZXRlV2FyZCh3YXJkSWQ6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLndhcmRTdG9yZS5zZXRMb2FkaW5nKHRydWUpO1xuICAgICAgICB0aGlzLndhcmRPcGVyYXRpb25zXG4gICAgICAgICAgICAuZGVsZXRlV2FyZCh3YXJkSWQpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzc2lnbk9wZXJhdG9yKHdhcmRJZDogbnVtYmVyLCBkdG86IEFzc2lnbk9wZXJhdG9yRHRvKTogdm9pZCB7XG4gICAgICAgIHRoaXMud2FyZFN0b3JlLnNldExvYWRpbmcodHJ1ZSk7XG4gICAgICAgIHRoaXMud2FyZEFzc2lnbm1lbnRPcGVyYXRpb25zXG4gICAgICAgICAgICAuYXNzaWduT3BlcmF0b3Iod2FyZElkLCBkdG8pXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbW92ZU9wZXJhdG9yKHdhcmRJZDogbnVtYmVyLCB1c2VySWQ6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLndhcmRTdG9yZS5zZXRMb2FkaW5nKHRydWUpO1xuICAgICAgICB0aGlzLndhcmRBc3NpZ25tZW50T3BlcmF0aW9uc1xuICAgICAgICAgICAgLnJlbW92ZU9wZXJhdG9yKHdhcmRJZCwgdXNlcklkKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3NpZ25QbGFudCh3YXJkSWQ6IG51bWJlciwgZHRvOiBBc3NpZ25QbGFudER0byk6IHZvaWQge1xuICAgICAgICB0aGlzLndhcmRTdG9yZS5zZXRMb2FkaW5nKHRydWUpO1xuICAgICAgICB0aGlzLndhcmRBc3NpZ25tZW50T3BlcmF0aW9uc1xuICAgICAgICAgICAgLmFzc2lnblBsYW50KHdhcmRJZCwgZHRvKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyByZW1vdmVQbGFudCh3YXJkSWQ6IG51bWJlciwgcGxhbnRJZDogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHRoaXMud2FyZFN0b3JlLnNldExvYWRpbmcodHJ1ZSk7XG4gICAgICAgIHRoaXMud2FyZEFzc2lnbm1lbnRPcGVyYXRpb25zXG4gICAgICAgICAgICAucmVtb3ZlUGxhbnQod2FyZElkLCBwbGFudElkKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRBdmFpbGFibGVQbGFudHNGb3JXYXJkKHdhcmRJZDogbnVtYmVyKTogT2JzZXJ2YWJsZTxQbGFudFtdIHwgbnVsbD4ge1xuICAgICAgICByZXR1cm4gdGhpcy53YXJkQXNzaWdubWVudE9wZXJhdGlvbnMuZ2V0QXZhaWxhYmxlUGxhbnRzRm9yV2FyZCh3YXJkSWQpLnBpcGUoXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMud2FyZFN0b3JlLnNldEVycm9yKHRoaXMuZ2V0RXJyb3JNZXNzYWdlKGVycm9yKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEF2YWlsYWJsZVVzZXJzRm9yV2FyZCh3YXJkSWQ6IG51bWJlcik6IE9ic2VydmFibGU8VXNlcltdIHwgbnVsbD4ge1xuICAgICAgICByZXR1cm4gdGhpcy53YXJkQXNzaWdubWVudE9wZXJhdGlvbnMuZ2V0QXZhaWxhYmxlVXNlcnNGb3JXYXJkKHdhcmRJZCkucGlwZShcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy53YXJkU3RvcmUuc2V0RXJyb3IodGhpcy5nZXRFcnJvck1lc3NhZ2UoZXJyb3IpKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gb2YobnVsbCk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEVycm9yTWVzc2FnZShlcnJvcjogdW5rbm93bik6IHN0cmluZyB7XG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yICYmIGVycm9yLm1lc3NhZ2UpIHtcbiAgICAgICAgICAgIHJldHVybiBlcnJvci5tZXNzYWdlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICdPcGVyYXppb25lIHBsYW50IG5vbiByaXVzY2l0YS4nO1xuICAgIH1cbn1cbiJdLCJtYXBwaW5ncyI6IjsrWkFNQSxHQUFNLENBQUFBLENBQUEsRUFBQUMsY0FBQSxHQUFBQyxDQUFBLE1BQXFDLENBQ3pDQyxLQUFBLENBQU8sR0FDUEMsU0FBQSxDQUFXLEdBQ1hDLEtBQUEsQ0FBTyxPQUlJQyxDQUFBLEVBQUFMLGNBQUEsR0FBQUMs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 \ No newline at end of file diff --git a/frontend/dist-instrumented/chunk-ZA5BAUMQ.js.map b/frontend/dist-instrumented/chunk-ZA5BAUMQ.js.map new file mode 100644 index 00000000..31482612 --- /dev/null +++ b/frontend/dist-instrumented/chunk-ZA5BAUMQ.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["src/app/features/ward-management/services/ward.store.ts", "src/app/features/ward-management/services/assignment-operations.service.ts", "src/app/features/ward-management/services/ward-operations.service.ts", "src/app/features/ward-management/services/ward-management.store.ts"], + "sourcesContent": ["import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable, map } from 'rxjs';\nimport type { Plant } from '../models/plant.model';\nimport type { WardManagementState } from '../models/ward-management-state.model';\nimport type { Ward } from '../models/ward.model';\n\nconst INITIAL_STATE: WardManagementState = {\n wards: [],\n isLoading: false,\n error: null,\n};\n\n@Injectable()\nexport class WardStore {\n private readonly state$ = new BehaviorSubject(INITIAL_STATE);\n\n public readonly wards$: Observable = this.state$.pipe(map((state) => state.wards));\n public readonly isLoading$: Observable = this.state$.pipe(\n map((state) => state.isLoading),\n );\n public readonly error$: Observable = this.state$.pipe(map((state) => state.error));\n\n\n private setState(partial: Partial): void {\n this.state$.next({ ...this.state$.value, ...partial });\n }\n\n public setWards(wards: Ward[]): void {\n this.setState({ wards });\n }\n\n public getWardsSnapshot(): Ward[] {\n return this.state$.value.wards;\n }\n\n public addWard(ward: Ward): void {\n const current = this.state$.value;\n this.setState({\n wards: [...current.wards, ward],\n isLoading: false, error: null\n });\n }\n\n public replaceWard(ward: Ward): void {\n const current = this.state$.value;\n this.setState({\n wards: current.wards.map((currentWard) => (currentWard.id === ward.id ? ward : currentWard)),\n isLoading: false,\n error: null,\n });\n }\n\n public removeWard(wardId: number): void {\n const current = this.state$.value;\n this.setState({\n wards: current.wards.filter((ward) => ward.id !== wardId),\n isLoading: false,\n error: null,\n });\n }\n\n public patchPlant(plantId: string, patch: Partial): void {\n const current = this.state$.value;\n const wards = current.wards.map((ward) => ({\n ...ward,\n apartments: ward.apartments.map((apartment) =>\n apartment.id === plantId ? { ...apartment, ...patch } : apartment,\n ),\n }));\n\n this.setState({\n wards,\n isLoading: false,\n error: null\n });\n }\n\n public setLoading(value: boolean): void {\n this.setState({ isLoading: value });\n }\n\n public setError(message: string | null): void {\n this.setState({ error: message, isLoading: false });\n }\n\n\n}\n", "import { HttpErrorResponse } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\nimport { EMPTY, Observable, catchError, forkJoin, map, of, switchMap, tap } from 'rxjs';\nimport { EventSubscriptionService } from '../../../core/alarm/services/event-subscription.service';\nimport { UserRole } from '../../../core/models/user-role.enum';\nimport type {\n AssignPlantDto,\n AssignOperatorDto,\n WardPlantDto,\n WardSummaryDto,\n WardUserDto,\n} from '../models/ward-api.dto';\nimport type { Ward } from '../models/ward.model';\nimport { WardApiService } from './ward-api.service';\nimport { WardStore } from './ward.store';\n\n@Injectable()\nexport class AssignmentOperationsService {\n private readonly api = inject(WardApiService);\n private readonly store = inject(WardStore);\n private readonly eventSubscriptionService = inject(EventSubscriptionService, { optional: true });\n\n public getAvailablePlantsForWard(wardId: number): Observable {\n const assignedPlantIds = new Set(\n this.store\n .getWardsSnapshot()\n .flatMap((ward) => ward.apartments)\n .map((apartment) => apartment.id),\n );\n\n return this.api.getAvailablePlants().pipe(\n map((plants) => plants.filter((plant) => !assignedPlantIds.has(plant.id))),\n map((plants) => this.toApartments(plants)),\n );\n }\n\n public getAvailableUsersForWard(wardId: number): Observable {\n const ward = this.store.getWardsSnapshot().find((w) => w.id === wardId);\n const assignedUserIds = new Set((ward?.operators ?? []).map((operator) => operator.id));\n\n return this.api.getAvailableOperators\n ().pipe(\n map((users) => users.filter((user) => !assignedUserIds.has(user.id))),\n map((users) => this.toOperators(users)),\n );\n }\n\n public assignOperator(wardId: number, dto: AssignOperatorDto): Observable {\n return this.reloadAfter(this.api.assignOperatorToWard(wardId, dto));\n }\n\n public removeOperator(wardId: number, userId: number): Observable {\n return this.reloadAfter(this.api.removeOperatorFromWard(wardId, userId));\n }\n\n public assignPlant(wardId: number, dto: AssignPlantDto): Observable {\n return this.reloadAfter(this.api.assignPlantToWard(wardId, dto));\n }\n\n public removePlant(wardId: number, plantId: string): Observable {\n return this.reloadAfter(this.api.removePlantFromWard(wardId, plantId));\n }\n\n private reloadAfter(operation$: Observable): Observable {\n return operation$.pipe(\n switchMap(() => this.api.getWards()),\n switchMap((wardSummaries) => {\n if (wardSummaries.length === 0) {\n return of([] as Ward[]);\n }\n\n return forkJoin(wardSummaries.map((wardSummary) => this.toWard(wardSummary)));\n }),\n tap((wards) => this.store.setWards(wards)),\n tap(() => this.store.setLoading(false)),\n tap(() => this.eventSubscriptionService?.refreshWardRoomSubscription()),\n map(() => void 0),\n catchError((error) => {\n this.store.setError(this.getErrorMessage(error));\n return EMPTY;\n }),\n );\n }\n\n private toWard(wardSummary: WardSummaryDto): Observable {\n return forkJoin({\n apartmentsDto: this.api.getPlantsByWardId(wardSummary.id),\n operatorsDto: this.api.getOperatorsByWardId(wardSummary.id),\n }).pipe(\n map(({ apartmentsDto, operatorsDto }) => ({\n id: wardSummary.id,\n name: wardSummary.name,\n apartments: this.toApartments(apartmentsDto),\n operators: this.toOperators(operatorsDto),\n })),\n );\n }\n\n private toApartments(apartmentsDto: WardPlantDto[]): Ward['apartments'] {\n return apartmentsDto.map((plant) => ({\n id: plant.id,\n name: plant.name,\n }));\n }\n\n private toOperators(operatorsDto: WardUserDto[]): Ward['operators'] {\n return operatorsDto.map((user) => ({\n id: user.id,\n firstName: user.username,\n lastName: '',\n username: user.username,\n role: UserRole.OPERATORE_SANITARIO,\n }));\n }\n\n private getErrorMessage(error: unknown): string {\n if (error instanceof HttpErrorResponse && typeof error.error === 'string' && error.error) {\n return error.error;\n }\n\n if (error instanceof HttpErrorResponse && error.message) {\n return error.message;\n }\n\n return 'Operazione di assegnazione non riuscita.';\n }\n}\n", "import { HttpErrorResponse } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\nimport { EMPTY, Observable, catchError, forkJoin, map, of, switchMap, tap } from 'rxjs';\nimport { UserRole } from '../../../core/models/user-role.enum';\nimport type {\n CreateWardDto,\n UpdateWardDto,\n WardPlantDto,\n WardSummaryDto,\n WardUserDto,\n} from '../models/ward-api.dto';\nimport type { Ward } from '../models/ward.model';\nimport { WardApiService } from './ward-api.service';\nimport { WardStore } from './ward.store';\n\n@Injectable()\nexport class WardOperationsService {\n private readonly api = inject(WardApiService);\n private readonly store = inject(WardStore);\n\n public loadWards(): Observable {\n return this.api.getWards().pipe(\n switchMap((wardSummaries) => {\n if (wardSummaries.length === 0) {\n return of([] as Ward[]);\n }\n\n return forkJoin(wardSummaries.map((wardSummary) => this.toWard(wardSummary)));\n }),\n tap((wards) => this.store.setWards(wards)),\n tap(() => this.store.setLoading(false)),\n map(() => void 0),\n catchError((error) => {\n this.store.setError(this.getErrorMessage(error));\n return EMPTY;\n }),\n );\n }\n\n public createWard(dto: CreateWardDto): Observable {\n return this.api.createWard(dto).pipe(\n tap((ward) => this.store.addWard(this.normalizeMutationWard(ward))),\n tap(() => this.store.setLoading(false)),\n map(() => void 0),\n catchError((error) => {\n if (error instanceof HttpErrorResponse && error.status === 409) {\n this.store.setError('Esiste gia un reparto con questo nome.');\n return EMPTY;\n }\n\n this.store.setError(this.getErrorMessage(error));\n return EMPTY;\n }),\n );\n }\n\n public updateWard(wardId: number, dto: UpdateWardDto): Observable {\n return this.api.updateWard(wardId, dto).pipe(\n tap((ward) => this.store.replaceWard(this.normalizeMutationWard(ward))),\n tap(() => this.store.setLoading(false)),\n map(() => void 0),\n catchError((error) => {\n this.store.setError(this.getErrorMessage(error));\n return EMPTY;\n }),\n );\n }\n\n public deleteWard(wardId: number): Observable {\n return this.api.deleteWard(wardId).pipe(\n tap(() => this.store.removeWard(wardId)),\n tap(() => this.store.setLoading(false)),\n map(() => void 0),\n catchError((error) => {\n this.store.setError(this.getErrorMessage(error));\n return EMPTY;\n }),\n );\n }\n\n private toWard(wardSummary: WardSummaryDto): Observable {\n return forkJoin({\n apartmentsDto: this.api.getPlantsByWardId(wardSummary.id),\n operatorsDto: this.api.getOperatorsByWardId(wardSummary.id),\n }).pipe(\n map(({ apartmentsDto, operatorsDto }) => ({\n id: wardSummary.id,\n name: wardSummary.name,\n apartments: this.toApartments(apartmentsDto),\n operators: this.toOperators(operatorsDto),\n })),\n );\n }\n\n private normalizeMutationWard(ward: Ward): Ward {\n const currentWard = this.store.getWardsSnapshot().find((item) => item.id === ward.id);\n\n return {\n id: ward.id,\n name: ward.name,\n apartments: ward.apartments ?? currentWard?.apartments ?? [],\n operators: ward.operators ?? currentWard?.operators ?? [],\n };\n }\n\n private toApartments(apartmentsDto: WardPlantDto[]): Ward['apartments'] {\n return apartmentsDto.map((plant) => ({\n id: plant.id,\n name: plant.name,\n }));\n }\n\n private toOperators(operatorsDto: WardUserDto[]): Ward['operators'] {\n return operatorsDto.map((user) => ({\n id: user.id,\n firstName: user.username,\n lastName: '',\n username: user.username,\n role: UserRole.OPERATORE_SANITARIO,\n }));\n }\n\n private getErrorMessage(error: unknown): string {\n if (error instanceof HttpErrorResponse && typeof error.error === 'string' && error.error) {\n return error.error;\n }\n\n if (error instanceof HttpErrorResponse && error.message) {\n return error.message;\n }\n\n return 'Operazione sui reparti non riuscita.';\n }\n}\n", "import { Injectable, OnDestroy, inject } from '@angular/core';\nimport { Observable, Subject, catchError, of, takeUntil } from 'rxjs';\nimport type { User } from '../../../core/models/user.model';\nimport type { AssignPlantDto, AssignOperatorDto, CreateWardDto, UpdateWardDto } from '../models/ward-api.dto';\nimport type { Plant } from '../models/plant.model';\nimport { AssignmentOperationsService } from './assignment-operations.service';\nimport { WardOperationsService } from './ward-operations.service';\nimport { WardStore } from './ward.store';\n\n@Injectable()\nexport class WardManagementStore implements OnDestroy {\n private readonly wardStore = inject(WardStore);\n private readonly wardOperations = inject(WardOperationsService);\n private readonly wardAssignmentOperations = inject(AssignmentOperationsService);\n private readonly destroy$ = new Subject();\n\n public readonly wards$ = this.wardStore.wards$;\n public readonly isLoading$ = this.wardStore.isLoading$;\n public readonly error$ = this.wardStore.error$;\n\n public ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n public loadWards(): void {\n this.wardStore.setLoading(true);\n this.wardOperations\n .loadWards()\n .pipe(takeUntil(this.destroy$))\n .subscribe();\n }\n\n public createWard(dto: CreateWardDto): void {\n this.wardStore.setLoading(true);\n this.wardOperations\n .createWard(dto)\n .pipe(takeUntil(this.destroy$))\n .subscribe();\n }\n\n public updateWard(wardId: number, dto: UpdateWardDto): void {\n this.wardStore.setLoading(true);\n this.wardOperations\n .updateWard(wardId, dto)\n .pipe(takeUntil(this.destroy$))\n .subscribe();\n }\n\n public deleteWard(wardId: number): void {\n this.wardStore.setLoading(true);\n this.wardOperations\n .deleteWard(wardId)\n .pipe(takeUntil(this.destroy$))\n .subscribe();\n }\n\n public assignOperator(wardId: number, dto: AssignOperatorDto): void {\n this.wardStore.setLoading(true);\n this.wardAssignmentOperations\n .assignOperator(wardId, dto)\n .pipe(takeUntil(this.destroy$))\n .subscribe();\n }\n\n public removeOperator(wardId: number, userId: number): void {\n this.wardStore.setLoading(true);\n this.wardAssignmentOperations\n .removeOperator(wardId, userId)\n .pipe(takeUntil(this.destroy$))\n .subscribe();\n }\n\n public assignPlant(wardId: number, dto: AssignPlantDto): void {\n this.wardStore.setLoading(true);\n this.wardAssignmentOperations\n .assignPlant(wardId, dto)\n .pipe(takeUntil(this.destroy$))\n .subscribe();\n }\n\n public removePlant(wardId: number, plantId: string): void {\n this.wardStore.setLoading(true);\n this.wardAssignmentOperations\n .removePlant(wardId, plantId)\n .pipe(takeUntil(this.destroy$))\n .subscribe();\n }\n\n public getAvailablePlantsForWard(wardId: number): Observable {\n return this.wardAssignmentOperations.getAvailablePlantsForWard(wardId).pipe(\n catchError((error) => {\n this.wardStore.setError(this.getErrorMessage(error));\n return of(null);\n }),\n );\n }\n\n public getAvailableUsersForWard(wardId: number): Observable {\n return this.wardAssignmentOperations.getAvailableUsersForWard(wardId).pipe(\n catchError((error) => {\n this.wardStore.setError(this.getErrorMessage(error));\n return of(null);\n }),\n );\n }\n\n private getErrorMessage(error: unknown): string {\n if (error instanceof Error && error.message) {\n return error.message;\n }\n\n return 'Operazione plant non riuscita.';\n }\n}\n"], + "mappings": "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", + "names": ["INITIAL_STATE", "wards", "isLoading", "error", "WardStore", "state$", "BehaviorSubject", "wards$", "pipe", "map", "state", "isLoading$", "error$", "setState", "partial", "next", "__spreadValues", "value", "setWards", "getWardsSnapshot", "addWard", "ward", "current", "replaceWard", "currentWard", "id", "removeWard", "wardId", "filter", "patchPlant", "plantId", "patch", "__spreadProps", "apartments", "apartment", "setLoading", "setError", "message", "factory", "\u0275fac", "AssignmentOperationsService", "api", "inject", "WardApiService", "store", "WardStore", "eventSubscriptionService", "EventSubscriptionService", "optional", "getAvailablePlantsForWard", "wardId", "assignedPlantIds", "Set", "getWardsSnapshot", "flatMap", "ward", "apartments", "map", "apartment", "id", "getAvailablePlants", "pipe", "plants", "filter", "plant", "has", "toApartments", "getAvailableUsersForWard", "find", "w", "assignedUserIds", "operators", "operator", "getAvailableOperators", "users", "user", "toOperators", "assignOperator", "dto", "reloadAfter", "assignOperatorToWard", "removeOperator", "userId", "removeOperatorFromWard", "assignPlant", "assignPlantToWard", "removePlant", "plantId", "removePlantFromWard", "operation$", "switchMap", "getWards", "wardSummaries", "length", "of", "forkJoin", "wardSummary", "toWard", "tap", "wards", "setWards", "setLoading", "refreshWardRoomSubscription", "catchError", "error", "setError", "getErrorMessage", "EMPTY", "apartmentsDto", "getPlantsByWardId", "operatorsDto", "getOperatorsByWardId", "name", "firstName", "username", "lastName", "role", "UserRole", "OPERATORE_SANITARIO", "HttpErrorResponse", "message", "factory", "\u0275fac", "WardOperationsService", "api", "inject", "WardApiService", "store", "WardStore", "loadWards", "getWards", "pipe", "switchMap", "wardSummaries", "length", "of", "forkJoin", "map", "wardSummary", "toWard", "tap", "wards", "setWards", "setLoading", "catchError", "error", "setError", "getErrorMessage", "EMPTY", "createWard", "dto", "ward", "addWard", "normalizeMutationWard", "HttpErrorResponse", "status", "updateWard", "wardId", "replaceWard", "deleteWard", "removeWard", "apartmentsDto", "getPlantsByWardId", "id", "operatorsDto", "getOperatorsByWardId", "name", "apartments", "toApartments", "operators", "toOperators", "currentWard", "getWardsSnapshot", "find", "item", "plant", "user", "firstName", "username", "lastName", "role", "UserRole", "OPERATORE_SANITARIO", "message", "factory", "\u0275fac", "WardManagementStore", "wardStore", "inject", "WardStore", "wardOperations", "WardOperationsService", "wardAssignmentOperations", "AssignmentOperationsService", "destroy$", "Subject", "wards$", "isLoading$", "error$", "ngOnDestroy", "next", "complete", "loadWards", "setLoading", "pipe", "takeUntil", "subscribe", "createWard", "dto", "updateWard", "wardId", "deleteWard", "assignOperator", "removeOperator", "userId", "assignPlant", "removePlant", "plantId", "getAvailablePlantsForWard", "catchError", "error", "setError", "getErrorMessage", "of", "getAvailableUsersForWard", "Error", "message", "factory", "\u0275fac"] +} diff --git a/frontend/dist-instrumented/chunk-ZZLQRDHJ.js b/frontend/dist-instrumented/chunk-ZZLQRDHJ.js new file mode 100644 index 00000000..5833d9e2 --- /dev/null +++ b/frontend/dist-instrumented/chunk-ZZLQRDHJ.js @@ -0,0 +1,3 @@ +function cov_1t912mjthi(){var path="/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-ZZLQRDHJ.js";var hash="44558b22ed395f1c0f8a5d5ae8fc4169644bb458";var global=new Function("return this")();var gcv="__coverage__";var coverageData={path:"/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/chunk-ZZLQRDHJ.js",statementMap:{"0":{start:{line:1,column:6},end:{line:1,column:118}},"1":{start:{line:1,column:19},end:{line:1,column:109}}},fnMap:{"0":{name:"(anonymous_0)",decl:{start:{line:1,column:7},end:{line:1,column:8}},loc:{start:{line:1,column:18},end:{line:1,column:110}},line:1}},branchMap:{"0":{loc:{start:{line:1,column:112},end:{line:1,column:117}},type:"binary-expr",locations:[{start:{line:1,column:112},end:{line:1,column:113}},{start:{line:1,column:115},end:{line:1,column:117}}],line:1}},s:{"0":0,"1":0},f:{"0":0},b:{"0":[0,0]},inputSourceMap:{version:3,sources:["src/app/core/alarm/models/alarm-priority.enum.ts"],sourcesContent:["\n// Enumera i quattro livelli di priorit\xE0 di un allarme definiti dai casi d'uso\n// UC33.4\u2013UC33.7\n\nexport enum AlarmPriority {\n WHITE = 1,\n GREEN,\n ORANGE,\n RED\n}"],mappings:"AAIA,IAAYA,GAAZ,SAAYA,EAAa,CACrBA,OAAAA,EAAAA,EAAA,MAAA,CAAA,EAAA,QACAA,EAAAA,EAAA,MAAA,CAAA,EAAA,QACAA,EAAAA,EAAA,OAAA,CAAA,EAAA,SACAA,EAAAA,EAAA,IAAA,CAAA,EAAA,MAJQA,CAKZ,GALYA,GAAa,CAAA,CAAA",names:["AlarmPriority"]},_coverageSchema:"1a1c01bbd47fc00a2c39e90264f33305004495a9",hash:"44558b22ed395f1c0f8a5d5ae8fc4169644bb458"};var coverage=global[gcv]||(global[gcv]={});if(!coverage[path]||coverage[path].hash!==hash){coverage[path]=coverageData;}var actualCoverage=coverage[path];{// @ts-ignore +cov_1t912mjthi=function(){return actualCoverage;};}return actualCoverage;}cov_1t912mjthi();var R=(cov_1t912mjthi().s[0]++,function(E){cov_1t912mjthi().f[0]++;cov_1t912mjthi().s[1]++;return E[E.WHITE=1]="WHITE",E[E.GREEN=2]="GREEN",E[E.ORANGE=3]="ORANGE",E[E.RED=4]="RED",E;}((cov_1t912mjthi().b[0][0]++,R)||(cov_1t912mjthi().b[0][1]++,{})));export{R as a};//# sourceMappingURL=chunk-ZZLQRDHJ.js.map +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSIiwiY292XzF0OTEybWp0aGkiLCJzIiwiRSIsImYiLCJXSElURSIsIkdSRUVOIiwiT1JBTkdFIiwiUkVEIiwiYiIsImEiXSwic291cmNlcyI6WyJzcmMvYXBwL2NvcmUvYWxhcm0vbW9kZWxzL2FsYXJtLXByaW9yaXR5LmVudW0udHMiXSwic291cmNlc0NvbnRlbnQiOlsiXG4vLyBFbnVtZXJhIGkgcXVhdHRybyBsaXZlbGxpIGRpIHByaW9yaXTDoCBkaSB1biBhbGxhcm1lIGRlZmluaXRpIGRhaSBjYXNpIGQndXNvXG4vLyBVQzMzLjTigJNVQzMzLjdcblxuZXhwb3J0IGVudW0gQWxhcm1Qcmlvcml0eSB7XG4gICAgV0hJVEUgPSAxLFxuICAgIEdSRUVOLFxuICAgIE9SQU5HRSxcbiAgICBSRURcbn0iXSwibWFwcGluZ3MiOiI7MkZBSUEsR0FBWSxDQUFBQSxDQUFBLEVBQUFDLGNBQUEsR0FBQUMsQ0FBQSxNQUFaLFNBQVlDLENBQUEsQ0FBYSxDQUFBRixjQUFBLEdBQUFHLENBQUEsS0FBQUgsQ0FBQSxpQkFBQUMsQ0FBQSxNQUNyQixPQUFBQyxDQUFBLENBQUFBLENBQUEsQ0FBQUUsS0FBQSxZQUNBRixDQUFBLENBQUFBLENBQUEsQ0FBQUcsS0FBQSxZQUNBSCxDQUFBLENBQUFBLENBQUEsQ0FBQUksTUFBQSxhQUNBSixDQUFBLENBQUFBLENBQUEsQ0FBQUssR0FBQSxVQUpRTCxDQUtaLEdBTFksQ0FBQUYsY0FBQSxHQUFBUSxDQUFBLFNBQUFULENBQUEsSUFBQUMsY0FBQSxHQUFBUSxDQUFBLFNBQWEsYUFBQVQsQ0FBQSxJQUFBVSxDQUFBLEUiLCJpZ25vcmVMaXN0IjpbXX0= \ No newline at end of file diff --git a/frontend/dist-instrumented/chunk-ZZLQRDHJ.js.map b/frontend/dist-instrumented/chunk-ZZLQRDHJ.js.map new file mode 100644 index 00000000..82046392 --- /dev/null +++ b/frontend/dist-instrumented/chunk-ZZLQRDHJ.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["src/app/core/alarm/models/alarm-priority.enum.ts"], + "sourcesContent": ["\n// Enumera i quattro livelli di priorità di un allarme definiti dai casi d'uso\n// UC33.4–UC33.7\n\nexport enum AlarmPriority {\n WHITE = 1,\n GREEN,\n ORANGE,\n RED\n}"], + "mappings": "AAIA,IAAYA,GAAZ,SAAYA,EAAa,CACrBA,OAAAA,EAAAA,EAAA,MAAA,CAAA,EAAA,QACAA,EAAAA,EAAA,MAAA,CAAA,EAAA,QACAA,EAAAA,EAAA,OAAA,CAAA,EAAA,SACAA,EAAAA,EAAA,IAAA,CAAA,EAAA,MAJQA,CAKZ,GALYA,GAAa,CAAA,CAAA", + "names": ["AlarmPriority"] +} diff --git a/frontend/dist-instrumented/dashboard-page.component-EU5YOTYM.css.map b/frontend/dist-instrumented/dashboard-page.component-EU5YOTYM.css.map new file mode 100644 index 00000000..e0268019 --- /dev/null +++ b/frontend/dist-instrumented/dashboard-page.component-EU5YOTYM.css.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["src/app/features/dashboard/components/dashboard-page/dashboard-page.component.css"], + "sourcesContent": [".dashboard-page__cards {\n\tgrid-template-columns: repeat(auto-fit, minmax(16rem, 1fr));\n\tgap: 1rem;\n}\n\n.dashboard-page__card {\n\tmin-height: 9.5rem;\n}\n\n.dashboard-page__card-title {\n\tmargin: 0;\n\tfont-family: var(--care-font-display);\n\tfont-size: 1.03rem;\n\tcolor: var(--care-primary-strong);\n}\n\n.dashboard-page__card-text {\n\tmargin: 0.55rem 0 0;\n\tcolor: var(--care-muted);\n\tfont-size: 0.94rem;\n}\n"], + "mappings": "AAAA,CAAA,sBACC,sBAAA,OAAA,QAAA,CAAA,OAAA,KAAA,CAAA,MACA,IAAA,IACD,CAEA,CAAA,qBACC,WAAA,MACD,CAEA,CAAA,2BATA,OAUC,EACA,YAAA,IAAA,qBACA,UAAA,QACA,MAAA,IAAA,sBACD,CAEA,CAAA,0BAhBA,OAiBC,OAAA,EAAA,EACA,MAAA,IAAA,cACA,UAAA,MACD", + "names": [] +} diff --git a/frontend/dist-instrumented/dashboard.png b/frontend/dist-instrumented/dashboard.png new file mode 100644 index 00000000..11070022 Binary files /dev/null and b/frontend/dist-instrumented/dashboard.png differ diff --git a/frontend/dist-instrumented/device-card.component-FHE2VQ2L.css.map b/frontend/dist-instrumented/device-card.component-FHE2VQ2L.css.map new file mode 100644 index 00000000..745343b0 --- /dev/null +++ b/frontend/dist-instrumented/device-card.component-FHE2VQ2L.css.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["src/app/features/device-interaction/components/device-card/device-card.component.css"], + "sourcesContent": [".device-card {\n display: grid;\n gap: 0.6rem;\n}\n\n.device-card h3,\n.device-card p {\n margin: 0;\n}\n\n.device-card__header {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n gap: 0.65rem;\n}\n\n.device-card h3 {\n font-size: 1.08rem;\n font-family: var(--care-font-display);\n font-weight: 700;\n line-height: 1.25;\n color: #0f172a;\n}\n\n.device-card__meta {\n margin-top: 0.2rem;\n font-size: 0.86rem;\n color: #64748b;\n}\n\n.device-card__status {\n display: inline-flex;\n align-items: center;\n border-radius: 999px;\n padding: 0.25rem 0.55rem;\n font-size: 0.76rem;\n font-weight: 700;\n letter-spacing: 0.06em;\n}\n\n.device-card__status--online {\n border: 1px solid #bbf7d0;\n background: #f0fdf4;\n color: #166534;\n}\n\n.device-card__status--offline {\n border: 1px solid #fecdd3;\n background: #fff1f2;\n color: #9f1239;\n}\n\n.device-card__writes {\n display: grid;\n gap: 0.55rem;\n max-height: clamp(12rem, 42vh, 20rem);\n overflow-y: auto;\n padding-right: 0.2rem;\n}\n\n.device-card__writes::-webkit-scrollbar {\n width: 6px;\n}\n\n.device-card__writes::-webkit-scrollbar-thumb {\n background: #cbd5e1;\n border-radius: 999px;\n}\n\n.device-card__write-row {\n display: grid;\n gap: 0.45rem;\n padding: 0.7rem;\n}\n\n.device-card__write-row label {\n font-size: 0.88rem;\n font-weight: 600;\n color: #334155;\n}\n\n.device-card__write-controls {\n display: flex;\n gap: 0.5rem;\n flex-wrap: wrap;\n align-items: center;\n}\n\n.device-card__write-controls select,\n.device-card__write-controls button {\n flex: 1 1 8rem;\n}\n\n.device-card__write-controls .care-button {\n border: 1px solid rgba(217, 119, 6, 0.36);\n background: linear-gradient(120deg, #fcd34d 0%, #fbbf24 100%);\n color: #1f2937;\n box-shadow: 0 8px 14px rgba(245, 158, 11, 0.24);\n}\n\n.device-card__write-controls .care-button:hover {\n background: rgba(254, 243, 199, 0.75);\n border-color: rgba(245, 158, 11, 0.28);\n}\n\n.device-card__error {\n margin: 0;\n border: 1px solid #fecdd3;\n border-radius: 0.65rem;\n background: #fff1f2;\n color: #be123c;\n font-size: 0.88rem;\n padding: 0.52rem 0.64rem;\n}\n\n.device-card__no-write {\n color: #475569;\n font-size: 0.9rem;\n}\n"], + "mappings": "AAAA,CAAA,YACE,QAAA,KACA,IAAA,KACF,CAEA,CALA,YAKA,IALA,cAAA,OAOE,CACF,CAEA,CAAA,oBACE,QAAA,KACA,gBAAA,cACA,YAAA,WACA,IAAA,MACF,CAEA,CAjBA,YAiBA,GACE,UAAA,QACA,YAAA,IAAA,qBACA,YAAA,IACA,YAAA,KACA,MAAA,OACF,CAEA,CAAA,kBACE,WAAA,MACA,UAAA,OACA,MAAA,OACF,CAEA,CAAA,oBACE,QAAA,YACA,YAAA,OAjCF,cAkCE,MAlCF,QAmCE,OAAA,OACA,UAAA,OACA,YAAA,IACA,eAAA,KACF,CAEA,CAAA,4BACE,OAAA,IAAA,MAAA,QACA,WAAA,QACA,MAAA,OACF,CAEA,CAAA,6BACE,OAAA,IAAA,MAAA,QACA,WAAA,QACA,MAAA,OACF,CAEA,CAAA,oBACE,QAAA,KACA,IAAA,OACA,WAAA,MAAA,KAAA,CAAA,IAAA,CAAA,OACA,WAAA,KACA,cAAA,KACF,CAEA,CARA,mBAQA,oBACE,MAAA,GACF,CAEA,CAZA,mBAYA,0BACE,WAAA,QAlEF,cAmEE,KACF,CAEA,CAAA,uBACE,QAAA,KACA,IAAA,OAxEF,QAyEE,KACF,CAEA,CANA,uBAMA,MACE,UAAA,OACA,YAAA,IACA,MAAA,OACF,CAEA,CAAA,4BACE,QAAA,KACA,IAAA,MACA,UAAA,KACA,YAAA,MACF,CAEA,CAPA,4BAOA,QAPA,mCASE,KAAA,EAAA,EAAA,IACF,CAEA,CAZA,4BAYA,CAAA,YACE,OAAA,IAAA,MAAA,KAAA,GAAA,CAAA,GAAA,CAAA,CAAA,CAAA,KACA,WAAA,gBAAA,MAAA,CAAA,OAAA,CAAA,SACA,MAAA,QACA,WAAA,EAAA,IAAA,KAAA,SACF,CAEA,CAnBA,4BAmBA,CAPA,WAOA,OACE,WAAA,UACA,aAAA,SACF,CAEA,CAAA,mBA1GA,OA2GE,EACA,OAAA,IAAA,MAAA,QA5GF,cA6GE,OACA,WAAA,QACA,MAAA,QACA,UAAA,OAhHF,QAiHE,OAAA,MACF,CAEA,CAAA,sBACE,MAAA,QACA,UAAA,KACF", + "names": [] +} diff --git a/frontend/dist-instrumented/device.png b/frontend/dist-instrumented/device.png new file mode 100644 index 00000000..6de8cedd Binary files /dev/null and b/frontend/dist-instrumented/device.png differ diff --git a/frontend/dist-instrumented/endpoint-table.component-HIVOQXMV.css.map b/frontend/dist-instrumented/endpoint-table.component-HIVOQXMV.css.map new file mode 100644 index 00000000..137d5e02 --- /dev/null +++ b/frontend/dist-instrumented/endpoint-table.component-HIVOQXMV.css.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["src/app/features/device-interaction/components/endpoint-table/endpoint-table.component.css"], + "sourcesContent": [".endpoint-table__groups {\n display: grid;\n gap: 1.35rem;\n}\n\n.endpoint-table__group {\n overflow: hidden;\n border: 1px solid #e2e8f0;\n border-radius: 1rem;\n background: #ffffff;\n box-shadow: 0 1px 2px rgba(15, 23, 42, 0.06);\n}\n\n.endpoint-table__room-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 0.7rem;\n margin-bottom: 0;\n border-bottom: 1px solid #f1f5f9;\n background: #fcd34d;\n padding: 1rem 1.25rem;\n}\n\n.endpoint-table__room-header h3,\n.endpoint-table__room-eyebrow {\n margin: 0;\n}\n\n.endpoint-table__room-eyebrow {\n font-size: 0.72rem;\n font-weight: 700;\n letter-spacing: 0.1em;\n text-transform: uppercase;\n color: #64748b;\n}\n\n.endpoint-table__room-header h3 {\n margin-top: 0.1rem;\n font-size: 0.95rem;\n font-family: var(--care-font-display);\n font-weight: 700;\n line-height: 1.25;\n color: #0f172a;\n}\n\n.endpoint-table__wrapper {\n overflow-x: auto;\n padding: 0;\n -webkit-overflow-scrolling: touch;\n}\n\n.endpoint-table__table {\n width: 100%;\n min-width: 30rem;\n border-collapse: collapse;\n}\n\n.endpoint-table__table thead th {\n text-align: left;\n font-size: 0.69rem;\n font-weight: 600;\n letter-spacing: 0.08em;\n text-transform: uppercase;\n color: #94a3b8;\n padding: 0.75rem 1.25rem;\n border-bottom: 1px solid #f1f5f9;\n}\n\n.endpoint-table__table tbody td {\n padding: 0.75rem 1.25rem;\n vertical-align: middle;\n border-bottom: 1px solid #f8fafc;\n font-size: 0.94rem;\n color: #0f172a;\n}\n\n.endpoint-table__device-cell {\n display: grid;\n gap: 0.14rem;\n}\n\n.endpoint-table__device-meta {\n font-size: 0.76rem;\n color: #64748b;\n letter-spacing: 0.01em;\n}\n\n.endpoint-table__select {\n min-width: 10rem;\n font-size: 1rem;\n}\n\n.endpoint-table__current-value {\n display: inline-flex;\n min-width: 3.5rem;\n justify-content: center;\n border-radius: 999px;\n border: 1px solid #e2e8f0;\n background: #f8fafc;\n padding: 0.16rem 0.55rem;\n font-size: 0.84rem;\n font-weight: 700;\n color: #1f2937;\n}\n\n.endpoint-table__write-button {\n min-height: 2.35rem;\n border: 1px solid rgba(217, 119, 6, 0.36);\n border-radius: 0.62rem;\n background: linear-gradient(120deg, #fcd34d 0%, #fbbf24 100%);\n color: #1f2937;\n font-size: 0.98rem;\n font-weight: 700;\n padding: 0 0.9rem;\n cursor: pointer;\n box-shadow: 0 8px 14px rgba(245, 158, 11, 0.24);\n transition: background-color 140ms ease, border-color 140ms ease;\n}\n\n.endpoint-table__write-button:hover {\n background: rgba(254, 243, 199, 0.75);\n border-color: rgba(245, 158, 11, 0.28);\n}\n\n.endpoint-table__write-button:disabled {\n cursor: not-allowed;\n opacity: 0.7;\n}\n\n.endpoint-table__action-wrap {\n position: relative;\n display: inline-flex;\n align-items: center;\n}\n\n.endpoint-table__feedback-overlay {\n position: absolute;\n right: 0;\n bottom: calc(100% + 0.45rem);\n transform: none;\n border-radius: 999px;\n padding: 0.2rem 0.55rem;\n font-size: 0.82rem;\n font-weight: 700;\n white-space: nowrap;\n text-align: center;\n line-height: 1.2;\n box-shadow: 0 8px 14px -10px rgba(15, 23, 42, 0.55);\n z-index: 2;\n pointer-events: none;\n}\n\n.endpoint-table__feedback-overlay--success {\n border: 1px solid #a7f3d0;\n background: #ecfdf5;\n color: #065f46;\n}\n\n.endpoint-table__feedback-overlay--error {\n border: 1px solid #fecdd3;\n background: #fff1f2;\n color: #be123c;\n}\n\n@media (max-width: 960px) {\n .endpoint-table__table {\n min-width: 32rem;\n }\n}"], + "mappings": "AAAA,CAAA,uBACE,QAAA,KACA,IAAA,OACF,CAEA,CAAA,sBACE,SAAA,OACA,OAAA,IAAA,MAAA,QAPF,cAQE,KACA,WAAA,KACA,WAAA,EAAA,IAAA,IAAA,SACF,CAEA,CAAA,4BACE,QAAA,KACA,YAAA,OACA,gBAAA,cACA,IAAA,MACA,cAAA,EACA,cAAA,IAAA,MAAA,QACA,WAAA,QApBF,QAqBE,KAAA,OACF,CAEA,CAXA,4BAWA,iCAxBA,OA0BE,CACF,CAEA,8BACE,UAAA,OACA,YAAA,IACA,eAAA,KACA,eAAA,UACA,MAAA,OACF,CAEA,CAxBA,4BAwBA,GACE,WAAA,MACA,UAAA,OACA,YAAA,IAAA,qBACA,YAAA,IACA,YAAA,KACA,MAAA,OACF,CAEA,CAAA,wBACE,WAAA,KA/CF,QAgDE,EACA,2BAAA,KACF,CAEA,CAAA,sBACE,MAAA,KACA,UAAA,MACA,gBAAA,QACF,CAEA,CANA,sBAMA,MAAA,GACE,WAAA,KACA,UAAA,OACA,YAAA,IACA,eAAA,MACA,eAAA,UACA,MAAA,QAhEF,QAiEE,OAAA,QACA,cAAA,IAAA,MAAA,OACF,CAEA,CAjBA,sBAiBA,MAAA,GArEA,QAsEE,OAAA,QACA,eAAA,OACA,cAAA,IAAA,MAAA,QACA,UAAA,OACA,MAAA,OACF,CAEA,CAAA,4BACE,QAAA,KACA,IAAA,MACF,CAEA,CAAA,4BACE,UAAA,OACA,MAAA,QACA,eAAA,KACF,CAEA,CAAA,uBACE,UAAA,MACA,UAAA,IACF,CAEA,CAAA,8BACE,QAAA,YACA,UAAA,OACA,gBAAA,OAhGF,cAiGE,MACA,OAAA,IAAA,MAAA,QACA,WAAA,QAnGF,QAoGE,OAAA,OACA,UAAA,OACA,YAAA,IACA,MAAA,OACF,CAEA,CAAA,6BACE,WAAA,QACA,OAAA,IAAA,MAAA,KAAA,GAAA,CAAA,GAAA,CAAA,CAAA,CAAA,KA5GF,cA6GE,OACA,WAAA,gBAAA,MAAA,CAAA,OAAA,CAAA,SACA,MAAA,QACA,UAAA,OACA,YAAA,IAjHF,QAkHE,EAAA,MACA,OAAA,QACA,WAAA,EAAA,IAAA,KAAA,UACA,WAAA,iBAAA,KAAA,IAAA,CAAA,aAAA,KAAA,IACF,CAEA,CAdA,4BAcA,OACE,WAAA,UACA,aAAA,SACF,CAEA,CAnBA,4BAmBA,UACE,OAAA,YACA,QAAA,EACF,CAEA,CAAA,4BACE,SAAA,SACA,QAAA,YACA,YAAA,MACF,CAEA,CAAA,iCACE,SAAA,SACA,MAAA,EACA,OAAA,KAAA,KAAA,EAAA,QACA,UAAA,KA5IF,cA6IE,MA7IF,QA8IE,MAAA,OACA,UAAA,OACA,YAAA,IACA,YAAA,OACA,WAAA,OACA,YAAA,IACA,WAAA,EAAA,IAAA,KAAA,MAAA,UACA,QAAA,EACA,eAAA,IACF,CAEA,CAAA,0CACE,OAAA,IAAA,MAAA,QACA,WAAA,QACA,MAAA,OACF,CAEA,CAAA,wCACE,OAAA,IAAA,MAAA,QACA,WAAA,QACA,MAAA,OACF,CAEA,OAAA,UAAA,OACI,CAlHJ,sBAmHQ,UAAA,KACJ,CACJ", + "names": [] +} diff --git a/frontend/dist-instrumented/entrance-door-card.component-FGNTMRE7.css.map b/frontend/dist-instrumented/entrance-door-card.component-FGNTMRE7.css.map new file mode 100644 index 00000000..3263f14f --- /dev/null +++ b/frontend/dist-instrumented/entrance-door-card.component-FGNTMRE7.css.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["src/app/features/device-interaction/components/entrance-door-card/entrance-door-card.component.css"], + "sourcesContent": [".device-card { border: 1px solid #d8dee3; border-radius: 0.5rem; padding: 0.75rem; display: grid; gap: 0.6rem; }\n.device-card h3, .device-card p { margin: 0; }\n.device-card__actions { display: flex; gap: 0.5rem; flex-wrap: wrap; }\n.device-card__error { color: #a40000; margin: 0; font-size: 0.85rem; }\n"], + "mappings": "AAAA,CAAA,YAAe,OAAA,IAAA,MAAA,QAAf,cAA0C,MAA1C,QAAiE,OAAkB,QAAA,KAAe,IAAA,KAAa,CAC/G,CADA,YACA,GAAA,CADA,YACA,EADA,OACkC,CAAW,CAC7C,CAAA,qBAAwB,QAAA,KAAe,IAAA,MAAa,UAAA,IAAiB,CACrE,CAAA,mBAAsB,MAAA,QAHtB,OAGsC,EAAW,UAAA,MAAoB", + "names": [] +} diff --git a/frontend/dist-instrumented/fall-sensor-card.component-2VJOVEGD.css.map b/frontend/dist-instrumented/fall-sensor-card.component-2VJOVEGD.css.map new file mode 100644 index 00000000..d0c3c769 --- /dev/null +++ b/frontend/dist-instrumented/fall-sensor-card.component-2VJOVEGD.css.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["src/app/features/device-interaction/components/fall-sensor-card/fall-sensor-card.component.css"], + "sourcesContent": [".device-card { border: 1px solid #d8dee3; border-radius: 0.5rem; padding: 0.75rem; display: grid; gap: 0.6rem; }\n.device-card h3, .device-card p { margin: 0; }\n.device-card__actions { display: flex; gap: 0.5rem; flex-wrap: wrap; }\n.device-card__error { color: #a40000; margin: 0; font-size: 0.85rem; }\n"], + "mappings": "AAAA,CAAA,YAAe,OAAA,IAAA,MAAA,QAAf,cAA0C,MAA1C,QAAiE,OAAkB,QAAA,KAAe,IAAA,KAAa,CAC/G,CADA,YACA,GAAA,CADA,YACA,EADA,OACkC,CAAW,CAC7C,CAAA,qBAAwB,QAAA,KAAe,IAAA,MAAa,UAAA,IAAiB,CACrE,CAAA,mBAAsB,MAAA,QAHtB,OAGsC,EAAW,UAAA,MAAoB", + "names": [] +} diff --git a/frontend/dist-instrumented/favicon.ico b/frontend/dist-instrumented/favicon.ico new file mode 100644 index 00000000..57614f9c Binary files /dev/null and b/frontend/dist-instrumented/favicon.ico differ diff --git a/frontend/dist-instrumented/first-access.component-RNKKNA3X.css.map b/frontend/dist-instrumented/first-access.component-RNKKNA3X.css.map new file mode 100644 index 00000000..5a7f41d1 --- /dev/null +++ b/frontend/dist-instrumented/first-access.component-RNKKNA3X.css.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["src/app/features/user-auth/components/first-access/first-access.component.css"], + "sourcesContent": [":host {\n display: block;\n min-height: 100dvh;\n}\n\n.auth-shell {\n --bg: #fef3c7;\n --card: #fffdf8;\n --ink: #1f2933;\n --muted: #5c6470;\n --accent: #fcd34d;\n --accent-strong: #fcd34d;\n --focus: #fcd34d;\n min-height: 100dvh;\n display: grid;\n place-items: center;\n padding: 1.5rem;\n background:\n radial-gradient(circle at 12% 18%, #fde68a 0 8%, transparent 45%),\n radial-gradient(circle at 82% 12%, #fcd34d 0 10%, transparent 48%),\n linear-gradient(140deg, #fff7d1 0%, var(--bg) 46%, #fef3c7 100%);\n position: relative;\n overflow: hidden;\n}\n\n.auth-bg-orb {\n position: absolute;\n width: 28rem;\n height: 28rem;\n border-radius: 9999px;\n opacity: 0.25;\n filter: blur(24px);\n pointer-events: none;\n}\n\n.auth-bg-orb-left {\n background: #fcd34d;\n left: -9rem;\n bottom: -8rem;\n}\n\n.auth-bg-orb-right {\n background: #fcd34d;\n right: -10rem;\n top: -8rem;\n}\n\n.auth-card {\n width: min(92vw, 32rem);\n background: color-mix(in srgb, var(--card) 88%, white 12%);\n border: 1px solid color-mix(in srgb, var(--ink) 18%, transparent 82%);\n border-radius: 1.25rem;\n box-shadow:\n 0 24px 54px rgba(17, 24, 39, 0.18),\n 0 3px 12px rgba(252, 211, 77, 0.4);\n padding: 1.9rem;\n position: relative;\n z-index: 1;\n animation: card-enter 260ms ease-out;\n}\n\n.auth-kicker {\n margin: 0;\n font: 700 0.72rem/1.1 \"Avenir Next\", \"Gill Sans\", sans-serif;\n letter-spacing: 0.13em;\n text-transform: uppercase;\n color: var(--accent);\n}\n\nh1 {\n margin: 0.45rem 0 0;\n font: 700 clamp(1.55rem, 2.7vw, 2rem)/1.12 \"Avenir Next\", \"Trebuchet MS\", sans-serif;\n color: var(--ink);\n}\n\n.auth-subtitle {\n margin: 0.6rem 0 1rem;\n color: var(--muted);\n font: 500 0.95rem/1.45 \"Avenir Next\", \"Gill Sans\", sans-serif;\n}\n\n.auth-hints {\n margin: 0 0 1.2rem;\n padding: 0 0 0 1.15rem;\n display: grid;\n gap: 0.45rem;\n color: #32404d;\n font: 500 0.88rem/1.45 \"Avenir Next\", \"Gill Sans\", sans-serif;\n}\n\n.auth-form {\n display: grid;\n gap: 0.72rem;\n}\n\nlabel {\n font: 600 0.82rem/1.2 \"Avenir Next\", \"Gill Sans\", sans-serif;\n color: #2e3a46;\n}\n\ninput {\n width: 100%;\n border-radius: 0.75rem;\n border: 1px solid #b7c3d1;\n background: #ffffff;\n padding: 0.74rem 0.86rem;\n color: #111827;\n font: 500 0.94rem/1.2 \"Avenir Next\", \"Gill Sans\", sans-serif;\n transition: border-color 140ms ease, box-shadow 140ms ease;\n}\n\ninput::placeholder {\n color: #7f8b97;\n}\n\ninput:focus {\n outline: none;\n border-color: var(--accent);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--focus) 35%, transparent 65%);\n}\n\ninput.ng-invalid.ng-touched {\n border-color: #b91c1c;\n}\n\n.auth-field-error {\n margin: -0.25rem 0 0;\n color: #b91c1c;\n font: 600 0.82rem/1.35 \"Avenir Next\", \"Gill Sans\", sans-serif;\n}\n\n.auth-submit {\n border: 0;\n border-radius: 0.75rem;\n padding: 0.78rem 1rem;\n margin-top: 0.4rem;\n background: linear-gradient(120deg, var(--accent) 0%, var(--accent-strong) 100%);\n color: #1f2933;\n font: 700 0.95rem/1 \"Avenir Next\", \"Trebuchet MS\", sans-serif;\n cursor: pointer;\n transition: transform 120ms ease, filter 140ms ease;\n}\n\n.auth-submit:hover:not(:disabled) {\n transform: translateY(-1px);\n filter: brightness(1.05);\n}\n\n.auth-submit:disabled {\n opacity: 0.68;\n cursor: not-allowed;\n}\n\n.auth-error {\n margin: 0.35rem 0 0;\n color: #b91c1c;\n font: 600 0.82rem/1.35 \"Avenir Next\", \"Gill Sans\", sans-serif;\n}\n\n@keyframes card-enter {\n from {\n opacity: 0;\n transform: translateY(8px) scale(0.985);\n }\n\n to {\n opacity: 1;\n transform: translateY(0) scale(1);\n }\n}\n\n@media (max-width: 520px) {\n .auth-card {\n padding: 1.35rem;\n border-radius: 1rem;\n }\n\n .auth-subtitle {\n font-size: 0.9rem;\n }\n\n .auth-hints {\n font-size: 0.84rem;\n }\n}"], + "mappings": "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", + "names": [] +} diff --git a/frontend/dist-instrumented/index.html b/frontend/dist-instrumented/index.html new file mode 100644 index 00000000..d810d90c --- /dev/null +++ b/frontend/dist-instrumented/index.html @@ -0,0 +1,13 @@ + + + + + View4Life + + + + + + + + diff --git a/frontend/dist-instrumented/light-card.component-DO6QMRSS.css.map b/frontend/dist-instrumented/light-card.component-DO6QMRSS.css.map new file mode 100644 index 00000000..98a579e5 --- /dev/null +++ b/frontend/dist-instrumented/light-card.component-DO6QMRSS.css.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["src/app/features/device-interaction/components/light-card/light-card.component.css"], + "sourcesContent": [".device-card { border: 1px solid #d8dee3; border-radius: 0.5rem; padding: 0.75rem; display: grid; gap: 0.6rem; }\n.device-card h3, .device-card p { margin: 0; }\n.device-card__actions { display: flex; gap: 0.5rem; flex-wrap: wrap; }\n.device-card__error { color: #a40000; margin: 0; font-size: 0.85rem; }\n"], + "mappings": "AAAA,CAAA,YAAe,OAAA,IAAA,MAAA,QAAf,cAA0C,MAA1C,QAAiE,OAAkB,QAAA,KAAe,IAAA,KAAa,CAC/G,CADA,YACA,GAAA,CADA,YACA,EADA,OACkC,CAAW,CAC7C,CAAA,qBAAwB,QAAA,KAAe,IAAA,MAAa,UAAA,IAAiB,CACrE,CAAA,mBAAsB,MAAA,QAHtB,OAGsC,EAAW,UAAA,MAAoB", + "names": [] +} diff --git a/frontend/dist-instrumented/login.component-EPBQEVJA.css.map b/frontend/dist-instrumented/login.component-EPBQEVJA.css.map new file mode 100644 index 00000000..8bd0b260 --- /dev/null +++ b/frontend/dist-instrumented/login.component-EPBQEVJA.css.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["src/app/features/user-auth/components/login/login.component.css"], + "sourcesContent": [":host {\n display: block;\n min-height: 100dvh;\n}\n\n.auth-shell {\n --bg: #fef3c7;\n --card: #fffdf8;\n --ink: #1f2933;\n --muted: #5c6470;\n --accent: #fcd34d;\n --accent-strong: #fcd34d;\n --focus: #fcd34d;\n min-height: 100dvh;\n display: grid;\n place-items: center;\n padding: 1.5rem;\n background:\n radial-gradient(circle at 12% 18%, #fde68a 0 8%, transparent 45%),\n radial-gradient(circle at 82% 12%, #fcd34d 0 10%, transparent 48%),\n linear-gradient(140deg, #fff7d1 0%, var(--bg) 46%, #fef3c7 100%);\n position: relative;\n overflow: hidden;\n}\n\n.auth-bg-orb {\n position: absolute;\n width: 28rem;\n height: 28rem;\n border-radius: 9999px;\n opacity: 0.25;\n filter: blur(24px);\n pointer-events: none;\n}\n\n.auth-bg-orb-left {\n background: #fcd34d;\n left: -9rem;\n bottom: -8rem;\n}\n\n.auth-bg-orb-right {\n background: #fcd34d;\n right: -10rem;\n top: -8rem;\n}\n\n.auth-card {\n width: min(92vw, 28rem);\n background: color-mix(in srgb, var(--card) 88%, white 12%);\n border: 1px solid color-mix(in srgb, var(--ink) 18%, transparent 82%);\n border-radius: 1.25rem;\n box-shadow:\n 0 24px 54px rgba(17, 24, 39, 0.18),\n 0 3px 12px rgba(252, 211, 77, 0.4);\n padding: 1.9rem;\n position: relative;\n z-index: 1;\n animation: card-enter 260ms ease-out;\n}\n\n.auth-kicker {\n margin: 0;\n font: 700 0.72rem/1.1 \"Avenir Next\", \"Gill Sans\", sans-serif;\n letter-spacing: 0.13em;\n text-transform: uppercase;\n color: var(--accent);\n}\n\nh1 {\n margin: 0.45rem 0 0;\n font: 700 clamp(1.55rem, 2.7vw, 2rem)/1.12 \"Avenir Next\", \"Trebuchet MS\", sans-serif;\n color: var(--ink);\n}\n\n.auth-subtitle {\n margin: 0.6rem 0 1.35rem;\n color: var(--muted);\n font: 500 0.95rem/1.45 \"Avenir Next\", \"Gill Sans\", sans-serif;\n}\n\n.auth-form {\n display: grid;\n gap: 0.72rem;\n}\n\nlabel {\n font: 600 0.82rem/1.2 \"Avenir Next\", \"Gill Sans\", sans-serif;\n color: #2e3a46;\n}\n\ninput {\n width: 100%;\n border-radius: 0.75rem;\n border: 1px solid #b7c3d1;\n background: #ffffff;\n padding: 0.74rem 0.86rem;\n color: #111827;\n font: 500 0.94rem/1.2 \"Avenir Next\", \"Gill Sans\", sans-serif;\n transition: border-color 140ms ease, box-shadow 140ms ease;\n}\n\ninput::placeholder {\n color: #7f8b97;\n}\n\ninput:focus {\n outline: none;\n border-color: var(--accent);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--focus) 35%, transparent 65%);\n}\n\ninput.ng-invalid.ng-touched {\n border-color: #b91c1c;\n}\n\n.auth-field-error {\n margin: -0.25rem 0 0;\n color: #b91c1c;\n font: 600 0.82rem/1.35 \"Avenir Next\", \"Gill Sans\", sans-serif;\n}\n\n.auth-submit {\n border: 0;\n border-radius: 0.75rem;\n padding: 0.78rem 1rem;\n margin-top: 0.4rem;\n background: linear-gradient(120deg, var(--accent) 0%, var(--accent-strong) 100%);\n color: #1f2933;\n font: 700 0.95rem/1 \"Avenir Next\", \"Trebuchet MS\", sans-serif;\n cursor: pointer;\n transition: transform 120ms ease, filter 140ms ease;\n}\n\n.auth-submit:hover:not(:disabled) {\n transform: translateY(-1px);\n filter: brightness(1.05);\n}\n\n.auth-submit:disabled {\n opacity: 0.68;\n cursor: not-allowed;\n}\n\n.auth-error {\n margin: 0.35rem 0 0;\n color: #b91c1c;\n font: 600 0.82rem/1.35 \"Avenir Next\", \"Gill Sans\", sans-serif;\n}\n\n@keyframes card-enter {\n from {\n opacity: 0;\n transform: translateY(8px) scale(0.985);\n }\n\n to {\n opacity: 1;\n transform: translateY(0) scale(1);\n }\n}\n\n@media (max-width: 520px) {\n .auth-card {\n padding: 1.35rem;\n border-radius: 1rem;\n }\n\n .auth-subtitle {\n font-size: 0.9rem;\n }\n}"], + "mappings": "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", + "names": [] +} diff --git a/frontend/dist-instrumented/logo.png b/frontend/dist-instrumented/logo.png new file mode 100644 index 00000000..6bd37315 Binary files /dev/null and b/frontend/dist-instrumented/logo.png differ diff --git a/frontend/dist-instrumented/logout.png b/frontend/dist-instrumented/logout.png new file mode 100644 index 00000000..afc2e901 Binary files /dev/null and b/frontend/dist-instrumented/logout.png differ diff --git a/frontend/dist-instrumented/main-FN42ADHL.js b/frontend/dist-instrumented/main-FN42ADHL.js new file mode 100644 index 00000000..3d2ba9a4 --- /dev/null +++ b/frontend/dist-instrumented/main-FN42ADHL.js @@ -0,0 +1,3 @@ +function cov_26i8p3pfyi(){var path="/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/main-FN42ADHL.js";var hash="b24424e240b2af38f8dd6191a59f9b60e9821ce8";var global=new Function("return this")();var gcv="__coverage__";var coverageData={path:"/home/francesco/Desktop/swe/MVP/frontend/dist-instrumented/main-FN42ADHL.js",statementMap:{"0":{start:{line:1,column:669},end:{line:1,column:1049}},"1":{start:{line:1,column:700},end:{line:1,column:757}},"2":{start:{line:1,column:738},end:{line:1,column:756}},"3":{start:{line:1,column:850},end:{line:1,column:918}},"4":{start:{line:1,column:888},end:{line:1,column:917}},"5":{start:{line:1,column:962},end:{line:1,column:1021}},"6":{start:{line:1,column:1000},end:{line:1,column:1020}},"7":{start:{line:1,column:1056},end:{line:1,column:1060}},"8":{start:{line:1,column:1063},end:{line:1,column:1305}},"9":{start:{line:1,column:1077},end:{line:1,column:1081}},"10":{start:{line:1,column:1084},end:{line:1,column:1096}},"11":{start:{line:1,column:1099},end:{line:1,column:1119}},"12":{start:{line:1,column:1120},end:{line:1,column:1304}},"13":{start:{line:1,column:1142},end:{line:1,column:1302}},"14":{start:{line:1,column:1192},end:{line:1,column:1193}},"15":{start:{line:1,column:1240},end:{line:1,column:1246}},"16":{start:{line:1,column:1262},end:{line:1,column:1271}},"17":{start:{line:1,column:1279},end:{line:1,column:1298}},"18":{start:{line:1,column:1296},end:{line:1,column:1297}},"19":{start:{line:1,column:1322},end:{line:1,column:1380}},"20":{start:{line:1,column:1395},end:{line:1,column:1442}},"21":{start:{line:1,column:1457},end:{line:1,column:1515}},"22":{start:{line:1,column:1522},end:{line:1,column:1555}},"23":{start:{line:1,column:1562},end:{line:1,column:1637}},"24":{start:{line:1,column:1574},end:{line:1,column:1586}},"25":{start:{line:1,column:1587},end:{line:1,column:1625}},"26":{start:{line:1,column:1609},end:{line:1,column:1625}},"27":{start:{line:1,column:1625},end:{line:1,column:1633}},"28":{start:{line:1,column:1640},end:{line:1,column:1731}},"29":{start:{line:1,column:1708},end:{line:1,column:1727}},"30":{start:{line:1,column:1738},end:{line:1,column:1983}},"31":{start:{line:1,column:1758},end:{line:1,column:1771}},"32":{start:{line:1,column:1789},end:{line:1,column:1818}},"33":{start:{line:1,column:1801},end:{line:1,column:1817}},"34":{start:{line:1,column:1836},end:{line:1,column:1970}},"35":{start:{line:1,column:1909},end:{line:1,column:1934}},"36":{start:{line:1,column:1971},end:{line:1,column:1979}},"37":{start:{line:1,column:1984},end:{line:1,column:2018}},"38":{start:{line:1,column:2000},end:{line:1,column:2016}}},fnMap:{"0":{name:"(anonymous_0)",decl:{start:{line:1,column:696},end:{line:1,column:697}},loc:{start:{line:1,column:700},end:{line:1,column:757}},line:1},"1":{name:"(anonymous_1)",decl:{start:{line:1,column:735},end:{line:1,column:736}},loc:{start:{line:1,column:738},end:{line:1,column:756}},line:1},"2":{name:"(anonymous_2)",decl:{start:{line:1,column:846},end:{line:1,column:847}},loc:{start:{line:1,column:850},end:{line:1,column:918}},line:1},"3":{name:"(anonymous_3)",decl:{start:{line:1,column:885},end:{line:1,column:886}},loc:{start:{line:1,column:888},end:{line:1,column:917}},line:1},"4":{name:"(anonymous_4)",decl:{start:{line:1,column:958},end:{line:1,column:959}},loc:{start:{line:1,column:962},end:{line:1,column:1021}},line:1},"5":{name:"(anonymous_5)",decl:{start:{line:1,column:997},end:{line:1,column:998}},loc:{start:{line:1,column:1000},end:{line:1,column:1020}},line:1},"6":{name:"(anonymous_6)",decl:{start:{line:1,column:1063},end:{line:1,column:1064}},loc:{start:{line:1,column:1070},end:{line:1,column:1305}},line:1},"7":{name:"(anonymous_7)",decl:{start:{line:1,column:1139},end:{line:1,column:1140}},loc:{start:{line:1,column:1142},end:{line:1,column:1302}},line:1},"8":{name:"(anonymous_8)",decl:{start:{line:1,column:1188},end:{line:1,column:1189}},loc:{start:{line:1,column:1192},end:{line:1,column:1193}},line:1},"9":{name:"(anonymous_9)",decl:{start:{line:1,column:1235},end:{line:1,column:1236}},loc:{start:{line:1,column:1239},end:{line:1,column:1247}},line:1},"10":{name:"(anonymous_10)",decl:{start:{line:1,column:1259},end:{line:1,column:1260}},loc:{start:{line:1,column:1262},end:{line:1,column:1271}},line:1},"11":{name:"(anonymous_11)",decl:{start:{line:1,column:1275},end:{line:1,column:1276}},loc:{start:{line:1,column:1279},end:{line:1,column:1298}},line:1},"12":{name:"(anonymous_12)",decl:{start:{line:1,column:1292},end:{line:1,column:1293}},loc:{start:{line:1,column:1296},end:{line:1,column:1297}},line:1},"13":{name:"x",decl:{start:{line:1,column:1315},end:{line:1,column:1316}},loc:{start:{line:1,column:1321},end:{line:1,column:1381}},line:1},"14":{name:"G",decl:{start:{line:1,column:1390},end:{line:1,column:1391}},loc:{start:{line:1,column:1394},end:{line:1,column:1443}},line:1},"15":{name:"L",decl:{start:{line:1,column:1452},end:{line:1,column:1453}},loc:{start:{line:1,column:1456},end:{line:1,column:1516}},line:1},"16":{name:"(anonymous_16)",decl:{start:{line:1,column:1563},end:{line:1,column:1564}},loc:{start:{line:1,column:1567},end:{line:1,column:1634}},line:1},"17":{name:"(anonymous_17)",decl:{start:{line:1,column:1703},end:{line:1,column:1704}},loc:{start:{line:1,column:1707},end:{line:1,column:1728}},line:1},"18":{name:"(anonymous_18)",decl:{start:{line:1,column:1739},end:{line:1,column:1740}},loc:{start:{line:1,column:1743},end:{line:1,column:1980}},line:1},"19":{name:"(anonymous_19)",decl:{start:{line:1,column:1789},end:{line:1,column:1790}},loc:{start:{line:1,column:1800},end:{line:1,column:1818}},line:1},"20":{name:"(anonymous_20)",decl:{start:{line:1,column:1895},end:{line:1,column:1896}},loc:{start:{line:1,column:1908},end:{line:1,column:1935}},line:1},"21":{name:"(anonymous_21)",decl:{start:{line:1,column:1997},end:{line:1,column:1998}},loc:{start:{line:1,column:2000},end:{line:1,column:2016}},line:1}},branchMap:{"0":{loc:{start:{line:1,column:1099},end:{line:1,column:1119}},type:"cond-expr",locations:[{start:{line:1,column:1111},end:{line:1,column:1117}},{start:{line:1,column:1118},end:{line:1,column:1119}}],line:1},"1":{loc:{start:{line:1,column:1099},end:{line:1,column:1110}},type:"binary-expr",locations:[{start:{line:1,column:1099},end:{line:1,column:1100}},{start:{line:1,column:1102},end:{line:1,column:1110}}],line:1},"2":{loc:{start:{line:1,column:1142},end:{line:1,column:1302}},type:"cond-expr",locations:[{start:{line:1,column:1186},end:{line:1,column:1194}},{start:{line:1,column:1196},end:{line:1,column:1301}}],line:1},"3":{loc:{start:{line:1,column:1142},end:{line:1,column:1185}},type:"binary-expr",locations:[{start:{line:1,column:1142},end:{line:1,column:1159}},{start:{line:1,column:1161},end:{line:1,column:1175}},{start:{line:1,column:1177},end:{line:1,column:1185}}],line:1},"4":{loc:{start:{line:1,column:1812},end:{line:1,column:1816}},type:"binary-expr",locations:[{start:{line:1,column:1812},end:{line:1,column:1813}},{start:{line:1,column:1815},end:{line:1,column:1816}}],line:1},"5":{loc:{start:{line:1,column:1909},end:{line:1,column:1934}},type:"binary-expr",locations:[{start:{line:1,column:1909},end:{line:1,column:1912}},{start:{line:1,column:1914},end:{line:1,column:1934}}],line:1}},s:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0},f:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0},b:{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0,0],"4":[0,0],"5":[0,0]},inputSourceMap:{version:3,sources:["src/app/app.routes.ts","src/app/core/interceptors/auth.interceptor.ts","src/environments/environment.ts","src/app/app.config.ts","src/app/app.ts","src/app/app.html","src/main.ts"],sourcesContent:["import { Routes } from '@angular/router';\nimport { authGuard } from './core/guards/auth.guard';\nimport { roleGuard } from './core/guards/role.guard';\nimport { UserRole } from './core/models/user-role.enum';\n\nexport const routes: Routes = [\n\t{\n\t\tpath: 'auth',\n\t\tloadChildren: () => import('./features/user-auth/user-auth.routes').then((m) => m.USER_AUTH_ROUTES)\n\t},\n\t{\n\t\tpath: 'vimar-link',\n\t\tcanActivate: [authGuard, roleGuard],\n\t\tdata: { requiredRole: UserRole.AMMINISTRATORE },\n\t\tloadChildren: () =>\n\t\t\timport('./features/my-vimar-integration/my-vimar-integration.routes').then((m) => m.MY_VIMAR_INTEGRATION_ROUTES)\n\t},\n\t{\n\t\tpath: '',\n\t\tcanActivate: [authGuard],\n\t\tloadChildren: () =>\n\t\t\timport('./features/main-layout/main-layout.routes').then((m) => m.MAIN_LAYOUT_ROUTES)\n\t},\n\t{\n\t\tpath: '**',\n\t\tredirectTo: ''\n\t}\n];\n","import { HttpErrorResponse, HttpInterceptorFn, HttpRequest } from '@angular/common/http';\nimport { inject } from '@angular/core';\nimport { Observable, catchError, finalize, shareReplay, switchMap, throwError } from 'rxjs';\nimport { InternalAuthService } from '../services/internal-auth.service';\n\nlet refreshInFlight$: Observable | null = null;\n\nexport const authInterceptor: HttpInterceptorFn = (req, next) => {\n\tconst authService = inject(InternalAuthService);\n\tconst token = authService.getToken();\n\n\tconst request = token && shouldAttachAuthHeader(req.url) ? withAuthorization(req, token) : req;\n\n\treturn next(request).pipe(\n\t\tcatchError((error: unknown) => {\n\t\t\tif (!(error instanceof HttpErrorResponse) ||\n\t\t\t\terror.status !== 401 ||\n\t\t\t\tshouldSkipRefresh(req.url)\n\t\t\t) {\n\t\t\t\treturn throwError(() => error);\n\t\t\t}\n\n\t\t\trefreshInFlight$ ??= authService.refreshAccessToken().pipe(\n\t\t\t\tshareReplay(1),\n\t\t\t\tfinalize(() => {\n\t\t\t\t\trefreshInFlight$ = null;\n\t\t\t\t})\n\t\t\t);\n\n\t\t\treturn refreshInFlight$.pipe(\n\t\t\t\tswitchMap((newToken) => next(withAuthorization(req, newToken))),\n\t\t\t\tcatchError((refreshError: unknown) => {\n\t\t\t\t\tauthService.logout();\n\t\t\t\t\treturn throwError(() => refreshError);\n\t\t\t\t})\n\t\t\t);\n\t\t})\n\t);\n};\n\nfunction withAuthorization(req: HttpRequest, token: string): HttpRequest {\n\treturn req.clone({\n\t\tsetHeaders: {\n\t\t\tAuthorization: `Bearer ${token}`,\n\t\t},\n\t});\n}\n\n\nfunction shouldAttachAuthHeader(url: string): boolean {\n\treturn !/\\/auth\\/(login|refresh|logout)/.test(url);\n}\n\nfunction shouldSkipRefresh(url: string): boolean {\n\treturn /\\/auth\\/(login|refresh|first-login|logout)/.test(url);\n}","export const environment = {\n production: true,\n apiBaseUrl: '/api',\n} as const;\n","import { provideHttpClient, withInterceptors } from '@angular/common/http';\nimport {\n ApplicationConfig,\n inject,\n provideAppInitializer,\n provideBrowserGlobalErrorListeners,\n} from '@angular/core';\nimport { provideRouter } from '@angular/router';\nimport { EventSubscriptionService } from './core/alarm/services/event-subscription.service';\n\nimport { routes } from './app.routes';\nimport { API_BASE_URL } from './core/tokens/api-base-url.token';\nimport { authInterceptor } from './core/interceptors/auth.interceptor';\nimport { environment } from '../environments/environment';\n\nconst apiBaseUrl = (() => {\n let normalized: string = environment.apiBaseUrl;\n while (normalized.endsWith('/')) {\n normalized = normalized.slice(0, -1);\n }\n return normalized;\n})();\n\nimport { provideCharts, withDefaultRegisterables } from 'ng2-charts';\n\nexport const appConfig: ApplicationConfig = {\n providers: [\n provideBrowserGlobalErrorListeners(),\n provideRouter(routes),\n provideCharts(withDefaultRegisterables()),\n provideHttpClient(withInterceptors([authInterceptor])),\n { provide: API_BASE_URL, useValue: apiBaseUrl },\n provideAppInitializer(() => {\n inject(EventSubscriptionService).initialize([]);\n }),\n ]\n};\n\n\n","import { Component, signal } from '@angular/core';\nimport { RouterOutlet } from '@angular/router';\n\n@Component({\n selector: 'app-root',\n imports: [RouterOutlet],\n templateUrl: './app.html',\n styleUrl: './app.css'\n})\nexport class App {\n protected readonly title = signal('frontend');\n}\n","\n","import { bootstrapApplication } from '@angular/platform-browser';\nimport { appConfig } from './app/app.config';\nimport { App } from './app/app';\n\nbootstrapApplication(App, appConfig)\n .catch((err) => console.error(err));\n"],mappings:"upBAKO,IAAMA,EAAiB,CAC7B,CACCC,KAAM,OACNC,aAAcA,IAAM,OAAO,qBAAuC,EAAEC,KAAMC,GAAMA,EAAEC,gBAAgB,GAEnG,CACCJ,KAAM,aACNK,YAAa,CAACC,EAAWC,CAAS,EAClCC,KAAM,CAAEC,aAAcC,EAASC,cAAc,EAC7CV,aAAcA,IACb,OAAO,qBAA6D,EAAEC,KAAMC,GAAMA,EAAES,2BAA2B,GAEjH,CACCZ,KAAM,GACNK,YAAa,CAACC,CAAS,EACvBL,aAAcA,IACb,OAAO,qBAA2C,EAAEC,KAAMC,GAAMA,EAAEU,kBAAkB,GAEtF,CACCb,KAAM,KACNc,WAAY,GACZ,ECrBF,IAAIC,EAA8C,KAErCC,EAAqCA,CAACC,EAAKC,IAAQ,CAC/D,IAAMC,EAAcC,EAAOC,CAAmB,EACxCC,EAAQH,EAAYI,SAAQ,EAE5BC,EAAUF,GAASG,EAAuBR,EAAIS,GAAG,EAAIC,EAAkBV,EAAKK,CAAK,EAAIL,EAE3F,OAAOC,EAAKM,CAAO,EAAEI,KACpBC,EAAYC,GACP,EAAEA,aAAiBC,IACtBD,EAAME,SAAW,KACjBC,EAAkBhB,EAAIS,GAAG,EAElBQ,EAAW,IAAMJ,CAAK,GAG9Bf,IAAqBI,EAAYgB,mBAAkB,EAAGP,KACrDQ,EAAY,CAAC,EACbC,EAAS,IAAK,CACbtB,EAAmB,IACpB,CAAC,CAAC,EAGIA,EAAiBa,KACvBU,EAAWC,GAAarB,EAAKS,EAAkBV,EAAKsB,CAAQ,CAAC,CAAC,EAC9DV,EAAYW,IACXrB,EAAYsB,OAAM,EACXP,EAAW,IAAMM,CAAY,EACpC,CAAC,EAEH,CAAC,CAEJ,EAEA,SAASb,EAAkBV,EAA2BK,EAAa,CAClE,OAAOL,EAAIyB,MAAM,CAChBC,WAAY,CACXC,cAAe,UAAUtB,CAAK,IAE/B,CACF,CAGA,SAASG,EAAuBC,EAAW,CAC1C,MAAO,CAAC,iCAAiCmB,KAAKnB,CAAG,CAClD,CAEA,SAASO,EAAkBP,EAAW,CACrC,MAAO,6CAA6CmB,KAAKnB,CAAG,CAC7D,CCvDO,IAAMoB,EAAc,CACzBC,WAAY,GACZC,WAAY,QCad,IAAMC,GAAc,IAAK,CACvB,IAAIC,EAAqBC,EAAYF,WACrC,KAAOC,EAAWE,SAAS,GAAG,GAC5BF,EAAaA,EAAWG,MAAM,EAAG,EAAE,EAErC,OAAOH,CACT,GAAE,EAIWI,EAA+B,CAC1CC,UAAW,CACTC,EAAkC,EAClCC,EAAcC,CAAM,EACpBC,EAAcC,EAAwB,CAAE,EACxCC,EAAkBC,EAAiB,CAACC,CAAe,CAAC,CAAC,EACrD,CAAEC,QAASC,EAAcC,SAAUjB,CAAU,EAC7CkB,EAAsB,IAAK,CACzBC,EAAOC,CAAwB,EAAEC,WAAW,CAAA,CAAE,CAChD,CAAC,CAAC,GCzBN,IAAaC,GAAG,IAAA,CAAV,MAAOA,CAAG,CACKC,MAAQC,EAAO,UAAU,6CADjCF,EAAG,2BAAHA,EAAGG,UAAA,CAAA,CAAA,UAAA,CAAA,EAAAC,MAAA,EAAAC,KAAA,EAAAC,SAAA,SAAAC,EAAAC,EAAA,CAAAD,EAAA,GCThBE,EAAA,EAAA,eAAA,iBDKYC,CAAY,EAAAC,cAAA,CAAA,CAAA,SAIXX,CAAG,GAAA,EELhBY,EAAqBC,EAAKC,CAAS,EAChCC,MAAOC,GAAQC,QAAQC,MAAMF,CAAG,CAAC",names:["routes","path","loadChildren","then","m","USER_AUTH_ROUTES","canActivate","authGuard","roleGuard","data","requiredRole","UserRole","AMMINISTRATORE","MY_VIMAR_INTEGRATION_ROUTES","MAIN_LAYOUT_ROUTES","redirectTo","refreshInFlight$","authInterceptor","req","next","authService","inject","InternalAuthService","token","getToken","request","shouldAttachAuthHeader","url","withAuthorization","pipe","catchError","error","HttpErrorResponse","status","shouldSkipRefresh","throwError","refreshAccessToken","shareReplay","finalize","switchMap","newToken","refreshError","logout","clone","setHeaders","Authorization","test","environment","production","apiBaseUrl","apiBaseUrl","normalized","environment","endsWith","slice","appConfig","providers","provideBrowserGlobalErrorListeners","provideRouter","routes","provideCharts","withDefaultRegisterables","provideHttpClient","withInterceptors","authInterceptor","provide","API_BASE_URL","useValue","provideAppInitializer","inject","EventSubscriptionService","initialize","App","title","signal","selectors","decls","vars","template","rf","ctx","\u0275\u0275element","RouterOutlet","encapsulation","bootstrapApplication","App","appConfig","catch","err","console","error"]},_coverageSchema:"1a1c01bbd47fc00a2c39e90264f33305004495a9",hash:"b24424e240b2af38f8dd6191a59f9b60e9821ce8"};var coverage=global[gcv]||(global[gcv]={});if(!coverage[path]||coverage[path].hash!==hash){coverage[path]=coverageData;}var actualCoverage=coverage[path];{// @ts-ignore +cov_26i8p3pfyi=function(){return actualCoverage;};}return actualCoverage;}cov_26i8p3pfyi();import{a as z}from"./chunk-KVSAOLHG.js";import{a as O}from"./chunk-6R7YSGCL.js";import"./chunk-666MVPNS.js";import"./chunk-WCZEJQCH.js";import"./chunk-EZ7WFT6U.js";import{a as l}from"./chunk-K2WBT5ZC.js";import{a as I,d as U,h as C}from"./chunk-FYGTVJAL.js";import"./chunk-CFHT7CZE.js";import{a as B,b}from"./chunk-UE5BCHDC.js";import"./chunk-CX4DL26R.js";import"./chunk-ZZLQRDHJ.js";import{a as _,b as w}from"./chunk-65RKWSY3.js";import{a as T,c as E,d as S,e as M}from"./chunk-2S5V5XEE.js";import"./chunk-F6OGAIBI.js";import{A as c,D as f,F as h,Ka as v,Q as i,Ta as R,fa as d,fb as g,ga as A,i as a,w as s}from"./chunk-RYTNMYZW.js";import"./chunk-VCZGUBMY.js";var k=(cov_26i8p3pfyi().s[0]++,[{path:"auth",loadChildren:()=>{cov_26i8p3pfyi().f[0]++;cov_26i8p3pfyi().s[1]++;return import("./chunk-55FHIJXG.js").then(t=>{cov_26i8p3pfyi().f[1]++;cov_26i8p3pfyi().s[2]++;return t.USER_AUTH_ROUTES;});}},{path:"vimar-link",canActivate:[l,z],data:{requiredRole:_.AMMINISTRATORE},loadChildren:()=>{cov_26i8p3pfyi().f[2]++;cov_26i8p3pfyi().s[3]++;return import("./chunk-SEVJ5JBD.js").then(t=>{cov_26i8p3pfyi().f[3]++;cov_26i8p3pfyi().s[4]++;return t.MY_VIMAR_INTEGRATION_ROUTES;});}},{path:"",canActivate:[l],loadChildren:()=>{cov_26i8p3pfyi().f[4]++;cov_26i8p3pfyi().s[5]++;return import("./chunk-UEYMRICI.js").then(t=>{cov_26i8p3pfyi().f[5]++;cov_26i8p3pfyi().s[6]++;return t.MAIN_LAYOUT_ROUTES;});}},{path:"**",redirectTo:""}]);cov_26i8p3pfyi().s[8]++;var m=(cov_26i8p3pfyi().s[7]++,null),H=(t,o)=>{cov_26i8p3pfyi().f[6]++;let e=(cov_26i8p3pfyi().s[9]++,i(w)),r=(cov_26i8p3pfyi().s[10]++,e.getToken()),u=(cov_26i8p3pfyi().s[11]++,(cov_26i8p3pfyi().b[1][0]++,r)&&(cov_26i8p3pfyi().b[1][1]++,G(t.url))?(cov_26i8p3pfyi().b[0][0]++,x(t,r)):(cov_26i8p3pfyi().b[0][1]++,t));cov_26i8p3pfyi().s[12]++;return o(u).pipe(s(n=>{cov_26i8p3pfyi().f[7]++;cov_26i8p3pfyi().s[13]++;return(cov_26i8p3pfyi().b[3][0]++,!(n instanceof T))||(cov_26i8p3pfyi().b[3][1]++,n.status!==401)||(cov_26i8p3pfyi().b[3][2]++,L(t.url))?(cov_26i8p3pfyi().b[2][0]++,a(()=>{cov_26i8p3pfyi().f[8]++;cov_26i8p3pfyi().s[14]++;return n;})):(cov_26i8p3pfyi().b[2][1]++,m??=e.refreshAccessToken().pipe(f(1),c(()=>{cov_26i8p3pfyi().f[9]++;cov_26i8p3pfyi().s[15]++;m=null;})),m.pipe(h(p=>{cov_26i8p3pfyi().f[10]++;cov_26i8p3pfyi().s[16]++;return o(x(t,p));}),s(p=>{cov_26i8p3pfyi().f[11]++;cov_26i8p3pfyi().s[17]++;return e.logout(),a(()=>{cov_26i8p3pfyi().f[12]++;cov_26i8p3pfyi().s[18]++;return p;});})));}));};function x(t,o){cov_26i8p3pfyi().f[13]++;cov_26i8p3pfyi().s[19]++;return t.clone({setHeaders:{Authorization:`Bearer ${o}`}});}function G(t){cov_26i8p3pfyi().f[14]++;cov_26i8p3pfyi().s[20]++;return!/\/auth\/(login|refresh|logout)/.test(t);}function L(t){cov_26i8p3pfyi().f[15]++;cov_26i8p3pfyi().s[21]++;return /\/auth\/(login|refresh|first-login|logout)/.test(t);}var N=(cov_26i8p3pfyi().s[22]++,{production:!0,apiBaseUrl:"/api"});var j=(cov_26i8p3pfyi().s[23]++,(()=>{cov_26i8p3pfyi().f[16]++;let t=(cov_26i8p3pfyi().s[24]++,N.apiBaseUrl);cov_26i8p3pfyi().s[25]++;for(;t.endsWith("/");){cov_26i8p3pfyi().s[26]++;t=t.slice(0,-1);}cov_26i8p3pfyi().s[27]++;return t;})()),y=(cov_26i8p3pfyi().s[28]++,{providers:[d(),C(k),b(B()),E(S([H])),{provide:M,useValue:j},R(()=>{cov_26i8p3pfyi().f[17]++;cov_26i8p3pfyi().s[29]++;i(O).initialize([]);})]});var D=(cov_26i8p3pfyi().s[30]++,(()=>{cov_26i8p3pfyi().f[18]++;class t{title=(cov_26i8p3pfyi().s[31]++,A("frontend"));static ɵfac=(cov_26i8p3pfyi().s[32]++,function(r){cov_26i8p3pfyi().f[19]++;cov_26i8p3pfyi().s[33]++;return new((cov_26i8p3pfyi().b[4][0]++,r)||(cov_26i8p3pfyi().b[4][1]++,t))();});static ɵcmp=(cov_26i8p3pfyi().s[34]++,v({type:t,selectors:[["app-root"]],decls:1,vars:0,template:function(r,u){cov_26i8p3pfyi().f[20]++;cov_26i8p3pfyi().s[35]++;(cov_26i8p3pfyi().b[5][0]++,r&1)&&(cov_26i8p3pfyi().b[5][1]++,g(0,"router-outlet"));},dependencies:[U],encapsulation:2}));}cov_26i8p3pfyi().s[36]++;return t;})());cov_26i8p3pfyi().s[37]++;I(D,y).catch(t=>{cov_26i8p3pfyi().f[21]++;cov_26i8p3pfyi().s[38]++;return console.error(t);});//# sourceMappingURL=main-FN42ADHL.js.map +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJrIiwiY292XzI2aThwM3BmeWkiLCJzIiwicGF0aCIsImxvYWRDaGlsZHJlbiIsImYiLCJ0aGVuIiwidCIsIlVTRVJfQVVUSF9ST1VURVMiLCJjYW5BY3RpdmF0ZSIsImwiLCJ6IiwiZGF0YSIsInJlcXVpcmVkUm9sZSIsIl8iLCJBTU1JTklTVFJBVE9SRSIsIk1ZX1ZJTUFSX0lOVEVHUkFUSU9OX1JPVVRFUyIsIk1BSU5fTEFZT1VUX1JPVVRFUyIsInJlZGlyZWN0VG8iLCJtIiwiSCIsIm8iLCJlIiwiaSIsInciLCJyIiwiZ2V0VG9rZW4iLCJ1IiwiYiIsIkciLCJ1cmwiLCJ4IiwicGlwZSIsIm4iLCJUIiwic3RhdHVzIiwiTCIsImEiLCJyZWZyZXNoQWNjZXNzVG9rZW4iLCJjIiwiaCIsInAiLCJsb2dvdXQiLCJjbG9uZSIsInNldEhlYWRlcnMiLCJBdXRob3JpemF0aW9uIiwidGVzdCIsIk4iLCJwcm9kdWN0aW9uIiwiYXBpQmFzZVVybCIsImoiLCJlbmRzV2l0aCIsInNsaWNlIiwieSIsInByb3ZpZGVycyIsImQiLCJDIiwiQiIsIkUiLCJTIiwicHJvdmlkZSIsIk0iLCJ1c2VWYWx1ZSIsIlIiLCJPIiwiaW5pdGlhbGl6ZSIsIkQiLCJ0aXRsZSIsIkEiLCLJtWZhYyIsIsm1Y21wIiwidiIsInR5cGUiLCJzZWxlY3RvcnMiLCJkZWNscyIsInZhcnMiLCJ0ZW1wbGF0ZSIsImciLCJkZXBlbmRlbmNpZXMiLCJVIiwiZW5jYXBzdWxhdGlvbiIsIkkiLCJjYXRjaCIsImNvbnNvbGUiLCJlcnJvciJdLCJzb3VyY2VzIjpbInNyYy9hcHAvYXBwLnJvdXRlcy50cyIsInNyYy9hcHAvY29yZS9pbnRlcmNlcHRvcnMvYXV0aC5pbnRlcmNlcHRvci50cyIsInNyYy9lbnZpcm9ubWVudHMvZW52aXJvbm1lbnQudHMiLCJzcmMvYXBwL2FwcC5jb25maWcudHMiLCJzcmMvYXBwL2FwcC50cyIsInNyYy9hcHAvYXBwLmh0bWwiLCJzcmMvbWFpbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSb3V0ZXMgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgYXV0aEd1YXJkIH0gZnJvbSAnLi9jb3JlL2d1YXJkcy9hdXRoLmd1YXJkJztcbmltcG9ydCB7IHJvbGVHdWFyZCB9IGZyb20gJy4vY29yZS9ndWFyZHMvcm9sZS5ndWFyZCc7XG5pbXBvcnQgeyBVc2VyUm9sZSB9IGZyb20gJy4vY29yZS9tb2RlbHMvdXNlci1yb2xlLmVudW0nO1xuXG5leHBvcnQgY29uc3Qgcm91dGVzOiBSb3V0ZXMgPSBbXG5cdHtcblx0XHRwYXRoOiAnYXV0aCcsXG5cdFx0bG9hZENoaWxkcmVuOiAoKSA9PiBpbXBvcnQoJy4vZmVhdHVyZXMvdXNlci1hdXRoL3VzZXItYXV0aC5yb3V0ZXMnKS50aGVuKChtKSA9PiBtLlVTRVJfQVVUSF9ST1VURVMpXG5cdH0sXG5cdHtcblx0XHRwYXRoOiAndmltYXItbGluaycsXG5cdFx0Y2FuQWN0aXZhdGU6IFthdXRoR3VhcmQsIHJvbGVHdWFyZF0sXG5cdFx0ZGF0YTogeyByZXF1aXJlZFJvbGU6IFVzZXJSb2xlLkFNTUlOSVNUUkFUT1JFIH0sXG5cdFx0bG9hZENoaWxkcmVuOiAoKSA9PlxuXHRcdFx0aW1wb3J0KCcuL2ZlYXR1cmVzL215LXZpbWFyLWludGVncmF0aW9uL215LXZpbWFyLWludGVncmF0aW9uLnJvdXRlcycpLnRoZW4oKG0pID0+IG0uTVlfVklNQVJfSU5URUdSQVRJT05fUk9VVEVTKVxuXHR9LFxuXHR7XG5cdFx0cGF0aDogJycsXG5cdFx0Y2FuQWN0aXZhdGU6IFthdXRoR3VhcmRdLFxuXHRcdGxvYWRDaGlsZHJlbjogKCkgPT5cblx0XHRcdGltcG9ydCgnLi9mZWF0dXJlcy9tYWluLWxheW91dC9tYWluLWxheW91dC5yb3V0ZXMnKS50aGVuKChtKSA9PiBtLk1BSU5fTEFZT1VUX1JPVVRFUylcblx0fSxcblx0e1xuXHRcdHBhdGg6ICcqKicsXG5cdFx0cmVkaXJlY3RUbzogJydcblx0fVxuXTtcbiIsImltcG9ydCB7IEh0dHBFcnJvclJlc3BvbnNlLCBIdHRwSW50ZXJjZXB0b3JGbiwgSHR0cFJlcXVlc3QgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIGNhdGNoRXJyb3IsIGZpbmFsaXplLCBzaGFyZVJlcGxheSwgc3dpdGNoTWFwLCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBJbnRlcm5hbEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvaW50ZXJuYWwtYXV0aC5zZXJ2aWNlJztcblxubGV0IHJlZnJlc2hJbkZsaWdodCQ6IE9ic2VydmFibGU8c3RyaW5nPiB8IG51bGwgPSBudWxsO1xuXG5leHBvcnQgY29uc3QgYXV0aEludGVyY2VwdG9yOiBIdHRwSW50ZXJjZXB0b3JGbiA9IChyZXEsIG5leHQpID0+IHtcblx0Y29uc3QgYXV0aFNlcnZpY2UgPSBpbmplY3QoSW50ZXJuYWxBdXRoU2VydmljZSk7XG5cdGNvbnN0IHRva2VuID0gYXV0aFNlcnZpY2UuZ2V0VG9rZW4oKTtcblxuXHRjb25zdCByZXF1ZXN0ID0gdG9rZW4gJiYgc2hvdWxkQXR0YWNoQXV0aEhlYWRlcihyZXEudXJsKSA/IHdpdGhBdXRob3JpemF0aW9uKHJlcSwgdG9rZW4pIDogcmVxO1xuXG5cdHJldHVybiBuZXh0KHJlcXVlc3QpLnBpcGUoXG5cdFx0Y2F0Y2hFcnJvcigoZXJyb3I6IHVua25vd24pID0+IHtcblx0XHRcdGlmICghKGVycm9yIGluc3RhbmNlb2YgSHR0cEVycm9yUmVzcG9uc2UpIHx8XG5cdFx0XHRcdGVycm9yLnN0YXR1cyAhPT0gNDAxIHx8XG5cdFx0XHRcdHNob3VsZFNraXBSZWZyZXNoKHJlcS51cmwpXG5cdFx0XHQpIHtcblx0XHRcdFx0cmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZXJyb3IpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZWZyZXNoSW5GbGlnaHQkID8/PSBhdXRoU2VydmljZS5yZWZyZXNoQWNjZXNzVG9rZW4oKS5waXBlKFxuXHRcdFx0XHRzaGFyZVJlcGxheSgxKSxcblx0XHRcdFx0ZmluYWxpemUoKCkgPT4ge1xuXHRcdFx0XHRcdHJlZnJlc2hJbkZsaWdodCQgPSBudWxsO1xuXHRcdFx0XHR9KVxuXHRcdFx0KTtcblxuXHRcdFx0cmV0dXJuIHJlZnJlc2hJbkZsaWdodCQucGlwZShcblx0XHRcdFx0c3dpdGNoTWFwKChuZXdUb2tlbikgPT4gbmV4dCh3aXRoQXV0aG9yaXphdGlvbihyZXEsIG5ld1Rva2VuKSkpLFxuXHRcdFx0XHRjYXRjaEVycm9yKChyZWZyZXNoRXJyb3I6IHVua25vd24pID0+IHtcblx0XHRcdFx0XHRhdXRoU2VydmljZS5sb2dvdXQoKTtcblx0XHRcdFx0XHRyZXR1cm4gdGhyb3dFcnJvcigoKSA9PiByZWZyZXNoRXJyb3IpO1xuXHRcdFx0XHR9KVxuXHRcdFx0KTtcblx0XHR9KVxuXHQpO1xufTtcblxuZnVuY3Rpb24gd2l0aEF1dGhvcml6YXRpb24ocmVxOiBIdHRwUmVxdWVzdDx1bmtub3duPiwgdG9rZW46IHN0cmluZyk6IEh0dHBSZXF1ZXN0PHVua25vd24+IHtcblx0cmV0dXJuIHJlcS5jbG9uZSh7XG5cdFx0c2V0SGVhZGVyczoge1xuXHRcdFx0QXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWAsXG5cdFx0fSxcblx0fSk7XG59XG5cblxuZnVuY3Rpb24gc2hvdWxkQXR0YWNoQXV0aEhlYWRlcih1cmw6IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gIS9cXC9hdXRoXFwvKGxvZ2lufHJlZnJlc2h8bG9nb3V0KS8udGVzdCh1cmwpO1xufVxuXG5mdW5jdGlvbiBzaG91bGRTa2lwUmVmcmVzaCh1cmw6IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gL1xcL2F1dGhcXC8obG9naW58cmVmcmVzaHxmaXJzdC1sb2dpbnxsb2dvdXQpLy50ZXN0KHVybCk7XG59IiwiZXhwb3J0IGNvbnN0IGVudmlyb25tZW50ID0ge1xuICBwcm9kdWN0aW9uOiB0cnVlLFxuICBhcGlCYXNlVXJsOiAnL2FwaScsXG59IGFzIGNvbnN0O1xuIiwiaW1wb3J0IHsgcHJvdmlkZUh0dHBDbGllbnQsIHdpdGhJbnRlcmNlcHRvcnMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQge1xuICBBcHBsaWNhdGlvbkNvbmZpZyxcbiAgaW5qZWN0LFxuICBwcm92aWRlQXBwSW5pdGlhbGl6ZXIsXG4gIHByb3ZpZGVCcm93c2VyR2xvYmFsRXJyb3JMaXN0ZW5lcnMsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgcHJvdmlkZVJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBFdmVudFN1YnNjcmlwdGlvblNlcnZpY2UgfSBmcm9tICcuL2NvcmUvYWxhcm0vc2VydmljZXMvZXZlbnQtc3Vic2NyaXB0aW9uLnNlcnZpY2UnO1xuXG5pbXBvcnQgeyByb3V0ZXMgfSBmcm9tICcuL2FwcC5yb3V0ZXMnO1xuaW1wb3J0IHsgQVBJX0JBU0VfVVJMIH0gZnJvbSAnLi9jb3JlL3Rva2Vucy9hcGktYmFzZS11cmwudG9rZW4nO1xuaW1wb3J0IHsgYXV0aEludGVyY2VwdG9yIH0gZnJvbSAnLi9jb3JlL2ludGVyY2VwdG9ycy9hdXRoLmludGVyY2VwdG9yJztcbmltcG9ydCB7IGVudmlyb25tZW50IH0gZnJvbSAnLi4vZW52aXJvbm1lbnRzL2Vudmlyb25tZW50JztcblxuY29uc3QgYXBpQmFzZVVybCA9ICgoKSA9PiB7XG4gIGxldCBub3JtYWxpemVkOiBzdHJpbmcgPSBlbnZpcm9ubWVudC5hcGlCYXNlVXJsO1xuICB3aGlsZSAobm9ybWFsaXplZC5lbmRzV2l0aCgnLycpKSB7XG4gICAgbm9ybWFsaXplZCA9IG5vcm1hbGl6ZWQuc2xpY2UoMCwgLTEpO1xuICB9XG4gIHJldHVybiBub3JtYWxpemVkO1xufSkoKTtcblxuaW1wb3J0IHsgcHJvdmlkZUNoYXJ0cywgd2l0aERlZmF1bHRSZWdpc3RlcmFibGVzIH0gZnJvbSAnbmcyLWNoYXJ0cyc7XG5cbmV4cG9ydCBjb25zdCBhcHBDb25maWc6IEFwcGxpY2F0aW9uQ29uZmlnID0ge1xuICBwcm92aWRlcnM6IFtcbiAgICBwcm92aWRlQnJvd3Nlckdsb2JhbEVycm9yTGlzdGVuZXJzKCksXG4gICAgcHJvdmlkZVJvdXRlcihyb3V0ZXMpLFxuICAgIHByb3ZpZGVDaGFydHMod2l0aERlZmF1bHRSZWdpc3RlcmFibGVzKCkpLFxuICAgIHByb3ZpZGVIdHRwQ2xpZW50KHdpdGhJbnRlcmNlcHRvcnMoW2F1dGhJbnRlcmNlcHRvcl0pKSxcbiAgICB7IHByb3ZpZGU6IEFQSV9CQVNFX1VSTCwgdXNlVmFsdWU6IGFwaUJhc2VVcmwgfSxcbiAgICBwcm92aWRlQXBwSW5pdGlhbGl6ZXIoKCkgPT4ge1xuICAgICAgaW5qZWN0KEV2ZW50U3Vic2NyaXB0aW9uU2VydmljZSkuaW5pdGlhbGl6ZShbXSk7XG4gICAgfSksXG4gIF1cbn07XG5cblxuIiwiaW1wb3J0IHsgQ29tcG9uZW50LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJvdXRlck91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1yb290JyxcbiAgaW1wb3J0czogW1JvdXRlck91dGxldF0sXG4gIHRlbXBsYXRlVXJsOiAnLi9hcHAuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9hcHAuY3NzJ1xufSlcbmV4cG9ydCBjbGFzcyBBcHAge1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgdGl0bGUgPSBzaWduYWwoJ2Zyb250ZW5kJyk7XG59XG4iLCI8cm91dGVyLW91dGxldD48L3JvdXRlci1vdXRsZXQ+XG4iLCJpbXBvcnQgeyBib290c3RyYXBBcHBsaWNhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHsgYXBwQ29uZmlnIH0gZnJvbSAnLi9hcHAvYXBwLmNvbmZpZyc7XG5pbXBvcnQgeyBBcHAgfSBmcm9tICcuL2FwcC9hcHAnO1xuXG5ib290c3RyYXBBcHBsaWNhdGlvbihBcHAsIGFwcENvbmZpZylcbiAgLmNhdGNoKChlcnIpID0+IGNvbnNvbGUuZXJyb3IoZXJyKSk7XG4iXSwibWFwcGluZ3MiOiI7a3ZCQUtPLEdBQU0sQ0FBQUEsQ0FBQSxFQUFBQyxjQUFBLEdBQUFDLENBQUEsTUFBaUIsQ0FDN0IsQ0FDQ0MsSUFBQSxDQUFNLE9BQ05DLFlBQUEsQ0FBY0EsQ0FBQSxHQUFNLENBQUFILGNBQUEsR0FBQUksQ0FBQSxLQUFBSixDQUFBLGlCQUFBQyxDQUFBLG9CQUFPLHFCQUF1QyxFQUFFSSxJQUFBLENBQU1DLENBQUEsRUFBTSxDQUFBTixjQUFBLEdBQUFJLENBQUEsS0FBQUosQ0FBQSxpQkFBQUMsQ0FBQSxhQUFBSyxDQUFBLENBQUVDLGdCQUFnQixDQUFoQixDQUFnQixLQUVuRyxDQUNDTCxJQUFBLENBQU0sYUFDTk0sV0FBQSxDQUFhLENBQUNDLENBQUEsQ0FBV0MsQ0FBUyxFQUNsQ0MsSUFBQSxDQUFNLENBQUVDLFlBQUEsQ0FBY0MsQ0FBQSxDQUFTQyxjQUFjLEVBQzdDWCxZQUFBLENBQWNBLENBQUEsR0FDYixDQUFBSCxjQUFBLEdBQUFJLENBQUEsS0FBQUosQ0FBQSxpQkFBQUMsQ0FBQSxvQkFBTyxxQkFBNkQsRUFBRUksSUFBQSxDQUFNQyxDQUFBLEVBQU0sQ0FBQU4sY0FBQSxHQUFBSSxDQUFBLEtBQUFKLENBQUEsaUJBQUFDLENBQUEsYUFBQUssQ0FBQSxDQUFFUywyQkFBMkIsQ0FBM0IsQ0FBMkIsS0FFakgsQ0FDQ2IsSUFBQSxDQUFNLEdBQ05NLFdBQUEsQ0FBYSxDQUFDQyxDQUFTLEVBQ3ZCTixZQUFBLENBQWNBLENBQUEsR0FDYixDQUFBSCxjQUFBLEdBQUFJLENBQUEsS0FBQUosQ0FBQSxpQkFBQUMsQ0FBQSxvQkFBTyxxQkFBMkMsRUFBRUksSUFBQSxDQUFNQyxDQUFBLEVBQU0sQ0FBQU4sY0FBQSxHQUFBSSxDQUFBLEtBQUFKLENBQUEsaUJB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 \ No newline at end of file diff --git a/frontend/dist-instrumented/main-FN42ADHL.js.map b/frontend/dist-instrumented/main-FN42ADHL.js.map new file mode 100644 index 00000000..811e2de9 --- /dev/null +++ b/frontend/dist-instrumented/main-FN42ADHL.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["src/app/app.routes.ts", "src/app/core/interceptors/auth.interceptor.ts", "src/environments/environment.ts", "src/app/app.config.ts", "src/app/app.ts", "src/app/app.html", "src/main.ts"], + "sourcesContent": ["import { Routes } from '@angular/router';\nimport { authGuard } from './core/guards/auth.guard';\nimport { roleGuard } from './core/guards/role.guard';\nimport { UserRole } from './core/models/user-role.enum';\n\nexport const routes: Routes = [\n\t{\n\t\tpath: 'auth',\n\t\tloadChildren: () => import('./features/user-auth/user-auth.routes').then((m) => m.USER_AUTH_ROUTES)\n\t},\n\t{\n\t\tpath: 'vimar-link',\n\t\tcanActivate: [authGuard, roleGuard],\n\t\tdata: { requiredRole: UserRole.AMMINISTRATORE },\n\t\tloadChildren: () =>\n\t\t\timport('./features/my-vimar-integration/my-vimar-integration.routes').then((m) => m.MY_VIMAR_INTEGRATION_ROUTES)\n\t},\n\t{\n\t\tpath: '',\n\t\tcanActivate: [authGuard],\n\t\tloadChildren: () =>\n\t\t\timport('./features/main-layout/main-layout.routes').then((m) => m.MAIN_LAYOUT_ROUTES)\n\t},\n\t{\n\t\tpath: '**',\n\t\tredirectTo: ''\n\t}\n];\n", "import { HttpErrorResponse, HttpInterceptorFn, HttpRequest } from '@angular/common/http';\nimport { inject } from '@angular/core';\nimport { Observable, catchError, finalize, shareReplay, switchMap, throwError } from 'rxjs';\nimport { InternalAuthService } from '../services/internal-auth.service';\n\nlet refreshInFlight$: Observable | null = null;\n\nexport const authInterceptor: HttpInterceptorFn = (req, next) => {\n\tconst authService = inject(InternalAuthService);\n\tconst token = authService.getToken();\n\n\tconst request = token && shouldAttachAuthHeader(req.url) ? withAuthorization(req, token) : req;\n\n\treturn next(request).pipe(\n\t\tcatchError((error: unknown) => {\n\t\t\tif (!(error instanceof HttpErrorResponse) ||\n\t\t\t\terror.status !== 401 ||\n\t\t\t\tshouldSkipRefresh(req.url)\n\t\t\t) {\n\t\t\t\treturn throwError(() => error);\n\t\t\t}\n\n\t\t\trefreshInFlight$ ??= authService.refreshAccessToken().pipe(\n\t\t\t\tshareReplay(1),\n\t\t\t\tfinalize(() => {\n\t\t\t\t\trefreshInFlight$ = null;\n\t\t\t\t})\n\t\t\t);\n\n\t\t\treturn refreshInFlight$.pipe(\n\t\t\t\tswitchMap((newToken) => next(withAuthorization(req, newToken))),\n\t\t\t\tcatchError((refreshError: unknown) => {\n\t\t\t\t\tauthService.logout();\n\t\t\t\t\treturn throwError(() => refreshError);\n\t\t\t\t})\n\t\t\t);\n\t\t})\n\t);\n};\n\nfunction withAuthorization(req: HttpRequest, token: string): HttpRequest {\n\treturn req.clone({\n\t\tsetHeaders: {\n\t\t\tAuthorization: `Bearer ${token}`,\n\t\t},\n\t});\n}\n\n\nfunction shouldAttachAuthHeader(url: string): boolean {\n\treturn !/\\/auth\\/(login|refresh|logout)/.test(url);\n}\n\nfunction shouldSkipRefresh(url: string): boolean {\n\treturn /\\/auth\\/(login|refresh|first-login|logout)/.test(url);\n}", "export const environment = {\n production: true,\n apiBaseUrl: '/api',\n} as const;\n", "import { provideHttpClient, withInterceptors } from '@angular/common/http';\nimport {\n ApplicationConfig,\n inject,\n provideAppInitializer,\n provideBrowserGlobalErrorListeners,\n} from '@angular/core';\nimport { provideRouter } from '@angular/router';\nimport { EventSubscriptionService } from './core/alarm/services/event-subscription.service';\n\nimport { routes } from './app.routes';\nimport { API_BASE_URL } from './core/tokens/api-base-url.token';\nimport { authInterceptor } from './core/interceptors/auth.interceptor';\nimport { environment } from '../environments/environment';\n\nconst apiBaseUrl = (() => {\n let normalized: string = environment.apiBaseUrl;\n while (normalized.endsWith('/')) {\n normalized = normalized.slice(0, -1);\n }\n return normalized;\n})();\n\nimport { provideCharts, withDefaultRegisterables } from 'ng2-charts';\n\nexport const appConfig: ApplicationConfig = {\n providers: [\n provideBrowserGlobalErrorListeners(),\n provideRouter(routes),\n provideCharts(withDefaultRegisterables()),\n provideHttpClient(withInterceptors([authInterceptor])),\n { provide: API_BASE_URL, useValue: apiBaseUrl },\n provideAppInitializer(() => {\n inject(EventSubscriptionService).initialize([]);\n }),\n ]\n};\n\n\n", "import { Component, signal } from '@angular/core';\nimport { RouterOutlet } from '@angular/router';\n\n@Component({\n selector: 'app-root',\n imports: [RouterOutlet],\n templateUrl: './app.html',\n styleUrl: './app.css'\n})\nexport class App {\n protected readonly title = signal('frontend');\n}\n", "\n", "import { bootstrapApplication } from '@angular/platform-browser';\nimport { appConfig } from './app/app.config';\nimport { App } from './app/app';\n\nbootstrapApplication(App, appConfig)\n .catch((err) => console.error(err));\n"], + "mappings": "upBAKO,IAAMA,EAAiB,CAC7B,CACCC,KAAM,OACNC,aAAcA,IAAM,OAAO,qBAAuC,EAAEC,KAAMC,GAAMA,EAAEC,gBAAgB,GAEnG,CACCJ,KAAM,aACNK,YAAa,CAACC,EAAWC,CAAS,EAClCC,KAAM,CAAEC,aAAcC,EAASC,cAAc,EAC7CV,aAAcA,IACb,OAAO,qBAA6D,EAAEC,KAAMC,GAAMA,EAAES,2BAA2B,GAEjH,CACCZ,KAAM,GACNK,YAAa,CAACC,CAAS,EACvBL,aAAcA,IACb,OAAO,qBAA2C,EAAEC,KAAMC,GAAMA,EAAEU,kBAAkB,GAEtF,CACCb,KAAM,KACNc,WAAY,GACZ,ECrBF,IAAIC,EAA8C,KAErCC,EAAqCA,CAACC,EAAKC,IAAQ,CAC/D,IAAMC,EAAcC,EAAOC,CAAmB,EACxCC,EAAQH,EAAYI,SAAQ,EAE5BC,EAAUF,GAASG,EAAuBR,EAAIS,GAAG,EAAIC,EAAkBV,EAAKK,CAAK,EAAIL,EAE3F,OAAOC,EAAKM,CAAO,EAAEI,KACpBC,EAAYC,GACP,EAAEA,aAAiBC,IACtBD,EAAME,SAAW,KACjBC,EAAkBhB,EAAIS,GAAG,EAElBQ,EAAW,IAAMJ,CAAK,GAG9Bf,IAAqBI,EAAYgB,mBAAkB,EAAGP,KACrDQ,EAAY,CAAC,EACbC,EAAS,IAAK,CACbtB,EAAmB,IACpB,CAAC,CAAC,EAGIA,EAAiBa,KACvBU,EAAWC,GAAarB,EAAKS,EAAkBV,EAAKsB,CAAQ,CAAC,CAAC,EAC9DV,EAAYW,IACXrB,EAAYsB,OAAM,EACXP,EAAW,IAAMM,CAAY,EACpC,CAAC,EAEH,CAAC,CAEJ,EAEA,SAASb,EAAkBV,EAA2BK,EAAa,CAClE,OAAOL,EAAIyB,MAAM,CAChBC,WAAY,CACXC,cAAe,UAAUtB,CAAK,IAE/B,CACF,CAGA,SAASG,EAAuBC,EAAW,CAC1C,MAAO,CAAC,iCAAiCmB,KAAKnB,CAAG,CAClD,CAEA,SAASO,EAAkBP,EAAW,CACrC,MAAO,6CAA6CmB,KAAKnB,CAAG,CAC7D,CCvDO,IAAMoB,EAAc,CACzBC,WAAY,GACZC,WAAY,QCad,IAAMC,GAAc,IAAK,CACvB,IAAIC,EAAqBC,EAAYF,WACrC,KAAOC,EAAWE,SAAS,GAAG,GAC5BF,EAAaA,EAAWG,MAAM,EAAG,EAAE,EAErC,OAAOH,CACT,GAAE,EAIWI,EAA+B,CAC1CC,UAAW,CACTC,EAAkC,EAClCC,EAAcC,CAAM,EACpBC,EAAcC,EAAwB,CAAE,EACxCC,EAAkBC,EAAiB,CAACC,CAAe,CAAC,CAAC,EACrD,CAAEC,QAASC,EAAcC,SAAUjB,CAAU,EAC7CkB,EAAsB,IAAK,CACzBC,EAAOC,CAAwB,EAAEC,WAAW,CAAA,CAAE,CAChD,CAAC,CAAC,GCzBN,IAAaC,GAAG,IAAA,CAAV,MAAOA,CAAG,CACKC,MAAQC,EAAO,UAAU,6CADjCF,EAAG,2BAAHA,EAAGG,UAAA,CAAA,CAAA,UAAA,CAAA,EAAAC,MAAA,EAAAC,KAAA,EAAAC,SAAA,SAAAC,EAAAC,EAAA,CAAAD,EAAA,GCThBE,EAAA,EAAA,eAAA,iBDKYC,CAAY,EAAAC,cAAA,CAAA,CAAA,SAIXX,CAAG,GAAA,EELhBY,EAAqBC,EAAKC,CAAS,EAChCC,MAAOC,GAAQC,QAAQC,MAAMF,CAAG,CAAC", + "names": ["routes", "path", "loadChildren", "then", "m", "USER_AUTH_ROUTES", "canActivate", "authGuard", "roleGuard", "data", "requiredRole", "UserRole", "AMMINISTRATORE", "MY_VIMAR_INTEGRATION_ROUTES", "MAIN_LAYOUT_ROUTES", "redirectTo", "refreshInFlight$", "authInterceptor", "req", "next", "authService", "inject", "InternalAuthService", "token", "getToken", "request", "shouldAttachAuthHeader", "url", "withAuthorization", "pipe", "catchError", "error", "HttpErrorResponse", "status", "shouldSkipRefresh", "throwError", "refreshAccessToken", "shareReplay", "finalize", "switchMap", "newToken", "refreshError", "logout", "clone", "setHeaders", "Authorization", "test", "environment", "production", "apiBaseUrl", "apiBaseUrl", "normalized", "environment", "endsWith", "slice", "appConfig", "providers", "provideBrowserGlobalErrorListeners", "provideRouter", "routes", "provideCharts", "withDefaultRegisterables", "provideHttpClient", "withInterceptors", "authInterceptor", "provide", "API_BASE_URL", "useValue", "provideAppInitializer", "inject", "EventSubscriptionService", "initialize", "App", "title", "signal", "selectors", "decls", "vars", "template", "rf", "ctx", "\u0275\u0275element", "RouterOutlet", "encapsulation", "bootstrapApplication", "App", "appConfig", "catch", "err", "console", "error"] +} diff --git a/frontend/dist-instrumented/main-layout.component-CDUPEIGX.css.map b/frontend/dist-instrumented/main-layout.component-CDUPEIGX.css.map new file mode 100644 index 00000000..ce854e2e --- /dev/null +++ b/frontend/dist-instrumented/main-layout.component-CDUPEIGX.css.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["src/app/features/main-layout/main-layout.component.css"], + "sourcesContent": [".main-layout__realtime-toast {\n\tposition: fixed;\n\ttop: 5.2rem;\n\tright: 1.1rem;\n\tz-index: 80;\n\tmax-width: min(26rem, calc(100vw - 2rem));\n\tborder: 1px solid #fbbf24;\n\tborder-radius: 0.8rem;\n\tbackground: #fef3c7;\n\tcolor: #78350f;\n\tbox-shadow: 0 18px 36px -24px rgba(15, 23, 42, 0.55);\n\tpadding: 0.7rem 0.9rem;\n}\n\n.main-layout__realtime-toast p {\n\tmargin: 0;\n\tfont-size: 0.92rem;\n\tfont-weight: 700;\n\tline-height: 1.3;\n}\n\n.main-layout__realtime-toast--success {\n\tborder-color: #86efac;\n\tbackground: #dcfce7;\n\tcolor: #14532d;\n}\n\n@media (max-width: 960px) {\n\t.main-layout__realtime-toast {\n\t\tright: 0.7rem;\n\t\tleft: 0.7rem;\n\t\tmax-width: none;\n\t}\n}\n"], + "mappings": "AAAA,CAAA,4BACC,SAAA,MACA,IAAA,OACA,MAAA,OACA,QAAA,GACA,UAAA,IAAA,KAAA,CAAA,KAAA,MAAA,EAAA,OACA,OAAA,IAAA,MAAA,QAND,cAOC,MACA,WAAA,QACA,MAAA,QACA,WAAA,EAAA,KAAA,KAAA,MAAA,UAVD,QAWC,MAAA,KACD,CAEA,CAdA,4BAcA,EAdA,OAeC,EACA,UAAA,OACA,YAAA,IACA,YAAA,GACD,CAEA,CAAA,qCACC,aAAA,QACA,WAAA,QACA,MAAA,OACD,CAEA,OAAA,UAAA,OACC,CA5BD,4BA6BE,MAAA,MACA,KAAA,MACA,UAAA,IACD,CACD", + "names": [] +} diff --git a/frontend/dist-instrumented/my-vimar-account-status.component-K4C5LFKP.css.map b/frontend/dist-instrumented/my-vimar-account-status.component-K4C5LFKP.css.map new file mode 100644 index 00000000..17707328 --- /dev/null +++ b/frontend/dist-instrumented/my-vimar-account-status.component-K4C5LFKP.css.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["src/app/features/my-vimar-integration/components/my-vimar-account-status/my-vimar-account-status.component.css"], + "sourcesContent": [":host {\n display: block;\n}"], + "mappings": "AAAA,MACE,QAAA,KACF", + "names": [] +} diff --git a/frontend/dist-instrumented/my-vimar-page.component-B2RGEUUJ.css.map b/frontend/dist-instrumented/my-vimar-page.component-B2RGEUUJ.css.map new file mode 100644 index 00000000..eace8e8f --- /dev/null +++ b/frontend/dist-instrumented/my-vimar-page.component-B2RGEUUJ.css.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["src/app/features/my-vimar-integration/pages/my-vimar/my-vimar-page.component.css"], + "sourcesContent": [":host {\n display: block;\n}"], + "mappings": "AAAA,MACE,QAAA,KACF", + "names": [] +} diff --git a/frontend/dist-instrumented/notification-badge-component-FCUZVBY4.css.map b/frontend/dist-instrumented/notification-badge-component-FCUZVBY4.css.map new file mode 100644 index 00000000..9146d713 --- /dev/null +++ b/frontend/dist-instrumented/notification-badge-component-FCUZVBY4.css.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["src/app/features/notification/components/notification-badge-component/notification-badge-component.css"], + "sourcesContent": ["@keyframes notification-badge-pop {\n from {\n opacity: 0;\n transform: translateY(-4px) scale(0.94);\n }\n\n 70% {\n transform: translateY(0) scale(1.03);\n }\n\n to {\n opacity: 1;\n transform: translateY(0) scale(1);\n }\n}\n\n.notification-badge {\n animation: notification-badge-pop 180ms ease-out both;\n transform-origin: center;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .notification-badge {\n animation: none;\n }\n}"], + "mappings": "AAAA,WAAA,uBACI,GACI,QAAA,EACA,UAAA,WAAA,MAAA,MAAA,IACJ,CAEA,IACI,UAAA,WAAA,GAAA,MAAA,KACJ,CAEA,GACI,QAAA,EACA,UAAA,WAAA,GAAA,MAAA,EACJ,CACJ,CAEA,CAAA,mBACI,UAAA,uBAAA,KAAA,SAAA,KACA,iBAAA,MACJ,CAEA,OAAA,uBAAA,QACI,CANJ,mBAOQ,UAAA,IACJ,CACJ", + "names": [] +} diff --git a/frontend/dist-instrumented/notification-item-component-SXUKD4MS.css.map b/frontend/dist-instrumented/notification-item-component-SXUKD4MS.css.map new file mode 100644 index 00000000..b0757bf1 --- /dev/null +++ b/frontend/dist-instrumented/notification-item-component-SXUKD4MS.css.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["src/app/features/notification/components/notification-item-component/notification-item-component.css"], + "sourcesContent": ["@keyframes notification-card-enter {\n from {\n opacity: 0;\n transform: translateY(10px) scale(0.985);\n }\n\n to {\n opacity: 1;\n transform: translateY(0) scale(1);\n }\n}\n\n.notification-card {\n animation: notification-card-enter 220ms ease-out both;\n animation-delay: var(--notification-delay, 0ms);\n}\n\n.notification-card--highlighted {\n border-color: #f59e0b;\n box-shadow: 0 0 0 2px rgba(245, 158, 11, 0.26), 0 22px 42px -34px rgba(245, 158, 11, 0.55);\n background: linear-gradient(180deg, #fffbeb 0%, #ffffff 55%);\n}\n\n.notification-item__remove {\n cursor: pointer;\n}\n\n.notification-item__remove:hover {\n transform: translateY(-1px);\n}\n\n.notification-item__title-wrap {\n max-width: 100%;\n}\n\n.notification-item__title {\n margin: 0;\n word-break: break-word;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .notification-card {\n animation: none;\n }\n}"], + "mappings": "AAAA,WAAA,wBACI,GACI,QAAA,EACA,UAAA,WAAA,MAAA,MAAA,KACJ,CAEA,GACI,QAAA,EACA,UAAA,WAAA,GAAA,MAAA,EACJ,CACJ,CAEA,CAAA,kBACI,UAAA,wBAAA,KAAA,SAAA,KACA,gBAAA,IAAA,oBAAA,EAAA,IACJ,CAEA,CAAA,+BACI,aAAA,QACA,WAAA,EAAA,EAAA,EAAA,IAAA,SAAA,CAAA,EAAA,KAAA,KAAA,MAAA,UACA,WAAA,gBAAA,MAAA,CAAA,OAAA,CAAA,KAAA,IACJ,CAEA,CAAA,0BACI,OAAA,OACJ,CAEA,CAJA,yBAIA,OACI,UAAA,WAAA,KACJ,CAEA,CAAA,8BACI,UAAA,IACJ,CAEA,CAAA,yBAnCA,OAoCI,EACA,WAAA,UACJ,CAEA,OAAA,uBAAA,QACI,CA7BJ,kBA8BQ,UAAA,IACJ,CACJ", + "names": [] +} diff --git a/frontend/dist-instrumented/notification-page-component-23WNXUY6.css.map b/frontend/dist-instrumented/notification-page-component-23WNXUY6.css.map new file mode 100644 index 00000000..b8cab5ac --- /dev/null +++ b/frontend/dist-instrumented/notification-page-component-23WNXUY6.css.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["src/app/features/notification/components/notification-page-component/notification-page-component.css"], + "sourcesContent": ["@keyframes notification-page-enter {\n from {\n opacity: 0;\n transform: translateY(12px);\n }\n\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n.notification-shell {\n animation: notification-page-enter 220ms ease-out both;\n}\n\n.notification-header {\n animation: notification-page-enter 260ms ease-out both;\n}\n\n.notification-list {\n animation: notification-page-enter 300ms ease-out both;\n}\n\n@media (prefers-reduced-motion: reduce) {\n\n .notification-shell,\n .notification-header,\n .notification-list {\n animation: none;\n }\n}"], + "mappings": "AAAA,WAAA,wBACI,GACI,QAAA,EACA,UAAA,WAAA,KACJ,CAEA,GACI,QAAA,EACA,UAAA,WAAA,EACJ,CACJ,CAEA,CAAA,mBACI,UAAA,wBAAA,KAAA,SAAA,IACJ,CAEA,CAAA,oBACI,UAAA,wBAAA,KAAA,SAAA,IACJ,CAEA,CAAA,kBACI,UAAA,wBAAA,IAAA,SAAA,IACJ,CAEA,OAAA,uBAAA,QAEI,CAdJ,oBAIA,qBAIA,kBASQ,UAAA,IACJ,CACJ", + "names": [] +} diff --git a/frontend/dist-instrumented/notification-topbar-panel-component-HOAVN6CF.css.map b/frontend/dist-instrumented/notification-topbar-panel-component-HOAVN6CF.css.map new file mode 100644 index 00000000..197645e0 --- /dev/null +++ b/frontend/dist-instrumented/notification-topbar-panel-component-HOAVN6CF.css.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["src/app/features/notification/components/notification-topbar-panel-component/notification-topbar-panel-component.css"], + "sourcesContent": ["@keyframes notification-preview-panel-enter {\n from {\n opacity: 0;\n transform: translateY(-10px) scale(0.985);\n }\n\n to {\n opacity: 1;\n transform: translateY(0) scale(1);\n }\n}\n\n@keyframes notification-preview-item-enter {\n from {\n opacity: 0;\n transform: translateY(8px);\n }\n\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n.notification-topbar-panel {\n position: fixed;\n top: 4.9rem;\n right: 1rem;\n z-index: 75;\n width: min(26rem, calc(100vw - 2rem));\n max-height: 24rem;\n overflow: auto;\n border: 1px solid #f59e0b;\n border-radius: 0.95rem;\n background: #ffffff;\n box-shadow: 0 24px 46px -30px rgba(15, 23, 42, 0.62);\n padding: 0.9rem;\n animation: notification-preview-panel-enter 180ms ease-out both;\n}\n\n.notification-topbar-panel__header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 0.7rem;\n margin-bottom: 0.75rem;\n}\n\n.notification-topbar-panel__actions {\n display: inline-flex;\n align-items: center;\n gap: 0.4rem;\n}\n\n.notification-topbar-panel__header h2 {\n margin: 0;\n font-size: 1rem;\n font-weight: 700;\n color: #0f172a;\n}\n\n.notification-topbar-panel__view-all,\n.notification-topbar-panel__clear-all {\n border: 1px solid #f59e0b;\n background: #fef3c7;\n color: #92400e;\n font-size: 0.78rem;\n font-weight: 700;\n border-radius: 0.65rem;\n padding: 0.35rem 0.6rem;\n cursor: pointer;\n}\n\n.notification-topbar-panel__view-all:hover,\n.notification-topbar-panel__clear-all:hover {\n background: #fde68a;\n border-color: #d97706;\n}\n\n.notification-topbar-panel__empty {\n margin: 0;\n padding: 0.4rem 0.2rem;\n color: #475569;\n font-size: 0.88rem;\n}\n\n.notification-topbar-panel__list {\n margin: 0;\n padding: 0;\n list-style: none;\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n}\n\n.notification-topbar-panel__item {\n border: 1px solid #e2e8f0;\n border-radius: 0.75rem;\n padding: 0.55rem 0.65rem;\n background: #ffffff;\n animation: notification-preview-item-enter 220ms ease-out both;\n}\n\n.notification-topbar-panel__item:hover {\n border-color: #f59e0b;\n background: #fffbeb;\n}\n\n\n.notification-topbar-panel__open {\n min-width: 0;\n flex: 1;\n text-align: left;\n border: 0;\n background: transparent;\n padding: 0;\n cursor: pointer;\n}\n\n.notification-topbar-panel__open:focus-visible {\n outline: 2px solid #f59e0b;\n outline-offset: 2px;\n border-radius: 0.45rem;\n}\n\n.notification-topbar-panel__item:nth-child(1) {\n animation-delay: 24ms;\n}\n\n.notification-topbar-panel__item:nth-child(2) {\n animation-delay: 48ms;\n}\n\n.notification-topbar-panel__item:nth-child(3) {\n animation-delay: 72ms;\n}\n\n.notification-topbar-panel__item:nth-child(4) {\n animation-delay: 96ms;\n}\n\n.notification-topbar-panel__item:nth-child(5) {\n animation-delay: 120ms;\n}\n\n.notification-topbar-panel__item:nth-child(6) {\n animation-delay: 144ms;\n}\n\n.notification-topbar-panel__item-header {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n gap: 0.45rem;\n}\n\n.notification-topbar-panel__title {\n margin: 0;\n font-size: 0.88rem;\n font-weight: 600;\n color: #0f172a;\n line-height: 1.25;\n}\n\n.notification-topbar-panel__title-wrap {\n min-width: 0;\n display: inline-flex;\n align-items: center;\n gap: 0.45rem;\n}\n\n.notification-topbar-panel__time {\n display: inline-block;\n margin-top: 0.22rem;\n margin-left: 0.7rem;\n font-size: 0.75rem;\n color: #64748b;\n}\n\n.notification-topbar-panel__remove {\n flex-shrink: 0;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 1.45rem;\n height: 1.45rem;\n border-radius: 0.45rem;\n border: 1px solid #fcd34d;\n background: #ffffff;\n color: #b45309;\n cursor: pointer;\n}\n\n.notification-topbar-panel__remove:hover {\n background: #fef3c7;\n border-color: #f59e0b;\n}\n\n.notification-topbar-panel__remove-icon {\n width: 0.85rem;\n height: 0.85rem;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .notification-topbar-panel,\n .notification-topbar-panel__item {\n animation: none;\n }\n}\n"], + "mappings": "AAAA,WAAA,iCACE,GACE,QAAA,EACA,UAAA,WAAA,OAAA,MAAA,KACF,CAEA,GACE,QAAA,EACA,UAAA,WAAA,GAAA,MAAA,EACF,CACF,CAEA,WAAA,gCACE,GACE,QAAA,EACA,UAAA,WAAA,IACF,CAEA,GACE,QAAA,EACA,UAAA,WAAA,EACF,CACF,CAEA,CAAA,0BACE,SAAA,MACA,IAAA,OACA,MAAA,KACA,QAAA,GACA,MAAA,IAAA,KAAA,CAAA,KAAA,MAAA,EAAA,OACA,WAAA,MACA,SAAA,KACA,OAAA,IAAA,MAAA,QAhCF,cAiCE,OACA,WAAA,KACA,WAAA,EAAA,KAAA,KAAA,MAAA,UAnCF,QAoCE,MACA,UAAA,iCAAA,KAAA,SAAA,IACF,CAEA,CAAA,kCACE,QAAA,KACA,YAAA,OACA,gBAAA,cACA,IAAA,MACA,cAAA,MACF,CAEA,CAAA,mCACE,QAAA,YACA,YAAA,OACA,IAAA,KACF,CAEA,CAdA,kCAcA,GAtDA,OAuDE,EACA,UAAA,KACA,YAAA,IACA,MAAA,OACF,CAEA,CAAA,0EAEE,OAAA,IAAA,MAAA,QACA,WAAA,QACA,MAAA,QACA,UAAA,OACA,YAAA,IAnEF,cAoEE,OApEF,QAqEE,OAAA,MACA,OAAA,OACF,CAEA,CAZA,mCAYA,mDAEE,WAAA,QACA,aAAA,OACF,CAEA,CAAA,iCA/EA,OAgFE,EAhFF,QAiFE,MAAA,MACA,MAAA,QACA,UAAA,MACF,CAEA,CAAA,gCAtFA,OAuFE,EAvFF,QAwFE,EACA,WAAA,KACA,QAAA,KACA,eAAA,OACA,IAAA,KACF,CAEA,CAAA,gCACE,OAAA,IAAA,MAAA,QAhGF,cAiGE,OAjGF,QAkGE,OAAA,OACA,WAAA,KACA,UAAA,gCAAA,KAAA,SAAA,IACF,CAEA,CARA,+BAQA,OACE,aAAA,QACA,WAAA,OACF,CAGA,CAAA,gCACE,UAAA,EACA,KAAA,EACA,WAAA,KACA,OAAA,EACA,WAAA,YAlHF,QAmHE,EACA,OAAA,OACF,CAEA,CAVA,+BAUA,eACE,QAAA,IAAA,MAAA,QACA,eAAA,IAzHF,cA0HE,MACF,CAEA,CA9BA,+BA8BA,cACE,gBAAA,IACF,CAEA,CAlCA,+BAkCA,cACE,gBAAA,IACF,CAEA,CAtCA,+BAsCA,cACE,gBAAA,IACF,CAEA,CA1CA,+BA0CA,cACE,gBAAA,IACF,CAEA,CA9CA,+BA8CA,cACE,gBAAA,IACF,CAEA,CAlDA,+BAkDA,cACE,gBAAA,KACF,CAEA,CAAA,uCACE,QAAA,KACA,YAAA,WACA,gBAAA,cACA,IAAA,MACF,CAEA,CAAA,iCA5JA,OA6JE,EACA,UAAA,OACA,YAAA,IACA,MAAA,QACA,YAAA,IACF,CAEA,CAAA,sCACE,UAAA,EACA,QAAA,YACA,YAAA,OACA,IAAA,MACF,CAEA,CAAA,gCACE,QAAA,aACA,WAAA,OACA,YAAA,MACA,UAAA,OACA,MAAA,OACF,CAEA,CAAA,kCACE,YAAA,EACA,QAAA,YACA,YAAA,OACA,gBAAA,OACA,MAAA,QACA,OAAA,QAzLF,cA0LE,OACA,OAAA,IAAA,MAAA,QACA,WAAA,KACA,MAAA,QACA,OAAA,OACF,CAEA,CAdA,iCAcA,OACE,WAAA,QACA,aAAA,OACF,CAEA,CAAA,uCACE,MAAA,OACA,OAAA,MACF,CAEA,OAAA,uBAAA,QACE,CApLF,2BAuEA,gCA+GI,UAAA,IACF,CACF", + "names": [] +} diff --git a/frontend/dist-instrumented/notification.png b/frontend/dist-instrumented/notification.png new file mode 100644 index 00000000..1527cf27 Binary files /dev/null and b/frontend/dist-instrumented/notification.png differ diff --git a/frontend/dist-instrumented/presence-sensor-card.component-2WVI6HW5.css.map b/frontend/dist-instrumented/presence-sensor-card.component-2WVI6HW5.css.map new file mode 100644 index 00000000..f096acd5 --- /dev/null +++ b/frontend/dist-instrumented/presence-sensor-card.component-2WVI6HW5.css.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["src/app/features/device-interaction/components/presence-sensor-card/presence-sensor-card.component.css"], + "sourcesContent": [".device-card { border: 1px solid #d8dee3; border-radius: 0.5rem; padding: 0.75rem; display: grid; gap: 0.6rem; }\n.device-card h3, .device-card p { margin: 0; }\n.device-card__actions { display: flex; gap: 0.5rem; flex-wrap: wrap; }\n.device-card__error { color: #a40000; margin: 0; font-size: 0.85rem; }\n"], + "mappings": "AAAA,CAAA,YAAe,OAAA,IAAA,MAAA,QAAf,cAA0C,MAA1C,QAAiE,OAAkB,QAAA,KAAe,IAAA,KAAa,CAC/G,CADA,YACA,GAAA,CADA,YACA,EADA,OACkC,CAAW,CAC7C,CAAA,qBAAwB,QAAA,KAAe,IAAA,MAAa,UAAA,IAAiB,CACrE,CAAA,mBAAsB,MAAA,QAHtB,OAGsC,EAAW,UAAA,MAAoB", + "names": [] +} diff --git a/frontend/dist-instrumented/reload.png b/frontend/dist-instrumented/reload.png new file mode 100644 index 00000000..51ef1a20 Binary files /dev/null and b/frontend/dist-instrumented/reload.png differ diff --git a/frontend/dist-instrumented/room-detail.component-XICSUYN3.css.map b/frontend/dist-instrumented/room-detail.component-XICSUYN3.css.map new file mode 100644 index 00000000..93361d28 --- /dev/null +++ b/frontend/dist-instrumented/room-detail.component-XICSUYN3.css.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["src/app/features/device-interaction/components/room-detail/room-detail.component.css"], + "sourcesContent": [".room-detail {\n gap: 1.1rem;\n}\n\n.room-detail__back-button {\n display: inline-flex;\n align-items: center;\n gap: 0.45rem;\n margin-bottom: 0.7rem;\n border: 1px solid rgba(217, 119, 6, 0.36);\n border-radius: 0.8rem;\n background: linear-gradient(120deg, #fcd34d 0%, #fbbf24 100%);\n color: #1f2937;\n font-size: 0.92rem;\n font-weight: 700;\n text-decoration: none;\n padding: 0.48rem 0.72rem;\n box-shadow: 0 8px 14px rgba(245, 158, 11, 0.24);\n transition: background-color 140ms ease, border-color 140ms ease, transform 120ms ease;\n}\n\n.room-detail__back-button:hover {\n background: rgba(254, 243, 199, 0.75);\n border-color: rgba(245, 158, 11, 0.28);\n transform: translateX(-1px);\n}\n\n.room-detail__back-button svg {\n width: 0.95rem;\n height: 0.95rem;\n}\n"], + "mappings": "AAAA,CAAA,YACE,IAAA,MACF,CAEA,CAAA,yBACE,QAAA,YACA,YAAA,OACA,IAAA,OACA,cAAA,MACA,OAAA,IAAA,MAAA,KAAA,GAAA,CAAA,GAAA,CAAA,CAAA,CAAA,KATF,cAUE,MACA,WAAA,gBAAA,MAAA,CAAA,OAAA,CAAA,SACA,MAAA,QACA,UAAA,OACA,YAAA,IACA,gBAAA,KAfF,QAgBE,OAAA,OACA,WAAA,EAAA,IAAA,KAAA,UACA,WAAA,iBAAA,KAAA,IAAA,CAAA,aAAA,KAAA,IAAA,CAAA,UAAA,KAAA,IACF,CAEA,CAjBA,wBAiBA,OACE,WAAA,UACA,aAAA,UACA,UAAA,UAAA,KACF,CAEA,CAvBA,yBAuBA,IACE,MAAA,OACA,OAAA,MACF", + "names": [] +} diff --git a/frontend/dist-instrumented/room-list.component-RHWMIJV6.css.map b/frontend/dist-instrumented/room-list.component-RHWMIJV6.css.map new file mode 100644 index 00000000..a3e90af8 --- /dev/null +++ b/frontend/dist-instrumented/room-list.component-RHWMIJV6.css.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["src/app/features/apartment-monitor/components/room-list/room-list.component.css"], + "sourcesContent": [".room-list {\n display: grid;\n gap: 0.8rem;\n}\n\n.room-list h2 {\n margin: 0;\n font-size: 1.08rem;\n font-family: var(--care-font-display);\n color: #0f172a;\n}\n\n.room-list ul {\n list-style: none;\n padding: 0;\n margin: 0;\n display: grid;\n gap: 0.5rem;\n}\n\n.room-list__item {\n --room-button-accent: #fcd34d;\n --room-button-accent-strong: #f59e0b;\n width: 100%;\n display: flex;\n justify-content: space-between;\n align-items: center;\n gap: 0.5rem;\n padding: 0.68rem 0.72rem;\n border: 1px solid rgba(217, 119, 6, 0.36);\n border-radius: 0.8rem;\n background: linear-gradient(120deg, var(--room-button-accent) 0%, #fbbf24 100%);\n color: #1f2937;\n font-size: 1.06rem;\n font-weight: 600;\n cursor: pointer;\n transition: background-color 140ms ease, border-color 140ms ease, transform 120ms ease, box-shadow 140ms ease;\n box-shadow: 0 8px 14px rgba(245, 158, 11, 0.24);\n min-width: 0;\n}\n\n.room-list__item:hover {\n background: rgba(254, 243, 199, 0.75);\n border-color: rgba(245, 158, 11, 0.28);\n transform: translateX(1px);\n}\n\n.room-list__item-main {\n display: inline-flex;\n align-items: center;\n gap: 0.7rem;\n min-width: 0;\n}\n\n.room-list__item-icon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 1.3rem;\n min-width: 1.3rem;\n height: 1.3rem;\n border-radius: 9999px;\n background: rgba(254, 243, 199, 0.75);\n color: #7c2d12;\n font-size: 0.8rem;\n}\n\n.room-list__item-label {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n min-width: 0;\n}\n\n.room-list__alarm {\n font-size: 0.8rem;\n font-weight: 700;\n color: #7f1d1d;\n border: 1px solid rgba(248, 113, 113, 0.4);\n border-radius: 999px;\n background: rgba(254, 226, 226, 0.9);\n padding: 0.15rem 0.45rem;\n}\n\n.room-list__empty {\n margin: 0;\n font-size: 0.9rem;\n color: #64748b;\n}\n"], + "mappings": "AAAA,CAAA,UACE,QAAA,KACA,IAAA,KACF,CAEA,CALA,UAKA,GALA,OAME,EACA,UAAA,QACA,YAAA,IAAA,qBACA,MAAA,OACF,CAEA,CAZA,UAYA,GACE,WAAA,KAbF,QAcE,EAdF,OAeE,EACA,QAAA,KACA,IAAA,KACF,CAEA,CAAA,gBACE,sBAAA,QACA,6BAAA,QACA,MAAA,KACA,QAAA,KACA,gBAAA,cACA,YAAA,OACA,IAAA,MA3BF,QA4BE,OAAA,OACA,OAAA,IAAA,MAAA,KAAA,GAAA,CAAA,GAAA,CAAA,CAAA,CAAA,KA7BF,cA8BE,MACA,WAAA,gBAAA,MAAA,CAAA,IAAA,sBAAA,EAAA,CAAA,QAAA,MACA,MAAA,QACA,UAAA,QACA,YAAA,IACA,OAAA,QACA,WAAA,iBAAA,KAAA,IAAA,CAAA,aAAA,KAAA,IAAA,CAAA,UAAA,KAAA,IAAA,CAAA,WAAA,KAAA,KACA,WAAA,EAAA,IAAA,KAAA,UACA,UAAA,CACF,CAEA,CArBA,eAqBA,OACE,WAAA,UACA,aAAA,UACA,UAAA,UAAA,IACF,CAEA,CAAA,qBACE,QAAA,YACA,YAAA,OACA,IAAA,MACA,UAAA,CACF,CAEA,CAAA,qBACE,QAAA,YACA,YAAA,OACA,gBAAA,OACA,MAAA,OACA,UAAA,OACA,OAAA,OA5DF,cA6DE,OACA,WAAA,UACA,MAAA,QACA,UAAA,KACF,CAEA,CAAA,sBACE,YAAA,OACA,SAAA,OACA,cAAA,SACA,UAAA,CACF,CAEA,CAAA,iBACE,UAAA,MACA,YAAA,IACA,MAAA,QACA,OAAA,IAAA,MAAA,KAAA,GAAA,CAAA,GAAA,CAAA,GAAA,CAAA,IA9EF,cA+EE,MACA,WAAA,UAhFF,QAiFE,OAAA,MACF,CAEA,CAAA,iBApFA,OAqFE,EACA,UAAA,MACA,MAAA,OACF", + "names": [] +} diff --git a/frontend/dist-instrumented/sidebar.component-WQQ4SEIG.css.map b/frontend/dist-instrumented/sidebar.component-WQQ4SEIG.css.map new file mode 100644 index 00000000..6c14d7e8 --- /dev/null +++ b/frontend/dist-instrumented/sidebar.component-WQQ4SEIG.css.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["src/app/features/main-layout/components/sidebar/sidebar.component.css"], + "sourcesContent": [":host {\n\tdisplay: block;\n\theight: 100%;\n z-index: 40;\n}\n\n.sidebar-shell {\n\t--sidebar-accent: #fcd34d;\n\t--sidebar-accent-strong: #f59e0b;\n\t--sidebar-ink: #1f2937;\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 0.75rem;\n\twidth: 16rem;\n\theight: 100%;\n\tflex-shrink: 0;\n\tpadding: 0.85rem;\n\tbackground: #ffffff;\n\tborder-right: 1px solid rgba(226, 232, 240, 0.95);\n\tbox-shadow: inset -1px 0 0 rgba(255, 255, 255, 0.45);\n}\n\n.sidebar-overlay {\n\tdisplay: none;\n}\n\n.sidebar-nav {\n\tlist-style: none;\n\tmargin: 0;\n\tpadding: 0;\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 0.45rem;\n\toverflow: auto;\n}\n\n.sidebar-link {\n\tdisplay: flex;\n\talign-items: center;\n\tgap: 0.7rem;\n\twidth: 100%;\n\tpadding: 0.68rem 0.72rem;\n\tborder-radius: 0.8rem;\n\ttext-decoration: none;\n\tcolor: #334155;\n\tfont-size: 1.01rem;\n\tfont-weight: 600;\n\tborder: 1px solid transparent;\n\ttransition: background-color 140ms ease, border-color 140ms ease, transform 120ms ease;\n\toverflow-x: hidden;\n}\n\n.sidebar-link:hover {\n\tbackground: rgba(254, 243, 199, 0.55);\n\tborder-color: rgba(245, 158, 11, 0.28);\n\toverflow-x: hidden;\n}\n\nli,\nli:hover {\n\toverflow-x: hidden;\n}\n\n.sidebar-link.is-active {\n\tbackground: linear-gradient(120deg, var(--sidebar-accent) 0%, #fbbf24 100%);\n\tborder-color: rgba(217, 119, 6, 0.36);\n\tcolor: #1f2937;\n\tbox-shadow: 0 8px 14px rgba(245, 158, 11, 0.24);\n\toverflow-x: hidden;\n}\n\n.sidebar-link-icon {\n\tdisplay: inline-flex;\n\talign-items: center;\n\tjustify-content: center;\n\twidth: 1.3rem;\n\tmin-width: 1.3rem;\n\theight: 1.3rem;\n\tborder-radius: 9999px;\n\tbackground: rgba(254, 243, 199, 0.75);\n\tcolor: #7c2d12;\n\tfont-size: 0.76rem;\n}\n\n.sidebar-empty {\n\tborder: 1px dashed rgba(100, 116, 139, 0.45);\n\tborder-radius: 0.8rem;\n\tpadding: 0.8rem;\n\ttext-align: center;\n\tcolor: #64748b;\n\tfont-style: italic;\n\tbackground: #ffffff;\n}\n\n.sidebar-alert {\n\tmargin: auto 0 0;\n\tborder-radius: 0.7rem;\n\tborder: 1px solid rgba(217, 119, 6, 0.32);\n\tbackground: rgba(251, 191, 36, 0.34);\n\tcolor: #7c2d12;\n\tfont-size: 0.82rem;\n\tfont-weight: 700;\n\tpadding: 0.52rem 0.68rem;\n}\n\n.sidebar-profile-mobile {\n\tdisplay: none;\n}\n\n@media (max-width: 767px) {\n\t.sidebar-shell {\n\t\tinset: 0;\n\t\tpointer-events: none;\n\t\twidth: 100%;\n\t\tpadding: 0;\n\t}\n\n\t.sidebar-overlay {\n\t\tdisplay: block;\n\t\tposition: absolute;\n\t\tinset: 0;\n\t\tbackground: rgba(0, 0, 0, 0.45);\n\t\topacity: 0;\n\t\ttransition: opacity 0.25s ease;\n\t}\n\n\t.sidebar-inner {\n\t\tposition: fixed;\n\t\ttop: var(--topbar-height, 13vh);\n height: calc(100vh - var(--topbar-height, 13vh));\n\t\tleft: 0;\n\t\twidth: 240px;\n\t\tbackground: white;\n\t\ttransform: translateX(-100%);\n\t\ttransition: transform 0.25s ease;\n\t\tpadding: 1em 1em 0 1em;\n\t\toverflow-y: auto;\n\t\tbox-sizing: border-box;\n\t}\n\n\t.sidebar-shell.is-open {\n\t\tpointer-events: auto;\n\t}\n\n\t.sidebar-shell.is-open .sidebar-overlay {\n\t\topacity: 1;\n\t}\n\n\t.sidebar-shell.is-open .sidebar-inner {\n\t\ttransform: translateX(0);\n\t}\n\n\t.sidebar-profile-mobile {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tgap: 0.7rem;\n\t\tmargin-top: auto;\n\t\tpadding: 0;\n\t\tborder-radius: 0.8rem;\n\t\tcolor: #334155;\n\t\tfont-size: 1.01rem;\n\t\tfont-weight: 600;\n\t\tcursor: pointer;\n\t}\n}"], + "mappings": "AAAA,MACC,QAAA,MACA,OAAA,KACG,QAAA,EACJ,CAEA,CAAA,cACC,kBAAA,QACA,yBAAA,QACA,eAAA,QACA,QAAA,KACA,eAAA,OACA,IAAA,OACA,MAAA,MACA,OAAA,KACA,YAAA,EAfD,QAgBC,OACA,WAAA,KACA,aAAA,IAAA,MAAA,KAAA,GAAA,CAAA,GAAA,CAAA,GAAA,CAAA,KACA,WAAA,MAAA,KAAA,EAAA,SACD,CAEA,CAAA,gBACC,QAAA,IACD,CAEA,CAAA,YACC,WAAA,KA3BD,OA4BC,EA5BD,QA6BC,EACA,QAAA,KACA,eAAA,OACA,IAAA,OACA,SAAA,IACD,CAEA,CAAA,aACC,QAAA,KACA,YAAA,OACA,IAAA,MACA,MAAA,KAxCD,QAyCC,OAAA,OAzCD,cA0CC,MACA,gBAAA,KACA,MAAA,QACA,UAAA,QACA,YAAA,IACA,OAAA,IAAA,MAAA,YACA,WAAA,iBAAA,KAAA,IAAA,CAAA,aAAA,KAAA,IAAA,CAAA,UAAA,KAAA,KACA,WAAA,MACD,CAEA,CAhBA,YAgBA,OACC,WAAA,UACA,aAAA,UACA,WAAA,MACD,CAEA,YAEC,WAAA,MACD,CAEA,CA3BA,YA2BA,CAAA,UACC,WAAA,gBAAA,MAAA,CAAA,IAAA,kBAAA,EAAA,CAAA,QAAA,MACA,aAAA,UACA,MAAA,QACA,WAAA,EAAA,IAAA,KAAA,UACA,WAAA,MACD,CAEA,CAAA,kBACC,QAAA,YACA,YAAA,OACA,gBAAA,OACA,MAAA,OACA,UAAA,OACA,OAAA,OA7ED,cA8EC,OACA,WAAA,UACA,MAAA,QACA,UAAA,MACD,CAEA,CAAA,cACC,OAAA,IAAA,OAAA,KAAA,GAAA,CAAA,GAAA,CAAA,GAAA,CAAA,KArFD,cAsFC,MAtFD,QAuFC,MACA,WAAA,OACA,MAAA,QACA,WAAA,OACA,WAAA,IACD,CAEA,CAAA,cA9FA,OA+FC,KAAA,EAAA,EA/FD,cAgGC,MACA,OAAA,IAAA,MAAA,KAAA,GAAA,CAAA,GAAA,CAAA,CAAA,CAAA,KACA,WAAA,UACA,MAAA,QACA,UAAA,OACA,YAAA,IArGD,QAsGC,OAAA,MACD,CAEA,CAAA,uBACC,QAAA,IACD,CAEA,OAAA,UAAA,OACC,CAxGD,cANA,MA+GE,EACA,eAAA,KACA,MAAA,KAjHF,QAkHE,CACD,CAEA,CA/FD,gBAgGE,QAAA,MACA,SAAA,SAvHF,MAwHE,EACA,WAAA,UACA,QAAA,EACA,WAAA,QAAA,KAAA,IACD,CAEA,CAAA,cACC,SAAA,MACA,IAAA,IAAA,eAAA,EAAA,MACM,OAAA,KAAA,MAAA,EAAA,IAAA,eAAA,EAAA,OACN,KAAA,EACA,MAAA,MACA,WAAA,KACA,UAAA,UAAA,OACA,WAAA,UAAA,KAAA,KAtIF,QAuIE,IAAA,IAAA,EACA,WAAA,KACA,WAAA,UACD,CAEA,CAtID,aAsIC,CAAA,QACC,eAAA,IACD,CAEA,CA1ID,aA0IC,CAJA,QAIA,CA1HD,gBA2HE,QAAA,CACD,CAEA,CA9ID,aA8IC,CARA,QAQA,CAtBA,cAuBC,UAAA,UAAA,EACD,CAEA,CA/CD,uBAgDE,QAAA,KACA,YAAA,OACA,IAAA,MACA,WAAA,KA5JF,QA6JE,EA7JF,cA8JE,MACA,MAAA,QACA,UAAA,QACA,YAAA,IACA,OAAA,OACD,CACD", + "names": [] +} diff --git a/frontend/dist-instrumented/styles-WDPUUAG4.css b/frontend/dist-instrumented/styles-WDPUUAG4.css new file mode 100644 index 00000000..727fdab8 --- /dev/null +++ b/frontend/dist-instrumented/styles-WDPUUAG4.css @@ -0,0 +1,2 @@ +@font-face{font-family:DM Sans;font-style:italic;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/dmsans/v17/rP2Wp2ywxg089UriCZaSExdy3sGt9zz86GPwyKK58VXh.woff2) format("woff2");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:DM Sans;font-style:italic;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/dmsans/v17/rP2Wp2ywxg089UriCZaSExdy3sGt9zz86GPwyKy58Q.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:DM Sans;font-style:normal;font-weight:300;font-display:swap;src:url(https://fonts.gstatic.com/s/dmsans/v17/rP2Hp2ywxg089UriCZ2IHSeH.woff2) format("woff2");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:DM Sans;font-style:normal;font-weight:300;font-display:swap;src:url(https://fonts.gstatic.com/s/dmsans/v17/rP2Hp2ywxg089UriCZOIHQ.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:DM Sans;font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/dmsans/v17/rP2Hp2ywxg089UriCZ2IHSeH.woff2) format("woff2");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:DM Sans;font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/dmsans/v17/rP2Hp2ywxg089UriCZOIHQ.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:DM Sans;font-style:normal;font-weight:500;font-display:swap;src:url(https://fonts.gstatic.com/s/dmsans/v17/rP2Hp2ywxg089UriCZ2IHSeH.woff2) format("woff2");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:DM Sans;font-style:normal;font-weight:500;font-display:swap;src:url(https://fonts.gstatic.com/s/dmsans/v17/rP2Hp2ywxg089UriCZOIHQ.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:DM Sans;font-style:normal;font-weight:600;font-display:swap;src:url(https://fonts.gstatic.com/s/dmsans/v17/rP2Hp2ywxg089UriCZ2IHSeH.woff2) format("woff2");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:DM Sans;font-style:normal;font-weight:600;font-display:swap;src:url(https://fonts.gstatic.com/s/dmsans/v17/rP2Hp2ywxg089UriCZOIHQ.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Syne;font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/syne/v24/8vIH7w4qzmVxm2NL9Hz_.woff2) format("woff2");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:Syne;font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/syne/v24/8vIH7w4qzmVxm25L9Hz_.woff2) format("woff2");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Syne;font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/syne/v24/8vIH7w4qzmVxm2BL9A.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Syne;font-style:normal;font-weight:500;font-display:swap;src:url(https://fonts.gstatic.com/s/syne/v24/8vIH7w4qzmVxm2NL9Hz_.woff2) format("woff2");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:Syne;font-style:normal;font-weight:500;font-display:swap;src:url(https://fonts.gstatic.com/s/syne/v24/8vIH7w4qzmVxm25L9Hz_.woff2) format("woff2");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Syne;font-style:normal;font-weight:500;font-display:swap;src:url(https://fonts.gstatic.com/s/syne/v24/8vIH7w4qzmVxm2BL9A.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Syne;font-style:normal;font-weight:600;font-display:swap;src:url(https://fonts.gstatic.com/s/syne/v24/8vIH7w4qzmVxm2NL9Hz_.woff2) format("woff2");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:Syne;font-style:normal;font-weight:600;font-display:swap;src:url(https://fonts.gstatic.com/s/syne/v24/8vIH7w4qzmVxm25L9Hz_.woff2) format("woff2");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Syne;font-style:normal;font-weight:600;font-display:swap;src:url(https://fonts.gstatic.com/s/syne/v24/8vIH7w4qzmVxm2BL9A.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Syne;font-style:normal;font-weight:700;font-display:swap;src:url(https://fonts.gstatic.com/s/syne/v24/8vIH7w4qzmVxm2NL9Hz_.woff2) format("woff2");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:Syne;font-style:normal;font-weight:700;font-display:swap;src:url(https://fonts.gstatic.com/s/syne/v24/8vIH7w4qzmVxm25L9Hz_.woff2) format("woff2");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Syne;font-style:normal;font-weight:700;font-display:swap;src:url(https://fonts.gstatic.com/s/syne/v24/8vIH7w4qzmVxm2BL9A.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Syne;font-style:normal;font-weight:800;font-display:swap;src:url(https://fonts.gstatic.com/s/syne/v24/8vIH7w4qzmVxm2NL9Hz_.woff2) format("woff2");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:Syne;font-style:normal;font-weight:800;font-display:swap;src:url(https://fonts.gstatic.com/s/syne/v24/8vIH7w4qzmVxm25L9Hz_.woff2) format("woff2");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Syne;font-style:normal;font-weight:800;font-display:swap;src:url(https://fonts.gstatic.com/s/syne/v24/8vIH7w4qzmVxm2BL9A.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@layer properties;@layer theme,base,components,utilities;@layer theme{:root,:host{--font-sans: ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-serif: ui-serif, Georgia, Cambria, "Times New Roman", Times, serif;--font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-red-50: oklch(97.1% .013 17.38);--color-red-100: oklch(93.6% .032 17.717);--color-red-200: oklch(88.5% .062 18.334);--color-red-300: oklch(80.8% .114 19.571);--color-red-400: oklch(70.4% .191 22.216);--color-red-500: oklch(63.7% .237 25.331);--color-red-600: oklch(57.7% .245 27.325);--color-red-700: oklch(50.5% .213 27.518);--color-red-800: oklch(44.4% .177 26.899);--color-red-900: oklch(39.6% .141 25.723);--color-red-950: oklch(25.8% .092 26.042);--color-orange-50: oklch(98% .016 73.684);--color-orange-100: oklch(95.4% .038 75.164);--color-orange-200: oklch(90.1% .076 70.697);--color-orange-300: oklch(83.7% .128 66.29);--color-orange-400: oklch(75% .183 55.934);--color-orange-500: oklch(70.5% .213 47.604);--color-orange-600: oklch(64.6% .222 41.116);--color-orange-700: oklch(55.3% .195 38.402);--color-orange-800: oklch(47% .157 37.304);--color-orange-900: oklch(40.8% .123 38.172);--color-orange-950: oklch(26.6% .079 36.259);--color-amber-50: oklch(98.7% .022 95.277);--color-amber-100: oklch(96.2% .059 95.617);--color-amber-200: oklch(92.4% .12 95.746);--color-amber-300: oklch(87.9% .169 91.605);--color-amber-400: oklch(82.8% .189 84.429);--color-amber-500: oklch(76.9% .188 70.08);--color-amber-600: oklch(66.6% .179 58.318);--color-amber-700: oklch(55.5% .163 48.998);--color-amber-800: oklch(47.3% .137 46.201);--color-amber-900: oklch(41.4% .112 45.904);--color-amber-950: oklch(27.9% .077 45.635);--color-yellow-50: oklch(98.7% .026 102.212);--color-yellow-100: oklch(97.3% .071 103.193);--color-yellow-200: oklch(94.5% .129 101.54);--color-yellow-300: oklch(90.5% .182 98.111);--color-yellow-400: oklch(85.2% .199 91.936);--color-yellow-500: oklch(79.5% .184 86.047);--color-yellow-600: oklch(68.1% .162 75.834);--color-yellow-700: oklch(55.4% .135 66.442);--color-yellow-800: oklch(47.6% .114 61.907);--color-yellow-900: oklch(42.1% .095 57.708);--color-yellow-950: oklch(28.6% .066 53.813);--color-lime-50: oklch(98.6% .031 120.757);--color-lime-100: oklch(96.7% .067 122.328);--color-lime-200: oklch(93.8% .127 124.321);--color-lime-300: oklch(89.7% .196 126.665);--color-lime-400: oklch(84.1% .238 128.85);--color-lime-500: oklch(76.8% .233 130.85);--color-lime-600: oklch(64.8% .2 131.684);--color-lime-700: oklch(53.2% .157 131.589);--color-lime-800: oklch(45.3% .124 130.933);--color-lime-900: oklch(40.5% .101 131.063);--color-lime-950: oklch(27.4% .072 132.109);--color-green-50: oklch(98.2% .018 155.826);--color-green-100: oklch(96.2% .044 156.743);--color-green-200: oklch(92.5% .084 155.995);--color-green-300: oklch(87.1% .15 154.449);--color-green-400: oklch(79.2% .209 151.711);--color-green-500: oklch(72.3% .219 149.579);--color-green-600: oklch(62.7% .194 149.214);--color-green-700: oklch(52.7% .154 150.069);--color-green-800: oklch(44.8% .119 151.328);--color-green-900: oklch(39.3% .095 152.535);--color-green-950: oklch(26.6% .065 152.934);--color-emerald-50: oklch(97.9% .021 166.113);--color-emerald-100: oklch(95% .052 163.051);--color-emerald-200: oklch(90.5% .093 164.15);--color-emerald-300: oklch(84.5% .143 164.978);--color-emerald-400: oklch(76.5% .177 163.223);--color-emerald-500: oklch(69.6% .17 162.48);--color-emerald-600: oklch(59.6% .145 163.225);--color-emerald-700: oklch(50.8% .118 165.612);--color-emerald-800: oklch(43.2% .095 166.913);--color-emerald-900: oklch(37.8% .077 168.94);--color-emerald-950: oklch(26.2% .051 172.552);--color-teal-50: oklch(98.4% .014 180.72);--color-teal-100: oklch(95.3% .051 180.801);--color-teal-200: oklch(91% .096 180.426);--color-teal-300: oklch(85.5% .138 181.071);--color-teal-400: oklch(77.7% .152 181.912);--color-teal-500: oklch(70.4% .14 182.503);--color-teal-600: oklch(60% .118 184.704);--color-teal-700: oklch(51.1% .096 186.391);--color-teal-800: oklch(43.7% .078 188.216);--color-teal-900: oklch(38.6% .063 188.416);--color-teal-950: oklch(27.7% .046 192.524);--color-cyan-50: oklch(98.4% .019 200.873);--color-cyan-100: oklch(95.6% .045 203.388);--color-cyan-200: oklch(91.7% .08 205.041);--color-cyan-300: oklch(86.5% .127 207.078);--color-cyan-400: oklch(78.9% .154 211.53);--color-cyan-500: oklch(71.5% .143 215.221);--color-cyan-600: oklch(60.9% .126 221.723);--color-cyan-700: oklch(52% .105 223.128);--color-cyan-800: oklch(45% .085 224.283);--color-cyan-900: oklch(39.8% .07 227.392);--color-cyan-950: oklch(30.2% .056 229.695);--color-sky-50: oklch(97.7% .013 236.62);--color-sky-100: oklch(95.1% .026 236.824);--color-sky-200: oklch(90.1% .058 230.902);--color-sky-300: oklch(82.8% .111 230.318);--color-sky-400: oklch(74.6% .16 232.661);--color-sky-500: oklch(68.5% .169 237.323);--color-sky-600: oklch(58.8% .158 241.966);--color-sky-700: oklch(50% .134 242.749);--color-sky-800: oklch(44.3% .11 240.79);--color-sky-900: oklch(39.1% .09 240.876);--color-sky-950: oklch(29.3% .066 243.157);--color-blue-50: oklch(97% .014 254.604);--color-blue-100: oklch(93.2% .032 255.585);--color-blue-200: oklch(88.2% .059 254.128);--color-blue-300: oklch(80.9% .105 251.813);--color-blue-400: oklch(70.7% .165 254.624);--color-blue-500: oklch(62.3% .214 259.815);--color-blue-600: oklch(54.6% .245 262.881);--color-blue-700: oklch(48.8% .243 264.376);--color-blue-800: oklch(42.4% .199 265.638);--color-blue-900: oklch(37.9% .146 265.522);--color-blue-950: oklch(28.2% .091 267.935);--color-indigo-50: oklch(96.2% .018 272.314);--color-indigo-100: oklch(93% .034 272.788);--color-indigo-200: oklch(87% .065 274.039);--color-indigo-300: oklch(78.5% .115 274.713);--color-indigo-400: oklch(67.3% .182 276.935);--color-indigo-500: oklch(58.5% .233 277.117);--color-indigo-600: oklch(51.1% .262 276.966);--color-indigo-700: oklch(45.7% .24 277.023);--color-indigo-800: oklch(39.8% .195 277.366);--color-indigo-900: oklch(35.9% .144 278.697);--color-indigo-950: oklch(25.7% .09 281.288);--color-violet-50: oklch(96.9% .016 293.756);--color-violet-100: oklch(94.3% .029 294.588);--color-violet-200: oklch(89.4% .057 293.283);--color-violet-300: oklch(81.1% .111 293.571);--color-violet-400: oklch(70.2% .183 293.541);--color-violet-500: oklch(60.6% .25 292.717);--color-violet-600: oklch(54.1% .281 293.009);--color-violet-700: oklch(49.1% .27 292.581);--color-violet-800: oklch(43.2% .232 292.759);--color-violet-900: oklch(38% .189 293.745);--color-violet-950: oklch(28.3% .141 291.089);--color-purple-50: oklch(97.7% .014 308.299);--color-purple-100: oklch(94.6% .033 307.174);--color-purple-200: oklch(90.2% .063 306.703);--color-purple-300: oklch(82.7% .119 306.383);--color-purple-400: oklch(71.4% .203 305.504);--color-purple-500: oklch(62.7% .265 303.9);--color-purple-600: oklch(55.8% .288 302.321);--color-purple-700: oklch(49.6% .265 301.924);--color-purple-800: oklch(43.8% .218 303.724);--color-purple-900: oklch(38.1% .176 304.987);--color-purple-950: oklch(29.1% .149 302.717);--color-fuchsia-50: oklch(97.7% .017 320.058);--color-fuchsia-100: oklch(95.2% .037 318.852);--color-fuchsia-200: oklch(90.3% .076 319.62);--color-fuchsia-300: oklch(83.3% .145 321.434);--color-fuchsia-400: oklch(74% .238 322.16);--color-fuchsia-500: oklch(66.7% .295 322.15);--color-fuchsia-600: oklch(59.1% .293 322.896);--color-fuchsia-700: oklch(51.8% .253 323.949);--color-fuchsia-800: oklch(45.2% .211 324.591);--color-fuchsia-900: oklch(40.1% .17 325.612);--color-fuchsia-950: oklch(29.3% .136 325.661);--color-pink-50: oklch(97.1% .014 343.198);--color-pink-100: oklch(94.8% .028 342.258);--color-pink-200: oklch(89.9% .061 343.231);--color-pink-300: oklch(82.3% .12 346.018);--color-pink-400: oklch(71.8% .202 349.761);--color-pink-500: oklch(65.6% .241 354.308);--color-pink-600: oklch(59.2% .249 .584);--color-pink-700: oklch(52.5% .223 3.958);--color-pink-800: oklch(45.9% .187 3.815);--color-pink-900: oklch(40.8% .153 2.432);--color-pink-950: oklch(28.4% .109 3.907);--color-rose-50: oklch(96.9% .015 12.422);--color-rose-100: oklch(94.1% .03 12.58);--color-rose-200: oklch(89.2% .058 10.001);--color-rose-300: oklch(81% .117 11.638);--color-rose-400: oklch(71.2% .194 13.428);--color-rose-500: oklch(64.5% .246 16.439);--color-rose-600: oklch(58.6% .253 17.585);--color-rose-700: oklch(51.4% .222 16.935);--color-rose-800: oklch(45.5% .188 13.697);--color-rose-900: oklch(41% .159 10.272);--color-rose-950: oklch(27.1% .105 12.094);--color-slate-50: oklch(98.4% .003 247.858);--color-slate-100: oklch(96.8% .007 247.896);--color-slate-200: oklch(92.9% .013 255.508);--color-slate-300: oklch(86.9% .022 252.894);--color-slate-400: oklch(70.4% .04 256.788);--color-slate-500: oklch(55.4% .046 257.417);--color-slate-600: oklch(44.6% .043 257.281);--color-slate-700: oklch(37.2% .044 257.287);--color-slate-800: oklch(27.9% .041 260.031);--color-slate-900: oklch(20.8% .042 265.755);--color-slate-950: oklch(12.9% .042 264.695);--color-gray-50: oklch(98.5% .002 247.839);--color-gray-100: oklch(96.7% .003 264.542);--color-gray-200: oklch(92.8% .006 264.531);--color-gray-300: oklch(87.2% .01 258.338);--color-gray-400: oklch(70.7% .022 261.325);--color-gray-500: oklch(55.1% .027 264.364);--color-gray-600: oklch(44.6% .03 256.802);--color-gray-700: oklch(37.3% .034 259.733);--color-gray-800: oklch(27.8% .033 256.848);--color-gray-900: oklch(21% .034 264.665);--color-gray-950: oklch(13% .028 261.692);--color-zinc-50: oklch(98.5% 0 0);--color-zinc-100: oklch(96.7% .001 286.375);--color-zinc-200: oklch(92% .004 286.32);--color-zinc-300: oklch(87.1% .006 286.286);--color-zinc-400: oklch(70.5% .015 286.067);--color-zinc-500: oklch(55.2% .016 285.938);--color-zinc-600: oklch(44.2% .017 285.786);--color-zinc-700: oklch(37% .013 285.805);--color-zinc-800: oklch(27.4% .006 286.033);--color-zinc-900: oklch(21% .006 285.885);--color-zinc-950: oklch(14.1% .005 285.823);--color-neutral-50: oklch(98.5% 0 0);--color-neutral-100: oklch(97% 0 0);--color-neutral-200: oklch(92.2% 0 0);--color-neutral-300: oklch(87% 0 0);--color-neutral-400: oklch(70.8% 0 0);--color-neutral-500: oklch(55.6% 0 0);--color-neutral-600: oklch(43.9% 0 0);--color-neutral-700: oklch(37.1% 0 0);--color-neutral-800: oklch(26.9% 0 0);--color-neutral-900: oklch(20.5% 0 0);--color-neutral-950: oklch(14.5% 0 0);--color-stone-50: oklch(98.5% .001 106.423);--color-stone-100: oklch(97% .001 106.424);--color-stone-200: oklch(92.3% .003 48.717);--color-stone-300: oklch(86.9% .005 56.366);--color-stone-400: oklch(70.9% .01 56.259);--color-stone-500: oklch(55.3% .013 58.071);--color-stone-600: oklch(44.4% .011 73.639);--color-stone-700: oklch(37.4% .01 67.558);--color-stone-800: oklch(26.8% .007 34.298);--color-stone-900: oklch(21.6% .006 56.043);--color-stone-950: oklch(14.7% .004 49.25);--color-mauve-50: oklch(98.5% 0 0);--color-mauve-100: oklch(96% .003 325.6);--color-mauve-200: oklch(92.2% .005 325.62);--color-mauve-300: oklch(86.5% .012 325.68);--color-mauve-400: oklch(71.1% .019 323.02);--color-mauve-500: oklch(54.2% .034 322.5);--color-mauve-600: oklch(43.5% .029 321.78);--color-mauve-700: oklch(36.4% .029 323.89);--color-mauve-800: oklch(26.3% .024 320.12);--color-mauve-900: oklch(21.2% .019 322.12);--color-mauve-950: oklch(14.5% .008 326);--color-olive-50: oklch(98.8% .003 106.5);--color-olive-100: oklch(96.6% .005 106.5);--color-olive-200: oklch(93% .007 106.5);--color-olive-300: oklch(88% .011 106.6);--color-olive-400: oklch(73.7% .021 106.9);--color-olive-500: oklch(58% .031 107.3);--color-olive-600: oklch(46.6% .025 107.3);--color-olive-700: oklch(39.4% .023 107.4);--color-olive-800: oklch(28.6% .016 107.4);--color-olive-900: oklch(22.8% .013 107.4);--color-olive-950: oklch(15.3% .006 107.1);--color-mist-50: oklch(98.7% .002 197.1);--color-mist-100: oklch(96.3% .002 197.1);--color-mist-200: oklch(92.5% .005 214.3);--color-mist-300: oklch(87.2% .007 219.6);--color-mist-400: oklch(72.3% .014 214.4);--color-mist-500: oklch(56% .021 213.5);--color-mist-600: oklch(45% .017 213.2);--color-mist-700: oklch(37.8% .015 216);--color-mist-800: oklch(27.5% .011 216.9);--color-mist-900: oklch(21.8% .008 223.9);--color-mist-950: oklch(14.8% .004 228.8);--color-taupe-50: oklch(98.6% .002 67.8);--color-taupe-100: oklch(96% .002 17.2);--color-taupe-200: oklch(92.2% .005 34.3);--color-taupe-300: oklch(86.8% .007 39.5);--color-taupe-400: oklch(71.4% .014 41.2);--color-taupe-500: oklch(54.7% .021 43.1);--color-taupe-600: oklch(43.8% .017 39.3);--color-taupe-700: oklch(36.7% .016 35.7);--color-taupe-800: oklch(26.8% .011 36.5);--color-taupe-900: oklch(21.4% .009 43.1);--color-taupe-950: oklch(14.7% .004 49.3);--color-black: #000;--color-white: #fff;--spacing: .25rem;--breakpoint-sm: 40rem;--breakpoint-md: 48rem;--breakpoint-lg: 64rem;--breakpoint-xl: 80rem;--breakpoint-2xl: 96rem;--container-3xs: 16rem;--container-2xs: 18rem;--container-xs: 20rem;--container-sm: 24rem;--container-md: 28rem;--container-lg: 32rem;--container-xl: 36rem;--container-2xl: 42rem;--container-3xl: 48rem;--container-4xl: 56rem;--container-5xl: 64rem;--container-6xl: 72rem;--container-7xl: 80rem;--text-xs: .75rem;--text-xs--line-height: calc(1 / .75);--text-sm: .875rem;--text-sm--line-height: calc(1.25 / .875);--text-base: 1rem;--text-base--line-height: 1.5 ;--text-lg: 1.125rem;--text-lg--line-height: calc(1.75 / 1.125);--text-xl: 1.25rem;--text-xl--line-height: calc(1.75 / 1.25);--text-2xl: 1.5rem;--text-2xl--line-height: calc(2 / 1.5);--text-3xl: 1.875rem;--text-3xl--line-height: 1.2 ;--text-4xl: 2.25rem;--text-4xl--line-height: calc(2.5 / 2.25);--text-5xl: 3rem;--text-5xl--line-height: 1;--text-6xl: 3.75rem;--text-6xl--line-height: 1;--text-7xl: 4.5rem;--text-7xl--line-height: 1;--text-8xl: 6rem;--text-8xl--line-height: 1;--text-9xl: 8rem;--text-9xl--line-height: 1;--font-weight-thin: 100;--font-weight-extralight: 200;--font-weight-light: 300;--font-weight-normal: 400;--font-weight-medium: 500;--font-weight-semibold: 600;--font-weight-bold: 700;--font-weight-extrabold: 800;--font-weight-black: 900;--tracking-tighter: -.05em;--tracking-tight: -.025em;--tracking-normal: 0em;--tracking-wide: .025em;--tracking-wider: .05em;--tracking-widest: .1em;--leading-tight: 1.25;--leading-snug: 1.375;--leading-normal: 1.5;--leading-relaxed: 1.625;--leading-loose: 2;--radius-xs: .125rem;--radius-sm: .25rem;--radius-md: .375rem;--radius-lg: .5rem;--radius-xl: .75rem;--radius-2xl: 1rem;--radius-3xl: 1.5rem;--radius-4xl: 2rem;--shadow-2xs: 0 1px rgb(0 0 0 / .05);--shadow-xs: 0 1px 2px 0 rgb(0 0 0 / .05);--shadow-sm: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1);--shadow-md: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--shadow-lg: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--shadow-xl: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--shadow-2xl: 0 25px 50px -12px rgb(0 0 0 / .25);--inset-shadow-2xs: inset 0 1px rgb(0 0 0 / .05);--inset-shadow-xs: inset 0 1px 1px rgb(0 0 0 / .05);--inset-shadow-sm: inset 0 2px 4px rgb(0 0 0 / .05);--drop-shadow-xs: 0 1px 1px rgb(0 0 0 / .05);--drop-shadow-sm: 0 1px 2px rgb(0 0 0 / .15);--drop-shadow-md: 0 3px 3px rgb(0 0 0 / .12);--drop-shadow-lg: 0 4px 4px rgb(0 0 0 / .15);--drop-shadow-xl: 0 9px 7px rgb(0 0 0 / .1);--drop-shadow-2xl: 0 25px 25px rgb(0 0 0 / .15);--text-shadow-2xs: 0px 1px 0px rgb(0 0 0 / .15);--text-shadow-xs: 0px 1px 1px rgb(0 0 0 / .2);--text-shadow-sm: 0px 1px 0px rgb(0 0 0 / .075), 0px 1px 1px rgb(0 0 0 / .075), 0px 2px 2px rgb(0 0 0 / .075);--text-shadow-md: 0px 1px 1px rgb(0 0 0 / .1), 0px 1px 2px rgb(0 0 0 / .1), 0px 2px 4px rgb(0 0 0 / .1);--text-shadow-lg: 0px 1px 2px rgb(0 0 0 / .1), 0px 3px 2px rgb(0 0 0 / .1), 0px 4px 8px rgb(0 0 0 / .1);--ease-in: cubic-bezier(.4, 0, 1, 1);--ease-out: cubic-bezier(0, 0, .2, 1);--ease-in-out: cubic-bezier(.4, 0, .2, 1);--animate-spin: spin 1s linear infinite;--animate-ping: ping 1s cubic-bezier(0, 0, .2, 1) infinite;--animate-pulse: pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--animate-bounce: bounce 1s infinite;--blur-xs: 4px;--blur-sm: 8px;--blur-md: 12px;--blur-lg: 16px;--blur-xl: 24px;--blur-2xl: 40px;--blur-3xl: 64px;--perspective-dramatic: 100px;--perspective-near: 300px;--perspective-normal: 500px;--perspective-midrange: 800px;--perspective-distant: 1200px;--aspect-video: 16 / 9;--default-transition-duration: .15s;--default-transition-timing-function: cubic-bezier(.4, 0, .2, 1);--default-font-family: var(--font-sans);--default-mono-font-family: var(--font-mono)}}@layer base{*,:after,:before,::backdrop,::file-selector-button{box-sizing:border-box;margin:0;padding:0;border:0 solid}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;tab-size:4;font-family:var(--default-font-family, ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings, normal);font-variation-settings:var(--default-font-variation-settings, normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings, normal);font-variation-settings:var(--default-mono-font-variation-settings, normal);font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea,::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;border-radius:0;background-color:transparent;opacity:1}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not (-webkit-appearance: -apple-pay-button)) or (contain-intrinsic-size: 1px){::placeholder{color:currentcolor}@supports (color: color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit,::-webkit-datetime-edit-year-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute-field,::-webkit-datetime-edit-second-field,::-webkit-datetime-edit-millisecond-field,::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]),::file-selector-button{appearance:button}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer utilities{.pointer-events-none{pointer-events:none}.visible{visibility:visible}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border-width:0}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:calc(var(--spacing) * 0)}.inset-y-0{inset-block:calc(var(--spacing) * 0)}.start{inset-inline-start:var(--spacing)}.end{inset-inline-end:var(--spacing)}.top-0{top:calc(var(--spacing) * 0)}.top-\[-8rem\]{top:-8rem}.-right-40{right:calc(var(--spacing) * -40)}.right-0{right:calc(var(--spacing) * 0)}.bottom-\[-8rem\]{bottom:-8rem}.-left-36{left:calc(var(--spacing) * -36)}.left-0{left:calc(var(--spacing) * 0)}.z-0{z-index:0}.z-10{z-index:10}.z-50{z-index:50}.z-60{z-index:60}.col-span-6{grid-column:span 6 / span 6}.container{width:100%}@media(width>=40rem){.container{max-width:40rem}}@media(width>=48rem){.container{max-width:48rem}}@media(width>=64rem){.container{max-width:64rem}}@media(width>=80rem){.container{max-width:80rem}}@media(width>=96rem){.container{max-width:96rem}}.m-0{margin:calc(var(--spacing) * 0)}.m-auto{margin:auto}.mx-auto{margin-inline:auto}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:calc(var(--spacing) * 1)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mt-5{margin-top:calc(var(--spacing) * 5)}.mt-6{margin-top:calc(var(--spacing) * 6)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.mb-5{margin-bottom:calc(var(--spacing) * 5)}.mb-8{margin-bottom:calc(var(--spacing) * 8)}.ml-1{margin-left:calc(var(--spacing) * 1)}.ml-auto{margin-left:auto}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.h-1\.5{height:calc(var(--spacing) * 1.5)}.h-2{height:calc(var(--spacing) * 2)}.h-2\.5{height:calc(var(--spacing) * 2.5)}.h-3{height:calc(var(--spacing) * 3)}.h-3\.5{height:calc(var(--spacing) * 3.5)}.h-4{height:calc(var(--spacing) * 4)}.h-5{height:calc(var(--spacing) * 5)}.h-6{height:calc(var(--spacing) * 6)}.h-7{height:calc(var(--spacing) * 7)}.h-8{height:calc(var(--spacing) * 8)}.h-9{height:calc(var(--spacing) * 9)}.h-10{height:calc(var(--spacing) * 10)}.h-11{height:calc(var(--spacing) * 11)}.h-12{height:calc(var(--spacing) * 12)}.h-14{height:calc(var(--spacing) * 14)}.h-\[28rem\]{height:28rem}.h-\[87vh\]{height:87vh}.h-full{height:100%}.h-screen{height:100vh}.max-h-0{max-height:calc(var(--spacing) * 0)}.max-h-480{max-height:calc(var(--spacing) * 480)}.max-h-\[90vh\]{max-height:90vh}.min-h-0{min-height:calc(var(--spacing) * 0)}.min-h-\[22rem\]{min-height:22rem}.min-h-\[100dvh\]{min-height:100dvh}.min-h-\[calc\(100vh-4rem\)\]{min-height:calc(100vh - 4rem)}.w-1\.5{width:calc(var(--spacing) * 1.5)}.w-2{width:calc(var(--spacing) * 2)}.w-2\.5{width:calc(var(--spacing) * 2.5)}.w-2\/3{width:calc(2 / 3 * 100%)}.w-3{width:calc(var(--spacing) * 3)}.w-3\.5{width:calc(var(--spacing) * 3.5)}.w-4{width:calc(var(--spacing) * 4)}.w-5{width:calc(var(--spacing) * 5)}.w-5\/6{width:calc(5 / 6 * 100%)}.w-6{width:calc(var(--spacing) * 6)}.w-7{width:calc(var(--spacing) * 7)}.w-8{width:calc(var(--spacing) * 8)}.w-9{width:calc(var(--spacing) * 9)}.w-10{width:calc(var(--spacing) * 10)}.w-11{width:calc(var(--spacing) * 11)}.w-12{width:calc(var(--spacing) * 12)}.w-14{width:calc(var(--spacing) * 14)}.w-20{width:calc(var(--spacing) * 20)}.w-60{width:calc(var(--spacing) * 60)}.w-\[28rem\]{width:28rem}.w-\[95vw\]{width:95vw}.w-fit{width:fit-content}.w-full{width:100%}.max-w-2xl{max-width:var(--container-2xl)}.max-w-3xl{max-width:var(--container-3xl)}.max-w-5xl{max-width:var(--container-5xl)}.max-w-6xl{max-width:var(--container-6xl)}.max-w-full{max-width:100%}.max-w-lg{max-width:var(--container-lg)}.max-w-md{max-width:var(--container-md)}.min-w-0{min-width:calc(var(--spacing) * 0)}.min-w-5{min-width:calc(var(--spacing) * 5)}.min-w-\[96px\]{min-width:96px}.min-w-full{min-width:100%}.flex-1{flex:1}.flex-shrink{flex-shrink:1}.flex-shrink-0,.shrink-0{flex-shrink:0}.border-collapse{border-collapse:collapse}.translate-x-0\.5{--tw-translate-x: calc(var(--spacing) * .5);translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-x-4{--tw-translate-x: calc(var(--spacing) * 4);translate:var(--tw-translate-x) var(--tw-translate-y)}.rotate-180{rotate:180deg}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-pointer{cursor:pointer}.resize{resize:both}.appearance-none{appearance:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.place-items-center{place-items:center}.content-start{align-content:flex-start}.items-center{align-items:center}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-1{gap:calc(var(--spacing) * 1)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-2\.5{gap:calc(var(--spacing) * 2.5)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-5{gap:calc(var(--spacing) * 5)}.gap-6{gap:calc(var(--spacing) * 6)}.gap-8{gap:calc(var(--spacing) * 8)}.gap-10{gap:calc(var(--spacing) * 10)}:where(.space-y-0\.5>:not(:last-child)){--tw-space-y-reverse: 0;margin-block-start:calc(calc(var(--spacing) * .5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * .5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse: 0;margin-block-start:calc(calc(var(--spacing) * 1) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse: 0;margin-block-start:calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse: 0;margin-block-start:calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse: 0;margin-block-start:calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)))}:where(.divide-x>:not(:last-child)){--tw-divide-x-reverse: 0;border-inline-style:var(--tw-border-style);border-inline-start-width:calc(1px * var(--tw-divide-x-reverse));border-inline-end-width:calc(1px * calc(1 - var(--tw-divide-x-reverse)))}:where(.divide-y>:not(:last-child)){--tw-divide-y-reverse: 0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px * var(--tw-divide-y-reverse));border-bottom-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)))}:where(.divide-slate-50>:not(:last-child)){border-color:var(--color-slate-50)}:where(.divide-slate-100>:not(:last-child)){border-color:var(--color-slate-100)}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-3xl{border-radius:var(--radius-3xl)}.rounded-\[1\.5rem\]{border-radius:1.5rem}.rounded-\[1\.25rem\]{border-radius:1.25rem}.rounded-\[1\.75rem\]{border-radius:1.75rem}.rounded-full{border-radius:calc(infinity * 1px)}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-tl-3xl{border-top-left-radius:var(--radius-3xl)}.rounded-bl-3xl{border-bottom-left-radius:var(--radius-3xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l-4{border-left-style:var(--tw-border-style);border-left-width:4px}.border-dashed{--tw-border-style: dashed;border-style:dashed}.border-\[\#1f2933\]\/10{border-color:color-mix(in oklab,#1f2933 10%,transparent)}.border-\[\#b7c3d1\]\/70{border-color:color-mix(in oklab,#b7c3d1 70%,transparent)}.border-\[\#fcd34d\]\/35{border-color:color-mix(in oklab,#fcd34d 35%,transparent)}.border-\[\#fcd34d\]\/50{border-color:color-mix(in oklab,#fcd34d 50%,transparent)}.border-\[\#fcd34d\]\/70{border-color:color-mix(in oklab,#fcd34d 70%,transparent)}.border-\[\#fecaca\]{border-color:#fecaca}.border-\[rgb\(255\,212\,0\)\]{border-color:#ffd400}.border-amber-200{border-color:var(--color-amber-200)}.border-amber-300{border-color:var(--color-amber-300)}.border-amber-400{border-color:var(--color-amber-400)}.border-amber-500{border-color:var(--color-amber-500)}.border-emerald-200{border-color:var(--color-emerald-200)}.border-emerald-500{border-color:var(--color-emerald-500)}.border-red-100{border-color:var(--color-red-100)}.border-red-200{border-color:var(--color-red-200)}.border-red-300{border-color:var(--color-red-300)}.border-red-600{border-color:var(--color-red-600)}.border-rose-200{border-color:var(--color-rose-200)}.border-rose-500{border-color:var(--color-rose-500)}.border-rose-600{border-color:var(--color-rose-600)}.border-rose-700{border-color:var(--color-rose-700)}.border-sky-200{border-color:var(--color-sky-200)}.border-sky-600{border-color:var(--color-sky-600)}.border-slate-100{border-color:var(--color-slate-100)}.border-slate-200{border-color:var(--color-slate-200)}.border-slate-300{border-color:var(--color-slate-300)}.border-slate-400{border-color:var(--color-slate-400)}.border-slate-500{border-color:var(--color-slate-500)}.border-slate-900{border-color:var(--color-slate-900)}.border-transparent{border-color:transparent}.border-yellow-700{border-color:var(--color-yellow-700)}.border-t-emerald-500{border-top-color:var(--color-emerald-500)}.border-t-sky-600{border-top-color:var(--color-sky-600)}.border-t-slate-500{border-top-color:var(--color-slate-500)}.border-l-amber-500{border-left-color:var(--color-amber-500)}.border-l-emerald-500{border-left-color:var(--color-emerald-500)}.border-l-rose-500{border-left-color:var(--color-rose-500)}.border-l-slate-400{border-left-color:var(--color-slate-400)}.bg-\[\#fcd34d\]\/25{background-color:color-mix(in oklab,#fcd34d 25%,transparent)}.bg-\[\#fef2f2\]{background-color:#fef2f2}.bg-\[\#fff7d1\]{background-color:#fff7d1}.bg-\[\#fffdf8\]{background-color:#fffdf8}.bg-\[\#fffdf8\]\/95{background-color:color-mix(in oklab,#fffdf8 95%,transparent)}.bg-\[rgba\(255\,212\,0\,0\.8\)\]{background-color:#ffd400cc}.bg-amber-50{background-color:var(--color-amber-50)}.bg-amber-100{background-color:var(--color-amber-100)}.bg-amber-100\/60{background-color:color-mix(in srgb,oklch(96.2% .059 95.617) 60%,transparent)}@supports (color: color-mix(in lab,red,red)){.bg-amber-100\/60{background-color:color-mix(in oklab,var(--color-amber-100) 60%,transparent)}}.bg-amber-300{background-color:var(--color-amber-300)}.bg-amber-500{background-color:var(--color-amber-500)}.bg-emerald-50{background-color:var(--color-emerald-50)}.bg-emerald-100{background-color:var(--color-emerald-100)}.bg-emerald-400{background-color:var(--color-emerald-400)}.bg-emerald-500{background-color:var(--color-emerald-500)}.bg-red-50{background-color:var(--color-red-50)}.bg-red-100{background-color:var(--color-red-100)}.bg-red-600{background-color:var(--color-red-600)}.bg-rose-50{background-color:var(--color-rose-50)}.bg-rose-100{background-color:var(--color-rose-100)}.bg-rose-500{background-color:var(--color-rose-500)}.bg-rose-600{background-color:var(--color-rose-600)}.bg-sky-50{background-color:var(--color-sky-50)}.bg-sky-100{background-color:var(--color-sky-100)}.bg-sky-500{background-color:var(--color-sky-500)}.bg-sky-600{background-color:var(--color-sky-600)}.bg-slate-50{background-color:var(--color-slate-50)}.bg-slate-50\/80{background-color:color-mix(in srgb,oklch(98.4% .003 247.858) 80%,transparent)}@supports (color: color-mix(in lab,red,red)){.bg-slate-50\/80{background-color:color-mix(in oklab,var(--color-slate-50) 80%,transparent)}}.bg-slate-100{background-color:var(--color-slate-100)}.bg-slate-200{background-color:var(--color-slate-200)}.bg-slate-400{background-color:var(--color-slate-400)}.bg-slate-900{background-color:var(--color-slate-900)}.bg-transparent{background-color:transparent}.bg-white{background-color:var(--color-white)}.bg-white\/30{background-color:color-mix(in srgb,#fff 30%,transparent)}@supports (color: color-mix(in lab,red,red)){.bg-white\/30{background-color:color-mix(in oklab,var(--color-white) 30%,transparent)}}.bg-white\/60{background-color:color-mix(in srgb,#fff 60%,transparent)}@supports (color: color-mix(in lab,red,red)){.bg-white\/60{background-color:color-mix(in oklab,var(--color-white) 60%,transparent)}}.bg-white\/70{background-color:color-mix(in srgb,#fff 70%,transparent)}@supports (color: color-mix(in lab,red,red)){.bg-white\/70{background-color:color-mix(in oklab,var(--color-white) 70%,transparent)}}.bg-white\/80{background-color:color-mix(in srgb,#fff 80%,transparent)}@supports (color: color-mix(in lab,red,red)){.bg-white\/80{background-color:color-mix(in oklab,var(--color-white) 80%,transparent)}}.bg-white\/85{background-color:color-mix(in srgb,#fff 85%,transparent)}@supports (color: color-mix(in lab,red,red)){.bg-white\/85{background-color:color-mix(in oklab,var(--color-white) 85%,transparent)}}.bg-white\/95{background-color:color-mix(in srgb,#fff 95%,transparent)}@supports (color: color-mix(in lab,red,red)){.bg-white\/95{background-color:color-mix(in oklab,var(--color-white) 95%,transparent)}}.bg-yellow-400{background-color:var(--color-yellow-400)}.bg-gradient-to-b{--tw-gradient-position: to bottom in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.bg-gradient-to-r{--tw-gradient-position: to right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.bg-\[radial-gradient\(circle_at_12\%_18\%\,\#fde68a_0_8\%\,transparent_45\%\)\,radial-gradient\(circle_at_82\%_12\%\,\#fcd34d_0_10\%\,transparent_48\%\)\,linear-gradient\(140deg\,\#fff7d1_0\%\,\#fef3c7_46\%\,\#fef3c7_100\%\)\]{background-image:radial-gradient(circle at 12% 18%,#fde68a 0 8%,transparent 45%),radial-gradient(circle at 82% 12%,#fcd34d 0 10%,transparent 48%),linear-gradient(140deg,#fff7d1,#fef3c7 46% 100%)}.from-\[\#fcd34d\]{--tw-gradient-from: #fcd34d;--tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-amber-500{--tw-gradient-from: var(--color-amber-500);--tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-emerald-500{--tw-gradient-from: var(--color-emerald-500);--tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.via-amber-400{--tw-gradient-via: var(--color-amber-400);--tw-gradient-via-stops: var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-via-stops)}.via-emerald-400{--tw-gradient-via: var(--color-emerald-400);--tw-gradient-via-stops: var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-via-stops)}.to-\[\#fcd34d\]{--tw-gradient-to: #fcd34d;--tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-lime-300{--tw-gradient-to: var(--color-lime-300);--tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-yellow-300{--tw-gradient-to: var(--color-yellow-300);--tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.stroke-\[3\]{stroke-width:3}.p-0{padding:calc(var(--spacing) * 0)}.p-2{padding:calc(var(--spacing) * 2)}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.p-5{padding:calc(var(--spacing) * 5)}.p-6{padding:calc(var(--spacing) * 6)}.p-8{padding:calc(var(--spacing) * 8)}.p-14{padding:calc(var(--spacing) * 14)}.p-16{padding:calc(var(--spacing) * 16)}.px-1{padding-inline:calc(var(--spacing) * 1)}.px-1\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-3\.5{padding-inline:calc(var(--spacing) * 3.5)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-5{padding-inline:calc(var(--spacing) * 5)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:calc(var(--spacing) * 1)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-2\.5{padding-block:calc(var(--spacing) * 2.5)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-3\.5{padding-block:calc(var(--spacing) * 3.5)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-5{padding-block:calc(var(--spacing) * 5)}.py-6{padding-block:calc(var(--spacing) * 6)}.py-12{padding-block:calc(var(--spacing) * 12)}.py-14{padding-block:calc(var(--spacing) * 14)}.pt-1{padding-top:calc(var(--spacing) * 1)}.pt-3{padding-top:calc(var(--spacing) * 3)}.pr-10{padding-right:calc(var(--spacing) * 10)}.pb-1{padding-bottom:calc(var(--spacing) * 1)}.pb-2{padding-bottom:calc(var(--spacing) * 2)}.pb-4{padding-bottom:calc(var(--spacing) * 4)}.pb-5{padding-bottom:calc(var(--spacing) * 5)}.pl-3{padding-left:calc(var(--spacing) * 3)}.text-center{text-align:center}.text-left{text-align:left}.align-middle{vertical-align:middle}.font-mono{font-family:var(--font-mono)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading, var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading, var(--text-3xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading, var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading, var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading, var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading, var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading, var(--text-xs--line-height))}.text-\[0\.72rem\]{font-size:.72rem}.text-\[9px\]{font-size:9px}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[clamp\(1\.55rem\,2\.7vw\,2rem\)\]{font-size:clamp(1.55rem,2.7vw,2rem)}.leading-6{--tw-leading: calc(var(--spacing) * 6);line-height:calc(var(--spacing) * 6)}.leading-none{--tw-leading: 1;line-height:1}.leading-tight{--tw-leading: var(--leading-tight);line-height:var(--leading-tight)}.font-bold{--tw-font-weight: var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight: var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight: var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-\[0\.1em\]{--tw-tracking: .1em;letter-spacing:.1em}.tracking-\[0\.12em\]{--tw-tracking: .12em;letter-spacing:.12em}.tracking-\[0\.13em\]{--tw-tracking: .13em;letter-spacing:.13em}.tracking-tight{--tw-tracking: var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-wide{--tw-tracking: var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-wider{--tw-tracking: var(--tracking-wider);letter-spacing:var(--tracking-wider)}.tracking-widest{--tw-tracking: var(--tracking-widest);letter-spacing:var(--tracking-widest)}.break-all{word-break:break-all}.whitespace-nowrap{white-space:nowrap}.text-\[\#1f2933\]{color:#1f2933}.text-\[\#5c6470\]{color:#5c6470}.text-\[\#7c5d00\]{color:#7c5d00}.text-\[\#b91c1c\]{color:#b91c1c}.text-\[\#fcd34d\]{color:#fcd34d}.text-amber-500{color:var(--color-amber-500)}.text-amber-600{color:var(--color-amber-600)}.text-amber-700{color:var(--color-amber-700)}.text-amber-800{color:var(--color-amber-800)}.text-emerald-400{color:var(--color-emerald-400)}.text-emerald-600{color:var(--color-emerald-600)}.text-emerald-700{color:var(--color-emerald-700)}.text-red-400{color:var(--color-red-400)}.text-red-500{color:var(--color-red-500)}.text-red-600{color:var(--color-red-600)}.text-red-700{color:var(--color-red-700)}.text-red-800{color:var(--color-red-800)}.text-rose-500{color:var(--color-rose-500)}.text-rose-600{color:var(--color-rose-600)}.text-rose-700{color:var(--color-rose-700)}.text-sky-700{color:var(--color-sky-700)}.text-slate-200{color:var(--color-slate-200)}.text-slate-300{color:var(--color-slate-300)}.text-slate-400{color:var(--color-slate-400)}.text-slate-500{color:var(--color-slate-500)}.text-slate-600{color:var(--color-slate-600)}.text-slate-700{color:var(--color-slate-700)}.text-slate-800{color:var(--color-slate-800)}.text-slate-900{color:var(--color-slate-900)}.text-slate-950{color:var(--color-slate-950)}.text-white{color:var(--color-white)}.text-white\/70{color:color-mix(in srgb,#fff 70%,transparent)}@supports (color: color-mix(in lab,red,red)){.text-white\/70{color:color-mix(in oklab,var(--color-white) 70%,transparent)}}.lowercase{text-transform:lowercase}.uppercase{text-transform:uppercase}.italic{font-style:italic}.underline{text-decoration-line:underline}.opacity-0{opacity:0%}.opacity-40{opacity:40%}.opacity-100{opacity:100%}.shadow{--tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / .1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / .1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-2xl{--tw-shadow: 0 25px 50px -12px var(--tw-shadow-color, rgb(0 0 0 / .25));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_14px_36px_-30px_rgba\(15\,23\,42\,0\.55\)\]{--tw-shadow: 0 14px 36px -30px var(--tw-shadow-color, rgba(15,23,42,.55));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_16px_40px_-36px_rgba\(15\,23\,42\,0\.55\)\]{--tw-shadow: 0 16px 40px -36px var(--tw-shadow-color, rgba(15,23,42,.55));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_22px_50px_rgba\(15\,23\,42\,0\.12\)\]{--tw-shadow: 0 22px 50px var(--tw-shadow-color, rgba(15,23,42,.12));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_24px_54px_rgba\(17\,24\,39\,0\.18\)\,0_3px_12px_rgba\(252\,211\,77\,0\.4\)\]{--tw-shadow: 0 24px 54px var(--tw-shadow-color, rgba(17,24,39,.18)), 0 3px 12px var(--tw-shadow-color, rgba(252,211,77,.4));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-sm{--tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / .1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / .1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-1{--tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-2{--tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-rose-100\/60{--tw-shadow-color: color-mix(in srgb, oklch(94.1% .03 12.58) 60%, transparent)}@supports (color: color-mix(in lab,red,red)){.shadow-rose-100\/60{--tw-shadow-color: color-mix(in oklab, color-mix(in oklab, var(--color-rose-100) 60%, transparent) var(--tw-shadow-alpha), transparent)}}.shadow-slate-200\/60{--tw-shadow-color: color-mix(in srgb, oklch(92.9% .013 255.508) 60%, transparent)}@supports (color: color-mix(in lab,red,red)){.shadow-slate-200\/60{--tw-shadow-color: color-mix(in oklab, color-mix(in oklab, var(--color-slate-200) 60%, transparent) var(--tw-shadow-alpha), transparent)}}.ring-amber-100{--tw-ring-color: var(--color-amber-100)}.ring-sky-100{--tw-ring-color: var(--color-sky-100)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.blur{--tw-blur: blur(8px);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.blur-3xl{--tw-blur: blur(var(--blur-3xl));filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.backdrop-blur-sm{--tw-backdrop-blur: blur(var(--blur-sm));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease, var(--default-transition-timing-function));transition-duration:var(--tw-duration, var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease, var(--default-transition-timing-function));transition-duration:var(--tw-duration, var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease, var(--default-transition-timing-function));transition-duration:var(--tw-duration, var(--default-transition-duration))}.transition-shadow{transition-property:box-shadow;transition-timing-function:var(--tw-ease, var(--default-transition-timing-function));transition-duration:var(--tw-duration, var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease, var(--default-transition-timing-function));transition-duration:var(--tw-duration, var(--default-transition-duration))}.duration-200{--tw-duration: .2s;transition-duration:.2s}.ease-in-out{--tw-ease: var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.ease-out{--tw-ease: var(--ease-out);transition-timing-function:var(--ease-out)}.outline-none{--tw-outline-style: none;outline-style:none}.ring-inset{--tw-ring-inset: inset}@media(hover:hover){.group-hover\:scale-110:is(:where(.group):hover *){--tw-scale-x: 110%;--tw-scale-y: 110%;--tw-scale-z: 110%;scale:var(--tw-scale-x) var(--tw-scale-y)}}@media(hover:hover){.group-hover\:border-amber-300:is(:where(.group):hover *){border-color:var(--color-amber-300)}}@media(hover:hover){.group-hover\:border-slate-300:is(:where(.group):hover *){border-color:var(--color-slate-300)}}.placeholder\:text-slate-400::placeholder{color:var(--color-slate-400)}.backdrop\:bg-black\/45::backdrop{background-color:color-mix(in srgb,#000 45%,transparent)}@supports (color: color-mix(in lab,red,red)){.backdrop\:bg-black\/45::backdrop{background-color:color-mix(in oklab,var(--color-black) 45%,transparent)}}.backdrop\:bg-slate-900\/50::backdrop{background-color:color-mix(in srgb,oklch(20.8% .042 265.755) 50%,transparent)}@supports (color: color-mix(in lab,red,red)){.backdrop\:bg-slate-900\/50::backdrop{background-color:color-mix(in oklab,var(--color-slate-900) 50%,transparent)}}@media(hover:hover){.hover\:-translate-y-0\.5:hover{--tw-translate-y: calc(var(--spacing) * -.5);translate:var(--tw-translate-x) var(--tw-translate-y)}}@media(hover:hover){.hover\:-translate-y-px:hover{--tw-translate-y: -1px;translate:var(--tw-translate-x) var(--tw-translate-y)}}@media(hover:hover){.hover\:border-amber-300:hover{border-color:var(--color-amber-300)}}@media(hover:hover){.hover\:border-red-200:hover{border-color:var(--color-red-200)}}@media(hover:hover){.hover\:border-red-300:hover{border-color:var(--color-red-300)}}@media(hover:hover){.hover\:border-slate-300:hover{border-color:var(--color-slate-300)}}@media(hover:hover){.hover\:border-slate-800:hover{border-color:var(--color-slate-800)}}@media(hover:hover){.hover\:bg-amber-100:hover{background-color:var(--color-amber-100)}}@media(hover:hover){.hover\:bg-amber-200:hover{background-color:var(--color-amber-200)}}@media(hover:hover){.hover\:bg-red-50:hover{background-color:var(--color-red-50)}}@media(hover:hover){.hover\:bg-red-100:hover{background-color:var(--color-red-100)}}@media(hover:hover){.hover\:bg-red-200:hover{background-color:var(--color-red-200)}}@media(hover:hover){.hover\:bg-red-700:hover{background-color:var(--color-red-700)}}@media(hover:hover){.hover\:bg-rose-500:hover{background-color:var(--color-rose-500)}}@media(hover:hover){.hover\:bg-sky-500:hover{background-color:var(--color-sky-500)}}@media(hover:hover){.hover\:bg-slate-50:hover{background-color:var(--color-slate-50)}}@media(hover:hover){.hover\:bg-slate-50\/80:hover{background-color:color-mix(in srgb,oklch(98.4% .003 247.858) 80%,transparent)}@supports (color: color-mix(in lab,red,red)){.hover\:bg-slate-50\/80:hover{background-color:color-mix(in oklab,var(--color-slate-50) 80%,transparent)}}}@media(hover:hover){.hover\:bg-slate-100:hover{background-color:var(--color-slate-100)}}@media(hover:hover){.hover\:bg-slate-200:hover{background-color:var(--color-slate-200)}}@media(hover:hover){.hover\:bg-slate-800:hover{background-color:var(--color-slate-800)}}@media(hover:hover){.hover\:bg-white:hover{background-color:var(--color-white)}}@media(hover:hover){.hover\:text-amber-600:hover{color:var(--color-amber-600)}}@media(hover:hover){.hover\:text-red-600:hover{color:var(--color-red-600)}}@media(hover:hover){.hover\:text-red-700:hover{color:var(--color-red-700)}}@media(hover:hover){.hover\:text-slate-600:hover{color:var(--color-slate-600)}}@media(hover:hover){.hover\:text-slate-700:hover{color:var(--color-slate-700)}}@media(hover:hover){.hover\:shadow-\[0_20px_48px_-36px_rgba\(15\,23\,42\,0\.65\)\]:hover{--tw-shadow: 0 20px 48px -36px var(--tw-shadow-color, rgba(15,23,42,.65));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}@media(hover:hover){.hover\:shadow-md:hover{--tw-shadow: 0 4px 6px -1px var(--tw-shadow-color, rgb(0 0 0 / .1)), 0 2px 4px -2px var(--tw-shadow-color, rgb(0 0 0 / .1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}@media(hover:hover){.hover\:brightness-105:hover{--tw-brightness: brightness(105%);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}}.focus\:border-amber-300:focus{border-color:var(--color-amber-300)}.focus\:border-amber-400:focus{border-color:var(--color-amber-400)}.focus\:border-sky-500:focus{border-color:var(--color-sky-500)}.focus\:bg-white:focus{background-color:var(--color-white)}.focus\:ring-2:focus{--tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-3:focus{--tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-amber-100:focus{--tw-ring-color: var(--color-amber-100)}.focus\:ring-amber-400\/20:focus{--tw-ring-color: color-mix(in srgb, oklch(82.8% .189 84.429) 20%, transparent)}@supports (color: color-mix(in lab,red,red)){.focus\:ring-amber-400\/20:focus{--tw-ring-color: color-mix(in oklab, var(--color-amber-400) 20%, transparent)}}.focus\:ring-sky-100:focus{--tw-ring-color: var(--color-sky-100)}.focus\:outline-none:focus{--tw-outline-style: none;outline-style:none}.focus-visible\:border-slate-500:focus-visible{border-color:var(--color-slate-500)}.focus-visible\:ring-4:focus-visible{--tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-slate-500\/10:focus-visible{--tw-ring-color: color-mix(in srgb, oklch(55.4% .046 257.417) 10%, transparent)}@supports (color: color-mix(in lab,red,red)){.focus-visible\:ring-slate-500\/10:focus-visible{--tw-ring-color: color-mix(in oklab, var(--color-slate-500) 10%, transparent)}}.focus-visible\:outline-2:focus-visible{outline-style:var(--tw-outline-style);outline-width:2px}.focus-visible\:outline-offset-1:focus-visible{outline-offset:1px}.focus-visible\:outline-offset-2:focus-visible{outline-offset:2px}.focus-visible\:outline-amber-400:focus-visible{outline-color:var(--color-amber-400)}.focus-visible\:outline-red-400:focus-visible{outline-color:var(--color-red-400)}.focus-visible\:outline-red-500:focus-visible{outline-color:var(--color-red-500)}.focus-visible\:outline-red-600:focus-visible{outline-color:var(--color-red-600)}.focus-visible\:outline-rose-500:focus-visible{outline-color:var(--color-rose-500)}.focus-visible\:outline-sky-600:focus-visible{outline-color:var(--color-sky-600)}.focus-visible\:outline-slate-400:focus-visible{outline-color:var(--color-slate-400)}.focus-visible\:outline-slate-500:focus-visible{outline-color:var(--color-slate-500)}.focus-visible\:outline-slate-600:focus-visible{outline-color:var(--color-slate-600)}.focus-visible\:outline-slate-900:focus-visible{outline-color:var(--color-slate-900)}.focus-visible\:outline-yellow-500:focus-visible{outline-color:var(--color-yellow-500)}.focus-visible\:outline-none:focus-visible{--tw-outline-style: none;outline-style:none}.active\:scale-\[0\.98\]:active{scale:.98}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:border-slate-300:disabled{border-color:var(--color-slate-300)}.disabled\:border-slate-400:disabled{border-color:var(--color-slate-400)}.disabled\:bg-slate-100:disabled{background-color:var(--color-slate-100)}.disabled\:bg-slate-200:disabled{background-color:var(--color-slate-200)}.disabled\:bg-slate-300:disabled{background-color:var(--color-slate-300)}.disabled\:text-slate-400:disabled{color:var(--color-slate-400)}.disabled\:text-slate-500:disabled{color:var(--color-slate-500)}.disabled\:text-slate-700:disabled{color:var(--color-slate-700)}.disabled\:opacity-40:disabled{opacity:40%}.disabled\:opacity-70:disabled{opacity:70%}@media(width>=40rem){.sm\:w-auto{width:auto}}@media(width>=40rem){.sm\:min-w-\[20rem\]{min-width:20rem}}@media(width>=40rem){.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(width>=40rem){.sm\:flex-row{flex-direction:row}}@media(width>=40rem){.sm\:items-end{align-items:flex-end}}@media(width>=40rem){.sm\:justify-between{justify-content:space-between}}@media(width>=40rem){.sm\:p-6{padding:calc(var(--spacing) * 6)}}@media(width>=40rem){.sm\:p-8{padding:calc(var(--spacing) * 8)}}@media(width>=40rem){.sm\:px-3{padding-inline:calc(var(--spacing) * 3)}}@media(width>=40rem){.sm\:pl-4{padding-left:calc(var(--spacing) * 4)}}@media(width>=40rem){.sm\:text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading, var(--text-4xl--line-height))}}@media(width>=40rem){.sm\:text-base{font-size:var(--text-base);line-height:var(--tw-leading, var(--text-base--line-height))}}@media(width>=40rem){.sm\:text-lg{font-size:var(--text-lg);line-height:var(--tw-leading, var(--text-lg--line-height))}}@media(width>=48rem){.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(width>=48rem){.md\:grid-cols-\[180px_1fr\]{grid-template-columns:180px 1fr}}@media(width>=48rem){.md\:text-base{font-size:var(--text-base);line-height:var(--tw-leading, var(--text-base--line-height))}}@media(width>=64rem){.lg\:col-span-3{grid-column:span 3 / span 3}}@media(width>=64rem){.lg\:flex{display:flex}}@media(width>=64rem){.lg\:hidden{display:none}}@media(width>=64rem){.lg\:h-0{height:calc(var(--spacing) * 0)}}@media(width>=64rem){.lg\:h-6{height:calc(var(--spacing) * 6)}}@media(width>=64rem){.lg\:w-\[30\%\]{width:30%}}@media(width>=64rem){.lg\:w-\[70\%\]{width:70%}}@media(width>=64rem){.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(width>=64rem){.lg\:flex-row{flex-direction:row}}@media(width>=64rem){.lg\:items-end{align-items:flex-end}}@media(width>=64rem){.lg\:justify-between{justify-content:space-between}}@media(width>=64rem){.lg\:px-4{padding-inline:calc(var(--spacing) * 4)}}@media(width>=96rem){.\32xl\:col-span-2{grid-column:span 2 / span 2}}@media(width>=96rem){.\32xl\:col-span-3{grid-column:span 3 / span 3}}.\[\&\:\:-webkit-scrollbar\]\:w-2::-webkit-scrollbar{width:calc(var(--spacing) * 2)}.\[\&\:\:-webkit-scrollbar-thumb\]\:rounded-full::-webkit-scrollbar-thumb{border-radius:calc(infinity * 1px)}.\[\&\:\:-webkit-scrollbar-thumb\]\:bg-\[rgb\(210\,210\,210\)\]::-webkit-scrollbar-thumb{background-color:#d2d2d2}.\[\&\:\:-webkit-scrollbar-track\]\:my-5::-webkit-scrollbar-track{margin-block:calc(var(--spacing) * 5)}}:root{--care-font-display: "Syne", sans-serif;--care-font-body: "DM Sans", sans-serif;--care-bg-soft: #ffffff;--care-bg-panel: #ffffff;--care-card-border-width: 1.28px;--care-border: #d3dce7;--care-ink: #3f2b16;--care-muted: #7c5a33;--care-primary: #d97706;--care-primary-strong: #b45309;--care-danger-bg: #fff1f2;--care-danger-border: #fecdd3;--care-danger-text: #be123c}body{font-family:var(--care-font-body);color:var(--care-ink)}.font-display{font-family:var(--care-font-display)}.care-page{display:flex;flex-direction:column;gap:1rem;font-size:1.02rem;border:var(--care-card-border-width) solid var(--care-border);border-radius:1.1rem;padding:1rem;background-color:var(--care-bg-soft);box-shadow:0 18px 38px -34px #92400e73;min-width:0;overflow-x:hidden;width:100%;box-sizing:border-box}.care-dot-grid{background-color:#fff;background-image:radial-gradient(circle,#d9e0ea 1px,transparent 1px);background-size:22px 22px}.care-page__hero{display:flex;justify-content:space-between;align-items:flex-start;gap:1rem;border:var(--care-card-border-width) solid var(--care-border);border-radius:1rem;padding:1rem;background:var(--care-bg-panel);-webkit-backdrop-filter:blur(5px);backdrop-filter:blur(5px);min-width:0}.care-eyebrow{margin:0;font-size:.78rem;font-weight:700;letter-spacing:.12em;text-transform:uppercase;color:var(--care-muted)}.care-title{margin:.2rem 0 0;font-size:clamp(1.4rem,2.2vw,1.95rem);line-height:1.2;font-family:var(--care-font-display);font-weight:700;letter-spacing:-.015em;color:var(--care-ink)}.care-subtitle{margin:.4rem 0 0;font-size:1rem;color:var(--care-muted)}.care-chip{display:inline-flex;align-items:center;gap:.45rem;margin:0;border:1px solid #f4cf92;border-radius:999px;background:#fff6e5fa;color:#8a5207;padding:.4rem .75rem;font-size:.84rem;font-weight:600}.care-chip__dot{width:.46rem;height:.46rem;border-radius:999px;background:#f59e0b}.care-page__header-badge{display:inline-flex;align-items:center;gap:.45rem;border:1px solid #f4d7a3;border-radius:999px;padding:.42rem .78rem;background:#fff7e4;color:#7a4b10;font-size:.8rem;font-weight:700}.care-page__header-badge-dot{width:.46rem;height:.46rem;border-radius:999px;background:#f59e0b}.care-field{display:grid;gap:.35rem}.care-field label{font-size:.86rem;font-weight:600;color:#334155}.care-select{min-height:2.35rem;width:100%;border:1px solid #e6c389;border-radius:.62rem;padding:0 .65rem;background:#fffdf8;color:#3f2b16;font-size:.96rem}.care-select:focus-visible{outline:2px solid #f59e0b;outline-offset:1px}.care-button{display:inline-flex;align-items:center;justify-content:center;gap:.45rem;min-height:2.35rem;border:1px solid rgba(217,119,6,.36);border-radius:.62rem;background:linear-gradient(120deg,#fcd34d,#fbbf24);color:#1f2937;font-size:.9rem;font-weight:700;letter-spacing:.01em;padding:0 .95rem;cursor:pointer;box-shadow:0 8px 14px #f59e0b3d;transition:transform .12s ease,background-color .14s ease,border-color .14s ease}.care-button:hover{background:#fef3c7bf;border-color:#f59e0b47}.care-button:active{transform:scale(.98)}.care-button:disabled,.care-select:disabled{cursor:not-allowed;opacity:.65}.care-btn{display:inline-flex;align-items:center;justify-content:center;gap:.45rem;min-height:2.35rem;padding:0 .95rem;border:1px solid #efcc97;border-radius:.62rem;font-size:.88rem;font-weight:700;line-height:1.2;letter-spacing:.01em;cursor:pointer;transition:transform .12s ease,background-color .14s ease,border-color .14s ease}.care-btn--compact{min-height:2rem;padding:0 .72rem;font-size:.78rem}.care-btn--primary{border-color:#d977065c;background:linear-gradient(120deg,#fcd34d,#fbbf24);color:#1f2937;box-shadow:0 8px 14px #f59e0b3d}.care-btn--primary:hover{background:#fef3c7bf;border-color:#f59e0b47}.care-btn--neutral{border-color:#e4dccf;background:#fffdf8;color:#5f3f17}.care-btn--danger{border-color:#991b1b;background:#b91c1c;color:#fff}.care-btn--icon{height:2rem;width:2rem;padding:0;min-height:2rem}.care-btn:hover{filter:brightness(.98)}.care-btn:active{transform:scale(.98)}.care-btn:disabled{cursor:not-allowed;opacity:.55;transform:none;filter:none}.care-link{color:#b45309;font-size:.9rem;font-weight:600;text-decoration:none}.care-link:hover{text-decoration:underline}.care-panel{border:var(--care-card-border-width) solid var(--care-border);border-radius:.92rem;padding:.95rem;background:var(--care-bg-panel);box-shadow:0 10px 28px -26px #0f172ab3}.care-alert{margin:0;border:1px solid var(--care-danger-border);border-radius:.72rem;background:var(--care-danger-bg);color:var(--care-danger-text);padding:.62rem .78rem;font-size:.94rem}.care-loading{margin:0;border:1px dashed #f2c56e;border-radius:.72rem;background:#fff7e6;color:#92400e;font-size:.94rem;padding:.65rem .78rem}.sidebar-page{gap:1.25rem}.care-pagination{display:flex;align-items:center;justify-content:flex-end;gap:.75rem;margin-top:.4rem}.care-pagination__button{border:1px solid #e4dccf;border-radius:.72rem;background:#fffdf7;color:#6b3f0b;font-size:.875rem;font-weight:700;line-height:1.25rem;padding:.35rem .78rem;cursor:pointer;transition:background-color .12s ease}.care-pagination__button:hover{background:#fff4dc}.care-pagination__button:disabled{opacity:.45;cursor:not-allowed}.care-pagination__status{color:#7c5a33;font-size:.875rem;font-weight:700}@media(max-width:960px){.care-page{padding:.8rem}.care-page__hero{flex-direction:column;align-items:stretch}}@property --tw-translate-x{syntax: "*"; inherits: false; initial-value: 0;}@property --tw-translate-y{syntax: "*"; inherits: false; initial-value: 0;}@property --tw-translate-z{syntax: "*"; inherits: false; initial-value: 0;}@property --tw-rotate-x{syntax: "*"; inherits: false;}@property --tw-rotate-y{syntax: "*"; inherits: false;}@property --tw-rotate-z{syntax: "*"; inherits: false;}@property --tw-skew-x{syntax: "*"; inherits: false;}@property --tw-skew-y{syntax: "*"; inherits: false;}@property --tw-space-y-reverse{syntax: "*"; inherits: false; initial-value: 0;}@property --tw-divide-x-reverse{syntax: "*"; inherits: false; initial-value: 0;}@property --tw-border-style{syntax: "*"; inherits: false; initial-value: solid;}@property --tw-divide-y-reverse{syntax: "*"; inherits: false; initial-value: 0;}@property --tw-gradient-position{syntax: "*"; inherits: false;}@property --tw-gradient-from{syntax: ""; inherits: false; initial-value: #0000;}@property --tw-gradient-via{syntax: ""; inherits: false; initial-value: #0000;}@property --tw-gradient-to{syntax: ""; inherits: false; initial-value: #0000;}@property --tw-gradient-stops{syntax: "*"; inherits: false;}@property --tw-gradient-via-stops{syntax: "*"; inherits: false;}@property --tw-gradient-from-position{syntax: ""; inherits: false; initial-value: 0%;}@property --tw-gradient-via-position{syntax: ""; inherits: false; initial-value: 50%;}@property --tw-gradient-to-position{syntax: ""; inherits: false; initial-value: 100%;}@property --tw-leading{syntax: "*"; inherits: false;}@property --tw-font-weight{syntax: "*"; inherits: false;}@property --tw-tracking{syntax: "*"; inherits: false;}@property --tw-shadow{syntax: "*"; inherits: false; initial-value: 0 0 #0000;}@property --tw-shadow-color{syntax: "*"; inherits: false;}@property --tw-shadow-alpha{syntax: ""; inherits: false; initial-value: 100%;}@property --tw-inset-shadow{syntax: "*"; inherits: false; initial-value: 0 0 #0000;}@property --tw-inset-shadow-color{syntax: "*"; inherits: false;}@property --tw-inset-shadow-alpha{syntax: ""; inherits: false; initial-value: 100%;}@property --tw-ring-color{syntax: "*"; inherits: false;}@property --tw-ring-shadow{syntax: "*"; inherits: false; initial-value: 0 0 #0000;}@property --tw-inset-ring-color{syntax: "*"; inherits: false;}@property --tw-inset-ring-shadow{syntax: "*"; inherits: false; initial-value: 0 0 #0000;}@property --tw-ring-inset{syntax: "*"; inherits: false;}@property --tw-ring-offset-width{syntax: ""; inherits: false; initial-value: 0px;}@property --tw-ring-offset-color{syntax: "*"; inherits: false; initial-value: #fff;}@property --tw-ring-offset-shadow{syntax: "*"; inherits: false; initial-value: 0 0 #0000;}@property --tw-outline-style{syntax: "*"; inherits: false; initial-value: solid;}@property --tw-blur{syntax: "*"; inherits: false;}@property --tw-brightness{syntax: "*"; inherits: false;}@property --tw-contrast{syntax: "*"; inherits: false;}@property --tw-grayscale{syntax: "*"; inherits: false;}@property --tw-hue-rotate{syntax: "*"; inherits: false;}@property --tw-invert{syntax: "*"; inherits: false;}@property --tw-opacity{syntax: "*"; inherits: false;}@property --tw-saturate{syntax: "*"; inherits: false;}@property --tw-sepia{syntax: "*"; inherits: false;}@property --tw-drop-shadow{syntax: "*"; inherits: false;}@property --tw-drop-shadow-color{syntax: "*"; inherits: false;}@property --tw-drop-shadow-alpha{syntax: ""; inherits: false; initial-value: 100%;}@property --tw-drop-shadow-size{syntax: "*"; inherits: false;}@property --tw-backdrop-blur{syntax: "*"; inherits: false;}@property --tw-backdrop-brightness{syntax: "*"; inherits: false;}@property --tw-backdrop-contrast{syntax: "*"; inherits: false;}@property --tw-backdrop-grayscale{syntax: "*"; inherits: false;}@property --tw-backdrop-hue-rotate{syntax: "*"; inherits: false;}@property --tw-backdrop-invert{syntax: "*"; inherits: false;}@property --tw-backdrop-opacity{syntax: "*"; inherits: false;}@property --tw-backdrop-saturate{syntax: "*"; inherits: false;}@property --tw-backdrop-sepia{syntax: "*"; inherits: false;}@property --tw-duration{syntax: "*"; inherits: false;}@property --tw-ease{syntax: "*"; inherits: false;}@property --tw-scale-x{syntax: "*"; inherits: false; initial-value: 1;}@property --tw-scale-y{syntax: "*"; inherits: false; initial-value: 1;}@property --tw-scale-z{syntax: "*"; inherits: false; initial-value: 1;}@keyframes spin{to{transform:rotate(360deg)}}@keyframes ping{75%,to{transform:scale(2);opacity:0}}@keyframes pulse{50%{opacity:.5}}@keyframes bounce{0%,to{transform:translateY(-25%);animation-timing-function:cubic-bezier(.8,0,1,1)}50%{transform:none;animation-timing-function:cubic-bezier(0,0,.2,1)}}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x: 0;--tw-translate-y: 0;--tw-translate-z: 0;--tw-rotate-x: initial;--tw-rotate-y: initial;--tw-rotate-z: initial;--tw-skew-x: initial;--tw-skew-y: initial;--tw-space-y-reverse: 0;--tw-divide-x-reverse: 0;--tw-border-style: solid;--tw-divide-y-reverse: 0;--tw-gradient-position: initial;--tw-gradient-from: #0000;--tw-gradient-via: #0000;--tw-gradient-to: #0000;--tw-gradient-stops: initial;--tw-gradient-via-stops: initial;--tw-gradient-from-position: 0%;--tw-gradient-via-position: 50%;--tw-gradient-to-position: 100%;--tw-leading: initial;--tw-font-weight: initial;--tw-tracking: initial;--tw-shadow: 0 0 #0000;--tw-shadow-color: initial;--tw-shadow-alpha: 100%;--tw-inset-shadow: 0 0 #0000;--tw-inset-shadow-color: initial;--tw-inset-shadow-alpha: 100%;--tw-ring-color: initial;--tw-ring-shadow: 0 0 #0000;--tw-inset-ring-color: initial;--tw-inset-ring-shadow: 0 0 #0000;--tw-ring-inset: initial;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-offset-shadow: 0 0 #0000;--tw-outline-style: solid;--tw-blur: initial;--tw-brightness: initial;--tw-contrast: initial;--tw-grayscale: initial;--tw-hue-rotate: initial;--tw-invert: initial;--tw-opacity: initial;--tw-saturate: initial;--tw-sepia: initial;--tw-drop-shadow: initial;--tw-drop-shadow-color: initial;--tw-drop-shadow-alpha: 100%;--tw-drop-shadow-size: initial;--tw-backdrop-blur: initial;--tw-backdrop-brightness: initial;--tw-backdrop-contrast: initial;--tw-backdrop-grayscale: initial;--tw-backdrop-hue-rotate: initial;--tw-backdrop-invert: initial;--tw-backdrop-opacity: initial;--tw-backdrop-saturate: initial;--tw-backdrop-sepia: initial;--tw-duration: initial;--tw-ease: initial;--tw-scale-x: 1;--tw-scale-y: 1;--tw-scale-z: 1}}} +/*# sourceMappingURL=styles-WDPUUAG4.css.map */ diff --git a/frontend/dist-instrumented/styles-WDPUUAG4.css.map b/frontend/dist-instrumented/styles-WDPUUAG4.css.map new file mode 100644 index 00000000..6a7cdffc --- /dev/null +++ b/frontend/dist-instrumented/styles-WDPUUAG4.css.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["css-inline-fonts:https://fonts.googleapis.com/css2?family=Syne:wght@400;500;600;700;800&family=DM+Sans:ital,opsz,wght@0,9..40,300;0,9..40,400;0,9..40,500;0,9..40,600;1,9..40,400&display=swap", "src/%3Cno source%3E", "src/styles.css", "node_modules/tailwindcss/index.css"], + "sourcesContent": ["/* latin-ext */\n@font-face {\n font-family: 'DM Sans';\n font-style: italic;\n font-weight: 400;\n font-display: swap;\n src: url(https://fonts.gstatic.com/s/dmsans/v17/rP2Wp2ywxg089UriCZaSExdy3sGt9zz86GPwyKK58VXh.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'DM Sans';\n font-style: italic;\n font-weight: 400;\n font-display: swap;\n src: url(https://fonts.gstatic.com/s/dmsans/v17/rP2Wp2ywxg089UriCZaSExdy3sGt9zz86GPwyKy58Q.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* latin-ext */\n@font-face {\n font-family: 'DM Sans';\n font-style: normal;\n font-weight: 300;\n font-display: swap;\n src: url(https://fonts.gstatic.com/s/dmsans/v17/rP2Hp2ywxg089UriCZ2IHSeH.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'DM Sans';\n font-style: normal;\n font-weight: 300;\n font-display: swap;\n src: url(https://fonts.gstatic.com/s/dmsans/v17/rP2Hp2ywxg089UriCZOIHQ.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* latin-ext */\n@font-face {\n font-family: 'DM Sans';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(https://fonts.gstatic.com/s/dmsans/v17/rP2Hp2ywxg089UriCZ2IHSeH.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'DM Sans';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(https://fonts.gstatic.com/s/dmsans/v17/rP2Hp2ywxg089UriCZOIHQ.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* latin-ext */\n@font-face {\n font-family: 'DM Sans';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(https://fonts.gstatic.com/s/dmsans/v17/rP2Hp2ywxg089UriCZ2IHSeH.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'DM Sans';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(https://fonts.gstatic.com/s/dmsans/v17/rP2Hp2ywxg089UriCZOIHQ.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* latin-ext */\n@font-face {\n font-family: 'DM Sans';\n font-style: normal;\n font-weight: 600;\n font-display: swap;\n src: url(https://fonts.gstatic.com/s/dmsans/v17/rP2Hp2ywxg089UriCZ2IHSeH.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'DM Sans';\n font-style: normal;\n font-weight: 600;\n font-display: swap;\n src: url(https://fonts.gstatic.com/s/dmsans/v17/rP2Hp2ywxg089UriCZOIHQ.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* greek */\n@font-face {\n font-family: 'Syne';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(https://fonts.gstatic.com/s/syne/v24/8vIH7w4qzmVxm2NL9Hz_.woff2) format('woff2');\n unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Syne';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(https://fonts.gstatic.com/s/syne/v24/8vIH7w4qzmVxm25L9Hz_.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Syne';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(https://fonts.gstatic.com/s/syne/v24/8vIH7w4qzmVxm2BL9A.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* greek */\n@font-face {\n font-family: 'Syne';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(https://fonts.gstatic.com/s/syne/v24/8vIH7w4qzmVxm2NL9Hz_.woff2) format('woff2');\n unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Syne';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(https://fonts.gstatic.com/s/syne/v24/8vIH7w4qzmVxm25L9Hz_.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Syne';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(https://fonts.gstatic.com/s/syne/v24/8vIH7w4qzmVxm2BL9A.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* greek */\n@font-face {\n font-family: 'Syne';\n font-style: normal;\n font-weight: 600;\n font-display: swap;\n src: url(https://fonts.gstatic.com/s/syne/v24/8vIH7w4qzmVxm2NL9Hz_.woff2) format('woff2');\n unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Syne';\n font-style: normal;\n font-weight: 600;\n font-display: swap;\n src: url(https://fonts.gstatic.com/s/syne/v24/8vIH7w4qzmVxm25L9Hz_.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Syne';\n font-style: normal;\n font-weight: 600;\n font-display: swap;\n src: url(https://fonts.gstatic.com/s/syne/v24/8vIH7w4qzmVxm2BL9A.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* greek */\n@font-face {\n font-family: 'Syne';\n font-style: normal;\n font-weight: 700;\n font-display: swap;\n src: url(https://fonts.gstatic.com/s/syne/v24/8vIH7w4qzmVxm2NL9Hz_.woff2) format('woff2');\n unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Syne';\n font-style: normal;\n font-weight: 700;\n font-display: swap;\n src: url(https://fonts.gstatic.com/s/syne/v24/8vIH7w4qzmVxm25L9Hz_.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Syne';\n font-style: normal;\n font-weight: 700;\n font-display: swap;\n src: url(https://fonts.gstatic.com/s/syne/v24/8vIH7w4qzmVxm2BL9A.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* greek */\n@font-face {\n font-family: 'Syne';\n font-style: normal;\n font-weight: 800;\n font-display: swap;\n src: url(https://fonts.gstatic.com/s/syne/v24/8vIH7w4qzmVxm2NL9Hz_.woff2) format('woff2');\n unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Syne';\n font-style: normal;\n font-weight: 800;\n font-display: swap;\n src: url(https://fonts.gstatic.com/s/syne/v24/8vIH7w4qzmVxm25L9Hz_.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Syne';\n font-style: normal;\n font-weight: 800;\n font-display: swap;\n src: url(https://fonts.gstatic.com/s/syne/v24/8vIH7w4qzmVxm2BL9A.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n", null, "@import url('https://fonts.googleapis.com/css2?family=Syne:wght@400;500;600;700;800&family=DM+Sans:ital,opsz,wght@0,9..40,300;0,9..40,400;0,9..40,500;0,9..40,600;1,9..40,400&display=swap');\n@import 'tailwindcss';\n\n:root {\n\t--care-font-display: 'Syne', sans-serif;\n\t--care-font-body: 'DM Sans', sans-serif;\n\t--care-bg-soft: #ffffff;\n\t--care-bg-panel: #ffffff;\n\t--care-card-border-width: 1.28px;\n\t--care-border: #d3dce7;\n\t--care-ink: #3f2b16;\n\t--care-muted: #7c5a33;\n\t--care-primary: #d97706;\n\t--care-primary-strong: #b45309;\n\t--care-danger-bg: #fff1f2;\n\t--care-danger-border: #fecdd3;\n\t--care-danger-text: #be123c;\n}\n\nbody {\n\tfont-family: var(--care-font-body);\n\tcolor: var(--care-ink);\n}\n\n.font-display {\n\tfont-family: var(--care-font-display);\n}\n\n.care-page {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 1rem;\n\tfont-size: 1.02rem;\n\tborder: var(--care-card-border-width) solid var(--care-border);\n\tborder-radius: 1.1rem;\n\tpadding: 1rem;\n\tbackground-color: var(--care-bg-soft);\n\tbox-shadow: 0 18px 38px -34px rgba(146, 64, 14, 0.45);\n\tmin-width: 0;\n\toverflow-x: hidden;\n\twidth: 100%;\n\tbox-sizing: border-box;\n}\n\n.care-dot-grid {\n\tbackground-color: #ffffff;\n\tbackground-image: radial-gradient(circle, #d9e0ea 1px, transparent 1px);\n\tbackground-size: 22px 22px;\n}\n\n.care-page__hero {\n\tdisplay: flex;\n\tjustify-content: space-between;\n\talign-items: flex-start;\n\tgap: 1rem;\n\tborder: var(--care-card-border-width) solid var(--care-border);\n\tborder-radius: 1rem;\n\tpadding: 1rem;\n\tbackground: var(--care-bg-panel);\n\tbackdrop-filter: blur(5px);\n\tmin-width: 0;\n}\n\n.care-eyebrow {\n\tmargin: 0;\n\tfont-size: 0.78rem;\n\tfont-weight: 700;\n\tletter-spacing: 0.12em;\n\ttext-transform: uppercase;\n\tcolor: var(--care-muted);\n}\n\n.care-title {\n\tmargin: 0.2rem 0 0;\n\tfont-size: clamp(1.4rem, 2.2vw, 1.95rem);\n\tline-height: 1.2;\n\tfont-family: var(--care-font-display);\n\tfont-weight: 700;\n\tletter-spacing: -0.015em;\n\tcolor: var(--care-ink);\n}\n\n.care-subtitle {\n\tmargin: 0.4rem 0 0;\n\tfont-size: 1rem;\n\tcolor: var(--care-muted);\n}\n\n.care-chip {\n\tdisplay: inline-flex;\n\talign-items: center;\n\tgap: 0.45rem;\n\tmargin: 0;\n\tborder: 1px solid #f4cf92;\n\tborder-radius: 999px;\n\tbackground: rgba(255, 246, 229, 0.98);\n\tcolor: #8a5207;\n\tpadding: 0.4rem 0.75rem;\n\tfont-size: 0.84rem;\n\tfont-weight: 600;\n}\n\n.care-chip__dot {\n\twidth: 0.46rem;\n\theight: 0.46rem;\n\tborder-radius: 999px;\n\tbackground: #f59e0b;\n}\n\n.care-page__header-badge {\n\tdisplay: inline-flex;\n\talign-items: center;\n\tgap: 0.45rem;\n\tborder: 1px solid #f4d7a3;\n\tborder-radius: 999px;\n\tpadding: 0.42rem 0.78rem;\n\tbackground: #fff7e4;\n\tcolor: #7a4b10;\n\tfont-size: 0.8rem;\n\tfont-weight: 700;\n}\n\n.care-page__header-badge-dot {\n\twidth: 0.46rem;\n\theight: 0.46rem;\n\tborder-radius: 999px;\n\tbackground: #f59e0b;\n}\n\n.care-field {\n\tdisplay: grid;\n\tgap: 0.35rem;\n}\n\n.care-field label {\n\tfont-size: 0.86rem;\n\tfont-weight: 600;\n\tcolor: #334155;\n}\n\n.care-select {\n\tmin-height: 2.35rem;\n\twidth: 100%;\n\tborder: 1px solid #e6c389;\n\tborder-radius: 0.62rem;\n\tpadding: 0 0.65rem;\n\tbackground: #fffdf8;\n\tcolor: #3f2b16;\n\tfont-size: 0.96rem;\n}\n\n.care-select:focus-visible {\n\toutline: 2px solid #f59e0b;\n\toutline-offset: 1px;\n}\n\n.care-button {\n\tdisplay: inline-flex;\n\talign-items: center;\n\tjustify-content: center;\n\tgap: 0.45rem;\n\tmin-height: 2.35rem;\n\tborder: 1px solid rgba(217, 119, 6, 0.36);\n\tborder-radius: 0.62rem;\n\tbackground: linear-gradient(120deg, #fcd34d 0%, #fbbf24 100%);\n\tcolor: #1f2937;\n\tfont-size: 0.9rem;\n\tfont-weight: 700;\n\tletter-spacing: 0.01em;\n\tpadding: 0 0.95rem;\n\tcursor: pointer;\n\tbox-shadow: 0 8px 14px rgba(245, 158, 11, 0.24);\n\ttransition: transform 120ms ease, background-color 140ms ease, border-color 140ms ease;\n}\n\n.care-button:hover {\n\tbackground: rgba(254, 243, 199, 0.75);\n\tborder-color: rgba(245, 158, 11, 0.28);\n}\n\n.care-button:active {\n\ttransform: scale(0.98);\n}\n\n.care-button:disabled,\n.care-select:disabled {\n\tcursor: not-allowed;\n\topacity: 0.65;\n}\n\n.care-btn {\n\tdisplay: inline-flex;\n\talign-items: center;\n\tjustify-content: center;\n\tgap: 0.45rem;\n\tmin-height: 2.35rem;\n\tpadding: 0 0.95rem;\n\tborder: 1px solid #efcc97;\n\tborder-radius: 0.62rem;\n\tfont-size: 0.88rem;\n\tfont-weight: 700;\n\tline-height: 1.2;\n\tletter-spacing: 0.01em;\n\tcursor: pointer;\n\ttransition: transform 120ms ease, background-color 140ms ease, border-color 140ms ease;\n}\n\n.care-btn--compact {\n\tmin-height: 2rem;\n\tpadding: 0 0.72rem;\n\tfont-size: 0.78rem;\n}\n\n.care-btn--primary {\n\tborder-color: rgba(217, 119, 6, 0.36);\n\tbackground: linear-gradient(120deg, #fcd34d 0%, #fbbf24 100%);\n\tcolor: #1f2937;\n\tbox-shadow: 0 8px 14px rgba(245, 158, 11, 0.24);\n}\n\n.care-btn--primary:hover {\n\tbackground: rgba(254, 243, 199, 0.75);\n\tborder-color: rgba(245, 158, 11, 0.28);\n}\n\n.care-btn--neutral {\n\tborder-color: #e4dccf;\n\tbackground: #fffdf8;\n\tcolor: #5f3f17;\n}\n\n.care-btn--danger {\n\tborder-color: #991b1b;\n\tbackground: #b91c1c;\n\tcolor: #ffffff;\n}\n\n.care-btn--icon {\n\theight: 2rem;\n\twidth: 2rem;\n\tpadding: 0;\n\tmin-height: 2rem;\n}\n\n.care-btn:hover {\n\tfilter: brightness(0.98);\n}\n\n.care-btn:active {\n\ttransform: scale(0.98);\n}\n\n.care-btn:disabled {\n\tcursor: not-allowed;\n\topacity: 0.55;\n\ttransform: none;\n\tfilter: none;\n}\n\n.care-link {\n\tcolor: #b45309;\n\tfont-size: 0.9rem;\n\tfont-weight: 600;\n\ttext-decoration: none;\n}\n\n.care-link:hover {\n\ttext-decoration: underline;\n}\n\n.care-panel {\n\tborder: var(--care-card-border-width) solid var(--care-border);\n\tborder-radius: 0.92rem;\n\tpadding: 0.95rem;\n\tbackground: var(--care-bg-panel);\n\tbox-shadow: 0 10px 28px -26px rgba(15, 23, 42, 0.7);\n}\n\n.care-alert {\n\tmargin: 0;\n\tborder: 1px solid var(--care-danger-border);\n\tborder-radius: 0.72rem;\n\tbackground: var(--care-danger-bg);\n\tcolor: var(--care-danger-text);\n\tpadding: 0.62rem 0.78rem;\n\tfont-size: 0.94rem;\n}\n\n.care-loading {\n\tmargin: 0;\n\tborder: 1px dashed #f2c56e;\n\tborder-radius: 0.72rem;\n\tbackground: #fff7e6;\n\tcolor: #92400e;\n\tfont-size: 0.94rem;\n\tpadding: 0.65rem 0.78rem;\n}\n\n.sidebar-page {\n\tgap: 1.25rem;\n}\n\n.care-pagination {\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: flex-end;\n\tgap: 0.75rem;\n\tmargin-top: 0.4rem;\n}\n\n.care-pagination__button {\n\tborder: 1px solid #e4dccf;\n\tborder-radius: 0.72rem;\n\tbackground: #fffdf7;\n\tcolor: #6b3f0b;\n\tfont-size: 0.875rem;\n\tfont-weight: 700;\n\tline-height: 1.25rem;\n\tpadding: 0.35rem 0.78rem;\n\tcursor: pointer;\n\ttransition: background-color 120ms ease;\n}\n\n.care-pagination__button:hover {\n\tbackground: #fff4dc;\n}\n\n.care-pagination__button:disabled {\n\topacity: 0.45;\n\tcursor: not-allowed;\n}\n\n.care-pagination__status {\n\tcolor: #7c5a33;\n\tfont-size: 0.875rem;\n\tfont-weight: 700;\n}\n\n@media (max-width: 960px) {\n\t.care-page {\n\t\tpadding: 0.8rem;\n\t}\n\n\t.care-page__hero {\n\t\tflex-direction: column;\n\t\talign-items: stretch;\n\t}\n}\n", "@layer theme, base, components, utilities;\n\n@layer theme {\n @theme default {\n --font-sans:\n ui-sans-serif, system-ui, sans-serif, \"Apple Color Emoji\",\n \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n --font-serif: ui-serif, Georgia, Cambria, \"Times New Roman\", Times, serif;\n --font-mono:\n ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\",\n \"Courier New\", monospace;\n\n --color-red-50: oklch(97.1% 0.013 17.38);\n --color-red-100: oklch(93.6% 0.032 17.717);\n --color-red-200: oklch(88.5% 0.062 18.334);\n --color-red-300: oklch(80.8% 0.114 19.571);\n --color-red-400: oklch(70.4% 0.191 22.216);\n --color-red-500: oklch(63.7% 0.237 25.331);\n --color-red-600: oklch(57.7% 0.245 27.325);\n --color-red-700: oklch(50.5% 0.213 27.518);\n --color-red-800: oklch(44.4% 0.177 26.899);\n --color-red-900: oklch(39.6% 0.141 25.723);\n --color-red-950: oklch(25.8% 0.092 26.042);\n\n --color-orange-50: oklch(98% 0.016 73.684);\n --color-orange-100: oklch(95.4% 0.038 75.164);\n --color-orange-200: oklch(90.1% 0.076 70.697);\n --color-orange-300: oklch(83.7% 0.128 66.29);\n --color-orange-400: oklch(75% 0.183 55.934);\n --color-orange-500: oklch(70.5% 0.213 47.604);\n --color-orange-600: oklch(64.6% 0.222 41.116);\n --color-orange-700: oklch(55.3% 0.195 38.402);\n --color-orange-800: oklch(47% 0.157 37.304);\n --color-orange-900: oklch(40.8% 0.123 38.172);\n --color-orange-950: oklch(26.6% 0.079 36.259);\n\n --color-amber-50: oklch(98.7% 0.022 95.277);\n --color-amber-100: oklch(96.2% 0.059 95.617);\n --color-amber-200: oklch(92.4% 0.12 95.746);\n --color-amber-300: oklch(87.9% 0.169 91.605);\n --color-amber-400: oklch(82.8% 0.189 84.429);\n --color-amber-500: oklch(76.9% 0.188 70.08);\n --color-amber-600: oklch(66.6% 0.179 58.318);\n --color-amber-700: oklch(55.5% 0.163 48.998);\n --color-amber-800: oklch(47.3% 0.137 46.201);\n --color-amber-900: oklch(41.4% 0.112 45.904);\n --color-amber-950: oklch(27.9% 0.077 45.635);\n\n --color-yellow-50: oklch(98.7% 0.026 102.212);\n --color-yellow-100: oklch(97.3% 0.071 103.193);\n --color-yellow-200: oklch(94.5% 0.129 101.54);\n --color-yellow-300: oklch(90.5% 0.182 98.111);\n --color-yellow-400: oklch(85.2% 0.199 91.936);\n --color-yellow-500: oklch(79.5% 0.184 86.047);\n --color-yellow-600: oklch(68.1% 0.162 75.834);\n --color-yellow-700: oklch(55.4% 0.135 66.442);\n --color-yellow-800: oklch(47.6% 0.114 61.907);\n --color-yellow-900: oklch(42.1% 0.095 57.708);\n --color-yellow-950: oklch(28.6% 0.066 53.813);\n\n --color-lime-50: oklch(98.6% 0.031 120.757);\n --color-lime-100: oklch(96.7% 0.067 122.328);\n --color-lime-200: oklch(93.8% 0.127 124.321);\n --color-lime-300: oklch(89.7% 0.196 126.665);\n --color-lime-400: oklch(84.1% 0.238 128.85);\n --color-lime-500: oklch(76.8% 0.233 130.85);\n --color-lime-600: oklch(64.8% 0.2 131.684);\n --color-lime-700: oklch(53.2% 0.157 131.589);\n --color-lime-800: oklch(45.3% 0.124 130.933);\n --color-lime-900: oklch(40.5% 0.101 131.063);\n --color-lime-950: oklch(27.4% 0.072 132.109);\n\n --color-green-50: oklch(98.2% 0.018 155.826);\n --color-green-100: oklch(96.2% 0.044 156.743);\n --color-green-200: oklch(92.5% 0.084 155.995);\n --color-green-300: oklch(87.1% 0.15 154.449);\n --color-green-400: oklch(79.2% 0.209 151.711);\n --color-green-500: oklch(72.3% 0.219 149.579);\n --color-green-600: oklch(62.7% 0.194 149.214);\n --color-green-700: oklch(52.7% 0.154 150.069);\n --color-green-800: oklch(44.8% 0.119 151.328);\n --color-green-900: oklch(39.3% 0.095 152.535);\n --color-green-950: oklch(26.6% 0.065 152.934);\n\n --color-emerald-50: oklch(97.9% 0.021 166.113);\n --color-emerald-100: oklch(95% 0.052 163.051);\n --color-emerald-200: oklch(90.5% 0.093 164.15);\n --color-emerald-300: oklch(84.5% 0.143 164.978);\n --color-emerald-400: oklch(76.5% 0.177 163.223);\n --color-emerald-500: oklch(69.6% 0.17 162.48);\n --color-emerald-600: oklch(59.6% 0.145 163.225);\n --color-emerald-700: oklch(50.8% 0.118 165.612);\n --color-emerald-800: oklch(43.2% 0.095 166.913);\n --color-emerald-900: oklch(37.8% 0.077 168.94);\n --color-emerald-950: oklch(26.2% 0.051 172.552);\n\n --color-teal-50: oklch(98.4% 0.014 180.72);\n --color-teal-100: oklch(95.3% 0.051 180.801);\n --color-teal-200: oklch(91% 0.096 180.426);\n --color-teal-300: oklch(85.5% 0.138 181.071);\n --color-teal-400: oklch(77.7% 0.152 181.912);\n --color-teal-500: oklch(70.4% 0.14 182.503);\n --color-teal-600: oklch(60% 0.118 184.704);\n --color-teal-700: oklch(51.1% 0.096 186.391);\n --color-teal-800: oklch(43.7% 0.078 188.216);\n --color-teal-900: oklch(38.6% 0.063 188.416);\n --color-teal-950: oklch(27.7% 0.046 192.524);\n\n --color-cyan-50: oklch(98.4% 0.019 200.873);\n --color-cyan-100: oklch(95.6% 0.045 203.388);\n --color-cyan-200: oklch(91.7% 0.08 205.041);\n --color-cyan-300: oklch(86.5% 0.127 207.078);\n --color-cyan-400: oklch(78.9% 0.154 211.53);\n --color-cyan-500: oklch(71.5% 0.143 215.221);\n --color-cyan-600: oklch(60.9% 0.126 221.723);\n --color-cyan-700: oklch(52% 0.105 223.128);\n --color-cyan-800: oklch(45% 0.085 224.283);\n --color-cyan-900: oklch(39.8% 0.07 227.392);\n --color-cyan-950: oklch(30.2% 0.056 229.695);\n\n --color-sky-50: oklch(97.7% 0.013 236.62);\n --color-sky-100: oklch(95.1% 0.026 236.824);\n --color-sky-200: oklch(90.1% 0.058 230.902);\n --color-sky-300: oklch(82.8% 0.111 230.318);\n --color-sky-400: oklch(74.6% 0.16 232.661);\n --color-sky-500: oklch(68.5% 0.169 237.323);\n --color-sky-600: oklch(58.8% 0.158 241.966);\n --color-sky-700: oklch(50% 0.134 242.749);\n --color-sky-800: oklch(44.3% 0.11 240.79);\n --color-sky-900: oklch(39.1% 0.09 240.876);\n --color-sky-950: oklch(29.3% 0.066 243.157);\n\n --color-blue-50: oklch(97% 0.014 254.604);\n --color-blue-100: oklch(93.2% 0.032 255.585);\n --color-blue-200: oklch(88.2% 0.059 254.128);\n --color-blue-300: oklch(80.9% 0.105 251.813);\n --color-blue-400: oklch(70.7% 0.165 254.624);\n --color-blue-500: oklch(62.3% 0.214 259.815);\n --color-blue-600: oklch(54.6% 0.245 262.881);\n --color-blue-700: oklch(48.8% 0.243 264.376);\n --color-blue-800: oklch(42.4% 0.199 265.638);\n --color-blue-900: oklch(37.9% 0.146 265.522);\n --color-blue-950: oklch(28.2% 0.091 267.935);\n\n --color-indigo-50: oklch(96.2% 0.018 272.314);\n --color-indigo-100: oklch(93% 0.034 272.788);\n --color-indigo-200: oklch(87% 0.065 274.039);\n --color-indigo-300: oklch(78.5% 0.115 274.713);\n --color-indigo-400: oklch(67.3% 0.182 276.935);\n --color-indigo-500: oklch(58.5% 0.233 277.117);\n --color-indigo-600: oklch(51.1% 0.262 276.966);\n --color-indigo-700: oklch(45.7% 0.24 277.023);\n --color-indigo-800: oklch(39.8% 0.195 277.366);\n --color-indigo-900: oklch(35.9% 0.144 278.697);\n --color-indigo-950: oklch(25.7% 0.09 281.288);\n\n --color-violet-50: oklch(96.9% 0.016 293.756);\n --color-violet-100: oklch(94.3% 0.029 294.588);\n --color-violet-200: oklch(89.4% 0.057 293.283);\n --color-violet-300: oklch(81.1% 0.111 293.571);\n --color-violet-400: oklch(70.2% 0.183 293.541);\n --color-violet-500: oklch(60.6% 0.25 292.717);\n --color-violet-600: oklch(54.1% 0.281 293.009);\n --color-violet-700: oklch(49.1% 0.27 292.581);\n --color-violet-800: oklch(43.2% 0.232 292.759);\n --color-violet-900: oklch(38% 0.189 293.745);\n --color-violet-950: oklch(28.3% 0.141 291.089);\n\n --color-purple-50: oklch(97.7% 0.014 308.299);\n --color-purple-100: oklch(94.6% 0.033 307.174);\n --color-purple-200: oklch(90.2% 0.063 306.703);\n --color-purple-300: oklch(82.7% 0.119 306.383);\n --color-purple-400: oklch(71.4% 0.203 305.504);\n --color-purple-500: oklch(62.7% 0.265 303.9);\n --color-purple-600: oklch(55.8% 0.288 302.321);\n --color-purple-700: oklch(49.6% 0.265 301.924);\n --color-purple-800: oklch(43.8% 0.218 303.724);\n --color-purple-900: oklch(38.1% 0.176 304.987);\n --color-purple-950: oklch(29.1% 0.149 302.717);\n\n --color-fuchsia-50: oklch(97.7% 0.017 320.058);\n --color-fuchsia-100: oklch(95.2% 0.037 318.852);\n --color-fuchsia-200: oklch(90.3% 0.076 319.62);\n --color-fuchsia-300: oklch(83.3% 0.145 321.434);\n --color-fuchsia-400: oklch(74% 0.238 322.16);\n --color-fuchsia-500: oklch(66.7% 0.295 322.15);\n --color-fuchsia-600: oklch(59.1% 0.293 322.896);\n --color-fuchsia-700: oklch(51.8% 0.253 323.949);\n --color-fuchsia-800: oklch(45.2% 0.211 324.591);\n --color-fuchsia-900: oklch(40.1% 0.17 325.612);\n --color-fuchsia-950: oklch(29.3% 0.136 325.661);\n\n --color-pink-50: oklch(97.1% 0.014 343.198);\n --color-pink-100: oklch(94.8% 0.028 342.258);\n --color-pink-200: oklch(89.9% 0.061 343.231);\n --color-pink-300: oklch(82.3% 0.12 346.018);\n --color-pink-400: oklch(71.8% 0.202 349.761);\n --color-pink-500: oklch(65.6% 0.241 354.308);\n --color-pink-600: oklch(59.2% 0.249 0.584);\n --color-pink-700: oklch(52.5% 0.223 3.958);\n --color-pink-800: oklch(45.9% 0.187 3.815);\n --color-pink-900: oklch(40.8% 0.153 2.432);\n --color-pink-950: oklch(28.4% 0.109 3.907);\n\n --color-rose-50: oklch(96.9% 0.015 12.422);\n --color-rose-100: oklch(94.1% 0.03 12.58);\n --color-rose-200: oklch(89.2% 0.058 10.001);\n --color-rose-300: oklch(81% 0.117 11.638);\n --color-rose-400: oklch(71.2% 0.194 13.428);\n --color-rose-500: oklch(64.5% 0.246 16.439);\n --color-rose-600: oklch(58.6% 0.253 17.585);\n --color-rose-700: oklch(51.4% 0.222 16.935);\n --color-rose-800: oklch(45.5% 0.188 13.697);\n --color-rose-900: oklch(41% 0.159 10.272);\n --color-rose-950: oklch(27.1% 0.105 12.094);\n\n --color-slate-50: oklch(98.4% 0.003 247.858);\n --color-slate-100: oklch(96.8% 0.007 247.896);\n --color-slate-200: oklch(92.9% 0.013 255.508);\n --color-slate-300: oklch(86.9% 0.022 252.894);\n --color-slate-400: oklch(70.4% 0.04 256.788);\n --color-slate-500: oklch(55.4% 0.046 257.417);\n --color-slate-600: oklch(44.6% 0.043 257.281);\n --color-slate-700: oklch(37.2% 0.044 257.287);\n --color-slate-800: oklch(27.9% 0.041 260.031);\n --color-slate-900: oklch(20.8% 0.042 265.755);\n --color-slate-950: oklch(12.9% 0.042 264.695);\n\n --color-gray-50: oklch(98.5% 0.002 247.839);\n --color-gray-100: oklch(96.7% 0.003 264.542);\n --color-gray-200: oklch(92.8% 0.006 264.531);\n --color-gray-300: oklch(87.2% 0.01 258.338);\n --color-gray-400: oklch(70.7% 0.022 261.325);\n --color-gray-500: oklch(55.1% 0.027 264.364);\n --color-gray-600: oklch(44.6% 0.03 256.802);\n --color-gray-700: oklch(37.3% 0.034 259.733);\n --color-gray-800: oklch(27.8% 0.033 256.848);\n --color-gray-900: oklch(21% 0.034 264.665);\n --color-gray-950: oklch(13% 0.028 261.692);\n\n --color-zinc-50: oklch(98.5% 0 0);\n --color-zinc-100: oklch(96.7% 0.001 286.375);\n --color-zinc-200: oklch(92% 0.004 286.32);\n --color-zinc-300: oklch(87.1% 0.006 286.286);\n --color-zinc-400: oklch(70.5% 0.015 286.067);\n --color-zinc-500: oklch(55.2% 0.016 285.938);\n --color-zinc-600: oklch(44.2% 0.017 285.786);\n --color-zinc-700: oklch(37% 0.013 285.805);\n --color-zinc-800: oklch(27.4% 0.006 286.033);\n --color-zinc-900: oklch(21% 0.006 285.885);\n --color-zinc-950: oklch(14.1% 0.005 285.823);\n\n --color-neutral-50: oklch(98.5% 0 0);\n --color-neutral-100: oklch(97% 0 0);\n --color-neutral-200: oklch(92.2% 0 0);\n --color-neutral-300: oklch(87% 0 0);\n --color-neutral-400: oklch(70.8% 0 0);\n --color-neutral-500: oklch(55.6% 0 0);\n --color-neutral-600: oklch(43.9% 0 0);\n --color-neutral-700: oklch(37.1% 0 0);\n --color-neutral-800: oklch(26.9% 0 0);\n --color-neutral-900: oklch(20.5% 0 0);\n --color-neutral-950: oklch(14.5% 0 0);\n\n --color-stone-50: oklch(98.5% 0.001 106.423);\n --color-stone-100: oklch(97% 0.001 106.424);\n --color-stone-200: oklch(92.3% 0.003 48.717);\n --color-stone-300: oklch(86.9% 0.005 56.366);\n --color-stone-400: oklch(70.9% 0.01 56.259);\n --color-stone-500: oklch(55.3% 0.013 58.071);\n --color-stone-600: oklch(44.4% 0.011 73.639);\n --color-stone-700: oklch(37.4% 0.01 67.558);\n --color-stone-800: oklch(26.8% 0.007 34.298);\n --color-stone-900: oklch(21.6% 0.006 56.043);\n --color-stone-950: oklch(14.7% 0.004 49.25);\n\n --color-mauve-50: oklch(98.5% 0 0);\n --color-mauve-100: oklch(96% 0.003 325.6);\n --color-mauve-200: oklch(92.2% 0.005 325.62);\n --color-mauve-300: oklch(86.5% 0.012 325.68);\n --color-mauve-400: oklch(71.1% 0.019 323.02);\n --color-mauve-500: oklch(54.2% 0.034 322.5);\n --color-mauve-600: oklch(43.5% 0.029 321.78);\n --color-mauve-700: oklch(36.4% 0.029 323.89);\n --color-mauve-800: oklch(26.3% 0.024 320.12);\n --color-mauve-900: oklch(21.2% 0.019 322.12);\n --color-mauve-950: oklch(14.5% 0.008 326);\n\n --color-olive-50: oklch(98.8% 0.003 106.5);\n --color-olive-100: oklch(96.6% 0.005 106.5);\n --color-olive-200: oklch(93% 0.007 106.5);\n --color-olive-300: oklch(88% 0.011 106.6);\n --color-olive-400: oklch(73.7% 0.021 106.9);\n --color-olive-500: oklch(58% 0.031 107.3);\n --color-olive-600: oklch(46.6% 0.025 107.3);\n --color-olive-700: oklch(39.4% 0.023 107.4);\n --color-olive-800: oklch(28.6% 0.016 107.4);\n --color-olive-900: oklch(22.8% 0.013 107.4);\n --color-olive-950: oklch(15.3% 0.006 107.1);\n\n --color-mist-50: oklch(98.7% 0.002 197.1);\n --color-mist-100: oklch(96.3% 0.002 197.1);\n --color-mist-200: oklch(92.5% 0.005 214.3);\n --color-mist-300: oklch(87.2% 0.007 219.6);\n --color-mist-400: oklch(72.3% 0.014 214.4);\n --color-mist-500: oklch(56% 0.021 213.5);\n --color-mist-600: oklch(45% 0.017 213.2);\n --color-mist-700: oklch(37.8% 0.015 216);\n --color-mist-800: oklch(27.5% 0.011 216.9);\n --color-mist-900: oklch(21.8% 0.008 223.9);\n --color-mist-950: oklch(14.8% 0.004 228.8);\n\n --color-taupe-50: oklch(98.6% 0.002 67.8);\n --color-taupe-100: oklch(96% 0.002 17.2);\n --color-taupe-200: oklch(92.2% 0.005 34.3);\n --color-taupe-300: oklch(86.8% 0.007 39.5);\n --color-taupe-400: oklch(71.4% 0.014 41.2);\n --color-taupe-500: oklch(54.7% 0.021 43.1);\n --color-taupe-600: oklch(43.8% 0.017 39.3);\n --color-taupe-700: oklch(36.7% 0.016 35.7);\n --color-taupe-800: oklch(26.8% 0.011 36.5);\n --color-taupe-900: oklch(21.4% 0.009 43.1);\n --color-taupe-950: oklch(14.7% 0.004 49.3);\n\n --color-black: #000;\n --color-white: #fff;\n\n --spacing: 0.25rem;\n\n --breakpoint-sm: 40rem;\n --breakpoint-md: 48rem;\n --breakpoint-lg: 64rem;\n --breakpoint-xl: 80rem;\n --breakpoint-2xl: 96rem;\n\n --container-3xs: 16rem;\n --container-2xs: 18rem;\n --container-xs: 20rem;\n --container-sm: 24rem;\n --container-md: 28rem;\n --container-lg: 32rem;\n --container-xl: 36rem;\n --container-2xl: 42rem;\n --container-3xl: 48rem;\n --container-4xl: 56rem;\n --container-5xl: 64rem;\n --container-6xl: 72rem;\n --container-7xl: 80rem;\n\n --text-xs: 0.75rem;\n --text-xs--line-height: calc(1 / 0.75);\n --text-sm: 0.875rem;\n --text-sm--line-height: calc(1.25 / 0.875);\n --text-base: 1rem;\n --text-base--line-height: calc(1.5 / 1);\n --text-lg: 1.125rem;\n --text-lg--line-height: calc(1.75 / 1.125);\n --text-xl: 1.25rem;\n --text-xl--line-height: calc(1.75 / 1.25);\n --text-2xl: 1.5rem;\n --text-2xl--line-height: calc(2 / 1.5);\n --text-3xl: 1.875rem;\n --text-3xl--line-height: calc(2.25 / 1.875);\n --text-4xl: 2.25rem;\n --text-4xl--line-height: calc(2.5 / 2.25);\n --text-5xl: 3rem;\n --text-5xl--line-height: 1;\n --text-6xl: 3.75rem;\n --text-6xl--line-height: 1;\n --text-7xl: 4.5rem;\n --text-7xl--line-height: 1;\n --text-8xl: 6rem;\n --text-8xl--line-height: 1;\n --text-9xl: 8rem;\n --text-9xl--line-height: 1;\n\n --font-weight-thin: 100;\n --font-weight-extralight: 200;\n --font-weight-light: 300;\n --font-weight-normal: 400;\n --font-weight-medium: 500;\n --font-weight-semibold: 600;\n --font-weight-bold: 700;\n --font-weight-extrabold: 800;\n --font-weight-black: 900;\n\n --tracking-tighter: -0.05em;\n --tracking-tight: -0.025em;\n --tracking-normal: 0em;\n --tracking-wide: 0.025em;\n --tracking-wider: 0.05em;\n --tracking-widest: 0.1em;\n\n --leading-tight: 1.25;\n --leading-snug: 1.375;\n --leading-normal: 1.5;\n --leading-relaxed: 1.625;\n --leading-loose: 2;\n\n --radius-xs: 0.125rem;\n --radius-sm: 0.25rem;\n --radius-md: 0.375rem;\n --radius-lg: 0.5rem;\n --radius-xl: 0.75rem;\n --radius-2xl: 1rem;\n --radius-3xl: 1.5rem;\n --radius-4xl: 2rem;\n\n --shadow-2xs: 0 1px rgb(0 0 0 / 0.05);\n --shadow-xs: 0 1px 2px 0 rgb(0 0 0 / 0.05);\n --shadow-sm: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);\n --shadow-md:\n 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);\n --shadow-lg:\n 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);\n --shadow-xl:\n 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);\n --shadow-2xl: 0 25px 50px -12px rgb(0 0 0 / 0.25);\n\n --inset-shadow-2xs: inset 0 1px rgb(0 0 0 / 0.05);\n --inset-shadow-xs: inset 0 1px 1px rgb(0 0 0 / 0.05);\n --inset-shadow-sm: inset 0 2px 4px rgb(0 0 0 / 0.05);\n\n --drop-shadow-xs: 0 1px 1px rgb(0 0 0 / 0.05);\n --drop-shadow-sm: 0 1px 2px rgb(0 0 0 / 0.15);\n --drop-shadow-md: 0 3px 3px rgb(0 0 0 / 0.12);\n --drop-shadow-lg: 0 4px 4px rgb(0 0 0 / 0.15);\n --drop-shadow-xl: 0 9px 7px rgb(0 0 0 / 0.1);\n --drop-shadow-2xl: 0 25px 25px rgb(0 0 0 / 0.15);\n\n --text-shadow-2xs: 0px 1px 0px rgb(0 0 0 / 0.15);\n --text-shadow-xs: 0px 1px 1px rgb(0 0 0 / 0.2);\n --text-shadow-sm:\n 0px 1px 0px rgb(0 0 0 / 0.075), 0px 1px 1px rgb(0 0 0 / 0.075),\n 0px 2px 2px rgb(0 0 0 / 0.075);\n --text-shadow-md:\n 0px 1px 1px rgb(0 0 0 / 0.1), 0px 1px 2px rgb(0 0 0 / 0.1),\n 0px 2px 4px rgb(0 0 0 / 0.1);\n --text-shadow-lg:\n 0px 1px 2px rgb(0 0 0 / 0.1), 0px 3px 2px rgb(0 0 0 / 0.1),\n 0px 4px 8px rgb(0 0 0 / 0.1);\n\n --ease-in: cubic-bezier(0.4, 0, 1, 1);\n --ease-out: cubic-bezier(0, 0, 0.2, 1);\n --ease-in-out: cubic-bezier(0.4, 0, 0.2, 1);\n\n --animate-spin: spin 1s linear infinite;\n --animate-ping: ping 1s cubic-bezier(0, 0, 0.2, 1) infinite;\n --animate-pulse: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;\n --animate-bounce: bounce 1s infinite;\n\n @keyframes spin {\n to {\n transform: rotate(360deg);\n }\n }\n\n @keyframes ping {\n 75%,\n 100% {\n transform: scale(2);\n opacity: 0;\n }\n }\n\n @keyframes pulse {\n 50% {\n opacity: 0.5;\n }\n }\n\n @keyframes bounce {\n 0%,\n 100% {\n transform: translateY(-25%);\n animation-timing-function: cubic-bezier(0.8, 0, 1, 1);\n }\n\n 50% {\n transform: none;\n animation-timing-function: cubic-bezier(0, 0, 0.2, 1);\n }\n }\n\n --blur-xs: 4px;\n --blur-sm: 8px;\n --blur-md: 12px;\n --blur-lg: 16px;\n --blur-xl: 24px;\n --blur-2xl: 40px;\n --blur-3xl: 64px;\n\n --perspective-dramatic: 100px;\n --perspective-near: 300px;\n --perspective-normal: 500px;\n --perspective-midrange: 800px;\n --perspective-distant: 1200px;\n\n --aspect-video: 16 / 9;\n\n --default-transition-duration: 150ms;\n --default-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n --default-font-family: --theme(--font-sans, initial);\n --default-font-feature-settings: --theme(\n --font-sans--font-feature-settings,\n initial\n );\n --default-font-variation-settings: --theme(\n --font-sans--font-variation-settings,\n initial\n );\n --default-mono-font-family: --theme(--font-mono, initial);\n --default-mono-font-feature-settings: --theme(\n --font-mono--font-feature-settings,\n initial\n );\n --default-mono-font-variation-settings: --theme(\n --font-mono--font-variation-settings,\n initial\n );\n }\n\n /* Deprecated */\n @theme default inline reference {\n --blur: 8px;\n --shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);\n --shadow-inner: inset 0 2px 4px 0 rgb(0 0 0 / 0.05);\n --drop-shadow: 0 1px 2px rgb(0 0 0 / 0.1), 0 1px 1px rgb(0 0 0 / 0.06);\n --radius: 0.25rem;\n --max-width-prose: 65ch;\n }\n}\n\n@layer base {\n /*\n 1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)\n 2. Remove default margins and padding\n 3. Reset all borders.\n*/\n\n *,\n ::after,\n ::before,\n ::backdrop,\n ::file-selector-button {\n box-sizing: border-box; /* 1 */\n margin: 0; /* 2 */\n padding: 0; /* 2 */\n border: 0 solid; /* 3 */\n }\n\n /*\n 1. Use a consistent sensible line-height in all browsers.\n 2. Prevent adjustments of font size after orientation changes in iOS.\n 3. Use a more readable tab size.\n 4. Use the user's configured `sans` font-family by default.\n 5. Use the user's configured `sans` font-feature-settings by default.\n 6. Use the user's configured `sans` font-variation-settings by default.\n 7. Disable tap highlights on iOS.\n*/\n\n html,\n :host {\n line-height: 1.5; /* 1 */\n -webkit-text-size-adjust: 100%; /* 2 */\n tab-size: 4; /* 3 */\n font-family: --theme(\n --default-font-family,\n ui-sans-serif,\n system-ui,\n sans-serif,\n \"Apple Color Emoji\",\n \"Segoe UI Emoji\",\n \"Segoe UI Symbol\",\n \"Noto Color Emoji\"\n ); /* 4 */\n font-feature-settings: --theme(\n --default-font-feature-settings,\n normal\n ); /* 5 */\n font-variation-settings: --theme(\n --default-font-variation-settings,\n normal\n ); /* 6 */\n -webkit-tap-highlight-color: transparent; /* 7 */\n }\n\n /*\n 1. Add the correct height in Firefox.\n 2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)\n 3. Reset the default border style to a 1px solid border.\n*/\n\n hr {\n height: 0; /* 1 */\n color: inherit; /* 2 */\n border-top-width: 1px; /* 3 */\n }\n\n /*\n Add the correct text decoration in Chrome, Edge, and Safari.\n*/\n\n abbr:where([title]) {\n -webkit-text-decoration: underline dotted;\n text-decoration: underline dotted;\n }\n\n /*\n Remove the default font size and weight for headings.\n*/\n\n h1,\n h2,\n h3,\n h4,\n h5,\n h6 {\n font-size: inherit;\n font-weight: inherit;\n }\n\n /*\n Reset links to optimize for opt-in styling instead of opt-out.\n*/\n\n a {\n color: inherit;\n -webkit-text-decoration: inherit;\n text-decoration: inherit;\n }\n\n /*\n Add the correct font weight in Edge and Safari.\n*/\n\n b,\n strong {\n font-weight: bolder;\n }\n\n /*\n 1. Use the user's configured `mono` font-family by default.\n 2. Use the user's configured `mono` font-feature-settings by default.\n 3. Use the user's configured `mono` font-variation-settings by default.\n 4. Correct the odd `em` font sizing in all browsers.\n*/\n\n code,\n kbd,\n samp,\n pre {\n font-family: --theme(\n --default-mono-font-family,\n ui-monospace,\n SFMono-Regular,\n Menlo,\n Monaco,\n Consolas,\n \"Liberation Mono\",\n \"Courier New\",\n monospace\n ); /* 1 */\n font-feature-settings: --theme(\n --default-mono-font-feature-settings,\n normal\n ); /* 2 */\n font-variation-settings: --theme(\n --default-mono-font-variation-settings,\n normal\n ); /* 3 */\n font-size: 1em; /* 4 */\n }\n\n /*\n Add the correct font size in all browsers.\n*/\n\n small {\n font-size: 80%;\n }\n\n /*\n Prevent `sub` and `sup` elements from affecting the line height in all browsers.\n*/\n\n sub,\n sup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n }\n\n sub {\n bottom: -0.25em;\n }\n\n sup {\n top: -0.5em;\n }\n\n /*\n 1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)\n 2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)\n 3. Remove gaps between table borders by default.\n*/\n\n table {\n text-indent: 0; /* 1 */\n border-color: inherit; /* 2 */\n border-collapse: collapse; /* 3 */\n }\n\n /*\n Use the modern Firefox focus style for all focusable elements.\n*/\n\n :-moz-focusring {\n outline: auto;\n }\n\n /*\n Add the correct vertical alignment in Chrome and Firefox.\n*/\n\n progress {\n vertical-align: baseline;\n }\n\n /*\n Add the correct display in Chrome and Safari.\n*/\n\n summary {\n display: list-item;\n }\n\n /*\n Make lists unstyled by default.\n*/\n\n ol,\n ul,\n menu {\n list-style: none;\n }\n\n /*\n 1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14)\n 2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210)\n This can trigger a poorly considered lint error in some tools but is included by design.\n*/\n\n img,\n svg,\n video,\n canvas,\n audio,\n iframe,\n embed,\n object {\n display: block; /* 1 */\n vertical-align: middle; /* 2 */\n }\n\n /*\n Constrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14)\n*/\n\n img,\n video {\n max-width: 100%;\n height: auto;\n }\n\n /*\n 1. Inherit font styles in all browsers.\n 2. Remove border radius in all browsers.\n 3. Remove background color in all browsers.\n 4. Ensure consistent opacity for disabled states in all browsers.\n*/\n\n button,\n input,\n select,\n optgroup,\n textarea,\n ::file-selector-button {\n font: inherit; /* 1 */\n font-feature-settings: inherit; /* 1 */\n font-variation-settings: inherit; /* 1 */\n letter-spacing: inherit; /* 1 */\n color: inherit; /* 1 */\n border-radius: 0; /* 2 */\n background-color: transparent; /* 3 */\n opacity: 1; /* 4 */\n }\n\n /*\n Restore default font weight.\n*/\n\n :where(select:is([multiple], [size])) optgroup {\n font-weight: bolder;\n }\n\n /*\n Restore indentation.\n*/\n\n :where(select:is([multiple], [size])) optgroup option {\n padding-inline-start: 20px;\n }\n\n /*\n Restore space after button.\n*/\n\n ::file-selector-button {\n margin-inline-end: 4px;\n }\n\n /*\n Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300)\n*/\n\n ::placeholder {\n opacity: 1;\n }\n\n /*\n Set the default placeholder color to a semi-transparent version of the current text color in browsers that do not\n crash when using `color-mix(…)` with `currentcolor`. (https://github.com/tailwindlabs/tailwindcss/issues/17194)\n*/\n\n @supports (not (-webkit-appearance: -apple-pay-button)) /* Not Safari */ or\n (contain-intrinsic-size: 1px) /* Safari 17+ */ {\n ::placeholder {\n color: color-mix(in oklab, currentcolor 50%, transparent);\n }\n }\n\n /*\n Prevent resizing textareas horizontally by default.\n*/\n\n textarea {\n resize: vertical;\n }\n\n /*\n Remove the inner padding in Chrome and Safari on macOS.\n*/\n\n ::-webkit-search-decoration {\n -webkit-appearance: none;\n }\n\n /*\n 1. Ensure date/time inputs have the same height when empty in iOS Safari.\n 2. Ensure text alignment can be changed on date/time inputs in iOS Safari.\n*/\n\n ::-webkit-date-and-time-value {\n min-height: 1lh; /* 1 */\n text-align: inherit; /* 2 */\n }\n\n /*\n Prevent height from changing on date/time inputs in macOS Safari when the input is set to `display: block`.\n*/\n\n ::-webkit-datetime-edit {\n display: inline-flex;\n }\n\n /*\n Remove excess padding from pseudo-elements in date/time inputs to ensure consistent height across browsers.\n*/\n\n ::-webkit-datetime-edit-fields-wrapper {\n padding: 0;\n }\n\n ::-webkit-datetime-edit,\n ::-webkit-datetime-edit-year-field,\n ::-webkit-datetime-edit-month-field,\n ::-webkit-datetime-edit-day-field,\n ::-webkit-datetime-edit-hour-field,\n ::-webkit-datetime-edit-minute-field,\n ::-webkit-datetime-edit-second-field,\n ::-webkit-datetime-edit-millisecond-field,\n ::-webkit-datetime-edit-meridiem-field {\n padding-block: 0;\n }\n\n /*\n Center dropdown marker shown on inputs with paired ``s in Chrome. (https://github.com/tailwindlabs/tailwindcss/issues/18499)\n*/\n\n ::-webkit-calendar-picker-indicator {\n line-height: 1;\n }\n\n /*\n Remove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737)\n*/\n\n :-moz-ui-invalid {\n box-shadow: none;\n }\n\n /*\n Correct the inability to style the border radius in iOS Safari.\n*/\n\n button,\n input:where([type=\"button\"], [type=\"reset\"], [type=\"submit\"]),\n ::file-selector-button {\n appearance: button;\n }\n\n /*\n Correct the cursor style of increment and decrement buttons in Safari.\n*/\n\n ::-webkit-inner-spin-button,\n ::-webkit-outer-spin-button {\n height: auto;\n }\n\n /*\n Make elements with the HTML hidden attribute stay hidden by default.\n*/\n\n [hidden]:where(:not([hidden=\"until-found\"])) {\n display: none !important;\n }\n}\n\n@layer utilities {\n @tailwind utilities;\n}\n"], + "mappings": "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", + "names": [] +} diff --git a/frontend/dist-instrumented/thermostat-card.component-EVEASKKD.css.map b/frontend/dist-instrumented/thermostat-card.component-EVEASKKD.css.map new file mode 100644 index 00000000..4f77527f --- /dev/null +++ b/frontend/dist-instrumented/thermostat-card.component-EVEASKKD.css.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["src/app/features/device-interaction/components/thermostat-card/thermostat-card.component.css"], + "sourcesContent": [".device-card { border: 1px solid #d8dee3; border-radius: 0.5rem; padding: 0.75rem; display: grid; gap: 0.6rem; }\n.device-card h3, .device-card p { margin: 0; }\n.device-card__actions { display: flex; gap: 0.5rem; flex-wrap: wrap; }\n.device-card__error { color: #a40000; margin: 0; font-size: 0.85rem; }\n"], + "mappings": "AAAA,CAAA,YAAe,OAAA,IAAA,MAAA,QAAf,cAA0C,MAA1C,QAAiE,OAAkB,QAAA,KAAe,IAAA,KAAa,CAC/G,CADA,YACA,GAAA,CADA,YACA,EADA,OACkC,CAAW,CAC7C,CAAA,qBAAwB,QAAA,KAAe,IAAA,MAAa,UAAA,IAAiB,CACrE,CAAA,mBAAsB,MAAA,QAHtB,OAGsC,EAAW,UAAA,MAAoB", + "names": [] +} diff --git a/frontend/dist-instrumented/topbar.component-XCL3YGW6.css.map b/frontend/dist-instrumented/topbar.component-XCL3YGW6.css.map new file mode 100644 index 00000000..8889f70a --- /dev/null +++ b/frontend/dist-instrumented/topbar.component-XCL3YGW6.css.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["src/app/features/main-layout/components/topbar/topbar.component.css"], + "sourcesContent": [":host {\n display: block;\n position: relative;\n z-index: 50;\n}\n\n.topbar-shell {\n display: flex;\n flex-direction: column;\n justify-content: center;\n padding: 0.6rem 1.55rem;\n background: linear-gradient(180deg, #14110f 0%, #221a14 45%, #31271e 100%);\n border-bottom: 1px solid rgba(251, 191, 36, 0.55);\n box-shadow: 0 1px 0 rgba(251, 191, 36, 0.3), inset 0 -1px 0 rgba(255, 255, 255, 0.05);\n}\n\n.topbar-shell__main-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 1rem;\n width: 100%;\n}\n\n.topbar-warning-row {\n display: flex;\n justify-content: center;\n padding-bottom: 0.3rem;\n width: 100%;\n padding-top: .5em;\n}\n\n.topbar-brand {\n display: flex;\n align-items: center;\n gap: 0.95rem;\n min-width: 0;\n}\n\n.topbar-logo {\n width: 2.9rem;\n height: 2.9rem;\n border-radius: 0.75rem;\n border: 1px solid rgba(251, 191, 36, 0.65);\n background: linear-gradient(160deg, rgba(251, 191, 36, 0.35), rgba(252, 211, 77, 0.14));\n}\n\n.topbar-title {\n margin: 0;\n line-height: 1.1;\n font-size: 1.58rem;\n font-weight: 700;\n color: #ffffff;\n}\n\n.topbar-breadcrumb {\n font-size: 0.86rem;\n color: rgba(255, 255, 255, 0.72);\n margin-top: 0.1rem;\n}\n\n.topbar-actions {\n display: flex;\n align-items: center;\n gap: 2em;\n}\n\n.topbar-vimar-warning {\n margin: 0;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding: 0.44rem 0.85rem;\n border-radius: 9999px;\n border: 1px solid rgba(251, 191, 36, 0.85);\n background: rgba(120, 53, 15, 0.9);\n color: #ffffff;\n font-size: 0.78rem;\n font-weight: 700;\n letter-spacing: 0.04em;\n text-transform: uppercase;\n white-space: nowrap;\n}\n\n.topbar-button {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n position: relative;\n border-radius: 0.84rem;\n border: 2px solid transparent;\n min-height: 3.15rem;\n padding: 0.5em;\n font-size: 1.01rem;\n font-weight: 600;\n cursor: pointer;\n background: transparent;\n transition: background 120ms ease, border-color 120ms ease, filter 120ms ease;\n}\n\n.topbar-button-neutral {\n color: #ffffff;\n background: transparent;\n border-color: transparent;\n box-shadow: none;\n}\n\n.topbar-button-neutral img {\n filter: brightness(0) invert(1);\n transition: filter 120ms ease;\n border: 0;\n border-radius: 0;\n height: 1.8rem;\n width: 1.8rem;\n}\n\n.topbar-button-neutral:hover {\n background: transparent;\n\tborder: 2px solid rgba(251, 191, 36, 0.85);\n}\n\n.topbar-button-neutral:active {\n background: linear-gradient(120deg, #fcd34d 0%, #fbbf24 100%);\n border-color: rgba(217, 119, 6, 0.65);\n animation: btn-bounce 0.4s ease forwards;\n}\n\n.topbar-button-neutral:active img {\n filter: brightness(0);\n}\n\n.topbar-button-neutral.notification-active {\n background: linear-gradient(120deg, #fcd34d 0%, #fbbf24 100%);\n border-color: rgba(217, 119, 6, 0.65);\n animation: btn-bounce 0.4s ease forwards;\n}\n\n.topbar-button-neutral.notification-active img {\n filter: brightness(0);\n}\n\n.topbar-notification-count {\n position: absolute;\n top: 0.15rem;\n right: 0.1rem;\n min-width: 1.2rem;\n height: 1.2rem;\n padding: 0 0.3rem;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n border-radius: 9999px;\n background: #dc2626;\n border: 1px solid rgba(255, 255, 255, 0.9);\n color: #ffffff;\n font-size: 0.66rem;\n font-weight: 700;\n line-height: 1;\n}\n\n.topbar-profile {\n display: flex;\n align-items: center;\n border: 2px solid transparent;\n border-radius: 0.92rem;\n background: transparent;\n min-height: 3.15rem;\n padding: 0.44rem 0.62rem;\n cursor: pointer;\n position: relative;\n transition: background 120ms ease, border-color 120ms ease;\n}\n\n.topbar-profile .topbar-avatar {\n filter: brightness(0) invert(1);\n transition: filter 120ms ease;\n}\n\n.topbar-profile:hover {\n background: transparent;\n border: 2px solid rgba(251, 191, 36, 0.85);\n}\n\n.topbar-profile.profile-active {\n background: linear-gradient(120deg, #fcd34d 0%, #fbbf24 100%);\n border-color: rgba(217, 119, 6, 0.65);\n animation: btn-bounce 0.4s ease forwards;\n}\n\n.topbar-profile.profile-active .topbar-avatar {\n filter: brightness(0);\n}\n\n.topbar-profile.profile-disabled {\n opacity: 0.68;\n cursor: not-allowed;\n filter: saturate(0.75);\n}\n\n.topbar-avatar {\n width: 2.25rem;\n height: 2.25rem;\n border-radius: 9999px;\n object-fit: cover;\n}\n\n.topbar-user-meta {\n text-align: left;\n line-height: 1.08;\n color: #1f2937;\n font-size: 0.93rem;\n}\n\n.topbar-user-meta p {\n margin: 0;\n}\n\n@keyframes btn-bounce {\n 0%, 100% { transform: translateY(0); }\n 40% { transform: translateY(-4px); }\n 70% { transform: translateY(-2px); }\n}\n\n@keyframes btn-bounce-out {\n 0% { transform: translateY(0); }\n 40% { transform: translateY(4px); }\n 70% { transform: translateY(2px); }\n 100% { transform: translateY(0); }\n}\n\n.topbar-profile:not(.profile-active) {\n animation: btn-bounce-out 0.4s ease forwards;\n}\n\n.topbar-button-neutral:not(.notification-active) {\n animation: btn-bounce-out 0.4s ease forwards;\n}\n\n.hamburger-btn {\n display: none;\n}\n\n@media (max-width: 767px) {\n .logout-button {\n display: none;\n }\n\n .hamburger-btn {\n display: flex;\n align-items: center;\n justify-content: center;\n background: transparent;\n border: 2px solid rgba(251, 191, 36, 0.5);\n border-radius: 0.6rem;\n color: #fcd34d;\n font-size: 1.3rem;\n padding: 0.4rem 0.6rem;\n cursor: pointer;\n }\n\n .topbar-shell {\n padding-inline: 0.9rem;\n }\n\n .topbar-user-meta {\n display: none;\n }\n\n .topbar-profile--desktop {\n display: none;\n }\n\n .topbar-vimar-warning {\n font-size: 0.68rem;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n}"], + "mappings": "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", + "names": [] +} diff --git a/frontend/dist-instrumented/user-avatar.png b/frontend/dist-instrumented/user-avatar.png new file mode 100644 index 00000000..154b34b1 Binary files /dev/null and b/frontend/dist-instrumented/user-avatar.png differ diff --git a/frontend/dist-instrumented/user-management-page-SM5IEUCQ.css.map b/frontend/dist-instrumented/user-management-page-SM5IEUCQ.css.map new file mode 100644 index 00000000..41d981c8 --- /dev/null +++ b/frontend/dist-instrumented/user-management-page-SM5IEUCQ.css.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["src/app/features/user-management/components/user-management-page/user-management-page.css"], + "sourcesContent": [".user-management-page {\n gap: 1.15rem;\n}"], + "mappings": "AAAA,CAAA,qBACI,IAAA,OACJ", + "names": [] +} diff --git a/frontend/dist-instrumented/user-management.png b/frontend/dist-instrumented/user-management.png new file mode 100644 index 00000000..79e5cd36 Binary files /dev/null and b/frontend/dist-instrumented/user-management.png differ diff --git a/frontend/dist-instrumented/view4life.ico b/frontend/dist-instrumented/view4life.ico new file mode 100644 index 00000000..a4dc79a0 Binary files /dev/null and b/frontend/dist-instrumented/view4life.ico differ diff --git a/frontend/dist-instrumented/ward-form-dialog-component-JO6VBR2J.css.map b/frontend/dist-instrumented/ward-form-dialog-component-JO6VBR2J.css.map new file mode 100644 index 00000000..18f64ddc --- /dev/null +++ b/frontend/dist-instrumented/ward-form-dialog-component-JO6VBR2J.css.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["src/app/features/ward-management/components/ward-form-dialog-component/ward-form-dialog-component.css"], + "sourcesContent": ["@media (min-width: 767px) {\r\n dialog {\r\n left: calc(50% + 80px);\r\n top: 50%;\r\n transform: translate(-50%, -50%);\r\n }\r\n}"], + "mappings": "AAAA,OAAA,UAAA,OACI,OACI,KAAA,KAAA,IAAA,EAAA,MACA,IAAA,IACA,UAAA,UAAA,IAAA,CAAA,KACJ,CACJ", + "names": [] +} diff --git a/frontend/dist-instrumented/ward-management-page-component-OXVHAKTG.css.map b/frontend/dist-instrumented/ward-management-page-component-OXVHAKTG.css.map new file mode 100644 index 00000000..68f56695 --- /dev/null +++ b/frontend/dist-instrumented/ward-management-page-component-OXVHAKTG.css.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["src/app/features/ward-management/components/ward-management-page-component/ward-management-page-component.css"], + "sourcesContent": [".ward-management-page {\n\tgap: 1.15rem;\n}\n\n.col-separator {\n\tborder-right: 1px solid #e2e8f0;\n}\n\n.col-scroll {\n\tscrollbar-width: thin;\n\tscrollbar-color: #cbd5e1 transparent;\n}\n\n.col-scroll::-webkit-scrollbar {\n\twidth: 4px;\n}\n\n.col-scroll::-webkit-scrollbar-thumb {\n\tbackground: #cbd5e1;\n\tborder-radius: 999px;\n}\n"], + "mappings": "AAAA,CAAA,qBACC,IAAA,OACD,CAEA,CAAA,cACC,aAAA,IAAA,MAAA,OACD,CAEA,CAAA,WACC,gBAAA,KACA,gBAAA,QAAA,WACD,CAEA,CALA,UAKA,oBACC,MAAA,GACD,CAEA,CATA,UASA,0BACC,WAAA,QAlBD,cAmBC,KACD", + "names": [] +} diff --git a/frontend/dist-instrumented/ward-management.png b/frontend/dist-instrumented/ward-management.png new file mode 100644 index 00000000..970ebaf4 Binary files /dev/null and b/frontend/dist-instrumented/ward-management.png differ diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 047c3fba..0bd8292e 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -21,12 +21,20 @@ "tslib": "^2.3.0" }, "devDependencies": { + "@angular-builders/custom-webpack": "^21.0.3", "@angular/build": "^21.2.2", "@angular/cli": "^21.2.2", "@angular/compiler-cli": "^21.2.0", + "@cypress/code-coverage": "^4.0.3", + "@cypress/schematic": "^5.0.0", "@tailwindcss/postcss": "^4.1.12", "@vitest/coverage-v8": "^4.1.2", + "@vitest/ui": "^4.1.4", + "babel-plugin-istanbul": "^8.0.0", + "cypress": "15.13.1", + "http-server": "^14.1.1", "jsdom": "^28.0.0", + "nyc": "^18.0.0", "postcss": "^8.5.3", "prettier": "^3.8.1", "tailwindcss": "^4.1.12", @@ -277,14 +285,51 @@ "node": ">=6.0.0" } }, - "node_modules/@angular-devkit/architect": { - "version": "0.2102.2", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.2102.2.tgz", - "integrity": "sha512-CDvFtXwyBtMRkTQnm+LfBNLL0yLV8ZGskrM1T6VkcGwXGFDott1FxUdj96ViodYsYL5fbJr0MNA6TlLcanV3kQ==", + "node_modules/@angular-builders/common": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@angular-builders/common/-/common-5.0.3.tgz", + "integrity": "sha512-Dro3574mu4/xqmjdA3159+TXDhgTbIJpEY/iBETSKUvHJiCgHel+R3eT105RpHN5o7NaD2rau5Zk2wuZqOk35Q==", "dev": true, "license": "MIT", "dependencies": { - "@angular-devkit/core": "21.2.2", + "@angular-devkit/core": "^21.0.0", + "ts-node": "^10.0.0", + "tsconfig-paths": "^4.2.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + } + }, + "node_modules/@angular-builders/custom-webpack": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@angular-builders/custom-webpack/-/custom-webpack-21.0.3.tgz", + "integrity": "sha512-Aq3PZoQxY4jmfDb1sT5E6ZFAdiv35PziFmgYoW5DGX8xbYsV7EoKWZN2ZIjEI3Zr/WUZWGlxmxa11XK9WOtidg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@angular-builders/common": "5.0.3", + "@angular-devkit/architect": ">=0.2100.0 < 0.2200.0", + "@angular-devkit/build-angular": "^21.0.0", + "@angular-devkit/core": "^21.0.0", + "@angular/build": "^21.0.0", + "lodash": "^4.17.15", + "webpack-merge": "^6.0.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + }, + "peerDependencies": { + "@angular/compiler-cli": "^21.0.0" + } + }, + "node_modules/@angular-builders/custom-webpack/node_modules/@angular-devkit/architect": { + "version": "0.2102.7", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.2102.7.tgz", + "integrity": "sha512-4K/5hln9iaPEt3F/NyYqncNLvYpzSjRslEkHl2xIgZwQsIFHEvhnDRBYj2/oatURQhBqO/Yu15z/icVOYLxuTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@angular-devkit/core": "21.2.7", "rxjs": "7.8.2" }, "bin": { @@ -296,62 +341,148 @@ "yarn": ">= 1.13.0" } }, - "node_modules/@angular-devkit/core": { - "version": "21.2.2", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-21.2.2.tgz", - "integrity": "sha512-xUeKGe4BDQpkz0E6fnAPIJXE0y0nqtap0KhJIBhvN7xi3NenIzTmoi6T9Yv5OOBUdLZbOm4SOel8MhdXiIBpAQ==", + "node_modules/@angular-builders/custom-webpack/node_modules/@angular-devkit/build-angular": { + "version": "21.2.7", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-21.2.7.tgz", + "integrity": "sha512-MeAsrvTq3of5x2r5g3cFhWpcb/goHVC5/7BfE+AiWuwClqsgbVoD/HiSXkQ50g2P+JQJ3Qx/DR2cC01H+k6pjg==", "dev": true, "license": "MIT", "dependencies": { - "ajv": "8.18.0", - "ajv-formats": "3.0.1", + "@ampproject/remapping": "2.3.0", + "@angular-devkit/architect": "0.2102.7", + "@angular-devkit/build-webpack": "0.2102.7", + "@angular-devkit/core": "21.2.7", + "@angular/build": "21.2.7", + "@babel/core": "7.29.0", + "@babel/generator": "7.29.1", + "@babel/helper-annotate-as-pure": "7.27.3", + "@babel/helper-split-export-declaration": "7.24.7", + "@babel/plugin-transform-async-generator-functions": "7.29.0", + "@babel/plugin-transform-async-to-generator": "7.28.6", + "@babel/plugin-transform-runtime": "7.29.0", + "@babel/preset-env": "7.29.0", + "@babel/runtime": "7.28.6", + "@discoveryjs/json-ext": "0.6.3", + "@ngtools/webpack": "21.2.7", + "ansi-colors": "4.1.3", + "autoprefixer": "10.4.27", + "babel-loader": "10.0.0", + "browserslist": "^4.26.0", + "copy-webpack-plugin": "14.0.0", + "css-loader": "7.1.3", + "esbuild-wasm": "0.27.3", + "http-proxy-middleware": "3.0.5", + "istanbul-lib-instrument": "6.0.3", "jsonc-parser": "3.3.1", - "picomatch": "4.0.3", + "karma-source-map-support": "1.4.0", + "less": "4.4.2", + "less-loader": "12.3.1", + "license-webpack-plugin": "4.0.2", + "loader-utils": "3.3.1", + "mini-css-extract-plugin": "2.10.0", + "open": "11.0.0", + "ora": "9.3.0", + "picomatch": "4.0.4", + "piscina": "5.1.4", + "postcss": "8.5.6", + "postcss-loader": "8.2.0", + "resolve-url-loader": "5.0.0", "rxjs": "7.8.2", - "source-map": "0.7.6" + "sass": "1.97.3", + "sass-loader": "16.0.7", + "semver": "7.7.4", + "source-map-loader": "5.0.0", + "source-map-support": "0.5.21", + "terser": "5.46.0", + "tinyglobby": "0.2.15", + "tree-kill": "1.2.2", + "tslib": "2.8.1", + "webpack": "5.105.2", + "webpack-dev-middleware": "7.4.5", + "webpack-dev-server": "5.2.3", + "webpack-merge": "6.0.1", + "webpack-subresource-integrity": "5.1.0" }, "engines": { "node": "^20.19.0 || ^22.12.0 || >=24.0.0", "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", "yarn": ">= 1.13.0" }, + "optionalDependencies": { + "esbuild": "0.27.3" + }, "peerDependencies": { - "chokidar": "^5.0.0" + "@angular/compiler-cli": "^21.0.0", + "@angular/core": "^21.0.0", + "@angular/localize": "^21.0.0", + "@angular/platform-browser": "^21.0.0", + "@angular/platform-server": "^21.0.0", + "@angular/service-worker": "^21.0.0", + "@angular/ssr": "^21.2.7", + "@web/test-runner": "^0.20.0", + "browser-sync": "^3.0.2", + "jest": "^30.2.0", + "jest-environment-jsdom": "^30.2.0", + "karma": "^6.3.0", + "ng-packagr": "^21.0.0", + "protractor": "^7.0.0", + "tailwindcss": "^2.0.0 || ^3.0.0 || ^4.0.0", + "typescript": ">=5.9 <6.0" }, "peerDependenciesMeta": { - "chokidar": { + "@angular/core": { + "optional": true + }, + "@angular/localize": { + "optional": true + }, + "@angular/platform-browser": { + "optional": true + }, + "@angular/platform-server": { + "optional": true + }, + "@angular/service-worker": { + "optional": true + }, + "@angular/ssr": { + "optional": true + }, + "@web/test-runner": { + "optional": true + }, + "browser-sync": { + "optional": true + }, + "jest": { + "optional": true + }, + "jest-environment-jsdom": { + "optional": true + }, + "karma": { + "optional": true + }, + "ng-packagr": { + "optional": true + }, + "protractor": { + "optional": true + }, + "tailwindcss": { "optional": true } } }, - "node_modules/@angular-devkit/schematics": { - "version": "21.2.2", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-21.2.2.tgz", - "integrity": "sha512-CCeyQxGUq+oyGnHd7PfcYIVbj9pRnqjQq0rAojoAqs1BJdtInx9weLBCLy+AjM3NHePeZrnwm+wEVr8apED8kg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@angular-devkit/core": "21.2.2", - "jsonc-parser": "3.3.1", - "magic-string": "0.30.21", - "ora": "9.3.0", - "rxjs": "7.8.2" - }, - "engines": { - "node": "^20.19.0 || ^22.12.0 || >=24.0.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@angular/build": { - "version": "21.2.2", - "resolved": "https://registry.npmjs.org/@angular/build/-/build-21.2.2.tgz", - "integrity": "sha512-Vq2eIneNxzhHm1MwEmRqEJDwHU9ODfSRDaMWwtysGMhpoMQmLdfTqkQDmkC2qVUr8mV8Z1i5I+oe5ZJaMr/PlQ==", + "node_modules/@angular-builders/custom-webpack/node_modules/@angular-devkit/build-angular/node_modules/@angular/build": { + "version": "21.2.7", + "resolved": "https://registry.npmjs.org/@angular/build/-/build-21.2.7.tgz", + "integrity": "sha512-FpSkFqpsJtdN1cROekVYkmeV1QepdP+/d7fyYQEuNmlOlyqXSDh9qJmy4iL9VNbAU0rk+vFCtYM86rO7Pt9cSw==", "dev": true, "license": "MIT", "dependencies": { "@ampproject/remapping": "2.3.0", - "@angular-devkit/architect": "0.2102.2", + "@angular-devkit/architect": "0.2102.7", "@babel/core": "7.29.0", "@babel/helper-annotate-as-pure": "7.27.3", "@babel/helper-split-export-declaration": "7.24.7", @@ -367,15 +498,15 @@ "magic-string": "0.30.21", "mrmime": "2.0.1", "parse5-html-rewriting-stream": "8.0.0", - "picomatch": "4.0.3", + "picomatch": "4.0.4", "piscina": "5.1.4", "rolldown": "1.0.0-rc.4", "sass": "1.97.3", "semver": "7.7.4", "source-map-support": "0.5.21", "tinyglobby": "0.2.15", - "undici": "7.22.0", - "vite": "7.3.1", + "undici": "7.24.4", + "vite": "7.3.2", "watchpack": "2.5.1" }, "engines": { @@ -394,7 +525,7 @@ "@angular/platform-browser": "^21.0.0", "@angular/platform-server": "^21.0.0", "@angular/service-worker": "^21.0.0", - "@angular/ssr": "^21.2.2", + "@angular/ssr": "^21.2.7", "karma": "^6.4.0", "less": "^4.2.0", "ng-packagr": "^21.0.0", @@ -443,2774 +574,3033 @@ } } }, - "node_modules/@angular/cdk": { - "version": "21.2.4", - "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-21.2.4.tgz", - "integrity": "sha512-Zv+q9Z/wVWTt0ckuO3gnU7PbpCLTr1tKPEsofLGGzDufA5/85aBLn2UiLcjlY6wQ+V3EMqANhGo/8XJgvBEYFA==", + "node_modules/@angular-builders/custom-webpack/node_modules/@angular-devkit/build-angular/node_modules/@angular/build/node_modules/vite": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.2.tgz", + "integrity": "sha512-Bby3NOsna2jsjfLVOHKes8sGwgl4TT0E6vvpYgnAYDIF/tie7MRaFthmKuHx1NSXjiTueXH3do80FMQgvEktRg==", + "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "parse5": "^8.0.0", - "tslib": "^2.3.0" + "esbuild": "^0.27.0", + "fdir": "^6.5.0", + "picomatch": "^4.0.3", + "postcss": "^8.5.6", + "rollup": "^4.43.0", + "tinyglobby": "^0.2.15" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" }, "peerDependencies": { - "@angular/common": "^21.0.0 || ^22.0.0", - "@angular/core": "^21.0.0 || ^22.0.0", - "@angular/platform-browser": "^21.0.0 || ^22.0.0", - "rxjs": "^6.5.3 || ^7.4.0" + "@types/node": "^20.19.0 || >=22.12.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "lightningcss": "^1.21.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } } }, - "node_modules/@angular/cli": { - "version": "21.2.2", - "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-21.2.2.tgz", - "integrity": "sha512-eZo8/qX+ZIpIWc0CN+cCX13Lbgi/031wAp8DRVhDDO6SMVtcr/ObOQ2S16+pQdOMXxiG3vby6IhzJuz9WACzMQ==", + "node_modules/@angular-builders/custom-webpack/node_modules/@angular-devkit/core": { + "version": "21.2.7", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-21.2.7.tgz", + "integrity": "sha512-DONYY5u4IENO2qpd23mODaE4JI2EIohWV1kuJnsU9HIcm5wN714QB2z9WY/s4gLfUiAMIUu/8lpnW/0kOQZAnQ==", "dev": true, "license": "MIT", "dependencies": { - "@angular-devkit/architect": "0.2102.2", - "@angular-devkit/core": "21.2.2", - "@angular-devkit/schematics": "21.2.2", - "@inquirer/prompts": "7.10.1", - "@listr2/prompt-adapter-inquirer": "3.0.5", - "@modelcontextprotocol/sdk": "1.26.0", - "@schematics/angular": "21.2.2", - "@yarnpkg/lockfile": "1.1.0", - "algoliasearch": "5.48.1", - "ini": "6.0.0", + "ajv": "8.18.0", + "ajv-formats": "3.0.1", "jsonc-parser": "3.3.1", - "listr2": "9.0.5", - "npm-package-arg": "13.0.2", - "pacote": "21.3.1", - "parse5-html-rewriting-stream": "8.0.0", - "semver": "7.7.4", - "yargs": "18.0.0", - "zod": "4.3.6" - }, - "bin": { - "ng": "bin/ng.js" + "picomatch": "4.0.4", + "rxjs": "7.8.2", + "source-map": "0.7.6" }, "engines": { "node": "^20.19.0 || ^22.12.0 || >=24.0.0", "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "chokidar": "^5.0.0" + }, + "peerDependenciesMeta": { + "chokidar": { + "optional": true + } } }, - "node_modules/@angular/common": { - "version": "21.2.4", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-21.2.4.tgz", - "integrity": "sha512-NrP6qOuUpo3fqq14UJ1b2bIRtWsfvxh1qLqOyFV4gfBrHhXd0XffU1LUlUw1qp4w1uBSgPJ0/N5bSPUWrAguVg==", + "node_modules/@angular-builders/custom-webpack/node_modules/@babel/preset-env": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.29.0.tgz", + "integrity": "sha512-fNEdfc0yi16lt6IZo2Qxk3knHVdfMYX33czNb4v8yWhemoBhibCpQK/uYHtSKIiO+p/zd3+8fYVXhQdOVV608w==", + "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "tslib": "^2.3.0" + "@babel/compat-data": "^7.29.0", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/helper-validator-option": "^7.27.1", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.28.5", + "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.27.1", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.27.1", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.27.1", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.28.6", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-import-assertions": "^7.28.6", + "@babel/plugin-syntax-import-attributes": "^7.28.6", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.27.1", + "@babel/plugin-transform-async-generator-functions": "^7.29.0", + "@babel/plugin-transform-async-to-generator": "^7.28.6", + "@babel/plugin-transform-block-scoped-functions": "^7.27.1", + "@babel/plugin-transform-block-scoping": "^7.28.6", + "@babel/plugin-transform-class-properties": "^7.28.6", + "@babel/plugin-transform-class-static-block": "^7.28.6", + "@babel/plugin-transform-classes": "^7.28.6", + "@babel/plugin-transform-computed-properties": "^7.28.6", + "@babel/plugin-transform-destructuring": "^7.28.5", + "@babel/plugin-transform-dotall-regex": "^7.28.6", + "@babel/plugin-transform-duplicate-keys": "^7.27.1", + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.29.0", + "@babel/plugin-transform-dynamic-import": "^7.27.1", + "@babel/plugin-transform-explicit-resource-management": "^7.28.6", + "@babel/plugin-transform-exponentiation-operator": "^7.28.6", + "@babel/plugin-transform-export-namespace-from": "^7.27.1", + "@babel/plugin-transform-for-of": "^7.27.1", + "@babel/plugin-transform-function-name": "^7.27.1", + "@babel/plugin-transform-json-strings": "^7.28.6", + "@babel/plugin-transform-literals": "^7.27.1", + "@babel/plugin-transform-logical-assignment-operators": "^7.28.6", + "@babel/plugin-transform-member-expression-literals": "^7.27.1", + "@babel/plugin-transform-modules-amd": "^7.27.1", + "@babel/plugin-transform-modules-commonjs": "^7.28.6", + "@babel/plugin-transform-modules-systemjs": "^7.29.0", + "@babel/plugin-transform-modules-umd": "^7.27.1", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.29.0", + "@babel/plugin-transform-new-target": "^7.27.1", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.28.6", + "@babel/plugin-transform-numeric-separator": "^7.28.6", + "@babel/plugin-transform-object-rest-spread": "^7.28.6", + "@babel/plugin-transform-object-super": "^7.27.1", + "@babel/plugin-transform-optional-catch-binding": "^7.28.6", + "@babel/plugin-transform-optional-chaining": "^7.28.6", + "@babel/plugin-transform-parameters": "^7.27.7", + "@babel/plugin-transform-private-methods": "^7.28.6", + "@babel/plugin-transform-private-property-in-object": "^7.28.6", + "@babel/plugin-transform-property-literals": "^7.27.1", + "@babel/plugin-transform-regenerator": "^7.29.0", + "@babel/plugin-transform-regexp-modifiers": "^7.28.6", + "@babel/plugin-transform-reserved-words": "^7.27.1", + "@babel/plugin-transform-shorthand-properties": "^7.27.1", + "@babel/plugin-transform-spread": "^7.28.6", + "@babel/plugin-transform-sticky-regex": "^7.27.1", + "@babel/plugin-transform-template-literals": "^7.27.1", + "@babel/plugin-transform-typeof-symbol": "^7.27.1", + "@babel/plugin-transform-unicode-escapes": "^7.27.1", + "@babel/plugin-transform-unicode-property-regex": "^7.28.6", + "@babel/plugin-transform-unicode-regex": "^7.27.1", + "@babel/plugin-transform-unicode-sets-regex": "^7.28.6", + "@babel/preset-modules": "0.1.6-no-external-plugins", + "babel-plugin-polyfill-corejs2": "^0.4.15", + "babel-plugin-polyfill-corejs3": "^0.14.0", + "babel-plugin-polyfill-regenerator": "^0.6.6", + "core-js-compat": "^3.48.0", + "semver": "^6.3.1" }, "engines": { - "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + "node": ">=6.9.0" }, "peerDependencies": { - "@angular/core": "21.2.4", - "rxjs": "^6.5.3 || ^7.4.0" + "@babel/core": "^7.0.0-0" } }, - "node_modules/@angular/compiler": { - "version": "21.2.4", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-21.2.4.tgz", - "integrity": "sha512-9+ulVK3idIo/Tu4X2ic7/V0+Uj7pqrOAbOuIirYe6Ymm3AjexuFRiGBbfcH0VJhQ5cf8TvIJ1fuh+MI4JiRIxA==", - "license": "MIT", - "peer": true, - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + "node_modules/@angular-builders/custom-webpack/node_modules/@babel/preset-env/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/@angular/compiler-cli": { - "version": "21.2.4", - "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-21.2.4.tgz", - "integrity": "sha512-vGjd7DZo/Ox50pQCm5EycmBu91JclimPtZoyNXu/2hSxz3oAkzwiHCwlHwk2g58eheSSp+lYtYRLmHAqSVZLjg==", + "node_modules/@angular-builders/custom-webpack/node_modules/babel-loader": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-10.0.0.tgz", + "integrity": "sha512-z8jt+EdS61AMw22nSfoNJAZ0vrtmhPRVi6ghL3rCeRZI8cdNYFiV5xeV3HbE7rlZZNmGH8BVccwWt8/ED0QOHA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "@babel/core": "7.29.0", - "@jridgewell/sourcemap-codec": "^1.4.14", - "chokidar": "^5.0.0", - "convert-source-map": "^1.5.1", - "reflect-metadata": "^0.2.0", - "semver": "^7.0.0", - "tslib": "^2.3.0", - "yargs": "^18.0.0" - }, - "bin": { - "ng-xi18n": "bundles/src/bin/ng_xi18n.js", - "ngc": "bundles/src/bin/ngc.js" + "find-up": "^5.0.0" }, "engines": { - "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + "node": "^18.20.0 || ^20.10.0 || >=22.0.0" }, "peerDependencies": { - "@angular/compiler": "21.2.4", - "typescript": ">=5.9 <6.1" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "@babel/core": "^7.12.0", + "webpack": ">=5.61.0" } }, - "node_modules/@angular/core": { - "version": "21.2.4", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-21.2.4.tgz", - "integrity": "sha512-2+gd67ZuXHpGOqeb2o7XZPueEWEP81eJza2tSHkT5QMV8lnYllDEmaNnkPxnIjSLGP1O3PmiXxo4z8ibHkLZwg==", + "node_modules/@angular-builders/custom-webpack/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@angular-builders/custom-webpack/node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@angular-builders/custom-webpack/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, "license": "MIT", - "peer": true, - "dependencies": { - "tslib": "^2.3.0" - }, "engines": { - "node": "^20.19.0 || ^22.12.0 || >=24.0.0" - }, - "peerDependencies": { - "@angular/compiler": "21.2.4", - "rxjs": "^6.5.3 || ^7.4.0", - "zone.js": "~0.15.0 || ~0.16.0" - }, - "peerDependenciesMeta": { - "@angular/compiler": { - "optional": true - }, - "zone.js": { - "optional": true - } + "node": ">= 0.6" } }, - "node_modules/@angular/forms": { - "version": "21.2.4", - "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-21.2.4.tgz", - "integrity": "sha512-1fOhctA9ADEBYjI3nPQUR5dHsK2+UWAjup37Ksldk/k0w8UpD5YsN7JVNvsDMZRFMucKYcGykPblU7pABtsqnQ==", + "node_modules/@angular-builders/custom-webpack/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, "license": "MIT", "dependencies": { - "@standard-schema/spec": "^1.0.0", - "tslib": "^2.3.0" + "mime-db": "1.52.0" }, "engines": { - "node": "^20.19.0 || ^22.12.0 || >=24.0.0" - }, - "peerDependencies": { - "@angular/common": "21.2.4", - "@angular/core": "21.2.4", - "@angular/platform-browser": "21.2.4", - "rxjs": "^6.5.3 || ^7.4.0" + "node": ">= 0.6" } }, - "node_modules/@angular/platform-browser": { - "version": "21.2.4", - "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-21.2.4.tgz", - "integrity": "sha512-1A9e/cQVu+3BkRCktLcO3RZGuw8NOTHw1frUUrpAz+iMyvIT4sDRFbL+U1g8qmOCZqRNC1Pi1HZfZ1kl6kvrcQ==", + "node_modules/@angular-builders/custom-webpack/node_modules/picomatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", + "dev": true, "license": "MIT", - "peer": true, - "dependencies": { - "tslib": "^2.3.0" - }, "engines": { - "node": "^20.19.0 || ^22.12.0 || >=24.0.0" - }, - "peerDependencies": { - "@angular/animations": "21.2.4", - "@angular/common": "21.2.4", - "@angular/core": "21.2.4" + "node": ">=12" }, - "peerDependenciesMeta": { - "@angular/animations": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/@angular/router": { - "version": "21.2.4", - "resolved": "https://registry.npmjs.org/@angular/router/-/router-21.2.4.tgz", - "integrity": "sha512-OjWze4XT8i2MThcBXMv7ru1k6/5L6QYZbcXuseqimFCHm2avEJ+mXPovY066fMBZJhqbXdjB82OhHAWkIHjglQ==", + "node_modules/@angular-builders/custom-webpack/node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "license": "MIT", "dependencies": { - "tslib": "^2.3.0" + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" }, "engines": { - "node": "^20.19.0 || ^22.12.0 || >=24.0.0" - }, - "peerDependencies": { - "@angular/common": "21.2.4", - "@angular/core": "21.2.4", - "@angular/platform-browser": "21.2.4", - "rxjs": "^6.5.3 || ^7.4.0" + "node": "^10 || ^12 || >=14" } }, - "node_modules/@asamuzakjp/css-color": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-5.0.1.tgz", - "integrity": "sha512-2SZFvqMyvboVV1d15lMf7XiI3m7SDqXUuKaTymJYLN6dSGadqp+fVojqJlVoMlbZnlTmu3S0TLwLTJpvBMO1Aw==", + "node_modules/@angular-builders/custom-webpack/node_modules/terser": { + "version": "5.46.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.46.0.tgz", + "integrity": "sha512-jTwoImyr/QbOWFFso3YoU3ik0jBBDJ6JTOQiy/J2YxVJdZCc+5u7skhNwiOR3FQIygFqVUPHl7qbbxtjW2K3Qg==", "dev": true, - "license": "MIT", + "license": "BSD-2-Clause", "dependencies": { - "@csstools/css-calc": "^3.1.1", - "@csstools/css-color-parser": "^4.0.2", - "@csstools/css-parser-algorithms": "^4.0.0", - "@csstools/css-tokenizer": "^4.0.0", - "lru-cache": "^11.2.6" + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.15.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" }, "engines": { - "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + "node": ">=10" } }, - "node_modules/@asamuzakjp/css-color/node_modules/lru-cache": { - "version": "11.2.7", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.7.tgz", - "integrity": "sha512-aY/R+aEsRelme17KGQa/1ZSIpLpNYYrhcrepKTZgE+W3WM16YMCaPwOHLHsmopZHELU0Ojin1lPVxKR0MihncA==", + "node_modules/@angular-builders/custom-webpack/node_modules/undici": { + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/undici/-/undici-7.24.4.tgz", + "integrity": "sha512-BM/JzwwaRXxrLdElV2Uo6cTLEjhSb3WXboncJamZ15NgUURmvlXvxa6xkwIOILIjPNo9i8ku136ZvWV0Uly8+w==", "dev": true, - "license": "BlueOak-1.0.0", + "license": "MIT", "engines": { - "node": "20 || >=22" + "node": ">=20.18.1" } }, - "node_modules/@asamuzakjp/dom-selector": { - "version": "6.8.1", - "resolved": "https://registry.npmjs.org/@asamuzakjp/dom-selector/-/dom-selector-6.8.1.tgz", - "integrity": "sha512-MvRz1nCqW0fsy8Qz4dnLIvhOlMzqDVBabZx6lH+YywFDdjXhMY37SmpV1XFX3JzG5GWHn63j6HX6QPr3lZXHvQ==", + "node_modules/@angular-builders/custom-webpack/node_modules/webpack": { + "version": "5.105.2", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.105.2.tgz", + "integrity": "sha512-dRXm0a2qcHPUBEzVk8uph0xWSjV/xZxenQQbLwnwP7caQCYpqG1qddwlyEkIDkYn0K8tvmcrZ+bOrzoQ3HxCDw==", "dev": true, "license": "MIT", "dependencies": { - "@asamuzakjp/nwsapi": "^2.3.9", - "bidi-js": "^1.0.3", - "css-tree": "^3.1.0", - "is-potential-custom-element-name": "^1.0.1", - "lru-cache": "^11.2.6" + "@types/eslint-scope": "^3.7.7", + "@types/estree": "^1.0.8", + "@types/json-schema": "^7.0.15", + "@webassemblyjs/ast": "^1.14.1", + "@webassemblyjs/wasm-edit": "^1.14.1", + "@webassemblyjs/wasm-parser": "^1.14.1", + "acorn": "^8.15.0", + "acorn-import-phases": "^1.0.3", + "browserslist": "^4.28.1", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.19.0", + "es-module-lexer": "^2.0.0", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.11", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.3.1", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^4.3.3", + "tapable": "^2.3.0", + "terser-webpack-plugin": "^5.3.16", + "watchpack": "^2.5.1", + "webpack-sources": "^3.3.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } } }, - "node_modules/@asamuzakjp/dom-selector/node_modules/lru-cache": { - "version": "11.2.7", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.7.tgz", - "integrity": "sha512-aY/R+aEsRelme17KGQa/1ZSIpLpNYYrhcrepKTZgE+W3WM16YMCaPwOHLHsmopZHELU0Ojin1lPVxKR0MihncA==", + "node_modules/@angular-devkit/architect": { + "version": "0.2102.2", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.2102.2.tgz", + "integrity": "sha512-CDvFtXwyBtMRkTQnm+LfBNLL0yLV8ZGskrM1T6VkcGwXGFDott1FxUdj96ViodYsYL5fbJr0MNA6TlLcanV3kQ==", "dev": true, - "license": "BlueOak-1.0.0", + "license": "MIT", + "dependencies": { + "@angular-devkit/core": "21.2.2", + "rxjs": "7.8.2" + }, + "bin": { + "architect": "bin/cli.js" + }, "engines": { - "node": "20 || >=22" + "node": "^20.19.0 || ^22.12.0 || >=24.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" } }, - "node_modules/@asamuzakjp/nwsapi": { - "version": "2.3.9", - "resolved": "https://registry.npmjs.org/@asamuzakjp/nwsapi/-/nwsapi-2.3.9.tgz", - "integrity": "sha512-n8GuYSrI9bF7FFZ/SjhwevlHc8xaVlb/7HmHelnc/PZXBD2ZR49NnN9sMMuDdEGPeeRQ5d0hqlSlEpgCX3Wl0Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/@babel/code-frame": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", - "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", + "node_modules/@angular-devkit/build-webpack": { + "version": "0.2102.7", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.2102.7.tgz", + "integrity": "sha512-EANoPney0B0SsbF5LVZvABDkxrSXw0nly7TmGrrV5UNmSLxhmF29IZ14vVGyy7En/zJHOIlQAP7YI39PdtYxqg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.28.5", - "js-tokens": "^4.0.0", - "picocolors": "^1.1.1" + "@angular-devkit/architect": "0.2102.7", + "rxjs": "7.8.2" }, "engines": { - "node": ">=6.9.0" + "node": "^20.19.0 || ^22.12.0 || >=24.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "webpack": "^5.30.0", + "webpack-dev-server": "^5.0.2" } }, - "node_modules/@babel/compat-data": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.0.tgz", - "integrity": "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==", + "node_modules/@angular-devkit/build-webpack/node_modules/@angular-devkit/architect": { + "version": "0.2102.7", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.2102.7.tgz", + "integrity": "sha512-4K/5hln9iaPEt3F/NyYqncNLvYpzSjRslEkHl2xIgZwQsIFHEvhnDRBYj2/oatURQhBqO/Yu15z/icVOYLxuTg==", "dev": true, "license": "MIT", + "dependencies": { + "@angular-devkit/core": "21.2.7", + "rxjs": "7.8.2" + }, + "bin": { + "architect": "bin/cli.js" + }, "engines": { - "node": ">=6.9.0" + "node": "^20.19.0 || ^22.12.0 || >=24.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" } }, - "node_modules/@babel/core": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz", - "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", + "node_modules/@angular-devkit/build-webpack/node_modules/@angular-devkit/core": { + "version": "21.2.7", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-21.2.7.tgz", + "integrity": "sha512-DONYY5u4IENO2qpd23mODaE4JI2EIohWV1kuJnsU9HIcm5wN714QB2z9WY/s4gLfUiAMIUu/8lpnW/0kOQZAnQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "@babel/code-frame": "^7.29.0", - "@babel/generator": "^7.29.0", - "@babel/helper-compilation-targets": "^7.28.6", - "@babel/helper-module-transforms": "^7.28.6", - "@babel/helpers": "^7.28.6", - "@babel/parser": "^7.29.0", - "@babel/template": "^7.28.6", - "@babel/traverse": "^7.29.0", - "@babel/types": "^7.29.0", - "@jridgewell/remapping": "^2.3.5", - "convert-source-map": "^2.0.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.3", - "semver": "^6.3.1" + "ajv": "8.18.0", + "ajv-formats": "3.0.1", + "jsonc-parser": "3.3.1", + "picomatch": "4.0.4", + "rxjs": "7.8.2", + "source-map": "0.7.6" }, "engines": { - "node": ">=6.9.0" + "node": "^20.19.0 || ^22.12.0 || >=24.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/core/node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" + "peerDependencies": { + "chokidar": "^5.0.0" + }, + "peerDependenciesMeta": { + "chokidar": { + "optional": true + } } }, - "node_modules/@babel/generator": { - "version": "7.29.1", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz", - "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==", + "node_modules/@angular-devkit/build-webpack/node_modules/picomatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", "dev": true, "license": "MIT", - "dependencies": { - "@babel/parser": "^7.29.0", - "@babel/types": "^7.29.0", - "@jridgewell/gen-mapping": "^0.3.12", - "@jridgewell/trace-mapping": "^0.3.28", - "jsesc": "^3.0.2" - }, "engines": { - "node": ">=6.9.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.27.3", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz", - "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==", + "node_modules/@angular-devkit/core": { + "version": "21.2.2", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-21.2.2.tgz", + "integrity": "sha512-xUeKGe4BDQpkz0E6fnAPIJXE0y0nqtap0KhJIBhvN7xi3NenIzTmoi6T9Yv5OOBUdLZbOm4SOel8MhdXiIBpAQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.27.3" + "ajv": "8.18.0", + "ajv-formats": "3.0.1", + "jsonc-parser": "3.3.1", + "picomatch": "4.0.3", + "rxjs": "7.8.2", + "source-map": "0.7.6" }, "engines": { - "node": ">=6.9.0" + "node": "^20.19.0 || ^22.12.0 || >=24.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "chokidar": "^5.0.0" + }, + "peerDependenciesMeta": { + "chokidar": { + "optional": true + } } }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz", - "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==", + "node_modules/@angular-devkit/schematics": { + "version": "21.2.2", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-21.2.2.tgz", + "integrity": "sha512-CCeyQxGUq+oyGnHd7PfcYIVbj9pRnqjQq0rAojoAqs1BJdtInx9weLBCLy+AjM3NHePeZrnwm+wEVr8apED8kg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.28.6", - "@babel/helper-validator-option": "^7.27.1", - "browserslist": "^4.24.0", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" + "@angular-devkit/core": "21.2.2", + "jsonc-parser": "3.3.1", + "magic-string": "0.30.21", + "ora": "9.3.0", + "rxjs": "7.8.2" }, "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-globals": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", - "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" + "node": "^20.19.0 || ^22.12.0 || >=24.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" } }, - "node_modules/@babel/helper-module-imports": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz", - "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==", + "node_modules/@angular/build": { + "version": "21.2.2", + "resolved": "https://registry.npmjs.org/@angular/build/-/build-21.2.2.tgz", + "integrity": "sha512-Vq2eIneNxzhHm1MwEmRqEJDwHU9ODfSRDaMWwtysGMhpoMQmLdfTqkQDmkC2qVUr8mV8Z1i5I+oe5ZJaMr/PlQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/traverse": "^7.28.6", - "@babel/types": "^7.28.6" + "@ampproject/remapping": "2.3.0", + "@angular-devkit/architect": "0.2102.2", + "@babel/core": "7.29.0", + "@babel/helper-annotate-as-pure": "7.27.3", + "@babel/helper-split-export-declaration": "7.24.7", + "@inquirer/confirm": "5.1.21", + "@vitejs/plugin-basic-ssl": "2.1.4", + "beasties": "0.4.1", + "browserslist": "^4.26.0", + "esbuild": "0.27.3", + "https-proxy-agent": "7.0.6", + "istanbul-lib-instrument": "6.0.3", + "jsonc-parser": "3.3.1", + "listr2": "9.0.5", + "magic-string": "0.30.21", + "mrmime": "2.0.1", + "parse5-html-rewriting-stream": "8.0.0", + "picomatch": "4.0.3", + "piscina": "5.1.4", + "rolldown": "1.0.0-rc.4", + "sass": "1.97.3", + "semver": "7.7.4", + "source-map-support": "0.5.21", + "tinyglobby": "0.2.15", + "undici": "7.22.0", + "vite": "7.3.1", + "watchpack": "2.5.1" }, "engines": { - "node": ">=6.9.0" + "node": "^20.19.0 || ^22.12.0 || >=24.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "optionalDependencies": { + "lmdb": "3.5.1" + }, + "peerDependencies": { + "@angular/compiler": "^21.0.0", + "@angular/compiler-cli": "^21.0.0", + "@angular/core": "^21.0.0", + "@angular/localize": "^21.0.0", + "@angular/platform-browser": "^21.0.0", + "@angular/platform-server": "^21.0.0", + "@angular/service-worker": "^21.0.0", + "@angular/ssr": "^21.2.2", + "karma": "^6.4.0", + "less": "^4.2.0", + "ng-packagr": "^21.0.0", + "postcss": "^8.4.0", + "tailwindcss": "^2.0.0 || ^3.0.0 || ^4.0.0", + "tslib": "^2.3.0", + "typescript": ">=5.9 <6.0", + "vitest": "^4.0.8" + }, + "peerDependenciesMeta": { + "@angular/core": { + "optional": true + }, + "@angular/localize": { + "optional": true + }, + "@angular/platform-browser": { + "optional": true + }, + "@angular/platform-server": { + "optional": true + }, + "@angular/service-worker": { + "optional": true + }, + "@angular/ssr": { + "optional": true + }, + "karma": { + "optional": true + }, + "less": { + "optional": true + }, + "ng-packagr": { + "optional": true + }, + "postcss": { + "optional": true + }, + "tailwindcss": { + "optional": true + }, + "vitest": { + "optional": true + } } }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz", - "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==", - "dev": true, + "node_modules/@angular/cdk": { + "version": "21.2.4", + "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-21.2.4.tgz", + "integrity": "sha512-Zv+q9Z/wVWTt0ckuO3gnU7PbpCLTr1tKPEsofLGGzDufA5/85aBLn2UiLcjlY6wQ+V3EMqANhGo/8XJgvBEYFA==", "license": "MIT", + "peer": true, "dependencies": { - "@babel/helper-module-imports": "^7.28.6", - "@babel/helper-validator-identifier": "^7.28.5", - "@babel/traverse": "^7.28.6" - }, - "engines": { - "node": ">=6.9.0" + "parse5": "^8.0.0", + "tslib": "^2.3.0" }, "peerDependencies": { - "@babel/core": "^7.0.0" + "@angular/common": "^21.0.0 || ^22.0.0", + "@angular/core": "^21.0.0 || ^22.0.0", + "@angular/platform-browser": "^21.0.0 || ^22.0.0", + "rxjs": "^6.5.3 || ^7.4.0" } }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz", - "integrity": "sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==", + "node_modules/@angular/cli": { + "version": "21.2.2", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-21.2.2.tgz", + "integrity": "sha512-eZo8/qX+ZIpIWc0CN+cCX13Lbgi/031wAp8DRVhDDO6SMVtcr/ObOQ2S16+pQdOMXxiG3vby6IhzJuz9WACzMQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.24.7" + "@angular-devkit/architect": "0.2102.2", + "@angular-devkit/core": "21.2.2", + "@angular-devkit/schematics": "21.2.2", + "@inquirer/prompts": "7.10.1", + "@listr2/prompt-adapter-inquirer": "3.0.5", + "@modelcontextprotocol/sdk": "1.26.0", + "@schematics/angular": "21.2.2", + "@yarnpkg/lockfile": "1.1.0", + "algoliasearch": "5.48.1", + "ini": "6.0.0", + "jsonc-parser": "3.3.1", + "listr2": "9.0.5", + "npm-package-arg": "13.0.2", + "pacote": "21.3.1", + "parse5-html-rewriting-stream": "8.0.0", + "semver": "7.7.4", + "yargs": "18.0.0", + "zod": "4.3.6" + }, + "bin": { + "ng": "bin/ng.js" }, "engines": { - "node": ">=6.9.0" + "node": "^20.19.0 || ^22.12.0 || >=24.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" } }, - "node_modules/@babel/helper-string-parser": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", - "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", - "dev": true, + "node_modules/@angular/common": { + "version": "21.2.4", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-21.2.4.tgz", + "integrity": "sha512-NrP6qOuUpo3fqq14UJ1b2bIRtWsfvxh1qLqOyFV4gfBrHhXd0XffU1LUlUw1qp4w1uBSgPJ0/N5bSPUWrAguVg==", "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, "engines": { - "node": ">=6.9.0" + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + }, + "peerDependencies": { + "@angular/core": "21.2.4", + "rxjs": "^6.5.3 || ^7.4.0" } }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", - "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", - "dev": true, + "node_modules/@angular/compiler": { + "version": "21.2.4", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-21.2.4.tgz", + "integrity": "sha512-9+ulVK3idIo/Tu4X2ic7/V0+Uj7pqrOAbOuIirYe6Ymm3AjexuFRiGBbfcH0VJhQ5cf8TvIJ1fuh+MI4JiRIxA==", "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, "engines": { - "node": ">=6.9.0" + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" } }, - "node_modules/@babel/helper-validator-option": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", - "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", + "node_modules/@angular/compiler-cli": { + "version": "21.2.4", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-21.2.4.tgz", + "integrity": "sha512-vGjd7DZo/Ox50pQCm5EycmBu91JclimPtZoyNXu/2hSxz3oAkzwiHCwlHwk2g58eheSSp+lYtYRLmHAqSVZLjg==", "dev": true, "license": "MIT", + "dependencies": { + "@babel/core": "7.29.0", + "@jridgewell/sourcemap-codec": "^1.4.14", + "chokidar": "^5.0.0", + "convert-source-map": "^1.5.1", + "reflect-metadata": "^0.2.0", + "semver": "^7.0.0", + "tslib": "^2.3.0", + "yargs": "^18.0.0" + }, + "bin": { + "ng-xi18n": "bundles/src/bin/ng_xi18n.js", + "ngc": "bundles/src/bin/ngc.js" + }, "engines": { - "node": ">=6.9.0" + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + }, + "peerDependencies": { + "@angular/compiler": "21.2.4", + "typescript": ">=5.9 <6.1" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/@babel/helpers": { - "version": "7.29.2", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.2.tgz", - "integrity": "sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw==", - "dev": true, + "node_modules/@angular/core": { + "version": "21.2.4", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-21.2.4.tgz", + "integrity": "sha512-2+gd67ZuXHpGOqeb2o7XZPueEWEP81eJza2tSHkT5QMV8lnYllDEmaNnkPxnIjSLGP1O3PmiXxo4z8ibHkLZwg==", "license": "MIT", "dependencies": { - "@babel/template": "^7.28.6", - "@babel/types": "^7.29.0" + "tslib": "^2.3.0" }, "engines": { - "node": ">=6.9.0" + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + }, + "peerDependencies": { + "@angular/compiler": "21.2.4", + "rxjs": "^6.5.3 || ^7.4.0", + "zone.js": "~0.15.0 || ~0.16.0" + }, + "peerDependenciesMeta": { + "@angular/compiler": { + "optional": true + }, + "zone.js": { + "optional": true + } } }, - "node_modules/@babel/parser": { - "version": "7.29.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.2.tgz", - "integrity": "sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==", - "dev": true, + "node_modules/@angular/forms": { + "version": "21.2.4", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-21.2.4.tgz", + "integrity": "sha512-1fOhctA9ADEBYjI3nPQUR5dHsK2+UWAjup37Ksldk/k0w8UpD5YsN7JVNvsDMZRFMucKYcGykPblU7pABtsqnQ==", "license": "MIT", "dependencies": { - "@babel/types": "^7.29.0" - }, - "bin": { - "parser": "bin/babel-parser.js" + "@standard-schema/spec": "^1.0.0", + "tslib": "^2.3.0" }, "engines": { - "node": ">=6.0.0" + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + }, + "peerDependencies": { + "@angular/common": "21.2.4", + "@angular/core": "21.2.4", + "@angular/platform-browser": "21.2.4", + "rxjs": "^6.5.3 || ^7.4.0" } }, - "node_modules/@babel/template": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", - "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", - "dev": true, + "node_modules/@angular/platform-browser": { + "version": "21.2.4", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-21.2.4.tgz", + "integrity": "sha512-1A9e/cQVu+3BkRCktLcO3RZGuw8NOTHw1frUUrpAz+iMyvIT4sDRFbL+U1g8qmOCZqRNC1Pi1HZfZ1kl6kvrcQ==", "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.28.6", - "@babel/parser": "^7.28.6", - "@babel/types": "^7.28.6" + "tslib": "^2.3.0" }, "engines": { - "node": ">=6.9.0" + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + }, + "peerDependencies": { + "@angular/animations": "21.2.4", + "@angular/common": "21.2.4", + "@angular/core": "21.2.4" + }, + "peerDependenciesMeta": { + "@angular/animations": { + "optional": true + } } }, - "node_modules/@babel/traverse": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz", - "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==", - "dev": true, + "node_modules/@angular/router": { + "version": "21.2.4", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-21.2.4.tgz", + "integrity": "sha512-OjWze4XT8i2MThcBXMv7ru1k6/5L6QYZbcXuseqimFCHm2avEJ+mXPovY066fMBZJhqbXdjB82OhHAWkIHjglQ==", "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.29.0", - "@babel/generator": "^7.29.0", - "@babel/helper-globals": "^7.28.0", - "@babel/parser": "^7.29.0", - "@babel/template": "^7.28.6", - "@babel/types": "^7.29.0", - "debug": "^4.3.1" + "tslib": "^2.3.0" }, "engines": { - "node": ">=6.9.0" + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + }, + "peerDependencies": { + "@angular/common": "21.2.4", + "@angular/core": "21.2.4", + "@angular/platform-browser": "21.2.4", + "rxjs": "^6.5.3 || ^7.4.0" } }, - "node_modules/@babel/types": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", - "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", + "node_modules/@asamuzakjp/css-color": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-5.0.1.tgz", + "integrity": "sha512-2SZFvqMyvboVV1d15lMf7XiI3m7SDqXUuKaTymJYLN6dSGadqp+fVojqJlVoMlbZnlTmu3S0TLwLTJpvBMO1Aw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.27.1", - "@babel/helper-validator-identifier": "^7.28.5" + "@csstools/css-calc": "^3.1.1", + "@csstools/css-color-parser": "^4.0.2", + "@csstools/css-parser-algorithms": "^4.0.0", + "@csstools/css-tokenizer": "^4.0.0", + "lru-cache": "^11.2.6" }, "engines": { - "node": ">=6.9.0" + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" } }, - "node_modules/@bcoe/v8-coverage": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-1.0.2.tgz", - "integrity": "sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==", + "node_modules/@asamuzakjp/css-color/node_modules/lru-cache": { + "version": "11.2.7", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.7.tgz", + "integrity": "sha512-aY/R+aEsRelme17KGQa/1ZSIpLpNYYrhcrepKTZgE+W3WM16YMCaPwOHLHsmopZHELU0Ojin1lPVxKR0MihncA==", "dev": true, - "license": "MIT", + "license": "BlueOak-1.0.0", "engines": { - "node": ">=18" + "node": "20 || >=22" } }, - "node_modules/@bramus/specificity": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/@bramus/specificity/-/specificity-2.4.2.tgz", - "integrity": "sha512-ctxtJ/eA+t+6q2++vj5j7FYX3nRu311q1wfYH3xjlLOsczhlhxAg2FWNUXhpGvAw3BWo1xBcvOV6/YLc2r5FJw==", + "node_modules/@asamuzakjp/dom-selector": { + "version": "6.8.1", + "resolved": "https://registry.npmjs.org/@asamuzakjp/dom-selector/-/dom-selector-6.8.1.tgz", + "integrity": "sha512-MvRz1nCqW0fsy8Qz4dnLIvhOlMzqDVBabZx6lH+YywFDdjXhMY37SmpV1XFX3JzG5GWHn63j6HX6QPr3lZXHvQ==", "dev": true, "license": "MIT", "dependencies": { - "css-tree": "^3.0.0" - }, - "bin": { - "specificity": "bin/cli.js" + "@asamuzakjp/nwsapi": "^2.3.9", + "bidi-js": "^1.0.3", + "css-tree": "^3.1.0", + "is-potential-custom-element-name": "^1.0.1", + "lru-cache": "^11.2.6" } }, - "node_modules/@csstools/color-helpers": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-6.0.2.tgz", - "integrity": "sha512-LMGQLS9EuADloEFkcTBR3BwV/CGHV7zyDxVRtVDTwdI2Ca4it0CCVTT9wCkxSgokjE5Ho41hEPgb8OEUwoXr6Q==", + "node_modules/@asamuzakjp/dom-selector/node_modules/lru-cache": { + "version": "11.2.7", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.7.tgz", + "integrity": "sha512-aY/R+aEsRelme17KGQa/1ZSIpLpNYYrhcrepKTZgE+W3WM16YMCaPwOHLHsmopZHELU0Ojin1lPVxKR0MihncA==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", + "license": "BlueOak-1.0.0", "engines": { - "node": ">=20.19.0" + "node": "20 || >=22" } }, - "node_modules/@csstools/css-calc": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-3.1.1.tgz", - "integrity": "sha512-HJ26Z/vmsZQqs/o3a6bgKslXGFAungXGbinULZO3eMsOyNJHeBBZfup5FiZInOghgoM4Hwnmw+OgbJCNg1wwUQ==", + "node_modules/@asamuzakjp/nwsapi": { + "version": "2.3.9", + "resolved": "https://registry.npmjs.org/@asamuzakjp/nwsapi/-/nwsapi-2.3.9.tgz", + "integrity": "sha512-n8GuYSrI9bF7FFZ/SjhwevlHc8xaVlb/7HmHelnc/PZXBD2ZR49NnN9sMMuDdEGPeeRQ5d0hqlSlEpgCX3Wl0Q==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", - "engines": { - "node": ">=20.19.0" - }, - "peerDependencies": { - "@csstools/css-parser-algorithms": "^4.0.0", - "@csstools/css-tokenizer": "^4.0.0" - } + "license": "MIT" }, - "node_modules/@csstools/css-color-parser": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-4.0.2.tgz", - "integrity": "sha512-0GEfbBLmTFf0dJlpsNU7zwxRIH0/BGEMuXLTCvFYxuL1tNhqzTbtnFICyJLTNK4a+RechKP75e7w42ClXSnJQw==", + "node_modules/@babel/code-frame": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", + "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], "license": "MIT", "dependencies": { - "@csstools/color-helpers": "^6.0.2", - "@csstools/css-calc": "^3.1.1" + "@babel/helper-validator-identifier": "^7.28.5", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" }, "engines": { - "node": ">=20.19.0" - }, - "peerDependencies": { - "@csstools/css-parser-algorithms": "^4.0.0", - "@csstools/css-tokenizer": "^4.0.0" + "node": ">=6.9.0" } }, - "node_modules/@csstools/css-parser-algorithms": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-4.0.0.tgz", - "integrity": "sha512-+B87qS7fIG3L5h3qwJ/IFbjoVoOe/bpOdh9hAjXbvx0o8ImEmUsGXN0inFOnk2ChCFgqkkGFQ+TpM5rbhkKe4w==", + "node_modules/@babel/compat-data": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.0.tgz", + "integrity": "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], "license": "MIT", - "peer": true, "engines": { - "node": ">=20.19.0" - }, - "peerDependencies": { - "@csstools/css-tokenizer": "^4.0.0" + "node": ">=6.9.0" } }, - "node_modules/@csstools/css-syntax-patches-for-csstree": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@csstools/css-syntax-patches-for-csstree/-/css-syntax-patches-for-csstree-1.1.1.tgz", - "integrity": "sha512-BvqN0AMWNAnLk9G8jnUT77D+mUbY/H2b3uDTvg2isJkHaOufUE2R3AOwxWo7VBQKT1lOdwdvorddo2B/lk64+w==", + "node_modules/@babel/core": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz", + "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "peerDependencies": { - "css-tree": "^3.2.1" + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helpers": "^7.28.6", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/traverse": "^7.29.0", + "@babel/types": "^7.29.0", + "@jridgewell/remapping": "^2.3.5", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" }, - "peerDependenciesMeta": { - "css-tree": { - "optional": true - } + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" } }, - "node_modules/@csstools/css-tokenizer": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-4.0.0.tgz", - "integrity": "sha512-QxULHAm7cNu72w97JUNCBFODFaXpbDg+dP8b/oWFAZ2MTRppA3U00Y2L1HqaS4J6yBqxwa/Y3nMBaxVKbB/NsA==", + "node_modules/@babel/core/node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", - "peer": true, - "engines": { - "node": ">=20.19.0" + "license": "MIT" + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/@emnapi/core": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.9.0.tgz", - "integrity": "sha512-0DQ98G9ZQZOxfUcQn1waV2yS8aWdZ6kJMbYCJB3oUBecjWYO1fqJ+a1DRfPF3O5JEkwqwP1A9QEN/9mYm2Yd0w==", + "node_modules/@babel/generator": { + "version": "7.29.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz", + "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==", "dev": true, "license": "MIT", - "optional": true, "dependencies": { - "@emnapi/wasi-threads": "1.2.0", - "tslib": "^2.4.0" + "@babel/parser": "^7.29.0", + "@babel/types": "^7.29.0", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" } }, - "node_modules/@emnapi/runtime": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.9.0.tgz", - "integrity": "sha512-QN75eB0IH2ywSpRpNddCRfQIhmJYBCJ1x5Lb3IscKAL8bMnVAKnRg8dCoXbHzVLLH7P38N2Z3mtulB7W0J0FKw==", + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz", + "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==", "dev": true, "license": "MIT", - "optional": true, "dependencies": { - "tslib": "^2.4.0" + "@babel/types": "^7.27.3" + }, + "engines": { + "node": ">=6.9.0" } }, - "node_modules/@emnapi/wasi-threads": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.0.tgz", - "integrity": "sha512-N10dEJNSsUx41Z6pZsXU8FjPjpBEplgH24sfkmITrBED1/U2Esum9F3lfLrMjKHHjmi557zQn7kR9R+XWXu5Rg==", + "node_modules/@babel/helper-compilation-targets": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz", + "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==", "dev": true, "license": "MIT", - "optional": true, "dependencies": { - "tslib": "^2.4.0" + "@babel/compat-data": "^7.28.6", + "@babel/helper-validator-option": "^7.27.1", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" } }, - "node_modules/@esbuild/aix-ppc64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.3.tgz", - "integrity": "sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg==", - "cpu": [ - "ppc64" - ], + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=18" + "license": "ISC", + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/@esbuild/android-arm": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.3.tgz", - "integrity": "sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA==", - "cpu": [ - "arm" - ], + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.28.6.tgz", + "integrity": "sha512-dTOdvsjnG3xNT9Y0AUg1wAl38y+4Rl4sf9caSQZOXdNqVn+H+HbbJ4IyyHaIqNR6SW9oJpA/RuRjsjCw2IdIow==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "android" - ], + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-member-expression-to-functions": "^7.28.5", + "@babel/helper-optimise-call-expression": "^7.27.1", + "@babel/helper-replace-supers": "^7.28.6", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/traverse": "^7.28.6", + "semver": "^6.3.1" + }, "engines": { - "node": ">=18" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "node_modules/@esbuild/android-arm64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.3.tgz", - "integrity": "sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg==", - "cpu": [ - "arm64" - ], + "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.28.5.tgz", + "integrity": "sha512-N1EhvLtHzOvj7QQOUCCS3NrPJP8c5W6ZXCHDn7Yialuy1iu4r5EmIYkXlKNqT99Ciw+W0mDqWoR6HWMZlFP3hw==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "android" - ], + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.3", + "regexpu-core": "^6.3.1", + "semver": "^6.3.1" + }, "engines": { - "node": ">=18" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "node_modules/@esbuild/android-x64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.3.tgz", - "integrity": "sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ==", - "cpu": [ - "x64" - ], + "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.8.tgz", + "integrity": "sha512-47UwBLPpQi1NoWzLuHNjRoHlYXMwIJoBf7MFou6viC/sIHWYygpvr0B6IAyh5sBdA2nr2LPIRww8lfaUVQINBA==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" + "dependencies": { + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", + "debug": "^4.4.3", + "lodash.debounce": "^4.0.8", + "resolve": "^1.22.11" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.3.tgz", - "integrity": "sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg==", - "cpu": [ - "arm64" - ], + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], "engines": { - "node": ">=18" + "node": ">=6.9.0" } }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.3.tgz", - "integrity": "sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg==", - "cpu": [ - "x64" - ], + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.28.5.tgz", + "integrity": "sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], + "dependencies": { + "@babel/traverse": "^7.28.5", + "@babel/types": "^7.28.5" + }, "engines": { - "node": ">=18" + "node": ">=6.9.0" } }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.3.tgz", - "integrity": "sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w==", - "cpu": [ - "arm64" - ], + "node_modules/@babel/helper-module-imports": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz", + "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], + "dependencies": { + "@babel/traverse": "^7.28.6", + "@babel/types": "^7.28.6" + }, "engines": { - "node": ">=18" + "node": ">=6.9.0" } }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.3.tgz", - "integrity": "sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA==", - "cpu": [ - "x64" - ], + "node_modules/@babel/helper-module-transforms": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz", + "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], + "dependencies": { + "@babel/helper-module-imports": "^7.28.6", + "@babel/helper-validator-identifier": "^7.28.5", + "@babel/traverse": "^7.28.6" + }, "engines": { - "node": ">=18" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "node_modules/@esbuild/linux-arm": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.3.tgz", - "integrity": "sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw==", - "cpu": [ - "arm" - ], + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz", + "integrity": "sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "@babel/types": "^7.27.1" + }, "engines": { - "node": ">=18" + "node": ">=6.9.0" } }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.3.tgz", - "integrity": "sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg==", - "cpu": [ - "arm64" - ], + "node_modules/@babel/helper-plugin-utils": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.28.6.tgz", + "integrity": "sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], "engines": { - "node": ">=18" + "node": ">=6.9.0" } }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.3.tgz", - "integrity": "sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg==", - "cpu": [ - "ia32" - ], + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.27.1.tgz", + "integrity": "sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-wrap-function": "^7.27.1", + "@babel/traverse": "^7.27.1" + }, "engines": { - "node": ">=18" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.3.tgz", - "integrity": "sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA==", - "cpu": [ - "loong64" - ], + "node_modules/@babel/helper-replace-supers": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.28.6.tgz", + "integrity": "sha512-mq8e+laIk94/yFec3DxSjCRD2Z0TAjhVbEJY3UQrlwVo15Lmt7C2wAUbK4bjnTs4APkwsYLTahXRraQXhb1WCg==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.28.5", + "@babel/helper-optimise-call-expression": "^7.27.1", + "@babel/traverse": "^7.28.6" + }, "engines": { - "node": ">=18" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.3.tgz", - "integrity": "sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw==", - "cpu": [ - "mips64el" - ], + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz", + "integrity": "sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, "engines": { - "node": ">=18" + "node": ">=6.9.0" } }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.3.tgz", - "integrity": "sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA==", - "cpu": [ - "ppc64" - ], + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz", + "integrity": "sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "@babel/types": "^7.24.7" + }, "engines": { - "node": ">=18" + "node": ">=6.9.0" } }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.3.tgz", - "integrity": "sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ==", - "cpu": [ - "riscv64" - ], + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], "engines": { - "node": ">=18" + "node": ">=6.9.0" } }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.3.tgz", - "integrity": "sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw==", - "cpu": [ - "s390x" - ], + "node_modules/@babel/helper-validator-identifier": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], "engines": { - "node": ">=18" + "node": ">=6.9.0" } }, - "node_modules/@esbuild/linux-x64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.3.tgz", - "integrity": "sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA==", - "cpu": [ - "x64" - ], + "node_modules/@babel/helper-validator-option": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], "engines": { - "node": ">=18" + "node": ">=6.9.0" } }, - "node_modules/@esbuild/netbsd-arm64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.3.tgz", - "integrity": "sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA==", - "cpu": [ - "arm64" - ], + "node_modules/@babel/helper-wrap-function": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.28.6.tgz", + "integrity": "sha512-z+PwLziMNBeSQJonizz2AGnndLsP2DeGHIxDAn+wdHOGuo4Fo1x1HBPPXeE9TAOPHNNWQKCSlA2VZyYyyibDnQ==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], + "dependencies": { + "@babel/template": "^7.28.6", + "@babel/traverse": "^7.28.6", + "@babel/types": "^7.28.6" + }, "engines": { - "node": ">=18" + "node": ">=6.9.0" } }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.3.tgz", - "integrity": "sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA==", - "cpu": [ - "x64" - ], + "node_modules/@babel/helpers": { + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.2.tgz", + "integrity": "sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], + "dependencies": { + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0" + }, "engines": { - "node": ">=18" + "node": ">=6.9.0" } }, - "node_modules/@esbuild/openbsd-arm64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.3.tgz", - "integrity": "sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw==", - "cpu": [ - "arm64" - ], + "node_modules/@babel/parser": { + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.2.tgz", + "integrity": "sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], + "dependencies": { + "@babel/types": "^7.29.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, "engines": { - "node": ">=18" + "node": ">=6.0.0" } }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.3.tgz", - "integrity": "sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ==", - "cpu": [ - "x64" - ], + "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.28.5.tgz", + "integrity": "sha512-87GDMS3tsmMSi/3bWOte1UblL+YUTFMV8SZPZ2eSEL17s74Cw/l63rR6NmGVKMYW2GYi85nE+/d6Hw5N0bEk2Q==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.28.5" + }, "engines": { - "node": ">=18" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "node_modules/@esbuild/openharmony-arm64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.3.tgz", - "integrity": "sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g==", - "cpu": [ - "arm64" - ], + "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.27.1.tgz", + "integrity": "sha512-qNeq3bCKnGgLkEXUuFry6dPlGfCdQNZbn7yUAPCInwAJHMU7THJfrBSozkcWq5sNM6RcF3S8XyQL2A52KNR9IA==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "openharmony" - ], + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, "engines": { - "node": ">=18" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.3.tgz", - "integrity": "sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA==", - "cpu": [ - "x64" - ], + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.27.1.tgz", + "integrity": "sha512-g4L7OYun04N1WyqMNjldFwlfPCLVkgB54A/YCXICZYBsvJJE3kByKv9c9+R/nAfmIfjl2rKYLNyMHboYbZaWaA==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "sunos" - ], + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, "engines": { - "node": ">=18" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.3.tgz", - "integrity": "sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA==", - "cpu": [ - "arm64" - ], + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.27.1.tgz", + "integrity": "sha512-oO02gcONcD5O1iTLi/6frMJBIwWEHceWGSGqrpCmEL8nogiS6J9PBlE48CaK20/Jx1LuRml9aDftLgdjXT8+Cw==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "win32" - ], + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/plugin-transform-optional-chaining": "^7.27.1" + }, "engines": { - "node": ">=18" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" } }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.3.tgz", - "integrity": "sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q==", - "cpu": [ - "ia32" - ], + "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.28.6.tgz", + "integrity": "sha512-a0aBScVTlNaiUe35UtfxAN7A/tehvvG4/ByO6+46VPKTRSlfnAFsgKy0FUh+qAkQrDTmhDkT+IBOKlOoMUxQ0g==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "win32" - ], + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/traverse": "^7.28.6" + }, "engines": { - "node": ">=18" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "node_modules/@esbuild/win32-x64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.3.tgz", - "integrity": "sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA==", - "cpu": [ - "x64" - ], + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "win32" - ], "engines": { - "node": ">=18" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@exodus/bytes": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@exodus/bytes/-/bytes-1.15.0.tgz", - "integrity": "sha512-UY0nlA+feH81UGSHv92sLEPLCeZFjXOuHhrIo0HQydScuQc8s0A7kL/UdgwgDq8g8ilksmuoF35YVTNphV2aBQ==", + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.28.6.tgz", + "integrity": "sha512-pSJUpFHdx9z5nqTSirOCMtYVP2wFgoWhP0p3g8ONK/4IHhLIBd0B9NYqAvIUAhq+OkhO4VM1tENCt0cjlsNShw==", "dev": true, "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6" + }, "engines": { - "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + "node": ">=6.9.0" }, "peerDependencies": { - "@noble/hashes": "^1.8.0 || ^2.0.0" - }, - "peerDependenciesMeta": { - "@noble/hashes": { - "optional": true - } + "@babel/core": "^7.0.0-0" } }, - "node_modules/@gar/promise-retry": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@gar/promise-retry/-/promise-retry-1.0.2.tgz", - "integrity": "sha512-Lm/ZLhDZcBECta3TmCQSngiQykFdfw+QtI1/GYMsZd4l3nG+P8WLB16XuS7WaBGLQ+9E+cOcWQsth9cayuGt8g==", + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.28.6.tgz", + "integrity": "sha512-jiLC0ma9XkQT3TKJ9uYvlakm66Pamywo+qwL+oL8HJOvc6TWdZXVfhqJr8CCzbSGUAbDOzlGHJC1U+vRfLQDvw==", "dev": true, "license": "MIT", "dependencies": { - "retry": "^0.13.1" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@harperfast/extended-iterable": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@harperfast/extended-iterable/-/extended-iterable-1.0.3.tgz", - "integrity": "sha512-sSAYhQca3rDWtQUHSAPeO7axFIUJOI6hn1gjRC5APVE1a90tuyT8f5WIgRsFhhWA7htNkju2veB9eWL6YHi/Lw==", - "dev": true, - "license": "Apache-2.0", - "optional": true - }, - "node_modules/@hono/node-server": { - "version": "1.19.11", - "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-1.19.11.tgz", - "integrity": "sha512-dr8/3zEaB+p0D2n/IUrlPF1HZm586qgJNXK1a9fhg/PzdtkK7Ksd5l312tJX2yBuALqDYBlG20QEbayqPyxn+g==", + "node_modules/@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", "dev": true, "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, "engines": { - "node": ">=18.14.1" + "node": ">=6.9.0" }, "peerDependencies": { - "hono": "^4" + "@babel/core": "^7.0.0" } }, - "node_modules/@inquirer/ansi": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@inquirer/ansi/-/ansi-1.0.2.tgz", - "integrity": "sha512-S8qNSZiYzFd0wAcyG5AXCvUHC5Sr7xpZ9wZ2py9XR88jUz8wooStVx5M6dRzczbBWjic9NP7+rY0Xi7qqK/aMQ==", + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.27.1.tgz", + "integrity": "sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA==", "dev": true, "license": "MIT", - "engines": { - "node": ">=18" + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@inquirer/checkbox": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-4.3.2.tgz", - "integrity": "sha512-VXukHf0RR1doGe6Sm4F0Em7SWYLTHSsbGfJdS9Ja2bX5/D5uwVOEjr07cncLROdBvmnvCATYEWlHqYmXv2IlQA==", + "node_modules/@babel/plugin-transform-async-generator-functions": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.29.0.tgz", + "integrity": "sha512-va0VdWro4zlBr2JsXC+ofCPB2iG12wPtVGTWFx2WLDOM3nYQZZIGP82qku2eW/JR83sD+k2k+CsNtyEbUqhU6w==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/ansi": "^1.0.2", - "@inquirer/core": "^10.3.2", - "@inquirer/figures": "^1.0.15", - "@inquirer/type": "^3.0.10", - "yoctocolors-cjs": "^2.1.3" + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/helper-remap-async-to-generator": "^7.27.1", + "@babel/traverse": "^7.29.0" }, "engines": { - "node": ">=18" + "node": ">=6.9.0" }, "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } + "@babel/core": "^7.0.0-0" } }, - "node_modules/@inquirer/confirm": { - "version": "5.1.21", - "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-5.1.21.tgz", - "integrity": "sha512-KR8edRkIsUayMXV+o3Gv+q4jlhENF9nMYUZs9PA2HzrXeHI8M5uDag70U7RJn9yyiMZSbtF5/UexBtAVtZGSbQ==", + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.28.6.tgz", + "integrity": "sha512-ilTRcmbuXjsMmcZ3HASTe4caH5Tpo93PkTxF9oG2VZsSWsahydmcEHhix9Ik122RcTnZnUzPbmux4wh1swfv7g==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^10.3.2", - "@inquirer/type": "^3.0.10" + "@babel/helper-module-imports": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/helper-remap-async-to-generator": "^7.27.1" }, "engines": { - "node": ">=18" + "node": ">=6.9.0" }, "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } + "@babel/core": "^7.0.0-0" } }, - "node_modules/@inquirer/core": { - "version": "10.3.2", - "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-10.3.2.tgz", - "integrity": "sha512-43RTuEbfP8MbKzedNqBrlhhNKVwoK//vUFNW3Q3vZ88BLcrs4kYpGg+B2mm5p2K/HfygoCxuKwJJiv8PbGmE0A==", + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.27.1.tgz", + "integrity": "sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/ansi": "^1.0.2", - "@inquirer/figures": "^1.0.15", - "@inquirer/type": "^3.0.10", - "cli-width": "^4.1.0", - "mute-stream": "^2.0.0", - "signal-exit": "^4.1.0", - "wrap-ansi": "^6.2.0", - "yoctocolors-cjs": "^2.1.3" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { - "node": ">=18" + "node": ">=6.9.0" }, "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } + "@babel/core": "^7.0.0-0" } }, - "node_modules/@inquirer/editor": { - "version": "4.2.23", - "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-4.2.23.tgz", - "integrity": "sha512-aLSROkEwirotxZ1pBaP8tugXRFCxW94gwrQLxXfrZsKkfjOYC1aRvAZuhpJOb5cu4IBTJdsCigUlf2iCOu4ZDQ==", + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.28.6.tgz", + "integrity": "sha512-tt/7wOtBmwHPNMPu7ax4pdPz6shjFrmHDghvNC+FG9Qvj7D6mJcoRQIF5dy4njmxR941l6rgtvfSB2zX3VlUIw==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^10.3.2", - "@inquirer/external-editor": "^1.0.3", - "@inquirer/type": "^3.0.10" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { - "node": ">=18" + "node": ">=6.9.0" }, "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } + "@babel/core": "^7.0.0-0" } }, - "node_modules/@inquirer/expand": { - "version": "4.0.23", - "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-4.0.23.tgz", - "integrity": "sha512-nRzdOyFYnpeYTTR2qFwEVmIWypzdAx/sIkCMeTNTcflFOovfqUk+HcFhQQVBftAh9gmGrpFj6QcGEqrDMDOiew==", + "node_modules/@babel/plugin-transform-class-properties": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.28.6.tgz", + "integrity": "sha512-dY2wS3I2G7D697VHndN91TJr8/AAfXQNt5ynCTI/MpxMsSzHp+52uNivYT5wCPax3whc47DR8Ba7cmlQMg24bw==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^10.3.2", - "@inquirer/type": "^3.0.10", - "yoctocolors-cjs": "^2.1.3" + "@babel/helper-create-class-features-plugin": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { - "node": ">=18" + "node": ">=6.9.0" }, "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } + "@babel/core": "^7.0.0-0" } }, - "node_modules/@inquirer/external-editor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@inquirer/external-editor/-/external-editor-1.0.3.tgz", - "integrity": "sha512-RWbSrDiYmO4LbejWY7ttpxczuwQyZLBUyygsA9Nsv95hpzUWwnNTVQmAq3xuh7vNwCp07UTmE5i11XAEExx4RA==", + "node_modules/@babel/plugin-transform-class-static-block": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.28.6.tgz", + "integrity": "sha512-rfQ++ghVwTWTqQ7w8qyDxL1XGihjBss4CmTgGRCTAC9RIbhVpyp4fOeZtta0Lbf+dTNIVJer6ych2ibHwkZqsQ==", "dev": true, "license": "MIT", "dependencies": { - "chardet": "^2.1.1", - "iconv-lite": "^0.7.0" + "@babel/helper-create-class-features-plugin": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { - "node": ">=18" + "node": ">=6.9.0" }, "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } + "@babel/core": "^7.12.0" } }, - "node_modules/@inquirer/figures": { - "version": "1.0.15", - "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.15.tgz", - "integrity": "sha512-t2IEY+unGHOzAaVM5Xx6DEWKeXlDDcNPeDyUpsRc6CUhBfU3VQOEl+Vssh7VNp1dR8MdUJBWhuObjXCsVpjN5g==", + "node_modules/@babel/plugin-transform-classes": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.28.6.tgz", + "integrity": "sha512-EF5KONAqC5zAqT783iMGuM2ZtmEBy+mJMOKl2BCvPZ2lVrwvXnB6o+OBWCS+CoeCCpVRF2sA2RBKUxvT8tQT5Q==", "dev": true, "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-globals": "^7.28.0", + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/helper-replace-supers": "^7.28.6", + "@babel/traverse": "^7.28.6" + }, "engines": { - "node": ">=18" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@inquirer/input": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-4.3.1.tgz", - "integrity": "sha512-kN0pAM4yPrLjJ1XJBjDxyfDduXOuQHrBB8aLDMueuwUGn+vNpF7Gq7TvyVxx8u4SHlFFj4trmj+a2cbpG4Jn1g==", + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.28.6.tgz", + "integrity": "sha512-bcc3k0ijhHbc2lEfpFHgx7eYw9KNXqOerKWfzbxEHUGKnS3sz9C4CNL9OiFN1297bDNfUiSO7DaLzbvHQQQ1BQ==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^10.3.2", - "@inquirer/type": "^3.0.10" + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/template": "^7.28.6" }, "engines": { - "node": ">=18" + "node": ">=6.9.0" }, "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } + "@babel/core": "^7.0.0-0" } }, - "node_modules/@inquirer/number": { - "version": "3.0.23", - "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-3.0.23.tgz", - "integrity": "sha512-5Smv0OK7K0KUzUfYUXDXQc9jrf8OHo4ktlEayFlelCjwMXz0299Y8OrI+lj7i4gCBY15UObk76q0QtxjzFcFcg==", + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.28.5.tgz", + "integrity": "sha512-Kl9Bc6D0zTUcFUvkNuQh4eGXPKKNDOJQXVyyM4ZAQPMveniJdxi8XMJwLo+xSoW3MIq81bD33lcUe9kZpl0MCw==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^10.3.2", - "@inquirer/type": "^3.0.10" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.28.5" }, "engines": { - "node": ">=18" + "node": ">=6.9.0" }, "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } + "@babel/core": "^7.0.0-0" } }, - "node_modules/@inquirer/password": { - "version": "4.0.23", - "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-4.0.23.tgz", - "integrity": "sha512-zREJHjhT5vJBMZX/IUbyI9zVtVfOLiTO66MrF/3GFZYZ7T4YILW5MSkEYHceSii/KtRk+4i3RE7E1CUXA2jHcA==", + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.28.6.tgz", + "integrity": "sha512-SljjowuNKB7q5Oayv4FoPzeB74g3QgLt8IVJw9ADvWy3QnUb/01aw8I4AVv8wYnPvQz2GDDZ/g3GhcNyDBI4Bg==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/ansi": "^1.0.2", - "@inquirer/core": "^10.3.2", - "@inquirer/type": "^3.0.10" + "@babel/helper-create-regexp-features-plugin": "^7.28.5", + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { - "node": ">=18" + "node": ">=6.9.0" }, "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } + "@babel/core": "^7.0.0-0" } }, - "node_modules/@inquirer/prompts": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-7.10.1.tgz", - "integrity": "sha512-Dx/y9bCQcXLI5ooQ5KyvA4FTgeo2jYj/7plWfV5Ak5wDPKQZgudKez2ixyfz7tKXzcJciTxqLeK7R9HItwiByg==", + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.27.1.tgz", + "integrity": "sha512-MTyJk98sHvSs+cvZ4nOauwTTG1JeonDjSGvGGUNHreGQns+Mpt6WX/dVzWBHgg+dYZhkC4X+zTDfkTU+Vy9y7Q==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "@inquirer/checkbox": "^4.3.2", - "@inquirer/confirm": "^5.1.21", - "@inquirer/editor": "^4.2.23", - "@inquirer/expand": "^4.0.23", - "@inquirer/input": "^4.3.1", - "@inquirer/number": "^3.0.23", - "@inquirer/password": "^4.0.23", - "@inquirer/rawlist": "^4.1.11", - "@inquirer/search": "^3.2.2", - "@inquirer/select": "^4.4.2" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { - "node": ">=18" + "node": ">=6.9.0" }, "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } + "@babel/core": "^7.0.0-0" } }, - "node_modules/@inquirer/rawlist": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-4.1.11.tgz", - "integrity": "sha512-+LLQB8XGr3I5LZN/GuAHo+GpDJegQwuPARLChlMICNdwW7OwV2izlCSCxN6cqpL0sMXmbKbFcItJgdQq5EBXTw==", + "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.29.0.tgz", + "integrity": "sha512-zBPcW2lFGxdiD8PUnPwJjag2J9otbcLQzvbiOzDxpYXyCuYX9agOwMPGn1prVH0a4qzhCKu24rlH4c1f7yA8rw==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^10.3.2", - "@inquirer/type": "^3.0.10", - "yoctocolors-cjs": "^2.1.3" + "@babel/helper-create-regexp-features-plugin": "^7.28.5", + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { - "node": ">=18" + "node": ">=6.9.0" }, "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } + "@babel/core": "^7.0.0" } }, - "node_modules/@inquirer/search": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/@inquirer/search/-/search-3.2.2.tgz", - "integrity": "sha512-p2bvRfENXCZdWF/U2BXvnSI9h+tuA8iNqtUKb9UWbmLYCRQxd8WkvwWvYn+3NgYaNwdUkHytJMGG4MMLucI1kA==", + "node_modules/@babel/plugin-transform-dynamic-import": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.27.1.tgz", + "integrity": "sha512-MHzkWQcEmjzzVW9j2q8LGjwGWpG2mjwaaB0BNQwst3FIjqsg8Ct/mIZlvSPJvfi9y2AC8mi/ktxbFVL9pZ1I4A==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^10.3.2", - "@inquirer/figures": "^1.0.15", - "@inquirer/type": "^3.0.10", - "yoctocolors-cjs": "^2.1.3" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { - "node": ">=18" + "node": ">=6.9.0" }, "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } + "@babel/core": "^7.0.0-0" } }, - "node_modules/@inquirer/select": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-4.4.2.tgz", - "integrity": "sha512-l4xMuJo55MAe+N7Qr4rX90vypFwCajSakx59qe/tMaC1aEHWLyw68wF4o0A4SLAY4E0nd+Vt+EyskeDIqu1M6w==", + "node_modules/@babel/plugin-transform-explicit-resource-management": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-explicit-resource-management/-/plugin-transform-explicit-resource-management-7.28.6.tgz", + "integrity": "sha512-Iao5Konzx2b6g7EPqTy40UZbcdXE126tTxVFr/nAIj+WItNxjKSYTEw3RC+A2/ZetmdJsgueL1KhaMCQHkLPIg==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/ansi": "^1.0.2", - "@inquirer/core": "^10.3.2", - "@inquirer/figures": "^1.0.15", - "@inquirer/type": "^3.0.10", - "yoctocolors-cjs": "^2.1.3" + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/plugin-transform-destructuring": "^7.28.5" }, "engines": { - "node": ">=18" + "node": ">=6.9.0" }, "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } + "@babel/core": "^7.0.0-0" } }, - "node_modules/@inquirer/type": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-3.0.10.tgz", - "integrity": "sha512-BvziSRxfz5Ov8ch0z/n3oijRSEcEsHnhggm4xFZe93DHcUCTlutlq9Ox4SVENAfcRD22UQq7T/atg9Wr3k09eA==", + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.28.6.tgz", + "integrity": "sha512-WitabqiGjV/vJ0aPOLSFfNY1u9U3R7W36B03r5I2KoNix+a3sOhJ3pKFB3R5It9/UiK78NiO0KE9P21cMhlPkw==", "dev": true, "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6" + }, "engines": { - "node": ">=18" + "node": ">=6.9.0" }, "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } + "@babel/core": "^7.0.0-0" } }, - "node_modules/@isaacs/fs-minipass": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", - "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", + "node_modules/@babel/plugin-transform-export-namespace-from": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.27.1.tgz", + "integrity": "sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "minipass": "^7.0.4" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { - "node": ">=18.0.0" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.27.1.tgz", + "integrity": "sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw==", "dev": true, "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" + }, "engines": { - "node": ">=8" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.13", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", - "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.27.1.tgz", + "integrity": "sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ==", "dev": true, "license": "MIT", "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.0", - "@jridgewell/trace-mapping": "^0.3.24" + "@babel/helper-compilation-targets": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@jridgewell/remapping": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", - "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "node_modules/@babel/plugin-transform-json-strings": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.28.6.tgz", + "integrity": "sha512-Nr+hEN+0geQkzhbdgQVPoqr47lZbm+5fCUmO70722xJZd0Mvb59+33QLImGj6F+DkK3xgDi1YVysP8whD6FQAw==", "dev": true, "license": "MIT", "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.24" + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "node_modules/@babel/plugin-transform-literals": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.27.1.tgz", + "integrity": "sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA==", "dev": true, "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, "engines": { - "node": ">=6.0.0" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", - "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", - "dev": true, - "license": "MIT" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.31", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", - "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "node_modules/@babel/plugin-transform-logical-assignment-operators": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.28.6.tgz", + "integrity": "sha512-+anKKair6gpi8VsM/95kmomGNMD0eLz1NQ8+Pfw5sAwWH9fGYXT50E55ZpV0pHUHWf6IUTWPM+f/7AAff+wr9A==", "dev": true, "license": "MIT", "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@kurkle/color": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/@kurkle/color/-/color-0.3.4.tgz", - "integrity": "sha512-M5UknZPHRu3DEDWoipU6sE8PdkZ6Z/S+v4dD+Ke8IaNlpdSQah50lz1KtcFBa2vsdOnwbbnxJwVM4wty6udA5w==", - "license": "MIT" - }, - "node_modules/@listr2/prompt-adapter-inquirer": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@listr2/prompt-adapter-inquirer/-/prompt-adapter-inquirer-3.0.5.tgz", - "integrity": "sha512-WELs+hj6xcilkloBXYf9XXK8tYEnKsgLj01Xl5ONUJpKjmT5hGVUzNUS5tooUxs7pGMrw+jFD/41WpqW4V3LDA==", + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.27.1.tgz", + "integrity": "sha512-hqoBX4dcZ1I33jCSWcXrP+1Ku7kdqXf1oeah7ooKOIiAdKQ+uqftgCFNOSzA5AMS2XIHEYeGFg4cKRCdpxzVOQ==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/type": "^3.0.8" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { - "node": ">=20.0.0" + "node": ">=6.9.0" }, "peerDependencies": { - "@inquirer/prompts": ">= 3 < 8", - "listr2": "9.0.5" + "@babel/core": "^7.0.0-0" } }, - "node_modules/@lmdb/lmdb-darwin-arm64": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-arm64/-/lmdb-darwin-arm64-3.5.1.tgz", - "integrity": "sha512-tpfN4kKrrMpQ+If1l8bhmoNkECJi0iOu6AEdrTJvWVC+32sLxTARX5Rsu579mPImRP9YFWfWgeRQ5oav7zApQQ==", - "cpu": [ - "arm64" - ], + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.27.1.tgz", + "integrity": "sha512-iCsytMg/N9/oFq6n+gFTvUYDZQOMK5kEdeYxmxt91fcJGycfxVP9CnrxoliM0oumFERba2i8ZtwRUCMhvP1LnA==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] + "dependencies": { + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } }, - "node_modules/@lmdb/lmdb-darwin-x64": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-x64/-/lmdb-darwin-x64-3.5.1.tgz", - "integrity": "sha512-+a2tTfc3rmWhLAolFUWRgJtpSuu+Fw/yjn4rF406NMxhfjbMuiOUTDRvRlMFV+DzyjkwnokisskHbCWkS3Ly5w==", - "cpu": [ - "x64" - ], + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.28.6.tgz", + "integrity": "sha512-jppVbf8IV9iWWwWTQIxJMAJCWBuuKx71475wHwYytrRGQ2CWiDvYlADQno3tcYpS/T2UUWFQp3nVtYfK/YBQrA==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] + "dependencies": { + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } }, - "node_modules/@lmdb/lmdb-linux-arm": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm/-/lmdb-linux-arm-3.5.1.tgz", - "integrity": "sha512-0EgcE6reYr8InjD7V37EgXcYrloqpxVPINy3ig1MwDSbl6LF/vXTYRH9OE1Ti1D8YZnB35ZH9aTcdfSb5lql2A==", - "cpu": [ - "arm" - ], + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.29.0.tgz", + "integrity": "sha512-PrujnVFbOdUpw4UHiVwKvKRLMMic8+eC0CuNlxjsyZUiBjhFdPsewdXCkveh2KqBA9/waD0W1b4hXSOBQJezpQ==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ] + "dependencies": { + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/helper-validator-identifier": "^7.28.5", + "@babel/traverse": "^7.29.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } }, - "node_modules/@lmdb/lmdb-linux-arm64": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm64/-/lmdb-linux-arm64-3.5.1.tgz", - "integrity": "sha512-aoERa5B6ywXdyFeYGQ1gbQpkMkDbEo45qVoXE5QpIRavqjnyPwjOulMkmkypkmsbJ5z4Wi0TBztON8agCTG0Vg==", - "cpu": [ - "arm64" - ], + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.27.1.tgz", + "integrity": "sha512-iQBE/xC5BV1OxJbp6WG7jq9IWiD+xxlZhLrdwpPkTX3ydmXdvoCpyfJN7acaIBZaOqTfr76pgzqBJflNbeRK+w==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ] + "dependencies": { + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } }, - "node_modules/@lmdb/lmdb-linux-x64": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-x64/-/lmdb-linux-x64-3.5.1.tgz", - "integrity": "sha512-SqNDY1+vpji7bh0sFH5wlWyFTOzjbDOl0/kB5RLLYDAFyd/uw3n7wyrmas3rYPpAW7z18lMOi1yKlTPv967E3g==", - "cpu": [ - "x64" - ], + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.29.0.tgz", + "integrity": "sha512-1CZQA5KNAD6ZYQLPw7oi5ewtDNxH/2vuCh+6SmvgDfhumForvs8a1o9n0UrEoBD8HU4djO2yWngTQlXl1NDVEQ==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ] + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.28.5", + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } }, - "node_modules/@lmdb/lmdb-win32-arm64": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/@lmdb/lmdb-win32-arm64/-/lmdb-win32-arm64-3.5.1.tgz", - "integrity": "sha512-50v0O1Lt37cwrmR9vWZK5hRW0Aw+KEmxJJ75fge/zIYdvNKB/0bSMSVR5Uc2OV9JhosIUyklOmrEvavwNJ8D6w==", - "cpu": [ - "arm64" - ], + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.27.1.tgz", + "integrity": "sha512-f6PiYeqXQ05lYq3TIfIDu/MtliKUbNwkGApPUvyo6+tc7uaR4cPjPe7DFPr15Uyycg2lZU6btZ575CuQoYh7MQ==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "win32" - ] + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } }, - "node_modules/@lmdb/lmdb-win32-x64": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/@lmdb/lmdb-win32-x64/-/lmdb-win32-x64-3.5.1.tgz", - "integrity": "sha512-qwosvPyl+zpUlp3gRb7UcJ3H8S28XHCzkv0Y0EgQToXjQP91ZD67EHSCDmaLjtKhe+GVIW5om1KUpzVLA0l6pg==", - "cpu": [ - "x64" - ], + "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.28.6.tgz", + "integrity": "sha512-3wKbRgmzYbw24mDJXT7N+ADXw8BC/imU9yo9c9X9NKaLF1fW+e5H1U5QjMUBe4Qo4Ox/o++IyUkl1sVCLgevKg==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "win32" - ] + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } }, - "node_modules/@modelcontextprotocol/sdk": { - "version": "1.26.0", - "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.26.0.tgz", - "integrity": "sha512-Y5RmPncpiDtTXDbLKswIJzTqu2hyBKxTNsgKqKclDbhIgg1wgtf1fRuvxgTnRfcnxtvvgbIEcqUOzZrJ6iSReg==", + "node_modules/@babel/plugin-transform-numeric-separator": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.28.6.tgz", + "integrity": "sha512-SJR8hPynj8outz+SlStQSwvziMN4+Bq99it4tMIf5/Caq+3iOc0JtKyse8puvyXkk3eFRIA5ID/XfunGgO5i6w==", "dev": true, "license": "MIT", "dependencies": { - "@hono/node-server": "^1.19.9", - "ajv": "^8.17.1", - "ajv-formats": "^3.0.1", - "content-type": "^1.0.5", - "cors": "^2.8.5", - "cross-spawn": "^7.0.5", - "eventsource": "^3.0.2", - "eventsource-parser": "^3.0.0", - "express": "^5.2.1", - "express-rate-limit": "^8.2.1", - "hono": "^4.11.4", - "jose": "^6.1.3", - "json-schema-typed": "^8.0.2", - "pkce-challenge": "^5.0.0", - "raw-body": "^3.0.0", - "zod": "^3.25 || ^4.0", - "zod-to-json-schema": "^3.25.1" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { - "node": ">=18" + "node": ">=6.9.0" }, "peerDependencies": { - "@cfworker/json-schema": "^4.1.1", - "zod": "^3.25 || ^4.0" - }, - "peerDependenciesMeta": { - "@cfworker/json-schema": { - "optional": true - }, - "zod": { - "optional": false - } + "@babel/core": "^7.0.0-0" } }, - "node_modules/@msgpackr-extract/msgpackr-extract-darwin-arm64": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-arm64/-/msgpackr-extract-darwin-arm64-3.0.3.tgz", - "integrity": "sha512-QZHtlVgbAdy2zAqNA9Gu1UpIuI8Xvsd1v8ic6B2pZmeFnFcMWiPLfWXh7TVw4eGEZ/C9TH281KwhVoeQUKbyjw==", - "cpu": [ - "arm64" - ], + "node_modules/@babel/plugin-transform-object-rest-spread": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.28.6.tgz", + "integrity": "sha512-5rh+JR4JBC4pGkXLAcYdLHZjXudVxWMXbB6u6+E9lRL5TrGVbHt1TjxGbZ8CkmYw9zjkB7jutzOROArsqtncEA==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] + "dependencies": { + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/plugin-transform-destructuring": "^7.28.5", + "@babel/plugin-transform-parameters": "^7.27.7", + "@babel/traverse": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } }, - "node_modules/@msgpackr-extract/msgpackr-extract-darwin-x64": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-x64/-/msgpackr-extract-darwin-x64-3.0.3.tgz", - "integrity": "sha512-mdzd3AVzYKuUmiWOQ8GNhl64/IoFGol569zNRdkLReh6LRLHOXxU4U8eq0JwaD8iFHdVGqSy4IjFL4reoWCDFw==", - "cpu": [ - "x64" - ], + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.27.1.tgz", + "integrity": "sha512-SFy8S9plRPbIcxlJ8A6mT/CxFdJx/c04JEctz4jf8YZaVS2px34j7NXRrlGlHkN/M2gnpL37ZpGRGVFLd3l8Ng==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-replace-supers": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } }, - "node_modules/@msgpackr-extract/msgpackr-extract-linux-arm": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm/-/msgpackr-extract-linux-arm-3.0.3.tgz", - "integrity": "sha512-fg0uy/dG/nZEXfYilKoRe7yALaNmHoYeIoJuJ7KJ+YyU2bvY8vPv27f7UKhGRpY6euFYqEVhxCFZgAUNQBM3nw==", - "cpu": [ - "arm" - ], + "node_modules/@babel/plugin-transform-optional-catch-binding": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.28.6.tgz", + "integrity": "sha512-R8ja/Pyrv0OGAvAXQhSTmWyPJPml+0TMqXlO5w+AsMEiwb2fg3WkOvob7UxFSL3OIttFSGSRFKQsOhJ/X6HQdQ==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ] + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } }, - "node_modules/@msgpackr-extract/msgpackr-extract-linux-arm64": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm64/-/msgpackr-extract-linux-arm64-3.0.3.tgz", - "integrity": "sha512-YxQL+ax0XqBJDZiKimS2XQaf+2wDGVa1enVRGzEvLLVFeqa5kx2bWbtcSXgsxjQB7nRqqIGFIcLteF/sHeVtQg==", - "cpu": [ - "arm64" - ], + "node_modules/@babel/plugin-transform-optional-chaining": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.28.6.tgz", + "integrity": "sha512-A4zobikRGJTsX9uqVFdafzGkqD30t26ck2LmOzAuLL8b2x6k3TIqRiT2xVvA9fNmFeTX484VpsdgmKNA0bS23w==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ] + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } }, - "node_modules/@msgpackr-extract/msgpackr-extract-linux-x64": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-x64/-/msgpackr-extract-linux-x64-3.0.3.tgz", - "integrity": "sha512-cvwNfbP07pKUfq1uH+S6KJ7dT9K8WOE4ZiAcsrSes+UY55E/0jLYc+vq+DO7jlmqRb5zAggExKm0H7O/CBaesg==", - "cpu": [ - "x64" - ], + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.27.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.27.7.tgz", + "integrity": "sha512-qBkYTYCb76RRxUM6CcZA5KRu8K4SM8ajzVeUgVdMVO9NN9uI/GaVmBg/WKJJGnNokV9SY8FxNOVWGXzqzUidBg==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ] + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } }, - "node_modules/@msgpackr-extract/msgpackr-extract-win32-x64": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-win32-x64/-/msgpackr-extract-win32-x64-3.0.3.tgz", - "integrity": "sha512-x0fWaQtYp4E6sktbsdAqnehxDgEc/VwM7uLsRCYWaiGu0ykYdZPiS8zCWdnjHwyiumousxfBm4SO31eXqwEZhQ==", - "cpu": [ - "x64" - ], + "node_modules/@babel/plugin-transform-private-methods": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.28.6.tgz", + "integrity": "sha512-piiuapX9CRv7+0st8lmuUlRSmX6mBcVeNQ1b4AYzJxfCMuBfB0vBXDiGSmm03pKJw1v6cZ8KSeM+oUnM6yAExg==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "win32" - ] + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } }, - "node_modules/@napi-rs/nice": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice/-/nice-1.1.1.tgz", - "integrity": "sha512-xJIPs+bYuc9ASBl+cvGsKbGrJmS6fAKaSZCnT0lhahT5rhA2VVy9/EcIgd2JhtEuFOJNx7UHNn/qiTPTY4nrQw==", + "node_modules/@babel/plugin-transform-private-property-in-object": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.28.6.tgz", + "integrity": "sha512-b97jvNSOb5+ehyQmBpmhOCiUC5oVK4PMnpRvO7+ymFBoqYjeDHIU9jnrNUuwHOiL9RpGDoKBpSViarV+BU+eVA==", "dev": true, "license": "MIT", - "optional": true, - "engines": { - "node": ">= 10" + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-create-class-features-plugin": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Brooooooklyn" + "engines": { + "node": ">=6.9.0" }, - "optionalDependencies": { - "@napi-rs/nice-android-arm-eabi": "1.1.1", - "@napi-rs/nice-android-arm64": "1.1.1", - "@napi-rs/nice-darwin-arm64": "1.1.1", - "@napi-rs/nice-darwin-x64": "1.1.1", - "@napi-rs/nice-freebsd-x64": "1.1.1", - "@napi-rs/nice-linux-arm-gnueabihf": "1.1.1", - "@napi-rs/nice-linux-arm64-gnu": "1.1.1", - "@napi-rs/nice-linux-arm64-musl": "1.1.1", - "@napi-rs/nice-linux-ppc64-gnu": "1.1.1", - "@napi-rs/nice-linux-riscv64-gnu": "1.1.1", - "@napi-rs/nice-linux-s390x-gnu": "1.1.1", - "@napi-rs/nice-linux-x64-gnu": "1.1.1", - "@napi-rs/nice-linux-x64-musl": "1.1.1", - "@napi-rs/nice-openharmony-arm64": "1.1.1", - "@napi-rs/nice-win32-arm64-msvc": "1.1.1", - "@napi-rs/nice-win32-ia32-msvc": "1.1.1", - "@napi-rs/nice-win32-x64-msvc": "1.1.1" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@napi-rs/nice-android-arm-eabi": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-android-arm-eabi/-/nice-android-arm-eabi-1.1.1.tgz", - "integrity": "sha512-kjirL3N6TnRPv5iuHw36wnucNqXAO46dzK9oPb0wj076R5Xm8PfUVA9nAFB5ZNMmfJQJVKACAPd/Z2KYMppthw==", - "cpu": [ - "arm" - ], + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.27.1.tgz", + "integrity": "sha512-oThy3BCuCha8kDZ8ZkgOg2exvPYUlprMukKQXI1r1pJ47NCvxfkEy8vK+r/hT9nF0Aa4H1WUPZZjHTFtAhGfmQ==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "android" - ], + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, "engines": { - "node": ">= 10" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@napi-rs/nice-android-arm64": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-android-arm64/-/nice-android-arm64-1.1.1.tgz", - "integrity": "sha512-blG0i7dXgbInN5urONoUCNf+DUEAavRffrO7fZSeoRMJc5qD+BJeNcpr54msPF6qfDD6kzs9AQJogZvT2KD5nw==", - "cpu": [ - "arm64" - ], + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.29.0.tgz", + "integrity": "sha512-FijqlqMA7DmRdg/aINBSs04y8XNTYw/lr1gJ2WsmBnnaNw1iS43EPkJW+zK7z65auG3AWRFXWj+NcTQwYptUog==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "android" - ], + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6" + }, "engines": { - "node": ">= 10" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@napi-rs/nice-darwin-arm64": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-darwin-arm64/-/nice-darwin-arm64-1.1.1.tgz", - "integrity": "sha512-s/E7w45NaLqTGuOjC2p96pct4jRfo61xb9bU1unM/MJ/RFkKlJyJDx7OJI/O0ll/hrfpqKopuAFDV8yo0hfT7A==", - "cpu": [ - "arm64" - ], + "node_modules/@babel/plugin-transform-regexp-modifiers": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.28.6.tgz", + "integrity": "sha512-QGWAepm9qxpaIs7UM9FvUSnCGlb8Ua1RhyM4/veAxLwt3gMat/LSGrZixyuj4I6+Kn9iwvqCyPTtbdxanYoWYg==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.28.5", + "@babel/helper-plugin-utils": "^7.28.6" + }, "engines": { - "node": ">= 10" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "node_modules/@napi-rs/nice-darwin-x64": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-darwin-x64/-/nice-darwin-x64-1.1.1.tgz", - "integrity": "sha512-dGoEBnVpsdcC+oHHmW1LRK5eiyzLwdgNQq3BmZIav+9/5WTZwBYX7r5ZkQC07Nxd3KHOCkgbHSh4wPkH1N1LiQ==", - "cpu": [ - "x64" - ], + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.27.1.tgz", + "integrity": "sha512-V2ABPHIJX4kC7HegLkYoDpfg9PVmuWy/i6vUM5eGK22bx4YVFD3M5F0QQnWQoDs6AGsUWTVOopBiMFQgHaSkVw==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, "engines": { - "node": ">= 10" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@napi-rs/nice-freebsd-x64": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-freebsd-x64/-/nice-freebsd-x64-1.1.1.tgz", - "integrity": "sha512-kHv4kEHAylMYmlNwcQcDtXjklYp4FCf0b05E+0h6nDHsZ+F0bDe04U/tXNOqrx5CmIAth4vwfkjjUmp4c4JktQ==", - "cpu": [ - "x64" - ], + "node_modules/@babel/plugin-transform-runtime": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.29.0.tgz", + "integrity": "sha512-jlaRT5dJtMaMCV6fAuLbsQMSwz/QkvaHOHOSXRitGGwSpR1blCY4KUKoyP2tYO8vJcqYe8cEj96cqSztv3uF9w==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], + "dependencies": { + "@babel/helper-module-imports": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", + "babel-plugin-polyfill-corejs2": "^0.4.14", + "babel-plugin-polyfill-corejs3": "^0.13.0", + "babel-plugin-polyfill-regenerator": "^0.6.5", + "semver": "^6.3.1" + }, "engines": { - "node": ">= 10" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@napi-rs/nice-linux-arm-gnueabihf": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-arm-gnueabihf/-/nice-linux-arm-gnueabihf-1.1.1.tgz", - "integrity": "sha512-E1t7K0efyKXZDoZg1LzCOLxgolxV58HCkaEkEvIYQx12ht2pa8hoBo+4OB3qh7e+QiBlp1SRf+voWUZFxyhyqg==", - "cpu": [ - "arm" - ], + "node_modules/@babel/plugin-transform-runtime/node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.13.0.tgz", + "integrity": "sha512-U+GNwMdSFgzVmfhNm8GJUX88AadB3uo9KpJqS3FaqNIPKgySuvMb+bHPsOmmuWyIcuqZj/pzt1RUIUZns4y2+A==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.5", + "core-js-compat": "^3.43.0" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, - "node_modules/@napi-rs/nice-linux-arm64-gnu": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-arm64-gnu/-/nice-linux-arm64-gnu-1.1.1.tgz", - "integrity": "sha512-CIKLA12DTIZlmTaaKhQP88R3Xao+gyJxNWEn04wZwC2wmRapNnxCUZkVwggInMJvtVElA+D4ZzOU5sX4jV+SmQ==", - "cpu": [ - "arm64" - ], + "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" + "license": "ISC", + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/@napi-rs/nice-linux-arm64-musl": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-arm64-musl/-/nice-linux-arm64-musl-1.1.1.tgz", - "integrity": "sha512-+2Rzdb3nTIYZ0YJF43qf2twhqOCkiSrHx2Pg6DJaCPYhhaxbLcdlV8hCRMHghQ+EtZQWGNcS2xF4KxBhSGeutg==", - "cpu": [ - "arm64" - ], + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.27.1.tgz", + "integrity": "sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, "engines": { - "node": ">= 10" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@napi-rs/nice-linux-ppc64-gnu": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-ppc64-gnu/-/nice-linux-ppc64-gnu-1.1.1.tgz", - "integrity": "sha512-4FS8oc0GeHpwvv4tKciKkw3Y4jKsL7FRhaOeiPei0X9T4Jd619wHNe4xCLmN2EMgZoeGg+Q7GY7BsvwKpL22Tg==", - "cpu": [ - "ppc64" - ], + "node_modules/@babel/plugin-transform-spread": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.28.6.tgz", + "integrity": "sha512-9U4QObUC0FtJl05AsUcodau/RWDytrU6uKgkxu09mLR9HLDAtUMoPuuskm5huQsoktmsYpI+bGmq+iapDcriKA==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" + }, "engines": { - "node": ">= 10" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@napi-rs/nice-linux-riscv64-gnu": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-riscv64-gnu/-/nice-linux-riscv64-gnu-1.1.1.tgz", - "integrity": "sha512-HU0nw9uD4FO/oGCCk409tCi5IzIZpH2agE6nN4fqpwVlCn5BOq0MS1dXGjXaG17JaAvrlpV5ZeyZwSon10XOXw==", - "cpu": [ - "riscv64" - ], + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.27.1.tgz", + "integrity": "sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, "engines": { - "node": ">= 10" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@napi-rs/nice-linux-s390x-gnu": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-s390x-gnu/-/nice-linux-s390x-gnu-1.1.1.tgz", - "integrity": "sha512-2YqKJWWl24EwrX0DzCQgPLKQBxYDdBxOHot1KWEq7aY2uYeX+Uvtv4I8xFVVygJDgf6/92h9N3Y43WPx8+PAgQ==", - "cpu": [ - "s390x" - ], + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.27.1.tgz", + "integrity": "sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, "engines": { - "node": ">= 10" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@napi-rs/nice-linux-x64-gnu": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-x64-gnu/-/nice-linux-x64-gnu-1.1.1.tgz", - "integrity": "sha512-/gaNz3R92t+dcrfCw/96pDopcmec7oCcAQ3l/M+Zxr82KT4DljD37CpgrnXV+pJC263JkW572pdbP3hP+KjcIg==", - "cpu": [ - "x64" - ], + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.27.1.tgz", + "integrity": "sha512-RiSILC+nRJM7FY5srIyc4/fGIwUhyDuuBSdWn4y6yT6gm652DpCHZjIipgn6B7MQ1ITOUnAKWixEUjQRIBIcLw==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, "engines": { - "node": ">= 10" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@napi-rs/nice-linux-x64-musl": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-x64-musl/-/nice-linux-x64-musl-1.1.1.tgz", - "integrity": "sha512-xScCGnyj/oppsNPMnevsBe3pvNaoK7FGvMjT35riz9YdhB2WtTG47ZlbxtOLpjeO9SqqQ2J2igCmz6IJOD5JYw==", - "cpu": [ - "x64" - ], + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.27.1.tgz", + "integrity": "sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, "engines": { - "node": ">= 10" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@napi-rs/nice-openharmony-arm64": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-openharmony-arm64/-/nice-openharmony-arm64-1.1.1.tgz", - "integrity": "sha512-6uJPRVwVCLDeoOaNyeiW0gp2kFIM4r7PL2MczdZQHkFi9gVlgm+Vn+V6nTWRcu856mJ2WjYJiumEajfSm7arPQ==", - "cpu": [ - "arm64" - ], + "node_modules/@babel/plugin-transform-unicode-property-regex": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.28.6.tgz", + "integrity": "sha512-4Wlbdl/sIZjzi/8St0evF0gEZrgOswVO6aOzqxh1kDZOl9WmLrHq2HtGhnOJZmHZYKP8WZ1MDLCt5DAWwRo57A==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "openharmony" - ], + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.28.5", + "@babel/helper-plugin-utils": "^7.28.6" + }, "engines": { - "node": ">= 10" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@napi-rs/nice-win32-arm64-msvc": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-win32-arm64-msvc/-/nice-win32-arm64-msvc-1.1.1.tgz", - "integrity": "sha512-uoTb4eAvM5B2aj/z8j+Nv8OttPf2m+HVx3UjA5jcFxASvNhQriyCQF1OB1lHL43ZhW+VwZlgvjmP5qF3+59atA==", - "cpu": [ - "arm64" - ], + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.27.1.tgz", + "integrity": "sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "win32" - ], + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, "engines": { - "node": ">= 10" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@napi-rs/nice-win32-ia32-msvc": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-win32-ia32-msvc/-/nice-win32-ia32-msvc-1.1.1.tgz", - "integrity": "sha512-CNQqlQT9MwuCsg1Vd/oKXiuH+TcsSPJmlAFc5frFyX/KkOh0UpBLEj7aoY656d5UKZQMQFP7vJNa1DNUNORvug==", - "cpu": [ - "ia32" - ], + "node_modules/@babel/plugin-transform-unicode-sets-regex": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.28.6.tgz", + "integrity": "sha512-/wHc/paTUmsDYN7SZkpWxogTOBNnlx7nBQYfy6JJlCT7G3mVhltk3e++N7zV0XfgGsrqBxd4rJQt9H16I21Y1Q==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "win32" - ], + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.28.5", + "@babel/helper-plugin-utils": "^7.28.6" + }, "engines": { - "node": ">= 10" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "node_modules/@napi-rs/nice-win32-x64-msvc": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-win32-x64-msvc/-/nice-win32-x64-msvc-1.1.1.tgz", - "integrity": "sha512-vB+4G/jBQCAh0jelMTY3+kgFy00Hlx2f2/1zjMoH821IbplbWZOkLiTYXQkygNTzQJTq5cvwBDgn2ppHD+bglQ==", - "cpu": [ - "x64" - ], + "node_modules/@babel/preset-env": { + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.29.2.tgz", + "integrity": "sha512-DYD23veRYGvBFhcTY1iUvJnDNpuqNd/BzBwCvzOTKUnJjKg5kpUBh3/u9585Agdkgj+QuygG7jLfOPWMa2KVNw==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "win32" - ], + "peer": true, + "dependencies": { + "@babel/compat-data": "^7.29.0", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/helper-validator-option": "^7.27.1", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.28.5", + "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.27.1", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.27.1", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.27.1", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.28.6", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-import-assertions": "^7.28.6", + "@babel/plugin-syntax-import-attributes": "^7.28.6", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.27.1", + "@babel/plugin-transform-async-generator-functions": "^7.29.0", + "@babel/plugin-transform-async-to-generator": "^7.28.6", + "@babel/plugin-transform-block-scoped-functions": "^7.27.1", + "@babel/plugin-transform-block-scoping": "^7.28.6", + "@babel/plugin-transform-class-properties": "^7.28.6", + "@babel/plugin-transform-class-static-block": "^7.28.6", + "@babel/plugin-transform-classes": "^7.28.6", + "@babel/plugin-transform-computed-properties": "^7.28.6", + "@babel/plugin-transform-destructuring": "^7.28.5", + "@babel/plugin-transform-dotall-regex": "^7.28.6", + "@babel/plugin-transform-duplicate-keys": "^7.27.1", + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.29.0", + "@babel/plugin-transform-dynamic-import": "^7.27.1", + "@babel/plugin-transform-explicit-resource-management": "^7.28.6", + "@babel/plugin-transform-exponentiation-operator": "^7.28.6", + "@babel/plugin-transform-export-namespace-from": "^7.27.1", + "@babel/plugin-transform-for-of": "^7.27.1", + "@babel/plugin-transform-function-name": "^7.27.1", + "@babel/plugin-transform-json-strings": "^7.28.6", + "@babel/plugin-transform-literals": "^7.27.1", + "@babel/plugin-transform-logical-assignment-operators": "^7.28.6", + "@babel/plugin-transform-member-expression-literals": "^7.27.1", + "@babel/plugin-transform-modules-amd": "^7.27.1", + "@babel/plugin-transform-modules-commonjs": "^7.28.6", + "@babel/plugin-transform-modules-systemjs": "^7.29.0", + "@babel/plugin-transform-modules-umd": "^7.27.1", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.29.0", + "@babel/plugin-transform-new-target": "^7.27.1", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.28.6", + "@babel/plugin-transform-numeric-separator": "^7.28.6", + "@babel/plugin-transform-object-rest-spread": "^7.28.6", + "@babel/plugin-transform-object-super": "^7.27.1", + "@babel/plugin-transform-optional-catch-binding": "^7.28.6", + "@babel/plugin-transform-optional-chaining": "^7.28.6", + "@babel/plugin-transform-parameters": "^7.27.7", + "@babel/plugin-transform-private-methods": "^7.28.6", + "@babel/plugin-transform-private-property-in-object": "^7.28.6", + "@babel/plugin-transform-property-literals": "^7.27.1", + "@babel/plugin-transform-regenerator": "^7.29.0", + "@babel/plugin-transform-regexp-modifiers": "^7.28.6", + "@babel/plugin-transform-reserved-words": "^7.27.1", + "@babel/plugin-transform-shorthand-properties": "^7.27.1", + "@babel/plugin-transform-spread": "^7.28.6", + "@babel/plugin-transform-sticky-regex": "^7.27.1", + "@babel/plugin-transform-template-literals": "^7.27.1", + "@babel/plugin-transform-typeof-symbol": "^7.27.1", + "@babel/plugin-transform-unicode-escapes": "^7.27.1", + "@babel/plugin-transform-unicode-property-regex": "^7.28.6", + "@babel/plugin-transform-unicode-regex": "^7.27.1", + "@babel/plugin-transform-unicode-sets-regex": "^7.28.6", + "@babel/preset-modules": "0.1.6-no-external-plugins", + "babel-plugin-polyfill-corejs2": "^0.4.15", + "babel-plugin-polyfill-corejs3": "^0.14.0", + "babel-plugin-polyfill-regenerator": "^0.6.6", + "core-js-compat": "^3.48.0", + "semver": "^6.3.1" + }, "engines": { - "node": ">= 10" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@napi-rs/wasm-runtime": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.1.tgz", - "integrity": "sha512-p64ah1M1ld8xjWv3qbvFwHiFVWrq1yFvV4f7w+mzaqiR4IlSgkqhcRdHwsGgomwzBH51sRY4NEowLxnaBjcW/A==", + "node_modules/@babel/preset-env/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "peer": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.6-no-external-plugins", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", + "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", "dev": true, "license": "MIT", - "optional": true, "dependencies": { - "@emnapi/core": "^1.7.1", - "@emnapi/runtime": "^1.7.1", - "@tybys/wasm-util": "^0.10.1" + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Brooooooklyn" + "peerDependencies": { + "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" } }, - "node_modules/@npmcli/agent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-4.0.0.tgz", - "integrity": "sha512-kAQTcEN9E8ERLVg5AsGwLNoFb+oEG6engbqAU2P43gD4JEIkNGMHdVQ096FsOAAYpZPB0RSt0zgInKIAS1l5QA==", + "node_modules/@babel/runtime": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.6.tgz", + "integrity": "sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA==", "dev": true, - "license": "ISC", - "dependencies": { - "agent-base": "^7.1.0", - "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.1", - "lru-cache": "^11.2.1", - "socks-proxy-agent": "^8.0.3" - }, + "license": "MIT", "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=6.9.0" } }, - "node_modules/@npmcli/agent/node_modules/lru-cache": { - "version": "11.2.7", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.7.tgz", - "integrity": "sha512-aY/R+aEsRelme17KGQa/1ZSIpLpNYYrhcrepKTZgE+W3WM16YMCaPwOHLHsmopZHELU0Ojin1lPVxKR0MihncA==", - "dev": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": "20 || >=22" - } - }, - "node_modules/@npmcli/fs": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-5.0.0.tgz", - "integrity": "sha512-7OsC1gNORBEawOa5+j2pXN9vsicaIOH5cPXxoR6fJOmH6/EXpJB2CajXOu1fPRFun2m1lktEFX11+P89hqO/og==", + "node_modules/@babel/template": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", + "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "semver": "^7.3.5" + "@babel/code-frame": "^7.28.6", + "@babel/parser": "^7.28.6", + "@babel/types": "^7.28.6" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=6.9.0" } }, - "node_modules/@npmcli/git": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-7.0.2.tgz", - "integrity": "sha512-oeolHDjExNAJAnlYP2qzNjMX/Xi9bmu78C9dIGr4xjobrSKbuMYCph8lTzn4vnW3NjIqVmw/f8BCfouqyJXlRg==", + "node_modules/@babel/traverse": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz", + "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "@gar/promise-retry": "^1.0.0", - "@npmcli/promise-spawn": "^9.0.0", - "ini": "^6.0.0", - "lru-cache": "^11.2.1", - "npm-pick-manifest": "^11.0.1", - "proc-log": "^6.0.0", - "semver": "^7.3.5", - "which": "^6.0.0" + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0", + "debug": "^4.3.1" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=6.9.0" } }, - "node_modules/@npmcli/git/node_modules/isexe": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-4.0.0.tgz", - "integrity": "sha512-FFUtZMpoZ8RqHS3XeXEmHWLA4thH+ZxCv2lOiPIn1Xc7CxrqhWzNSDzD+/chS/zbYezmiwWLdQC09JdQKmthOw==", + "node_modules/@babel/types": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", "dev": true, - "license": "BlueOak-1.0.0", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + }, "engines": { - "node": ">=20" + "node": ">=6.9.0" } }, - "node_modules/@npmcli/git/node_modules/lru-cache": { - "version": "11.2.7", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.7.tgz", - "integrity": "sha512-aY/R+aEsRelme17KGQa/1ZSIpLpNYYrhcrepKTZgE+W3WM16YMCaPwOHLHsmopZHELU0Ojin1lPVxKR0MihncA==", + "node_modules/@bcoe/v8-coverage": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-1.0.2.tgz", + "integrity": "sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==", "dev": true, - "license": "BlueOak-1.0.0", + "license": "MIT", "engines": { - "node": "20 || >=22" + "node": ">=18" } }, - "node_modules/@npmcli/git/node_modules/which": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/which/-/which-6.0.1.tgz", - "integrity": "sha512-oGLe46MIrCRqX7ytPUf66EAYvdeMIZYn3WaocqqKZAxrBpkqHfL/qvTyJ/bTk5+AqHCjXmrv3CEWgy368zhRUg==", + "node_modules/@bramus/specificity": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@bramus/specificity/-/specificity-2.4.2.tgz", + "integrity": "sha512-ctxtJ/eA+t+6q2++vj5j7FYX3nRu311q1wfYH3xjlLOsczhlhxAg2FWNUXhpGvAw3BWo1xBcvOV6/YLc2r5FJw==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "isexe": "^4.0.0" + "css-tree": "^3.0.0" }, "bin": { - "node-which": "bin/which.js" - }, - "engines": { - "node": "^20.17.0 || >=22.9.0" + "specificity": "bin/cli.js" } }, - "node_modules/@npmcli/installed-package-contents": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-4.0.0.tgz", - "integrity": "sha512-yNyAdkBxB72gtZ4GrwXCM0ZUedo9nIbOMKfGjt6Cu6DXf0p8y1PViZAKDC8q8kv/fufx0WTjRBdSlyrvnP7hmA==", + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "npm-bundled": "^5.0.0", - "npm-normalize-package-bin": "^5.0.0" - }, - "bin": { - "installed-package-contents": "bin/index.js" + "@jridgewell/trace-mapping": "0.3.9" }, "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/@npmcli/node-gyp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-5.0.0.tgz", - "integrity": "sha512-uuG5HZFXLfyFKqg8QypsmgLQW7smiRjVc45bqD/ofZZcR/uxEjgQU8qDPv0s9TEeMUiAAU/GC5bR6++UdTirIQ==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=12" } }, - "node_modules/@npmcli/package-json": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-7.0.5.tgz", - "integrity": "sha512-iVuTlG3ORq2iaVa1IWUxAO/jIp77tUKBhoMjuzYW2kL4MLN1bi/ofqkZ7D7OOwh8coAx1/S2ge0rMdGv8sLSOQ==", + "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "@npmcli/git": "^7.0.0", - "glob": "^13.0.0", - "hosted-git-info": "^9.0.0", - "json-parse-even-better-errors": "^5.0.0", - "proc-log": "^6.0.0", - "semver": "^7.5.3", - "spdx-expression-parse": "^4.0.0" - }, - "engines": { - "node": "^20.17.0 || >=22.9.0" + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" } }, - "node_modules/@npmcli/promise-spawn": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-9.0.1.tgz", - "integrity": "sha512-OLUaoqBuyxeTqUvjA3FZFiXUfYC1alp3Sa99gW3EUDz3tZ3CbXDdcZ7qWKBzicrJleIgucoWamWH1saAmH/l2Q==", + "node_modules/@csstools/color-helpers": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-6.0.2.tgz", + "integrity": "sha512-LMGQLS9EuADloEFkcTBR3BwV/CGHV7zyDxVRtVDTwdI2Ca4it0CCVTT9wCkxSgokjE5Ho41hEPgb8OEUwoXr6Q==", "dev": true, - "license": "ISC", - "dependencies": { - "which": "^6.0.0" - }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=20.19.0" } }, - "node_modules/@npmcli/promise-spawn/node_modules/isexe": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-4.0.0.tgz", - "integrity": "sha512-FFUtZMpoZ8RqHS3XeXEmHWLA4thH+ZxCv2lOiPIn1Xc7CxrqhWzNSDzD+/chS/zbYezmiwWLdQC09JdQKmthOw==", + "node_modules/@csstools/css-calc": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-3.1.1.tgz", + "integrity": "sha512-HJ26Z/vmsZQqs/o3a6bgKslXGFAungXGbinULZO3eMsOyNJHeBBZfup5FiZInOghgoM4Hwnmw+OgbJCNg1wwUQ==", "dev": true, - "license": "BlueOak-1.0.0", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", "engines": { - "node": ">=20" + "node": ">=20.19.0" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^4.0.0", + "@csstools/css-tokenizer": "^4.0.0" } }, - "node_modules/@npmcli/promise-spawn/node_modules/which": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/which/-/which-6.0.1.tgz", - "integrity": "sha512-oGLe46MIrCRqX7ytPUf66EAYvdeMIZYn3WaocqqKZAxrBpkqHfL/qvTyJ/bTk5+AqHCjXmrv3CEWgy368zhRUg==", + "node_modules/@csstools/css-color-parser": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-4.0.2.tgz", + "integrity": "sha512-0GEfbBLmTFf0dJlpsNU7zwxRIH0/BGEMuXLTCvFYxuL1tNhqzTbtnFICyJLTNK4a+RechKP75e7w42ClXSnJQw==", "dev": true, - "license": "ISC", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", "dependencies": { - "isexe": "^4.0.0" - }, - "bin": { - "node-which": "bin/which.js" + "@csstools/color-helpers": "^6.0.2", + "@csstools/css-calc": "^3.1.1" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=20.19.0" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^4.0.0", + "@csstools/css-tokenizer": "^4.0.0" } }, - "node_modules/@npmcli/redact": { + "node_modules/@csstools/css-parser-algorithms": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/redact/-/redact-4.0.0.tgz", - "integrity": "sha512-gOBg5YHMfZy+TfHArfVogwgfBeQnKbbGo3pSUyK/gSI0AVu+pEiDVcKlQb0D8Mg1LNRZILZ6XG8I5dJ4KuAd9Q==", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-4.0.0.tgz", + "integrity": "sha512-+B87qS7fIG3L5h3qwJ/IFbjoVoOe/bpOdh9hAjXbvx0o8ImEmUsGXN0inFOnk2ChCFgqkkGFQ+TpM5rbhkKe4w==", "dev": true, - "license": "ISC", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=20.19.0" + }, + "peerDependencies": { + "@csstools/css-tokenizer": "^4.0.0" } }, - "node_modules/@npmcli/run-script": { - "version": "10.0.4", - "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-10.0.4.tgz", - "integrity": "sha512-mGUWr1uMnf0le2TwfOZY4SFxZGXGfm4Jtay/nwAa2FLNAKXUoUwaGwBMNH36UHPtinWfTSJ3nqFQr0091CxVGg==", + "node_modules/@csstools/css-syntax-patches-for-csstree": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@csstools/css-syntax-patches-for-csstree/-/css-syntax-patches-for-csstree-1.1.1.tgz", + "integrity": "sha512-BvqN0AMWNAnLk9G8jnUT77D+mUbY/H2b3uDTvg2isJkHaOufUE2R3AOwxWo7VBQKT1lOdwdvorddo2B/lk64+w==", "dev": true, - "license": "ISC", - "dependencies": { - "@npmcli/node-gyp": "^5.0.0", - "@npmcli/package-json": "^7.0.0", - "@npmcli/promise-spawn": "^9.0.0", - "node-gyp": "^12.1.0", - "proc-log": "^6.0.0" + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "peerDependencies": { + "css-tree": "^3.2.1" }, - "engines": { - "node": "^20.17.0 || >=22.9.0" + "peerDependenciesMeta": { + "css-tree": { + "optional": true + } } }, - "node_modules/@oxc-project/types": { - "version": "0.113.0", - "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.113.0.tgz", - "integrity": "sha512-Tp3XmgxwNQ9pEN9vxgJBAqdRamHibi76iowQ38O2I4PMpcvNRQNVsU2n1x1nv9yh0XoTrGFzf7cZSGxmixxrhA==", + "node_modules/@csstools/css-tokenizer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-4.0.0.tgz", + "integrity": "sha512-QxULHAm7cNu72w97JUNCBFODFaXpbDg+dP8b/oWFAZ2MTRppA3U00Y2L1HqaS4J6yBqxwa/Y3nMBaxVKbB/NsA==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/Boshen" + "engines": { + "node": ">=20.19.0" } }, - "node_modules/@parcel/watcher": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.6.tgz", - "integrity": "sha512-tmmZ3lQxAe/k/+rNnXQRawJ4NjxO2hqiOLTHvWchtGZULp4RyFeh6aU4XdOYBFe2KE1oShQTv4AblOs2iOrNnQ==", + "node_modules/@cypress/code-coverage": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@cypress/code-coverage/-/code-coverage-4.0.3.tgz", + "integrity": "sha512-Dsx95C6rPJrN7ruRyyh3xOy39iAmrLBclHdF+yiC7f8O1SIAOojplveBdFGj0EHf2I2ieNw7ZZpT3Qy1Fju0aA==", "dev": true, - "hasInstallScript": true, "license": "MIT", - "optional": true, "dependencies": { - "detect-libc": "^2.0.3", - "is-glob": "^4.0.3", - "node-addon-api": "^7.0.0", - "picomatch": "^4.0.3" + "@cypress/webpack-preprocessor": "^6.0.0", + "chalk": "4.1.2", + "dayjs": "1.11.20", + "debug": "4.4.3", + "execa": "4.1.0", + "istanbul-lib-coverage": "^3.0.0", + "js-yaml": "^4.1.1", + "nyc": "^18.0.0", + "tinyglobby": "^0.2.14" }, "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "node": ">=20" }, - "optionalDependencies": { - "@parcel/watcher-android-arm64": "2.5.6", - "@parcel/watcher-darwin-arm64": "2.5.6", - "@parcel/watcher-darwin-x64": "2.5.6", - "@parcel/watcher-freebsd-x64": "2.5.6", - "@parcel/watcher-linux-arm-glibc": "2.5.6", - "@parcel/watcher-linux-arm-musl": "2.5.6", - "@parcel/watcher-linux-arm64-glibc": "2.5.6", - "@parcel/watcher-linux-arm64-musl": "2.5.6", - "@parcel/watcher-linux-x64-glibc": "2.5.6", - "@parcel/watcher-linux-x64-musl": "2.5.6", - "@parcel/watcher-win32-arm64": "2.5.6", - "@parcel/watcher-win32-ia32": "2.5.6", - "@parcel/watcher-win32-x64": "2.5.6" + "peerDependencies": { + "@babel/core": "^7.0.1", + "@babel/preset-env": "^7.0.0", + "babel-loader": "^8.3 || ^9 || ^10", + "cypress": ">=15.10.0", + "webpack": "^4 || ^5" } }, - "node_modules/@parcel/watcher-android-arm64": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.6.tgz", - "integrity": "sha512-YQxSS34tPF/6ZG7r/Ih9xy+kP/WwediEUsqmtf0cuCV5TPPKw/PQHRhueUo6JdeFJaqV3pyjm0GdYjZotbRt/A==", - "cpu": [ - "arm64" - ], + "node_modules/@cypress/code-coverage/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "android" - ], + "dependencies": { + "color-convert": "^2.0.1" + }, "engines": { - "node": ">= 10.0.0" + "node": ">=8" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@parcel/watcher-darwin-arm64": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.6.tgz", - "integrity": "sha512-Z2ZdrnwyXvvvdtRHLmM4knydIdU9adO3D4n/0cVipF3rRiwP+3/sfzpAwA/qKFL6i1ModaabkU7IbpeMBgiVEA==", - "cpu": [ - "arm64" - ], + "node_modules/@cypress/code-coverage/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, "engines": { - "node": ">= 10.0.0" + "node": ">=10" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@parcel/watcher-darwin-x64": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.6.tgz", - "integrity": "sha512-HgvOf3W9dhithcwOWX9uDZyn1lW9R+7tPZ4sug+NGrGIo4Rk1hAXLEbcH1TQSqxts0NYXXlOWqVpvS1SFS4fRg==", - "cpu": [ - "x64" - ], + "node_modules/@cypress/request": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@cypress/request/-/request-3.0.10.tgz", + "integrity": "sha512-hauBrOdvu08vOsagkZ/Aju5XuiZx6ldsLfByg1htFeldhex+PeMrYauANzFsMJeAA0+dyPLbDoX2OYuvVoLDkQ==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10.0.0" + "license": "Apache-2.0", + "dependencies": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~4.0.4", + "http-signature": "~1.4.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "performance-now": "^2.1.0", + "qs": "~6.14.1", + "safe-buffer": "^5.1.2", + "tough-cookie": "^5.0.0", + "tunnel-agent": "^0.6.0", + "uuid": "^8.3.2" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "engines": { + "node": ">= 6" } }, - "node_modules/@parcel/watcher-freebsd-x64": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.6.tgz", - "integrity": "sha512-vJVi8yd/qzJxEKHkeemh7w3YAn6RJCtYlE4HPMoVnCpIXEzSrxErBW5SJBgKLbXU3WdIpkjBTeUNtyBVn8TRng==", - "cpu": [ - "x64" - ], + "node_modules/@cypress/request/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "node": ">= 0.6" } }, - "node_modules/@parcel/watcher-linux-arm-glibc": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.6.tgz", - "integrity": "sha512-9JiYfB6h6BgV50CCfasfLf/uvOcJskMSwcdH1PHH9rvS1IrNy8zad6IUVPVUfmXr+u+Km9IxcfMLzgdOudz9EQ==", - "cpu": [ - "arm" - ], + "node_modules/@cypress/request/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" + "dependencies": { + "mime-db": "1.52.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "engines": { + "node": ">= 0.6" } }, - "node_modules/@parcel/watcher-linux-arm-musl": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.6.tgz", - "integrity": "sha512-Ve3gUCG57nuUUSyjBq/MAM0CzArtuIOxsBdQ+ftz6ho8n7s1i9E1Nmk/xmP323r2YL0SONs1EuwqBp2u1k5fxg==", - "cpu": [ - "arm" - ], + "node_modules/@cypress/request/node_modules/qs": { + "version": "6.14.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.2.tgz", + "integrity": "sha512-V/yCWTTF7VJ9hIh18Ugr2zhJMP01MY7c5kh4J870L7imm6/DIzBsNLTXzMwUA3yZ5b/KBqLx8Kp3uRvd7xSe3Q==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.1.0" + }, "engines": { - "node": ">= 10.0.0" + "node": ">=0.6" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@parcel/watcher-linux-arm64-glibc": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.6.tgz", - "integrity": "sha512-f2g/DT3NhGPdBmMWYoxixqYr3v/UXcmLOYy16Bx0TM20Tchduwr4EaCbmxh1321TABqPGDpS8D/ggOTaljijOA==", - "cpu": [ - "arm64" - ], + "node_modules/@cypress/request/node_modules/tldts": { + "version": "6.1.86", + "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.86.tgz", + "integrity": "sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" + "dependencies": { + "tldts-core": "^6.1.86" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "bin": { + "tldts": "bin/cli.js" } }, - "node_modules/@parcel/watcher-linux-arm64-musl": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.6.tgz", - "integrity": "sha512-qb6naMDGlbCwdhLj6hgoVKJl2odL34z2sqkC7Z6kzir8b5W65WYDpLB6R06KabvZdgoHI/zxke4b3zR0wAbDTA==", - "cpu": [ - "arm64" - ], + "node_modules/@cypress/request/node_modules/tldts-core": { + "version": "6.1.86", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.86.tgz", + "integrity": "sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" + "license": "MIT" + }, + "node_modules/@cypress/request/node_modules/tough-cookie": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.1.2.tgz", + "integrity": "sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "tldts": "^6.1.32" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "engines": { + "node": ">=16" } }, - "node_modules/@parcel/watcher-linux-x64-glibc": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.6.tgz", - "integrity": "sha512-kbT5wvNQlx7NaGjzPFu8nVIW1rWqV780O7ZtkjuWaPUgpv2NMFpjYERVi0UYj1msZNyCzGlaCWEtzc+exjMGbQ==", - "cpu": [ - "x64" - ], + "node_modules/@cypress/schematic": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@cypress/schematic/-/schematic-5.0.0.tgz", + "integrity": "sha512-z8+myDqT4SONCBvNI+cFzhADFCOOsSOcfp6mxMx4FxMMpyeaYbUNUCZlt886UnjnSsL5BWSX7WNJLhPptewKVw==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" + "dependencies": { + "jsonc-parser": "^3.3.1", + "rxjs": "~7.8.2", + "semver": "^7.7.3" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "peerDependencies": { + "@angular/cli": ">=20.0.0", + "@angular/core": ">=20.0.0", + "cypress": "^15.8.0" } }, - "node_modules/@parcel/watcher-linux-x64-musl": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.6.tgz", - "integrity": "sha512-1JRFeC+h7RdXwldHzTsmdtYR/Ku8SylLgTU/reMuqdVD7CtLwf0VR1FqeprZ0eHQkO0vqsbvFLXUmYm/uNKJBg==", + "node_modules/@cypress/webpack-preprocessor": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/@cypress/webpack-preprocessor/-/webpack-preprocessor-6.0.4.tgz", + "integrity": "sha512-ly+EcabWWbhrSPr2J/njQX7Y3da+QqOmFg8Og/MVmLxhDLKIzr2WhTdgzDYviPTLx/IKsdb41cc2RLYp6mSBRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "bluebird": "3.7.1", + "debug": "^4.3.4", + "lodash": "^4.17.20", + "semver": "^7.3.2" + }, + "peerDependencies": { + "@babel/core": "^7.25.2", + "@babel/preset-env": "^7.25.3", + "babel-loader": "^8.3 || ^9 || ^10", + "webpack": "^4 || ^5" + } + }, + "node_modules/@cypress/webpack-preprocessor/node_modules/bluebird": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.1.tgz", + "integrity": "sha512-DdmyoGCleJnkbp3nkbxTLJ18rjDsE4yCggEwKNXkeV123sPNfOCYeDoeuOY+F2FrSjO1YXcTU+dsy96KMy+gcg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cypress/xvfb": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@cypress/xvfb/-/xvfb-1.2.4.tgz", + "integrity": "sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^3.1.0", + "lodash.once": "^4.1.1" + } + }, + "node_modules/@cypress/xvfb/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/@discoveryjs/json-ext": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.6.3.tgz", + "integrity": "sha512-4B4OijXeVNOPZlYA2oEwWOTkzyltLao+xbotHQeqN++Rv27Y6s818+n2Qkp8q+Fxhn0t/5lA5X1Mxktud8eayQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.17.0" + } + }, + "node_modules/@emnapi/core": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.9.0.tgz", + "integrity": "sha512-0DQ98G9ZQZOxfUcQn1waV2yS8aWdZ6kJMbYCJB3oUBecjWYO1fqJ+a1DRfPF3O5JEkwqwP1A9QEN/9mYm2Yd0w==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "1.2.0", + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.9.0.tgz", + "integrity": "sha512-QN75eB0IH2ywSpRpNddCRfQIhmJYBCJ1x5Lb3IscKAL8bMnVAKnRg8dCoXbHzVLLH7P38N2Z3mtulB7W0J0FKw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/wasi-threads": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.0.tgz", + "integrity": "sha512-N10dEJNSsUx41Z6pZsXU8FjPjpBEplgH24sfkmITrBED1/U2Esum9F3lfLrMjKHHjmi557zQn7kR9R+XWXu5Rg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.3.tgz", + "integrity": "sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg==", "cpu": [ - "x64" + "ppc64" ], "dev": true, "license": "MIT", "optional": true, "os": [ - "linux" + "aix" ], "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "node": ">=18" } }, - "node_modules/@parcel/watcher-win32-arm64": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.6.tgz", - "integrity": "sha512-3ukyebjc6eGlw9yRt678DxVF7rjXatWiHvTXqphZLvo7aC5NdEgFufVwjFfY51ijYEWpXbqF5jtrK275z52D4Q==", + "node_modules/@esbuild/android-arm": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.3.tgz", + "integrity": "sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA==", "cpu": [ - "arm64" + "arm" ], "dev": true, "license": "MIT", "optional": true, "os": [ - "win32" + "android" ], "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "node": ">=18" } }, - "node_modules/@parcel/watcher-win32-ia32": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.6.tgz", - "integrity": "sha512-k35yLp1ZMwwee3Ez/pxBi5cf4AoBKYXj00CZ80jUz5h8prpiaQsiRPKQMxoLstNuqe2vR4RNPEAEcjEFzhEz/g==", + "node_modules/@esbuild/android-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.3.tgz", + "integrity": "sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg==", "cpu": [ - "ia32" + "arm64" ], "dev": true, "license": "MIT", "optional": true, "os": [ - "win32" + "android" ], "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "node": ">=18" } }, - "node_modules/@parcel/watcher-win32-x64": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.6.tgz", - "integrity": "sha512-hbQlYcCq5dlAX9Qx+kFb0FHue6vbjlf0FrNzSKdYK2APUf7tGfGxQCk2ihEREmbR6ZMc0MVAD5RIX/41gpUzTw==", + "node_modules/@esbuild/android-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.3.tgz", + "integrity": "sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ==", "cpu": [ "x64" ], @@ -3218,28 +3608,16 @@ "license": "MIT", "optional": true, "os": [ - "win32" + "android" ], "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "node": ">=18" } }, - "node_modules/@parcel/watcher/node_modules/node-addon-api": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", - "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/@rolldown/binding-android-arm64": { - "version": "1.0.0-rc.4", - "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.0-rc.4.tgz", - "integrity": "sha512-vRq9f4NzvbdZavhQbjkJBx7rRebDKYR9zHfO/Wg486+I7bSecdUapzCm5cyXoK+LHokTxgSq7A5baAXUZkIz0w==", + "node_modules/@esbuild/darwin-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.3.tgz", + "integrity": "sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg==", "cpu": [ "arm64" ], @@ -3247,18 +3625,18 @@ "license": "MIT", "optional": true, "os": [ - "android" + "darwin" ], "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": ">=18" } }, - "node_modules/@rolldown/binding-darwin-arm64": { - "version": "1.0.0-rc.4", - "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.0-rc.4.tgz", - "integrity": "sha512-kFgEvkWLqt3YCgKB5re9RlIrx9bRsvyVUnaTakEpOPuLGzLpLapYxE9BufJNvPg8GjT6mB1alN4yN1NjzoeM8Q==", + "node_modules/@esbuild/darwin-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.3.tgz", + "integrity": "sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg==", "cpu": [ - "arm64" + "x64" ], "dev": true, "license": "MIT", @@ -3267,30 +3645,30 @@ "darwin" ], "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": ">=18" } }, - "node_modules/@rolldown/binding-darwin-x64": { - "version": "1.0.0-rc.4", - "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.0-rc.4.tgz", - "integrity": "sha512-JXmaOJGsL/+rsmMfutcDjxWM2fTaVgCHGoXS7nE8Z3c9NAYjGqHvXrAhMUZvMpHS/k7Mg+X7n/MVKb7NYWKKww==", + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.3.tgz", + "integrity": "sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w==", "cpu": [ - "x64" + "arm64" ], "dev": true, "license": "MIT", "optional": true, "os": [ - "darwin" + "freebsd" ], "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": ">=18" } }, - "node_modules/@rolldown/binding-freebsd-x64": { - "version": "1.0.0-rc.4", - "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.0-rc.4.tgz", - "integrity": "sha512-ep3Catd6sPnHTM0P4hNEvIv5arnDvk01PfyJIJ+J3wVCG1eEaPo09tvFqdtcaTrkwQy0VWR24uz+cb4IsK53Qw==", + "node_modules/@esbuild/freebsd-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.3.tgz", + "integrity": "sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA==", "cpu": [ "x64" ], @@ -3301,13 +3679,13 @@ "freebsd" ], "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": ">=18" } }, - "node_modules/@rolldown/binding-linux-arm-gnueabihf": { - "version": "1.0.0-rc.4", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.0-rc.4.tgz", - "integrity": "sha512-LwA5ayKIpnsgXJEwWc3h8wPiS33NMIHd9BhsV92T8VetVAbGe2qXlJwNVDGHN5cOQ22R9uYvbrQir2AB+ntT2w==", + "node_modules/@esbuild/linux-arm": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.3.tgz", + "integrity": "sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw==", "cpu": [ "arm" ], @@ -3318,13 +3696,13 @@ "linux" ], "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": ">=18" } }, - "node_modules/@rolldown/binding-linux-arm64-gnu": { - "version": "1.0.0-rc.4", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.0-rc.4.tgz", - "integrity": "sha512-AC1WsGdlV1MtGay/OQ4J9T7GRadVnpYRzTcygV1hKnypbYN20Yh4t6O1Sa2qRBMqv1etulUknqXjc3CTIsBu6A==", + "node_modules/@esbuild/linux-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.3.tgz", + "integrity": "sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg==", "cpu": [ "arm64" ], @@ -3335,15 +3713,15 @@ "linux" ], "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": ">=18" } }, - "node_modules/@rolldown/binding-linux-arm64-musl": { - "version": "1.0.0-rc.4", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.0-rc.4.tgz", - "integrity": "sha512-lU+6rgXXViO61B4EudxtVMXSOfiZONR29Sys5VGSetUY7X8mg9FCKIIjcPPj8xNDeYzKl+H8F/qSKOBVFJChCQ==", + "node_modules/@esbuild/linux-ia32": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.3.tgz", + "integrity": "sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg==", "cpu": [ - "arm64" + "ia32" ], "dev": true, "license": "MIT", @@ -3352,15 +3730,15 @@ "linux" ], "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": ">=18" } }, - "node_modules/@rolldown/binding-linux-x64-gnu": { - "version": "1.0.0-rc.4", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.0-rc.4.tgz", - "integrity": "sha512-DZaN1f0PGp/bSvKhtw50pPsnln4T13ycDq1FrDWRiHmWt1JeW+UtYg9touPFf8yt993p8tS2QjybpzKNTxYEwg==", + "node_modules/@esbuild/linux-loong64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.3.tgz", + "integrity": "sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA==", "cpu": [ - "x64" + "loong64" ], "dev": true, "license": "MIT", @@ -3369,15 +3747,15 @@ "linux" ], "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": ">=18" } }, - "node_modules/@rolldown/binding-linux-x64-musl": { - "version": "1.0.0-rc.4", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.0-rc.4.tgz", - "integrity": "sha512-RnGxwZLN7fhMMAItnD6dZ7lvy+TI7ba+2V54UF4dhaWa/p8I/ys1E73KO6HmPmgz92ZkfD8TXS1IMV8+uhbR9g==", + "node_modules/@esbuild/linux-mips64el": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.3.tgz", + "integrity": "sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw==", "cpu": [ - "x64" + "mips64el" ], "dev": true, "license": "MIT", @@ -3386,64 +3764,64 @@ "linux" ], "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": ">=18" } }, - "node_modules/@rolldown/binding-openharmony-arm64": { - "version": "1.0.0-rc.4", - "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.0.0-rc.4.tgz", - "integrity": "sha512-6lcI79+X8klGiGd8yHuTgQRjuuJYNggmEml+RsyN596P23l/zf9FVmJ7K0KVKkFAeYEdg0iMUKyIxiV5vebDNQ==", + "node_modules/@esbuild/linux-ppc64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.3.tgz", + "integrity": "sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA==", "cpu": [ - "arm64" + "ppc64" ], "dev": true, "license": "MIT", "optional": true, "os": [ - "openharmony" + "linux" ], "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": ">=18" } }, - "node_modules/@rolldown/binding-wasm32-wasi": { - "version": "1.0.0-rc.4", - "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.0-rc.4.tgz", - "integrity": "sha512-wz7ohsKCAIWy91blZ/1FlpPdqrsm1xpcEOQVveWoL6+aSPKL4VUcoYmmzuLTssyZxRpEwzuIxL/GDsvpjaBtOw==", + "node_modules/@esbuild/linux-riscv64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.3.tgz", + "integrity": "sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ==", "cpu": [ - "wasm32" + "riscv64" ], "dev": true, "license": "MIT", "optional": true, - "dependencies": { - "@napi-rs/wasm-runtime": "^1.1.1" - }, + "os": [ + "linux" + ], "engines": { - "node": ">=14.0.0" + "node": ">=18" } }, - "node_modules/@rolldown/binding-win32-arm64-msvc": { - "version": "1.0.0-rc.4", - "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.0-rc.4.tgz", - "integrity": "sha512-cfiMrfuWCIgsFmcVG0IPuO6qTRHvF7NuG3wngX1RZzc6dU8FuBFb+J3MIR5WrdTNozlumfgL4cvz+R4ozBCvsQ==", + "node_modules/@esbuild/linux-s390x": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.3.tgz", + "integrity": "sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw==", "cpu": [ - "arm64" + "s390x" ], "dev": true, "license": "MIT", "optional": true, "os": [ - "win32" + "linux" ], "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": ">=18" } }, - "node_modules/@rolldown/binding-win32-x64-msvc": { - "version": "1.0.0-rc.4", - "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.0-rc.4.tgz", - "integrity": "sha512-p6UeR9y7ht82AH57qwGuFYn69S6CZ7LLKdCKy/8T3zS9VTrJei2/CGsTUV45Da4Z9Rbhc7G4gyWQ/Ioamqn09g==", + "node_modules/@esbuild/linux-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.3.tgz", + "integrity": "sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA==", "cpu": [ "x64" ], @@ -3451,51 +3829,50 @@ "license": "MIT", "optional": true, "os": [ - "win32" + "linux" ], "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": ">=18" } }, - "node_modules/@rolldown/pluginutils": { - "version": "1.0.0-rc.4", - "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.4.tgz", - "integrity": "sha512-1BrrmTu0TWfOP1riA8uakjFc9bpIUGzVKETsOtzY39pPga8zELGDl8eu1Dx7/gjM5CAz14UknsUMpBO8L+YntQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.59.0.tgz", - "integrity": "sha512-upnNBkA6ZH2VKGcBj9Fyl9IGNPULcjXRlg0LLeaioQWueH30p6IXtJEbKAgvyv+mJaMxSm1l6xwDXYjpEMiLMg==", + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.3.tgz", + "integrity": "sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA==", "cpu": [ - "arm" + "arm64" ], "dev": true, "license": "MIT", "optional": true, "os": [ - "android" - ] + "netbsd" + ], + "engines": { + "node": ">=18" + } }, - "node_modules/@rollup/rollup-android-arm64": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.59.0.tgz", - "integrity": "sha512-hZ+Zxj3SySm4A/DylsDKZAeVg0mvi++0PYVceVyX7hemkw7OreKdCvW2oQ3T1FMZvCaQXqOTHb8qmBShoqk69Q==", + "node_modules/@esbuild/netbsd-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.3.tgz", + "integrity": "sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA==", "cpu": [ - "arm64" + "x64" ], "dev": true, "license": "MIT", "optional": true, "os": [ - "android" - ] + "netbsd" + ], + "engines": { + "node": ">=18" + } }, - "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.59.0.tgz", - "integrity": "sha512-W2Psnbh1J8ZJw0xKAd8zdNgF9HRLkdWwwdWqubSVk0pUuQkoHnv7rx4GiF9rT4t5DIZGAsConRE3AxCdJ4m8rg==", + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.3.tgz", + "integrity": "sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw==", "cpu": [ "arm64" ], @@ -3503,13 +3880,16 @@ "license": "MIT", "optional": true, "os": [ - "darwin" - ] + "openbsd" + ], + "engines": { + "node": ">=18" + } }, - "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.59.0.tgz", - "integrity": "sha512-ZW2KkwlS4lwTv7ZVsYDiARfFCnSGhzYPdiOU4IM2fDbL+QGlyAbjgSFuqNRbSthybLbIJ915UtZBtmuLrQAT/w==", + "node_modules/@esbuild/openbsd-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.3.tgz", + "integrity": "sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ==", "cpu": [ "x64" ], @@ -3517,13 +3897,16 @@ "license": "MIT", "optional": true, "os": [ - "darwin" - ] + "openbsd" + ], + "engines": { + "node": ">=18" + } }, - "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.59.0.tgz", - "integrity": "sha512-EsKaJ5ytAu9jI3lonzn3BgG8iRBjV4LxZexygcQbpiU0wU0ATxhNVEpXKfUa0pS05gTcSDMKpn3Sx+QB9RlTTA==", + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.3.tgz", + "integrity": "sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g==", "cpu": [ "arm64" ], @@ -3531,13 +3914,16 @@ "license": "MIT", "optional": true, "os": [ - "freebsd" - ] + "openharmony" + ], + "engines": { + "node": ">=18" + } }, - "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.59.0.tgz", - "integrity": "sha512-d3DuZi2KzTMjImrxoHIAODUZYoUUMsuUiY4SRRcJy6NJoZ6iIqWnJu9IScV9jXysyGMVuW+KNzZvBLOcpdl3Vg==", + "node_modules/@esbuild/sunos-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.3.tgz", + "integrity": "sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA==", "cpu": [ "x64" ], @@ -3545,2428 +3931,11488 @@ "license": "MIT", "optional": true, "os": [ - "freebsd" - ] - }, - "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.59.0.tgz", - "integrity": "sha512-t4ONHboXi/3E0rT6OZl1pKbl2Vgxf9vJfWgmUoCEVQVxhW6Cw/c8I6hbbu7DAvgp82RKiH7TpLwxnJeKv2pbsw==", - "cpu": [ - "arm" + "sunos" ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] + "engines": { + "node": ">=18" + } }, - "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.59.0.tgz", - "integrity": "sha512-CikFT7aYPA2ufMD086cVORBYGHffBo4K8MQ4uPS/ZnY54GKj36i196u8U+aDVT2LX4eSMbyHtyOh7D7Zvk2VvA==", + "node_modules/@esbuild/win32-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.3.tgz", + "integrity": "sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA==", "cpu": [ - "arm" + "arm64" ], "dev": true, "license": "MIT", "optional": true, "os": [ - "linux" - ] + "win32" + ], + "engines": { + "node": ">=18" + } }, - "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.59.0.tgz", - "integrity": "sha512-jYgUGk5aLd1nUb1CtQ8E+t5JhLc9x5WdBKew9ZgAXg7DBk0ZHErLHdXM24rfX+bKrFe+Xp5YuJo54I5HFjGDAA==", + "node_modules/@esbuild/win32-ia32": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.3.tgz", + "integrity": "sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q==", "cpu": [ - "arm64" + "ia32" ], "dev": true, "license": "MIT", "optional": true, "os": [ - "linux" - ] + "win32" + ], + "engines": { + "node": ">=18" + } }, - "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.59.0.tgz", - "integrity": "sha512-peZRVEdnFWZ5Bh2KeumKG9ty7aCXzzEsHShOZEFiCQlDEepP1dpUl/SrUNXNg13UmZl+gzVDPsiCwnV1uI0RUA==", + "node_modules/@esbuild/win32-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.3.tgz", + "integrity": "sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA==", "cpu": [ - "arm64" + "x64" ], "dev": true, "license": "MIT", "optional": true, "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-loong64-gnu": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.59.0.tgz", - "integrity": "sha512-gbUSW/97f7+r4gHy3Jlup8zDG190AuodsWnNiXErp9mT90iCy9NKKU0Xwx5k8VlRAIV2uU9CsMnEFg/xXaOfXg==", - "cpu": [ - "loong64" + "win32" ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@exodus/bytes": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/@exodus/bytes/-/bytes-1.15.0.tgz", + "integrity": "sha512-UY0nlA+feH81UGSHv92sLEPLCeZFjXOuHhrIo0HQydScuQc8s0A7kL/UdgwgDq8g8ilksmuoF35YVTNphV2aBQ==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ] + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + }, + "peerDependencies": { + "@noble/hashes": "^1.8.0 || ^2.0.0" + }, + "peerDependenciesMeta": { + "@noble/hashes": { + "optional": true + } + } }, - "node_modules/@rollup/rollup-linux-loong64-musl": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.59.0.tgz", - "integrity": "sha512-yTRONe79E+o0FWFijasoTjtzG9EBedFXJMl888NBEDCDV9I2wGbFFfJQQe63OijbFCUZqxpHz1GzpbtSFikJ4Q==", - "cpu": [ - "loong64" - ], + "node_modules/@gar/promise-retry": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@gar/promise-retry/-/promise-retry-1.0.2.tgz", + "integrity": "sha512-Lm/ZLhDZcBECta3TmCQSngiQykFdfw+QtI1/GYMsZd4l3nG+P8WLB16XuS7WaBGLQ+9E+cOcWQsth9cayuGt8g==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-ppc64-gnu": { - "version": "4.59.0", + "dependencies": { + "retry": "^0.13.1" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@harperfast/extended-iterable": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@harperfast/extended-iterable/-/extended-iterable-1.0.3.tgz", + "integrity": "sha512-sSAYhQca3rDWtQUHSAPeO7axFIUJOI6hn1gjRC5APVE1a90tuyT8f5WIgRsFhhWA7htNkju2veB9eWL6YHi/Lw==", + "dev": true, + "license": "Apache-2.0", + "optional": true + }, + "node_modules/@hono/node-server": { + "version": "1.19.11", + "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-1.19.11.tgz", + "integrity": "sha512-dr8/3zEaB+p0D2n/IUrlPF1HZm586qgJNXK1a9fhg/PzdtkK7Ksd5l312tJX2yBuALqDYBlG20QEbayqPyxn+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.14.1" + }, + "peerDependencies": { + "hono": "^4" + } + }, + "node_modules/@inquirer/ansi": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@inquirer/ansi/-/ansi-1.0.2.tgz", + "integrity": "sha512-S8qNSZiYzFd0wAcyG5AXCvUHC5Sr7xpZ9wZ2py9XR88jUz8wooStVx5M6dRzczbBWjic9NP7+rY0Xi7qqK/aMQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/checkbox": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-4.3.2.tgz", + "integrity": "sha512-VXukHf0RR1doGe6Sm4F0Em7SWYLTHSsbGfJdS9Ja2bX5/D5uwVOEjr07cncLROdBvmnvCATYEWlHqYmXv2IlQA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^1.0.2", + "@inquirer/core": "^10.3.2", + "@inquirer/figures": "^1.0.15", + "@inquirer/type": "^3.0.10", + "yoctocolors-cjs": "^2.1.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/confirm": { + "version": "5.1.21", + "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-5.1.21.tgz", + "integrity": "sha512-KR8edRkIsUayMXV+o3Gv+q4jlhENF9nMYUZs9PA2HzrXeHI8M5uDag70U7RJn9yyiMZSbtF5/UexBtAVtZGSbQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.3.2", + "@inquirer/type": "^3.0.10" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/core": { + "version": "10.3.2", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-10.3.2.tgz", + "integrity": "sha512-43RTuEbfP8MbKzedNqBrlhhNKVwoK//vUFNW3Q3vZ88BLcrs4kYpGg+B2mm5p2K/HfygoCxuKwJJiv8PbGmE0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^1.0.2", + "@inquirer/figures": "^1.0.15", + "@inquirer/type": "^3.0.10", + "cli-width": "^4.1.0", + "mute-stream": "^2.0.0", + "signal-exit": "^4.1.0", + "wrap-ansi": "^6.2.0", + "yoctocolors-cjs": "^2.1.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/editor": { + "version": "4.2.23", + "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-4.2.23.tgz", + "integrity": "sha512-aLSROkEwirotxZ1pBaP8tugXRFCxW94gwrQLxXfrZsKkfjOYC1aRvAZuhpJOb5cu4IBTJdsCigUlf2iCOu4ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.3.2", + "@inquirer/external-editor": "^1.0.3", + "@inquirer/type": "^3.0.10" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/expand": { + "version": "4.0.23", + "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-4.0.23.tgz", + "integrity": "sha512-nRzdOyFYnpeYTTR2qFwEVmIWypzdAx/sIkCMeTNTcflFOovfqUk+HcFhQQVBftAh9gmGrpFj6QcGEqrDMDOiew==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.3.2", + "@inquirer/type": "^3.0.10", + "yoctocolors-cjs": "^2.1.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/external-editor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@inquirer/external-editor/-/external-editor-1.0.3.tgz", + "integrity": "sha512-RWbSrDiYmO4LbejWY7ttpxczuwQyZLBUyygsA9Nsv95hpzUWwnNTVQmAq3xuh7vNwCp07UTmE5i11XAEExx4RA==", + "dev": true, + "license": "MIT", + "dependencies": { + "chardet": "^2.1.1", + "iconv-lite": "^0.7.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/figures": { + "version": "1.0.15", + "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.15.tgz", + "integrity": "sha512-t2IEY+unGHOzAaVM5Xx6DEWKeXlDDcNPeDyUpsRc6CUhBfU3VQOEl+Vssh7VNp1dR8MdUJBWhuObjXCsVpjN5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/input": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-4.3.1.tgz", + "integrity": "sha512-kN0pAM4yPrLjJ1XJBjDxyfDduXOuQHrBB8aLDMueuwUGn+vNpF7Gq7TvyVxx8u4SHlFFj4trmj+a2cbpG4Jn1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.3.2", + "@inquirer/type": "^3.0.10" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/number": { + "version": "3.0.23", + "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-3.0.23.tgz", + "integrity": "sha512-5Smv0OK7K0KUzUfYUXDXQc9jrf8OHo4ktlEayFlelCjwMXz0299Y8OrI+lj7i4gCBY15UObk76q0QtxjzFcFcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.3.2", + "@inquirer/type": "^3.0.10" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/password": { + "version": "4.0.23", + "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-4.0.23.tgz", + "integrity": "sha512-zREJHjhT5vJBMZX/IUbyI9zVtVfOLiTO66MrF/3GFZYZ7T4YILW5MSkEYHceSii/KtRk+4i3RE7E1CUXA2jHcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^1.0.2", + "@inquirer/core": "^10.3.2", + "@inquirer/type": "^3.0.10" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/prompts": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-7.10.1.tgz", + "integrity": "sha512-Dx/y9bCQcXLI5ooQ5KyvA4FTgeo2jYj/7plWfV5Ak5wDPKQZgudKez2ixyfz7tKXzcJciTxqLeK7R9HItwiByg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/checkbox": "^4.3.2", + "@inquirer/confirm": "^5.1.21", + "@inquirer/editor": "^4.2.23", + "@inquirer/expand": "^4.0.23", + "@inquirer/input": "^4.3.1", + "@inquirer/number": "^3.0.23", + "@inquirer/password": "^4.0.23", + "@inquirer/rawlist": "^4.1.11", + "@inquirer/search": "^3.2.2", + "@inquirer/select": "^4.4.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/rawlist": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-4.1.11.tgz", + "integrity": "sha512-+LLQB8XGr3I5LZN/GuAHo+GpDJegQwuPARLChlMICNdwW7OwV2izlCSCxN6cqpL0sMXmbKbFcItJgdQq5EBXTw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.3.2", + "@inquirer/type": "^3.0.10", + "yoctocolors-cjs": "^2.1.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/search": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/@inquirer/search/-/search-3.2.2.tgz", + "integrity": "sha512-p2bvRfENXCZdWF/U2BXvnSI9h+tuA8iNqtUKb9UWbmLYCRQxd8WkvwWvYn+3NgYaNwdUkHytJMGG4MMLucI1kA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.3.2", + "@inquirer/figures": "^1.0.15", + "@inquirer/type": "^3.0.10", + "yoctocolors-cjs": "^2.1.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/select": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-4.4.2.tgz", + "integrity": "sha512-l4xMuJo55MAe+N7Qr4rX90vypFwCajSakx59qe/tMaC1aEHWLyw68wF4o0A4SLAY4E0nd+Vt+EyskeDIqu1M6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^1.0.2", + "@inquirer/core": "^10.3.2", + "@inquirer/figures": "^1.0.15", + "@inquirer/type": "^3.0.10", + "yoctocolors-cjs": "^2.1.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/type": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-3.0.10.tgz", + "integrity": "sha512-BvziSRxfz5Ov8ch0z/n3oijRSEcEsHnhggm4xFZe93DHcUCTlutlq9Ox4SVENAfcRD22UQq7T/atg9Wr3k09eA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/fs-minipass": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", + "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.4" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", + "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz", + "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@jsonjoy.com/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/buffers": { + "version": "17.67.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/buffers/-/buffers-17.67.0.tgz", + "integrity": "sha512-tfExRpYxBvi32vPs9ZHaTjSP4fHAfzSmcahOfNxtvGHcyJel+aibkPlGeBB+7AoC6hL7lXIE++8okecBxx7lcw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/codegen": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/codegen/-/codegen-1.0.0.tgz", + "integrity": "sha512-E8Oy+08cmCf0EK/NMxpaJZmOxPqM+6iSe2S4nlSBrPZOORoDJILxtbSUEDKQyTamm/BVAhIGllOBNU79/dwf0g==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-core": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-core/-/fs-core-4.57.1.tgz", + "integrity": "sha512-YrEi/ZPmgc+GfdO0esBF04qv8boK9Dg9WpRQw/+vM8Qt3nnVIJWIa8HwZ/LXVZ0DB11XUROM8El/7yYTJX+WtA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/fs-node-builtins": "4.57.1", + "@jsonjoy.com/fs-node-utils": "4.57.1", + "thingies": "^2.5.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-fsa": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-fsa/-/fs-fsa-4.57.1.tgz", + "integrity": "sha512-ooEPvSW/HQDivPDPZMibHGKZf/QS4WRir1czGZmXmp3MsQqLECZEpN0JobrD8iV9BzsuwdIv+PxtWX9WpPLsIA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/fs-core": "4.57.1", + "@jsonjoy.com/fs-node-builtins": "4.57.1", + "@jsonjoy.com/fs-node-utils": "4.57.1", + "thingies": "^2.5.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-node": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node/-/fs-node-4.57.1.tgz", + "integrity": "sha512-3YaKhP8gXEKN+2O49GLNfNb5l2gbnCFHyAaybbA2JkkbQP3dpdef7WcUaHAulg/c5Dg4VncHsA3NWAUSZMR5KQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/fs-core": "4.57.1", + "@jsonjoy.com/fs-node-builtins": "4.57.1", + "@jsonjoy.com/fs-node-utils": "4.57.1", + "@jsonjoy.com/fs-print": "4.57.1", + "@jsonjoy.com/fs-snapshot": "4.57.1", + "glob-to-regex.js": "^1.0.0", + "thingies": "^2.5.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-node-builtins": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-builtins/-/fs-node-builtins-4.57.1.tgz", + "integrity": "sha512-XHkFKQ5GSH3uxm8c3ZYXVrexGdscpWKIcMWKFQpMpMJc8gA3AwOMBJXJlgpdJqmrhPyQXxaY9nbkNeYpacC0Og==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-node-to-fsa": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-to-fsa/-/fs-node-to-fsa-4.57.1.tgz", + "integrity": "sha512-pqGHyWWzNck4jRfaGV39hkqpY5QjRUQ/nRbNT7FYbBa0xf4bDG+TE1Gt2KWZrSkrkZZDE3qZUjYMbjwSliX6pg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/fs-fsa": "4.57.1", + "@jsonjoy.com/fs-node-builtins": "4.57.1", + "@jsonjoy.com/fs-node-utils": "4.57.1" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-node-utils": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-utils/-/fs-node-utils-4.57.1.tgz", + "integrity": "sha512-vp+7ZzIB8v43G+GLXTS4oDUSQmhAsRz532QmmWBbdYA20s465JvwhkSFvX9cVTqRRAQg+vZ7zWDaIEh0lFe2gw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/fs-node-builtins": "4.57.1" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-print": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-print/-/fs-print-4.57.1.tgz", + "integrity": "sha512-Ynct7ZJmfk6qoXDOKfpovNA36ITUx8rChLmRQtW08J73VOiuNsU8PB6d/Xs7fxJC2ohWR3a5AqyjmLojfrw5yw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/fs-node-utils": "4.57.1", + "tree-dump": "^1.1.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-snapshot": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-snapshot/-/fs-snapshot-4.57.1.tgz", + "integrity": "sha512-/oG8xBNFMbDXTq9J7vepSA1kerS5vpgd3p5QZSPd+nX59uwodGJftI51gDYyHRpP57P3WCQf7LHtBYPqwUg2Bg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/buffers": "^17.65.0", + "@jsonjoy.com/fs-node-utils": "4.57.1", + "@jsonjoy.com/json-pack": "^17.65.0", + "@jsonjoy.com/util": "^17.65.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/base64": { + "version": "17.67.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/base64/-/base64-17.67.0.tgz", + "integrity": "sha512-5SEsJGsm15aP8TQGkDfJvz9axgPwAEm98S5DxOuYe8e1EbfajcDmgeXXzccEjh+mLnjqEKrkBdjHWS5vFNwDdw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/codegen": { + "version": "17.67.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/codegen/-/codegen-17.67.0.tgz", + "integrity": "sha512-idnkUplROpdBOV0HMcwhsCUS5TRUi9poagdGs70A6S4ux9+/aPuKbh8+UYRTLYQHtXvAdNfQWXDqZEx5k4Dj2Q==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/json-pack": { + "version": "17.67.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-17.67.0.tgz", + "integrity": "sha512-t0ejURcGaZsn1ClbJ/3kFqSOjlryd92eQY465IYrezsXmPcfHPE/av4twRSxf6WE+TkZgLY+71vCZbiIiFKA/w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/base64": "17.67.0", + "@jsonjoy.com/buffers": "17.67.0", + "@jsonjoy.com/codegen": "17.67.0", + "@jsonjoy.com/json-pointer": "17.67.0", + "@jsonjoy.com/util": "17.67.0", + "hyperdyperid": "^1.2.0", + "thingies": "^2.5.0", + "tree-dump": "^1.1.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/json-pointer": { + "version": "17.67.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pointer/-/json-pointer-17.67.0.tgz", + "integrity": "sha512-+iqOFInH+QZGmSuaybBUNdh7yvNrXvqR+h3wjXm0N/3JK1EyyFAeGJvqnmQL61d1ARLlk/wJdFKSL+LHJ1eaUA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/util": "17.67.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/util": { + "version": "17.67.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-17.67.0.tgz", + "integrity": "sha512-6+8xBaz1rLSohlGh68D1pdw3AwDi9xydm8QNlAFkvnavCJYSze+pxoW2VKP8p308jtlMRLs5NTHfPlZLd4w7ew==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/buffers": "17.67.0", + "@jsonjoy.com/codegen": "17.67.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/json-pack": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-1.21.0.tgz", + "integrity": "sha512-+AKG+R2cfZMShzrF2uQw34v3zbeDYUqnQ+jg7ORic3BGtfw9p/+N6RJbq/kkV8JmYZaINknaEQ2m0/f693ZPpg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/base64": "^1.1.2", + "@jsonjoy.com/buffers": "^1.2.0", + "@jsonjoy.com/codegen": "^1.0.0", + "@jsonjoy.com/json-pointer": "^1.0.2", + "@jsonjoy.com/util": "^1.9.0", + "hyperdyperid": "^1.2.0", + "thingies": "^2.5.0", + "tree-dump": "^1.1.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/json-pack/node_modules/@jsonjoy.com/buffers": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/buffers/-/buffers-1.2.1.tgz", + "integrity": "sha512-12cdlDwX4RUM3QxmUbVJWqZ/mrK6dFQH4Zxq6+r1YXKXYBNgZXndx2qbCJwh3+WWkCSn67IjnlG3XYTvmvYtgA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/json-pointer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pointer/-/json-pointer-1.0.2.tgz", + "integrity": "sha512-Fsn6wM2zlDzY1U+v4Nc8bo3bVqgfNTGcn6dMgs6FjrEnt4ZCe60o6ByKRjOGlI2gow0aE/Q41QOigdTqkyK5fg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/codegen": "^1.0.0", + "@jsonjoy.com/util": "^1.9.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/util": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-1.9.0.tgz", + "integrity": "sha512-pLuQo+VPRnN8hfPqUTLTHk126wuYdXVxE6aDmjSeV4NCAgyxWbiOIeNJVtID3h1Vzpoi9m4jXezf73I6LgabgQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/buffers": "^1.0.0", + "@jsonjoy.com/codegen": "^1.0.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/util/node_modules/@jsonjoy.com/buffers": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/buffers/-/buffers-1.2.1.tgz", + "integrity": "sha512-12cdlDwX4RUM3QxmUbVJWqZ/mrK6dFQH4Zxq6+r1YXKXYBNgZXndx2qbCJwh3+WWkCSn67IjnlG3XYTvmvYtgA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@kurkle/color": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/@kurkle/color/-/color-0.3.4.tgz", + "integrity": "sha512-M5UknZPHRu3DEDWoipU6sE8PdkZ6Z/S+v4dD+Ke8IaNlpdSQah50lz1KtcFBa2vsdOnwbbnxJwVM4wty6udA5w==", + "license": "MIT" + }, + "node_modules/@leichtgewicht/ip-codec": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz", + "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@listr2/prompt-adapter-inquirer": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@listr2/prompt-adapter-inquirer/-/prompt-adapter-inquirer-3.0.5.tgz", + "integrity": "sha512-WELs+hj6xcilkloBXYf9XXK8tYEnKsgLj01Xl5ONUJpKjmT5hGVUzNUS5tooUxs7pGMrw+jFD/41WpqW4V3LDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/type": "^3.0.8" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "@inquirer/prompts": ">= 3 < 8", + "listr2": "9.0.5" + } + }, + "node_modules/@lmdb/lmdb-darwin-arm64": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-arm64/-/lmdb-darwin-arm64-3.5.1.tgz", + "integrity": "sha512-tpfN4kKrrMpQ+If1l8bhmoNkECJi0iOu6AEdrTJvWVC+32sLxTARX5Rsu579mPImRP9YFWfWgeRQ5oav7zApQQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@lmdb/lmdb-darwin-x64": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-x64/-/lmdb-darwin-x64-3.5.1.tgz", + "integrity": "sha512-+a2tTfc3rmWhLAolFUWRgJtpSuu+Fw/yjn4rF406NMxhfjbMuiOUTDRvRlMFV+DzyjkwnokisskHbCWkS3Ly5w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@lmdb/lmdb-linux-arm": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm/-/lmdb-linux-arm-3.5.1.tgz", + "integrity": "sha512-0EgcE6reYr8InjD7V37EgXcYrloqpxVPINy3ig1MwDSbl6LF/vXTYRH9OE1Ti1D8YZnB35ZH9aTcdfSb5lql2A==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@lmdb/lmdb-linux-arm64": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm64/-/lmdb-linux-arm64-3.5.1.tgz", + "integrity": "sha512-aoERa5B6ywXdyFeYGQ1gbQpkMkDbEo45qVoXE5QpIRavqjnyPwjOulMkmkypkmsbJ5z4Wi0TBztON8agCTG0Vg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@lmdb/lmdb-linux-x64": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-x64/-/lmdb-linux-x64-3.5.1.tgz", + "integrity": "sha512-SqNDY1+vpji7bh0sFH5wlWyFTOzjbDOl0/kB5RLLYDAFyd/uw3n7wyrmas3rYPpAW7z18lMOi1yKlTPv967E3g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@lmdb/lmdb-win32-arm64": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-win32-arm64/-/lmdb-win32-arm64-3.5.1.tgz", + "integrity": "sha512-50v0O1Lt37cwrmR9vWZK5hRW0Aw+KEmxJJ75fge/zIYdvNKB/0bSMSVR5Uc2OV9JhosIUyklOmrEvavwNJ8D6w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@lmdb/lmdb-win32-x64": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-win32-x64/-/lmdb-win32-x64-3.5.1.tgz", + "integrity": "sha512-qwosvPyl+zpUlp3gRb7UcJ3H8S28XHCzkv0Y0EgQToXjQP91ZD67EHSCDmaLjtKhe+GVIW5om1KUpzVLA0l6pg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@modelcontextprotocol/sdk": { + "version": "1.26.0", + "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.26.0.tgz", + "integrity": "sha512-Y5RmPncpiDtTXDbLKswIJzTqu2hyBKxTNsgKqKclDbhIgg1wgtf1fRuvxgTnRfcnxtvvgbIEcqUOzZrJ6iSReg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@hono/node-server": "^1.19.9", + "ajv": "^8.17.1", + "ajv-formats": "^3.0.1", + "content-type": "^1.0.5", + "cors": "^2.8.5", + "cross-spawn": "^7.0.5", + "eventsource": "^3.0.2", + "eventsource-parser": "^3.0.0", + "express": "^5.2.1", + "express-rate-limit": "^8.2.1", + "hono": "^4.11.4", + "jose": "^6.1.3", + "json-schema-typed": "^8.0.2", + "pkce-challenge": "^5.0.0", + "raw-body": "^3.0.0", + "zod": "^3.25 || ^4.0", + "zod-to-json-schema": "^3.25.1" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@cfworker/json-schema": "^4.1.1", + "zod": "^3.25 || ^4.0" + }, + "peerDependenciesMeta": { + "@cfworker/json-schema": { + "optional": true + }, + "zod": { + "optional": false + } + } + }, + "node_modules/@msgpackr-extract/msgpackr-extract-darwin-arm64": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-arm64/-/msgpackr-extract-darwin-arm64-3.0.3.tgz", + "integrity": "sha512-QZHtlVgbAdy2zAqNA9Gu1UpIuI8Xvsd1v8ic6B2pZmeFnFcMWiPLfWXh7TVw4eGEZ/C9TH281KwhVoeQUKbyjw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-darwin-x64": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-x64/-/msgpackr-extract-darwin-x64-3.0.3.tgz", + "integrity": "sha512-mdzd3AVzYKuUmiWOQ8GNhl64/IoFGol569zNRdkLReh6LRLHOXxU4U8eq0JwaD8iFHdVGqSy4IjFL4reoWCDFw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-linux-arm": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm/-/msgpackr-extract-linux-arm-3.0.3.tgz", + "integrity": "sha512-fg0uy/dG/nZEXfYilKoRe7yALaNmHoYeIoJuJ7KJ+YyU2bvY8vPv27f7UKhGRpY6euFYqEVhxCFZgAUNQBM3nw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-linux-arm64": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm64/-/msgpackr-extract-linux-arm64-3.0.3.tgz", + "integrity": "sha512-YxQL+ax0XqBJDZiKimS2XQaf+2wDGVa1enVRGzEvLLVFeqa5kx2bWbtcSXgsxjQB7nRqqIGFIcLteF/sHeVtQg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-linux-x64": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-x64/-/msgpackr-extract-linux-x64-3.0.3.tgz", + "integrity": "sha512-cvwNfbP07pKUfq1uH+S6KJ7dT9K8WOE4ZiAcsrSes+UY55E/0jLYc+vq+DO7jlmqRb5zAggExKm0H7O/CBaesg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-win32-x64": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-win32-x64/-/msgpackr-extract-win32-x64-3.0.3.tgz", + "integrity": "sha512-x0fWaQtYp4E6sktbsdAqnehxDgEc/VwM7uLsRCYWaiGu0ykYdZPiS8zCWdnjHwyiumousxfBm4SO31eXqwEZhQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@napi-rs/nice": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice/-/nice-1.1.1.tgz", + "integrity": "sha512-xJIPs+bYuc9ASBl+cvGsKbGrJmS6fAKaSZCnT0lhahT5rhA2VVy9/EcIgd2JhtEuFOJNx7UHNn/qiTPTY4nrQw==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + }, + "optionalDependencies": { + "@napi-rs/nice-android-arm-eabi": "1.1.1", + "@napi-rs/nice-android-arm64": "1.1.1", + "@napi-rs/nice-darwin-arm64": "1.1.1", + "@napi-rs/nice-darwin-x64": "1.1.1", + "@napi-rs/nice-freebsd-x64": "1.1.1", + "@napi-rs/nice-linux-arm-gnueabihf": "1.1.1", + "@napi-rs/nice-linux-arm64-gnu": "1.1.1", + "@napi-rs/nice-linux-arm64-musl": "1.1.1", + "@napi-rs/nice-linux-ppc64-gnu": "1.1.1", + "@napi-rs/nice-linux-riscv64-gnu": "1.1.1", + "@napi-rs/nice-linux-s390x-gnu": "1.1.1", + "@napi-rs/nice-linux-x64-gnu": "1.1.1", + "@napi-rs/nice-linux-x64-musl": "1.1.1", + "@napi-rs/nice-openharmony-arm64": "1.1.1", + "@napi-rs/nice-win32-arm64-msvc": "1.1.1", + "@napi-rs/nice-win32-ia32-msvc": "1.1.1", + "@napi-rs/nice-win32-x64-msvc": "1.1.1" + } + }, + "node_modules/@napi-rs/nice-android-arm-eabi": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-android-arm-eabi/-/nice-android-arm-eabi-1.1.1.tgz", + "integrity": "sha512-kjirL3N6TnRPv5iuHw36wnucNqXAO46dzK9oPb0wj076R5Xm8PfUVA9nAFB5ZNMmfJQJVKACAPd/Z2KYMppthw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-android-arm64": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-android-arm64/-/nice-android-arm64-1.1.1.tgz", + "integrity": "sha512-blG0i7dXgbInN5urONoUCNf+DUEAavRffrO7fZSeoRMJc5qD+BJeNcpr54msPF6qfDD6kzs9AQJogZvT2KD5nw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-darwin-arm64": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-darwin-arm64/-/nice-darwin-arm64-1.1.1.tgz", + "integrity": "sha512-s/E7w45NaLqTGuOjC2p96pct4jRfo61xb9bU1unM/MJ/RFkKlJyJDx7OJI/O0ll/hrfpqKopuAFDV8yo0hfT7A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-darwin-x64": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-darwin-x64/-/nice-darwin-x64-1.1.1.tgz", + "integrity": "sha512-dGoEBnVpsdcC+oHHmW1LRK5eiyzLwdgNQq3BmZIav+9/5WTZwBYX7r5ZkQC07Nxd3KHOCkgbHSh4wPkH1N1LiQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-freebsd-x64": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-freebsd-x64/-/nice-freebsd-x64-1.1.1.tgz", + "integrity": "sha512-kHv4kEHAylMYmlNwcQcDtXjklYp4FCf0b05E+0h6nDHsZ+F0bDe04U/tXNOqrx5CmIAth4vwfkjjUmp4c4JktQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-arm-gnueabihf": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-arm-gnueabihf/-/nice-linux-arm-gnueabihf-1.1.1.tgz", + "integrity": "sha512-E1t7K0efyKXZDoZg1LzCOLxgolxV58HCkaEkEvIYQx12ht2pa8hoBo+4OB3qh7e+QiBlp1SRf+voWUZFxyhyqg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-arm64-gnu": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-arm64-gnu/-/nice-linux-arm64-gnu-1.1.1.tgz", + "integrity": "sha512-CIKLA12DTIZlmTaaKhQP88R3Xao+gyJxNWEn04wZwC2wmRapNnxCUZkVwggInMJvtVElA+D4ZzOU5sX4jV+SmQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-arm64-musl": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-arm64-musl/-/nice-linux-arm64-musl-1.1.1.tgz", + "integrity": "sha512-+2Rzdb3nTIYZ0YJF43qf2twhqOCkiSrHx2Pg6DJaCPYhhaxbLcdlV8hCRMHghQ+EtZQWGNcS2xF4KxBhSGeutg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-ppc64-gnu": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-ppc64-gnu/-/nice-linux-ppc64-gnu-1.1.1.tgz", + "integrity": "sha512-4FS8oc0GeHpwvv4tKciKkw3Y4jKsL7FRhaOeiPei0X9T4Jd619wHNe4xCLmN2EMgZoeGg+Q7GY7BsvwKpL22Tg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-riscv64-gnu": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-riscv64-gnu/-/nice-linux-riscv64-gnu-1.1.1.tgz", + "integrity": "sha512-HU0nw9uD4FO/oGCCk409tCi5IzIZpH2agE6nN4fqpwVlCn5BOq0MS1dXGjXaG17JaAvrlpV5ZeyZwSon10XOXw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-s390x-gnu": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-s390x-gnu/-/nice-linux-s390x-gnu-1.1.1.tgz", + "integrity": "sha512-2YqKJWWl24EwrX0DzCQgPLKQBxYDdBxOHot1KWEq7aY2uYeX+Uvtv4I8xFVVygJDgf6/92h9N3Y43WPx8+PAgQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-x64-gnu": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-x64-gnu/-/nice-linux-x64-gnu-1.1.1.tgz", + "integrity": "sha512-/gaNz3R92t+dcrfCw/96pDopcmec7oCcAQ3l/M+Zxr82KT4DljD37CpgrnXV+pJC263JkW572pdbP3hP+KjcIg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-x64-musl": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-x64-musl/-/nice-linux-x64-musl-1.1.1.tgz", + "integrity": "sha512-xScCGnyj/oppsNPMnevsBe3pvNaoK7FGvMjT35riz9YdhB2WtTG47ZlbxtOLpjeO9SqqQ2J2igCmz6IJOD5JYw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-openharmony-arm64": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-openharmony-arm64/-/nice-openharmony-arm64-1.1.1.tgz", + "integrity": "sha512-6uJPRVwVCLDeoOaNyeiW0gp2kFIM4r7PL2MczdZQHkFi9gVlgm+Vn+V6nTWRcu856mJ2WjYJiumEajfSm7arPQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-win32-arm64-msvc": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-win32-arm64-msvc/-/nice-win32-arm64-msvc-1.1.1.tgz", + "integrity": "sha512-uoTb4eAvM5B2aj/z8j+Nv8OttPf2m+HVx3UjA5jcFxASvNhQriyCQF1OB1lHL43ZhW+VwZlgvjmP5qF3+59atA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-win32-ia32-msvc": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-win32-ia32-msvc/-/nice-win32-ia32-msvc-1.1.1.tgz", + "integrity": "sha512-CNQqlQT9MwuCsg1Vd/oKXiuH+TcsSPJmlAFc5frFyX/KkOh0UpBLEj7aoY656d5UKZQMQFP7vJNa1DNUNORvug==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-win32-x64-msvc": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-win32-x64-msvc/-/nice-win32-x64-msvc-1.1.1.tgz", + "integrity": "sha512-vB+4G/jBQCAh0jelMTY3+kgFy00Hlx2f2/1zjMoH821IbplbWZOkLiTYXQkygNTzQJTq5cvwBDgn2ppHD+bglQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/wasm-runtime": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.1.tgz", + "integrity": "sha512-p64ah1M1ld8xjWv3qbvFwHiFVWrq1yFvV4f7w+mzaqiR4IlSgkqhcRdHwsGgomwzBH51sRY4NEowLxnaBjcW/A==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.7.1", + "@emnapi/runtime": "^1.7.1", + "@tybys/wasm-util": "^0.10.1" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + } + }, + "node_modules/@ngtools/webpack": { + "version": "21.2.7", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-21.2.7.tgz", + "integrity": "sha512-Z4gjCaJbO16VUO8I2QjRNT87uRYxjTKSSImDhzgVgLpV2/stlv/akbLU8dJYa7pK7eIYb/tkNRxGn/AtCiViUQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "@angular/compiler-cli": "^21.0.0", + "typescript": ">=5.9 <6.0", + "webpack": "^5.54.0" + } + }, + "node_modules/@npmcli/agent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-4.0.0.tgz", + "integrity": "sha512-kAQTcEN9E8ERLVg5AsGwLNoFb+oEG6engbqAU2P43gD4JEIkNGMHdVQ096FsOAAYpZPB0RSt0zgInKIAS1l5QA==", + "dev": true, + "license": "ISC", + "dependencies": { + "agent-base": "^7.1.0", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.1", + "lru-cache": "^11.2.1", + "socks-proxy-agent": "^8.0.3" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/agent/node_modules/lru-cache": { + "version": "11.2.7", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.7.tgz", + "integrity": "sha512-aY/R+aEsRelme17KGQa/1ZSIpLpNYYrhcrepKTZgE+W3WM16YMCaPwOHLHsmopZHELU0Ojin1lPVxKR0MihncA==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/@npmcli/fs": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-5.0.0.tgz", + "integrity": "sha512-7OsC1gNORBEawOa5+j2pXN9vsicaIOH5cPXxoR6fJOmH6/EXpJB2CajXOu1fPRFun2m1lktEFX11+P89hqO/og==", + "dev": true, + "license": "ISC", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/git": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-7.0.2.tgz", + "integrity": "sha512-oeolHDjExNAJAnlYP2qzNjMX/Xi9bmu78C9dIGr4xjobrSKbuMYCph8lTzn4vnW3NjIqVmw/f8BCfouqyJXlRg==", + "dev": true, + "license": "ISC", + "dependencies": { + "@gar/promise-retry": "^1.0.0", + "@npmcli/promise-spawn": "^9.0.0", + "ini": "^6.0.0", + "lru-cache": "^11.2.1", + "npm-pick-manifest": "^11.0.1", + "proc-log": "^6.0.0", + "semver": "^7.3.5", + "which": "^6.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/git/node_modules/isexe": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-4.0.0.tgz", + "integrity": "sha512-FFUtZMpoZ8RqHS3XeXEmHWLA4thH+ZxCv2lOiPIn1Xc7CxrqhWzNSDzD+/chS/zbYezmiwWLdQC09JdQKmthOw==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=20" + } + }, + "node_modules/@npmcli/git/node_modules/lru-cache": { + "version": "11.2.7", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.7.tgz", + "integrity": "sha512-aY/R+aEsRelme17KGQa/1ZSIpLpNYYrhcrepKTZgE+W3WM16YMCaPwOHLHsmopZHELU0Ojin1lPVxKR0MihncA==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/@npmcli/git/node_modules/which": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/which/-/which-6.0.1.tgz", + "integrity": "sha512-oGLe46MIrCRqX7ytPUf66EAYvdeMIZYn3WaocqqKZAxrBpkqHfL/qvTyJ/bTk5+AqHCjXmrv3CEWgy368zhRUg==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^4.0.0" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/installed-package-contents": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-4.0.0.tgz", + "integrity": "sha512-yNyAdkBxB72gtZ4GrwXCM0ZUedo9nIbOMKfGjt6Cu6DXf0p8y1PViZAKDC8q8kv/fufx0WTjRBdSlyrvnP7hmA==", + "dev": true, + "license": "ISC", + "dependencies": { + "npm-bundled": "^5.0.0", + "npm-normalize-package-bin": "^5.0.0" + }, + "bin": { + "installed-package-contents": "bin/index.js" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/node-gyp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-5.0.0.tgz", + "integrity": "sha512-uuG5HZFXLfyFKqg8QypsmgLQW7smiRjVc45bqD/ofZZcR/uxEjgQU8qDPv0s9TEeMUiAAU/GC5bR6++UdTirIQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/package-json": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-7.0.5.tgz", + "integrity": "sha512-iVuTlG3ORq2iaVa1IWUxAO/jIp77tUKBhoMjuzYW2kL4MLN1bi/ofqkZ7D7OOwh8coAx1/S2ge0rMdGv8sLSOQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/git": "^7.0.0", + "glob": "^13.0.0", + "hosted-git-info": "^9.0.0", + "json-parse-even-better-errors": "^5.0.0", + "proc-log": "^6.0.0", + "semver": "^7.5.3", + "spdx-expression-parse": "^4.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/promise-spawn": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-9.0.1.tgz", + "integrity": "sha512-OLUaoqBuyxeTqUvjA3FZFiXUfYC1alp3Sa99gW3EUDz3tZ3CbXDdcZ7qWKBzicrJleIgucoWamWH1saAmH/l2Q==", + "dev": true, + "license": "ISC", + "dependencies": { + "which": "^6.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/promise-spawn/node_modules/isexe": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-4.0.0.tgz", + "integrity": "sha512-FFUtZMpoZ8RqHS3XeXEmHWLA4thH+ZxCv2lOiPIn1Xc7CxrqhWzNSDzD+/chS/zbYezmiwWLdQC09JdQKmthOw==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=20" + } + }, + "node_modules/@npmcli/promise-spawn/node_modules/which": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/which/-/which-6.0.1.tgz", + "integrity": "sha512-oGLe46MIrCRqX7ytPUf66EAYvdeMIZYn3WaocqqKZAxrBpkqHfL/qvTyJ/bTk5+AqHCjXmrv3CEWgy368zhRUg==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^4.0.0" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/redact": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/redact/-/redact-4.0.0.tgz", + "integrity": "sha512-gOBg5YHMfZy+TfHArfVogwgfBeQnKbbGo3pSUyK/gSI0AVu+pEiDVcKlQb0D8Mg1LNRZILZ6XG8I5dJ4KuAd9Q==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/run-script": { + "version": "10.0.4", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-10.0.4.tgz", + "integrity": "sha512-mGUWr1uMnf0le2TwfOZY4SFxZGXGfm4Jtay/nwAa2FLNAKXUoUwaGwBMNH36UHPtinWfTSJ3nqFQr0091CxVGg==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/node-gyp": "^5.0.0", + "@npmcli/package-json": "^7.0.0", + "@npmcli/promise-spawn": "^9.0.0", + "node-gyp": "^12.1.0", + "proc-log": "^6.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@oxc-project/types": { + "version": "0.113.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.113.0.tgz", + "integrity": "sha512-Tp3XmgxwNQ9pEN9vxgJBAqdRamHibi76iowQ38O2I4PMpcvNRQNVsU2n1x1nv9yh0XoTrGFzf7cZSGxmixxrhA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/Boshen" + } + }, + "node_modules/@parcel/watcher": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.6.tgz", + "integrity": "sha512-tmmZ3lQxAe/k/+rNnXQRawJ4NjxO2hqiOLTHvWchtGZULp4RyFeh6aU4XdOYBFe2KE1oShQTv4AblOs2iOrNnQ==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "dependencies": { + "detect-libc": "^2.0.3", + "is-glob": "^4.0.3", + "node-addon-api": "^7.0.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "@parcel/watcher-android-arm64": "2.5.6", + "@parcel/watcher-darwin-arm64": "2.5.6", + "@parcel/watcher-darwin-x64": "2.5.6", + "@parcel/watcher-freebsd-x64": "2.5.6", + "@parcel/watcher-linux-arm-glibc": "2.5.6", + "@parcel/watcher-linux-arm-musl": "2.5.6", + "@parcel/watcher-linux-arm64-glibc": "2.5.6", + "@parcel/watcher-linux-arm64-musl": "2.5.6", + "@parcel/watcher-linux-x64-glibc": "2.5.6", + "@parcel/watcher-linux-x64-musl": "2.5.6", + "@parcel/watcher-win32-arm64": "2.5.6", + "@parcel/watcher-win32-ia32": "2.5.6", + "@parcel/watcher-win32-x64": "2.5.6" + } + }, + "node_modules/@parcel/watcher-android-arm64": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.6.tgz", + "integrity": "sha512-YQxSS34tPF/6ZG7r/Ih9xy+kP/WwediEUsqmtf0cuCV5TPPKw/PQHRhueUo6JdeFJaqV3pyjm0GdYjZotbRt/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-arm64": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.6.tgz", + "integrity": "sha512-Z2ZdrnwyXvvvdtRHLmM4knydIdU9adO3D4n/0cVipF3rRiwP+3/sfzpAwA/qKFL6i1ModaabkU7IbpeMBgiVEA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-x64": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.6.tgz", + "integrity": "sha512-HgvOf3W9dhithcwOWX9uDZyn1lW9R+7tPZ4sug+NGrGIo4Rk1hAXLEbcH1TQSqxts0NYXXlOWqVpvS1SFS4fRg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-freebsd-x64": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.6.tgz", + "integrity": "sha512-vJVi8yd/qzJxEKHkeemh7w3YAn6RJCtYlE4HPMoVnCpIXEzSrxErBW5SJBgKLbXU3WdIpkjBTeUNtyBVn8TRng==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-glibc": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.6.tgz", + "integrity": "sha512-9JiYfB6h6BgV50CCfasfLf/uvOcJskMSwcdH1PHH9rvS1IrNy8zad6IUVPVUfmXr+u+Km9IxcfMLzgdOudz9EQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-musl": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.6.tgz", + "integrity": "sha512-Ve3gUCG57nuUUSyjBq/MAM0CzArtuIOxsBdQ+ftz6ho8n7s1i9E1Nmk/xmP323r2YL0SONs1EuwqBp2u1k5fxg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-glibc": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.6.tgz", + "integrity": "sha512-f2g/DT3NhGPdBmMWYoxixqYr3v/UXcmLOYy16Bx0TM20Tchduwr4EaCbmxh1321TABqPGDpS8D/ggOTaljijOA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-musl": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.6.tgz", + "integrity": "sha512-qb6naMDGlbCwdhLj6hgoVKJl2odL34z2sqkC7Z6kzir8b5W65WYDpLB6R06KabvZdgoHI/zxke4b3zR0wAbDTA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-glibc": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.6.tgz", + "integrity": "sha512-kbT5wvNQlx7NaGjzPFu8nVIW1rWqV780O7ZtkjuWaPUgpv2NMFpjYERVi0UYj1msZNyCzGlaCWEtzc+exjMGbQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-musl": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.6.tgz", + "integrity": "sha512-1JRFeC+h7RdXwldHzTsmdtYR/Ku8SylLgTU/reMuqdVD7CtLwf0VR1FqeprZ0eHQkO0vqsbvFLXUmYm/uNKJBg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-arm64": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.6.tgz", + "integrity": "sha512-3ukyebjc6eGlw9yRt678DxVF7rjXatWiHvTXqphZLvo7aC5NdEgFufVwjFfY51ijYEWpXbqF5jtrK275z52D4Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-ia32": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.6.tgz", + "integrity": "sha512-k35yLp1ZMwwee3Ez/pxBi5cf4AoBKYXj00CZ80jUz5h8prpiaQsiRPKQMxoLstNuqe2vR4RNPEAEcjEFzhEz/g==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-x64": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.6.tgz", + "integrity": "sha512-hbQlYcCq5dlAX9Qx+kFb0FHue6vbjlf0FrNzSKdYK2APUf7tGfGxQCk2ihEREmbR6ZMc0MVAD5RIX/41gpUzTw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher/node_modules/node-addon-api": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", + "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/@peculiar/asn1-cms": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-cms/-/asn1-cms-2.6.1.tgz", + "integrity": "sha512-vdG4fBF6Lkirkcl53q6eOdn3XYKt+kJTG59edgRZORlg/3atWWEReRCx5rYE1ZzTTX6vLK5zDMjHh7vbrcXGtw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@peculiar/asn1-schema": "^2.6.0", + "@peculiar/asn1-x509": "^2.6.1", + "@peculiar/asn1-x509-attr": "^2.6.1", + "asn1js": "^3.0.6", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/asn1-csr": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-csr/-/asn1-csr-2.6.1.tgz", + "integrity": "sha512-WRWnKfIocHyzFYQTka8O/tXCiBquAPSrRjXbOkHbO4qdmS6loffCEGs+rby6WxxGdJCuunnhS2duHURhjyio6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@peculiar/asn1-schema": "^2.6.0", + "@peculiar/asn1-x509": "^2.6.1", + "asn1js": "^3.0.6", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/asn1-ecc": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-ecc/-/asn1-ecc-2.6.1.tgz", + "integrity": "sha512-+Vqw8WFxrtDIN5ehUdvlN2m73exS2JVG0UAyfVB31gIfor3zWEAQPD+K9ydCxaj3MLen9k0JhKpu9LqviuCE1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@peculiar/asn1-schema": "^2.6.0", + "@peculiar/asn1-x509": "^2.6.1", + "asn1js": "^3.0.6", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/asn1-pfx": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-pfx/-/asn1-pfx-2.6.1.tgz", + "integrity": "sha512-nB5jVQy3MAAWvq0KY0R2JUZG8bO/bTLpnwyOzXyEh/e54ynGTatAR+csOnXkkVD9AFZ2uL8Z7EV918+qB1qDvw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@peculiar/asn1-cms": "^2.6.1", + "@peculiar/asn1-pkcs8": "^2.6.1", + "@peculiar/asn1-rsa": "^2.6.1", + "@peculiar/asn1-schema": "^2.6.0", + "asn1js": "^3.0.6", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/asn1-pkcs8": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-pkcs8/-/asn1-pkcs8-2.6.1.tgz", + "integrity": "sha512-JB5iQ9Izn5yGMw3ZG4Nw3Xn/hb/G38GYF3lf7WmJb8JZUydhVGEjK/ZlFSWhnlB7K/4oqEs8HnfFIKklhR58Tw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@peculiar/asn1-schema": "^2.6.0", + "@peculiar/asn1-x509": "^2.6.1", + "asn1js": "^3.0.6", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/asn1-pkcs9": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-pkcs9/-/asn1-pkcs9-2.6.1.tgz", + "integrity": "sha512-5EV8nZoMSxeWmcxWmmcolg22ojZRgJg+Y9MX2fnE2bGRo5KQLqV5IL9kdSQDZxlHz95tHvIq9F//bvL1OeNILw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@peculiar/asn1-cms": "^2.6.1", + "@peculiar/asn1-pfx": "^2.6.1", + "@peculiar/asn1-pkcs8": "^2.6.1", + "@peculiar/asn1-schema": "^2.6.0", + "@peculiar/asn1-x509": "^2.6.1", + "@peculiar/asn1-x509-attr": "^2.6.1", + "asn1js": "^3.0.6", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/asn1-rsa": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-rsa/-/asn1-rsa-2.6.1.tgz", + "integrity": "sha512-1nVMEh46SElUt5CB3RUTV4EG/z7iYc7EoaDY5ECwganibQPkZ/Y2eMsTKB/LeyrUJ+W/tKoD9WUqIy8vB+CEdA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@peculiar/asn1-schema": "^2.6.0", + "@peculiar/asn1-x509": "^2.6.1", + "asn1js": "^3.0.6", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/asn1-schema": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-schema/-/asn1-schema-2.6.0.tgz", + "integrity": "sha512-xNLYLBFTBKkCzEZIw842BxytQQATQv+lDTCEMZ8C196iJcJJMBUZxrhSTxLaohMyKK8QlzRNTRkUmanucnDSqg==", + "dev": true, + "license": "MIT", + "dependencies": { + "asn1js": "^3.0.6", + "pvtsutils": "^1.3.6", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/asn1-x509": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-x509/-/asn1-x509-2.6.1.tgz", + "integrity": "sha512-O9jT5F1A2+t3r7C4VT7LYGXqkGLK7Kj1xFpz7U0isPrubwU5PbDoyYtx6MiGst29yq7pXN5vZbQFKRCP+lLZlA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@peculiar/asn1-schema": "^2.6.0", + "asn1js": "^3.0.6", + "pvtsutils": "^1.3.6", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/asn1-x509-attr": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-x509-attr/-/asn1-x509-attr-2.6.1.tgz", + "integrity": "sha512-tlW6cxoHwgcQghnJwv3YS+9OO1737zgPogZ+CgWRUK4roEwIPzRH4JEiG770xe5HX2ATfCpmX60gurfWIF9dcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@peculiar/asn1-schema": "^2.6.0", + "@peculiar/asn1-x509": "^2.6.1", + "asn1js": "^3.0.6", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/x509": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/@peculiar/x509/-/x509-1.14.3.tgz", + "integrity": "sha512-C2Xj8FZ0uHWeCXXqX5B4/gVFQmtSkiuOolzAgutjTfseNOHT3pUjljDZsTSxXFGgio54bCzVFqmEOUrIVk8RDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@peculiar/asn1-cms": "^2.6.0", + "@peculiar/asn1-csr": "^2.6.0", + "@peculiar/asn1-ecc": "^2.6.0", + "@peculiar/asn1-pkcs9": "^2.6.0", + "@peculiar/asn1-rsa": "^2.6.0", + "@peculiar/asn1-schema": "^2.6.0", + "@peculiar/asn1-x509": "^2.6.0", + "pvtsutils": "^1.3.6", + "reflect-metadata": "^0.2.2", + "tslib": "^2.8.1", + "tsyringe": "^4.10.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@polka/url": { + "version": "1.0.0-next.29", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.29.tgz", + "integrity": "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rolldown/binding-android-arm64": { + "version": "1.0.0-rc.4", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.0-rc.4.tgz", + "integrity": "sha512-vRq9f4NzvbdZavhQbjkJBx7rRebDKYR9zHfO/Wg486+I7bSecdUapzCm5cyXoK+LHokTxgSq7A5baAXUZkIz0w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-arm64": { + "version": "1.0.0-rc.4", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.0-rc.4.tgz", + "integrity": "sha512-kFgEvkWLqt3YCgKB5re9RlIrx9bRsvyVUnaTakEpOPuLGzLpLapYxE9BufJNvPg8GjT6mB1alN4yN1NjzoeM8Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-x64": { + "version": "1.0.0-rc.4", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.0-rc.4.tgz", + "integrity": "sha512-JXmaOJGsL/+rsmMfutcDjxWM2fTaVgCHGoXS7nE8Z3c9NAYjGqHvXrAhMUZvMpHS/k7Mg+X7n/MVKb7NYWKKww==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-freebsd-x64": { + "version": "1.0.0-rc.4", + "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.0-rc.4.tgz", + "integrity": "sha512-ep3Catd6sPnHTM0P4hNEvIv5arnDvk01PfyJIJ+J3wVCG1eEaPo09tvFqdtcaTrkwQy0VWR24uz+cb4IsK53Qw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm-gnueabihf": { + "version": "1.0.0-rc.4", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.0-rc.4.tgz", + "integrity": "sha512-LwA5ayKIpnsgXJEwWc3h8wPiS33NMIHd9BhsV92T8VetVAbGe2qXlJwNVDGHN5cOQ22R9uYvbrQir2AB+ntT2w==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-gnu": { + "version": "1.0.0-rc.4", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.0-rc.4.tgz", + "integrity": "sha512-AC1WsGdlV1MtGay/OQ4J9T7GRadVnpYRzTcygV1hKnypbYN20Yh4t6O1Sa2qRBMqv1etulUknqXjc3CTIsBu6A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-musl": { + "version": "1.0.0-rc.4", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.0-rc.4.tgz", + "integrity": "sha512-lU+6rgXXViO61B4EudxtVMXSOfiZONR29Sys5VGSetUY7X8mg9FCKIIjcPPj8xNDeYzKl+H8F/qSKOBVFJChCQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-gnu": { + "version": "1.0.0-rc.4", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.0-rc.4.tgz", + "integrity": "sha512-DZaN1f0PGp/bSvKhtw50pPsnln4T13ycDq1FrDWRiHmWt1JeW+UtYg9touPFf8yt993p8tS2QjybpzKNTxYEwg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-musl": { + "version": "1.0.0-rc.4", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.0-rc.4.tgz", + "integrity": "sha512-RnGxwZLN7fhMMAItnD6dZ7lvy+TI7ba+2V54UF4dhaWa/p8I/ys1E73KO6HmPmgz92ZkfD8TXS1IMV8+uhbR9g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-openharmony-arm64": { + "version": "1.0.0-rc.4", + "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.0.0-rc.4.tgz", + "integrity": "sha512-6lcI79+X8klGiGd8yHuTgQRjuuJYNggmEml+RsyN596P23l/zf9FVmJ7K0KVKkFAeYEdg0iMUKyIxiV5vebDNQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-wasm32-wasi": { + "version": "1.0.0-rc.4", + "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.0-rc.4.tgz", + "integrity": "sha512-wz7ohsKCAIWy91blZ/1FlpPdqrsm1xpcEOQVveWoL6+aSPKL4VUcoYmmzuLTssyZxRpEwzuIxL/GDsvpjaBtOw==", + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@napi-rs/wasm-runtime": "^1.1.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@rolldown/binding-win32-arm64-msvc": { + "version": "1.0.0-rc.4", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.0-rc.4.tgz", + "integrity": "sha512-cfiMrfuWCIgsFmcVG0IPuO6qTRHvF7NuG3wngX1RZzc6dU8FuBFb+J3MIR5WrdTNozlumfgL4cvz+R4ozBCvsQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-win32-x64-msvc": { + "version": "1.0.0-rc.4", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.0-rc.4.tgz", + "integrity": "sha512-p6UeR9y7ht82AH57qwGuFYn69S6CZ7LLKdCKy/8T3zS9VTrJei2/CGsTUV45Da4Z9Rbhc7G4gyWQ/Ioamqn09g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.0-rc.4", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.4.tgz", + "integrity": "sha512-1BrrmTu0TWfOP1riA8uakjFc9bpIUGzVKETsOtzY39pPga8zELGDl8eu1Dx7/gjM5CAz14UknsUMpBO8L+YntQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.59.0.tgz", + "integrity": "sha512-upnNBkA6ZH2VKGcBj9Fyl9IGNPULcjXRlg0LLeaioQWueH30p6IXtJEbKAgvyv+mJaMxSm1l6xwDXYjpEMiLMg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.59.0.tgz", + "integrity": "sha512-hZ+Zxj3SySm4A/DylsDKZAeVg0mvi++0PYVceVyX7hemkw7OreKdCvW2oQ3T1FMZvCaQXqOTHb8qmBShoqk69Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.59.0.tgz", + "integrity": "sha512-W2Psnbh1J8ZJw0xKAd8zdNgF9HRLkdWwwdWqubSVk0pUuQkoHnv7rx4GiF9rT4t5DIZGAsConRE3AxCdJ4m8rg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.59.0.tgz", + "integrity": "sha512-ZW2KkwlS4lwTv7ZVsYDiARfFCnSGhzYPdiOU4IM2fDbL+QGlyAbjgSFuqNRbSthybLbIJ915UtZBtmuLrQAT/w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.59.0.tgz", + "integrity": "sha512-EsKaJ5ytAu9jI3lonzn3BgG8iRBjV4LxZexygcQbpiU0wU0ATxhNVEpXKfUa0pS05gTcSDMKpn3Sx+QB9RlTTA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.59.0.tgz", + "integrity": "sha512-d3DuZi2KzTMjImrxoHIAODUZYoUUMsuUiY4SRRcJy6NJoZ6iIqWnJu9IScV9jXysyGMVuW+KNzZvBLOcpdl3Vg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.59.0.tgz", + "integrity": "sha512-t4ONHboXi/3E0rT6OZl1pKbl2Vgxf9vJfWgmUoCEVQVxhW6Cw/c8I6hbbu7DAvgp82RKiH7TpLwxnJeKv2pbsw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.59.0.tgz", + "integrity": "sha512-CikFT7aYPA2ufMD086cVORBYGHffBo4K8MQ4uPS/ZnY54GKj36i196u8U+aDVT2LX4eSMbyHtyOh7D7Zvk2VvA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.59.0.tgz", + "integrity": "sha512-jYgUGk5aLd1nUb1CtQ8E+t5JhLc9x5WdBKew9ZgAXg7DBk0ZHErLHdXM24rfX+bKrFe+Xp5YuJo54I5HFjGDAA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.59.0.tgz", + "integrity": "sha512-peZRVEdnFWZ5Bh2KeumKG9ty7aCXzzEsHShOZEFiCQlDEepP1dpUl/SrUNXNg13UmZl+gzVDPsiCwnV1uI0RUA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.59.0.tgz", + "integrity": "sha512-gbUSW/97f7+r4gHy3Jlup8zDG190AuodsWnNiXErp9mT90iCy9NKKU0Xwx5k8VlRAIV2uU9CsMnEFg/xXaOfXg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.59.0.tgz", + "integrity": "sha512-yTRONe79E+o0FWFijasoTjtzG9EBedFXJMl888NBEDCDV9I2wGbFFfJQQe63OijbFCUZqxpHz1GzpbtSFikJ4Q==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.59.0", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.59.0.tgz", "integrity": "sha512-sw1o3tfyk12k3OEpRddF68a1unZ5VCN7zoTNtSn2KndUE+ea3m3ROOKRCZxEpmT9nsGnogpFP9x6mnLTCaoLkA==", "cpu": [ - "ppc64" + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.59.0.tgz", + "integrity": "sha512-+2kLtQ4xT3AiIxkzFVFXfsmlZiG5FXYW7ZyIIvGA7Bdeuh9Z0aN4hVyXS/G1E9bTP/vqszNIN/pUKCk/BTHsKA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.59.0.tgz", + "integrity": "sha512-NDYMpsXYJJaj+I7UdwIuHHNxXZ/b/N2hR15NyH3m2qAtb/hHPA4g4SuuvrdxetTdndfj9b1WOmy73kcPRoERUg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.59.0.tgz", + "integrity": "sha512-nLckB8WOqHIf1bhymk+oHxvM9D3tyPndZH8i8+35p/1YiVoVswPid2yLzgX7ZJP0KQvnkhM4H6QZ5m0LzbyIAg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.59.0.tgz", + "integrity": "sha512-oF87Ie3uAIvORFBpwnCvUzdeYUqi2wY6jRFWJAy1qus/udHFYIkplYRW+wo+GRUP4sKzYdmE1Y3+rY5Gc4ZO+w==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.59.0.tgz", + "integrity": "sha512-3AHmtQq/ppNuUspKAlvA8HtLybkDflkMuLK4DPo77DfthRb71V84/c4MlWJXixZz4uruIH4uaa07IqoAkG64fg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.59.0.tgz", + "integrity": "sha512-2UdiwS/9cTAx7qIUZB/fWtToJwvt0Vbo0zmnYt7ED35KPg13Q0ym1g442THLC7VyI6JfYTP4PiSOWyoMdV2/xg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.59.0.tgz", + "integrity": "sha512-M3bLRAVk6GOwFlPTIxVBSYKUaqfLrn8l0psKinkCFxl4lQvOSz8ZrKDz2gxcBwHFpci0B6rttydI4IpS4IS/jQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.59.0.tgz", + "integrity": "sha512-tt9KBJqaqp5i5HUZzoafHZX8b5Q2Fe7UjYERADll83O4fGqJ49O1FsL6LpdzVFQcpwvnyd0i+K/VSwu/o/nWlA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.59.0.tgz", + "integrity": "sha512-V5B6mG7OrGTwnxaNUzZTDTjDS7F75PO1ae6MJYdiMu60sq0CqN5CVeVsbhPxalupvTX8gXVSU9gq+Rx1/hvu6A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.59.0.tgz", + "integrity": "sha512-UKFMHPuM9R0iBegwzKF4y0C4J9u8C6MEJgFuXTBerMk7EJ92GFVFYBfOZaSGLu6COf7FxpQNqhNS4c4icUPqxA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.59.0.tgz", + "integrity": "sha512-laBkYlSS1n2L8fSo1thDNGrCTQMmxjYY5G0WFWjFFYZkKPjsMBsgJfGf4TLxXrF6RyhI60L8TMOjBMvXiTcxeA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.59.0.tgz", + "integrity": "sha512-2HRCml6OztYXyJXAvdDXPKcawukWY2GpR5/nxKp4iBgiO3wcoEGkAaqctIbZcNB6KlUQBIqt8VYkNSj2397EfA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@schematics/angular": { + "version": "21.2.2", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-21.2.2.tgz", + "integrity": "sha512-Ywa6HDtX7TRBQZTVMMnxX3Mk7yVnG8KtSFaXWrkx779+q8tqYdBwNwAqbNd4Zatr1GccKaz9xcptHJta5+DTxw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@angular-devkit/core": "21.2.2", + "@angular-devkit/schematics": "21.2.2", + "jsonc-parser": "3.3.1" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@sigstore/bundle": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-4.0.0.tgz", + "integrity": "sha512-NwCl5Y0V6Di0NexvkTqdoVfmjTaQwoLM236r89KEojGmq/jMls8S+zb7yOwAPdXvbwfKDlP+lmXgAL4vKSQT+A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/protobuf-specs": "^0.5.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@sigstore/core": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@sigstore/core/-/core-3.1.0.tgz", + "integrity": "sha512-o5cw1QYhNQ9IroioJxpzexmPjfCe7gzafd2RY3qnMpxr4ZEja+Jad/U8sgFpaue6bOaF+z7RVkyKVV44FN+N8A==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@sigstore/protobuf-specs": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.5.0.tgz", + "integrity": "sha512-MM8XIwUjN2bwvCg1QvrMtbBmpcSHrkhFSCu1D11NyPvDQ25HEc4oG5/OcQfd/Tlf/OxmKWERDj0zGE23jQaMwA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@sigstore/sign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-4.1.0.tgz", + "integrity": "sha512-Vx1RmLxLGnSUqx/o5/VsCjkuN5L7y+vxEEwawvc7u+6WtX2W4GNa7b9HEjmcRWohw/d6BpATXmvOwc78m+Swdg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/bundle": "^4.0.0", + "@sigstore/core": "^3.1.0", + "@sigstore/protobuf-specs": "^0.5.0", + "make-fetch-happen": "^15.0.3", + "proc-log": "^6.1.0", + "promise-retry": "^2.0.1" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@sigstore/tuf": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-4.0.1.tgz", + "integrity": "sha512-OPZBg8y5Vc9yZjmWCHrlWPMBqW5yd8+wFNl+thMdtcWz3vjVSoJQutF8YkrzI0SLGnkuFof4HSsWUhXrf219Lw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/protobuf-specs": "^0.5.0", + "tuf-js": "^4.1.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@sigstore/verify": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@sigstore/verify/-/verify-3.1.0.tgz", + "integrity": "sha512-mNe0Iigql08YupSOGv197YdHpPPr+EzDZmfCgMc7RPNaZTw5aLN01nBl6CHJOh3BGtnMIj83EeN4butBchc8Ag==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/bundle": "^4.0.0", + "@sigstore/core": "^3.1.0", + "@sigstore/protobuf-specs": "^0.5.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@socket.io/component-emitter": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz", + "integrity": "sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==", + "license": "MIT" + }, + "node_modules/@standard-schema/spec": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", + "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==", + "license": "MIT" + }, + "node_modules/@tailwindcss/node": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.2.1.tgz", + "integrity": "sha512-jlx6sLk4EOwO6hHe1oCGm1Q4AN/s0rSrTTPBGPM0/RQ6Uylwq17FuU8IeJJKEjtc6K6O07zsvP+gDO6MMWo7pg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/remapping": "^2.3.5", + "enhanced-resolve": "^5.19.0", + "jiti": "^2.6.1", + "lightningcss": "1.31.1", + "magic-string": "^0.30.21", + "source-map-js": "^1.2.1", + "tailwindcss": "4.2.1" + } + }, + "node_modules/@tailwindcss/oxide": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.2.1.tgz", + "integrity": "sha512-yv9jeEFWnjKCI6/T3Oq50yQEOqmpmpfzG1hcZsAOaXFQPfzWprWrlHSdGPEF3WQTi8zu8ohC9Mh9J470nT5pUw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 20" + }, + "optionalDependencies": { + "@tailwindcss/oxide-android-arm64": "4.2.1", + "@tailwindcss/oxide-darwin-arm64": "4.2.1", + "@tailwindcss/oxide-darwin-x64": "4.2.1", + "@tailwindcss/oxide-freebsd-x64": "4.2.1", + "@tailwindcss/oxide-linux-arm-gnueabihf": "4.2.1", + "@tailwindcss/oxide-linux-arm64-gnu": "4.2.1", + "@tailwindcss/oxide-linux-arm64-musl": "4.2.1", + "@tailwindcss/oxide-linux-x64-gnu": "4.2.1", + "@tailwindcss/oxide-linux-x64-musl": "4.2.1", + "@tailwindcss/oxide-wasm32-wasi": "4.2.1", + "@tailwindcss/oxide-win32-arm64-msvc": "4.2.1", + "@tailwindcss/oxide-win32-x64-msvc": "4.2.1" + } + }, + "node_modules/@tailwindcss/oxide-android-arm64": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.2.1.tgz", + "integrity": "sha512-eZ7G1Zm5EC8OOKaesIKuw77jw++QJ2lL9N+dDpdQiAB/c/B2wDh0QPFHbkBVrXnwNugvrbJFk1gK2SsVjwWReg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-darwin-arm64": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.2.1.tgz", + "integrity": "sha512-q/LHkOstoJ7pI1J0q6djesLzRvQSIfEto148ppAd+BVQK0JYjQIFSK3JgYZJa+Yzi0DDa52ZsQx2rqytBnf8Hw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-darwin-x64": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.2.1.tgz", + "integrity": "sha512-/f/ozlaXGY6QLbpvd/kFTro2l18f7dHKpB+ieXz+Cijl4Mt9AI2rTrpq7V+t04nK+j9XBQHnSMdeQRhbGyt6fw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-freebsd-x64": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.2.1.tgz", + "integrity": "sha512-5e/AkgYJT/cpbkys/OU2Ei2jdETCLlifwm7ogMC7/hksI2fC3iiq6OcXwjibcIjPung0kRtR3TxEITkqgn0TcA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.2.1.tgz", + "integrity": "sha512-Uny1EcVTTmerCKt/1ZuKTkb0x8ZaiuYucg2/kImO5A5Y/kBz41/+j0gxUZl+hTF3xkWpDmHX+TaWhOtba2Fyuw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-gnu": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.2.1.tgz", + "integrity": "sha512-CTrwomI+c7n6aSSQlsPL0roRiNMDQ/YzMD9EjcR+H4f0I1SQ8QqIuPnsVp7QgMkC1Qi8rtkekLkOFjo7OlEFRQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-musl": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.2.1.tgz", + "integrity": "sha512-WZA0CHRL/SP1TRbA5mp9htsppSEkWuQ4KsSUumYQnyl8ZdT39ntwqmz4IUHGN6p4XdSlYfJwM4rRzZLShHsGAQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-gnu": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.2.1.tgz", + "integrity": "sha512-qMFzxI2YlBOLW5PhblzuSWlWfwLHaneBE0xHzLrBgNtqN6mWfs+qYbhryGSXQjFYB1Dzf5w+LN5qbUTPhW7Y5g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-musl": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.2.1.tgz", + "integrity": "sha512-5r1X2FKnCMUPlXTWRYpHdPYUY6a1Ar/t7P24OuiEdEOmms5lyqjDRvVY1yy9Rmioh+AunQ0rWiOTPE8F9A3v5g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.2.1.tgz", + "integrity": "sha512-MGFB5cVPvshR85MTJkEvqDUnuNoysrsRxd6vnk1Lf2tbiqNlXpHYZqkqOQalydienEWOHHFyyuTSYRsLfxFJ2Q==", + "bundleDependencies": [ + "@napi-rs/wasm-runtime", + "@emnapi/core", + "@emnapi/runtime", + "@tybys/wasm-util", + "@emnapi/wasi-threads", + "tslib" + ], + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.8.1", + "@emnapi/runtime": "^1.8.1", + "@emnapi/wasi-threads": "^1.1.0", + "@napi-rs/wasm-runtime": "^1.1.1", + "@tybys/wasm-util": "^0.10.1", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.2.1.tgz", + "integrity": "sha512-YlUEHRHBGnCMh4Nj4GnqQyBtsshUPdiNroZj8VPkvTZSoHsilRCwXcVKnG9kyi0ZFAS/3u+qKHBdDc81SADTRA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-win32-x64-msvc": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.2.1.tgz", + "integrity": "sha512-rbO34G5sMWWyrN/idLeVxAZgAKWrn5LiR3/I90Q9MkA67s6T1oB0xtTe+0heoBvHSpbU9Mk7i6uwJnpo4u21XQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/postcss": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@tailwindcss/postcss/-/postcss-4.2.1.tgz", + "integrity": "sha512-OEwGIBnXnj7zJeonOh6ZG9woofIjGrd2BORfvE5p9USYKDCZoQmfqLcfNiRWoJlRWLdNPn2IgVZuWAOM4iTYMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "@tailwindcss/node": "4.2.1", + "@tailwindcss/oxide": "4.2.1", + "postcss": "^8.5.6", + "tailwindcss": "4.2.1" + } + }, + "node_modules/@tsconfig/node10": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.12.tgz", + "integrity": "sha512-UCYBaeFvM11aU2y3YPZ//O5Rhj+xKyzy7mvcIoAjASbigy8mHMryP5cK7dgjlz2hWxh1g5pLw084E0a/wlUSFQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tufjs/canonical-json": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-2.0.0.tgz", + "integrity": "sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@tufjs/models": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-4.1.0.tgz", + "integrity": "sha512-Y8cK9aggNRsqJVaKUlEYs4s7CvQ1b1ta2DVPyAimb0I2qhzjNk+A+mxvll/klL0RlfuIUei8BF7YWiua4kQqww==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tufjs/canonical-json": "2.0.0", + "minimatch": "^10.1.1" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@tybys/wasm-util": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz", + "integrity": "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@types/body-parser": { + "version": "1.19.6", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.6.tgz", + "integrity": "sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/bonjour": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz", + "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/chai": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.3.tgz", + "integrity": "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/deep-eql": "*", + "assertion-error": "^2.0.1" + } + }, + "node_modules/@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect-history-api-fallback": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz", + "integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, + "node_modules/@types/deep-eql": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz", + "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/eslint": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", + "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/express": { + "version": "4.17.25", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.25.tgz", + "integrity": "sha512-dVd04UKsfpINUnK0yBoYHDF3xu7xVH4BuDotC/xGuycx4CgbP48X/KF/586bcObxT0HENHXEU8Nqtu6NR+eKhw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "^1" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.19.8", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.8.tgz", + "integrity": "sha512-02S5fmqeoKzVZCHPZid4b8JH2eM5HzQLZWN2FohQEy/0eXTq8VXZfSN6Pcr3F6N9R/vNrj7cpgbhjie6m/1tCA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/http-errors": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.5.tgz", + "integrity": "sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/http-proxy": { + "version": "1.17.17", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.17.tgz", + "integrity": "sha512-ED6LB+Z1AVylNTu7hdzuBqOgMnvG/ld6wGCG8wFnAzKX5uyW2K3WD52v0gnLCTK/VLpXtKckgWuyScYK6cSPaw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/mime": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "25.6.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.6.0.tgz", + "integrity": "sha512-+qIYRKdNYJwY3vRCZMdJbPLJAtGjQBudzZzdzwQYkEPQd+PJGixUL5QfvCLDaULoLv+RhT3LDkwEfKaAkgSmNQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~7.19.0" + } + }, + "node_modules/@types/qs": { + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.15.0.tgz", + "integrity": "sha512-JawvT8iBVWpzTrz3EGw9BTQFg3BQNmwERdKE22vlTxawwtbyUSlMppvZYKLZzB5zgACXdXxbD3m1bXaMqP/9ow==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/range-parser": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/retry": { + "version": "0.12.2", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.2.tgz", + "integrity": "sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/send": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@types/send/-/send-1.2.1.tgz", + "integrity": "sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/serve-index": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz", + "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/express": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.10", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.10.tgz", + "integrity": "sha512-tRs1dB+g8Itk72rlSI2ZrW6vZg0YrLI81iQSTkMmOqnqCaNr/8Ek4VwWcN5vZgCYWbg/JJSGBlUaYGAOP73qBw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/http-errors": "*", + "@types/node": "*", + "@types/send": "<1" + } + }, + "node_modules/@types/serve-static/node_modules/@types/send": { + "version": "0.17.6", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.6.tgz", + "integrity": "sha512-Uqt8rPBE8SY0RK8JB1EzVOIZ32uqy8HwdxCnoCOsYrvnswqmFZ/k+9Ikidlk/ImhsdvBsloHbAlewb2IEBV/Og==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/sinonjs__fake-timers": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.1.tgz", + "integrity": "sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/sizzle": { + "version": "2.3.10", + "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.10.tgz", + "integrity": "sha512-TC0dmN0K8YcWEAEfiPi5gJP14eJe30TTGjkvek3iM/1NdHHsdCA/Td6GvNndMOo/iSnIsZ4HuuhrYPDAmbxzww==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/sockjs": { + "version": "0.3.36", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz", + "integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/tmp": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/@types/tmp/-/tmp-0.2.6.tgz", + "integrity": "sha512-chhaNf2oKHlRkDGt+tiKE2Z5aJ6qalm7Z9rlLdBwmOiAAf09YQvvoLXjWK4HWPF1xU/fqvMgfNfpVoBscA/tKA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/ws": { + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz", + "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/yauzl": { + "version": "2.10.3", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", + "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@vitejs/plugin-basic-ssl": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-basic-ssl/-/plugin-basic-ssl-2.1.4.tgz", + "integrity": "sha512-HXciTXN/sDBYWgeAD4V4s0DN0g72x5mlxQhHxtYu3Tt8BLa6MzcJZUyDVFCdtjNs3bfENVHVzOsmooTVuNgAAw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "peerDependencies": { + "vite": "^6.0.0 || ^7.0.0" + } + }, + "node_modules/@vitest/coverage-v8": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-4.1.4.tgz", + "integrity": "sha512-x7FptB5oDruxNPDNY2+S8tCh0pcq7ymCe1gTHcsp733jYjrJl8V1gMUlVysuCD9Kz46Xz9t1akkv08dPcYDs1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@bcoe/v8-coverage": "^1.0.2", + "@vitest/utils": "4.1.4", + "ast-v8-to-istanbul": "^1.0.0", + "istanbul-lib-coverage": "^3.2.2", + "istanbul-lib-report": "^3.0.1", + "istanbul-reports": "^3.2.0", + "magicast": "^0.5.2", + "obug": "^2.1.1", + "std-env": "^4.0.0-rc.1", + "tinyrainbow": "^3.1.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@vitest/browser": "4.1.4", + "vitest": "4.1.4" + }, + "peerDependenciesMeta": { + "@vitest/browser": { + "optional": true + } + } + }, + "node_modules/@vitest/expect": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.1.4.tgz", + "integrity": "sha512-iPBpra+VDuXmBFI3FMKHSFXp3Gx5HfmSCE8X67Dn+bwephCnQCaB7qWK2ldHa+8ncN8hJU8VTMcxjPpyMkUjww==", + "dev": true, + "license": "MIT", + "dependencies": { + "@standard-schema/spec": "^1.1.0", + "@types/chai": "^5.2.2", + "@vitest/spy": "4.1.4", + "@vitest/utils": "4.1.4", + "chai": "^6.2.2", + "tinyrainbow": "^3.1.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/mocker": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.1.4.tgz", + "integrity": "sha512-R9HTZBhW6yCSGbGQnDnH3QHfJxokKN4KB+Yvk9Q1le7eQNYwiCyKxmLmurSpFy6BzJanSLuEUDrD+j97Q+ZLPg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/spy": "4.1.4", + "estree-walker": "^3.0.3", + "magic-string": "^0.30.21" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "msw": "^2.4.9", + "vite": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "msw": { + "optional": true + }, + "vite": { + "optional": true + } + } + }, + "node_modules/@vitest/pretty-format": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.1.4.tgz", + "integrity": "sha512-ddmDHU0gjEUyEVLxtZa7xamrpIefdEETu3nZjWtHeZX4QxqJ7tRxSteHVXJOcr8jhiLoGAhkK4WJ3WqBpjx42A==", + "dev": true, + "license": "MIT", + "dependencies": { + "tinyrainbow": "^3.1.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/runner": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-4.1.4.tgz", + "integrity": "sha512-xTp7VZ5aXP5ZJrn15UtJUWlx6qXLnGtF6jNxHepdPHpMfz/aVPx+htHtgcAL2mDXJgKhpoo2e9/hVJsIeFbytQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/utils": "4.1.4", + "pathe": "^2.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/snapshot": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.1.4.tgz", + "integrity": "sha512-MCjCFgaS8aZz+m5nTcEcgk/xhWv0rEH4Yl53PPlMXOZ1/Ka2VcZU6CJ+MgYCZbcJvzGhQRjVrGQNZqkGPttIKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "4.1.4", + "@vitest/utils": "4.1.4", + "magic-string": "^0.30.21", + "pathe": "^2.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/spy": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.1.4.tgz", + "integrity": "sha512-XxNdAsKW7C+FLydqFJLb5KhJtl3PGCMmYwFRfhvIgxJvLSXhhVI1zM8f1qD3Zg7RCjTSzDVyct6sghs9UEgBEQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/ui": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@vitest/ui/-/ui-4.1.4.tgz", + "integrity": "sha512-EgFR7nlj5iTDYZYCvavjFokNYwr3c3ry0sFiCg+N7B233Nwp+NNx7eoF/XvMWDCKY71xXAG3kFkt97ZHBJVL8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/utils": "4.1.4", + "fflate": "^0.8.2", + "flatted": "^3.4.2", + "pathe": "^2.0.3", + "sirv": "^3.0.2", + "tinyglobby": "^0.2.15", + "tinyrainbow": "^3.1.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "vitest": "4.1.4" + } + }, + "node_modules/@vitest/utils": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.1.4.tgz", + "integrity": "sha512-13QMT+eysM5uVGa1rG4kegGYNp6cnQcsTc67ELFbhNLQO+vgsygtYJx2khvdt4gVQqSSpC/KT5FZZxUpP3Oatw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "4.1.4", + "convert-source-map": "^2.0.0", + "tinyrainbow": "^3.1.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/utils/node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", + "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/helper-numbers": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", + "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", + "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", + "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", + "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.13.2", + "@webassemblyjs/helper-api-error": "1.13.2", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", + "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", + "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/wasm-gen": "1.14.1" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", + "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", + "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", + "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz", + "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/helper-wasm-section": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-opt": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1", + "@webassemblyjs/wast-printer": "1.14.1" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz", + "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz", + "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz", + "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-api-error": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", + "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/@yarnpkg/lockfile": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", + "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/abbrev": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-4.0.0.tgz", + "integrity": "sha512-a1wflyaL0tHtJSmLSOVybYhy22vRih4eduhhrkcjgrWGnRfrZtovJ2FRjxuTtkkj47O/baf0R86QU5OuYpz8fA==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/accepts": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", + "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-types": "^3.0.0", + "negotiator": "^1.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", + "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-import-phases": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/acorn-import-phases/-/acorn-import-phases-1.0.4.tgz", + "integrity": "sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.13.0" + }, + "peerDependencies": { + "acorn": "^8.14.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.3.5", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.5.tgz", + "integrity": "sha512-HEHNfbars9v4pgpW6SO1KSPkfoS0xVOM/9UzkJltjlsHZmJasxg8aXkuZa7SMf8vKGIBhpUsPluQSqhJFCqebw==", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^8.11.0" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/adjust-sourcemap-loader": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz", + "integrity": "sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "loader-utils": "^2.0.0", + "regex-parser": "^2.2.11" + }, + "engines": { + "node": ">=8.9" + } + }, + "node_modules/adjust-sourcemap-loader/node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", + "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", + "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/algoliasearch": { + "version": "5.48.1", + "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.48.1.tgz", + "integrity": "sha512-Rf7xmeuIo7nb6S4mp4abW2faW8DauZyE2faBIKFaUfP3wnpOvNSbiI5AwVhqBNj0jPgBWEvhyCu0sLjN2q77Rg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/abtesting": "1.14.1", + "@algolia/client-abtesting": "5.48.1", + "@algolia/client-analytics": "5.48.1", + "@algolia/client-common": "5.48.1", + "@algolia/client-insights": "5.48.1", + "@algolia/client-personalization": "5.48.1", + "@algolia/client-query-suggestions": "5.48.1", + "@algolia/client-search": "5.48.1", + "@algolia/ingestion": "1.48.1", + "@algolia/monitoring": "1.48.1", + "@algolia/recommend": "5.48.1", + "@algolia/requester-browser-xhr": "5.48.1", + "@algolia/requester-fetch": "5.48.1", + "@algolia/requester-node-http": "5.48.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-escapes": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.3.0.tgz", + "integrity": "sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg==", + "dev": true, + "license": "MIT", + "dependencies": { + "environment": "^1.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", + "dev": true, + "engines": [ + "node >= 0.8.0" + ], + "license": "Apache-2.0", + "bin": { + "ansi-html": "bin/ansi-html" + } + }, + "node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/anymatch/node_modules/picomatch": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/append-transform": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-2.0.0.tgz", + "integrity": "sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==", + "dev": true, + "license": "MIT", + "dependencies": { + "default-require-extensions": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/arch": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz", + "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/archy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", + "integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==", + "dev": true, + "license": "MIT" + }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true, + "license": "MIT" + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "node_modules/asn1js": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/asn1js/-/asn1js-3.0.7.tgz", + "integrity": "sha512-uLvq6KJu04qoQM6gvBfKFjlh6Gl0vOKQuR5cJMDHQkmwfMOQeN3F3SHCv9SNYSL+CRoHvOGFfllDlVz03GQjvQ==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "pvtsutils": "^1.3.6", + "pvutils": "^1.1.3", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/assertion-error": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + } + }, + "node_modules/ast-v8-to-istanbul": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/ast-v8-to-istanbul/-/ast-v8-to-istanbul-1.0.0.tgz", + "integrity": "sha512-1fSfIwuDICFA4LKkCzRPO7F0hzFf0B7+Xqrl27ynQaa+Rh0e1Es0v6kWHPott3lU10AyAr7oKHa65OppjLn3Rg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.31", + "estree-walker": "^3.0.3", + "js-tokens": "^10.0.0" + } + }, + "node_modules/ast-v8-to-istanbul/node_modules/js-tokens": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-10.0.0.tgz", + "integrity": "sha512-lM/UBzQmfJRo9ABXbPWemivdCW8V2G8FHaHdypQaIy523snUjog0W71ayWXTjiR+ixeMyVHN2XcpnTd/liPg/Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/async": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", + "dev": true, + "license": "MIT" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/autoprefixer": { + "version": "10.4.27", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.27.tgz", + "integrity": "sha512-NP9APE+tO+LuJGn7/9+cohklunJsXWiaWEfV3si4Gi/XHDwVNgkwr1J3RQYFIvPy76GmJ9/bW8vyoU1LcxwKHA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "browserslist": "^4.28.1", + "caniuse-lite": "^1.0.30001774", + "fraction.js": "^5.3.4", + "picocolors": "^1.1.1", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "*" + } + }, + "node_modules/aws4": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.13.2.tgz", + "integrity": "sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==", + "dev": true, + "license": "MIT" + }, + "node_modules/babel-loader": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-10.1.1.tgz", + "integrity": "sha512-JwKSzk2kjIe7mgPK+/lyZ2QAaJcpahNAdM+hgR2HI8D0OJVkdj8Rl6J3kaLYki9pwF7P2iWnD8qVv80Lq1ABtg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "find-up": "^5.0.0" + }, + "engines": { + "node": "^18.20.0 || ^20.10.0 || >=22.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0 || ^8.0.0-beta.1", + "@rspack/core": "^1.0.0 || ^2.0.0-0", + "webpack": ">=5.61.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-8.0.0.tgz", + "integrity": "sha512-18wCskrN3DgbuBmp1gr7LBGT8xdz5xhQQqFvFhVxbkl8VBCrMKQ2YtqBWtUal1Zrc1HTuX0011+Brjw78TCFkg==", + "dev": true, + "license": "BSD-3-Clause", + "workspaces": [ + "test/babel-8" + ], + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.3", + "istanbul-lib-instrument": "^6.0.2", + "test-exclude": "^7.0.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.17", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.17.tgz", + "integrity": "sha512-aTyf30K/rqAsNwN76zYrdtx8obu0E4KoUME29B1xj+B3WxgvWkp943vYQ+z8Mv3lw9xHXMHpvSPOBxzAkIa94w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.28.6", + "@babel/helper-define-polyfill-provider": "^0.6.8", + "semver": "^6.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.14.2.tgz", + "integrity": "sha512-coWpDLJ410R781Npmn/SIBZEsAetR4xVi0SxLMXPaMO4lSf1MwnkGYMtkFxew0Dn8B3/CpbpYxN0JCgg8mn67g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.8", + "core-js-compat": "^3.48.0" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.8.tgz", + "integrity": "sha512-M762rNHfSF1EV3SLtnCJXFoQbbIIz0OyRwnCmV0KPC7qosSfCO0QLTSuJX3ayAebubhE6oYBAYPrBA5ljowaZg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.8" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/baseline-browser-mapping": { + "version": "2.10.8", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.8.tgz", + "integrity": "sha512-PCLz/LXGBsNTErbtB6i5u4eLpHeMfi93aUv5duMmj6caNu6IphS4q6UevDnL36sZQv9lrP11dbPKGMaXPwMKfQ==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.cjs" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/basic-auth": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", + "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "5.1.2" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/basic-auth/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "license": "MIT" + }, + "node_modules/batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", + "dev": true, + "license": "MIT" + }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "node_modules/beasties": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/beasties/-/beasties-0.4.1.tgz", + "integrity": "sha512-2Imdcw3LznDuxAbJM26RHniOLAzE6WgrK8OuvVXCQtNBS8rsnD9zsSEa3fHl4hHpUY7BYTlrpvtPVbvu9G6neg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "css-select": "^6.0.0", + "css-what": "^7.0.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.3", + "htmlparser2": "^10.0.0", + "picocolors": "^1.1.1", + "postcss": "^8.4.49", + "postcss-media-query-parser": "^0.2.3", + "postcss-safe-parser": "^7.0.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/bidi-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/bidi-js/-/bidi-js-1.0.3.tgz", + "integrity": "sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw==", + "dev": true, + "license": "MIT", + "dependencies": { + "require-from-string": "^2.0.2" + } + }, + "node_modules/big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/blob-util": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/blob-util/-/blob-util-2.0.2.tgz", + "integrity": "sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true, + "license": "MIT" + }, + "node_modules/body-parser": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.2.tgz", + "integrity": "sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA==", + "dev": true, + "license": "MIT", + "dependencies": { + "bytes": "^3.1.2", + "content-type": "^1.0.5", + "debug": "^4.4.3", + "http-errors": "^2.0.0", + "iconv-lite": "^0.7.0", + "on-finished": "^2.4.1", + "qs": "^6.14.1", + "raw-body": "^3.0.1", + "type-is": "^2.0.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/bonjour-service": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.3.0.tgz", + "integrity": "sha512-3YuAUiSkWykd+2Azjgyxei8OWf8thdn8AITIog2M4UICzoqfjlqr64WIjEXZllf/W6vK1goqleSR6brGomxQqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "multicast-dns": "^7.2.5" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true, + "license": "ISC" + }, + "node_modules/brace-expansion": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.4.tgz", + "integrity": "sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", + "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "baseline-browser-mapping": "^2.9.0", + "caniuse-lite": "^1.0.30001759", + "electron-to-chromium": "^1.5.263", + "node-releases": "^2.0.27", + "update-browserslist-db": "^1.2.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/bundle-name": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", + "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "run-applescript": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/bytestreamjs": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bytestreamjs/-/bytestreamjs-2.0.1.tgz", + "integrity": "sha512-U1Z/ob71V/bXfVABvNr/Kumf5VyeQRBEm6Txb0PQ6S7V5GpBM3w4Cbqz/xPDicR5tN0uvDifng8C+5qECeGwyQ==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/cacache": { + "version": "20.0.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-20.0.3.tgz", + "integrity": "sha512-3pUp4e8hv07k1QlijZu6Kn7c9+ZpWWk4j3F8N3xPuCExULobqJydKYOTj1FTq58srkJsXvO7LbGAH4C0ZU3WGw==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/fs": "^5.0.0", + "fs-minipass": "^3.0.0", + "glob": "^13.0.0", + "lru-cache": "^11.1.0", + "minipass": "^7.0.3", + "minipass-collect": "^2.0.1", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^7.0.2", + "ssri": "^13.0.0", + "unique-filename": "^5.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/cacache/node_modules/lru-cache": { + "version": "11.2.7", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.7.tgz", + "integrity": "sha512-aY/R+aEsRelme17KGQa/1ZSIpLpNYYrhcrepKTZgE+W3WM16YMCaPwOHLHsmopZHELU0Ojin1lPVxKR0MihncA==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/cachedir": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.4.0.tgz", + "integrity": "sha512-9EtFOZR8g22CL7BWjJ9BUx1+A/djkofnyW3aOXZORNW2kxoUpx2h+uN2cOqwPmFhnpVmxg+KW2OjOSgChTEvsQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/caching-transform": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz", + "integrity": "sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasha": "^5.0.0", + "make-dir": "^3.0.0", + "package-hash": "^4.0.0", + "write-file-atomic": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/caching-transform/node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/caching-transform/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001780", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001780.tgz", + "integrity": "sha512-llngX0E7nQci5BPJDqoZSbuZ5Bcs9F5db7EtgfwBerX9XGtkkiO4NwfDDIRzHTTwcYC8vC7bmeUEPGrKlR/TkQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/chai": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/chai/-/chai-6.2.2.tgz", + "integrity": "sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/chalk": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chardet": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-2.1.1.tgz", + "integrity": "sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/chart.js": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.5.1.tgz", + "integrity": "sha512-GIjfiT9dbmHRiYi6Nl2yFCq7kkwdkp1W/lp2J99rX0yo9tgJGn3lKQATztIjb5tVtevcBtIdICNWqlq5+E8/Pw==", + "license": "MIT", + "dependencies": { + "@kurkle/color": "^0.3.0" + }, + "engines": { + "pnpm": ">=8" + } + }, + "node_modules/chokidar": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-5.0.0.tgz", + "integrity": "sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==", + "dev": true, + "license": "MIT", + "dependencies": { + "readdirp": "^5.0.0" + }, + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/chownr": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", + "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", + "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0" + } + }, + "node_modules/ci-info": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.4.0.tgz", + "integrity": "sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-cursor": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", + "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", + "dev": true, + "license": "MIT", + "dependencies": { + "restore-cursor": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-spinners": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-3.4.0.tgz", + "integrity": "sha512-bXfOC4QcT1tKXGorxL3wbJm6XJPDqEnij2gQ2m7ESQuE+/z9YFIWnl/5RpTiKWbMq3EVKR4fRLJGn6DVfu0mpw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-table3": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.1.tgz", + "integrity": "sha512-w0q/enDHhPLq44ovMGdQeeDLvwxwavsJX7oQGYt/LrBlYsyaxyDnp6z3QzFut/6kLLKnlcUVJLrpB7KBfgG/RA==", + "dev": true, + "license": "MIT", + "dependencies": { + "string-width": "^4.2.0" + }, + "engines": { + "node": "10.* || >= 12.*" + }, + "optionalDependencies": { + "colors": "1.4.0" + } + }, + "node_modules/cli-table3/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-table3/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/cli-table3/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-table3/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-table3/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-truncate": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-5.2.0.tgz", + "integrity": "sha512-xRwvIOMGrfOAnM1JYtqQImuaNtDEv9v6oIYAs4LIHwTiKee8uwvIi363igssOC0O5U04i4AlENs79LQLu9tEMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "slice-ansi": "^8.0.0", + "string-width": "^8.2.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-width": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", + "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 12" + } + }, + "node_modules/cliui": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-9.0.1.tgz", + "integrity": "sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^7.2.0", + "strip-ansi": "^7.1.0", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/cliui/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", + "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true, + "license": "MIT" + }, + "node_modules/colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", + "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/common-tags": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", + "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "dev": true, + "license": "MIT" + }, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compression": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.8.1.tgz", + "integrity": "sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==", + "dev": true, + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "compressible": "~2.0.18", + "debug": "2.6.9", + "negotiator": "~0.6.4", + "on-headers": "~1.1.0", + "safe-buffer": "5.2.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/compression/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/compression/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, + "node_modules/compression/node_modules/negotiator": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", + "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/connect-history-api-fallback": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", + "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/content-disposition": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.1.tgz", + "integrity": "sha512-oIXISMynqSqm241k6kcQ5UwttDILMK4BiurCfGEREw6+X9jkkpEe5T9FZaApyLGGOnFuyMWZpdolTXMtvEJ08Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true, + "license": "MIT" + }, + "node_modules/cookie": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", + "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.6.0" + } + }, + "node_modules/copy-anything": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.6.tgz", + "integrity": "sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-what": "^3.14.1" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/copy-webpack-plugin": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-14.0.0.tgz", + "integrity": "sha512-3JLW90aBGeaTLpM7mYQKpnVdgsUZRExY55giiZgLuX/xTQRUs1dOCwbBnWnvY6Q6rfZoXMNwzOQJCSZPppfqXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "glob-parent": "^6.0.1", + "normalize-path": "^3.0.0", + "schema-utils": "^4.2.0", + "serialize-javascript": "^7.0.3", + "tinyglobby": "^0.2.12" + }, + "engines": { + "node": ">= 20.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + } + }, + "node_modules/core-js-compat": { + "version": "3.49.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.49.0.tgz", + "integrity": "sha512-VQXt1jr9cBz03b331DFDCCP90b3fanciLkgiOoy8SBHy06gNf+vQ1A3WFLqG7I8TipYIKeYK9wxd0tUrvHcOZA==", + "dev": true, + "license": "MIT", + "dependencies": { + "browserslist": "^4.28.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/cors": { + "version": "2.8.6", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.6.tgz", + "integrity": "sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/corser": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/corser/-/corser-2.0.1.tgz", + "integrity": "sha512-utCYNzRSQIZNPIcGZdQc92UVJYAhtGAteCFg0yRaFm8f0P+CPtyGyHXJcGXnffjCybUCEx3FQ2G7U3/o9eIkVQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/cosmiconfig": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.1.tgz", + "integrity": "sha512-hr4ihw+DBqcvrsEDioRO31Z17x71pUYoNe/4h6Z0wB72p7MU7/9gH8Q3s12NFhHPfYBBOV3qyfUxmr/Yn3shnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "env-paths": "^2.2.1", + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/css-loader": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-7.1.3.tgz", + "integrity": "sha512-frbERmjT0UC5lMheWpJmMilnt9GEhbZJN/heUb7/zaJYeIzj5St9HvDcfshzzOqbsS+rYpMk++2SD3vGETDSyA==", + "dev": true, + "license": "MIT", + "dependencies": { + "icss-utils": "^5.1.0", + "postcss": "^8.4.40", + "postcss-modules-extract-imports": "^3.1.0", + "postcss-modules-local-by-default": "^4.0.5", + "postcss-modules-scope": "^3.2.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.2.0", + "semver": "^7.6.3" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "@rspack/core": "0.x || 1.x", + "webpack": "^5.27.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/css-select": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-6.0.0.tgz", + "integrity": "sha512-rZZVSLle8v0+EY8QAkDWrKhpgt6SA5OtHsgBnsj6ZaLb5dmDVOWUDtQitd9ydxxvEjhewNudS6eTVU7uOyzvXw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^7.0.0", + "domhandler": "^5.0.3", + "domutils": "^3.2.2", + "nth-check": "^2.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-tree": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.2.1.tgz", + "integrity": "sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "mdn-data": "2.27.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, + "node_modules/css-what": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-7.0.0.tgz", + "integrity": "sha512-wD5oz5xibMOPHzy13CyGmogB3phdvcDaB5t0W/Nr5Z2O/agcB8YwOz6e2Lsp10pNDzBoDO9nVa3RGs/2BttpHQ==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cssstyle": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-6.2.0.tgz", + "integrity": "sha512-Fm5NvhYathRnXNVndkUsCCuR63DCLVVwGOOwQw782coXFi5HhkXdu289l59HlXZBawsyNccXfWRYvLzcDCdDig==", + "dev": true, + "license": "MIT", + "dependencies": { + "@asamuzakjp/css-color": "^5.0.1", + "@csstools/css-syntax-patches-for-csstree": "^1.0.28", + "css-tree": "^3.1.0", + "lru-cache": "^11.2.6" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/cssstyle/node_modules/lru-cache": { + "version": "11.2.7", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.7.tgz", + "integrity": "sha512-aY/R+aEsRelme17KGQa/1ZSIpLpNYYrhcrepKTZgE+W3WM16YMCaPwOHLHsmopZHELU0Ojin1lPVxKR0MihncA==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/cypress": { + "version": "15.13.1", + "resolved": "https://registry.npmjs.org/cypress/-/cypress-15.13.1.tgz", + "integrity": "sha512-jLkgo75zlwo7PhXp0XJot+zIfFSDzN1SvTml6Xf3ETM1XHRWnH3Q4LAR3orCo/BsnxPnhjG3m5HYSvn9DAtwBg==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "@cypress/request": "^3.0.10", + "@cypress/xvfb": "^1.2.4", + "@types/sinonjs__fake-timers": "8.1.1", + "@types/sizzle": "^2.3.2", + "@types/tmp": "^0.2.3", + "arch": "^2.2.0", + "blob-util": "^2.0.2", + "bluebird": "^3.7.2", + "buffer": "^5.7.1", + "cachedir": "^2.3.0", + "chalk": "^4.1.0", + "ci-info": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-table3": "0.6.1", + "commander": "^6.2.1", + "common-tags": "^1.8.0", + "dayjs": "^1.10.4", + "debug": "^4.3.4", + "enquirer": "^2.3.6", + "eventemitter2": "6.4.7", + "execa": "4.1.0", + "executable": "^4.1.1", + "extract-zip": "2.0.1", + "figures": "^3.2.0", + "fs-extra": "^9.1.0", + "hasha": "5.2.2", + "is-installed-globally": "~0.4.0", + "listr2": "^3.8.3", + "lodash": "^4.17.23", + "log-symbols": "^4.0.0", + "minimist": "^1.2.8", + "ospath": "^1.2.2", + "pretty-bytes": "^5.6.0", + "process": "^0.11.10", + "proxy-from-env": "1.0.0", + "request-progress": "^3.0.0", + "supports-color": "^8.1.1", + "systeminformation": "^5.31.1", + "tmp": "~0.2.4", + "tree-kill": "1.2.2", + "tslib": "1.14.1", + "untildify": "^4.0.0", + "yauzl": "^2.10.0" + }, + "bin": { + "cypress": "bin/cypress" + }, + "engines": { + "node": "^20.1.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/cypress/node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cypress/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cypress/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/cypress/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/cypress/node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cypress/node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cypress/node_modules/cli-truncate": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", + "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", + "dev": true, + "license": "MIT", + "dependencies": { + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cypress/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/cypress/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cypress/node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cypress/node_modules/listr2": { + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.14.0.tgz", + "integrity": "sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "cli-truncate": "^2.1.0", + "colorette": "^2.0.16", + "log-update": "^4.0.0", + "p-map": "^4.0.0", + "rfdc": "^1.3.0", + "rxjs": "^7.5.1", + "through": "^2.3.8", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "enquirer": ">= 2.3.0 < 3" + }, + "peerDependenciesMeta": { + "enquirer": { + "optional": true + } + } + }, + "node_modules/cypress/node_modules/listr2/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/cypress/node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cypress/node_modules/log-update": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", + "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-escapes": "^4.3.0", + "cli-cursor": "^3.1.0", + "slice-ansi": "^4.0.0", + "wrap-ansi": "^6.2.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cypress/node_modules/log-update/node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/cypress/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cypress/node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cypress/node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cypress/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/cypress/node_modules/slice-ansi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", + "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cypress/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cypress/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cypress/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/cypress/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true, + "license": "0BSD" + }, + "node_modules/cypress/node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", + "dev": true, + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/data-urls": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-7.0.0.tgz", + "integrity": "sha512-23XHcCF+coGYevirZceTVD7NdJOqVn+49IHyxgszm+JIiHLoB2TkmPtsYkNWT1pvRSGkc35L6NHs0yHkN2SumA==", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-mimetype": "^5.0.0", + "whatwg-url": "^16.0.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + } + }, + "node_modules/dayjs": { + "version": "1.11.20", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.20.tgz", + "integrity": "sha512-YbwwqR/uYpeoP4pu043q+LTDLFBLApUP6VxRihdfNTqu4ubqMlGDLd6ErXhEgsyvY0K6nCs7nggYumAN+9uEuQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decimal.js": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.6.0.tgz", + "integrity": "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==", + "dev": true, + "license": "MIT" + }, + "node_modules/default-browser": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.5.0.tgz", + "integrity": "sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "bundle-name": "^4.1.0", + "default-browser-id": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser-id": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.1.tgz", + "integrity": "sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-require-extensions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.1.tgz", + "integrity": "sha512-eXTJmRbm2TIt9MgWTsOH1wEuhew6XGZcMeGKCtLedIg/NCsg1iBePXkceTdK4Fii7pzmN9tGsZhKzZ4h7O/fxw==", + "dev": true, + "license": "MIT", + "dependencies": { + "strip-bom": "^4.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "dev": true, + "license": "MIT" + }, + "node_modules/diff": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.4.tgz", + "integrity": "sha512-X07nttJQkwkfKfvTPG/KSnE2OMdcUCao6+eXF3wmnIQRn2aPAHH3VxDbDOdegkd6JbPsXqShpvEOHfAT+nCNwQ==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/dns-packet": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", + "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@leichtgewicht/ip-codec": "^2.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dev": true, + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", + "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true, + "license": "MIT" + }, + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", + "dev": true, + "license": "MIT", + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "dev": true, + "license": "MIT" + }, + "node_modules/electron-to-chromium": { + "version": "1.5.313", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.313.tgz", + "integrity": "sha512-QBMrTWEf00GXZmJyx2lbYD45jpI3TUFnNIzJ5BBc8piGUDwMPa1GV6HJWTZVvY/eiN3fSopl7NRbgGp9sZ9LTA==", + "dev": true, + "license": "ISC" + }, + "node_modules/emoji-regex": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", + "dev": true, + "license": "MIT" + }, + "node_modules/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", + "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/engine.io-client": { + "version": "6.6.4", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.6.4.tgz", + "integrity": "sha512-+kjUJnZGwzewFDw951CDWcwj35vMNf2fcj7xQWOctq1F2i1jkDdVvdFG9kM/BEChymCH36KgjnW0NsL58JYRxw==", + "license": "MIT", + "dependencies": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.4.1", + "engine.io-parser": "~5.2.1", + "ws": "~8.18.3", + "xmlhttprequest-ssl": "~2.1.1" + } + }, + "node_modules/engine.io-parser": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.3.tgz", + "integrity": "sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.20.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.20.1.tgz", + "integrity": "sha512-Qohcme7V1inbAfvjItgw0EaxVX5q2rdVEZHRBrEQdRZTssLDGsL8Lwrznl8oQ/6kuTJONLaDcGjkNP247XEhcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.3.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/enquirer": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", + "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-colors": "^4.1.1", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/enquirer/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/enquirer/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/environment": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz", + "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "dev": true, + "license": "MIT" + }, + "node_modules/errno": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "prr": "~1.0.1" + }, + "bin": { + "errno": "cli.js" + } + }, + "node_modules/error-ex": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz", + "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-module-lexer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.0.0.tgz", + "integrity": "sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==", + "dev": true, + "license": "MIT" + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-toolkit": { + "version": "1.45.1", + "resolved": "https://registry.npmjs.org/es-toolkit/-/es-toolkit-1.45.1.tgz", + "integrity": "sha512-/jhoOj/Fx+A+IIyDNOvO3TItGmlMKhtX8ISAHKE90c4b/k1tqaqEZ+uUqfpU8DMnW5cgNJv606zS55jGvza0Xw==", + "license": "MIT", + "workspaces": [ + "docs", + "benchmarks" + ] + }, + "node_modules/es6-error": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", + "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", + "dev": true, + "license": "MIT" + }, + "node_modules/esbuild": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.3.tgz", + "integrity": "sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.27.3", + "@esbuild/android-arm": "0.27.3", + "@esbuild/android-arm64": "0.27.3", + "@esbuild/android-x64": "0.27.3", + "@esbuild/darwin-arm64": "0.27.3", + "@esbuild/darwin-x64": "0.27.3", + "@esbuild/freebsd-arm64": "0.27.3", + "@esbuild/freebsd-x64": "0.27.3", + "@esbuild/linux-arm": "0.27.3", + "@esbuild/linux-arm64": "0.27.3", + "@esbuild/linux-ia32": "0.27.3", + "@esbuild/linux-loong64": "0.27.3", + "@esbuild/linux-mips64el": "0.27.3", + "@esbuild/linux-ppc64": "0.27.3", + "@esbuild/linux-riscv64": "0.27.3", + "@esbuild/linux-s390x": "0.27.3", + "@esbuild/linux-x64": "0.27.3", + "@esbuild/netbsd-arm64": "0.27.3", + "@esbuild/netbsd-x64": "0.27.3", + "@esbuild/openbsd-arm64": "0.27.3", + "@esbuild/openbsd-x64": "0.27.3", + "@esbuild/openharmony-arm64": "0.27.3", + "@esbuild/sunos-x64": "0.27.3", + "@esbuild/win32-arm64": "0.27.3", + "@esbuild/win32-ia32": "0.27.3", + "@esbuild/win32-x64": "0.27.3" + } + }, + "node_modules/esbuild-wasm": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.27.3.tgz", + "integrity": "sha512-AUXuOxZ145/5Az+lIqk6TdJbxKTyDGkXMJpTExmBdbnHR6n6qAFx+F4oG9ORpVYJ9dQYeQAqzv51TO4DFKsbXw==", + "dev": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "dev": true, + "license": "MIT" + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eventemitter2": { + "version": "6.4.7", + "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.7.tgz", + "integrity": "sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg==", + "dev": true, + "license": "MIT" + }, + "node_modules/eventemitter3": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz", + "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==", + "dev": true, + "license": "MIT" + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/eventsource": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-3.0.7.tgz", + "integrity": "sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eventsource-parser": "^3.0.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/eventsource-parser": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.0.6.tgz", + "integrity": "sha512-Vo1ab+QXPzZ4tCa8SwIHJFaSzy4R6SHf7BY79rFBDf0idraZWAkYrDjDj8uWaSm3S2TK+hJ7/t1CEmZ7jXw+pg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/execa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", + "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/execa/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/execa/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/executable": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz", + "integrity": "sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "pify": "^2.2.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/expect-type": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.3.0.tgz", + "integrity": "sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/exponential-backoff": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.3.tgz", + "integrity": "sha512-ZgEeZXj30q+I0EN+CbSSpIyPaJ5HVQD18Z1m+u1FXbAeT94mr1zw50q4q6jiiC447Nl/YTcIYSAftiGqetwXCA==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/express": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/express/-/express-5.2.1.tgz", + "integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "accepts": "^2.0.0", + "body-parser": "^2.2.1", + "content-disposition": "^1.0.0", + "content-type": "^1.0.5", + "cookie": "^0.7.1", + "cookie-signature": "^1.2.1", + "debug": "^4.4.0", + "depd": "^2.0.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "finalhandler": "^2.1.0", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", + "merge-descriptors": "^2.0.0", + "mime-types": "^3.0.0", + "on-finished": "^2.4.1", + "once": "^1.4.0", + "parseurl": "^1.3.3", + "proxy-addr": "^2.0.7", + "qs": "^6.14.0", + "range-parser": "^1.2.1", + "router": "^2.2.0", + "send": "^1.1.0", + "serve-static": "^2.2.0", + "statuses": "^2.0.1", + "type-is": "^2.0.1", + "vary": "^1.1.2" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/express-rate-limit": { + "version": "8.3.1", + "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-8.3.1.tgz", + "integrity": "sha512-D1dKN+cmyPWuvB+G2SREQDzPY1agpBIcTa9sJxOPMCNeH3gwzhqJRDWCXW3gg0y//+LQ/8j52JbMROWyrKdMdw==", + "dev": true, + "license": "MIT", + "dependencies": { + "ip-address": "10.1.0" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/express-rate-limit" + }, + "peerDependencies": { + "express": ">= 4.11" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true, + "license": "MIT" + }, + "node_modules/extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "bin": { + "extract-zip": "cli.js" + }, + "engines": { + "node": ">= 10.17.0" + }, + "optionalDependencies": { + "@types/yauzl": "^2.9.1" + } + }, + "node_modules/extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "license": "MIT" + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", + "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "pend": "~1.2.0" + } + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/fflate": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.2.tgz", + "integrity": "sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==", + "dev": true, + "license": "MIT" + }, + "node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.1.tgz", + "integrity": "sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "on-finished": "^2.4.1", + "parseurl": "^1.3.3", + "statuses": "^2.0.1" + }, + "engines": { + "node": ">= 18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dev": true, + "license": "MIT", + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + } + }, + "node_modules/find-cache-dir/node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/find-cache-dir/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "license": "BSD-3-Clause", + "bin": { + "flat": "cli.js" + } + }, + "node_modules/flatted": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz", + "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==", + "dev": true, + "license": "ISC" + }, + "node_modules/follow-redirects": { + "version": "1.15.11", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", + "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "dev": true, + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "*" + } + }, + "node_modules/form-data": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", + "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", + "dev": true, + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/form-data/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/form-data/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fraction.js": { + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-5.3.4.tgz", + "integrity": "sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", + "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/fromentries": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", + "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fs-minipass": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", + "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-east-asian-width": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.5.0.tgz", + "integrity": "sha512-CQ+bEO+Tva/qlmw24dCejulK5pMzVnUOFOijVogd3KQs07HnRIgp8TGipvCCRT06xeYEbpbgwaCxglFyiuIcmA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "license": "MIT", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", + "dev": true, + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0" + } + }, + "node_modules/glob": { + "version": "13.0.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.6.tgz", + "integrity": "sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "minimatch": "^10.2.2", + "minipass": "^7.1.3", + "path-scurry": "^2.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/glob-to-regex.js": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/glob-to-regex.js/-/glob-to-regex.js-1.2.0.tgz", + "integrity": "sha512-QMwlOQKU/IzqMUOAZWubUOT8Qft+Y0KQWnX9nK3ch0CJg0tTp4TvGZsTfudYKv2NzoQSyPcnA6TYeIQ3jGichQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/global-dirs": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", + "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ini": "2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/global-dirs/node_modules/ini": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", + "dev": true, + "license": "MIT" + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasha": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", + "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-stream": "^2.0.0", + "type-fest": "^0.8.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "license": "MIT", + "bin": { + "he": "bin/he" + } + }, + "node_modules/hono": { + "version": "4.12.8", + "resolved": "https://registry.npmjs.org/hono/-/hono-4.12.8.tgz", + "integrity": "sha512-VJCEvtrezO1IAR+kqEYnxUOoStaQPGrCmX3j4wDTNOcD1uRPFpGlwQUIW8niPuvHXaTUxeOUl5MMDGrl+tmO9A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16.9.0" + } + }, + "node_modules/hosted-git-info": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-9.0.2.tgz", + "integrity": "sha512-M422h7o/BR3rmCQ8UHi7cyyMqKltdP9Uo+J2fXK+RSAY+wTcKOIRyhTuKv4qn+DJf3g+PL890AzId5KZpX+CBg==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^11.1.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/hosted-git-info/node_modules/lru-cache": { + "version": "11.2.7", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.7.tgz", + "integrity": "sha512-aY/R+aEsRelme17KGQa/1ZSIpLpNYYrhcrepKTZgE+W3WM16YMCaPwOHLHsmopZHELU0Ojin1lPVxKR0MihncA==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "node_modules/hpack.js/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/hpack.js/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "license": "MIT" + }, + "node_modules/hpack.js/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/html-encoding-sniffer": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-6.0.0.tgz", + "integrity": "sha512-CV9TW3Y3f8/wT0BRFc1/KAVQ3TUHiXmaAb6VW9vtiMFf7SLoMd1PdAc4W3KFOFETBJUb90KatHqlsZMWV+R9Gg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@exodus/bytes": "^1.6.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + } + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true, + "license": "MIT" + }, + "node_modules/htmlparser2": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-10.1.0.tgz", + "integrity": "sha512-VTZkM9GWRAtEpveh7MSF6SjjrpNVNNVJfFup7xTY3UpFtm67foy9HDVXneLtFVt4pMz5kZtgNcvCniNFb1hlEQ==", + "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.2.2", + "entities": "^7.0.1" + } + }, + "node_modules/htmlparser2/node_modules/entities": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-7.0.1.tgz", + "integrity": "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", + "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", + "dev": true, + "license": "MIT" + }, + "node_modules/http-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/http-parser-js": { + "version": "0.5.10", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.10.tgz", + "integrity": "sha512-Pysuw9XpUq5dVc/2SMHpuTY01RFl8fttgcyunjL7eEMhGM3cI4eOmiCycJDVCo/7O7ClfQD3SaI6ftDzqOXYMA==", + "dev": true, + "license": "MIT" + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/http-proxy-middleware": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-3.0.5.tgz", + "integrity": "sha512-GLZZm1X38BPY4lkXA01jhwxvDoOkkXqjgVyUzVxiEK4iuRu03PZoYHhHRwxnfhQMDuaxi3vVri0YgSro/1oWqg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/http-proxy": "^1.17.15", + "debug": "^4.3.6", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.3", + "is-plain-object": "^5.0.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/http-proxy-middleware/node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/http-proxy/node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true, + "license": "MIT" + }, + "node_modules/http-server": { + "version": "14.1.1", + "resolved": "https://registry.npmjs.org/http-server/-/http-server-14.1.1.tgz", + "integrity": "sha512-+cbxadF40UXd9T01zUHgA+rlo2Bg1Srer4+B4NwIHdaGxAGGv59nYRnGGDJ9LBk7alpS0US+J+bLLdQOOkJq4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "basic-auth": "^2.0.1", + "chalk": "^4.1.2", + "corser": "^2.0.1", + "he": "^1.2.0", + "html-encoding-sniffer": "^3.0.0", + "http-proxy": "^1.18.1", + "mime": "^1.6.0", + "minimist": "^1.2.6", + "opener": "^1.5.1", + "portfinder": "^1.0.28", + "secure-compare": "3.0.1", + "union": "~0.5.0", + "url-join": "^4.0.1" + }, + "bin": { + "http-server": "bin/http-server" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/http-server/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/http-server/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/http-server/node_modules/html-encoding-sniffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", + "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-encoding": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/http-signature": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.4.0.tgz", + "integrity": "sha512-G5akfn7eKbpDN+8nPS/cb57YeA1jLTVxjpCj7tmm3QKPdyDy7T+qSC40e9ptydSWvkwjSXw1VbkpyEm39ukeAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^2.0.2", + "sshpk": "^1.18.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8.12.0" + } + }, + "node_modules/hyperdyperid": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/hyperdyperid/-/hyperdyperid-1.2.0.tgz", + "integrity": "sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.18" + } + }, + "node_modules/iconv-lite": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz", + "integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } ], + "license": "BSD-3-Clause" + }, + "node_modules/ignore-walk": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-8.0.0.tgz", + "integrity": "sha512-FCeMZT4NiRQGh+YkeKMtWrOmBgWjHjMJ26WQWrRQyoyzqevdaGSakUaJW5xQYmjLlUVk2qUnCjYVBax9EKKg8A==", + "dev": true, + "license": "ISC", + "dependencies": { + "minimatch": "^10.0.3" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/image-size": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", + "integrity": "sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==", + "dev": true, + "license": "MIT", + "optional": true, + "bin": { + "image-size": "bin/image-size.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/immutable": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.5.tgz", + "integrity": "sha512-t7xcm2siw+hlUM68I+UEOK+z84RzmN59as9DZ7P1l0994DKUWV7UXBMQZVxaoMSRQ+PBZbHCOoBt7a2wxOMt+A==", + "dev": true, + "license": "MIT" + }, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-fresh/node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/ini": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-6.0.0.tgz", + "integrity": "sha512-IBTdIkzZNOpqm7q3dRqJvMaldXjDHWkEDfrwGEQTs5eaQMWV+djAhR+wahyNNMAa+qpbDUhBMVt4ZKNwpPm7xQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/ip-address": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.1.0.tgz", + "integrity": "sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "dev": true, + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.1.0.tgz", + "integrity": "sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-east-asian-width": "^1.3.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-in-ssh": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-in-ssh/-/is-in-ssh-1.0.0.tgz", + "integrity": "sha512-jYa6Q9rH90kR1vKB6NM7qqd1mge3Fx4Dhw5TVlK1MUBqhEOuCagrEHMevNuCcbECmXZ0ThXkRm+Ymr51HwEPAw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-installed-globally": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", + "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "global-dirs": "^3.0.0", + "is-path-inside": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-interactive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", + "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-network-error": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/is-network-error/-/is-network-error-1.3.1.tgz", + "integrity": "sha512-6QCxa49rQbmUWLfk0nuGqzql9U8uaV2H6279bRErPBHe/109hCzsLUBUHfbEtvLIHBd6hyXbgedBSHevm43Edw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "license": "MIT", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-promise": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", + "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-unicode-supported": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz", + "integrity": "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-what": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz", + "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-wsl": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.1.tgz", + "integrity": "sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-inside-container": "^1.0.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", + "dev": true, + "license": "MIT" + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-hook": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz", + "integrity": "sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "append-transform": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", + "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/core": "^7.23.9", + "@babel/parser": "^7.23.9", + "@istanbuljs/schema": "^0.1.3", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-processinfo": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-3.0.0.tgz", + "integrity": "sha512-P7nLXRRlo7Sqinty6lNa7+4o9jBUYGpqtejqCOZKfgXlRoxY/QArflcB86YO500Ahj4pDJEG34JjMRbQgePLnQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "archy": "^1.0.0", + "cross-spawn": "^7.0.3", + "istanbul-lib-coverage": "^3.2.0", + "p-map": "^3.0.0", + "rimraf": "^6.1.3", + "uuid": "^8.3.2" + }, + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/istanbul-lib-processinfo/node_modules/p-map": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", + "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/istanbul-reports": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.2.0.tgz", + "integrity": "sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] + "license": "BSD-3-Clause", + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } }, - "node_modules/@rollup/rollup-linux-ppc64-musl": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.59.0.tgz", - "integrity": "sha512-+2kLtQ4xT3AiIxkzFVFXfsmlZiG5FXYW7ZyIIvGA7Bdeuh9Z0aN4hVyXS/G1E9bTP/vqszNIN/pUKCk/BTHsKA==", - "cpu": [ - "ppc64" - ], + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } }, - "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.59.0.tgz", - "integrity": "sha512-NDYMpsXYJJaj+I7UdwIuHHNxXZ/b/N2hR15NyH3m2qAtb/hHPA4g4SuuvrdxetTdndfj9b1WOmy73kcPRoERUg==", - "cpu": [ - "riscv64" - ], + "node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ] + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } }, - "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.59.0.tgz", - "integrity": "sha512-nLckB8WOqHIf1bhymk+oHxvM9D3tyPndZH8i8+35p/1YiVoVswPid2yLzgX7ZJP0KQvnkhM4H6QZ5m0LzbyIAg==", - "cpu": [ - "riscv64" - ], + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ] + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } }, - "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.59.0.tgz", - "integrity": "sha512-oF87Ie3uAIvORFBpwnCvUzdeYUqi2wY6jRFWJAy1qus/udHFYIkplYRW+wo+GRUP4sKzYdmE1Y3+rY5Gc4ZO+w==", - "cpu": [ - "s390x" - ], + "node_modules/jiti": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz", + "integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ] + "bin": { + "jiti": "lib/jiti-cli.mjs" + } }, - "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.59.0.tgz", - "integrity": "sha512-3AHmtQq/ppNuUspKAlvA8HtLybkDflkMuLK4DPo77DfthRb71V84/c4MlWJXixZz4uruIH4uaa07IqoAkG64fg==", - "cpu": [ - "x64" - ], + "node_modules/jose": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/jose/-/jose-6.2.1.tgz", + "integrity": "sha512-jUaKr1yrbfaImV7R2TN/b3IcZzsw38/chqMpo2XJ7i2F8AfM/lA4G1goC3JVEwg0H7UldTmSt3P68nt31W7/mw==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ] + "funding": { + "url": "https://github.com/sponsors/panva" + } }, - "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.59.0.tgz", - "integrity": "sha512-2UdiwS/9cTAx7qIUZB/fWtToJwvt0Vbo0zmnYt7ED35KPg13Q0ym1g442THLC7VyI6JfYTP4PiSOWyoMdV2/xg==", - "cpu": [ - "x64" - ], + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] + "license": "MIT" }, - "node_modules/@rollup/rollup-openbsd-x64": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.59.0.tgz", - "integrity": "sha512-M3bLRAVk6GOwFlPTIxVBSYKUaqfLrn8l0psKinkCFxl4lQvOSz8ZrKDz2gxcBwHFpci0B6rttydI4IpS4IS/jQ==", - "cpu": [ - "x64" - ], + "node_modules/js-yaml": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ] + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } }, - "node_modules/@rollup/rollup-openharmony-arm64": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.59.0.tgz", - "integrity": "sha512-tt9KBJqaqp5i5HUZzoafHZX8b5Q2Fe7UjYERADll83O4fGqJ49O1FsL6LpdzVFQcpwvnyd0i+K/VSwu/o/nWlA==", - "cpu": [ - "arm64" - ], + "node_modules/jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openharmony" - ] + "license": "MIT" }, - "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.59.0.tgz", - "integrity": "sha512-V5B6mG7OrGTwnxaNUzZTDTjDS7F75PO1ae6MJYdiMu60sq0CqN5CVeVsbhPxalupvTX8gXVSU9gq+Rx1/hvu6A==", - "cpu": [ - "arm64" - ], + "node_modules/jsdom": { + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-28.1.0.tgz", + "integrity": "sha512-0+MoQNYyr2rBHqO1xilltfDjV9G7ymYGlAUazgcDLQaUf8JDHbuGwsxN6U9qWaElZ4w1B2r7yEGIL3GdeW3Rug==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "win32" - ] + "dependencies": { + "@acemir/cssom": "^0.9.31", + "@asamuzakjp/dom-selector": "^6.8.1", + "@bramus/specificity": "^2.4.2", + "@exodus/bytes": "^1.11.0", + "cssstyle": "^6.0.1", + "data-urls": "^7.0.0", + "decimal.js": "^10.6.0", + "html-encoding-sniffer": "^6.0.0", + "http-proxy-agent": "^7.0.2", + "https-proxy-agent": "^7.0.6", + "is-potential-custom-element-name": "^1.0.1", + "parse5": "^8.0.0", + "saxes": "^6.0.0", + "symbol-tree": "^3.2.4", + "tough-cookie": "^6.0.0", + "undici": "^7.21.0", + "w3c-xmlserializer": "^5.0.0", + "webidl-conversions": "^8.0.1", + "whatwg-mimetype": "^5.0.0", + "whatwg-url": "^16.0.0", + "xml-name-validator": "^5.0.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + }, + "peerDependencies": { + "canvas": "^3.0.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } }, - "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.59.0.tgz", - "integrity": "sha512-UKFMHPuM9R0iBegwzKF4y0C4J9u8C6MEJgFuXTBerMk7EJ92GFVFYBfOZaSGLu6COf7FxpQNqhNS4c4icUPqxA==", - "cpu": [ - "ia32" - ], + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "win32" - ] + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } }, - "node_modules/@rollup/rollup-win32-x64-gnu": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.59.0.tgz", - "integrity": "sha512-laBkYlSS1n2L8fSo1thDNGrCTQMmxjYY5G0WFWjFFYZkKPjsMBsgJfGf4TLxXrF6RyhI60L8TMOjBMvXiTcxeA==", - "cpu": [ - "x64" - ], + "node_modules/json-parse-even-better-errors": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-5.0.0.tgz", + "integrity": "sha512-ZF1nxZ28VhQouRWhUcVlUIN3qwSgPuswK05s/HIaoetAoE/9tngVmCHjSxmSQPav1nd+lPtTL0YZ/2AFdR/iYQ==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "win32" - ] + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "dev": true, + "license": "(AFL-2.1 OR BSD-3-Clause)" + }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema-typed": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/json-schema-typed/-/json-schema-typed-8.0.2.tgz", + "integrity": "sha512-fQhoXdcvc3V28x7C7BMs4P5+kNlgUURe2jmUT1T//oBRMDrqy1QPelJimwZGo7Hg9VPV3EQV5Bnq4hbFy2vetA==", + "dev": true, + "license": "BSD-2-Clause" }, - "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.59.0.tgz", - "integrity": "sha512-2HRCml6OztYXyJXAvdDXPKcawukWY2GpR5/nxKp4iBgiO3wcoEGkAaqctIbZcNB6KlUQBIqt8VYkNSj2397EfA==", - "cpu": [ - "x64" - ], + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] + "license": "ISC" }, - "node_modules/@schematics/angular": { - "version": "21.2.2", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-21.2.2.tgz", - "integrity": "sha512-Ywa6HDtX7TRBQZTVMMnxX3Mk7yVnG8KtSFaXWrkx779+q8tqYdBwNwAqbNd4Zatr1GccKaz9xcptHJta5+DTxw==", + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true, "license": "MIT", - "dependencies": { - "@angular-devkit/core": "21.2.2", - "@angular-devkit/schematics": "21.2.2", - "jsonc-parser": "3.3.1" + "bin": { + "json5": "lib/cli.js" }, "engines": { - "node": "^20.19.0 || ^22.12.0 || >=24.0.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" + "node": ">=6" } }, - "node_modules/@sigstore/bundle": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-4.0.0.tgz", - "integrity": "sha512-NwCl5Y0V6Di0NexvkTqdoVfmjTaQwoLM236r89KEojGmq/jMls8S+zb7yOwAPdXvbwfKDlP+lmXgAL4vKSQT+A==", + "node_modules/jsonc-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz", + "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==", "dev": true, - "license": "Apache-2.0", + "license": "MIT" + }, + "node_modules/jsonfile": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "dev": true, + "license": "MIT", "dependencies": { - "@sigstore/protobuf-specs": "^0.5.0" + "universalify": "^2.0.0" }, - "engines": { - "node": "^20.17.0 || >=22.9.0" + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/@sigstore/core": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@sigstore/core/-/core-3.1.0.tgz", - "integrity": "sha512-o5cw1QYhNQ9IroioJxpzexmPjfCe7gzafd2RY3qnMpxr4ZEja+Jad/U8sgFpaue6bOaF+z7RVkyKVV44FN+N8A==", + "node_modules/jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^20.17.0 || >=22.9.0" - } + "engines": [ + "node >= 0.2.0" + ], + "license": "MIT" }, - "node_modules/@sigstore/protobuf-specs": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.5.0.tgz", - "integrity": "sha512-MM8XIwUjN2bwvCg1QvrMtbBmpcSHrkhFSCu1D11NyPvDQ25HEc4oG5/OcQfd/Tlf/OxmKWERDj0zGE23jQaMwA==", + "node_modules/jsprim": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz", + "integrity": "sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==", "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^18.17.0 || >=20.5.0" + "engines": [ + "node >=0.6.0" + ], + "license": "MIT", + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" } }, - "node_modules/@sigstore/sign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-4.1.0.tgz", - "integrity": "sha512-Vx1RmLxLGnSUqx/o5/VsCjkuN5L7y+vxEEwawvc7u+6WtX2W4GNa7b9HEjmcRWohw/d6BpATXmvOwc78m+Swdg==", + "node_modules/karma-source-map-support": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/karma-source-map-support/-/karma-source-map-support-1.4.0.tgz", + "integrity": "sha512-RsBECncGO17KAoJCYXjv+ckIz+Ii9NCi+9enk+rq6XC81ezYkb4/RHE6CTXdA7IOJqoF3wcaLfVG0CPmE5ca6A==", "dev": true, - "license": "Apache-2.0", + "license": "MIT", "dependencies": { - "@sigstore/bundle": "^4.0.0", - "@sigstore/core": "^3.1.0", - "@sigstore/protobuf-specs": "^0.5.0", - "make-fetch-happen": "^15.0.3", - "proc-log": "^6.1.0", - "promise-retry": "^2.0.1" - }, - "engines": { - "node": "^20.17.0 || >=22.9.0" + "source-map-support": "^0.5.5" } }, - "node_modules/@sigstore/tuf": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-4.0.1.tgz", - "integrity": "sha512-OPZBg8y5Vc9yZjmWCHrlWPMBqW5yd8+wFNl+thMdtcWz3vjVSoJQutF8YkrzI0SLGnkuFof4HSsWUhXrf219Lw==", + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@sigstore/protobuf-specs": "^0.5.0", - "tuf-js": "^4.1.0" - }, + "license": "MIT", "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=0.10.0" } }, - "node_modules/@sigstore/verify": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@sigstore/verify/-/verify-3.1.0.tgz", - "integrity": "sha512-mNe0Iigql08YupSOGv197YdHpPPr+EzDZmfCgMc7RPNaZTw5aLN01nBl6CHJOh3BGtnMIj83EeN4butBchc8Ag==", + "node_modules/launch-editor": { + "version": "2.13.2", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.13.2.tgz", + "integrity": "sha512-4VVDnbOpLXy/s8rdRCSXb+zfMeFR0WlJWpET1iA9CQdlZDfwyLjUuGQzXU4VeOoey6AicSAluWan7Etga6Kcmg==", "dev": true, - "license": "Apache-2.0", + "license": "MIT", "dependencies": { - "@sigstore/bundle": "^4.0.0", - "@sigstore/core": "^3.1.0", - "@sigstore/protobuf-specs": "^0.5.0" - }, - "engines": { - "node": "^20.17.0 || >=22.9.0" + "picocolors": "^1.1.1", + "shell-quote": "^1.8.3" } }, - "node_modules/@socket.io/component-emitter": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz", - "integrity": "sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==", - "license": "MIT" - }, - "node_modules/@standard-schema/spec": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", - "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==", - "license": "MIT" - }, - "node_modules/@tailwindcss/node": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.2.1.tgz", - "integrity": "sha512-jlx6sLk4EOwO6hHe1oCGm1Q4AN/s0rSrTTPBGPM0/RQ6Uylwq17FuU8IeJJKEjtc6K6O07zsvP+gDO6MMWo7pg==", + "node_modules/less": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/less/-/less-4.4.2.tgz", + "integrity": "sha512-j1n1IuTX1VQjIy3tT7cyGbX7nvQOsFLoIqobZv4ttI5axP923gA44zUj6miiA6R5Aoms4sEGVIIcucXUbRI14g==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "dependencies": { - "@jridgewell/remapping": "^2.3.5", - "enhanced-resolve": "^5.19.0", - "jiti": "^2.6.1", - "lightningcss": "1.31.1", - "magic-string": "^0.30.21", - "source-map-js": "^1.2.1", - "tailwindcss": "4.2.1" + "copy-anything": "^2.0.1", + "parse-node-version": "^1.0.1", + "tslib": "^2.3.0" + }, + "bin": { + "lessc": "bin/lessc" + }, + "engines": { + "node": ">=14" + }, + "optionalDependencies": { + "errno": "^0.1.1", + "graceful-fs": "^4.1.2", + "image-size": "~0.5.0", + "make-dir": "^2.1.0", + "mime": "^1.4.1", + "needle": "^3.1.0", + "source-map": "~0.6.0" } }, - "node_modules/@tailwindcss/oxide": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.2.1.tgz", - "integrity": "sha512-yv9jeEFWnjKCI6/T3Oq50yQEOqmpmpfzG1hcZsAOaXFQPfzWprWrlHSdGPEF3WQTi8zu8ohC9Mh9J470nT5pUw==", + "node_modules/less-loader": { + "version": "12.3.1", + "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-12.3.1.tgz", + "integrity": "sha512-JZZmG7gMzoDP3VGeEG8Sh6FW5wygB5jYL7Wp29FFihuRTsIBacqO3LbRPr2yStYD11riVf13selLm/CPFRDBRQ==", "dev": true, "license": "MIT", "engines": { - "node": ">= 20" + "node": ">= 18.12.0" }, - "optionalDependencies": { - "@tailwindcss/oxide-android-arm64": "4.2.1", - "@tailwindcss/oxide-darwin-arm64": "4.2.1", - "@tailwindcss/oxide-darwin-x64": "4.2.1", - "@tailwindcss/oxide-freebsd-x64": "4.2.1", - "@tailwindcss/oxide-linux-arm-gnueabihf": "4.2.1", - "@tailwindcss/oxide-linux-arm64-gnu": "4.2.1", - "@tailwindcss/oxide-linux-arm64-musl": "4.2.1", - "@tailwindcss/oxide-linux-x64-gnu": "4.2.1", - "@tailwindcss/oxide-linux-x64-musl": "4.2.1", - "@tailwindcss/oxide-wasm32-wasi": "4.2.1", - "@tailwindcss/oxide-win32-arm64-msvc": "4.2.1", - "@tailwindcss/oxide-win32-x64-msvc": "4.2.1" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "@rspack/core": "0.x || ^1.0.0 || ^2.0.0-0", + "less": "^3.5.0 || ^4.0.0", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } } }, - "node_modules/@tailwindcss/oxide-android-arm64": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.2.1.tgz", - "integrity": "sha512-eZ7G1Zm5EC8OOKaesIKuw77jw++QJ2lL9N+dDpdQiAB/c/B2wDh0QPFHbkBVrXnwNugvrbJFk1gK2SsVjwWReg==", - "cpu": [ - "arm64" - ], + "node_modules/less/node_modules/make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", "dev": true, "license": "MIT", "optional": true, - "os": [ - "android" - ], + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, "engines": { - "node": ">= 20" + "node": ">=6" } }, - "node_modules/@tailwindcss/oxide-darwin-arm64": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.2.1.tgz", - "integrity": "sha512-q/LHkOstoJ7pI1J0q6djesLzRvQSIfEto148ppAd+BVQK0JYjQIFSK3JgYZJa+Yzi0DDa52ZsQx2rqytBnf8Hw==", - "cpu": [ - "arm64" - ], + "node_modules/less/node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", "dev": true, "license": "MIT", "optional": true, - "os": [ - "darwin" - ], "engines": { - "node": ">= 20" + "node": ">=6" } }, - "node_modules/@tailwindcss/oxide-darwin-x64": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.2.1.tgz", - "integrity": "sha512-/f/ozlaXGY6QLbpvd/kFTro2l18f7dHKpB+ieXz+Cijl4Mt9AI2rTrpq7V+t04nK+j9XBQHnSMdeQRhbGyt6fw==", - "cpu": [ - "x64" - ], + "node_modules/less/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, - "license": "MIT", + "license": "ISC", "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 20" + "bin": { + "semver": "bin/semver" } }, - "node_modules/@tailwindcss/oxide-freebsd-x64": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.2.1.tgz", - "integrity": "sha512-5e/AkgYJT/cpbkys/OU2Ei2jdETCLlifwm7ogMC7/hksI2fC3iiq6OcXwjibcIjPung0kRtR3TxEITkqgn0TcA==", - "cpu": [ - "x64" - ], + "node_modules/less/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, - "license": "MIT", + "license": "BSD-3-Clause", "optional": true, - "os": [ - "freebsd" - ], "engines": { - "node": ">= 20" + "node": ">=0.10.0" + } + }, + "node_modules/license-webpack-plugin": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-4.0.2.tgz", + "integrity": "sha512-771TFWFD70G1wLTC4oU2Cw4qvtmNrIw+wRvBtn+okgHl7slJVi7zfNcdmqDL72BojM30VNJ2UHylr1o77U37Jw==", + "dev": true, + "license": "ISC", + "dependencies": { + "webpack-sources": "^3.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + }, + "webpack-sources": { + "optional": true + } } }, - "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.2.1.tgz", - "integrity": "sha512-Uny1EcVTTmerCKt/1ZuKTkb0x8ZaiuYucg2/kImO5A5Y/kBz41/+j0gxUZl+hTF3xkWpDmHX+TaWhOtba2Fyuw==", - "cpu": [ - "arm" - ], + "node_modules/lightningcss": { + "version": "1.31.1", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.31.1.tgz", + "integrity": "sha512-l51N2r93WmGUye3WuFoN5k10zyvrVs0qfKBhyC5ogUQ6Ew6JUSswh78mbSO+IU3nTWsyOArqPCcShdQSadghBQ==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "license": "MPL-2.0", + "dependencies": { + "detect-libc": "^2.0.3" + }, "engines": { - "node": ">= 20" + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-android-arm64": "1.31.1", + "lightningcss-darwin-arm64": "1.31.1", + "lightningcss-darwin-x64": "1.31.1", + "lightningcss-freebsd-x64": "1.31.1", + "lightningcss-linux-arm-gnueabihf": "1.31.1", + "lightningcss-linux-arm64-gnu": "1.31.1", + "lightningcss-linux-arm64-musl": "1.31.1", + "lightningcss-linux-x64-gnu": "1.31.1", + "lightningcss-linux-x64-musl": "1.31.1", + "lightningcss-win32-arm64-msvc": "1.31.1", + "lightningcss-win32-x64-msvc": "1.31.1" } }, - "node_modules/@tailwindcss/oxide-linux-arm64-gnu": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.2.1.tgz", - "integrity": "sha512-CTrwomI+c7n6aSSQlsPL0roRiNMDQ/YzMD9EjcR+H4f0I1SQ8QqIuPnsVp7QgMkC1Qi8rtkekLkOFjo7OlEFRQ==", + "node_modules/lightningcss-android-arm64": { + "version": "1.31.1", + "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.31.1.tgz", + "integrity": "sha512-HXJF3x8w9nQ4jbXRiNppBCqeZPIAfUo8zE/kOEGbW5NZvGc/K7nMxbhIr+YlFlHW5mpbg/YFPdbnCh1wAXCKFg==", "cpu": [ "arm64" ], "dev": true, - "license": "MIT", + "license": "MPL-2.0", "optional": true, "os": [ - "linux" + "android" ], "engines": { - "node": ">= 20" + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/@tailwindcss/oxide-linux-arm64-musl": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.2.1.tgz", - "integrity": "sha512-WZA0CHRL/SP1TRbA5mp9htsppSEkWuQ4KsSUumYQnyl8ZdT39ntwqmz4IUHGN6p4XdSlYfJwM4rRzZLShHsGAQ==", + "node_modules/lightningcss-darwin-arm64": { + "version": "1.31.1", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.31.1.tgz", + "integrity": "sha512-02uTEqf3vIfNMq3h/z2cJfcOXnQ0GRwQrkmPafhueLb2h7mqEidiCzkE4gBMEH65abHRiQvhdcQ+aP0D0g67sg==", "cpu": [ "arm64" ], "dev": true, - "license": "MIT", + "license": "MPL-2.0", "optional": true, "os": [ - "linux" + "darwin" ], "engines": { - "node": ">= 20" + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/@tailwindcss/oxide-linux-x64-gnu": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.2.1.tgz", - "integrity": "sha512-qMFzxI2YlBOLW5PhblzuSWlWfwLHaneBE0xHzLrBgNtqN6mWfs+qYbhryGSXQjFYB1Dzf5w+LN5qbUTPhW7Y5g==", + "node_modules/lightningcss-darwin-x64": { + "version": "1.31.1", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.31.1.tgz", + "integrity": "sha512-1ObhyoCY+tGxtsz1lSx5NXCj3nirk0Y0kB/g8B8DT+sSx4G9djitg9ejFnjb3gJNWo7qXH4DIy2SUHvpoFwfTA==", "cpu": [ "x64" ], "dev": true, - "license": "MIT", + "license": "MPL-2.0", "optional": true, "os": [ - "linux" + "darwin" ], "engines": { - "node": ">= 20" + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/@tailwindcss/oxide-linux-x64-musl": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.2.1.tgz", - "integrity": "sha512-5r1X2FKnCMUPlXTWRYpHdPYUY6a1Ar/t7P24OuiEdEOmms5lyqjDRvVY1yy9Rmioh+AunQ0rWiOTPE8F9A3v5g==", + "node_modules/lightningcss-freebsd-x64": { + "version": "1.31.1", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.31.1.tgz", + "integrity": "sha512-1RINmQKAItO6ISxYgPwszQE1BrsVU5aB45ho6O42mu96UiZBxEXsuQ7cJW4zs4CEodPUioj/QrXW1r9pLUM74A==", "cpu": [ "x64" ], "dev": true, - "license": "MIT", + "license": "MPL-2.0", "optional": true, "os": [ - "linux" + "freebsd" ], "engines": { - "node": ">= 20" - } - }, - "node_modules/@tailwindcss/oxide-wasm32-wasi": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.2.1.tgz", - "integrity": "sha512-MGFB5cVPvshR85MTJkEvqDUnuNoysrsRxd6vnk1Lf2tbiqNlXpHYZqkqOQalydienEWOHHFyyuTSYRsLfxFJ2Q==", - "bundleDependencies": [ - "@napi-rs/wasm-runtime", - "@emnapi/core", - "@emnapi/runtime", - "@tybys/wasm-util", - "@emnapi/wasi-threads", - "tslib" - ], - "cpu": [ - "wasm32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "@emnapi/core": "^1.8.1", - "@emnapi/runtime": "^1.8.1", - "@emnapi/wasi-threads": "^1.1.0", - "@napi-rs/wasm-runtime": "^1.1.1", - "@tybys/wasm-util": "^0.10.1", - "tslib": "^2.8.1" + "node": ">= 12.0.0" }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.2.1.tgz", - "integrity": "sha512-YlUEHRHBGnCMh4Nj4GnqQyBtsshUPdiNroZj8VPkvTZSoHsilRCwXcVKnG9kyi0ZFAS/3u+qKHBdDc81SADTRA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 20" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/@tailwindcss/oxide-win32-x64-msvc": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.2.1.tgz", - "integrity": "sha512-rbO34G5sMWWyrN/idLeVxAZgAKWrn5LiR3/I90Q9MkA67s6T1oB0xtTe+0heoBvHSpbU9Mk7i6uwJnpo4u21XQ==", + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.31.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.31.1.tgz", + "integrity": "sha512-OOCm2//MZJ87CdDK62rZIu+aw9gBv4azMJuA8/KB74wmfS3lnC4yoPHm0uXZ/dvNNHmnZnB8XLAZzObeG0nS1g==", "cpu": [ - "x64" + "arm" ], "dev": true, - "license": "MIT", + "license": "MPL-2.0", "optional": true, "os": [ - "win32" + "linux" ], "engines": { - "node": ">= 20" - } - }, - "node_modules/@tailwindcss/postcss": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@tailwindcss/postcss/-/postcss-4.2.1.tgz", - "integrity": "sha512-OEwGIBnXnj7zJeonOh6ZG9woofIjGrd2BORfvE5p9USYKDCZoQmfqLcfNiRWoJlRWLdNPn2IgVZuWAOM4iTYMw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@alloc/quick-lru": "^5.2.0", - "@tailwindcss/node": "4.2.1", - "@tailwindcss/oxide": "4.2.1", - "postcss": "^8.5.6", - "tailwindcss": "4.2.1" - } - }, - "node_modules/@tufjs/canonical-json": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-2.0.0.tgz", - "integrity": "sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@tufjs/models": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-4.1.0.tgz", - "integrity": "sha512-Y8cK9aggNRsqJVaKUlEYs4s7CvQ1b1ta2DVPyAimb0I2qhzjNk+A+mxvll/klL0RlfuIUei8BF7YWiua4kQqww==", - "dev": true, - "license": "MIT", - "dependencies": { - "@tufjs/canonical-json": "2.0.0", - "minimatch": "^10.1.1" + "node": ">= 12.0.0" }, - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/@tybys/wasm-util": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz", - "integrity": "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/@types/chai": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.3.tgz", - "integrity": "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/deep-eql": "*", - "assertion-error": "^2.0.1" - } - }, - "node_modules/@types/deep-eql": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz", - "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/estree": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", - "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", - "dev": true, - "license": "MIT" - }, - "node_modules/@vitejs/plugin-basic-ssl": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-basic-ssl/-/plugin-basic-ssl-2.1.4.tgz", - "integrity": "sha512-HXciTXN/sDBYWgeAD4V4s0DN0g72x5mlxQhHxtYu3Tt8BLa6MzcJZUyDVFCdtjNs3bfENVHVzOsmooTVuNgAAw==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.31.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.31.1.tgz", + "integrity": "sha512-WKyLWztD71rTnou4xAD5kQT+982wvca7E6QoLpoawZ1gP9JM0GJj4Tp5jMUh9B3AitHbRZ2/H3W5xQmdEOUlLg==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "MIT", + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + "node": ">= 12.0.0" }, - "peerDependencies": { - "vite": "^6.0.0 || ^7.0.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/@vitest/coverage-v8": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-4.1.2.tgz", - "integrity": "sha512-sPK//PHO+kAkScb8XITeB1bf7fsk85Km7+rt4eeuRR3VS1/crD47cmV5wicisJmjNdfeokTZwjMk4Mj2d58Mgg==", + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.31.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.31.1.tgz", + "integrity": "sha512-mVZ7Pg2zIbe3XlNbZJdjs86YViQFoJSpc41CbVmKBPiGmC4YrfeOyz65ms2qpAobVd7WQsbW4PdsSJEMymyIMg==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "MIT", - "dependencies": { - "@bcoe/v8-coverage": "^1.0.2", - "@vitest/utils": "4.1.2", - "ast-v8-to-istanbul": "^1.0.0", - "istanbul-lib-coverage": "^3.2.2", - "istanbul-lib-report": "^3.0.1", - "istanbul-reports": "^3.2.0", - "magicast": "^0.5.2", - "obug": "^2.1.1", - "std-env": "^4.0.0-rc.1", - "tinyrainbow": "^3.1.0" + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" }, "funding": { - "url": "https://opencollective.com/vitest" - }, - "peerDependencies": { - "@vitest/browser": "4.1.2", - "vitest": "4.1.2" - }, - "peerDependenciesMeta": { - "@vitest/browser": { - "optional": true - } + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/@vitest/expect": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.1.2.tgz", - "integrity": "sha512-gbu+7B0YgUJ2nkdsRJrFFW6X7NTP44WlhiclHniUhxADQJH5Szt9mZ9hWnJPJ8YwOK5zUOSSlSvyzRf0u1DSBQ==", + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.31.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.31.1.tgz", + "integrity": "sha512-xGlFWRMl+0KvUhgySdIaReQdB4FNudfUTARn7q0hh/V67PVGCs3ADFjw+6++kG1RNd0zdGRlEKa+T13/tQjPMA==", + "cpu": [ + "x64" + ], "dev": true, - "license": "MIT", - "dependencies": { - "@standard-schema/spec": "^1.1.0", - "@types/chai": "^5.2.2", - "@vitest/spy": "4.1.2", - "@vitest/utils": "4.1.2", - "chai": "^6.2.2", - "tinyrainbow": "^3.1.0" + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" }, "funding": { - "url": "https://opencollective.com/vitest" + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/@vitest/mocker": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.1.2.tgz", - "integrity": "sha512-Ize4iQtEALHDttPRCmN+FKqOl2vxTiNUhzobQFFt/BM1lRUTG7zRCLOykG/6Vo4E4hnUdfVLo5/eqKPukcWW7Q==", + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.31.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.31.1.tgz", + "integrity": "sha512-eowF8PrKHw9LpoZii5tdZwnBcYDxRw2rRCyvAXLi34iyeYfqCQNA9rmUM0ce62NlPhCvof1+9ivRaTY6pSKDaA==", + "cpu": [ + "x64" + ], "dev": true, - "license": "MIT", - "dependencies": { - "@vitest/spy": "4.1.2", - "estree-walker": "^3.0.3", - "magic-string": "^0.30.21" + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" }, "funding": { - "url": "https://opencollective.com/vitest" - }, - "peerDependencies": { - "msw": "^2.4.9", - "vite": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "msw": { - "optional": true - }, - "vite": { - "optional": true - } + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/@vitest/pretty-format": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.1.2.tgz", - "integrity": "sha512-dwQga8aejqeuB+TvXCMzSQemvV9hNEtDDpgUKDzOmNQayl2OG241PSWeJwKRH3CiC+sESrmoFd49rfnq7T4RnA==", + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.31.1", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.31.1.tgz", + "integrity": "sha512-aJReEbSEQzx1uBlQizAOBSjcmr9dCdL3XuC/6HLXAxmtErsj2ICo5yYggg1qOODQMtnjNQv2UHb9NpOuFtYe4w==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "MIT", - "dependencies": { - "tinyrainbow": "^3.1.0" + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" }, "funding": { - "url": "https://opencollective.com/vitest" + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/@vitest/runner": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-4.1.2.tgz", - "integrity": "sha512-Gr+FQan34CdiYAwpGJmQG8PgkyFVmARK8/xSijia3eTFgVfpcpztWLuP6FttGNfPLJhaZVP/euvujeNYar36OQ==", + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.31.1", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.31.1.tgz", + "integrity": "sha512-I9aiFrbd7oYHwlnQDqr1Roz+fTz61oDDJX7n9tYF9FJymH1cIN1DtKw3iYt6b8WZgEjoNwVSncwF4wx/ZedMhw==", + "cpu": [ + "x64" + ], "dev": true, - "license": "MIT", - "dependencies": { - "@vitest/utils": "4.1.2", - "pathe": "^2.0.3" + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" }, "funding": { - "url": "https://opencollective.com/vitest" + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/@vitest/snapshot": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.1.2.tgz", - "integrity": "sha512-g7yfUmxYS4mNxk31qbOYsSt2F4m1E02LFqO53Xpzg3zKMhLAPZAjjfyl9e6z7HrW6LvUdTwAQR3HHfLjpko16A==", + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true, + "license": "MIT" + }, + "node_modules/listr2": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-9.0.5.tgz", + "integrity": "sha512-ME4Fb83LgEgwNw96RKNvKV4VTLuXfoKudAmm2lP8Kk87KaMK0/Xrx/aAkMWmT8mDb+3MlFDspfbCs7adjRxA2g==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "4.1.2", - "@vitest/utils": "4.1.2", - "magic-string": "^0.30.21", - "pathe": "^2.0.3" + "cli-truncate": "^5.0.0", + "colorette": "^2.0.20", + "eventemitter3": "^5.0.1", + "log-update": "^6.1.0", + "rfdc": "^1.4.1", + "wrap-ansi": "^9.0.0" }, - "funding": { - "url": "https://opencollective.com/vitest" + "engines": { + "node": ">=20.0.0" } }, - "node_modules/@vitest/spy": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.1.2.tgz", - "integrity": "sha512-DU4fBnbVCJGNBwVA6xSToNXrkZNSiw59H8tcuUspVMsBDBST4nfvsPsEHDHGtWRRnqBERBQu7TrTKskmjqTXKA==", + "node_modules/listr2/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", "dev": true, "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, "funding": { - "url": "https://opencollective.com/vitest" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@vitest/utils": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.1.2.tgz", - "integrity": "sha512-xw2/TiX82lQHA06cgbqRKFb5lCAy3axQ4H4SoUFhUsg+wztiet+co86IAMDtF6Vm1hc7J6j09oh/rgDn+JdKIQ==", + "node_modules/listr2/node_modules/wrap-ansi": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", + "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "4.1.2", - "convert-source-map": "^2.0.0", - "tinyrainbow": "^3.1.0" + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" }, "funding": { - "url": "https://opencollective.com/vitest" + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/@vitest/utils/node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@yarnpkg/lockfile": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", - "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", - "dev": true, - "license": "BSD-2-Clause" - }, - "node_modules/abbrev": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-4.0.0.tgz", - "integrity": "sha512-a1wflyaL0tHtJSmLSOVybYhy22vRih4eduhhrkcjgrWGnRfrZtovJ2FRjxuTtkkj47O/baf0R86QU5OuYpz8fA==", + "node_modules/lmdb": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/lmdb/-/lmdb-3.5.1.tgz", + "integrity": "sha512-NYHA0MRPjvNX+vSw8Xxg6FLKxzAG+e7Pt8RqAQA/EehzHVXq9SxDqJIN3JL1hK0dweb884y8kIh6rkWvPyg9Wg==", "dev": true, - "license": "ISC", - "engines": { - "node": "^20.17.0 || >=22.9.0" + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@harperfast/extended-iterable": "^1.0.3", + "msgpackr": "^1.11.2", + "node-addon-api": "^6.1.0", + "node-gyp-build-optional-packages": "5.2.2", + "ordered-binary": "^1.5.3", + "weak-lru-cache": "^1.2.2" + }, + "bin": { + "download-lmdb-prebuilds": "bin/download-prebuilds.js" + }, + "optionalDependencies": { + "@lmdb/lmdb-darwin-arm64": "3.5.1", + "@lmdb/lmdb-darwin-x64": "3.5.1", + "@lmdb/lmdb-linux-arm": "3.5.1", + "@lmdb/lmdb-linux-arm64": "3.5.1", + "@lmdb/lmdb-linux-x64": "3.5.1", + "@lmdb/lmdb-win32-arm64": "3.5.1", + "@lmdb/lmdb-win32-x64": "3.5.1" } }, - "node_modules/accepts": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", - "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", + "node_modules/loader-runner": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.1.tgz", + "integrity": "sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q==", "dev": true, "license": "MIT", - "dependencies": { - "mime-types": "^3.0.0", - "negotiator": "^1.0.0" - }, "engines": { - "node": ">= 0.6" + "node": ">=6.11.5" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "node_modules/agent-base": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", - "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "node_modules/loader-utils": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.3.1.tgz", + "integrity": "sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg==", "dev": true, "license": "MIT", "engines": { - "node": ">= 14" + "node": ">= 12.13.0" } }, - "node_modules/ajv": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", - "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, "license": "MIT", "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ajv-formats": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", - "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", + "node_modules/lodash": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz", + "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.flattendeep": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", + "integrity": "sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", + "dev": true, + "license": "MIT" + }, + "node_modules/log-symbols": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-7.0.1.tgz", + "integrity": "sha512-ja1E3yCr9i/0hmBVaM0bfwDjnGy8I/s6PP4DFp+yP+a+mrHO4Rm7DtmnqROTUkHIkqffC84YY7AeqX6oFk0WFg==", "dev": true, "license": "MIT", "dependencies": { - "ajv": "^8.0.0" + "is-unicode-supported": "^2.0.0", + "yoctocolors": "^2.1.1" }, - "peerDependencies": { - "ajv": "^8.0.0" + "engines": { + "node": ">=18" }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/algoliasearch": { - "version": "5.48.1", - "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.48.1.tgz", - "integrity": "sha512-Rf7xmeuIo7nb6S4mp4abW2faW8DauZyE2faBIKFaUfP3wnpOvNSbiI5AwVhqBNj0jPgBWEvhyCu0sLjN2q77Rg==", + "node_modules/log-update": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.1.0.tgz", + "integrity": "sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/abtesting": "1.14.1", - "@algolia/client-abtesting": "5.48.1", - "@algolia/client-analytics": "5.48.1", - "@algolia/client-common": "5.48.1", - "@algolia/client-insights": "5.48.1", - "@algolia/client-personalization": "5.48.1", - "@algolia/client-query-suggestions": "5.48.1", - "@algolia/client-search": "5.48.1", - "@algolia/ingestion": "1.48.1", - "@algolia/monitoring": "1.48.1", - "@algolia/recommend": "5.48.1", - "@algolia/requester-browser-xhr": "5.48.1", - "@algolia/requester-fetch": "5.48.1", - "@algolia/requester-node-http": "5.48.1" + "ansi-escapes": "^7.0.0", + "cli-cursor": "^5.0.0", + "slice-ansi": "^7.1.0", + "strip-ansi": "^7.1.0", + "wrap-ansi": "^9.0.0" }, "engines": { - "node": ">= 14.0.0" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ansi-escapes": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.3.0.tgz", - "integrity": "sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg==", + "node_modules/log-update/node_modules/slice-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.2.tgz", + "integrity": "sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==", "dev": true, "license": "MIT", "dependencies": { - "environment": "^1.0.0" + "ansi-styles": "^6.2.1", + "is-fullwidth-code-point": "^5.0.0" }, "engines": { "node": ">=18" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, - "node_modules/ansi-regex": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", - "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "node_modules/log-update/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", "dev": true, "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, "engines": { - "node": ">=12" + "node": ">=18" }, "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ansi-styles": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", - "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "node_modules/log-update/node_modules/wrap-ansi": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", + "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", "dev": true, "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, "engines": { - "node": ">=12" + "node": ">=18" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/assertion-error": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", - "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" } }, - "node_modules/ast-v8-to-istanbul": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/ast-v8-to-istanbul/-/ast-v8-to-istanbul-1.0.0.tgz", - "integrity": "sha512-1fSfIwuDICFA4LKkCzRPO7F0hzFf0B7+Xqrl27ynQaa+Rh0e1Es0v6kWHPott3lU10AyAr7oKHa65OppjLn3Rg==", + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", "dev": true, "license": "MIT", "dependencies": { - "@jridgewell/trace-mapping": "^0.3.31", - "estree-walker": "^3.0.3", - "js-tokens": "^10.0.0" + "@jridgewell/sourcemap-codec": "^1.5.5" } }, - "node_modules/ast-v8-to-istanbul/node_modules/js-tokens": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-10.0.0.tgz", - "integrity": "sha512-lM/UBzQmfJRo9ABXbPWemivdCW8V2G8FHaHdypQaIy523snUjog0W71ayWXTjiR+ixeMyVHN2XcpnTd/liPg/Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/balanced-match": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", - "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "node_modules/magicast": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.5.2.tgz", + "integrity": "sha512-E3ZJh4J3S9KfwdjZhe2afj6R9lGIN5Pher1pF39UGrXRqq/VDaGVIGN13BjHd2u8B61hArAGOnso7nBOouW3TQ==", "dev": true, "license": "MIT", - "engines": { - "node": "18 || 20 || >=22" + "dependencies": { + "@babel/parser": "^7.29.0", + "@babel/types": "^7.29.0", + "source-map-js": "^1.2.1" } }, - "node_modules/baseline-browser-mapping": { - "version": "2.10.8", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.8.tgz", - "integrity": "sha512-PCLz/LXGBsNTErbtB6i5u4eLpHeMfi93aUv5duMmj6caNu6IphS4q6UevDnL36sZQv9lrP11dbPKGMaXPwMKfQ==", + "node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", "dev": true, - "license": "Apache-2.0", - "bin": { - "baseline-browser-mapping": "dist/cli.cjs" + "license": "MIT", + "dependencies": { + "semver": "^7.5.3" }, "engines": { - "node": ">=6.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/beasties": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/beasties/-/beasties-0.4.1.tgz", - "integrity": "sha512-2Imdcw3LznDuxAbJM26RHniOLAzE6WgrK8OuvVXCQtNBS8rsnD9zsSEa3fHl4hHpUY7BYTlrpvtPVbvu9G6neg==", + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", "dev": true, - "license": "Apache-2.0", + "license": "ISC" + }, + "node_modules/make-fetch-happen": { + "version": "15.0.5", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-15.0.5.tgz", + "integrity": "sha512-uCbIa8jWWmQZt4dSnEStkVC6gdakiinAm4PiGsywIkguF0eWMdcjDz0ECYhUolFU3pFLOev9VNPCEygydXnddg==", + "dev": true, + "license": "ISC", "dependencies": { - "css-select": "^6.0.0", - "css-what": "^7.0.0", - "dom-serializer": "^2.0.0", - "domhandler": "^5.0.3", - "htmlparser2": "^10.0.0", - "picocolors": "^1.1.1", - "postcss": "^8.4.49", - "postcss-media-query-parser": "^0.2.3", - "postcss-safe-parser": "^7.0.1" + "@gar/promise-retry": "^1.0.0", + "@npmcli/agent": "^4.0.0", + "@npmcli/redact": "^4.0.0", + "cacache": "^20.0.1", + "http-cache-semantics": "^4.1.1", + "minipass": "^7.0.2", + "minipass-fetch": "^5.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^1.0.0", + "proc-log": "^6.0.0", + "ssri": "^13.0.0" }, "engines": { - "node": ">=18.0.0" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/bidi-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/bidi-js/-/bidi-js-1.0.3.tgz", - "integrity": "sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw==", + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", "dev": true, "license": "MIT", - "dependencies": { - "require-from-string": "^2.0.2" + "engines": { + "node": ">= 0.4" } }, - "node_modules/body-parser": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.2.tgz", - "integrity": "sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA==", + "node_modules/mdn-data": { + "version": "2.27.1", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.27.1.tgz", + "integrity": "sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/media-typer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", + "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", "dev": true, "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/memfs": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.57.1.tgz", + "integrity": "sha512-WvzrWPwMQT+PtbX2Et64R4qXKK0fj/8pO85MrUCzymX3twwCiJCdvntW3HdhG1teLJcHDDLIKx5+c3HckWYZtQ==", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "bytes": "^3.1.2", - "content-type": "^1.0.5", - "debug": "^4.4.3", - "http-errors": "^2.0.0", - "iconv-lite": "^0.7.0", - "on-finished": "^2.4.1", - "qs": "^6.14.1", - "raw-body": "^3.0.1", - "type-is": "^2.0.1" + "@jsonjoy.com/fs-core": "4.57.1", + "@jsonjoy.com/fs-fsa": "4.57.1", + "@jsonjoy.com/fs-node": "4.57.1", + "@jsonjoy.com/fs-node-builtins": "4.57.1", + "@jsonjoy.com/fs-node-to-fsa": "4.57.1", + "@jsonjoy.com/fs-node-utils": "4.57.1", + "@jsonjoy.com/fs-print": "4.57.1", + "@jsonjoy.com/fs-snapshot": "4.57.1", + "@jsonjoy.com/json-pack": "^1.11.0", + "@jsonjoy.com/util": "^1.9.0", + "glob-to-regex.js": "^1.0.1", + "thingies": "^2.5.0", + "tree-dump": "^1.0.3", + "tslib": "^2.0.0" }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/merge-descriptors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", + "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", + "dev": true, + "license": "MIT", "engines": { "node": ">=18" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", "dev": true, - "license": "ISC" + "license": "MIT" }, - "node_modules/brace-expansion": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.4.tgz", - "integrity": "sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg==", + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, "license": "MIT", "dependencies": { - "balanced-match": "^4.0.2" + "braces": "^3.0.3", + "picomatch": "^2.3.1" }, "engines": { - "node": "18 || 20 || >=22" + "node": ">=8.6" } }, - "node_modules/browserslist": { - "version": "4.28.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", - "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", + "node_modules/micromatch/node_modules/picomatch": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], "license": "MIT", - "peer": true, - "dependencies": { - "baseline-browser-mapping": "^2.9.0", - "caniuse-lite": "^1.0.30001759", - "electron-to-chromium": "^1.5.263", - "node-releases": "^2.0.27", - "update-browserslist-db": "^1.2.0" + "engines": { + "node": ">=8.6" }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "license": "MIT", "bin": { - "browserslist": "cli.js" + "mime": "cli.js" }, "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + "node": ">=4" } }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", "dev": true, "license": "MIT", "engines": { - "node": ">= 0.8" + "node": ">= 0.6" } }, - "node_modules/cacache": { - "version": "20.0.3", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-20.0.3.tgz", - "integrity": "sha512-3pUp4e8hv07k1QlijZu6Kn7c9+ZpWWk4j3F8N3xPuCExULobqJydKYOTj1FTq58srkJsXvO7LbGAH4C0ZU3WGw==", + "node_modules/mime-types": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", + "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "@npmcli/fs": "^5.0.0", - "fs-minipass": "^3.0.0", - "glob": "^13.0.0", - "lru-cache": "^11.1.0", - "minipass": "^7.0.3", - "minipass-collect": "^2.0.1", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "p-map": "^7.0.2", - "ssri": "^13.0.0", - "unique-filename": "^5.0.0" + "mime-db": "^1.54.0" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/cacache/node_modules/lru-cache": { - "version": "11.2.7", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.7.tgz", - "integrity": "sha512-aY/R+aEsRelme17KGQa/1ZSIpLpNYYrhcrepKTZgE+W3WM16YMCaPwOHLHsmopZHELU0Ojin1lPVxKR0MihncA==", + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true, - "license": "BlueOak-1.0.0", + "license": "MIT", "engines": { - "node": "20 || >=22" + "node": ">=6" } }, - "node_modules/call-bind-apply-helpers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", - "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "node_modules/mimic-function": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz", + "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==", "dev": true, "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2" - }, "engines": { - "node": ">= 0.4" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/call-bound": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", - "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "node_modules/mini-css-extract-plugin": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.10.0.tgz", + "integrity": "sha512-540P2c5dYnJlyJxTaSloliZexv8rji6rY8FhQN+WF/82iHQfA23j/xtJx97L+mXOML27EqksSek/g4eK7jaL3g==", "dev": true, "license": "MIT", "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "get-intrinsic": "^1.3.0" + "schema-utils": "^4.0.0", + "tapable": "^2.2.1" }, "engines": { - "node": ">= 0.4" + "node": ">= 12.13.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" } }, - "node_modules/caniuse-lite": { - "version": "1.0.30001780", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001780.tgz", - "integrity": "sha512-llngX0E7nQci5BPJDqoZSbuZ5Bcs9F5db7EtgfwBerX9XGtkkiO4NwfDDIRzHTTwcYC8vC7bmeUEPGrKlR/TkQ==", + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "CC-BY-4.0" + "license": "ISC" }, - "node_modules/chai": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/chai/-/chai-6.2.2.tgz", - "integrity": "sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==", + "node_modules/minimatch": { + "version": "10.2.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.4.tgz", + "integrity": "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==", "dev": true, - "license": "MIT", + "license": "BlueOak-1.0.0", + "dependencies": { + "brace-expansion": "^5.0.2" + }, "engines": { - "node": ">=18" + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/chalk": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", - "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "dev": true, "license": "MIT", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/chardet": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-2.1.1.tgz", - "integrity": "sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ==", + "node_modules/minipass": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", + "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", "dev": true, - "license": "MIT" + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=16 || 14 >=14.17" + } }, - "node_modules/chart.js": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.5.1.tgz", - "integrity": "sha512-GIjfiT9dbmHRiYi6Nl2yFCq7kkwdkp1W/lp2J99rX0yo9tgJGn3lKQATztIjb5tVtevcBtIdICNWqlq5+E8/Pw==", - "license": "MIT", - "peer": true, + "node_modules/minipass-collect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-2.0.1.tgz", + "integrity": "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==", + "dev": true, + "license": "ISC", "dependencies": { - "@kurkle/color": "^0.3.0" + "minipass": "^7.0.3" }, "engines": { - "pnpm": ">=8" + "node": ">=16 || 14 >=14.17" } }, - "node_modules/chokidar": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-5.0.0.tgz", - "integrity": "sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==", + "node_modules/minipass-fetch": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-5.0.2.tgz", + "integrity": "sha512-2d0q2a8eCi2IRg/IGubCNRJoYbA1+YPXAzQVRFmB45gdGZafyivnZ5YSEfo3JikbjGxOdntGFvBQGqaSMXlAFQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "readdirp": "^5.0.0" + "minipass": "^7.0.3", + "minipass-sized": "^2.0.0", + "minizlib": "^3.0.1" }, "engines": { - "node": ">= 20.19.0" + "node": "^20.17.0 || >=22.9.0" }, - "funding": { - "url": "https://paulmillr.com/funding/" + "optionalDependencies": { + "iconv-lite": "^0.7.2" } }, - "node_modules/chownr": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", - "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", + "node_modules/minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", "dev": true, - "license": "BlueOak-1.0.0", + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, "engines": { - "node": ">=18" + "node": ">= 8" } }, - "node_modules/cli-cursor": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", - "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", + "node_modules/minipass-flush/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "restore-cursor": "^5.0.0" + "yallist": "^4.0.0" }, "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, - "node_modules/cli-spinners": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-3.4.0.tgz", - "integrity": "sha512-bXfOC4QcT1tKXGorxL3wbJm6XJPDqEnij2gQ2m7ESQuE+/z9YFIWnl/5RpTiKWbMq3EVKR4fRLJGn6DVfu0mpw==", + "node_modules/minipass-flush/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=18.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "license": "ISC" }, - "node_modules/cli-truncate": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-5.2.0.tgz", - "integrity": "sha512-xRwvIOMGrfOAnM1JYtqQImuaNtDEv9v6oIYAs4LIHwTiKee8uwvIi363igssOC0O5U04i4AlENs79LQLu9tEMw==", + "node_modules/minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "slice-ansi": "^8.0.0", - "string-width": "^8.2.0" + "minipass": "^3.0.0" }, "engines": { - "node": ">=20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, - "node_modules/cli-width": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", - "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", + "node_modules/minipass-pipeline/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, "engines": { - "node": ">= 12" + "node": ">=8" } }, - "node_modules/cliui": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-9.0.1.tgz", - "integrity": "sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==", + "node_modules/minipass-pipeline/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, + "node_modules/minipass-sized": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-2.0.0.tgz", + "integrity": "sha512-zSsHhto5BcUVM2m1LurnXY6M//cGhVaegT71OfOXoprxT6o780GZd792ea6FfrQkuU4usHZIUczAQMRUE2plzA==", "dev": true, "license": "ISC", "dependencies": { - "string-width": "^7.2.0", - "strip-ansi": "^7.1.0", - "wrap-ansi": "^9.0.0" + "minipass": "^7.1.2" }, "engines": { - "node": ">=20" + "node": ">=8" } }, - "node_modules/cliui/node_modules/string-width": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", - "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "node_modules/minizlib": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.1.0.tgz", + "integrity": "sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==", "dev": true, "license": "MIT", "dependencies": { - "emoji-regex": "^10.3.0", - "get-east-asian-width": "^1.0.0", - "strip-ansi": "^7.1.0" + "minipass": "^7.1.2" }, "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 18" } }, - "node_modules/cliui/node_modules/wrap-ansi": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", - "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", + "node_modules/mrmime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", + "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/msgpackr": { + "version": "1.11.9", + "resolved": "https://registry.npmjs.org/msgpackr/-/msgpackr-1.11.9.tgz", + "integrity": "sha512-FkoAAyyA6HM8wL882EcEyFZ9s7hVADSwG9xrVx3dxxNQAtgADTrJoEWivID82Iv1zWDsv/OtbrrcZAzGzOMdNw==", + "dev": true, + "license": "MIT", + "optional": true, + "optionalDependencies": { + "msgpackr-extract": "^3.0.2" + } + }, + "node_modules/msgpackr-extract": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/msgpackr-extract/-/msgpackr-extract-3.0.3.tgz", + "integrity": "sha512-P0efT1C9jIdVRefqjzOQ9Xml57zpOXnIuS+csaB4MdZbTdmGDLo8XhzBG1N7aO11gKDDkJvBLULeFTo46wwreA==", "dev": true, + "hasInstallScript": true, "license": "MIT", + "optional": true, "dependencies": { - "ansi-styles": "^6.2.1", - "string-width": "^7.0.0", - "strip-ansi": "^7.1.0" + "node-gyp-build-optional-packages": "5.2.2" }, - "engines": { - "node": ">=18" + "bin": { + "download-msgpackr-prebuilds": "bin/download-prebuilds.js" }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "optionalDependencies": { + "@msgpackr-extract/msgpackr-extract-darwin-arm64": "3.0.3", + "@msgpackr-extract/msgpackr-extract-darwin-x64": "3.0.3", + "@msgpackr-extract/msgpackr-extract-linux-arm": "3.0.3", + "@msgpackr-extract/msgpackr-extract-linux-arm64": "3.0.3", + "@msgpackr-extract/msgpackr-extract-linux-x64": "3.0.3", + "@msgpackr-extract/msgpackr-extract-win32-x64": "3.0.3" } }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/multicast-dns": { + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", + "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", "dev": true, "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" }, + "bin": { + "multicast-dns": "cli.js" + } + }, + "node_modules/mute-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-2.0.0.tgz", + "integrity": "sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==", + "dev": true, + "license": "ISC", "engines": { - "node": ">=7.0.0" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", "dev": true, - "license": "MIT" + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } }, - "node_modules/colorette": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "node_modules/needle": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/needle/-/needle-3.5.0.tgz", + "integrity": "sha512-jaQyPKKk2YokHrEg+vFDYxXIHTCBgiZwSHOoVx/8V3GIBS8/VN6NdVRmg8q1ERtPkMvmOvebsgga4sAj5hls/w==", "dev": true, - "license": "MIT" + "license": "MIT", + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.3", + "sax": "^1.2.4" + }, + "bin": { + "needle": "bin/needle" + }, + "engines": { + "node": ">= 4.4.x" + } }, - "node_modules/content-disposition": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.1.tgz", - "integrity": "sha512-oIXISMynqSqm241k6kcQ5UwttDILMK4BiurCfGEREw6+X9jkkpEe5T9FZaApyLGGOnFuyMWZpdolTXMtvEJ08Q==", + "node_modules/needle/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dev": true, "license": "MIT", - "engines": { - "node": ">=18" + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "node_modules/negotiator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", + "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" } }, - "node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", "dev": true, "license": "MIT" }, - "node_modules/cookie": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", - "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", - "dev": true, + "node_modules/ng2-charts": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/ng2-charts/-/ng2-charts-10.0.0.tgz", + "integrity": "sha512-mdL75XJrk/0s0YO2ySPQpAHPja85ECDEGNWFlcElJiy/bYliTNGEpeCtctAqZuozTff/E2CwGjyfPFM1ScP2og==", "license": "MIT", - "engines": { - "node": ">= 0.6" + "dependencies": { + "es-toolkit": "^1.39.7", + "tslib": "^2.3.0" + }, + "peerDependencies": { + "@angular/cdk": ">=21.0.0", + "@angular/common": ">=21.0.0", + "@angular/core": ">=21.0.0", + "@angular/platform-browser": ">=21.0.0", + "chart.js": "^3.4.0 || ^4.0.0", + "rxjs": "^6.5.3 || ^7.4.0" } }, - "node_modules/cookie-signature": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", - "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", + "node_modules/node-addon-api": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-6.1.0.tgz", + "integrity": "sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==", "dev": true, "license": "MIT", - "engines": { - "node": ">=6.6.0" - } + "optional": true }, - "node_modules/cors": { - "version": "2.8.6", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.6.tgz", - "integrity": "sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw==", + "node_modules/node-gyp": { + "version": "12.2.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-12.2.0.tgz", + "integrity": "sha512-q23WdzrQv48KozXlr0U1v9dwO/k59NHeSzn6loGcasyf0UnSrtzs8kRxM+mfwJSf0DkX0s43hcqgnSO4/VNthQ==", "dev": true, "license": "MIT", "dependencies": { - "object-assign": "^4", - "vary": "^1" + "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^15.0.0", + "nopt": "^9.0.0", + "proc-log": "^6.0.0", + "semver": "^7.3.5", + "tar": "^7.5.4", + "tinyglobby": "^0.2.12", + "which": "^6.0.0" }, - "engines": { - "node": ">= 0.10" + "bin": { + "node-gyp": "bin/node-gyp.js" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" + "engines": { + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "node_modules/node-gyp-build-optional-packages": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.2.2.tgz", + "integrity": "sha512-s+w+rBWnpTMwSFbaE0UXsRlg7hU4FjekKU4eyAih5T8nJuNZT1nNsskXpxmeqSK9UzkBl6UgRlnKc8hz8IEqOw==", "dev": true, "license": "MIT", + "optional": true, "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" + "detect-libc": "^2.0.1" }, + "bin": { + "node-gyp-build-optional-packages": "bin.js", + "node-gyp-build-optional-packages-optional": "optional.js", + "node-gyp-build-optional-packages-test": "build-test.js" + } + }, + "node_modules/node-gyp/node_modules/isexe": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-4.0.0.tgz", + "integrity": "sha512-FFUtZMpoZ8RqHS3XeXEmHWLA4thH+ZxCv2lOiPIn1Xc7CxrqhWzNSDzD+/chS/zbYezmiwWLdQC09JdQKmthOw==", + "dev": true, + "license": "BlueOak-1.0.0", "engines": { - "node": ">= 8" + "node": ">=20" } }, - "node_modules/css-select": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-6.0.0.tgz", - "integrity": "sha512-rZZVSLle8v0+EY8QAkDWrKhpgt6SA5OtHsgBnsj6ZaLb5dmDVOWUDtQitd9ydxxvEjhewNudS6eTVU7uOyzvXw==", + "node_modules/node-gyp/node_modules/which": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/which/-/which-6.0.1.tgz", + "integrity": "sha512-oGLe46MIrCRqX7ytPUf66EAYvdeMIZYn3WaocqqKZAxrBpkqHfL/qvTyJ/bTk5+AqHCjXmrv3CEWgy368zhRUg==", "dev": true, - "license": "BSD-2-Clause", + "license": "ISC", "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^7.0.0", - "domhandler": "^5.0.3", - "domutils": "^3.2.2", - "nth-check": "^2.1.1" + "isexe": "^4.0.0" }, - "funding": { - "url": "https://github.com/sponsors/fb55" + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/css-tree": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.2.1.tgz", - "integrity": "sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA==", + "node_modules/node-preload": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz", + "integrity": "sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==", "dev": true, "license": "MIT", "dependencies": { - "mdn-data": "2.27.1", - "source-map-js": "^1.2.1" + "process-on-spawn": "^1.0.0" }, "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + "node": ">=8" } }, - "node_modules/css-what": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-7.0.0.tgz", - "integrity": "sha512-wD5oz5xibMOPHzy13CyGmogB3phdvcDaB5t0W/Nr5Z2O/agcB8YwOz6e2Lsp10pNDzBoDO9nVa3RGs/2BttpHQ==", + "node_modules/node-releases": { + "version": "2.0.36", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.36.tgz", + "integrity": "sha512-TdC8FSgHz8Mwtw9g5L4gR/Sh9XhSP/0DEkQxfEFXOpiul5IiHgHan2VhYYb6agDSfp4KuvltmGApc8HMgUrIkA==", "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } + "license": "MIT" }, - "node_modules/cssstyle": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-6.2.0.tgz", - "integrity": "sha512-Fm5NvhYathRnXNVndkUsCCuR63DCLVVwGOOwQw782coXFi5HhkXdu289l59HlXZBawsyNccXfWRYvLzcDCdDig==", + "node_modules/nopt": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-9.0.0.tgz", + "integrity": "sha512-Zhq3a+yFKrYwSBluL4H9XP3m3y5uvQkB/09CwDruCiRmR/UJYnn9W4R48ry0uGC70aeTPKLynBtscP9efFFcPw==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "@asamuzakjp/css-color": "^5.0.1", - "@csstools/css-syntax-patches-for-csstree": "^1.0.28", - "css-tree": "^3.1.0", - "lru-cache": "^11.2.6" + "abbrev": "^4.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" }, "engines": { - "node": ">=20" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/cssstyle/node_modules/lru-cache": { - "version": "11.2.7", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.7.tgz", - "integrity": "sha512-aY/R+aEsRelme17KGQa/1ZSIpLpNYYrhcrepKTZgE+W3WM16YMCaPwOHLHsmopZHELU0Ojin1lPVxKR0MihncA==", + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true, - "license": "BlueOak-1.0.0", + "license": "MIT", "engines": { - "node": "20 || >=22" + "node": ">=0.10.0" } }, - "node_modules/data-urls": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-7.0.0.tgz", - "integrity": "sha512-23XHcCF+coGYevirZceTVD7NdJOqVn+49IHyxgszm+JIiHLoB2TkmPtsYkNWT1pvRSGkc35L6NHs0yHkN2SumA==", + "node_modules/npm-bundled": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-5.0.0.tgz", + "integrity": "sha512-JLSpbzh6UUXIEoqPsYBvVNVmyrjVZ1fzEFbqxKkTJQkWBO3xFzFT+KDnSKQWwOQNbuWRwt5LSD6HOTLGIWzfrw==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "whatwg-mimetype": "^5.0.0", - "whatwg-url": "^16.0.0" + "npm-normalize-package-bin": "^5.0.0" }, "engines": { - "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "license": "MIT", + "node_modules/npm-install-checks": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-8.0.0.tgz", + "integrity": "sha512-ScAUdMpyzkbpxoNekQ3tNRdFI8SJ86wgKZSQZdUxT+bj0wVFpsEMWnkXP0twVe1gJyNF5apBWDJhhIbgrIViRA==", + "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "ms": "^2.1.3" + "semver": "^7.1.1" }, "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/decimal.js": { - "version": "10.6.0", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.6.0.tgz", - "integrity": "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==", + "node_modules/npm-normalize-package-bin": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-5.0.0.tgz", + "integrity": "sha512-CJi3OS4JLsNMmr2u07OJlhcrPxCeOeP/4xq67aWNai6TNWWbTrlNDgl8NcFKVlcBKp18GPj+EzbNIgrBfZhsag==", "dev": true, - "license": "MIT" + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "node_modules/npm-package-arg": { + "version": "13.0.2", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-13.0.2.tgz", + "integrity": "sha512-IciCE3SY3uE84Ld8WZU23gAPPV9rIYod4F+rc+vJ7h7cwAJt9Vk6TVsK60ry7Uj3SRS3bqRRIGuTp9YVlk6WNA==", "dev": true, - "license": "MIT", + "license": "ISC", + "dependencies": { + "hosted-git-info": "^9.0.0", + "proc-log": "^6.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^7.0.0" + }, "engines": { - "node": ">= 0.8" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/detect-libc": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", - "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "node_modules/npm-packlist": { + "version": "10.0.4", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-10.0.4.tgz", + "integrity": "sha512-uMW73iajD8hiH4ZBxEV3HC+eTnppIqwakjOYuvgddnalIw2lJguKviK1pcUJDlIWm1wSJkchpDZDSVVsZEYRng==", "dev": true, - "license": "Apache-2.0", + "license": "ISC", + "dependencies": { + "ignore-walk": "^8.0.0", + "proc-log": "^6.0.0" + }, "engines": { - "node": ">=8" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/dom-serializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "node_modules/npm-pick-manifest": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-11.0.3.tgz", + "integrity": "sha512-buzyCfeoGY/PxKqmBqn1IUJrZnUi1VVJTdSSRPGI60tJdUhUoSQFhs0zycJokDdOznQentgrpf8LayEHyyYlqQ==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" + "npm-install-checks": "^8.0.0", + "npm-normalize-package-bin": "^5.0.0", + "npm-package-arg": "^13.0.0", + "semver": "^7.3.5" }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + "engines": { + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "node_modules/npm-registry-fetch": { + "version": "19.1.1", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-19.1.1.tgz", + "integrity": "sha512-TakBap6OM1w0H73VZVDf44iFXsOS3h+L4wVMXmbWOQroZgFhMch0juN6XSzBNlD965yIKvWg2dfu7NSiaYLxtw==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "license": "BSD-2-Clause" + "license": "ISC", + "dependencies": { + "@npmcli/redact": "^4.0.0", + "jsonparse": "^1.3.1", + "make-fetch-happen": "^15.0.0", + "minipass": "^7.0.2", + "minipass-fetch": "^5.0.0", + "minizlib": "^3.0.1", + "npm-package-arg": "^13.0.0", + "proc-log": "^6.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } }, - "node_modules/domhandler": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "domelementtype": "^2.3.0" + "path-key": "^3.0.0" }, "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" + "node": ">=8" } }, - "node_modules/domutils": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", - "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", "dev": true, "license": "BSD-2-Clause", "dependencies": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3" + "boolbase": "^1.0.0" }, "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" + "url": "https://github.com/fb55/nth-check?sponsor=1" } }, - "node_modules/dunder-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "node_modules/nyc": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/nyc/-/nyc-18.0.0.tgz", + "integrity": "sha512-G5UyHinFkB1BxqGTrmZdB6uIYH0+v7ZnVssuflUDi+J+RhKWyAhRT1RCehBSI6jLFLuUUgFDyLt49mUtdO1XeQ==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "es-errors": "^1.3.0", - "gopd": "^1.2.0" + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "caching-transform": "^4.0.0", + "convert-source-map": "^1.7.0", + "decamelize": "^1.2.0", + "find-cache-dir": "^3.2.0", + "find-up": "^4.1.0", + "foreground-child": "^3.3.0", + "get-package-type": "^0.1.0", + "glob": "^13.0.6", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-hook": "^3.0.0", + "istanbul-lib-instrument": "^6.0.2", + "istanbul-lib-processinfo": "^3.0.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.0.2", + "make-dir": "^3.0.0", + "node-preload": "^0.2.1", + "p-map": "^3.0.0", + "process-on-spawn": "^1.0.0", + "resolve-from": "^5.0.0", + "rimraf": "^6.1.3", + "signal-exit": "^3.0.2", + "spawn-wrap": "^3.0.0", + "test-exclude": "^8.0.0", + "yargs": "^15.0.2" + }, + "bin": { + "nyc": "bin/nyc.js" }, "engines": { - "node": ">= 0.4" + "node": "20 || >=22" } }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "node_modules/nyc/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">=8" + } }, - "node_modules/electron-to-chromium": { - "version": "1.5.313", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.313.tgz", - "integrity": "sha512-QBMrTWEf00GXZmJyx2lbYD45jpI3TUFnNIzJ5BBc8piGUDwMPa1GV6HJWTZVvY/eiN3fSopl7NRbgGp9sZ9LTA==", + "node_modules/nyc/node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", "dev": true, - "license": "ISC" + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } }, - "node_modules/emoji-regex": { - "version": "10.6.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", - "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", + "node_modules/nyc/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true, "license": "MIT" }, - "node_modules/encodeurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "node_modules/nyc/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, "engines": { - "node": ">= 0.8" + "node": ">=8" } }, - "node_modules/engine.io-client": { - "version": "6.6.4", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.6.4.tgz", - "integrity": "sha512-+kjUJnZGwzewFDw951CDWcwj35vMNf2fcj7xQWOctq1F2i1jkDdVvdFG9kM/BEChymCH36KgjnW0NsL58JYRxw==", + "node_modules/nyc/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, "license": "MIT", - "dependencies": { - "@socket.io/component-emitter": "~3.1.0", - "debug": "~4.4.1", - "engine.io-parser": "~5.2.1", - "ws": "~8.18.3", - "xmlhttprequest-ssl": "~2.1.1" + "engines": { + "node": ">=8" } }, - "node_modules/engine.io-parser": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.3.tgz", - "integrity": "sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==", + "node_modules/nyc/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, "engines": { - "node": ">=10.0.0" + "node": ">=8" } }, - "node_modules/enhanced-resolve": { - "version": "5.20.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.20.1.tgz", - "integrity": "sha512-Qohcme7V1inbAfvjItgw0EaxVX5q2rdVEZHRBrEQdRZTssLDGsL8Lwrznl8oQ/6kuTJONLaDcGjkNP247XEhcA==", + "node_modules/nyc/node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", "dev": true, "license": "MIT", "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.3.0" + "semver": "^6.0.0" }, "engines": { - "node": ">=10.13.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "node_modules/nyc/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, "engines": { - "node": ">=0.12" + "node": ">=6" }, "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/env-paths": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "node_modules/nyc/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/environment": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz", - "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", + "node_modules/nyc/node_modules/p-map": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", + "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", "dev": true, "license": "MIT", - "engines": { - "node": ">=18" + "dependencies": { + "aggregate-error": "^3.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=8" } }, - "node_modules/err-code": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", - "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "node_modules/nyc/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, - "license": "MIT" + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } }, - "node_modules/es-define-property": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "node_modules/nyc/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/nyc/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, "engines": { - "node": ">= 0.4" + "node": ">=8" } }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "node_modules/nyc/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, "engines": { - "node": ">= 0.4" + "node": ">=8" } }, - "node_modules/es-module-lexer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.0.0.tgz", - "integrity": "sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==", - "dev": true, - "license": "MIT" - }, - "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "node_modules/nyc/node_modules/test-exclude": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-8.0.0.tgz", + "integrity": "sha512-ZOffsNrXYggvU1mDGHk54I96r26P8SyMjO5slMKSc7+IWmtB/MQKnEC2fP51imB3/pT6YK5cT5E8f+Dd9KdyOQ==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "es-errors": "^1.3.0" + "@istanbuljs/schema": "^0.1.2", + "glob": "^13.0.6", + "minimatch": "^10.2.2" }, "engines": { - "node": ">= 0.4" + "node": "20 || >=22" } }, - "node_modules/es-toolkit": { - "version": "1.45.1", - "resolved": "https://registry.npmjs.org/es-toolkit/-/es-toolkit-1.45.1.tgz", - "integrity": "sha512-/jhoOj/Fx+A+IIyDNOvO3TItGmlMKhtX8ISAHKE90c4b/k1tqaqEZ+uUqfpU8DMnW5cgNJv606zS55jGvza0Xw==", - "license": "MIT", - "workspaces": [ - "docs", - "benchmarks" - ] + "node_modules/nyc/node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true, + "license": "ISC" }, - "node_modules/esbuild": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.3.tgz", - "integrity": "sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg==", + "node_modules/nyc/node_modules/yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", "dev": true, - "hasInstallScript": true, "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" }, "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.27.3", - "@esbuild/android-arm": "0.27.3", - "@esbuild/android-arm64": "0.27.3", - "@esbuild/android-x64": "0.27.3", - "@esbuild/darwin-arm64": "0.27.3", - "@esbuild/darwin-x64": "0.27.3", - "@esbuild/freebsd-arm64": "0.27.3", - "@esbuild/freebsd-x64": "0.27.3", - "@esbuild/linux-arm": "0.27.3", - "@esbuild/linux-arm64": "0.27.3", - "@esbuild/linux-ia32": "0.27.3", - "@esbuild/linux-loong64": "0.27.3", - "@esbuild/linux-mips64el": "0.27.3", - "@esbuild/linux-ppc64": "0.27.3", - "@esbuild/linux-riscv64": "0.27.3", - "@esbuild/linux-s390x": "0.27.3", - "@esbuild/linux-x64": "0.27.3", - "@esbuild/netbsd-arm64": "0.27.3", - "@esbuild/netbsd-x64": "0.27.3", - "@esbuild/openbsd-arm64": "0.27.3", - "@esbuild/openbsd-x64": "0.27.3", - "@esbuild/openharmony-arm64": "0.27.3", - "@esbuild/sunos-x64": "0.27.3", - "@esbuild/win32-arm64": "0.27.3", - "@esbuild/win32-ia32": "0.27.3", - "@esbuild/win32-x64": "0.27.3" + "node": ">=8" } }, - "node_modules/escalade": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "node_modules/nyc/node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", "dev": true, - "license": "MIT", + "license": "ISC", + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, "engines": { "node": ">=6" } }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "dev": true, - "license": "MIT" - }, - "node_modules/estree-walker": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", - "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", "dev": true, "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", "dev": true, "license": "MIT", "engines": { - "node": ">= 0.6" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eventemitter3": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz", - "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==", + "node_modules/obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", "dev": true, "license": "MIT" }, - "node_modules/eventsource": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-3.0.7.tgz", - "integrity": "sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==", + "node_modules/obug": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/obug/-/obug-2.1.1.tgz", + "integrity": "sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==", + "dev": true, + "funding": [ + "https://github.com/sponsors/sxzz", + "https://opencollective.com/debug" + ], + "license": "MIT" + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", "dev": true, "license": "MIT", "dependencies": { - "eventsource-parser": "^3.0.1" + "ee-first": "1.1.1" }, "engines": { - "node": ">=18.0.0" + "node": ">= 0.8" } }, - "node_modules/eventsource-parser": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.0.6.tgz", - "integrity": "sha512-Vo1ab+QXPzZ4tCa8SwIHJFaSzy4R6SHf7BY79rFBDf0idraZWAkYrDjDj8uWaSm3S2TK+hJ7/t1CEmZ7jXw+pg==", + "node_modules/on-headers": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.1.0.tgz", + "integrity": "sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==", "dev": true, "license": "MIT", "engines": { - "node": ">=18.0.0" + "node": ">= 0.8" } }, - "node_modules/expect-type": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.3.0.tgz", - "integrity": "sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==", + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=12.0.0" + "license": "ISC", + "dependencies": { + "wrappy": "1" } }, - "node_modules/exponential-backoff": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.3.tgz", - "integrity": "sha512-ZgEeZXj30q+I0EN+CbSSpIyPaJ5HVQD18Z1m+u1FXbAeT94mr1zw50q4q6jiiC447Nl/YTcIYSAftiGqetwXCA==", + "node_modules/onetime": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", + "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", "dev": true, - "license": "Apache-2.0" + "license": "MIT", + "dependencies": { + "mimic-function": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "node_modules/express": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/express/-/express-5.2.1.tgz", - "integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==", + "node_modules/open": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/open/-/open-11.0.0.tgz", + "integrity": "sha512-smsWv2LzFjP03xmvFoJ331ss6h+jixfA4UUV/Bsiyuu4YJPfN+FIQGOIiv4w9/+MoHkfkJ22UIaQWRVFRfH6Vw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "accepts": "^2.0.0", - "body-parser": "^2.2.1", - "content-disposition": "^1.0.0", - "content-type": "^1.0.5", - "cookie": "^0.7.1", - "cookie-signature": "^1.2.1", - "debug": "^4.4.0", - "depd": "^2.0.0", - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "etag": "^1.8.1", - "finalhandler": "^2.1.0", - "fresh": "^2.0.0", - "http-errors": "^2.0.0", - "merge-descriptors": "^2.0.0", - "mime-types": "^3.0.0", - "on-finished": "^2.4.1", - "once": "^1.4.0", - "parseurl": "^1.3.3", - "proxy-addr": "^2.0.7", - "qs": "^6.14.0", - "range-parser": "^1.2.1", - "router": "^2.2.0", - "send": "^1.1.0", - "serve-static": "^2.2.0", - "statuses": "^2.0.1", - "type-is": "^2.0.1", - "vary": "^1.1.2" + "default-browser": "^5.4.0", + "define-lazy-prop": "^3.0.0", + "is-in-ssh": "^1.0.0", + "is-inside-container": "^1.0.0", + "powershell-utils": "^0.1.0", + "wsl-utils": "^0.3.0" }, "engines": { - "node": ">= 18" + "node": ">=20" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/express-rate-limit": { - "version": "8.3.1", - "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-8.3.1.tgz", - "integrity": "sha512-D1dKN+cmyPWuvB+G2SREQDzPY1agpBIcTa9sJxOPMCNeH3gwzhqJRDWCXW3gg0y//+LQ/8j52JbMROWyrKdMdw==", + "node_modules/opener": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", + "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", + "dev": true, + "license": "(WTFPL OR MIT)", + "bin": { + "opener": "bin/opener-bin.js" + } + }, + "node_modules/ora": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-9.3.0.tgz", + "integrity": "sha512-lBX72MWFduWEf7v7uWf5DHp9Jn5BI8bNPGuFgtXMmr2uDz2Gz2749y3am3agSDdkhHPHYmmxEGSKH85ZLGzgXw==", "dev": true, "license": "MIT", "dependencies": { - "ip-address": "10.1.0" + "chalk": "^5.6.2", + "cli-cursor": "^5.0.0", + "cli-spinners": "^3.2.0", + "is-interactive": "^2.0.0", + "is-unicode-supported": "^2.1.0", + "log-symbols": "^7.0.1", + "stdin-discarder": "^0.3.1", + "string-width": "^8.1.0" }, "engines": { - "node": ">= 16" + "node": ">=20" }, "funding": { - "url": "https://github.com/sponsors/express-rate-limit" - }, - "peerDependencies": { - "express": ">= 4.11" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "node_modules/ordered-binary": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/ordered-binary/-/ordered-binary-1.6.1.tgz", + "integrity": "sha512-QkCdPooczexPLiXIrbVOPYkR3VO3T6v2OyKRkR1Xbhpy7/LAVXwahnRCgRp78Oe/Ehf0C/HATAxfSr6eA1oX+w==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/ospath": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/ospath/-/ospath-1.2.2.tgz", + "integrity": "sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA==", "dev": true, "license": "MIT" }, - "node_modules/fast-uri": { + "node_modules/p-limit": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", - "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fastify" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fastify" - } - ], - "license": "BSD-3-Clause" - }, - "node_modules/fdir": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", - "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "license": "MIT", - "engines": { - "node": ">=12.0.0" + "dependencies": { + "yocto-queue": "^0.1.0" }, - "peerDependencies": { - "picomatch": "^3 || ^4" + "engines": { + "node": ">=10" }, - "peerDependenciesMeta": { - "picomatch": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/finalhandler": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.1.tgz", - "integrity": "sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==", + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, "license": "MIT", "dependencies": { - "debug": "^4.4.0", - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "on-finished": "^2.4.1", - "parseurl": "^1.3.3", - "statuses": "^2.0.1" + "p-limit": "^3.0.2" }, "engines": { - "node": ">= 18.0.0" + "node": ">=10" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "node_modules/p-map": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.4.tgz", + "integrity": "sha512-tkAQEw8ysMzmkhgw8k+1U/iPhWNhykKnSk4Rd5zLoPJCuJaGRPo6YposrZgaxHKzDHdDWWZvE/Sk7hsL2X/CpQ==", "dev": true, "license": "MIT", "engines": { - "node": ">= 0.6" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", - "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", + "node_modules/p-retry": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-6.2.1.tgz", + "integrity": "sha512-hEt02O4hUct5wtwg4H4KcWgDdm+l1bOaEy/hWzd8xtXB9BqxTWBBhb+2ImAtH4Cv4rPjV76xN3Zumqk3k3AhhQ==", "dev": true, "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/fs-minipass": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", - "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", - "dev": true, - "license": "ISC", "dependencies": { - "minipass": "^7.0.3" + "@types/retry": "0.12.2", + "is-network-error": "^1.0.0", + "retry": "^0.13.1" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true, - "hasInstallScript": true, "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + "node": ">=6" } }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "node_modules/package-hash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-4.0.0.tgz", + "integrity": "sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==", "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" + "license": "ISC", + "dependencies": { + "graceful-fs": "^4.1.15", + "hasha": "^5.0.0", + "lodash.flattendeep": "^4.4.0", + "release-zalgo": "^1.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } + "license": "BlueOak-1.0.0" }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "node_modules/pacote": { + "version": "21.3.1", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-21.3.1.tgz", + "integrity": "sha512-O0EDXi85LF4AzdjG74GUwEArhdvawi/YOHcsW6IijKNj7wm8IvEWNF5GnfuxNpQ/ZpO3L37+v8hqdVh8GgWYhg==", "dev": true, "license": "ISC", + "dependencies": { + "@npmcli/git": "^7.0.0", + "@npmcli/installed-package-contents": "^4.0.0", + "@npmcli/package-json": "^7.0.0", + "@npmcli/promise-spawn": "^9.0.0", + "@npmcli/run-script": "^10.0.0", + "cacache": "^20.0.0", + "fs-minipass": "^3.0.0", + "minipass": "^7.0.2", + "npm-package-arg": "^13.0.0", + "npm-packlist": "^10.0.1", + "npm-pick-manifest": "^11.0.1", + "npm-registry-fetch": "^19.0.0", + "proc-log": "^6.0.0", + "promise-retry": "^2.0.1", + "sigstore": "^4.0.0", + "ssri": "^13.0.0", + "tar": "^7.4.3" + }, + "bin": { + "pacote": "bin/index.js" + }, "engines": { - "node": "6.* || 8.* || >= 10.*" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/get-east-asian-width": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.5.0.tgz", - "integrity": "sha512-CQ+bEO+Tva/qlmw24dCejulK5pMzVnUOFOijVogd3KQs07HnRIgp8TGipvCCRT06xeYEbpbgwaCxglFyiuIcmA==", + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, "license": "MIT", - "engines": { - "node": ">=18" + "dependencies": { + "callsites": "^3.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=6" } }, - "node_modules/get-intrinsic": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", - "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dev": true, "license": "MIT", "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "function-bind": "^1.1.2", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "math-intrinsics": "^1.1.0" + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" }, "engines": { - "node": ">= 0.4" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/get-proto": { + "node_modules/parse-json/node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true, + "license": "MIT" + }, + "node_modules/parse-node-version": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", + "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", "dev": true, "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/parse5": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-8.0.0.tgz", + "integrity": "sha512-9m4m5GSgXjL4AjumKzq1Fgfp3Z8rsvjRNbnkVwfu2ImRqE5D0LnY2QfDen18FSY9C573YU5XxSapdHZTZ2WolA==", + "license": "MIT", "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" + "entities": "^6.0.0" }, - "engines": { - "node": ">= 0.4" + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" } }, - "node_modules/glob": { - "version": "13.0.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.6.tgz", - "integrity": "sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==", + "node_modules/parse5-html-rewriting-stream": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/parse5-html-rewriting-stream/-/parse5-html-rewriting-stream-8.0.0.tgz", + "integrity": "sha512-wzh11mj8KKkno1pZEu+l2EVeWsuKDfR5KNWZOTsslfUX8lPDZx77m9T0kIoAVkFtD1nx6YF8oh4BnPHvxMtNMw==", "dev": true, - "license": "BlueOak-1.0.0", + "license": "MIT", "dependencies": { - "minimatch": "^10.2.2", - "minipass": "^7.1.3", - "path-scurry": "^2.0.2" - }, - "engines": { - "node": "18 || 20 || >=22" + "entities": "^6.0.0", + "parse5": "^8.0.0", + "parse5-sax-parser": "^8.0.0" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/inikulin/parse5?sponsor=1" } }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "node_modules/parse5-html-rewriting-stream/node_modules/entities": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", "dev": true, - "license": "BSD-2-Clause" + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "node_modules/parse5-sax-parser": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/parse5-sax-parser/-/parse5-sax-parser-8.0.0.tgz", + "integrity": "sha512-/dQ8UzHZwnrzs3EvDj6IkKrD/jIZyTlB+8XrHJvcjNgRdmWruNdN9i9RK/JtxakmlUdPwKubKPTCqvbTgzGhrw==", "dev": true, "license": "MIT", - "engines": { - "node": ">= 0.4" + "dependencies": { + "parse5": "^8.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/inikulin/parse5?sponsor=1" } }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "license": "MIT", + "node_modules/parse5/node_modules/entities": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "license": "BSD-2-Clause", "engines": { - "node": ">=8" + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" } }, - "node_modules/has-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", "dev": true, "license": "MIT", "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 0.8" } }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, "engines": { - "node": ">= 0.4" + "node": ">=8" } }, - "node_modules/hono": { - "version": "4.12.8", - "resolved": "https://registry.npmjs.org/hono/-/hono-4.12.8.tgz", - "integrity": "sha512-VJCEvtrezO1IAR+kqEYnxUOoStaQPGrCmX3j4wDTNOcD1uRPFpGlwQUIW8niPuvHXaTUxeOUl5MMDGrl+tmO9A==", + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, "license": "MIT", - "peer": true, "engines": { - "node": ">=16.9.0" + "node": ">=8" } }, - "node_modules/hosted-git-info": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-9.0.2.tgz", - "integrity": "sha512-M422h7o/BR3rmCQ8UHi7cyyMqKltdP9Uo+J2fXK+RSAY+wTcKOIRyhTuKv4qn+DJf3g+PL890AzId5KZpX+CBg==", + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true, - "license": "ISC", + "license": "MIT" + }, + "node_modules/path-scurry": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.2.tgz", + "integrity": "sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==", + "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { - "lru-cache": "^11.1.0" + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/hosted-git-info/node_modules/lru-cache": { + "node_modules/path-scurry/node_modules/lru-cache": { "version": "11.2.7", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.7.tgz", "integrity": "sha512-aY/R+aEsRelme17KGQa/1ZSIpLpNYYrhcrepKTZgE+W3WM16YMCaPwOHLHsmopZHELU0Ojin1lPVxKR0MihncA==", @@ -5976,769 +15422,842 @@ "node": "20 || >=22" } }, - "node_modules/html-encoding-sniffer": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-6.0.0.tgz", - "integrity": "sha512-CV9TW3Y3f8/wT0BRFc1/KAVQ3TUHiXmaAb6VW9vtiMFf7SLoMd1PdAc4W3KFOFETBJUb90KatHqlsZMWV+R9Gg==", + "node_modules/path-to-regexp": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.3.0.tgz", + "integrity": "sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==", "dev": true, "license": "MIT", - "dependencies": { - "@exodus/bytes": "^1.6.0" - }, - "engines": { - "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", "dev": true, "license": "MIT" }, - "node_modules/htmlparser2": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-10.1.0.tgz", - "integrity": "sha512-VTZkM9GWRAtEpveh7MSF6SjjrpNVNNVJfFup7xTY3UpFtm67foy9HDVXneLtFVt4pMz5kZtgNcvCniNFb1hlEQ==", + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", "dev": true, - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "license": "MIT", - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.2.2", - "entities": "^7.0.1" - } + "license": "MIT" }, - "node_modules/htmlparser2/node_modules/entities": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-7.0.1.tgz", - "integrity": "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==", + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } + "license": "MIT" }, - "node_modules/http-cache-semantics": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", - "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==", + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", "dev": true, - "license": "BSD-2-Clause" + "license": "ISC" }, - "node_modules/http-errors": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", - "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", + "node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, "license": "MIT", - "dependencies": { - "depd": "~2.0.0", - "inherits": "~2.0.4", - "setprototypeof": "~1.2.0", - "statuses": "~2.0.2", - "toidentifier": "~1.0.1" - }, "engines": { - "node": ">= 0.8" + "node": ">=12" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/http-proxy-agent": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", - "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", "dev": true, "license": "MIT", - "dependencies": { - "agent-base": "^7.1.0", - "debug": "^4.3.4" - }, "engines": { - "node": ">= 14" + "node": ">=0.10.0" } }, - "node_modules/https-proxy-agent": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", - "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "node_modules/piscina": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/piscina/-/piscina-5.1.4.tgz", + "integrity": "sha512-7uU4ZnKeQq22t9AsmHGD2w4OYQGonwFnTypDypaWi7Qr2EvQIFVtG8J5D/3bE7W123Wdc9+v4CZDu5hJXVCtBg==", "dev": true, "license": "MIT", - "dependencies": { - "agent-base": "^7.1.2", - "debug": "4" - }, "engines": { - "node": ">= 14" + "node": ">=20.x" + }, + "optionalDependencies": { + "@napi-rs/nice": "^1.0.4" } }, - "node_modules/iconv-lite": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz", - "integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==", + "node_modules/pkce-challenge": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/pkce-challenge/-/pkce-challenge-5.0.1.tgz", + "integrity": "sha512-wQ0b/W4Fr01qtpHlqSqspcj3EhBvimsdh0KlHhH8HRZnMsEa0ea2fTULOXOS9ccQr3om+GcGRk4e+isrZWV8qQ==", "dev": true, "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, "engines": { - "node": ">=0.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" + "node": ">=16.20.0" } }, - "node_modules/ignore-walk": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-8.0.0.tgz", - "integrity": "sha512-FCeMZT4NiRQGh+YkeKMtWrOmBgWjHjMJ26WQWrRQyoyzqevdaGSakUaJW5xQYmjLlUVk2qUnCjYVBax9EKKg8A==", + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "minimatch": "^10.0.3" + "find-up": "^4.0.0" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=8" } }, - "node_modules/immutable": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.5.tgz", - "integrity": "sha512-t7xcm2siw+hlUM68I+UEOK+z84RzmN59as9DZ7P1l0994DKUWV7UXBMQZVxaoMSRQ+PBZbHCOoBt7a2wxOMt+A==", - "dev": true, - "license": "MIT" - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "node_modules/pkg-dir/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, "engines": { - "node": ">=0.8.19" + "node": ">=8" } }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/ini": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-6.0.0.tgz", - "integrity": "sha512-IBTdIkzZNOpqm7q3dRqJvMaldXjDHWkEDfrwGEQTs5eaQMWV+djAhR+wahyNNMAa+qpbDUhBMVt4ZKNwpPm7xQ==", + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, - "license": "ISC", + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=8" } }, - "node_modules/ip-address": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.1.0.tgz", - "integrity": "sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==", + "node_modules/pkg-dir/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, "engines": { - "node": ">= 12" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, "engines": { - "node": ">= 0.10" + "node": ">=8" } }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "node_modules/pkijs": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/pkijs/-/pkijs-3.4.0.tgz", + "integrity": "sha512-emEcLuomt2j03vxD54giVB4SxTjnsqkU692xZOZXHDVoYyypEm+b3jpiTcc+Cf+myooc+/Ly0z01jqeNHVgJGw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@noble/hashes": "1.4.0", + "asn1js": "^3.0.6", + "bytestreamjs": "^2.0.1", + "pvtsutils": "^1.3.6", + "pvutils": "^1.1.3", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/pkijs/node_modules/@noble/hashes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", + "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", "dev": true, "license": "MIT", - "optional": true, "engines": { - "node": ">=0.10.0" + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/is-fullwidth-code-point": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.1.0.tgz", - "integrity": "sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==", + "node_modules/portfinder": { + "version": "1.0.38", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.38.tgz", + "integrity": "sha512-rEwq/ZHlJIKw++XtLAO8PPuOQA/zaPJOZJ37BVuN97nLpMJeuDVLVGRwbFoBgLudgdTMP2hdRJP++H+8QOA3vg==", "dev": true, "license": "MIT", "dependencies": { - "get-east-asian-width": "^1.3.1" + "async": "^3.2.6", + "debug": "^4.3.6" }, "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 10.12" } }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "node_modules/postcss": { + "version": "8.5.8", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.8.tgz", + "integrity": "sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==", "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "license": "MIT", - "optional": true, "dependencies": { - "is-extglob": "^2.1.1" + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" }, "engines": { - "node": ">=0.10.0" + "node": "^10 || ^12 || >=14" } }, - "node_modules/is-interactive": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", - "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==", + "node_modules/postcss-loader": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-8.2.0.tgz", + "integrity": "sha512-tHX+RkpsXVcc7st4dSdDGliI+r4aAQDuv+v3vFYHixb6YgjreG5AG4SEB0kDK8u2s6htqEEpKlkhSBUTvWKYnA==", "dev": true, "license": "MIT", + "dependencies": { + "cosmiconfig": "^9.0.0", + "jiti": "^2.5.1", + "semver": "^7.6.2" + }, "engines": { - "node": ">=12" + "node": ">= 18.12.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "@rspack/core": "0.x || 1.x", + "postcss": "^7.0.0 || ^8.0.1", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } } }, - "node_modules/is-potential-custom-element-name": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", - "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "node_modules/postcss-media-query-parser": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz", + "integrity": "sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==", "dev": true, "license": "MIT" }, - "node_modules/is-promise": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", - "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", + "node_modules/postcss-modules-extract-imports": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz", + "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==", "dev": true, - "license": "MIT" + "license": "ISC", + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } }, - "node_modules/is-unicode-supported": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz", - "integrity": "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==", + "node_modules/postcss-modules-local-by-default": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.2.0.tgz", + "integrity": "sha512-5kcJm/zk+GJDSfw+V/42fJ5fhjL5YbFDl8nVdXkJPLLW+Vf9mTD5Xe0wqIaDnLuL2U6cDNpTr+UQ+v2HWIBhzw==", "dev": true, "license": "MIT", + "dependencies": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^7.0.0", + "postcss-value-parser": "^4.1.0" + }, "engines": { - "node": ">=18" + "node": "^10 || ^12 || >= 14" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "postcss": "^8.1.0" } }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true, - "license": "ISC" - }, - "node_modules/istanbul-lib-coverage": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", - "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "node_modules/postcss-modules-scope": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.1.tgz", + "integrity": "sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA==", "dev": true, - "license": "BSD-3-Clause", + "license": "ISC", + "dependencies": { + "postcss-selector-parser": "^7.0.0" + }, "engines": { - "node": ">=8" + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" } }, - "node_modules/istanbul-lib-instrument": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", - "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", + "node_modules/postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", "dev": true, - "license": "BSD-3-Clause", + "license": "ISC", "dependencies": { - "@babel/core": "^7.23.9", - "@babel/parser": "^7.23.9", - "@istanbuljs/schema": "^0.1.3", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^7.5.4" + "icss-utils": "^5.0.0" }, "engines": { - "node": ">=10" + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" } }, - "node_modules/istanbul-lib-report": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", - "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "node_modules/postcss-safe-parser": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-7.0.1.tgz", + "integrity": "sha512-0AioNCJZ2DPYz5ABT6bddIqlhgwhpHZ/l65YAYo0BCIn0xiDpsnTHz0gnoTGk0OXZW0JRs+cDwL8u/teRdz+8A==", "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^4.0.0", - "supports-color": "^7.1.0" - }, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss-safe-parser" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", "engines": { - "node": ">=10" + "node": ">=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/istanbul-reports": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.2.0.tgz", - "integrity": "sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==", + "node_modules/postcss-selector-parser": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", + "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", "dev": true, - "license": "BSD-3-Clause", + "license": "MIT", "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" }, "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/jiti": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz", - "integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==", + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/powershell-utils": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/powershell-utils/-/powershell-utils-0.1.0.tgz", + "integrity": "sha512-dM0jVuXJPsDN6DvRpea484tCUaMiXWjuCn++HGTqUWzGDjv5tZkEZldAJ/UMlqRYGFrD/etByo4/xOuC/snX2A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/prettier": { + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.8.1.tgz", + "integrity": "sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==", "dev": true, "license": "MIT", "bin": { - "jiti": "lib/jiti-cli.mjs" + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/pretty-bytes": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", + "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/proc-log": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-6.1.0.tgz", + "integrity": "sha512-iG+GYldRf2BQ0UDUAd6JQ/RwzaQy6mXmsk/IzlYyal4A4SNFw54MeH4/tLkF4I5WoWG9SQwuqWzS99jaFQHBuQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/jose": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/jose/-/jose-6.2.1.tgz", - "integrity": "sha512-jUaKr1yrbfaImV7R2TN/b3IcZzsw38/chqMpo2XJ7i2F8AfM/lA4G1goC3JVEwg0H7UldTmSt3P68nt31W7/mw==", + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", "dev": true, "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/panva" + "engines": { + "node": ">= 0.6.0" } }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true, "license": "MIT" }, - "node_modules/jsdom": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-28.1.0.tgz", - "integrity": "sha512-0+MoQNYyr2rBHqO1xilltfDjV9G7ymYGlAUazgcDLQaUf8JDHbuGwsxN6U9qWaElZ4w1B2r7yEGIL3GdeW3Rug==", + "node_modules/process-on-spawn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.1.0.tgz", + "integrity": "sha512-JOnOPQ/8TZgjs1JIH/m9ni7FfimjNa/PRx7y/Wb5qdItsnhO0jE4AT7fC0HjC28DUQWDr50dwSYZLdRMlqDq3Q==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "@acemir/cssom": "^0.9.31", - "@asamuzakjp/dom-selector": "^6.8.1", - "@bramus/specificity": "^2.4.2", - "@exodus/bytes": "^1.11.0", - "cssstyle": "^6.0.1", - "data-urls": "^7.0.0", - "decimal.js": "^10.6.0", - "html-encoding-sniffer": "^6.0.0", - "http-proxy-agent": "^7.0.2", - "https-proxy-agent": "^7.0.6", - "is-potential-custom-element-name": "^1.0.1", - "parse5": "^8.0.0", - "saxes": "^6.0.0", - "symbol-tree": "^3.2.4", - "tough-cookie": "^6.0.0", - "undici": "^7.21.0", - "w3c-xmlserializer": "^5.0.0", - "webidl-conversions": "^8.0.1", - "whatwg-mimetype": "^5.0.0", - "whatwg-url": "^16.0.0", - "xml-name-validator": "^5.0.0" + "fromentries": "^1.2.0" }, "engines": { - "node": "^20.19.0 || ^22.12.0 || >=24.0.0" - }, - "peerDependencies": { - "canvas": "^3.0.0" - }, - "peerDependenciesMeta": { - "canvas": { - "optional": true - } + "node": ">=8" } }, - "node_modules/jsesc": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", - "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "node_modules/promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", "dev": true, "license": "MIT", - "bin": { - "jsesc": "bin/jsesc" + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" }, "engines": { - "node": ">=6" + "node": ">=10" } }, - "node_modules/json-parse-even-better-errors": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-5.0.0.tgz", - "integrity": "sha512-ZF1nxZ28VhQouRWhUcVlUIN3qwSgPuswK05s/HIaoetAoE/9tngVmCHjSxmSQPav1nd+lPtTL0YZ/2AFdR/iYQ==", + "node_modules/promise-retry/node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", "dev": true, "license": "MIT", "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">= 4" } }, - "node_modules/json-schema-traverse": { + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-from-env": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz", + "integrity": "sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A==", "dev": true, "license": "MIT" }, - "node_modules/json-schema-typed": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/json-schema-typed/-/json-schema-typed-8.0.2.tgz", - "integrity": "sha512-fQhoXdcvc3V28x7C7BMs4P5+kNlgUURe2jmUT1T//oBRMDrqy1QPelJimwZGo7Hg9VPV3EQV5Bnq4hbFy2vetA==", + "node_modules/prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", "dev": true, - "license": "BSD-2-Clause" + "license": "MIT", + "optional": true }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "node_modules/pump": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.4.tgz", + "integrity": "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "dev": true, "license": "MIT", - "bin": { - "json5": "lib/cli.js" - }, "engines": { "node": ">=6" } }, - "node_modules/jsonc-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz", - "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==", + "node_modules/pvtsutils": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/pvtsutils/-/pvtsutils-1.3.6.tgz", + "integrity": "sha512-PLgQXQ6H2FWCaeRak8vvk1GW462lMxB5s3Jm673N82zI4vqtVUPuZdffdZbPDFRoU8kAhItWFtPCWiPpp4/EDg==", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "tslib": "^2.8.1" + } }, - "node_modules/jsonparse": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", + "node_modules/pvutils": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/pvutils/-/pvutils-1.1.5.tgz", + "integrity": "sha512-KTqnxsgGiQ6ZAzZCVlJH5eOjSnvlyEgx1m8bkRJfOhmGRqfo5KLvmAlACQkrjEtOQ4B7wF9TdSLIs9O90MX9xA==", "dev": true, - "engines": [ - "node >= 0.2.0" - ], - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">=16.0.0" + } }, - "node_modules/lightningcss": { - "version": "1.31.1", - "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.31.1.tgz", - "integrity": "sha512-l51N2r93WmGUye3WuFoN5k10zyvrVs0qfKBhyC5ogUQ6Ew6JUSswh78mbSO+IU3nTWsyOArqPCcShdQSadghBQ==", + "node_modules/qs": { + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.0.tgz", + "integrity": "sha512-mAZTtNCeetKMH+pSjrb76NAM8V9a05I9aBZOHztWy/UqcJdQYNsf59vrRKWnojAT9Y+GbIvoTBC++CPHqpDBhQ==", "dev": true, - "license": "MPL-2.0", + "license": "BSD-3-Clause", "dependencies": { - "detect-libc": "^2.0.3" + "side-channel": "^1.1.0" }, "engines": { - "node": ">= 12.0.0" + "node": ">=0.6" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - }, - "optionalDependencies": { - "lightningcss-android-arm64": "1.31.1", - "lightningcss-darwin-arm64": "1.31.1", - "lightningcss-darwin-x64": "1.31.1", - "lightningcss-freebsd-x64": "1.31.1", - "lightningcss-linux-arm-gnueabihf": "1.31.1", - "lightningcss-linux-arm64-gnu": "1.31.1", - "lightningcss-linux-arm64-musl": "1.31.1", - "lightningcss-linux-x64-gnu": "1.31.1", - "lightningcss-linux-x64-musl": "1.31.1", - "lightningcss-win32-arm64-msvc": "1.31.1", - "lightningcss-win32-x64-msvc": "1.31.1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/lightningcss-android-arm64": { - "version": "1.31.1", - "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.31.1.tgz", - "integrity": "sha512-HXJF3x8w9nQ4jbXRiNppBCqeZPIAfUo8zE/kOEGbW5NZvGc/K7nMxbhIr+YlFlHW5mpbg/YFPdbnCh1wAXCKFg==", - "cpu": [ - "arm64" - ], + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "android" - ], + "license": "MIT", "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "node": ">= 0.6" } }, - "node_modules/lightningcss-darwin-arm64": { - "version": "1.31.1", - "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.31.1.tgz", - "integrity": "sha512-02uTEqf3vIfNMq3h/z2cJfcOXnQ0GRwQrkmPafhueLb2h7mqEidiCzkE4gBMEH65abHRiQvhdcQ+aP0D0g67sg==", - "cpu": [ - "arm64" - ], + "node_modules/raw-body": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.2.tgz", + "integrity": "sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==", "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 12.0.0" + "license": "MIT", + "dependencies": { + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.7.0", + "unpipe": "~1.0.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "engines": { + "node": ">= 0.10" } }, - "node_modules/lightningcss-darwin-x64": { - "version": "1.31.1", - "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.31.1.tgz", - "integrity": "sha512-1ObhyoCY+tGxtsz1lSx5NXCj3nirk0Y0kB/g8B8DT+sSx4G9djitg9ejFnjb3gJNWo7qXH4DIy2SUHvpoFwfTA==", - "cpu": [ - "x64" - ], + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 12.0.0" + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "engines": { + "node": ">= 6" } }, - "node_modules/lightningcss-freebsd-x64": { - "version": "1.31.1", - "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.31.1.tgz", - "integrity": "sha512-1RINmQKAItO6ISxYgPwszQE1BrsVU5aB45ho6O42mu96UiZBxEXsuQ7cJW4zs4CEodPUioj/QrXW1r9pLUM74A==", - "cpu": [ - "x64" - ], + "node_modules/readdirp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-5.0.0.tgz", + "integrity": "sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==", "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "freebsd" - ], + "license": "MIT", "engines": { - "node": ">= 12.0.0" + "node": ">= 20.19.0" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "type": "individual", + "url": "https://paulmillr.com/funding/" } }, - "node_modules/lightningcss-linux-arm-gnueabihf": { - "version": "1.31.1", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.31.1.tgz", - "integrity": "sha512-OOCm2//MZJ87CdDK62rZIu+aw9gBv4azMJuA8/KB74wmfS3lnC4yoPHm0uXZ/dvNNHmnZnB8XLAZzObeG0nS1g==", - "cpu": [ - "arm" - ], + "node_modules/reflect-metadata": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz", + "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==", "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" + "license": "Apache-2.0" + }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true, + "license": "MIT" + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.2.tgz", + "integrity": "sha512-m03P+zhBeQd1RGnYxrGyDAPpWX/epKirLrp8e3qevZdVkKtnCrjjWczIbYc8+xd6vcTStVlqfycTx1KR4LOr0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerate": "^1.4.2" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "engines": { + "node": ">=4" } }, - "node_modules/lightningcss-linux-arm64-gnu": { - "version": "1.31.1", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.31.1.tgz", - "integrity": "sha512-WKyLWztD71rTnou4xAD5kQT+982wvca7E6QoLpoawZ1gP9JM0GJj4Tp5jMUh9B3AitHbRZ2/H3W5xQmdEOUlLg==", - "cpu": [ - "arm64" - ], + "node_modules/regex-parser": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.3.1.tgz", + "integrity": "sha512-yXLRqatcCuKtVHsWrNg0JL3l1zGfdXeEvDa0bdu4tCDQw0RpMDZsqbkyRTUnKMR0tXF627V2oEWjBEaEdqTwtQ==", "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], + "license": "MIT" + }, + "node_modules/regexpu-core": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.4.0.tgz", + "integrity": "sha512-0ghuzq67LI9bLXpOX/ISfve/Mq33a4aFRzoQYhnnok1JOFpmE/A2TBGkNVenOGEeSBCjIiWcc6MVOG5HEQv0sA==", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.2.2", + "regjsgen": "^0.8.0", + "regjsparser": "^0.13.0", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.2.1" + }, "engines": { - "node": ">= 12.0.0" + "node": ">=4" + } + }, + "node_modules/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/regjsparser": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.13.1.tgz", + "integrity": "sha512-dLsljMd9sqwRkby8zhO1gSg3PnJIBFid8f4CQj/sXx+7cKx+E7u0PKhZ+U4wmhx7EfmtvnA318oVaIkAB1lRJw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "jsesc": "~3.1.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "bin": { + "regjsparser": "bin/parser" } }, - "node_modules/lightningcss-linux-arm64-musl": { - "version": "1.31.1", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.31.1.tgz", - "integrity": "sha512-mVZ7Pg2zIbe3XlNbZJdjs86YViQFoJSpc41CbVmKBPiGmC4YrfeOyz65ms2qpAobVd7WQsbW4PdsSJEMymyIMg==", - "cpu": [ - "arm64" - ], + "node_modules/release-zalgo": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", + "integrity": "sha512-gUAyHVHPPC5wdqX/LG4LWtRYtgjxyX78oanFNTMMyFEfOqdC54s3eE82imuWKbOeqYht2CrNf64Qb8vgmmtZGA==", "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" + "license": "ISC", + "dependencies": { + "es6-error": "^4.0.1" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "engines": { + "node": ">=4" } }, - "node_modules/lightningcss-linux-x64-gnu": { - "version": "1.31.1", - "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.31.1.tgz", - "integrity": "sha512-xGlFWRMl+0KvUhgySdIaReQdB4FNudfUTARn7q0hh/V67PVGCs3ADFjw+6++kG1RNd0zdGRlEKa+T13/tQjPMA==", - "cpu": [ - "x64" - ], + "node_modules/request-progress": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-3.0.0.tgz", + "integrity": "sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg==", "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], + "license": "MIT", + "dependencies": { + "throttleit": "^1.0.0" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "license": "MIT", "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "node": ">=0.10.0" } }, - "node_modules/lightningcss-linux-x64-musl": { - "version": "1.31.1", - "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.31.1.tgz", - "integrity": "sha512-eowF8PrKHw9LpoZii5tdZwnBcYDxRw2rRCyvAXLi34iyeYfqCQNA9rmUM0ce62NlPhCvof1+9ivRaTY6pSKDaA==", - "cpu": [ - "x64" - ], + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], + "license": "MIT", "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "node": ">=0.10.0" } }, - "node_modules/lightningcss-win32-arm64-msvc": { - "version": "1.31.1", - "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.31.1.tgz", - "integrity": "sha512-aJReEbSEQzx1uBlQizAOBSjcmr9dCdL3XuC/6HLXAxmtErsj2ICo5yYggg1qOODQMtnjNQv2UHb9NpOuFtYe4w==", - "cpu": [ - "arm64" - ], + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "win32" - ], + "license": "ISC" + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/resolve": { + "version": "1.22.11", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", + "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, "engines": { - "node": ">= 12.0.0" + "node": ">= 0.4" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/lightningcss-win32-x64-msvc": { - "version": "1.31.1", - "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.31.1.tgz", - "integrity": "sha512-I9aiFrbd7oYHwlnQDqr1Roz+fTz61oDDJX7n9tYF9FJymH1cIN1DtKw3iYt6b8WZgEjoNwVSncwF4wx/ZedMhw==", - "cpu": [ - "x64" - ], + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "win32" - ], + "license": "MIT", "engines": { - "node": ">= 12.0.0" + "node": ">=8" + } + }, + "node_modules/resolve-url-loader": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-5.0.0.tgz", + "integrity": "sha512-uZtduh8/8srhBoMx//5bwqjQ+rfYOUq8zC9NrMUGtjBiGTtFJM42s58/36+hTqeqINcnYe08Nj3LkK9lW4N8Xg==", + "dev": true, + "license": "MIT", + "dependencies": { + "adjust-sourcemap-loader": "^4.0.0", + "convert-source-map": "^1.7.0", + "loader-utils": "^2.0.0", + "postcss": "^8.2.14", + "source-map": "0.6.1" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "engines": { + "node": ">=12" } }, - "node_modules/listr2": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-9.0.5.tgz", - "integrity": "sha512-ME4Fb83LgEgwNw96RKNvKV4VTLuXfoKudAmm2lP8Kk87KaMK0/Xrx/aAkMWmT8mDb+3MlFDspfbCs7adjRxA2g==", + "node_modules/resolve-url-loader/node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "cli-truncate": "^5.0.0", - "colorette": "^2.0.20", - "eventemitter3": "^5.0.1", - "log-update": "^6.1.0", - "rfdc": "^1.4.1", - "wrap-ansi": "^9.0.0" + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" }, "engines": { - "node": ">=20.0.0" + "node": ">=8.9.0" } }, - "node_modules/listr2/node_modules/string-width": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", - "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "node_modules/resolve-url-loader/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/restore-cursor": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", + "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", "dev": true, "license": "MIT", "dependencies": { - "emoji-regex": "^10.3.0", - "get-east-asian-width": "^1.0.0", - "strip-ansi": "^7.1.0" + "onetime": "^7.0.0", + "signal-exit": "^4.1.0" }, "engines": { "node": ">=18" @@ -6747,83 +16266,143 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/listr2/node_modules/wrap-ansi": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", - "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", + "node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", "dev": true, "license": "MIT", - "dependencies": { - "ansi-styles": "^6.2.1", - "string-width": "^7.0.0", - "strip-ansi": "^7.1.0" + "engines": { + "node": ">= 4" + } + }, + "node_modules/rfdc": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", + "dev": true, + "license": "MIT" + }, + "node_modules/rimraf": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-6.1.3.tgz", + "integrity": "sha512-LKg+Cr2ZF61fkcaK1UdkH2yEBBKnYjTyWzTJT6KNPcSPaiT7HSdhtMXQuN5wkTX0Xu72KQ1l8S42rlmexS2hSA==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "glob": "^13.0.3", + "package-json-from-dist": "^1.0.1" + }, + "bin": { + "rimraf": "dist/esm/bin.mjs" }, "engines": { - "node": ">=18" + "node": "20 || >=22" }, "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/lmdb": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/lmdb/-/lmdb-3.5.1.tgz", - "integrity": "sha512-NYHA0MRPjvNX+vSw8Xxg6FLKxzAG+e7Pt8RqAQA/EehzHVXq9SxDqJIN3JL1hK0dweb884y8kIh6rkWvPyg9Wg==", + "node_modules/rolldown": { + "version": "1.0.0-rc.4", + "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.0.0-rc.4.tgz", + "integrity": "sha512-V2tPDUrY3WSevrvU2E41ijZlpF+5PbZu4giH+VpNraaadsJGHa4fR6IFwsocVwEXDoAdIv5qgPPxgrvKAOIPtA==", "dev": true, - "hasInstallScript": true, "license": "MIT", - "optional": true, "dependencies": { - "@harperfast/extended-iterable": "^1.0.3", - "msgpackr": "^1.11.2", - "node-addon-api": "^6.1.0", - "node-gyp-build-optional-packages": "5.2.2", - "ordered-binary": "^1.5.3", - "weak-lru-cache": "^1.2.2" + "@oxc-project/types": "=0.113.0", + "@rolldown/pluginutils": "1.0.0-rc.4" }, "bin": { - "download-lmdb-prebuilds": "bin/download-prebuilds.js" + "rolldown": "bin/cli.mjs" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" }, "optionalDependencies": { - "@lmdb/lmdb-darwin-arm64": "3.5.1", - "@lmdb/lmdb-darwin-x64": "3.5.1", - "@lmdb/lmdb-linux-arm": "3.5.1", - "@lmdb/lmdb-linux-arm64": "3.5.1", - "@lmdb/lmdb-linux-x64": "3.5.1", - "@lmdb/lmdb-win32-arm64": "3.5.1", - "@lmdb/lmdb-win32-x64": "3.5.1" + "@rolldown/binding-android-arm64": "1.0.0-rc.4", + "@rolldown/binding-darwin-arm64": "1.0.0-rc.4", + "@rolldown/binding-darwin-x64": "1.0.0-rc.4", + "@rolldown/binding-freebsd-x64": "1.0.0-rc.4", + "@rolldown/binding-linux-arm-gnueabihf": "1.0.0-rc.4", + "@rolldown/binding-linux-arm64-gnu": "1.0.0-rc.4", + "@rolldown/binding-linux-arm64-musl": "1.0.0-rc.4", + "@rolldown/binding-linux-x64-gnu": "1.0.0-rc.4", + "@rolldown/binding-linux-x64-musl": "1.0.0-rc.4", + "@rolldown/binding-openharmony-arm64": "1.0.0-rc.4", + "@rolldown/binding-wasm32-wasi": "1.0.0-rc.4", + "@rolldown/binding-win32-arm64-msvc": "1.0.0-rc.4", + "@rolldown/binding-win32-x64-msvc": "1.0.0-rc.4" } }, - "node_modules/log-symbols": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-7.0.1.tgz", - "integrity": "sha512-ja1E3yCr9i/0hmBVaM0bfwDjnGy8I/s6PP4DFp+yP+a+mrHO4Rm7DtmnqROTUkHIkqffC84YY7AeqX6oFk0WFg==", + "node_modules/rollup": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.59.0.tgz", + "integrity": "sha512-2oMpl67a3zCH9H79LeMcbDhXW/UmWG/y2zuqnF2jQq5uq9TbM9TVyXvA4+t+ne2IIkBdrLpAaRQAvo7YI/Yyeg==", "dev": true, "license": "MIT", "dependencies": { - "is-unicode-supported": "^2.0.0", - "yoctocolors": "^2.1.1" + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" }, "engines": { - "node": ">=18" + "node": ">=18.0.0", + "npm": ">=8.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.59.0", + "@rollup/rollup-android-arm64": "4.59.0", + "@rollup/rollup-darwin-arm64": "4.59.0", + "@rollup/rollup-darwin-x64": "4.59.0", + "@rollup/rollup-freebsd-arm64": "4.59.0", + "@rollup/rollup-freebsd-x64": "4.59.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.59.0", + "@rollup/rollup-linux-arm-musleabihf": "4.59.0", + "@rollup/rollup-linux-arm64-gnu": "4.59.0", + "@rollup/rollup-linux-arm64-musl": "4.59.0", + "@rollup/rollup-linux-loong64-gnu": "4.59.0", + "@rollup/rollup-linux-loong64-musl": "4.59.0", + "@rollup/rollup-linux-ppc64-gnu": "4.59.0", + "@rollup/rollup-linux-ppc64-musl": "4.59.0", + "@rollup/rollup-linux-riscv64-gnu": "4.59.0", + "@rollup/rollup-linux-riscv64-musl": "4.59.0", + "@rollup/rollup-linux-s390x-gnu": "4.59.0", + "@rollup/rollup-linux-x64-gnu": "4.59.0", + "@rollup/rollup-linux-x64-musl": "4.59.0", + "@rollup/rollup-openbsd-x64": "4.59.0", + "@rollup/rollup-openharmony-arm64": "4.59.0", + "@rollup/rollup-win32-arm64-msvc": "4.59.0", + "@rollup/rollup-win32-ia32-msvc": "4.59.0", + "@rollup/rollup-win32-x64-gnu": "4.59.0", + "@rollup/rollup-win32-x64-msvc": "4.59.0", + "fsevents": "~2.3.2" } }, - "node_modules/log-update": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.1.0.tgz", - "integrity": "sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==", + "node_modules/router": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", + "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", "dev": true, "license": "MIT", "dependencies": { - "ansi-escapes": "^7.0.0", - "cli-cursor": "^5.0.0", - "slice-ansi": "^7.1.0", - "strip-ansi": "^7.1.0", - "wrap-ansi": "^9.0.0" + "debug": "^4.4.0", + "depd": "^2.0.0", + "is-promise": "^4.0.0", + "parseurl": "^1.3.3", + "path-to-regexp": "^8.0.0" }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/run-applescript": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.1.0.tgz", + "integrity": "sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==", + "dev": true, + "license": "MIT", "engines": { "node": ">=18" }, @@ -6831,2381 +16410,2952 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/log-update/node_modules/slice-ansi": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.2.tgz", - "integrity": "sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==", + "node_modules/rxjs": { + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", + "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true, + "license": "MIT" + }, + "node_modules/sass": { + "version": "1.97.3", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.97.3.tgz", + "integrity": "sha512-fDz1zJpd5GycprAbu4Q2PV/RprsRtKC/0z82z0JLgdytmcq0+ujJbJ/09bPGDxCLkKY3Np5cRAOcWiVkLXJURg==", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^6.2.1", - "is-fullwidth-code-point": "^5.0.0" + "chokidar": "^4.0.0", + "immutable": "^5.0.2", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" }, "engines": { - "node": ">=18" + "node": ">=14.0.0" }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" + "optionalDependencies": { + "@parcel/watcher": "^2.4.1" } }, - "node_modules/log-update/node_modules/string-width": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", - "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "node_modules/sass-loader": { + "version": "16.0.7", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-16.0.7.tgz", + "integrity": "sha512-w6q+fRHourZ+e+xA1kcsF27iGM6jdB8teexYCfdUw0sYgcDNeZESnDNT9sUmmPm3ooziwUJXGwZJSTF3kOdBfA==", "dev": true, "license": "MIT", "dependencies": { - "emoji-regex": "^10.3.0", - "get-east-asian-width": "^1.0.0", - "strip-ansi": "^7.1.0" + "neo-async": "^2.6.2" }, "engines": { - "node": ">=18" + "node": ">= 18.12.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "@rspack/core": "0.x || ^1.0.0 || ^2.0.0-0", + "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0", + "sass": "^1.3.0", + "sass-embedded": "*", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "node-sass": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "webpack": { + "optional": true + } } }, - "node_modules/log-update/node_modules/wrap-ansi": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", - "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", + "node_modules/sass/node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^6.2.1", - "string-width": "^7.0.0", - "strip-ansi": "^7.1.0" + "readdirp": "^4.0.1" }, "engines": { - "node": ">=18" + "node": ">= 14.16.0" }, "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "url": "https://paulmillr.com/funding/" } }, - "node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "node_modules/sass/node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^3.0.2" + "license": "MIT", + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" } }, - "node_modules/magic-string": { - "version": "0.30.21", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", - "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "node_modules/sax": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.6.0.tgz", + "integrity": "sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA==", "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.5" + "license": "BlueOak-1.0.0", + "optional": true, + "engines": { + "node": ">=11.0.0" } }, - "node_modules/magicast": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.5.2.tgz", - "integrity": "sha512-E3ZJh4J3S9KfwdjZhe2afj6R9lGIN5Pher1pF39UGrXRqq/VDaGVIGN13BjHd2u8B61hArAGOnso7nBOouW3TQ==", + "node_modules/saxes": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", + "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "@babel/parser": "^7.29.0", - "@babel/types": "^7.29.0", - "source-map-js": "^1.2.1" + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=v12.22.7" } }, - "node_modules/make-dir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", - "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "node_modules/schema-utils": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.3.tgz", + "integrity": "sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==", "dev": true, "license": "MIT", "dependencies": { - "semver": "^7.5.3" + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" }, "engines": { - "node": ">=10" + "node": ">= 10.13.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "node_modules/make-fetch-happen": { - "version": "15.0.5", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-15.0.5.tgz", - "integrity": "sha512-uCbIa8jWWmQZt4dSnEStkVC6gdakiinAm4PiGsywIkguF0eWMdcjDz0ECYhUolFU3pFLOev9VNPCEygydXnddg==", + "node_modules/schema-utils/node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "@gar/promise-retry": "^1.0.0", - "@npmcli/agent": "^4.0.0", - "@npmcli/redact": "^4.0.0", - "cacache": "^20.0.1", - "http-cache-semantics": "^4.1.1", - "minipass": "^7.0.2", - "minipass-fetch": "^5.0.0", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^1.0.0", - "proc-log": "^6.0.0", - "ssri": "^13.0.0" + "ajv": "^8.0.0" }, - "engines": { - "node": "^20.17.0 || >=22.9.0" + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } } }, - "node_modules/math-intrinsics": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "node_modules/secure-compare": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/secure-compare/-/secure-compare-3.0.1.tgz", + "integrity": "sha512-AckIIV90rPDcBcglUwXPF3kg0P0qmPsPXAj6BBEENQE1p5yA1xfmDJzfi1Tappj37Pv2mVbKpL3Z1T+Nn7k1Qw==", "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } + "license": "MIT" }, - "node_modules/mdn-data": { - "version": "2.27.1", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.27.1.tgz", - "integrity": "sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==", + "node_modules/select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", "dev": true, - "license": "CC0-1.0" + "license": "MIT" }, - "node_modules/media-typer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", - "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", + "node_modules/selfsigned": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-5.5.0.tgz", + "integrity": "sha512-ftnu3TW4+3eBfLRFnDEkzGxSF/10BJBkaLJuBHZX0kiPS7bRdlpZGu6YGt4KngMkdTwJE6MbjavFpqHvqVt+Ew==", "dev": true, "license": "MIT", + "dependencies": { + "@peculiar/x509": "^1.14.2", + "pkijs": "^3.3.3" + }, "engines": { - "node": ">= 0.8" + "node": ">=18" } }, - "node_modules/merge-descriptors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", - "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", + "node_modules/semver": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/send": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/send/-/send-1.2.1.tgz", + "integrity": "sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==", "dev": true, "license": "MIT", + "dependencies": { + "debug": "^4.4.3", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "fresh": "^2.0.0", + "http-errors": "^2.0.1", + "mime-types": "^3.0.2", + "ms": "^2.1.3", + "on-finished": "^2.4.1", + "range-parser": "^1.2.1", + "statuses": "^2.0.2" + }, "engines": { - "node": ">=18" + "node": ">= 18" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/mime-db": { - "version": "1.54.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", - "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "node_modules/serialize-javascript": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-7.0.5.tgz", + "integrity": "sha512-F4LcB0UqUl1zErq+1nYEEzSHJnIwb3AF2XWB94b+afhrekOUijwooAYqFyRbjYkm2PAKBabx6oYv/xDxNi8IBw==", "dev": true, - "license": "MIT", + "license": "BSD-3-Clause", "engines": { - "node": ">= 0.6" + "node": ">=20.0.0" } }, - "node_modules/mime-types": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", - "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", + "node_modules/serve-index": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.2.tgz", + "integrity": "sha512-KDj11HScOaLmrPxl70KYNW1PksP4Nb/CLL2yvC+Qd2kHMPEEpfc4Re2e4FOay+bC/+XQl/7zAcWON3JVo5v3KQ==", "dev": true, "license": "MIT", "dependencies": { - "mime-db": "^1.54.0" + "accepts": "~1.3.8", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.8.0", + "mime-types": "~2.1.35", + "parseurl": "~1.3.3" }, "engines": { - "node": ">=18" + "node": ">= 0.8.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/express" } }, - "node_modules/mimic-function": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz", - "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==", + "node_modules/serve-index/node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", "dev": true, "license": "MIT", - "engines": { - "node": ">=18" + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">= 0.6" } }, - "node_modules/minimatch": { - "version": "10.2.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.4.tgz", - "integrity": "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==", + "node_modules/serve-index/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, - "license": "BlueOak-1.0.0", + "license": "MIT", "dependencies": { - "brace-expansion": "^5.0.2" - }, - "engines": { - "node": "18 || 20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "ms": "2.0.0" } }, - "node_modules/minipass": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", - "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", + "node_modules/serve-index/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", "dev": true, - "license": "BlueOak-1.0.0", + "license": "MIT", "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">= 0.6" } }, - "node_modules/minipass-collect": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-2.0.1.tgz", - "integrity": "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==", + "node_modules/serve-index/node_modules/http-errors": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", + "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "minipass": "^7.0.3" + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.1" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">= 0.6" } }, - "node_modules/minipass-fetch": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-5.0.2.tgz", - "integrity": "sha512-2d0q2a8eCi2IRg/IGubCNRJoYbA1+YPXAzQVRFmB45gdGZafyivnZ5YSEfo3JikbjGxOdntGFvBQGqaSMXlAFQ==", + "node_modules/serve-index/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "dev": true, "license": "MIT", - "dependencies": { - "minipass": "^7.0.3", - "minipass-sized": "^2.0.0", - "minizlib": "^3.0.1" - }, "engines": { - "node": "^20.17.0 || >=22.9.0" - }, - "optionalDependencies": { - "iconv-lite": "^0.7.2" + "node": ">= 0.6" } }, - "node_modules/minipass-flush": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", - "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "node_modules/serve-index/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "minipass": "^3.0.0" + "mime-db": "1.52.0" }, "engines": { - "node": ">= 8" + "node": ">= 0.6" } }, - "node_modules/minipass-flush/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "node_modules/serve-index/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true, - "license": "ISC", + "license": "MIT" + }, + "node_modules/serve-index/node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-static": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.1.tgz", + "integrity": "sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==", + "dev": true, + "license": "MIT", "dependencies": { - "yallist": "^4.0.0" + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "parseurl": "^1.3.3", + "send": "^1.2.0" }, "engines": { - "node": ">=8" + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/minipass-flush/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", "dev": true, "license": "ISC" }, - "node_modules/minipass-pipeline": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", - "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", "dev": true, - "license": "ISC", + "license": "ISC" + }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "license": "MIT", "dependencies": { - "minipass": "^3.0.0" + "kind-of": "^6.0.2" }, "engines": { "node": ">=8" } }, - "node_modules/minipass-pipeline/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "yallist": "^4.0.0" + "shebang-regex": "^3.0.0" }, "engines": { "node": ">=8" } }, - "node_modules/minipass-pipeline/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, - "license": "ISC" + "license": "MIT", + "engines": { + "node": ">=8" + } }, - "node_modules/minipass-sized": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-2.0.0.tgz", - "integrity": "sha512-zSsHhto5BcUVM2m1LurnXY6M//cGhVaegT71OfOXoprxT6o780GZd792ea6FfrQkuU4usHZIUczAQMRUE2plzA==", + "node_modules/shell-quote": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.3.tgz", + "integrity": "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==", "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^7.1.2" - }, + "license": "MIT", "engines": { - "node": ">=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/minizlib": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.1.0.tgz", - "integrity": "sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==", + "node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", "dev": true, "license": "MIT", "dependencies": { - "minipass": "^7.1.2" + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" }, "engines": { - "node": ">= 18" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/mrmime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", - "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==", + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", "dev": true, "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, "engines": { - "node": ">=10" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "license": "MIT" - }, - "node_modules/msgpackr": { - "version": "1.11.9", - "resolved": "https://registry.npmjs.org/msgpackr/-/msgpackr-1.11.9.tgz", - "integrity": "sha512-FkoAAyyA6HM8wL882EcEyFZ9s7hVADSwG9xrVx3dxxNQAtgADTrJoEWivID82Iv1zWDsv/OtbrrcZAzGzOMdNw==", + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", "dev": true, "license": "MIT", - "optional": true, - "optionalDependencies": { - "msgpackr-extract": "^3.0.2" + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/msgpackr-extract": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/msgpackr-extract/-/msgpackr-extract-3.0.3.tgz", - "integrity": "sha512-P0efT1C9jIdVRefqjzOQ9Xml57zpOXnIuS+csaB4MdZbTdmGDLo8XhzBG1N7aO11gKDDkJvBLULeFTo46wwreA==", + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", "dev": true, - "hasInstallScript": true, "license": "MIT", - "optional": true, "dependencies": { - "node-gyp-build-optional-packages": "5.2.2" + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" }, - "bin": { - "download-msgpackr-prebuilds": "bin/download-prebuilds.js" + "engines": { + "node": ">= 0.4" }, - "optionalDependencies": { - "@msgpackr-extract/msgpackr-extract-darwin-arm64": "3.0.3", - "@msgpackr-extract/msgpackr-extract-darwin-x64": "3.0.3", - "@msgpackr-extract/msgpackr-extract-linux-arm": "3.0.3", - "@msgpackr-extract/msgpackr-extract-linux-arm64": "3.0.3", - "@msgpackr-extract/msgpackr-extract-linux-x64": "3.0.3", - "@msgpackr-extract/msgpackr-extract-win32-x64": "3.0.3" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/mute-stream": { + "node_modules/siginfo": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-2.0.0.tgz", - "integrity": "sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==", + "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", + "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", + "dev": true, + "license": "ISC" + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, "license": "ISC", "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/nanoid": { - "version": "3.3.11", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", - "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "node_modules/sigstore": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-4.1.0.tgz", + "integrity": "sha512-/fUgUhYghuLzVT/gaJoeVehLCgZiUxPCPMcyVNY0lIf/cTCz58K/WTI7PefDarXxp9nUKpEwg1yyz3eSBMTtgA==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.cjs" + "license": "Apache-2.0", + "dependencies": { + "@sigstore/bundle": "^4.0.0", + "@sigstore/core": "^3.1.0", + "@sigstore/protobuf-specs": "^0.5.0", + "@sigstore/sign": "^4.1.0", + "@sigstore/tuf": "^4.0.1", + "@sigstore/verify": "^3.1.0" }, "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/negotiator": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", - "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", + "node_modules/sirv": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-3.0.2.tgz", + "integrity": "sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g==", "dev": true, "license": "MIT", + "dependencies": { + "@polka/url": "^1.0.0-next.24", + "mrmime": "^2.0.0", + "totalist": "^3.0.0" + }, "engines": { - "node": ">= 0.6" + "node": ">=18" } }, - "node_modules/ng2-charts": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/ng2-charts/-/ng2-charts-10.0.0.tgz", - "integrity": "sha512-mdL75XJrk/0s0YO2ySPQpAHPja85ECDEGNWFlcElJiy/bYliTNGEpeCtctAqZuozTff/E2CwGjyfPFM1ScP2og==", + "node_modules/slice-ansi": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-8.0.0.tgz", + "integrity": "sha512-stxByr12oeeOyY2BlviTNQlYV5xOj47GirPr4yA1hE9JCtxfQN0+tVbkxwCtYDQWhEKWFHsEK48ORg5jrouCAg==", + "dev": true, "license": "MIT", "dependencies": { - "es-toolkit": "^1.39.7", - "tslib": "^2.3.0" + "ansi-styles": "^6.2.3", + "is-fullwidth-code-point": "^5.1.0" }, - "peerDependencies": { - "@angular/cdk": ">=21.0.0", - "@angular/common": ">=21.0.0", - "@angular/core": ">=21.0.0", - "@angular/platform-browser": ">=21.0.0", - "chart.js": "^3.4.0 || ^4.0.0", - "rxjs": "^6.5.3 || ^7.4.0" + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, - "node_modules/node-addon-api": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-6.1.0.tgz", - "integrity": "sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==", + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", "dev": true, "license": "MIT", - "optional": true + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } }, - "node_modules/node-gyp": { - "version": "12.2.0", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-12.2.0.tgz", - "integrity": "sha512-q23WdzrQv48KozXlr0U1v9dwO/k59NHeSzn6loGcasyf0UnSrtzs8kRxM+mfwJSf0DkX0s43hcqgnSO4/VNthQ==", - "dev": true, + "node_modules/socket.io-client": { + "version": "4.8.3", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.8.3.tgz", + "integrity": "sha512-uP0bpjWrjQmUt5DTHq9RuoCBdFJF10cdX9X+a368j/Ft0wmaVgxlrjvK3kjvgCODOMMOz9lcaRzxmso0bTWZ/g==", "license": "MIT", "dependencies": { - "env-paths": "^2.2.0", - "exponential-backoff": "^3.1.1", - "graceful-fs": "^4.2.6", - "make-fetch-happen": "^15.0.0", - "nopt": "^9.0.0", - "proc-log": "^6.0.0", - "semver": "^7.3.5", - "tar": "^7.5.4", - "tinyglobby": "^0.2.12", - "which": "^6.0.0" - }, - "bin": { - "node-gyp": "bin/node-gyp.js" + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.4.1", + "engine.io-client": "~6.6.1", + "socket.io-parser": "~4.2.4" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=10.0.0" } }, - "node_modules/node-gyp-build-optional-packages": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.2.2.tgz", - "integrity": "sha512-s+w+rBWnpTMwSFbaE0UXsRlg7hU4FjekKU4eyAih5T8nJuNZT1nNsskXpxmeqSK9UzkBl6UgRlnKc8hz8IEqOw==", + "node_modules/socket.io-parser": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.6.tgz", + "integrity": "sha512-asJqbVBDsBCJx0pTqw3WfesSY0iRX+2xzWEWzrpcH7L6fLzrhyF8WPI8UaeM4YCuDfpwA/cgsdugMsmtz8EJeg==", + "license": "MIT", + "dependencies": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.4.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/sockjs": { + "version": "0.3.24", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", "dev": true, "license": "MIT", - "optional": true, "dependencies": { - "detect-libc": "^2.0.1" - }, - "bin": { - "node-gyp-build-optional-packages": "bin.js", - "node-gyp-build-optional-packages-optional": "optional.js", - "node-gyp-build-optional-packages-test": "build-test.js" + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" } }, - "node_modules/node-gyp/node_modules/isexe": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-4.0.0.tgz", - "integrity": "sha512-FFUtZMpoZ8RqHS3XeXEmHWLA4thH+ZxCv2lOiPIn1Xc7CxrqhWzNSDzD+/chS/zbYezmiwWLdQC09JdQKmthOw==", + "node_modules/socks": { + "version": "2.8.7", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.7.tgz", + "integrity": "sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==", "dev": true, - "license": "BlueOak-1.0.0", + "license": "MIT", + "dependencies": { + "ip-address": "^10.0.1", + "smart-buffer": "^4.2.0" + }, "engines": { - "node": ">=20" + "node": ">= 10.0.0", + "npm": ">= 3.0.0" } }, - "node_modules/node-gyp/node_modules/which": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/which/-/which-6.0.1.tgz", - "integrity": "sha512-oGLe46MIrCRqX7ytPUf66EAYvdeMIZYn3WaocqqKZAxrBpkqHfL/qvTyJ/bTk5+AqHCjXmrv3CEWgy368zhRUg==", + "node_modules/socks-proxy-agent": { + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz", + "integrity": "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "isexe": "^4.0.0" - }, - "bin": { - "node-which": "bin/which.js" + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "socks": "^2.8.3" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">= 14" } }, - "node_modules/node-releases": { - "version": "2.0.36", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.36.tgz", - "integrity": "sha512-TdC8FSgHz8Mwtw9g5L4gR/Sh9XhSP/0DEkQxfEFXOpiul5IiHgHan2VhYYb6agDSfp4KuvltmGApc8HMgUrIkA==", + "node_modules/source-map": { + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz", + "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==", "dev": true, - "license": "MIT" + "license": "BSD-3-Clause", + "engines": { + "node": ">= 12" + } }, - "node_modules/nopt": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-9.0.0.tgz", - "integrity": "sha512-Zhq3a+yFKrYwSBluL4H9XP3m3y5uvQkB/09CwDruCiRmR/UJYnn9W4R48ry0uGC70aeTPKLynBtscP9efFFcPw==", + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", "dev": true, - "license": "ISC", - "dependencies": { - "abbrev": "^4.0.0" - }, - "bin": { - "nopt": "bin/nopt.js" - }, + "license": "BSD-3-Clause", "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=0.10.0" } }, - "node_modules/npm-bundled": { + "node_modules/source-map-loader": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-5.0.0.tgz", - "integrity": "sha512-JLSpbzh6UUXIEoqPsYBvVNVmyrjVZ1fzEFbqxKkTJQkWBO3xFzFT+KDnSKQWwOQNbuWRwt5LSD6HOTLGIWzfrw==", + "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-5.0.0.tgz", + "integrity": "sha512-k2Dur7CbSLcAH73sBcIkV5xjPV4SzqO1NJ7+XaQl8if3VODDUj3FNchNGpqgJSKbvUfJuhVdv8K2Eu8/TNl2eA==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "npm-normalize-package-bin": "^5.0.0" + "iconv-lite": "^0.6.3", + "source-map-js": "^1.0.2" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.72.1" } }, - "node_modules/npm-install-checks": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-8.0.0.tgz", - "integrity": "sha512-ScAUdMpyzkbpxoNekQ3tNRdFI8SJ86wgKZSQZdUxT+bj0wVFpsEMWnkXP0twVe1gJyNF5apBWDJhhIbgrIViRA==", + "node_modules/source-map-loader/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "semver": "^7.1.1" + "safer-buffer": ">= 2.1.2 < 3.0.0" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=0.10.0" } }, - "node_modules/npm-normalize-package-bin": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-5.0.0.tgz", - "integrity": "sha512-CJi3OS4JLsNMmr2u07OJlhcrPxCeOeP/4xq67aWNai6TNWWbTrlNDgl8NcFKVlcBKp18GPj+EzbNIgrBfZhsag==", + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dev": true, - "license": "ISC", + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=0.10.0" } }, - "node_modules/npm-package-arg": { - "version": "13.0.2", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-13.0.2.tgz", - "integrity": "sha512-IciCE3SY3uE84Ld8WZU23gAPPV9rIYod4F+rc+vJ7h7cwAJt9Vk6TVsK60ry7Uj3SRS3bqRRIGuTp9YVlk6WNA==", + "node_modules/spawn-wrap": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-3.0.0.tgz", + "integrity": "sha512-z+s5vv4KzFPJVddGab0xX2n7kQPGMdNUX5l9T8EJqsXdKTWpcxmAqWHpsgHEXoC1taGBCc7b79bi62M5kdbrxQ==", "dev": true, - "license": "ISC", + "license": "BlueOak-1.0.0", "dependencies": { - "hosted-git-info": "^9.0.0", - "proc-log": "^6.0.0", - "semver": "^7.3.5", - "validate-npm-package-name": "^7.0.0" + "cross-spawn": "^7.0.6", + "foreground-child": "^2.0.0", + "is-windows": "^1.0.2", + "make-dir": "^3.0.0", + "rimraf": "^6.1.3", + "signal-exit": "^3.0.2", + "which": "^2.0.1" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=8" } }, - "node_modules/npm-packlist": { - "version": "10.0.4", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-10.0.4.tgz", - "integrity": "sha512-uMW73iajD8hiH4ZBxEV3HC+eTnppIqwakjOYuvgddnalIw2lJguKviK1pcUJDlIWm1wSJkchpDZDSVVsZEYRng==", + "node_modules/spawn-wrap/node_modules/foreground-child": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", + "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", "dev": true, "license": "ISC", "dependencies": { - "ignore-walk": "^8.0.0", - "proc-log": "^6.0.0" + "cross-spawn": "^7.0.0", + "signal-exit": "^3.0.2" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=8.0.0" } }, - "node_modules/npm-pick-manifest": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-11.0.3.tgz", - "integrity": "sha512-buzyCfeoGY/PxKqmBqn1IUJrZnUi1VVJTdSSRPGI60tJdUhUoSQFhs0zycJokDdOznQentgrpf8LayEHyyYlqQ==", + "node_modules/spawn-wrap/node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "npm-install-checks": "^8.0.0", - "npm-normalize-package-bin": "^5.0.0", - "npm-package-arg": "^13.0.0", - "semver": "^7.3.5" + "semver": "^6.0.0" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/npm-registry-fetch": { - "version": "19.1.1", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-19.1.1.tgz", - "integrity": "sha512-TakBap6OM1w0H73VZVDf44iFXsOS3h+L4wVMXmbWOQroZgFhMch0juN6XSzBNlD965yIKvWg2dfu7NSiaYLxtw==", + "node_modules/spawn-wrap/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/spawn-wrap/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/spdx-exceptions": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", + "dev": true, + "license": "CC-BY-3.0" + }, + "node_modules/spdx-expression-parse": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-4.0.0.tgz", + "integrity": "sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==", + "dev": true, + "license": "MIT", "dependencies": { - "@npmcli/redact": "^4.0.0", - "jsonparse": "^1.3.1", - "make-fetch-happen": "^15.0.0", - "minipass": "^7.0.2", - "minipass-fetch": "^5.0.0", - "minizlib": "^3.0.1", - "npm-package-arg": "^13.0.0", - "proc-log": "^6.0.0" + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.23", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.23.tgz", + "integrity": "sha512-CWLcCCH7VLu13TgOH+r8p1O/Znwhqv/dbb6lqWy67G+pT1kHmeD/+V36AVb/vq8QMIQwVShJ6Ssl5FPh0fuSdw==", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=6.0.0" } }, - "node_modules/nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "node_modules/spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" } }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/sshpk": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz", + "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==", "dev": true, "license": "MIT", + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, "engines": { "node": ">=0.10.0" } }, - "node_modules/object-inspect": { - "version": "1.13.4", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", - "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "node_modules/ssri": { + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-13.0.1.tgz", + "integrity": "sha512-QUiRf1+u9wPTL/76GTYlKttDEBWV1ga9ZXW8BG6kfdeyyM8LGPix9gROyg9V2+P0xNyF3X2Go526xKFdMZrHSQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/stackback": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", + "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", + "dev": true, + "license": "MIT" + }, + "node_modules/statuses": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", "dev": true, "license": "MIT", "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 0.8" } }, - "node_modules/obug": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/obug/-/obug-2.1.1.tgz", - "integrity": "sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==", + "node_modules/std-env": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-4.0.0.tgz", + "integrity": "sha512-zUMPtQ/HBY3/50VbpkupYHbRroTRZJPRLvreamgErJVys0ceuzMkD44J/QjqhHjOzK42GQ3QZIeFG1OYfOtKqQ==", "dev": true, - "funding": [ - "https://github.com/sponsors/sxzz", - "https://opencollective.com/debug" - ], "license": "MIT" }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "node_modules/stdin-discarder": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.3.1.tgz", + "integrity": "sha512-reExS1kSGoElkextOcPkel4NE99S0BWxjUHQeDFnR8S993JxpPX7KU4MNmO19NXhlJp+8dmdCbKQVNgLJh2teA==", "dev": true, "license": "MIT", - "dependencies": { - "ee-first": "1.1.1" - }, "engines": { - "node": ">= 0.8" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "wrappy": "1" + "safe-buffer": "~5.2.0" } }, - "node_modules/onetime": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", - "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", + "node_modules/string-width": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.2.0.tgz", + "integrity": "sha512-6hJPQ8N0V0P3SNmP6h2J99RLuzrWz2gvT7VnK5tKvrNqJoyS9W4/Fb8mo31UiPvy00z7DQXkP2hnKBVav76thw==", "dev": true, "license": "MIT", "dependencies": { - "mimic-function": "^5.0.0" + "get-east-asian-width": "^1.5.0", + "strip-ansi": "^7.1.2" }, "engines": { - "node": ">=18" + "node": ">=20" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ora": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/ora/-/ora-9.3.0.tgz", - "integrity": "sha512-lBX72MWFduWEf7v7uWf5DHp9Jn5BI8bNPGuFgtXMmr2uDz2Gz2749y3am3agSDdkhHPHYmmxEGSKH85ZLGzgXw==", + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "license": "MIT", "dependencies": { - "chalk": "^5.6.2", - "cli-cursor": "^5.0.0", - "cli-spinners": "^3.2.0", - "is-interactive": "^2.0.0", - "is-unicode-supported": "^2.1.0", - "log-symbols": "^7.0.1", - "stdin-discarder": "^0.3.1", - "string-width": "^8.1.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { - "node": ">=20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, - "node_modules/ordered-binary": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/ordered-binary/-/ordered-binary-1.6.1.tgz", - "integrity": "sha512-QkCdPooczexPLiXIrbVOPYkR3VO3T6v2OyKRkR1Xbhpy7/LAVXwahnRCgRp78Oe/Ehf0C/HATAxfSr6eA1oX+w==", + "node_modules/string-width-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, "license": "MIT", - "optional": true + "engines": { + "node": ">=8" + } }, - "node_modules/p-map": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.4.tgz", - "integrity": "sha512-tkAQEw8ysMzmkhgw8k+1U/iPhWNhykKnSk4Rd5zLoPJCuJaGRPo6YposrZgaxHKzDHdDWWZvE/Sk7hsL2X/CpQ==", + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/string-width-cjs/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, "license": "MIT", "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, - "node_modules/pacote": { - "version": "21.3.1", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-21.3.1.tgz", - "integrity": "sha512-O0EDXi85LF4AzdjG74GUwEArhdvawi/YOHcsW6IijKNj7wm8IvEWNF5GnfuxNpQ/ZpO3L37+v8hqdVh8GgWYhg==", + "node_modules/string-width-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "@npmcli/git": "^7.0.0", - "@npmcli/installed-package-contents": "^4.0.0", - "@npmcli/package-json": "^7.0.0", - "@npmcli/promise-spawn": "^9.0.0", - "@npmcli/run-script": "^10.0.0", - "cacache": "^20.0.0", - "fs-minipass": "^3.0.0", - "minipass": "^7.0.2", - "npm-package-arg": "^13.0.0", - "npm-packlist": "^10.0.1", - "npm-pick-manifest": "^11.0.1", - "npm-registry-fetch": "^19.0.0", - "proc-log": "^6.0.0", - "promise-retry": "^2.0.1", - "sigstore": "^4.0.0", - "ssri": "^13.0.0", - "tar": "^7.4.3" - }, - "bin": { - "pacote": "bin/index.js" + "ansi-regex": "^5.0.1" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=8" } }, - "node_modules/parse5": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-8.0.0.tgz", - "integrity": "sha512-9m4m5GSgXjL4AjumKzq1Fgfp3Z8rsvjRNbnkVwfu2ImRqE5D0LnY2QfDen18FSY9C573YU5XxSapdHZTZ2WolA==", + "node_modules/strip-ansi": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", + "dev": true, "license": "MIT", "dependencies": { - "entities": "^6.0.0" + "ansi-regex": "^6.2.2" + }, + "engines": { + "node": ">=12" }, "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/parse5-html-rewriting-stream": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/parse5-html-rewriting-stream/-/parse5-html-rewriting-stream-8.0.0.tgz", - "integrity": "sha512-wzh11mj8KKkno1pZEu+l2EVeWsuKDfR5KNWZOTsslfUX8lPDZx77m9T0kIoAVkFtD1nx6YF8oh4BnPHvxMtNMw==", + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "license": "MIT", "dependencies": { - "entities": "^6.0.0", - "parse5": "^8.0.0", - "parse5-sax-parser": "^8.0.0" + "ansi-regex": "^5.0.1" }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" + "engines": { + "node": ">=8" } }, - "node_modules/parse5-html-rewriting-stream/node_modules/entities": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", - "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" + "node": ">=8" } }, - "node_modules/parse5-sax-parser": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/parse5-sax-parser/-/parse5-sax-parser-8.0.0.tgz", - "integrity": "sha512-/dQ8UzHZwnrzs3EvDj6IkKrD/jIZyTlB+8XrHJvcjNgRdmWruNdN9i9RK/JtxakmlUdPwKubKPTCqvbTgzGhrw==", + "node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "license": "MIT", "dependencies": { - "parse5": "^8.0.0" + "has-flag": "^4.0.0" }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" + "engines": { + "node": ">=8" } }, - "node_modules/parse5/node_modules/entities": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", - "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", - "license": "BSD-2-Clause", + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=0.12" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true, + "license": "MIT" + }, + "node_modules/systeminformation": { + "version": "5.31.5", + "resolved": "https://registry.npmjs.org/systeminformation/-/systeminformation-5.31.5.tgz", + "integrity": "sha512-5SyLdip4/3alxD4Kh+63bUQTJmu7YMfYQTC+koZy7X73HgNqZSD2P4wOZQWtUncvPvcEmnfIjCoygN4MRoEejQ==", "dev": true, "license": "MIT", + "os": [ + "darwin", + "linux", + "win32", + "freebsd", + "openbsd", + "netbsd", + "sunos", + "android" + ], + "bin": { + "systeminformation": "lib/cli.js" + }, "engines": { - "node": ">= 0.8" + "node": ">=8.0.0" + }, + "funding": { + "type": "Buy me a coffee", + "url": "https://www.buymeacoffee.com/systeminfo" } }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "node_modules/tailwindcss": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.2.1.tgz", + "integrity": "sha512-/tBrSQ36vCleJkAOsy9kbNTgaxvGbyOamC30PRePTQe/o1MFwEKHQk4Cn7BNGaPtjp+PuUrByJehM1hgxfq4sw==", + "dev": true, + "license": "MIT" + }, + "node_modules/tapable": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.0.tgz", + "integrity": "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==", "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">=6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "node_modules/path-scurry": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.2.tgz", - "integrity": "sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==", + "node_modules/tar": { + "version": "7.5.11", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.11.tgz", + "integrity": "sha512-ChjMH33/KetonMTAtpYdgUFr0tbz69Fp2v7zWxQfYZX4g5ZN2nOBXm1R2xyA+lMIKrLKIoKAwFj93jE/avX9cQ==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { - "lru-cache": "^11.0.0", - "minipass": "^7.1.2" + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.1.0", + "yallist": "^5.0.0" }, "engines": { - "node": "18 || 20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=18" } }, - "node_modules/path-scurry/node_modules/lru-cache": { - "version": "11.2.7", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.7.tgz", - "integrity": "sha512-aY/R+aEsRelme17KGQa/1ZSIpLpNYYrhcrepKTZgE+W3WM16YMCaPwOHLHsmopZHELU0Ojin1lPVxKR0MihncA==", + "node_modules/tar/node_modules/yallist": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", + "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", "dev": true, "license": "BlueOak-1.0.0", "engines": { - "node": "20 || >=22" + "node": ">=18" } }, - "node_modules/path-to-regexp": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.3.0.tgz", - "integrity": "sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==", + "node_modules/terser": { + "version": "5.46.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.46.1.tgz", + "integrity": "sha512-vzCjQO/rgUuK9sf8VJZvjqiqiHFaZLnOiimmUuOKODxWL8mm/xua7viT7aqX7dgPY60otQjUotzFMmCB4VdmqQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.15.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.4.0.tgz", + "integrity": "sha512-Bn5vxm48flOIfkdl5CaD2+1CiUVbonWQ3KQPyP7/EuIl9Gbzq/gQFOzaMFUEgVjB1396tcK0SG8XcNJ/2kDH8g==", "dev": true, "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.25", + "jest-worker": "^27.4.5", + "schema-utils": "^4.3.0", + "terser": "^5.31.1" + }, + "engines": { + "node": ">= 10.13.0" + }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/express" + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } } }, - "node_modules/pathe": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", - "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true, "license": "MIT" }, - "node_modules/picocolors": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "node_modules/test-exclude": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-7.0.2.tgz", + "integrity": "sha512-u9E6A+ZDYdp7a4WnarkXPZOx8Ilz46+kby6p1yZ8zsGTz9gYa6FIS7lj2oezzNKmtdyyJNNmmXDppga5GB7kSw==", "dev": true, - "license": "ISC" + "license": "ISC", + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^10.4.1", + "minimatch": "^10.2.2" + }, + "engines": { + "node": ">=18" + } }, - "node_modules/picomatch": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", - "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "node_modules/test-exclude/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/test-exclude/node_modules/brace-expansion": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.3.tgz", + "integrity": "sha512-MCV/fYJEbqx68aE58kv2cA/kiky1G8vux3OR6/jbS+jIMe/6fJWa0DTzJU7dqijOWYwHi1t29FlfYI9uytqlpA==", "dev": true, "license": "MIT", - "engines": { - "node": ">=12" + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/test-exclude/node_modules/glob": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", + "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" }, "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/piscina": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/piscina/-/piscina-5.1.4.tgz", - "integrity": "sha512-7uU4ZnKeQq22t9AsmHGD2w4OYQGonwFnTypDypaWi7Qr2EvQIFVtG8J5D/3bE7W123Wdc9+v4CZDu5hJXVCtBg==", + "node_modules/test-exclude/node_modules/glob/node_modules/minimatch": { + "version": "9.0.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", + "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", "dev": true, - "license": "MIT", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.2" + }, "engines": { - "node": ">=20.x" + "node": ">=16 || 14 >=14.17" }, - "optionalDependencies": { - "@napi-rs/nice": "^1.0.4" + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/pkce-challenge": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/pkce-challenge/-/pkce-challenge-5.0.1.tgz", - "integrity": "sha512-wQ0b/W4Fr01qtpHlqSqspcj3EhBvimsdh0KlHhH8HRZnMsEa0ea2fTULOXOS9ccQr3om+GcGRk4e+isrZWV8qQ==", + "node_modules/test-exclude/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=16.20.0" - } + "license": "ISC" }, - "node_modules/postcss": { - "version": "8.5.8", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.8.tgz", - "integrity": "sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==", + "node_modules/test-exclude/node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "peer": true, + "license": "BlueOak-1.0.0", "dependencies": { - "nanoid": "^3.3.11", - "picocolors": "^1.1.1", - "source-map-js": "^1.2.1" + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" }, "engines": { - "node": "^10 || ^12 || >=14" + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/postcss-media-query-parser": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz", - "integrity": "sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==", - "dev": true, - "license": "MIT" - }, - "node_modules/postcss-safe-parser": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-7.0.1.tgz", - "integrity": "sha512-0AioNCJZ2DPYz5ABT6bddIqlhgwhpHZ/l65YAYo0BCIn0xiDpsnTHz0gnoTGk0OXZW0JRs+cDwL8u/teRdz+8A==", + "node_modules/thingies": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/thingies/-/thingies-2.6.0.tgz", + "integrity": "sha512-rMHRjmlFLM1R96UYPvpmnc3LYtdFrT33JIB7L9hetGue1qAPfn1N2LJeEjxUSidu1Iku+haLZXDuEXUHNGO/lg==", "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss-safe-parser" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], "license": "MIT", "engines": { - "node": ">=18.0" + "node": ">=10.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" }, "peerDependencies": { - "postcss": "^8.4.31" + "tslib": "^2" } }, - "node_modules/prettier": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.8.1.tgz", - "integrity": "sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==", + "node_modules/throttleit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.1.tgz", + "integrity": "sha512-vDZpf9Chs9mAdfY046mcPt8fg5QSZr37hEH4TXYBnDF+izxgrbRGUAAaBvIk/fJm9aOFCGFd1EsNg5AZCbnQCQ==", "dev": true, "license": "MIT", - "bin": { - "prettier": "bin/prettier.cjs" - }, - "engines": { - "node": ">=14" - }, "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/proc-log": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-6.1.0.tgz", - "integrity": "sha512-iG+GYldRf2BQ0UDUAd6JQ/RwzaQy6mXmsk/IzlYyal4A4SNFw54MeH4/tLkF4I5WoWG9SQwuqWzS99jaFQHBuQ==", + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", "dev": true, - "license": "ISC", - "engines": { - "node": "^20.17.0 || >=22.9.0" - } + "license": "MIT" }, - "node_modules/promise-retry": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", - "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "node_modules/thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", "dev": true, - "license": "MIT", - "dependencies": { - "err-code": "^2.0.2", - "retry": "^0.12.0" - }, - "engines": { - "node": ">=10" - } + "license": "MIT" }, - "node_modules/promise-retry/node_modules/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "node_modules/tinybench": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", + "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinyexec": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.0.4.tgz", + "integrity": "sha512-u9r3uZC0bdpGOXtlxUIdwf9pkmvhqJdrVCH9fapQtgy/OeTTMZ1nqH7agtvEfmGui6e1XxjcdrlxvxJvc3sMqw==", "dev": true, "license": "MIT", "engines": { - "node": ">= 4" + "node": ">=18" } }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", "dev": true, "license": "MIT", "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" + "fdir": "^6.5.0", + "picomatch": "^4.0.3" }, "engines": { - "node": ">= 0.10" + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" } }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "node_modules/tinyrainbow": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-3.1.0.tgz", + "integrity": "sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==", "dev": true, "license": "MIT", "engines": { - "node": ">=6" + "node": ">=14.0.0" } }, - "node_modules/qs": { - "version": "6.15.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.0.tgz", - "integrity": "sha512-mAZTtNCeetKMH+pSjrb76NAM8V9a05I9aBZOHztWy/UqcJdQYNsf59vrRKWnojAT9Y+GbIvoTBC++CPHqpDBhQ==", + "node_modules/tldts": { + "version": "7.0.26", + "resolved": "https://registry.npmjs.org/tldts/-/tldts-7.0.26.tgz", + "integrity": "sha512-WiGwQjr0qYdNNG8KpMKlSvpxz652lqa3Rd+/hSaDcY4Uo6SKWZq2LAF+hsAhUewTtYhXlorBKgNF3Kk8hnjGoQ==", "dev": true, - "license": "BSD-3-Clause", + "license": "MIT", "dependencies": { - "side-channel": "^1.1.0" - }, - "engines": { - "node": ">=0.6" + "tldts-core": "^7.0.26" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "bin": { + "tldts": "bin/cli.js" } }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "node_modules/tldts-core": { + "version": "7.0.26", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-7.0.26.tgz", + "integrity": "sha512-5WJ2SqFsv4G2Dwi7ZFVRnz6b2H1od39QME1lc2y5Ew3eWiZMAeqOAfWpRP9jHvhUl881406QtZTODvjttJs+ew==", + "dev": true, + "license": "MIT" + }, + "node_modules/tmp": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.5.tgz", + "integrity": "sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==", "dev": true, "license": "MIT", "engines": { - "node": ">= 0.6" + "node": ">=14.14" } }, - "node_modules/raw-body": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.2.tgz", - "integrity": "sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==", + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, "license": "MIT", "dependencies": { - "bytes": "~3.1.2", - "http-errors": "~2.0.1", - "iconv-lite": "~0.7.0", - "unpipe": "~1.0.0" + "is-number": "^7.0.0" }, "engines": { - "node": ">= 0.10" + "node": ">=8.0" } }, - "node_modules/readdirp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-5.0.0.tgz", - "integrity": "sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==", + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", "dev": true, "license": "MIT", "engines": { - "node": ">= 20.19.0" - }, - "funding": { - "type": "individual", - "url": "https://paulmillr.com/funding/" + "node": ">=0.6" } }, - "node_modules/reflect-metadata": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz", - "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==", + "node_modules/totalist": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", + "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", "dev": true, - "license": "Apache-2.0" + "license": "MIT", + "engines": { + "node": ">=6" + } }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "node_modules/tough-cookie": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-6.0.1.tgz", + "integrity": "sha512-LktZQb3IeoUWB9lqR5EWTHgW/VTITCXg4D21M+lvybRVdylLrRMnqaIONLVb5mav8vM19m44HIcGq4qASeu2Qw==", "dev": true, - "license": "MIT", + "license": "BSD-3-Clause", + "dependencies": { + "tldts": "^7.0.5" + }, "engines": { - "node": ">=0.10.0" + "node": ">=16" } }, - "node_modules/restore-cursor": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", - "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", + "node_modules/tr46": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-6.0.0.tgz", + "integrity": "sha512-bLVMLPtstlZ4iMQHpFHTR7GAGj2jxi8Dg0s2h2MafAE4uSWF98FC/3MomU51iQAMf8/qDUbKWf5GxuvvVcXEhw==", "dev": true, "license": "MIT", "dependencies": { - "onetime": "^7.0.0", - "signal-exit": "^4.1.0" + "punycode": "^2.3.1" }, "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=20" } }, - "node_modules/retry": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "node_modules/tree-dump": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/tree-dump/-/tree-dump-1.1.0.tgz", + "integrity": "sha512-rMuvhU4MCDbcbnleZTFezWsaZXRFemSqAM+7jPnzUl1fo9w3YEKOxAeui0fz3OI4EU4hf23iyA7uQRVko+UaBA==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "engines": { - "node": ">= 4" + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" } }, - "node_modules/rfdc": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", - "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", "dev": true, - "license": "MIT" + "license": "MIT", + "bin": { + "tree-kill": "cli.js" + } }, - "node_modules/rolldown": { - "version": "1.0.0-rc.4", - "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.0.0-rc.4.tgz", - "integrity": "sha512-V2tPDUrY3WSevrvU2E41ijZlpF+5PbZu4giH+VpNraaadsJGHa4fR6IFwsocVwEXDoAdIv5qgPPxgrvKAOIPtA==", + "node_modules/ts-node": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", + "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", "dev": true, "license": "MIT", "dependencies": { - "@oxc-project/types": "=0.113.0", - "@rolldown/pluginutils": "1.0.0-rc.4" + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" }, "bin": { - "rolldown": "bin/cli.mjs" + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" }, - "engines": { - "node": "^20.19.0 || >=22.12.0" + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" }, - "optionalDependencies": { - "@rolldown/binding-android-arm64": "1.0.0-rc.4", - "@rolldown/binding-darwin-arm64": "1.0.0-rc.4", - "@rolldown/binding-darwin-x64": "1.0.0-rc.4", - "@rolldown/binding-freebsd-x64": "1.0.0-rc.4", - "@rolldown/binding-linux-arm-gnueabihf": "1.0.0-rc.4", - "@rolldown/binding-linux-arm64-gnu": "1.0.0-rc.4", - "@rolldown/binding-linux-arm64-musl": "1.0.0-rc.4", - "@rolldown/binding-linux-x64-gnu": "1.0.0-rc.4", - "@rolldown/binding-linux-x64-musl": "1.0.0-rc.4", - "@rolldown/binding-openharmony-arm64": "1.0.0-rc.4", - "@rolldown/binding-wasm32-wasi": "1.0.0-rc.4", - "@rolldown/binding-win32-arm64-msvc": "1.0.0-rc.4", - "@rolldown/binding-win32-x64-msvc": "1.0.0-rc.4" + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } } }, - "node_modules/rollup": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.59.0.tgz", - "integrity": "sha512-2oMpl67a3zCH9H79LeMcbDhXW/UmWG/y2zuqnF2jQq5uq9TbM9TVyXvA4+t+ne2IIkBdrLpAaRQAvo7YI/Yyeg==", + "node_modules/tsconfig-paths": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz", + "integrity": "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==", "dev": true, "license": "MIT", "dependencies": { - "@types/estree": "1.0.8" - }, - "bin": { - "rollup": "dist/bin/rollup" + "json5": "^2.2.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" }, "engines": { - "node": ">=18.0.0", - "npm": ">=8.0.0" - }, - "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.59.0", - "@rollup/rollup-android-arm64": "4.59.0", - "@rollup/rollup-darwin-arm64": "4.59.0", - "@rollup/rollup-darwin-x64": "4.59.0", - "@rollup/rollup-freebsd-arm64": "4.59.0", - "@rollup/rollup-freebsd-x64": "4.59.0", - "@rollup/rollup-linux-arm-gnueabihf": "4.59.0", - "@rollup/rollup-linux-arm-musleabihf": "4.59.0", - "@rollup/rollup-linux-arm64-gnu": "4.59.0", - "@rollup/rollup-linux-arm64-musl": "4.59.0", - "@rollup/rollup-linux-loong64-gnu": "4.59.0", - "@rollup/rollup-linux-loong64-musl": "4.59.0", - "@rollup/rollup-linux-ppc64-gnu": "4.59.0", - "@rollup/rollup-linux-ppc64-musl": "4.59.0", - "@rollup/rollup-linux-riscv64-gnu": "4.59.0", - "@rollup/rollup-linux-riscv64-musl": "4.59.0", - "@rollup/rollup-linux-s390x-gnu": "4.59.0", - "@rollup/rollup-linux-x64-gnu": "4.59.0", - "@rollup/rollup-linux-x64-musl": "4.59.0", - "@rollup/rollup-openbsd-x64": "4.59.0", - "@rollup/rollup-openharmony-arm64": "4.59.0", - "@rollup/rollup-win32-arm64-msvc": "4.59.0", - "@rollup/rollup-win32-ia32-msvc": "4.59.0", - "@rollup/rollup-win32-x64-gnu": "4.59.0", - "@rollup/rollup-win32-x64-msvc": "4.59.0", - "fsevents": "~2.3.2" + "node": ">=6" } }, - "node_modules/router": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", - "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", + "node_modules/tsconfig-paths/node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true, "license": "MIT", - "dependencies": { - "debug": "^4.4.0", - "depd": "^2.0.0", - "is-promise": "^4.0.0", - "parseurl": "^1.3.3", - "path-to-regexp": "^8.0.0" - }, "engines": { - "node": ">= 18" + "node": ">=4" } }, - "node_modules/rxjs": { - "version": "7.8.2", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", - "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", - "license": "Apache-2.0", - "peer": true, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/tsyringe": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/tsyringe/-/tsyringe-4.10.0.tgz", + "integrity": "sha512-axr3IdNuVIxnaK5XGEUFTu3YmAQ6lllgrvqfEoR16g/HGnYY/6We4oWENtAnzK6/LpJ2ur9PAb80RBt7/U4ugw==", + "dev": true, + "license": "MIT", "dependencies": { - "tslib": "^2.1.0" + "tslib": "^1.9.3" + }, + "engines": { + "node": ">= 6.0.0" } }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "node_modules/tsyringe/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true, - "license": "MIT" + "license": "0BSD" }, - "node_modules/sass": { - "version": "1.97.3", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.97.3.tgz", - "integrity": "sha512-fDz1zJpd5GycprAbu4Q2PV/RprsRtKC/0z82z0JLgdytmcq0+ujJbJ/09bPGDxCLkKY3Np5cRAOcWiVkLXJURg==", + "node_modules/tuf-js": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-4.1.0.tgz", + "integrity": "sha512-50QV99kCKH5P/Vs4E2Gzp7BopNV+KzTXqWeaxrfu5IQJBOULRsTIS9seSsOVT8ZnGXzCyx55nYWAi4qJzpZKEQ==", "dev": true, "license": "MIT", "dependencies": { - "chokidar": "^4.0.0", - "immutable": "^5.0.2", - "source-map-js": ">=0.6.2 <2.0.0" - }, - "bin": { - "sass": "sass.js" + "@tufjs/models": "4.1.0", + "debug": "^4.4.3", + "make-fetch-happen": "^15.0.1" }, "engines": { - "node": ">=14.0.0" - }, - "optionalDependencies": { - "@parcel/watcher": "^2.4.1" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/sass/node_modules/chokidar": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", - "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "dependencies": { - "readdirp": "^4.0.1" + "safe-buffer": "^5.0.1" }, "engines": { - "node": ">= 14.16.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" + "node": "*" } }, - "node_modules/sass/node_modules/readdirp": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", - "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", "dev": true, - "license": "MIT", + "license": "Unlicense" + }, + "node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { - "node": ">= 14.18.0" - }, - "funding": { - "type": "individual", - "url": "https://paulmillr.com/funding/" + "node": ">=8" } }, - "node_modules/saxes": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", - "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", + "node_modules/type-is": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", + "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "xmlchars": "^2.2.0" + "content-type": "^1.0.5", + "media-typer": "^1.1.0", + "mime-types": "^3.0.0" }, "engines": { - "node": ">=v12.22.7" + "node": ">= 0.6" } }, - "node_modules/semver": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", - "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "node_modules/typed-assert": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/typed-assert/-/typed-assert-1.0.9.tgz", + "integrity": "sha512-KNNZtayBCtmnNmbo5mG47p1XsCyrx6iVqomjcZnec/1Y5GGARaxPs6r49RnSPeUP3YjNYiU9sQHAtY4BBvnZwg==", "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } + "license": "MIT" }, - "node_modules/send": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/send/-/send-1.2.1.tgz", - "integrity": "sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==", + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", "dev": true, "license": "MIT", "dependencies": { - "debug": "^4.4.3", - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "etag": "^1.8.1", - "fresh": "^2.0.0", - "http-errors": "^2.0.1", - "mime-types": "^3.0.2", - "ms": "^2.1.3", - "on-finished": "^2.4.1", - "range-parser": "^1.2.1", - "statuses": "^2.0.2" + "is-typedarray": "^1.0.0" + } + }, + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" }, "engines": { - "node": ">= 18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" + "node": ">=14.17" } }, - "node_modules/serve-static": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.1.tgz", - "integrity": "sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==", + "node_modules/undici": { + "version": "7.22.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-7.22.0.tgz", + "integrity": "sha512-RqslV2Us5BrllB+JeiZnK4peryVTndy9Dnqq62S3yYRRTj0tFQCwEniUy2167skdGOy3vqRzEvl1Dm4sV2ReDg==", "dev": true, "license": "MIT", - "dependencies": { - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "parseurl": "^1.3.3", - "send": "^1.2.0" - }, "engines": { - "node": ">= 18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" + "node": ">=20.18.1" } }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "node_modules/undici-types": { + "version": "7.19.2", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.19.2.tgz", + "integrity": "sha512-qYVnV5OEm2AW8cJMCpdV20CDyaN3g0AjDlOGf1OW4iaDEx8MwdtChUp4zu4H0VP3nDRF/8RKWH+IPp9uW0YGZg==", "dev": true, - "license": "ISC" + "license": "MIT" }, - "node_modules/shebang-command": { + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz", + "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", "dev": true, "license": "MIT", "dependencies": { - "shebang-regex": "^3.0.0" + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" }, "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.1.tgz", + "integrity": "sha512-JQ84qTuMg4nVkx8ga4A16a1epI9H6uTXAknqxkGF/aFfRLw1xC/Bp24HNLaZhHSkWd3+84t8iXnp1J0kYcZHhg==", "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/side-channel": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", - "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.2.0.tgz", + "integrity": "sha512-hpbDzxUY9BFwX+UeBnxv3Sh1q7HFxj48DTmXchNgRa46lO8uj3/1iEn3MiNUYTg1g9ctIqXCCERn8gYZhHC5lQ==", "dev": true, "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3", - "side-channel-list": "^1.0.0", - "side-channel-map": "^1.0.1", - "side-channel-weakmap": "^1.0.2" - }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=4" } }, - "node_modules/side-channel-list": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", - "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "node_modules/union": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/union/-/union-0.5.0.tgz", + "integrity": "sha512-N6uOhuW6zO95P3Mel2I2zMsbsanvvtgn6jVqJv4vbVcz/JN0OkL9suomjQGmWtxJQXOCqUJvquc1sMeNz/IwlA==", "dev": true, - "license": "MIT", "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3" + "qs": "^6.4.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 0.8.0" } }, - "node_modules/side-channel-map": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", - "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "node_modules/unique-filename": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-5.0.0.tgz", + "integrity": "sha512-2RaJTAvAb4owyjllTfXzFClJ7WsGxlykkPvCr9pA//LD9goVq+m4PPAeBgNodGZ7nSrntT/auWpJ6Y5IFXcfjg==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3" + "unique-slug": "^6.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/side-channel-weakmap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", - "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "node_modules/unique-slug": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-6.0.0.tgz", + "integrity": "sha512-4Lup7Ezn8W3d52/xBhZBVdx323ckxa7DEvd9kPQHppTkLoJXw6ltrBCyj5pnrxj0qKDxYMJ56CoxNuFCscdTiw==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3", - "side-channel-map": "^1.0.1" + "imurmurhash": "^0.1.4" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/siginfo": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", - "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", "dev": true, - "license": "ISC" + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } }, - "node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", "dev": true, - "license": "ISC", + "license": "MIT", "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">= 0.8" } }, - "node_modules/sigstore": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-4.1.0.tgz", - "integrity": "sha512-/fUgUhYghuLzVT/gaJoeVehLCgZiUxPCPMcyVNY0lIf/cTCz58K/WTI7PefDarXxp9nUKpEwg1yyz3eSBMTtgA==", + "node_modules/untildify": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", + "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@sigstore/bundle": "^4.0.0", - "@sigstore/core": "^3.1.0", - "@sigstore/protobuf-specs": "^0.5.0", - "@sigstore/sign": "^4.1.0", - "@sigstore/tuf": "^4.0.1", - "@sigstore/verify": "^3.1.0" - }, + "license": "MIT", "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=8" } }, - "node_modules/slice-ansi": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-8.0.0.tgz", - "integrity": "sha512-stxByr12oeeOyY2BlviTNQlYV5xOj47GirPr4yA1hE9JCtxfQN0+tVbkxwCtYDQWhEKWFHsEK48ORg5jrouCAg==", + "node_modules/update-browserslist-db": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "license": "MIT", "dependencies": { - "ansi-styles": "^6.2.3", - "is-fullwidth-code-point": "^5.1.0" + "escalade": "^3.2.0", + "picocolors": "^1.1.1" }, - "engines": { - "node": ">=20" + "bin": { + "update-browserslist-db": "cli.js" }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" + "peerDependencies": { + "browserslist": ">= 4.21.0" } }, - "node_modules/smart-buffer": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", - "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "node_modules/url-join": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz", + "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==", + "dev": true, + "license": "MIT" + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true, + "license": "MIT" + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", "dev": true, "license": "MIT", "engines": { - "node": ">= 6.0.0", - "npm": ">= 3.0.0" + "node": ">= 0.4.0" } }, - "node_modules/socket.io-client": { - "version": "4.8.3", - "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.8.3.tgz", - "integrity": "sha512-uP0bpjWrjQmUt5DTHq9RuoCBdFJF10cdX9X+a368j/Ft0wmaVgxlrjvK3kjvgCODOMMOz9lcaRzxmso0bTWZ/g==", + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, "license": "MIT", - "dependencies": { - "@socket.io/component-emitter": "~3.1.0", - "debug": "~4.4.1", - "engine.io-client": "~6.6.1", - "socket.io-parser": "~4.2.4" - }, - "engines": { - "node": ">=10.0.0" + "bin": { + "uuid": "dist/bin/uuid" } }, - "node_modules/socket.io-parser": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.6.tgz", - "integrity": "sha512-asJqbVBDsBCJx0pTqw3WfesSY0iRX+2xzWEWzrpcH7L6fLzrhyF8WPI8UaeM4YCuDfpwA/cgsdugMsmtz8EJeg==", - "license": "MIT", - "dependencies": { - "@socket.io/component-emitter": "~3.1.0", - "debug": "~4.4.1" - }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true, + "license": "MIT" + }, + "node_modules/validate-npm-package-name": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-7.0.2.tgz", + "integrity": "sha512-hVDIBwsRruT73PbK7uP5ebUt+ezEtCmzZz3F59BSr2F6OVFnJ/6h8liuvdLrQ88Xmnk6/+xGGuq+pG9WwTuy3A==", + "dev": true, + "license": "ISC", "engines": { - "node": ">=10.0.0" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/socks": { - "version": "2.8.7", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.7.tgz", - "integrity": "sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==", + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", "dev": true, "license": "MIT", - "dependencies": { - "ip-address": "^10.0.1", - "smart-buffer": "^4.2.0" - }, "engines": { - "node": ">= 10.0.0", - "npm": ">= 3.0.0" + "node": ">= 0.8" } }, - "node_modules/socks-proxy-agent": { - "version": "8.0.5", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz", - "integrity": "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==", + "node_modules/verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", "dev": true, + "engines": [ + "node >=0.6.0" + ], "license": "MIT", "dependencies": { - "agent-base": "^7.1.2", - "debug": "^4.3.4", - "socks": "^2.8.3" - }, - "engines": { - "node": ">= 14" + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" } }, - "node_modules/source-map": { - "version": "0.7.6", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz", - "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==", + "node_modules/vite": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.1.tgz", + "integrity": "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==", "dev": true, - "license": "BSD-3-Clause", + "license": "MIT", + "dependencies": { + "esbuild": "^0.27.0", + "fdir": "^6.5.0", + "picomatch": "^4.0.3", + "postcss": "^8.5.6", + "rollup": "^4.43.0", + "tinyglobby": "^0.2.15" + }, + "bin": { + "vite": "bin/vite.js" + }, "engines": { - "node": ">= 12" + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "lightningcss": "^1.21.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } } }, - "node_modules/source-map-js": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", - "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "node_modules/vitest": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-4.1.4.tgz", + "integrity": "sha512-tFuJqTxKb8AvfyqMfnavXdzfy3h3sWZRWwfluGbkeR7n0HUev+FmNgZ8SDrRBTVrVCjgH5cA21qGbCffMNtWvg==", "dev": true, - "license": "BSD-3-Clause", + "license": "MIT", + "dependencies": { + "@vitest/expect": "4.1.4", + "@vitest/mocker": "4.1.4", + "@vitest/pretty-format": "4.1.4", + "@vitest/runner": "4.1.4", + "@vitest/snapshot": "4.1.4", + "@vitest/spy": "4.1.4", + "@vitest/utils": "4.1.4", + "es-module-lexer": "^2.0.0", + "expect-type": "^1.3.0", + "magic-string": "^0.30.21", + "obug": "^2.1.1", + "pathe": "^2.0.3", + "picomatch": "^4.0.3", + "std-env": "^4.0.0-rc.1", + "tinybench": "^2.9.0", + "tinyexec": "^1.0.2", + "tinyglobby": "^0.2.15", + "tinyrainbow": "^3.1.0", + "vite": "^6.0.0 || ^7.0.0 || ^8.0.0", + "why-is-node-running": "^2.3.0" + }, + "bin": { + "vitest": "vitest.mjs" + }, "engines": { - "node": ">=0.10.0" + "node": "^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@edge-runtime/vm": "*", + "@opentelemetry/api": "^1.9.0", + "@types/node": "^20.0.0 || ^22.0.0 || >=24.0.0", + "@vitest/browser-playwright": "4.1.4", + "@vitest/browser-preview": "4.1.4", + "@vitest/browser-webdriverio": "4.1.4", + "@vitest/coverage-istanbul": "4.1.4", + "@vitest/coverage-v8": "4.1.4", + "@vitest/ui": "4.1.4", + "happy-dom": "*", + "jsdom": "*", + "vite": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "@edge-runtime/vm": { + "optional": true + }, + "@opentelemetry/api": { + "optional": true + }, + "@types/node": { + "optional": true + }, + "@vitest/browser-playwright": { + "optional": true + }, + "@vitest/browser-preview": { + "optional": true + }, + "@vitest/browser-webdriverio": { + "optional": true + }, + "@vitest/coverage-istanbul": { + "optional": true + }, + "@vitest/coverage-v8": { + "optional": true + }, + "@vitest/ui": { + "optional": true + }, + "happy-dom": { + "optional": true + }, + "jsdom": { + "optional": true + }, + "vite": { + "optional": false + } } }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "node_modules/w3c-xmlserializer": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz", + "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==", "dev": true, "license": "MIT", "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" + "xml-name-validator": "^5.0.0" + }, + "engines": { + "node": ">=18" } }, - "node_modules/source-map-support/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "node_modules/watchpack": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.5.1.tgz", + "integrity": "sha512-Zn5uXdcFNIA1+1Ei5McRd+iRzfhENPCe7LeABkJtNulSxjma+l7ltNx55BWZkRlwRnpOgHqxnjyaDgJnNXnqzg==", "dev": true, - "license": "BSD-3-Clause", + "license": "MIT", + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, "engines": { - "node": ">=0.10.0" + "node": ">=10.13.0" } }, - "node_modules/spdx-exceptions": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", - "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", - "dev": true, - "license": "CC-BY-3.0" - }, - "node_modules/spdx-expression-parse": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-4.0.0.tgz", - "integrity": "sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==", + "node_modules/wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", "dev": true, "license": "MIT", "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" + "minimalistic-assert": "^1.0.0" } }, - "node_modules/spdx-license-ids": { - "version": "3.0.23", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.23.tgz", - "integrity": "sha512-CWLcCCH7VLu13TgOH+r8p1O/Znwhqv/dbb6lqWy67G+pT1kHmeD/+V36AVb/vq8QMIQwVShJ6Ssl5FPh0fuSdw==", + "node_modules/weak-lru-cache": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/weak-lru-cache/-/weak-lru-cache-1.2.2.tgz", + "integrity": "sha512-DEAoo25RfSYMuTGc9vPJzZcZullwIqRDSI9LOy+fkCJPi6hykCnfKaXTuPBDuXAUcqHXyOgFtHNp/kB2FjYHbw==", "dev": true, - "license": "CC0-1.0" + "license": "MIT", + "optional": true }, - "node_modules/ssri": { - "version": "13.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-13.0.1.tgz", - "integrity": "sha512-QUiRf1+u9wPTL/76GTYlKttDEBWV1ga9ZXW8BG6kfdeyyM8LGPix9gROyg9V2+P0xNyF3X2Go526xKFdMZrHSQ==", + "node_modules/webidl-conversions": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-8.0.1.tgz", + "integrity": "sha512-BMhLD/Sw+GbJC21C/UgyaZX41nPt8bUTg+jWyDeg7e7YN4xOM05YPSIXceACnXVtqyEw/LMClUQMtMZ+PGGpqQ==", "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^7.0.3" - }, + "license": "BSD-2-Clause", "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=20" } }, - "node_modules/stackback": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", - "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", - "dev": true, - "license": "MIT" - }, - "node_modules/statuses": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", - "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", + "node_modules/webpack": { + "version": "5.106.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.106.1.tgz", + "integrity": "sha512-EW8af29ak8Oaf4T8k8YsajjrDBDYgnKZ5er6ljWFJsXABfTNowQfvHLftwcepVgdz+IoLSdEAbBiM9DFXoll9w==", "dev": true, "license": "MIT", + "peer": true, + "dependencies": { + "@types/eslint-scope": "^3.7.7", + "@types/estree": "^1.0.8", + "@types/json-schema": "^7.0.15", + "@webassemblyjs/ast": "^1.14.1", + "@webassemblyjs/wasm-edit": "^1.14.1", + "@webassemblyjs/wasm-parser": "^1.14.1", + "acorn": "^8.16.0", + "acorn-import-phases": "^1.0.3", + "browserslist": "^4.28.1", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.20.0", + "es-module-lexer": "^2.0.0", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.11", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.3.1", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^4.3.3", + "tapable": "^2.3.0", + "terser-webpack-plugin": "^5.3.17", + "watchpack": "^2.5.1", + "webpack-sources": "^3.3.4" + }, + "bin": { + "webpack": "bin/webpack.js" + }, "engines": { - "node": ">= 0.8" + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } } }, - "node_modules/std-env": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-4.0.0.tgz", - "integrity": "sha512-zUMPtQ/HBY3/50VbpkupYHbRroTRZJPRLvreamgErJVys0ceuzMkD44J/QjqhHjOzK42GQ3QZIeFG1OYfOtKqQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/stdin-discarder": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.3.1.tgz", - "integrity": "sha512-reExS1kSGoElkextOcPkel4NE99S0BWxjUHQeDFnR8S993JxpPX7KU4MNmO19NXhlJp+8dmdCbKQVNgLJh2teA==", + "node_modules/webpack-dev-middleware": { + "version": "7.4.5", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-7.4.5.tgz", + "integrity": "sha512-uxQ6YqGdE4hgDKNf7hUiPXOdtkXvBJXrfEGYSx7P7LC8hnUYGK70X6xQXUvXeNyBDDcsiQXpG2m3G9vxowaEuA==", "dev": true, "license": "MIT", + "dependencies": { + "colorette": "^2.0.10", + "memfs": "^4.43.1", + "mime-types": "^3.0.1", + "on-finished": "^2.4.1", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, "engines": { - "node": ">=18" + "node": ">= 18.12.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + } } }, - "node_modules/string-width": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.2.0.tgz", - "integrity": "sha512-6hJPQ8N0V0P3SNmP6h2J99RLuzrWz2gvT7VnK5tKvrNqJoyS9W4/Fb8mo31UiPvy00z7DQXkP2hnKBVav76thw==", + "node_modules/webpack-dev-server": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-5.2.3.tgz", + "integrity": "sha512-9Gyu2F7+bg4Vv+pjbovuYDhHX+mqdqITykfzdM9UyKqKHlsE5aAjRhR+oOEfXW5vBeu8tarzlJFIZva4ZjAdrQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/bonjour": "^3.5.13", + "@types/connect-history-api-fallback": "^1.5.4", + "@types/express": "^4.17.25", + "@types/express-serve-static-core": "^4.17.21", + "@types/serve-index": "^1.9.4", + "@types/serve-static": "^1.15.5", + "@types/sockjs": "^0.3.36", + "@types/ws": "^8.5.10", + "ansi-html-community": "^0.0.8", + "bonjour-service": "^1.2.1", + "chokidar": "^3.6.0", + "colorette": "^2.0.10", + "compression": "^1.8.1", + "connect-history-api-fallback": "^2.0.0", + "express": "^4.22.1", + "graceful-fs": "^4.2.6", + "http-proxy-middleware": "^2.0.9", + "ipaddr.js": "^2.1.0", + "launch-editor": "^2.6.1", + "open": "^10.0.3", + "p-retry": "^6.2.0", + "schema-utils": "^4.2.0", + "selfsigned": "^5.5.0", + "serve-index": "^1.9.1", + "sockjs": "^0.3.24", + "spdy": "^4.0.2", + "webpack-dev-middleware": "^7.4.2", + "ws": "^8.18.0" + }, + "bin": { + "webpack-dev-server": "bin/webpack-dev-server.js" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + }, + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-server/node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", "dev": true, "license": "MIT", "dependencies": { - "get-east-asian-width": "^1.5.0", - "strip-ansi": "^7.1.2" + "mime-types": "~2.1.34", + "negotiator": "0.6.3" }, "engines": { - "node": ">=20" + "node": ">= 0.6" + } + }, + "node_modules/webpack-dev-server/node_modules/body-parser": { + "version": "1.20.4", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.4.tgz", + "integrity": "sha512-ZTgYYLMOXY9qKU/57FAo8F+HA2dGX7bqGc71txDRC1rS4frdFI5R7NhluHxH6M0YItAP0sHB4uqAOcYKxO6uGA==", + "dev": true, + "license": "MIT", + "dependencies": { + "bytes": "~3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "~1.2.0", + "http-errors": "~2.0.1", + "iconv-lite": "~0.4.24", + "on-finished": "~2.4.1", + "qs": "~6.14.0", + "raw-body": "~2.5.3", + "type-is": "~1.6.18", + "unpipe": "~1.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" } }, - "node_modules/strip-ansi": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", - "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", + "node_modules/webpack-dev-server/node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", "dev": true, "license": "MIT", "dependencies": { - "ansi-regex": "^6.2.2" + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" }, "engines": { - "node": ">=12" + "node": ">= 8.10.0" }, "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" } }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/webpack-dev-server/node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", "dev": true, "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "safe-buffer": "5.2.1" }, "engines": { - "node": ">=8" + "node": ">= 0.6" } }, - "node_modules/symbol-tree": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "node_modules/webpack-dev-server/node_modules/cookie-signature": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.7.tgz", + "integrity": "sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==", "dev": true, "license": "MIT" }, - "node_modules/tailwindcss": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.2.1.tgz", - "integrity": "sha512-/tBrSQ36vCleJkAOsy9kbNTgaxvGbyOamC30PRePTQe/o1MFwEKHQk4Cn7BNGaPtjp+PuUrByJehM1hgxfq4sw==", + "node_modules/webpack-dev-server/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "license": "MIT", - "peer": true + "dependencies": { + "ms": "2.0.0" + } }, - "node_modules/tapable": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.0.tgz", - "integrity": "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==", + "node_modules/webpack-dev-server/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" + "license": "MIT" + }, + "node_modules/webpack-dev-server/node_modules/express": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.22.1.tgz", + "integrity": "sha512-F2X8g9P1X7uCPZMA3MVf9wcTqlyNp7IhH5qPCI0izhaOIYXaW9L535tGA3qmjRzpH+bZczqq7hVKxTR4NWnu+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "~1.20.3", + "content-disposition": "~0.5.4", + "content-type": "~1.0.4", + "cookie": "~0.7.1", + "cookie-signature": "~1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.3.1", + "fresh": "~0.5.2", + "http-errors": "~2.0.0", + "merge-descriptors": "1.0.3", + "methods": "~1.1.2", + "on-finished": "~2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "~0.1.12", + "proxy-addr": "~2.0.7", + "qs": "~6.14.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "~0.19.0", + "serve-static": "~1.16.2", + "setprototypeof": "1.2.0", + "statuses": "~2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/webpack" + "url": "https://opencollective.com/express" } }, - "node_modules/tar": { - "version": "7.5.11", - "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.11.tgz", - "integrity": "sha512-ChjMH33/KetonMTAtpYdgUFr0tbz69Fp2v7zWxQfYZX4g5ZN2nOBXm1R2xyA+lMIKrLKIoKAwFj93jE/avX9cQ==", + "node_modules/webpack-dev-server/node_modules/finalhandler": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.2.tgz", + "integrity": "sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg==", "dev": true, - "license": "BlueOak-1.0.0", + "license": "MIT", "dependencies": { - "@isaacs/fs-minipass": "^4.0.0", - "chownr": "^3.0.0", - "minipass": "^7.1.2", - "minizlib": "^3.1.0", - "yallist": "^5.0.0" + "debug": "2.6.9", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "on-finished": "~2.4.1", + "parseurl": "~1.3.3", + "statuses": "~2.0.2", + "unpipe": "~1.0.0" }, "engines": { - "node": ">=18" - } - }, - "node_modules/tar/node_modules/yallist": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", - "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", - "dev": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": ">=18" + "node": ">= 0.8" } }, - "node_modules/tinybench": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", - "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", - "dev": true, - "license": "MIT" - }, - "node_modules/tinyexec": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.0.4.tgz", - "integrity": "sha512-u9r3uZC0bdpGOXtlxUIdwf9pkmvhqJdrVCH9fapQtgy/OeTTMZ1nqH7agtvEfmGui6e1XxjcdrlxvxJvc3sMqw==", + "node_modules/webpack-dev-server/node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", "dev": true, "license": "MIT", "engines": { - "node": ">=18" + "node": ">= 0.6" } }, - "node_modules/tinyglobby": { - "version": "0.2.15", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", - "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "node_modules/webpack-dev-server/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "fdir": "^6.5.0", - "picomatch": "^4.0.3" + "is-glob": "^4.0.1" }, "engines": { - "node": ">=12.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/SuperchupuDev" + "node": ">= 6" } }, - "node_modules/tinyrainbow": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-3.1.0.tgz", - "integrity": "sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==", + "node_modules/webpack-dev-server/node_modules/http-proxy-middleware": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.9.tgz", + "integrity": "sha512-c1IyJYLYppU574+YI7R4QyX2ystMtVXZwIdzazUIPIJsHuWNd+mho2j+bKoHftndicGj9yh+xjd+l0yj7VeT1Q==", "dev": true, "license": "MIT", + "dependencies": { + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + }, "engines": { - "node": ">=14.0.0" + "node": ">=12.0.0" + }, + "peerDependencies": { + "@types/express": "^4.17.13" + }, + "peerDependenciesMeta": { + "@types/express": { + "optional": true + } } }, - "node_modules/tldts": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/tldts/-/tldts-7.0.26.tgz", - "integrity": "sha512-WiGwQjr0qYdNNG8KpMKlSvpxz652lqa3Rd+/hSaDcY4Uo6SKWZq2LAF+hsAhUewTtYhXlorBKgNF3Kk8hnjGoQ==", + "node_modules/webpack-dev-server/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, "license": "MIT", "dependencies": { - "tldts-core": "^7.0.26" + "safer-buffer": ">= 2.1.2 < 3" }, - "bin": { - "tldts": "bin/cli.js" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/tldts-core": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-7.0.26.tgz", - "integrity": "sha512-5WJ2SqFsv4G2Dwi7ZFVRnz6b2H1od39QME1lc2y5Ew3eWiZMAeqOAfWpRP9jHvhUl881406QtZTODvjttJs+ew==", + "node_modules/webpack-dev-server/node_modules/ipaddr.js": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.3.0.tgz", + "integrity": "sha512-Zv/pA+ciVFbCSBBjGfaKUya/CcGmUHzTydLMaTwrUUEM2DIEO3iZvueGxmacvmN50fGpGVKeTXpb2LcYQxeVdg==", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">= 10" + } }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "node_modules/webpack-dev-server/node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", "dev": true, "license": "MIT", "engines": { - "node": ">=0.6" + "node": ">= 0.6" } }, - "node_modules/tough-cookie": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-6.0.1.tgz", - "integrity": "sha512-LktZQb3IeoUWB9lqR5EWTHgW/VTITCXg4D21M+lvybRVdylLrRMnqaIONLVb5mav8vM19m44HIcGq4qASeu2Qw==", + "node_modules/webpack-dev-server/node_modules/merge-descriptors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "tldts": "^7.0.5" - }, - "engines": { - "node": ">=16" + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/tr46": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-6.0.0.tgz", - "integrity": "sha512-bLVMLPtstlZ4iMQHpFHTR7GAGj2jxi8Dg0s2h2MafAE4uSWF98FC/3MomU51iQAMf8/qDUbKWf5GxuvvVcXEhw==", + "node_modules/webpack-dev-server/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "dev": true, "license": "MIT", - "dependencies": { - "punycode": "^2.3.1" - }, "engines": { - "node": ">=20" + "node": ">= 0.6" } }, - "node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD", - "peer": true - }, - "node_modules/tuf-js": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-4.1.0.tgz", - "integrity": "sha512-50QV99kCKH5P/Vs4E2Gzp7BopNV+KzTXqWeaxrfu5IQJBOULRsTIS9seSsOVT8ZnGXzCyx55nYWAi4qJzpZKEQ==", + "node_modules/webpack-dev-server/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dev": true, "license": "MIT", "dependencies": { - "@tufjs/models": "4.1.0", - "debug": "^4.4.3", - "make-fetch-happen": "^15.0.1" + "mime-db": "1.52.0" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">= 0.6" } }, - "node_modules/type-is": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", - "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", + "node_modules/webpack-dev-server/node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", "dev": true, "license": "MIT", - "dependencies": { - "content-type": "^1.0.5", - "media-typer": "^1.1.0", - "mime-types": "^3.0.0" - }, "engines": { "node": ">= 0.6" } }, - "node_modules/typescript": { - "version": "5.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", - "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "node_modules/webpack-dev-server/node_modules/open": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/open/-/open-10.2.0.tgz", + "integrity": "sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==", "dev": true, - "license": "Apache-2.0", - "peer": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" + "license": "MIT", + "dependencies": { + "default-browser": "^5.2.1", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "wsl-utils": "^0.1.0" }, "engines": { - "node": ">=14.17" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/undici": { - "version": "7.22.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-7.22.0.tgz", - "integrity": "sha512-RqslV2Us5BrllB+JeiZnK4peryVTndy9Dnqq62S3yYRRTj0tFQCwEniUy2167skdGOy3vqRzEvl1Dm4sV2ReDg==", + "node_modules/webpack-dev-server/node_modules/path-to-regexp": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.13.tgz", + "integrity": "sha512-A/AGNMFN3c8bOlvV9RreMdrv7jsmF9XIfDeCd87+I8RNg6s78BhJxMu69NEMHBSJFxKidViTEdruRwEk/WIKqA==", + "dev": true, + "license": "MIT" + }, + "node_modules/webpack-dev-server/node_modules/picomatch": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", "dev": true, "license": "MIT", "engines": { - "node": ">=20.18.1" + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/unique-filename": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-5.0.0.tgz", - "integrity": "sha512-2RaJTAvAb4owyjllTfXzFClJ7WsGxlykkPvCr9pA//LD9goVq+m4PPAeBgNodGZ7nSrntT/auWpJ6Y5IFXcfjg==", + "node_modules/webpack-dev-server/node_modules/qs": { + "version": "6.14.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.2.tgz", + "integrity": "sha512-V/yCWTTF7VJ9hIh18Ugr2zhJMP01MY7c5kh4J870L7imm6/DIzBsNLTXzMwUA3yZ5b/KBqLx8Kp3uRvd7xSe3Q==", "dev": true, - "license": "ISC", + "license": "BSD-3-Clause", "dependencies": { - "unique-slug": "^6.0.0" + "side-channel": "^1.1.0" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/unique-slug": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-6.0.0.tgz", - "integrity": "sha512-4Lup7Ezn8W3d52/xBhZBVdx323ckxa7DEvd9kPQHppTkLoJXw6ltrBCyj5pnrxj0qKDxYMJ56CoxNuFCscdTiw==", + "node_modules/webpack-dev-server/node_modules/raw-body": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.3.tgz", + "integrity": "sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "imurmurhash": "^0.1.4" + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.4.24", + "unpipe": "~1.0.0" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">= 0.8" } }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "node_modules/webpack-dev-server/node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, "engines": { - "node": ">= 0.8" + "node": ">=8.10.0" } }, - "node_modules/update-browserslist-db": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", - "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", + "node_modules/webpack-dev-server/node_modules/send": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.2.tgz", + "integrity": "sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg==", "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], "license": "MIT", "dependencies": { - "escalade": "^3.2.0", - "picocolors": "^1.1.1" - }, - "bin": { - "update-browserslist-db": "cli.js" + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "~0.5.2", + "http-errors": "~2.0.1", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "~2.4.1", + "range-parser": "~1.2.1", + "statuses": "~2.0.2" }, - "peerDependencies": { - "browserslist": ">= 4.21.0" + "engines": { + "node": ">= 0.8.0" } }, - "node_modules/validate-npm-package-name": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-7.0.2.tgz", - "integrity": "sha512-hVDIBwsRruT73PbK7uP5ebUt+ezEtCmzZz3F59BSr2F6OVFnJ/6h8liuvdLrQ88Xmnk6/+xGGuq+pG9WwTuy3A==", + "node_modules/webpack-dev-server/node_modules/serve-static": { + "version": "1.16.3", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.3.tgz", + "integrity": "sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA==", "dev": true, - "license": "ISC", + "license": "MIT", + "dependencies": { + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "~0.19.1" + }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">= 0.8.0" } }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "node_modules/webpack-dev-server/node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", "dev": true, "license": "MIT", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, "engines": { - "node": ">= 0.8" + "node": ">= 0.6" } }, - "node_modules/vite": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.1.tgz", - "integrity": "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==", + "node_modules/webpack-dev-server/node_modules/wsl-utils": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/wsl-utils/-/wsl-utils-0.1.0.tgz", + "integrity": "sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "esbuild": "^0.27.0", - "fdir": "^6.5.0", - "picomatch": "^4.0.3", - "postcss": "^8.5.6", - "rollup": "^4.43.0", - "tinyglobby": "^0.2.15" - }, - "bin": { - "vite": "bin/vite.js" + "is-wsl": "^3.1.0" }, "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": ">=18" }, "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" - }, - "optionalDependencies": { - "fsevents": "~2.3.3" - }, - "peerDependencies": { - "@types/node": "^20.19.0 || >=22.12.0", - "jiti": ">=1.21.0", - "less": "^4.0.0", - "lightningcss": "^1.21.0", - "sass": "^1.70.0", - "sass-embedded": "^1.70.0", - "stylus": ">=0.54.8", - "sugarss": "^5.0.0", - "terser": "^5.16.0", - "tsx": "^4.8.1", - "yaml": "^2.4.2" + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/webpack-merge": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-6.0.1.tgz", + "integrity": "sha512-hXXvrjtx2PLYx4qruKl+kyRSLc52V+cCvMxRjmKwoA+CBbbF5GfIBtR6kCvl0fYGqTUPKB+1ktVmTHqMOzgCBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "clone-deep": "^4.0.1", + "flat": "^5.0.2", + "wildcard": "^2.0.1" }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "jiti": { - "optional": true - }, - "less": { - "optional": true - }, - "lightningcss": { - "optional": true - }, - "sass": { - "optional": true - }, - "sass-embedded": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - }, - "tsx": { - "optional": true - }, - "yaml": { - "optional": true - } + "engines": { + "node": ">=18.0.0" } }, - "node_modules/vitest": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-4.1.2.tgz", - "integrity": "sha512-xjR1dMTVHlFLh98JE3i/f/WePqJsah4A0FK9cc8Ehp9Udk0AZk6ccpIZhh1qJ/yxVWRZ+Q54ocnD8TXmkhspGg==", + "node_modules/webpack-sources": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.3.4.tgz", + "integrity": "sha512-7tP1PdV4vF+lYPnkMR0jMY5/la2ub5Fc/8VQrrU+lXkiM6C4TjVfGw7iKfyhnTQOsD+6Q/iKw0eFciziRgD58Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack-subresource-integrity": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/webpack-subresource-integrity/-/webpack-subresource-integrity-5.1.0.tgz", + "integrity": "sha512-sacXoX+xd8r4WKsy9MvH/q/vBtEHr86cpImXwyg74pFIpERKt6FmB8cXpeuh0ZLgclOlHI4Wcll7+R5L02xk9Q==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "@vitest/expect": "4.1.2", - "@vitest/mocker": "4.1.2", - "@vitest/pretty-format": "4.1.2", - "@vitest/runner": "4.1.2", - "@vitest/snapshot": "4.1.2", - "@vitest/spy": "4.1.2", - "@vitest/utils": "4.1.2", - "es-module-lexer": "^2.0.0", - "expect-type": "^1.3.0", - "magic-string": "^0.30.21", - "obug": "^2.1.1", - "pathe": "^2.0.3", - "picomatch": "^4.0.3", - "std-env": "^4.0.0-rc.1", - "tinybench": "^2.9.0", - "tinyexec": "^1.0.2", - "tinyglobby": "^0.2.15", - "tinyrainbow": "^3.1.0", - "vite": "^6.0.0 || ^7.0.0 || ^8.0.0", - "why-is-node-running": "^2.3.0" - }, - "bin": { - "vitest": "vitest.mjs" + "typed-assert": "^1.0.8" }, "engines": { - "node": "^20.0.0 || ^22.0.0 || >=24.0.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" + "node": ">= 12" }, "peerDependencies": { - "@edge-runtime/vm": "*", - "@opentelemetry/api": "^1.9.0", - "@types/node": "^20.0.0 || ^22.0.0 || >=24.0.0", - "@vitest/browser-playwright": "4.1.2", - "@vitest/browser-preview": "4.1.2", - "@vitest/browser-webdriverio": "4.1.2", - "@vitest/ui": "4.1.2", - "happy-dom": "*", - "jsdom": "*", - "vite": "^6.0.0 || ^7.0.0 || ^8.0.0" + "html-webpack-plugin": ">= 5.0.0-beta.1 < 6", + "webpack": "^5.12.0" }, "peerDependenciesMeta": { - "@edge-runtime/vm": { - "optional": true - }, - "@opentelemetry/api": { - "optional": true - }, - "@types/node": { - "optional": true - }, - "@vitest/browser-playwright": { - "optional": true - }, - "@vitest/browser-preview": { - "optional": true - }, - "@vitest/browser-webdriverio": { - "optional": true - }, - "@vitest/ui": { - "optional": true - }, - "happy-dom": { - "optional": true - }, - "jsdom": { + "html-webpack-plugin": { "optional": true - }, - "vite": { - "optional": false } } }, - "node_modules/w3c-xmlserializer": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz", - "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==", + "node_modules/webpack/node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/webpack/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/webpack/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "xml-name-validator": "^5.0.0" + "mime-db": "1.52.0" }, "engines": { - "node": ">=18" + "node": ">= 0.6" } }, - "node_modules/watchpack": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.5.1.tgz", - "integrity": "sha512-Zn5uXdcFNIA1+1Ei5McRd+iRzfhENPCe7LeABkJtNulSxjma+l7ltNx55BWZkRlwRnpOgHqxnjyaDgJnNXnqzg==", + "node_modules/websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" }, "engines": { - "node": ">=10.13.0" + "node": ">=0.8.0" } }, - "node_modules/weak-lru-cache": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/weak-lru-cache/-/weak-lru-cache-1.2.2.tgz", - "integrity": "sha512-DEAoo25RfSYMuTGc9vPJzZcZullwIqRDSI9LOy+fkCJPi6hykCnfKaXTuPBDuXAUcqHXyOgFtHNp/kB2FjYHbw==", + "node_modules/websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/whatwg-encoding": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", + "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", + "deprecated": "Use @exodus/bytes instead for a more spec-conformant and faster implementation", "dev": true, "license": "MIT", - "optional": true + "dependencies": { + "iconv-lite": "0.6.3" + }, + "engines": { + "node": ">=12" + } }, - "node_modules/webidl-conversions": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-8.0.1.tgz", - "integrity": "sha512-BMhLD/Sw+GbJC21C/UgyaZX41nPt8bUTg+jWyDeg7e7YN4xOM05YPSIXceACnXVtqyEw/LMClUQMtMZ+PGGpqQ==", + "node_modules/whatwg-encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, "engines": { - "node": ">=20" + "node": ">=0.10.0" } }, "node_modules/whatwg-mimetype": { @@ -9249,6 +19399,13 @@ "node": ">= 8" } }, + "node_modules/which-module": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", + "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==", + "dev": true, + "license": "ISC" + }, "node_modules/why-is-node-running": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", @@ -9266,6 +19423,13 @@ "node": ">=8" } }, + "node_modules/wildcard": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", + "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", + "dev": true, + "license": "MIT" + }, "node_modules/wrap-ansi": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", @@ -9281,6 +19445,96 @@ "node": ">=8" } }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/wrap-ansi-cjs/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/wrap-ansi/node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", @@ -9359,6 +19613,26 @@ "dev": true, "license": "ISC" }, + "node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "node_modules/write-file-atomic/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, "node_modules/ws": { "version": "8.18.3", "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", @@ -9380,6 +19654,23 @@ } } }, + "node_modules/wsl-utils": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/wsl-utils/-/wsl-utils-0.3.1.tgz", + "integrity": "sha512-g/eziiSUNBSsdDJtCLB8bdYEUMj4jR7AGeUo96p/3dTafgjHhpF4RiCFPiRILwjQoDXx5MqkBr4fwWtR3Ky4Wg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-wsl": "^3.1.0", + "powershell-utils": "^0.1.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/xml-name-validator": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz", @@ -9468,6 +19759,40 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/yoctocolors": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/yoctocolors/-/yoctocolors-2.1.2.tgz", @@ -9500,7 +19825,6 @@ "integrity": "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==", "dev": true, "license": "MIT", - "peer": true, "funding": { "url": "https://github.com/sponsors/colinhacks" } diff --git a/frontend/package.json b/frontend/package.json index 3c2d76f6..e478ecb5 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -7,10 +7,22 @@ "build": "ng build", "watch": "ng build --watch --configuration development", "test": "ng test", + "test:unit": "ng test", "test:ci": "ng test --watch=false", + "test:unit:ci": "ng test --watch=false", "test:junit": "ng test --watch=false --reporters=junit --output-file=coverage/frontend/junit.xml", "test:sonar": "ng test --watch=false --coverage --coverage-reporters=lcovonly --coverage-reporters=text-summary", - "test:sonar:junit": "ng test --watch=false --coverage --coverage-reporters=lcovonly --coverage-reporters=text-summary --reporters=junit --output-file=coverage/frontend/junit.xml" + "test:sonar:junit": "ng test --watch=false --coverage --coverage-reporters=lcovonly --coverage-reporters=text-summary --reporters=junit --output-file=coverage/frontend/junit.xml", + "test:integration": "ng run frontend:test-integration", + "test:integration:ci": "ng run frontend:test-integration --watch=false", + "test:integration:junit": "ng run frontend:test-integration --watch=false --reporters=junit --output-file=coverage/frontend/integration-junit.xml", + "test:integration:html": "ng run frontend:test-integration --watch=false --reporters=html --output-file=coverage/frontend/integration-html/index.html", + "test:integration:html:open": "npx vite preview --outDir coverage/frontend/integration-html", + "test:integration:sonar": "ng run frontend:test-integration --watch=false --coverage --coverage-reporters=lcovonly --coverage-reporters=text-summary && node scripts/filter-integration-lcov.mjs coverage/frontend/lcov.info", + "test:e2e:coverage": "cypress run && npx nyc report --reporter=lcovonly --reporter=text-summary --report-dir coverage/e2e --temp-dir .nyc_output && node scripts/filter-e2e-lcov.mjs coverage/e2e/lcov.info", + "e2e": "ng e2e", + "cypress:open": "cypress open", + "cypress:run": "cypress run" }, "private": true, "packageManager": "npm@11.6.2", @@ -28,12 +40,20 @@ "tslib": "^2.3.0" }, "devDependencies": { + "@angular-builders/custom-webpack": "^21.0.3", "@angular/build": "^21.2.2", "@angular/cli": "^21.2.2", "@angular/compiler-cli": "^21.2.0", + "@cypress/code-coverage": "^4.0.3", + "@cypress/schematic": "^5.0.0", "@tailwindcss/postcss": "^4.1.12", "@vitest/coverage-v8": "^4.1.2", + "@vitest/ui": "^4.1.4", + "babel-plugin-istanbul": "^8.0.0", + "cypress": "15.13.1", + "http-server": "^14.1.1", "jsdom": "^28.0.0", + "nyc": "^18.0.0", "postcss": "^8.5.3", "prettier": "^3.8.1", "tailwindcss": "^4.1.12", diff --git a/frontend/scripts/filter-e2e-lcov.mjs b/frontend/scripts/filter-e2e-lcov.mjs new file mode 100644 index 00000000..c09be126 --- /dev/null +++ b/frontend/scripts/filter-e2e-lcov.mjs @@ -0,0 +1,83 @@ +#!/usr/bin/env node + +import fs from 'node:fs'; +import path from 'node:path'; + +const lcovPathArg = process.argv[2] ?? 'coverage/e2e/lcov.info'; +const lcovPath = path.resolve(process.cwd(), lcovPathArg); + +const excludedSourceSuffixes = [ + 'src/app/features/notification/components/notification-topbar-panel-component/notification-topbar-panel-component.ts', + 'src/app/shared/pipes/elapsed-time.pipe.ts', +]; + +if (!fs.existsSync(lcovPath)) { + console.error(`LCOV file not found: ${lcovPath}`); + process.exit(1); +} + +const raw = fs.readFileSync(lcovPath, 'utf8'); +const records = raw + .split('end_of_record') + .map((record) => record.trim()) + .filter((record) => record.length > 0); + +const keptRecords = []; +const excludedSources = []; + +for (const record of records) { + const sfLine = record.split('\n').find((line) => line.startsWith('SF:')); + if (!sfLine) { + continue; + } + + const sourceFile = sfLine.slice(3).trim(); + const normalizedSourceFile = sourceFile.replaceAll('\\', '/'); + const mustExclude = excludedSourceSuffixes.some((suffix) => + normalizedSourceFile.endsWith(suffix) + ); + + if (mustExclude) { + excludedSources.push(sourceFile); + continue; + } + + keptRecords.push(record); +} + +const rewrittenRecords = keptRecords.map((record) => `${record}\nend_of_record`); +const rewritten = `${rewrittenRecords.join('\n')}\n`; +fs.writeFileSync(lcovPath, rewritten, 'utf8'); + +let lf = 0; +let lh = 0; +let brf = 0; +let brh = 0; +let fnf = 0; +let fnh = 0; +let sourceFiles = 0; + +for (const record of keptRecords) { + sourceFiles += 1; + for (const line of record.split('\n')) { + if (line.startsWith('LF:')) lf += Number(line.slice(3)); + else if (line.startsWith('LH:')) lh += Number(line.slice(3)); + else if (line.startsWith('BRF:')) brf += Number(line.slice(4)); + else if (line.startsWith('BRH:')) brh += Number(line.slice(4)); + else if (line.startsWith('FNF:')) fnf += Number(line.slice(4)); + else if (line.startsWith('FNH:')) fnh += Number(line.slice(4)); + } +} + +const pct = (num, den) => (den > 0 ? ((num / den) * 100).toFixed(2) : '100.00'); + +console.log('Filtered e2e LCOV (targeted source exclusions)'); +console.log(`Source files kept: ${sourceFiles}`); +console.log(`Excluded files: ${excludedSources.length}`); +for (const excludedSource of excludedSources) { + console.log(`- ${excludedSource}`); +} +console.log(`Statements: ${pct(lh, lf)}% (${lh}/${lf})`); +console.log(`Branches: ${pct(brh, brf)}% (${brh}/${brf})`); +console.log(`Functions: ${pct(fnh, fnf)}% (${fnh}/${fnf})`); +console.log(`Lines: ${pct(lh, lf)}% (${lh}/${lf})`); diff --git a/frontend/scripts/filter-integration-lcov.mjs b/frontend/scripts/filter-integration-lcov.mjs new file mode 100644 index 00000000..fcfd3381 --- /dev/null +++ b/frontend/scripts/filter-integration-lcov.mjs @@ -0,0 +1,69 @@ +#!/usr/bin/env node + +import fs from 'node:fs'; +import path from 'node:path'; + +const lcovPathArg = process.argv[2] ?? 'coverage/frontend/lcov.info'; +const lcovPath = path.resolve(process.cwd(), lcovPathArg); + +if (!fs.existsSync(lcovPath)) { + console.error(`LCOV file not found: ${lcovPath}`); + process.exit(1); +} + +const raw = fs.readFileSync(lcovPath, 'utf8'); +const records = raw + .split('end_of_record') + .map((record) => record.trim()) + .filter((record) => record.length > 0); + +const keptRecords = []; +let excludedHtmlFiles = 0; + +for (const record of records) { + const sfLine = record.split('\n').find((line) => line.startsWith('SF:')); + if (!sfLine) { + continue; + } + + const sourceFile = sfLine.slice(3).trim(); + if (sourceFile.endsWith('.html')) { + excludedHtmlFiles += 1; + continue; + } + + keptRecords.push(record); +} + +const rewritten = `${keptRecords.map((record) => `${record}\nend_of_record`).join('\n')}\n`; +fs.writeFileSync(lcovPath, rewritten, 'utf8'); + +let lf = 0; +let lh = 0; +let brf = 0; +let brh = 0; +let fnf = 0; +let fnh = 0; +let sourceFiles = 0; + +for (const record of keptRecords) { + sourceFiles += 1; + for (const line of record.split('\n')) { + if (line.startsWith('LF:')) lf += Number(line.slice(3)); + else if (line.startsWith('LH:')) lh += Number(line.slice(3)); + else if (line.startsWith('BRF:')) brf += Number(line.slice(4)); + else if (line.startsWith('BRH:')) brh += Number(line.slice(4)); + else if (line.startsWith('FNF:')) fnf += Number(line.slice(4)); + else if (line.startsWith('FNH:')) fnh += Number(line.slice(4)); + } +} + +const pct = (num, den) => (den > 0 ? ((num / den) * 100).toFixed(2) : '100.00'); + +console.log('Filtered integration LCOV (excluding .html templates)'); +console.log(`Source files kept: ${sourceFiles}`); +console.log(`HTML files excluded: ${excludedHtmlFiles}`); +console.log(`Statements: ${pct(lh, lf)}% (${lh}/${lf})`); +console.log(`Branches: ${pct(brh, brf)}% (${brh}/${brf})`); +console.log(`Functions: ${pct(fnh, fnf)}% (${fnh}/${fnf})`); +console.log(`Lines: ${pct(lh, lf)}% (${lh}/${lf})`); diff --git a/frontend/src/app/features/alarm-configuration/services/alarm-config-form-state.service.ts b/frontend/src/app/features/alarm-configuration/services/alarm-config-form-state.service.ts index cdb1ddf3..448d23e5 100644 --- a/frontend/src/app/features/alarm-configuration/services/alarm-config-form-state.service.ts +++ b/frontend/src/app/features/alarm-configuration/services/alarm-config-form-state.service.ts @@ -58,7 +58,7 @@ export class AlarmConfigFormStateService { this.isDevicesLoading.set(true); - return this.apartmentApi.getApartmentByPlantId(normalizedPlantId).pipe( + return this.apartmentApi.loadApartmentViewForPlantId(normalizedPlantId).pipe( map((apartment) => this.datapointExtraction.extractDeviceOptions(apartment)), tap(() => { this.isDevicesLoading.set(false); diff --git a/frontend/src/app/features/apartment-monitor/services/apartment-api.service.ts b/frontend/src/app/features/apartment-monitor/services/apartment-api.service.ts index b921d34c..af9a22af 100644 --- a/frontend/src/app/features/apartment-monitor/services/apartment-api.service.ts +++ b/frontend/src/app/features/apartment-monitor/services/apartment-api.service.ts @@ -24,7 +24,7 @@ export class ApartmentApiService { private readonly apartmentsEndpoint = `${this.baseUrl}/apartments`; public getCurrentApartment(): Observable { - return this.getAvailablePlants().pipe( + return this.getAllPlants().pipe( map((plants) => { const storedPlantId = this.getActivePlantId(); const selectedPlant = plants.find((plant) => plant.id === storedPlantId) ?? plants[0]; @@ -36,12 +36,12 @@ export class ApartmentApiService { this.setActivePlantId(selectedPlant.id); return selectedPlant.id; }), - switchMap((plantId) => this.getApartmentByPlantId(plantId)), + switchMap((plantId) => this.loadApartmentViewForPlantId(plantId)), ); } public getAvailableApartments(): Observable { - return this.getAvailablePlants().pipe( + return this.getAllPlants().pipe( map((plants) => plants .map((plant) => ({ id: plant.id, name: plant.name })) @@ -50,7 +50,7 @@ export class ApartmentApiService { ); } - public getApartmentByPlantId(plantId: string): Observable { + public loadApartmentViewForPlantId(plantId: string): Observable { const query = `?plantid=${encodeURIComponent(plantId)}`; return this.http.get(`${this.plantEndpoint}${query}`).pipe( @@ -119,10 +119,6 @@ export class ApartmentApiService { return null; } - private getAvailablePlants(): Observable { - return this.getAllPlants(); - } - private extractPlants(response: unknown): PlantDto[] { const directArray = this.asPlantArray(response); if (directArray.length > 0) { @@ -192,13 +188,16 @@ export class ApartmentApiService { } private mapPlantToApartment(plant: PlantDto): Apartment { + const rooms = Array.isArray(plant.rooms) ? plant.rooms : []; + return { id: plant.id, name: plant.name, isEnabled: true, - rooms: plant.rooms.map((room) => { + rooms: rooms.map((room) => { + const roomDevices = Array.isArray(room.devices) ? room.devices : []; const visibleDevices = this.deduplicateRoomDevices( - room.devices.filter((device) => !this.isEnergyMeasureDevice(device.type, device.subType)), + roomDevices.filter((device) => !this.isEnergyMeasureDevice(device.type, device.subType)), ); return { diff --git a/frontend/src/app/features/main-layout/main-layout.component.ts b/frontend/src/app/features/main-layout/main-layout.component.ts index 87019115..bea09137 100644 --- a/frontend/src/app/features/main-layout/main-layout.component.ts +++ b/frontend/src/app/features/main-layout/main-layout.component.ts @@ -184,7 +184,7 @@ export class MainLayoutComponent implements OnInit, OnDestroy, AfterViewInit { this.alarmStateService.clearNotifications(); } - public logout(): void{ + public logout(): void { this.closeNotificationPanel(); this.internalAuthService.logoutFromBackend().subscribe(() => { void this.router.navigate(['/auth/login']); diff --git a/frontend/src/app/features/user-management/services/user-api.service.ts b/frontend/src/app/features/user-management/services/user-api.service.ts index 6aca8229..e0dcbf0e 100644 --- a/frontend/src/app/features/user-management/services/user-api.service.ts +++ b/frontend/src/app/features/user-management/services/user-api.service.ts @@ -33,36 +33,4 @@ export class UserApiService { return this.http.delete(`${this.baseUrl}/users/${encodeURIComponent(id.toString())}`); } - private decodeTempPassword(tempPassword: string): string { - if (!this.isBase64Encoded(tempPassword)) { - return tempPassword; - } - - try { - return atob(tempPassword); - } catch { - return tempPassword; - } - } - - private isBase64Encoded(value: string): boolean { - const normalized = value.trim(); - if (normalized.length === 0 || normalized.length % 4 !== 0) { - return false; - } - - if (!/^[A-Za-z0-9+/]+={0,2}$/.test(normalized)) { - return false; - } - - try { - const decoded = atob(normalized); - const reEncoded = btoa(decoded).replace(/=+$/, ''); - const withoutPadding = normalized.replace(/=+$/, ''); - return reEncoded === withoutPadding; - } catch { - return false; - } - } - } diff --git a/frontend/test/integration/app/core/alarm/services/alarm-api.service.integration.spec.ts b/frontend/test/integration/app/core/alarm/services/alarm-api.service.integration.spec.ts new file mode 100644 index 00000000..c6032d96 --- /dev/null +++ b/frontend/test/integration/app/core/alarm/services/alarm-api.service.integration.spec.ts @@ -0,0 +1,242 @@ +import { HttpErrorResponse, provideHttpClient } from '@angular/common/http'; +import { HttpTestingController, provideHttpClientTesting } from '@angular/common/http/testing'; +import { TestBed } from '@angular/core/testing'; +import { afterEach, beforeEach, describe, expect, it } from 'vitest'; +import { AlarmPriority } from 'src/app/core/alarm/models/alarm-priority.enum'; +import type { AlarmRule } from 'src/app/core/alarm/models/alarm-rule.model'; +import type { ActiveAlarm } from 'src/app/core/alarm/models/active-alarm.model'; +import type { CreateAlarmRuleRequestDto } from 'src/app/core/alarm/models/dto/create-alarm-rule-request.model.dto'; +import type { UpdateAlarmRuleRequestDto } from 'src/app/core/alarm/models/dto/update-alarm-rule-request.model.dto'; +import { API_BASE_URL } from 'src/app/core/tokens/api-base-url.token'; +import { AlarmApiService } from 'src/app/core/alarm/services/alarm-api.service'; + +describe('AlarmApiService', () => { + let service: AlarmApiService; + let httpController: HttpTestingController; + + const apiBaseUrl = 'http://localhost:3000'; + const alarmRulesBaseUrl = `${apiBaseUrl}/alarm-rules`; + const alarmEventsBaseUrl = `${apiBaseUrl}/alarm-events`; + + const alarm: AlarmRule = { + id: 'alarm-1', + position: 'Camera 101 - Sensore temperatura', + name: 'Temperatura alta', + thresholdOperator: '>', + thresholdValue: '30', + priority: AlarmPriority.RED, + armingTime: '08:00:00', + dearmingTime: '20:00:00', + isArmed: true, + deviceId: 'device-1', + }; + + const activeAlarm: ActiveAlarm = { + id: 'active-1', + alarmRuleId: 'alarm-1', + deviceId: 'dev-1', + alarmName: 'Temperatura alta', + priority: AlarmPriority.RED, + activationTime: '2026-03-24T10:00:00.000Z', + resolutionTime: null, + position: 'Camera 101', + userId: 7, + userUsername: 'oss_7', + }; + + beforeEach(() => { + TestBed.configureTestingModule({ + providers: [ + AlarmApiService, + provideHttpClient(), + provideHttpClientTesting(), + { provide: API_BASE_URL, useValue: apiBaseUrl }, + ], + }); + + service = TestBed.inject(AlarmApiService); + httpController = TestBed.inject(HttpTestingController); + }); + + afterEach(() => { + httpController.verify(); + }); + + it('getAlarmRules chiama GET /alarm-rules e restituisce la lista', () => { + service.getAlarmRules().subscribe((result) => { + expect(result).toEqual([alarm]); + expect(result).toHaveLength(1); + }); + + const request = httpController.expectOne(alarmRulesBaseUrl); + expect(request.request.method).toBe('GET'); + request.flush([alarm]); + }); + + it('getAlarmRule chiama GET /alarm-rules/:id e restituisce il dettaglio', () => { + service.getAlarmRule('alarm-1').subscribe((result) => { + expect(result).toEqual(alarm); + expect(result.id).toBe('alarm-1'); + }); + + const request = httpController.expectOne(`${alarmRulesBaseUrl}/alarm-1`); + expect(request.request.method).toBe('GET'); + request.flush(alarm); + }); + + it('getAlarmRule codifica id con caratteri riservati', () => { + service.getAlarmRule('alarm/1').subscribe((result) => { + expect(result).toEqual(alarm); + }); + + const request = httpController.expectOne(`${alarmRulesBaseUrl}/alarm%2F1`); + expect(request.request.method).toBe('GET'); + request.flush(alarm); + }); + + it('createAlarmRule chiama POST /alarm-rules con payload corretto', () => { + const payload: CreateAlarmRuleRequestDto = { + name: 'Nuovo allarme', + deviceId: 'device-7', + plantId: 'plant-4', + priority: AlarmPriority.GREEN, + thresholdOperator: '=', + thresholdValue: '22', + armingTime: '09:00', + dearmingTime: '18:00', + }; + + service.createAlarmRule(payload).subscribe((result) => { + expect(result).toEqual(alarm); + }); + + const request = httpController.expectOne(alarmRulesBaseUrl); + expect(request.request.method).toBe('POST'); + expect(request.request.body).toEqual(payload); + request.flush(alarm); + }); + + it('updateAlarmRule chiama PUT /alarm-rules/:id con payload corretto', () => { + const payload: UpdateAlarmRuleRequestDto = { + name: 'Allarme soglia', + priority: AlarmPriority.ORANGE, + thresholdOperator: '<', + thresholdValue: '15', + armingTime: '00:00', + dearmingTime: '23:59', + isArmed: false, + }; + + service.updateAlarmRule('alarm-2', payload).subscribe((result) => { + expect(result).toEqual(alarm); + }); + + const request = httpController.expectOne(`${alarmRulesBaseUrl}/alarm-2`); + expect(request.request.method).toBe('PUT'); + expect(request.request.body).toEqual(payload); + request.flush(alarm); + }); + + it('deleteAlarmRule chiama DELETE /alarm-rules/:id', () => { + service.deleteAlarmRule('alarm-3').subscribe((result) => { + expect(result).toBeNull(); + }); + + const request = httpController.expectOne(`${alarmRulesBaseUrl}/alarm-3`); + expect(request.request.method).toBe('DELETE'); + request.flush(null); + }); + + it('getActiveAlarms chiama GET /alarm-events/unmanaged/:userId/:limit/:offset e restituisce la lista', () => { + service.getActiveAlarms(7, 6, 0).subscribe((result) => { + expect(result).toEqual([activeAlarm]); + expect(result).toHaveLength(1); + }); + + const request = httpController.expectOne(`${alarmEventsBaseUrl}/unmanaged/7/6/0`); + expect(request.request.method).toBe('GET'); + request.flush([activeAlarm]); + }); + + it('getResolvedAlarms chiama GET /alarm-events/managed/:userId/:limit/:offset e restituisce la lista', () => { + service.getResolvedAlarms(7, 12, 6).subscribe((result) => { + expect(result).toEqual([activeAlarm]); + }); + + const request = httpController.expectOne(`${alarmEventsBaseUrl}/managed/7/12/6`); + expect(request.request.method).toBe('GET'); + request.flush([activeAlarm]); + }); + + it('getAlarmEventById chiama GET /alarm-events/:id e restituisce il dettaglio', () => { + service.getAlarmEventById('active-1').subscribe((result) => { + expect(result).toEqual(activeAlarm); + }); + + const request = httpController.expectOne(`${alarmEventsBaseUrl}/active-1`); + expect(request.request.method).toBe('GET'); + request.flush(activeAlarm); + }); + + it('getActiveAlarms valida userId, limit e offset interi', () => { + expect(() => service.getActiveAlarms(1.5)).toThrow('userId must be an integer.'); + expect(() => service.getActiveAlarms(7, 2.5, 0)).toThrow('limit and offset must be integers.'); + expect(() => service.getActiveAlarms(7, 2, 1.5)).toThrow('limit and offset must be integers.'); + }); + + it('getResolvedAlarms valida userId, limit e offset interi', () => { + expect(() => service.getResolvedAlarms(1.5)).toThrow('userId must be an integer.'); + expect(() => service.getResolvedAlarms(7, 2.5, 0)).toThrow('limit and offset must be integers.'); + expect(() => service.getResolvedAlarms(7, 2, 1.5)).toThrow('limit and offset must be integers.'); + }); + + it('resolveAlarm chiama PATCH /alarm-events/resolve', () => { + service.resolveAlarm('active-1', 7).subscribe((result) => { + expect(result).toBeNull(); + }); + + const request = httpController.expectOne(`${alarmEventsBaseUrl}/resolve`); + expect(request.request.method).toBe('PATCH'); + expect(request.request.body).toEqual({ alarmId: 'active-1', userId: 7 }); + request.flush(null); + }); + + it('resolveAlarm invia alarmId nel body anche con caratteri riservati', () => { + service.resolveAlarm('active/1', 9).subscribe((result) => { + expect(result).toBeNull(); + }); + + const request = httpController.expectOne(`${alarmEventsBaseUrl}/resolve`); + expect(request.request.method).toBe('PATCH'); + expect(request.request.body).toEqual({ alarmId: 'active/1', userId: 9 }); + request.flush(null); + }); + + it('getAlarmRules restituisce lista vuota senza errori di parsing', () => { + service.getAlarmRules().subscribe((result) => { + expect(result).toEqual([]); + }); + + const request = httpController.expectOne(alarmRulesBaseUrl); + expect(request.request.method).toBe('GET'); + request.flush([]); + }); + + it('propaga l errore HTTP al chiamante', () => { + let receivedStatus: number | null = null; + + service.getAlarmRule('missing').subscribe({ + next: () => { + throw new Error('Non dovrebbe emettere next in caso di errore'); + }, + error: (error: HttpErrorResponse) => { + receivedStatus = error.status; + }, + }); + + const request = httpController.expectOne(`${alarmRulesBaseUrl}/missing`); + request.flush('Not found', { status: 404, statusText: 'Not Found' }); + + expect(receivedStatus).toBe(404); + }); +}); diff --git a/frontend/test/integration/app/core/alarm/services/alarm-management-refresh.service.integration.spec.ts b/frontend/test/integration/app/core/alarm/services/alarm-management-refresh.service.integration.spec.ts new file mode 100644 index 00000000..cf66503e --- /dev/null +++ b/frontend/test/integration/app/core/alarm/services/alarm-management-refresh.service.integration.spec.ts @@ -0,0 +1,38 @@ +import { TestBed } from '@angular/core/testing'; +import { firstValueFrom, take } from 'rxjs'; +import { beforeEach, describe, expect, it, vi } from 'vitest'; +import { AlarmManagementRefreshService } from 'src/app/core/alarm/services/alarm-management-refresh.service'; + +describe('AlarmManagementRefreshService', () => { + let service: AlarmManagementRefreshService; + + beforeEach(() => { + TestBed.configureTestingModule({ + providers: [AlarmManagementRefreshService], + }); + + service = TestBed.inject(AlarmManagementRefreshService); + }); + + it('espone un observable hot che emette alla richiesta di refresh', async () => { + const refreshPromise = firstValueFrom(service.getRefreshRequested$().pipe(take(1))); + + service.requestRefresh(); + + await expect(refreshPromise).resolves.toBeUndefined(); + }); + + it('non bufferizza refresh precedenti per nuovi subscriber', async () => { + service.requestRefresh(); + + const nextEmission = vi.fn(); + const subscription = service.getRefreshRequested$().subscribe(nextEmission); + + expect(nextEmission).not.toHaveBeenCalled(); + + service.requestRefresh(); + expect(nextEmission).toHaveBeenCalledTimes(1); + + subscription.unsubscribe(); + }); +}); \ No newline at end of file diff --git a/frontend/test/integration/app/core/alarm/services/alarm-state.service.integration.spec.ts b/frontend/test/integration/app/core/alarm/services/alarm-state.service.integration.spec.ts new file mode 100644 index 00000000..1f092f58 --- /dev/null +++ b/frontend/test/integration/app/core/alarm/services/alarm-state.service.integration.spec.ts @@ -0,0 +1,408 @@ +import { TestBed } from '@angular/core/testing'; +import { Subscription } from 'rxjs'; +import { afterEach, beforeEach, describe, expect, it } from 'vitest'; +import { AlarmEvent } from 'src/app/core/alarm/models/alarm-event.model'; +import { AlarmPriority } from 'src/app/core/alarm/models/alarm-priority.enum'; +import { ActiveAlarm } from 'src/app/core/alarm/models/active-alarm.model'; +import { NotificationEvent } from 'src/app/features/notification/models/notification-event.model'; +import { AlarmStateService } from 'src/app/core/alarm/services/alarm-state.service'; + +describe('AlarmStateService', () => { + let service: AlarmStateService; + let subscriptions: Subscription[]; + + const alarmEventA: AlarmEvent = { + id: 'active-alarm-1', + alarmRuleId: 'alarm-rule-1', + alarmName: 'Pulsante antipanico', + priority: AlarmPriority.RED, + activationTime: '2026-03-19T10:00:00.000Z', + resolutionTime: null, + }; + + const alarmEventB: AlarmEvent = { + id: 'active-alarm-2', + alarmRuleId: 'alarm-rule-2', + alarmName: 'Sensore porta', + priority: AlarmPriority.ORANGE, + activationTime: '2026-03-19T10:01:00.000Z', + resolutionTime: null, + }; + + const notificationA: NotificationEvent = { + notificationId: 'notification-1', + title: 'Nuova nota di reparto', + sentAt: '2026-03-19T10:02:00.000Z', + }; + + const notificationB: NotificationEvent = { + notificationId: 'notification-2', + title: 'Batteria quasi scarica', + sentAt: '2026-03-19T10:03:00.000Z', + }; + + beforeEach(() => { + TestBed.configureTestingModule({ + providers: [AlarmStateService], + }); + + service = TestBed.inject(AlarmStateService); + subscriptions = []; + }); + + afterEach(() => { + for (const subscription of subscriptions) { + subscription.unsubscribe(); + } + }); + + it('inizializza lo stato con allarmi e notifiche vuoti', () => { + const alarmsHistory: number[] = []; + const notificationsHistory: number[] = []; + + subscriptions.push( + service.getActiveAlarms$().subscribe((alarms) => { + alarmsHistory.push(alarms.length); + }), + service.getNotifications$().subscribe((notifications) => { + notificationsHistory.push(notifications.length); + }) + ); + + expect(alarmsHistory.at(-1)).toBe(0); + expect(notificationsHistory.at(-1)).toBe(0); + }); + + it('aggiunge un nuovo allarme attivo quando viene chiamato onAlarmTriggered', () => { + let latestAlarms = [] as ReturnType; + + const alarms: AlarmEvent[] = [alarmEventA]; + subscriptions.push( + service.getActiveAlarms$().subscribe((value) => { + latestAlarms = createAlarmCollector(value); + }) + ); + + for (const alarm of alarms) { + service.onAlarmTriggered(alarm); + } + + expect(latestAlarms.length).toBe(1); + expect(latestAlarms[0].id).toBe(alarmEventA.id); + expect(latestAlarms[0].alarmRuleId).toBe(alarmEventA.alarmRuleId); + expect(latestAlarms[0].alarmName).toBe(alarmEventA.alarmName); + expect(latestAlarms[0].priority).toBe(alarmEventA.priority); + expect(latestAlarms[0].resolutionTime).toBe(alarmEventA.resolutionTime); + }); + + it("aggiorna un allarme esistente senza duplicarlo per id istanza", () => { + const updatedEvent: AlarmEvent = { + ...alarmEventA, + alarmName: 'Nome allarme aggiornato', + priority: AlarmPriority.WHITE, + }; + + let latestAlarms = [] as ReturnType; + + subscriptions.push( + service.getActiveAlarms$().subscribe((value) => { + latestAlarms = createAlarmCollector(value); + }) + ); + + service.onAlarmTriggered(alarmEventA); + service.onAlarmTriggered(updatedEvent); + + expect(latestAlarms.length).toBe(1); + expect(latestAlarms[0].id).toBe(alarmEventA.id); + expect(latestAlarms[0].alarmName).toBe('Nome allarme aggiornato'); + expect(latestAlarms[0].priority).toBe(AlarmPriority.WHITE); + expect(latestAlarms[0].resolutionTime).toBe(updatedEvent.resolutionTime); + }); + + it('rimuove solo l allarme target quando viene chiamato onAlarmResolved', () => { + let latestActiveAlarmIds: string[] = []; + + subscriptions.push( + service.getActiveAlarms$().subscribe((alarms) => { + latestActiveAlarmIds = alarms.map((alarm) => alarm.id); + }) + ); + + service.onAlarmTriggered(alarmEventA); + service.onAlarmTriggered(alarmEventB); + + service.onAlarmResolved(alarmEventA.id); + + expect(latestActiveAlarmIds).toEqual([alarmEventB.id]); + }); + + it('antepone le notifiche in modo che la piu recente sia la prima', () => { + let latestNotificationIds: string[] = []; + + subscriptions.push( + service.getNotifications$().subscribe((notifications) => { + latestNotificationIds = notifications.map((notification) => notification.notificationId); + }) + ); + + service.onNotificationReceived(notificationA); + service.onNotificationReceived(notificationB); + + expect(latestNotificationIds).toEqual([notificationB.notificationId, notificationA.notificationId]); + }); + + it('removeNotification elimina una sola notifica e aggiorna il contatore', () => { + let latestNotificationIds: string[] = []; + let unreadNotificationsCount = -1; + + subscriptions.push( + service.getNotifications$().subscribe((notifications) => { + latestNotificationIds = notifications.map((notification) => notification.notificationId); + }), + service.getUnreadNotificationsCount$().subscribe((count) => { + unreadNotificationsCount = count; + }) + ); + + service.onNotificationReceived(notificationA); + service.onNotificationReceived(notificationB); + service.removeNotification(notificationA.notificationId); + + expect(latestNotificationIds).toEqual([notificationB.notificationId]); + expect(unreadNotificationsCount).toBe(1); + }); + + it('clearNotifications svuota la lista notifiche e porta il contatore a zero', () => { + let latestNotificationIds: string[] = []; + let unreadNotificationsCount = -1; + + subscriptions.push( + service.getNotifications$().subscribe((notifications) => { + latestNotificationIds = notifications.map((notification) => notification.notificationId); + }), + service.getUnreadNotificationsCount$().subscribe((count) => { + unreadNotificationsCount = count; + }) + ); + + service.onNotificationReceived(notificationA); + service.onNotificationReceived(notificationB); + service.clearNotifications(); + + expect(latestNotificationIds).toEqual([]); + expect(unreadNotificationsCount).toBe(0); + }); + + it('una notifica dismissata non viene reintrodotta quando arriva di nuovo', () => { + let latestNotificationIds: string[] = []; + + subscriptions.push( + service.getNotifications$().subscribe((notifications) => { + latestNotificationIds = notifications.map((notification) => notification.notificationId); + }) + ); + + service.onNotificationReceived(notificationA); + service.dismissNotification(notificationA.notificationId); + service.removeNotification(notificationA.notificationId); + service.onNotificationReceived(notificationA); + + expect(latestNotificationIds).toEqual([]); + }); + + it('setActiveAlarms imposta snapshot iniziale degli allarmi attivi', () => { + let latestActiveAlarmIds: string[] = []; + + const snapshot: ActiveAlarm[] = [ + { + id: 'snapshot-1', + alarmRuleId: 'rule-1', + alarmName: 'Snapshot allarme', + priority: AlarmPriority.RED, + activationTime: '2026-03-19T10:00:00.000Z', + resolutionTime: null, + position: 'Camera 102', + userId: 3, + }, + ]; + + subscriptions.push( + service.getActiveAlarms$().subscribe((alarms) => { + latestActiveAlarmIds = alarms.map((alarm) => alarm.id); + }) + ); + + service.setActiveAlarms(snapshot); + + expect(latestActiveAlarmIds).toEqual(['snapshot-1']); + }); + + it('setActiveAlarms preserva eventuali allarmi locali non inclusi nello snapshot', () => { + let latestActiveAlarmIds: string[] = []; + + const snapshot: ActiveAlarm[] = [ + { + id: 'snapshot-1', + alarmRuleId: 'rule-1', + alarmName: 'Snapshot allarme', + priority: AlarmPriority.RED, + activationTime: '2026-03-19T10:00:00.000Z', + resolutionTime: null, + position: 'Camera 103', + userId: 4, + }, + ]; + + subscriptions.push( + service.getActiveAlarms$().subscribe((alarms) => { + latestActiveAlarmIds = alarms.map((alarm) => alarm.id); + }) + ); + + service.onAlarmTriggered(alarmEventA); + service.setActiveAlarms(snapshot, 'merge'); + + expect(latestActiveAlarmIds).toEqual(['snapshot-1', alarmEventA.id]); + }); + + it('setActiveAlarms non reintroduce allarmi gia risolti localmente', () => { + let latestActiveAlarmIds: string[] = []; + + const staleSnapshot: ActiveAlarm[] = [ + { + id: alarmEventA.id, + alarmRuleId: alarmEventA.alarmRuleId, + alarmName: alarmEventA.alarmName, + priority: alarmEventA.priority, + activationTime: alarmEventA.activationTime, + resolutionTime: null, + position: 'Camera 104', + userId: 5, + }, + ]; + + subscriptions.push( + service.getActiveAlarms$().subscribe((alarms) => { + latestActiveAlarmIds = alarms.map((alarm) => alarm.id); + }) + ); + + service.onAlarmTriggered(alarmEventA); + service.onAlarmResolved(alarmEventA.id); + service.setActiveAlarms(staleSnapshot, 'merge'); + + expect(latestActiveAlarmIds).toEqual([]); + }); + + it('setActiveAlarms in replace sostituisce la pagina corrente senza mantenere elementi precedenti', () => { + let latestActiveAlarmIds: string[] = []; + + const firstPage: ActiveAlarm[] = [ + { + id: 'page-1-a', + alarmRuleId: 'rule-a', + alarmName: 'Allarme pagina 1', + priority: AlarmPriority.RED, + activationTime: '2026-03-19T10:00:00.000Z', + resolutionTime: null, + position: 'Camera 201', + userId: 1, + }, + { + id: 'page-1-b', + alarmRuleId: 'rule-b', + alarmName: 'Allarme pagina 1 bis', + priority: AlarmPriority.ORANGE, + activationTime: '2026-03-19T10:01:00.000Z', + resolutionTime: null, + position: 'Camera 202', + userId: 2, + }, + ]; + + const secondPage: ActiveAlarm[] = [ + { + id: 'page-2-a', + alarmRuleId: 'rule-c', + alarmName: 'Allarme pagina 2', + priority: AlarmPriority.GREEN, + activationTime: '2026-03-19T10:02:00.000Z', + resolutionTime: null, + position: 'Camera 203', + userId: 3, + }, + ]; + + subscriptions.push( + service.getActiveAlarms$().subscribe((alarms) => { + latestActiveAlarmIds = alarms.map((alarm) => alarm.id); + }) + ); + + service.setActiveAlarms(firstPage, 'replace'); + service.setActiveAlarms(secondPage, 'replace'); + + expect(latestActiveAlarmIds).toEqual(['page-2-a']); + }); + + it('emette conteggi derivati corretti per allarmi e notifiche non lette', () => { + let activeAlarmsCount = -1; + let unreadNotificationsCount = -1; + + subscriptions.push( + service.getActiveAlarmsCount$().subscribe((count) => { + activeAlarmsCount = count; + }), + service.getUnreadNotificationsCount$().subscribe((count) => { + unreadNotificationsCount = count; + }) + ); + + service.onAlarmTriggered(alarmEventA); + service.onAlarmTriggered(alarmEventB); + service.onNotificationReceived(notificationA); + + expect(activeAlarmsCount).toBe(2); + expect(unreadNotificationsCount).toBe(1); + + service.onAlarmResolved(alarmEventA.id); + service.onNotificationReceived(notificationB); + + expect(activeAlarmsCount).toBe(1); + expect(unreadNotificationsCount).toBe(2); + }); +}); + +function createAlarmCollector( + alarms: Array<{ + id: string; + alarmRuleId: string; + alarmName: string; + priority: AlarmPriority; + activationTime: string; + resolutionTime: string | null; + position: string; + userId: number | null; + }> +): Array<{ + id: string; + alarmRuleId: string; + alarmName: string; + priority: AlarmPriority; + activationTime: string; + resolutionTime: string | null; + position: string; + userId: number | null; +}> { + return alarms.map((alarm) => ({ + id: alarm.id, + alarmRuleId: alarm.alarmRuleId, + alarmName: alarm.alarmName, + priority: alarm.priority, + activationTime: alarm.activationTime, + resolutionTime: alarm.resolutionTime, + position: alarm.position, + userId: alarm.userId, + })); +} diff --git a/frontend/test/integration/app/core/alarm/services/event-subscription.service.deep.integration.spec.ts b/frontend/test/integration/app/core/alarm/services/event-subscription.service.deep.integration.spec.ts new file mode 100644 index 00000000..c8131e23 --- /dev/null +++ b/frontend/test/integration/app/core/alarm/services/event-subscription.service.deep.integration.spec.ts @@ -0,0 +1,437 @@ +import { HttpClient } from '@angular/common/http'; +import { TestBed } from '@angular/core/testing'; +import { BehaviorSubject, Subscription, of, throwError } from 'rxjs'; +import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'; +import { Socket } from 'socket.io-client'; +import { API_BASE_URL } from 'src/app/core/tokens/api-base-url.token'; +import { InternalAuthService } from 'src/app/core/services/internal-auth.service'; +import { ConnectionStatus } from 'src/app/core/alarm/models/connection-status.enum'; +import { AlarmPriority } from 'src/app/core/alarm/models/alarm-priority.enum'; +import { AlarmStateService } from 'src/app/core/alarm/services/alarm-state.service'; +import { AlarmApiService } from 'src/app/core/alarm/services/alarm-api.service'; +import { EventSubscriptionService, SOCKET_IO_FACTORY } from 'src/app/core/alarm/services/event-subscription.service'; +import { UserRole } from 'src/app/core/models/user-role.enum'; +import { UserSession } from 'src/app/features/user-auth/models/user-session.model'; + + +type SocketEventHandler = (payload?: unknown) => void; + +type FakeSocket = { + on: ReturnType; + off: ReturnType; + addListener: ReturnType; + removeListener: ReturnType; + emit: ReturnType; + disconnect: ReturnType; + removeAllListeners: ReturnType; + trigger: (eventName: string, payload?: unknown) => void; +}; + +describe('EventSubscriptionService', () => { + let service: EventSubscriptionService; + let fakeSocket: FakeSocket; + let socketIoFactoryMock: ReturnType; + let subscriptions: Subscription[]; + let currentUser$: BehaviorSubject; + let internalAuthServiceSpy: { getCurrentUser$: ReturnType }; + let httpClientSpy: { get: ReturnType }; + let alarmApiServiceSpy: { getAlarmEventById: ReturnType }; + + const alarmStateSpy = { + onAlarmTriggered: vi.fn(), + onAlarmResolved: vi.fn(), + onNotificationReceived: vi.fn(), + }; + + beforeEach(() => { + vi.clearAllMocks(); + + fakeSocket = createFakeSocket(); + socketIoFactoryMock = vi.fn(() => fakeSocket as unknown as Socket); + currentUser$ = new BehaviorSubject(null); + internalAuthServiceSpy = { + getCurrentUser$: vi.fn(() => currentUser$.asObservable()), + }; + httpClientSpy = { + get: vi.fn(() => of([])), + }; + alarmApiServiceSpy = { + getAlarmEventById: vi.fn(() => + of({ + id: 'active-alarm-backend-1', + alarmRuleId: 'alarm-rule-backend-1', + deviceId: 'device-1', + alarmName: 'Saturazione bassa reparto A', + priority: AlarmPriority.RED, + activationTime: '2026-04-07T10:00:00.000Z', + resolutionTime: null, + position: 'Stanza 12', + userId: null, + userUsername: null, + }) + ), + }; + + TestBed.configureTestingModule({ + providers: [ + EventSubscriptionService, + { + provide: SOCKET_IO_FACTORY, + useValue: socketIoFactoryMock, + }, + { + provide: AlarmStateService, + useValue: alarmStateSpy, + }, + { + provide: API_BASE_URL, + useValue: ' http://api.example.local ', + }, + { + provide: InternalAuthService, + useValue: internalAuthServiceSpy, + }, + { + provide: HttpClient, + useValue: httpClientSpy, + }, + { + provide: AlarmApiService, + useValue: alarmApiServiceSpy, + }, + ], + }); + + service = TestBed.inject(EventSubscriptionService); + subscriptions = []; + }); + + afterEach(() => { + for (const subscription of subscriptions) { + subscription.unsubscribe(); + } + + currentUser$.complete(); + service.ngOnDestroy(); + }); + + it('crea la connessione socket in initialize usando API_BASE_URL normalizzato', () => { + service.initialize([]); + + expect(socketIoFactoryMock).toHaveBeenCalledWith('http://api.example.local/ws', { + transports: ['websocket'], + reconnection: true, + autoConnect: true, + }); + }); + + it('risolve il namespace websocket ws quando API_BASE_URL termina con api', () => { + TestBed.resetTestingModule(); + + TestBed.configureTestingModule({ + providers: [ + EventSubscriptionService, + { + provide: SOCKET_IO_FACTORY, + useValue: socketIoFactoryMock, + }, + { + provide: AlarmStateService, + useValue: alarmStateSpy, + }, + { + provide: API_BASE_URL, + useValue: 'http://localhost/api', + }, + { + provide: InternalAuthService, + useValue: internalAuthServiceSpy, + }, + { + provide: HttpClient, + useValue: httpClientSpy, + }, + { + provide: AlarmApiService, + useValue: alarmApiServiceSpy, + }, + ], + }); + + service = TestBed.inject(EventSubscriptionService); + service.initialize([]); + + expect(socketIoFactoryMock).toHaveBeenCalledWith('http://localhost/ws', { + transports: ['websocket'], + reconnection: true, + autoConnect: true, + }); + }); + + it('aggiorna lo stato connessione su connect, reconnect attempt e disconnect', () => { + const statuses: ConnectionStatus[] = []; + subscriptions.push( + service.getConnectionStatus$().subscribe((status) => { + statuses.push(status); + }) + ); + + service.initialize([]); + + fakeSocket.trigger('connect'); + fakeSocket.trigger('reconnect_attempt'); + fakeSocket.trigger('disconnect'); + + expect(statuses).toEqual([ + ConnectionStatus.DISCONNECTED, + ConnectionStatus.CONNECTED, + ConnectionStatus.RECONNECTING, + ConnectionStatus.DISCONNECTED, + ]); + }); + + it('esegue join e leave delle room con deduplicazione', () => { + service.initialize([]); + + service.joinRoom('ward-1'); + service.joinRoom('ward-1'); + service.joinRoom(' ward-2 '); + service.leaveRoom('ward-2'); + service.leaveRoom('ward-2'); + + expect(fakeSocket.emit).toHaveBeenCalledWith('join-ward', 'ward-1'); + expect(fakeSocket.emit).toHaveBeenCalledWith('join-ward', 'ward-2'); + expect(fakeSocket.emit).toHaveBeenCalledWith('leave-ward', 'ward-2'); + + const joinWardCalls = fakeSocket.emit.mock.calls.filter(([event]) => event === 'join-ward'); + const leaveWardCalls = fakeSocket.emit.mock.calls.filter(([event]) => event === 'leave-ward'); + + expect(joinWardCalls.length).toBe(2); + expect(leaveWardCalls.length).toBe(1); + }); + + it('riesegue il join delle room gia sottoscritte al connect', () => { + service.initialize(['ward-a', 'ward-a']); + + const joinCallsBeforeReconnect = fakeSocket.emit.mock.calls.filter( + ([event]) => event === 'join-ward' + ).length; + + fakeSocket.trigger('connect'); + + const joinCallsAfterReconnect = fakeSocket.emit.mock.calls.filter( + ([event]) => event === 'join-ward' + ); + + expect(joinCallsBeforeReconnect).toBe(1); + expect(joinCallsAfterReconnect.length).toBe(2); + expect(joinCallsAfterReconnect.at(-1)).toEqual(['join-ward', 'ward-a']); + }); + + it.skip('bootstrap delle room da plant all al login quando cache ward e vuota', () => { + httpClientSpy.get.mockReturnValue( + of([ + { id: 'plant-1', wardId: 21 }, + { id: 'plant-2', wardId: ' 22 ' }, + { id: 'plant-3', wardId: 21 }, + { id: 'plant-4' }, + ]) + ); + + service.initialize([]); + currentUser$.next(buildSession('oss-1')); + + expect(httpClientSpy.get).toHaveBeenCalledWith('http://api.example.local/plant/all'); + + const joinWardCalls = fakeSocket.emit.mock.calls.filter(([event]) => event === 'join-ward'); + expect(joinWardCalls).toEqual([ + ['join-ward', '21'], + ['join-ward', '22'], + ]); + }); + + it.skip('non interrompe il realtime quando bootstrap plant all fallisce', () => { + httpClientSpy.get.mockReturnValue(throwError(() => new Error('network'))); + + service.initialize([]); + currentUser$.next(buildSession('oss-2')); + + expect(httpClientSpy.get).toHaveBeenCalledTimes(1); + + fakeSocket.trigger('push-event', { + alarmRuleId: 'alarm-rule-bootstrap-fallback', + wardId: 15, + alarmEventId: 'active-alarm-bootstrap-fallback', + }); + + expect(alarmStateSpy.onAlarmTriggered).toHaveBeenCalledWith( + expect.objectContaining({ + id: 'active-alarm-bootstrap-fallback', + }), + ); + expect(alarmStateSpy.onNotificationReceived).toHaveBeenCalledWith( + expect.objectContaining({ + notificationId: 'alarm-triggered-active-alarm-bootstrap-fallback', + }), + ); + }); + + it('evita bootstrap ripetuto per lo stesso utente nella stessa sessione', () => { + httpClientSpy.get.mockReturnValue(of([])); + + service.initialize([]); + currentUser$.next(buildSession('oss-3')); + currentUser$.next(buildSession('oss-3')); + + expect(httpClientSpy.get).toHaveBeenCalledTimes(1); + }); + + it.skip('refreshWardRoomSubscription riallinea le room joinate senza reload pagina', () => { + httpClientSpy.get + .mockReturnValueOnce(of([{ id: 'plant-1', wardId: 10 }])) + .mockReturnValueOnce(of([{ id: 'plant-2', wardId: 11 }])); + + service.initialize([]); + currentUser$.next(buildSession('oss-4')); + + service.refreshWardRoomSubscription(); + + expect(httpClientSpy.get).toHaveBeenCalledTimes(2); + expect(fakeSocket.emit).toHaveBeenCalledWith('join-ward', '10'); + expect(fakeSocket.emit).toHaveBeenCalledWith('leave-ward', '10'); + expect(fakeSocket.emit).toHaveBeenCalledWith('join-ward', '11'); + }); + + it('gestisce payload backend nativo su push-event per allarme attivato', () => { + service.initialize([]); + + fakeSocket.trigger('push-event', { + alarmRuleId: 'alarm-rule-backend-1', + wardId: 12, + alarmEventId: 'active-alarm-backend-1', + }); + + expect(alarmStateSpy.onAlarmTriggered).toHaveBeenCalledWith( + expect.objectContaining({ + id: 'active-alarm-backend-1', + alarmRuleId: 'alarm-rule-backend-1', + alarmName: 'Saturazione bassa reparto A', + }), + ); + + expect(alarmStateSpy.onNotificationReceived).toHaveBeenCalledWith( + expect.objectContaining({ + notificationId: 'alarm-triggered-active-alarm-backend-1', + title: '▲ Saturazione bassa reparto A', + }), + ); + + expect(fakeSocket.emit).toHaveBeenCalledWith('join-ward', '12'); + }); + + it('gestisce canale backend alarm-resolved e aggiorna stato/notifiche', () => { + service.initialize([]); + + fakeSocket.trigger('alarm-resolved', { + alarmEventId: 'active-alarm-backend-2', + wardId: 13, + }); + + expect(alarmStateSpy.onAlarmResolved).toHaveBeenCalledWith('active-alarm-backend-2'); + expect(alarmStateSpy.onNotificationReceived).toHaveBeenCalledWith( + expect.objectContaining({ + notificationId: 'alarm-resolved-active-alarm-backend-2', + title: 'Allarme risolto', + }), + ); + expect(fakeSocket.emit).toHaveBeenCalledWith('join-ward', '13'); + }); + + it('ignora eventi raw malformati e payload backend non validi', () => { + service.initialize([]); + + fakeSocket.trigger('push-event', { + alarmRuleId: 'alarm-rule-backend-3', + wardId: 'not-a-number', + alarmEventId: 'active-alarm-backend-3', + }); + + fakeSocket.trigger('push-event', 'not-an-object'); + + fakeSocket.trigger('alarm-resolved', { + alarmEventId: 42, + wardId: 10, + }); + + expect(alarmStateSpy.onAlarmTriggered).not.toHaveBeenCalled(); + expect(alarmStateSpy.onAlarmResolved).not.toHaveBeenCalled(); + expect(alarmStateSpy.onNotificationReceived).not.toHaveBeenCalled(); + }); + + it('disconnette il socket e rimuove i listener alla distruzione', () => { + service.initialize([]); + + service.ngOnDestroy(); + + expect(fakeSocket.removeAllListeners).toHaveBeenCalled(); + expect(fakeSocket.disconnect).toHaveBeenCalled(); + }); +}); + +function createFakeSocket(): FakeSocket { + const listeners = new Map>(); + + const addHandler = (eventName: string, handler: SocketEventHandler): void => { + if (!listeners.has(eventName)) { + listeners.set(eventName, new Set()); + } + + listeners.get(eventName)?.add(handler); + }; + + const removeHandler = (eventName: string, handler: SocketEventHandler): void => { + listeners.get(eventName)?.delete(handler); + }; + + const fakeSocket: FakeSocket = { + on: vi.fn((eventName: string, handler: SocketEventHandler) => { + addHandler(eventName, handler); + return fakeSocket; + }), + off: vi.fn((eventName: string, handler: SocketEventHandler) => { + removeHandler(eventName, handler); + return fakeSocket; + }), + addListener: vi.fn((eventName: string, handler: SocketEventHandler) => { + addHandler(eventName, handler); + return fakeSocket; + }), + removeListener: vi.fn((eventName: string, handler: SocketEventHandler) => { + removeHandler(eventName, handler); + return fakeSocket; + }), + emit: vi.fn(), + disconnect: vi.fn(), + removeAllListeners: vi.fn(() => { + listeners.clear(); + return fakeSocket; + }), + trigger: (eventName: string, payload?: unknown) => { + for (const handler of listeners.get(eventName) ?? []) { + handler(payload); + } + }, + }; + + return fakeSocket; +} + +function buildSession(userId: string): UserSession { + return { + userId, + username: `${userId}@example.local`, + role: UserRole.OPERATORE_SANITARIO, + accessToken: 'test-token', + isFirstAccess: false, + }; +} diff --git a/frontend/test/integration/app/core/alarm/services/event-subscription.service.integration.spec.ts b/frontend/test/integration/app/core/alarm/services/event-subscription.service.integration.spec.ts new file mode 100644 index 00000000..f8d2bb41 --- /dev/null +++ b/frontend/test/integration/app/core/alarm/services/event-subscription.service.integration.spec.ts @@ -0,0 +1,543 @@ +import { HttpClient } from '@angular/common/http'; +import { TestBed } from '@angular/core/testing'; +import { BehaviorSubject, Subscription, of, throwError } from 'rxjs'; +import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'; +import { Socket } from 'socket.io-client'; +import { API_BASE_URL } from 'src/app/core/tokens/api-base-url.token'; +import { InternalAuthService } from 'src/app/core/services/internal-auth.service'; +import { ConnectionStatus } from 'src/app/core/alarm/models/connection-status.enum'; +import { AlarmPriority } from 'src/app/core/alarm/models/alarm-priority.enum'; +import { AlarmStateService } from 'src/app/core/alarm/services/alarm-state.service'; +import { AlarmApiService } from 'src/app/core/alarm/services/alarm-api.service'; +import { EventSubscriptionService, SOCKET_IO_FACTORY } from 'src/app/core/alarm/services/event-subscription.service'; +import { UserRole } from 'src/app/core/models/user-role.enum'; +import { UserSession } from 'src/app/features/user-auth/models/user-session.model'; + + +type SocketEventHandler = (payload?: unknown) => void; + +type FakeSocket = { + on: ReturnType; + off: ReturnType; + addListener: ReturnType; + removeListener: ReturnType; + emit: ReturnType; + disconnect: ReturnType; + removeAllListeners: ReturnType; + trigger: (eventName: string, payload?: unknown) => void; +}; + +describe('EventSubscriptionService', () => { + let service: EventSubscriptionService; + let fakeSocket: FakeSocket; + let socketIoFactoryMock: ReturnType; + let subscriptions: Subscription[]; + let currentUser$: BehaviorSubject; + let internalAuthServiceSpy: { getCurrentUser$: ReturnType }; + let httpClientSpy: { get: ReturnType }; + let alarmApiServiceSpy: { getAlarmEventById: ReturnType }; + + const alarmStateSpy = { + onAlarmTriggered: vi.fn(), + onAlarmResolved: vi.fn(), + onNotificationReceived: vi.fn(), + }; + + beforeEach(() => { + vi.clearAllMocks(); + + fakeSocket = createFakeSocket(); + socketIoFactoryMock = vi.fn(() => fakeSocket as unknown as Socket); + currentUser$ = new BehaviorSubject(null); + internalAuthServiceSpy = { + getCurrentUser$: vi.fn(() => currentUser$.asObservable()), + }; + httpClientSpy = { + get: vi.fn(() => of([])), + }; + alarmApiServiceSpy = { + getAlarmEventById: vi.fn(() => + of({ + id: 'active-alarm-backend-1', + alarmRuleId: 'alarm-rule-backend-1', + deviceId: 'device-1', + alarmName: 'Saturazione bassa reparto A', + priority: AlarmPriority.RED, + activationTime: '2026-04-07T10:00:00.000Z', + resolutionTime: null, + position: 'Stanza 12', + userId: null, + userUsername: null, + }) + ), + }; + + TestBed.configureTestingModule({ + providers: [ + EventSubscriptionService, + { + provide: SOCKET_IO_FACTORY, + useValue: socketIoFactoryMock, + }, + { + provide: AlarmStateService, + useValue: alarmStateSpy, + }, + { + provide: API_BASE_URL, + useValue: ' http://api.example.local ', + }, + { + provide: InternalAuthService, + useValue: internalAuthServiceSpy, + }, + { + provide: HttpClient, + useValue: httpClientSpy, + }, + { + provide: AlarmApiService, + useValue: alarmApiServiceSpy, + }, + ], + }); + + service = TestBed.inject(EventSubscriptionService); + subscriptions = []; + }); + + afterEach(() => { + for (const subscription of subscriptions) { + subscription.unsubscribe(); + } + + currentUser$.complete(); + service.ngOnDestroy(); + }); + + it('crea la connessione socket in initialize usando API_BASE_URL normalizzato', () => { + service.initialize([]); + + expect(socketIoFactoryMock).toHaveBeenCalledWith('http://api.example.local/ws', { + transports: ['websocket'], + reconnection: true, + autoConnect: true, + }); + }); + + it('risolve il namespace websocket ws quando API_BASE_URL termina con api', () => { + TestBed.resetTestingModule(); + + TestBed.configureTestingModule({ + providers: [ + EventSubscriptionService, + { + provide: SOCKET_IO_FACTORY, + useValue: socketIoFactoryMock, + }, + { + provide: AlarmStateService, + useValue: alarmStateSpy, + }, + { + provide: API_BASE_URL, + useValue: 'http://localhost/api', + }, + { + provide: InternalAuthService, + useValue: internalAuthServiceSpy, + }, + { + provide: HttpClient, + useValue: httpClientSpy, + }, + { + provide: AlarmApiService, + useValue: alarmApiServiceSpy, + }, + ], + }); + + service = TestBed.inject(EventSubscriptionService); + service.initialize([]); + + expect(socketIoFactoryMock).toHaveBeenCalledWith('http://localhost/ws', { + transports: ['websocket'], + reconnection: true, + autoConnect: true, + }); + }); + + it('aggiorna lo stato connessione su connect, reconnect attempt e disconnect', () => { + const statuses: ConnectionStatus[] = []; + subscriptions.push( + service.getConnectionStatus$().subscribe((status) => { + statuses.push(status); + }) + ); + + service.initialize([]); + + fakeSocket.trigger('connect'); + fakeSocket.trigger('reconnect_attempt'); + fakeSocket.trigger('disconnect'); + + expect(statuses).toEqual([ + ConnectionStatus.DISCONNECTED, + ConnectionStatus.CONNECTED, + ConnectionStatus.RECONNECTING, + ConnectionStatus.DISCONNECTED, + ]); + }); + + it('esegue join e leave delle room con deduplicazione', () => { + service.initialize([]); + + service.joinRoom('ward-1'); + service.joinRoom('ward-1'); + service.joinRoom(' ward-2 '); + service.leaveRoom('ward-2'); + service.leaveRoom('ward-2'); + + expect(fakeSocket.emit).toHaveBeenCalledWith('join-ward', 'ward-1'); + expect(fakeSocket.emit).toHaveBeenCalledWith('join-ward', 'ward-2'); + expect(fakeSocket.emit).toHaveBeenCalledWith('leave-ward', 'ward-2'); + + const joinWardCalls = fakeSocket.emit.mock.calls.filter(([event]) => event === 'join-ward'); + const leaveWardCalls = fakeSocket.emit.mock.calls.filter(([event]) => event === 'leave-ward'); + + expect(joinWardCalls.length).toBe(2); + expect(leaveWardCalls.length).toBe(1); + }); + + it('riesegue il join delle room gia sottoscritte al connect', () => { + service.initialize(['ward-a', 'ward-a']); + + const joinCallsBeforeReconnect = fakeSocket.emit.mock.calls.filter( + ([event]) => event === 'join-ward' + ).length; + + fakeSocket.trigger('connect'); + + const joinCallsAfterReconnect = fakeSocket.emit.mock.calls.filter( + ([event]) => event === 'join-ward' + ); + + expect(joinCallsBeforeReconnect).toBe(1); + expect(joinCallsAfterReconnect.length).toBe(2); + expect(joinCallsAfterReconnect.at(-1)).toEqual(['join-ward', 'ward-a']); + }); + + it('bootstrap delle room da plant all al login quando cache ward e vuota', () => { + httpClientSpy.get.mockReturnValue( + of([ + { id: 'plant-1', wardId: 21 }, + { id: 'plant-2', wardId: ' 22 ' }, + { id: 'plant-3', wardId: 21 }, + { id: 'plant-4' }, + ]) + ); + + service.initialize([]); + currentUser$.next(buildSession('oss-1')); + + expect(httpClientSpy.get).toHaveBeenCalledWith('http://api.example.local/plant/all'); + + const joinWardCalls = fakeSocket.emit.mock.calls.filter(([event]) => event === 'join-ward'); + expect(joinWardCalls).toEqual([ + ['join-ward', '21'], + ['join-ward', '22'], + ]); + }); + + it('non interrompe il realtime quando bootstrap plant all fallisce', () => { + httpClientSpy.get.mockReturnValue(throwError(() => new Error('network'))); + + service.initialize([]); + currentUser$.next(buildSession('oss-2')); + + expect(httpClientSpy.get).toHaveBeenCalledTimes(1); + + fakeSocket.trigger('push-event', { + alarmRuleId: 'alarm-rule-bootstrap-fallback', + wardId: 15, + alarmEventId: 'active-alarm-bootstrap-fallback', + }); + + expect(alarmStateSpy.onAlarmTriggered).toHaveBeenCalledWith( + expect.objectContaining({ + id: 'active-alarm-bootstrap-fallback', + }), + ); + expect(alarmStateSpy.onNotificationReceived).toHaveBeenCalledWith( + expect.objectContaining({ + notificationId: 'alarm-triggered-active-alarm-bootstrap-fallback', + }), + ); + }); + + it('evita bootstrap ripetuto per lo stesso utente nella stessa sessione', () => { + httpClientSpy.get.mockReturnValue(of([])); + + service.initialize([]); + currentUser$.next(buildSession('oss-3')); + currentUser$.next(buildSession('oss-3')); + + expect(httpClientSpy.get).toHaveBeenCalledTimes(1); + }); + + it('refreshWardRoomSubscription riallinea le room joinate senza reload pagina', () => { + httpClientSpy.get + .mockReturnValueOnce(of([{ id: 'plant-1', wardId: 10 }])) + .mockReturnValueOnce(of([{ id: 'plant-2', wardId: 11 }])); + + service.initialize([]); + currentUser$.next(buildSession('oss-4')); + + service.refreshWardRoomSubscription(); + + expect(httpClientSpy.get).toHaveBeenCalledTimes(2); + expect(fakeSocket.emit).toHaveBeenCalledWith('join-ward', '10'); + expect(fakeSocket.emit).toHaveBeenCalledWith('leave-ward', '10'); + expect(fakeSocket.emit).toHaveBeenCalledWith('join-ward', '11'); + }); + + it('gestisce payload backend nativo su push-event per allarme attivato', () => { + service.initialize([]); + + fakeSocket.trigger('push-event', { + alarmRuleId: 'alarm-rule-backend-1', + wardId: 12, + alarmEventId: 'active-alarm-backend-1', + }); + + expect(alarmStateSpy.onAlarmTriggered).toHaveBeenCalledWith( + expect.objectContaining({ + id: 'active-alarm-backend-1', + alarmRuleId: 'alarm-rule-backend-1', + alarmName: 'Saturazione bassa reparto A', + }), + ); + + expect(alarmStateSpy.onNotificationReceived).toHaveBeenCalledWith( + expect.objectContaining({ + notificationId: 'alarm-triggered-active-alarm-backend-1', + title: '▲ Saturazione bassa reparto A', + }), + ); + + expect(fakeSocket.emit).toHaveBeenCalledWith('join-ward', '12'); + }); + + it('gestisce canale backend alarm-resolved e aggiorna stato/notifiche', () => { + service.initialize([]); + + fakeSocket.trigger('alarm-resolved', { + alarmEventId: 'active-alarm-backend-2', + wardId: 13, + }); + + expect(alarmStateSpy.onAlarmResolved).toHaveBeenCalledWith('active-alarm-backend-2'); + expect(alarmStateSpy.onNotificationReceived).toHaveBeenCalledWith( + expect.objectContaining({ + notificationId: 'alarm-resolved-active-alarm-backend-2', + title: 'Allarme risolto', + }), + ); + expect(fakeSocket.emit).toHaveBeenCalledWith('join-ward', '13'); + }); + + it('ignora eventi raw malformati e payload backend non validi', () => { + service.initialize([]); + + fakeSocket.trigger('push-event', { + alarmRuleId: 'alarm-rule-backend-3', + wardId: 'not-a-number', + alarmEventId: 'active-alarm-backend-3', + }); + + fakeSocket.trigger('push-event', 'not-an-object'); + + fakeSocket.trigger('alarm-resolved', { + alarmEventId: 42, + wardId: 10, + }); + + expect(alarmStateSpy.onAlarmTriggered).not.toHaveBeenCalled(); + expect(alarmStateSpy.onAlarmResolved).not.toHaveBeenCalled(); + expect(alarmStateSpy.onNotificationReceived).not.toHaveBeenCalled(); + }); + + it('usa location.origin quando API_BASE_URL non e configurato', () => { + TestBed.resetTestingModule(); + + TestBed.configureTestingModule({ + providers: [ + EventSubscriptionService, + { + provide: SOCKET_IO_FACTORY, + useValue: socketIoFactoryMock, + }, + { + provide: AlarmStateService, + useValue: alarmStateSpy, + }, + ], + }); + + service = TestBed.inject(EventSubscriptionService); + service.initialize([]); + + expect(socketIoFactoryMock).toHaveBeenCalledWith(`${globalThis.location.origin}/ws`, { + transports: ['websocket'], + reconnection: true, + autoConnect: true, + }); + }); + + it('bootstrap accetta risposta wrappata in data[]', () => { + httpClientSpy.get.mockReturnValue( + of({ + data: [{ wardId: '31' }, { wardId: 32 }, { wardId: ' ' }, null, { id: 'no-ward' }], + }), + ); + + service.initialize([]); + currentUser$.next(buildSession('oss-data')); + + const joinWardCalls = fakeSocket.emit.mock.calls.filter(([event]) => event === 'join-ward'); + expect(joinWardCalls).toEqual([ + ['join-ward', '31'], + ['join-ward', '32'], + ]); + }); + + it('bootstrap accetta risposta wrappata in plants[]', () => { + httpClientSpy.get.mockReturnValue( + of({ + plants: [{ wardId: '41' }, { wardId: '42' }], + }), + ); + + service.initialize([]); + currentUser$.next(buildSession('oss-plants')); + + const joinWardCalls = fakeSocket.emit.mock.calls.filter(([event]) => event === 'join-ward'); + expect(joinWardCalls).toEqual([ + ['join-ward', '41'], + ['join-ward', '42'], + ]); + }); + + it('su push-event usa fallback allarme quando AlarmApiService non e disponibile', () => { + TestBed.resetTestingModule(); + + TestBed.configureTestingModule({ + providers: [ + EventSubscriptionService, + { + provide: SOCKET_IO_FACTORY, + useValue: socketIoFactoryMock, + }, + { + provide: AlarmStateService, + useValue: alarmStateSpy, + }, + ], + }); + + service = TestBed.inject(EventSubscriptionService); + service.initialize([]); + + fakeSocket.trigger('push-event', { + alarmRuleId: 'alarm-rule-no-api', + wardId: 22, + alarmEventId: 'active-alarm-no-api', + }); + + expect(alarmStateSpy.onAlarmTriggered).toHaveBeenCalledWith( + expect.objectContaining({ + id: 'active-alarm-no-api', + alarmName: 'Allarme in corso', + priority: AlarmPriority.ORANGE, + }), + ); + }); + + it('su logout emette leave delle room joinate', () => { + service.initialize(['ward-10']); + currentUser$.next(buildSession('oss-leave')); + + fakeSocket.emit.mockClear(); + currentUser$.next(null); + + expect(fakeSocket.emit).toHaveBeenCalledWith('leave-ward', 'ward-10'); + }); + + it('disconnette il socket e rimuove i listener alla distruzione', () => { + service.initialize([]); + + service.ngOnDestroy(); + + expect(fakeSocket.removeAllListeners).toHaveBeenCalled(); + expect(fakeSocket.disconnect).toHaveBeenCalled(); + }); +}); + +function createFakeSocket(): FakeSocket { + const listeners = new Map>(); + + const addHandler = (eventName: string, handler: SocketEventHandler): void => { + if (!listeners.has(eventName)) { + listeners.set(eventName, new Set()); + } + + listeners.get(eventName)?.add(handler); + }; + + const removeHandler = (eventName: string, handler: SocketEventHandler): void => { + listeners.get(eventName)?.delete(handler); + }; + + const fakeSocket: FakeSocket = { + on: vi.fn((eventName: string, handler: SocketEventHandler) => { + addHandler(eventName, handler); + return fakeSocket; + }), + off: vi.fn((eventName: string, handler: SocketEventHandler) => { + removeHandler(eventName, handler); + return fakeSocket; + }), + addListener: vi.fn((eventName: string, handler: SocketEventHandler) => { + addHandler(eventName, handler); + return fakeSocket; + }), + removeListener: vi.fn((eventName: string, handler: SocketEventHandler) => { + removeHandler(eventName, handler); + return fakeSocket; + }), + emit: vi.fn(), + disconnect: vi.fn(), + removeAllListeners: vi.fn(() => { + listeners.clear(); + return fakeSocket; + }), + trigger: (eventName: string, payload?: unknown) => { + for (const handler of listeners.get(eventName) ?? []) { + handler(payload); + } + }, + }; + + return fakeSocket; +} + +function buildSession(userId: string): UserSession { + return { + userId, + username: `${userId}@example.local`, + role: UserRole.OPERATORE_SANITARIO, + accessToken: 'test-token', + isFirstAccess: false, + }; +} diff --git a/frontend/test/integration/app/core/alarm/services/realtime-alarm-event-normalizer.service.integration.spec.ts b/frontend/test/integration/app/core/alarm/services/realtime-alarm-event-normalizer.service.integration.spec.ts new file mode 100644 index 00000000..adb0b5d8 --- /dev/null +++ b/frontend/test/integration/app/core/alarm/services/realtime-alarm-event-normalizer.service.integration.spec.ts @@ -0,0 +1,74 @@ +import { TestBed } from '@angular/core/testing'; +import { beforeEach, describe, expect, it } from 'vitest'; +import { RealtimeAlarmEventNormalizerService } from 'src/app/core/alarm/services/realtime-alarm-event-normalizer.service'; + +describe('RealtimeAlarmEventNormalizerService', () => { + let service: RealtimeAlarmEventNormalizerService; + + beforeEach(() => { + TestBed.configureTestingModule({ + providers: [RealtimeAlarmEventNormalizerService], + }); + + service = TestBed.inject(RealtimeAlarmEventNormalizerService); + }); + + it('parseBackendTriggeredPayload accetta il contratto backend nativo', () => { + const parsed = service.parseBackendTriggeredPayload({ + alarmEventId: 'alarm-2', + wardId: 3, + alarmRuleId: 'rule-2', + }); + + expect(parsed).toEqual({ + alarmEventId: 'alarm-2', + wardId: 3, + alarmRuleId: 'rule-2', + }); + }); + + it('parseBackendTriggeredPayload accetta wardId numerico espresso come stringa', () => { + const parsed = service.parseBackendTriggeredPayload({ + alarmEventId: 'alarm-3', + wardId: '12', + alarmRuleId: 'rule-3', + }); + + expect(parsed).toEqual({ + alarmEventId: 'alarm-3', + wardId: 12, + alarmRuleId: 'rule-3', + }); + }); + + it('parseBackendResolvedPayload estrae alarmEventId e wardId opzionale', () => { + const withWardId = service.parseBackendResolvedPayload({ + alarmEventId: 'alarm-4', + wardId: 8, + }); + + const withoutWardId = service.parseBackendResolvedPayload({ + alarmEventId: 'alarm-5', + }); + + expect(withWardId).toEqual({ alarmEventId: 'alarm-4', wardId: 8 }); + expect(withoutWardId).toEqual({ alarmEventId: 'alarm-5', wardId: undefined }); + }); + + it('restituisce null per payload backend malformati', () => { + expect( + service.parseBackendTriggeredPayload({ + alarmEventId: 'alarm-6', + wardId: 'abc', + alarmRuleId: 'rule-6', + }) + ).toBeNull(); + + expect( + service.parseBackendResolvedPayload({ + alarmEventId: 999, + wardId: 8, + }) + ).toBeNull(); + }); +}); diff --git a/frontend/test/integration/app/core/alarm/services/ward-realtime-cache.service.deep.integration.spec.ts b/frontend/test/integration/app/core/alarm/services/ward-realtime-cache.service.deep.integration.spec.ts new file mode 100644 index 00000000..1c247ff4 --- /dev/null +++ b/frontend/test/integration/app/core/alarm/services/ward-realtime-cache.service.deep.integration.spec.ts @@ -0,0 +1,47 @@ +import { TestBed } from '@angular/core/testing'; +import { beforeEach, describe, expect, it } from 'vitest'; +import { WardRealtimeCacheService } from 'src/app/core/alarm/services/ward-realtime-cache.service'; + +describe('WardRealtimeCacheService', () => { + let service: WardRealtimeCacheService; + + beforeEach(() => { + TestBed.configureTestingModule({ + providers: [WardRealtimeCacheService], + }); + + service = TestBed.inject(WardRealtimeCacheService); + service.clearAll(); + }); + + it('mergeWardIds deduplica e normalizza valori stringa/numero', () => { + service.mergeWardIds('user-1', [1, '1', ' 2 ', null, undefined, '']); + service.mergeWardIds('user-1', ['2', 3]); + + expect(service.getWardIds('user-1')).toEqual(['1', '2', '3']); + }); + + it('mantiene cache separata per utente', () => { + service.setWardIds('user-a', ['10']); + service.setWardIds('user-b', ['11', '12']); + + expect(service.getWardIds('user-a')).toEqual(['10']); + expect(service.getWardIds('user-b')).toEqual(['11', '12']); + }); + + it('clearWardIds rimuove solo l utente target', () => { + service.setWardIds('user-a', ['10']); + service.setWardIds('user-b', ['11']); + + service.clearWardIds('user-a'); + + expect(service.getWardIds('user-a')).toEqual([]); + expect(service.getWardIds('user-b')).toEqual(['11']); + }); + + it('recupera cache vuota in caso di JSON non valido', () => { + globalThis.sessionStorage.setItem('alarm-realtime-ward-ids-by-user', 'not-json'); + + expect(service.getWardIds('user-z')).toEqual([]); + }); +}); diff --git a/frontend/test/integration/app/core/alarm/services/ward-realtime-cache.service.integration.spec.ts b/frontend/test/integration/app/core/alarm/services/ward-realtime-cache.service.integration.spec.ts new file mode 100644 index 00000000..1c247ff4 --- /dev/null +++ b/frontend/test/integration/app/core/alarm/services/ward-realtime-cache.service.integration.spec.ts @@ -0,0 +1,47 @@ +import { TestBed } from '@angular/core/testing'; +import { beforeEach, describe, expect, it } from 'vitest'; +import { WardRealtimeCacheService } from 'src/app/core/alarm/services/ward-realtime-cache.service'; + +describe('WardRealtimeCacheService', () => { + let service: WardRealtimeCacheService; + + beforeEach(() => { + TestBed.configureTestingModule({ + providers: [WardRealtimeCacheService], + }); + + service = TestBed.inject(WardRealtimeCacheService); + service.clearAll(); + }); + + it('mergeWardIds deduplica e normalizza valori stringa/numero', () => { + service.mergeWardIds('user-1', [1, '1', ' 2 ', null, undefined, '']); + service.mergeWardIds('user-1', ['2', 3]); + + expect(service.getWardIds('user-1')).toEqual(['1', '2', '3']); + }); + + it('mantiene cache separata per utente', () => { + service.setWardIds('user-a', ['10']); + service.setWardIds('user-b', ['11', '12']); + + expect(service.getWardIds('user-a')).toEqual(['10']); + expect(service.getWardIds('user-b')).toEqual(['11', '12']); + }); + + it('clearWardIds rimuove solo l utente target', () => { + service.setWardIds('user-a', ['10']); + service.setWardIds('user-b', ['11']); + + service.clearWardIds('user-a'); + + expect(service.getWardIds('user-a')).toEqual([]); + expect(service.getWardIds('user-b')).toEqual(['11']); + }); + + it('recupera cache vuota in caso di JSON non valido', () => { + globalThis.sessionStorage.setItem('alarm-realtime-ward-ids-by-user', 'not-json'); + + expect(service.getWardIds('user-z')).toEqual([]); + }); +}); diff --git a/frontend/test/integration/app/core/alarm/services/ward-socket-room-coordinator.service.integration.spec.ts b/frontend/test/integration/app/core/alarm/services/ward-socket-room-coordinator.service.integration.spec.ts new file mode 100644 index 00000000..0710377a --- /dev/null +++ b/frontend/test/integration/app/core/alarm/services/ward-socket-room-coordinator.service.integration.spec.ts @@ -0,0 +1,71 @@ +import { TestBed } from '@angular/core/testing'; +import { beforeEach, describe, expect, it, vi } from 'vitest'; +import { WardRealtimeCacheService } from 'src/app/core/alarm/services/ward-realtime-cache.service'; +import { WardSocketRoomCoordinatorService } from 'src/app/core/alarm/services/ward-socket-room-coordinator.service'; + +describe('WardSocketRoomCoordinatorService', () => { + let service: WardSocketRoomCoordinatorService; + + const cacheSpy = { + getWardIds: vi.fn(), + setWardIds: vi.fn(), + clearWardIds: vi.fn(), + }; + + beforeEach(() => { + vi.clearAllMocks(); + cacheSpy.getWardIds.mockReturnValue([]); + + TestBed.configureTestingModule({ + providers: [ + WardSocketRoomCoordinatorService, + { provide: WardRealtimeCacheService, useValue: cacheSpy }, + ], + }); + + service = TestBed.inject(WardSocketRoomCoordinatorService); + }); + + it('activateUser carica wardIds da cache e propone join', () => { + cacheSpy.getWardIds.mockReturnValue(['10', '11']); + + const actions = service.activateUser('user-1'); + + expect(actions.roomsToLeave).toEqual([]); + expect(actions.roomsToJoin).toEqual(['10', '11']); + expect(service.getJoinedRooms()).toEqual(['10', '11']); + }); + + it('requestJoinRoom deduplica e persiste su cache', () => { + service.activateUser('user-1'); + + expect(service.requestJoinRoom(' 20 ')).toBe('20'); + expect(service.requestJoinRoom('20')).toBeNull(); + expect(cacheSpy.setWardIds).toHaveBeenCalled(); + }); + + it('deactivateUser rimuove room runtime e pulisce cache utente corrente', () => { + service.activateUser('user-1'); + service.requestJoinRoom('30'); + + const roomsToLeave = service.deactivateUser(); + + expect(roomsToLeave).toEqual(['30']); + expect(service.getJoinedRooms()).toEqual([]); + expect(cacheSpy.clearWardIds).toHaveBeenCalledWith('user-1'); + }); + + it('switch utente restituisce room da lasciare e room cache del nuovo utente', () => { + cacheSpy.getWardIds + .mockReturnValueOnce(['10']) + .mockReturnValueOnce(['40', '50']); + + service.activateUser('user-1'); + service.requestJoinRoom('30'); + const actions = service.activateUser('user-2'); + + expect(actions.roomsToLeave).toEqual(['10', '30']); + expect(actions.roomsToJoin).toEqual(['40', '50']); + expect(service.getJoinedRooms()).toEqual(['40', '50']); + }); +}); diff --git a/frontend/test/integration/app/core/notification/services/notification-api.service.integration.spec.ts b/frontend/test/integration/app/core/notification/services/notification-api.service.integration.spec.ts new file mode 100644 index 00000000..368ef0ca --- /dev/null +++ b/frontend/test/integration/app/core/notification/services/notification-api.service.integration.spec.ts @@ -0,0 +1,208 @@ +import { provideHttpClient } from '@angular/common/http'; +import { HttpTestingController, provideHttpClientTesting } from '@angular/common/http/testing'; +import { TestBed } from '@angular/core/testing'; +import { of } from 'rxjs'; +import { afterEach, beforeEach, describe, expect, it } from 'vitest'; +import { UserRole } from 'src/app/core/models/user-role.enum'; +import { InternalAuthService } from 'src/app/core/services/internal-auth.service'; +import type { NotificationEvent } from 'src/app/features/notification/models/notification-event.model'; +import { API_BASE_URL } from 'src/app/core/tokens/api-base-url.token'; +import { NotificationApiService } from 'src/app/core/notification/services/notification-api.service'; + +describe('NotificationApiService', () => { + let service: NotificationApiService; + let httpController: HttpTestingController; + let authServiceMock: Pick; + + const apiBaseUrl = 'https://api.example.test'; + + beforeEach(() => { + authServiceMock = { + getCurrentUser$: () => + of({ + userId: '7', + username: 'oss-user', + role: UserRole.OPERATORE_SANITARIO, + accessToken: 'token', + isFirstAccess: false, + }), + }; + + TestBed.configureTestingModule({ + providers: [ + NotificationApiService, + provideHttpClient(), + provideHttpClientTesting(), + { provide: API_BASE_URL, useValue: apiBaseUrl }, + { provide: InternalAuthService, useValue: authServiceMock }, + ], + }); + + service = TestBed.inject(NotificationApiService); + httpController = TestBed.inject(HttpTestingController); + }); + + afterEach(() => { + httpController?.verify(); + TestBed.resetTestingModule(); + }); + + it('getNotificationsHistory chiama managed/unmanaged e mappa verso NotificationEvent', () => { + const managedResponse = [ + { + id: 'alarm-managed-1', + activationTime: '2026-03-24T10:00:00.000Z', + resolutionTime: null, + alarmName: 'Pulsante antipanico camera 101', + priority: 4, + }, + ]; + + const unmanagedResponse = [ + { + id: 'alarm-unmanaged-1', + activationTime: '2026-03-24T09:00:00.000Z', + resolutionTime: '2026-03-24T09:05:00.000Z', + alarmName: 'Sensore porta', + priority: 2, + }, + ]; + + const expected: NotificationEvent[] = [ + { + notificationId: 'alarm-triggered-alarm-managed-1', + title: '▲ Pulsante antipanico camera 101', + sentAt: '2026-03-24T10:00:00.000Z', + eventType: 'triggered', + }, + { + notificationId: 'alarm-resolved-alarm-unmanaged-1', + title: 'Allarme risolto', + sentAt: '2026-03-24T09:05:00.000Z', + eventType: 'resolved', + }, + ]; + + service.getNotificationsHistory().subscribe((result) => { + expect(result).toEqual(expected); + }); + + const managedRequest = httpController.expectOne( + `${apiBaseUrl}/alarm-events/managed/7/100/0` + ); + expect(managedRequest.request.method).toBe('GET'); + + const unmanagedRequest = httpController.expectOne( + `${apiBaseUrl}/alarm-events/unmanaged/7/100/0` + ); + expect(unmanagedRequest.request.method).toBe('GET'); + + managedRequest.flush(managedResponse); + unmanagedRequest.flush(unmanagedResponse); + }); + + it('getNotificationsHistory emette una volta e completa', () => { + let emissions = 0; + let completed = false; + + service.getNotificationsHistory().subscribe({ + next: () => { + emissions += 1; + }, + complete: () => { + completed = true; + }, + }); + + const managedRequest = httpController.expectOne( + `${apiBaseUrl}/alarm-events/managed/7/100/0` + ); + const unmanagedRequest = httpController.expectOne( + `${apiBaseUrl}/alarm-events/unmanaged/7/100/0` + ); + + managedRequest.flush([]); + unmanagedRequest.flush([]); + + expect(emissions).toBe(1); + expect(completed).toBe(true); + }); + + it('getNotificationsHistory e cold: due sottoscrizioni producono due coppie di request HTTP', () => { + service.getNotificationsHistory().subscribe(); + service.getNotificationsHistory().subscribe(); + + const requests = httpController.match( + (request) => + request.url === `${apiBaseUrl}/alarm-events/managed/7/100/0` || + request.url === `${apiBaseUrl}/alarm-events/unmanaged/7/100/0` + ); + + expect(requests).toHaveLength(4); + for (const request of requests) { + expect(request.request.method).toBe('GET'); + request.flush([]); + } + }); + + it('se una delle due endpoint fallisce, effettua fallback a lista vuota per quella sorgente', () => { + let result: NotificationEvent[] | null = null; + + service.getNotificationsHistory().subscribe((notifications) => { + result = notifications; + }); + + const managedRequest = httpController.expectOne( + `${apiBaseUrl}/alarm-events/managed/7/100/0` + ); + const unmanagedRequest = httpController.expectOne( + `${apiBaseUrl}/alarm-events/unmanaged/7/100/0` + ); + + managedRequest.flush('Server error', { status: 500, statusText: 'Server Error' }); + unmanagedRequest.flush([ + { + id: 'alarm-unmanaged-2', + activationTime: '2026-03-24T09:00:00.000Z', + resolutionTime: null, + alarmName: 'Allarme finestra molto lungo molto lungo molto lungo molto lungo molto lungo', + priority: 3, + }, + ]); + + expect(result).toHaveLength(1); + const firstNotification = ((result ?? [])[0] as NotificationEvent | undefined); + expect(firstNotification).toMatchObject({ + notificationId: 'alarm-triggered-alarm-unmanaged-2', + sentAt: '2026-03-24T09:00:00.000Z', + eventType: 'triggered', + }); + expect(firstNotification?.title.startsWith('! ')).toBe(true); + expect(firstNotification?.title.endsWith('...')).toBe(true); + }); + + it('se non c e sessione attiva restituisce [] senza chiamate HTTP', () => { + authServiceMock.getCurrentUser$ = () => of(null); + TestBed.resetTestingModule(); + + TestBed.configureTestingModule({ + providers: [ + NotificationApiService, + provideHttpClient(), + provideHttpClientTesting(), + { provide: API_BASE_URL, useValue: apiBaseUrl }, + { provide: InternalAuthService, useValue: authServiceMock }, + ], + }); + + service = TestBed.inject(NotificationApiService); + httpController = TestBed.inject(HttpTestingController); + + service.getNotificationsHistory().subscribe((result) => { + expect(result).toEqual([]); + }); + + const requests = httpController.match(() => true); + expect(requests).toHaveLength(0); + }); +}); diff --git a/frontend/test/integration/app/core/notification/utils/notification-title.util.integration.spec.ts b/frontend/test/integration/app/core/notification/utils/notification-title.util.integration.spec.ts new file mode 100644 index 00000000..9e52b209 --- /dev/null +++ b/frontend/test/integration/app/core/notification/utils/notification-title.util.integration.spec.ts @@ -0,0 +1,87 @@ +import { describe, expect, it } from 'vitest'; +import { AlarmPriority } from 'src/app/core/alarm/models/alarm-priority.enum'; +import { + DEFAULT_TRIGGERED_NOTIFICATION_TITLE, + formatTriggeredNotificationTitle, +} from 'src/app/core/notification/utils/notification-title.util'; + +describe('notification-title util integration', () => { + it('returns fallback when alarm name is not a string', () => { + expect(formatTriggeredNotificationTitle(undefined, AlarmPriority.RED)).toBe( + DEFAULT_TRIGGERED_NOTIFICATION_TITLE, + ); + expect(formatTriggeredNotificationTitle(null, AlarmPriority.RED)).toBe( + DEFAULT_TRIGGERED_NOTIFICATION_TITLE, + ); + expect(formatTriggeredNotificationTitle(42, AlarmPriority.RED)).toBe( + DEFAULT_TRIGGERED_NOTIFICATION_TITLE, + ); + }); + + it('returns fallback when alarm name is empty after normalization', () => { + expect(formatTriggeredNotificationTitle(' ', AlarmPriority.RED)).toBe( + DEFAULT_TRIGGERED_NOTIFICATION_TITLE, + ); + }); + + it('normalizes spaces in alarm name before composing title', () => { + expect(formatTriggeredNotificationTitle(' Porta ingresso aperta ', AlarmPriority.ORANGE)).toBe( + '! Porta ingresso aperta', + ); + }); + + it('maps WHITE priority to i symbol', () => { + expect(formatTriggeredNotificationTitle('Messaggio info', AlarmPriority.WHITE)).toBe('i Messaggio info'); + }); + + it('maps GREEN priority to bullet symbol', () => { + expect(formatTriggeredNotificationTitle('Messaggio verde', AlarmPriority.GREEN)).toBe('• Messaggio verde'); + }); + + it('maps ORANGE priority to exclamation symbol', () => { + expect(formatTriggeredNotificationTitle('Messaggio warning', AlarmPriority.ORANGE)).toBe('! Messaggio warning'); + }); + + it('maps RED priority to triangle symbol', () => { + expect(formatTriggeredNotificationTitle('Messaggio critico', AlarmPriority.RED)).toBe('▲ Messaggio critico'); + }); + + it('accepts numeric priorities encoded as strings', () => { + expect(formatTriggeredNotificationTitle('String number', `${AlarmPriority.RED}`)).toBe('▲ String number'); + }); + + it('accepts enum-like string priorities', () => { + expect(formatTriggeredNotificationTitle('Enum string', 'red')).toBe('▲ Enum string'); + expect(formatTriggeredNotificationTitle('Enum string', 'GREEN')).toBe('• Enum string'); + }); + + it('returns fallback for unknown numeric priority', () => { + expect(formatTriggeredNotificationTitle('Unknown', 99)).toBe(DEFAULT_TRIGGERED_NOTIFICATION_TITLE); + }); + + it('returns fallback for unknown string priority', () => { + expect(formatTriggeredNotificationTitle('Unknown', 'ALERT')).toBe(DEFAULT_TRIGGERED_NOTIFICATION_TITLE); + expect(formatTriggeredNotificationTitle('Unknown', '')).toBe(DEFAULT_TRIGGERED_NOTIFICATION_TITLE); + expect(formatTriggeredNotificationTitle('Unknown', ' ')).toBe(DEFAULT_TRIGGERED_NOTIFICATION_TITLE); + }); + + it('returns fallback for non integer numeric-like priorities', () => { + expect(formatTriggeredNotificationTitle('Unknown', 2.5)).toBe(DEFAULT_TRIGGERED_NOTIFICATION_TITLE); + expect(formatTriggeredNotificationTitle('Unknown', '2.5')).toBe(DEFAULT_TRIGGERED_NOTIFICATION_TITLE); + }); + + it('does not truncate when name fits max length', () => { + const title = formatTriggeredNotificationTitle('ABCDE', AlarmPriority.RED, 7); + expect(title).toBe('▲ ABCDE'); + }); + + it('truncates and appends ellipsis when name exceeds max length', () => { + const title = formatTriggeredNotificationTitle('ABCDEFGHIJKLMNOPQRSTUVWXYZ', AlarmPriority.RED, 10); + expect(title).toBe('▲ ABCDEFG...'); + }); + + it('handles very small maxLength values without throwing', () => { + const title = formatTriggeredNotificationTitle('ABCDEFGHIJK', AlarmPriority.RED, 3); + expect(title).toBe('▲ A...'); + }); +}); diff --git a/frontend/test/integration/app/core/services/api-error-display.service.integration.spec.ts b/frontend/test/integration/app/core/services/api-error-display.service.integration.spec.ts new file mode 100644 index 00000000..55140513 --- /dev/null +++ b/frontend/test/integration/app/core/services/api-error-display.service.integration.spec.ts @@ -0,0 +1,131 @@ +import { HttpErrorResponse } from '@angular/common/http'; +import { TestBed } from '@angular/core/testing'; +import { beforeEach, describe, expect, it } from 'vitest'; +import { ApiErrorDisplayService } from 'src/app/core/services/api-error-display.service'; + +describe('ApiErrorDisplayService', () => { + let service: ApiErrorDisplayService; + + beforeEach(() => { + TestBed.configureTestingModule({ + providers: [ApiErrorDisplayService], + }); + + service = TestBed.inject(ApiErrorDisplayService); + }); + + it('usa fallback per errori non HTTP quando nonHttpStrategy non e message', () => { + const message = service.toMessage(new Error('runtime failure'), { + fallbackMessage: 'Messaggio fallback', + }); + + expect(message).toBe('Messaggio fallback'); + }); + + it('usa il messaggio degli errori non HTTP quando nonHttpStrategy e message', () => { + const message = service.toMessage(new Error('runtime failure'), { + fallbackMessage: 'Messaggio fallback', + nonHttpStrategy: 'message', + }); + + expect(message).toBe('runtime failure'); + }); + + it('mappa status 0 con actionLabel', () => { + const error = new HttpErrorResponse({ status: 0, statusText: 'Unknown Error' }); + + const message = service.toMessage(error, { + fallbackMessage: 'Messaggio fallback', + actionLabel: 'caricare gli allarmi', + }); + + expect(message).toBe('Impossibile contattare il server durante caricare gli allarmi.'); + }); + + it('mappa status 401 con actionLabel', () => { + const error = new HttpErrorResponse({ status: 401, statusText: 'Unauthorized' }); + + const message = service.toMessage(error, { + fallbackMessage: 'Messaggio fallback', + actionLabel: 'aggiornare la vista', + }); + + expect(message).toBe('Sessione scaduta o non valida. Effettua nuovamente il login per aggiornare la vista.'); + }); + + it('mappa status 403 con forbiddenMessage custom se presente', () => { + const error = new HttpErrorResponse({ status: 403, statusText: 'Forbidden' }); + + const message = service.toMessage(error, { + fallbackMessage: 'Messaggio fallback', + forbiddenMessage: 'Accesso negato dalla policy applicativa.', + actionLabel: 'eseguire l operazione', + }); + + expect(message).toBe('Accesso negato dalla policy applicativa.'); + }); + + it('mappa status 403 usando actionLabel quando forbiddenMessage non e presente', () => { + const error = new HttpErrorResponse({ status: 403, statusText: 'Forbidden' }); + + const message = service.toMessage(error, { + fallbackMessage: 'Messaggio fallback', + actionLabel: 'eseguire l operazione', + }); + + expect(message).toBe('Non hai i permessi necessari per eseguire l operazione.'); + }); + + it('mappa status 500 con actionLabel', () => { + const error = new HttpErrorResponse({ status: 500, statusText: 'Server Error' }); + + const message = service.toMessage(error, { + fallbackMessage: 'Messaggio fallback', + actionLabel: 'completare la richiesta', + }); + + expect(message).toBe('Errore interno del server durante completare la richiesta. Riprova tra poco.'); + }); + + it('usa error.error string quando disponibile per status non speciali', () => { + const error = new HttpErrorResponse({ + status: 400, + statusText: 'Bad Request', + error: 'Payload non valido', + }); + + const message = service.toMessage(error, { + fallbackMessage: 'Messaggio fallback', + }); + + expect(message).toBe('Payload non valido'); + }); + + it('usa error.error.message array quando disponibile per status non speciali', () => { + const error = new HttpErrorResponse({ + status: 422, + statusText: 'Unprocessable Entity', + error: { message: ['campo obbligatorio', 'formato non valido'] }, + }); + + const message = service.toMessage(error, { + fallbackMessage: 'Messaggio fallback', + }); + + expect(message).toBe('campo obbligatorio; formato non valido'); + }); + + it('usa fallback quando payload HTTP non contiene messaggi utili', () => { + const error = new HttpErrorResponse({ + status: 409, + statusText: 'Conflict', + error: { reason: 'conflict' }, + }); + + const message = service.toMessage(error, { + fallbackMessage: 'Messaggio fallback', + }); + + expect(message).toBe('Messaggio fallback'); + }); +}); diff --git a/frontend/test/integration/app/core/services/breadcrumb.service.integration.spec.ts b/frontend/test/integration/app/core/services/breadcrumb.service.integration.spec.ts new file mode 100644 index 00000000..0bbe3aff --- /dev/null +++ b/frontend/test/integration/app/core/services/breadcrumb.service.integration.spec.ts @@ -0,0 +1,191 @@ +import { TestBed } from '@angular/core/testing'; +import { Router, NavigationEnd, ActivatedRoute } from '@angular/router'; +import { firstValueFrom, take, Observable, Subject } from 'rxjs'; +import { reduce } from 'rxjs/operators'; +import { BreadcrumbService, Breadcrumb } from 'src/app/core/services/breadcrumb.service'; + +function makeSnapshot(urlSegments: string[], data: Record = {}) { + return { + url: urlSegments.map(path => ({ path })), + data, + }; +} + +function makeRoute( + urlSegments: string[], + data: Record = {}, + children: ActivatedRoute[] = [] +): Partial { + return { + snapshot: makeSnapshot(urlSegments, data) as any, + children: children, + }; +} + +function toArrayOperator() { + return (source: Observable) => + source.pipe(reduce((acc: Breadcrumb[][], val: Breadcrumb[]) => [...acc, val], [])); +} + +describe('BreadcrumbService', () => { + let service: BreadcrumbService; + let routerEvents$: Subject; + let rootRoute: Partial; + + beforeEach(() => { + routerEvents$ = new Subject(); + rootRoute = makeRoute([], {}, []); + + TestBed.configureTestingModule({ + providers: [ + BreadcrumbService, + { + provide: Router, + useValue: { events: routerEvents$.asObservable() }, + }, + { + provide: ActivatedRoute, + useValue: { root: rootRoute }, + }, + ], + }); + + service = TestBed.inject(BreadcrumbService); + }); + + it('should be created', () => { + expect(service).toBeTruthy(); + }); + + it('should expose a breadcrumbs$ observable', () => { + expect(service.breadcrumbs$).toBeDefined(); + }); + + it('should emit an empty array immediately when there are no children', async () => { + const crumbs = await firstValueFrom(service.breadcrumbs$); + expect(crumbs).toEqual([]); + }); + + it('should emit breadcrumbs immediately on subscription without waiting for navigation', async () => { + const child = makeRoute(['home'], { breadcrumb: 'Home' }) as ActivatedRoute; + (rootRoute as any).children = [child]; + + const crumbs = await firstValueFrom(service.breadcrumbs$); + expect(crumbs.length).toBe(1); + expect(crumbs[0]).toEqual({ label: 'Home', url: '/home' }); + }); + + it('should re-emit breadcrumbs on NavigationEnd', async () => { + const child = makeRoute(['dashboard'], { breadcrumb: 'Dashboard' }) as ActivatedRoute; + + const emissionsPromise = firstValueFrom( + service.breadcrumbs$.pipe(take(2), toArrayOperator()) + ); + + (rootRoute as any).children = [child]; + routerEvents$.next(new NavigationEnd(1, '/dashboard', '/dashboard')); + + const emissions = await emissionsPromise; + expect(emissions.length).toBe(2); + }); + + it('should ignore router events that are not NavigationEnd', async () => { + const crumbs = await firstValueFrom(service.breadcrumbs$); + expect(crumbs).toEqual([]); + + routerEvents$.next({ type: 'NavigationStart' }); + routerEvents$.next({ type: 'RoutesRecognized' }); + + const crumbsAfter = await firstValueFrom(service.breadcrumbs$); + expect(crumbsAfter).toEqual([]); + }); + + it('should build a single breadcrumb for a one-level route', async () => { + const child = makeRoute(['about'], { breadcrumb: 'About' }) as ActivatedRoute; + (rootRoute as any).children = [child]; + + const crumbs = await firstValueFrom(service.breadcrumbs$); + expect(crumbs).toEqual([{ label: 'About', url: '/about' }]); + }); + + it('should skip routes without a breadcrumb data property', async () => { + const child = makeRoute(['hidden'], {}) as ActivatedRoute; + (rootRoute as any).children = [child]; + + const crumbs = await firstValueFrom(service.breadcrumbs$); + expect(crumbs).toEqual([]); + }); + + it('should skip routes with an empty url segment even if breadcrumb label is set', async () => { + const child = makeRoute([], { breadcrumb: 'Ghost' }) as ActivatedRoute; + (rootRoute as any).children = [child]; + + const crumbs = await firstValueFrom(service.breadcrumbs$); + expect(crumbs).toEqual([]); + }); + + it('should handle multiple sibling top-level routes', async () => { + const child1 = makeRoute(['products'], { breadcrumb: 'Products' }) as ActivatedRoute; + const child2 = makeRoute(['contact'], { breadcrumb: 'Contact' }) as ActivatedRoute; + (rootRoute as any).children = [child1, child2]; + + const crumbs = await firstValueFrom(service.breadcrumbs$); + expect(crumbs).toEqual([ + { label: 'Products', url: '/products' }, + { label: 'Contact', url: '/contact' }, + ]); + }); + + it('should build breadcrumbs for two-level nested routes', async () => { + const grandchild = makeRoute(['detail'], { breadcrumb: 'Detail' }) as ActivatedRoute; + const child = makeRoute(['products'], { breadcrumb: 'Products' }, [grandchild]) as ActivatedRoute; + (rootRoute as any).children = [child]; + + const crumbs = await firstValueFrom(service.breadcrumbs$); + expect(crumbs).toEqual([ + { label: 'Products', url: '/products' }, + { label: 'Detail', url: '/products/detail' }, + ]); + }); + + it('should build breadcrumbs for three-level deeply nested routes', async () => { + const level3 = makeRoute(['edit'], { breadcrumb: 'Edit' }) as ActivatedRoute; + const level2 = makeRoute(['detail'], { breadcrumb: 'Detail' }, [level3]) as ActivatedRoute; + const level1 = makeRoute(['products'], { breadcrumb: 'Products' }, [level2]) as ActivatedRoute; + (rootRoute as any).children = [level1]; + + const crumbs = await firstValueFrom(service.breadcrumbs$); + expect(crumbs).toEqual([ + { label: 'Products', url: '/products' }, + { label: 'Detail', url: '/products/detail' }, + { label: 'Edit', url: '/products/detail/edit' }, + ]); + }); + + it('should skip intermediate segments that have no breadcrumb label', async () => { + const grandchild = makeRoute(['detail'], { breadcrumb: 'Detail' }) as ActivatedRoute; + const child = makeRoute(['products'], {}, [grandchild]) as ActivatedRoute; + (rootRoute as any).children = [child]; + + const crumbs = await firstValueFrom(service.breadcrumbs$); + expect(crumbs).toEqual([{ label: 'Detail', url: '/products/detail' }]); + }); + + it('should concatenate multi-segment url paths correctly', async () => { + const child = makeRoute(['en', 'us'], { breadcrumb: 'Locale' }) as ActivatedRoute; + (rootRoute as any).children = [child]; + + const crumbs = await firstValueFrom(service.breadcrumbs$); + expect(crumbs).toEqual([{ label: 'Locale', url: '/en/us' }]); + }); + + it('should not double-slash when a parent segment is empty', async () => { + const child = makeRoute(['settings'], { breadcrumb: 'Settings' }) as ActivatedRoute; + const emptyParent = makeRoute([], {}, [child]) as ActivatedRoute; + (rootRoute as any).children = [emptyParent]; + + const crumbs = await firstValueFrom(service.breadcrumbs$); + expect(crumbs[0].url).toBe('/settings'); + expect(crumbs[0].url).not.toContain('//'); + }); +}); \ No newline at end of file diff --git a/frontend/test/integration/app/core/services/internal-auth.service.integration.spec.ts b/frontend/test/integration/app/core/services/internal-auth.service.integration.spec.ts new file mode 100644 index 00000000..3c3beaf5 --- /dev/null +++ b/frontend/test/integration/app/core/services/internal-auth.service.integration.spec.ts @@ -0,0 +1,220 @@ +import { TestBed } from '@angular/core/testing'; +import { HttpTestingController, provideHttpClientTesting } from '@angular/common/http/testing'; +import { provideHttpClient } from '@angular/common/http'; +import { firstValueFrom } from 'rxjs'; +import { describe, expect, it, beforeEach } from 'vitest'; +import { API_BASE_URL } from 'src/app/core/tokens/api-base-url.token'; +import { UserRole } from 'src/app/core/models/user-role.enum'; +import { InternalAuthService } from 'src/app/core/services/internal-auth.service'; + +function toBase64Url(value: string): string { + return btoa(value).replaceAll('+', '-').replaceAll('/', '_').replaceAll('=', ''); +} + +function createAccessToken(claims: Record): string { + const header = toBase64Url(JSON.stringify({ alg: 'HS256', typ: 'JWT' })); + const payload = toBase64Url(JSON.stringify(claims)); + return `${header}.${payload}.signature`; +} + +describe('InternalAuthService', () => { + let service: InternalAuthService; + let httpMock: HttpTestingController; + const loginCredential = 'test-credential'; + const temporaryCredential = 'temp-credential'; + const nextCredential = 'next-credential'; + + beforeEach(() => { + TestBed.configureTestingModule({ + providers: [ + InternalAuthService, + provideHttpClient(), + provideHttpClientTesting(), + { provide: API_BASE_URL, useValue: 'http://localhost:3000' }, + ], + }); + + service = TestBed.inject(InternalAuthService); + httpMock = TestBed.inject(HttpTestingController); + }); + + it('esegue login, salva sessione e rende autenticato l utente', async () => { + const loginPromise = firstValueFrom(service.login('mrossi', loginCredential)); + + const request = httpMock.expectOne('http://localhost:3000/auth/login'); + expect(request.request.method).toBe('POST'); + expect(request.request.withCredentials).toBe(true); + expect(request.request.body).toEqual({ username: 'mrossi', password: loginCredential }); + + const accessToken = createAccessToken({ + userId: 'user-1', + username: 'mrossi', + role: UserRole.OPERATORE_SANITARIO, + isFirstAccess: false, + }); + + request.flush({ accessToken }); + + const session = await loginPromise; + expect(session.username).toBe('mrossi'); + expect(service.getToken()).toBe(accessToken); + expect(service.getRole()).toBe(UserRole.OPERATORE_SANITARIO); + expect(service.isAuthenticated()).toBe(true); + expect(service.hasRole(UserRole.OPERATORE_SANITARIO)).toBe(true); + expect(service.hasRole(UserRole.AMMINISTRATORE)).toBe(false); + }); + + it('chiama endpoint first-login con payload corretto', async () => { + const callPromise = firstValueFrom( + service.setFirstAccessPassword('mrossi', temporaryCredential, nextCredential) + ); + + const request = httpMock.expectOne('http://localhost:3000/auth/first-login'); + expect(request.request.method).toBe('POST'); + expect(request.request.withCredentials).toBe(true); + expect(request.request.body).toEqual({ + username: 'mrossi', + tempPassword: temporaryCredential, + password: nextCredential, + }); + + const accessToken = createAccessToken({ + userId: 'user-1', + username: 'mrossi', + role: UserRole.OPERATORE_SANITARIO, + isFirstAccess: false, + }); + + request.flush({ accessToken }); + + const session = await callPromise; + expect(session.username).toBe('mrossi'); + expect(session.isFirstAccess).toBe(false); + expect(service.getToken()).toBe(accessToken); + expect(service.getRole()).toBe(UserRole.OPERATORE_SANITARIO); + expect(service.isAuthenticated()).toBe(true); + }); + + it('chiama refresh, aggiorna il token e restituisce il nuovo accessToken', async () => { + const refreshPromise = firstValueFrom(service.refreshAccessToken()); + + const request = httpMock.expectOne('http://localhost:3000/auth/refresh'); + expect(request.request.method).toBe('POST'); + expect(request.request.withCredentials).toBe(true); + expect(request.request.body).toEqual({}); + + const accessToken = createAccessToken({ + userId: 'user-1', + username: 'mrossi', + role: UserRole.OPERATORE_SANITARIO, + isFirstAccess: false, + }); + request.flush({ accessToken }); + + const refreshedToken = await refreshPromise; + expect(refreshedToken).toBe(accessToken); + expect(service.getToken()).toBe(accessToken); + }); + + it('ripristina sessione da refresh cookie quando token in memoria manca', async () => { + const restorePromise = firstValueFrom(service.restoreSessionFromRefresh()); + + const request = httpMock.expectOne('http://localhost:3000/auth/refresh'); + expect(request.request.method).toBe('POST'); + expect(request.request.withCredentials).toBe(true); + + const accessToken = createAccessToken({ + userId: 'user-1', + username: 'mrossi', + role: UserRole.AMMINISTRATORE, + isFirstAccess: false, + }); + request.flush({ accessToken }); + + expect(await restorePromise).toBe(true); + expect(service.isAuthenticated()).toBe(true); + expect(service.getRole()).toBe(UserRole.AMMINISTRATORE); + }); + + it('restituisce false quando restore sessione fallisce', async () => { + const restorePromise = firstValueFrom(service.restoreSessionFromRefresh()); + + const request = httpMock.expectOne('http://localhost:3000/auth/refresh'); + request.flush( + { message: 'Unauthorized' }, + { status: 401, statusText: 'Unauthorized' } + ); + + expect(await restorePromise).toBe(false); + expect(service.isAuthenticated()).toBe(false); + }); + + it('esegue una sola richiesta refresh con restore concorrenti', async () => { + const restorePromiseOne = firstValueFrom(service.restoreSessionFromRefresh()); + const restorePromiseTwo = firstValueFrom(service.restoreSessionFromRefresh()); + + const request = httpMock.expectOne('http://localhost:3000/auth/refresh'); + const accessToken = createAccessToken({ + userId: 'user-1', + username: 'mrossi', + role: UserRole.OPERATORE_SANITARIO, + isFirstAccess: false, + }); + request.flush({ accessToken }); + + expect(await restorePromiseOne).toBe(true); + expect(await restorePromiseTwo).toBe(true); + }); + + it('resetta token e utente al logout', () => { + const requestSub = service.login('mrossi', loginCredential).subscribe(); + const request = httpMock.expectOne('http://localhost:3000/auth/login'); + request.flush({ + accessToken: createAccessToken({ + userId: 'user-1', + username: 'mrossi', + role: UserRole.AMMINISTRATORE, + isFirstAccess: false, + }), + }); + requestSub.unsubscribe(); + + service.logout(); + + expect(service.getToken()).toBeNull(); + expect(service.getRole()).toBeNull(); + expect(service.isAuthenticated()).toBe(false); + }); + + it('chiama /auth/logout con credenziali e resetta sessione locale', async () => { + const loginSub = service.login('mrossi', loginCredential).subscribe(); + const loginRequest = httpMock.expectOne('http://localhost:3000/auth/login'); + loginRequest.flush({ + accessToken: createAccessToken({ + userId: 'user-1', + username: 'mrossi', + role: UserRole.AMMINISTRATORE, + isFirstAccess: false, + }), + }); + loginSub.unsubscribe(); + + const logoutPromise = firstValueFrom(service.logoutFromBackend()); + + const request = httpMock.expectOne('http://localhost:3000/auth/logout'); + expect(request.request.method).toBe('POST'); + expect(request.request.withCredentials).toBe(true); + expect(request.request.body).toEqual({}); + request.flush(null); + + await logoutPromise; + expect(service.getToken()).toBeNull(); + expect(service.getRole()).toBeNull(); + expect(service.isAuthenticated()).toBe(false); + }); + + it('espone stream utente corrente con valore iniziale null', async () => { + const currentUser = await firstValueFrom(service.getCurrentUser$()); + expect(currentUser).toBeNull(); + }); +}); diff --git a/frontend/test/integration/app/features/alarm-configuration/components/alarm-config-form/alarm-config-form.component.deep.integration.spec.ts b/frontend/test/integration/app/features/alarm-configuration/components/alarm-config-form/alarm-config-form.component.deep.integration.spec.ts new file mode 100644 index 00000000..8c704a38 --- /dev/null +++ b/frontend/test/integration/app/features/alarm-configuration/components/alarm-config-form/alarm-config-form.component.deep.integration.spec.ts @@ -0,0 +1,537 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { of, throwError } from 'rxjs'; +import { beforeEach, describe, expect, it, vi } from 'vitest'; +import { AlarmPriority } from 'src/app/core/alarm/models/alarm-priority.enum'; +import { ThresholdOperator } from 'src/app/core/alarm/models/threshold-operator.enum'; +import { ApartmentApiService } from 'src/app/features/apartment-monitor/services/apartment-api.service'; +import { WardApiService } from 'src/app/features/ward-management/services/ward-api.service'; +import type { AlarmRule } from 'src/app/core/alarm/models/alarm-rule.model'; +import { AlarmConfigFormComponent } from 'src/app/features/alarm-configuration/components/alarm-config-form/alarm-config-form.component'; + +describe('AlarmConfigFormComponent', () => { + let component: AlarmConfigFormComponent; + let fixture: ComponentFixture; + + const wardApiStub = { + getAvailablePlants: vi.fn(), + getWards: vi.fn(), + getPlantsByWardId: vi.fn(), + }; + + const apartmentApiStub = { + getAllPlants: vi.fn(), + loadApartmentViewForPlantId: vi.fn(), + }; + + const existingRule: AlarmRule = { + id: 'alarm-42', + name: 'Porta aperta', + thresholdOperator: '=', + thresholdValue: 'ON', + priority: AlarmPriority.ORANGE, + armingTime: '07:00:00', + dearmingTime: '19:00:00', + isArmed: true, + deviceId: 'sensor-9', + datapointId: 'dp-readable-1', + position: 'Appartamento 2 - Ingresso - Sensore porta', + }; + + const validFormValue = { + name: 'Nuova regola', + plantId: 'plant-1', + deviceId: 'sensor-1', + datapointId: 'dp-readable-2', + priority: AlarmPriority.GREEN, + thresholdOperator: ThresholdOperator.GREATER_THAN, + thresholdValue: '12', + armingTime: '08:00', + dearmingTime: '18:00', + enabled: true, + }; + + const createCreateModeApartment = () => ({ + id: 'plant-1', + name: 'Appartamento 1', + isEnabled: true, + rooms: [ + { + id: 'room-1', + name: 'Soggiorno', + hasActiveAlarm: false, + devices: [ + { + id: 'sensor-1', + name: 'Sensore porta', + status: 'ONLINE', + type: 'LIGHT', + actions: [], + datapoints: [ + { + id: 'dp-readable-1', + name: 'SFE_State_OnOff', + readable: true, + writable: false, + valueType: 'string', + enum: ['Off', 'On'], + sfeType: 'SFE_State_OnOff', + }, + { + id: 'dp-write-only-1', + name: 'SFE_Cmd_OnOff', + readable: false, + writable: true, + valueType: 'string', + enum: ['Off', 'On'], + sfeType: 'SFE_Cmd_OnOff', + }, + { + id: 'dp-readable-2', + name: 'SFE_State_Temperature', + readable: true, + writable: false, + valueType: 'string', + enum: [], + sfeType: 'SFE_State_Temperature', + }, + ], + }, + ], + }, + ], + }); + + const createEditModePlants = () => ([ + { + id: 'plant-1', + name: 'Appartamento 1', + rooms: [ + { + id: 'room-edit', + name: 'Ingresso', + devices: [ + { + id: 'sensor-9', + name: 'Sensore porta edit', + type: 'LIGHT', + datapoints: [ + { + id: 'dp-readable-1', + name: 'SFE_State_OnOff', + readable: true, + writable: false, + valueType: 'string', + enum: ['Off', 'On'], + sfeType: 'SFE_State_OnOff', + }, + ], + }, + ], + }, + ], + }, + { id: 'plant-2', name: 'Appartamento 2', rooms: [] }, + { id: 'plant-3', name: 'Appartamento 3', rooms: [] }, + ]); + + beforeEach(async () => { + vi.clearAllMocks(); + wardApiStub.getAvailablePlants.mockReturnValue( + of([ + { id: 'plant-1', name: 'Appartamento 1' }, + { id: 'plant-3', name: 'Appartamento 3' }, + ]) + ); + wardApiStub.getWards.mockReturnValue( + of([{ id: 10, name: 'Reparto A' }]) + ); + wardApiStub.getPlantsByWardId.mockReturnValue( + of([ + { id: 'plant-1', name: 'Appartamento 1' }, + { id: 'plant-2', name: 'Appartamento 2' }, + ]) + ); + apartmentApiStub.loadApartmentViewForPlantId.mockReturnValue(of(createCreateModeApartment())); + apartmentApiStub.getAllPlants.mockReturnValue(of(createEditModePlants())); + + await TestBed.configureTestingModule({ + imports: [AlarmConfigFormComponent], + providers: [ + { provide: WardApiService, useValue: wardApiStub }, + { provide: ApartmentApiService, useValue: apartmentApiStub }, + ], + }).compileComponents(); + + fixture = TestBed.createComponent(AlarmConfigFormComponent); + component = fixture.componentInstance; + }); + + const setInputs = (mode: 'create' | 'edit', initialRule: AlarmRule | null): void => { + fixture.componentRef.setInput('mode', mode); + fixture.componentRef.setInput('initialRule', initialRule); + fixture.detectChanges(); + }; + + it('crea il componente', () => { + setInputs('create', null); + + expect(component).toBeTruthy(); + }); + + it('inizializza in create mode con form vuoto', () => { + setInputs('create', null); + + expect(component.isEditMode()).toBe(false); + expect(component.form.getRawValue()).toEqual({ + name: '', + plantId: '', + deviceId: '', + datapointId: '', + priority: null, + thresholdOperator: null, + thresholdValue: '', + armingTime: '', + dearmingTime: '', + enabled: true, + }); + expect(component.form.controls.name.disabled).toBe(false); + expect(component.plants().map((plant) => plant.id)).toEqual(['plant-1', 'plant-2', 'plant-3']); + }); + + it('inizializza in edit mode con prefill da initialRule', () => { + setInputs('edit', existingRule); + + expect(component.isEditMode()).toBe(true); + expect(component.form.getRawValue()).toEqual({ + name: 'Porta aperta', + plantId: '', + deviceId: 'sensor-9', + datapointId: 'dp-readable-1', + priority: AlarmPriority.ORANGE, + thresholdOperator: ThresholdOperator.EQUAL_TO, + thresholdValue: 'On', + armingTime: '07:00', + dearmingTime: '19:00', + enabled: true, + }); + + expect(component.form.controls.name.disabled).toBe(true); + expect(component.form.controls.deviceId.disabled).toBe(true); + expect(component.form.controls.datapointId.disabled).toBe(true); + expect(component.form.controls.thresholdOperator.disabled).toBe(true); + }); + + it('buildForm applica i validatori required ai campi richiesti', () => { + setInputs('create', null); + + component.form.patchValue({ + plantId: '', + priority: null, + thresholdOperator: null, + thresholdValue: '', + }); + + expect(component.form.controls.plantId.invalid).toBe(true); + + component.form.controls.plantId.setValue('plant-1'); + component.form.controls.deviceId.setValue(''); + + expect(component.form.controls.deviceId.invalid).toBe(true); + component.form.controls.deviceId.setValue('sensor-1'); + component.form.controls.datapointId.setValue(''); + + expect(component.form.controls.datapointId.invalid).toBe(true); + expect(component.form.controls.priority.invalid).toBe(true); + expect(component.form.controls.thresholdOperator.invalid).toBe(true); + expect(component.form.controls.thresholdValue.invalid).toBe(true); + }); + + it('in create mode mantiene il dispositivo bloccato finche non viene selezionato un plant', () => { + setInputs('create', null); + + expect(component.form.controls.deviceId.disabled).toBe(true); + + component.form.controls.plantId.setValue('plant-1'); + + expect(apartmentApiStub.loadApartmentViewForPlantId).toHaveBeenCalledWith('plant-1'); + expect(component.form.controls.deviceId.enabled).toBe(true); + expect(component.deviceOptions()[0]?.id).toBe('sensor-1'); + expect(component.deviceOptions()[0]?.label).toBe('Soggiorno - Sensore porta'); + }); + + it('mostra solo datapoint leggibili dopo la selezione dispositivo', () => { + setInputs('create', null); + + component.form.controls.plantId.setValue('plant-1'); + component.form.controls.deviceId.setValue('sensor-1'); + + expect(component.datapointOptions().map((datapoint) => datapoint.id)).toEqual([ + 'dp-readable-1', + 'dp-readable-2', + ]); + expect(component.datapointOptions().every((datapoint) => datapoint.readable)).toBe(true); + }); + + it('in create mode non mostra il campo posizione read-only', () => { + setInputs('create', null); + + const positionInput = fixture.nativeElement.querySelector('#position'); + expect(positionInput).toBeNull(); + }); + + it('in edit mode mostra il campo posizione read-only valorizzato', () => { + setInputs('edit', existingRule); + + const positionInput = fixture.nativeElement.querySelector('#position') as HTMLInputElement | null; + expect(positionInput).not.toBeNull(); + expect(positionInput?.value).toBe('Appartamento 2 - Ingresso - Sensore porta'); + }); + + it('in edit mode non mostra il campo datapoint nel form', () => { + setInputs('edit', existingRule); + + const datapointInput = fixture.nativeElement.querySelector('#datapoint') as HTMLInputElement | null; + expect(datapointInput).toBeNull(); + }); + + it('in edit mode mostra thresholdOperator come campo readonly', () => { + setInputs('edit', existingRule); + + const thresholdOperatorReadonly = fixture.nativeElement.querySelector('#thresholdOperatorReadonly') as HTMLInputElement | null; + const thresholdOperatorSelect = fixture.nativeElement.querySelector('#thresholdOperator') as HTMLSelectElement | null; + + expect(thresholdOperatorReadonly).not.toBeNull(); + expect(thresholdOperatorReadonly?.value).toBe(ThresholdOperator.EQUAL_TO); + expect(thresholdOperatorSelect).toBeNull(); + }); + + it('in edit mode limita gli operatori al datapoint risolto e resetta operatori non supportati', () => { + const enumRuleWithUnsupportedOperator: AlarmRule = { + ...existingRule, + thresholdOperator: '>', + }; + + setInputs('edit', enumRuleWithUnsupportedOperator); + + expect(component.thresholdOperatorOptions()).toEqual([ThresholdOperator.EQUAL_TO]); + expect(component.form.controls.thresholdOperator.value).toBeNull(); + }); + + it('in edit mode valida thresholdValue in base al datapoint risolto', () => { + setInputs('edit', existingRule); + + component.form.controls.thresholdValue.setValue('123'); + component.form.controls.thresholdValue.markAsTouched(); + component.form.controls.thresholdValue.updateValueAndValidity(); + + expect(component.form.controls.thresholdValue.errors?.['invalidEnumThreshold']).toBe(true); + }); + + it('in edit mode consente submit anche se i metadati datapoint non sono risolvibili', () => { + const emitSpy = vi.spyOn(component.submittedForm, 'emit'); + const missingDatapointRule: AlarmRule = { + ...existingRule, + datapointId: 'dp-missing', + }; + + setInputs('edit', missingDatapointRule); + component.onSubmit(); + + expect(emitSpy).toHaveBeenCalledWith({ + name: 'Porta aperta', + plantId: '', + deviceId: 'sensor-9', + datapointId: 'dp-missing', + priority: AlarmPriority.ORANGE, + thresholdOperator: ThresholdOperator.EQUAL_TO, + thresholdValue: 'ON', + armingTime: '07:00', + dearmingTime: '19:00', + enabled: true, + }); + expect(emitSpy).toHaveBeenCalledTimes(1); + }); + + it('onSubmit emette submittedForm in create mode con form valido', () => { + setInputs('create', null); + const emitSpy = vi.spyOn(component.submittedForm, 'emit'); + + component.form.controls.plantId.setValue('plant-1'); + component.form.setValue(validFormValue); + + component.onSubmit(); + + expect(emitSpy).toHaveBeenCalledWith(validFormValue); + expect(emitSpy).toHaveBeenCalledTimes(1); + }); + + it('onSubmit in edit mode emette submittedForm con form valido', () => { + setInputs('edit', existingRule); + const emitSpy = vi.spyOn(component.submittedForm, 'emit'); + component.form.setValue({ + ...validFormValue, + name: 'Nome modificato manualmente', + plantId: '', + deviceId: 'sensor-9', + datapointId: 'dp-readable-1', + thresholdOperator: ThresholdOperator.EQUAL_TO, + thresholdValue: 'ON', + }); + + component.onSubmit(); + + expect(emitSpy).toHaveBeenCalledWith({ + ...validFormValue, + name: 'Porta aperta', + plantId: '', + deviceId: 'sensor-9', + datapointId: 'dp-readable-1', + thresholdOperator: ThresholdOperator.EQUAL_TO, + thresholdValue: 'ON', + }); + expect(emitSpy).toHaveBeenCalledTimes(1); + }); + + it('onSubmit non invia se il form e invalido', () => { + setInputs('create', null); + const emitSpy = vi.spyOn(component.submittedForm, 'emit'); + component.form.patchValue({ + plantId: '', + deviceId: '', + datapointId: '', + priority: null, + thresholdOperator: null, + thresholdValue: '', + }); + + component.onSubmit(); + + expect(emitSpy).not.toHaveBeenCalled(); + }); + + it('onCancel emette evento cancelled', () => { + setInputs('create', null); + const emitSpy = vi.spyOn(component.cancelled, 'emit'); + + component.onCancel(); + + expect(emitSpy).toHaveBeenCalledTimes(1); + }); + + it('espone opzioni enum per priorita e operatore', () => { + setInputs('create', null); + + expect(component.priorityOptions).toEqual([ + AlarmPriority.WHITE, + AlarmPriority.GREEN, + AlarmPriority.ORANGE, + AlarmPriority.RED, + ]); + expect(component.thresholdOperatorOptions()).toEqual([ + ThresholdOperator.GREATER_THAN, + ThresholdOperator.GREATER_THAN_OR_EQUAL, + ThresholdOperator.LESS_THAN, + ThresholdOperator.LESS_THAN_OR_EQUAL, + ThresholdOperator.EQUAL_TO, + ]); + }); + + it('limita operatori e valore soglia quando il datapoint ha enum', () => { + setInputs('create', null); + + component.form.controls.plantId.setValue('plant-1'); + component.form.controls.deviceId.setValue('sensor-1'); + component.form.controls.datapointId.setValue('dp-readable-1'); + + expect(component.thresholdOperatorOptions()).toEqual([ThresholdOperator.EQUAL_TO]); + + component.form.controls.thresholdOperator.setValue(ThresholdOperator.GREATER_THAN); + component.form.controls.thresholdValue.setValue('Invalid value'); + component.form.controls.thresholdOperator.markAsTouched(); + component.form.controls.thresholdValue.markAsTouched(); + + expect(component.form.controls.thresholdOperator.invalid).toBe(true); + expect(component.form.controls.thresholdValue.invalid).toBe(true); + expect(component.form.controls.thresholdValue.errors?.['invalidEnumThreshold']).toBe(true); + }); + + it('accetta valore soglia booleano quando operatore è uguale', () => { + setInputs('create', null); + + component.form.controls.thresholdOperator.setValue(ThresholdOperator.EQUAL_TO); + component.form.controls.thresholdValue.setValue('ON'); + + expect(component.form.controls.thresholdOperator.valid).toBe(true); + expect(component.form.controls.thresholdValue.valid).toBe(true); + }); + + it('carica impianti da /plant/all deduplicando e ordinando per nome', () => { + apartmentApiStub.getAllPlants.mockReturnValueOnce( + of([ + { id: 'plant-3', name: 'Appartamento 3', rooms: [] }, + { id: 'plant-1', name: 'Appartamento 1', rooms: [] }, + { id: 'plant-1', name: 'Appartamento 1', rooms: [] }, + { id: 'plant-2', name: 'Appartamento 2', rooms: [] }, + ]) + ); + + setInputs('create', null); + + expect(component.plants().map((plant) => plant.id)).toEqual(['plant-1', 'plant-2', 'plant-3']); + expect(component.plantsLoadError()).toBeNull(); + }); + + it('se /plant/all fallisce usa fallback available + plants assegnati ai reparti', () => { + apartmentApiStub.getAllPlants.mockReturnValueOnce(throwError(() => new Error('plant all down'))); + wardApiStub.getAvailablePlants.mockReturnValueOnce( + of([ + { id: 'plant-7', name: 'Appartamento 7' }, + { id: 'plant-8', name: 'Appartamento 8' }, + ]) + ); + wardApiStub.getWards.mockReturnValueOnce(of([{ id: 90, name: 'Reparto 90' }])); + wardApiStub.getPlantsByWardId.mockReturnValueOnce( + of([ + { id: 'plant-9', name: 'Appartamento 9' }, + ]) + ); + + setInputs('create', null); + + expect(component.plants().map((plant) => plant.id)).toEqual(['plant-7', 'plant-8', 'plant-9']); + expect(component.plantsLoadError()).toBeNull(); + expect(wardApiStub.getPlantsByWardId).toHaveBeenCalledTimes(1); + }); + + it('se il plant viene deselezionato resetta opzioni dispositivo e blocca il campo dispositivo', () => { + setInputs('create', null); + + component.form.controls.plantId.setValue('plant-1'); + expect(component.deviceOptions()[0]?.id).toBe('sensor-1'); + expect(component.form.controls.deviceId.enabled).toBe(true); + + component.form.controls.plantId.setValue(''); + + expect(component.deviceOptions()).toEqual([]); + expect(component.form.controls.deviceId.value).toBe(''); + expect(component.form.controls.deviceId.disabled).toBe(true); + expect(component.datapointOptions()).toEqual([]); + }); + + it('in edit mode non consente di modificare il dispositivo associato', () => { + setInputs('edit', existingRule); + + expect(component.form.controls.deviceId.disabled).toBe(true); + expect(component.deviceOptions()).toEqual([{ id: 'sensor-9', label: 'sensor-9', datapoints: [] }]); + }); + + it('imposta errore quando il caricamento dispositivi fallisce', () => { + apartmentApiStub.loadApartmentViewForPlantId.mockReturnValueOnce(throwError(() => new Error('network'))); + setInputs('create', null); + + component.form.controls.plantId.setValue('plant-1'); + + expect(component.devicesLoadError()).toBe('Errore durante il caricamento dei dispositivi.'); + expect(component.form.controls.deviceId.disabled).toBe(true); + }); +}); diff --git a/frontend/test/integration/app/features/alarm-configuration/components/alarm-config-form/alarm-config-form.integration.spec.ts b/frontend/test/integration/app/features/alarm-configuration/components/alarm-config-form/alarm-config-form.integration.spec.ts new file mode 100644 index 00000000..01fd833b --- /dev/null +++ b/frontend/test/integration/app/features/alarm-configuration/components/alarm-config-form/alarm-config-form.integration.spec.ts @@ -0,0 +1,255 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { of } from 'rxjs'; +import { beforeEach, describe, expect, it, vi } from 'vitest'; +import { AlarmPriority } from 'src/app/core/alarm/models/alarm-priority.enum'; +import type { AlarmRule } from 'src/app/core/alarm/models/alarm-rule.model'; +import { ThresholdOperator } from 'src/app/core/alarm/models/threshold-operator.enum'; +import { AlarmConfigFormComponent } from 'src/app/features/alarm-configuration/components/alarm-config-form/alarm-config-form.component'; +import { ApartmentApiService } from 'src/app/features/apartment-monitor/services/apartment-api.service'; +import { WardApiService } from 'src/app/features/ward-management/services/ward-api.service'; + +describe('AlarmConfigForm feature integration', () => { + let fixture: ComponentFixture; + let component: AlarmConfigFormComponent; + + const wardApiStub = { + getAvailablePlants: vi.fn(), + getWards: vi.fn(), + getPlantsByWardId: vi.fn(), + }; + + const apartmentApiStub = { + loadApartmentViewForPlantId: vi.fn(), + getAllPlants: vi.fn(), + }; + + const editRule: AlarmRule = { + id: 'alarm-42', + name: 'Porta aperta', + thresholdOperator: '=', + thresholdValue: 'ON', + priority: AlarmPriority.ORANGE, + armingTime: '07:00:00', + dearmingTime: '19:00:00', + isArmed: true, + deviceId: 'sensor-9', + datapointId: 'dp-readable-1', + position: 'Appartamento 2 - Ingresso - Sensore porta', + }; + + beforeEach(async () => { + vi.clearAllMocks(); + + wardApiStub.getAvailablePlants.mockReturnValue(of([{ id: 'plant-1', name: 'Appartamento 1' }])); + wardApiStub.getWards.mockReturnValue(of([{ id: 10, name: 'Reparto A' }])); + wardApiStub.getPlantsByWardId.mockReturnValue(of([{ id: 'plant-2', name: 'Appartamento 2' }])); + + apartmentApiStub.loadApartmentViewForPlantId.mockReturnValue( + of({ + id: 'plant-1', + name: 'Appartamento 1', + isEnabled: true, + rooms: [ + { + id: 'room-1', + name: 'Soggiorno', + hasActiveAlarm: false, + devices: [ + { + id: 'sensor-1', + name: 'Sensore porta', + type: 'LIGHT', + status: 'ONLINE', + actions: [], + datapoints: [ + { + id: 'dp-readable-1', + name: 'SFE_State_OnOff', + readable: true, + writable: false, + valueType: 'string', + enum: ['Off', 'On'], + sfeType: 'SFE_State_OnOff', + }, + { + id: 'dp-readable-2', + name: 'SFE_State_Temperature', + readable: true, + writable: false, + valueType: 'number', + enum: [], + sfeType: 'SFE_State_Temperature', + }, + ], + }, + ], + }, + ], + }), + ); + + apartmentApiStub.getAllPlants.mockReturnValue( + of([ + { + id: 'plant-1', + name: 'Appartamento 1', + rooms: [ + { + id: 'room-1', + name: 'Soggiorno', + devices: [ + { + id: 'sensor-9', + name: 'Sensore porta edit', + datapoints: [ + { + id: 'dp-readable-1', + name: 'SFE_State_OnOff', + readable: true, + writable: false, + valueType: 'string', + enum: ['Off', 'On'], + sfeType: 'SFE_State_OnOff', + }, + ], + }, + ], + }, + ], + }, + ]), + ); + + await TestBed.configureTestingModule({ + imports: [AlarmConfigFormComponent], + providers: [ + { provide: WardApiService, useValue: wardApiStub }, + { provide: ApartmentApiService, useValue: apartmentApiStub }, + ], + }).compileComponents(); + + fixture = TestBed.createComponent(AlarmConfigFormComponent); + component = fixture.componentInstance; + }); + + function setInputs(mode: 'create' | 'edit', initialRule: AlarmRule | null): void { + fixture.componentRef.setInput('mode', mode); + fixture.componentRef.setInput('initialRule', initialRule); + fixture.detectChanges(); + } + + it('RF88-OBL create mode carica impianti e abilita selezione dispositivo', () => { + setInputs('create', null); + + expect(component.plants().map((plant) => plant.id)).toEqual(['plant-1', 'plant-2']); + expect(component.form.controls.deviceId.disabled).toBe(true); + + component.form.controls.plantId.setValue('plant-1'); + + expect(apartmentApiStub.loadApartmentViewForPlantId).toHaveBeenCalledWith('plant-1'); + expect(component.form.controls.deviceId.enabled).toBe(true); + expect(component.deviceOptions()[0]?.label).toContain('Soggiorno - Sensore porta'); + }); + + it('RF89-OBL selezione datapoint enum limita operatore e valida threshold', () => { + setInputs('create', null); + + component.form.controls.plantId.setValue('plant-1'); + component.form.controls.deviceId.setValue('sensor-1'); + component.form.controls.datapointId.setValue('dp-readable-1'); + + expect(component.thresholdOperatorOptions()).toEqual([ThresholdOperator.EQUAL_TO]); + + component.form.controls.thresholdOperator.setValue(ThresholdOperator.GREATER_THAN); + component.form.controls.thresholdValue.setValue('invalid'); + component.form.controls.thresholdOperator.markAsTouched(); + component.form.controls.thresholdValue.markAsTouched(); + component.form.controls.thresholdOperator.updateValueAndValidity(); + component.form.controls.thresholdValue.updateValueAndValidity(); + + expect(component.form.controls.thresholdOperator.errors?.['unsupportedOperator']).toBe(true); + expect(component.form.controls.thresholdValue.errors?.['invalidEnumThreshold']).toBe(true); + }); + + it('RF90-OBL submit create mode emette payload valido', () => { + setInputs('create', null); + const emitSpy = vi.spyOn(component.submittedForm, 'emit'); + + component.form.controls.plantId.setValue('plant-1'); + component.form.setValue({ + name: 'Nuova regola', + plantId: 'plant-1', + deviceId: 'sensor-1', + datapointId: 'dp-readable-2', + priority: AlarmPriority.GREEN, + thresholdOperator: ThresholdOperator.GREATER_THAN, + thresholdValue: '12', + armingTime: '08:00', + dearmingTime: '18:00', + enabled: true, + }); + + component.onSubmit(); + + expect(emitSpy).toHaveBeenCalledTimes(1); + expect(emitSpy).toHaveBeenCalledWith({ + name: 'Nuova regola', + plantId: 'plant-1', + deviceId: 'sensor-1', + datapointId: 'dp-readable-2', + priority: AlarmPriority.GREEN, + thresholdOperator: ThresholdOperator.GREATER_THAN, + thresholdValue: '12', + armingTime: '08:00', + dearmingTime: '18:00', + enabled: true, + }); + }); + + it('RF91-OBL edit mode blocca campi vincolati e mantiene nome originale su submit', () => { + setInputs('edit', editRule); + const emitSpy = vi.spyOn(component.submittedForm, 'emit'); + + expect(component.form.controls.name.disabled).toBe(true); + expect(component.form.controls.deviceId.disabled).toBe(true); + expect(component.form.controls.datapointId.disabled).toBe(true); + + component.form.setValue({ + name: 'Nome modificato manualmente', + plantId: '', + deviceId: 'sensor-9', + datapointId: 'dp-readable-1', + priority: AlarmPriority.ORANGE, + thresholdOperator: ThresholdOperator.EQUAL_TO, + thresholdValue: 'ON', + armingTime: '07:00', + dearmingTime: '19:00', + enabled: true, + }); + + component.onSubmit(); + + expect(emitSpy).toHaveBeenCalledTimes(1); + expect(emitSpy).toHaveBeenCalledWith({ + name: 'Porta aperta', + plantId: '', + deviceId: 'sensor-9', + datapointId: 'dp-readable-1', + priority: AlarmPriority.ORANGE, + thresholdOperator: ThresholdOperator.EQUAL_TO, + thresholdValue: 'ON', + armingTime: '07:00', + dearmingTime: '19:00', + enabled: true, + }); + }); + + it('RF92-OBL annulla form emettendo evento cancelled', () => { + setInputs('create', null); + const cancelSpy = vi.spyOn(component.cancelled, 'emit'); + + component.onCancel(); + + expect(cancelSpy).toHaveBeenCalledTimes(1); + }); +}); diff --git a/frontend/test/integration/app/features/alarm-configuration/components/alarm-config-page/alarm-config-page.component.deep.integration.spec.ts b/frontend/test/integration/app/features/alarm-configuration/components/alarm-config-page/alarm-config-page.component.deep.integration.spec.ts new file mode 100644 index 00000000..a5083a9a --- /dev/null +++ b/frontend/test/integration/app/features/alarm-configuration/components/alarm-config-page/alarm-config-page.component.deep.integration.spec.ts @@ -0,0 +1,296 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { BehaviorSubject, EMPTY, Subject, of } from 'rxjs'; +import { beforeEach, describe, expect, it, vi } from 'vitest'; +import { AlarmPriority } from 'src/app/core/alarm/models/alarm-priority.enum'; +import { ThresholdOperator } from 'src/app/core/alarm/models/threshold-operator.enum'; +import { ApartmentApiService } from 'src/app/features/apartment-monitor/services/apartment-api.service'; +import { WardApiService } from 'src/app/features/ward-management/services/ward-api.service'; +import type { AlarmRule } from 'src/app/core/alarm/models/alarm-rule.model'; +import { AlarmConfigStateService } from 'src/app/features/alarm-configuration/services/alarm-config-state.service'; +import { AlarmConfigPageComponent } from 'src/app/features/alarm-configuration/components/alarm-config-page/alarm-config-page.component'; + +describe('AlarmConfigPageComponent', () => { + let component: AlarmConfigPageComponent; + let fixture: ComponentFixture; + let alarmsSubject: BehaviorSubject; + let errorSubject: BehaviorSubject; + let stateServiceStub: { + alarms$: ReturnType['asObservable']>; + error$: ReturnType['asObservable']>; + loadAlarmRules: ReturnType; + createAlarmRule: ReturnType; + updateAlarmRule: ReturnType; + toggleEnabled: ReturnType; + deleteAlarmRule: ReturnType; + }; + + const wardApiStub = { + getAvailablePlants: vi.fn(() => of([])), + getWards: vi.fn(() => of([])), + getPlantsByWardId: vi.fn(() => of([])), + }; + + const apartmentApiStub = { + loadApartmentViewForPlantId: vi.fn(() => of({ id: 'plant-1', name: 'Plant', isEnabled: true, rooms: [] })), + }; + + const alarmRule: AlarmRule = { + id: 'alarm-1', + name: 'Temperatura alta', + thresholdOperator: '>', + thresholdValue: '30', + priority: AlarmPriority.RED, + armingTime: '08:00:00', + dearmingTime: '20:00:00', + isArmed: true, + deviceId: 'dev-1', + position: 'Appartamento 1 - Soggiorno - Sensore porta', + }; + + const formValue = { + name: 'Nuova regola', + plantId: 'plant-1', + deviceId: 'sensor-1', + priority: AlarmPriority.GREEN, + thresholdOperator: ThresholdOperator.GREATER_THAN, + thresholdValue: '12', + armingTime: '08:00', + dearmingTime: '18:00', + enabled: true, + }; + + beforeEach(async () => { + vi.clearAllMocks(); + alarmsSubject = new BehaviorSubject([]); + errorSubject = new BehaviorSubject(null); + stateServiceStub = { + alarms$: alarmsSubject.asObservable(), + error$: errorSubject.asObservable(), + loadAlarmRules: vi.fn(), + createAlarmRule: vi.fn(() => of({} as AlarmRule)), + updateAlarmRule: vi.fn(() => of({} as AlarmRule)), + toggleEnabled: vi.fn(() => of({} as AlarmRule)), + deleteAlarmRule: vi.fn(() => of(void 0)), + }; + + await TestBed.configureTestingModule({ + imports: [AlarmConfigPageComponent], + providers: [ + { provide: AlarmConfigStateService, useValue: stateServiceStub }, + { provide: WardApiService, useValue: wardApiStub }, + { provide: ApartmentApiService, useValue: apartmentApiStub }, + ], + }).compileComponents(); + + fixture = TestBed.createComponent(AlarmConfigPageComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('crea il componente', () => { + expect(component).toBeTruthy(); + }); + + it('ngOnInit carica gli allarmi e aggiorna le righe tabellari', () => { + expect(stateServiceStub.loadAlarmRules).toHaveBeenCalledTimes(1); + + alarmsSubject.next([alarmRule]); + errorSubject.next('Errore test'); + fixture.detectChanges(); + + expect(component.rows().length).toBe(1); + expect(component.error()).toBe('Errore test'); + }); + + it('onCreateNew apre la modale in create mode', () => { + component.onCreateNew(); + + expect(component.isModalOpen()).toBe(true); + expect(component.editingRule()).toBeNull(); + expect(component.modalTitle()).toBe('Creazione allarme'); + }); + + it('onEdit apre la modale in edit mode con regola selezionata', () => { + alarmsSubject.next([alarmRule]); + fixture.detectChanges(); + + component.onEdit('alarm-1'); + + expect(component.isModalOpen()).toBe(true); + expect(component.editingRule()?.id).toBe('alarm-1'); + expect(component.modalTitle()).toBe('Modifica allarme'); + }); + + it('onEdit ignora id non trovato', () => { + alarmsSubject.next([alarmRule]); + fixture.detectChanges(); + + component.onEdit('unknown-id'); + + expect(component.isModalOpen()).toBe(false); + expect(component.editingRule()).toBeNull(); + }); + + it('onFormSubmitted in create mode invoca create e chiude modale', () => { + component.onCreateNew(); + + component.onFormSubmitted(formValue); + + expect(stateServiceStub.createAlarmRule).toHaveBeenCalledWith(formValue); + expect(component.isModalOpen()).toBe(false); + }); + + it('onFormSubmitted in create mode mantiene aperta la modale se non arriva alcun esito', () => { + stateServiceStub.createAlarmRule.mockReturnValueOnce(EMPTY); + component.onCreateNew(); + + component.onFormSubmitted(formValue); + + expect(stateServiceStub.createAlarmRule).toHaveBeenCalledWith(formValue); + expect(component.isModalOpen()).toBe(true); + expect(component.editingRule()).toBeNull(); + }); + + it('onFormSubmitted in edit mode invoca update e chiude modale', () => { + alarmsSubject.next([alarmRule]); + fixture.detectChanges(); + component.onEdit('alarm-1'); + + component.onFormSubmitted(formValue); + + expect(stateServiceStub.updateAlarmRule).toHaveBeenCalledWith('alarm-1', formValue); + expect(component.isModalOpen()).toBe(false); + }); + + it('onFormSubmitted in edit mode mantiene aperta la modale se non arriva alcun esito', () => { + alarmsSubject.next([alarmRule]); + fixture.detectChanges(); + component.onEdit('alarm-1'); + stateServiceStub.updateAlarmRule.mockReturnValueOnce(EMPTY); + + component.onFormSubmitted(formValue); + + expect(component.isModalOpen()).toBe(true); + expect(component.editingRule()?.id).toBe('alarm-1'); + }); + + it('onToggleEnabled invoca toggleEnabled con lo stato richiesto', () => { + component.onToggleEnabled('alarm-1', false); + + expect(stateServiceStub.toggleEnabled).toHaveBeenCalledWith('alarm-1', false); + }); + + it('onToggleEnabled blocca i click ripetuti finché la richiesta è in corso', () => { + const toggleSubject = new Subject(); + stateServiceStub.toggleEnabled.mockReturnValueOnce(toggleSubject.asObservable()); + + component.onToggleEnabled('alarm-1', false); + component.onToggleEnabled('alarm-1', true); + + expect(component.pendingToggleRuleId()).toBe('alarm-1'); + expect(stateServiceStub.toggleEnabled).toHaveBeenCalledTimes(1); + + toggleSubject.next(alarmRule); + toggleSubject.complete(); + + expect(component.pendingToggleRuleId()).toBeNull(); + + component.onToggleEnabled('alarm-1', true); + + expect(stateServiceStub.toggleEnabled).toHaveBeenCalledTimes(2); + }); + + it('onDelete apre la modale di conferma senza chiamare subito la delete', () => { + component.onDelete('alarm-1', 'Temperatura alta'); + + expect(component.pendingDelete()).toEqual({ id: 'alarm-1', name: 'Temperatura alta' }); + expect(stateServiceStub.deleteAlarmRule).not.toHaveBeenCalled(); + }); + + it('onDeleteConfirmed invoca deleteAlarmRule con id e chiude la modale di conferma', () => { + component.onDelete('alarm-1', 'Temperatura alta'); + + component.onDeleteConfirmed(); + + expect(stateServiceStub.deleteAlarmRule).toHaveBeenCalledWith('alarm-1'); + expect(component.pendingDelete()).toBeNull(); + }); + + it('onDeleteCancelled chiude la modale di conferma senza eliminare', () => { + component.onDelete('alarm-1', 'Temperatura alta'); + + component.onDeleteCancelled(); + + expect(component.pendingDelete()).toBeNull(); + expect(stateServiceStub.deleteAlarmRule).not.toHaveBeenCalled(); + }); + + it('renderizza la modale di conferma cancellazione quando richiesta', () => { + alarmsSubject.next([alarmRule]); + fixture.detectChanges(); + + component.onDelete('alarm-1', 'Temperatura alta'); + fixture.detectChanges(); + + const nativeElement = fixture.nativeElement as HTMLElement; + const confirmDialog = nativeElement.querySelector('app-confirm-dialog'); + const content = nativeElement.textContent ?? ''; + + expect(confirmDialog).not.toBeNull(); + expect(content).toContain('Confermi l\'eliminazione della soglia "Temperatura alta"?'); + }); + + it('onModalClosed chiude modale e resetta editingRule', () => { + alarmsSubject.next([alarmRule]); + fixture.detectChanges(); + component.onEdit('alarm-1'); + + component.onModalClosed(); + + expect(component.isModalOpen()).toBe(false); + expect(component.editingRule()).toBeNull(); + }); + + it('onCreateNew resetta l eventuale regola in edit e apre la modale in create', () => { + alarmsSubject.next([alarmRule]); + fixture.detectChanges(); + component.onEdit('alarm-1'); + + component.onCreateNew(); + + expect(component.isModalOpen()).toBe(true); + expect(component.editingRule()).toBeNull(); + }); + + it('renderizza la tabella con le righe e i pulsanti azione', () => { + alarmsSubject.next([alarmRule]); + fixture.detectChanges(); + + const nativeElement = fixture.nativeElement as HTMLElement; + const content = nativeElement.textContent ?? ''; + const tableRows = nativeElement.querySelectorAll('tbody tr'); + + expect(tableRows.length).toBe(1); + expect(content).toContain('Temperatura alta'); + expect(content).toContain('Posizione'); + expect(content).toContain('Appartamento 1 - Soggiorno - Sensore porta'); + expect(content).toContain('MODIFICA'); + expect(content).toContain('ELIMINA'); + }); + + it('renderizza messaggio vuoto quando non ci sono regole', () => { + alarmsSubject.next([]); + fixture.detectChanges(); + + const content = fixture.nativeElement.textContent as string; + expect(content).toContain('Nessuna regola configurata.'); + }); + + it('renderizza il form in modale quando la modale e aperta', () => { + component.onCreateNew(); + fixture.detectChanges(); + + const modalForm = fixture.nativeElement.querySelector('app-alarm-config-form'); + expect(modalForm).not.toBeNull(); + }); +}); diff --git a/frontend/test/integration/app/features/alarm-configuration/components/alarm-config-page/alarm-config-page.integration.spec.ts b/frontend/test/integration/app/features/alarm-configuration/components/alarm-config-page/alarm-config-page.integration.spec.ts new file mode 100644 index 00000000..812065f6 --- /dev/null +++ b/frontend/test/integration/app/features/alarm-configuration/components/alarm-config-page/alarm-config-page.integration.spec.ts @@ -0,0 +1,114 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { BehaviorSubject, EMPTY, of } from 'rxjs'; +import { beforeEach, describe, expect, it, vi } from 'vitest'; +import { AlarmPriority } from 'src/app/core/alarm/models/alarm-priority.enum'; +import type { AlarmRule } from 'src/app/core/alarm/models/alarm-rule.model'; +import { ThresholdOperator } from 'src/app/core/alarm/models/threshold-operator.enum'; +import { ApartmentApiService } from 'src/app/features/apartment-monitor/services/apartment-api.service'; +import { AlarmConfigPageComponent } from 'src/app/features/alarm-configuration/components/alarm-config-page/alarm-config-page.component'; +import { AlarmConfigStateService } from 'src/app/features/alarm-configuration/services/alarm-config-state.service'; +import { WardApiService } from 'src/app/features/ward-management/services/ward-api.service'; + +describe('AlarmConfiguration feature integration', () => { + let fixture: ComponentFixture; + let component: AlarmConfigPageComponent; + let alarmsSubject: BehaviorSubject; + + const alarmRule: AlarmRule = { + id: 'alarm-1', + name: 'Temperatura alta', + thresholdOperator: '>', + thresholdValue: '30', + priority: AlarmPriority.RED, + armingTime: '08:00:00', + dearmingTime: '20:00:00', + isArmed: true, + deviceId: 'dev-1', + position: 'Appartamento 1 - Soggiorno - Sensore porta', + }; + + const formValue = { + name: 'Nuova regola', + plantId: 'plant-1', + deviceId: 'sensor-1', + priority: AlarmPriority.GREEN, + thresholdOperator: ThresholdOperator.GREATER_THAN, + thresholdValue: '12', + armingTime: '08:00', + dearmingTime: '18:00', + enabled: true, + }; + + const wardApiStub = { + getAvailablePlants: vi.fn(() => of([])), + getWards: vi.fn(() => of([])), + getPlantsByWardId: vi.fn(() => of([])), + }; + + const apartmentApiStub = { + loadApartmentViewForPlantId: vi.fn(() => of({ id: 'plant-1', name: 'Plant', isEnabled: true, rooms: [] })), + }; + + let stateServiceStub: { + alarms$: ReturnType['asObservable']>; + error$: ReturnType['asObservable']>; + loadAlarmRules: ReturnType; + createAlarmRule: ReturnType; + updateAlarmRule: ReturnType; + toggleEnabled: ReturnType; + deleteAlarmRule: ReturnType; + }; + + beforeEach(async () => { + vi.clearAllMocks(); + alarmsSubject = new BehaviorSubject([]); + + stateServiceStub = { + alarms$: alarmsSubject.asObservable(), + error$: new BehaviorSubject(null).asObservable(), + loadAlarmRules: vi.fn(), + createAlarmRule: vi.fn(() => of({} as AlarmRule)), + updateAlarmRule: vi.fn(() => of({} as AlarmRule)), + toggleEnabled: vi.fn(() => of({} as AlarmRule)), + deleteAlarmRule: vi.fn(() => of(void 0)), + }; + + await TestBed.configureTestingModule({ + imports: [AlarmConfigPageComponent], + providers: [ + { provide: AlarmConfigStateService, useValue: stateServiceStub }, + { provide: WardApiService, useValue: wardApiStub }, + { provide: ApartmentApiService, useValue: apartmentApiStub }, + ], + }).compileComponents(); + + fixture = TestBed.createComponent(AlarmConfigPageComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('RF85-OBL inizializza pagina e carica regole allarme', () => { + expect(component).toBeTruthy(); + expect(stateServiceStub.loadAlarmRules).toHaveBeenCalledTimes(1); + }); + + it('RF86-OBL create mode invia form al servizio e chiude modale', () => { + component.onCreateNew(); + component.onFormSubmitted(formValue); + + expect(stateServiceStub.createAlarmRule).toHaveBeenCalledWith(formValue); + expect(component.isModalOpen()).toBe(false); + }); + + it('RF87-OBL edit mode mantiene modale aperta se update non emette esito', () => { + alarmsSubject.next([alarmRule]); + fixture.detectChanges(); + component.onEdit('alarm-1'); + stateServiceStub.updateAlarmRule.mockReturnValueOnce(EMPTY); + + component.onFormSubmitted(formValue); + + expect(component.isModalOpen()).toBe(true); + expect(component.editingRule()?.id).toBe('alarm-1'); + }); +}); diff --git a/frontend/test/integration/app/features/alarm-configuration/helpers/alarm-config-form-field-orchestrator.helper.integration.spec.ts b/frontend/test/integration/app/features/alarm-configuration/helpers/alarm-config-form-field-orchestrator.helper.integration.spec.ts new file mode 100644 index 00000000..f2544a6a --- /dev/null +++ b/frontend/test/integration/app/features/alarm-configuration/helpers/alarm-config-form-field-orchestrator.helper.integration.spec.ts @@ -0,0 +1,84 @@ +import { FormControl } from '@angular/forms'; +import { TestBed } from '@angular/core/testing'; +import { beforeEach, describe, expect, it } from 'vitest'; +import { Datapoint } from 'src/app/features/apartment-monitor/models/datapoint.model'; +import { AlarmConfigFormFieldOrchestratorHelper } from 'src/app/features/alarm-configuration/helpers/alarm-config-form-field-orchestrator.helper'; + +describe('AlarmConfigFormFieldOrchestratorHelper', () => { + let helper: AlarmConfigFormFieldOrchestratorHelper; + + beforeEach(() => { + TestBed.configureTestingModule({ providers: [AlarmConfigFormFieldOrchestratorHelper] }); + helper = TestBed.inject(AlarmConfigFormFieldOrchestratorHelper); + }); + + it('applyModeState in edit mode disabilita campi non modificabili', () => { + const formLike = { + controls: { + name: new FormControl('Name', { nonNullable: true }), + plantId: new FormControl('plant-1', { nonNullable: true }), + deviceId: new FormControl('device-1', { nonNullable: true }), + datapointId: new FormControl('dp-1', { nonNullable: true }), + thresholdOperator: new FormControl('>', { nonNullable: true }), + }, + }; + + helper.applyModeState(formLike, 'edit'); + + expect(formLike.controls.name.disabled).toBe(true); + expect(formLike.controls.plantId.disabled).toBe(true); + expect(formLike.controls.deviceId.disabled).toBe(true); + expect(formLike.controls.datapointId.disabled).toBe(true); + expect(formLike.controls.thresholdOperator.disabled).toBe(true); + }); + + it('resolveDeviceSelection ritorna solo datapoint leggibili e auto-selezione se singolo', () => { + const readableDatapoint: Datapoint = { + id: 'dp-readable', + name: 'Readable', + readable: true, + writable: false, + valueType: 'string', + enum: ['On', 'Off'], + sfeType: 'SFE_State', + }; + const notReadableDatapoint: Datapoint = { + id: 'dp-command', + name: 'Command', + readable: false, + writable: true, + valueType: 'string', + enum: ['On', 'Off'], + sfeType: 'SFE_Cmd', + }; + + const selection = helper.resolveDeviceSelection('device-1', [ + { + id: 'device-1', + label: 'Room - Device', + datapoints: [readableDatapoint, notReadableDatapoint], + }, + ]); + + expect(selection.normalizedDeviceId).toBe('device-1'); + expect(selection.readableDatapoints).toEqual([readableDatapoint]); + expect(selection.autoSelectedDatapointId).toBe('dp-readable'); + }); + + it('resolveDatapointSelection normalizza id e restituisce il datapoint atteso', () => { + const datapoint: Datapoint = { + id: 'dp-1', + name: 'Datapoint', + readable: true, + writable: false, + valueType: 'string', + enum: [], + sfeType: 'SFE', + }; + + const selection = helper.resolveDatapointSelection(' dp-1 ', [datapoint]); + + expect(selection.normalizedDatapointId).toBe('dp-1'); + expect(selection.selectedDatapoint).toEqual(datapoint); + }); +}); diff --git a/frontend/test/integration/app/features/alarm-configuration/helpers/alarm-config-form-validation.helper.integration.spec.ts b/frontend/test/integration/app/features/alarm-configuration/helpers/alarm-config-form-validation.helper.integration.spec.ts new file mode 100644 index 00000000..fe3015eb --- /dev/null +++ b/frontend/test/integration/app/features/alarm-configuration/helpers/alarm-config-form-validation.helper.integration.spec.ts @@ -0,0 +1,111 @@ +import { FormControl } from '@angular/forms'; +import { TestBed } from '@angular/core/testing'; +import { beforeEach, describe, expect, it } from 'vitest'; +import { ThresholdOperator } from 'src/app/core/alarm/models/threshold-operator.enum'; +import { Datapoint } from 'src/app/features/apartment-monitor/models/datapoint.model'; +import { AlarmConfigFormValidationHelper } from 'src/app/features/alarm-configuration/helpers/alarm-config-form-validation.helper'; + +describe('AlarmConfigFormValidationHelper', () => { + let helper: AlarmConfigFormValidationHelper; + + const enumDatapoint: Datapoint = { + id: 'dp-enum', + name: 'SFE_State_OnOff', + readable: true, + writable: false, + valueType: 'string', + enum: ['Off', 'On'], + sfeType: 'SFE_State_OnOff', + }; + + const numericDatapoint: Datapoint = { + id: 'dp-numeric', + name: 'SFE_State_Value', + readable: true, + writable: false, + valueType: 'string', + enum: [], + sfeType: 'SFE_State_Value', + }; + + beforeEach(() => { + TestBed.configureTestingModule({ providers: [AlarmConfigFormValidationHelper] }); + helper = TestBed.inject(AlarmConfigFormValidationHelper); + }); + + it('in create mode con enum forza operatore uguale e valida threshold su enum', () => { + const operatorControl = new FormControl(ThresholdOperator.GREATER_THAN); + const valueControl = new FormControl('INVALID'); + + helper.applyThresholdConstraints({ + mode: 'create', + datapoint: enumDatapoint, + thresholdOperatorControl: operatorControl, + thresholdValueControl: valueControl, + }); + + expect(operatorControl.value).toBeNull(); + expect(valueControl.errors?.['invalidEnumThreshold']).toBe(true); + }); + + it('in create mode con datapoint numerico applica validazione numerica', () => { + const operatorControl = new FormControl(ThresholdOperator.GREATER_THAN); + const valueControl = new FormControl('abc'); + + helper.applyThresholdConstraints({ + mode: 'create', + datapoint: numericDatapoint, + thresholdOperatorControl: operatorControl, + thresholdValueControl: valueControl, + }); + + expect(operatorControl.value).toBe(ThresholdOperator.GREATER_THAN); + expect(valueControl.errors?.['pattern']).toBeTruthy(); + }); + + it('in edit mode con datapoint enum applica lo stesso vincolo operatore della create', () => { + const operatorControl = new FormControl(ThresholdOperator.LESS_THAN); + const valueControl = new FormControl('abc'); + + helper.applyThresholdConstraints({ + mode: 'edit', + datapoint: enumDatapoint, + thresholdOperatorControl: operatorControl, + thresholdValueControl: valueControl, + }); + + expect(operatorControl.value).toBeNull(); + expect(valueControl.errors?.['invalidEnumThreshold']).toBe(true); + }); + + it('in edit mode con datapoint numerico applica validazione numerica', () => { + const operatorControl = new FormControl(ThresholdOperator.GREATER_THAN); + const valueControl = new FormControl('not-a-number'); + + helper.applyThresholdConstraints({ + mode: 'edit', + datapoint: numericDatapoint, + thresholdOperatorControl: operatorControl, + thresholdValueControl: valueControl, + }); + + expect(valueControl.errors?.['pattern']).toBeTruthy(); + }); + + it('in edit mode senza metadati datapoint mantiene come ammesso solo l operatore corrente', () => { + const operatorControl = new FormControl(ThresholdOperator.LESS_THAN); + const valueControl = new FormControl('10'); + + helper.applyThresholdConstraints({ + mode: 'edit', + datapoint: null, + thresholdOperatorControl: operatorControl, + thresholdValueControl: valueControl, + }); + + operatorControl.setValue(ThresholdOperator.GREATER_THAN); + operatorControl.updateValueAndValidity(); + + expect(operatorControl.errors?.['unsupportedOperator']).toBe(true); + }); +}); diff --git a/frontend/test/integration/app/features/alarm-configuration/mappers/alarm-rule-form.mapper.integration.spec.ts b/frontend/test/integration/app/features/alarm-configuration/mappers/alarm-rule-form.mapper.integration.spec.ts new file mode 100644 index 00000000..deedca2b --- /dev/null +++ b/frontend/test/integration/app/features/alarm-configuration/mappers/alarm-rule-form.mapper.integration.spec.ts @@ -0,0 +1,160 @@ +import { TestBed } from '@angular/core/testing'; +import { beforeEach, describe, expect, it } from 'vitest'; +import { AlarmPriority } from 'src/app/core/alarm/models/alarm-priority.enum'; +import type { AlarmRule } from 'src/app/core/alarm/models/alarm-rule.model'; +import { ThresholdOperator } from 'src/app/core/alarm/models/threshold-operator.enum'; +import { AlarmRuleFormMapper } from 'src/app/features/alarm-configuration/mappers/alarm-rule-form.mapper'; + +describe('AlarmRuleFormMapper', () => { + let mapper: AlarmRuleFormMapper; + + beforeEach(() => { + TestBed.configureTestingModule({ + providers: [AlarmRuleFormMapper], + }); + + mapper = TestBed.inject(AlarmRuleFormMapper); + }); + + it('mappa una regola numerica nel form value', () => { + const rule: AlarmRule = { + id: 'rule-1', + name: 'Temperatura alta', + thresholdOperator: '>', + thresholdValue: '30', + priority: AlarmPriority.RED, + armingTime: '08:00:00', + dearmingTime: '18:00:00', + isArmed: true, + deviceId: 'device-1', + datapointId: 'dp-1', + position: 'Appartamento 1 - Soggiorno - Sensore temperatura', + }; + + expect(mapper.toFormValue(rule)).toEqual({ + name: 'Temperatura alta', + plantId: '', + deviceId: 'device-1', + datapointId: 'dp-1', + priority: AlarmPriority.RED, + thresholdOperator: ThresholdOperator.GREATER_THAN, + thresholdValue: '30', + armingTime: '08:00', + dearmingTime: '18:00', + enabled: true, + }); + }); + + it('mappa una regola booleana ON mantenendo operatore uguale', () => { + const rule: AlarmRule = { + id: 'rule-2', + name: 'Allarme acceso', + thresholdOperator: '=', + thresholdValue: 'ON', + priority: AlarmPriority.ORANGE, + armingTime: '00:00:00', + dearmingTime: '23:59:00', + isArmed: false, + deviceId: 'device-2', + datapointId: 'dp-2', + position: 'Appartamento 1 - Ingresso - Sensore porta', + }; + + expect(mapper.toFormValue(rule)).toEqual({ + name: 'Allarme acceso', + plantId: '', + deviceId: 'device-2', + datapointId: 'dp-2', + priority: AlarmPriority.ORANGE, + thresholdOperator: ThresholdOperator.EQUAL_TO, + thresholdValue: 'ON', + armingTime: '00:00', + dearmingTime: '23:59', + enabled: false, + }); + }); + + it('mappa una regola booleana OFF mantenendo operatore uguale', () => { + const rule: AlarmRule = { + id: 'rule-3', + name: 'Allarme spento', + thresholdOperator: '=', + thresholdValue: 'OFF', + priority: AlarmPriority.GREEN, + armingTime: '06:30:00', + dearmingTime: '19:30:00', + isArmed: true, + deviceId: 'device-3', + datapointId: 'dp-3', + position: 'Appartamento 2 - Camera - Sensore finestra', + }; + + expect(mapper.toFormValue(rule)).toEqual({ + name: 'Allarme spento', + plantId: '', + deviceId: 'device-3', + datapointId: 'dp-3', + priority: AlarmPriority.GREEN, + thresholdOperator: ThresholdOperator.EQUAL_TO, + thresholdValue: 'OFF', + armingTime: '06:30', + dearmingTime: '19:30', + enabled: true, + }); + }); + + it('mappa operatore >= come GREATER_THAN_OR_EQUAL', () => { + const rule: AlarmRule = { + id: 'rule-4', + name: 'Temperatura minima', + thresholdOperator: '>=', + thresholdValue: '18', + priority: AlarmPriority.WHITE, + armingTime: '05:00:00', + dearmingTime: '22:00:00', + isArmed: true, + deviceId: 'device-4', + datapointId: 'dp-4', + position: 'Appartamento 3 - Cucina - Sensore temperatura', + }; + + expect(mapper.toFormValue(rule).thresholdOperator).toBe(ThresholdOperator.GREATER_THAN_OR_EQUAL); + }); + + it('mappa operatore <= come LESS_THAN_OR_EQUAL', () => { + const rule: AlarmRule = { + id: 'rule-5', + name: 'Temperatura massima', + thresholdOperator: '<=', + thresholdValue: '28', + priority: AlarmPriority.WHITE, + armingTime: '05:00:00', + dearmingTime: '22:00:00', + isArmed: false, + deviceId: 'device-5', + datapointId: 'dp-5', + position: 'Appartamento 3 - Camera - Sensore temperatura', + }; + + expect(mapper.toFormValue(rule).thresholdOperator).toBe(ThresholdOperator.LESS_THAN_OR_EQUAL); + }); + + it('fallisce su operatori sconosciuti', () => { + const rule: AlarmRule = { + id: 'rule-6', + name: 'Operatore custom', + thresholdOperator: '!=', + thresholdValue: 'foo', + priority: AlarmPriority.RED, + armingTime: '00:00:00', + dearmingTime: '23:59:00', + isArmed: true, + deviceId: 'device-6', + datapointId: 'dp-6', + position: 'Appartamento 4 - Bagno - Sensore custom', + }; + + expect(() => mapper.toFormValue(rule)).toThrow('Operatore soglia non supportato: !='); + }); + +}); diff --git a/frontend/test/integration/app/features/alarm-configuration/mappers/alarm-rule-request.mapper.integration.spec.ts b/frontend/test/integration/app/features/alarm-configuration/mappers/alarm-rule-request.mapper.integration.spec.ts new file mode 100644 index 00000000..ad755f62 --- /dev/null +++ b/frontend/test/integration/app/features/alarm-configuration/mappers/alarm-rule-request.mapper.integration.spec.ts @@ -0,0 +1,242 @@ +import { TestBed } from '@angular/core/testing'; +import { beforeEach, describe, expect, it } from 'vitest'; +import { AlarmPriority } from 'src/app/core/alarm/models/alarm-priority.enum'; +import type { AlarmRule } from 'src/app/core/alarm/models/alarm-rule.model'; +import { ThresholdOperator } from 'src/app/core/alarm/models/threshold-operator.enum'; +import type { AlarmConfigFormValue } from 'src/app/features/alarm-configuration/models/alarm-config-form-value.model'; +import { AlarmRuleRequestMapper } from 'src/app/features/alarm-configuration/mappers/alarm-rule-request.mapper'; + +describe('AlarmRuleRequestMapper', () => { + let mapper: AlarmRuleRequestMapper; + + beforeEach(() => { + TestBed.configureTestingModule({ + providers: [AlarmRuleRequestMapper], + }); + + mapper = TestBed.inject(AlarmRuleRequestMapper); + }); + + it('toUpdateRequest include i campi previsti dal contratto update', () => { + const formValue: AlarmConfigFormValue = { + name: ' Soglia temperatura ', + plantId: 'plant-1', + deviceId: ' DEV001 ', + datapointId: 'dp-1', + priority: AlarmPriority.ORANGE, + thresholdOperator: ThresholdOperator.LESS_THAN, + thresholdValue: '12', + armingTime: '07:15', + dearmingTime: '22:45', + enabled: true, + }; + + const result = mapper.toUpdateRequest(formValue); + + expect(result).toEqual({ + name: 'Soglia temperatura', + priority: AlarmPriority.ORANGE, + thresholdOperator: '<', + thresholdValue: '12', + armingTime: '07:15', + dearmingTime: '22:45', + isArmed: true, + }); + }); + + it('toUpdateRequest serializza operatore >= senza degradarlo', () => { + const formValue: AlarmConfigFormValue = { + name: 'Soglia minima', + plantId: 'plant-1', + deviceId: 'dev-77', + datapointId: 'dp-2', + priority: AlarmPriority.GREEN, + thresholdOperator: ThresholdOperator.GREATER_THAN_OR_EQUAL, + thresholdValue: '18', + armingTime: '06:00', + dearmingTime: '22:00', + enabled: true, + }; + + const result = mapper.toUpdateRequest(formValue); + expect(result.thresholdOperator).toBe('>='); + }); + + it('toCreateRequest serializza operatore <= senza degradarlo', () => { + const formValue: AlarmConfigFormValue = { + name: 'Soglia massima', + plantId: 'plant-1', + deviceId: 'dev-88', + datapointId: 'dp-3', + priority: AlarmPriority.ORANGE, + thresholdOperator: ThresholdOperator.LESS_THAN_OR_EQUAL, + thresholdValue: '26', + armingTime: '06:00', + dearmingTime: '22:00', + enabled: true, + }; + + const result = mapper.toCreateRequest(formValue); + expect(result.thresholdOperator).toBe('<='); + }); + + it('toCreateRequest normalizza soglia booleana in on/off', () => { + const onFormValue: AlarmConfigFormValue = { + name: 'Allarme acceso', + plantId: 'plant-1', + deviceId: 'dev-10', + datapointId: 'dp-4', + priority: AlarmPriority.RED, + thresholdOperator: ThresholdOperator.EQUAL_TO, + thresholdValue: 'ON', + armingTime: '00:00', + dearmingTime: '23:59', + enabled: true, + }; + + const offFormValue: AlarmConfigFormValue = { + ...onFormValue, + name: 'Allarme spento', + thresholdValue: 'OFF', + }; + + expect(mapper.toCreateRequest(onFormValue)).toMatchObject({ + plantId: 'plant-1', + datapointId: 'dp-4', + thresholdOperator: '=', + thresholdValue: 'on', + }); + expect(mapper.toCreateRequest(offFormValue)).toMatchObject({ + plantId: 'plant-1', + datapointId: 'dp-4', + thresholdOperator: '=', + thresholdValue: 'off', + }); + }); + + it('toCreateRequest trimma i campi stringa principali', () => { + const formValue: AlarmConfigFormValue = { + name: ' Allarme trim ', + plantId: 'plant-1', + deviceId: ' dev-42 ', + datapointId: 'dp-5', + priority: AlarmPriority.GREEN, + thresholdOperator: ThresholdOperator.EQUAL_TO, + thresholdValue: ' ON ', + armingTime: '06:00', + dearmingTime: '23:00', + enabled: true, + }; + + const result = mapper.toCreateRequest(formValue); + + expect(result).toMatchObject({ + name: 'Allarme trim', + deviceId: 'dev-42', + plantId: 'plant-1', + datapointId: 'dp-5', + thresholdOperator: '=', + thresholdValue: 'on', + }); + }); + + it('toCreateRequest fallisce se thresholdValue e vuoto dopo trim', () => { + const invalidFormValue: AlarmConfigFormValue = { + name: 'Allarme invalido', + plantId: 'plant-1', + deviceId: 'dev-42', + datapointId: 'dp-6', + priority: AlarmPriority.GREEN, + thresholdOperator: ThresholdOperator.EQUAL_TO, + thresholdValue: ' ', + armingTime: '06:00', + dearmingTime: '23:00', + enabled: true, + }; + + expect(() => mapper.toCreateRequest(invalidFormValue)).toThrow('Campo obbligatorio mancante: thresholdValue'); + }); + + it('toCreateRequest fallisce se thresholdOperator e null', () => { + const invalidFormValue: AlarmConfigFormValue = { + name: 'Allarme invalido', + plantId: 'plant-1', + deviceId: 'dev-42', + datapointId: 'dp-7', + priority: AlarmPriority.GREEN, + thresholdOperator: null, + thresholdValue: '12', + armingTime: '06:00', + dearmingTime: '23:00', + enabled: true, + }; + + expect(() => mapper.toCreateRequest(invalidFormValue)).toThrow('Campo obbligatorio mancante: thresholdOperator'); + }); + + it('toToggleRequest include solo i campi previsti dal contratto update', () => { + const rule: AlarmRule = { + id: 'ALM001', + name: 'Allarme umidita', + deviceId: 'DEV002', + datapointId: 'dp-8', + priority: AlarmPriority.GREEN, + thresholdOperator: '>=', + thresholdValue: '60', + armingTime: '08:00:00', + dearmingTime: '18:30:00', + isArmed: true, + position: 'Appartamento 1 - Camera - Sensore umidita', + }; + + const result = mapper.toToggleRequest(rule, false); + + expect(result).toEqual({ + name: 'Allarme umidita', + priority: AlarmPriority.GREEN, + thresholdOperator: '>=', + thresholdValue: '60', + armingTime: '08:00', + dearmingTime: '18:30', + isArmed: false, + }); + }); + + it('toToggleRequest fallisce se name e vuoto', () => { + const invalidRule: AlarmRule = { + id: 'ALM002', + name: ' ', + deviceId: 'DEV003', + datapointId: 'dp-9', + priority: AlarmPriority.RED, + thresholdOperator: '=', + thresholdValue: '45', + armingTime: '00:00:00', + dearmingTime: '23:59:00', + isArmed: true, + position: 'Appartamento 2 - Soggiorno - Sensore temperatura', + }; + + expect(() => mapper.toToggleRequest(invalidRule, true)).toThrow('Campo obbligatorio mancante: name'); + }); + + it('toToggleRequest normalizza operatori con padding dal backend', () => { + const rule: AlarmRule = { + id: 'ALM003', + name: 'Allarme temperatura', + deviceId: 'DEV004', + datapointId: 'dp-10', + priority: AlarmPriority.ORANGE, + thresholdOperator: '> ', + thresholdValue: '27', + armingTime: '05:00:00', + dearmingTime: '23:00:00', + isArmed: true, + position: 'Appartamento 3 - Ingresso - Sensore temperatura', + }; + + const result = mapper.toToggleRequest(rule, false); + + expect(result.thresholdOperator).toBe('>'); + }); +}); diff --git a/frontend/test/integration/app/features/alarm-configuration/services/alarm-config-form-state.service.integration.spec.ts b/frontend/test/integration/app/features/alarm-configuration/services/alarm-config-form-state.service.integration.spec.ts new file mode 100644 index 00000000..9bb84110 --- /dev/null +++ b/frontend/test/integration/app/features/alarm-configuration/services/alarm-config-form-state.service.integration.spec.ts @@ -0,0 +1,133 @@ +import { TestBed } from '@angular/core/testing'; +import { firstValueFrom, of, throwError } from 'rxjs'; +import { beforeEach, describe, expect, it, vi } from 'vitest'; +import { WardApiService } from 'src/app/features/ward-management/services/ward-api.service'; +import { ApartmentApiService } from 'src/app/features/apartment-monitor/services/apartment-api.service'; +import { DeviceDatapointExtractionService, DeviceDatapointOption } from 'src/app/features/alarm-configuration/services/device-datapoint-extraction.service'; +import { AlarmConfigFormStateService } from 'src/app/features/alarm-configuration/services/alarm-config-form-state.service'; + +describe('AlarmConfigFormStateService', () => { + let service: AlarmConfigFormStateService; + + const wardApiStub = { + getAvailablePlants: vi.fn(), + getWards: vi.fn(), + getPlantsByWardId: vi.fn(), + }; + + const apartmentApiStub = { + loadApartmentViewForPlantId: vi.fn(), + getAllPlants: vi.fn(), + }; + + const datapointExtractionStub = { + extractDeviceOptions: vi.fn(), + findDatapointByDeviceAndDatapointId: vi.fn(), + }; + + beforeEach(() => { + vi.clearAllMocks(); + wardApiStub.getAvailablePlants.mockReturnValue(of([])); + wardApiStub.getWards.mockReturnValue(of([])); + wardApiStub.getPlantsByWardId.mockReturnValue(of([])); + apartmentApiStub.loadApartmentViewForPlantId.mockReturnValue(of({ id: 'plant-1', rooms: [] })); + apartmentApiStub.getAllPlants.mockReturnValue(of([])); + datapointExtractionStub.extractDeviceOptions.mockReturnValue([]); + datapointExtractionStub.findDatapointByDeviceAndDatapointId.mockReturnValue(null); + + TestBed.configureTestingModule({ + providers: [ + AlarmConfigFormStateService, + { provide: WardApiService, useValue: wardApiStub }, + { provide: ApartmentApiService, useValue: apartmentApiStub }, + { provide: DeviceDatapointExtractionService, useValue: datapointExtractionStub }, + ], + }); + + service = TestBed.inject(AlarmConfigFormStateService); + }); + + it('ensurePlantsLoaded in create mode carica e deduplica gli impianti', async () => { + wardApiStub.getAvailablePlants.mockReturnValueOnce( + of([ + { id: 'plant-1', name: 'Appartamento 1' }, + { id: 'plant-2', name: 'Appartamento 2' }, + ]), + ); + wardApiStub.getWards.mockReturnValueOnce(of([{ id: 10, name: 'Reparto A' }])); + wardApiStub.getPlantsByWardId.mockReturnValueOnce( + of([ + { id: 'plant-2', name: 'Appartamento 2' }, + { id: 'plant-3', name: 'Appartamento 3' }, + ]), + ); + + await firstValueFrom(service.ensurePlantsLoaded('create')); + + expect(service.plants().map((plant) => plant.id)).toEqual(['plant-1', 'plant-2', 'plant-3']); + expect(service.plantsLoadError()).toBeNull(); + }); + + it('ensurePlantsLoaded in edit mode non esegue chiamate', async () => { + await firstValueFrom(service.ensurePlantsLoaded('edit')); + + expect(wardApiStub.getAvailablePlants).not.toHaveBeenCalled(); + expect(wardApiStub.getWards).not.toHaveBeenCalled(); + }); + + it('loadDeviceOptionsByPlant ritorna opzioni dispositivi e pulisce loading state', async () => { + const options: DeviceDatapointOption[] = [ + { id: 'device-1', label: 'Ingresso - Sensore', datapoints: [] }, + ]; + datapointExtractionStub.extractDeviceOptions.mockReturnValueOnce(options); + + const result = await firstValueFrom(service.loadDeviceOptionsByPlant('plant-1')); + + expect(apartmentApiStub.loadApartmentViewForPlantId).toHaveBeenCalledWith('plant-1'); + expect(result).toEqual(options); + expect(service.isDevicesLoading()).toBe(false); + expect(service.devicesLoadError()).toBeNull(); + }); + + it('loadDeviceOptionsByPlant in errore restituisce lista vuota e imposta messaggio', async () => { + apartmentApiStub.loadApartmentViewForPlantId.mockReturnValueOnce(throwError(() => new Error('network'))); + + const result = await firstValueFrom(service.loadDeviceOptionsByPlant('plant-1')); + + expect(result).toEqual([]); + expect(service.isDevicesLoading()).toBe(false); + expect(service.devicesLoadError()).toBe('Errore durante il caricamento dei dispositivi.'); + }); + + it('resolveDatapointForEdit usa il catalogo piante e restituisce il datapoint trovato', async () => { + const expectedDatapoint = { + id: 'dp-1', + name: 'SFE_State_OnOff', + readable: true, + writable: false, + valueType: 'string', + enum: ['Off', 'On'], + sfeType: 'SFE_State_OnOff', + }; + apartmentApiStub.getAllPlants.mockReturnValueOnce(of([{ id: 'plant-1', name: 'Apt', rooms: [] }])); + datapointExtractionStub.findDatapointByDeviceAndDatapointId.mockReturnValueOnce(expectedDatapoint); + + const result = await firstValueFrom(service.resolveDatapointForEdit('device-1', 'dp-1')); + + expect(apartmentApiStub.getAllPlants).toHaveBeenCalledTimes(1); + expect(datapointExtractionStub.findDatapointByDeviceAndDatapointId).toHaveBeenCalledWith( + [{ id: 'plant-1', name: 'Apt', rooms: [] }], + 'device-1', + 'dp-1', + ); + expect(result).toEqual(expectedDatapoint); + }); + + it('resolveDatapointForEdit ritorna null se il catalogo piante fallisce', async () => { + apartmentApiStub.getAllPlants.mockReturnValueOnce(throwError(() => new Error('network'))); + + const result = await firstValueFrom(service.resolveDatapointForEdit('device-1', 'dp-1')); + + expect(result).toBeNull(); + }); +}); diff --git a/frontend/test/integration/app/features/alarm-configuration/services/alarm-config-state.service.integration.spec.ts b/frontend/test/integration/app/features/alarm-configuration/services/alarm-config-state.service.integration.spec.ts new file mode 100644 index 00000000..81f445e7 --- /dev/null +++ b/frontend/test/integration/app/features/alarm-configuration/services/alarm-config-state.service.integration.spec.ts @@ -0,0 +1,454 @@ +import { TestBed } from '@angular/core/testing'; +import { firstValueFrom, of, throwError } from 'rxjs'; +import { beforeEach, describe, expect, it, vi } from 'vitest'; +import { AlarmPriority } from 'src/app/core/alarm/models/alarm-priority.enum'; +import type { AlarmRule } from 'src/app/core/alarm/models/alarm-rule.model'; +import { ThresholdOperator } from 'src/app/core/alarm/models/threshold-operator.enum'; +import { AlarmApiService } from 'src/app/core/alarm/services/alarm-api.service'; +import { AlarmManagementRefreshService } from 'src/app/core/alarm/services/alarm-management-refresh.service'; +import type { AlarmConfigFormValue } from 'src/app/features/alarm-configuration/models/alarm-config-form-value.model'; +import { AlarmConfigStateService } from 'src/app/features/alarm-configuration/services/alarm-config-state.service'; + +describe('AlarmConfigStateService', () => { + let service: AlarmConfigStateService; + + const apiStub = { + getAlarmRules: vi.fn(), + getAlarmRule: vi.fn(), + createAlarmRule: vi.fn(), + updateAlarmRule: vi.fn(), + deleteAlarmRule: vi.fn(), + }; + + const refreshServiceStub = { + requestRefresh: vi.fn(), + }; + + const alarmA: AlarmRule = { + id: 'alarm-1', + name: 'Temperatura stanza', + thresholdOperator: '>', + thresholdValue: '30', + priority: AlarmPriority.RED, + armingTime: '08:00:00', + dearmingTime: '20:00:00', + isArmed: true, + deviceId: 'dev-1', + position: 'Appartamento 1 - Soggiorno - Sensore temperatura', + }; + + const alarmB: AlarmRule = { + id: 'alarm-2', + name: 'Umidita critica', + thresholdOperator: '<', + thresholdValue: '10', + priority: AlarmPriority.ORANGE, + armingTime: '00:00:00', + dearmingTime: '23:59:00', + isArmed: false, + deviceId: 'dev-2', + position: 'Appartamento 2 - Camera - Sensore umidita', + }; + + const validForm: AlarmConfigFormValue = { + name: ' Nuovo allarme ', + plantId: 'plant-1', + deviceId: 'dev-3', + datapointId: 'dp-3', + priority: AlarmPriority.GREEN, + thresholdOperator: ThresholdOperator.EQUAL_TO, + thresholdValue: '22', + armingTime: '09:00', + dearmingTime: '18:00', + enabled: true, + }; + + beforeEach(() => { + vi.clearAllMocks(); + apiStub.getAlarmRules.mockReturnValue(of([])); + + TestBed.configureTestingModule({ + providers: [ + AlarmConfigStateService, + { provide: AlarmApiService, useValue: apiStub }, + { provide: AlarmManagementRefreshService, useValue: refreshServiceStub }, + ], + }); + + service = TestBed.inject(AlarmConfigStateService); + }); + + it('inizializza stato con alarms vuoti e nessun errore', async () => { + expect(await firstValueFrom(service.alarms$)).toEqual([]); + expect(await firstValueFrom(service.error$)).toBeNull(); + }); + + it('loadAlarmRules aggiorna stato locale quando API risponde con successo', async () => { + apiStub.getAlarmRules.mockReturnValue(of([alarmA, alarmB])); + + service.loadAlarmRules(); + + const alarms = await firstValueFrom(service.alarms$); + expect(apiStub.getAlarmRules).toHaveBeenCalledTimes(1); + expect(alarms).toEqual([alarmA, alarmB]); + expect(alarms).toHaveLength(2); + expect(await firstValueFrom(service.error$)).toBeNull(); + }); + + it('loadAlarmRules espone messaggio errore e pulisce error precedente al retry', async () => { + apiStub.getAlarmRules.mockReturnValueOnce(throwError(() => new Error('network'))); + + service.loadAlarmRules(); + expect(await firstValueFrom(service.error$)).toBe('Errore durante il caricamento degli allarmi.'); + + apiStub.getAlarmRules.mockReturnValueOnce(of([alarmA])); + service.loadAlarmRules(); + + expect(await firstValueFrom(service.error$)).toBeNull(); + expect(await firstValueFrom(service.alarms$)).toEqual([alarmA]); + }); + + it('getAlarmRuleById inoltra il valore di API in caso di successo', () => { + apiStub.getAlarmRule.mockReturnValue(of(alarmA)); + + let result: AlarmRule | null = null; + service.getAlarmRuleById('alarm-1').subscribe((alarm) => { + result = alarm; + }); + + expect(apiStub.getAlarmRule).toHaveBeenCalledWith('alarm-1'); + expect(result).toEqual(alarmA); + }); + + it('getAlarmRuleById in errore imposta messaggio e completa senza emissioni', async () => { + apiStub.getAlarmRule.mockReturnValue(throwError(() => new Error('404'))); + + let emitted = false; + service.getAlarmRuleById('missing').subscribe(() => { + emitted = true; + }); + + expect(emitted).toBe(false); + expect(await firstValueFrom(service.error$)).toBe('Errore durante il recupero dell\'allarme.'); + }); + + it('createAlarmRule mappa il payload, chiama API e aggiunge il nuovo allarme allo stato', async () => { + apiStub.getAlarmRules.mockReturnValueOnce(of([alarmA])); + service.loadAlarmRules(); + + apiStub.getAlarmRules.mockReturnValueOnce(of([alarmA, alarmB])); + apiStub.createAlarmRule.mockReturnValue(of(alarmB)); + + let created: AlarmRule | null = null; + service.createAlarmRule(validForm).subscribe((alarm) => { + created = alarm; + }); + + expect(apiStub.createAlarmRule).toHaveBeenCalledWith({ + name: 'Nuovo allarme', + deviceId: 'dev-3', + datapointId: 'dp-3', + plantId: 'plant-1', + priority: AlarmPriority.GREEN, + thresholdOperator: '=', + thresholdValue: '22', + armingTime: '09:00', + dearmingTime: '18:00', + }); + expect(created).toEqual(alarmB); + expect(await firstValueFrom(service.alarms$)).toEqual([alarmA, alarmB]); + expect(refreshServiceStub.requestRefresh).toHaveBeenCalledTimes(1); + }); + + it('createAlarmRule con form invalido non chiama API e imposta errore di validazione', async () => { + const invalidForm: AlarmConfigFormValue = { + ...validForm, + name: ' ', + }; + + let emitted = false; + service.createAlarmRule(invalidForm).subscribe(() => { + emitted = true; + }); + + expect(emitted).toBe(false); + expect(apiStub.createAlarmRule).not.toHaveBeenCalled(); + expect(await firstValueFrom(service.error$)).toBe( + 'Dati del form non validi per la creazione dell\'allarme.' + ); + }); + + it('createAlarmRule in errore API imposta messaggio e non altera lo stato locale', async () => { + apiStub.getAlarmRules.mockReturnValue(of([alarmA])); + service.loadAlarmRules(); + + apiStub.createAlarmRule.mockReturnValue(throwError(() => new Error('create failed'))); + + let emitted = false; + service.createAlarmRule(validForm).subscribe(() => { + emitted = true; + }); + + expect(emitted).toBe(false); + expect(await firstValueFrom(service.error$)).toBe('Errore durante la creazione dell\'allarme.'); + expect(await firstValueFrom(service.alarms$)).toEqual([alarmA]); + expect(refreshServiceStub.requestRefresh).not.toHaveBeenCalled(); + }); + + it('createAlarmRule pulisce l errore precedente quando una creazione successiva va a buon fine', async () => { + const invalidForm: AlarmConfigFormValue = { + ...validForm, + name: ' ', + }; + + service.createAlarmRule(invalidForm).subscribe(); + expect(await firstValueFrom(service.error$)).toBe( + 'Dati del form non validi per la creazione dell\'allarme.' + ); + + apiStub.getAlarmRules.mockReturnValueOnce(of([alarmB])); + apiStub.createAlarmRule.mockReturnValueOnce(of(alarmB)); + service.createAlarmRule(validForm).subscribe(); + + expect(await firstValueFrom(service.error$)).toBeNull(); + expect(await firstValueFrom(service.alarms$)).toEqual([alarmB]); + }); + + it('updateAlarmRule mantiene il nome originale nel payload update e sostituisce l allarme nello stato', async () => { + apiStub.getAlarmRules.mockReturnValueOnce(of([alarmA, alarmB])); + service.loadAlarmRules(); + + const updatedAlarm: AlarmRule = { ...alarmA, name: 'Temperatura reparto', thresholdValue: '35' }; + apiStub.getAlarmRules.mockReturnValueOnce(of([updatedAlarm, alarmB])); + apiStub.updateAlarmRule.mockReturnValue(of(updatedAlarm)); + + service.updateAlarmRule('alarm-1', validForm).subscribe(); + + expect(apiStub.updateAlarmRule).toHaveBeenCalledWith('alarm-1', { + name: 'Temperatura stanza', + priority: AlarmPriority.GREEN, + thresholdOperator: '=', + thresholdValue: '22', + armingTime: '09:00', + dearmingTime: '18:00', + isArmed: true, + }); + + expect(await firstValueFrom(service.alarms$)).toEqual([updatedAlarm, alarmB]); + expect(refreshServiceStub.requestRefresh).toHaveBeenCalledTimes(1); + }); + + it('updateAlarmRule con form invalido non chiama API e imposta errore', async () => { + const invalidForm: AlarmConfigFormValue = { + ...validForm, + thresholdValue: '', + }; + + let emitted = false; + service.updateAlarmRule('alarm-1', invalidForm).subscribe(() => { + emitted = true; + }); + + expect(emitted).toBe(false); + expect(apiStub.updateAlarmRule).not.toHaveBeenCalled(); + expect(await firstValueFrom(service.error$)).toBe( + 'Dati del form non validi per l\'aggiornamento dell\'allarme.' + ); + }); + + it('updateAlarmRule in errore API imposta messaggio e mantiene lo stato invariato', async () => { + apiStub.getAlarmRules.mockReturnValueOnce(of([alarmA, alarmB])); + service.loadAlarmRules(); + + apiStub.updateAlarmRule.mockReturnValue(throwError(() => new Error('update failed'))); + + let emitted = false; + service.updateAlarmRule('alarm-1', validForm).subscribe(() => { + emitted = true; + }); + + expect(emitted).toBe(false); + expect(await firstValueFrom(service.error$)).toBe('Errore durante l\'aggiornamento dell\'allarme.'); + expect(await firstValueFrom(service.alarms$)).toEqual([alarmA, alarmB]); + expect(refreshServiceStub.requestRefresh).not.toHaveBeenCalled(); + }); + + it('updateAlarmRule senza allarme locale usa il nome del form nel payload', async () => { + const updatedAlarm: AlarmRule = { + ...alarmA, + id: 'missing-id', + name: 'Nome dal form', + deviceId: 'dev-10', + thresholdValue: '44', + }; + apiStub.updateAlarmRule.mockReturnValueOnce(of(updatedAlarm)); + + service + .updateAlarmRule('missing-id', { + ...validForm, + name: ' Nome dal form ', + deviceId: ' dev-10 ', + thresholdOperator: ThresholdOperator.GREATER_THAN, + thresholdValue: '44', + }) + .subscribe(); + + expect(apiStub.updateAlarmRule).toHaveBeenCalledWith('missing-id', { + name: 'Nome dal form', + priority: AlarmPriority.GREEN, + thresholdOperator: '>', + thresholdValue: '44', + armingTime: '09:00', + dearmingTime: '18:00', + isArmed: true, + }); + }); + + it('updateAlarmRule sostituisce la riga locale anche se il backend ritorna un nuovo id', async () => { + apiStub.getAlarmRules.mockReturnValueOnce(of([alarmA, alarmB])); + service.loadAlarmRules(); + + const updatedWithNewId: AlarmRule = { + ...alarmA, + id: 'alarm-1-v2', + isArmed: false, + }; + apiStub.getAlarmRules.mockReturnValueOnce(of([updatedWithNewId, alarmB])); + apiStub.updateAlarmRule.mockReturnValue(of(updatedWithNewId)); + + service.updateAlarmRule('alarm-1', validForm).subscribe(); + + const alarms = await firstValueFrom(service.alarms$); + expect(alarms).toEqual([updatedWithNewId, alarmB]); + expect(alarms.some((alarm) => alarm.id === 'alarm-1')).toBe(false); + expect(alarms.some((alarm) => alarm.id === 'alarm-1-v2')).toBe(true); + expect(refreshServiceStub.requestRefresh).toHaveBeenCalledTimes(1); + }); + + it('toggleEnabled aggiorna enabled costruendo payload dai dati locali', async () => { + apiStub.getAlarmRules.mockReturnValueOnce(of([alarmA])); + service.loadAlarmRules(); + + const toggledAlarm: AlarmRule = { ...alarmA, isArmed: false }; + apiStub.getAlarmRules.mockReturnValueOnce(of([toggledAlarm])); + apiStub.updateAlarmRule.mockReturnValue(of(toggledAlarm)); + + service.toggleEnabled('alarm-1', false).subscribe(); + + expect(apiStub.updateAlarmRule).toHaveBeenCalledWith('alarm-1', { + name: alarmA.name, + datapointId: alarmA.datapointId, + priority: alarmA.priority, + thresholdOperator: alarmA.thresholdOperator, + thresholdValue: alarmA.thresholdValue, + armingTime: '08:00', + dearmingTime: '20:00', + isArmed: false, + }); + + expect(await firstValueFrom(service.alarms$)).toEqual([toggledAlarm]); + expect(refreshServiceStub.requestRefresh).toHaveBeenCalledTimes(1); + }); + + it('toggleEnabled su allarme assente non chiama API e imposta errore', async () => { + apiStub.getAlarmRules.mockReturnValueOnce(of([alarmA])); + service.loadAlarmRules(); + + let emitted = false; + service.toggleEnabled('missing-id', true).subscribe(() => { + emitted = true; + }); + + expect(emitted).toBe(false); + expect(apiStub.updateAlarmRule).not.toHaveBeenCalled(); + expect(await firstValueFrom(service.error$)).toBe('Allarme non trovato nello stato locale.'); + expect(refreshServiceStub.requestRefresh).not.toHaveBeenCalled(); + }); + + it('toggleEnabled in errore API imposta messaggio e mantiene lo stato invariato', async () => { + apiStub.getAlarmRules.mockReturnValueOnce(of([alarmA])); + service.loadAlarmRules(); + + apiStub.updateAlarmRule.mockReturnValue(throwError(() => new Error('toggle failed'))); + + let emitted = false; + service.toggleEnabled('alarm-1', false).subscribe(() => { + emitted = true; + }); + + expect(emitted).toBe(false); + expect(await firstValueFrom(service.error$)).toBe('Errore durante la modifica dello stato dell\'allarme.'); + expect(await firstValueFrom(service.alarms$)).toEqual([alarmA]); + expect(refreshServiceStub.requestRefresh).not.toHaveBeenCalled(); + }); + + it('toggleEnabled aggiorna subito lo stato locale anche se il backend ritorna un nuovo id', async () => { + apiStub.getAlarmRules.mockReturnValueOnce(of([alarmA, alarmB])); + service.loadAlarmRules(); + + const toggledWithNewId: AlarmRule = { + ...alarmA, + id: 'alarm-1-v2', + isArmed: false, + }; + apiStub.getAlarmRules.mockReturnValueOnce(of([toggledWithNewId, alarmB])); + apiStub.updateAlarmRule.mockReturnValue(of(toggledWithNewId)); + + service.toggleEnabled('alarm-1', false).subscribe(); + + const alarms = await firstValueFrom(service.alarms$); + expect(alarms).toEqual([toggledWithNewId, alarmB]); + expect(alarms.some((alarm) => alarm.id === 'alarm-1')).toBe(false); + expect(alarms.some((alarm) => alarm.id === 'alarm-1-v2')).toBe(true); + }); + + it('deleteAlarmRule rimuove l allarme locale quando API conferma', async () => { + apiStub.getAlarmRules.mockReturnValue(of([alarmA, alarmB])); + service.loadAlarmRules(); + + apiStub.deleteAlarmRule.mockReturnValue(of(void 0)); + + let emitted = false; + service.deleteAlarmRule('alarm-1').subscribe(() => { + emitted = true; + }); + + expect(emitted).toBe(true); + expect(apiStub.deleteAlarmRule).toHaveBeenCalledWith('alarm-1'); + expect(await firstValueFrom(service.alarms$)).toEqual([alarmB]); + expect(refreshServiceStub.requestRefresh).toHaveBeenCalledTimes(1); + }); + + it('deleteAlarmRule in errore API imposta messaggio e mantiene lo stato invariato', async () => { + apiStub.getAlarmRules.mockReturnValue(of([alarmA, alarmB])); + service.loadAlarmRules(); + + apiStub.deleteAlarmRule.mockReturnValue(throwError(() => new Error('delete failed'))); + + let emitted = false; + service.deleteAlarmRule('alarm-1').subscribe(() => { + emitted = true; + }); + + expect(emitted).toBe(false); + expect(await firstValueFrom(service.error$)).toBe('Errore durante l\'eliminazione dell\'allarme.'); + expect(await firstValueFrom(service.alarms$)).toEqual([alarmA, alarmB]); + expect(refreshServiceStub.requestRefresh).not.toHaveBeenCalled(); + }); + + it('deleteAlarmRule pulisce errore precedente quando un delete successivo riesce', async () => { + apiStub.getAlarmRules.mockReturnValue(of([alarmA, alarmB])); + service.loadAlarmRules(); + + apiStub.deleteAlarmRule.mockReturnValueOnce(throwError(() => new Error('delete failed'))); + service.deleteAlarmRule('alarm-1').subscribe(); + expect(await firstValueFrom(service.error$)).toBe('Errore durante l\'eliminazione dell\'allarme.'); + + apiStub.deleteAlarmRule.mockReturnValueOnce(of(void 0)); + service.deleteAlarmRule('alarm-1').subscribe(); + + expect(await firstValueFrom(service.error$)).toBeNull(); + expect(await firstValueFrom(service.alarms$)).toEqual([alarmB]); + expect(refreshServiceStub.requestRefresh).toHaveBeenCalledTimes(1); + }); +}); diff --git a/frontend/test/integration/app/features/alarm-configuration/services/device-datapoint-extraction.service.integration.spec.ts b/frontend/test/integration/app/features/alarm-configuration/services/device-datapoint-extraction.service.integration.spec.ts new file mode 100644 index 00000000..f345df51 --- /dev/null +++ b/frontend/test/integration/app/features/alarm-configuration/services/device-datapoint-extraction.service.integration.spec.ts @@ -0,0 +1,158 @@ +import { TestBed } from '@angular/core/testing'; +import { beforeEach, describe, expect, it } from 'vitest'; +import { ThresholdOperator } from 'src/app/core/alarm/models/threshold-operator.enum'; +import { DeviceType } from 'src/app/features/device-interaction/models/device-type.enum'; +import type { Apartment } from 'src/app/features/apartment-monitor/models/apartment.model'; +import type { Datapoint } from 'src/app/features/apartment-monitor/models/datapoint.model'; +import type { PlantDto } from 'src/app/features/apartment-monitor/models/plant-response.model'; +import { DeviceDatapointExtractionService } from 'src/app/features/alarm-configuration/services/device-datapoint-extraction.service'; + +describe('DeviceDatapointExtractionService', () => { + let service: DeviceDatapointExtractionService; + + const enumDatapoint: Datapoint = { + id: 'dp-1', + name: 'SFE_State_OnOff', + readable: true, + writable: false, + valueType: 'string', + enum: ['Off', 'On', 'Off'], + sfeType: 'SFE_State_OnOff', + }; + + const numericDatapoint: Datapoint = { + id: 'dp-2', + name: 'SFE_State_Temperature', + readable: true, + writable: false, + valueType: 'string', + enum: [], + sfeType: 'SFE_State_Temperature', + }; + + const apartment: Apartment = { + id: 'plant-1', + name: 'Appartamento demo', + isEnabled: true, + rooms: [ + { + id: 'room-1', + name: 'Soggiorno', + hasActiveAlarm: false, + devices: [ + { + id: 'dev-1', + name: 'Sensore UWB', + type: DeviceType.PRESENCE_SENSOR, + status: 'ONLINE', + actions: [], + datapoints: [ + enumDatapoint, + { + ...enumDatapoint, + id: 'dp-3', + name: 'SFE_Cmd_OnOff', + readable: false, + writable: true, + }, + numericDatapoint, + ], + }, + ], + }, + ], + }; + + const plantCatalog: PlantDto[] = [ + { + id: 'plant-1', + name: 'Appartamento demo', + rooms: [ + { + id: 'room-1', + name: 'Soggiorno', + devices: [ + { + id: 'dev-1', + name: 'Sensore UWB', + datapoints: [ + { + id: 'dp-lookup', + name: 'SFE_State_OnOff', + readable: true, + writable: false, + valueType: 'string', + enum: ['Off', 'On', 'On'], + sfeType: 'SFE_State_OnOff', + }, + ], + }, + ], + }, + ], + }, + ]; + + beforeEach(() => { + TestBed.configureTestingModule({ providers: [DeviceDatapointExtractionService] }); + service = TestBed.inject(DeviceDatapointExtractionService); + }); + + it('extractDeviceOptions crea label stanza-dispositivo e normalizza enum duplicati', () => { + const options = service.extractDeviceOptions(apartment); + + expect(options).toHaveLength(1); + expect(options[0].id).toBe('dev-1'); + expect(options[0].label).toBe('Soggiorno - Sensore UWB'); + expect(options[0].datapoints[0].enum).toEqual(['Off', 'On']); + }); + + it('findReadableDatapoints ritorna solo datapoint leggibili', () => { + const options = service.extractDeviceOptions(apartment); + + const datapoints = service.findReadableDatapoints('dev-1', options); + + expect(datapoints.map((datapoint) => datapoint.id)).toEqual(['dp-1', 'dp-2']); + expect(datapoints.every((datapoint) => datapoint.readable)).toBe(true); + }); + + it('findReadableDatapoints ritorna lista vuota se il device non esiste', () => { + const options = service.extractDeviceOptions(apartment); + + const datapoints = service.findReadableDatapoints('missing-device', options); + + expect(datapoints).toEqual([]); + }); + + it('getAllowedOperators limita a uguale quando il datapoint ha enum', () => { + expect(service.getAllowedOperators(enumDatapoint)).toEqual([ThresholdOperator.EQUAL_TO]); + expect(service.getAllowedOperators(numericDatapoint)).toEqual([ + ThresholdOperator.GREATER_THAN, + ThresholdOperator.GREATER_THAN_OR_EQUAL, + ThresholdOperator.LESS_THAN, + ThresholdOperator.LESS_THAN_OR_EQUAL, + ThresholdOperator.EQUAL_TO, + ]); + }); + + it('isThresholdValueValid valida enum case-insensitive e soglie numeriche', () => { + expect(service.isThresholdValueValid(enumDatapoint, 'on')).toBe(true); + expect(service.isThresholdValueValid(enumDatapoint, 'Unknown')).toBe(false); + expect(service.isThresholdValueValid(numericDatapoint, '10.5')).toBe(true); + expect(service.isThresholdValueValid(numericDatapoint, 'abc')).toBe(false); + }); + + it('findDatapointByDeviceAndDatapointId trova e normalizza il datapoint dal catalogo plant', () => { + const datapoint = service.findDatapointByDeviceAndDatapointId(plantCatalog, 'dev-1', 'dp-lookup'); + + expect(datapoint).not.toBeNull(); + expect(datapoint?.id).toBe('dp-lookup'); + expect(datapoint?.enum).toEqual(['Off', 'On']); + }); + + it('findDatapointByDeviceAndDatapointId ritorna null se non trova corrispondenze', () => { + const datapoint = service.findDatapointByDeviceAndDatapointId(plantCatalog, 'dev-missing', 'dp-lookup'); + + expect(datapoint).toBeNull(); + }); +}); diff --git a/frontend/test/integration/app/features/alarm-history/components/alarm-history-page.integration.spec.ts b/frontend/test/integration/app/features/alarm-history/components/alarm-history-page.integration.spec.ts new file mode 100644 index 00000000..f2ddf61f --- /dev/null +++ b/frontend/test/integration/app/features/alarm-history/components/alarm-history-page.integration.spec.ts @@ -0,0 +1,101 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { BehaviorSubject } from 'rxjs'; +import { beforeEach, describe, expect, it, vi } from 'vitest'; +import { AlarmPriority } from 'src/app/core/alarm/models/alarm-priority.enum'; +import type { ActiveAlarm } from 'src/app/core/alarm/models/active-alarm.model'; +import type { AlarmListVm } from 'src/app/features/alarm-history/models/alarm-list-vm.model'; +import { AlarmHistoryService } from 'src/app/features/alarm-history/services/alarm-history.service'; +import { AlarmHistoryPageComponent } from 'src/app/features/alarm-history/components/alarm-history-page.component'; + +describe('AlarmHistory feature integration', () => { + let fixture: ComponentFixture; + let component: AlarmHistoryPageComponent; + let vmSubject: BehaviorSubject; + + const alarmA: ActiveAlarm = { + id: 'a-1', + alarmRuleId: 'rule-1', + alarmName: 'Caduta in bagno', + priority: AlarmPriority.RED, + activationTime: '2026-04-09T10:00:00.000Z', + resolutionTime: '2026-04-09T11:00:00.000Z', + position: 'Bagno', + userId: 12, + userUsername: 'oss_a', + deviceId: 'device-1', + }; + + const alarmB: ActiveAlarm = { + id: 'a-2', + alarmRuleId: 'rule-2', + alarmName: 'Allarme porta', + priority: AlarmPriority.ORANGE, + activationTime: '2026-04-09T12:00:00.000Z', + resolutionTime: '2026-04-09T12:10:00.000Z', + position: 'Ingresso', + userId: null, + userUsername: null, + }; + + const alarmHistoryServiceStub = { + vm$: undefined as unknown, + initialize: vi.fn(), + nextPage: vi.fn(), + previousPage: vi.fn(), + }; + + beforeEach(async () => { + vi.clearAllMocks(); + + vmSubject = new BehaviorSubject({ + alarms: [], + currentPage: 1, + pageLimit: 10, + pageOffset: 0, + canGoPrevious: false, + canGoNext: false, + }); + alarmHistoryServiceStub.vm$ = vmSubject.asObservable(); + + await TestBed.configureTestingModule({ + imports: [AlarmHistoryPageComponent], + providers: [{ provide: AlarmHistoryService, useValue: alarmHistoryServiceStub }], + }).compileComponents(); + + fixture = TestBed.createComponent(AlarmHistoryPageComponent); + component = fixture.componentInstance; + }); + + it('NO-RF-TAG inizializza pagina e service', () => { + fixture.detectChanges(); + + expect(component).toBeTruthy(); + expect(alarmHistoryServiceStub.initialize).toHaveBeenCalledTimes(1); + }); + + it('NO-RF-TAG ordina righe per chiusura desc e applica fallback handler', () => { + vmSubject.next({ + alarms: [alarmB, alarmA], + currentPage: 2, + pageLimit: 10, + pageOffset: 10, + canGoPrevious: true, + canGoNext: false, + }); + + fixture.detectChanges(); + const rows = component.rows(); + + expect(rows[0].id).toBe('a-2'); + expect(rows[0].handlerUsername).toBe('sconosciuto'); + expect(component.currentPage()).toBe(2); + }); + + it('NO-RF-TAG delega paginazione next/previous al service', () => { + component.onNextPage(); + component.onPreviousPage(); + + expect(alarmHistoryServiceStub.nextPage).toHaveBeenCalledTimes(1); + expect(alarmHistoryServiceStub.previousPage).toHaveBeenCalledTimes(1); + }); +}); diff --git a/frontend/test/integration/app/features/alarm-history/services/alarm-history.service.integration.spec.ts b/frontend/test/integration/app/features/alarm-history/services/alarm-history.service.integration.spec.ts new file mode 100644 index 00000000..a7715356 --- /dev/null +++ b/frontend/test/integration/app/features/alarm-history/services/alarm-history.service.integration.spec.ts @@ -0,0 +1,238 @@ +import { TestBed } from '@angular/core/testing'; +import { BehaviorSubject, firstValueFrom, of, take, throwError } from 'rxjs'; +import { beforeEach, describe, expect, it, vi } from 'vitest'; +import type { ActiveAlarm } from 'src/app/core/alarm/models/active-alarm.model'; +import { AlarmPriority } from 'src/app/core/alarm/models/alarm-priority.enum'; +import { UserRole } from 'src/app/core/models/user-role.enum'; +import { InternalAuthService } from 'src/app/core/services/internal-auth.service'; +import type { UserSession } from 'src/app/features/user-auth/models/user-session.model'; +import { AlarmApiService } from 'src/app/core/alarm/services/alarm-api.service'; +import { ApiErrorDisplayService } from 'src/app/core/services/api-error-display.service'; +import { AlarmHistoryService } from 'src/app/features/alarm-history/services/alarm-history.service'; + +describe('AlarmHistoryService', () => { + let service: AlarmHistoryService; + let sessionSubject: BehaviorSubject; + + const alarmApiStub = { + getResolvedAlarms: vi.fn(), + }; + + const authServiceStub = { + getCurrentUser$: vi.fn(), + }; + + const apiErrorDisplayStub = { + toMessage: vi.fn((err: unknown, options: { fallbackMessage: string }) => { + if (err instanceof Error && err.message.trim().length > 0) return err.message; + return options.fallbackMessage; + }), + }; + + const alarmA: ActiveAlarm = { + id: 'resolved-1', + alarmRuleId: 'rule-1', + alarmName: 'Antipanico', + priority: AlarmPriority.RED, + activationTime: '2026-03-24T10:00:00.000Z', + resolutionTime: '2026-03-24T11:00:00.000Z', + position: 'Camera 201', + userId: 99, + userUsername: 'operator1', + }; + + const alarmB: ActiveAlarm = { + id: 'resolved-2', + alarmRuleId: 'rule-2', + alarmName: 'Porta aperta', + priority: AlarmPriority.ORANGE, + activationTime: '2026-03-24T10:01:00.000Z', + resolutionTime: '2026-03-24T11:01:00.000Z', + position: 'Corridoio Nord', + userId: 7, + userUsername: 'operator2', + }; + + beforeEach(() => { + vi.clearAllMocks(); + + sessionSubject = new BehaviorSubject({ + userId: '99', + username: 'admin', + role: UserRole.AMMINISTRATORE, + accessToken: 'token', + isFirstAccess: false, + }); + + authServiceStub.getCurrentUser$.mockReturnValue(sessionSubject.asObservable()); + alarmApiStub.getResolvedAlarms.mockReturnValue(of([])); + + TestBed.configureTestingModule({ + providers: [ + AlarmHistoryService, + { provide: AlarmApiService, useValue: alarmApiStub }, + { provide: InternalAuthService, useValue: authServiceStub }, + { provide: ApiErrorDisplayService, useValue: apiErrorDisplayStub }, + ], + }); + }); + + const createService = (): AlarmHistoryService => TestBed.inject(AlarmHistoryService); + + it('espone vm iniziale corretto senza chiamare API', async () => { + service = createService(); + const vm = await firstValueFrom(service.vm$.pipe(take(1))); + + expect(vm).toEqual({ + alarms: [], + currentPage: 1, + pageLimit: 6, + pageOffset: 0, + canGoPrevious: false, + canGoNext: false, + }); + + expect(alarmApiStub.getResolvedAlarms).not.toHaveBeenCalled(); + }); + + it('initialize carica la prima pagina con offset 0', () => { + alarmApiStub.getResolvedAlarms.mockReturnValue(of([alarmA, alarmB])); + + service = createService(); + service.initialize(); + + expect(alarmApiStub.getResolvedAlarms).toHaveBeenCalledWith(99, 7, 0); + }); + + it('initialize con lista vuota non imposta canGoNext', async () => { + alarmApiStub.getResolvedAlarms.mockReturnValue(of([])); + + service = createService(); + service.initialize(); + + const vm = await firstValueFrom(service.vm$.pipe(take(1))); + expect(vm.alarms.length).toBe(0); + expect(vm.canGoNext).toBeFalsy(); + }); + + it('initialize con pageLimit+1 elementi imposta canGoNext e fa lo slice', async () => { + const alarms = Array.from({ length: 7 }, (_, i) => ({ ...alarmA, id: `resolved-${i}` })); + alarmApiStub.getResolvedAlarms.mockReturnValue(of(alarms)); + + service = createService(); + service.initialize(); + + const vm = await firstValueFrom(service.vm$.pipe(take(1))); + expect(vm.canGoNext).toBeTruthy(); + expect(vm.alarms.length).toBe(6); + }); + + it('initialize con userId non numerico non chiama API', async () => { + sessionSubject.next({ + userId: 'abc', + username: 'admin', + role: UserRole.AMMINISTRATORE, + accessToken: 'token', + isFirstAccess: false, + }); + + service = createService(); + service.initialize(); + + expect(alarmApiStub.getResolvedAlarms).not.toHaveBeenCalled(); + }); + + it('initialize non propaga eccezioni al chiamante', () => { + alarmApiStub.getResolvedAlarms.mockReturnValue(throwError(() => new Error('errore rete'))); + + service = createService(); + + expect(() => service.initialize()).not.toThrow(); + }); + + it('nextPage avanza alla pagina successiva', async () => { + const firstPage = Array.from({ length: 7 }, (_, i) => ({ ...alarmA, id: `resolved-${i}` })); + const secondPage = [{ ...alarmB, id: 'resolved-10' }]; + + alarmApiStub.getResolvedAlarms + .mockReturnValueOnce(of(firstPage)) + .mockReturnValueOnce(of(secondPage)); + + service = createService(); + service.initialize(); + service.nextPage(); + + const vm = await firstValueFrom(service.vm$.pipe(take(1))); + expect(vm.currentPage).toBe(2); + expect(vm.pageOffset).toBe(6); + expect(vm.canGoPrevious).toBeTruthy(); + expect(vm.alarms.map((a) => a.id)).toEqual(['resolved-10']); + + expect(alarmApiStub.getResolvedAlarms).toHaveBeenNthCalledWith(1, 99, 7, 0); + expect(alarmApiStub.getResolvedAlarms).toHaveBeenNthCalledWith(2, 99, 7, 6); + }); + + it('nextPage non fa nulla se canGoNext è false', () => { + alarmApiStub.getResolvedAlarms.mockReturnValue(of([alarmA])); + + service = createService(); + service.initialize(); + service.nextPage(); + + expect(alarmApiStub.getResolvedAlarms).toHaveBeenCalledTimes(1); + }); + + it('pagina successiva con meno di pageLimit elementi imposta canGoNext a false', async () => { + const firstPage = Array.from({ length: 7 }, (_, i) => ({ ...alarmA, id: `resolved-${i}` })); + const secondPage = [{ ...alarmB, id: 'resolved-10' }, { ...alarmB, id: 'resolved-11' }]; + + alarmApiStub.getResolvedAlarms + .mockReturnValueOnce(of(firstPage)) + .mockReturnValueOnce(of(secondPage)); + + service = createService(); + service.initialize(); + service.nextPage(); + + const vm = await firstValueFrom(service.vm$.pipe(take(1))); + expect(vm.canGoNext).toBeFalsy(); + expect(vm.alarms.map((a) => a.id)).toEqual(['resolved-10', 'resolved-11']); + }); + + // --- previousPage --- + + it('previousPage torna alla pagina precedente', async () => { + const firstPage = Array.from({ length: 7 }, (_, i) => ({ ...alarmA, id: `resolved-${i}` })); + const secondPage = [{ ...alarmB, id: 'resolved-10' }]; + const firstPageAgain = Array.from({ length: 7 }, (_, i) => ({ ...alarmA, id: `resolved-${i}` })); + + alarmApiStub.getResolvedAlarms + .mockReturnValueOnce(of(firstPage)) + .mockReturnValueOnce(of(secondPage)) + .mockReturnValueOnce(of(firstPageAgain)); + + service = createService(); + service.initialize(); + service.nextPage(); + service.previousPage(); + + const vm = await firstValueFrom(service.vm$.pipe(take(1))); + expect(vm.currentPage).toBe(1); + expect(vm.pageOffset).toBe(0); + expect(vm.canGoPrevious).toBeFalsy(); + + expect(alarmApiStub.getResolvedAlarms).toHaveBeenNthCalledWith(1, 99, 7, 0); + expect(alarmApiStub.getResolvedAlarms).toHaveBeenNthCalledWith(2, 99, 7, 6); + expect(alarmApiStub.getResolvedAlarms).toHaveBeenNthCalledWith(3, 99, 7, 0); + }); + + it('previousPage non fa nulla se l\'offset è già a zero', () => { + alarmApiStub.getResolvedAlarms.mockReturnValue(of([alarmA])); + + service = createService(); + service.initialize(); + service.previousPage(); + + expect(alarmApiStub.getResolvedAlarms).toHaveBeenCalledTimes(1); + }); +}); \ No newline at end of file diff --git a/frontend/test/integration/app/features/alarm-management/components/alarm-page-management-component/alarm-page-management-component.deep.integration.spec.ts b/frontend/test/integration/app/features/alarm-management/components/alarm-page-management-component/alarm-page-management-component.deep.integration.spec.ts new file mode 100644 index 00000000..9b872c8b --- /dev/null +++ b/frontend/test/integration/app/features/alarm-management/components/alarm-page-management-component/alarm-page-management-component.deep.integration.spec.ts @@ -0,0 +1,392 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { BehaviorSubject, Subject } from 'rxjs'; +import { beforeEach, describe, expect, it, vi } from 'vitest'; +import type { ActiveAlarm } from 'src/app/core/alarm/models/active-alarm.model'; +import { AlarmPriority } from 'src/app/core/alarm/models/alarm-priority.enum'; +import { UserRole } from 'src/app/core/models/user-role.enum'; +import { InternalAuthService } from 'src/app/core/services/internal-auth.service'; +import { AlarmManagementRefreshService } from 'src/app/core/alarm/services/alarm-management-refresh.service'; +import { Pipe, type PipeTransform } from '@angular/core'; +import { ElapsedTimePipe } from 'src/app/shared/pipes/elapsed-time.pipe'; +import type { UserSession } from 'src/app/features/user-auth/models/user-session.model'; +import type { AlarmListVm } from 'src/app/features/alarm-management/models/alarm-list-vm.model'; +import { AlarmManagementService } from 'src/app/features/alarm-management/services/alarm-management.service'; +import { AlarmPageManagementComponent } from 'src/app/features/alarm-management/components/alarm-page-management-component/alarm-page-management-component'; + +@Pipe({ + name: 'elapsedTime', + standalone: true, +}) +class MockElapsedTimePipe implements PipeTransform { + transform(value: string): string { + return `mock-elapsed:${value}`; + } +} + +describe('AlarmPageManagementComponent', () => { + let component: AlarmPageManagementComponent; + let fixture: ComponentFixture; + let vmSubject: BehaviorSubject; + let userSessionSubject: BehaviorSubject; + let refreshRequestedSubject: Subject; + + const alarm1: ActiveAlarm = { + id: 'active-1', + alarmRuleId: 'rule-1', + deviceId: 'device-1', + alarmName: 'Antipanico', + priority: AlarmPriority.RED, + activationTime: '2026-03-24T10:00:00.000Z', + resolutionTime: null, + position: 'Camera 201', + userId: 1, + userUsername: 'oss_1', + }; + + const alarm2: ActiveAlarm = { + id: 'active-2', + alarmRuleId: 'rule-2', + deviceId: 'device-2', + alarmName: 'Porta aperta', + priority: AlarmPriority.ORANGE, + activationTime: '2026-03-24T10:01:00.000Z', + resolutionTime: null, + position: 'Corridoio Nord', + userId: 2, + userUsername: 'oss_2', + }; + + const managedAlarm: ActiveAlarm = { + ...alarm1, + resolutionTime: '2026-03-24T10:05:00.000Z', + userId: 99, + }; + + const alarmManagementStub = { + vm$: undefined as unknown, + initialize: vi.fn(), + resolveAlarm: vi.fn(), + nextPage: vi.fn(), + previousPage: vi.fn(), + }; + + const authServiceStub = { + getCurrentUser$: vi.fn(), + }; + + const refreshServiceStub = { + getRefreshRequested$: vi.fn(), + }; + + beforeEach(async () => { + vi.clearAllMocks(); + + vmSubject = new BehaviorSubject({ + alarms: [], + currentPage: 1, + pageLimit: 6, + pageOffset: 0, + canGoPrevious: false, + canGoNext: false, + isResolving: false, + resolvingId: null, + resolveError: null, + }); + + alarmManagementStub.vm$ = vmSubject.asObservable(); + refreshRequestedSubject = new Subject(); + refreshServiceStub.getRefreshRequested$.mockReturnValue(refreshRequestedSubject.asObservable()); + userSessionSubject = new BehaviorSubject({ + userId: '1', + username: 'admin', + role: UserRole.AMMINISTRATORE, + accessToken: 'token', + isFirstAccess: false, + }); + authServiceStub.getCurrentUser$.mockReturnValue(userSessionSubject.asObservable()); + + TestBed.overrideComponent(AlarmPageManagementComponent, { + remove: { imports: [ElapsedTimePipe] }, + add: { imports: [MockElapsedTimePipe] }, + }); + + await TestBed.configureTestingModule({ + imports: [AlarmPageManagementComponent], + providers: [ + { provide: AlarmManagementService, useValue: alarmManagementStub }, + { provide: InternalAuthService, useValue: authServiceStub }, + { provide: AlarmManagementRefreshService, useValue: refreshServiceStub }, + ], + }).compileComponents(); + + fixture = TestBed.createComponent(AlarmPageManagementComponent); + component = fixture.componentInstance; + }); + + it('should create', () => { + fixture.detectChanges(); + expect(component).toBeTruthy(); + }); + + it('ngOnInit inizializza la facade e mantiene il vm sincronizzato', () => { + expect(component.vm()).toEqual({ + alarms: [], + currentPage: 1, + pageLimit: 6, + pageOffset: 0, + canGoPrevious: false, + canGoNext: false, + isResolving: false, + resolvingId: null, + resolveError: null, + }); + + component.ngOnInit(); + + expect(alarmManagementStub.initialize).toHaveBeenCalledTimes(1); + expect(component.vm()?.alarms).toEqual([]); + }); + + it('onResolve delega a facade.resolveAlarm', () => { + component.onResolve('active-2'); + + expect(alarmManagementStub.resolveAlarm).toHaveBeenCalledWith('active-2'); + expect(alarmManagementStub.resolveAlarm).toHaveBeenCalledTimes(1); + }); + + it('renderizza stato lista vuota quando non ci sono allarmi', () => { + vmSubject.next({ + alarms: [], + currentPage: 1, + pageLimit: 6, + pageOffset: 0, + canGoPrevious: false, + canGoNext: false, + isResolving: false, + resolvingId: null, + resolveError: null, + }); + + fixture.detectChanges(); + const nativeElement = fixture.nativeElement as HTMLElement; + + expect(nativeElement.querySelector('.alarm-management__empty')?.textContent).toContain( + 'Nessun allarme attivo al momento.' + ); + expect(nativeElement.querySelectorAll('tbody tr').length).toBe(0); + }); + + it('renderizza errore e stato resolving quando presenti nel vm', () => { + vmSubject.next({ + alarms: [alarm1], + currentPage: 1, + pageLimit: 6, + pageOffset: 0, + canGoPrevious: false, + canGoNext: false, + isResolving: true, + resolvingId: alarm1.id, + resolveError: 'Errore durante la risoluzione', + }); + + fixture.detectChanges(); + const nativeElement = fixture.nativeElement as HTMLElement; + + expect(nativeElement.querySelector('.alarm-management__error')?.textContent).toContain( + 'Errore durante la risoluzione' + ); + expect(nativeElement.querySelector('.alarm-management__status')?.textContent).toContain( + 'Risoluzione allarme in corso...' + ); + }); + + it('renderizza tabella con una riga per ogni allarme', () => { + vmSubject.next({ + alarms: [alarm1, alarm2], + currentPage: 1, + pageLimit: 6, + pageOffset: 0, + canGoPrevious: false, + canGoNext: true, + isResolving: true, + resolvingId: alarm2.id, + resolveError: null, + }); + + fixture.detectChanges(); + + const nativeElement = fixture.nativeElement as HTMLElement; + const rows = nativeElement.querySelectorAll('tbody tr'); + const manageButtons = nativeElement.querySelectorAll('button[aria-label^="Gestisci allarme"]'); + + expect(rows.length).toBe(2); + expect(nativeElement.textContent).toContain('Priorità'); + expect(nativeElement.textContent).toContain('Corridoio Nord'); + expect(nativeElement.textContent).toContain('mock-elapsed:2026-03-24T10:00:00.000Z'); + expect(manageButtons.length).toBe(2); + expect((manageButtons.item(1) as HTMLButtonElement).disabled).toBe(true); + }); + + it('nasconde la colonna gestore per operatore sanitario', () => { + userSessionSubject.next({ + userId: '7', + username: 'oss', + role: UserRole.OPERATORE_SANITARIO, + accessToken: 'token', + isFirstAccess: false, + }); + vmSubject.next({ + alarms: [alarm1], + currentPage: 1, + pageLimit: 6, + pageOffset: 0, + canGoPrevious: false, + canGoNext: false, + isResolving: false, + resolvingId: null, + resolveError: null, + }); + + fixture.detectChanges(); + + const nativeElement = fixture.nativeElement as HTMLElement; + expect(nativeElement.textContent).not.toContain('Gestore'); + expect(nativeElement.textContent).not.toContain('oss_1'); + }); + + it('disabilita solo il bottone associato al resolvingId corrente', () => { + vmSubject.next({ + alarms: [alarm1, alarm2], + currentPage: 1, + pageLimit: 6, + pageOffset: 0, + canGoPrevious: false, + canGoNext: true, + isResolving: true, + resolvingId: alarm1.id, + resolveError: null, + }); + + fixture.detectChanges(); + + const firstButton = (fixture.nativeElement as HTMLElement).querySelector( + 'button[aria-label="Gestisci allarme Antipanico"]' + ) as HTMLButtonElement | null; + const secondButton = (fixture.nativeElement as HTMLElement).querySelector( + 'button[aria-label="Gestisci allarme Porta aperta"]' + ) as HTMLButtonElement | null; + + expect(firstButton?.disabled).toBe(true); + expect(secondButton?.disabled).toBe(false); + }); + + it('renderizza paginazione coerente con vm e delega i click ai metodi del service', () => { + vmSubject.next({ + alarms: [alarm1], + currentPage: 3, + pageLimit: 6, + pageOffset: 12, + canGoPrevious: true, + canGoNext: false, + isResolving: false, + resolvingId: null, + resolveError: null, + }); + + fixture.detectChanges(); + + const nativeElement = fixture.nativeElement as HTMLElement; + const previousButton = nativeElement.querySelector( + 'button[aria-label="Pagina precedente allarmi attivi"]' + ) as HTMLButtonElement | null; + const nextButton = nativeElement.querySelector( + 'button[aria-label="Pagina successiva allarmi attivi"]' + ) as HTMLButtonElement | null; + + expect(nativeElement.querySelector('.care-pagination__status')?.textContent).toContain('Pagina 3'); + expect(previousButton?.disabled).toBe(false); + expect(nextButton?.disabled).toBe(true); + + previousButton?.dispatchEvent(new MouseEvent('click')); + + expect(alarmManagementStub.previousPage).toHaveBeenCalledTimes(1); + expect(alarmManagementStub.nextPage).not.toHaveBeenCalled(); + }); + + it('click su GESTISCI propaga resolve verso facade', () => { + vmSubject.next({ + alarms: [alarm1], + currentPage: 1, + pageLimit: 6, + pageOffset: 0, + canGoPrevious: false, + canGoNext: false, + isResolving: false, + resolvingId: null, + resolveError: null, + }); + + fixture.detectChanges(); + const manageButton = (fixture.nativeElement as HTMLElement).querySelector( + 'button[aria-label="Gestisci allarme Antipanico"]' + ); + + manageButton?.dispatchEvent(new MouseEvent('click')); + + expect(alarmManagementStub.resolveAlarm).toHaveBeenCalledWith('active-1'); + expect(alarmManagementStub.resolveAlarm).toHaveBeenCalledTimes(1); + }); + + it('mantiene la riga visibile se l allarme e gia gestito e disabilita l azione', () => { + vmSubject.next({ + alarms: [managedAlarm], + currentPage: 2, + pageLimit: 6, + pageOffset: 6, + canGoPrevious: true, + canGoNext: false, + isResolving: false, + resolvingId: null, + resolveError: null, + }); + + fixture.detectChanges(); + const nativeElement = fixture.nativeElement as HTMLElement; + const rows = nativeElement.querySelectorAll('tbody tr'); + const managedButton = nativeElement.querySelector( + 'button[aria-label="Allarme gia gestito Antipanico"]' + ) as HTMLButtonElement | null; + + expect(rows.length).toBe(1); + expect(nativeElement.textContent).toContain('Non da gestire'); + expect(managedButton).not.toBeNull(); + expect(managedButton?.disabled).toBe(true); + expect(managedButton?.textContent).toContain('GESTITO'); + }); + + it('onNextPage e onPreviousPage delegano al service', () => { + component.onNextPage(); + component.onPreviousPage(); + + expect(alarmManagementStub.nextPage).toHaveBeenCalledTimes(1); + expect(alarmManagementStub.previousPage).toHaveBeenCalledTimes(1); + }); + + it('quando arriva refreshRequested reinizializza la pagina', () => { + fixture.detectChanges(); + expect(alarmManagementStub.initialize).toHaveBeenCalledTimes(1); + + refreshRequestedSubject.next(); + + expect(alarmManagementStub.initialize).toHaveBeenCalledTimes(2); + }); + + it('dopo destroy non risponde piu agli eventi di refresh', () => { + fixture.detectChanges(); + fixture.destroy(); + + refreshRequestedSubject.next(); + + expect(alarmManagementStub.initialize).toHaveBeenCalledTimes(1); + }); +}); diff --git a/frontend/src/app/features/alarm-management/components/alarm-page-management-component/alarm-page-management.integration.spec.ts b/frontend/test/integration/app/features/alarm-management/components/alarm-page-management-component/alarm-page-management.integration.spec.ts similarity index 84% rename from frontend/src/app/features/alarm-management/components/alarm-page-management-component/alarm-page-management.integration.spec.ts rename to frontend/test/integration/app/features/alarm-management/components/alarm-page-management-component/alarm-page-management.integration.spec.ts index 68d6cdc6..0be0ce68 100644 --- a/frontend/src/app/features/alarm-management/components/alarm-page-management-component/alarm-page-management.integration.spec.ts +++ b/frontend/test/integration/app/features/alarm-management/components/alarm-page-management-component/alarm-page-management.integration.spec.ts @@ -1,17 +1,17 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; import { BehaviorSubject, Subject } from 'rxjs'; import { beforeEach, describe, expect, it, vi } from 'vitest'; -import type { ActiveAlarm } from '../../../../core/alarm/models/active-alarm.model'; -import { AlarmPriority } from '../../../../core/alarm/models/alarm-priority.enum'; -import { UserRole } from '../../../../core/models/user-role.enum'; -import { InternalAuthService } from '../../../../core/services/internal-auth.service'; -import { AlarmManagementRefreshService } from '../../../../core/alarm/services/alarm-management-refresh.service'; +import type { ActiveAlarm } from 'src/app/core/alarm/models/active-alarm.model'; +import { AlarmPriority } from 'src/app/core/alarm/models/alarm-priority.enum'; +import { UserRole } from 'src/app/core/models/user-role.enum'; +import { InternalAuthService } from 'src/app/core/services/internal-auth.service'; +import { AlarmManagementRefreshService } from 'src/app/core/alarm/services/alarm-management-refresh.service'; import { Pipe, type PipeTransform } from '@angular/core'; -import { ElapsedTimePipe } from '../../../../shared/pipes/elapsed-time.pipe'; -import type { UserSession } from '../../../user-auth/models/user-session.model'; -import type { AlarmListVm } from '../../models/alarm-list-vm.model'; -import { AlarmManagementService } from '../../services/alarm-management.service'; -import { AlarmPageManagementComponent } from './alarm-page-management-component'; +import { ElapsedTimePipe } from 'src/app/shared/pipes/elapsed-time.pipe'; +import type { UserSession } from 'src/app/features/user-auth/models/user-session.model'; +import type { AlarmListVm } from 'src/app/features/alarm-management/models/alarm-list-vm.model'; +import { AlarmManagementService } from 'src/app/features/alarm-management/services/alarm-management.service'; +import { AlarmPageManagementComponent } from 'src/app/features/alarm-management/components/alarm-page-management-component/alarm-page-management-component'; @Pipe({ name: 'elapsedTime', @@ -115,7 +115,7 @@ describe('AlarmManagement feature integration', () => { fixture = TestBed.createComponent(AlarmPageManagementComponent); }); - it('gestisce il flusso completo: render lista, resolve event e aggiornamento vm', () => { + it('RF49-OBL gestisce il flusso completo: render lista, resolve event e aggiornamento vm', () => { fixture.detectChanges(); expect(alarmManagementStub.initialize).toHaveBeenCalledTimes(1); @@ -182,7 +182,7 @@ describe('AlarmManagement feature integration', () => { expect(nativeElement.textContent).toContain('Non da gestire'); }); - it('riesegue initialize quando arriva una richiesta di refresh esterna', () => { + it('RF60-OBL riesegue initialize quando arriva una richiesta di refresh esterna', () => { fixture.detectChanges(); expect(alarmManagementStub.initialize).toHaveBeenCalledTimes(1); diff --git a/frontend/test/integration/app/features/alarm-management/services/alarm-management.service.integration.spec.ts b/frontend/test/integration/app/features/alarm-management/services/alarm-management.service.integration.spec.ts new file mode 100644 index 00000000..1fb52736 --- /dev/null +++ b/frontend/test/integration/app/features/alarm-management/services/alarm-management.service.integration.spec.ts @@ -0,0 +1,518 @@ +import { TestBed } from '@angular/core/testing'; +import { BehaviorSubject, Subject, firstValueFrom, of, take, throwError } from 'rxjs'; +import { beforeEach, describe, expect, it, vi } from 'vitest'; +import type { ActiveAlarm } from 'src/app/core/alarm/models/active-alarm.model'; +import { AlarmPriority } from 'src/app/core/alarm/models/alarm-priority.enum'; +import { UserRole } from 'src/app/core/models/user-role.enum'; +import { InternalAuthService } from 'src/app/core/services/internal-auth.service'; +import type { UserSession } from 'src/app/features/user-auth/models/user-session.model'; +import { AlarmApiService } from 'src/app/core/alarm/services/alarm-api.service'; +import { AlarmStateService } from 'src/app/core/alarm/services/alarm-state.service'; +import { AlarmManagementService } from 'src/app/features/alarm-management/services/alarm-management.service'; + +describe('AlarmManagementService', () => { + let service: AlarmManagementService; + let activeAlarmsSubject: BehaviorSubject; + let sessionSubject: BehaviorSubject; + + const alarmStateStub = { + getActiveAlarms$: vi.fn(), + setActiveAlarms: vi.fn(), + onAlarmResolved: vi.fn(), + }; + + const alarmApiStub = { + getActiveAlarms: vi.fn(), + resolveAlarm: vi.fn(), + }; + + const authServiceStub = { + getCurrentUser$: vi.fn(), + }; + + const alarmA: ActiveAlarm = { + id: 'active-1', + alarmRuleId: 'rule-1', + alarmName: 'Antipanico', + priority: AlarmPriority.RED, + activationTime: '2026-03-24T10:00:00.000Z', + resolutionTime: null, + position: 'Camera 201', + userId: 99, + }; + + const alarmB: ActiveAlarm = { + id: 'active-2', + alarmRuleId: 'rule-2', + alarmName: 'Porta aperta', + priority: AlarmPriority.ORANGE, + activationTime: '2026-03-24T10:01:00.000Z', + resolutionTime: null, + position: 'Corridoio Nord', + userId: 7, + }; + + beforeEach(() => { + vi.clearAllMocks(); + + activeAlarmsSubject = new BehaviorSubject([]); + sessionSubject = new BehaviorSubject({ + userId: '99', + username: 'admin', + role: UserRole.AMMINISTRATORE, + accessToken: 'token', + isFirstAccess: false, + }); + + alarmStateStub.getActiveAlarms$.mockReturnValue(activeAlarmsSubject.asObservable()); + alarmStateStub.setActiveAlarms.mockImplementation((alarms: ActiveAlarm[]) => { + activeAlarmsSubject.next(alarms); + }); + alarmStateStub.onAlarmResolved.mockImplementation((resolvedId: string) => { + const next = activeAlarmsSubject + .getValue() + .filter((alarm) => alarm.id !== resolvedId); + + activeAlarmsSubject.next(next); + }); + alarmApiStub.getActiveAlarms.mockReturnValue(of([])); + authServiceStub.getCurrentUser$.mockReturnValue(sessionSubject.asObservable()); + + TestBed.configureTestingModule({ + providers: [ + AlarmManagementService, + { provide: AlarmStateService, useValue: alarmStateStub }, + { provide: AlarmApiService, useValue: alarmApiStub }, + { provide: InternalAuthService, useValue: authServiceStub }, + ], + }); + }); + + const createService = (): AlarmManagementService => TestBed.inject(AlarmManagementService); + + it('non carica lo snapshot iniziale automaticamente alla creazione', () => { + service = createService(); + + expect(alarmApiStub.getActiveAlarms).not.toHaveBeenCalled(); + expect(alarmStateStub.setActiveAlarms).not.toHaveBeenCalled(); + }); + + it('initialize per amministratore mostra tutti gli allarmi senza filtri frontend', () => { + const initialSnapshot: ActiveAlarm[] = [alarmA, alarmB]; + alarmApiStub.getActiveAlarms.mockReturnValueOnce(of(initialSnapshot)); + + service = createService(); + service.initialize(); + + expect(alarmApiStub.getActiveAlarms).toHaveBeenCalledTimes(2); + expect(alarmApiStub.getActiveAlarms).toHaveBeenCalledWith(99, 6, 0); + expect(alarmApiStub.getActiveAlarms).toHaveBeenNthCalledWith(2, 99, 6, 6); + expect(alarmStateStub.setActiveAlarms).toHaveBeenCalledWith(initialSnapshot, 'replace'); + }); + + it('initialize per OSS usa endpoint unmanaged con userId numerico', () => { + sessionSubject.next({ + userId: '7', + username: 'oss', + role: UserRole.OPERATORE_SANITARIO, + accessToken: 'token', + isFirstAccess: false, + }); + + const initialSnapshot: ActiveAlarm[] = [alarmA, alarmB]; + alarmApiStub.getActiveAlarms.mockReturnValueOnce(of(initialSnapshot)); + + service = createService(); + service.initialize(); + + expect(alarmApiStub.getActiveAlarms).toHaveBeenCalledTimes(2); + expect(alarmApiStub.getActiveAlarms).toHaveBeenCalledWith(7, 6, 0); + expect(alarmApiStub.getActiveAlarms).toHaveBeenNthCalledWith(2, 7, 6, 6); + expect(alarmStateStub.setActiveAlarms).toHaveBeenCalledWith(initialSnapshot, 'replace'); + }); + + it('se initialize fallisce non propaga eccezioni e valorizza l errore nel vm', async () => { + alarmApiStub.getActiveAlarms.mockReturnValueOnce(throwError(() => new Error('bootstrap error'))); + + service = createService(); + + expect(() => service.initialize()).not.toThrow(); + expect(alarmStateStub.setActiveAlarms).not.toHaveBeenCalled(); + + const vm = await firstValueFrom(service.vm$.pipe(take(1))); + expect(vm.resolveError).toBe('bootstrap error'); + }); + + it('espone vm iniziale senza campi scope e nessuna risoluzione in corso', async () => { + service = createService(); + const vm = await firstValueFrom(service.vm$.pipe(take(1))); + + expect(vm).toEqual({ + alarms: [], + currentPage: 1, + pageLimit: 6, + pageOffset: 0, + canGoPrevious: false, + canGoNext: false, + isResolving: false, + resolvingId: null, + resolveError: null, + }); + }); + + it('resolveAlarm segue il flusso successo: resolving true, API call, update state, resolving false', async () => { + service = createService(); + activeAlarmsSubject.next([alarmA, alarmB]); + const resolveRequest$ = new Subject(); + alarmApiStub.resolveAlarm.mockReturnValue(resolveRequest$.asObservable()); + + service.resolveAlarm(alarmA.id); + + let vm = await firstValueFrom(service.vm$.pipe(take(1))); + expect(vm.isResolving).toBe(true); + expect(vm.resolvingId).toBe(alarmA.id); + expect(vm.resolveError).toBeNull(); + + resolveRequest$.next(); + resolveRequest$.complete(); + + vm = await firstValueFrom(service.vm$.pipe(take(1))); + expect(vm.isResolving).toBe(false); + expect(vm.resolvingId).toBeNull(); + expect(vm.resolveError).toBeNull(); + + expect(alarmApiStub.resolveAlarm).toHaveBeenCalledWith(alarmA.id, 99); + expect(alarmStateStub.onAlarmResolved).toHaveBeenCalledWith(alarmA.id); + expect(alarmStateStub.onAlarmResolved).toHaveBeenCalledTimes(1); + }); + + it('prima della resolve il vm riflette solo AlarmStateService', async () => { + service = createService(); + const vmHistory: ActiveAlarm[][] = []; + const subscription = service.vm$.subscribe((vm) => { + vmHistory.push(vm.alarms); + }); + + activeAlarmsSubject.next([alarmA]); + activeAlarmsSubject.next([alarmB]); + + const latestVm = await firstValueFrom(service.vm$.pipe(take(1))); + expect(latestVm.alarms).toEqual([alarmB]); + expect(vmHistory.at(-1)).toEqual([alarmB]); + + subscription.unsubscribe(); + }); + + it('dopo resolve non mantiene righe locali e riallinea lo stato allo snapshot backend', async () => { + service = createService(); + activeAlarmsSubject.next([alarmA, alarmB]); + alarmApiStub.resolveAlarm.mockReturnValueOnce(of(void 0)); + + service.resolveAlarm(alarmA.id); + + const vm = await firstValueFrom(service.vm$.pipe(take(1))); + + expect(vm.alarms).toEqual([]); + expect(alarmStateStub.setActiveAlarms).toHaveBeenCalledWith([], 'replace'); + }); + + it('dopo resolve ricarica la pagina corrente dal backend', async () => { + service = createService(); + alarmApiStub.getActiveAlarms.mockReturnValueOnce(of([alarmA])); + activeAlarmsSubject.next([alarmA]); + alarmApiStub.resolveAlarm.mockReturnValueOnce(of(void 0)); + + service.resolveAlarm(alarmA.id); + + const vm = await firstValueFrom(service.vm$.pipe(take(1))); + + expect(vm.alarms.length).toBe(1); + expect(vm.alarms[0].id).toBe(alarmA.id); + expect(alarmApiStub.getActiveAlarms).toHaveBeenNthCalledWith(1, 99, 6, 0); + expect(alarmApiStub.getActiveAlarms).toHaveBeenNthCalledWith(2, 99, 6, 6); + expect(alarmStateStub.setActiveAlarms).toHaveBeenCalledWith([alarmA], 'replace'); + }); + + it('dopo resolve su pagina non iniziale vuota torna automaticamente alla pagina precedente', async () => { + const firstPage: ActiveAlarm[] = [ + alarmA, + alarmB, + { ...alarmA, id: 'active-3' }, + { ...alarmA, id: 'active-4' }, + { ...alarmA, id: 'active-5' }, + { ...alarmA, id: 'active-6' }, + ]; + const secondPage: ActiveAlarm[] = [{ ...alarmA, id: 'active-7' }]; + + alarmApiStub.getActiveAlarms + .mockReturnValueOnce(of(firstPage)) + .mockReturnValueOnce(of(secondPage)) + .mockReturnValueOnce(of(secondPage)) + .mockReturnValueOnce(of([])) + .mockReturnValueOnce(of([])) + .mockReturnValueOnce(of(firstPage)) + .mockReturnValueOnce(of([])); + alarmApiStub.resolveAlarm.mockReturnValueOnce(of(void 0)); + + service = createService(); + service.initialize(); + service.nextPage(); + service.resolveAlarm('active-7'); + + const vm = await firstValueFrom(service.vm$.pipe(take(1))); + + expect(alarmApiStub.getActiveAlarms).toHaveBeenNthCalledWith(1, 99, 6, 0); + expect(alarmApiStub.getActiveAlarms).toHaveBeenNthCalledWith(2, 99, 6, 6); + expect(alarmApiStub.getActiveAlarms).toHaveBeenNthCalledWith(3, 99, 6, 6); + expect(alarmApiStub.getActiveAlarms).toHaveBeenNthCalledWith(4, 99, 6, 12); + expect(alarmApiStub.getActiveAlarms).toHaveBeenNthCalledWith(5, 99, 6, 6); + expect(alarmApiStub.getActiveAlarms).toHaveBeenNthCalledWith(6, 99, 6, 0); + expect(alarmApiStub.getActiveAlarms).toHaveBeenNthCalledWith(7, 99, 6, 6); + expect(vm.currentPage).toBe(1); + expect(vm.pageOffset).toBe(0); + expect(vm.canGoNext).toBe(false); + expect(vm.alarms.map((alarm) => alarm.id)).toEqual([ + 'active-1', + 'active-2', + 'active-3', + 'active-4', + 'active-5', + 'active-6', + ]); + }); + + it('nextPage usa limit 6 e incrementa offset quando la pagina corrente e piena', async () => { + const firstPage: ActiveAlarm[] = [ + alarmA, + alarmB, + { ...alarmA, id: 'active-3' }, + { ...alarmA, id: 'active-4' }, + { ...alarmA, id: 'active-5' }, + { ...alarmA, id: 'active-6' }, + ]; + const secondPage: ActiveAlarm[] = [{ ...alarmA, id: 'active-7' }]; + + alarmApiStub.getActiveAlarms + .mockReturnValueOnce(of(firstPage)) + .mockReturnValueOnce(of(secondPage)) + .mockReturnValueOnce(of(secondPage)) + .mockReturnValueOnce(of([])); + + service = createService(); + service.initialize(); + service.nextPage(); + + expect(alarmApiStub.getActiveAlarms).toHaveBeenNthCalledWith(1, 99, 6, 0); + expect(alarmApiStub.getActiveAlarms).toHaveBeenNthCalledWith(2, 99, 6, 6); + expect(alarmApiStub.getActiveAlarms).toHaveBeenNthCalledWith(3, 99, 6, 6); + expect(alarmApiStub.getActiveAlarms).toHaveBeenNthCalledWith(4, 99, 6, 12); + + const vm = await firstValueFrom(service.vm$.pipe(take(1))); + expect(vm.currentPage).toBe(2); + expect(vm.pageOffset).toBe(6); + expect(vm.canGoPrevious).toBe(true); + expect(vm.alarms.map((alarm) => alarm.id)).toEqual(['active-7']); + }); + + it('nextPage non fa nulla quando canGoNext e false', async () => { + alarmApiStub.getActiveAlarms.mockReturnValueOnce(of([alarmA])); + + service = createService(); + service.initialize(); + service.nextPage(); + + expect(alarmApiStub.getActiveAlarms).toHaveBeenCalledTimes(2); + expect(alarmApiStub.getActiveAlarms).toHaveBeenNthCalledWith(1, 99, 6, 0); + expect(alarmApiStub.getActiveAlarms).toHaveBeenNthCalledWith(2, 99, 6, 6); + + const vm = await firstValueFrom(service.vm$.pipe(take(1))); + expect(vm.currentPage).toBe(1); + expect(vm.pageOffset).toBe(0); + expect(vm.canGoNext).toBe(false); + }); + + it('la pagina successiva con meno di 6 elementi imposta canGoNext a false', async () => { + const firstPage: ActiveAlarm[] = [ + alarmA, + alarmB, + { ...alarmA, id: 'active-3' }, + { ...alarmA, id: 'active-4' }, + { ...alarmA, id: 'active-5' }, + { ...alarmA, id: 'active-6' }, + ]; + + alarmApiStub.getActiveAlarms + .mockReturnValueOnce(of(firstPage)) + .mockReturnValueOnce(of([{ ...alarmA, id: 'active-7' }, { ...alarmA, id: 'active-8' }])) + .mockReturnValueOnce(of([{ ...alarmA, id: 'active-7' }, { ...alarmA, id: 'active-8' }])) + .mockReturnValueOnce(of([])); + + service = createService(); + service.initialize(); + service.nextPage(); + + const vm = await firstValueFrom(service.vm$.pipe(take(1))); + expect(vm.currentPage).toBe(2); + expect(vm.canGoNext).toBe(false); + expect(vm.alarms.map((alarm) => alarm.id)).toEqual(['active-7', 'active-8']); + }); + + it('previousPage decrementa l offset fino a 0', async () => { + const firstPage: ActiveAlarm[] = [ + alarmA, + alarmB, + { ...alarmA, id: 'active-3' }, + { ...alarmA, id: 'active-4' }, + { ...alarmA, id: 'active-5' }, + { ...alarmA, id: 'active-6' }, + ]; + const secondPage: ActiveAlarm[] = [{ ...alarmA, id: 'active-7' }]; + + alarmApiStub.getActiveAlarms + .mockReturnValueOnce(of(firstPage)) + .mockReturnValueOnce(of(secondPage)) + .mockReturnValueOnce(of(secondPage)) + .mockReturnValueOnce(of([])) + .mockReturnValueOnce(of(firstPage)) + .mockReturnValueOnce(of(secondPage)); + + service = createService(); + service.initialize(); + service.nextPage(); + service.previousPage(); + + expect(alarmApiStub.getActiveAlarms).toHaveBeenNthCalledWith(1, 99, 6, 0); + expect(alarmApiStub.getActiveAlarms).toHaveBeenNthCalledWith(2, 99, 6, 6); + expect(alarmApiStub.getActiveAlarms).toHaveBeenNthCalledWith(3, 99, 6, 6); + expect(alarmApiStub.getActiveAlarms).toHaveBeenNthCalledWith(4, 99, 6, 12); + expect(alarmApiStub.getActiveAlarms).toHaveBeenNthCalledWith(5, 99, 6, 0); + expect(alarmApiStub.getActiveAlarms).toHaveBeenNthCalledWith(6, 99, 6, 6); + + const vm = await firstValueFrom(service.vm$.pipe(take(1))); + expect(vm.currentPage).toBe(1); + expect(vm.pageOffset).toBe(0); + expect(vm.canGoPrevious).toBe(false); + }); + + it('previousPage non fa nulla se l offset e gia a zero', () => { + alarmApiStub.getActiveAlarms.mockReturnValueOnce(of([alarmA])); + + service = createService(); + service.initialize(); + service.previousPage(); + + expect(alarmApiStub.getActiveAlarms).toHaveBeenCalledTimes(2); + expect(alarmApiStub.getActiveAlarms).toHaveBeenNthCalledWith(1, 99, 6, 0); + expect(alarmApiStub.getActiveAlarms).toHaveBeenNthCalledWith(2, 99, 6, 6); + }); + + it('in errore resetta resolving e valorizza resolveError nel vm', async () => { + service = createService(); + alarmApiStub.resolveAlarm.mockReturnValue(throwError(() => new Error('timeout rete'))); + + service.resolveAlarm('active-err'); + + const vm = await firstValueFrom(service.vm$.pipe(take(1))); + expect(vm.isResolving).toBe(false); + expect(vm.resolvingId).toBeNull(); + expect(vm.resolveError).toBe('timeout rete'); + expect(alarmStateStub.onAlarmResolved).not.toHaveBeenCalled(); + }); + + it('resolveAlarm con userId non numerico non chiama API e valorizza errore esplicito', async () => { + sessionSubject.next({ + userId: 'abc', + username: 'admin', + role: UserRole.AMMINISTRATORE, + accessToken: 'token', + isFirstAccess: false, + }); + + service = createService(); + activeAlarmsSubject.next([alarmA]); + + service.resolveAlarm(alarmA.id); + + const vm = await firstValueFrom(service.vm$.pipe(take(1))); + expect(vm.isResolving).toBe(false); + expect(vm.resolvingId).toBeNull(); + expect(vm.resolveError).toBe("Utente corrente non valido per risolvere l'allarme."); + expect(alarmApiStub.resolveAlarm).not.toHaveBeenCalled(); + expect(alarmStateStub.onAlarmResolved).not.toHaveBeenCalled(); + }); + + it('initialize con errore non strutturato usa fallback di caricamento', async () => { + alarmApiStub.getActiveAlarms.mockReturnValueOnce(throwError(() => ({ cause: 'unknown' }))); + + service = createService(); + service.initialize(); + + const vm = await firstValueFrom(service.vm$.pipe(take(1))); + expect(vm.resolveError).toBe('Errore durante il caricamento degli allarmi attivi.'); + }); + + it('initialize con userId non numerico non chiama API e valorizza errore esplicito', async () => { + sessionSubject.next({ + userId: 'abc', + username: 'oss', + role: UserRole.OPERATORE_SANITARIO, + accessToken: 'token', + isFirstAccess: false, + }); + + service = createService(); + service.initialize(); + + expect(alarmApiStub.getActiveAlarms).not.toHaveBeenCalled(); + expect(alarmStateStub.setActiveAlarms).not.toHaveBeenCalled(); + + const vm = await firstValueFrom(service.vm$.pipe(take(1))); + expect(vm.resolveError).toBe('Utente corrente non valido per caricare gli allarmi attivi.'); + }); + + it('consente richieste concorrenti e termina resolving solo a completamento di tutte', async () => { + service = createService(); + const reqA$ = new Subject(); + const reqB$ = new Subject(); + + alarmApiStub.resolveAlarm + .mockReturnValueOnce(reqA$.asObservable()) + .mockReturnValueOnce(reqB$.asObservable()); + + service.resolveAlarm('active-1'); + service.resolveAlarm('active-2'); + + let vm = await firstValueFrom(service.vm$.pipe(take(1))); + expect(vm.isResolving).toBe(true); + expect(vm.resolvingId).toBe('active-2'); + + reqA$.next(); + reqA$.complete(); + + vm = await firstValueFrom(service.vm$.pipe(take(1))); + expect(vm.isResolving).toBe(true); + + reqB$.next(); + reqB$.complete(); + + vm = await firstValueFrom(service.vm$.pipe(take(1))); + expect(vm.isResolving).toBe(false); + expect(vm.resolvingId).toBeNull(); + }); + + it('resetta eventuale errore precedente quando parte una nuova resolveAlarm', async () => { + service = createService(); + alarmApiStub.resolveAlarm.mockReturnValueOnce(throwError(() => new Error('errore precedente'))); + + service.resolveAlarm('active-x'); + + let vm = await firstValueFrom(service.vm$.pipe(take(1))); + expect(vm.resolveError).toBe('errore precedente'); + + alarmApiStub.resolveAlarm.mockReturnValueOnce(of(void 0)); + service.resolveAlarm('active-y'); + + vm = await firstValueFrom(service.vm$.pipe(take(1))); + expect(vm.resolveError).toBeNull(); + }); +}); diff --git a/frontend/test/integration/app/features/analytics/analytics.component.integration.spec.ts b/frontend/test/integration/app/features/analytics/analytics.component.integration.spec.ts new file mode 100644 index 00000000..ed5c24c2 --- /dev/null +++ b/frontend/test/integration/app/features/analytics/analytics.component.integration.spec.ts @@ -0,0 +1,179 @@ +import { Component, input } from '@angular/core'; +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { AnalyticsComponent } from 'src/app/features/analytics/analytics.component'; +import { AnalyticsApiService } from 'src/app/features/analytics/services/analytics-api.service'; +import { of } from 'rxjs'; +import { describe, it, expect, beforeEach, vi } from 'vitest'; +import { AnalyticsDto } from 'src/app/features/analytics/models/analytics.model'; +import { Apartment } from 'src/app/features/apartment-monitor/models/apartment.model'; +import { AlarmFrequencyChartComponent } from 'src/app/features/analytics/components/alarm-frequency-chart/alarm-frequency-chart.component'; +import { AlarmsSentResolvedChartComponent } from 'src/app/features/analytics/components/alarms-sent-resolved-chart/alarms-sent-resolved-chart.component'; +import { EnergyConsumptionChartComponent } from 'src/app/features/analytics/components/energy-consumption-chart/energy-consumption-chart.component'; +import { FallFrequencyChartComponent } from 'src/app/features/analytics/components/fall-frequency-chart/fall-frequency-chart.component'; +import { PlantAnomaliesChartComponent } from 'src/app/features/analytics/components/plant-anomalies-chart/plant-anomalies-chart.component'; +import { PresenceDetectionChartComponent } from 'src/app/features/analytics/components/presence-detection-chart/presence-detection-chart.component'; +import { ProlongedPresenceChartComponent } from 'src/app/features/analytics/components/prolonged-presence-chart/prolonged-presence-chart.component'; +import { TemperatureVariationsChartComponent } from 'src/app/features/analytics/components/temperature-variations-chart/temperature-variations-chart.component'; + +@Component({ selector: 'app-alarm-frequency-chart', standalone: true, template: '' }) +class AlarmFrequencyChartStubComponent { + public readonly chartInfo = input(); + public readonly showSuggestions = input(false); +} + +@Component({ selector: 'app-alarms-sent-resolved-chart', standalone: true, template: '' }) +class AlarmsSentResolvedChartStubComponent { + public readonly chartInfo = input(); + public readonly showSuggestions = input(false); +} + +@Component({ selector: 'app-energy-consumption-chart', standalone: true, template: '' }) +class EnergyConsumptionChartStubComponent { + public readonly chartInfo = input(); + public readonly showSuggestions = input(false); +} + +@Component({ selector: 'app-fall-frequency-chart', standalone: true, template: '' }) +class FallFrequencyChartStubComponent { + public readonly chartInfo = input(); + public readonly showSuggestions = input(false); +} + +@Component({ selector: 'app-plant-anomalies-chart', standalone: true, template: '' }) +class PlantAnomaliesChartStubComponent { + public readonly chartInfo = input(); + public readonly showSuggestions = input(false); +} + +@Component({ selector: 'app-presence-detection-chart', standalone: true, template: '' }) +class PresenceDetectionChartStubComponent { + public readonly chartInfo = input(); + public readonly showSuggestions = input(false); +} + +@Component({ selector: 'app-prolonged-presence-chart', standalone: true, template: '' }) +class ProlongedPresenceChartStubComponent { + public readonly chartInfo = input(); + public readonly showSuggestions = input(false); +} + +@Component({ selector: 'app-temperature-variations-chart', standalone: true, template: '' }) +class TemperatureVariationsChartStubComponent { + public readonly chartInfo = input(); + public readonly showSuggestions = input(false); +} + +describe('AnalyticsComponent', () => { + let component: AnalyticsComponent; + let fixture: ComponentFixture; + + // Mock dei dati + const mockApartments: Apartment[] = [ + { id: '1', name: 'Appartamento 1', isEnabled: true, rooms: [] }, + { id: '2', name: 'Appartamento 2', isEnabled: true, rooms: [] } + ]; + + const mockAnalyticsData: AnalyticsDto = { + apartmentId:"1", + analyticsInfo: [ + { + title: "Analisi Anomalie Impianto", + metric: "plant-anomalies", + unit: "anomalie", + labels: ["Gen", "Feb", "Mar", "Apr", "Mag", "Giu", "Lug", "Ago"], + datasets: [ + { + id: "anomalies", + name: "Anomalie Rilevate", + data: [1, 0, 2, 1, 0, 3, 1, 0] + } + ], + suggestions: + { + messages:[], + isSuggestion: false + } + } + ] + }; + + // Creiamo un oggetto mock per il servizio + const mockAnalyticsService = { + getAllApartments: vi.fn(() => of(mockApartments)), + getAnalytics: vi.fn((id: string) => of(mockAnalyticsData)) + }; + + beforeEach(async () => { + + await TestBed.configureTestingModule({ + imports: [AnalyticsComponent], + providers: [ + { provide: AnalyticsApiService, useValue: mockAnalyticsService } + ] + }) + .overrideComponent(AnalyticsComponent, { + remove: { + imports: [ + AlarmFrequencyChartComponent, + AlarmsSentResolvedChartComponent, + EnergyConsumptionChartComponent, + FallFrequencyChartComponent, + PlantAnomaliesChartComponent, + PresenceDetectionChartComponent, + ProlongedPresenceChartComponent, + TemperatureVariationsChartComponent, + ], + }, + add: { + imports: [ + AlarmFrequencyChartStubComponent, + AlarmsSentResolvedChartStubComponent, + EnergyConsumptionChartStubComponent, + FallFrequencyChartStubComponent, + PlantAnomaliesChartStubComponent, + PresenceDetectionChartStubComponent, + ProlongedPresenceChartStubComponent, + TemperatureVariationsChartStubComponent, + ], + }, + }) + .compileComponents(); + + fixture = TestBed.createComponent(AnalyticsComponent); + component = fixture.componentInstance; + + vi.clearAllMocks(); + }); + + it('viene creato', () => { + expect(component).toBeTruthy(); + }); + + it('carica il primo appartmento di default', () => { + fixture.detectChanges(); + + expect(mockAnalyticsService.getAllApartments).toHaveBeenCalled(); + + expect(mockAnalyticsService.getAnalytics).toHaveBeenCalledWith('1', expect.anything()); + }); + + it('aggiorna grafici al cambio appartamento', () => { + fixture.detectChanges(); + + const mockEvent = { target: { value: '2' } } as unknown as Event; + component.onApartmentChange(mockEvent); + + expect(mockAnalyticsService.getAnalytics).toHaveBeenCalledWith('2', expect.anything()); + }); + + it('should return undefined if metric is not found', () => { + const result = component.getChartByMetric(mockAnalyticsData, 'unknown_metric'); + expect(result).toBeUndefined(); + }); + + it('should find the correct metric in getChartByMetric', () => { + const result = component.getChartByMetric(mockAnalyticsData, 'plant-anomalies'); + expect(result).toBeDefined(); + expect(result?.metric).toBe('plant-anomalies'); + }); +}); \ No newline at end of file diff --git a/frontend/test/integration/app/features/analytics/analytics.integration.spec.ts b/frontend/test/integration/app/features/analytics/analytics.integration.spec.ts new file mode 100644 index 00000000..61dfd6a2 --- /dev/null +++ b/frontend/test/integration/app/features/analytics/analytics.integration.spec.ts @@ -0,0 +1,184 @@ +import { Component, input } from '@angular/core'; +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { of } from 'rxjs'; +import { beforeEach, describe, expect, it, vi } from 'vitest'; +import { AnalyticsComponent } from 'src/app/features/analytics/analytics.component'; +import { AnalyticsApiService } from 'src/app/features/analytics/services/analytics-api.service'; +import { AnalyticsDto } from 'src/app/features/analytics/models/analytics.model'; +import { Apartment } from 'src/app/features/apartment-monitor/models/apartment.model'; +import { AlarmFrequencyChartComponent } from 'src/app/features/analytics/components/alarm-frequency-chart/alarm-frequency-chart.component'; +import { AlarmsSentResolvedChartComponent } from 'src/app/features/analytics/components/alarms-sent-resolved-chart/alarms-sent-resolved-chart.component'; +import { EnergyConsumptionChartComponent } from 'src/app/features/analytics/components/energy-consumption-chart/energy-consumption-chart.component'; +import { FallFrequencyChartComponent } from 'src/app/features/analytics/components/fall-frequency-chart/fall-frequency-chart.component'; +import { PlantAnomaliesChartComponent } from 'src/app/features/analytics/components/plant-anomalies-chart/plant-anomalies-chart.component'; +import { PresenceDetectionChartComponent } from 'src/app/features/analytics/components/presence-detection-chart/presence-detection-chart.component'; +import { ProlongedPresenceChartComponent } from 'src/app/features/analytics/components/prolonged-presence-chart/prolonged-presence-chart.component'; +import { TemperatureVariationsChartComponent } from 'src/app/features/analytics/components/temperature-variations-chart/temperature-variations-chart.component'; + +@Component({ + selector: 'app-alarm-frequency-chart', + standalone: true, + template: '', +}) +class AlarmFrequencyChartStubComponent { + public readonly chartInfo = input(); + public readonly showSuggestions = input(false); +} + +@Component({ + selector: 'app-alarms-sent-resolved-chart', + standalone: true, + template: '', +}) +class AlarmsSentResolvedChartStubComponent { + public readonly chartInfo = input(); + public readonly showSuggestions = input(false); +} + +@Component({ + selector: 'app-energy-consumption-chart', + standalone: true, + template: '', +}) +class EnergyConsumptionChartStubComponent { + public readonly chartInfo = input(); + public readonly showSuggestions = input(false); +} + +@Component({ + selector: 'app-fall-frequency-chart', + standalone: true, + template: '', +}) +class FallFrequencyChartStubComponent { + public readonly chartInfo = input(); + public readonly showSuggestions = input(false); +} + +@Component({ + selector: 'app-plant-anomalies-chart', + standalone: true, + template: '', +}) +class PlantAnomaliesChartStubComponent { + public readonly chartInfo = input(); + public readonly showSuggestions = input(false); +} + +@Component({ + selector: 'app-presence-detection-chart', + standalone: true, + template: '', +}) +class PresenceDetectionChartStubComponent { + public readonly chartInfo = input(); + public readonly showSuggestions = input(false); +} + +@Component({ + selector: 'app-prolonged-presence-chart', + standalone: true, + template: '', +}) +class ProlongedPresenceChartStubComponent { + public readonly chartInfo = input(); + public readonly showSuggestions = input(false); +} + +@Component({ + selector: 'app-temperature-variations-chart', + standalone: true, + template: '', +}) +class TemperatureVariationsChartStubComponent { + public readonly chartInfo = input(); + public readonly showSuggestions = input(false); +} + +describe('Analytics feature integration', () => { + let component: AnalyticsComponent; + let fixture: ComponentFixture; + + const apartments: Apartment[] = [ + { id: '1', name: 'Appartamento 1', isEnabled: true, rooms: [] }, + { id: '2', name: 'Appartamento 2', isEnabled: true, rooms: [] }, + ]; + + const analyticsData: AnalyticsDto = { + apartmentId: '1', + analyticsInfo: [ + { + title: 'Analisi Anomalie Impianto', + metric: 'plant-anomalies', + unit: 'anomalie', + labels: ['Gen', 'Feb'], + datasets: [{ id: 'anomalies', name: 'Anomalie', data: [1, 0] }], + suggestions: { messages: [], isSuggestion: false }, + }, + ], + }; + + const analyticsApiStub = { + getAllApartments: vi.fn(() => of(apartments)), + getAnalytics: vi.fn(() => of(analyticsData)), + }; + + beforeEach(async () => { + vi.clearAllMocks(); + + await TestBed.configureTestingModule({ + imports: [AnalyticsComponent], + providers: [{ provide: AnalyticsApiService, useValue: analyticsApiStub }], + }) + .overrideComponent(AnalyticsComponent, { + remove: { + imports: [ + AlarmFrequencyChartComponent, + AlarmsSentResolvedChartComponent, + EnergyConsumptionChartComponent, + FallFrequencyChartComponent, + PlantAnomaliesChartComponent, + PresenceDetectionChartComponent, + ProlongedPresenceChartComponent, + TemperatureVariationsChartComponent, + ], + }, + add: { + imports: [ + AlarmFrequencyChartStubComponent, + AlarmsSentResolvedChartStubComponent, + EnergyConsumptionChartStubComponent, + FallFrequencyChartStubComponent, + PlantAnomaliesChartStubComponent, + PresenceDetectionChartStubComponent, + ProlongedPresenceChartStubComponent, + TemperatureVariationsChartStubComponent, + ], + }, + }) + .compileComponents(); + + fixture = TestBed.createComponent(AnalyticsComponent); + component = fixture.componentInstance; + }); + + it('RF61-OBL inizializza appartamenti e carica analytics del primo plant', () => { + fixture.detectChanges(); + + expect(analyticsApiStub.getAllApartments).toHaveBeenCalled(); + expect(analyticsApiStub.getAnalytics).toHaveBeenCalledWith('1', expect.anything()); + }); + + it('RF62-OBL cambio appartamento aggiorna i grafici', () => { + fixture.detectChanges(); + + component.onApartmentChange({ target: { value: '2' } } as unknown as Event); + + expect(analyticsApiStub.getAnalytics).toHaveBeenCalledWith('2', expect.anything()); + }); + + it('RF63-OBL recupera correttamente una metrica esistente', () => { + const chart = component.getChartByMetric(analyticsData, 'plant-anomalies'); + expect(chart?.metric).toBe('plant-anomalies'); + }); +}); diff --git a/frontend/test/integration/app/features/analytics/components/alarm-frequency-chart/alarm-frequency-chart.component.integration.spec.ts b/frontend/test/integration/app/features/analytics/components/alarm-frequency-chart/alarm-frequency-chart.component.integration.spec.ts new file mode 100644 index 00000000..f80f412e --- /dev/null +++ b/frontend/test/integration/app/features/analytics/components/alarm-frequency-chart/alarm-frequency-chart.component.integration.spec.ts @@ -0,0 +1,25 @@ +import { TestBed } from '@angular/core/testing'; +import { AlarmFrequencyChartComponent } from 'src/app/features/analytics/components/alarm-frequency-chart/alarm-frequency-chart.component'; +import { BaseChartDirective, provideCharts, withDefaultRegisterables } from 'ng2-charts'; +import { runSharedChartTests } from 'src/app/features/analytics/components/shared/chart-tests.helper'; + + +describe('AlarmFrequencyChartComponent', () => { + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [AlarmFrequencyChartComponent, BaseChartDirective], + providers: [provideCharts(withDefaultRegisterables())] + }).compileComponents(); + }); + + it('espone metadati chart consistenti', () => { + const fixture = TestBed.createComponent(AlarmFrequencyChartComponent); + const component = fixture.componentInstance; + + expect(component.chartType).toBe('bar'); + expect(component.description.length).toBeGreaterThan(0); + }); + + runSharedChartTests(AlarmFrequencyChartComponent); +}); \ No newline at end of file diff --git a/frontend/test/integration/app/features/analytics/components/alarms-sent-resolved-chart/alarms-sent-resolved-chart.component.integration.spec.ts b/frontend/test/integration/app/features/analytics/components/alarms-sent-resolved-chart/alarms-sent-resolved-chart.component.integration.spec.ts new file mode 100644 index 00000000..38d23ed0 --- /dev/null +++ b/frontend/test/integration/app/features/analytics/components/alarms-sent-resolved-chart/alarms-sent-resolved-chart.component.integration.spec.ts @@ -0,0 +1,25 @@ +import { TestBed } from '@angular/core/testing'; +import { AlarmsSentResolvedChartComponent } from 'src/app/features/analytics/components/alarms-sent-resolved-chart/alarms-sent-resolved-chart.component'; +import { BaseChartDirective, provideCharts, withDefaultRegisterables } from 'ng2-charts'; +import { runSharedChartTests } from 'src/app/features/analytics/components/shared/chart-tests.helper'; + + +describe('AlarmsSentResolvedChartComponent', () => { + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [AlarmsSentResolvedChartComponent, BaseChartDirective], + providers: [provideCharts(withDefaultRegisterables())] + }).compileComponents(); + }); + + it('espone metadati chart consistenti', () => { + const fixture = TestBed.createComponent(AlarmsSentResolvedChartComponent); + const component = fixture.componentInstance; + + expect(component.chartType).toBe('bar'); + expect(component.description.length).toBeGreaterThan(0); + }); + + runSharedChartTests(AlarmsSentResolvedChartComponent); +}); \ No newline at end of file diff --git a/frontend/test/integration/app/features/analytics/components/energy-consumption-chart/energy-consumption-chart.component.integration.spec.ts b/frontend/test/integration/app/features/analytics/components/energy-consumption-chart/energy-consumption-chart.component.integration.spec.ts new file mode 100644 index 00000000..1ab7f55c --- /dev/null +++ b/frontend/test/integration/app/features/analytics/components/energy-consumption-chart/energy-consumption-chart.component.integration.spec.ts @@ -0,0 +1,25 @@ +import { TestBed } from '@angular/core/testing'; +import { EnergyConsumptionChartComponent } from 'src/app/features/analytics/components/energy-consumption-chart/energy-consumption-chart.component'; +import { BaseChartDirective, provideCharts, withDefaultRegisterables } from 'ng2-charts'; +import { runSharedChartTests } from 'src/app/features/analytics/components/shared/chart-tests.helper'; + + +describe('EnergyConsumptionChartComponent', () => { + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [EnergyConsumptionChartComponent, BaseChartDirective], + providers: [provideCharts(withDefaultRegisterables())] + }).compileComponents(); + }); + + it('espone metadati chart consistenti', () => { + const fixture = TestBed.createComponent(EnergyConsumptionChartComponent); + const component = fixture.componentInstance; + + expect(component.chartType).toBe('line'); + expect(component.description.length).toBeGreaterThan(0); + }); + + runSharedChartTests(EnergyConsumptionChartComponent); +}); \ No newline at end of file diff --git a/frontend/test/integration/app/features/analytics/components/fall-frequency-chart/fall-frequency-chart.component.integration.spec.ts b/frontend/test/integration/app/features/analytics/components/fall-frequency-chart/fall-frequency-chart.component.integration.spec.ts new file mode 100644 index 00000000..67062a1c --- /dev/null +++ b/frontend/test/integration/app/features/analytics/components/fall-frequency-chart/fall-frequency-chart.component.integration.spec.ts @@ -0,0 +1,25 @@ +import { TestBed } from '@angular/core/testing'; +import { FallFrequencyChartComponent } from 'src/app/features/analytics/components/fall-frequency-chart/fall-frequency-chart.component'; +import { BaseChartDirective, provideCharts, withDefaultRegisterables } from 'ng2-charts'; +import { runSharedChartTests } from 'src/app/features/analytics/components/shared/chart-tests.helper'; + + +describe('FallFrequencyChartComponent', () => { + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [FallFrequencyChartComponent, BaseChartDirective], + providers: [provideCharts(withDefaultRegisterables())] + }).compileComponents(); + }); + + it('espone metadati chart consistenti', () => { + const fixture = TestBed.createComponent(FallFrequencyChartComponent); + const component = fixture.componentInstance; + + expect(component.chartType).toBe('bar'); + expect(component.description.length).toBeGreaterThan(0); + }); + + runSharedChartTests(FallFrequencyChartComponent); +}); \ No newline at end of file diff --git a/frontend/test/integration/app/features/analytics/components/plant-anomalies-chart/plant-anomalies-chart.component.integration.spec.ts b/frontend/test/integration/app/features/analytics/components/plant-anomalies-chart/plant-anomalies-chart.component.integration.spec.ts new file mode 100644 index 00000000..bcad30fa --- /dev/null +++ b/frontend/test/integration/app/features/analytics/components/plant-anomalies-chart/plant-anomalies-chart.component.integration.spec.ts @@ -0,0 +1,25 @@ +import { TestBed } from '@angular/core/testing'; +import { PlantAnomaliesChartComponent } from 'src/app/features/analytics/components/plant-anomalies-chart/plant-anomalies-chart.component'; +import { BaseChartDirective, provideCharts, withDefaultRegisterables } from 'ng2-charts'; +import { runSharedChartTests } from 'src/app/features/analytics/components/shared/chart-tests.helper'; + + +describe('PlantAnomaliesChartComponent', () => { + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [PlantAnomaliesChartComponent, BaseChartDirective], + providers: [provideCharts(withDefaultRegisterables())] + }).compileComponents(); + }); + + it('espone metadati chart consistenti', () => { + const fixture = TestBed.createComponent(PlantAnomaliesChartComponent); + const component = fixture.componentInstance; + + expect(component.chartType).toBe('bar'); + expect(component.description.length).toBeGreaterThan(0); + }); + + runSharedChartTests(PlantAnomaliesChartComponent); +}); \ No newline at end of file diff --git a/frontend/test/integration/app/features/analytics/components/presence-detection-chart/presence-detection-chart.component.integration.spec.ts b/frontend/test/integration/app/features/analytics/components/presence-detection-chart/presence-detection-chart.component.integration.spec.ts new file mode 100644 index 00000000..6dc3e509 --- /dev/null +++ b/frontend/test/integration/app/features/analytics/components/presence-detection-chart/presence-detection-chart.component.integration.spec.ts @@ -0,0 +1,25 @@ +import { TestBed } from '@angular/core/testing'; +import { PresenceDetectionChartComponent } from 'src/app/features/analytics/components/presence-detection-chart/presence-detection-chart.component'; +import { BaseChartDirective, provideCharts, withDefaultRegisterables } from 'ng2-charts'; +import { runSharedChartTests } from 'src/app/features/analytics/components/shared/chart-tests.helper'; + + +describe('PresenceDetectionChartComponent', () => { + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [PresenceDetectionChartComponent, BaseChartDirective], + providers: [provideCharts(withDefaultRegisterables())] + }).compileComponents(); + }); + + it('espone metadati chart consistenti', () => { + const fixture = TestBed.createComponent(PresenceDetectionChartComponent); + const component = fixture.componentInstance; + + expect(component.chartType).toBe('bar'); + expect(component.description.length).toBeGreaterThan(0); + }); + + runSharedChartTests(PresenceDetectionChartComponent); +}); \ No newline at end of file diff --git a/frontend/test/integration/app/features/analytics/components/prolonged-presence-chart/prolonged-presence-chart.component.integration.spec.ts b/frontend/test/integration/app/features/analytics/components/prolonged-presence-chart/prolonged-presence-chart.component.integration.spec.ts new file mode 100644 index 00000000..d5f26cc3 --- /dev/null +++ b/frontend/test/integration/app/features/analytics/components/prolonged-presence-chart/prolonged-presence-chart.component.integration.spec.ts @@ -0,0 +1,25 @@ +import { TestBed } from '@angular/core/testing'; +import { ProlongedPresenceChartComponent } from 'src/app/features/analytics/components/prolonged-presence-chart/prolonged-presence-chart.component'; +import { BaseChartDirective, provideCharts, withDefaultRegisterables } from 'ng2-charts'; +import { runSharedChartTests } from 'src/app/features/analytics/components/shared/chart-tests.helper'; + + +describe('ProlongedPresenceChartComponent', () => { + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [ProlongedPresenceChartComponent, BaseChartDirective], + providers: [provideCharts(withDefaultRegisterables())] + }).compileComponents(); + }); + + it('espone metadati chart consistenti', () => { + const fixture = TestBed.createComponent(ProlongedPresenceChartComponent); + const component = fixture.componentInstance; + + expect(component.chartType).toBe('bar'); + expect(component.description.length).toBeGreaterThan(0); + }); + + runSharedChartTests(ProlongedPresenceChartComponent); +}); \ No newline at end of file diff --git a/frontend/test/integration/app/features/analytics/components/temperature-variations-chart/temperature-variations-chart.component.integration.spec.ts b/frontend/test/integration/app/features/analytics/components/temperature-variations-chart/temperature-variations-chart.component.integration.spec.ts new file mode 100644 index 00000000..b2e58045 --- /dev/null +++ b/frontend/test/integration/app/features/analytics/components/temperature-variations-chart/temperature-variations-chart.component.integration.spec.ts @@ -0,0 +1,25 @@ +import { TestBed } from '@angular/core/testing'; +import { TemperatureVariationsChartComponent } from 'src/app/features/analytics/components/temperature-variations-chart/temperature-variations-chart.component'; +import { BaseChartDirective, provideCharts, withDefaultRegisterables } from 'ng2-charts'; +import { runSharedChartTests } from 'src/app/features/analytics/components/shared/chart-tests.helper'; + + +describe('TemperatureVariationsChartComponent', () => { + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [TemperatureVariationsChartComponent, BaseChartDirective], + providers: [provideCharts(withDefaultRegisterables())] + }).compileComponents(); + }); + + it('espone metadati chart consistenti', () => { + const fixture = TestBed.createComponent(TemperatureVariationsChartComponent); + const component = fixture.componentInstance; + + expect(component.chartType).toBe('line'); + expect(component.description.length).toBeGreaterThan(0); + }); + + runSharedChartTests(TemperatureVariationsChartComponent); +}); \ No newline at end of file diff --git a/frontend/test/integration/app/features/analytics/services/analytics-api.service.integration.spec.ts b/frontend/test/integration/app/features/analytics/services/analytics-api.service.integration.spec.ts new file mode 100644 index 00000000..be887511 --- /dev/null +++ b/frontend/test/integration/app/features/analytics/services/analytics-api.service.integration.spec.ts @@ -0,0 +1,88 @@ +import { TestBed } from '@angular/core/testing'; +import { provideHttpClient } from '@angular/common/http'; +import { provideHttpClientTesting, HttpTestingController } from '@angular/common/http/testing'; +import { AnalyticsApiService } from 'src/app/features/analytics/services/analytics-api.service'; +import { API_BASE_URL } from 'src/app/core/tokens/api-base-url.token'; +import { describe, it, expect, beforeEach, afterEach } from 'vitest'; + +describe('AnalyticsApiService', () => { + let service: AnalyticsApiService; + let httpMock: HttpTestingController; + const mockBaseUrl = 'https://api.test.com'; + + beforeEach(() => { + TestBed.configureTestingModule({ + providers: [ + AnalyticsApiService, + provideHttpClient(), + provideHttpClientTesting(), + { provide: API_BASE_URL, useValue: mockBaseUrl } + ] + }); + + service = TestBed.inject(AnalyticsApiService); + httpMock = TestBed.inject(HttpTestingController); + }); + + afterEach(() => { + httpMock.verify(); + }); + + it('should be created', () => { + expect(service).toBeTruthy(); + }); + + describe('getAllApartments', () => { + it('should fetch all apartments and map them correctly', () => { + const mockApiResponse = [ + { id: '1', name: 'Apartment 1', extraField: 'ignore me' }, + { id: '2', name: 'Apartment 2' } + ]; + + service.getAllApartments().subscribe((apartments) => { + expect(apartments.length).toBe(2); + expect(apartments[0]).toEqual({ id: '1', name: 'Apartment 1' }); + expect(apartments[0]).not.toHaveProperty('extraField'); + }); + + const req = httpMock.expectOne(`${mockBaseUrl}/plant/all`); + expect(req.request.method).toBe('GET'); + req.flush(mockApiResponse); + }); + }); + + describe('getAnalytics', () => { + it('should fetch analytics and map the complex DTO structure', () => { + const apartmentId = 'apt-123'; + const mockRawResponse = [ + { + title: 'Test Chart', + metric: 'test-metric', + unit: 'Wh', + labels: ['Mon', 'Tue'], + series: [ + { id: 's1', name: 'Series 1', data: [10, 20] } + ], + suggestion: { + message: ['Suggestion 1'], + isSuggestion: true + } + } + ]; + + service.getAnalytics(apartmentId).subscribe((result) => { + expect(result.apartmentId).toBe(apartmentId); + expect(result.analyticsInfo.length).toBe(1); + + const info = result.analyticsInfo[0]; + expect(info.title).toBe('Test Chart'); + expect(info.suggestions.messages).toEqual(['Suggestion 1']); + expect(info.datasets[0].name).toBe('Series 1'); + }); + + const req = httpMock.expectOne(`${mockBaseUrl}/analytics/${apartmentId}`); + expect(req.request.method).toBe('GET'); + req.flush(mockRawResponse); + }); + }); +}); \ No newline at end of file diff --git a/frontend/test/integration/app/features/apartment-monitor/components/apartment-monitor/apartment-monitor.component.deep.integration.spec.ts b/frontend/test/integration/app/features/apartment-monitor/components/apartment-monitor/apartment-monitor.component.deep.integration.spec.ts new file mode 100644 index 00000000..2ea84ef1 --- /dev/null +++ b/frontend/test/integration/app/features/apartment-monitor/components/apartment-monitor/apartment-monitor.component.deep.integration.spec.ts @@ -0,0 +1,105 @@ +import { Component, input } from '@angular/core'; +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { BehaviorSubject, of } from 'rxjs'; +import { beforeEach, describe, expect, it, vi } from 'vitest'; +import { AlarmStateService } from 'src/app/core/alarm/services/alarm-state.service'; +import { ALARM_LIFECYCLE_UPDATED_EVENT } from 'src/app/core/alarm/models/realtime-alarm-event.model'; +import type { Apartment } from 'src/app/features/apartment-monitor/models/apartment.model'; +import { ApartmentApiService } from 'src/app/features/apartment-monitor/services/apartment-api.service'; +import { ApartmentMonitorComponent } from 'src/app/features/apartment-monitor/components/apartment-monitor/apartment-monitor.component'; +import { AlarmMapComponent } from 'src/app/features/apartment-monitor/components/alarm-map/alarm-map.component'; +import { EndpointTableComponent } from 'src/app/features/device-interaction/components/endpoint-table/endpoint-table.component'; + +@Component({ + selector: 'app-alarm-map', + standalone: true, + template: '
', +}) +class AlarmMapStubWithInputsComponent { + public readonly rooms = input([]); + public readonly activeAlarms = input([]); +} + +@Component({ + selector: 'app-endpoint-table', + standalone: true, + template: '
', +}) +class EndpointTableStubComponent {} + +describe('ApartmentMonitorComponent', () => { + let fixture: ComponentFixture; + let component: ApartmentMonitorComponent; + + const apartmentSubject = new BehaviorSubject({ + id: 'ap-1', + name: 'Appartamento 1', + isEnabled: true, + rooms: [], + }); + + const apartmentApiStub = { + getAvailableApartments: vi.fn().mockReturnValue(of([{ id: 'ap-1', name: 'Appartamento 1' }])), + getCurrentApartment: vi.fn().mockReturnValue(apartmentSubject.asObservable()), + setActivePlantId: vi.fn(), + }; + + const alarmStateStub = { + getActiveAlarms$: vi.fn().mockReturnValue(of([])), + }; + + beforeEach(async () => { + vi.clearAllMocks(); + + await TestBed.configureTestingModule({ + imports: [ApartmentMonitorComponent], + providers: [ + { provide: ApartmentApiService, useValue: apartmentApiStub }, + { provide: AlarmStateService, useValue: alarmStateStub }, + ], + }) + .overrideComponent(ApartmentMonitorComponent, { + remove: { imports: [AlarmMapComponent, EndpointTableComponent] }, + add: { imports: [AlarmMapStubWithInputsComponent, EndpointTableStubComponent] }, + }) + .compileComponents(); + + fixture = TestBed.createComponent(ApartmentMonitorComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('crea il componente e sincronizza activeApartmentId dal feed apartment$', () => { + expect(component).toBeTruthy(); + expect(component.activeApartmentId).toBe('ap-1'); + expect(apartmentApiStub.getCurrentApartment).toHaveBeenCalled(); + }); + + it('onApartmentSelected ignora id vuoto o uguale', () => { + component.activeApartmentId = 'ap-1'; + + component.onApartmentSelected(''); + component.onApartmentSelected('ap-1'); + + expect(apartmentApiStub.setActivePlantId).not.toHaveBeenCalled(); + }); + + it('onApartmentSelected cambia appartamento, resetta errore e triggera refresh', () => { + component.error = 'errore precedente'; + + component.onApartmentSelected('ap-2'); + + expect(apartmentApiStub.setActivePlantId).toHaveBeenCalledWith('ap-2'); + expect(component.error).toBe(''); + }); + + it('refresh realtime azzera errore e ricarica apartment$', () => { + component.error = 'errore'; + const callsBefore = apartmentApiStub.getCurrentApartment.mock.calls.length; + + globalThis.dispatchEvent(new CustomEvent(ALARM_LIFECYCLE_UPDATED_EVENT)); + + expect(component.error).toBe(''); + expect(apartmentApiStub.getCurrentApartment.mock.calls.length).toBeGreaterThan(callsBefore); + }); +}); diff --git a/frontend/test/integration/app/features/apartment-monitor/components/apartment-monitor/apartment-monitor.integration.spec.ts b/frontend/test/integration/app/features/apartment-monitor/components/apartment-monitor/apartment-monitor.integration.spec.ts new file mode 100644 index 00000000..5268f54e --- /dev/null +++ b/frontend/test/integration/app/features/apartment-monitor/components/apartment-monitor/apartment-monitor.integration.spec.ts @@ -0,0 +1,94 @@ +import { Component, input } from '@angular/core'; +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { BehaviorSubject, of } from 'rxjs'; +import { beforeEach, describe, expect, it, vi } from 'vitest'; +import { AlarmStateService } from 'src/app/core/alarm/services/alarm-state.service'; +import { ALARM_LIFECYCLE_UPDATED_EVENT } from 'src/app/core/alarm/models/realtime-alarm-event.model'; +import type { Apartment } from 'src/app/features/apartment-monitor/models/apartment.model'; +import { ApartmentApiService } from 'src/app/features/apartment-monitor/services/apartment-api.service'; +import { ApartmentMonitorComponent } from 'src/app/features/apartment-monitor/components/apartment-monitor/apartment-monitor.component'; +import { AlarmMapComponent } from 'src/app/features/apartment-monitor/components/alarm-map/alarm-map.component'; +import { EndpointTableComponent } from 'src/app/features/device-interaction/components/endpoint-table/endpoint-table.component'; + +@Component({ + selector: 'app-alarm-map', + standalone: true, + template: '
', +}) +class AlarmMapStubComponent { + public readonly rooms = input([]); + public readonly activeAlarms = input([]); +} + +@Component({ + selector: 'app-endpoint-table', + standalone: true, + template: '
', +}) +class EndpointTableStubComponent {} + +describe('ApartmentMonitor feature integration', () => { + let fixture: ComponentFixture; + let component: ApartmentMonitorComponent; + + const apartmentSubject = new BehaviorSubject({ + id: 'ap-1', + name: 'Appartamento 1', + isEnabled: true, + rooms: [], + }); + + const apartmentApiStub = { + getAvailableApartments: vi.fn().mockReturnValue(of([{ id: 'ap-1', name: 'Appartamento 1' }])), + getCurrentApartment: vi.fn().mockReturnValue(apartmentSubject.asObservable()), + setActivePlantId: vi.fn(), + }; + + const alarmStateStub = { + getActiveAlarms$: vi.fn().mockReturnValue(of([])), + }; + + beforeEach(async () => { + vi.clearAllMocks(); + + await TestBed.configureTestingModule({ + imports: [ApartmentMonitorComponent], + providers: [ + { provide: ApartmentApiService, useValue: apartmentApiStub }, + { provide: AlarmStateService, useValue: alarmStateStub }, + ], + }) + .overrideComponent(ApartmentMonitorComponent, { + remove: { imports: [AlarmMapComponent, EndpointTableComponent] }, + add: { imports: [AlarmMapStubComponent, EndpointTableStubComponent] }, + }) + .compileComponents(); + + fixture = TestBed.createComponent(ApartmentMonitorComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('RF72-OBL inizializza appartamento attivo dal feed e prepara la vista', () => { + expect(component).toBeTruthy(); + expect(apartmentApiStub.getCurrentApartment).toHaveBeenCalled(); + expect(component.activeApartmentId).toBe('ap-1'); + }); + + it('RF73-OBL cambio appartamento aggiorna plant attivo e resetta errore', () => { + component.error = 'errore precedente'; + + component.onApartmentSelected('ap-2'); + + expect(apartmentApiStub.setActivePlantId).toHaveBeenCalledWith('ap-2'); + expect(component.error).toBe(''); + }); + + it('RF74-OBL evento realtime forza refresh del caricamento appartamento', () => { + const beforeCalls = apartmentApiStub.getCurrentApartment.mock.calls.length; + + globalThis.dispatchEvent(new CustomEvent(ALARM_LIFECYCLE_UPDATED_EVENT)); + + expect(apartmentApiStub.getCurrentApartment.mock.calls.length).toBeGreaterThan(beforeCalls); + }); +}); diff --git a/frontend/test/integration/app/features/apartment-monitor/services/apartment-api.service.integration.spec.ts b/frontend/test/integration/app/features/apartment-monitor/services/apartment-api.service.integration.spec.ts new file mode 100644 index 00000000..625d0724 --- /dev/null +++ b/frontend/test/integration/app/features/apartment-monitor/services/apartment-api.service.integration.spec.ts @@ -0,0 +1,231 @@ +import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing'; +import { TestBed } from '@angular/core/testing'; +import { firstValueFrom, of } from 'rxjs'; +import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'; +import { InternalAuthService } from 'src/app/core/services/internal-auth.service'; +import { WardRealtimeCacheService } from 'src/app/core/alarm/services/ward-realtime-cache.service'; +import { API_BASE_URL } from 'src/app/core/tokens/api-base-url.token'; +import { ApartmentApiService } from 'src/app/features/apartment-monitor/services/apartment-api.service'; + +describe('ApartmentApiService', () => { + let service: ApartmentApiService; + let httpMock: HttpTestingController; + let storage: { + getItem: (key: string) => string | null; + setItem: (key: string, value: string) => void; + removeItem: (key: string) => void; + clear: () => void; + }; + + const internalAuthStub = { + getCurrentUser$: vi.fn<() => any>(() => of(null)), + }; + + const wardRealtimeCacheStub = { + mergeWardIds: vi.fn(), + }; + + beforeEach(() => { + vi.clearAllMocks(); + + const values = new Map(); + storage = { + getItem: (key: string) => values.get(key) ?? null, + setItem: (key: string, value: string) => { + values.set(key, value); + }, + removeItem: (key: string) => { + values.delete(key); + }, + clear: () => { + values.clear(); + }, + }; + + Object.defineProperty(globalThis, 'localStorage', { + value: storage, + configurable: true, + }); + + TestBed.configureTestingModule({ + imports: [HttpClientTestingModule], + providers: [ + ApartmentApiService, + { provide: API_BASE_URL, useValue: 'http://localhost:3000' }, + { provide: InternalAuthService, useValue: internalAuthStub }, + { provide: WardRealtimeCacheService, useValue: wardRealtimeCacheStub }, + ], + }); + + service = TestBed.inject(ApartmentApiService); + httpMock = TestBed.inject(HttpTestingController); + }); + + afterEach(() => { + httpMock?.verify(); + storage?.clear(); + }); + + it('RF83-OBL abilita un appartamento nel Sistema', async () => { + const enablePromise = firstValueFrom(service.enableApartment('apt-101')); + + const request = httpMock.expectOne('http://localhost:3000/apartments/apt-101/enable'); + expect(request.request.method).toBe('PATCH'); + expect(request.request.body).toEqual({}); + + request.flush(null, { status: 200, statusText: 'OK' }); + + await enablePromise; + }); + + it('RF84-OBL disabilita un appartamento nel Sistema', async () => { + const disablePromise = firstValueFrom(service.disableApartment('apt-101')); + + const request = httpMock.expectOne('http://localhost:3000/apartments/apt-101/disable'); + expect(request.request.method).toBe('PATCH'); + expect(request.request.body).toEqual({}); + + request.flush(null, { status: 200, statusText: 'OK' }); + + await disablePromise; + }); + + it('RF72-OBL getAvailableApartments ordina per nome e deduplica plant', async () => { + const apartmentsPromise = firstValueFrom(service.getAvailableApartments()); + + const request = httpMock.expectOne('http://localhost:3000/plant/all'); + expect(request.request.method).toBe('GET'); + request.flush([ + { id: 'p2', name: 'Zeta', rooms: [] }, + { id: 'p1', name: 'Alfa', rooms: [] }, + { id: 'p1', name: 'Alfa', rooms: [] }, + ]); + + const apartments = await apartmentsPromise; + expect(apartments).toEqual([ + { id: 'p1', name: 'Alfa' }, + { id: 'p2', name: 'Zeta' }, + ]); + }); + + it('RF72-OBL getAllPlants supporta risposta wrappata in data[]', async () => { + const plantsPromise = firstValueFrom(service.getAllPlants()); + + const request = httpMock.expectOne('http://localhost:3000/plant/all'); + request.flush({ + data: [ + { id: 'p9', name: 'Plant 9', rooms: [] }, + { id: 'p10', rooms: [] }, + ], + }); + + const plants = await plantsPromise; + expect(plants).toHaveLength(2); + expect(plants[1].name).toBe('p10'); + }); + + it('RF72-OBL getCurrentApartment usa activePlantId salvato e mappa apartment view', async () => { + globalThis.localStorage.setItem('activePlantId', 'p2'); + const apartmentPromise = firstValueFrom(service.getCurrentApartment()); + + const allPlantsRequest = httpMock.expectOne('http://localhost:3000/plant/all'); + allPlantsRequest.flush([ + { id: 'p1', name: 'Plant 1', rooms: [] }, + { id: 'p2', name: 'Plant 2', rooms: [] }, + ]); + + const plantRequest = httpMock.expectOne('http://localhost:3000/plant?plantid=p2'); + plantRequest.flush({ + id: 'p2', + name: 'Plant 2', + rooms: [ + { + id: 'r1', + name: 'Ingresso', + devices: [ + { + id: 'd-energy', + name: 'Contatore', + type: 'SS_ENERGY_MEASURE_TOTAL', + subType: 'SF_ENERGY', + datapoints: [], + }, + { + id: 'd-main', + name: 'Sensore Porta', + type: 'SS_SECURITY_RADARDETECTOR', + subType: 'SF_ACCESS', + datapoints: [ + { + id: 'dp-1', + name: 'State', + readable: true, + writable: false, + valueType: 'string', + sfeType: 'SFE_State', + }, + ], + }, + { + id: 'd-dup', + name: ' sensore porta ', + type: 'SS_AUTOMATION_ONOFF', + subType: 'SF_GENERIC', + datapoints: [], + }, + ], + }, + ], + }); + + const apartment = await apartmentPromise; + expect(apartment.id).toBe('p2'); + expect(apartment.rooms).toHaveLength(1); + expect(apartment.rooms[0].devices).toHaveLength(1); + expect(apartment.rooms[0].devices[0].id).toBe('d-main'); + }); + + it('RF72-OBL getCurrentApartment fallisce se non esistono plant disponibili', async () => { + const apartmentPromise = firstValueFrom(service.getCurrentApartment()); + + const allPlantsRequest = httpMock.expectOne('http://localhost:3000/plant/all'); + allPlantsRequest.flush([]); + + await expect(apartmentPromise).rejects.toThrow('No available plants found'); + }); + + it('RF72-OBL setActivePlantId non emette evento se plant invariato', () => { + globalThis.localStorage.setItem('activePlantId', 'p1'); + const dispatchSpy = vi.spyOn(globalThis, 'dispatchEvent'); + + service.setActivePlantId('p1'); + + expect(dispatchSpy).not.toHaveBeenCalled(); + expect(globalThis.localStorage.getItem('activePlantId')).toBe('p1'); + }); + + it('RF72-OBL getAllPlants sincronizza wardIds nel realtime cache con utente loggato', async () => { + internalAuthStub.getCurrentUser$.mockReturnValueOnce( + of({ + userId: 'u-1', + username: 'admin', + role: 0, + accessToken: 'token', + isFirstAccess: false, + }), + ); + + const plantsPromise = firstValueFrom(service.getAllPlants()); + + const request = httpMock.expectOne('http://localhost:3000/plant/all'); + request.flush([ + { id: 'p1', name: 'Plant 1', wardId: 10, rooms: [] }, + { id: 'p2', name: 'Plant 2', wardId: 20, rooms: [] }, + { id: 'p3', name: 'Plant 3', wardId: 20, rooms: [] }, + ]); + + await plantsPromise; + + expect(wardRealtimeCacheStub.mergeWardIds).toHaveBeenCalledWith('u-1', ['10', '20']); + }); +}); diff --git a/frontend/test/integration/app/features/dashboard/components/alarms-widget/alarms-widget.component.integration.spec.ts b/frontend/test/integration/app/features/dashboard/components/alarms-widget/alarms-widget.component.integration.spec.ts new file mode 100644 index 00000000..ae528b2d --- /dev/null +++ b/frontend/test/integration/app/features/dashboard/components/alarms-widget/alarms-widget.component.integration.spec.ts @@ -0,0 +1,97 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { AlarmWidgetComponent } from 'src/app/features/dashboard/components/alarms-widget/alarms-widget.component'; +import { AlarmManagementService } from 'src/app/features/alarm-management/services/alarm-management.service'; +import { AlarmManagementTablePresenterService } from 'src/app/features/alarm-management/services/alarm-management-table-presenter.service'; +import { AlarmManagementRefreshService } from 'src/app/core/alarm/services/alarm-management-refresh.service'; +import { Subject } from 'rxjs'; +import { NO_ERRORS_SCHEMA, Pipe, PipeTransform } from '@angular/core'; +import { describe, it, expect, beforeEach, vi } from 'vitest'; + +@Pipe({ name: 'elapsedTime', standalone: true }) +class MockElapsedTimePipe implements PipeTransform { + transform(value: any): string { return '2 min ago'; } +} + +describe('AlarmWidgetComponent', () => { + let component: AlarmWidgetComponent; + let fixture: ComponentFixture; + + const vmSubject = new Subject(); + const refreshSubject = new Subject(); + + const mockAlarmService = { + initialize: vi.fn(), + resolveAlarm: vi.fn(), + vm$: vmSubject.asObservable() + }; + + const mockPresenter = { + toRows: vi.fn().mockReturnValue([]) + }; + + const mockRefreshService = { + getRefreshRequested$: vi.fn().mockReturnValue(refreshSubject.asObservable()) + }; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + schemas: [NO_ERRORS_SCHEMA], + imports: [AlarmWidgetComponent, MockElapsedTimePipe], + providers: [ + { provide: AlarmManagementService, useValue: mockAlarmService }, + { provide: AlarmManagementTablePresenterService, useValue: mockPresenter }, + { provide: AlarmManagementRefreshService, useValue: mockRefreshService } + ] + }).compileComponents(); + + fixture = TestBed.createComponent(AlarmWidgetComponent); + component = fixture.componentInstance; + }); + + it('dovrebbe essere creato', () => { + expect(component).toBeTruthy(); + }); + + it('dovrebbe inizializzare il servizio al caricamento (ngOnInit)', () => { + fixture.detectChanges(); + expect(mockAlarmService.initialize).toHaveBeenCalled(); + }); + + it('dovrebbe mostrare lo stato di caricamento se vm è null', () => { + fixture.detectChanges(); + const compiled = fixture.nativeElement as HTMLElement; + expect(compiled.textContent).toContain('Caricamento allarmi in corso'); + }); + + it('dovrebbe mostrare il messaggio "Nessun allarme" se la lista è vuota', () => { + vmSubject.next({ alarms: [], resolvingId: null, resolveError: null }); + fixture.detectChanges(); + + const compiled = fixture.nativeElement as HTMLElement; + expect(compiled.textContent).toContain('Nessun allarme attivo al momento'); + }); + + it('dovrebbe chiamare resolveAlarm quando onResolve viene invocato', () => { + const alarmId = '123'; + component.onResolve(alarmId); + expect(mockAlarmService.resolveAlarm).toHaveBeenCalledWith(alarmId); + }); + + it('dovrebbe ricaricare i dati quando il refresh service emette', () => { + fixture.detectChanges(); + mockAlarmService.initialize.mockClear(); + + refreshSubject.next(); + + expect(mockAlarmService.initialize).toHaveBeenCalled(); + }); + + it('dovrebbe calcolare le righe correttamente tramite il presenter', () => { + const alarms = [{ id: '1', name: 'Test' }]; + vmSubject.next({ alarms, resolvingId: '1' }); + + fixture.detectChanges(); + + expect(mockPresenter.toRows).toHaveBeenCalledWith(alarms, '1'); + }); +}); \ No newline at end of file diff --git a/frontend/test/integration/app/features/dashboard/components/alarms-widget/alarms-widget.integration.spec.ts b/frontend/test/integration/app/features/dashboard/components/alarms-widget/alarms-widget.integration.spec.ts new file mode 100644 index 00000000..9a431e91 --- /dev/null +++ b/frontend/test/integration/app/features/dashboard/components/alarms-widget/alarms-widget.integration.spec.ts @@ -0,0 +1,88 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { BehaviorSubject } from 'rxjs'; +import { beforeEach, describe, expect, it, vi } from 'vitest'; +import { AlarmPriority } from 'src/app/core/alarm/models/alarm-priority.enum'; +import { AlarmManagementRefreshService } from 'src/app/core/alarm/services/alarm-management-refresh.service'; +import { AlarmListVm } from 'src/app/features/alarm-management/models/alarm-list-vm.model'; +import { AlarmManagementService } from 'src/app/features/alarm-management/services/alarm-management.service'; +import { AlarmWidgetComponent } from 'src/app/features/dashboard/components/alarms-widget/alarms-widget.component'; + +describe('AlarmWidget feature integration', () => { + let fixture: ComponentFixture; + let component: AlarmWidgetComponent; + let vmSubject: BehaviorSubject; + let refreshSubject: BehaviorSubject; + + const alarmManagementStub = { + vm$: undefined as unknown, + initialize: vi.fn(), + resolveAlarm: vi.fn(), + }; + + const refreshStub = { + getRefreshRequested$: vi.fn(), + }; + + beforeEach(async () => { + vi.clearAllMocks(); + + vmSubject = new BehaviorSubject({ + alarms: [ + { + id: 'a-1', + alarmRuleId: 'rule-1', + alarmName: 'Antipanico', + priority: AlarmPriority.RED, + activationTime: '2026-04-11T10:00:00.000Z', + resolutionTime: null, + position: 'Camera 1', + userId: null, + }, + ], + currentPage: 1, + pageLimit: 6, + pageOffset: 0, + canGoPrevious: false, + canGoNext: false, + isResolving: false, + resolvingId: null, + resolveError: null, + }); + refreshSubject = new BehaviorSubject(void 0); + + alarmManagementStub.vm$ = vmSubject.asObservable(); + refreshStub.getRefreshRequested$.mockReturnValue(refreshSubject.asObservable()); + + await TestBed.configureTestingModule({ + imports: [AlarmWidgetComponent], + providers: [ + { provide: AlarmManagementService, useValue: alarmManagementStub }, + { provide: AlarmManagementRefreshService, useValue: refreshStub }, + ], + }).compileComponents(); + + fixture = TestBed.createComponent(AlarmWidgetComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('RF44-OBL init widget invoca initialize service', () => { + expect(component).toBeTruthy(); + expect(alarmManagementStub.initialize).toHaveBeenCalled(); + }); + + it('RF44-OBL click azione allarme delega resolveAlarm', () => { + const actionButton = fixture.nativeElement.querySelector('button[aria-label^="Gestisci allarme"]'); + actionButton?.dispatchEvent(new MouseEvent('click')); + + expect(alarmManagementStub.resolveAlarm).toHaveBeenCalledWith('a-1'); + }); + + it('RF44-OBL refresh esterno reinizializza la tabella', () => { + const callsBefore = alarmManagementStub.initialize.mock.calls.length; + + refreshSubject.next(); + + expect(alarmManagementStub.initialize.mock.calls.length).toBeGreaterThan(callsBefore); + }); +}); diff --git a/frontend/test/integration/app/features/dashboard/components/analytics-widget/analytics-widget.component.deep.integration.spec.ts b/frontend/test/integration/app/features/dashboard/components/analytics-widget/analytics-widget.component.deep.integration.spec.ts new file mode 100644 index 00000000..c762d178 --- /dev/null +++ b/frontend/test/integration/app/features/dashboard/components/analytics-widget/analytics-widget.component.deep.integration.spec.ts @@ -0,0 +1,94 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { AnalyticsWidgetComponent } from 'src/app/features/dashboard/components/analytics-widget/analytics-widget.component'; +import { AnalyticsApiService } from 'src/app/features/analytics/services/analytics-api.service'; +import { of } from 'rxjs'; +import { describe, it, expect, beforeEach, vi } from 'vitest'; +import { AnalyticsDto } from 'src/app/features/analytics/models/analytics.model'; +import { Apartment } from 'src/app/features/apartment-monitor/models/apartment.model'; + +describe('AnalyticsComponent', () => { + let component: AnalyticsWidgetComponent; + let fixture: ComponentFixture; + + const mockApartments: Apartment[] = [ + { id: '1', name: 'Appartamento 1', isEnabled: true, rooms: [] }, + { id: '2', name: 'Appartamento 2', isEnabled: true, rooms: [] } + ]; + + const mockAnalyticsData: AnalyticsDto = { + apartmentId:"1", + analyticsInfo: [ + { + title: "Analisi Anomalie Impianto", + metric: "plant-anomalies", + unit: "anomalie", + labels: ["Gen", "Feb", "Mar", "Apr", "Mag", "Giu", "Lug", "Ago"], + datasets: [ + { + id: "anomalies", + name: "Anomalie Rilevate", + data: [1, 0, 2, 1, 0, 3, 1, 0] + } + ], + suggestions: + { + messages:[], + isSuggestion: false + } + } + ] + }; + + // Creiamo un oggetto mock per il servizio + const mockAnalyticsService = { + getAllApartments: vi.fn(() => of(mockApartments)), + getAnalytics: vi.fn((id: string) => of(mockAnalyticsData)) + }; + + beforeEach(async () => { + + await TestBed.configureTestingModule({ + imports: [AnalyticsWidgetComponent], + providers: [ + { provide: AnalyticsApiService, useValue: mockAnalyticsService } + ] + }).compileComponents(); + + fixture = TestBed.createComponent(AnalyticsWidgetComponent); + component = fixture.componentInstance; + + vi.clearAllMocks(); + }); + + it('viene creato', () => { + expect(component).toBeTruthy(); + }); + + it('carica il primo appartmento di default', () => { + fixture.detectChanges(); + + expect(mockAnalyticsService.getAllApartments).toHaveBeenCalled(); + + expect(mockAnalyticsService.getAnalytics).toHaveBeenCalledWith('1', expect.anything()); + }); + + it('aggiorna grafici al cambio appartamento', () => { + fixture.detectChanges(); + + const mockEvent = { target: { value: '2' } } as unknown as Event; + component.onApartmentChange(mockEvent); + + expect(mockAnalyticsService.getAnalytics).toHaveBeenCalledWith('2', expect.anything()); + }); + + it('should return undefined if metric is not found', () => { + const result = component.getChartByMetric(mockAnalyticsData, 'unknown_metric'); + expect(result).toBeUndefined(); + }); + + it('should find the correct metric in getChartByMetric', () => { + const result = component.getChartByMetric(mockAnalyticsData, 'plant-anomalies'); + expect(result).toBeDefined(); + expect(result?.metric).toBe('plant-anomalies'); + }); +}); \ No newline at end of file diff --git a/frontend/test/integration/app/features/dashboard/components/analytics-widget/analytics-widget.integration.spec.ts b/frontend/test/integration/app/features/dashboard/components/analytics-widget/analytics-widget.integration.spec.ts new file mode 100644 index 00000000..77062fb5 --- /dev/null +++ b/frontend/test/integration/app/features/dashboard/components/analytics-widget/analytics-widget.integration.spec.ts @@ -0,0 +1,119 @@ +import { Component, input } from '@angular/core'; +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { of } from 'rxjs'; +import { beforeEach, describe, expect, it, vi } from 'vitest'; +import { AnalyticsApiService } from 'src/app/features/analytics/services/analytics-api.service'; +import { AnalyticsWidgetComponent } from 'src/app/features/dashboard/components/analytics-widget/analytics-widget.component'; +import { AlarmsSentResolvedChartComponent } from 'src/app/features/analytics/components/alarms-sent-resolved-chart/alarms-sent-resolved-chart.component'; +import { EnergyConsumptionChartComponent } from 'src/app/features/analytics/components/energy-consumption-chart/energy-consumption-chart.component'; + +@Component({ + selector: 'app-energy-consumption-chart', + standalone: true, + template: '
', +}) +class EnergyConsumptionChartStubComponent { + public readonly chartInfo = input(); + public readonly showSuggestions = input(false); +} + +@Component({ + selector: 'app-alarms-sent-resolved-chart', + standalone: true, + template: '
', +}) +class AlarmsSentResolvedChartStubComponent { + public readonly chartInfo = input(); + public readonly showSuggestions = input(false); +} + +describe('AnalyticsWidget feature integration', () => { + let fixture: ComponentFixture; + let component: AnalyticsWidgetComponent; + + const apartments = [ + { + id: 'plant-1', + name: 'Appartamento 1', + rooms: [ + { + id: 'room-1', + name: 'Soggiorno', + devices: [{ id: 'd1', name: 'Termostato', datapoints: [] }], + }, + ], + }, + { + id: 'plant-2', + name: 'Appartamento 2', + rooms: [], + }, + ]; + + const analyticsData = { + apartmentId: 'plant-1', + analyticsInfo: [ + { + title: 'Consumi', + metric: 'plant-consumption', + unit: 'kWh', + labels: ['Gen'], + datasets: [{ id: 'd1', name: 'Consumo', data: [12] }], + suggestions: { messages: [], isSuggestion: false }, + }, + { + title: 'Allarmi', + metric: 'ward-resolved-alarm', + unit: 'n', + labels: ['Gen'], + datasets: [{ id: 'd2', name: 'Risolti', data: [2] }], + suggestions: { messages: [], isSuggestion: false }, + }, + ], + }; + + const analyticsApiStub = { + getAllApartments: vi.fn(() => of(apartments)), + getAnalytics: vi.fn(() => of(analyticsData)), + }; + + beforeEach(async () => { + vi.clearAllMocks(); + + await TestBed.configureTestingModule({ + imports: [AnalyticsWidgetComponent], + providers: [{ provide: AnalyticsApiService, useValue: analyticsApiStub }], + }) + .overrideComponent(AnalyticsWidgetComponent, { + remove: { imports: [EnergyConsumptionChartComponent, AlarmsSentResolvedChartComponent] }, + add: { imports: [EnergyConsumptionChartStubComponent, AlarmsSentResolvedChartStubComponent] }, + }) + .compileComponents(); + + fixture = TestBed.createComponent(AnalyticsWidgetComponent); + component = fixture.componentInstance; + }); + + it('RF45-OBL inizializza widget e carica analytics del primo appartamento', () => { + fixture.detectChanges(); + + expect(analyticsApiStub.getAllApartments).toHaveBeenCalledTimes(1); + expect(analyticsApiStub.getAnalytics).toHaveBeenCalledWith('plant-1', false); + }); + + it('RF45-OBL cambio appartamento aggiorna richiesta analytics', () => { + fixture.detectChanges(); + + component.onApartmentChange({ target: { value: 'plant-2' } } as unknown as Event); + + expect(analyticsApiStub.getAnalytics).toHaveBeenCalledWith('plant-2', false); + }); + + it('RF45-OBL renderizza overview appartamento selezionato', () => { + fixture.detectChanges(); + + const overview = fixture.nativeElement.querySelector('plant-overview'); + expect(overview).not.toBeNull(); + expect(fixture.nativeElement.textContent).toContain('Appartamento Monitorato'); + }); +}); diff --git a/frontend/test/integration/app/features/dashboard/components/dashboard-page/dashboard-page.integration.spec.ts b/frontend/test/integration/app/features/dashboard/components/dashboard-page/dashboard-page.integration.spec.ts new file mode 100644 index 00000000..28fcd8fd --- /dev/null +++ b/frontend/test/integration/app/features/dashboard/components/dashboard-page/dashboard-page.integration.spec.ts @@ -0,0 +1,45 @@ +import { Component } from '@angular/core'; +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { By } from '@angular/platform-browser'; +import { beforeEach, describe, expect, it } from 'vitest'; +import { DashboardComponent } from 'src/app/features/dashboard/components/dashboard-page/dashboard-page.component'; +import { AnalyticsWidgetComponent } from 'src/app/features/dashboard/components/analytics-widget/analytics-widget.component'; +import { AlarmWidgetComponent } from 'src/app/features/dashboard/components/alarms-widget/alarms-widget.component'; + +@Component({ selector: 'app-alarms-widget', standalone: true, template: '
Fake Alarm Widget
' }) +class FakeAlarmWidgetComponent {} + +@Component({ selector: 'app-analytics-widget', standalone: true, template: '
Fake Analytics Widget
' }) +class FakeAnalyticsWidgetComponent {} + +describe('Dashboard feature integration', () => { + let fixture: ComponentFixture; + let component: DashboardComponent; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [DashboardComponent], + }) + .overrideComponent(DashboardComponent, { + remove: { imports: [AnalyticsWidgetComponent, AlarmWidgetComponent] }, + add: { imports: [FakeAnalyticsWidgetComponent, FakeAlarmWidgetComponent] }, + }) + .compileComponents(); + + fixture = TestBed.createComponent(DashboardComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('RF43-OBL renderizza la dashboard', () => { + expect(component).toBeTruthy(); + }); + + it('RF44-OBL visualizza widget allarmi', () => { + expect(fixture.debugElement.query(By.css('app-alarms-widget'))).not.toBeNull(); + }); + + it('RF45-OBL visualizza widget analytics', () => { + expect(fixture.debugElement.query(By.css('app-analytics-widget'))).not.toBeNull(); + }); +}); diff --git a/frontend/test/integration/app/features/dashboard/components/plant-overview/plant-overview.component.integration.spec.ts b/frontend/test/integration/app/features/dashboard/components/plant-overview/plant-overview.component.integration.spec.ts new file mode 100644 index 00000000..613ed53e --- /dev/null +++ b/frontend/test/integration/app/features/dashboard/components/plant-overview/plant-overview.component.integration.spec.ts @@ -0,0 +1,60 @@ +import { TestBed, ComponentFixture } from '@angular/core/testing'; +import { PlantOverviewComponent } from 'src/app/features/dashboard/components/plant-overview/plant-overview.component'; +import { describe, it, expect, beforeEach } from 'vitest'; + +describe('PlantOverviewComponent', () => { + let component: PlantOverviewComponent; + let fixture: ComponentFixture; + + const mockData = { + id: '1', + name: 'Casa Test', + rooms: [ + { id: 'r1', name: 'Soggiorno', devices: [{ id: 'd1', name: 'Luce' }] }, + { id: 'r2', name: 'Camera', devices: [] } + ] + }; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [PlantOverviewComponent], + }).compileComponents(); + + fixture = TestBed.createComponent(PlantOverviewComponent); + component = fixture.componentInstance; + }); + + it('1. Dovrebbe mostrare il nome dell impianto', () => { + component.apartment = mockData; + fixture.detectChanges(); + + const html = fixture.nativeElement as HTMLElement; + expect(html.textContent).toContain('Casa Test'); + }); + + it('2. Dovrebbe mostrare i nomi delle stanze', () => { + component.apartment = mockData; + fixture.detectChanges(); + + const html = fixture.nativeElement as HTMLElement; + expect(html.textContent).toContain('Soggiorno'); + expect(html.textContent).toContain('Camera'); + }); + + it('3. Dovrebbe gestire il caso senza dispositivi', () => { + component.apartment = mockData; + fixture.detectChanges(); + + const html = fixture.nativeElement as HTMLElement; + expect(html.textContent).toContain('Nessun dispositivo configurato'); + }); + + it('4. Non dovrebbe mostrare nulla se apartment è null', () => { + component.apartment = null; + fixture.detectChanges(); + + const html = fixture.nativeElement as HTMLElement; + + expect(html.querySelector('header')).toBeNull(); + }); +}); \ No newline at end of file diff --git a/frontend/test/integration/app/features/device-interaction/components/endpoint-table/endpoint-table.component.deep.integration.spec.ts b/frontend/test/integration/app/features/device-interaction/components/endpoint-table/endpoint-table.component.deep.integration.spec.ts new file mode 100644 index 00000000..b2f775ac --- /dev/null +++ b/frontend/test/integration/app/features/device-interaction/components/endpoint-table/endpoint-table.component.deep.integration.spec.ts @@ -0,0 +1,238 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { Subject, of, throwError } from 'rxjs'; +import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'; +import { DeviceType } from 'src/app/features/device-interaction/models/device-type.enum'; +import { WritableEndpointRow } from 'src/app/features/device-interaction/models/writable-endpoint-row.model'; +import { DeviceApiService } from 'src/app/features/device-interaction/services/device-api.service'; +import { DeviceValuePointDto } from 'src/app/features/device-interaction/models/write-datapoint-request.model'; +import { EndpointTableComponent } from 'src/app/features/device-interaction/components/endpoint-table/endpoint-table.component'; + +describe('EndpointTableComponent deep integration', () => { + let component: EndpointTableComponent; + let fixture: ComponentFixture; + + const mappedRow: WritableEndpointRow = { + roomId: 'room-1', + roomName: 'Soggiorno', + deviceId: 'device-1', + deviceName: 'Termostato Living', + deviceType: DeviceType.THERMOSTAT, + datapointId: 'dp-cmd-1', + datapointName: 'SFE_Cmd_ChangeOverMode', + datapointSfeType: 'SFE_Cmd_ChangeOverMode', + enumValues: ['Cool', 'Heat'], + }; + + const secondRowSameRoom: WritableEndpointRow = { + roomId: 'room-1', + roomName: 'Soggiorno', + deviceId: 'device-2', + deviceName: 'Luce corridoio', + deviceType: DeviceType.LIGHT, + datapointId: 'dp-cmd-2', + datapointName: 'SFE_Cmd_OnOff', + datapointSfeType: 'SFE_Cmd_OnOff', + enumValues: ['Off', 'On'], + }; + + const deviceApiMock = { + getWritableEndpointRows: vi.fn(), + getCurrentValuePointsByDeviceIds: vi.fn(), + writeDatapointValue: vi.fn(), + }; + + beforeEach(async () => { + vi.useRealTimers(); + vi.clearAllMocks(); + + deviceApiMock.getWritableEndpointRows.mockReturnValue(of([mappedRow, secondRowSameRoom])); + deviceApiMock.getCurrentValuePointsByDeviceIds.mockReturnValue( + of( + new Map([ + [ + 'device-1', + [{ datapointId: 'dp-state-1', name: 'SFE_State_ChangeOverMode', value: 'Heat' }], + ], + ['device-2', [{ datapointId: 'dp-cmd-2', name: 'SFE_Cmd_OnOff', value: 'Off' }]], + ]), + ), + ); + deviceApiMock.writeDatapointValue.mockReturnValue(of(void 0)); + + await TestBed.configureTestingModule({ + imports: [EndpointTableComponent], + providers: [{ provide: DeviceApiService, useValue: deviceApiMock }], + }).compileComponents(); + + fixture = TestBed.createComponent(EndpointTableComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + afterEach(() => { + fixture?.destroy(); + vi.useRealTimers(); + }); + + it('groupRows creates one group for same room id and trackBy returns stable keys', () => { + const groups = fixture.nativeElement.querySelectorAll('.endpoint-table__group'); + + expect(groups.length).toBe(1); + expect(component.trackByGroup(0, { roomId: 'room-1', roomName: '', rows: [] })).toBe('room-1'); + expect(component.trackByRow(0, mappedRow)).toContain('room-1::device-1::dp-cmd-1'); + }); + + it('getCurrentValue resolves exact datapoint match', () => { + const exact = component.getCurrentValue(secondRowSameRoom); + expect(exact).toBe('Off'); + }); + + it('getCurrentValue uses first available value when exact and semantic matches are missing', () => { + const fallbackRow: WritableEndpointRow = { + ...secondRowSameRoom, + deviceId: 'device-3', + datapointId: 'dp-unknown', + datapointName: 'Unknown_Command_Name', + datapointSfeType: 'Unknown_Command_Name', + }; + + deviceApiMock.getCurrentValuePointsByDeviceIds.mockReturnValueOnce( + of( + new Map([ + [ + 'device-3', + [ + { datapointId: 'x-1', name: 'x-1', value: 'FallbackValue' }, + { datapointId: 'x-2', name: 'x-2', value: 'SecondValue' }, + ], + ], + ]), + ), + ); + deviceApiMock.getWritableEndpointRows.mockReturnValueOnce(of([fallbackRow])); + + fixture.destroy(); + fixture = TestBed.createComponent(EndpointTableComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + + expect(component.getCurrentValue(fallbackRow)).toBe('FallbackValue'); + }); + + it('selected values default to first enum and can be changed', () => { + expect(component.getSelectedValue(mappedRow)).toBe('Cool'); + + component.onSelectionChange(mappedRow, 'Heat'); + + expect(component.getSelectedValue(mappedRow)).toBe('Heat'); + }); + + it('onWriteRow success toggles executing state and exposes success feedback', () => { + const write$ = new Subject(); + deviceApiMock.writeDatapointValue.mockReturnValueOnce(write$.asObservable()); + + component.onSelectionChange(mappedRow, 'Heat'); + component.onWriteRow(mappedRow); + + expect(component.isRowExecuting(mappedRow)).toBe(true); + expect(deviceApiMock.writeDatapointValue).toHaveBeenCalledWith({ + datapointId: 'dp-cmd-1', + value: 'Heat', + }); + + write$.next(); + write$.complete(); + + expect(component.isRowExecuting(mappedRow)).toBe(false); + expect(component.getRowFeedback(mappedRow)?.type).toBe('success'); + }); + + it('onWriteRow ignores duplicate invocation while row is already executing', () => { + const write$ = new Subject(); + deviceApiMock.writeDatapointValue.mockReturnValueOnce(write$.asObservable()); + + component.onWriteRow(mappedRow); + component.onWriteRow(mappedRow); + + expect(deviceApiMock.writeDatapointValue).toHaveBeenCalledTimes(1); + + write$.complete(); + }); + + it('onWriteRow with no selectable enum value does not call API', () => { + const rowWithoutEnum: WritableEndpointRow = { + ...mappedRow, + datapointId: 'dp-no-enum', + enumValues: [], + }; + + component.onWriteRow(rowWithoutEnum); + + expect(deviceApiMock.writeDatapointValue).not.toHaveBeenCalled(); + }); + + it('onWriteRow error path sets error feedback and clears executing state', () => { + deviceApiMock.writeDatapointValue.mockReturnValueOnce(throwError(() => new Error('boom'))); + + component.onWriteRow(mappedRow); + + expect(component.isRowExecuting(mappedRow)).toBe(false); + expect(component.getRowFeedback(mappedRow)?.type).toBe('error'); + }); + + it('feedback is auto-cleared after timeout', () => { + vi.useFakeTimers(); + + component.onWriteRow(mappedRow); + expect(component.getRowFeedback(mappedRow)?.type).toBe('success'); + + vi.advanceTimersByTime(5001); + + expect(component.getRowFeedback(mappedRow)).toBeNull(); + }); + + it('active-plant-changed event resets transient state and triggers a refresh', () => { + const callsBefore = deviceApiMock.getWritableEndpointRows.mock.calls.length; + + component.onSelectionChange(mappedRow, 'Heat'); + component.loadError = 'manual-error'; + + globalThis.dispatchEvent( + new CustomEvent('active-plant-changed', { + detail: { plantId: 'plant-2' }, + }), + ); + + expect(component.getSelectedValue(mappedRow)).toBe('Cool'); + expect(component.loadError).toBe(''); + expect(deviceApiMock.getWritableEndpointRows.mock.calls.length).toBeGreaterThan(callsBefore); + }); + + it('polling periodically reloads current values', () => { + vi.useFakeTimers(); + fixture.destroy(); + + fixture = TestBed.createComponent(EndpointTableComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + + const callsBefore = deviceApiMock.getCurrentValuePointsByDeviceIds.mock.calls.length; + + vi.advanceTimersByTime(15000); + + expect(deviceApiMock.getCurrentValuePointsByDeviceIds.mock.calls.length).toBeGreaterThan(callsBefore); + }); + + it('load current values error branch keeps component usable and returns fallback dash', () => { + deviceApiMock.getCurrentValuePointsByDeviceIds.mockReturnValueOnce( + throwError(() => new Error('network')), + ); + + fixture.destroy(); + fixture = TestBed.createComponent(EndpointTableComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + + expect(component.getCurrentValue(mappedRow)).toBe('-'); + }); +}); diff --git a/frontend/test/integration/app/features/device-interaction/components/endpoint-table/endpoint-table.component.integration.spec.ts b/frontend/test/integration/app/features/device-interaction/components/endpoint-table/endpoint-table.component.integration.spec.ts new file mode 100644 index 00000000..641d7b5c --- /dev/null +++ b/frontend/test/integration/app/features/device-interaction/components/endpoint-table/endpoint-table.component.integration.spec.ts @@ -0,0 +1,91 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { of } from 'rxjs'; +import { beforeEach, describe, expect, it, vi } from 'vitest'; +import { DeviceType } from 'src/app/features/device-interaction/models/device-type.enum'; +import { WritableEndpointRow } from 'src/app/features/device-interaction/models/writable-endpoint-row.model'; +import { DeviceApiService } from 'src/app/features/device-interaction/services/device-api.service'; +import { DeviceValuePointDto } from 'src/app/features/device-interaction/models/write-datapoint-request.model'; +import { EndpointTableComponent } from 'src/app/features/device-interaction/components/endpoint-table/endpoint-table.component'; + +describe('EndpointTableComponent', () => { + let component: EndpointTableComponent; + let fixture: ComponentFixture; + + const mappedRow: WritableEndpointRow = { + roomId: 'room-1', + roomName: 'Soggiorno', + deviceId: 'device-1', + deviceName: 'Termostato Living', + deviceType: DeviceType.THERMOSTAT, + datapointId: 'dp-1', + datapointName: 'SFE_Cmd_ChangeOverMode', + datapointSfeType: 'SFE_Cmd_ChangeOverMode', + enumValues: ['Cool', 'Heat'], + }; + + const unknownRow: WritableEndpointRow = { + roomId: 'room-1', + roomName: 'Soggiorno', + deviceId: 'device-2', + deviceName: 'Dispositivo Nuovo', + deviceType: DeviceType.LIGHT, + datapointId: 'dp-2', + datapointName: 'SFE_Cmd_FutureFeature', + datapointSfeType: 'SFE_Cmd_FutureFeature', + enumValues: ['Off', 'On'], + }; + + const currentValuesByDevice = new Map([ + [ + 'device-1', + [ + { + datapointId: 'dp-state-1', + name: 'SFE_State_ChangeOverMode', + value: 'Heat', + }, + ], + ], + ]); + + const deviceApiMock = { + getWritableEndpointRows: vi.fn().mockReturnValue(of([mappedRow, unknownRow])), + getCurrentValuePointsByDeviceIds: vi.fn().mockReturnValue(of(currentValuesByDevice)), + writeDatapointValue: vi.fn().mockReturnValue(of(void 0)), + }; + + beforeEach(async () => { + vi.clearAllMocks(); + + await TestBed.configureTestingModule({ + imports: [EndpointTableComponent], + providers: [{ provide: DeviceApiService, useValue: deviceApiMock }], + }).compileComponents(); + + fixture = TestBed.createComponent(EndpointTableComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('creates component and loads writable endpoints', () => { + expect(component).toBeTruthy(); + expect(deviceApiMock.getWritableEndpointRows).toHaveBeenCalledTimes(1); + expect(deviceApiMock.getCurrentValuePointsByDeviceIds).toHaveBeenCalledTimes(1); + }); + + it('renders mapped endpoint label for known sfeType', () => { + expect(component.getEndpointLabel(mappedRow)).toBe('Comando cambio modalita HVAC'); + }); + + it('falls back to a runtime humanized label when sfeType is unknown', () => { + expect(component.getEndpointLabel(unknownRow)).toBe('Comando future feature'); + }); + + it('returns semantic current value by matching Cmd endpoint to State datapoint', () => { + expect(component.getCurrentValue(mappedRow)).toBe('Heat'); + }); + + it('returns fallback when current datapoint value is unavailable', () => { + expect(component.getCurrentValue(unknownRow)).toBe('-'); + }); +}); diff --git a/frontend/test/integration/app/features/device-interaction/components/endpoint-table/endpoint-table.integration.spec.ts b/frontend/test/integration/app/features/device-interaction/components/endpoint-table/endpoint-table.integration.spec.ts new file mode 100644 index 00000000..dd15d9cc --- /dev/null +++ b/frontend/test/integration/app/features/device-interaction/components/endpoint-table/endpoint-table.integration.spec.ts @@ -0,0 +1,85 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { of } from 'rxjs'; +import { beforeEach, describe, expect, it, vi } from 'vitest'; +import { DeviceType } from 'src/app/features/device-interaction/models/device-type.enum'; +import { WritableEndpointRow } from 'src/app/features/device-interaction/models/writable-endpoint-row.model'; +import { DeviceApiService } from 'src/app/features/device-interaction/services/device-api.service'; +import { DeviceValuePointDto } from 'src/app/features/device-interaction/models/write-datapoint-request.model'; +import { EndpointTableComponent } from 'src/app/features/device-interaction/components/endpoint-table/endpoint-table.component'; + +describe('DeviceInteraction feature integration', () => { + let component: EndpointTableComponent; + let fixture: ComponentFixture; + + const mappedRow: WritableEndpointRow = { + roomId: 'room-1', + roomName: 'Soggiorno', + deviceId: 'device-1', + deviceName: 'Termostato Living', + deviceType: DeviceType.THERMOSTAT, + datapointId: 'dp-1', + datapointName: 'SFE_Cmd_ChangeOverMode', + datapointSfeType: 'SFE_Cmd_ChangeOverMode', + enumValues: ['Cool', 'Heat'], + }; + + const unknownRow: WritableEndpointRow = { + roomId: 'room-1', + roomName: 'Soggiorno', + deviceId: 'device-2', + deviceName: 'Dispositivo Nuovo', + deviceType: DeviceType.LIGHT, + datapointId: 'dp-2', + datapointName: 'SFE_Cmd_FutureFeature', + datapointSfeType: 'SFE_Cmd_FutureFeature', + enumValues: ['Off', 'On'], + }; + + const currentValuesByDevice = new Map([ + [ + 'device-1', + [ + { + datapointId: 'dp-state-1', + name: 'SFE_State_ChangeOverMode', + value: 'Heat', + }, + ], + ], + ]); + + const deviceApiStub = { + getWritableEndpointRows: vi.fn().mockReturnValue(of([mappedRow, unknownRow])), + getCurrentValuePointsByDeviceIds: vi.fn().mockReturnValue(of(currentValuesByDevice)), + writeDatapointValue: vi.fn().mockReturnValue(of(void 0)), + }; + + beforeEach(async () => { + vi.clearAllMocks(); + + await TestBed.configureTestingModule({ + imports: [EndpointTableComponent], + providers: [{ provide: DeviceApiService, useValue: deviceApiStub }], + }).compileComponents(); + + fixture = TestBed.createComponent(EndpointTableComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('RF79-OBL carica endpoint scrivibili e valori correnti alla init', () => { + expect(component).toBeTruthy(); + expect(deviceApiStub.getWritableEndpointRows).toHaveBeenCalledTimes(1); + expect(deviceApiStub.getCurrentValuePointsByDeviceIds).toHaveBeenCalledTimes(1); + }); + + it('RF80-OBL espone label endpoint leggibili per sfeType noti e ignoti', () => { + expect(component.getEndpointLabel(mappedRow)).toBe('Comando cambio modalita HVAC'); + expect(component.getEndpointLabel(unknownRow)).toBe('Comando future feature'); + }); + + it('RF81-OBL risolve valore corrente dal datapoint state corrispondente', () => { + expect(component.getCurrentValue(mappedRow)).toBe('Heat'); + expect(component.getCurrentValue(unknownRow)).toBe('-'); + }); +}); diff --git a/frontend/test/integration/app/features/device-interaction/services/device-api.service.integration.spec.ts b/frontend/test/integration/app/features/device-interaction/services/device-api.service.integration.spec.ts new file mode 100644 index 00000000..adc422f7 --- /dev/null +++ b/frontend/test/integration/app/features/device-interaction/services/device-api.service.integration.spec.ts @@ -0,0 +1,420 @@ +import { TestBed } from '@angular/core/testing'; +import { HttpTestingController, provideHttpClientTesting } from '@angular/common/http/testing'; +import { provideHttpClient } from '@angular/common/http'; +import { afterEach, beforeEach, describe, expect, it } from 'vitest'; +import { firstValueFrom } from 'rxjs'; +import { API_BASE_URL } from 'src/app/core/tokens/api-base-url.token'; +import { DeviceApiService } from 'src/app/features/device-interaction/services/device-api.service'; + +describe('DeviceApiService', () => { + let service: DeviceApiService; + let httpMock: HttpTestingController; + let storage: { + getItem: (key: string) => string | null; + setItem: (key: string, value: string) => void; + removeItem: (key: string) => void; + }; + + beforeEach(() => { + const values = new Map(); + storage = { + getItem: (key: string) => values.get(key) ?? null, + setItem: (key: string, value: string) => { + values.set(key, value); + }, + removeItem: (key: string) => { + values.delete(key); + }, + }; + + Object.defineProperty(globalThis, 'localStorage', { + value: storage, + configurable: true, + }); + + storage.setItem('activePlantId', 'plant-1'); + + TestBed.configureTestingModule({ + providers: [ + DeviceApiService, + provideHttpClient(), + provideHttpClientTesting(), + { provide: API_BASE_URL, useValue: 'http://localhost:3000' }, + ], + }); + + service = TestBed.inject(DeviceApiService); + httpMock = TestBed.inject(HttpTestingController); + }); + + afterEach(() => { + httpMock?.verify(); + storage?.removeItem('activePlantId'); + }); + + it('mappa i datapoint dal payload plant nella stanza richiesta', async () => { + const roomPromise = firstValueFrom(service.getRoom('room-1')); + + const request = httpMock.expectOne('http://localhost:3000/plant?plantid=plant-1'); + expect(request.request.method).toBe('GET'); + + request.flush({ + id: 'plant-1', + name: 'Plant Demo', + rooms: [ + { + id: 'room-1', + name: 'Soggiorno', + devices: [ + { + id: 'device-1', + name: 'Luce principale', + type: 'SF_Light', + datapoints: [ + { + id: 'dp-1', + name: 'On/Off', + readable: true, + writable: true, + valueType: 'string', + enum: ['Off', 'On'], + sfeType: 'SFE_Cmd_OnOff', + }, + ], + }, + ], + }, + ], + }); + + const room = await roomPromise; + expect(room.id).toBe('room-1'); + expect(room.devices).toHaveLength(1); + expect(room.devices[0].datapoints).toHaveLength(1); + expect(room.devices[0].datapoints[0]).toEqual({ + id: 'dp-1', + name: 'On/Off', + readable: true, + writable: true, + valueType: 'string', + enum: ['Off', 'On'], + sfeType: 'SFE_Cmd_OnOff', + }); + }); + + it('invia la scrittura datapoint su POST /api/device con payload corretto', async () => { + const writePromise = firstValueFrom( + service.writeDatapointValue({ datapointId: 'dp-1', value: 'On' }), + ); + + const request = httpMock.expectOne('http://localhost:3000/device'); + expect(request.request.method).toBe('POST'); + expect(request.request.body).toEqual({ datapointId: 'dp-1', value: 'On' }); + + request.flush({ message: 'Datapoint value updated successfully', statusCode: 202 }); + + await writePromise; + }); + + it('propaga errore quando la scrittura datapoint fallisce', async () => { + const writePromise = firstValueFrom( + service.writeDatapointValue({ datapointId: 'dp-1', value: 'On' }), + ); + + const request = httpMock.expectOne('http://localhost:3000/device'); + request.flush({ message: 'failure' }, { status: 503, statusText: 'Service Unavailable' }); + + await expect(writePromise).rejects.toBeTruthy(); + }); + + it('mappa le righe endpoint scrivibili includendo sfeType e tipo corretto', async () => { + const rowsPromise = firstValueFrom(service.getWritableEndpointRows()); + + const request = httpMock.expectOne('http://localhost:3000/plant?plantid=plant-1'); + expect(request.request.method).toBe('GET'); + + request.flush({ + id: 'plant-1', + name: 'Plant Demo', + rooms: [ + { + id: 'room-1', + name: 'Soggiorno', + devices: [ + { + id: 'device-thermo-like', + name: 'Dispositivo ambiguo', + type: 'SF_Light', + subType: 'SS_Unknown', + datapoints: [ + { + id: 'dp-mode-1', + name: 'SFE_Cmd_ChangeOverMode', + readable: true, + writable: true, + valueType: 'string', + enum: ['Cool', 'Heat'], + sfeType: 'SFE_Cmd_ChangeOverMode', + }, + ], + }, + ], + }, + ], + }); + + const rows = await rowsPromise; + + expect(rows).toHaveLength(1); + expect(rows[0]).toMatchObject({ + roomId: 'room-1', + deviceId: 'device-thermo-like', + datapointId: 'dp-mode-1', + datapointSfeType: 'SFE_Cmd_ChangeOverMode', + deviceType: 'THERMOSTAT', + }); + }); + + it('non mappa come luce una porta di ingresso con tipo ambiguo', async () => { + const rowsPromise = firstValueFrom(service.getWritableEndpointRows()); + + const request = httpMock.expectOne('http://localhost:3000/plant?plantid=plant-1'); + expect(request.request.method).toBe('GET'); + + request.flush({ + id: 'plant-1', + name: 'Plant Demo', + rooms: [ + { + id: 'room-entry', + name: 'Ingresso', + devices: [ + { + id: 'device-entry-door', + name: 'Porta di Ingresso', + type: 'SF_Light', + subType: 'SS_Unknown', + datapoints: [ + { + id: 'dp-entry-1', + name: 'SFE_Cmd_OnOff', + readable: true, + writable: true, + valueType: 'string', + enum: ['Off', 'On'], + sfeType: 'SFE_Cmd_OnOff', + }, + ], + }, + ], + }, + ], + }); + + const rows = await rowsPromise; + + expect(rows).toHaveLength(1); + expect(rows[0]).toMatchObject({ + deviceId: 'device-entry-door', + datapointSfeType: 'SFE_Cmd_OnOff', + deviceType: 'ENTRANCE_DOOR', + }); + }); + + it('quando activePlantId manca, risolve il plant dall endpoint /plant/all', async () => { + storage.removeItem('activePlantId'); + + const rowsPromise = firstValueFrom(service.getWritableEndpointRows()); + + const allPlantsRequest = httpMock.expectOne('http://localhost:3000/plant/all'); + expect(allPlantsRequest.request.method).toBe('GET'); + allPlantsRequest.flush([ + { + id: 'plant-2', + name: 'Plant 2', + rooms: [], + }, + ]); + + const plantByIdRequest = httpMock.expectOne('http://localhost:3000/plant?plantid=plant-2'); + expect(plantByIdRequest.request.method).toBe('GET'); + plantByIdRequest.flush({ + id: 'plant-2', + name: 'Plant 2', + rooms: [], + }); + + const rows = await rowsPromise; + expect(rows).toEqual([]); + expect(storage.getItem('activePlantId')).toBe('plant-2'); + }); + + it('esclude dispositivi energy measure dalla tabella endpoint', async () => { + const rowsPromise = firstValueFrom(service.getWritableEndpointRows()); + + const request = httpMock.expectOne('http://localhost:3000/plant?plantid=plant-1'); + expect(request.request.method).toBe('GET'); + + request.flush({ + id: 'plant-1', + name: 'Plant Demo', + rooms: [ + { + id: 'room-1', + name: 'Soggiorno', + devices: [ + { + id: 'energy-device', + name: 'Contatore energia', + type: 'SS_ENERGY_MEASURE_TOTAL', + subType: 'SF_ENERGY', + datapoints: [ + { + id: 'dp-energy-1', + name: 'Energia', + readable: true, + writable: true, + valueType: 'string', + enum: ['Off', 'On'], + sfeType: 'SFE_Cmd_OnOff', + }, + ], + }, + { + id: 'allowed-device', + name: 'Luce corridoio', + type: 'SF_Light', + datapoints: [ + { + id: 'dp-light-1', + name: 'On/Off', + readable: true, + writable: true, + valueType: 'string', + enum: ['Off', 'On'], + sfeType: 'SFE_Cmd_OnOff', + }, + ], + }, + ], + }, + ], + }); + + const rows = await rowsPromise; + + expect(rows).toHaveLength(1); + expect(rows[0].deviceId).toBe('allowed-device'); + }); + + it('deduplica dispositivi con stesso nome mantenendo quello a priorita maggiore', async () => { + const rowsPromise = firstValueFrom(service.getWritableEndpointRows()); + + const request = httpMock.expectOne('http://localhost:3000/plant?plantid=plant-1'); + expect(request.request.method).toBe('GET'); + + request.flush({ + id: 'plant-1', + name: 'Plant Demo', + rooms: [ + { + id: 'room-1', + name: 'Soggiorno', + devices: [ + { + id: 'generic-device', + name: 'Sensore ingresso', + type: 'SS_AUTOMATION_ONOFF', + subType: 'SF_GENERIC', + datapoints: [ + { + id: 'dp-generic-1', + name: 'On/Off', + readable: true, + writable: true, + valueType: 'string', + enum: ['Off', 'On'], + sfeType: 'SFE_Cmd_OnOff', + }, + ], + }, + { + id: 'priority-device', + name: ' sensore ingresso ', + type: 'SS_SECURITY_RADARDETECTOR', + subType: 'SF_ACCESS', + datapoints: [ + { + id: 'dp-priority-1', + name: 'On/Off', + readable: true, + writable: true, + valueType: 'string', + enum: ['Off', 'On'], + sfeType: 'SFE_Cmd_OnOff', + }, + { + id: 'dp-priority-2', + name: 'Stato', + readable: true, + writable: false, + valueType: 'string', + enum: [], + sfeType: 'SFE_State_OnOff', + }, + ], + }, + ], + }, + ], + }); + + const rows = await rowsPromise; + + expect(rows).toHaveLength(1); + expect(rows[0].deviceId).toBe('priority-device'); + }); + + it('recupera i valori correnti dai device unici e li mappa per datapoint', async () => { + const valuesPromise = firstValueFrom( + service.getDatapointCurrentValuesByDeviceIds(['device-1', 'device-2', 'device-1']), + ); + + const req1 = httpMock.expectOne('http://localhost:3000/device/device-1/value'); + expect(req1.request.method).toBe('GET'); + req1.flush({ + deviceId: 'device-1', + values: [{ datapointId: 'dp-1', name: 'On/Off', value: 'On' }], + }); + + const req2 = httpMock.expectOne('http://localhost:3000/device/device-2/value'); + expect(req2.request.method).toBe('GET'); + req2.flush({ + deviceId: 'device-2', + values: [{ datapointId: 'dp-2', name: 'Temperatura', value: 21 }], + }); + + const values = await valuesPromise; + expect(values.get('dp-1')).toBe('On'); + expect(values.get('dp-2')).toBe(21); + }); + + it('continua il merge valori anche se un device value endpoint fallisce', async () => { + const valuesPromise = firstValueFrom( + service.getDatapointCurrentValuesByDeviceIds(['device-ok', 'device-ko']), + ); + + const okReq = httpMock.expectOne('http://localhost:3000/device/device-ok/value'); + okReq.flush({ + deviceId: 'device-ok', + values: [{ datapointId: 'dp-ok', name: 'On/Off', value: 'Off' }], + }); + + const koReq = httpMock.expectOne('http://localhost:3000/device/device-ko/value'); + koReq.flush({}, { status: 500, statusText: 'Server Error' }); + + const values = await valuesPromise; + expect(values.get('dp-ok')).toBe('Off'); + }); + +}); diff --git a/frontend/test/integration/app/features/main-layout/main-layout.component.deep.integration.spec.ts b/frontend/test/integration/app/features/main-layout/main-layout.component.deep.integration.spec.ts new file mode 100644 index 00000000..549f0669 --- /dev/null +++ b/frontend/test/integration/app/features/main-layout/main-layout.component.deep.integration.spec.ts @@ -0,0 +1,244 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { Component } from '@angular/core'; +import { MainLayoutComponent } from 'src/app/features/main-layout/main-layout.component'; +import { InternalAuthService } from 'src/app/core/services/internal-auth.service'; +import { NavService } from 'src/app/features/main-layout/services/nav.service'; +import { AlarmStateService } from 'src/app/core/alarm/services/alarm-state.service'; +import { UserRole } from 'src/app/core/models/user-role.enum'; +import { BehaviorSubject, firstValueFrom, of } from 'rxjs'; +import { vi, describe, it, expect, beforeEach, afterEach } from 'vitest'; +import { provideRouter, Router } from '@angular/router'; +import { VIMAR_CLOUD_API_SERVICE } from 'src/app/core/services/vimar-cloud-api.service.interface'; +import { AlarmManagementRefreshService } from 'src/app/core/alarm/services/alarm-management-refresh.service'; +import { NotificationEvent } from 'src/app/features/notification/models/notification-event.model'; + +@Component({ template: '', standalone: true }) +class DummyRouteComponent {} + + +describe('MainLayoutComponent', () => { + let component: MainLayoutComponent; + let fixture: ComponentFixture; + let notificationsSubject: BehaviorSubject; + let originalResizeObserver: typeof ResizeObserver | undefined; + + const mockAuthService = { + getRole: vi.fn(), + getCurrentUser$: vi.fn().mockReturnValue( + of({ + userId: '1', + username: 'admin', + role: UserRole.AMMINISTRATORE, + accessToken: 'token', + isFirstAccess: false, + }) + ), + logout: vi.fn(), + logoutFromBackend: vi.fn().mockReturnValue(of(void 0)), + }; + const mockNavService = { + getNavItems: vi.fn().mockReturnValue([{ label: 'Test', route: '/test' }]) + }; + const mockAlarmService = { + getActiveAlarmsCount$: vi.fn().mockReturnValue(of(0)), + getUnreadNotificationsCount$: vi.fn().mockReturnValue(of(0)), + getNotifications$: vi.fn().mockReturnValue(of([])), + }; + const mockMyVimarService = { + getLinkedAccount: vi.fn().mockReturnValue(of({ email: '', isLinked: false })), + }; + const mockAlarmManagementRefreshService = { + requestRefresh: vi.fn(), + getRefreshRequested$: vi.fn(), + }; + + beforeEach(async () => { + vi.clearAllMocks(); + originalResizeObserver = globalThis.ResizeObserver; + (globalThis as typeof globalThis & { ResizeObserver: typeof ResizeObserver }).ResizeObserver = + class ResizeObserverMock { + public observe = vi.fn(); + public unobserve = vi.fn(); + public disconnect = vi.fn(); + } as unknown as typeof ResizeObserver; + + notificationsSubject = new BehaviorSubject([]); + mockAuthService.getRole.mockReturnValue(UserRole.AMMINISTRATORE); + mockAuthService.getCurrentUser$.mockReturnValue( + of({ + userId: '1', + username: 'admin', + role: UserRole.AMMINISTRATORE, + accessToken: 'token', + isFirstAccess: false, + }) + ); + mockMyVimarService.getLinkedAccount.mockReturnValue(of({ email: '', isLinked: false })); + mockAlarmService.getNotifications$.mockReturnValue(notificationsSubject.asObservable()); + + await TestBed.configureTestingModule({ + imports: [MainLayoutComponent], + providers: [ + { provide: InternalAuthService, useValue: mockAuthService }, + { provide: NavService, useValue: mockNavService }, + { provide: AlarmStateService, useValue: mockAlarmService }, + { provide: VIMAR_CLOUD_API_SERVICE, useValue: mockMyVimarService }, + { provide: AlarmManagementRefreshService, useValue: mockAlarmManagementRefreshService }, + provideRouter([ + { path: 'auth/login', component: DummyRouteComponent }, + { path: 'vimar-link', component: DummyRouteComponent }, + ]) + ] + }).compileComponents(); + + fixture = TestBed.createComponent(MainLayoutComponent); + component = fixture.componentInstance; + }); + + afterEach(() => { + if (originalResizeObserver) { + (globalThis as typeof globalThis & { ResizeObserver: typeof ResizeObserver }).ResizeObserver = originalResizeObserver; + return; + } + + delete (globalThis as Partial & { ResizeObserver?: typeof ResizeObserver }).ResizeObserver; + }); + + it('carica i NavItem con il ruolo corretto', () => { + mockAuthService.getCurrentUser$.mockReturnValue( + of({ + userId: '2', + username: 'operator', + role: UserRole.OPERATORE_SANITARIO, + accessToken: 'token', + isFirstAccess: false, + }) + ); + component.ngOnInit(); + expect(mockNavService.getNavItems).toHaveBeenCalledWith(UserRole.OPERATORE_SANITARIO); + expect(component.navItems.length).toBeGreaterThan(0); + }); + + it('reindirizza al login quando non esiste sessione utente', () => { + mockAuthService.getCurrentUser$.mockReturnValue(of(null)); + const router = TestBed.inject(Router); + const navigateSpy = vi.spyOn(router, 'navigate').mockResolvedValue(true); + + component.ngOnInit(); + + expect(component.navItems).toEqual([]); + expect(navigateSpy).toHaveBeenCalledWith(['/auth/login']); + }); + + it('mostra avviso topbar per admin senza account MyVimar collegato', () => { + mockMyVimarService.getLinkedAccount.mockReturnValue(of({ email: '', isLinked: false })); + + component.ngOnInit(); + + expect(mockMyVimarService.getLinkedAccount).toHaveBeenCalledTimes(1); + expect(component.showVimarAssociationWarning).toBe(true); + }); + + it('non mostra avviso topbar quando account MyVimar risulta collegato', () => { + mockMyVimarService.getLinkedAccount.mockReturnValue(of({ email: 'admin@test.it', isLinked: true })); + + component.ngOnInit(); + + expect(component.showVimarAssociationWarning).toBe(false); + }); + + it('inverte correttamente isCollapsed con il segnale ricevuto', () => { + expect(component.isCollapsed).toBe(true); + + component.toggleSidebar(); + expect(component.isCollapsed).toBe(false); + + component.toggleSidebar(); + expect(component.isCollapsed).toBe(true); + }); + + it('invoca correttamente logout', () => { + const router = TestBed.inject(Router); + const navigateSpy = vi.spyOn(router, 'navigate').mockResolvedValue(true); + + component.logout(); + + expect(mockAuthService.logoutFromBackend).toHaveBeenCalled(); + expect(navigateSpy).toHaveBeenCalledWith(['/auth/login']); + }); + + it('apre il pannello profilo e carica stato MyVimar', () => { + component.ngOnInit(); + component.toggleProfilePanel(); + + expect(component.isProfilePanelOpen).toBe(true); + expect(mockMyVimarService.getLinkedAccount).toHaveBeenCalledTimes(2); + expect(component.vimarAccount).toEqual({ email: '', isLinked: false }); + }); + + it('apre il pannello profilo anche per utenti non admin ma senza caricare stato MyVimar', () => { + mockAuthService.getCurrentUser$.mockReturnValue( + of({ + userId: '2', + username: 'operator', + role: UserRole.OPERATORE_SANITARIO, + accessToken: 'token', + isFirstAccess: false, + }) + ); + component.ngOnInit(); + + component.toggleProfilePanel(); + + expect(component.isProfilePanelOpen).toBe(true); + expect(mockMyVimarService.getLinkedAccount).not.toHaveBeenCalled(); + }); + + it('naviga a vimar-link dalla sezione profilo', () => { + const router = TestBed.inject(Router); + const navigateSpy = vi.spyOn(router, 'navigate').mockResolvedValue(true); + + component.goToVimarLink(); + + expect(navigateSpy).toHaveBeenCalledWith(['/vimar-link']); + }); + + it('richiede refresh allarmi attivi quando si clicca la stessa voce menu della pagina corrente', () => { + const router = TestBed.inject(Router); + vi.spyOn(router, 'url', 'get').mockReturnValue('/alarms/alarm-management'); + + component.onNavItemSelected('alarms/alarm-management'); + + expect(mockAlarmManagementRefreshService.requestRefresh).toHaveBeenCalledTimes(1); + }); + + + it('dovrebbe collegarsi correttamente al conteggio delle notifiche non lette', async () => { + const mockCount = 5; + mockAlarmService.getUnreadNotificationsCount$.mockReturnValue(of(mockCount)); + + fixture = TestBed.createComponent(MainLayoutComponent); + component = fixture.componentInstance; + + fixture.detectChanges(); + const result = await firstValueFrom(component.unreadNotificationsCount$); + expect(result).toBe(mockCount); + }); + + it('apre automaticamente il pannello notifiche quando arriva una nuova notifica realtime', () => { + component.ngOnInit(); + expect(component.isNotificationPanelOpen).toBe(false); + + notificationsSubject.next([ + { + notificationId: 'rt-1', + title: '▲ Allarme test', + sentAt: '2026-04-07T22:00:00.000Z', + eventType: 'triggered', + }, + ]); + + expect(component.isNotificationPanelOpen).toBe(true); + }); + +}); \ No newline at end of file diff --git a/frontend/test/integration/app/features/main-layout/main-layout.component.integration.spec.ts b/frontend/test/integration/app/features/main-layout/main-layout.component.integration.spec.ts new file mode 100644 index 00000000..6df46f40 --- /dev/null +++ b/frontend/test/integration/app/features/main-layout/main-layout.component.integration.spec.ts @@ -0,0 +1,264 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { Component } from '@angular/core'; +import { MainLayoutComponent } from 'src/app/features/main-layout/main-layout.component'; +import { InternalAuthService } from 'src/app/core/services/internal-auth.service'; +import { NavService } from 'src/app/features/main-layout/services/nav.service'; +import { AlarmStateService } from 'src/app/core/alarm/services/alarm-state.service'; +import { UserRole } from 'src/app/core/models/user-role.enum'; +import { BehaviorSubject, firstValueFrom, of, throwError } from 'rxjs'; +import { vi, describe, it, expect, beforeEach, afterEach } from 'vitest'; +import { provideRouter, Router } from '@angular/router'; +import { VIMAR_CLOUD_API_SERVICE } from 'src/app/core/services/vimar-cloud-api.service.interface'; +import { AlarmManagementRefreshService } from 'src/app/core/alarm/services/alarm-management-refresh.service'; +import { NotificationEvent } from 'src/app/features/notification/models/notification-event.model'; + +@Component({ template: '', standalone: true }) +class DummyRouteComponent {} + + +describe('MainLayoutComponent', () => { + let component: MainLayoutComponent; + let fixture: ComponentFixture; + let notificationsSubject: BehaviorSubject; + let originalResizeObserver: typeof ResizeObserver | undefined; + + const mockAuthService = { + getRole: vi.fn(), + getCurrentUser$: vi.fn().mockReturnValue( + of({ + userId: '1', + username: 'admin', + role: UserRole.AMMINISTRATORE, + accessToken: 'token', + isFirstAccess: false, + }) + ), + logout: vi.fn(), + logoutFromBackend: vi.fn().mockReturnValue(of(void 0)), + }; + const mockNavService = { + getNavItems: vi.fn().mockReturnValue([{ label: 'Test', route: '/test' }]) + }; + const mockAlarmService = { + getActiveAlarmsCount$: vi.fn().mockReturnValue(of(0)), + getUnreadNotificationsCount$: vi.fn().mockReturnValue(of(0)), + getNotifications$: vi.fn().mockReturnValue(of([])), + }; + const mockMyVimarService = { + getLinkedAccount: vi.fn().mockReturnValue(of({ email: '', isLinked: false })), + }; + const mockAlarmManagementRefreshService = { + requestRefresh: vi.fn(), + getRefreshRequested$: vi.fn(), + }; + + beforeEach(async () => { + vi.clearAllMocks(); + originalResizeObserver = globalThis.ResizeObserver; + (globalThis as typeof globalThis & { ResizeObserver: typeof ResizeObserver }).ResizeObserver = + class ResizeObserverMock { + public observe = vi.fn(); + public unobserve = vi.fn(); + public disconnect = vi.fn(); + } as unknown as typeof ResizeObserver; + + notificationsSubject = new BehaviorSubject([]); + mockAuthService.getRole.mockReturnValue(UserRole.AMMINISTRATORE); + mockAuthService.getCurrentUser$.mockReturnValue( + of({ + userId: '1', + username: 'admin', + role: UserRole.AMMINISTRATORE, + accessToken: 'token', + isFirstAccess: false, + }) + ); + mockMyVimarService.getLinkedAccount.mockReturnValue(of({ email: '', isLinked: false })); + mockAlarmService.getNotifications$.mockReturnValue(notificationsSubject.asObservable()); + + await TestBed.configureTestingModule({ + imports: [MainLayoutComponent], + providers: [ + { provide: InternalAuthService, useValue: mockAuthService }, + { provide: NavService, useValue: mockNavService }, + { provide: AlarmStateService, useValue: mockAlarmService }, + { provide: VIMAR_CLOUD_API_SERVICE, useValue: mockMyVimarService }, + { provide: AlarmManagementRefreshService, useValue: mockAlarmManagementRefreshService }, + provideRouter([ + { path: 'auth/login', component: DummyRouteComponent }, + { path: 'vimar-link', component: DummyRouteComponent }, + ]) + ] + }).compileComponents(); + + fixture = TestBed.createComponent(MainLayoutComponent); + component = fixture.componentInstance; + }); + + afterEach(() => { + if (originalResizeObserver) { + (globalThis as typeof globalThis & { ResizeObserver: typeof ResizeObserver }).ResizeObserver = originalResizeObserver; + return; + } + + delete (globalThis as Partial & { ResizeObserver?: typeof ResizeObserver }).ResizeObserver; + }); + + it('carica i NavItem con il ruolo corretto', () => { + mockAuthService.getCurrentUser$.mockReturnValue( + of({ + userId: '2', + username: 'operator', + role: UserRole.OPERATORE_SANITARIO, + accessToken: 'token', + isFirstAccess: false, + }) + ); + component.ngOnInit(); + expect(mockNavService.getNavItems).toHaveBeenCalledWith(UserRole.OPERATORE_SANITARIO); + expect(component.navItems.length).toBeGreaterThan(0); + }); + + it('reindirizza al login quando non esiste sessione utente', () => { + mockAuthService.getCurrentUser$.mockReturnValue(of(null)); + const router = TestBed.inject(Router); + const navigateSpy = vi.spyOn(router, 'navigate').mockResolvedValue(true); + + component.ngOnInit(); + + expect(component.navItems).toEqual([]); + expect(navigateSpy).toHaveBeenCalledWith(['/auth/login']); + }); + + it('mostra avviso topbar per admin senza account MyVimar collegato', () => { + mockMyVimarService.getLinkedAccount.mockReturnValue(of({ email: '', isLinked: false })); + + component.ngOnInit(); + + expect(mockMyVimarService.getLinkedAccount).toHaveBeenCalledTimes(1); + expect(component.showVimarAssociationWarning).toBe(true); + }); + + it('non mostra avviso topbar quando account MyVimar risulta collegato', () => { + mockMyVimarService.getLinkedAccount.mockReturnValue(of({ email: 'admin@test.it', isLinked: true })); + + component.ngOnInit(); + + expect(component.showVimarAssociationWarning).toBe(false); + }); + + it('inverte correttamente isCollapsed con il segnale ricevuto', () => { + expect(component.isCollapsed).toBe(true); + + component.toggleSidebar(); + expect(component.isCollapsed).toBe(false); + + component.toggleSidebar(); + expect(component.isCollapsed).toBe(true); + }); + + it('invoca correttamente logout', () => { + const router = TestBed.inject(Router); + const navigateSpy = vi.spyOn(router, 'navigate').mockResolvedValue(true); + + component.logout(); + + expect(mockAuthService.logoutFromBackend).toHaveBeenCalled(); + expect(navigateSpy).toHaveBeenCalledWith(['/auth/login']); + }); + + it('apre il pannello profilo e carica stato MyVimar', () => { + component.ngOnInit(); + component.toggleProfilePanel(); + + expect(component.isProfilePanelOpen).toBe(true); + expect(mockMyVimarService.getLinkedAccount).toHaveBeenCalledTimes(2); + expect(component.vimarAccount).toEqual({ email: '', isLinked: false }); + }); + + it('apre il pannello profilo anche per utenti non admin ma senza caricare stato MyVimar', () => { + mockAuthService.getCurrentUser$.mockReturnValue( + of({ + userId: '2', + username: 'operator', + role: UserRole.OPERATORE_SANITARIO, + accessToken: 'token', + isFirstAccess: false, + }) + ); + component.ngOnInit(); + + component.toggleProfilePanel(); + + expect(component.isProfilePanelOpen).toBe(true); + expect(mockMyVimarService.getLinkedAccount).not.toHaveBeenCalled(); + }); + + it('naviga a vimar-link dalla sezione profilo', () => { + const router = TestBed.inject(Router); + const navigateSpy = vi.spyOn(router, 'navigate').mockResolvedValue(true); + + component.goToVimarLink(); + + expect(navigateSpy).toHaveBeenCalledWith(['/vimar-link']); + }); + + it('richiede refresh allarmi attivi quando si clicca la stessa voce menu della pagina corrente', () => { + const router = TestBed.inject(Router); + vi.spyOn(router, 'url', 'get').mockReturnValue('/alarms/alarm-management'); + + component.onNavItemSelected('alarms/alarm-management'); + + expect(mockAlarmManagementRefreshService.requestRefresh).toHaveBeenCalledTimes(1); + }); + + it('non richiede refresh quando la nav route selezionata non e alarms/alarm-management', () => { + const router = TestBed.inject(Router); + vi.spyOn(router, 'url', 'get').mockReturnValue('/alarms/alarm-management'); + + component.onNavItemSelected('dashboard'); + + expect(mockAlarmManagementRefreshService.requestRefresh).not.toHaveBeenCalled(); + }); + + it('su errore MyVimar imposta messaggio errore e non mostra warning topbar', () => { + mockMyVimarService.getLinkedAccount.mockReturnValueOnce( + throwError(() => new Error('network')) + ); + + component.ngOnInit(); + + expect(component.vimarStatusError).toBe('Impossibile recuperare lo stato del collegamento MyVimar.'); + expect(component.showVimarAssociationWarning).toBe(false); + }); + + + it('dovrebbe collegarsi correttamente al conteggio delle notifiche non lette', async () => { + const mockCount = 5; + mockAlarmService.getUnreadNotificationsCount$.mockReturnValue(of(mockCount)); + + fixture = TestBed.createComponent(MainLayoutComponent); + component = fixture.componentInstance; + + fixture.detectChanges(); + const result = await firstValueFrom(component.unreadNotificationsCount$); + expect(result).toBe(mockCount); + }); + + it('apre automaticamente il pannello notifiche quando arriva una nuova notifica realtime', () => { + component.ngOnInit(); + expect(component.isNotificationPanelOpen).toBe(false); + + notificationsSubject.next([ + { + notificationId: 'rt-1', + title: '▲ Allarme test', + sentAt: '2026-04-07T22:00:00.000Z', + eventType: 'triggered', + }, + ]); + + expect(component.isNotificationPanelOpen).toBe(true); + }); + +}); \ No newline at end of file diff --git a/frontend/test/integration/app/features/main-layout/main-layout.integration.spec.ts b/frontend/test/integration/app/features/main-layout/main-layout.integration.spec.ts new file mode 100644 index 00000000..8b84ec17 --- /dev/null +++ b/frontend/test/integration/app/features/main-layout/main-layout.integration.spec.ts @@ -0,0 +1,121 @@ +import { Component } from '@angular/core'; +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { provideRouter, Router } from '@angular/router'; +import { BehaviorSubject, of } from 'rxjs'; +import { beforeEach, describe, expect, it, vi } from 'vitest'; +import { AlarmStateService } from 'src/app/core/alarm/services/alarm-state.service'; +import { AlarmManagementRefreshService } from 'src/app/core/alarm/services/alarm-management-refresh.service'; +import { UserRole } from 'src/app/core/models/user-role.enum'; +import { InternalAuthService } from 'src/app/core/services/internal-auth.service'; +import { VIMAR_CLOUD_API_SERVICE } from 'src/app/core/services/vimar-cloud-api.service.interface'; +import { MainLayoutComponent } from 'src/app/features/main-layout/main-layout.component'; +import { NavService } from 'src/app/features/main-layout/services/nav.service'; +import { NotificationEvent } from 'src/app/features/notification/models/notification-event.model'; + +@Component({ template: '', standalone: true }) +class DummyRouteComponent {} + +describe('MainLayout feature integration', () => { + let fixture: ComponentFixture; + let component: MainLayoutComponent; + let notificationsSubject: BehaviorSubject; + + const authServiceStub = { + getCurrentUser$: vi.fn(), + logoutFromBackend: vi.fn().mockReturnValue(of(void 0)), + }; + + const navServiceStub = { + getNavItems: vi.fn().mockReturnValue([{ label: 'Dashboard', route: '/dashboard' }]), + }; + + const alarmStateStub = { + getActiveAlarmsCount$: vi.fn().mockReturnValue(of(0)), + getUnreadNotificationsCount$: vi.fn().mockReturnValue(of(0)), + getNotifications$: vi.fn(), + removeNotification: vi.fn(), + clearNotifications: vi.fn(), + }; + + const vimarServiceStub = { + getLinkedAccount: vi.fn().mockReturnValue(of({ email: '', isLinked: false })), + }; + + const alarmRefreshStub = { + requestRefresh: vi.fn(), + getRefreshRequested$: vi.fn(), + }; + + beforeEach(async () => { + vi.clearAllMocks(); + notificationsSubject = new BehaviorSubject([]); + + authServiceStub.getCurrentUser$.mockReturnValue( + of({ + userId: '1', + username: 'admin', + role: UserRole.AMMINISTRATORE, + accessToken: 'token', + isFirstAccess: false, + }), + ); + alarmStateStub.getNotifications$.mockReturnValue(notificationsSubject.asObservable()); + + await TestBed.configureTestingModule({ + imports: [MainLayoutComponent], + providers: [ + { provide: InternalAuthService, useValue: authServiceStub }, + { provide: NavService, useValue: navServiceStub }, + { provide: AlarmStateService, useValue: alarmStateStub }, + { provide: VIMAR_CLOUD_API_SERVICE, useValue: vimarServiceStub }, + { provide: AlarmManagementRefreshService, useValue: alarmRefreshStub }, + provideRouter([ + { path: 'auth/login', component: DummyRouteComponent }, + { path: 'notifications', component: DummyRouteComponent }, + { path: 'vimar-link', component: DummyRouteComponent }, + ]), + ], + }).compileComponents(); + }); + + function createComponent(): void { + fixture = TestBed.createComponent(MainLayoutComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + } + + it('RF46-OBL carica menu da ruolo utente e stato topbar admin', () => { + createComponent(); + + expect(navServiceStub.getNavItems).toHaveBeenCalledWith(UserRole.AMMINISTRATORE); + expect(component.navItems.length).toBeGreaterThan(0); + expect(component.showVimarAssociationWarning).toBe(true); + }); + + it('RF47-OBL senza sessione reindirizza al login', () => { + authServiceStub.getCurrentUser$.mockReturnValue(of(null)); + const router = TestBed.inject(Router); + const navigateSpy = vi.spyOn(router, 'navigate').mockResolvedValue(true); + + createComponent(); + + expect(component.navItems).toEqual([]); + expect(navigateSpy).toHaveBeenCalledWith(['/auth/login']); + }); + + it('RF48-OBL nuova notifica realtime apre il pannello notifiche', () => { + createComponent(); + expect(component.isNotificationPanelOpen).toBe(false); + + notificationsSubject.next([ + { + notificationId: 'rt-1', + title: 'Allarme realtime', + sentAt: '2026-04-11T10:00:00.000Z', + eventType: 'triggered', + }, + ]); + + expect(component.isNotificationPanelOpen).toBe(true); + }); +}); diff --git a/frontend/test/integration/app/features/main-layout/services/nav.service.integration.spec.ts b/frontend/test/integration/app/features/main-layout/services/nav.service.integration.spec.ts new file mode 100644 index 00000000..a0825372 --- /dev/null +++ b/frontend/test/integration/app/features/main-layout/services/nav.service.integration.spec.ts @@ -0,0 +1,48 @@ +import { describe, beforeEach, it, expect } from 'vitest'; +import { TestBed } from '@angular/core/testing'; +import { UserRole } from 'src/app/core/models/user-role.enum'; +import { NavService } from 'src/app/features/main-layout/services/nav.service'; + +describe('NavService', () => { + + let service : NavService; + + beforeEach(() => { + TestBed.configureTestingModule({ + providers: [NavService] + }); + service = TestBed.inject(NavService); + }); + + it('viene creato', () => { + expect(service).toBeTruthy(); + }); + + //ho fatto i test sui label perchè al momento sono più stabili dei nomi delle routes + it('restituisce tutti i NavItems per AMMINISTRATORE', () => { + const items = service.getNavItems(UserRole.AMMINISTRATORE); + + expect(items.length).toBeGreaterThan(0); + + expect(items.some(i => i.label === "Dashboard")).toBe(true); + expect(items.some(i => i.route.includes('dashboard'))).toBe(true); + + expect(items.some(i => i.label === "Configurazione Allarmi")).toBe(true); + expect(items.some(i => i.route.includes('alarm-configuration'))).toBe(true); + + }); + + it('restituisce solo i NavItems filtrati per OPERATORE SANITARIO', () => { + const items = service.getNavItems(UserRole.OPERATORE_SANITARIO); + + const OSSItems = items.filter(i => !i.requiredRole); + expect(OSSItems.length).toBeGreaterThan(0); + + const roleReqItems = items.filter(i => i.requiredRole); + expect(roleReqItems.length).toBe(0); + + expect(items.some(i => i.label === "Dashboard")).toBe(true); + expect(items.some(i => i.route.includes('dashboard'))).toBe(true); + }); + +}) \ No newline at end of file diff --git a/frontend/test/integration/app/features/my-vimar-integration/pages/my-vimar/my-vimar-page.component.deep.integration.spec.ts b/frontend/test/integration/app/features/my-vimar-integration/pages/my-vimar/my-vimar-page.component.deep.integration.spec.ts new file mode 100644 index 00000000..300788d3 --- /dev/null +++ b/frontend/test/integration/app/features/my-vimar-integration/pages/my-vimar/my-vimar-page.component.deep.integration.spec.ts @@ -0,0 +1,66 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { beforeEach, describe, expect, it, vi } from 'vitest'; +import { of, throwError } from 'rxjs'; +import { IVimarCloudApiService, VIMAR_CLOUD_API_SERVICE } from 'src/app/core/services/vimar-cloud-api.service.interface'; +import { MyVimarPageComponent } from 'src/app/features/my-vimar-integration/pages/my-vimar/my-vimar-page.component'; + +describe('MyVimarPageComponent', () => { + let component: MyVimarPageComponent; + let fixture: ComponentFixture; + + const serviceStub: IVimarCloudApiService = { + getLinkedAccount: vi.fn(() => of({ email: '', isLinked: false })), + initiateOAuth: vi.fn(), + unlinkAccount: vi.fn(() => of(void 0)), + }; + + beforeEach(async () => { + vi.clearAllMocks(); + + await TestBed.configureTestingModule({ + imports: [MyVimarPageComponent], + providers: [{ provide: VIMAR_CLOUD_API_SERVICE, useValue: serviceStub }], + }).compileComponents(); + + fixture = TestBed.createComponent(MyVimarPageComponent); + component = fixture.componentInstance; + }); + + it('should create', () => { + fixture.detectChanges(); + expect(component).toBeTruthy(); + }); + + it('carica lo stato account in ngOnInit', () => { + fixture.detectChanges(); + + expect(serviceStub.getLinkedAccount).toHaveBeenCalledTimes(1); + }); + + it('delegates onLinkAccount al service', () => { + component.onLinkAccount(); + + expect(serviceStub.initiateOAuth).toHaveBeenCalledTimes(1); + }); + + it('onUnlinkAccount richiama il service e triggera refresh', () => { + fixture.detectChanges(); + + component.onUnlinkAccount(); + + expect(serviceStub.unlinkAccount).toHaveBeenCalledTimes(1); + expect(serviceStub.getLinkedAccount).toHaveBeenCalledTimes(2); + }); + + it('imposta errore quando unlinkAccount fallisce', () => { + (serviceStub.unlinkAccount as ReturnType).mockReturnValueOnce( + throwError(() => new Error('boom')) + ); + + fixture.detectChanges(); + component.onUnlinkAccount(); + + expect(component.error).toContain('Errore durante la rimozione'); + expect(component.isLoading).toBe(false); + }); +}); diff --git a/frontend/test/integration/app/features/my-vimar-integration/pages/my-vimar/my-vimar-page.integration.spec.ts b/frontend/test/integration/app/features/my-vimar-integration/pages/my-vimar/my-vimar-page.integration.spec.ts new file mode 100644 index 00000000..3ae81d13 --- /dev/null +++ b/frontend/test/integration/app/features/my-vimar-integration/pages/my-vimar/my-vimar-page.integration.spec.ts @@ -0,0 +1,58 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { of, throwError } from 'rxjs'; +import { beforeEach, describe, expect, it, vi } from 'vitest'; +import { VIMAR_CLOUD_API_SERVICE } from 'src/app/core/services/vimar-cloud-api.service.interface'; +import { MyVimarPageComponent } from 'src/app/features/my-vimar-integration/pages/my-vimar/my-vimar-page.component'; + +describe('MyVimarIntegration feature integration', () => { + let fixture: ComponentFixture; + let component: MyVimarPageComponent; + + const serviceStub = { + getLinkedAccount: vi.fn(() => of({ email: '', isLinked: false })), + initiateOAuth: vi.fn(), + unlinkAccount: vi.fn(() => of(void 0)), + }; + + beforeEach(async () => { + vi.clearAllMocks(); + + await TestBed.configureTestingModule({ + imports: [MyVimarPageComponent], + providers: [{ provide: VIMAR_CLOUD_API_SERVICE, useValue: serviceStub }], + }).compileComponents(); + + fixture = TestBed.createComponent(MyVimarPageComponent); + component = fixture.componentInstance; + }); + + it('RF11-OBL carica stato account in init', () => { + fixture.detectChanges(); + + expect(component).toBeTruthy(); + expect(serviceStub.getLinkedAccount).toHaveBeenCalledTimes(1); + }); + + it('RF12-OBL unlink account esegue refresh stato', () => { + fixture.detectChanges(); + + component.onUnlinkAccount(); + + expect(serviceStub.unlinkAccount).toHaveBeenCalledTimes(1); + expect(serviceStub.getLinkedAccount).toHaveBeenCalledTimes(2); + }); + + it('RF13-OBL fallback errore quando unlink fallisce', () => { + const consoleErrorSpy = vi.spyOn(console, 'error').mockImplementation(() => undefined); + serviceStub.unlinkAccount.mockReturnValueOnce(throwError(() => new Error('boom'))); + fixture.detectChanges(); + + component.onUnlinkAccount(); + + expect(consoleErrorSpy).toHaveBeenCalled(); + expect(component.error).toContain('Errore durante la rimozione'); + expect(component.isLoading).toBe(false); + + consoleErrorSpy.mockRestore(); + }); +}); diff --git a/frontend/test/integration/app/features/notification/components/notification-page-component/notification-page-component.deep.integration.spec.ts b/frontend/test/integration/app/features/notification/components/notification-page-component/notification-page-component.deep.integration.spec.ts new file mode 100644 index 00000000..3591a2a3 --- /dev/null +++ b/frontend/test/integration/app/features/notification/components/notification-page-component/notification-page-component.deep.integration.spec.ts @@ -0,0 +1,160 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { By } from '@angular/platform-browser'; +import { BehaviorSubject } from 'rxjs'; +import { beforeEach, describe, expect, it } from 'vitest'; +import { ActivatedRoute, convertToParamMap } from '@angular/router'; +import { NotificationEvent } from 'src/app/features/notification/models/notification-event.model'; +import { NotificationListVm } from 'src/app/features/notification/models/notification-list-vm.model'; +import { NotificationService } from 'src/app/features/notification/services/notification.service'; +import { NotificationItemComponent } from 'src/app/features/notification/components/notification-item-component/notification-item-component'; + +import { NotificationPageComponent } from 'src/app/features/notification/components/notification-page-component/notification-page-component'; + +describe('NotificationPageComponent', () => { + let component: NotificationPageComponent; + let fixture: ComponentFixture; + let vmSubject: BehaviorSubject; + let queryParamMapSubject: BehaviorSubject>; + + const notificationServiceStub = { + vm$: undefined as unknown as BehaviorSubject, + removeNotification: vi.fn(), + clearAllNotifications: vi.fn(), + }; + + const notificationA: NotificationEvent = { + notificationId: 'n-1', + title: 'Allarme antincendio attivo', + sentAt: '2026-03-24T10:00:00.000Z', + }; + + const notificationB: NotificationEvent = { + notificationId: 'n-2', + title: 'Porta ingresso aperta', + sentAt: '2026-03-24T10:05:00.000Z', + }; + + beforeEach(async () => { + vmSubject = new BehaviorSubject({ + notifications: [], + unreadCount: 0, + }); + notificationServiceStub.vm$ = vmSubject; + queryParamMapSubject = new BehaviorSubject(convertToParamMap({})); + + await TestBed.configureTestingModule({ + imports: [NotificationPageComponent], + providers: [ + { + provide: ActivatedRoute, + useValue: { + queryParamMap: queryParamMapSubject.asObservable(), + }, + }, + ], + }) + .overrideComponent(NotificationPageComponent, { + set: { + providers: [{ provide: NotificationService, useValue: notificationServiceStub }], + }, + }) + .compileComponents(); + + fixture = TestBed.createComponent(NotificationPageComponent); + component = fixture.componentInstance; + }); + + it('should create', () => { + fixture.detectChanges(); + expect(component).toBeTruthy(); + }); + + it('renderizza uno stato vuoto accessibile quando non ci sono notifiche', () => { + fixture.detectChanges(); + + const emptyState = fixture.nativeElement.querySelector('.notification-page__empty'); + expect(emptyState).toBeTruthy(); + expect(emptyState.textContent).toContain('Nessuna notifica disponibile'); + + const items = fixture.debugElement.queryAll(By.directive(NotificationItemComponent)); + expect(items).toHaveLength(0); + }); + + it('renderizza la lista notifiche e passa i dati ai figli', () => { + vmSubject.next({ + notifications: [notificationA, notificationB], + unreadCount: 2, + }); + fixture.detectChanges(); + + const summary = fixture.nativeElement.querySelector('.notification-page__summary'); + expect(summary.textContent).toContain('2 notifiche non lette'); + + const items = fixture.debugElement.queryAll(By.directive(NotificationItemComponent)); + expect(items).toHaveLength(2); + expect(items[0].componentInstance.notification()).toEqual(notificationA); + expect(items[1].componentInstance.notification()).toEqual(notificationB); + }); + + it('usa il singolare nel riepilogo quando unreadCount e 1', () => { + vmSubject.next({ + notifications: [notificationA], + unreadCount: 1, + }); + fixture.detectChanges(); + + const summary = fixture.nativeElement.querySelector('.notification-page__summary'); + expect(summary.textContent).toContain('1 notifica non letta'); + }); + + it('aggiorna il DOM quando vm$ emette un nuovo snapshot coerente', () => { + fixture.detectChanges(); + + vmSubject.next({ + notifications: [notificationA], + unreadCount: 1, + }); + fixture.detectChanges(); + + let items = fixture.debugElement.queryAll(By.directive(NotificationItemComponent)); + expect(items).toHaveLength(1); + + vmSubject.next({ + notifications: [notificationA, notificationB], + unreadCount: 2, + }); + fixture.detectChanges(); + + items = fixture.debugElement.queryAll(By.directive(NotificationItemComponent)); + expect(items).toHaveLength(2); + }); + + it('invoca clearAllNotifications quando si clicca Cancella tutte', () => { + vmSubject.next({ + notifications: [notificationA, notificationB], + unreadCount: 2, + }); + fixture.detectChanges(); + + const clearAllButton = fixture.nativeElement.querySelector('button'); + clearAllButton.click(); + + expect(notificationServiceStub.clearAllNotifications).toHaveBeenCalledWith([ + notificationA, + notificationB, + ]); + }); + + it('evidenzia leggermente la notifica richiesta da query param focus', () => { + queryParamMapSubject.next(convertToParamMap({ focus: 'n-2' })); + vmSubject.next({ + notifications: [notificationA, notificationB], + unreadCount: 2, + }); + fixture.detectChanges(); + + const items = fixture.debugElement.queryAll(By.directive(NotificationItemComponent)); + expect(items[0].componentInstance.isHighlighted()).toBe(false); + expect(items[1].componentInstance.isHighlighted()).toBe(true); + }); +}); \ No newline at end of file diff --git a/frontend/test/integration/app/features/notification/components/notification-page-component/notification-page-component.integration.spec.ts b/frontend/test/integration/app/features/notification/components/notification-page-component/notification-page-component.integration.spec.ts new file mode 100644 index 00000000..0a95ea3f --- /dev/null +++ b/frontend/test/integration/app/features/notification/components/notification-page-component/notification-page-component.integration.spec.ts @@ -0,0 +1,102 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { By } from '@angular/platform-browser'; +import { ActivatedRoute, convertToParamMap } from '@angular/router'; +import { BehaviorSubject } from 'rxjs'; +import { beforeEach, describe, expect, it, vi } from 'vitest'; +import { NotificationEvent } from 'src/app/features/notification/models/notification-event.model'; +import { NotificationListVm } from 'src/app/features/notification/models/notification-list-vm.model'; +import { NotificationItemComponent } from 'src/app/features/notification/components/notification-item-component/notification-item-component'; +import { NotificationPageComponent } from 'src/app/features/notification/components/notification-page-component/notification-page-component'; +import { NotificationService } from 'src/app/features/notification/services/notification.service'; + +describe('Notification feature integration', () => { + let fixture: ComponentFixture; + let component: NotificationPageComponent; + let vmSubject: BehaviorSubject; + let queryParamMapSubject: BehaviorSubject>; + + const notificationServiceStub = { + vm$: undefined as unknown as BehaviorSubject, + removeNotification: vi.fn(), + clearAllNotifications: vi.fn(), + }; + + const notificationA: NotificationEvent = { + notificationId: 'n-1', + title: 'Allarme antincendio attivo', + sentAt: '2026-03-24T10:00:00.000Z', + }; + + const notificationB: NotificationEvent = { + notificationId: 'n-2', + title: 'Porta ingresso aperta', + sentAt: '2026-03-24T10:05:00.000Z', + }; + + beforeEach(async () => { + vmSubject = new BehaviorSubject({ + notifications: [], + unreadCount: 0, + }); + notificationServiceStub.vm$ = vmSubject; + queryParamMapSubject = new BehaviorSubject(convertToParamMap({})); + + await TestBed.configureTestingModule({ + imports: [NotificationPageComponent], + providers: [ + { + provide: ActivatedRoute, + useValue: { + queryParamMap: queryParamMapSubject.asObservable(), + }, + }, + ], + }) + .overrideComponent(NotificationPageComponent, { + set: { + providers: [{ provide: NotificationService, useValue: notificationServiceStub }], + }, + }) + .compileComponents(); + + fixture = TestBed.createComponent(NotificationPageComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('RF102-OPL visualizza stato vuoto quando non ci sono notifiche', () => { + expect(component).toBeTruthy(); + const emptyState = fixture.nativeElement.querySelector('.notification-page__empty'); + expect(emptyState).toBeTruthy(); + expect(emptyState.textContent).toContain('Nessuna notifica disponibile'); + }); + + it('RF103-OPL renderizza lista notifiche e clear-all sul servizio', () => { + vmSubject.next({ + notifications: [notificationA, notificationB], + unreadCount: 2, + }); + fixture.detectChanges(); + + const items = fixture.debugElement.queryAll(By.directive(NotificationItemComponent)); + expect(items).toHaveLength(2); + + const clearAllButton = fixture.nativeElement.querySelector('button'); + clearAllButton.click(); + + expect(notificationServiceStub.clearAllNotifications).toHaveBeenCalledWith([notificationA, notificationB]); + }); + + it('RF104-OPL focus query param evidenzia la notifica corretta', () => { + queryParamMapSubject.next(convertToParamMap({ focus: 'n-2' })); + vmSubject.next({ + notifications: [notificationA, notificationB], + unreadCount: 2, + }); + fixture.detectChanges(); + + const items = fixture.debugElement.queryAll(By.directive(NotificationItemComponent)); + expect(items[0].componentInstance.isHighlighted()).toBe(false); + expect(items[1].componentInstance.isHighlighted()).toBe(true); + }); +}); diff --git a/frontend/test/integration/app/features/notification/components/notification-topbar-panel-component/notification-topbar-panel-component.integration.spec.ts b/frontend/test/integration/app/features/notification/components/notification-topbar-panel-component/notification-topbar-panel-component.integration.spec.ts new file mode 100644 index 00000000..a34761a8 --- /dev/null +++ b/frontend/test/integration/app/features/notification/components/notification-topbar-panel-component/notification-topbar-panel-component.integration.spec.ts @@ -0,0 +1,81 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { beforeEach, describe, expect, it, vi } from 'vitest'; +import { NotificationTopbarPanelComponent } from 'src/app/features/notification/components/notification-topbar-panel-component/notification-topbar-panel-component'; +import type { NotificationEvent } from 'src/app/features/notification/models/notification-event.model'; + +describe('NotificationTopbarPanel feature integration', () => { + let fixture: ComponentFixture; + let component: NotificationTopbarPanelComponent; + + const notifications: NotificationEvent[] = [ + { notificationId: 'n-1', title: '! Allarme antincendio', sentAt: '2026-04-11T10:00:00.000Z' }, + { notificationId: 'n-2', title: '• Porta aperta', sentAt: '2026-04-11T10:01:00.000Z' }, + { notificationId: 'n-3', title: 'i Batteria bassa', sentAt: '2026-04-11T10:02:00.000Z' }, + { notificationId: 'n-4', title: '▲ Caduta rilevata', sentAt: '2026-04-11T10:03:00.000Z' }, + { notificationId: 'n-5', title: 'Notifica 5', sentAt: '2026-04-11T10:04:00.000Z' }, + { notificationId: 'n-6', title: 'Notifica 6', sentAt: '2026-04-11T10:05:00.000Z' }, + { notificationId: 'n-7', title: 'Notifica 7', sentAt: '2026-04-11T10:06:00.000Z' }, + ]; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [NotificationTopbarPanelComponent], + }).compileComponents(); + + fixture = TestBed.createComponent(NotificationTopbarPanelComponent); + component = fixture.componentInstance; + }); + + it('RF105-OPL stato vuoto mostra messaggio e nasconde clear-all', () => { + component.notifications = []; + fixture.detectChanges(); + + const empty = fixture.nativeElement.querySelector('.notification-topbar-panel__empty'); + const clearAll = fixture.nativeElement.querySelector('.notification-topbar-panel__clear-all'); + + expect(empty?.textContent).toContain('Nessuna notifica disponibile'); + expect(clearAll).toBeNull(); + }); + + it('RF103-OPL mostra max 6 notifiche e clear-all emette evento', () => { + const clearSpy = vi.fn(); + component.clearAllClicked.subscribe(clearSpy); + component.notifications = notifications; + fixture.detectChanges(); + + const items = fixture.nativeElement.querySelectorAll('.notification-topbar-panel__item'); + const clearAllButton = fixture.nativeElement.querySelector('.notification-topbar-panel__clear-all'); + + expect(items.length).toBe(6); + clearAllButton?.dispatchEvent(new MouseEvent('click')); + + expect(clearSpy).toHaveBeenCalledTimes(1); + }); + + it('RF104-OPL click su notifica e remove emettono gli id corretti', () => { + const selectedSpy = vi.fn(); + const removeSpy = vi.fn(); + component.notificationSelected.subscribe(selectedSpy); + component.removeClicked.subscribe(removeSpy); + component.notifications = notifications; + fixture.detectChanges(); + + const openButtons = fixture.nativeElement.querySelectorAll('.notification-topbar-panel__open'); + const removeButtons = fixture.nativeElement.querySelectorAll('.notification-topbar-panel__remove'); + + openButtons[1].dispatchEvent(new MouseEvent('click')); + removeButtons[1].dispatchEvent(new MouseEvent('click')); + + expect(selectedSpy).toHaveBeenCalledWith('n-2'); + expect(removeSpy).toHaveBeenCalledWith('n-2'); + }); + + it('RF102-OPL applica parsing priorita e titolo visualizzato', () => { + component.notifications = notifications; + fixture.detectChanges(); + + expect(component.getPriority(notifications[0])).not.toBeNull(); + expect(component.getDisplayTitle(notifications[0])).toBe('Allarme antincendio'); + expect(component.getPrioritySymbol(component.getPriority(notifications[0])!)).toBe('!'); + }); +}); diff --git a/frontend/test/integration/app/features/notification/services/notification.service.integration.spec.ts b/frontend/test/integration/app/features/notification/services/notification.service.integration.spec.ts new file mode 100644 index 00000000..efe6079e --- /dev/null +++ b/frontend/test/integration/app/features/notification/services/notification.service.integration.spec.ts @@ -0,0 +1,288 @@ +import { TestBed } from '@angular/core/testing'; +import { BehaviorSubject, Observable, Subscription, firstValueFrom, of, skip, throwError } from 'rxjs'; +import { beforeEach, describe, expect, it, vi } from 'vitest'; +import { AlarmStateService } from 'src/app/core/alarm/services/alarm-state.service'; +import { NotificationApiService } from 'src/app/core/notification/services/notification-api.service'; +import type { NotificationEvent } from 'src/app/features/notification/models/notification-event.model'; +import { NotificationService } from 'src/app/features/notification/services/notification.service'; + +describe('NotificationService', () => { + let service: NotificationService; + let notificationsSubject: BehaviorSubject; + let unreadCountSubject: BehaviorSubject; + let dismissedIdsSubject: BehaviorSubject>; + + const alarmStateStub = { + getNotifications$: vi.fn(), + getUnreadNotificationsCount$: vi.fn(), + getDismissedNotificationIds$: vi.fn(), + dismissNotification: vi.fn(), + dismissNotifications: vi.fn(), + removeNotification: vi.fn(), + clearNotifications: vi.fn(), + }; + + const notificationApiStub = { + getNotificationsHistory: vi.fn<() => Observable>(), + }; + + const historyOlder: NotificationEvent = { + notificationId: 'historic-1', + title: 'Storico vecchio', + sentAt: '2026-03-24T08:00:00.000Z', + }; + + const sharedHistoric: NotificationEvent = { + notificationId: 'shared-id', + title: 'Storico duplicato', + sentAt: '2026-03-24T09:00:00.000Z', + }; + + const sharedInSession: NotificationEvent = { + notificationId: 'shared-id', + title: 'Push aggiornato', + sentAt: '2026-03-24T11:00:00.000Z', + }; + + const inSessionOnly: NotificationEvent = { + notificationId: 'session-1', + title: 'Nuova push', + sentAt: '2026-03-24T10:30:00.000Z', + }; + + beforeEach(() => { + vi.clearAllMocks(); + + notificationsSubject = new BehaviorSubject([]); + unreadCountSubject = new BehaviorSubject(0); + dismissedIdsSubject = new BehaviorSubject>(new Set()); + + alarmStateStub.getNotifications$.mockReturnValue(notificationsSubject.asObservable()); + alarmStateStub.getUnreadNotificationsCount$.mockReturnValue(unreadCountSubject.asObservable()); + alarmStateStub.getDismissedNotificationIds$.mockReturnValue(dismissedIdsSubject.asObservable()); + notificationApiStub.getNotificationsHistory.mockReturnValue(of([])); + + TestBed.configureTestingModule({ + providers: [ + NotificationService, + { provide: AlarmStateService, useValue: alarmStateStub }, + { provide: NotificationApiService, useValue: notificationApiStub }, + ], + }); + }); + + it('espone vm iniziale vuoto quando storico e stream in-session sono vuoti', async () => { + service = TestBed.inject(NotificationService); + const vm = await firstValueFrom(service.vm$); + + expect(vm).toEqual({ + notifications: [], + unreadCount: 0, + }); + }); + + it('combina storico e in-session, deduplica per notificationId e ordina per sentAt desc', async () => { + notificationApiStub.getNotificationsHistory.mockReturnValueOnce(of([historyOlder, sharedHistoric])); + notificationsSubject.next([sharedInSession, inSessionOnly]); + unreadCountSubject.next(2); + + service = TestBed.inject(NotificationService); + const vm = await firstValueFrom(service.vm$); + + expect(vm.unreadCount).toBe(2); + expect(vm.notifications).toEqual([sharedInSession, inSessionOnly, historyOlder]); + expect(vm.notifications).toHaveLength(3); + }); + + it('in errore sullo storico applica fallback a [] e mantiene i dati in-session', async () => { + notificationApiStub.getNotificationsHistory.mockReturnValueOnce( + throwError(() => new Error('errore rete')) + ); + notificationsSubject.next([inSessionOnly]); + unreadCountSubject.next(1); + + service = TestBed.inject(NotificationService); + const vm = await firstValueFrom(service.vm$); + + expect(vm.notifications).toEqual([inSessionOnly]); + expect(vm.unreadCount).toBe(1); + }); + + it('propaga nuovi unreadCount senza alterare la lista notifiche', async () => { + notificationApiStub.getNotificationsHistory.mockReturnValueOnce(of([historyOlder])); + + service = TestBed.inject(NotificationService); + await firstValueFrom(service.vm$); + + unreadCountSubject.next(5); + const vm = await firstValueFrom(service.vm$); + + expect(vm.notifications).toEqual([historyOlder]); + expect(vm.unreadCount).toBe(5); + }); + + it('aggiorna il vm quando arrivano nuove notifiche in-session dopo la prima emissione', async () => { + notificationApiStub.getNotificationsHistory.mockReturnValueOnce(of([historyOlder])); + + service = TestBed.inject(NotificationService); + const updatedVmPromise = firstValueFrom(service.vm$.pipe(skip(1))); + notificationsSubject.next([inSessionOnly]); + const vm = await updatedVmPromise; + + expect(vm.notifications).toEqual([inSessionOnly, historyOlder]); + expect(vm.unreadCount).toBe(0); + }); + + it('deduplica tenendo la versione in-session quando notificationId e presente anche nello storico', async () => { + notificationApiStub.getNotificationsHistory.mockReturnValueOnce(of([sharedHistoric])); + notificationsSubject.next([sharedInSession]); + + service = TestBed.inject(NotificationService); + const vm = await firstValueFrom(service.vm$); + + expect(vm.notifications).toEqual([sharedInSession]); + expect(vm.notifications).toHaveLength(1); + }); + + it('gestisce timestamp non validi senza lanciare errori e li ordina in fondo', async () => { + const invalidTimestampNotification: NotificationEvent = { + notificationId: 'invalid-ts', + title: 'Timestamp invalido', + sentAt: 'not-a-date', + }; + + notificationApiStub.getNotificationsHistory.mockReturnValueOnce( + of([invalidTimestampNotification, historyOlder]) + ); + + service = TestBed.inject(NotificationService); + const vm = await firstValueFrom(service.vm$); + + expect(vm.notifications).toEqual([historyOlder, invalidTimestampNotification]); + }); + + it('riusa la stessa pipeline vm con piu subscriber senza richiamare di nuovo lo storico', async () => { + notificationApiStub.getNotificationsHistory.mockReturnValueOnce(of([historyOlder])); + + service = TestBed.inject(NotificationService); + + const [vmA, vmB] = await Promise.all([ + firstValueFrom(service.vm$), + firstValueFrom(service.vm$), + ]); + + expect(vmA).toEqual(vmB); + expect(notificationApiStub.getNotificationsHistory).toHaveBeenCalledTimes(1); + }); + + it('mantiene uno snapshot coerente per subscriber tardivi senza ricaricare lo storico', async () => { + notificationApiStub.getNotificationsHistory.mockReturnValueOnce(of([historyOlder])); + + service = TestBed.inject(NotificationService); + + const firstSubscription: Subscription = service.vm$.subscribe(); + await firstValueFrom(service.vm$); + notificationsSubject.next([inSessionOnly]); + + // Simula unsubscribe temporaneo (es. cambio subtree template) + firstSubscription.unsubscribe(); + + const vmLateSubscriber = await firstValueFrom(service.vm$); + expect(vmLateSubscriber.notifications).toEqual([inSessionOnly, historyOlder]); + expect(notificationApiStub.getNotificationsHistory).toHaveBeenCalledTimes(1); + }); + + it('non muta gli array sorgente ricevuti da API e AlarmStateService', async () => { + const historicList: NotificationEvent[] = [sharedHistoric, historyOlder]; + const inSessionList: NotificationEvent[] = [sharedInSession, inSessionOnly]; + + notificationApiStub.getNotificationsHistory.mockReturnValueOnce(of(historicList)); + notificationsSubject.next(inSessionList); + + service = TestBed.inject(NotificationService); + await firstValueFrom(service.vm$); + + expect(historicList).toEqual([sharedHistoric, historyOlder]); + expect(inSessionList).toEqual([sharedInSession, inSessionOnly]); + }); + + it('deduplica anche duplicati interni alla stessa sorgente mantenendo l ultimo elemento', async () => { + const duplicatedHistoryA: NotificationEvent = { + notificationId: 'dup-history', + title: 'Versione storica vecchia', + sentAt: '2026-03-24T08:00:00.000Z', + }; + const duplicatedHistoryB: NotificationEvent = { + notificationId: 'dup-history', + title: 'Versione storica nuova', + sentAt: '2026-03-24T09:00:00.000Z', + }; + const duplicatedSessionA: NotificationEvent = { + notificationId: 'dup-session', + title: 'Push vecchia', + sentAt: '2026-03-24T10:00:00.000Z', + }; + const duplicatedSessionB: NotificationEvent = { + notificationId: 'dup-session', + title: 'Push nuova', + sentAt: '2026-03-24T11:00:00.000Z', + }; + + notificationApiStub.getNotificationsHistory.mockReturnValueOnce( + of([duplicatedHistoryA, duplicatedHistoryB]) + ); + notificationsSubject.next([duplicatedSessionA, duplicatedSessionB]); + + service = TestBed.inject(NotificationService); + const vm = await firstValueFrom(service.vm$); + + expect(vm.notifications).toEqual([duplicatedSessionB, duplicatedHistoryB]); + expect(vm.notifications).toHaveLength(2); + }); + + it('mantiene coerenza: unreadCount segue lo stream dedicato anche quando la deduplica riduce la lista', async () => { + notificationApiStub.getNotificationsHistory.mockReturnValueOnce(of([sharedHistoric])); + notificationsSubject.next([sharedInSession]); + unreadCountSubject.next(5); + + service = TestBed.inject(NotificationService); + const vm = await firstValueFrom(service.vm$); + + expect(vm.notifications).toHaveLength(1); + expect(vm.unreadCount).toBe(5); + }); + + it('filtra le notifiche dismissate localmente dall archivio unificato', async () => { + notificationApiStub.getNotificationsHistory.mockReturnValueOnce(of([historyOlder, sharedHistoric])); + notificationsSubject.next([inSessionOnly]); + dismissedIdsSubject.next(new Set(['historic-1'])); + + service = TestBed.inject(NotificationService); + const vm = await firstValueFrom(service.vm$); + + expect(vm.notifications.map((notification) => notification.notificationId)).toEqual([ + 'session-1', + 'shared-id', + ]); + }); + + it('removeNotification delega dismiss + remove allo stato realtime', () => { + service = TestBed.inject(NotificationService); + + service.removeNotification('n-100'); + + expect(alarmStateStub.dismissNotification).toHaveBeenCalledWith('n-100'); + expect(alarmStateStub.removeNotification).toHaveBeenCalledWith('n-100'); + }); + + it('clearAllNotifications delega dismiss multiplo + clear realtime', () => { + service = TestBed.inject(NotificationService); + service.clearAllNotifications([historyOlder, inSessionOnly]); + + expect(alarmStateStub.dismissNotifications).toHaveBeenCalledWith([ + historyOlder.notificationId, + inSessionOnly.notificationId, + ]); + expect(alarmStateStub.clearNotifications).toHaveBeenCalledTimes(1); + }); +}); \ No newline at end of file diff --git a/frontend/test/integration/app/features/user-auth/components/auth-base/auth-base.component.integration.spec.ts b/frontend/test/integration/app/features/user-auth/components/auth-base/auth-base.component.integration.spec.ts new file mode 100644 index 00000000..aca899f1 --- /dev/null +++ b/frontend/test/integration/app/features/user-auth/components/auth-base/auth-base.component.integration.spec.ts @@ -0,0 +1,134 @@ +import { HttpErrorResponse } from '@angular/common/http'; +import { TestBed } from '@angular/core/testing'; +import { ActivatedRoute, Router } from '@angular/router'; +import { beforeEach, describe, expect, it, vi } from 'vitest'; +import { InternalAuthService } from 'src/app/core/services/internal-auth.service'; +import { UserRole } from 'src/app/core/models/user-role.enum'; +import { AuthErrorType } from 'src/app/features/user-auth/models/auth-error-type.enum'; +import { UserSession } from 'src/app/features/user-auth/models/user-session.model'; +import { AuthBaseComponent } from 'src/app/features/user-auth/components/auth-base/auth-base.component'; + +class TestAuthBaseComponent extends AuthBaseComponent { + public onUsernameChange(): void { } + + public onSubmit(): void { } + + public callHandleSuccess(session: UserSession): void { + this.handleSuccess(session); + } + + public callHandleError(error: unknown): void { + this.handleError(error); + } +} + +describe('AuthBaseComponent', () => { + let component: TestAuthBaseComponent; + + const routerMock = { + navigate: vi.fn().mockResolvedValue(true), + navigateByUrl: vi.fn().mockResolvedValue(true), + }; + + const activatedRouteMock = { + snapshot: { + queryParamMap: { + get: vi.fn().mockReturnValue(null), + }, + }, + }; + + const authServiceMock = { + login: vi.fn(), + setFirstAccessPassword: vi.fn(), + getToken: vi.fn(), + getCurrentUser$: vi.fn(), + getRole: vi.fn(), + isAuthenticated: vi.fn(), + hasRole: vi.fn(), + logout: vi.fn(), + }; + + beforeEach(() => { + vi.clearAllMocks(); + + TestBed.configureTestingModule({ + providers: [ + { provide: Router, useValue: routerMock }, + { provide: ActivatedRoute, useValue: activatedRouteMock }, + { provide: InternalAuthService, useValue: authServiceMock }, + ], + }); + + component = TestBed.runInInjectionContext(() => new TestAuthBaseComponent()); + }); + + it('handleSuccess naviga a first-access quando isFirstAccess e true', () => { + component.isLoading = true; + component.errorType = AuthErrorType.USERNAME_OR_PASSWORD_WRONG; + + component.callHandleSuccess({ + userId: 'u1', + username: 'mrossi', + role: UserRole.OPERATORE_SANITARIO, + accessToken: 'jwt', + isFirstAccess: true, + }); + + expect(component.isLoading).toBe(false); + expect(component.errorType).toBeNull(); + expect(routerMock.navigate).toHaveBeenCalledWith(['/auth/first-access']); + }); + + it('handleSuccess naviga a dashboard quando isFirstAccess e false', () => { + component.callHandleSuccess({ + userId: 'u1', + username: 'mrossi', + role: UserRole.OPERATORE_SANITARIO, + accessToken: 'jwt', + isFirstAccess: false, + }); + + expect(routerMock.navigate).toHaveBeenCalledWith(['/dashboard']); + }); + + it('handleSuccess naviga su returnUrl quando presente', () => { + activatedRouteMock.snapshot.queryParamMap.get.mockReturnValue('/vimar-link'); + + component.callHandleSuccess({ + userId: 'u1', + username: 'mrossi', + role: UserRole.OPERATORE_SANITARIO, + accessToken: 'jwt', + isFirstAccess: false, + }); + + expect(routerMock.navigateByUrl).toHaveBeenCalledWith('/vimar-link'); + expect(routerMock.navigate).not.toHaveBeenCalledWith(['/dashboard']); + }); + + it('handleError imposta USERNAME_OR_PASSWORD_WRONG su 400 e 401', () => { + component.callHandleError(new HttpErrorResponse({ status: 400 })); + expect(component.errorType).toBe(AuthErrorType.USERNAME_OR_PASSWORD_WRONG); + + component.callHandleError(new HttpErrorResponse({ status: 401 })); + expect(component.errorType).toBe(AuthErrorType.USERNAME_OR_PASSWORD_WRONG); + }); + + it('handleError imposta NEW_PASSWORD_EQUALS_TEMP su 409', () => { + component.callHandleError(new HttpErrorResponse({ status: 409 })); + expect(component.errorType).toBe(AuthErrorType.NEW_PASSWORD_EQUALS_TEMP); + }); + + it('handleError usa fallback USERNAME_OR_PASSWORD_WRONG per errori non Http', () => { + component.callHandleError(new Error('generic')); + expect(component.errorType).toBe(AuthErrorType.USERNAME_OR_PASSWORD_WRONG); + expect(component.isLoading).toBe(false); + }); + + it('espone il messaggio umano per credenziali errate', () => { + component.callHandleError(new HttpErrorResponse({ status: 401 })); + + expect(component.loginErrorMessage).toBe('Utente non trovato: username o password errati.'); + }); +}); diff --git a/frontend/test/integration/app/features/user-auth/components/login/login.component.deep.integration.spec.ts b/frontend/test/integration/app/features/user-auth/components/login/login.component.deep.integration.spec.ts new file mode 100644 index 00000000..ba072f61 --- /dev/null +++ b/frontend/test/integration/app/features/user-auth/components/login/login.component.deep.integration.spec.ts @@ -0,0 +1,178 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { ActivatedRoute, Router } from '@angular/router'; +import { HttpErrorResponse } from '@angular/common/http'; +import { of, throwError } from 'rxjs'; +import { beforeEach, describe, expect, it, vi } from 'vitest'; +import { InternalAuthService } from 'src/app/core/services/internal-auth.service'; +import { UserRole } from 'src/app/core/models/user-role.enum'; +import { AuthErrorType } from 'src/app/features/user-auth/models/auth-error-type.enum'; +import { LoginComponent } from 'src/app/features/user-auth/components/login/login.component'; + +describe('LoginComponent', () => { + let component: LoginComponent; + let fixture: ComponentFixture; + const userCredential = 'test-credential'; + + const routerMock = { + navigate: vi.fn().mockResolvedValue(true), + navigateByUrl: vi.fn().mockResolvedValue(true), + }; + + const activatedRouteMock = { + snapshot: { + queryParamMap: { + get: vi.fn().mockReturnValue(null), + }, + }, + }; + + const authServiceMock = { + login: vi.fn(), + setFirstAccessPassword: vi.fn(), + getToken: vi.fn(), + getCurrentUser$: vi.fn(), + getRole: vi.fn(), + isAuthenticated: vi.fn(), + hasRole: vi.fn(), + logout: vi.fn(), + }; + + beforeEach(async () => { + vi.clearAllMocks(); + + await TestBed.configureTestingModule({ + imports: [LoginComponent], + providers: [ + { provide: Router, useValue: routerMock }, + { provide: ActivatedRoute, useValue: activatedRouteMock }, + { provide: InternalAuthService, useValue: authServiceMock }, + ], + }).compileComponents(); + + fixture = TestBed.createComponent(LoginComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + await fixture.whenStable(); + }); + + it('crea il componente', () => { + expect(component).toBeTruthy(); + }); + + it('non invoca login se il form non rispetta i validator', () => { + component.loginForm.controls.username.setValue('ab'); + component.loginForm.controls.password.setValue('short'); + + const markAllAsTouchedSpy = vi.spyOn(component.loginForm, 'markAllAsTouched'); + + component.onSubmit(); + + expect(markAllAsTouchedSpy).toHaveBeenCalled(); + expect(authServiceMock.login).not.toHaveBeenCalled(); + }); + + it('invoca login e naviga su dashboard se autenticazione ok', () => { + authServiceMock.login.mockReturnValue( + of({ + userId: 'u1', + username: 'mrossi', + role: UserRole.OPERATORE_SANITARIO, + accessToken: 'jwt-token', + isFirstAccess: false, + }) + ); + + component.onUsernameChange('mrossi'); + component.onPasswordChange(userCredential); + component.onSubmit(); + + expect(authServiceMock.login).toHaveBeenCalledWith('mrossi', userCredential); + expect(routerMock.navigate).toHaveBeenCalledWith(['/dashboard']); + expect(component.errorType).toBeNull(); + expect(component.isLoading).toBe(false); + }); + + it('invoca login anche con valori presenti solo nel DOM (autofill browser)', () => { + authServiceMock.login.mockReturnValue( + of({ + userId: 'u1', + username: 'mrossi', + role: UserRole.OPERATORE_SANITARIO, + accessToken: 'jwt-token', + isFirstAccess: false, + }) + ); + + const usernameInput = fixture.nativeElement.querySelector('#username') as HTMLInputElement; + const passwordInput = fixture.nativeElement.querySelector('#password') as HTMLInputElement; + + usernameInput.value = 'mrossi'; + passwordInput.value = userCredential; + + component.onSubmit(); + + expect(authServiceMock.login).toHaveBeenCalledWith('mrossi', userCredential); + }); + + it('invoca login e naviga su returnUrl se presente', () => { + activatedRouteMock.snapshot.queryParamMap.get.mockReturnValue('/vimar-link'); + authServiceMock.login.mockReturnValue( + of({ + userId: 'u1', + username: 'mrossi', + role: UserRole.OPERATORE_SANITARIO, + accessToken: 'jwt-token', + isFirstAccess: false, + }) + ); + + component.onUsernameChange('mrossi'); + component.onPasswordChange(userCredential); + component.onSubmit(); + + expect(authServiceMock.login).toHaveBeenCalledWith('mrossi', userCredential); + expect(routerMock.navigateByUrl).toHaveBeenCalledWith('/vimar-link'); + }); + + it('imposta errore USERNAME_OR_PASSWORD_WRONG su 401', () => { + authServiceMock.login.mockReturnValue( + throwError(() => new HttpErrorResponse({ status: 401, statusText: 'Unauthorized' })) + ); + + component.onUsernameChange('mrossi'); + component.onPasswordChange(userCredential); + component.onSubmit(); + + expect(component.errorType).toBe(AuthErrorType.USERNAME_OR_PASSWORD_WRONG); + expect(component.isLoading).toBe(false); + }); + + it('espone il messaggio umano gia al primo tentativo fallito', () => { + authServiceMock.login.mockReturnValue( + throwError(() => new HttpErrorResponse({ status: 401, statusText: 'Unauthorized' })) + ); + + component.onUsernameChange('mrossi'); + component.onPasswordChange(userCredential); + component.onSubmit(); + + expect(component.isLoading).toBe(false); + expect(component.loginErrorMessage).toBe('Utente non trovato: username o password errati.'); + }); + + it('renderizza il testo errore quando errorType e valorizzato', () => { + authServiceMock.login.mockReturnValue( + throwError(() => new HttpErrorResponse({ status: 401, statusText: 'Unauthorized' })) + ); + + component.onUsernameChange('mrossi'); + component.onPasswordChange(userCredential); + component.onSubmit(); + + fixture.detectChanges(); + + const content = fixture.nativeElement.textContent as string; + expect(content).toContain('Utente non trovato: username o password errati.'); + }); + +}); diff --git a/frontend/test/integration/app/features/user-auth/components/login/login.integration.spec.ts b/frontend/test/integration/app/features/user-auth/components/login/login.integration.spec.ts new file mode 100644 index 00000000..4227b565 --- /dev/null +++ b/frontend/test/integration/app/features/user-auth/components/login/login.integration.spec.ts @@ -0,0 +1,98 @@ +import { HttpErrorResponse } from '@angular/common/http'; +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { ActivatedRoute, Router } from '@angular/router'; +import { of, throwError } from 'rxjs'; +import { beforeEach, describe, expect, it, vi } from 'vitest'; +import { InternalAuthService } from 'src/app/core/services/internal-auth.service'; +import { UserRole } from 'src/app/core/models/user-role.enum'; +import { AuthErrorType } from 'src/app/features/user-auth/models/auth-error-type.enum'; +import { LoginComponent } from 'src/app/features/user-auth/components/login/login.component'; + +describe('UserAuth feature integration', () => { + let fixture: ComponentFixture; + let component: LoginComponent; + + const routerStub = { + navigate: vi.fn().mockResolvedValue(true), + navigateByUrl: vi.fn().mockResolvedValue(true), + }; + + const activatedRouteStub = { + snapshot: { + queryParamMap: { + get: vi.fn().mockReturnValue(null), + }, + }, + }; + + const authServiceStub = { + login: vi.fn(), + setFirstAccessPassword: vi.fn(), + getToken: vi.fn(), + getCurrentUser$: vi.fn(), + getRole: vi.fn(), + isAuthenticated: vi.fn(), + hasRole: vi.fn(), + logout: vi.fn(), + }; + + beforeEach(async () => { + vi.clearAllMocks(); + + await TestBed.configureTestingModule({ + imports: [LoginComponent], + providers: [ + { provide: Router, useValue: routerStub }, + { provide: ActivatedRoute, useValue: activatedRouteStub }, + { provide: InternalAuthService, useValue: authServiceStub }, + ], + }).compileComponents(); + + fixture = TestBed.createComponent(LoginComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + await fixture.whenStable(); + }); + + it('RF1-OBL login valido reindirizza in dashboard', () => { + authServiceStub.login.mockReturnValue( + of({ + userId: 'u1', + username: 'mrossi', + role: UserRole.OPERATORE_SANITARIO, + accessToken: 'jwt-token', + isFirstAccess: false, + }), + ); + + component.onUsernameChange('mrossi'); + component.onPasswordChange('AdminAccess123'); + component.onSubmit(); + + expect(authServiceStub.login).toHaveBeenCalledWith('mrossi', 'AdminAccess123'); + expect(routerStub.navigate).toHaveBeenCalledWith(['/dashboard']); + expect(component.errorType).toBeNull(); + }); + + it('RF2-OBL login invalido espone errore credenziali', () => { + authServiceStub.login.mockReturnValue( + throwError(() => new HttpErrorResponse({ status: 401, statusText: 'Unauthorized' })), + ); + + component.onUsernameChange('mrossi'); + component.onPasswordChange('AdminAccess123'); + component.onSubmit(); + + expect(component.errorType).toBe(AuthErrorType.USERNAME_OR_PASSWORD_WRONG); + expect(component.loginErrorMessage).toContain('username o password errati'); + }); + + it('RF3-OBL form invalido non invoca autenticazione', () => { + component.loginForm.controls.username.setValue('ab'); + component.loginForm.controls.password.setValue('short'); + + component.onSubmit(); + + expect(authServiceStub.login).not.toHaveBeenCalled(); + }); +}); diff --git a/frontend/test/integration/app/features/user-management/components/user-created-dialog/user-created-dialog.integration.spec.ts b/frontend/test/integration/app/features/user-management/components/user-created-dialog/user-created-dialog.integration.spec.ts new file mode 100644 index 00000000..b830ce7f --- /dev/null +++ b/frontend/test/integration/app/features/user-management/components/user-created-dialog/user-created-dialog.integration.spec.ts @@ -0,0 +1,58 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { By } from '@angular/platform-browser'; +import { beforeEach, describe, expect, it, vi } from 'vitest'; + +import { UserCreatedDialogComponent } from 'src/app/features/user-management/components/user-created-dialog/user-created-dialog'; + +describe('UserCreatedDialogComponent', () => { + let component: UserCreatedDialogComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [UserCreatedDialogComponent], + }).compileComponents(); + + fixture = TestBed.createComponent(UserCreatedDialogComponent); + fixture.componentRef.setInput('user', { + name: 'Mario', + surname: 'Rossi', + username: 'mrossi', + }); + fixture.componentRef.setInput('response', { + tempPassword: 'TempPass123', + }); + fixture.detectChanges(); + component = fixture.componentInstance; + await fixture.whenStable(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); + + it('mostra nome utente e password temporanea', () => { + const textContent = (fixture.nativeElement as HTMLElement).textContent ?? ''; + + expect(textContent).toContain('Mario'); + expect(textContent).toContain('mrossi'); + expect(textContent).toContain('TempPass123'); + }); + + it('closeDialog emette evento closed', () => { + const closedSpy = vi.spyOn(component.closed, 'emit'); + + component.closeDialog(); + + expect(closedSpy).toHaveBeenCalledTimes(1); + }); + + it('click sul bottone chiudi invoca closeDialog', () => { + const closeSpy = vi.spyOn(component, 'closeDialog'); + const button = fixture.debugElement.query(By.css('button')); + + button.triggerEventHandler('click', null); + + expect(closeSpy).toHaveBeenCalledTimes(1); + }); +}); diff --git a/frontend/test/integration/app/features/user-management/components/user-list/user-list.integration.spec.ts b/frontend/test/integration/app/features/user-management/components/user-list/user-list.integration.spec.ts new file mode 100644 index 00000000..ec6a873a --- /dev/null +++ b/frontend/test/integration/app/features/user-management/components/user-list/user-list.integration.spec.ts @@ -0,0 +1,83 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { beforeEach, describe, expect, it, vi } from 'vitest'; +import { UserRole } from 'src/app/core/models/user-role.enum'; + +import { UserListComponent } from 'src/app/features/user-management/components/user-list/user-list'; + +describe('UserListComponent', () => { + let component: UserListComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [UserListComponent], + }).compileComponents(); + + fixture = TestBed.createComponent(UserListComponent); + component = fixture.componentInstance; + fixture.componentRef.setInput('users', [ + { + id: 1, + name: 'Mario', + surname: 'Rossi', + username: 'mrossi', + role: UserRole.OPERATORE_SANITARIO, + }, + ]); + fixture.detectChanges(); + await fixture.whenStable(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); + + it('onDelete apre il dialog di conferma', () => { + const user = { + id: 1, + name: 'Mario', + surname: 'Rossi', + username: 'mrossi', + role: UserRole.OPERATORE_SANITARIO, + }; + + component.onDelete(user); + + expect(component.pendingDeleteUser()).toEqual(user); + }); + + it('onDeleteConfirm emette deleteUser con id numerico', () => { + const emitSpy = vi.spyOn(component.deleteUser, 'emit'); + const user = { + id: 1, + name: 'Mario', + surname: 'Rossi', + username: 'mrossi', + role: UserRole.OPERATORE_SANITARIO, + }; + + component.onDeleteRequest(user); + component.onDeleteConfirm(); + + expect(emitSpy).toHaveBeenCalledWith(1); + expect(emitSpy).toHaveBeenCalledTimes(1); + expect(component.pendingDeleteUser()).toBeNull(); + }); + + it('onDeleteCancel non emette deleteUser e chiude il dialog', () => { + const emitSpy = vi.spyOn(component.deleteUser, 'emit'); + const user = { + id: 1, + name: 'Mario', + surname: 'Rossi', + username: 'mrossi', + role: UserRole.OPERATORE_SANITARIO, + }; + + component.onDeleteRequest(user); + component.onDeleteCancel(); + + expect(emitSpy).not.toHaveBeenCalled(); + expect(component.pendingDeleteUser()).toBeNull(); + }); +}); diff --git a/frontend/test/integration/app/features/user-management/components/user-management-page/user-management-page.integration.spec.ts b/frontend/test/integration/app/features/user-management/components/user-management-page/user-management-page.integration.spec.ts new file mode 100644 index 00000000..5e2c666b --- /dev/null +++ b/frontend/test/integration/app/features/user-management/components/user-management-page/user-management-page.integration.spec.ts @@ -0,0 +1,79 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { of, throwError } from 'rxjs'; +import { beforeEach, describe, expect, it, vi } from 'vitest'; + +import { API_BASE_URL } from 'src/app/core/tokens/api-base-url.token'; +import { UserApiService } from 'src/app/features/user-management/services/user-api.service'; +import { UserManagementErrorType } from 'src/app/features/user-management/models/user-management-error-type.enum'; +import { UserManagementPageComponent } from 'src/app/features/user-management/components/user-management-page/user-management-page.component'; + +describe('UserManagement feature integration', () => { + let fixture: ComponentFixture; + let component: UserManagementPageComponent; + + const getUsersStub = vi.fn(); + const createUserStub = vi.fn(); + const deleteUserStub = vi.fn(); + + beforeEach(async () => { + vi.clearAllMocks(); + + getUsersStub.mockReturnValue(of([])); + createUserStub.mockReturnValue(of({ tempPassword: 'TempPass123' })); + deleteUserStub.mockReturnValue(of(undefined)); + + await TestBed.configureTestingModule({ + imports: [UserManagementPageComponent], + providers: [ + { provide: API_BASE_URL, useValue: 'http://localhost:3000' }, + { + provide: UserApiService, + useValue: { + getUsers: getUsersStub, + createUser: createUserStub, + deleteUser: deleteUserStub, + }, + }, + ], + }).compileComponents(); + + fixture = TestBed.createComponent(UserManagementPageComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + await fixture.whenStable(); + }); + + it('RF16-OBL inizializza pagina e carica elenco utenti', () => { + expect(component).toBeTruthy(); + expect(getUsersStub).toHaveBeenCalledTimes(1); + expect(component.isCreateFormOpen()).toBe(false); + }); + + it('RF17-OBL submit creazione utente aggiorna stato e refresha la lista', () => { + component.onFormSubmit({ + name: 'Mario', + surname: 'Rossi', + username: 'mrossi', + }); + + expect(createUserStub).toHaveBeenCalledWith({ + name: 'Mario', + surname: 'Rossi', + username: 'mrossi', + }); + expect(component.createdResponse()?.tempPassword).toBe('TempPass123'); + expect(getUsersStub).toHaveBeenCalledTimes(2); + }); + + it('RF18-OBL errore 409 in creazione espone errore username in uso', () => { + createUserStub.mockReturnValueOnce(throwError(() => ({ status: 409 }))); + + component.onFormSubmit({ + name: 'Mario', + surname: 'Rossi', + username: 'mrossi', + }); + + expect(component.formError()).toBe(UserManagementErrorType.USERNAME_ALREADY_IN_USE); + }); +}); diff --git a/frontend/test/integration/app/features/user-management/services/user-api.service.integration.spec.ts b/frontend/test/integration/app/features/user-management/services/user-api.service.integration.spec.ts new file mode 100644 index 00000000..3be80d0a --- /dev/null +++ b/frontend/test/integration/app/features/user-management/services/user-api.service.integration.spec.ts @@ -0,0 +1,106 @@ +import { provideHttpClient } from '@angular/common/http'; +import { HttpTestingController, provideHttpClientTesting } from '@angular/common/http/testing'; +import { TestBed } from '@angular/core/testing'; +import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'; +import { API_BASE_URL } from 'src/app/core/tokens/api-base-url.token'; +import { UserApiService } from 'src/app/features/user-management/services/user-api.service'; +import { DecoderPasswordService } from 'src/app/features/user-management/services/decoder-password-service'; + +describe('UserApiService', () => { + let service: UserApiService; + let decoderPasswordService: DecoderPasswordService; + let httpController: HttpTestingController; + + const baseUrl = 'http://localhost:3000'; + + beforeEach(() => { + TestBed.configureTestingModule({ + providers: [ + UserApiService, + provideHttpClient(), + provideHttpClientTesting(), + { provide: API_BASE_URL, useValue: baseUrl }, + ], + }); + + service = TestBed.inject(UserApiService); + decoderPasswordService = TestBed.inject(DecoderPasswordService); + httpController = TestBed.inject(HttpTestingController); + }); + + afterEach(() => { + httpController?.verify(); + TestBed.resetTestingModule(); + }); + + it('deleteUser chiama DELETE /users/:id con id numerico', () => { + service.deleteUser(42).subscribe((result) => { + expect(result).toBeNull(); + }); + + const request = httpController.expectOne(`${baseUrl}/users/42`); + expect(request.request.method).toBe('DELETE'); + request.flush(null); + }); + + it('createUser decodifica tempPassword base64 prima di esporla al chiamante', () => { + const dto = { + name: 'Mario', + surname: 'Rossi', + username: 'mrossi', + }; + + service.createUser(dto).subscribe((result) => { + expect(result.tempPassword).toBe('TempPass123'); + }); + + const request = httpController.expectOne(`${baseUrl}/users`); + expect(request.request.method).toBe('POST'); + expect(request.request.body).toEqual(dto); + request.flush({ tempPassword: 'VGVtcFBhc3MxMjM=' }); + }); + + it('createUser mantiene tempPassword invariata se non e base64 valida', () => { + const dto = { + name: 'Mario', + surname: 'Rossi', + username: 'mrossi', + }; + + service.createUser(dto).subscribe((result) => { + expect(result.tempPassword).toBe('TempPass123'); + }); + + const request = httpController.expectOne(`${baseUrl}/users`); + request.flush({ tempPassword: 'TempPass123' }); + }); + + it('decodeTempPassword decodifica base64 valida e mantiene valori non validi', () => { + expect(decoderPasswordService.decodeTempPassword('VGVzdA==')).toBe('Test'); + expect(decoderPasswordService.decodeTempPassword('')).toBe(''); + expect(decoderPasswordService.decodeTempPassword('abc')).toBe('abc'); + expect(decoderPasswordService.decodeTempPassword('@@@=')).toBe('@@@='); + }); + + it('decodeTempPassword mantiene il valore originale se atob lancia eccezione', () => { + const atobSpy = vi.spyOn(globalThis, 'atob').mockImplementation(() => { + throw new Error('decode-failed'); + }); + + expect(decoderPasswordService.decodeTempPassword('VGVzdA==')).toBe('VGVzdA=='); + + atobSpy.mockRestore(); + }); + + it('decodeTempPassword supporta input con spazi ai margini', () => { + expect(decoderPasswordService.decodeTempPassword(' VGVzdA== ')).toBe('Test'); + + const atobSpy = vi.spyOn(globalThis, 'atob').mockImplementation(() => { + throw new Error('decode-failed'); + }); + + expect(decoderPasswordService.decodeTempPassword(' VGVzdA== ')).toBe(' VGVzdA== '); + + atobSpy.mockRestore(); + }); +}); diff --git a/frontend/test/integration/app/features/ward-management/components/assign-ward-dialog-component/assign-ward-dialog-component.integration.spec.ts b/frontend/test/integration/app/features/ward-management/components/assign-ward-dialog-component/assign-ward-dialog-component.integration.spec.ts new file mode 100644 index 00000000..8937fcf1 --- /dev/null +++ b/frontend/test/integration/app/features/ward-management/components/assign-ward-dialog-component/assign-ward-dialog-component.integration.spec.ts @@ -0,0 +1,74 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { beforeEach, describe, expect, it, vi } from 'vitest'; + +import { AssignWardDialogComponent } from 'src/app/features/ward-management/components/assign-ward-dialog-component/assign-ward-dialog-component'; + +describe('AssignWardDialogComponent', () => { + let component: AssignWardDialogComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [AssignWardDialogComponent], + }).compileComponents(); + + fixture = TestBed.createComponent(AssignWardDialogComponent); + component = fixture.componentInstance; + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); + + it('dovrebbe resettare plantId a null in ngOnInit', () => { + // Arrange: imposto un valore prima dell init + component.form.controls.plantId.setValue('999'); + + // Act: trigger lifecycle (ngOnInit) + fixture.detectChanges(); + + // Assert + expect(component.form.controls.plantId.value).toBeNull(); + }); + + it('non dovrebbe emettere submitted se il form e invalido', () => { + // Arrange + fixture.detectChanges(); + const submittedSpy = vi.spyOn(component.submitted, 'emit'); + component.form.controls.plantId.setValue(null); // required -> invalid + + // Act + component.onSubmit(); + + // Assert + expect(component.form.invalid).toBe(true); + expect(component.form.controls.plantId.touched).toBe(true); + expect(submittedSpy).not.toHaveBeenCalled(); + }); + + it('dovrebbe emettere submitted con plantId quando il form e valido', () => { + // Arrange + fixture.detectChanges(); + const submittedSpy = vi.spyOn(component.submitted, 'emit'); + component.form.controls.plantId.setValue('101'); + + // Act + component.onSubmit(); + + // Assert + expect(submittedSpy).toHaveBeenCalledWith({ plantId: '101' }); + expect(submittedSpy).toHaveBeenCalledTimes(1); + }); + + it('dovrebbe emettere cancelled quando onCancel viene chiamato', () => { + // Arrange + const cancelledSpy = vi.spyOn(component.cancelled, 'emit'); + + // Act + component.onCancel(); + + // Assert + expect(cancelledSpy).toHaveBeenCalledTimes(1); + }); +}); + diff --git a/frontend/test/integration/app/features/ward-management/components/ward-management-page-component/ward-management-page-component.deep.integration.spec.ts b/frontend/test/integration/app/features/ward-management/components/ward-management-page-component/ward-management-page-component.deep.integration.spec.ts new file mode 100644 index 00000000..def8c186 --- /dev/null +++ b/frontend/test/integration/app/features/ward-management/components/ward-management-page-component/ward-management-page-component.deep.integration.spec.ts @@ -0,0 +1,435 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { BehaviorSubject, of } from 'rxjs'; +import { beforeEach, describe, expect, it, vi } from 'vitest'; +import { UserRole } from 'src/app/core/models/user-role.enum'; +import type { Ward } from 'src/app/features/ward-management/models/ward.model'; +import { WardManagementStore } from 'src/app/features/ward-management/services/ward-management.store'; + +import { WardManagementPageComponent } from 'src/app/features/ward-management/components/ward-management-page-component/ward-management-page-component'; + +describe('WardManagementPageComponent', () => { + let component: WardManagementPageComponent; + let fixture: ComponentFixture; + + let wardsSubject: BehaviorSubject; + let loadingSubject: BehaviorSubject; + let errorSubject: BehaviorSubject; + + const wardA: Ward = { + id: 1, + name: 'Cardiologia', + apartments: [ + { id: '101', name: 'App. 101' }, + { id: '102', name: 'App. 102' }, + ], + operators: [ + { + id: 1, + firstName: 'Mario', + lastName: 'Rossi', + username: 'mrossi', + role: UserRole.OPERATORE_SANITARIO, + }, + ], + }; + + const wardB: Ward = { + id: 2, + name: 'Neurologia', + apartments: [ + { id: '102', name: 'App. 102' }, + { id: '103', name: 'App. 103' }, + ], + operators: [], + }; + + const storeStub = { + wards$: undefined as unknown, + isLoading$: undefined as unknown, + error$: undefined as unknown, + loadWards: vi.fn(), + createWard: vi.fn(), + updateWard: vi.fn(), + deleteWard: vi.fn(), + assignOperator: vi.fn(), + removeOperator: vi.fn(), + assignPlant: vi.fn(), + removePlant: vi.fn(), + getAvailableUsersForWard: vi.fn(), + getAvailablePlantsForWard: vi.fn(), + }; + + beforeEach(async () => { + vi.clearAllMocks(); + + wardsSubject = new BehaviorSubject([]); + loadingSubject = new BehaviorSubject(false); + errorSubject = new BehaviorSubject(null); + + storeStub.wards$ = wardsSubject.asObservable(); + storeStub.isLoading$ = loadingSubject.asObservable(); + storeStub.error$ = errorSubject.asObservable(); + storeStub.getAvailableUsersForWard.mockReturnValue(of([])); + storeStub.getAvailablePlantsForWard.mockReturnValue(of([])); + + await TestBed.configureTestingModule({ + imports: [WardManagementPageComponent], + providers: [{ provide: WardManagementStore, useValue: storeStub }], + }).compileComponents(); + + fixture = TestBed.createComponent(WardManagementPageComponent); + component = fixture.componentInstance; + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); + + it('ngOnInit dovrebbe chiamare loadWards e sincronizzare snapshots/error', () => { + fixture.detectChanges(); + + expect(storeStub.loadWards).toHaveBeenCalledTimes(1); + expect(component.wardsSnapshot()).toEqual([]); + expect(component.snackbarMessage()).toBeNull(); + + wardsSubject.next([wardA, wardB]); + errorSubject.next('Errore rete'); + + expect(component.wardsSnapshot()).toHaveLength(2); + expect(component.selectedWardId()).toBe(1); + expect(component.snackbarMessage()).toBe('Errore rete'); + }); + + it('quando wards diventa vuoto resetta selezioni e step mobile', () => { + component.selectedWardId.set(wardA.id); + component.selectedApartmentId.set('101'); + component.mobileStep.set('operators'); + + fixture.detectChanges(); + wardsSubject.next([wardA]); + wardsSubject.next([]); + + expect(component.selectedWardId()).toBeNull(); + expect(component.selectedApartmentId()).toBeNull(); + expect(component.mobileStep()).toBe('wards'); + }); + + it('selectedApartment si riallinea al ward selezionato', () => { + component.wardsSnapshot.set([wardA, wardB]); + component.selectedWardId.set(wardA.id); + component.selectedApartmentId.set('101'); + + expect(component.selectedApartment()).toEqual({ id: '101', name: 'App. 101' }); + + component.selectedWardId.set(wardB.id); + + expect(component.selectedApartment()).toBeNull(); + }); + + it('ngOnDestroy dovrebbe interrompere aggiornamenti da stream', () => { + fixture.detectChanges(); + + errorSubject.next('Errore iniziale'); + expect(component.snackbarMessage()).toBe('Errore iniziale'); + + component.ngOnDestroy(); + errorSubject.next('Errore dopo destroy'); + + expect(component.snackbarMessage()).toBe('Errore iniziale'); + }); + + it('dismissSnackbar dovrebbe azzerare il messaggio', () => { + component.snackbarMessage.set('Boom'); + + component.dismissSnackbar(); + + expect(component.snackbarMessage()).toBeNull(); + }); + + it('onCreateWard dovrebbe aprire dialog in create mode', () => { + component.selectedWardId.set(wardA.id); + + component.onCreateWard(); + + expect(component.selectedWardId()).toBe(wardA.id); + expect(component.wardDialogMode()).toBe('create'); + }); + + it('onCreateWardSubmit dovrebbe delegare a store e chiudere dialog', () => { + component.wardDialogMode.set('create'); + + component.onCreateWardSubmit({ name: 'Oncologia' }); + + expect(storeStub.createWard).toHaveBeenCalledWith({ name: 'Oncologia' }); + expect(storeStub.createWard).toHaveBeenCalledTimes(1); + expect(component.wardDialogMode()).toBe('closed'); + }); + + it('onEditWard e onEditWardSubmit dovrebbero aggiornare il reparto selezionato', () => { + component.wardsSnapshot.set([wardA, wardB]); + + component.onEditWard(wardA); + expect(component.selectedWardId()).toBe(wardA.id); + expect(component.wardDialogMode()).toBe('edit'); + + component.onEditWardSubmit({ name: 'Cardiologia A' }); + + expect(storeStub.updateWard).toHaveBeenCalledWith(1, { name: 'Cardiologia A' }); + expect(component.selectedWardId()).toBe(wardA.id); + expect(component.wardDialogMode()).toBe('closed'); + }); + + it('onEditWardSubmit non dovrebbe chiamare store se selectedWard e null', () => { + component.wardsSnapshot.set([wardB]); + component.selectedWardId.set(null); + + component.onEditWardSubmit({ name: 'X' }); + + expect(storeStub.updateWard).not.toHaveBeenCalled(); + }); + + it('onCloseWardDialog dovrebbe chiudere dialog e pulire selezione', () => { + component.selectedWardId.set(wardA.id); + component.wardDialogMode.set('edit'); + + component.onCloseWardDialog(); + + expect(component.selectedWardId()).toBe(wardA.id); + expect(component.wardDialogMode()).toBe('closed'); + }); + + it('onCloseAssignOperatorDialog e onCloseAssignPlantDialog ripuliscono stato di caricamento e lookup', () => { + component.operatorWardId.set(wardA.id); + component.availableOperatorsFromFetch.set([ + { + id: 1, + firstName: 'Mario', + lastName: 'Rossi', + username: 'mrossi', + role: UserRole.OPERATORE_SANITARIO, + }, + ]); + component.isLoadingAvailableOperators.set(true); + + component.plantWardId.set(wardB.id); + component.availablePlantsFromFetch.set([{ id: '101', name: 'App. 101' }]); + component.isLoadingAvailablePlants.set(true); + + component.onCloseAssignOperatorDialog(); + component.onCloseAssignPlantDialog(); + + expect(component.operatorWardId()).toBeNull(); + expect(component.availableOperatorsFromFetch()).toBeNull(); + expect(component.isLoadingAvailableOperators()).toBe(false); + expect(component.plantWardId()).toBeNull(); + expect(component.availablePlantsFromFetch()).toBeNull(); + expect(component.isLoadingAvailablePlants()).toBe(false); + }); + + it('selectWard dovrebbe aggiornare ward attivo e step mobile', () => { + component.selectWard(2); + + expect(component.selectedWardId()).toBe(2); + expect(component.mobileStep()).toBe('apartments'); + }); + + it('selectWard sul ward gia selezionato mantiene la selezione dell appartamento', () => { + component.selectedWardId.set(wardA.id); + component.selectedApartmentId.set('101'); + component.mobileStep.set('wards'); + + component.selectWard(wardA.id); + + expect(component.selectedWardId()).toBe(wardA.id); + expect(component.selectedApartmentId()).toBe('101'); + expect(component.mobileStep()).toBe('apartments'); + }); + + it('selectApartment e step helpers dovrebbero aggiornare lo stato ui', () => { + component.selectApartment('101'); + expect(component.selectedApartmentId()).toBe('101'); + + component.showWardListStep(); + expect(component.mobileStep()).toBe('wards'); + + component.showApartmentsStep(); + expect(component.mobileStep()).toBe('apartments'); + + component.showOperatorsStep(); + expect(component.mobileStep()).toBe('operators'); + }); + + it('onEditSelectedWard non dovrebbe fare nulla senza ward selezionato', () => { + component.wardsSnapshot.set([wardA]); + component.selectedWardId.set(null); + + component.onEditSelectedWard(); + + expect(component.selectedWardId()).toBeNull(); + expect(component.wardDialogMode()).toBe('closed'); + }); + + it('flow operator dovrebbe impostare wardId, submit e chiudere', () => { + storeStub.getAvailableUsersForWard.mockReturnValue( + of([ + { + id: 2, + firstName: 'Luca', + lastName: 'Verdi', + username: 'lverdi', + role: UserRole.OPERATORE_SANITARIO, + }, + ]), + ); + + component.onAssignOperator(1); + expect(component.operatorWardId()).toBe(1); + expect(storeStub.getAvailableUsersForWard).toHaveBeenCalledWith(1); + expect(component.availableOperators()).toEqual([ + { + id: 2, + firstName: 'Luca', + lastName: 'Verdi', + username: 'lverdi', + role: UserRole.OPERATORE_SANITARIO, + }, + ]); + + component.onAssignOperatorSubmit({ userId: 2 }); + + expect(storeStub.assignOperator).toHaveBeenCalledWith(1, { userId: 2 }); + expect(component.operatorWardId()).toBeNull(); + + component.onAssignOperator(2); + component.onCloseAssignOperatorDialog(); + expect(component.operatorWardId()).toBeNull(); + }); + + it('onAssignOperatorSubmit non dovrebbe chiamare store senza wardId', () => { + component.operatorWardId.set(null); + + component.onAssignOperatorSubmit({ userId: 2 }); + + expect(storeStub.assignOperator).not.toHaveBeenCalled(); + }); + + it('flow plant dovrebbe impostare wardId, submit e chiudere', () => { + storeStub.getAvailablePlantsForWard.mockReturnValue( + of([{ id: '103', name: 'App. 103' }]), + ); + + component.onAssignPlant(2); + expect(component.plantWardId()).toBe(2); + expect(storeStub.getAvailablePlantsForWard).toHaveBeenCalledWith(2); + expect(component.availablePlants()).toEqual([{ id: '103', name: 'App. 103' }]); + + component.onAssignPlantSubmit({ plantId: '103' }); + + expect(storeStub.assignPlant).toHaveBeenCalledWith(2, { plantId: '103' }); + expect(component.plantWardId()).toBeNull(); + + component.onAssignPlant(1); + component.onCloseAssignPlantDialog(); + expect(component.plantWardId()).toBeNull(); + }); + + it('onAssignPlantSubmit non dovrebbe chiamare store senza wardId', () => { + component.plantWardId.set(null); + + component.onAssignPlantSubmit({ plantId: '101' }); + + expect(storeStub.assignPlant).not.toHaveBeenCalled(); + }); + + it('confirmState + onConfirmDialogConfirmed dovrebbero gestire i 3 rami', () => { + component.onDeleteWard(1); + expect(component.confirmState()).toEqual({ kind: 'delete-ward', wardId: 1 }); + component.onConfirmDialogConfirmed(); + expect(storeStub.deleteWard).toHaveBeenCalledWith(1); + expect(component.confirmState()).toBeNull(); + + component.onRemoveOperator({ wardId: 1, userId: 2 }); + expect(component.confirmState()).toEqual({ + kind: 'remove-operator', + wardId: 1, + userId: 2, + }); + component.onConfirmDialogConfirmed(); + expect(storeStub.removeOperator).toHaveBeenCalledWith(1, 2); + expect(component.confirmState()).toBeNull(); + + component.onRemovePlant({ wardId: 2, plantId: '103' }); + expect(component.confirmState()).toEqual({ + kind: 'remove-plant', + wardId: 2, + plantId: '103', + }); + component.onConfirmDialogConfirmed(); + expect(storeStub.removePlant).toHaveBeenCalledWith(2, '103'); + expect(component.confirmState()).toBeNull(); + }); + + it('onConfirmDialogConfirmed non dovrebbe fare nulla con stato nullo', () => { + component.confirmState.set(null); + + component.onConfirmDialogConfirmed(); + + expect(storeStub.deleteWard).not.toHaveBeenCalled(); + expect(storeStub.removeOperator).not.toHaveBeenCalled(); + expect(storeStub.removePlant).not.toHaveBeenCalled(); + }); + + it('onConfirmDialogCancelled dovrebbe pulire confirmState', () => { + component.confirmState.set({ kind: 'delete-ward', wardId: 1 }); + + component.onConfirmDialogCancelled(); + + expect(component.confirmState()).toBeNull(); + }); + + it('getConfirmMessage dovrebbe restituire il testo corretto per ogni stato', () => { + component.confirmState.set(null); + expect(component.getConfirmMessage()).toBe('Confermi questa operazione?'); + expect(component.getConfirmLabel()).toBe('Conferma'); + + component.confirmState.set({ kind: 'delete-ward', wardId: 1 }); + expect(component.getConfirmMessage()).toBe('Confermi l\'eliminazione del reparto?'); + expect(component.getConfirmLabel()).toBe('Conferma'); + + component.confirmState.set({ kind: 'remove-operator', wardId: 1, userId: 2 }); + expect(component.getConfirmMessage()).toBe('Confermi la rimozione dell\'operatore dal reparto?'); + expect(component.getConfirmLabel()).toBe('Rimuovi'); + + component.confirmState.set({ kind: 'remove-plant', wardId: 1, plantId: '101' }); + expect(component.getConfirmMessage()).toBe('Confermi la rimozione dell\'appartamento dal reparto?'); + expect(component.getConfirmLabel()).toBe('Rimuovi'); + }); + + it('getOperatorDisplayName dovrebbe comporre e trimmare nome e cognome', () => { + expect(component.getOperatorDisplayName('Mario', 'Rossi')).toBe('Mario Rossi'); + expect(component.getOperatorDisplayName('Mario', '')).toBe('Mario'); + }); + + it('availablePlants dovrebbe deduplicare e escludere quelli gia assegnati al ward selezionato', () => { + component.wardsSnapshot.set([wardA, wardB]); + + component.plantWardId.set(null); + expect(component.availablePlants()).toEqual([]); + + component.plantWardId.set(1); + expect(component.availablePlants()).toEqual([]); + + component.plantWardId.set(9999); + expect(component.availablePlants()).toEqual([]); + }); + + it('onAssignPlant non usa fallback locale se fetch ad-hoc fallisce', () => { + storeStub.getAvailablePlantsForWard.mockReturnValue(of(null)); + component.wardsSnapshot.set([wardA, wardB]); + + component.onAssignPlant(1); + + expect(component.availablePlants()).toEqual([]); + expect(component.isLoadingAvailablePlants()).toBe(false); + }); +}); diff --git a/frontend/src/app/features/ward-management/components/ward-management-page-component/ward-management-page-component.integration.spec.ts b/frontend/test/integration/app/features/ward-management/components/ward-management-page-component/ward-management-page-component.integration.spec.ts similarity index 84% rename from frontend/src/app/features/ward-management/components/ward-management-page-component/ward-management-page-component.integration.spec.ts rename to frontend/test/integration/app/features/ward-management/components/ward-management-page-component/ward-management-page-component.integration.spec.ts index 63d430d3..1aff19e9 100644 --- a/frontend/src/app/features/ward-management/components/ward-management-page-component/ward-management-page-component.integration.spec.ts +++ b/frontend/test/integration/app/features/ward-management/components/ward-management-page-component/ward-management-page-component.integration.spec.ts @@ -2,17 +2,17 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; import { By } from '@angular/platform-browser'; import { of, throwError } from 'rxjs'; import { beforeEach, describe, expect, it, vi } from 'vitest'; -import { ApartmentApiService } from '../../../apartment-monitor/services/apartment-api.service'; -import { UserRole } from '../../../../core/models/user-role.enum'; -import type { Ward } from '../../models/ward.model'; -import { AssignmentOperationsService } from '../../services/assignment-operations.service'; -import { WardApiService } from '../../services/ward-api.service'; -import { WardManagementStore } from '../../services/ward-management.store'; -import { WardOperationsService } from '../../services/ward-operations.service'; -import { WardStore } from '../../services/ward.store'; -import { AssignOperatorDialogComponent } from '../assign-operator-dialog-component/assign-operator-dialog-component'; -import { AssignWardDialogComponent } from '../assign-ward-dialog-component/assign-ward-dialog-component'; -import { WardManagementPageComponent } from './ward-management-page-component'; +import { ApartmentApiService } from 'src/app/features/apartment-monitor/services/apartment-api.service'; +import { UserRole } from 'src/app/core/models/user-role.enum'; +import type { Ward } from 'src/app/features/ward-management/models/ward.model'; +import { AssignmentOperationsService } from 'src/app/features/ward-management/services/assignment-operations.service'; +import { WardApiService } from 'src/app/features/ward-management/services/ward-api.service'; +import { WardManagementStore } from 'src/app/features/ward-management/services/ward-management.store'; +import { WardOperationsService } from 'src/app/features/ward-management/services/ward-operations.service'; +import { WardStore } from 'src/app/features/ward-management/services/ward.store'; +import { AssignOperatorDialogComponent } from 'src/app/features/ward-management/components/assign-operator-dialog-component/assign-operator-dialog-component'; +import { AssignWardDialogComponent } from 'src/app/features/ward-management/components/assign-ward-dialog-component/assign-ward-dialog-component'; +import { WardManagementPageComponent } from 'src/app/features/ward-management/components/ward-management-page-component/ward-management-page-component'; describe('WardManagement feature integration', () => { let fixture: ComponentFixture; @@ -161,7 +161,7 @@ describe('WardManagement feature integration', () => { fixture.detectChanges(); } - it('mantiene coerente la selezione del ward e aggiorna il nome in entrambe le sezioni', () => { + it('RF27-OBL mantiene coerente la selezione del ward e aggiorna il nome in entrambe le sezioni', () => { const nativeElement = fixture.nativeElement as HTMLElement; expect(wardApiStub.getWards).toHaveBeenCalledTimes(1); @@ -176,7 +176,7 @@ describe('WardManagement feature integration', () => { expect(nativeElement.querySelector('section[aria-label="Dettagli reparto e appartamenti"] h2')?.textContent).toContain(ward2.name); }); - it('aggiorna il nome del ward e sincronizza lista e pannello centrale', () => { + it('RF28-OBL aggiorna il nome del ward e sincronizza lista e pannello centrale', () => { const nativeElement = fixture.nativeElement as HTMLElement; expect(nativeElement.querySelector('section[aria-label="Dettagli reparto e appartamenti"] h2')?.textContent).toContain(ward1.name); @@ -194,7 +194,7 @@ describe('WardManagement feature integration', () => { expect(getWardButtons()[0].textContent).toContain('Cardiologia A'); }); - it('dopo la creazione mantiene cliccabile il ward appena creato', () => { + it('RF29-OBL dopo la creazione mantiene cliccabile il ward appena creato', () => { const nativeElement = fixture.nativeElement as HTMLElement; clickButtonByText('Nuovo reparto'); @@ -217,7 +217,7 @@ describe('WardManagement feature integration', () => { expect(wardButtons[2].textContent).toContain(ward3.name); }); - it('assegna un operatore dal dialog e invoca il flusso di assegnazione', () => { + it('RF30-OBL assegna un operatore dal dialog e invoca il flusso di assegnazione', () => { clickButtonByText('Aggiungi operatore'); expect(getDialog()?.textContent).toContain('Assegna operatore sanitario'); @@ -234,7 +234,7 @@ describe('WardManagement feature integration', () => { expect((fixture.nativeElement as HTMLElement).querySelector('#operator-id')).toBeNull(); }); - it('non mostra appartamenti assegnabili se fetch disponibile fallisce', () => { + it('RF31-OBL non mostra appartamenti assegnabili se fetch disponibile fallisce', () => { wardApiStub.getAvailablePlants.mockReturnValueOnce(throwError(() => new Error('network error'))); clickButtonByText('Assegna appartamento'); @@ -259,7 +259,7 @@ describe('WardManagement feature integration', () => { expect((fixture.nativeElement as HTMLElement).querySelector('#apartment-id')).toBeNull(); }); - it('rimuove operatore e appartamento passando dal confirm dialog', () => { + it('RF32-OBL rimuove operatore e appartamento passando dal confirm dialog', () => { clickButtonByAriaLabel('Rimuovi operatore'); expect(getDialog()?.textContent).toContain('rimozione dell\'operatore'); clickButtonByText('Rimuovi'); @@ -271,7 +271,7 @@ describe('WardManagement feature integration', () => { expect(wardApiStub.removePlantFromWard).toHaveBeenCalledWith(1, '101'); }); - it('elimina un ward dopo conferma e aggiorna la selezione', () => { + it('RF33-OBL elimina un ward dopo conferma e aggiorna la selezione', () => { const nativeElement = fixture.nativeElement as HTMLElement; clickButtonByText('Elimina'); diff --git a/frontend/test/integration/app/features/ward-management/services/assignment-operations.service.integration.spec.ts b/frontend/test/integration/app/features/ward-management/services/assignment-operations.service.integration.spec.ts new file mode 100644 index 00000000..b4c6393a --- /dev/null +++ b/frontend/test/integration/app/features/ward-management/services/assignment-operations.service.integration.spec.ts @@ -0,0 +1,361 @@ +import { HttpErrorResponse } from '@angular/common/http'; +import { TestBed } from '@angular/core/testing'; +import { of, throwError } from 'rxjs'; +import { beforeEach, describe, expect, it, vi } from 'vitest'; +import { EventSubscriptionService } from 'src/app/core/alarm/services/event-subscription.service'; +import { UserRole } from 'src/app/core/models/user-role.enum'; +import type { WardSummaryDto } from 'src/app/features/ward-management/models/ward-api.dto'; +import type { Ward } from 'src/app/features/ward-management/models/ward.model'; +import { AssignmentOperationsService } from 'src/app/features/ward-management/services/assignment-operations.service'; +import { WardApiService } from 'src/app/features/ward-management/services/ward-api.service'; +import { WardStore } from 'src/app/features/ward-management/services/ward.store'; + +describe('AssignmentOperationsService', () => { + let service: AssignmentOperationsService; + + const wards: Ward[] = [ + { + id: 1, + name: 'Cardiologia', + apartments: [{ id: '101', name: 'App. 101' }], + operators: [ + { + id: 1, + firstName: 'mrossi', + lastName: '', + username: 'mrossi', + role: UserRole.OPERATORE_SANITARIO, + }, + ], + }, + ]; + + const wardSummaries: WardSummaryDto[] = [{ id: 1, name: 'Cardiologia' }]; + + const apiStub = { + assignOperatorToWard: vi.fn(), + removeOperatorFromWard: vi.fn(), + assignPlantToWard: vi.fn(), + removePlantFromWard: vi.fn(), + getAvailableOperators: vi.fn(), + getAvailablePlants: vi.fn(), + getWards: vi.fn(), + getPlantsByWardId: vi.fn(), + getOperatorsByWardId: vi.fn(), + }; + + const storeStub = { + setWards: vi.fn(), + setLoading: vi.fn(), + setError: vi.fn(), + getWardsSnapshot: vi.fn(), + }; + + const eventSubscriptionStub = { + refreshWardRoomSubscription: vi.fn(), + }; + + beforeEach(() => { + vi.clearAllMocks(); + + TestBed.configureTestingModule({ + providers: [ + AssignmentOperationsService, + { provide: WardApiService, useValue: apiStub }, + { provide: WardStore, useValue: storeStub }, + { provide: EventSubscriptionService, useValue: eventSubscriptionStub }, + ], + }); + + service = TestBed.inject(AssignmentOperationsService); + }); + + it('assignOperator esegue operazione e poi ricarica i wards', () => { + storeStub.getWardsSnapshot.mockReturnValue([]); + apiStub.assignOperatorToWard.mockReturnValue(of(void 0)); + apiStub.getWards.mockReturnValue(of(wardSummaries)); + apiStub.getPlantsByWardId.mockReturnValue(of([{ id: '101', name: 'App. 101' }])); + apiStub.getOperatorsByWardId.mockReturnValue(of([{ id: 1, username: 'mrossi' }])); + + service.assignOperator(1, { userId: 2 }).subscribe((result) => { + expect(result).toBeUndefined(); + }); + + expect(apiStub.assignOperatorToWard).toHaveBeenCalledWith(1, { userId: 2 }); + expect(apiStub.getWards).toHaveBeenCalledOnce(); + expect(apiStub.getPlantsByWardId).toHaveBeenCalledWith(1); + expect(apiStub.getOperatorsByWardId).toHaveBeenCalledWith(1); + expect(storeStub.setWards).toHaveBeenCalledWith(wards); + expect(storeStub.setWards).toHaveBeenCalledTimes(1); + expect(storeStub.setLoading).toHaveBeenCalledWith(false); + expect(storeStub.setLoading).toHaveBeenCalledTimes(1); + expect(eventSubscriptionStub.refreshWardRoomSubscription).toHaveBeenCalledTimes(1); + expect(storeStub.setError).not.toHaveBeenCalled(); + }); + + it('removeOperator in errore espone errore testo da HttpErrorResponse.error', () => { + apiStub.removeOperatorFromWard.mockReturnValue( + throwError( + () => new HttpErrorResponse({ status: 400, error: 'Operatore non assegnato' }) + ) + ); + + let emitted = false; + service.removeOperator(1, 2).subscribe(() => { + emitted = true; + }); + + expect(emitted).toBe(false); + expect(storeStub.setError).toHaveBeenCalledWith('Operatore non assegnato'); + expect(storeStub.setError).toHaveBeenCalledTimes(1); + expect(apiStub.getWards).not.toHaveBeenCalled(); + expect(storeStub.setWards).not.toHaveBeenCalled(); + }); + + it('getAvailablePlantsForWard filtra i plant gia assegnati in qualunque ward', () => { + storeStub.getWardsSnapshot.mockReturnValue([ + { + id: 10, + name: 'W1', + apartments: [{ id: '201', name: 'App. 201' }], + operators: [], + }, + { + id: 11, + name: 'W2', + apartments: [{ id: '202', name: 'App. 202' }], + operators: [], + }, + ]); + apiStub.getAvailablePlants.mockReturnValue( + of([ + { id: '201', name: 'App. 201' }, + { id: '202', name: 'App. 202' }, + { id: '203', name: 'App. 203' }, + ]), + ); + + service.getAvailablePlantsForWard(10).subscribe((result) => { + expect(result).toEqual([{ id: '203', name: 'App. 203' }]); + }); + + expect(apiStub.getAvailablePlants).toHaveBeenCalledOnce(); + }); + + it('getAvailableUsersForWard filtra solo gli utenti gia assegnati nel ward corrente', () => { + storeStub.getWardsSnapshot.mockReturnValue([ + { + id: 10, + name: 'W1', + apartments: [], + operators: [{ id: 1, firstName: 'mrossi', lastName: '', username: 'mrossi', role: UserRole.OPERATORE_SANITARIO }], + }, + { + id: 11, + name: 'W2', + apartments: [], + operators: [{ id: 2, firstName: 'lverdi', lastName: '', username: 'lverdi', role: UserRole.OPERATORE_SANITARIO }], + }, + ]); + apiStub.getAvailableOperators.mockReturnValue( + of([ + { id: 1, username: 'mrossi' }, + { id: 2, username: 'lverdi' }, + { id: 3, username: 'gbianchi' }, + ]), + ); + + service.getAvailableUsersForWard(10).subscribe((result) => { + expect(result).toEqual([ + { + id: 2, + firstName: 'lverdi', + lastName: '', + username: 'lverdi', + role: UserRole.OPERATORE_SANITARIO, + }, + { + id: 3, + firstName: 'gbianchi', + lastName: '', + username: 'gbianchi', + role: UserRole.OPERATORE_SANITARIO, + }, + ]); + }); + + expect(apiStub.getAvailableOperators).toHaveBeenCalledOnce(); + }); + + it('dopo rimozione un appartamento torna disponibile', () => { + storeStub.getWardsSnapshot + .mockReturnValueOnce([ + { + id: 10, + name: 'W1', + apartments: [{ id: '201', name: 'App. 201' }], + operators: [], + }, + ]) + .mockReturnValueOnce([ + { + id: 10, + name: 'W1', + apartments: [], + operators: [], + }, + ]); + + apiStub.getAvailablePlants.mockReturnValue( + of([ + { id: '201', name: 'App. 201' }, + { id: '202', name: 'App. 202' }, + ]), + ); + + service.getAvailablePlantsForWard(10).subscribe((result) => { + expect(result).toEqual([{ id: '202', name: 'App. 202' }]); + }); + + service.getAvailablePlantsForWard(10).subscribe((result) => { + expect(result).toEqual([ + { id: '201', name: 'App. 201' }, + { id: '202', name: 'App. 202' }, + ]); + }); + }); + + it('dopo eliminazione reparto, gli appartamenti del reparto eliminato tornano disponibili', () => { + storeStub.getWardsSnapshot + .mockReturnValueOnce([ + { + id: 10, + name: 'W1', + apartments: [{ id: '201', name: 'App. 201' }], + operators: [], + }, + { + id: 11, + name: 'W2', + apartments: [{ id: '202', name: 'App. 202' }], + operators: [], + }, + ]) + .mockReturnValueOnce([ + { + id: 11, + name: 'W2', + apartments: [{ id: '202', name: 'App. 202' }], + operators: [], + }, + ]); + + apiStub.getAvailablePlants.mockReturnValue( + of([ + { id: '201', name: 'App. 201' }, + { id: '202', name: 'App. 202' }, + { id: '203', name: 'App. 203' }, + ]), + ); + + service.getAvailablePlantsForWard(11).subscribe((result) => { + expect(result).toEqual([{ id: '203', name: 'App. 203' }]); + }); + + service.getAvailablePlantsForWard(11).subscribe((result) => { + expect(result).toEqual([ + { id: '201', name: 'App. 201' }, + { id: '203', name: 'App. 203' }, + ]); + }); + }); + + it('dopo rimozione un operatore torna disponibile', () => { + storeStub.getWardsSnapshot + .mockReturnValueOnce([ + { + id: 10, + name: 'W1', + apartments: [], + operators: [ + { + id: 1, + firstName: 'mrossi', + lastName: '', + username: 'mrossi', + role: UserRole.OPERATORE_SANITARIO, + }, + ], + }, + ]) + .mockReturnValueOnce([ + { + id: 10, + name: 'W1', + apartments: [], + operators: [], + }, + ]); + + apiStub.getAvailableOperators.mockReturnValue( + of([ + { id: 1, username: 'mrossi' }, + { id: 2, username: 'lverdi' }, + ]), + ); + + service.getAvailableUsersForWard(10).subscribe((result) => { + expect(result).toEqual([ + { + id: 2, + firstName: 'lverdi', + lastName: '', + username: 'lverdi', + role: UserRole.OPERATORE_SANITARIO, + }, + ]); + }); + + service.getAvailableUsersForWard(10).subscribe((result) => { + expect(result).toEqual([ + { + id: 1, + firstName: 'mrossi', + lastName: '', + username: 'mrossi', + role: UserRole.OPERATORE_SANITARIO, + }, + { + id: 2, + firstName: 'lverdi', + lastName: '', + username: 'lverdi', + role: UserRole.OPERATORE_SANITARIO, + }, + ]); + }); + }); + + it('assignPlant in errore usa HttpErrorResponse.message quando non c e error string', () => { + apiStub.assignPlantToWard.mockReturnValue( + throwError(() => new HttpErrorResponse({ status: 500, statusText: 'Server Error' })) + ); + + service.assignPlant(1, { plantId: '102' }).subscribe(); + + const messageArg = vi.mocked(storeStub.setError).mock.calls[0]?.[0] as string; + expect(messageArg.length).toBeGreaterThan(0); + expect(apiStub.getWards).not.toHaveBeenCalled(); + expect(storeStub.setWards).not.toHaveBeenCalled(); + }); + + it('removePlant in errore non-http usa fallback message', () => { + apiStub.removePlantFromWard.mockReturnValue(throwError(() => ({ bad: true }))); + + service.removePlant(1, '102').subscribe(); + + expect(storeStub.setError).toHaveBeenCalledWith('Operazione di assegnazione non riuscita.'); + expect(storeStub.setError).toHaveBeenCalledTimes(1); + expect(apiStub.getWards).not.toHaveBeenCalled(); + }); +}); diff --git a/frontend/test/integration/app/features/ward-management/services/ward-api.service.integration.spec.ts b/frontend/test/integration/app/features/ward-management/services/ward-api.service.integration.spec.ts new file mode 100644 index 00000000..72f6e23d --- /dev/null +++ b/frontend/test/integration/app/features/ward-management/services/ward-api.service.integration.spec.ts @@ -0,0 +1,200 @@ +import { HttpTestingController, provideHttpClientTesting } from '@angular/common/http/testing'; +import { TestBed } from '@angular/core/testing'; +import { provideHttpClient } from '@angular/common/http'; +import { describe, expect, it, beforeEach, afterEach } from 'vitest'; +import { UserRole } from 'src/app/core/models/user-role.enum'; +import { API_BASE_URL } from 'src/app/core/tokens/api-base-url.token'; +import type { CreateWardDto } from 'src/app/features/ward-management/models/ward-api.dto'; +import type { Ward } from 'src/app/features/ward-management/models/ward.model'; +import { WardApiService } from 'src/app/features/ward-management/services/ward-api.service'; + +describe('WardApiService', () => { + let service: WardApiService; + let httpController: HttpTestingController; + + const baseUrl = 'http://api.example.test'; + const wardsEndpoint = `${baseUrl}/wards`; + const usersEndpoint = `${baseUrl}/users`; + const wardUsersRelationshipsEndpoint = `${baseUrl}/wards-users-relationships`; + const wardPlantsRelationshipsEndpoint = `${baseUrl}/wards-plants-relationships`; + + const ward: Ward = { + id: 1, + name: 'Cardiologia', + apartments: [{ id: '101', name: 'App. 101' }], + operators: [ + { + id: 1, + firstName: 'Mario', + lastName: 'Rossi', + username: 'mrossi', + role: UserRole.OPERATORE_SANITARIO, + }, + ], + }; + + beforeEach(() => { + TestBed.configureTestingModule({ + providers: [ + WardApiService, + provideHttpClient(), + provideHttpClientTesting(), + { + provide: API_BASE_URL, + useValue: baseUrl, + }, + ], + }); + + service = TestBed.inject(WardApiService); + httpController = TestBed.inject(HttpTestingController); + }); + + afterEach(() => { + httpController.verify(); + }); + + it('chiama GET /api/wards in getWards', () => { + service.getWards().subscribe((result) => { + expect(result).toEqual([ + { + id: 1, + name: 'Cardiologia', + }, + ]); + expect(result).toHaveLength(1); + }); + + const request = httpController.expectOne(wardsEndpoint); + expect(request.request.method).toBe('GET'); + request.flush([{ id: 1, name: 'Cardiologia' }]); + }); + + it('chiama GET /api/wards-users-relationships/:wardId in getOperatorsByWardId', () => { + service.getOperatorsByWardId(10).subscribe((result) => { + expect(result).toEqual([{ id: 1, username: 'mrossi' }]); + }); + + const request = httpController.expectOne(`${wardUsersRelationshipsEndpoint}/10`); + expect(request.request.method).toBe('GET'); + request.flush([{ id: 1, username: 'mrossi' }]); + }); + + it('chiama GET /users in getAvailableOperators', () => { + service.getAvailableOperators().subscribe((result) => { + expect(result).toEqual([{ id: 2, username: 'lverdi' }]); + }); + + const request = httpController.expectOne(usersEndpoint); + expect(request.request.method).toBe('GET'); + request.flush([{ id: 2, username: 'lverdi' }]); + }); + + it('chiama GET /api/wards-plants-relationships/:wardId in getPlantsByWardId', () => { + service.getPlantsByWardId(10).subscribe((result) => { + expect(result).toEqual([{ id: '101', name: 'App. 101' }]); + }); + + const request = httpController.expectOne(`${wardPlantsRelationshipsEndpoint}/10`); + expect(request.request.method).toBe('GET'); + request.flush([{ id: '101', name: 'App. 101' }]); + }); + + it('chiama GET /api/plant/all in getAvailablePlants', () => { + service.getAvailablePlants().subscribe((result) => { + expect(result).toEqual([{ id: '103', name: 'App. 103' }]); + }); + + const request = httpController.expectOne(`${baseUrl}/plant/all`); + expect(request.request.method).toBe('GET'); + request.flush([{ id: '103', name: 'App. 103' }]); + }); + + it('chiama POST /api/wards in createWard', () => { + const dto: CreateWardDto = { name: 'Neurologia' }; + + service.createWard(dto).subscribe((result) => { + expect(result).toEqual(ward); + expect(result.id).toBe(1); + }); + + const request = httpController.expectOne(wardsEndpoint); + expect(request.request.method).toBe('POST'); + expect(request.request.body).toEqual(dto); + request.flush(ward); + }); + + it('chiama PUT /api/wards/:id in updateWard', () => { + service.updateWard(12, { name: 'Cardio 2' }).subscribe((result) => { + expect(result).toEqual(ward); + }); + + const request = httpController.expectOne(`${wardsEndpoint}/12`); + expect(request.request.method).toBe('PUT'); + expect(request.request.body).toEqual({ name: 'Cardio 2' }); + request.flush(ward); + }); + + it('chiama DELETE /api/wards-users-relationships/:wardId/:userId', () => { + service.removeOperatorFromWard(10, 42).subscribe((result) => { + expect(result).toBeNull(); + }); + + const request = httpController.expectOne(`${wardUsersRelationshipsEndpoint}/10/42`); + expect(request.request.method).toBe('DELETE'); + request.flush(null); + }); + + it('chiama POST /api/wards-plants-relationships con wardId e plantId', () => { + service.assignPlantToWard(1, { plantId: '102' }).subscribe((result) => { + expect(result).toBeNull(); + }); + + const request = httpController.expectOne(wardPlantsRelationshipsEndpoint); + expect(request.request.method).toBe('POST'); + expect(request.request.body).toEqual({ wardId: 1, plantId: '102' }); + request.flush(null); + }); + + it('chiama DELETE /api/wards/:id in deleteWard', () => { + service.deleteWard(33).subscribe((result) => { + expect(result).toBeNull(); + }); + + const request = httpController.expectOne(`${wardsEndpoint}/33`); + expect(request.request.method).toBe('DELETE'); + request.flush(null); + }); + + it('chiama POST /api/wards-users-relationships con wardId e userId', () => { + service.assignOperatorToWard(1, { userId: 9 }).subscribe((result) => { + expect(result).toBeNull(); + }); + + const request = httpController.expectOne(wardUsersRelationshipsEndpoint); + expect(request.request.method).toBe('POST'); + expect(request.request.body).toEqual({ wardId: 1, userId: 9 }); + request.flush(null); + }); + + it('chiama DELETE /api/wards-plants-relationships/:plantId', () => { + service.removePlantFromWard(1, '102').subscribe((result) => { + expect(result).toBeNull(); + }); + + const request = httpController.expectOne(`${wardPlantsRelationshipsEndpoint}/102`); + expect(request.request.method).toBe('DELETE'); + request.flush(null); + }); + + it('mantiene compatibilita con assignPlantToWard mappando plantId -> plantId', () => { + service.assignPlantToWard(1, { plantId: '103' }).subscribe((result) => { + expect(result).toBeNull(); + }); + + const request = httpController.expectOne(wardPlantsRelationshipsEndpoint); + expect(request.request.method).toBe('POST'); + expect(request.request.body).toEqual({ wardId: 1, plantId: '103' }); + request.flush(null); + }); +}); diff --git a/frontend/test/integration/app/features/ward-management/services/ward-operations.service.integration.spec.ts b/frontend/test/integration/app/features/ward-management/services/ward-operations.service.integration.spec.ts new file mode 100644 index 00000000..281069dc --- /dev/null +++ b/frontend/test/integration/app/features/ward-management/services/ward-operations.service.integration.spec.ts @@ -0,0 +1,302 @@ +import { HttpErrorResponse } from '@angular/common/http'; +import { TestBed } from '@angular/core/testing'; +import { of, throwError } from 'rxjs'; +import { beforeEach, describe, expect, it, vi } from 'vitest'; +import { UserRole } from 'src/app/core/models/user-role.enum'; +import type { WardSummaryDto } from 'src/app/features/ward-management/models/ward-api.dto'; +import type { Ward } from 'src/app/features/ward-management/models/ward.model'; +import { WardApiService } from 'src/app/features/ward-management/services/ward-api.service'; +import { WardOperationsService } from 'src/app/features/ward-management/services/ward-operations.service'; +import { WardStore } from 'src/app/features/ward-management/services/ward.store'; + +describe('WardOperationsService', () => { + let service: WardOperationsService; + + const ward: Ward = { + id: 1, + name: 'Cardiologia', + apartments: [{ id: '101', name: 'App. 101' }], + operators: [ + { + id: 1, + firstName: 'Mario', + lastName: 'Rossi', + username: 'mrossi', + role: UserRole.OPERATORE_SANITARIO, + }, + ], + }; + + const hydratedWard: Ward = { + id: 1, + name: 'Cardiologia', + apartments: [{ id: '101', name: 'App. 101' }], + operators: [ + { + id: 1, + firstName: 'mrossi', + lastName: '', + username: 'mrossi', + role: UserRole.OPERATORE_SANITARIO, + }, + ], + }; + + const wardSummaries: WardSummaryDto[] = [{ id: 1, name: 'Cardiologia' }]; + + const apiStub = { + getWards: vi.fn(), + getPlantsByWardId: vi.fn(), + getOperatorsByWardId: vi.fn(), + createWard: vi.fn(), + updateWard: vi.fn(), + deleteWard: vi.fn(), + }; + + const storeStub = { + setWards: vi.fn(), + setLoading: vi.fn(), + setError: vi.fn(), + addWard: vi.fn(), + replaceWard: vi.fn(), + removeWard: vi.fn(), + getWardsSnapshot: vi.fn(), + }; + + beforeEach(() => { + vi.clearAllMocks(); + + TestBed.configureTestingModule({ + providers: [ + WardOperationsService, + { provide: WardApiService, useValue: apiStub }, + { provide: WardStore, useValue: storeStub }, + ], + }); + + service = TestBed.inject(WardOperationsService); + }); + + it('loadWards aggiorna store e termina senza valore', () => { + storeStub.getWardsSnapshot.mockReturnValue([]); + apiStub.getWards.mockReturnValue(of(wardSummaries)); + //id e name riferiscono al plant (vedi WardPlantDto) + apiStub.getPlantsByWardId.mockReturnValue(of([{ id: '101', name: 'App. 101' }])); + apiStub.getOperatorsByWardId.mockReturnValue(of([{ id: 1, username: 'mrossi' }])); + + service.loadWards().subscribe((result) => { + expect(result).toBeUndefined(); + }); + + expect(apiStub.getWards).toHaveBeenCalledOnce(); + expect(apiStub.getPlantsByWardId).toHaveBeenCalledWith(1); + expect(apiStub.getOperatorsByWardId).toHaveBeenCalledWith(1); + expect(storeStub.setWards).toHaveBeenCalledWith([hydratedWard]); + expect(storeStub.setWards).toHaveBeenCalledTimes(1); + expect(storeStub.setLoading).toHaveBeenCalledWith(false); + expect(storeStub.setLoading).toHaveBeenCalledTimes(1); + expect(storeStub.setError).not.toHaveBeenCalled(); + }); + + it('loadWards idrata piu reparti e concatena le relationship in ordine', () => { + storeStub.getWardsSnapshot.mockReturnValue([]); + apiStub.getWards.mockReturnValue(of([wardSummaries[0], { id: 2, name: 'Neurologia' }])); + apiStub.getPlantsByWardId.mockImplementation((wardId: number) => { + if (wardId === 1) { + return of([{ id: '101', name: 'App. 101' }]); + } + + return of([{ id: '201', name: 'App. 201' }]); + }); + apiStub.getOperatorsByWardId.mockImplementation((wardId: number) => { + if (wardId === 1) { + return of([{ id: 1, username: 'mrossi' }]); + } + + return of([{ id: 2, username: 'lverdi' }]); + }); + + service.loadWards().subscribe(); + + expect(storeStub.setWards).toHaveBeenCalledWith([ + hydratedWard, + { + id: 2, + name: 'Neurologia', + apartments: [{ id: '201', name: 'App. 201' }], + operators: [ + { + id: 2, + firstName: 'lverdi', + lastName: '', + username: 'lverdi', + role: UserRole.OPERATORE_SANITARIO, + }, + ], + }, + ]); + }); + + it('loadWards con lista vuota non richiama le relationship API', () => { + storeStub.getWardsSnapshot.mockReturnValue([]); + apiStub.getWards.mockReturnValue(of([])); + + service.loadWards().subscribe(); + + expect(apiStub.getWards).toHaveBeenCalledOnce(); + expect(apiStub.getPlantsByWardId).not.toHaveBeenCalled(); + expect(apiStub.getOperatorsByWardId).not.toHaveBeenCalled(); + expect(storeStub.setWards).toHaveBeenCalledWith([]); + expect(storeStub.setLoading).toHaveBeenCalledWith(false); + expect(storeStub.setError).not.toHaveBeenCalled(); + }); + + it('createWard con 409 imposta messaggio funzionale', () => { + apiStub.createWard.mockReturnValue( + throwError(() => new HttpErrorResponse({ status: 409, statusText: 'Conflict' })) + ); + + let emitted = false; + service.createWard({ name: 'Duplicato' }).subscribe(() => { + emitted = true; + }); + + expect(emitted).toBe(false); + expect(storeStub.addWard).not.toHaveBeenCalled(); + expect(storeStub.setError).toHaveBeenCalledWith('Esiste gia un reparto con questo nome.'); + expect(storeStub.setError).toHaveBeenCalledTimes(1); + expect(storeStub.setLoading).not.toHaveBeenCalled(); + }); + + it('createWard normalizza payload minimale mantenendo il modello Ward coerente', () => { + apiStub.createWard.mockReturnValue(of({ id: 11, name: 'Oncologia' } as unknown as Ward)); + storeStub.getWardsSnapshot.mockReturnValue([]); + + service.createWard({ name: 'Oncologia' }).subscribe(); + + expect(storeStub.addWard).toHaveBeenCalledWith({ + id: 11, + name: 'Oncologia', + apartments: [], + operators: [], + }); + expect(storeStub.setLoading).toHaveBeenCalledWith(false); + }); + + it('createWard preserva apartments/operators dallo snapshot se il backend non li restituisce', () => { + storeStub.getWardsSnapshot.mockReturnValue([ward]); + apiStub.createWard.mockReturnValue(of({ id: 1, name: 'Cardiologia nuova' } as unknown as Ward)); + + service.createWard({ name: 'Cardiologia nuova' }).subscribe(); + + expect(storeStub.addWard).toHaveBeenCalledWith({ + id: 1, + name: 'Cardiologia nuova', + apartments: ward.apartments, + operators: ward.operators, + }); + }); + + it('updateWard sostituisce il ward nel store', () => { + const updatedWard: Ward = { ...ward, name: 'Cardiologia A' }; + storeStub.getWardsSnapshot.mockReturnValue([ward]); + apiStub.updateWard.mockReturnValue(of(updatedWard)); + + service.updateWard(1, { name: 'Cardiologia A' }).subscribe(); + + expect(apiStub.updateWard).toHaveBeenCalledWith(1, { name: 'Cardiologia A' }); + expect(storeStub.replaceWard).toHaveBeenCalledWith(updatedWard); + expect(storeStub.replaceWard).toHaveBeenCalledTimes(1); + expect(storeStub.setLoading).toHaveBeenCalledWith(false); + expect(storeStub.setError).not.toHaveBeenCalled(); + }); + + it('updateWard preserva apartments/operators quando backend restituisce solo id e name', () => { + storeStub.getWardsSnapshot.mockReturnValue([ward]); + apiStub.updateWard.mockReturnValue(of({ id: 1, name: 'Cardiologia X' } as unknown as Ward)); + + service.updateWard(1, { name: 'Cardiologia X' }).subscribe(); + + expect(storeStub.replaceWard).toHaveBeenCalledWith({ + id: 1, + name: 'Cardiologia X', + apartments: ward.apartments, + operators: ward.operators, + }); + expect(storeStub.setLoading).toHaveBeenCalledWith(false); + }); + + it('updateWard gestisce errore HTTP con messaggio testuale del server', () => { + storeStub.getWardsSnapshot.mockReturnValue([ward]); + apiStub.updateWard.mockReturnValue( + throwError(() => new HttpErrorResponse({ status: 500, statusText: 'Server error', error: 'update failed' })) + ); + + service.updateWard(1, { name: 'Cardiologia X' }).subscribe(); + + expect(storeStub.setError).toHaveBeenCalledWith('update failed'); + expect(storeStub.replaceWard).not.toHaveBeenCalled(); + }); + + it('deleteWard rimuove il ward dal store', () => { + apiStub.deleteWard.mockReturnValue(of(void 0)); + + service.deleteWard(1).subscribe(); + + expect(apiStub.deleteWard).toHaveBeenCalledWith(1); + expect(storeStub.removeWard).toHaveBeenCalledWith(1); + expect(storeStub.removeWard).toHaveBeenCalledTimes(1); + expect(storeStub.setLoading).toHaveBeenCalledWith(false); + expect(storeStub.setError).not.toHaveBeenCalled(); + }); + + it('deleteWard usa il fallback generico quando l errore non e strutturato', () => { + apiStub.deleteWard.mockReturnValue(throwError(() => ({ unexpected: true }))); + + service.deleteWard(1).subscribe(); + + expect(storeStub.setError).toHaveBeenCalledWith('Operazione sui reparti non riuscita.'); + expect(storeStub.removeWard).not.toHaveBeenCalled(); + }); + + it('createWard usa il fallback generico quando l errore non e strutturato', () => { + apiStub.createWard.mockReturnValue(throwError(() => ({ unexpected: true }))); + + service.createWard({ name: 'Test' }).subscribe(); + + expect(storeStub.setError).toHaveBeenCalledWith('Operazione sui reparti non riuscita.'); + }); + + it('in caso di errore generico usa il fallback message', () => { + apiStub.getWards.mockReturnValue(throwError(() => ({ unexpected: true }))); + + service.loadWards().subscribe(); + + expect(storeStub.setError).toHaveBeenCalledWith('Operazione sui reparti non riuscita.'); + expect(storeStub.setError).toHaveBeenCalledTimes(1); + expect(storeStub.setWards).not.toHaveBeenCalled(); + }); + + it('loadWards normalizza apartments dal dto', () => { + storeStub.getWardsSnapshot.mockReturnValue([ + { + id: 99, + name: 'Snapshot', + apartments: [{ id: '101', name: 'App. 101' }], + operators: [], + }, + ]); + apiStub.getWards.mockReturnValue(of(wardSummaries)); + apiStub.getPlantsByWardId.mockReturnValue(of([{ id: '101', name: 'App. 101' }])); + apiStub.getOperatorsByWardId.mockReturnValue(of([{ id: 1, username: 'mrossi' }])); + + service.loadWards().subscribe(); + + expect(storeStub.setWards).toHaveBeenCalledWith([ + { + ...hydratedWard, + apartments: [{ id: '101', name: 'App. 101' }], + }, + ]); + }); +}); diff --git a/frontend/test/integration/app/features/ward-management/services/ward.store.integration.spec.ts b/frontend/test/integration/app/features/ward-management/services/ward.store.integration.spec.ts new file mode 100644 index 00000000..0c219e13 --- /dev/null +++ b/frontend/test/integration/app/features/ward-management/services/ward.store.integration.spec.ts @@ -0,0 +1,95 @@ +import { firstValueFrom } from 'rxjs'; +import { beforeEach, describe, expect, it } from 'vitest'; +import { UserRole } from 'src/app/core/models/user-role.enum'; +import type { Ward } from 'src/app/features/ward-management/models/ward.model'; +import { WardStore } from 'src/app/features/ward-management/services/ward.store'; + +describe('WardStore', () => { + let store: WardStore; + + const wardA: Ward = { + id: 1, + name: 'Cardiologia', + apartments: [{ id: '101', name: 'App. 101' }], + operators: [ + { + id: 1, + firstName: 'Mario', + lastName: 'Rossi', + username: 'mrossi', + role: UserRole.OPERATORE_SANITARIO, + }, + ], + }; + + const wardB: Ward = { + id: 2, + name: 'Neurologia', + apartments: [{ id: '102', name: 'App. 102' }], + operators: [], + }; + + beforeEach(() => { + store = new WardStore(); + }); + + + it('inizializza stato vuoto', async () => { + expect(await firstValueFrom(store.wards$)).toEqual([]); + expect(await firstValueFrom(store.isLoading$)).toBe(false); + expect(await firstValueFrom(store.error$)).toBeNull(); + }); + + it('setWards sovrascrive i wards', async () => { + store.setWards([wardA, wardB]); + + const wards = await firstValueFrom(store.wards$); + expect(wards).toEqual([wardA, wardB]); + expect(wards).toHaveLength(2); + }); + + it('addWard aggiunge il reparto e resetta error/loading', async () => { + store.setLoading(true); + store.setError('errore'); + + store.addWard(wardA); + + const wards = await firstValueFrom(store.wards$); + expect(wards).toEqual([wardA]); + expect(wards).toHaveLength(1); + expect(await firstValueFrom(store.isLoading$)).toBe(false); + expect(await firstValueFrom(store.error$)).toBeNull(); + }); + + it('replaceWard aggiorna il reparto target', async () => { + store.setWards([wardA, wardB]); + + const renamed = { ...wardB, name: 'Neuro A' }; + store.replaceWard(renamed); + + const wards = await firstValueFrom(store.wards$); + expect(wards).toEqual([wardA, renamed]); + expect(wards).toHaveLength(2); + }); + + it('removeWard elimina il reparto target', async () => { + store.setWards([wardA, wardB]); + + store.removeWard(1); + + const wards = await firstValueFrom(store.wards$); + expect(wards).toEqual([wardB]); + expect(wards).toHaveLength(1); + }); + + it('patchPlant aggiorna solo l appartamento richiesto', async () => { + store.setWards([wardA, wardB]); + + store.patchPlant('102', { name: 'App. 102A' }); + + const wards = await firstValueFrom(store.wards$); + expect(wards).toHaveLength(2); + expect(wards[0].apartments[0]).toEqual(wardA.apartments[0]); + expect(wards[1].apartments[0]).toEqual({ id: '102', name: 'App. 102A' }); + }); +}); diff --git a/frontend/test/integration/app/shared/components/alarm-table/alarm-toggle-switch.component.integration.spec.ts b/frontend/test/integration/app/shared/components/alarm-table/alarm-toggle-switch.component.integration.spec.ts new file mode 100644 index 00000000..d3b4f12f --- /dev/null +++ b/frontend/test/integration/app/shared/components/alarm-table/alarm-toggle-switch.component.integration.spec.ts @@ -0,0 +1,72 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { beforeEach, describe, expect, it, vi } from 'vitest'; +import { AlarmToggleSwitchComponent } from 'src/app/shared/components/alarm-table/alarm-toggle-switch.component'; + +describe('AlarmToggleSwitchComponent', () => { + let fixture: ComponentFixture; + let component: AlarmToggleSwitchComponent; + + const setInputs = (checked = false, disabled = false, ariaLabel?: string): void => { + fixture.componentRef.setInput('checked', checked); + fixture.componentRef.setInput('disabled', disabled); + if (ariaLabel !== undefined) { + fixture.componentRef.setInput('ariaLabel', ariaLabel); + } + fixture.detectChanges(); + }; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [AlarmToggleSwitchComponent], + }).compileComponents(); + + fixture = TestBed.createComponent(AlarmToggleSwitchComponent); + component = fixture.componentInstance; + }); + + it('mostra lo stato iniziale non attivo', () => { + setInputs(); + + const button = fixture.nativeElement.querySelector('button') as HTMLButtonElement; + + expect(button.getAttribute('aria-pressed')).toBe('false'); + expect(component.trackClass()).toContain('border-slate-500'); + expect(component.thumbClass()).toContain('translate-x-0.5'); + }); + + it('mostra lo stato attivo e la classe corretta', () => { + setInputs(true); + + const button = fixture.nativeElement.querySelector('button') as HTMLButtonElement; + + expect(button.getAttribute('aria-pressed')).toBe('true'); + expect(component.trackClass()).toContain('border-yellow-700'); + expect(component.thumbClass()).toContain('translate-x-4'); + }); + + it('emette il nuovo valore quando viene togglato', () => { + setInputs(false); + const emitSpy = vi.spyOn(component.toggled, 'emit'); + + component.onToggle(); + + expect(emitSpy).toHaveBeenCalledWith(true); + expect(emitSpy).toHaveBeenCalledTimes(1); + }); + + it('non emette quando e disabilitato', () => { + setInputs(true, true); + const emitSpy = vi.spyOn(component.toggled, 'emit'); + + component.onToggle(); + + expect(emitSpy).not.toHaveBeenCalled(); + expect((fixture.nativeElement.querySelector('button') as HTMLButtonElement).disabled).toBe(true); + }); + + it('usa aria-label custom quando fornita', () => { + setInputs(false, false, 'Attiva allarme'); + + expect((fixture.nativeElement.querySelector('button') as HTMLButtonElement).getAttribute('aria-label')).toBe('Attiva allarme'); + }); +}); \ No newline at end of file diff --git a/frontend/test/integration/app/shared/models/device-taxonomy.integration.spec.ts b/frontend/test/integration/app/shared/models/device-taxonomy.integration.spec.ts new file mode 100644 index 00000000..a6e614ab --- /dev/null +++ b/frontend/test/integration/app/shared/models/device-taxonomy.integration.spec.ts @@ -0,0 +1,108 @@ +import { describe, expect, it } from 'vitest'; +import { DeviceType } from 'src/app/features/device-interaction/models/device-type.enum'; +import { + getDeviceTypeLabel, + getDiscoveredUnmappedSfeCodes, + getEndpointLabel, + resolveDeviceType, +} from 'src/app/shared/models/device-taxonomy'; + +describe('device-taxonomy', () => { + it('resolves thermostat when type token is explicit', () => { + const resolved = resolveDeviceType({ + rawType: 'SF_Thermostat', + }); + + expect(resolved).toBe(DeviceType.THERMOSTAT); + }); + + it('infers thermostat from endpoint sfeType when raw type is ambiguous', () => { + const resolved = resolveDeviceType({ + rawType: 'SF_Light', + sfeTypes: ['SFE_Cmd_ChangeOverMode'], + }); + + expect(resolved).toBe(DeviceType.THERMOSTAT); + }); + + it('infers thermostat from HVAC command endpoint when raw type is ambiguous', () => { + const resolved = resolveDeviceType({ + rawType: 'SF_Unknown', + sfeTypes: ['SFE_Cmd_HVACMode'], + }); + + expect(resolved).toBe(DeviceType.THERMOSTAT); + }); + + it('infers entrance door from italian device name when raw type is ambiguous', () => { + const resolved = resolveDeviceType({ + rawType: 'SF_Light', + rawName: 'Porta di Ingresso', + sfeTypes: ['SFE_Cmd_OnOff'], + }); + + expect(resolved).toBe(DeviceType.ENTRANCE_DOOR); + }); + + it('infers scenario devices from name instead of falling back to light', () => { + const resolved = resolveDeviceType({ + rawType: 'SF_Unknown', + rawName: 'Nome scenario Stella', + sfeTypes: ['SFE_Cmd_DownKey_ActiveScene'], + }); + + expect(resolved).toBe(DeviceType.ALARM_BUTTON); + }); + + it('falls back to unknown for unknown device signatures', () => { + const resolved = resolveDeviceType({ + rawType: 'SF_Unknown', + rawSubType: 'SS_Unknown', + sfeTypes: ['SFE_Unknown'], + }); + + expect(resolved).toBe(DeviceType.UNKNOWN); + }); + + it('returns readable label for known endpoint code', () => { + expect(getEndpointLabel('SFE_Cmd_ChangeOverMode')).toBe('Comando cambio modalita HVAC'); + }); + + it('returns readable label for fall state endpoint code', () => { + expect(getEndpointLabel('SFE_State_Fall')).toBe('Stato caduta rilevata'); + }); + + it('returns readable labels for newly observed runtime thermostat commands', () => { + expect(getEndpointLabel('SFE_Cmd_HVACMode')).toBe('Comando modalita HVAC'); + expect(getEndpointLabel('SFE_Cmd_OffBehaviour')).toBe('Comando comportamento in assenza'); + expect(getEndpointLabel('SFE_Cmd_OnBehaviour')).toBe('Comando comportamento in presenza'); + }); + + it('returns readable label for active scene command', () => { + expect(getEndpointLabel('SFE_Cmd_DownKey_ActiveScene')).toBe('Comando attivazione scenario'); + }); + + it('returns readable label for timed dynamic light command', () => { + expect(getEndpointLabel('SFE_Cmd_TimedDynamicMode')).toBe('Comando modalita dinamica temporizzata'); + }); + + it('returns raw endpoint code for unknown values', () => { + expect(getEndpointLabel('SFE_Cmd_FutureFeature')).toBe('Comando future feature'); + }); + + it('tracks unknown endpoint codes discovered at runtime', () => { + getEndpointLabel('SFE_Cmd_FutureFeature'); + getEndpointLabel('SFE_Cmd_CompletelyNewOne'); + + expect(getDiscoveredUnmappedSfeCodes()).toContain('SFE_Cmd_FutureFeature'); + expect(getDiscoveredUnmappedSfeCodes()).toContain('SFE_Cmd_CompletelyNewOne'); + }); + + it('returns expected device type label', () => { + expect(getDeviceTypeLabel(DeviceType.PRESENCE_SENSOR)).toBe('Sensore presenza'); + }); + + it('returns expected fallback label for unknown device type', () => { + expect(getDeviceTypeLabel(DeviceType.UNKNOWN)).toBe('Sconosciuto'); + }); +}); \ No newline at end of file diff --git a/frontend/test/integration/app/shared/pipes/elapsed-time.pipe.integration.spec.ts b/frontend/test/integration/app/shared/pipes/elapsed-time.pipe.integration.spec.ts new file mode 100644 index 00000000..54e16341 --- /dev/null +++ b/frontend/test/integration/app/shared/pipes/elapsed-time.pipe.integration.spec.ts @@ -0,0 +1,45 @@ +import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'; +import { ElapsedTimePipe } from 'src/app/shared/pipes/elapsed-time.pipe'; + +describe('ElapsedTimePipe', () => { + let pipe: ElapsedTimePipe; + + beforeEach(() => { + vi.useFakeTimers(); + vi.setSystemTime(new Date('2026-03-24T12:00:00.000Z')); + pipe = new ElapsedTimePipe(); + }); + + afterEach(() => { + vi.useRealTimers(); + }); + + it('ritorna il valore originale se la data non e valida', () => { + expect(pipe.transform('not-a-date')).toBe('not-a-date'); + }); + + it('mostra tra poco per timestamp futuri', () => { + expect(pipe.transform('2026-03-24T12:01:00.000Z')).toBe('tra poco'); + }); + + it('mostra secondi compatti per intervalli inferiori a 60 secondi', () => { + expect(pipe.transform('2026-03-24T11:59:30.000Z')).toBe('30s fa'); + expect(pipe.transform('2026-03-24T11:59:01.000Z')).toBe('59s fa'); + }); + + it('mostra minuti compatti da 60 secondi a meno di 1 ora', () => { + expect(pipe.transform('2026-03-24T11:59:00.000Z')).toBe('1m fa'); + expect(pipe.transform('2026-03-24T11:45:00.000Z')).toBe('15m fa'); + }); + + it('mostra ore e minuti compatti per intervalli inferiori a 1 giorno', () => { + expect(pipe.transform('2026-03-24T11:00:00.000Z')).toBe('1h fa'); + expect(pipe.transform('2026-03-24T10:48:00.000Z')).toBe('1h 12m fa'); + expect(pipe.transform('2026-03-24T09:00:00.000Z')).toBe('3h fa'); + }); + + it('mostra giorni compatti per intervalli pari o superiori a 1 giorno', () => { + expect(pipe.transform('2026-03-23T12:00:00.000Z')).toBe('1g fa'); + expect(pipe.transform('2026-03-19T12:00:00.000Z')).toBe('5g fa'); + }); +}); diff --git a/frontend/src/app/app.config.spec.ts b/frontend/test/unit/app/app.config.spec.ts similarity index 81% rename from frontend/src/app/app.config.spec.ts rename to frontend/test/unit/app/app.config.spec.ts index 9ee9a96a..1049693d 100644 --- a/frontend/src/app/app.config.spec.ts +++ b/frontend/test/unit/app/app.config.spec.ts @@ -1,7 +1,7 @@ import { TestBed } from '@angular/core/testing'; import { afterEach, describe, expect, it, vi } from 'vitest'; -import { appConfig } from './app.config'; -import { EventSubscriptionService } from './core/alarm/services/event-subscription.service'; +import { appConfig } from 'src/app/app.config'; +import { EventSubscriptionService } from 'src/app/core/alarm/services/event-subscription.service'; describe('appConfig initialization', () => { afterEach(() => { diff --git a/frontend/src/app/app.routes.spec.ts b/frontend/test/unit/app/app.routes.spec.ts similarity index 83% rename from frontend/src/app/app.routes.spec.ts rename to frontend/test/unit/app/app.routes.spec.ts index a43502a0..83f76250 100644 --- a/frontend/src/app/app.routes.spec.ts +++ b/frontend/test/unit/app/app.routes.spec.ts @@ -1,7 +1,7 @@ -import { routes } from './app.routes'; -import { authGuard } from './core/guards/auth.guard'; -import { roleGuard } from './core/guards/role.guard'; -import { UserRole } from './core/models/user-role.enum'; +import { routes } from 'src/app/app.routes'; +import { authGuard } from 'src/app/core/guards/auth.guard'; +import { roleGuard } from 'src/app/core/guards/role.guard'; +import { UserRole } from 'src/app/core/models/user-role.enum'; import { describe, it, expect } from 'vitest'; describe('App Routes', () => { diff --git a/frontend/src/app/app.spec.ts b/frontend/test/unit/app/app.spec.ts similarity index 94% rename from frontend/src/app/app.spec.ts rename to frontend/test/unit/app/app.spec.ts index cc76f56e..9bb191aa 100644 --- a/frontend/src/app/app.spec.ts +++ b/frontend/test/unit/app/app.spec.ts @@ -1,5 +1,5 @@ import { TestBed } from '@angular/core/testing'; -import { App } from './app'; +import { App } from 'src/app/app'; describe('App', () => { beforeEach(async () => { diff --git a/frontend/src/app/core/alarm/services/alarm-api.service.spec.ts b/frontend/test/unit/app/core/alarm/services/alarm-api.service.spec.ts similarity index 93% rename from frontend/src/app/core/alarm/services/alarm-api.service.spec.ts rename to frontend/test/unit/app/core/alarm/services/alarm-api.service.spec.ts index 5b483211..c6032d96 100644 --- a/frontend/src/app/core/alarm/services/alarm-api.service.spec.ts +++ b/frontend/test/unit/app/core/alarm/services/alarm-api.service.spec.ts @@ -2,13 +2,13 @@ import { HttpErrorResponse, provideHttpClient } from '@angular/common/http'; import { HttpTestingController, provideHttpClientTesting } from '@angular/common/http/testing'; import { TestBed } from '@angular/core/testing'; import { afterEach, beforeEach, describe, expect, it } from 'vitest'; -import { AlarmPriority } from '../models/alarm-priority.enum'; -import type { AlarmRule } from '../models/alarm-rule.model'; -import type { ActiveAlarm } from '../models/active-alarm.model'; -import type { CreateAlarmRuleRequestDto } from '../models/dto/create-alarm-rule-request.model.dto'; -import type { UpdateAlarmRuleRequestDto } from '../models/dto/update-alarm-rule-request.model.dto'; -import { API_BASE_URL } from '../../tokens/api-base-url.token'; -import { AlarmApiService } from './alarm-api.service'; +import { AlarmPriority } from 'src/app/core/alarm/models/alarm-priority.enum'; +import type { AlarmRule } from 'src/app/core/alarm/models/alarm-rule.model'; +import type { ActiveAlarm } from 'src/app/core/alarm/models/active-alarm.model'; +import type { CreateAlarmRuleRequestDto } from 'src/app/core/alarm/models/dto/create-alarm-rule-request.model.dto'; +import type { UpdateAlarmRuleRequestDto } from 'src/app/core/alarm/models/dto/update-alarm-rule-request.model.dto'; +import { API_BASE_URL } from 'src/app/core/tokens/api-base-url.token'; +import { AlarmApiService } from 'src/app/core/alarm/services/alarm-api.service'; describe('AlarmApiService', () => { let service: AlarmApiService; diff --git a/frontend/src/app/core/alarm/services/alarm-lifecycle-notifier.service.spec.ts b/frontend/test/unit/app/core/alarm/services/alarm-lifecycle-notifier.service.spec.ts similarity index 88% rename from frontend/src/app/core/alarm/services/alarm-lifecycle-notifier.service.spec.ts rename to frontend/test/unit/app/core/alarm/services/alarm-lifecycle-notifier.service.spec.ts index 805c1ee8..1f57f7fa 100644 --- a/frontend/src/app/core/alarm/services/alarm-lifecycle-notifier.service.spec.ts +++ b/frontend/test/unit/app/core/alarm/services/alarm-lifecycle-notifier.service.spec.ts @@ -1,7 +1,7 @@ import { TestBed } from '@angular/core/testing'; import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'; -import { AlarmStateService } from './alarm-state.service'; -import { AlarmLifecycleNotifierService } from './alarm-lifecycle-notifier.service'; +import { AlarmStateService } from 'src/app/core/alarm/services/alarm-state.service'; +import { AlarmLifecycleNotifierService } from 'src/app/core/alarm/services/alarm-lifecycle-notifier.service'; describe('AlarmLifecycleNotifierService', () => { let service: AlarmLifecycleNotifierService; diff --git a/frontend/src/app/core/alarm/services/alarm-management-refresh.service.spec.ts b/frontend/test/unit/app/core/alarm/services/alarm-management-refresh.service.spec.ts similarity index 91% rename from frontend/src/app/core/alarm/services/alarm-management-refresh.service.spec.ts rename to frontend/test/unit/app/core/alarm/services/alarm-management-refresh.service.spec.ts index c32d8183..cf66503e 100644 --- a/frontend/src/app/core/alarm/services/alarm-management-refresh.service.spec.ts +++ b/frontend/test/unit/app/core/alarm/services/alarm-management-refresh.service.spec.ts @@ -1,7 +1,7 @@ import { TestBed } from '@angular/core/testing'; import { firstValueFrom, take } from 'rxjs'; import { beforeEach, describe, expect, it, vi } from 'vitest'; -import { AlarmManagementRefreshService } from './alarm-management-refresh.service'; +import { AlarmManagementRefreshService } from 'src/app/core/alarm/services/alarm-management-refresh.service'; describe('AlarmManagementRefreshService', () => { let service: AlarmManagementRefreshService; diff --git a/frontend/src/app/core/alarm/services/alarm-state.service.spec.ts b/frontend/test/unit/app/core/alarm/services/alarm-state.service.spec.ts similarity index 96% rename from frontend/src/app/core/alarm/services/alarm-state.service.spec.ts rename to frontend/test/unit/app/core/alarm/services/alarm-state.service.spec.ts index c1ad2619..1f092f58 100644 --- a/frontend/src/app/core/alarm/services/alarm-state.service.spec.ts +++ b/frontend/test/unit/app/core/alarm/services/alarm-state.service.spec.ts @@ -1,11 +1,11 @@ import { TestBed } from '@angular/core/testing'; import { Subscription } from 'rxjs'; import { afterEach, beforeEach, describe, expect, it } from 'vitest'; -import { AlarmEvent } from '../models/alarm-event.model'; -import { AlarmPriority } from '../models/alarm-priority.enum'; -import { ActiveAlarm } from '../models/active-alarm.model'; -import { NotificationEvent } from '../../../features/notification/models/notification-event.model'; -import { AlarmStateService } from './alarm-state.service'; +import { AlarmEvent } from 'src/app/core/alarm/models/alarm-event.model'; +import { AlarmPriority } from 'src/app/core/alarm/models/alarm-priority.enum'; +import { ActiveAlarm } from 'src/app/core/alarm/models/active-alarm.model'; +import { NotificationEvent } from 'src/app/features/notification/models/notification-event.model'; +import { AlarmStateService } from 'src/app/core/alarm/services/alarm-state.service'; describe('AlarmStateService', () => { let service: AlarmStateService; diff --git a/frontend/src/app/core/alarm/services/event-subscription.service.spec.ts b/frontend/test/unit/app/core/alarm/services/event-subscription.service.spec.ts similarity index 94% rename from frontend/src/app/core/alarm/services/event-subscription.service.spec.ts rename to frontend/test/unit/app/core/alarm/services/event-subscription.service.spec.ts index 1a0d2128..797c4103 100644 --- a/frontend/src/app/core/alarm/services/event-subscription.service.spec.ts +++ b/frontend/test/unit/app/core/alarm/services/event-subscription.service.spec.ts @@ -3,15 +3,15 @@ import { TestBed } from '@angular/core/testing'; import { BehaviorSubject, Subscription, of, throwError } from 'rxjs'; import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'; import { Socket } from 'socket.io-client'; -import { API_BASE_URL } from '../../tokens/api-base-url.token'; -import { InternalAuthService } from '../../services/internal-auth.service'; -import { ConnectionStatus } from '../models/connection-status.enum'; -import { AlarmPriority } from '../models/alarm-priority.enum'; -import { AlarmStateService } from './alarm-state.service'; -import { AlarmApiService } from './alarm-api.service'; -import { EventSubscriptionService, SOCKET_IO_FACTORY } from './event-subscription.service'; -import { UserRole } from '../../models/user-role.enum'; -import { UserSession } from '../../../features/user-auth/models/user-session.model'; +import { API_BASE_URL } from 'src/app/core/tokens/api-base-url.token'; +import { InternalAuthService } from 'src/app/core/services/internal-auth.service'; +import { ConnectionStatus } from 'src/app/core/alarm/models/connection-status.enum'; +import { AlarmPriority } from 'src/app/core/alarm/models/alarm-priority.enum'; +import { AlarmStateService } from 'src/app/core/alarm/services/alarm-state.service'; +import { AlarmApiService } from 'src/app/core/alarm/services/alarm-api.service'; +import { EventSubscriptionService, SOCKET_IO_FACTORY } from 'src/app/core/alarm/services/event-subscription.service'; +import { UserRole } from 'src/app/core/models/user-role.enum'; +import { UserSession } from 'src/app/features/user-auth/models/user-session.model'; type SocketEventHandler = (payload?: unknown) => void; diff --git a/frontend/src/app/core/alarm/services/realtime-alarm-event-normalizer.service.spec.ts b/frontend/test/unit/app/core/alarm/services/realtime-alarm-event-normalizer.service.spec.ts similarity index 93% rename from frontend/src/app/core/alarm/services/realtime-alarm-event-normalizer.service.spec.ts rename to frontend/test/unit/app/core/alarm/services/realtime-alarm-event-normalizer.service.spec.ts index 7b5593af..adb0b5d8 100644 --- a/frontend/src/app/core/alarm/services/realtime-alarm-event-normalizer.service.spec.ts +++ b/frontend/test/unit/app/core/alarm/services/realtime-alarm-event-normalizer.service.spec.ts @@ -1,6 +1,6 @@ import { TestBed } from '@angular/core/testing'; import { beforeEach, describe, expect, it } from 'vitest'; -import { RealtimeAlarmEventNormalizerService } from './realtime-alarm-event-normalizer.service'; +import { RealtimeAlarmEventNormalizerService } from 'src/app/core/alarm/services/realtime-alarm-event-normalizer.service'; describe('RealtimeAlarmEventNormalizerService', () => { let service: RealtimeAlarmEventNormalizerService; diff --git a/frontend/src/app/core/alarm/services/ward-realtime-cache.service.spec.ts b/frontend/test/unit/app/core/alarm/services/ward-realtime-cache.service.spec.ts similarity index 93% rename from frontend/src/app/core/alarm/services/ward-realtime-cache.service.spec.ts rename to frontend/test/unit/app/core/alarm/services/ward-realtime-cache.service.spec.ts index 0c7a94ef..1c247ff4 100644 --- a/frontend/src/app/core/alarm/services/ward-realtime-cache.service.spec.ts +++ b/frontend/test/unit/app/core/alarm/services/ward-realtime-cache.service.spec.ts @@ -1,6 +1,6 @@ import { TestBed } from '@angular/core/testing'; import { beforeEach, describe, expect, it } from 'vitest'; -import { WardRealtimeCacheService } from './ward-realtime-cache.service'; +import { WardRealtimeCacheService } from 'src/app/core/alarm/services/ward-realtime-cache.service'; describe('WardRealtimeCacheService', () => { let service: WardRealtimeCacheService; diff --git a/frontend/src/app/core/alarm/services/ward-socket-room-coordinator.service.spec.ts b/frontend/test/unit/app/core/alarm/services/ward-socket-room-coordinator.service.spec.ts similarity index 90% rename from frontend/src/app/core/alarm/services/ward-socket-room-coordinator.service.spec.ts rename to frontend/test/unit/app/core/alarm/services/ward-socket-room-coordinator.service.spec.ts index 6f17b299..0710377a 100644 --- a/frontend/src/app/core/alarm/services/ward-socket-room-coordinator.service.spec.ts +++ b/frontend/test/unit/app/core/alarm/services/ward-socket-room-coordinator.service.spec.ts @@ -1,7 +1,7 @@ import { TestBed } from '@angular/core/testing'; import { beforeEach, describe, expect, it, vi } from 'vitest'; -import { WardRealtimeCacheService } from './ward-realtime-cache.service'; -import { WardSocketRoomCoordinatorService } from './ward-socket-room-coordinator.service'; +import { WardRealtimeCacheService } from 'src/app/core/alarm/services/ward-realtime-cache.service'; +import { WardSocketRoomCoordinatorService } from 'src/app/core/alarm/services/ward-socket-room-coordinator.service'; describe('WardSocketRoomCoordinatorService', () => { let service: WardSocketRoomCoordinatorService; diff --git a/frontend/src/app/core/guards/admin.guard.spec.ts b/frontend/test/unit/app/core/guards/admin.guard.spec.ts similarity index 77% rename from frontend/src/app/core/guards/admin.guard.spec.ts rename to frontend/test/unit/app/core/guards/admin.guard.spec.ts index 84e72771..727e3fae 100644 --- a/frontend/src/app/core/guards/admin.guard.spec.ts +++ b/frontend/test/unit/app/core/guards/admin.guard.spec.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest'; -import { adminGuard } from './admin.guard'; +import { adminGuard } from 'src/app/core/guards/admin.guard'; describe('adminGuard', () => { it('consente sempre l accesso', () => { diff --git a/frontend/src/app/core/guards/auth.guard.spec.ts b/frontend/test/unit/app/core/guards/auth.guard.spec.ts similarity index 93% rename from frontend/src/app/core/guards/auth.guard.spec.ts rename to frontend/test/unit/app/core/guards/auth.guard.spec.ts index 9087c9f5..6b30d00a 100644 --- a/frontend/src/app/core/guards/auth.guard.spec.ts +++ b/frontend/test/unit/app/core/guards/auth.guard.spec.ts @@ -2,8 +2,8 @@ import { TestBed } from '@angular/core/testing'; import { Router } from '@angular/router'; import { firstValueFrom, of } from 'rxjs'; import { describe, expect, it, beforeEach, vi } from 'vitest'; -import { InternalAuthService } from '../services/internal-auth.service'; -import { authGuard } from './auth.guard'; +import { InternalAuthService } from 'src/app/core/services/internal-auth.service'; +import { authGuard } from 'src/app/core/guards/auth.guard'; describe('authGuard', () => { const routerMock = { diff --git a/frontend/src/app/core/guards/role.guard.spec.ts b/frontend/test/unit/app/core/guards/role.guard.spec.ts similarity index 89% rename from frontend/src/app/core/guards/role.guard.spec.ts rename to frontend/test/unit/app/core/guards/role.guard.spec.ts index 23073f67..a475d392 100644 --- a/frontend/src/app/core/guards/role.guard.spec.ts +++ b/frontend/test/unit/app/core/guards/role.guard.spec.ts @@ -1,9 +1,9 @@ import { TestBed } from '@angular/core/testing'; import { Router } from '@angular/router'; import { describe, expect, it, beforeEach, vi } from 'vitest'; -import { UserRole } from '../models/user-role.enum'; -import { InternalAuthService } from '../services/internal-auth.service'; -import { roleGuard } from './role.guard'; +import { UserRole } from 'src/app/core/models/user-role.enum'; +import { InternalAuthService } from 'src/app/core/services/internal-auth.service'; +import { roleGuard } from 'src/app/core/guards/role.guard'; describe('roleGuard', () => { const routerMock = { diff --git a/frontend/src/app/core/interceptors/auth.interceptor.spec.ts b/frontend/test/unit/app/core/interceptors/auth.interceptor.spec.ts similarity index 96% rename from frontend/src/app/core/interceptors/auth.interceptor.spec.ts rename to frontend/test/unit/app/core/interceptors/auth.interceptor.spec.ts index c7b9f55e..ab2c23f8 100644 --- a/frontend/src/app/core/interceptors/auth.interceptor.spec.ts +++ b/frontend/test/unit/app/core/interceptors/auth.interceptor.spec.ts @@ -2,8 +2,8 @@ import { HttpErrorResponse, HttpRequest, HttpResponse } from '@angular/common/ht import { TestBed } from '@angular/core/testing'; import { of, throwError } from 'rxjs'; import { beforeEach, describe, expect, it, vi } from 'vitest'; -import { InternalAuthService } from '../services/internal-auth.service'; -import { authInterceptor } from './auth.interceptor'; +import { InternalAuthService } from 'src/app/core/services/internal-auth.service'; +import { authInterceptor } from 'src/app/core/interceptors/auth.interceptor'; describe('authInterceptor', () => { const authServiceMock = { diff --git a/frontend/src/app/core/notification/services/notification-api.service.spec.ts b/frontend/test/unit/app/core/notification/services/notification-api.service.spec.ts similarity index 94% rename from frontend/src/app/core/notification/services/notification-api.service.spec.ts rename to frontend/test/unit/app/core/notification/services/notification-api.service.spec.ts index e4c3db8d..368ef0ca 100644 --- a/frontend/src/app/core/notification/services/notification-api.service.spec.ts +++ b/frontend/test/unit/app/core/notification/services/notification-api.service.spec.ts @@ -3,11 +3,11 @@ import { HttpTestingController, provideHttpClientTesting } from '@angular/common import { TestBed } from '@angular/core/testing'; import { of } from 'rxjs'; import { afterEach, beforeEach, describe, expect, it } from 'vitest'; -import { UserRole } from '../../models/user-role.enum'; -import { InternalAuthService } from '../../services/internal-auth.service'; -import type { NotificationEvent } from '../../../features/notification/models/notification-event.model'; -import { API_BASE_URL } from '../../tokens/api-base-url.token'; -import { NotificationApiService } from './notification-api.service'; +import { UserRole } from 'src/app/core/models/user-role.enum'; +import { InternalAuthService } from 'src/app/core/services/internal-auth.service'; +import type { NotificationEvent } from 'src/app/features/notification/models/notification-event.model'; +import { API_BASE_URL } from 'src/app/core/tokens/api-base-url.token'; +import { NotificationApiService } from 'src/app/core/notification/services/notification-api.service'; describe('NotificationApiService', () => { let service: NotificationApiService; diff --git a/frontend/src/app/core/services/api-error-display.service.spec.ts b/frontend/test/unit/app/core/services/api-error-display.service.spec.ts similarity index 98% rename from frontend/src/app/core/services/api-error-display.service.spec.ts rename to frontend/test/unit/app/core/services/api-error-display.service.spec.ts index 15cbab21..55140513 100644 --- a/frontend/src/app/core/services/api-error-display.service.spec.ts +++ b/frontend/test/unit/app/core/services/api-error-display.service.spec.ts @@ -1,7 +1,7 @@ import { HttpErrorResponse } from '@angular/common/http'; import { TestBed } from '@angular/core/testing'; import { beforeEach, describe, expect, it } from 'vitest'; -import { ApiErrorDisplayService } from './api-error-display.service'; +import { ApiErrorDisplayService } from 'src/app/core/services/api-error-display.service'; describe('ApiErrorDisplayService', () => { let service: ApiErrorDisplayService; diff --git a/frontend/src/app/core/services/breadcrumb.service.spec.ts b/frontend/test/unit/app/core/services/breadcrumb.service.spec.ts similarity index 96% rename from frontend/src/app/core/services/breadcrumb.service.spec.ts rename to frontend/test/unit/app/core/services/breadcrumb.service.spec.ts index 971f0d9b..0bbe3aff 100644 --- a/frontend/src/app/core/services/breadcrumb.service.spec.ts +++ b/frontend/test/unit/app/core/services/breadcrumb.service.spec.ts @@ -2,7 +2,7 @@ import { TestBed } from '@angular/core/testing'; import { Router, NavigationEnd, ActivatedRoute } from '@angular/router'; import { firstValueFrom, take, Observable, Subject } from 'rxjs'; import { reduce } from 'rxjs/operators'; -import { BreadcrumbService, Breadcrumb } from './breadcrumb.service'; +import { BreadcrumbService, Breadcrumb } from 'src/app/core/services/breadcrumb.service'; function makeSnapshot(urlSegments: string[], data: Record = {}) { return { diff --git a/frontend/src/app/core/services/internal-auth.service.spec.ts b/frontend/test/unit/app/core/services/internal-auth.service.spec.ts similarity index 97% rename from frontend/src/app/core/services/internal-auth.service.spec.ts rename to frontend/test/unit/app/core/services/internal-auth.service.spec.ts index 284c9b57..3c3beaf5 100644 --- a/frontend/src/app/core/services/internal-auth.service.spec.ts +++ b/frontend/test/unit/app/core/services/internal-auth.service.spec.ts @@ -3,9 +3,9 @@ import { HttpTestingController, provideHttpClientTesting } from '@angular/common import { provideHttpClient } from '@angular/common/http'; import { firstValueFrom } from 'rxjs'; import { describe, expect, it, beforeEach } from 'vitest'; -import { API_BASE_URL } from '../tokens/api-base-url.token'; -import { UserRole } from '../models/user-role.enum'; -import { InternalAuthService } from './internal-auth.service'; +import { API_BASE_URL } from 'src/app/core/tokens/api-base-url.token'; +import { UserRole } from 'src/app/core/models/user-role.enum'; +import { InternalAuthService } from 'src/app/core/services/internal-auth.service'; function toBase64Url(value: string): string { return btoa(value).replaceAll('+', '-').replaceAll('/', '_').replaceAll('=', ''); diff --git a/frontend/src/app/features/alarm-configuration/components/alarm-config-form/alarm-config-form.component.spec.ts b/frontend/test/unit/app/features/alarm-configuration/components/alarm-config-form/alarm-config-form.component.spec.ts similarity index 95% rename from frontend/src/app/features/alarm-configuration/components/alarm-config-form/alarm-config-form.component.spec.ts rename to frontend/test/unit/app/features/alarm-configuration/components/alarm-config-form/alarm-config-form.component.spec.ts index 0a712e7e..8c704a38 100644 --- a/frontend/src/app/features/alarm-configuration/components/alarm-config-form/alarm-config-form.component.spec.ts +++ b/frontend/test/unit/app/features/alarm-configuration/components/alarm-config-form/alarm-config-form.component.spec.ts @@ -1,12 +1,12 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; import { of, throwError } from 'rxjs'; import { beforeEach, describe, expect, it, vi } from 'vitest'; -import { AlarmPriority } from '../../../../core/alarm/models/alarm-priority.enum'; -import { ThresholdOperator } from '../../../../core/alarm/models/threshold-operator.enum'; -import { ApartmentApiService } from '../../../apartment-monitor/services/apartment-api.service'; -import { WardApiService } from '../../../ward-management/services/ward-api.service'; -import type { AlarmRule } from '../../../../core/alarm/models/alarm-rule.model'; -import { AlarmConfigFormComponent } from './alarm-config-form.component'; +import { AlarmPriority } from 'src/app/core/alarm/models/alarm-priority.enum'; +import { ThresholdOperator } from 'src/app/core/alarm/models/threshold-operator.enum'; +import { ApartmentApiService } from 'src/app/features/apartment-monitor/services/apartment-api.service'; +import { WardApiService } from 'src/app/features/ward-management/services/ward-api.service'; +import type { AlarmRule } from 'src/app/core/alarm/models/alarm-rule.model'; +import { AlarmConfigFormComponent } from 'src/app/features/alarm-configuration/components/alarm-config-form/alarm-config-form.component'; describe('AlarmConfigFormComponent', () => { let component: AlarmConfigFormComponent; @@ -20,7 +20,7 @@ describe('AlarmConfigFormComponent', () => { const apartmentApiStub = { getAllPlants: vi.fn(), - getApartmentByPlantId: vi.fn(), + loadApartmentViewForPlantId: vi.fn(), }; const existingRule: AlarmRule = { @@ -151,7 +151,7 @@ describe('AlarmConfigFormComponent', () => { { id: 'plant-2', name: 'Appartamento 2' }, ]) ); - apartmentApiStub.getApartmentByPlantId.mockReturnValue(of(createCreateModeApartment())); + apartmentApiStub.loadApartmentViewForPlantId.mockReturnValue(of(createCreateModeApartment())); apartmentApiStub.getAllPlants.mockReturnValue(of(createEditModePlants())); await TestBed.configureTestingModule({ @@ -253,7 +253,7 @@ describe('AlarmConfigFormComponent', () => { component.form.controls.plantId.setValue('plant-1'); - expect(apartmentApiStub.getApartmentByPlantId).toHaveBeenCalledWith('plant-1'); + expect(apartmentApiStub.loadApartmentViewForPlantId).toHaveBeenCalledWith('plant-1'); expect(component.form.controls.deviceId.enabled).toBe(true); expect(component.deviceOptions()[0]?.id).toBe('sensor-1'); expect(component.deviceOptions()[0]?.label).toBe('Soggiorno - Sensore porta'); @@ -526,7 +526,7 @@ describe('AlarmConfigFormComponent', () => { }); it('imposta errore quando il caricamento dispositivi fallisce', () => { - apartmentApiStub.getApartmentByPlantId.mockReturnValueOnce(throwError(() => new Error('network'))); + apartmentApiStub.loadApartmentViewForPlantId.mockReturnValueOnce(throwError(() => new Error('network'))); setInputs('create', null); component.form.controls.plantId.setValue('plant-1'); diff --git a/frontend/src/app/features/alarm-configuration/components/alarm-config-page/alarm-config-page.component.spec.ts b/frontend/test/unit/app/features/alarm-configuration/components/alarm-config-page/alarm-config-page.component.spec.ts similarity index 92% rename from frontend/src/app/features/alarm-configuration/components/alarm-config-page/alarm-config-page.component.spec.ts rename to frontend/test/unit/app/features/alarm-configuration/components/alarm-config-page/alarm-config-page.component.spec.ts index c542fe4c..a5083a9a 100644 --- a/frontend/src/app/features/alarm-configuration/components/alarm-config-page/alarm-config-page.component.spec.ts +++ b/frontend/test/unit/app/features/alarm-configuration/components/alarm-config-page/alarm-config-page.component.spec.ts @@ -1,13 +1,13 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; import { BehaviorSubject, EMPTY, Subject, of } from 'rxjs'; import { beforeEach, describe, expect, it, vi } from 'vitest'; -import { AlarmPriority } from '../../../../core/alarm/models/alarm-priority.enum'; -import { ThresholdOperator } from '../../../../core/alarm/models/threshold-operator.enum'; -import { ApartmentApiService } from '../../../apartment-monitor/services/apartment-api.service'; -import { WardApiService } from '../../../ward-management/services/ward-api.service'; -import type { AlarmRule } from '../../../../core/alarm/models/alarm-rule.model'; -import { AlarmConfigStateService } from '../../services/alarm-config-state.service'; -import { AlarmConfigPageComponent } from './alarm-config-page.component'; +import { AlarmPriority } from 'src/app/core/alarm/models/alarm-priority.enum'; +import { ThresholdOperator } from 'src/app/core/alarm/models/threshold-operator.enum'; +import { ApartmentApiService } from 'src/app/features/apartment-monitor/services/apartment-api.service'; +import { WardApiService } from 'src/app/features/ward-management/services/ward-api.service'; +import type { AlarmRule } from 'src/app/core/alarm/models/alarm-rule.model'; +import { AlarmConfigStateService } from 'src/app/features/alarm-configuration/services/alarm-config-state.service'; +import { AlarmConfigPageComponent } from 'src/app/features/alarm-configuration/components/alarm-config-page/alarm-config-page.component'; describe('AlarmConfigPageComponent', () => { let component: AlarmConfigPageComponent; @@ -31,7 +31,7 @@ describe('AlarmConfigPageComponent', () => { }; const apartmentApiStub = { - getApartmentByPlantId: vi.fn(() => of({ id: 'plant-1', name: 'Plant', isEnabled: true, rooms: [] })), + loadApartmentViewForPlantId: vi.fn(() => of({ id: 'plant-1', name: 'Plant', isEnabled: true, rooms: [] })), }; const alarmRule: AlarmRule = { diff --git a/frontend/src/app/features/alarm-configuration/helpers/alarm-config-form-field-orchestrator.helper.spec.ts b/frontend/test/unit/app/features/alarm-configuration/helpers/alarm-config-form-field-orchestrator.helper.spec.ts similarity index 92% rename from frontend/src/app/features/alarm-configuration/helpers/alarm-config-form-field-orchestrator.helper.spec.ts rename to frontend/test/unit/app/features/alarm-configuration/helpers/alarm-config-form-field-orchestrator.helper.spec.ts index 769ba762..f2544a6a 100644 --- a/frontend/src/app/features/alarm-configuration/helpers/alarm-config-form-field-orchestrator.helper.spec.ts +++ b/frontend/test/unit/app/features/alarm-configuration/helpers/alarm-config-form-field-orchestrator.helper.spec.ts @@ -1,8 +1,8 @@ import { FormControl } from '@angular/forms'; import { TestBed } from '@angular/core/testing'; import { beforeEach, describe, expect, it } from 'vitest'; -import { Datapoint } from '../../apartment-monitor/models/datapoint.model'; -import { AlarmConfigFormFieldOrchestratorHelper } from './alarm-config-form-field-orchestrator.helper'; +import { Datapoint } from 'src/app/features/apartment-monitor/models/datapoint.model'; +import { AlarmConfigFormFieldOrchestratorHelper } from 'src/app/features/alarm-configuration/helpers/alarm-config-form-field-orchestrator.helper'; describe('AlarmConfigFormFieldOrchestratorHelper', () => { let helper: AlarmConfigFormFieldOrchestratorHelper; diff --git a/frontend/src/app/features/alarm-configuration/helpers/alarm-config-form-validation.helper.spec.ts b/frontend/test/unit/app/features/alarm-configuration/helpers/alarm-config-form-validation.helper.spec.ts similarity index 92% rename from frontend/src/app/features/alarm-configuration/helpers/alarm-config-form-validation.helper.spec.ts rename to frontend/test/unit/app/features/alarm-configuration/helpers/alarm-config-form-validation.helper.spec.ts index df9a517a..fe3015eb 100644 --- a/frontend/src/app/features/alarm-configuration/helpers/alarm-config-form-validation.helper.spec.ts +++ b/frontend/test/unit/app/features/alarm-configuration/helpers/alarm-config-form-validation.helper.spec.ts @@ -1,9 +1,9 @@ import { FormControl } from '@angular/forms'; import { TestBed } from '@angular/core/testing'; import { beforeEach, describe, expect, it } from 'vitest'; -import { ThresholdOperator } from '../../../core/alarm/models/threshold-operator.enum'; -import { Datapoint } from '../../apartment-monitor/models/datapoint.model'; -import { AlarmConfigFormValidationHelper } from './alarm-config-form-validation.helper'; +import { ThresholdOperator } from 'src/app/core/alarm/models/threshold-operator.enum'; +import { Datapoint } from 'src/app/features/apartment-monitor/models/datapoint.model'; +import { AlarmConfigFormValidationHelper } from 'src/app/features/alarm-configuration/helpers/alarm-config-form-validation.helper'; describe('AlarmConfigFormValidationHelper', () => { let helper: AlarmConfigFormValidationHelper; diff --git a/frontend/src/app/features/alarm-configuration/mappers/alarm-rule-form.mapper.spec.ts b/frontend/test/unit/app/features/alarm-configuration/mappers/alarm-rule-form.mapper.spec.ts similarity index 93% rename from frontend/src/app/features/alarm-configuration/mappers/alarm-rule-form.mapper.spec.ts rename to frontend/test/unit/app/features/alarm-configuration/mappers/alarm-rule-form.mapper.spec.ts index 6b742a5e..deedca2b 100644 --- a/frontend/src/app/features/alarm-configuration/mappers/alarm-rule-form.mapper.spec.ts +++ b/frontend/test/unit/app/features/alarm-configuration/mappers/alarm-rule-form.mapper.spec.ts @@ -1,9 +1,9 @@ import { TestBed } from '@angular/core/testing'; import { beforeEach, describe, expect, it } from 'vitest'; -import { AlarmPriority } from '../../../core/alarm/models/alarm-priority.enum'; -import type { AlarmRule } from '../../../core/alarm/models/alarm-rule.model'; -import { ThresholdOperator } from '../../../core/alarm/models/threshold-operator.enum'; -import { AlarmRuleFormMapper } from './alarm-rule-form.mapper'; +import { AlarmPriority } from 'src/app/core/alarm/models/alarm-priority.enum'; +import type { AlarmRule } from 'src/app/core/alarm/models/alarm-rule.model'; +import { ThresholdOperator } from 'src/app/core/alarm/models/threshold-operator.enum'; +import { AlarmRuleFormMapper } from 'src/app/features/alarm-configuration/mappers/alarm-rule-form.mapper'; describe('AlarmRuleFormMapper', () => { let mapper: AlarmRuleFormMapper; diff --git a/frontend/src/app/features/alarm-configuration/mappers/alarm-rule-request.mapper.spec.ts b/frontend/test/unit/app/features/alarm-configuration/mappers/alarm-rule-request.mapper.spec.ts similarity index 94% rename from frontend/src/app/features/alarm-configuration/mappers/alarm-rule-request.mapper.spec.ts rename to frontend/test/unit/app/features/alarm-configuration/mappers/alarm-rule-request.mapper.spec.ts index 80588eb3..ad755f62 100644 --- a/frontend/src/app/features/alarm-configuration/mappers/alarm-rule-request.mapper.spec.ts +++ b/frontend/test/unit/app/features/alarm-configuration/mappers/alarm-rule-request.mapper.spec.ts @@ -1,10 +1,10 @@ import { TestBed } from '@angular/core/testing'; import { beforeEach, describe, expect, it } from 'vitest'; -import { AlarmPriority } from '../../../core/alarm/models/alarm-priority.enum'; -import type { AlarmRule } from '../../../core/alarm/models/alarm-rule.model'; -import { ThresholdOperator } from '../../../core/alarm/models/threshold-operator.enum'; -import type { AlarmConfigFormValue } from '../models/alarm-config-form-value.model'; -import { AlarmRuleRequestMapper } from './alarm-rule-request.mapper'; +import { AlarmPriority } from 'src/app/core/alarm/models/alarm-priority.enum'; +import type { AlarmRule } from 'src/app/core/alarm/models/alarm-rule.model'; +import { ThresholdOperator } from 'src/app/core/alarm/models/threshold-operator.enum'; +import type { AlarmConfigFormValue } from 'src/app/features/alarm-configuration/models/alarm-config-form-value.model'; +import { AlarmRuleRequestMapper } from 'src/app/features/alarm-configuration/mappers/alarm-rule-request.mapper'; describe('AlarmRuleRequestMapper', () => { let mapper: AlarmRuleRequestMapper; diff --git a/frontend/src/app/features/alarm-configuration/services/alarm-config-form-state.service.spec.ts b/frontend/test/unit/app/features/alarm-configuration/services/alarm-config-form-state.service.spec.ts similarity index 86% rename from frontend/src/app/features/alarm-configuration/services/alarm-config-form-state.service.spec.ts rename to frontend/test/unit/app/features/alarm-configuration/services/alarm-config-form-state.service.spec.ts index 9505bf39..9bb84110 100644 --- a/frontend/src/app/features/alarm-configuration/services/alarm-config-form-state.service.spec.ts +++ b/frontend/test/unit/app/features/alarm-configuration/services/alarm-config-form-state.service.spec.ts @@ -1,10 +1,10 @@ import { TestBed } from '@angular/core/testing'; import { firstValueFrom, of, throwError } from 'rxjs'; import { beforeEach, describe, expect, it, vi } from 'vitest'; -import { WardApiService } from '../../ward-management/services/ward-api.service'; -import { ApartmentApiService } from '../../apartment-monitor/services/apartment-api.service'; -import { DeviceDatapointExtractionService, DeviceDatapointOption } from './device-datapoint-extraction.service'; -import { AlarmConfigFormStateService } from './alarm-config-form-state.service'; +import { WardApiService } from 'src/app/features/ward-management/services/ward-api.service'; +import { ApartmentApiService } from 'src/app/features/apartment-monitor/services/apartment-api.service'; +import { DeviceDatapointExtractionService, DeviceDatapointOption } from 'src/app/features/alarm-configuration/services/device-datapoint-extraction.service'; +import { AlarmConfigFormStateService } from 'src/app/features/alarm-configuration/services/alarm-config-form-state.service'; describe('AlarmConfigFormStateService', () => { let service: AlarmConfigFormStateService; @@ -16,7 +16,7 @@ describe('AlarmConfigFormStateService', () => { }; const apartmentApiStub = { - getApartmentByPlantId: vi.fn(), + loadApartmentViewForPlantId: vi.fn(), getAllPlants: vi.fn(), }; @@ -30,7 +30,7 @@ describe('AlarmConfigFormStateService', () => { wardApiStub.getAvailablePlants.mockReturnValue(of([])); wardApiStub.getWards.mockReturnValue(of([])); wardApiStub.getPlantsByWardId.mockReturnValue(of([])); - apartmentApiStub.getApartmentByPlantId.mockReturnValue(of({ id: 'plant-1', rooms: [] })); + apartmentApiStub.loadApartmentViewForPlantId.mockReturnValue(of({ id: 'plant-1', rooms: [] })); apartmentApiStub.getAllPlants.mockReturnValue(of([])); datapointExtractionStub.extractDeviceOptions.mockReturnValue([]); datapointExtractionStub.findDatapointByDeviceAndDatapointId.mockReturnValue(null); @@ -83,14 +83,14 @@ describe('AlarmConfigFormStateService', () => { const result = await firstValueFrom(service.loadDeviceOptionsByPlant('plant-1')); - expect(apartmentApiStub.getApartmentByPlantId).toHaveBeenCalledWith('plant-1'); + expect(apartmentApiStub.loadApartmentViewForPlantId).toHaveBeenCalledWith('plant-1'); expect(result).toEqual(options); expect(service.isDevicesLoading()).toBe(false); expect(service.devicesLoadError()).toBeNull(); }); it('loadDeviceOptionsByPlant in errore restituisce lista vuota e imposta messaggio', async () => { - apartmentApiStub.getApartmentByPlantId.mockReturnValueOnce(throwError(() => new Error('network'))); + apartmentApiStub.loadApartmentViewForPlantId.mockReturnValueOnce(throwError(() => new Error('network'))); const result = await firstValueFrom(service.loadDeviceOptionsByPlant('plant-1')); diff --git a/frontend/src/app/features/alarm-configuration/services/alarm-config-state.service.spec.ts b/frontend/test/unit/app/features/alarm-configuration/services/alarm-config-state.service.spec.ts similarity index 96% rename from frontend/src/app/features/alarm-configuration/services/alarm-config-state.service.spec.ts rename to frontend/test/unit/app/features/alarm-configuration/services/alarm-config-state.service.spec.ts index 39a39acd..81f445e7 100644 --- a/frontend/src/app/features/alarm-configuration/services/alarm-config-state.service.spec.ts +++ b/frontend/test/unit/app/features/alarm-configuration/services/alarm-config-state.service.spec.ts @@ -1,13 +1,13 @@ import { TestBed } from '@angular/core/testing'; import { firstValueFrom, of, throwError } from 'rxjs'; import { beforeEach, describe, expect, it, vi } from 'vitest'; -import { AlarmPriority } from '../../../core/alarm/models/alarm-priority.enum'; -import type { AlarmRule } from '../../../core/alarm/models/alarm-rule.model'; -import { ThresholdOperator } from '../../../core/alarm/models/threshold-operator.enum'; -import { AlarmApiService } from '../../../core/alarm/services/alarm-api.service'; -import { AlarmManagementRefreshService } from '../../../core/alarm/services/alarm-management-refresh.service'; -import type { AlarmConfigFormValue } from '../models/alarm-config-form-value.model'; -import { AlarmConfigStateService } from './alarm-config-state.service'; +import { AlarmPriority } from 'src/app/core/alarm/models/alarm-priority.enum'; +import type { AlarmRule } from 'src/app/core/alarm/models/alarm-rule.model'; +import { ThresholdOperator } from 'src/app/core/alarm/models/threshold-operator.enum'; +import { AlarmApiService } from 'src/app/core/alarm/services/alarm-api.service'; +import { AlarmManagementRefreshService } from 'src/app/core/alarm/services/alarm-management-refresh.service'; +import type { AlarmConfigFormValue } from 'src/app/features/alarm-configuration/models/alarm-config-form-value.model'; +import { AlarmConfigStateService } from 'src/app/features/alarm-configuration/services/alarm-config-state.service'; describe('AlarmConfigStateService', () => { let service: AlarmConfigStateService; diff --git a/frontend/src/app/features/alarm-configuration/services/alarm-config-table-presenter.service.spec.ts b/frontend/test/unit/app/features/alarm-configuration/services/alarm-config-table-presenter.service.spec.ts similarity index 88% rename from frontend/src/app/features/alarm-configuration/services/alarm-config-table-presenter.service.spec.ts rename to frontend/test/unit/app/features/alarm-configuration/services/alarm-config-table-presenter.service.spec.ts index 291b5acb..358ef0ac 100644 --- a/frontend/src/app/features/alarm-configuration/services/alarm-config-table-presenter.service.spec.ts +++ b/frontend/test/unit/app/features/alarm-configuration/services/alarm-config-table-presenter.service.spec.ts @@ -1,8 +1,8 @@ import { TestBed } from '@angular/core/testing'; import { beforeEach, describe, expect, it } from 'vitest'; -import { AlarmPriority } from '../../../core/alarm/models/alarm-priority.enum'; -import type { AlarmRule } from '../../../core/alarm/models/alarm-rule.model'; -import { AlarmConfigTablePresenterService } from './alarm-config-table-presenter.service'; +import { AlarmPriority } from 'src/app/core/alarm/models/alarm-priority.enum'; +import type { AlarmRule } from 'src/app/core/alarm/models/alarm-rule.model'; +import { AlarmConfigTablePresenterService } from 'src/app/features/alarm-configuration/services/alarm-config-table-presenter.service'; describe('AlarmConfigTablePresenterService', () => { let service: AlarmConfigTablePresenterService; diff --git a/frontend/src/app/features/alarm-configuration/services/device-datapoint-extraction.service.spec.ts b/frontend/test/unit/app/features/alarm-configuration/services/device-datapoint-extraction.service.spec.ts similarity index 90% rename from frontend/src/app/features/alarm-configuration/services/device-datapoint-extraction.service.spec.ts rename to frontend/test/unit/app/features/alarm-configuration/services/device-datapoint-extraction.service.spec.ts index 26d413ad..f345df51 100644 --- a/frontend/src/app/features/alarm-configuration/services/device-datapoint-extraction.service.spec.ts +++ b/frontend/test/unit/app/features/alarm-configuration/services/device-datapoint-extraction.service.spec.ts @@ -1,11 +1,11 @@ import { TestBed } from '@angular/core/testing'; import { beforeEach, describe, expect, it } from 'vitest'; -import { ThresholdOperator } from '../../../core/alarm/models/threshold-operator.enum'; -import { DeviceType } from '../../device-interaction/models/device-type.enum'; -import type { Apartment } from '../../apartment-monitor/models/apartment.model'; -import type { Datapoint } from '../../apartment-monitor/models/datapoint.model'; -import type { PlantDto } from '../../apartment-monitor/models/plant-response.model'; -import { DeviceDatapointExtractionService } from './device-datapoint-extraction.service'; +import { ThresholdOperator } from 'src/app/core/alarm/models/threshold-operator.enum'; +import { DeviceType } from 'src/app/features/device-interaction/models/device-type.enum'; +import type { Apartment } from 'src/app/features/apartment-monitor/models/apartment.model'; +import type { Datapoint } from 'src/app/features/apartment-monitor/models/datapoint.model'; +import type { PlantDto } from 'src/app/features/apartment-monitor/models/plant-response.model'; +import { DeviceDatapointExtractionService } from 'src/app/features/alarm-configuration/services/device-datapoint-extraction.service'; describe('DeviceDatapointExtractionService', () => { let service: DeviceDatapointExtractionService; diff --git a/frontend/src/app/features/alarm-history/components/alarm-history-page.component.spec.ts b/frontend/test/unit/app/features/alarm-history/components/alarm-history-page.component.spec.ts similarity index 88% rename from frontend/src/app/features/alarm-history/components/alarm-history-page.component.spec.ts rename to frontend/test/unit/app/features/alarm-history/components/alarm-history-page.component.spec.ts index b36e35c9..e15b24a4 100644 --- a/frontend/src/app/features/alarm-history/components/alarm-history-page.component.spec.ts +++ b/frontend/test/unit/app/features/alarm-history/components/alarm-history-page.component.spec.ts @@ -1,11 +1,11 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; import { BehaviorSubject } from 'rxjs'; import { beforeEach, describe, expect, it, vi } from 'vitest'; -import { AlarmPriority } from '../../../core/alarm/models/alarm-priority.enum'; -import type { ActiveAlarm } from '../../../core/alarm/models/active-alarm.model'; -import type { AlarmListVm } from '../models/alarm-list-vm.model'; -import { AlarmHistoryService } from '../services/alarm-history.service'; -import { AlarmHistoryPageComponent } from './alarm-history-page.component'; +import { AlarmPriority } from 'src/app/core/alarm/models/alarm-priority.enum'; +import type { ActiveAlarm } from 'src/app/core/alarm/models/active-alarm.model'; +import type { AlarmListVm } from 'src/app/features/alarm-history/models/alarm-list-vm.model'; +import { AlarmHistoryService } from 'src/app/features/alarm-history/services/alarm-history.service'; +import { AlarmHistoryPageComponent } from 'src/app/features/alarm-history/components/alarm-history-page.component'; describe('AlarmHistoryPageComponent', () => { let fixture: ComponentFixture; diff --git a/frontend/src/app/features/alarm-history/services/alarm-history.service.spec.ts b/frontend/test/unit/app/features/alarm-history/services/alarm-history.service.spec.ts similarity index 89% rename from frontend/src/app/features/alarm-history/services/alarm-history.service.spec.ts rename to frontend/test/unit/app/features/alarm-history/services/alarm-history.service.spec.ts index 6335e5c2..a7715356 100644 --- a/frontend/src/app/features/alarm-history/services/alarm-history.service.spec.ts +++ b/frontend/test/unit/app/features/alarm-history/services/alarm-history.service.spec.ts @@ -1,14 +1,14 @@ import { TestBed } from '@angular/core/testing'; import { BehaviorSubject, firstValueFrom, of, take, throwError } from 'rxjs'; import { beforeEach, describe, expect, it, vi } from 'vitest'; -import type { ActiveAlarm } from '../../../core/alarm/models/active-alarm.model'; -import { AlarmPriority } from '../../../core/alarm/models/alarm-priority.enum'; -import { UserRole } from '../../../core/models/user-role.enum'; -import { InternalAuthService } from '../../../core/services/internal-auth.service'; -import type { UserSession } from '../../user-auth/models/user-session.model'; -import { AlarmApiService } from '../../../core/alarm/services/alarm-api.service'; -import { ApiErrorDisplayService } from '../../../core/services/api-error-display.service'; -import { AlarmHistoryService } from './alarm-history.service'; +import type { ActiveAlarm } from 'src/app/core/alarm/models/active-alarm.model'; +import { AlarmPriority } from 'src/app/core/alarm/models/alarm-priority.enum'; +import { UserRole } from 'src/app/core/models/user-role.enum'; +import { InternalAuthService } from 'src/app/core/services/internal-auth.service'; +import type { UserSession } from 'src/app/features/user-auth/models/user-session.model'; +import { AlarmApiService } from 'src/app/core/alarm/services/alarm-api.service'; +import { ApiErrorDisplayService } from 'src/app/core/services/api-error-display.service'; +import { AlarmHistoryService } from 'src/app/features/alarm-history/services/alarm-history.service'; describe('AlarmHistoryService', () => { let service: AlarmHistoryService; diff --git a/frontend/src/app/features/alarm-management/components/alarm-item-component/alarm-item-component.spec.ts b/frontend/test/unit/app/features/alarm-management/components/alarm-item-component/alarm-item-component.spec.ts similarity index 94% rename from frontend/src/app/features/alarm-management/components/alarm-item-component/alarm-item-component.spec.ts rename to frontend/test/unit/app/features/alarm-management/components/alarm-item-component/alarm-item-component.spec.ts index 14fc6c68..53eca222 100644 --- a/frontend/src/app/features/alarm-management/components/alarm-item-component/alarm-item-component.spec.ts +++ b/frontend/test/unit/app/features/alarm-management/components/alarm-item-component/alarm-item-component.spec.ts @@ -1,10 +1,10 @@ import { Pipe, PipeTransform } from '@angular/core'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'; -import { AlarmPriority } from '../../../../core/alarm/models/alarm-priority.enum'; -import type { ActiveAlarm } from '../../../../core/alarm/models/active-alarm.model'; -import { ElapsedTimePipe } from '../../../../shared/pipes/elapsed-time.pipe'; -import { AlarmItemComponent } from './alarm-item-component'; +import { AlarmPriority } from 'src/app/core/alarm/models/alarm-priority.enum'; +import type { ActiveAlarm } from 'src/app/core/alarm/models/active-alarm.model'; +import { ElapsedTimePipe } from 'src/app/shared/pipes/elapsed-time.pipe'; +import { AlarmItemComponent } from 'src/app/features/alarm-management/components/alarm-item-component/alarm-item-component'; @Pipe({ name: 'elapsedTime' }) class MockElapsedTimePipe implements PipeTransform { diff --git a/frontend/src/app/features/alarm-management/components/alarm-page-management-component/alarm-page-management-component.spec.ts b/frontend/test/unit/app/features/alarm-management/components/alarm-page-management-component/alarm-page-management-component.spec.ts similarity index 92% rename from frontend/src/app/features/alarm-management/components/alarm-page-management-component/alarm-page-management-component.spec.ts rename to frontend/test/unit/app/features/alarm-management/components/alarm-page-management-component/alarm-page-management-component.spec.ts index 70681474..9b872c8b 100644 --- a/frontend/src/app/features/alarm-management/components/alarm-page-management-component/alarm-page-management-component.spec.ts +++ b/frontend/test/unit/app/features/alarm-management/components/alarm-page-management-component/alarm-page-management-component.spec.ts @@ -1,17 +1,17 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; import { BehaviorSubject, Subject } from 'rxjs'; import { beforeEach, describe, expect, it, vi } from 'vitest'; -import type { ActiveAlarm } from '../../../../core/alarm/models/active-alarm.model'; -import { AlarmPriority } from '../../../../core/alarm/models/alarm-priority.enum'; -import { UserRole } from '../../../../core/models/user-role.enum'; -import { InternalAuthService } from '../../../../core/services/internal-auth.service'; -import { AlarmManagementRefreshService } from '../../../../core/alarm/services/alarm-management-refresh.service'; +import type { ActiveAlarm } from 'src/app/core/alarm/models/active-alarm.model'; +import { AlarmPriority } from 'src/app/core/alarm/models/alarm-priority.enum'; +import { UserRole } from 'src/app/core/models/user-role.enum'; +import { InternalAuthService } from 'src/app/core/services/internal-auth.service'; +import { AlarmManagementRefreshService } from 'src/app/core/alarm/services/alarm-management-refresh.service'; import { Pipe, type PipeTransform } from '@angular/core'; -import { ElapsedTimePipe } from '../../../../shared/pipes/elapsed-time.pipe'; -import type { UserSession } from '../../../user-auth/models/user-session.model'; -import type { AlarmListVm } from '../../models/alarm-list-vm.model'; -import { AlarmManagementService } from '../../services/alarm-management.service'; -import { AlarmPageManagementComponent } from './alarm-page-management-component'; +import { ElapsedTimePipe } from 'src/app/shared/pipes/elapsed-time.pipe'; +import type { UserSession } from 'src/app/features/user-auth/models/user-session.model'; +import type { AlarmListVm } from 'src/app/features/alarm-management/models/alarm-list-vm.model'; +import { AlarmManagementService } from 'src/app/features/alarm-management/services/alarm-management.service'; +import { AlarmPageManagementComponent } from 'src/app/features/alarm-management/components/alarm-page-management-component/alarm-page-management-component'; @Pipe({ name: 'elapsedTime', diff --git a/frontend/src/app/features/alarm-management/services/alarm-management-table-presenter.service.spec.ts b/frontend/test/unit/app/features/alarm-management/services/alarm-management-table-presenter.service.spec.ts similarity index 92% rename from frontend/src/app/features/alarm-management/services/alarm-management-table-presenter.service.spec.ts rename to frontend/test/unit/app/features/alarm-management/services/alarm-management-table-presenter.service.spec.ts index 9e22fb03..59ad2e7f 100644 --- a/frontend/src/app/features/alarm-management/services/alarm-management-table-presenter.service.spec.ts +++ b/frontend/test/unit/app/features/alarm-management/services/alarm-management-table-presenter.service.spec.ts @@ -1,8 +1,8 @@ import { TestBed } from '@angular/core/testing'; import { beforeEach, describe, expect, it } from 'vitest'; -import type { ActiveAlarm } from '../../../core/alarm/models/active-alarm.model'; -import { AlarmPriority } from '../../../core/alarm/models/alarm-priority.enum'; -import { AlarmManagementTablePresenterService } from './alarm-management-table-presenter.service'; +import type { ActiveAlarm } from 'src/app/core/alarm/models/active-alarm.model'; +import { AlarmPriority } from 'src/app/core/alarm/models/alarm-priority.enum'; +import { AlarmManagementTablePresenterService } from 'src/app/features/alarm-management/services/alarm-management-table-presenter.service'; describe('AlarmManagementTablePresenterService', () => { let service: AlarmManagementTablePresenterService; diff --git a/frontend/src/app/features/alarm-management/services/alarm-management.service.spec.ts b/frontend/test/unit/app/features/alarm-management/services/alarm-management.service.spec.ts similarity index 96% rename from frontend/src/app/features/alarm-management/services/alarm-management.service.spec.ts rename to frontend/test/unit/app/features/alarm-management/services/alarm-management.service.spec.ts index 57198175..1fb52736 100644 --- a/frontend/src/app/features/alarm-management/services/alarm-management.service.spec.ts +++ b/frontend/test/unit/app/features/alarm-management/services/alarm-management.service.spec.ts @@ -1,14 +1,14 @@ import { TestBed } from '@angular/core/testing'; import { BehaviorSubject, Subject, firstValueFrom, of, take, throwError } from 'rxjs'; import { beforeEach, describe, expect, it, vi } from 'vitest'; -import type { ActiveAlarm } from '../../../core/alarm/models/active-alarm.model'; -import { AlarmPriority } from '../../../core/alarm/models/alarm-priority.enum'; -import { UserRole } from '../../../core/models/user-role.enum'; -import { InternalAuthService } from '../../../core/services/internal-auth.service'; -import type { UserSession } from '../../user-auth/models/user-session.model'; -import { AlarmApiService } from '../../../core/alarm/services/alarm-api.service'; -import { AlarmStateService } from '../../../core/alarm/services/alarm-state.service'; -import { AlarmManagementService } from './alarm-management.service'; +import type { ActiveAlarm } from 'src/app/core/alarm/models/active-alarm.model'; +import { AlarmPriority } from 'src/app/core/alarm/models/alarm-priority.enum'; +import { UserRole } from 'src/app/core/models/user-role.enum'; +import { InternalAuthService } from 'src/app/core/services/internal-auth.service'; +import type { UserSession } from 'src/app/features/user-auth/models/user-session.model'; +import { AlarmApiService } from 'src/app/core/alarm/services/alarm-api.service'; +import { AlarmStateService } from 'src/app/core/alarm/services/alarm-state.service'; +import { AlarmManagementService } from 'src/app/features/alarm-management/services/alarm-management.service'; describe('AlarmManagementService', () => { let service: AlarmManagementService; diff --git a/frontend/src/app/features/analytics/analytics.component.spec.ts b/frontend/test/unit/app/features/analytics/analytics.component.spec.ts similarity index 88% rename from frontend/src/app/features/analytics/analytics.component.spec.ts rename to frontend/test/unit/app/features/analytics/analytics.component.spec.ts index 7e0d5e50..f20c03fe 100644 --- a/frontend/src/app/features/analytics/analytics.component.spec.ts +++ b/frontend/test/unit/app/features/analytics/analytics.component.spec.ts @@ -1,10 +1,10 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; -import { AnalyticsComponent } from './analytics.component'; -import { AnalyticsApiService } from './services/analytics-api.service'; +import { AnalyticsComponent } from 'src/app/features/analytics/analytics.component'; +import { AnalyticsApiService } from 'src/app/features/analytics/services/analytics-api.service'; import { of } from 'rxjs'; import { describe, it, expect, beforeEach, vi } from 'vitest'; -import { AnalyticsDto } from './models/analytics.model'; -import { Apartment } from '../apartment-monitor/models/apartment.model'; +import { AnalyticsDto } from 'src/app/features/analytics/models/analytics.model'; +import { Apartment } from 'src/app/features/apartment-monitor/models/apartment.model'; describe('AnalyticsComponent', () => { let component: AnalyticsComponent; diff --git a/frontend/src/app/features/analytics/components/alarm-frequency-chart/alarm-frequency-chart.component.spec.ts b/frontend/test/unit/app/features/analytics/components/alarm-frequency-chart/alarm-frequency-chart.component.spec.ts similarity index 75% rename from frontend/src/app/features/analytics/components/alarm-frequency-chart/alarm-frequency-chart.component.spec.ts rename to frontend/test/unit/app/features/analytics/components/alarm-frequency-chart/alarm-frequency-chart.component.spec.ts index a76c530a..f80f412e 100644 --- a/frontend/src/app/features/analytics/components/alarm-frequency-chart/alarm-frequency-chart.component.spec.ts +++ b/frontend/test/unit/app/features/analytics/components/alarm-frequency-chart/alarm-frequency-chart.component.spec.ts @@ -1,7 +1,7 @@ import { TestBed } from '@angular/core/testing'; -import { AlarmFrequencyChartComponent } from './alarm-frequency-chart.component'; +import { AlarmFrequencyChartComponent } from 'src/app/features/analytics/components/alarm-frequency-chart/alarm-frequency-chart.component'; import { BaseChartDirective, provideCharts, withDefaultRegisterables } from 'ng2-charts'; -import { runSharedChartTests } from '../shared/chart-tests.helper'; +import { runSharedChartTests } from 'src/app/features/analytics/components/shared/chart-tests.helper'; describe('AlarmFrequencyChartComponent', () => { diff --git a/frontend/src/app/features/analytics/components/alarms-sent-resolved-chart/alarms-sent-resolved-chart.component.spec.ts b/frontend/test/unit/app/features/analytics/components/alarms-sent-resolved-chart/alarms-sent-resolved-chart.component.spec.ts similarity index 75% rename from frontend/src/app/features/analytics/components/alarms-sent-resolved-chart/alarms-sent-resolved-chart.component.spec.ts rename to frontend/test/unit/app/features/analytics/components/alarms-sent-resolved-chart/alarms-sent-resolved-chart.component.spec.ts index 6d3bcc72..38d23ed0 100644 --- a/frontend/src/app/features/analytics/components/alarms-sent-resolved-chart/alarms-sent-resolved-chart.component.spec.ts +++ b/frontend/test/unit/app/features/analytics/components/alarms-sent-resolved-chart/alarms-sent-resolved-chart.component.spec.ts @@ -1,7 +1,7 @@ import { TestBed } from '@angular/core/testing'; -import { AlarmsSentResolvedChartComponent } from './alarms-sent-resolved-chart.component'; +import { AlarmsSentResolvedChartComponent } from 'src/app/features/analytics/components/alarms-sent-resolved-chart/alarms-sent-resolved-chart.component'; import { BaseChartDirective, provideCharts, withDefaultRegisterables } from 'ng2-charts'; -import { runSharedChartTests } from '../shared/chart-tests.helper'; +import { runSharedChartTests } from 'src/app/features/analytics/components/shared/chart-tests.helper'; describe('AlarmsSentResolvedChartComponent', () => { diff --git a/frontend/src/app/features/analytics/components/energy-consumption-chart/energy-consumption-chart.component.spec.ts b/frontend/test/unit/app/features/analytics/components/energy-consumption-chart/energy-consumption-chart.component.spec.ts similarity index 75% rename from frontend/src/app/features/analytics/components/energy-consumption-chart/energy-consumption-chart.component.spec.ts rename to frontend/test/unit/app/features/analytics/components/energy-consumption-chart/energy-consumption-chart.component.spec.ts index 7a0d3182..1ab7f55c 100644 --- a/frontend/src/app/features/analytics/components/energy-consumption-chart/energy-consumption-chart.component.spec.ts +++ b/frontend/test/unit/app/features/analytics/components/energy-consumption-chart/energy-consumption-chart.component.spec.ts @@ -1,7 +1,7 @@ import { TestBed } from '@angular/core/testing'; -import { EnergyConsumptionChartComponent } from './energy-consumption-chart.component'; +import { EnergyConsumptionChartComponent } from 'src/app/features/analytics/components/energy-consumption-chart/energy-consumption-chart.component'; import { BaseChartDirective, provideCharts, withDefaultRegisterables } from 'ng2-charts'; -import { runSharedChartTests } from '../shared/chart-tests.helper'; +import { runSharedChartTests } from 'src/app/features/analytics/components/shared/chart-tests.helper'; describe('EnergyConsumptionChartComponent', () => { diff --git a/frontend/src/app/features/analytics/components/fall-frequency-chart/fall-frequency-chart.component.spec.ts b/frontend/test/unit/app/features/analytics/components/fall-frequency-chart/fall-frequency-chart.component.spec.ts similarity index 76% rename from frontend/src/app/features/analytics/components/fall-frequency-chart/fall-frequency-chart.component.spec.ts rename to frontend/test/unit/app/features/analytics/components/fall-frequency-chart/fall-frequency-chart.component.spec.ts index 47ff7f4b..67062a1c 100644 --- a/frontend/src/app/features/analytics/components/fall-frequency-chart/fall-frequency-chart.component.spec.ts +++ b/frontend/test/unit/app/features/analytics/components/fall-frequency-chart/fall-frequency-chart.component.spec.ts @@ -1,7 +1,7 @@ import { TestBed } from '@angular/core/testing'; -import { FallFrequencyChartComponent } from './fall-frequency-chart.component'; +import { FallFrequencyChartComponent } from 'src/app/features/analytics/components/fall-frequency-chart/fall-frequency-chart.component'; import { BaseChartDirective, provideCharts, withDefaultRegisterables } from 'ng2-charts'; -import { runSharedChartTests } from '../shared/chart-tests.helper'; +import { runSharedChartTests } from 'src/app/features/analytics/components/shared/chart-tests.helper'; describe('FallFrequencyChartComponent', () => { diff --git a/frontend/src/app/features/analytics/components/plant-anomalies-chart/plant-anomalies-chart.component.spec.ts b/frontend/test/unit/app/features/analytics/components/plant-anomalies-chart/plant-anomalies-chart.component.spec.ts similarity index 75% rename from frontend/src/app/features/analytics/components/plant-anomalies-chart/plant-anomalies-chart.component.spec.ts rename to frontend/test/unit/app/features/analytics/components/plant-anomalies-chart/plant-anomalies-chart.component.spec.ts index e3c14911..bcad30fa 100644 --- a/frontend/src/app/features/analytics/components/plant-anomalies-chart/plant-anomalies-chart.component.spec.ts +++ b/frontend/test/unit/app/features/analytics/components/plant-anomalies-chart/plant-anomalies-chart.component.spec.ts @@ -1,7 +1,7 @@ import { TestBed } from '@angular/core/testing'; -import { PlantAnomaliesChartComponent } from './plant-anomalies-chart.component'; +import { PlantAnomaliesChartComponent } from 'src/app/features/analytics/components/plant-anomalies-chart/plant-anomalies-chart.component'; import { BaseChartDirective, provideCharts, withDefaultRegisterables } from 'ng2-charts'; -import { runSharedChartTests } from '../shared/chart-tests.helper'; +import { runSharedChartTests } from 'src/app/features/analytics/components/shared/chart-tests.helper'; describe('PlantAnomaliesChartComponent', () => { diff --git a/frontend/src/app/features/analytics/components/presence-detection-chart/presence-detection-chart.component.spec.ts b/frontend/test/unit/app/features/analytics/components/presence-detection-chart/presence-detection-chart.component.spec.ts similarity index 75% rename from frontend/src/app/features/analytics/components/presence-detection-chart/presence-detection-chart.component.spec.ts rename to frontend/test/unit/app/features/analytics/components/presence-detection-chart/presence-detection-chart.component.spec.ts index 01a5f880..6dc3e509 100644 --- a/frontend/src/app/features/analytics/components/presence-detection-chart/presence-detection-chart.component.spec.ts +++ b/frontend/test/unit/app/features/analytics/components/presence-detection-chart/presence-detection-chart.component.spec.ts @@ -1,7 +1,7 @@ import { TestBed } from '@angular/core/testing'; -import { PresenceDetectionChartComponent } from './presence-detection-chart.component'; +import { PresenceDetectionChartComponent } from 'src/app/features/analytics/components/presence-detection-chart/presence-detection-chart.component'; import { BaseChartDirective, provideCharts, withDefaultRegisterables } from 'ng2-charts'; -import { runSharedChartTests } from '../shared/chart-tests.helper'; +import { runSharedChartTests } from 'src/app/features/analytics/components/shared/chart-tests.helper'; describe('PresenceDetectionChartComponent', () => { diff --git a/frontend/src/app/features/analytics/components/prolonged-presence-chart/prolonged-presence-chart.component.spec.ts b/frontend/test/unit/app/features/analytics/components/prolonged-presence-chart/prolonged-presence-chart.component.spec.ts similarity index 75% rename from frontend/src/app/features/analytics/components/prolonged-presence-chart/prolonged-presence-chart.component.spec.ts rename to frontend/test/unit/app/features/analytics/components/prolonged-presence-chart/prolonged-presence-chart.component.spec.ts index ee97ac7a..d5f26cc3 100644 --- a/frontend/src/app/features/analytics/components/prolonged-presence-chart/prolonged-presence-chart.component.spec.ts +++ b/frontend/test/unit/app/features/analytics/components/prolonged-presence-chart/prolonged-presence-chart.component.spec.ts @@ -1,7 +1,7 @@ import { TestBed } from '@angular/core/testing'; -import { ProlongedPresenceChartComponent } from './prolonged-presence-chart.component'; +import { ProlongedPresenceChartComponent } from 'src/app/features/analytics/components/prolonged-presence-chart/prolonged-presence-chart.component'; import { BaseChartDirective, provideCharts, withDefaultRegisterables } from 'ng2-charts'; -import { runSharedChartTests } from '../shared/chart-tests.helper'; +import { runSharedChartTests } from 'src/app/features/analytics/components/shared/chart-tests.helper'; describe('ProlongedPresenceChartComponent', () => { diff --git a/frontend/src/app/features/analytics/components/temperature-variations-chart/temperature-variations-chart.component.spec.ts b/frontend/test/unit/app/features/analytics/components/temperature-variations-chart/temperature-variations-chart.component.spec.ts similarity index 75% rename from frontend/src/app/features/analytics/components/temperature-variations-chart/temperature-variations-chart.component.spec.ts rename to frontend/test/unit/app/features/analytics/components/temperature-variations-chart/temperature-variations-chart.component.spec.ts index 3755a143..b2e58045 100644 --- a/frontend/src/app/features/analytics/components/temperature-variations-chart/temperature-variations-chart.component.spec.ts +++ b/frontend/test/unit/app/features/analytics/components/temperature-variations-chart/temperature-variations-chart.component.spec.ts @@ -1,7 +1,7 @@ import { TestBed } from '@angular/core/testing'; -import { TemperatureVariationsChartComponent } from './temperature-variations-chart.component'; +import { TemperatureVariationsChartComponent } from 'src/app/features/analytics/components/temperature-variations-chart/temperature-variations-chart.component'; import { BaseChartDirective, provideCharts, withDefaultRegisterables } from 'ng2-charts'; -import { runSharedChartTests } from '../shared/chart-tests.helper'; +import { runSharedChartTests } from 'src/app/features/analytics/components/shared/chart-tests.helper'; describe('TemperatureVariationsChartComponent', () => { diff --git a/frontend/src/app/features/analytics/services/analytics-api.service.spec.ts b/frontend/test/unit/app/features/analytics/services/analytics-api.service.spec.ts similarity index 94% rename from frontend/src/app/features/analytics/services/analytics-api.service.spec.ts rename to frontend/test/unit/app/features/analytics/services/analytics-api.service.spec.ts index 593d830e..be887511 100644 --- a/frontend/src/app/features/analytics/services/analytics-api.service.spec.ts +++ b/frontend/test/unit/app/features/analytics/services/analytics-api.service.spec.ts @@ -1,8 +1,8 @@ import { TestBed } from '@angular/core/testing'; import { provideHttpClient } from '@angular/common/http'; import { provideHttpClientTesting, HttpTestingController } from '@angular/common/http/testing'; -import { AnalyticsApiService } from './analytics-api.service'; -import { API_BASE_URL } from '../../../core/tokens/api-base-url.token'; +import { AnalyticsApiService } from 'src/app/features/analytics/services/analytics-api.service'; +import { API_BASE_URL } from 'src/app/core/tokens/api-base-url.token'; import { describe, it, expect, beforeEach, afterEach } from 'vitest'; describe('AnalyticsApiService', () => { diff --git a/frontend/src/app/features/apartment-monitor/components/apartment-monitor/apartment-monitor.component.spec.ts b/frontend/test/unit/app/features/apartment-monitor/components/apartment-monitor/apartment-monitor.component.spec.ts similarity index 80% rename from frontend/src/app/features/apartment-monitor/components/apartment-monitor/apartment-monitor.component.spec.ts rename to frontend/test/unit/app/features/apartment-monitor/components/apartment-monitor/apartment-monitor.component.spec.ts index eaf86a4f..2ea84ef1 100644 --- a/frontend/src/app/features/apartment-monitor/components/apartment-monitor/apartment-monitor.component.spec.ts +++ b/frontend/test/unit/app/features/apartment-monitor/components/apartment-monitor/apartment-monitor.component.spec.ts @@ -2,13 +2,13 @@ import { Component, input } from '@angular/core'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { BehaviorSubject, of } from 'rxjs'; import { beforeEach, describe, expect, it, vi } from 'vitest'; -import { AlarmStateService } from '../../../../core/alarm/services/alarm-state.service'; -import { ALARM_LIFECYCLE_UPDATED_EVENT } from '../../../../core/alarm/models/realtime-alarm-event.model'; -import type { Apartment } from '../../models/apartment.model'; -import { ApartmentApiService } from '../../services/apartment-api.service'; -import { ApartmentMonitorComponent } from './apartment-monitor.component'; -import { AlarmMapComponent } from '../alarm-map/alarm-map.component'; -import { EndpointTableComponent } from '../../../device-interaction/components/endpoint-table/endpoint-table.component'; +import { AlarmStateService } from 'src/app/core/alarm/services/alarm-state.service'; +import { ALARM_LIFECYCLE_UPDATED_EVENT } from 'src/app/core/alarm/models/realtime-alarm-event.model'; +import type { Apartment } from 'src/app/features/apartment-monitor/models/apartment.model'; +import { ApartmentApiService } from 'src/app/features/apartment-monitor/services/apartment-api.service'; +import { ApartmentMonitorComponent } from 'src/app/features/apartment-monitor/components/apartment-monitor/apartment-monitor.component'; +import { AlarmMapComponent } from 'src/app/features/apartment-monitor/components/alarm-map/alarm-map.component'; +import { EndpointTableComponent } from 'src/app/features/device-interaction/components/endpoint-table/endpoint-table.component'; @Component({ selector: 'app-alarm-map', diff --git a/frontend/src/app/features/apartment-monitor/components/room-list/room-list.component.spec.ts b/frontend/test/unit/app/features/apartment-monitor/components/room-list/room-list.component.spec.ts similarity index 88% rename from frontend/src/app/features/apartment-monitor/components/room-list/room-list.component.spec.ts rename to frontend/test/unit/app/features/apartment-monitor/components/room-list/room-list.component.spec.ts index 3616ba7b..35e3d656 100644 --- a/frontend/src/app/features/apartment-monitor/components/room-list/room-list.component.spec.ts +++ b/frontend/test/unit/app/features/apartment-monitor/components/room-list/room-list.component.spec.ts @@ -1,6 +1,6 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; import { describe, expect, it, vi, beforeEach } from 'vitest'; -import { RoomListComponent } from './room-list.component'; +import { RoomListComponent } from 'src/app/features/apartment-monitor/components/room-list/room-list.component'; describe('RoomListComponent', () => { let fixture: ComponentFixture; diff --git a/frontend/test/unit/app/features/apartment-monitor/services/apartment-api.service.spec.ts b/frontend/test/unit/app/features/apartment-monitor/services/apartment-api.service.spec.ts new file mode 100644 index 00000000..1b499283 --- /dev/null +++ b/frontend/test/unit/app/features/apartment-monitor/services/apartment-api.service.spec.ts @@ -0,0 +1,64 @@ +import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing'; +import { TestBed } from '@angular/core/testing'; +import { firstValueFrom, of } from 'rxjs'; +import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'; +import { InternalAuthService } from 'src/app/core/services/internal-auth.service'; +import { WardRealtimeCacheService } from 'src/app/core/alarm/services/ward-realtime-cache.service'; +import { API_BASE_URL } from 'src/app/core/tokens/api-base-url.token'; +import { ApartmentApiService } from 'src/app/features/apartment-monitor/services/apartment-api.service'; + +describe('ApartmentApiService', () => { + let service: ApartmentApiService; + let httpMock: HttpTestingController; + + const internalAuthStub = { + getCurrentUser$: vi.fn(() => of(null)), + }; + + const wardRealtimeCacheStub = { + mergeWardIds: vi.fn(), + }; + + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [HttpClientTestingModule], + providers: [ + ApartmentApiService, + { provide: API_BASE_URL, useValue: 'http://localhost:3000' }, + { provide: InternalAuthService, useValue: internalAuthStub }, + { provide: WardRealtimeCacheService, useValue: wardRealtimeCacheStub }, + ], + }); + + service = TestBed.inject(ApartmentApiService); + httpMock = TestBed.inject(HttpTestingController); + }); + + afterEach(() => { + httpMock.verify(); + }); + + it('RF83-OBL abilita un appartamento nel Sistema', async () => { + const enablePromise = firstValueFrom(service.enableApartment('apt-101')); + + const request = httpMock.expectOne('http://localhost:3000/apartments/apt-101/enable'); + expect(request.request.method).toBe('PATCH'); + expect(request.request.body).toEqual({}); + + request.flush(null, { status: 200, statusText: 'OK' }); + + await enablePromise; + }); + + it('RF84-OBL disabilita un appartamento nel Sistema', async () => { + const disablePromise = firstValueFrom(service.disableApartment('apt-101')); + + const request = httpMock.expectOne('http://localhost:3000/apartments/apt-101/disable'); + expect(request.request.method).toBe('PATCH'); + expect(request.request.body).toEqual({}); + + request.flush(null, { status: 200, statusText: 'OK' }); + + await disablePromise; + }); +}); diff --git a/frontend/src/app/features/dashboard/components/alarms-widget/alarms-widget.component.spec.ts b/frontend/test/unit/app/features/dashboard/components/alarms-widget/alarms-widget.component.spec.ts similarity index 86% rename from frontend/src/app/features/dashboard/components/alarms-widget/alarms-widget.component.spec.ts rename to frontend/test/unit/app/features/dashboard/components/alarms-widget/alarms-widget.component.spec.ts index 7e9306c5..ae528b2d 100644 --- a/frontend/src/app/features/dashboard/components/alarms-widget/alarms-widget.component.spec.ts +++ b/frontend/test/unit/app/features/dashboard/components/alarms-widget/alarms-widget.component.spec.ts @@ -1,8 +1,8 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; -import { AlarmWidgetComponent } from './alarms-widget.component'; -import { AlarmManagementService } from '../../../alarm-management/services/alarm-management.service'; -import { AlarmManagementTablePresenterService } from '../../../alarm-management/services/alarm-management-table-presenter.service'; -import { AlarmManagementRefreshService } from '../../../../core/alarm/services/alarm-management-refresh.service'; +import { AlarmWidgetComponent } from 'src/app/features/dashboard/components/alarms-widget/alarms-widget.component'; +import { AlarmManagementService } from 'src/app/features/alarm-management/services/alarm-management.service'; +import { AlarmManagementTablePresenterService } from 'src/app/features/alarm-management/services/alarm-management-table-presenter.service'; +import { AlarmManagementRefreshService } from 'src/app/core/alarm/services/alarm-management-refresh.service'; import { Subject } from 'rxjs'; import { NO_ERRORS_SCHEMA, Pipe, PipeTransform } from '@angular/core'; import { describe, it, expect, beforeEach, vi } from 'vitest'; diff --git a/frontend/src/app/features/dashboard/components/analytics-widget/analytics-widget.component.spec.ts b/frontend/test/unit/app/features/dashboard/components/analytics-widget/analytics-widget.component.spec.ts similarity index 87% rename from frontend/src/app/features/dashboard/components/analytics-widget/analytics-widget.component.spec.ts rename to frontend/test/unit/app/features/dashboard/components/analytics-widget/analytics-widget.component.spec.ts index 24dcfae8..c762d178 100644 --- a/frontend/src/app/features/dashboard/components/analytics-widget/analytics-widget.component.spec.ts +++ b/frontend/test/unit/app/features/dashboard/components/analytics-widget/analytics-widget.component.spec.ts @@ -1,10 +1,10 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; -import { AnalyticsWidgetComponent } from './analytics-widget.component'; -import { AnalyticsApiService } from '../../../analytics/services/analytics-api.service'; +import { AnalyticsWidgetComponent } from 'src/app/features/dashboard/components/analytics-widget/analytics-widget.component'; +import { AnalyticsApiService } from 'src/app/features/analytics/services/analytics-api.service'; import { of } from 'rxjs'; import { describe, it, expect, beforeEach, vi } from 'vitest'; -import { AnalyticsDto } from '../../../analytics/models/analytics.model'; -import { Apartment } from '../../../apartment-monitor/models/apartment.model'; +import { AnalyticsDto } from 'src/app/features/analytics/models/analytics.model'; +import { Apartment } from 'src/app/features/apartment-monitor/models/apartment.model'; describe('AnalyticsComponent', () => { let component: AnalyticsWidgetComponent; diff --git a/frontend/src/app/features/dashboard/components/dashboard-page/dashboard-page.component.spec.ts b/frontend/test/unit/app/features/dashboard/components/dashboard-page/dashboard-page.component.spec.ts similarity index 84% rename from frontend/src/app/features/dashboard/components/dashboard-page/dashboard-page.component.spec.ts rename to frontend/test/unit/app/features/dashboard/components/dashboard-page/dashboard-page.component.spec.ts index a78aa938..32c119fd 100644 --- a/frontend/src/app/features/dashboard/components/dashboard-page/dashboard-page.component.spec.ts +++ b/frontend/test/unit/app/features/dashboard/components/dashboard-page/dashboard-page.component.spec.ts @@ -2,9 +2,9 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; import { Component } from '@angular/core'; import { By } from '@angular/platform-browser'; import { describe, it, expect, beforeEach } from 'vitest'; -import { DashboardComponent } from './dashboard-page.component'; -import { AnalyticsWidgetComponent } from '../analytics-widget/analytics-widget.component'; -import { AlarmWidgetComponent } from '../alarms-widget/alarms-widget.component'; +import { DashboardComponent } from 'src/app/features/dashboard/components/dashboard-page/dashboard-page.component'; +import { AnalyticsWidgetComponent } from 'src/app/features/dashboard/components/analytics-widget/analytics-widget.component'; +import { AlarmWidgetComponent } from 'src/app/features/dashboard/components/alarms-widget/alarms-widget.component'; // 1. Creiamo dei "Fake Components" molto semplici con lo stesso selettore // Questo serve a non caricare la logica (e i servizi) dei componenti reali diff --git a/frontend/src/app/features/dashboard/components/plant-overview/plant-overview.component.spec.ts b/frontend/test/unit/app/features/dashboard/components/plant-overview/plant-overview.component.spec.ts similarity index 93% rename from frontend/src/app/features/dashboard/components/plant-overview/plant-overview.component.spec.ts rename to frontend/test/unit/app/features/dashboard/components/plant-overview/plant-overview.component.spec.ts index bb24a768..613ed53e 100644 --- a/frontend/src/app/features/dashboard/components/plant-overview/plant-overview.component.spec.ts +++ b/frontend/test/unit/app/features/dashboard/components/plant-overview/plant-overview.component.spec.ts @@ -1,5 +1,5 @@ import { TestBed, ComponentFixture } from '@angular/core/testing'; -import { PlantOverviewComponent } from './plant-overview.component'; +import { PlantOverviewComponent } from 'src/app/features/dashboard/components/plant-overview/plant-overview.component'; import { describe, it, expect, beforeEach } from 'vitest'; describe('PlantOverviewComponent', () => { diff --git a/frontend/src/app/features/device-interaction/components/action-cards.quick.spec.ts b/frontend/test/unit/app/features/device-interaction/components/action-cards.quick.spec.ts similarity index 71% rename from frontend/src/app/features/device-interaction/components/action-cards.quick.spec.ts rename to frontend/test/unit/app/features/device-interaction/components/action-cards.quick.spec.ts index 35ac41ff..6c2de3f3 100644 --- a/frontend/src/app/features/device-interaction/components/action-cards.quick.spec.ts +++ b/frontend/test/unit/app/features/device-interaction/components/action-cards.quick.spec.ts @@ -1,15 +1,15 @@ import { Type } from '@angular/core'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { describe, expect, it, vi } from 'vitest'; -import { DeviceType } from '../models/device-type.enum'; -import type { Device } from '../../apartment-monitor/models/device.model'; -import { AlarmButtonCardComponent } from './alarm-button-card/alarm-button-card.component'; -import { BlindCardComponent } from './blind-card/blind-card.component'; -import { EntranceDoorCardComponent } from './entrance-door-card/entrance-door-card.component'; -import { FallSensorCardComponent } from './fall-sensor-card/fall-sensor-card.component'; -import { LightCardComponent } from './light-card/light-card.component'; -import { PresenceSensorCardComponent } from './presence-sensor-card/presence-sensor-card.component'; -import { ThermostatCardComponent } from './thermostat-card/thermostat-card.component'; +import { DeviceType } from 'src/app/features/device-interaction/models/device-type.enum'; +import type { Device } from 'src/app/features/apartment-monitor/models/device.model'; +import { AlarmButtonCardComponent } from 'src/app/features/device-interaction/components/alarm-button-card/alarm-button-card.component'; +import { BlindCardComponent } from 'src/app/features/device-interaction/components/blind-card/blind-card.component'; +import { EntranceDoorCardComponent } from 'src/app/features/device-interaction/components/entrance-door-card/entrance-door-card.component'; +import { FallSensorCardComponent } from 'src/app/features/device-interaction/components/fall-sensor-card/fall-sensor-card.component'; +import { LightCardComponent } from 'src/app/features/device-interaction/components/light-card/light-card.component'; +import { PresenceSensorCardComponent } from 'src/app/features/device-interaction/components/presence-sensor-card/presence-sensor-card.component'; +import { ThermostatCardComponent } from 'src/app/features/device-interaction/components/thermostat-card/thermostat-card.component'; type ActionCardComponentType = Type< | AlarmButtonCardComponent diff --git a/frontend/src/app/features/device-interaction/components/device-card/device-card.component.spec.ts b/frontend/test/unit/app/features/device-interaction/components/device-card/device-card.component.spec.ts similarity index 89% rename from frontend/src/app/features/device-interaction/components/device-card/device-card.component.spec.ts rename to frontend/test/unit/app/features/device-interaction/components/device-card/device-card.component.spec.ts index 538b7500..9a9af3d7 100644 --- a/frontend/src/app/features/device-interaction/components/device-card/device-card.component.spec.ts +++ b/frontend/test/unit/app/features/device-interaction/components/device-card/device-card.component.spec.ts @@ -1,9 +1,9 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; import { describe, expect, it, vi, beforeEach } from 'vitest'; -import { DeviceCardComponent } from './device-card.component'; -import { DeviceType } from '../../models/device-type.enum'; -import type { Device } from '../../../apartment-monitor/models/device.model'; -import type { Datapoint } from '../../../apartment-monitor/models/datapoint.model'; +import { DeviceCardComponent } from 'src/app/features/device-interaction/components/device-card/device-card.component'; +import { DeviceType } from 'src/app/features/device-interaction/models/device-type.enum'; +import type { Device } from 'src/app/features/apartment-monitor/models/device.model'; +import type { Datapoint } from 'src/app/features/apartment-monitor/models/datapoint.model'; describe('DeviceCardComponent', () => { let fixture: ComponentFixture; diff --git a/frontend/src/app/features/device-interaction/components/endpoint-table/endpoint-table.component.spec.ts b/frontend/test/unit/app/features/device-interaction/components/endpoint-table/endpoint-table.component.spec.ts similarity index 83% rename from frontend/src/app/features/device-interaction/components/endpoint-table/endpoint-table.component.spec.ts rename to frontend/test/unit/app/features/device-interaction/components/endpoint-table/endpoint-table.component.spec.ts index 0c5fab4d..641d7b5c 100644 --- a/frontend/src/app/features/device-interaction/components/endpoint-table/endpoint-table.component.spec.ts +++ b/frontend/test/unit/app/features/device-interaction/components/endpoint-table/endpoint-table.component.spec.ts @@ -1,11 +1,11 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; import { of } from 'rxjs'; import { beforeEach, describe, expect, it, vi } from 'vitest'; -import { DeviceType } from '../../models/device-type.enum'; -import { WritableEndpointRow } from '../../models/writable-endpoint-row.model'; -import { DeviceApiService } from '../../services/device-api.service'; -import { DeviceValuePointDto } from '../../models/write-datapoint-request.model'; -import { EndpointTableComponent } from './endpoint-table.component'; +import { DeviceType } from 'src/app/features/device-interaction/models/device-type.enum'; +import { WritableEndpointRow } from 'src/app/features/device-interaction/models/writable-endpoint-row.model'; +import { DeviceApiService } from 'src/app/features/device-interaction/services/device-api.service'; +import { DeviceValuePointDto } from 'src/app/features/device-interaction/models/write-datapoint-request.model'; +import { EndpointTableComponent } from 'src/app/features/device-interaction/components/endpoint-table/endpoint-table.component'; describe('EndpointTableComponent', () => { let component: EndpointTableComponent; diff --git a/frontend/src/app/features/device-interaction/components/room-detail/room-detail.component.spec.ts b/frontend/test/unit/app/features/device-interaction/components/room-detail/room-detail.component.spec.ts similarity index 79% rename from frontend/src/app/features/device-interaction/components/room-detail/room-detail.component.spec.ts rename to frontend/test/unit/app/features/device-interaction/components/room-detail/room-detail.component.spec.ts index 039b7835..1376180c 100644 --- a/frontend/src/app/features/device-interaction/components/room-detail/room-detail.component.spec.ts +++ b/frontend/test/unit/app/features/device-interaction/components/room-detail/room-detail.component.spec.ts @@ -3,11 +3,11 @@ import { Component } from '@angular/core'; import { provideRouter } from '@angular/router'; import { beforeEach, describe, expect, it, vi } from 'vitest'; import { of } from 'rxjs'; -import { DeviceType } from '../../models/device-type.enum'; -import { WritableEndpointRow } from '../../models/writable-endpoint-row.model'; -import { DeviceApiService } from '../../services/device-api.service'; -import { RoomDetailComponent } from './room-detail.component'; -import { EndpointTableComponent } from '../endpoint-table/endpoint-table.component'; +import { DeviceType } from 'src/app/features/device-interaction/models/device-type.enum'; +import { WritableEndpointRow } from 'src/app/features/device-interaction/models/writable-endpoint-row.model'; +import { DeviceApiService } from 'src/app/features/device-interaction/services/device-api.service'; +import { RoomDetailComponent } from 'src/app/features/device-interaction/components/room-detail/room-detail.component'; +import { EndpointTableComponent } from 'src/app/features/device-interaction/components/endpoint-table/endpoint-table.component'; @Component({ diff --git a/frontend/src/app/features/device-interaction/services/device-api.service.spec.ts b/frontend/test/unit/app/features/device-interaction/services/device-api.service.spec.ts similarity index 98% rename from frontend/src/app/features/device-interaction/services/device-api.service.spec.ts rename to frontend/test/unit/app/features/device-interaction/services/device-api.service.spec.ts index a22abfe6..adc422f7 100644 --- a/frontend/src/app/features/device-interaction/services/device-api.service.spec.ts +++ b/frontend/test/unit/app/features/device-interaction/services/device-api.service.spec.ts @@ -3,8 +3,8 @@ import { HttpTestingController, provideHttpClientTesting } from '@angular/common import { provideHttpClient } from '@angular/common/http'; import { afterEach, beforeEach, describe, expect, it } from 'vitest'; import { firstValueFrom } from 'rxjs'; -import { API_BASE_URL } from '../../../core/tokens/api-base-url.token'; -import { DeviceApiService } from './device-api.service'; +import { API_BASE_URL } from 'src/app/core/tokens/api-base-url.token'; +import { DeviceApiService } from 'src/app/features/device-interaction/services/device-api.service'; describe('DeviceApiService', () => { let service: DeviceApiService; @@ -416,4 +416,5 @@ describe('DeviceApiService', () => { const values = await valuesPromise; expect(values.get('dp-ok')).toBe('Off'); }); + }); diff --git a/frontend/src/app/features/features-routes.spec.ts b/frontend/test/unit/app/features/features-routes.spec.ts similarity index 70% rename from frontend/src/app/features/features-routes.spec.ts rename to frontend/test/unit/app/features/features-routes.spec.ts index 10f8e22c..68fc77e8 100644 --- a/frontend/src/app/features/features-routes.spec.ts +++ b/frontend/test/unit/app/features/features-routes.spec.ts @@ -1,24 +1,24 @@ import { describe, expect, it } from 'vitest'; -import { authGuard } from '../core/guards/auth.guard'; -import { adminGuard } from '../core/guards/admin.guard'; -import { AlarmConfigStateService } from './alarm-configuration/services/alarm-config-state.service'; -import { AssignmentOperationsService } from './ward-management/services/assignment-operations.service'; -import { WardManagementStore } from './ward-management/services/ward-management.store'; -import { WardOperationsService } from './ward-management/services/ward-operations.service'; -import { WardStore } from './ward-management/services/ward.store'; -import { MyVimarCloudApiFeatureService } from './my-vimar-integration/services/my-vimar-cloud-api-feature.service'; -import { VIMAR_CLOUD_API_SERVICE } from '../core/services/vimar-cloud-api.service.interface'; -import { ALARM_CONFIGURATION_ROUTES } from './alarm-configuration/alarm-configuration.routes'; -import { ALARM_HISTORY_ROUTES } from './alarm-history/alarm-history.routes'; -import { ALARM_MANAGEMENT_ROUTES } from './alarm-management/alarm-management.routes'; -import { ANALYTICS_ROUTES } from './analytics/analytics.routes'; -import { APARTMENT_MONITOR_ROUTES } from './apartment-monitor/apartment-monitor.routes'; -import { DASHBOARD_ROUTES } from './dashboard/dashboard-page.routes'; -import { DEVICE_INTERACTION_ROUTES } from './device-interaction/device-interaction.routes'; -import { MY_VIMAR_INTEGRATION_ROUTES } from './my-vimar-integration/my-vimar-integration.routes'; -import { NOTIFICATION_ROUTES } from './notification/notification.routes'; -import { USER_MANAGEMENT_ROUTES } from './user-management/user-management.routes'; -import { WARD_MANAGEMENT_ROUTES } from './ward-management/ward-management.routes'; +import { authGuard } from 'src/app/core/guards/auth.guard'; +import { adminGuard } from 'src/app/core/guards/admin.guard'; +import { AlarmConfigStateService } from 'src/app/features/alarm-configuration/services/alarm-config-state.service'; +import { AssignmentOperationsService } from 'src/app/features/ward-management/services/assignment-operations.service'; +import { WardManagementStore } from 'src/app/features/ward-management/services/ward-management.store'; +import { WardOperationsService } from 'src/app/features/ward-management/services/ward-operations.service'; +import { WardStore } from 'src/app/features/ward-management/services/ward.store'; +import { MyVimarCloudApiFeatureService } from 'src/app/features/my-vimar-integration/services/my-vimar-cloud-api-feature.service'; +import { VIMAR_CLOUD_API_SERVICE } from 'src/app/core/services/vimar-cloud-api.service.interface'; +import { ALARM_CONFIGURATION_ROUTES } from 'src/app/features/alarm-configuration/alarm-configuration.routes'; +import { ALARM_HISTORY_ROUTES } from 'src/app/features/alarm-history/alarm-history.routes'; +import { ALARM_MANAGEMENT_ROUTES } from 'src/app/features/alarm-management/alarm-management.routes'; +import { ANALYTICS_ROUTES } from 'src/app/features/analytics/analytics.routes'; +import { APARTMENT_MONITOR_ROUTES } from 'src/app/features/apartment-monitor/apartment-monitor.routes'; +import { DASHBOARD_ROUTES } from 'src/app/features/dashboard/dashboard-page.routes'; +import { DEVICE_INTERACTION_ROUTES } from 'src/app/features/device-interaction/device-interaction.routes'; +import { MY_VIMAR_INTEGRATION_ROUTES } from 'src/app/features/my-vimar-integration/my-vimar-integration.routes'; +import { NOTIFICATION_ROUTES } from 'src/app/features/notification/notification.routes'; +import { USER_MANAGEMENT_ROUTES } from 'src/app/features/user-management/user-management.routes'; +import { WARD_MANAGEMENT_ROUTES } from 'src/app/features/ward-management/ward-management.routes'; describe('Feature Routes Quick Coverage', () => { it('copre alarm-configuration route e lazy component', async () => { diff --git a/frontend/src/app/features/main-layout/components/sidebar/sidebar.component.spec.ts b/frontend/test/unit/app/features/main-layout/components/sidebar/sidebar.component.spec.ts similarity index 95% rename from frontend/src/app/features/main-layout/components/sidebar/sidebar.component.spec.ts rename to frontend/test/unit/app/features/main-layout/components/sidebar/sidebar.component.spec.ts index cb247b79..c86f12f1 100644 --- a/frontend/src/app/features/main-layout/components/sidebar/sidebar.component.spec.ts +++ b/frontend/test/unit/app/features/main-layout/components/sidebar/sidebar.component.spec.ts @@ -1,5 +1,5 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; -import { SidebarComponent } from './sidebar.component'; +import { SidebarComponent } from 'src/app/features/main-layout/components/sidebar/sidebar.component'; import { provideRouter } from '@angular/router'; import { describe, it, expect, beforeEach, vi } from 'vitest'; diff --git a/frontend/src/app/features/main-layout/components/topbar/topbar.component.spec.ts b/frontend/test/unit/app/features/main-layout/components/topbar/topbar.component.spec.ts similarity index 92% rename from frontend/src/app/features/main-layout/components/topbar/topbar.component.spec.ts rename to frontend/test/unit/app/features/main-layout/components/topbar/topbar.component.spec.ts index 28179e6b..5a04c4b5 100644 --- a/frontend/src/app/features/main-layout/components/topbar/topbar.component.spec.ts +++ b/frontend/test/unit/app/features/main-layout/components/topbar/topbar.component.spec.ts @@ -1,8 +1,8 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; -import { TopbarComponent } from './topbar.component'; +import { TopbarComponent } from 'src/app/features/main-layout/components/topbar/topbar.component'; import { describe, beforeEach, it, expect, vi } from 'vitest'; -import { UserRole } from '../../../../core/models/user-role.enum'; -import { BreadcrumbService } from '../../../../core/services/breadcrumb.service'; +import { UserRole } from 'src/app/core/models/user-role.enum'; +import { BreadcrumbService } from 'src/app/core/services/breadcrumb.service'; import { of } from 'rxjs'; describe('TopbarComponent', () => { diff --git a/frontend/src/app/features/main-layout/main-layout.component.spec.ts b/frontend/test/unit/app/features/main-layout/main-layout.component.spec.ts similarity index 92% rename from frontend/src/app/features/main-layout/main-layout.component.spec.ts rename to frontend/test/unit/app/features/main-layout/main-layout.component.spec.ts index 7633c8e4..549f0669 100644 --- a/frontend/src/app/features/main-layout/main-layout.component.spec.ts +++ b/frontend/test/unit/app/features/main-layout/main-layout.component.spec.ts @@ -1,16 +1,16 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; import { Component } from '@angular/core'; -import { MainLayoutComponent } from './main-layout.component'; -import { InternalAuthService } from '../../core/services/internal-auth.service'; -import { NavService } from './services/nav.service'; -import { AlarmStateService } from '../../core/alarm/services/alarm-state.service'; -import { UserRole } from '../../core/models/user-role.enum'; +import { MainLayoutComponent } from 'src/app/features/main-layout/main-layout.component'; +import { InternalAuthService } from 'src/app/core/services/internal-auth.service'; +import { NavService } from 'src/app/features/main-layout/services/nav.service'; +import { AlarmStateService } from 'src/app/core/alarm/services/alarm-state.service'; +import { UserRole } from 'src/app/core/models/user-role.enum'; import { BehaviorSubject, firstValueFrom, of } from 'rxjs'; import { vi, describe, it, expect, beforeEach, afterEach } from 'vitest'; import { provideRouter, Router } from '@angular/router'; -import { VIMAR_CLOUD_API_SERVICE } from '../../core/services/vimar-cloud-api.service.interface'; -import { AlarmManagementRefreshService } from '../../core/alarm/services/alarm-management-refresh.service'; -import { NotificationEvent } from '../notification/models/notification-event.model'; +import { VIMAR_CLOUD_API_SERVICE } from 'src/app/core/services/vimar-cloud-api.service.interface'; +import { AlarmManagementRefreshService } from 'src/app/core/alarm/services/alarm-management-refresh.service'; +import { NotificationEvent } from 'src/app/features/notification/models/notification-event.model'; @Component({ template: '', standalone: true }) class DummyRouteComponent {} diff --git a/frontend/src/app/features/main-layout/main-layout.routes.spec.ts b/frontend/test/unit/app/features/main-layout/main-layout.routes.spec.ts similarity index 89% rename from frontend/src/app/features/main-layout/main-layout.routes.spec.ts rename to frontend/test/unit/app/features/main-layout/main-layout.routes.spec.ts index ebf49ee4..6858b28b 100644 --- a/frontend/src/app/features/main-layout/main-layout.routes.spec.ts +++ b/frontend/test/unit/app/features/main-layout/main-layout.routes.spec.ts @@ -1,7 +1,7 @@ -import { MAIN_LAYOUT_ROUTES } from './main-layout.routes'; -import { authGuard } from '../../core/guards/auth.guard'; -import { roleGuard } from '../../core/guards/role.guard'; -import { UserRole } from '../../core/models/user-role.enum'; +import { MAIN_LAYOUT_ROUTES } from 'src/app/features/main-layout/main-layout.routes'; +import { authGuard } from 'src/app/core/guards/auth.guard'; +import { roleGuard } from 'src/app/core/guards/role.guard'; +import { UserRole } from 'src/app/core/models/user-role.enum'; import { describe, it, expect } from 'vitest'; describe('Main Layout Routes', () => { diff --git a/frontend/src/app/features/main-layout/services/nav.service.spec.ts b/frontend/test/unit/app/features/main-layout/services/nav.service.spec.ts similarity index 91% rename from frontend/src/app/features/main-layout/services/nav.service.spec.ts rename to frontend/test/unit/app/features/main-layout/services/nav.service.spec.ts index d437d6f3..a0825372 100644 --- a/frontend/src/app/features/main-layout/services/nav.service.spec.ts +++ b/frontend/test/unit/app/features/main-layout/services/nav.service.spec.ts @@ -1,7 +1,7 @@ import { describe, beforeEach, it, expect } from 'vitest'; import { TestBed } from '@angular/core/testing'; -import { UserRole } from '../../../core/models/user-role.enum'; -import { NavService } from './nav.service'; +import { UserRole } from 'src/app/core/models/user-role.enum'; +import { NavService } from 'src/app/features/main-layout/services/nav.service'; describe('NavService', () => { diff --git a/frontend/src/app/features/my-vimar-integration/components/my-vimar-account-status/my-vimar-account-status.component.spec.ts b/frontend/test/unit/app/features/my-vimar-integration/components/my-vimar-account-status/my-vimar-account-status.component.spec.ts similarity index 93% rename from frontend/src/app/features/my-vimar-integration/components/my-vimar-account-status/my-vimar-account-status.component.spec.ts rename to frontend/test/unit/app/features/my-vimar-integration/components/my-vimar-account-status/my-vimar-account-status.component.spec.ts index af9a2082..2c5fbb07 100644 --- a/frontend/src/app/features/my-vimar-integration/components/my-vimar-account-status/my-vimar-account-status.component.spec.ts +++ b/frontend/test/unit/app/features/my-vimar-integration/components/my-vimar-account-status/my-vimar-account-status.component.spec.ts @@ -1,6 +1,6 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; import { beforeEach, describe, expect, it, vi } from 'vitest'; -import { MyVimarAccountStatusComponent } from './my-vimar-account-status.component'; +import { MyVimarAccountStatusComponent } from 'src/app/features/my-vimar-integration/components/my-vimar-account-status/my-vimar-account-status.component'; describe('MyVimarAccountStatusComponent', () => { let component: MyVimarAccountStatusComponent; diff --git a/frontend/src/app/features/my-vimar-integration/pages/my-vimar/my-vimar-page.component.spec.ts b/frontend/test/unit/app/features/my-vimar-integration/pages/my-vimar/my-vimar-page.component.spec.ts similarity index 91% rename from frontend/src/app/features/my-vimar-integration/pages/my-vimar/my-vimar-page.component.spec.ts rename to frontend/test/unit/app/features/my-vimar-integration/pages/my-vimar/my-vimar-page.component.spec.ts index b18a34bb..300788d3 100644 --- a/frontend/src/app/features/my-vimar-integration/pages/my-vimar/my-vimar-page.component.spec.ts +++ b/frontend/test/unit/app/features/my-vimar-integration/pages/my-vimar/my-vimar-page.component.spec.ts @@ -1,8 +1,8 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; import { beforeEach, describe, expect, it, vi } from 'vitest'; import { of, throwError } from 'rxjs'; -import { IVimarCloudApiService, VIMAR_CLOUD_API_SERVICE } from '../../../../core/services/vimar-cloud-api.service.interface'; -import { MyVimarPageComponent } from './my-vimar-page.component'; +import { IVimarCloudApiService, VIMAR_CLOUD_API_SERVICE } from 'src/app/core/services/vimar-cloud-api.service.interface'; +import { MyVimarPageComponent } from 'src/app/features/my-vimar-integration/pages/my-vimar/my-vimar-page.component'; describe('MyVimarPageComponent', () => { let component: MyVimarPageComponent; diff --git a/frontend/src/app/features/my-vimar-integration/services/my-vimar-cloud-api-feature.service.spec.ts b/frontend/test/unit/app/features/my-vimar-integration/services/my-vimar-cloud-api-feature.service.spec.ts similarity index 95% rename from frontend/src/app/features/my-vimar-integration/services/my-vimar-cloud-api-feature.service.spec.ts rename to frontend/test/unit/app/features/my-vimar-integration/services/my-vimar-cloud-api-feature.service.spec.ts index c69cc402..82489213 100644 --- a/frontend/src/app/features/my-vimar-integration/services/my-vimar-cloud-api-feature.service.spec.ts +++ b/frontend/test/unit/app/features/my-vimar-integration/services/my-vimar-cloud-api-feature.service.spec.ts @@ -2,9 +2,9 @@ import { provideHttpClient } from '@angular/common/http'; import { HttpTestingController, provideHttpClientTesting } from '@angular/common/http/testing'; import { TestBed } from '@angular/core/testing'; import { describe, expect, it, beforeEach, afterEach, vi } from 'vitest'; -import { ApiErrorDisplayService } from '../../../core/services/api-error-display.service'; -import { API_BASE_URL } from '../../../core/tokens/api-base-url.token'; -import { MyVimarCloudApiFeatureService } from './my-vimar-cloud-api-feature.service'; +import { ApiErrorDisplayService } from 'src/app/core/services/api-error-display.service'; +import { API_BASE_URL } from 'src/app/core/tokens/api-base-url.token'; +import { MyVimarCloudApiFeatureService } from 'src/app/features/my-vimar-integration/services/my-vimar-cloud-api-feature.service'; import { DOCUMENT } from '@angular/common'; describe('MyVimarCloudApiFeatureService', () => { diff --git a/frontend/src/app/features/notification/components/notification-badge-component/notification-badge-component.spec.ts b/frontend/test/unit/app/features/notification/components/notification-badge-component/notification-badge-component.spec.ts similarity index 92% rename from frontend/src/app/features/notification/components/notification-badge-component/notification-badge-component.spec.ts rename to frontend/test/unit/app/features/notification/components/notification-badge-component/notification-badge-component.spec.ts index 037d41a9..3643b76c 100644 --- a/frontend/src/app/features/notification/components/notification-badge-component/notification-badge-component.spec.ts +++ b/frontend/test/unit/app/features/notification/components/notification-badge-component/notification-badge-component.spec.ts @@ -1,7 +1,7 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; import { beforeEach, describe, expect, it } from 'vitest'; -import { NotificationBadgeComponent } from './notification-badge-component'; +import { NotificationBadgeComponent } from 'src/app/features/notification/components/notification-badge-component/notification-badge-component'; describe('NotificationBadgeComponent', () => { let component: NotificationBadgeComponent; diff --git a/frontend/src/app/features/notification/components/notification-item-component/notification-item-component.spec.ts b/frontend/test/unit/app/features/notification/components/notification-item-component/notification-item-component.spec.ts similarity index 92% rename from frontend/src/app/features/notification/components/notification-item-component/notification-item-component.spec.ts rename to frontend/test/unit/app/features/notification/components/notification-item-component/notification-item-component.spec.ts index 11d23ec8..c679bbb9 100644 --- a/frontend/src/app/features/notification/components/notification-item-component/notification-item-component.spec.ts +++ b/frontend/test/unit/app/features/notification/components/notification-item-component/notification-item-component.spec.ts @@ -1,8 +1,8 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'; -import { NotificationEvent } from '../../models/notification-event.model'; +import { NotificationEvent } from 'src/app/features/notification/models/notification-event.model'; -import { NotificationItemComponent } from './notification-item-component'; +import { NotificationItemComponent } from 'src/app/features/notification/components/notification-item-component/notification-item-component'; describe('NotificationItemComponent', () => { let component: NotificationItemComponent; diff --git a/frontend/src/app/features/notification/components/notification-page-component/notification-page-component.spec.ts b/frontend/test/unit/app/features/notification/components/notification-page-component/notification-page-component.spec.ts similarity index 89% rename from frontend/src/app/features/notification/components/notification-page-component/notification-page-component.spec.ts rename to frontend/test/unit/app/features/notification/components/notification-page-component/notification-page-component.spec.ts index bcf04d82..3591a2a3 100644 --- a/frontend/src/app/features/notification/components/notification-page-component/notification-page-component.spec.ts +++ b/frontend/test/unit/app/features/notification/components/notification-page-component/notification-page-component.spec.ts @@ -3,12 +3,12 @@ import { By } from '@angular/platform-browser'; import { BehaviorSubject } from 'rxjs'; import { beforeEach, describe, expect, it } from 'vitest'; import { ActivatedRoute, convertToParamMap } from '@angular/router'; -import { NotificationEvent } from '../../models/notification-event.model'; -import { NotificationListVm } from '../../models/notification-list-vm.model'; -import { NotificationService } from '../../services/notification.service'; -import { NotificationItemComponent } from '../notification-item-component/notification-item-component'; +import { NotificationEvent } from 'src/app/features/notification/models/notification-event.model'; +import { NotificationListVm } from 'src/app/features/notification/models/notification-list-vm.model'; +import { NotificationService } from 'src/app/features/notification/services/notification.service'; +import { NotificationItemComponent } from 'src/app/features/notification/components/notification-item-component/notification-item-component'; -import { NotificationPageComponent } from './notification-page-component'; +import { NotificationPageComponent } from 'src/app/features/notification/components/notification-page-component/notification-page-component'; describe('NotificationPageComponent', () => { let component: NotificationPageComponent; diff --git a/frontend/src/app/features/notification/components/notification-topbar-panel-component/notification-topbar-panel-component.spec.ts b/frontend/test/unit/app/features/notification/components/notification-topbar-panel-component/notification-topbar-panel-component.spec.ts similarity index 94% rename from frontend/src/app/features/notification/components/notification-topbar-panel-component/notification-topbar-panel-component.spec.ts rename to frontend/test/unit/app/features/notification/components/notification-topbar-panel-component/notification-topbar-panel-component.spec.ts index b34ef270..8fe65944 100644 --- a/frontend/src/app/features/notification/components/notification-topbar-panel-component/notification-topbar-panel-component.spec.ts +++ b/frontend/test/unit/app/features/notification/components/notification-topbar-panel-component/notification-topbar-panel-component.spec.ts @@ -1,6 +1,6 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; import { describe, expect, it, vi, beforeEach } from 'vitest'; -import { NotificationTopbarPanelComponent } from './notification-topbar-panel-component'; +import { NotificationTopbarPanelComponent } from 'src/app/features/notification/components/notification-topbar-panel-component/notification-topbar-panel-component'; describe('NotificationTopbarPanelComponent', () => { let fixture: ComponentFixture; diff --git a/frontend/src/app/features/notification/services/notification.service.spec.ts b/frontend/test/unit/app/features/notification/services/notification.service.spec.ts similarity index 96% rename from frontend/src/app/features/notification/services/notification.service.spec.ts rename to frontend/test/unit/app/features/notification/services/notification.service.spec.ts index d97f5b4d..efe6079e 100644 --- a/frontend/src/app/features/notification/services/notification.service.spec.ts +++ b/frontend/test/unit/app/features/notification/services/notification.service.spec.ts @@ -1,10 +1,10 @@ import { TestBed } from '@angular/core/testing'; import { BehaviorSubject, Observable, Subscription, firstValueFrom, of, skip, throwError } from 'rxjs'; import { beforeEach, describe, expect, it, vi } from 'vitest'; -import { AlarmStateService } from '../../../core/alarm/services/alarm-state.service'; -import { NotificationApiService } from '../../../core/notification/services/notification-api.service'; -import type { NotificationEvent } from '../models/notification-event.model'; -import { NotificationService } from './notification.service'; +import { AlarmStateService } from 'src/app/core/alarm/services/alarm-state.service'; +import { NotificationApiService } from 'src/app/core/notification/services/notification-api.service'; +import type { NotificationEvent } from 'src/app/features/notification/models/notification-event.model'; +import { NotificationService } from 'src/app/features/notification/services/notification.service'; describe('NotificationService', () => { let service: NotificationService; diff --git a/frontend/src/app/features/user-auth/components/auth-base/auth-base.component.spec.ts b/frontend/test/unit/app/features/user-auth/components/auth-base/auth-base.component.spec.ts similarity index 90% rename from frontend/src/app/features/user-auth/components/auth-base/auth-base.component.spec.ts rename to frontend/test/unit/app/features/user-auth/components/auth-base/auth-base.component.spec.ts index 426c670f..aca899f1 100644 --- a/frontend/src/app/features/user-auth/components/auth-base/auth-base.component.spec.ts +++ b/frontend/test/unit/app/features/user-auth/components/auth-base/auth-base.component.spec.ts @@ -2,11 +2,11 @@ import { HttpErrorResponse } from '@angular/common/http'; import { TestBed } from '@angular/core/testing'; import { ActivatedRoute, Router } from '@angular/router'; import { beforeEach, describe, expect, it, vi } from 'vitest'; -import { InternalAuthService } from '../../../../core/services/internal-auth.service'; -import { UserRole } from '../../../../core/models/user-role.enum'; -import { AuthErrorType } from '../../models/auth-error-type.enum'; -import { UserSession } from '../../models/user-session.model'; -import { AuthBaseComponent } from './auth-base.component'; +import { InternalAuthService } from 'src/app/core/services/internal-auth.service'; +import { UserRole } from 'src/app/core/models/user-role.enum'; +import { AuthErrorType } from 'src/app/features/user-auth/models/auth-error-type.enum'; +import { UserSession } from 'src/app/features/user-auth/models/user-session.model'; +import { AuthBaseComponent } from 'src/app/features/user-auth/components/auth-base/auth-base.component'; class TestAuthBaseComponent extends AuthBaseComponent { public onUsernameChange(): void { } diff --git a/frontend/src/app/features/user-auth/components/first-access/first-access.component.spec.ts b/frontend/test/unit/app/features/user-auth/components/first-access/first-access.component.spec.ts similarity index 94% rename from frontend/src/app/features/user-auth/components/first-access/first-access.component.spec.ts rename to frontend/test/unit/app/features/user-auth/components/first-access/first-access.component.spec.ts index b35578b8..36e972ca 100644 --- a/frontend/src/app/features/user-auth/components/first-access/first-access.component.spec.ts +++ b/frontend/test/unit/app/features/user-auth/components/first-access/first-access.component.spec.ts @@ -2,9 +2,9 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; import { Router } from '@angular/router'; import { of, throwError } from 'rxjs'; import { beforeEach, describe, expect, it, vi } from 'vitest'; -import { InternalAuthService } from '../../../../core/services/internal-auth.service'; -import { AuthErrorType } from '../../models/auth-error-type.enum'; -import { FirstAccessComponent } from './first-access.component'; +import { InternalAuthService } from 'src/app/core/services/internal-auth.service'; +import { AuthErrorType } from 'src/app/features/user-auth/models/auth-error-type.enum'; +import { FirstAccessComponent } from 'src/app/features/user-auth/components/first-access/first-access.component'; describe('FirstAccessComponent', () => { let component: FirstAccessComponent; diff --git a/frontend/src/app/features/user-auth/components/login/login.component.spec.ts b/frontend/test/unit/app/features/user-auth/components/login/login.component.spec.ts similarity index 94% rename from frontend/src/app/features/user-auth/components/login/login.component.spec.ts rename to frontend/test/unit/app/features/user-auth/components/login/login.component.spec.ts index abe0816a..ba072f61 100644 --- a/frontend/src/app/features/user-auth/components/login/login.component.spec.ts +++ b/frontend/test/unit/app/features/user-auth/components/login/login.component.spec.ts @@ -3,10 +3,10 @@ import { ActivatedRoute, Router } from '@angular/router'; import { HttpErrorResponse } from '@angular/common/http'; import { of, throwError } from 'rxjs'; import { beforeEach, describe, expect, it, vi } from 'vitest'; -import { InternalAuthService } from '../../../../core/services/internal-auth.service'; -import { UserRole } from '../../../../core/models/user-role.enum'; -import { AuthErrorType } from '../../models/auth-error-type.enum'; -import { LoginComponent } from './login.component'; +import { InternalAuthService } from 'src/app/core/services/internal-auth.service'; +import { UserRole } from 'src/app/core/models/user-role.enum'; +import { AuthErrorType } from 'src/app/features/user-auth/models/auth-error-type.enum'; +import { LoginComponent } from 'src/app/features/user-auth/components/login/login.component'; describe('LoginComponent', () => { let component: LoginComponent; diff --git a/frontend/src/app/features/user-auth/user-auth.routes.spec.ts b/frontend/test/unit/app/features/user-auth/user-auth.routes.spec.ts similarity index 92% rename from frontend/src/app/features/user-auth/user-auth.routes.spec.ts rename to frontend/test/unit/app/features/user-auth/user-auth.routes.spec.ts index 04279d6a..983ad3b9 100644 --- a/frontend/src/app/features/user-auth/user-auth.routes.spec.ts +++ b/frontend/test/unit/app/features/user-auth/user-auth.routes.spec.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest'; -import { USER_AUTH_ROUTES } from './user-auth.routes'; +import { USER_AUTH_ROUTES } from 'src/app/features/user-auth/user-auth.routes'; describe('user-auth.routes', () => { it('espone i path login e first-access con lazy load dei componenti', async () => { diff --git a/frontend/src/app/features/user-management/components/create-user-form/create-user-form.spec.ts b/frontend/test/unit/app/features/user-management/components/create-user-form/create-user-form.spec.ts similarity index 95% rename from frontend/src/app/features/user-management/components/create-user-form/create-user-form.spec.ts rename to frontend/test/unit/app/features/user-management/components/create-user-form/create-user-form.spec.ts index ceea44c1..f314f8f0 100644 --- a/frontend/src/app/features/user-management/components/create-user-form/create-user-form.spec.ts +++ b/frontend/test/unit/app/features/user-management/components/create-user-form/create-user-form.spec.ts @@ -1,7 +1,7 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; import { beforeEach, describe, expect, it, vi } from 'vitest'; -import { CreateUserFormComponent } from './create-user-form.component'; +import { CreateUserFormComponent } from 'src/app/features/user-management/components/create-user-form/create-user-form.component'; describe('CreateUserForm', () => { let component: CreateUserFormComponent; diff --git a/frontend/src/app/features/user-management/components/user-created-dialog/user-created-dialog.spec.ts b/frontend/test/unit/app/features/user-management/components/user-created-dialog/user-created-dialog.spec.ts similarity index 92% rename from frontend/src/app/features/user-management/components/user-created-dialog/user-created-dialog.spec.ts rename to frontend/test/unit/app/features/user-management/components/user-created-dialog/user-created-dialog.spec.ts index 8e320a35..b830ce7f 100644 --- a/frontend/src/app/features/user-management/components/user-created-dialog/user-created-dialog.spec.ts +++ b/frontend/test/unit/app/features/user-management/components/user-created-dialog/user-created-dialog.spec.ts @@ -2,7 +2,7 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; import { By } from '@angular/platform-browser'; import { beforeEach, describe, expect, it, vi } from 'vitest'; -import { UserCreatedDialogComponent } from './user-created-dialog'; +import { UserCreatedDialogComponent } from 'src/app/features/user-management/components/user-created-dialog/user-created-dialog'; describe('UserCreatedDialogComponent', () => { let component: UserCreatedDialogComponent; diff --git a/frontend/src/app/features/user-management/components/user-list/user-list.spec.ts b/frontend/test/unit/app/features/user-management/components/user-list/user-list.spec.ts similarity index 92% rename from frontend/src/app/features/user-management/components/user-list/user-list.spec.ts rename to frontend/test/unit/app/features/user-management/components/user-list/user-list.spec.ts index ddee18df..ec6a873a 100644 --- a/frontend/src/app/features/user-management/components/user-list/user-list.spec.ts +++ b/frontend/test/unit/app/features/user-management/components/user-list/user-list.spec.ts @@ -1,8 +1,8 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; import { beforeEach, describe, expect, it, vi } from 'vitest'; -import { UserRole } from '../../../../core/models/user-role.enum'; +import { UserRole } from 'src/app/core/models/user-role.enum'; -import { UserListComponent } from './user-list'; +import { UserListComponent } from 'src/app/features/user-management/components/user-list/user-list'; describe('UserListComponent', () => { let component: UserListComponent; diff --git a/frontend/src/app/features/user-management/components/user-management-page/user-management-page.spec.ts b/frontend/test/unit/app/features/user-management/components/user-management-page/user-management-page.spec.ts similarity index 92% rename from frontend/src/app/features/user-management/components/user-management-page/user-management-page.spec.ts rename to frontend/test/unit/app/features/user-management/components/user-management-page/user-management-page.spec.ts index 4d3250ef..72627e33 100644 --- a/frontend/src/app/features/user-management/components/user-management-page/user-management-page.spec.ts +++ b/frontend/test/unit/app/features/user-management/components/user-management-page/user-management-page.spec.ts @@ -2,10 +2,10 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; import { firstValueFrom, of, throwError } from 'rxjs'; import { beforeEach, describe, expect, it, vi } from 'vitest'; -import { UserManagementPageComponent } from './user-management-page.component'; -import { API_BASE_URL } from '../../../../core/tokens/api-base-url.token'; -import { UserApiService } from '../../services/user-api.service'; -import { UserManagementErrorType } from '../../models/user-management-error-type.enum'; +import { UserManagementPageComponent } from 'src/app/features/user-management/components/user-management-page/user-management-page.component'; +import { API_BASE_URL } from 'src/app/core/tokens/api-base-url.token'; +import { UserApiService } from 'src/app/features/user-management/services/user-api.service'; +import { UserManagementErrorType } from 'src/app/features/user-management/models/user-management-error-type.enum'; describe('UserManagementPage', () => { let component: UserManagementPageComponent; diff --git a/frontend/src/app/features/user-management/services/user-api.service.spec.ts b/frontend/test/unit/app/features/user-management/services/user-api.service.spec.ts similarity index 93% rename from frontend/src/app/features/user-management/services/user-api.service.spec.ts rename to frontend/test/unit/app/features/user-management/services/user-api.service.spec.ts index b78554f9..9ca6298b 100644 --- a/frontend/src/app/features/user-management/services/user-api.service.spec.ts +++ b/frontend/test/unit/app/features/user-management/services/user-api.service.spec.ts @@ -2,8 +2,8 @@ import { provideHttpClient } from '@angular/common/http'; import { HttpTestingController, provideHttpClientTesting } from '@angular/common/http/testing'; import { TestBed } from '@angular/core/testing'; import { afterEach, beforeEach, describe, expect, it } from 'vitest'; -import { API_BASE_URL } from '../../../core/tokens/api-base-url.token'; -import { UserApiService } from './user-api.service'; +import { API_BASE_URL } from 'src/app/core/tokens/api-base-url.token'; +import { UserApiService } from 'src/app/features/user-management/services/user-api.service'; describe('UserApiService', () => { let service: UserApiService; diff --git a/frontend/src/app/features/ward-management/components/assign-operator-dialog-component/assign-operator-dialog-component.spec.ts b/frontend/test/unit/app/features/ward-management/components/assign-operator-dialog-component/assign-operator-dialog-component.spec.ts similarity index 92% rename from frontend/src/app/features/ward-management/components/assign-operator-dialog-component/assign-operator-dialog-component.spec.ts rename to frontend/test/unit/app/features/ward-management/components/assign-operator-dialog-component/assign-operator-dialog-component.spec.ts index e870790b..3797888c 100644 --- a/frontend/src/app/features/ward-management/components/assign-operator-dialog-component/assign-operator-dialog-component.spec.ts +++ b/frontend/test/unit/app/features/ward-management/components/assign-operator-dialog-component/assign-operator-dialog-component.spec.ts @@ -1,7 +1,7 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; import { beforeEach, describe, expect, it, vi } from 'vitest'; -import { AssignOperatorDialogComponent } from './assign-operator-dialog-component'; -import { UserRole } from '../../../../core/models/user-role.enum'; +import { AssignOperatorDialogComponent } from 'src/app/features/ward-management/components/assign-operator-dialog-component/assign-operator-dialog-component'; +import { UserRole } from 'src/app/core/models/user-role.enum'; describe('AssignOperatorDialogComponent', () => { let component: AssignOperatorDialogComponent; diff --git a/frontend/src/app/features/ward-management/components/assign-ward-dialog-component/assign-ward-dialog-component.spec.ts b/frontend/test/unit/app/features/ward-management/components/assign-ward-dialog-component/assign-ward-dialog-component.spec.ts similarity index 93% rename from frontend/src/app/features/ward-management/components/assign-ward-dialog-component/assign-ward-dialog-component.spec.ts rename to frontend/test/unit/app/features/ward-management/components/assign-ward-dialog-component/assign-ward-dialog-component.spec.ts index 7d459a41..8937fcf1 100644 --- a/frontend/src/app/features/ward-management/components/assign-ward-dialog-component/assign-ward-dialog-component.spec.ts +++ b/frontend/test/unit/app/features/ward-management/components/assign-ward-dialog-component/assign-ward-dialog-component.spec.ts @@ -1,7 +1,7 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; import { beforeEach, describe, expect, it, vi } from 'vitest'; -import { AssignWardDialogComponent } from './assign-ward-dialog-component'; +import { AssignWardDialogComponent } from 'src/app/features/ward-management/components/assign-ward-dialog-component/assign-ward-dialog-component'; describe('AssignWardDialogComponent', () => { let component: AssignWardDialogComponent; diff --git a/frontend/src/app/features/ward-management/components/ward-card-component/ward-card-component.spec.ts b/frontend/test/unit/app/features/ward-management/components/ward-card-component/ward-card-component.spec.ts similarity index 95% rename from frontend/src/app/features/ward-management/components/ward-card-component/ward-card-component.spec.ts rename to frontend/test/unit/app/features/ward-management/components/ward-card-component/ward-card-component.spec.ts index 0d93868e..22d3a022 100644 --- a/frontend/src/app/features/ward-management/components/ward-card-component/ward-card-component.spec.ts +++ b/frontend/test/unit/app/features/ward-management/components/ward-card-component/ward-card-component.spec.ts @@ -1,8 +1,8 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; import { beforeEach, describe, expect, it, vi } from 'vitest'; -import { UserRole } from '../../../../core/models/user-role.enum'; +import { UserRole } from 'src/app/core/models/user-role.enum'; -import { WardCardComponent } from './ward-card-component'; +import { WardCardComponent } from 'src/app/features/ward-management/components/ward-card-component/ward-card-component'; describe('WardCardComponent', () => { let component: WardCardComponent; diff --git a/frontend/src/app/features/ward-management/components/ward-form-dialog-component/ward-form-dialog-component.spec.ts b/frontend/test/unit/app/features/ward-management/components/ward-form-dialog-component/ward-form-dialog-component.spec.ts similarity index 95% rename from frontend/src/app/features/ward-management/components/ward-form-dialog-component/ward-form-dialog-component.spec.ts rename to frontend/test/unit/app/features/ward-management/components/ward-form-dialog-component/ward-form-dialog-component.spec.ts index 32960bfd..ba467609 100644 --- a/frontend/src/app/features/ward-management/components/ward-form-dialog-component/ward-form-dialog-component.spec.ts +++ b/frontend/test/unit/app/features/ward-management/components/ward-form-dialog-component/ward-form-dialog-component.spec.ts @@ -1,7 +1,7 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; import { beforeEach, describe, expect, it, vi } from 'vitest'; -import { WardFormDialogComponent } from './ward-form-dialog-component'; +import { WardFormDialogComponent } from 'src/app/features/ward-management/components/ward-form-dialog-component/ward-form-dialog-component'; describe('WardFormDialogComponent', () => { let component: WardFormDialogComponent; diff --git a/frontend/src/app/features/ward-management/components/ward-management-page-component/ward-management-page-component.spec.ts b/frontend/test/unit/app/features/ward-management/components/ward-management-page-component/ward-management-page-component.spec.ts similarity index 97% rename from frontend/src/app/features/ward-management/components/ward-management-page-component/ward-management-page-component.spec.ts rename to frontend/test/unit/app/features/ward-management/components/ward-management-page-component/ward-management-page-component.spec.ts index 66aab116..def8c186 100644 --- a/frontend/src/app/features/ward-management/components/ward-management-page-component/ward-management-page-component.spec.ts +++ b/frontend/test/unit/app/features/ward-management/components/ward-management-page-component/ward-management-page-component.spec.ts @@ -1,11 +1,11 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; import { BehaviorSubject, of } from 'rxjs'; import { beforeEach, describe, expect, it, vi } from 'vitest'; -import { UserRole } from '../../../../core/models/user-role.enum'; -import type { Ward } from '../../models/ward.model'; -import { WardManagementStore } from '../../services/ward-management.store'; +import { UserRole } from 'src/app/core/models/user-role.enum'; +import type { Ward } from 'src/app/features/ward-management/models/ward.model'; +import { WardManagementStore } from 'src/app/features/ward-management/services/ward-management.store'; -import { WardManagementPageComponent } from './ward-management-page-component'; +import { WardManagementPageComponent } from 'src/app/features/ward-management/components/ward-management-page-component/ward-management-page-component'; describe('WardManagementPageComponent', () => { let component: WardManagementPageComponent; diff --git a/frontend/src/app/features/ward-management/components/ward-row-component/ward-row-component.spec.ts b/frontend/test/unit/app/features/ward-management/components/ward-row-component/ward-row-component.spec.ts similarity index 89% rename from frontend/src/app/features/ward-management/components/ward-row-component/ward-row-component.spec.ts rename to frontend/test/unit/app/features/ward-management/components/ward-row-component/ward-row-component.spec.ts index bf148915..97da4819 100644 --- a/frontend/src/app/features/ward-management/components/ward-row-component/ward-row-component.spec.ts +++ b/frontend/test/unit/app/features/ward-management/components/ward-row-component/ward-row-component.spec.ts @@ -1,7 +1,7 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; import { beforeEach, describe, expect, it } from 'vitest'; -import { WardRowComponent } from './ward-row-component'; +import { WardRowComponent } from 'src/app/features/ward-management/components/ward-row-component/ward-row-component'; describe('WardRowComponent', () => { let component: WardRowComponent; diff --git a/frontend/src/app/features/ward-management/services/assignment-operations.service.spec.ts b/frontend/test/unit/app/features/ward-management/services/assignment-operations.service.spec.ts similarity index 95% rename from frontend/src/app/features/ward-management/services/assignment-operations.service.spec.ts rename to frontend/test/unit/app/features/ward-management/services/assignment-operations.service.spec.ts index 71022fbe..b4c6393a 100644 --- a/frontend/src/app/features/ward-management/services/assignment-operations.service.spec.ts +++ b/frontend/test/unit/app/features/ward-management/services/assignment-operations.service.spec.ts @@ -2,13 +2,13 @@ import { HttpErrorResponse } from '@angular/common/http'; import { TestBed } from '@angular/core/testing'; import { of, throwError } from 'rxjs'; import { beforeEach, describe, expect, it, vi } from 'vitest'; -import { EventSubscriptionService } from '../../../core/alarm/services/event-subscription.service'; -import { UserRole } from '../../../core/models/user-role.enum'; -import type { WardSummaryDto } from '../models/ward-api.dto'; -import type { Ward } from '../models/ward.model'; -import { AssignmentOperationsService } from './assignment-operations.service'; -import { WardApiService } from './ward-api.service'; -import { WardStore } from './ward.store'; +import { EventSubscriptionService } from 'src/app/core/alarm/services/event-subscription.service'; +import { UserRole } from 'src/app/core/models/user-role.enum'; +import type { WardSummaryDto } from 'src/app/features/ward-management/models/ward-api.dto'; +import type { Ward } from 'src/app/features/ward-management/models/ward.model'; +import { AssignmentOperationsService } from 'src/app/features/ward-management/services/assignment-operations.service'; +import { WardApiService } from 'src/app/features/ward-management/services/ward-api.service'; +import { WardStore } from 'src/app/features/ward-management/services/ward.store'; describe('AssignmentOperationsService', () => { let service: AssignmentOperationsService; diff --git a/frontend/src/app/features/ward-management/services/ward-api.service.spec.ts b/frontend/test/unit/app/features/ward-management/services/ward-api.service.spec.ts similarity index 94% rename from frontend/src/app/features/ward-management/services/ward-api.service.spec.ts rename to frontend/test/unit/app/features/ward-management/services/ward-api.service.spec.ts index 55213026..72f6e23d 100644 --- a/frontend/src/app/features/ward-management/services/ward-api.service.spec.ts +++ b/frontend/test/unit/app/features/ward-management/services/ward-api.service.spec.ts @@ -2,11 +2,11 @@ import { HttpTestingController, provideHttpClientTesting } from '@angular/common import { TestBed } from '@angular/core/testing'; import { provideHttpClient } from '@angular/common/http'; import { describe, expect, it, beforeEach, afterEach } from 'vitest'; -import { UserRole } from '../../../core/models/user-role.enum'; -import { API_BASE_URL } from '../../../core/tokens/api-base-url.token'; -import type { CreateWardDto } from '../models/ward-api.dto'; -import type { Ward } from '../models/ward.model'; -import { WardApiService } from './ward-api.service'; +import { UserRole } from 'src/app/core/models/user-role.enum'; +import { API_BASE_URL } from 'src/app/core/tokens/api-base-url.token'; +import type { CreateWardDto } from 'src/app/features/ward-management/models/ward-api.dto'; +import type { Ward } from 'src/app/features/ward-management/models/ward.model'; +import { WardApiService } from 'src/app/features/ward-management/services/ward-api.service'; describe('WardApiService', () => { let service: WardApiService; diff --git a/frontend/src/app/features/ward-management/services/ward-management.store.spec.ts b/frontend/test/unit/app/features/ward-management/services/ward-management.store.spec.ts similarity index 92% rename from frontend/src/app/features/ward-management/services/ward-management.store.spec.ts rename to frontend/test/unit/app/features/ward-management/services/ward-management.store.spec.ts index 70e363df..62e324b5 100644 --- a/frontend/src/app/features/ward-management/services/ward-management.store.spec.ts +++ b/frontend/test/unit/app/features/ward-management/services/ward-management.store.spec.ts @@ -1,11 +1,11 @@ import { TestBed } from '@angular/core/testing'; import { firstValueFrom, of, throwError } from 'rxjs'; import { beforeEach, describe, expect, it, vi } from 'vitest'; -import { UserRole } from '../../../core/models/user-role.enum'; -import { AssignmentOperationsService } from './assignment-operations.service'; -import { WardManagementStore } from './ward-management.store'; -import { WardOperationsService } from './ward-operations.service'; -import { WardStore } from './ward.store'; +import { UserRole } from 'src/app/core/models/user-role.enum'; +import { AssignmentOperationsService } from 'src/app/features/ward-management/services/assignment-operations.service'; +import { WardManagementStore } from 'src/app/features/ward-management/services/ward-management.store'; +import { WardOperationsService } from 'src/app/features/ward-management/services/ward-operations.service'; +import { WardStore } from 'src/app/features/ward-management/services/ward.store'; describe('WardManagementStore', () => { let store: WardManagementStore; diff --git a/frontend/src/app/features/ward-management/services/ward-operations.service.spec.ts b/frontend/test/unit/app/features/ward-management/services/ward-operations.service.spec.ts similarity index 95% rename from frontend/src/app/features/ward-management/services/ward-operations.service.spec.ts rename to frontend/test/unit/app/features/ward-management/services/ward-operations.service.spec.ts index dd85d4dc..281069dc 100644 --- a/frontend/src/app/features/ward-management/services/ward-operations.service.spec.ts +++ b/frontend/test/unit/app/features/ward-management/services/ward-operations.service.spec.ts @@ -2,12 +2,12 @@ import { HttpErrorResponse } from '@angular/common/http'; import { TestBed } from '@angular/core/testing'; import { of, throwError } from 'rxjs'; import { beforeEach, describe, expect, it, vi } from 'vitest'; -import { UserRole } from '../../../core/models/user-role.enum'; -import type { WardSummaryDto } from '../models/ward-api.dto'; -import type { Ward } from '../models/ward.model'; -import { WardApiService } from './ward-api.service'; -import { WardOperationsService } from './ward-operations.service'; -import { WardStore } from './ward.store'; +import { UserRole } from 'src/app/core/models/user-role.enum'; +import type { WardSummaryDto } from 'src/app/features/ward-management/models/ward-api.dto'; +import type { Ward } from 'src/app/features/ward-management/models/ward.model'; +import { WardApiService } from 'src/app/features/ward-management/services/ward-api.service'; +import { WardOperationsService } from 'src/app/features/ward-management/services/ward-operations.service'; +import { WardStore } from 'src/app/features/ward-management/services/ward.store'; describe('WardOperationsService', () => { let service: WardOperationsService; diff --git a/frontend/src/app/features/ward-management/services/ward.store.spec.ts b/frontend/test/unit/app/features/ward-management/services/ward.store.spec.ts similarity index 92% rename from frontend/src/app/features/ward-management/services/ward.store.spec.ts rename to frontend/test/unit/app/features/ward-management/services/ward.store.spec.ts index f3423c60..0c219e13 100644 --- a/frontend/src/app/features/ward-management/services/ward.store.spec.ts +++ b/frontend/test/unit/app/features/ward-management/services/ward.store.spec.ts @@ -1,8 +1,8 @@ import { firstValueFrom } from 'rxjs'; import { beforeEach, describe, expect, it } from 'vitest'; -import { UserRole } from '../../../core/models/user-role.enum'; -import type { Ward } from '../models/ward.model'; -import { WardStore } from './ward.store'; +import { UserRole } from 'src/app/core/models/user-role.enum'; +import type { Ward } from 'src/app/features/ward-management/models/ward.model'; +import { WardStore } from 'src/app/features/ward-management/services/ward.store'; describe('WardStore', () => { let store: WardStore; diff --git a/frontend/src/app/shared/components/alarm-table/alarm-action-button.component.spec.ts b/frontend/test/unit/app/shared/components/alarm-table/alarm-action-button.component.spec.ts similarity index 96% rename from frontend/src/app/shared/components/alarm-table/alarm-action-button.component.spec.ts rename to frontend/test/unit/app/shared/components/alarm-table/alarm-action-button.component.spec.ts index fc02acaf..7bee700e 100644 --- a/frontend/src/app/shared/components/alarm-table/alarm-action-button.component.spec.ts +++ b/frontend/test/unit/app/shared/components/alarm-table/alarm-action-button.component.spec.ts @@ -1,6 +1,6 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; import { beforeEach, describe, expect, it, vi } from 'vitest'; -import { AlarmActionButtonComponent } from './alarm-action-button.component'; +import { AlarmActionButtonComponent } from 'src/app/shared/components/alarm-table/alarm-action-button.component'; describe('AlarmActionButtonComponent', () => { let fixture: ComponentFixture; diff --git a/frontend/src/app/shared/components/alarm-table/alarm-priority-indicator.component.spec.ts b/frontend/test/unit/app/shared/components/alarm-table/alarm-priority-indicator.component.spec.ts similarity index 89% rename from frontend/src/app/shared/components/alarm-table/alarm-priority-indicator.component.spec.ts rename to frontend/test/unit/app/shared/components/alarm-table/alarm-priority-indicator.component.spec.ts index 4d038b2d..981489d5 100644 --- a/frontend/src/app/shared/components/alarm-table/alarm-priority-indicator.component.spec.ts +++ b/frontend/test/unit/app/shared/components/alarm-table/alarm-priority-indicator.component.spec.ts @@ -1,7 +1,7 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; import { beforeEach, describe, expect, it } from 'vitest'; -import { AlarmPriority } from '../../../core/alarm/models/alarm-priority.enum'; -import { AlarmPriorityIndicatorComponent } from './alarm-priority-indicator.component'; +import { AlarmPriority } from 'src/app/core/alarm/models/alarm-priority.enum'; +import { AlarmPriorityIndicatorComponent } from 'src/app/shared/components/alarm-table/alarm-priority-indicator.component'; describe('AlarmPriorityIndicatorComponent', () => { let fixture: ComponentFixture; diff --git a/frontend/src/app/shared/components/alarm-table/alarm-table-shell.component.spec.ts b/frontend/test/unit/app/shared/components/alarm-table/alarm-table-shell.component.spec.ts similarity index 95% rename from frontend/src/app/shared/components/alarm-table/alarm-table-shell.component.spec.ts rename to frontend/test/unit/app/shared/components/alarm-table/alarm-table-shell.component.spec.ts index 88ea782e..7a65edb6 100644 --- a/frontend/src/app/shared/components/alarm-table/alarm-table-shell.component.spec.ts +++ b/frontend/test/unit/app/shared/components/alarm-table/alarm-table-shell.component.spec.ts @@ -1,7 +1,7 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; import { Component } from '@angular/core'; import { beforeEach, describe, expect, it, vi } from 'vitest'; -import { AlarmTableShellComponent } from './alarm-table-shell.component'; +import { AlarmTableShellComponent } from 'src/app/shared/components/alarm-table/alarm-table-shell.component'; @Component({ standalone: true, diff --git a/frontend/src/app/shared/components/alarm-table/alarm-toggle-switch.component.spec.ts b/frontend/test/unit/app/shared/components/alarm-table/alarm-toggle-switch.component.spec.ts similarity index 95% rename from frontend/src/app/shared/components/alarm-table/alarm-toggle-switch.component.spec.ts rename to frontend/test/unit/app/shared/components/alarm-table/alarm-toggle-switch.component.spec.ts index e6c88af7..d3b4f12f 100644 --- a/frontend/src/app/shared/components/alarm-table/alarm-toggle-switch.component.spec.ts +++ b/frontend/test/unit/app/shared/components/alarm-table/alarm-toggle-switch.component.spec.ts @@ -1,6 +1,6 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; import { beforeEach, describe, expect, it, vi } from 'vitest'; -import { AlarmToggleSwitchComponent } from './alarm-toggle-switch.component'; +import { AlarmToggleSwitchComponent } from 'src/app/shared/components/alarm-table/alarm-toggle-switch.component'; describe('AlarmToggleSwitchComponent', () => { let fixture: ComponentFixture; diff --git a/frontend/src/app/shared/components/confirm-dialog/confirm-dialog.component.spec.ts b/frontend/test/unit/app/shared/components/confirm-dialog/confirm-dialog.component.spec.ts similarity index 95% rename from frontend/src/app/shared/components/confirm-dialog/confirm-dialog.component.spec.ts rename to frontend/test/unit/app/shared/components/confirm-dialog/confirm-dialog.component.spec.ts index 2ddbdd66..eabfcf1c 100644 --- a/frontend/src/app/shared/components/confirm-dialog/confirm-dialog.component.spec.ts +++ b/frontend/test/unit/app/shared/components/confirm-dialog/confirm-dialog.component.spec.ts @@ -1,6 +1,6 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; import { beforeEach, describe, expect, it, vi } from 'vitest'; -import { ConfirmDialogComponent } from './confirm-dialog.component'; +import { ConfirmDialogComponent } from 'src/app/shared/components/confirm-dialog/confirm-dialog.component'; describe('ConfirmDialogComponent', () => { let fixture: ComponentFixture; diff --git a/frontend/src/app/shared/components/modal-shell/modal-shell.component.spec.ts b/frontend/test/unit/app/shared/components/modal-shell/modal-shell.component.spec.ts similarity index 95% rename from frontend/src/app/shared/components/modal-shell/modal-shell.component.spec.ts rename to frontend/test/unit/app/shared/components/modal-shell/modal-shell.component.spec.ts index 0a82b87f..631f87a5 100644 --- a/frontend/src/app/shared/components/modal-shell/modal-shell.component.spec.ts +++ b/frontend/test/unit/app/shared/components/modal-shell/modal-shell.component.spec.ts @@ -1,6 +1,6 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; import { beforeEach, describe, expect, it, vi } from 'vitest'; -import { ModalShellComponent } from './modal-shell.component'; +import { ModalShellComponent } from 'src/app/shared/components/modal-shell/modal-shell.component'; describe('ModalShellComponent', () => { let fixture: ComponentFixture; diff --git a/frontend/src/app/shared/models/device-taxonomy.spec.ts b/frontend/test/unit/app/shared/models/device-taxonomy.spec.ts similarity index 96% rename from frontend/src/app/shared/models/device-taxonomy.spec.ts rename to frontend/test/unit/app/shared/models/device-taxonomy.spec.ts index 28636784..a6e614ab 100644 --- a/frontend/src/app/shared/models/device-taxonomy.spec.ts +++ b/frontend/test/unit/app/shared/models/device-taxonomy.spec.ts @@ -1,11 +1,11 @@ import { describe, expect, it } from 'vitest'; -import { DeviceType } from '../../features/device-interaction/models/device-type.enum'; +import { DeviceType } from 'src/app/features/device-interaction/models/device-type.enum'; import { getDeviceTypeLabel, getDiscoveredUnmappedSfeCodes, getEndpointLabel, resolveDeviceType, -} from './device-taxonomy'; +} from 'src/app/shared/models/device-taxonomy'; describe('device-taxonomy', () => { it('resolves thermostat when type token is explicit', () => { diff --git a/frontend/src/app/shared/pipes/elapsed-time.pipe.spec.ts b/frontend/test/unit/app/shared/pipes/elapsed-time.pipe.spec.ts similarity index 95% rename from frontend/src/app/shared/pipes/elapsed-time.pipe.spec.ts rename to frontend/test/unit/app/shared/pipes/elapsed-time.pipe.spec.ts index fa6ad355..54e16341 100644 --- a/frontend/src/app/shared/pipes/elapsed-time.pipe.spec.ts +++ b/frontend/test/unit/app/shared/pipes/elapsed-time.pipe.spec.ts @@ -1,5 +1,5 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'; -import { ElapsedTimePipe } from './elapsed-time.pipe'; +import { ElapsedTimePipe } from 'src/app/shared/pipes/elapsed-time.pipe'; describe('ElapsedTimePipe', () => { let pipe: ElapsedTimePipe; diff --git a/frontend/src/environments/environment.spec.ts b/frontend/test/unit/environments/environment.spec.ts similarity index 81% rename from frontend/src/environments/environment.spec.ts rename to frontend/test/unit/environments/environment.spec.ts index c383efb4..a9dfb69a 100644 --- a/frontend/src/environments/environment.spec.ts +++ b/frontend/test/unit/environments/environment.spec.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest'; -import { environment } from './environment'; +import { environment } from 'src/environments/environment'; describe('environment', () => { it('espone la configurazione base attesa', () => { diff --git a/frontend/test/unit/setup/canvas.mock.ts b/frontend/test/unit/setup/canvas.mock.ts new file mode 100644 index 00000000..ef60b850 --- /dev/null +++ b/frontend/test/unit/setup/canvas.mock.ts @@ -0,0 +1,50 @@ +// minimal canvas mock per reprimere i warning jsdom getContext nei test relativi ai charts +Object.defineProperty(HTMLCanvasElement.prototype, 'getContext', { + configurable: true, + value: function getContextMock() { + return { + canvas: this, + fillRect: () => {}, + clearRect: () => {}, + getImageData: () => ({ data: new Uint8ClampedArray(0) }), + putImageData: () => {}, + createImageData: () => ({ data: new Uint8ClampedArray(0) }), + setTransform: () => {}, + drawImage: () => {}, + save: () => {}, + restore: () => {}, + beginPath: () => {}, + closePath: () => {}, + moveTo: () => {}, + lineTo: () => {}, + arc: () => {}, + stroke: () => {}, + fill: () => {}, + measureText: () => ({ width: 0 }), + transform: () => {}, + rect: () => {}, + clip: () => {}, + scale: () => {}, + rotate: () => {}, + translate: () => {}, + resetTransform: () => {}, + setLineDash: () => {}, + getLineDash: () => [], + strokeText: () => {}, + fillText: () => {}, + createLinearGradient: () => ({ addColorStop: () => {} }), + createRadialGradient: () => ({ addColorStop: () => {} }), + createPattern: () => null, + } as unknown as CanvasRenderingContext2D; + }, +}); + +if (typeof globalThis.ResizeObserver === 'undefined') { + class ResizeObserverMock { + observe(): void {} + unobserve(): void {} + disconnect(): void {} + } + + (globalThis as typeof globalThis & { ResizeObserver: typeof ResizeObserverMock }).ResizeObserver = ResizeObserverMock; +} diff --git a/frontend/tsconfig.integration.json b/frontend/tsconfig.integration.json new file mode 100644 index 00000000..9410553b --- /dev/null +++ b/frontend/tsconfig.integration.json @@ -0,0 +1,18 @@ +/* To learn more about Typescript configuration file: https://www.typescriptlang.org/docs/handbook/tsconfig-json.html. */ +/* To learn more about Angular compiler options: https://angular.dev/reference/configs/angular-compiler-options. */ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "./out-tsc/integration", + "baseUrl": ".", + "types": [ + "vitest/globals" + ] + }, + "include": [ + "test/integration/**/*.integration.spec.ts", + "test/unit/setup/**/*.ts", + "src/**/*.d.ts", + "test/integration/**/*.d.ts" + ] +} diff --git a/frontend/tsconfig.spec.json b/frontend/tsconfig.spec.json index c4d90253..9a40baba 100644 --- a/frontend/tsconfig.spec.json +++ b/frontend/tsconfig.spec.json @@ -4,13 +4,15 @@ "extends": "./tsconfig.json", "compilerOptions": { "outDir": "./out-tsc/spec", + "baseUrl": ".", "types": [ "vitest/globals" ] }, "include": [ - "src/**/*.spec.ts", + "test/unit/**/*.spec.ts", + "test/unit/setup/**/*.ts", "src/**/*.d.ts", - "src/app/features/dashboard/components/dashboard-page.component.spec.ts" + "test/unit/**/*.d.ts" ] } diff --git a/readme.md b/readme.md index 9061ad81..be7885cc 100644 --- a/readme.md +++ b/readme.md @@ -1 +1,87 @@ -Per buildare il progetto: `docker compose up` +# MVP + +Guida rapida per scaricare e avviare l'applicativo in locale. + +## Requisiti +1. `node.js` 24.x +2. `npm` 11.x +3. `Docker` con `Docker Compose` + +Verifica: + +```bash +node --version +npm --version +docker --version +docker compose version +``` + +## Avvio rapido + +### 1) Clona il repository + +```bash +git clone https://github.com/SnakeByteTeam/MVP.git +cd MVP +``` + +### 2) Controlla il file ambiente + +Nella root deve esserci il file `.env`. + +Maggiori dettagli nel Manuale utente. + +### 4) Avvia i servizi Docker + +```bash +docker compose up -d --build +``` + +Quando i container sono pronti, apri: + +- `http://localhost` + +## Stop servizi + +```bash +docker compose down +``` + +Reset completo (anche volume database): + +```bash +docker compose down -v +``` + +### Test backend + +```bash +cd backend +npm install +npm test +npm run test:e2e +npm run test unit +npm run test integration +``` + +### Test frontend + +```bash +cd frontend +npm install +npm test +npm test:unit +npm test:integration +npm run e2e +``` + +## Troubleshooting + +1. `http://localhost` non risponde. + Verifica che i container `database`, `server`, `nginx` siano in esecuzione con `docker compose ps`. + +2. Errore sulle variabili ambiente. + Controlla il file `.env` nella root e la presenza delle variabili d'ambiente. + +3. Il backend parte ma non si connette al DB. + Attendi l'healthcheck del database oppure riavvia con `docker compose up --build`.